ZGlmZiAtLWdpdCBhLy5naXRpZ25vcmUgYi8uZ2l0aWdub3JlCmluZGV4IDQ5Mjk5ZWUuLjg4MDk0MzUgMTAwNjQ0Ci0tLSBhLy5naXRpZ25vcmUKKysrIGIvLmdpdGlnbm9yZQpAQCAtMSwzICsxLDcgQEAKKyMgVHdvLXRyaWNrIHBvbnkgZm9yIE9TWCBhbmQgb3RoZXIgY2FzZSBpbnNlbnNpdGl2ZSBmaWxlIHN5c3RlbXM6CisjIElnbm9yZSAuL3B5dGhvbiBiaW5hcnkgb24gVW5peCBidXQgc3RpbGwgbG9vayBpbnRvIC4vUHl0aG9uLyBkaXJlY3RvcnkuCisvcHl0aG9uCishL1B5dGhvbi8qKgogKi5jb3ZlcgogKi5vCiAqLm9yaWcKQEAgLTE1LDExICsxOSwxMyBAQAogRG9jL3Rvb2xzL3B5Z21lbnRzLwogRG9jL3Rvb2xzL3NwaGlueC8KIExpYi9saWIydG8zLyoucGlja2xlCitMaWIvdGVzdC9kYXRhLyoKIExpYi9fc3lzY29uZmlnZGF0YS5weQogTGliL3BsYXQtbWFjL2Vycm9ycy5yc3JjLmRmLnJzcmMKIE1ha2VmaWxlCiBNYWtlZmlsZS5wcmUKIE1pc2MvcHl0aG9uLnBjCitNaXNjL3B5dGhvbi1jb25maWcuc2gKIE1vZHVsZXMvU2V0dXAKIE1vZHVsZXMvU2V0dXAuY29uZmlnCiBNb2R1bGVzL1NldHVwLmxvY2FsCkBAIC01Niw3ICs2Miw4IEBACiBwbGF0Zm9ybQogcHlidWlsZGRpci50eHQKIHB5Y29uZmlnLmgKLXB5dGhvbgorcHl0aG9uLWNvbmZpZworcHl0aG9uLWNvbmZpZy5weQogcHl0aG9uLmV4ZQogcHl0aG9uLWdkYi5weQogcHl0aG9uLmV4ZS1nZGIucHkKQEAgLTY2LDQgKzczLDUgQEAKIFRBR1MKIC5jb3ZlcmFnZQogY292ZXJhZ2UvCitleHRlcm5hbHMvCiBodG1sY292LwpkaWZmIC0tZ2l0IGEvLmhnZW9sIGIvLmhnZW9sCmluZGV4IDczYTQ3NzAuLjA1NTU3ODUgMTAwNjQ0Ci0tLSBhLy5oZ2VvbAorKysgYi8uaGdlb2wKQEAgLTI2LDYgKzI2LDcgQEAKICoqLnBzZCAgPSBCSU4KICoqLnRhciAgPSBCSU4KICoqLndhdiAgPSBCSU4KKyoqLndobCAgPSBCSU4KICoqLnhhciAgPSBCSU4KICoqLnppcCAgPSBCSU4KIApAQCAtMzksNiArNDAsMTIgQEAKIAogTGliL3Rlc3QvY29kaW5nMjA3MzEucHkgPSBCSU4KIAorIyBXaW5kb3dzIGJhdGNoIGZpbGVzIHdvcmsgYmVzdCB3aXRoIENSTEYsIHRoZXJlIGNhbiBiZSBzdWJ0bGUgcHJvYmxlbXMgd2l0aCBMRgorKiouYmF0ID0gQ1JMRgorCisjIFRoZSBXaW5kb3dzIHJlYWRtZSBpcyBsaWtlbHkgdG8gYmUgcmVhZCBpbiBOb3RlcGFkLCBzbyBtYWtlIGl0IHJlYWRhYmxlCitQQ2J1aWxkL3JlYWRtZS50eHQgPSBDUkxGCisKICMgQWxsIG90aGVyIGZpbGVzICh3aGljaCBwcmVzdW1hYmx5IGFyZSBodW1hbi1lZGl0YWJsZSkgYXJlICJuYXRpdmUiLgogIyBUaGlzIG11c3QgYmUgdGhlIGxhc3QgcnVsZSEKIApkaWZmIC0tZ2l0IGEvLmhnaWdub3JlIGIvLmhnaWdub3JlCmluZGV4IGM0MmRkMDMuLjllNWE1ODMgMTAwNjQ0Ci0tLSBhLy5oZ2lnbm9yZQorKysgYi8uaGdpZ25vcmUKQEAgLTE5LDIxICsxOSwyMCBAQAogcHljb25maWcuaCQKIHB5dGhvbiQKIHB5dGhvbi5leGUkCitweXRob24tY29uZmlnJAorcHl0aG9uLWNvbmZpZy5weSQKIHJlZmxvZy50eHQkCiB0YWdzJAogTGliL3BsYXQtbWFjL2Vycm9ycy5yc3JjLmRmLnJzcmMKLURvYy90b29scy9zcGhpbngvCi1Eb2MvdG9vbHMvZG9jdXRpbHMvCi1Eb2MvdG9vbHMvamluamEvCi1Eb2MvdG9vbHMvamluamEyLwotRG9jL3Rvb2xzL3B5Z21lbnRzLwogTWlzYy9weXRob24ucGMKK01pc2MvcHl0aG9uLWNvbmZpZy5zaCQKIE1vZHVsZXMvU2V0dXAkCiBNb2R1bGVzL1NldHVwLmNvbmZpZwogTW9kdWxlcy9TZXR1cC5sb2NhbAogTW9kdWxlcy9jb25maWcuYwogTW9kdWxlcy9sZF9zb19haXgkCiBQYXJzZXIvcGdlbiQKK15sY292LXJlcG9ydC8KIF5jb3JlCiBecHl0aG9uLWdkYi5weQogXnB5dGhvbi5leGUtZ2RiLnB5CkBAIC04MSwxMSArODAsMjEgQEAKIFBDYnVpbGQvKi4qc2RmCiBQQ2J1aWxkL1dpbjMyLXRlbXAtKgogUENidWlsZC94NjQtdGVtcC0qCitQQ2J1aWxkLyotcGdpCitQQ2J1aWxkLyotcGdvCiBQQ2J1aWxkL2FtZDY0CitQQ2J1aWxkL2lwY2gKK1Rvb2xzL3VuaWNvZGUvYnVpbGQvCitUb29scy91bmljb2RlL01BUFBJTkdTLwogQnVpbGRMb2cuaHRtCiBfX3B5Y2FjaGVfXwogTW9kdWxlcy9fZnJlZXplX2ltcG9ydGxpYgogTW9kdWxlcy9fdGVzdGVtYmVkCiAuY292ZXJhZ2UKIGNvdmVyYWdlLworZXh0ZXJuYWxzLwogaHRtbGNvdi8KKyouZ2NkYQorKi5nY25vCisqLmdjb3YKK2NvdmVyYWdlLmluZm8KZGlmZiAtLWdpdCBhLy5oZ3RhZ3MgYi8uaGd0YWdzCmluZGV4IDRhYmJjNzEuLjRjNzE0NzkgMTAwNjQ0Ci0tLSBhLy5oZ3RhZ3MKKysrIGIvLmhndGFncwpAQCAtMTI3LDMgKzEyNywyMiBAQAogNjJjZjRlNzdmNzg1NjQ3MTRlN2VhM2Q0YmYxNDc5Y2ExZmJkMDc1OCB2My4zLjUKIDUxMzE3Yzk3ODZmNTQyNjc5NzVhYmYyZTljNTAyZTZhYWFhNGEyNDkgdjMuMy42cmMxCiA5NzFmZWMzMGRhMWZjNWJmMmI5ZmIyOGUwOTgxMmE1MTI3MDE0MjExIHYzLjMuNgorNDY1MzVmNjVlN2YzYmNkY2YxNzZmMzZkMzRiYzFmZWQ3MTlmZmQyYiB2My40LjBhMQorOTI2NWEyMTY4ZTJjYjJhODQ3ODVkODcxNzc5MmFjYzY2MWU2YjY5MiB2My40LjBhMgorZGQ5Y2RmOTBhNTA3MzUxMDg3N2U5ZGQ1MTEyZjhlNmNmMjBkNWU4OSB2My40LjBhMworZTI0NWIwZDcyMDliYjZkMGUxOTMxNmUxZTJhZjFhYTljMjEzOTEwNCB2My40LjBhNAorMzQwNWRjOWE2YWZhYTBhMDZkZDFmNmYxODJlYzVjOTk4ZGNlNmY1ZiB2My40LjBiMQorYmEzMjkxM2ViMTNlYzU0NWE0NmRkMGNlMTgwMzViNmM0MTZmMGQ3OCB2My40LjBiMgorYTk3Y2UzZWNjOTZhZjc5YmQyZTFhYzY2Y2U0OGQ5MTM4ZTBjYTc0OSB2My40LjBiMworNWUwODhjZWE4NjYwNjc3OTY5MTEzNzQxYzEzMTNkNTcwZDk3N2UwMiB2My40LjByYzEKK2EzMDA3MTJlZDM4YzlhMjQyYjczNmM0NGU4MDZjYWVhMjVhNmRjMDUgdjMuNC4wcmMyCis4YTgxY2RhYjNlOWQ1MjFkYWFlZjk4OWZhZGU5NGIxNjQ1NWZjM2I4IHYzLjQuMHJjMworMDRmNzE0NzY1YzEzODI0YzNiYzI4MzVkN2IwMDg5MDg4NjJlMDgzYSB2My40LjAKK2M2N2ExOWUxMWE3MTkxYmFmMzBmMzEzYmY1NWUyZTBiNmM2ZjU3NGUgdjMuNC4xcmMxCitjMGUzMTFlMDEwZmNiNWJhZThkODdjYTIyMDUxY2QwODQ1ZWEwY2EwIHYzLjQuMQorODcxMWEwOTUxMzg0OGNmYzQ4YzY4OWQ5ODM0OTVlZTY0ZjQ2NjhjYSB2My40LjJyYzEKK2FiMmMwMjNhOTQzMmYxNjY1MmU4OWM0MDRiYmM4NGFhOTFiZjU1YWYgdjMuNC4yCis2OWRkNTI4Y2E2MjU1YTY2YzM3Y2M1Y2Y2ODBlODM1N2QxMDhiMDM2IHYzLjQuM3JjMQorYjRjYmVjYmMwNzgxZTg5YTMwOWQwM2I2MGExZjc1Zjg0OTkyNTBlNiB2My40LjMKKzA0ZjNmNzI1ODk2YzY5NjEyMTJjM2ExMmU4YWMyNWJlNjk1OGY0ZmEgdjMuNC40cmMxCis3MzdlZmNhZGY1YTY3OGIxODRlMGZhNDMxYWFlMTEyNzZiZjA2NjQ4IHYzLjQuNApkaWZmIC0tZ2l0IGEvLmhndG91Y2ggYi8uaGd0b3VjaAppbmRleCBhNjI5ZGU5Li43ZTNhNWU3IDEwMDY0NAotLS0gYS8uaGd0b3VjaAorKysgYi8uaGd0b3VjaApAQCAtNCw4ICs0LDcgQEAKIAogUHl0aG9uL2ltcG9ydGxpYi5oOiBMaWIvaW1wb3J0bGliL19ib290c3RyYXAucHkgTW9kdWxlcy9fZnJlZXplX2ltcG9ydGxpYi5jCiAKLUluY2x1ZGUvYXN0Lmg6IFBhcnNlci9QeXRob24uYXNkbCBQYXJzZXIvYXNkbC5weSBQYXJzZXIvYXNkbF9jLnB5Ci1JbmNsdWRlL1B5dGhvbi1hc3QuaDogSW5jbHVkZS9hc3QuaAorSW5jbHVkZS9QeXRob24tYXN0Lmg6IFBhcnNlci9QeXRob24uYXNkbCBQYXJzZXIvYXNkbC5weSBQYXJzZXIvYXNkbF9jLnB5CiBQeXRob24vUHl0aG9uLWFzdC5jOiBJbmNsdWRlL1B5dGhvbi1hc3QuaAogCiBQeXRob24vb3Bjb2RlX3RhcmdldHMuaDogUHl0aG9uL21ha2VvcGNvZGV0YXJnZXRzLnB5IExpYi9vcGNvZGUucHkKZGlmZiAtLWdpdCBhL0RvYy9NYWtlZmlsZSBiL0RvYy9NYWtlZmlsZQppbmRleCA4MmY1YmVmLi5lYTMwMjMxIDEwMDY0NAotLS0gYS9Eb2MvTWFrZWZpbGUKKysrIGIvRG9jL01ha2VmaWxlCkBAIC01LDI0ICs1LDIzIEBACiAKICMgWW91IGNhbiBzZXQgdGhlc2UgdmFyaWFibGVzIGZyb20gdGhlIGNvbW1hbmQgbGluZS4KIFBZVEhPTiAgICAgICA9IHB5dGhvbgotU1ZOUk9PVCAgICAgID0gaHR0cDovL3N2bi5weXRob24ub3JnL3Byb2plY3RzCi1TUEhJTlhPUFRTICAgPQorU1BISU5YQlVJTEQgID0gc3BoaW54LWJ1aWxkCiBQQVBFUiAgICAgICAgPQogU09VUkNFUyAgICAgID0KLURJU1RWRVJTSU9OICA9ICQoc2hlbGwgJChQWVRIT04pIHRvb2xzL3NwaGlueGV4dC9wYXRjaGxldmVsLnB5KQorRElTVFZFUlNJT04gID0gJChzaGVsbCAkKFBZVEhPTikgdG9vbHMvZXh0ZW5zaW9ucy9wYXRjaGxldmVsLnB5KQogCiBBTExTUEhJTlhPUFRTID0gLWIgJChCVUlMREVSKSAtZCBidWlsZC9kb2N0cmVlcyAtRCBsYXRleF9wYXBlcl9zaXplPSQoUEFQRVIpIFwKICAgICAgICAgICAgICAgICAkKFNQSElOWE9QVFMpIC4gYnVpbGQvJChCVUlMREVSKSAkKFNPVVJDRVMpCiAKLS5QSE9OWTogaGVscCBjaGVja291dCB1cGRhdGUgYnVpbGQgaHRtbCBodG1saGVscCBsYXRleCB0ZXh0IGNoYW5nZXMgbGlua2NoZWNrIFwKKy5QSE9OWTogaGVscCBidWlsZCBodG1sIGh0bWxoZWxwIGxhdGV4IHRleHQgY2hhbmdlcyBsaW5rY2hlY2sgXAogCXN1c3BpY2lvdXMgY292ZXJhZ2UgZG9jdGVzdCBweWRvYy10b3BpY3MgaHRtbHZpZXcgY2xlYW4gZGlzdCBjaGVjayBzZXJ2ZSBcCiAJYXV0b2J1aWxkLWRldiBhdXRvYnVpbGQtc3RhYmxlCiAKIGhlbHA6CiAJQGVjaG8gIlBsZWFzZSB1c2UgXGBtYWtlIDx0YXJnZXQ+JyB3aGVyZSA8dGFyZ2V0PiBpcyBvbmUgb2YiCiAJQGVjaG8gIiAgY2xlYW4gICAgICB0byByZW1vdmUgYnVpbGQgZmlsZXMiCi0JQGVjaG8gIiAgdXBkYXRlICAgICB0byB1cGRhdGUgYnVpbGQgdG9vbHMiCiAJQGVjaG8gIiAgaHRtbCAgICAgICB0byBtYWtlIHN0YW5kYWxvbmUgSFRNTCBmaWxlcyIKKwlAZWNobyAiICBodG1sdmlldyAgIHRvIG9wZW4gdGhlIGluZGV4IHBhZ2UgYnVpbHQgYnkgdGhlIGh0bWwgdGFyZ2V0IGluIHlvdXIgYnJvd3NlciIKIAlAZWNobyAiICBodG1saGVscCAgIHRvIG1ha2UgSFRNTCBmaWxlcyBhbmQgYSBIVE1MIGhlbHAgcHJvamVjdCIKIAlAZWNobyAiICBsYXRleCAgICAgIHRvIG1ha2UgTGFUZVggZmlsZXMsIHlvdSBjYW4gc2V0IFBBUEVSPWE0IG9yIFBBUEVSPWxldHRlciIKIAlAZWNobyAiICB0ZXh0ICAgICAgIHRvIG1ha2UgcGxhaW4gdGV4dCBmaWxlcyIKQEAgLTM3LDMwICszNiw4IEBACiAJQGVjaG8gIiAgY2hlY2sgICAgICB0byBydW4gYSBjaGVjayBmb3IgZnJlcXVlbnQgbWFya3VwIGVycm9ycyIKIAlAZWNobyAiICBzZXJ2ZSAgICAgIHRvIHNlcnZlIHRoZSBkb2N1bWVudGF0aW9uIG9uIHRoZSBsb2NhbGhvc3QgKDgwMDApIgogCi0jIE5vdGU6IGlmIHlvdSB1cGRhdGUgdmVyc2lvbnMgaGVyZSwgZG8gdGhlIHNhbWUgaW4gbWFrZS5iYXQgYW5kIFJFQURNRS50eHQKLWNoZWNrb3V0OgotCUBpZiBbICEgLWQgdG9vbHMvc3BoaW54IF07IHRoZW4gXAotCSAgZWNobyAiQ2hlY2tpbmcgb3V0IFNwaGlueC4uLiI7IFwKLQkgIHN2biBjaGVja291dCAkKFNWTlJPT1QpL2V4dGVybmFsL1NwaGlueC0xLjIvc3BoaW54IHRvb2xzL3NwaGlueDsgXAotCWZpCi0JQGlmIFsgISAtZCB0b29scy9kb2N1dGlscyBdOyB0aGVuIFwKLQkgIGVjaG8gIkNoZWNraW5nIG91dCBEb2N1dGlscy4uLiI7IFwKLQkgIHN2biBjaGVja291dCAkKFNWTlJPT1QpL2V4dGVybmFsL2RvY3V0aWxzLTAuMTEvZG9jdXRpbHMgdG9vbHMvZG9jdXRpbHM7IFwKLQlmaQotCUBpZiBbICEgLWQgdG9vbHMvamluamEyIF07IHRoZW4gXAotCSAgZWNobyAiQ2hlY2tpbmcgb3V0IEppbmphLi4uIjsgXAotCSAgc3ZuIGNoZWNrb3V0ICQoU1ZOUk9PVCkvZXh0ZXJuYWwvSmluamEtMi4zLjEvamluamEyIHRvb2xzL2ppbmphMjsgXAotCWZpCi0JQGlmIFsgISAtZCB0b29scy9weWdtZW50cyBdOyB0aGVuIFwKLQkgIGVjaG8gIkNoZWNraW5nIG91dCBQeWdtZW50cy4uLiI7IFwKLQkgIHN2biBjaGVja291dCAkKFNWTlJPT1QpL2V4dGVybmFsL1B5Z21lbnRzLTEuNi9weWdtZW50cyB0b29scy9weWdtZW50czsgXAotCWZpCi0KLXVwZGF0ZTogY2xlYW4gY2hlY2tvdXQKLQotYnVpbGQ6IGNoZWNrb3V0Ci0JbWtkaXIgLXAgYnVpbGQvJChCVUlMREVSKSBidWlsZC9kb2N0cmVlcwotCSQoUFlUSE9OKSB0b29scy9zcGhpbngtYnVpbGQucHkgJChBTExTUEhJTlhPUFRTKQorYnVpbGQ6CisJJChTUEhJTlhCVUlMRCkgJChBTExTUEhJTlhPUFRTKQogCUBlY2hvCiAKIGh0bWw6IEJVSUxERVIgPSBodG1sCkBAIC05MSwyNCArNjgsMzAgQEAKIAlAZWNobyAiVGhlIG92ZXJ2aWV3IGZpbGUgaXMgaW4gYnVpbGQvY2hhbmdlcy4iCiAKIGxpbmtjaGVjazogQlVJTERFUiA9IGxpbmtjaGVjawotbGlua2NoZWNrOiBidWlsZAotCUBlY2hvICJMaW5rIGNoZWNrIGNvbXBsZXRlOyBsb29rIGZvciBhbnkgZXJyb3JzIGluIHRoZSBhYm92ZSBvdXRwdXQiIFwKLQkgICAgICAib3IgaW4gYnVpbGQvJChCVUlMREVSKS9vdXRwdXQudHh0IgorbGlua2NoZWNrOgorCUAkKE1BS0UpIGJ1aWxkIEJVSUxERVI9JChCVUlMREVSKSB8fCB7IFwKKwllY2hvICJMaW5rIGNoZWNrIGNvbXBsZXRlOyBsb29rIGZvciBhbnkgZXJyb3JzIGluIHRoZSBhYm92ZSBvdXRwdXQiIFwKKwkgICAgICJvciBpbiBidWlsZC8kKEJVSUxERVIpL291dHB1dC50eHQiOyBcCisJZmFsc2U7IH0KIAogc3VzcGljaW91czogQlVJTERFUiA9IHN1c3BpY2lvdXMKLXN1c3BpY2lvdXM6IGJ1aWxkCi0JQGVjaG8gIlN1c3BpY2lvdXMgY2hlY2sgY29tcGxldGU7IGxvb2sgZm9yIGFueSBlcnJvcnMgaW4gdGhlIGFib3ZlIG91dHB1dCIgXAotCSAgICAgICJvciBpbiBidWlsZC8kKEJVSUxERVIpL3N1c3BpY2lvdXMuY3N2LiAgSWYgYWxsIGlzc3VlcyBhcmUgZmFsc2UiIFwKLQkgICAgICAicG9zaXRpdmVzLCBhcHBlbmQgdGhhdCBmaWxlIHRvIHRvb2xzL3NwaGlueGV4dC9zdXNwLWlnbm9yZWQuY3N2LiIKK3N1c3BpY2lvdXM6CisJQCQoTUFLRSkgYnVpbGQgQlVJTERFUj0kKEJVSUxERVIpIHx8IHsgXAorCWVjaG8gIlN1c3BpY2lvdXMgY2hlY2sgY29tcGxldGU7IGxvb2sgZm9yIGFueSBlcnJvcnMgaW4gdGhlIGFib3ZlIG91dHB1dCIgXAorCSAgICAgIm9yIGluIGJ1aWxkLyQoQlVJTERFUikvc3VzcGljaW91cy5jc3YuICBJZiBhbGwgaXNzdWVzIGFyZSBmYWxzZSIgXAorCSAgICAgInBvc2l0aXZlcywgYXBwZW5kIHRoYXQgZmlsZSB0byB0b29scy9zdXNwLWlnbm9yZWQuY3N2LiI7IFwKKwlmYWxzZTsgfQogCiBjb3ZlcmFnZTogQlVJTERFUiA9IGNvdmVyYWdlCiBjb3ZlcmFnZTogYnVpbGQKIAlAZWNobyAiQ292ZXJhZ2UgZmluaXNoZWQ7IHNlZSBjLnR4dCBhbmQgcHl0aG9uLnR4dCBpbiBidWlsZC9jb3ZlcmFnZSIKIAogZG9jdGVzdDogQlVJTERFUiA9IGRvY3Rlc3QKLWRvY3Rlc3Q6IGJ1aWxkCi0JQGVjaG8gIlRlc3Rpbmcgb2YgZG9jdGVzdHMgaW4gdGhlIHNvdXJjZXMgZmluaXNoZWQsIGxvb2sgYXQgdGhlIiBcCi0JICAgICAgInJlc3VsdHMgaW4gYnVpbGQvZG9jdGVzdC9vdXRwdXQudHh0IgorZG9jdGVzdDoKKwlAJChNQUtFKSBidWlsZCBCVUlMREVSPSQoQlVJTERFUikgfHwgeyBcCisJZWNobyAiVGVzdGluZyBvZiBkb2N0ZXN0cyBpbiB0aGUgc291cmNlcyBmaW5pc2hlZCwgbG9vayBhdCB0aGUiIFwKKwkgICAgICJyZXN1bHRzIGluIGJ1aWxkL2RvY3Rlc3Qvb3V0cHV0LnR4dCI7IFwKKwlmYWxzZTsgfQogCiBweWRvYy10b3BpY3M6IEJVSUxERVIgPSBweWRvYy10b3BpY3MKIHB5ZG9jLXRvcGljczogYnVpbGQKQEAgLTEyMCwxMCArMTAzLDYgQEAKIAogY2xlYW46CiAJLXJtIC1yZiBidWlsZC8qCi0JLXJtIC1yZiB0b29scy9zcGhpbngKLQktcm0gLXJmIHRvb2xzL3B5Z21lbnRzCi0JLXJtIC1yZiB0b29scy9qaW5qYTIKLQktcm0gLXJmIHRvb2xzL2RvY3V0aWxzCiAKIGRpc3Q6CiAJcm0gLXJmIGRpc3QKQEAgLTE2MywxNiArMTQyLDEwIEBACiAJY3AgYnVpbGQvbGF0ZXgvZG9jcy1wZGYuemlwIGRpc3QvcHl0aG9uLSQoRElTVFZFUlNJT04pLWRvY3MtcGRmLWxldHRlci56aXAKIAljcCBidWlsZC9sYXRleC9kb2NzLXBkZi50YXIuYnoyIGRpc3QvcHl0aG9uLSQoRElTVFZFUlNJT04pLWRvY3MtcGRmLWxldHRlci50YXIuYnoyCiAKLQkjIGFyY2hpdmUgdGhlIGVwdWIgYnVpbGQKKwkjIGNvcHkgdGhlIGVwdWIgYnVpbGQKIAlybSAtcmYgYnVpbGQvZXB1YgogCW1ha2UgZXB1YgotCW1rZGlyIC1wIGRpc3QvcHl0aG9uLSQoRElTVFZFUlNJT04pLWRvY3MtZXB1YgotCWNwIC1wUFIgYnVpbGQvZXB1Yi8qLmVwdWIgZGlzdC9weXRob24tJChESVNUVkVSU0lPTiktZG9jcy1lcHViLwotCXRhciAtQyBkaXN0IC1jZiBkaXN0L3B5dGhvbi0kKERJU1RWRVJTSU9OKS1kb2NzLWVwdWIudGFyIHB5dGhvbi0kKERJU1RWRVJTSU9OKS1kb2NzLWVwdWIKLQliemlwMiAtOSAtayBkaXN0L3B5dGhvbi0kKERJU1RWRVJTSU9OKS1kb2NzLWVwdWIudGFyCi0JKGNkIGRpc3Q7IHppcCAtcSAtciAtOSBweXRob24tJChESVNUVkVSU0lPTiktZG9jcy1lcHViLnppcCBweXRob24tJChESVNUVkVSU0lPTiktZG9jcy1lcHViKQotCXJtIC1yIGRpc3QvcHl0aG9uLSQoRElTVFZFUlNJT04pLWRvY3MtZXB1YgotCXJtIGRpc3QvcHl0aG9uLSQoRElTVFZFUlNJT04pLWRvY3MtZXB1Yi50YXIKKwljcCAtcFBSIGJ1aWxkL2VwdWIvUHl0aG9uLmVwdWIgZGlzdC9weXRob24tJChESVNUVkVSU0lPTiktZG9jcy5lcHViCiAKIGNoZWNrOgogCSQoUFlUSE9OKSB0b29scy9yc3RsaW50LnB5IC1pIHRvb2xzCkBAIC0xODQsNyArMTU3LDYgQEAKIAogIyBmb3IgZGV2ZWxvcG1lbnQgcmVsZWFzZXM6IGFsd2F5cyBidWlsZAogYXV0b2J1aWxkLWRldjoKLQltYWtlIHVwZGF0ZQogCW1ha2UgZGlzdCBTUEhJTlhPUFRTPSctQSBkYWlseT0xIC1BIHZlcnNpb25zd2l0Y2hlcj0xJwogCS1tYWtlIHN1c3BpY2lvdXMKIApAQCAtMTkyLDkgKzE2NCwxMCBAQAogYXV0b2J1aWxkLWh0bWw6CiAJbWFrZSBodG1sIFNQSElOWE9QVFM9Jy1BIGRhaWx5PTEgLUEgdmVyc2lvbnN3aXRjaGVyPTEnCiAKLSMgZm9yIHN0YWJsZSByZWxlYXNlczogb25seSBidWlsZCBpZiBub3QgaW4gcHJlLXJlbGVhc2Ugc3RhZ2UgKGFscGhhLCBiZXRhLCByYykKKyMgZm9yIHN0YWJsZSByZWxlYXNlczogb25seSBidWlsZCBpZiBub3QgaW4gcHJlLXJlbGVhc2Ugc3RhZ2UgKGFscGhhLCBiZXRhKQorIyByZWxlYXNlIGNhbmRpZGF0ZSBkb3dubG9hZHMgYXJlIG9rYXksIHNpbmNlIHRoZSBzdGFibGUgdHJlZSBjYW4gYmUgaW4gdGhhdCBzdGFnZQogYXV0b2J1aWxkLXN0YWJsZToKLQlAY2FzZSAkKERJU1RWRVJTSU9OKSBpbiAqW2FiY10qKSBcCisJQGNhc2UgJChESVNUVkVSU0lPTikgaW4gKlthYl0qKSBcCiAJCWVjaG8gIk5vdCBidWlsZGluZzsgJChESVNUVkVSU0lPTikgaXMgbm90IGEgcmVsZWFzZSB2ZXJzaW9uLiI7IFwKIAkJZXhpdCAxOzsgXAogCWVzYWMKZGlmZiAtLWdpdCBhL0RvYy9SRUFETUUudHh0IGIvRG9jL1JFQURNRS50eHQKaW5kZXggYTQ5NGM4OS4uNThiZGE2MiAxMDA2NDQKLS0tIGEvRG9jL1JFQURNRS50eHQKKysrIGIvRG9jL1JFQURNRS50eHQKQEAgLTMsMzQgKzMsMzAgQEAKIAogVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgdGhlIHJlU3RydWN0dXJlZFRleHQgKHJlU1QpIHNvdXJjZXMgdG8gdGhlIFB5dGhvbgogZG9jdW1lbnRhdGlvbi4gIFlvdSBkb24ndCBuZWVkIHRvIGJ1aWxkIHRoZW0geW91cnNlbGYsIHByZWJ1aWx0IHZlcnNpb25zIGFyZQotYXZhaWxhYmxlIGF0IGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvZG93bmxvYWQvLgorYXZhaWxhYmxlIGF0IDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zLjQvZG93bmxvYWQuaHRtbD4uCiAKLURvY3VtZW50YXRpb24gb24gdGhlIGF1dGhvcmluZyBQeXRob24gZG9jdW1lbnRhdGlvbiwgaW5jbHVkaW5nIGluZm9ybWF0aW9uIGFib3V0CitEb2N1bWVudGF0aW9uIG9uIGF1dGhvcmluZyBQeXRob24gZG9jdW1lbnRhdGlvbiwgaW5jbHVkaW5nIGluZm9ybWF0aW9uIGFib3V0CiBib3RoIHN0eWxlIGFuZCBtYXJrdXAsIGlzIGF2YWlsYWJsZSBpbiB0aGUgIkRvY3VtZW50aW5nIFB5dGhvbiIgY2hhcHRlciBvZiB0aGUKLWRvY3VtZW50YXRpb24uCitkZXZlbG9wZXJzIGd1aWRlIDxodHRwczovL2RvY3MucHl0aG9uLm9yZy9kZXZndWlkZS9kb2N1bWVudGluZy5odG1sPi4KIAogCiBCdWlsZGluZyB0aGUgZG9jcwogPT09PT09PT09PT09PT09PT0KIAotWW91IG5lZWQgdG8gaGF2ZSBQeXRob24gMiBpbnN0YWxsZWQ7IHRoZSB0b29sc2V0IHVzZWQgdG8gYnVpbGQgdGhlCi1kb2NzIGlzIHdyaXR0ZW4gaW4gUHl0aG9uLiAgSXQgaXMgY2FsbGVkICpTcGhpbngqLCBpdCBpcyBub3QgaW5jbHVkZWQgaW4gdGhpcwotdHJlZSwgYnV0IG1haW50YWluZWQgc2VwYXJhdGVseS4gIEFsc28gbmVlZGVkIGFyZSB0aGUgZG9jdXRpbHMsIHN1cHBseWluZyB0aGUKLWJhc2UgbWFya3VwIHRoYXQgU3BoaW54IHVzZXMsIEppbmphLCBhIHRlbXBsYXRpbmcgZW5naW5lLCBhbmQgb3B0aW9uYWxseQotUHlnbWVudHMsIGEgY29kZSBoaWdobGlnaHRlci4KK1lvdSBuZWVkIHRvIGhhdmUgU3BoaW54IDxodHRwOi8vc3BoaW54LWRvYy5vcmcvPiBpbnN0YWxsZWQ7IGl0IGlzIHRoZSB0b29sc2V0Cit1c2VkIHRvIGJ1aWxkIHRoZSBkb2NzLiAgSXQgaXMgbm90IGluY2x1ZGVkIGluIHRoaXMgdHJlZSwgYnV0IG1haW50YWluZWQKK3NlcGFyYXRlbHkgYW5kIGF2YWlsYWJsZSBmcm9tIFB5UEkgPGh0dHBzOi8vcHlwaS5weXRob24ub3JnL3B5cGkvU3BoaW54Pi4KIAogCiBVc2luZyBtYWtlCiAtLS0tLS0tLS0tCiAKLUx1Y2tpbHksIGEgTWFrZWZpbGUgaGFzIGJlZW4gcHJlcGFyZWQgc28gdGhhdCBvbiBVbml4LCBwcm92aWRlZCB5b3UgaGF2ZQotaW5zdGFsbGVkIFB5dGhvbiBhbmQgU3VidmVyc2lvbiwgeW91IGNhbiBqdXN0IHJ1biA6OgorQSBNYWtlZmlsZSBoYXMgYmVlbiBwcmVwYXJlZCBzbyB0aGF0IG9uIFVuaXgsIHByb3ZpZGVkIHlvdSBoYXZlIGluc3RhbGxlZAorU3BoaW54LCB5b3UgY2FuIGp1c3QgcnVuIDo6CiAKICAgIG1ha2UgaHRtbAogCi10byBjaGVjayBvdXQgdGhlIG5lY2Vzc2FyeSB0b29sc2V0IGluIHRoZSBgdG9vbHMvYCBzdWJkaXJlY3RvcnkgYW5kIGJ1aWxkIHRoZQotSFRNTCBvdXRwdXQgZmlsZXMuICBUbyB2aWV3IHRoZSBnZW5lcmF0ZWQgSFRNTCwgcG9pbnQgeW91ciBmYXZvcml0ZSBicm93c2VyIGF0Ci10aGUgdG9wLWxldmVsIGluZGV4IGBidWlsZC9odG1sL2luZGV4Lmh0bWxgIGFmdGVyIHJ1bm5pbmcgIm1ha2UiLgordG8gYnVpbGQgdGhlIEhUTUwgb3V0cHV0IGZpbGVzLgogCiBPbiBXaW5kb3dzLCB3ZSB0cnkgdG8gZW11bGF0ZSB0aGUgTWFrZWZpbGUgYXMgY2xvc2VseSBhcyBwb3NzaWJsZSB3aXRoIGEKIGBgbWFrZS5iYXRgYCBmaWxlLgpAQCAtMzgsNDcgKzM0LDYyIEBACiBUbyB1c2UgYSBQeXRob24gaW50ZXJwcmV0ZXIgdGhhdCdzIG5vdCBjYWxsZWQgYGBweXRob25gYCwgdXNlIHRoZSBzdGFuZGFyZAogd2F5IHRvIHNldCBNYWtlZmlsZSB2YXJpYWJsZXMsIHVzaW5nIGUuZy4gOjoKIAotICAgbWFrZSBodG1sIFBZVEhPTj0vdXNyL2Jpbi9weXRob24yLjUKKyAgIG1ha2UgaHRtbCBQWVRIT049cHl0aG9uMworCitPbiBXaW5kb3dzLCBzZXQgdGhlIFBZVEhPTiBlbnZpcm9ubWVudCB2YXJpYWJsZSBpbnN0ZWFkLgorCitUbyB1c2UgYSBzcGVjaWZpYyBzcGhpbngtYnVpbGQgKHNvbWV0aGluZyBvdGhlciB0aGFuIGBgc3BoaW54LWJ1aWxkYGApLCBzZXQKK3RoZSBTUEhJTlhCVUlMRCB2YXJpYWJsZS4KIAogQXZhaWxhYmxlIG1ha2UgdGFyZ2V0cyBhcmU6CiAKLSAqICJodG1sIiwgd2hpY2ggYnVpbGRzIHN0YW5kYWxvbmUgSFRNTCBmaWxlcyBmb3Igb2ZmbGluZSB2aWV3aW5nLgorKiAiY2xlYW4iLCB3aGljaCByZW1vdmVzIGFsbCBidWlsZCBmaWxlcy4KIAotICogImh0bWxoZWxwIiwgd2hpY2ggYnVpbGRzIEhUTUwgZmlsZXMgYW5kIGEgSFRNTCBIZWxwIHByb2plY3QgZmlsZSB1c2FibGUgdG8KLSAgIGNvbnZlcnQgdGhlbSBpbnRvIGEgc2luZ2xlIENvbXBpbGVkIEhUTUwgKC5jaG0pIGZpbGUgLS0gdGhlc2UgYXJlIHBvcHVsYXIKLSAgIHVuZGVyIE1pY3Jvc29mdCBXaW5kb3dzLCBidXQgdmVyeSBoYW5keSBvbiBldmVyeSBwbGF0Zm9ybS4KKyogImh0bWwiLCB3aGljaCBidWlsZHMgc3RhbmRhbG9uZSBIVE1MIGZpbGVzIGZvciBvZmZsaW5lIHZpZXdpbmcuCiAKLSAgIFRvIGNyZWF0ZSB0aGUgQ0hNIGZpbGUsIHlvdSBuZWVkIHRvIHJ1biB0aGUgTWljcm9zb2Z0IEhUTUwgSGVscCBXb3Jrc2hvcCBvdmVyCi0gICB0aGUgZ2VuZXJhdGVkIHByb2plY3QgKC5oaHApIGZpbGUuCisqICJodG1sdmlldyIsIHdoaWNoIHJlLXVzZXMgdGhlICJodG1sIiBidWlsZGVyLCBidXQgdGhlbiBvcGVucyB0aGUgbWFpbiBwYWdlCisgIGluIHlvdXIgZGVmYXVsdCB3ZWIgYnJvd3Nlci4KIAotICogImxhdGV4Iiwgd2hpY2ggYnVpbGRzIExhVGVYIHNvdXJjZSBmaWxlcyBhcyBpbnB1dCB0byAicGRmbGF0ZXgiIHRvIHByb2R1Y2UKLSAgIFBERiBkb2N1bWVudHMuCisqICJodG1saGVscCIsIHdoaWNoIGJ1aWxkcyBIVE1MIGZpbGVzIGFuZCBhIEhUTUwgSGVscCBwcm9qZWN0IGZpbGUgdXNhYmxlIHRvCisgIGNvbnZlcnQgdGhlbSBpbnRvIGEgc2luZ2xlIENvbXBpbGVkIEhUTUwgKC5jaG0pIGZpbGUgLS0gdGhlc2UgYXJlIHBvcHVsYXIKKyAgdW5kZXIgTWljcm9zb2Z0IFdpbmRvd3MsIGJ1dCB2ZXJ5IGhhbmR5IG9uIGV2ZXJ5IHBsYXRmb3JtLgogCi0gKiAidGV4dCIsIHdoaWNoIGJ1aWxkcyBhIHBsYWluIHRleHQgZmlsZSBmb3IgZWFjaCBzb3VyY2UgZmlsZS4KKyAgVG8gY3JlYXRlIHRoZSBDSE0gZmlsZSwgeW91IG5lZWQgdG8gcnVuIHRoZSBNaWNyb3NvZnQgSFRNTCBIZWxwIFdvcmtzaG9wCisgIG92ZXIgdGhlIGdlbmVyYXRlZCBwcm9qZWN0ICguaGhwKSBmaWxlLiAgVGhlIG1ha2UuYmF0IHNjcmlwdCBkb2VzIHRoaXMgZm9yCisgIHlvdSBvbiBXaW5kb3dzLgogCi0gKiAiZXB1YiIsIHdoaWNoIGJ1aWxkcyBhbiBFUFVCIGRvY3VtZW50LCBzdWl0YWJsZSB0byBiZSB2aWV3ZWQgb24gZS1ib29rCi0gICByZWFkZXJzLgorKiAibGF0ZXgiLCB3aGljaCBidWlsZHMgTGFUZVggc291cmNlIGZpbGVzIGFzIGlucHV0IHRvICJwZGZsYXRleCIgdG8gcHJvZHVjZQorICBQREYgZG9jdW1lbnRzLgogCi0gKiAibGlua2NoZWNrIiwgd2hpY2ggY2hlY2tzIGFsbCBleHRlcm5hbCByZWZlcmVuY2VzIHRvIHNlZSB3aGV0aGVyIHRoZXkgYXJlCi0gICBicm9rZW4sIHJlZGlyZWN0ZWQgb3IgbWFsZm9ybWVkLCBhbmQgb3V0cHV0cyB0aGlzIGluZm9ybWF0aW9uIHRvIHN0ZG91dCBhcwotICAgd2VsbCBhcyBhIHBsYWluLXRleHQgKC50eHQpIGZpbGUuCisqICJ0ZXh0Iiwgd2hpY2ggYnVpbGRzIGEgcGxhaW4gdGV4dCBmaWxlIGZvciBlYWNoIHNvdXJjZSBmaWxlLgogCi0gKiAiY2hhbmdlcyIsIHdoaWNoIGJ1aWxkcyBhbiBvdmVydmlldyBvdmVyIGFsbCB2ZXJzaW9uYWRkZWQvdmVyc2lvbmNoYW5nZWQvCi0gICBkZXByZWNhdGVkIGl0ZW1zIGluIHRoZSBjdXJyZW50IHZlcnNpb24uIFRoaXMgaXMgbWVhbnQgYXMgYSBoZWxwIGZvciB0aGUKLSAgIHdyaXRlciBvZiB0aGUgIldoYXQncyBOZXciIGRvY3VtZW50LgorKiAiZXB1YiIsIHdoaWNoIGJ1aWxkcyBhbiBFUFVCIGRvY3VtZW50LCBzdWl0YWJsZSB0byBiZSB2aWV3ZWQgb24gZS1ib29rCisgIHJlYWRlcnMuCiAKLSAqICJjb3ZlcmFnZSIsIHdoaWNoIGJ1aWxkcyBhIGNvdmVyYWdlIG92ZXJ2aWV3IGZvciBzdGFuZGFyZCBsaWJyYXJ5IG1vZHVsZXMgYW5kCi0gICBDIEFQSS4KKyogImxpbmtjaGVjayIsIHdoaWNoIGNoZWNrcyBhbGwgZXh0ZXJuYWwgcmVmZXJlbmNlcyB0byBzZWUgd2hldGhlciB0aGV5IGFyZQorICBicm9rZW4sIHJlZGlyZWN0ZWQgb3IgbWFsZm9ybWVkLCBhbmQgb3V0cHV0cyB0aGlzIGluZm9ybWF0aW9uIHRvIHN0ZG91dCBhcworICB3ZWxsIGFzIGEgcGxhaW4tdGV4dCAoLnR4dCkgZmlsZS4KIAotICogInB5ZG9jLXRvcGljcyIsIHdoaWNoIGJ1aWxkcyBhIFB5dGhvbiBtb2R1bGUgY29udGFpbmluZyBhIGRpY3Rpb25hcnkgd2l0aAotICAgcGxhaW4gdGV4dCBkb2N1bWVudGF0aW9uIGZvciB0aGUgbGFiZWxzIGRlZmluZWQgaW4KLSAgIGB0b29scy9zcGhpbnhleHQvcHlzcGVjaWZpYy5weWAgLS0gcHlkb2MgbmVlZHMgdGhlc2UgdG8gc2hvdyB0b3BpYyBhbmQKLSAgIGtleXdvcmQgaGVscC4KKyogImNoYW5nZXMiLCB3aGljaCBidWlsZHMgYW4gb3ZlcnZpZXcgb3ZlciBhbGwgdmVyc2lvbmFkZGVkL3ZlcnNpb25jaGFuZ2VkLworICBkZXByZWNhdGVkIGl0ZW1zIGluIHRoZSBjdXJyZW50IHZlcnNpb24uIFRoaXMgaXMgbWVhbnQgYXMgYSBoZWxwIGZvciB0aGUKKyAgd3JpdGVyIG9mIHRoZSAiV2hhdCdzIE5ldyIgZG9jdW1lbnQuCiAKLSAqICJzdXNwaWNpb3VzIiwgd2hpY2ggY2hlY2tzIHRoZSBwYXJzZWQgbWFya3VwIGZvciB0ZXh0IHRoYXQgbG9va3MgbGlrZQotICAgbWFsZm9ybWVkIGFuZCB0aHVzIHVuY29udmVydGVkIHJlU1QuCisqICJjb3ZlcmFnZSIsIHdoaWNoIGJ1aWxkcyBhIGNvdmVyYWdlIG92ZXJ2aWV3IGZvciBzdGFuZGFyZCBsaWJyYXJ5IG1vZHVsZXMgYW5kCisgIEMgQVBJLgogCi1BICJtYWtlIHVwZGF0ZSIgdXBkYXRlcyB0aGUgU3VidmVyc2lvbiBjaGVja291dHMgaW4gYHRvb2xzL2AuCisqICJweWRvYy10b3BpY3MiLCB3aGljaCBidWlsZHMgYSBQeXRob24gbW9kdWxlIGNvbnRhaW5pbmcgYSBkaWN0aW9uYXJ5IHdpdGgKKyAgcGxhaW4gdGV4dCBkb2N1bWVudGF0aW9uIGZvciB0aGUgbGFiZWxzIGRlZmluZWQgaW4KKyAgYHRvb2xzL3B5c3BlY2lmaWMucHlgIC0tIHB5ZG9jIG5lZWRzIHRoZXNlIHRvIHNob3cgdG9waWMgYW5kIGtleXdvcmQgaGVscC4KKworKiAic3VzcGljaW91cyIsIHdoaWNoIGNoZWNrcyB0aGUgcGFyc2VkIG1hcmt1cCBmb3IgdGV4dCB0aGF0IGxvb2tzIGxpa2UKKyAgbWFsZm9ybWVkIGFuZCB0aHVzIHVuY29udmVydGVkIHJlU1QuCisKKyogImNoZWNrIiwgd2hpY2ggY2hlY2tzIGZvciBmcmVxdWVudCBtYXJrdXAgZXJyb3JzLgorCisqICJzZXJ2ZSIsIHdoaWNoIHNlcnZlcyB0aGUgYnVpbGQvaHRtbCBkaXJlY3Rvcnkgb24gcG9ydCA4MDAwLgorCisqICJkaXN0IiwgKFVuaXggb25seSkgd2hpY2ggY3JlYXRlcyBkaXN0cmlidXRhYmxlIGFyY2hpdmVzIG9mIEhUTUwsIHRleHQsCisgIFBERiwgYW5kIEVQVUIgYnVpbGRzLgogCiAKIFdpdGhvdXQgbWFrZQpAQCAtODYsNyArOTcsNyBAQAogCiBJbnN0YWxsIHRoZSBTcGhpbnggcGFja2FnZSBhbmQgaXRzIGRlcGVuZGVuY2llcyBmcm9tIFB5UEkuCiAKLVRoZW4sIGZyb20gdGhlIGBgRG9jc2BgIGRpcmVjdG9yeSwgcnVuIDo6CitUaGVuLCBmcm9tIHRoZSBgYERvY2BgIGRpcmVjdG9yeSwgcnVuIDo6CiAKICAgIHNwaGlueC1idWlsZCAtYjxidWlsZGVyPiAuIGJ1aWxkLzxidWlsZGVyPgogCkBAIC05OCwxMCArMTA5LDEwIEBACiA9PT09PT09PT09PT0KIAogQnVncyBpbiB0aGUgY29udGVudCBzaG91bGQgYmUgcmVwb3J0ZWQgdG8gdGhlIFB5dGhvbiBidWcgdHJhY2tlciBhdAotaHR0cDovL2J1Z3MucHl0aG9uLm9yZy4KK2h0dHBzOi8vYnVncy5weXRob24ub3JnLgogCiBCdWdzIGluIHRoZSB0b29sc2V0IHNob3VsZCBiZSByZXBvcnRlZCBpbiB0aGUgU3BoaW54IGJ1ZyB0cmFja2VyIGF0Ci1odHRwOi8vd3d3LmJpdGJ1Y2tldC5vcmcvYmlya2VuZmVsZC9zcGhpbngvaXNzdWVzLy4KK2h0dHBzOi8vd3d3LmJpdGJ1Y2tldC5vcmcvYmlya2VuZmVsZC9zcGhpbngvaXNzdWVzLy4KIAogWW91IGNhbiBhbHNvIHNlbmQgYSBtYWlsIHRvIHRoZSBQeXRob24gRG9jdW1lbnRhdGlvbiBUZWFtIGF0IGRvY3NAcHl0aG9uLm9yZywKIGFuZCB3ZSB3aWxsIHByb2Nlc3MgeW91ciByZXF1ZXN0IGFzIHNvb24gYXMgcG9zc2libGUuCkBAIC0xMTcsNyArMTI4LDcgQEAKIGFzIGxvbmcgYXMgeW91IGRvbid0IGNoYW5nZSBvciByZW1vdmUgdGhlIGNvcHlyaWdodCBub3RpY2U6CiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUNvcHlyaWdodCAoYykgMjAwMC0yMDE0IFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorQ29weXJpZ2h0IChjKSAyMDAwLTIwMTUgUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24uCiBBbGwgcmlnaHRzIHJlc2VydmVkLgogCiBDb3B5cmlnaHQgKGMpIDIwMDAgQmVPcGVuLmNvbS4KZGlmZiAtLWdpdCBhL0RvYy9hYm91dC5yc3QgYi9Eb2MvYWJvdXQucnN0CmluZGV4IDY3ODE2OGIuLjNlYTMxMWYgMTAwNjQ0Ci0tLSBhL0RvYy9hYm91dC5yc3QKKysrIGIvRG9jL2Fib3V0LnJzdApAQCAtNiw3ICs2LDcgQEAKIFRoZXNlIGRvY3VtZW50cyBhcmUgZ2VuZXJhdGVkIGZyb20gYHJlU3RydWN0dXJlZFRleHRgXyBzb3VyY2VzIGJ5IGBTcGhpbnhgXywgYQogZG9jdW1lbnQgcHJvY2Vzc29yIHNwZWNpZmljYWxseSB3cml0dGVuIGZvciB0aGUgUHl0aG9uIGRvY3VtZW50YXRpb24uCiAKLS4uIF9yZVN0cnVjdHVyZWRUZXh0OiBodHRwOi8vZG9jdXRpbHMuc2YubmV0L3JzdC5odG1sCisuLiBfcmVTdHJ1Y3R1cmVkVGV4dDogaHR0cDovL2RvY3V0aWxzLnNvdXJjZWZvcmdlLm5ldC9yc3QuaHRtbAogLi4gX1NwaGlueDogaHR0cDovL3NwaGlueC1kb2Mub3JnLwogCiAuLiBJbiB0aGUgb25saW5lIHZlcnNpb24gb2YgdGhlc2UgZG9jdW1lbnRzLCB5b3UgY2FuIHN1Ym1pdCBjb21tZW50cyBhbmQgc3VnZ2VzdApAQCAtMjEsNyArMjEsNyBAQAogCiAqIEZyZWQgTC4gRHJha2UsIEpyLiwgdGhlIGNyZWF0b3Igb2YgdGhlIG9yaWdpbmFsIFB5dGhvbiBkb2N1bWVudGF0aW9uIHRvb2xzZXQKICAgYW5kIHdyaXRlciBvZiBtdWNoIG9mIHRoZSBjb250ZW50OwotKiB0aGUgYERvY3V0aWxzIDxodHRwOi8vZG9jdXRpbHMuc2YubmV0Lz5gXyBwcm9qZWN0IGZvciBjcmVhdGluZworKiB0aGUgYERvY3V0aWxzIDxodHRwOi8vZG9jdXRpbHMuc291cmNlZm9yZ2UubmV0Lz5gXyBwcm9qZWN0IGZvciBjcmVhdGluZwogICByZVN0cnVjdHVyZWRUZXh0IGFuZCB0aGUgRG9jdXRpbHMgc3VpdGU7CiAqIEZyZWRyaWsgTHVuZGggZm9yIGhpcyBgQWx0ZXJuYXRpdmUgUHl0aG9uIFJlZmVyZW5jZQogICA8aHR0cDovL2VmZmJvdC5vcmcvem9uZS9weXJlZi5odG0+YF8gcHJvamVjdCBmcm9tIHdoaWNoIFNwaGlueCBnb3QgbWFueSBnb29kCmRpZmYgLS1naXQgYS9Eb2MvYnVncy5yc3QgYi9Eb2MvYnVncy5yc3QKaW5kZXggODQ3YzAxMC4uZjAxYWUwZSAxMDA2NDQKLS0tIGEvRG9jL2J1Z3MucnN0CisrKyBiL0RvYy9idWdzLnJzdApAQCAtMjksNyArMjksNyBAQAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKIEJ1ZyByZXBvcnRzIGZvciBQeXRob24gaXRzZWxmIHNob3VsZCBiZSBzdWJtaXR0ZWQgdmlhIHRoZSBQeXRob24gQnVnIFRyYWNrZXIKLShodHRwOi8vYnVncy5weXRob24ub3JnLykuICBUaGUgYnVnIHRyYWNrZXIgb2ZmZXJzIGEgV2ViIGZvcm0gd2hpY2ggYWxsb3dzCisoaHR0cHM6Ly9idWdzLnB5dGhvbi5vcmcvKS4gIFRoZSBidWcgdHJhY2tlciBvZmZlcnMgYSBXZWIgZm9ybSB3aGljaCBhbGxvd3MKIHBlcnRpbmVudCBpbmZvcm1hdGlvbiB0byBiZSBlbnRlcmVkIGFuZCBzdWJtaXR0ZWQgdG8gdGhlIGRldmVsb3BlcnMuCiAKIFRoZSBmaXJzdCBzdGVwIGluIGZpbGluZyBhIHJlcG9ydCBpcyB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgcHJvYmxlbSBoYXMKQEAgLTY4LDcgKzY4LDcgQEAKICAgICAgIEFydGljbGUgd2hpY2ggZ29lcyBpbnRvIHNvbWUgZGV0YWlsIGFib3V0IGhvdyB0byBjcmVhdGUgYSB1c2VmdWwgYnVnIHJlcG9ydC4KICAgICAgIFRoaXMgZGVzY3JpYmVzIHdoYXQga2luZCBvZiBpbmZvcm1hdGlvbiBpcyB1c2VmdWwgYW5kIHdoeSBpdCBpcyB1c2VmdWwuCiAKLSAgIGBCdWcgV3JpdGluZyBHdWlkZWxpbmVzIDxodHRwOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL2RvY3MvQnVnX3dyaXRpbmdfZ3VpZGVsaW5lcz5gXworICAgYEJ1ZyBXcml0aW5nIEd1aWRlbGluZXMgPGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvTW96aWxsYS9RQS9CdWdfd3JpdGluZ19ndWlkZWxpbmVzPmBfCiAgICAgICBJbmZvcm1hdGlvbiBhYm91dCB3cml0aW5nIGEgZ29vZCBidWcgcmVwb3J0LiAgU29tZSBvZiB0aGlzIGlzIHNwZWNpZmljIHRvIHRoZQogICAgICAgTW96aWxsYSBwcm9qZWN0LCBidXQgZGVzY3JpYmVzIGdlbmVyYWwgZ29vZCBwcmFjdGljZXMuCiAKQEAgLTgyLDYgKzgyLDYgQEAKIHRoZSBgY29yZS1tZW50b3JzaGlwIG1haWxpbmcgbGlzdGBfIGlzIGEgZnJpZW5kbHkgcGxhY2UgdG8gZ2V0IGFuc3dlcnMgdG8KIGFueSBhbmQgYWxsIHF1ZXN0aW9ucyBwZXJ0YWluaW5nIHRvIHRoZSBwcm9jZXNzIG9mIGZpeGluZyBpc3N1ZXMgaW4gUHl0aG9uLgogCi0uLiBfRG9jdW1lbnRhdGlvbiBidWdzOiBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlP0BmaWx0ZXI9c3RhdHVzJkBmaWx0ZXI9Y29tcG9uZW50cyZjb21wb25lbnRzPTQmc3RhdHVzPTEmQGNvbHVtbnM9aWQsYWN0aXZpdHksdGl0bGUsc3RhdHVzJkBzb3J0PS1hY3Rpdml0eQotLi4gX1B5dGhvbiBEZXZlbG9wZXIncyBHdWlkZTogaHR0cDovL2RvY3MucHl0aG9uLm9yZy9kZXZndWlkZS8KKy4uIF9Eb2N1bWVudGF0aW9uIGJ1Z3M6IGh0dHBzOi8vYnVncy5weXRob24ub3JnL2lzc3VlP0BmaWx0ZXI9c3RhdHVzJkBmaWx0ZXI9Y29tcG9uZW50cyZjb21wb25lbnRzPTQmc3RhdHVzPTEmQGNvbHVtbnM9aWQsYWN0aXZpdHksdGl0bGUsc3RhdHVzJkBzb3J0PS1hY3Rpdml0eQorLi4gX1B5dGhvbiBEZXZlbG9wZXIncyBHdWlkZTogaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvZGV2Z3VpZGUvCiAuLiBfY29yZS1tZW50b3JzaGlwIG1haWxpbmcgbGlzdDogaHR0cHM6Ly9tYWlsLnB5dGhvbi5vcmcvbWFpbG1hbi9saXN0aW5mby9jb3JlLW1lbnRvcnNoaXAvCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvYXJnLnJzdCBiL0RvYy9jLWFwaS9hcmcucnN0CmluZGV4IDI4YTQzNGUuLjg0MjdiYzQgMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS9hcmcucnN0CisrKyBiL0RvYy9jLWFwaS9hcmcucnN0CkBAIC02NSwxOSArNjUsMjAgQEAKICAgIDpleGM6YFVuaWNvZGVFcnJvcmAgaXMgcmFpc2VkLgogCiAgICAuLiBub3RlOjoKLSAgICAgIFRoaXMgZm9ybWF0IGRvZXMgbm90IGFjY2VwdCBieXRlcy1saWtlIG9iamVjdHMuICBJZiB5b3Ugd2FudCB0byBhY2NlcHQKKyAgICAgIFRoaXMgZm9ybWF0IGRvZXMgbm90IGFjY2VwdCA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RzCisgICAgICA8Ynl0ZXMtbGlrZSBvYmplY3Q+YC4gIElmIHlvdSB3YW50IHRvIGFjY2VwdAogICAgICAgZmlsZXN5c3RlbSBwYXRocyBhbmQgY29udmVydCB0aGVtIHRvIEMgY2hhcmFjdGVyIHN0cmluZ3MsIGl0IGlzCiAgICAgICBwcmVmZXJhYmxlIHRvIHVzZSB0aGUgYGBPJmBgIGZvcm1hdCB3aXRoIDpjOmZ1bmM6YFB5VW5pY29kZV9GU0NvbnZlcnRlcmAKICAgICAgIGFzICpjb252ZXJ0ZXIqLgogCi1gYHMqYGAgKDpjbGFzczpgc3RyYCwgOmNsYXNzOmBieXRlc2AsIDpjbGFzczpgYnl0ZWFycmF5YCBvciBidWZmZXIgY29tcGF0aWJsZSBvYmplY3QpIFtQeV9idWZmZXJdCi0gICBUaGlzIGZvcm1hdCBhY2NlcHRzIFVuaWNvZGUgb2JqZWN0cyBhcyB3ZWxsIGFzIDp0ZXJtOmBieXRlcy1saWtlIG9iamVjdGBcIHMuCitgYHMqYGAgKDpjbGFzczpgc3RyYCBvciA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgKSBbUHlfYnVmZmVyXQorICAgVGhpcyBmb3JtYXQgYWNjZXB0cyBVbmljb2RlIG9iamVjdHMgYXMgd2VsbCBhcyBieXRlcy1saWtlIG9iamVjdHMuCiAgICBJdCBmaWxscyBhIDpjOnR5cGU6YFB5X2J1ZmZlcmAgc3RydWN0dXJlIHByb3ZpZGVkIGJ5IHRoZSBjYWxsZXIuCiAgICBJbiB0aGlzIGNhc2UgdGhlIHJlc3VsdGluZyBDIHN0cmluZyBtYXkgY29udGFpbiBlbWJlZGRlZCBOVUwgYnl0ZXMuCiAgICBVbmljb2RlIG9iamVjdHMgYXJlIGNvbnZlcnRlZCB0byBDIHN0cmluZ3MgdXNpbmcgYGAndXRmLTgnYGAgZW5jb2RpbmcuCiAKLWBgcyNgYCAoOmNsYXNzOmBzdHJgLCA6Y2xhc3M6YGJ5dGVzYCBvciByZWFkLW9ubHkgYnVmZmVyIGNvbXBhdGlibGUgb2JqZWN0KSBbY29uc3QgY2hhciBcKiwgaW50IG9yIDpjOnR5cGU6YFB5X3NzaXplX3RgXQotICAgTGlrZSBgYHMqYGAsIGV4Y2VwdCB0aGF0IGl0IGRvZXNuJ3QgYWNjZXB0IG11dGFibGUgYnVmZmVyLWxpa2Ugb2JqZWN0cworYGBzI2BgICg6Y2xhc3M6YHN0cmAsIHJlYWQtb25seSA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgKSBbY29uc3QgY2hhciBcKiwgaW50IG9yIDpjOnR5cGU6YFB5X3NzaXplX3RgXQorICAgTGlrZSBgYHMqYGAsIGV4Y2VwdCB0aGF0IGl0IGRvZXNuJ3QgYWNjZXB0IG11dGFibGUgYnl0ZXMtbGlrZSBvYmplY3RzCiAgICBzdWNoIGFzIDpjbGFzczpgYnl0ZWFycmF5YC4gIFRoZSByZXN1bHQgaXMgc3RvcmVkIGludG8gdHdvIEMgdmFyaWFibGVzLAogICAgdGhlIGZpcnN0IG9uZSBhIHBvaW50ZXIgdG8gYSBDIHN0cmluZywgdGhlIHNlY29uZCBvbmUgaXRzIGxlbmd0aC4KICAgIFRoZSBzdHJpbmcgbWF5IGNvbnRhaW4gZW1iZWRkZWQgbnVsbCBieXRlcy4gVW5pY29kZSBvYmplY3RzIGFyZSBjb252ZXJ0ZWQKQEAgLTg3LDI4ICs4OCwyOCBAQAogICAgTGlrZSBgYHNgYCwgYnV0IHRoZSBQeXRob24gb2JqZWN0IG1heSBhbHNvIGJlIGBgTm9uZWBgLCBpbiB3aGljaCBjYXNlIHRoZSBDCiAgICBwb2ludGVyIGlzIHNldCB0byAqTlVMTCouCiAKLWBgeipgYCAoOmNsYXNzOmBzdHJgLCA6Y2xhc3M6YGJ5dGVzYCwgOmNsYXNzOmBieXRlYXJyYXlgLCBidWZmZXIgY29tcGF0aWJsZSBvYmplY3Qgb3IgYGBOb25lYGApIFtQeV9idWZmZXJdCitgYHoqYGAgKDpjbGFzczpgc3RyYCwgOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0YCBvciBgYE5vbmVgYCkgW1B5X2J1ZmZlcl0KICAgIExpa2UgYGBzKmBgLCBidXQgdGhlIFB5dGhvbiBvYmplY3QgbWF5IGFsc28gYmUgYGBOb25lYGAsIGluIHdoaWNoIGNhc2UgdGhlCiAgICBgYGJ1ZmBgIG1lbWJlciBvZiB0aGUgOmM6dHlwZTpgUHlfYnVmZmVyYCBzdHJ1Y3R1cmUgaXMgc2V0IHRvICpOVUxMKi4KIAotYGB6I2BgICg6Y2xhc3M6YHN0cmAsIDpjbGFzczpgYnl0ZXNgLCByZWFkLW9ubHkgYnVmZmVyIGNvbXBhdGlibGUgb2JqZWN0IG9yIGBgTm9uZWBgKSBbY29uc3QgY2hhciBcKiwgaW50XQorYGB6I2BgICg6Y2xhc3M6YHN0cmAsIHJlYWQtb25seSA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgIG9yIGBgTm9uZWBgKSBbY29uc3QgY2hhciBcKiwgaW50XQogICAgTGlrZSBgYHMjYGAsIGJ1dCB0aGUgUHl0aG9uIG9iamVjdCBtYXkgYWxzbyBiZSBgYE5vbmVgYCwgaW4gd2hpY2ggY2FzZSB0aGUgQwogICAgcG9pbnRlciBpcyBzZXQgdG8gKk5VTEwqLgogCi1gYHlgYCAoOmNsYXNzOmBieXRlc2ApIFtjb25zdCBjaGFyIFwqXQorYGB5YGAgKHJlYWQtb25seSA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgKSBbY29uc3QgY2hhciBcKl0KICAgIFRoaXMgZm9ybWF0IGNvbnZlcnRzIGEgYnl0ZXMtbGlrZSBvYmplY3QgdG8gYSBDIHBvaW50ZXIgdG8gYSBjaGFyYWN0ZXIKICAgIHN0cmluZzsgaXQgZG9lcyBub3QgYWNjZXB0IFVuaWNvZGUgb2JqZWN0cy4gIFRoZSBieXRlcyBidWZmZXIgbXVzdCBub3QKICAgIGNvbnRhaW4gZW1iZWRkZWQgTlVMIGJ5dGVzOyBpZiBpdCBkb2VzLCBhIDpleGM6YFR5cGVFcnJvcmAKICAgIGV4Y2VwdGlvbiBpcyByYWlzZWQuCiAKLWBgeSpgYCAoOmNsYXNzOmBieXRlc2AsIDpjbGFzczpgYnl0ZWFycmF5YCBvciA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgKSBbUHlfYnVmZmVyXQorYGB5KmBgICg6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgKSBbUHlfYnVmZmVyXQogICAgVGhpcyB2YXJpYW50IG9uIGBgcypgYCBkb2Vzbid0IGFjY2VwdCBVbmljb2RlIG9iamVjdHMsIG9ubHkKLSAgIDp0ZXJtOmBieXRlcy1saWtlIG9iamVjdGBcIHMuICAqKlRoaXMgaXMgdGhlIHJlY29tbWVuZGVkIHdheSB0byBhY2NlcHQKKyAgIGJ5dGVzLWxpa2Ugb2JqZWN0cy4gICoqVGhpcyBpcyB0aGUgcmVjb21tZW5kZWQgd2F5IHRvIGFjY2VwdAogICAgYmluYXJ5IGRhdGEuKioKIAotYGB5I2BgICg6Y2xhc3M6YGJ5dGVzYCkgW2NvbnN0IGNoYXIgXCosIGludF0KLSAgIFRoaXMgdmFyaWFudCBvbiBgYHMjYGAgZG9lc24ndCBhY2NlcHQgVW5pY29kZSBvYmplY3RzLCBvbmx5IDp0ZXJtOmBieXRlcy1saWtlCi0gICBvYmplY3RgXCBzLgorYGB5I2BgIChyZWFkLW9ubHkgOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0YCkgW2NvbnN0IGNoYXIgXCosIGludF0KKyAgIFRoaXMgdmFyaWFudCBvbiBgYHMjYGAgZG9lc24ndCBhY2NlcHQgVW5pY29kZSBvYmplY3RzLCBvbmx5IGJ5dGVzLWxpa2UKKyAgIG9iamVjdHMuCiAKIGBgU2BgICg6Y2xhc3M6YGJ5dGVzYCkgW1B5Qnl0ZXNPYmplY3QgXCpdCiAgICBSZXF1aXJlcyB0aGF0IHRoZSBQeXRob24gb2JqZWN0IGlzIGEgOmNsYXNzOmBieXRlc2Agb2JqZWN0LCB3aXRob3V0CkBAIC0yOTUsNiArMjk2LDggQEAKICAgIHRoZSBvYmplY3QgcG9pbnRlciBpcyBzdG9yZWQuICBJZiB0aGUgUHl0aG9uIG9iamVjdCBkb2VzIG5vdCBoYXZlIHRoZSByZXF1aXJlZAogICAgdHlwZSwgOmV4YzpgVHlwZUVycm9yYCBpcyByYWlzZWQuCiAKKy4uIF9vX2FtcGVyc2FuZDoKKwogYGBPJmBgIChvYmplY3QpIFsqY29udmVydGVyKiwgKmFueXRoaW5nKl0KICAgIENvbnZlcnQgYSBQeXRob24gb2JqZWN0IHRvIGEgQyB2YXJpYWJsZSB0aHJvdWdoIGEgKmNvbnZlcnRlciogZnVuY3Rpb24uICBUaGlzCiAgICB0YWtlcyB0d28gYXJndW1lbnRzOiB0aGUgZmlyc3QgaXMgYSBmdW5jdGlvbiwgdGhlIHNlY29uZCBpcyB0aGUgYWRkcmVzcyBvZiBhIEMKQEAgLTMxOSw3ICszMjIsNyBAQAogICAgICAgYGBQeV9DTEVBTlVQX1NVUFBPUlRFRGBgIHdhcyBhZGRlZC4KIAogYGBwYGAgKDpjbGFzczpgYm9vbGApIFtpbnRdCi0gICBUZXN0cyB0aGUgdmFsdWUgcGFzc2VkIGluIGZvciB0cnV0aCAoYSBib29sZWFuICoqcCoqXHJlZGljYXRlKSBhbmQgY29udmVydHMKKyAgIFRlc3RzIHRoZSB2YWx1ZSBwYXNzZWQgaW4gZm9yIHRydXRoIChhIGJvb2xlYW4gKipwKipcIHJlZGljYXRlKSBhbmQgY29udmVydHMKICAgIHRoZSByZXN1bHQgdG8gaXRzIGVxdWl2YWxlbnQgQyB0cnVlL2ZhbHNlIGludGVnZXIgdmFsdWUuCiAgICBTZXRzIHRoZSBpbnQgdG8gMSBpZiB0aGUgZXhwcmVzc2lvbiB3YXMgdHJ1ZSBhbmQgMCBpZiBpdCB3YXMgZmFsc2UuCiAgICBUaGlzIGFjY2VwdHMgYW55IHZhbGlkIFB5dGhvbiB2YWx1ZS4gIFNlZSA6cmVmOmB0cnV0aGAgZm9yIG1vcmUKQEAgLTQyNywxMCArNDMwLDExIEBACiAKICAgIEZ1bmN0aW9uIHVzZWQgdG8gZGVjb25zdHJ1Y3QgdGhlIGFyZ3VtZW50IGxpc3RzIG9mICJvbGQtc3R5bGUiIGZ1bmN0aW9ucyAtLS0KICAgIHRoZXNlIGFyZSBmdW5jdGlvbnMgd2hpY2ggdXNlIHRoZSA6Y29uc3Q6YE1FVEhfT0xEQVJHU2AgcGFyYW1ldGVyIHBhcnNpbmcKLSAgIG1ldGhvZC4gIFRoaXMgaXMgbm90IHJlY29tbWVuZGVkIGZvciB1c2UgaW4gcGFyYW1ldGVyIHBhcnNpbmcgaW4gbmV3IGNvZGUsIGFuZAotICAgbW9zdCBjb2RlIGluIHRoZSBzdGFuZGFyZCBpbnRlcnByZXRlciBoYXMgYmVlbiBtb2RpZmllZCB0byBubyBsb25nZXIgdXNlIHRoaXMKLSAgIGZvciB0aGF0IHB1cnBvc2UuICBJdCBkb2VzIHJlbWFpbiBhIGNvbnZlbmllbnQgd2F5IHRvIGRlY29tcG9zZSBvdGhlciB0dXBsZXMsCi0gICBob3dldmVyLCBhbmQgbWF5IGNvbnRpbnVlIHRvIGJlIHVzZWQgZm9yIHRoYXQgcHVycG9zZS4KKyAgIG1ldGhvZCwgd2hpY2ggaGFzIGJlZW4gcmVtb3ZlZCBpbiBQeXRob24gMy4gIFRoaXMgaXMgbm90IHJlY29tbWVuZGVkIGZvciB1c2UKKyAgIGluIHBhcmFtZXRlciBwYXJzaW5nIGluIG5ldyBjb2RlLCBhbmQgbW9zdCBjb2RlIGluIHRoZSBzdGFuZGFyZCBpbnRlcnByZXRlcgorICAgaGFzIGJlZW4gbW9kaWZpZWQgdG8gbm8gbG9uZ2VyIHVzZSB0aGlzIGZvciB0aGF0IHB1cnBvc2UuICBJdCBkb2VzIHJlbWFpbiBhCisgICBjb252ZW5pZW50IHdheSB0byBkZWNvbXBvc2Ugb3RoZXIgdHVwbGVzLCBob3dldmVyLCBhbmQgbWF5IGNvbnRpbnVlIHRvIGJlCisgICB1c2VkIGZvciB0aGF0IHB1cnBvc2UuCiAKIAogLi4gYzpmdW5jdGlvbjo6IGludCBQeUFyZ19VbnBhY2tUdXBsZShQeU9iamVjdCAqYXJncywgY29uc3QgY2hhciAqbmFtZSwgUHlfc3NpemVfdCBtaW4sIFB5X3NzaXplX3QgbWF4LCAuLi4pCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvYnVmZmVyLnJzdCBiL0RvYy9jLWFwaS9idWZmZXIucnN0CmluZGV4IGE3ZGUzN2UuLjczNjEwOTkgMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS9idWZmZXIucnN0CisrKyBiL0RvYy9jLWFwaS9idWZmZXIucnN0CkBAIC00MCw3ICs0MCw3IEBACiAKIFNpbXBsZSBvYmplY3RzIHN1Y2ggYXMgOmNsYXNzOmBieXRlc2AgYW5kIDpjbGFzczpgYnl0ZWFycmF5YCBleHBvc2UgdGhlaXIKIHVuZGVybHlpbmcgYnVmZmVyIGluIGJ5dGUtb3JpZW50ZWQgZm9ybS4gIE90aGVyIGZvcm1zIGFyZSBwb3NzaWJsZTsgZm9yIGV4YW1wbGUsCi10aGUgZWxlbWVudHMgZXhwb3NlZCBieSBhIDpjbGFzczpgYXJyYXkuYXJyYXlgIGNhbiBiZSBtdWx0aS1ieXRlIHZhbHVlcy4KK3RoZSBlbGVtZW50cyBleHBvc2VkIGJ5IGFuIDpjbGFzczpgYXJyYXkuYXJyYXlgIGNhbiBiZSBtdWx0aS1ieXRlIHZhbHVlcy4KIAogQW4gZXhhbXBsZSBjb25zdW1lciBvZiB0aGUgYnVmZmVyIGludGVyZmFjZSBpcyB0aGUgOm1ldGg6YH5pby5CdWZmZXJlZElPQmFzZS53cml0ZWAKIG1ldGhvZCBvZiBmaWxlIG9iamVjdHM6IGFueSBvYmplY3QgdGhhdCBjYW4gZXhwb3J0IGEgc2VyaWVzIG9mIGJ5dGVzIHRocm91Z2gKQEAgLTEzMywxNSArMTMzLDE1IEBACiAgICAgICBjYWxsZWQgb24gbm9uLU5VTEwgOmM6bWVtYmVyOmB+UHlfYnVmZmVyLmZvcm1hdGAgdmFsdWVzLgogCiAgICAgICBJbXBvcnRhbnQgZXhjZXB0aW9uOiBJZiBhIGNvbnN1bWVyIHJlcXVlc3RzIGEgYnVmZmVyIHdpdGhvdXQgdGhlCi0gICAgICA6YzptYWNybzpgUHlCVUZfRk9STUFUYCBmbGFnLCA6YzptZW1iZXI6YH5QeV9CdWZmZXIuZm9ybWF0YCB3aWxsCisgICAgICA6YzptYWNybzpgUHlCVUZfRk9STUFUYCBmbGFnLCA6YzptZW1iZXI6YH5QeV9idWZmZXIuZm9ybWF0YCB3aWxsCiAgICAgICBiZSBzZXQgdG8gICpOVUxMKiwgIGJ1dCA6YzptZW1iZXI6YH5QeV9idWZmZXIuaXRlbXNpemVgIHN0aWxsIGhhcwogICAgICAgdGhlIHZhbHVlIGZvciB0aGUgb3JpZ2luYWwgZm9ybWF0LgogCi0gICAgICBJZiA6YzptZW1iZXI6YH5QeV9CdWZmZXIuc2hhcGVgIGlzIHByZXNlbnQsIHRoZSBlcXVhbGl0eQorICAgICAgSWYgOmM6bWVtYmVyOmB+UHlfYnVmZmVyLnNoYXBlYCBpcyBwcmVzZW50LCB0aGUgZXF1YWxpdHkKICAgICAgIGBgcHJvZHVjdChzaGFwZSkgKiBpdGVtc2l6ZSA9PSBsZW5gYCBzdGlsbCBob2xkcyBhbmQgdGhlIGNvbnN1bWVyCiAgICAgICBjYW4gdXNlIDpjOm1lbWJlcjpgflB5X2J1ZmZlci5pdGVtc2l6ZWAgdG8gbmF2aWdhdGUgdGhlIGJ1ZmZlci4KIAotICAgICAgSWYgOmM6bWVtYmVyOmB+UHlfQnVmZmVyLnNoYXBlYCBpcyAqTlVMTCogYXMgYSByZXN1bHQgb2YgYSA6YzptYWNybzpgUHlCVUZfU0lNUExFYAorICAgICAgSWYgOmM6bWVtYmVyOmB+UHlfYnVmZmVyLnNoYXBlYCBpcyAqTlVMTCogYXMgYSByZXN1bHQgb2YgYSA6YzptYWNybzpgUHlCVUZfU0lNUExFYAogICAgICAgb3IgYSA6YzptYWNybzpgUHlCVUZfV1JJVEFCTEVgIHJlcXVlc3QsIHRoZSBjb25zdW1lciBtdXN0IGRpc3JlZ2FyZAogICAgICAgOmM6bWVtYmVyOmB+UHlfYnVmZmVyLml0ZW1zaXplYCBhbmQgYXNzdW1lIGBgaXRlbXNpemUgPT0gMWBgLgogCkBAIC0xNTYsNyArMTU2LDcgQEAKICAgIC4uIGM6bWVtYmVyOjogaW50IG5kaW0KIAogICAgICAgVGhlIG51bWJlciBvZiBkaW1lbnNpb25zIHRoZSBtZW1vcnkgcmVwcmVzZW50cyBhcyBhbiBuLWRpbWVuc2lvbmFsIGFycmF5LgotICAgICAgSWYgaXQgaXMgMCwgOmM6bWVtYmVyOmB+UHlfQnVmZmVyLmJ1ZmAgcG9pbnRzIHRvIGEgc2luZ2xlIGl0ZW0gcmVwcmVzZW50aW5nCisgICAgICBJZiBpdCBpcyAwLCA6YzptZW1iZXI6YH5QeV9idWZmZXIuYnVmYCBwb2ludHMgdG8gYSBzaW5nbGUgaXRlbSByZXByZXNlbnRpbmcKICAgICAgIGEgc2NhbGFyLiBJbiB0aGlzIGNhc2UsIDpjOm1lbWJlcjpgflB5X2J1ZmZlci5zaGFwZWAsIDpjOm1lbWJlcjpgflB5X2J1ZmZlci5zdHJpZGVzYAogICAgICAgYW5kIDpjOm1lbWJlcjpgflB5X2J1ZmZlci5zdWJvZmZzZXRzYCBNVVNUIGJlICpOVUxMKi4KIApAQCAtMTk4LDYgKzE5OCw5IEBACiAgICAgICBpbmRpY2F0ZXMgdGhhdCBubyBkZS1yZWZlcmVuY2luZyBzaG91bGQgb2NjdXIgKHN0cmlkaW5nIGluIGEgY29udGlndW91cwogICAgICAgbWVtb3J5IGJsb2NrKS4KIAorICAgICAgSWYgYWxsIHN1Ym9mZnNldHMgYXJlIG5lZ2F0aXZlIChpLmUuIG5vIGRlLXJlZmVyZW5jaW5nIGlzIG5lZWRlZCwgdGhlbgorICAgICAgdGhpcyBmaWVsZCBtdXN0IGJlIE5VTEwgKHRoZSBkZWZhdWx0IHZhbHVlKS4KKwogICAgICAgVGhpcyB0eXBlIG9mIGFycmF5IHJlcHJlc2VudGF0aW9uIGlzIHVzZWQgYnkgdGhlIFB5dGhvbiBJbWFnaW5nIExpYnJhcnkKICAgICAgIChQSUwpLiBTZWUgYGNvbXBsZXggYXJyYXlzYF8gZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24gaG93IHRvIGFjY2VzcyBlbGVtZW50cwogICAgICAgb2Ygc3VjaCBhbiBhcnJheS4KQEAgLTQ4OSw4ICs0OTIsOCBAQAogICAgOmM6bWVtYmVyOmB2aWV3LT5vYmpgIHRvICpOVUxMKiBhbmQgcmV0dXJuIC0xOwogCiAgICBJZiB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgYXMgcGFydCBvZiBhIDpyZWY6YGdldGJ1ZmZlcnByb2MgPGJ1ZmZlci1zdHJ1Y3RzPmAsCi0gICAqZXhwb3J0ZXIqIE1VU1QgYmUgc2V0IHRvIHRoZSBleHBvcnRpbmcgb2JqZWN0LiBPdGhlcndpc2UsICpleHBvcnRlciogTVVTVAotICAgYmUgTlVMTC4KKyAgICpleHBvcnRlciogTVVTVCBiZSBzZXQgdG8gdGhlIGV4cG9ydGluZyBvYmplY3QgYW5kICpmbGFncyogbXVzdCBiZSBwYXNzZWQKKyAgIHVubW9kaWZpZWQuIE90aGVyd2lzZSwgKmV4cG9ydGVyKiBNVVNUIGJlIE5VTEwuCiAKIAogCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvYnl0ZWFycmF5LnJzdCBiL0RvYy9jLWFwaS9ieXRlYXJyYXkucnN0CmluZGV4IDgyMDIyMDUuLjQxYjZlM2MgMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS9ieXRlYXJyYXkucnN0CisrKyBiL0RvYy9jLWFwaS9ieXRlYXJyYXkucnN0CkBAIC02NCw3ICs2NCw4IEBACiAuLiBjOmZ1bmN0aW9uOjogY2hhciogUHlCeXRlQXJyYXlfQXNTdHJpbmcoUHlPYmplY3QgKmJ5dGVhcnJheSkKIAogICAgUmV0dXJuIHRoZSBjb250ZW50cyBvZiAqYnl0ZWFycmF5KiBhcyBhIGNoYXIgYXJyYXkgYWZ0ZXIgY2hlY2tpbmcgZm9yIGEKLSAgICpOVUxMKiBwb2ludGVyLgorICAgKk5VTEwqIHBvaW50ZXIuICBUaGUgcmV0dXJuZWQgYXJyYXkgYWx3YXlzIGhhcyBhbiBleHRyYQorICAgbnVsbCBieXRlIGFwcGVuZGVkLgogCiAKIC4uIGM6ZnVuY3Rpb246OiBpbnQgUHlCeXRlQXJyYXlfUmVzaXplKFB5T2JqZWN0ICpieXRlYXJyYXksIFB5X3NzaXplX3QgbGVuKQpkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL2J5dGVzLnJzdCBiL0RvYy9jLWFwaS9ieXRlcy5yc3QKaW5kZXggNTY2NmRhYy4uMjNiNzEyOCAxMDA2NDQKLS0tIGEvRG9jL2MtYXBpL2J5dGVzLnJzdAorKysgYi9Eb2MvYy1hcGkvYnl0ZXMucnN0CkBAIC02OSw4ICs2OSw4IEBACiAgICArPT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCiAgICB8IDphdHRyOmAlJWAgICAgICAgIHwgKm4vYSogICAgICAgICB8IFRoZSBsaXRlcmFsICUgY2hhcmFjdGVyLiAgICAgICB8CiAgICArLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gICB8IDphdHRyOmAlY2AgICAgICAgIHwgaW50ICAgICAgICAgICB8IEEgc2luZ2xlIGNoYXJhY3RlciwgICAgICAgICAgICB8Ci0gICB8ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICB8IHJlcHJlc2VudGVkIGFzIGFuIEMgaW50LiAgICAgICB8CisgICB8IDphdHRyOmAlY2AgICAgICAgIHwgaW50ICAgICAgICAgICB8IEEgc2luZ2xlIGJ5dGUsICAgICAgICAgICAgICAgICB8CisgICB8ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICB8IHJlcHJlc2VudGVkIGFzIGEgQyBpbnQuICAgICAgICB8CiAgICArLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAgICB8IDphdHRyOmAlZGAgICAgICAgIHwgaW50ICAgICAgICAgICB8IEV4YWN0bHkgZXF1aXZhbGVudCB0byAgICAgICAgICB8CiAgICB8ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICB8IGBgcHJpbnRmKCIlZCIpYGAuICAgICAgICAgICAgICB8CkBAIC0xMDksNyArMTA5LDcgQEAKICAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIAogICAgQW4gdW5yZWNvZ25pemVkIGZvcm1hdCBjaGFyYWN0ZXIgY2F1c2VzIGFsbCB0aGUgcmVzdCBvZiB0aGUgZm9ybWF0IHN0cmluZyB0byBiZQotICAgY29waWVkIGFzLWlzIHRvIHRoZSByZXN1bHQgc3RyaW5nLCBhbmQgYW55IGV4dHJhIGFyZ3VtZW50cyBkaXNjYXJkZWQuCisgICBjb3BpZWQgYXMtaXMgdG8gdGhlIHJlc3VsdCBvYmplY3QsIGFuZCBhbnkgZXh0cmEgYXJndW1lbnRzIGRpc2NhcmRlZC4KIAogCiAuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5Qnl0ZXNfRnJvbUZvcm1hdFYoY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IHZhcmdzKQpAQCAtMTM2LDExICsxMzYsMTMgQEAKIAogLi4gYzpmdW5jdGlvbjo6IGNoYXIqIFB5Qnl0ZXNfQXNTdHJpbmcoUHlPYmplY3QgKm8pCiAKLSAgIFJldHVybiBhIE5VTC10ZXJtaW5hdGVkIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjb250ZW50cyBvZiAqbyouICBUaGUgcG9pbnRlcgotICAgcmVmZXJzIHRvIHRoZSBpbnRlcm5hbCBidWZmZXIgb2YgKm8qLCBub3QgYSBjb3B5LiAgVGhlIGRhdGEgbXVzdCBub3QgYmUKLSAgIG1vZGlmaWVkIGluIGFueSB3YXksIHVubGVzcyB0aGUgc3RyaW5nIHdhcyBqdXN0IGNyZWF0ZWQgdXNpbmcKKyAgIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIGNvbnRlbnRzIG9mICpvKi4gIFRoZSBwb2ludGVyCisgICByZWZlcnMgdG8gdGhlIGludGVybmFsIGJ1ZmZlciBvZiAqbyosIHdoaWNoIGNvbnNpc3RzIG9mIGBgbGVuKG8pICsgMWBgCisgICBieXRlcy4gIFRoZSBsYXN0IGJ5dGUgaW4gdGhlIGJ1ZmZlciBpcyBhbHdheXMgbnVsbCwgcmVnYXJkbGVzcyBvZgorICAgd2hldGhlciB0aGVyZSBhcmUgYW55IG90aGVyIG51bGwgYnl0ZXMuICBUaGUgZGF0YSBtdXN0IG5vdCBiZQorICAgbW9kaWZpZWQgaW4gYW55IHdheSwgdW5sZXNzIHRoZSBvYmplY3Qgd2FzIGp1c3QgY3JlYXRlZCB1c2luZwogICAgYGBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIHNpemUpYGAuIEl0IG11c3Qgbm90IGJlIGRlYWxsb2NhdGVkLiAgSWYKLSAgICpvKiBpcyBub3QgYSBzdHJpbmcgb2JqZWN0IGF0IGFsbCwgOmM6ZnVuYzpgUHlCeXRlc19Bc1N0cmluZ2AgcmV0dXJucyAqTlVMTCoKKyAgICpvKiBpcyBub3QgYSBieXRlcyBvYmplY3QgYXQgYWxsLCA6YzpmdW5jOmBQeUJ5dGVzX0FzU3RyaW5nYCByZXR1cm5zICpOVUxMKgogICAgYW5kIHJhaXNlcyA6ZXhjOmBUeXBlRXJyb3JgLgogCiAKQEAgLTE1MSwxNiArMTUzLDE4IEBACiAKIC4uIGM6ZnVuY3Rpb246OiBpbnQgUHlCeXRlc19Bc1N0cmluZ0FuZFNpemUoUHlPYmplY3QgKm9iaiwgY2hhciAqKmJ1ZmZlciwgUHlfc3NpemVfdCAqbGVuZ3RoKQogCi0gICBSZXR1cm4gYSBOVUwtdGVybWluYXRlZCByZXByZXNlbnRhdGlvbiBvZiB0aGUgY29udGVudHMgb2YgdGhlIG9iamVjdCAqb2JqKgorICAgUmV0dXJuIHRoZSBudWxsLXRlcm1pbmF0ZWQgY29udGVudHMgb2YgdGhlIG9iamVjdCAqb2JqKgogICAgdGhyb3VnaCB0aGUgb3V0cHV0IHZhcmlhYmxlcyAqYnVmZmVyKiBhbmQgKmxlbmd0aCouCiAKLSAgIElmICpsZW5ndGgqIGlzICpOVUxMKiwgdGhlIHJlc3VsdGluZyBidWZmZXIgbWF5IG5vdCBjb250YWluIE5VTCBjaGFyYWN0ZXJzOworICAgSWYgKmxlbmd0aCogaXMgKk5VTEwqLCB0aGUgYnl0ZXMgb2JqZWN0CisgICBtYXkgbm90IGNvbnRhaW4gZW1iZWRkZWQgbnVsbCBieXRlczsKICAgIGlmIGl0IGRvZXMsIHRoZSBmdW5jdGlvbiByZXR1cm5zIGBgLTFgYCBhbmQgYSA6ZXhjOmBUeXBlRXJyb3JgIGlzIHJhaXNlZC4KIAotICAgVGhlIGJ1ZmZlciByZWZlcnMgdG8gYW4gaW50ZXJuYWwgc3RyaW5nIGJ1ZmZlciBvZiAqb2JqKiwgbm90IGEgY29weS4gVGhlIGRhdGEKLSAgIG11c3Qgbm90IGJlIG1vZGlmaWVkIGluIGFueSB3YXksIHVubGVzcyB0aGUgc3RyaW5nIHdhcyBqdXN0IGNyZWF0ZWQgdXNpbmcKKyAgIFRoZSBidWZmZXIgcmVmZXJzIHRvIGFuIGludGVybmFsIGJ1ZmZlciBvZiAqb2JqKiwgd2hpY2ggaW5jbHVkZXMgYW4KKyAgIGFkZGl0aW9uYWwgbnVsbCBieXRlIGF0IHRoZSBlbmQgKG5vdCBjb3VudGVkIGluICpsZW5ndGgqKS4gIFRoZSBkYXRhCisgICBtdXN0IG5vdCBiZSBtb2RpZmllZCBpbiBhbnkgd2F5LCB1bmxlc3MgdGhlIG9iamVjdCB3YXMganVzdCBjcmVhdGVkIHVzaW5nCiAgICBgYFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgc2l6ZSlgYC4gIEl0IG11c3Qgbm90IGJlIGRlYWxsb2NhdGVkLiAgSWYKLSAgICpzdHJpbmcqIGlzIG5vdCBhIHN0cmluZyBvYmplY3QgYXQgYWxsLCA6YzpmdW5jOmBQeUJ5dGVzX0FzU3RyaW5nQW5kU2l6ZWAKKyAgICpvYmoqIGlzIG5vdCBhIGJ5dGVzIG9iamVjdCBhdCBhbGwsIDpjOmZ1bmM6YFB5Qnl0ZXNfQXNTdHJpbmdBbmRTaXplYAogICAgcmV0dXJucyBgYC0xYGAgYW5kIHJhaXNlcyA6ZXhjOmBUeXBlRXJyb3JgLgogCiAKQEAgLTE2OCwxNCArMTcyLDE0IEBACiAKICAgIENyZWF0ZSBhIG5ldyBieXRlcyBvYmplY3QgaW4gKlwqYnl0ZXMqIGNvbnRhaW5pbmcgdGhlIGNvbnRlbnRzIG9mICpuZXdwYXJ0KgogICAgYXBwZW5kZWQgdG8gKmJ5dGVzKjsgdGhlIGNhbGxlciB3aWxsIG93biB0aGUgbmV3IHJlZmVyZW5jZS4gIFRoZSByZWZlcmVuY2UgdG8KLSAgIHRoZSBvbGQgdmFsdWUgb2YgKmJ5dGVzKiB3aWxsIGJlIHN0b2xlbi4gIElmIHRoZSBuZXcgc3RyaW5nIGNhbm5vdCBiZQorICAgdGhlIG9sZCB2YWx1ZSBvZiAqYnl0ZXMqIHdpbGwgYmUgc3RvbGVuLiAgSWYgdGhlIG5ldyBvYmplY3QgY2Fubm90IGJlCiAgICBjcmVhdGVkLCB0aGUgb2xkIHJlZmVyZW5jZSB0byAqYnl0ZXMqIHdpbGwgc3RpbGwgYmUgZGlzY2FyZGVkIGFuZCB0aGUgdmFsdWUKICAgIG9mICpcKmJ5dGVzKiB3aWxsIGJlIHNldCB0byAqTlVMTCo7IHRoZSBhcHByb3ByaWF0ZSBleGNlcHRpb24gd2lsbCBiZSBzZXQuCiAKIAogLi4gYzpmdW5jdGlvbjo6IHZvaWQgUHlCeXRlc19Db25jYXRBbmREZWwoUHlPYmplY3QgKipieXRlcywgUHlPYmplY3QgKm5ld3BhcnQpCiAKLSAgIENyZWF0ZSBhIG5ldyBzdHJpbmcgb2JqZWN0IGluICpcKmJ5dGVzKiBjb250YWluaW5nIHRoZSBjb250ZW50cyBvZiAqbmV3cGFydCoKKyAgIENyZWF0ZSBhIG5ldyBieXRlcyBvYmplY3QgaW4gKlwqYnl0ZXMqIGNvbnRhaW5pbmcgdGhlIGNvbnRlbnRzIG9mICpuZXdwYXJ0KgogICAgYXBwZW5kZWQgdG8gKmJ5dGVzKi4gIFRoaXMgdmVyc2lvbiBkZWNyZW1lbnRzIHRoZSByZWZlcmVuY2UgY291bnQgb2YKICAgICpuZXdwYXJ0Ki4KIApkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL2NvZGUucnN0IGIvRG9jL2MtYXBpL2NvZGUucnN0CmluZGV4IDU3ZTgwNzIuLjljOTM1NjMgMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS9jb2RlLnJzdAorKysgYi9Eb2MvYy1hcGkvY29kZS5yc3QKQEAgLTI5LDcgKzI5LDcgQEAKIAogLi4gYzpmdW5jdGlvbjo6IGludCBQeUNvZGVfQ2hlY2soUHlPYmplY3QgKmNvKQogCi0gICBSZXR1cm4gdHJ1ZSBpZiAqY28qIGlzIGEgOmNsYXNzOmBjb2RlYCBvYmplY3QKKyAgIFJldHVybiB0cnVlIGlmICpjbyogaXMgYSA6Y2xhc3M6YGNvZGVgIG9iamVjdC4KIAogLi4gYzpmdW5jdGlvbjo6IGludCBQeUNvZGVfR2V0TnVtRnJlZShQeUNvZGVPYmplY3QgKmNvKQogCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvY29uY3JldGUucnN0IGIvRG9jL2MtYXBpL2NvbmNyZXRlLnJzdAppbmRleCA2NTkwNGVlLi4yZDU2Mzg2IDEwMDY0NAotLS0gYS9Eb2MvYy1hcGkvY29uY3JldGUucnN0CisrKyBiL0RvYy9jLWFwaS9jb25jcmV0ZS5yc3QKQEAgLTc0LDI2ICs3NCwzNSBAQAogCiAuLiBfbWFwb2JqZWN0czoKIAotTWFwcGluZyBPYmplY3RzCi09PT09PT09PT09PT09PT0KK0NvbnRhaW5lciBPYmplY3RzCis9PT09PT09PT09PT09PT09PQogCiAuLiBpbmRleDo6IG9iamVjdDogbWFwcGluZwogCiAuLiB0b2N0cmVlOjoKIAogICAgZGljdC5yc3QKKyAgIHNldC5yc3QKIAogCiAuLiBfb3RoZXJvYmplY3RzOgogCitGdW5jdGlvbiBPYmplY3RzCis9PT09PT09PT09PT09PT09CisKKy4uIHRvY3RyZWU6OgorCisgICBmdW5jdGlvbi5yc3QKKyAgIG1ldGhvZC5yc3QKKyAgIGNlbGwucnN0CisgICBjb2RlLnJzdAorCisKIE90aGVyIE9iamVjdHMKID09PT09PT09PT09PT0KIAogLi4gdG9jdHJlZTo6CiAKLSAgIHNldC5yc3QKLSAgIGZ1bmN0aW9uLnJzdAotICAgbWV0aG9kLnJzdAogICAgZmlsZS5yc3QKICAgIG1vZHVsZS5yc3QKICAgIGl0ZXJhdG9yLnJzdApAQCAtMTAyLDcgKzExMSw2IEBACiAgICBtZW1vcnl2aWV3LnJzdAogICAgd2Vha3JlZi5yc3QKICAgIGNhcHN1bGUucnN0Ci0gICBjZWxsLnJzdAogICAgZ2VuLnJzdAogICAgZGF0ZXRpbWUucnN0Ci0gICBjb2RlLnJzdAorCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvY29udmVyc2lvbi5yc3QgYi9Eb2MvYy1hcGkvY29udmVyc2lvbi5yc3QKaW5kZXggOTU3OGY5OC4uOTU2NmQ5ZCAxMDA2NDQKLS0tIGEvRG9jL2MtYXBpL2NvbnZlcnNpb24ucnN0CisrKyBiL0RvYy9jLWFwaS9jb252ZXJzaW9uLnJzdApAQCAtMTE5LDEzICsxMTksMTMgQEAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMQogCiAKLS4uIGM6ZnVuY3Rpb246OiBpbnQgUHlPU19zdHJpY21wKGNoYXIgKnMxLCBjaGFyICpzMikKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlPU19zdHJpY21wKGNvbnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMikKIAogICAgQ2FzZSBpbnNlbnNpdGl2ZSBjb21wYXJpc29uIG9mIHN0cmluZ3MuIFRoZSBmdW5jdGlvbiB3b3JrcyBhbG1vc3QKICAgIGlkZW50aWNhbGx5IHRvIDpjOmZ1bmM6YHN0cmNtcGAgZXhjZXB0IHRoYXQgaXQgaWdub3JlcyB0aGUgY2FzZS4KIAogCi0uLiBjOmZ1bmN0aW9uOjogaW50IFB5T1Nfc3RybmljbXAoY2hhciAqczEsIGNoYXIgKnMyLCBQeV9zc2l6ZV90ICBzaXplKQorLi4gYzpmdW5jdGlvbjo6IGludCBQeU9TX3N0cm5pY21wKGNvbnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMiwgUHlfc3NpemVfdCAgc2l6ZSkKIAogICAgQ2FzZSBpbnNlbnNpdGl2ZSBjb21wYXJpc29uIG9mIHN0cmluZ3MuIFRoZSBmdW5jdGlvbiB3b3JrcyBhbG1vc3QKICAgIGlkZW50aWNhbGx5IHRvIDpjOmZ1bmM6YHN0cm5jbXBgIGV4Y2VwdCB0aGF0IGl0IGlnbm9yZXMgdGhlIGNhc2UuCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvZGljdC5yc3QgYi9Eb2MvYy1hcGkvZGljdC5yc3QKaW5kZXggNmJhY2MzMi4uYWVmZjY0MCAxMDA2NDQKLS0tIGEvRG9jL2MtYXBpL2RpY3QucnN0CisrKyBiL0RvYy9jLWFwaS9kaWN0LnJzdApAQCAtODQsNyArODQsNyBAQAogICAgb24gZmFpbHVyZS4KIAogCi0uLiBjOmZ1bmN0aW9uOjogaW50IFB5RGljdF9EZWxJdGVtU3RyaW5nKFB5T2JqZWN0ICpwLCBjaGFyICprZXkpCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5RGljdF9EZWxJdGVtU3RyaW5nKFB5T2JqZWN0ICpwLCBjb25zdCBjaGFyICprZXkpCiAKICAgIFJlbW92ZSB0aGUgZW50cnkgaW4gZGljdGlvbmFyeSAqcCogd2hpY2ggaGFzIGEga2V5IHNwZWNpZmllZCBieSB0aGUgc3RyaW5nCiAgICAqa2V5Ki4gIFJldHVybiBgYDBgYCBvbiBzdWNjZXNzIG9yIGBgLTFgYCBvbiBmYWlsdXJlLgpAQCAtMTEwLDYgKzExMCwxNSBAQAogICAgOmM6dHlwZTpgY2hhclwqYCwgcmF0aGVyIHRoYW4gYSA6Yzp0eXBlOmBQeU9iamVjdFwqYC4KIAogCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5RGljdF9TZXREZWZhdWx0KFB5T2JqZWN0ICpwLCBQeU9iamVjdCAqa2V5LCBQeU9iamVjdCAqZGVmYXVsdCkKKworICAgVGhpcyBpcyB0aGUgc2FtZSBhcyB0aGUgUHl0aG9uLWxldmVsIDptZXRoOmBkaWN0LnNldGRlZmF1bHRgLiAgSWYgcHJlc2VudCwgaXQKKyAgIHJldHVybnMgdGhlIHZhbHVlIGNvcnJlc3BvbmRpbmcgdG8gKmtleSogZnJvbSB0aGUgZGljdGlvbmFyeSAqcCouICBJZiB0aGUga2V5CisgICBpcyBub3QgaW4gdGhlIGRpY3QsIGl0IGlzIGluc2VydGVkIHdpdGggdmFsdWUgKmRlZmF1bHRvYmoqIGFuZCAqZGVmYXVsdG9iaioKKyAgIGlzIHJldHVybmVkLiAgVGhpcyBmdW5jdGlvbiBldmFsdWF0ZXMgdGhlIGhhc2ggZnVuY3Rpb24gb2YgKmtleSogb25seSBvbmNlLAorICAgaW5zdGVhZCBvZiBldmFsdWF0aW5nIGl0IGluZGVwZW5kZW50bHkgZm9yIHRoZSBsb29rdXAgYW5kIHRoZSBpbnNlcnRpb24uCisKKwogLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeURpY3RfSXRlbXMoUHlPYmplY3QgKnApCiAKICAgIFJldHVybiBhIDpjOnR5cGU6YFB5TGlzdE9iamVjdGAgY29udGFpbmluZyBhbGwgdGhlIGl0ZW1zIGZyb20gdGhlIGRpY3Rpb25hcnkuCkBAIC0xOTIsOCArMjAxLDExIEBACiAKIC4uIGM6ZnVuY3Rpb246OiBpbnQgUHlEaWN0X1VwZGF0ZShQeU9iamVjdCAqYSwgUHlPYmplY3QgKmIpCiAKLSAgIFRoaXMgaXMgdGhlIHNhbWUgYXMgYGBQeURpY3RfTWVyZ2UoYSwgYiwgMSlgYCBpbiBDLCBvciBgYGEudXBkYXRlKGIpYGAgaW4KLSAgIFB5dGhvbi4gIFJldHVybiBgYDBgYCBvbiBzdWNjZXNzIG9yIGBgLTFgYCBpZiBhbiBleGNlcHRpb24gd2FzIHJhaXNlZC4KKyAgIFRoaXMgaXMgdGhlIHNhbWUgYXMgYGBQeURpY3RfTWVyZ2UoYSwgYiwgMSlgYCBpbiBDLCBhbmQgaXMgc2ltaWxhciB0bworICAgYGBhLnVwZGF0ZShiKWBgIGluIFB5dGhvbiBleGNlcHQgdGhhdCA6YzpmdW5jOmBQeURpY3RfVXBkYXRlYCBkb2Vzbid0IGZhbGwKKyAgIGJhY2sgdG8gdGhlIGl0ZXJhdGluZyBvdmVyIGEgc2VxdWVuY2Ugb2Yga2V5IHZhbHVlIHBhaXJzIGlmIHRoZSBzZWNvbmQKKyAgIGFyZ3VtZW50IGhhcyBubyAia2V5cyIgYXR0cmlidXRlLiAgUmV0dXJuIGBgMGBgIG9uIHN1Y2Nlc3Mgb3IgYGAtMWBgIGlmIGFuCisgICBleGNlcHRpb24gd2FzIHJhaXNlZC4KIAogCiAuLiBjOmZ1bmN0aW9uOjogaW50IFB5RGljdF9NZXJnZUZyb21TZXEyKFB5T2JqZWN0ICphLCBQeU9iamVjdCAqc2VxMiwgaW50IG92ZXJyaWRlKQpkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL2V4Y2VwdGlvbnMucnN0IGIvRG9jL2MtYXBpL2V4Y2VwdGlvbnMucnN0CmluZGV4IDBhYTg5MmQuLmMyZGY3NjcgMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS9leGNlcHRpb25zLnJzdAorKysgYi9Eb2MvYy1hcGkvZXhjZXB0aW9ucy5yc3QKQEAgLTY0LDcgKzY0LDcgQEAKICAgICAgIERvIG5vdCBjb21wYXJlIHRoZSByZXR1cm4gdmFsdWUgdG8gYSBzcGVjaWZpYyBleGNlcHRpb247IHVzZQogICAgICAgOmM6ZnVuYzpgUHlFcnJfRXhjZXB0aW9uTWF0Y2hlc2AgaW5zdGVhZCwgc2hvd24gYmVsb3cuICAoVGhlIGNvbXBhcmlzb24gY291bGQKICAgICAgIGVhc2lseSBmYWlsIHNpbmNlIHRoZSBleGNlcHRpb24gbWF5IGJlIGFuIGluc3RhbmNlIGluc3RlYWQgb2YgYSBjbGFzcywgaW4gdGhlCi0gICAgICBjYXNlIG9mIGEgY2xhc3MgZXhjZXB0aW9uLCBvciBpdCBtYXkgdGhlIGEgc3ViY2xhc3Mgb2YgdGhlIGV4cGVjdGVkIGV4Y2VwdGlvbi4pCisgICAgICBjYXNlIG9mIGEgY2xhc3MgZXhjZXB0aW9uLCBvciBpdCBtYXkgYmUgYSBzdWJjbGFzcyBvZiB0aGUgZXhwZWN0ZWQgZXhjZXB0aW9uLikKIAogCiAuLiBjOmZ1bmN0aW9uOjogaW50IFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlPYmplY3QgKmV4YykKQEAgLTkwLDYgKzkwLDE2IEBACiAgICB0aGUgY2xhc3MgaW4gdGhhdCBjYXNlLiAgSWYgdGhlIHZhbHVlcyBhcmUgYWxyZWFkeSBub3JtYWxpemVkLCBub3RoaW5nIGhhcHBlbnMuCiAgICBUaGUgZGVsYXllZCBub3JtYWxpemF0aW9uIGlzIGltcGxlbWVudGVkIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UuCiAKKyAgIC4uIG5vdGU6OgorCisgICAgICBUaGlzIGZ1bmN0aW9uICpkb2VzIG5vdCogaW1wbGljaXRseSBzZXQgdGhlIGBgX190cmFjZWJhY2tfX2BgCisgICAgICBhdHRyaWJ1dGUgb24gdGhlIGV4Y2VwdGlvbiB2YWx1ZS4gSWYgc2V0dGluZyB0aGUgdHJhY2ViYWNrCisgICAgICBhcHByb3ByaWF0ZWx5IGlzIGRlc2lyZWQsIHRoZSBmb2xsb3dpbmcgYWRkaXRpb25hbCBzbmlwcGV0IGlzIG5lZWRlZDo6CisKKyAgICAgICAgIGlmICh0YiAhPSBOVUxMKSB7CisgICAgICAgICAgIFB5RXhjZXB0aW9uX1NldFRyYWNlYmFjayh2YWwsIHRiKTsKKyAgICAgICAgIH0KKwogCiAuLiBjOmZ1bmN0aW9uOjogdm9pZCBQeUVycl9DbGVhcigpCiAKQEAgLTIyNiwxNiArMjM2LDI1IEBACiAKICAgIFNpbWlsYXIgdG8gOmM6ZnVuYzpgUHlFcnJfU2V0RnJvbUVycm5vYCwgd2l0aCB0aGUgYWRkaXRpb25hbCBiZWhhdmlvciB0aGF0IGlmCiAgICAqZmlsZW5hbWVPYmplY3QqIGlzIG5vdCAqTlVMTCosIGl0IGlzIHBhc3NlZCB0byB0aGUgY29uc3RydWN0b3Igb2YgKnR5cGUqIGFzCi0gICBhIHRoaXJkIHBhcmFtZXRlci4gIEluIHRoZSBjYXNlIG9mIGV4Y2VwdGlvbnMgc3VjaCBhcyA6ZXhjOmBJT0Vycm9yYCBhbmQKLSAgIDpleGM6YE9TRXJyb3JgLCB0aGlzIGlzIHVzZWQgdG8gZGVmaW5lIHRoZSA6YXR0cjpgZmlsZW5hbWVgIGF0dHJpYnV0ZSBvZiB0aGUKKyAgIGEgdGhpcmQgcGFyYW1ldGVyLiAgSW4gdGhlIGNhc2Ugb2YgOmV4YzpgT1NFcnJvcmAgZXhjZXB0aW9uLAorICAgdGhpcyBpcyB1c2VkIHRvIGRlZmluZSB0aGUgOmF0dHI6YGZpbGVuYW1lYCBhdHRyaWJ1dGUgb2YgdGhlCiAgICBleGNlcHRpb24gaW5zdGFuY2UuCiAKIAorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWVPYmplY3RzKFB5T2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqZmlsZW5hbWVPYmplY3QsIFB5T2JqZWN0ICpmaWxlbmFtZU9iamVjdDIpCisKKyAgIFNpbWlsYXIgdG8gOmM6ZnVuYzpgUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lT2JqZWN0YCwgYnV0IHRha2VzIGEgc2Vjb25kCisgICBmaWxlbmFtZSBvYmplY3QsIGZvciByYWlzaW5nIGVycm9ycyB3aGVuIGEgZnVuY3Rpb24gdGhhdCB0YWtlcyB0d28gZmlsZW5hbWVzCisgICBmYWlscy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWUoUHlPYmplY3QgKnR5cGUsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQogCiAgICBTaW1pbGFyIHRvIDpjOmZ1bmM6YFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZU9iamVjdGAsIGJ1dCB0aGUgZmlsZW5hbWUKICAgIGlzIGdpdmVuIGFzIGEgQyBzdHJpbmcuICAqZmlsZW5hbWUqIGlzIGRlY29kZWQgZnJvbSB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZwotICAgKDpmdW5jOmBzeXMuZ2V0ZmlsZXN5c3RlbWVuY29kaW5nYCkuCisgICAoOmZ1bmM6YG9zLmZzZGVjb2RlYCkuCiAKIAogLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUVycl9TZXRGcm9tV2luZG93c0VycihpbnQgaWVycikKQEAgLTI1NiwxOCArMjc1LDExIEBACiAgICBzcGVjaWZ5aW5nIHRoZSBleGNlcHRpb24gdHlwZSB0byBiZSByYWlzZWQuIEF2YWlsYWJpbGl0eTogV2luZG93cy4KIAogCi0uLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyV2l0aEZpbGVuYW1lT2JqZWN0KGludCBpZXJyLCBQeU9iamVjdCAqZmlsZW5hbWVPYmplY3QpCi0KLSAgIFNpbWlsYXIgdG8gOmM6ZnVuYzpgUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnJgLCB3aXRoIHRoZSBhZGRpdGlvbmFsIGJlaGF2aW9yCi0gICB0aGF0IGlmICpmaWxlbmFtZU9iamVjdCogaXMgbm90ICpOVUxMKiwgaXQgaXMgcGFzc2VkIHRvIHRoZSBjb25zdHJ1Y3RvciBvZgotICAgOmV4YzpgV2luZG93c0Vycm9yYCBhcyBhIHRoaXJkIHBhcmFtZXRlci4gIEF2YWlsYWJpbGl0eTogV2luZG93cy4KLQotCiAuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyV2l0aEZpbGVuYW1lKGludCBpZXJyLCBjb25zdCBjaGFyICpmaWxlbmFtZSkKIAogICAgU2ltaWxhciB0byA6YzpmdW5jOmBQeUVycl9TZXRGcm9tV2luZG93c0VycldpdGhGaWxlbmFtZU9iamVjdGAsIGJ1dCB0aGUKICAgIGZpbGVuYW1lIGlzIGdpdmVuIGFzIGEgQyBzdHJpbmcuICAqZmlsZW5hbWUqIGlzIGRlY29kZWQgZnJvbSB0aGUgZmlsZXN5c3RlbQotICAgZW5jb2RpbmcgKDpmdW5jOmBzeXMuZ2V0ZmlsZXN5c3RlbWVuY29kaW5nYCkuICBBdmFpbGFiaWxpdHk6IFdpbmRvd3MuCisgICBlbmNvZGluZyAoOmZ1bmM6YG9zLmZzZGVjb2RlYCkuICBBdmFpbGFiaWxpdHk6IFdpbmRvd3MuCiAKIAogLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUVycl9TZXRFeGNGcm9tV2luZG93c0VycldpdGhGaWxlbmFtZU9iamVjdChQeU9iamVjdCAqdHlwZSwgaW50IGllcnIsIFB5T2JqZWN0ICpmaWxlbmFtZSkKQEAgLTI3Nyw2ICsyODksMTUgQEAKICAgIEF2YWlsYWJpbGl0eTogV2luZG93cy4KIAogCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5RXJyX1NldEV4Y0Zyb21XaW5kb3dzRXJyV2l0aEZpbGVuYW1lT2JqZWN0cyhQeU9iamVjdCAqdHlwZSwgaW50IGllcnIsIFB5T2JqZWN0ICpmaWxlbmFtZSwgUHlPYmplY3QgKmZpbGVuYW1lMikKKworICAgU2ltaWxhciB0byA6YzpmdW5jOmBQeUVycl9TZXRFeGNGcm9tV2luZG93c0VycldpdGhGaWxlbmFtZU9iamVjdGAsCisgICBidXQgYWNjZXB0cyBhIHNlY29uZCBmaWxlbmFtZSBvYmplY3QuCisgICBBdmFpbGFiaWxpdHk6IFdpbmRvd3MuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIC4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlFcnJfU2V0RXhjRnJvbVdpbmRvd3NFcnJXaXRoRmlsZW5hbWUoUHlPYmplY3QgKnR5cGUsIGludCBpZXJyLCBjb25zdCBjaGFyICpmaWxlbmFtZSkKIAogICAgU2ltaWxhciB0byA6YzpmdW5jOmBQeUVycl9TZXRGcm9tV2luZG93c0VycldpdGhGaWxlbmFtZWAsIHdpdGggYW4gYWRkaXRpb25hbApAQCAtMjkzLDE4ICszMTQsMjUgQEAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMwogCiAKLS4uIGM6ZnVuY3Rpb246OiB2b2lkIFB5RXJyX1N5bnRheExvY2F0aW9uRXgoY2hhciAqZmlsZW5hbWUsIGludCBsaW5lbm8sIGludCBjb2xfb2Zmc2V0KQorLi4gYzpmdW5jdGlvbjo6IHZvaWQgUHlFcnJfU3ludGF4TG9jYXRpb25PYmplY3QoUHlPYmplY3QgKmZpbGVuYW1lLCBpbnQgbGluZW5vLCBpbnQgY29sX29mZnNldCkKIAogICAgU2V0IGZpbGUsIGxpbmUsIGFuZCBvZmZzZXQgaW5mb3JtYXRpb24gZm9yIHRoZSBjdXJyZW50IGV4Y2VwdGlvbi4gIElmIHRoZQogICAgY3VycmVudCBleGNlcHRpb24gaXMgbm90IGEgOmV4YzpgU3ludGF4RXJyb3JgLCB0aGVuIGl0IHNldHMgYWRkaXRpb25hbAogICAgYXR0cmlidXRlcywgd2hpY2ggbWFrZSB0aGUgZXhjZXB0aW9uIHByaW50aW5nIHN1YnN5c3RlbSB0aGluayB0aGUgZXhjZXB0aW9uCi0gICBpcyBhIDpleGM6YFN5bnRheEVycm9yYC4gKmZpbGVuYW1lKiBpcyBkZWNvZGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0gZW5jb2RpbmcKLSAgICg6ZnVuYzpgc3lzLmdldGZpbGVzeXN0ZW1lbmNvZGluZ2ApLgorICAgaXMgYSA6ZXhjOmBTeW50YXhFcnJvcmAuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKKy4uIGM6ZnVuY3Rpb246OiB2b2lkIFB5RXJyX1N5bnRheExvY2F0aW9uRXgoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBsaW5lbm8sIGludCBjb2xfb2Zmc2V0KQorCisgICBMaWtlIDpjOmZ1bmM6YFB5RXJyX1N5bnRheExvY2F0aW9uT2JqZWN0YCwgYnV0ICpmaWxlbmFtZSogaXMgYSBieXRlIHN0cmluZworICAgZGVjb2RlZCBmcm9tIHRoZSBmaWxlc3lzdGVtIGVuY29kaW5nICg6ZnVuYzpgb3MuZnNkZWNvZGVgKS4KIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCiAKIAotLi4gYzpmdW5jdGlvbjo6IHZvaWQgUHlFcnJfU3ludGF4TG9jYXRpb24oY2hhciAqZmlsZW5hbWUsIGludCBsaW5lbm8pCisuLiBjOmZ1bmN0aW9uOjogdm9pZCBQeUVycl9TeW50YXhMb2NhdGlvbihjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGxpbmVubykKIAogICAgTGlrZSA6YzpmdW5jOmBQeUVycl9TeW50YXhMb2NhdGlvbkV4YCwgYnV0IHRoZSBjb2xfb2Zmc2V0IHBhcmFtZXRlciBpcwogICAgb21pdHRlZC4KQEAgLTMxOCw3ICszNDYsNyBAQAogICAgdXNlLgogCiAKLS4uIGM6ZnVuY3Rpb246OiBpbnQgUHlFcnJfV2FybkV4KFB5T2JqZWN0ICpjYXRlZ29yeSwgY2hhciAqbWVzc2FnZSwgaW50IHN0YWNrX2xldmVsKQorLi4gYzpmdW5jdGlvbjo6IGludCBQeUVycl9XYXJuRXgoUHlPYmplY3QgKmNhdGVnb3J5LCBjb25zdCBjaGFyICptZXNzYWdlLCBQeV9zc2l6ZV90IHN0YWNrX2xldmVsKQogCiAgICBJc3N1ZSBhIHdhcm5pbmcgbWVzc2FnZS4gIFRoZSAqY2F0ZWdvcnkqIGFyZ3VtZW50IGlzIGEgd2FybmluZyBjYXRlZ29yeSAoc2VlCiAgICBiZWxvdykgb3IgKk5VTEwqOyB0aGUgKm1lc3NhZ2UqIGFyZ3VtZW50IGlzIGFuIFVURi04IGVuY29kZWQgc3RyaW5nLiAgKnN0YWNrX2xldmVsKiBpcyBhCkBAIC0zNTUsMTUgKzM4MywyMiBAQAogICAgZG9jdW1lbnRhdGlvbi4gIFRoZXJlIGlzIG5vIEMgQVBJIGZvciB3YXJuaW5nIGNvbnRyb2wuCiAKIAotLi4gYzpmdW5jdGlvbjo6IGludCBQeUVycl9XYXJuRXhwbGljaXQoUHlPYmplY3QgKmNhdGVnb3J5LCBjb25zdCBjaGFyICptZXNzYWdlLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGxpbmVubywgY29uc3QgY2hhciAqbW9kdWxlLCBQeU9iamVjdCAqcmVnaXN0cnkpCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5RXJyX1dhcm5FeHBsaWNpdE9iamVjdChQeU9iamVjdCAqY2F0ZWdvcnksIFB5T2JqZWN0ICptZXNzYWdlLCBQeU9iamVjdCAqZmlsZW5hbWUsIGludCBsaW5lbm8sIFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICpyZWdpc3RyeSkKIAogICAgSXNzdWUgYSB3YXJuaW5nIG1lc3NhZ2Ugd2l0aCBleHBsaWNpdCBjb250cm9sIG92ZXIgYWxsIHdhcm5pbmcgYXR0cmlidXRlcy4gIFRoaXMKICAgIGlzIGEgc3RyYWlnaHRmb3J3YXJkIHdyYXBwZXIgYXJvdW5kIHRoZSBQeXRob24gZnVuY3Rpb24KICAgIDpmdW5jOmB3YXJuaW5ncy53YXJuX2V4cGxpY2l0YCwgc2VlIHRoZXJlIGZvciBtb3JlIGluZm9ybWF0aW9uLiAgVGhlICptb2R1bGUqCiAgICBhbmQgKnJlZ2lzdHJ5KiBhcmd1bWVudHMgbWF5IGJlIHNldCB0byAqTlVMTCogdG8gZ2V0IHRoZSBkZWZhdWx0IGVmZmVjdAotICAgZGVzY3JpYmVkIHRoZXJlLiAqbWVzc2FnZSogYW5kICptb2R1bGUqIGFyZSBVVEYtOCBlbmNvZGVkIHN0cmluZ3MsCi0gICAqZmlsZW5hbWUqIGlzIGRlY29kZWQgZnJvbSB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZwotICAgKDpmdW5jOmBzeXMuZ2V0ZmlsZXN5c3RlbWVuY29kaW5nYCkuCisgICBkZXNjcmliZWQgdGhlcmUuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlFcnJfV2FybkV4cGxpY2l0KFB5T2JqZWN0ICpjYXRlZ29yeSwgY29uc3QgY2hhciAqbWVzc2FnZSwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBsaW5lbm8sIGNvbnN0IGNoYXIgKm1vZHVsZSwgUHlPYmplY3QgKnJlZ2lzdHJ5KQorCisgICBTaW1pbGFyIHRvIDpjOmZ1bmM6YFB5RXJyX1dhcm5FeHBsaWNpdE9iamVjdGAgZXhjZXB0IHRoYXQgKm1lc3NhZ2UqIGFuZAorICAgKm1vZHVsZSogYXJlIFVURi04IGVuY29kZWQgc3RyaW5ncywgYW5kICpmaWxlbmFtZSogaXMgZGVjb2RlZCBmcm9tIHRoZQorICAgZmlsZXN5c3RlbSBlbmNvZGluZyAoOmZ1bmM6YG9zLmZzZGVjb2RlYCkuCiAKIAogLi4gYzpmdW5jdGlvbjo6IGludCBQeUVycl9XYXJuRm9ybWF0KFB5T2JqZWN0ICpjYXRlZ29yeSwgUHlfc3NpemVfdCBzdGFja19sZXZlbCwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCkBAIC00MTYsNyArNDUxLDcgQEAKICAgIG9ubHkgYmUgY2FsbGVkIGZyb20gdGhlIG1haW4gdGhyZWFkLgogCiAKLS4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlFcnJfTmV3RXhjZXB0aW9uKGNoYXIgKm5hbWUsIFB5T2JqZWN0ICpiYXNlLCBQeU9iamVjdCAqZGljdCkKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlFcnJfTmV3RXhjZXB0aW9uKGNvbnN0IGNoYXIgKm5hbWUsIFB5T2JqZWN0ICpiYXNlLCBQeU9iamVjdCAqZGljdCkKIAogICAgVGhpcyB1dGlsaXR5IGZ1bmN0aW9uIGNyZWF0ZXMgYW5kIHJldHVybnMgYSBuZXcgZXhjZXB0aW9uIGNsYXNzLiBUaGUgKm5hbWUqCiAgICBhcmd1bWVudCBtdXN0IGJlIHRoZSBuYW1lIG9mIHRoZSBuZXcgZXhjZXB0aW9uLCBhIEMgc3RyaW5nIG9mIHRoZSBmb3JtCkBAIC00MzEsNyArNDY2LDcgQEAKICAgIGFyZ3VtZW50IGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBkaWN0aW9uYXJ5IG9mIGNsYXNzIHZhcmlhYmxlcyBhbmQgbWV0aG9kcy4KIAogCi0uLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5RXJyX05ld0V4Y2VwdGlvbldpdGhEb2MoY2hhciAqbmFtZSwgY2hhciAqZG9jLCBQeU9iamVjdCAqYmFzZSwgUHlPYmplY3QgKmRpY3QpCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5RXJyX05ld0V4Y2VwdGlvbldpdGhEb2MoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqZG9jLCBQeU9iamVjdCAqYmFzZSwgUHlPYmplY3QgKmRpY3QpCiAKICAgIFNhbWUgYXMgOmM6ZnVuYzpgUHlFcnJfTmV3RXhjZXB0aW9uYCwgZXhjZXB0IHRoYXQgdGhlIG5ldyBleGNlcHRpb24gY2xhc3MgY2FuCiAgICBlYXNpbHkgYmUgZ2l2ZW4gYSBkb2NzdHJpbmc6IElmICpkb2MqIGlzIG5vbi0qTlVMTCosIGl0IHdpbGwgYmUgdXNlZCBhcyB0aGUKQEAgLTU4Niw3ICs2MjEsNyBAQAogcmVjdXJzaXZlIGNvZGUgZG9lcyBub3QgbmVjZXNzYXJpbHkgaW52b2tlIFB5dGhvbiBjb2RlICh3aGljaCB0cmFja3MgaXRzCiByZWN1cnNpb24gZGVwdGggYXV0b21hdGljYWxseSkuCiAKLS4uIGM6ZnVuY3Rpb246OiBpbnQgUHlfRW50ZXJSZWN1cnNpdmVDYWxsKGNoYXIgKndoZXJlKQorLi4gYzpmdW5jdGlvbjo6IGludCBQeV9FbnRlclJlY3Vyc2l2ZUNhbGwoY29uc3QgY2hhciAqd2hlcmUpCiAKICAgIE1hcmtzIGEgcG9pbnQgd2hlcmUgYSByZWN1cnNpdmUgQy1sZXZlbCBjYWxsIGlzIGFib3V0IHRvIGJlIHBlcmZvcm1lZC4KIApkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL2ZpbGUucnN0IGIvRG9jL2MtYXBpL2ZpbGUucnN0CmluZGV4IGNjMTkwYzkuLjZmMmVjZWUgMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS9maWxlLnJzdAorKysgYi9Eb2MvYy1hcGkvZmlsZS5yc3QKQEAgLTE3LDcgKzE3LDcgQEAKIHRoZSA6bW9kOmBpb2AgQVBJcyBpbnN0ZWFkLgogCiAKLS4uIGM6ZnVuY3Rpb246OiBQeUZpbGVfRnJvbUZkKGludCBmZCwgY2hhciAqbmFtZSwgY2hhciAqbW9kZSwgaW50IGJ1ZmZlcmluZywgY2hhciAqZW5jb2RpbmcsIGNoYXIgKmVycm9ycywgY2hhciAqbmV3bGluZSwgaW50IGNsb3NlZmQpCisuLiBjOmZ1bmN0aW9uOjogUHlGaWxlX0Zyb21GZChpbnQgZmQsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKm1vZGUsIGludCBidWZmZXJpbmcsIGNvbnN0IGNoYXIgKmVuY29kaW5nLCBjb25zdCBjaGFyICplcnJvcnMsIGNvbnN0IGNoYXIgKm5ld2xpbmUsIGludCBjbG9zZWZkKQogCiAgICBDcmVhdGUgYSBQeXRob24gZmlsZSBvYmplY3QgZnJvbSB0aGUgZmlsZSBkZXNjcmlwdG9yIG9mIGFuIGFscmVhZHkKICAgIG9wZW5lZCBmaWxlICpmZCouICBUaGUgYXJndW1lbnRzICpuYW1lKiwgKmVuY29kaW5nKiwgKmVycm9ycyogYW5kICpuZXdsaW5lKgpkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL2dlbi5yc3QgYi9Eb2MvYy1hcGkvZ2VuLnJzdAppbmRleCAzM2NkMjdhLi4wYzg1MWE3IDEwMDY0NAotLS0gYS9Eb2MvYy1hcGkvZ2VuLnJzdAorKysgYi9Eb2MvYy1hcGkvZ2VuLnJzdApAQCAtMTcsNyArMTcsNyBAQAogCiAuLiBjOnZhcjo6IFB5VHlwZU9iamVjdCBQeUdlbl9UeXBlCiAKLSAgIFRoZSB0eXBlIG9iamVjdCBjb3JyZXNwb25kaW5nIHRvIGdlbmVyYXRvciBvYmplY3RzCisgICBUaGUgdHlwZSBvYmplY3QgY29ycmVzcG9uZGluZyB0byBnZW5lcmF0b3Igb2JqZWN0cy4KIAogCiAuLiBjOmZ1bmN0aW9uOjogaW50IFB5R2VuX0NoZWNrKG9iKQpkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL2ltcG9ydC5yc3QgYi9Eb2MvYy1hcGkvaW1wb3J0LnJzdAppbmRleCAyNzAxNTJlLi42MDg2NWY0IDEwMDY0NAotLS0gYS9Eb2MvYy1hcGkvaW1wb3J0LnJzdAorKysgYi9Eb2MvYy1hcGkvaW1wb3J0LnJzdApAQCAtMzksNyArMzksNyBAQAogICAgICAgYmVoYXZpb3VyIGlzbid0IG5lZWRlZCBhbnltb3JlLgogCiAKLS4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlJbXBvcnRfSW1wb3J0TW9kdWxlRXgoY2hhciAqbmFtZSwgUHlPYmplY3QgKmdsb2JhbHMsIFB5T2JqZWN0ICpsb2NhbHMsIFB5T2JqZWN0ICpmcm9tbGlzdCkKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlJbXBvcnRfSW1wb3J0TW9kdWxlRXgoY29uc3QgY2hhciAqbmFtZSwgUHlPYmplY3QgKmdsb2JhbHMsIFB5T2JqZWN0ICpsb2NhbHMsIFB5T2JqZWN0ICpmcm9tbGlzdCkKIAogICAgLi4gaW5kZXg6OiBidWlsdGluOiBfX2ltcG9ydF9fCiAKQEAgLTcwLDcgKzcwLDcgQEAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMwogCiAKLS4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlJbXBvcnRfSW1wb3J0TW9kdWxlTGV2ZWwoY2hhciAqbmFtZSwgUHlPYmplY3QgKmdsb2JhbHMsIFB5T2JqZWN0ICpsb2NhbHMsIFB5T2JqZWN0ICpmcm9tbGlzdCwgaW50IGxldmVsKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUltcG9ydF9JbXBvcnRNb2R1bGVMZXZlbChjb25zdCBjaGFyICpuYW1lLCBQeU9iamVjdCAqZ2xvYmFscywgUHlPYmplY3QgKmxvY2FscywgUHlPYmplY3QgKmZyb21saXN0LCBpbnQgbGV2ZWwpCiAKICAgIFNpbWlsYXIgdG8gOmM6ZnVuYzpgUHlJbXBvcnRfSW1wb3J0TW9kdWxlTGV2ZWxPYmplY3RgLCBidXQgdGhlIG5hbWUgaXMgYW4KICAgIFVURi04IGVuY29kZWQgc3RyaW5nIGluc3RlYWQgb2YgYSBVbmljb2RlIG9iamVjdC4KQEAgLTExOCw3ICsxMTgsNyBAQAogICAgZW5jb2RlZCBzdHJpbmcgaW5zdGVhZCBvZiBhIFVuaWNvZGUgb2JqZWN0LgogCiAKLS4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGUoY2hhciAqbmFtZSwgUHlPYmplY3QgKmNvKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZShjb25zdCBjaGFyICpuYW1lLCBQeU9iamVjdCAqY28pCiAKICAgIC4uIGluZGV4OjogYnVpbHRpbjogY29tcGlsZQogCkBAIC0xMzIsOCArMTMyLDE0IEBACiAgICBzdWNoIG1vZHVsZXMgaGF2ZSBubyB3YXkgdG8ga25vdyB0aGF0IHRoZSBtb2R1bGUgb2JqZWN0IGlzIGFuIHVua25vd24gKGFuZAogICAgcHJvYmFibHkgZGFtYWdlZCB3aXRoIHJlc3BlY3QgdG8gdGhlIG1vZHVsZSBhdXRob3IncyBpbnRlbnRzKSBzdGF0ZS4KIAorICAgVGhlIG1vZHVsZSdzIDphdHRyOmBfX3NwZWNfX2AgYW5kIDphdHRyOmBfX2xvYWRlcl9fYCB3aWxsIGJlIHNldCwgaWYKKyAgIG5vdCBzZXQgYWxyZWFkeSwgd2l0aCB0aGUgYXBwcm9wcmlhdGUgdmFsdWVzLiAgVGhlIHNwZWMncyBsb2FkZXIgd2lsbAorICAgYmUgc2V0IHRvIHRoZSBtb2R1bGUncyBgYF9fbG9hZGVyX19gYCAoaWYgc2V0KSBhbmQgdG8gYW4gaW5zdGFuY2Ugb2YKKyAgIDpjbGFzczpgU291cmNlRmlsZUxvYWRlcmAgb3RoZXJ3aXNlLgorCiAgICBUaGUgbW9kdWxlJ3MgOmF0dHI6YF9fZmlsZV9fYCBhdHRyaWJ1dGUgd2lsbCBiZSBzZXQgdG8gdGhlIGNvZGUgb2JqZWN0J3MKLSAgIDpjOm1lbWJlcjpgY29fZmlsZW5hbWVgLgorICAgOmM6bWVtYmVyOmBjb19maWxlbmFtZWAuICBJZiBhcHBsaWNhYmxlLCA6YXR0cjpgX19jYWNoZWRfX2Agd2lsbCBhbHNvCisgICBiZSBzZXQuCiAKICAgIFRoaXMgZnVuY3Rpb24gd2lsbCByZWxvYWQgdGhlIG1vZHVsZSBpZiBpdCB3YXMgYWxyZWFkeSBpbXBvcnRlZC4gIFNlZQogICAgOmM6ZnVuYzpgUHlJbXBvcnRfUmVsb2FkTW9kdWxlYCBmb3IgdGhlIGludGVuZGVkIHdheSB0byByZWxvYWQgYSBtb2R1bGUuCkBAIC0xNDUsNyArMTUxLDcgQEAKICAgIDpjOmZ1bmM6YFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlV2l0aFBhdGhuYW1lc2AuCiAKIAotLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZUV4KGNoYXIgKm5hbWUsIFB5T2JqZWN0ICpjbywgY2hhciAqcGF0aG5hbWUpCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlRXgoY29uc3QgY2hhciAqbmFtZSwgUHlPYmplY3QgKmNvLCBjb25zdCBjaGFyICpwYXRobmFtZSkKIAogICAgTGlrZSA6YzpmdW5jOmBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZWAsIGJ1dCB0aGUgOmF0dHI6YF9fZmlsZV9fYCBhdHRyaWJ1dGUgb2YKICAgIHRoZSBtb2R1bGUgb2JqZWN0IGlzIHNldCB0byAqcGF0aG5hbWUqIGlmIGl0IGlzIG5vbi1gYE5VTExgYC4KQEAgLTE2Miw3ICsxNjgsNyBAQAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKIAotLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZVdpdGhQYXRobmFtZXMoY2hhciAqbmFtZSwgUHlPYmplY3QgKmNvLCBjaGFyICpwYXRobmFtZSwgY2hhciAqY3BhdGhuYW1lKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZVdpdGhQYXRobmFtZXMoY29uc3QgY2hhciAqbmFtZSwgUHlPYmplY3QgKmNvLCBjb25zdCBjaGFyICpwYXRobmFtZSwgY29uc3QgY2hhciAqY3BhdGhuYW1lKQogCiAgICBMaWtlIDpjOmZ1bmM6YFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlT2JqZWN0YCwgYnV0ICpuYW1lKiwgKnBhdGhuYW1lKiBhbmQKICAgICpjcGF0aG5hbWUqIGFyZSBVVEYtOCBlbmNvZGVkIHN0cmluZ3MuIEF0dGVtcHRzIGFyZSBhbHNvIG1hZGUgdG8gZmlndXJlIG91dApAQCAtMjQ1LDggKzI1MSwxMSBAQAogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSBgYF9fZmlsZV9fYGAgYXR0cmlidXRlIGlzIG5vIGxvbmdlciBzZXQgb24gdGhlIG1vZHVsZS4KIAotLi4gYzpmdW5jdGlvbjo6IGludCBQeUltcG9ydF9JbXBvcnRGcm96ZW5Nb2R1bGUoY2hhciAqbmFtZSkKKworLi4gYzpmdW5jdGlvbjo6IGludCBQeUltcG9ydF9JbXBvcnRGcm96ZW5Nb2R1bGUoY29uc3QgY2hhciAqbmFtZSkKIAogICAgU2ltaWxhciB0byA6YzpmdW5jOmBQeUltcG9ydF9JbXBvcnRGcm96ZW5Nb2R1bGVPYmplY3RgLCBidXQgdGhlIG5hbWUgaXMgYQogICAgVVRGLTggZW5jb2RlZCBzdHJpbmcgaW5zdGVhZCBvZiBhIFVuaWNvZGUgb2JqZWN0LgpkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL2luaXQucnN0IGIvRG9jL2MtYXBpL2luaXQucnN0CmluZGV4IDRkYWQyYzguLjRiYjUwNjQgMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS9pbml0LnJzdAorKysgYi9Eb2MvYy1hcGkvaW5pdC5yc3QKQEAgLTg2LDYgKzg2LDM2IEBACiA9PT09PT09PT09PT09PT09PT09PT09PQogCiAKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlfU2V0U3RhbmRhcmRTdHJlYW1FbmNvZGluZyhjb25zdCBjaGFyICplbmNvZGluZywgY29uc3QgY2hhciAqZXJyb3JzKQorCisgICAuLiBpbmRleDo6CisgICAgICBzaW5nbGU6IFB5X0luaXRpYWxpemUoKQorICAgICAgc2luZ2xlOiBtYWluKCkKKyAgICAgIHRyaXBsZTogc3RkaW47IHN0ZG91dDsgc2R0ZXJyCisKKyAgIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBiZWZvcmUgOmM6ZnVuYzpgUHlfSW5pdGlhbGl6ZWAsIGlmIGl0IGlzCisgICBjYWxsZWQgYXQgYWxsLiBJdCBzcGVjaWZpZXMgd2hpY2ggZW5jb2RpbmcgYW5kIGVycm9yIGhhbmRsaW5nIHRvIHVzZQorICAgd2l0aCBzdGFuZGFyZCBJTywgd2l0aCB0aGUgc2FtZSBtZWFuaW5ncyBhcyBpbiA6ZnVuYzpgc3RyLmVuY29kZWAuCisKKyAgIEl0IG92ZXJyaWRlcyA6ZW52dmFyOmBQWVRIT05JT0VOQ09ESU5HYCB2YWx1ZXMsIGFuZCBhbGxvd3MgZW1iZWRkaW5nIGNvZGUKKyAgIHRvIGNvbnRyb2wgSU8gZW5jb2Rpbmcgd2hlbiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgZG9lcyBub3Qgd29yay4KKworICAgYGBlbmNvZGluZ2BgIGFuZC9vciBgYGVycm9yc2BgIG1heSBiZSBOVUxMIHRvIHVzZQorICAgOmVudnZhcjpgUFlUSE9OSU9FTkNPRElOR2AgYW5kL29yIGRlZmF1bHQgdmFsdWVzIChkZXBlbmRpbmcgb24gb3RoZXIKKyAgIHNldHRpbmdzKS4KKworICAgTm90ZSB0aGF0IDpkYXRhOmBzeXMuc3RkZXJyYCBhbHdheXMgdXNlcyB0aGUgImJhY2tzbGFzaHJlcGxhY2UiIGVycm9yCisgICBoYW5kbGVyLCByZWdhcmRsZXNzIG9mIHRoaXMgKG9yIGFueSBvdGhlcikgc2V0dGluZy4KKworICAgSWYgOmM6ZnVuYzpgUHlfRmluYWxpemVgIGlzIGNhbGxlZCwgdGhpcyBmdW5jdGlvbiB3aWxsIG5lZWQgdG8gYmUgY2FsbGVkCisgICBhZ2FpbiBpbiBvcmRlciB0byBhZmZlY3Qgc3Vic2VxdWVudCBjYWxscyB0byA6YzpmdW5jOmBQeV9Jbml0aWFsaXplYC4KKworICAgUmV0dXJucyAwIGlmIHN1Y2Nlc3NmdWwsIGEgbm9uemVybyB2YWx1ZSBvbiBlcnJvciAoZS5nLiBjYWxsaW5nIGFmdGVyIHRoZQorICAgaW50ZXJwcmV0ZXIgaGFzIGFscmVhZHkgYmVlbiBpbml0aWFsaXplZCkuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIC4uIGM6ZnVuY3Rpb246OiB2b2lkIFB5X1NldFByb2dyYW1OYW1lKHdjaGFyX3QgKm5hbWUpCiAKICAgIC4uIGluZGV4OjoKQEAgLTIwNiwxMyArMjM2LDE4IEBACiAgICA6YzpmdW5jOmBQeV9Jbml0aWFsaXplYCwgdGhlbiA6YzpmdW5jOmBQeV9HZXRQYXRoYCB3b24ndCBhdHRlbXB0IHRvIGNvbXB1dGUgYQogICAgZGVmYXVsdCBzZWFyY2ggcGF0aCBidXQgdXNlcyB0aGUgb25lIHByb3ZpZGVkIGluc3RlYWQuICBUaGlzIGlzIHVzZWZ1bCBpZgogICAgUHl0aG9uIGlzIGVtYmVkZGVkIGJ5IGFuIGFwcGxpY2F0aW9uIHRoYXQgaGFzIGZ1bGwga25vd2xlZGdlIG9mIHRoZSBsb2NhdGlvbgotICAgb2YgYWxsIG1vZHVsZXMuICBUaGUgcGF0aCBjb21wb25lbnRzIHNob3VsZCBiZSBzZXBhcmF0ZWQgYnkgc2VtaWNvbG9ucy4KKyAgIG9mIGFsbCBtb2R1bGVzLiAgVGhlIHBhdGggY29tcG9uZW50cyBzaG91bGQgYmUgc2VwYXJhdGVkIGJ5IHRoZSBwbGF0Zm9ybQorICAgZGVwZW5kZW50IGRlbGltaXRlciBjaGFyYWN0ZXIsIHdoaWNoIGlzIGBgJzonYGAgb24gVW5peCBhbmQgTWFjIE9TIFgsIGBgJzsnYGAKKyAgIG9uIFdpbmRvd3MuCiAKICAgIFRoaXMgYWxzbyBjYXVzZXMgOmRhdGE6YHN5cy5leGVjdXRhYmxlYCB0byBiZSBzZXQgb25seSB0byB0aGUgcmF3IHByb2dyYW0KICAgIG5hbWUgKHNlZSA6YzpmdW5jOmBQeV9TZXRQcm9ncmFtTmFtZWApIGFuZCBmb3IgOmRhdGE6YHN5cy5wcmVmaXhgIGFuZAogICAgOmRhdGE6YHN5cy5leGVjX3ByZWZpeGAgdG8gYmUgZW1wdHkuICBJdCBpcyB1cCB0byB0aGUgY2FsbGVyIHRvIG1vZGlmeSB0aGVzZQogICAgaWYgcmVxdWlyZWQgYWZ0ZXIgY2FsbGluZyA6YzpmdW5jOmBQeV9Jbml0aWFsaXplYC4KIAorICAgVGhlIHBhdGggYXJndW1lbnQgaXMgY29waWVkIGludGVybmFsbHksIHNvIHRoZSBjYWxsZXIgbWF5IGZyZWUgaXQgYWZ0ZXIgdGhlCisgICBjYWxsIGNvbXBsZXRlcy4KKwogCiAuLiBjOmZ1bmN0aW9uOjogY29uc3QgY2hhciogUHlfR2V0VmVyc2lvbigpCiAKQEAgLTMyOSw3ICszNjQsMTEgQEAKIAogLi4gYzpmdW5jdGlvbjo6IHZvaWQgUHlTeXNfU2V0QXJndihpbnQgYXJnYywgd2NoYXJfdCAqKmFyZ3YpCiAKLSAgIFRoaXMgZnVuY3Rpb24gd29ya3MgbGlrZSA6YzpmdW5jOmBQeVN5c19TZXRBcmd2RXhgIHdpdGggKnVwZGF0ZXBhdGgqIHNldCB0byAxLgorICAgVGhpcyBmdW5jdGlvbiB3b3JrcyBsaWtlIDpjOmZ1bmM6YFB5U3lzX1NldEFyZ3ZFeGAgd2l0aCAqdXBkYXRlcGF0aCogc2V0CisgICB0byAxIHVubGVzcyB0aGUgOnByb2dyYW06YHB5dGhvbmAgaW50ZXJwcmV0ZXIgd2FzIHN0YXJ0ZWQgd2l0aCB0aGUKKyAgIDpvcHRpb246YC1JYC4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQgVGhlICp1cGRhdGVwYXRoKiB2YWx1ZSBkZXBlbmRzIG9uIDpvcHRpb246YC1JYC4KIAogCiAuLiBjOmZ1bmN0aW9uOjogdm9pZCBQeV9TZXRQeXRob25Ib21lKHdjaGFyX3QgKmhvbWUpCkBAIC02NTgsNiArNjk3LDIwIEBACiAgICBtYWRlIG9uIHRoZSBtYWluIHRocmVhZC4gIFRoaXMgaXMgbWFpbmx5IGEgaGVscGVyL2RpYWdub3N0aWMgZnVuY3Rpb24uCiAKIAorLi4gYzpmdW5jdGlvbjo6IGludCBQeUdJTFN0YXRlX0NoZWNrKCkKKworICAgUmV0dXJuIDEgaWYgdGhlIGN1cnJlbnQgdGhyZWFkIGlzIGhvbGRpbmcgdGhlIEdJTCBhbmQgMCBvdGhlcndpc2UuCisgICBUaGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgZnJvbSBhbnkgdGhyZWFkIGF0IGFueSB0aW1lLgorICAgT25seSBpZiBpdCBoYXMgaGFkIGl0cyBQeXRob24gdGhyZWFkIHN0YXRlIGluaXRpYWxpemVkIGFuZCBjdXJyZW50bHkgaXMKKyAgIGhvbGRpbmcgdGhlIEdJTCB3aWxsIGl0IHJldHVybiAxLgorICAgVGhpcyBpcyBtYWlubHkgYSBoZWxwZXIvZGlhZ25vc3RpYyBmdW5jdGlvbi4gIEl0IGNhbiBiZSB1c2VmdWwKKyAgIGZvciBleGFtcGxlIGluIGNhbGxiYWNrIGNvbnRleHRzIG9yIG1lbW9yeSBhbGxvY2F0aW9uIGZ1bmN0aW9ucyB3aGVuCisgICBrbm93aW5nIHRoYXQgdGhlIEdJTCBpcyBsb2NrZWQgY2FuIGFsbG93IHRoZSBjYWxsZXIgdG8gcGVyZm9ybSBzZW5zaXRpdmUKKyAgIGFjdGlvbnMgb3Igb3RoZXJ3aXNlIGJlaGF2ZSBkaWZmZXJlbnRseS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogVGhlIGZvbGxvd2luZyBtYWNyb3MgYXJlIG5vcm1hbGx5IHVzZWQgd2l0aG91dCBhIHRyYWlsaW5nIHNlbWljb2xvbjsgbG9vayBmb3IKIGV4YW1wbGUgdXNhZ2UgaW4gdGhlIFB5dGhvbiBzb3VyY2UgZGlzdHJpYnV0aW9uLgogCkBAIC0xMTI5LDcgKzExODIsNyBAQAogCiAuLiBjOmZ1bmN0aW9uOjogUHlUaHJlYWRTdGF0ZSAqIFB5SW50ZXJwcmV0ZXJTdGF0ZV9UaHJlYWRIZWFkKFB5SW50ZXJwcmV0ZXJTdGF0ZSAqaW50ZXJwKQogCi0gICBSZXR1cm4gdGhlIGEgcG9pbnRlciB0byB0aGUgZmlyc3QgOmM6dHlwZTpgUHlUaHJlYWRTdGF0ZWAgb2JqZWN0IGluIHRoZSBsaXN0IG9mCisgICBSZXR1cm4gdGhlIHBvaW50ZXIgdG8gdGhlIGZpcnN0IDpjOnR5cGU6YFB5VGhyZWFkU3RhdGVgIG9iamVjdCBpbiB0aGUgbGlzdCBvZgogICAgdGhyZWFkcyBhc3NvY2lhdGVkIHdpdGggdGhlIGludGVycHJldGVyICppbnRlcnAqLgogCiAKZGlmZiAtLWdpdCBhL0RvYy9jLWFwaS9sb25nLnJzdCBiL0RvYy9jLWFwaS9sb25nLnJzdAppbmRleCBkNTQzMGZkLi5iMzQ4MDE1IDEwMDY0NAotLS0gYS9Eb2MvYy1hcGkvbG9uZy5yc3QKKysrIGIvRG9jL2MtYXBpL2xvbmcucnN0CkBAIC04MCw3ICs4MCw3IEBACiAgICAqTlVMTCogb24gZmFpbHVyZS4KIAogCi0uLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5TG9uZ19Gcm9tU3RyaW5nKGNoYXIgKnN0ciwgY2hhciAqKnBlbmQsIGludCBiYXNlKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUxvbmdfRnJvbVN0cmluZyhjb25zdCBjaGFyICpzdHIsIGNoYXIgKipwZW5kLCBpbnQgYmFzZSkKIAogICAgUmV0dXJuIGEgbmV3IDpjOnR5cGU6YFB5TG9uZ09iamVjdGAgYmFzZWQgb24gdGhlIHN0cmluZyB2YWx1ZSBpbiAqc3RyKiwgd2hpY2gKICAgIGlzIGludGVycHJldGVkIGFjY29yZGluZyB0byB0aGUgcmFkaXggaW4gKmJhc2UqLiAgSWYgKnBlbmQqIGlzIG5vbi0qTlVMTCosCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvbWFwcGluZy5yc3QgYi9Eb2MvYy1hcGkvbWFwcGluZy5yc3QKaW5kZXggMGVmMjk2MS4uZTM0MTA0NyAxMDA2NDQKLS0tIGEvRG9jL2MtYXBpL21hcHBpbmcucnN0CisrKyBiL0RvYy9jLWFwaS9tYXBwaW5nLnJzdApAQCAtMjIsNyArMjIsNyBAQAogICAgZXhwcmVzc2lvbiBgYGxlbihvKWBgLgogCiAKLS4uIGM6ZnVuY3Rpb246OiBpbnQgUHlNYXBwaW5nX0RlbEl0ZW1TdHJpbmcoUHlPYmplY3QgKm8sIGNoYXIgKmtleSkKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlNYXBwaW5nX0RlbEl0ZW1TdHJpbmcoUHlPYmplY3QgKm8sIGNvbnN0IGNoYXIgKmtleSkKIAogICAgUmVtb3ZlIHRoZSBtYXBwaW5nIGZvciBvYmplY3QgKmtleSogZnJvbSB0aGUgb2JqZWN0ICpvKi4gUmV0dXJuIGBgLTFgYCBvbgogICAgZmFpbHVyZS4gIFRoaXMgaXMgZXF1aXZhbGVudCB0byB0aGUgUHl0aG9uIHN0YXRlbWVudCBgYGRlbCBvW2tleV1gYC4KQEAgLTM0LDcgKzM0LDcgQEAKICAgIGZhaWx1cmUuICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gdGhlIFB5dGhvbiBzdGF0ZW1lbnQgYGBkZWwgb1trZXldYGAuCiAKIAotLi4gYzpmdW5jdGlvbjo6IGludCBQeU1hcHBpbmdfSGFzS2V5U3RyaW5nKFB5T2JqZWN0ICpvLCBjaGFyICprZXkpCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5TWFwcGluZ19IYXNLZXlTdHJpbmcoUHlPYmplY3QgKm8sIGNvbnN0IGNoYXIgKmtleSkKIAogICAgT24gc3VjY2VzcywgcmV0dXJuIGBgMWBgIGlmIHRoZSBtYXBwaW5nIG9iamVjdCBoYXMgdGhlIGtleSAqa2V5KiBhbmQgYGAwYGAKICAgIG90aGVyd2lzZS4gIFRoaXMgaXMgZXF1aXZhbGVudCB0byB0aGUgUHl0aG9uIGV4cHJlc3Npb24gYGBrZXkgaW4gb2BgLgpAQCAtNjcsMTMgKzY3LDEzIEBACiAgICB0aGUgUHl0aG9uIGV4cHJlc3Npb24gYGBsaXN0KG8uaXRlbXMoKSlgYC4KIAogCi0uLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5TWFwcGluZ19HZXRJdGVtU3RyaW5nKFB5T2JqZWN0ICpvLCBjaGFyICprZXkpCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5TWFwcGluZ19HZXRJdGVtU3RyaW5nKFB5T2JqZWN0ICpvLCBjb25zdCBjaGFyICprZXkpCiAKICAgIFJldHVybiBlbGVtZW50IG9mICpvKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBvYmplY3QgKmtleSogb3IgKk5VTEwqIG9uIGZhaWx1cmUuCiAgICBUaGlzIGlzIHRoZSBlcXVpdmFsZW50IG9mIHRoZSBQeXRob24gZXhwcmVzc2lvbiBgYG9ba2V5XWBgLgogCiAKLS4uIGM6ZnVuY3Rpb246OiBpbnQgUHlNYXBwaW5nX1NldEl0ZW1TdHJpbmcoUHlPYmplY3QgKm8sIGNoYXIgKmtleSwgUHlPYmplY3QgKnYpCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5TWFwcGluZ19TZXRJdGVtU3RyaW5nKFB5T2JqZWN0ICpvLCBjb25zdCBjaGFyICprZXksIFB5T2JqZWN0ICp2KQogCiAgICBNYXAgdGhlIG9iamVjdCAqa2V5KiB0byB0aGUgdmFsdWUgKnYqIGluIG9iamVjdCAqbyouIFJldHVybnMgYGAtMWBgIG9uIGZhaWx1cmUuCiAgICBUaGlzIGlzIHRoZSBlcXVpdmFsZW50IG9mIHRoZSBQeXRob24gc3RhdGVtZW50IGBgb1trZXldID0gdmBgLgpkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL21hcnNoYWwucnN0IGIvRG9jL2MtYXBpL21hcnNoYWwucnN0CmluZGV4IGRhNDAyYTguLmE2ZDBmNDYgMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS9tYXJzaGFsLnJzdAorKysgYi9Eb2MvYy1hcGkvbWFyc2hhbC5yc3QKQEAgLTUzLDYgKzUzLDggQEAKICAgIGZvciByZWFkaW5nLiAgT25seSBhIDMyLWJpdCB2YWx1ZSBjYW4gYmUgcmVhZCBpbiB1c2luZyB0aGlzIGZ1bmN0aW9uLAogICAgcmVnYXJkbGVzcyBvZiB0aGUgbmF0aXZlIHNpemUgb2YgOmM6dHlwZTpgbG9uZ2AuCiAKKyAgIE9uIGVycm9yLCByYWlzZSBhbiBleGNlcHRpb24gYW5kIHJldHVybiBgYC0xYGAuCisKIAogLi4gYzpmdW5jdGlvbjo6IGludCBQeU1hcnNoYWxfUmVhZFNob3J0RnJvbUZpbGUoRklMRSAqZmlsZSkKIApAQCAtNjAsMTEgKzYyLDE1IEBACiAgICBmb3IgcmVhZGluZy4gIE9ubHkgYSAxNi1iaXQgdmFsdWUgY2FuIGJlIHJlYWQgaW4gdXNpbmcgdGhpcyBmdW5jdGlvbiwKICAgIHJlZ2FyZGxlc3Mgb2YgdGhlIG5hdGl2ZSBzaXplIG9mIDpjOnR5cGU6YHNob3J0YC4KIAorICAgT24gZXJyb3IsIHJhaXNlIGFuIGV4Y2VwdGlvbiBhbmQgcmV0dXJuIGBgLTFgYC4KKwogCiAuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5TWFyc2hhbF9SZWFkT2JqZWN0RnJvbUZpbGUoRklMRSAqZmlsZSkKIAogICAgUmV0dXJuIGEgUHl0aG9uIG9iamVjdCBmcm9tIHRoZSBkYXRhIHN0cmVhbSBpbiBhIDpjOnR5cGU6YEZJTEVcKmAgb3BlbmVkIGZvcgotICAgcmVhZGluZy4gIE9uIGVycm9yLCBzZXRzIHRoZSBhcHByb3ByaWF0ZSBleGNlcHRpb24gKDpleGM6YEVPRkVycm9yYCBvcgorICAgcmVhZGluZy4KKworICAgT24gZXJyb3IsIHNldHMgdGhlIGFwcHJvcHJpYXRlIGV4Y2VwdGlvbiAoOmV4YzpgRU9GRXJyb3JgIG9yCiAgICA6ZXhjOmBUeXBlRXJyb3JgKSBhbmQgcmV0dXJucyAqTlVMTCouCiAKIApAQCAtNzYsMTQgKzgyLDE3IEBACiAgICBhZ2dyZXNzaXZlbHkgbG9hZCBmaWxlIGRhdGEgaW50byBtZW1vcnkgc28gdGhhdCB0aGUgZGUtc2VyaWFsaXphdGlvbiBjYW4KICAgIG9wZXJhdGUgZnJvbSBkYXRhIGluIG1lbW9yeSByYXRoZXIgdGhhbiByZWFkaW5nIGEgYnl0ZSBhdCBhIHRpbWUgZnJvbSB0aGUKICAgIGZpbGUuICBPbmx5IHVzZSB0aGVzZSB2YXJpYW50IGlmIHlvdSBhcmUgY2VydGFpbiB0aGF0IHlvdSB3b24ndCBiZSByZWFkaW5nCi0gICBhbnl0aGluZyBlbHNlIGZyb20gdGhlIGZpbGUuICBPbiBlcnJvciwgc2V0cyB0aGUgYXBwcm9wcmlhdGUgZXhjZXB0aW9uCi0gICAoOmV4YzpgRU9GRXJyb3JgIG9yIDpleGM6YFR5cGVFcnJvcmApIGFuZCByZXR1cm5zICpOVUxMKi4KKyAgIGFueXRoaW5nIGVsc2UgZnJvbSB0aGUgZmlsZS4KKworICAgT24gZXJyb3IsIHNldHMgdGhlIGFwcHJvcHJpYXRlIGV4Y2VwdGlvbiAoOmV4YzpgRU9GRXJyb3JgIG9yCisgICA6ZXhjOmBUeXBlRXJyb3JgKSBhbmQgcmV0dXJucyAqTlVMTCouCiAKIAotLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeU1hcnNoYWxfUmVhZE9iamVjdEZyb21TdHJpbmcoY2hhciAqc3RyaW5nLCBQeV9zc2l6ZV90IGxlbikKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlNYXJzaGFsX1JlYWRPYmplY3RGcm9tU3RyaW5nKGNvbnN0IGNoYXIgKnN0cmluZywgUHlfc3NpemVfdCBsZW4pCiAKICAgIFJldHVybiBhIFB5dGhvbiBvYmplY3QgZnJvbSB0aGUgZGF0YSBzdHJlYW0gaW4gYSBjaGFyYWN0ZXIgYnVmZmVyCi0gICBjb250YWluaW5nICpsZW4qIGJ5dGVzIHBvaW50ZWQgdG8gYnkgKnN0cmluZyouICBPbiBlcnJvciwgc2V0cyB0aGUKLSAgIGFwcHJvcHJpYXRlIGV4Y2VwdGlvbiAoOmV4YzpgRU9GRXJyb3JgIG9yIDpleGM6YFR5cGVFcnJvcmApIGFuZCByZXR1cm5zCi0gICAqTlVMTCouCisgICBjb250YWluaW5nICpsZW4qIGJ5dGVzIHBvaW50ZWQgdG8gYnkgKnN0cmluZyouCisKKyAgIE9uIGVycm9yLCBzZXRzIHRoZSBhcHByb3ByaWF0ZSBleGNlcHRpb24gKDpleGM6YEVPRkVycm9yYCBvcgorICAgOmV4YzpgVHlwZUVycm9yYCkgYW5kIHJldHVybnMgKk5VTEwqLgogCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvbWVtb3J5LnJzdCBiL0RvYy9jLWFwaS9tZW1vcnkucnN0CmluZGV4IDhhZmE1NmEuLjc5MDg2MjIgMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS9tZW1vcnkucnN0CisrKyBiL0RvYy9jLWFwaS9tZW1vcnkucnN0CkBAIC04NCw2ICs4NCw0OCBAQAogZm9yIHRoZSBJL08gYnVmZmVyIGVzY2FwZXMgY29tcGxldGVseSB0aGUgUHl0aG9uIG1lbW9yeSBtYW5hZ2VyLgogCiAKK1JhdyBNZW1vcnkgSW50ZXJmYWNlCis9PT09PT09PT09PT09PT09PT09PQorCitUaGUgZm9sbG93aW5nIGZ1bmN0aW9uIHNldHMgYXJlIHdyYXBwZXJzIHRvIHRoZSBzeXN0ZW0gYWxsb2NhdG9yLiBUaGVzZQorZnVuY3Rpb25zIGFyZSB0aHJlYWQtc2FmZSwgdGhlIDp0ZXJtOmBHSUwgPGdsb2JhbCBpbnRlcnByZXRlciBsb2NrPmAgZG9lcyBub3QKK25lZWQgdG8gYmUgaGVsZC4KKworVGhlIGRlZmF1bHQgcmF3IG1lbW9yeSBibG9jayBhbGxvY2F0b3IgdXNlcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKKzpjOmZ1bmM6YG1hbGxvY2AsIDpjOmZ1bmM6YHJlYWxsb2NgIGFuZCA6YzpmdW5jOmBmcmVlYDsgY2FsbCBgYG1hbGxvYygxKWBgIHdoZW4KK3JlcXVlc3RpbmcgemVybyBieXRlcy4KKworLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKy4uIGM6ZnVuY3Rpb246OiB2b2lkKiBQeU1lbV9SYXdNYWxsb2Moc2l6ZV90IG4pCisKKyAgIEFsbG9jYXRlcyAqbiogYnl0ZXMgYW5kIHJldHVybnMgYSBwb2ludGVyIG9mIHR5cGUgOmM6dHlwZTpgdm9pZFwqYCB0byB0aGUKKyAgIGFsbG9jYXRlZCBtZW1vcnksIG9yICpOVUxMKiBpZiB0aGUgcmVxdWVzdCBmYWlscy4gUmVxdWVzdGluZyB6ZXJvIGJ5dGVzCisgICByZXR1cm5zIGEgZGlzdGluY3Qgbm9uLSpOVUxMKiBwb2ludGVyIGlmIHBvc3NpYmxlLCBhcyBpZgorICAgYGBQeU1lbV9SYXdNYWxsb2MoMSlgYCBoYWQgYmVlbiBjYWxsZWQgaW5zdGVhZC4gVGhlIG1lbW9yeSB3aWxsIG5vdCBoYXZlCisgICBiZWVuIGluaXRpYWxpemVkIGluIGFueSB3YXkuCisKKworLi4gYzpmdW5jdGlvbjo6IHZvaWQqIFB5TWVtX1Jhd1JlYWxsb2Modm9pZCAqcCwgc2l6ZV90IG4pCisKKyAgIFJlc2l6ZXMgdGhlIG1lbW9yeSBibG9jayBwb2ludGVkIHRvIGJ5ICpwKiB0byAqbiogYnl0ZXMuIFRoZSBjb250ZW50cyB3aWxsCisgICBiZSB1bmNoYW5nZWQgdG8gdGhlIG1pbmltdW0gb2YgdGhlIG9sZCBhbmQgdGhlIG5ldyBzaXplcy4gSWYgKnAqIGlzICpOVUxMKiwKKyAgIHRoZSBjYWxsIGlzIGVxdWl2YWxlbnQgdG8gYGBQeU1lbV9SYXdNYWxsb2MobilgYDsgZWxzZSBpZiAqbiogaXMgZXF1YWwgdG8KKyAgIHplcm8sIHRoZSBtZW1vcnkgYmxvY2sgaXMgcmVzaXplZCBidXQgaXMgbm90IGZyZWVkLCBhbmQgdGhlIHJldHVybmVkIHBvaW50ZXIKKyAgIGlzIG5vbi0qTlVMTCouIFVubGVzcyAqcCogaXMgKk5VTEwqLCBpdCBtdXN0IGhhdmUgYmVlbiByZXR1cm5lZCBieSBhCisgICBwcmV2aW91cyBjYWxsIHRvIDpjOmZ1bmM6YFB5TWVtX1Jhd01hbGxvY2Agb3IgOmM6ZnVuYzpgUHlNZW1fUmF3UmVhbGxvY2AuIElmCisgICB0aGUgcmVxdWVzdCBmYWlscywgOmM6ZnVuYzpgUHlNZW1fUmF3UmVhbGxvY2AgcmV0dXJucyAqTlVMTCogYW5kICpwKiByZW1haW5zCisgICBhIHZhbGlkIHBvaW50ZXIgdG8gdGhlIHByZXZpb3VzIG1lbW9yeSBhcmVhLgorCisKKy4uIGM6ZnVuY3Rpb246OiB2b2lkIFB5TWVtX1Jhd0ZyZWUodm9pZCAqcCkKKworICAgRnJlZXMgdGhlIG1lbW9yeSBibG9jayBwb2ludGVkIHRvIGJ5ICpwKiwgd2hpY2ggbXVzdCBoYXZlIGJlZW4gcmV0dXJuZWQgYnkgYQorICAgcHJldmlvdXMgY2FsbCB0byA6YzpmdW5jOmBQeU1lbV9SYXdNYWxsb2NgIG9yIDpjOmZ1bmM6YFB5TWVtX1Jhd1JlYWxsb2NgLgorICAgT3RoZXJ3aXNlLCBvciBpZiBgYFB5TWVtX0ZyZWUocClgYCBoYXMgYmVlbiBjYWxsZWQgYmVmb3JlLCB1bmRlZmluZWQKKyAgIGJlaGF2aW9yIG9jY3Vycy4gSWYgKnAqIGlzICpOVUxMKiwgbm8gb3BlcmF0aW9uIGlzIHBlcmZvcm1lZC4KKworCiAuLiBfbWVtb3J5aW50ZXJmYWNlOgogCiBNZW1vcnkgSW50ZXJmYWNlCkBAIC05MSw4ICsxMzMsMTYgQEAKIAogVGhlIGZvbGxvd2luZyBmdW5jdGlvbiBzZXRzLCBtb2RlbGVkIGFmdGVyIHRoZSBBTlNJIEMgc3RhbmRhcmQsIGJ1dCBzcGVjaWZ5aW5nCiBiZWhhdmlvciB3aGVuIHJlcXVlc3RpbmcgemVybyBieXRlcywgYXJlIGF2YWlsYWJsZSBmb3IgYWxsb2NhdGluZyBhbmQgcmVsZWFzaW5nCi1tZW1vcnkgZnJvbSB0aGUgUHl0aG9uIGhlYXA6CittZW1vcnkgZnJvbSB0aGUgUHl0aG9uIGhlYXAuCiAKK1RoZSBkZWZhdWx0IG1lbW9yeSBibG9jayBhbGxvY2F0b3IgdXNlcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKKzpjOmZ1bmM6YG1hbGxvY2AsIDpjOmZ1bmM6YHJlYWxsb2NgIGFuZCA6YzpmdW5jOmBmcmVlYDsgY2FsbCBgYG1hbGxvYygxKWBgIHdoZW4KK3JlcXVlc3RpbmcgemVybyBieXRlcy4KKworLi4gd2FybmluZzo6CisKKyAgIFRoZSA6dGVybTpgR0lMIDxnbG9iYWwgaW50ZXJwcmV0ZXIgbG9jaz5gIG11c3QgYmUgaGVsZCB3aGVuIHVzaW5nIHRoZXNlCisgICBmdW5jdGlvbnMuCiAKIC4uIGM6ZnVuY3Rpb246OiB2b2lkKiBQeU1lbV9NYWxsb2Moc2l6ZV90IG4pCiAKQEAgLTE1NSw2ICsyMDUsMTI1IEBACiA6YzpmdW5jOmBQeU1lbV9ORVdgLCA6YzpmdW5jOmBQeU1lbV9SRVNJWkVgLCA6YzpmdW5jOmBQeU1lbV9ERUxgLgogCiAKK0N1c3RvbWl6ZSBNZW1vcnkgQWxsb2NhdG9ycworPT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisuLiBjOnR5cGU6OiBQeU1lbUFsbG9jYXRvcgorCisgICBTdHJ1Y3R1cmUgdXNlZCB0byBkZXNjcmliZSBhIG1lbW9yeSBibG9jayBhbGxvY2F0b3IuIFRoZSBzdHJ1Y3R1cmUgaGFzCisgICBmb3VyIGZpZWxkczoKKworICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCBGaWVsZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1lYW5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KworICAgfCBgYHZvaWQgKmN0eGBgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHVzZXIgY29udGV4dCBwYXNzZWQgYXMgZmlyc3QgYXJndW1lbnQgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCBgYHZvaWQqIG1hbGxvYyh2b2lkICpjdHgsIHNpemVfdCBzaXplKWBgICAgICAgICAgICAgICAgICB8IGFsbG9jYXRlIGEgbWVtb3J5IGJsb2NrICAgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCBgYHZvaWQqIHJlYWxsb2Modm9pZCAqY3R4LCB2b2lkICpwdHIsIHNpemVfdCBuZXdfc2l6ZSlgYCB8IGFsbG9jYXRlIG9yIHJlc2l6ZSBhIG1lbW9yeSBibG9jayAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCBgYHZvaWQgZnJlZSh2b2lkICpjdHgsIHZvaWQgKnB0cilgYCAgICAgICAgICAgICAgICAgICAgICB8IGZyZWUgYSBtZW1vcnkgYmxvY2sgICAgICAgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCisuLiBjOnR5cGU6OiBQeU1lbUFsbG9jYXRvckRvbWFpbgorCisgICBFbnVtIHVzZWQgdG8gaWRlbnRpZnkgYW4gYWxsb2NhdG9yIGRvbWFpbi4gRG9tYWluczoKKworICAgKiA6YzpkYXRhOmBQWU1FTV9ET01BSU5fUkFXYDogZnVuY3Rpb25zIDpjOmZ1bmM6YFB5TWVtX1Jhd01hbGxvY2AsCisgICAgIDpjOmZ1bmM6YFB5TWVtX1Jhd1JlYWxsb2NgIGFuZCA6YzpmdW5jOmBQeU1lbV9SYXdGcmVlYAorICAgKiA6YzpkYXRhOmBQWU1FTV9ET01BSU5fTUVNYDogZnVuY3Rpb25zIDpjOmZ1bmM6YFB5TWVtX01hbGxvY2AsCisgICAgIDpjOmZ1bmM6YFB5TWVtX1JlYWxsb2NgIGFuZCA6YzpmdW5jOmBQeU1lbV9GcmVlYAorICAgKiA6YzpkYXRhOmBQWU1FTV9ET01BSU5fT0JKYDogZnVuY3Rpb25zIDpjOmZ1bmM6YFB5T2JqZWN0X01hbGxvY2AsCisgICAgIDpjOmZ1bmM6YFB5T2JqZWN0X1JlYWxsb2NgIGFuZCA6YzpmdW5jOmBQeU9iamVjdF9GcmVlYAorCisKKy4uIGM6ZnVuY3Rpb246OiB2b2lkIFB5TWVtX0dldEFsbG9jYXRvcihQeU1lbUFsbG9jYXRvckRvbWFpbiBkb21haW4sIFB5TWVtQWxsb2NhdG9yICphbGxvY2F0b3IpCisKKyAgIEdldCB0aGUgbWVtb3J5IGJsb2NrIGFsbG9jYXRvciBvZiB0aGUgc3BlY2lmaWVkIGRvbWFpbi4KKworCisuLiBjOmZ1bmN0aW9uOjogdm9pZCBQeU1lbV9TZXRBbGxvY2F0b3IoUHlNZW1BbGxvY2F0b3JEb21haW4gZG9tYWluLCBQeU1lbUFsbG9jYXRvciAqYWxsb2NhdG9yKQorCisgICBTZXQgdGhlIG1lbW9yeSBibG9jayBhbGxvY2F0b3Igb2YgdGhlIHNwZWNpZmllZCBkb21haW4uCisKKyAgIFRoZSBuZXcgYWxsb2NhdG9yIG11c3QgcmV0dXJuIGEgZGlzdGluY3Qgbm9uLU5VTEwgcG9pbnRlciB3aGVuIHJlcXVlc3RpbmcKKyAgIHplcm8gYnl0ZXMuCisKKyAgIEZvciB0aGUgOmM6ZGF0YTpgUFlNRU1fRE9NQUlOX1JBV2AgZG9tYWluLCB0aGUgYWxsb2NhdG9yIG11c3QgYmUKKyAgIHRocmVhZC1zYWZlOiB0aGUgOnRlcm06YEdJTCA8Z2xvYmFsIGludGVycHJldGVyIGxvY2s+YCBpcyBub3QgaGVsZCB3aGVuIHRoZQorICAgYWxsb2NhdG9yIGlzIGNhbGxlZC4KKworICAgSWYgdGhlIG5ldyBhbGxvY2F0b3IgaXMgbm90IGEgaG9vayAoZG9lcyBub3QgY2FsbCB0aGUgcHJldmlvdXMgYWxsb2NhdG9yKSwKKyAgIHRoZSA6YzpmdW5jOmBQeU1lbV9TZXR1cERlYnVnSG9va3NgIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIHRvIHJlaW5zdGFsbCB0aGUKKyAgIGRlYnVnIGhvb2tzIG9uIHRvcCBvbiB0aGUgbmV3IGFsbG9jYXRvci4KKworCisuLiBjOmZ1bmN0aW9uOjogdm9pZCBQeU1lbV9TZXR1cERlYnVnSG9va3Modm9pZCkKKworICAgU2V0dXAgaG9va3MgdG8gZGV0ZWN0IGJ1Z3MgaW4gdGhlIGZvbGxvd2luZyBQeXRob24gbWVtb3J5IGFsbG9jYXRvcgorICAgZnVuY3Rpb25zOgorCisgICAtIDpjOmZ1bmM6YFB5TWVtX1Jhd01hbGxvY2AsIDpjOmZ1bmM6YFB5TWVtX1Jhd1JlYWxsb2NgLAorICAgICA6YzpmdW5jOmBQeU1lbV9SYXdGcmVlYAorICAgLSA6YzpmdW5jOmBQeU1lbV9NYWxsb2NgLCA6YzpmdW5jOmBQeU1lbV9SZWFsbG9jYCwgOmM6ZnVuYzpgUHlNZW1fRnJlZWAKKyAgIC0gOmM6ZnVuYzpgUHlPYmplY3RfTWFsbG9jYCwgOmM6ZnVuYzpgUHlPYmplY3RfUmVhbGxvY2AsCisgICAgIDpjOmZ1bmM6YFB5T2JqZWN0X0ZyZWVgCisKKyAgIE5ld2x5IGFsbG9jYXRlZCBtZW1vcnkgaXMgZmlsbGVkIHdpdGggdGhlIGJ5dGUgYGAweENCYGAsIGZyZWVkIG1lbW9yeSBpcworICAgZmlsbGVkIHdpdGggdGhlIGJ5dGUgYGAweERCYGAuIEFkZGl0aW9uYWwgY2hlY2tzOgorCisgICAtIGRldGVjdCBBUEkgdmlvbGF0aW9ucywgZXg6IDpjOmZ1bmM6YFB5T2JqZWN0X0ZyZWVgIGNhbGxlZCBvbiBhIGJ1ZmZlcgorICAgICBhbGxvY2F0ZWQgYnkgOmM6ZnVuYzpgUHlNZW1fTWFsbG9jYAorICAgLSBkZXRlY3Qgd3JpdGUgYmVmb3JlIHRoZSBzdGFydCBvZiB0aGUgYnVmZmVyIChidWZmZXIgdW5kZXJmbG93KQorICAgLSBkZXRlY3Qgd3JpdGUgYWZ0ZXIgdGhlIGVuZCBvZiB0aGUgYnVmZmVyIChidWZmZXIgb3ZlcmZsb3cpCisKKyAgIFRoZSBmdW5jdGlvbiBkb2VzIG5vdGhpbmcgaWYgUHl0aG9uIGlzIG5vdCBjb21waWxlZCBpcyBkZWJ1ZyBtb2RlLgorCisKK0N1c3RvbWl6ZSBQeU9iamVjdCBBcmVuYSBBbGxvY2F0b3IKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworUHl0aG9uIGhhcyBhICpweW1hbGxvYyogYWxsb2NhdG9yIGZvciBhbGxvY2F0aW9ucyBzbWFsbGVyIHRoYW4gNTEyIGJ5dGVzLiBUaGlzCithbGxvY2F0b3IgaXMgb3B0aW1pemVkIGZvciBzbWFsbCBvYmplY3RzIHdpdGggYSBzaG9ydCBsaWZldGltZS4gSXQgdXNlcyBtZW1vcnkKK21hcHBpbmdzIGNhbGxlZCAiYXJlbmFzIiB3aXRoIGEgZml4ZWQgc2l6ZSBvZiAyNTYgS0IuIEl0IGZhbGxzIGJhY2sgdG8KKzpjOmZ1bmM6YFB5TWVtX1Jhd01hbGxvY2AgYW5kIDpjOmZ1bmM6YFB5TWVtX1Jhd1JlYWxsb2NgIGZvciBhbGxvY2F0aW9ucyBsYXJnZXIKK3RoYW4gNTEyIGJ5dGVzLiAgKnB5bWFsbG9jKiBpcyB0aGUgZGVmYXVsdCBhbGxvY2F0b3IgdXNlZCBieQorOmM6ZnVuYzpgUHlPYmplY3RfTWFsbG9jYC4KKworVGhlIGRlZmF1bHQgYXJlbmEgYWxsb2NhdG9yIHVzZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6CisKKyogOmM6ZnVuYzpgVmlydHVhbEFsbG9jYCBhbmQgOmM6ZnVuYzpgVmlydHVhbEZyZWVgIG9uIFdpbmRvd3MsCisqIDpjOmZ1bmM6YG1tYXBgIGFuZCA6YzpmdW5jOmBtdW5tYXBgIGlmIGF2YWlsYWJsZSwKKyogOmM6ZnVuYzpgbWFsbG9jYCBhbmQgOmM6ZnVuYzpgZnJlZWAgb3RoZXJ3aXNlLgorCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworLi4gYzp0eXBlOjogUHlPYmplY3RBcmVuYUFsbG9jYXRvcgorCisgICBTdHJ1Y3R1cmUgdXNlZCB0byBkZXNjcmliZSBhbiBhcmVuYSBhbGxvY2F0b3IuIFRoZSBzdHJ1Y3R1cmUgaGFzCisgICB0aHJlZSBmaWVsZHM6CisKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IEZpZWxkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1lYW5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsKKyAgIHwgYGB2b2lkICpjdHhgYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdXNlciBjb250ZXh0IHBhc3NlZCBhcyBmaXJzdCBhcmd1bWVudCB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCBgYHZvaWQqIGFsbG9jKHZvaWQgKmN0eCwgc2l6ZV90IHNpemUpYGAgICAgICAgICAgfCBhbGxvY2F0ZSBhbiBhcmVuYSBvZiBzaXplIGJ5dGVzICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IGBgdm9pZCBmcmVlKHZvaWQgKmN0eCwgc2l6ZV90IHNpemUsIHZvaWQgKnB0cilgYCB8IGZyZWUgYW4gYXJlbmEgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0X0dldEFyZW5hQWxsb2NhdG9yKFB5T2JqZWN0QXJlbmFBbGxvY2F0b3IgKmFsbG9jYXRvcikKKworICAgR2V0IHRoZSBhcmVuYSBhbGxvY2F0b3IuCisKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdF9TZXRBcmVuYUFsbG9jYXRvcihQeU9iamVjdEFyZW5hQWxsb2NhdG9yICphbGxvY2F0b3IpCisKKyAgIFNldCB0aGUgYXJlbmEgYWxsb2NhdG9yLgorCisKIC4uIF9tZW1vcnlleGFtcGxlczoKIAogRXhhbXBsZXMKZGlmZiAtLWdpdCBhL0RvYy9jLWFwaS9tb2R1bGUucnN0IGIvRG9jL2MtYXBpL21vZHVsZS5yc3QKaW5kZXggYmQ0NjE3MC4uOTg1YTM0NyAxMDA2NDQKLS0tIGEvRG9jL2MtYXBpL21vZHVsZS5yc3QKKysrIGIvRG9jL2MtYXBpL21vZHVsZS5yc3QKQEAgLTM1LDEzICszNSwyMCBAQAogICAgICAgc2luZ2xlOiBfX25hbWVfXyAobW9kdWxlIGF0dHJpYnV0ZSkKICAgICAgIHNpbmdsZTogX19kb2NfXyAobW9kdWxlIGF0dHJpYnV0ZSkKICAgICAgIHNpbmdsZTogX19maWxlX18gKG1vZHVsZSBhdHRyaWJ1dGUpCisgICAgICBzaW5nbGU6IF9fcGFja2FnZV9fIChtb2R1bGUgYXR0cmlidXRlKQorICAgICAgc2luZ2xlOiBfX2xvYWRlcl9fIChtb2R1bGUgYXR0cmlidXRlKQogCiAgICBSZXR1cm4gYSBuZXcgbW9kdWxlIG9iamVjdCB3aXRoIHRoZSA6YXR0cjpgX19uYW1lX19gIGF0dHJpYnV0ZSBzZXQgdG8gKm5hbWUqLgotICAgT25seSB0aGUgbW9kdWxlJ3MgOmF0dHI6YF9fZG9jX19gIGFuZCA6YXR0cjpgX19uYW1lX19gIGF0dHJpYnV0ZXMgYXJlIGZpbGxlZCBpbjsKLSAgIHRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIHByb3ZpZGluZyBhIDphdHRyOmBfX2ZpbGVfX2AgYXR0cmlidXRlLgorICAgVGhlIG1vZHVsZSdzIDphdHRyOmBfX25hbWVfX2AsIDphdHRyOmBfX2RvY19fYCwgOmF0dHI6YF9fcGFja2FnZV9fYCwgYW5kCisgICA6YXR0cjpgX19sb2FkZXJfX2AgYXR0cmlidXRlcyBhcmUgZmlsbGVkIGluIChhbGwgYnV0IDphdHRyOmBfX25hbWVfX2AgYXJlIHNldAorICAgdG8gYGBOb25lYGApOyB0aGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBwcm92aWRpbmcgYSA6YXR0cjpgX19maWxlX19gCisgICBhdHRyaWJ1dGUuCiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMwogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgOmF0dHI6YF9fcGFja2FnZV9fYCBhbmQgOmF0dHI6YF9fbG9hZGVyX19gIGFyZSBzZXQgdG8gYGBOb25lYGAuCisKIAogLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeU1vZHVsZV9OZXcoY29uc3QgY2hhciAqbmFtZSkKIApkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL29iamVjdC5yc3QgYi9Eb2MvYy1hcGkvb2JqZWN0LnJzdAppbmRleCAwYWJhMzYwLi45N2I0NWIxIDEwMDY0NAotLS0gYS9Eb2MvYy1hcGkvb2JqZWN0LnJzdAorKysgYi9Eb2MvYy1hcGkvb2JqZWN0LnJzdApAQCAtMTAxLDcgKzEwMSw3IEBACiAgICBUaGlzIGlzIHRoZSBlcXVpdmFsZW50IG9mIHRoZSBQeXRob24gc3RhdGVtZW50IGBgZGVsIG8uYXR0cl9uYW1lYGAuCiAKIAotLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeVR5cGVfR2VuZXJpY0dldERpY3QoUHlPYmplY3QgKm8sIHZvaWQgKmNvbnRleHQpCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5T2JqZWN0X0dlbmVyaWNHZXREaWN0KFB5T2JqZWN0ICpvLCB2b2lkICpjb250ZXh0KQogCiAgICBBIGdlbmVyaWMgaW1wbGVtZW50YXRpb24gZm9yIHRoZSBnZXR0ZXIgb2YgYSBgYF9fZGljdF9fYGAgZGVzY3JpcHRvci4gSXQKICAgIGNyZWF0ZXMgdGhlIGRpY3Rpb25hcnkgaWYgbmVjZXNzYXJ5LgpAQCAtMTA5LDcgKzEwOSw3IEBACiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKIAogCi0uLiBjOmZ1bmN0aW9uOjogaW50IFB5VHlwZV9HZW5lcmljU2V0RGljdChQeU9iamVjdCAqbywgdm9pZCAqY29udGV4dCkKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlPYmplY3RfR2VuZXJpY1NldERpY3QoUHlPYmplY3QgKm8sIHZvaWQgKmNvbnRleHQpCiAKICAgIEEgZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIHNldHRlciBvZiBhIGBgX19kaWN0X19gYCBkZXNjcmlwdG9yLiBUaGlzCiAgICBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCBhbGxvdyB0aGUgZGljdGlvbmFyeSB0byBiZSBkZWxldGVkLgpAQCAtMTQ5LDYgKzE0OSw5IEBACiAgICByZXByZXNlbnRhdGlvbiBvbiBzdWNjZXNzLCAqTlVMTCogb24gZmFpbHVyZS4gIFRoaXMgaXMgdGhlIGVxdWl2YWxlbnQgb2YgdGhlCiAgICBQeXRob24gZXhwcmVzc2lvbiBgYHJlcHIobylgYC4gIENhbGxlZCBieSB0aGUgOmZ1bmM6YHJlcHJgIGJ1aWx0LWluIGZ1bmN0aW9uLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVGhpcyBmdW5jdGlvbiBub3cgaW5jbHVkZXMgYSBkZWJ1ZyBhc3NlcnRpb24gdG8gaGVscCBlbnN1cmUgdGhhdCBpdAorICAgICAgZG9lcyBub3Qgc2lsZW50bHkgZGlzY2FyZCBhbiBhY3RpdmUgZXhjZXB0aW9uLgogCiAuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5T2JqZWN0X0FTQ0lJKFB5T2JqZWN0ICpvKQogCkBAIC0xNzAsNiArMTczLDEwIEBACiAgICBQeXRob24gZXhwcmVzc2lvbiBgYHN0cihvKWBgLiAgQ2FsbGVkIGJ5IHRoZSA6ZnVuYzpgc3RyYCBidWlsdC1pbiBmdW5jdGlvbgogICAgYW5kLCB0aGVyZWZvcmUsIGJ5IHRoZSA6ZnVuYzpgcHJpbnRgIGZ1bmN0aW9uLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVGhpcyBmdW5jdGlvbiBub3cgaW5jbHVkZXMgYSBkZWJ1ZyBhc3NlcnRpb24gdG8gaGVscCBlbnN1cmUgdGhhdCBpdAorICAgICAgZG9lcyBub3Qgc2lsZW50bHkgZGlzY2FyZCBhbiBhY3RpdmUgZXhjZXB0aW9uLgorCiAuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5T2JqZWN0X0J5dGVzKFB5T2JqZWN0ICpvKQogCiAgICAuLiBpbmRleDo6IGJ1aWx0aW46IGJ5dGVzCkBAIC0xODAsNDAgKzE4Nyw0NSBAQAogICAgYSBUeXBlRXJyb3IgaXMgcmFpc2VkIHdoZW4gKm8qIGlzIGFuIGludGVnZXIgaW5zdGVhZCBvZiBhIHplcm8taW5pdGlhbGl6ZWQKICAgIGJ5dGVzIG9iamVjdC4KIAotLi4gYzpmdW5jdGlvbjo6IGludCBQeU9iamVjdF9Jc0luc3RhbmNlKFB5T2JqZWN0ICppbnN0LCBQeU9iamVjdCAqY2xzKQotCi0gICBSZXR1cm5zIGBgMWBgIGlmICppbnN0KiBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgY2xhc3MgKmNscyogb3IgYSBzdWJjbGFzcyBvZgotICAgKmNscyosIG9yIGBgMGBgIGlmIG5vdC4gIE9uIGVycm9yLCByZXR1cm5zIGBgLTFgYCBhbmQgc2V0cyBhbiBleGNlcHRpb24uICBJZgotICAgKmNscyogaXMgYSB0eXBlIG9iamVjdCByYXRoZXIgdGhhbiBhIGNsYXNzIG9iamVjdCwgOmM6ZnVuYzpgUHlPYmplY3RfSXNJbnN0YW5jZWAKLSAgIHJldHVybnMgYGAxYGAgaWYgKmluc3QqIGlzIG9mIHR5cGUgKmNscyouICBJZiAqY2xzKiBpcyBhIHR1cGxlLCB0aGUgY2hlY2sgd2lsbAotICAgYmUgZG9uZSBhZ2FpbnN0IGV2ZXJ5IGVudHJ5IGluICpjbHMqLiBUaGUgcmVzdWx0IHdpbGwgYmUgYGAxYGAgd2hlbiBhdCBsZWFzdCBvbmUKLSAgIG9mIHRoZSBjaGVja3MgcmV0dXJucyBgYDFgYCwgb3RoZXJ3aXNlIGl0IHdpbGwgYmUgYGAwYGAuIElmICppbnN0KiBpcyBub3QgYQotICAgY2xhc3MgaW5zdGFuY2UgYW5kICpjbHMqIGlzIG5laXRoZXIgYSB0eXBlIG9iamVjdCwgbm9yIGEgY2xhc3Mgb2JqZWN0LCBub3IgYQotICAgdHVwbGUsICppbnN0KiBtdXN0IGhhdmUgYSA6YXR0cjpgfmluc3RhbmNlLl9fY2xhc3NfX2AgYXR0cmlidXRlIC0tLSB0aGUKLSAgIGNsYXNzIHJlbGF0aW9uc2hpcCBvZiB0aGUgdmFsdWUgb2YgdGhhdCBhdHRyaWJ1dGUgd2l0aCAqY2xzKiB3aWxsIGJlIHVzZWQKLSAgIHRvIGRldGVybWluZSB0aGUgcmVzdWx0IG9mIHRoaXMgZnVuY3Rpb24uCi0KLQotU3ViY2xhc3MgZGV0ZXJtaW5hdGlvbiBpcyBkb25lIGluIGEgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZCB3YXksIGJ1dCBpbmNsdWRlcyBhCi13cmlua2xlIHRoYXQgaW1wbGVtZW50b3JzIG9mIGV4dGVuc2lvbnMgdG8gdGhlIGNsYXNzIHN5c3RlbSBtYXkgd2FudCB0byBiZSBhd2FyZQotb2YuICBJZiA6Y2xhc3M6YEFgIGFuZCA6Y2xhc3M6YEJgIGFyZSBjbGFzcyBvYmplY3RzLCA6Y2xhc3M6YEJgIGlzIGEgc3ViY2xhc3Mgb2YKLTpjbGFzczpgQWAgaWYgaXQgaW5oZXJpdHMgZnJvbSA6Y2xhc3M6YEFgIGVpdGhlciBkaXJlY3RseSBvciBpbmRpcmVjdGx5LiAgSWYKLWVpdGhlciBpcyBub3QgYSBjbGFzcyBvYmplY3QsIGEgbW9yZSBnZW5lcmFsIG1lY2hhbmlzbSBpcyB1c2VkIHRvIGRldGVybWluZSB0aGUKLWNsYXNzIHJlbGF0aW9uc2hpcCBvZiB0aGUgdHdvIG9iamVjdHMuICBXaGVuIHRlc3RpbmcgaWYgKkIqIGlzIGEgc3ViY2xhc3Mgb2YKLSpBKiwgaWYgKkEqIGlzICpCKiwgOmM6ZnVuYzpgUHlPYmplY3RfSXNTdWJjbGFzc2AgcmV0dXJucyB0cnVlLiAgSWYgKkEqIGFuZCAqQioKLWFyZSBkaWZmZXJlbnQgb2JqZWN0cywgKkIqJ3MgOmF0dHI6YH5jbGFzcy5fX2Jhc2VzX19gIGF0dHJpYnV0ZSBpcyBzZWFyY2hlZCBpbgotYSBkZXB0aC1maXJzdCBmYXNoaW9uIGZvciAqQSogLS0tIHRoZSBwcmVzZW5jZSBvZiB0aGUgOmF0dHI6YH5jbGFzcy5fX2Jhc2VzX19gCi1hdHRyaWJ1dGUgaXMgY29uc2lkZXJlZCBzdWZmaWNpZW50IGZvciB0aGlzIGRldGVybWluYXRpb24uCi0KIAogLi4gYzpmdW5jdGlvbjo6IGludCBQeU9iamVjdF9Jc1N1YmNsYXNzKFB5T2JqZWN0ICpkZXJpdmVkLCBQeU9iamVjdCAqY2xzKQogCi0gICBSZXR1cm5zIGBgMWBgIGlmIHRoZSBjbGFzcyAqZGVyaXZlZCogaXMgaWRlbnRpY2FsIHRvIG9yIGRlcml2ZWQgZnJvbSB0aGUgY2xhc3MKLSAgICpjbHMqLCBvdGhlcndpc2UgcmV0dXJucyBgYDBgYC4gIEluIGNhc2Ugb2YgYW4gZXJyb3IsIHJldHVybnMgYGAtMWBgLiBJZiAqY2xzKgotICAgaXMgYSB0dXBsZSwgdGhlIGNoZWNrIHdpbGwgYmUgZG9uZSBhZ2FpbnN0IGV2ZXJ5IGVudHJ5IGluICpjbHMqLiBUaGUgcmVzdWx0IHdpbGwKLSAgIGJlIGBgMWBgIHdoZW4gYXQgbGVhc3Qgb25lIG9mIHRoZSBjaGVja3MgcmV0dXJucyBgYDFgYCwgb3RoZXJ3aXNlIGl0IHdpbGwgYmUKLSAgIGBgMGBgLiBJZiBlaXRoZXIgKmRlcml2ZWQqIG9yICpjbHMqIGlzIG5vdCBhbiBhY3R1YWwgY2xhc3Mgb2JqZWN0IChvciB0dXBsZSksCi0gICB0aGlzIGZ1bmN0aW9uIHVzZXMgdGhlIGdlbmVyaWMgYWxnb3JpdGhtIGRlc2NyaWJlZCBhYm92ZS4KKyAgIFJldHVybiBgYDFgYCBpZiB0aGUgY2xhc3MgKmRlcml2ZWQqIGlzIGlkZW50aWNhbCB0byBvciBkZXJpdmVkIGZyb20gdGhlIGNsYXNzCisgICAqY2xzKiwgb3RoZXJ3aXNlIHJldHVybiBgYDBgYC4gIEluIGNhc2Ugb2YgYW4gZXJyb3IsIHJldHVybiBgYC0xYGAuCisKKyAgIElmICpjbHMqIGlzIGEgdHVwbGUsIHRoZSBjaGVjayB3aWxsIGJlIGRvbmUgYWdhaW5zdCBldmVyeSBlbnRyeSBpbiAqY2xzKi4KKyAgIFRoZSByZXN1bHQgd2lsbCBiZSBgYDFgYCB3aGVuIGF0IGxlYXN0IG9uZSBvZiB0aGUgY2hlY2tzIHJldHVybnMgYGAxYGAsCisgICBvdGhlcndpc2UgaXQgd2lsbCBiZSBgYDBgYC4KKworICAgSWYgKmNscyogaGFzIGEgOm1ldGg6YH5jbGFzcy5fX3N1YmNsYXNzY2hlY2tfX2AgbWV0aG9kLCBpdCB3aWxsIGJlIGNhbGxlZCB0bworICAgZGV0ZXJtaW5lIHRoZSBzdWJjbGFzcyBzdGF0dXMgYXMgZGVzY3JpYmVkIGluIDpwZXA6YDMxMTlgLiAgT3RoZXJ3aXNlLAorICAgKmRlcml2ZWQqIGlzIGEgc3ViY2xhc3Mgb2YgKmNscyogaWYgaXQgaXMgYSBkaXJlY3Qgb3IgaW5kaXJlY3Qgc3ViY2xhc3MsCisgICBpLmUuIGNvbnRhaW5lZCBpbiBgYGNscy5fX21yb19fYGAuCisKKyAgIE5vcm1hbGx5IG9ubHkgY2xhc3Mgb2JqZWN0cywgaS5lLiBpbnN0YW5jZXMgb2YgOmNsYXNzOmB0eXBlYCBvciBhIGRlcml2ZWQKKyAgIGNsYXNzLCBhcmUgY29uc2lkZXJlZCBjbGFzc2VzLiAgSG93ZXZlciwgb2JqZWN0cyBjYW4gb3ZlcnJpZGUgdGhpcyBieSBoYXZpbmcKKyAgIGEgOmF0dHI6YF9fYmFzZXNfX2AgYXR0cmlidXRlICh3aGljaCBtdXN0IGJlIGEgdHVwbGUgb2YgYmFzZSBjbGFzc2VzKS4KKworCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5T2JqZWN0X0lzSW5zdGFuY2UoUHlPYmplY3QgKmluc3QsIFB5T2JqZWN0ICpjbHMpCisKKyAgIFJldHVybiBgYDFgYCBpZiAqaW5zdCogaXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGNsYXNzICpjbHMqIG9yIGEgc3ViY2xhc3Mgb2YKKyAgICpjbHMqLCBvciBgYDBgYCBpZiBub3QuICBPbiBlcnJvciwgcmV0dXJucyBgYC0xYGAgYW5kIHNldHMgYW4gZXhjZXB0aW9uLgorCisgICBJZiAqY2xzKiBpcyBhIHR1cGxlLCB0aGUgY2hlY2sgd2lsbCBiZSBkb25lIGFnYWluc3QgZXZlcnkgZW50cnkgaW4gKmNscyouCisgICBUaGUgcmVzdWx0IHdpbGwgYmUgYGAxYGAgd2hlbiBhdCBsZWFzdCBvbmUgb2YgdGhlIGNoZWNrcyByZXR1cm5zIGBgMWBgLAorICAgb3RoZXJ3aXNlIGl0IHdpbGwgYmUgYGAwYGAuCisKKyAgIElmICpjbHMqIGhhcyBhIDptZXRoOmB+Y2xhc3MuX19pbnN0YW5jZWNoZWNrX19gIG1ldGhvZCwgaXQgd2lsbCBiZSBjYWxsZWQgdG8KKyAgIGRldGVybWluZSB0aGUgc3ViY2xhc3Mgc3RhdHVzIGFzIGRlc2NyaWJlZCBpbiA6cGVwOmAzMTE5YC4gIE90aGVyd2lzZSwgKmluc3QqCisgICBpcyBhbiBpbnN0YW5jZSBvZiAqY2xzKiBpZiBpdHMgY2xhc3MgaXMgYSBzdWJjbGFzcyBvZiAqY2xzKi4KKworICAgQW4gaW5zdGFuY2UgKmluc3QqIGNhbiBvdmVycmlkZSB3aGF0IGlzIGNvbnNpZGVyZWQgaXRzIGNsYXNzIGJ5IGhhdmluZyBhCisgICA6YXR0cjpgX19jbGFzc19fYCBhdHRyaWJ1dGUuCisKKyAgIEFuIG9iamVjdCAqY2xzKiBjYW4gb3ZlcnJpZGUgaWYgaXQgaXMgY29uc2lkZXJlZCBhIGNsYXNzLCBhbmQgd2hhdCBpdHMgYmFzZQorICAgY2xhc3NlcyBhcmUsIGJ5IGhhdmluZyBhIDphdHRyOmBfX2Jhc2VzX19gIGF0dHJpYnV0ZSAod2hpY2ggbXVzdCBiZSBhIHR1cGxlCisgICBvZiBiYXNlIGNsYXNzZXMpLgogCiAKIC4uIGM6ZnVuY3Rpb246OiBpbnQgUHlDYWxsYWJsZV9DaGVjayhQeU9iamVjdCAqbykKQEAgLTI0MCw3ICsyNTIsNyBAQAogICAgb2YgdGhlIFB5dGhvbiBleHByZXNzaW9uIGBgY2FsbGFibGVfb2JqZWN0KCphcmdzKWBgLgogCiAKLS4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKFB5T2JqZWN0ICpjYWxsYWJsZSwgY2hhciAqZm9ybWF0LCAuLi4pCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5T2JqZWN0X0NhbGxGdW5jdGlvbihQeU9iamVjdCAqY2FsbGFibGUsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQogCiAgICBDYWxsIGEgY2FsbGFibGUgUHl0aG9uIG9iamVjdCAqY2FsbGFibGUqLCB3aXRoIGEgdmFyaWFibGUgbnVtYmVyIG9mIEMgYXJndW1lbnRzLgogICAgVGhlIEMgYXJndW1lbnRzIGFyZSBkZXNjcmliZWQgdXNpbmcgYSA6YzpmdW5jOmBQeV9CdWlsZFZhbHVlYCBzdHlsZSBmb3JtYXQKQEAgLTI1MCw4ICsyNjIsMTEgQEAKICAgIHBhc3MgOmM6dHlwZTpgUHlPYmplY3QgXCpgIGFyZ3MsIDpjOmZ1bmM6YFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3NgIGlzIGEKICAgIGZhc3RlciBhbHRlcm5hdGl2ZS4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSB0eXBlIG9mICpmb3JtYXQqIHdhcyBjaGFuZ2VkIGZyb20gYGBjaGFyICpgYC4KIAotLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeU9iamVjdF9DYWxsTWV0aG9kKFB5T2JqZWN0ICpvLCBjaGFyICptZXRob2QsIGNoYXIgKmZvcm1hdCwgLi4uKQorCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5T2JqZWN0X0NhbGxNZXRob2QoUHlPYmplY3QgKm8sIGNvbnN0IGNoYXIgKm1ldGhvZCwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCiAKICAgIENhbGwgdGhlIG1ldGhvZCBuYW1lZCAqbWV0aG9kKiBvZiBvYmplY3QgKm8qIHdpdGggYSB2YXJpYWJsZSBudW1iZXIgb2YgQwogICAgYXJndW1lbnRzLiAgVGhlIEMgYXJndW1lbnRzIGFyZSBkZXNjcmliZWQgYnkgYSA6YzpmdW5jOmBQeV9CdWlsZFZhbHVlYCBmb3JtYXQKQEAgLTI2MSw2ICsyNzYsOSBAQAogICAgTm90ZSB0aGF0IGlmIHlvdSBvbmx5IHBhc3MgOmM6dHlwZTpgUHlPYmplY3QgXCpgIGFyZ3MsCiAgICA6YzpmdW5jOmBQeU9iamVjdF9DYWxsTWV0aG9kT2JqQXJnc2AgaXMgYSBmYXN0ZXIgYWx0ZXJuYXRpdmUuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgdHlwZXMgb2YgKm1ldGhvZCogYW5kICpmb3JtYXQqIHdlcmUgY2hhbmdlZCBmcm9tIGBgY2hhciAqYGAuCisKIAogLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKFB5T2JqZWN0ICpjYWxsYWJsZSwgLi4uLCBOVUxMKQogCkBAIC0zNDIsNiArMzYwLDE2IEBACiAgICByZXR1cm5lZC4gIFRoaXMgaXMgdGhlIGVxdWl2YWxlbnQgdG8gdGhlIFB5dGhvbiBleHByZXNzaW9uIGBgbGVuKG8pYGAuCiAKIAorLi4gYzpmdW5jdGlvbjo6IFB5X3NzaXplX3QgUHlPYmplY3RfTGVuZ3RoSGludChQeU9iamVjdCAqbywgUHlfc3NpemVfdCBkZWZhdWx0KQorCisgICBSZXR1cm4gYW4gZXN0aW1hdGVkIGxlbmd0aCBmb3IgdGhlIG9iamVjdCAqbyouIEZpcnN0IHRyeSB0byByZXR1cm4gaXRzCisgICBhY3R1YWwgbGVuZ3RoLCB0aGVuIGFuIGVzdGltYXRlIHVzaW5nIDptZXRoOmB+b2JqZWN0Ll9fbGVuZ3RoX2hpbnRfX2AsIGFuZAorICAgZmluYWxseSByZXR1cm4gdGhlIGRlZmF1bHQgdmFsdWUuIE9uIGVycm9yIHJldHVybiBgYC0xYGAuIFRoaXMgaXMgdGhlCisgICBlcXVpdmFsZW50IHRvIHRoZSBQeXRob24gZXhwcmVzc2lvbiBgYG9wZXJhdG9yLmxlbmd0aF9oaW50KG8sIGRlZmF1bHQpYGAuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIC4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlPYmplY3RfR2V0SXRlbShQeU9iamVjdCAqbywgUHlPYmplY3QgKmtleSkKIAogICAgUmV0dXJuIGVsZW1lbnQgb2YgKm8qIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG9iamVjdCAqa2V5KiBvciAqTlVMTCogb24gZmFpbHVyZS4KZGlmZiAtLWdpdCBhL0RvYy9jLWFwaS9zZXF1ZW5jZS5yc3QgYi9Eb2MvYy1hcGkvc2VxdWVuY2UucnN0CmluZGV4IDAyOTdiYTMuLjU5NjBkYjkgMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS9zZXF1ZW5jZS5yc3QKKysrIGIvRG9jL2MtYXBpL3NlcXVlbmNlLnJzdApAQCAtMTA3LDggKzEwNyw5IEBACiAKIC4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlTZXF1ZW5jZV9MaXN0KFB5T2JqZWN0ICpvKQogCi0gICBSZXR1cm4gYSBsaXN0IG9iamVjdCB3aXRoIHRoZSBzYW1lIGNvbnRlbnRzIGFzIHRoZSBhcmJpdHJhcnkgc2VxdWVuY2UgKm8qLiAgVGhlCi0gICByZXR1cm5lZCBsaXN0IGlzIGd1YXJhbnRlZWQgdG8gYmUgbmV3LgorICAgUmV0dXJuIGEgbGlzdCBvYmplY3Qgd2l0aCB0aGUgc2FtZSBjb250ZW50cyBhcyB0aGUgc2VxdWVuY2Ugb3IgaXRlcmFibGUgKm8qLAorICAgb3IgKk5VTEwqIG9uIGZhaWx1cmUuICBUaGUgcmV0dXJuZWQgbGlzdCBpcyBndWFyYW50ZWVkIHRvIGJlIG5ldy4gIFRoaXMgaXMKKyAgIGVxdWl2YWxlbnQgdG8gdGhlIFB5dGhvbiBleHByZXNzaW9uIGBgbGlzdChvKWBgLgogCiAKIC4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlTZXF1ZW5jZV9UdXBsZShQeU9iamVjdCAqbykKQEAgLTEyMywxMCArMTI0LDEwIEBACiAKIC4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlTZXF1ZW5jZV9GYXN0KFB5T2JqZWN0ICpvLCBjb25zdCBjaGFyICptKQogCi0gICBSZXR1cm5zIHRoZSBzZXF1ZW5jZSAqbyogYXMgYSB0dXBsZSwgdW5sZXNzIGl0IGlzIGFscmVhZHkgYSB0dXBsZSBvciBsaXN0LCBpbgotICAgd2hpY2ggY2FzZSAqbyogaXMgcmV0dXJuZWQuICBVc2UgOmM6ZnVuYzpgUHlTZXF1ZW5jZV9GYXN0X0dFVF9JVEVNYCB0byBhY2Nlc3MgdGhlCi0gICBtZW1iZXJzIG9mIHRoZSByZXN1bHQuICBSZXR1cm5zICpOVUxMKiBvbiBmYWlsdXJlLiAgSWYgdGhlIG9iamVjdCBpcyBub3QgYQotICAgc2VxdWVuY2UsIHJhaXNlcyA6ZXhjOmBUeXBlRXJyb3JgIHdpdGggKm0qIGFzIHRoZSBtZXNzYWdlIHRleHQuCisgICBSZXR1cm4gdGhlIHNlcXVlbmNlICpvKiBhcyBhIGxpc3QsIHVubGVzcyBpdCBpcyBhbHJlYWR5IGEgdHVwbGUgb3IgbGlzdCwgaW4KKyAgIHdoaWNoIGNhc2UgKm8qIGlzIHJldHVybmVkLiAgVXNlIDpjOmZ1bmM6YFB5U2VxdWVuY2VfRmFzdF9HRVRfSVRFTWAgdG8gYWNjZXNzCisgICB0aGUgbWVtYmVycyBvZiB0aGUgcmVzdWx0LiAgUmV0dXJucyAqTlVMTCogb24gZmFpbHVyZS4gIElmIHRoZSBvYmplY3QgaXMgbm90CisgICBhIHNlcXVlbmNlLCByYWlzZXMgOmV4YzpgVHlwZUVycm9yYCB3aXRoICptKiBhcyB0aGUgbWVzc2FnZSB0ZXh0LgogCiAKIC4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlTZXF1ZW5jZV9GYXN0X0dFVF9JVEVNKFB5T2JqZWN0ICpvLCBQeV9zc2l6ZV90IGkpCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvc3RydWN0dXJlcy5yc3QgYi9Eb2MvYy1hcGkvc3RydWN0dXJlcy5yc3QKaW5kZXggYmI3NDFmYi4uZTllOGFkZCAxMDA2NDQKLS0tIGEvRG9jL2MtYXBpL3N0cnVjdHVyZXMucnN0CisrKyBiL0RvYy9jLWFwaS9zdHJ1Y3R1cmVzLnJzdApAQCAtMjEsNTMgKzIxLDY2IEBACiAgICBBbGwgb2JqZWN0IHR5cGVzIGFyZSBleHRlbnNpb25zIG9mIHRoaXMgdHlwZS4gIFRoaXMgaXMgYSB0eXBlIHdoaWNoCiAgICBjb250YWlucyB0aGUgaW5mb3JtYXRpb24gUHl0aG9uIG5lZWRzIHRvIHRyZWF0IGEgcG9pbnRlciB0byBhbiBvYmplY3QgYXMgYW4KICAgIG9iamVjdC4gIEluIGEgbm9ybWFsICJyZWxlYXNlIiBidWlsZCwgaXQgY29udGFpbnMgb25seSB0aGUgb2JqZWN0J3MKLSAgIHJlZmVyZW5jZSBjb3VudCBhbmQgYSBwb2ludGVyIHRvIHRoZSBjb3JyZXNwb25kaW5nIHR5cGUgb2JqZWN0LiAgSXQKLSAgIGNvcnJlc3BvbmRzIHRvIHRoZSBmaWVsZHMgZGVmaW5lZCBieSB0aGUgZXhwYW5zaW9uIG9mIHRoZSBgYFB5T2JqZWN0X0hFQURgYAotICAgbWFjcm8uCisgICByZWZlcmVuY2UgY291bnQgYW5kIGEgcG9pbnRlciB0byB0aGUgY29ycmVzcG9uZGluZyB0eXBlIG9iamVjdC4KKyAgIE5vdGhpbmcgaXMgYWN0dWFsbHkgZGVjbGFyZWQgdG8gYmUgYSA6Yzp0eXBlOmBQeU9iamVjdGAsIGJ1dCBldmVyeSBwb2ludGVyCisgICB0byBhIFB5dGhvbiBvYmplY3QgY2FuIGJlIGNhc3QgdG8gYSA6Yzp0eXBlOmBQeU9iamVjdCpgLiAgQWNjZXNzIHRvIHRoZQorICAgbWVtYmVycyBtdXN0IGJlIGRvbmUgYnkgdXNpbmcgdGhlIG1hY3JvcyA6YzptYWNybzpgUHlfUkVGQ05UYCBhbmQKKyAgIDpjOm1hY3JvOmBQeV9UWVBFYC4KIAogCiAuLiBjOnR5cGU6OiBQeVZhck9iamVjdAogCiAgICBUaGlzIGlzIGFuIGV4dGVuc2lvbiBvZiA6Yzp0eXBlOmBQeU9iamVjdGAgdGhhdCBhZGRzIHRoZSA6YXR0cjpgb2Jfc2l6ZWAKICAgIGZpZWxkLiAgVGhpcyBpcyBvbmx5IHVzZWQgZm9yIG9iamVjdHMgdGhhdCBoYXZlIHNvbWUgbm90aW9uIG9mICpsZW5ndGgqLgotICAgVGhpcyB0eXBlIGRvZXMgbm90IG9mdGVuIGFwcGVhciBpbiB0aGUgUHl0aG9uL0MgQVBJLiAgSXQgY29ycmVzcG9uZHMgdG8gdGhlCi0gICBmaWVsZHMgZGVmaW5lZCBieSB0aGUgZXhwYW5zaW9uIG9mIHRoZSBgYFB5T2JqZWN0X1ZBUl9IRUFEYGAgbWFjcm8uCisgICBUaGlzIHR5cGUgZG9lcyBub3Qgb2Z0ZW4gYXBwZWFyIGluIHRoZSBQeXRob24vQyBBUEkuCisgICBBY2Nlc3MgdG8gdGhlIG1lbWJlcnMgbXVzdCBiZSBkb25lIGJ5IHVzaW5nIHRoZSBtYWNyb3MKKyAgIDpjOm1hY3JvOmBQeV9SRUZDTlRgLCA6YzptYWNybzpgUHlfVFlQRWAsIGFuZCA6YzptYWNybzpgUHlfU0laRWAuCiAKLVRoZXNlIG1hY3JvcyBhcmUgdXNlZCBpbiB0aGUgZGVmaW5pdGlvbiBvZiA6Yzp0eXBlOmBQeU9iamVjdGAgYW5kCi06Yzp0eXBlOmBQeVZhck9iamVjdGA6Ci0KLS4uIFhYWCBuZWVkIHRvIGRvY3VtZW50IFBFUCAzMTIzIGNoYW5nZXMgaGVyZQogCiAuLiBjOm1hY3JvOjogUHlPYmplY3RfSEVBRAogCi0gICBUaGlzIGlzIGEgbWFjcm8gd2hpY2ggZXhwYW5kcyB0byB0aGUgZGVjbGFyYXRpb25zIG9mIHRoZSBmaWVsZHMgb2YgdGhlCi0gICA6Yzp0eXBlOmBQeU9iamVjdGAgdHlwZTsgaXQgaXMgdXNlZCB3aGVuIGRlY2xhcmluZyBuZXcgdHlwZXMgd2hpY2ggcmVwcmVzZW50Ci0gICBvYmplY3RzIHdpdGhvdXQgYSB2YXJ5aW5nIGxlbmd0aC4gIFRoZSBzcGVjaWZpYyBmaWVsZHMgaXQgZXhwYW5kcyB0byBkZXBlbmQKLSAgIG9uIHRoZSBkZWZpbml0aW9uIG9mIDpjOm1hY3JvOmBQeV9UUkFDRV9SRUZTYC4gIEJ5IGRlZmF1bHQsIHRoYXQgbWFjcm8gaXMKLSAgIG5vdCBkZWZpbmVkLCBhbmQgOmM6bWFjcm86YFB5T2JqZWN0X0hFQURgIGV4cGFuZHMgdG86OgorICAgVGhpcyBpcyBhIG1hY3JvIHVzZWQgd2hlbiBkZWNsYXJpbmcgbmV3IHR5cGVzIHdoaWNoIHJlcHJlc2VudCBvYmplY3RzCisgICB3aXRob3V0IGEgdmFyeWluZyBsZW5ndGguICBUaGUgUHlPYmplY3RfSEVBRCBtYWNybyBleHBhbmRzIHRvOjoKIAotICAgICAgUHlfc3NpemVfdCBvYl9yZWZjbnQ7Ci0gICAgICBQeVR5cGVPYmplY3QgKm9iX3R5cGU7CisgICAgICBQeU9iamVjdCBvYl9iYXNlOwogCi0gICBXaGVuIDpjOm1hY3JvOmBQeV9UUkFDRV9SRUZTYCBpcyBkZWZpbmVkLCBpdCBleHBhbmRzIHRvOjoKLQotICAgICAgUHlPYmplY3QgKl9vYl9uZXh0LCAqX29iX3ByZXY7Ci0gICAgICBQeV9zc2l6ZV90IG9iX3JlZmNudDsKLSAgICAgIFB5VHlwZU9iamVjdCAqb2JfdHlwZTsKKyAgIFNlZSBkb2N1bWVudGF0aW9uIG9mIDpjOnR5cGU6YFB5T2JqZWN0YCBhYm92ZS4KIAogCiAuLiBjOm1hY3JvOjogUHlPYmplY3RfVkFSX0hFQUQKIAotICAgVGhpcyBpcyBhIG1hY3JvIHdoaWNoIGV4cGFuZHMgdG8gdGhlIGRlY2xhcmF0aW9ucyBvZiB0aGUgZmllbGRzIG9mIHRoZQotICAgOmM6dHlwZTpgUHlWYXJPYmplY3RgIHR5cGU7IGl0IGlzIHVzZWQgd2hlbiBkZWNsYXJpbmcgbmV3IHR5cGVzIHdoaWNoCi0gICByZXByZXNlbnQgb2JqZWN0cyB3aXRoIGEgbGVuZ3RoIHRoYXQgdmFyaWVzIGZyb20gaW5zdGFuY2UgdG8gaW5zdGFuY2UuCi0gICBUaGlzIG1hY3JvIGFsd2F5cyBleHBhbmRzIHRvOjoKKyAgIFRoaXMgaXMgYSBtYWNybyB1c2VkIHdoZW4gZGVjbGFyaW5nIG5ldyB0eXBlcyB3aGljaCByZXByZXNlbnQgb2JqZWN0cworICAgd2l0aCBhIGxlbmd0aCB0aGF0IHZhcmllcyBmcm9tIGluc3RhbmNlIHRvIGluc3RhbmNlLgorICAgVGhlIFB5T2JqZWN0X1ZBUl9IRUFEIG1hY3JvIGV4cGFuZHMgdG86OgogCi0gICAgICBQeU9iamVjdF9IRUFECi0gICAgICBQeV9zc2l6ZV90IG9iX3NpemU7CisgICAgICBQeVZhck9iamVjdCBvYl9iYXNlOwogCi0gICBOb3RlIHRoYXQgOmM6bWFjcm86YFB5T2JqZWN0X0hFQURgIGlzIHBhcnQgb2YgdGhlIGV4cGFuc2lvbiwgYW5kIHRoYXQgaXRzIG93bgotICAgZXhwYW5zaW9uIHZhcmllcyBkZXBlbmRpbmcgb24gdGhlIGRlZmluaXRpb24gb2YgOmM6bWFjcm86YFB5X1RSQUNFX1JFRlNgLgorICAgU2VlIGRvY3VtZW50YXRpb24gb2YgOmM6dHlwZTpgUHlWYXJPYmplY3RgIGFib3ZlLgorCisKKy4uIGM6bWFjcm86OiBQeV9UWVBFKG8pCisKKyAgIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBhY2Nlc3MgdGhlIDphdHRyOmBvYl90eXBlYCBtZW1iZXIgb2YgYSBQeXRob24gb2JqZWN0LgorICAgSXQgZXhwYW5kcyB0bzo6CisKKyAgICAgICgoKFB5T2JqZWN0KikobykpLT5vYl90eXBlKQorCisKKy4uIGM6bWFjcm86OiBQeV9SRUZDTlQobykKKworICAgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGFjY2VzcyB0aGUgOmF0dHI6YG9iX3JlZmNudGAgbWVtYmVyIG9mIGEgUHl0aG9uCisgICBvYmplY3QuCisgICBJdCBleHBhbmRzIHRvOjoKKworICAgICAgKCgoUHlPYmplY3QqKShvKSktPm9iX3JlZmNudCkKKworCisuLiBjOm1hY3JvOjogUHlfU0laRShvKQorCisgICBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gYWNjZXNzIHRoZSA6YXR0cjpgb2Jfc2l6ZWAgbWVtYmVyIG9mIGEgUHl0aG9uIG9iamVjdC4KKyAgIEl0IGV4cGFuZHMgdG86OgorCisgICAgICAoKChQeVZhck9iamVjdCopKG8pKS0+b2Jfc2l6ZSkKIAogCiAuLiBjOm1hY3JvOjogUHlPYmplY3RfSEVBRF9JTklUKHR5cGUpCkBAIC0xMzEsNyArMTQ0LDcgQEAKIHR5cGVzLCBidXQgdGhleSBhbHdheXMgcmV0dXJuIDpjOnR5cGU6YFB5T2JqZWN0XCpgLiAgSWYgdGhlIGZ1bmN0aW9uIGlzIG5vdCBvZgogdGhlIDpjOnR5cGU6YFB5Q0Z1bmN0aW9uYCwgdGhlIGNvbXBpbGVyIHdpbGwgcmVxdWlyZSBhIGNhc3QgaW4gdGhlIG1ldGhvZCB0YWJsZS4KIEV2ZW4gdGhvdWdoIDpjOnR5cGU6YFB5Q0Z1bmN0aW9uYCBkZWZpbmVzIHRoZSBmaXJzdCBwYXJhbWV0ZXIgYXMKLTpjOnR5cGU6YFB5T2JqZWN0XCpgLCBpdCBpcyBjb21tb24gdGhhdCB0aGUgbWV0aG9kIGltcGxlbWVudGF0aW9uIHVzZXMgYSB0aGUKKzpjOnR5cGU6YFB5T2JqZWN0XCpgLCBpdCBpcyBjb21tb24gdGhhdCB0aGUgbWV0aG9kIGltcGxlbWVudGF0aW9uIHVzZXMgdGhlCiBzcGVjaWZpYyBDIHR5cGUgb2YgdGhlICpzZWxmKiBvYmplY3QuCiAKIFRoZSA6YXR0cjpgbWxfZmxhZ3NgIGZpZWxkIGlzIGEgYml0ZmllbGQgd2hpY2ggY2FuIGluY2x1ZGUgdGhlIGZvbGxvd2luZyBmbGFncy4KZGlmZiAtLWdpdCBhL0RvYy9jLWFwaS9zeXMucnN0IGIvRG9jL2MtYXBpL3N5cy5yc3QKaW5kZXggOTc2MGRjYS4uN2NlYWQwNyAxMDA2NDQKLS0tIGEvRG9jL2MtYXBpL3N5cy5yc3QKKysrIGIvRG9jL2MtYXBpL3N5cy5yc3QKQEAgLTU2LDEyICs1NiwxMiBAQAogYWNjZXNzaWJsZSB0byBDIGNvZGUuICBUaGV5IGFsbCB3b3JrIHdpdGggdGhlIGN1cnJlbnQgaW50ZXJwcmV0ZXIgdGhyZWFkJ3MKIDptb2Q6YHN5c2AgbW9kdWxlJ3MgZGljdCwgd2hpY2ggaXMgY29udGFpbmVkIGluIHRoZSBpbnRlcm5hbCB0aHJlYWQgc3RhdGUgc3RydWN0dXJlLgogCi0uLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QgKlB5U3lzX0dldE9iamVjdChjaGFyICpuYW1lKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0ICpQeVN5c19HZXRPYmplY3QoY29uc3QgY2hhciAqbmFtZSkKIAogICAgUmV0dXJuIHRoZSBvYmplY3QgKm5hbWUqIGZyb20gdGhlIDptb2Q6YHN5c2AgbW9kdWxlIG9yICpOVUxMKiBpZiBpdCBkb2VzCiAgICBub3QgZXhpc3QsIHdpdGhvdXQgc2V0dGluZyBhbiBleGNlcHRpb24uCiAKLS4uIGM6ZnVuY3Rpb246OiBpbnQgUHlTeXNfU2V0T2JqZWN0KGNoYXIgKm5hbWUsIFB5T2JqZWN0ICp2KQorLi4gYzpmdW5jdGlvbjo6IGludCBQeVN5c19TZXRPYmplY3QoY29uc3QgY2hhciAqbmFtZSwgUHlPYmplY3QgKnYpCiAKICAgIFNldCAqbmFtZSogaW4gdGhlIDptb2Q6YHN5c2AgbW9kdWxlIHRvICp2KiB1bmxlc3MgKnYqIGlzICpOVUxMKiwgaW4gd2hpY2gKICAgIGNhc2UgKm5hbWUqIGlzIGRlbGV0ZWQgZnJvbSB0aGUgc3lzIG1vZHVsZS4gUmV0dXJucyBgYDBgYCBvbiBzdWNjZXNzLCBgYC0xYGAKZGlmZiAtLWdpdCBhL0RvYy9jLWFwaS90dXBsZS5yc3QgYi9Eb2MvYy1hcGkvdHVwbGUucnN0CmluZGV4IDE4NGFmZmIuLjM5MjJkNTAgMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS90dXBsZS5yc3QKKysrIGIvRG9jL2MtYXBpL3R1cGxlLnJzdApAQCAtMTI5LDYgKzEyOSwxNCBAQAogICAgSW5pdGlhbGl6ZXMgYSBzdHJ1Y3Qgc2VxdWVuY2UgdHlwZSAqdHlwZSogZnJvbSAqZGVzYyogaW4gcGxhY2UuCiAKIAorLi4gYzpmdW5jdGlvbjo6IGludCBQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlMihQeVR5cGVPYmplY3QgKnR5cGUsIFB5U3RydWN0U2VxdWVuY2VfRGVzYyAqZGVzYykKKworICAgVGhlIHNhbWUgYXMgYGBQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlYGAsIGJ1dCByZXR1cm5zIGBgMGBgIG9uIHN1Y2Nlc3MgYW5kIGBgLTFgYCBvbgorICAgZmFpbHVyZS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogLi4gYzp0eXBlOjogUHlTdHJ1Y3RTZXF1ZW5jZV9EZXNjCiAKICAgIENvbnRhaW5zIHRoZSBtZXRhIGluZm9ybWF0aW9uIG9mIGEgc3RydWN0IHNlcXVlbmNlIHR5cGUgdG8gY3JlYXRlLgpkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL3R5cGUucnN0IGIvRG9jL2MtYXBpL3R5cGUucnN0CmluZGV4IDVkODMyNTQuLjYwYzVlNzMgMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS90eXBlLnJzdAorKysgYi9Eb2MvYy1hcGkvdHlwZS5yc3QKQEAgLTQ0LDYgKzQ0LDcgQEAKIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCiAKKwogLi4gYzpmdW5jdGlvbjo6IHZvaWQgUHlUeXBlX01vZGlmaWVkKFB5VHlwZU9iamVjdCAqdHlwZSkKIAogICAgSW52YWxpZGF0ZSB0aGUgaW50ZXJuYWwgbG9va3VwIGNhY2hlIGZvciB0aGUgdHlwZSBhbmQgYWxsIG9mIGl0cwpAQCAtNjcsNiArNjgsMTEgQEAKIAogICAgUmV0dXJuIHRydWUgaWYgKmEqIGlzIGEgc3VidHlwZSBvZiAqYiouCiAKKyAgIFRoaXMgZnVuY3Rpb24gb25seSBjaGVja3MgZm9yIGFjdHVhbCBzdWJ0eXBlcywgd2hpY2ggbWVhbnMgdGhhdAorICAgOm1ldGg6YH5jbGFzcy5fX3N1YmNsYXNzY2hlY2tfX2AgaXMgbm90IGNhbGxlZCBvbiAqYiouICBDYWxsCisgICA6YzpmdW5jOmBQeU9iamVjdF9Jc1N1YmNsYXNzYCB0byBkbyB0aGUgc2FtZSBjaGVjayB0aGF0IDpmdW5jOmBpc3N1YmNsYXNzYAorICAgd291bGQgZG8uCisKIAogLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeVR5cGVfR2VuZXJpY0FsbG9jKFB5VHlwZU9iamVjdCAqdHlwZSwgUHlfc3NpemVfdCBuaXRlbXMpCiAKQEAgLTk3LDMgKzEwMywxMyBAQAogICAgdHlwZXMuIFRoaXMgYWxsb3dzIHRoZSBjYWxsZXIgdG8gcmVmZXJlbmNlIG90aGVyIGhlYXAgdHlwZXMgYXMgYmFzZSB0eXBlcy4KIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCisKKy4uIGM6ZnVuY3Rpb246OiB2b2lkKiBQeVR5cGVfR2V0U2xvdChQeVR5cGVPYmplY3QgKnR5cGUsIGludCBzbG90KQorCisgICBSZXR1cm4gdGhlIGZ1bmN0aW9uIHBvaW50ZXIgc3RvcmVkIGluIHRoZSBnaXZlbiBzbG90LiBJZiB0aGUKKyAgIHJlc3VsdCBpcyAqTlVMTCosIHRoaXMgaW5kaWNhdGVzIHRoYXQgZWl0aGVyIHRoZSBzbG90IGlzICpOVUxMKiwKKyAgIG9yIHRoYXQgdGhlIGZ1bmN0aW9uIHdhcyBjYWxsZWQgd2l0aCBpbnZhbGlkIHBhcmFtZXRlcnMuCisgICBDYWxsZXJzIHdpbGwgdHlwaWNhbGx5IGNhc3QgdGhlIHJlc3VsdCBwb2ludGVyIGludG8gdGhlIGFwcHJvcHJpYXRlCisgICBmdW5jdGlvbiB0eXBlLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKZGlmZiAtLWdpdCBhL0RvYy9jLWFwaS90eXBlb2JqLnJzdCBiL0RvYy9jLWFwaS90eXBlb2JqLnJzdAppbmRleCBmMzA4OWQwLi41ZGU4YmUwIDEwMDY0NAotLS0gYS9Eb2MvYy1hcGkvdHlwZW9iai5yc3QKKysrIGIvRG9jL2MtYXBpL3R5cGVvYmoucnN0CkBAIC05NCw3ICs5NCw3IEBACiAgICBUaGlzIGZpZWxkIGlzIG5vdCBpbmhlcml0ZWQgYnkgc3VidHlwZXMuCiAKIAotLi4gYzptZW1iZXI6OiBjaGFyKiBQeVR5cGVPYmplY3QudHBfbmFtZQorLi4gYzptZW1iZXI6OiBjb25zdCBjaGFyKiBQeVR5cGVPYmplY3QudHBfbmFtZQogCiAgICBQb2ludGVyIHRvIGEgTlVMLXRlcm1pbmF0ZWQgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIG5hbWUgb2YgdGhlIHR5cGUuIEZvciB0eXBlcwogICAgdGhhdCBhcmUgYWNjZXNzaWJsZSBhcyBtb2R1bGUgZ2xvYmFscywgdGhlIHN0cmluZyBzaG91bGQgYmUgdGhlIGZ1bGwgbW9kdWxlCkBAIC0xODksMzAgKzE4OSw3IEBACiAKIC4uIGM6bWVtYmVyOjogcHJpbnRmdW5jIFB5VHlwZU9iamVjdC50cF9wcmludAogCi0gICBBbiBvcHRpb25hbCBwb2ludGVyIHRvIHRoZSBpbnN0YW5jZSBwcmludCBmdW5jdGlvbi4KLQotICAgVGhlIHByaW50IGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVkIHdoZW4gdGhlIGluc3RhbmNlIGlzIHByaW50ZWQgdG8gYSAqcmVhbCogZmlsZTsKLSAgIHdoZW4gaXQgaXMgcHJpbnRlZCB0byBhIHBzZXVkby1maWxlIChsaWtlIGEgOmNsYXNzOmBpby5TdHJpbmdJT2AgaW5zdGFuY2UpLCB0aGUKLSAgIGluc3RhbmNlJ3MgOmM6bWVtYmVyOmB+UHlUeXBlT2JqZWN0LnRwX3JlcHJgIG9yIDpjOm1lbWJlcjpgflB5VHlwZU9iamVjdC50cF9zdHJgIGZ1bmN0aW9uIGlzIGNhbGxlZCB0byBjb252ZXJ0IGl0IHRvCi0gICBhIHN0cmluZy4gIFRoZXNlIGFyZSBhbHNvIGNhbGxlZCB3aGVuIHRoZSB0eXBlJ3MgOmM6bWVtYmVyOmB+UHlUeXBlT2JqZWN0LnRwX3ByaW50YCBmaWVsZCBpcwotICAgKk5VTEwqLiAgQSB0eXBlIHNob3VsZCBuZXZlciBpbXBsZW1lbnQgOmM6bWVtYmVyOmB+UHlUeXBlT2JqZWN0LnRwX3ByaW50YCBpbiBhIHdheSB0aGF0IHByb2R1Y2VzCi0gICBkaWZmZXJlbnQgb3V0cHV0IHRoYW4gOmM6bWVtYmVyOmB+UHlUeXBlT2JqZWN0LnRwX3JlcHJgIG9yIDpjOm1lbWJlcjpgflB5VHlwZU9iamVjdC50cF9zdHJgIHdvdWxkLgotCi0gICBUaGUgcHJpbnQgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggdGhlIHNhbWUgc2lnbmF0dXJlIGFzIDpjOmZ1bmM6YFB5T2JqZWN0X1ByaW50YDoKLSAgIGBgaW50IHRwX3ByaW50KFB5T2JqZWN0ICpzZWxmLCBGSUxFICpmaWxlLCBpbnQgZmxhZ3MpYGAuICBUaGUgKnNlbGYqIGFyZ3VtZW50IGlzCi0gICB0aGUgaW5zdGFuY2UgdG8gYmUgcHJpbnRlZC4gIFRoZSAqZmlsZSogYXJndW1lbnQgaXMgdGhlIHN0ZGlvIGZpbGUgdG8gd2hpY2ggaXQKLSAgIGlzIHRvIGJlIHByaW50ZWQuICBUaGUgKmZsYWdzKiBhcmd1bWVudCBpcyBjb21wb3NlZCBvZiBmbGFnIGJpdHMuIFRoZSBvbmx5IGZsYWcKLSAgIGJpdCBjdXJyZW50bHkgZGVmaW5lZCBpcyA6Y29uc3Q6YFB5X1BSSU5UX1JBV2AuIFdoZW4gdGhlIDpjb25zdDpgUHlfUFJJTlRfUkFXYAotICAgZmxhZyBiaXQgaXMgc2V0LCB0aGUgaW5zdGFuY2Ugc2hvdWxkIGJlIHByaW50ZWQgdGhlIHNhbWUgd2F5IGFzIDpjOm1lbWJlcjpgflB5VHlwZU9iamVjdC50cF9zdHJgCi0gICB3b3VsZCBmb3JtYXQgaXQ7IHdoZW4gdGhlIDpjb25zdDpgUHlfUFJJTlRfUkFXYCBmbGFnIGJpdCBpcyBjbGVhciwgdGhlIGluc3RhbmNlCi0gICBzaG91bGQgYmUgcHJpbnRlZCB0aGUgc2FtZSB3YXkgYXMgOmM6bWVtYmVyOmB+UHlUeXBlT2JqZWN0LnRwX3JlcHJgIHdvdWxkIGZvcm1hdCBpdC4gSXQgc2hvdWxkCi0gICByZXR1cm4gYGAtMWBgIGFuZCBzZXQgYW4gZXhjZXB0aW9uIGNvbmRpdGlvbiB3aGVuIGFuIGVycm9yIG9jY3Vycy4KLQotICAgSXQgaXMgcG9zc2libGUgdGhhdCB0aGUgOmM6bWVtYmVyOmB+UHlUeXBlT2JqZWN0LnRwX3ByaW50YCBmaWVsZCB3aWxsIGJlIGRlcHJlY2F0ZWQuIEluIGFueSBjYXNlLAotICAgaXQgaXMgcmVjb21tZW5kZWQgbm90IHRvIGRlZmluZSA6YzptZW1iZXI6YH5QeVR5cGVPYmplY3QudHBfcHJpbnRgLCBidXQgaW5zdGVhZCB0byByZWx5IG9uCi0gICA6YzptZW1iZXI6YH5QeVR5cGVPYmplY3QudHBfcmVwcmAgYW5kIDpjOm1lbWJlcjpgflB5VHlwZU9iamVjdC50cF9zdHJgIGZvciBwcmludGluZy4KLQotICAgVGhpcyBmaWVsZCBpcyBpbmhlcml0ZWQgYnkgc3VidHlwZXMuCisgICBSZXNlcnZlZCBzbG90LCBmb3JtZXJseSB1c2VkIGZvciBwcmludCBmb3JtYXR0aW5nIGluIFB5dGhvbiAyLnguCiAKIAogLi4gYzptZW1iZXI6OiBnZXRhdHRyZnVuYyBQeVR5cGVPYmplY3QudHBfZ2V0YXR0cgpAQCAtMzkwLDcgKzM2Nyw3IEBACiAgICBpbmhlcml0ZWQgaW5kaXZpZHVhbGx5LgogCiAKLS4uIGM6bWVtYmVyOjogbG9uZyBQeVR5cGVPYmplY3QudHBfZmxhZ3MKKy4uIGM6bWVtYmVyOjogdW5zaWduZWQgbG9uZyBQeVR5cGVPYmplY3QudHBfZmxhZ3MKIAogICAgVGhpcyBmaWVsZCBpcyBhIGJpdCBtYXNrIG9mIHZhcmlvdXMgZmxhZ3MuICBTb21lIGZsYWdzIGluZGljYXRlIHZhcmlhbnQKICAgIHNlbWFudGljcyBmb3IgY2VydGFpbiBzaXR1YXRpb25zOyBvdGhlcnMgYXJlIHVzZWQgdG8gaW5kaWNhdGUgdGhhdCBjZXJ0YWluCkBAIC00NjQsNyArNDQxLDMzIEBACiAgICAgICA6Y29uc3Q6YFB5X1RQRkxBR1NfSEFWRV9WRVJTSU9OX1RBR2AuCiAKIAotLi4gYzptZW1iZXI6OiBjaGFyKiBQeVR5cGVPYmplY3QudHBfZG9jCisgICAuLiBkYXRhOjogUHlfVFBGTEFHU19MT05HX1NVQkNMQVNTCisgICAuLiBkYXRhOjogUHlfVFBGTEFHU19MSVNUX1NVQkNMQVNTCisgICAuLiBkYXRhOjogUHlfVFBGTEFHU19UVVBMRV9TVUJDTEFTUworICAgLi4gZGF0YTo6IFB5X1RQRkxBR1NfQllURVNfU1VCQ0xBU1MKKyAgIC4uIGRhdGE6OiBQeV9UUEZMQUdTX1VOSUNPREVfU1VCQ0xBU1MKKyAgIC4uIGRhdGE6OiBQeV9UUEZMQUdTX0RJQ1RfU1VCQ0xBU1MKKyAgIC4uIGRhdGE6OiBQeV9UUEZMQUdTX0JBU0VfRVhDX1NVQkNMQVNTCisgICAuLiBkYXRhOjogUHlfVFBGTEFHU19UWVBFX1NVQkNMQVNTCisKKyAgICAgIFRoZXNlIGZsYWdzIGFyZSB1c2VkIGJ5IGZ1bmN0aW9ucyBzdWNoIGFzCisgICAgICA6YzpmdW5jOmBQeUxvbmdfQ2hlY2tgIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGlmIGEgdHlwZSBpcyBhIHN1YmNsYXNzCisgICAgICBvZiBhIGJ1aWx0LWluIHR5cGU7IHN1Y2ggc3BlY2lmaWMgY2hlY2tzIGFyZSBmYXN0ZXIgdGhhbiBhIGdlbmVyaWMKKyAgICAgIGNoZWNrLCBsaWtlIDpjOmZ1bmM6YFB5T2JqZWN0X0lzSW5zdGFuY2VgLiBDdXN0b20gdHlwZXMgdGhhdCBpbmhlcml0CisgICAgICBmcm9tIGJ1aWx0LWlucyBzaG91bGQgaGF2ZSB0aGVpciA6YzptZW1iZXI6YH5QeVR5cGVPYmplY3QudHBfZmxhZ3NgCisgICAgICBzZXQgYXBwcm9wcmlhdGVseSwgb3IgdGhlIGNvZGUgdGhhdCBpbnRlcmFjdHMgd2l0aCBzdWNoIHR5cGVzCisgICAgICB3aWxsIGJlaGF2ZSBkaWZmZXJlbnRseSBkZXBlbmRpbmcgb24gd2hhdCBraW5kIG9mIGNoZWNrIGlzIHVzZWQuCisKKworICAgLi4gZGF0YTo6IFB5X1RQRkxBR1NfSEFWRV9GSU5BTElaRQorCisgICAgICBUaGlzIGJpdCBpcyBzZXQgd2hlbiB0aGUgOmM6bWVtYmVyOmB+UHlUeXBlT2JqZWN0LnRwX2ZpbmFsaXplYCBzbG90IGlzIHByZXNlbnQgaW4gdGhlCisgICAgICB0eXBlIHN0cnVjdHVyZS4KKworICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKworLi4gYzptZW1iZXI6OiBjb25zdCBjaGFyKiBQeVR5cGVPYmplY3QudHBfZG9jCiAKICAgIEFuIG9wdGlvbmFsIHBvaW50ZXIgdG8gYSBOVUwtdGVybWluYXRlZCBDIHN0cmluZyBnaXZpbmcgdGhlIGRvY3N0cmluZyBmb3IgdGhpcwogICAgdHlwZSBvYmplY3QuICBUaGlzIGlzIGV4cG9zZWQgYXMgdGhlIDphdHRyOmBfX2RvY19fYCBhdHRyaWJ1dGUgb24gdGhlIHR5cGUgYW5kCkBAIC01NzEsNyArNTc0LDkgQEAKIC4uIGM6bWVtYmVyOjogcmljaGNtcGZ1bmMgUHlUeXBlT2JqZWN0LnRwX3JpY2hjb21wYXJlCiAKICAgIEFuIG9wdGlvbmFsIHBvaW50ZXIgdG8gdGhlIHJpY2ggY29tcGFyaXNvbiBmdW5jdGlvbiwgd2hvc2Ugc2lnbmF0dXJlIGlzCi0gICBgYFB5T2JqZWN0ICp0cF9yaWNoY29tcGFyZShQeU9iamVjdCAqYSwgUHlPYmplY3QgKmIsIGludCBvcClgYC4KKyAgIGBgUHlPYmplY3QgKnRwX3JpY2hjb21wYXJlKFB5T2JqZWN0ICphLCBQeU9iamVjdCAqYiwgaW50IG9wKWBgLiBUaGUgZmlyc3QKKyAgIHBhcmFtZXRlciBpcyBndWFyYW50ZWVkIHRvIGJlIGFuIGluc3RhbmNlIG9mIHRoZSB0eXBlIHRoYXQgaXMgZGVmaW5lZAorICAgYnkgOmM6dHlwZTpgUHlUeXBlT2JqZWN0YC4KIAogICAgVGhlIGZ1bmN0aW9uIHNob3VsZCByZXR1cm4gdGhlIHJlc3VsdCBvZiB0aGUgY29tcGFyaXNvbiAodXN1YWxseSBgYFB5X1RydWVgYAogICAgb3IgYGBQeV9GYWxzZWBgKS4gIElmIHRoZSBjb21wYXJpc29uIGlzIHVuZGVmaW5lZCwgaXQgbXVzdCByZXR1cm4KQEAgLTYwOSw3ICs2MTQsNyBAQAogICAgKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKwogCiAKLS4uIGM6bWVtYmVyOjogbG9uZyBQeVR5cGVPYmplY3QudHBfd2Vha2xpc3RvZmZzZXQKKy4uIGM6bWVtYmVyOjogUHlfc3NpemVfdCBQeVR5cGVPYmplY3QudHBfd2Vha2xpc3RvZmZzZXQKIAogICAgSWYgdGhlIGluc3RhbmNlcyBvZiB0aGlzIHR5cGUgYXJlIHdlYWtseSByZWZlcmVuY2VhYmxlLCB0aGlzIGZpZWxkIGlzIGdyZWF0ZXIKICAgIHRoYW4gemVybyBhbmQgY29udGFpbnMgdGhlIG9mZnNldCBpbiB0aGUgaW5zdGFuY2Ugc3RydWN0dXJlIG9mIHRoZSB3ZWFrCkBAIC03NzYsNyArNzgxLDcgQEAKICAgIC4uIFhYWCBleHBsYWluLgogCiAKLS4uIGM6bWVtYmVyOjogbG9uZyBQeVR5cGVPYmplY3QudHBfZGljdG9mZnNldAorLi4gYzptZW1iZXI6OiBQeV9zc2l6ZV90IFB5VHlwZU9iamVjdC50cF9kaWN0b2Zmc2V0CiAKICAgIElmIHRoZSBpbnN0YW5jZXMgb2YgdGhpcyB0eXBlIGhhdmUgYSBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcgaW5zdGFuY2UgdmFyaWFibGVzLAogICAgdGhpcyBmaWVsZCBpcyBub24temVybyBhbmQgY29udGFpbnMgdGhlIG9mZnNldCBpbiB0aGUgaW5zdGFuY2VzIG9mIHRoZSB0eXBlIG9mCkBAIC05NjcsNiArOTcyLDQ3IEBACiAgICBUaGlzIGZpZWxkIGlzIG5vdCBpbmhlcml0ZWQ7IGl0IGlzIGNhbGN1bGF0ZWQgZnJlc2ggYnkgOmM6ZnVuYzpgUHlUeXBlX1JlYWR5YC4KIAogCisuLiBjOm1lbWJlcjo6IGRlc3RydWN0b3IgUHlUeXBlT2JqZWN0LnRwX2ZpbmFsaXplCisKKyAgIEFuIG9wdGlvbmFsIHBvaW50ZXIgdG8gYW4gaW5zdGFuY2UgZmluYWxpemF0aW9uIGZ1bmN0aW9uLiAgSXRzIHNpZ25hdHVyZSBpcworICAgOmM6dHlwZTpgZGVzdHJ1Y3RvcmA6OgorCisgICAgICB2b2lkIHRwX2ZpbmFsaXplKFB5T2JqZWN0ICopCisKKyAgIElmIDpjOm1lbWJlcjpgflB5VHlwZU9iamVjdC50cF9maW5hbGl6ZWAgaXMgc2V0LCB0aGUgaW50ZXJwcmV0ZXIgY2FsbHMgaXQgb25jZSB3aGVuCisgICBmaW5hbGl6aW5nIGFuIGluc3RhbmNlLiAgSXQgaXMgY2FsbGVkIGVpdGhlciBmcm9tIHRoZSBnYXJiYWdlCisgICBjb2xsZWN0b3IgKGlmIHRoZSBpbnN0YW5jZSBpcyBwYXJ0IG9mIGFuIGlzb2xhdGVkIHJlZmVyZW5jZSBjeWNsZSkgb3IKKyAgIGp1c3QgYmVmb3JlIHRoZSBvYmplY3QgaXMgZGVhbGxvY2F0ZWQuICBFaXRoZXIgd2F5LCBpdCBpcyBndWFyYW50ZWVkCisgICB0byBiZSBjYWxsZWQgYmVmb3JlIGF0dGVtcHRpbmcgdG8gYnJlYWsgcmVmZXJlbmNlIGN5Y2xlcywgZW5zdXJpbmcKKyAgIHRoYXQgaXQgZmluZHMgdGhlIG9iamVjdCBpbiBhIHNhbmUgc3RhdGUuCisKKyAgIDpjOm1lbWJlcjpgflB5VHlwZU9iamVjdC50cF9maW5hbGl6ZWAgc2hvdWxkIG5vdCBtdXRhdGUgdGhlIGN1cnJlbnQgZXhjZXB0aW9uIHN0YXR1czsKKyAgIHRoZXJlZm9yZSwgYSByZWNvbW1lbmRlZCB3YXkgdG8gd3JpdGUgYSBub24tdHJpdmlhbCBmaW5hbGl6ZXIgaXM6OgorCisgICAgICBzdGF0aWMgdm9pZAorICAgICAgbG9jYWxfZmluYWxpemUoUHlPYmplY3QgKnNlbGYpCisgICAgICB7CisgICAgICAgICAgUHlPYmplY3QgKmVycm9yX3R5cGUsICplcnJvcl92YWx1ZSwgKmVycm9yX3RyYWNlYmFjazsKKworICAgICAgICAgIC8qIFNhdmUgdGhlIGN1cnJlbnQgZXhjZXB0aW9uLCBpZiBhbnkuICovCisgICAgICAgICAgUHlFcnJfRmV0Y2goJmVycm9yX3R5cGUsICZlcnJvcl92YWx1ZSwgJmVycm9yX3RyYWNlYmFjayk7CisKKyAgICAgICAgICAvKiAuLi4gKi8KKworICAgICAgICAgIC8qIFJlc3RvcmUgdGhlIHNhdmVkIGV4Y2VwdGlvbi4gKi8KKyAgICAgICAgICBQeUVycl9SZXN0b3JlKGVycm9yX3R5cGUsIGVycm9yX3ZhbHVlLCBlcnJvcl90cmFjZWJhY2spOworICAgICAgfQorCisgICBGb3IgdGhpcyBmaWVsZCB0byBiZSB0YWtlbiBpbnRvIGFjY291bnQgKGV2ZW4gdGhyb3VnaCBpbmhlcml0YW5jZSksCisgICB5b3UgbXVzdCBhbHNvIHNldCB0aGUgOmNvbnN0OmBQeV9UUEZMQUdTX0hBVkVfRklOQUxJWkVgIGZsYWdzIGJpdC4KKworICAgVGhpcyBmaWVsZCBpcyBpbmhlcml0ZWQgYnkgc3VidHlwZXMuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisgICAuLiBzZWVhbHNvOjogIlNhZmUgb2JqZWN0IGZpbmFsaXphdGlvbiIgKDpwZXA6YDQ0MmApCisKKwogLi4gYzptZW1iZXI6OiBQeU9iamVjdCogUHlUeXBlT2JqZWN0LnRwX2NhY2hlCiAKICAgIFVudXNlZC4gIE5vdCBpbmhlcml0ZWQuICBJbnRlcm5hbCB1c2Ugb25seS4KQEAgLTExNTAsNyArMTE5Niw4IEBACiAKICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBieSA6YzpmdW5jOmBQeVNlcXVlbmNlX1JlcGVhdGAgYW5kIGhhcyB0aGUgc2FtZQogICAgc2lnbmF0dXJlLiAgSXQgaXMgYWxzbyB1c2VkIGJ5IHRoZSBgYCpgYCBvcGVyYXRvciwgYWZ0ZXIgdHJ5aW5nIG51bWVyaWMKLSAgIG11bHRpcGxpY2F0aW9uIHZpYSB0aGUgOmM6bWVtYmVyOmB+UHlUeXBlT2JqZWN0LnRwX2FzX251bWJlci5uYl9tdWxgIHNsb3QuCisgICBtdWx0aXBsaWNhdGlvbiB2aWEgdGhlIDpjOm1lbWJlcjpgflB5VHlwZU9iamVjdC50cF9hc19udW1iZXIubmJfbXVsdGlwbHlgCisgICBzbG90LgogCiAuLiBjOm1lbWJlcjo6IHNzaXplYXJnZnVuYyBQeVNlcXVlbmNlTWV0aG9kcy5zcV9pdGVtCiAKZGlmZiAtLWdpdCBhL0RvYy9jLWFwaS91bmljb2RlLnJzdCBiL0RvYy9jLWFwaS91bmljb2RlLnJzdAppbmRleCAzNjQ5Y2ZiLi5mN2U5OWQ2IDEwMDY0NAotLS0gYS9Eb2MvYy1hcGkvdW5pY29kZS5yc3QKKysrIGIvRG9jL2MtYXBpL3VuaWNvZGUucnN0CkBAIC0yMjcsNyArMjI3LDEwIEBACiAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogUHlVbmljb2RlX0FTX0RBVEEoUHlPYmplY3QgKm8pCiAKICAgIFJldHVybiBhIHBvaW50ZXIgdG8gYSA6Yzp0eXBlOmBQeV9VTklDT0RFYCByZXByZXNlbnRhdGlvbiBvZiB0aGUgb2JqZWN0LiAgVGhlCi0gICBgYEFTX0RBVEFgYCBmb3JtIGNhc3RzIHRoZSBwb2ludGVyIHRvIDpjOnR5cGU6YGNvbnN0IGNoYXIgKmAuICAqbyogaGFzIHRvIGJlCisgICByZXR1cm5lZCBidWZmZXIgaXMgYWx3YXlzIHRlcm1pbmF0ZWQgd2l0aCBhbiBleHRyYSBudWxsIGNvZGUgcG9pbnQuICBJdAorICAgbWF5IGFsc28gY29udGFpbiBlbWJlZGRlZCBudWxsIGNvZGUgcG9pbnRzLCB3aGljaCB3b3VsZCBjYXVzZSB0aGUgc3RyaW5nCisgICB0byBiZSB0cnVuY2F0ZWQgd2hlbiB1c2VkIGluIG1vc3QgQyBmdW5jdGlvbnMuICBUaGUgYGBBU19EQVRBYGAgZm9ybQorICAgY2FzdHMgdGhlIHBvaW50ZXIgdG8gOmM6dHlwZTpgY29uc3QgY2hhciAqYC4gIFRoZSAqbyogYXJndW1lbnQgaGFzIHRvIGJlCiAgICBhIFVuaWNvZGUgb2JqZWN0IChub3QgY2hlY2tlZCkuCiAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCkBAIC01MjYsMTIgKzUyOSwyMyBAQAogICAgICAgVGhlIGAiJWxsZCJgIGFuZCBgIiVsbHUiYCBmb3JtYXQgc3BlY2lmaWVycyBhcmUgb25seSBhdmFpbGFibGUKICAgICAgIHdoZW4gOmNvbnN0OmBIQVZFX0xPTkdfTE9OR2AgaXMgZGVmaW5lZC4KIAorICAgLi4gbm90ZTo6CisgICAgICBUaGUgd2lkdGggZm9ybWF0dGVyIHVuaXQgaXMgbnVtYmVyIG9mIGNoYXJhY3RlcnMgcmF0aGVyIHRoYW4gYnl0ZXMuCisgICAgICBUaGUgcHJlY2lzaW9uIGZvcm1hdHRlciB1bml0IGlzIG51bWJlciBvZiBieXRlcyBmb3IgYGAiJXMiYGAgYW5kCisgICAgICBgYCIlViJgYCAoaWYgdGhlIGBgUHlPYmplY3QqYGAgYXJndW1lbnQgaXMgTlVMTCksIGFuZCBhIG51bWJlciBvZgorICAgICAgY2hhcmFjdGVycyBmb3IgYGAiJUEiYGAsIGBgIiVVImBgLCBgYCIlUyJgYCwgYGAiJVIiYGAgYW5kIGBgIiVWImBgCisgICAgICAoaWYgdGhlIGBgUHlPYmplY3QqYGAgYXJndW1lbnQgaXMgbm90IE5VTEwpLgorCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgogICAgICAgU3VwcG9ydCBmb3IgYGAiJWxsZCJgYCBhbmQgYGAiJWxsdSJgYCBhZGRlZC4KIAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKICAgICAgIFN1cHBvcnQgZm9yIGBgIiVsaSJgYCwgYGAiJWxsaSJgYCBhbmQgYGAiJXppImBgIGFkZGVkLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgU3VwcG9ydCB3aWR0aCBhbmQgcHJlY2lzaW9uIGZvcm1hdHRlciBmb3IgYGAiJXMiYGAsIGBgIiVBImBgLCBgYCIlVSJgYCwKKyAgICAgIGBgIiVWImBgLCBgYCIlUyJgYCwgYGAiJVIiYGAgYWRkZWQuCisKIAogLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeVVuaWNvZGVfRnJvbUZvcm1hdFYoY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IHZhcmdzKQogCkBAIC01NDUsNyArNTU5LDggQEAKICAgIENvZXJjZSBhbiBlbmNvZGVkIG9iamVjdCAqb2JqKiB0byBhbiBVbmljb2RlIG9iamVjdCBhbmQgcmV0dXJuIGEgcmVmZXJlbmNlIHdpdGgKICAgIGluY3JlbWVudGVkIHJlZmNvdW50LgogCi0gICA6Y2xhc3M6YGJ5dGVzYCwgOmNsYXNzOmBieXRlYXJyYXlgIGFuZCBvdGhlciBjaGFyIGJ1ZmZlciBjb21wYXRpYmxlIG9iamVjdHMKKyAgIDpjbGFzczpgYnl0ZXNgLCA6Y2xhc3M6YGJ5dGVhcnJheWAgYW5kIG90aGVyCisgICA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RzIDxieXRlcy1saWtlIG9iamVjdD5gCiAgICBhcmUgZGVjb2RlZCBhY2NvcmRpbmcgdG8gdGhlIGdpdmVuICplbmNvZGluZyogYW5kIHVzaW5nIHRoZSBlcnJvciBoYW5kbGluZwogICAgZGVmaW5lZCBieSAqZXJyb3JzKi4gQm90aCBjYW4gYmUgKk5VTEwqIHRvIGhhdmUgdGhlIGludGVyZmFjZSB1c2UgdGhlIGRlZmF1bHQKICAgIHZhbHVlcyAoc2VlIHRoZSBuZXh0IHNlY3Rpb24gZm9yIGRldGFpbHMpLgpAQCAtNjM4LDcgKzY1Myw4IEBACiAKICAgIENvcHkgdGhlIHN0cmluZyAqdSogaW50byBhIG5ldyBVQ1M0IGJ1ZmZlciB0aGF0IGlzIGFsbG9jYXRlZCB1c2luZwogICAgOmM6ZnVuYzpgUHlNZW1fTWFsbG9jYC4gIElmIHRoaXMgZmFpbHMsICpOVUxMKiBpcyByZXR1cm5lZCB3aXRoIGEKLSAgIDpleGM6YE1lbW9yeUVycm9yYCBzZXQuCisgICA6ZXhjOmBNZW1vcnlFcnJvcmAgc2V0LiAgVGhlIHJldHVybmVkIGJ1ZmZlciBhbHdheXMgaGFzIGFuIGV4dHJhCisgICBudWxsIGNvZGUgcG9pbnQgYXBwZW5kZWQuCiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMwogCkBAIC02NzcsOCArNjkzLDkgQEAKICAgIFJldHVybiBhIHJlYWQtb25seSBwb2ludGVyIHRvIHRoZSBVbmljb2RlIG9iamVjdCdzIGludGVybmFsCiAgICA6Yzp0eXBlOmBQeV9VTklDT0RFYCBidWZmZXIsIG9yICpOVUxMKiBvbiBlcnJvci4gVGhpcyB3aWxsIGNyZWF0ZSB0aGUKICAgIDpjOnR5cGU6YFB5X1VOSUNPREUqYCByZXByZXNlbnRhdGlvbiBvZiB0aGUgb2JqZWN0IGlmIGl0IGlzIG5vdCB5ZXQKLSAgIGF2YWlsYWJsZS4gTm90ZSB0aGF0IHRoZSByZXN1bHRpbmcgOmM6dHlwZTpgUHlfVU5JQ09ERWAgc3RyaW5nIG1heSBjb250YWluCi0gICBlbWJlZGRlZCBudWxsIGNoYXJhY3RlcnMsIHdoaWNoIHdvdWxkIGNhdXNlIHRoZSBzdHJpbmcgdG8gYmUgdHJ1bmNhdGVkIHdoZW4KKyAgIGF2YWlsYWJsZS4gVGhlIGJ1ZmZlciBpcyBhbHdheXMgdGVybWluYXRlZCB3aXRoIGFuIGV4dHJhIG51bGwgY29kZSBwb2ludC4KKyAgIE5vdGUgdGhhdCB0aGUgcmVzdWx0aW5nIDpjOnR5cGU6YFB5X1VOSUNPREVgIHN0cmluZyBtYXkgYWxzbyBjb250YWluCisgICBlbWJlZGRlZCBudWxsIGNvZGUgcG9pbnRzLCB3aGljaCB3b3VsZCBjYXVzZSB0aGUgc3RyaW5nIHRvIGJlIHRydW5jYXRlZCB3aGVuCiAgICB1c2VkIGluIG1vc3QgQyBmdW5jdGlvbnMuCiAKICAgIFBsZWFzZSBtaWdyYXRlIHRvIHVzaW5nIDpjOmZ1bmM6YFB5VW5pY29kZV9Bc1VDUzRgLApAQCAtNjk2LDggKzcxMyw5IEBACiAuLiBjOmZ1bmN0aW9uOjogUHlfVU5JQ09ERSogUHlVbmljb2RlX0FzVW5pY29kZUFuZFNpemUoUHlPYmplY3QgKnVuaWNvZGUsIFB5X3NzaXplX3QgKnNpemUpCiAKICAgIExpa2UgOmM6ZnVuYzpgUHlVbmljb2RlX0FzVW5pY29kZWAsIGJ1dCBhbHNvIHNhdmVzIHRoZSA6YzpmdW5jOmBQeV9VTklDT0RFYAotICAgYXJyYXkgbGVuZ3RoIGluICpzaXplKi4gTm90ZSB0aGF0IHRoZSByZXN1bHRpbmcgOmM6dHlwZTpgUHlfVU5JQ09ERSpgIHN0cmluZwotICAgbWF5IGNvbnRhaW4gZW1iZWRkZWQgbnVsbCBjaGFyYWN0ZXJzLCB3aGljaCB3b3VsZCBjYXVzZSB0aGUgc3RyaW5nIHRvIGJlCisgICBhcnJheSBsZW5ndGggKGV4Y2x1ZGluZyB0aGUgZXh0cmEgbnVsbCB0ZXJtaW5hdG9yKSBpbiAqc2l6ZSouCisgICBOb3RlIHRoYXQgdGhlIHJlc3VsdGluZyA6Yzp0eXBlOmBQeV9VTklDT0RFKmAgc3RyaW5nCisgICBtYXkgY29udGFpbiBlbWJlZGRlZCBudWxsIGNvZGUgcG9pbnRzLCB3aGljaCB3b3VsZCBjYXVzZSB0aGUgc3RyaW5nIHRvIGJlCiAgICB0cnVuY2F0ZWQgd2hlbiB1c2VkIGluIG1vc3QgQyBmdW5jdGlvbnMuCiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMwpAQCAtNzA1LDExICs3MjMsMTEgQEAKIAogLi4gYzpmdW5jdGlvbjo6IFB5X1VOSUNPREUqIFB5VW5pY29kZV9Bc1VuaWNvZGVDb3B5KFB5T2JqZWN0ICp1bmljb2RlKQogCi0gICBDcmVhdGUgYSBjb3B5IG9mIGEgVW5pY29kZSBzdHJpbmcgZW5kaW5nIHdpdGggYSBudWwgY2hhcmFjdGVyLiBSZXR1cm4gKk5VTEwqCisgICBDcmVhdGUgYSBjb3B5IG9mIGEgVW5pY29kZSBzdHJpbmcgZW5kaW5nIHdpdGggYSBudWxsIGNvZGUgcG9pbnQuIFJldHVybiAqTlVMTCoKICAgIGFuZCByYWlzZSBhIDpleGM6YE1lbW9yeUVycm9yYCBleGNlcHRpb24gb24gbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZSwKICAgIG90aGVyd2lzZSByZXR1cm4gYSBuZXcgYWxsb2NhdGVkIGJ1ZmZlciAodXNlIDpjOmZ1bmM6YFB5TWVtX0ZyZWVgIHRvIGZyZWUKICAgIHRoZSBidWZmZXIpLiBOb3RlIHRoYXQgdGhlIHJlc3VsdGluZyA6Yzp0eXBlOmBQeV9VTklDT0RFKmAgc3RyaW5nIG1heQotICAgY29udGFpbiBlbWJlZGRlZCBudWxsIGNoYXJhY3RlcnMsIHdoaWNoIHdvdWxkIGNhdXNlIHRoZSBzdHJpbmcgdG8gYmUKKyAgIGNvbnRhaW4gZW1iZWRkZWQgbnVsbCBjb2RlIHBvaW50cywgd2hpY2ggd291bGQgY2F1c2UgdGhlIHN0cmluZyB0byBiZQogICAgdHJ1bmNhdGVkIHdoZW4gdXNlZCBpbiBtb3N0IEMgZnVuY3Rpb25zLgogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKQEAgLTg4MywxMCArOTAxLDEwIEBACiAKICAgIENvcHkgdGhlIFVuaWNvZGUgb2JqZWN0IGNvbnRlbnRzIGludG8gdGhlIDpjOnR5cGU6YHdjaGFyX3RgIGJ1ZmZlciAqdyouICBBdCBtb3N0CiAgICAqc2l6ZSogOmM6dHlwZTpgd2NoYXJfdGAgY2hhcmFjdGVycyBhcmUgY29waWVkIChleGNsdWRpbmcgYSBwb3NzaWJseSB0cmFpbGluZwotICAgMC10ZXJtaW5hdGlvbiBjaGFyYWN0ZXIpLiAgUmV0dXJuIHRoZSBudW1iZXIgb2YgOmM6dHlwZTpgd2NoYXJfdGAgY2hhcmFjdGVycworICAgbnVsbCB0ZXJtaW5hdGlvbiBjaGFyYWN0ZXIpLiAgUmV0dXJuIHRoZSBudW1iZXIgb2YgOmM6dHlwZTpgd2NoYXJfdGAgY2hhcmFjdGVycwogICAgY29waWVkIG9yIC0xIGluIGNhc2Ugb2YgYW4gZXJyb3IuICBOb3RlIHRoYXQgdGhlIHJlc3VsdGluZyA6Yzp0eXBlOmB3Y2hhcl90KmAKLSAgIHN0cmluZyBtYXkgb3IgbWF5IG5vdCBiZSAwLXRlcm1pbmF0ZWQuICBJdCBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIGNhbGxlcgotICAgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIDpjOnR5cGU6YHdjaGFyX3QqYCBzdHJpbmcgaXMgMC10ZXJtaW5hdGVkIGluIGNhc2UgdGhpcyBpcworICAgc3RyaW5nIG1heSBvciBtYXkgbm90IGJlIG51bGwtdGVybWluYXRlZC4gIEl0IGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgY2FsbGVyCisgICB0byBtYWtlIHN1cmUgdGhhdCB0aGUgOmM6dHlwZTpgd2NoYXJfdCpgIHN0cmluZyBpcyBudWxsLXRlcm1pbmF0ZWQgaW4gY2FzZSB0aGlzIGlzCiAgICByZXF1aXJlZCBieSB0aGUgYXBwbGljYXRpb24uIEFsc28sIG5vdGUgdGhhdCB0aGUgOmM6dHlwZTpgd2NoYXJfdCpgIHN0cmluZwogICAgbWlnaHQgY29udGFpbiBudWxsIGNoYXJhY3RlcnMsIHdoaWNoIHdvdWxkIGNhdXNlIHRoZSBzdHJpbmcgdG8gYmUgdHJ1bmNhdGVkCiAgICB3aGVuIHVzZWQgd2l0aCBtb3N0IEMgZnVuY3Rpb25zLgpAQCAtODk1LDggKzkxMyw4IEBACiAuLiBjOmZ1bmN0aW9uOjogd2NoYXJfdCogUHlVbmljb2RlX0FzV2lkZUNoYXJTdHJpbmcoUHlPYmplY3QgKnVuaWNvZGUsIFB5X3NzaXplX3QgKnNpemUpCiAKICAgIENvbnZlcnQgdGhlIFVuaWNvZGUgb2JqZWN0IHRvIGEgd2lkZSBjaGFyYWN0ZXIgc3RyaW5nLiBUaGUgb3V0cHV0IHN0cmluZwotICAgYWx3YXlzIGVuZHMgd2l0aCBhIG51bCBjaGFyYWN0ZXIuIElmICpzaXplKiBpcyBub3QgKk5VTEwqLCB3cml0ZSB0aGUgbnVtYmVyCi0gICBvZiB3aWRlIGNoYXJhY3RlcnMgKGV4Y2x1ZGluZyB0aGUgdHJhaWxpbmcgMC10ZXJtaW5hdGlvbiBjaGFyYWN0ZXIpIGludG8KKyAgIGFsd2F5cyBlbmRzIHdpdGggYSBudWxsIGNoYXJhY3Rlci4gSWYgKnNpemUqIGlzIG5vdCAqTlVMTCosIHdyaXRlIHRoZSBudW1iZXIKKyAgIG9mIHdpZGUgY2hhcmFjdGVycyAoZXhjbHVkaW5nIHRoZSB0cmFpbGluZyBudWxsIHRlcm1pbmF0aW9uIGNoYXJhY3RlcikgaW50bwogICAgKlwqc2l6ZSouCiAKICAgIFJldHVybnMgYSBidWZmZXIgYWxsb2NhdGVkIGJ5IDpjOmZ1bmM6YFB5TWVtX0FsbG9jYCAodXNlCkBAIC0xMDI2LDkgKzEwNDQsMTEgQEAKIAogLi4gYzpmdW5jdGlvbjo6IGNoYXIqIFB5VW5pY29kZV9Bc1VURjhBbmRTaXplKFB5T2JqZWN0ICp1bmljb2RlLCBQeV9zc2l6ZV90ICpzaXplKQogCi0gICBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBkZWZhdWx0IGVuY29kaW5nIChVVEYtOCkgb2YgdGhlIFVuaWNvZGUgb2JqZWN0LCBhbmQKLSAgIHN0b3JlIHRoZSBzaXplIG9mIHRoZSBlbmNvZGVkIHJlcHJlc2VudGF0aW9uIChpbiBieXRlcykgaW4gKnNpemUqLiAgKnNpemUqCi0gICBjYW4gYmUgKk5VTEwqLCBpbiB0aGlzIGNhc2Ugbm8gc2l6ZSB3aWxsIGJlIHN0b3JlZC4KKyAgIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIFVURi04IGVuY29kaW5nIG9mIHRoZSBVbmljb2RlIG9iamVjdCwgYW5kCisgICBzdG9yZSB0aGUgc2l6ZSBvZiB0aGUgZW5jb2RlZCByZXByZXNlbnRhdGlvbiAoaW4gYnl0ZXMpIGluICpzaXplKi4gIFRoZQorICAgKnNpemUqIGFyZ3VtZW50IGNhbiBiZSAqTlVMTCo7IGluIHRoaXMgY2FzZSBubyBzaXplIHdpbGwgYmUgc3RvcmVkLiAgVGhlCisgICByZXR1cm5lZCBidWZmZXIgYWx3YXlzIGhhcyBhbiBleHRyYSBudWxsIGJ5dGUgYXBwZW5kZWQgKG5vdCBpbmNsdWRlZCBpbgorICAgKnNpemUqKSwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgb3RoZXIgbnVsbCBjb2RlIHBvaW50cy4KIAogICAgSW4gdGhlIGNhc2Ugb2YgYW4gZXJyb3IsICpOVUxMKiBpcyByZXR1cm5lZCB3aXRoIGFuIGV4Y2VwdGlvbiBzZXQgYW5kIG5vCiAgICAqc2l6ZSogaXMgc3RvcmVkLgpAQCAtMTEyMiw3ICsxMTQyLDcgQEAKICAgIG1hcmsgKFUrRkVGRikuIEluIHRoZSBvdGhlciB0d28gbW9kZXMsIG5vIEJPTSBtYXJrIGlzIHByZXBlbmRlZC4KIAogICAgSWYgKlB5X1VOSUNPREVfV0lERSogaXMgbm90IGRlZmluZWQsIHN1cnJvZ2F0ZSBwYWlycyB3aWxsIGJlIG91dHB1dAotICAgYXMgYSBzaW5nbGUgY29kZXBvaW50LgorICAgYXMgYSBzaW5nbGUgY29kZSBwb2ludC4KIAogICAgUmV0dXJuICpOVUxMKiBpZiBhbiBleGNlcHRpb24gd2FzIHJhaXNlZCBieSB0aGUgY29kZWMuCiAKQEAgLTE1NTcsNyArMTU3Nyw3IEBACiAgICBVbmljb2RlIHN0cmluZy4KIAogCi0uLiBjOmZ1bmN0aW9uOjogaW50IFB5VW5pY29kZV9UYWlsbWF0Y2goUHlPYmplY3QgKnN0ciwgUHlPYmplY3QgKnN1YnN0ciwgXAorLi4gYzpmdW5jdGlvbjo6IFB5X3NzaXplX3QgUHlVbmljb2RlX1RhaWxtYXRjaChQeU9iamVjdCAqc3RyLCBQeU9iamVjdCAqc3Vic3RyLCBcCiAgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IHN0YXJ0LCBQeV9zc2l6ZV90IGVuZCwgaW50IGRpcmVjdGlvbikKIAogICAgUmV0dXJuIDEgaWYgKnN1YnN0ciogbWF0Y2hlcyBgYHN0cltzdGFydDplbmRdYGAgYXQgdGhlIGdpdmVuIHRhaWwgZW5kCkBAIC0xNjA4LDEyICsxNjI4LDEyIEBACiAgICByZXNwZWN0aXZlbHkuCiAKIAotLi4gYzpmdW5jdGlvbjo6IGludCBQeVVuaWNvZGVfQ29tcGFyZVdpdGhBU0NJSVN0cmluZyhQeU9iamVjdCAqdW5pLCBjaGFyICpzdHJpbmcpCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKFB5T2JqZWN0ICp1bmksIGNvbnN0IGNoYXIgKnN0cmluZykKIAogICAgQ29tcGFyZSBhIHVuaWNvZGUgb2JqZWN0LCAqdW5pKiwgd2l0aCAqc3RyaW5nKiBhbmQgcmV0dXJuIC0xLCAwLCAxIGZvciBsZXNzCiAgICB0aGFuLCBlcXVhbCwgYW5kIGdyZWF0ZXIgdGhhbiwgcmVzcGVjdGl2ZWx5LiBJdCBpcyBiZXN0IHRvIHBhc3Mgb25seQogICAgQVNDSUktZW5jb2RlZCBzdHJpbmdzLCBidXQgdGhlIGZ1bmN0aW9uIGludGVycHJldHMgdGhlIGlucHV0IHN0cmluZyBhcwotICAgSVNPLTg4NTktMSBpZiBpdCBjb250YWlucyBub24tQVNDSUkgY2hhcmFjdGVycyIuCisgICBJU08tODg1OS0xIGlmIGl0IGNvbnRhaW5zIG5vbi1BU0NJSSBjaGFyYWN0ZXJzLgogCiAKIC4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlVbmljb2RlX1JpY2hDb21wYXJlKFB5T2JqZWN0ICpsZWZ0LCAgUHlPYmplY3QgKnJpZ2h0LCAgaW50IG9wKQpAQCAtMTYzNSw3ICsxNjU1LDcgQEAKIC4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlVbmljb2RlX0Zvcm1hdChQeU9iamVjdCAqZm9ybWF0LCBQeU9iamVjdCAqYXJncykKIAogICAgUmV0dXJuIGEgbmV3IHN0cmluZyBvYmplY3QgZnJvbSAqZm9ybWF0KiBhbmQgKmFyZ3MqOyB0aGlzIGlzIGFuYWxvZ291cyB0bwotICAgYGBmb3JtYXQgJSBhcmdzYGAuICBUaGUgKmFyZ3MqIGFyZ3VtZW50IG11c3QgYmUgYSB0dXBsZS4KKyAgIGBgZm9ybWF0ICUgYXJnc2BgLgogCiAKIC4uIGM6ZnVuY3Rpb246OiBpbnQgUHlVbmljb2RlX0NvbnRhaW5zKFB5T2JqZWN0ICpjb250YWluZXIsIFB5T2JqZWN0ICplbGVtZW50KQpkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL3ZlcnloaWdoLnJzdCBiL0RvYy9jLWFwaS92ZXJ5aGlnaC5yc3QKaW5kZXggMTRlZjhkZi4uZjhhYWYwZiAxMDA2NDQKLS0tIGEvRG9jL2MtYXBpL3ZlcnloaWdoLnJzdAorKysgYi9Eb2MvYy1hcGkvdmVyeWhpZ2gucnN0CkBAIC0xNDQsNiArMTQ0LDM3IEBACiAgICAoOmZ1bmM6YHN5cy5nZXRmaWxlc3lzdGVtZW5jb2RpbmdgKS4gIFJldHVybnMgYGAwYGAgYXQgRU9GLgogCiAKKy4uIGM6dmFyOjogaW50ICgqUHlPU19JbnB1dEhvb2spKHZvaWQpCisKKyAgIENhbiBiZSBzZXQgdG8gcG9pbnQgdG8gYSBmdW5jdGlvbiB3aXRoIHRoZSBwcm90b3R5cGUKKyAgIGBgaW50IGZ1bmModm9pZClgYC4gIFRoZSBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCB3aGVuIFB5dGhvbidzCisgICBpbnRlcnByZXRlciBwcm9tcHQgaXMgYWJvdXQgdG8gYmVjb21lIGlkbGUgYW5kIHdhaXQgZm9yIHVzZXIgaW5wdXQKKyAgIGZyb20gdGhlIHRlcm1pbmFsLiAgVGhlIHJldHVybiB2YWx1ZSBpcyBpZ25vcmVkLiAgT3ZlcnJpZGluZyB0aGlzCisgICBob29rIGNhbiBiZSB1c2VkIHRvIGludGVncmF0ZSB0aGUgaW50ZXJwcmV0ZXIncyBwcm9tcHQgd2l0aCBvdGhlcgorICAgZXZlbnQgbG9vcHMsIGFzIGRvbmUgaW4gdGhlIDpmaWxlOmBNb2R1bGVzL190a2ludGVyLmNgIGluIHRoZQorICAgUHl0aG9uIHNvdXJjZSBjb2RlLgorCisKKy4uIGM6dmFyOjogY2hhciogKCpQeU9TX1JlYWRsaW5lRnVuY3Rpb25Qb2ludGVyKShGSUxFICosIEZJTEUgKiwgY29uc3QgY2hhciAqKQorCisgICBDYW4gYmUgc2V0IHRvIHBvaW50IHRvIGEgZnVuY3Rpb24gd2l0aCB0aGUgcHJvdG90eXBlCisgICBgYGNoYXIgKmZ1bmMoRklMRSAqc3RkaW4sIEZJTEUgKnN0ZG91dCwgY2hhciAqcHJvbXB0KWBgLAorICAgb3ZlcnJpZGluZyB0aGUgZGVmYXVsdCBmdW5jdGlvbiB1c2VkIHRvIHJlYWQgYSBzaW5nbGUgbGluZSBvZiBpbnB1dAorICAgYXQgdGhlIGludGVycHJldGVyJ3MgcHJvbXB0LiAgVGhlIGZ1bmN0aW9uIGlzIGV4cGVjdGVkIHRvIG91dHB1dAorICAgdGhlIHN0cmluZyAqcHJvbXB0KiBpZiBpdCdzIG5vdCAqTlVMTCosIGFuZCB0aGVuIHJlYWQgYSBsaW5lIG9mCisgICBpbnB1dCBmcm9tIHRoZSBwcm92aWRlZCBzdGFuZGFyZCBpbnB1dCBmaWxlLCByZXR1cm5pbmcgdGhlCisgICByZXN1bHRpbmcgc3RyaW5nLiAgRm9yIGV4YW1wbGUsIFRoZSA6bW9kOmByZWFkbGluZWAgbW9kdWxlIHNldHMKKyAgIHRoaXMgaG9vayB0byBwcm92aWRlIGxpbmUtZWRpdGluZyBhbmQgdGFiLWNvbXBsZXRpb24gZmVhdHVyZXMuCisKKyAgIFRoZSByZXN1bHQgbXVzdCBiZSBhIHN0cmluZyBhbGxvY2F0ZWQgYnkgOmM6ZnVuYzpgUHlNZW1fUmF3TWFsbG9jYCBvcgorICAgOmM6ZnVuYzpgUHlNZW1fUmF3UmVhbGxvY2AsIG9yICpOVUxMKiBpZiBhbiBlcnJvciBvY2N1cnJlZC4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSByZXN1bHQgbXVzdCBiZSBhbGxvY2F0ZWQgYnkgOmM6ZnVuYzpgUHlNZW1fUmF3TWFsbG9jYCBvcgorICAgICAgOmM6ZnVuYzpgUHlNZW1fUmF3UmVhbGxvY2AsIGluc3RlYWQgb2YgYmVpbmcgYWxsb2NhdGVkIGJ5CisgICAgICA6YzpmdW5jOmBQeU1lbV9NYWxsb2NgIG9yIDpjOmZ1bmM6YFB5TWVtX1JlYWxsb2NgLgorCisKIC4uIGM6ZnVuY3Rpb246OiBzdHJ1Y3QgX25vZGUqIFB5UGFyc2VyX1NpbXBsZVBhcnNlU3RyaW5nKGNvbnN0IGNoYXIgKnN0ciwgaW50IHN0YXJ0KQogCiAgICBUaGlzIGlzIGEgc2ltcGxpZmllZCBpbnRlcmZhY2UgdG8KQEAgLTE3MCw3ICsyMDEsNyBAQAogLi4gYzpmdW5jdGlvbjo6IHN0cnVjdCBfbm9kZSogUHlQYXJzZXJfU2ltcGxlUGFyc2VGaWxlKEZJTEUgKmZwLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IHN0YXJ0KQogCiAgICBUaGlzIGlzIGEgc2ltcGxpZmllZCBpbnRlcmZhY2UgdG8gOmM6ZnVuYzpgUHlQYXJzZXJfU2ltcGxlUGFyc2VGaWxlRmxhZ3NgIGJlbG93LAotICAgbGVhdmluZyAqZmxhZ3MqIHNldCB0byBgYDBgYAorICAgbGVhdmluZyAqZmxhZ3MqIHNldCB0byBgYDBgYC4KIAogCiAuLiBjOmZ1bmN0aW9uOjogc3RydWN0IF9ub2RlKiBQeVBhcnNlcl9TaW1wbGVQYXJzZUZpbGVGbGFncyhGSUxFICpmcCwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBzdGFydCwgaW50IGZsYWdzKQpAQCAtMjM1LDE2ICsyNjYsMTUgQEAKICAgICpvcHRpbWl6ZSogc2V0IHRvIGBgLTFgYC4KIAogCi0uLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5X0NvbXBpbGVTdHJpbmdFeEZsYWdzKGNvbnN0IGNoYXIgKnN0ciwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBzdGFydCwgUHlDb21waWxlckZsYWdzICpmbGFncywgaW50IG9wdGltaXplKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeV9Db21waWxlU3RyaW5nT2JqZWN0KGNvbnN0IGNoYXIgKnN0ciwgUHlPYmplY3QgKmZpbGVuYW1lLCBpbnQgc3RhcnQsIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MsIGludCBvcHRpbWl6ZSkKIAogICAgUGFyc2UgYW5kIGNvbXBpbGUgdGhlIFB5dGhvbiBzb3VyY2UgY29kZSBpbiAqc3RyKiwgcmV0dXJuaW5nIHRoZSByZXN1bHRpbmcgY29kZQogICAgb2JqZWN0LiAgVGhlIHN0YXJ0IHRva2VuIGlzIGdpdmVuIGJ5ICpzdGFydCo7IHRoaXMgY2FuIGJlIHVzZWQgdG8gY29uc3RyYWluIHRoZQogICAgY29kZSB3aGljaCBjYW4gYmUgY29tcGlsZWQgYW5kIHNob3VsZCBiZSA6Y29uc3Q6YFB5X2V2YWxfaW5wdXRgLAogICAgOmNvbnN0OmBQeV9maWxlX2lucHV0YCwgb3IgOmNvbnN0OmBQeV9zaW5nbGVfaW5wdXRgLiAgVGhlIGZpbGVuYW1lIHNwZWNpZmllZCBieQogICAgKmZpbGVuYW1lKiBpcyB1c2VkIHRvIGNvbnN0cnVjdCB0aGUgY29kZSBvYmplY3QgYW5kIG1heSBhcHBlYXIgaW4gdHJhY2ViYWNrcyBvcgotICAgOmV4YzpgU3ludGF4RXJyb3JgIGV4Y2VwdGlvbiBtZXNzYWdlcywgaXQgaXMgZGVjb2RlZCBmcm9tIHRoZSBmaWxlc3lzdGVtCi0gICBlbmNvZGluZyAoOmZ1bmM6YHN5cy5nZXRmaWxlc3lzdGVtZW5jb2RpbmdgKS4gIFRoaXMgcmV0dXJucyAqTlVMTCogaWYgdGhlCi0gICBjb2RlIGNhbm5vdCBiZSBwYXJzZWQgb3IgY29tcGlsZWQuCisgICA6ZXhjOmBTeW50YXhFcnJvcmAgZXhjZXB0aW9uIG1lc3NhZ2VzLiAgVGhpcyByZXR1cm5zICpOVUxMKiBpZiB0aGUgY29kZQorICAgY2Fubm90IGJlIHBhcnNlZCBvciBjb21waWxlZC4KIAogICAgVGhlIGludGVnZXIgKm9wdGltaXplKiBzcGVjaWZpZXMgdGhlIG9wdGltaXphdGlvbiBsZXZlbCBvZiB0aGUgY29tcGlsZXI7IGEKICAgIHZhbHVlIG9mIGBgLTFgYCBzZWxlY3RzIHRoZSBvcHRpbWl6YXRpb24gbGV2ZWwgb2YgdGhlIGludGVycHJldGVyIGFzIGdpdmVuIGJ5CkBAIC0yNTIsOSArMjgyLDE2IEBACiAgICBgYF9fZGVidWdfX2BgIGlzIHRydWUpLCBgYDFgYCAoYXNzZXJ0cyBhcmUgcmVtb3ZlZCwgYGBfX2RlYnVnX19gYCBpcyBmYWxzZSkKICAgIG9yIGBgMmBgIChkb2NzdHJpbmdzIGFyZSByZW1vdmVkIHRvbykuCiAKLSAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgorICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CiAKIAorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeV9Db21waWxlU3RyaW5nRXhGbGFncyhjb25zdCBjaGFyICpzdHIsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgc3RhcnQsIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MsIGludCBvcHRpbWl6ZSkKKworICAgTGlrZSA6YzpmdW5jOmBQeV9Db21waWxlU3RyaW5nRXhGbGFnc2AsIGJ1dCAqZmlsZW5hbWUqIGlzIGEgYnl0ZSBzdHJpbmcKKyAgIGRlY29kZWQgZnJvbSB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZyAoOmZ1bmM6YG9zLmZzZGVjb2RlYCkuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgorCiAuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5RXZhbF9FdmFsQ29kZShQeU9iamVjdCAqY28sIFB5T2JqZWN0ICpnbG9iYWxzLCBQeU9iamVjdCAqbG9jYWxzKQogCiAgICBUaGlzIGlzIGEgc2ltcGxpZmllZCBpbnRlcmZhY2UgdG8gOmM6ZnVuYzpgUHlFdmFsX0V2YWxDb2RlRXhgLCB3aXRoIGp1c3QKQEAgLTI4NSw2ICszMjIsMTAgQEAKICAgIGl0IGNhdXNlcyBhbiBleGNlcHRpb24gdG8gaW1tZWRpYXRlbHkgYmUgdGhyb3duOyB0aGlzIGlzIHVzZWQgZm9yIHRoZQogICAgOm1ldGg6YH5nZW5lcmF0b3IudGhyb3dgIG1ldGhvZHMgb2YgZ2VuZXJhdG9yIG9iamVjdHMuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGlzIGZ1bmN0aW9uIG5vdyBpbmNsdWRlcyBhIGRlYnVnIGFzc2VydGlvbiB0byBoZWxwIGVuc3VyZSB0aGF0IGl0CisgICAgICBkb2VzIG5vdCBzaWxlbnRseSBkaXNjYXJkIGFuIGFjdGl2ZSBleGNlcHRpb24uCisKIAogLi4gYzpmdW5jdGlvbjo6IGludCBQeUV2YWxfTWVyZ2VDb21waWxlckZsYWdzKFB5Q29tcGlsZXJGbGFncyAqY2YpCiAKQEAgLTMzOCw0ICszNzksMyBAQAogCiAgICBUaGlzIGJpdCBjYW4gYmUgc2V0IGluICpmbGFncyogdG8gY2F1c2UgZGl2aXNpb24gb3BlcmF0b3IgYGAvYGAgdG8gYmUKICAgIGludGVycHJldGVkIGFzICJ0cnVlIGRpdmlzaW9uIiBhY2NvcmRpbmcgdG8gOnBlcDpgMjM4YC4KLQpkaWZmIC0tZ2l0IGEvRG9jL2NvbmYucHkgYi9Eb2MvY29uZi5weQppbmRleCA1YjYzY2FkLi5mODAzZGUyIDEwMDY0NAotLS0gYS9Eb2MvY29uZi5weQorKysgYi9Eb2MvY29uZi5weQpAQCAtNywyNiArNywxOCBAQAogIyB0aGF0IGFyZW4ndCBwaWNrbGVhYmxlIChtb2R1bGUgaW1wb3J0cyBhcmUgb2theSwgdGhleSdyZSByZW1vdmVkIGF1dG9tYXRpY2FsbHkpLgogCiBpbXBvcnQgc3lzLCBvcywgdGltZQotc3lzLnBhdGguYXBwZW5kKG9zLnBhdGguYWJzcGF0aCgndG9vbHMvc3BoaW54ZXh0JykpCitzeXMucGF0aC5hcHBlbmQob3MucGF0aC5hYnNwYXRoKCd0b29scy9leHRlbnNpb25zJykpCiAKICMgR2VuZXJhbCBjb25maWd1cmF0aW9uCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBleHRlbnNpb25zID0gWydzcGhpbnguZXh0LmNvdmVyYWdlJywgJ3NwaGlueC5leHQuZG9jdGVzdCcsCiAgICAgICAgICAgICAgICdweXNwZWNpZmljJywgJ2NfYW5ub3RhdGlvbnMnXQotdGVtcGxhdGVzX3BhdGggPSBbJ3Rvb2xzL3NwaGlueGV4dCddCiAKICMgR2VuZXJhbCBzdWJzdGl0dXRpb25zLgogcHJvamVjdCA9ICdQeXRob24nCiBjb3B5cmlnaHQgPSAnMTk5MC0lcywgUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24nICUgdGltZS5zdHJmdGltZSgnJVknKQogCi0jIFRoZSBkZWZhdWx0IHJlcGxhY2VtZW50cyBmb3IgfHZlcnNpb258IGFuZCB8cmVsZWFzZXwuCi0jCi0jIFRoZSBzaG9ydCBYLlkgdmVyc2lvbi4KLSMgdmVyc2lvbiA9ICcyLjYnCi0jIFRoZSBmdWxsIHZlcnNpb24sIGluY2x1ZGluZyBhbHBoYS9iZXRhL3JjIHRhZ3MuCi0jIHJlbGVhc2UgPSAnMi42YTAnCi0KICMgV2UgbG9vayBmb3IgdGhlIEluY2x1ZGUvcGF0Y2hsZXZlbC5oIGZpbGUgaW4gdGhlIGN1cnJlbnQgUHl0aG9uIHNvdXJjZSB0cmVlCiAjIGFuZCByZXBsYWNlIHRoZSB2YWx1ZXMgYWNjb3JkaW5nbHkuCiBpbXBvcnQgcGF0Y2hsZXZlbApAQCAtMzgsNDYgKzMwLDMwIEBACiAjIEVsc2UsIHRvZGF5X2ZtdCBpcyB1c2VkIGFzIHRoZSBmb3JtYXQgZm9yIGEgc3RyZnRpbWUgY2FsbC4KIHRvZGF5X2ZtdCA9ICclQiAlZCwgJVknCiAKLSMgTGlzdCBvZiBmaWxlcyB0aGF0IHNob3VsZG4ndCBiZSBpbmNsdWRlZCBpbiB0aGUgYnVpbGQuCi11bnVzZWRfZG9jcyA9IFsKLSAgICAnbWFjbGliL3NjcmFwJywKLSAgICAnbGlicmFyeS94bWxsaWInLAotICAgICdsaWJyYXJ5L3htbC5ldHJlZScsCi1dCi0KLSMgSWdub3JlIC5yc3QgaW4gU3BoaW54IGl0cyBzZWxmLgotZXhjbHVkZV90cmVlcyA9IFsndG9vbHMvc3BoaW54J10KLQotIyBSZWxhdGl2ZSBmaWxlbmFtZSBvZiB0aGUgcmVmZXJlbmNlIGNvdW50IGRhdGEgZmlsZS4KLXJlZmNvdW50X2ZpbGUgPSAnZGF0YS9yZWZjb3VudHMuZGF0JwotCi0jIElmIHRydWUsICcoKScgd2lsbCBiZSBhcHBlbmRlZCB0byA6ZnVuYzogZXRjLiBjcm9zcy1yZWZlcmVuY2UgdGV4dC4KLWFkZF9mdW5jdGlvbl9wYXJlbnRoZXNlcyA9IFRydWUKLQotIyBJZiB0cnVlLCB0aGUgY3VycmVudCBtb2R1bGUgbmFtZSB3aWxsIGJlIHByZXBlbmRlZCB0byBhbGwgZGVzY3JpcHRpb24KLSMgdW5pdCB0aXRsZXMgKHN1Y2ggYXMgLi4gZnVuY3Rpb246OikuCi1hZGRfbW9kdWxlX25hbWVzID0gVHJ1ZQotCiAjIEJ5IGRlZmF1bHQsIGhpZ2hsaWdodCBhcyBQeXRob24gMy4KIGhpZ2hsaWdodF9sYW5ndWFnZSA9ICdweXRob24zJwogCisjIFJlcXVpcmUgU3BoaW54IDEuMiBmb3IgYnVpbGQuCituZWVkc19zcGhpbnggPSAnMS4yJworCiAKICMgT3B0aW9ucyBmb3IgSFRNTCBvdXRwdXQKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorIyBVc2Ugb3VyIGN1c3RvbSB0aGVtZS4KIGh0bWxfdGhlbWUgPSAncHlkb2N0aGVtZScKLWh0bWxfdGhlbWVfcGF0aCA9IFsndG9vbHMvc3BoaW54ZXh0J10KK2h0bWxfdGhlbWVfcGF0aCA9IFsndG9vbHMnXQogaHRtbF90aGVtZV9vcHRpb25zID0geydjb2xsYXBzaWJsZXNpZGViYXInOiBUcnVlfQogCisjIFNob3J0IHRpdGxlIHVzZWQgZS5nLiBmb3IgPHRpdGxlPiBIVE1MIHRhZ3MuCiBodG1sX3Nob3J0X3RpdGxlID0gJyVzIERvY3VtZW50YXRpb24nICUgcmVsZWFzZQogCiAjIElmIG5vdCAnJywgYSAnTGFzdCB1cGRhdGVkIG9uOicgdGltZXN0YW1wIGlzIGluc2VydGVkIGF0IGV2ZXJ5IHBhZ2UgYm90dG9tLAogIyB1c2luZyB0aGUgZ2l2ZW4gc3RyZnRpbWUgZm9ybWF0LgogaHRtbF9sYXN0X3VwZGF0ZWRfZm10ID0gJyViICVkLCAlWScKIAotIyBJZiB0cnVlLCBTbWFydHlQYW50cyB3aWxsIGJlIHVzZWQgdG8gY29udmVydCBxdW90ZXMgYW5kIGRhc2hlcyB0bwotIyB0eXBvZ3JhcGhpY2FsbHkgY29ycmVjdCBlbnRpdGllcy4KLWh0bWxfdXNlX3NtYXJ0eXBhbnRzID0gVHJ1ZQorIyBQYXRoIHRvIGZpbmQgSFRNTCB0ZW1wbGF0ZXMuCit0ZW1wbGF0ZXNfcGF0aCA9IFsndG9vbHMvdGVtcGxhdGVzJ10KIAogIyBDdXN0b20gc2lkZWJhciB0ZW1wbGF0ZXMsIGZpbGVuYW1lcyByZWxhdGl2ZSB0byB0aGlzIGZpbGUuCiBodG1sX3NpZGViYXJzID0gewpAQCAtOTEsMTAgKzY3LDEwIEBACiB9CiAKICMgT3V0cHV0IGFuIE9wZW5TZWFyY2ggZGVzY3JpcHRpb24gZmlsZS4KLWh0bWxfdXNlX29wZW5zZWFyY2ggPSAnaHR0cDovL2RvY3MucHl0aG9uLm9yZy8nICsgdmVyc2lvbgoraHRtbF91c2Vfb3BlbnNlYXJjaCA9ICdodHRwczovL2RvY3MucHl0aG9uLm9yZy8nICsgdmVyc2lvbgogCiAjIEFkZGl0aW9uYWwgc3RhdGljIGZpbGVzLgotaHRtbF9zdGF0aWNfcGF0aCA9IFsndG9vbHMvc3BoaW54ZXh0L3N0YXRpYyddCitodG1sX3N0YXRpY19wYXRoID0gWyd0b29scy9zdGF0aWMnXQogCiAjIE91dHB1dCBmaWxlIGJhc2UgbmFtZSBmb3IgSFRNTCBoZWxwIGJ1aWxkZXIuCiBodG1saGVscF9iYXNlbmFtZSA9ICdweXRob24nICsgcmVsZWFzZS5yZXBsYWNlKCcuJywgJycpCkBAIC0xMTQsMTUgKzkwLDE1IEBACiAKICMgR3JvdXBpbmcgdGhlIGRvY3VtZW50IHRyZWUgaW50byBMYVRlWCBmaWxlcy4gTGlzdCBvZiB0dXBsZXMKICMgKHNvdXJjZSBzdGFydCBmaWxlLCB0YXJnZXQgbmFtZSwgdGl0bGUsIGF1dGhvciwgZG9jdW1lbnQgY2xhc3MgW2hvd3RvL21hbnVhbF0pLgotX3N0ZGF1dGhvciA9IHInR3VpZG8gdmFuIFJvc3N1bVxcRnJlZCBMLiBEcmFrZSwgSnIuLCBlZGl0b3InCitfc3RkYXV0aG9yID0gcidHdWlkbyB2YW4gUm9zc3VtXFxhbmQgdGhlIFB5dGhvbiBkZXZlbG9wbWVudCB0ZWFtJwogbGF0ZXhfZG9jdW1lbnRzID0gWwogICAgICgnYy1hcGkvaW5kZXgnLCAnYy1hcGkudGV4JywKICAgICAgJ1RoZSBQeXRob24vQyBBUEknLCBfc3RkYXV0aG9yLCAnbWFudWFsJyksCi0gICAgKCdkaXN0dXRpbHMvaW5kZXgnLCAnZGlzdHV0aWxzLnRleCcsCisgICAgKCdkaXN0cmlidXRpbmcvaW5kZXgnLCAnZGlzdHJpYnV0aW5nLnRleCcsCiAgICAgICdEaXN0cmlidXRpbmcgUHl0aG9uIE1vZHVsZXMnLCBfc3RkYXV0aG9yLCAnbWFudWFsJyksCiAgICAgKCdleHRlbmRpbmcvaW5kZXgnLCAnZXh0ZW5kaW5nLnRleCcsCiAgICAgICdFeHRlbmRpbmcgYW5kIEVtYmVkZGluZyBQeXRob24nLCBfc3RkYXV0aG9yLCAnbWFudWFsJyksCi0gICAgKCdpbnN0YWxsL2luZGV4JywgJ2luc3RhbGwudGV4JywKKyAgICAoJ2luc3RhbGxpbmcvaW5kZXgnLCAnaW5zdGFsbGluZy50ZXgnLAogICAgICAnSW5zdGFsbGluZyBQeXRob24gTW9kdWxlcycsIF9zdGRhdXRob3IsICdtYW51YWwnKSwKICAgICAoJ2xpYnJhcnkvaW5kZXgnLCAnbGlicmFyeS50ZXgnLAogICAgICAnVGhlIFB5dGhvbiBMaWJyYXJ5IFJlZmVyZW5jZScsIF9zdGRhdXRob3IsICdtYW51YWwnKSwKQEAgLTE1OSw2ICsxMzUsNyBAQAogIyBHZXQgTGFUZVggdG8gaGFuZGxlIFVuaWNvZGUgY29ycmVjdGx5CiBsYXRleF9lbGVtZW50cyA9IHsnaW5wdXRlbmMnOiByJ1x1c2VwYWNrYWdlW3V0Zjh4XXtpbnB1dGVuY30nLCAndXRmOGV4dHJhJzogJyd9CiAKKwogIyBPcHRpb25zIGZvciB0aGUgY292ZXJhZ2UgY2hlY2tlcgogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC0xOTQsMyArMTcxLDE5IEBACiBjb3ZlcmFnZV9pZ25vcmVfY19pdGVtcyA9IHsKICMgICAgJ2NmdW5jdGlvbic6IFsuLi5dCiB9CisKKworIyBPcHRpb25zIGZvciB0aGUgbGluayBjaGVja2VyCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBJZ25vcmUgY2VydGFpbiBVUkxzLgorbGlua2NoZWNrX2lnbm9yZSA9IFtyJ2h0dHBzOi8vYnVncy5weXRob24ub3JnLyhpc3N1ZSk/XGQrJywKKyAgICAgICAgICAgICAgICAgICAgIyBJZ25vcmUgUEVQcyBmb3Igbm93LCB0aGV5IGFsbCBoYXZlIHBlcm1hbmVudCByZWRpcmVjdHMuCisgICAgICAgICAgICAgICAgICAgIHInaHR0cDovL3d3dy5weXRob24ub3JnL2Rldi9wZXBzL3BlcC1cZCsnXQorCisKKyMgT3B0aW9ucyBmb3IgZXh0ZW5zaW9ucworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgUmVsYXRpdmUgZmlsZW5hbWUgb2YgdGhlIHJlZmVyZW5jZSBjb3VudCBkYXRhIGZpbGUuCityZWZjb3VudF9maWxlID0gJ2RhdGEvcmVmY291bnRzLmRhdCcKZGlmZiAtLWdpdCBhL0RvYy9jb250ZW50cy5yc3QgYi9Eb2MvY29udGVudHMucnN0CmluZGV4IGMwYzZhZjMuLjg2OTBkZTcgMTAwNjQ0Ci0tLSBhL0RvYy9jb250ZW50cy5yc3QKKysrIGIvRG9jL2NvbnRlbnRzLnJzdApAQCAtMTEsOCArMTEsOCBAQAogICAgbGlicmFyeS9pbmRleC5yc3QKICAgIGV4dGVuZGluZy9pbmRleC5yc3QKICAgIGMtYXBpL2luZGV4LnJzdAotICAgZGlzdHV0aWxzL2luZGV4LnJzdAotICAgaW5zdGFsbC9pbmRleC5yc3QKKyAgIGRpc3RyaWJ1dGluZy9pbmRleC5yc3QKKyAgIGluc3RhbGxpbmcvaW5kZXgucnN0CiAgICBob3d0by9pbmRleC5yc3QKICAgIGZhcS9pbmRleC5yc3QKICAgIGdsb3NzYXJ5LnJzdApAQCAtMjEsMyArMjEsMTEgQEAKICAgIGJ1Z3MucnN0CiAgICBjb3B5cmlnaHQucnN0CiAgICBsaWNlbnNlLnJzdAorCisuLiB0byBpbmNsdWRlIGxlZ2FjeSBwYWNrYWdpbmcgZG9jcyBpbiBidWlsZAorCisuLiB0b2N0cmVlOjoKKyAgIDpoaWRkZW46CisKKyAgIGRpc3R1dGlscy9pbmRleC5yc3QKKyAgIGluc3RhbGwvaW5kZXgucnN0CmRpZmYgLS1naXQgYS9Eb2MvZGF0YS9yZWZjb3VudHMuZGF0IGIvRG9jL2RhdGEvcmVmY291bnRzLmRhdAppbmRleCBhNDI1ODRjLi42MDI1NjE3IDEwMDY0NAotLS0gYS9Eb2MvZGF0YS9yZWZjb3VudHMuZGF0CisrKyBiL0RvYy9kYXRhL3JlZmNvdW50cy5kYXQKQEAgLTI5LDcgKzI5LDcgQEAKICMgcmVmZXJlbmNlIHRvIHRoZSBpdGVtIGFyZ3VtZW50IQogCiAjIFRoZSBwYXJhbWV0ZXIgbmFtZXMgYXJlIGFzIHRoZXkgYXBwZWFyIGluIHRoZSBBUEkgbWFudWFsLCBub3QgdGhlIHNvdXJjZQotIyBjb2RlLiAKKyMgY29kZS4KIAogUHlCb29sX0Zyb21Mb25nOlB5T2JqZWN0Kjo6KzE6CiBQeUJvb2xfRnJvbUxvbmc6bG9uZzp2OjA6CkBAIC0yMjAsNiArMjIwLDExIEBACiBQeURpY3RfR2V0SXRlbVN0cmluZzpQeU9iamVjdCo6cDowOgogUHlEaWN0X0dldEl0ZW1TdHJpbmc6Y29uc3QgY2hhcio6a2V5OjoKIAorUHlEaWN0X1NldERlZmF1bHQ6UHlPYmplY3QqOjowOgorUHlEaWN0X1NldERlZmF1bHQ6UHlPYmplY3QqOnA6MDoKK1B5RGljdF9TZXREZWZhdWx0OlB5T2JqZWN0KjprZXk6MDpjb25kaXRpb25hbGx5ICsxIGlmIGluc2VydGVkIGludG8gdGhlIGRpY3QKK1B5RGljdF9TZXREZWZhdWx0OlB5T2JqZWN0KjpkZWZhdWx0OjA6Y29uZGl0aW9uYWxseSArMSBpZiBpbnNlcnRlZCBpbnRvIHRoZSBkaWN0CisKIFB5RGljdF9JdGVtczpQeU9iamVjdCo6OisxOgogUHlEaWN0X0l0ZW1zOlB5T2JqZWN0KjpwOjA6CiAKQEAgLTUwMywxMyArNTA4LDEzIEBACiBQeUltcG9ydF9DbGVhbnVwOnZvaWQ6OjoKIAogUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGU6UHlPYmplY3QqOjorMToKLVB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlOmNoYXIqOm5hbWU6OgorUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGU6Y29uc3QgY2hhcio6bmFtZTo6CiBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZTpQeU9iamVjdCo6Y286MDoKIAogUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVFeDpQeU9iamVjdCo6OisxOgotUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVFeDpjaGFyKjpuYW1lOjoKK1B5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlRXg6Y29uc3QgY2hhcio6bmFtZTo6CiBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZUV4OlB5T2JqZWN0KjpjbzowOgotUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVFeDpjaGFyKjpwYXRobmFtZTo6CitQeUltcG9ydF9FeGVjQ29kZU1vZHVsZUV4OmNvbnN0IGNoYXIqOnBhdGhuYW1lOjoKIAogUHlJbXBvcnRfR2V0TWFnaWNOdW1iZXI6bG9uZzo6OgogCkBAIC01MTksNyArNTI0LDcgQEAKIFB5SW1wb3J0X0ltcG9ydDpQeU9iamVjdCo6bmFtZTowOgogCiBQeUltcG9ydF9JbXBvcnRGcm96ZW5Nb2R1bGU6aW50Ojo6Ci1QeUltcG9ydF9JbXBvcnRGcm96ZW5Nb2R1bGU6Y2hhcio6OjoKK1B5SW1wb3J0X0ltcG9ydEZyb3plbk1vZHVsZTpjb25zdCBjaGFyKjo6OgogCiBQeUltcG9ydF9JbXBvcnRNb2R1bGU6UHlPYmplY3QqOjorMToKIFB5SW1wb3J0X0ltcG9ydE1vZHVsZTpjb25zdCBjaGFyKjpuYW1lOjoKQEAgLTY2OCw3ICs2NzMsNyBAQAogUHlMb25nX0Zyb21VbnNpZ25lZExvbmdMb25nOnVuc2lnbmVkIGxvbmcgbG9uZzp2OjoKIAogUHlMb25nX0Zyb21TdHJpbmc6UHlPYmplY3QqOjorMToKLVB5TG9uZ19Gcm9tU3RyaW5nOmNoYXIqOnN0cjo6CitQeUxvbmdfRnJvbVN0cmluZzpjb25zdCBjaGFyKjpzdHI6OgogUHlMb25nX0Zyb21TdHJpbmc6Y2hhcioqOnBlbmQ6OgogUHlMb25nX0Zyb21TdHJpbmc6aW50OmJhc2U6OgogCkBAIC02OTYsNyArNzAxLDcgQEAKIAogUHlNYXBwaW5nX0dldEl0ZW1TdHJpbmc6UHlPYmplY3QqOjorMToKIFB5TWFwcGluZ19HZXRJdGVtU3RyaW5nOlB5T2JqZWN0KjpvOjA6Ci1QeU1hcHBpbmdfR2V0SXRlbVN0cmluZzpjaGFyKjprZXk6OgorUHlNYXBwaW5nX0dldEl0ZW1TdHJpbmc6Y29uc3QgY2hhcio6a2V5OjoKIAogUHlNYXBwaW5nX0hhc0tleTppbnQ6OjoKIFB5TWFwcGluZ19IYXNLZXk6UHlPYmplY3QqOm86MDoKQEAgLTcwNCw3ICs3MDksNyBAQAogCiBQeU1hcHBpbmdfSGFzS2V5U3RyaW5nOmludDo6OgogUHlNYXBwaW5nX0hhc0tleVN0cmluZzpQeU9iamVjdCo6bzowOgotUHlNYXBwaW5nX0hhc0tleVN0cmluZzpjaGFyKjprZXk6OgorUHlNYXBwaW5nX0hhc0tleVN0cmluZzpjb25zdCBjaGFyKjprZXk6OgogCiBQeU1hcHBpbmdfSXRlbXM6UHlPYmplY3QqOjorMToKIFB5TWFwcGluZ19JdGVtczpQeU9iamVjdCo6bzowOgpAQCAtNzE3LDcgKzcyMiw3IEBACiAKIFB5TWFwcGluZ19TZXRJdGVtU3RyaW5nOmludDo6OgogUHlNYXBwaW5nX1NldEl0ZW1TdHJpbmc6UHlPYmplY3QqOm86MDoKLVB5TWFwcGluZ19TZXRJdGVtU3RyaW5nOmNoYXIqOmtleTo6CitQeU1hcHBpbmdfU2V0SXRlbVN0cmluZzpjb25zdCBjaGFyKjprZXk6OgogUHlNYXBwaW5nX1NldEl0ZW1TdHJpbmc6UHlPYmplY3QqOnY6KzE6CiAKIFB5TWFwcGluZ19WYWx1ZXM6UHlPYmplY3QqOjorMToKQEAgLTczMCw3ICs3MzUsNyBAQAogUHlNYXJzaGFsX1JlYWRPYmplY3RGcm9tRmlsZTpGSUxFKjpmaWxlOjoKIAogUHlNYXJzaGFsX1JlYWRPYmplY3RGcm9tU3RyaW5nOlB5T2JqZWN0Kjo6KzE6Ci1QeU1hcnNoYWxfUmVhZE9iamVjdEZyb21TdHJpbmc6Y2hhcio6c3RyaW5nOjoKK1B5TWFyc2hhbF9SZWFkT2JqZWN0RnJvbVN0cmluZzpjb25zdCBjaGFyKjpzdHJpbmc6OgogUHlNYXJzaGFsX1JlYWRPYmplY3RGcm9tU3RyaW5nOmludDpsZW46OgogCiBQeU1hcnNoYWxfV3JpdGVPYmplY3RUb1N0cmluZzpQeU9iamVjdCo6OisxOgpAQCAtOTAyLDcgKzkwNyw3IEBACiBQeU51bWJlcl9Yb3I6UHlPYmplY3QqOm8xOjA6CiBQeU51bWJlcl9Yb3I6UHlPYmplY3QqOm8yOjA6CiAKLVB5T2JqZWN0X0FzRmlsZURlc2NyaXB0b3I6aW50Ojo6IAorUHlPYmplY3RfQXNGaWxlRGVzY3JpcHRvcjppbnQ6OjoKIFB5T2JqZWN0X0FzRmlsZURlc2NyaXB0b3I6UHlPYmplY3QqOm86MDoKIAogUHlPYmplY3RfQ2FsbDpQeU9iamVjdCo6OisxOgpAQCAtOTEyLDcgKzkxNyw3IEBACiAKIFB5T2JqZWN0X0NhbGxGdW5jdGlvbjpQeU9iamVjdCo6OisxOgogUHlPYmplY3RfQ2FsbEZ1bmN0aW9uOlB5T2JqZWN0KjpjYWxsYWJsZV9vYmplY3Q6MDoKLVB5T2JqZWN0X0NhbGxGdW5jdGlvbjpjaGFyKjpmb3JtYXQ6OgorUHlPYmplY3RfQ2FsbEZ1bmN0aW9uOmNvbnN0IGNoYXIqOmZvcm1hdDo6CiBQeU9iamVjdF9DYWxsRnVuY3Rpb246Oi4uLjo6CiAKIFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3M6UHlPYmplY3QqOjorMToKQEAgLTkyMSw4ICs5MjYsOCBAQAogCiBQeU9iamVjdF9DYWxsTWV0aG9kOlB5T2JqZWN0Kjo6KzE6CiBQeU9iamVjdF9DYWxsTWV0aG9kOlB5T2JqZWN0KjpvOjA6Ci1QeU9iamVjdF9DYWxsTWV0aG9kOmNoYXIqOm06OgotUHlPYmplY3RfQ2FsbE1ldGhvZDpjaGFyKjpmb3JtYXQ6OgorUHlPYmplY3RfQ2FsbE1ldGhvZDpjb25zdCBjaGFyKjptOjoKK1B5T2JqZWN0X0NhbGxNZXRob2Q6Y29uc3QgY2hhcio6Zm9ybWF0OjoKIFB5T2JqZWN0X0NhbGxNZXRob2Q6Oi4uLjo6CiAKIFB5T2JqZWN0X0NhbGxNZXRob2RPYmpBcmdzOlB5T2JqZWN0Kjo6KzE6CmRpZmYgLS1naXQgYS9Eb2MvZGlzdHJpYnV0aW5nL2luZGV4LnJzdCBiL0RvYy9kaXN0cmlidXRpbmcvaW5kZXgucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3NzRkMjMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2MvZGlzdHJpYnV0aW5nL2luZGV4LnJzdApAQCAtMCwwICsxLDE3MCBAQAorLi4gX2Rpc3RyaWJ1dGluZy1pbmRleDoKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICBEaXN0cmlidXRpbmcgUHl0aG9uIE1vZHVsZXMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworOkVtYWlsOiBkaXN0dXRpbHMtc2lnQHB5dGhvbi5vcmcKKworCitBcyBhIHBvcHVsYXIgb3BlbiBzb3VyY2UgZGV2ZWxvcG1lbnQgcHJvamVjdCwgUHl0aG9uIGhhcyBhbiBhY3RpdmUKK3N1cHBvcnRpbmcgY29tbXVuaXR5IG9mIGNvbnRyaWJ1dG9ycyBhbmQgdXNlcnMgdGhhdCBhbHNvIG1ha2UgdGhlaXIgc29mdHdhcmUKK2F2YWlsYWJsZSBmb3Igb3RoZXIgUHl0aG9uIGRldmVsb3BlcnMgdG8gdXNlIHVuZGVyIG9wZW4gc291cmNlIGxpY2Vuc2UgdGVybXMuCisKK1RoaXMgYWxsb3dzIFB5dGhvbiB1c2VycyB0byBzaGFyZSBhbmQgY29sbGFib3JhdGUgZWZmZWN0aXZlbHksIGJlbmVmaXRpbmcKK2Zyb20gdGhlIHNvbHV0aW9ucyBvdGhlcnMgaGF2ZSBhbHJlYWR5IGNyZWF0ZWQgdG8gY29tbW9uIChhbmQgc29tZXRpbWVzCitldmVuIHJhcmUhKSBwcm9ibGVtcywgYXMgd2VsbCBhcyBwb3RlbnRpYWxseSBjb250cmlidXRpbmcgdGhlaXIgb3duCitzb2x1dGlvbnMgdG8gdGhlIGNvbW1vbiBwb29sLgorCitUaGlzIGd1aWRlIGNvdmVycyB0aGUgZGlzdHJpYnV0aW9uIHBhcnQgb2YgdGhlIHByb2Nlc3MuIEZvciBhIGd1aWRlIHRvCitpbnN0YWxsaW5nIG90aGVyIFB5dGhvbiBwcm9qZWN0cywgcmVmZXIgdG8gdGhlCis6cmVmOmBpbnN0YWxsYXRpb24gZ3VpZGUgPGluc3RhbGxpbmctaW5kZXg+YC4KKworLi4gbm90ZTo6CisKKyAgIEZvciBjb3Jwb3JhdGUgYW5kIG90aGVyIGluc3RpdHV0aW9uYWwgdXNlcnMsIGJlIGF3YXJlIHRoYXQgbWFueQorICAgb3JnYW5pc2F0aW9ucyBoYXZlIHRoZWlyIG93biBwb2xpY2llcyBhcm91bmQgdXNpbmcgYW5kIGNvbnRyaWJ1dGluZyB0bworICAgb3BlbiBzb3VyY2Ugc29mdHdhcmUuIFBsZWFzZSB0YWtlIHN1Y2ggcG9saWNpZXMgaW50byBhY2NvdW50IHdoZW4gbWFraW5nCisgICB1c2Ugb2YgdGhlIGRpc3RyaWJ1dGlvbiBhbmQgaW5zdGFsbGF0aW9uIHRvb2xzIHByb3ZpZGVkIHdpdGggUHl0aG9uLgorCisKK0tleSB0ZXJtcworPT09PT09PT09CisKKyogdGhlIGBQeXRob24gUGFja2FnaW5nIEluZGV4IDxodHRwczovL3B5cGkucHl0aG9uLm9yZy9weXBpPmBfXyBpcyBhIHB1YmxpYworICByZXBvc2l0b3J5IG9mIG9wZW4gc291cmNlIGxpY2Vuc2VkIHBhY2thZ2VzIG1hZGUgYXZhaWxhYmxlIGZvciB1c2UgYnkKKyAgb3RoZXIgUHl0aG9uIHVzZXJzCisqIHRoZSBgUHl0aG9uIFBhY2thZ2luZyBBdXRob3JpdHkKKyAgPGh0dHBzOi8vcGFja2FnaW5nLnB5dGhvbi5vcmcvZW4vbGF0ZXN0L2Z1dHVyZS5odG1sPmBfXyBhcmUgdGhlIGdyb3VwIG9mCisgIGRldmVsb3BlcnMgYW5kIGRvY3VtZW50YXRpb24gYXV0aG9ycyByZXNwb25zaWJsZSBmb3IgdGhlIG1haW50ZW5hbmNlIGFuZAorICBldm9sdXRpb24gb2YgdGhlIHN0YW5kYXJkIHBhY2thZ2luZyB0b29scyBhbmQgdGhlIGFzc29jaWF0ZWQgbWV0YWRhdGEgYW5kCisgIGZpbGUgZm9ybWF0IHN0YW5kYXJkcy4gVGhleSBtYWludGFpbiBhIHZhcmlldHkgb2YgdG9vbHMsIGRvY3VtZW50YXRpb24KKyAgYW5kIGlzc3VlIHRyYWNrZXJzIG9uIGJvdGggYEdpdEh1YiA8aHR0cHM6Ly9naXRodWIuY29tL3B5cGE+YF9fIGFuZAorICBgQml0QnVja2V0IDxodHRwczovL2JpdGJ1Y2tldC5vcmcvcHlwYS8+YF9fLgorKiA6bW9kOmBkaXN0dXRpbHNgIGlzIHRoZSBvcmlnaW5hbCBidWlsZCBhbmQgZGlzdHJpYnV0aW9uIHN5c3RlbSBmaXJzdCBhZGRlZAorICB0byB0aGUgUHl0aG9uIHN0YW5kYXJkIGxpYnJhcnkgaW4gMTk5OC4gV2hpbGUgZGlyZWN0IHVzZSBvZiA6bW9kOmBkaXN0dXRpbHNgCisgIGlzIGJlaW5nIHBoYXNlZCBvdXQsIGl0IHN0aWxsIGxhaWQgdGhlIGZvdW5kYXRpb24gZm9yIHRoZSBjdXJyZW50IHBhY2thZ2luZworICBhbmQgZGlzdHJpYnV0aW9uIGluZnJhc3RydWN0dXJlLCBhbmQgaXQgbm90IG9ubHkgcmVtYWlucyBwYXJ0IG9mIHRoZQorICBzdGFuZGFyZCBsaWJyYXJ5LCBidXQgaXRzIG5hbWUgbGl2ZXMgb24gaW4gb3RoZXIgd2F5cyAoc3VjaCBhcyB0aGUgbmFtZQorICBvZiB0aGUgbWFpbGluZyBsaXN0IHVzZWQgdG8gY29vcmRpbmF0ZSBQeXRob24gcGFja2FnaW5nIHN0YW5kYXJkcworICBkZXZlbG9wbWVudCkuCisqIGBzZXR1cHRvb2xzYF8gaXMgYSAobGFyZ2VseSkgZHJvcC1pbiByZXBsYWNlbWVudCBmb3IgOm1vZDpgZGlzdHV0aWxzYCBmaXJzdAorICBwdWJsaXNoZWQgaW4gMjAwNC4gSXRzIG1vc3Qgbm90YWJsZSBhZGRpdGlvbiBvdmVyIHRoZSB1bm1vZGlmaWVkCisgIDptb2Q6YGRpc3R1dGlsc2AgdG9vbHMgd2FzIHRoZSBhYmlsaXR5IHRvIGRlY2xhcmUgZGVwZW5kZW5jaWVzIG9uIG90aGVyCisgIHBhY2thZ2VzLiBJdCBpcyBjdXJyZW50bHkgcmVjb21tZW5kZWQgYXMgYSBtb3JlIHJlZ3VsYXJseSB1cGRhdGVkCisgIGFsdGVybmF0aXZlIHRvIDptb2Q6YGRpc3R1dGlsc2AgdGhhdCBvZmZlcnMgY29uc2lzdGVudCBzdXBwb3J0IGZvciBtb3JlCisgIHJlY2VudCBwYWNrYWdpbmcgc3RhbmRhcmRzIGFjcm9zcyBhIHdpZGUgcmFuZ2Ugb2YgUHl0aG9uIHZlcnNpb25zLgorKiBgd2hlZWxgXyAoaW4gdGhpcyBjb250ZXh0KSBpcyBhIHByb2plY3QgdGhhdCBhZGRzIHRoZSBgYGJkaXN0X3doZWVsYGAKKyAgY29tbWFuZCB0byA6bW9kOmBkaXN0dXRpbHNgL2BzZXR1cHRvb2xzYF8uIFRoaXMgcHJvZHVjZXMgYSBjcm9zcyBwbGF0Zm9ybQorICBiaW5hcnkgcGFja2FnaW5nIGZvcm1hdCAoY2FsbGVkICJ3aGVlbHMiIG9yICJ3aGVlbCBmaWxlcyIgYW5kIGRlZmluZWQgaW4KKyAgOnBlcDpgNDI3YCkgdGhhdCBhbGxvd3MgUHl0aG9uIGxpYnJhcmllcywgZXZlbiB0aG9zZSBpbmNsdWRpbmcgYmluYXJ5CisgIGV4dGVuc2lvbnMsIHRvIGJlIGluc3RhbGxlZCBvbiBhIHN5c3RlbSB3aXRob3V0IG5lZWRpbmcgdG8gYmUgYnVpbHQKKyAgbG9jYWxseS4KKworLi4gX3NldHVwdG9vbHM6IGh0dHBzOi8vc2V0dXB0b29scy5weXBhLmlvL2VuL2xhdGVzdC9zZXR1cHRvb2xzLmh0bWwKKy4uIF93aGVlbDogaHR0cDovL3doZWVsLnJlYWR0aGVkb2NzLm9yZworCitPcGVuIHNvdXJjZSBsaWNlbnNpbmcgYW5kIGNvbGxhYm9yYXRpb24KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitJbiBtb3N0IHBhcnRzIG9mIHRoZSB3b3JsZCwgc29mdHdhcmUgaXMgYXV0b21hdGljYWxseSBjb3ZlcmVkIGJ5IGNvcHlyaWdodC4KK1RoaXMgbWVhbnMgdGhhdCBvdGhlciBkZXZlbG9wZXJzIHJlcXVpcmUgZXhwbGljaXQgcGVybWlzc2lvbiB0byBjb3B5LCB1c2UsCittb2RpZnkgYW5kIHJlZGlzdHJpYnV0ZSB0aGUgc29mdHdhcmUuCisKK09wZW4gc291cmNlIGxpY2Vuc2luZyBpcyBhIHdheSBvZiBleHBsaWNpdGx5IGdyYW50aW5nIHN1Y2ggcGVybWlzc2lvbiBpbiBhCityZWxhdGl2ZWx5IGNvbnNpc3RlbnQgd2F5LCBhbGxvd2luZyBkZXZlbG9wZXJzIHRvIHNoYXJlIGFuZCBjb2xsYWJvcmF0ZQorZWZmaWNpZW50bHkgYnkgbWFraW5nIGNvbW1vbiBzb2x1dGlvbnMgdG8gdmFyaW91cyBwcm9ibGVtcyBmcmVlbHkgYXZhaWxhYmxlLgorVGhpcyBsZWF2ZXMgbWFueSBkZXZlbG9wZXJzIGZyZWUgdG8gc3BlbmQgbW9yZSB0aW1lIGZvY3VzaW5nIG9uIHRoZSBwcm9ibGVtcwordGhhdCBhcmUgcmVsYXRpdmVseSB1bmlxdWUgdG8gdGhlaXIgc3BlY2lmaWMgc2l0dWF0aW9uLgorCitUaGUgZGlzdHJpYnV0aW9uIHRvb2xzIHByb3ZpZGVkIHdpdGggUHl0aG9uIGFyZSBkZXNpZ25lZCB0byBtYWtlIGl0CityZWFzb25hYmx5IHN0cmFpZ2h0Zm9yd2FyZCBmb3IgZGV2ZWxvcGVycyB0byBtYWtlIHRoZWlyIG93biBjb250cmlidXRpb25zCitiYWNrIHRvIHRoYXQgY29tbW9uIHBvb2wgb2Ygc29mdHdhcmUgaWYgdGhleSBjaG9vc2UgdG8gZG8gc28uCisKK1RoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0b29scyBjYW4gYWxzbyBiZSB1c2VkIHRvIGRpc3RyaWJ1dGUgc29mdHdhcmUgd2l0aGluCithbiBvcmdhbmlzYXRpb24sIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGF0IHNvZnR3YXJlIGlzIHB1Ymxpc2hlZCBhcyBvcGVuCitzb3VyY2Ugc29mdHdhcmUgb3Igbm90LgorCisKK0luc3RhbGxpbmcgdGhlIHRvb2xzCis9PT09PT09PT09PT09PT09PT09PQorCitUaGUgc3RhbmRhcmQgbGlicmFyeSBkb2VzIG5vdCBpbmNsdWRlIGJ1aWxkIHRvb2xzIHRoYXQgc3VwcG9ydCBtb2Rlcm4KK1B5dGhvbiBwYWNrYWdpbmcgc3RhbmRhcmRzLCBhcyB0aGUgY29yZSBkZXZlbG9wbWVudCB0ZWFtIGhhcyBmb3VuZCB0aGF0IGl0CitpcyBpbXBvcnRhbnQgdG8gaGF2ZSBzdGFuZGFyZCB0b29scyB0aGF0IHdvcmsgY29uc2lzdGVudGx5LCBldmVuIG9uIG9sZGVyCit2ZXJzaW9ucyBvZiBQeXRob24uCisKK1RoZSBjdXJyZW50bHkgcmVjb21tZW5kZWQgYnVpbGQgYW5kIGRpc3RyaWJ1dGlvbiB0b29scyBjYW4gYmUgaW5zdGFsbGVkCitieSBpbnZva2luZyB0aGUgYGBwaXBgYCBtb2R1bGUgYXQgdGhlIGNvbW1hbmQgbGluZTo6CisKKyAgICBweXRob24gLW0gcGlwIGluc3RhbGwgc2V0dXB0b29scyB3aGVlbCB0d2luZQorCisuLiBub3RlOjoKKworICAgRm9yIFBPU0lYIHVzZXJzIChpbmNsdWRpbmcgTWFjIE9TIFggYW5kIExpbnV4IHVzZXJzKSwgdGhlc2UgaW5zdHJ1Y3Rpb25zCisgICBhc3N1bWUgdGhlIHVzZSBvZiBhIDp0ZXJtOmB2aXJ0dWFsIGVudmlyb25tZW50YC4KKworICAgRm9yIFdpbmRvd3MgdXNlcnMsIHRoZXNlIGluc3RydWN0aW9ucyBhc3N1bWUgdGhhdCB0aGUgb3B0aW9uIHRvCisgICBhZGp1c3QgdGhlIHN5c3RlbSBQQVRIIGVudmlyb25tZW50IHZhcmlhYmxlIHdhcyBzZWxlY3RlZCB3aGVuIGluc3RhbGxpbmcKKyAgIFB5dGhvbi4KKworVGhlIFB5dGhvbiBQYWNrYWdpbmcgVXNlciBHdWlkZSBpbmNsdWRlcyBtb3JlIGRldGFpbHMgb24gdGhlIGBjdXJyZW50bHkKK3JlY29tbWVuZGVkIHRvb2xzYF8uCisKKy4uIF9jdXJyZW50bHkgcmVjb21tZW5kZWQgdG9vbHM6IGh0dHBzOi8vcGFja2FnaW5nLnB5dGhvbi5vcmcvZW4vbGF0ZXN0L2N1cnJlbnQuaHRtbCNwYWNrYWdpbmctdG9vbC1yZWNvbW1lbmRhdGlvbnMKKworUmVhZGluZyB0aGUgZ3VpZGUKKz09PT09PT09PT09PT09PT09CisKK1RoZSBQeXRob24gUGFja2FnaW5nIFVzZXIgR3VpZGUgY292ZXJzIHRoZSB2YXJpb3VzIGtleSBzdGVwcyBhbmQgZWxlbWVudHMKK2ludm9sdmVkIGluIGNyZWF0aW5nIGEgcHJvamVjdDoKKworKiBgUHJvamVjdCBzdHJ1Y3R1cmVgXworKiBgQnVpbGRpbmcgYW5kIHBhY2thZ2luZyB0aGUgcHJvamVjdGBfCisqIGBVcGxvYWRpbmcgdGhlIHByb2plY3QgdG8gdGhlIFB5dGhvbiBQYWNrYWdpbmcgSW5kZXhgXworCisuLiBfUHJvamVjdCBzdHJ1Y3R1cmU6IFwKKyAgIGh0dHBzOi8vcGFja2FnaW5nLnB5dGhvbi5vcmcvZW4vbGF0ZXN0L2Rpc3RyaWJ1dGluZy5odG1sI2NyZWF0aW5nLXlvdXItb3duLXByb2plY3QKKy4uIF9CdWlsZGluZyBhbmQgcGFja2FnaW5nIHRoZSBwcm9qZWN0OiBcCisgICBodHRwczovL3BhY2thZ2luZy5weXRob24ub3JnL2VuL2xhdGVzdC9kaXN0cmlidXRpbmcuaHRtbCNwYWNrYWdpbmcteW91ci1wcm9qZWN0CisuLiBfVXBsb2FkaW5nIHRoZSBwcm9qZWN0IHRvIHRoZSBQeXRob24gUGFja2FnaW5nIEluZGV4OiBcCisgICBodHRwczovL3BhY2thZ2luZy5weXRob24ub3JnL2VuL2xhdGVzdC9kaXN0cmlidXRpbmcuaHRtbCN1cGxvYWRpbmcteW91ci1wcm9qZWN0LXRvLXB5cGkKKworCitIb3cgZG8gSS4uLj8KKz09PT09PT09PT09PQorCitUaGVzZSBhcmUgcXVpY2sgYW5zd2VycyBvciBsaW5rcyBmb3Igc29tZSBjb21tb24gdGFza3MuCisKKy4uLiBjaG9vc2UgYSBuYW1lIGZvciBteSBwcm9qZWN0PworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgaXNuJ3QgYW4gZWFzeSB0b3BpYywgYnV0IGhlcmUgYXJlIGEgZmV3IHRpcHM6CisKKyogY2hlY2sgdGhlIFB5dGhvbiBQYWNrYWdpbmcgSW5kZXggdG8gc2VlIGlmIHRoZSBuYW1lIGlzIGFscmVhZHkgaW4gdXNlCisqIGNoZWNrIHBvcHVsYXIgaG9zdGluZyBzaXRlcyBsaWtlIEdpdEh1YiwgQml0QnVja2V0LCBldGMgdG8gc2VlIGlmIHRoZXJlCisgIGlzIGFscmVhZHkgYSBwcm9qZWN0IHdpdGggdGhhdCBuYW1lCisqIGNoZWNrIHdoYXQgY29tZXMgdXAgaW4gYSB3ZWIgc2VhcmNoIGZvciB0aGUgbmFtZSB5b3UncmUgY29uc2lkZXJpbmcKKyogYXZvaWQgcGFydGljdWxhcmx5IGNvbW1vbiB3b3JkcywgZXNwZWNpYWxseSBvbmVzIHdpdGggbXVsdGlwbGUgbWVhbmluZ3MsCisgIGFzIHRoZXkgY2FuIG1ha2UgaXQgZGlmZmljdWx0IGZvciB1c2VycyB0byBmaW5kIHlvdXIgc29mdHdhcmUgd2hlbgorICBzZWFyY2hpbmcgZm9yIGl0CisKKworLi4uIGNyZWF0ZSBhbmQgZGlzdHJpYnV0ZSBiaW5hcnkgZXh0ZW5zaW9ucz8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgaXMgYWN0dWFsbHkgcXVpdGUgYSBjb21wbGV4IHRvcGljLCB3aXRoIGEgdmFyaWV0eSBvZiBhbHRlcm5hdGl2ZXMKK2F2YWlsYWJsZSBkZXBlbmRpbmcgb24gZXhhY3RseSB3aGF0IHlvdSdyZSBhaW1pbmcgdG8gYWNoaWV2ZS4gU2VlIHRoZQorUHl0aG9uIFBhY2thZ2luZyBVc2VyIEd1aWRlIGZvciBtb3JlIGluZm9ybWF0aW9uIGFuZCByZWNvbW1lbmRhdGlvbnMuCisKKy4uIHNlZWFsc286OgorCisgICBgUHl0aG9uIFBhY2thZ2luZyBVc2VyIEd1aWRlOiBCaW5hcnkgRXh0ZW5zaW9ucworICAgPGh0dHBzOi8vcGFja2FnaW5nLnB5dGhvbi5vcmcvZW4vbGF0ZXN0L2V4dGVuc2lvbnMuaHRtbD5gX18KKworLi4gb3RoZXIgdG9waWNzOgorCisgICBPbmNlIHRoZSBEZXZlbG9wbWVudCAmIERlcGxveW1lbnQgcGFydCBvZiBQUFVHIGlzIGZsZXNoZWQgb3V0LCBzb21lIG9mCisgICB0aG9zZSBzZWN0aW9ucyBzaG91bGQgYmUgbGlua2VkIGZyb20gbmV3IHF1ZXN0aW9ucyBoZXJlIChtb3N0IG5vdGFibHksCisgICB3ZSBzaG91bGQgaGF2ZSBhIHF1ZXN0aW9uIGFib3V0IGF2b2lkaW5nIGRlcGVuZGluZyBvbiBQeVBJIHRoYXQgbGlua3MgdG8KKyAgIGh0dHBzOi8vcGFja2FnaW5nLnB5dGhvbi5vcmcvZW4vbGF0ZXN0L2RlcGxveW1lbnQuaHRtbCNweXBpLW1pcnJvcnMtYW5kLWNhY2hlcykKZGlmZiAtLWdpdCBhL0RvYy9kaXN0dXRpbHMvYXBpcmVmLnJzdCBiL0RvYy9kaXN0dXRpbHMvYXBpcmVmLnJzdAppbmRleCA5ODUzZjAyLi5mNjdmYzVhIDEwMDY0NAotLS0gYS9Eb2MvZGlzdHV0aWxzL2FwaXJlZi5yc3QKKysrIGIvRG9jL2Rpc3R1dGlscy9hcGlyZWYucnN0CkBAIC03OCw3ICs3OCw3IEBACiAgICB8ICAgICAgICAgICAgICAgICAgICB8IGJlIGJ1aWx0ICAgICAgICAgICAgICAgICAgICAgICB8IDpjbGFzczpgZGlzdHV0aWxzLmNvcmUuRXh0ZW5zaW9uYCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogICAgfCAqY2xhc3NpZmllcnMqICAgICAgfCBBIGxpc3Qgb2YgY2F0ZWdvcmllcyBmb3IgdGhlICAgfCBhIGxpc3Qgb2Ygc3RyaW5nczsgdmFsaWQgY2xhc3NpZmllcnMgYXJlIGxpc3RlZCBvbiBgUHlQSSAgICB8Ci0gICB8ICAgICAgICAgICAgICAgICAgICB8IHBhY2thZ2UgICAgICAgICAgICAgICAgICAgICAgICB8IDxodHRwOi8vcHlwaS5weXRob24ub3JnL3B5cGk/OmFjdGlvbj1saXN0X2NsYXNzaWZpZXJzPmBfLiAgIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgIHwgcGFja2FnZSAgICAgICAgICAgICAgICAgICAgICAgIHwgPGh0dHBzOi8vcHlwaS5weXRob24ub3JnL3B5cGk/OmFjdGlvbj1saXN0X2NsYXNzaWZpZXJzPmBfLiAgfAogICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAgICB8ICpkaXN0Y2xhc3MqICAgICAgICB8IHRoZSA6Y2xhc3M6YERpc3RyaWJ1dGlvbmAgICAgICB8IGEgc3ViY2xhc3Mgb2YgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICAgIHwgICAgICAgICAgICAgICAgICAgIHwgY2xhc3MgdG8gdXNlICAgICAgICAgICAgICAgICAgIHwgOmNsYXNzOmBkaXN0dXRpbHMuY29yZS5EaXN0cmlidXRpb25gICAgICAgICAgICAgICAgICAgICAgICAgfApAQCAtNTIxLDcgKzUyMSw3IEBACiAKICAgIC4uIG1ldGhvZDo6IENDb21waWxlci5saWJyYXJ5X29wdGlvbihsaWIpCiAKLSAgICAgIFJldHVybiB0aGUgY29tcGlsZXIgb3B0aW9uIHRvIGFkZCAqZGlyKiB0byB0aGUgbGlzdCBvZiBsaWJyYXJpZXMgbGlua2VkIGludG8gdGhlCisgICAgICBSZXR1cm4gdGhlIGNvbXBpbGVyIG9wdGlvbiB0byBhZGQgKmxpYiogdG8gdGhlIGxpc3Qgb2YgbGlicmFyaWVzIGxpbmtlZCBpbnRvIHRoZQogICAgICAgc2hhcmVkIGxpYnJhcnkgb3IgZXhlY3V0YWJsZS4KIAogCkBAIC04NTMsMTcgKzg1Myw2IEBACiBwb3J0IG9mIEdDQyAoc2FtZSBhcyBjeWd3aW4gaW4gbm8tY3lnd2luIG1vZGUpLgogCiAKLTptb2Q6YGRpc3R1dGlscy5lbXhjY29tcGlsZXJgIC0tLSBPUy8yIEVNWCBDb21waWxlcgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLS4uIG1vZHVsZTo6IGRpc3R1dGlscy5lbXhjY29tcGlsZXIKLSAgIDpzeW5vcHNpczogT1MvMiBFTVggQ29tcGlsZXIgc3VwcG9ydAotCi0KLVRoaXMgbW9kdWxlIHByb3ZpZGVzIHRoZSBFTVhDQ29tcGlsZXIgY2xhc3MsIGEgc3ViY2xhc3Mgb2YKLTpjbGFzczpgVW5peENDb21waWxlcmAgdGhhdCBoYW5kbGVzIHRoZSBFTVggcG9ydCBvZiB0aGUgR05VIEMgY29tcGlsZXIgdG8gT1MvMi4KLQotCiA6bW9kOmBkaXN0dXRpbHMuYXJjaGl2ZV91dGlsYCAtLS0gIEFyY2hpdmluZyB1dGlsaXRpZXMKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCkBAIC05MzEsNyArOTIwLDcgQEAKIAogICAgV2FsayB0d28gZmlsZW5hbWUgbGlzdHMgaW4gcGFyYWxsZWwsIHRlc3RpbmcgaWYgZWFjaCBzb3VyY2UgaXMgbmV3ZXIgdGhhbiBpdHMKICAgIGNvcnJlc3BvbmRpbmcgdGFyZ2V0LiAgUmV0dXJuIGEgcGFpciBvZiBsaXN0cyAoKnNvdXJjZXMqLCAqdGFyZ2V0cyopIHdoZXJlCi0gICBzb3VyY2UgaXMgbmV3ZXIgdGhhbiB0YXJnZXQsIGFjY29yZGluZyB0byB0aGUgc2VtYW50aWNzIG9mIDpmdW5jOmBuZXdlcmAKKyAgIHNvdXJjZSBpcyBuZXdlciB0aGFuIHRhcmdldCwgYWNjb3JkaW5nIHRvIHRoZSBzZW1hbnRpY3Mgb2YgOmZ1bmM6YG5ld2VyYC4KIAogICAgLi4gJSAlIGVxdWl2YWxlbnQgdG8gYSBsaXN0Y29tcC4uLgogCkBAIC05NzUsNyArOTY0LDcgQEAKIC4uIGZ1bmN0aW9uOjogY3JlYXRlX3RyZWUoYmFzZV9kaXIsIGZpbGVzWywgbW9kZT0wbzc3NywgdmVyYm9zZT0wLCBkcnlfcnVuPTBdKQogCiAgICBDcmVhdGUgYWxsIHRoZSBlbXB0eSBkaXJlY3RvcmllcyB1bmRlciAqYmFzZV9kaXIqIG5lZWRlZCB0byBwdXQgKmZpbGVzKiB0aGVyZS4KLSAgICpiYXNlX2RpciogaXMganVzdCB0aGUgYSBuYW1lIG9mIGEgZGlyZWN0b3J5IHdoaWNoIGRvZXNuJ3QgbmVjZXNzYXJpbHkgZXhpc3QKKyAgICpiYXNlX2RpciogaXMganVzdCB0aGUgbmFtZSBvZiBhIGRpcmVjdG9yeSB3aGljaCBkb2Vzbid0IG5lY2Vzc2FyaWx5IGV4aXN0CiAgICB5ZXQ7ICpmaWxlcyogaXMgYSBsaXN0IG9mIGZpbGVuYW1lcyB0byBiZSBpbnRlcnByZXRlZCByZWxhdGl2ZSB0byAqYmFzZV9kaXIqLgogICAgKmJhc2VfZGlyKiArIHRoZSBkaXJlY3RvcnkgcG9ydGlvbiBvZiBldmVyeSBmaWxlIGluICpmaWxlcyogd2lsbCBiZSBjcmVhdGVkIGlmCiAgICBpdCBkb2Vzbid0IGFscmVhZHkgZXhpc3QuICAqbW9kZSosICp2ZXJib3NlKiBhbmQgKmRyeV9ydW4qIGZsYWdzICBhcmUgYXMgZm9yCkBAIC0xMDA0LDcgKzk5Myw3IEBACiAKICAgIEZpbGVzIGluICpzcmMqIHRoYXQgYmVnaW4gd2l0aCA6ZmlsZTpgLm5mc2AgYXJlIHNraXBwZWQgKG1vcmUgaW5mb3JtYXRpb24gb24KICAgIHRoZXNlIGZpbGVzIGlzIGF2YWlsYWJsZSBpbiBhbnN3ZXIgRDIgb2YgdGhlIGBORlMgRkFRIHBhZ2UKLSAgIDxodHRwOi8vbmZzLnNvdXJjZWZvcmdlLm5ldC8jc2VjdGlvbl9kPmBfLgorICAgPGh0dHA6Ly9uZnMuc291cmNlZm9yZ2UubmV0LyNzZWN0aW9uX2Q+YF8pLgogCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMy4xCiAgICAgICBORlMgZmlsZXMgYXJlIGlnbm9yZWQuCkBAIC0xMTEwLDEzICsxMDk5LDEzIEBACiAgICBkdXJpbmcgdGhlIGJ1aWxkIG9mIFB5dGhvbiksIG5vdCB0aGUgT1MgdmVyc2lvbiBvZiB0aGUgY3VycmVudCBzeXN0ZW0uCiAKICAgIEZvciB1bml2ZXJzYWwgYmluYXJ5IGJ1aWxkcyBvbiBNYWMgT1MgWCB0aGUgYXJjaGl0ZWN0dXJlIHZhbHVlIHJlZmxlY3RzCi0gICB0aGUgdW5pdmVyYWwgYmluYXJ5IHN0YXR1cyBpbnN0ZWFkIG9mIHRoZSBhcmNoaXRlY3R1cmUgb2YgdGhlIGN1cnJlbnQKKyAgIHRoZSB1bml2ZXJzYWwgYmluYXJ5IHN0YXR1cyBpbnN0ZWFkIG9mIHRoZSBhcmNoaXRlY3R1cmUgb2YgdGhlIGN1cnJlbnQKICAgIHByb2Nlc3Nvci4gRm9yIDMyLWJpdCB1bml2ZXJzYWwgYmluYXJpZXMgdGhlIGFyY2hpdGVjdHVyZSBpcyBgYGZhdGBgLAogICAgZm9yIDY0LWJpdCB1bml2ZXJzYWwgYmluYXJpZXMgdGhlIGFyY2hpdGVjdHVyZSBpcyBgYGZhdDY0YGAsIGFuZAogICAgZm9yIDQtd2F5IHVuaXZlcnNhbCBiaW5hcmllcyB0aGUgYXJjaGl0ZWN0dXJlIGlzIGBgdW5pdmVyc2FsYGAuIFN0YXJ0aW5nCiAgICBmcm9tIFB5dGhvbiAyLjcgYW5kIFB5dGhvbiAzLjIgdGhlIGFyY2hpdGVjdHVyZSBgYGZhdDNgYCBpcyB1c2VkIGZvcgogICAgYSAzLXdheSB1bml2ZXJzYWwgYnVpbGQgKHBwYywgaTM4NiwgeDg2XzY0KSBhbmQgYGBpbnRlbGBgIGlzIHVzZWQgZm9yCi0gICBhIHVuaXZlcmFsIGJ1aWxkIHdpdGggdGhlIGkzODYgYW5kIHg4Nl82NCBhcmNoaXRlY3R1cmVzCisgICBhIHVuaXZlcnNhbCBidWlsZCB3aXRoIHRoZSBpMzg2IGFuZCB4ODZfNjQgYXJjaGl0ZWN0dXJlcwogCiAgICBFeGFtcGxlcyBvZiByZXR1cm5lZCB2YWx1ZXMgb24gTWFjIE9TIFg6CiAKZGlmZiAtLWdpdCBhL0RvYy9kaXN0dXRpbHMvYnVpbHRkaXN0LnJzdCBiL0RvYy9kaXN0dXRpbHMvYnVpbHRkaXN0LnJzdAppbmRleCBkMWFiN2RiLi5jNTgyN2I2IDEwMDY0NAotLS0gYS9Eb2MvZGlzdHV0aWxzL2J1aWx0ZGlzdC5yc3QKKysrIGIvRG9jL2Rpc3R1dGlscy9idWlsdGRpc3QucnN0CkBAIC0xODYsMjEgKzE4NiwyMSBAQAogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogfCBSUE0gOmZpbGU6YC5zcGVjYCBmaWxlIG9wdGlvbiBvciBzZWN0aW9uIHwgRGlzdHV0aWxzIHNldHVwIHNjcmlwdCBvcHRpb24gICAgICAgICAgICAgICAgfAogKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KwotfCBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgOm9wdGlvbjpgbmFtZWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYGBuYW1lYGAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCBTdW1tYXJ5IChpbiBwcmVhbWJsZSkgICAgICAgICAgICAgICAgICAgIHwgOm9wdGlvbjpgZGVzY3JpcHRpb25gICAgICAgICAgICAgICAgICAgICAgICAgfAorfCBTdW1tYXJ5IChpbiBwcmVhbWJsZSkgICAgICAgICAgICAgICAgICAgIHwgYGBkZXNjcmlwdGlvbmBgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCBWZXJzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgOm9wdGlvbjpgdmVyc2lvbmAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCBWZXJzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYGB2ZXJzaW9uYGAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCBWZW5kb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgOm9wdGlvbjpgYXV0aG9yYCBhbmQgOm9wdGlvbjpgYXV0aG9yX2VtYWlsYCwgfAotfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgb3IgIC0tLSAmIDpvcHRpb246YG1haW50YWluZXJgIGFuZCAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgOm9wdGlvbjpgbWFpbnRhaW5lcl9lbWFpbGAgICAgICAgICAgICAgICAgICAgfAorfCBWZW5kb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYGBhdXRob3JgYCBhbmQgYGBhdXRob3JfZW1haWxgYCwgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgb3IgIC0tLSAmIGBgbWFpbnRhaW5lcmBgIGFuZCAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYGBtYWludGFpbmVyX2VtYWlsYGAgICAgICAgICAgICAgICAgICAgICAgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCBDb3B5cmlnaHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgOm9wdGlvbjpgbGljZW5zZWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCBDb3B5cmlnaHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYGBsaWNlbnNlYGAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCBVcmwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgOm9wdGlvbjpgdXJsYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCBVcmwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYGB1cmxgYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCAlZGVzY3JpcHRpb24gKHNlY3Rpb24pICAgICAgICAgICAgICAgICAgIHwgOm9wdGlvbjpgbG9uZ19kZXNjcmlwdGlvbmAgICAgICAgICAgICAgICAgICAgfAorfCAlZGVzY3JpcHRpb24gKHNlY3Rpb24pICAgICAgICAgICAgICAgICAgIHwgYGBsb25nX2Rlc2NyaXB0aW9uYGAgICAgICAgICAgICAgICAgICAgICAgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogCiBBZGRpdGlvbmFsbHksIHRoZXJlIGFyZSBtYW55IG9wdGlvbnMgaW4gOmZpbGU6YC5zcGVjYCBmaWxlcyB0aGF0IGRvbid0IGhhdmUKQEAgLTIxMSwyNyArMjExLDI3IEBACiB8IFJQTSA6ZmlsZTpgLnNwZWNgIGZpbGUgb3B0aW9uIHwgOmNvbW1hbmQ6YGJkaXN0X3JwbWAgb3B0aW9uIHwgZGVmYXVsdCB2YWx1ZSAgICAgICAgICAgfAogfCBvciBzZWN0aW9uICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwKICs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT0rCi18IFJlbGVhc2UgICAgICAgICAgICAgICAgICAgICAgIHwgOm9wdGlvbjpgcmVsZWFzZWAgICAgICAgICAgIHwgIjEiICAgICAgICAgICAgICAgICAgICAgfAorfCBSZWxlYXNlICAgICAgICAgICAgICAgICAgICAgICB8IGBgcmVsZWFzZWBgICAgICAgICAgICAgICAgICB8ICIxIiAgICAgICAgICAgICAgICAgICAgIHwKICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi18IEdyb3VwICAgICAgICAgICAgICAgICAgICAgICAgIHwgOm9wdGlvbjpgZ3JvdXBgICAgICAgICAgICAgIHwgIkRldmVsb3BtZW50L0xpYnJhcmllcyIgfAorfCBHcm91cCAgICAgICAgICAgICAgICAgICAgICAgICB8IGBgZ3JvdXBgYCAgICAgICAgICAgICAgICAgICB8ICJEZXZlbG9wbWVudC9MaWJyYXJpZXMiIHwKICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi18IFZlbmRvciAgICAgICAgICAgICAgICAgICAgICAgIHwgOm9wdGlvbjpgdmVuZG9yYCAgICAgICAgICAgIHwgKHNlZSBhYm92ZSkgICAgICAgICAgICAgfAorfCBWZW5kb3IgICAgICAgICAgICAgICAgICAgICAgICB8IGBgdmVuZG9yYGAgICAgICAgICAgICAgICAgICB8IChzZWUgYWJvdmUpICAgICAgICAgICAgIHwKICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi18IFBhY2thZ2VyICAgICAgICAgICAgICAgICAgICAgIHwgOm9wdGlvbjpgcGFja2FnZXJgICAgICAgICAgIHwgKG5vbmUpICAgICAgICAgICAgICAgICAgfAorfCBQYWNrYWdlciAgICAgICAgICAgICAgICAgICAgICB8IGBgcGFja2FnZXJgYCAgICAgICAgICAgICAgICB8IChub25lKSAgICAgICAgICAgICAgICAgIHwKICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi18IFByb3ZpZGVzICAgICAgICAgICAgICAgICAgICAgIHwgOm9wdGlvbjpgcHJvdmlkZXNgICAgICAgICAgIHwgKG5vbmUpICAgICAgICAgICAgICAgICAgfAorfCBQcm92aWRlcyAgICAgICAgICAgICAgICAgICAgICB8IGBgcHJvdmlkZXNgYCAgICAgICAgICAgICAgICB8IChub25lKSAgICAgICAgICAgICAgICAgIHwKICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi18IFJlcXVpcmVzICAgICAgICAgICAgICAgICAgICAgIHwgOm9wdGlvbjpgcmVxdWlyZXNgICAgICAgICAgIHwgKG5vbmUpICAgICAgICAgICAgICAgICAgfAorfCBSZXF1aXJlcyAgICAgICAgICAgICAgICAgICAgICB8IGBgcmVxdWlyZXNgYCAgICAgICAgICAgICAgICB8IChub25lKSAgICAgICAgICAgICAgICAgIHwKICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi18IENvbmZsaWN0cyAgICAgICAgICAgICAgICAgICAgIHwgOm9wdGlvbjpgY29uZmxpY3RzYCAgICAgICAgIHwgKG5vbmUpICAgICAgICAgICAgICAgICAgfAorfCBDb25mbGljdHMgICAgICAgICAgICAgICAgICAgICB8IGBgY29uZmxpY3RzYGAgICAgICAgICAgICAgICB8IChub25lKSAgICAgICAgICAgICAgICAgIHwKICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi18IE9ic29sZXRlcyAgICAgICAgICAgICAgICAgICAgIHwgOm9wdGlvbjpgb2Jzb2xldGVzYCAgICAgICAgIHwgKG5vbmUpICAgICAgICAgICAgICAgICAgfAorfCBPYnNvbGV0ZXMgICAgICAgICAgICAgICAgICAgICB8IGBgb2Jzb2xldGVzYGAgICAgICAgICAgICAgICB8IChub25lKSAgICAgICAgICAgICAgICAgIHwKICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi18IERpc3RyaWJ1dGlvbiAgICAgICAgICAgICAgICAgIHwgOm9wdGlvbjpgZGlzdHJpYnV0aW9uX25hbWVgIHwgKG5vbmUpICAgICAgICAgICAgICAgICAgfAorfCBEaXN0cmlidXRpb24gICAgICAgICAgICAgICAgICB8IGBgZGlzdHJpYnV0aW9uX25hbWVgYCAgICAgICB8IChub25lKSAgICAgICAgICAgICAgICAgIHwKICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi18IEJ1aWxkUmVxdWlyZXMgICAgICAgICAgICAgICAgIHwgOm9wdGlvbjpgYnVpbGRfcmVxdWlyZXNgICAgIHwgKG5vbmUpICAgICAgICAgICAgICAgICAgfAorfCBCdWlsZFJlcXVpcmVzICAgICAgICAgICAgICAgICB8IGBgYnVpbGRfcmVxdWlyZXNgYCAgICAgICAgICB8IChub25lKSAgICAgICAgICAgICAgICAgIHwKICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi18IEljb24gICAgICAgICAgICAgICAgICAgICAgICAgIHwgOm9wdGlvbjpgaWNvbmAgICAgICAgICAgICAgIHwgKG5vbmUpICAgICAgICAgICAgICAgICAgfAorfCBJY29uICAgICAgICAgICAgICAgICAgICAgICAgICB8IGBgaWNvbmBgICAgICAgICAgICAgICAgICAgICB8IChub25lKSAgICAgICAgICAgICAgICAgIHwKICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAKIE9idmlvdXNseSwgc3VwcGx5aW5nIGV2ZW4gYSBmZXcgb2YgdGhlc2Ugb3B0aW9ucyBvbiB0aGUgY29tbWFuZC1saW5lIHdvdWxkIGJlCkBAIC0yMzksNyArMjM5LDggQEAKIGNvbmZpZ3VyYXRpb24gZmlsZSwgOmZpbGU6YHNldHVwLmNmZ2BcIC0tLXNlZSBzZWN0aW9uIDpyZWY6YHNldHVwLWNvbmZpZ2AuICBJZgogeW91IGRpc3RyaWJ1dGUgb3IgcGFja2FnZSBtYW55IFB5dGhvbiBtb2R1bGUgZGlzdHJpYnV0aW9ucywgeW91IG1pZ2h0IHdhbnQgdG8KIHB1dCBvcHRpb25zIHRoYXQgYXBwbHkgdG8gYWxsIG9mIHRoZW0gaW4geW91ciBwZXJzb25hbCBEaXN0dXRpbHMgY29uZmlndXJhdGlvbgotZmlsZSAoOmZpbGU6YH4vLnB5ZGlzdHV0aWxzLmNmZ2ApLgorZmlsZSAoOmZpbGU6YH4vLnB5ZGlzdHV0aWxzLmNmZ2ApLiAgSWYgeW91IHdhbnQgdG8gdGVtcG9yYXJpbHkgZGlzYWJsZQordGhpcyBmaWxlLCB5b3UgY2FuIHBhc3MgdGhlIDpvcHRpb246YC0tbm8tdXNlci1jZmdgIG9wdGlvbiB0byA6ZmlsZTpgc2V0dXAucHlgLgogCiBUaGVyZSBhcmUgdGhyZWUgc3RlcHMgdG8gYnVpbGRpbmcgYSBiaW5hcnkgUlBNIHBhY2thZ2UsIGFsbCBvZiB3aGljaCBhcmUKIGhhbmRsZWQgYXV0b21hdGljYWxseSBieSB0aGUgRGlzdHV0aWxzOgpAQCAtMzU0LDcgKzM1NSw3IEBACiB3b3VsZCBjcmVhdGUgYSA2NGJpdCBpbnN0YWxsYXRpb24gZXhlY3V0YWJsZSBvbiB5b3VyIDMyYml0IHZlcnNpb24gb2YgV2luZG93cy4KIAogVG8gY3Jvc3MtY29tcGlsZSwgeW91IG11c3QgZG93bmxvYWQgdGhlIFB5dGhvbiBzb3VyY2UgY29kZSBhbmQgY3Jvc3MtY29tcGlsZQotUHl0aG9uIGl0c2VsZiBmb3IgdGhlIHBsYXRmb3JtIHlvdSBhcmUgdGFyZ2V0dGluZyAtIGl0IGlzIG5vdCBwb3NzaWJsZSBmcm9tIGEKK1B5dGhvbiBpdHNlbGYgZm9yIHRoZSBwbGF0Zm9ybSB5b3UgYXJlIHRhcmdldGluZyAtIGl0IGlzIG5vdCBwb3NzaWJsZSBmcm9tIGEKIGJpbmFyeSBpbnN0YWxsYXRpb24gb2YgUHl0aG9uIChhcyB0aGUgLmxpYiBldGMgZmlsZSBmb3Igb3RoZXIgcGxhdGZvcm1zIGFyZQogbm90IGluY2x1ZGVkLikgIEluIHByYWN0aWNlLCB0aGlzIG1lYW5zIHRoZSB1c2VyIG9mIGEgMzIgYml0IG9wZXJhdGluZwogc3lzdGVtIHdpbGwgbmVlZCB0byB1c2UgVmlzdWFsIFN0dWRpbyAyMDA4IHRvIG9wZW4gdGhlCmRpZmYgLS1naXQgYS9Eb2MvZGlzdHV0aWxzL2NvbmZpZ2ZpbGUucnN0IGIvRG9jL2Rpc3R1dGlscy9jb25maWdmaWxlLnJzdAppbmRleCBhYzc5NjcxLi44ZmFmZmU2IDEwMDY0NAotLS0gYS9Eb2MvZGlzdHV0aWxzL2NvbmZpZ2ZpbGUucnN0CisrKyBiL0RvYy9kaXN0dXRpbHMvY29uZmlnZmlsZS5yc3QKQEAgLTY3LDcgKzY3LDcgQEAKICAgIFsuLi5dCiAKIE5vdGUgdGhhdCBhbiBvcHRpb24gc3BlbGxlZCA6b3B0aW9uOmAtLWZvby1iYXJgIG9uIHRoZSBjb21tYW5kLWxpbmUgIGlzIHNwZWxsZWQKLTpvcHRpb246YGZvb19iYXJgIGluIGNvbmZpZ3VyYXRpb24gZmlsZXMuCitgYGZvb19iYXJgYCBpbiBjb25maWd1cmF0aW9uIGZpbGVzLgogCiAuLiBfZGlzdHV0aWxzLWJ1aWxkLWV4dC1pbnBsYWNlOgogCkBAIC0xMTQsNyArMTE0LDcgQEAKICAgICAgICAgICAgICAgIGRvYy8KICAgICAgICAgICAgICAgIGV4YW1wbGVzLwogCi1Ob3RlIHRoYXQgdGhlIDpvcHRpb246YGRvY19maWxlc2Agb3B0aW9uIGlzIHNpbXBseSBhIHdoaXRlc3BhY2Utc2VwYXJhdGVkIHN0cmluZworTm90ZSB0aGF0IHRoZSBgYGRvY19maWxlc2BgIG9wdGlvbiBpcyBzaW1wbHkgYSB3aGl0ZXNwYWNlLXNlcGFyYXRlZCBzdHJpbmcKIHNwbGl0IGFjcm9zcyBtdWx0aXBsZSBsaW5lcyBmb3IgcmVhZGFiaWxpdHkuCiAKIApkaWZmIC0tZ2l0IGEvRG9jL2Rpc3R1dGlscy9leGFtcGxlcy5yc3QgYi9Eb2MvZGlzdHV0aWxzL2V4YW1wbGVzLnJzdAppbmRleCA1ZWI2NTRhLi5hZjkxMjVhIDEwMDY0NAotLS0gYS9Eb2MvZGlzdHV0aWxzL2V4YW1wbGVzLnJzdAorKysgYi9Eb2MvZGlzdHV0aWxzL2V4YW1wbGVzLnJzdApAQCAtMTEsNyArMTEsNyBAQAogCiAuLiBzZWVhbHNvOjoKIAotICAgYERpc3R1dGlscyBDb29rYm9vayA8aHR0cDovL3dpa2kucHl0aG9uLm9yZy9tb2luL0Rpc3R1dGlscy9Db29rYm9vaz5gXworICAgYERpc3R1dGlscyBDb29rYm9vayA8aHR0cHM6Ly93aWtpLnB5dGhvbi5vcmcvbW9pbi9EaXN0dXRpbHMvQ29va2Jvb2s+YF8KICAgICAgIENvbGxlY3Rpb24gb2YgcmVjaXBlcyBzaG93aW5nIGhvdyB0byBhY2hpZXZlIG1vcmUgY29udHJvbCBvdmVyIGRpc3R1dGlscy4KIAogCkBAIC0yMiw3ICsyMiw3IEBACiAKIElmIHlvdSdyZSBqdXN0IGRpc3RyaWJ1dGluZyBhIGNvdXBsZSBvZiBtb2R1bGVzLCBlc3BlY2lhbGx5IGlmIHRoZXkgZG9uJ3QgbGl2ZQogaW4gYSBwYXJ0aWN1bGFyIHBhY2thZ2UsIHlvdSBjYW4gc3BlY2lmeSB0aGVtIGluZGl2aWR1YWxseSB1c2luZyB0aGUKLTpvcHRpb246YHB5X21vZHVsZXNgIG9wdGlvbiBpbiB0aGUgc2V0dXAgc2NyaXB0LgorYGBweV9tb2R1bGVzYGAgb3B0aW9uIGluIHRoZSBzZXR1cCBzY3JpcHQuCiAKIEluIHRoZSBzaW1wbGVzdCBjYXNlLCB5b3UnbGwgaGF2ZSB0d28gZmlsZXMgdG8gd29ycnkgYWJvdXQ6IGEgc2V0dXAgc2NyaXB0IGFuZAogdGhlIHNpbmdsZSBtb2R1bGUgeW91J3JlIGRpc3RyaWJ1dGluZywgOmZpbGU6YGZvby5weWAgaW4gdGhpcyBleGFtcGxlOjoKQEAgLTQxLDEyICs0MSwxMiBAQAogICAgICAgICAgKQogCiBOb3RlIHRoYXQgdGhlIG5hbWUgb2YgdGhlIGRpc3RyaWJ1dGlvbiBpcyBzcGVjaWZpZWQgaW5kZXBlbmRlbnRseSB3aXRoIHRoZQotOm9wdGlvbjpgbmFtZWAgb3B0aW9uLCBhbmQgdGhlcmUncyBubyBydWxlIHRoYXQgc2F5cyBpdCBoYXMgdG8gYmUgdGhlIHNhbWUgYXMKK2BgbmFtZWBgIG9wdGlvbiwgYW5kIHRoZXJlJ3Mgbm8gcnVsZSB0aGF0IHNheXMgaXQgaGFzIHRvIGJlIHRoZSBzYW1lIGFzCiB0aGUgbmFtZSBvZiB0aGUgc29sZSBtb2R1bGUgaW4gdGhlIGRpc3RyaWJ1dGlvbiAoYWx0aG91Z2ggdGhhdCdzIHByb2JhYmx5IGEgZ29vZAogY29udmVudGlvbiB0byBmb2xsb3cpLiAgSG93ZXZlciwgdGhlIGRpc3RyaWJ1dGlvbiBuYW1lIGlzIHVzZWQgdG8gZ2VuZXJhdGUKIGZpbGVuYW1lcywgc28geW91IHNob3VsZCBzdGljayB0byBsZXR0ZXJzLCBkaWdpdHMsIHVuZGVyc2NvcmVzLCBhbmQgaHlwaGVucy4KIAotU2luY2UgOm9wdGlvbjpgcHlfbW9kdWxlc2AgaXMgYSBsaXN0LCB5b3UgY2FuIG9mIGNvdXJzZSBzcGVjaWZ5IG11bHRpcGxlCitTaW5jZSBgYHB5X21vZHVsZXNgYCBpcyBhIGxpc3QsIHlvdSBjYW4gb2YgY291cnNlIHNwZWNpZnkgbXVsdGlwbGUKIG1vZHVsZXMsIGVnLiBpZiB5b3UncmUgZGlzdHJpYnV0aW5nIG1vZHVsZXMgOm1vZDpgZm9vYCBhbmQgOm1vZDpgYmFyYCwgeW91cgogc2V0dXAgbWlnaHQgbG9vayBsaWtlIHRoaXM6OgogCkBAIC0xMzAsNyArMTMwLDcgQEAKICAgICAgICAgICkKIAogSWYgeW91IHdhbnQgdG8gcHV0IG1vZHVsZXMgaW4gZGlyZWN0b3JpZXMgbm90IG5hbWVkIGZvciB0aGVpciBwYWNrYWdlLCB0aGVuIHlvdQotbmVlZCB0byB1c2UgdGhlIDpvcHRpb246YHBhY2thZ2VfZGlyYCBvcHRpb24gYWdhaW4uICBGb3IgZXhhbXBsZSwgaWYgdGhlCituZWVkIHRvIHVzZSB0aGUgYGBwYWNrYWdlX2RpcmBgIG9wdGlvbiBhZ2Fpbi4gIEZvciBleGFtcGxlLCBpZiB0aGUKIDpmaWxlOmBzcmNgIGRpcmVjdG9yeSBob2xkcyBtb2R1bGVzIGluIHRoZSA6bW9kOmBmb29iYXJgIHBhY2thZ2U6OgogCiAgICA8cm9vdD4vCkBAIC0xNjksOCArMTY5LDggQEAKIAogKFRoZSBlbXB0eSBzdHJpbmcgYWxzbyBzdGFuZHMgZm9yIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4pCiAKLUlmIHlvdSBoYXZlIHN1Yi1wYWNrYWdlcywgdGhleSBtdXN0IGJlIGV4cGxpY2l0bHkgbGlzdGVkIGluIDpvcHRpb246YHBhY2thZ2VzYCwKLWJ1dCBhbnkgZW50cmllcyBpbiA6b3B0aW9uOmBwYWNrYWdlX2RpcmAgYXV0b21hdGljYWxseSBleHRlbmQgdG8gc3ViLXBhY2thZ2VzLgorSWYgeW91IGhhdmUgc3ViLXBhY2thZ2VzLCB0aGV5IG11c3QgYmUgZXhwbGljaXRseSBsaXN0ZWQgaW4gYGBwYWNrYWdlc2BgLAorYnV0IGFueSBlbnRyaWVzIGluIGBgcGFja2FnZV9kaXJgYCBhdXRvbWF0aWNhbGx5IGV4dGVuZCB0byBzdWItcGFja2FnZXMuCiAoSW4gb3RoZXIgd29yZHMsIHRoZSBEaXN0dXRpbHMgZG9lcyAqbm90KiBzY2FuIHlvdXIgc291cmNlIHRyZWUsIHRyeWluZyB0bwogZmlndXJlIG91dCB3aGljaCBkaXJlY3RvcmllcyBjb3JyZXNwb25kIHRvIFB5dGhvbiBwYWNrYWdlcyBieSBsb29raW5nIGZvcgogOmZpbGU6YF9faW5pdF9fLnB5YCBmaWxlcy4pICBUaHVzLCBpZiB0aGUgZGVmYXVsdCBsYXlvdXQgZ3Jvd3MgYSBzdWItcGFja2FnZTo6CkBAIC0xOTMsMTcgKzE5MywxNCBAQAogICAgICAgICAgcGFja2FnZXM9Wydmb29iYXInLCAnZm9vYmFyLnN1YmZvbyddLAogICAgICAgICAgKQogCi0oQWdhaW4sIHRoZSBlbXB0eSBzdHJpbmcgaW4gOm9wdGlvbjpgcGFja2FnZV9kaXJgIHN0YW5kcyBmb3IgdGhlIGN1cnJlbnQKLWRpcmVjdG9yeS4pCi0KIAogLi4gX3NpbmdsZS1leHQ6CiAKIFNpbmdsZSBleHRlbnNpb24gbW9kdWxlCiA9PT09PT09PT09PT09PT09PT09PT09PQogCi1FeHRlbnNpb24gbW9kdWxlcyBhcmUgc3BlY2lmaWVkIHVzaW5nIHRoZSA6b3B0aW9uOmBleHRfbW9kdWxlc2Agb3B0aW9uLgotOm9wdGlvbjpgcGFja2FnZV9kaXJgIGhhcyBubyBlZmZlY3Qgb24gd2hlcmUgZXh0ZW5zaW9uIHNvdXJjZSBmaWxlcyBhcmUgZm91bmQ7CitFeHRlbnNpb24gbW9kdWxlcyBhcmUgc3BlY2lmaWVkIHVzaW5nIHRoZSBgYGV4dF9tb2R1bGVzYGAgb3B0aW9uLgorYGBwYWNrYWdlX2RpcmBgIGhhcyBubyBlZmZlY3Qgb24gd2hlcmUgZXh0ZW5zaW9uIHNvdXJjZSBmaWxlcyBhcmUgZm91bmQ7CiBpdCBvbmx5IGFmZmVjdHMgdGhlIHNvdXJjZSBmb3IgcHVyZSBQeXRob24gbW9kdWxlcy4gIFRoZSBzaW1wbGVzdCAgY2FzZSwgYQogc2luZ2xlIGV4dGVuc2lvbiBtb2R1bGUgaW4gYSBzaW5nbGUgQyBzb3VyY2UgZmlsZSwgaXM6OgogCkBAIC0yNjcsNyArMjY0LDcgQEAKIAogICAgIGRlc2MgPSAiIiJcCiAgICAgTXkgZGVzY3JpcHRpb24KLSAgICA9PT09PT09PT09PT09CisgICAgPT09PT09PT09PT09PT0KIAogICAgIFRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBgYGZvb2JhcmBgIHBhY2thZ2UuCiAgICAgIiIiCkBAIC0yODksMjAgKzI4NiwyMCBAQAogCiBUaGUgOmZ1bmM6YGRpc3R1dGlscy5jb3JlLnNldHVwYCBmdW5jdGlvbiBwcm92aWRlcyBhIGNvbW1hbmQtbGluZSBpbnRlcmZhY2UKIHRoYXQgYWxsb3dzIHlvdSB0byBxdWVyeSB0aGUgbWV0YWRhdGEgZmllbGRzIG9mIGEgcHJvamVjdCB0aHJvdWdoIHRoZQotYHNldHVwLnB5YCBzY3JpcHQgb2YgYSBnaXZlbiBwcm9qZWN0OjoKK2Bgc2V0dXAucHlgYCBzY3JpcHQgb2YgYSBnaXZlbiBwcm9qZWN0OjoKIAogICAgICQgcHl0aG9uIHNldHVwLnB5IC0tbmFtZQogICAgIGRpc3RyaWJ1dGUKIAotVGhpcyBjYWxsIHJlYWRzIHRoZSBgbmFtZWAgbWV0YWRhdGEgYnkgcnVubmluZyB0aGUKK1RoaXMgY2FsbCByZWFkcyB0aGUgYGBuYW1lYGAgbWV0YWRhdGEgYnkgcnVubmluZyB0aGUKIDpmdW5jOmBkaXN0dXRpbHMuY29yZS5zZXR1cGAgIGZ1bmN0aW9uLiBBbHRob3VnaCwgd2hlbiBhIHNvdXJjZSBvciBiaW5hcnkKIGRpc3RyaWJ1dGlvbiBpcyBjcmVhdGVkIHdpdGggRGlzdHV0aWxzLCB0aGUgbWV0YWRhdGEgZmllbGRzIGFyZSB3cml0dGVuCiBpbiBhIHN0YXRpYyBmaWxlIGNhbGxlZCA6ZmlsZTpgUEtHLUlORk9gLiBXaGVuIGEgRGlzdHV0aWxzLWJhc2VkIHByb2plY3QgaXMKIGluc3RhbGxlZCBpbiBQeXRob24sIHRoZSA6ZmlsZTpgUEtHLUlORk9gIGZpbGUgaXMgY29waWVkIGFsb25nc2lkZSB0aGUgbW9kdWxlcwogYW5kIHBhY2thZ2VzIG9mIHRoZSBkaXN0cmlidXRpb24gdW5kZXIgOmZpbGU6YE5BTUUtVkVSU0lPTi1weVguWC5lZ2ctaW5mb2AsCi13aGVyZSBgTkFNRWAgaXMgdGhlIG5hbWUgb2YgdGhlIHByb2plY3QsIGBWRVJTSU9OYCBpdHMgdmVyc2lvbiBhcyBkZWZpbmVkCi1pbiB0aGUgTWV0YWRhdGEsIGFuZCBgcHlYLlhgIHRoZSBtYWpvciBhbmQgbWlub3IgdmVyc2lvbiBvZiBQeXRob24gbGlrZQotYDIuN2Agb3IgYDMuMmAuCit3aGVyZSBgYE5BTUVgYCBpcyB0aGUgbmFtZSBvZiB0aGUgcHJvamVjdCwgYGBWRVJTSU9OYGAgaXRzIHZlcnNpb24gYXMgZGVmaW5lZAoraW4gdGhlIE1ldGFkYXRhLCBhbmQgYGBweVguWGBgIHRoZSBtYWpvciBhbmQgbWlub3IgdmVyc2lvbiBvZiBQeXRob24gbGlrZQorYGAyLjdgYCBvciBgYDMuMmBgLgogCiBZb3UgY2FuIHJlYWQgYmFjayB0aGlzIHN0YXRpYyBmaWxlLCBieSB1c2luZyB0aGUKIDpjbGFzczpgZGlzdHV0aWxzLmRpc3QuRGlzdHJpYnV0aW9uTWV0YWRhdGFgIGNsYXNzIGFuZCBpdHMKZGlmZiAtLWdpdCBhL0RvYy9kaXN0dXRpbHMvZXh0ZW5kaW5nLnJzdCBiL0RvYy9kaXN0dXRpbHMvZXh0ZW5kaW5nLnJzdAppbmRleCA1YTcwZDAzLi41MTM5YzZkIDEwMDY0NAotLS0gYS9Eb2MvZGlzdHV0aWxzL2V4dGVuZGluZy5yc3QKKysrIGIvRG9jL2Rpc3R1dGlscy9leHRlbmRpbmcucnN0CkBAIC02MSw3ICs2MSw3IEBACiByZXF1aXJpbmcgbW9kaWZpY2F0aW9ucyB0byB0aGUgUHl0aG9uIGluc3RhbGxhdGlvbi4gIFRoaXMgaXMgZXhwZWN0ZWQgdG8gYWxsb3cKIHRoaXJkLXBhcnR5IGV4dGVuc2lvbnMgdG8gcHJvdmlkZSBzdXBwb3J0IGZvciBhZGRpdGlvbmFsIHBhY2thZ2luZyBzeXN0ZW1zLCBidXQKIHRoZSBjb21tYW5kcyBjYW4gYmUgdXNlZCBmb3IgYW55dGhpbmcgZGlzdHV0aWxzIGNvbW1hbmRzIGNhbiBiZSB1c2VkIGZvci4gIEEgbmV3Ci1jb25maWd1cmF0aW9uIG9wdGlvbiwgOm9wdGlvbjpgY29tbWFuZF9wYWNrYWdlc2AgKGNvbW1hbmQtbGluZSBvcHRpb24KK2NvbmZpZ3VyYXRpb24gb3B0aW9uLCBgYGNvbW1hbmRfcGFja2FnZXNgYCAoY29tbWFuZC1saW5lIG9wdGlvbgogOm9wdGlvbjpgLS1jb21tYW5kLXBhY2thZ2VzYCksIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYWRkaXRpb25hbCBwYWNrYWdlcyB0byBiZQogc2VhcmNoZWQgZm9yIG1vZHVsZXMgaW1wbGVtZW50aW5nIGNvbW1hbmRzLiAgTGlrZSBhbGwgZGlzdHV0aWxzIG9wdGlvbnMsIHRoaXMKIGNhbiBiZSBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZSBvciBpbiBhIGNvbmZpZ3VyYXRpb24gZmlsZS4gIFRoaXMgb3B0aW9uCkBAIC03NSw3ICs3NSw3IEBACiBwYWNrYWdlcyBzZWFyY2hlZCBmb3IgY29tbWFuZCBpbXBsZW1lbnRhdGlvbnM7IG11bHRpcGxlIHBhY2thZ2UgbmFtZXMgc2hvdWxkIGJlCiBzZXBhcmF0ZWQgYnkgY29tbWFzLiAgV2hlbiBub3Qgc3BlY2lmaWVkLCB0aGUgc2VhcmNoIGlzIG9ubHkgcGVyZm9ybWVkIGluIHRoZQogOm1vZDpgZGlzdHV0aWxzLmNvbW1hbmRgIHBhY2thZ2UuICBXaGVuIDpmaWxlOmBzZXR1cC5weWAgaXMgcnVuIHdpdGggdGhlIG9wdGlvbgotOm9wdGlvbjpgLS1jb21tYW5kLXBhY2thZ2VzYCA6b3B0aW9uOmBkaXN0Y21kcyxidWlsZGNtZHNgLCBob3dldmVyLCB0aGUgcGFja2FnZXMKK2BgLS1jb21tYW5kLXBhY2thZ2VzIGRpc3RjbWRzLGJ1aWxkY21kc2BgLCBob3dldmVyLCB0aGUgcGFja2FnZXMKIDptb2Q6YGRpc3R1dGlscy5jb21tYW5kYCwgOm1vZDpgZGlzdGNtZHNgLCBhbmQgOm1vZDpgYnVpbGRjbWRzYCB3aWxsIGJlIHNlYXJjaGVkCiBpbiB0aGF0IG9yZGVyLiAgTmV3IGNvbW1hbmRzIGFyZSBleHBlY3RlZCB0byBiZSBpbXBsZW1lbnRlZCBpbiBtb2R1bGVzIG9mIHRoZQogc2FtZSBuYW1lIGFzIHRoZSBjb21tYW5kIGJ5IGNsYXNzZXMgc2hhcmluZyB0aGUgc2FtZSBuYW1lLiAgR2l2ZW4gdGhlIGV4YW1wbGUKZGlmZiAtLWdpdCBhL0RvYy9kaXN0dXRpbHMvaW5kZXgucnN0IGIvRG9jL2Rpc3R1dGlscy9pbmRleC5yc3QKaW5kZXggMWE2ZjA0Yy4uMzM1ZjgwNCAxMDA2NDQKLS0tIGEvRG9jL2Rpc3R1dGlscy9pbmRleC5yc3QKKysrIGIvRG9jL2Rpc3R1dGlscy9pbmRleC5yc3QKQEAgLTEsOCArMSw4IEBACiAuLiBfZGlzdHV0aWxzLWluZGV4OgogCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0gIERpc3RyaWJ1dGluZyBQeXRob24gTW9kdWxlcwotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICBEaXN0cmlidXRpbmcgUHl0aG9uIE1vZHVsZXMgKExlZ2FjeSB2ZXJzaW9uKQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCiA6QXV0aG9yczogR3JlZyBXYXJkLCBBbnRob255IEJheHRlcgogOkVtYWlsOiBkaXN0dXRpbHMtc2lnQHB5dGhvbi5vcmcKQEAgLTE1LDEwICsxNSw5IEBACiAuLiBub3RlOjoKIAogICAgVGhpcyBndWlkZSBvbmx5IGNvdmVycyB0aGUgYmFzaWMgdG9vbHMgZm9yIGJ1aWxkaW5nIGFuZCBkaXN0cmlidXRpbmcKLSAgIGV4dGVuc2lvbnMgdGhhdCBhcmUgcHJvdmlkZWQgYXMgcGFydCBvZiB0aGlzIHZlcnNpb24gb2YgUHl0aG9uLiBUaGlyZAotICAgcGFydHkgdG9vbHMgb2ZmZXIgZWFzaWVyIHRvIHVzZSBhbmQgbW9yZSBzZWN1cmUgYWx0ZXJuYXRpdmVzLiBSZWZlciB0byB0aGUKLSAgIGBxdWljayByZWNvbW1lbmRhdGlvbnMgc2VjdGlvbgotICAgPGh0dHBzOi8vcHl0aG9uLXBhY2thZ2luZy11c2VyLWd1aWRlLnJlYWR0aGVkb2NzLm9yZy9lbi9sYXRlc3QvY3VycmVudC5odG1sPmBfXworICAgZXh0ZW5zaW9ucyB0aGF0IGFyZSBwcm92aWRlZCBhcyBwYXJ0IG9mIHRoaXMgdmVyc2lvbiBvZiBQeXRob24uIFRoaXJkIHBhcnR5CisgICB0b29scyBvZmZlciBlYXNpZXIgdG8gdXNlIGFuZCBtb3JlIHNlY3VyZSBhbHRlcm5hdGl2ZXMuIFJlZmVyIHRvIHRoZSBgcXVpY2sKKyAgIHJlY29tbWVuZGF0aW9ucyBzZWN0aW9uIDxodHRwczovL3BhY2thZ2luZy5weXRob24ub3JnL2VuL2xhdGVzdC9jdXJyZW50Lz5gX18KICAgIGluIHRoZSBQeXRob24gUGFja2FnaW5nIFVzZXIgR3VpZGUgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAKIApkaWZmIC0tZ2l0IGEvRG9jL2Rpc3R1dGlscy9wYWNrYWdlaW5kZXgucnN0IGIvRG9jL2Rpc3R1dGlscy9wYWNrYWdlaW5kZXgucnN0CmluZGV4IGRhZThjNTQuLjJkN2RhZWYgMTAwNjQ0Ci0tLSBhL0RvYy9kaXN0dXRpbHMvcGFja2FnZWluZGV4LnJzdAorKysgYi9Eb2MvZGlzdHV0aWxzL3BhY2thZ2VpbmRleC5yc3QKQEAgLTgsMjYgKzgsNTcgQEAKIFRoZSBQeXRob24gUGFja2FnZSBJbmRleCAoUHlQSSkKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAotVGhlIGBQeXRob24gUGFja2FnZSBJbmRleCAoUHlQSSlgXyBob2xkcyA6cmVmOmBtZXRhLWRhdGEgPG1ldGEtZGF0YT5gCitUaGUgYFB5dGhvbiBQYWNrYWdlIEluZGV4IChQeVBJKWBfIHN0b3JlcyA6cmVmOmBtZXRhLWRhdGEgPG1ldGEtZGF0YT5gCiBkZXNjcmliaW5nIGRpc3RyaWJ1dGlvbnMgcGFja2FnZWQgd2l0aCBkaXN0dXRpbHMsIGFzIHdlbGwgYXMgcGFja2FnZSBkYXRhIGxpa2UKLWRpc3RyaWJ1dGlvbiBmaWxlcyBpZiB0aGUgcGFja2FnZSBhdXRob3Igd2lzaGVzLgorZGlzdHJpYnV0aW9uIGZpbGVzIGlmIGEgcGFja2FnZSBhdXRob3Igd2lzaGVzLgorCitEaXN0dXRpbHMgcHJvdmlkZXMgdGhlIDpjb21tYW5kOmByZWdpc3RlcmAgYW5kIDpjb21tYW5kOmB1cGxvYWRgIGNvbW1hbmRzIGZvcgorcHVzaGluZyBtZXRhLWRhdGEgYW5kIGRpc3RyaWJ1dGlvbiBmaWxlcyB0byBQeVBJLCByZXNwZWN0aXZlbHkuICBTZWUKKzpyZWY6YHBhY2thZ2UtY29tbWFuZHNgIGZvciBpbmZvcm1hdGlvbiBvbiB0aGVzZSBjb21tYW5kcy4KKworCitQeVBJIG92ZXJ2aWV3Cis9PT09PT09PT09PT09CisKK1B5UEkgbGV0cyB5b3Ugc3VibWl0IGFueSBudW1iZXIgb2YgdmVyc2lvbnMgb2YgeW91ciBkaXN0cmlidXRpb24gdG8gdGhlIGluZGV4LgorSWYgeW91IGFsdGVyIHRoZSBtZXRhLWRhdGEgZm9yIGEgcGFydGljdWxhciB2ZXJzaW9uLCB5b3UgY2FuIHN1Ym1pdCBpdCBhZ2FpbgorYW5kIHRoZSBpbmRleCB3aWxsIGJlIHVwZGF0ZWQuCisKK1B5UEkgaG9sZHMgYSByZWNvcmQgZm9yIGVhY2ggKG5hbWUsIHZlcnNpb24pIGNvbWJpbmF0aW9uIHN1Ym1pdHRlZC4gIFRoZSBmaXJzdAordXNlciB0byBzdWJtaXQgaW5mb3JtYXRpb24gZm9yIGEgZ2l2ZW4gbmFtZSBpcyBkZXNpZ25hdGVkIHRoZSBPd25lciBvZiB0aGF0CituYW1lLiAgQ2hhbmdlcyBjYW4gYmUgc3VibWl0dGVkIHRocm91Z2ggdGhlIDpjb21tYW5kOmByZWdpc3RlcmAgY29tbWFuZCBvcgordGhyb3VnaCB0aGUgd2ViIGludGVyZmFjZS4gIE93bmVycyBjYW4gZGVzaWduYXRlIG90aGVyIHVzZXJzIGFzIE93bmVycyBvcgorTWFpbnRhaW5lcnMuICBNYWludGFpbmVycyBjYW4gZWRpdCB0aGUgcGFja2FnZSBpbmZvcm1hdGlvbiwgYnV0IG5vdCBkZXNpZ25hdGUKK25ldyBPd25lcnMgb3IgTWFpbnRhaW5lcnMuCisKK0J5IGRlZmF1bHQgUHlQSSBkaXNwbGF5cyBvbmx5IHRoZSBuZXdlc3QgdmVyc2lvbiBvZiBhIGdpdmVuIHBhY2thZ2UuICBUaGUgd2ViCitpbnRlcmZhY2UgbGV0cyBvbmUgY2hhbmdlIHRoaXMgZGVmYXVsdCBiZWhhdmlvciBhbmQgbWFudWFsbHkgc2VsZWN0IHdoaWNoCit2ZXJzaW9ucyB0byBkaXNwbGF5IGFuZCBoaWRlLgorCitGb3IgZWFjaCB2ZXJzaW9uLCBQeVBJIGRpc3BsYXlzIGEgaG9tZSBwYWdlLiAgVGhlIGhvbWUgcGFnZSBpcyBjcmVhdGVkIGZyb20KK3RoZSBgYGxvbmdfZGVzY3JpcHRpb25gYCB3aGljaCBjYW4gYmUgc3VibWl0dGVkIHZpYSB0aGUgOmNvbW1hbmQ6YHJlZ2lzdGVyYAorY29tbWFuZC4gIFNlZSA6cmVmOmBwYWNrYWdlLWRpc3BsYXlgIGZvciBtb3JlIGluZm9ybWF0aW9uLgorCisKKy4uIF9wYWNrYWdlLWNvbW1hbmRzOgorCitEaXN0dXRpbHMgY29tbWFuZHMKKz09PT09PT09PT09PT09PT09PQogCiBEaXN0dXRpbHMgZXhwb3NlcyB0d28gY29tbWFuZHMgZm9yIHN1Ym1pdHRpbmcgcGFja2FnZSBkYXRhIHRvIFB5UEk6IHRoZQogOnJlZjpgcmVnaXN0ZXIgPHBhY2thZ2UtcmVnaXN0ZXI+YCBjb21tYW5kIGZvciBzdWJtaXR0aW5nIG1ldGEtZGF0YSB0byBQeVBJCiBhbmQgdGhlIDpyZWY6YHVwbG9hZCA8cGFja2FnZS11cGxvYWQ+YCBjb21tYW5kIGZvciBzdWJtaXR0aW5nIGRpc3RyaWJ1dGlvbgotZmlsZXMuICBCb3RoIGNvbW1hbmRzIHJlYWQgY29uZmlndXJhdGlvbiBkYXRhIGZyb20gYSBzcGVjaWFsIGZpbGUgY2FsbGVkIHRoZQotOnJlZjpgLnB5cGlyYyBmaWxlIDxweXBpcmM+YC4gIFB5UEkgOnJlZjpgZGlzcGxheXMgYSBob21lIHBhZ2UKLTxwYWNrYWdlLWRpc3BsYXk+YCBmb3IgZWFjaCBwYWNrYWdlIGNyZWF0ZWQgZnJvbSB0aGUgYGBsb25nX2Rlc2NyaXB0aW9uYGAKLXN1Ym1pdHRlZCBieSB0aGUgOmNvbW1hbmQ6YHJlZ2lzdGVyYCBjb21tYW5kLgorZmlsZXMuICBCb3RoIGNvbW1hbmRzIHJlYWQgY29uZmlndXJhdGlvbiBkYXRhIGZyb20gYSBzcGVjaWFsIGZpbGUgY2FsbGVkIGEKKzpyZWY6YC5weXBpcmMgZmlsZSA8cHlwaXJjPmAuCiAKIAogLi4gX3BhY2thZ2UtcmVnaXN0ZXI6CiAKLVJlZ2lzdGVyaW5nIFBhY2thZ2VzCi09PT09PT09PT09PT09PT09PT09PQorVGhlIGBgcmVnaXN0ZXJgYCBjb21tYW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogVGhlIGRpc3R1dGlscyBjb21tYW5kIDpjb21tYW5kOmByZWdpc3RlcmAgaXMgdXNlZCB0byBzdWJtaXQgeW91ciBkaXN0cmlidXRpb24ncwotbWV0YS1kYXRhIHRvIHRoZSBpbmRleC4gSXQgaXMgaW52b2tlZCBhcyBmb2xsb3dzOjoKK21ldGEtZGF0YSB0byBhbiBpbmRleCBzZXJ2ZXIuIEl0IGlzIGludm9rZWQgYXMgZm9sbG93czo6CiAKICAgICBweXRob24gc2V0dXAucHkgcmVnaXN0ZXIKIApAQCAtNDIsNyArNzMsOCBAQAogICAgIFlvdXIgc2VsZWN0aW9uIFtkZWZhdWx0IDFdOgogCiBOb3RlOiBpZiB5b3VyIHVzZXJuYW1lIGFuZCBwYXNzd29yZCBhcmUgc2F2ZWQgbG9jYWxseSwgeW91IHdpbGwgbm90IHNlZSB0aGlzCi1tZW51LgorbWVudS4gIEFsc28sIHJlZmVyIHRvIDpyZWY6YHB5cGlyY2AgZm9yIGhvdyB0byBzdG9yZSB5b3VyIGNyZWRlbnRpYWxzIGluIGEKKzpmaWxlOmAucHlwaXJjYCBmaWxlLgogCiBJZiB5b3UgaGF2ZSBub3QgcmVnaXN0ZXJlZCB3aXRoIFB5UEksIHRoZW4geW91IHdpbGwgbmVlZCB0byBkbyBzbyBub3cuIFlvdQogc2hvdWxkIGNob29zZSBvcHRpb24gMiwgYW5kIGVudGVyIHlvdXIgZGV0YWlscyBhcyByZXF1aXJlZC4gU29vbiBhZnRlcgpAQCAtNTMsMjYgKzg1LDEzIEBACiBwcm9tcHRlZCBmb3IgeW91ciBQeVBJIHVzZXJuYW1lIGFuZCBwYXNzd29yZCwgYW5kIDpjb21tYW5kOmByZWdpc3RlcmAgd2lsbCB0aGVuCiBzdWJtaXQgeW91ciBtZXRhLWRhdGEgdG8gdGhlIGluZGV4LgogCi1Zb3UgbWF5IHN1Ym1pdCBhbnkgbnVtYmVyIG9mIHZlcnNpb25zIG9mIHlvdXIgZGlzdHJpYnV0aW9uIHRvIHRoZSBpbmRleC4gSWYgeW91Ci1hbHRlciB0aGUgbWV0YS1kYXRhIGZvciBhIHBhcnRpY3VsYXIgdmVyc2lvbiwgeW91IG1heSBzdWJtaXQgaXQgYWdhaW4gYW5kIHRoZQotaW5kZXggd2lsbCBiZSB1cGRhdGVkLgotCi1QeVBJIGhvbGRzIGEgcmVjb3JkIGZvciBlYWNoIChuYW1lLCB2ZXJzaW9uKSBjb21iaW5hdGlvbiBzdWJtaXR0ZWQuIFRoZSBmaXJzdAotdXNlciB0byBzdWJtaXQgaW5mb3JtYXRpb24gZm9yIGEgZ2l2ZW4gbmFtZSBpcyBkZXNpZ25hdGVkIHRoZSBPd25lciBvZiB0aGF0Ci1uYW1lLiBUaGV5IG1heSBzdWJtaXQgY2hhbmdlcyB0aHJvdWdoIHRoZSA6Y29tbWFuZDpgcmVnaXN0ZXJgIGNvbW1hbmQgb3IgdGhyb3VnaAotdGhlIHdlYiBpbnRlcmZhY2UuIFRoZXkgbWF5IGFsc28gZGVzaWduYXRlIG90aGVyIHVzZXJzIGFzIE93bmVycyBvciBNYWludGFpbmVycy4KLU1haW50YWluZXJzIG1heSBlZGl0IHRoZSBwYWNrYWdlIGluZm9ybWF0aW9uLCBidXQgbm90IGRlc2lnbmF0ZSBvdGhlciBPd25lcnMgb3IKLU1haW50YWluZXJzLgotCi1CeSBkZWZhdWx0IFB5UEkgZGlzcGxheXMgb25seSB0aGUgbmV3ZXN0IHZlcnNpb24gb2YgYSBnaXZlbiBwYWNrYWdlLiBUaGUgd2ViCi1pbnRlcmZhY2UgbGV0cyBvbmUgY2hhbmdlIHRoaXMgZGVmYXVsdCBiZWhhdmlvciBhbmQgbWFudWFsbHkgc2VsZWN0IHdoaWNoCi12ZXJzaW9ucyB0byBkaXNwbGF5IGFuZCBoaWRlLgorU2VlIDpyZWY6YHBhY2thZ2UtY21kb3B0aW9uc2AgZm9yIG9wdGlvbnMgdG8gdGhlIDpjb21tYW5kOmByZWdpc3RlcmAgY29tbWFuZC4KIAogCiAuLiBfcGFja2FnZS11cGxvYWQ6CiAKLVVwbG9hZGluZyBQYWNrYWdlcwotPT09PT09PT09PT09PT09PT09CitUaGUgYGB1cGxvYWRgYCBjb21tYW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFRoZSBkaXN0dXRpbHMgY29tbWFuZCA6Y29tbWFuZDpgdXBsb2FkYCBwdXNoZXMgdGhlIGRpc3RyaWJ1dGlvbiBmaWxlcyB0byBQeVBJLgogCkBAIC04NiwyOSArMTA1LDQyIEBACiBpbnZvY2F0aW9uIG9mIDpmaWxlOmBzZXR1cC5weWAsIGJ1dCB0aGF0IG9ubHkgZGlzdHJpYnV0aW9ucyBuYW1lZCBvbiB0aGUgY29tbWFuZAogbGluZSBmb3IgdGhlIGludm9jYXRpb24gaW5jbHVkaW5nIHRoZSA6Y29tbWFuZDpgdXBsb2FkYCBjb21tYW5kIGFyZSB1cGxvYWRlZC4KIAotVGhlIDpjb21tYW5kOmB1cGxvYWRgIGNvbW1hbmQgdXNlcyB0aGUgdXNlcm5hbWUsIHBhc3N3b3JkLCBhbmQgcmVwb3NpdG9yeSBVUkwKLWZyb20gdGhlIDpmaWxlOmAkSE9NRS8ucHlwaXJjYCBmaWxlIChzZWUgc2VjdGlvbiA6cmVmOmBweXBpcmNgIGZvciBtb3JlIG9uIHRoaXMKLWZpbGUpLiBJZiBhIDpjb21tYW5kOmByZWdpc3RlcmAgY29tbWFuZCB3YXMgcHJldmlvdXNseSBjYWxsZWQgaW4gdGhlIHNhbWUgY29tbWFuZCwKK0lmIGEgOmNvbW1hbmQ6YHJlZ2lzdGVyYCBjb21tYW5kIHdhcyBwcmV2aW91c2x5IGNhbGxlZCBpbiB0aGUgc2FtZSBjb21tYW5kLAogYW5kIGlmIHRoZSBwYXNzd29yZCB3YXMgZW50ZXJlZCBpbiB0aGUgcHJvbXB0LCA6Y29tbWFuZDpgdXBsb2FkYCB3aWxsIHJldXNlIHRoZQotZW50ZXJlZCBwYXNzd29yZC4gVGhpcyBpcyB1c2VmdWwgaWYgeW91IGRvIG5vdCB3YW50IHRvIHN0b3JlIGEgY2xlYXIgdGV4dAotcGFzc3dvcmQgaW4gdGhlIDpmaWxlOmAkSE9NRS8ucHlwaXJjYCBmaWxlLgotCi1Zb3UgY2FuIHNwZWNpZnkgYW5vdGhlciBQeVBJIHNlcnZlciB3aXRoIHRoZSBgYC0tcmVwb3NpdG9yeT11cmxgYCBvcHRpb246OgotCi0gICAgcHl0aG9uIHNldHVwLnB5IHNkaXN0IGJkaXN0X3dpbmluc3QgdXBsb2FkIC1yIGh0dHA6Ly9leGFtcGxlLmNvbS9weXBpCi0KLVNlZSBzZWN0aW9uIDpyZWY6YHB5cGlyY2AgZm9yIG1vcmUgb24gZGVmaW5pbmcgc2V2ZXJhbCBzZXJ2ZXJzLgorZW50ZXJlZCBwYXNzd29yZC4gIFRoaXMgaXMgdXNlZnVsIGlmIHlvdSBkbyBub3Qgd2FudCB0byBzdG9yZSBhIHBhc3N3b3JkIGluCitjbGVhciB0ZXh0IGluIGEgOmZpbGU6YC5weXBpcmNgIGZpbGUuCiAKIFlvdSBjYW4gdXNlIHRoZSBgYC0tc2lnbmBgIG9wdGlvbiB0byB0ZWxsIDpjb21tYW5kOmB1cGxvYWRgIHRvIHNpZ24gZWFjaAogdXBsb2FkZWQgZmlsZSB1c2luZyBHUEcgKEdOVSBQcml2YWN5IEd1YXJkKS4gIFRoZSAgOnByb2dyYW06YGdwZ2AgcHJvZ3JhbSBtdXN0CiBiZSBhdmFpbGFibGUgZm9yIGV4ZWN1dGlvbiBvbiB0aGUgc3lzdGVtIDplbnZ2YXI6YFBBVEhgLiAgWW91IGNhbiBhbHNvIHNwZWNpZnkKIHdoaWNoIGtleSB0byB1c2UgZm9yIHNpZ25pbmcgdXNpbmcgdGhlIGBgLS1pZGVudGl0eT1uYW1lYGAgb3B0aW9uLgogCi1PdGhlciA6Y29tbWFuZDpgdXBsb2FkYCBvcHRpb25zIGluY2x1ZGUgYGAtLXJlcG9zaXRvcnk9dXJsYGAgb3IKLWBgLS1yZXBvc2l0b3J5PXNlY3Rpb25gYCB3aGVyZSAqdXJsKiBpcyB0aGUgdXJsIG9mIHRoZSBzZXJ2ZXIgYW5kCi0qc2VjdGlvbiogdGhlIG5hbWUgb2YgdGhlIHNlY3Rpb24gaW4gOmZpbGU6YCRIT01FLy5weXBpcmNgLCBhbmQKLWBgLS1zaG93LXJlc3BvbnNlYGAgKHdoaWNoIGRpc3BsYXlzIHRoZSBmdWxsIHJlc3BvbnNlIHRleHQgZnJvbSB0aGUgUHlQSQotc2VydmVyIGZvciBoZWxwIGluIGRlYnVnZ2luZyB1cGxvYWQgcHJvYmxlbXMpLgorU2VlIDpyZWY6YHBhY2thZ2UtY21kb3B0aW9uc2AgZm9yIGFkZGl0aW9uYWwgb3B0aW9ucyB0byB0aGUgOmNvbW1hbmQ6YHVwbG9hZGAKK2NvbW1hbmQuCisKKworLi4gX3BhY2thZ2UtY21kb3B0aW9uczoKKworQWRkaXRpb25hbCBjb21tYW5kIG9wdGlvbnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgc2VjdGlvbiBkZXNjcmliZXMgb3B0aW9ucyBjb21tb24gdG8gYm90aCB0aGUgOmNvbW1hbmQ6YHJlZ2lzdGVyYCBhbmQKKzpjb21tYW5kOmB1cGxvYWRgIGNvbW1hbmRzLgorCitUaGUgYGAtLXJlcG9zaXRvcnlgYCBvciBgYC1yYGAgb3B0aW9uIGxldHMgeW91IHNwZWNpZnkgYSBQeVBJIHNlcnZlcgorZGlmZmVyZW50IGZyb20gdGhlIGRlZmF1bHQuICBGb3IgZXhhbXBsZTo6CisKKyAgICBweXRob24gc2V0dXAucHkgc2Rpc3QgYmRpc3Rfd2luaW5zdCB1cGxvYWQgLXIgaHR0cHM6Ly9leGFtcGxlLmNvbS9weXBpCisKK0ZvciBjb252ZW5pZW5jZSwgYSBuYW1lIGNhbiBiZSB1c2VkIGluIHBsYWNlIG9mIHRoZSBVUkwgd2hlbiB0aGUKKzpmaWxlOmAucHlwaXJjYCBmaWxlIGlzIGNvbmZpZ3VyZWQgdG8gZG8gc28uICBGb3IgZXhhbXBsZTo6CisKKyAgICBweXRob24gc2V0dXAucHkgcmVnaXN0ZXIgLXIgb3RoZXIKKworU2VlIDpyZWY6YHB5cGlyY2AgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gZGVmaW5pbmcgYWx0ZXJuYXRlIHNlcnZlcnMuCisKK1RoZSBgYC0tc2hvdy1yZXNwb25zZWBgIG9wdGlvbiBkaXNwbGF5cyB0aGUgZnVsbCByZXNwb25zZSB0ZXh0IGZyb20gdGhlIFB5UEkKK3NlcnZlciwgd2hpY2ggaXMgdXNlZnVsIHdoZW4gZGVidWdnaW5nIHByb2JsZW1zIHdpdGggcmVnaXN0ZXJpbmcgYW5kIHVwbG9hZGluZy4KIAogCiAuLiBpbmRleDo6CkBAIC0xMTcsMTAgKzE0OSwxNCBAQAogCiAuLiBfcHlwaXJjOgogCi1UaGUgLnB5cGlyYyBmaWxlCi09PT09PT09PT09PT09PT09CitUaGUgYGAucHlwaXJjYGAgZmlsZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotVGhlIGZvcm1hdCBvZiB0aGUgOmZpbGU6YC5weXBpcmNgIGZpbGUgaXMgYXMgZm9sbG93czo6CitUaGUgOmNvbW1hbmQ6YHJlZ2lzdGVyYCBhbmQgOmNvbW1hbmQ6YHVwbG9hZGAgY29tbWFuZHMgYm90aCBjaGVjayBmb3IgdGhlCitleGlzdGVuY2Ugb2YgYSA6ZmlsZTpgLnB5cGlyY2AgZmlsZSBhdCB0aGUgbG9jYXRpb24gOmZpbGU6YCRIT01FLy5weXBpcmNgLgorSWYgdGhpcyBmaWxlIGV4aXN0cywgdGhlIGNvbW1hbmQgdXNlcyB0aGUgdXNlcm5hbWUsIHBhc3N3b3JkLCBhbmQgcmVwb3NpdG9yeQorVVJMIGNvbmZpZ3VyZWQgaW4gdGhlIGZpbGUuICBUaGUgZm9ybWF0IG9mIGEgOmZpbGU6YC5weXBpcmNgIGZpbGUgaXMgYXMKK2ZvbGxvd3M6OgogCiAgICAgW2Rpc3R1dGlsc10KICAgICBpbmRleC1zZXJ2ZXJzID0KQEAgLTEzMSwxMyArMTY3LDEzIEBACiAgICAgdXNlcm5hbWU6IDx1c2VybmFtZT4KICAgICBwYXNzd29yZDogPHBhc3N3b3JkPgogCi1UaGUgKmRpc3R1dGlscyogc2VjdGlvbiBkZWZpbmVzIGEgKmluZGV4LXNlcnZlcnMqIHZhcmlhYmxlIHRoYXQgbGlzdHMgdGhlCitUaGUgKmRpc3R1dGlscyogc2VjdGlvbiBkZWZpbmVzIGFuICppbmRleC1zZXJ2ZXJzKiB2YXJpYWJsZSB0aGF0IGxpc3RzIHRoZQogbmFtZSBvZiBhbGwgc2VjdGlvbnMgZGVzY3JpYmluZyBhIHJlcG9zaXRvcnkuCiAKIEVhY2ggc2VjdGlvbiBkZXNjcmliaW5nIGEgcmVwb3NpdG9yeSBkZWZpbmVzIHRocmVlIHZhcmlhYmxlczoKIAogLSAqcmVwb3NpdG9yeSosIHRoYXQgZGVmaW5lcyB0aGUgdXJsIG9mIHRoZSBQeVBJIHNlcnZlci4gRGVmYXVsdHMgdG8KLSAgICBgYGh0dHA6Ly93d3cucHl0aG9uLm9yZy9weXBpYGAuCisgICAgYGBodHRwczovL3d3dy5weXRob24ub3JnL3B5cGlgYC4KIC0gKnVzZXJuYW1lKiwgd2hpY2ggaXMgdGhlIHJlZ2lzdGVyZWQgdXNlcm5hbWUgb24gdGhlIFB5UEkgc2VydmVyLgogLSAqcGFzc3dvcmQqLCB0aGF0IHdpbGwgYmUgdXNlZCB0byBhdXRoZW50aWNhdGUuIElmIG9taXR0ZWQgdGhlIHVzZXIKICAgICB3aWxsIGJlIHByb21wdCB0byB0eXBlIGl0IHdoZW4gbmVlZGVkLgpAQCAtMTU2LDE5ICsxOTIsMTcgQEAKICAgICBwYXNzd29yZDogPHBhc3N3b3JkPgogCiAgICAgW290aGVyXQotICAgIHJlcG9zaXRvcnk6IGh0dHA6Ly9leGFtcGxlLmNvbS9weXBpCisgICAgcmVwb3NpdG9yeTogaHR0cHM6Ly9leGFtcGxlLmNvbS9weXBpCiAgICAgdXNlcm5hbWU6IDx1c2VybmFtZT4KICAgICBwYXNzd29yZDogPHBhc3N3b3JkPgogCi06Y29tbWFuZDpgcmVnaXN0ZXJgIGNhbiB0aGVuIGJlIGNhbGxlZCB3aXRoIHRoZSAtciBvcHRpb24gdG8gcG9pbnQgdGhlCi1yZXBvc2l0b3J5IHRvIHdvcmsgd2l0aDo6CitUaGlzIGFsbG93cyB0aGUgOmNvbW1hbmQ6YHJlZ2lzdGVyYCBhbmQgOmNvbW1hbmQ6YHVwbG9hZGAgY29tbWFuZHMgdG8gYmUKK2NhbGxlZCB3aXRoIHRoZSBgYC0tcmVwb3NpdG9yeWBgIG9wdGlvbiBhcyBkZXNjcmliZWQgaW4KKzpyZWY6YHBhY2thZ2UtY21kb3B0aW9uc2AuCiAKLSAgICBweXRob24gc2V0dXAucHkgcmVnaXN0ZXIgLXIgaHR0cDovL2V4YW1wbGUuY29tL3B5cGkKLQotRm9yIGNvbnZlbmllbmNlLCB0aGUgbmFtZSBvZiB0aGUgc2VjdGlvbiB0aGF0IGRlc2NyaWJlcyB0aGUgcmVwb3NpdG9yeQotbWF5IGFsc28gYmUgdXNlZDo6Ci0KLSAgICBweXRob24gc2V0dXAucHkgcmVnaXN0ZXIgLXIgb3RoZXIKK1NwZWNpZmljYWxseSwgeW91IG1pZ2h0IHdhbnQgdG8gYWRkIHRoZSBgUHlQSSBUZXN0IFJlcG9zaXRvcnkKKzxodHRwczovL3dpa2kucHl0aG9uLm9yZy9tb2luL1Rlc3RQeVBJPmBfIHRvIHlvdXIgYGAucHlwaXJjYGAgdG8gZmFjaWxpdGF0ZQordGVzdGluZyBiZWZvcmUgZG9pbmcgeW91ciBmaXJzdCB1cGxvYWQgdG8gYGBQeVBJYGAgaXRzZWxmLgogCiAKIC4uIF9wYWNrYWdlLWRpc3BsYXk6CkBAIC0yMTAsNCArMjQ0LDQgQEAKIHN1Y2Nlc3NmdWxseS4KIAogCi0uLiBfUHl0aG9uIFBhY2thZ2UgSW5kZXggKFB5UEkpOiBodHRwOi8vcHlwaS5weXRob24ub3JnLworLi4gX1B5dGhvbiBQYWNrYWdlIEluZGV4IChQeVBJKTogaHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaQpkaWZmIC0tZ2l0IGEvRG9jL2Rpc3R1dGlscy9zZXR1cHNjcmlwdC5yc3QgYi9Eb2MvZGlzdHV0aWxzL3NldHVwc2NyaXB0LnJzdAppbmRleCBmYmU0MjkwLi45MTRhMzRmIDEwMDY0NAotLS0gYS9Eb2MvZGlzdHV0aWxzL3NldHVwc2NyaXB0LnJzdAorKysgYi9Eb2MvZGlzdHV0aWxzL3NldHVwc2NyaXB0LnJzdApAQCAtMjgsNyArMjgsNyBAQAogICAgICAgICAgIGRlc2NyaXB0aW9uPSdQeXRob24gRGlzdHJpYnV0aW9uIFV0aWxpdGllcycsCiAgICAgICAgICAgYXV0aG9yPSdHcmVnIFdhcmQnLAogICAgICAgICAgIGF1dGhvcl9lbWFpbD0nZ3dhcmRAcHl0aG9uLm5ldCcsCi0gICAgICAgICAgdXJsPSdodHRwOi8vd3d3LnB5dGhvbi5vcmcvc2lncy9kaXN0dXRpbHMtc2lnLycsCisgICAgICAgICAgdXJsPSdodHRwczovL3d3dy5weXRob24ub3JnL3NpZ3MvZGlzdHV0aWxzLXNpZy8nLAogICAgICAgICAgIHBhY2thZ2VzPVsnZGlzdHV0aWxzJywgJ2Rpc3R1dGlscy5jb21tYW5kJ10sCiAgICAgICAgICApCiAKQEAgLTYyLDkgKzYyLDkgQEAKIExpc3Rpbmcgd2hvbGUgcGFja2FnZXMKID09PT09PT09PT09PT09PT09PT09PT0KIAotVGhlIDpvcHRpb246YHBhY2thZ2VzYCBvcHRpb24gdGVsbHMgdGhlIERpc3R1dGlscyB0byBwcm9jZXNzIChidWlsZCwgZGlzdHJpYnV0ZSwKK1RoZSBgYHBhY2thZ2VzYGAgb3B0aW9uIHRlbGxzIHRoZSBEaXN0dXRpbHMgdG8gcHJvY2VzcyAoYnVpbGQsIGRpc3RyaWJ1dGUsCiBpbnN0YWxsLCBldGMuKSBhbGwgcHVyZSBQeXRob24gbW9kdWxlcyBmb3VuZCBpbiBlYWNoIHBhY2thZ2UgbWVudGlvbmVkIGluIHRoZQotOm9wdGlvbjpgcGFja2FnZXNgIGxpc3QuICBJbiBvcmRlciB0byBkbyB0aGlzLCBvZiBjb3Vyc2UsIHRoZXJlIGhhcyB0byBiZSBhCitgYHBhY2thZ2VzYGAgbGlzdC4gIEluIG9yZGVyIHRvIGRvIHRoaXMsIG9mIGNvdXJzZSwgdGhlcmUgaGFzIHRvIGJlIGEKIGNvcnJlc3BvbmRlbmNlIGJldHdlZW4gcGFja2FnZSBuYW1lcyBhbmQgZGlyZWN0b3JpZXMgaW4gdGhlIGZpbGVzeXN0ZW0uICBUaGUKIGRlZmF1bHQgY29ycmVzcG9uZGVuY2UgaXMgdGhlIG1vc3Qgb2J2aW91cyBvbmUsIGkuZS4gcGFja2FnZSA6bW9kOmBkaXN0dXRpbHNgIGlzCiBmb3VuZCBpbiB0aGUgZGlyZWN0b3J5IDpmaWxlOmBkaXN0dXRpbHNgIHJlbGF0aXZlIHRvIHRoZSBkaXN0cmlidXRpb24gcm9vdC4KQEAgLTc1LDcgKzc1LDcgQEAKIERpc3R1dGlscyB3aWxsIGlzc3VlIGEgd2FybmluZyBidXQgc3RpbGwgcHJvY2VzcyB0aGUgYnJva2VuIHBhY2thZ2UgYW55d2F5LgogCiBJZiB5b3UgdXNlIGEgZGlmZmVyZW50IGNvbnZlbnRpb24gdG8gbGF5IG91dCB5b3VyIHNvdXJjZSBkaXJlY3RvcnksIHRoYXQncyBubwotcHJvYmxlbTogeW91IGp1c3QgaGF2ZSB0byBzdXBwbHkgdGhlIDpvcHRpb246YHBhY2thZ2VfZGlyYCBvcHRpb24gdG8gdGVsbCB0aGUKK3Byb2JsZW06IHlvdSBqdXN0IGhhdmUgdG8gc3VwcGx5IHRoZSBgYHBhY2thZ2VfZGlyYGAgb3B0aW9uIHRvIHRlbGwgdGhlCiBEaXN0dXRpbHMgYWJvdXQgeW91ciBjb252ZW50aW9uLiAgRm9yIGV4YW1wbGUsIHNheSB5b3Uga2VlcCBhbGwgUHl0aG9uIHNvdXJjZQogdW5kZXIgOmZpbGU6YGxpYmAsIHNvIHRoYXQgbW9kdWxlcyBpbiB0aGUgInJvb3QgcGFja2FnZSIgKGkuZS4sIG5vdCBpbiBhbnkKIHBhY2thZ2UgYXQgYWxsKSBhcmUgaW4gOmZpbGU6YGxpYmAsIG1vZHVsZXMgaW4gdGhlIDptb2Q6YGZvb2AgcGFja2FnZSBhcmUgaW4KQEAgLTk0LDEzICs5NCwxMyBAQAogCiAgICAgcGFja2FnZV9kaXIgPSB7J2Zvbyc6ICdsaWInfQogCi1BIGBgcGFja2FnZTogZGlyYGAgZW50cnkgaW4gdGhlIDpvcHRpb246YHBhY2thZ2VfZGlyYCBkaWN0aW9uYXJ5IGltcGxpY2l0bHkKK0EgYGBwYWNrYWdlOiBkaXJgYCBlbnRyeSBpbiB0aGUgYGBwYWNrYWdlX2RpcmBgIGRpY3Rpb25hcnkgaW1wbGljaXRseQogYXBwbGllcyB0byBhbGwgcGFja2FnZXMgYmVsb3cgKnBhY2thZ2UqLCBzbyB0aGUgOm1vZDpgZm9vLmJhcmAgY2FzZSBpcwogYXV0b21hdGljYWxseSBoYW5kbGVkIGhlcmUuICBJbiB0aGlzIGV4YW1wbGUsIGhhdmluZyBgYHBhY2thZ2VzID0gWydmb28nLAogJ2Zvby5iYXInXWBgIHRlbGxzIHRoZSBEaXN0dXRpbHMgdG8gbG9vayBmb3IgOmZpbGU6YGxpYi9fX2luaXRfXy5weWAgYW5kCi06ZmlsZTpgbGliL2Jhci9fX2luaXRfXy5weWAuICAoS2VlcCBpbiBtaW5kIHRoYXQgYWx0aG91Z2ggOm9wdGlvbjpgcGFja2FnZV9kaXJgCis6ZmlsZTpgbGliL2Jhci9fX2luaXRfXy5weWAuICAoS2VlcCBpbiBtaW5kIHRoYXQgYWx0aG91Z2ggYGBwYWNrYWdlX2RpcmBgCiBhcHBsaWVzIHJlY3Vyc2l2ZWx5LCB5b3UgbXVzdCBleHBsaWNpdGx5IGxpc3QgYWxsIHBhY2thZ2VzIGluCi06b3B0aW9uOmBwYWNrYWdlc2A6IHRoZSBEaXN0dXRpbHMgd2lsbCAqbm90KiByZWN1cnNpdmVseSBzY2FuIHlvdXIgc291cmNlIHRyZWUKK2BgcGFja2FnZXNgYDogdGhlIERpc3R1dGlscyB3aWxsICpub3QqIHJlY3Vyc2l2ZWx5IHNjYW4geW91ciBzb3VyY2UgdHJlZQogbG9va2luZyBmb3IgYW55IGRpcmVjdG9yeSB3aXRoIGFuIDpmaWxlOmBfX2luaXRfXy5weWAgZmlsZS4pCiAKIApAQCAtMTIwLDcgKzEyMCw3IEBACiA6bW9kOmBwa2dgIHBhY2thZ2UuICBBZ2FpbiwgdGhlIGRlZmF1bHQgcGFja2FnZS9kaXJlY3RvcnkgbGF5b3V0IGltcGxpZXMgdGhhdAogdGhlc2UgdHdvIG1vZHVsZXMgY2FuIGJlIGZvdW5kIGluIDpmaWxlOmBtb2QxLnB5YCBhbmQgOmZpbGU6YHBrZy9tb2QyLnB5YCwgYW5kCiB0aGF0IDpmaWxlOmBwa2cvX19pbml0X18ucHlgIGV4aXN0cyBhcyB3ZWxsLiBBbmQgYWdhaW4sIHlvdSBjYW4gb3ZlcnJpZGUgdGhlCi1wYWNrYWdlL2RpcmVjdG9yeSBjb3JyZXNwb25kZW5jZSB1c2luZyB0aGUgOm9wdGlvbjpgcGFja2FnZV9kaXJgIG9wdGlvbi4KK3BhY2thZ2UvZGlyZWN0b3J5IGNvcnJlc3BvbmRlbmNlIHVzaW5nIHRoZSBgYHBhY2thZ2VfZGlyYGAgb3B0aW9uLgogCiAKIC4uIF9kZXNjcmliaW5nLWV4dGVuc2lvbnM6CkBAIC0xMzgsNyArMTM4LDcgQEAKIC4uIFhYWCByZWFkIG92ZXIgdGhpcyBzZWN0aW9uCiAKIEFsbCBvZiB0aGlzIGlzIGRvbmUgdGhyb3VnaCBhbm90aGVyIGtleXdvcmQgYXJndW1lbnQgdG8gOmZ1bmM6YHNldHVwYCwgdGhlCi06b3B0aW9uOmBleHRfbW9kdWxlc2Agb3B0aW9uLiAgOm9wdGlvbjpgZXh0X21vZHVsZXNgIGlzIGp1c3QgYSBsaXN0IG9mCitgYGV4dF9tb2R1bGVzYGAgb3B0aW9uLiAgYGBleHRfbW9kdWxlc2BgIGlzIGp1c3QgYSBsaXN0IG9mCiA6Y2xhc3M6YH5kaXN0dXRpbHMuY29yZS5FeHRlbnNpb25gIGluc3RhbmNlcywgZWFjaCBvZiB3aGljaCBkZXNjcmliZXMgYQogc2luZ2xlIGV4dGVuc2lvbiBtb2R1bGUuCiBTdXBwb3NlIHlvdXIgZGlzdHJpYnV0aW9uIGluY2x1ZGVzIGEgc2luZ2xlIGV4dGVuc2lvbiwgY2FsbGVkIDptb2Q6YGZvb2AgYW5kCkBAIC0xODEsNyArMTgxLDcgQEAKIHJlc3VsdGluZyBleHRlbnNpb24gbGl2ZXMuCiAKIElmIHlvdSBoYXZlIGEgbnVtYmVyIG9mIGV4dGVuc2lvbnMgYWxsIGluIHRoZSBzYW1lIHBhY2thZ2UgKG9yIGFsbCB1bmRlciB0aGUKLXNhbWUgYmFzZSBwYWNrYWdlKSwgdXNlIHRoZSA6b3B0aW9uOmBleHRfcGFja2FnZWAga2V5d29yZCBhcmd1bWVudCB0bworc2FtZSBiYXNlIHBhY2thZ2UpLCB1c2UgdGhlIGBgZXh0X3BhY2thZ2VgYCBrZXl3b3JkIGFyZ3VtZW50IHRvCiA6ZnVuYzpgc2V0dXBgLiAgRm9yIGV4YW1wbGUsIDo6CiAKICAgICBzZXR1cCguLi4sCkBAIC0zMzYsMjQgKzMzNiwyNCBAQAogCiBUaGVyZSBhcmUgc3RpbGwgc29tZSBvdGhlciBvcHRpb25zIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGhhbmRsZSBzcGVjaWFsIGNhc2VzLgogCi1UaGUgOm9wdGlvbjpgb3B0aW9uYWxgIG9wdGlvbiBpcyBhIGJvb2xlYW47IGlmIGl0IGlzIHRydWUsCitUaGUgYGBvcHRpb25hbGBgIG9wdGlvbiBpcyBhIGJvb2xlYW47IGlmIGl0IGlzIHRydWUsCiBhIGJ1aWxkIGZhaWx1cmUgaW4gdGhlIGV4dGVuc2lvbiB3aWxsIG5vdCBhYm9ydCB0aGUgYnVpbGQgcHJvY2VzcywgYnV0CiBpbnN0ZWFkIHNpbXBseSBub3QgaW5zdGFsbCB0aGUgZmFpbGluZyBleHRlbnNpb24uCiAKLVRoZSA6b3B0aW9uOmBleHRyYV9vYmplY3RzYCBvcHRpb24gaXMgYSBsaXN0IG9mIG9iamVjdCBmaWxlcyB0byBiZSBwYXNzZWQgdG8gdGhlCitUaGUgYGBleHRyYV9vYmplY3RzYGAgb3B0aW9uIGlzIGEgbGlzdCBvZiBvYmplY3QgZmlsZXMgdG8gYmUgcGFzc2VkIHRvIHRoZQogbGlua2VyLiBUaGVzZSBmaWxlcyBtdXN0IG5vdCBoYXZlIGV4dGVuc2lvbnMsIGFzIHRoZSBkZWZhdWx0IGV4dGVuc2lvbiBmb3IgdGhlCiBjb21waWxlciBpcyB1c2VkLgogCi06b3B0aW9uOmBleHRyYV9jb21waWxlX2FyZ3NgIGFuZCA6b3B0aW9uOmBleHRyYV9saW5rX2FyZ3NgIGNhbiBiZSB1c2VkIHRvCitgYGV4dHJhX2NvbXBpbGVfYXJnc2BgIGFuZCBgYGV4dHJhX2xpbmtfYXJnc2BgIGNhbiBiZSB1c2VkIHRvCiBzcGVjaWZ5IGFkZGl0aW9uYWwgY29tbWFuZCBsaW5lIG9wdGlvbnMgZm9yIHRoZSByZXNwZWN0aXZlIGNvbXBpbGVyIGFuZCBsaW5rZXIKIGNvbW1hbmQgbGluZXMuCiAKLTpvcHRpb246YGV4cG9ydF9zeW1ib2xzYCBpcyBvbmx5IHVzZWZ1bCBvbiBXaW5kb3dzLiAgSXQgY2FuIGNvbnRhaW4gYSBsaXN0IG9mCitgYGV4cG9ydF9zeW1ib2xzYGAgaXMgb25seSB1c2VmdWwgb24gV2luZG93cy4gIEl0IGNhbiBjb250YWluIGEgbGlzdCBvZgogc3ltYm9scyAoZnVuY3Rpb25zIG9yIHZhcmlhYmxlcykgdG8gYmUgZXhwb3J0ZWQuIFRoaXMgb3B0aW9uIGlzIG5vdCBuZWVkZWQgd2hlbgogYnVpbGRpbmcgY29tcGlsZWQgZXh0ZW5zaW9uczogRGlzdHV0aWxzICB3aWxsIGF1dG9tYXRpY2FsbHkgYWRkIGBgaW5pdG1vZHVsZWBgCiB0byB0aGUgbGlzdCBvZiBleHBvcnRlZCBzeW1ib2xzLgogCi1UaGUgOm9wdGlvbjpgZGVwZW5kc2Agb3B0aW9uIGlzIGEgbGlzdCBvZiBmaWxlcyB0aGF0IHRoZSBleHRlbnNpb24gZGVwZW5kcyBvbgorVGhlIGBgZGVwZW5kc2BgIG9wdGlvbiBpcyBhIGxpc3Qgb2YgZmlsZXMgdGhhdCB0aGUgZXh0ZW5zaW9uIGRlcGVuZHMgb24KIChmb3IgZXhhbXBsZSBoZWFkZXIgZmlsZXMpLiBUaGUgYnVpbGQgY29tbWFuZCB3aWxsIGNhbGwgdGhlIGNvbXBpbGVyIG9uIHRoZQogc291cmNlcyB0byByZWJ1aWxkIGV4dGVuc2lvbiBpZiBhbnkgb24gdGhpcyBmaWxlcyBoYXMgYmVlbiBtb2RpZmllZCBzaW5jZSB0aGUKIHByZXZpb3VzIGJ1aWxkLgpAQCAtNDQ5LDcgKzQ0OSw3IEBACiB0aGUgY3VycmVudCBpbnRlcnByZXRlciBsb2NhdGlvbi4gIFRoZSA6b3B0aW9uOmAtLWV4ZWN1dGFibGVgIChvciA6b3B0aW9uOmAtZWApCiBvcHRpb24gd2lsbCBhbGxvdyB0aGUgaW50ZXJwcmV0ZXIgcGF0aCB0byBiZSBleHBsaWNpdGx5IG92ZXJyaWRkZW4uCiAKLVRoZSA6b3B0aW9uOmBzY3JpcHRzYCBvcHRpb24gc2ltcGx5IGlzIGEgbGlzdCBvZiBmaWxlcyB0byBiZSBoYW5kbGVkIGluIHRoaXMKK1RoZSBgYHNjcmlwdHNgYCBvcHRpb24gc2ltcGx5IGlzIGEgbGlzdCBvZiBmaWxlcyB0byBiZSBoYW5kbGVkIGluIHRoaXMKIHdheS4gIEZyb20gdGhlIFB5WE1MIHNldHVwIHNjcmlwdDo6CiAKICAgICBzZXR1cCguLi4sCkBAIC01MTQsMTEgKzUxNCwxMSBAQAogSW5zdGFsbGluZyBBZGRpdGlvbmFsIEZpbGVzCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAotVGhlIDpvcHRpb246YGRhdGFfZmlsZXNgIG9wdGlvbiBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGFkZGl0aW9uYWwgZmlsZXMgbmVlZGVkCitUaGUgYGBkYXRhX2ZpbGVzYGAgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYWRkaXRpb25hbCBmaWxlcyBuZWVkZWQKIGJ5IHRoZSBtb2R1bGUgZGlzdHJpYnV0aW9uOiBjb25maWd1cmF0aW9uIGZpbGVzLCBtZXNzYWdlIGNhdGFsb2dzLCBkYXRhIGZpbGVzLAogYW55dGhpbmcgd2hpY2ggZG9lc24ndCBmaXQgaW4gdGhlIHByZXZpb3VzIGNhdGVnb3JpZXMuCiAKLTpvcHRpb246YGRhdGFfZmlsZXNgIHNwZWNpZmllcyBhIHNlcXVlbmNlIG9mICgqZGlyZWN0b3J5KiwgKmZpbGVzKikgcGFpcnMgaW4gdGhlCitgYGRhdGFfZmlsZXNgYCBzcGVjaWZpZXMgYSBzZXF1ZW5jZSBvZiAoKmRpcmVjdG9yeSosICpmaWxlcyopIHBhaXJzIGluIHRoZQogZm9sbG93aW5nIHdheTo6CiAKICAgICBzZXR1cCguLi4sCkBAIC01MzksNyArNTM5LDcgQEAKIGRpcmVjdG9yeSBpbmZvcm1hdGlvbiBmcm9tICpmaWxlcyogaXMgdXNlZCB0byBkZXRlcm1pbmUgdGhlIGZpbmFsIGxvY2F0aW9uIG9mCiB0aGUgaW5zdGFsbGVkIGZpbGU7IG9ubHkgdGhlIG5hbWUgb2YgdGhlIGZpbGUgaXMgdXNlZC4KIAotWW91IGNhbiBzcGVjaWZ5IHRoZSA6b3B0aW9uOmBkYXRhX2ZpbGVzYCBvcHRpb25zIGFzIGEgc2ltcGxlIHNlcXVlbmNlIG9mIGZpbGVzCitZb3UgY2FuIHNwZWNpZnkgdGhlIGBgZGF0YV9maWxlc2BgIG9wdGlvbnMgYXMgYSBzaW1wbGUgc2VxdWVuY2Ugb2YgZmlsZXMKIHdpdGhvdXQgc3BlY2lmeWluZyBhIHRhcmdldCBkaXJlY3RvcnksIGJ1dCB0aGlzIGlzIG5vdCByZWNvbW1lbmRlZCwgYW5kIHRoZQogOmNvbW1hbmQ6YGluc3RhbGxgIGNvbW1hbmQgd2lsbCBwcmludCBhIHdhcm5pbmcgaW4gdGhpcyBjYXNlLiBUbyBpbnN0YWxsIGRhdGEKIGZpbGVzIGRpcmVjdGx5IGluIHRoZSB0YXJnZXQgZGlyZWN0b3J5LCBhbiBlbXB0eSBzdHJpbmcgc2hvdWxkIGJlIGdpdmVuIGFzIHRoZQpAQCAtNjA5LDcgKzYwOSw3IEBACiAoNCkKICAgICBUaGVzZSBmaWVsZHMgc2hvdWxkIG5vdCBiZSB1c2VkIGlmIHlvdXIgcGFja2FnZSBpcyB0byBiZSBjb21wYXRpYmxlIHdpdGggUHl0aG9uCiAgICAgdmVyc2lvbnMgcHJpb3IgdG8gMi4yLjMgb3IgMi4zLiAgVGhlIGxpc3QgaXMgYXZhaWxhYmxlIGZyb20gdGhlIGBQeVBJIHdlYnNpdGUKLSAgICA8aHR0cDovL3B5cGkucHl0aG9uLm9yZy9weXBpPmBfLgorICAgIDxodHRwczovL3B5cGkucHl0aG9uLm9yZy9weXBpPmBfLgogCiAoNSkKICAgICBUaGUgYGBsb25nX2Rlc2NyaXB0aW9uYGAgZmllbGQgaXMgdXNlZCBieSBQeVBJIHdoZW4geW91IGFyZQpAQCAtNjI4LDcgKzYyOCw3IEBACiAKICdsb25nIHN0cmluZycKICAgICBNdWx0aXBsZSBsaW5lcyBvZiBwbGFpbiB0ZXh0IGluIHJlU3RydWN0dXJlZFRleHQgZm9ybWF0IChzZWUKLSAgICBodHRwOi8vZG9jdXRpbHMuc2YubmV0LykuCisgICAgaHR0cDovL2RvY3V0aWxzLnNvdXJjZWZvcmdlLm5ldC8pLgogCiAnbGlzdCBvZiBzdHJpbmdzJwogICAgIFNlZSBiZWxvdy4KQEAgLTY1MCw3ICs2NTAsNyBAQAogMS4wLjFhMgogICAgIHRoZSBzZWNvbmQgYWxwaGEgcmVsZWFzZSBvZiB0aGUgZmlyc3QgcGF0Y2ggdmVyc2lvbiBvZiAxLjAKIAotOm9wdGlvbjpgY2xhc3NpZmllcnNgIGFyZSBzcGVjaWZpZWQgaW4gYSBQeXRob24gbGlzdDo6CitgYGNsYXNzaWZpZXJzYGAgYXJlIHNwZWNpZmllZCBpbiBhIFB5dGhvbiBsaXN0OjoKIAogICAgIHNldHVwKC4uLiwKICAgICAgICAgICBjbGFzc2lmaWVycz1bCkBAIC02NzEsMjAgKzY3MSw2IEBACiAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgKQogCi1JZiB5b3Ugd2lzaCB0byBpbmNsdWRlIGNsYXNzaWZpZXJzIGluIHlvdXIgOmZpbGU6YHNldHVwLnB5YCBmaWxlIGFuZCBhbHNvIHdpc2gKLXRvIHJlbWFpbiBiYWNrd2FyZHMtY29tcGF0aWJsZSB3aXRoIFB5dGhvbiByZWxlYXNlcyBwcmlvciB0byAyLjIuMywgdGhlbiB5b3UgY2FuCi1pbmNsdWRlIHRoZSBmb2xsb3dpbmcgY29kZSBmcmFnbWVudCBpbiB5b3VyIDpmaWxlOmBzZXR1cC5weWAgYmVmb3JlIHRoZQotOmZ1bmM6YHNldHVwYCBjYWxsLiA6OgotCi0gICAgIyBwYXRjaCBkaXN0dXRpbHMgaWYgaXQgY2FuJ3QgY29wZSB3aXRoIHRoZSAiY2xhc3NpZmllcnMiIG9yCi0gICAgIyAiZG93bmxvYWRfdXJsIiBrZXl3b3JkcwotICAgIGZyb20gc3lzIGltcG9ydCB2ZXJzaW9uCi0gICAgaWYgdmVyc2lvbiA8ICcyLjIuMyc6Ci0gICAgICAgIGZyb20gZGlzdHV0aWxzLmRpc3QgaW1wb3J0IERpc3RyaWJ1dGlvbk1ldGFkYXRhCi0gICAgICAgIERpc3RyaWJ1dGlvbk1ldGFkYXRhLmNsYXNzaWZpZXJzID0gTm9uZQotICAgICAgICBEaXN0cmlidXRpb25NZXRhZGF0YS5kb3dubG9hZF91cmwgPSBOb25lCi0KLQogLi4gX2RlYnVnLXNldHVwLXNjcmlwdDoKIAogRGVidWdnaW5nIHRoZSBzZXR1cCBzY3JpcHQKZGlmZiAtLWdpdCBhL0RvYy9kaXN0dXRpbHMvc291cmNlZGlzdC5yc3QgYi9Eb2MvZGlzdHV0aWxzL3NvdXJjZWRpc3QucnN0CmluZGV4IDE2NjY0MzYuLmI5ZjBjYzggMTAwNjQ0Ci0tLSBhL0RvYy9kaXN0dXRpbHMvc291cmNlZGlzdC5yc3QKKysrIGIvRG9jL2Rpc3R1dGlscy9zb3VyY2VkaXN0LnJzdApAQCAtMjYsMTYgKzI2LDE2IEBACiArPT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT0rCiB8IGBgemlwYGAgICB8IHppcCBmaWxlICg6ZmlsZTpgLnppcGApIHwgKDEpLCgzKSB8CiArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rCi18IGBgZ3p0YXJgYCB8IGd6aXAnZWQgdGFyIGZpbGUgICAgICAgIHwgKDIpLCg0KSB8Cit8IGBgZ3p0YXJgYCB8IGd6aXAnZWQgdGFyIGZpbGUgICAgICAgIHwgXCgyKSAgICB8CiB8ICAgICAgICAgICB8ICg6ZmlsZTpgLnRhci5nemApICAgICAgIHwgICAgICAgICB8CiArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rCi18IGBgYnp0YXJgYCB8IGJ6aXAyJ2VkIHRhciBmaWxlICAgICAgIHwgXCg0KSAgICB8Cit8IGBgYnp0YXJgYCB8IGJ6aXAyJ2VkIHRhciBmaWxlICAgICAgIHwgICAgICAgICB8CiB8ICAgICAgICAgICB8ICg6ZmlsZTpgLnRhci5iejJgKSAgICAgIHwgICAgICAgICB8CiArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rCiB8IGBgenRhcmBgICB8IGNvbXByZXNzZWQgdGFyIGZpbGUgICAgIHwgXCg0KSAgICB8CiB8ICAgICAgICAgICB8ICg6ZmlsZTpgLnRhci5aYCkgICAgICAgIHwgICAgICAgICB8CiArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rCi18IGBgdGFyYGAgICB8IHRhciBmaWxlICg6ZmlsZTpgLnRhcmApIHwgXCg0KSAgICB8Cit8IGBgdGFyYGAgICB8IHRhciBmaWxlICg6ZmlsZTpgLnRhcmApIHwgICAgICAgICB8CiArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rCiAKIE5vdGVzOgpAQCAtNTEsOCArNTEsMTYgQEAKICAgIG9mIHRoZSBzdGFuZGFyZCBQeXRob24gbGlicmFyeSBzaW5jZSBQeXRob24gMS42KQogCiAoNCkKLSAgIHJlcXVpcmVzIGV4dGVybmFsIHV0aWxpdGllczogOnByb2dyYW06YHRhcmAgYW5kIHBvc3NpYmx5IG9uZSBvZiA6cHJvZ3JhbTpgZ3ppcGAsCi0gICA6cHJvZ3JhbTpgYnppcDJgLCBvciA6cHJvZ3JhbTpgY29tcHJlc3NgCisgICByZXF1aXJlcyB0aGUgOnByb2dyYW06YGNvbXByZXNzYCBwcm9ncmFtLiBOb3RpY2UgdGhhdCB0aGlzIGZvcm1hdCBpcyBub3cKKyAgIHBlbmRpbmcgZm9yIGRlcHJlY2F0aW9uIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZSB2ZXJzaW9ucyBvZiBQeXRob24uCisKK1doZW4gdXNpbmcgYW55IGBgdGFyYGAgZm9ybWF0IChgYGd6dGFyYGAsIGBgYnp0YXJgYCwgYGB6dGFyYGAgb3IKK2BgdGFyYGApLCB1bmRlciBVbml4IHlvdSBjYW4gc3BlY2lmeSB0aGUgYGBvd25lcmBgIGFuZCBgYGdyb3VwYGAgbmFtZXMKK3RoYXQgd2lsbCBiZSBzZXQgZm9yIGVhY2ggbWVtYmVyIG9mIHRoZSBhcmNoaXZlLgorCitGb3IgZXhhbXBsZSwgaWYgeW91IHdhbnQgYWxsIGZpbGVzIG9mIHRoZSBhcmNoaXZlIHRvIGJlIG93bmVkIGJ5IHJvb3Q6OgorCisgICAgcHl0aG9uIHNldHVwLnB5IHNkaXN0IC0tb3duZXI9cm9vdCAtLWdyb3VwPXJvb3QKIAogCiAuLiBfbWFuaWZlc3Q6CkBAIC02NCwxNiArNzIsMTYgQEAKIGdlbmVyYXRlIG9uZSksIHRoZSA6Y29tbWFuZDpgc2Rpc3RgIGNvbW1hbmQgcHV0cyBhIG1pbmltYWwgZGVmYXVsdCBzZXQgaW50byB0aGUKIHNvdXJjZSBkaXN0cmlidXRpb246CiAKLSogYWxsIFB5dGhvbiBzb3VyY2UgZmlsZXMgaW1wbGllZCBieSB0aGUgOm9wdGlvbjpgcHlfbW9kdWxlc2AgYW5kCi0gIDpvcHRpb246YHBhY2thZ2VzYCBvcHRpb25zCisqIGFsbCBQeXRob24gc291cmNlIGZpbGVzIGltcGxpZWQgYnkgdGhlIGBgcHlfbW9kdWxlc2BgIGFuZAorICBgYHBhY2thZ2VzYGAgb3B0aW9ucwogCi0qIGFsbCBDIHNvdXJjZSBmaWxlcyBtZW50aW9uZWQgaW4gdGhlIDpvcHRpb246YGV4dF9tb2R1bGVzYCBvcgotICA6b3B0aW9uOmBsaWJyYXJpZXNgIG9wdGlvbnMgKAorKiBhbGwgQyBzb3VyY2UgZmlsZXMgbWVudGlvbmVkIGluIHRoZSBgYGV4dF9tb2R1bGVzYGAgb3IKKyAgYGBsaWJyYXJpZXNgYCBvcHRpb25zCiAKICAgLi4gWFhYIGdldHRpbmcgQyBsaWJyYXJ5IHNvdXJjZXMgY3VycmVudGx5IGJyb2tlbi0tLW5vCiAgICAgICAgICA6bWV0aDpgZ2V0X3NvdXJjZV9maWxlc2AgbWV0aG9kIGluIDpmaWxlOmBidWlsZF9jbGliLnB5YCEKIAotKiBzY3JpcHRzIGlkZW50aWZpZWQgYnkgdGhlIDpvcHRpb246YHNjcmlwdHNgIG9wdGlvbgorKiBzY3JpcHRzIGlkZW50aWZpZWQgYnkgdGhlIGBgc2NyaXB0c2BgIG9wdGlvbgogICBTZWUgOnJlZjpgZGlzdHV0aWxzLWluc3RhbGxpbmctc2NyaXB0c2AuCiAKICogYW55dGhpbmcgdGhhdCBsb29rcyBsaWtlIGEgdGVzdCBzY3JpcHQ6IDpmaWxlOmB0ZXN0L3Rlc3RcKi5weWAgKGN1cnJlbnRseSwgdGhlCkBAIC0xNTksNyArMTY3LDcgQEAKIAogIy4gaW5jbHVkZSBhbGwgUHl0aG9uIHNvdXJjZSBmaWxlcyBpbiB0aGUgOmZpbGU6YGRpc3R1dGlsc2AgYW5kCiAgICA6ZmlsZTpgZGlzdHV0aWxzL2NvbW1hbmRgIHN1YmRpcmVjdG9yaWVzIChiZWNhdXNlIHBhY2thZ2VzIGNvcnJlc3BvbmRpbmcgdG8KLSAgIHRob3NlIHR3byBkaXJlY3RvcmllcyB3ZXJlIG1lbnRpb25lZCBpbiB0aGUgOm9wdGlvbjpgcGFja2FnZXNgIG9wdGlvbiBpbiB0aGUKKyAgIHRob3NlIHR3byBkaXJlY3RvcmllcyB3ZXJlIG1lbnRpb25lZCBpbiB0aGUgYGBwYWNrYWdlc2BgIG9wdGlvbiBpbiB0aGUKICAgIHNldHVwIHNjcmlwdC0tLXNlZSBzZWN0aW9uIDpyZWY6YHNldHVwLXNjcmlwdGApCiAKICMuIGluY2x1ZGUgOmZpbGU6YFJFQURNRS50eHRgLCA6ZmlsZTpgc2V0dXAucHlgLCBhbmQgOmZpbGU6YHNldHVwLmNmZ2AgKHN0YW5kYXJkCmRpZmYgLS1naXQgYS9Eb2MvZXh0ZW5kaW5nL2J1aWxkaW5nLnJzdCBiL0RvYy9leHRlbmRpbmcvYnVpbGRpbmcucnN0CmluZGV4IDA4YjBjYzIuLjY1NmFmODggMTAwNjQ0Ci0tLSBhL0RvYy9leHRlbmRpbmcvYnVpbGRpbmcucnN0CisrKyBiL0RvYy9leHRlbmRpbmcvYnVpbGRpbmcucnN0CkBAIC01Niw3ICs1Niw3IEBACiBkaXN0dXRpbHM7IHRoaXMgc2VjdGlvbiBleHBsYWlucyBidWlsZGluZyBleHRlbnNpb24gbW9kdWxlcyBvbmx5LgogCiBJdCBpcyBjb21tb24gdG8gcHJlLWNvbXB1dGUgYXJndW1lbnRzIHRvIDpmdW5jOmBzZXR1cGAsIHRvIGJldHRlciBzdHJ1Y3R1cmUgdGhlCi1kcml2ZXIgc2NyaXB0LiBJbiB0aGUgZXhhbXBsZSBhYm92ZSwgdGhlXCBgYGV4dF9tb2R1bGVzYGAgYXJndW1lbnQgdG8KK2RyaXZlciBzY3JpcHQuIEluIHRoZSBleGFtcGxlIGFib3ZlLCB0aGUgYGBleHRfbW9kdWxlc2BgIGFyZ3VtZW50IHRvCiA6ZnVuYzpgc2V0dXBgIGlzIGEgbGlzdCBvZiBleHRlbnNpb24gbW9kdWxlcywgZWFjaCBvZiB3aGljaCBpcyBhbiBpbnN0YW5jZSBvZgogdGhlIDpjbGFzczpgfmRpc3R1dGlscy5leHRlbnNpb24uRXh0ZW5zaW9uYC4gSW4gdGhlIGV4YW1wbGUsIHRoZSBpbnN0YW5jZQogZGVmaW5lcyBhbiBleHRlbnNpb24gbmFtZWQgYGBkZW1vYGAgd2hpY2ggaXMgYnVpbGQgYnkgY29tcGlsaW5nIGEgc2luZ2xlIHNvdXJjZQpAQCAtODEsNyArODEsNyBAQAogICAgICAgICAgIGRlc2NyaXB0aW9uID0gJ1RoaXMgaXMgYSBkZW1vIHBhY2thZ2UnLAogICAgICAgICAgIGF1dGhvciA9ICdNYXJ0aW4gdi4gTG9ld2lzJywKICAgICAgICAgICBhdXRob3JfZW1haWwgPSAnbWFydGluQHYubG9ld2lzLmRlJywKLSAgICAgICAgICB1cmwgPSAnaHR0cDovL2RvY3MucHl0aG9uLm9yZy9leHRlbmRpbmcvYnVpbGRpbmcnLAorICAgICAgICAgIHVybCA9ICdodHRwczovL2RvY3MucHl0aG9uLm9yZy9leHRlbmRpbmcvYnVpbGRpbmcnLAogICAgICAgICAgIGxvbmdfZGVzY3JpcHRpb24gPSAnJycKICAgIFRoaXMgaXMgcmVhbGx5IGp1c3QgYSBkZW1vIHBhY2thZ2UuCiAgICAnJycsCmRpZmYgLS1naXQgYS9Eb2MvZXh0ZW5kaW5nL2VtYmVkZGluZy5yc3QgYi9Eb2MvZXh0ZW5kaW5nL2VtYmVkZGluZy5yc3QKaW5kZXggYmQ2NjA4Ni4uNmNiNjg2YSAxMDA2NDQKLS0tIGEvRG9jL2V4dGVuZGluZy9lbWJlZGRpbmcucnN0CisrKyBiL0RvYy9leHRlbmRpbmcvZW1iZWRkaW5nLnJzdApAQCAtMjg1LDE0ICsyODUsMTQgQEAKICogYGBweXRob25YLlktY29uZmlnIC0tY2ZsYWdzYGAgd2lsbCBnaXZlIHlvdSB0aGUgcmVjb21tZW5kZWQgZmxhZ3Mgd2hlbgogICBjb21waWxpbmc6OgogCi0gICAkIC9vcHQvYmluL3B5dGhvbjMuMy1jb25maWcgLS1jZmxhZ3MKLSAgIC1JL29wdC9pbmNsdWRlL3B5dGhvbjMuM20gLUkvb3B0L2luY2x1ZGUvcHl0aG9uMy4zbSAtRE5ERUJVRyAtZyAtZndyYXB2IC1PMyAtV2FsbCAtV3N0cmljdC1wcm90b3R5cGVzCisgICAkIC9vcHQvYmluL3B5dGhvbjMuNC1jb25maWcgLS1jZmxhZ3MKKyAgIC1JL29wdC9pbmNsdWRlL3B5dGhvbjMuNG0gLUkvb3B0L2luY2x1ZGUvcHl0aG9uMy40bSAtRE5ERUJVRyAtZyAtZndyYXB2IC1PMyAtV2FsbCAtV3N0cmljdC1wcm90b3R5cGVzCiAKICogYGBweXRob25YLlktY29uZmlnIC0tbGRmbGFnc2BgIHdpbGwgZ2l2ZSB5b3UgdGhlIHJlY29tbWVuZGVkIGZsYWdzIHdoZW4KICAgbGlua2luZzo6CiAKLSAgICQgL29wdC9iaW4vcHl0aG9uMy4zLWNvbmZpZyAtLWxkZmxhZ3MKLSAgIC1ML29wdC9saWIvcHl0aG9uMy4zL2NvbmZpZy0zLjNtIC1scHRocmVhZCAtbGRsIC1sdXRpbCAtbG0gLWxweXRob24zLjNtIC1YbGlua2VyIC1leHBvcnQtZHluYW1pYworICAgJCAvb3B0L2Jpbi9weXRob24zLjQtY29uZmlnIC0tbGRmbGFncworICAgLUwvb3B0L2xpYi9weXRob24zLjQvY29uZmlnLTMuNG0gLWxwdGhyZWFkIC1sZGwgLWx1dGlsIC1sbSAtbHB5dGhvbjMuNG0gLVhsaW5rZXIgLWV4cG9ydC1keW5hbWljCiAKIC4uIG5vdGU6OgogICAgVG8gYXZvaWQgY29uZnVzaW9uIGJldHdlZW4gc2V2ZXJhbCBQeXRob24gaW5zdGFsbGF0aW9ucyAoYW5kIGVzcGVjaWFsbHkKZGlmZiAtLWdpdCBhL0RvYy9leHRlbmRpbmcvZXh0ZW5kaW5nLnJzdCBiL0RvYy9leHRlbmRpbmcvZXh0ZW5kaW5nLnJzdAppbmRleCBhM2JmMjY1Li5iYTZiZmE3IDEwMDY0NAotLS0gYS9Eb2MvZXh0ZW5kaW5nL2V4dGVuZGluZy5yc3QKKysrIGIvRG9jL2V4dGVuZGluZy9leHRlbmRpbmcucnN0CkBAIC0yMCwxMiArMjAsMTcgQEAKIFRoZSBjb21waWxhdGlvbiBvZiBhbiBleHRlbnNpb24gbW9kdWxlIGRlcGVuZHMgb24gaXRzIGludGVuZGVkIHVzZSBhcyB3ZWxsIGFzIG9uCiB5b3VyIHN5c3RlbSBzZXR1cDsgZGV0YWlscyBhcmUgZ2l2ZW4gaW4gbGF0ZXIgY2hhcHRlcnMuCiAKLURvIG5vdGUgdGhhdCBpZiB5b3VyIHVzZSBjYXNlIGlzIGNhbGxpbmcgQyBsaWJyYXJ5IGZ1bmN0aW9ucyBvciBzeXN0ZW0gY2FsbHMsCi15b3Ugc2hvdWxkIGNvbnNpZGVyIHVzaW5nIHRoZSA6bW9kOmBjdHlwZXNgIG1vZHVsZSByYXRoZXIgdGhhbiB3cml0aW5nIGN1c3RvbQotQyBjb2RlLiBOb3Qgb25seSBkb2VzIDptb2Q6YGN0eXBlc2AgbGV0IHlvdSB3cml0ZSBQeXRob24gY29kZSB0byBpbnRlcmZhY2UKLXdpdGggQyBjb2RlLCBidXQgaXQgaXMgbW9yZSBwb3J0YWJsZSBiZXR3ZWVuIGltcGxlbWVudGF0aW9ucyBvZiBQeXRob24gdGhhbgotd3JpdGluZyBhbmQgY29tcGlsaW5nIGFuIGV4dGVuc2lvbiBtb2R1bGUgd2hpY2ggdHlwaWNhbGx5IHRpZXMgeW91IHRvIENQeXRob24uCisuLiBub3RlOjoKIAorICAgVGhlIEMgZXh0ZW5zaW9uIGludGVyZmFjZSBpcyBzcGVjaWZpYyB0byBDUHl0aG9uLCBhbmQgZXh0ZW5zaW9uIG1vZHVsZXMgZG8KKyAgIG5vdCB3b3JrIG9uIG90aGVyIFB5dGhvbiBpbXBsZW1lbnRhdGlvbnMuICBJbiBtYW55IGNhc2VzLCBpdCBpcyBwb3NzaWJsZSB0bworICAgYXZvaWQgd3JpdGluZyBDIGV4dGVuc2lvbnMgYW5kIHByZXNlcnZlIHBvcnRhYmlsaXR5IHRvIG90aGVyIGltcGxlbWVudGF0aW9ucy4KKyAgIEZvciBleGFtcGxlLCBpZiB5b3VyIHVzZSBjYXNlIGlzIGNhbGxpbmcgQyBsaWJyYXJ5IGZ1bmN0aW9ucyBvciBzeXN0ZW0gY2FsbHMsCisgICB5b3Ugc2hvdWxkIGNvbnNpZGVyIHVzaW5nIHRoZSA6bW9kOmBjdHlwZXNgIG1vZHVsZSBvciB0aGUgYGNmZmkKKyAgIDxodHRwOi8vY2ZmaS5yZWFkdGhlZG9jcy5vcmc+YF8gbGlicmFyeSByYXRoZXIgdGhhbiB3cml0aW5nIGN1c3RvbSBDIGNvZGUuCisgICBUaGVzZSBtb2R1bGVzIGxldCB5b3Ugd3JpdGUgUHl0aG9uIGNvZGUgdG8gaW50ZXJmYWNlIHdpdGggQyBjb2RlIGFuZCBhcmUgbW9yZQorICAgcG9ydGFibGUgYmV0d2VlbiBpbXBsZW1lbnRhdGlvbnMgb2YgUHl0aG9uIHRoYW4gd3JpdGluZyBhbmQgY29tcGlsaW5nIGEgQworICAgZXh0ZW5zaW9uIG1vZHVsZS4KIAogCiAuLiBfZXh0ZW5kaW5nLXNpbXBsZWV4YW1wbGU6CkBAIC01ODUsNyArNTkwLDcgQEAKIAogVGhlIDpjOmZ1bmM6YFB5QXJnX1BhcnNlVHVwbGVgIGZ1bmN0aW9uIGlzIGRlY2xhcmVkIGFzIGZvbGxvd3M6OgogCi0gICBpbnQgUHlBcmdfUGFyc2VUdXBsZShQeU9iamVjdCAqYXJnLCBjaGFyICpmb3JtYXQsIC4uLik7CisgICBpbnQgUHlBcmdfUGFyc2VUdXBsZShQeU9iamVjdCAqYXJnLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLik7CiAKIFRoZSAqYXJnKiBhcmd1bWVudCBtdXN0IGJlIGEgdHVwbGUgb2JqZWN0IGNvbnRhaW5pbmcgYW4gYXJndW1lbnQgbGlzdCBwYXNzZWQKIGZyb20gUHl0aG9uIHRvIGEgQyBmdW5jdGlvbi4gIFRoZSAqZm9ybWF0KiBhcmd1bWVudCBtdXN0IGJlIGEgZm9ybWF0IHN0cmluZywKQEAgLTY3OCw3ICs2ODMsNyBAQAogVGhlIDpjOmZ1bmM6YFB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3Jkc2AgZnVuY3Rpb24gaXMgZGVjbGFyZWQgYXMgZm9sbG93czo6CiAKICAgIGludCBQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoUHlPYmplY3QgKmFyZywgUHlPYmplY3QgKmt3ZGljdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqZm9ybWF0LCBjaGFyICprd2xpc3RbXSwgLi4uKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZm9ybWF0LCBjaGFyICprd2xpc3RbXSwgLi4uKTsKIAogVGhlICphcmcqIGFuZCAqZm9ybWF0KiBwYXJhbWV0ZXJzIGFyZSBpZGVudGljYWwgdG8gdGhvc2Ugb2YgdGhlCiA6YzpmdW5jOmBQeUFyZ19QYXJzZVR1cGxlYCBmdW5jdGlvbi4gIFRoZSAqa3dkaWN0KiBwYXJhbWV0ZXIgaXMgdGhlIGRpY3Rpb25hcnkgb2YKQEAgLTc1NSw3ICs3NjAsNyBAQAogVGhpcyBmdW5jdGlvbiBpcyB0aGUgY291bnRlcnBhcnQgdG8gOmM6ZnVuYzpgUHlBcmdfUGFyc2VUdXBsZWAuICBJdCBpcyBkZWNsYXJlZAogYXMgZm9sbG93czo6CiAKLSAgIFB5T2JqZWN0ICpQeV9CdWlsZFZhbHVlKGNoYXIgKmZvcm1hdCwgLi4uKTsKKyAgIFB5T2JqZWN0ICpQeV9CdWlsZFZhbHVlKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKTsKIAogSXQgcmVjb2duaXplcyBhIHNldCBvZiBmb3JtYXQgdW5pdHMgc2ltaWxhciB0byB0aGUgb25lcyByZWNvZ25pemVkIGJ5CiA6YzpmdW5jOmBQeUFyZ19QYXJzZVR1cGxlYCwgYnV0IHRoZSBhcmd1bWVudHMgKHdoaWNoIGFyZSBpbnB1dCB0byB0aGUgZnVuY3Rpb24sCkBAIC04NTcsMTEgKzg2Miw4IEBACiBmcm9tIHRoZSBvYmplY3RzIGluIHRoZSBjeWNsZSwgZXZlbiB0aG91Z2ggdGhlcmUgYXJlIG5vIGZ1cnRoZXIgcmVmZXJlbmNlcyB0bwogdGhlIGN5Y2xlIGl0c2VsZi4KIAotVGhlIGN5Y2xlIGRldGVjdG9yIGlzIGFibGUgdG8gZGV0ZWN0IGdhcmJhZ2UgY3ljbGVzIGFuZCBjYW4gcmVjbGFpbSB0aGVtIHNvIGxvbmcKLWFzIHRoZXJlIGFyZSBubyBmaW5hbGl6ZXJzIGltcGxlbWVudGVkIGluIFB5dGhvbiAoOm1ldGg6YF9fZGVsX19gIG1ldGhvZHMpLgotV2hlbiB0aGVyZSBhcmUgc3VjaCBmaW5hbGl6ZXJzLCB0aGUgZGV0ZWN0b3IgZXhwb3NlcyB0aGUgY3ljbGVzIHRocm91Z2ggdGhlCi06bW9kOmBnY2AgbW9kdWxlIChzcGVjaWZpY2FsbHksIHRoZSA6YXR0cjpgfmdjLmdhcmJhZ2VgIHZhcmlhYmxlIGluIHRoYXQgbW9kdWxlKS4KLVRoZSA6bW9kOmBnY2AgbW9kdWxlIGFsc28gZXhwb3NlcyBhIHdheSB0byBydW4gdGhlIGRldGVjdG9yICh0aGUKK1RoZSBjeWNsZSBkZXRlY3RvciBpcyBhYmxlIHRvIGRldGVjdCBnYXJiYWdlIGN5Y2xlcyBhbmQgY2FuIHJlY2xhaW0gdGhlbS4KK1RoZSA6bW9kOmBnY2AgbW9kdWxlIGV4cG9zZXMgYSB3YXkgdG8gcnVuIHRoZSBkZXRlY3RvciAodGhlCiA6ZnVuYzpgfmdjLmNvbGxlY3RgIGZ1bmN0aW9uKSwgYXMgd2VsbCBhcyBjb25maWd1cmF0aW9uCiBpbnRlcmZhY2VzIGFuZCB0aGUgYWJpbGl0eSB0byBkaXNhYmxlIHRoZSBkZXRlY3RvciBhdCBydW50aW1lLiAgVGhlIGN5Y2xlCiBkZXRlY3RvciBpcyBjb25zaWRlcmVkIGFuIG9wdGlvbmFsIGNvbXBvbmVudDsgdGhvdWdoIGl0IGlzIGluY2x1ZGVkIGJ5IGRlZmF1bHQsCmRpZmYgLS1naXQgYS9Eb2MvZXh0ZW5kaW5nL2luZGV4LnJzdCBiL0RvYy9leHRlbmRpbmcvaW5kZXgucnN0CmluZGV4IDQ0YTdmOTIuLmRkNDM5MjYgMTAwNjQ0Ci0tLSBhL0RvYy9leHRlbmRpbmcvaW5kZXgucnN0CisrKyBiL0RvYy9leHRlbmRpbmcvaW5kZXgucnN0CkBAIC0yMSwxNCArMjEsMzEgQEAKIEZvciBhIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIHRoZSB3aG9sZSBQeXRob24vQyBBUEksIHNlZSB0aGUgc2VwYXJhdGUKIDpyZWY6YGMtYXBpLWluZGV4YC4KIAotLi4gbm90ZTo6CiAKLSAgIFRoaXMgZ3VpZGUgb25seSBjb3ZlcnMgdGhlIGJhc2ljIHRvb2xzIGZvciBjcmVhdGluZyBleHRlbnNpb25zIHByb3ZpZGVkCi0gICBhcyBwYXJ0IG9mIHRoaXMgdmVyc2lvbiBvZiBDUHl0aG9uLiBUaGlyZCBwYXJ0eSB0b29scyBtYXkgb2ZmZXIgc2ltcGxlcgotICAgYWx0ZXJuYXRpdmVzLiBSZWZlciB0byB0aGUgYGJpbmFyeSBleHRlbnNpb25zIHNlY3Rpb24KLSAgIDxodHRwczovL3B5dGhvbi1wYWNrYWdpbmctdXNlci1ndWlkZS5yZWFkdGhlZG9jcy5vcmcvZW4vbGF0ZXN0L2V4dGVuc2lvbnMuaHRtbD5gX18KLSAgIGluIHRoZSBQeXRob24gUGFja2FnaW5nIFVzZXIgR3VpZGUgZm9yIG1vcmUgaW5mb3JtYXRpb24uCitSZWNvbW1lbmRlZCB0aGlyZCBwYXJ0eSB0b29scworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAorVGhpcyBndWlkZSBvbmx5IGNvdmVycyB0aGUgYmFzaWMgdG9vbHMgZm9yIGNyZWF0aW5nIGV4dGVuc2lvbnMgcHJvdmlkZWQKK2FzIHBhcnQgb2YgdGhpcyB2ZXJzaW9uIG9mIENQeXRob24uIFRoaXJkIHBhcnR5IHRvb2xzIGxpa2UgQ3l0aG9uLAorYGBjZmZpYGAsIFNXSUcgYW5kIE51bWJhIG9mZmVyIGJvdGggc2ltcGxlciBhbmQgbW9yZSBzb3BoaXN0aWNhdGVkCithcHByb2FjaGVzIHRvIGNyZWF0aW5nIEMgYW5kIEMrKyBleHRlbnNpb25zIGZvciBQeXRob24uCisKKy4uIHNlZWFsc286OgorCisgICBgUHl0aG9uIFBhY2thZ2luZyBVc2VyIEd1aWRlOiBCaW5hcnkgRXh0ZW5zaW9ucyA8aHR0cHM6Ly9wYWNrYWdpbmcucHl0aG9uLm9yZy9lbi9sYXRlc3QvZXh0ZW5zaW9ucy5odG1sPmBfCisgICAgICBUaGUgUHl0aG9uIFBhY2thZ2luZyBVc2VyIEd1aWRlIG5vdCBvbmx5IGNvdmVycyBzZXZlcmFsIGF2YWlsYWJsZQorICAgICAgdG9vbHMgdGhhdCBzaW1wbGlmeSB0aGUgY3JlYXRpb24gb2YgYmluYXJ5IGV4dGVuc2lvbnMsIGJ1dCBhbHNvCisgICAgICBkaXNjdXNzZXMgdGhlIHZhcmlvdXMgcmVhc29ucyB3aHkgY3JlYXRpbmcgYW4gZXh0ZW5zaW9uIG1vZHVsZSBtYXkgYmUKKyAgICAgIGRlc2lyYWJsZSBpbiB0aGUgZmlyc3QgcGxhY2UuCisKKworQ3JlYXRpbmcgZXh0ZW5zaW9ucyB3aXRob3V0IHRoaXJkIHBhcnR5IHRvb2xzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBzZWN0aW9uIG9mIHRoZSBndWlkZSBjb3ZlcnMgY3JlYXRpbmcgQyBhbmQgQysrIGV4dGVuc2lvbnMgd2l0aG91dAorYXNzaXN0YW5jZSBmcm9tIHRoaXJkIHBhcnR5IHRvb2xzLiBJdCBpcyBpbnRlbmRlZCBwcmltYXJpbHkgZm9yIGNyZWF0b3JzCitvZiB0aG9zZSB0b29scywgcmF0aGVyIHRoYW4gYmVpbmcgYSByZWNvbW1lbmRlZCB3YXkgdG8gY3JlYXRlIHlvdXIgb3duCitDIGV4dGVuc2lvbnMuCiAKIC4uIHRvY3RyZWU6OgogICAgOm1heGRlcHRoOiAyCkBAIC0zOCw0ICs1NSwxNyBAQAogICAgbmV3dHlwZXMucnN0CiAgICBidWlsZGluZy5yc3QKICAgIHdpbmRvd3MucnN0CisKK0VtYmVkZGluZyB0aGUgQ1B5dGhvbiBydW50aW1lIGluIGEgbGFyZ2VyIGFwcGxpY2F0aW9uCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitTb21ldGltZXMsIHJhdGhlciB0aGFuIGNyZWF0aW5nIGFuIGV4dGVuc2lvbiB0aGF0IHJ1bnMgaW5zaWRlIHRoZSBQeXRob24KK2ludGVycHJldGVyIGFzIHRoZSBtYWluIGFwcGxpY2F0aW9uLCBpdCBpcyBkZXNpcmFibGUgdG8gaW5zdGVhZCBlbWJlZAordGhlIENQeXRob24gcnVudGltZSBpbnNpZGUgYSBsYXJnZXIgYXBwbGljYXRpb24uIFRoaXMgc2VjdGlvbiBjb3ZlcnMKK3NvbWUgb2YgdGhlIGRldGFpbHMgaW52b2x2ZWQgaW4gZG9pbmcgdGhhdCBzdWNjZXNzZnVsbHkuCisKKy4uIHRvY3RyZWU6OgorICAgOm1heGRlcHRoOiAyCisgICA6bnVtYmVyZWQ6CisKICAgIGVtYmVkZGluZy5yc3QKZGlmZiAtLWdpdCBhL0RvYy9leHRlbmRpbmcvbmV3dHlwZXMucnN0IGIvRG9jL2V4dGVuZGluZy9uZXd0eXBlcy5yc3QKaW5kZXggZjQ4NGJhNC4uMDg4NDQzMCAxMDA2NDQKLS0tIGEvRG9jL2V4dGVuZGluZy9uZXd0eXBlcy5yc3QKKysrIGIvRG9jL2V4dGVuZGluZy9uZXd0eXBlcy5yc3QKQEAgLTE1Nyw3ICsxNTcsOCBAQAogICAgUHlfVFBGTEFHU19ERUZBVUxULCAgICAgICAgLyogdHBfZmxhZ3MgKi8KIAogQWxsIHR5cGVzIHNob3VsZCBpbmNsdWRlIHRoaXMgY29uc3RhbnQgaW4gdGhlaXIgZmxhZ3MuICBJdCBlbmFibGVzIGFsbCBvZiB0aGUKLW1lbWJlcnMgZGVmaW5lZCBieSB0aGUgY3VycmVudCB2ZXJzaW9uIG9mIFB5dGhvbi4KK21lbWJlcnMgZGVmaW5lZCB1bnRpbCBhdCBsZWFzdCBQeXRob24gMy4zLiAgSWYgeW91IG5lZWQgZnVydGhlciBtZW1iZXJzLAoreW91IHdpbGwgbmVlZCB0byBPUiB0aGUgY29ycmVzcG9uZGluZyBmbGFncy4KIAogV2UgcHJvdmlkZSBhIGRvYyBzdHJpbmcgZm9yIHRoZSB0eXBlIGluIDpjOm1lbWJlcjpgflB5VHlwZU9iamVjdC50cF9kb2NgLiA6OgogCkBAIC0zODIsNyArMzgzLDggQEAKIGNhbid0IGd1YXJhbnRlZSB0aGF0IHRoZSBpbml0aWFsaXplciBpcyBjYWxsZWQuICBUaGUgaW5pdGlhbGl6ZXIgaXNuJ3QgY2FsbGVkCiB3aGVuIHVucGlja2xpbmcgb2JqZWN0cyBhbmQgaXQgY2FuIGJlIG92ZXJyaWRkZW4uICBPdXIgaW5pdGlhbGl6ZXIgYWNjZXB0cwogYXJndW1lbnRzIHRvIHByb3ZpZGUgaW5pdGlhbCB2YWx1ZXMgZm9yIG91ciBpbnN0YW5jZS4gSW5pdGlhbGl6ZXJzIGFsd2F5cyBhY2NlcHQKLXBvc2l0aW9uYWwgYW5kIGtleXdvcmQgYXJndW1lbnRzLgorcG9zaXRpb25hbCBhbmQga2V5d29yZCBhcmd1bWVudHMuIEluaXRpYWxpemVycyBzaG91bGQgcmV0dXJuIGVpdGhlciAwIG9uCitzdWNjZXNzIG9yIC0xIG9uIGVycm9yLgogCiBJbml0aWFsaXplcnMgY2FuIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcy4gIEFueW9uZSBjYW4gY2FsbCB0aGUgOm1ldGg6YF9faW5pdF9fYAogbWV0aG9kIG9uIG91ciBvYmplY3RzLiAgRm9yIHRoaXMgcmVhc29uLCB3ZSBoYXZlIHRvIGJlIGV4dHJhIGNhcmVmdWwgd2hlbgpAQCAtODkxLDIwICs4OTMsMjAgQEAKIGFsbCB0aGUgZmllbGRzIHlvdSBuZWVkIChldmVuIGlmIHRoZXkncmUgaW5pdGlhbGl6ZWQgdG8gYGAwYGApIGFuZCB0aGVuIGNoYW5nZQogdGhlIHZhbHVlcyB0byBzdWl0IHlvdXIgbmV3IHR5cGUuIDo6CiAKLSAgIGNoYXIgKnRwX25hbWU7IC8qIEZvciBwcmludGluZyAqLworICAgY29uc3QgY2hhciAqdHBfbmFtZTsgLyogRm9yIHByaW50aW5nICovCiAKIFRoZSBuYW1lIG9mIHRoZSB0eXBlIC0gYXMgbWVudGlvbmVkIGluIHRoZSBsYXN0IHNlY3Rpb24sIHRoaXMgd2lsbCBhcHBlYXIgaW4KIHZhcmlvdXMgcGxhY2VzLCBhbG1vc3QgZW50aXJlbHkgZm9yIGRpYWdub3N0aWMgcHVycG9zZXMuIFRyeSB0byBjaG9vc2Ugc29tZXRoaW5nCiB0aGF0IHdpbGwgYmUgaGVscGZ1bCBpbiBzdWNoIGEgc2l0dWF0aW9uISA6OgogCi0gICBpbnQgdHBfYmFzaWNzaXplLCB0cF9pdGVtc2l6ZTsgLyogRm9yIGFsbG9jYXRpb24gKi8KKyAgIFB5X3NzaXplX3QgdHBfYmFzaWNzaXplLCB0cF9pdGVtc2l6ZTsgLyogRm9yIGFsbG9jYXRpb24gKi8KIAogVGhlc2UgZmllbGRzIHRlbGwgdGhlIHJ1bnRpbWUgaG93IG11Y2ggbWVtb3J5IHRvIGFsbG9jYXRlIHdoZW4gbmV3IG9iamVjdHMgb2YKIHRoaXMgdHlwZSBhcmUgY3JlYXRlZC4gIFB5dGhvbiBoYXMgc29tZSBidWlsdC1pbiBzdXBwb3J0IGZvciB2YXJpYWJsZSBsZW5ndGgKIHN0cnVjdHVyZXMgKHRoaW5rOiBzdHJpbmdzLCBsaXN0cykgd2hpY2ggaXMgd2hlcmUgdGhlIDpjOm1lbWJlcjpgflB5VHlwZU9iamVjdC50cF9pdGVtc2l6ZWAgZmllbGQKIGNvbWVzIGluLiAgVGhpcyB3aWxsIGJlIGRlYWx0IHdpdGggbGF0ZXIuIDo6CiAKLSAgIGNoYXIgKnRwX2RvYzsKKyAgIGNvbnN0IGNoYXIgKnRwX2RvYzsKIAogSGVyZSB5b3UgY2FuIHB1dCBhIHN0cmluZyAob3IgaXRzIGFkZHJlc3MpIHRoYXQgeW91IHdhbnQgcmV0dXJuZWQgd2hlbiB0aGUKIFB5dGhvbiBzY3JpcHQgcmVmZXJlbmNlcyBgYG9iai5fX2RvY19fYGAgdG8gcmV0cmlldmUgdGhlIGRvYyBzdHJpbmcuCkBAIC05MjgsOCArOTMwLDkgQEAKIAogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIHRoZSBpbnN0YW5jZSBvZiB5b3VyIHR5cGUgaXMKIHJlZHVjZWQgdG8gemVybyBhbmQgdGhlIFB5dGhvbiBpbnRlcnByZXRlciB3YW50cyB0byByZWNsYWltIGl0LiAgSWYgeW91ciB0eXBlCi1oYXMgbWVtb3J5IHRvIGZyZWUgb3Igb3RoZXIgY2xlYW4tdXAgdG8gcGVyZm9ybSwgcHV0IGl0IGhlcmUuICBUaGUgb2JqZWN0IGl0c2VsZgotbmVlZHMgdG8gYmUgZnJlZWQgaGVyZSBhcyB3ZWxsLiAgSGVyZSBpcyBhbiBleGFtcGxlIG9mIHRoaXMgZnVuY3Rpb246OgoraGFzIG1lbW9yeSB0byBmcmVlIG9yIG90aGVyIGNsZWFuLXVwIHRvIHBlcmZvcm0sIHlvdSBjYW4gcHV0IGl0IGhlcmUuICBUaGUKK29iamVjdCBpdHNlbGYgbmVlZHMgdG8gYmUgZnJlZWQgaGVyZSBhcyB3ZWxsLiAgSGVyZSBpcyBhbiBleGFtcGxlIG9mIHRoaXMKK2Z1bmN0aW9uOjoKIAogICAgc3RhdGljIHZvaWQKICAgIG5ld2RhdGF0eXBlX2RlYWxsb2MobmV3ZGF0YXR5cGVvYmplY3QgKiBvYmopCkBAIC05ODAsNiArOTgzLDIyIEBACiAgICAgICAgUHlfVFlQRShvYmopLT50cF9mcmVlKChQeU9iamVjdCopc2VsZik7CiAgICB9CiAKKy4uIG5vdGU6OgorICAgVGhlcmUgYXJlIGxpbWl0YXRpb25zIHRvIHdoYXQgeW91IGNhbiBzYWZlbHkgZG8gaW4gYSBkZWFsbG9jYXRvciBmdW5jdGlvbi4KKyAgIEZpcnN0LCBpZiB5b3VyIHR5cGUgc3VwcG9ydHMgZ2FyYmFnZSBjb2xsZWN0aW9uICh1c2luZyA6YzptZW1iZXI6YH5QeVR5cGVPYmplY3QudHBfdHJhdmVyc2VgCisgICBhbmQvb3IgOmM6bWVtYmVyOmB+UHlUeXBlT2JqZWN0LnRwX2NsZWFyYCksIHNvbWUgb2YgdGhlIG9iamVjdCdzIG1lbWJlcnMgY2FuIGhhdmUgYmVlbgorICAgY2xlYXJlZCBvciBmaW5hbGl6ZWQgYnkgdGhlIHRpbWUgOmM6bWVtYmVyOmB+UHlUeXBlT2JqZWN0LnRwX2RlYWxsb2NgIGlzIGNhbGxlZC4gIFNlY29uZCwgaW4KKyAgIDpjOm1lbWJlcjpgflB5VHlwZU9iamVjdC50cF9kZWFsbG9jYCwgeW91ciBvYmplY3QgaXMgaW4gYW4gdW5zdGFibGUgc3RhdGU6IGl0cyByZWZlcmVuY2UKKyAgIGNvdW50IGlzIGVxdWFsIHRvIHplcm8uICBBbnkgY2FsbCB0byBhIG5vbi10cml2aWFsIG9iamVjdCBvciBBUEkgKGFzIGluIHRoZQorICAgZXhhbXBsZSBhYm92ZSkgbWlnaHQgZW5kIHVwIGNhbGxpbmcgOmM6bWVtYmVyOmB+UHlUeXBlT2JqZWN0LnRwX2RlYWxsb2NgIGFnYWluLCBjYXVzaW5nIGEKKyAgIGRvdWJsZSBmcmVlIGFuZCBhIGNyYXNoLgorCisgICBTdGFydGluZyB3aXRoIFB5dGhvbiAzLjQsIGl0IGlzIHJlY29tbWVuZGVkIG5vdCB0byBwdXQgYW55IGNvbXBsZXgKKyAgIGZpbmFsaXphdGlvbiBjb2RlIGluIDpjOm1lbWJlcjpgflB5VHlwZU9iamVjdC50cF9kZWFsbG9jYCwgYW5kIGluc3RlYWQgdXNlIHRoZSBuZXcKKyAgIDpjOm1lbWJlcjpgflB5VHlwZU9iamVjdC50cF9maW5hbGl6ZWAgdHlwZSBtZXRob2QuCisKKyAgIC4uIHNlZWFsc286OgorICAgICAgOnBlcDpgNDQyYCBleHBsYWlucyB0aGUgbmV3IGZpbmFsaXphdGlvbiBzY2hlbWUuCiAKIC4uIGluZGV4OjoKICAgIHNpbmdsZTogc3RyaW5nOyBvYmplY3QgcmVwcmVzZW50YXRpb24KQEAgLTExODcsNyArMTIwNiw3IEBACiAgICB7CiAgICAgICAgaWYgKHN0cmNtcChuYW1lLCAiZGF0YSIpID09IDApCiAgICAgICAgewotICAgICAgICAgICByZXR1cm4gUHlJbnRfRnJvbUxvbmcob2JqLT5kYXRhKTsKKyAgICAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZyhvYmotPmRhdGEpOwogICAgICAgIH0KIAogICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19BdHRyaWJ1dGVFcnJvciwKZGlmZiAtLWdpdCBhL0RvYy9leHRlbmRpbmcvd2luZG93cy5yc3QgYi9Eb2MvZXh0ZW5kaW5nL3dpbmRvd3MucnN0CmluZGV4IDNmZDVlNTcuLjY3YmRkNDcgMTAwNjQ0Ci0tLSBhL0RvYy9leHRlbmRpbmcvd2luZG93cy5yc3QKKysrIGIvRG9jL2V4dGVuZGluZy93aW5kb3dzLnJzdApAQCAtMzcsMTUwICszNyw5IEBACiBhcmUgb24gVW5peDogdXNlIHRoZSA6bW9kOmBkaXN0dXRpbHNgIHBhY2thZ2UgdG8gY29udHJvbCB0aGUgYnVpbGQgcHJvY2Vzcywgb3IKIGRvIHRoaW5ncyBtYW51YWxseS4gIFRoZSBkaXN0dXRpbHMgYXBwcm9hY2ggd29ya3Mgd2VsbCBmb3IgbW9zdCBleHRlbnNpb25zOwogZG9jdW1lbnRhdGlvbiBvbiB1c2luZyA6bW9kOmBkaXN0dXRpbHNgIHRvIGJ1aWxkIGFuZCBwYWNrYWdlIGV4dGVuc2lvbiBtb2R1bGVzCi1pcyBhdmFpbGFibGUgaW4gOnJlZjpgZGlzdHV0aWxzLWluZGV4YC4gIFRoaXMgc2VjdGlvbiBkZXNjcmliZXMgdGhlIG1hbnVhbAotYXBwcm9hY2ggdG8gYnVpbGRpbmcgUHl0aG9uIGV4dGVuc2lvbnMgd3JpdHRlbiBpbiBDIG9yIEMrKy4KLQotVG8gYnVpbGQgZXh0ZW5zaW9ucyB1c2luZyB0aGVzZSBpbnN0cnVjdGlvbnMsIHlvdSBuZWVkIHRvIGhhdmUgYSBjb3B5IG9mIHRoZQotUHl0aG9uIHNvdXJjZXMgb2YgdGhlIHNhbWUgdmVyc2lvbiBhcyB5b3VyIGluc3RhbGxlZCBQeXRob24uIFlvdSB3aWxsIG5lZWQKLU1pY3Jvc29mdCBWaXN1YWwgQysrICJEZXZlbG9wZXIgU3R1ZGlvIjsgcHJvamVjdCBmaWxlcyBhcmUgc3VwcGxpZWQgZm9yIFZDKysKLXZlcnNpb24gNy4xLCBidXQgeW91IGNhbiB1c2Ugb2xkZXIgdmVyc2lvbnMgb2YgVkMrKy4gIE5vdGljZSB0aGF0IHlvdSBzaG91bGQgdXNlCi10aGUgc2FtZSB2ZXJzaW9uIG9mIFZDKyt0aGF0IHdhcyB1c2VkIHRvIGJ1aWxkIFB5dGhvbiBpdHNlbGYuIFRoZSBleGFtcGxlIGZpbGVzCi1kZXNjcmliZWQgaGVyZSBhcmUgZGlzdHJpYnV0ZWQgd2l0aCB0aGUgUHl0aG9uIHNvdXJjZXMgaW4gdGhlCi06ZmlsZTpgUENcXGV4YW1wbGVfbnRcXGAgZGlyZWN0b3J5LgotCi0jLiAqKkNvcHkgdGhlIGV4YW1wbGUgZmlsZXMqKiAtLS0gIFRoZSA6ZmlsZTpgZXhhbXBsZV9udGAgZGlyZWN0b3J5IGlzIGEKLSAgIHN1YmRpcmVjdG9yeSBvZiB0aGUgOmZpbGU6YFBDYCBkaXJlY3RvcnksIGluIG9yZGVyIHRvIGtlZXAgYWxsIHRoZSBQQy1zcGVjaWZpYwotICAgZmlsZXMgdW5kZXIgdGhlIHNhbWUgZGlyZWN0b3J5IGluIHRoZSBzb3VyY2UgZGlzdHJpYnV0aW9uLiAgSG93ZXZlciwgdGhlCi0gICA6ZmlsZTpgZXhhbXBsZV9udGAgZGlyZWN0b3J5IGNhbid0IGFjdHVhbGx5IGJlIHVzZWQgZnJvbSB0aGlzIGxvY2F0aW9uLiAgWW91Ci0gICBmaXJzdCBuZWVkIHRvIGNvcHkgb3IgbW92ZSBpdCB1cCBvbmUgbGV2ZWwsIHNvIHRoYXQgOmZpbGU6YGV4YW1wbGVfbnRgIGlzIGEKLSAgIHNpYmxpbmcgb2YgdGhlIDpmaWxlOmBQQ2AgYW5kIDpmaWxlOmBJbmNsdWRlYCBkaXJlY3Rvcmllcy4gIERvIGFsbCB5b3VyIHdvcmsKLSAgIGZyb20gd2l0aGluIHRoaXMgbmV3IGxvY2F0aW9uLgotCi0jLiAqKk9wZW4gdGhlIHByb2plY3QqKiAtLS0gIEZyb20gVkMrKywgdXNlIHRoZSA6bWVudXNlbGVjdGlvbjpgRmlsZSAtLT4gT3BlbgotICAgU29sdXRpb25gIGRpYWxvZyAobm90IDptZW51c2VsZWN0aW9uOmBGaWxlIC0tPiBPcGVuYCEpLiAgTmF2aWdhdGUgdG8gYW5kIHNlbGVjdAotICAgdGhlIGZpbGUgOmZpbGU6YGV4YW1wbGUuc2xuYCwgaW4gdGhlICpjb3B5KiBvZiB0aGUgOmZpbGU6YGV4YW1wbGVfbnRgIGRpcmVjdG9yeQotICAgeW91IG1hZGUgYWJvdmUuICBDbGljayBPcGVuLgotCi0jLiAqKkJ1aWxkIHRoZSBleGFtcGxlIERMTCoqIC0tLSAgSW4gb3JkZXIgdG8gY2hlY2sgdGhhdCBldmVyeXRoaW5nIGlzIHNldCB1cAotICAgcmlnaHQsIHRyeSBidWlsZGluZzoKLQotIy4gU2VsZWN0IGEgY29uZmlndXJhdGlvbi4gIFRoaXMgc3RlcCBpcyBvcHRpb25hbC4gIENob29zZQotICAgOm1lbnVzZWxlY3Rpb246YEJ1aWxkIC0tPiBDb25maWd1cmF0aW9uIE1hbmFnZXIgLS0+IEFjdGl2ZSBTb2x1dGlvbiBDb25maWd1cmF0aW9uYAotICAgYW5kIHNlbGVjdCBlaXRoZXIgOmd1aWxhYmVsOmBSZWxlYXNlYCAgb3IgOmd1aWxhYmVsOmBEZWJ1Z2AuICBJZiB5b3Ugc2tpcCB0aGlzCi0gICBzdGVwLCBWQysrIHdpbGwgdXNlIHRoZSBEZWJ1ZyBjb25maWd1cmF0aW9uIGJ5IGRlZmF1bHQuCi0KLSMuIEJ1aWxkIHRoZSBETEwuICBDaG9vc2UgOm1lbnVzZWxlY3Rpb246YEJ1aWxkIC0tPiBCdWlsZCBTb2x1dGlvbmAuICBUaGlzCi0gICBjcmVhdGVzIGFsbCBpbnRlcm1lZGlhdGUgYW5kIHJlc3VsdCBmaWxlcyBpbiBhIHN1YmRpcmVjdG9yeSBjYWxsZWQgZWl0aGVyCi0gICA6ZmlsZTpgRGVidWdgIG9yIDpmaWxlOmBSZWxlYXNlYCwgZGVwZW5kaW5nIG9uIHdoaWNoIGNvbmZpZ3VyYXRpb24geW91IHNlbGVjdGVkCi0gICBpbiB0aGUgcHJlY2VkaW5nIHN0ZXAuCi0KLSMuICoqVGVzdGluZyB0aGUgZGVidWctbW9kZSBETEwqKiAtLS0gIE9uY2UgdGhlIERlYnVnIGJ1aWxkIGhhcyBzdWNjZWVkZWQsIGJyaW5nCi0gICB1cCBhIERPUyBib3gsIGFuZCBjaGFuZ2UgdG8gdGhlIDpmaWxlOmBleGFtcGxlX250XFxEZWJ1Z2AgZGlyZWN0b3J5LiAgWW91IHNob3VsZAotICAgbm93IGJlIGFibGUgdG8gcmVwZWF0IHRoZSBmb2xsb3dpbmcgc2Vzc2lvbiAoYGBDPmBgIGlzIHRoZSBET1MgcHJvbXB0LCBgYD4+PmBgCi0gICBpcyB0aGUgUHl0aG9uIHByb21wdDsgbm90ZSB0aGF0IGJ1aWxkIGluZm9ybWF0aW9uIGFuZCB2YXJpb3VzIGRlYnVnIG91dHB1dCBmcm9tCi0gICBQeXRob24gbWF5IG5vdCBtYXRjaCB0aGlzIHNjcmVlbiBkdW1wIGV4YWN0bHkpOjoKLQotICAgICAgQz4uLlwuLlxQQ2J1aWxkXHB5dGhvbl9kCi0gICAgICBBZGRpbmcgcGFyc2VyIGFjY2VsZXJhdG9ycyAuLi4KLSAgICAgIERvbmUuCi0gICAgICBQeXRob24gMi4yICgjMjgsIERlYyAxOSAyMDAxLCAyMzoyNjozNykgW01TQyAzMiBiaXQgKEludGVsKV0gb24gd2luMzIKLSAgICAgIFR5cGUgImNvcHlyaWdodCIsICJjcmVkaXRzIiBvciAibGljZW5zZSIgZm9yIG1vcmUgaW5mb3JtYXRpb24uCi0gICAgICA+Pj4gaW1wb3J0IGV4YW1wbGUKLSAgICAgIFs0ODk3IHJlZnNdCi0gICAgICA+Pj4gZXhhbXBsZS5mb28oKQotICAgICAgSGVsbG8sIHdvcmxkCi0gICAgICBbNDkwMyByZWZzXQotICAgICAgPj4+Ci0KLSAgIENvbmdyYXR1bGF0aW9ucyEgIFlvdSd2ZSBzdWNjZXNzZnVsbHkgYnVpbHQgeW91ciBmaXJzdCBQeXRob24gZXh0ZW5zaW9uIG1vZHVsZS4KLQotIy4gKipDcmVhdGluZyB5b3VyIG93biBwcm9qZWN0KiogLS0tICBDaG9vc2UgYSBuYW1lIGFuZCBjcmVhdGUgYSBkaXJlY3RvcnkgZm9yCi0gICBpdC4gIENvcHkgeW91ciBDIHNvdXJjZXMgaW50byBpdC4gIE5vdGUgdGhhdCB0aGUgbW9kdWxlIHNvdXJjZSBmaWxlIG5hbWUgZG9lcwotICAgbm90IG5lY2Vzc2FyaWx5IGhhdmUgdG8gbWF0Y2ggdGhlIG1vZHVsZSBuYW1lLCBidXQgdGhlIG5hbWUgb2YgdGhlCi0gICBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiBzaG91bGQgbWF0Y2ggdGhlIG1vZHVsZSBuYW1lIC0tLSB5b3UgY2FuIG9ubHkgaW1wb3J0IGEKLSAgIG1vZHVsZSA6bW9kOmBzcGFtYCBpZiBpdHMgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gaXMgY2FsbGVkIDpjOmZ1bmM6YGluaXRzcGFtYCwKLSAgIGFuZCBpdCBzaG91bGQgY2FsbCA6YzpmdW5jOmBQeV9Jbml0TW9kdWxlYCB3aXRoIHRoZSBzdHJpbmcgYGAic3BhbSJgYCBhcyBpdHMKLSAgIGZpcnN0IGFyZ3VtZW50ICh1c2UgdGhlIG1pbmltYWwgOmZpbGU6YGV4YW1wbGUuY2AgaW4gdGhpcyBkaXJlY3RvcnkgYXMgYSBndWlkZSkuCi0gICBCeSBjb252ZW50aW9uLCBpdCBsaXZlcyBpbiBhIGZpbGUgY2FsbGVkIDpmaWxlOmBzcGFtLmNgIG9yIDpmaWxlOmBzcGFtbW9kdWxlLmNgLgotICAgVGhlIG91dHB1dCBmaWxlIHNob3VsZCBiZSBjYWxsZWQgOmZpbGU6YHNwYW0ucHlkYCAoaW4gUmVsZWFzZSBtb2RlKSBvcgotICAgOmZpbGU6YHNwYW1fZC5weWRgIChpbiBEZWJ1ZyBtb2RlKS4gVGhlIGV4dGVuc2lvbiA6ZmlsZTpgLnB5ZGAgd2FzIGNob3NlbgotICAgdG8gYXZvaWQgY29uZnVzaW9uIHdpdGggYSBzeXN0ZW0gbGlicmFyeSA6ZmlsZTpgc3BhbS5kbGxgIHRvIHdoaWNoIHlvdXIgbW9kdWxlCi0gICBjb3VsZCBiZSBhIFB5dGhvbiBpbnRlcmZhY2UuCi0KLSAgIE5vdyB5b3VyIG9wdGlvbnMgYXJlOgotCi0jLiBDb3B5IDpmaWxlOmBleGFtcGxlLnNsbmAgYW5kIDpmaWxlOmBleGFtcGxlLnZjcHJvamAsIHJlbmFtZSB0aGVtIHRvCi0gICA6ZmlsZTpgc3BhbS5cKmAsIGFuZCBlZGl0IHRoZW0gYnkgaGFuZCwgb3IKLQotIy4gQ3JlYXRlIGEgYnJhbmQgbmV3IHByb2plY3Q7IGluc3RydWN0aW9ucyBhcmUgYmVsb3cuCi0KLSAgIEluIGVpdGhlciBjYXNlLCBjb3B5IDpmaWxlOmBleGFtcGxlX250XFxleGFtcGxlLmRlZmAgdG8gOmZpbGU6YHNwYW1cXHNwYW0uZGVmYCwKLSAgIGFuZCBlZGl0IHRoZSBuZXcgOmZpbGU6YHNwYW0uZGVmYCBzbyBpdHMgc2Vjb25kIGxpbmUgY29udGFpbnMgdGhlIHN0cmluZwotICAgJ2BgaW5pdHNwYW1gYCcuICBJZiB5b3UgY3JlYXRlZCBhIG5ldyBwcm9qZWN0IHlvdXJzZWxmLCBhZGQgdGhlIGZpbGUKLSAgIDpmaWxlOmBzcGFtLmRlZmAgdG8gdGhlIHByb2plY3Qgbm93LiAgKFRoaXMgaXMgYW4gYW5ub3lpbmcgbGl0dGxlIGZpbGUgd2l0aCBvbmx5Ci0gICB0d28gbGluZXMuICBBbiBhbHRlcm5hdGl2ZSBhcHByb2FjaCBpcyB0byBmb3JnZXQgYWJvdXQgdGhlIDpmaWxlOmAuZGVmYCBmaWxlLAotICAgYW5kIGFkZCB0aGUgb3B0aW9uIDpvcHRpb246YC9leHBvcnQ6aW5pdHNwYW1gIHNvbWV3aGVyZSB0byB0aGUgTGluayBzZXR0aW5ncywgYnkKLSAgIG1hbnVhbGx5IGVkaXRpbmcgdGhlIHNldHRpbmcgaW4gUHJvamVjdCBQcm9wZXJ0aWVzIGRpYWxvZykuCi0KLSMuICoqQ3JlYXRpbmcgYSBicmFuZCBuZXcgcHJvamVjdCoqIC0tLSAgVXNlIHRoZSA6bWVudXNlbGVjdGlvbjpgRmlsZSAtLT4gTmV3Ci0gICAtLT4gUHJvamVjdGAgZGlhbG9nIHRvIGNyZWF0ZSBhIG5ldyBQcm9qZWN0IFdvcmtzcGFjZS4gIFNlbGVjdCA6Z3VpbGFiZWw6YFZpc3VhbAotICAgQysrIFByb2plY3RzL1dpbjMyLyBXaW4zMiBQcm9qZWN0YCwgZW50ZXIgdGhlIG5hbWUgKGBgc3BhbWBgKSwgYW5kIG1ha2Ugc3VyZSB0aGUKLSAgIExvY2F0aW9uIGlzIHNldCB0byBwYXJlbnQgb2YgdGhlIDpmaWxlOmBzcGFtYCBkaXJlY3RvcnkgeW91IGhhdmUgY3JlYXRlZCAod2hpY2gKLSAgIHNob3VsZCBiZSBhIGRpcmVjdCBzdWJkaXJlY3Rvcnkgb2YgdGhlIFB5dGhvbiBidWlsZCB0cmVlLCBhIHNpYmxpbmcgb2YKLSAgIDpmaWxlOmBJbmNsdWRlYCBhbmQgOmZpbGU6YFBDYCkuICBTZWxlY3QgV2luMzIgYXMgdGhlIHBsYXRmb3JtIChpbiBteSB2ZXJzaW9uLAotICAgdGhpcyBpcyB0aGUgb25seSBjaG9pY2UpLiAgTWFrZSBzdXJlIHRoZSBDcmVhdGUgbmV3IHdvcmtzcGFjZSByYWRpbyBidXR0b24gaXMKLSAgIHNlbGVjdGVkLiAgQ2xpY2sgT0suCi0KLSAgIFlvdSBzaG91bGQgbm93IGNyZWF0ZSB0aGUgZmlsZSA6ZmlsZTpgc3BhbS5kZWZgIGFzIGluc3RydWN0ZWQgaW4gdGhlIHByZXZpb3VzCi0gICBzZWN0aW9uLiBBZGQgdGhlIHNvdXJjZSBmaWxlcyB0byB0aGUgcHJvamVjdCwgdXNpbmcgOm1lbnVzZWxlY3Rpb246YFByb2plY3QgLS0+Ci0gICBBZGQgRXhpc3RpbmcgSXRlbWAuIFNldCB0aGUgcGF0dGVybiB0byBgYCouKmBgIGFuZCBzZWxlY3QgYm90aCA6ZmlsZTpgc3BhbS5jYAotICAgYW5kIDpmaWxlOmBzcGFtLmRlZmAgYW5kIGNsaWNrIE9LLiAgKEluc2VydGluZyB0aGVtIG9uZSBieSBvbmUgaXMgZmluZSB0b28uKQotCi0gICBOb3cgb3BlbiB0aGUgOm1lbnVzZWxlY3Rpb246YFByb2plY3QgLS0+IHNwYW0gcHJvcGVydGllc2AgZGlhbG9nLiBZb3Ugb25seSBuZWVkCi0gICB0byBjaGFuZ2UgYSBmZXcgc2V0dGluZ3MuICBNYWtlIHN1cmUgOmd1aWxhYmVsOmBBbGwgQ29uZmlndXJhdGlvbnNgIGlzIHNlbGVjdGVkCi0gICBmcm9tIHRoZSA6Z3VpbGFiZWw6YFNldHRpbmdzIGZvcjpgIGRyb3Bkb3duIGxpc3QuICBTZWxlY3QgdGhlIEMvQysrIHRhYi4gIENob29zZQotICAgdGhlIEdlbmVyYWwgY2F0ZWdvcnkgaW4gdGhlIHBvcHVwIG1lbnUgYXQgdGhlIHRvcC4gIFR5cGUgdGhlIGZvbGxvd2luZyB0ZXh0IGluCi0gICB0aGUgZW50cnkgYm94IGxhYmVsZWQgOmd1aWxhYmVsOmBBZGRpdGlvbmFsIEluY2x1ZGUgRGlyZWN0b3JpZXNgOjoKLQotICAgICAgLi5cSW5jbHVkZSwuLlxQQwotCi0gICBUaGVuLCBjaG9vc2UgdGhlIEdlbmVyYWwgY2F0ZWdvcnkgaW4gdGhlIExpbmtlciB0YWIsIGFuZCBlbnRlciA6OgotCi0gICAgICAuLlxQQ2J1aWxkCi0KLSAgIGluIHRoZSB0ZXh0IGJveCBsYWJlbGxlZCA6Z3VpbGFiZWw6YEFkZGl0aW9uYWwgbGlicmFyeSBEaXJlY3Rvcmllc2AuCi0KLSAgIE5vdyB5b3UgbmVlZCB0byBhZGQgc29tZSBtb2RlLXNwZWNpZmljIHNldHRpbmdzOgotCi0gICBTZWxlY3QgOmd1aWxhYmVsOmBSZWxlYXNlYCBpbiB0aGUgOmd1aWxhYmVsOmBDb25maWd1cmF0aW9uYCBkcm9wZG93biBsaXN0LgotICAgQ2hvb3NlIHRoZSA6Z3VpbGFiZWw6YExpbmtgIHRhYiwgY2hvb3NlIHRoZSA6Z3VpbGFiZWw6YElucHV0YCBjYXRlZ29yeSwgYW5kCi0gICBhcHBlbmQgYGBweXRob25YWS5saWJgYCB0byB0aGUgbGlzdCBpbiB0aGUgOmd1aWxhYmVsOmBBZGRpdGlvbmFsIERlcGVuZGVuY2llc2AKLSAgIGJveC4KLQotICAgU2VsZWN0IDpndWlsYWJlbDpgRGVidWdgIGluIHRoZSA6Z3VpbGFiZWw6YENvbmZpZ3VyYXRpb25gIGRyb3Bkb3duIGxpc3QsIGFuZAotICAgYXBwZW5kIGBgcHl0aG9uWFlfZC5saWJgYCB0byB0aGUgbGlzdCBpbiB0aGUgOmd1aWxhYmVsOmBBZGRpdGlvbmFsIERlcGVuZGVuY2llc2AKLSAgIGJveC4gIFRoZW4gY2xpY2sgdGhlIEMvQysrIHRhYiwgc2VsZWN0IDpndWlsYWJlbDpgQ29kZSBHZW5lcmF0aW9uYCwgYW5kIHNlbGVjdAotICAgOmd1aWxhYmVsOmBNdWx0aS10aHJlYWRlZCBEZWJ1ZyBETExgIGZyb20gdGhlIDpndWlsYWJlbDpgUnVudGltZSBsaWJyYXJ5YAotICAgZHJvcGRvd24gbGlzdC4KLQotICAgU2VsZWN0IDpndWlsYWJlbDpgUmVsZWFzZWAgYWdhaW4gZnJvbSB0aGUgOmd1aWxhYmVsOmBDb25maWd1cmF0aW9uYCBkcm9wZG93bgotICAgbGlzdC4gIFNlbGVjdCA6Z3VpbGFiZWw6YE11bHRpLXRocmVhZGVkIERMTGAgZnJvbSB0aGUgOmd1aWxhYmVsOmBSdW50aW1lCi0gICBsaWJyYXJ5YCBkcm9wZG93biBsaXN0LgotCi1JZiB5b3VyIG1vZHVsZSBjcmVhdGVzIGEgbmV3IHR5cGUsIHlvdSBtYXkgaGF2ZSB0cm91YmxlIHdpdGggdGhpcyBsaW5lOjoKLQotICAgUHlWYXJPYmplY3RfSEVBRF9JTklUKCZQeVR5cGVfVHlwZSwgMCkKLQotU3RhdGljIHR5cGUgb2JqZWN0IGluaXRpYWxpemVycyBpbiBleHRlbnNpb24gbW9kdWxlcyBtYXkgY2F1c2UKLWNvbXBpbGVzIHRvIGZhaWwgd2l0aCBhbiBlcnJvciBtZXNzYWdlIGxpa2UgImluaXRpYWxpemVyIG5vdCBhCi1jb25zdGFudCIuICBUaGlzIHNob3dzIHVwIHdoZW4gYnVpbGRpbmcgRExMIHVuZGVyIE1TVkMuICBDaGFuZ2UgaXQgdG86OgotCi0gICBQeVZhck9iamVjdF9IRUFEX0lOSVQoTlVMTCwgMCkKLQotYW5kIGFkZCB0aGUgZm9sbG93aW5nIHRvIHRoZSBtb2R1bGUgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb246OgotCi0gICBpZiAoUHlUeXBlX1JlYWR5KCZNeU9iamVjdF9UeXBlKSA8IDApCi0gICAgICAgIHJldHVybiBOVUxMOworaXMgYXZhaWxhYmxlIGluIDpyZWY6YGRpc3R1dGlscy1pbmRleGAuICBJZiB5b3UgZmluZCB5b3UgcmVhbGx5IG5lZWQgdG8gZG8KK3RoaW5ncyBtYW51YWxseSwgaXQgbWF5IGJlIGluc3RydWN0aXZlIHRvIHN0dWR5IHRoZSBwcm9qZWN0IGZpbGUgZm9yIHRoZQorOnNvdXJjZTpgd2luc291bmQgPFBDYnVpbGQvd2luc291bmQudmN4cHJvaj5gIHN0YW5kYXJkIGxpYnJhcnkgbW9kdWxlLgogCiAKIC4uIF9keW5hbWljLWxpbmtpbmc6CmRpZmYgLS1naXQgYS9Eb2MvZmFxL2Rlc2lnbi5yc3QgYi9Eb2MvZmFxL2Rlc2lnbi5yc3QKaW5kZXggNDllMGM2ZC4uOWZkZjhjYiAxMDA2NDQKLS0tIGEvRG9jL2ZhcS9kZXNpZ24ucnN0CisrKyBiL0RvYy9mYXEvZGVzaWduLnJzdApAQCAtNDksNyArNDksNyBAQAogVXNlcnMgYXJlIG9mdGVuIHN1cnByaXNlZCBieSByZXN1bHRzIGxpa2UgdGhpczo6CiAKICAgICA+Pj4gMS4yIC0gMS4wCi0gICAgMC4xOTk5OTk5OTk5OTk5OTk5OTYKKyAgICAwLjE5OTk5OTk5OTk5OTk5OTk2CiAKIGFuZCB0aGluayBpdCBpcyBhIGJ1ZyBpbiBQeXRob24uICBJdCdzIG5vdC4gIFRoaXMgaGFzIGxpdHRsZSB0byBkbyB3aXRoIFB5dGhvbiwKIGFuZCBtdWNoIG1vcmUgdG8gZG8gd2l0aCBob3cgdGhlIHVuZGVybHlpbmcgcGxhdGZvcm0gaGFuZGxlcyBmbG9hdGluZy1wb2ludApAQCAtMzY4LDkgKzM2OCw5IEBACiAKIFByYWN0aWNhbCBhbnN3ZXI6CiAKLWBDeXRob24gPGh0dHA6Ly9jeXRob24ub3JnLz5gXyBhbmQgYFB5cmV4IDxodHRwOi8vd3d3LmNvc2MuY2FudGVyYnVyeS5hYy5uei9+Z3JlZy9weXRob24vUHlyZXgvPmBfCitgQ3l0aG9uIDxodHRwOi8vY3l0aG9uLm9yZy8+YF8gYW5kIGBQeXJleCA8aHR0cDovL3d3dy5jb3NjLmNhbnRlcmJ1cnkuYWMubnovZ3JlZy5ld2luZy9weXRob24vUHlyZXgvPmBfCiBjb21waWxlIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiBQeXRob24gd2l0aCBvcHRpb25hbCBhbm5vdGF0aW9ucyBpbnRvIEMKLWV4dGVuc2lvbnMuICBgV2VhdmUgPGh0dHA6Ly93d3cuc2NpcHkub3JnL1dlYXZlPmBfIG1ha2VzIGl0IGVhc3kgdG8KK2V4dGVuc2lvbnMuICBgV2VhdmUgPGh0dHA6Ly9kb2NzLnNjaXB5Lm9yZy9kb2Mvc2NpcHktZGV2L3JlZmVyZW5jZS90dXRvcmlhbC93ZWF2ZS5odG1sPmBfIG1ha2VzIGl0IGVhc3kgdG8KIGludGVybWluZ2xlIFB5dGhvbiBhbmQgQyBjb2RlIGluIHZhcmlvdXMgd2F5cyB0byBpbmNyZWFzZSBwZXJmb3JtYW5jZS4KIGBOdWl0a2EgPGh0dHA6Ly93d3cubnVpdGthLm5ldC8+YF8gaXMgYW4gdXAtYW5kLWNvbWluZyBjb21waWxlciBvZiBQeXRob24KIGludG8gQysrIGNvZGUsIGFpbWluZyB0byBzdXBwb3J0IHRoZSBmdWxsIFB5dGhvbiBsYW5ndWFnZS4KQEAgLTM4NiwxMyArMzg2LDEzIEBACiBvcGVyYXRpb25zIGxpa2UgYGB4KzFgYC4KIAogU2V2ZXJhbCBwcm9qZWN0cyBkZXNjcmliZWQgaW4gdGhlIFB5dGhvbiBuZXdzZ3JvdXAgb3IgYXQgcGFzdCBgUHl0aG9uCi1jb25mZXJlbmNlcyA8aHR0cDovL3B5dGhvbi5vcmcvY29tbXVuaXR5L3dvcmtzaG9wcy8+YF8gaGF2ZSBzaG93biB0aGF0IHRoaXMKK2NvbmZlcmVuY2VzIDxodHRwczovL3d3dy5weXRob24ub3JnL2NvbW11bml0eS93b3Jrc2hvcHMvPmBfIGhhdmUgc2hvd24gdGhhdCB0aGlzCiBhcHByb2FjaCBpcyBmZWFzaWJsZSwgYWx0aG91Z2ggdGhlIHNwZWVkdXBzIHJlYWNoZWQgc28gZmFyIGFyZSBvbmx5IG1vZGVzdAogKGUuZy4gMngpLiAgSnl0aG9uIHVzZXMgdGhlIHNhbWUgc3RyYXRlZ3kgZm9yIGNvbXBpbGluZyB0byBKYXZhIGJ5dGVjb2RlLiAgKEppbQogSHVndW5pbiBoYXMgZGVtb25zdHJhdGVkIHRoYXQgaW4gY29tYmluYXRpb24gd2l0aCB3aG9sZS1wcm9ncmFtIGFuYWx5c2lzLAogc3BlZWR1cHMgb2YgMTAwMHggYXJlIGZlYXNpYmxlIGZvciBzbWFsbCBkZW1vIHByb2dyYW1zLiAgU2VlIHRoZSBwcm9jZWVkaW5ncwogZnJvbSB0aGUgYDE5OTcgUHl0aG9uIGNvbmZlcmVuY2UKLTxodHRwOi8vcHl0aG9uLm9yZy93b3Jrc2hvcHMvMTk5Ny0xMC9wcm9jZWVkaW5ncy8+YF8gZm9yIG1vcmUgaW5mb3JtYXRpb24uKQorPGh0dHA6Ly9sZWdhY3kucHl0aG9uLm9yZy93b3Jrc2hvcHMvMTk5Ny0xMC9wcm9jZWVkaW5ncy8+YF8gZm9yIG1vcmUgaW5mb3JtYXRpb24uKQogCiAKIEhvdyBkb2VzIFB5dGhvbiBtYW5hZ2UgbWVtb3J5PwpAQCAtNjY0LDYyICs2NjQsNiBAQAogc2xvcHB5IGFuZCBub3Qgd3JpdGUgdGVzdCBjYXNlcyBhdCBhbGwuCiAKIAotV2h5IGFyZSBkZWZhdWx0IHZhbHVlcyBzaGFyZWQgYmV0d2VlbiBvYmplY3RzPwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1UaGlzIHR5cGUgb2YgYnVnIGNvbW1vbmx5IGJpdGVzIG5lb3BoeXRlIHByb2dyYW1tZXJzLiAgQ29uc2lkZXIgdGhpcyBmdW5jdGlvbjo6Ci0KLSAgIGRlZiBmb28obXlkaWN0PXt9KTogICMgRGFuZ2VyOiBzaGFyZWQgcmVmZXJlbmNlIHRvIG9uZSBkaWN0IGZvciBhbGwgY2FsbHMKLSAgICAgICAuLi4gY29tcHV0ZSBzb21ldGhpbmcgLi4uCi0gICAgICAgbXlkaWN0W2tleV0gPSB2YWx1ZQotICAgICAgIHJldHVybiBteWRpY3QKLQotVGhlIGZpcnN0IHRpbWUgeW91IGNhbGwgdGhpcyBmdW5jdGlvbiwgYGBteWRpY3RgYCBjb250YWlucyBhIHNpbmdsZSBpdGVtLiAgVGhlCi1zZWNvbmQgdGltZSwgYGBteWRpY3RgYCBjb250YWlucyB0d28gaXRlbXMgYmVjYXVzZSB3aGVuIGBgZm9vKClgYCBiZWdpbnMKLWV4ZWN1dGluZywgYGBteWRpY3RgYCBzdGFydHMgb3V0IHdpdGggYW4gaXRlbSBhbHJlYWR5IGluIGl0LgotCi1JdCBpcyBvZnRlbiBleHBlY3RlZCB0aGF0IGEgZnVuY3Rpb24gY2FsbCBjcmVhdGVzIG5ldyBvYmplY3RzIGZvciBkZWZhdWx0Ci12YWx1ZXMuIFRoaXMgaXMgbm90IHdoYXQgaGFwcGVucy4gRGVmYXVsdCB2YWx1ZXMgYXJlIGNyZWF0ZWQgZXhhY3RseSBvbmNlLCB3aGVuCi10aGUgZnVuY3Rpb24gaXMgZGVmaW5lZC4gIElmIHRoYXQgb2JqZWN0IGlzIGNoYW5nZWQsIGxpa2UgdGhlIGRpY3Rpb25hcnkgaW4gdGhpcwotZXhhbXBsZSwgc3Vic2VxdWVudCBjYWxscyB0byB0aGUgZnVuY3Rpb24gd2lsbCByZWZlciB0byB0aGlzIGNoYW5nZWQgb2JqZWN0LgotCi1CeSBkZWZpbml0aW9uLCBpbW11dGFibGUgb2JqZWN0cyBzdWNoIGFzIG51bWJlcnMsIHN0cmluZ3MsIHR1cGxlcywgYW5kIGBgTm9uZWBgLAotYXJlIHNhZmUgZnJvbSBjaGFuZ2UuIENoYW5nZXMgdG8gbXV0YWJsZSBvYmplY3RzIHN1Y2ggYXMgZGljdGlvbmFyaWVzLCBsaXN0cywKLWFuZCBjbGFzcyBpbnN0YW5jZXMgY2FuIGxlYWQgdG8gY29uZnVzaW9uLgotCi1CZWNhdXNlIG9mIHRoaXMgZmVhdHVyZSwgaXQgaXMgZ29vZCBwcm9ncmFtbWluZyBwcmFjdGljZSB0byBub3QgdXNlIG11dGFibGUKLW9iamVjdHMgYXMgZGVmYXVsdCB2YWx1ZXMuICBJbnN0ZWFkLCB1c2UgYGBOb25lYGAgYXMgdGhlIGRlZmF1bHQgdmFsdWUgYW5kCi1pbnNpZGUgdGhlIGZ1bmN0aW9uLCBjaGVjayBpZiB0aGUgcGFyYW1ldGVyIGlzIGBgTm9uZWBgIGFuZCBjcmVhdGUgYSBuZXcKLWxpc3QvZGljdGlvbmFyeS93aGF0ZXZlciBpZiBpdCBpcy4gIEZvciBleGFtcGxlLCBkb24ndCB3cml0ZTo6Ci0KLSAgIGRlZiBmb28obXlkaWN0PXt9KToKLSAgICAgICAuLi4KLQotYnV0OjoKLQotICAgZGVmIGZvbyhteWRpY3Q9Tm9uZSk6Ci0gICAgICAgaWYgbXlkaWN0IGlzIE5vbmU6Ci0gICAgICAgICAgIG15ZGljdCA9IHt9ICAjIGNyZWF0ZSBhIG5ldyBkaWN0IGZvciBsb2NhbCBuYW1lc3BhY2UKLQotVGhpcyBmZWF0dXJlIGNhbiBiZSB1c2VmdWwuICBXaGVuIHlvdSBoYXZlIGEgZnVuY3Rpb24gdGhhdCdzIHRpbWUtY29uc3VtaW5nIHRvCi1jb21wdXRlLCBhIGNvbW1vbiB0ZWNobmlxdWUgaXMgdG8gY2FjaGUgdGhlIHBhcmFtZXRlcnMgYW5kIHRoZSByZXN1bHRpbmcgdmFsdWUKLW9mIGVhY2ggY2FsbCB0byB0aGUgZnVuY3Rpb24sIGFuZCByZXR1cm4gdGhlIGNhY2hlZCB2YWx1ZSBpZiB0aGUgc2FtZSB2YWx1ZSBpcwotcmVxdWVzdGVkIGFnYWluLiAgVGhpcyBpcyBjYWxsZWQgIm1lbW9pemluZyIsIGFuZCBjYW4gYmUgaW1wbGVtZW50ZWQgbGlrZSB0aGlzOjoKLQotICAgIyBDYWxsZXJzIHdpbGwgbmV2ZXIgcHJvdmlkZSBhIHRoaXJkIHBhcmFtZXRlciBmb3IgdGhpcyBmdW5jdGlvbi4KLSAgIGRlZiBleHBlbnNpdmUoYXJnMSwgYXJnMiwgX2NhY2hlPXt9KToKLSAgICAgICBpZiAoYXJnMSwgYXJnMikgaW4gX2NhY2hlOgotICAgICAgICAgICByZXR1cm4gX2NhY2hlWyhhcmcxLCBhcmcyKV0KLQotICAgICAgICMgQ2FsY3VsYXRlIHRoZSB2YWx1ZQotICAgICAgIHJlc3VsdCA9IC4uLiBleHBlbnNpdmUgY29tcHV0YXRpb24gLi4uCi0gICAgICAgX2NhY2hlWyhhcmcxLCBhcmcyKV0gPSByZXN1bHQgICAgICAgICAgICMgU3RvcmUgcmVzdWx0IGluIHRoZSBjYWNoZQotICAgICAgIHJldHVybiByZXN1bHQKLQotWW91IGNvdWxkIHVzZSBhIGdsb2JhbCB2YXJpYWJsZSBjb250YWluaW5nIGEgZGljdGlvbmFyeSBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0Ci12YWx1ZTsgaXQncyBhIG1hdHRlciBvZiB0YXN0ZS4KLQotCiBXaHkgaXMgdGhlcmUgbm8gZ290bz8KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCmRpZmYgLS1naXQgYS9Eb2MvZmFxL2V4dGVuZGluZy5yc3QgYi9Eb2MvZmFxL2V4dGVuZGluZy5yc3QKaW5kZXggYTlhMjM0Yi4uN2JiNGRjMiAxMDA2NDQKLS0tIGEvRG9jL2ZhcS9leHRlbmRpbmcucnN0CisrKyBiL0RvYy9mYXEvZXh0ZW5kaW5nLnJzdApAQCAtNDIsNyArNDIsNyBAQAogLi4gWFhYIG1ha2Ugc3VyZSB0aGVzZSBhbGwgd29yawogCiBgQ3l0aG9uIDxodHRwOi8vY3l0aG9uLm9yZz5gXyBhbmQgaXRzIHJlbGF0aXZlIGBQeXJleAotPGh0dHA6Ly93d3cuY29zYy5jYW50ZXJidXJ5LmFjLm56L35ncmVnL3B5dGhvbi9QeXJleC8+YF8gYXJlIGNvbXBpbGVycworPGh0dHA6Ly93d3cuY29zYy5jYW50ZXJidXJ5LmFjLm56L2dyZWcuZXdpbmcvcHl0aG9uL1B5cmV4Lz5gXyBhcmUgY29tcGlsZXJzCiB0aGF0IGFjY2VwdCBhIHNsaWdodGx5IG1vZGlmaWVkIGZvcm0gb2YgUHl0aG9uIGFuZCBnZW5lcmF0ZSB0aGUgY29ycmVzcG9uZGluZwogQyBjb2RlLiAgQ3l0aG9uIGFuZCBQeXJleCBtYWtlIGl0IHBvc3NpYmxlIHRvIHdyaXRlIGFuIGV4dGVuc2lvbiB3aXRob3V0IGhhdmluZwogdG8gbGVhcm4gUHl0aG9uJ3MgQyBBUEkuCkBAIC01MCwxMSArNTAsMTEgQEAKIElmIHlvdSBuZWVkIHRvIGludGVyZmFjZSB0byBzb21lIEMgb3IgQysrIGxpYnJhcnkgZm9yIHdoaWNoIG5vIFB5dGhvbiBleHRlbnNpb24KIGN1cnJlbnRseSBleGlzdHMsIHlvdSBjYW4gdHJ5IHdyYXBwaW5nIHRoZSBsaWJyYXJ5J3MgZGF0YSB0eXBlcyBhbmQgZnVuY3Rpb25zCiB3aXRoIGEgdG9vbCBzdWNoIGFzIGBTV0lHIDxodHRwOi8vd3d3LnN3aWcub3JnPmBfLiAgYFNJUAotPGh0dHA6Ly93d3cucml2ZXJiYW5rY29tcHV0aW5nLmNvLnVrL3NvZnR3YXJlL3NpcC8+YF9fLCBgQ1hYCis8aHR0cDovL3d3dy5yaXZlcmJhbmtjb21wdXRpbmcuY28udWsvc29mdHdhcmUvc2lwL2ludHJvPmBfXywgYENYWAogPGh0dHA6Ly9jeHguc291cmNlZm9yZ2UubmV0Lz5gXyBgQm9vc3QKIDxodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL3B5dGhvbi9kb2MvaW5kZXguaHRtbD5gXywgb3IgYFdlYXZlCi08aHR0cDovL3d3dy5zY2lweS5vcmcvV2VhdmU+YF8gYXJlIGFsc28gYWx0ZXJuYXRpdmVzIGZvciB3cmFwcGluZwotQysrIGxpYnJhcmllcy4KKzxodHRwOi8vZG9jcy5zY2lweS5vcmcvZG9jL3NjaXB5LWRldi9yZWZlcmVuY2UvdHV0b3JpYWwvd2VhdmUuaHRtbD5gXyBhcmUgYWxzbworYWx0ZXJuYXRpdmVzIGZvciB3cmFwcGluZyBDKysgbGlicmFyaWVzLgogCiAKIEhvdyBjYW4gSSBleGVjdXRlIGFyYml0cmFyeSBQeXRob24gc3RhdGVtZW50cyBmcm9tIEM/CkBAIC05NSw4ICs5NSw4IEBACiBUaGVyZSBpcyBhbHNvIGEgaGlnaC1sZXZlbCBBUEkgdG8gUHl0aG9uIG9iamVjdHMgd2hpY2ggaXMgcHJvdmlkZWQgYnkgdGhlCiBzby1jYWxsZWQgJ2Fic3RyYWN0JyBpbnRlcmZhY2UgLS0gcmVhZCBgYEluY2x1ZGUvYWJzdHJhY3QuaGBgIGZvciBmdXJ0aGVyCiBkZXRhaWxzLiAgSXQgYWxsb3dzIGludGVyZmFjaW5nIHdpdGggYW55IGtpbmQgb2YgUHl0aG9uIHNlcXVlbmNlIHVzaW5nIGNhbGxzCi1saWtlIDpjOmZ1bmM6YFB5U2VxdWVuY2VfTGVuZ3RoYCwgOmM6ZnVuYzpgUHlTZXF1ZW5jZV9HZXRJdGVtYCwgZXRjLikgYXMgd2VsbAotYXMgbWFueSBvdGhlciB1c2VmdWwgcHJvdG9jb2xzIHN1Y2ggYXMgbnVtYmVycyAoOmM6ZnVuYzpgUHlOdW1iZXJfSW5kZXhgIGV0LgorbGlrZSA6YzpmdW5jOmBQeVNlcXVlbmNlX0xlbmd0aGAsIDpjOmZ1bmM6YFB5U2VxdWVuY2VfR2V0SXRlbWAsIGV0Yy4gYXMgd2VsbAorYXMgbWFueSBvdGhlciB1c2VmdWwgcHJvdG9jb2xzIHN1Y2ggYXMgbnVtYmVycyAoOmM6ZnVuYzpgUHlOdW1iZXJfSW5kZXhgIGV0CiBhbC4pIGFuZCBtYXBwaW5ncyBpbiB0aGUgUHlNYXBwaW5nIEFQSXMuCiAKIApAQCAtMTE1LDggKzExNSw4IEBACiBhcmd1bWVudCB2YWx1ZXM6OgogCiAgICBQeU9iamVjdCAqCi0gICBQeU9iamVjdF9DYWxsTWV0aG9kKFB5T2JqZWN0ICpvYmplY3QsIGNoYXIgKm1ldGhvZF9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICBjaGFyICphcmdfZm9ybWF0LCAuLi4pOworICAgUHlPYmplY3RfQ2FsbE1ldGhvZChQeU9iamVjdCAqb2JqZWN0LCBjb25zdCBjaGFyICptZXRob2RfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYXJnX2Zvcm1hdCwgLi4uKTsKIAogVGhpcyB3b3JrcyBmb3IgYW55IG9iamVjdCB0aGF0IGhhcyBtZXRob2RzIC0tIHdoZXRoZXIgYnVpbHQtaW4gb3IgdXNlci1kZWZpbmVkLgogWW91IGFyZSByZXNwb25zaWJsZSBmb3IgZXZlbnR1YWxseSA6YzpmdW5jOmBQeV9ERUNSRUZgXCAnaW5nIHRoZSByZXR1cm4gdmFsdWUuCkBAIC0zNDgsNyArMzQ4LDcgQEAKICAgICAgewogICAgICAgIGxpbmUgPSByZWFkbGluZSAocHJvbXB0KTsKIAotICAgICAgIGlmIChOVUxMID09IGxpbmUpICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDVFJMLUQgcHJlc3NlZCAqLworICAgICAgIGlmIChOVUxMID09IGxpbmUpICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDdHJsLUQgcHJlc3NlZCAqLwogICAgICAgIHsKICAgICAgICAgIGRvbmUgPSAxOwogICAgICAgIH0KQEAgLTQ0Myw4ICs0NDMsOCBAQAogQ2FuIEkgY3JlYXRlIGFuIG9iamVjdCBjbGFzcyB3aXRoIHNvbWUgbWV0aG9kcyBpbXBsZW1lbnRlZCBpbiBDIGFuZCBvdGhlcnMgaW4gUHl0aG9uIChlLmcuIHRocm91Z2ggaW5oZXJpdGFuY2UpPwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1JbiBQeXRob24gMi4yLCB5b3UgY2FuIGluaGVyaXQgZnJvbSBidWlsdC1pbiBjbGFzc2VzIHN1Y2ggYXMgOmNsYXNzOmBpbnRgLAotOmNsYXNzOmBsaXN0YCwgOmNsYXNzOmBkaWN0YCwgZXRjLgorWWVzLCB5b3UgY2FuIGluaGVyaXQgZnJvbSBidWlsdC1pbiBjbGFzc2VzIHN1Y2ggYXMgOmNsYXNzOmBpbnRgLCA6Y2xhc3M6YGxpc3RgLAorOmNsYXNzOmBkaWN0YCwgZXRjLgogCiBUaGUgQm9vc3QgUHl0aG9uIExpYnJhcnkgKEJQTCwgaHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9weXRob24vZG9jL2luZGV4Lmh0bWwpCiBwcm92aWRlcyBhIHdheSBvZiBkb2luZyB0aGlzIGZyb20gQysrIChpLmUuIHlvdSBjYW4gaW5oZXJpdCBmcm9tIGFuIGV4dGVuc2lvbgpkaWZmIC0tZ2l0IGEvRG9jL2ZhcS9nZW5lcmFsLnJzdCBiL0RvYy9mYXEvZ2VuZXJhbC5yc3QKaW5kZXggNmY0NzMzZi4uMjIyMWYxNCAxMDA2NDQKLS0tIGEvRG9jL2ZhcS9nZW5lcmFsLnJzdAorKysgYi9Eb2MvZmFxL2dlbmVyYWwucnN0CkBAIC0yNSw3ICsyNSw3IEBACiBXaW5kb3dzIDIwMDAgYW5kIGxhdGVyLgogCiBUbyBmaW5kIG91dCBtb3JlLCBzdGFydCB3aXRoIDpyZWY6YHR1dG9yaWFsLWluZGV4YC4gIFRoZSBgQmVnaW5uZXIncyBHdWlkZSB0bwotUHl0aG9uIDxodHRwOi8vd2lraS5weXRob24ub3JnL21vaW4vQmVnaW5uZXJzR3VpZGU+YF8gbGlua3MgdG8gb3RoZXIKK1B5dGhvbiA8aHR0cHM6Ly93aWtpLnB5dGhvbi5vcmcvbW9pbi9CZWdpbm5lcnNHdWlkZT5gXyBsaW5rcyB0byBvdGhlcgogaW50cm9kdWN0b3J5IHR1dG9yaWFscyBhbmQgcmVzb3VyY2VzIGZvciBsZWFybmluZyBQeXRob24uCiAKIApAQCAtMzYsMTEgKzM2LDExIEBACiBob2xkcyB0aGUgY29weXJpZ2h0IG9uIFB5dGhvbiB2ZXJzaW9ucyAyLjEgYW5kIG5ld2VyLiAgVGhlIFBTRidzIG1pc3Npb24gaXMgdG8KIGFkdmFuY2Ugb3BlbiBzb3VyY2UgdGVjaG5vbG9neSByZWxhdGVkIHRvIHRoZSBQeXRob24gcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UgYW5kIHRvCiBwdWJsaWNpemUgdGhlIHVzZSBvZiBQeXRob24uICBUaGUgUFNGJ3MgaG9tZSBwYWdlIGlzIGF0Ci1odHRwOi8vd3d3LnB5dGhvbi5vcmcvcHNmLy4KK2h0dHBzOi8vd3d3LnB5dGhvbi5vcmcvcHNmLy4KIAogRG9uYXRpb25zIHRvIHRoZSBQU0YgYXJlIHRheC1leGVtcHQgaW4gdGhlIFVTLiAgSWYgeW91IHVzZSBQeXRob24gYW5kIGZpbmQgaXQKIGhlbHBmdWwsIHBsZWFzZSBjb250cmlidXRlIHZpYSBgdGhlIFBTRiBkb25hdGlvbiBwYWdlCi08aHR0cDovL3d3dy5weXRob24ub3JnL3BzZi9kb25hdGlvbnMvPmBfLgorPGh0dHBzOi8vd3d3LnB5dGhvbi5vcmcvcHNmL2RvbmF0aW9ucy8+YF8uCiAKIAogQXJlIHRoZXJlIGNvcHlyaWdodCByZXN0cmljdGlvbnMgb24gdGhlIHVzZSBvZiBQeXRob24/CkBAIC01MywxMiArNTMsMTIgQEAKIHVubW9kaWZpZWQpLCBvciB0byBzZWxsIHByb2R1Y3RzIHRoYXQgaW5jb3Jwb3JhdGUgUHl0aG9uIGluIHNvbWUgZm9ybS4gIFdlIHdvdWxkCiBzdGlsbCBsaWtlIHRvIGtub3cgYWJvdXQgYWxsIGNvbW1lcmNpYWwgdXNlIG9mIFB5dGhvbiwgb2YgY291cnNlLgogCi1TZWUgYHRoZSBQU0YgbGljZW5zZSBwYWdlIDxodHRwOi8vcHl0aG9uLm9yZy9wc2YvbGljZW5zZS8+YF8gdG8gZmluZCBmdXJ0aGVyCitTZWUgYHRoZSBQU0YgbGljZW5zZSBwYWdlIDxodHRwczovL3d3dy5weXRob24ub3JnL3BzZi9saWNlbnNlLz5gXyB0byBmaW5kIGZ1cnRoZXIKIGV4cGxhbmF0aW9ucyBhbmQgYSBsaW5rIHRvIHRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UuCiAKIFRoZSBQeXRob24gbG9nbyBpcyB0cmFkZW1hcmtlZCwgYW5kIGluIGNlcnRhaW4gY2FzZXMgcGVybWlzc2lvbiBpcyByZXF1aXJlZCB0bwogdXNlIGl0LiAgQ29uc3VsdCBgdGhlIFRyYWRlbWFyayBVc2FnZSBQb2xpY3kKLTxodHRwOi8vd3d3LnB5dGhvbi5vcmcvcHNmL3RyYWRlbWFya3MvPmBfXyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKzxodHRwczovL3d3dy5weXRob24ub3JnL3BzZi90cmFkZW1hcmtzLz5gX18gZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAKIAogV2h5IHdhcyBQeXRob24gY3JlYXRlZCBpbiB0aGUgZmlyc3QgcGxhY2U/CkBAIC0xMTcsNyArMTE3LDcgQEAKIFB5dGhvbiBjb2RlKSwgYW5kIG9wZXJhdGluZyBzeXN0ZW0gaW50ZXJmYWNlcyAoc3lzdGVtIGNhbGxzLCBmaWxlc3lzdGVtcywgVENQL0lQCiBzb2NrZXRzKS4gIExvb2sgYXQgdGhlIHRhYmxlIG9mIGNvbnRlbnRzIGZvciA6cmVmOmBsaWJyYXJ5LWluZGV4YCB0byBnZXQgYW4gaWRlYQogb2Ygd2hhdCdzIGF2YWlsYWJsZS4gIEEgd2lkZSB2YXJpZXR5IG9mIHRoaXJkLXBhcnR5IGV4dGVuc2lvbnMgYXJlIGFsc28KLWF2YWlsYWJsZS4gIENvbnN1bHQgYHRoZSBQeXRob24gUGFja2FnZSBJbmRleCA8aHR0cDovL3B5cGkucHl0aG9uLm9yZy9weXBpPmBfIHRvCithdmFpbGFibGUuICBDb25zdWx0IGB0aGUgUHl0aG9uIFBhY2thZ2UgSW5kZXggPGh0dHBzOi8vcHlwaS5weXRob24ub3JnL3B5cGk+YF8gdG8KIGZpbmQgcGFja2FnZXMgb2YgaW50ZXJlc3QgdG8geW91LgogCiAKQEAgLTE1MSwyMyArMTUxLDI0IEBACiBuZXh0IG1pbm9yIHZlcnNpb24sIHdoaWNoIGJlY29tZXMgdGhlICJhMCIgdmVyc2lvbiwKIGUuZy4gIjIuNGEwIi4KIAotU2VlIGFsc28gdGhlIGRvY3VtZW50YXRpb24gZm9yIGBgc3lzLnZlcnNpb25gYCwgYGBzeXMuaGV4dmVyc2lvbmBgLCBhbmQKLWBgc3lzLnZlcnNpb25faW5mb2BgLgorU2VlIGFsc28gdGhlIGRvY3VtZW50YXRpb24gZm9yIDpkYXRhOmBzeXMudmVyc2lvbmAsIDpkYXRhOmBzeXMuaGV4dmVyc2lvbmAsIGFuZAorOmRhdGE6YHN5cy52ZXJzaW9uX2luZm9gLgogCiAKIEhvdyBkbyBJIG9idGFpbiBhIGNvcHkgb2YgdGhlIFB5dGhvbiBzb3VyY2U/CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBUaGUgbGF0ZXN0IFB5dGhvbiBzb3VyY2UgZGlzdHJpYnV0aW9uIGlzIGFsd2F5cyBhdmFpbGFibGUgZnJvbSBweXRob24ub3JnLCBhdAotaHR0cDovL3d3dy5weXRob24ub3JnL2Rvd25sb2FkLy4gIFRoZSBsYXRlc3QgZGV2ZWxvcG1lbnQgc291cmNlcyBjYW4gYmUgb2J0YWluZWQKLXZpYSBhbm9ueW1vdXMgTWVyY3VyaWFsIGFjY2VzcyBhdCBodHRwOi8vaGcucHl0aG9uLm9yZy9jcHl0aG9uLgoraHR0cHM6Ly93d3cucHl0aG9uLm9yZy9kb3dubG9hZC8uICBUaGUgbGF0ZXN0IGRldmVsb3BtZW50IHNvdXJjZXMgY2FuIGJlIG9idGFpbmVkCit2aWEgYW5vbnltb3VzIE1lcmN1cmlhbCBhY2Nlc3MgYXQgaHR0cHM6Ly9oZy5weXRob24ub3JnL2NweXRob24uCiAKIFRoZSBzb3VyY2UgZGlzdHJpYnV0aW9uIGlzIGEgZ3ppcHBlZCB0YXIgZmlsZSBjb250YWluaW5nIHRoZSBjb21wbGV0ZSBDIHNvdXJjZSwKIFNwaGlueC1mb3JtYXR0ZWQgZG9jdW1lbnRhdGlvbiwgUHl0aG9uIGxpYnJhcnkgbW9kdWxlcywgZXhhbXBsZSBwcm9ncmFtcywgYW5kCiBzZXZlcmFsIHVzZWZ1bCBwaWVjZXMgb2YgZnJlZWx5IGRpc3RyaWJ1dGFibGUgc29mdHdhcmUuICBUaGUgc291cmNlIHdpbGwgY29tcGlsZQogYW5kIHJ1biBvdXQgb2YgdGhlIGJveCBvbiBtb3N0IFVOSVggcGxhdGZvcm1zLgogCi1Db25zdWx0IHRoZSBgRGV2ZWxvcGVyIEZBUSA8aHR0cDovL2RvY3MucHl0aG9uLm9yZy9kZXZndWlkZS9mYXE+YF9fIGZvciBtb3JlCitDb25zdWx0IHRoZSBgR2V0dGluZyBTdGFydGVkIHNlY3Rpb24gb2YgdGhlIFB5dGhvbiBEZXZlbG9wZXIncyBHdWlkZQorPGh0dHBzOi8vZG9jcy5weXRob24ub3JnL2Rldmd1aWRlL3NldHVwLmh0bWw+YF9fIGZvciBtb3JlCiBpbmZvcm1hdGlvbiBvbiBnZXR0aW5nIHRoZSBzb3VyY2UgY29kZSBhbmQgY29tcGlsaW5nIGl0LgogCiAKQEAgLTE3Nyw4ICsxNzgsOCBAQAogLi4gWFhYIG1lbnRpb24gcHkzawogCiBUaGUgc3RhbmRhcmQgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIGN1cnJlbnQgc3RhYmxlIHZlcnNpb24gb2YgUHl0aG9uIGlzIGF2YWlsYWJsZQotYXQgaHR0cDovL2RvY3MucHl0aG9uLm9yZy8uICBQREYsIHBsYWluIHRleHQsIGFuZCBkb3dubG9hZGFibGUgSFRNTCB2ZXJzaW9ucyBhcmUKLWFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvZG93bmxvYWQuaHRtbC4KK2F0IGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvLiAgUERGLCBwbGFpbiB0ZXh0LCBhbmQgZG93bmxvYWRhYmxlIEhUTUwgdmVyc2lvbnMgYXJlCithbHNvIGF2YWlsYWJsZSBhdCBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2Rvd25sb2FkLmh0bWwuCiAKIFRoZSBkb2N1bWVudGF0aW9uIGlzIHdyaXR0ZW4gaW4gcmVTdHJ1Y3R1cmVkVGV4dCBhbmQgcHJvY2Vzc2VkIGJ5IGB0aGUgU3BoaW54CiBkb2N1bWVudGF0aW9uIHRvb2wgPGh0dHA6Ly9zcGhpbngtZG9jLm9yZy8+YF9fLiAgVGhlIHJlU3RydWN0dXJlZFRleHQgc291cmNlIGZvcgpAQCAtMTkxLDcgKzE5Miw3IEBACiBUaGVyZSBhcmUgbnVtZXJvdXMgdHV0b3JpYWxzIGFuZCBib29rcyBhdmFpbGFibGUuICBUaGUgc3RhbmRhcmQgZG9jdW1lbnRhdGlvbgogaW5jbHVkZXMgOnJlZjpgdHV0b3JpYWwtaW5kZXhgLgogCi1Db25zdWx0IGB0aGUgQmVnaW5uZXIncyBHdWlkZSA8aHR0cDovL3dpa2kucHl0aG9uLm9yZy9tb2luL0JlZ2lubmVyc0d1aWRlPmBfIHRvCitDb25zdWx0IGB0aGUgQmVnaW5uZXIncyBHdWlkZSA8aHR0cHM6Ly93aWtpLnB5dGhvbi5vcmcvbW9pbi9CZWdpbm5lcnNHdWlkZT5gXyB0bwogZmluZCBpbmZvcm1hdGlvbiBmb3IgYmVnaW5uaW5nIFB5dGhvbiBwcm9ncmFtbWVycywgaW5jbHVkaW5nIGxpc3RzIG9mIHR1dG9yaWFscy4KIAogCkBAIC0xOTksNyArMjAwLDcgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogVGhlcmUgaXMgYSBuZXdzZ3JvdXAsIDpuZXdzZ3JvdXA6YGNvbXAubGFuZy5weXRob25gLCBhbmQgYSBtYWlsaW5nIGxpc3QsCi1gcHl0aG9uLWxpc3QgPGh0dHA6Ly9tYWlsLnB5dGhvbi5vcmcvbWFpbG1hbi9saXN0aW5mby9weXRob24tbGlzdD5gXy4gIFRoZQorYHB5dGhvbi1saXN0IDxodHRwczovL21haWwucHl0aG9uLm9yZy9tYWlsbWFuL2xpc3RpbmZvL3B5dGhvbi1saXN0PmBfLiAgVGhlCiBuZXdzZ3JvdXAgYW5kIG1haWxpbmcgbGlzdCBhcmUgZ2F0ZXdheWVkIGludG8gZWFjaCBvdGhlciAtLSBpZiB5b3UgY2FuIHJlYWQgbmV3cwogaXQncyB1bm5lY2Vzc2FyeSB0byBzdWJzY3JpYmUgdG8gdGhlIG1haWxpbmcgbGlzdC4KIDpuZXdzZ3JvdXA6YGNvbXAubGFuZy5weXRob25gIGlzIGhpZ2gtdHJhZmZpYywgcmVjZWl2aW5nIGh1bmRyZWRzIG9mIHBvc3RpbmdzCkBAIC0yMDgsMzggKzIwOSwzOCBAQAogQW5ub3VuY2VtZW50cyBvZiBuZXcgc29mdHdhcmUgcmVsZWFzZXMgYW5kIGV2ZW50cyBjYW4gYmUgZm91bmQgaW4KIGNvbXAubGFuZy5weXRob24uYW5ub3VuY2UsIGEgbG93LXRyYWZmaWMgbW9kZXJhdGVkIGxpc3QgdGhhdCByZWNlaXZlcyBhYm91dCBmaXZlCiBwb3N0aW5ncyBwZXIgZGF5LiAgSXQncyBhdmFpbGFibGUgYXMgYHRoZSBweXRob24tYW5ub3VuY2UgbWFpbGluZyBsaXN0Ci08aHR0cDovL21haWwucHl0aG9uLm9yZy9tYWlsbWFuL2xpc3RpbmZvL3B5dGhvbi1hbm5vdW5jZS1saXN0PmBfLgorPGh0dHBzOi8vbWFpbC5weXRob24ub3JnL21haWxtYW4vbGlzdGluZm8vcHl0aG9uLWFubm91bmNlLWxpc3Q+YF8uCiAKIE1vcmUgaW5mbyBhYm91dCBvdGhlciBtYWlsaW5nIGxpc3RzIGFuZCBuZXdzZ3JvdXBzCi1jYW4gYmUgZm91bmQgYXQgaHR0cDovL3d3dy5weXRob24ub3JnL2NvbW11bml0eS9saXN0cy8uCitjYW4gYmUgZm91bmQgYXQgaHR0cHM6Ly93d3cucHl0aG9uLm9yZy9jb21tdW5pdHkvbGlzdHMvLgogCiAKIEhvdyBkbyBJIGdldCBhIGJldGEgdGVzdCB2ZXJzaW9uIG9mIFB5dGhvbj8KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotQWxwaGEgYW5kIGJldGEgcmVsZWFzZXMgYXJlIGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly93d3cucHl0aG9uLm9yZy9kb3dubG9hZC8uICBBbGwKK0FscGhhIGFuZCBiZXRhIHJlbGVhc2VzIGFyZSBhdmFpbGFibGUgZnJvbSBodHRwczovL3d3dy5weXRob24ub3JnL2Rvd25sb2FkLy4gIEFsbAogcmVsZWFzZXMgYXJlIGFubm91bmNlZCBvbiB0aGUgY29tcC5sYW5nLnB5dGhvbiBhbmQgY29tcC5sYW5nLnB5dGhvbi5hbm5vdW5jZQotbmV3c2dyb3VwcyBhbmQgb24gdGhlIFB5dGhvbiBob21lIHBhZ2UgYXQgaHR0cDovL3d3dy5weXRob24ub3JnLzsgYW4gUlNTIGZlZWQgb2YKK25ld3Nncm91cHMgYW5kIG9uIHRoZSBQeXRob24gaG9tZSBwYWdlIGF0IGh0dHBzOi8vd3d3LnB5dGhvbi5vcmcvOyBhbiBSU1MgZmVlZCBvZgogbmV3cyBpcyBhdmFpbGFibGUuCiAKLVlvdSBjYW4gYWxzbyBhY2Nlc3MgdGhlIGRldmVsb3BtZW50IHZlcnNpb24gb2YgUHl0aG9uIHRocm91Z2ggU3VidmVyc2lvbi4gIFNlZQotaHR0cDovL2RvY3MucHl0aG9uLm9yZy9kZXZndWlkZS9mYXEgZm9yIGRldGFpbHMuCitZb3UgY2FuIGFsc28gYWNjZXNzIHRoZSBkZXZlbG9wbWVudCB2ZXJzaW9uIG9mIFB5dGhvbiB0aHJvdWdoIE1lcmN1cmlhbC4gIFNlZQoraHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvZGV2Z3VpZGUvZmFxLmh0bWwgZm9yIGRldGFpbHMuCiAKIAogSG93IGRvIEkgc3VibWl0IGJ1ZyByZXBvcnRzIGFuZCBwYXRjaGVzIGZvciBQeXRob24/CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogVG8gcmVwb3J0IGEgYnVnIG9yIHN1Ym1pdCBhIHBhdGNoLCBwbGVhc2UgdXNlIHRoZSBSb3VuZHVwIGluc3RhbGxhdGlvbiBhdAotaHR0cDovL2J1Z3MucHl0aG9uLm9yZy8uCitodHRwczovL2J1Z3MucHl0aG9uLm9yZy8uCiAKIFlvdSBtdXN0IGhhdmUgYSBSb3VuZHVwIGFjY291bnQgdG8gcmVwb3J0IGJ1Z3M7IHRoaXMgbWFrZXMgaXQgcG9zc2libGUgZm9yIHVzIHRvCiBjb250YWN0IHlvdSBpZiB3ZSBoYXZlIGZvbGxvdy11cCBxdWVzdGlvbnMuICBJdCB3aWxsIGFsc28gZW5hYmxlIFJvdW5kdXAgdG8gc2VuZAogeW91IHVwZGF0ZXMgYXMgd2UgYWN0IG9uIHlvdXIgYnVnLiBJZiB5b3UgaGFkIHByZXZpb3VzbHkgdXNlZCBTb3VyY2VGb3JnZSB0bwogcmVwb3J0IGJ1Z3MgdG8gUHl0aG9uLCB5b3UgY2FuIG9idGFpbiB5b3VyIFJvdW5kdXAgcGFzc3dvcmQgdGhyb3VnaCBSb3VuZHVwJ3MKLWBwYXNzd29yZCByZXNldCBwcm9jZWR1cmUgPGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvdXNlcj9AdGVtcGxhdGU9Zm9yZ290dGVuPmBfLgorYHBhc3N3b3JkIHJlc2V0IHByb2NlZHVyZSA8aHR0cHM6Ly9idWdzLnB5dGhvbi5vcmcvdXNlcj9AdGVtcGxhdGU9Zm9yZ290dGVuPmBfLgogCiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgUHl0aG9uIGlzIGRldmVsb3BlZCwgY29uc3VsdCBgdGhlIFB5dGhvbiBEZXZlbG9wZXIncwotR3VpZGUgPGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvZGV2Z3VpZGUvPmBfLgorR3VpZGUgPGh0dHBzOi8vZG9jcy5weXRob24ub3JnL2Rldmd1aWRlLz5gXy4KIAogCiBBcmUgdGhlcmUgYW55IHB1Ymxpc2hlZCBhcnRpY2xlcyBhYm91dCBQeXRob24gdGhhdCBJIGNhbiByZWZlcmVuY2U/CkBAIC0yNTksNyArMjYwLDcgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBZZXMsIHRoZXJlIGFyZSBtYW55LCBhbmQgbW9yZSBhcmUgYmVpbmcgcHVibGlzaGVkLiAgU2VlIHRoZSBweXRob24ub3JnIHdpa2kgYXQKLWh0dHA6Ly93aWtpLnB5dGhvbi5vcmcvbW9pbi9QeXRob25Cb29rcyBmb3IgYSBsaXN0LgoraHR0cHM6Ly93aWtpLnB5dGhvbi5vcmcvbW9pbi9QeXRob25Cb29rcyBmb3IgYSBsaXN0LgogCiBZb3UgY2FuIGFsc28gc2VhcmNoIG9ubGluZSBib29rc3RvcmVzIGZvciAiUHl0aG9uIiBhbmQgZmlsdGVyIG91dCB0aGUgTW9udHkKIFB5dGhvbiByZWZlcmVuY2VzOyBvciBwZXJoYXBzIHNlYXJjaCBmb3IgIlB5dGhvbiIgYW5kICJsYW5ndWFnZSIuCkBAIC0yNjksMTEgKzI3MCwxMiBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFRoZSBQeXRob24gcHJvamVjdCdzIGluZnJhc3RydWN0dXJlIGlzIGxvY2F0ZWQgYWxsIG92ZXIgdGhlIHdvcmxkLgotYHd3dy5weXRob24ub3JnIDxodHRwOi8vd3d3LnB5dGhvbi5vcmc+YF8gaXMgY3VycmVudGx5IGluIEFtc3RlcmRhbSwgZ3JhY2lvdXNseQotaG9zdGVkIGJ5IGBYUzRBTEwgPGh0dHA6Ly93d3cueHM0YWxsLm5sPmBfLiAgYFVwZnJvbnQgU3lzdGVtcworYHd3dy5weXRob24ub3JnIDxodHRwczovL3d3dy5weXRob24ub3JnPmBfIGlzIGdyYWNpb3VzbHkgaG9zdGVkIGJ5IGBSYWNrc3BhY2UKKzxodHRwOi8vd3d3LnJhY2tzcGFjZS5jb20+YF8sIHdpdGggQ0ROIGNhY2hpbmcgcHJvdmlkZWQgYnkgYEZhc3RseQorPGh0dHBzOi8vd3d3LmZhc3RseS5jb20+YF8uICBgVXBmcm9udCBTeXN0ZW1zCiA8aHR0cDovL3d3dy51cGZyb250c3lzdGVtcy5jby56YT5gXyBob3N0cyBgYnVncy5weXRob24ub3JnCi08aHR0cDovL2J1Z3MucHl0aG9uLm9yZz5gXy4gIE1vc3Qgb3RoZXIgUHl0aG9uIHNlcnZpY2VzIGxpa2UgYFB5UEkKLTxodHRwczovL3B5cGkucHl0aG9uLm9yZz5gXyBhbmQgaGcucHl0aG9uLm9yZyBhcmUgaG9zdGVkIGJ5IGBPcmVnb24gU3RhdGUKKzxodHRwczovL2J1Z3MucHl0aG9uLm9yZz5gXy4gIE1hbnkgb3RoZXIgUHl0aG9uIHNlcnZpY2VzIGxpa2UgYHRoZSBXaWtpCis8aHR0cHM6Ly93aWtpLnB5dGhvbi5vcmc+YF8gYXJlIGhvc3RlZCBieSBgT3JlZ29uIFN0YXRlCiBVbml2ZXJzaXR5IE9wZW4gU291cmNlIExhYiA8aHR0cHM6Ly9vc3Vvc2wub3JnPmBfLgogCiAKQEAgLTI4Miw3ICsyODQsNyBAQAogCiBXaGVuIGhlIGJlZ2FuIGltcGxlbWVudGluZyBQeXRob24sIEd1aWRvIHZhbiBSb3NzdW0gd2FzIGFsc28gcmVhZGluZyB0aGUKIHB1Ymxpc2hlZCBzY3JpcHRzIGZyb20gYCJNb250eSBQeXRob24ncyBGbHlpbmcgQ2lyY3VzIgotPGh0dHA6Ly9weXRob25saW5lLmNvbS8+YF9fLCBhIEJCQyBjb21lZHkgc2VyaWVzIGZyb20gdGhlIDE5NzBzLiAgVmFuIFJvc3N1bQorPGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTW9udHlfUHl0aG9uPmBfXywgYSBCQkMgY29tZWR5IHNlcmllcyBmcm9tIHRoZSAxOTcwcy4gIFZhbiBSb3NzdW0KIHRob3VnaHQgaGUgbmVlZGVkIGEgbmFtZSB0aGF0IHdhcyBzaG9ydCwgdW5pcXVlLCBhbmQgc2xpZ2h0bHkgbXlzdGVyaW91cywgc28gaGUKIGRlY2lkZWQgdG8gY2FsbCB0aGUgbGFuZ3VhZ2UgUHl0aG9uLgogCkBAIC0zMTEsNyArMzEzLDcgQEAKIHJlbGVhc2VzLgogCiBUaGUgbGF0ZXN0IHN0YWJsZSByZWxlYXNlcyBjYW4gYWx3YXlzIGJlIGZvdW5kIG9uIHRoZSBgUHl0aG9uIGRvd25sb2FkIHBhZ2UKLTxodHRwOi8vcHl0aG9uLm9yZy9kb3dubG9hZC8+YF8uICBUaGVyZSBhcmUgdHdvIHJlY29tbWVuZGVkIHByb2R1Y3Rpb24tcmVhZHkKKzxodHRwczovL3d3dy5weXRob24ub3JnL2Rvd25sb2FkLz5gXy4gIFRoZXJlIGFyZSB0d28gcmVjb21tZW5kZWQgcHJvZHVjdGlvbi1yZWFkeQogdmVyc2lvbnMgYXQgdGhpcyBwb2ludCBpbiB0aW1lLCBiZWNhdXNlIGF0IHRoZSBtb21lbnQgdGhlcmUgYXJlIHR3byBicmFuY2hlcyBvZgogc3RhYmxlIHJlbGVhc2VzOiAyLnggYW5kIDMueC4gIFB5dGhvbiAzLnggbWF5IGJlIGxlc3MgdXNlZnVsIHRoYW4gMi54LCBzaW5jZQogY3VycmVudGx5IHRoZXJlIGlzIG1vcmUgdGhpcmQgcGFydHkgc29mdHdhcmUgYXZhaWxhYmxlIGZvciBQeXRob24gMiB0aGFuIGZvcgpAQCAtMzM1LDkgKzMzNyw5IEBACiBIYXZlIGFueSBzaWduaWZpY2FudCBwcm9qZWN0cyBiZWVuIGRvbmUgaW4gUHl0aG9uPwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotU2VlIGh0dHA6Ly9weXRob24ub3JnL2Fib3V0L3N1Y2Nlc3MgZm9yIGEgbGlzdCBvZiBwcm9qZWN0cyB0aGF0IHVzZSBQeXRob24uCitTZWUgaHR0cHM6Ly93d3cucHl0aG9uLm9yZy9hYm91dC9zdWNjZXNzIGZvciBhIGxpc3Qgb2YgcHJvamVjdHMgdGhhdCB1c2UgUHl0aG9uLgogQ29uc3VsdGluZyB0aGUgcHJvY2VlZGluZ3MgZm9yIGBwYXN0IFB5dGhvbiBjb25mZXJlbmNlcwotPGh0dHA6Ly9weXRob24ub3JnL2NvbW11bml0eS93b3Jrc2hvcHMvPmBfIHdpbGwgcmV2ZWFsIGNvbnRyaWJ1dGlvbnMgZnJvbSBtYW55Cis8aHR0cHM6Ly93d3cucHl0aG9uLm9yZy9jb21tdW5pdHkvd29ya3Nob3BzLz5gXyB3aWxsIHJldmVhbCBjb250cmlidXRpb25zIGZyb20gbWFueQogZGlmZmVyZW50IGNvbXBhbmllcyBhbmQgb3JnYW5pemF0aW9ucy4KIAogSGlnaC1wcm9maWxlIFB5dGhvbiBwcm9qZWN0cyBpbmNsdWRlIGB0aGUgTWFpbG1hbiBtYWlsaW5nIGxpc3QgbWFuYWdlcgpAQCAtMzUxLDE0ICszNTMsMTQgQEAKIFdoYXQgbmV3IGRldmVsb3BtZW50cyBhcmUgZXhwZWN0ZWQgZm9yIFB5dGhvbiBpbiB0aGUgZnV0dXJlPwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVNlZSBodHRwOi8vd3d3LnB5dGhvbi5vcmcvZGV2L3BlcHMvIGZvciB0aGUgUHl0aG9uIEVuaGFuY2VtZW50IFByb3Bvc2FscworU2VlIGh0dHBzOi8vd3d3LnB5dGhvbi5vcmcvZGV2L3BlcHMvIGZvciB0aGUgUHl0aG9uIEVuaGFuY2VtZW50IFByb3Bvc2FscwogKFBFUHMpLiBQRVBzIGFyZSBkZXNpZ24gZG9jdW1lbnRzIGRlc2NyaWJpbmcgYSBzdWdnZXN0ZWQgbmV3IGZlYXR1cmUgZm9yIFB5dGhvbiwKIHByb3ZpZGluZyBhIGNvbmNpc2UgdGVjaG5pY2FsIHNwZWNpZmljYXRpb24gYW5kIGEgcmF0aW9uYWxlLiAgTG9vayBmb3IgYSBQRVAKIHRpdGxlZCAiUHl0aG9uIFguWSBSZWxlYXNlIFNjaGVkdWxlIiwgd2hlcmUgWC5ZIGlzIGEgdmVyc2lvbiB0aGF0IGhhc24ndCBiZWVuCiBwdWJsaWNseSByZWxlYXNlZCB5ZXQuCiAKIE5ldyBkZXZlbG9wbWVudCBpcyBkaXNjdXNzZWQgb24gYHRoZSBweXRob24tZGV2IG1haWxpbmcgbGlzdAotPGh0dHA6Ly9tYWlsLnB5dGhvbi5vcmcvbWFpbG1hbi9saXN0aW5mby9weXRob24tZGV2Lz5gXy4KKzxodHRwczovL21haWwucHl0aG9uLm9yZy9tYWlsbWFuL2xpc3RpbmZvL3B5dGhvbi1kZXYvPmBfLgogCiAKIElzIGl0IHJlYXNvbmFibGUgdG8gcHJvcG9zZSBpbmNvbXBhdGlibGUgY2hhbmdlcyB0byBQeXRob24/CkBAIC0zNzYsNDMgKzM3OCw2IEBACiBjaGFuZ2VzIHdoaWxlIG1pbmltaXppbmcgZGlzcnVwdGlvbiBmb3IgdXNlcnMuCiAKIAotSXMgUHl0aG9uIFkySyAoWWVhciAyMDAwKSBDb21wbGlhbnQ/Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLi4gcmVtb3ZlIHRoaXMgcXVlc3Rpb24/Ci0KLUFzIG9mIEF1Z3VzdCwgMjAwMyBubyBtYWpvciBwcm9ibGVtcyBoYXZlIGJlZW4gcmVwb3J0ZWQgYW5kIFkySyBjb21wbGlhbmNlIHNlZW1zCi10byBiZSBhIG5vbi1pc3N1ZS4KLQotUHl0aG9uIGRvZXMgdmVyeSBmZXcgZGF0ZSBjYWxjdWxhdGlvbnMgYW5kIGZvciB0aG9zZSBpdCBkb2VzIHBlcmZvcm0gcmVsaWVzIG9uCi10aGUgQyBsaWJyYXJ5IGZ1bmN0aW9ucy4gIFB5dGhvbiBnZW5lcmFsbHkgcmVwcmVzZW50cyB0aW1lcyBlaXRoZXIgYXMgc2Vjb25kcwotc2luY2UgMTk3MCBvciBhcyBhIGBgKHllYXIsIG1vbnRoLCBkYXksIC4uLilgYCB0dXBsZSB3aGVyZSB0aGUgeWVhciBpcyBleHByZXNzZWQKLXdpdGggZm91ciBkaWdpdHMsIHdoaWNoIG1ha2VzIFkySyBidWdzIHVubGlrZWx5LiAgU28gYXMgbG9uZyBhcyB5b3VyIEMgbGlicmFyeQotaXMgb2theSwgUHl0aG9uIHNob3VsZCBiZSBva2F5LiAgT2YgY291cnNlLCBpdCdzIHBvc3NpYmxlIHRoYXQgYSBwYXJ0aWN1bGFyCi1hcHBsaWNhdGlvbiB3cml0dGVuIGluIFB5dGhvbiBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCAyLWRpZ2l0IHllYXJzLgotCi1CZWNhdXNlIFB5dGhvbiBpcyBhdmFpbGFibGUgZnJlZSBvZiBjaGFyZ2UsIHRoZXJlIGFyZSBubyBhYnNvbHV0ZSBndWFyYW50ZWVzLgotSWYgdGhlcmUgKmFyZSogdW5mb3Jlc2VlbiBwcm9ibGVtcywgbGlhYmlsaXR5IGlzIHRoZSB1c2VyJ3MgcHJvYmxlbSByYXRoZXIgdGhhbgotdGhlIGRldmVsb3BlcnMnLCBhbmQgdGhlcmUgaXMgbm9ib2R5IHlvdSBjYW4gc3VlIGZvciBkYW1hZ2VzLiAgVGhlIFB5dGhvbgotY29weXJpZ2h0IG5vdGljZSBjb250YWlucyB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXI6Ci0KLSAgICA0LiBQU0YgaXMgbWFraW5nIFB5dGhvbiAyLjMgYXZhaWxhYmxlIHRvIExpY2Vuc2VlIG9uIGFuICJBUyBJUyIKLSAgICBiYXNpcy4gIFBTRiBNQUtFUyBOTyBSRVBSRVNFTlRBVElPTlMgT1IgV0FSUkFOVElFUywgRVhQUkVTUyBPUiBJTVBMSUVELiAgQlkKLSAgICBXQVkgT0YgRVhBTVBMRSwgQlVUIE5PVCBMSU1JVEFUSU9OLCBQU0YgTUFLRVMgTk8gQU5EIERJU0NMQUlNUyBBTlkKLSAgICBSRVBSRVNFTlRBVElPTiBPUiBXQVJSQU5UWSBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQU5ZIFBBUlRJQ1VMQVIKLSAgICBQVVJQT1NFIE9SIFRIQVQgVEhFIFVTRSBPRiBQWVRIT04gMi4zIFdJTEwgTk9UIElORlJJTkdFIEFOWSBUSElSRCBQQVJUWQotICAgIFJJR0hUUy4KLQotICAgIDUuIFBTRiBTSEFMTCBOT1QgQkUgTElBQkxFIFRPIExJQ0VOU0VFIE9SIEFOWSBPVEhFUiBVU0VSUyBPRiBQWVRIT04KLSAgICAyLjMgRk9SIEFOWSBJTkNJREVOVEFMLCBTUEVDSUFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgTE9TUyBBUwotICAgIEEgUkVTVUxUIE9GIE1PRElGWUlORywgRElTVFJJQlVUSU5HLCBPUiBPVEhFUldJU0UgVVNJTkcgUFlUSE9OIDIuMywKLSAgICBPUiBBTlkgREVSSVZBVElWRSBUSEVSRU9GLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIFRIRVJFT0YuCi0KLVRoZSBnb29kIG5ld3MgaXMgdGhhdCAqaWYqIHlvdSBlbmNvdW50ZXIgYSBwcm9ibGVtLCB5b3UgaGF2ZSBmdWxsIHNvdXJjZQotYXZhaWxhYmxlIHRvIHRyYWNrIGl0IGRvd24gYW5kIGZpeCBpdC4gIFRoaXMgaXMgb25lIGFkdmFudGFnZSBvZiBhbiBvcGVuIHNvdXJjZQotcHJvZ3JhbW1pbmcgZW52aXJvbm1lbnQuCi0KLQogSXMgUHl0aG9uIGEgZ29vZCBsYW5ndWFnZSBmb3IgYmVnaW5uaW5nIHByb2dyYW1tZXJzPwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC00NTEsMTQgKzQxNiwyNSBAQAogcmVtZW1iZXIgdGhlIG1ldGhvZHMgZm9yIGEgbGlzdCwgdGhleSBjYW4gZG8gc29tZXRoaW5nIGxpa2UgdGhpczo6CiAKICAgID4+PiBMID0gW10KLSAgID4+PiBkaXIoTCkKLSAgIFsnYXBwZW5kJywgJ2NvdW50JywgJ2V4dGVuZCcsICdpbmRleCcsICdpbnNlcnQnLCAncG9wJywgJ3JlbW92ZScsCisgICA+Pj4gZGlyKEwpICMgZG9jdGVzdDogK05PUk1BTElaRV9XSElURVNQQUNFCisgICBbJ19fYWRkX18nLCAnX19jbGFzc19fJywgJ19fY29udGFpbnNfXycsICdfX2RlbGF0dHJfXycsICdfX2RlbGl0ZW1fXycsCisgICAnX19kaXJfXycsICdfX2RvY19fJywgJ19fZXFfXycsICdfX2Zvcm1hdF9fJywgJ19fZ2VfXycsCisgICAnX19nZXRhdHRyaWJ1dGVfXycsICdfX2dldGl0ZW1fXycsICdfX2d0X18nLCAnX19oYXNoX18nLCAnX19pYWRkX18nLAorICAgJ19faW11bF9fJywgJ19faW5pdF9fJywgJ19faXRlcl9fJywgJ19fbGVfXycsICdfX2xlbl9fJywgJ19fbHRfXycsCisgICAnX19tdWxfXycsICdfX25lX18nLCAnX19uZXdfXycsICdfX3JlZHVjZV9fJywgJ19fcmVkdWNlX2V4X18nLAorICAgJ19fcmVwcl9fJywgJ19fcmV2ZXJzZWRfXycsICdfX3JtdWxfXycsICdfX3NldGF0dHJfXycsICdfX3NldGl0ZW1fXycsCisgICAnX19zaXplb2ZfXycsICdfX3N0cl9fJywgJ19fc3ViY2xhc3Nob29rX18nLCAnYXBwZW5kJywgJ2NsZWFyJywKKyAgICdjb3B5JywgJ2NvdW50JywgJ2V4dGVuZCcsICdpbmRleCcsICdpbnNlcnQnLCAncG9wJywgJ3JlbW92ZScsCiAgICAncmV2ZXJzZScsICdzb3J0J10KKyAgID4+PiBbZCBmb3IgZCBpbiBkaXIoTCkgaWYgJ19fJyBub3QgaW4gZF0KKyAgIFsnYXBwZW5kJywgJ2NsZWFyJywgJ2NvcHknLCAnY291bnQnLCAnZXh0ZW5kJywgJ2luZGV4JywgJ2luc2VydCcsICdwb3AnLCAncmVtb3ZlJywgJ3JldmVyc2UnLCAnc29ydCddCisKICAgID4+PiBoZWxwKEwuYXBwZW5kKQogICAgSGVscCBvbiBidWlsdC1pbiBmdW5jdGlvbiBhcHBlbmQ6Ci0KKyAgIDxCTEFOS0xJTkU+CiAgICBhcHBlbmQoLi4uKQotICAgICAgIEwuYXBwZW5kKG9iamVjdCkgLS0gYXBwZW5kIG9iamVjdCB0byBlbmQKKyAgICAgICBMLmFwcGVuZChvYmplY3QpIC0+IE5vbmUgLS0gYXBwZW5kIG9iamVjdCB0byBlbmQKKyAgIDxCTEFOS0xJTkU+CiAgICA+Pj4gTC5hcHBlbmQoMSkKICAgID4+PiBMCiAgICBbMV0KQEAgLTQ3Niw0ICs0NTIsNCBAQAogCiBJZiB5b3Ugd2FudCB0byBkaXNjdXNzIFB5dGhvbidzIHVzZSBpbiBlZHVjYXRpb24sIHlvdSBtYXkgYmUgaW50ZXJlc3RlZCBpbgogam9pbmluZyBgdGhlIGVkdS1zaWcgbWFpbGluZyBsaXN0Ci08aHR0cDovL3B5dGhvbi5vcmcvY29tbXVuaXR5L3NpZ3MvY3VycmVudC9lZHUtc2lnPmBfLgorPGh0dHBzOi8vd3d3LnB5dGhvbi5vcmcvY29tbXVuaXR5L3NpZ3MvY3VycmVudC9lZHUtc2lnPmBfLgpkaWZmIC0tZ2l0IGEvRG9jL2ZhcS9ndWkucnN0IGIvRG9jL2ZhcS9ndWkucnN0CmluZGV4IDU4MjdmMjguLjUxMjJkZTEgMTAwNjQ0Ci0tLSBhL0RvYy9mYXEvZ3VpLnJzdAorKysgYi9Eb2MvZmFxL2d1aS5yc3QKQEAgLTI5LDE3ICsyOSwxNyBAQAogU3RhbmRhcmQgYnVpbGRzIG9mIFB5dGhvbiBpbmNsdWRlIGFuIG9iamVjdC1vcmllbnRlZCBpbnRlcmZhY2UgdG8gdGhlIFRjbC9Uawogd2lkZ2V0IHNldCwgY2FsbGVkIDpyZWY6YHRraW50ZXIgPFRraW50ZXI+YC4gIFRoaXMgaXMgcHJvYmFibHkgdGhlIGVhc2llc3QgdG8KIGluc3RhbGwgKHNpbmNlIGl0IGNvbWVzIGluY2x1ZGVkIHdpdGggbW9zdAotYGJpbmFyeSBkaXN0cmlidXRpb25zIDxodHRwOi8vd3d3LnB5dGhvbi5vcmcvZG93bmxvYWQvPmBfIG9mIFB5dGhvbikgYW5kIHVzZS4KK2BiaW5hcnkgZGlzdHJpYnV0aW9ucyA8aHR0cHM6Ly93d3cucHl0aG9uLm9yZy9kb3dubG9hZC8+YF8gb2YgUHl0aG9uKSBhbmQgdXNlLgogRm9yIG1vcmUgaW5mbyBhYm91dCBUaywgaW5jbHVkaW5nIHBvaW50ZXJzIHRvIHRoZSBzb3VyY2UsIHNlZSB0aGUKIGBUY2wvVGsgaG9tZSBwYWdlIDxodHRwOi8vd3d3LnRjbC50az5gXy4gIFRjbC9UayBpcyBmdWxseSBwb3J0YWJsZSB0byB0aGUKLU1hY09TLCBXaW5kb3dzLCBhbmQgVW5peCBwbGF0Zm9ybXMuCitNYWMgT1MgWCwgV2luZG93cywgYW5kIFVuaXggcGxhdGZvcm1zLgogCiB3eFdpZGdldHMKIC0tLS0tLS0tLQogCiB3eFdpZGdldHMgKGh0dHA6Ly93d3cud3h3aWRnZXRzLm9yZykgaXMgYSBmcmVlLCBwb3J0YWJsZSBHVUkgY2xhc3MKIGxpYnJhcnkgd3JpdHRlbiBpbiBDKysgdGhhdCBwcm92aWRlcyBhIG5hdGl2ZSBsb29rIGFuZCBmZWVsIG9uIGEKLW51bWJlciBvZiBwbGF0Zm9ybXMsIHdpdGggV2luZG93cywgTWFjT1MgWCwgR1RLLCBYMTEsIGFsbCBsaXN0ZWQgYXMKK251bWJlciBvZiBwbGF0Zm9ybXMsIHdpdGggV2luZG93cywgTWFjIE9TIFgsIEdUSywgWDExLCBhbGwgbGlzdGVkIGFzCiBjdXJyZW50IHN0YWJsZSB0YXJnZXRzLiAgTGFuZ3VhZ2UgYmluZGluZ3MgYXJlIGF2YWlsYWJsZSBmb3IgYSBudW1iZXIKIG9mIGxhbmd1YWdlcyBpbmNsdWRpbmcgUHl0aG9uLCBQZXJsLCBSdWJ5LCBldGMuCiAKQEAgLTU4LDE0ICs1OCwxNCBAQAogLS0tCiAKIFRoZXJlIGFyZSBiaW5kaW5ncyBhdmFpbGFibGUgZm9yIHRoZSBRdCB0b29sa2l0ICh1c2luZyBlaXRoZXIgYFB5UXQKLTxodHRwOi8vd3d3LnJpdmVyYmFua2NvbXB1dGluZy5jby51ay9zb2Z0d2FyZS9weXF0Lz5gXyBvciBgUHlTaWRlCi08aHR0cDovL3d3dy5weXNpZGUub3JnLz5gXykgYW5kIGZvciBLREUgKGBQeUtERSA8aHR0cDovL3d3dy5yaXZlcmJhbmtjb21wdXRpbmcuY28udWsvc29mdHdhcmUvcHlrZGUvaW50cm8+YF9fKS4KKzxodHRwOi8vd3d3LnJpdmVyYmFua2NvbXB1dGluZy5jby51ay9zb2Z0d2FyZS9weXF0L2ludHJvPmBfIG9yIGBQeVNpZGUKKzxodHRwOi8vd3d3LnB5c2lkZS5vcmcvPmBfKSBhbmQgZm9yIEtERSAoYFB5S0RFIDxodHRwczovL3RlY2hiYXNlLmtkZS5vcmcvRGV2ZWxvcG1lbnQvTGFuZ3VhZ2VzL1B5dGhvbj5gX18pLgogUHlRdCBpcyBjdXJyZW50bHkgbW9yZSBtYXR1cmUgdGhhbiBQeVNpZGUsIGJ1dCB5b3UgbXVzdCBidXkgYSBQeVF0IGxpY2Vuc2UgZnJvbQogYFJpdmVyYmFuayBDb21wdXRpbmcgPGh0dHA6Ly93d3cucml2ZXJiYW5rY29tcHV0aW5nLmNvLnVrL3NvZnR3YXJlL3B5cXQvbGljZW5zZT5gXwogaWYgeW91IHdhbnQgdG8gd3JpdGUgcHJvcHJpZXRhcnkgYXBwbGljYXRpb25zLiAgUHlTaWRlIGlzIGZyZWUgZm9yIGFsbCBhcHBsaWNhdGlvbnMuCiAKIFF0IDQuNSB1cHdhcmRzIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBMR1BMIGxpY2Vuc2U7IGFsc28sIGNvbW1lcmNpYWwgbGljZW5zZXMKLWFyZSBhdmFpbGFibGUgZnJvbSBgTm9raWEgPGh0dHA6Ly9xdC5ub2tpYS5jb20vPmBfLgorYXJlIGF2YWlsYWJsZSBmcm9tIGBUaGUgUXQgQ29tcGFueSA8aHR0cDovL3d3dy5xdC5pby9saWNlbnNpbmcvPmBfLgogCiBHdGsrCiAtLS0tCkBAIC0xMDIsMTMgKzEwMiw5IEBACiBXaGF0IHBsYXRmb3JtLXNwZWNpZmljIEdVSSB0b29sa2l0cyBleGlzdCBmb3IgUHl0aG9uPwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAotYFRoZSBNYWMgcG9ydCA8aHR0cDovL3B5dGhvbi5vcmcvZG93bmxvYWQvbWFjPmBfIGJ5IEphY2sgSmFuc2VuIGhhcyBhIHJpY2ggYW5kCi1ldmVyLWdyb3dpbmcgc2V0IG9mIG1vZHVsZXMgdGhhdCBzdXBwb3J0IHRoZSBuYXRpdmUgTWFjIHRvb2xib3ggY2FsbHMuICBUaGUgcG9ydAotc3VwcG9ydHMgTWFjT1MgWCdzIENhcmJvbiBsaWJyYXJpZXMuCi0KIEJ5IGluc3RhbGxpbmcgdGhlIGBQeU9iamMgT2JqZWN0aXZlLUMgYnJpZGdlCi08aHR0cDovL3B5b2JqYy5zb3VyY2Vmb3JnZS5uZXQ+YF8sIFB5dGhvbiBwcm9ncmFtcyBjYW4gdXNlIE1hY09TIFgncwotQ29jb2EgbGlicmFyaWVzLiBTZWUgdGhlIGRvY3VtZW50YXRpb24gdGhhdCBjb21lcyB3aXRoIHRoZSBNYWMgcG9ydC4KKzxodHRwczovL3B5dGhvbmhvc3RlZC5vcmcvcHlvYmpjLz5gXywgUHl0aG9uIHByb2dyYW1zIGNhbiB1c2UgTWFjIE9TIFgncworQ29jb2EgbGlicmFyaWVzLgogCiA6cmVmOmBQeXRob253aW4gPHdpbmRvd3MtZmFxPmAgYnkgTWFyayBIYW1tb25kIGluY2x1ZGVzIGFuIGludGVyZmFjZSB0byB0aGUKIE1pY3Jvc29mdCBGb3VuZGF0aW9uIENsYXNzZXMgYW5kIGEgUHl0aG9uIHByb2dyYW1taW5nIGVudmlyb25tZW50CkBAIC0xNDMsMzAgKzEzOSwxMSBAQAogQ2FuIEkgaGF2ZSBUayBldmVudHMgaGFuZGxlZCB3aGlsZSB3YWl0aW5nIGZvciBJL08/CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotWWVzLCBhbmQgeW91IGRvbid0IGV2ZW4gbmVlZCB0aHJlYWRzISAgQnV0IHlvdSdsbCBoYXZlIHRvIHJlc3RydWN0dXJlIHlvdXIgSS9PCitPbiBwbGF0Zm9ybXMgb3RoZXIgdGhhbiBXaW5kb3dzLCB5ZXMsIGFuZCB5b3UgZG9uJ3QgZXZlbgorbmVlZCB0aHJlYWRzISAgQnV0IHlvdSdsbCBoYXZlIHRvIHJlc3RydWN0dXJlIHlvdXIgSS9PCiBjb2RlIGEgYml0LiAgVGsgaGFzIHRoZSBlcXVpdmFsZW50IG9mIFh0J3MgOmM6ZnVuYzpgWHRBZGRJbnB1dCgpYCBjYWxsLCB3aGljaCBhbGxvd3MgeW91CiB0byByZWdpc3RlciBhIGNhbGxiYWNrIGZ1bmN0aW9uIHdoaWNoIHdpbGwgYmUgY2FsbGVkIGZyb20gdGhlIFRrIG1haW5sb29wIHdoZW4KLUkvTyBpcyBwb3NzaWJsZSBvbiBhIGZpbGUgZGVzY3JpcHRvci4gIEhlcmUncyB3aGF0IHlvdSBuZWVkOjoKLQotICAgZnJvbSBUa2ludGVyIGltcG9ydCB0a2ludGVyCi0gICB0a2ludGVyLmNyZWF0ZWZpbGVoYW5kbGVyKGZpbGUsIG1hc2ssIGNhbGxiYWNrKQotCi1UaGUgZmlsZSBtYXkgYmUgYSBQeXRob24gZmlsZSBvciBzb2NrZXQgb2JqZWN0IChhY3R1YWxseSwgYW55dGhpbmcgd2l0aCBhCi1maWxlbm8oKSBtZXRob2QpLCBvciBhbiBpbnRlZ2VyIGZpbGUgZGVzY3JpcHRvci4gIFRoZSBtYXNrIGlzIG9uZSBvZiB0aGUKLWNvbnN0YW50cyB0a2ludGVyLlJFQURBQkxFIG9yIHRraW50ZXIuV1JJVEFCTEUuICBUaGUgY2FsbGJhY2sgaXMgY2FsbGVkIGFzCi1mb2xsb3dzOjoKLQotICAgY2FsbGJhY2soZmlsZSwgbWFzaykKLQotWW91IG11c3QgdW5yZWdpc3RlciB0aGUgY2FsbGJhY2sgd2hlbiB5b3UncmUgZG9uZSwgdXNpbmcgOjoKLQotICAgdGtpbnRlci5kZWxldGVmaWxlaGFuZGxlcihmaWxlKQotCi1Ob3RlOiBzaW5jZSB5b3UgZG9uJ3Qga25vdyAqaG93IG1hbnkgYnl0ZXMqIGFyZSBhdmFpbGFibGUgZm9yIHJlYWRpbmcsIHlvdSBjYW4ndAotdXNlIHRoZSBQeXRob24gZmlsZSBvYmplY3QncyByZWFkIG9yIHJlYWRsaW5lIG1ldGhvZHMsIHNpbmNlIHRoZXNlIHdpbGwgaW5zaXN0Ci1vbiByZWFkaW5nIGEgcHJlZGVmaW5lZCBudW1iZXIgb2YgYnl0ZXMuICBGb3Igc29ja2V0cywgdGhlIDptZXRoOmByZWN2YCBvcgotOm1ldGg6YHJlY3Zmcm9tYCBtZXRob2RzIHdpbGwgd29yayBmaW5lOyBmb3Igb3RoZXIgZmlsZXMsIHVzZQotYGBvcy5yZWFkKGZpbGUuZmlsZW5vKCksIG1heGJ5dGVjb3VudClgYC4KK0kvTyBpcyBwb3NzaWJsZSBvbiBhIGZpbGUgZGVzY3JpcHRvci4gIFNlZSA6cmVmOmB0a2ludGVyLWZpbGUtaGFuZGxlcnNgLgogCiAKIEkgY2FuJ3QgZ2V0IGtleSBiaW5kaW5ncyB0byB3b3JrIGluIFRraW50ZXI6IHdoeT8KZGlmZiAtLWdpdCBhL0RvYy9mYXEvaW5zdGFsbGVkLnJzdCBiL0RvYy9mYXEvaW5zdGFsbGVkLnJzdAppbmRleCBlZmVjOWJmLi40MjI5NjUzIDEwMDY0NAotLS0gYS9Eb2MvZmFxL2luc3RhbGxlZC5yc3QKKysrIGIvRG9jL2ZhcS9pbnN0YWxsZWQucnN0CkBAIC0xMSw3ICsxMSw3IEBACiBzb2Z0d2FyZSBkZXZlbG9wZXJzIGF0IHBsYWNlcyBzdWNoIGFzIEdvb2dsZSwgTkFTQSwgYW5kIEx1Y2FzZmlsbSBMdGQuCiAKIElmIHlvdSB3aXNoIHRvIGxlYXJuIG1vcmUgYWJvdXQgUHl0aG9uLCBzdGFydCB3aXRoIHRoZSBgQmVnaW5uZXIncyBHdWlkZSB0bwotUHl0aG9uIDxodHRwOi8vd2lraS5weXRob24ub3JnL21vaW4vQmVnaW5uZXJzR3VpZGU+YF8uCitQeXRob24gPGh0dHBzOi8vd2lraS5weXRob24ub3JnL21vaW4vQmVnaW5uZXJzR3VpZGU+YF8uCiAKIAogV2h5IGlzIFB5dGhvbiBpbnN0YWxsZWQgb24gbXkgbWFjaGluZT8KZGlmZiAtLWdpdCBhL0RvYy9mYXEvbGlicmFyeS5yc3QgYi9Eb2MvZmFxL2xpYnJhcnkucnN0CmluZGV4IDI1NjY5MzIuLjA2NDcyOGYgMTAwNjQ0Ci0tLSBhL0RvYy9mYXEvbGlicmFyeS5yc3QKKysrIGIvRG9jL2ZhcS9saWJyYXJ5LnJzdApAQCAtMTksNyArMTksNyBAQAogbGlicmFyeSBhbmQgd2lsbCBiZSBhYmxlIHRvIHNraXAgdGhpcyBzdGVwLikKIAogRm9yIHRoaXJkLXBhcnR5IHBhY2thZ2VzLCBzZWFyY2ggdGhlIGBQeXRob24gUGFja2FnZSBJbmRleAotPGh0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaT5gXyBvciB0cnkgYEdvb2dsZSA8aHR0cDovL3d3dy5nb29nbGUuY29tPmBfIG9yCis8aHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaT5gXyBvciB0cnkgYEdvb2dsZSA8aHR0cHM6Ly93d3cuZ29vZ2xlLmNvbT5gXyBvcgogYW5vdGhlciBXZWIgc2VhcmNoIGVuZ2luZS4gIFNlYXJjaGluZyBmb3IgIlB5dGhvbiIgcGx1cyBhIGtleXdvcmQgb3IgdHdvIGZvcgogeW91ciB0b3BpYyBvZiBpbnRlcmVzdCB3aWxsIHVzdWFsbHkgZmluZCBzb21ldGhpbmcgaGVscGZ1bC4KIApAQCAtMTgxLDggKzE4MSw4IEBACiAKIFRoZSA6bW9kOmBweWRvY2AgbW9kdWxlIGNhbiBjcmVhdGUgSFRNTCBmcm9tIHRoZSBkb2Mgc3RyaW5ncyBpbiB5b3VyIFB5dGhvbgogc291cmNlIGNvZGUuICBBbiBhbHRlcm5hdGl2ZSBmb3IgY3JlYXRpbmcgQVBJIGRvY3VtZW50YXRpb24gcHVyZWx5IGZyb20KLWRvY3N0cmluZ3MgaXMgYGVweWRvYyA8aHR0cDovL2VweWRvYy5zZi5uZXQvPmBfLiAgYFNwaGlueAotPGh0dHA6Ly9zcGhpbngucG9jb28ub3JnPmBfIGNhbiBhbHNvIGluY2x1ZGUgZG9jc3RyaW5nIGNvbnRlbnQuCitkb2NzdHJpbmdzIGlzIGBlcHlkb2MgPGh0dHA6Ly9lcHlkb2Muc291cmNlZm9yZ2UubmV0Lz5gXy4gIGBTcGhpbngKKzxodHRwOi8vc3BoaW54LWRvYy5vcmc+YF8gY2FuIGFsc28gaW5jbHVkZSBkb2NzdHJpbmcgY29udGVudC4KIAogCiBIb3cgZG8gSSBnZXQgYSBzaW5nbGUga2V5cHJlc3MgYXQgYSB0aW1lPwpAQCAtMjExLDcgKzIxMSw3IEBACiAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgIGMgPSBzeXMuc3RkaW4ucmVhZCgxKQogICAgICAgICAgICAgICAgcHJpbnQoIkdvdCBjaGFyYWN0ZXIiLCByZXByKGMpKQotICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICBwYXNzCiAgICBmaW5hbGx5OgogICAgICAgIHRlcm1pb3MudGNzZXRhdHRyKGZkLCB0ZXJtaW9zLlRDU0FGTFVTSCwgb2xkdGVybSkKQEAgLTIyNCw3ICsyMjQsMTEgQEAKICAgIDpmdW5jOmB0ZXJtaW9zLnRjc2V0YXR0cmAgdHVybnMgb2ZmIHN0ZGluJ3MgZWNob2luZyBhbmQgZGlzYWJsZXMgY2Fub25pY2FsCiAgICBtb2RlLiAgOmZ1bmM6YGZjbnRsLmZuY3RsYCBpcyB1c2VkIHRvIG9idGFpbiBzdGRpbidzIGZpbGUgZGVzY3JpcHRvciBmbGFncwogICAgYW5kIG1vZGlmeSB0aGVtIGZvciBub24tYmxvY2tpbmcgbW9kZS4gIFNpbmNlIHJlYWRpbmcgc3RkaW4gd2hlbiBpdCBpcyBlbXB0eQotICAgcmVzdWx0cyBpbiBhbiA6ZXhjOmBJT0Vycm9yYCwgdGhpcyBlcnJvciBpcyBjYXVnaHQgYW5kIGlnbm9yZWQuCisgICByZXN1bHRzIGluIGFuIDpleGM6YE9TRXJyb3JgLCB0aGlzIGVycm9yIGlzIGNhdWdodCBhbmQgaWdub3JlZC4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKKyAgICAgICpzeXMuc3RkaW4ucmVhZCogdXNlZCB0byByYWlzZSA6ZXhjOmBJT0Vycm9yYC4gU3RhcnRpbmcgZnJvbSBQeXRob24gMy4zCisgICAgICA6ZXhjOmBJT0Vycm9yYCBpcyBhbGlhcyBmb3IgOmV4YzpgT1NFcnJvcmAuCiAKIAogVGhyZWFkcwpAQCAtNjAzLDcgKzYwNyw3IEBACiAgICAiZXhwZWN0IiBsaWJyYXJ5LiAgQSBQeXRob24gZXh0ZW5zaW9uIHRoYXQgaW50ZXJmYWNlcyB0byBleHBlY3QgaXMgY2FsbGVkCiAgICAiZXhweSIgYW5kIGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly9leHBlY3RweS5zb3VyY2Vmb3JnZS5uZXQuICBBIHB1cmUgUHl0aG9uCiAgICBzb2x1dGlvbiB0aGF0IHdvcmtzIGxpa2UgZXhwZWN0IGlzIGBwZXhwZWN0Ci0gICA8aHR0cDovL3B5cGkucHl0aG9uLm9yZy9weXBpL3BleHBlY3QvPmBfLgorICAgPGh0dHBzOi8vcHlwaS5weXRob24ub3JnL3B5cGkvcGV4cGVjdC8+YF8uCiAKIAogSG93IGRvIEkgYWNjZXNzIHRoZSBzZXJpYWwgKFJTMjMyKSBwb3J0PwpAQCAtNjU5LDcgKzY2Myw3IEBACiAuLiBYWFggY2hlY2sgaWYgd2lraSBwYWdlIGlzIHN0aWxsIHVwIHRvIGRhdGUKIAogQSBzdW1tYXJ5IG9mIGF2YWlsYWJsZSBmcmFtZXdvcmtzIGlzIG1haW50YWluZWQgYnkgUGF1bCBCb2RkaWUgYXQKLWh0dHA6Ly93aWtpLnB5dGhvbi5vcmcvbW9pbi9XZWJQcm9ncmFtbWluZ1wgLgoraHR0cHM6Ly93aWtpLnB5dGhvbi5vcmcvbW9pbi9XZWJQcm9ncmFtbWluZ1wgLgogCiBDYW1lcm9uIExhaXJkIG1haW50YWlucyBhIHVzZWZ1bCBzZXQgb2YgcGFnZXMgYWJvdXQgUHl0aG9uIHdlYiB0ZWNobm9sb2dpZXMgYXQKIGh0dHA6Ly9waGFzZWl0Lm5ldC9jbGFpcmQvY29tcC5sYW5nLnB5dGhvbi93ZWJfcHl0aG9uLgpAQCAtNjgzLDcgKzY4Nyw4IEBACiAgICAjIyMgY29ubmVjdCBhbmQgc2VuZCB0aGUgc2VydmVyIGEgcGF0aAogICAgcmVxID0gdXJsbGliLnJlcXVlc3QudXJsb3BlbignaHR0cDovL3d3dy5zb21lLXNlcnZlci5vdXQtdGhlcmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvY2dpLWJpbi9zb21lLWNnaS1zY3JpcHQnLCBkYXRhPXFzKQotICAgbXNnLCBoZHJzID0gcmVxLnJlYWQoKSwgcmVxLmluZm8oKQorICAgd2l0aCByZXE6CisgICAgICAgbXNnLCBoZHJzID0gcmVxLnJlYWQoKSwgcmVxLmluZm8oKQogCiBOb3RlIHRoYXQgaW4gZ2VuZXJhbCBmb3IgcGVyY2VudC1lbmNvZGVkIFBPU1Qgb3BlcmF0aW9ucywgcXVlcnkgc3RyaW5ncyBtdXN0IGJlCiBxdW90ZWQgdXNpbmcgOmZ1bmM6YHVybGxpYi5wYXJzZS51cmxlbmNvZGVgLiAgRm9yIGV4YW1wbGUsIHRvIHNlbmQKQEAgLTcwMiw3ICs3MDcsNyBAQAogLi4gWFhYIGFkZCBtb2Rlcm4gdGVtcGxhdGUgbGFuZ3VhZ2VzCiAKIFlvdSBjYW4gZmluZCBhIGNvbGxlY3Rpb24gb2YgdXNlZnVsIGxpbmtzIG9uIHRoZSBgV2ViIFByb2dyYW1taW5nIHdpa2kgcGFnZQotPGh0dHA6Ly93aWtpLnB5dGhvbi5vcmcvbW9pbi9XZWJQcm9ncmFtbWluZz5gXy4KKzxodHRwczovL3dpa2kucHl0aG9uLm9yZy9tb2luL1dlYlByb2dyYW1taW5nPmBfLgogCiAKIEhvdyBkbyBJIHNlbmQgbWFpbCBmcm9tIGEgUHl0aG9uIHNjcmlwdD8KQEAgLTc2OSw3ICs3NzQsNyBAQAogLi4gbm90ZTo6CiAgICBUaGUgOm1vZDpgYXN5bmNvcmVgIG1vZHVsZSBwcmVzZW50cyBhIGZyYW1ld29yay1saWtlIGFwcHJvYWNoIHRvIHRoZSBwcm9ibGVtCiAgICBvZiB3cml0aW5nIG5vbi1ibG9ja2luZyBuZXR3b3JraW5nIGNvZGUuCi0gICBUaGUgdGhpcmQtcGFydHkgYFR3aXN0ZWQgPGh0dHA6Ly90d2lzdGVkbWF0cml4LmNvbS8+YF8gbGlicmFyeSBpcworICAgVGhlIHRoaXJkLXBhcnR5IGBUd2lzdGVkIDxodHRwczovL3R3aXN0ZWRtYXRyaXguY29tL3RyYWMvPmBfIGxpYnJhcnkgaXMKICAgIGEgcG9wdWxhciBhbmQgZmVhdHVyZS1yaWNoIGFsdGVybmF0aXZlLgogCiAKQEAgLTc4OCw3ICs3OTMsNyBAQAogCiBTdXBwb3J0IGZvciBtb3N0IHJlbGF0aW9uYWwgZGF0YWJhc2VzIGlzIGF2YWlsYWJsZS4gIFNlZSB0aGUKIGBEYXRhYmFzZVByb2dyYW1taW5nIHdpa2kgcGFnZQotPGh0dHA6Ly93aWtpLnB5dGhvbi5vcmcvbW9pbi9EYXRhYmFzZVByb2dyYW1taW5nPmBfIGZvciBkZXRhaWxzLgorPGh0dHBzOi8vd2lraS5weXRob24ub3JnL21vaW4vRGF0YWJhc2VQcm9ncmFtbWluZz5gXyBmb3IgZGV0YWlscy4KIAogCiBIb3cgZG8geW91IGltcGxlbWVudCBwZXJzaXN0ZW50IG9iamVjdHMgaW4gUHl0aG9uPwpkaWZmIC0tZ2l0IGEvRG9jL2ZhcS9wcm9ncmFtbWluZy5yc3QgYi9Eb2MvZmFxL3Byb2dyYW1taW5nLnJzdAppbmRleCAyODBkNWUxLi4yOTU0NDVlIDEwMDY0NAotLS0gYS9Eb2MvZmFxL3Byb2dyYW1taW5nLnJzdAorKysgYi9Eb2MvZmFxL3Byb2dyYW1taW5nLnJzdApAQCAtMjMsMTUgKzIzLDE0IEBACiAKIFRoZSBJRExFIGludGVyYWN0aXZlIGRldmVsb3BtZW50IGVudmlyb25tZW50LCB3aGljaCBpcyBwYXJ0IG9mIHRoZSBzdGFuZGFyZAogUHl0aG9uIGRpc3RyaWJ1dGlvbiAobm9ybWFsbHkgYXZhaWxhYmxlIGFzIFRvb2xzL3NjcmlwdHMvaWRsZSksIGluY2x1ZGVzIGEKLWdyYXBoaWNhbCBkZWJ1Z2dlci4gIFRoZXJlIGlzIGRvY3VtZW50YXRpb24gZm9yIHRoZSBJRExFIGRlYnVnZ2VyIGF0Ci1odHRwOi8vd3d3LnB5dGhvbi5vcmcvaWRsZS9kb2MvaWRsZTIuaHRtbCNEZWJ1Z2dlci4KK2dyYXBoaWNhbCBkZWJ1Z2dlci4KIAogUHl0aG9uV2luIGlzIGEgUHl0aG9uIElERSB0aGF0IGluY2x1ZGVzIGEgR1VJIGRlYnVnZ2VyIGJhc2VkIG9uIHBkYi4gIFRoZQogUHl0aG9ud2luIGRlYnVnZ2VyIGNvbG9ycyBicmVha3BvaW50cyBhbmQgaGFzIHF1aXRlIGEgZmV3IGNvb2wgZmVhdHVyZXMgc3VjaCBhcwogZGVidWdnaW5nIG5vbi1QeXRob253aW4gcHJvZ3JhbXMuICBQeXRob253aW4gaXMgYXZhaWxhYmxlIGFzIHBhcnQgb2YgdGhlIGBQeXRob24KIGZvciBXaW5kb3dzIEV4dGVuc2lvbnMgPGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvcHl3aW4zMi8+YF9fIHByb2plY3QgYW5kCiBhcyBhIHBhcnQgb2YgdGhlIEFjdGl2ZVB5dGhvbiBkaXN0cmlidXRpb24gKHNlZQotaHR0cDovL3d3dy5hY3RpdmVzdGF0ZS5jb20vUHJvZHVjdHMvQWN0aXZlUHl0aG9uL2luZGV4Lmh0bWwpLgoraHR0cDovL3d3dy5hY3RpdmVzdGF0ZS5jb20vYWN0aXZlcHl0aG9uXCApLgogCiBgQm9hIENvbnN0cnVjdG9yIDxodHRwOi8vYm9hLWNvbnN0cnVjdG9yLnNvdXJjZWZvcmdlLm5ldC8+YF8gaXMgYW4gSURFIGFuZCBHVUkKIGJ1aWxkZXIgdGhhdCB1c2VzIHd4V2lkZ2V0cy4gIEl0IG9mZmVycyB2aXN1YWwgZnJhbWUgY3JlYXRpb24gYW5kIG1hbmlwdWxhdGlvbiwKQEAgLTM5LDcgKzM4LDcgQEAKIGhpZXJhcmNoaWVzLCBkb2Mgc3RyaW5nIGdlbmVyYXRlZCBodG1sIGRvY3VtZW50YXRpb24sIGFuIGFkdmFuY2VkIGRlYnVnZ2VyLAogaW50ZWdyYXRlZCBoZWxwLCBhbmQgWm9wZSBzdXBwb3J0LgogCi1gRXJpYyA8aHR0cDovL3d3dy5kaWUtb2ZmZW5iYWNocy5kZS9lcmljL2luZGV4Lmh0bWw+YF8gaXMgYW4gSURFIGJ1aWx0IG9uIFB5UXQKK2BFcmljIDxodHRwOi8vZXJpYy1pZGUucHl0aG9uLXByb2plY3RzLm9yZy8+YF8gaXMgYW4gSURFIGJ1aWx0IG9uIFB5UXQKIGFuZCB0aGUgU2NpbnRpbGxhIGVkaXRpbmcgY29tcG9uZW50LgogCiBQeWRiIGlzIGEgdmVyc2lvbiBvZiB0aGUgc3RhbmRhcmQgUHl0aG9uIGRlYnVnZ2VyIHBkYiwgbW9kaWZpZWQgZm9yIHVzZSB3aXRoIERERApAQCAtNTEsNyArNTAsOCBAQAogVGhleSBpbmNsdWRlOgogCiAqIFdpbmcgSURFIChodHRwOi8vd2luZ3dhcmUuY29tLykKLSogS29tb2RvIElERSAoaHR0cDovL3d3dy5hY3RpdmVzdGF0ZS5jb20vUHJvZHVjdHMvS29tb2RvKQorKiBLb21vZG8gSURFIChodHRwOi8va29tb2RvaWRlLmNvbS8pCisqIFB5Q2hhcm0gKGh0dHBzOi8vd3d3LmpldGJyYWlucy5jb20vcHljaGFybS8pCiAKIAogSXMgdGhlcmUgYSB0b29sIHRvIGhlbHAgZmluZCBidWdzIG9yIHBlcmZvcm0gc3RhdGljIGFuYWx5c2lzPwpAQCAtNjEsNyArNjEsNyBAQAogCiBQeUNoZWNrZXIgaXMgYSBzdGF0aWMgYW5hbHlzaXMgdG9vbCB0aGF0IGZpbmRzIGJ1Z3MgaW4gUHl0aG9uIHNvdXJjZSBjb2RlIGFuZAogd2FybnMgYWJvdXQgY29kZSBjb21wbGV4aXR5IGFuZCBzdHlsZS4gIFlvdSBjYW4gZ2V0IFB5Q2hlY2tlciBmcm9tCi1odHRwOi8vcHljaGVja2VyLnNmLm5ldC4KK2h0dHA6Ly9weWNoZWNrZXIuc291cmNlZm9yZ2UubmV0Ly4KIAogYFB5bGludCA8aHR0cDovL3d3dy5sb2dpbGFiLm9yZy9wcm9qZWN0cy9weWxpbnQ+YF8gaXMgYW5vdGhlciB0b29sIHRoYXQgY2hlY2tzCiBpZiBhIG1vZHVsZSBzYXRpc2ZpZXMgYSBjb2Rpbmcgc3RhbmRhcmQsIGFuZCBhbHNvIG1ha2VzIGl0IHBvc3NpYmxlIHRvIHdyaXRlCkBAIC02OSw4ICs2OSw3IEBACiBQeUNoZWNrZXIgcGVyZm9ybXMsIFB5bGludCBvZmZlcnMgc29tZSBhZGRpdGlvbmFsIGZlYXR1cmVzIHN1Y2ggYXMgY2hlY2tpbmcgbGluZQogbGVuZ3RoLCB3aGV0aGVyIHZhcmlhYmxlIG5hbWVzIGFyZSB3ZWxsLWZvcm1lZCBhY2NvcmRpbmcgdG8geW91ciBjb2RpbmcKIHN0YW5kYXJkLCB3aGV0aGVyIGRlY2xhcmVkIGludGVyZmFjZXMgYXJlIGZ1bGx5IGltcGxlbWVudGVkLCBhbmQgbW9yZS4KLWh0dHA6Ly93d3cubG9naWxhYi5vcmcvY2FyZC9weWxpbnRfbWFudWFsIHByb3ZpZGVzIGEgZnVsbCBsaXN0IG9mIFB5bGludCdzCi1mZWF0dXJlcy4KK2h0dHA6Ly9kb2NzLnB5bGludC5vcmcvIHByb3ZpZGVzIGEgZnVsbCBsaXN0IG9mIFB5bGludCdzIGZlYXR1cmVzLgogCiAKIEhvdyBjYW4gSSBjcmVhdGUgYSBzdGFuZC1hbG9uZSBiaW5hcnkgZnJvbSBhIFB5dGhvbiBzY3JpcHQ/CkBAIC0xMDEsMTMgKzEwMCw3IEBACiAKICAgICBodHRwOi8vd3d3LnB5MmV4ZS5vcmcvCiAKLUFub3RoZXIgaXMgQ2hyaXN0aWFuIFRpc21lcidzIGBTUUZSRUVaRSA8aHR0cDovL3N0YXJzaGlwLnB5dGhvbi5uZXQvY3Jldy9waXJ4PmBfCi13aGljaCBhcHBlbmRzIHRoZSBieXRlIGNvZGUgdG8gYSBzcGVjaWFsbHktcHJlcGFyZWQgUHl0aG9uIGludGVycHJldGVyIHRoYXQgY2FuCi1maW5kIHRoZSBieXRlIGNvZGUgaW4gdGhlIGV4ZWN1dGFibGUuCi0KLU90aGVyIHRvb2xzIGluY2x1ZGUgRnJlZHJpayBMdW5kaCdzIGBTcXVlZXplCi08aHR0cDovL3d3dy5weXRob253YXJlLmNvbS9wcm9kdWN0cy9weXRob24vc3F1ZWV6ZT5gXyBhbmQgQW50aG9ueSBUdWluaW5nYSdzCi1gY3hfRnJlZXplIDxodHRwOi8vc3RhcnNoaXAucHl0aG9uLm5ldC9jcmV3L2F0dWluaW5nL2N4X0ZyZWV6ZS9pbmRleC5odG1sPmBfLgorQW5vdGhlciB0b29sIGlzIEFudGhvbnkgVHVpbmluZ2EncyBgY3hfRnJlZXplIDxodHRwOi8vY3gtZnJlZXplLnNvdXJjZWZvcmdlLm5ldC8+YF8uCiAKIAogQXJlIHRoZXJlIGNvZGluZyBzdGFuZGFyZHMgb3IgYSBzdHlsZSBndWlkZSBmb3IgUHl0aG9uIHByb2dyYW1zPwpAQCAtMTk0LDEwICsxODcsOCBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEluIFB5dGhvbiwgdmFyaWFibGVzIHRoYXQgYXJlIG9ubHkgcmVmZXJlbmNlZCBpbnNpZGUgYSBmdW5jdGlvbiBhcmUgaW1wbGljaXRseQotZ2xvYmFsLiAgSWYgYSB2YXJpYWJsZSBpcyBhc3NpZ25lZCBhIG5ldyB2YWx1ZSBhbnl3aGVyZSB3aXRoaW4gdGhlIGZ1bmN0aW9uJ3MKLWJvZHksIGl0J3MgYXNzdW1lZCB0byBiZSBhIGxvY2FsLiAgSWYgYSB2YXJpYWJsZSBpcyBldmVyIGFzc2lnbmVkIGEgbmV3IHZhbHVlCi1pbnNpZGUgdGhlIGZ1bmN0aW9uLCB0aGUgdmFyaWFibGUgaXMgaW1wbGljaXRseSBsb2NhbCwgYW5kIHlvdSBuZWVkIHRvCi1leHBsaWNpdGx5IGRlY2xhcmUgaXQgYXMgJ2dsb2JhbCcuCitnbG9iYWwuICBJZiBhIHZhcmlhYmxlIGlzIGFzc2lnbmVkIGEgdmFsdWUgYW55d2hlcmUgd2l0aGluIHRoZSBmdW5jdGlvbidzIGJvZHksCitpdCdzIGFzc3VtZWQgdG8gYmUgYSBsb2NhbCB1bmxlc3MgZXhwbGljaXRseSBkZWNsYXJlZCBhcyBnbG9iYWwuCiAKIFRob3VnaCBhIGJpdCBzdXJwcmlzaW5nIGF0IGZpcnN0LCBhIG1vbWVudCdzIGNvbnNpZGVyYXRpb24gZXhwbGFpbnMgdGhpcy4gIE9uCiBvbmUgaGFuZCwgcmVxdWlyaW5nIDprZXl3b3JkOmBnbG9iYWxgIGZvciBhc3NpZ25lZCB2YXJpYWJsZXMgcHJvdmlkZXMgYSBiYXIKQEAgLTI5Miw5ICsyODMsOCBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogSW4gZ2VuZXJhbCwgZG9uJ3QgdXNlIGBgZnJvbSBtb2R1bGVuYW1lIGltcG9ydCAqYGAuICBEb2luZyBzbyBjbHV0dGVycyB0aGUKLWltcG9ydGVyJ3MgbmFtZXNwYWNlLiAgU29tZSBwZW9wbGUgYXZvaWQgdGhpcyBpZGlvbSBldmVuIHdpdGggdGhlIGZldyBtb2R1bGVzCi10aGF0IHdlcmUgZGVzaWduZWQgdG8gYmUgaW1wb3J0ZWQgaW4gdGhpcyBtYW5uZXIuICBNb2R1bGVzIGRlc2lnbmVkIGluIHRoaXMKLW1hbm5lciBpbmNsdWRlIDptb2Q6YHRraW50ZXJgLCBhbmQgOm1vZDpgdGhyZWFkaW5nYC4KK2ltcG9ydGVyJ3MgbmFtZXNwYWNlLCBhbmQgbWFrZXMgaXQgbXVjaCBoYXJkZXIgZm9yIGxpbnRlcnMgdG8gZGV0ZWN0IHVuZGVmaW5lZAorbmFtZXMuCiAKIEltcG9ydCBtb2R1bGVzIGF0IHRoZSB0b3Agb2YgYSBmaWxlLiAgRG9pbmcgc28gbWFrZXMgaXQgY2xlYXIgd2hhdCBvdGhlciBtb2R1bGVzCiB5b3VyIGNvZGUgcmVxdWlyZXMgYW5kIGF2b2lkcyBxdWVzdGlvbnMgb2Ygd2hldGhlciB0aGUgbW9kdWxlIG5hbWUgaXMgaW4gc2NvcGUuCkBAIC0zMDgsMTEgKzI5OCw2IEBACiAgICBkaXJlY3RvcnkpIC0tIGUuZy4gbXguRGF0ZVRpbWUsIFpPREIsIFBJTC5JbWFnZSwgZXRjLgogMy4gbG9jYWxseS1kZXZlbG9wZWQgbW9kdWxlcwogCi1OZXZlciB1c2UgcmVsYXRpdmUgcGFja2FnZSBpbXBvcnRzLiAgSWYgeW91J3JlIHdyaXRpbmcgY29kZSB0aGF0J3MgaW4gdGhlCi1gYHBhY2thZ2Uuc3ViLm0xYGAgbW9kdWxlIGFuZCB3YW50IHRvIGltcG9ydCBgYHBhY2thZ2Uuc3ViLm0yYGAsIGRvIG5vdCBqdXN0Ci13cml0ZSBgYGZyb20gLiBpbXBvcnQgbTJgYCwgZXZlbiB0aG91Z2ggaXQncyBsZWdhbC4gIFdyaXRlIGBgZnJvbSBwYWNrYWdlLnN1YgotaW1wb3J0IG0yYGAgaW5zdGVhZC4gIFNlZSA6cGVwOmAzMjhgIGZvciBkZXRhaWxzLgotCiBJdCBpcyBzb21ldGltZXMgbmVjZXNzYXJ5IHRvIG1vdmUgaW1wb3J0cyB0byBhIGZ1bmN0aW9uIG9yIGNsYXNzIHRvIGF2b2lkCiBwcm9ibGVtcyB3aXRoIGNpcmN1bGFyIGltcG9ydHMuICBHb3Jkb24gTWNNaWxsYW4gc2F5czoKIApAQCAtMzQzLDEzICszMjgsNjEgQEAKIGNvdXBsZSBvZiBkaWN0aW9uYXJ5IGxvb2t1cHMuICBFdmVuIGlmIHRoZSBtb2R1bGUgbmFtZSBoYXMgZ29uZSBvdXQgb2Ygc2NvcGUsCiB0aGUgbW9kdWxlIGlzIHByb2JhYmx5IGF2YWlsYWJsZSBpbiA6ZGF0YTpgc3lzLm1vZHVsZXNgLgogCi1JZiBvbmx5IGluc3RhbmNlcyBvZiBhIHNwZWNpZmljIGNsYXNzIHVzZSBhIG1vZHVsZSwgdGhlbiBpdCBpcyByZWFzb25hYmxlIHRvCi1pbXBvcnQgdGhlIG1vZHVsZSBpbiB0aGUgY2xhc3MncyBgYF9faW5pdF9fYGAgbWV0aG9kIGFuZCB0aGVuIGFzc2lnbiB0aGUgbW9kdWxlCi10byBhbiBpbnN0YW5jZSB2YXJpYWJsZSBzbyB0aGF0IHRoZSBtb2R1bGUgaXMgYWx3YXlzIGF2YWlsYWJsZSAodmlhIHRoYXQKLWluc3RhbmNlIHZhcmlhYmxlKSBkdXJpbmcgdGhlIGxpZmUgb2YgdGhlIG9iamVjdC4gIE5vdGUgdGhhdCB0byBkZWxheSBhbiBpbXBvcnQKLXVudGlsIHRoZSBjbGFzcyBpcyBpbnN0YW50aWF0ZWQsIHRoZSBpbXBvcnQgbXVzdCBiZSBpbnNpZGUgYSBtZXRob2QuICBQdXR0aW5nCi10aGUgaW1wb3J0IGluc2lkZSB0aGUgY2xhc3MgYnV0IG91dHNpZGUgb2YgYW55IG1ldGhvZCBzdGlsbCBjYXVzZXMgdGhlIGltcG9ydCB0bwotb2NjdXIgd2hlbiB0aGUgbW9kdWxlIGlzIGluaXRpYWxpemVkLgorCitXaHkgYXJlIGRlZmF1bHQgdmFsdWVzIHNoYXJlZCBiZXR3ZWVuIG9iamVjdHM/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgdHlwZSBvZiBidWcgY29tbW9ubHkgYml0ZXMgbmVvcGh5dGUgcHJvZ3JhbW1lcnMuICBDb25zaWRlciB0aGlzIGZ1bmN0aW9uOjoKKworICAgZGVmIGZvbyhteWRpY3Q9e30pOiAgIyBEYW5nZXI6IHNoYXJlZCByZWZlcmVuY2UgdG8gb25lIGRpY3QgZm9yIGFsbCBjYWxscworICAgICAgIC4uLiBjb21wdXRlIHNvbWV0aGluZyAuLi4KKyAgICAgICBteWRpY3Rba2V5XSA9IHZhbHVlCisgICAgICAgcmV0dXJuIG15ZGljdAorCitUaGUgZmlyc3QgdGltZSB5b3UgY2FsbCB0aGlzIGZ1bmN0aW9uLCBgYG15ZGljdGBgIGNvbnRhaW5zIGEgc2luZ2xlIGl0ZW0uICBUaGUKK3NlY29uZCB0aW1lLCBgYG15ZGljdGBgIGNvbnRhaW5zIHR3byBpdGVtcyBiZWNhdXNlIHdoZW4gYGBmb28oKWBgIGJlZ2lucworZXhlY3V0aW5nLCBgYG15ZGljdGBgIHN0YXJ0cyBvdXQgd2l0aCBhbiBpdGVtIGFscmVhZHkgaW4gaXQuCisKK0l0IGlzIG9mdGVuIGV4cGVjdGVkIHRoYXQgYSBmdW5jdGlvbiBjYWxsIGNyZWF0ZXMgbmV3IG9iamVjdHMgZm9yIGRlZmF1bHQKK3ZhbHVlcy4gVGhpcyBpcyBub3Qgd2hhdCBoYXBwZW5zLiBEZWZhdWx0IHZhbHVlcyBhcmUgY3JlYXRlZCBleGFjdGx5IG9uY2UsIHdoZW4KK3RoZSBmdW5jdGlvbiBpcyBkZWZpbmVkLiAgSWYgdGhhdCBvYmplY3QgaXMgY2hhbmdlZCwgbGlrZSB0aGUgZGljdGlvbmFyeSBpbiB0aGlzCitleGFtcGxlLCBzdWJzZXF1ZW50IGNhbGxzIHRvIHRoZSBmdW5jdGlvbiB3aWxsIHJlZmVyIHRvIHRoaXMgY2hhbmdlZCBvYmplY3QuCisKK0J5IGRlZmluaXRpb24sIGltbXV0YWJsZSBvYmplY3RzIHN1Y2ggYXMgbnVtYmVycywgc3RyaW5ncywgdHVwbGVzLCBhbmQgYGBOb25lYGAsCithcmUgc2FmZSBmcm9tIGNoYW5nZS4gQ2hhbmdlcyB0byBtdXRhYmxlIG9iamVjdHMgc3VjaCBhcyBkaWN0aW9uYXJpZXMsIGxpc3RzLAorYW5kIGNsYXNzIGluc3RhbmNlcyBjYW4gbGVhZCB0byBjb25mdXNpb24uCisKK0JlY2F1c2Ugb2YgdGhpcyBmZWF0dXJlLCBpdCBpcyBnb29kIHByb2dyYW1taW5nIHByYWN0aWNlIHRvIG5vdCB1c2UgbXV0YWJsZQorb2JqZWN0cyBhcyBkZWZhdWx0IHZhbHVlcy4gIEluc3RlYWQsIHVzZSBgYE5vbmVgYCBhcyB0aGUgZGVmYXVsdCB2YWx1ZSBhbmQKK2luc2lkZSB0aGUgZnVuY3Rpb24sIGNoZWNrIGlmIHRoZSBwYXJhbWV0ZXIgaXMgYGBOb25lYGAgYW5kIGNyZWF0ZSBhIG5ldworbGlzdC9kaWN0aW9uYXJ5L3doYXRldmVyIGlmIGl0IGlzLiAgRm9yIGV4YW1wbGUsIGRvbid0IHdyaXRlOjoKKworICAgZGVmIGZvbyhteWRpY3Q9e30pOgorICAgICAgIC4uLgorCitidXQ6OgorCisgICBkZWYgZm9vKG15ZGljdD1Ob25lKToKKyAgICAgICBpZiBteWRpY3QgaXMgTm9uZToKKyAgICAgICAgICAgbXlkaWN0ID0ge30gICMgY3JlYXRlIGEgbmV3IGRpY3QgZm9yIGxvY2FsIG5hbWVzcGFjZQorCitUaGlzIGZlYXR1cmUgY2FuIGJlIHVzZWZ1bC4gIFdoZW4geW91IGhhdmUgYSBmdW5jdGlvbiB0aGF0J3MgdGltZS1jb25zdW1pbmcgdG8KK2NvbXB1dGUsIGEgY29tbW9uIHRlY2huaXF1ZSBpcyB0byBjYWNoZSB0aGUgcGFyYW1ldGVycyBhbmQgdGhlIHJlc3VsdGluZyB2YWx1ZQorb2YgZWFjaCBjYWxsIHRvIHRoZSBmdW5jdGlvbiwgYW5kIHJldHVybiB0aGUgY2FjaGVkIHZhbHVlIGlmIHRoZSBzYW1lIHZhbHVlIGlzCityZXF1ZXN0ZWQgYWdhaW4uICBUaGlzIGlzIGNhbGxlZCAibWVtb2l6aW5nIiwgYW5kIGNhbiBiZSBpbXBsZW1lbnRlZCBsaWtlIHRoaXM6OgorCisgICAjIENhbGxlcnMgd2lsbCBuZXZlciBwcm92aWRlIGEgdGhpcmQgcGFyYW1ldGVyIGZvciB0aGlzIGZ1bmN0aW9uLgorICAgZGVmIGV4cGVuc2l2ZShhcmcxLCBhcmcyLCBfY2FjaGU9e30pOgorICAgICAgIGlmIChhcmcxLCBhcmcyKSBpbiBfY2FjaGU6CisgICAgICAgICAgIHJldHVybiBfY2FjaGVbKGFyZzEsIGFyZzIpXQorCisgICAgICAgIyBDYWxjdWxhdGUgdGhlIHZhbHVlCisgICAgICAgcmVzdWx0ID0gLi4uIGV4cGVuc2l2ZSBjb21wdXRhdGlvbiAuLi4KKyAgICAgICBfY2FjaGVbKGFyZzEsIGFyZzIpXSA9IHJlc3VsdCAgICAgICAgICAgIyBTdG9yZSByZXN1bHQgaW4gdGhlIGNhY2hlCisgICAgICAgcmV0dXJuIHJlc3VsdAorCitZb3UgY291bGQgdXNlIGEgZ2xvYmFsIHZhcmlhYmxlIGNvbnRhaW5pbmcgYSBkaWN0aW9uYXJ5IGluc3RlYWQgb2YgdGhlIGRlZmF1bHQKK3ZhbHVlOyBpdCdzIGEgbWF0dGVyIG9mIHRhc3RlLgogCiAKIEhvdyBjYW4gSSBwYXNzIG9wdGlvbmFsIG9yIGtleXdvcmQgcGFyYW1ldGVycyBmcm9tIG9uZSBmdW5jdGlvbiB0byBhbm90aGVyPwpAQCAtMzkyLDYgKzQyNSw4MSBAQAogdGhlIHZhbHVlcyBgYDQyYGAsIGBgMzE0YGAsIGFuZCBgYHNvbWV2YXJgYCBhcmUgYXJndW1lbnRzLgogCiAKK1doeSBkaWQgY2hhbmdpbmcgbGlzdCAneScgYWxzbyBjaGFuZ2UgbGlzdCAneCc/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSWYgeW91IHdyb3RlIGNvZGUgbGlrZTo6CisKKyAgID4+PiB4ID0gW10KKyAgID4+PiB5ID0geAorICAgPj4+IHkuYXBwZW5kKDEwKQorICAgPj4+IHkKKyAgIFsxMF0KKyAgID4+PiB4CisgICBbMTBdCisKK3lvdSBtaWdodCBiZSB3b25kZXJpbmcgd2h5IGFwcGVuZGluZyBhbiBlbGVtZW50IHRvIGBgeWBgIGNoYW5nZWQgYGB4YGAgdG9vLgorCitUaGVyZSBhcmUgdHdvIGZhY3RvcnMgdGhhdCBwcm9kdWNlIHRoaXMgcmVzdWx0OgorCisxKSBWYXJpYWJsZXMgYXJlIHNpbXBseSBuYW1lcyB0aGF0IHJlZmVyIHRvIG9iamVjdHMuICBEb2luZyBgYHkgPSB4YGAgZG9lc24ndAorICAgY3JlYXRlIGEgY29weSBvZiB0aGUgbGlzdCAtLSBpdCBjcmVhdGVzIGEgbmV3IHZhcmlhYmxlIGBgeWBgIHRoYXQgcmVmZXJzIHRvCisgICB0aGUgc2FtZSBvYmplY3QgYGB4YGAgcmVmZXJzIHRvLiAgVGhpcyBtZWFucyB0aGF0IHRoZXJlIGlzIG9ubHkgb25lIG9iamVjdAorICAgKHRoZSBsaXN0KSwgYW5kIGJvdGggYGB4YGAgYW5kIGBgeWBgIHJlZmVyIHRvIGl0LgorMikgTGlzdHMgYXJlIDp0ZXJtOmBtdXRhYmxlYCwgd2hpY2ggbWVhbnMgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGVpciBjb250ZW50LgorCitBZnRlciB0aGUgY2FsbCB0byA6bWV0aDpgfmxpc3QuYXBwZW5kYCwgdGhlIGNvbnRlbnQgb2YgdGhlIG11dGFibGUgb2JqZWN0IGhhcworY2hhbmdlZCBmcm9tIGBgW11gYCB0byBgYFsxMF1gYC4gIFNpbmNlIGJvdGggdGhlIHZhcmlhYmxlcyByZWZlciB0byB0aGUgc2FtZQorb2JqZWN0LCB1c2luZyBlaXRoZXIgbmFtZSBhY2Nlc3NlcyB0aGUgbW9kaWZpZWQgdmFsdWUgYGBbMTBdYGAuCisKK0lmIHdlIGluc3RlYWQgYXNzaWduIGFuIGltbXV0YWJsZSBvYmplY3QgdG8gYGB4YGA6OgorCisgICA+Pj4geCA9IDUgICMgaW50cyBhcmUgaW1tdXRhYmxlCisgICA+Pj4geSA9IHgKKyAgID4+PiB4ID0geCArIDEgICMgNSBjYW4ndCBiZSBtdXRhdGVkLCB3ZSBhcmUgY3JlYXRpbmcgYSBuZXcgb2JqZWN0IGhlcmUKKyAgID4+PiB4CisgICA2CisgICA+Pj4geQorICAgNQorCit3ZSBjYW4gc2VlIHRoYXQgaW4gdGhpcyBjYXNlIGBgeGBgIGFuZCBgYHlgYCBhcmUgbm90IGVxdWFsIGFueW1vcmUuICBUaGlzIGlzCitiZWNhdXNlIGludGVnZXJzIGFyZSA6dGVybTpgaW1tdXRhYmxlYCwgYW5kIHdoZW4gd2UgZG8gYGB4ID0geCArIDFgYCB3ZSBhcmUgbm90CittdXRhdGluZyB0aGUgaW50IGBgNWBgIGJ5IGluY3JlbWVudGluZyBpdHMgdmFsdWU7IGluc3RlYWQsIHdlIGFyZSBjcmVhdGluZyBhCituZXcgb2JqZWN0ICh0aGUgaW50IGBgNmBgKSBhbmQgYXNzaWduaW5nIGl0IHRvIGBgeGBgICh0aGF0IGlzLCBjaGFuZ2luZyB3aGljaAorb2JqZWN0IGBgeGBgIHJlZmVycyB0bykuICBBZnRlciB0aGlzIGFzc2lnbm1lbnQgd2UgaGF2ZSB0d28gb2JqZWN0cyAodGhlIGludHMKK2BgNmBgIGFuZCBgYDVgYCkgYW5kIHR3byB2YXJpYWJsZXMgdGhhdCByZWZlciB0byB0aGVtIChgYHhgYCBub3cgcmVmZXJzIHRvCitgYDZgYCBidXQgYGB5YGAgc3RpbGwgcmVmZXJzIHRvIGBgNWBgKS4KKworU29tZSBvcGVyYXRpb25zIChmb3IgZXhhbXBsZSBgYHkuYXBwZW5kKDEwKWBgIGFuZCBgYHkuc29ydCgpYGApIG11dGF0ZSB0aGUKK29iamVjdCwgd2hlcmVhcyBzdXBlcmZpY2lhbGx5IHNpbWlsYXIgb3BlcmF0aW9ucyAoZm9yIGV4YW1wbGUgYGB5ID0geSArIFsxMF1gYAorYW5kIGBgc29ydGVkKHkpYGApIGNyZWF0ZSBhIG5ldyBvYmplY3QuICBJbiBnZW5lcmFsIGluIFB5dGhvbiAoYW5kIGluIGFsbCBjYXNlcworaW4gdGhlIHN0YW5kYXJkIGxpYnJhcnkpIGEgbWV0aG9kIHRoYXQgbXV0YXRlcyBhbiBvYmplY3Qgd2lsbCByZXR1cm4gYGBOb25lYGAKK3RvIGhlbHAgYXZvaWQgZ2V0dGluZyB0aGUgdHdvIHR5cGVzIG9mIG9wZXJhdGlvbnMgY29uZnVzZWQuICBTbyBpZiB5b3UKK21pc3Rha2VubHkgd3JpdGUgYGB5LnNvcnQoKWBgIHRoaW5raW5nIGl0IHdpbGwgZ2l2ZSB5b3UgYSBzb3J0ZWQgY29weSBvZiBgYHlgYCwKK3lvdSdsbCBpbnN0ZWFkIGVuZCB1cCB3aXRoIGBgTm9uZWBgLCB3aGljaCB3aWxsIGxpa2VseSBjYXVzZSB5b3VyIHByb2dyYW0gdG8KK2dlbmVyYXRlIGFuIGVhc2lseSBkaWFnbm9zZWQgZXJyb3IuCisKK0hvd2V2ZXIsIHRoZXJlIGlzIG9uZSBjbGFzcyBvZiBvcGVyYXRpb25zIHdoZXJlIHRoZSBzYW1lIG9wZXJhdGlvbiBzb21ldGltZXMKK2hhcyBkaWZmZXJlbnQgYmVoYXZpb3JzIHdpdGggZGlmZmVyZW50IHR5cGVzOiAgdGhlIGF1Z21lbnRlZCBhc3NpZ25tZW50CitvcGVyYXRvcnMuICBGb3IgZXhhbXBsZSwgYGArPWBgIG11dGF0ZXMgbGlzdHMgYnV0IG5vdCB0dXBsZXMgb3IgaW50cyAoYGBhX2xpc3QKKys9IFsxLCAyLCAzXWBgIGlzIGVxdWl2YWxlbnQgdG8gYGBhX2xpc3QuZXh0ZW5kKFsxLCAyLCAzXSlgYCBhbmQgbXV0YXRlcworYGBhX2xpc3RgYCwgd2hlcmVhcyBgYHNvbWVfdHVwbGUgKz0gKDEsIDIsIDMpYGAgYW5kIGBgc29tZV9pbnQgKz0gMWBgIGNyZWF0ZQorbmV3IG9iamVjdHMpLgorCitJbiBvdGhlciB3b3JkczoKKworKiBJZiB3ZSBoYXZlIGEgbXV0YWJsZSBvYmplY3QgKDpjbGFzczpgbGlzdGAsIDpjbGFzczpgZGljdGAsIDpjbGFzczpgc2V0YCwKKyAgZXRjLiksIHdlIGNhbiB1c2Ugc29tZSBzcGVjaWZpYyBvcGVyYXRpb25zIHRvIG11dGF0ZSBpdCBhbmQgYWxsIHRoZSB2YXJpYWJsZXMKKyAgdGhhdCByZWZlciB0byBpdCB3aWxsIHNlZSB0aGUgY2hhbmdlLgorKiBJZiB3ZSBoYXZlIGFuIGltbXV0YWJsZSBvYmplY3QgKDpjbGFzczpgc3RyYCwgOmNsYXNzOmBpbnRgLCA6Y2xhc3M6YHR1cGxlYCwKKyAgZXRjLiksIGFsbCB0aGUgdmFyaWFibGVzIHRoYXQgcmVmZXIgdG8gaXQgd2lsbCBhbHdheXMgc2VlIHRoZSBzYW1lIHZhbHVlLAorICBidXQgb3BlcmF0aW9ucyB0aGF0IHRyYW5zZm9ybSB0aGF0IHZhbHVlIGludG8gYSBuZXcgdmFsdWUgYWx3YXlzIHJldHVybiBhIG5ldworICBvYmplY3QuCisKK0lmIHlvdSB3YW50IHRvIGtub3cgaWYgdHdvIHZhcmlhYmxlcyByZWZlciB0byB0aGUgc2FtZSBvYmplY3Qgb3Igbm90LCB5b3UgY2FuCit1c2UgdGhlIDprZXl3b3JkOmBpc2Agb3BlcmF0b3IsIG9yIHRoZSBidWlsdC1pbiBmdW5jdGlvbiA6ZnVuYzpgaWRgLgorCisKIEhvdyBkbyBJIHdyaXRlIGEgZnVuY3Rpb24gd2l0aCBvdXRwdXQgcGFyYW1ldGVycyAoY2FsbCBieSByZWZlcmVuY2UpPwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTcxMSw3ICs4MTksNyBAQAogMTQ0YGAgYW5kIGBgaW50KCcweDE0NCcpYGAgcmFpc2VzIDpleGM6YFZhbHVlRXJyb3JgLiBgYGludChzdHJpbmcsIGJhc2UpYGAgdGFrZXMKIHRoZSBiYXNlIHRvIGNvbnZlcnQgZnJvbSBhcyBhIHNlY29uZCBvcHRpb25hbCBhcmd1bWVudCwgc28gYGBpbnQoJzB4MTQ0JywgMTYpID09CiAzMjRgYC4gIElmIHRoZSBiYXNlIGlzIHNwZWNpZmllZCBhcyAwLCB0aGUgbnVtYmVyIGlzIGludGVycHJldGVkIHVzaW5nIFB5dGhvbidzCi1ydWxlczogYSBsZWFkaW5nICcwJyBpbmRpY2F0ZXMgb2N0YWwsIGFuZCAnMHgnIGluZGljYXRlcyBhIGhleCBudW1iZXIuCitydWxlczogYSBsZWFkaW5nICcwbycgaW5kaWNhdGVzIG9jdGFsLCBhbmQgJzB4JyBpbmRpY2F0ZXMgYSBoZXggbnVtYmVyLgogCiBEbyBub3QgdXNlIHRoZSBidWlsdC1pbiBmdW5jdGlvbiA6ZnVuYzpgZXZhbGAgaWYgYWxsIHlvdSBuZWVkIGlzIHRvIGNvbnZlcnQKIHN0cmluZ3MgdG8gbnVtYmVycy4gIDpmdW5jOmBldmFsYCB3aWxsIGJlIHNpZ25pZmljYW50bHkgc2xvd2VyIGFuZCBpdCBwcmVzZW50cyBhCkBAIC03MzIsNyArODQwLDcgQEAKIGNvbnN0cnVjdG9yIDpmdW5jOmBzdHJgLiAgSWYgeW91IHdhbnQgYSBoZXhhZGVjaW1hbCBvciBvY3RhbCByZXByZXNlbnRhdGlvbiwgdXNlCiB0aGUgYnVpbHQtaW4gZnVuY3Rpb25zIDpmdW5jOmBoZXhgIG9yIDpmdW5jOmBvY3RgLiAgRm9yIGZhbmN5IGZvcm1hdHRpbmcsIHNlZQogdGhlIDpyZWY6YHN0cmluZy1mb3JtYXR0aW5nYCBzZWN0aW9uLCBlLmcuIGBgIns6MDRkfSIuZm9ybWF0KDE0NClgYCB5aWVsZHMKLWBgJzAxNDQnYGAgYW5kIGBgIns6LjNmfSIuZm9ybWF0KDEvMylgYCB5aWVsZHMgYGAnMC4zMzMnYGAuCitgYCcwMTQ0J2BgIGFuZCBgYCJ7Oi4zZn0iLmZvcm1hdCgxLjAvMy4wKWBgIHlpZWxkcyBgYCcwLjMzMydgYC4KIAogCiBIb3cgZG8gSSBtb2RpZnkgYSBzdHJpbmcgaW4gcGxhY2U/CkBAIC03NDEsNyArODQ5LDcgQEAKIFlvdSBjYW4ndCwgYmVjYXVzZSBzdHJpbmdzIGFyZSBpbW11dGFibGUuICBJbiBtb3N0IHNpdHVhdGlvbnMsIHlvdSBzaG91bGQKIHNpbXBseSBjb25zdHJ1Y3QgYSBuZXcgc3RyaW5nIGZyb20gdGhlIHZhcmlvdXMgcGFydHMgeW91IHdhbnQgdG8gYXNzZW1ibGUKIGl0IGZyb20uICBIb3dldmVyLCBpZiB5b3UgbmVlZCBhbiBvYmplY3Qgd2l0aCB0aGUgYWJpbGl0eSB0byBtb2RpZnkgaW4tcGxhY2UKLXVuaWNvZGUgZGF0YSwgdHJ5IHVzaW5nIGEgOmNsYXNzOmBpby5TdHJpbmdJT2Agb2JqZWN0IG9yIHRoZSA6bW9kOmBhcnJheWAKK3VuaWNvZGUgZGF0YSwgdHJ5IHVzaW5nIGFuIDpjbGFzczpgaW8uU3RyaW5nSU9gIG9iamVjdCBvciB0aGUgOm1vZDpgYXJyYXlgCiBtb2R1bGU6OgogCiAgICA+Pj4gaW1wb3J0IGlvCkBAIC05MDMsNyArMTAxMSw3IEBACiAgIGFzIGJ1aWx0aW5zIGFuZCBzb21lIGV4dGVuc2lvbiB0eXBlcy4gIEZvciBleGFtcGxlLCBiZSBzdXJlIHRvIHVzZQogICBlaXRoZXIgdGhlIDptZXRoOmBsaXN0LnNvcnRgIGJ1aWx0LWluIG1ldGhvZCBvciB0aGUgcmVsYXRlZCA6ZnVuYzpgc29ydGVkYAogICBmdW5jdGlvbiB0byBkbyBzb3J0aW5nIChhbmQgc2VlIHRoZQotICBgc29ydGluZyBtaW5pLUhPV1RPIDxodHRwOi8vd2lraS5weXRob24ub3JnL21vaW4vSG93VG8vU29ydGluZz5gXyBmb3IgZXhhbXBsZXMKKyAgYHNvcnRpbmcgbWluaS1IT1dUTyA8aHR0cHM6Ly93aWtpLnB5dGhvbi5vcmcvbW9pbi9Ib3dUby9Tb3J0aW5nPmBfIGZvciBleGFtcGxlcwogICBvZiBtb2RlcmF0ZWx5IGFkdmFuY2VkIHVzYWdlKS4KIAogKiBBYnN0cmFjdGlvbnMgdGVuZCB0byBjcmVhdGUgaW5kaXJlY3Rpb25zIGFuZCBmb3JjZSB0aGUgaW50ZXJwcmV0ZXIgdG8gd29yawpAQCAtOTIzLDcgKzEwMzEsNyBAQAogCiAuLiBzZWVhbHNvOjoKICAgIFRoZSB3aWtpIHBhZ2UgZGV2b3RlZCB0byBgcGVyZm9ybWFuY2UgdGlwcwotICAgPGh0dHA6Ly93aWtpLnB5dGhvbi5vcmcvbW9pbi9QeXRob25TcGVlZC9QZXJmb3JtYW5jZVRpcHM+YF8uCisgICA8aHR0cHM6Ly93aWtpLnB5dGhvbi5vcmcvbW9pbi9QeXRob25TcGVlZC9QZXJmb3JtYW5jZVRpcHM+YF8uCiAKIC4uIF9lZmZpY2llbnRfc3RyaW5nX2NvbmNhdGVuYXRpb246CiAKQEAgLTEwMDgsNyArMTExNiw3IEBACiAKIFNlZSB0aGUgUHl0aG9uIENvb2tib29rIGZvciBhIGxvbmcgZGlzY3Vzc2lvbiBvZiBtYW55IHdheXMgdG8gZG8gdGhpczoKIAotICAgIGh0dHA6Ly9hc3BuLmFjdGl2ZXN0YXRlLmNvbS9BU1BOL0Nvb2tib29rL1B5dGhvbi9SZWNpcGUvNTI1NjAKKyAgIGh0dHA6Ly9jb2RlLmFjdGl2ZXN0YXRlLmNvbS9yZWNpcGVzLzUyNTYwLwogCiBJZiB5b3UgZG9uJ3QgbWluZCByZW9yZGVyaW5nIHRoZSBsaXN0LCBzb3J0IGl0IGFuZCB0aGVuIHNjYW4gZnJvbSB0aGUgZW5kIG9mIHRoZQogbGlzdCwgZGVsZXRpbmcgZHVwbGljYXRlcyBhcyB5b3UgZ286OgpAQCAtMTA1Niw2ICsxMTY0LDggQEAKIHVzdWFsbHkgYSBsb3Qgc2xvd2VyIHRoYW4gdXNpbmcgUHl0aG9uIGxpc3RzLgogCiAKKy4uIF9mYXEtbXVsdGlkaW1lbnNpb25hbC1saXN0OgorCiBIb3cgZG8gSSBjcmVhdGUgYSBtdWx0aWRpbWVuc2lvbmFsIGxpc3Q/CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTE3MzAsMTkgKzE4NDAsMTAgQEAKIF9faW1wb3J0X18oJ3gueS56JykgcmV0dXJucyA8bW9kdWxlICd4Jz47IGhvdyBkbyBJIGdldCB6PwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVRyeTo6CitDb25zaWRlciB1c2luZyB0aGUgY29udmVuaWVuY2UgZnVuY3Rpb24gOmZ1bmM6YH5pbXBvcnRsaWIuaW1wb3J0X21vZHVsZWAgZnJvbQorOm1vZDpgaW1wb3J0bGliYCBpbnN0ZWFkOjoKIAotICAgX19pbXBvcnRfXygneC55LnonKS55LnoKLQotRm9yIG1vcmUgcmVhbGlzdGljIHNpdHVhdGlvbnMsIHlvdSBtYXkgaGF2ZSB0byBkbyBzb21ldGhpbmcgbGlrZSA6OgotCi0gICBtID0gX19pbXBvcnRfXyhzKQotICAgZm9yIGkgaW4gcy5zcGxpdCgiLiIpWzE6XToKLSAgICAgICBtID0gZ2V0YXR0cihtLCBpKQotCi1TZWUgOm1vZDpgaW1wb3J0bGliYCBmb3IgYSBjb252ZW5pZW5jZSBmdW5jdGlvbiBjYWxsZWQKLTpmdW5jOmB+aW1wb3J0bGliLmltcG9ydF9tb2R1bGVgLgotCisgICB6ID0gaW1wb3J0bGliLmltcG9ydF9tb2R1bGUoJ3gueS56JykKIAogCiBXaGVuIEkgZWRpdCBhbiBpbXBvcnRlZCBtb2R1bGUgYW5kIHJlaW1wb3J0IGl0LCB0aGUgY2hhbmdlcyBkb24ndCBzaG93IHVwLiAgV2h5IGRvZXMgdGhpcyBoYXBwZW4/CkBAIC0xNzUxLDEyICsxODUyLDEyIEBACiBGb3IgcmVhc29ucyBvZiBlZmZpY2llbmN5IGFzIHdlbGwgYXMgY29uc2lzdGVuY3ksIFB5dGhvbiBvbmx5IHJlYWRzIHRoZSBtb2R1bGUKIGZpbGUgb24gdGhlIGZpcnN0IHRpbWUgYSBtb2R1bGUgaXMgaW1wb3J0ZWQuICBJZiBpdCBkaWRuJ3QsIGluIGEgcHJvZ3JhbQogY29uc2lzdGluZyBvZiBtYW55IG1vZHVsZXMgd2hlcmUgZWFjaCBvbmUgaW1wb3J0cyB0aGUgc2FtZSBiYXNpYyBtb2R1bGUsIHRoZQotYmFzaWMgbW9kdWxlIHdvdWxkIGJlIHBhcnNlZCBhbmQgcmUtcGFyc2VkIG1hbnkgdGltZXMuICBUbyBmb3JjZSByZXJlYWRpbmcgb2YgYQorYmFzaWMgbW9kdWxlIHdvdWxkIGJlIHBhcnNlZCBhbmQgcmUtcGFyc2VkIG1hbnkgdGltZXMuICBUbyBmb3JjZSByZS1yZWFkaW5nIG9mIGEKIGNoYW5nZWQgbW9kdWxlLCBkbyB0aGlzOjoKIAotICAgaW1wb3J0IGltcAorICAgaW1wb3J0IGltcG9ydGxpYgogICAgaW1wb3J0IG1vZG5hbWUKLSAgIGltcC5yZWxvYWQobW9kbmFtZSkKKyAgIGltcG9ydGxpYi5yZWxvYWQobW9kbmFtZSkKIAogV2FybmluZzogdGhpcyB0ZWNobmlxdWUgaXMgbm90IDEwMCUgZm9vbC1wcm9vZi4gIEluIHBhcnRpY3VsYXIsIG1vZHVsZXMKIGNvbnRhaW5pbmcgc3RhdGVtZW50cyBsaWtlIDo6CkBAIC0xNzY4LDEwICsxODY5LDEwIEBACiB1cGRhdGVkIHRvIHVzZSB0aGUgbmV3IGNsYXNzIGRlZmluaXRpb24uICBUaGlzIGNhbiByZXN1bHQgaW4gdGhlIGZvbGxvd2luZwogcGFyYWRveGljYWwgYmVoYXZpb3VyOgogCi0gICA+Pj4gaW1wb3J0IGltcAorICAgPj4+IGltcG9ydCBpbXBvcnRsaWIKICAgID4+PiBpbXBvcnQgY2xzCiAgICA+Pj4gYyA9IGNscy5DKCkgICAgICAgICAgICAgICAgIyBDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgQwotICAgPj4+IGltcC5yZWxvYWQoY2xzKQorICAgPj4+IGltcG9ydGxpYi5yZWxvYWQoY2xzKQogICAgPG1vZHVsZSAnY2xzJyBmcm9tICdjbHMucHknPgogICAgPj4+IGlzaW5zdGFuY2UoYywgY2xzLkMpICAgICAgICMgaXNpbnN0YW5jZSBpcyBmYWxzZT8hPwogICAgRmFsc2UKZGlmZiAtLWdpdCBhL0RvYy9mYXEvd2luZG93cy5yc3QgYi9Eb2MvZmFxL3dpbmRvd3MucnN0CmluZGV4IDU5Zjk0ODAuLjZkYjY2MzcgMTAwNjQ0Ci0tLSBhL0RvYy9mYXEvd2luZG93cy5yc3QKKysrIGIvRG9jL2ZhcS93aW5kb3dzLnJzdApAQCAtMzEsNyArMzEsNyBAQAogCiAuLiB8UHl0aG9uIERldmVsb3BtZW50IG9uIFhQfCBpbWFnZTo6IHB5dGhvbi12aWRlby1pY29uLnBuZwogLi4gX2BQeXRob24gRGV2ZWxvcG1lbnQgb24gWFBgOgotICAgaHR0cDovL3d3dy5zaG93bWVkby5jb20vdmlkZW9zL3Nlcmllcz9uYW1lPXB5dGhvbk96c3ZhbGRQeU5ld2JpZVNlcmllcworICAgaHR0cDovL3Nob3dtZWRvLmNvbS92aWRlb3R1dG9yaWFscy9zZXJpZXM/bmFtZT1weXRob25PenN2YWxkUHlOZXdiaWVTZXJpZXMKIAogVW5sZXNzIHlvdSB1c2Ugc29tZSBzb3J0IG9mIGludGVncmF0ZWQgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQsIHlvdSB3aWxsIGVuZCB1cAogKnR5cGluZyogV2luZG93cyBjb21tYW5kcyBpbnRvIHdoYXQgaXMgdmFyaW91c2x5IHJlZmVycmVkIHRvIGFzIGEgIkRPUyB3aW5kb3ciCkBAIC03OCwxNyArNzgsMTcgQEAKICAgICA+Pj4gcHJpbnQoIkhlbGxvIikKICAgICBIZWxsbwogICAgID4+PiAiSGVsbG8iICogMwotICAgIEhlbGxvSGVsbG9IZWxsbworICAgICdIZWxsb0hlbGxvSGVsbG8nCiAKIE1hbnkgcGVvcGxlIHVzZSB0aGUgaW50ZXJhY3RpdmUgbW9kZSBhcyBhIGNvbnZlbmllbnQgeWV0IGhpZ2hseSBwcm9ncmFtbWFibGUKLWNhbGN1bGF0b3IuICBXaGVuIHlvdSB3YW50IHRvIGVuZCB5b3VyIGludGVyYWN0aXZlIFB5dGhvbiBzZXNzaW9uLCBob2xkIHRoZSBDdHJsCi1rZXkgZG93biB3aGlsZSB5b3UgZW50ZXIgYSBaLCB0aGVuIGhpdCB0aGUgIkVudGVyIiBrZXkgdG8gZ2V0IGJhY2sgdG8geW91cgorY2FsY3VsYXRvci4gIFdoZW4geW91IHdhbnQgdG8gZW5kIHlvdXIgaW50ZXJhY3RpdmUgUHl0aG9uIHNlc3Npb24sIGhvbGQgdGhlIDprYmQ6YEN0cmxgCitrZXkgZG93biB3aGlsZSB5b3UgZW50ZXIgYSA6a2JkOmBaYCwgdGhlbiBoaXQgdGhlICI6a2JkOmBFbnRlcmAiIGtleSB0byBnZXQgYmFjayB0byB5b3VyCiBXaW5kb3dzIGNvbW1hbmQgcHJvbXB0LgogCiBZb3UgbWF5IGFsc28gZmluZCB0aGF0IHlvdSBoYXZlIGEgU3RhcnQtbWVudSBlbnRyeSBzdWNoIGFzIDptZW51c2VsZWN0aW9uOmBTdGFydAogLS0+IFByb2dyYW1zIC0tPiBQeXRob24gMy4zIC0tPiBQeXRob24gKGNvbW1hbmQgbGluZSlgIHRoYXQgcmVzdWx0cyBpbiB5b3UKIHNlZWluZyB0aGUgYGA+Pj5gYCBwcm9tcHQgaW4gYSBuZXcgd2luZG93LiAgSWYgc28sIHRoZSB3aW5kb3cgd2lsbCBkaXNhcHBlYXIKLWFmdGVyIHlvdSBlbnRlciB0aGUgQ3RybC1aIGNoYXJhY3RlcjsgV2luZG93cyBpcyBydW5uaW5nIGEgc2luZ2xlICJweXRob24iCithZnRlciB5b3UgZW50ZXIgdGhlIDprYmQ6YEN0cmwtWmAgY2hhcmFjdGVyOyBXaW5kb3dzIGlzIHJ1bm5pbmcgYSBzaW5nbGUgInB5dGhvbiIKIGNvbW1hbmQgaW4gdGhlIHdpbmRvdywgYW5kIGNsb3NlcyBpdCB3aGVuIHlvdSB0ZXJtaW5hdGUgdGhlIGludGVycHJldGVyLgogCiBJZiB0aGUgYGBweXRob25gYCBjb21tYW5kLCBpbnN0ZWFkIG9mIGRpc3BsYXlpbmcgdGhlIGludGVycHJldGVyIHByb21wdCBgYD4+PmBgLApAQCAtMTA1LDcgKzEwNSw3IEBACiAKIC4uIHxBZGRpbmcgUHl0aG9uIHRvIERPUyBQYXRofCBpbWFnZTo6IHB5dGhvbi12aWRlby1pY29uLnBuZwogLi4gX2BBZGRpbmcgUHl0aG9uIHRvIERPUyBQYXRoYDoKLSAgIGh0dHA6Ly9zaG93bWVkby5jb20vdmlkZW9zL3ZpZGVvP25hbWU9OTYwMDAwJmZyb21TZXJpZXNJRD05NgorICAgaHR0cDovL3Nob3dtZWRvLmNvbS92aWRlb3R1dG9yaWFscy92aWRlbz9uYW1lPTk2MDAwMCZmcm9tU2VyaWVzSUQ9OTYKIAogCiBvcjo6CkBAIC0xMzEsOCArMTMxLDggQEAKIAogICAgYzpcUHl0aG9uMzNccHl0aG9uCiAKLXN0YXJ0cyB1cCB0aGUgaW50ZXJwcmV0ZXIgYXMgYWJvdmUgKGFuZCBkb24ndCBmb3JnZXQgeW91J2xsIG5lZWQgYSAiQ1RSTC1aIiBhbmQKLWFuICJFbnRlciIgdG8gZ2V0IG91dCBvZiBpdCkuIE9uY2UgeW91IGhhdmUgdmVyaWZpZWQgdGhlIGRpcmVjdG9yeSwgeW91IGNhbgorc3RhcnRzIHVwIHRoZSBpbnRlcnByZXRlciBhcyBhYm92ZSAoYW5kIGRvbid0IGZvcmdldCB5b3UnbGwgbmVlZCBhICI6a2JkOmBDdHJsLVpgIiBhbmQKK2FuICI6a2JkOmBFbnRlcmAiIHRvIGdldCBvdXQgb2YgaXQpLiBPbmNlIHlvdSBoYXZlIHZlcmlmaWVkIHRoZSBkaXJlY3RvcnksIHlvdSBjYW4KIGFkZCBpdCB0byB0aGUgc3lzdGVtIHBhdGggdG8gbWFrZSBpdCBlYXNpZXIgdG8gc3RhcnQgUHl0aG9uIGJ5IGp1c3QgcnVubmluZwogdGhlIGBgcHl0aG9uYGAgY29tbWFuZC4gVGhpcyBpcyBjdXJyZW50bHkgYW4gb3B0aW9uIGluIHRoZSBpbnN0YWxsZXIgYXMgb2YKIENQeXRob24gMy4zLgpAQCAtMzI3LDcgKzMyNyw3IEBACiAgICAgICAgcmV0dXJuICgwICE9IGtlcm5lbDMyLlRlcm1pbmF0ZVByb2Nlc3MoaGFuZGxlLCAwKSkKIAogSW4gMi43IGFuZCAzLjIsIDpmdW5jOmBvcy5raWxsYCBpcyBpbXBsZW1lbnRlZCBzaW1pbGFyIHRvIHRoZSBhYm92ZSBmdW5jdGlvbiwKLXdpdGggdGhlIGFkZGl0aW9uYWwgZmVhdHVyZSBvZiBiZWluZyBhYmxlIHRvIHNlbmQgQ1RSTCtDIGFuZCBDVFJMK0JSRUFLCit3aXRoIHRoZSBhZGRpdGlvbmFsIGZlYXR1cmUgb2YgYmVpbmcgYWJsZSB0byBzZW5kIDprYmQ6YEN0cmwrQ2AgYW5kIDprYmQ6YEN0cmwrQnJlYWtgCiB0byBjb25zb2xlIHN1YnByb2Nlc3NlcyB3aGljaCBhcmUgZGVzaWduZWQgdG8gaGFuZGxlIHRob3NlIHNpZ25hbHMuIFNlZQogOmZ1bmM6YG9zLmtpbGxgIGZvciBmdXJ0aGVyIGRldGFpbHMuCiAKZGlmZiAtLWdpdCBhL0RvYy9nbG9zc2FyeS5yc3QgYi9Eb2MvZ2xvc3NhcnkucnN0CmluZGV4IGI0OGViMWUuLjM2ODMyYTMgMTAwNjQ0Ci0tLSBhL0RvYy9nbG9zc2FyeS5yc3QKKysrIGIvRG9jL2dsb3NzYXJ5LnJzdApAQCAtNzYsNyArNzYsNyBAQAogCiAgICBCREZMCiAgICAgICBCZW5ldm9sZW50IERpY3RhdG9yIEZvciBMaWZlLCBhLmsuYS4gYEd1aWRvIHZhbiBSb3NzdW0KLSAgICAgIDxodHRwOi8vd3d3LnB5dGhvbi5vcmcvfmd1aWRvLz5gXywgUHl0aG9uJ3MgY3JlYXRvci4KKyAgICAgIDxodHRwczovL3d3dy5weXRob24ub3JnL35ndWlkby8+YF8sIFB5dGhvbidzIGNyZWF0b3IuCiAKICAgIGJpbmFyeSBmaWxlCiAgICAgICBBIDp0ZXJtOmBmaWxlIG9iamVjdGAgYWJsZSB0byByZWFkIGFuZCB3cml0ZQpAQCAtMTQxLDcgKzE0MSw3IEBACiAKICAgIENQeXRob24KICAgICAgIFRoZSBjYW5vbmljYWwgaW1wbGVtZW50YXRpb24gb2YgdGhlIFB5dGhvbiBwcm9ncmFtbWluZyBsYW5ndWFnZSwgYXMKLSAgICAgIGRpc3RyaWJ1dGVkIG9uIGBweXRob24ub3JnIDxodHRwOi8vcHl0aG9uLm9yZz5gXy4gIFRoZSB0ZXJtICJDUHl0aG9uIgorICAgICAgZGlzdHJpYnV0ZWQgb24gYHB5dGhvbi5vcmcgPGh0dHBzOi8vd3d3LnB5dGhvbi5vcmc+YF8uICBUaGUgdGVybSAiQ1B5dGhvbiIKICAgICAgIGlzIHVzZWQgd2hlbiBuZWNlc3NhcnkgdG8gZGlzdGluZ3Vpc2ggdGhpcyBpbXBsZW1lbnRhdGlvbiBmcm9tIG90aGVycwogICAgICAgc3VjaCBhcyBKeXRob24gb3IgSXJvblB5dGhvbi4KIApAQCAtMTgzLDYgKzE4MywxNCBAQAogICAgICAga2V5cyBjYW4gYmUgYW55IG9iamVjdCB3aXRoIDptZXRoOmBfX2hhc2hfX2AgYW5kIDptZXRoOmBfX2VxX19gIG1ldGhvZHMuCiAgICAgICBDYWxsZWQgYSBoYXNoIGluIFBlcmwuCiAKKyAgIGRpY3Rpb25hcnkgdmlldworICAgICAgVGhlIG9iamVjdHMgcmV0dXJuZWQgZnJvbSA6bWV0aDpgZGljdC5rZXlzYCwgOm1ldGg6YGRpY3QudmFsdWVzYCwgYW5kCisgICAgICA6bWV0aDpgZGljdC5pdGVtc2AgYXJlIGNhbGxlZCBkaWN0aW9uYXJ5IHZpZXdzLiBUaGV5IHByb3ZpZGUgYSBkeW5hbWljCisgICAgICB2aWV3IG9uIHRoZSBkaWN0aW9uYXJ54oCZcyBlbnRyaWVzLCB3aGljaCBtZWFucyB0aGF0IHdoZW4gdGhlIGRpY3Rpb25hcnkKKyAgICAgIGNoYW5nZXMsIHRoZSB2aWV3IHJlZmxlY3RzIHRoZXNlIGNoYW5nZXMuIFRvIGZvcmNlIHRoZQorICAgICAgZGljdGlvbmFyeSB2aWV3IHRvIGJlY29tZSBhIGZ1bGwgbGlzdCB1c2UgYGBsaXN0KGRpY3R2aWV3KWBgLiAgU2VlCisgICAgICA6cmVmOmBkaWN0LXZpZXdzYC4KKwogICAgZG9jc3RyaW5nCiAgICAgICBBIHN0cmluZyBsaXRlcmFsIHdoaWNoIGFwcGVhcnMgYXMgdGhlIGZpcnN0IGV4cHJlc3Npb24gaW4gYSBjbGFzcywKICAgICAgIGZ1bmN0aW9uIG9yIG1vZHVsZS4gIFdoaWxlIGlnbm9yZWQgd2hlbiB0aGUgc3VpdGUgaXMgZXhlY3V0ZWQsIGl0IGlzCkBAIC0yOTIsNyArMzAwLDcgQEAKICAgIGdlbmVyYXRvcgogICAgICAgQSBmdW5jdGlvbiB3aGljaCByZXR1cm5zIGFuIGl0ZXJhdG9yLiAgSXQgbG9va3MgbGlrZSBhIG5vcm1hbCBmdW5jdGlvbgogICAgICAgZXhjZXB0IHRoYXQgaXQgY29udGFpbnMgOmtleXdvcmQ6YHlpZWxkYCBzdGF0ZW1lbnRzIGZvciBwcm9kdWNpbmcgYSBzZXJpZXMKLSAgICAgIGEgdmFsdWVzIHVzYWJsZSBpbiBhIGZvci1sb29wIG9yIHRoYXQgY2FuIGJlIHJldHJpZXZlZCBvbmUgYXQgYSB0aW1lIHdpdGgKKyAgICAgIG9mIHZhbHVlcyB1c2FibGUgaW4gYSBmb3ItbG9vcCBvciB0aGF0IGNhbiBiZSByZXRyaWV2ZWQgb25lIGF0IGEgdGltZSB3aXRoCiAgICAgICB0aGUgOmZ1bmM6YG5leHRgIGZ1bmN0aW9uLiBFYWNoIDprZXl3b3JkOmB5aWVsZGAgdGVtcG9yYXJpbHkgc3VzcGVuZHMKICAgICAgIHByb2Nlc3NpbmcsIHJlbWVtYmVyaW5nIHRoZSBsb2NhdGlvbiBleGVjdXRpb24gc3RhdGUgKGluY2x1ZGluZyBsb2NhbAogICAgICAgdmFyaWFibGVzIGFuZCBwZW5kaW5nIHRyeS1zdGF0ZW1lbnRzKS4gIFdoZW4gdGhlIGdlbmVyYXRvciByZXN1bWVzLCBpdApAQCAtMzEwLDYgKzMxOCwxNSBAQAogICAgICAgICAgPj4+IHN1bShpKmkgZm9yIGkgaW4gcmFuZ2UoMTApKSAgICAgICAgICMgc3VtIG9mIHNxdWFyZXMgMCwgMSwgNCwgLi4uIDgxCiAgICAgICAgICAyODUKIAorICAgZ2VuZXJpYyBmdW5jdGlvbgorICAgICAgQSBmdW5jdGlvbiBjb21wb3NlZCBvZiBtdWx0aXBsZSBmdW5jdGlvbnMgaW1wbGVtZW50aW5nIHRoZSBzYW1lIG9wZXJhdGlvbgorICAgICAgZm9yIGRpZmZlcmVudCB0eXBlcy4gV2hpY2ggaW1wbGVtZW50YXRpb24gc2hvdWxkIGJlIHVzZWQgZHVyaW5nIGEgY2FsbCBpcworICAgICAgZGV0ZXJtaW5lZCBieSB0aGUgZGlzcGF0Y2ggYWxnb3JpdGhtLgorCisgICAgICBTZWUgYWxzbyB0aGUgOnRlcm06YHNpbmdsZSBkaXNwYXRjaGAgZ2xvc3NhcnkgZW50cnksIHRoZQorICAgICAgOmZ1bmM6YGZ1bmN0b29scy5zaW5nbGVkaXNwYXRjaGAgZGVjb3JhdG9yLCBhbmQgOnBlcDpgNDQzYC4KKworCiAgICBHSUwKICAgICAgIFNlZSA6dGVybTpgZ2xvYmFsIGludGVycHJldGVyIGxvY2tgLgogCkBAIC0zNDYsOCArMzYzLDggQEAKICAgICAgIEFsbCBvZiBQeXRob24ncyBpbW11dGFibGUgYnVpbHQtaW4gb2JqZWN0cyBhcmUgaGFzaGFibGUsIHdoaWxlIG5vIG11dGFibGUKICAgICAgIGNvbnRhaW5lcnMgKHN1Y2ggYXMgbGlzdHMgb3IgZGljdGlvbmFyaWVzKSBhcmUuICBPYmplY3RzIHdoaWNoIGFyZQogICAgICAgaW5zdGFuY2VzIG9mIHVzZXItZGVmaW5lZCBjbGFzc2VzIGFyZSBoYXNoYWJsZSBieSBkZWZhdWx0OyB0aGV5IGFsbAotICAgICAgY29tcGFyZSB1bmVxdWFsIChleGNlcHQgd2l0aCB0aGVtc2VsdmVzKSwgYW5kIHRoZWlyIGhhc2ggdmFsdWUgaXMgdGhlaXIKLSAgICAgIDpmdW5jOmBpZGAuCisgICAgICBjb21wYXJlIHVuZXF1YWwgKGV4Y2VwdCB3aXRoIHRoZW1zZWx2ZXMpLCBhbmQgdGhlaXIgaGFzaCB2YWx1ZSBpcyBkZXJpdmVkCisgICAgICBmcm9tIHRoZWlyIDpmdW5jOmBpZGAuCiAKICAgIElETEUKICAgICAgIEFuIEludGVncmF0ZWQgRGV2ZWxvcG1lbnQgRW52aXJvbm1lbnQgZm9yIFB5dGhvbi4gIElETEUgaXMgYSBiYXNpYyBlZGl0b3IKQEAgLTUyMSw3ICs1MzgsNyBAQAogICAgbWV0aG9kIHJlc29sdXRpb24gb3JkZXIKICAgICAgIE1ldGhvZCBSZXNvbHV0aW9uIE9yZGVyIGlzIHRoZSBvcmRlciBpbiB3aGljaCBiYXNlIGNsYXNzZXMgYXJlIHNlYXJjaGVkCiAgICAgICBmb3IgYSBtZW1iZXIgZHVyaW5nIGxvb2t1cC4gU2VlIGBUaGUgUHl0aG9uIDIuMyBNZXRob2QgUmVzb2x1dGlvbiBPcmRlcgotICAgICAgPGh0dHA6Ly93d3cucHl0aG9uLm9yZy9kb3dubG9hZC9yZWxlYXNlcy8yLjMvbXJvLz5gXy4KKyAgICAgIDxodHRwczovL3d3dy5weXRob24ub3JnL2Rvd25sb2FkL3JlbGVhc2VzLzIuMy9tcm8vPmBfLgogCiAgICBtb2R1bGUKICAgICAgIEFuIG9iamVjdCB0aGF0IHNlcnZlcyBhcyBhbiBvcmdhbml6YXRpb25hbCB1bml0IG9mIFB5dGhvbiBjb2RlLiAgTW9kdWxlcwpAQCAtNTMwLDYgKzU0NywxMCBAQAogCiAgICAgICBTZWUgYWxzbyA6dGVybTpgcGFja2FnZWAuCiAKKyAgIG1vZHVsZSBzcGVjCisgICAgICBBIG5hbWVzcGFjZSBjb250YWluaW5nIHRoZSBpbXBvcnQtcmVsYXRlZCBpbmZvcm1hdGlvbiB1c2VkIHRvIGxvYWQgYQorICAgICAgbW9kdWxlLgorCiAgICBNUk8KICAgICAgIFNlZSA6dGVybTpgbWV0aG9kIHJlc29sdXRpb24gb3JkZXJgLgogCkBAIC02NzEsMjAgKzY5MiwyNyBAQAogICAgcG9zaXRpb25hbCBhcmd1bWVudAogICAgICAgU2VlIDp0ZXJtOmBhcmd1bWVudGAuCiAKLSAgIHByb3Zpc2lvbmFsIHBhY2thZ2UKLSAgICAgIEEgcHJvdmlzaW9uYWwgcGFja2FnZSBpcyBvbmUgd2hpY2ggaGFzIGJlZW4gZGVsaWJlcmF0ZWx5IGV4Y2x1ZGVkIGZyb20KKyAgIHByb3Zpc2lvbmFsIEFQSQorICAgICAgQSBwcm92aXNpb25hbCBBUEkgaXMgb25lIHdoaWNoIGhhcyBiZWVuIGRlbGliZXJhdGVseSBleGNsdWRlZCBmcm9tCiAgICAgICB0aGUgc3RhbmRhcmQgbGlicmFyeSdzIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuICBXaGlsZSBtYWpvcgotICAgICAgY2hhbmdlcyB0byBzdWNoIHBhY2thZ2VzIGFyZSBub3QgZXhwZWN0ZWQsIGFzIGxvbmcgYXMgdGhleSBhcmUgbWFya2VkCisgICAgICBjaGFuZ2VzIHRvIHN1Y2ggaW50ZXJmYWNlcyBhcmUgbm90IGV4cGVjdGVkLCBhcyBsb25nIGFzIHRoZXkgYXJlIG1hcmtlZAogICAgICAgcHJvdmlzaW9uYWwsIGJhY2t3YXJkcyBpbmNvbXBhdGlibGUgY2hhbmdlcyAodXAgdG8gYW5kIGluY2x1ZGluZyByZW1vdmFsCi0gICAgICBvZiB0aGUgcGFja2FnZSkgbWF5IG9jY3VyIGlmIGRlZW1lZCBuZWNlc3NhcnkgYnkgY29yZSBkZXZlbG9wZXJzLiAgU3VjaAorICAgICAgb2YgdGhlIGludGVyZmFjZSkgbWF5IG9jY3VyIGlmIGRlZW1lZCBuZWNlc3NhcnkgYnkgY29yZSBkZXZlbG9wZXJzLiAgU3VjaAogICAgICAgY2hhbmdlcyB3aWxsIG5vdCBiZSBtYWRlIGdyYXR1aXRvdXNseSAtLSB0aGV5IHdpbGwgb2NjdXIgb25seSBpZiBzZXJpb3VzCi0gICAgICBmbGF3cyBhcmUgdW5jb3ZlcmVkIHRoYXQgd2VyZSBtaXNzZWQgcHJpb3IgdG8gdGhlIGluY2x1c2lvbiBvZiB0aGUKLSAgICAgIHBhY2thZ2UuCisgICAgICBmdW5kYW1lbnRhbCBmbGF3cyBhcmUgdW5jb3ZlcmVkIHRoYXQgd2VyZSBtaXNzZWQgcHJpb3IgdG8gdGhlIGluY2x1c2lvbgorICAgICAgb2YgdGhlIEFQSS4KKworICAgICAgRXZlbiBmb3IgcHJvdmlzaW9uYWwgQVBJcywgYmFja3dhcmRzIGluY29tcGF0aWJsZSBjaGFuZ2VzIGFyZSBzZWVuIGFzCisgICAgICBhICJzb2x1dGlvbiBvZiBsYXN0IHJlc29ydCIgLSBldmVyeSBhdHRlbXB0IHdpbGwgc3RpbGwgYmUgbWFkZSB0byBmaW5kCisgICAgICBhIGJhY2t3YXJkcyBjb21wYXRpYmxlIHJlc29sdXRpb24gdG8gYW55IGlkZW50aWZpZWQgcHJvYmxlbXMuCiAKICAgICAgIFRoaXMgcHJvY2VzcyBhbGxvd3MgdGhlIHN0YW5kYXJkIGxpYnJhcnkgdG8gY29udGludWUgdG8gZXZvbHZlIG92ZXIKICAgICAgIHRpbWUsIHdpdGhvdXQgbG9ja2luZyBpbiBwcm9ibGVtYXRpYyBkZXNpZ24gZXJyb3JzIGZvciBleHRlbmRlZCBwZXJpb2RzCiAgICAgICBvZiB0aW1lLiAgU2VlIDpwZXA6YDQxMWAgZm9yIG1vcmUgZGV0YWlscy4KIAorICAgcHJvdmlzaW9uYWwgcGFja2FnZQorICAgICAgU2VlIDp0ZXJtOmBwcm92aXNpb25hbCBBUElgLgorCiAgICBQeXRob24gMzAwMAogICAgICAgTmlja25hbWUgZm9yIHRoZSBQeXRob24gMy54IHJlbGVhc2UgbGluZSAoY29pbmVkIGxvbmcgYWdvIHdoZW4gdGhlCiAgICAgICByZWxlYXNlIG9mIHZlcnNpb24gMyB3YXMgc29tZXRoaW5nIGluIHRoZSBkaXN0YW50IGZ1dHVyZS4pICBUaGlzIGlzIGFsc28KQEAgLTc3MSw2ICs3OTksMTAgQEAKICAgICAgIGludGVyZmFjZSBjYW4gYmUgcmVnaXN0ZXJlZCBleHBsaWNpdGx5IHVzaW5nCiAgICAgICA6ZnVuYzpgfmFiYy5yZWdpc3RlcmAuCiAKKyAgIHNpbmdsZSBkaXNwYXRjaAorICAgICAgQSBmb3JtIG9mIDp0ZXJtOmBnZW5lcmljIGZ1bmN0aW9uYCBkaXNwYXRjaCB3aGVyZSB0aGUgaW1wbGVtZW50YXRpb24gaXMKKyAgICAgIGNob3NlbiBiYXNlZCBvbiB0aGUgdHlwZSBvZiBhIHNpbmdsZSBhcmd1bWVudC4KKwogICAgc2xpY2UKICAgICAgIEFuIG9iamVjdCB1c3VhbGx5IGNvbnRhaW5pbmcgYSBwb3J0aW9uIG9mIGEgOnRlcm06YHNlcXVlbmNlYC4gIEEgc2xpY2UgaXMKICAgICAgIGNyZWF0ZWQgdXNpbmcgdGhlIHN1YnNjcmlwdCBub3RhdGlvbiwgYGBbXWBgIHdpdGggY29sb25zIGJldHdlZW4gbnVtYmVycwpAQCAtNzk2LDEwICs4MjgsMTMgQEAKICAgICAgIDptZXRoOmB+Y29sbGVjdGlvbnMuc29tZW5hbWVkdHVwbGUuX2FzZGljdGAuIEV4YW1wbGVzIG9mIHN0cnVjdCBzZXF1ZW5jZXMKICAgICAgIGluY2x1ZGUgOmRhdGE6YHN5cy5mbG9hdF9pbmZvYCBhbmQgdGhlIHJldHVybiB2YWx1ZSBvZiA6ZnVuYzpgb3Muc3RhdGAuCiAKKyAgIHRleHQgZW5jb2RpbmcKKyAgICAgIEEgY29kZWMgd2hpY2ggZW5jb2RlcyBVbmljb2RlIHN0cmluZ3MgdG8gYnl0ZXMuCisKICAgIHRleHQgZmlsZQogICAgICAgQSA6dGVybTpgZmlsZSBvYmplY3RgIGFibGUgdG8gcmVhZCBhbmQgd3JpdGUgOmNsYXNzOmBzdHJgIG9iamVjdHMuCiAgICAgICBPZnRlbiwgYSB0ZXh0IGZpbGUgYWN0dWFsbHkgYWNjZXNzZXMgYSBieXRlLW9yaWVudGVkIGRhdGFzdHJlYW0KLSAgICAgIGFuZCBoYW5kbGVzIHRoZSB0ZXh0IGVuY29kaW5nIGF1dG9tYXRpY2FsbHkuCisgICAgICBhbmQgaGFuZGxlcyB0aGUgOnRlcm06YHRleHQgZW5jb2RpbmdgIGF1dG9tYXRpY2FsbHkuCiAKICAgICAgIC4uIHNlZWFsc286OgogICAgICAgICAgQSA6dGVybTpgYmluYXJ5IGZpbGVgIHJlYWRzIGFuZCB3cml0ZSA6Y2xhc3M6YGJ5dGVzYCBvYmplY3RzLgpAQCAtODI0LDE0ICs4NTksMTUgQEAKICAgICAgIHJlY29nbml6ZWQgYXMgZW5kaW5nIGEgbGluZTogdGhlIFVuaXggZW5kLW9mLWxpbmUgY29udmVudGlvbiBgYCdcbidgYCwKICAgICAgIHRoZSBXaW5kb3dzIGNvbnZlbnRpb24gYGAnXHJcbidgYCwgYW5kIHRoZSBvbGQgTWFjaW50b3NoIGNvbnZlbnRpb24KICAgICAgIGBgJ1xyJ2BgLiAgU2VlIDpwZXA6YDI3OGAgYW5kIDpwZXA6YDMxMTZgLCBhcyB3ZWxsIGFzCi0gICAgICA6ZnVuYzpgc3RyLnNwbGl0bGluZXNgIGZvciBhbiBhZGRpdGlvbmFsIHVzZS4KKyAgICAgIDpmdW5jOmBieXRlcy5zcGxpdGxpbmVzYCBmb3IgYW4gYWRkaXRpb25hbCB1c2UuCiAKLSAgIHZpZXcKLSAgICAgIFRoZSBvYmplY3RzIHJldHVybmVkIGZyb20gOm1ldGg6YGRpY3Qua2V5c2AsIDptZXRoOmBkaWN0LnZhbHVlc2AsIGFuZAotICAgICAgOm1ldGg6YGRpY3QuaXRlbXNgIGFyZSBjYWxsZWQgZGljdGlvbmFyeSB2aWV3cy4gIFRoZXkgYXJlIGxhenkgc2VxdWVuY2VzCi0gICAgICB0aGF0IHdpbGwgc2VlIGNoYW5nZXMgaW4gdGhlIHVuZGVybHlpbmcgZGljdGlvbmFyeS4gIFRvIGZvcmNlIHRoZQotICAgICAgZGljdGlvbmFyeSB2aWV3IHRvIGJlY29tZSBhIGZ1bGwgbGlzdCB1c2UgYGBsaXN0KGRpY3R2aWV3KWBgLiAgU2VlCi0gICAgICA6cmVmOmBkaWN0LXZpZXdzYC4KKyAgIHZpcnR1YWwgZW52aXJvbm1lbnQKKyAgICAgIEEgY29vcGVyYXRpdmVseSBpc29sYXRlZCBydW50aW1lIGVudmlyb25tZW50IHRoYXQgYWxsb3dzIFB5dGhvbiB1c2VycworICAgICAgYW5kIGFwcGxpY2F0aW9ucyB0byBpbnN0YWxsIGFuZCB1cGdyYWRlIFB5dGhvbiBkaXN0cmlidXRpb24gcGFja2FnZXMKKyAgICAgIHdpdGhvdXQgaW50ZXJmZXJpbmcgd2l0aCB0aGUgYmVoYXZpb3VyIG9mIG90aGVyIFB5dGhvbiBhcHBsaWNhdGlvbnMKKyAgICAgIHJ1bm5pbmcgb24gdGhlIHNhbWUgc3lzdGVtLgorCisgICAgICBTZWUgYWxzbyA6cmVmOmBzY3JpcHRzLXB5dmVudmAuCiAKICAgIHZpcnR1YWwgbWFjaGluZQogICAgICAgQSBjb21wdXRlciBkZWZpbmVkIGVudGlyZWx5IGluIHNvZnR3YXJlLiAgUHl0aG9uJ3MgdmlydHVhbCBtYWNoaW5lCmRpZmYgLS1naXQgYS9Eb2MvaG93dG8vY2xpbmljLnJzdCBiL0RvYy9ob3d0by9jbGluaWMucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzNjI2MzEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2MvaG93dG8vY2xpbmljLnJzdApAQCAtMCwwICsxLDE2ODYgQEAKKyoqKioqKioqKioqKioqKioqKioqKioKK0FyZ3VtZW50IENsaW5pYyBIb3ctVG8KKyoqKioqKioqKioqKioqKioqKioqKioKKworOmF1dGhvcjogTGFycnkgSGFzdGluZ3MKKworCisuLiB0b3BpYzo6IEFic3RyYWN0CisKKyAgQXJndW1lbnQgQ2xpbmljIGlzIGEgcHJlcHJvY2Vzc29yIGZvciBDUHl0aG9uIEMgZmlsZXMuCisgIEl0cyBwdXJwb3NlIGlzIHRvIGF1dG9tYXRlIGFsbCB0aGUgYm9pbGVycGxhdGUgaW52b2x2ZWQKKyAgd2l0aCB3cml0aW5nIGFyZ3VtZW50IHBhcnNpbmcgY29kZSBmb3IgImJ1aWx0aW5zIi4KKyAgVGhpcyBkb2N1bWVudCBzaG93cyB5b3UgaG93IHRvIGNvbnZlcnQgeW91ciBmaXJzdCBDCisgIGZ1bmN0aW9uIHRvIHdvcmsgd2l0aCBBcmd1bWVudCBDbGluaWMsIGFuZCB0aGVuIGludHJvZHVjZXMKKyAgc29tZSBhZHZhbmNlZCB0b3BpY3Mgb24gQXJndW1lbnQgQ2xpbmljIHVzYWdlLgorCisgIEN1cnJlbnRseSBBcmd1bWVudCBDbGluaWMgaXMgY29uc2lkZXJlZCBpbnRlcm5hbC1vbmx5CisgIGZvciBDUHl0aG9uLiAgSXRzIHVzZSBpcyBub3Qgc3VwcG9ydGVkIGZvciBmaWxlcyBvdXRzaWRlCisgIENQeXRob24sIGFuZCBubyBndWFyYW50ZWVzIGFyZSBtYWRlIHJlZ2FyZGluZyBiYWNrd2FyZHMKKyAgY29tcGF0aWJpbGl0eSBmb3IgZnV0dXJlIHZlcnNpb25zLiAgSW4gb3RoZXIgd29yZHM6IGlmIHlvdQorICBtYWludGFpbiBhbiBleHRlcm5hbCBDIGV4dGVuc2lvbiBmb3IgQ1B5dGhvbiwgeW91J3JlIHdlbGNvbWUKKyAgdG8gZXhwZXJpbWVudCB3aXRoIEFyZ3VtZW50IENsaW5pYyBpbiB5b3VyIG93biBjb2RlLiAgQnV0IHRoZQorICB2ZXJzaW9uIG9mIEFyZ3VtZW50IENsaW5pYyB0aGF0IHNoaXBzIHdpdGggQ1B5dGhvbiAzLjUgKmNvdWxkKgorICBiZSB0b3RhbGx5IGluY29tcGF0aWJsZSBhbmQgYnJlYWsgYWxsIHlvdXIgY29kZS4KKworVGhlIEdvYWxzIE9mIEFyZ3VtZW50IENsaW5pYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitBcmd1bWVudCBDbGluaWMncyBwcmltYXJ5IGdvYWwKK2lzIHRvIHRha2Ugb3ZlciByZXNwb25zaWJpbGl0eSBmb3IgYWxsIGFyZ3VtZW50IHBhcnNpbmcgY29kZQoraW5zaWRlIENQeXRob24uICBUaGlzIG1lYW5zIHRoYXQsIHdoZW4geW91IGNvbnZlcnQgYSBmdW5jdGlvbgordG8gd29yayB3aXRoIEFyZ3VtZW50IENsaW5pYywgdGhhdCBmdW5jdGlvbiBzaG91bGQgbm8gbG9uZ2VyCitkbyBhbnkgb2YgaXRzIG93biBhcmd1bWVudCBwYXJzaW5nLS10aGUgY29kZSBnZW5lcmF0ZWQgYnkKK0FyZ3VtZW50IENsaW5pYyBzaG91bGQgYmUgYSAiYmxhY2sgYm94IiB0byB5b3UsIHdoZXJlIENQeXRob24KK2NhbGxzIGluIGF0IHRoZSB0b3AsIGFuZCB5b3VyIGNvZGUgZ2V0cyBjYWxsZWQgYXQgdGhlIGJvdHRvbSwKK3dpdGggYGBQeU9iamVjdCAqYXJnc2BgIChhbmQgbWF5YmUgYGBQeU9iamVjdCAqa3dhcmdzYGApCittYWdpY2FsbHkgY29udmVydGVkIGludG8gdGhlIEMgdmFyaWFibGVzIGFuZCB0eXBlcyB5b3UgbmVlZC4KKworSW4gb3JkZXIgZm9yIEFyZ3VtZW50IENsaW5pYyB0byBhY2NvbXBsaXNoIGl0cyBwcmltYXJ5IGdvYWwsCitpdCBtdXN0IGJlIGVhc3kgdG8gdXNlLiAgQ3VycmVudGx5LCB3b3JraW5nIHdpdGggQ1B5dGhvbidzCithcmd1bWVudCBwYXJzaW5nIGxpYnJhcnkgaXMgYSBjaG9yZSwgcmVxdWlyaW5nIG1haW50YWluaW5nCityZWR1bmRhbnQgaW5mb3JtYXRpb24gaW4gYSBzdXJwcmlzaW5nIG51bWJlciBvZiBwbGFjZXMuCitXaGVuIHlvdSB1c2UgQXJndW1lbnQgQ2xpbmljLCB5b3UgZG9uJ3QgaGF2ZSB0byByZXBlYXQgeW91cnNlbGYuCisKK09idmlvdXNseSwgbm8gb25lIHdvdWxkIHdhbnQgdG8gdXNlIEFyZ3VtZW50IENsaW5pYyB1bmxlc3MKK2l0J3Mgc29sdmluZyB0aGVpciBwcm9ibGVtLS1hbmQgd2l0aG91dCBjcmVhdGluZyBuZXcgcHJvYmxlbXMgb2YKK2l0cyBvd24uCitTbyBpdCdzIHBhcmFtb3VudCB0aGF0IEFyZ3VtZW50IENsaW5pYyBnZW5lcmF0ZSBjb3JyZWN0IGNvZGUuCitJdCdkIGJlIG5pY2UgaWYgdGhlIGNvZGUgd2FzIGZhc3RlciwgdG9vLCBidXQgYXQgdGhlIHZlcnkgbGVhc3QKK2l0IHNob3VsZCBub3QgaW50cm9kdWNlIGEgbWFqb3Igc3BlZWQgcmVncmVzc2lvbi4gIChFdmVudHVhbGx5IEFyZ3VtZW50CitDbGluaWMgKnNob3VsZCogbWFrZSBhIG1ham9yIHNwZWVkdXAgcG9zc2libGUtLXdlIGNvdWxkCityZXdyaXRlIGl0cyBjb2RlIGdlbmVyYXRvciB0byBwcm9kdWNlIHRhaWxvci1tYWRlIGFyZ3VtZW50CitwYXJzaW5nIGNvZGUsIHJhdGhlciB0aGFuIGNhbGxpbmcgdGhlIGdlbmVyYWwtcHVycG9zZSBDUHl0aG9uCithcmd1bWVudCBwYXJzaW5nIGxpYnJhcnkuICBUaGF0IHdvdWxkIG1ha2UgZm9yIHRoZSBmYXN0ZXN0Cithcmd1bWVudCBwYXJzaW5nIHBvc3NpYmxlISkKKworQWRkaXRpb25hbGx5LCBBcmd1bWVudCBDbGluaWMgbXVzdCBiZSBmbGV4aWJsZSBlbm91Z2ggdG8KK3dvcmsgd2l0aCBhbnkgYXBwcm9hY2ggdG8gYXJndW1lbnQgcGFyc2luZy4gIFB5dGhvbiBoYXMKK3NvbWUgZnVuY3Rpb25zIHdpdGggc29tZSB2ZXJ5IHN0cmFuZ2UgcGFyc2luZyBiZWhhdmlvcnM7CitBcmd1bWVudCBDbGluaWMncyBnb2FsIGlzIHRvIHN1cHBvcnQgYWxsIG9mIHRoZW0uCisKK0ZpbmFsbHksIHRoZSBvcmlnaW5hbCBtb3RpdmF0aW9uIGZvciBBcmd1bWVudCBDbGluaWMgd2FzCit0byBwcm92aWRlIGludHJvc3BlY3Rpb24gInNpZ25hdHVyZXMiIGZvciBDUHl0aG9uIGJ1aWx0aW5zLgorSXQgdXNlZCB0byBiZSwgdGhlIGludHJvc3BlY3Rpb24gcXVlcnkgZnVuY3Rpb25zIHdvdWxkIHRocm93CithbiBleGNlcHRpb24gaWYgeW91IHBhc3NlZCBpbiBhIGJ1aWx0aW4uICBXaXRoIEFyZ3VtZW50CitDbGluaWMsIHRoYXQncyBhIHRoaW5nIG9mIHRoZSBwYXN0IQorCitPbmUgaWRlYSB5b3Ugc2hvdWxkIGtlZXAgaW4gbWluZCwgYXMgeW91IHdvcmsgd2l0aAorQXJndW1lbnQgQ2xpbmljOiB0aGUgbW9yZSBpbmZvcm1hdGlvbiB5b3UgZ2l2ZSBpdCwgdGhlCitiZXR0ZXIgam9iIGl0J2xsIGJlIGFibGUgdG8gZG8uCitBcmd1bWVudCBDbGluaWMgaXMgYWRtaXR0ZWRseSByZWxhdGl2ZWx5IHNpbXBsZSByaWdodAorbm93LiAgQnV0IGFzIGl0IGV2b2x2ZXMgaXQgd2lsbCBnZXQgbW9yZSBzb3BoaXN0aWNhdGVkLAorYW5kIGl0IHNob3VsZCBiZSBhYmxlIHRvIGRvIG1hbnkgaW50ZXJlc3RpbmcgYW5kIHNtYXJ0Cit0aGluZ3Mgd2l0aCBhbGwgdGhlIGluZm9ybWF0aW9uIHlvdSBnaXZlIGl0LgorCisKK0Jhc2ljIENvbmNlcHRzIEFuZCBVc2FnZQorPT09PT09PT09PT09PT09PT09PT09PT09CisKK0FyZ3VtZW50IENsaW5pYyBzaGlwcyB3aXRoIENQeXRob247IHlvdSdsbCBmaW5kIGl0IGluIGBgVG9vbHMvY2xpbmljL2NsaW5pYy5weWBgLgorSWYgeW91IHJ1biB0aGF0IHNjcmlwdCwgc3BlY2lmeWluZyBhIEMgZmlsZSBhcyBhbiBhcmd1bWVudDo6CisKKyAgICAlIHB5dGhvbjMgVG9vbHMvY2xpbmljL2NsaW5pYy5weSBmb28uYworCitBcmd1bWVudCBDbGluaWMgd2lsbCBzY2FuIG92ZXIgdGhlIGZpbGUgbG9va2luZyBmb3IgbGluZXMgdGhhdAorbG9vayBleGFjdGx5IGxpa2UgdGhpczo6CisKKyAgICAvKltjbGluaWMgaW5wdXRdCisKK1doZW4gaXQgZmluZHMgb25lLCBpdCByZWFkcyBldmVyeXRoaW5nIHVwIHRvIGEgbGluZSB0aGF0IGxvb2tzCitleGFjdGx5IGxpa2UgdGhpczo6CisKKyAgICBbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK0V2ZXJ5dGhpbmcgaW4gYmV0d2VlbiB0aGVzZSB0d28gbGluZXMgaXMgaW5wdXQgZm9yIEFyZ3VtZW50IENsaW5pYy4KK0FsbCBvZiB0aGVzZSBsaW5lcywgaW5jbHVkaW5nIHRoZSBiZWdpbm5pbmcgYW5kIGVuZGluZyBjb21tZW50CitsaW5lcywgYXJlIGNvbGxlY3RpdmVseSBjYWxsZWQgYW4gQXJndW1lbnQgQ2xpbmljICJibG9jayIuCisKK1doZW4gQXJndW1lbnQgQ2xpbmljIHBhcnNlcyBvbmUgb2YgdGhlc2UgYmxvY2tzLCBpdAorZ2VuZXJhdGVzIG91dHB1dC4gIFRoaXMgb3V0cHV0IGlzIHJld3JpdHRlbiBpbnRvIHRoZSBDIGZpbGUKK2ltbWVkaWF0ZWx5IGFmdGVyIHRoZSBibG9jaywgZm9sbG93ZWQgYnkgYSBjb21tZW50IGNvbnRhaW5pbmcgYSBjaGVja3N1bS4KK1RoZSBBcmd1bWVudCBDbGluaWMgYmxvY2sgbm93IGxvb2tzIGxpa2UgdGhpczo6CisKKyAgICAvKltjbGluaWMgaW5wdXRdCisgICAgLi4uIGNsaW5pYyBpbnB1dCBnb2VzIGhlcmUgLi4uCisgICAgW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworICAgIC4uLiBjbGluaWMgb3V0cHV0IGdvZXMgaGVyZSAuLi4KKyAgICAvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBjaGVja3N1bT0uLi5dKi8KKworSWYgeW91IHJ1biBBcmd1bWVudCBDbGluaWMgb24gdGhlIHNhbWUgZmlsZSBhIHNlY29uZCB0aW1lLCBBcmd1bWVudCBDbGluaWMKK3dpbGwgZGlzY2FyZCB0aGUgb2xkIG91dHB1dCBhbmQgd3JpdGUgb3V0IHRoZSBuZXcgb3V0cHV0IHdpdGggYSBmcmVzaCBjaGVja3N1bQorbGluZS4gIEhvd2V2ZXIsIGlmIHRoZSBpbnB1dCBoYXNuJ3QgY2hhbmdlZCwgdGhlIG91dHB1dCB3b24ndCBjaGFuZ2UgZWl0aGVyLgorCitZb3Ugc2hvdWxkIG5ldmVyIG1vZGlmeSB0aGUgb3V0cHV0IHBvcnRpb24gb2YgYW4gQXJndW1lbnQgQ2xpbmljIGJsb2NrLiAgSW5zdGVhZCwKK2NoYW5nZSB0aGUgaW5wdXQgdW50aWwgaXQgcHJvZHVjZXMgdGhlIG91dHB1dCB5b3Ugd2FudC4gIChUaGF0J3MgdGhlIHB1cnBvc2Ugb2YgdGhlCitjaGVja3N1bS0tdG8gZGV0ZWN0IGlmIHNvbWVvbmUgY2hhbmdlZCB0aGUgb3V0cHV0LCBhcyB0aGVzZSBlZGl0cyB3b3VsZCBiZSBsb3N0Cit0aGUgbmV4dCB0aW1lIEFyZ3VtZW50IENsaW5pYyB3cml0ZXMgb3V0IGZyZXNoIG91dHB1dC4pCisKK0ZvciB0aGUgc2FrZSBvZiBjbGFyaXR5LCBoZXJlJ3MgdGhlIHRlcm1pbm9sb2d5IHdlJ2xsIHVzZSB3aXRoIEFyZ3VtZW50IENsaW5pYzoKKworKiBUaGUgZmlyc3QgbGluZSBvZiB0aGUgY29tbWVudCAoYGAvKltjbGluaWMgaW5wdXRdYGApIGlzIHRoZSAqc3RhcnQgbGluZSouCisqIFRoZSBsYXN0IGxpbmUgb2YgdGhlIGluaXRpYWwgY29tbWVudCAoYGBbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovYGApIGlzIHRoZSAqZW5kIGxpbmUqLgorKiBUaGUgbGFzdCBsaW5lIChgYC8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IGNoZWNrc3VtPS4uLl0qL2BgKSBpcyB0aGUgKmNoZWNrc3VtIGxpbmUqLgorKiBJbiBiZXR3ZWVuIHRoZSBzdGFydCBsaW5lIGFuZCB0aGUgZW5kIGxpbmUgaXMgdGhlICppbnB1dCouCisqIEluIGJldHdlZW4gdGhlIGVuZCBsaW5lIGFuZCB0aGUgY2hlY2tzdW0gbGluZSBpcyB0aGUgKm91dHB1dCouCisqIEFsbCB0aGUgdGV4dCBjb2xsZWN0aXZlbHksIGZyb20gdGhlIHN0YXJ0IGxpbmUgdG8gdGhlIGNoZWNrc3VtIGxpbmUgaW5jbHVzaXZlbHksCisgIGlzIHRoZSAqYmxvY2sqLiAgKEEgYmxvY2sgdGhhdCBoYXNuJ3QgYmVlbiBzdWNjZXNzZnVsbHkgcHJvY2Vzc2VkIGJ5IEFyZ3VtZW50CisgIENsaW5pYyB5ZXQgZG9lc24ndCBoYXZlIG91dHB1dCBvciBhIGNoZWNrc3VtIGxpbmUsIGJ1dCBpdCdzIHN0aWxsIGNvbnNpZGVyZWQKKyAgYSBibG9jay4pCisKKworQ29udmVydGluZyBZb3VyIEZpcnN0IEZ1bmN0aW9uCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIGJlc3Qgd2F5IHRvIGdldCBhIHNlbnNlIG9mIGhvdyBBcmd1bWVudCBDbGluaWMgd29ya3MgaXMgdG8KK2NvbnZlcnQgYSBmdW5jdGlvbiB0byB3b3JrIHdpdGggaXQuICBIZXJlLCB0aGVuLCBhcmUgdGhlIGJhcmUKK21pbmltdW0gc3RlcHMgeW91J2QgbmVlZCB0byBmb2xsb3cgdG8gY29udmVydCBhIGZ1bmN0aW9uIHRvCit3b3JrIHdpdGggQXJndW1lbnQgQ2xpbmljLiAgTm90ZSB0aGF0IGZvciBjb2RlIHlvdSBwbGFuIHRvCitjaGVjayBpbiB0byBDUHl0aG9uLCB5b3UgcmVhbGx5IHNob3VsZCB0YWtlIHRoZSBjb252ZXJzaW9uIGZhcnRoZXIsCit1c2luZyBzb21lIG9mIHRoZSBhZHZhbmNlZCBjb25jZXB0cyB5b3UnbGwgc2VlIGxhdGVyIG9uIGluCit0aGUgZG9jdW1lbnQgKGxpa2UgInJldHVybiBjb252ZXJ0ZXJzIiBhbmQgInNlbGYgY29udmVydGVycyIpLgorQnV0IHdlJ2xsIGtlZXAgaXQgc2ltcGxlIGZvciB0aGlzIHdhbGt0aHJvdWdoIHNvIHlvdSBjYW4gbGVhcm4uCisKK0xldCdzIGRpdmUgaW4hCisKKzAuIE1ha2Ugc3VyZSB5b3UncmUgd29ya2luZyB3aXRoIGEgZnJlc2hseSB1cGRhdGVkIGNoZWNrb3V0CisgICBvZiB0aGUgQ1B5dGhvbiB0cnVuay4KKworMS4gRmluZCBhIFB5dGhvbiBidWlsdGluIHRoYXQgY2FsbHMgZWl0aGVyIDpjOmZ1bmM6YFB5QXJnX1BhcnNlVHVwbGVgCisgICBvciA6YzpmdW5jOmBQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHNgLCBhbmQgaGFzbid0IGJlZW4gY29udmVydGVkCisgICB0byB3b3JrIHdpdGggQXJndW1lbnQgQ2xpbmljIHlldC4KKyAgIEZvciBteSBleGFtcGxlIEknbSB1c2luZyBgYF9waWNrbGUuUGlja2xlci5kdW1wKClgYC4KKworMi4gSWYgdGhlIGNhbGwgdG8gdGhlIGBgUHlBcmdfUGFyc2VgYCBmdW5jdGlvbiB1c2VzIGFueSBvZiB0aGUKKyAgIGZvbGxvd2luZyBmb3JtYXQgdW5pdHM6OgorCisgICAgICAgTyYKKyAgICAgICBPIQorICAgICAgIGVzCisgICAgICAgZXMjCisgICAgICAgZXQKKyAgICAgICBldCMKKworICAgb3IgaWYgaXQgaGFzIG11bHRpcGxlIGNhbGxzIHRvIDpjOmZ1bmM6YFB5QXJnX1BhcnNlVHVwbGVgLAorICAgeW91IHNob3VsZCBjaG9vc2UgYSBkaWZmZXJlbnQgZnVuY3Rpb24uICBBcmd1bWVudCBDbGluaWMgKmRvZXMqCisgICBzdXBwb3J0IGFsbCBvZiB0aGVzZSBzY2VuYXJpb3MuICBCdXQgdGhlc2UgYXJlIGFkdmFuY2VkCisgICB0b3BpY3MtLWxldCdzIGRvIHNvbWV0aGluZyBzaW1wbGVyIGZvciB5b3VyIGZpcnN0IGZ1bmN0aW9uLgorCisgICBBbHNvLCBpZiB0aGUgZnVuY3Rpb24gaGFzIG11bHRpcGxlIGNhbGxzIHRvIDpjOmZ1bmM6YFB5QXJnX1BhcnNlVHVwbGVgCisgICBvciA6YzpmdW5jOmBQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHNgIHdoZXJlIGl0IHN1cHBvcnRzIGRpZmZlcmVudAorICAgdHlwZXMgZm9yIHRoZSBzYW1lIGFyZ3VtZW50LCBvciBpZiB0aGUgZnVuY3Rpb24gdXNlcyBzb21ldGhpbmcgYmVzaWRlcworICAgUHlBcmdfUGFyc2UgZnVuY3Rpb25zIHRvIHBhcnNlIGl0cyBhcmd1bWVudHMsIGl0IHByb2JhYmx5CisgICBpc24ndCBzdWl0YWJsZSBmb3IgY29udmVyc2lvbiB0byBBcmd1bWVudCBDbGluaWMuICBBcmd1bWVudCBDbGluaWMKKyAgIGRvZXNuJ3Qgc3VwcG9ydCBnZW5lcmljIGZ1bmN0aW9ucyBvciBwb2x5bW9ycGhpYyBwYXJhbWV0ZXJzLgorCiszLiBBZGQgdGhlIGZvbGxvd2luZyBib2lsZXJwbGF0ZSBhYm92ZSB0aGUgZnVuY3Rpb24sIGNyZWF0aW5nIG91ciBibG9jazo6CisKKyAgICAvKltjbGluaWMgaW5wdXRdCisgICAgW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCis0LiBDdXQgdGhlIGRvY3N0cmluZyBhbmQgcGFzdGUgaXQgaW4gYmV0d2VlbiB0aGUgYGBbY2xpbmljXWBgIGxpbmVzLAorICAgcmVtb3ZpbmcgYWxsIHRoZSBqdW5rIHRoYXQgbWFrZXMgaXQgYSBwcm9wZXJseSBxdW90ZWQgQyBzdHJpbmcuCisgICBXaGVuIHlvdSdyZSBkb25lIHlvdSBzaG91bGQgaGF2ZSBqdXN0IHRoZSB0ZXh0LCBiYXNlZCBhdCB0aGUgbGVmdAorICAgbWFyZ2luLCB3aXRoIG5vIGxpbmUgd2lkZXIgdGhhbiA4MCBjaGFyYWN0ZXJzLgorICAgKEFyZ3VtZW50IENsaW5pYyB3aWxsIHByZXNlcnZlIGluZGVudHMgaW5zaWRlIHRoZSBkb2NzdHJpbmcuKQorCisgICBJZiB0aGUgb2xkIGRvY3N0cmluZyBoYWQgYSBmaXJzdCBsaW5lIHRoYXQgbG9va2VkIGxpa2UgYSBmdW5jdGlvbgorICAgc2lnbmF0dXJlLCB0aHJvdyB0aGF0IGxpbmUgYXdheS4gIChUaGUgZG9jc3RyaW5nIGRvZXNuJ3QgbmVlZCBpdAorICAgYW55bW9yZS0td2hlbiB5b3UgdXNlIGBgaGVscCgpYGAgb24geW91ciBidWlsdGluIGluIHRoZSBmdXR1cmUsCisgICB0aGUgZmlyc3QgbGluZSB3aWxsIGJlIGJ1aWx0IGF1dG9tYXRpY2FsbHkgYmFzZWQgb24gdGhlIGZ1bmN0aW9uJ3MKKyAgIHNpZ25hdHVyZS4pCisKKyAgIFNhbXBsZTo6CisKKyAgICAvKltjbGluaWMgaW5wdXRdCisgICAgV3JpdGUgYSBwaWNrbGVkIHJlcHJlc2VudGF0aW9uIG9mIG9iaiB0byB0aGUgb3BlbiBmaWxlLgorICAgIFtjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworNS4gSWYgeW91ciBkb2NzdHJpbmcgZG9lc24ndCBoYXZlIGEgInN1bW1hcnkiIGxpbmUsIEFyZ3VtZW50IENsaW5pYyB3aWxsCisgICBjb21wbGFpbi4gIFNvIGxldCdzIG1ha2Ugc3VyZSBpdCBoYXMgb25lLiAgVGhlICJzdW1tYXJ5IiBsaW5lIHNob3VsZAorICAgYmUgYSBwYXJhZ3JhcGggY29uc2lzdGluZyBvZiBhIHNpbmdsZSA4MC1jb2x1bW4gbGluZQorICAgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZG9jc3RyaW5nLgorCisgICAoT3VyIGV4YW1wbGUgZG9jc3RyaW5nIGNvbnNpc3RzIHNvbGVseSBvZiBhIHN1bW1hcnkgbGluZSwgc28gdGhlIHNhbXBsZQorICAgY29kZSBkb2Vzbid0IGhhdmUgdG8gY2hhbmdlIGZvciB0aGlzIHN0ZXAuKQorCis2LiBBYm92ZSB0aGUgZG9jc3RyaW5nLCBlbnRlciB0aGUgbmFtZSBvZiB0aGUgZnVuY3Rpb24sIGZvbGxvd2VkCisgICBieSBhIGJsYW5rIGxpbmUuICBUaGlzIHNob3VsZCBiZSB0aGUgUHl0aG9uIG5hbWUgb2YgdGhlIGZ1bmN0aW9uLAorICAgYW5kIHNob3VsZCBiZSB0aGUgZnVsbCBkb3R0ZWQgcGF0aAorICAgdG8gdGhlIGZ1bmN0aW9uLS1pdCBzaG91bGQgc3RhcnQgd2l0aCB0aGUgbmFtZSBvZiB0aGUgbW9kdWxlLAorICAgaW5jbHVkZSBhbnkgc3ViLW1vZHVsZXMsIGFuZCBpZiB0aGUgZnVuY3Rpb24gaXMgYSBtZXRob2Qgb24KKyAgIGEgY2xhc3MgaXQgc2hvdWxkIGluY2x1ZGUgdGhlIGNsYXNzIG5hbWUgdG9vLgorCisgICBTYW1wbGU6OgorCisgICAgLypbY2xpbmljIGlucHV0XQorICAgIF9waWNrbGUuUGlja2xlci5kdW1wCisKKyAgICBXcml0ZSBhIHBpY2tsZWQgcmVwcmVzZW50YXRpb24gb2Ygb2JqIHRvIHRoZSBvcGVuIGZpbGUuCisgICAgW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCis3LiBJZiB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHRoYXQgbW9kdWxlIG9yIGNsYXNzIGhhcyBiZWVuIHVzZWQgd2l0aCBBcmd1bWVudAorICAgQ2xpbmljIGluIHRoaXMgQyBmaWxlLAorICAgeW91IG11c3QgZGVjbGFyZSB0aGUgbW9kdWxlIGFuZC9vciBjbGFzcy4gIFByb3BlciBBcmd1bWVudCBDbGluaWMgaHlnaWVuZQorICAgcHJlZmVycyBkZWNsYXJpbmcgdGhlc2UgaW4gYSBzZXBhcmF0ZSBibG9jayBzb21ld2hlcmUgbmVhciB0aGUKKyAgIHRvcCBvZiB0aGUgQyBmaWxlLCBpbiB0aGUgc2FtZSB3YXkgdGhhdCBpbmNsdWRlIGZpbGVzIGFuZCBzdGF0aWNzIGdvIGF0CisgICB0aGUgdG9wLiAgKEluIG91ciBzYW1wbGUgY29kZSB3ZSdsbCBqdXN0IHNob3cgdGhlIHR3byBibG9ja3MgbmV4dCB0bworICAgZWFjaCBvdGhlci4pCisKKyAgIFRoZSBuYW1lIG9mIHRoZSBjbGFzcyBhbmQgbW9kdWxlIHNob3VsZCBiZSB0aGUgc2FtZSBhcyB0aGUgb25lCisgICBzZWVuIGJ5IFB5dGhvbi4gIENoZWNrIHRoZSBuYW1lIGRlZmluZWQgaW4gdGhlIDpjOnR5cGU6YFB5TW9kdWxlRGVmYAorICAgb3IgOmM6dHlwZTpgUHlUeXBlT2JqZWN0YCBhcyBhcHByb3ByaWF0ZS4KKworICAgV2hlbiB5b3UgZGVjbGFyZSBhIGNsYXNzLCB5b3UgbXVzdCBhbHNvIHNwZWNpZnkgdHdvIGFzcGVjdHMgb2YgaXRzIHR5cGUKKyAgIGluIEM6IHRoZSB0eXBlIGRlY2xhcmF0aW9uIHlvdSdkIHVzZSBmb3IgYSBwb2ludGVyIHRvIGFuIGluc3RhbmNlIG9mCisgICB0aGlzIGNsYXNzLCBhbmQgYSBwb2ludGVyIHRvIHRoZSA6Yzp0eXBlOmBQeVR5cGVPYmplY3RgIGZvciB0aGlzIGNsYXNzLgorCisgICBTYW1wbGU6OgorCisgICAgICAgLypbY2xpbmljIGlucHV0XQorICAgICAgIG1vZHVsZSBfcGlja2xlCisgICAgICAgY2xhc3MgX3BpY2tsZS5QaWNrbGVyICJQaWNrbGVyT2JqZWN0ICoiICImUGlja2xlcl9UeXBlIgorICAgICAgIFtjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworICAgICAgIC8qW2NsaW5pYyBpbnB1dF0KKyAgICAgICBfcGlja2xlLlBpY2tsZXIuZHVtcAorCisgICAgICAgV3JpdGUgYSBwaWNrbGVkIHJlcHJlc2VudGF0aW9uIG9mIG9iaiB0byB0aGUgb3BlbiBmaWxlLgorICAgICAgIFtjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworCisKKworOC4gRGVjbGFyZSBlYWNoIG9mIHRoZSBwYXJhbWV0ZXJzIHRvIHRoZSBmdW5jdGlvbi4gIEVhY2ggcGFyYW1ldGVyCisgICBzaG91bGQgZ2V0IGl0cyBvd24gbGluZS4gIEFsbCB0aGUgcGFyYW1ldGVyIGxpbmVzIHNob3VsZCBiZQorICAgaW5kZW50ZWQgZnJvbSB0aGUgZnVuY3Rpb24gbmFtZSBhbmQgdGhlIGRvY3N0cmluZy4KKworICAgVGhlIGdlbmVyYWwgZm9ybSBvZiB0aGVzZSBwYXJhbWV0ZXIgbGluZXMgaXMgYXMgZm9sbG93czo6CisKKyAgICAgICBuYW1lX29mX3BhcmFtZXRlcjogY29udmVydGVyCisKKyAgIElmIHRoZSBwYXJhbWV0ZXIgaGFzIGEgZGVmYXVsdCB2YWx1ZSwgYWRkIHRoYXQgYWZ0ZXIgdGhlCisgICBjb252ZXJ0ZXI6OgorCisgICAgICAgbmFtZV9vZl9wYXJhbWV0ZXI6IGNvbnZlcnRlciA9IGRlZmF1bHRfdmFsdWUKKworICAgQXJndW1lbnQgQ2xpbmljJ3Mgc3VwcG9ydCBmb3IgImRlZmF1bHQgdmFsdWVzIiBpcyBxdWl0ZSBzb3BoaXN0aWNhdGVkOworICAgcGxlYXNlIHNlZSA6cmVmOmB0aGUgc2VjdGlvbiBiZWxvdyBvbiBkZWZhdWx0IHZhbHVlcyA8ZGVmYXVsdF92YWx1ZXM+YAorICAgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKKyAgIEFkZCBhIGJsYW5rIGxpbmUgYmVsb3cgdGhlIHBhcmFtZXRlcnMuCisKKyAgIFdoYXQncyBhICJjb252ZXJ0ZXIiPyAgSXQgZXN0YWJsaXNoZXMgYm90aCB0aGUgdHlwZQorICAgb2YgdGhlIHZhcmlhYmxlIHVzZWQgaW4gQywgYW5kIHRoZSBtZXRob2QgdG8gY29udmVydCB0aGUgUHl0aG9uCisgICB2YWx1ZSBpbnRvIGEgQyB2YWx1ZSBhdCBydW50aW1lLgorICAgRm9yIG5vdyB5b3UncmUgZ29pbmcgdG8gdXNlIHdoYXQncyBjYWxsZWQgYSAibGVnYWN5IGNvbnZlcnRlciItLWEKKyAgIGNvbnZlbmllbmNlIHN5bnRheCBpbnRlbmRlZCB0byBtYWtlIHBvcnRpbmcgb2xkIGNvZGUgaW50byBBcmd1bWVudAorICAgQ2xpbmljIGVhc2llci4KKworICAgRm9yIGVhY2ggcGFyYW1ldGVyLCBjb3B5IHRoZSAiZm9ybWF0IHVuaXQiIGZvciB0aGF0CisgICBwYXJhbWV0ZXIgZnJvbSB0aGUgYGBQeUFyZ19QYXJzZSgpYGAgZm9ybWF0IGFyZ3VtZW50IGFuZAorICAgc3BlY2lmeSAqdGhhdCogYXMgaXRzIGNvbnZlcnRlciwgYXMgYSBxdW90ZWQKKyAgIHN0cmluZy4gICgiZm9ybWF0IHVuaXQiIGlzIHRoZSBmb3JtYWwgbmFtZSBmb3IgdGhlIG9uZS10by10aHJlZQorICAgY2hhcmFjdGVyIHN1YnN0cmluZyBvZiB0aGUgYGBmb3JtYXRgYCBwYXJhbWV0ZXIgdGhhdCB0ZWxscworICAgdGhlIGFyZ3VtZW50IHBhcnNpbmcgZnVuY3Rpb24gd2hhdCB0aGUgdHlwZSBvZiB0aGUgdmFyaWFibGUKKyAgIGlzIGFuZCBob3cgdG8gY29udmVydCBpdC4gIEZvciBtb3JlIG9uIGZvcm1hdCB1bml0cyBwbGVhc2UKKyAgIHNlZSA6cmVmOmBhcmctcGFyc2luZ2AuKQorCisgICBGb3IgbXVsdGljaGFyYWN0ZXIgZm9ybWF0IHVuaXRzIGxpa2UgYGB6I2BgLCB1c2UgdGhlCisgICBlbnRpcmUgdHdvLW9yLXRocmVlIGNoYXJhY3RlciBzdHJpbmcuCisKKyAgIFNhbXBsZTo6CisKKyAgICAgICAgLypbY2xpbmljIGlucHV0XQorICAgICAgICBtb2R1bGUgX3BpY2tsZQorICAgICAgICBjbGFzcyBfcGlja2xlLlBpY2tsZXIgIlBpY2tsZXJPYmplY3QgKiIgIiZQaWNrbGVyX1R5cGUiCisgICAgICAgIFtjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworICAgICAgICAvKltjbGluaWMgaW5wdXRdCisgICAgICAgIF9waWNrbGUuUGlja2xlci5kdW1wCisKKyAgICAgICAgICAgb2JqOiAnTycKKworICAgICAgIFdyaXRlIGEgcGlja2xlZCByZXByZXNlbnRhdGlvbiBvZiBvYmogdG8gdGhlIG9wZW4gZmlsZS4KKyAgICAgICBbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKKzkuIElmIHlvdXIgZnVuY3Rpb24gaGFzIGBgfGBgIGluIHRoZSBmb3JtYXQgc3RyaW5nLCBtZWFuaW5nIHNvbWUKKyAgIHBhcmFtZXRlcnMgaGF2ZSBkZWZhdWx0IHZhbHVlcywgeW91IGNhbiBpZ25vcmUgaXQuICBBcmd1bWVudAorICAgQ2xpbmljIGluZmVycyB3aGljaCBwYXJhbWV0ZXJzIGFyZSBvcHRpb25hbCBiYXNlZCBvbiB3aGV0aGVyCisgICBvciBub3QgdGhleSBoYXZlIGRlZmF1bHQgdmFsdWVzLgorCisgICBJZiB5b3VyIGZ1bmN0aW9uIGhhcyBgYCRgYCBpbiB0aGUgZm9ybWF0IHN0cmluZywgbWVhbmluZyBpdAorICAgdGFrZXMga2V5d29yZC1vbmx5IGFyZ3VtZW50cywgc3BlY2lmeSBgYCpgYCBvbiBhIGxpbmUgYnkKKyAgIGl0c2VsZiBiZWZvcmUgdGhlIGZpcnN0IGtleXdvcmQtb25seSBhcmd1bWVudCwgaW5kZW50ZWQgdGhlCisgICBzYW1lIGFzIHRoZSBwYXJhbWV0ZXIgbGluZXMuCisKKyAgIChgYF9waWNrbGUuUGlja2xlci5kdW1wYGAgaGFzIG5laXRoZXIsIHNvIG91ciBzYW1wbGUgaXMgdW5jaGFuZ2VkLikKKworCisxMC4gSWYgdGhlIGV4aXN0aW5nIEMgZnVuY3Rpb24gY2FsbHMgOmM6ZnVuYzpgUHlBcmdfUGFyc2VUdXBsZWAKKyAgICAoYXMgb3Bwb3NlZCB0byA6YzpmdW5jOmBQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHNgKSwgdGhlbiBhbGwgaXRzCisgICAgYXJndW1lbnRzIGFyZSBwb3NpdGlvbmFsLW9ubHkuCisKKyAgICBUbyBtYXJrIGFsbCBwYXJhbWV0ZXJzIGFzIHBvc2l0aW9uYWwtb25seSBpbiBBcmd1bWVudCBDbGluaWMsCisgICAgYWRkIGEgYGAvYGAgb24gYSBsaW5lIGJ5IGl0c2VsZiBhZnRlciB0aGUgbGFzdCBwYXJhbWV0ZXIsCisgICAgaW5kZW50ZWQgdGhlIHNhbWUgYXMgdGhlIHBhcmFtZXRlciBsaW5lcy4KKworICAgIEN1cnJlbnRseSB0aGlzIGlzIGFsbC1vci1ub3RoaW5nOyBlaXRoZXIgYWxsIHBhcmFtZXRlcnMgYXJlCisgICAgcG9zaXRpb25hbC1vbmx5LCBvciBub25lIG9mIHRoZW0gYXJlLiAgKEluIHRoZSBmdXR1cmUgQXJndW1lbnQKKyAgICBDbGluaWMgbWF5IHJlbGF4IHRoaXMgcmVzdHJpY3Rpb24uKQorCisgICAgU2FtcGxlOjoKKworICAgICAgICAvKltjbGluaWMgaW5wdXRdCisgICAgICAgIG1vZHVsZSBfcGlja2xlCisgICAgICAgIGNsYXNzIF9waWNrbGUuUGlja2xlciAiUGlja2xlck9iamVjdCAqIiAiJlBpY2tsZXJfVHlwZSIKKyAgICAgICAgW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCisgICAgICAgIC8qW2NsaW5pYyBpbnB1dF0KKyAgICAgICAgX3BpY2tsZS5QaWNrbGVyLmR1bXAKKworICAgICAgICAgICAgb2JqOiAnTycKKyAgICAgICAgICAgIC8KKworICAgICAgICBXcml0ZSBhIHBpY2tsZWQgcmVwcmVzZW50YXRpb24gb2Ygb2JqIHRvIHRoZSBvcGVuIGZpbGUuCisgICAgICAgIFtjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworMTEuIEl0J3MgaGVscGZ1bCB0byB3cml0ZSBhIHBlci1wYXJhbWV0ZXIgZG9jc3RyaW5nIGZvciBlYWNoIHBhcmFtZXRlci4KKyAgICBCdXQgcGVyLXBhcmFtZXRlciBkb2NzdHJpbmdzIGFyZSBvcHRpb25hbDsgeW91IGNhbiBza2lwIHRoaXMgc3RlcAorICAgIGlmIHlvdSBwcmVmZXIuCisKKyAgICBIZXJlJ3MgaG93IHRvIGFkZCBhIHBlci1wYXJhbWV0ZXIgZG9jc3RyaW5nLiAgVGhlIGZpcnN0IGxpbmUKKyAgICBvZiB0aGUgcGVyLXBhcmFtZXRlciBkb2NzdHJpbmcgbXVzdCBiZSBpbmRlbnRlZCBmdXJ0aGVyIHRoYW4gdGhlCisgICAgcGFyYW1ldGVyIGRlZmluaXRpb24uICBUaGUgbGVmdCBtYXJnaW4gb2YgdGhpcyBmaXJzdCBsaW5lIGVzdGFibGlzaGVzCisgICAgdGhlIGxlZnQgbWFyZ2luIGZvciB0aGUgd2hvbGUgcGVyLXBhcmFtZXRlciBkb2NzdHJpbmc7IGFsbCB0aGUgdGV4dAorICAgIHlvdSB3cml0ZSB3aWxsIGJlIG91dGRlbnRlZCBieSB0aGlzIGFtb3VudC4gIFlvdSBjYW4gd3JpdGUgYXMgbXVjaAorICAgIHRleHQgYXMgeW91IGxpa2UsIGFjcm9zcyBtdWx0aXBsZSBsaW5lcyBpZiB5b3Ugd2lzaC4KKworICAgIFNhbXBsZTo6CisKKyAgICAgICAgLypbY2xpbmljIGlucHV0XQorICAgICAgICBtb2R1bGUgX3BpY2tsZQorICAgICAgICBjbGFzcyBfcGlja2xlLlBpY2tsZXIgIlBpY2tsZXJPYmplY3QgKiIgIiZQaWNrbGVyX1R5cGUiCisgICAgICAgIFtjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworICAgICAgICAvKltjbGluaWMgaW5wdXRdCisgICAgICAgIF9waWNrbGUuUGlja2xlci5kdW1wCisKKyAgICAgICAgICAgIG9iajogJ08nCisgICAgICAgICAgICAgICAgVGhlIG9iamVjdCB0byBiZSBwaWNrbGVkLgorICAgICAgICAgICAgLworCisgICAgICAgIFdyaXRlIGEgcGlja2xlZCByZXByZXNlbnRhdGlvbiBvZiBvYmogdG8gdGhlIG9wZW4gZmlsZS4KKyAgICAgICAgW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCisxMi4gU2F2ZSBhbmQgY2xvc2UgdGhlIGZpbGUsIHRoZW4gcnVuIGBgVG9vbHMvY2xpbmljL2NsaW5pYy5weWBgIG9uIGl0LgorICAgIFdpdGggbHVjayBldmVyeXRoaW5nIHdvcmtlZCBhbmQgeW91ciBibG9jayBub3cgaGFzIG91dHB1dCEgIFJlb3BlbgorICAgIHRoZSBmaWxlIGluIHlvdXIgdGV4dCBlZGl0b3IgdG8gc2VlOjoKKworICAgICAgIC8qW2NsaW5pYyBpbnB1dF0KKyAgICAgICBtb2R1bGUgX3BpY2tsZQorICAgICAgIGNsYXNzIF9waWNrbGUuUGlja2xlciAiUGlja2xlck9iamVjdCAqIiAiJlBpY2tsZXJfVHlwZSIKKyAgICAgICBbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisgICAgICAgLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogY2hlY2tzdW09ZGEzOWEzZWU1ZTZiNGIwZDMyNTViZmVmOTU2MDE4OTBhZmQ4MDcwOV0qLworCisgICAgICAgLypbY2xpbmljIGlucHV0XQorICAgICAgIF9waWNrbGUuUGlja2xlci5kdW1wCisKKyAgICAgICAgICAgb2JqOiAnTycKKyAgICAgICAgICAgICAgIFRoZSBvYmplY3QgdG8gYmUgcGlja2xlZC4KKyAgICAgICAgICAgLworCisgICAgICAgV3JpdGUgYSBwaWNrbGVkIHJlcHJlc2VudGF0aW9uIG9mIG9iaiB0byB0aGUgb3BlbiBmaWxlLgorICAgICAgIFtjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworICAgICAgIFB5RG9jX1NUUlZBUihfcGlja2xlX1BpY2tsZXJfZHVtcF9fZG9jX18sCisgICAgICAgIldyaXRlIGEgcGlja2xlZCByZXByZXNlbnRhdGlvbiBvZiBvYmogdG8gdGhlIG9wZW4gZmlsZS5cbiIKKyAgICAgICAiXG4iCisgICAgICAgLi4uCisgICAgICAgc3RhdGljIFB5T2JqZWN0ICoKKyAgICAgICBfcGlja2xlX1BpY2tsZXJfZHVtcF9pbXBsKFBpY2tsZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpvYmopCisgICAgICAgLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogY2hlY2tzdW09M2JkMzA3NDViZjIwNmE0OGY4YjU3NmExZGEzZDkwZjU1YTBhNDE4N10qLworCisgICAgT2J2aW91c2x5LCBpZiBBcmd1bWVudCBDbGluaWMgZGlkbid0IHByb2R1Y2UgYW55IG91dHB1dCwgaXQncyBiZWNhdXNlCisgICAgaXQgZm91bmQgYW4gZXJyb3IgaW4geW91ciBpbnB1dC4gIEtlZXAgZml4aW5nIHlvdXIgZXJyb3JzIGFuZCByZXRyeWluZworICAgIHVudGlsIEFyZ3VtZW50IENsaW5pYyBwcm9jZXNzZXMgeW91ciBmaWxlIHdpdGhvdXQgY29tcGxhaW50LgorCisxMy4gRG91YmxlLWNoZWNrIHRoYXQgdGhlIGFyZ3VtZW50LXBhcnNpbmcgY29kZSBBcmd1bWVudCBDbGluaWMgZ2VuZXJhdGVkCisgICAgbG9va3MgYmFzaWNhbGx5IHRoZSBzYW1lIGFzIHRoZSBleGlzdGluZyBjb2RlLgorCisgICAgRmlyc3QsIGVuc3VyZSBib3RoIHBsYWNlcyB1c2UgdGhlIHNhbWUgYXJndW1lbnQtcGFyc2luZyBmdW5jdGlvbi4KKyAgICBUaGUgZXhpc3RpbmcgY29kZSBtdXN0IGNhbGwgZWl0aGVyCisgICAgOmM6ZnVuYzpgUHlBcmdfUGFyc2VUdXBsZWAgb3IgOmM6ZnVuYzpgUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzYDsKKyAgICBlbnN1cmUgdGhhdCB0aGUgY29kZSBnZW5lcmF0ZWQgYnkgQXJndW1lbnQgQ2xpbmljIGNhbGxzIHRoZQorICAgICpleGFjdCogc2FtZSBmdW5jdGlvbi4KKworICAgIFNlY29uZCwgdGhlIGZvcm1hdCBzdHJpbmcgcGFzc2VkIGluIHRvIDpjOmZ1bmM6YFB5QXJnX1BhcnNlVHVwbGVgIG9yCisgICAgOmM6ZnVuYzpgUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzYCBzaG91bGQgYmUgKmV4YWN0bHkqIHRoZSBzYW1lCisgICAgYXMgdGhlIGhhbmQtd3JpdHRlbiBvbmUgaW4gdGhlIGV4aXN0aW5nIGZ1bmN0aW9uLCB1cCB0byB0aGUgY29sb24KKyAgICBvciBzZW1pLWNvbG9uLgorCisgICAgKEFyZ3VtZW50IENsaW5pYyBhbHdheXMgZ2VuZXJhdGVzIGl0cyBmb3JtYXQgc3RyaW5ncworICAgIHdpdGggYSBgYDpgYCBmb2xsb3dlZCBieSB0aGUgbmFtZSBvZiB0aGUgZnVuY3Rpb24uICBJZiB0aGUKKyAgICBleGlzdGluZyBjb2RlJ3MgZm9ybWF0IHN0cmluZyBlbmRzIHdpdGggYGA7YGAsIHRvIHByb3ZpZGUKKyAgICB1c2FnZSBoZWxwLCB0aGlzIGNoYW5nZSBpcyBoYXJtbGVzcy0tZG9uJ3Qgd29ycnkgYWJvdXQgaXQuKQorCisgICAgVGhpcmQsIGZvciBwYXJhbWV0ZXJzIHdob3NlIGZvcm1hdCB1bml0cyByZXF1aXJlIHR3byBhcmd1bWVudHMKKyAgICAobGlrZSBhIGxlbmd0aCB2YXJpYWJsZSwgb3IgYW4gZW5jb2Rpbmcgc3RyaW5nLCBvciBhIHBvaW50ZXIKKyAgICB0byBhIGNvbnZlcnNpb24gZnVuY3Rpb24pLCBlbnN1cmUgdGhhdCB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzCisgICAgKmV4YWN0bHkqIHRoZSBzYW1lIGJldHdlZW4gdGhlIHR3byBpbnZvY2F0aW9ucy4KKworICAgIEZvdXJ0aCwgaW5zaWRlIHRoZSBvdXRwdXQgcG9ydGlvbiBvZiB0aGUgYmxvY2sgeW91J2xsIGZpbmQgYSBwcmVwcm9jZXNzb3IKKyAgICBtYWNybyBkZWZpbmluZyB0aGUgYXBwcm9wcmlhdGUgc3RhdGljIDpjOnR5cGU6YFB5TWV0aG9kRGVmYCBzdHJ1Y3R1cmUgZm9yCisgICAgdGhpcyBidWlsdGluOjoKKworICAgICAgICAjZGVmaW5lIF9fUElDS0xFX1BJQ0tMRVJfRFVNUF9NRVRIT0RERUYgICAgXAorICAgICAgICB7ImR1bXAiLCAoUHlDRnVuY3Rpb24pX19waWNrbGVfUGlja2xlcl9kdW1wLCBNRVRIX08sIF9fcGlja2xlX1BpY2tsZXJfZHVtcF9fZG9jX199LAorCisgICAgVGhpcyBzdGF0aWMgc3RydWN0dXJlIHNob3VsZCBiZSAqZXhhY3RseSogdGhlIHNhbWUgYXMgdGhlIGV4aXN0aW5nIHN0YXRpYworICAgIDpjOnR5cGU6YFB5TWV0aG9kRGVmYCBzdHJ1Y3R1cmUgZm9yIHRoaXMgYnVpbHRpbi4KKworICAgIElmIGFueSBvZiB0aGVzZSBpdGVtcyBkaWZmZXIgaW4gKmFueSB3YXkqLAorICAgIGFkanVzdCB5b3VyIEFyZ3VtZW50IENsaW5pYyBmdW5jdGlvbiBzcGVjaWZpY2F0aW9uIGFuZCByZXJ1bgorICAgIGBgVG9vbHMvY2xpbmljL2NsaW5pYy5weWBgIHVudGlsIHRoZXkgKmFyZSogdGhlIHNhbWUuCisKKworMTQuIE5vdGljZSB0aGF0IHRoZSBsYXN0IGxpbmUgb2YgaXRzIG91dHB1dCBpcyB0aGUgZGVjbGFyYXRpb24KKyAgICBvZiB5b3VyICJpbXBsIiBmdW5jdGlvbi4gIFRoaXMgaXMgd2hlcmUgdGhlIGJ1aWx0aW4ncyBpbXBsZW1lbnRhdGlvbiBnb2VzLgorICAgIERlbGV0ZSB0aGUgZXhpc3RpbmcgcHJvdG90eXBlIG9mIHRoZSBmdW5jdGlvbiB5b3UncmUgbW9kaWZ5aW5nLCBidXQgbGVhdmUKKyAgICB0aGUgb3BlbmluZyBjdXJseSBicmFjZS4gIE5vdyBkZWxldGUgaXRzIGFyZ3VtZW50IHBhcnNpbmcgY29kZSBhbmQgdGhlCisgICAgZGVjbGFyYXRpb25zIG9mIGFsbCB0aGUgdmFyaWFibGVzIGl0IGR1bXBzIHRoZSBhcmd1bWVudHMgaW50by4KKyAgICBOb3RpY2UgaG93IHRoZSBQeXRob24gYXJndW1lbnRzIGFyZSBub3cgYXJndW1lbnRzIHRvIHRoaXMgaW1wbCBmdW5jdGlvbjsKKyAgICBpZiB0aGUgaW1wbGVtZW50YXRpb24gdXNlZCBkaWZmZXJlbnQgbmFtZXMgZm9yIHRoZXNlIHZhcmlhYmxlcywgZml4IGl0LgorCisgICAgTGV0J3MgcmVpdGVyYXRlLCBqdXN0IGJlY2F1c2UgaXQncyBraW5kIG9mIHdlaXJkLiAgWW91ciBjb2RlIHNob3VsZCBub3cKKyAgICBsb29rIGxpa2UgdGhpczo6CisKKyAgICAgICAgc3RhdGljIHJldHVybl90eXBlCisgICAgICAgIHlvdXJfZnVuY3Rpb25faW1wbCguLi4pCisgICAgICAgIC8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IGNoZWNrc3VtPS4uLl0qLworICAgICAgICB7CisgICAgICAgIC4uLgorCisgICAgQXJndW1lbnQgQ2xpbmljIGdlbmVyYXRlZCB0aGUgY2hlY2tzdW0gbGluZSBhbmQgdGhlIGZ1bmN0aW9uIHByb3RvdHlwZSBqdXN0CisgICAgYWJvdmUgaXQuICBZb3Ugc2hvdWxkIHdyaXRlIHRoZSBvcGVuaW5nIChhbmQgY2xvc2luZykgY3VybHkgYnJhY2VzIGZvciB0aGUKKyAgICBmdW5jdGlvbiwgYW5kIHRoZSBpbXBsZW1lbnRhdGlvbiBpbnNpZGUuCisKKyAgICBTYW1wbGU6OgorCisgICAgICAgIC8qW2NsaW5pYyBpbnB1dF0KKyAgICAgICAgbW9kdWxlIF9waWNrbGUKKyAgICAgICAgY2xhc3MgX3BpY2tsZS5QaWNrbGVyICJQaWNrbGVyT2JqZWN0ICoiICImUGlja2xlcl9UeXBlIgorICAgICAgICBbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisgICAgICAgIC8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IGNoZWNrc3VtPWRhMzlhM2VlNWU2YjRiMGQzMjU1YmZlZjk1NjAxODkwYWZkODA3MDldKi8KKworICAgICAgICAvKltjbGluaWMgaW5wdXRdCisgICAgICAgIF9waWNrbGUuUGlja2xlci5kdW1wCisKKyAgICAgICAgICAgIG9iajogJ08nCisgICAgICAgICAgICAgICAgVGhlIG9iamVjdCB0byBiZSBwaWNrbGVkLgorICAgICAgICAgICAgLworCisgICAgICAgIFdyaXRlIGEgcGlja2xlZCByZXByZXNlbnRhdGlvbiBvZiBvYmogdG8gdGhlIG9wZW4gZmlsZS4KKyAgICAgICAgW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCisgICAgICAgIFB5RG9jX1NUUlZBUihfX3BpY2tsZV9QaWNrbGVyX2R1bXBfX2RvY19fLAorICAgICAgICAiV3JpdGUgYSBwaWNrbGVkIHJlcHJlc2VudGF0aW9uIG9mIG9iaiB0byB0aGUgb3BlbiBmaWxlLlxuIgorICAgICAgICAiXG4iCisgICAgICAgIC4uLgorICAgICAgICBzdGF0aWMgUHlPYmplY3QgKgorICAgICAgICBfcGlja2xlX1BpY2tsZXJfZHVtcF9pbXBsKFBpY2tsZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpvYmopCisgICAgICAgIC8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IGNoZWNrc3VtPTNiZDMwNzQ1YmYyMDZhNDhmOGI1NzZhMWRhM2Q5MGY1NWEwYTQxODddKi8KKyAgICAgICAgeworICAgICAgICAgICAgLyogQ2hlY2sgd2hldGhlciB0aGUgUGlja2xlciB3YXMgaW5pdGlhbGl6ZWQgY29ycmVjdGx5IChpc3N1ZTM2NjQpLgorICAgICAgICAgICAgICAgRGV2ZWxvcGVycyBvZnRlbiBmb3JnZXQgdG8gY2FsbCBfX2luaXRfXygpIGluIHRoZWlyIHN1YmNsYXNzZXMsIHdoaWNoCisgICAgICAgICAgICAgICB3b3VsZCB0cmlnZ2VyIGEgc2VnZmF1bHQgd2l0aG91dCB0aGlzIGNoZWNrLiAqLworICAgICAgICAgICAgaWYgKHNlbGYtPndyaXRlID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUGlja2xpbmdFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBpY2tsZXIuX19pbml0X18oKSB3YXMgbm90IGNhbGxlZCBieSAlcy5fX2luaXRfXygpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRShzZWxmKS0+dHBfbmFtZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChfUGlja2xlcl9DbGVhckJ1ZmZlcihzZWxmKSA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAgICAgICAgIC4uLgorCisxNS4gUmVtZW1iZXIgdGhlIG1hY3JvIHdpdGggdGhlIDpjOnR5cGU6YFB5TWV0aG9kRGVmYCBzdHJ1Y3R1cmUgZm9yIHRoaXMKKyAgICBmdW5jdGlvbj8gIEZpbmQgdGhlIGV4aXN0aW5nIDpjOnR5cGU6YFB5TWV0aG9kRGVmYCBzdHJ1Y3R1cmUgZm9yIHRoaXMKKyAgICBmdW5jdGlvbiBhbmQgcmVwbGFjZSBpdCB3aXRoIGEgcmVmZXJlbmNlIHRvIHRoZSBtYWNyby4gIChJZiB0aGUgYnVpbHRpbgorICAgIGlzIGF0IG1vZHVsZSBzY29wZSwgdGhpcyB3aWxsIHByb2JhYmx5IGJlIHZlcnkgbmVhciB0aGUgZW5kIG9mIHRoZSBmaWxlOworICAgIGlmIHRoZSBidWlsdGluIGlzIGEgY2xhc3MgbWV0aG9kLCB0aGlzIHdpbGwgcHJvYmFibHkgYmUgYmVsb3cgYnV0IHJlbGF0aXZlbHkKKyAgICBuZWFyIHRvIHRoZSBpbXBsZW1lbnRhdGlvbi4pCisKKyAgICBOb3RlIHRoYXQgdGhlIGJvZHkgb2YgdGhlIG1hY3JvIGNvbnRhaW5zIGEgdHJhaWxpbmcgY29tbWEuICBTbyB3aGVuIHlvdQorICAgIHJlcGxhY2UgdGhlIGV4aXN0aW5nIHN0YXRpYyA6Yzp0eXBlOmBQeU1ldGhvZERlZmAgc3RydWN0dXJlIHdpdGggdGhlIG1hY3JvLAorICAgICpkb24ndCogYWRkIGEgY29tbWEgdG8gdGhlIGVuZC4KKworICAgIFNhbXBsZTo6CisKKyAgICAgICAgc3RhdGljIHN0cnVjdCBQeU1ldGhvZERlZiBQaWNrbGVyX21ldGhvZHNbXSA9IHsKKyAgICAgICAgICAgIF9fUElDS0xFX1BJQ0tMRVJfRFVNUF9NRVRIT0RERUYKKyAgICAgICAgICAgIF9fUElDS0xFX1BJQ0tMRVJfQ0xFQVJfTUVNT19NRVRIT0RERUYKKyAgICAgICAgICAgIHtOVUxMLCBOVUxMfSAgICAgICAgICAgICAgICAvKiBzZW50aW5lbCAqLworICAgICAgICB9OworCisKKzE2LiBDb21waWxlLCB0aGVuIHJ1biB0aGUgcmVsZXZhbnQgcG9ydGlvbnMgb2YgdGhlIHJlZ3Jlc3Npb24tdGVzdCBzdWl0ZS4KKyAgICBUaGlzIGNoYW5nZSBzaG91bGQgbm90IGludHJvZHVjZSBhbnkgbmV3IGNvbXBpbGUtdGltZSB3YXJuaW5ncyBvciBlcnJvcnMsCisgICAgYW5kIHRoZXJlIHNob3VsZCBiZSBubyBleHRlcm5hbGx5LXZpc2libGUgY2hhbmdlIHRvIFB5dGhvbidzIGJlaGF2aW9yLgorCisgICAgV2VsbCwgZXhjZXB0IGZvciBvbmUgZGlmZmVyZW5jZTogYGBpbnNwZWN0LnNpZ25hdHVyZSgpYGAgcnVuIG9uIHlvdXIgZnVuY3Rpb24KKyAgICBzaG91bGQgbm93IHByb3ZpZGUgYSB2YWxpZCBzaWduYXR1cmUhCisKKyAgICBDb25ncmF0dWxhdGlvbnMsIHlvdSd2ZSBwb3J0ZWQgeW91ciBmaXJzdCBmdW5jdGlvbiB0byB3b3JrIHdpdGggQXJndW1lbnQgQ2xpbmljIQorCitBZHZhbmNlZCBUb3BpY3MKKz09PT09PT09PT09PT09PQorCitOb3cgdGhhdCB5b3UndmUgaGFkIHNvbWUgZXhwZXJpZW5jZSB3b3JraW5nIHdpdGggQXJndW1lbnQgQ2xpbmljLCBpdCdzIHRpbWUKK2ZvciBzb21lIGFkdmFuY2VkIHRvcGljcy4KKworCitTeW1ib2xpYyBkZWZhdWx0IHZhbHVlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGRlZmF1bHQgdmFsdWUgeW91IHByb3ZpZGUgZm9yIGEgcGFyYW1ldGVyIGNhbid0IGJlIGFueSBhcmJpdHJhcnkKK2V4cHJlc3Npb24uICBDdXJyZW50bHkgdGhlIGZvbGxvd2luZyBhcmUgZXhwbGljaXRseSBzdXBwb3J0ZWQ6CisKKyogTnVtZXJpYyBjb25zdGFudHMgKGludGVnZXIgYW5kIGZsb2F0KQorKiBTdHJpbmcgY29uc3RhbnRzCisqIGBgVHJ1ZWBgLCBgYEZhbHNlYGAsIGFuZCBgYE5vbmVgYAorKiBTaW1wbGUgc3ltYm9saWMgY29uc3RhbnRzIGxpa2UgYGBzeXMubWF4c2l6ZWBgLCB3aGljaCBtdXN0CisgIHN0YXJ0IHdpdGggdGhlIG5hbWUgb2YgdGhlIG1vZHVsZQorCitJbiBjYXNlIHlvdSdyZSBjdXJpb3VzLCB0aGlzIGlzIGltcGxlbWVudGVkIGluICBgYGZyb21fYnVpbHRpbigpYGAKK2luIGBgTGliL2luc3BlY3QucHlgYC4KKworKEluIHRoZSBmdXR1cmUsIHRoaXMgbWF5IG5lZWQgdG8gZ2V0IGV2ZW4gbW9yZSBlbGFib3JhdGUsCit0byBhbGxvdyBmdWxsIGV4cHJlc3Npb25zIGxpa2UgYGBDT05TVEFOVCAtIDFgYC4pCisKKworUmVuYW1pbmcgdGhlIEMgZnVuY3Rpb25zIGFuZCB2YXJpYWJsZXMgZ2VuZXJhdGVkIGJ5IEFyZ3VtZW50IENsaW5pYworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBcmd1bWVudCBDbGluaWMgYXV0b21hdGljYWxseSBuYW1lcyB0aGUgZnVuY3Rpb25zIGl0IGdlbmVyYXRlcyBmb3IgeW91LgorT2NjYXNpb25hbGx5IHRoaXMgbWF5IGNhdXNlIGEgcHJvYmxlbSwgaWYgdGhlIGdlbmVyYXRlZCBuYW1lIGNvbGxpZGVzIHdpdGgKK3RoZSBuYW1lIG9mIGFuIGV4aXN0aW5nIEMgZnVuY3Rpb24uICBUaGVyZSdzIGFuIGVhc3kgc29sdXRpb246IG92ZXJyaWRlIHRoZSBuYW1lcwordXNlZCBmb3IgdGhlIEMgZnVuY3Rpb25zLiAgSnVzdCBhZGQgdGhlIGtleXdvcmQgYGAiYXMiYGAKK3RvIHlvdXIgZnVuY3Rpb24gZGVjbGFyYXRpb24gbGluZSwgZm9sbG93ZWQgYnkgdGhlIGZ1bmN0aW9uIG5hbWUgeW91IHdpc2ggdG8gdXNlLgorQXJndW1lbnQgQ2xpbmljIHdpbGwgdXNlIHRoYXQgZnVuY3Rpb24gbmFtZSBmb3IgdGhlIGJhc2UgKGdlbmVyYXRlZCkgZnVuY3Rpb24sCit0aGVuIGFkZCBgYCJfaW1wbCJgYCB0byB0aGUgZW5kIGFuZCB1c2UgdGhhdCBmb3IgdGhlIG5hbWUgb2YgdGhlIGltcGwgZnVuY3Rpb24uCisKK0ZvciBleGFtcGxlLCBpZiB3ZSB3YW50ZWQgdG8gcmVuYW1lIHRoZSBDIGZ1bmN0aW9uIG5hbWVzIGdlbmVyYXRlZCBmb3IKK2BgcGlja2xlLlBpY2tsZXIuZHVtcGBgLCBpdCdkIGxvb2sgbGlrZSB0aGlzOjoKKworICAgIC8qW2NsaW5pYyBpbnB1dF0KKyAgICBwaWNrbGUuUGlja2xlci5kdW1wIGFzIHBpY2tsZXJfZHVtcGVyCisKKyAgICAuLi4KKworVGhlIGJhc2UgZnVuY3Rpb24gd291bGQgbm93IGJlIG5hbWVkIGBgcGlja2xlcl9kdW1wZXIoKWBgLAorYW5kIHRoZSBpbXBsIGZ1bmN0aW9uIHdvdWxkIG5vdyBiZSBuYW1lZCBgYHBpY2tsZXJfZHVtcGVyX2ltcGwoKWBgLgorCisKK1NpbWlsYXJseSwgeW91IG1heSBoYXZlIGEgcHJvYmxlbSB3aGVyZSB5b3Ugd2FudCB0byBnaXZlIGEgcGFyYW1ldGVyCithIHNwZWNpZmljIFB5dGhvbiBuYW1lLCBidXQgdGhhdCBuYW1lIG1heSBiZSBpbmNvbnZlbmllbnQgaW4gQy4gIEFyZ3VtZW50CitDbGluaWMgYWxsb3dzIHlvdSB0byBnaXZlIGEgcGFyYW1ldGVyIGRpZmZlcmVudCBuYW1lcyBpbiBQeXRob24gYW5kIGluIEMsCit1c2luZyB0aGUgc2FtZSBgYCJhcyJgYCBzeW50YXg6OgorCisgICAgLypbY2xpbmljIGlucHV0XQorICAgIHBpY2tsZS5QaWNrbGVyLmR1bXAKKworICAgICAgICBvYmo6IG9iamVjdAorICAgICAgICBmaWxlIGFzIGZpbGVfb2JqOiBvYmplY3QKKyAgICAgICAgcHJvdG9jb2w6IG9iamVjdCA9IE5VTEwKKyAgICAgICAgKgorICAgICAgICBmaXhfaW1wb3J0czogYm9vbCA9IFRydWUKKworSGVyZSwgdGhlIG5hbWUgdXNlZCBpbiBQeXRob24gKGluIHRoZSBzaWduYXR1cmUgYW5kIHRoZSBgYGtleXdvcmRzYGAKK2FycmF5KSB3b3VsZCBiZSBgYGZpbGVgYCwgYnV0IHRoZSBDIHZhcmlhYmxlIHdvdWxkIGJlIG5hbWVkIGBgZmlsZV9vYmpgYC4KKworWW91IGNhbiB1c2UgdGhpcyB0byByZW5hbWUgdGhlIGBgc2VsZmBgIHBhcmFtZXRlciB0b28hCisKKworQ29udmVydGluZyBmdW5jdGlvbnMgdXNpbmcgUHlBcmdfVW5wYWNrVHVwbGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RvIGNvbnZlcnQgYSBmdW5jdGlvbiBwYXJzaW5nIGl0cyBhcmd1bWVudHMgd2l0aCA6YzpmdW5jOmBQeUFyZ19VbnBhY2tUdXBsZWAsCitzaW1wbHkgd3JpdGUgb3V0IGFsbCB0aGUgYXJndW1lbnRzLCBzcGVjaWZ5aW5nIGVhY2ggYXMgYW4gYGBvYmplY3RgYC4gIFlvdQorbWF5IHNwZWNpZnkgdGhlIGBgdHlwZWBgIGFyZ3VtZW50IHRvIGNhc3QgdGhlIHR5cGUgYXMgYXBwcm9wcmlhdGUuICBBbGwKK2FyZ3VtZW50cyBzaG91bGQgYmUgbWFya2VkIHBvc2l0aW9uYWwtb25seSAoYWRkIGEgYGAvYGAgb24gYSBsaW5lIGJ5IGl0c2VsZgorYWZ0ZXIgdGhlIGxhc3QgYXJndW1lbnQpLgorCitDdXJyZW50bHkgdGhlIGdlbmVyYXRlZCBjb2RlIHdpbGwgdXNlIDpjOmZ1bmM6YFB5QXJnX1BhcnNlVHVwbGVgLCBidXQgdGhpcword2lsbCBjaGFuZ2Ugc29vbi4KKworT3B0aW9uYWwgR3JvdXBzCistLS0tLS0tLS0tLS0tLS0KKworU29tZSBsZWdhY3kgZnVuY3Rpb25zIGhhdmUgYSB0cmlja3kgYXBwcm9hY2ggdG8gcGFyc2luZyB0aGVpciBhcmd1bWVudHM6Cit0aGV5IGNvdW50IHRoZSBudW1iZXIgb2YgcG9zaXRpb25hbCBhcmd1bWVudHMsIHRoZW4gdXNlIGEgYGBzd2l0Y2hgYCBzdGF0ZW1lbnQKK3RvIGNhbGwgb25lIG9mIHNldmVyYWwgZGlmZmVyZW50IDpjOmZ1bmM6YFB5QXJnX1BhcnNlVHVwbGVgIGNhbGxzIGRlcGVuZGluZyBvbgoraG93IG1hbnkgcG9zaXRpb25hbCBhcmd1bWVudHMgdGhlcmUgYXJlLiAgKFRoZXNlIGZ1bmN0aW9ucyBjYW5ub3QgYWNjZXB0CitrZXl3b3JkLW9ubHkgYXJndW1lbnRzLikgIFRoaXMgYXBwcm9hY2ggd2FzIHVzZWQgdG8gc2ltdWxhdGUgb3B0aW9uYWwKK2FyZ3VtZW50cyBiYWNrIGJlZm9yZSA6YzpmdW5jOmBQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHNgIHdhcyBjcmVhdGVkLgorCitXaGlsZSBmdW5jdGlvbnMgdXNpbmcgdGhpcyBhcHByb2FjaCBjYW4gb2Z0ZW4gYmUgY29udmVydGVkIHRvCit1c2UgOmM6ZnVuYzpgUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzYCwgb3B0aW9uYWwgYXJndW1lbnRzLCBhbmQgZGVmYXVsdCB2YWx1ZXMsCitpdCdzIG5vdCBhbHdheXMgcG9zc2libGUuICBTb21lIG9mIHRoZXNlIGxlZ2FjeSBmdW5jdGlvbnMgaGF2ZQorYmVoYXZpb3JzIDpjOmZ1bmM6YFB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3Jkc2AgZG9lc24ndCBkaXJlY3RseSBzdXBwb3J0LgorVGhlIG1vc3Qgb2J2aW91cyBleGFtcGxlIGlzIHRoZSBidWlsdGluIGZ1bmN0aW9uIGBgcmFuZ2UoKWBgLCB3aGljaCBoYXMKK2FuIG9wdGlvbmFsIGFyZ3VtZW50IG9uIHRoZSAqbGVmdCogc2lkZSBvZiBpdHMgcmVxdWlyZWQgYXJndW1lbnQhCitBbm90aGVyIGV4YW1wbGUgaXMgYGBjdXJzZXMud2luZG93LmFkZGNoKClgYCwgd2hpY2ggaGFzIGEgZ3JvdXAgb2YgdHdvCithcmd1bWVudHMgdGhhdCBtdXN0IGFsd2F5cyBiZSBzcGVjaWZpZWQgdG9nZXRoZXIuICAoVGhlIGFyZ3VtZW50cyBhcmUKK2NhbGxlZCBgYHhgYCBhbmQgYGB5YGA7IGlmIHlvdSBjYWxsIHRoZSBmdW5jdGlvbiBwYXNzaW5nIGluIGBgeGBgLAoreW91IG11c3QgYWxzbyBwYXNzIGluIGBgeWBgLS1hbmQgaWYgeW91IGRvbid0IHBhc3MgaW4gYGB4YGAgeW91IG1heSBub3QKK3Bhc3MgaW4gYGB5YGAgZWl0aGVyLikKKworSW4gYW55IGNhc2UsIHRoZSBnb2FsIG9mIEFyZ3VtZW50IENsaW5pYyBpcyB0byBzdXBwb3J0IGFyZ3VtZW50IHBhcnNpbmcKK2ZvciBhbGwgZXhpc3RpbmcgQ1B5dGhvbiBidWlsdGlucyB3aXRob3V0IGNoYW5naW5nIHRoZWlyIHNlbWFudGljcy4KK1RoZXJlZm9yZSBBcmd1bWVudCBDbGluaWMgc3VwcG9ydHMKK3RoaXMgYWx0ZXJuYXRlIGFwcHJvYWNoIHRvIHBhcnNpbmcsIHVzaW5nIHdoYXQgYXJlIGNhbGxlZCAqb3B0aW9uYWwgZ3JvdXBzKi4KK09wdGlvbmFsIGdyb3VwcyBhcmUgZ3JvdXBzIG9mIGFyZ3VtZW50cyB0aGF0IG11c3QgYWxsIGJlIHBhc3NlZCBpbiB0b2dldGhlci4KK1RoZXkgY2FuIGJlIHRvIHRoZSBsZWZ0IG9yIHRoZSByaWdodCBvZiB0aGUgcmVxdWlyZWQgYXJndW1lbnRzLiAgVGhleQorY2FuICpvbmx5KiBiZSB1c2VkIHdpdGggcG9zaXRpb25hbC1vbmx5IHBhcmFtZXRlcnMuCisKKy4uIG5vdGU6OiBPcHRpb25hbCBncm91cHMgYXJlICpvbmx5KiBpbnRlbmRlZCBmb3IgdXNlIHdoZW4gY29udmVydGluZworICAgICAgICAgIGZ1bmN0aW9ucyB0aGF0IG1ha2UgbXVsdGlwbGUgY2FsbHMgdG8gOmM6ZnVuYzpgUHlBcmdfUGFyc2VUdXBsZWAhCisgICAgICAgICAgRnVuY3Rpb25zIHRoYXQgdXNlICphbnkqIG90aGVyIGFwcHJvYWNoIGZvciBwYXJzaW5nIGFyZ3VtZW50cworICAgICAgICAgIHNob3VsZCAqYWxtb3N0IG5ldmVyKiBiZSBjb252ZXJ0ZWQgdG8gQXJndW1lbnQgQ2xpbmljIHVzaW5nCisgICAgICAgICAgb3B0aW9uYWwgZ3JvdXBzLiAgRnVuY3Rpb25zIHVzaW5nIG9wdGlvbmFsIGdyb3VwcyBjdXJyZW50bHkKKyAgICAgICAgICBjYW5ub3QgaGF2ZSBhY2N1cmF0ZSBzaWdhbnR1cmVzIGluIFB5dGhvbiwgYmVjYXVzZSBQeXRob24ganVzdAorICAgICAgICAgIGRvZXNuJ3QgdW5kZXJzdGFuZCB0aGUgY29uY2VwdC4gIFBsZWFzZSBhdm9pZCB1c2luZyBvcHRpb25hbAorICAgICAgICAgIGdyb3VwcyB3aGVyZXZlciBwb3NzaWJsZS4KKworVG8gc3BlY2lmeSBhbiBvcHRpb25hbCBncm91cCwgYWRkIGEgYGBbYGAgb24gYSBsaW5lIGJ5IGl0c2VsZiBiZWZvcmUKK3RoZSBwYXJhbWV0ZXJzIHlvdSB3aXNoIHRvIGdyb3VwIHRvZ2V0aGVyLCBhbmQgYSBgYF1gYCBvbiBhIGxpbmUgYnkgaXRzZWxmCithZnRlciB0aGVzZSBwYXJhbWV0ZXJzLiAgQXMgYW4gZXhhbXBsZSwgaGVyZSdzIGhvdyBgYGN1cnNlcy53aW5kb3cuYWRkY2hgYAordXNlcyBvcHRpb25hbCBncm91cHMgdG8gbWFrZSB0aGUgZmlyc3QgdHdvIHBhcmFtZXRlcnMgYW5kIHRoZSBsYXN0CitwYXJhbWV0ZXIgb3B0aW9uYWw6OgorCisgICAgLypbY2xpbmljIGlucHV0XQorCisgICAgY3Vyc2VzLndpbmRvdy5hZGRjaAorCisgICAgICAgIFsKKyAgICAgICAgeDogaW50CisgICAgICAgICAgWC1jb29yZGluYXRlLgorICAgICAgICB5OiBpbnQKKyAgICAgICAgICBZLWNvb3JkaW5hdGUuCisgICAgICAgIF0KKworICAgICAgICBjaDogb2JqZWN0CisgICAgICAgICAgQ2hhcmFjdGVyIHRvIGFkZC4KKworICAgICAgICBbCisgICAgICAgIGF0dHI6IGxvbmcKKyAgICAgICAgICBBdHRyaWJ1dGVzIGZvciB0aGUgY2hhcmFjdGVyLgorICAgICAgICBdCisgICAgICAgIC8KKworICAgIC4uLgorCisKK05vdGVzOgorCisqIEZvciBldmVyeSBvcHRpb25hbCBncm91cCwgb25lIGFkZGl0aW9uYWwgcGFyYW1ldGVyIHdpbGwgYmUgcGFzc2VkIGludG8gdGhlCisgIGltcGwgZnVuY3Rpb24gcmVwcmVzZW50aW5nIHRoZSBncm91cC4gIFRoZSBwYXJhbWV0ZXIgd2lsbCBiZSBhbiBpbnQgbmFtZWQKKyAgYGBncm91cF97ZGlyZWN0aW9ufV97bnVtYmVyfWBgLAorICB3aGVyZSBgYHtkaXJlY3Rpb259YGAgaXMgZWl0aGVyIGBgcmlnaHRgYCBvciBgYGxlZnRgYCBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgZ3JvdXAKKyAgaXMgYmVmb3JlIG9yIGFmdGVyIHRoZSByZXF1aXJlZCBwYXJhbWV0ZXJzLCBhbmQgYGB7bnVtYmVyfWBgIGlzIGEgbW9ub3RvbmljYWxseQorICBpbmNyZWFzaW5nIG51bWJlciAoc3RhcnRpbmcgYXQgMSkgaW5kaWNhdGluZyBob3cgZmFyIGF3YXkgdGhlIGdyb3VwIGlzIGZyb20KKyAgdGhlIHJlcXVpcmVkIHBhcmFtZXRlcnMuICBXaGVuIHRoZSBpbXBsIGlzIGNhbGxlZCwgdGhpcyBwYXJhbWV0ZXIgd2lsbCBiZSBzZXQKKyAgdG8gemVybyBpZiB0aGlzIGdyb3VwIHdhcyB1bnVzZWQsIGFuZCBzZXQgdG8gbm9uLXplcm8gaWYgdGhpcyBncm91cCB3YXMgdXNlZC4KKyAgKEJ5IHVzZWQgb3IgdW51c2VkLCBJIG1lYW4gd2hldGhlciBvciBub3QgdGhlIHBhcmFtZXRlcnMgcmVjZWl2ZWQgYXJndW1lbnRzCisgIGluIHRoaXMgaW52b2NhdGlvbi4pCisKKyogSWYgdGhlcmUgYXJlIG5vIHJlcXVpcmVkIGFyZ3VtZW50cywgdGhlIG9wdGlvbmFsIGdyb3VwcyB3aWxsIGJlaGF2ZQorICBhcyBpZiB0aGV5J3JlIHRvIHRoZSByaWdodCBvZiB0aGUgcmVxdWlyZWQgYXJndW1lbnRzLgorCisqIEluIHRoZSBjYXNlIG9mIGFtYmlndWl0eSwgdGhlIGFyZ3VtZW50IHBhcnNpbmcgY29kZQorICBmYXZvcnMgcGFyYW1ldGVycyBvbiB0aGUgbGVmdCAoYmVmb3JlIHRoZSByZXF1aXJlZCBwYXJhbWV0ZXJzKS4KKworKiBPcHRpb25hbCBncm91cHMgY2FuIG9ubHkgY29udGFpbiBwb3NpdGlvbmFsLW9ubHkgcGFyYW1ldGVycy4KKworKiBPcHRpb25hbCBncm91cHMgYXJlICpvbmx5KiBpbnRlbmRlZCBmb3IgbGVnYWN5IGNvZGUuICBQbGVhc2UgZG8gbm90CisgIHVzZSBvcHRpb25hbCBncm91cHMgZm9yIG5ldyBjb2RlLgorCisKK1VzaW5nIHJlYWwgQXJndW1lbnQgQ2xpbmljIGNvbnZlcnRlcnMsIGluc3RlYWQgb2YgImxlZ2FjeSBjb252ZXJ0ZXJzIgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RvIHNhdmUgdGltZSwgYW5kIHRvIG1pbmltaXplIGhvdyBtdWNoIHlvdSBuZWVkIHRvIGxlYXJuCit0byBhY2hpZXZlIHlvdXIgZmlyc3QgcG9ydCB0byBBcmd1bWVudCBDbGluaWMsIHRoZSB3YWxrdGhyb3VnaCBhYm92ZSB0ZWxscworeW91IHRvIHVzZSAibGVnYWN5IGNvbnZlcnRlcnMiLiAgIkxlZ2FjeSBjb252ZXJ0ZXJzIiBhcmUgYSBjb252ZW5pZW5jZSwKK2Rlc2lnbmVkIGV4cGxpY2l0bHkgdG8gbWFrZSBwb3J0aW5nIGV4aXN0aW5nIGNvZGUgdG8gQXJndW1lbnQgQ2xpbmljCitlYXNpZXIuICBBbmQgdG8gYmUgY2xlYXIsIHRoZWlyIHVzZSBpcyBhY2NlcHRhYmxlIHdoZW4gcG9ydGluZyBjb2RlIGZvcgorUHl0aG9uIDMuNC4KKworSG93ZXZlciwgaW4gdGhlIGxvbmcgdGVybSB3ZSBwcm9iYWJseSB3YW50IGFsbCBvdXIgYmxvY2tzIHRvCit1c2UgQXJndW1lbnQgQ2xpbmljJ3MgcmVhbCBzeW50YXggZm9yIGNvbnZlcnRlcnMuICBXaHk/ICBBIGNvdXBsZQorcmVhc29uczoKKworKiBUaGUgcHJvcGVyIGNvbnZlcnRlcnMgYXJlIGZhciBlYXNpZXIgdG8gcmVhZCBhbmQgY2xlYXJlciBpbiB0aGVpciBpbnRlbnQuCisqIFRoZXJlIGFyZSBzb21lIGZvcm1hdCB1bml0cyB0aGF0IGFyZSB1bnN1cHBvcnRlZCBhcyAibGVnYWN5IGNvbnZlcnRlcnMiLAorICBiZWNhdXNlIHRoZXkgcmVxdWlyZSBhcmd1bWVudHMsIGFuZCB0aGUgbGVnYWN5IGNvbnZlcnRlciBzeW50YXggZG9lc24ndAorICBzdXBwb3J0IHNwZWNpZnlpbmcgYXJndW1lbnRzLgorKiBJbiB0aGUgZnV0dXJlIHdlIG1heSBoYXZlIGEgbmV3IGFyZ3VtZW50IHBhcnNpbmcgbGlicmFyeSB0aGF0IGlzbid0CisgIHJlc3RyaWN0ZWQgdG8gd2hhdCA6YzpmdW5jOmBQeUFyZ19QYXJzZVR1cGxlYCBzdXBwb3J0czsgdGhpcyBmbGV4aWJpbGl0eQorICB3b24ndCBiZSBhdmFpbGFibGUgdG8gcGFyYW1ldGVycyB1c2luZyBsZWdhY3kgY29udmVydGVycy4KKworVGhlcmVmb3JlLCBpZiB5b3UgZG9uJ3QgbWluZCBhIGxpdHRsZSBleHRyYSBlZmZvcnQsIHBsZWFzZSB1c2UgdGhlIG5vcm1hbAorY29udmVydGVycyBpbnN0ZWFkIG9mIGxlZ2FjeSBjb252ZXJ0ZXJzLgorCitJbiBhIG51dHNoZWxsLCB0aGUgc3ludGF4IGZvciBBcmd1bWVudCBDbGluaWMgKG5vbi1sZWdhY3kpIGNvbnZlcnRlcnMKK2xvb2tzIGxpa2UgYSBQeXRob24gZnVuY3Rpb24gY2FsbC4gIEhvd2V2ZXIsIGlmIHRoZXJlIGFyZSBubyBleHBsaWNpdAorYXJndW1lbnRzIHRvIHRoZSBmdW5jdGlvbiAoYWxsIGZ1bmN0aW9ucyB0YWtlIHRoZWlyIGRlZmF1bHQgdmFsdWVzKSwKK3lvdSBtYXkgb21pdCB0aGUgcGFyZW50aGVzZXMuICBUaHVzIGBgYm9vbGBgIGFuZCBgYGJvb2woKWBgIGFyZSBleGFjdGx5Cit0aGUgc2FtZSBjb252ZXJ0ZXJzLgorCitBbGwgYXJndW1lbnRzIHRvIEFyZ3VtZW50IENsaW5pYyBjb252ZXJ0ZXJzIGFyZSBrZXl3b3JkLW9ubHkuCitBbGwgQXJndW1lbnQgQ2xpbmljIGNvbnZlcnRlcnMgYWNjZXB0IHRoZSBmb2xsb3dpbmcgYXJndW1lbnRzOgorCisgIGBgY19kZWZhdWx0YGAKKyAgICBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhpcyBwYXJhbWV0ZXIgd2hlbiBkZWZpbmVkIGluIEMuCisgICAgU3BlY2lmaWNhbGx5LCB0aGlzIHdpbGwgYmUgdGhlIGluaXRpYWxpemVyIGZvciB0aGUgdmFyaWFibGUgZGVjbGFyZWQKKyAgICBpbiB0aGUgInBhcnNlIGZ1bmN0aW9uIi4gIFNlZSA6cmVmOmB0aGUgc2VjdGlvbiBvbiBkZWZhdWx0IHZhbHVlcyA8ZGVmYXVsdF92YWx1ZXM+YAorICAgIGZvciBob3cgdG8gdXNlIHRoaXMuCisgICAgU3BlY2lmaWVkIGFzIGEgc3RyaW5nLgorCisgIGBgYW5ub3RhdGlvbmBgCisgICAgVGhlIGFubm90YXRpb24gdmFsdWUgZm9yIHRoaXMgcGFyYW1ldGVyLiAgTm90IGN1cnJlbnRseSBzdXBwb3J0ZWQsCisgICAgYmVjYXVzZSBQRVAgOCBtYW5kYXRlcyB0aGF0IHRoZSBQeXRob24gbGlicmFyeSBtYXkgbm90IHVzZQorICAgIGFubm90YXRpb25zLgorCitJbiBhZGRpdGlvbiwgc29tZSBjb252ZXJ0ZXJzIGFjY2VwdCBhZGRpdGlvbmFsIGFyZ3VtZW50cy4gIEhlcmUgaXMgYSBsaXN0CitvZiB0aGVzZSBhcmd1bWVudHMsIGFsb25nIHdpdGggdGhlaXIgbWVhbmluZ3M6CisKKyAgYGBiaXR3aXNlYGAKKyAgICBPbmx5IHN1cHBvcnRlZCBmb3IgdW5zaWduZWQgaW50ZWdlcnMuICBUaGUgbmF0aXZlIGludGVnZXIgdmFsdWUgb2YgdGhpcworICAgIFB5dGhvbiBhcmd1bWVudCB3aWxsIGJlIHdyaXR0ZW4gdG8gdGhlIHBhcmFtZXRlciB3aXRob3V0IGFueSByYW5nZSBjaGVja2luZywKKyAgICBldmVuIGZvciBuZWdhdGl2ZSB2YWx1ZXMuCisKKyAgYGBjb252ZXJ0ZXJgYAorICAgIE9ubHkgc3VwcG9ydGVkIGJ5IHRoZSBgYG9iamVjdGBgIGNvbnZlcnRlci4gIFNwZWNpZmllcyB0aGUgbmFtZSBvZiBhCisgICAgOnJlZjpgQyAiY29udmVydGVyIGZ1bmN0aW9uIiA8b19hbXBlcnNhbmQ+YAorICAgIHRvIHVzZSB0byBjb252ZXJ0IHRoaXMgb2JqZWN0IHRvIGEgbmF0aXZlIHR5cGUuCisKKyAgYGBlbmNvZGluZ2BgCisgICAgT25seSBzdXBwb3J0ZWQgZm9yIHN0cmluZ3MuICBTcGVjaWZpZXMgdGhlIGVuY29kaW5nIHRvIHVzZSB3aGVuIGNvbnZlcnRpbmcKKyAgICB0aGlzIHN0cmluZyBmcm9tIGEgUHl0aG9uIHN0ciAoVW5pY29kZSkgdmFsdWUgaW50byBhIEMgYGBjaGFyICpgYCB2YWx1ZS4KKworICBgYGxlbmd0aGBgCisgICAgT25seSBzdXBwb3J0ZWQgZm9yIHN0cmluZ3MuICBJZiB0cnVlLCByZXF1ZXN0cyB0aGF0IHRoZSBsZW5ndGggb2YgdGhlCisgICAgc3RyaW5nIGJlIHBhc3NlZCBpbiB0byB0aGUgaW1wbCBmdW5jdGlvbiwganVzdCBhZnRlciB0aGUgc3RyaW5nIHBhcmFtZXRlciwKKyAgICBpbiBhIHBhcmFtZXRlciBuYW1lZCBgYDxwYXJhbWV0ZXJfbmFtZT5fbGVuZ3RoYGAuCisKKyAgYGBudWxsYWJsZWBgCisgICAgT25seSBzdXBwb3J0ZWQgZm9yIHN0cmluZ3MuICBJZiB0cnVlLCB0aGlzIHBhcmFtZXRlciBtYXkgYWxzbyBiZSBzZXQgdG8KKyAgICBgYE5vbmVgYCwgaW4gd2hpY2ggY2FzZSB0aGUgQyBwYXJhbWV0ZXIgd2lsbCBiZSBzZXQgdG8gYGBOVUxMYGAuCisKKyAgYGBzdWJjbGFzc19vZmBgCisgICAgT25seSBzdXBwb3J0ZWQgZm9yIHRoZSBgYG9iamVjdGBgIGNvbnZlcnRlci4gIFJlcXVpcmVzIHRoYXQgdGhlIFB5dGhvbgorICAgIHZhbHVlIGJlIGEgc3ViY2xhc3Mgb2YgYSBQeXRob24gdHlwZSwgYXMgZXhwcmVzc2VkIGluIEMuCisKKyAgYGB0eXBlc2BgCisgICAgT25seSBzdXBwb3J0ZWQgZm9yIHRoZSBgYG9iamVjdGBgIChhbmQgYGBzZWxmYGApIGNvbnZlcnRlci4gIFNwZWNpZmllcworICAgIHRoZSBDIHR5cGUgdGhhdCB3aWxsIGJlIHVzZWQgdG8gZGVjbGFyZSB0aGUgdmFyaWFibGUuICBEZWZhdWx0IHZhbHVlIGlzCisgICAgYGAiUHlPYmplY3QgKiJgYC4KKworICBgYHR5cGVzYGAKKyAgICBBIHN0cmluZyBjb250YWluaW5nIGEgbGlzdCBvZiBQeXRob24gdHlwZXMgKGFuZCBwb3NzaWJseSBwc2V1ZG8tdHlwZXMpOworICAgIHRoaXMgcmVzdHJpY3RzIHRoZSBhbGxvd2FibGUgUHl0aG9uIGFyZ3VtZW50IHRvIHZhbHVlcyBvZiB0aGVzZSB0eXBlcy4KKyAgICAoVGhpcyBpcyBub3QgYSBnZW5lcmFsLXB1cnBvc2UgZmFjaWxpdHk7IGFzIGEgcnVsZSBpdCBvbmx5IHN1cHBvcnRzCisgICAgc3BlY2lmaWMgbGlzdHMgb2YgdHlwZXMgYXMgc2hvd24gaW4gdGhlIGxlZ2FjeSBjb252ZXJ0ZXIgdGFibGUuKQorCisgIGBgemVyb2VzYGAKKyAgICBPbmx5IHN1cHBvcnRlZCBmb3Igc3RyaW5ncy4gIElmIHRydWUsIGVtYmVkZGVkIE5VTCBieXRlcyAoYGAnXFwwJ2BgKSBhcmUKKyAgICBwZXJtaXR0ZWQgaW5zaWRlIHRoZSB2YWx1ZS4KKworUGxlYXNlIG5vdGUsIG5vdCBldmVyeSBwb3NzaWJsZSBjb21iaW5hdGlvbiBvZiBhcmd1bWVudHMgd2lsbCB3b3JrLgorT2Z0ZW4gdGhlc2UgYXJndW1lbnRzIGFyZSBpbXBsZW1lbnRlZCBpbnRlcm5hbGx5IGJ5IHNwZWNpZmljIGBgUHlBcmdfUGFyc2VUdXBsZWBgCisqZm9ybWF0IHVuaXRzKiwgd2l0aCBzcGVjaWZpYyBiZWhhdmlvci4gIEZvciBleGFtcGxlLCBjdXJyZW50bHkgeW91IGNhbm5vdAorY2FsbCBgYHN0cmBgIGFuZCBwYXNzIGluIGBgemVyb2VzPVRydWVgYCB3aXRob3V0IGFsc28gc3BlY2lmeWluZyBhbiBgYGVuY29kaW5nYGA7CithbHRob3VnaCBpdCdzIHBlcmZlY3RseSByZWFzb25hYmxlIHRvIHRoaW5rIHRoaXMgd291bGQgd29yaywgdGhlc2Ugc2VtYW50aWNzIGRvbid0CittYXAgdG8gYW55IGV4aXN0aW5nIGZvcm1hdCB1bml0LiAgU28gQXJndW1lbnQgQ2xpbmljIGRvZXNuJ3Qgc3VwcG9ydCBpdC4gIChPciwgYXQKK2xlYXN0LCBub3QgeWV0LikKKworQmVsb3cgaXMgYSB0YWJsZSBzaG93aW5nIHRoZSBtYXBwaW5nIG9mIGxlZ2FjeSBjb252ZXJ0ZXJzIGludG8gcmVhbAorQXJndW1lbnQgQ2xpbmljIGNvbnZlcnRlcnMuICBPbiB0aGUgbGVmdCBpcyB0aGUgbGVnYWN5IGNvbnZlcnRlciwKK29uIHRoZSByaWdodCBpcyB0aGUgdGV4dCB5b3UnZCByZXBsYWNlIGl0IHdpdGguCisKKz09PT09PT09PSAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorYGAnQidgYCAgICAgYGB1bnNpZ25lZF9jaGFyKGJpdHdpc2U9VHJ1ZSlgYAorYGAnYidgYCAgICAgYGB1bnNpZ25lZF9jaGFyYGAKK2BgJ2MnYGAgICAgIGBgY2hhcmBgCitgYCdDJ2BgICAgICBgYGludCh0eXBlcz0nc3RyJylgYAorYGAnZCdgYCAgICAgYGBkb3VibGVgYAorYGAnRCdgYCAgICAgYGBQeV9jb21wbGV4YGAKK2BgJ2VzIydgYCAgIGBgc3RyKGVuY29kaW5nPSduYW1lX29mX2VuY29kaW5nJywgbGVuZ3RoPVRydWUsIHplcm9lcz1UcnVlKWBgCitgYCdlcydgYCAgICBgYHN0cihlbmNvZGluZz0nbmFtZV9vZl9lbmNvZGluZycpYGAKK2BgJ2V0IydgYCAgIGBgc3RyKGVuY29kaW5nPSduYW1lX29mX2VuY29kaW5nJywgdHlwZXM9J2J5dGVzIGJ5dGVhcnJheSBzdHInLCBsZW5ndGg9VHJ1ZSlgYAorYGAnZXQnYGAgICAgYGBzdHIoZW5jb2Rpbmc9J25hbWVfb2ZfZW5jb2RpbmcnLCB0eXBlcz0nYnl0ZXMgYnl0ZWFycmF5IHN0cicpYGAKK2BgJ2YnYGAgICAgIGBgZmxvYXRgYAorYGAnaCdgYCAgICAgYGBzaG9ydGBgCitgYCdIJ2BgICAgICBgYHVuc2lnbmVkX3Nob3J0KGJpdHdpc2U9VHJ1ZSlgYAorYGAnaSdgYCAgICAgYGBpbnRgYAorYGAnSSdgYCAgICAgYGB1bnNpZ25lZF9pbnQoYml0d2lzZT1UcnVlKWBgCitgYCdrJ2BgICAgICBgYHVuc2lnbmVkX2xvbmcoYml0d2lzZT1UcnVlKWBgCitgYCdLJ2BgICAgICBgYHVuc2lnbmVkX1BZX0xPTkdfTE9ORyhiaXR3aXNlPVRydWUpYGAKK2BgJ0wnYGAgICAgIGBgUFlfTE9OR19MT05HYGAKK2BgJ24nYGAgICAgIGBgUHlfc3NpemVfdGBgCitgYCdPISdgYCAgICBgYG9iamVjdChzdWJjbGFzc19vZj0nJlB5U29tZXRoaW5nX1R5cGUnKWBgCitgYCdPJidgYCAgICBgYG9iamVjdChjb252ZXJ0ZXI9J25hbWVfb2ZfY19mdW5jdGlvbicpYGAKK2BgJ08nYGAgICAgIGBgb2JqZWN0YGAKK2BgJ3AnYGAgICAgIGBgYm9vbGBgCitgYCdzIydgYCAgICBgYHN0cihsZW5ndGg9VHJ1ZSlgYAorYGAnUydgYCAgICAgYGBQeUJ5dGVzT2JqZWN0YGAKK2BgJ3MnYGAgICAgIGBgc3RyYGAKK2BgJ3MqJ2BgICAgIGBgUHlfYnVmZmVyKHR5cGVzPSdzdHIgYnl0ZXMgYnl0ZWFycmF5IGJ1ZmZlcicpYGAKK2BgJ3UjJ2BgICAgIGBgUHlfVU5JQ09ERShsZW5ndGg9VHJ1ZSlgYAorYGAndSdgYCAgICAgYGBQeV9VTklDT0RFYGAKK2BgJ1UnYGAgICAgIGBgdW5pY29kZWBgCitgYCd3KidgYCAgICBgYFB5X2J1ZmZlcih0eXBlcz0nYnl0ZWFycmF5IHJ3YnVmZmVyJylgYAorYGAneSMnYGAgICAgYGBzdHIodHlwZXM9J2J5dGVzJywgbGVuZ3RoPVRydWUpYGAKK2BgJ1knYGAgICAgIGBgUHlCeXRlQXJyYXlPYmplY3RgYAorYGAneSdgYCAgICAgYGBzdHIodHlwZXM9J2J5dGVzJylgYAorYGAneSonYGAgICAgYGBQeV9idWZmZXJgYAorYGAnWiMnYGAgICAgYGBQeV9VTklDT0RFKG51bGxhYmxlPVRydWUsIGxlbmd0aD1UcnVlKWBgCitgYCd6IydgYCAgICBgYHN0cihudWxsYWJsZT1UcnVlLCBsZW5ndGg9VHJ1ZSlgYAorYGAnWidgYCAgICAgYGBQeV9VTklDT0RFKG51bGxhYmxlPVRydWUpYGAKK2BgJ3onYGAgICAgIGBgc3RyKG51bGxhYmxlPVRydWUpYGAKK2BgJ3oqJ2BgICAgIGBgUHlfYnVmZmVyKHR5cGVzPSdzdHIgYnl0ZXMgYnl0ZWFycmF5IGJ1ZmZlcicsIG51bGxhYmxlPVRydWUpYGAKKz09PT09PT09PSAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitBcyBhbiBleGFtcGxlLCBoZXJlJ3Mgb3VyIHNhbXBsZSBgYHBpY2tsZS5QaWNrbGVyLmR1bXBgYCB1c2luZyB0aGUgcHJvcGVyCitjb252ZXJ0ZXI6OgorCisgICAgLypbY2xpbmljIGlucHV0XQorICAgIHBpY2tsZS5QaWNrbGVyLmR1bXAKKworICAgICAgICBvYmo6IG9iamVjdAorICAgICAgICAgICAgVGhlIG9iamVjdCB0byBiZSBwaWNrbGVkLgorICAgICAgICAvCisKKyAgICBXcml0ZSBhIHBpY2tsZWQgcmVwcmVzZW50YXRpb24gb2Ygb2JqIHRvIHRoZSBvcGVuIGZpbGUuCisgICAgW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitBcmd1bWVudCBDbGluaWMgd2lsbCBzaG93IHlvdSBhbGwgdGhlIGNvbnZlcnRlcnMgaXQgaGFzCithdmFpbGFibGUuICBGb3IgZWFjaCBjb252ZXJ0ZXIgaXQnbGwgc2hvdyB5b3UgYWxsIHRoZSBwYXJhbWV0ZXJzCitpdCBhY2NlcHRzLCBhbG9uZyB3aXRoIHRoZSBkZWZhdWx0IHZhbHVlIGZvciBlYWNoIHBhcmFtZXRlci4KK0p1c3QgcnVuIGBgVG9vbHMvY2xpbmljL2NsaW5pYy5weSAtLWNvbnZlcnRlcnNgYCB0byBzZWUgdGhlIGZ1bGwgbGlzdC4KKworUHlfYnVmZmVyCistLS0tLS0tLS0KKworV2hlbiB1c2luZyB0aGUgYGBQeV9idWZmZXJgYCBjb252ZXJ0ZXIKKyhvciB0aGUgYGAncyonYGAsIGBgJ3cqJ2BgLCBgYCcqeSdgYCwgb3IgYGAneionYGAgbGVnYWN5IGNvbnZlcnRlcnMpLAoreW91ICptdXN0KiBub3QgY2FsbCA6YzpmdW5jOmBQeUJ1ZmZlcl9SZWxlYXNlYCBvbiB0aGUgcHJvdmlkZWQgYnVmZmVyLgorQXJndW1lbnQgQ2xpbmljIGdlbmVyYXRlcyBjb2RlIHRoYXQgZG9lcyBpdCBmb3IgeW91IChpbiB0aGUgcGFyc2luZyBmdW5jdGlvbikuCisKKworCitBZHZhbmNlZCBjb252ZXJ0ZXJzCistLS0tLS0tLS0tLS0tLS0tLS0tCisKK1JlbWVtYmVyIHRob3NlIGZvcm1hdCB1bml0cyB5b3Ugc2tpcHBlZCBmb3IgeW91ciBmaXJzdAordGltZSBiZWNhdXNlIHRoZXkgd2VyZSBhZHZhbmNlZD8gIEhlcmUncyBob3cgdG8gaGFuZGxlIHRob3NlIHRvby4KKworVGhlIHRyaWNrIGlzLCBhbGwgdGhvc2UgZm9ybWF0IHVuaXRzIHRha2UgYXJndW1lbnRzLS1laXRoZXIKK2NvbnZlcnNpb24gZnVuY3Rpb25zLCBvciB0eXBlcywgb3Igc3RyaW5ncyBzcGVjaWZ5aW5nIGFuIGVuY29kaW5nLgorKEJ1dCAibGVnYWN5IGNvbnZlcnRlcnMiIGRvbid0IHN1cHBvcnQgYXJndW1lbnRzLiAgVGhhdCdzIHdoeSB3ZQorc2tpcHBlZCB0aGVtIGZvciB5b3VyIGZpcnN0IGZ1bmN0aW9uLikgIFRoZSBhcmd1bWVudCB5b3Ugc3BlY2lmaWVkCit0byB0aGUgZm9ybWF0IHVuaXQgaXMgbm93IGFuIGFyZ3VtZW50IHRvIHRoZSBjb252ZXJ0ZXI7IHRoaXMKK2FyZ3VtZW50IGlzIGVpdGhlciBgYGNvbnZlcnRlcmBgIChmb3IgYGBPJmBgKSwgYGBzdWJjbGFzc19vZmBgIChmb3IgYGBPIWBgKSwKK29yIGBgZW5jb2RpbmdgYCAoZm9yIGFsbCB0aGUgZm9ybWF0IHVuaXRzIHRoYXQgc3RhcnQgd2l0aCBgYGVgYCkuCisKK1doZW4gdXNpbmcgYGBzdWJjbGFzc19vZmBgLCB5b3UgbWF5IGFsc28gd2FudCB0byB1c2UgdGhlIG90aGVyCitjdXN0b20gYXJndW1lbnQgZm9yIGBgb2JqZWN0KClgYDogYGB0eXBlYGAsIHdoaWNoIGxldHMgeW91IHNldCB0aGUgdHlwZQorYWN0dWFsbHkgdXNlZCBmb3IgdGhlIHBhcmFtZXRlci4gIEZvciBleGFtcGxlLCBpZiB5b3Ugd2FudCB0byBlbnN1cmUKK3RoYXQgdGhlIG9iamVjdCBpcyBhIHN1YmNsYXNzIG9mIGBgUHlVbmljb2RlX1R5cGVgYCwgeW91IHByb2JhYmx5IHdhbnQKK3RvIHVzZSB0aGUgY29udmVydGVyIGBgb2JqZWN0KHR5cGU9J1B5VW5pY29kZU9iamVjdCAqJywgc3ViY2xhc3Nfb2Y9JyZQeVVuaWNvZGVfVHlwZScpYGAuCisKK09uZSBwb3NzaWJsZSBwcm9ibGVtIHdpdGggdXNpbmcgQXJndW1lbnQgQ2xpbmljOiBpdCB0YWtlcyBhd2F5IHNvbWUgcG9zc2libGUKK2ZsZXhpYmlsaXR5IGZvciB0aGUgZm9ybWF0IHVuaXRzIHN0YXJ0aW5nIHdpdGggYGBlYGAuICBXaGVuIHdyaXRpbmcgYQorYGBQeUFyZ19QYXJzZWBgIGNhbGwgYnkgaGFuZCwgeW91IGNvdWxkIHRoZW9yZXRpY2FsbHkgZGVjaWRlIGF0IHJ1bnRpbWUgd2hhdAorZW5jb2Rpbmcgc3RyaW5nIHRvIHBhc3MgaW4gdG8gOmM6ZnVuYzpgUHlBcmdfUGFyc2VUdXBsZWAuICAgQnV0IG5vdyB0aGlzIHN0cmluZyBtdXN0CitiZSBoYXJkLWNvZGVkIGF0IEFyZ3VtZW50LUNsaW5pYy1wcmVwcm9jZXNzaW5nLXRpbWUuICBUaGlzIGxpbWl0YXRpb24gaXMgZGVsaWJlcmF0ZTsKK2l0IG1hZGUgc3VwcG9ydGluZyB0aGlzIGZvcm1hdCB1bml0IG11Y2ggZWFzaWVyLCBhbmQgbWF5IGFsbG93IGZvciBmdXR1cmUgb3B0aW1pemF0aW9ucy4KK1RoaXMgcmVzdHJpY3Rpb24gZG9lc24ndCBzZWVtIHVucmVhc29uYWJsZTsgQ1B5dGhvbiBpdHNlbGYgYWx3YXlzIHBhc3NlcyBpbiBzdGF0aWMKK2hhcmQtY29kZWQgZW5jb2Rpbmcgc3RyaW5ncyBmb3IgcGFyYW1ldGVycyB3aG9zZSBmb3JtYXQgdW5pdHMgc3RhcnQgd2l0aCBgYGVgYC4KKworCisuLiBfZGVmYXVsdF92YWx1ZXM6CisKK1BhcmFtZXRlciBkZWZhdWx0IHZhbHVlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RlZmF1bHQgdmFsdWVzIGZvciBwYXJhbWV0ZXJzIGNhbiBiZSBhbnkgb2YgYSBudW1iZXIgb2YgdmFsdWVzLgorQXQgdGhlaXIgc2ltcGxlc3QsIHRoZXkgY2FuIGJlIHN0cmluZywgaW50LCBvciBmbG9hdCBsaXRlcmFsczo6CisKKyAgICBmb286IHN0ciA9ICJhYmMiCisgICAgYmFyOiBpbnQgPSAxMjMKKyAgICBiYXQ6IGZsb2F0ID0gNDUuNgorCitUaGV5IGNhbiBhbHNvIHVzZSBhbnkgb2YgUHl0aG9uJ3MgYnVpbHQtaW4gY29uc3RhbnRzOjoKKworICAgIHllcDogIGJvb2wgPSBUcnVlCisgICAgbm9wZTogYm9vbCA9IEZhbHNlCisgICAgbmFkYTogb2JqZWN0ID0gTm9uZQorCitUaGVyZSdzIGFsc28gc3BlY2lhbCBzdXBwb3J0IGZvciBhIGRlZmF1bHQgdmFsdWUgb2YgYGBOVUxMYGAsIGFuZAorZm9yIHNpbXBsZSBleHByZXNzaW9ucywgZG9jdW1lbnRlZCBpbiB0aGUgZm9sbG93aW5nIHNlY3Rpb25zLgorCisKK1RoZSBgYE5VTExgYCBkZWZhdWx0IHZhbHVlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitGb3Igc3RyaW5nIGFuZCBvYmplY3QgcGFyYW1ldGVycywgeW91IGNhbiBzZXQgdGhlbSB0byBgYE5vbmVgYCB0byBpbmRpY2F0ZQordGhhdCB0aGVyZSdzIG5vIGRlZmF1bHQuICBIb3dldmVyLCB0aGF0IG1lYW5zIHRoZSBDIHZhcmlhYmxlIHdpbGwgYmUKK2luaXRpYWxpemVkIHRvIGBgUHlfTm9uZWBgLiAgRm9yIGNvbnZlbmllbmNlJ3Mgc2FrZXMsIHRoZXJlJ3MgYSBzcGVjaWFsCit2YWx1ZSBjYWxsZWQgYGBOVUxMYGAgZm9yIGp1c3QgdGhpcyByZWFzb246IGZyb20gUHl0aG9uJ3MgcGVyc3BlY3RpdmUgaXQKK2JlaGF2ZXMgbGlrZSBhIGRlZmF1bHQgdmFsdWUgb2YgYGBOb25lYGAsIGJ1dCB0aGUgQyB2YXJpYWJsZSBpcyBpbml0aWFsaXplZAord2l0aCBgYE5VTExgYC4KKworRXhwcmVzc2lvbnMgc3BlY2lmaWVkIGFzIGRlZmF1bHQgdmFsdWVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGRlZmF1bHQgdmFsdWUgZm9yIGEgcGFyYW1ldGVyIGNhbiBiZSBtb3JlIHRoYW4ganVzdCBhIGxpdGVyYWwgdmFsdWUuCitJdCBjYW4gYmUgYW4gZW50aXJlIGV4cHJlc3Npb24sIHVzaW5nIG1hdGggb3BlcmF0b3JzIGFuZCBsb29raW5nIHVwIGF0dHJpYnV0ZXMKK29uIG9iamVjdHMuICBIb3dldmVyLCB0aGlzIHN1cHBvcnQgaXNuJ3QgZXhhY3RseSBzaW1wbGUsIGJlY2F1c2Ugb2Ygc29tZQorbm9uLW9idmlvdXMgc2VtYW50aWNzLgorCitDb25zaWRlciB0aGUgZm9sbG93aW5nIGV4YW1wbGU6OgorCisgICAgZm9vOiBQeV9zc2l6ZV90ID0gc3lzLm1heHNpemUgLSAxCisKK2Bgc3lzLm1heHNpemVgYCBjYW4gaGF2ZSBkaWZmZXJlbnQgdmFsdWVzIG9uIGRpZmZlcmVudCBwbGF0Zm9ybXMuICBUaGVyZWZvcmUKK0FyZ3VtZW50IENsaW5pYyBjYW4ndCBzaW1wbHkgZXZhbHVhdGUgdGhhdCBleHByZXNzaW9uIGxvY2FsbHkgYW5kIGhhcmQtY29kZSBpdAoraW4gQy4gIFNvIGl0IHN0b3JlcyB0aGUgZGVmYXVsdCBpbiBzdWNoIGEgd2F5IHRoYXQgaXQgd2lsbCBnZXQgZXZhbHVhdGVkIGF0CitydW50aW1lLCB3aGVuIHRoZSB1c2VyIGFza3MgZm9yIHRoZSBmdW5jdGlvbidzIHNpZ25hdHVyZS4KKworV2hhdCBuYW1lc3BhY2UgaXMgYXZhaWxhYmxlIHdoZW4gdGhlIGV4cHJlc3Npb24gaXMgZXZhbHVhdGVkPyAgSXQncyBldmFsdWF0ZWQKK2luIHRoZSBjb250ZXh0IG9mIHRoZSBtb2R1bGUgdGhlIGJ1aWx0aW4gY2FtZSBmcm9tLiAgU28sIGlmIHlvdXIgbW9kdWxlIGhhcyBhbgorYXR0cmlidXRlIGNhbGxlZCAiYGBtYXhfd2lkZ2V0c2BgIiwgeW91IG1heSBzaW1wbHkgdXNlIGl0OjoKKworICAgIGZvbzogUHlfc3NpemVfdCA9IG1heF93aWRnZXRzCisKK0lmIHRoZSBzeW1ib2wgaXNuJ3QgZm91bmQgaW4gdGhlIGN1cnJlbnQgbW9kdWxlLCBpdCBmYWlscyBvdmVyIHRvIGxvb2tpbmcgaW4KK2Bgc3lzLm1vZHVsZXNgYC4gIFRoYXQncyBob3cgaXQgY2FuIGZpbmQgYGBzeXMubWF4c2l6ZWBgIGZvciBleGFtcGxlLiAgKFNpbmNlIHlvdQorZG9uJ3Qga25vdyBpbiBhZHZhbmNlIHdoYXQgbW9kdWxlcyB0aGUgdXNlciB3aWxsIGxvYWQgaW50byB0aGVpciBpbnRlcnByZXRlciwKK2l0J3MgYmVzdCB0byByZXN0cmljdCB5b3Vyc2VsZiB0byBtb2R1bGVzIHRoYXQgYXJlIHByZWxvYWRlZCBieSBQeXRob24gaXRzZWxmLikKKworRXZhbHVhdGluZyBkZWZhdWx0IHZhbHVlcyBvbmx5IGF0IHJ1bnRpbWUgbWVhbnMgQXJndW1lbnQgQ2xpbmljIGNhbid0IGNvbXB1dGUKK3RoZSBjb3JyZWN0IGVxdWl2YWxlbnQgQyBkZWZhdWx0IHZhbHVlLiAgU28geW91IG5lZWQgdG8gdGVsbCBpdCBleHBsaWNpdGx5LgorV2hlbiB5b3UgdXNlIGFuIGV4cHJlc3Npb24sIHlvdSBtdXN0IGFsc28gc3BlY2lmeSB0aGUgZXF1aXZhbGVudCBleHByZXNzaW9uCitpbiBDLCB1c2luZyB0aGUgYGBjX2RlZmF1bHRgYCBwYXJhbWV0ZXIgdG8gdGhlIGNvbnZlcnRlcjo6CisKKyAgICBmb286IFB5X3NzaXplX3QoY19kZWZhdWx0PSJQWV9TU0laRV9UX01BWCAtIDEiKSA9IHN5cy5tYXhzaXplIC0gMQorCitBbm90aGVyIGNvbXBsaWNhdGlvbjogQXJndW1lbnQgQ2xpbmljIGNhbid0IGtub3cgaW4gYWR2YW5jZSB3aGV0aGVyIG9yIG5vdCB0aGUKK2V4cHJlc3Npb24geW91IHN1cHBseSBpcyB2YWxpZC4gIEl0IHBhcnNlcyBpdCB0byBtYWtlIHN1cmUgaXQgbG9va3MgbGVnYWwsIGJ1dAoraXQgY2FuJ3QgKmFjdHVhbGx5KiBrbm93LiAgWW91IG11c3QgYmUgdmVyeSBjYXJlZnVsIHdoZW4gdXNpbmcgZXhwcmVzc2lvbnMgdG8KK3NwZWNpZnkgdmFsdWVzIHRoYXQgYXJlIGd1YXJhbnRlZWQgdG8gYmUgdmFsaWQgYXQgcnVudGltZSEKKworRmluYWxseSwgYmVjYXVzZSBleHByZXNzaW9ucyBtdXN0IGJlIHJlcHJlc2VudGFibGUgYXMgc3RhdGljIEMgdmFsdWVzLCB0aGVyZQorYXJlIG1hbnkgcmVzdHJpY3Rpb25zIG9uIGxlZ2FsIGV4cHJlc3Npb25zLiAgSGVyZSdzIGEgbGlzdCBvZiBQeXRob24gZmVhdHVyZXMKK3lvdSdyZSBub3QgcGVybWl0dGVkIHRvIHVzZToKKworKiBGdW5jdGlvbiBjYWxscy4KKyogSW5saW5lIGlmIHN0YXRlbWVudHMgKGBgMyBpZiBmb28gZWxzZSA1YGApLgorKiBBdXRvbWF0aWMgc2VxdWVuY2UgdW5wYWNraW5nIChgYCpbMSwgMiwgM11gYCkuCisqIExpc3Qvc2V0L2RpY3QgY29tcHJlaGVuc2lvbnMgYW5kIGdlbmVyYXRvciBleHByZXNzaW9ucy4KKyogVHVwbGUvbGlzdC9zZXQvZGljdCBsaXRlcmFscy4KKworCisKK1VzaW5nIGEgcmV0dXJuIGNvbnZlcnRlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0J5IGRlZmF1bHQgdGhlIGltcGwgZnVuY3Rpb24gQXJndW1lbnQgQ2xpbmljIGdlbmVyYXRlcyBmb3IgeW91IHJldHVybnMgYGBQeU9iamVjdCAqYGAuCitCdXQgeW91ciBDIGZ1bmN0aW9uIG9mdGVuIGNvbXB1dGVzIHNvbWUgQyB0eXBlLCB0aGVuIGNvbnZlcnRzIGl0IGludG8gdGhlIGBgUHlPYmplY3QgKmBgCithdCB0aGUgbGFzdCBtb21lbnQuICBBcmd1bWVudCBDbGluaWMgaGFuZGxlcyBjb252ZXJ0aW5nIHlvdXIgaW5wdXRzIGZyb20gUHl0aG9uIHR5cGVzCitpbnRvIG5hdGl2ZSBDIHR5cGVzLS13aHkgbm90IGhhdmUgaXQgY29udmVydCB5b3VyIHJldHVybiB2YWx1ZSBmcm9tIGEgbmF0aXZlIEMgdHlwZQoraW50byBhIFB5dGhvbiB0eXBlIHRvbz8KKworVGhhdCdzIHdoYXQgYSAicmV0dXJuIGNvbnZlcnRlciIgZG9lcy4gIEl0IGNoYW5nZXMgeW91ciBpbXBsIGZ1bmN0aW9uIHRvIHJldHVybgorc29tZSBDIHR5cGUsIHRoZW4gYWRkcyBjb2RlIHRvIHRoZSBnZW5lcmF0ZWQgKG5vbi1pbXBsKSBmdW5jdGlvbiB0byBoYW5kbGUgY29udmVydGluZwordGhhdCB2YWx1ZSBpbnRvIHRoZSBhcHByb3ByaWF0ZSBgYFB5T2JqZWN0ICpgYC4KKworVGhlIHN5bnRheCBmb3IgcmV0dXJuIGNvbnZlcnRlcnMgaXMgc2ltaWxhciB0byB0aGF0IG9mIHBhcmFtZXRlciBjb252ZXJ0ZXJzLgorWW91IHNwZWNpZnkgdGhlIHJldHVybiBjb252ZXJ0ZXIgbGlrZSBpdCB3YXMgYSByZXR1cm4gYW5ub3RhdGlvbiBvbiB0aGUKK2Z1bmN0aW9uIGl0c2VsZi4gIFJldHVybiBjb252ZXJ0ZXJzIGJlaGF2ZSBtdWNoIHRoZSBzYW1lIGFzIHBhcmFtZXRlciBjb252ZXJ0ZXJzOwordGhleSB0YWtlIGFyZ3VtZW50cywgdGhlIGFyZ3VtZW50cyBhcmUgYWxsIGtleXdvcmQtb25seSwgYW5kIGlmIHlvdSdyZSBub3QgY2hhbmdpbmcKK2FueSBvZiB0aGUgZGVmYXVsdCBhcmd1bWVudHMgeW91IGNhbiBvbWl0IHRoZSBwYXJlbnRoZXNlcy4KKworKElmIHlvdSB1c2UgYm90aCBgYCJhcyJgYCAqYW5kKiBhIHJldHVybiBjb252ZXJ0ZXIgZm9yIHlvdXIgZnVuY3Rpb24sCit0aGUgYGAiYXMiYGAgc2hvdWxkIGNvbWUgYmVmb3JlIHRoZSByZXR1cm4gY29udmVydGVyLikKKworVGhlcmUncyBvbmUgYWRkaXRpb25hbCBjb21wbGljYXRpb24gd2hlbiB1c2luZyByZXR1cm4gY29udmVydGVyczogaG93IGRvIHlvdQoraW5kaWNhdGUgYW4gZXJyb3IgaGFzIG9jY3VycmVkPyAgTm9ybWFsbHksIGEgZnVuY3Rpb24gcmV0dXJucyBhIHZhbGlkIChub24tYGBOVUxMYGApCitwb2ludGVyIGZvciBzdWNjZXNzLCBhbmQgYGBOVUxMYGAgZm9yIGZhaWx1cmUuICBCdXQgaWYgeW91IHVzZSBhbiBpbnRlZ2VyIHJldHVybiBjb252ZXJ0ZXIsCithbGwgaW50ZWdlcnMgYXJlIHZhbGlkLiAgSG93IGNhbiBBcmd1bWVudCBDbGluaWMgZGV0ZWN0IGFuIGVycm9yPyAgSXRzIHNvbHV0aW9uOiBlYWNoIHJldHVybgorY29udmVydGVyIGltcGxpY2l0bHkgbG9va3MgZm9yIGEgc3BlY2lhbCB2YWx1ZSB0aGF0IGluZGljYXRlcyBhbiBlcnJvci4gIElmIHlvdSByZXR1cm4KK3RoYXQgdmFsdWUsIGFuZCBhbiBlcnJvciBoYXMgYmVlbiBzZXQgKGBgUHlFcnJfT2NjdXJyZWQoKWBgIHJldHVybnMgYSB0cnVlCit2YWx1ZSksIHRoZW4gdGhlIGdlbmVyYXRlZCBjb2RlIHdpbGwgcHJvcGFnYXRlIHRoZSBlcnJvci4gIE90aGVyd2lzZSBpdCB3aWxsCitlbmNvZGUgdGhlIHZhbHVlIHlvdSByZXR1cm4gbGlrZSBub3JtYWwuCisKK0N1cnJlbnRseSBBcmd1bWVudCBDbGluaWMgc3VwcG9ydHMgb25seSBhIGZldyByZXR1cm4gY29udmVydGVyczo6CisKKyAgICBib29sCisgICAgaW50CisgICAgdW5zaWduZWQgaW50CisgICAgbG9uZworICAgIHVuc2lnbmVkIGludAorICAgIHNpemVfdAorICAgIFB5X3NzaXplX3QKKyAgICBmbG9hdAorICAgIGRvdWJsZQorICAgIERlY29kZUZTRGVmYXVsdAorCitOb25lIG9mIHRoZXNlIHRha2UgcGFyYW1ldGVycy4gIEZvciB0aGUgZmlyc3QgdGhyZWUsIHJldHVybiAtMSB0byBpbmRpY2F0ZQorZXJyb3IuICBGb3IgYGBEZWNvZGVGU0RlZmF1bHRgYCwgdGhlIHJldHVybiB0eXBlIGlzIGBgY2hhciAqYGA7IHJldHVybiBhIE5VTEwKK3BvaW50ZXIgdG8gaW5kaWNhdGUgYW4gZXJyb3IuCisKKyhUaGVyZSdzIGFsc28gYW4gZXhwZXJpbWVudGFsIGBgTm9uZVR5cGVgYCBjb252ZXJ0ZXIsIHdoaWNoIGxldHMgeW91CityZXR1cm4gYGBQeV9Ob25lYGAgb24gc3VjY2VzcyBvciBgYE5VTExgYCBvbiBmYWlsdXJlLCB3aXRob3V0IGhhdmluZwordG8gaW5jcmVtZW50IHRoZSByZWZlcmVuY2UgY291bnQgb24gYGBQeV9Ob25lYGAuICBJJ20gbm90IHN1cmUgaXQgYWRkcworZW5vdWdoIGNsYXJpdHkgdG8gYmUgd29ydGggdXNpbmcuKQorCitUbyBzZWUgYWxsIHRoZSByZXR1cm4gY29udmVydGVycyBBcmd1bWVudCBDbGluaWMgc3VwcG9ydHMsIGFsb25nIHdpdGgKK3RoZWlyIHBhcmFtZXRlcnMgKGlmIGFueSksCitqdXN0IHJ1biBgYFRvb2xzL2NsaW5pYy9jbGluaWMucHkgLS1jb252ZXJ0ZXJzYGAgZm9yIHRoZSBmdWxsIGxpc3QuCisKKworQ2xvbmluZyBleGlzdGluZyBmdW5jdGlvbnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lmIHlvdSBoYXZlIGEgbnVtYmVyIG9mIGZ1bmN0aW9ucyB0aGF0IGxvb2sgc2ltaWxhciwgeW91IG1heSBiZSBhYmxlIHRvCit1c2UgQ2xpbmljJ3MgImNsb25lIiBmZWF0dXJlLiAgV2hlbiB5b3UgY2xvbmUgYW4gZXhpc3RpbmcgZnVuY3Rpb24sCit5b3UgcmV1c2U6CisKKyogaXRzIHBhcmFtZXRlcnMsIGluY2x1ZGluZworCisgICogdGhlaXIgbmFtZXMsCisKKyAgKiB0aGVpciBjb252ZXJ0ZXJzLCB3aXRoIGFsbCBwYXJhbWV0ZXJzLAorCisgICogdGhlaXIgZGVmYXVsdCB2YWx1ZXMsCisKKyAgKiB0aGVpciBwZXItcGFyYW1ldGVyIGRvY3N0cmluZ3MsCisKKyAgKiB0aGVpciAqa2luZCogKHdoZXRoZXIgdGhleSdyZSBwb3NpdGlvbmFsIG9ubHksCisgICAgcG9zaXRpb25hbCBvciBrZXl3b3JkLCBvciBrZXl3b3JkIG9ubHkpLCBhbmQKKworKiBpdHMgcmV0dXJuIGNvbnZlcnRlci4KKworVGhlIG9ubHkgdGhpbmcgbm90IGNvcGllZCBmcm9tIHRoZSBvcmlnaW5hbCBmdW5jdGlvbiBpcyBpdHMgZG9jc3RyaW5nOwordGhlIHN5bnRheCBhbGxvd3MgeW91IHRvIHNwZWNpZnkgYSBuZXcgZG9jc3RyaW5nLgorCitIZXJlJ3MgdGhlIHN5bnRheCBmb3IgY2xvbmluZyBhIGZ1bmN0aW9uOjoKKworICAgIC8qW2NsaW5pYyBpbnB1dF0KKyAgICBtb2R1bGUuY2xhc3MubmV3X2Z1bmN0aW9uIFthcyBjX2Jhc2VuYW1lXSA9IG1vZHVsZS5jbGFzcy5leGlzdGluZ19mdW5jdGlvbgorCisgICAgRG9jc3RyaW5nIGZvciBuZXdfZnVuY3Rpb24gZ29lcyBoZXJlLgorICAgIFtjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworKFRoZSBmdW5jdGlvbnMgY2FuIGJlIGluIGRpZmZlcmVudCBtb2R1bGVzIG9yIGNsYXNzZXMuICBJIHdyb3RlCitgYG1vZHVsZS5jbGFzc2BgIGluIHRoZSBzYW1wbGUganVzdCB0byBpbGx1c3RyYXRlIHRoYXQgeW91IG11c3QKK3VzZSB0aGUgZnVsbCBwYXRoIHRvICpib3RoKiBmdW5jdGlvbnMuKQorCitTb3JyeSwgdGhlcmUncyBubyBzeW50YXggZm9yIHBhcnRpYWxseS1jbG9uaW5nIGEgZnVuY3Rpb24sIG9yIGNsb25pbmcgYSBmdW5jdGlvbgordGhlbiBtb2RpZnlpbmcgaXQuICBDbG9uaW5nIGlzIGFuIGFsbC1vciBub3RoaW5nIHByb3Bvc2l0aW9uLgorCitBbHNvLCB0aGUgZnVuY3Rpb24geW91IGFyZSBjbG9uaW5nIGZyb20gbXVzdCBoYXZlIGJlZW4gcHJldmlvdXNseSBkZWZpbmVkCitpbiB0aGUgY3VycmVudCBmaWxlLgorCitDYWxsaW5nIFB5dGhvbiBjb2RlCistLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSByZXN0IG9mIHRoZSBhZHZhbmNlZCB0b3BpY3MgcmVxdWlyZSB5b3UgdG8gd3JpdGUgUHl0aG9uIGNvZGUKK3doaWNoIGxpdmVzIGluc2lkZSB5b3VyIEMgZmlsZSBhbmQgbW9kaWZpZXMgQXJndW1lbnQgQ2xpbmljJ3MKK3J1bnRpbWUgc3RhdGUuICBUaGlzIGlzIHNpbXBsZTogeW91IHNpbXBseSBkZWZpbmUgYSBQeXRob24gYmxvY2suCisKK0EgUHl0aG9uIGJsb2NrIHVzZXMgZGlmZmVyZW50IGRlbGltaXRlciBsaW5lcyB0aGFuIGFuIEFyZ3VtZW50CitDbGluaWMgZnVuY3Rpb24gYmxvY2suICBJdCBsb29rcyBsaWtlIHRoaXM6OgorCisgICAgLypbcHl0aG9uIGlucHV0XQorICAgICMgcHl0aG9uIGNvZGUgZ29lcyBoZXJlCisgICAgW3B5dGhvbiBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitBbGwgdGhlIGNvZGUgaW5zaWRlIHRoZSBQeXRob24gYmxvY2sgaXMgZXhlY3V0ZWQgYXQgdGhlCit0aW1lIGl0J3MgcGFyc2VkLiAgQWxsIHRleHQgd3JpdHRlbiB0byBzdGRvdXQgaW5zaWRlIHRoZSBibG9jaworaXMgcmVkaXJlY3RlZCBpbnRvIHRoZSAib3V0cHV0IiBhZnRlciB0aGUgYmxvY2suCisKK0FzIGFuIGV4YW1wbGUsIGhlcmUncyBhIFB5dGhvbiBibG9jayB0aGF0IGFkZHMgYSBzdGF0aWMgaW50ZWdlcgordmFyaWFibGUgdG8gdGhlIEMgY29kZTo6CisKKyAgICAvKltweXRob24gaW5wdXRdCisgICAgcHJpbnQoJ3N0YXRpYyBpbnQgX19pZ25vcmVkX3VudXNlZF92YXJpYWJsZV9fID0gMDsnKQorICAgIFtweXRob24gc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKyAgICBzdGF0aWMgaW50IF9faWdub3JlZF91bnVzZWRfdmFyaWFibGVfXyA9IDA7CisgICAgLypbcHl0aG9uIGNoZWNrc3VtOi4uLl0qLworCisKK1VzaW5nIGEgInNlbGYgY29udmVydGVyIgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FyZ3VtZW50IENsaW5pYyBhdXRvbWF0aWNhbGx5IGFkZHMgYSAic2VsZiIgcGFyYW1ldGVyIGZvciB5b3UKK3VzaW5nIGEgZGVmYXVsdCBjb252ZXJ0ZXIuICBJdCBhdXRvbWF0aWNhbGx5IHNldHMgdGhlIGBgdHlwZWBgCitvZiB0aGlzIHBhcmFtZXRlciB0byB0aGUgInBvaW50ZXIgdG8gYW4gaW5zdGFuY2UiIHlvdSBzcGVjaWZpZWQKK3doZW4geW91IGRlY2xhcmVkIHRoZSB0eXBlLiAgSG93ZXZlciwgeW91IGNhbiBvdmVycmlkZQorQXJndW1lbnQgQ2xpbmljJ3MgY29udmVydGVyIGFuZCBzcGVjaWZ5IG9uZSB5b3Vyc2VsZi4KK0p1c3QgYWRkIHlvdXIgb3duIGBgc2VsZmBgIHBhcmFtZXRlciBhcyB0aGUgZmlyc3QgcGFyYW1ldGVyIGluIGEKK2Jsb2NrLCBhbmQgZW5zdXJlIHRoYXQgaXRzIGNvbnZlcnRlciBpcyBhbiBpbnN0YW5jZSBvZgorYGBzZWxmX2NvbnZlcnRlcmBgIG9yIGEgc3ViY2xhc3MgdGhlcmVvZi4KKworV2hhdCdzIHRoZSBwb2ludD8gIFRoaXMgbGV0cyB5b3Ugb3ZlcnJpZGUgdGhlIHR5cGUgb2YgYGBzZWxmYGAsCitvciBnaXZlIGl0IGEgZGlmZmVyZW50IGRlZmF1bHQgbmFtZS4KKworSG93IGRvIHlvdSBzcGVjaWZ5IHRoZSBjdXN0b20gdHlwZSB5b3Ugd2FudCB0byBjYXN0IGBgc2VsZmBgIHRvPworSWYgeW91IG9ubHkgaGF2ZSBvbmUgb3IgdHdvIGZ1bmN0aW9ucyB3aXRoIHRoZSBzYW1lIHR5cGUgZm9yIGBgc2VsZmBgLAoreW91IGNhbiBkaXJlY3RseSB1c2UgQXJndW1lbnQgQ2xpbmljJ3MgZXhpc3RpbmcgYGBzZWxmYGAgY29udmVydGVyLAorcGFzc2luZyBpbiB0aGUgdHlwZSB5b3Ugd2FudCB0byB1c2UgYXMgdGhlIGBgdHlwZWBgIHBhcmFtZXRlcjo6CisKKyAgICAvKltjbGluaWMgaW5wdXRdCisKKyAgICBfcGlja2xlLlBpY2tsZXIuZHVtcAorCisgICAgICBzZWxmOiBzZWxmKHR5cGU9IlBpY2tsZXJPYmplY3QgKiIpCisgICAgICBvYmo6IG9iamVjdAorICAgICAgLworCisgICAgV3JpdGUgYSBwaWNrbGVkIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiBvYmplY3QgdG8gdGhlIG9wZW4gZmlsZS4KKyAgICBbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK09uIHRoZSBvdGhlciBoYW5kLCBpZiB5b3UgaGF2ZSBhIGxvdCBvZiBmdW5jdGlvbnMgdGhhdCB3aWxsIHVzZSB0aGUgc2FtZQordHlwZSBmb3IgYGBzZWxmYGAsIGl0J3MgYmVzdCB0byBjcmVhdGUgeW91ciBvd24gY29udmVydGVyLCBzdWJjbGFzc2luZworYGBzZWxmX2NvbnZlcnRlcmBgIGJ1dCBvdmVyd3JpdGluZyB0aGUgYGB0eXBlYGAgbWVtYmVyOjoKKworICAgIC8qW3B5dGhvbiBpbnB1dF0KKyAgICBjbGFzcyBQaWNrbGVyT2JqZWN0X2NvbnZlcnRlcihzZWxmX2NvbnZlcnRlcik6CisgICAgICAgIHR5cGUgPSAiUGlja2xlck9iamVjdCAqIgorICAgIFtweXRob24gc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworICAgIC8qW2NsaW5pYyBpbnB1dF0KKworICAgIF9waWNrbGUuUGlja2xlci5kdW1wCisKKyAgICAgIHNlbGY6IFBpY2tsZXJPYmplY3QKKyAgICAgIG9iajogb2JqZWN0CisgICAgICAvCisKKyAgICBXcml0ZSBhIHBpY2tsZWQgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIG9iamVjdCB0byB0aGUgb3BlbiBmaWxlLgorICAgIFtjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworCisKK1dyaXRpbmcgYSBjdXN0b20gY29udmVydGVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBcyB3ZSBoaW50ZWQgYXQgaW4gdGhlIHByZXZpb3VzIHNlY3Rpb24uLi4geW91IGNhbiB3cml0ZSB5b3VyIG93biBjb252ZXJ0ZXJzIQorQSBjb252ZXJ0ZXIgaXMgc2ltcGx5IGEgUHl0aG9uIGNsYXNzIHRoYXQgaW5oZXJpdHMgZnJvbSBgYENDb252ZXJ0ZXJgYC4KK1RoZSBtYWluIHB1cnBvc2Ugb2YgYSBjdXN0b20gY29udmVydGVyIGlzIGlmIHlvdSBoYXZlIGEgcGFyYW1ldGVyIHVzaW5nCit0aGUgYGBPJmBgIGZvcm1hdCB1bml0LS1wYXJzaW5nIHRoaXMgcGFyYW1ldGVyIG1lYW5zIGNhbGxpbmcKK2EgOmM6ZnVuYzpgUHlBcmdfUGFyc2VUdXBsZWAgImNvbnZlcnRlciBmdW5jdGlvbiIuCisKK1lvdXIgY29udmVydGVyIGNsYXNzIHNob3VsZCBiZSBuYW1lZCBgYCpzb21ldGhpbmcqX2NvbnZlcnRlcmBgLgorSWYgdGhlIG5hbWUgZm9sbG93cyB0aGlzIGNvbnZlbnRpb24sIHRoZW4geW91ciBjb252ZXJ0ZXIgY2xhc3MKK3dpbGwgYmUgYXV0b21hdGljYWxseSByZWdpc3RlcmVkIHdpdGggQXJndW1lbnQgQ2xpbmljOyBpdHMgbmFtZQord2lsbCBiZSB0aGUgbmFtZSBvZiB5b3VyIGNsYXNzIHdpdGggdGhlIGBgX2NvbnZlcnRlcmBgIHN1ZmZpeAorc3RyaXBwZWQgb2ZmLiAgKFRoaXMgaXMgYWNjb21wbGlzaGVkIHdpdGggYSBtZXRhY2xhc3MuKQorCitZb3Ugc2hvdWxkbid0IHN1YmNsYXNzIGBgQ0NvbnZlcnRlci5fX2luaXRfX2BgLiAgSW5zdGVhZCwgeW91IHNob3VsZAord3JpdGUgYSBgYGNvbnZlcnRlcl9pbml0KClgYCBmdW5jdGlvbi4gIGBgY29udmVydGVyX2luaXQoKWBgCithbHdheXMgYWNjZXB0cyBhIGBgc2VsZmBgIHBhcmFtZXRlcjsgYWZ0ZXIgdGhhdCwgYWxsIGFkZGl0aW9uYWwKK3BhcmFtZXRlcnMgKm11c3QqIGJlIGtleXdvcmQtb25seS4gIEFueSBhcmd1bWVudHMgcGFzc2VkIGluIHRvCit0aGUgY29udmVydGVyIGluIEFyZ3VtZW50IENsaW5pYyB3aWxsIGJlIHBhc3NlZCBhbG9uZyB0byB5b3VyCitgYGNvbnZlcnRlcl9pbml0KClgYC4KKworVGhlcmUgYXJlIHNvbWUgYWRkaXRpb25hbCBtZW1iZXJzIG9mIGBgQ0NvbnZlcnRlcmBgIHlvdSBtYXkgd2lzaAordG8gc3BlY2lmeSBpbiB5b3VyIHN1YmNsYXNzLiAgSGVyZSdzIHRoZSBjdXJyZW50IGxpc3Q6CisKK2BgdHlwZWBgCisgICAgVGhlIEMgdHlwZSB0byB1c2UgZm9yIHRoaXMgdmFyaWFibGUuCisgICAgYGB0eXBlYGAgc2hvdWxkIGJlIGEgUHl0aG9uIHN0cmluZyBzcGVjaWZ5aW5nIHRoZSB0eXBlLCBlLmcuIGBgaW50YGAuCisgICAgSWYgdGhpcyBpcyBhIHBvaW50ZXIgdHlwZSwgdGhlIHR5cGUgc3RyaW5nIHNob3VsZCBlbmQgd2l0aCBgYCcgKidgYC4KKworYGBkZWZhdWx0YGAKKyAgICBUaGUgUHl0aG9uIGRlZmF1bHQgdmFsdWUgZm9yIHRoaXMgcGFyYW1ldGVyLCBhcyBhIFB5dGhvbiB2YWx1ZS4KKyAgICBPciB0aGUgbWFnaWMgdmFsdWUgYGB1bnNwZWNpZmllZGBgIGlmIHRoZXJlIGlzIG5vIGRlZmF1bHQuCisKK2BgcHlfZGVmYXVsdGBgCisgICAgYGBkZWZhdWx0YGAgYXMgaXQgc2hvdWxkIGFwcGVhciBpbiBQeXRob24gY29kZSwKKyAgICBhcyBhIHN0cmluZy4KKyAgICBPciBgYE5vbmVgYCBpZiB0aGVyZSBpcyBubyBkZWZhdWx0LgorCitgYGNfZGVmYXVsdGBgCisgICAgYGBkZWZhdWx0YGAgYXMgaXQgc2hvdWxkIGFwcGVhciBpbiBDIGNvZGUsCisgICAgYXMgYSBzdHJpbmcuCisgICAgT3IgYGBOb25lYGAgaWYgdGhlcmUgaXMgbm8gZGVmYXVsdC4KKworYGBjX2lnbm9yZWRfZGVmYXVsdGBgCisgICAgVGhlIGRlZmF1bHQgdmFsdWUgdXNlZCB0byBpbml0aWFsaXplIHRoZSBDIHZhcmlhYmxlIHdoZW4KKyAgICB0aGVyZSBpcyBubyBkZWZhdWx0LCBidXQgbm90IHNwZWNpZnlpbmcgYSBkZWZhdWx0IG1heQorICAgIHJlc3VsdCBpbiBhbiAidW5pbml0aWFsaXplZCB2YXJpYWJsZSIgd2FybmluZy4gIFRoaXMgY2FuCisgICAgZWFzaWx5IGhhcHBlbiB3aGVuIHVzaW5nIG9wdGlvbiBncm91cHMtLWFsdGhvdWdoCisgICAgcHJvcGVybHktd3JpdHRlbiBjb2RlIHdpbGwgbmV2ZXIgYWN0dWFsbHkgdXNlIHRoaXMgdmFsdWUsCisgICAgdGhlIHZhcmlhYmxlIGRvZXMgZ2V0IHBhc3NlZCBpbiB0byB0aGUgaW1wbCwgYW5kIHRoZQorICAgIEMgY29tcGlsZXIgd2lsbCBjb21wbGFpbiBhYm91dCB0aGUgInVzZSIgb2YgdGhlCisgICAgdW5pbml0aWFsaXplZCB2YWx1ZS4gIFRoaXMgdmFsdWUgc2hvdWxkIGFsd2F5cyBiZSBhCisgICAgbm9uLWVtcHR5IHN0cmluZy4KKworYGBjb252ZXJ0ZXJgYAorICAgIFRoZSBuYW1lIG9mIHRoZSBDIGNvbnZlcnRlciBmdW5jdGlvbiwgYXMgYSBzdHJpbmcuCisKK2BgaW1wbF9ieV9yZWZlcmVuY2VgYAorICAgIEEgYm9vbGVhbiB2YWx1ZS4gIElmIHRydWUsCisgICAgQXJndW1lbnQgQ2xpbmljIHdpbGwgYWRkIGEgYGAmYGAgaW4gZnJvbnQgb2YgdGhlIG5hbWUgb2YKKyAgICB0aGUgdmFyaWFibGUgd2hlbiBwYXNzaW5nIGl0IGludG8gdGhlIGltcGwgZnVuY3Rpb24uCisKK2BgcGFyc2VfYnlfcmVmZXJlbmNlYGAKKyAgICBBIGJvb2xlYW4gdmFsdWUuICBJZiB0cnVlLAorICAgIEFyZ3VtZW50IENsaW5pYyB3aWxsIGFkZCBhIGBgJmBgIGluIGZyb250IG9mIHRoZSBuYW1lIG9mCisgICAgdGhlIHZhcmlhYmxlIHdoZW4gcGFzc2luZyBpdCBpbnRvIDpjOmZ1bmM6YFB5QXJnX1BhcnNlVHVwbGVgLgorCisKK0hlcmUncyB0aGUgc2ltcGxlc3QgZXhhbXBsZSBvZiBhIGN1c3RvbSBjb252ZXJ0ZXIsIGZyb20gYGBNb2R1bGVzL3psaWJtb2R1bGUuY2BgOjoKKworICAgIC8qW3B5dGhvbiBpbnB1dF0KKworICAgIGNsYXNzIHVpbnRfY29udmVydGVyKENDb252ZXJ0ZXIpOgorICAgICAgICB0eXBlID0gJ3Vuc2lnbmVkIGludCcKKyAgICAgICAgY29udmVydGVyID0gJ3VpbnRfY29udmVydGVyJworCisgICAgW3B5dGhvbiBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworICAgIC8qW3B5dGhvbiBlbmQgZ2VuZXJhdGVkIGNvZGU6IGNoZWNrc3VtPWRhMzlhM2VlNWU2YjRiMGQzMjU1YmZlZjk1NjAxODkwYWZkODA3MDldKi8KKworVGhpcyBibG9jayBhZGRzIGEgY29udmVydGVyIHRvIEFyZ3VtZW50IENsaW5pYyBuYW1lZCBgYHVpbnRgYC4gIFBhcmFtZXRlcnMKK2RlY2xhcmVkIGFzIGBgdWludGBgIHdpbGwgYmUgZGVjbGFyZWQgYXMgdHlwZSBgYHVuc2lnbmVkIGludGBgLCBhbmQgd2lsbAorYmUgcGFyc2VkIGJ5IHRoZSBgYCdPJidgYCBmb3JtYXQgdW5pdCwgd2hpY2ggd2lsbCBjYWxsIHRoZSBgYHVpbnRfY29udmVydGVyYGAKK2NvbnZlcnRlciBmdW5jdGlvbi4KK2BgdWludGBgIHZhcmlhYmxlcyBhdXRvbWF0aWNhbGx5IHN1cHBvcnQgZGVmYXVsdCB2YWx1ZXMuCisKK01vcmUgc29waGlzdGljYXRlZCBjdXN0b20gY29udmVydGVycyBjYW4gaW5zZXJ0IGN1c3RvbSBDIGNvZGUgdG8KK2hhbmRsZSBpbml0aWFsaXphdGlvbiBhbmQgY2xlYW51cC4KK1lvdSBjYW4gc2VlIG1vcmUgZXhhbXBsZXMgb2YgY3VzdG9tIGNvbnZlcnRlcnMgaW4gdGhlIENQeXRob24KK3NvdXJjZSB0cmVlOyBncmVwIHRoZSBDIGZpbGVzIGZvciB0aGUgc3RyaW5nIGBgQ0NvbnZlcnRlcmBgLgorCitXcml0aW5nIGEgY3VzdG9tIHJldHVybiBjb252ZXJ0ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXcml0aW5nIGEgY3VzdG9tIHJldHVybiBjb252ZXJ0ZXIgaXMgbXVjaCBsaWtlIHdyaXRpbmcKK2EgY3VzdG9tIGNvbnZlcnRlci4gIEV4Y2VwdCBpdCdzIHNvbWV3aGF0IHNpbXBsZXIsIGJlY2F1c2UgcmV0dXJuCitjb252ZXJ0ZXJzIGFyZSB0aGVtc2VsdmVzIG11Y2ggc2ltcGxlci4KKworUmV0dXJuIGNvbnZlcnRlcnMgbXVzdCBzdWJjbGFzcyBgYENSZXR1cm5Db252ZXJ0ZXJgYC4KK1RoZXJlIGFyZSBubyBleGFtcGxlcyB5ZXQgb2YgY3VzdG9tIHJldHVybiBjb252ZXJ0ZXJzLAorYmVjYXVzZSB0aGV5IGFyZSBub3Qgd2lkZWx5IHVzZWQgeWV0LiAgSWYgeW91IHdpc2ggdG8KK3dyaXRlIHlvdXIgb3duIHJldHVybiBjb252ZXJ0ZXIsIHBsZWFzZSByZWFkIGBgVG9vbHMvY2xpbmljL2NsaW5pYy5weWBgLAorc3BlY2lmaWNhbGx5IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgYENSZXR1cm5Db252ZXJ0ZXJgYCBhbmQKK2FsbCBpdHMgc3ViY2xhc3Nlcy4KKworTUVUSF9PIGFuZCBNRVRIX05PQVJHUworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUbyBjb252ZXJ0IGEgZnVuY3Rpb24gdXNpbmcgYGBNRVRIX09gYCwgbWFrZSBzdXJlIHRoZSBmdW5jdGlvbidzCitzaW5nbGUgYXJndW1lbnQgaXMgdXNpbmcgdGhlIGBgb2JqZWN0YGAgY29udmVydGVyLCBhbmQgbWFyayB0aGUKK2FyZ3VtZW50cyBhcyBwb3NpdGlvbmFsLW9ubHk6OgorCisgICAgLypbY2xpbmljIGlucHV0XQorICAgIG1ldGhfb19zYW1wbGUKKworICAgICAgICAgYXJndW1lbnQ6IG9iamVjdAorICAgICAgICAgLworICAgIFtjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworCitUbyBjb252ZXJ0IGEgZnVuY3Rpb24gdXNpbmcgYGBNRVRIX05PQVJHU2BgLCBqdXN0IGRvbid0IHNwZWNpZnkKK2FueSBhcmd1bWVudHMuCisKK1lvdSBjYW4gc3RpbGwgdXNlIGEgc2VsZiBjb252ZXJ0ZXIsIGEgcmV0dXJuIGNvbnZlcnRlciwgYW5kIHNwZWNpZnkKK2EgYGB0eXBlYGAgYXJndW1lbnQgdG8gdGhlIG9iamVjdCBjb252ZXJ0ZXIgZm9yIGBgTUVUSF9PYGAuCisKK3RwX25ldyBhbmQgdHBfaW5pdCBmdW5jdGlvbnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWW91IGNhbiBjb252ZXJ0IGBgdHBfbmV3YGAgYW5kIGBgdHBfaW5pdGBgIGZ1bmN0aW9ucy4gIEp1c3QgbmFtZQordGhlbSBgYF9fbmV3X19gYCBvciBgYF9faW5pdF9fYGAgYXMgYXBwcm9wcmlhdGUuICBOb3RlczoKKworKiBUaGUgZnVuY3Rpb24gbmFtZSBnZW5lcmF0ZWQgZm9yIGBgX19uZXdfX2BgIGRvZXNuJ3QgZW5kIGluIGBgX19uZXdfX2BgCisgIGxpa2UgaXQgd291bGQgYnkgZGVmYXVsdC4gIEl0J3MganVzdCB0aGUgbmFtZSBvZiB0aGUgY2xhc3MsIGNvbnZlcnRlZAorICBpbnRvIGEgdmFsaWQgQyBpZGVudGlmaWVyLgorCisqIE5vIGBgUHlNZXRob2REZWZgYCBgYCNkZWZpbmVgYCBpcyBnZW5lcmF0ZWQgZm9yIHRoZXNlIGZ1bmN0aW9ucy4KKworKiBgYF9faW5pdF9fYGAgZnVuY3Rpb25zIHJldHVybiBgYGludGBgLCBub3QgYGBQeU9iamVjdCAqYGAuCisKKyogVXNlIHRoZSBkb2NzdHJpbmcgYXMgdGhlIGNsYXNzIGRvY3N0cmluZy4KKworKiBBbHRob3VnaCBgYF9fbmV3X19gYCBhbmQgYGBfX2luaXRfX2BgIGZ1bmN0aW9ucyBtdXN0IGFsd2F5cworICBhY2NlcHQgYm90aCB0aGUgYGBhcmdzYGAgYW5kIGBga3dhcmdzYGAgb2JqZWN0cywgd2hlbiBjb252ZXJ0aW5nCisgIHlvdSBtYXkgc3BlY2lmeSBhbnkgc2lnbmF0dXJlIGZvciB0aGVzZSBmdW5jdGlvbnMgdGhhdCB5b3UgbGlrZS4KKyAgKElmIHlvdXIgZnVuY3Rpb24gZG9lc24ndCBzdXBwb3J0IGtleXdvcmRzLCB0aGUgcGFyc2luZyBmdW5jdGlvbgorICBnZW5lcmF0ZWQgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24gaWYgaXQgcmVjZWl2ZXMgYW55LikKKworQ2hhbmdpbmcgYW5kIHJlZGlyZWN0aW5nIENsaW5pYydzIG91dHB1dAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJdCBjYW4gYmUgaW5jb252ZW5pZW50IHRvIGhhdmUgQ2xpbmljJ3Mgb3V0cHV0IGludGVyc3BlcnNlZCB3aXRoCit5b3VyIGNvbnZlbnRpb25hbCBoYW5kLWVkaXRlZCBDIGNvZGUuICBMdWNraWx5LCBDbGluaWMgaXMgY29uZmlndXJhYmxlOgoreW91IGNhbiBidWZmZXIgdXAgaXRzIG91dHB1dCBmb3IgcHJpbnRpbmcgbGF0ZXIgKG9yIGVhcmxpZXIhKSwgb3Igd3JpdGUKK2l0cyBvdXRwdXQgdG8gYSBzZXBhcmF0ZSBmaWxlLiAgWW91IGNhbiBhbHNvIGFkZCBhIHByZWZpeCBvciBzdWZmaXggdG8KK2V2ZXJ5IGxpbmUgb2YgQ2xpbmljJ3MgZ2VuZXJhdGVkIG91dHB1dC4KKworV2hpbGUgY2hhbmdpbmcgQ2xpbmljJ3Mgb3V0cHV0IGluIHRoaXMgbWFubmVyIGNhbiBiZSBhIGJvb24gdG8gcmVhZGFiaWxpdHksCitpdCBtYXkgcmVzdWx0IGluIENsaW5pYyBjb2RlIHVzaW5nIHR5cGVzIGJlZm9yZSB0aGV5IGFyZSBkZWZpbmVkLCBvcgoreW91ciBjb2RlIGF0dGVtcHRpbmcgdG8gdXNlIENsaW5pYy1nZW5lcmF0ZWQgY29kZSBiZWZpcmUgaXQgaXMgZGVmaW5lZC4KK1RoZXNlIHByb2JsZW1zIGNhbiBiZSBlYXNpbHkgc29sdmVkIGJ5IHJlYXJyYW5naW5nIHRoZSBkZWNsYXJhdGlvbnMgaW4geW91ciBmaWxlLAorb3IgbW92aW5nIHdoZXJlIENsaW5pYydzIGdlbmVyYXRlZCBjb2RlIGdvZXMuICAoVGhpcyBpcyB3aHkgdGhlIGRlZmF1bHQgYmVoYXZpb3IKK29mIENsaW5pYyBpcyB0byBvdXRwdXQgZXZlcnl0aGluZyBpbnRvIHRoZSBjdXJyZW50IGJsb2NrOyB3aGlsZSBtYW55IHBlb3BsZQorY29uc2lkZXIgdGhpcyBoYW1wZXJzIHJlYWRhYmlsaXR5LCBpdCB3aWxsIG5ldmVyIHJlcXVpcmUgcmVhcnJhbmdpbmcgeW91cgorY29kZSB0byBmaXggZGVmaW5pdGlvbi1iZWZvcmUtdXNlIHByb2JsZW1zLikKKworTGV0J3Mgc3RhcnQgd2l0aCBkZWZpbmluZyBzb21lIHRlcm1pbm9sb2d5OgorCisqZmllbGQqCisgIEEgZmllbGQsIGluIHRoaXMgY29udGV4dCwgaXMgYSBzdWJzZWN0aW9uIG9mIENsaW5pYydzIG91dHB1dC4KKyAgRm9yIGV4YW1wbGUsIHRoZSBgYCNkZWZpbmVgYCBmb3IgdGhlIGBgUHlNZXRob2REZWZgYCBzdHJ1Y3R1cmUKKyAgaXMgYSBmaWVsZCwgY2FsbGVkIGBgbWV0aG9kZGVmX2RlZmluZWBgLiAgQ2xpbmljIGhhcyBzZXZlbgorICBkaWZmZXJlbnQgZmllbGRzIGl0IGNhbiBvdXRwdXQgcGVyIGZ1bmN0aW9uIGRlZmluaXRpb246OgorCisgICAgICBkb2NzdHJpbmdfcHJvdG90eXBlCisgICAgICBkb2NzdHJpbmdfZGVmaW5pdGlvbgorICAgICAgbWV0aG9kZGVmX2RlZmluZQorICAgICAgaW1wbF9wcm90b3R5cGUKKyAgICAgIHBhcnNlcl9wcm90b3R5cGUKKyAgICAgIHBhcnNlcl9kZWZpbml0aW9uCisgICAgICBpbXBsX2RlZmluaXRpb24KKworICBBbGwgdGhlIG5hbWVzIGFyZSBvZiB0aGUgZm9ybSBgYCI8YT5fPGI+ImBgLAorICB3aGVyZSBgYCI8YT4iYGAgaXMgdGhlIHNlbWFudGljIG9iamVjdCByZXByZXNlbnRlZCAodGhlIHBhcnNpbmcgZnVuY3Rpb24sCisgIHRoZSBpbXBsIGZ1bmN0aW9uLCB0aGUgZG9jc3RyaW5nLCBvciB0aGUgbWV0aG9kZGVmIHN0cnVjdHVyZSkgYW5kIGBgIjxiPiJgYAorICByZXByZXNlbnRzIHdoYXQga2luZCBvZiBzdGF0ZW1lbnQgdGhlIGZpZWxkIGlzLiAgRmllbGQgbmFtZXMgdGhhdCBlbmQgaW4KKyAgYGAiX3Byb3RvdHlwZSJgYAorICByZXByZXNlbnQgZm9yd2FyZCBkZWNsYXJhdGlvbnMgb2YgdGhhdCB0aGluZywgd2l0aG91dCB0aGUgYWN0dWFsIGJvZHkvZGF0YQorICBvZiB0aGUgdGhpbmc7IGZpZWxkIG5hbWVzIHRoYXQgZW5kIGluIGBgIl9kZWZpbml0aW9uImBgIHJlcHJlc2VudCB0aGUgYWN0dWFsCisgIGRlZmluaXRpb24gb2YgdGhlIHRoaW5nLCB3aXRoIHRoZSBib2R5L2RhdGEgb2YgdGhlIHRoaW5nLiAgKGBgIm1ldGhvZGRlZiJgYAorICBpcyBzcGVjaWFsLCBpdCdzIHRoZSBvbmx5IG9uZSB0aGF0IGVuZHMgd2l0aCBgYCJfZGVmaW5lImBgLCByZXByZXNlbnRpbmcgdGhhdAorICBpdCdzIGEgcHJlcHJvY2Vzc29yICNkZWZpbmUuKQorCisqZGVzdGluYXRpb24qCisgIEEgZGVzdGluYXRpb24gaXMgYSBwbGFjZSBDbGluaWMgY2FuIHdyaXRlIG91dHB1dCB0by4gIFRoZXJlIGFyZQorICBmaXZlIGJ1aWx0LWluIGRlc3RpbmF0aW9uczoKKworICBgYGJsb2NrYGAKKyAgICBUaGUgZGVmYXVsdCBkZXN0aW5hdGlvbjogcHJpbnRlZCBpbiB0aGUgb3V0cHV0IHNlY3Rpb24gb2YKKyAgICB0aGUgY3VycmVudCBDbGluaWMgYmxvY2suCisKKyAgYGBidWZmZXJgYAorICAgIEEgdGV4dCBidWZmZXIgd2hlcmUgeW91IGNhbiBzYXZlIHRleHQgZm9yIGxhdGVyLiAgVGV4dCBzZW50CisgICAgaGVyZSBpcyBhcHBlbmRlZCB0byB0aGUgZW5kIG9mIGFueSBleHNpdGluZyB0ZXh0LiAgSXQncyBhbgorICAgIGVycm9yIHRvIGhhdmUgYW55IHRleHQgbGVmdCBpbiB0aGUgYnVmZmVyIHdoZW4gQ2xpbmljIGZpbmlzaGVzCisgICAgcHJvY2Vzc2luZyBhIGZpbGUuCisKKyAgYGBmaWxlYGAKKyAgICBBIHNlcGFyYXRlICJjbGluaWMgZmlsZSIgdGhhdCB3aWxsIGJlIGNyZWF0ZWQgYXV0b21hdGljYWxseSBieSBDbGluaWMuCisgICAgVGhlIGZpbGVuYW1lIGNob3NlbiBmb3IgdGhlIGZpbGUgaXMgYGB7YmFzZW5hbWV9LmNsaW5pY3tleHRlbnNpb259YGAsCisgICAgd2hlcmUgYGBiYXNlbmFtZWBgIGFuZCBgYGV4dGVuc2lvbmBgIHdlcmUgYXNzaWduZWQgdGhlIG91dHB1dAorICAgIGZyb20gYGBvcy5wYXRoLnNwbGl0ZXh0KClgYCBydW4gb24gdGhlIGN1cnJlbnQgZmlsZS4gIChFeGFtcGxlOgorICAgIHRoZSBgYGZpbGVgYCBkZXN0aW5hdGlvbiBmb3IgYGBfcGlja2xlLmNgYCB3b3VsZCBiZSB3cml0dGVuIHRvCisgICAgYGBfcGlja2xlLmNsaW5pYy5jYGAuKQorCisgICAgKipJbXBvcnRhbnQ6IFdoZW4gdXNpbmcgYSoqIGBgZmlsZWBgICoqZGVzdGluYXRpb24sIHlvdSoqCisgICAgKm11c3QgY2hlY2sgaW4qICoqdGhlIGdlbmVyYXRlZCBmaWxlISoqCisKKyAgYGB0d28tcGFzc2BgCisgICAgQSBidWZmZXIgbGlrZSBgYGJ1ZmZlcmBgLiAgSG93ZXZlciwgYSB0d28tcGFzcyBidWZmZXIgY2FuIG9ubHkKKyAgICBiZSB3cml0dGVuIG9uY2UsIGFuZCBpdCBwcmludHMgb3V0IGFsbCB0ZXh0IHNlbnQgdG8gaXQgZHVyaW5nCisgICAgYWxsIG9mIHByb2Nlc3NpbmcsIGV2ZW4gZnJvbSBDbGluaWMgYmxvY2tzICphZnRlciogdGhlCisKKyAgYGBzdXBwcmVzc2BgCisgICAgVGhlIHRleHQgaXMgc3VwcHJlc3NlZC0tdGhyb3duIGF3YXkuCisKKworQ2xpbmljIGRlZmluZXMgZml2ZSBuZXcgZGlyZWN0aXZlcyB0aGF0IGxldCB5b3UgcmVjb25maWd1cmUgaXRzIG91dHB1dC4KKworVGhlIGZpcnN0IG5ldyBkaXJlY3RpdmUgaXMgYGBkdW1wYGA6OgorCisgICBkdW1wIDxkZXN0aW5hdGlvbj4KKworVGhpcyBkdW1wcyB0aGUgY3VycmVudCBjb250ZW50cyBvZiB0aGUgbmFtZWQgZGVzdGluYXRpb24gaW50byB0aGUgb3V0cHV0IG9mCit0aGUgY3VycmVudCBibG9jaywgYW5kIGVtcHRpZXMgaXQuICBUaGlzIG9ubHkgd29ya3Mgd2l0aCBgYGJ1ZmZlcmBgIGFuZAorYGB0d28tcGFzc2BgIGRlc3RpbmF0aW9ucy4KKworVGhlIHNlY29uZCBuZXcgZGlyZWN0aXZlIGlzIGBgb3V0cHV0YGAuICBUaGUgbW9zdCBiYXNpYyBmb3JtIG9mIGBgb3V0cHV0YGAKK2lzIGxpa2UgdGhpczo6CisKKyAgICBvdXRwdXQgPGZpZWxkPiA8ZGVzdGluYXRpb24+CisKK1RoaXMgdGVsbHMgQ2xpbmljIHRvIG91dHB1dCAqZmllbGQqIHRvICpkZXN0aW5hdGlvbiouICBgYG91dHB1dGBgIGFsc28KK3N1cHBvcnRzIGEgc3BlY2lhbCBtZXRhLWRlc3RpbmF0aW9uLCBjYWxsZWQgYGBldmVyeXRoaW5nYGAsIHdoaWNoIHRlbGxzCitDbGluaWMgdG8gb3V0cHV0ICphbGwqIGZpZWxkcyB0byB0aGF0ICpkZXN0aW5hdGlvbiouCisKK2Bgb3V0cHV0YGAgaGFzIGEgbnVtYmVyIG9mIG90aGVyIGZ1bmN0aW9uczo6CisKKyAgICBvdXRwdXQgcHVzaAorICAgIG91dHB1dCBwb3AKKyAgICBvdXRwdXQgcHJlc2V0IDxwcmVzZXQ+CisKKworYGBvdXRwdXQgcHVzaGBgIGFuZCBgYG91dHB1dCBwb3BgYCBhbGxvdyB5b3UgdG8gcHVzaCBhbmQgcG9wCitjb25maWd1cmF0aW9ucyBvbiBhbiBpbnRlcm5hbCBjb25maWd1cmF0aW9uIHN0YWNrLCBzbyB0aGF0IHlvdQorY2FuIHRlbXBvcmFyaWx5IG1vZGlmeSB0aGUgb3V0cHV0IGNvbmZpZ3VyYXRpb24sIHRoZW4gZWFzaWx5IHJlc3RvcmUKK3RoZSBwcmV2aW91cyBjb25maWd1cmF0aW9uLiAgU2ltcGx5IHB1c2ggYmVmb3JlIHlvdXIgY2hhbmdlIHRvIHNhdmUKK3RoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24sIHRoZW4gcG9wIHdoZW4geW91IHdpc2ggdG8gcmVzdG9yZSB0aGUKK3ByZXZpb3VzIGNvbmZpZ3VyYXRpb24uCisKK2Bgb3V0cHV0IHByZXNldGBgIHNldHMgQ2xpbmljJ3Mgb3V0cHV0IHRvIG9uZSBvZiBzZXZlcmFsIGJ1aWx0LWluCitwcmVzZXQgY29uZmlndXJhdGlvbnMsIGFzIGZvbGxvd3M6CisKKyAgYGBibG9ja2BgCisgICAgQ2xpbmljJ3Mgb3JpZ2luYWwgc3RhcnRpbmcgY29uZmlndXJhdGlvbi4gIFdyaXRlcyBldmVyeXRoaW5nCisgICAgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGlucHV0IGJsb2NrLgorCisgICAgU3VwcHJlc3MgdGhlIGBgcGFyc2VyX3Byb3RvdHlwZWBgCisgICAgYW5kIGBgZG9jc3RyaW5nX3Byb3RvdHlwZWBgLCB3cml0ZSBldmVyeXRoaW5nIGVsc2UgdG8gYGBibG9ja2BgLgorCisgIGBgZmlsZWBgCisgICAgRGVzaWduZWQgdG8gd3JpdGUgZXZlcnl0aGluZyB0byB0aGUgImNsaW5pYyBmaWxlIiB0aGF0IGl0IGNhbi4KKyAgICBZb3UgdGhlbiBgYCNpbmNsdWRlYGAgdGhpcyBmaWxlIG5lYXIgdGhlIHRvcCBvZiB5b3VyIGZpbGUuCisgICAgWW91IG1heSBuZWVkIHRvIHJlYXJyYW5nZSB5b3VyIGZpbGUgdG8gbWFrZSB0aGlzIHdvcmssIHRob3VnaAorICAgIHVzdWFsbHkgdGhpcyBqdXN0IG1lYW5zIGNyZWF0aW5nIGZvcndhcmQgZGVjbGFyYXRpb25zIGZvciB2YXJpb3VzCisgICAgYGB0eXBlZGVmYGAgYW5kIGBgUHlUeXBlT2JqZWN0YGAgZGVmaW5pdGlvbnMuCisKKyAgICBTdXBwcmVzcyB0aGUgYGBwYXJzZXJfcHJvdG90eXBlYGAKKyAgICBhbmQgYGBkb2NzdHJpbmdfcHJvdG90eXBlYGAsIHdyaXRlIHRoZSBgYGltcGxfZGVmaW5pdGlvbmBgIHRvCisgICAgYGBibG9ja2BgLCBhbmQgd3JpdGUgZXZlcnl0aGluZyBlbHNlIHRvIGBgZmlsZWBgLgorCisgICAgVGhlIGRlZmF1bHQgZmlsZW5hbWUgaXMgYGAie2Rpcm5hbWV9L2NsaW5pYy97YmFzZW5hbWV9LmgiYGAuCisKKyAgYGBidWZmZXJgYAorICAgIFNhdmUgdXAgYWxsIG1vc3Qgb2YgdGhlIG91dHB1dCBmcm9tIENsaW5pYywgdG8gYmUgd3JpdHRlbiBpbnRvCisgICAgeW91ciBmaWxlIG5lYXIgdGhlIGVuZC4gIEZvciBQeXRob24gZmlsZXMgaW1wbGVtZW50aW5nIG1vZHVsZXMKKyAgICBvciBidWlsdGluIHR5cGVzLCBpdCdzIHJlY29tbWVuZGVkIHRoYXQgeW91IGR1bXAgdGhlIGJ1ZmZlcgorICAgIGp1c3QgYWJvdmUgdGhlIHN0YXRpYyBzdHJ1Y3R1cmVzIGZvciB5b3VyIG1vZHVsZSBvcgorICAgIGJ1aWx0aW4gdHlwZTsgdGhlc2UgYXJlIG5vcm1hbGx5IHZlcnkgbmVhciB0aGUgZW5kLiAgVXNpbmcKKyAgICBgYGJ1ZmZlcmBgIG1heSByZXF1aXJlIGV2ZW4gbW9yZSBlZGl0aW5nIHRoYW4gYGBmaWxlYGAsIGlmCisgICAgeW91ciBmaWxlIGhhcyBzdGF0aWMgYGBQeU1ldGhvZERlZmBgIGFycmF5cyBkZWZpbmVkIGluIHRoZQorICAgIG1pZGRsZSBvZiB0aGUgZmlsZS4KKworICAgIFN1cHByZXNzIHRoZSBgYHBhcnNlcl9wcm90b3R5cGVgYCwgYGBpbXBsX3Byb3RvdHlwZWBgLAorICAgIGFuZCBgYGRvY3N0cmluZ19wcm90b3R5cGVgYCwgd3JpdGUgdGhlIGBgaW1wbF9kZWZpbml0aW9uYGAgdG8KKyAgICBgYGJsb2NrYGAsIGFuZCB3cml0ZSBldmVyeXRoaW5nIGVsc2UgdG8gYGBmaWxlYGAuCisKKyAgYGB0d28tcGFzc2BgCisgICAgU2ltaWxhciB0byB0aGUgYGBidWZmZXJgYCBwcmVzZXQsIGJ1dCB3cml0ZXMgZm9yd2FyZCBkZWNsYXJhdGlvbnMgdG8KKyAgICB0aGUgYGB0d28tcGFzc2BgIGJ1ZmZlciwgYW5kIGRlZmluaXRpb25zIHRvIHRoZSBgYGJ1ZmZlcmBgLgorICAgIFRoaXMgaXMgc2ltaWxhciB0byB0aGUgYGBidWZmZXJgYCBwcmVzZXQsIGJ1dCBtYXkgcmVxdWlyZQorICAgIGxlc3MgZWRpdGluZyB0aGFuIGBgYnVmZmVyYGAuICBEdW1wIHRoZSBgYHR3by1wYXNzYGAgYnVmZmVyCisgICAgbmVhciB0aGUgdG9wIG9mIHlvdXIgZmlsZSwgYW5kIGR1bXAgdGhlIGBgYnVmZmVyYGAgbmVhcgorICAgIHRoZSBlbmQganVzdCBsaWtlIHlvdSB3b3VsZCB3aGVuIHVzaW5nIHRoZSBgYGJ1ZmZlcmBgIHByZXNldC4KKworICAgIFN1cHByZXNzZXMgdGhlIGBgaW1wbF9wcm90b3R5cGVgYCwgd3JpdGUgdGhlIGBgaW1wbF9kZWZpbml0aW9uYGAKKyAgICB0byBgYGJsb2NrYGAsIHdyaXRlIGBgZG9jc3RyaW5nX3Byb3RvdHlwZWBgLCBgYG1ldGhvZGRlZl9kZWZpbmVgYCwKKyAgICBhbmQgYGBwYXJzZXJfcHJvdG90eXBlYGAgdG8gYGB0d28tcGFzc2BgLCB3cml0ZSBldmVyeXRoaW5nIGVsc2UKKyAgICB0byBgYGJ1ZmZlcmBgLgorCisgIGBgcGFydGlhbC1idWZmZXJgYAorICAgIFNpbWlsYXIgdG8gdGhlIGBgYnVmZmVyYGAgcHJlc2V0LCBidXQgd3JpdGVzIG1vcmUgdGhpbmdzIHRvIGBgYmxvY2tgYCwKKyAgICBvbmx5IHdyaXRpbmcgdGhlIHJlYWxseSBiaWcgY2h1bmtzIG9mIGdlbmVyYXRlZCBjb2RlIHRvIGBgYnVmZmVyYGAuCisgICAgVGhpcyBhdm9pZHMgdGhlIGRlZmluaXRpb24tYmVmb3JlLXVzZSBwcm9ibGVtIG9mIGBgYnVmZmVyYGAgY29tcGxldGVseSwKKyAgICBhdCB0aGUgc21hbGwgY29zdCBvZiBoYXZpbmcgc2xpZ2h0bHkgbW9yZSBzdHVmZiBpbiB0aGUgYmxvY2sncyBvdXRwdXQuCisgICAgRHVtcCB0aGUgYGBidWZmZXJgYCBuZWFyIHRoZSBlbmQsIGp1c3QgbGlrZSB5b3Ugd291bGQgd2hlbiB1c2luZworICAgIHRoZSBgYGJ1ZmZlcmBgIHByZXNldC4KKworICAgIFN1cHByZXNzZXMgdGhlIGBgaW1wbF9wcm90b3R5cGVgYCwgd3JpdGUgdGhlIGBgZG9jc3RyaW5nX2RlZmluaXRpb25gYAorICAgIGFuZCBgYHBhcnNlcl9kZWZpbml0aW9uYGAgdG8gYGBidWZmZXJgYCwgd3JpdGUgZXZlcnl0aGluZyBlbHNlIHRvIGBgYmxvY2tgYC4KKworVGhlIHRoaXJkIG5ldyBkaXJlY3RpdmUgaXMgYGBkZXN0aW5hdGlvbmBgOjoKKworICAgIGRlc3RpbmF0aW9uIDxuYW1lPiA8Y29tbWFuZD4gWy4uLl0KKworVGhpcyBwZXJmb3JtcyBhbiBvcGVyYXRpb24gb24gdGhlIGRlc3RpbmF0aW9uIG5hbWVkIGBgbmFtZWBgLgorCitUaGVyZSBhcmUgdHdvIGRlZmluZWQgc3ViY29tbWFuZHM6IGBgbmV3YGAgYW5kIGBgY2xlYXJgYC4KKworVGhlIGBgbmV3YGAgc3ViY29tbWFuZCB3b3JrcyBsaWtlIHRoaXM6OgorCisgICAgZGVzdGluYXRpb24gPG5hbWU+IG5ldyA8dHlwZT4KKworVGhpcyBjcmVhdGVzIGEgbmV3IGRlc3RpbmF0aW9uIHdpdGggbmFtZSBgYDxuYW1lPmBgIGFuZCB0eXBlIGBgPHR5cGU+YGAuCisKK1RoZXJlIGFyZSBmaXZlIGRlc3RpbmF0aW9uIHR5cGVzOgorCisgICAgYGBzdXBwcmVzc2BgCisgICAgICAgIFRocm93cyB0aGUgdGV4dCBhd2F5LgorCisgICAgYGBibG9ja2BgCisgICAgICAgIFdyaXRlcyB0aGUgdGV4dCB0byB0aGUgY3VycmVudCBibG9jay4gIFRoaXMgaXMgd2hhdCBDbGluaWMKKyAgICAgICAgb3JpZ2luYWxseSBkaWQuCisKKyAgICBgYGJ1ZmZlcmBgCisgICAgICAgIEEgc2ltcGxlIHRleHQgYnVmZmVyLCBsaWtlIHRoZSAiYnVmZmVyIiBidWlsdGluIGRlc3RpbmF0aW9uIGFib3ZlLgorCisgICAgYGBmaWxlYGAKKyAgICAgICAgQSB0ZXh0IGZpbGUuICBUaGUgZmlsZSBkZXN0aW5hdGlvbiB0YWtlcyBhbiBleHRyYSBhcmd1bWVudCwKKyAgICAgICAgYSB0ZW1wbGF0ZSB0byB1c2UgZm9yIGJ1aWxkaW5nIHRoZSBmaWxlbmFtZSwgbGlrZSBzbzoKKworICAgICAgICAgICAgZGVzdGluYXRpb24gPG5hbWU+IG5ldyA8dHlwZT4gPGZpbGVfdGVtcGxhdGU+CisKKyAgICAgICAgVGhlIHRlbXBsYXRlIGNhbiB1c2UgdGhyZWUgc3RyaW5ncyBpbnRlcm5hbGx5IHRoYXQgd2lsbCBiZSByZXBsYWNlZAorICAgICAgICBieSBiaXRzIG9mIHRoZSBmaWxlbmFtZToKKworICAgICAgICAgICAge3BhdGh9CisgICAgICAgICAgICAgICAgVGhlIGZ1bGwgcGF0aCB0byB0aGUgZmlsZSwgaW5jbHVkaW5nIGRpcmVjdG9yeSBhbmQgZnVsbCBmaWxlbmFtZS4KKyAgICAgICAgICAgIHtkaXJuYW1lfQorICAgICAgICAgICAgICAgIFRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgdGhlIGZpbGUgaXMgaW4uCisgICAgICAgICAgICB7YmFzZW5hbWV9CisgICAgICAgICAgICAgICAgSnVzdCB0aGUgbmFtZSBvZiB0aGUgZmlsZSwgbm90IGluY2x1ZGluZyB0aGUgZGlyZWN0b3J5LgorICAgICAgICAgICAge2Jhc2VuYW1lX3Jvb3R9CisgICAgICAgICAgICAgICAgQmFzZW5hbWUgd2l0aCB0aGUgZXh0ZW5zaW9uIGNsaXBwZWQgb2ZmCisgICAgICAgICAgICAgICAgKGV2ZXJ5dGhpbmcgdXAgdG8gYnV0IG5vdCBpbmNsdWRpbmcgdGhlIGxhc3QgJy4nKS4KKyAgICAgICAgICAgIHtiYXNlbmFtZV9leHRlbnNpb259CisgICAgICAgICAgICAgICAgVGhlIGxhc3QgJy4nIGFuZCBldmVyeXRoaW5nIGFmdGVyIGl0LiAgSWYgdGhlIGJhc2VuYW1lCisgICAgICAgICAgICAgICAgZG9lcyBub3QgY29udGFpbiBhIHBlcmlvZCwgdGhpcyB3aWxsIGJlIHRoZSBlbXB0eSBzdHJpbmcuCisKKyAgICAgICAgSWYgdGhlcmUgYXJlIG5vIHBlcmlvZHMgaW4gdGhlIGZpbGVuYW1lLCB7YmFzZW5hbWV9IGFuZCB7ZmlsZW5hbWV9CisgICAgICAgIGFyZSB0aGUgc2FtZSwgYW5kIHtleHRlbnNpb259IGlzIGVtcHR5LiAgIntiYXNlbmFtZX17ZXh0ZW5zaW9ufSIKKyAgICAgICAgaXMgYWx3YXlzIGV4YWN0bHkgdGhlIHNhbWUgYXMgIntmaWxlbmFtZX0iLiIKKworICAgIGBgdHdvLXBhc3NgYAorICAgICAgICBBIHR3by1wYXNzIGJ1ZmZlciwgbGlrZSB0aGUgInR3by1wYXNzIiBidWlsdGluIGRlc3RpbmF0aW9uIGFib3ZlLgorCisKK1RoZSBgYGNsZWFyYGAgc3ViY29tbWFuZCB3b3JrcyBsaWtlIHRoaXM6OgorCisgICAgZGVzdGluYXRpb24gPG5hbWU+IGNsZWFyCisKK0l0IHJlbW92ZXMgYWxsIHRoZSBhY2N1bXVsYXRlZCB0ZXh0IHVwIHRvIHRoaXMgcG9pbnQgaW4gdGhlIGRlc3RpbmF0aW9uLgorKEkgZG9uJ3Qga25vdyB3aGF0IHlvdSdkIG5lZWQgdGhpcyBmb3IsIGJ1dCBJIHRob3VnaHQgbWF5YmUgaXQnZCBiZQordXNlZnVsIHdoaWxlIHNvbWVvbmUncyBleHBlcmltZW50aW5nLikKKworVGhlIGZvdXJ0aCBuZXcgZGlyZWN0aXZlIGlzIGBgc2V0YGA6OgorCisgICAgc2V0IGxpbmVfcHJlZml4ICJzdHJpbmciCisgICAgc2V0IGxpbmVfc3VmZml4ICJzdHJpbmciCisKK2Bgc2V0YGAgbGV0cyB5b3Ugc2V0IHR3byBpbnRlcm5hbCB2YXJpYWJsZXMgaW4gQ2xpbmljLgorYGBsaW5lX3ByZWZpeGBgIGlzIGEgc3RyaW5nIHRoYXQgd2lsbCBiZSBwcmVwZW5kZWQgdG8gZXZlcnkgbGluZSBvZiBDbGluaWMncyBvdXRwdXQ7CitgYGxpbmVfc3VmZml4YGAgaXMgYSBzdHJpbmcgdGhhdCB3aWxsIGJlIGFwcGVuZGVkIHRvIGV2ZXJ5IGxpbmUgb2YgQ2xpbmljJ3Mgb3V0cHV0LgorCitCb3RoIG9mIHRoZXNlIHN1cHBvcnQgdHdvIGZvcm1hdCBzdHJpbmdzOgorCisgIGBge2Jsb2NrIGNvbW1lbnQgc3RhcnR9YGAKKyAgICBUdXJucyBpbnRvIHRoZSBzdHJpbmcgYGAvKmBgLCB0aGUgc3RhcnQtY29tbWVudCB0ZXh0IHNlcXVlbmNlIGZvciBDIGZpbGVzLgorCisgIGBge2Jsb2NrIGNvbW1lbnQgZW5kfWBgCisgICAgVHVybnMgaW50byB0aGUgc3RyaW5nIGBgKi9gYCwgdGhlIGVuZC1jb21tZW50IHRleHQgc2VxdWVuY2UgZm9yIEMgZmlsZXMuCisKK1RoZSBmaW5hbCBuZXcgZGlyZWN0aXZlIGlzIG9uZSB5b3Ugc2hvdWxkbid0IG5lZWQgdG8gdXNlIGRpcmVjdGx5LAorY2FsbGVkIGBgcHJlc2VydmVgYDo6CisKKyAgICBwcmVzZXJ2ZQorCitUaGlzIHRlbGxzIENsaW5pYyB0aGF0IHRoZSBjdXJyZW50IGNvbnRlbnRzIG9mIHRoZSBvdXRwdXQgc2hvdWxkIGJlIGtlcHQsIHVubW9kaWZlZC4KK1RoaXMgaXMgdXNlZCBpbnRlcm5hbGx5IGJ5IENsaW5pYyB3aGVuIGR1bXBpbmcgb3V0cHV0IGludG8gYGBmaWxlYGAgZmlsZXM7IHdyYXBwaW5nCitpdCBpbiBhIENsaW5pYyBibG9jayBsZXRzIENsaW5pYyB1c2UgaXRzIGV4aXN0aW5nIGNoZWNrc3VtIGZ1bmN0aW9uYWxpdHkgdG8gZW5zdXJlCit0aGUgZmlsZSB3YXMgbm90IG1vZGlmaWVkIGJ5IGhhbmQgYmVmb3JlIGl0IGdldHMgb3ZlcndyaXR0ZW4uCisKKworVGhlICNpZmRlZiB0cmljaworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJZiB5b3UncmUgY29udmVydGluZyBhIGZ1bmN0aW9uIHRoYXQgaXNuJ3QgYXZhaWxhYmxlIG9uIGFsbCBwbGF0Zm9ybXMsCit0aGVyZSdzIGEgdHJpY2sgeW91IGNhbiB1c2UgdG8gbWFrZSBsaWZlIGEgbGl0dGxlIGVhc2llci4gIFRoZSBleGlzdGluZworY29kZSBwcm9iYWJseSBsb29rcyBsaWtlIHRoaXM6OgorCisgICAgI2lmZGVmIEhBVkVfRlVOQ1RJT05OQU1FCisgICAgc3RhdGljIG1vZHVsZV9mdW5jdGlvbm5hbWUoLi4uKQorICAgIHsKKyAgICAuLi4KKyAgICB9CisgICAgI2VuZGlmIC8qIEhBVkVfRlVOQ1RJT05OQU1FICovCisKK0FuZCB0aGVuIGluIHRoZSBgYFB5TWV0aG9kRGVmYGAgc3RydWN0dXJlIGF0IHRoZSBib3R0b20gdGhlIGV4aXN0aW5nIGNvZGUKK3dpbGwgaGF2ZTo6CisKKyAgICAjaWZkZWYgSEFWRV9GVU5DVElPTk5BTUUKKyAgICB7J2Z1bmN0aW9ubmFtZScsIC4uLiB9LAorICAgICNlbmRpZiAvKiBIQVZFX0ZVTkNUSU9OTkFNRSAqLworCitJbiB0aGlzIHNjZW5hcmlvLCB5b3Ugc2hvdWxkIGVuY2xvc2UgdGhlIGJvZHkgb2YgeW91ciBpbXBsIGZ1bmN0aW9uIGluc2lkZSB0aGUgYGAjaWZkZWZgYCwKK2xpa2Ugc286OgorCisgICAgI2lmZGVmIEhBVkVfRlVOQ1RJT05OQU1FCisgICAgLypbY2xpbmljIGlucHV0XQorICAgIG1vZHVsZS5mdW5jdGlvbm5hbWUKKyAgICAuLi4KKyAgICBbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisgICAgc3RhdGljIG1vZHVsZV9mdW5jdGlvbm5hbWUoLi4uKQorICAgIHsKKyAgICAuLi4KKyAgICB9CisgICAgI2VuZGlmIC8qIEhBVkVfRlVOQ1RJT05OQU1FICovCisKK1RoZW4sIHJlbW92ZSB0aG9zZSB0aHJlZSBsaW5lcyBmcm9tIHRoZSBgYFB5TWV0aG9kRGVmYGAgc3RydWN0dXJlLAorcmVwbGFjaW5nIHRoZW0gd2l0aCB0aGUgbWFjcm8gQXJndW1lbnQgQ2xpbmljIGdlbmVyYXRlZDo6CisKKyAgICBNT0RVTEVfRlVOQ1RJT05OQU1FX01FVEhPRERFRgorCisoWW91IGNhbiBmaW5kIHRoZSByZWFsIG5hbWUgZm9yIHRoaXMgbWFjcm8gaW5zaWRlIHRoZSBnZW5lcmF0ZWQgY29kZS4KK09yIHlvdSBjYW4gY2FsY3VsYXRlIGl0IHlvdXJzZWxmOiBpdCdzIHRoZSBuYW1lIG9mIHlvdXIgZnVuY3Rpb24gYXMgZGVmaW5lZAorb24gdGhlIGZpcnN0IGxpbmUgb2YgeW91ciBibG9jaywgYnV0IHdpdGggcGVyaW9kcyBjaGFuZ2VkIHRvIHVuZGVyc2NvcmVzLAordXBwZXJjYXNlZCwgYW5kIGBgIl9NRVRIT0RERUYiYGAgYWRkZWQgdG8gdGhlIGVuZC4pCisKK1BlcmhhcHMgeW91J3JlIHdvbmRlcmluZzogd2hhdCBpZiBgYEhBVkVfRlVOQ1RJT05OQU1FYGAgaXNuJ3QgZGVmaW5lZD8KK1RoZSBgYE1PRFVMRV9GVU5DVElPTk5BTUVfTUVUSE9EREVGYGAgbWFjcm8gd29uJ3QgYmUgZGVmaW5lZCBlaXRoZXIhCisKK0hlcmUncyB3aGVyZSBBcmd1bWVudCBDbGluaWMgZ2V0cyB2ZXJ5IGNsZXZlci4gIEl0IGFjdHVhbGx5IGRldGVjdHMgdGhhdCB0aGUKK0FyZ3VtZW50IENsaW5pYyBibG9jayBtaWdodCBiZSBkZWFjdGl2YXRlZCBieSB0aGUgYGAjaWZkZWZgYC4gIFdoZW4gdGhhdAoraGFwcGVucywgaXQgZ2VuZXJhdGVzIGEgbGl0dGxlIGV4dHJhIGNvZGUgdGhhdCBsb29rcyBsaWtlIHRoaXM6OgorCisgICAgI2lmbmRlZiBNT0RVTEVfRlVOQ1RJT05OQU1FX01FVEhPRERFRgorICAgICAgICAjZGVmaW5lIE1PRFVMRV9GVU5DVElPTk5BTUVfTUVUSE9EREVGCisgICAgI2VuZGlmIC8qICFkZWZpbmVkKE1PRFVMRV9GVU5DVElPTk5BTUVfTUVUSE9EREVGKSAqLworCitUaGF0IG1lYW5zIHRoZSBtYWNybyBhbHdheXMgd29ya3MuICBJZiB0aGUgZnVuY3Rpb24gaXMgZGVmaW5lZCwgdGhpcyB0dXJucworaW50byB0aGUgY29ycmVjdCBzdHJ1Y3R1cmUsIGluY2x1ZGluZyB0aGUgdHJhaWxpbmcgY29tbWEuICBJZiB0aGUgZnVuY3Rpb24gaXMKK3VuZGVmaW5lZCwgdGhpcyB0dXJucyBpbnRvIG5vdGhpbmcuCisKK0hvd2V2ZXIsIHRoaXMgY2F1c2VzIG9uZSB0aWNrbGlzaCBwcm9ibGVtOiB3aGVyZSBzaG91bGQgQXJndW1lbnQgQ2xpbmljIHB1dCB0aGlzCitleHRyYSBjb2RlIHdoZW4gdXNpbmcgdGhlICJibG9jayIgb3V0cHV0IHByZXNldD8gIEl0IGNhbid0IGdvIGluIHRoZSBvdXRwdXQgYmxvY2ssCitiZWNhdXNlIHRoYXQgY291bGQgYmUgZGVjYXRpdmF0ZWQgYnkgdGhlIGBgI2lmZGVmYGAuICAoVGhhdCdzIHRoZSB3aG9sZSBwb2ludCEpCisKK0luIHRoaXMgc2l0dWF0aW9uLCBBcmd1bWVudCBDbGluaWMgd3JpdGVzIHRoZSBleHRyYSBjb2RlIHRvIHRoZSAiYnVmZmVyIiBkZXN0aW5hdGlvbi4KK1RoaXMgbWF5IG1lYW4gdGhhdCB5b3UgZ2V0IGEgY29tcGxhaW50IGZyb20gQXJndW1lbnQgQ2xpbmljOjoKKworICAgIFdhcm5pbmcgaW4gZmlsZSAiTW9kdWxlcy9wb3NpeG1vZHVsZS5jIiBvbiBsaW5lIDEyMzU3OgorICAgIERlc3RpbmF0aW9uIGJ1ZmZlciAnYnVmZmVyJyBub3QgZW1wdHkgYXQgZW5kIG9mIGZpbGUsIGVtcHR5aW5nLgorCitXaGVuIHRoaXMgaGFwcGVucywganVzdCBvcGVuIHlvdXIgZmlsZSwgZmluZCB0aGUgYGBkdW1wIGJ1ZmZlcmBgIGJsb2NrIHRoYXQKK0FyZ3VtZW50IENsaW5pYyBhZGRlZCB0byB5b3VyIGZpbGUgKGl0J2xsIGJlIGF0IHRoZSB2ZXJ5IGJvdHRvbSksIHRoZW4KK21vdmUgaXQgYWJvdmUgdGhlIGBgUHlNZXRob2REZWZgYCBzdHJ1Y3R1cmUgd2hlcmUgdGhhdCBtYWNybyBpcyB1c2VkLgorCisKKworVXNpbmcgQXJndW1lbnQgQ2xpbmljIGluIFB5dGhvbiBmaWxlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJdCdzIGFjdHVhbGx5IHBvc3NpYmxlIHRvIHVzZSBBcmd1bWVudCBDbGluaWMgdG8gcHJlcHJvY2VzcyBQeXRob24gZmlsZXMuCitUaGVyZSdzIG5vIHBvaW50IHRvIHVzaW5nIEFyZ3VtZW50IENsaW5pYyBibG9ja3MsIG9mIGNvdXJzZSwgYXMgdGhlIG91dHB1dAord291bGRuJ3QgbWFrZSBhbnkgc2Vuc2UgdG8gdGhlIFB5dGhvbiBpbnRlcnByZXRlci4gIEJ1dCB1c2luZyBBcmd1bWVudCBDbGluaWMKK3RvIHJ1biBQeXRob24gYmxvY2tzIGxldHMgeW91IHVzZSBQeXRob24gYXMgYSBQeXRob24gcHJlcHJvY2Vzc29yIQorCitTaW5jZSBQeXRob24gY29tbWVudHMgYXJlIGRpZmZlcmVudCBmcm9tIEMgY29tbWVudHMsIEFyZ3VtZW50IENsaW5pYworYmxvY2tzIGVtYmVkZGVkIGluIFB5dGhvbiBmaWxlcyBsb29rIHNsaWdodGx5IGRpZmZlcmVudC4gIFRoZXkgbG9vayBsaWtlIHRoaXM6OgorCisgICAgIy8qW3B5dGhvbiBpbnB1dF0KKyAgICAjcHJpbnQoImRlZiBmb28oKTogcGFzcyIpCisgICAgI1tweXRob24gc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKyAgICBkZWYgZm9vKCk6IHBhc3MKKyAgICAjLypbcHl0aG9uIGNoZWNrc3VtOi4uLl0qLwpkaWZmIC0tZ2l0IGEvRG9jL2hvd3RvL2Nwb3J0aW5nLnJzdCBiL0RvYy9ob3d0by9jcG9ydGluZy5yc3QKaW5kZXggMWFkNzdkNi4uZDdhNzA4NiAxMDA2NDQKLS0tIGEvRG9jL2hvd3RvL2Nwb3J0aW5nLnJzdAorKysgYi9Eb2MvaG93dG8vY3BvcnRpbmcucnN0CkBAIC00MywxMCArNDMsOSBAQAogc3RyL3VuaWNvZGUgVW5pZmljYXRpb24KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLQotUHl0aG9uIDMncyA6ZnVuYzpgc3RyYCAoYGBQeVN0cmluZ18qYGAgZnVuY3Rpb25zIGluIEMpIHR5cGUgaXMgZXF1aXZhbGVudCB0bwotUHl0aG9uIDIncyA6ZnVuYzpgdW5pY29kZWAgKGBgUHlVbmljb2RlXypgYCkuICBUaGUgb2xkIDgtYml0IHN0cmluZyB0eXBlIGhhcwotYmVjb21lIDpmdW5jOmBieXRlc2AuICBQeXRob24gMi42IGFuZCBsYXRlciBwcm92aWRlIGEgY29tcGF0aWJpbGl0eSBoZWFkZXIsCitQeXRob24gMydzIDpmdW5jOmBzdHJgIHR5cGUgaXMgZXF1aXZhbGVudCB0byBQeXRob24gMidzIDpmdW5jOmB1bmljb2RlYDsgdGhlIEMKK2Z1bmN0aW9ucyBhcmUgY2FsbGVkIGBgUHlVbmljb2RlXypgYCBmb3IgYm90aC4gIFRoZSBvbGQgOC1iaXQgc3RyaW5nIHR5cGUgaGFzIGJlY29tZQorOmZ1bmM6YGJ5dGVzYCwgd2l0aCBDIGZ1bmN0aW9ucyBjYWxsZWQgYGBQeUJ5dGVzXypgYC4gIFB5dGhvbiAyLjYgYW5kIGxhdGVyIHByb3ZpZGUgYSBjb21wYXRpYmlsaXR5IGhlYWRlciwKIDpmaWxlOmBieXRlc29iamVjdC5oYCwgbWFwcGluZyBgYFB5Qnl0ZXNgYCBuYW1lcyB0byBgYFB5U3RyaW5nYGAgb25lcy4gIEZvciBiZXN0CiBjb21wYXRpYmlsaXR5IHdpdGggUHl0aG9uIDMsIDpjOnR5cGU6YFB5VW5pY29kZWAgc2hvdWxkIGJlIHVzZWQgZm9yIHRleHR1YWwgZGF0YSBhbmQKIDpjOnR5cGU6YFB5Qnl0ZXNgIGZvciBiaW5hcnkgZGF0YS4gIEl0J3MgYWxzbyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIgdGhhdApAQCAtMjUzLDYgKzI1Miw2IEBACiA9PT09PT09PT09PT09CiAKIElmIHlvdSBhcmUgd3JpdGluZyBhIG5ldyBleHRlbnNpb24gbW9kdWxlLCB5b3UgbWlnaHQgY29uc2lkZXIgYEN5dGhvbgotPGh0dHA6Ly93d3cuY3l0aG9uLm9yZz5gXy4gIEl0IHRyYW5zbGF0ZXMgYSBQeXRob24tbGlrZSBsYW5ndWFnZSB0byBDLiAgVGhlCis8aHR0cDovL2N5dGhvbi5vcmcvPmBfLiAgSXQgdHJhbnNsYXRlcyBhIFB5dGhvbi1saWtlIGxhbmd1YWdlIHRvIEMuICBUaGUKIGV4dGVuc2lvbiBtb2R1bGVzIGl0IGNyZWF0ZXMgYXJlIGNvbXBhdGlibGUgd2l0aCBQeXRob24gMyBhbmQgUHl0aG9uIDIuCiAKZGlmZiAtLWdpdCBhL0RvYy9ob3d0by9jdXJzZXMucnN0IGIvRG9jL2hvd3RvL2N1cnNlcy5yc3QKaW5kZXggZWE2MmIxYy4uODdhNWNhYiAxMDA2NDQKLS0tIGEvRG9jL2hvd3RvL2N1cnNlcy5yc3QKKysrIGIvRG9jL2hvd3RvL2N1cnNlcy5yc3QKQEAgLTUzOCwxMiArNTM4LDEyIEBACiBpbXBsZW1lbnQsIGJ1dCBiZWNhdXNlIG5vIG9uZSBoYXMgbmVlZGVkIHRoZW0geWV0LiAgQWxzbywgUHl0aG9uCiBkb2Vzbid0IHlldCBzdXBwb3J0IHRoZSBtZW51IGxpYnJhcnkgYXNzb2NpYXRlZCB3aXRoIG5jdXJzZXMuCiBQYXRjaGVzIGFkZGluZyBzdXBwb3J0IGZvciB0aGVzZSB3b3VsZCBiZSB3ZWxjb21lOyBzZWUKLWB0aGUgUHl0aG9uIERldmVsb3BlcidzIEd1aWRlIDxodHRwOi8vZG9jcy5weXRob24ub3JnL2Rldmd1aWRlLz5gXyB0bworYHRoZSBQeXRob24gRGV2ZWxvcGVyJ3MgR3VpZGUgPGh0dHBzOi8vZG9jcy5weXRob24ub3JnL2Rldmd1aWRlLz5gXyB0bwogbGVhcm4gbW9yZSBhYm91dCBzdWJtaXR0aW5nIHBhdGNoZXMgdG8gUHl0aG9uLgogCiAqIGBXcml0aW5nIFByb2dyYW1zIHdpdGggTkNVUlNFUyA8aHR0cDovL2ludmlzaWJsZS1pc2xhbmQubmV0L25jdXJzZXMvbmN1cnNlcy1pbnRyby5odG1sPmBfOgogICBhIGxlbmd0aHkgdHV0b3JpYWwgZm9yIEMgcHJvZ3JhbW1lcnMuCi0qIGBUaGUgbmN1cnNlcyBtYW4gcGFnZSA8aHR0cDovL3d3dy5saW51eG1hbnBhZ2VzLmNvbS9tYW4zL25jdXJzZXMuM3gucGhwPmBfCisqIGBUaGUgbmN1cnNlcyBtYW4gcGFnZSA8aHR0cDovL2xpbnV4LmRpZS5uZXQvbWFuLzMvbmN1cnNlcz5gXwogKiBgVGhlIG5jdXJzZXMgRkFRIDxodHRwOi8vaW52aXNpYmxlLWlzbGFuZC5uZXQvbmN1cnNlcy9uY3Vyc2VzLmZhcS5odG1sPmBfCiAqIGAiVXNlIGN1cnNlcy4uLiBkb24ndCBzd2VhciIgPGh0dHA6Ly93d3cueW91dHViZS5jb20vd2F0Y2g/dj1lTjFlWnRqTEVuVT5gXzoKICAgdmlkZW8gb2YgYSBQeUNvbiAyMDEzIHRhbGsgb24gY29udHJvbGxpbmcgdGVybWluYWxzIHVzaW5nIGN1cnNlcyBvciBVcndpZC4KZGlmZiAtLWdpdCBhL0RvYy9ob3d0by9kZXNjcmlwdG9yLnJzdCBiL0RvYy9ob3d0by9kZXNjcmlwdG9yLnJzdAppbmRleCBhMGM2OTg4Li41MzBmMzRiIDEwMDY0NAotLS0gYS9Eb2MvaG93dG8vZGVzY3JpcHRvci5yc3QKKysrIGIvRG9jL2hvd3RvL2Rlc2NyaXB0b3IucnN0CkBAIC05Miw5ICs5Miw5IEBACiB0cmFuc2Zvcm1zIGBgYi54YGAgaW50byBgYHR5cGUoYikuX19kaWN0X19bJ3gnXS5fX2dldF9fKGIsIHR5cGUoYikpYGAuICBUaGUKIGltcGxlbWVudGF0aW9uIHdvcmtzIHRocm91Z2ggYSBwcmVjZWRlbmNlIGNoYWluIHRoYXQgZ2l2ZXMgZGF0YSBkZXNjcmlwdG9ycwogcHJpb3JpdHkgb3ZlciBpbnN0YW5jZSB2YXJpYWJsZXMsIGluc3RhbmNlIHZhcmlhYmxlcyBwcmlvcml0eSBvdmVyIG5vbi1kYXRhCi1kZXNjcmlwdG9ycywgYW5kIGFzc2lnbnMgbG93ZXN0IHByaW9yaXR5IHRvIDptZXRoOmBfX2dldGF0dHJfX2AgaWYgcHJvdmlkZWQuICBUaGUKLWZ1bGwgQyBpbXBsZW1lbnRhdGlvbiBjYW4gYmUgZm91bmQgaW4gOmM6ZnVuYzpgUHlPYmplY3RfR2VuZXJpY0dldEF0dHIoKWAgaW4KLWBPYmplY3RzL29iamVjdC5jIDxodHRwOi8vc3ZuLnB5dGhvbi5vcmcvdmlldy9weXRob24vdHJ1bmsvT2JqZWN0cy9vYmplY3QuYz92aWV3PW1hcmt1cD5gX1wuCitkZXNjcmlwdG9ycywgYW5kIGFzc2lnbnMgbG93ZXN0IHByaW9yaXR5IHRvIDptZXRoOmBfX2dldGF0dHJfX2AgaWYgcHJvdmlkZWQuCitUaGUgZnVsbCBDIGltcGxlbWVudGF0aW9uIGNhbiBiZSBmb3VuZCBpbiA6YzpmdW5jOmBQeU9iamVjdF9HZW5lcmljR2V0QXR0cigpYCBpbgorOnNvdXJjZTpgT2JqZWN0cy9vYmplY3QuY2AuCiAKIEZvciBjbGFzc2VzLCB0aGUgbWFjaGluZXJ5IGlzIGluIDptZXRoOmB0eXBlLl9fZ2V0YXR0cmlidXRlX19gIHdoaWNoIHRyYW5zZm9ybXMKIGBgQi54YGAgaW50byBgYEIuX19kaWN0X19bJ3gnXS5fX2dldF9fKE5vbmUsIEIpYGAuICBJbiBwdXJlIFB5dGhvbiwgaXQgbG9va3MKQEAgLTEyNCwxMCArMTI0LDEwIEBACiBzZWFyY2ggdXNpbmcgOm1ldGg6YG9iamVjdC5fX2dldGF0dHJpYnV0ZV9fYC4KIAogVGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgYXJlIGluIDpjOmZ1bmM6YHN1cGVyX2dldGF0dHJvKClgIGluCi1gT2JqZWN0cy90eXBlb2JqZWN0LmMgPGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy92aWV3L3B5dGhvbi90cnVuay9PYmplY3RzL3R5cGVvYmplY3QuYz92aWV3PW1hcmt1cD5gXwotYW5kIGEgcHVyZSBQeXRob24gZXF1aXZhbGVudCBjYW4gYmUgZm91bmQgaW4gYEd1aWRvJ3MgVHV0b3JpYWxgXy4KKzpzb3VyY2U6YE9iamVjdHMvdHlwZW9iamVjdC5jYC4gIGFuZCBhIHB1cmUgUHl0aG9uIGVxdWl2YWxlbnQgY2FuIGJlIGZvdW5kIGluCitgR3VpZG8ncyBUdXRvcmlhbGBfLgogCi0uLiBfYEd1aWRvJ3MgVHV0b3JpYWxgOiBodHRwOi8vd3d3LnB5dGhvbi5vcmcvMi4yLjMvZGVzY3JpbnRyby5odG1sI2Nvb3BlcmF0aW9uCisuLiBfYEd1aWRvJ3MgVHV0b3JpYWxgOiBodHRwczovL3d3dy5weXRob24ub3JnL2Rvd25sb2FkL3JlbGVhc2VzLzIuMi4zL2Rlc2NyaW50cm8vI2Nvb3BlcmF0aW9uCiAKIFRoZSBkZXRhaWxzIGFib3ZlIHNob3cgdGhhdCB0aGUgbWVjaGFuaXNtIGZvciBkZXNjcmlwdG9ycyBpcyBlbWJlZGRlZCBpbiB0aGUKIDptZXRoOmBfX2dldGF0dHJpYnV0ZV9fKClgIG1ldGhvZHMgZm9yIDpjbGFzczpgb2JqZWN0YCwgOmNsYXNzOmB0eXBlYCwgYW5kCkBAIC0zMDAsMTAgKzMwMCw5IEBACiAKIFRoZSBvdXRwdXQgc3VnZ2VzdHMgdGhhdCBib3VuZCBhbmQgdW5ib3VuZCBtZXRob2RzIGFyZSB0d28gZGlmZmVyZW50IHR5cGVzLgogV2hpbGUgdGhleSBjb3VsZCBoYXZlIGJlZW4gaW1wbGVtZW50ZWQgdGhhdCB3YXksIHRoZSBhY3R1YWwgQyBpbXBsZW1lbnRhdGlvbiBvZgotOmM6dHlwZTpgUHlNZXRob2RfVHlwZWAgaW4KLWBPYmplY3RzL2NsYXNzb2JqZWN0LmMgPGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy92aWV3L3B5dGhvbi90cnVuay9PYmplY3RzL2NsYXNzb2JqZWN0LmM/dmlldz1tYXJrdXA+YF8KLWlzIGEgc2luZ2xlIG9iamVjdCB3aXRoIHR3byBkaWZmZXJlbnQgcmVwcmVzZW50YXRpb25zIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZQotOmF0dHI6YGltX3NlbGZgIGZpZWxkIGlzIHNldCBvciBpcyAqTlVMTCogKHRoZSBDIGVxdWl2YWxlbnQgb2YgKk5vbmUqKS4KKzpjOnR5cGU6YFB5TWV0aG9kX1R5cGVgIGluIDpzb3VyY2U6YE9iamVjdHMvY2xhc3NvYmplY3QuY2AgaXMgYSBzaW5nbGUgb2JqZWN0Cit3aXRoIHR3byBkaWZmZXJlbnQgcmVwcmVzZW50YXRpb25zIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSA6YXR0cjpgaW1fc2VsZmAKK2ZpZWxkIGlzIHNldCBvciBpcyAqTlVMTCogKHRoZSBDIGVxdWl2YWxlbnQgb2YgKk5vbmUqKS4KIAogTGlrZXdpc2UsIHRoZSBlZmZlY3RzIG9mIGNhbGxpbmcgYSBtZXRob2Qgb2JqZWN0IGRlcGVuZCBvbiB0aGUgOmF0dHI6YGltX3NlbGZgCiBmaWVsZC4gSWYgc2V0IChtZWFuaW5nIGJvdW5kKSwgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uIChzdG9yZWQgaW4gdGhlCkBAIC0zMjAsNyArMzE5LDcgQEAKIHBhdHRlcm5zIG9mIGJpbmRpbmcgZnVuY3Rpb25zIGludG8gbWV0aG9kcy4KIAogVG8gcmVjYXAsIGZ1bmN0aW9ucyBoYXZlIGEgOm1ldGg6YF9fZ2V0X19gIG1ldGhvZCBzbyB0aGF0IHRoZXkgY2FuIGJlIGNvbnZlcnRlZAotdG8gYSBtZXRob2Qgd2hlbiBhY2Nlc3NlZCBhcyBhdHRyaWJ1dGVzLiAgVGhlIG5vbi1kYXRhIGRlc2NyaXB0b3IgdHJhbnNmb3JtcyBhCit0byBhIG1ldGhvZCB3aGVuIGFjY2Vzc2VkIGFzIGF0dHJpYnV0ZXMuICBUaGUgbm9uLWRhdGEgZGVzY3JpcHRvciB0cmFuc2Zvcm1zIGFuCiBgYG9iai5mKCphcmdzKWBgIGNhbGwgaW50byBgYGYob2JqLCAqYXJncylgYC4gIENhbGxpbmcgYGBrbGFzcy5mKCphcmdzKWBgCiBiZWNvbWVzIGBgZigqYXJncylgYC4KIApkaWZmIC0tZ2l0IGEvRG9jL2hvd3RvL2Z1bmN0aW9uYWwucnN0IGIvRG9jL2hvd3RvL2Z1bmN0aW9uYWwucnN0CmluZGV4IDcxODljNjUuLjE5NjliMzIgMTAwNjQ0Ci0tLSBhL0RvYy9ob3d0by9mdW5jdGlvbmFsLnJzdAorKysgYi9Eb2MvaG93dG8vZnVuY3Rpb25hbC5yc3QKQEAgLTMsNyArMyw3IEBACiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCiA6QXV0aG9yOiBBLiBNLiBLdWNobGluZwotOlJlbGVhc2U6IDAuMzEKKzpSZWxlYXNlOiAwLjMyCiAKIEluIHRoaXMgZG9jdW1lbnQsIHdlJ2xsIHRha2UgYSB0b3VyIG9mIFB5dGhvbidzIGZlYXR1cmVzIHN1aXRhYmxlIGZvcgogaW1wbGVtZW50aW5nIHByb2dyYW1zIGluIGEgZnVuY3Rpb25hbCBzdHlsZS4gIEFmdGVyIGFuIGludHJvZHVjdGlvbiB0byB0aGUKQEAgLTE1LDkgKzE1LDkgQEAKIEludHJvZHVjdGlvbgogPT09PT09PT09PT09CiAKLVRoaXMgc2VjdGlvbiBleHBsYWlucyB0aGUgYmFzaWMgY29uY2VwdCBvZiBmdW5jdGlvbmFsIHByb2dyYW1taW5nOyBpZiB5b3UncmUKLWp1c3QgaW50ZXJlc3RlZCBpbiBsZWFybmluZyBhYm91dCBQeXRob24gbGFuZ3VhZ2UgZmVhdHVyZXMsIHNraXAgdG8gdGhlIG5leHQKLXNlY3Rpb24uCitUaGlzIHNlY3Rpb24gZXhwbGFpbnMgdGhlIGJhc2ljIGNvbmNlcHQgb2YgZnVuY3Rpb25hbCBwcm9ncmFtbWluZzsgaWYKK3lvdSdyZSBqdXN0IGludGVyZXN0ZWQgaW4gbGVhcm5pbmcgYWJvdXQgUHl0aG9uIGxhbmd1YWdlIGZlYXR1cmVzLAorc2tpcCB0byB0aGUgbmV4dCBzZWN0aW9uIG9uIDpyZWY6YGZ1bmN0aW9uYWwtaG93dG8taXRlcmF0b3JzYC4KIAogUHJvZ3JhbW1pbmcgbGFuZ3VhZ2VzIHN1cHBvcnQgZGVjb21wb3NpbmcgcHJvYmxlbXMgaW4gc2V2ZXJhbCBkaWZmZXJlbnQgd2F5czoKIApAQCAtMTczLDYgKzE3Myw4IEBACiBhIGZldyBmdW5jdGlvbnMgc3BlY2lhbGl6ZWQgZm9yIHRoZSBjdXJyZW50IHRhc2suCiAKIAorLi4gX2Z1bmN0aW9uYWwtaG93dG8taXRlcmF0b3JzOgorCiBJdGVyYXRvcnMKID09PT09PT09PQogCkBAIC01ODEsNyArNTgzLDcgQEAKIAogQmVjYXVzZSBgYHlpZWxkYGAgd2lsbCBvZnRlbiBiZSByZXR1cm5pbmcgYGBOb25lYGAsIHlvdSBzaG91bGQgYWx3YXlzIGNoZWNrIGZvcgogdGhpcyBjYXNlLiAgRG9uJ3QganVzdCB1c2UgaXRzIHZhbHVlIGluIGV4cHJlc3Npb25zIHVubGVzcyB5b3UncmUgc3VyZSB0aGF0IHRoZQotOm1ldGg6YH5nZW5lcmF0b3Iuc2VuZGAgbWV0aG9kIHdpbGwgYmUgdGhlIG9ubHkgbWV0aG9kIHVzZWQgcmVzdW1lIHlvdXIKKzptZXRoOmB+Z2VuZXJhdG9yLnNlbmRgIG1ldGhvZCB3aWxsIGJlIHRoZSBvbmx5IG1ldGhvZCB1c2VkIHRvIHJlc3VtZSB5b3VyCiBnZW5lcmF0b3IgZnVuY3Rpb24uCiAKIEluIGFkZGl0aW9uIHRvIDptZXRoOmB+Z2VuZXJhdG9yLnNlbmRgLCB0aGVyZSBhcmUgdHdvIG90aGVyIG1ldGhvZHMgb24KQEAgLTY3MCw3ICs2NzIsNyBAQAogCiA6ZnVuYzpgc29ydGVkKGl0ZXJhYmxlLCBrZXk9Tm9uZSwgcmV2ZXJzZT1GYWxzZSkgPHNvcnRlZD5gIGNvbGxlY3RzIGFsbCB0aGUKIGVsZW1lbnRzIG9mIHRoZSBpdGVyYWJsZSBpbnRvIGEgbGlzdCwgc29ydHMgdGhlIGxpc3QsIGFuZCByZXR1cm5zIHRoZSBzb3J0ZWQKLXJlc3VsdC4gIFRoZSAqa2V5KiwgYW5kICpyZXZlcnNlKiBhcmd1bWVudHMgYXJlIHBhc3NlZCB0aHJvdWdoIHRvIHRoZQorcmVzdWx0LiAgVGhlICprZXkqIGFuZCAqcmV2ZXJzZSogYXJndW1lbnRzIGFyZSBwYXNzZWQgdGhyb3VnaCB0byB0aGUKIGNvbnN0cnVjdGVkIGxpc3QncyA6bWV0aDpgfmxpc3Quc29ydGAgbWV0aG9kLiA6OgogCiAgICAgPj4+IGltcG9ydCByYW5kb20KQEAgLTgzNiw3ICs4MzgsOCBAQAogcHJlZGljYXRlLgogCiA6ZnVuYzpgaXRlcnRvb2xzLmZpbHRlcmZhbHNlKHByZWRpY2F0ZSwgaXRlcikgPGl0ZXJ0b29scy5maWx0ZXJmYWxzZT5gIGlzIHRoZQotb3Bwb3NpdGUsIHJldHVybmluZyBhbGwgZWxlbWVudHMgZm9yIHdoaWNoIHRoZSBwcmVkaWNhdGUgcmV0dXJucyBmYWxzZTo6CitvcHBvc2l0ZSBvZiA6ZnVuYzpgZmlsdGVyYCwgcmV0dXJuaW5nIGFsbCBlbGVtZW50cyBmb3Igd2hpY2ggdGhlIHByZWRpY2F0ZQorcmV0dXJucyBmYWxzZTo6CiAKICAgICBpdGVydG9vbHMuZmlsdGVyZmFsc2UoaXNfZXZlbiwgaXRlcnRvb2xzLmNvdW50KCkpID0+CiAgICAgICAxLCAzLCA1LCA3LCA5LCAxMSwgMTMsIDE1LCAuLi4KQEAgLTg2NCw2ICs4NjcsNzcgQEAKICAgICBpdGVydG9vbHMuZHJvcHdoaWxlKGlzX2V2ZW4sIGl0ZXJ0b29scy5jb3VudCgpKSA9PgogICAgICAgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIC4uLgogCis6ZnVuYzpgaXRlcnRvb2xzLmNvbXByZXNzKGRhdGEsIHNlbGVjdG9ycykgPGl0ZXJ0b29scy5jb21wcmVzcz5gIHRha2VzIHR3bworaXRlcmF0b3JzIGFuZCByZXR1cm5zIG9ubHkgdGhvc2UgZWxlbWVudHMgb2YgKmRhdGEqIGZvciB3aGljaCB0aGUgY29ycmVzcG9uZGluZworZWxlbWVudCBvZiAqc2VsZWN0b3JzKiBpcyB0cnVlLCBzdG9wcGluZyB3aGVuZXZlciBlaXRoZXIgb25lIGlzIGV4aGF1c3RlZDo6CisKKyAgICBpdGVydG9vbHMuY29tcHJlc3MoWzEsMiwzLDQsNV0sIFtUcnVlLCBUcnVlLCBGYWxzZSwgRmFsc2UsIFRydWVdKSA9PgorICAgICAgIDEsIDIsIDUKKworCitDb21iaW5hdG9yaWMgZnVuY3Rpb25zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSA6ZnVuYzpgaXRlcnRvb2xzLmNvbWJpbmF0aW9ucyhpdGVyYWJsZSwgcikgPGl0ZXJ0b29scy5jb21iaW5hdGlvbnM+YAorcmV0dXJucyBhbiBpdGVyYXRvciBnaXZpbmcgYWxsIHBvc3NpYmxlICpyKi10dXBsZSBjb21iaW5hdGlvbnMgb2YgdGhlCitlbGVtZW50cyBjb250YWluZWQgaW4gKml0ZXJhYmxlKi4gIDo6CisKKyAgICBpdGVydG9vbHMuY29tYmluYXRpb25zKFsxLCAyLCAzLCA0LCA1XSwgMikgPT4KKyAgICAgICgxLCAyKSwgKDEsIDMpLCAoMSwgNCksICgxLCA1KSwKKyAgICAgICgyLCAzKSwgKDIsIDQpLCAoMiwgNSksCisgICAgICAoMywgNCksICgzLCA1KSwKKyAgICAgICg0LCA1KQorCisgICAgaXRlcnRvb2xzLmNvbWJpbmF0aW9ucyhbMSwgMiwgMywgNCwgNV0sIDMpID0+CisgICAgICAoMSwgMiwgMyksICgxLCAyLCA0KSwgKDEsIDIsIDUpLCAoMSwgMywgNCksICgxLCAzLCA1KSwgKDEsIDQsIDUpLAorICAgICAgKDIsIDMsIDQpLCAoMiwgMywgNSksICgyLCA0LCA1KSwKKyAgICAgICgzLCA0LCA1KQorCitUaGUgZWxlbWVudHMgd2l0aGluIGVhY2ggdHVwbGUgcmVtYWluIGluIHRoZSBzYW1lIG9yZGVyIGFzCisqaXRlcmFibGUqIHJldHVybmVkIHRoZW0uICBGb3IgZXhhbXBsZSwgdGhlIG51bWJlciAxIGlzIGFsd2F5cyBiZWZvcmUKKzIsIDMsIDQsIG9yIDUgaW4gdGhlIGV4YW1wbGVzIGFib3ZlLiAgQSBzaW1pbGFyIGZ1bmN0aW9uLAorOmZ1bmM6YGl0ZXJ0b29scy5wZXJtdXRhdGlvbnMoaXRlcmFibGUsIHI9Tm9uZSkgPGl0ZXJ0b29scy5wZXJtdXRhdGlvbnM+YCwKK3JlbW92ZXMgdGhpcyBjb25zdHJhaW50IG9uIHRoZSBvcmRlciwgcmV0dXJuaW5nIGFsbCBwb3NzaWJsZQorYXJyYW5nZW1lbnRzIG9mIGxlbmd0aCAqcio6OgorCisgICAgaXRlcnRvb2xzLnBlcm11dGF0aW9ucyhbMSwgMiwgMywgNCwgNV0sIDIpID0+CisgICAgICAoMSwgMiksICgxLCAzKSwgKDEsIDQpLCAoMSwgNSksCisgICAgICAoMiwgMSksICgyLCAzKSwgKDIsIDQpLCAoMiwgNSksCisgICAgICAoMywgMSksICgzLCAyKSwgKDMsIDQpLCAoMywgNSksCisgICAgICAoNCwgMSksICg0LCAyKSwgKDQsIDMpLCAoNCwgNSksCisgICAgICAoNSwgMSksICg1LCAyKSwgKDUsIDMpLCAoNSwgNCkKKworICAgIGl0ZXJ0b29scy5wZXJtdXRhdGlvbnMoWzEsIDIsIDMsIDQsIDVdKSA9PgorICAgICAgKDEsIDIsIDMsIDQsIDUpLCAoMSwgMiwgMywgNSwgNCksICgxLCAyLCA0LCAzLCA1KSwKKyAgICAgIC4uLgorICAgICAgKDUsIDQsIDMsIDIsIDEpCisKK0lmIHlvdSBkb24ndCBzdXBwbHkgYSB2YWx1ZSBmb3IgKnIqIHRoZSBsZW5ndGggb2YgdGhlIGl0ZXJhYmxlIGlzIHVzZWQsCittZWFuaW5nIHRoYXQgYWxsIHRoZSBlbGVtZW50cyBhcmUgcGVybXV0ZWQuCisKK05vdGUgdGhhdCB0aGVzZSBmdW5jdGlvbnMgcHJvZHVjZSBhbGwgb2YgdGhlIHBvc3NpYmxlIGNvbWJpbmF0aW9ucyBieQorcG9zaXRpb24gYW5kIGRvbid0IHJlcXVpcmUgdGhhdCB0aGUgY29udGVudHMgb2YgKml0ZXJhYmxlKiBhcmUgdW5pcXVlOjoKKworICAgIGl0ZXJ0b29scy5wZXJtdXRhdGlvbnMoJ2FiYScsIDMpID0+CisgICAgICAoJ2EnLCAnYicsICdhJyksICgnYScsICdhJywgJ2InKSwgKCdiJywgJ2EnLCAnYScpLAorICAgICAgKCdiJywgJ2EnLCAnYScpLCAoJ2EnLCAnYScsICdiJyksICgnYScsICdiJywgJ2EnKQorCitUaGUgaWRlbnRpY2FsIHR1cGxlIGBgKCdhJywgJ2EnLCAnYicpYGAgb2NjdXJzIHR3aWNlLCBidXQgdGhlIHR3byAnYScKK3N0cmluZ3MgY2FtZSBmcm9tIGRpZmZlcmVudCBwb3NpdGlvbnMuCisKK1RoZSA6ZnVuYzpgaXRlcnRvb2xzLmNvbWJpbmF0aW9uc193aXRoX3JlcGxhY2VtZW50KGl0ZXJhYmxlLCByKSA8aXRlcnRvb2xzLmNvbWJpbmF0aW9uc193aXRoX3JlcGxhY2VtZW50PmAKK2Z1bmN0aW9uIHJlbGF4ZXMgYSBkaWZmZXJlbnQgY29uc3RyYWludDogZWxlbWVudHMgY2FuIGJlIHJlcGVhdGVkCit3aXRoaW4gYSBzaW5nbGUgdHVwbGUuICBDb25jZXB0dWFsbHkgYW4gZWxlbWVudCBpcyBzZWxlY3RlZCBmb3IgdGhlCitmaXJzdCBwb3NpdGlvbiBvZiBlYWNoIHR1cGxlIGFuZCB0aGVuIGlzIHJlcGxhY2VkIGJlZm9yZSB0aGUgc2Vjb25kCitlbGVtZW50IGlzIHNlbGVjdGVkLiAgOjoKKworICAgIGl0ZXJ0b29scy5jb21iaW5hdGlvbnNfd2l0aF9yZXBsYWNlbWVudChbMSwgMiwgMywgNCwgNV0sIDIpID0+CisgICAgICAoMSwgMSksICgxLCAyKSwgKDEsIDMpLCAoMSwgNCksICgxLCA1KSwKKyAgICAgICgyLCAyKSwgKDIsIDMpLCAoMiwgNCksICgyLCA1KSwKKyAgICAgICgzLCAzKSwgKDMsIDQpLCAoMywgNSksCisgICAgICAoNCwgNCksICg0LCA1KSwKKyAgICAgICg1LCA1KQorCiAKIEdyb3VwaW5nIGVsZW1lbnRzCiAtLS0tLS0tLS0tLS0tLS0tLQpAQCAtOTg2LDYgKzEwNjAsMTcgQEAKICAgIGZvciBpIGluIFsxLDIsM106CiAgICAgICAgcHJvZHVjdCAqPSBpCiAKK0EgcmVsYXRlZCBmdW5jdGlvbiBpcyBgaXRlcnRvb2xzLmFjY3VtdWxhdGUoaXRlcmFibGUsIGZ1bmM9b3BlcmF0b3IuYWRkKSA8aXRlcnRvb2xzLmFjY3VtdWxhdGVgLgorSXQgcGVyZm9ybXMgdGhlIHNhbWUgY2FsY3VsYXRpb24sIGJ1dCBpbnN0ZWFkIG9mIHJldHVybmluZyBvbmx5IHRoZQorZmluYWwgcmVzdWx0LCA6ZnVuYzpgYWNjdW11bGF0ZWAgcmV0dXJucyBhbiBpdGVyYXRvciB0aGF0IGFsc28geWllbGRzCitlYWNoIHBhcnRpYWwgcmVzdWx0OjoKKworICAgIGl0ZXJ0b29scy5hY2N1bXVsYXRlKFsxLDIsMyw0LDVdKSA9PgorICAgICAgMSwgMywgNiwgMTAsIDE1CisKKyAgICBpdGVydG9vbHMuYWNjdW11bGF0ZShbMSwyLDMsNCw1XSwgb3BlcmF0b3IubXVsKSA9PgorICAgICAgMSwgMiwgNiwgMjQsIDEyMAorCiAKIFRoZSBvcGVyYXRvciBtb2R1bGUKIC0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTExNTksNTEgKzEyNDQsNiBAQAogCiAuLiBjb21tZW50CiAKLSAgICBUb3BpY3MgdG8gcGxhY2UKLSAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gICAgWFhYIG9zLndhbGsoKQotCi0gICAgWFhYIE5lZWQgYSBsYXJnZSBleGFtcGxlLgotCi0gICAgQnV0IHdpbGwgYW4gZXhhbXBsZSBhZGQgbXVjaD8gIEknbGwgcG9zdCBhIGZpcnN0IGRyYWZ0IGFuZCBzZWUKLSAgICB3aGF0IHRoZSBjb21tZW50cyBzYXkuCi0KLS4uIGNvbW1lbnQKLQotICAgIE9yaWdpbmFsIG91dGxpbmU6Ci0gICAgSW50cm9kdWN0aW9uCi0gICAgICAgICAgICBJZGVhIG9mIEZQCi0gICAgICAgICAgICAgICAgICAgIFByb2dyYW1zIGJ1aWx0IG91dCBvZiBmdW5jdGlvbnMKLSAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb25zIGFyZSBzdHJpY3RseSBpbnB1dC1vdXRwdXQsIG5vIGludGVybmFsIHN0YXRlCi0gICAgICAgICAgICBPcHBvc2VkIHRvIE9PIHByb2dyYW1taW5nLCB3aGVyZSBvYmplY3RzIGhhdmUgc3RhdGUKLQotICAgICAgICAgICAgV2h5IEZQPwotICAgICAgICAgICAgICAgICAgICBGb3JtYWwgcHJvdmFiaWxpdHkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBBc3NpZ25tZW50IGlzIGRpZmZpY3VsdCB0byByZWFzb24gYWJvdXQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb3QgdmVyeSByZWxldmFudCB0byBQeXRob24KLSAgICAgICAgICAgICAgICAgICAgTW9kdWxhcml0eQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNtYWxsIGZ1bmN0aW9ucyB0aGF0IGRvIG9uZSB0aGluZwotICAgICAgICAgICAgICAgICAgICBEZWJ1Z2dhYmlsaXR5OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVhc3kgdG8gdGVzdCBkdWUgdG8gbGFjayBvZiBzdGF0ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVhc3kgdG8gdmVyaWZ5IG91dHB1dCBmcm9tIGludGVybWVkaWF0ZSBzdGVwcwotICAgICAgICAgICAgICAgICAgICBDb21wb3NhYmlsaXR5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgWW91IGFzc2VtYmxlIGEgdG9vbGJveCBvZiBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgbWl4ZWQKLQotICAgIFRhY2tsaW5nIGEgcHJvYmxlbQotICAgICAgICAgICAgTmVlZCBhIHNpZ25pZmljYW50IGV4YW1wbGUKLQotICAgIEl0ZXJhdG9ycwotICAgIEdlbmVyYXRvcnMKLSAgICBUaGUgaXRlcnRvb2xzIG1vZHVsZQotICAgIExpc3QgY29tcHJlaGVuc2lvbnMKLSAgICBTbWFsbCBmdW5jdGlvbnMgYW5kIHRoZSBsYW1iZGEgc3RhdGVtZW50Ci0gICAgQnVpbHQtaW4gZnVuY3Rpb25zCi0gICAgICAgICAgICBtYXAKLSAgICAgICAgICAgIGZpbHRlcgotCi0uLiBjb21tZW50Ci0KICAgICBIYW5keSBsaXR0bGUgZnVuY3Rpb24gZm9yIHByaW50aW5nIHBhcnQgb2YgYW4gaXRlcmF0b3IgLS0gdXNlZAogICAgIHdoaWxlIHdyaXRpbmcgdGhpcyBkb2N1bWVudC4KIApAQCAtMTIxNCw1ICsxMjU0LDMgQEAKICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKHN0cihlbGVtKSkKICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCcsICcpCiAgICAgICAgIHByaW50KGVsZW1bLTFdKQotCi0KZGlmZiAtLWdpdCBhL0RvYy9ob3d0by9pbmRleC5yc3QgYi9Eb2MvaG93dG8vaW5kZXgucnN0CmluZGV4IDgxYTRmOGIuLjJjOWQ2OTkgMTAwNjQ0Ci0tLSBhL0RvYy9ob3d0by9pbmRleC5yc3QKKysrIGIvRG9jL2hvd3RvL2luZGV4LnJzdApAQCAtMjgsNCArMjgsNSBAQAogICAgd2Vic2VydmVycy5yc3QKICAgIGFyZ3BhcnNlLnJzdAogICAgaXBhZGRyZXNzLnJzdAorICAgY2xpbmljLnJzdAogCmRpZmYgLS1naXQgYS9Eb2MvaG93dG8vbG9nZ2luZy1jb29rYm9vay5yc3QgYi9Eb2MvaG93dG8vbG9nZ2luZy1jb29rYm9vay5yc3QKaW5kZXggNTYzZGE5ZC4uYWY4ODhjMiAxMDA2NDQKLS0tIGEvRG9jL2hvd3RvL2xvZ2dpbmctY29va2Jvb2sucnN0CisrKyBiL0RvYy9ob3d0by9sb2dnaW5nLWNvb2tib29rLnJzdApAQCAtNDE2LDcgKzQxNiw3IEBACiAgICAgICAgU2ltcGxlIFRDUCBzb2NrZXQtYmFzZWQgbG9nZ2luZyByZWNlaXZlciBzdWl0YWJsZSBmb3IgdGVzdGluZy4KICAgICAgICAiIiIKIAotICAgICAgIGFsbG93X3JldXNlX2FkZHJlc3MgPSAxCisgICAgICAgYWxsb3dfcmV1c2VfYWRkcmVzcyA9IFRydWUKIAogICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBob3N0PSdsb2NhbGhvc3QnLAogICAgICAgICAgICAgICAgICAgICBwb3J0PWxvZ2dpbmcuaGFuZGxlcnMuREVGQVVMVF9UQ1BfTE9HR0lOR19QT1JULApAQCAtNjQ5LDcgKzY0OSw3IEBACiBub3QgbWFrZSB1c2Ugb2YgOm1vZDpgbXVsdGlwcm9jZXNzaW5nYCBhdCBwcmVzZW50LCB0aG91Z2ggdGhleSBtYXkgZG8gc28gaW4gdGhlCiBmdXR1cmUuIE5vdGUgdGhhdCBhdCBwcmVzZW50LCB0aGUgOm1vZDpgbXVsdGlwcm9jZXNzaW5nYCBtb2R1bGUgZG9lcyBub3QgcHJvdmlkZQogd29ya2luZyBsb2NrIGZ1bmN0aW9uYWxpdHkgb24gYWxsIHBsYXRmb3JtcyAoc2VlCi1odHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMzc3MCkuCitodHRwczovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTM3NzApLgogCiAuLiBjdXJyZW50bW9kdWxlOjogbG9nZ2luZy5oYW5kbGVycwogCkBAIC03MDQsOSArNzA0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgICAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcihyZWNvcmQubmFtZSkKICAgICAgICAgICAgICAgICBsb2dnZXIuaGFuZGxlKHJlY29yZCkgIyBObyBsZXZlbCBvciBmaWx0ZXIgbG9naWMgYXBwbGllZCAtIGp1c3QgZG8gaXQhCi0gICAgICAgICAgICBleGNlcHQgKEtleWJvYXJkSW50ZXJydXB0LCBTeXN0ZW1FeGl0KToKLSAgICAgICAgICAgICAgICByYWlzZQotICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKICAgICAgICAgICAgICAgICBpbXBvcnQgc3lzLCB0cmFjZWJhY2sKICAgICAgICAgICAgICAgICBwcmludCgnV2hvb3BzISBQcm9ibGVtOicsIGZpbGU9c3lzLnN0ZGVycikKICAgICAgICAgICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKGZpbGU9c3lzLnN0ZGVycikKQEAgLTEzMTAsNyArMTMwOCw3IEBACiAgICAgfQogCiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIGNvbmZpZ3VyYXRpb24sIHlvdSBjYW4gc2VlIHRoZSBgcmVsZXZhbnQKLXNlY3Rpb24gPGh0dHBzOi8vZG9jcy5kamFuZ29wcm9qZWN0LmNvbS9lbi8xLjMvdG9waWNzL2xvZ2dpbmcvI2NvbmZpZ3VyaW5nLWxvZ2dpbmc+YF8KK3NlY3Rpb24gPGh0dHBzOi8vZG9jcy5kamFuZ29wcm9qZWN0LmNvbS9lbi8xLjYvdG9waWNzL2xvZ2dpbmcvI2NvbmZpZ3VyaW5nLWxvZ2dpbmc+YF8KIG9mIHRoZSBEamFuZ28gZG9jdW1lbnRhdGlvbi4KIAogLi4gX2Nvb2tib29rLXJvdGF0b3ItbmFtZXI6CkBAIC0xNDEwLDcgKzE0MDgsNyBAQAogICAgIGRlZiB3b3JrZXJfcHJvY2Vzcyhjb25maWcpOgogICAgICAgICAiIiIKICAgICAgICAgQSBudW1iZXIgb2YgdGhlc2UgYXJlIHNwYXduZWQgZm9yIHRoZSBwdXJwb3NlIG9mIGlsbHVzdHJhdGlvbi4gSW4KLSAgICAgICAgcHJhY3RpY2UsIHRoZXkgY291bGQgYmUgYSBoZXRlcm9nZW5vdXMgYnVuY2ggb2YgcHJvY2Vzc2VzIHJhdGhlciB0aGFuCisgICAgICAgIHByYWN0aWNlLCB0aGV5IGNvdWxkIGJlIGEgaGV0ZXJvZ2VuZW91cyBidW5jaCBvZiBwcm9jZXNzZXMgcmF0aGVyIHRoYW4KICAgICAgICAgb25lcyB3aGljaCBhcmUgaWRlbnRpY2FsIHRvIGVhY2ggb3RoZXIuCiAKICAgICAgICAgVGhpcyBpbml0aWFsaXNlcyBsb2dnaW5nIGFjY29yZGluZyB0byB0aGUgc3BlY2lmaWVkIGNvbmZpZ3VyYXRpb24sCkBAIC0yMDM1LDMgKzIwMzMsMzE1IEBACiAgIGluZm9ybWF0aW9uIG9uIGhvdyBsb2dnaW5nIHN1cHBvcnRzIHVzaW5nIHVzZXItZGVmaW5lZCBvYmplY3RzIGluIGl0cwogICBjb25maWd1cmF0aW9uLCBhbmQgc2VlIHRoZSBvdGhlciBjb29rYm9vayByZWNpcGUgOnJlZjpgY3VzdG9tLWhhbmRsZXJzYCBhYm92ZS4KIAorCisuLiBfY3VzdG9tLWZvcm1hdC1leGNlcHRpb246CisKK0N1c3RvbWl6ZWQgZXhjZXB0aW9uIGZvcm1hdHRpbmcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlcmUgbWlnaHQgYmUgdGltZXMgd2hlbiB5b3Ugd2FudCB0byBkbyBjdXN0b21pemVkIGV4Y2VwdGlvbiBmb3JtYXR0aW5nIC0gZm9yCithcmd1bWVudCdzIHNha2UsIGxldCdzIHNheSB5b3Ugd2FudCBleGFjdGx5IG9uZSBsaW5lIHBlciBsb2dnZWQgZXZlbnQsIGV2ZW4KK3doZW4gZXhjZXB0aW9uIGluZm9ybWF0aW9uIGlzIHByZXNlbnQuIFlvdSBjYW4gZG8gdGhpcyB3aXRoIGEgY3VzdG9tIGZvcm1hdHRlcgorY2xhc3MsIGFzIHNob3duIGluIHRoZSBmb2xsb3dpbmcgZXhhbXBsZTo6CisKKyAgICBpbXBvcnQgbG9nZ2luZworCisgICAgY2xhc3MgT25lTGluZUV4Y2VwdGlvbkZvcm1hdHRlcihsb2dnaW5nLkZvcm1hdHRlcik6CisgICAgICAgIGRlZiBmb3JtYXRFeGNlcHRpb24oc2VsZiwgZXhjX2luZm8pOgorICAgICAgICAgICAgIiIiCisgICAgICAgICAgICBGb3JtYXQgYW4gZXhjZXB0aW9uIHNvIHRoYXQgaXQgcHJpbnRzIG9uIGEgc2luZ2xlIGxpbmUuCisgICAgICAgICAgICAiIiIKKyAgICAgICAgICAgIHJlc3VsdCA9IHN1cGVyKE9uZUxpbmVFeGNlcHRpb25Gb3JtYXR0ZXIsIHNlbGYpLmZvcm1hdEV4Y2VwdGlvbihleGNfaW5mbykKKyAgICAgICAgICAgIHJldHVybiByZXByKHJlc3VsdCkgIyBvciBmb3JtYXQgaW50byBvbmUgbGluZSBob3dldmVyIHlvdSB3YW50IHRvCisKKyAgICAgICAgZGVmIGZvcm1hdChzZWxmLCByZWNvcmQpOgorICAgICAgICAgICAgcyA9IHN1cGVyKE9uZUxpbmVFeGNlcHRpb25Gb3JtYXR0ZXIsIHNlbGYpLmZvcm1hdChyZWNvcmQpCisgICAgICAgICAgICBpZiByZWNvcmQuZXhjX3RleHQ6CisgICAgICAgICAgICAgICAgcyA9IHMucmVwbGFjZSgnXG4nLCAnJykgKyAnfCcKKyAgICAgICAgICAgIHJldHVybiBzCisKKyAgICBkZWYgY29uZmlndXJlX2xvZ2dpbmcoKToKKyAgICAgICAgZmggPSBsb2dnaW5nLkZpbGVIYW5kbGVyKCdvdXRwdXQudHh0JywgJ3cnKQorICAgICAgICBmID0gT25lTGluZUV4Y2VwdGlvbkZvcm1hdHRlcignJShhc2N0aW1lKXN8JShsZXZlbG5hbWUpc3wlKG1lc3NhZ2Upc3wnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJWQvJW0vJVkgJUg6JU06JVMnKQorICAgICAgICBmaC5zZXRGb3JtYXR0ZXIoZikKKyAgICAgICAgcm9vdCA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCkKKyAgICAgICAgcm9vdC5zZXRMZXZlbChsb2dnaW5nLkRFQlVHKQorICAgICAgICByb290LmFkZEhhbmRsZXIoZmgpCisKKyAgICBkZWYgbWFpbigpOgorICAgICAgICBjb25maWd1cmVfbG9nZ2luZygpCisgICAgICAgIGxvZ2dpbmcuaW5mbygnU2FtcGxlIG1lc3NhZ2UnKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB4ID0gMSAvIDAKKyAgICAgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yIGFzIGU6CisgICAgICAgICAgICBsb2dnaW5nLmV4Y2VwdGlvbignWmVyb0RpdmlzaW9uRXJyb3I6ICVzJywgZSkKKworICAgIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgICAgIG1haW4oKQorCitXaGVuIHJ1biwgdGhpcyBwcm9kdWNlcyBhIGZpbGUgd2l0aCBleGFjdGx5IHR3byBsaW5lczo6CisKKyAgICAyOC8wMS8yMDE1IDA3OjIxOjIzfElORk98U2FtcGxlIG1lc3NhZ2V8CisgICAgMjgvMDEvMjAxNSAwNzoyMToyM3xFUlJPUnxaZXJvRGl2aXNpb25FcnJvcjogaW50ZWdlciBkaXZpc2lvbiBvciBtb2R1bG8gYnkgemVyb3wnVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOlxuICBGaWxlICJsb2d0ZXN0Ny5weSIsIGxpbmUgMzAsIGluIG1haW5cbiAgICB4ID0gMSAvIDBcblplcm9EaXZpc2lvbkVycm9yOiBpbnRlZ2VyIGRpdmlzaW9uIG9yIG1vZHVsbyBieSB6ZXJvJ3wKKworV2hpbGUgdGhlIGFib3ZlIHRyZWF0bWVudCBpcyBzaW1wbGlzdGljLCBpdCBwb2ludHMgdGhlIHdheSB0byBob3cgZXhjZXB0aW9uCitpbmZvcm1hdGlvbiBjYW4gYmUgZm9ybWF0dGVkIHRvIHlvdXIgbGlraW5nLiBUaGUgOm1vZDpgdHJhY2ViYWNrYCBtb2R1bGUgbWF5IGJlCitoZWxwZnVsIGZvciBtb3JlIHNwZWNpYWxpemVkIG5lZWRzLgorCisuLiBfc3Bva2VuLW1lc3NhZ2VzOgorCitTcGVha2luZyBsb2dnaW5nIG1lc3NhZ2VzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZXJlIG1pZ2h0IGJlIHNpdHVhdGlvbnMgd2hlbiBpdCBpcyBkZXNpcmFibGUgdG8gaGF2ZSBsb2dnaW5nIG1lc3NhZ2VzIHJlbmRlcmVkCitpbiBhbiBhdWRpYmxlIHJhdGhlciB0aGFuIGEgdmlzaWJsZSBmb3JtYXQuIFRoaXMgaXMgZWFzeSB0byBkbyBpZiB5b3UgaGF2ZSB0ZXh0LQordG8tc3BlZWNoIChUVFMpIGZ1bmN0aW9uYWxpdHkgYXZhaWxhYmxlIGluIHlvdXIgc3lzdGVtLCBldmVuIGlmIGl0IGRvZXNuJ3QgaGF2ZQorYSBQeXRob24gYmluZGluZy4gTW9zdCBUVFMgc3lzdGVtcyBoYXZlIGEgY29tbWFuZCBsaW5lIHByb2dyYW0geW91IGNhbiBydW4sIGFuZAordGhpcyBjYW4gYmUgaW52b2tlZCBmcm9tIGEgaGFuZGxlciB1c2luZyA6bW9kOmBzdWJwcm9jZXNzYC4gSXQncyBhc3N1bWVkIGhlcmUKK3RoYXQgVFRTIGNvbW1hbmQgbGluZSBwcm9ncmFtcyB3b24ndCBleHBlY3QgdG8gaW50ZXJhY3Qgd2l0aCB1c2VycyBvciB0YWtlIGEKK2xvbmcgdGltZSB0byBjb21wbGV0ZSwgYW5kIHRoYXQgdGhlIGZyZXF1ZW5jeSBvZiBsb2dnZWQgbWVzc2FnZXMgd2lsbCBiZSBub3Qgc28KK2hpZ2ggYXMgdG8gc3dhbXAgdGhlIHVzZXIgd2l0aCBtZXNzYWdlcywgYW5kIHRoYXQgaXQncyBhY2NlcHRhYmxlIHRvIGhhdmUgdGhlCittZXNzYWdlcyBzcG9rZW4gb25lIGF0IGEgdGltZSByYXRoZXIgdGhhbiBjb25jdXJyZW50bHksIFRoZSBleGFtcGxlIGltcGxlbWVudGF0aW9uCitiZWxvdyB3YWl0cyBmb3Igb25lIG1lc3NhZ2UgdG8gYmUgc3Bva2VuIGJlZm9yZSB0aGUgbmV4dCBpcyBwcm9jZXNzZWQsIGFuZCB0aGlzCittaWdodCBjYXVzZSBvdGhlciBoYW5kbGVycyB0byBiZSBrZXB0IHdhaXRpbmcuIEhlcmUgaXMgYSBzaG9ydCBleGFtcGxlIHNob3dpbmcKK3RoZSBhcHByb2FjaCwgd2hpY2ggYXNzdW1lcyB0aGF0IHRoZSBgYGVzcGVha2BgIFRUUyBwYWNrYWdlIGlzIGF2YWlsYWJsZTo6CisKKyAgICBpbXBvcnQgbG9nZ2luZworICAgIGltcG9ydCBzdWJwcm9jZXNzCisgICAgaW1wb3J0IHN5cworCisgICAgY2xhc3MgVFRTSGFuZGxlcihsb2dnaW5nLkhhbmRsZXIpOgorICAgICAgICBkZWYgZW1pdChzZWxmLCByZWNvcmQpOgorICAgICAgICAgICAgbXNnID0gc2VsZi5mb3JtYXQocmVjb3JkKQorICAgICAgICAgICAgIyBTcGVhayBzbG93bHkgaW4gYSBmZW1hbGUgRW5nbGlzaCB2b2ljZQorICAgICAgICAgICAgY21kID0gWydlc3BlYWsnLCAnLXMxNTAnLCAnLXZlbitmMycsIG1zZ10KKyAgICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKGNtZCwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKKyAgICAgICAgICAgICMgd2FpdCBmb3IgdGhlIHByb2dyYW0gdG8gZmluaXNoCisgICAgICAgICAgICBwLmNvbW11bmljYXRlKCkKKworICAgIGRlZiBjb25maWd1cmVfbG9nZ2luZygpOgorICAgICAgICBoID0gVFRTSGFuZGxlcigpCisgICAgICAgIHJvb3QgPSBsb2dnaW5nLmdldExvZ2dlcigpCisgICAgICAgIHJvb3QuYWRkSGFuZGxlcihoKQorICAgICAgICAjIHRoZSBkZWZhdWx0IGZvcm1hdHRlciBqdXN0IHJldHVybnMgdGhlIG1lc3NhZ2UKKyAgICAgICAgcm9vdC5zZXRMZXZlbChsb2dnaW5nLkRFQlVHKQorCisgICAgZGVmIG1haW4oKToKKyAgICAgICAgbG9nZ2luZy5pbmZvKCdIZWxsbycpCisgICAgICAgIGxvZ2dpbmcuZGVidWcoJ0dvb2RieWUnKQorCisgICAgaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICAgICAgY29uZmlndXJlX2xvZ2dpbmcoKQorICAgICAgICBzeXMuZXhpdChtYWluKCkpCisKK1doZW4gcnVuLCB0aGlzIHNjcmlwdCBzaG91bGQgc2F5ICJIZWxsbyIgYW5kIHRoZW4gIkdvb2RieWUiIGluIGEgZmVtYWxlIHZvaWNlLgorCitUaGUgYWJvdmUgYXBwcm9hY2ggY2FuLCBvZiBjb3Vyc2UsIGJlIGFkYXB0ZWQgdG8gb3RoZXIgVFRTIHN5c3RlbXMgYW5kIGV2ZW4KK290aGVyIHN5c3RlbXMgYWx0b2dldGhlciB3aGljaCBjYW4gcHJvY2VzcyBtZXNzYWdlcyB2aWEgZXh0ZXJuYWwgcHJvZ3JhbXMgcnVuCitmcm9tIGEgY29tbWFuZCBsaW5lLgorCisKKy4uIF9idWZmZXJlZC1sb2dnaW5nOgorCitCdWZmZXJpbmcgbG9nZ2luZyBtZXNzYWdlcyBhbmQgb3V0cHV0dGluZyB0aGVtIGNvbmRpdGlvbmFsbHkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGVyZSBtaWdodCBiZSBzaXR1YXRpb25zIHdoZXJlIHlvdSB3YW50IHRvIGxvZyBtZXNzYWdlcyBpbiBhIHRlbXBvcmFyeSBhcmVhCithbmQgb25seSBvdXRwdXQgdGhlbSBpZiBhIGNlcnRhaW4gY29uZGl0aW9uIG9jY3Vycy4gRm9yIGV4YW1wbGUsIHlvdSBtYXkgd2FudCB0bworc3RhcnQgbG9nZ2luZyBkZWJ1ZyBldmVudHMgaW4gYSBmdW5jdGlvbiwgYW5kIGlmIHRoZSBmdW5jdGlvbiBjb21wbGV0ZXMgd2l0aG91dAorZXJyb3JzLCB5b3UgZG9uJ3Qgd2FudCB0byBjbHV0dGVyIHRoZSBsb2cgd2l0aCB0aGUgY29sbGVjdGVkIGRlYnVnIGluZm9ybWF0aW9uLAorYnV0IGlmIHRoZXJlIGlzIGFuIGVycm9yLCB5b3Ugd2FudCBhbGwgdGhlIGRlYnVnIGluZm9ybWF0aW9uIHRvIGJlIG91dHB1dCBhcyB3ZWxsCithcyB0aGUgZXJyb3IuCisKK0hlcmUgaXMgYW4gZXhhbXBsZSB3aGljaCBzaG93cyBob3cgeW91IGNvdWxkIGRvIHRoaXMgdXNpbmcgYSBkZWNvcmF0b3IgZm9yIHlvdXIKK2Z1bmN0aW9ucyB3aGVyZSB5b3Ugd2FudCBsb2dnaW5nIHRvIGJlaGF2ZSB0aGlzIHdheS4gSXQgbWFrZXMgdXNlIG9mIHRoZQorOmNsYXNzOmBsb2dnaW5nLmhhbmRsZXJzLk1lbW9yeUhhbmRsZXJgLCB3aGljaCBhbGxvd3MgYnVmZmVyaW5nIG9mIGxvZ2dlZCBldmVudHMKK3VudGlsIHNvbWUgY29uZGl0aW9uIG9jY3VycywgYXQgd2hpY2ggcG9pbnQgdGhlIGJ1ZmZlcmVkIGV2ZW50cyBhcmUgYGBmbHVzaGVkYGAKKy0gcGFzc2VkIHRvIGFub3RoZXIgaGFuZGxlciAodGhlIGBgdGFyZ2V0YGAgaGFuZGxlcikgZm9yIHByb2Nlc3NpbmcuIEJ5IGRlZmF1bHQsCit0aGUgYGBNZW1vcnlIYW5kbGVyYGAgZmx1c2hlZCB3aGVuIGl0cyBidWZmZXIgZ2V0cyBmaWxsZWQgdXAgb3IgYW4gZXZlbnQgd2hvc2UKK2xldmVsIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBhIHNwZWNpZmllZCB0aHJlc2hvbGQgaXMgc2Vlbi4gWW91IGNhbiB1c2UgdGhpcworcmVjaXBlIHdpdGggYSBtb3JlIHNwZWNpYWxpc2VkIHN1YmNsYXNzIG9mIGBgTWVtb3J5SGFuZGxlcmBgIGlmIHlvdSB3YW50IGN1c3RvbQorZmx1c2hpbmcgYmVoYXZpb3IuCisKK1RoZSBleGFtcGxlIHNjcmlwdCBoYXMgYSBzaW1wbGUgZnVuY3Rpb24sIGBgZm9vYGAsIHdoaWNoIGp1c3QgY3ljbGVzIHRocm91Z2gKK2FsbCB0aGUgbG9nZ2luZyBsZXZlbHMsIHdyaXRpbmcgdG8gYGBzeXMuc3RkZXJyYGAgdG8gc2F5IHdoYXQgbGV2ZWwgaXQncyBhYm91dAordG8gbG9nIGF0LCBhbmQgdGhlbiBhY3R1YWxseSBsb2dnaW5nIGEgbWVzc2FnZSB0aGF0IHRoYXQgbGV2ZWwuIFlvdSBjYW4gcGFzcyBhCitwYXJhbWV0ZXIgdG8gYGBmb29gYCB3aGljaCwgaWYgdHJ1ZSwgd2lsbCBsb2cgYXQgRVJST1IgYW5kIENSSVRJQ0FMIGxldmVscyAtCitvdGhlcndpc2UsIGl0IG9ubHkgbG9ncyBhdCBERUJVRywgSU5GTyBhbmQgV0FSTklORyBsZXZlbHMuCisKK1RoZSBzY3JpcHQganVzdCBhcnJhbmdlcyB0byBkZWNvcmF0ZSBgYGZvb2BgIHdpdGggYSBkZWNvcmF0b3Igd2hpY2ggd2lsbCBkbyB0aGUKK2NvbmRpdGlvbmFsIGxvZ2dpbmcgdGhhdCdzIHJlcXVpcmVkLiBUaGUgZGVjb3JhdG9yIHRha2VzIGEgbG9nZ2VyIGFzIGEgcGFyYW1ldGVyCithbmQgYXR0YWNoZXMgYSBtZW1vcnkgaGFuZGxlciBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBjYWxsIHRvIHRoZSBkZWNvcmF0ZWQKK2Z1bmN0aW9uLiBUaGUgZGVjb3JhdG9yIGNhbiBiZSBhZGRpdGlvbmFsbHkgcGFyYW1ldGVyaXNlZCB1c2luZyBhIHRhcmdldCBoYW5kbGVyLAorYSBsZXZlbCBhdCB3aGljaCBmbHVzaGluZyBzaG91bGQgb2NjdXIsIGFuZCBhIGNhcGFjaXR5IGZvciB0aGUgYnVmZmVyLiBUaGVzZQorZGVmYXVsdCB0byBhIDpjbGFzczpgfmxvZ2dpbmcuU3RyZWFtSGFuZGxlcmAgd2hpY2ggd3JpdGVzIHRvIGBgc3lzLnN0ZGVycmBgLAorYGBsb2dnaW5nLkVSUk9SYGAgYW5kIGBgMTAwYGAgcmVzcGVjdGl2ZWx5LgorCitIZXJlJ3MgdGhlIHNjcmlwdDo6CisKKyAgICBpbXBvcnQgbG9nZ2luZworICAgIGZyb20gbG9nZ2luZy5oYW5kbGVycyBpbXBvcnQgTWVtb3J5SGFuZGxlcgorICAgIGltcG9ydCBzeXMKKworICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQorICAgIGxvZ2dlci5hZGRIYW5kbGVyKGxvZ2dpbmcuTnVsbEhhbmRsZXIoKSkKKworICAgIGRlZiBsb2dfaWZfZXJyb3JzKGxvZ2dlciwgdGFyZ2V0X2hhbmRsZXI9Tm9uZSwgZmx1c2hfbGV2ZWw9Tm9uZSwgY2FwYWNpdHk9Tm9uZSk6CisgICAgICAgIGlmIHRhcmdldF9oYW5kbGVyIGlzIE5vbmU6CisgICAgICAgICAgICB0YXJnZXRfaGFuZGxlciA9IGxvZ2dpbmcuU3RyZWFtSGFuZGxlcigpCisgICAgICAgIGlmIGZsdXNoX2xldmVsIGlzIE5vbmU6CisgICAgICAgICAgICBmbHVzaF9sZXZlbCA9IGxvZ2dpbmcuRVJST1IKKyAgICAgICAgaWYgY2FwYWNpdHkgaXMgTm9uZToKKyAgICAgICAgICAgIGNhcGFjaXR5ID0gMTAwCisgICAgICAgIGhhbmRsZXIgPSBNZW1vcnlIYW5kbGVyKGNhcGFjaXR5LCBmbHVzaExldmVsPWZsdXNoX2xldmVsLCB0YXJnZXQ9dGFyZ2V0X2hhbmRsZXIpCisKKyAgICAgICAgZGVmIGRlY29yYXRvcihmbik6CisgICAgICAgICAgICBkZWYgd3JhcHBlcigqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAgICAgICAgIGxvZ2dlci5hZGRIYW5kbGVyKGhhbmRsZXIpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm4oKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5leGNlcHRpb24oJ2NhbGwgZmFpbGVkJykKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgICAgICBzdXBlcihNZW1vcnlIYW5kbGVyLCBoYW5kbGVyKS5mbHVzaCgpCisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5yZW1vdmVIYW5kbGVyKGhhbmRsZXIpCisgICAgICAgICAgICByZXR1cm4gd3JhcHBlcgorCisgICAgICAgIHJldHVybiBkZWNvcmF0b3IKKworICAgIGRlZiB3cml0ZV9saW5lKHMpOgorICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCclc1xuJyAlIHMpCisKKyAgICBkZWYgZm9vKGZhaWw9RmFsc2UpOgorICAgICAgICB3cml0ZV9saW5lKCdhYm91dCB0byBsb2cgYXQgREVCVUcgLi4uJykKKyAgICAgICAgbG9nZ2VyLmRlYnVnKCdBY3R1YWxseSBsb2dnZWQgYXQgREVCVUcnKQorICAgICAgICB3cml0ZV9saW5lKCdhYm91dCB0byBsb2cgYXQgSU5GTyAuLi4nKQorICAgICAgICBsb2dnZXIuaW5mbygnQWN0dWFsbHkgbG9nZ2VkIGF0IElORk8nKQorICAgICAgICB3cml0ZV9saW5lKCdhYm91dCB0byBsb2cgYXQgV0FSTklORyAuLi4nKQorICAgICAgICBsb2dnZXIud2FybmluZygnQWN0dWFsbHkgbG9nZ2VkIGF0IFdBUk5JTkcnKQorICAgICAgICBpZiBmYWlsOgorICAgICAgICAgICAgd3JpdGVfbGluZSgnYWJvdXQgdG8gbG9nIGF0IEVSUk9SIC4uLicpCisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoJ0FjdHVhbGx5IGxvZ2dlZCBhdCBFUlJPUicpCisgICAgICAgICAgICB3cml0ZV9saW5lKCdhYm91dCB0byBsb2cgYXQgQ1JJVElDQUwgLi4uJykKKyAgICAgICAgICAgIGxvZ2dlci5jcml0aWNhbCgnQWN0dWFsbHkgbG9nZ2VkIGF0IENSSVRJQ0FMJykKKyAgICAgICAgcmV0dXJuIGZhaWwKKworICAgIGRlY29yYXRlZF9mb28gPSBsb2dfaWZfZXJyb3JzKGxvZ2dlcikoZm9vKQorCisgICAgaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICAgICAgbG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuREVCVUcpCisgICAgICAgIHdyaXRlX2xpbmUoJ0NhbGxpbmcgdW5kZWNvcmF0ZWQgZm9vIHdpdGggRmFsc2UnKQorICAgICAgICBhc3NlcnQgbm90IGZvbyhGYWxzZSkKKyAgICAgICAgd3JpdGVfbGluZSgnQ2FsbGluZyB1bmRlY29yYXRlZCBmb28gd2l0aCBUcnVlJykKKyAgICAgICAgYXNzZXJ0IGZvbyhUcnVlKQorICAgICAgICB3cml0ZV9saW5lKCdDYWxsaW5nIGRlY29yYXRlZCBmb28gd2l0aCBGYWxzZScpCisgICAgICAgIGFzc2VydCBub3QgZGVjb3JhdGVkX2ZvbyhGYWxzZSkKKyAgICAgICAgd3JpdGVfbGluZSgnQ2FsbGluZyBkZWNvcmF0ZWQgZm9vIHdpdGggVHJ1ZScpCisgICAgICAgIGFzc2VydCBkZWNvcmF0ZWRfZm9vKFRydWUpCisKK1doZW4gdGhpcyBzY3JpcHQgaXMgcnVuLCB0aGUgZm9sbG93aW5nIG91dHB1dCBzaG91bGQgYmUgb2JzZXJ2ZWQ6OgorCisgICAgQ2FsbGluZyB1bmRlY29yYXRlZCBmb28gd2l0aCBGYWxzZQorICAgIGFib3V0IHRvIGxvZyBhdCBERUJVRyAuLi4KKyAgICBhYm91dCB0byBsb2cgYXQgSU5GTyAuLi4KKyAgICBhYm91dCB0byBsb2cgYXQgV0FSTklORyAuLi4KKyAgICBDYWxsaW5nIHVuZGVjb3JhdGVkIGZvbyB3aXRoIFRydWUKKyAgICBhYm91dCB0byBsb2cgYXQgREVCVUcgLi4uCisgICAgYWJvdXQgdG8gbG9nIGF0IElORk8gLi4uCisgICAgYWJvdXQgdG8gbG9nIGF0IFdBUk5JTkcgLi4uCisgICAgYWJvdXQgdG8gbG9nIGF0IEVSUk9SIC4uLgorICAgIGFib3V0IHRvIGxvZyBhdCBDUklUSUNBTCAuLi4KKyAgICBDYWxsaW5nIGRlY29yYXRlZCBmb28gd2l0aCBGYWxzZQorICAgIGFib3V0IHRvIGxvZyBhdCBERUJVRyAuLi4KKyAgICBhYm91dCB0byBsb2cgYXQgSU5GTyAuLi4KKyAgICBhYm91dCB0byBsb2cgYXQgV0FSTklORyAuLi4KKyAgICBDYWxsaW5nIGRlY29yYXRlZCBmb28gd2l0aCBUcnVlCisgICAgYWJvdXQgdG8gbG9nIGF0IERFQlVHIC4uLgorICAgIGFib3V0IHRvIGxvZyBhdCBJTkZPIC4uLgorICAgIGFib3V0IHRvIGxvZyBhdCBXQVJOSU5HIC4uLgorICAgIGFib3V0IHRvIGxvZyBhdCBFUlJPUiAuLi4KKyAgICBBY3R1YWxseSBsb2dnZWQgYXQgREVCVUcKKyAgICBBY3R1YWxseSBsb2dnZWQgYXQgSU5GTworICAgIEFjdHVhbGx5IGxvZ2dlZCBhdCBXQVJOSU5HCisgICAgQWN0dWFsbHkgbG9nZ2VkIGF0IEVSUk9SCisgICAgYWJvdXQgdG8gbG9nIGF0IENSSVRJQ0FMIC4uLgorICAgIEFjdHVhbGx5IGxvZ2dlZCBhdCBDUklUSUNBTAorCitBcyB5b3UgY2FuIHNlZSwgYWN0dWFsIGxvZ2dpbmcgb3V0cHV0IG9ubHkgb2NjdXJzIHdoZW4gYW4gZXZlbnQgaXMgbG9nZ2VkIHdob3NlCitzZXZlcml0eSBpcyBFUlJPUiBvciBncmVhdGVyLCBidXQgaW4gdGhhdCBjYXNlLCBhbnkgcHJldmlvdXMgZXZlbnRzIGF0IGxvd2VyCitzZXZlcml0aWVzIGFyZSBhbHNvIGxvZ2dlZC4KKworWW91IGNhbiBvZiBjb3Vyc2UgdXNlIHRoZSBjb252ZW50aW9uYWwgbWVhbnMgb2YgZGVjb3JhdGlvbjo6CisKKyAgICBAbG9nX2lmX2Vycm9ycyhsb2dnZXIpCisgICAgZGVmIGZvbyhmYWlsPUZhbHNlKToKKyAgICAgICAgLi4uCisKKworLi4gX3V0Yy1mb3JtYXR0aW5nOgorCitGb3JtYXR0aW5nIHRpbWVzIHVzaW5nIFVUQyAoR01UKSB2aWEgY29uZmlndXJhdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU29tZXRpbWVzIHlvdSB3YW50IHRvIGZvcm1hdCB0aW1lcyB1c2luZyBVVEMsIHdoaWNoIGNhbiBiZSBkb25lIHVzaW5nIGEgY2xhc3MKK3N1Y2ggYXMgYFVUQ0Zvcm1hdHRlcmAsIHNob3duIGJlbG93OjoKKworICAgIGltcG9ydCBsb2dnaW5nCisgICAgaW1wb3J0IHRpbWUKKworICAgIGNsYXNzIFVUQ0Zvcm1hdHRlcihsb2dnaW5nLkZvcm1hdHRlcik6CisgICAgICAgIGNvbnZlcnRlciA9IHRpbWUuZ210aW1lCisKK2FuZCB5b3UgY2FuIHRoZW4gdXNlIHRoZSBgYFVUQ0Zvcm1hdHRlcmBgIGluIHlvdXIgY29kZSBpbnN0ZWFkIG9mCis6Y2xhc3M6YH5sb2dnaW5nLkZvcm1hdHRlcmAuIElmIHlvdSB3YW50IHRvIGRvIHRoYXQgdmlhIGNvbmZpZ3VyYXRpb24sIHlvdSBjYW4KK3VzZSB0aGUgOmZ1bmM6YH5sb2dnaW5nLmNvbmZpZy5kaWN0Q29uZmlnYCBBUEkgd2l0aCBhbiBhcHByb2FjaCBpbGx1c3RyYXRlZCBieQordGhlIGZvbGxvd2luZyBjb21wbGV0ZSBleGFtcGxlOjoKKworICAgIGltcG9ydCBsb2dnaW5nCisgICAgaW1wb3J0IGxvZ2dpbmcuY29uZmlnCisgICAgaW1wb3J0IHRpbWUKKworICAgIGNsYXNzIFVUQ0Zvcm1hdHRlcihsb2dnaW5nLkZvcm1hdHRlcik6CisgICAgICAgIGNvbnZlcnRlciA9IHRpbWUuZ210aW1lCisKKyAgICBMT0dHSU5HID0geworICAgICAgICAndmVyc2lvbic6IDEsCisgICAgICAgICdkaXNhYmxlX2V4aXN0aW5nX2xvZ2dlcnMnOiBGYWxzZSwKKyAgICAgICAgJ2Zvcm1hdHRlcnMnOiB7CisgICAgICAgICAgICAndXRjJzogeworICAgICAgICAgICAgICAgICcoKSc6IFVUQ0Zvcm1hdHRlciwKKyAgICAgICAgICAgICAgICAnZm9ybWF0JzogJyUoYXNjdGltZSlzICUobWVzc2FnZSlzJywKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICAnbG9jYWwnOiB7CisgICAgICAgICAgICAgICAgJ2Zvcm1hdCc6ICclKGFzY3RpbWUpcyAlKG1lc3NhZ2UpcycsCisgICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgICdoYW5kbGVycyc6IHsKKyAgICAgICAgICAgICdjb25zb2xlMSc6IHsKKyAgICAgICAgICAgICAgICAnY2xhc3MnOiAnbG9nZ2luZy5TdHJlYW1IYW5kbGVyJywKKyAgICAgICAgICAgICAgICAnZm9ybWF0dGVyJzogJ3V0YycsCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgJ2NvbnNvbGUyJzogeworICAgICAgICAgICAgICAgICdjbGFzcyc6ICdsb2dnaW5nLlN0cmVhbUhhbmRsZXInLAorICAgICAgICAgICAgICAgICdmb3JtYXR0ZXInOiAnbG9jYWwnLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgICAgJ3Jvb3QnOiB7CisgICAgICAgICAgICAnaGFuZGxlcnMnOiBbJ2NvbnNvbGUxJywgJ2NvbnNvbGUyJ10sCisgICAgICAgfQorICAgIH0KKworICAgIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgICAgIGxvZ2dpbmcuY29uZmlnLmRpY3RDb25maWcoTE9HR0lORykKKyAgICAgICAgbG9nZ2luZy53YXJuaW5nKCdUaGUgbG9jYWwgdGltZSBpcyAlcycsIHRpbWUuYXNjdGltZSgpKQorCitXaGVuIHRoaXMgc2NyaXB0IGlzIHJ1biwgaXQgc2hvdWxkIHByaW50IHNvbWV0aGluZyBsaWtlOjoKKworICAgIDIwMTUtMTAtMTcgMTI6NTM6MjksNTAxIFRoZSBsb2NhbCB0aW1lIGlzIFNhdCBPY3QgMTcgMTM6NTM6MjkgMjAxNQorICAgIDIwMTUtMTAtMTcgMTM6NTM6MjksNTAxIFRoZSBsb2NhbCB0aW1lIGlzIFNhdCBPY3QgMTcgMTM6NTM6MjkgMjAxNQorCitzaG93aW5nIGhvdyB0aGUgdGltZSBpcyBmb3JtYXR0ZWQgYm90aCBhcyBsb2NhbCB0aW1lIGFuZCBVVEMsIG9uZSBmb3IgZWFjaAoraGFuZGxlci4KZGlmZiAtLWdpdCBhL0RvYy9ob3d0by9sb2dnaW5nLnJzdCBiL0RvYy9ob3d0by9sb2dnaW5nLnJzdAppbmRleCA1NWIxYzg2Li40Y2UxNGY5IDEwMDY0NAotLS0gYS9Eb2MvaG93dG8vbG9nZ2luZy5yc3QKKysrIGIvRG9jL2hvd3RvL2xvZ2dpbmcucnN0CkBAIC05MDEsMTAgKzkwMSwxMCBAQAogICAgZGlzayBmaWxlcywgcm90YXRpbmcgdGhlIGxvZyBmaWxlIGF0IGNlcnRhaW4gdGltZWQgaW50ZXJ2YWxzLgogCiAjLiA6Y2xhc3M6YH5oYW5kbGVycy5Tb2NrZXRIYW5kbGVyYCBpbnN0YW5jZXMgc2VuZCBtZXNzYWdlcyB0byBUQ1AvSVAKLSAgIHNvY2tldHMuCisgICBzb2NrZXRzLiBTaW5jZSAzLjQsIFVuaXggZG9tYWluIHNvY2tldHMgYXJlIGFsc28gc3VwcG9ydGVkLgogCiAjLiA6Y2xhc3M6YH5oYW5kbGVycy5EYXRhZ3JhbUhhbmRsZXJgIGluc3RhbmNlcyBzZW5kIG1lc3NhZ2VzIHRvIFVEUAotICAgc29ja2V0cy4KKyAgIHNvY2tldHMuIFNpbmNlIDMuNCwgVW5peCBkb21haW4gc29ja2V0cyBhcmUgYWxzbyBzdXBwb3J0ZWQuCiAKICMuIDpjbGFzczpgfmhhbmRsZXJzLlNNVFBIYW5kbGVyYCBpbnN0YW5jZXMgc2VuZCBtZXNzYWdlcyB0byBhIGRlc2lnbmF0ZWQKICAgIGVtYWlsIGFkZHJlc3MuCkBAIC0xMDI3LDYgKzEwMjcsMTUgQEAKIHNvIHRoYXQgaWYgdGhlIGxvZ2dlcidzIHRocmVzaG9sZCBpcyBzZXQgYWJvdmUgYGBERUJVR2BgLCB0aGUgY2FsbHMgdG8KIDpmdW5jOmBleHBlbnNpdmVfZnVuYzFgIGFuZCA6ZnVuYzpgZXhwZW5zaXZlX2Z1bmMyYCBhcmUgbmV2ZXIgbWFkZS4KIAorLi4gbm90ZTo6IEluIHNvbWUgY2FzZXMsIDptZXRoOmB+TG9nZ2VyLmlzRW5hYmxlZEZvcmAgY2FuIGl0c2VsZiBiZSBtb3JlCisgICBleHBlbnNpdmUgdGhhbiB5b3UnZCBsaWtlIChlLmcuIGZvciBkZWVwbHkgbmVzdGVkIGxvZ2dlcnMgd2hlcmUgYW4gZXhwbGljaXQKKyAgIGxldmVsIGlzIG9ubHkgc2V0IGhpZ2ggdXAgaW4gdGhlIGxvZ2dlciBoaWVyYXJjaHkpLiBJbiBzdWNoIGNhc2VzIChvciBpZiB5b3UKKyAgIHdhbnQgdG8gYXZvaWQgY2FsbGluZyBhIG1ldGhvZCBpbiB0aWdodCBsb29wcyksIHlvdSBjYW4gY2FjaGUgdGhlIHJlc3VsdCBvZiBhCisgICBjYWxsIHRvIDptZXRoOmB+TG9nZ2VyLmlzRW5hYmxlZEZvcmAgaW4gYSBsb2NhbCBvciBpbnN0YW5jZSB2YXJpYWJsZSwgYW5kIHVzZQorICAgdGhhdCBpbnN0ZWFkIG9mIGNhbGxpbmcgdGhlIG1ldGhvZCBlYWNoIHRpbWUuIFN1Y2ggYSBjYWNoZWQgdmFsdWUgd291bGQgb25seQorICAgbmVlZCB0byBiZSByZWNvbXB1dGVkIHdoZW4gdGhlIGxvZ2dpbmcgY29uZmlndXJhdGlvbiBjaGFuZ2VzIGR5bmFtaWNhbGx5CisgICB3aGlsZSB0aGUgYXBwbGljYXRpb24gaXMgcnVubmluZyAod2hpY2ggaXMgbm90IGFsbCB0aGF0IGNvbW1vbikuCisKIFRoZXJlIGFyZSBvdGhlciBvcHRpbWl6YXRpb25zIHdoaWNoIGNhbiBiZSBtYWRlIGZvciBzcGVjaWZpYyBhcHBsaWNhdGlvbnMgd2hpY2gKIG5lZWQgbW9yZSBwcmVjaXNlIGNvbnRyb2wgb3ZlciB3aGF0IGxvZ2dpbmcgaW5mb3JtYXRpb24gaXMgY29sbGVjdGVkLiBIZXJlJ3MgYQogbGlzdCBvZiB0aGluZ3MgeW91IGNhbiBkbyB0byBhdm9pZCBwcm9jZXNzaW5nIGR1cmluZyBsb2dnaW5nIHdoaWNoIHlvdSBkb24ndApAQCAtMTAzNiw2ICsxMDQ1LDEyIEBACiB8IFdoYXQgeW91IGRvbid0IHdhbnQgdG8gY29sbGVjdCAgICAgICAgICAgICAgICB8IEhvdyB0byBhdm9pZCBjb2xsZWN0aW5nIGl0ICAgICAgICAgICAgIHwKICs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KwogfCBJbmZvcm1hdGlvbiBhYm91dCB3aGVyZSBjYWxscyB3ZXJlIG1hZGUgZnJvbS4gfCBTZXQgYGBsb2dnaW5nLl9zcmNmaWxlYGAgdG8gYGBOb25lYGAuICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFRoaXMgYXZvaWRzIGNhbGxpbmcgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgOmZ1bmM6YHN5cy5fZ2V0ZnJhbWVgLCB3aGljaCBtYXkgaGVscCAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0byBzcGVlZCB1cCB5b3VyIGNvZGUgaW4gZW52aXJvbm1lbnRzICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGxpa2UgUHlQeSAod2hpY2ggY2FuJ3Qgc3BlZWQgdXAgY29kZSAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdGhhdCB1c2VzIDpmdW5jOmBzeXMuX2dldGZyYW1lYCksIGlmICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhbmQgd2hlbiBQeVB5IHN1cHBvcnRzIFB5dGhvbiAzLnguICAgICB8CiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIHwgVGhyZWFkaW5nIGluZm9ybWF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgIHwgU2V0IGBgbG9nZ2luZy5sb2dUaHJlYWRzYGAgdG8gYGAwYGAuICAgfAogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCmRpZmYgLS1naXQgYS9Eb2MvaG93dG8vcHlwb3J0aW5nLnJzdCBiL0RvYy9ob3d0by9weXBvcnRpbmcucnN0CmluZGV4IDlkN2U4NTkuLjVlODc1Y2QgMTAwNjQ0Ci0tLSBhL0RvYy9ob3d0by9weXBvcnRpbmcucnN0CisrKyBiL0RvYy9ob3d0by9weXBvcnRpbmcucnN0CkBAIC0xOSw2MDcgKzE5LDM3NSBAQAogICAgSWYgeW91IHdvdWxkIGxpa2UgdG8gcmVhZCBvbmUgY29yZSBQeXRob24gZGV2ZWxvcGVyJ3MgdGFrZSBvbiB3aHkgUHl0aG9uIDMKICAgIGNhbWUgaW50byBleGlzdGVuY2UsIHlvdSBjYW4gcmVhZCBOaWNrIENvZ2hsYW4ncyBgUHl0aG9uIDMgUSAmIEFgXy4KIAotICAgSWYgeW91IHByZWZlciB0byByZWFkIGEgKGZyZWUpIGJvb2sgb24gcG9ydGluZyBhIHByb2plY3QgdG8gUHl0aG9uIDMsCi0gICBjb25zaWRlciByZWFkaW5nIGBQb3J0aW5nIHRvIFB5dGhvbiAzYF8gYnkgTGVubmFydCBSZWdlYnJvIHdoaWNoIHNob3VsZCBjb3ZlcgotICAgbXVjaCBvZiB3aGF0IGlzIGRpc2N1c3NlZCBpbiB0aGlzIEhPV1RPLgotCiAgICBGb3IgaGVscCB3aXRoIHBvcnRpbmcsIHlvdSBjYW4gZW1haWwgdGhlIHB5dGhvbi1wb3J0aW5nXyBtYWlsaW5nIGxpc3Qgd2l0aAogICAgcXVlc3Rpb25zLgogCi1UaGUgU2hvcnQgVmVyc2lvbgotPT09PT09PT09PT09PT09PT0KK1RoZSBTaG9ydCBFeHBsYW5hdGlvbgorPT09PT09PT09PT09PT09PT09PT09CiAKLSogRGVjaWRlIHdoYXQncyB0aGUgb2xkZXN0IHZlcnNpb24gb2YgUHl0aG9uIDIgeW91IHdhbnQgdG8gc3VwcG9ydCAoaWYgYXQgYWxsKQotKiBNYWtlIHN1cmUgeW91IGhhdmUgYSB0aG9yb3VnaCB0ZXN0IHN1aXRlIGFuZCB1c2UgY29udGludW91cyBpbnRlZ3JhdGlvbgotICB0ZXN0aW5nIHRvIG1ha2Ugc3VyZSB5b3Ugc3RheSBjb21wYXRpYmxlIHdpdGggdGhlIHZlcnNpb25zIG9mIFB5dGhvbiB5b3UgY2FyZQotICBhYm91dAotKiBJZiB5b3UgaGF2ZSBkZXBlbmRlbmNpZXMsIGNoZWNrIHRoZWlyIFB5dGhvbiAzIHN0YXR1cyB1c2luZyBjYW5pdXNlcHl0aG9uMwotICAoYGNvbW1hbmQtbGluZSB0b29sIDxodHRwczovL3B5cGkucHl0aG9uLm9yZy9weXBpL2Nhbml1c2VweXRob24zPmBfXywKLSAgYHdlYiBhcHAgPGh0dHBzOi8vY2FuaXVzZXB5dGhvbjMuY29tLz5gX18pCitUbyBtYWtlIHlvdXIgcHJvamVjdCBiZSBzaW5nbGUtc291cmNlIFB5dGhvbiAyLzMgY29tcGF0aWJsZSwgdGhlIGJhc2ljIHN0ZXBzCithcmU6CiAKLVdpdGggdGhhdCBkb25lLCB5b3VyIG9wdGlvbnMgYXJlOgorIy4gT25seSB3b3JyeSBhYm91dCBzdXBwb3J0aW5nIFB5dGhvbiAyLjcKKyMuIE1ha2Ugc3VyZSB5b3UgaGF2ZSBnb29kIHRlc3QgY292ZXJhZ2UgKGNvdmVyYWdlLnB5XyBjYW4gaGVscDsKKyAgIGBgcGlwIGluc3RhbGwgY292ZXJhZ2VgYCkKKyMuIExlYXJuIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIFB5dGhvbiAyICYgMworIy4gVXNlIE1vZGVybml6ZV8gb3IgRnV0dXJpemVfIHRvIHVwZGF0ZSB5b3VyIGNvZGUgKGBgcGlwIGluc3RhbGwgbW9kZXJuaXplYGAgb3IKKyAgIGBgcGlwIGluc3RhbGwgZnV0dXJlYGAsIHJlc3BlY3RpdmVseSkKKyMuIFVzZSBQeWxpbnRfIHRvIGhlbHAgbWFrZSBzdXJlIHlvdSBkb24ndCByZWdyZXNzIG9uIHlvdXIgUHl0aG9uIDMgc3VwcG9ydAorICAgKGBgcGlwIGluc3RhbGwgcHlsaW50YGApCisjLiBVc2UgY2FuaXVzZXB5dGhvbjNfIHRvIGZpbmQgb3V0IHdoaWNoIG9mIHlvdXIgZGVwZW5kZW5jaWVzIGFyZSBibG9ja2luZyB5b3VyCisgICB1c2Ugb2YgUHl0aG9uIDMgKGBgcGlwIGluc3RhbGwgY2FuaXVzZXB5dGhvbjNgYCkKKyMuIE9uY2UgeW91ciBkZXBlbmRlbmNpZXMgYXJlIG5vIGxvbmdlciBibG9ja2luZyB5b3UsIHVzZSBjb250aW51b3VzIGludGVncmF0aW9uCisgICB0byBtYWtlIHN1cmUgeW91IHN0YXkgY29tcGF0aWJsZSB3aXRoIFB5dGhvbiAyICYgMyAodG94XyBjYW4gaGVscCB0ZXN0CisgICBhZ2FpbnN0IG11bHRpcGxlIHZlcnNpb25zIG9mIFB5dGhvbjsgYGBwaXAgaW5zdGFsbCB0b3hgYCkKIAotKiBJZiB5b3UgYXJlIGRyb3BwaW5nIFB5dGhvbiAyIHN1cHBvcnQsIHVzZSAydG8zXyB0byBwb3J0IHRvIFB5dGhvbiAzCi0qIElmIHlvdSBhcmUga2VlcGluZyBQeXRob24gMiBzdXBwb3J0LCB0aGVuIHN0YXJ0IHdyaXRpbmcgUHl0aG9uIDIvMy1jb21wYXRpYmxlCi0gIGNvZGUgc3RhcnRpbmcgKipUT0RBWSoqCitJZiB5b3UgYXJlIGRyb3BwaW5nIHN1cHBvcnQgZm9yIFB5dGhvbiAyIGVudGlyZWx5LCB0aGVuIGFmdGVyIHlvdSBsZWFybiB0aGUKK2RpZmZlcmVuY2VzIGJldHdlZW4gUHl0aG9uIDIgJiAzIHlvdSBjYW4gcnVuIDJ0bzNfIG92ZXIgeW91ciBjb2RlIGFuZCBza2lwIHRoZQorcmVzdCBvZiB0aGUgc3RlcHMgb3V0bGluZWQgYWJvdmUuCiAKLSAgKyBJZiB5b3UgaGF2ZSBkZXBlbmRlbmNpZXMgdGhhdCBoYXZlIG5vdCBiZWVuIHBvcnRlZCwgcmVhY2ggb3V0IHRvIHRoZW0gdG8gcG9ydAotICAgIHRoZWlyIHByb2plY3Qgd2hpbGUgd29ya2luZyB0byBtYWtlIHlvdXIgY29kZSBjb21wYXRpYmxlIHdpdGggUHl0aG9uIDMgc28KLSAgICB5b3UncmUgcmVhZHkgd2hlbiB5b3VyIGRlcGVuZGVuY2llcyBhcmUgYWxsIHBvcnRlZAotICArIElmIGFsbCB5b3VyIGRlcGVuZGVuY2llcyBoYXZlIGJlZW4gcG9ydGVkIChvciB5b3UgaGF2ZSBub25lKSwgZ28gYWhlYWQgYW5kCi0gICAgcG9ydCB0byBQeXRob24gMwogCi0qIElmIHlvdSBhcmUgY3JlYXRpbmcgYSBuZXcgcHJvamVjdCB0aGF0IHdhbnRzIHRvIGhhdmUgMi8zIGNvbXBhdGliaWxpdHksCi0gIGNvZGUgaW4gUHl0aG9uIDMgYW5kIHRoZW4gYmFja3BvcnQgdG8gUHl0aG9uIDIKK0RldGFpbHMKKz09PT09PT0KIAorQSBrZXkgcG9pbnQgYWJvdXQgc3VwcG9ydGluZyBQeXRob24gMiAmIDMgc2ltdWx0YW5lb3VzbHkgaXMgdGhhdCB5b3UgY2FuIHN0YXJ0CisqKnRvZGF5KiohIEV2ZW4gaWYgeW91ciBkZXBlbmRlbmNpZXMgYXJlIG5vdCBzdXBwb3J0aW5nIFB5dGhvbiAzIHlldCB0aGF0IGRvZXMKK25vdCBtZWFuIHlvdSBjYW4ndCBtb2Rlcm5pemUgeW91ciBjb2RlICoqbm93KiogdG8gc3VwcG9ydCBQeXRob24gMy4gTW9zdCBjaGFuZ2VzCityZXF1aXJlZCB0byBzdXBwb3J0IFB5dGhvbiAzIGxlYWQgdG8gY2xlYW5lciBjb2RlIHVzaW5nIG5ld2VyIHByYWN0aWNlcyBldmVuIGluCitQeXRob24gMi4KIAotQmVmb3JlIFlvdSBCZWdpbgotPT09PT09PT09PT09PT09PQorQW5vdGhlciBrZXkgcG9pbnQgaXMgdGhhdCBtb2Rlcm5pemluZyB5b3VyIFB5dGhvbiAyIGNvZGUgdG8gYWxzbyBzdXBwb3J0CitQeXRob24gMyBpcyBsYXJnZWx5IGF1dG9tYXRlZCBmb3IgeW91LiBXaGlsZSB5b3UgbWlnaHQgaGF2ZSB0byBtYWtlIHNvbWUgQVBJCitkZWNpc2lvbnMgdGhhbmtzIHRvIFB5dGhvbiAzIGNsYXJpZnlpbmcgdGV4dCBkYXRhIHZlcnN1cyBiaW5hcnkgZGF0YSwgdGhlCitsb3dlci1sZXZlbCB3b3JrIGlzIG5vdyBtb3N0bHkgZG9uZSBmb3IgeW91IGFuZCB0aHVzIGNhbiBhdCBsZWFzdCBiZW5lZml0IGZyb20KK3RoZSBhdXRvbWF0ZWQgY2hhbmdlcyBpbW1lZGlhdGVseS4KIAotSWYgeW91ciBwcm9qZWN0IGlzIG9uIHRoZSBDaGVlc2VzaG9wXy9QeVBJXywgbWFrZSBzdXJlIGl0IGhhcyB0aGUgcHJvcGVyCi1gdHJvdmUgY2xhc3NpZmllcnNgXyB0byBzaWduaWZ5IHdoYXQgdmVyc2lvbnMgb2YgUHl0aG9uIGl0ICoqY3VycmVudGx5KioKLXN1cHBvcnRzLiBBdCBtaW5pbXVtIHlvdSBzaG91bGQgc3BlY2lmeSB0aGUgbWFqb3IgdmVyc2lvbihzKSwgZS5nLgotYGBQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMmBgIGlmIHlvdXIgcHJvamVjdCBjdXJyZW50bHkgb25seSBzdXBwb3J0cwotUHl0aG9uIDIuIEl0IGlzIHByZWZlcnJhYmxlIHRoYXQgeW91IGJlIGFzIHNwZWNpZmljIGFzIHBvc3NpYmxlIGJ5IGxpc3RpbmcgZXZlcnkKLW1ham9yL21pbm9yIHZlcnNpb24gb2YgUHl0aG9uIHRoYXQgeW91IHN1cHBvcnQsIGUuZy4gaWYgeW91ciBwcm9qZWN0IHN1cHBvcnRzCi1QeXRob24gMi42IGFuZCAyLjcsIHRoZW4geW91IHdhbnQgdGhlIGNsYXNzaWZpZXJzIG9mOjoKK0tlZXAgdGhvc2Uga2V5IHBvaW50cyBpbiBtaW5kIHdoaWxlIHlvdSByZWFkIG9uIGFib3V0IHRoZSBkZXRhaWxzIG9mIHBvcnRpbmcKK3lvdXIgY29kZSB0byBzdXBwb3J0IFB5dGhvbiAyICYgMyBzaW11bHRhbmVvdXNseS4KIAotIFByb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6OiAyCi0gUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uIDo6IDIuNgotIFByb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6OiAyLjcKIAotT25jZSB5b3VyIHByb2plY3Qgc3VwcG9ydHMgUHl0aG9uIDMgeW91IHdpbGwgd2FudCB0byBnbyBiYWNrIGFuZCBhZGQgdGhlCi1hcHByb3ByaWF0ZSBjbGFzc2lmaWVycyBmb3IgUHl0aG9uIDMgYXMgd2VsbC4gVGhpcyBpcyBpbXBvcnRhbnQgYXMgc2V0dGluZyB0aGUKLWBgUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uIDo6IDNgYCBjbGFzc2lmaWVyIHdpbGwgbGVhZCB0byB5b3VyIHByb2plY3QKLWJlaW5nIGxpc3RlZCB1bmRlciB0aGUgYFB5dGhvbiAzIFBhY2thZ2VzYF8gc2VjdGlvbiBvZiBQeVBJLgorRHJvcCBzdXBwb3J0IGZvciBQeXRob24gMi42IGFuZCBvbGRlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1NYWtlIHN1cmUgeW91IGhhdmUgYSByb2J1c3QgdGVzdCBzdWl0ZS4gWW91IG5lZWQgdG8KLW1ha2Ugc3VyZSBldmVyeXRoaW5nIGNvbnRpbnVlcyB0byB3b3JrLCBqdXN0IGxpa2Ugd2hlbiB5b3Ugc3VwcG9ydCBhIG5ldwotbWlub3IvZmVhdHVyZSByZWxlYXNlIG9mIFB5dGhvbi4gVGhpcyBtZWFucyBtYWtpbmcgc3VyZSB5b3VyIHRlc3Qgc3VpdGUgaXMKLXRob3JvdWdoIGFuZCBpcyBwb3J0ZWQgcHJvcGVybHkgYmV0d2VlbiBQeXRob24gMiAmIDMgKGNvbnNpZGVyIHVzaW5nIGNvdmVyYWdlXwotdG8gbWVhc3VyZSB0aGF0IHlvdSBoYXZlIGVmZmVjdGl2ZSB0ZXN0IGNvdmVyYWdlKS4gWW91IHdpbGwgYWxzbyBtb3N0IGxpa2VseQotd2FudCB0byB1c2Ugc29tZXRoaW5nIGxpa2UgdG94XyB0byBhdXRvbWF0ZSB0ZXN0aW5nIGJldHdlZW4gYWxsIG9mIHlvdXIKLXN1cHBvcnRlZCB2ZXJzaW9ucyBvZiBQeXRob24uIFlvdSB3aWxsIGFsc28gd2FudCB0byAqKnBvcnQgeW91ciB0ZXN0cyBmaXJzdCoqIHNvCi10aGF0IHlvdSBjYW4gbWFrZSBzdXJlIHRoYXQgeW91IGRldGVjdCBicmVha2FnZSBkdXJpbmcgdGhlIHRyYW5zaXRpb24uIFRlc3RzIGFsc28KLXRlbmQgdG8gYmUgc2ltcGxlciB0aGFuIHRoZSBjb2RlIHRoZXkgYXJlIHRlc3Rpbmcgc28gaXQgZ2l2ZXMgeW91IGFuIGlkZWEgb2YgaG93Ci1lYXN5IGl0IGNhbiBiZSB0byBwb3J0IGNvZGUuCitXaGlsZSB5b3UgY2FuIG1ha2UgUHl0aG9uIDIuNSB3b3JrIHdpdGggUHl0aG9uIDMsIGl0IGlzICoqbXVjaCoqIGVhc2llciBpZiB5b3UKK29ubHkgaGF2ZSB0byB3b3JrIHdpdGggUHl0aG9uIDIuNy4gSWYgZHJvcHBpbmcgUHl0aG9uIDIuNSBpcyBub3QgYW4KK29wdGlvbiB0aGVuIHRoZSBzaXhfIHByb2plY3QgY2FuIGhlbHAgeW91IHN1cHBvcnQgUHl0aG9uIDIuNSAmIDMgc2ltdWx0YW5lb3VzbHkKKyhgYHBpcCBpbnN0YWxsIHNpeGBgKS4gRG8gcmVhbGl6ZSwgdGhvdWdoLCB0aGF0IG5lYXJseSBhbGwgdGhlIHByb2plY3RzIGxpc3RlZAoraW4gdGhpcyBIT1dUTyB3aWxsIG5vdCBiZSBhdmFpbGFibGUgdG8geW91LgogCi1Ecm9wIHN1cHBvcnQgZm9yIG9sZGVyIFB5dGhvbiB2ZXJzaW9ucyBpZiBwb3NzaWJsZS4gYFB5dGhvbiAyLjVgXwotaW50cm9kdWNlZCBhIGxvdCBvZiB1c2VmdWwgc3ludGF4IGFuZCBsaWJyYXJpZXMgd2hpY2ggaGF2ZSBiZWNvbWUgaWRpb21hdGljCi1pbiBQeXRob24gMy4gYFB5dGhvbiAyLjZgXyBpbnRyb2R1Y2VkIGZ1dHVyZSBzdGF0ZW1lbnRzIHdoaWNoIG1ha2VzCi1jb21wYXRpYmlsaXR5IG11Y2ggZWFzaWVyIGlmIHlvdSBhcmUgZ29pbmcgZnJvbSBQeXRob24gMiB0byAzLgotYFB5dGhvbiAyLjdgXyBjb250aW51ZXMgdGhlIHRyZW5kIGluIHRoZSBzdGRsaWIuIENob29zZSB0aGUgbmV3ZXN0IHZlcnNpb24KLW9mIFB5dGhvbiB3aGljaCB5b3UgYmVsaWV2ZSBjYW4gYmUgeW91ciBtaW5pbXVtIHN1cHBvcnQgdmVyc2lvbgotYW5kIHdvcmsgZnJvbSB0aGVyZS4KK0lmIHlvdSBhcmUgYWJsZSB0byBza2lwIFB5dGhvbiAyLjUgYW5kIG9sZGVyLCB0aGVuIHRoZSByZXF1aXJlZCBjaGFuZ2VzCit0byB5b3VyIGNvZGUgc2hvdWxkIGNvbnRpbnVlIHRvIGxvb2sgYW5kIGZlZWwgbGlrZSBpZGlvbWF0aWMgUHl0aG9uIGNvZGUuIEF0Cit3b3JzdCB5b3Ugd2lsbCBoYXZlIHRvIHVzZSBhIGZ1bmN0aW9uIGluc3RlYWQgb2YgYSBtZXRob2QgaW4gc29tZSBpbnN0YW5jZXMgb3IKK2hhdmUgdG8gaW1wb3J0IGEgZnVuY3Rpb24gaW5zdGVhZCBvZiB1c2luZyBhIGJ1aWx0LWluIG9uZSwgYnV0IG90aGVyd2lzZSB0aGUKK292ZXJhbGwgdHJhbnNmb3JtYXRpb24gc2hvdWxkIG5vdCBmZWVsIGZvcmVpZ24gdG8geW91LgogCi1UYXJnZXQgdGhlIG5ld2VzdCB2ZXJzaW9uIG9mIFB5dGhvbiAzIHRoYXQgeW91IGNhbi4gQmV5b25kIGp1c3QgdGhlIHVzdWFsCi1idWdmaXhlcywgY29tcGF0aWJpbGl0eSBoYXMgY29udGludWVkIHRvIGltcHJvdmUgYmV0d2VlbiBQeXRob24gMiBhbmQgMyBhcyB0aW1lCi1oYXMgcGFzc2VkLiBFLmcuIFB5dGhvbiAzLjMgYWRkZWQgYmFjayB0aGUgYGB1YGAgcHJlZml4IGZvcgotc3RyaW5ncywgbWFraW5nIHNvdXJjZS1jb21wYXRpYmxlIFB5dGhvbiBjb2RlIGVhc2llciB0byB3cml0ZS4KK0J1dCB5b3Ugc2hvdWxkIGFpbSBmb3Igb25seSBzdXBwb3J0aW5nIFB5dGhvbiAyLjcuIFB5dGhvbiAyLjYgaXMgbm8gbG9uZ2VyCitzdXBwb3J0ZWQgYW5kIHRodXMgaXMgbm90IHJlY2VpdmluZyBidWdmaXhlcy4gVGhpcyBtZWFucyAqKnlvdSoqIHdpbGwgaGF2ZSB0bword29yayBhcm91bmQgYW55IGlzc3VlcyB5b3UgY29tZSBhY3Jvc3Mgd2l0aCBQeXRob24gMi42LiBUaGVyZSBhcmUgYWxzbyBzb21lCit0b29scyBtZW50aW9uZWQgaW4gdGhpcyBIT1dUTyB3aGljaCBkbyBub3Qgc3VwcG9ydCBQeXRob24gMi42IChlLmcuLCBQeWxpbnRfKSwKK2FuZCB0aGlzIHdpbGwgYmVjb21lIG1vcmUgY29tbW9ucGxhY2UgYXMgdGltZSBnb2VzIG9uLiBJdCB3aWxsIHNpbXBseSBiZSBlYXNpZXIKK2ZvciB5b3UgaWYgeW91IG9ubHkgc3VwcG9ydCB0aGUgdmVyc2lvbnMgb2YgUHl0aG9uIHRoYXQgeW91IGhhdmUgdG8gc3VwcG9ydC4KIAorTWFrZSBzdXJlIHlvdSBzcGVjaWZ5IHRoZSBwcm9wZXIgdmVyc2lvbiBzdXBwb3J0IGluIHlvdXIgYGBzZXR1cC5weWBgIGZpbGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVdyaXRpbmcgU291cmNlLUNvbXBhdGlibGUgUHl0aG9uIDIvMyBDb2RlCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorSW4geW91ciBgYHNldHVwLnB5YGAgZmlsZSB5b3Ugc2hvdWxkIGhhdmUgdGhlIHByb3BlciBgdHJvdmUgY2xhc3NpZmllcmBfCitzcGVjaWZ5aW5nIHdoYXQgdmVyc2lvbnMgb2YgUHl0aG9uIHlvdSBzdXBwb3J0LiBBcyB5b3VyIHByb2plY3QgZG9lcyBub3Qgc3VwcG9ydAorUHl0aG9uIDMgeWV0IHlvdSBzaG91bGQgYXQgbGVhc3QgaGF2ZQorYGBQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMiA6OiBPbmx5YGAgc3BlY2lmaWVkLiBJZGVhbGx5IHlvdSBzaG91bGQKK2Fsc28gc3BlY2lmeSBlYWNoIG1ham9yL21pbm9yIHZlcnNpb24gb2YgUHl0aG9uIHRoYXQgeW91IGRvIHN1cHBvcnQsIGUuZy4KK2BgUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uIDo6IDIuN2BgLgogCi1PdmVyIHRoZSB5ZWFycyB0aGUgUHl0aG9uIGNvbW11bml0eSBoYXMgZGlzY292ZXJlZCB0aGF0IHRoZSBlYXNpZXN0IHdheSB0bwotc3VwcG9ydCBib3RoIFB5dGhvbiAyIGFuZCAzIGluIHBhcmFsbGVsIGlzIHRvIHdyaXRlIFB5dGhvbiBjb2RlIHRoYXQgd29ya3MgaW4KLWVpdGhlciB2ZXJzaW9uLiBXaGlsZSB0aGlzIG1pZ2h0IHNvdW5kIGNvdW50ZXItaW50dWl0aXZlIGF0IGZpcnN0LCBpdCBhY3R1YWxseQotaXMgbm90IGRpZmZpY3VsdCBhbmQgdHlwaWNhbGx5IG9ubHkgcmVxdWlyZXMgZm9sbG93aW5nIHNvbWUgc2VsZWN0Ci0obm9uLWlkaW9tYXRpYykgcHJhY3RpY2VzIGFuZCB1c2luZyBzb21lIGtleSBwcm9qZWN0cyB0byBoZWxwIG1ha2UgYnJpZGdpbmcKLWJldHdlZW4gUHl0aG9uIDIgYW5kIDMgZWFzaWVyLgorSGF2ZSBnb29kIHRlc3QgY292ZXJhZ2UKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVByb2plY3RzIHRvIENvbnNpZGVyCi0tLS0tLS0tLS0tLS0tLS0tLS0tLQorT25jZSB5b3UgaGF2ZSB5b3VyIGNvZGUgc3VwcG9ydGluZyB0aGUgb2xkZXN0IHZlcnNpb24gb2YgUHl0aG9uIDIgeW91IHdhbnQgaXQKK3RvLCB5b3Ugd2lsbCB3YW50IHRvIG1ha2Ugc3VyZSB5b3VyIHRlc3Qgc3VpdGUgaGFzIGdvb2QgY292ZXJhZ2UuIEEgZ29vZCBydWxlIG9mCit0aHVtYiBpcyB0aGF0IGlmIHlvdSB3YW50IHRvIGJlIGNvbmZpZGVudCBlbm91Z2ggaW4geW91ciB0ZXN0IHN1aXRlIHRoYXQgYW55CitmYWlsdXJlcyB0aGF0IGFwcGVhciBhZnRlciBoYXZpbmcgdG9vbHMgcmV3cml0ZSB5b3VyIGNvZGUgYXJlIGFjdHVhbCBidWdzIGluIHRoZQordG9vbHMgYW5kIG5vdCBpbiB5b3VyIGNvZGUuIElmIHlvdSB3YW50IGEgbnVtYmVyIHRvIGFpbSBmb3IsIHRyeSB0byBnZXQgb3ZlciA4MCUKK2NvdmVyYWdlIChhbmQgZG9uJ3QgZmVlbCBiYWQgaWYgeW91IGNhbid0IGVhc2lseSBnZXQgcGFzdCA5MCUpLiBJZiB5b3UKK2Rvbid0IGFscmVhZHkgaGF2ZSBhIHRvb2wgdG8gbWVhc3VyZSB0ZXN0IGNvdmVyYWdlIHRoZW4gY292ZXJhZ2UucHlfIGlzCityZWNvbW1lbmRlZC4KIAotVGhlIGxvd2VzdCBsZXZlbCBsaWJyYXJ5IGZvciBzdXBwb3J0aW5nIFB5dGhvbiAyICYgMyBzaW11bHRhbmVvdXNseSBpcyBzaXhfLgotUmVhZGluZyB0aHJvdWdoIGl0cyBkb2N1bWVudGF0aW9uIHdpbGwgZ2l2ZSB5b3UgYW4gaWRlYSBvZiB3aGVyZSBleGFjdGx5IHRoZQotUHl0aG9uIGxhbmd1YWdlIGNoYW5nZWQgYmV0d2VlbiB2ZXJzaW9ucyAyICYgMyBhbmQgdGh1cyB3aGF0IHlvdSB3aWxsIHdhbnQgdGhlCi1saWJyYXJ5IHRvIGhlbHAgeW91IGNvbnRpbnVlIHRvIHN1cHBvcnQuCitMZWFybiB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiBQeXRob24gMiAmIDMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotVG8gaGVscCBhdXRvbWF0ZSBwb3J0aW5nIHlvdXIgY29kZSBvdmVyIHRvIHVzaW5nIHNpeCwgeW91IGNhbiB1c2UKLW1vZGVybml6ZV8uIFRoaXMgcHJvamVjdCB3aWxsIGF0dGVtcHQgdG8gcmV3cml0ZSB5b3VyIGNvZGUgdG8gYmUgYXMgbW9kZXJuIGFzCi1wb3NzaWJsZSB3aGlsZSB1c2luZyBzaXggdG8gc21vb3RoIG91dCBhbnkgZGlmZmVyZW5jZXMgYmV0d2VlbiBQeXRob24gMiAmIDMuCitPbmNlIHlvdSBoYXZlIHlvdXIgY29kZSB3ZWxsLXRlc3RlZCB5b3UgYXJlIHJlYWR5IHRvIGJlZ2luIHBvcnRpbmcgeW91ciBjb2RlIHRvCitQeXRob24gMyEgQnV0IHRvIGZ1bGx5IHVuZGVyc3RhbmQgaG93IHlvdXIgY29kZSBpcyBnb2luZyB0byBjaGFuZ2UgYW5kIHdoYXQKK3lvdSB3YW50IHRvIGxvb2sgb3V0IGZvciB3aGlsZSB5b3UgY29kZSwgeW91IHdpbGwgd2FudCB0byBsZWFybiB3aGF0IGNoYW5nZXMKK1B5dGhvbiAzIG1ha2VzIGluIHRlcm1zIG9mIFB5dGhvbiAyLiBUeXBpY2FsbHkgdGhlIHR3byBiZXN0IHdheXMgb2YgZG9pbmcgdGhhdAoraXMgcmVhZGluZyB0aGUgYCJXaGF0J3MgTmV3ImBfIGRvYyBmb3IgZWFjaCByZWxlYXNlIG9mIFB5dGhvbiAzIGFuZCB0aGUKK2BQb3J0aW5nIHRvIFB5dGhvbiAzYF8gYm9vayAod2hpY2ggaXMgZnJlZSBvbmxpbmUpLiBUaGVyZSBpcyBhbHNvIGEgaGFuZHkKK2BjaGVhdCBzaGVldGBfIGZyb20gdGhlIFB5dGhvbi1GdXR1cmUgcHJvamVjdC4KIAotSWYgeW91IHdhbnQgdG8gd3JpdGUgeW91ciBjb21wYXRpYmxlIGNvZGUgdG8gZmVlbCBtb3JlIGxpa2UgUHl0aG9uIDMgdGhlcmUgaXMKLXRoZSBmdXR1cmVfIHByb2plY3QuIEl0IHRyaWVzIHRvIHByb3ZpZGUgYmFja3BvcnRzIG9mIG9iamVjdHMgZnJvbSBQeXRob24gMyBzbwotdGhhdCB5b3UgY2FuIHVzZSB0aGVtIGZyb20gUHl0aG9uIDItY29tcGF0aWJsZSBjb2RlLCBlLmcuIHJlcGxhY2luZyB0aGUKLWBgYnl0ZXNgYCB0eXBlIGZyb20gUHl0aG9uIDIgd2l0aCB0aGUgb25lIGZyb20gUHl0aG9uIDMuCi1JdCBhbHNvIHByb3ZpZGVzIGEgdHJhbnNsYXRpb24gc2NyaXB0IGxpa2UgbW9kZXJuaXplIChpdHMgdHJhbnNsYXRpb24gY29kZSBpcwotYWN0dWFsbHkgcGFydGlhbGx5IGJhc2VkIG9uIGl0KSB0byBoZWxwIHN0YXJ0IHdvcmtpbmcgd2l0aCBhIHByZS1leGlzdGluZyBjb2RlCi1iYXNlLiBJdCBpcyBhbHNvIHVuaXF1ZSBpbiB0aGF0IGl0cyB0cmFuc2xhdGlvbiBzY3JpcHQgd2lsbCBhbHNvIHBvcnQgUHl0aG9uIDMKLWNvZGUgYmFja3dhcmRzIGFzIHdlbGwgYXMgUHl0aG9uIDIgY29kZSBmb3J3YXJkcy4KIAorVXBkYXRlIHlvdXIgY29kZQorLS0tLS0tLS0tLS0tLS0tLQogCi1UaXBzICYgVHJpY2tzCi0tLS0tLS0tLS0tLS0tCitPbmNlIHlvdSBmZWVsIGxpa2UgeW91IGtub3cgd2hhdCBpcyBkaWZmZXJlbnQgaW4gUHl0aG9uIDMgY29tcGFyZWQgdG8gUHl0aG9uIDIsCitpdCdzIHRpbWUgdG8gdXBkYXRlIHlvdXIgY29kZSEgWW91IGhhdmUgYSBjaG9pY2UgYmV0d2VlbiB0d28gdG9vbHMgaW4gcG9ydGluZworeW91ciBjb2RlIGF1dG9tYXRpY2FsbHk6IE1vZGVybml6ZV8gYW5kIEZ1dHVyaXplXy4gV2hpY2ggdG9vbCB5b3UgY2hvb3NlIHdpbGwKK2RlcGVuZCBvbiBob3cgbXVjaCBsaWtlIFB5dGhvbiAzIHlvdSB3YW50IHlvdXIgY29kZSB0byBiZS4gRnV0dXJpemVfIGRvZXMgaXRzCitiZXN0IHRvIG1ha2UgUHl0aG9uIDMgaWRpb21zIGFuZCBwcmFjdGljZXMgZXhpc3QgaW4gUHl0aG9uIDIsIGUuZy4gYmFja3BvcnRpbmcKK3RoZSBgYGJ5dGVzYGAgdHlwZSBmcm9tIFB5dGhvbiAzIHNvIHRoYXQgeW91IGhhdmUgc2VtYW50aWMgcGFyaXR5IGJldHdlZW4gdGhlCittYWpvciB2ZXJzaW9ucyBvZiBQeXRob24uIE1vZGVybml6ZV8sCitvbiB0aGUgb3RoZXIgaGFuZCwgaXMgbW9yZSBjb25zZXJ2YXRpdmUgYW5kIHRhcmdldHMgYSBQeXRob24gMi8zIHN1YnNldCBvZgorUHl0aG9uLCByZWx5aW5nIG9uIHNpeF8gdG8gaGVscCBwcm92aWRlIGNvbXBhdGliaWxpdHkuCiAKLVRvIGhlbHAgd2l0aCB3cml0aW5nIHNvdXJjZS1jb21wYXRpYmxlIGNvZGUgdXNpbmcgb25lIG9mIHRoZSBwcm9qZWN0cyBtZW50aW9uZWQKLWluIGBQcm9qZWN0cyB0byBDb25zaWRlcmBfLCBjb25zaWRlciBmb2xsb3dpbmcgdGhlIGJlbG93IHN1Z2dlc3Rpb25zLiBTb21lIG9mCi10aGVtIGFyZSBoYW5kbGVkIGJ5IHRoZSBzdWdnZXN0ZWQgcHJvamVjdHMsIHNvIGlmIHlvdSBkbyB1c2Ugb25lIG9mIHRoZW0gdGhlbgotcmVhZCB0aGVpciBkb2N1bWVudGF0aW9uIGZpcnN0IHRvIHNlZSB3aGljaCBzdWdnZXN0aW9ucyBiZWxvdyB3aWxsIHRha2VuIGNhcmUgb2YKLWZvciB5b3UuCitSZWdhcmRsZXNzIG9mIHdoaWNoIHRvb2wgeW91IGNob29zZSwgdGhleSB3aWxsIHVwZGF0ZSB5b3VyIGNvZGUgdG8gcnVuIHVuZGVyCitQeXRob24gMyB3aGlsZSBzdGF5aW5nIGNvbXBhdGlibGUgd2l0aCB0aGUgdmVyc2lvbiBvZiBQeXRob24gMiB5b3Ugc3RhcnRlZCB3aXRoLgorRGVwZW5kaW5nIG9uIGhvdyBjb25zZXJ2YXRpdmUgeW91IHdhbnQgdG8gYmUsIHlvdSBtYXkgd2FudCB0byBydW4gdGhlIHRvb2wgb3ZlcgoreW91ciB0ZXN0IHN1aXRlIGZpcnN0IGFuZCB2aXN1YWxseSBpbnNwZWN0IHRoZSBkaWZmIHRvIG1ha2Ugc3VyZSB0aGUKK3RyYW5zZm9ybWF0aW9uIGlzIGFjY3VyYXRlLiBBZnRlciB5b3UgaGF2ZSB0cmFuc2Zvcm1lZCB5b3VyIHRlc3Qgc3VpdGUgYW5kCit2ZXJpZmllZCB0aGF0IGFsbCB0aGUgdGVzdHMgc3RpbGwgcGFzcyBhcyBleHBlY3RlZCwgdGhlbiB5b3UgY2FuIHRyYW5zZm9ybSB5b3VyCithcHBsaWNhdGlvbiBjb2RlIGtub3dpbmcgdGhhdCBhbnkgdGVzdHMgd2hpY2ggZmFpbCBpcyBhIHRyYW5zbGF0aW9uIGZhaWx1cmUuCiAKLVN1cHBvcnQgUHl0aG9uIDIuNwotLy8vLy8vLy8vLy8vLy8vLy8vCitVbmZvcnR1bmF0ZWx5IHRoZSB0b29scyBjYW4ndCBhdXRvbWF0ZSBldmVyeXRoaW5nIHRvIG1ha2UgeW91ciBjb2RlIHdvcmsgdW5kZXIKK1B5dGhvbiAzIGFuZCBzbyB0aGVyZSBhcmUgYSBoYW5kZnVsIG9mIHRoaW5ncyB5b3Ugd2lsbCBuZWVkIHRvIHVwZGF0ZSBtYW51YWxseQordG8gZ2V0IGZ1bGwgUHl0aG9uIDMgc3VwcG9ydCAod2hpY2ggb2YgdGhlc2Ugc3RlcHMgYXJlIG5lY2Vzc2FyeSB2YXJ5IGJldHdlZW4KK3RoZSB0b29scykuIFJlYWQgdGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZSB0b29sIHlvdSBjaG9vc2UgdG8gdXNlIHRvIHNlZSB3aGF0IGl0CitmaXhlcyBieSBkZWZhdWx0IGFuZCB3aGF0IGl0IGNhbiBkbyBvcHRpb25hbGx5IHRvIGtub3cgd2hhdCB3aWxsIChub3QpIGJlIGZpeGVkCitmb3IgeW91IGFuZCB3aGF0IHlvdSBtYXkgaGF2ZSB0byBmaXggb24geW91ciBvd24gKGUuZy4gdXNpbmcgYGBpby5vcGVuKClgYCBvdmVyCit0aGUgYnVpbHQtaW4gYGBvcGVuKClgYCBmdW5jdGlvbiBpcyBvZmYgYnkgZGVmYXVsdCBpbiBNb2Rlcm5pemUpLiBMdWNraWx5LAordGhvdWdoLCB0aGVyZSBhcmUgb25seSBhIGNvdXBsZSBvZiB0aGluZ3MgdG8gd2F0Y2ggb3V0IGZvciB3aGljaCBjYW4gYmUKK2NvbnNpZGVyZWQgbGFyZ2UgaXNzdWVzIHRoYXQgbWF5IGJlIGhhcmQgdG8gZGVidWcgaWYgbm90IHdhdGNoZWQgZm9yLgogCi1BcyBhIGZpcnN0IHN0ZXAsIG1ha2Ugc3VyZSB0aGF0IHlvdXIgcHJvamVjdCBpcyBjb21wYXRpYmxlIHdpdGggYFB5dGhvbiAyLjdgXy4KLVRoaXMgaXMganVzdCBnb29kIHRvIGRvIGFzIFB5dGhvbiAyLjcgaXMgdGhlIGxhc3QgcmVsZWFzZSBvZiBQeXRob24gMiBhbmQgdGh1cwotd2lsbCBiZSB1c2VkIGZvciBhIHJhdGhlciBsb25nIHRpbWUuIEl0IGFsc28gYWxsb3dzIGZvciB1c2Ugb2YgdGhlIGBgLTNgYCBmbGFnCi10byBQeXRob24gdG8gaGVscCBkaXNjb3ZlciBwbGFjZXMgaW4geW91ciBjb2RlIHdoZXJlIGNvbXBhdGliaWxpdHkgbWlnaHQgYmUgYW4KLWlzc3VlICh0aGUgYGAtM2BgIGZsYWcgaXMgaW4gUHl0aG9uIDIuNiBidXQgUHl0aG9uIDIuNyBhZGRzIG1vcmUgd2FybmluZ3MpLgorRGl2aXNpb24KKysrKysrKysrCiAKLVRyeSB0byBTdXBwb3J0IGBQeXRob24gMi42YF8gYW5kIE5ld2VyIE9ubHkKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KK0luIFB5dGhvbiAzLCBgYDUgLyAyID09IDIuNWBgIGFuZCBub3QgYGAyYGA7IGFsbCBkaXZpc2lvbiBiZXR3ZWVuIGBgaW50YGAgdmFsdWVzCityZXN1bHQgaW4gYSBgYGZsb2F0YGAuIFRoaXMgY2hhbmdlIGhhcyBhY3R1YWxseSBiZWVuIHBsYW5uZWQgc2luY2UgUHl0aG9uIDIuMgord2hpY2ggd2FzIHJlbGVhc2VkIGluIDIwMDIuIFNpbmNlIHRoZW4gdXNlcnMgaGF2ZSBiZWVuIGVuY291cmFnZWQgdG8gYWRkCitgYGZyb20gX19mdXR1cmVfXyBpbXBvcnQgZGl2aXNpb25gYCB0byBhbnkgYW5kIGFsbCBmaWxlcyB3aGljaCB1c2UgdGhlIGBgL2BgIGFuZAorYGAvL2BgIG9wZXJhdG9ycyBvciB0byBiZSBydW5uaW5nIHRoZSBpbnRlcnByZXRlciB3aXRoIHRoZSBgYC1RYGAgZmxhZy4gSWYgeW91CitoYXZlIG5vdCBiZWVuIGRvaW5nIHRoaXMgdGhlbiB5b3Ugd2lsbCBuZWVkIHRvIGdvIHRocm91Z2ggeW91ciBjb2RlIGFuZCBkbyB0d28KK3RoaW5nczoKIAotV2hpbGUgbm90IHBvc3NpYmxlIGZvciBhbGwgcHJvamVjdHMsIGlmIHlvdSBjYW4gc3VwcG9ydCBgUHl0aG9uIDIuNmBfIGFuZCBuZXdlcgotKipvbmx5KiosIHlvdXIgbGlmZSB3aWxsIGJlIG11Y2ggZWFzaWVyLiBWYXJpb3VzIGZ1dHVyZSBzdGF0ZW1lbnRzLCBzdGRsaWIKLWFkZGl0aW9ucywgZXRjLiBleGlzdCBvbmx5IGluIFB5dGhvbiAyLjYgYW5kIGxhdGVyIHdoaWNoIGdyZWF0bHkgYXNzaXN0IGluCi1zdXBwb3J0aW5nIFB5dGhvbiAzLiBCdXQgaWYgeW91IHByb2plY3QgbXVzdCBrZWVwIHN1cHBvcnQgZm9yIGBQeXRob24gMi41YF8gdGhlbgotaXQgaXMgc3RpbGwgcG9zc2libGUgdG8gc2ltdWx0YW5lb3VzbHkgc3VwcG9ydCBQeXRob24gMy4KLQotQmVsb3cgYXJlIHRoZSBiZW5lZml0cyB5b3UgZ2FpbiBpZiB5b3Ugb25seSBoYXZlIHRvIHN1cHBvcnQgUHl0aG9uIDIuNiBhbmQKLW5ld2VyLiBTb21lIG9mIHRoZXNlIG9wdGlvbnMgYXJlIHBlcnNvbmFsIGNob2ljZSB3aGlsZSBvdGhlcnMgYXJlCi0qKnN0cm9uZ2x5KiogcmVjb21tZW5kZWQgKHRoZSBvbmVzIHRoYXQgYXJlIG1vcmUgZm9yIHBlcnNvbmFsIGNob2ljZSBhcmUKLWxhYmVsZWQgYXMgc3VjaCkuICBJZiB5b3UgY29udGludWUgdG8gc3VwcG9ydCBvbGRlciB2ZXJzaW9ucyBvZiBQeXRob24gdGhlbiB5b3UKLWF0IGxlYXN0IG5lZWQgdG8gd2F0Y2ggb3V0IGZvciBzaXR1YXRpb25zIHRoYXQgdGhlc2Ugc29sdXRpb25zIGZpeCBhbmQgaGFuZGxlCi10aGVtIGFwcHJvcHJpYXRlbHkgKHdoaWNoIGlzIHdoZXJlIGxpYnJhcnkgaGVscCBmcm9tIGUuZy4gc2l4XyBjb21lcyBpbiBoYW5keSkuCi0KLQotYGBmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uYGAKLScnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnCi0KLUl0IHdpbGwgbm90IG9ubHkgZ2V0IHlvdSB1c2VkIHRvIHR5cGluZyBgYHByaW50KClgYCBhcyBhIGZ1bmN0aW9uIGluc3RlYWQgb2YgYQotc3RhdGVtZW50LCBidXQgaXQgd2lsbCBhbHNvIGdpdmUgeW91IHRoZSB2YXJpb3VzIGJlbmVmaXRzIHRoZSBmdW5jdGlvbiBoYXMgb3ZlcgotdGhlIFB5dGhvbiAyIHN0YXRlbWVudCAoc2l4XyBwcm92aWRlcyBhIGZ1bmN0aW9uIGlmIHlvdSBzdXBwb3J0IFB5dGhvbiAyLjUgb3IKLW9sZGVyKS4KLQotCi1gYGZyb20gX19mdXR1cmVfXyBpbXBvcnQgdW5pY29kZV9saXRlcmFsc2BgCi0nJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnCi0KLUlmIHlvdSBjaG9vc2UgdG8gdXNlIHRoaXMgZnV0dXJlIHN0YXRlbWVudCB0aGVuIGFsbCBzdHJpbmcgbGl0ZXJhbHMgaW4KLVB5dGhvbiAyIHdpbGwgYmUgYXNzdW1lZCB0byBiZSBVbmljb2RlIChhcyBpcyBhbHJlYWR5IHRoZSBjYXNlIGluIFB5dGhvbiAzKS4KLUlmIHlvdSBjaG9vc2Ugbm90IHRvIHVzZSB0aGlzIGZ1dHVyZSBzdGF0ZW1lbnQgdGhlbiB5b3Ugc2hvdWxkIG1hcmsgYWxsIG9mIHlvdXIKLXRleHQgc3RyaW5ncyB3aXRoIGEgYGB1YGAgcHJlZml4IGFuZCBvbmx5IHN1cHBvcnQgUHl0aG9uIDMuMyBvciBuZXdlci4gQnV0IHlvdQotYXJlICoqc3Ryb25nbHkqKiBhZHZpc2VkIHRvIGRvIG9uZSBvciB0aGUgb3RoZXIgKHNpeF8gcHJvdmlkZXMgYSBmdW5jdGlvbiBpbgotY2FzZSB5b3UgZG9uJ3Qgd2FudCB0byB1c2UgdGhlIGZ1dHVyZSBzdGF0ZW1lbnQgKiphbmQqKiB5b3Ugd2FudCB0byBzdXBwb3J0Ci1QeXRob24gMy4yIG9yIG9sZGVyKS4KLQotCi1CeXRlcy9zdHJpbmcgbGl0ZXJhbHMKLScnJycnJycnJycnJycnJycnJycnJwotCi1UaGlzIGlzIGEgKip2ZXJ5KiogaW1wb3J0YW50IG9uZS4gUHJlZml4IFB5dGhvbiAyIHN0cmluZ3MgdGhhdAotYXJlIG1lYW50IHRvIGNvbnRhaW4gYnl0ZXMgd2l0aCBhIGBgYmBgIHByZWZpeCB0byB2ZXJ5IGNsZWFybHkgZGVsaW5lYXRlCi13aGF0IGlzIGFuZCBpcyBub3QgYSBQeXRob24gMyB0ZXh0IHN0cmluZyAoc2l4XyBwcm92aWRlcyBhIGZ1bmN0aW9uIHRvIHVzZSBmb3IKLVB5dGhvbiAyLjUgY29tcGF0aWJpbGl0eSkuCi0KLVRoaXMgcG9pbnQgY2Fubm90IGJlIHN0cmVzc2VkIGVub3VnaDogbWFrZSBzdXJlIHlvdSBrbm93IHdoYXQgYWxsIG9mIHlvdXIgc3RyaW5nCi1saXRlcmFscyBpbiBQeXRob24gMiBhcmUgbWVhbnQgdG8gYmUgaW4gUHl0aG9uIDMuIEFueSBzdHJpbmcgbGl0ZXJhbCB0aGF0Ci1zaG91bGQgYmUgdHJlYXRlZCBhcyBieXRlcyBzaG91bGQgaGF2ZSB0aGUgYGBiYGAgcHJlZml4LiBBbnkgc3RyaW5nIGxpdGVyYWwKLXRoYXQgc2hvdWxkIGJlIFVuaWNvZGUvdGV4dCBpbiBQeXRob24gMiBzaG91bGQgZWl0aGVyIGhhdmUgdGhlIGBgdWBgIGxpdGVyYWwKLShzdXBwb3J0ZWQsIGJ1dCBpZ25vcmVkLCBpbiBQeXRob24gMy4zIGFuZCBsYXRlcikgb3IgeW91IHNob3VsZCBoYXZlCi1gYGZyb20gX19mdXR1cmVfXyBpbXBvcnQgdW5pY29kZV9saXRlcmFsc2BgIGF0IHRoZSB0b3Agb2YgdGhlIGZpbGUuIEJ1dCB0aGUga2V5Ci1wb2ludCBpcyB5b3Ugc2hvdWxkIGtub3cgaG93IFB5dGhvbiAzIHdpbGwgdHJlYXQgZXZlcnkgb25lIG9uZSBvZiB5b3VyIHN0cmluZwotbGl0ZXJhbHMgYW5kIHlvdSBzaG91bGQgbWFyayB0aGVtIGFzIGFwcHJvcHJpYXRlLgotCi1UaGVyZSBhcmUgc29tZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIGJ5dGUgbGl0ZXJhbHMgaW4gUHl0aG9uIDIgYW5kIHRob3NlIGluCi1QeXRob24gMyB0aGFua3MgdG8gdGhlIGJ5dGVzIHR5cGUganVzdCBiZWluZyBhbiBhbGlhcyB0byBgYHN0cmBgIGluIFB5dGhvbiAyLgotU2VlIHRoZSBgSGFuZGxlIENvbW1vbiAiR290Y2hhcyJgXyBzZWN0aW9uIGZvciB3aGF0IHRvIHdhdGNoIG91dCBmb3IuCi0KLWBgZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnRgYAotJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnCi1EaXNjdXNzZWQgaW4gbW9yZSBkZXRhaWwgYmVsb3csIGJ1dCB5b3Ugc2hvdWxkIHVzZSB0aGlzIGZ1dHVyZSBzdGF0ZW1lbnQgdG8KLXByZXZlbnQgeW91cnNlbGYgZnJvbSBhY2NpZGVudGFsbHkgdXNpbmcgaW1wbGljaXQgcmVsYXRpdmUgaW1wb3J0cy4KLQotCi1TdXBwb3J0aW5nIGBQeXRob24gMi41YF8gYW5kIE5ld2VyIE9ubHkKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCi1JZiB5b3UgYXJlIHN1cHBvcnRpbmcgYFB5dGhvbiAyLjVgXyBhbmQgbmV3ZXIgdGhlcmUgYXJlIHN0aWxsIHNvbWUgZmVhdHVyZXMgb2YKLVB5dGhvbiB0aGF0IHlvdSBjYW4gdXRpbGl6ZS4KLQotCi1gYGZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0YGAKLScnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJwotCi1JbXBsaWNpdCByZWxhdGl2ZSBpbXBvcnRzIChlLmcuLCBpbXBvcnRpbmcgYGBzcGFtLmJhY29uYGAgZnJvbSB3aXRoaW4KLWBgc3BhbS5lZ2dzYGAgd2l0aCB0aGUgc3RhdGVtZW50IGBgaW1wb3J0IGJhY29uYGApIGRvIG5vdCB3b3JrIGluIFB5dGhvbiAzLgotVGhpcyBmdXR1cmUgc3RhdGVtZW50IG1vdmVzIGF3YXkgZnJvbSB0aGF0IGFuZCBhbGxvd3MgdGhlIHVzZSBvZiBleHBsaWNpdAotcmVsYXRpdmUgaW1wb3J0cyAoZS5nLiwgYGBmcm9tIC4gaW1wb3J0IGJhY29uYGApLgotCi1JbiBgUHl0aG9uIDIuNWBfIHlvdSBtdXN0IHVzZQotdGhlIF9fZnV0dXJlX18gc3RhdGVtZW50IHRvIGdldCB0byB1c2UgZXhwbGljaXQgcmVsYXRpdmUgaW1wb3J0cyBhbmQgcHJldmVudAotaW1wbGljaXQgb25lcy4gSW4gYFB5dGhvbiAyLjZgXyBleHBsaWNpdCByZWxhdGl2ZSBpbXBvcnRzIGFyZSBhdmFpbGFibGUgd2l0aG91dAotdGhlIHN0YXRlbWVudCwgYnV0IHlvdSBzdGlsbCB3YW50IHRoZSBfX2Z1dHVyZV9fIHN0YXRlbWVudCB0byBwcmV2ZW50IGltcGxpY2l0Ci1yZWxhdGl2ZSBpbXBvcnRzLiBJbiBgUHl0aG9uIDIuN2BfIHRoZSBfX2Z1dHVyZV9fIHN0YXRlbWVudCBpcyBub3QgbmVlZGVkLiBJbgotb3RoZXIgd29yZHMsIHVubGVzcyB5b3UgYXJlIG9ubHkgc3VwcG9ydGluZyBQeXRob24gMi43IG9yIGEgdmVyc2lvbiBlYXJsaWVyCi10aGFuIFB5dGhvbiAyLjUsIHVzZSB0aGlzIF9fZnV0dXJlX18gc3RhdGVtZW50LgotCi0KLU1hcmsgYWxsIFVuaWNvZGUgc3RyaW5ncyB3aXRoIGEgYGB1YGAgcHJlZml4Ci0nJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycKLQotV2hpbGUgUHl0aG9uIDIuNiBoYXMgYSBgYF9fZnV0dXJlX19gYCBzdGF0ZW1lbnQgdG8gYXV0b21hdGljYWxseSBjYXVzZSBQeXRob24gMgotdG8gdHJlYXQgYWxsIHN0cmluZyBsaXRlcmFscyBhcyBVbmljb2RlLCBQeXRob24gMi41IGRvZXMgbm90IGhhdmUgdGhhdCBzaG9ydGN1dC4KLVRoaXMgbWVhbnMgeW91IHNob3VsZCBnbyB0aHJvdWdoIGFuZCBtYXJrIGFsbCBzdHJpbmcgbGl0ZXJhbHMgd2l0aCBhIGBgdWBgCi1wcmVmaXggdG8gdHVybiB0aGVtIGV4cGxpY2l0bHkgaW50byB0ZXh0IHN0cmluZ3Mgd2hlcmUgYXBwcm9wcmlhdGUgYW5kIG9ubHkKLXN1cHBvcnQgUHl0aG9uIDMuMyBvciBuZXdlci4gT3RoZXJ3aXNlIHVzZSBhIHByb2plY3QgbGlrZSBzaXhfIHdoaWNoIHByb3ZpZGVzIGEKLWZ1bmN0aW9uIHRvIHBhc3MgYWxsIHRleHQgc3RyaW5nIGxpdGVyYWxzIHRocm91Z2guCi0KLQotQ2FwdHVyaW5nIHRoZSBDdXJyZW50bHkgUmFpc2VkIEV4Y2VwdGlvbgotJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJwotCi1JbiBQeXRob24gMi41IGFuZCBlYXJsaWVyIHRoZSBzeW50YXggdG8gYWNjZXNzIHRoZSBjdXJyZW50IGV4Y2VwdGlvbiBpczo6Ci0KLSAgIHRyeToKLSAgICAgcmFpc2UgRXhjZXB0aW9uKCkKLSAgIGV4Y2VwdCBFeGNlcHRpb24sIGV4YzoKLSAgICAgIyBDdXJyZW50IGV4Y2VwdGlvbiBpcyAnZXhjJy4KLSAgICAgcGFzcwotCi1UaGlzIHN5bnRheCBjaGFuZ2VkIGluIFB5dGhvbiAzIChhbmQgYmFja3BvcnRlZCB0byBgUHl0aG9uIDIuNmBfIGFuZCBsYXRlcikKLXRvOjoKLQotICAgdHJ5OgotICAgICByYWlzZSBFeGNlcHRpb24oKQotICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6Ci0gICAgICMgQ3VycmVudCBleGNlcHRpb24gaXMgJ2V4YycuCi0gICAgICMgSW4gUHl0aG9uIDMsICdleGMnIGlzIHJlc3RyaWN0ZWQgdG8gdGhlIGJsb2NrOyBpbiBQeXRob24gMi42LzIuNyBpdCB3aWxsICJsZWFrIi4KLSAgICAgcGFzcwotCi1CZWNhdXNlIG9mIHRoaXMgc3ludGF4IGNoYW5nZSB5b3UgbXVzdCBjaGFuZ2UgaG93IHlvdSBjYXB0dXJlIHRoZSBjdXJyZW50Ci1leGNlcHRpb24gaW4gUHl0aG9uIDIuNSBhbmQgZWFybGllciB0bzo6Ci0KLSAgIHRyeToKLSAgICAgcmFpc2UgRXhjZXB0aW9uKCkKLSAgIGV4Y2VwdCBFeGNlcHRpb246Ci0gICAgIGltcG9ydCBzeXMKLSAgICAgZXhjID0gc3lzLmV4Y19pbmZvKClbMV0KLSAgICAgIyBDdXJyZW50IGV4Y2VwdGlvbiBpcyAnZXhjJy4KLSAgICAgcGFzcwotCi1Zb3UgY2FuIGdldCBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSByYWlzZWQgZXhjZXB0aW9uIGZyb20KLTpmdW5jOmBzeXMuZXhjX2luZm9gIHRoYW4gc2ltcGx5IHRoZSBjdXJyZW50IGV4Y2VwdGlvbiBpbnN0YW5jZSwgYnV0IHlvdSBtb3N0Ci1saWtlbHkgZG9uJ3QgbmVlZCBpdC4KLQotLi4gbm90ZTo6Ci0gICBJbiBQeXRob24gMywgdGhlIHRyYWNlYmFjayBpcyBhdHRhY2hlZCB0byB0aGUgZXhjZXB0aW9uIGluc3RhbmNlCi0gICB0aHJvdWdoIHRoZSBgYF9fdHJhY2ViYWNrX19gYCBhdHRyaWJ1dGUuIElmIHRoZSBpbnN0YW5jZSBpcyBzYXZlZCBpbgotICAgYSBsb2NhbCB2YXJpYWJsZSB0aGF0IHBlcnNpc3RzIG91dHNpZGUgb2YgdGhlIGBgZXhjZXB0YGAgYmxvY2ssIHRoZQotICAgdHJhY2ViYWNrIHdpbGwgY3JlYXRlIGEgcmVmZXJlbmNlIGN5Y2xlIHdpdGggdGhlIGN1cnJlbnQgZnJhbWUgYW5kIGl0cwotICAgZGljdGlvbmFyeSBvZiBsb2NhbCB2YXJpYWJsZXMuICBUaGlzIHdpbGwgZGVsYXkgcmVjbGFpbWluZyBkZWFkCi0gICByZXNvdXJjZXMgdW50aWwgdGhlIG5leHQgY3ljbGljIDp0ZXJtOmBnYXJiYWdlIGNvbGxlY3Rpb25gIHBhc3MuCi0KLSAgIEluIFB5dGhvbiAyLCB0aGlzIHByb2JsZW0gb25seSBvY2N1cnMgaWYgeW91IHNhdmUgdGhlIHRyYWNlYmFjayBpdHNlbGYKLSAgIChlLmcuIHRoZSB0aGlyZCBlbGVtZW50IG9mIHRoZSB0dXBsZSByZXR1cm5lZCBieSA6ZnVuYzpgc3lzLmV4Y19pbmZvYCkKLSAgIGluIGEgdmFyaWFibGUuCi0KKyMuIEFkZCBgYGZyb20gX19mdXR1cmVfXyBpbXBvcnQgZGl2aXNpb25gYCB0byB5b3VyIGZpbGVzCisjLiBVcGRhdGUgYW55IGRpdmlzaW9uIG9wZXJhdG9yIGFzIG5lY2Vzc2FyeSB0byBlaXRoZXIgdXNlIGBgLy9gYCB0byB1c2UgZmxvb3IKKyAgIGRpdmlzaW9uIG9yIGNvbnRpbnVlIHVzaW5nIGBgL2BgIGFuZCBleHBlY3QgYSBmbG9hdAogCi1IYW5kbGUgQ29tbW9uICJHb3RjaGFzIgotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KK1RoZSByZWFzb24gdGhhdCBgYC9gYCBpc24ndCBzaW1wbHkgdHJhbnNsYXRlZCB0byBgYC8vYGAgYXV0b21hdGljYWxseSBpcyB0aGF0IGlmCithbiBvYmplY3QgZGVmaW5lcyBhIGBgX190cnVlZGl2X19gYCBtZXRob2QgYnV0IG5vdCBgYF9fZmxvb3JkaXZfX2BgIHRoZW4geW91cgorY29kZSB3b3VsZCBiZWdpbiB0byBmYWlsIChlLmcuIGEgdXNlci1kZWZpbmVkIGNsYXNzIHRoYXQgdXNlcyBgYC9gYCB0bworc2lnbmlmeSBzb21lIG9wZXJhdGlvbiBidXQgbm90IGBgLy9gYCBmb3IgdGhlIHNhbWUgdGhpbmcgb3IgYXQgYWxsKS4KIAotVGhlc2UgYXJlIHRoaW5ncyB0byB3YXRjaCBvdXQgZm9yIG5vIG1hdHRlciB3aGF0IHZlcnNpb24gb2YgUHl0aG9uIDIgeW91IGFyZQotc3VwcG9ydGluZyB3aGljaCBhcmUgbm90IHN5bnRhY3RpYyBjb25zaWRlcmF0aW9ucy4KK1RleHQgdmVyc3VzIGJpbmFyeSBkYXRhCisrKysrKysrKysrKysrKysrKysrKysrKwogCitJbiBQeXRob24gMiB5b3UgY291bGQgdXNlIHRoZSBgYHN0cmBgIHR5cGUgZm9yIGJvdGggdGV4dCBhbmQgYmluYXJ5IGRhdGEuCitVbmZvcnR1bmF0ZWx5IHRoaXMgY29uZmx1ZW5jZSBvZiB0d28gZGlmZmVyZW50IGNvbmNlcHRzIGNvdWxkIGxlYWQgdG8gYnJpdHRsZQorY29kZSB3aGljaCBzb21ldGltZXMgd29ya2VkIGZvciBlaXRoZXIga2luZCBvZiBkYXRhLCBzb21ldGltZXMgbm90LiBJdCBhbHNvCitjb3VsZCBsZWFkIHRvIGNvbmZ1c2luZyBBUElzIGlmIHBlb3BsZSBkaWRuJ3QgZXhwbGljaXRseSBzdGF0ZSB0aGF0IHNvbWV0aGluZwordGhhdCBhY2NlcHRlZCBgYHN0cmBgIGFjY2VwdGVkIGVpdGhlciB0ZXh0IG9yIGJpbmFyeSBkYXRhIGluc3RlYWQgb2Ygb25lCitzcGVjaWZpYyB0eXBlLiBUaGlzIGNvbXBsaWNhdGVkIHRoZSBzaXR1YXRpb24gZXNwZWNpYWxseSBmb3IgYW55b25lIHN1cHBvcnRpbmcKK211bHRpcGxlIGxhbmd1YWdlcyBhcyBBUElzIHdvdWxkbid0IGJvdGhlciBleHBsaWNpdGx5IHN1cHBvcnRpbmcgYGB1bmljb2RlYGAKK3doZW4gdGhleSBjbGFpbWVkIHRleHQgZGF0YSBzdXBwb3J0LgogCi1gYGZyb20gX19mdXR1cmVfXyBpbXBvcnQgZGl2aXNpb25gYAotJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycKK1RvIG1ha2UgdGhlIGRpc3RpbmN0aW9uIGJldHdlZW4gdGV4dCBhbmQgYmluYXJ5IGRhdGEgY2xlYXJlciBhbmQgbW9yZQorcHJvbm91bmNlZCwgUHl0aG9uIDMgZGlkIHdoYXQgbW9zdCBsYW5ndWFnZXMgY3JlYXRlZCBpbiB0aGUgYWdlIG9mIHRoZSBpbnRlcm5ldAoraGF2ZSBkb25lIGFuZCBtYWRlIHRleHQgYW5kIGJpbmFyeSBkYXRhIGRpc3RpbmN0IHR5cGVzIHRoYXQgY2Fubm90IGJsaW5kbHkgYmUKK21peGVkIHRvZ2V0aGVyIChQeXRob24gcHJlZGF0ZXMgd2lkZXNwcmVhZCBhY2Nlc3MgdG8gdGhlIGludGVybmV0KS4gRm9yIGFueSBjb2RlCit0aGF0IG9ubHkgZGVhbHMgd2l0aCB0ZXh0IG9yIG9ubHkgYmluYXJ5IGRhdGEsIHRoaXMgc2VwYXJhdGlvbiBkb2Vzbid0IHBvc2UgYW4KK2lzc3VlLiBCdXQgZm9yIGNvZGUgdGhhdCBoYXMgdG8gZGVhbCB3aXRoIGJvdGgsIGl0IGRvZXMgbWVhbiB5b3UgbWlnaHQgaGF2ZSB0bworbm93IGNhcmUgYWJvdXQgd2hlbiB5b3UgYXJlIHVzaW5nIHRleHQgY29tcGFyZWQgdG8gYmluYXJ5IGRhdGEsIHdoaWNoIGlzIHdoeQordGhpcyBjYW5ub3QgYmUgZW50aXJlbHkgYXV0b21hdGVkLgogCi1XaGlsZSB0aGUgZXhhY3Qgc2FtZSBvdXRjb21lIGNhbiBiZSBoYWQgYnkgdXNpbmcgdGhlIGBgLVFuZXdgYCBhcmd1bWVudCB0bwotUHl0aG9uLCB1c2luZyB0aGlzIGZ1dHVyZSBzdGF0ZW1lbnQgbGlmdHMgdGhlIHJlcXVpcmVtZW50IHRoYXQgeW91ciB1c2VycyB1c2UKLXRoZSBmbGFnIHRvIGdldCB0aGUgZXhwZWN0ZWQgYmVoYXZpb3Igb2YgZGl2aXNpb24gaW4gUHl0aG9uIDMKLShlLmcuLCBgYDEvMiA9PSAwLjU7IDEvLzIgPT0gMGBgKS4KK1RvIHN0YXJ0LCB5b3Ugd2lsbCBuZWVkIHRvIGRlY2lkZSB3aGljaCBBUElzIHRha2UgdGV4dCBhbmQgd2hpY2ggdGFrZSBiaW5hcnkKKyhpdCBpcyAqKmhpZ2hseSoqIHJlY29tbWVuZGVkIHlvdSBkb24ndCBkZXNpZ24gQVBJcyB0aGF0IGNhbiB0YWtlIGJvdGggZHVlIHRvCit0aGUgZGlmZmljdWx0eSBvZiBrZWVwaW5nIHRoZSBjb2RlIHdvcmtpbmc7IGFzIHN0YXRlZCBlYXJsaWVyIGl0IGlzIGRpZmZpY3VsdCB0bworZG8gd2VsbCkuIEluIFB5dGhvbiAyIHRoaXMgbWVhbnMgbWFraW5nIHN1cmUgdGhlIEFQSXMgdGhhdCB0YWtlIHRleHQgY2FuIHdvcmsKK3dpdGggYGB1bmljb2RlYGAgaW4gUHl0aG9uIDIgYW5kIHRob3NlIHRoYXQgd29yayB3aXRoIGJpbmFyeSBkYXRhIHdvcmsgd2l0aCB0aGUKK2BgYnl0ZXNgYCB0eXBlIGZyb20gUHl0aG9uIDMgYW5kIHRodXMgYSBzdWJzZXQgb2YgYGBzdHJgYCBpbiBQeXRob24gMiAod2hpY2ggdGhlCitgYGJ5dGVzYGAgdHlwZSBpbiBQeXRob24gMiBpcyBhbiBhbGlhcyBmb3IpLiBVc3VhbGx5IHRoZSBiaWdnZXN0IGlzc3VlIGlzCityZWFsaXppbmcgd2hpY2ggbWV0aG9kcyBleGlzdCBmb3Igd2hpY2ggdHlwZXMgaW4gUHl0aG9uIDIgJiAzIHNpbXVsdGFuZW91c2x5CisoZm9yIHRleHQgdGhhdCdzIGBgdW5pY29kZWBgIGluIFB5dGhvbiAyIGFuZCBgYHN0cmBgIGluIFB5dGhvbiAzLCBmb3IgYmluYXJ5Cit0aGF0J3MgYGBzdHJgYC9gYGJ5dGVzYGAgaW4gUHl0aG9uIDIgYW5kIGBgYnl0ZXNgYCBpbiBQeXRob24gMykuIFRoZSBmb2xsb3dpbmcKK3RhYmxlIGxpc3RzIHRoZSAqKnVuaXF1ZSoqIG1ldGhvZHMgb2YgZWFjaCBkYXRhIHR5cGUgYWNyb3NzIFB5dGhvbiAyICYgMworKGUuZy4sIHRoZSBgYGRlY29kZSgpYGAgbWV0aG9kIGlzIHVzYWJsZSBvbiB0aGUgZXF1aXZhbGVudCBiaW5hcnkgZGF0YSB0eXBlIGluCitlaXRoZXIgUHl0aG9uIDIgb3IgMywgYnV0IGl0IGNhbid0IGJlIHVzZWQgYnkgdGhlIHRleHQgZGF0YSB0eXBlIGNvbnNpc3RlbnRseQorYmV0d2VlbiBQeXRob24gMiBhbmQgMyBiZWNhdXNlIGBgc3RyYGAgaW4gUHl0aG9uIDMgZG9lc24ndCBoYXZlIHRoZSBtZXRob2QpLgogCis9PT09PT09PT09PT09PT09PT09PT09PT0gPT09PT09PT09PT09PT09PT09PT09CisqKlRleHQgZGF0YSoqICAgICAgICAgICAgKipCaW5hcnkgZGF0YSoqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitfX21vZF9fIChgYCVgYCBvcGVyYXRvcikKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1wgICAgICAgICAgICAgICAgICAgICAgICBkZWNvZGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2VuY29kZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZm9ybWF0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitpc2RlY2ltYWwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2lzbnVtZXJpYworPT09PT09PT09PT09PT09PT09PT09PT09ID09PT09PT09PT09PT09PT09PT09PQogCitNYWtpbmcgdGhlIGRpc3RpbmN0aW9uIGVhc2llciB0byBoYW5kbGUgY2FuIGJlIGFjY29tcGxpc2hlZCBieSBlbmNvZGluZyBhbmQKK2RlY29kaW5nIGJldHdlZW4gYmluYXJ5IGRhdGEgYW5kIHRleHQgYXQgdGhlIGVkZ2Ugb2YgeW91ciBjb2RlLiBUaGlzIG1lYW5zIHRoYXQKK3doZW4geW91IHJlY2VpdmUgdGV4dCBpbiBiaW5hcnkgZGF0YSwgeW91IHNob3VsZCBpbW1lZGlhdGVseSBkZWNvZGUgaXQuIEFuZCBpZgoreW91ciBjb2RlIG5lZWRzIHRvIHNlbmQgdGV4dCBhcyBiaW5hcnkgZGF0YSB0aGVuIGVuY29kZSBpdCBhcyBsYXRlIGFzIHBvc3NpYmxlLgorVGhpcyBhbGxvd3MgeW91ciBjb2RlIHRvIHdvcmsgd2l0aCBvbmx5IHRleHQgaW50ZXJuYWxseSBhbmQgdGh1cyBlbGltaW5hdGVzCitoYXZpbmcgdG8ga2VlcCB0cmFjayBvZiB3aGF0IHR5cGUgb2YgZGF0YSB5b3UgYXJlIHdvcmtpbmcgd2l0aC4KIAotU3BlY2lmeSB3aGVuIG9wZW5pbmcgYSBmaWxlIGFzIGJpbmFyeQotJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJworVGhlIG5leHQgaXNzdWUgaXMgbWFraW5nIHN1cmUgeW91IGtub3cgd2hldGhlciB0aGUgc3RyaW5nIGxpdGVyYWxzIGluIHlvdXIgY29kZQorcmVwcmVzZW50IHRleHQgb3IgYmluYXJ5IGRhdGEuIEF0IG1pbmltdW0geW91IHNob3VsZCBhZGQgYSBgYGJgYCBwcmVmaXggdG8gYW55CitsaXRlcmFsIHRoYXQgcHJlc2VudHMgYmluYXJ5IGRhdGEuIEZvciB0ZXh0IHlvdSBzaG91bGQgZWl0aGVyIHVzZSB0aGUKK2BgZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB1bmljb2RlX2xpdGVyYWxzYGAgc3RhdGVtZW50IG9yIGFkZCBhIGBgdWBgIHByZWZpeCB0bwordGhlIHRleHQgbGl0ZXJhbC4KIAorQXMgcGFydCBvZiB0aGlzIGRpY2hvdG9teSB5b3UgYWxzbyBuZWVkIHRvIGJlIGNhcmVmdWwgYWJvdXQgb3BlbmluZyBmaWxlcy4KIFVubGVzcyB5b3UgaGF2ZSBiZWVuIHdvcmtpbmcgb24gV2luZG93cywgdGhlcmUgaXMgYSBjaGFuY2UgeW91IGhhdmUgbm90IGFsd2F5cwogYm90aGVyZWQgdG8gYWRkIHRoZSBgYGJgYCBtb2RlIHdoZW4gb3BlbmluZyBhIGJpbmFyeSBmaWxlIChlLmcuLCBgYHJiYGAgZm9yCiBiaW5hcnkgcmVhZGluZykuICBVbmRlciBQeXRob24gMywgYmluYXJ5IGZpbGVzIGFuZCB0ZXh0IGZpbGVzIGFyZSBjbGVhcmx5CiBkaXN0aW5jdCBhbmQgbXV0dWFsbHkgaW5jb21wYXRpYmxlOyBzZWUgdGhlIDptb2Q6YGlvYCBtb2R1bGUgZm9yIGRldGFpbHMuCiBUaGVyZWZvcmUsIHlvdSAqKm11c3QqKiBtYWtlIGEgZGVjaXNpb24gb2Ygd2hldGhlciBhIGZpbGUgd2lsbCBiZSB1c2VkIGZvcgotYmluYXJ5IGFjY2VzcyAoYWxsb3dpbmcgdG8gcmVhZCBhbmQvb3Igd3JpdGUgYnl0ZXMgZGF0YSkgb3IgdGV4dCBhY2Nlc3MKLShhbGxvd2luZyB0byByZWFkIGFuZC9vciB3cml0ZSB1bmljb2RlIGRhdGEpLgorYmluYXJ5IGFjY2VzcyAoYWxsb3dpbmcgdG8gcmVhZCBhbmQvb3Igd3JpdGUgYmluYXJ5IGRhdGEpIG9yIHRleHQgYWNjZXNzCisoYWxsb3dpbmcgdG8gcmVhZCBhbmQvb3Igd3JpdGUgdGV4dCBkYXRhKS4gWW91IHNob3VsZCBhbHNvIHVzZSA6ZnVuYzpgaW8ub3BlbmAKK2ZvciBvcGVuaW5nIGZpbGVzIGluc3RlYWQgb2YgdGhlIGJ1aWx0LWluIDpmdW5jOmBvcGVuYCBmdW5jdGlvbiBhcyB0aGUgOm1vZDpgaW9gCittb2R1bGUgaXMgY29uc2lzdGVudCBmcm9tIFB5dGhvbiAyIHRvIDMgd2hpbGUgdGhlIGJ1aWx0LWluIDpmdW5jOmBvcGVuYCBmdW5jdGlvbgoraXMgbm90IChpbiBQeXRob24gMyBpdCdzIGFjdHVhbGx5IDpmdW5jOmBpby5vcGVuYCkuCiAKLVRleHQgZmlsZXMKLScnJycnJycnJycKK1RoZSBjb25zdHJ1Y3RvcnMgb2YgYm90aCBgYHN0cmBgIGFuZCBgYGJ5dGVzYGAgaGF2ZSBkaWZmZXJlbnQgc2VtYW50aWNzIGZvciB0aGUKK3NhbWUgYXJndW1lbnRzIGJldHdlZW4gUHl0aG9uIDIgJiAzLiBQYXNzaW5nIGFuIGludGVnZXIgdG8gYGBieXRlc2BgIGluIFB5dGhvbiAyCit3aWxsIGdpdmUgeW91IHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGludGVnZXI6IGBgYnl0ZXMoMykgPT0gJzMnYGAuCitCdXQgaW4gUHl0aG9uIDMsIGFuIGludGVnZXIgYXJndW1lbnQgdG8gYGBieXRlc2BgIHdpbGwgZ2l2ZSB5b3UgYSBieXRlcyBvYmplY3QKK2FzIGxvbmcgYXMgdGhlIGludGVnZXIgc3BlY2lmaWVkLCBmaWxsZWQgd2l0aCBudWxsIGJ5dGVzOgorYGBieXRlcygzKSA9PSBiJ1x4MDBceDAwXHgwMCdgYC4gQSBzaW1pbGFyIHdvcnJ5IGlzIG5lY2Vzc2FyeSB3aGVuIHBhc3NpbmcgYQorYnl0ZXMgb2JqZWN0IHRvIGBgc3RyYGAuIEluIFB5dGhvbiAyIHlvdSBqdXN0IGdldCB0aGUgYnl0ZXMgb2JqZWN0IGJhY2s6CitgYHN0cihiJzMnKSA9PSBiJzMnYGAuIEJ1dCBpbiBQeXRob24gMyB5b3UgZ2V0IHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlCitieXRlcyBvYmplY3Q6IGBgc3RyKGInMycpID09ICJiJzMnImBgLgogCi1UZXh0IGZpbGVzIGNyZWF0ZWQgdXNpbmcgYGBvcGVuKClgYCB1bmRlciBQeXRob24gMiByZXR1cm4gYnl0ZSBzdHJpbmdzLAotd2hpbGUgdW5kZXIgUHl0aG9uIDMgdGhleSByZXR1cm4gdW5pY29kZSBzdHJpbmdzLiAgRGVwZW5kaW5nIG9uIHlvdXIgcG9ydGluZwotc3RyYXRlZ3ksIHRoaXMgY2FuIGJlIGFuIGlzc3VlLgorRmluYWxseSwgdGhlIGluZGV4aW5nIG9mIGJpbmFyeSBkYXRhIHJlcXVpcmVzIGNhcmVmdWwgaGFuZGxpbmcgKHNsaWNpbmcgZG9lcworKipub3QqKiByZXF1aXJlIGFueSBzcGVjaWFsIGhhbmRsaW5nKS4gSW4gUHl0aG9uIDIsCitgYGInMTIzJ1sxXSA9PSBiJzInYGAgd2hpbGUgaW4gUHl0aG9uIDMgYGBiJzEyMydbMV0gPT0gNTBgYC4gQmVjYXVzZSBiaW5hcnkgZGF0YQoraXMgc2ltcGx5IGEgY29sbGVjdGlvbiBvZiBiaW5hcnkgbnVtYmVycywgUHl0aG9uIDMgcmV0dXJucyB0aGUgaW50ZWdlciB2YWx1ZSBmb3IKK3RoZSBieXRlIHlvdSBpbmRleCBvbi4gQnV0IGluIFB5dGhvbiAyIGJlY2F1c2UgYGBieXRlcyA9PSBzdHJgYCwgaW5kZXhpbmcKK3JldHVybnMgYSBvbmUtaXRlbSBzbGljZSBvZiBieXRlcy4gVGhlIHNpeF8gcHJvamVjdCBoYXMgYSBmdW5jdGlvbgorbmFtZWQgYGBzaXguaW5kZXhieXRlcygpYGAgd2hpY2ggd2lsbCByZXR1cm4gYW4gaW50ZWdlciBsaWtlIGluIFB5dGhvbiAzOgorYGBzaXguaW5kZXhieXRlcyhiJzEyMycsIDEpYGAuCiAKLUlmIHlvdSB3YW50IHRleHQgZmlsZXMgdG8gcmV0dXJuIHVuaWNvZGUgc3RyaW5ncyBpbiBQeXRob24gMiwgeW91IGhhdmUgdHdvCi1wb3NzaWJpbGl0aWVzOgorVG8gc3VtbWFyaXplOgogCi0qIFVuZGVyIFB5dGhvbiAyLjYgYW5kIGhpZ2hlciwgdXNlIDpmdW5jOmBpby5vcGVuYC4gIFNpbmNlIDpmdW5jOmBpby5vcGVuYAotICBpcyBlc3NlbnRpYWxseSB0aGUgc2FtZSBmdW5jdGlvbiBpbiBib3RoIFB5dGhvbiAyIGFuZCBQeXRob24gMywgaXQgd2lsbAotICBoZWxwIGlyb24gb3V0IGFueSBpc3N1ZXMgdGhhdCBtaWdodCBhcmlzZS4KKyMuIERlY2lkZSB3aGljaCBvZiB5b3VyIEFQSXMgdGFrZSB0ZXh0IGFuZCB3aGljaCB0YWtlIGJpbmFyeSBkYXRhCisjLiBNYWtlIHN1cmUgdGhhdCB5b3VyIGNvZGUgdGhhdCB3b3JrcyB3aXRoIHRleHQgYWxzbyB3b3JrcyB3aXRoIGBgdW5pY29kZWBgIGFuZAorICAgY29kZSBmb3IgYmluYXJ5IGRhdGEgd29ya3Mgd2l0aCBgYGJ5dGVzYGAgaW4gUHl0aG9uIDIgKHNlZSB0aGUgdGFibGUgYWJvdmUKKyAgIGZvciB3aGF0IG1ldGhvZHMgeW91IGNhbm5vdCB1c2UgZm9yIGVhY2ggdHlwZSkKKyMuIE1hcmsgYWxsIGJpbmFyeSBsaXRlcmFscyB3aXRoIGEgYGBiYGAgcHJlZml4LCB1c2UgYSBgYHVgYCBwcmVmaXggb3IKKyAgIDptb2Q6YF9fZnV0dXJlX19gIGltcG9ydCBzdGF0ZW1lbnQgZm9yIHRleHQgbGl0ZXJhbHMKKyMuIERlY29kZSBiaW5hcnkgZGF0YSB0byB0ZXh0IGFzIHNvb24gYXMgcG9zc2libGUsIGVuY29kZSB0ZXh0IGFzIGJpbmFyeSBkYXRhIGFzCisgICBsYXRlIGFzIHBvc3NpYmxlCisjLiBPcGVuIGZpbGVzIHVzaW5nIDpmdW5jOmBpby5vcGVuYCBhbmQgbWFrZSBzdXJlIHRvIHNwZWNpZnkgdGhlIGBgYmBgIG1vZGUgd2hlbgorICAgYXBwcm9wcmlhdGUKKyMuIEJlIGNhcmVmdWwgd2hlbiBpbmRleGluZyBiaW5hcnkgZGF0YQogCi0qIElmIHByZS0yLjYgY29tcGF0aWJpbGl0eSBpcyBuZWVkZWQsIHRoZW4geW91IHNob3VsZCB1c2UgOmZ1bmM6YGNvZGVjcy5vcGVuYAotICBpbnN0ZWFkLiAgVGhpcyB3aWxsIG1ha2Ugc3VyZSB0aGF0IHlvdSBnZXQgYmFjayB1bmljb2RlIHN0cmluZ3MgaW4gUHl0aG9uIDIuCitQcmV2ZW50IGNvbXBhdGliaWxpdHkgcmVncmVzc2lvbnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1TdWJjbGFzcyBgYG9iamVjdGBgCi0nJycnJycnJycnJycnJycnJycnCitPbmNlIHlvdSBoYXZlIGZ1bGx5IHRyYW5zbGF0ZWQgeW91ciBjb2RlIHRvIGJlIGNvbXBhdGlibGUgd2l0aCBQeXRob24gMywgeW91Cit3aWxsIHdhbnQgdG8gbWFrZSBzdXJlIHlvdXIgY29kZSBkb2Vzbid0IHJlZ3Jlc3MgYW5kIHN0b3Agd29ya2luZyB1bmRlcgorUHl0aG9uIDMuIFRoaXMgaXMgZXNwZWNpYWxseSB0cnVlIGlmIHlvdSBoYXZlIGEgZGVwZW5kZW5jeSB3aGljaCBpcyBibG9ja2luZyB5b3UKK2Zyb20gYWN0dWFsbHkgcnVubmluZyB1bmRlciBQeXRob24gMyBhdCB0aGUgbW9tZW50LgogCi1OZXctc3R5bGUgY2xhc3NlcyBoYXZlIGJlZW4gYXJvdW5kIHNpbmNlIGBQeXRob24gMi4yYF8uIFlvdSBuZWVkIHRvIG1ha2Ugc3VyZQoteW91IGFyZSBzdWJjbGFzc2luZyBmcm9tIGBgb2JqZWN0YGAgdG8gYXZvaWQgb2RkIGVkZ2UgY2FzZXMgaW52b2x2aW5nIG1ldGhvZAotcmVzb2x1dGlvbiBvcmRlciwgZXRjLiBUaGlzIGNvbnRpbnVlcyB0byBiZSB0b3RhbGx5IHZhbGlkIGluIFB5dGhvbiAzIChhbHRob3VnaAotdW5uZWVkZWQgYXMgYWxsIGNsYXNzZXMgaW1wbGljaXRseSBpbmhlcml0IGZyb20gYGBvYmplY3RgYCkuCitUbyBoZWxwIHdpdGggc3RheWluZyBjb21wYXRpYmxlLCBhbnkgbmV3IG1vZHVsZXMgeW91IGNyZWF0ZSBzaG91bGQgaGF2ZQorYXQgbGVhc3QgdGhlIGZvbGxvd2luZyBibG9jayBvZiBjb2RlIGF0IHRoZSB0b3Agb2YgaXQ6OgogCisgICAgZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKKyAgICBmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGRpdmlzaW9uCisgICAgZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgorICAgIGZyb20gX19mdXR1cmVfXyBpbXBvcnQgdW5pY29kZV9saXRlcmFscwogCi1EZWFsIFdpdGggdGhlIEJ5dGVzL1N0cmluZyBEaWNob3RvbXkKLScnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJworWW91IGNhbiBhbHNvIHJ1biBQeXRob24gMiB3aXRoIHRoZSBgYC0zYGAgZmxhZyB0byBiZSB3YXJuZWQgYWJvdXQgdmFyaW91cworY29tcGF0aWJpbGl0eSBpc3N1ZXMgeW91ciBjb2RlIHRyaWdnZXJzIGR1cmluZyBleGVjdXRpb24uIElmIHlvdSB0dXJuIHdhcm5pbmdzCitpbnRvIGVycm9ycyB3aXRoIGBgLVdlcnJvcmBgIHRoZW4geW91IGNhbiBtYWtlIHN1cmUgdGhhdCB5b3UgZG9uJ3QgYWNjaWRlbnRhbGx5CittaXNzIGEgd2FybmluZy4KIAotT25lIG9mIHRoZSBiaWdnZXN0IGlzc3VlcyBwZW9wbGUgaGF2ZSB3aGVuIHBvcnRpbmcgY29kZSB0byBQeXRob24gMyBpcyBoYW5kbGluZwotdGhlIGJ5dGVzL3N0cmluZyBkaWNob3RvbXkuIEJlY2F1c2UgUHl0aG9uIDIgYWxsb3dlZCB0aGUgYGBzdHJgYCB0eXBlIHRvIGhvbGQKLXRleHR1YWwgZGF0YSwgcGVvcGxlIGhhdmUgb3ZlciB0aGUgeWVhcnMgYmVlbiByYXRoZXIgbG9vc2UgaW4gdGhlaXIgZGVsaW5lYXRpb24KLW9mIHdoYXQgYGBzdHJgYCBpbnN0YW5jZXMgaGVsZCB0ZXh0IGNvbXBhcmVkIHRvIGJ5dGVzLiBJbiBQeXRob24gMyB5b3UgY2Fubm90Ci1iZSBzbyBjYXJlLWZyZWUgYW55bW9yZSBhbmQgbmVlZCB0byBwcm9wZXJseSBoYW5kbGUgdGhlIGRpZmZlcmVuY2UuIFRoZSBrZXkgdG8KLWhhbmRsaW5nIHRoaXMgaXNzdWUgaXMgdG8gbWFrZSBzdXJlIHRoYXQgKipldmVyeSoqIHN0cmluZyBsaXRlcmFsIGluIHlvdXIKLVB5dGhvbiAyIGNvZGUgaXMgZWl0aGVyIHN5bnRhY3RpY2FsbHkgb3IgZnVuY3Rpb25hbGx5IG1hcmtlZCBhcyBlaXRoZXIgYnl0ZXMgb3IKLXRleHQgZGF0YS4gQWZ0ZXIgdGhpcyBpcyBkb25lIHlvdSB0aGVuIG5lZWQgdG8gbWFrZSBzdXJlIHlvdXIgQVBJcyBhcmUgZGVzaWduZWQKLXRvIGVpdGhlciBoYW5kbGUgYSBzcGVjaWZpYyB0eXBlIG9yIG1hZGUgdG8gYmUgcHJvcGVybHkgcG9seW1vcnBoaWMuCiAKK1lvdSBjYW4gYWxzbyB1c2UgdGhlIFB5bGludF8gcHJvamVjdCBhbmQgaXRzIGBgLS1weTNrYGAgZmxhZyB0byBsaW50IHlvdXIgY29kZQordG8gcmVjZWl2ZSB3YXJuaW5ncyB3aGVuIHlvdXIgY29kZSBiZWdpbnMgdG8gZGV2aWF0ZSBmcm9tIFB5dGhvbiAzCitjb21wYXRpYmlsaXR5LiBUaGlzIGFsc28gcHJldmVudHMgeW91IGZyb20gaGF2aW5nIHRvIHJ1biBNb2Rlcm5pemVfIG9yIEZ1dHVyaXplXworb3ZlciB5b3VyIGNvZGUgcmVndWxhcmx5IHRvIGNhdGNoIGNvbXBhdGliaWxpdHkgcmVncmVzc2lvbnMuIFRoaXMgZG9lcyByZXF1aXJlCit5b3Ugb25seSBzdXBwb3J0IFB5dGhvbiAyLjcgYW5kIFB5dGhvbiAzLjQgb3IgbmV3ZXIgYXMgdGhhdCBpcyBQeWxpbnQncworbWluaW11bSBQeXRob24gdmVyc2lvbiBzdXBwb3J0LgogCi1NYXJrIFVwIFB5dGhvbiAyIFN0cmluZyBMaXRlcmFscwotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAotRmlyc3QgdGhpbmcgeW91IG11c3QgZG8gaXMgZGVzaWduYXRlIGV2ZXJ5IHNpbmdsZSBzdHJpbmcgbGl0ZXJhbCBpbiBQeXRob24gMgotYXMgZWl0aGVyIHRleHR1YWwgb3IgYnl0ZXMgZGF0YS4gSWYgeW91IGFyZSBvbmx5IHN1cHBvcnRpbmcgUHl0aG9uIDIuNiBvcgotbmV3ZXIsIHRoaXMgY2FuIGJlIGFjY29tcGxpc2hlZCBieSBtYXJraW5nIGJ5dGVzIGxpdGVyYWxzIHdpdGggYSBgYGJgYCBwcmVmaXgKLWFuZCB0aGVuIGRlc2lnbmF0aW5nIHRleHR1YWwgZGF0YSB3aXRoIGEgYGB1YGAgcHJlZml4IG9yIHVzaW5nIHRoZQotYGB1bmljb2RlX2xpdGVyYWxzYGAgZnV0dXJlIHN0YXRlbWVudC4KK0NoZWNrIHdoaWNoIGRlcGVuZGVuY2llcyBibG9jayB5b3VyIHRyYW5zaXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSWYgeW91ciBwcm9qZWN0IHN1cHBvcnRzIHZlcnNpb25zIG9mIFB5dGhvbiBwcmVkYXRpbmcgMi42LCB0aGVuIHlvdSBzaG91bGQgdXNlCi10aGUgc2l4XyBwcm9qZWN0IGFuZCBpdHMgYGBiKClgYCBmdW5jdGlvbiB0byBkZW5vdGUgYnl0ZXMgbGl0ZXJhbHMuIEZvciB0ZXh0Ci1saXRlcmFscyB5b3UgY2FuIGVpdGhlciB1c2Ugc2l4J3MgYGB1KClgYCBmdW5jdGlvbiBvciB1c2UgYSBgYHVgYCBwcmVmaXguCisqKkFmdGVyKiogeW91IGhhdmUgbWFkZSB5b3VyIGNvZGUgY29tcGF0aWJsZSB3aXRoIFB5dGhvbiAzIHlvdSBzaG91bGQgYmVnaW4gdG8KK2NhcmUgYWJvdXQgd2hldGhlciB5b3VyIGRlcGVuZGVuY2llcyBoYXZlIGFsc28gYmVlbiBwb3J0ZWQuIFRoZSBjYW5pdXNlcHl0aG9uM18KK3Byb2plY3Qgd2FzIGNyZWF0ZWQgdG8gaGVscCB5b3UgZGV0ZXJtaW5lIHdoaWNoIHByb2plY3RzCistLSBkaXJlY3RseSBvciBpbmRpcmVjdGx5IC0tIGFyZSBibG9ja2luZyB5b3UgZnJvbSBzdXBwb3J0aW5nIFB5dGhvbiAzLiBUaGVyZQoraXMgYm90aCBhIGNvbW1hbmQtbGluZSB0b29sIGFzIHdlbGwgYXMgYSB3ZWIgaW50ZXJmYWNlIGF0CitodHRwczovL2Nhbml1c2VweXRob24zLmNvbSAuCiAKK1RoZSBwcm9qZWN0IGFsc28gcHJvdmlkZXMgY29kZSB3aGljaCB5b3UgY2FuIGludGVncmF0ZSBpbnRvIHlvdXIgdGVzdCBzdWl0ZSBzbwordGhhdCB5b3Ugd2lsbCBoYXZlIGEgZmFpbGluZyB0ZXN0IHdoZW4geW91IG5vIGxvbmdlciBoYXZlIGRlcGVuZGVuY2llcyBibG9ja2luZworeW91IGZyb20gdXNpbmcgUHl0aG9uIDMuIFRoaXMgYWxsb3dzIHlvdSB0byBhdm9pZCBoYXZpbmcgdG8gbWFudWFsbHkgY2hlY2sgeW91cgorZGVwZW5kZW5jaWVzIGFuZCB0byBiZSBub3RpZmllZCBxdWlja2x5IHdoZW4geW91IGNhbiBzdGFydCBydW5uaW5nIG9uIFB5dGhvbiAzLgogCi1EZWNpZGUgd2hhdCBBUElzIFdpbGwgQWNjZXB0Ci0qKioqKioqKioqKioqKioqKioqKioqKioqKioqCitVcGRhdGUgeW91ciBgYHNldHVwLnB5YGAgZmlsZSB0byBkZW5vdGUgUHl0aG9uIDMgY29tcGF0aWJpbGl0eQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSW4gUHl0aG9uIDIgaXQgd2FzIHZlcnkgZWFzeSB0byBhY2NpZGVudGFsbHkgY3JlYXRlIGFuIEFQSSB0aGF0IGFjY2VwdGVkIGJvdGgKLWJ5dGVzIGFuZCB0ZXh0dWFsIGRhdGEuIEJ1dCBpbiBQeXRob24gMywgdGhhbmtzIHRvIHRoZSBtb3JlIHN0cmljdCBoYW5kbGluZyBvZgotZGlzcGFyYXRlIHR5cGVzLCB0aGlzIGxvb3NlIHVzYWdlIG9mIGJ5dGVzIGFuZCB0ZXh0IHRvZ2V0aGVyIHRlbmRzIHRvIGZhaWwuCitPbmNlIHlvdXIgY29kZSB3b3JrcyB1bmRlciBQeXRob24gMywgeW91IHNob3VsZCB1cGRhdGUgdGhlIGNsYXNzaWZpZXJzIGluCit5b3VyIGBgc2V0dXAucHlgYCB0byBjb250YWluIGBgUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uIDo6IDNgYCBhbmQgdG8gbm90CitzcGVjaWZ5IHNvbGUgUHl0aG9uIDIgc3VwcG9ydC4gVGhpcyB3aWxsIHRlbGwKK2FueW9uZSB1c2luZyB5b3VyIGNvZGUgdGhhdCB5b3Ugc3VwcG9ydCBQeXRob24gMiAqKmFuZCoqIDMuIElkZWFsbHkgeW91IHdpbGwKK2Fsc28gd2FudCB0byBhZGQgY2xhc3NpZmllcnMgZm9yIGVhY2ggbWFqb3IvbWlub3IgdmVyc2lvbiBvZiBQeXRob24geW91IG5vdworc3VwcG9ydC4KIAotVGFrZSB0aGUgZGljdCBgYHtiJ2EnOiAnYnl0ZXMnLCB1J2EnOiAndGV4dCd9YGAgaW4gUHl0aG9uIDIuNi4gSXQgY3JlYXRlcyB0aGUKLWRpY3QgYGB7dSdhJzogJ3RleHQnfWBgIHNpbmNlIGBgYidhJyA9PSB1J2EnYGAuIEJ1dCBpbiBQeXRob24gMyB0aGUgZXF1aXZhbGVudAotZGljdCBjcmVhdGVzIGBge2InYSc6ICdieXRlcycsICdhJzogJ3RleHQnfWBgLCBpLmUuLCBubyBsb3N0IGRhdGEuIFNpbWlsYXIKLWlzc3VlcyBjYW4gY3JvcCB1cCB3aGVuIHRyYW5zaXRpb25pbmcgUHl0aG9uIDIgY29kZSB0byBQeXRob24gMy4KK1VzZSBjb250aW51b3VzIGludGVncmF0aW9uIHRvIHN0YXkgY29tcGF0aWJsZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVRoaXMgbWVhbnMgeW91IG5lZWQgdG8gY2hvb3NlIHdoYXQgYW4gQVBJIGlzIGdvaW5nIHRvIGFjY2VwdCBhbmQgY3JlYXRlIGFuZAotY29uc2lzdGVudGx5IHN0aWNrIHRvIHRoYXQgQVBJIGluIGJvdGggUHl0aG9uIDIgYW5kIDMuCitPbmNlIHlvdSBhcmUgYWJsZSB0byBmdWxseSBydW4gdW5kZXIgUHl0aG9uIDMgeW91IHdpbGwgd2FudCB0byBtYWtlIHN1cmUgeW91cgorY29kZSBhbHdheXMgd29ya3MgdW5kZXIgYm90aCBQeXRob24gMiAmIDMuIFByb2JhYmx5IHRoZSBiZXN0IHRvb2wgZm9yIHJ1bm5pbmcKK3lvdXIgdGVzdHMgdW5kZXIgbXVsdGlwbGUgUHl0aG9uIGludGVycHJldGVycyBpcyB0b3hfLiBZb3UgY2FuIHRoZW4gaW50ZWdyYXRlCit0b3ggd2l0aCB5b3VyIGNvbnRpbnVvdXMgaW50ZWdyYXRpb24gc3lzdGVtIHNvIHRoYXQgeW91IG5ldmVyIGFjY2lkZW50YWxseSBicmVhaworUHl0aG9uIDIgb3IgMyBzdXBwb3J0LgogCitZb3UgbWF5IGFsc28gd2FudCB0byB1c2UgdXNlIHRoZSBgYC1iYmBgIGZsYWcgd2l0aCB0aGUgUHl0aG9uIDMgaW50ZXJwcmV0ZXIgdG8KK3RyaWdnZXIgYW4gZXhjZXB0aW9uIHdoZW4geW91IGFyZSBjb21wYXJpbmcgYnl0ZXMgdG8gc3RyaW5ncy4gVXN1YWxseSBpdCdzCitzaW1wbHkgYGBGYWxzZWBgLCBidXQgaWYgeW91IG1hZGUgYSBtaXN0YWtlIGluIHlvdXIgc2VwYXJhdGlvbiBvZiB0ZXh0L2JpbmFyeQorZGF0YSBoYW5kbGluZyB5b3UgbWF5IGJlIGFjY2lkZW50YWxseSBjb21wYXJpbmcgdGV4dCBhbmQgYmluYXJ5IGRhdGEuIFRoaXMgZmxhZword2lsbCByYWlzZSBhbiBleGNlcHRpb24gd2hlbiB0aGF0IG9jY3VycyB0byBoZWxwIHRyYWNrIGRvd24gc3VjaCBjYXNlcy4KIAotQnl0ZXMgLyBVbmljb2RlIENvbXBhcmlzb24KLSoqKioqKioqKioqKioqKioqKioqKioqKioqCitBbmQgdGhhdCdzIG1vc3RseSBpdCEgQXQgdGhpcyBwb2ludCB5b3VyIGNvZGUgYmFzZSBpcyBjb21wYXRpYmxlIHdpdGggYm90aAorUHl0aG9uIDIgYW5kIDMgc2ltdWx0YW5lb3VzbHkuIFlvdXIgdGVzdGluZyB3aWxsIGFsc28gYmUgc2V0IHVwIHNvIHRoYXQgeW91Citkb24ndCBhY2NpZGVudGFsbHkgYnJlYWsgUHl0aG9uIDIgb3IgMyBjb21wYXRpYmlsaXR5IHJlZ2FyZGxlc3Mgb2Ygd2hpY2ggdmVyc2lvbgoreW91IHR5cGljYWxseSBydW4geW91ciB0ZXN0cyB1bmRlciB3aGlsZSBkZXZlbG9waW5nLgogCi1JbiBQeXRob24gMywgbWl4aW5nIGJ5dGVzIGFuZCB1bmljb2RlIGlzIGZvcmJpZGRlbiBpbiBtb3N0IHNpdHVhdGlvbnM7IGl0Ci13aWxsIHJhaXNlIGEgOmNsYXNzOmBUeXBlRXJyb3JgIHdoZXJlIFB5dGhvbiAyIHdvdWxkIGhhdmUgYXR0ZW1wdGVkIGFuIGltcGxpY2l0Ci1jb2VyY2lvbiBiZXR3ZWVuIHR5cGVzLiAgSG93ZXZlciwgdGhlcmUgaXMgb25lIGNhc2Ugd2hlcmUgaXQgZG9lc24ndCBhbmQKLWl0IGNhbiBiZSB2ZXJ5IG1pc2xlYWRpbmc6OgogCi0gICA+Pj4gYiIiID09ICIiCi0gICBGYWxzZQorRHJvcHBpbmcgUHl0aG9uIDIgc3VwcG9ydCBjb21wbGV0ZWx5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAotVGhpcyBpcyBiZWNhdXNlIGFuIGVxdWFsaXR5IGNvbXBhcmlzb24gaXMgcmVxdWlyZWQgYnkgdGhlIGxhbmd1YWdlIHRvIGFsd2F5cwotc3VjY2VlZCAoYW5kIHJldHVybiBgYEZhbHNlYGAgZm9yIGluY29tcGF0aWJsZSB0eXBlcykuICBIb3dldmVyLCB0aGlzIGFsc28KLW1lYW5zIHRoYXQgY29kZSBpbmNvcnJlY3RseSBwb3J0ZWQgdG8gUHl0aG9uIDMgY2FuIGRpc3BsYXkgYnVnZ3kgYmVoYXZpb3VyCi1pZiBzdWNoIGNvbXBhcmlzb25zIGFyZSBzaWxlbnRseSBleGVjdXRlZC4gIFRvIGRldGVjdCBzdWNoIHNpdHVhdGlvbnMsCi1QeXRob24gMyBoYXMgYSBgYC1iYGAgZmxhZyB0aGF0IHdpbGwgZGlzcGxheSBhIHdhcm5pbmc6OgorSWYgeW91IGFyZSBhYmxlIHRvIGZ1bGx5IGRyb3Agc3VwcG9ydCBmb3IgUHl0aG9uIDIsIHRoZW4gdGhlIHN0ZXBzIHJlcXVpcmVkCit0byB0cmFuc2l0aW9uIHRvIFB5dGhvbiAzIHNpbXBsaWZ5IGdyZWF0bHkuCiAKLSAgICQgcHl0aG9uMyAtYgotICAgPj4+IGIiIiA9PSAiIgotICAgX19tYWluX186MTogQnl0ZXNXYXJuaW5nOiBDb21wYXJpc29uIGJldHdlZW4gYnl0ZXMgYW5kIHN0cmluZwotICAgRmFsc2UKKyMuIFVwZGF0ZSB5b3VyIGNvZGUgdG8gb25seSBzdXBwb3J0IFB5dGhvbiAyLjcKKyMuIE1ha2Ugc3VyZSB5b3UgaGF2ZSBnb29kIHRlc3QgY292ZXJhZ2UgKGNvdmVyYWdlLnB5XyBjYW4gaGVscCkKKyMuIExlYXJuIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIFB5dGhvbiAyICYgMworIy4gVXNlIDJ0bzNfIHRvIHJld3JpdGUgeW91ciBjb2RlIHRvIHJ1biBvbmx5IHVuZGVyIFB5dGhvbiAzCiAKLVRvIHR1cm4gdGhlIHdhcm5pbmcgaW50byBhbiBleGNlcHRpb24sIHVzZSB0aGUgYGAtYmJgYCBmbGFnIGluc3RlYWQ6OgorQWZ0ZXIgdGhpcyB5b3VyIGNvZGUgd2lsbCBiZSBmdWxseSBQeXRob24gMyBjb21wbGlhbnQgYnV0IGluIGEgd2F5IHRoYXQgaXMgbm90CitzdXBwb3J0ZWQgYnkgUHl0aG9uIDIuIFlvdSBzaG91bGQgYWxzbyB1cGRhdGUgdGhlIGNsYXNzaWZpZXJzIGluIHlvdXIKK2Bgc2V0dXAucHlgYCB0byBjb250YWluIGBgUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uIDo6IDMgOjogT25seWBgLgogCi0gICAkIHB5dGhvbjMgLWJiCi0gICA+Pj4gYiIiID09ICIiCi0gICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6Ci0gICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDEsIGluIDxtb2R1bGU+Ci0gICBCeXRlc1dhcm5pbmc6IENvbXBhcmlzb24gYmV0d2VlbiBieXRlcyBhbmQgc3RyaW5nCiAKLQotSW5kZXhpbmcgYnl0ZXMgb2JqZWN0cwotJycnJycnJycnJycnJycnJycnJycnJwotCi1Bbm90aGVyIHBvdGVudGlhbGx5IHN1cnByaXNpbmcgY2hhbmdlIGlzIHRoZSBpbmRleGluZyBiZWhhdmlvdXIgb2YgYnl0ZXMKLW9iamVjdHMgaW4gUHl0aG9uIDM6OgotCi0gICA+Pj4gYiJ4eXoiWzBdCi0gICAxMjAKLQotSW5kZWVkLCBQeXRob24gMyBieXRlcyBvYmplY3RzIChhcyB3ZWxsIGFzIDpjbGFzczpgYnl0ZWFycmF5YCBvYmplY3RzKQotYXJlIHNlcXVlbmNlcyBvZiBpbnRlZ2Vycy4gIEJ1dCBjb2RlIGNvbnZlcnRlZCBmcm9tIFB5dGhvbiAyIHdpbGwgb2Z0ZW4KLWFzc3VtZSB0aGF0IGluZGV4aW5nIGEgYnl0ZXN0cmluZyBwcm9kdWNlcyBhbm90aGVyIGJ5dGVzdHJpbmcsIG5vdCBhbgotaW50ZWdlci4gIFRvIHJlY29uY2lsZSBib3RoIGJlaGF2aW91cnMsIHVzZSBzbGljaW5nOjoKLQotICAgPj4+IGIieHl6IlswOjFdCi0gICBiJ3gnCi0gICA+Pj4gbiA9IDEKLSAgID4+PiBiInh5eiJbbjpuKzFdCi0gICBiJ3knCi0KLVRoZSBvbmx5IHJlbWFpbmluZyBnb3RjaGEgaXMgdGhhdCBhbiBvdXQtb2YtYm91bmRzIHNsaWNlIHJldHVybnMgYW4gZW1wdHkKLWJ5dGVzIG9iamVjdCBpbnN0ZWFkIG9mIHJhaXNpbmcgYGBJbmRleEVycm9yYGA6Ci0KLSAgID4+PiBiInh5eiJbM10KLSAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKLSAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgMSwgaW4gPG1vZHVsZT4KLSAgIEluZGV4RXJyb3I6IGluZGV4IG91dCBvZiByYW5nZQotICAgPj4+IGIieHl6IlszOjRdCi0gICBiJycKLQotCi1gYF9fc3RyX18oKWBgL2BgX191bmljb2RlX18oKWBgCi0nJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnCi0KLUluIFB5dGhvbiAyLCBvYmplY3RzIGNhbiBzcGVjaWZ5IGJvdGggYSBzdHJpbmcgYW5kIHVuaWNvZGUgcmVwcmVzZW50YXRpb24gb2YKLXRoZW1zZWx2ZXMuIEluIFB5dGhvbiAzLCB0aG91Z2gsIHRoZXJlIGlzIG9ubHkgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24uIFRoaXMKLWJlY29tZXMgYW4gaXNzdWUgYXMgcGVvcGxlIGNhbiBpbmFkdmVydGVudGx5IGRvIHRoaW5ncyBpbiB0aGVpciBgYF9fc3RyX18oKWBgCi1tZXRob2RzIHdoaWNoIGhhdmUgdW5wcmVkaWN0YWJsZSByZXN1bHRzIChlLmcuLCBpbmZpbml0ZSByZWN1cnNpb24gaWYgeW91Ci1oYXBwZW4gdG8gdXNlIHRoZSBgYHVuaWNvZGUoc2VsZikuZW5jb2RlKCd1dGY4JylgYCBpZGlvbSBhcyB0aGUgYm9keSBvZiB5b3VyCi1gYF9fc3RyX18oKWBgIG1ldGhvZCkuCi0KLVlvdSBjYW4gdXNlIGEgbWl4aW4gY2xhc3MgdG8gd29yayBhcm91bmQgdGhpcy4gVGhpcyBhbGxvd3MgeW91IHRvIG9ubHkgZGVmaW5lIGEKLWBgX191bmljb2RlX18oKWBgIG1ldGhvZCBmb3IgeW91ciBjbGFzcyBhbmQgbGV0IHRoZSBtaXhpbiBkZXJpdmUKLWBgX19zdHJfXygpYGAgZm9yIHlvdSAoY29kZSBmcm9tCi1odHRwOi8vbHVjdW1yLnBvY29vLm9yZy8yMDExLzEvMjIvZm9yd2FyZHMtY29tcGF0aWJsZS1weXRob24vKTo6Ci0KLSAgIGltcG9ydCBzeXMKLQotICAgY2xhc3MgVW5pY29kZU1peGluKG9iamVjdCk6Ci0KLSAgICAgIiIiTWl4aW4gY2xhc3MgdG8gaGFuZGxlIGRlZmluaW5nIHRoZSBwcm9wZXIgX19zdHJfXy9fX3VuaWNvZGVfXwotICAgICBtZXRob2RzIGluIFB5dGhvbiAyIG9yIDMuIiIiCi0KLSAgICAgaWYgc3lzLnZlcnNpb25faW5mb1swXSA+PSAzOiAjIFB5dGhvbiAzCi0gICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKLSAgICAgICAgICAgICByZXR1cm4gc2VsZi5fX3VuaWNvZGVfXygpCi0gICAgIGVsc2U6ICAjIFB5dGhvbiAyCi0gICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKLSAgICAgICAgICAgICByZXR1cm4gc2VsZi5fX3VuaWNvZGVfXygpLmVuY29kZSgndXRmOCcpCi0KLQotICAgY2xhc3MgU3BhbShVbmljb2RlTWl4aW4pOgotCi0gICAgIGRlZiBfX3VuaWNvZGVfXyhzZWxmKToKLSAgICAgICAgIHJldHVybiB1J3NwYW0tc3BhbS1iYWNvbi1zcGFtJyAgIyAydG8zIHdpbGwgcmVtb3ZlIHRoZSAndScgcHJlZml4Ci0KLQotRG9uJ3QgSW5kZXggb24gRXhjZXB0aW9ucwotJycnJycnJycnJycnJycnJycnJycnJycnJwotCi1JbiBQeXRob24gMiwgdGhlIGZvbGxvd2luZyB3b3JrZWQ6OgotCi0gICA+Pj4gZXhjID0gRXhjZXB0aW9uKDEsIDIsIDMpCi0gICA+Pj4gZXhjLmFyZ3NbMV0KLSAgIDIKLSAgID4+PiBleGNbMV0gICMgUHl0aG9uIDIgb25seSEKLSAgIDIKLQotQnV0IGluIFB5dGhvbiAzLCBpbmRleGluZyBkaXJlY3RseSBvbiBhbiBleGNlcHRpb24gaXMgYW4gZXJyb3IuIFlvdSBuZWVkIHRvCi1tYWtlIHN1cmUgdG8gb25seSBpbmRleCBvbiB0aGUgOmF0dHI6YEJhc2VFeGNlcHRpb24uYXJnc2AgYXR0cmlidXRlIHdoaWNoIGlzIGEKLXNlcXVlbmNlIGNvbnRhaW5pbmcgYWxsIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIDptZXRoOmBfX2luaXRfX2AgbWV0aG9kLgotCi1FdmVuIGJldHRlciBpcyB0byB1c2UgdGhlIGRvY3VtZW50ZWQgYXR0cmlidXRlcyB0aGUgZXhjZXB0aW9uIHByb3ZpZGVzLgotCi0KLURvbid0IHVzZSBgYF9fZ2V0c2xpY2VfX2BgICYgRnJpZW5kcwotJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnCi0KLUJlZW4gZGVwcmVjYXRlZCBmb3IgYSB3aGlsZSwgYnV0IFB5dGhvbiAzIGZpbmFsbHkgZHJvcHMgc3VwcG9ydCBmb3IKLWBgX19nZXRzbGljZV9fKClgYCwgZXRjLiBNb3ZlIGNvbXBsZXRlbHkgb3ZlciB0byA6bWV0aDpgX19nZXRpdGVtX19gIGFuZAotZnJpZW5kcy4KLQotCi1VcGRhdGluZyBkb2N0ZXN0cwotJycnJycnJycnJycnJycnJycKLQotRG9uJ3QgZm9yZ2V0IHRvIG1ha2UgdGhlbSBQeXRob24gMi8zIGNvbXBhdGlibGUgYXMgd2VsbC4gSWYgeW91IHdyb3RlIGEKLW1vbm9saXRoaWMgc2V0IG9mIGRvY3Rlc3RzIChlLmcuLCBhIHNpbmdsZSBkb2NzdHJpbmcgY29udGFpbmluZyBhbGwgb2YgeW91cgotZG9jdGVzdHMpLCB5b3Ugc2hvdWxkIGF0IGxlYXN0IGNvbnNpZGVyIGJyZWFraW5nIHRoZSBkb2N0ZXN0cyB1cCBpbnRvIHNtYWxsZXIKLXBpZWNlcyB0byBtYWtlIGl0IG1vcmUgbWFuYWdlYWJsZSB0byBmaXguIE90aGVyd2lzZSBpdCBtaWdodCB2ZXJ5IHdlbGwgYmUgd29ydGgKLXlvdXIgdGltZSBhbmQgZWZmb3J0IHRvIHBvcnQgeW91ciB0ZXN0cyB0byA6bW9kOmB1bml0dGVzdGAuCi0KLQotVXBkYXRlIGBgbWFwYGAgZm9yIGltYmFsYW5jZWQgaW5wdXQgc2VxdWVuY2VzCi0nJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycKLQotV2l0aCBQeXRob24gMiwgd2hlbiBgYG1hcGBgIHdhcyBnaXZlbiBtb3JlIHRoYW4gb25lIGlucHV0IHNlcXVlbmNlIGl0IHdvdWxkIHBhZAotdGhlIHNob3J0ZXIgc2VxdWVuY2VzIHdpdGggYE5vbmVgIHZhbHVlcywgcmV0dXJuaW5nIGEgc2VxdWVuY2UgYXMgbG9uZyBhcyB0aGUKLWxvbmdlc3QgaW5wdXQgc2VxdWVuY2UuCi0KLVdpdGggUHl0aG9uIDMsIGlmIHRoZSBpbnB1dCBzZXF1ZW5jZXMgdG8gYGBtYXBgYCBhcmUgb2YgdW5lcXVhbCBsZW5ndGgsIGBgbWFwYGAKLXdpbGwgc3RvcCBhdCB0aGUgdGVybWluYXRpb24gb2YgdGhlIHNob3J0ZXN0IG9mIHRoZSBzZXF1ZW5jZXMuIEZvciBmdWxsCi1jb21wYXRpYmlsaXR5IHdpdGggYGBtYXBgYCBmcm9tIFB5dGhvbiAyLngsIHdyYXAgdGhlIHNlcXVlbmNlIGFyZ3VtZW50cyBpbgotOmZ1bmM6YGl0ZXJ0b29scy56aXBfbG9uZ2VzdGAsIGUuZy4gYGBtYXAoZnVuYywgKnNlcXVlbmNlcylgYCBiZWNvbWVzCi1gYGxpc3QobWFwKGZ1bmMsIGl0ZXJ0b29scy56aXBfbG9uZ2VzdCgqc2VxdWVuY2VzKSkpYGAuCi0KLUVsaW1pbmF0ZSBgYC0zYGAgV2FybmluZ3MKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotV2hlbiB5b3UgcnVuIHlvdXIgYXBwbGljYXRpb24ncyB0ZXN0IHN1aXRlLCBydW4gaXQgdXNpbmcgdGhlIGBgLTNgYCBmbGFnIHBhc3NlZAotdG8gUHl0aG9uLiBUaGlzIHdpbGwgY2F1c2UgdmFyaW91cyB3YXJuaW5ncyB0byBiZSByYWlzZWQgZHVyaW5nIGV4ZWN1dGlvbiBhYm91dAotdGhpbmdzIHRoYXQgYXJlIHNlbWFudGljIGNoYW5nZXMgYmV0d2VlbiBQeXRob24gMiBhbmQgMy4gVHJ5IHRvIGVsaW1pbmF0ZSB0aG9zZQotd2FybmluZ3MgdG8gbWFrZSB5b3VyIGNvZGUgZXZlbiBtb3JlIHBvcnRhYmxlIHRvIFB5dGhvbiAzLgotCi0KLUFsdGVybmF0aXZlIEFwcHJvYWNoZXMKLT09PT09PT09PT09PT09PT09PT09PT0KLQotV2hpbGUgc3VwcG9ydGluZyBQeXRob24gMiAmIDMgc2ltdWx0YW5lb3VzbHkgaXMgdHlwaWNhbGx5IHRoZSBwcmVmZXJyZWQgY2hvaWNlCi1ieSBwZW9wbGUgc28gdGhhdCB0aGV5IGNhbiBjb250aW51ZSB0byBpbXByb3ZlIGNvZGUgYW5kIGhhdmUgaXQgd29yayBmb3IgdGhlCi1tb3N0IG51bWJlciBvZiB1c2VycywgeW91ciBsaWZlIG1heSBiZSBlYXNpZXIgaWYgeW91IG9ubHkgaGF2ZSB0byBzdXBwb3J0IG9uZQotbWFqb3IgdmVyc2lvbiBvZiBQeXRob24gZ29pbmcgZm9yd2FyZC4KLQotU3VwcG9ydGluZyBPbmx5IFB5dGhvbiAzIEdvaW5nIEZvcndhcmQgRnJvbSBQeXRob24gMiBDb2RlCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotSWYgeW91IGhhdmUgUHl0aG9uIDIgY29kZSBidXQgZ29pbmcgZm9yd2FyZCBvbmx5IHdhbnQgdG8gaW1wcm92ZSBpdCBhcyBQeXRob24gMwotY29kZSwgdGhlbiB5b3UgY2FuIHVzZSAydG8zXyB0byB0cmFuc2xhdGUgeW91ciBQeXRob24gMiBjb2RlIHRvIFB5dGhvbiAzIGNvZGUuCi1UaGlzIGlzIG9ubHkgcmVjb21tZW5kZWQsIHRob3VnaCwgaWYgeW91ciBjdXJyZW50IHZlcnNpb24gb2YgeW91ciBwcm9qZWN0IGlzCi1nb2luZyBpbnRvIG1haW50ZW5hbmNlIG1vZGUgYW5kIHlvdSB3YW50IGFsbCBuZXcgZmVhdHVyZXMgdG8gYmUgZXhjbHVzaXZlIHRvCi1QeXRob24gMy4KLQotCi1CYWNrcG9ydGluZyBQeXRob24gMyBjb2RlIHRvIFB5dGhvbiAyCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUlmIHlvdSBoYXZlIFB5dGhvbiAzIGNvZGUgYW5kIGhhdmUgbGl0dGxlIGludGVyZXN0IGluIHN1cHBvcnRpbmcgUHl0aG9uIDIgeW91Ci1jYW4gdXNlIDN0bzJfIHRvIHRyYW5zbGF0ZSBmcm9tIFB5dGhvbiAzIGNvZGUgdG8gUHl0aG9uIDIgY29kZS4gVGhpcyBpcyBvbmx5Ci1yZWNvbW1lbmRlZCBpZiB5b3UgZG9uJ3QgcGxhbiB0byBoZWF2aWx5IHN1cHBvcnQgUHl0aG9uIDIgdXNlcnMuIE90aGVyd2lzZQotd3JpdGUgeW91ciBjb2RlIGZvciBQeXRob24gMyBhbmQgdGhlbiBiYWNrcG9ydCBhcyBmYXIgYmFjayBhcyB5b3Ugd2FudC4gVGhpcwotaXMgdHlwaWNhbGx5IGVhc2llciB0aGFuIGdvaW5nIGZyb20gUHl0aG9uIDIgdG8gMyBhcyB5b3Ugd2lsbCBoYXZlIHdvcmtlZCBvdXQKLWFueSBkaWZmaWN1bHRpZXMgd2l0aCBlLmcuIGJ5dGVzL3N0cmluZ3MsIGV0Yy4KLQotCi1PdGhlciBSZXNvdXJjZXMKLT09PT09PT09PT09PT09PQotCi1UaGUgYXV0aG9ycyBvZiB0aGUgZm9sbG93aW5nIGJsb2cgcG9zdHMsIHdpa2kgcGFnZXMsIGFuZCBib29rcyBkZXNlcnZlIHNwZWNpYWwKLXRoYW5rcyBmb3IgbWFraW5nIHB1YmxpYyB0aGVpciB0aXBzIGZvciBwb3J0aW5nIFB5dGhvbiAyIGNvZGUgdG8gUHl0aG9uIDMgKGFuZAotdGh1cyBoZWxwaW5nIHByb3ZpZGUgaW5mb3JtYXRpb24gZm9yIHRoaXMgZG9jdW1lbnQgYW5kIGl0cyB2YXJpb3VzIHJldmlzaW9ucwotb3ZlciB0aGUgeWVhcnMpOgotCi0qIGh0dHA6Ly93aWtpLnB5dGhvbi5vcmcvbW9pbi9Qb3J0aW5nUHl0aG9uVG9QeTNrCi0qIGh0dHA6Ly9weXRob24zcG9ydGluZy5jb20vCi0qIGh0dHA6Ly9kb2NzLnB5dGhvbnNwcmludHMuY29tL3B5dGhvbjNfcG9ydGluZy9weS1wb3J0aW5nLmh0bWwKLSogaHR0cDovL3RlY2hzcG90Lnp6emVlay5vcmcvMjAxMS8wMS8yNC96enplZWstcy1ndWlkZS10by1weXRob24tMy1wb3J0aW5nLwotKiBodHRwOi8vZGFiZWF6LmJsb2dzcG90LmNvbS8yMDExLzAxL3BvcnRpbmctcHk2NS1hbmQtbXktc3VwZXJib2FyZC10by5odG1sCi0qIGh0dHA6Ly9sdWN1bXIucG9jb28ub3JnLzIwMTEvMS8yMi9mb3J3YXJkcy1jb21wYXRpYmxlLXB5dGhvbi8KLSogaHR0cDovL2x1Y3Vtci5wb2Nvby5vcmcvMjAxMC8yLzExL3BvcnRpbmctdG8tcHl0aG9uLTMtYS1ndWlkZS8KLSogaHR0cHM6Ly93aWtpLnVidW50dS5jb20vUHl0aG9uLzMKLQotSWYgeW91IGZlZWwgdGhlcmUgaXMgc29tZXRoaW5nIG1pc3NpbmcgZnJvbSB0aGlzIGRvY3VtZW50IHRoYXQgc2hvdWxkIGJlIGFkZGVkLAotcGxlYXNlIGVtYWlsIHRoZSBweXRob24tcG9ydGluZ18gbWFpbGluZyBsaXN0LgotCi0KLQotLi4gXzJ0bzM6IGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5LzJ0bzMuaHRtbAotLi4gXzN0bzI6IGh0dHBzOi8vcHlwaS5weXRob24ub3JnL3B5cGkvM3RvMgotLi4gX0NoZWVzZXNob3A6IFB5UElfCi0uLiBfY292ZXJhZ2U6IGh0dHBzOi8vcHlwaS5weXRob24ub3JnL3B5cGkvY292ZXJhZ2UKLS4uIF9mdXR1cmU6IGh0dHA6Ly9weXRob24tZnV0dXJlLm9yZy8KLS4uIF9tb2Rlcm5pemU6IGh0dHBzOi8vZ2l0aHViLmNvbS9taXRzdWhpa28vcHl0aG9uLW1vZGVybml6ZQorLi4gXzJ0bzM6IGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS8ydG8zLmh0bWwKKy4uIF9jYW5pdXNlcHl0aG9uMzogaHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9jYW5pdXNlcHl0aG9uMworLi4gX2NoZWF0IHNoZWV0OiBodHRwOi8vcHl0aG9uLWZ1dHVyZS5vcmcvY29tcGF0aWJsZV9pZGlvbXMuaHRtbAorLi4gX2NvdmVyYWdlLnB5OiBodHRwczovL3B5cGkucHl0aG9uLm9yZy9weXBpL2NvdmVyYWdlCisuLiBfRnV0dXJpemU6IGh0dHA6Ly9weXRob24tZnV0dXJlLm9yZy9hdXRvbWF0aWNfY29udmVyc2lvbi5odG1sCisuLiBfTW9kZXJuaXplOiBodHRwOi8vcHl0aG9uLW1vZGVybml6ZS5yZWFkdGhlZG9jcy5vcmcvZW4vbGF0ZXN0LwogLi4gX1BvcnRpbmcgdG8gUHl0aG9uIDM6IGh0dHA6Ly9weXRob24zcG9ydGluZy5jb20vCi0uLiBfUHlQSTogaHR0cDovL3B5cGkucHl0aG9uLm9yZy8KLS4uIF9QeXRob24gMi4yOiBodHRwOi8vd3d3LnB5dGhvbi5vcmcvMi4yLngKLS4uIF9QeXRob24gMi41OiBodHRwOi8vd3d3LnB5dGhvbi5vcmcvMi41LngKLS4uIF9QeXRob24gMi42OiBodHRwOi8vd3d3LnB5dGhvbi5vcmcvMi42LngKLS4uIF9QeXRob24gMi43OiBodHRwOi8vd3d3LnB5dGhvbi5vcmcvMi43LngKLS4uIF9QeXRob24gMi41OiBodHRwOi8vd3d3LnB5dGhvbi5vcmcvMi41LngKLS4uIF9QeXRob24gMy4zOiBodHRwOi8vd3d3LnB5dGhvbi5vcmcvMy4zLngKLS4uIF9QeXRob24gMyBQYWNrYWdlczogaHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaT86YWN0aW9uPWJyb3dzZSZjPTUzMyZzaG93PWFsbAorLi4gX1B5bGludDogaHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9weWxpbnQKIC4uIF9QeXRob24gMyBRICYgQTogaHR0cDovL25jb2dobGFuLWRldnMtcHl0aG9uLW5vdGVzLnJlYWR0aGVkb2NzLm9yZy9lbi9sYXRlc3QvcHl0aG9uMy9xdWVzdGlvbnNfYW5kX2Fuc3dlcnMuaHRtbAotLi4gX3B5dGhvbi1wb3J0aW5nOiBodHRwOi8vbWFpbC5weXRob24ub3JnL21haWxtYW4vbGlzdGluZm8vcHl0aG9uLXBvcnRpbmcKKworLi4gX3B5dGhvbi1mdXR1cmU6IGh0dHA6Ly9weXRob24tZnV0dXJlLm9yZy8KKy4uIF9weXRob24tcG9ydGluZzogaHR0cHM6Ly9tYWlsLnB5dGhvbi5vcmcvbWFpbG1hbi9saXN0aW5mby9weXRob24tcG9ydGluZwogLi4gX3NpeDogaHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9zaXgKIC4uIF90b3g6IGh0dHBzOi8vcHlwaS5weXRob24ub3JnL3B5cGkvdG94Ci0uLiBfdHJvdmUgY2xhc3NpZmllcnM6IGh0dHBzOi8vcHlwaS5weXRob24ub3JnL3B5cGk/JTNBYWN0aW9uPWxpc3RfY2xhc3NpZmllcnMKLQorLi4gX3Ryb3ZlIGNsYXNzaWZpZXI6IGh0dHBzOi8vcHlwaS5weXRob24ub3JnL3B5cGk/JTNBYWN0aW9uPWxpc3RfY2xhc3NpZmllcnMKKy4uIF8iV2hhdCdzIE5ldyI6IGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvd2hhdHNuZXcvaW5kZXguaHRtbApkaWZmIC0tZ2l0IGEvRG9jL2hvd3RvL3JlZ2V4LnJzdCBiL0RvYy9ob3d0by9yZWdleC5yc3QKaW5kZXggNTIwM2U1My4uOWFlMDRkNyAxMDA2NDQKLS0tIGEvRG9jL2hvd3RvL3JlZ2V4LnJzdAorKysgYi9Eb2MvaG93dG8vcmVnZXgucnN0CkBAIC0yNzEsOCArMjcxLDggQEAKIAogICAgPj4+IGltcG9ydCByZQogICAgPj4+IHAgPSByZS5jb21waWxlKCdhYionKQotICAgPj4+IHAgICNkb2N0ZXN0OiArRUxMSVBTSVMKLSAgIDxfc3JlLlNSRV9QYXR0ZXJuIG9iamVjdCBhdCAweC4uLj4KKyAgID4+PiBwCisgICByZS5jb21waWxlKCdhYionKQogCiA6ZnVuYzpgcmUuY29tcGlsZWAgYWxzbyBhY2NlcHRzIGFuIG9wdGlvbmFsICpmbGFncyogYXJndW1lbnQsIHVzZWQgdG8gZW5hYmxlCiB2YXJpb3VzIHNwZWNpYWwgZmVhdHVyZXMgYW5kIHN5bnRheCB2YXJpYXRpb25zLiAgV2UnbGwgZ28gb3ZlciB0aGUgYXZhaWxhYmxlCkBAIC0zODMsOCArMzgzLDggQEAKIAogICAgPj4+IGltcG9ydCByZQogICAgPj4+IHAgPSByZS5jb21waWxlKCdbYS16XSsnKQotICAgPj4+IHAgICNkb2N0ZXN0OiArRUxMSVBTSVMKLSAgIDxfc3JlLlNSRV9QYXR0ZXJuIG9iamVjdCBhdCAweC4uLj4KKyAgID4+PiBwCisgICByZS5jb21waWxlKCdbYS16XSsnKQogCiBOb3csIHlvdSBjYW4gdHJ5IG1hdGNoaW5nIHZhcmlvdXMgc3RyaW5ncyBhZ2FpbnN0IHRoZSBSRSBgYFthLXpdK2BgLiAgQW4gZW1wdHkKIHN0cmluZyBzaG91bGRuJ3QgbWF0Y2ggYXQgYWxsLCBzaW5jZSBgYCtgYCBtZWFucyAnb25lIG9yIG1vcmUgcmVwZXRpdGlvbnMnLgpAQCAtNDAyLDcgKzQwMiw3IEBACiAKICAgID4+PiBtID0gcC5tYXRjaCgndGVtcG8nKQogICAgPj4+IG0gICNkb2N0ZXN0OiArRUxMSVBTSVMKLSAgIDxfc3JlLlNSRV9NYXRjaCBvYmplY3QgYXQgMHguLi4+CisgICA8X3NyZS5TUkVfTWF0Y2ggb2JqZWN0OyBzcGFuPSgwLCA1KSwgbWF0Y2g9J3RlbXBvJz4KIAogTm93IHlvdSBjYW4gcXVlcnkgdGhlIDpyZWY6YG1hdGNoIG9iamVjdCA8bWF0Y2gtb2JqZWN0cz5gIGZvciBpbmZvcm1hdGlvbgogYWJvdXQgdGhlIG1hdGNoaW5nIHN0cmluZy4gIDpyZWY6YG1hdGNoIG9iamVjdCA8bWF0Y2gtb2JqZWN0cz5gIGluc3RhbmNlcwpAQCAtNDQxLDcgKzQ0MSw3IEBACiAgICA+Pj4gcHJpbnQocC5tYXRjaCgnOjo6IG1lc3NhZ2UnKSkKICAgIE5vbmUKICAgID4+PiBtID0gcC5zZWFyY2goJzo6OiBtZXNzYWdlJyk7IHByaW50KG0pICAjZG9jdGVzdDogK0VMTElQU0lTCi0gICA8X3NyZS5TUkVfTWF0Y2ggb2JqZWN0IGF0IDB4Li4uPgorICAgPF9zcmUuU1JFX01hdGNoIG9iamVjdDsgc3Bhbj0oNCwgMTEpLCBtYXRjaD0nbWVzc2FnZSc+CiAgICA+Pj4gbS5ncm91cCgpCiAgICAnbWVzc2FnZScKICAgID4+PiBtLnNwYW4oKQpAQCAtNDkzLDcgKzQ5Myw3IEBACiAgICA+Pj4gcHJpbnQocmUubWF0Y2gocidGcm9tXHMrJywgJ0Zyb21hZ2UgYW1rJykpCiAgICBOb25lCiAgICA+Pj4gcmUubWF0Y2gocidGcm9tXHMrJywgJ0Zyb20gYW1rIFRodSBNYXkgMTQgMTk6MTI6MTAgMTk5OCcpICAjZG9jdGVzdDogK0VMTElQU0lTCi0gICA8X3NyZS5TUkVfTWF0Y2ggb2JqZWN0IGF0IDB4Li4uPgorICAgPF9zcmUuU1JFX01hdGNoIG9iamVjdDsgc3Bhbj0oMCwgNSksIG1hdGNoPSdGcm9tICc+CiAKIFVuZGVyIHRoZSBob29kLCB0aGVzZSBmdW5jdGlvbnMgc2ltcGx5IGNyZWF0ZSBhIHBhdHRlcm4gb2JqZWN0IGZvciB5b3UKIGFuZCBjYWxsIHRoZSBhcHByb3ByaWF0ZSBtZXRob2Qgb24gaXQuICBUaGV5IGFsc28gc3RvcmUgdGhlIGNvbXBpbGVkCkBAIC02ODUsNyArNjg1LDcgQEAKICAgIGxpbmUsIHRoZSBSRSB0byB1c2UgaXMgYGBeRnJvbWBgLiA6OgogCiAgICAgICA+Pj4gcHJpbnQocmUuc2VhcmNoKCdeRnJvbScsICdGcm9tIEhlcmUgdG8gRXRlcm5pdHknKSkgICNkb2N0ZXN0OiArRUxMSVBTSVMKLSAgICAgIDxfc3JlLlNSRV9NYXRjaCBvYmplY3QgYXQgMHguLi4+CisgICAgICA8X3NyZS5TUkVfTWF0Y2ggb2JqZWN0OyBzcGFuPSgwLCA0KSwgbWF0Y2g9J0Zyb20nPgogICAgICAgPj4+IHByaW50KHJlLnNlYXJjaCgnXkZyb20nLCAnUmVjaXRpbmcgRnJvbSBNZW1vcnknKSkKICAgICAgIE5vbmUKIApAQCAtNjk3LDExICs2OTcsMTEgQEAKICAgIG9yIGFueSBsb2NhdGlvbiBmb2xsb3dlZCBieSBhIG5ld2xpbmUgY2hhcmFjdGVyLiAgICAgOjoKIAogICAgICAgPj4+IHByaW50KHJlLnNlYXJjaCgnfSQnLCAne2Jsb2NrfScpKSAgI2RvY3Rlc3Q6ICtFTExJUFNJUwotICAgICAgPF9zcmUuU1JFX01hdGNoIG9iamVjdCBhdCAweC4uLj4KKyAgICAgIDxfc3JlLlNSRV9NYXRjaCBvYmplY3Q7IHNwYW49KDYsIDcpLCBtYXRjaD0nfSc+CiAgICAgICA+Pj4gcHJpbnQocmUuc2VhcmNoKCd9JCcsICd7YmxvY2t9ICcpKQogICAgICAgTm9uZQogICAgICAgPj4+IHByaW50KHJlLnNlYXJjaCgnfSQnLCAne2Jsb2NrfVxuJykpICAjZG9jdGVzdDogK0VMTElQU0lTCi0gICAgICA8X3NyZS5TUkVfTWF0Y2ggb2JqZWN0IGF0IDB4Li4uPgorICAgICAgPF9zcmUuU1JFX01hdGNoIG9iamVjdDsgc3Bhbj0oNiwgNyksIG1hdGNoPSd9Jz4KIAogICAgVG8gbWF0Y2ggYSBsaXRlcmFsIGBgJyQnYGAsIHVzZSBgYFwkYGAgb3IgZW5jbG9zZSBpdCBpbnNpZGUgYSBjaGFyYWN0ZXIgY2xhc3MsCiAgICBhcyBpbiAgYGBbJF1gYC4KQEAgLTcyNiw3ICs3MjYsNyBAQAogCiAgICAgICA+Pj4gcCA9IHJlLmNvbXBpbGUocidcYmNsYXNzXGInKQogICAgICAgPj4+IHByaW50KHAuc2VhcmNoKCdubyBjbGFzcyBhdCBhbGwnKSkgICNkb2N0ZXN0OiArRUxMSVBTSVMKLSAgICAgIDxfc3JlLlNSRV9NYXRjaCBvYmplY3QgYXQgMHguLi4+CisgICAgICA8X3NyZS5TUkVfTWF0Y2ggb2JqZWN0OyBzcGFuPSgzLCA4KSwgbWF0Y2g9J2NsYXNzJz4KICAgICAgID4+PiBwcmludChwLnNlYXJjaCgndGhlIGRlY2xhc3NpZmllZCBhbGdvcml0aG0nKSkKICAgICAgIE5vbmUKICAgICAgID4+PiBwcmludChwLnNlYXJjaCgnb25lIHN1YmNsYXNzIGlzJykpCkBAIC03NDQsNyArNzQ0LDcgQEAKICAgICAgID4+PiBwcmludChwLnNlYXJjaCgnbm8gY2xhc3MgYXQgYWxsJykpCiAgICAgICBOb25lCiAgICAgICA+Pj4gcHJpbnQocC5zZWFyY2goJ1xiJyArICdjbGFzcycgKyAnXGInKSkgICNkb2N0ZXN0OiArRUxMSVBTSVMKLSAgICAgIDxfc3JlLlNSRV9NYXRjaCBvYmplY3QgYXQgMHguLi4+CisgICAgICA8X3NyZS5TUkVfTWF0Y2ggb2JqZWN0OyBzcGFuPSgwLCA3KSwgbWF0Y2g9J1x4MDhjbGFzc1x4MDgnPgogCiAgICBTZWNvbmQsIGluc2lkZSBhIGNoYXJhY3RlciBjbGFzcywgd2hlcmUgdGhlcmUncyBubyB1c2UgZm9yIHRoaXMgYXNzZXJ0aW9uLAogICAgYGBcYmBgIHJlcHJlc2VudHMgdGhlIGJhY2tzcGFjZSBjaGFyYWN0ZXIsIGZvciBjb21wYXRpYmlsaXR5IHdpdGggUHl0aG9uJ3MKQEAgLTg1Miw3ICs4NTIsNyBAQAogcHJvYmxlbS4gIEJvdGggb2YgdGhlbSB1c2UgYSBjb21tb24gc3ludGF4IGZvciByZWd1bGFyIGV4cHJlc3Npb24gZXh0ZW5zaW9ucywgc28KIHdlJ2xsIGxvb2sgYXQgdGhhdCBmaXJzdC4KIAotUGVybCA1IGlzIHdlbGwta25vd24gZm9yIGl0cyBwb3dlcmZ1bCBhZGRpdGlvbnMgdG8gc3RhbmRhcmQgcmVndWxhciBleHByZXNzaW9ucy4KK1BlcmwgNSBpcyB3ZWxsIGtub3duIGZvciBpdHMgcG93ZXJmdWwgYWRkaXRpb25zIHRvIHN0YW5kYXJkIHJlZ3VsYXIgZXhwcmVzc2lvbnMuCiBGb3IgdGhlc2UgbmV3IGZlYXR1cmVzIHRoZSBQZXJsIGRldmVsb3BlcnMgY291bGRuJ3QgY2hvb3NlIG5ldyBzaW5nbGUta2V5c3Ryb2tlIG1ldGFjaGFyYWN0ZXJzCiBvciBuZXcgc3BlY2lhbCBzZXF1ZW5jZXMgYmVnaW5uaW5nIHdpdGggYGBcYGAgd2l0aG91dCBtYWtpbmcgUGVybCdzIHJlZ3VsYXIKIGV4cHJlc3Npb25zIGNvbmZ1c2luZ2x5IGRpZmZlcmVudCBmcm9tIHN0YW5kYXJkIFJFcy4gIElmIHRoZXkgY2hvc2UgYGAmYGAgYXMgYQpkaWZmIC0tZ2l0IGEvRG9jL2hvd3RvL3NvY2tldHMucnN0IGIvRG9jL2hvd3RvL3NvY2tldHMucnN0CmluZGV4IDdhOWIwZWQuLjA0Mzk0ZDQgMTAwNjQ0Ci0tLSBhL0RvYy9ob3d0by9zb2NrZXRzLnJzdAorKysgYi9Eb2MvaG93dG8vc29ja2V0cy5yc3QKQEAgLTE4MCw3ICsxODAsNyBAQAogQXNzdW1pbmcgeW91IGRvbid0IHdhbnQgdG8gZW5kIHRoZSBjb25uZWN0aW9uLCB0aGUgc2ltcGxlc3Qgc29sdXRpb24gaXMgYSBmaXhlZAogbGVuZ3RoIG1lc3NhZ2U6OgogCi0gICBjbGFzcyBteXNvY2tldDoKKyAgIGNsYXNzIE15U29ja2V0OgogICAgICAgICIiImRlbW9uc3RyYXRpb24gY2xhc3Mgb25seQogICAgICAgICAgLSBjb2RlZCBmb3IgY2xhcml0eSwgbm90IGVmZmljaWVuY3kKICAgICAgICAiIiIKQEAgLTE4OSw4ICsxODksOCBAQAogICAgICAgICAgICBpZiBzb2NrIGlzIE5vbmU6CiAgICAgICAgICAgICAgICBzZWxmLnNvY2sgPSBzb2NrZXQuc29ja2V0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCi0gICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgIHNlbGYuc29jayA9IHNvY2sKKyAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgIHNlbGYuc29jayA9IHNvY2sKIAogICAgICAgIGRlZiBjb25uZWN0KHNlbGYsIGhvc3QsIHBvcnQpOgogICAgICAgICAgICBzZWxmLnNvY2suY29ubmVjdCgoaG9zdCwgcG9ydCkpCkBAIC0yMDQsMTMgKzIwNCwxNSBAQAogICAgICAgICAgICAgICAgdG90YWxzZW50ID0gdG90YWxzZW50ICsgc2VudAogCiAgICAgICAgZGVmIG15cmVjZWl2ZShzZWxmKToKLSAgICAgICAgICAgbXNnID0gYicnCi0gICAgICAgICAgIHdoaWxlIGxlbihtc2cpIDwgTVNHTEVOOgotICAgICAgICAgICAgICAgY2h1bmsgPSBzZWxmLnNvY2sucmVjdihNU0dMRU4tbGVuKG1zZykpCisgICAgICAgICAgIGNodW5rcyA9IFtdCisgICAgICAgICAgIGJ5dGVzX3JlY2QgPSAwCisgICAgICAgICAgIHdoaWxlIGJ5dGVzX3JlY2QgPCBNU0dMRU46CisgICAgICAgICAgICAgICBjaHVuayA9IHNlbGYuc29jay5yZWN2KG1pbihNU0dMRU4gLSBieXRlc19yZWNkLCAyMDQ4KSkKICAgICAgICAgICAgICAgIGlmIGNodW5rID09IGInJzoKICAgICAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoInNvY2tldCBjb25uZWN0aW9uIGJyb2tlbiIpCi0gICAgICAgICAgICAgICBtc2cgPSBtc2cgKyBjaHVuawotICAgICAgICAgICByZXR1cm4gbXNnCisgICAgICAgICAgICAgICBjaHVua3MuYXBwZW5kKGNodW5rKQorICAgICAgICAgICAgICAgYnl0ZXNfcmVjZCA9IGJ5dGVzX3JlY2QgKyBsZW4oY2h1bmspCisgICAgICAgICAgIHJldHVybiBiJycuam9pbihjaHVua3MpCiAKIFRoZSBzZW5kaW5nIGNvZGUgaGVyZSBpcyB1c2FibGUgZm9yIGFsbW9zdCBhbnkgbWVzc2FnaW5nIHNjaGVtZSAtIGluIFB5dGhvbiB5b3UKIHNlbmQgc3RyaW5ncywgYW5kIHlvdSBjYW4gdXNlIGBgbGVuKClgYCB0byBkZXRlcm1pbmUgaXRzIGxlbmd0aCAoZXZlbiBpZiBpdCBoYXMKQEAgLTIzMiw3ICsyMzQsNyBAQAogZm9sbG93aW5nIG1lc3NhZ2UuIFlvdSdsbCBuZWVkIHRvIHB1dCB0aGF0IGFzaWRlIGFuZCBob2xkIG9udG8gaXQsIHVudGlsIGl0J3MKIG5lZWRlZC4KIAotUHJlZml4aW5nIHRoZSBtZXNzYWdlIHdpdGggaXQncyBsZW5ndGggKHNheSwgYXMgNSBudW1lcmljIGNoYXJhY3RlcnMpIGdldHMgbW9yZQorUHJlZml4aW5nIHRoZSBtZXNzYWdlIHdpdGggaXRzIGxlbmd0aCAoc2F5LCBhcyA1IG51bWVyaWMgY2hhcmFjdGVycykgZ2V0cyBtb3JlCiBjb21wbGV4LCBiZWNhdXNlIChiZWxpZXZlIGl0IG9yIG5vdCksIHlvdSBtYXkgbm90IGdldCBhbGwgNSBjaGFyYWN0ZXJzIGluIG9uZQogYGByZWN2YGAuIEluIHBsYXlpbmcgYXJvdW5kLCB5b3UnbGwgZ2V0IGF3YXkgd2l0aCBpdDsgYnV0IGluIGhpZ2ggbmV0d29yayBsb2FkcywKIHlvdXIgY29kZSB3aWxsIHZlcnkgcXVpY2tseSBicmVhayB1bmxlc3MgeW91IHVzZSB0d28gYGByZWN2YGAgbG9vcHMgLSB0aGUgZmlyc3QKZGlmZiAtLWdpdCBhL0RvYy9ob3d0by91bmljb2RlLnJzdCBiL0RvYy9ob3d0by91bmljb2RlLnJzdAppbmRleCA5ZDQ4YTc4Li5iNDlhYzM5IDEwMDY0NAotLS0gYS9Eb2MvaG93dG8vdW5pY29kZS5yc3QKKysrIGIvRG9jL2hvd3RvL3VuaWNvZGUucnN0CkBAIC0zMiwxMSArMzIsMTEgQEAKIEluIHRoZSBtaWQtMTk4MHMgYW4gQXBwbGUgSUkgQkFTSUMgcHJvZ3JhbSB3cml0dGVuIGJ5IGEgRnJlbmNoIHNwZWFrZXIKIG1pZ2h0IGhhdmUgbGluZXMgbGlrZSB0aGVzZTo6CiAKLSAgIFBSSU5UICJGSUNISUVSIEVTVCBDT01QTEVURS4iCi0gICBQUklOVCAiQ0FSQUNURVJFIE5PTiBBQ0NFUFRFLiIKKyAgIFBSSU5UICJNSVNFIEEgSk9VUiBURVJNSU5FRSIKKyAgIFBSSU5UICJQQVJBTUVUUkVTIEVOUkVHSVNUUkVTIgogCi1UaG9zZSBtZXNzYWdlcyBzaG91bGQgY29udGFpbiBhY2NlbnRzIChjb21wbGV0w6ksIGNhcmFjdMOocmUsIGFjY2VwdMOpKSwKLWFuZCB0aGV5IGp1c3QgbG9vayB3cm9uZyB0byBzb21lb25lIHdobyBjYW4gcmVhZCBGcmVuY2guCitUaG9zZSBtZXNzYWdlcyBzaG91bGQgY29udGFpbiBhY2NlbnRzICh0ZXJtaW7DqWUsIHBhcmFtw6h0cmUsIGVucmVnaXN0csOpcykgYW5kCit0aGV5IGp1c3QgbG9vayB3cm9uZyB0byBzb21lb25lIHdobyBjYW4gcmVhZCBGcmVuY2guCiAKIEluIHRoZSAxOTgwcywgYWxtb3N0IGFsbCBwZXJzb25hbCBjb21wdXRlcnMgd2VyZSA4LWJpdCwgbWVhbmluZyB0aGF0IGJ5dGVzIGNvdWxkCiBob2xkIHZhbHVlcyByYW5naW5nIGZyb20gMCB0byAyNTUuICBBU0NJSSBjb2RlcyBvbmx5IHdlbnQgdXAgdG8gMTI3LCBzbyBzb21lCkBAIC00OSw3ICs0OSw3IEBACiAKIDI1NSBjaGFyYWN0ZXJzIGFyZW4ndCB2ZXJ5IG1hbnkuICBGb3IgZXhhbXBsZSwgeW91IGNhbid0IGZpdCBib3RoIHRoZSBhY2NlbnRlZAogY2hhcmFjdGVycyB1c2VkIGluIFdlc3Rlcm4gRXVyb3BlIGFuZCB0aGUgQ3lyaWxsaWMgYWxwaGFiZXQgdXNlZCBmb3IgUnVzc2lhbgotaW50byB0aGUgMTI4LS0yNTUgcmFuZ2UgYmVjYXVzZSB0aGVyZSBhcmUgbW9yZSB0aGFuIDEyNyBzdWNoIGNoYXJhY3RlcnMuCitpbnRvIHRoZSAxMjgtLTI1NSByYW5nZSBiZWNhdXNlIHRoZXJlIGFyZSBtb3JlIHRoYW4gMTI4IHN1Y2ggY2hhcmFjdGVycy4KIAogWW91IGNvdWxkIHdyaXRlIGZpbGVzIHVzaW5nIGRpZmZlcmVudCBjb2RlcyAoYWxsIHlvdXIgUnVzc2lhbiBmaWxlcyBpbiBhIGNvZGluZwogc3lzdGVtIGNhbGxlZCBLT0k4LCBhbGwgeW91ciBGcmVuY2ggZmlsZXMgaW4gYSBkaWZmZXJlbnQgY29kaW5nIHN5c3RlbSBjYWxsZWQKQEAgLTI0Niw3ICsyNDYsNyBAQAogICAgdHJ5OgogICAgICAgIHdpdGggb3BlbignL3RtcC9pbnB1dC50eHQnLCAncicpIGFzIGY6CiAgICAgICAgICAgIC4uLgotICAgZXhjZXB0IElPRXJyb3I6CisgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAjICdGaWxlIG5vdCBmb3VuZCcgZXJyb3IgbWVzc2FnZS4KICAgICAgICBwcmludCgiRmljaGllciBub24gdHJvdXbDqSIpCiAKQEAgLTQ5MywxMCArNDkzLDExIEBACiAKIFRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgOm1vZDpgY29kZWNzYCBtb2R1bGUuCiAKLU1hcmMtQW5kcsOpIExlbWJ1cmcgZ2F2ZSBgYSBwcmVzZW50YXRpb24gdGl0bGVkICJQeXRob24gYW5kIFVuaWNvZGUiIChQREYgc2xpZGVzKSA8aHR0cDovL2Rvd25sb2Fkcy5lZ2VuaXguY29tL3B5dGhvbi9Vbmljb2RlLUVQQzIwMDItVGFsay5wZGY+YF8gYXQKLUV1cm9QeXRob24gMjAwMi4gIFRoZSBzbGlkZXMgYXJlIGFuIGV4Y2VsbGVudCBvdmVydmlldyBvZiB0aGUgZGVzaWduCi1vZiBQeXRob24gMidzIFVuaWNvZGUgZmVhdHVyZXMgKHdoZXJlIHRoZSBVbmljb2RlIHN0cmluZyB0eXBlIGlzCi1jYWxsZWQgYGB1bmljb2RlYGAgYW5kIGxpdGVyYWxzIHN0YXJ0IHdpdGggYGB1YGApLgorTWFyYy1BbmRyw6kgTGVtYnVyZyBnYXZlIGBhIHByZXNlbnRhdGlvbiB0aXRsZWQgIlB5dGhvbiBhbmQgVW5pY29kZSIgKFBERiBzbGlkZXMpCis8aHR0cHM6Ly9kb3dubG9hZHMuZWdlbml4LmNvbS9weXRob24vVW5pY29kZS1FUEMyMDAyLVRhbGsucGRmPmBfIGF0CitFdXJvUHl0aG9uIDIwMDIuICBUaGUgc2xpZGVzIGFyZSBhbiBleGNlbGxlbnQgb3ZlcnZpZXcgb2YgdGhlIGRlc2lnbiBvZiBQeXRob24KKzIncyBVbmljb2RlIGZlYXR1cmVzICh3aGVyZSB0aGUgVW5pY29kZSBzdHJpbmcgdHlwZSBpcyBjYWxsZWQgYGB1bmljb2RlYGAgYW5kCitsaXRlcmFscyBzdGFydCB3aXRoIGBgdWBgKS4KIAogCiBSZWFkaW5nIGFuZCBXcml0aW5nIFVuaWNvZGUgRGF0YQpAQCAtNjk2LDEzICs2OTcsMjAgQEAKIFJlZmVyZW5jZXMKIC0tLS0tLS0tLS0KIAotT25lIHNlY3Rpb24gb2YgYE1hc3RlcmluZyBQeXRob24gMyBJbnB1dC9PdXRwdXQgPGh0dHA6Ly9weXZpZGVvLm9yZy92aWRlby8yODkvcHljb24tMjAxMC0tbWFzdGVyaW5nLXB5dGhvbi0zLWktbz5gXywgIGEgUHlDb24gMjAxMCB0YWxrIGJ5IERhdmlkIEJlYXpsZXksIGRpc2N1c3NlcyB0ZXh0IHByb2Nlc3NpbmcgYW5kIGJpbmFyeSBkYXRhIGhhbmRsaW5nLgorT25lIHNlY3Rpb24gb2YgYE1hc3RlcmluZyBQeXRob24gMyBJbnB1dC9PdXRwdXQKKzxodHRwOi8vcHl2aWRlby5vcmcvdmlkZW8vMjg5L3B5Y29uLTIwMTAtLW1hc3RlcmluZy1weXRob24tMy1pLW8+YF8sCithIFB5Q29uIDIwMTAgdGFsayBieSBEYXZpZCBCZWF6bGV5LCBkaXNjdXNzZXMgdGV4dCBwcm9jZXNzaW5nIGFuZCBiaW5hcnkgZGF0YSBoYW5kbGluZy4KIAotVGhlIGBQREYgc2xpZGVzIGZvciBNYXJjLUFuZHLDqSBMZW1idXJnJ3MgcHJlc2VudGF0aW9uICJXcml0aW5nIFVuaWNvZGUtYXdhcmUgQXBwbGljYXRpb25zIGluIFB5dGhvbiIgPGh0dHA6Ly9kb3dubG9hZHMuZWdlbml4LmNvbS9weXRob24vTFNNMjAwNS1EZXZlbG9waW5nLVVuaWNvZGUtYXdhcmUtYXBwbGljYXRpb25zLWluLVB5dGhvbi5wZGY+YF8KK1RoZSBgUERGIHNsaWRlcyBmb3IgTWFyYy1BbmRyw6kgTGVtYnVyZydzIHByZXNlbnRhdGlvbiAiV3JpdGluZyBVbmljb2RlLWF3YXJlCitBcHBsaWNhdGlvbnMgaW4gUHl0aG9uIgorPGh0dHBzOi8vZG93bmxvYWRzLmVnZW5peC5jb20vcHl0aG9uL0xTTTIwMDUtRGV2ZWxvcGluZy1Vbmljb2RlLWF3YXJlLWFwcGxpY2F0aW9ucy1pbi1QeXRob24ucGRmPmBfCiBkaXNjdXNzIHF1ZXN0aW9ucyBvZiBjaGFyYWN0ZXIgZW5jb2RpbmdzIGFzIHdlbGwgYXMgaG93IHRvIGludGVybmF0aW9uYWxpemUKIGFuZCBsb2NhbGl6ZSBhbiBhcHBsaWNhdGlvbi4gIFRoZXNlIHNsaWRlcyBjb3ZlciBQeXRob24gMi54IG9ubHkuCiAKLWBUaGUgR3V0cyBvZiBVbmljb2RlIGluIFB5dGhvbiA8aHR0cDovL3B5dmlkZW8ub3JnL3ZpZGVvLzE3NjgvdGhlLWd1dHMtb2YtdW5pY29kZS1pbi1weXRob24+YF8gaXMgYSBQeUNvbiAyMDEzIHRhbGsgYnkgQmVuamFtaW4gUGV0ZXJzb24gdGhhdCBkaXNjdXNzZXMgdGhlIGludGVybmFsIFVuaWNvZGUgcmVwcmVzZW50YXRpb24gaW4gUHl0aG9uIDMuMy4KK2BUaGUgR3V0cyBvZiBVbmljb2RlIGluIFB5dGhvbgorPGh0dHA6Ly9weXZpZGVvLm9yZy92aWRlby8xNzY4L3RoZS1ndXRzLW9mLXVuaWNvZGUtaW4tcHl0aG9uPmBfCitpcyBhIFB5Q29uIDIwMTMgdGFsayBieSBCZW5qYW1pbiBQZXRlcnNvbiB0aGF0IGRpc2N1c3NlcyB0aGUgaW50ZXJuYWwgVW5pY29kZQorcmVwcmVzZW50YXRpb24gaW4gUHl0aG9uIDMuMy4KIAogCiBBY2tub3dsZWRnZW1lbnRzCmRpZmYgLS1naXQgYS9Eb2MvaG93dG8vdXJsbGliMi5yc3QgYi9Eb2MvaG93dG8vdXJsbGliMi5yc3QKaW5kZXggNWEyMjY2MC4uOTA1MmVkNSAxMDA2NDQKLS0tIGEvRG9jL2hvd3RvL3VybGxpYjIucnN0CisrKyBiL0RvYy9ob3d0by91cmxsaWIyLnJzdApAQCAtMjYsNyArMjYsNyBAQAogCiAgICAgICAgIEEgdHV0b3JpYWwgb24gKkJhc2ljIEF1dGhlbnRpY2F0aW9uKiwgd2l0aCBleGFtcGxlcyBpbiBQeXRob24uCiAKLSoqdXJsbGliLnJlcXVlc3QqKiBpcyBhIGBQeXRob24gPGh0dHA6Ly93d3cucHl0aG9uLm9yZz5gXyBtb2R1bGUgZm9yIGZldGNoaW5nIFVSTHMKKyoqdXJsbGliLnJlcXVlc3QqKiBpcyBhIFB5dGhvbiBtb2R1bGUgZm9yIGZldGNoaW5nIFVSTHMKIChVbmlmb3JtIFJlc291cmNlIExvY2F0b3JzKS4gSXQgb2ZmZXJzIGEgdmVyeSBzaW1wbGUgaW50ZXJmYWNlLCBpbiB0aGUgZm9ybSBvZgogdGhlICp1cmxvcGVuKiBmdW5jdGlvbi4gVGhpcyBpcyBjYXBhYmxlIG9mIGZldGNoaW5nIFVSTHMgdXNpbmcgYSB2YXJpZXR5IG9mCiBkaWZmZXJlbnQgcHJvdG9jb2xzLiBJdCBhbHNvIG9mZmVycyBhIHNsaWdodGx5IG1vcmUgY29tcGxleCBpbnRlcmZhY2UgZm9yCkBAIC01Myw4ICs1Myw4IEBACiBUaGUgc2ltcGxlc3Qgd2F5IHRvIHVzZSB1cmxsaWIucmVxdWVzdCBpcyBhcyBmb2xsb3dzOjoKIAogICAgIGltcG9ydCB1cmxsaWIucmVxdWVzdAotICAgIHJlc3BvbnNlID0gdXJsbGliLnJlcXVlc3QudXJsb3BlbignaHR0cDovL3B5dGhvbi5vcmcvJykKLSAgICBodG1sID0gcmVzcG9uc2UucmVhZCgpCisgICAgd2l0aCB1cmxsaWIucmVxdWVzdC51cmxvcGVuKCdodHRwOi8vcHl0aG9uLm9yZy8nKSBhcyByZXNwb25zZToKKyAgICAgICBodG1sID0gcmVzcG9uc2UucmVhZCgpCiAKIElmIHlvdSB3aXNoIHRvIHJldHJpZXZlIGEgcmVzb3VyY2UgdmlhIFVSTCBhbmQgc3RvcmUgaXQgaW4gYSB0ZW1wb3JhcnkgbG9jYXRpb24sCiB5b3UgY2FuIGRvIHNvIHZpYSB0aGUgOmZ1bmM6YH51cmxsaWIucmVxdWVzdC51cmxyZXRyaWV2ZWAgZnVuY3Rpb246OgpAQCAtNzksOCArNzksOCBAQAogICAgIGltcG9ydCB1cmxsaWIucmVxdWVzdAogCiAgICAgcmVxID0gdXJsbGliLnJlcXVlc3QuUmVxdWVzdCgnaHR0cDovL3d3dy52b2lkc3BhY2Uub3JnLnVrJykKLSAgICByZXNwb25zZSA9IHVybGxpYi5yZXF1ZXN0LnVybG9wZW4ocmVxKQotICAgIHRoZV9wYWdlID0gcmVzcG9uc2UucmVhZCgpCisgICAgd2l0aCB1cmxsaWIucmVxdWVzdC51cmxvcGVuKHJlcSkgYXMgcmVzcG9uc2U6CisgICAgICAgdGhlX3BhZ2UgPSByZXNwb25zZS5yZWFkKCkKIAogTm90ZSB0aGF0IHVybGxpYi5yZXF1ZXN0IG1ha2VzIHVzZSBvZiB0aGUgc2FtZSBSZXF1ZXN0IGludGVyZmFjZSB0byBoYW5kbGUgYWxsIFVSTAogc2NoZW1lcy4gIEZvciBleGFtcGxlLCB5b3UgY2FuIG1ha2UgYW4gRlRQIHJlcXVlc3QgbGlrZSBzbzo6CkBAIC05Nyw3ICs5Nyw3IEBACiAtLS0tCiAKIFNvbWV0aW1lcyB5b3Ugd2FudCB0byBzZW5kIGRhdGEgdG8gYSBVUkwgKG9mdGVuIHRoZSBVUkwgd2lsbCByZWZlciB0byBhIENHSQotKENvbW1vbiBHYXRld2F5IEludGVyZmFjZSkgc2NyaXB0IFsjXV8gb3Igb3RoZXIgd2ViIGFwcGxpY2F0aW9uKS4gV2l0aCBIVFRQLAorKENvbW1vbiBHYXRld2F5IEludGVyZmFjZSkgc2NyaXB0IG9yIG90aGVyIHdlYiBhcHBsaWNhdGlvbikuIFdpdGggSFRUUCwKIHRoaXMgaXMgb2Z0ZW4gZG9uZSB1c2luZyB3aGF0J3Mga25vd24gYXMgYSAqKlBPU1QqKiByZXF1ZXN0LiBUaGlzIGlzIG9mdGVuIHdoYXQKIHlvdXIgYnJvd3NlciBkb2VzIHdoZW4geW91IHN1Ym1pdCBhIEhUTUwgZm9ybSB0aGF0IHlvdSBmaWxsZWQgaW4gb24gdGhlIHdlYi4gTm90CiBhbGwgUE9TVHMgaGF2ZSB0byBjb21lIGZyb20gZm9ybXM6IHlvdSBjYW4gdXNlIGEgUE9TVCB0byB0cmFuc21pdCBhcmJpdHJhcnkgZGF0YQpAQCAtMTE1LDEwICsxMTUsMTAgQEAKICAgICAgICAgICAgICAgJ2xhbmd1YWdlJyA6ICdQeXRob24nIH0KIAogICAgIGRhdGEgPSB1cmxsaWIucGFyc2UudXJsZW5jb2RlKHZhbHVlcykKLSAgICBkYXRhID0gZGF0YS5lbmNvZGUoJ3V0Zi04JykgIyBkYXRhIHNob3VsZCBiZSBieXRlcworICAgIGRhdGEgPSBkYXRhLmVuY29kZSgnYXNjaWknKSAjIGRhdGEgc2hvdWxkIGJlIGJ5dGVzCiAgICAgcmVxID0gdXJsbGliLnJlcXVlc3QuUmVxdWVzdCh1cmwsIGRhdGEpCi0gICAgcmVzcG9uc2UgPSB1cmxsaWIucmVxdWVzdC51cmxvcGVuKHJlcSkKLSAgICB0aGVfcGFnZSA9IHJlc3BvbnNlLnJlYWQoKQorICAgIHdpdGggdXJsbGliLnJlcXVlc3QudXJsb3BlbihyZXEpIGFzIHJlc3BvbnNlOgorICAgICAgIHRoZV9wYWdlID0gcmVzcG9uc2UucmVhZCgpCiAKIE5vdGUgdGhhdCBvdGhlciBlbmNvZGluZ3MgYXJlIHNvbWV0aW1lcyByZXF1aXJlZCAoZS5nLiBmb3IgZmlsZSB1cGxvYWQgZnJvbSBIVE1MCiBmb3JtcyAtIHNlZSBgSFRNTCBTcGVjaWZpY2F0aW9uLCBGb3JtIFN1Ym1pc3Npb24KQEAgLTE3NCwxNyArMTc0LDE3IEBACiAgICAgaW1wb3J0IHVybGxpYi5yZXF1ZXN0CiAKICAgICB1cmwgPSAnaHR0cDovL3d3dy5zb21lc2VydmVyLmNvbS9jZ2ktYmluL3JlZ2lzdGVyLmNnaScKLSAgICB1c2VyX2FnZW50ID0gJ01vemlsbGEvNC4wIChjb21wYXRpYmxlOyBNU0lFIDUuNTsgV2luZG93cyBOVCknCisgICAgdXNlcl9hZ2VudCA9ICdNb3ppbGxhLzUuMCAoV2luZG93cyBOVCA2LjE7IFdpbjY0OyB4NjQpJwogICAgIHZhbHVlcyA9IHsnbmFtZScgOiAnTWljaGFlbCBGb29yZCcsCiAgICAgICAgICAgICAgICdsb2NhdGlvbicgOiAnTm9ydGhhbXB0b24nLAogICAgICAgICAgICAgICAnbGFuZ3VhZ2UnIDogJ1B5dGhvbicgfQogICAgIGhlYWRlcnMgPSB7ICdVc2VyLUFnZW50JyA6IHVzZXJfYWdlbnQgfQogCi0gICAgZGF0YSAgPSB1cmxsaWIucGFyc2UudXJsZW5jb2RlKHZhbHVlcykKLSAgICBkYXRhID0gZGF0YS5lbmNvZGUoJ3V0Zi04JykKKyAgICBkYXRhID0gdXJsbGliLnBhcnNlLnVybGVuY29kZSh2YWx1ZXMpCisgICAgZGF0YSA9IGRhdGEuZW5jb2RlKCdhc2NpaScpCiAgICAgcmVxID0gdXJsbGliLnJlcXVlc3QuUmVxdWVzdCh1cmwsIGRhdGEsIGhlYWRlcnMpCi0gICAgcmVzcG9uc2UgPSB1cmxsaWIucmVxdWVzdC51cmxvcGVuKHJlcSkKLSAgICB0aGVfcGFnZSA9IHJlc3BvbnNlLnJlYWQoKQorICAgIHdpdGggdXJsbGliLnJlcXVlc3QudXJsb3BlbihyZXEpIGFzIHJlc3BvbnNlOgorICAgICAgIHRoZV9wYWdlID0gcmVzcG9uc2UucmVhZCgpCiAKIFRoZSByZXNwb25zZSBhbHNvIGhhcyB0d28gdXNlZnVsIG1ldGhvZHMuIFNlZSB0aGUgc2VjdGlvbiBvbiBgaW5mbyBhbmQgZ2V0dXJsYF8KIHdoaWNoIGNvbWVzIGFmdGVyIHdlIGhhdmUgYSBsb29rIGF0IHdoYXQgaGFwcGVucyB3aGVuIHRoaW5ncyBnbyB3cm9uZy4KQEAgLTUwNyw3ICs1MDcsNyBAQAogICAgIC0tIGBgUHJveHlIYW5kbGVyYGAgKGlmIGEgcHJveHkgc2V0dGluZyBzdWNoIGFzIGFuIDplbnZ2YXI6YGh0dHBfcHJveHlgCiAgICAgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgc2V0KSwgYGBVbmtub3duSGFuZGxlcmBgLCBgYEhUVFBIYW5kbGVyYGAsCiAgICAgYGBIVFRQRGVmYXVsdEVycm9ySGFuZGxlcmBgLCBgYEhUVFBSZWRpcmVjdEhhbmRsZXJgYCwgYGBGVFBIYW5kbGVyYGAsCi0gICAgYGBGaWxlSGFuZGxlcmBgLCBgYEhUVFBFcnJvclByb2Nlc3NvcmBgLgorICAgIGBgRmlsZUhhbmRsZXJgYCwgYGBEYXRhSGFuZGxlcmBgLCBgYEhUVFBFcnJvclByb2Nlc3NvcmBgLgogCiBgYHRvcF9sZXZlbF91cmxgYCBpcyBpbiBmYWN0ICplaXRoZXIqIGEgZnVsbCBVUkwgKGluY2x1ZGluZyB0aGUgJ2h0dHA6JyBzY2hlbWUKIGNvbXBvbmVudCBhbmQgdGhlIGhvc3RuYW1lIGFuZCBvcHRpb25hbGx5IHRoZSBwb3J0IG51bWJlcikKQEAgLTU3MiwxMiArNTcyLDcgQEAKIAogVGhpcyBkb2N1bWVudCB3YXMgcmV2aWV3ZWQgYW5kIHJldmlzZWQgYnkgSm9obiBMZWUuCiAKLS4uIFsjXSBGb3IgYW4gaW50cm9kdWN0aW9uIHRvIHRoZSBDR0kgcHJvdG9jb2wgc2VlCi0gICAgICAgYFdyaXRpbmcgV2ViIEFwcGxpY2F0aW9ucyBpbiBQeXRob24gPGh0dHA6Ly93d3cucHl6aW5lLmNvbS9Jc3N1ZTAwOC9TZWN0aW9uX0FydGljbGVzL2FydGljbGVfQ0dJT25lLmh0bWw+YF8uCi0uLiBbI10gTGlrZSBHb29nbGUgZm9yIGV4YW1wbGUuIFRoZSAqcHJvcGVyKiB3YXkgdG8gdXNlIGdvb2dsZSBmcm9tIGEgcHJvZ3JhbQotICAgICAgIGlzIHRvIHVzZSBgUHlHb29nbGUgPGh0dHA6Ly9weWdvb2dsZS5zb3VyY2Vmb3JnZS5uZXQ+YF8gb2YgY291cnNlLiBTZWUKLSAgICAgICBgVm9pZHNwYWNlIEdvb2dsZSA8aHR0cDovL3d3dy52b2lkc3BhY2Uub3JnLnVrL3B5dGhvbi9yZWNpcGVib29rLnNodG1sI2dvb2dsZT5gXwotICAgICAgIGZvciBzb21lIGV4YW1wbGVzIG9mIHVzaW5nIHRoZSBHb29nbGUgQVBJLgorLi4gWyNdIEdvb2dsZSBmb3IgZXhhbXBsZS4KIC4uIFsjXSBCcm93c2VyIHNuaWZmaW5nIGlzIGEgdmVyeSBiYWQgcHJhY3Rpc2UgZm9yIHdlYnNpdGUgZGVzaWduIC0gYnVpbGRpbmcKICAgICAgICBzaXRlcyB1c2luZyB3ZWIgc3RhbmRhcmRzIGlzIG11Y2ggbW9yZSBzZW5zaWJsZS4gVW5mb3J0dW5hdGVseSBhIGxvdCBvZgogICAgICAgIHNpdGVzIHN0aWxsIHNlbmQgZGlmZmVyZW50IHZlcnNpb25zIHRvIGRpZmZlcmVudCBicm93c2Vycy4KQEAgLTU5MSw1ICs1ODYsNSBAQAogICAgICAgIHNjcmlwdHMgd2l0aCBhIGxvY2FsaG9zdCBzZXJ2ZXIsIEkgaGF2ZSB0byBwcmV2ZW50IHVybGxpYiBmcm9tIHVzaW5nCiAgICAgICAgdGhlIHByb3h5LgogLi4gWyNdIHVybGxpYiBvcGVuZXIgZm9yIFNTTCBwcm94eSAoQ09OTkVDVCBtZXRob2QpOiBgQVNQTiBDb29rYm9vayBSZWNpcGUKLSAgICAgICA8aHR0cDovL2FzcG4uYWN0aXZlc3RhdGUuY29tL0FTUE4vQ29va2Jvb2svUHl0aG9uL1JlY2lwZS80NTYxOTU+YF8uCisgICAgICAgPGh0dHA6Ly9jb2RlLmFjdGl2ZXN0YXRlLmNvbS9yZWNpcGVzLzQ1NjE5NS8+YF8uCiAKZGlmZiAtLWdpdCBhL0RvYy9ob3d0by93ZWJzZXJ2ZXJzLnJzdCBiL0RvYy9ob3d0by93ZWJzZXJ2ZXJzLnJzdAppbmRleCA3MmNjZDFmLi45ZTliNjlkIDEwMDY0NAotLS0gYS9Eb2MvaG93dG8vd2Vic2VydmVycy5yc3QKKysrIGIvRG9jL2hvd3RvL3dlYnNlcnZlcnMucnN0CkBAIC0yNiw3ICsyNiw3IEBACiAgICBXaGlsZSB0aGlzIEhPV1RPIHRyaWVzIHRvIGdpdmUgYW4gb3ZlcnZpZXcgb2YgUHl0aG9uIGluIHRoZSB3ZWIsIGl0IGNhbm5vdAogICAgYWx3YXlzIGJlIGFzIHVwIHRvIGRhdGUgYXMgZGVzaXJlZC4gIFdlYiBkZXZlbG9wbWVudCBpbiBQeXRob24gaXMgcmFwaWRseQogICAgbW92aW5nIGZvcndhcmQsIHNvIHRoZSB3aWtpIHBhZ2Ugb24gYFdlYiBQcm9ncmFtbWluZwotICAgPGh0dHA6Ly93aWtpLnB5dGhvbi5vcmcvbW9pbi9XZWJQcm9ncmFtbWluZz5gXyBtYXkgYmUgbW9yZSBpbiBzeW5jIHdpdGgKKyAgIDxodHRwczovL3dpa2kucHl0aG9uLm9yZy9tb2luL1dlYlByb2dyYW1taW5nPmBfIG1heSBiZSBtb3JlIGluIHN5bmMgd2l0aAogICAgcmVjZW50IGRldmVsb3BtZW50LgogCiAKQEAgLTg2LDcgKzg2LDcgQEAKICAgICAgYXBwbGljYXRpb25zLCBpbnN0ZWFkIG9mIHByZXNlbnRpbmcgYSAiNTAwIEludGVybmFsIFNlcnZlciBFcnJvciIgbWVzc2FnZQogCiAgICBUaGUgUHl0aG9uIHdpa2kgZmVhdHVyZXMgYSBwYWdlIG9uIGBDR0kgc2NyaXB0cwotICAgPGh0dHA6Ly93aWtpLnB5dGhvbi5vcmcvbW9pbi9DZ2lTY3JpcHRzPmBfIHdpdGggc29tZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgICA8aHR0cHM6Ly93aWtpLnB5dGhvbi5vcmcvbW9pbi9DZ2lTY3JpcHRzPmBfIHdpdGggc29tZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCiAgICBhYm91dCBDR0kgaW4gUHl0aG9uLgogCiAKQEAgLTE0Niw3ICsxNDYsNyBAQAogICB0dXRvcmlhbCBhbHNvIGRlc2NyaWJlcyB0aGUgbW9zdCBjb21tb24gZ290Y2hhcyB0aGF0IG1pZ2h0IGFyaXNlLgogCiAqIE9uIGxpZ2h0dHBkIHlvdSBuZWVkIHRvIHVzZSB0aGUgYENHSSBtb2R1bGUKLSAgPGh0dHA6Ly9yZWRtaW5lLmxpZ2h0dHBkLm5ldC93aWtpL2xpZ2h0dHBkL0RvY3M6TW9kQ0dJPmBfXCAsIHdoaWNoIGNhbiBiZSBjb25maWd1cmVkCisgIDxodHRwOi8vcmVkbWluZS5saWdodHRwZC5uZXQvcHJvamVjdHMvbGlnaHR0cGQvd2lraS9Eb2NzX01vZENHST5gX1wgLCB3aGljaCBjYW4gYmUgY29uZmlndXJlZAogICBpbiBhIHN0cmFpZ2h0Zm9yd2FyZCB3YXkuICBJdCBib2lscyBkb3duIHRvIHNldHRpbmcgYGBjZ2kuYXNzaWduYGAgcHJvcGVybHkuCiAKIApAQCAtMjEwLDcgKzIxMCw3IEBACiAtLS0tLS0tLS0tCiAKIFBlb3BsZSBjb21pbmcgZnJvbSBQSFAgb2Z0ZW4gZmluZCBpdCBoYXJkIHRvIGdyYXNwIGhvdyB0byB1c2UgUHl0aG9uIGluIHRoZSB3ZWIuCi1UaGVpciBmaXJzdCB0aG91Z2h0IGlzIG1vc3RseSBgbW9kX3B5dGhvbiA8aHR0cDovL3d3dy5tb2RweXRob24ub3JnLz5gX1wgLAorVGhlaXIgZmlyc3QgdGhvdWdodCBpcyBtb3N0bHkgYG1vZF9weXRob24gPGh0dHA6Ly9tb2RweXRob24ub3JnLz5gX1wgLAogYmVjYXVzZSB0aGV5IHRoaW5rIHRoYXQgdGhpcyBpcyB0aGUgZXF1aXZhbGVudCB0byBgYG1vZF9waHBgYC4gIEFjdHVhbGx5LCB0aGVyZQogYXJlIG1hbnkgZGlmZmVyZW5jZXMuICBXaGF0IGBgbW9kX3B5dGhvbmBgIGRvZXMgaXMgZW1iZWQgdGhlIGludGVycHJldGVyIGludG8KIHRoZSBBcGFjaGUgcHJvY2VzcywgdGh1cyBzcGVlZGluZyB1cCByZXF1ZXN0cyBieSBub3QgaGF2aW5nIHRvIHN0YXJ0IGEgUHl0aG9uCkBAIC0yNjAsMTMgKzI2MCw2IEBACiBUaGVzZSBkYXlzLCBGYXN0Q0dJIGlzIG5ldmVyIHVzZWQgZGlyZWN0bHkuICBKdXN0IGxpa2UgYGBtb2RfcHl0aG9uYGAsIGl0IGlzIG9ubHkKIHVzZWQgZm9yIHRoZSBkZXBsb3ltZW50IG9mIFdTR0kgYXBwbGljYXRpb25zLgogCi0uLiBzZWVhbHNvOjoKLQotICAgKiBgRmFzdENHSSwgU0NHSSwgYW5kIEFwYWNoZTogQmFja2dyb3VuZCBhbmQgRnV0dXJlCi0gICAgIDxodHRwOi8vd3d3LnZtdW5peC5jb20vbWFyay9ibG9nL2FyY2hpdmVzLzIwMDYvMDEvMDIvZmFzdGNnaS1zY2dpLWFuZC1hcGFjaGUtYmFja2dyb3VuZC1hbmQtZnV0dXJlLz5gXwotICAgICBpcyBhIGRpc2N1c3Npb24gb24gd2h5IHRoZSBjb25jZXB0IG9mIEZhc3RDR0kgYW5kIFNDR0kgaXMgYmV0dGVyIHRoYW4gdGhhdAotICAgICBvZiBtb2RfcHl0aG9uLgotCiAKIFNldHRpbmcgdXAgRmFzdENHSQogXl5eXl5eXl5eXl5eXl5eXl5eCkBAIC0yODAsOCArMjczLDggQEAKICAgdG8gYmUgbG9hZGVkIGJ5IEFwYWNoZS4KIAogKiBsaWdodHRwZCBzaGlwcyBpdHMgb3duIGBGYXN0Q0dJIG1vZHVsZQotICA8aHR0cDovL3JlZG1pbmUubGlnaHR0cGQubmV0L3dpa2kvbGlnaHR0cGQvRG9jczpNb2RGYXN0Q0dJPmBfIGFzIHdlbGwgYXMgYW4KLSAgYFNDR0kgbW9kdWxlIDxodHRwOi8vcmVkbWluZS5saWdodHRwZC5uZXQvd2lraS9saWdodHRwZC9Eb2NzOk1vZFNDR0k+YF8uCisgIDxodHRwOi8vcmVkbWluZS5saWdodHRwZC5uZXQvcHJvamVjdHMvbGlnaHR0cGQvd2lraS9Eb2NzX01vZEZhc3RDR0k+YF8gYXMgd2VsbCBhcyBhbgorICBgU0NHSSBtb2R1bGUgPGh0dHA6Ly9yZWRtaW5lLmxpZ2h0dHBkLm5ldC9wcm9qZWN0cy9saWdodHRwZC93aWtpL0RvY3NfTW9kU0NHST5gXy4KIAogKiBgbmdpbnggPGh0dHA6Ly9uZ2lueC5vcmcvPmBfIGFsc28gc3VwcG9ydHMgYEZhc3RDR0kKICAgPGh0dHA6Ly93aWtpLm5naW54Lm9yZy9OZ2lueFNpbXBsZVB5dGhvbkZDR0k+YF8uCkBAIC0zMDksMTMgKzMwMiwxMyBAQAogICAgIFdTR0lTZXJ2ZXIoYXBwKS5ydW4oKQogCiBUaGlzIGlzIGEgc2ltcGxlIFdTR0kgYXBwbGljYXRpb24sIGJ1dCB5b3UgbmVlZCB0byBpbnN0YWxsIGBmbHVwCi08aHR0cDovL3B5cGkucHl0aG9uLm9yZy9weXBpL2ZsdXAvMS4wPmBfIGZpcnN0LCBhcyBmbHVwIGhhbmRsZXMgdGhlIGxvdyBsZXZlbAorPGh0dHBzOi8vcHlwaS5weXRob24ub3JnL3B5cGkvZmx1cC8xLjA+YF8gZmlyc3QsIGFzIGZsdXAgaGFuZGxlcyB0aGUgbG93IGxldmVsCiBGYXN0Q0dJIGFjY2Vzcy4KIAogLi4gc2VlYWxzbzo6CiAKICAgIFRoZXJlIGlzIHNvbWUgZG9jdW1lbnRhdGlvbiBvbiBgc2V0dGluZyB1cCBEamFuZ28gd2l0aCBGYXN0Q0dJCi0gICA8aHR0cDovL2RvY3MuZGphbmdvcHJvamVjdC5jb20vZW4vZGV2L2hvd3RvL2RlcGxveW1lbnQvZmFzdGNnaS8+YF8sIG1vc3Qgb2YKKyAgIDxodHRwczovL2RvY3MuZGphbmdvcHJvamVjdC5jb20vZW4vZGV2L2hvd3RvL2RlcGxveW1lbnQvZmFzdGNnaS8+YF8sIG1vc3Qgb2YKICAgIHdoaWNoIGNhbiBiZSByZXVzZWQgZm9yIG90aGVyIFdTR0ktY29tcGxpYW50IGZyYW1ld29ya3MgYW5kIGxpYnJhcmllcy4KICAgIE9ubHkgdGhlIGBgbWFuYWdlLnB5YGAgcGFydCBoYXMgdG8gYmUgY2hhbmdlZCwgdGhlIGV4YW1wbGUgdXNlZCBoZXJlIGNhbiBiZQogICAgdXNlZCBpbnN0ZWFkLiAgRGphbmdvIGRvZXMgbW9yZSBvciBsZXNzIHRoZSBleGFjdCBzYW1lIHRoaW5nLgpAQCAtNDg2LDcgKzQ3OSw3IEBACiAKICAgIFRoZXJlIGFyZSBmYXIgbW9yZSBjb21wb25lbnRzIHRoYW4gY2FuIGJlIHByZXNlbnRlZCBoZXJlLiAgVGhlIFB5dGhvbiB3aWtpCiAgICBoYXMgYSBwYWdlIGFib3V0IHRoZXNlIGNvbXBvbmVudHMsIGNhbGxlZAotICAgYFdlYiBDb21wb25lbnRzIDxodHRwOi8vd2lraS5weXRob24ub3JnL21vaW4vV2ViQ29tcG9uZW50cz5gXy4KKyAgIGBXZWIgQ29tcG9uZW50cyA8aHR0cHM6Ly93aWtpLnB5dGhvbi5vcmcvbW9pbi9XZWJDb21wb25lbnRzPmBfLgogCiAKIFRlbXBsYXRlcwpAQCAtNTIyLDEzICs1MTUsMTMgQEAKIAogICAgKiBgTWFrbyA8aHR0cDovL3d3dy5tYWtvdGVtcGxhdGVzLm9yZy8+YF8KICAgICogYEdlbnNoaSA8aHR0cDovL2dlbnNoaS5lZGdld2FsbC5vcmcvPmBfCi0gICAqIGBKaW5qYSA8aHR0cDovL2ppbmphLnBvY29vLm9yZy8yLz5gXworICAgKiBgSmluamEgPGh0dHA6Ly9qaW5qYS5wb2Nvby5vcmcvPmBfCiAKIC4uIHNlZWFsc286OgogCiAgICBUaGVyZSBhcmUgbWFueSB0ZW1wbGF0ZSBlbmdpbmVzIGNvbXBldGluZyBmb3IgYXR0ZW50aW9uLCBiZWNhdXNlIGl0IGlzCiAgICBwcmV0dHkgZWFzeSB0byBjcmVhdGUgdGhlbSBpbiBQeXRob24uICBUaGUgcGFnZSBgVGVtcGxhdGluZwotICAgPGh0dHA6Ly93aWtpLnB5dGhvbi5vcmcvbW9pbi9UZW1wbGF0aW5nPmBfIGluIHRoZSB3aWtpIGxpc3RzIGEgYmlnLAorICAgPGh0dHBzOi8vd2lraS5weXRob24ub3JnL21vaW4vVGVtcGxhdGluZz5gXyBpbiB0aGUgd2lraSBsaXN0cyBhIGJpZywKICAgIGV2ZXItZ3Jvd2luZyBudW1iZXIgb2YgdGhlc2UuICBUaGUgdGhyZWUgbGlzdGVkIGFib3ZlIGFyZSBjb25zaWRlcmVkICJzZWNvbmQKICAgIGdlbmVyYXRpb24iIHRlbXBsYXRlIGVuZ2luZXMgYW5kIGFyZSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQuCiAKQEAgLTU3OCwxMSArNTcxLDExIEBACiAKIC4uIHNlZWFsc286OgogCi0gICAqIGBQZXJzaXN0ZW5jZSBUb29scyA8aHR0cDovL3dpa2kucHl0aG9uLm9yZy9tb2luL1BlcnNpc3RlbmNlVG9vbHM+YF8gbGlzdHMKKyAgICogYFBlcnNpc3RlbmNlIFRvb2xzIDxodHRwczovL3dpa2kucHl0aG9uLm9yZy9tb2luL1BlcnNpc3RlbmNlVG9vbHM+YF8gbGlzdHMKICAgICAgcG9zc2liaWxpdGllcyBvbiBob3cgdG8gc2F2ZSBkYXRhIGluIHRoZSBmaWxlIHN5c3RlbS4gIFNvbWUgb2YgdGhlc2UKICAgICAgbW9kdWxlcyBhcmUgcGFydCBvZiB0aGUgc3RhbmRhcmQgbGlicmFyeQogCi0gICAqIGBEYXRhYmFzZSBQcm9ncmFtbWluZyA8aHR0cDovL3dpa2kucHl0aG9uLm9yZy9tb2luL0RhdGFiYXNlUHJvZ3JhbW1pbmc+YF8KKyAgICogYERhdGFiYXNlIFByb2dyYW1taW5nIDxodHRwczovL3dpa2kucHl0aG9uLm9yZy9tb2luL0RhdGFiYXNlUHJvZ3JhbW1pbmc+YF8KICAgICAgaGVscHMgd2l0aCBjaG9vc2luZyBhIG1ldGhvZCBmb3Igc2F2aW5nIGRhdGEKIAogICAgKiBgU1FMQWxjaGVteSA8aHR0cDovL3d3dy5zcWxhbGNoZW15Lm9yZy8+YF8sIHRoZSBtb3N0IHBvd2VyZnVsIE9SLU1hcHBlcgpAQCAtNjQ0LDcgKzYzNyw3IEBACiBEamFuZ28KIF5eXl5eXgogCi1gRGphbmdvIDxodHRwOi8vd3d3LmRqYW5nb3Byb2plY3QuY29tLz5gXyBpcyBhIGZyYW1ld29yayBjb25zaXN0aW5nIG9mIHNldmVyYWwKK2BEamFuZ28gPGh0dHBzOi8vd3d3LmRqYW5nb3Byb2plY3QuY29tLz5gXyBpcyBhIGZyYW1ld29yayBjb25zaXN0aW5nIG9mIHNldmVyYWwKIHRpZ2h0bHkgY291cGxlZCBlbGVtZW50cyB3aGljaCB3ZXJlIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIGFuZCB3b3JrIHRvZ2V0aGVyIHZlcnkKIHdlbGwuICBJdCBpbmNsdWRlcyBhbiBPUk0gd2hpY2ggaXMgcXVpdGUgcG93ZXJmdWwgd2hpbGUgYmVpbmcgc2ltcGxlIHRvIHVzZSwKIGFuZCBoYXMgYSBncmVhdCBvbmxpbmUgYWRtaW5pc3RyYXRpb24gaW50ZXJmYWNlIHdoaWNoIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGVkaXQKQEAgLTY1Nyw3ICs2NTAsNyBAQAogSXQgaGFzIGEgYmlnLCBpbnRlcm5hdGlvbmFsIGNvbW11bml0eSwgdGhlIG1lbWJlcnMgb2Ygd2hpY2ggaGF2ZSBjcmVhdGVkIG1hbnkKIHdlYiBzaXRlcy4gIFRoZXJlIGFyZSBhbHNvIGEgbG90IG9mIGFkZC1vbiBwcm9qZWN0cyB3aGljaCBleHRlbmQgRGphbmdvJ3Mgbm9ybWFsCiBmdW5jdGlvbmFsaXR5LiAgVGhpcyBpcyBwYXJ0bHkgZHVlIHRvIERqYW5nbydzIHdlbGwgd3JpdHRlbiBgb25saW5lCi1kb2N1bWVudGF0aW9uIDxodHRwOi8vZG9jcy5kamFuZ29wcm9qZWN0LmNvbS8+YF8gYW5kIHRoZSBgRGphbmdvIGJvb2sKK2RvY3VtZW50YXRpb24gPGh0dHBzOi8vZG9jcy5kamFuZ29wcm9qZWN0LmNvbS8+YF8gYW5kIHRoZSBgRGphbmdvIGJvb2sKIDxodHRwOi8vd3d3LmRqYW5nb2Jvb2suY29tLz5gXy4KIAogCkBAIC02NjUsNyArNjU4LDcgQEAKIAogICAgQWx0aG91Z2ggRGphbmdvIGlzIGFuIE1WQy1zdHlsZSBmcmFtZXdvcmssIGl0IG5hbWVzIHRoZSBlbGVtZW50cwogICAgZGlmZmVyZW50bHksIHdoaWNoIGlzIGRlc2NyaWJlZCBpbiB0aGUgYERqYW5nbyBGQVEKLSAgIDxodHRwOi8vZG9jcy5kamFuZ29wcm9qZWN0LmNvbS9lbi9kZXYvZmFxL2dlbmVyYWwvI2RqYW5nby1hcHBlYXJzLXRvLWJlLWEtbXZjLWZyYW1ld29yay1idXQteW91LWNhbGwtdGhlLWNvbnRyb2xsZXItdGhlLXZpZXctYW5kLXRoZS12aWV3LXRoZS10ZW1wbGF0ZS1ob3ctY29tZS15b3UtZG9uLXQtdXNlLXRoZS1zdGFuZGFyZC1uYW1lcz5gXy4KKyAgIDxodHRwczovL2RvY3MuZGphbmdvcHJvamVjdC5jb20vZW4vZGV2L2ZhcS9nZW5lcmFsLyNkamFuZ28tYXBwZWFycy10by1iZS1hLW12Yy1mcmFtZXdvcmstYnV0LXlvdS1jYWxsLXRoZS1jb250cm9sbGVyLXRoZS12aWV3LWFuZC10aGUtdmlldy10aGUtdGVtcGxhdGUtaG93LWNvbWUteW91LWRvbi10LXVzZS10aGUtc3RhbmRhcmQtbmFtZXM+YF8uCiAKIAogVHVyYm9HZWFycwpAQCAtNjg3LDcgKzY4MCw3IEBACiBUaGUgbmV3ZXN0IHZlcnNpb24gb2YgVHVyYm9HZWFycywgdmVyc2lvbiAyLjAsIG1vdmVzIGV2ZW4gZnVydGhlciBpbiBkaXJlY3Rpb24KIG9mIFdTR0kgc3VwcG9ydCBhbmQgYSBjb21wb25lbnQtYmFzZWQgYXJjaGl0ZWN0dXJlLiAgVHVyYm9HZWFycyAyIGlzIGJhc2VkIG9uCiB0aGUgV1NHSSBzdGFjayBvZiBhbm90aGVyIHBvcHVsYXIgY29tcG9uZW50LWJhc2VkIHdlYiBmcmFtZXdvcmssIGBQeWxvbnMKLTxodHRwOi8vcHlsb25zaHEuY29tLz5gXy4KKzxodHRwOi8vd3d3LnB5bG9uc3Byb2plY3Qub3JnLz5gXy4KIAogCiBab3BlCkBAIC03MDgsNyArNzAxLDcgQEAKIHNlcGFyYXRlIGZyYW1ld29yayBiYXNlZCBvbiB0aGUgWm9wZSBjb21wb25lbnRzOiBgR3JvawogPGh0dHA6Ly9ncm9rLnpvcGUub3JnLz5gXy4KIAotWm9wZSBpcyBhbHNvIHRoZSBpbmZyYXN0cnVjdHVyZSB1c2VkIGJ5IHRoZSBgUGxvbmUgPGh0dHA6Ly9wbG9uZS5vcmcvPmBfIGNvbnRlbnQKK1pvcGUgaXMgYWxzbyB0aGUgaW5mcmFzdHJ1Y3R1cmUgdXNlZCBieSB0aGUgYFBsb25lIDxodHRwczovL3Bsb25lLm9yZy8+YF8gY29udGVudAogbWFuYWdlbWVudCBzeXN0ZW0sIG9uZSBvZiB0aGUgbW9zdCBwb3dlcmZ1bCBhbmQgcG9wdWxhciBjb250ZW50IG1hbmFnZW1lbnQKIHN5c3RlbXMgYXZhaWxhYmxlLgogCkBAIC03MzIsOSArNzI1LDcgQEAKIC4uIHNlZWFsc286OgogCiAgICBUaGUgUHl0aG9uIHdpa2kgY29udGFpbnMgYW4gZXh0ZW5zaXZlIGxpc3Qgb2YgYHdlYiBmcmFtZXdvcmtzCi0gICA8aHR0cDovL3dpa2kucHl0aG9uLm9yZy9tb2luL1dlYkZyYW1ld29ya3M+YF8uCisgICA8aHR0cHM6Ly93aWtpLnB5dGhvbi5vcmcvbW9pbi9XZWJGcmFtZXdvcmtzPmBfLgogCiAgICBNb3N0IGZyYW1ld29ya3MgYWxzbyBoYXZlIHRoZWlyIG93biBtYWlsaW5nIGxpc3RzIGFuZCBJUkMgY2hhbm5lbHMsIGxvb2sgb3V0Ci0gICBmb3IgdGhlc2Ugb24gdGhlIHByb2plY3RzJyB3ZWIgc2l0ZXMuICBUaGVyZSBpcyBhbHNvIGEgZ2VuZXJhbCAiUHl0aG9uIGluIHRoZQotICAgV2ViIiBJUkMgY2hhbm5lbCBvbiBmcmVlbm9kZSBjYWxsZWQgYCNweXRob24ud2ViCi0gICA8aHR0cDovL3dpa2kucHl0aG9uLm9yZy9tb2luL1BvdW5kUHl0aG9uV2ViPmBfLgorICAgZm9yIHRoZXNlIG9uIHRoZSBwcm9qZWN0cycgd2ViIHNpdGVzLgpkaWZmIC0tZ2l0IGEvRG9jL2luY2x1ZGVzL2VtYWlsLWFsdGVybmF0aXZlLW5ldy1hcGkucHkgYi9Eb2MvaW5jbHVkZXMvZW1haWwtYWx0ZXJuYXRpdmUtbmV3LWFwaS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTI1NWE2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jL2luY2x1ZGVzL2VtYWlsLWFsdGVybmF0aXZlLW5ldy1hcGkucHkKQEAgLTAsMCArMSw1NiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMworCitpbXBvcnQgc210cGxpYgorCitmcm9tIGVtYWlsLm1lc3NhZ2UgaW1wb3J0IEVtYWlsTWVzc2FnZQorZnJvbSBlbWFpbC5oZWFkZXJyZWdpc3RyeSBpbXBvcnQgQWRkcmVzcworZnJvbSBlbWFpbC51dGlscyBpbXBvcnQgbWFrZV9tc2dpZAorCisjIENyZWF0ZSB0aGUgYmFzZSB0ZXh0IG1lc3NhZ2UuCittc2cgPSBFbWFpbE1lc3NhZ2UoKQorbXNnWydTdWJqZWN0J10gPSAiQXlvbnMgYXNwZXJnZXMgcG91ciBsZSBkw6lqZXVuZXIiCittc2dbJ0Zyb20nXSA9IEFkZHJlc3MoIlBlcMOpIExlIFBldyIsICJwZXBlQGV4YW1wbGUuY29tIikKK21zZ1snVG8nXSA9IChBZGRyZXNzKCJQZW5lbG9wZSBQdXNzeWNhdCIsICJwZW5lbG9wZUBleGFtcGxlLmNvbSIpLAorICAgICAgICAgICAgIEFkZHJlc3MoIkZhYnJldHRlIFB1c3N5Y2F0IiwgImZhYnJldHRlQGV4YW1wbGUuY29tIikpCittc2cuc2V0X2NvbnRlbnQoIiIiXAorU2FsdXQhCisKK0NlbGEgcmVzc2VtYmxlIMOgIHVuIGV4Y2VsbGVudCByZWNpcGllWzFdIGTDqWpldW5lci4KKworWzFdIGh0dHA6Ly93d3cueXVtbWx5LmNvbS9yZWNpcGUvUm9hc3RlZC1Bc3BhcmFndXMtRXBpY3VyaW91cy0yMDM3MTgKKworLS1QZXDDqQorIiIiKQorCisjIEFkZCB0aGUgaHRtbCB2ZXJzaW9uLiAgVGhpcyBjb252ZXJ0cyB0aGUgbWVzc2FnZSBpbnRvIGEgbXVsdGlwYXJ0L2FsdGVybmF0aXZlCisjIGNvbnRhaW5lciwgd2l0aCB0aGUgb3JpZ2luYWwgdGV4dCBtZXNzYWdlIGFzIHRoZSBmaXJzdCBwYXJ0IGFuZCB0aGUgbmV3IGh0bWwKKyMgbWVzc2FnZSBhcyB0aGUgc2Vjb25kIHBhcnQuCithc3BhcmFndXNfY2lkID0gbWFrZV9tc2dpZCgpCittc2cuYWRkX2FsdGVybmF0aXZlKCIiIlwKKzxodG1sPgorICA8aGVhZD48L2hlYWQ+CisgIDxib2R5PgorICAgIDxwPlNhbHV0ITxccD4KKyAgICA8cD5DZWxhIHJlc3NlbWJsZSDDoCB1biBleGNlbGxlbnQKKyAgICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy55dW1tbHkuY29tL3JlY2lwZS9Sb2FzdGVkLUFzcGFyYWd1cy1FcGljdXJpb3VzLTIwMzcxOD4KKyAgICAgICAgICAgIHJlY2lwaWUKKyAgICAgICAgPC9hPiBkw6lqZXVuZXIuCisgICAgPC9wPgorICAgIDxpbWcgc3JjPSJjaWQ6e2FzcGFyYWd1c19jaWR9IiBcPgorICA8L2JvZHk+Cis8L2h0bWw+CisiIiIuZm9ybWF0KGFzcGFyYWd1c19jaWQ9YXNwYXJhZ3VzX2NpZFsxOi0xXSksIHN1YnR5cGU9J2h0bWwnKQorIyBub3RlIHRoYXQgd2UgbmVlZGVkIHRvIHBlZWwgdGhlIDw+IG9mZiB0aGUgbXNnaWQgZm9yIHVzZSBpbiB0aGUgaHRtbC4KKworIyBOb3cgYWRkIHRoZSByZWxhdGVkIGltYWdlIHRvIHRoZSBodG1sIHBhcnQuCit3aXRoIG9wZW4oInJvYXN0ZWQtYXNwYXJhZ3VzLmpwZyIsICdyYicpIGFzIGltZzoKKyAgICBtc2cuZ2V0X3BheWxvYWQoKVsxXS5hZGRfcmVsYXRlZChpbWcucmVhZCgpLCAnaW1hZ2UnLCAnanBlZycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2lkPWFzcGFyYWd1c19jaWQpCisKKyMgTWFrZSBhIGxvY2FsIGNvcHkgb2Ygd2hhdCB3ZSBhcmUgZ29pbmcgdG8gc2VuZC4KK3dpdGggb3Blbignb3V0Z29pbmcubXNnJywgJ3diJykgYXMgZjoKKyAgICBmLndyaXRlKGJ5dGVzKG1zZykpCisKKyMgU2VuZCB0aGUgbWVzc2FnZSB2aWEgbG9jYWwgU01UUCBzZXJ2ZXIuCit3aXRoIHNtdHBsaWIuU01UUCgnbG9jYWxob3N0JykgYXMgczoKKyAgICBzLnNlbmRfbWVzc2FnZShtc2cpCmRpZmYgLS1naXQgYS9Eb2MvaW5jbHVkZXMvZW1haWwtYWx0ZXJuYXRpdmUucHkgYi9Eb2MvaW5jbHVkZXMvZW1haWwtYWx0ZXJuYXRpdmUucHkKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCAzM2M0MzBhLi44NTA3MGYzCi0tLSBhL0RvYy9pbmNsdWRlcy9lbWFpbC1hbHRlcm5hdGl2ZS5weQorKysgYi9Eb2MvaW5jbHVkZXMvZW1haWwtYWx0ZXJuYXRpdmUucHkKQEAgLTE3LDE0ICsxNywxNCBAQAogbXNnWydUbyddID0geW91CiAKICMgQ3JlYXRlIHRoZSBib2R5IG9mIHRoZSBtZXNzYWdlIChhIHBsYWluLXRleHQgYW5kIGFuIEhUTUwgdmVyc2lvbikuCi10ZXh0ID0gIkhpIVxuSG93IGFyZSB5b3U/XG5IZXJlIGlzIHRoZSBsaW5rIHlvdSB3YW50ZWQ6XG5odHRwOi8vd3d3LnB5dGhvbi5vcmciCit0ZXh0ID0gIkhpIVxuSG93IGFyZSB5b3U/XG5IZXJlIGlzIHRoZSBsaW5rIHlvdSB3YW50ZWQ6XG5odHRwczovL3d3dy5weXRob24ub3JnIgogaHRtbCA9ICIiIlwKIDxodG1sPgogICA8aGVhZD48L2hlYWQ+CiAgIDxib2R5PgogICAgIDxwPkhpITxicj4KICAgICAgICBIb3cgYXJlIHlvdT88YnI+Ci0gICAgICAgSGVyZSBpcyB0aGUgPGEgaHJlZj0iaHR0cDovL3d3dy5weXRob24ub3JnIj5saW5rPC9hPiB5b3Ugd2FudGVkLgorICAgICAgIEhlcmUgaXMgdGhlIDxhIGhyZWY9Imh0dHBzOi8vd3d3LnB5dGhvbi5vcmciPmxpbms8L2E+IHlvdSB3YW50ZWQuCiAgICAgPC9wPgogICA8L2JvZHk+CiA8L2h0bWw+CmRpZmYgLS1naXQgYS9Eb2MvaW5jbHVkZXMvZW1haWwtZGlyLnB5IGIvRG9jL2luY2x1ZGVzL2VtYWlsLWRpci5weQppbmRleCBjYzU1MjllLi4zYzdjNzcwIDEwMDY0NAotLS0gYS9Eb2MvaW5jbHVkZXMvZW1haWwtZGlyLnB5CisrKyBiL0RvYy9pbmNsdWRlcy9lbWFpbC1kaXIucHkKQEAgLTgsNyArOCw3IEBACiAjIEZvciBndWVzc2luZyBNSU1FIHR5cGUgYmFzZWQgb24gZmlsZSBuYW1lIGV4dGVuc2lvbgogaW1wb3J0IG1pbWV0eXBlcwogCi1mcm9tIG9wdHBhcnNlIGltcG9ydCBPcHRpb25QYXJzZXIKK2Zyb20gYXJncGFyc2UgaW1wb3J0IEFyZ3VtZW50UGFyc2VyCiAKIGZyb20gZW1haWwgaW1wb3J0IGVuY29kZXJzCiBmcm9tIGVtYWlsLm1lc3NhZ2UgaW1wb3J0IE1lc3NhZ2UKQEAgLTIyLDQ0ICsyMiwzNiBAQAogCiAKIGRlZiBtYWluKCk6Ci0gICAgcGFyc2VyID0gT3B0aW9uUGFyc2VyKHVzYWdlPSIiIlwKKyAgICBwYXJzZXIgPSBBcmd1bWVudFBhcnNlcihkZXNjcmlwdGlvbj0iIiJcCiBTZW5kIHRoZSBjb250ZW50cyBvZiBhIGRpcmVjdG9yeSBhcyBhIE1JTUUgbWVzc2FnZS4KLQotVXNhZ2U6ICVwcm9nIFtvcHRpb25zXQotCiBVbmxlc3MgdGhlIC1vIG9wdGlvbiBpcyBnaXZlbiwgdGhlIGVtYWlsIGlzIHNlbnQgYnkgZm9yd2FyZGluZyB0byB5b3VyIGxvY2FsCiBTTVRQIHNlcnZlciwgd2hpY2ggdGhlbiBkb2VzIHRoZSBub3JtYWwgZGVsaXZlcnkgcHJvY2Vzcy4gIFlvdXIgbG9jYWwgbWFjaGluZQogbXVzdCBiZSBydW5uaW5nIGFuIFNNVFAgc2VydmVyLgogIiIiKQotICAgIHBhcnNlci5hZGRfb3B0aW9uKCctZCcsICctLWRpcmVjdG9yeScsCi0gICAgICAgICAgICAgICAgICAgICAgdHlwZT0nc3RyaW5nJywgYWN0aW9uPSdzdG9yZScsCi0gICAgICAgICAgICAgICAgICAgICAgaGVscD0iIiJNYWlsIHRoZSBjb250ZW50cyBvZiB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yeSwKLSAgICAgICAgICAgICAgICAgICAgICBvdGhlcndpc2UgdXNlIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4gIE9ubHkgdGhlIHJlZ3VsYXIKLSAgICAgICAgICAgICAgICAgICAgICBmaWxlcyBpbiB0aGUgZGlyZWN0b3J5IGFyZSBzZW50LCBhbmQgd2UgZG9uJ3QgcmVjdXJzZSB0bwotICAgICAgICAgICAgICAgICAgICAgIHN1YmRpcmVjdG9yaWVzLiIiIikKLSAgICBwYXJzZXIuYWRkX29wdGlvbignLW8nLCAnLS1vdXRwdXQnLAotICAgICAgICAgICAgICAgICAgICAgIHR5cGU9J3N0cmluZycsIGFjdGlvbj0nc3RvcmUnLCBtZXRhdmFyPSdGSUxFJywKLSAgICAgICAgICAgICAgICAgICAgICBoZWxwPSIiIlByaW50IHRoZSBjb21wb3NlZCBtZXNzYWdlIHRvIEZJTEUgaW5zdGVhZCBvZgotICAgICAgICAgICAgICAgICAgICAgIHNlbmRpbmcgdGhlIG1lc3NhZ2UgdG8gdGhlIFNNVFAgc2VydmVyLiIiIikKLSAgICBwYXJzZXIuYWRkX29wdGlvbignLXMnLCAnLS1zZW5kZXInLAotICAgICAgICAgICAgICAgICAgICAgIHR5cGU9J3N0cmluZycsIGFjdGlvbj0nc3RvcmUnLCBtZXRhdmFyPSdTRU5ERVInLAotICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1RoZSB2YWx1ZSBvZiB0aGUgRnJvbTogaGVhZGVyIChyZXF1aXJlZCknKQotICAgIHBhcnNlci5hZGRfb3B0aW9uKCctcicsICctLXJlY2lwaWVudCcsCi0gICAgICAgICAgICAgICAgICAgICAgdHlwZT0nc3RyaW5nJywgYWN0aW9uPSdhcHBlbmQnLCBtZXRhdmFyPSdSRUNJUElFTlQnLAotICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9W10sIGRlc3Q9J3JlY2lwaWVudHMnLAotICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0EgVG86IGhlYWRlciB2YWx1ZSAoYXQgbGVhc3Qgb25lIHJlcXVpcmVkKScpCi0gICAgb3B0cywgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKLSAgICBpZiBub3Qgb3B0cy5zZW5kZXIgb3Igbm90IG9wdHMucmVjaXBpZW50czoKLSAgICAgICAgcGFyc2VyLnByaW50X2hlbHAoKQotICAgICAgICBzeXMuZXhpdCgxKQotICAgIGRpcmVjdG9yeSA9IG9wdHMuZGlyZWN0b3J5CisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLWQnLCAnLS1kaXJlY3RvcnknLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iIiJNYWlsIHRoZSBjb250ZW50cyBvZiB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG90aGVyd2lzZSB1c2UgdGhlIGN1cnJlbnQgZGlyZWN0b3J5LiAgT25seSB0aGUgcmVndWxhcgorICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXMgaW4gdGhlIGRpcmVjdG9yeSBhcmUgc2VudCwgYW5kIHdlIGRvbid0IHJlY3Vyc2UgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIHN1YmRpcmVjdG9yaWVzLiIiIikKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctbycsICctLW91dHB1dCcsCisgICAgICAgICAgICAgICAgICAgICAgICBtZXRhdmFyPSdGSUxFJywKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IiIiUHJpbnQgdGhlIGNvbXBvc2VkIG1lc3NhZ2UgdG8gRklMRSBpbnN0ZWFkIG9mCisgICAgICAgICAgICAgICAgICAgICAgICBzZW5kaW5nIHRoZSBtZXNzYWdlIHRvIHRoZSBTTVRQIHNlcnZlci4iIiIpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLXMnLCAnLS1zZW5kZXInLCByZXF1aXJlZD1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nVGhlIHZhbHVlIG9mIHRoZSBGcm9tOiBoZWFkZXIgKHJlcXVpcmVkKScpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLXInLCAnLS1yZWNpcGllbnQnLCByZXF1aXJlZD1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSdhcHBlbmQnLCBtZXRhdmFyPSdSRUNJUElFTlQnLAorICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1bXSwgZGVzdD0ncmVjaXBpZW50cycsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdBIFRvOiBoZWFkZXIgdmFsdWUgKGF0IGxlYXN0IG9uZSByZXF1aXJlZCknKQorICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCisgICAgZGlyZWN0b3J5ID0gYXJncy5kaXJlY3RvcnkKICAgICBpZiBub3QgZGlyZWN0b3J5OgogICAgICAgICBkaXJlY3RvcnkgPSAnLicKICAgICAjIENyZWF0ZSB0aGUgZW5jbG9zaW5nIChvdXRlcikgbWVzc2FnZQogICAgIG91dGVyID0gTUlNRU11bHRpcGFydCgpCiAgICAgb3V0ZXJbJ1N1YmplY3QnXSA9ICdDb250ZW50cyBvZiBkaXJlY3RvcnkgJXMnICUgb3MucGF0aC5hYnNwYXRoKGRpcmVjdG9yeSkKLSAgICBvdXRlclsnVG8nXSA9IENPTU1BU1BBQ0Uuam9pbihvcHRzLnJlY2lwaWVudHMpCi0gICAgb3V0ZXJbJ0Zyb20nXSA9IG9wdHMuc2VuZGVyCisgICAgb3V0ZXJbJ1RvJ10gPSBDT01NQVNQQUNFLmpvaW4oYXJncy5yZWNpcGllbnRzKQorICAgIG91dGVyWydGcm9tJ10gPSBhcmdzLnNlbmRlcgogICAgIG91dGVyLnByZWFtYmxlID0gJ1lvdSB3aWxsIG5vdCBzZWUgdGhpcyBpbiBhIE1JTUUtYXdhcmUgbWFpbCByZWFkZXIuXG4nCiAKICAgICBmb3IgZmlsZW5hbWUgaW4gb3MubGlzdGRpcihkaXJlY3RvcnkpOgpAQCAtNzYsMjMgKzY4LDE5IEBACiAgICAgICAgICAgICBjdHlwZSA9ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nCiAgICAgICAgIG1haW50eXBlLCBzdWJ0eXBlID0gY3R5cGUuc3BsaXQoJy8nLCAxKQogICAgICAgICBpZiBtYWludHlwZSA9PSAndGV4dCc6Ci0gICAgICAgICAgICBmcCA9IG9wZW4ocGF0aCkKLSAgICAgICAgICAgICMgTm90ZTogd2Ugc2hvdWxkIGhhbmRsZSBjYWxjdWxhdGluZyB0aGUgY2hhcnNldAotICAgICAgICAgICAgbXNnID0gTUlNRVRleHQoZnAucmVhZCgpLCBfc3VidHlwZT1zdWJ0eXBlKQotICAgICAgICAgICAgZnAuY2xvc2UoKQorICAgICAgICAgICAgd2l0aCBvcGVuKHBhdGgpIGFzIGZwOgorICAgICAgICAgICAgICAgICMgTm90ZTogd2Ugc2hvdWxkIGhhbmRsZSBjYWxjdWxhdGluZyB0aGUgY2hhcnNldAorICAgICAgICAgICAgICAgIG1zZyA9IE1JTUVUZXh0KGZwLnJlYWQoKSwgX3N1YnR5cGU9c3VidHlwZSkKICAgICAgICAgZWxpZiBtYWludHlwZSA9PSAnaW1hZ2UnOgotICAgICAgICAgICAgZnAgPSBvcGVuKHBhdGgsICdyYicpCi0gICAgICAgICAgICBtc2cgPSBNSU1FSW1hZ2UoZnAucmVhZCgpLCBfc3VidHlwZT1zdWJ0eXBlKQotICAgICAgICAgICAgZnAuY2xvc2UoKQorICAgICAgICAgICAgd2l0aCBvcGVuKHBhdGgsICdyYicpIGFzIGZwOgorICAgICAgICAgICAgICAgIG1zZyA9IE1JTUVJbWFnZShmcC5yZWFkKCksIF9zdWJ0eXBlPXN1YnR5cGUpCiAgICAgICAgIGVsaWYgbWFpbnR5cGUgPT0gJ2F1ZGlvJzoKLSAgICAgICAgICAgIGZwID0gb3BlbihwYXRoLCAncmInKQotICAgICAgICAgICAgbXNnID0gTUlNRUF1ZGlvKGZwLnJlYWQoKSwgX3N1YnR5cGU9c3VidHlwZSkKLSAgICAgICAgICAgIGZwLmNsb3NlKCkKKyAgICAgICAgICAgIHdpdGggb3BlbihwYXRoLCAncmInKSBhcyBmcDoKKyAgICAgICAgICAgICAgICBtc2cgPSBNSU1FQXVkaW8oZnAucmVhZCgpLCBfc3VidHlwZT1zdWJ0eXBlKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgZnAgPSBvcGVuKHBhdGgsICdyYicpCi0gICAgICAgICAgICBtc2cgPSBNSU1FQmFzZShtYWludHlwZSwgc3VidHlwZSkKLSAgICAgICAgICAgIG1zZy5zZXRfcGF5bG9hZChmcC5yZWFkKCkpCi0gICAgICAgICAgICBmcC5jbG9zZSgpCisgICAgICAgICAgICB3aXRoIG9wZW4ocGF0aCwgJ3JiJykgYXMgZnA6CisgICAgICAgICAgICAgICAgbXNnID0gTUlNRUJhc2UobWFpbnR5cGUsIHN1YnR5cGUpCisgICAgICAgICAgICAgICAgbXNnLnNldF9wYXlsb2FkKGZwLnJlYWQoKSkKICAgICAgICAgICAgICMgRW5jb2RlIHRoZSBwYXlsb2FkIHVzaW5nIEJhc2U2NAogICAgICAgICAgICAgZW5jb2RlcnMuZW5jb2RlX2Jhc2U2NChtc2cpCiAgICAgICAgICMgU2V0IHRoZSBmaWxlbmFtZSBwYXJhbWV0ZXIKQEAgLTEwMCwxNCArODgsMTIgQEAKICAgICAgICAgb3V0ZXIuYXR0YWNoKG1zZykKICAgICAjIE5vdyBzZW5kIG9yIHN0b3JlIHRoZSBtZXNzYWdlCiAgICAgY29tcG9zZWQgPSBvdXRlci5hc19zdHJpbmcoKQotICAgIGlmIG9wdHMub3V0cHV0OgotICAgICAgICBmcCA9IG9wZW4ob3B0cy5vdXRwdXQsICd3JykKLSAgICAgICAgZnAud3JpdGUoY29tcG9zZWQpCi0gICAgICAgIGZwLmNsb3NlKCkKKyAgICBpZiBhcmdzLm91dHB1dDoKKyAgICAgICAgd2l0aCBvcGVuKGFyZ3Mub3V0cHV0LCAndycpIGFzIGZwOgorICAgICAgICAgICAgZnAud3JpdGUoY29tcG9zZWQpCiAgICAgZWxzZToKLSAgICAgICAgcyA9IHNtdHBsaWIuU01UUCgnbG9jYWxob3N0JykKLSAgICAgICAgcy5zZW5kbWFpbChvcHRzLnNlbmRlciwgb3B0cy5yZWNpcGllbnRzLCBjb21wb3NlZCkKLSAgICAgICAgcy5xdWl0KCkKKyAgICAgICAgd2l0aCBzbXRwbGliLlNNVFAoJ2xvY2FsaG9zdCcpIGFzIHM6CisgICAgICAgICAgICBzLnNlbmRtYWlsKGFyZ3Muc2VuZGVyLCBhcmdzLnJlY2lwaWVudHMsIGNvbXBvc2VkKQogCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CmRpZmYgLS1naXQgYS9Eb2MvaW5jbHVkZXMvZW1haWwtaGVhZGVycy5weSBiL0RvYy9pbmNsdWRlcy9lbWFpbC1oZWFkZXJzLnB5CmluZGV4IGE1MzMxN2QuLjg5YzhmM2EgMTAwNjQ0Ci0tLSBhL0RvYy9pbmNsdWRlcy9lbWFpbC1oZWFkZXJzLnB5CisrKyBiL0RvYy9pbmNsdWRlcy9lbWFpbC1oZWFkZXJzLnB5CkBAIC0xLDggKzEsOSBAQAogIyBJbXBvcnQgdGhlIGVtYWlsIG1vZHVsZXMgd2UnbGwgbmVlZAogZnJvbSBlbWFpbC5wYXJzZXIgaW1wb3J0IFBhcnNlcgogCi0jICBJZiB0aGUgZS1tYWlsIGhlYWRlcnMgYXJlIGluIGEgZmlsZSwgdW5jb21tZW50IHRoaXMgbGluZToKLSNoZWFkZXJzID0gUGFyc2VyKCkucGFyc2Uob3BlbihtZXNzYWdlZmlsZSwgJ3InKSkKKyMgSWYgdGhlIGUtbWFpbCBoZWFkZXJzIGFyZSBpbiBhIGZpbGUsIHVuY29tbWVudCB0aGVzZSB0d28gbGluZXM6CisjIHdpdGggb3BlbihtZXNzYWdlZmlsZSkgYXMgZnA6CisjICAgICBoZWFkZXJzID0gUGFyc2VyKCkucGFyc2UoZnApCiAKICMgIE9yIGZvciBwYXJzaW5nIGhlYWRlcnMgaW4gYSBzdHJpbmcsIHVzZToKIGhlYWRlcnMgPSBQYXJzZXIoKS5wYXJzZXN0cignRnJvbTogPHVzZXJAZXhhbXBsZS5jb20+XG4nCmRpZmYgLS1naXQgYS9Eb2MvaW5jbHVkZXMvZW1haWwtbWltZS5weSBiL0RvYy9pbmNsdWRlcy9lbWFpbC1taW1lLnB5CmluZGV4IGE5MGVkYzEuLjYxZDA4MzAgMTAwNjQ0Ci0tLSBhL0RvYy9pbmNsdWRlcy9lbWFpbC1taW1lLnB5CisrKyBiL0RvYy9pbmNsdWRlcy9lbWFpbC1taW1lLnB5CkBAIC0yMCw5ICsyMCw4IEBACiBmb3IgZmlsZSBpbiBwbmdmaWxlczoKICAgICAjIE9wZW4gdGhlIGZpbGVzIGluIGJpbmFyeSBtb2RlLiAgTGV0IHRoZSBNSU1FSW1hZ2UgY2xhc3MgYXV0b21hdGljYWxseQogICAgICMgZ3Vlc3MgdGhlIHNwZWNpZmljIGltYWdlIHR5cGUuCi0gICAgZnAgPSBvcGVuKGZpbGUsICdyYicpCi0gICAgaW1nID0gTUlNRUltYWdlKGZwLnJlYWQoKSkKLSAgICBmcC5jbG9zZSgpCisgICAgd2l0aCBvcGVuKGZpbGUsICdyYicpIGFzIGZwOgorICAgICAgICBpbWcgPSBNSU1FSW1hZ2UoZnAucmVhZCgpKQogICAgIG1zZy5hdHRhY2goaW1nKQogCiAjIFNlbmQgdGhlIGVtYWlsIHZpYSBvdXIgb3duIFNNVFAgc2VydmVyLgpkaWZmIC0tZ2l0IGEvRG9jL2luY2x1ZGVzL2VtYWlsLXJlYWQtYWx0ZXJuYXRpdmUtbmV3LWFwaS5weSBiL0RvYy9pbmNsdWRlcy9lbWFpbC1yZWFkLWFsdGVybmF0aXZlLW5ldy1hcGkucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y1YWIyNAotLS0gL2Rldi9udWxsCisrKyBiL0RvYy9pbmNsdWRlcy9lbWFpbC1yZWFkLWFsdGVybmF0aXZlLW5ldy1hcGkucHkKQEAgLTAsMCArMSw3NSBAQAoraW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgdGVtcGZpbGUKK2ltcG9ydCBtaW1ldHlwZXMKK2ltcG9ydCB3ZWJicm93c2VyCisKKyMgSW1wb3J0IHRoZSBlbWFpbCBtb2R1bGVzIHdlJ2xsIG5lZWQKK2Zyb20gZW1haWwgaW1wb3J0IHBvbGljeQorZnJvbSBlbWFpbC5wYXJzZXIgaW1wb3J0IEJ5dGVzUGFyc2VyCisKKyMgQW4gaW1hZ2luYXJ5IG1vZHVsZSB0aGF0IHdvdWxkIG1ha2UgdGhpcyB3b3JrIGFuZCBiZSBzYWZlLgorZnJvbSBpbWFnaW5hcnkgaW1wb3J0IG1hZ2ljX2h0bWxfcGFyc2VyCisKKyMgSW4gYSByZWFsIHByb2dyYW0geW91J2QgZ2V0IHRoZSBmaWxlbmFtZSBmcm9tIHRoZSBhcmd1bWVudHMuCit3aXRoIG9wZW4oJ291dGdvaW5nLm1zZycsICdyYicpIGFzIGZwOgorICAgIG1zZyA9IEJ5dGVzUGFyc2VyKHBvbGljeT1wb2xpY3kuZGVmYXVsdCkucGFyc2UoZnApCisKKyMgTm93IHRoZSBoZWFkZXIgaXRlbXMgY2FuIGJlIGFjY2Vzc2VkIGFzIGEgZGljdGlvbmFyeSwgYW5kIGFueSBub24tQVNDSUkgd2lsbAorIyBiZSBjb252ZXJ0ZWQgdG8gdW5pY29kZToKK3ByaW50KCdUbzonLCBtc2dbJ3RvJ10pCitwcmludCgnRnJvbTonLCBtc2dbJ2Zyb20nXSkKK3ByaW50KCdTdWJqZWN0OicsIG1zZ1snc3ViamVjdCddKQorCisjIElmIHdlIHdhbnQgdG8gcHJpbnQgYSBwcml2aWV3IG9mIHRoZSBtZXNzYWdlIGNvbnRlbnQsIHdlIGNhbiBleHRyYWN0IHdoYXRldmVyCisjIHRoZSBsZWFzdCBmb3JtYXR0ZWQgcGF5bG9hZCBpcyBhbmQgcHJpbnQgdGhlIGZpcnN0IHRocmVlIGxpbmVzLiAgT2YgY291cnNlLAorIyBpZiB0aGUgbWVzc2FnZSBoYXMgbm8gcGxhaW4gdGV4dCBwYXJ0IHByaW50aW5nIHRoZSBmaXJzdCB0aHJlZSBsaW5lcyBvZiBodG1sCisjIGlzIHByb2JhYmx5IHVzZWxlc3MsIGJ1dCB0aGlzIGlzIGp1c3QgYSBjb25jZXB0dWFsIGV4YW1wbGUuCitzaW1wbGVzdCA9IG1zZy5nZXRfYm9keShwcmVmZXJlbmNlbGlzdD0oJ3BsYWluJywgJ2h0bWwnKSkKK3ByaW50KCkKK3ByaW50KCcnLmpvaW4oc2ltcGxlc3QuZ2V0X2NvbnRlbnQoKS5zcGxpdGxpbmVzKGtlZXBlbmRzPVRydWUpWzozXSkpCisKK2FucyA9IGlucHV0KCJWaWV3IGZ1bGwgbWVzc2FnZT8iKQoraWYgYW5zLmxvd2VyKClbMF0gPT0gJ24nOgorICAgIHN5cy5leGl0KCkKKworIyBXZSBjYW4gZXh0cmFjdCB0aGUgcmljaGVzdCBhbHRlcm5hdGl2ZSBpbiBvcmRlciB0byBkaXNwbGF5IGl0OgorcmljaGVzdCA9IG1zZy5nZXRfYm9keSgpCitwYXJ0ZmlsZXMgPSB7fQoraWYgcmljaGVzdFsnY29udGVudC10eXBlJ10ubWFpbnR5cGUgPT0gJ3RleHQnOgorICAgIGlmIHJpY2hlc3RbJ2NvbnRlbnQtdHlwZSddLnN1YnR5cGUgPT0gJ3BsYWluJzoKKyAgICAgICAgZm9yIGxpbmUgaW4gcmljaGVzdC5nZXRfY29udGVudCgpLnNwbGl0bGluZXMoKToKKyAgICAgICAgICAgIHByaW50KGxpbmUpCisgICAgICAgIHN5cy5leGl0KCkKKyAgICBlbGlmIHJpY2hlc3RbJ2NvbnRlbnQtdHlwZSddLnN1YnR5cGUgPT0gJ2h0bWwnOgorICAgICAgICBib2R5ID0gcmljaGVzdAorICAgIGVsc2U6CisgICAgICAgIHByaW50KCJEb24ndCBrbm93IGhvdyB0byBkaXNwbGF5IHt9Ii5mb3JtYXQocmljaGVzdC5nZXRfY29udGVudF90eXBlKCkpKQorICAgICAgICBzeXMuZXhpdCgpCitlbGlmIHJpY2hlc3RbJ2NvbnRlbnQtdHlwZSddLmNvbnRlbnRfdHlwZSA9PSAnbXVsdGlwYXJ0L3JlbGF0ZWQnOgorICAgIGJvZHkgPSByaWNoZXN0LmdldF9ib2R5KHByZWZlcmVuY2VsaXN0PSgnaHRtbCcpKQorICAgIGZvciBwYXJ0IGluIHJpY2hlc3QuaXRlcl9hdHRhY2htZW50cygpOgorICAgICAgICBmbiA9IHBhcnQuZ2V0X2ZpbGVuYW1lKCkKKyAgICAgICAgaWYgZm46CisgICAgICAgICAgICBleHRlbnNpb24gPSBvcy5wYXRoLnNwbGl0ZXh0KHBhcnQuZ2V0X2ZpbGVuYW1lKCkpWzFdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBleHRlbnNpb24gPSBtaW1ldHlwZXMuZ3Vlc3NfZXh0ZW5zaW9uKHBhcnQuZ2V0X2NvbnRlbnRfdHlwZSgpKQorICAgICAgICB3aXRoIHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZShzdWZmaXg9ZXh0ZW5zaW9uLCBkZWxldGU9RmFsc2UpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKHBhcnQuZ2V0X2NvbnRlbnQoKSkKKyAgICAgICAgICAgICMgYWdhaW4gc3RyaXAgdGhlIDw+IHRvIGdvIGZyb20gZW1haWwgZm9ybSBvZiBjaWQgdG8gaHRtbCBmb3JtLgorICAgICAgICAgICAgcGFydGZpbGVzW3BhcnRbJ2NvbnRlbnQtaWQnXVsxOi0xXV0gPSBmLm5hbWUKK2Vsc2U6CisgICAgcHJpbnQoIkRvbid0IGtub3cgaG93IHRvIGRpc3BsYXkge30iLmZvcm1hdChyaWNoZXN0LmdldF9jb250ZW50X3R5cGUoKSkpCisgICAgc3lzLmV4aXQoKQord2l0aCB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUobW9kZT0ndycsIGRlbGV0ZT1GYWxzZSkgYXMgZjoKKyAgICAjIFRoZSBtYWdpY19odG1sX3BhcnNlciBoYXMgdG8gcmV3cml0ZSB0aGUgaHJlZj0iY2lkOi4uLi4iIGF0dHJpYnV0ZXMgdG8KKyAgICAjIHBvaW50IHRvIHRoZSBmaWxlbmFtZXMgaW4gcGFydGZpbGVzLiAgSXQgYWxzbyBoYXMgdG8gZG8gYSBzYWZldHktc2FuaXRpemUKKyAgICAjIG9mIHRoZSBodG1sLiAgSXQgY291bGQgYmUgd3JpdHRlbiB1c2luZyBodG1sLnBhcnNlci4KKyAgICBmLndyaXRlKG1hZ2ljX2h0bWxfcGFyc2VyKGJvZHkuZ2V0X2NvbnRlbnQoKSwgcGFydGZpbGVzKSkKK3dlYmJyb3dzZXIub3BlbihmLm5hbWUpCitvcy5yZW1vdmUoZi5uYW1lKQorZm9yIGZuIGluIHBhcnRmaWxlcy52YWx1ZXMoKToKKyAgICBvcy5yZW1vdmUoZm4pCisKKyMgT2YgY291cnNlLCB0aGVyZSBhcmUgbG90cyBvZiBlbWFpbCBtZXNzYWdlcyB0aGF0IGNvdWxkIGJyZWFrIHRoaXMgc2ltcGxlCisjIG1pbmRlZCBwcm9ncmFtLCBidXQgaXQgd2lsbCBoYW5kbGUgdGhlIG1vc3QgY29tbW9uIG9uZXMuCmRpZmYgLS1naXQgYS9Eb2MvaW5jbHVkZXMvZW1haWwtc2ltcGxlLnB5IGIvRG9jL2luY2x1ZGVzL2VtYWlsLXNpbXBsZS5weQppbmRleCAwNzc1NjhkLi5iOWI4YjQxIDEwMDY0NAotLS0gYS9Eb2MvaW5jbHVkZXMvZW1haWwtc2ltcGxlLnB5CisrKyBiL0RvYy9pbmNsdWRlcy9lbWFpbC1zaW1wbGUucHkKQEAgLTYsMTAgKzYsOSBAQAogCiAjIE9wZW4gYSBwbGFpbiB0ZXh0IGZpbGUgZm9yIHJlYWRpbmcuICBGb3IgdGhpcyBleGFtcGxlLCBhc3N1bWUgdGhhdAogIyB0aGUgdGV4dCBmaWxlIGNvbnRhaW5zIG9ubHkgQVNDSUkgY2hhcmFjdGVycy4KLWZwID0gb3Blbih0ZXh0ZmlsZSwgJ3JiJykKLSMgQ3JlYXRlIGEgdGV4dC9wbGFpbiBtZXNzYWdlCi1tc2cgPSBNSU1FVGV4dChmcC5yZWFkKCkpCi1mcC5jbG9zZSgpCit3aXRoIG9wZW4odGV4dGZpbGUpIGFzIGZwOgorICAgICMgQ3JlYXRlIGEgdGV4dC9wbGFpbiBtZXNzYWdlCisgICAgbXNnID0gTUlNRVRleHQoZnAucmVhZCgpKQogCiAjIG1lID09IHRoZSBzZW5kZXIncyBlbWFpbCBhZGRyZXNzCiAjIHlvdSA9PSB0aGUgcmVjaXBpZW50J3MgZW1haWwgYWRkcmVzcwpkaWZmIC0tZ2l0IGEvRG9jL2luY2x1ZGVzL2VtYWlsLXVucGFjay5weSBiL0RvYy9pbmNsdWRlcy9lbWFpbC11bnBhY2sucHkKaW5kZXggMzY1MzU0My4uNTc0YTBiNiAxMDA2NDQKLS0tIGEvRG9jL2luY2x1ZGVzL2VtYWlsLXVucGFjay5weQorKysgYi9Eb2MvaW5jbHVkZXMvZW1haWwtdW5wYWNrLnB5CkBAIC04LDQxICs4LDI3IEBACiBpbXBvcnQgZXJybm8KIGltcG9ydCBtaW1ldHlwZXMKIAotZnJvbSBvcHRwYXJzZSBpbXBvcnQgT3B0aW9uUGFyc2VyCitmcm9tIGFyZ3BhcnNlIGltcG9ydCBBcmd1bWVudFBhcnNlcgogCiAKIGRlZiBtYWluKCk6Ci0gICAgcGFyc2VyID0gT3B0aW9uUGFyc2VyKHVzYWdlPSIiIlwKKyAgICBwYXJzZXIgPSBBcmd1bWVudFBhcnNlcihkZXNjcmlwdGlvbj0iIiJcCiBVbnBhY2sgYSBNSU1FIG1lc3NhZ2UgaW50byBhIGRpcmVjdG9yeSBvZiBmaWxlcy4KLQotVXNhZ2U6ICVwcm9nIFtvcHRpb25zXSBtc2dmaWxlCiAiIiIpCi0gICAgcGFyc2VyLmFkZF9vcHRpb24oJy1kJywgJy0tZGlyZWN0b3J5JywKLSAgICAgICAgICAgICAgICAgICAgICB0eXBlPSdzdHJpbmcnLCBhY3Rpb249J3N0b3JlJywKLSAgICAgICAgICAgICAgICAgICAgICBoZWxwPSIiIlVucGFjayB0aGUgTUlNRSBtZXNzYWdlIGludG8gdGhlIG5hbWVkCi0gICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5LCB3aGljaCB3aWxsIGJlIGNyZWF0ZWQgaWYgaXQgZG9lc24ndCBhbHJlYWR5Ci0gICAgICAgICAgICAgICAgICAgICAgZXhpc3QuIiIiKQotICAgIG9wdHMsIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCi0gICAgaWYgbm90IG9wdHMuZGlyZWN0b3J5OgotICAgICAgICBwYXJzZXIucHJpbnRfaGVscCgpCi0gICAgICAgIHN5cy5leGl0KDEpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLWQnLCAnLS1kaXJlY3RvcnknLCByZXF1aXJlZD1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iIiJVbnBhY2sgdGhlIE1JTUUgbWVzc2FnZSBpbnRvIHRoZSBuYW1lZAorICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3J5LCB3aGljaCB3aWxsIGJlIGNyZWF0ZWQgaWYgaXQgZG9lc24ndCBhbHJlYWR5CisgICAgICAgICAgICAgICAgICAgICAgICBleGlzdC4iIiIpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnbXNnZmlsZScpCisgICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKKworICAgIHdpdGggb3BlbihhcmdzLm1zZ2ZpbGUpIGFzIGZwOgorICAgICAgICBtc2cgPSBlbWFpbC5tZXNzYWdlX2Zyb21fZmlsZShmcCkKIAogICAgIHRyeToKLSAgICAgICAgbXNnZmlsZSA9IGFyZ3NbMF0KLSAgICBleGNlcHQgSW5kZXhFcnJvcjoKLSAgICAgICAgcGFyc2VyLnByaW50X2hlbHAoKQotICAgICAgICBzeXMuZXhpdCgxKQotCi0gICAgdHJ5OgotICAgICAgICBvcy5ta2RpcihvcHRzLmRpcmVjdG9yeSkKLSAgICBleGNlcHQgT1NFcnJvciBhcyBlOgotICAgICAgICAjIElnbm9yZSBkaXJlY3RvcnkgZXhpc3RzIGVycm9yCi0gICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRUVYSVNUOgotICAgICAgICAgICAgcmFpc2UKLQotICAgIGZwID0gb3Blbihtc2dmaWxlKQotICAgIG1zZyA9IGVtYWlsLm1lc3NhZ2VfZnJvbV9maWxlKGZwKQotICAgIGZwLmNsb3NlKCkKKyAgICAgICAgb3MubWtkaXIoYXJncy5kaXJlY3RvcnkpCisgICAgZXhjZXB0IEZpbGVFeGlzdHNFcnJvcjoKKyAgICAgICAgcGFzcwogCiAgICAgY291bnRlciA9IDEKICAgICBmb3IgcGFydCBpbiBtc2cud2FsaygpOgpAQCAtNTksOSArNDUsOCBAQAogICAgICAgICAgICAgICAgIGV4dCA9ICcuYmluJwogICAgICAgICAgICAgZmlsZW5hbWUgPSAncGFydC0lMDNkJXMnICUgKGNvdW50ZXIsIGV4dCkKICAgICAgICAgY291bnRlciArPSAxCi0gICAgICAgIGZwID0gb3Blbihvcy5wYXRoLmpvaW4ob3B0cy5kaXJlY3RvcnksIGZpbGVuYW1lKSwgJ3diJykKLSAgICAgICAgZnAud3JpdGUocGFydC5nZXRfcGF5bG9hZChkZWNvZGU9VHJ1ZSkpCi0gICAgICAgIGZwLmNsb3NlKCkKKyAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihhcmdzLmRpcmVjdG9yeSwgZmlsZW5hbWUpLCAnd2InKSBhcyBmcDoKKyAgICAgICAgICAgIGZwLndyaXRlKHBhcnQuZ2V0X3BheWxvYWQoZGVjb2RlPVRydWUpKQogCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CmRpZmYgLS1naXQgYS9Eb2MvaW5jbHVkZXMvbXBfYmVuY2htYXJrcy5weSBiL0RvYy9pbmNsdWRlcy9tcF9iZW5jaG1hcmtzLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNzYzZWE5Li4wMDAwMDAwCi0tLSBhL0RvYy9pbmNsdWRlcy9tcF9iZW5jaG1hcmtzLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjM5ICswLDAgQEAKLSMKLSMgU2ltcGxlIGJlbmNobWFya3MgZm9yIHRoZSBtdWx0aXByb2Nlc3NpbmcgcGFja2FnZQotIwotIyBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOCwgUiBPdWRrZXJrCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0KLWltcG9ydCB0aW1lCi1pbXBvcnQgbXVsdGlwcm9jZXNzaW5nCi1pbXBvcnQgdGhyZWFkaW5nCi1pbXBvcnQgcXVldWUKLWltcG9ydCBnYwotCi1fdGltZXIgPSB0aW1lLnBlcmZfY291bnRlcgotCi1kZWx0YSA9IDEKLQotCi0jIyMjIFRFU1RfUVVFVUVTUEVFRAotCi1kZWYgcXVldWVzcGVlZF9mdW5jKHEsIGMsIGl0ZXJhdGlvbnMpOgotICAgIGEgPSAnMCcgKiAyNTYKLSAgICBjLmFjcXVpcmUoKQotICAgIGMubm90aWZ5KCkKLSAgICBjLnJlbGVhc2UoKQotCi0gICAgZm9yIGkgaW4gcmFuZ2UoaXRlcmF0aW9ucyk6Ci0gICAgICAgIHEucHV0KGEpCi0KLSAgICBxLnB1dCgnU1RPUCcpCi0KLWRlZiB0ZXN0X3F1ZXVlc3BlZWQoUHJvY2VzcywgcSwgYyk6Ci0gICAgZWxhcHNlZCA9IDAKLSAgICBpdGVyYXRpb25zID0gMQotCi0gICAgd2hpbGUgZWxhcHNlZCA8IGRlbHRhOgotICAgICAgICBpdGVyYXRpb25zICo9IDIKLQotICAgICAgICBwID0gUHJvY2Vzcyh0YXJnZXQ9cXVldWVzcGVlZF9mdW5jLCBhcmdzPShxLCBjLCBpdGVyYXRpb25zKSkKLSAgICAgICAgYy5hY3F1aXJlKCkKLSAgICAgICAgcC5zdGFydCgpCi0gICAgICAgIGMud2FpdCgpCi0gICAgICAgIGMucmVsZWFzZSgpCi0KLSAgICAgICAgcmVzdWx0ID0gTm9uZQotICAgICAgICB0ID0gX3RpbWVyKCkKLQotICAgICAgICB3aGlsZSByZXN1bHQgIT0gJ1NUT1AnOgotICAgICAgICAgICAgcmVzdWx0ID0gcS5nZXQoKQotCi0gICAgICAgIGVsYXBzZWQgPSBfdGltZXIoKSAtIHQKLQotICAgICAgICBwLmpvaW4oKQotCi0gICAgcHJpbnQoaXRlcmF0aW9ucywgJ29iamVjdHMgcGFzc2VkIHRocm91Z2ggdGhlIHF1ZXVlIGluJywgZWxhcHNlZCwgJ3NlY29uZHMnKQotICAgIHByaW50KCdhdmVyYWdlIG51bWJlci9zZWM6JywgaXRlcmF0aW9ucy9lbGFwc2VkKQotCi0KLSMjIyMgVEVTVF9QSVBFU1BFRUQKLQotZGVmIHBpcGVfZnVuYyhjLCBjb25kLCBpdGVyYXRpb25zKToKLSAgICBhID0gJzAnICogMjU2Ci0gICAgY29uZC5hY3F1aXJlKCkKLSAgICBjb25kLm5vdGlmeSgpCi0gICAgY29uZC5yZWxlYXNlKCkKLQotICAgIGZvciBpIGluIHJhbmdlKGl0ZXJhdGlvbnMpOgotICAgICAgICBjLnNlbmQoYSkKLQotICAgIGMuc2VuZCgnU1RPUCcpCi0KLWRlZiB0ZXN0X3BpcGVzcGVlZCgpOgotICAgIGMsIGQgPSBtdWx0aXByb2Nlc3NpbmcuUGlwZSgpCi0gICAgY29uZCA9IG11bHRpcHJvY2Vzc2luZy5Db25kaXRpb24oKQotICAgIGVsYXBzZWQgPSAwCi0gICAgaXRlcmF0aW9ucyA9IDEKLQotICAgIHdoaWxlIGVsYXBzZWQgPCBkZWx0YToKLSAgICAgICAgaXRlcmF0aW9ucyAqPSAyCi0KLSAgICAgICAgcCA9IG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzKHRhcmdldD1waXBlX2Z1bmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzPShkLCBjb25kLCBpdGVyYXRpb25zKSkKLSAgICAgICAgY29uZC5hY3F1aXJlKCkKLSAgICAgICAgcC5zdGFydCgpCi0gICAgICAgIGNvbmQud2FpdCgpCi0gICAgICAgIGNvbmQucmVsZWFzZSgpCi0KLSAgICAgICAgcmVzdWx0ID0gTm9uZQotICAgICAgICB0ID0gX3RpbWVyKCkKLQotICAgICAgICB3aGlsZSByZXN1bHQgIT0gJ1NUT1AnOgotICAgICAgICAgICAgcmVzdWx0ID0gYy5yZWN2KCkKLQotICAgICAgICBlbGFwc2VkID0gX3RpbWVyKCkgLSB0Ci0gICAgICAgIHAuam9pbigpCi0KLSAgICBwcmludChpdGVyYXRpb25zLCAnb2JqZWN0cyBwYXNzZWQgdGhyb3VnaCBjb25uZWN0aW9uIGluJyxlbGFwc2VkLCdzZWNvbmRzJykKLSAgICBwcmludCgnYXZlcmFnZSBudW1iZXIvc2VjOicsIGl0ZXJhdGlvbnMvZWxhcHNlZCkKLQotCi0jIyMjIFRFU1RfU0VRU1BFRUQKLQotZGVmIHRlc3Rfc2Vxc3BlZWQoc2VxKToKLSAgICBlbGFwc2VkID0gMAotICAgIGl0ZXJhdGlvbnMgPSAxCi0KLSAgICB3aGlsZSBlbGFwc2VkIDwgZGVsdGE6Ci0gICAgICAgIGl0ZXJhdGlvbnMgKj0gMgotCi0gICAgICAgIHQgPSBfdGltZXIoKQotCi0gICAgICAgIGZvciBpIGluIHJhbmdlKGl0ZXJhdGlvbnMpOgotICAgICAgICAgICAgYSA9IHNlcVs1XQotCi0gICAgICAgIGVsYXBzZWQgPSBfdGltZXIoKSAtIHQKLQotICAgIHByaW50KGl0ZXJhdGlvbnMsICdpdGVyYXRpb25zIGluJywgZWxhcHNlZCwgJ3NlY29uZHMnKQotICAgIHByaW50KCdhdmVyYWdlIG51bWJlci9zZWM6JywgaXRlcmF0aW9ucy9lbGFwc2VkKQotCi0KLSMjIyMgVEVTVF9MT0NLCi0KLWRlZiB0ZXN0X2xvY2tzcGVlZChsKToKLSAgICBlbGFwc2VkID0gMAotICAgIGl0ZXJhdGlvbnMgPSAxCi0KLSAgICB3aGlsZSBlbGFwc2VkIDwgZGVsdGE6Ci0gICAgICAgIGl0ZXJhdGlvbnMgKj0gMgotCi0gICAgICAgIHQgPSBfdGltZXIoKQotCi0gICAgICAgIGZvciBpIGluIHJhbmdlKGl0ZXJhdGlvbnMpOgotICAgICAgICAgICAgbC5hY3F1aXJlKCkKLSAgICAgICAgICAgIGwucmVsZWFzZSgpCi0KLSAgICAgICAgZWxhcHNlZCA9IF90aW1lcigpIC0gdAotCi0gICAgcHJpbnQoaXRlcmF0aW9ucywgJ2l0ZXJhdGlvbnMgaW4nLCBlbGFwc2VkLCAnc2Vjb25kcycpCi0gICAgcHJpbnQoJ2F2ZXJhZ2UgbnVtYmVyL3NlYzonLCBpdGVyYXRpb25zL2VsYXBzZWQpCi0KLQotIyMjIyBURVNUX0NPTkRJVElPTgotCi1kZWYgY29uZGl0aW9uc3BlZWRfZnVuYyhjLCBOKToKLSAgICBjLmFjcXVpcmUoKQotICAgIGMubm90aWZ5KCkKLQotICAgIGZvciBpIGluIHJhbmdlKE4pOgotICAgICAgICBjLndhaXQoKQotICAgICAgICBjLm5vdGlmeSgpCi0KLSAgICBjLnJlbGVhc2UoKQotCi1kZWYgdGVzdF9jb25kaXRpb25zcGVlZChQcm9jZXNzLCBjKToKLSAgICBlbGFwc2VkID0gMAotICAgIGl0ZXJhdGlvbnMgPSAxCi0KLSAgICB3aGlsZSBlbGFwc2VkIDwgZGVsdGE6Ci0gICAgICAgIGl0ZXJhdGlvbnMgKj0gMgotCi0gICAgICAgIGMuYWNxdWlyZSgpCi0gICAgICAgIHAgPSBQcm9jZXNzKHRhcmdldD1jb25kaXRpb25zcGVlZF9mdW5jLCBhcmdzPShjLCBpdGVyYXRpb25zKSkKLSAgICAgICAgcC5zdGFydCgpCi0KLSAgICAgICAgYy53YWl0KCkKLQotICAgICAgICB0ID0gX3RpbWVyKCkKLQotICAgICAgICBmb3IgaSBpbiByYW5nZShpdGVyYXRpb25zKToKLSAgICAgICAgICAgIGMubm90aWZ5KCkKLSAgICAgICAgICAgIGMud2FpdCgpCi0KLSAgICAgICAgZWxhcHNlZCA9IF90aW1lcigpIC0gdAotCi0gICAgICAgIGMucmVsZWFzZSgpCi0gICAgICAgIHAuam9pbigpCi0KLSAgICBwcmludChpdGVyYXRpb25zICogMiwgJ3dhaXRzIGluJywgZWxhcHNlZCwgJ3NlY29uZHMnKQotICAgIHByaW50KCdhdmVyYWdlIG51bWJlci9zZWM6JywgaXRlcmF0aW9ucyAqIDIgLyBlbGFwc2VkKQotCi0jIyMjCi0KLWRlZiB0ZXN0KCk6Ci0gICAgbWFuYWdlciA9IG11bHRpcHJvY2Vzc2luZy5NYW5hZ2VyKCkKLQotICAgIGdjLmRpc2FibGUoKQotCi0gICAgcHJpbnQoJ1xuXHQjIyMjIyMjIyB0ZXN0aW5nIFF1ZXVlLlF1ZXVlXG4nKQotICAgIHRlc3RfcXVldWVzcGVlZCh0aHJlYWRpbmcuVGhyZWFkLCBxdWV1ZS5RdWV1ZSgpLAotICAgICAgICAgICAgICAgICAgICB0aHJlYWRpbmcuQ29uZGl0aW9uKCkpCi0gICAgcHJpbnQoJ1xuXHQjIyMjIyMjIyB0ZXN0aW5nIG11bHRpcHJvY2Vzc2luZy5RdWV1ZVxuJykKLSAgICB0ZXN0X3F1ZXVlc3BlZWQobXVsdGlwcm9jZXNzaW5nLlByb2Nlc3MsIG11bHRpcHJvY2Vzc2luZy5RdWV1ZSgpLAotICAgICAgICAgICAgICAgICAgICBtdWx0aXByb2Nlc3NpbmcuQ29uZGl0aW9uKCkpCi0gICAgcHJpbnQoJ1xuXHQjIyMjIyMjIyB0ZXN0aW5nIFF1ZXVlIG1hbmFnZWQgYnkgc2VydmVyIHByb2Nlc3NcbicpCi0gICAgdGVzdF9xdWV1ZXNwZWVkKG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzLCBtYW5hZ2VyLlF1ZXVlKCksCi0gICAgICAgICAgICAgICAgICAgIG1hbmFnZXIuQ29uZGl0aW9uKCkpCi0gICAgcHJpbnQoJ1xuXHQjIyMjIyMjIyB0ZXN0aW5nIG11bHRpcHJvY2Vzc2luZy5QaXBlXG4nKQotICAgIHRlc3RfcGlwZXNwZWVkKCkKLQotICAgIHByaW50KCkKLQotICAgIHByaW50KCdcblx0IyMjIyMjIyMgdGVzdGluZyBsaXN0XG4nKQotICAgIHRlc3Rfc2Vxc3BlZWQobGlzdChyYW5nZSgxMCkpKQotICAgIHByaW50KCdcblx0IyMjIyMjIyMgdGVzdGluZyBsaXN0IG1hbmFnZWQgYnkgc2VydmVyIHByb2Nlc3NcbicpCi0gICAgdGVzdF9zZXFzcGVlZChtYW5hZ2VyLmxpc3QobGlzdChyYW5nZSgxMCkpKSkKLSAgICBwcmludCgnXG5cdCMjIyMjIyMjIHRlc3RpbmcgQXJyYXkoImkiLCAuLi4sIGxvY2s9RmFsc2UpXG4nKQotICAgIHRlc3Rfc2Vxc3BlZWQobXVsdGlwcm9jZXNzaW5nLkFycmF5KCdpJywgbGlzdChyYW5nZSgxMCkpLCBsb2NrPUZhbHNlKSkKLSAgICBwcmludCgnXG5cdCMjIyMjIyMjIHRlc3RpbmcgQXJyYXkoImkiLCAuLi4sIGxvY2s9VHJ1ZSlcbicpCi0gICAgdGVzdF9zZXFzcGVlZChtdWx0aXByb2Nlc3NpbmcuQXJyYXkoJ2knLCBsaXN0KHJhbmdlKDEwKSksIGxvY2s9VHJ1ZSkpCi0KLSAgICBwcmludCgpCi0KLSAgICBwcmludCgnXG5cdCMjIyMjIyMjIHRlc3RpbmcgdGhyZWFkaW5nLkxvY2tcbicpCi0gICAgdGVzdF9sb2Nrc3BlZWQodGhyZWFkaW5nLkxvY2soKSkKLSAgICBwcmludCgnXG5cdCMjIyMjIyMjIHRlc3RpbmcgdGhyZWFkaW5nLlJMb2NrXG4nKQotICAgIHRlc3RfbG9ja3NwZWVkKHRocmVhZGluZy5STG9jaygpKQotICAgIHByaW50KCdcblx0IyMjIyMjIyMgdGVzdGluZyBtdWx0aXByb2Nlc3NpbmcuTG9ja1xuJykKLSAgICB0ZXN0X2xvY2tzcGVlZChtdWx0aXByb2Nlc3NpbmcuTG9jaygpKQotICAgIHByaW50KCdcblx0IyMjIyMjIyMgdGVzdGluZyBtdWx0aXByb2Nlc3NpbmcuUkxvY2tcbicpCi0gICAgdGVzdF9sb2Nrc3BlZWQobXVsdGlwcm9jZXNzaW5nLlJMb2NrKCkpCi0gICAgcHJpbnQoJ1xuXHQjIyMjIyMjIyB0ZXN0aW5nIGxvY2sgbWFuYWdlZCBieSBzZXJ2ZXIgcHJvY2Vzc1xuJykKLSAgICB0ZXN0X2xvY2tzcGVlZChtYW5hZ2VyLkxvY2soKSkKLSAgICBwcmludCgnXG5cdCMjIyMjIyMjIHRlc3RpbmcgcmxvY2sgbWFuYWdlZCBieSBzZXJ2ZXIgcHJvY2Vzc1xuJykKLSAgICB0ZXN0X2xvY2tzcGVlZChtYW5hZ2VyLlJMb2NrKCkpCi0KLSAgICBwcmludCgpCi0KLSAgICBwcmludCgnXG5cdCMjIyMjIyMjIHRlc3RpbmcgdGhyZWFkaW5nLkNvbmRpdGlvblxuJykKLSAgICB0ZXN0X2NvbmRpdGlvbnNwZWVkKHRocmVhZGluZy5UaHJlYWQsIHRocmVhZGluZy5Db25kaXRpb24oKSkKLSAgICBwcmludCgnXG5cdCMjIyMjIyMjIHRlc3RpbmcgbXVsdGlwcm9jZXNzaW5nLkNvbmRpdGlvblxuJykKLSAgICB0ZXN0X2NvbmRpdGlvbnNwZWVkKG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzLCBtdWx0aXByb2Nlc3NpbmcuQ29uZGl0aW9uKCkpCi0gICAgcHJpbnQoJ1xuXHQjIyMjIyMjIyB0ZXN0aW5nIGNvbmRpdGlvbiBtYW5hZ2VkIGJ5IGEgc2VydmVyIHByb2Nlc3NcbicpCi0gICAgdGVzdF9jb25kaXRpb25zcGVlZChtdWx0aXByb2Nlc3NpbmcuUHJvY2VzcywgbWFuYWdlci5Db25kaXRpb24oKSkKLQotICAgIGdjLmVuYWJsZSgpCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgbXVsdGlwcm9jZXNzaW5nLmZyZWV6ZV9zdXBwb3J0KCkKLSAgICB0ZXN0KCkKZGlmZiAtLWdpdCBhL0RvYy9pbmNsdWRlcy9tcF9uZXd0eXBlLnB5IGIvRG9jL2luY2x1ZGVzL21wX25ld3R5cGUucHkKaW5kZXggNzI5MTc0My4uMWM3OTZhNSAxMDA2NDQKLS0tIGEvRG9jL2luY2x1ZGVzL21wX25ld3R5cGUucHkKKysrIGIvRG9jL2luY2x1ZGVzL21wX25ld3R5cGUucHkKQEAgLTEsMTEgKzEsMyBAQAotIwotIyBUaGlzIG1vZHVsZSBzaG93cyBob3cgdG8gdXNlIGFyYml0cmFyeSBjYWxsYWJsZXMgd2l0aCBhIHN1YmNsYXNzIG9mCi0jIGBCYXNlTWFuYWdlcmAuCi0jCi0jIENvcHlyaWdodCAoYykgMjAwNi0yMDA4LCBSIE91ZGtlcmsKLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLQogZnJvbSBtdWx0aXByb2Nlc3NpbmcgaW1wb3J0IGZyZWV6ZV9zdXBwb3J0CiBmcm9tIG11bHRpcHJvY2Vzc2luZy5tYW5hZ2VycyBpbXBvcnQgQmFzZU1hbmFnZXIsIEJhc2VQcm94eQogaW1wb3J0IG9wZXJhdG9yCkBAIC0yNywxMiArMTksMTAgQEAKIAogIyBQcm94eSB0eXBlIGZvciBnZW5lcmF0b3Igb2JqZWN0cwogY2xhc3MgR2VuZXJhdG9yUHJveHkoQmFzZVByb3h5KToKLSAgICBfZXhwb3NlZF8gPSAoJ25leHQnLCAnX19uZXh0X18nKQorICAgIF9leHBvc2VkXyA9IFsnX19uZXh0X18nXQogICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYKICAgICBkZWYgX19uZXh0X18oc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLl9jYWxsbWV0aG9kKCduZXh0JykKLSAgICBkZWYgX19uZXh0X18oc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLl9jYWxsbWV0aG9kKCdfX25leHRfXycpCiAKICMgRnVuY3Rpb24gdG8gcmV0dXJuIHRoZSBvcGVyYXRvciBtb2R1bGUKQEAgLTkwLDggKzgwLDYgQEAKICAgICBvcCA9IG1hbmFnZXIub3BlcmF0b3IoKQogICAgIHByaW50KCdvcC5hZGQoMjMsIDQ1KSA9Jywgb3AuYWRkKDIzLCA0NSkpCiAgICAgcHJpbnQoJ29wLnBvdygyLCA5NCkgPScsIG9wLnBvdygyLCA5NCkpCi0gICAgcHJpbnQoJ29wLmdldHNsaWNlKHJhbmdlKDEwKSwgMiwgNikgPScsIG9wLmdldHNsaWNlKGxpc3QocmFuZ2UoMTApKSwgMiwgNikpCi0gICAgcHJpbnQoJ29wLnJlcGVhdChyYW5nZSg1KSwgMykgPScsIG9wLnJlcGVhdChsaXN0KHJhbmdlKDUpKSwgMykpCiAgICAgcHJpbnQoJ29wLl9leHBvc2VkXyA9Jywgb3AuX2V4cG9zZWRfKQogCiAjIwpkaWZmIC0tZ2l0IGEvRG9jL2luY2x1ZGVzL21wX3Bvb2wucHkgYi9Eb2MvaW5jbHVkZXMvbXBfcG9vbC5weQppbmRleCAxNTc4NDk4Li4xMTEwMWUxIDEwMDY0NAotLS0gYS9Eb2MvaW5jbHVkZXMvbXBfcG9vbC5weQorKysgYi9Eb2MvaW5jbHVkZXMvbXBfcG9vbC5weQpAQCAtMSwxMCArMSwzIEBACi0jCi0jIEEgdGVzdCBvZiBgbXVsdGlwcm9jZXNzaW5nLlBvb2xgIGNsYXNzCi0jCi0jIENvcHlyaWdodCAoYykgMjAwNi0yMDA4LCBSIE91ZGtlcmsKLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLQogaW1wb3J0IG11bHRpcHJvY2Vzc2luZwogaW1wb3J0IHRpbWUKIGltcG9ydCByYW5kb20KQEAgLTQ2LDI2OSArMzksMTE1IEBACiAjCiAKIGRlZiB0ZXN0KCk6Ci0gICAgcHJpbnQoJ2NwdV9jb3VudCgpID0gJWRcbicgJSBtdWx0aXByb2Nlc3NpbmcuY3B1X2NvdW50KCkpCi0KLSAgICAjCi0gICAgIyBDcmVhdGUgcG9vbAotICAgICMKLQogICAgIFBST0NFU1NFUyA9IDQKICAgICBwcmludCgnQ3JlYXRpbmcgcG9vbCB3aXRoICVkIHByb2Nlc3Nlc1xuJyAlIFBST0NFU1NFUykKLSAgICBwb29sID0gbXVsdGlwcm9jZXNzaW5nLlBvb2woUFJPQ0VTU0VTKQotICAgIHByaW50KCdwb29sID0gJXMnICUgcG9vbCkKLSAgICBwcmludCgpCiAKLSAgICAjCi0gICAgIyBUZXN0cwotICAgICMKKyAgICB3aXRoIG11bHRpcHJvY2Vzc2luZy5Qb29sKFBST0NFU1NFUykgYXMgcG9vbDoKKyAgICAgICAgIworICAgICAgICAjIFRlc3RzCisgICAgICAgICMKIAotICAgIFRBU0tTID0gWyhtdWwsIChpLCA3KSkgZm9yIGkgaW4gcmFuZ2UoMTApXSArIFwKLSAgICAgICAgICAgIFsocGx1cywgKGksIDgpKSBmb3IgaSBpbiByYW5nZSgxMCldCisgICAgICAgIFRBU0tTID0gWyhtdWwsIChpLCA3KSkgZm9yIGkgaW4gcmFuZ2UoMTApXSArIFwKKyAgICAgICAgICAgICAgICBbKHBsdXMsIChpLCA4KSkgZm9yIGkgaW4gcmFuZ2UoMTApXQogCi0gICAgcmVzdWx0cyA9IFtwb29sLmFwcGx5X2FzeW5jKGNhbGN1bGF0ZSwgdCkgZm9yIHQgaW4gVEFTS1NdCi0gICAgaW1hcF9pdCA9IHBvb2wuaW1hcChjYWxjdWxhdGVzdGFyLCBUQVNLUykKLSAgICBpbWFwX3Vub3JkZXJlZF9pdCA9IHBvb2wuaW1hcF91bm9yZGVyZWQoY2FsY3VsYXRlc3RhciwgVEFTS1MpCisgICAgICAgIHJlc3VsdHMgPSBbcG9vbC5hcHBseV9hc3luYyhjYWxjdWxhdGUsIHQpIGZvciB0IGluIFRBU0tTXQorICAgICAgICBpbWFwX2l0ID0gcG9vbC5pbWFwKGNhbGN1bGF0ZXN0YXIsIFRBU0tTKQorICAgICAgICBpbWFwX3Vub3JkZXJlZF9pdCA9IHBvb2wuaW1hcF91bm9yZGVyZWQoY2FsY3VsYXRlc3RhciwgVEFTS1MpCiAKLSAgICBwcmludCgnT3JkZXJlZCByZXN1bHRzIHVzaW5nIHBvb2wuYXBwbHlfYXN5bmMoKTonKQotICAgIGZvciByIGluIHJlc3VsdHM6Ci0gICAgICAgIHByaW50KCdcdCcsIHIuZ2V0KCkpCi0gICAgcHJpbnQoKQorICAgICAgICBwcmludCgnT3JkZXJlZCByZXN1bHRzIHVzaW5nIHBvb2wuYXBwbHlfYXN5bmMoKTonKQorICAgICAgICBmb3IgciBpbiByZXN1bHRzOgorICAgICAgICAgICAgcHJpbnQoJ1x0Jywgci5nZXQoKSkKKyAgICAgICAgcHJpbnQoKQogCi0gICAgcHJpbnQoJ09yZGVyZWQgcmVzdWx0cyB1c2luZyBwb29sLmltYXAoKTonKQotICAgIGZvciB4IGluIGltYXBfaXQ6Ci0gICAgICAgIHByaW50KCdcdCcsIHgpCi0gICAgcHJpbnQoKQorICAgICAgICBwcmludCgnT3JkZXJlZCByZXN1bHRzIHVzaW5nIHBvb2wuaW1hcCgpOicpCisgICAgICAgIGZvciB4IGluIGltYXBfaXQ6CisgICAgICAgICAgICBwcmludCgnXHQnLCB4KQorICAgICAgICBwcmludCgpCiAKLSAgICBwcmludCgnVW5vcmRlcmVkIHJlc3VsdHMgdXNpbmcgcG9vbC5pbWFwX3Vub3JkZXJlZCgpOicpCi0gICAgZm9yIHggaW4gaW1hcF91bm9yZGVyZWRfaXQ6Ci0gICAgICAgIHByaW50KCdcdCcsIHgpCi0gICAgcHJpbnQoKQorICAgICAgICBwcmludCgnVW5vcmRlcmVkIHJlc3VsdHMgdXNpbmcgcG9vbC5pbWFwX3Vub3JkZXJlZCgpOicpCisgICAgICAgIGZvciB4IGluIGltYXBfdW5vcmRlcmVkX2l0OgorICAgICAgICAgICAgcHJpbnQoJ1x0JywgeCkKKyAgICAgICAgcHJpbnQoKQogCi0gICAgcHJpbnQoJ09yZGVyZWQgcmVzdWx0cyB1c2luZyBwb29sLm1hcCgpIC0tLSB3aWxsIGJsb2NrIHRpbGwgY29tcGxldGU6JykKLSAgICBmb3IgeCBpbiBwb29sLm1hcChjYWxjdWxhdGVzdGFyLCBUQVNLUyk6Ci0gICAgICAgIHByaW50KCdcdCcsIHgpCi0gICAgcHJpbnQoKQorICAgICAgICBwcmludCgnT3JkZXJlZCByZXN1bHRzIHVzaW5nIHBvb2wubWFwKCkgLS0tIHdpbGwgYmxvY2sgdGlsbCBjb21wbGV0ZTonKQorICAgICAgICBmb3IgeCBpbiBwb29sLm1hcChjYWxjdWxhdGVzdGFyLCBUQVNLUyk6CisgICAgICAgICAgICBwcmludCgnXHQnLCB4KQorICAgICAgICBwcmludCgpCiAKLSAgICAjCi0gICAgIyBTaW1wbGUgYmVuY2htYXJrcwotICAgICMKKyAgICAgICAgIworICAgICAgICAjIFRlc3QgZXJyb3IgaGFuZGxpbmcKKyAgICAgICAgIwogCi0gICAgTiA9IDEwMDAwMAotICAgIHByaW50KCdkZWYgcG93Myh4KTogcmV0dXJuIHgqKjMnKQorICAgICAgICBwcmludCgnVGVzdGluZyBlcnJvciBoYW5kbGluZzonKQogCi0gICAgdCA9IHRpbWUudGltZSgpCi0gICAgQSA9IGxpc3QobWFwKHBvdzMsIHJhbmdlKE4pKSkKLSAgICBwcmludCgnXHRtYXAocG93MywgcmFuZ2UoJWQpKTpcblx0XHQlcyBzZWNvbmRzJyAlIFwKLSAgICAgICAgICAoTiwgdGltZS50aW1lKCkgLSB0KSkKLQotICAgIHQgPSB0aW1lLnRpbWUoKQotICAgIEIgPSBwb29sLm1hcChwb3czLCByYW5nZShOKSkKLSAgICBwcmludCgnXHRwb29sLm1hcChwb3czLCByYW5nZSglZCkpOlxuXHRcdCVzIHNlY29uZHMnICUgXAotICAgICAgICAgIChOLCB0aW1lLnRpbWUoKSAtIHQpKQotCi0gICAgdCA9IHRpbWUudGltZSgpCi0gICAgQyA9IGxpc3QocG9vbC5pbWFwKHBvdzMsIHJhbmdlKE4pLCBjaHVua3NpemU9Ti8vOCkpCi0gICAgcHJpbnQoJ1x0bGlzdChwb29sLmltYXAocG93MywgcmFuZ2UoJWQpLCBjaHVua3NpemU9JWQpKTpcblx0XHQlcycgXAotICAgICAgICAgICcgc2Vjb25kcycgJSAoTiwgTi8vOCwgdGltZS50aW1lKCkgLSB0KSkKLQotICAgIGFzc2VydCBBID09IEIgPT0gQywgKGxlbihBKSwgbGVuKEIpLCBsZW4oQykpCi0gICAgcHJpbnQoKQotCi0gICAgTCA9IFtOb25lXSAqIDEwMDAwMDAKLSAgICBwcmludCgnZGVmIG5vb3AoeCk6IHBhc3MnKQotICAgIHByaW50KCdMID0gW05vbmVdICogMTAwMDAwMCcpCi0KLSAgICB0ID0gdGltZS50aW1lKCkKLSAgICBBID0gbGlzdChtYXAobm9vcCwgTCkpCi0gICAgcHJpbnQoJ1x0bWFwKG5vb3AsIEwpOlxuXHRcdCVzIHNlY29uZHMnICUgXAotICAgICAgICAgICh0aW1lLnRpbWUoKSAtIHQpKQotCi0gICAgdCA9IHRpbWUudGltZSgpCi0gICAgQiA9IHBvb2wubWFwKG5vb3AsIEwpCi0gICAgcHJpbnQoJ1x0cG9vbC5tYXAobm9vcCwgTCk6XG5cdFx0JXMgc2Vjb25kcycgJSBcCi0gICAgICAgICAgKHRpbWUudGltZSgpIC0gdCkpCi0KLSAgICB0ID0gdGltZS50aW1lKCkKLSAgICBDID0gbGlzdChwb29sLmltYXAobm9vcCwgTCwgY2h1bmtzaXplPWxlbihMKS8vOCkpCi0gICAgcHJpbnQoJ1x0bGlzdChwb29sLmltYXAobm9vcCwgTCwgY2h1bmtzaXplPSVkKSk6XG5cdFx0JXMgc2Vjb25kcycgJSBcCi0gICAgICAgICAgKGxlbihMKS8vOCwgdGltZS50aW1lKCkgLSB0KSkKLQotICAgIGFzc2VydCBBID09IEIgPT0gQywgKGxlbihBKSwgbGVuKEIpLCBsZW4oQykpCi0gICAgcHJpbnQoKQotCi0gICAgZGVsIEEsIEIsIEMsIEwKLQotICAgICMKLSAgICAjIFRlc3QgZXJyb3IgaGFuZGxpbmcKLSAgICAjCi0KLSAgICBwcmludCgnVGVzdGluZyBlcnJvciBoYW5kbGluZzonKQotCi0gICAgdHJ5OgotICAgICAgICBwcmludChwb29sLmFwcGx5KGYsICg1LCkpKQotICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvcjoKLSAgICAgICAgcHJpbnQoJ1x0R290IFplcm9EaXZpc2lvbkVycm9yIGFzIGV4cGVjdGVkIGZyb20gcG9vbC5hcHBseSgpJykKLSAgICBlbHNlOgotICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcignZXhwZWN0ZWQgWmVyb0RpdmlzaW9uRXJyb3InKQotCi0gICAgdHJ5OgotICAgICAgICBwcmludChwb29sLm1hcChmLCBsaXN0KHJhbmdlKDEwKSkpKQotICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvcjoKLSAgICAgICAgcHJpbnQoJ1x0R290IFplcm9EaXZpc2lvbkVycm9yIGFzIGV4cGVjdGVkIGZyb20gcG9vbC5tYXAoKScpCi0gICAgZWxzZToKLSAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoJ2V4cGVjdGVkIFplcm9EaXZpc2lvbkVycm9yJykKLQotICAgIHRyeToKLSAgICAgICAgcHJpbnQobGlzdChwb29sLmltYXAoZiwgbGlzdChyYW5nZSgxMCkpKSkpCi0gICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yOgotICAgICAgICBwcmludCgnXHRHb3QgWmVyb0RpdmlzaW9uRXJyb3IgYXMgZXhwZWN0ZWQgZnJvbSBsaXN0KHBvb2wuaW1hcCgpKScpCi0gICAgZWxzZToKLSAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoJ2V4cGVjdGVkIFplcm9EaXZpc2lvbkVycm9yJykKLQotICAgIGl0ID0gcG9vbC5pbWFwKGYsIGxpc3QocmFuZ2UoMTApKSkKLSAgICBmb3IgaSBpbiByYW5nZSgxMCk6CiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHggPSBuZXh0KGl0KQorICAgICAgICAgICAgcHJpbnQocG9vbC5hcHBseShmLCAoNSwpKSkKICAgICAgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yOgotICAgICAgICAgICAgaWYgaSA9PSA1OgotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246Ci0gICAgICAgICAgICBicmVhaworICAgICAgICAgICAgcHJpbnQoJ1x0R290IFplcm9EaXZpc2lvbkVycm9yIGFzIGV4cGVjdGVkIGZyb20gcG9vbC5hcHBseSgpJykKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGlmIGkgPT0gNToKLSAgICAgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcignZXhwZWN0ZWQgWmVyb0RpdmlzaW9uRXJyb3InKQorICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoJ2V4cGVjdGVkIFplcm9EaXZpc2lvbkVycm9yJykKIAotICAgIGFzc2VydCBpID09IDkKLSAgICBwcmludCgnXHRHb3QgWmVyb0RpdmlzaW9uRXJyb3IgYXMgZXhwZWN0ZWQgZnJvbSBJTWFwSXRlcmF0b3IubmV4dCgpJykKLSAgICBwcmludCgpCi0KLSAgICAjCi0gICAgIyBUZXN0aW5nIHRpbWVvdXRzCi0gICAgIwotCi0gICAgcHJpbnQoJ1Rlc3RpbmcgQXBwbHlSZXN1bHQuZ2V0KCkgd2l0aCB0aW1lb3V0OicsIGVuZD0nICcpCi0gICAgcmVzID0gcG9vbC5hcHBseV9hc3luYyhjYWxjdWxhdGUsIFRBU0tTWzBdKQotICAgIHdoaWxlIDE6Ci0gICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCdcblx0JXMnICUgcmVzLmdldCgwLjAyKSkKLSAgICAgICAgICAgIGJyZWFrCi0gICAgICAgIGV4Y2VwdCBtdWx0aXByb2Nlc3NpbmcuVGltZW91dEVycm9yOgotICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgnLicpCi0gICAgcHJpbnQoKQotICAgIHByaW50KCkKKyAgICAgICAgICAgIHByaW50KHBvb2wubWFwKGYsIGxpc3QocmFuZ2UoMTApKSkpCisgICAgICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvcjoKKyAgICAgICAgICAgIHByaW50KCdcdEdvdCBaZXJvRGl2aXNpb25FcnJvciBhcyBleHBlY3RlZCBmcm9tIHBvb2wubWFwKCknKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoJ2V4cGVjdGVkIFplcm9EaXZpc2lvbkVycm9yJykKIAotICAgIHByaW50KCdUZXN0aW5nIElNYXBJdGVyYXRvci5uZXh0KCkgd2l0aCB0aW1lb3V0OicsIGVuZD0nICcpCi0gICAgaXQgPSBwb29sLmltYXAoY2FsY3VsYXRlc3RhciwgVEFTS1MpCi0gICAgd2hpbGUgMToKLSAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoJ1xuXHQlcycgJSBpdC5uZXh0KDAuMDIpKQotICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKLSAgICAgICAgICAgIGJyZWFrCi0gICAgICAgIGV4Y2VwdCBtdWx0aXByb2Nlc3NpbmcuVGltZW91dEVycm9yOgotICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgnLicpCi0gICAgcHJpbnQoKQotICAgIHByaW50KCkKKyAgICAgICAgICAgIHByaW50KGxpc3QocG9vbC5pbWFwKGYsIGxpc3QocmFuZ2UoMTApKSkpKQorICAgICAgICBleGNlcHQgWmVyb0RpdmlzaW9uRXJyb3I6CisgICAgICAgICAgICBwcmludCgnXHRHb3QgWmVyb0RpdmlzaW9uRXJyb3IgYXMgZXhwZWN0ZWQgZnJvbSBsaXN0KHBvb2wuaW1hcCgpKScpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcignZXhwZWN0ZWQgWmVyb0RpdmlzaW9uRXJyb3InKQogCi0gICAgIwotICAgICMgVGVzdGluZyBjYWxsYmFjawotICAgICMKKyAgICAgICAgaXQgPSBwb29sLmltYXAoZiwgbGlzdChyYW5nZSgxMCkpKQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxMCk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgeCA9IG5leHQoaXQpCisgICAgICAgICAgICBleGNlcHQgWmVyb0RpdmlzaW9uRXJyb3I6CisgICAgICAgICAgICAgICAgaWYgaSA9PSA1OgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBpID09IDU6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCdleHBlY3RlZCBaZXJvRGl2aXNpb25FcnJvcicpCiAKLSAgICBwcmludCgnVGVzdGluZyBjYWxsYmFjazonKQorICAgICAgICBhc3NlcnQgaSA9PSA5CisgICAgICAgIHByaW50KCdcdEdvdCBaZXJvRGl2aXNpb25FcnJvciBhcyBleHBlY3RlZCBmcm9tIElNYXBJdGVyYXRvci5uZXh0KCknKQorICAgICAgICBwcmludCgpCiAKLSAgICBBID0gW10KLSAgICBCID0gWzU2LCAwLCAxLCA4LCAyNywgNjQsIDEyNSwgMjE2LCAzNDMsIDUxMiwgNzI5XQorICAgICAgICAjCisgICAgICAgICMgVGVzdGluZyB0aW1lb3V0cworICAgICAgICAjCiAKLSAgICByID0gcG9vbC5hcHBseV9hc3luYyhtdWwsICg3LCA4KSwgY2FsbGJhY2s9QS5hcHBlbmQpCi0gICAgci53YWl0KCkKKyAgICAgICAgcHJpbnQoJ1Rlc3RpbmcgQXBwbHlSZXN1bHQuZ2V0KCkgd2l0aCB0aW1lb3V0OicsIGVuZD0nICcpCisgICAgICAgIHJlcyA9IHBvb2wuYXBwbHlfYXN5bmMoY2FsY3VsYXRlLCBUQVNLU1swXSkKKyAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoJ1xuXHQlcycgJSByZXMuZ2V0KDAuMDIpKQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBleGNlcHQgbXVsdGlwcm9jZXNzaW5nLlRpbWVvdXRFcnJvcjoKKyAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCcuJykKKyAgICAgICAgcHJpbnQoKQorICAgICAgICBwcmludCgpCiAKLSAgICByID0gcG9vbC5tYXBfYXN5bmMocG93MywgbGlzdChyYW5nZSgxMCkpLCBjYWxsYmFjaz1BLmV4dGVuZCkKLSAgICByLndhaXQoKQotCi0gICAgaWYgQSA9PSBCOgotICAgICAgICBwcmludCgnXHRjYWxsYmFja3Mgc3VjY2VlZGVkXG4nKQotICAgIGVsc2U6Ci0gICAgICAgIHByaW50KCdcdCoqKiBjYWxsYmFja3MgZmFpbGVkXG5cdFx0JXMgIT0gJXNcbicgJSAoQSwgQikpCi0KLSAgICAjCi0gICAgIyBDaGVjayB0aGVyZSBhcmUgbm8gb3V0c3RhbmRpbmcgdGFza3MKLSAgICAjCi0KLSAgICBhc3NlcnQgbm90IHBvb2wuX2NhY2hlLCAnY2FjaGUgPSAlcicgJSBwb29sLl9jYWNoZQotCi0gICAgIwotICAgICMgQ2hlY2sgY2xvc2UoKSBtZXRob2RzCi0gICAgIwotCi0gICAgcHJpbnQoJ1Rlc3RpbmcgY2xvc2UoKTonKQotCi0gICAgZm9yIHdvcmtlciBpbiBwb29sLl9wb29sOgotICAgICAgICBhc3NlcnQgd29ya2VyLmlzX2FsaXZlKCkKLQotICAgIHJlc3VsdCA9IHBvb2wuYXBwbHlfYXN5bmModGltZS5zbGVlcCwgWzAuNV0pCi0gICAgcG9vbC5jbG9zZSgpCi0gICAgcG9vbC5qb2luKCkKLQotICAgIGFzc2VydCByZXN1bHQuZ2V0KCkgaXMgTm9uZQotCi0gICAgZm9yIHdvcmtlciBpbiBwb29sLl9wb29sOgotICAgICAgICBhc3NlcnQgbm90IHdvcmtlci5pc19hbGl2ZSgpCi0KLSAgICBwcmludCgnXHRjbG9zZSgpIHN1Y2NlZWRlZFxuJykKLQotICAgICMKLSAgICAjIENoZWNrIHRlcm1pbmF0ZSgpIG1ldGhvZAotICAgICMKLQotICAgIHByaW50KCdUZXN0aW5nIHRlcm1pbmF0ZSgpOicpCi0KLSAgICBwb29sID0gbXVsdGlwcm9jZXNzaW5nLlBvb2woMikKLSAgICBERUxUQSA9IDAuMQotICAgIGlnbm9yZSA9IHBvb2wuYXBwbHkocG93MywgWzJdKQotICAgIHJlc3VsdHMgPSBbcG9vbC5hcHBseV9hc3luYyh0aW1lLnNsZWVwLCBbREVMVEFdKSBmb3IgaSBpbiByYW5nZSgxMDApXQotICAgIHBvb2wudGVybWluYXRlKCkKLSAgICBwb29sLmpvaW4oKQotCi0gICAgZm9yIHdvcmtlciBpbiBwb29sLl9wb29sOgotICAgICAgICBhc3NlcnQgbm90IHdvcmtlci5pc19hbGl2ZSgpCi0KLSAgICBwcmludCgnXHR0ZXJtaW5hdGUoKSBzdWNjZWVkZWRcbicpCi0KLSAgICAjCi0gICAgIyBDaGVjayBnYXJiYWdlIGNvbGxlY3Rpb24KLSAgICAjCi0KLSAgICBwcmludCgnVGVzdGluZyBnYXJiYWdlIGNvbGxlY3Rpb246JykKLQotICAgIHBvb2wgPSBtdWx0aXByb2Nlc3NpbmcuUG9vbCgyKQotICAgIERFTFRBID0gMC4xCi0gICAgcHJvY2Vzc2VzID0gcG9vbC5fcG9vbAotICAgIGlnbm9yZSA9IHBvb2wuYXBwbHkocG93MywgWzJdKQotICAgIHJlc3VsdHMgPSBbcG9vbC5hcHBseV9hc3luYyh0aW1lLnNsZWVwLCBbREVMVEFdKSBmb3IgaSBpbiByYW5nZSgxMDApXQotCi0gICAgcmVzdWx0cyA9IHBvb2wgPSBOb25lCi0KLSAgICB0aW1lLnNsZWVwKERFTFRBICogMikKLQotICAgIGZvciB3b3JrZXIgaW4gcHJvY2Vzc2VzOgotICAgICAgICBhc3NlcnQgbm90IHdvcmtlci5pc19hbGl2ZSgpCi0KLSAgICBwcmludCgnXHRnYXJiYWdlIGNvbGxlY3Rpb24gc3VjY2VlZGVkXG4nKQorICAgICAgICBwcmludCgnVGVzdGluZyBJTWFwSXRlcmF0b3IubmV4dCgpIHdpdGggdGltZW91dDonLCBlbmQ9JyAnKQorICAgICAgICBpdCA9IHBvb2wuaW1hcChjYWxjdWxhdGVzdGFyLCBUQVNLUykKKyAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoJ1xuXHQlcycgJSBpdC5uZXh0KDAuMDIpKQorICAgICAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGV4Y2VwdCBtdWx0aXByb2Nlc3NpbmcuVGltZW91dEVycm9yOgorICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoJy4nKQorICAgICAgICBwcmludCgpCisgICAgICAgIHByaW50KCkKIAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIG11bHRpcHJvY2Vzc2luZy5mcmVlemVfc3VwcG9ydCgpCi0KLSAgICBhc3NlcnQgbGVuKHN5cy5hcmd2KSBpbiAoMSwgMikKLQotICAgIGlmIGxlbihzeXMuYXJndikgPT0gMSBvciBzeXMuYXJndlsxXSA9PSAncHJvY2Vzc2VzJzoKLSAgICAgICAgcHJpbnQoJyBVc2luZyBwcm9jZXNzZXMgJy5jZW50ZXIoNzksICctJykpCi0gICAgZWxpZiBzeXMuYXJndlsxXSA9PSAndGhyZWFkcyc6Ci0gICAgICAgIHByaW50KCcgVXNpbmcgdGhyZWFkcyAnLmNlbnRlcig3OSwgJy0nKSkKLSAgICAgICAgaW1wb3J0IG11bHRpcHJvY2Vzc2luZy5kdW1teSBhcyBtdWx0aXByb2Nlc3NpbmcKLSAgICBlbHNlOgotICAgICAgICBwcmludCgnVXNhZ2U6XG5cdCVzIFtwcm9jZXNzZXMgfCB0aHJlYWRzXScgJSBzeXMuYXJndlswXSkKLSAgICAgICAgcmFpc2UgU3lzdGVtRXhpdCgyKQotCiAgICAgdGVzdCgpCmRpZmYgLS1naXQgYS9Eb2MvaW5jbHVkZXMvbXBfc3luY2hyb25pemUucHkgYi9Eb2MvaW5jbHVkZXMvbXBfc3luY2hyb25pemUucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxZGJjMzguLjAwMDAwMDAKLS0tIGEvRG9jL2luY2x1ZGVzL21wX3N5bmNocm9uaXplLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjc4ICswLDAgQEAKLSMKLSMgQSB0ZXN0IGZpbGUgZm9yIHRoZSBgbXVsdGlwcm9jZXNzaW5nYCBwYWNrYWdlCi0jCi0jIENvcHlyaWdodCAoYykgMjAwNi0yMDA4LCBSIE91ZGtlcmsKLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLQotaW1wb3J0IHRpbWUKLWltcG9ydCBzeXMKLWltcG9ydCByYW5kb20KLWZyb20gcXVldWUgaW1wb3J0IEVtcHR5Ci0KLWltcG9ydCBtdWx0aXByb2Nlc3NpbmcgICAgICAgICAgICAgICAjIG1heSBnZXQgb3ZlcndyaXR0ZW4KLQotCi0jIyMjIFRFU1RfVkFMVUUKLQotZGVmIHZhbHVlX2Z1bmMocnVubmluZywgbXV0ZXgpOgotICAgIHJhbmRvbS5zZWVkKCkKLSAgICB0aW1lLnNsZWVwKHJhbmRvbS5yYW5kb20oKSo0KQotCi0gICAgbXV0ZXguYWNxdWlyZSgpCi0gICAgcHJpbnQoJ1xuXHRcdFx0JyArIHN0cihtdWx0aXByb2Nlc3NpbmcuY3VycmVudF9wcm9jZXNzKCkpICsgJyBoYXMgZmluaXNoZWQnKQotICAgIHJ1bm5pbmcudmFsdWUgLT0gMQotICAgIG11dGV4LnJlbGVhc2UoKQotCi1kZWYgdGVzdF92YWx1ZSgpOgotICAgIFRBU0tTID0gMTAKLSAgICBydW5uaW5nID0gbXVsdGlwcm9jZXNzaW5nLlZhbHVlKCdpJywgVEFTS1MpCi0gICAgbXV0ZXggPSBtdWx0aXByb2Nlc3NpbmcuTG9jaygpCi0KLSAgICBmb3IgaSBpbiByYW5nZShUQVNLUyk6Ci0gICAgICAgIHAgPSBtdWx0aXByb2Nlc3NpbmcuUHJvY2Vzcyh0YXJnZXQ9dmFsdWVfZnVuYywgYXJncz0ocnVubmluZywgbXV0ZXgpKQotICAgICAgICBwLnN0YXJ0KCkKLQotICAgIHdoaWxlIHJ1bm5pbmcudmFsdWUgPiAwOgotICAgICAgICB0aW1lLnNsZWVwKDAuMDgpCi0gICAgICAgIG11dGV4LmFjcXVpcmUoKQotICAgICAgICBwcmludChydW5uaW5nLnZhbHVlLCBlbmQ9JyAnKQotICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKLSAgICAgICAgbXV0ZXgucmVsZWFzZSgpCi0KLSAgICBwcmludCgpCi0gICAgcHJpbnQoJ05vIG1vcmUgcnVubmluZyBwcm9jZXNzZXMnKQotCi0KLSMjIyMgVEVTVF9RVUVVRQotCi1kZWYgcXVldWVfZnVuYyhxdWV1ZSk6Ci0gICAgZm9yIGkgaW4gcmFuZ2UoMzApOgotICAgICAgICB0aW1lLnNsZWVwKDAuNSAqIHJhbmRvbS5yYW5kb20oKSkKLSAgICAgICAgcXVldWUucHV0KGkqaSkKLSAgICBxdWV1ZS5wdXQoJ1NUT1AnKQotCi1kZWYgdGVzdF9xdWV1ZSgpOgotICAgIHEgPSBtdWx0aXByb2Nlc3NpbmcuUXVldWUoKQotCi0gICAgcCA9IG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzKHRhcmdldD1xdWV1ZV9mdW5jLCBhcmdzPShxLCkpCi0gICAgcC5zdGFydCgpCi0KLSAgICBvID0gTm9uZQotICAgIHdoaWxlIG8gIT0gJ1NUT1AnOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBvID0gcS5nZXQodGltZW91dD0wLjMpCi0gICAgICAgICAgICBwcmludChvLCBlbmQ9JyAnKQotICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCi0gICAgICAgIGV4Y2VwdCBFbXB0eToKLSAgICAgICAgICAgIHByaW50KCdUSU1FT1VUJykKLQotICAgIHByaW50KCkKLQotCi0jIyMjIFRFU1RfQ09ORElUSU9OCi0KLWRlZiBjb25kaXRpb25fZnVuYyhjb25kKToKLSAgICBjb25kLmFjcXVpcmUoKQotICAgIHByaW50KCdcdCcgKyBzdHIoY29uZCkpCi0gICAgdGltZS5zbGVlcCgyKQotICAgIHByaW50KCdcdGNoaWxkIGlzIG5vdGlmeWluZycpCi0gICAgcHJpbnQoJ1x0JyArIHN0cihjb25kKSkKLSAgICBjb25kLm5vdGlmeSgpCi0gICAgY29uZC5yZWxlYXNlKCkKLQotZGVmIHRlc3RfY29uZGl0aW9uKCk6Ci0gICAgY29uZCA9IG11bHRpcHJvY2Vzc2luZy5Db25kaXRpb24oKQotCi0gICAgcCA9IG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzKHRhcmdldD1jb25kaXRpb25fZnVuYywgYXJncz0oY29uZCwpKQotICAgIHByaW50KGNvbmQpCi0KLSAgICBjb25kLmFjcXVpcmUoKQotICAgIHByaW50KGNvbmQpCi0gICAgY29uZC5hY3F1aXJlKCkKLSAgICBwcmludChjb25kKQotCi0gICAgcC5zdGFydCgpCi0KLSAgICBwcmludCgnbWFpbiBpcyB3YWl0aW5nJykKLSAgICBjb25kLndhaXQoKQotICAgIHByaW50KCdtYWluIGhhcyB3b2tlbiB1cCcpCi0KLSAgICBwcmludChjb25kKQotICAgIGNvbmQucmVsZWFzZSgpCi0gICAgcHJpbnQoY29uZCkKLSAgICBjb25kLnJlbGVhc2UoKQotCi0gICAgcC5qb2luKCkKLSAgICBwcmludChjb25kKQotCi0KLSMjIyMgVEVTVF9TRU1BUEhPUkUKLQotZGVmIHNlbWFwaG9yZV9mdW5jKHNlbWEsIG11dGV4LCBydW5uaW5nKToKLSAgICBzZW1hLmFjcXVpcmUoKQotCi0gICAgbXV0ZXguYWNxdWlyZSgpCi0gICAgcnVubmluZy52YWx1ZSArPSAxCi0gICAgcHJpbnQocnVubmluZy52YWx1ZSwgJ3Rhc2tzIGFyZSBydW5uaW5nJykKLSAgICBtdXRleC5yZWxlYXNlKCkKLQotICAgIHJhbmRvbS5zZWVkKCkKLSAgICB0aW1lLnNsZWVwKHJhbmRvbS5yYW5kb20oKSoyKQotCi0gICAgbXV0ZXguYWNxdWlyZSgpCi0gICAgcnVubmluZy52YWx1ZSAtPSAxCi0gICAgcHJpbnQoJyVzIGhhcyBmaW5pc2hlZCcgJSBtdWx0aXByb2Nlc3NpbmcuY3VycmVudF9wcm9jZXNzKCkpCi0gICAgbXV0ZXgucmVsZWFzZSgpCi0KLSAgICBzZW1hLnJlbGVhc2UoKQotCi1kZWYgdGVzdF9zZW1hcGhvcmUoKToKLSAgICBzZW1hID0gbXVsdGlwcm9jZXNzaW5nLlNlbWFwaG9yZSgzKQotICAgIG11dGV4ID0gbXVsdGlwcm9jZXNzaW5nLlJMb2NrKCkKLSAgICBydW5uaW5nID0gbXVsdGlwcm9jZXNzaW5nLlZhbHVlKCdpJywgMCkKLQotICAgIHByb2Nlc3NlcyA9IFsKLSAgICAgICAgbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3ModGFyZ2V0PXNlbWFwaG9yZV9mdW5jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzPShzZW1hLCBtdXRleCwgcnVubmluZykpCi0gICAgICAgIGZvciBpIGluIHJhbmdlKDEwKQotICAgICAgICBdCi0KLSAgICBmb3IgcCBpbiBwcm9jZXNzZXM6Ci0gICAgICAgIHAuc3RhcnQoKQotCi0gICAgZm9yIHAgaW4gcHJvY2Vzc2VzOgotICAgICAgICBwLmpvaW4oKQotCi0KLSMjIyMgVEVTVF9KT0lOX1RJTUVPVVQKLQotZGVmIGpvaW5fdGltZW91dF9mdW5jKCk6Ci0gICAgcHJpbnQoJ1x0Y2hpbGQgc2xlZXBpbmcnKQotICAgIHRpbWUuc2xlZXAoNS41KQotICAgIHByaW50KCdcblx0Y2hpbGQgdGVybWluYXRpbmcnKQotCi1kZWYgdGVzdF9qb2luX3RpbWVvdXQoKToKLSAgICBwID0gbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3ModGFyZ2V0PWpvaW5fdGltZW91dF9mdW5jKQotICAgIHAuc3RhcnQoKQotCi0gICAgcHJpbnQoJ3dhaXRpbmcgZm9yIHByb2Nlc3MgdG8gZmluaXNoJykKLQotICAgIHdoaWxlIDE6Ci0gICAgICAgIHAuam9pbih0aW1lb3V0PTEpCi0gICAgICAgIGlmIG5vdCBwLmlzX2FsaXZlKCk6Ci0gICAgICAgICAgICBicmVhawotICAgICAgICBwcmludCgnLicsIGVuZD0nICcpCi0gICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQotCi0KLSMjIyMgVEVTVF9FVkVOVAotCi1kZWYgZXZlbnRfZnVuYyhldmVudCk6Ci0gICAgcHJpbnQoJ1x0JXIgaXMgd2FpdGluZycgJSBtdWx0aXByb2Nlc3NpbmcuY3VycmVudF9wcm9jZXNzKCkpCi0gICAgZXZlbnQud2FpdCgpCi0gICAgcHJpbnQoJ1x0JXIgaGFzIHdva2VuIHVwJyAlIG11bHRpcHJvY2Vzc2luZy5jdXJyZW50X3Byb2Nlc3MoKSkKLQotZGVmIHRlc3RfZXZlbnQoKToKLSAgICBldmVudCA9IG11bHRpcHJvY2Vzc2luZy5FdmVudCgpCi0KLSAgICBwcm9jZXNzZXMgPSBbbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3ModGFyZ2V0PWV2ZW50X2Z1bmMsIGFyZ3M9KGV2ZW50LCkpCi0gICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDUpXQotCi0gICAgZm9yIHAgaW4gcHJvY2Vzc2VzOgotICAgICAgICBwLnN0YXJ0KCkKLQotICAgIHByaW50KCdtYWluIGlzIHNsZWVwaW5nJykKLSAgICB0aW1lLnNsZWVwKDIpCi0KLSAgICBwcmludCgnbWFpbiBpcyBzZXR0aW5nIGV2ZW50JykKLSAgICBldmVudC5zZXQoKQotCi0gICAgZm9yIHAgaW4gcHJvY2Vzc2VzOgotICAgICAgICBwLmpvaW4oKQotCi0KLSMjIyMgVEVTVF9TSEFSRURWQUxVRVMKLQotZGVmIHNoYXJlZHZhbHVlc19mdW5jKHZhbHVlcywgYXJyYXlzLCBzaGFyZWRfdmFsdWVzLCBzaGFyZWRfYXJyYXlzKToKLSAgICBmb3IgaSBpbiByYW5nZShsZW4odmFsdWVzKSk6Ci0gICAgICAgIHYgPSB2YWx1ZXNbaV1bMV0KLSAgICAgICAgc3YgPSBzaGFyZWRfdmFsdWVzW2ldLnZhbHVlCi0gICAgICAgIGFzc2VydCB2ID09IHN2Ci0KLSAgICBmb3IgaSBpbiByYW5nZShsZW4odmFsdWVzKSk6Ci0gICAgICAgIGEgPSBhcnJheXNbaV1bMV0KLSAgICAgICAgc2EgPSBsaXN0KHNoYXJlZF9hcnJheXNbaV1bOl0pCi0gICAgICAgIGFzc2VydCBhID09IHNhCi0KLSAgICBwcmludCgnVGVzdHMgcGFzc2VkJykKLQotZGVmIHRlc3Rfc2hhcmVkdmFsdWVzKCk6Ci0gICAgdmFsdWVzID0gWwotICAgICAgICAoJ2knLCAxMCksCi0gICAgICAgICgnaCcsIC0yKSwKLSAgICAgICAgKCdkJywgMS4yNSkKLSAgICAgICAgXQotICAgIGFycmF5cyA9IFsKLSAgICAgICAgKCdpJywgbGlzdChyYW5nZSgxMDApKSksCi0gICAgICAgICgnZCcsIFswLjI1ICogaSBmb3IgaSBpbiByYW5nZSgxMDApXSksCi0gICAgICAgICgnSCcsIGxpc3QocmFuZ2UoMTAwMCkpKQotICAgICAgICBdCi0KLSAgICBzaGFyZWRfdmFsdWVzID0gW211bHRpcHJvY2Vzc2luZy5WYWx1ZShpZCwgdikgZm9yIGlkLCB2IGluIHZhbHVlc10KLSAgICBzaGFyZWRfYXJyYXlzID0gW211bHRpcHJvY2Vzc2luZy5BcnJheShpZCwgYSkgZm9yIGlkLCBhIGluIGFycmF5c10KLQotICAgIHAgPSBtdWx0aXByb2Nlc3NpbmcuUHJvY2VzcygKLSAgICAgICAgdGFyZ2V0PXNoYXJlZHZhbHVlc19mdW5jLAotICAgICAgICBhcmdzPSh2YWx1ZXMsIGFycmF5cywgc2hhcmVkX3ZhbHVlcywgc2hhcmVkX2FycmF5cykKLSAgICAgICAgKQotICAgIHAuc3RhcnQoKQotICAgIHAuam9pbigpCi0KLSAgICBhc3NlcnQgcC5leGl0Y29kZSA9PSAwCi0KLQotIyMjIwotCi1kZWYgdGVzdChuYW1lc3BhY2U9bXVsdGlwcm9jZXNzaW5nKToKLSAgICBnbG9iYWwgbXVsdGlwcm9jZXNzaW5nCi0KLSAgICBtdWx0aXByb2Nlc3NpbmcgPSBuYW1lc3BhY2UKLQotICAgIGZvciBmdW5jIGluIFt0ZXN0X3ZhbHVlLCB0ZXN0X3F1ZXVlLCB0ZXN0X2NvbmRpdGlvbiwKLSAgICAgICAgICAgICAgICAgdGVzdF9zZW1hcGhvcmUsIHRlc3Rfam9pbl90aW1lb3V0LCB0ZXN0X2V2ZW50LAotICAgICAgICAgICAgICAgICB0ZXN0X3NoYXJlZHZhbHVlc106Ci0KLSAgICAgICAgcHJpbnQoJ1xuXHQjIyMjIyMjIyAlc1xuJyAlIGZ1bmMuX19uYW1lX18pCi0gICAgICAgIGZ1bmMoKQotCi0gICAgaWdub3JlID0gbXVsdGlwcm9jZXNzaW5nLmFjdGl2ZV9jaGlsZHJlbigpICAgICAgIyBjbGVhbnVwIGFueSBvbGQgcHJvY2Vzc2VzCi0gICAgaWYgaGFzYXR0cihtdWx0aXByb2Nlc3NpbmcsICdfZGVidWdfaW5mbycpOgotICAgICAgICBpbmZvID0gbXVsdGlwcm9jZXNzaW5nLl9kZWJ1Z19pbmZvKCkKLSAgICAgICAgaWYgaW5mbzoKLSAgICAgICAgICAgIHByaW50KGluZm8pCi0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCd0aGVyZSBzaG91bGQgYmUgbm8gcG9zaXRpdmUgcmVmY291bnRzIGxlZnQnKQotCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgbXVsdGlwcm9jZXNzaW5nLmZyZWV6ZV9zdXBwb3J0KCkKLQotICAgIGFzc2VydCBsZW4oc3lzLmFyZ3YpIGluICgxLCAyKQotCi0gICAgaWYgbGVuKHN5cy5hcmd2KSA9PSAxIG9yIHN5cy5hcmd2WzFdID09ICdwcm9jZXNzZXMnOgotICAgICAgICBwcmludCgnIFVzaW5nIHByb2Nlc3NlcyAnLmNlbnRlcig3OSwgJy0nKSkKLSAgICAgICAgbmFtZXNwYWNlID0gbXVsdGlwcm9jZXNzaW5nCi0gICAgZWxpZiBzeXMuYXJndlsxXSA9PSAnbWFuYWdlcic6Ci0gICAgICAgIHByaW50KCcgVXNpbmcgcHJvY2Vzc2VzIGFuZCBhIG1hbmFnZXIgJy5jZW50ZXIoNzksICctJykpCi0gICAgICAgIG5hbWVzcGFjZSA9IG11bHRpcHJvY2Vzc2luZy5NYW5hZ2VyKCkKLSAgICAgICAgbmFtZXNwYWNlLlByb2Nlc3MgPSBtdWx0aXByb2Nlc3NpbmcuUHJvY2VzcwotICAgICAgICBuYW1lc3BhY2UuY3VycmVudF9wcm9jZXNzID0gbXVsdGlwcm9jZXNzaW5nLmN1cnJlbnRfcHJvY2VzcwotICAgICAgICBuYW1lc3BhY2UuYWN0aXZlX2NoaWxkcmVuID0gbXVsdGlwcm9jZXNzaW5nLmFjdGl2ZV9jaGlsZHJlbgotICAgIGVsaWYgc3lzLmFyZ3ZbMV0gPT0gJ3RocmVhZHMnOgotICAgICAgICBwcmludCgnIFVzaW5nIHRocmVhZHMgJy5jZW50ZXIoNzksICctJykpCi0gICAgICAgIGltcG9ydCBtdWx0aXByb2Nlc3NpbmcuZHVtbXkgYXMgbmFtZXNwYWNlCi0gICAgZWxzZToKLSAgICAgICAgcHJpbnQoJ1VzYWdlOlxuXHQlcyBbcHJvY2Vzc2VzIHwgbWFuYWdlciB8IHRocmVhZHNdJyAlIHN5cy5hcmd2WzBdKQotICAgICAgICByYWlzZSBTeXN0ZW1FeGl0KDIpCi0KLSAgICB0ZXN0KG5hbWVzcGFjZSkKZGlmZiAtLWdpdCBhL0RvYy9pbmNsdWRlcy9tcF93ZWJzZXJ2ZXIucHkgYi9Eb2MvaW5jbHVkZXMvbXBfd2Vic2VydmVyLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NTEwMjRkLi4wMDAwMDAwCi0tLSBhL0RvYy9pbmNsdWRlcy9tcF93ZWJzZXJ2ZXIucHkKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi0jCi0jIEV4YW1wbGUgd2hlcmUgYSBwb29sIG9mIGh0dHAgc2VydmVycyBzaGFyZSBhIHNpbmdsZSBsaXN0ZW5pbmcgc29ja2V0Ci0jCi0jIE9uIFdpbmRvd3MgdGhpcyBtb2R1bGUgZGVwZW5kcyBvbiB0aGUgYWJpbGl0eSB0byBwaWNrbGUgYSBzb2NrZXQKLSMgb2JqZWN0IHNvIHRoYXQgdGhlIHdvcmtlciBwcm9jZXNzZXMgY2FuIGluaGVyaXQgYSBjb3B5IG9mIHRoZSBzZXJ2ZXIKLSMgb2JqZWN0LiAgKFdlIGltcG9ydCBgbXVsdGlwcm9jZXNzaW5nLnJlZHVjdGlvbmAgdG8gZW5hYmxlIHRoaXMgcGlja2xpbmcuKQotIwotIyBOb3Qgc3VyZSBpZiB3ZSBzaG91bGQgc3luY2hyb25pemUgYWNjZXNzIHRvIGBzb2NrZXQuYWNjZXB0KClgIG1ldGhvZCBieQotIyB1c2luZyBhIHByb2Nlc3Mtc2hhcmVkIGxvY2sgLS0gZG9lcyBub3Qgc2VlbSB0byBiZSBuZWNlc3NhcnkuCi0jCi0jIENvcHlyaWdodCAoYykgMjAwNi0yMDA4LCBSIE91ZGtlcmsKLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLQotaW1wb3J0IG9zCi1pbXBvcnQgc3lzCi0KLWZyb20gbXVsdGlwcm9jZXNzaW5nIGltcG9ydCBQcm9jZXNzLCBjdXJyZW50X3Byb2Nlc3MsIGZyZWV6ZV9zdXBwb3J0Ci1mcm9tIGh0dHAuc2VydmVyIGltcG9ydCBIVFRQU2VydmVyCi1mcm9tIGh0dHAuc2VydmVyIGltcG9ydCBTaW1wbGVIVFRQUmVxdWVzdEhhbmRsZXIKLQotaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6Ci0gICAgaW1wb3J0IG11bHRpcHJvY2Vzc2luZy5yZWR1Y3Rpb24gICAgIyBtYWtlIHNvY2tldHMgcGlja2FibGUvaW5oZXJpdGFibGUKLQotCi1kZWYgbm90ZShmb3JtYXQsICphcmdzKToKLSAgICBzeXMuc3RkZXJyLndyaXRlKCdbJXNdXHQlc1xuJyAlIChjdXJyZW50X3Byb2Nlc3MoKS5uYW1lLCBmb3JtYXQgJSBhcmdzKSkKLQotCi1jbGFzcyBSZXF1ZXN0SGFuZGxlcihTaW1wbGVIVFRQUmVxdWVzdEhhbmRsZXIpOgotICAgICMgd2Ugb3ZlcnJpZGUgbG9nX21lc3NhZ2UoKSB0byBzaG93IHdoaWNoIHByb2Nlc3MgaXMgaGFuZGxpbmcgdGhlIHJlcXVlc3QKLSAgICBkZWYgbG9nX21lc3NhZ2Uoc2VsZiwgZm9ybWF0LCAqYXJncyk6Ci0gICAgICAgIG5vdGUoZm9ybWF0LCAqYXJncykKLQotZGVmIHNlcnZlX2ZvcmV2ZXIoc2VydmVyKToKLSAgICBub3RlKCdzdGFydGluZyBzZXJ2ZXInKQotICAgIHRyeToKLSAgICAgICAgc2VydmVyLnNlcnZlX2ZvcmV2ZXIoKQotICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKLSAgICAgICAgcGFzcwotCi0KLWRlZiBydW5wb29sKGFkZHJlc3MsIG51bWJlcl9vZl9wcm9jZXNzZXMpOgotICAgICMgY3JlYXRlIGEgc2luZ2xlIHNlcnZlciBvYmplY3QgLS0gY2hpbGRyZW4gd2lsbCBlYWNoIGluaGVyaXQgYSBjb3B5Ci0gICAgc2VydmVyID0gSFRUUFNlcnZlcihhZGRyZXNzLCBSZXF1ZXN0SGFuZGxlcikKLQotICAgICMgY3JlYXRlIGNoaWxkIHByb2Nlc3NlcyB0byBhY3QgYXMgd29ya2VycwotICAgIGZvciBpIGluIHJhbmdlKG51bWJlcl9vZl9wcm9jZXNzZXMgLSAxKToKLSAgICAgICAgUHJvY2Vzcyh0YXJnZXQ9c2VydmVfZm9yZXZlciwgYXJncz0oc2VydmVyLCkpLnN0YXJ0KCkKLQotICAgICMgbWFpbiBwcm9jZXNzIGFsc28gYWN0cyBhcyBhIHdvcmtlcgotICAgIHNlcnZlX2ZvcmV2ZXIoc2VydmVyKQotCi0KLWRlZiB0ZXN0KCk6Ci0gICAgRElSID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICcuLicpCi0gICAgQUREUkVTUyA9ICgnbG9jYWxob3N0JywgODAwMCkKLSAgICBOVU1CRVJfT0ZfUFJPQ0VTU0VTID0gNAotCi0gICAgcHJpbnQoJ1NlcnZpbmcgYXQgaHR0cDovLyVzOiVkIHVzaW5nICVkIHdvcmtlciBwcm9jZXNzZXMnICUgXAotICAgICAgICAgIChBRERSRVNTWzBdLCBBRERSRVNTWzFdLCBOVU1CRVJfT0ZfUFJPQ0VTU0VTKSkKLSAgICBwcmludCgnVG8gZXhpdCBwcmVzcyBDdHJsLScgKyBbJ0MnLCAnQnJlYWsnXVtzeXMucGxhdGZvcm09PSd3aW4zMiddKQotCi0gICAgb3MuY2hkaXIoRElSKQotICAgIHJ1bnBvb2woQUREUkVTUywgTlVNQkVSX09GX1BST0NFU1NFUykKLQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIGZyZWV6ZV9zdXBwb3J0KCkKLSAgICB0ZXN0KCkKZGlmZiAtLWdpdCBhL0RvYy9pbmNsdWRlcy9tcF93b3JrZXJzLnB5IGIvRG9jL2luY2x1ZGVzL21wX3dvcmtlcnMucHkKaW5kZXggZTY2ZDk3Yi4uM2I5MjI2OSAxMDA2NDQKLS0tIGEvRG9jL2luY2x1ZGVzL21wX3dvcmtlcnMucHkKKysrIGIvRG9jL2luY2x1ZGVzL21wX3dvcmtlcnMucHkKQEAgLTEsMTYgKzEsMyBAQAotIwotIyBTaW1wbGUgZXhhbXBsZSB3aGljaCB1c2VzIGEgcG9vbCBvZiB3b3JrZXJzIHRvIGNhcnJ5IG91dCBzb21lIHRhc2tzLgotIwotIyBOb3RpY2UgdGhhdCB0aGUgcmVzdWx0cyB3aWxsIHByb2JhYmx5IG5vdCBjb21lIG91dCBvZiB0aGUgb3V0cHV0Ci0jIHF1ZXVlIGluIHRoZSBzYW1lIGluIHRoZSBzYW1lIG9yZGVyIGFzIHRoZSBjb3JyZXNwb25kaW5nIHRhc2tzIHdlcmUKLSMgcHV0IG9uIHRoZSBpbnB1dCBxdWV1ZS4gIElmIGl0IGlzIGltcG9ydGFudCB0byBnZXQgdGhlIHJlc3VsdHMgYmFjawotIyBpbiB0aGUgb3JpZ2luYWwgb3JkZXIgdGhlbiBjb25zaWRlciB1c2luZyBgUG9vbC5tYXAoKWAgb3IKLSMgYFBvb2wuaW1hcCgpYCAod2hpY2ggd2lsbCBzYXZlIG9uIHRoZSBhbW91bnQgb2YgY29kZSBuZWVkZWQgYW55d2F5KS4KLSMKLSMgQ29weXJpZ2h0IChjKSAyMDA2LTIwMDgsIFIgT3Vka2VyawotIyBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotCiBpbXBvcnQgdGltZQogaW1wb3J0IHJhbmRvbQogCmRpZmYgLS1naXQgYS9Eb2MvaW5jbHVkZXMvdHlwZXN0cnVjdC5oIGIvRG9jL2luY2x1ZGVzL3R5cGVzdHJ1Y3QuaAppbmRleCAzMjY0N2MwLi43MjY1MDA5IDEwMDY0NAotLS0gYS9Eb2MvaW5jbHVkZXMvdHlwZXN0cnVjdC5oCisrKyBiL0RvYy9pbmNsdWRlcy90eXBlc3RydWN0LmgKQEAgLTEsNyArMSw3IEBACiB0eXBlZGVmIHN0cnVjdCBfdHlwZW9iamVjdCB7CiAgICAgUHlPYmplY3RfVkFSX0hFQUQKLSAgICBjaGFyICp0cF9uYW1lOyAvKiBGb3IgcHJpbnRpbmcsIGluIGZvcm1hdCAiPG1vZHVsZT4uPG5hbWU+IiAqLwotICAgIGludCB0cF9iYXNpY3NpemUsIHRwX2l0ZW1zaXplOyAvKiBGb3IgYWxsb2NhdGlvbiAqLworICAgIGNvbnN0IGNoYXIgKnRwX25hbWU7IC8qIEZvciBwcmludGluZywgaW4gZm9ybWF0ICI8bW9kdWxlPi48bmFtZT4iICovCisgICAgUHlfc3NpemVfdCB0cF9iYXNpY3NpemUsIHRwX2l0ZW1zaXplOyAvKiBGb3IgYWxsb2NhdGlvbiAqLwogCiAgICAgLyogTWV0aG9kcyB0byBpbXBsZW1lbnQgc3RhbmRhcmQgb3BlcmF0aW9ucyAqLwogCkBAIC05LDcgKzksNyBAQAogICAgIHByaW50ZnVuYyB0cF9wcmludDsKICAgICBnZXRhdHRyZnVuYyB0cF9nZXRhdHRyOwogICAgIHNldGF0dHJmdW5jIHRwX3NldGF0dHI7Ci0gICAgdm9pZCAqdHBfcmVzZXJ2ZWQ7CisgICAgdm9pZCAqdHBfcmVzZXJ2ZWQ7IC8qIGZvcm1lcmx5IGtub3duIGFzIHRwX2NvbXBhcmUgKi8KICAgICByZXByZnVuYyB0cF9yZXByOwogCiAgICAgLyogTWV0aG9kIHN1aXRlcyBmb3Igc3RhbmRhcmQgY2xhc3NlcyAqLwpAQCAtMzAsOSArMzAsOSBAQAogICAgIFB5QnVmZmVyUHJvY3MgKnRwX2FzX2J1ZmZlcjsKIAogICAgIC8qIEZsYWdzIHRvIGRlZmluZSBwcmVzZW5jZSBvZiBvcHRpb25hbC9leHBhbmRlZCBmZWF0dXJlcyAqLwotICAgIGxvbmcgdHBfZmxhZ3M7CisgICAgdW5zaWduZWQgbG9uZyB0cF9mbGFnczsKIAotICAgIGNoYXIgKnRwX2RvYzsgLyogRG9jdW1lbnRhdGlvbiBzdHJpbmcgKi8KKyAgICBjb25zdCBjaGFyICp0cF9kb2M7IC8qIERvY3VtZW50YXRpb24gc3RyaW5nICovCiAKICAgICAvKiBjYWxsIGZ1bmN0aW9uIGZvciBhbGwgYWNjZXNzaWJsZSBvYmplY3RzICovCiAgICAgdHJhdmVyc2Vwcm9jIHRwX3RyYXZlcnNlOwpAQCAtNDQsNyArNDQsNyBAQAogICAgIHJpY2hjbXBmdW5jIHRwX3JpY2hjb21wYXJlOwogCiAgICAgLyogd2VhayByZWZlcmVuY2UgZW5hYmxlciAqLwotICAgIGxvbmcgdHBfd2Vha2xpc3RvZmZzZXQ7CisgICAgUHlfc3NpemVfdCB0cF93ZWFrbGlzdG9mZnNldDsKIAogICAgIC8qIEl0ZXJhdG9ycyAqLwogICAgIGdldGl0ZXJmdW5jIHRwX2l0ZXI7CkBAIC01OCw3ICs1OCw3IEBACiAgICAgUHlPYmplY3QgKnRwX2RpY3Q7CiAgICAgZGVzY3JnZXRmdW5jIHRwX2Rlc2NyX2dldDsKICAgICBkZXNjcnNldGZ1bmMgdHBfZGVzY3Jfc2V0OwotICAgIGxvbmcgdHBfZGljdG9mZnNldDsKKyAgICBQeV9zc2l6ZV90IHRwX2RpY3RvZmZzZXQ7CiAgICAgaW5pdHByb2MgdHBfaW5pdDsKICAgICBhbGxvY2Z1bmMgdHBfYWxsb2M7CiAgICAgbmV3ZnVuYyB0cF9uZXc7CkBAIC02OSw1ICs2OSwxMSBAQAogICAgIFB5T2JqZWN0ICp0cF9jYWNoZTsKICAgICBQeU9iamVjdCAqdHBfc3ViY2xhc3NlczsKICAgICBQeU9iamVjdCAqdHBfd2Vha2xpc3Q7CisgICAgZGVzdHJ1Y3RvciB0cF9kZWw7CisKKyAgICAvKiBUeXBlIGF0dHJpYnV0ZSBjYWNoZSB2ZXJzaW9uIHRhZy4gQWRkZWQgaW4gdmVyc2lvbiAyLjYgKi8KKyAgICB1bnNpZ25lZCBpbnQgdHBfdmVyc2lvbl90YWc7CisKKyAgICBkZXN0cnVjdG9yIHRwX2ZpbmFsaXplOwogCiB9IFB5VHlwZU9iamVjdDsKZGlmZiAtLWdpdCBhL0RvYy9pbnN0YWxsL2luZGV4LnJzdCBiL0RvYy9pbnN0YWxsL2luZGV4LnJzdAppbmRleCAwYzlhOWYyLi5lNjNiNmNkIDEwMDY0NAotLS0gYS9Eb2MvaW5zdGFsbC9pbmRleC5yc3QKKysrIGIvRG9jL2luc3RhbGwvaW5kZXgucnN0CkBAIC0yLDkgKzIsOSBAQAogCiAuLiBfaW5zdGFsbC1pbmRleDoKIAotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgSW5zdGFsbGluZyBQeXRob24gTW9kdWxlcwotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgIEluc3RhbGxpbmcgUHl0aG9uIE1vZHVsZXMgKExlZ2FjeSB2ZXJzaW9uKQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogOkF1dGhvcjogR3JlZyBXYXJkCiAKQEAgLTI4LDE2ICsyOCwxNiBAQAogCiAuLiBub3RlOjoKIAotICAgVGhpcyBndWlkZSBvbmx5IGNvdmVycyB0aGUgYmFzaWMgdG9vbHMgZm9yIGluc3RhbGxpbmcgZXh0ZW5zaW9ucyB0aGF0IGFyZQotICAgcHJvdmlkZWQgYXMgcGFydCBvZiB0aGlzIHZlcnNpb24gb2YgUHl0aG9uLiBUaGlyZCBwYXJ0eSB0b29scyBvZmZlciBlYXNpZXIKLSAgIHRvIHVzZSBhbmQgbW9yZSBzZWN1cmUgYWx0ZXJuYXRpdmVzLiBSZWZlciB0byB0aGUKLSAgIGBxdWljayByZWNvbW1lbmRhdGlvbnMgc2VjdGlvbgotICAgPGh0dHBzOi8vcHl0aG9uLXBhY2thZ2luZy11c2VyLWd1aWRlLnJlYWR0aGVkb2NzLm9yZy9lbi9sYXRlc3QvY3VycmVudC5odG1sPmBfXworICAgVGhpcyBndWlkZSBvbmx5IGNvdmVycyB0aGUgYmFzaWMgdG9vbHMgZm9yIGJ1aWxkaW5nIGFuZCBkaXN0cmlidXRpbmcKKyAgIGV4dGVuc2lvbnMgdGhhdCBhcmUgcHJvdmlkZWQgYXMgcGFydCBvZiB0aGlzIHZlcnNpb24gb2YgUHl0aG9uLiBUaGlyZCBwYXJ0eQorICAgdG9vbHMgb2ZmZXIgZWFzaWVyIHRvIHVzZSBhbmQgbW9yZSBzZWN1cmUgYWx0ZXJuYXRpdmVzLiBSZWZlciB0byB0aGUgYHF1aWNrCisgICByZWNvbW1lbmRhdGlvbnMgc2VjdGlvbiA8aHR0cHM6Ly9wYWNrYWdpbmcucHl0aG9uLm9yZy9lbi9sYXRlc3QvY3VycmVudC8+YF9fCiAgICBpbiB0aGUgUHl0aG9uIFBhY2thZ2luZyBVc2VyIEd1aWRlIGZvciBtb3JlIGluZm9ybWF0aW9uLgogCiAKIC4uIF9pbnN0LWludHJvOgogCisKIEludHJvZHVjdGlvbgogPT09PT09PT09PT09CiAKQEAgLTE0OCw3ICsxNDgsNyBAQAogCiBPbiBXaW5kb3dzLCB5b3UnZCBwcm9iYWJseSBkb3dubG9hZCA6ZmlsZTpgZm9vLTEuMC56aXBgLiAgSWYgeW91IGRvd25sb2FkZWQgdGhlCiBhcmNoaXZlIGZpbGUgdG8gOmZpbGU6YEM6XFxUZW1wYCwgdGhlbiBpdCB3b3VsZCB1bnBhY2sgaW50bwotOmZpbGU6YEM6XFxUZW1wXFxmb28tMS4wYDsgeW91IGNhbiB1c2UgZWl0aGVyIGEgYXJjaGl2ZSBtYW5pcHVsYXRvciB3aXRoIGEKKzpmaWxlOmBDOlxcVGVtcFxcZm9vLTEuMGA7IHlvdSBjYW4gdXNlIGVpdGhlciBhbiBhcmNoaXZlIG1hbmlwdWxhdG9yIHdpdGggYQogZ3JhcGhpY2FsIHVzZXIgaW50ZXJmYWNlIChzdWNoIGFzIFdpblppcCkgb3IgYSBjb21tYW5kLWxpbmUgdG9vbCAoc3VjaCBhcwogOnByb2dyYW06YHVuemlwYCBvciA6cHJvZ3JhbTpgcGt1bnppcGApIHRvIHVucGFjayB0aGUgYXJjaGl2ZS4gIFRoZW4sIG9wZW4gYQogY29tbWFuZCBwcm9tcHQgd2luZG93IGFuZCBydW46OgpAQCAtMTAxMiw3ICsxMDEyLDcgQEAKIAogLi4gc2VlYWxzbzo6CiAKLSAgIGBDKytCdWlsZGVyIENvbXBpbGVyIDxodHRwOi8vd3d3LmNvZGVnZWFyLmNvbS9kb3dubG9hZHMvZnJlZS9jcHBidWlsZGVyPmBfCisgICBgQysrQnVpbGRlciBDb21waWxlciA8aHR0cDovL3d3dy5lbWJhcmNhZGVyby5jb20vZG93bmxvYWRzPmBfCiAgICAgICBJbmZvcm1hdGlvbiBhYm91dCB0aGUgZnJlZSBDKysgY29tcGlsZXIgZnJvbSBCb3JsYW5kLCBpbmNsdWRpbmcgbGlua3MgdG8gdGhlCiAgICAgICBkb3dubG9hZCBwYWdlcy4KIApAQCAtMTA4NCw3ICsxMDg0LDcgQEAKIAogLi4gc2VlYWxzbzo6CiAKLSAgIGBCdWlsZGluZyBQeXRob24gbW9kdWxlcyBvbiBNUyBXaW5kb3dzIHBsYXRmb3JtIHdpdGggTWluR1cgPGh0dHA6Ly93d3cuem9wZS5vcmcvTWVtYmVycy9hbHMvdGlwcy93aW4zMl9taW5nd19tb2R1bGVzPmBfCisgICBgQnVpbGRpbmcgUHl0aG9uIG1vZHVsZXMgb24gTVMgV2luZG93cyBwbGF0Zm9ybSB3aXRoIE1pbkdXIDxodHRwOi8vb2xkLnpvcGUub3JnL01lbWJlcnMvYWxzL3RpcHMvd2luMzJfbWluZ3dfbW9kdWxlcz5gXwogICAgICAgSW5mb3JtYXRpb24gYWJvdXQgYnVpbGRpbmcgdGhlIHJlcXVpcmVkIGxpYnJhcmllcyBmb3IgdGhlIE1pbkdXIGVudmlyb25tZW50LgogCiAKQEAgLTEwOTMsNyArMTA5Myw3IEBACiAuLiBbI10gVGhpcyBhbHNvIG1lYW5zIHlvdSBjb3VsZCByZXBsYWNlIGFsbCBleGlzdGluZyBDT0ZGLWxpYnJhcmllcyB3aXRoIE9NRi1saWJyYXJpZXMKICAgIG9mIHRoZSBzYW1lIG5hbWUuCiAKLS4uIFsjXSBDaGVjayBodHRwOi8vc291cmNlcy5yZWRoYXQuY29tL2N5Z3dpbi8gYW5kIGh0dHA6Ly93d3cubWluZ3cub3JnLyBmb3IgbW9yZQorLi4gWyNdIENoZWNrIGh0dHA6Ly93d3cuc291cmNld2FyZS5vcmcvY3lnd2luLyBhbmQgaHR0cDovL3d3dy5taW5ndy5vcmcvIGZvciBtb3JlCiAgICBpbmZvcm1hdGlvbgogCiAuLiBbI10gVGhlbiB5b3UgaGF2ZSBubyBQT1NJWCBlbXVsYXRpb24gYXZhaWxhYmxlLCBidXQgeW91IGFsc28gZG9uJ3QgbmVlZApkaWZmIC0tZ2l0IGEvRG9jL2luc3RhbGxpbmcvaW5kZXgucnN0IGIvRG9jL2luc3RhbGxpbmcvaW5kZXgucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3M2M2ODkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2MvaW5zdGFsbGluZy9pbmRleC5yc3QKQEAgLTAsMCArMSwyMjAgQEAKKy4uIGhpZ2hsaWdodGxhbmc6OiBub25lCisKKy4uIF9pbnN0YWxsaW5nLWluZGV4OgorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICBJbnN0YWxsaW5nIFB5dGhvbiBNb2R1bGVzCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCis6RW1haWw6IGRpc3R1dGlscy1zaWdAcHl0aG9uLm9yZworCitBcyBhIHBvcHVsYXIgb3BlbiBzb3VyY2UgZGV2ZWxvcG1lbnQgcHJvamVjdCwgUHl0aG9uIGhhcyBhbiBhY3RpdmUKK3N1cHBvcnRpbmcgY29tbXVuaXR5IG9mIGNvbnRyaWJ1dG9ycyBhbmQgdXNlcnMgdGhhdCBhbHNvIG1ha2UgdGhlaXIgc29mdHdhcmUKK2F2YWlsYWJsZSBmb3Igb3RoZXIgUHl0aG9uIGRldmVsb3BlcnMgdG8gdXNlIHVuZGVyIG9wZW4gc291cmNlIGxpY2Vuc2UgdGVybXMuCisKK1RoaXMgYWxsb3dzIFB5dGhvbiB1c2VycyB0byBzaGFyZSBhbmQgY29sbGFib3JhdGUgZWZmZWN0aXZlbHksIGJlbmVmaXRpbmcKK2Zyb20gdGhlIHNvbHV0aW9ucyBvdGhlcnMgaGF2ZSBhbHJlYWR5IGNyZWF0ZWQgdG8gY29tbW9uIChhbmQgc29tZXRpbWVzCitldmVuIHJhcmUhKSBwcm9ibGVtcywgYXMgd2VsbCBhcyBwb3RlbnRpYWxseSBjb250cmlidXRpbmcgdGhlaXIgb3duCitzb2x1dGlvbnMgdG8gdGhlIGNvbW1vbiBwb29sLgorCitUaGlzIGd1aWRlIGNvdmVycyB0aGUgaW5zdGFsbGF0aW9uIHBhcnQgb2YgdGhlIHByb2Nlc3MuIEZvciBhIGd1aWRlIHRvCitjcmVhdGluZyBhbmQgc2hhcmluZyB5b3VyIG93biBQeXRob24gcHJvamVjdHMsIHJlZmVyIHRvIHRoZQorOnJlZjpgZGlzdHJpYnV0aW9uIGd1aWRlIDxkaXN0cmlidXRpbmctaW5kZXg+YC4KKworLi4gbm90ZTo6CisKKyAgIEZvciBjb3Jwb3JhdGUgYW5kIG90aGVyIGluc3RpdHV0aW9uYWwgdXNlcnMsIGJlIGF3YXJlIHRoYXQgbWFueQorICAgb3JnYW5pc2F0aW9ucyBoYXZlIHRoZWlyIG93biBwb2xpY2llcyBhcm91bmQgdXNpbmcgYW5kIGNvbnRyaWJ1dGluZyB0bworICAgb3BlbiBzb3VyY2Ugc29mdHdhcmUuIFBsZWFzZSB0YWtlIHN1Y2ggcG9saWNpZXMgaW50byBhY2NvdW50IHdoZW4gbWFraW5nCisgICB1c2Ugb2YgdGhlIGRpc3RyaWJ1dGlvbiBhbmQgaW5zdGFsbGF0aW9uIHRvb2xzIHByb3ZpZGVkIHdpdGggUHl0aG9uLgorCisKK0tleSB0ZXJtcworPT09PT09PT09CisKKyogYGBwaXBgYCBpcyB0aGUgcHJlZmVycmVkIGluc3RhbGxlciBwcm9ncmFtLiBTdGFydGluZyB3aXRoIFB5dGhvbiAzLjQsIGl0CisgIGlzIGluY2x1ZGVkIGJ5IGRlZmF1bHQgd2l0aCB0aGUgUHl0aG9uIGJpbmFyeSBpbnN0YWxsZXJzLgorKiBhIHZpcnR1YWwgZW52aXJvbm1lbnQgaXMgYSBzZW1pLWlzb2xhdGVkIFB5dGhvbiBlbnZpcm9ubWVudCB0aGF0IGFsbG93cworICBwYWNrYWdlcyB0byBiZSBpbnN0YWxsZWQgZm9yIHVzZSBieSBhIHBhcnRpY3VsYXIgYXBwbGljYXRpb24sIHJhdGhlciB0aGFuCisgIGJlaW5nIGluc3RhbGxlZCBzeXN0ZW0gd2lkZQorKiBgYHB5dmVudmBgIGlzIHRoZSBzdGFuZGFyZCB0b29sIGZvciBjcmVhdGluZyB2aXJ0dWFsIGVudmlyb25tZW50cywgYW5kIGhhcworICBiZWVuIHBhcnQgb2YgUHl0aG9uIHNpbmNlIFB5dGhvbiAzLjMuIFN0YXJ0aW5nIHdpdGggUHl0aG9uIDMuNCwgaXQKKyAgZGVmYXVsdHMgdG8gaW5zdGFsbGluZyBgYHBpcGBgIGludG8gYWxsIGNyZWF0ZWQgdmlydHVhbCBlbnZpcm9ubWVudHMKKyogYGB2aXJ0dWFsZW52YGAgaXMgYSB0aGlyZCBwYXJ0eSBhbHRlcm5hdGl2ZSAoYW5kIHByZWRlY2Vzc29yKSB0bworICBgYHB5dmVudmBgLiBJdCBhbGxvd3MgdmlydHVhbCBlbnZpcm9ubWVudHMgdG8gYmUgdXNlZCBvbiB2ZXJzaW9ucyBvZgorICBQeXRob24gcHJpb3IgdG8gMy40LCB3aGljaCBlaXRoZXIgZG9uJ3QgcHJvdmlkZSBgYHB5dmVudmBgIGF0IGFsbCwgb3IKKyAgYXJlbid0IGFibGUgdG8gYXV0b21hdGljYWxseSBpbnN0YWxsIGBgcGlwYGAgaW50byBjcmVhdGVkIGVudmlyb25tZW50cy4KKyogdGhlIGBQeXRob24gUGFja2FnaW5nIEluZGV4IDxodHRwczovL3B5cGkucHl0aG9uLm9yZy9weXBpPmBfXyBpcyBhIHB1YmxpYworICByZXBvc2l0b3J5IG9mIG9wZW4gc291cmNlIGxpY2Vuc2VkIHBhY2thZ2VzIG1hZGUgYXZhaWxhYmxlIGZvciB1c2UgYnkKKyAgb3RoZXIgUHl0aG9uIHVzZXJzCisqIHRoZSBgUHl0aG9uIFBhY2thZ2luZyBBdXRob3JpdHkKKyAgPGh0dHBzOi8vcGFja2FnaW5nLnB5dGhvbi5vcmcvZW4vbGF0ZXN0L2Z1dHVyZS5odG1sPmBfXyBhcmUgdGhlIGdyb3VwIG9mCisgIGRldmVsb3BlcnMgYW5kIGRvY3VtZW50YXRpb24gYXV0aG9ycyByZXNwb25zaWJsZSBmb3IgdGhlIG1haW50ZW5hbmNlIGFuZAorICBldm9sdXRpb24gb2YgdGhlIHN0YW5kYXJkIHBhY2thZ2luZyB0b29scyBhbmQgdGhlIGFzc29jaWF0ZWQgbWV0YWRhdGEgYW5kCisgIGZpbGUgZm9ybWF0IHN0YW5kYXJkcy4gVGhleSBtYWludGFpbiBhIHZhcmlldHkgb2YgdG9vbHMsIGRvY3VtZW50YXRpb24KKyAgYW5kIGlzc3VlIHRyYWNrZXJzIG9uIGJvdGggYEdpdEh1YiA8aHR0cHM6Ly9naXRodWIuY29tL3B5cGE+YF9fIGFuZAorICBgQml0QnVja2V0IDxodHRwczovL2JpdGJ1Y2tldC5vcmcvcHlwYS8+YF9fLgorKiBgYGRpc3R1dGlsc2BgIGlzIHRoZSBvcmlnaW5hbCBidWlsZCBhbmQgZGlzdHJpYnV0aW9uIHN5c3RlbSBmaXJzdCBhZGRlZCB0bworICB0aGUgUHl0aG9uIHN0YW5kYXJkIGxpYnJhcnkgaW4gMTk5OC4gV2hpbGUgZGlyZWN0IHVzZSBvZiBgYGRpc3R1dGlsc2BgIGlzCisgIGJlaW5nIHBoYXNlZCBvdXQsIGl0IHN0aWxsIGxhaWQgdGhlIGZvdW5kYXRpb24gZm9yIHRoZSBjdXJyZW50IHBhY2thZ2luZworICBhbmQgZGlzdHJpYnV0aW9uIGluZnJhc3RydWN0dXJlLCBhbmQgaXQgbm90IG9ubHkgcmVtYWlucyBwYXJ0IG9mIHRoZQorICBzdGFuZGFyZCBsaWJyYXJ5LCBidXQgaXRzIG5hbWUgbGl2ZXMgb24gaW4gb3RoZXIgd2F5cyAoc3VjaCBhcyB0aGUgbmFtZQorICBvZiB0aGUgbWFpbGluZyBsaXN0IHVzZWQgdG8gY29vcmRpbmF0ZSBQeXRob24gcGFja2FnaW5nIHN0YW5kYXJkcworICBkZXZlbG9wbWVudCkuCisKKworQmFzaWMgdXNhZ2UKKz09PT09PT09PT09CisKK1RoZSBzdGFuZGFyZCBwYWNrYWdpbmcgdG9vbHMgYXJlIGFsbCBkZXNpZ25lZCB0byBiZSB1c2VkIGZyb20gdGhlIGNvbW1hbmQKK2xpbmUuCisKK1RoZSBmb2xsb3dpbmcgY29tbWFuZCB3aWxsIGluc3RhbGwgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIGEgbW9kdWxlIGFuZCBpdHMKK2RlcGVuZGVuY2llcyBmcm9tIHRoZSBQeXRob24gUGFja2FnaW5nIEluZGV4OjoKKworICAgIHB5dGhvbiAtbSBwaXAgaW5zdGFsbCBTb21lUGFja2FnZQorCisuLiBub3RlOjoKKworICAgRm9yIFBPU0lYIHVzZXJzIChpbmNsdWRpbmcgTWFjIE9TIFggYW5kIExpbnV4IHVzZXJzKSwgdGhlIGV4YW1wbGVzIGluCisgICB0aGlzIGd1aWRlIGFzc3VtZSB0aGUgdXNlIG9mIGEgOnRlcm06YHZpcnR1YWwgZW52aXJvbm1lbnRgLgorCisgICBGb3IgV2luZG93cyB1c2VycywgdGhlIGV4YW1wbGVzIGluIHRoaXMgZ3VpZGUgYXNzdW1lIHRoYXQgdGhlIG9wdGlvbiB0bworICAgYWRqdXN0IHRoZSBzeXN0ZW0gUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZSB3YXMgc2VsZWN0ZWQgd2hlbiBpbnN0YWxsaW5nCisgICBQeXRob24uCisKK0l0J3MgYWxzbyBwb3NzaWJsZSB0byBzcGVjaWZ5IGFuIGV4YWN0IG9yIG1pbmltdW0gdmVyc2lvbiBkaXJlY3RseSBvbiB0aGUKK2NvbW1hbmQgbGluZTo6CisKKyAgICBweXRob24gLW0gcGlwIGluc3RhbGwgU29tZVBhY2thZ2U9PTEuMC40ICAgICMgc3BlY2lmaWMgdmVyc2lvbgorICAgIHB5dGhvbiAtbSBwaXAgaW5zdGFsbCAnU29tZVBhY2thZ2U+PTEuMC40JyAgIyBtaW5pbXVtIHZlcnNpb24KKworTm9ybWFsbHksIGlmIGEgc3VpdGFibGUgbW9kdWxlIGlzIGFscmVhZHkgaW5zdGFsbGVkLCBhdHRlbXB0aW5nIHRvIGluc3RhbGwKK2l0IGFnYWluIHdpbGwgaGF2ZSBubyBlZmZlY3QuIFVwZ3JhZGluZyBleGlzdGluZyBtb2R1bGVzIG11c3QgYmUgcmVxdWVzdGVkCitleHBsaWNpdGx5OjoKKworICAgIHB5dGhvbiAtbSBwaXAgaW5zdGFsbCAtLXVwZ3JhZGUgU29tZVBhY2thZ2UKKworTW9yZSBpbmZvcm1hdGlvbiBhbmQgcmVzb3VyY2VzIHJlZ2FyZGluZyBgYHBpcGBgIGFuZCBpdHMgY2FwYWJpbGl0aWVzIGNhbiBiZQorZm91bmQgaW4gdGhlIGBQeXRob24gUGFja2FnaW5nIFVzZXIgR3VpZGUgPGh0dHBzOi8vcGFja2FnaW5nLnB5dGhvbi5vcmc+YF9fLgorCitgYHB5dmVudmBgIGhhcyBpdHMgb3duIGRvY3VtZW50YXRpb24gYXQgOnJlZjpgc2NyaXB0cy1weXZlbnZgLiBJbnN0YWxsaW5nCitpbnRvIGFuIGFjdGl2ZSB2aXJ0dWFsIGVudmlyb25tZW50IHVzZXMgdGhlIGNvbW1hbmRzIHNob3duIGFib3ZlLgorCisuLiBzZWVhbHNvOjoKKworICAgIGBQeXRob24gUGFja2FnaW5nIFVzZXIgR3VpZGU6IEluc3RhbGxpbmcgUHl0aG9uIERpc3RyaWJ1dGlvbiBQYWNrYWdlcworICAgIDxodHRwczovL3BhY2thZ2luZy5weXRob24ub3JnL2VuL2xhdGVzdC9pbnN0YWxsaW5nLmh0bWwjaW5zdGFsbGluZy1weXRob24tZGlzdHJpYnV0aW9uLXBhY2thZ2VzPmBfXworCisKK0hvdyBkbyBJIC4uLj8KKz09PT09PT09PT09PT0KKworVGhlc2UgYXJlIHF1aWNrIGFuc3dlcnMgb3IgbGlua3MgZm9yIHNvbWUgY29tbW9uIHRhc2tzLgorCisuLi4gaW5zdGFsbCBgYHBpcGBgIGluIHZlcnNpb25zIG9mIFB5dGhvbiBwcmlvciB0byBQeXRob24gMy40PworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUHl0aG9uIG9ubHkgc3RhcnRlZCBidW5kbGluZyBgYHBpcGBgIHdpdGggUHl0aG9uIDMuNC4gRm9yIGVhcmxpZXIgdmVyc2lvbnMsCitgYHBpcGBgIG5lZWRzIHRvIGJlICJib290c3RyYXBwZWQiIGFzIGRlc2NyaWJlZCBpbiB0aGUgUHl0aG9uIFBhY2thZ2luZworVXNlciBHdWlkZS4KKworLi4gc2VlYWxzbzo6CisKKyAgIGBQeXRob24gUGFja2FnaW5nIFVzZXIgR3VpZGU6IFNldHVwIGZvciBJbnN0YWxsaW5nIERpc3RyaWJ1dGlvbiBQYWNrYWdlcworICAgPGh0dHBzOi8vcGFja2FnaW5nLnB5dGhvbi5vcmcvZW4vbGF0ZXN0L2luc3RhbGxpbmcuaHRtbCNzZXR1cC1mb3ItaW5zdGFsbGluZy1kaXN0cmlidXRpb24tcGFja2FnZXM+YF9fCisKKworLi4gaW5zdGFsbGluZy1wZXItdXNlci1pbnN0YWxsYXRpb246CisKKy4uLiBpbnN0YWxsIHBhY2thZ2VzIGp1c3QgZm9yIHRoZSBjdXJyZW50IHVzZXI/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitQYXNzaW5nIHRoZSBgYC0tdXNlcmBgIG9wdGlvbiB0byBgYHB5dGhvbiAtbSBwaXAgaW5zdGFsbGBgIHdpbGwgaW5zdGFsbCBhCitwYWNrYWdlIGp1c3QgZm9yIHRoZSBjdXJyZW50IHVzZXIsIHJhdGhlciB0aGFuIGZvciBhbGwgdXNlcnMgb2YgdGhlIHN5c3RlbS4KKworCisuLi4gaW5zdGFsbCBzY2llbnRpZmljIFB5dGhvbiBwYWNrYWdlcz8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBIG51bWJlciBvZiBzY2llbnRpZmljIFB5dGhvbiBwYWNrYWdlcyBoYXZlIGNvbXBsZXggYmluYXJ5IGRlcGVuZGVuY2llcywgYW5kCithcmVuJ3QgY3VycmVudGx5IGVhc3kgdG8gaW5zdGFsbCB1c2luZyBgYHBpcGBgIGRpcmVjdGx5LiBBdCB0aGlzIHBvaW50IGluCit0aW1lLCBpdCB3aWxsIG9mdGVuIGJlIGVhc2llciBmb3IgdXNlcnMgdG8gaW5zdGFsbCB0aGVzZSBwYWNrYWdlcyBieQorYG90aGVyIG1lYW5zCis8aHR0cHM6Ly9wYWNrYWdpbmcucHl0aG9uLm9yZy9lbi9sYXRlc3Qvc2NpZW5jZS5odG1sPmBfXworcmF0aGVyIHRoYW4gYXR0ZW1wdGluZyB0byBpbnN0YWxsIHRoZW0gd2l0aCBgYHBpcGBgLgorCisuLiBzZWVhbHNvOjoKKworICAgYFB5dGhvbiBQYWNrYWdpbmcgVXNlciBHdWlkZTogSW5zdGFsbGluZyBTY2llbnRpZmljIFBhY2thZ2VzCisgICA8aHR0cHM6Ly9wYWNrYWdpbmcucHl0aG9uLm9yZy9lbi9sYXRlc3Qvc2NpZW5jZS5odG1sPmBfXworCisKKy4uLiB3b3JrIHdpdGggbXVsdGlwbGUgdmVyc2lvbnMgb2YgUHl0aG9uIGluc3RhbGxlZCBpbiBwYXJhbGxlbD8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworT24gTGludXgsIE1hYyBPUyBYIGFuZCBvdGhlciBQT1NJWCBzeXN0ZW1zLCB1c2UgdGhlIHZlcnNpb25lZCBQeXRob24gY29tbWFuZHMKK2luIGNvbWJpbmF0aW9uIHdpdGggdGhlIGBgLW1gYCBzd2l0Y2ggdG8gcnVuIHRoZSBhcHByb3ByaWF0ZSBjb3B5IG9mCitgYHBpcGBgOjoKKworICAgcHl0aG9uMiAgIC1tIHBpcCBpbnN0YWxsIFNvbWVQYWNrYWdlICAjIGRlZmF1bHQgUHl0aG9uIDIKKyAgIHB5dGhvbjIuNyAtbSBwaXAgaW5zdGFsbCBTb21lUGFja2FnZSAgIyBzcGVjaWZpY2FsbHkgUHl0aG9uIDIuNworICAgcHl0aG9uMyAgIC1tIHBpcCBpbnN0YWxsIFNvbWVQYWNrYWdlICAjIGRlZmF1bHQgUHl0aG9uIDMKKyAgIHB5dGhvbjMuNCAtbSBwaXAgaW5zdGFsbCBTb21lUGFja2FnZSAgIyBzcGVjaWZpY2FsbHkgUHl0aG9uIDMuNAorCisoYXBwcm9wcmlhdGVseSB2ZXJzaW9uZWQgYGBwaXBgYCBjb21tYW5kcyBtYXkgYWxzbyBiZSBhdmFpbGFibGUpCisKK09uIFdpbmRvd3MsIHVzZSB0aGUgYGBweWBgIFB5dGhvbiBsYXVuY2hlciBpbiBjb21iaW5hdGlvbiB3aXRoIHRoZSBgYC1tYGAKK3N3aXRjaDo6CisKKyAgIHB5IC0yICAgLW0gcGlwIGluc3RhbGwgU29tZVBhY2thZ2UgICMgZGVmYXVsdCBQeXRob24gMgorICAgcHkgLTIuNyAtbSBwaXAgaW5zdGFsbCBTb21lUGFja2FnZSAgIyBzcGVjaWZpY2FsbHkgUHl0aG9uIDIuNworICAgcHkgLTMgICAtbSBwaXAgaW5zdGFsbCBTb21lUGFja2FnZSAgIyBkZWZhdWx0IFB5dGhvbiAzCisgICBweSAtMy40IC1tIHBpcCBpbnN0YWxsIFNvbWVQYWNrYWdlICAjIHNwZWNpZmljYWxseSBQeXRob24gMy40CisKKy4uIG90aGVyIHF1ZXN0aW9uczoKKworICAgT25jZSB0aGUgRGV2ZWxvcG1lbnQgJiBEZXBsb3ltZW50IHBhcnQgb2YgUFBVRyBpcyBmbGVzaGVkIG91dCwgc29tZSBvZgorICAgdGhvc2Ugc2VjdGlvbnMgc2hvdWxkIGJlIGxpbmtlZCBmcm9tIG5ldyBxdWVzdGlvbnMgaGVyZSAobW9zdCBub3RhYmx5LAorICAgd2Ugc2hvdWxkIGhhdmUgYSBxdWVzdGlvbiBhYm91dCBhdm9pZGluZyBkZXBlbmRpbmcgb24gUHlQSSB0aGF0IGxpbmtzIHRvCisgICBodHRwczovL3BhY2thZ2luZy5weXRob24ub3JnL2VuL2xhdGVzdC9kZXBsb3ltZW50Lmh0bWwjcHlwaS1taXJyb3JzLWFuZC1jYWNoZXMpCisKKworQ29tbW9uIGluc3RhbGxhdGlvbiBpc3N1ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0luc3RhbGxpbmcgaW50byB0aGUgc3lzdGVtIFB5dGhvbiBvbiBMaW51eAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK09uIExpbnV4IHN5c3RlbXMsIGEgUHl0aG9uIGluc3RhbGxhdGlvbiB3aWxsIHR5cGljYWxseSBiZSBpbmNsdWRlZCBhcyBwYXJ0CitvZiB0aGUgZGlzdHJpYnV0aW9uLiBJbnN0YWxsaW5nIGludG8gdGhpcyBQeXRob24gaW5zdGFsbGF0aW9uIHJlcXVpcmVzCityb290IGFjY2VzcyB0byB0aGUgc3lzdGVtLCBhbmQgbWF5IGludGVyZmVyZSB3aXRoIHRoZSBvcGVyYXRpb24gb2YgdGhlCitzeXN0ZW0gcGFja2FnZSBtYW5hZ2VyIGFuZCBvdGhlciBjb21wb25lbnRzIG9mIHRoZSBzeXN0ZW0gaWYgYSBjb21wb25lbnQKK2lzIHVuZXhwZWN0ZWRseSB1cGdyYWRlZCB1c2luZyBgYHBpcGBgLgorCitPbiBzdWNoIHN5c3RlbXMsIGl0IGlzIG9mdGVuIGJldHRlciB0byB1c2UgYSB2aXJ0dWFsIGVudmlyb25tZW50IG9yIGEKK3Blci11c2VyIGluc3RhbGxhdGlvbiB3aGVuIGluc3RhbGxpbmcgcGFja2FnZXMgd2l0aCBgYHBpcGBgLgorCisKK0luc3RhbGxpbmcgYmluYXJ5IGV4dGVuc2lvbnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUHl0aG9uIGhhcyB0eXBpY2FsbHkgcmVsaWVkIGhlYXZpbHkgb24gc291cmNlIGJhc2VkIGRpc3RyaWJ1dGlvbiwgd2l0aCBlbmQKK3VzZXJzIGJlaW5nIGV4cGVjdGVkIHRvIGNvbXBpbGUgZXh0ZW5zaW9uIG1vZHVsZXMgZnJvbSBzb3VyY2UgYXMgcGFydCBvZgordGhlIGluc3RhbGxhdGlvbiBwcm9jZXNzLgorCitXaXRoIHRoZSBpbnRyb2R1Y3Rpb24gb2Ygc3VwcG9ydCBmb3IgdGhlIGJpbmFyeSBgYHdoZWVsYGAgZm9ybWF0LCBhbmQgdGhlCithYmlsaXR5IHRvIHB1Ymxpc2ggd2hlZWxzIGZvciBhdCBsZWFzdCBXaW5kb3dzIGFuZCBNYWMgT1MgWCB0aHJvdWdoIHRoZQorUHl0aG9uIFBhY2thZ2luZyBJbmRleCwgdGhpcyBwcm9ibGVtIGlzIGV4cGVjdGVkIHRvIGRpbWluaXNoIG92ZXIgdGltZSwKK2FzIHVzZXJzIGFyZSBtb3JlIHJlZ3VsYXJseSBhYmxlIHRvIGluc3RhbGwgcHJlLWJ1aWx0IGV4dGVuc2lvbnMgcmF0aGVyCit0aGFuIG5lZWRpbmcgdG8gYnVpbGQgdGhlbSB0aGVtc2VsdmVzLgorCitTb21lIG9mIHRoZSBzb2x1dGlvbnMgZm9yIGluc3RhbGxpbmcgYHNjaWVudGlmaWMgc29mdHdhcmUKKzxodHRwczovL3BhY2thZ2luZy5weXRob24ub3JnL2VuL2xhdGVzdC9zY2llbmNlLmh0bWw+YF9fCit0aGF0IGlzIG5vdCB5ZXQgYXZhaWxhYmxlIGFzIHByZS1idWlsdCBgYHdoZWVsYGAgZmlsZXMgbWF5IGFsc28gaGVscCB3aXRoCitvYnRhaW5pbmcgb3RoZXIgYmluYXJ5IGV4dGVuc2lvbnMgd2l0aG91dCBuZWVkaW5nIHRvIGJ1aWxkIHRoZW0gbG9jYWxseS4KKworLi4gc2VlYWxzbzo6CisKKyAgIGBQeXRob24gUGFja2FnaW5nIFVzZXIgR3VpZGU6IEJpbmFyeSBFeHRlbnNpb25zCisgICA8aHR0cHM6Ly9wYWNrYWdpbmcucHl0aG9uLm9yZy9lbi9sYXRlc3QvZXh0ZW5zaW9ucy5odG1sPmBfXwpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvMnRvMy5yc3QgYi9Eb2MvbGlicmFyeS8ydG8zLnJzdAppbmRleCAxZTVmNDJkLi4zMWY2ODFkIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS8ydG8zLnJzdAorKysgYi9Eb2MvbGlicmFyeS8ydG8zLnJzdApAQCAtMTQyLDYgKzE0MiwzOSBAQAogICAgUmVtb3ZlcyB1c2FnZSBvZiA6ZnVuYzpgYXBwbHlgLiAgRm9yIGV4YW1wbGUgYGBhcHBseShmdW5jdGlvbiwgKmFyZ3MsCiAgICAqKmt3YXJncylgYCBpcyBjb252ZXJ0ZWQgdG8gYGBmdW5jdGlvbigqYXJncywgKiprd2FyZ3MpYGAuCiAKKy4uIDJ0bzNmaXhlcjo6IGFzc2VydHMKKworICAgUmVwbGFjZXMgZGVwcmVjYXRlZCA6bW9kOmB1bml0dGVzdGAgbWV0aG9kIG5hbWVzIHdpdGggdGhlIGNvcnJlY3Qgb25lcy4KKworICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgRnJvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRvCisgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICBgYGZhaWxVbmxlc3NFcXVhbChhLCBiKWBgICAgICAgICAgOm1ldGg6YGFzc2VydEVxdWFsKGEsIGIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydEVxdWFsPmAKKyAgIGBgYXNzZXJ0RXF1YWxzKGEsIGIpYGAgICAgICAgICAgICA6bWV0aDpgYXNzZXJ0RXF1YWwoYSwgYikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0RXF1YWw+YAorICAgYGBmYWlsSWZFcXVhbChhLCBiKWBgICAgICAgICAgICAgIDptZXRoOmBhc3NlcnROb3RFcXVhbChhLCBiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnROb3RFcXVhbD5gCisgICBgYGFzc2VydE5vdEVxdWFscyhhLCBiKWBgICAgICAgICAgOm1ldGg6YGFzc2VydE5vdEVxdWFsKGEsIGIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydE5vdEVxdWFsPmAKKyAgIGBgZmFpbFVubGVzcyhhKWBgICAgICAgICAgICAgICAgICA6bWV0aDpgYXNzZXJ0VHJ1ZShhKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRUcnVlPmAKKyAgIGBgYXNzZXJ0XyhhKWBgICAgICAgICAgICAgICAgICAgICA6bWV0aDpgYXNzZXJ0VHJ1ZShhKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRUcnVlPmAKKyAgIGBgZmFpbElmKGEpYGAgICAgICAgICAgICAgICAgICAgICA6bWV0aDpgYXNzZXJ0RmFsc2UoYSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0RmFsc2U+YAorICAgYGBmYWlsVW5sZXNzUmFpc2VzKGV4YywgY2FsKWBgICAgIDptZXRoOmBhc3NlcnRSYWlzZXMoZXhjLCBjYWwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydFJhaXNlcz5gCisgICBgYGZhaWxVbmxlc3NBbG1vc3RFcXVhbChhLCBiKWBgICAgOm1ldGg6YGFzc2VydEFsbW9zdEVxdWFsKGEsIGIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydEFsbW9zdEVxdWFsPmAKKyAgIGBgYXNzZXJ0QWxtb3N0RXF1YWxzKGEsIGIpYGAgICAgICA6bWV0aDpgYXNzZXJ0QWxtb3N0RXF1YWwoYSwgYikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0QWxtb3N0RXF1YWw+YAorICAgYGBmYWlsSWZBbG1vc3RFcXVhbChhLCBiKWBgICAgICAgIDptZXRoOmBhc3NlcnROb3RBbG1vc3RFcXVhbChhLCBiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnROb3RBbG1vc3RFcXVhbD5gCisgICBgYGFzc2VydE5vdEFsbW9zdEVxdWFscyhhLCBiKWBgICAgOm1ldGg6YGFzc2VydE5vdEFsbW9zdEVxdWFsKGEsIGIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydE5vdEFsbW9zdEVxdWFsPmAKKyAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwogLi4gMnRvM2ZpeGVyOjogYmFzZXN0cmluZwogCiAgICBDb252ZXJ0cyA6Y2xhc3M6YGJhc2VzdHJpbmdgIHRvIDpjbGFzczpgc3RyYC4KQEAgLTIzOCw3ICsyNzEsNyBAQAogCiAuLiAydG8zZml4ZXI6OiBpbnB1dAogCi0gICBDb252ZXJ0cyBgYGlucHV0KHByb21wdClgYCB0byBgYGV2YWwoaW5wdXQocHJvbXB0KSlgYAorICAgQ29udmVydHMgYGBpbnB1dChwcm9tcHQpYGAgdG8gYGBldmFsKGlucHV0KHByb21wdCkpYGAuCiAKIC4uIDJ0bzNmaXhlcjo6IGludGVybgogCkBAIC0zNDIsNiArMzc1LDEwIEBACiAKICAgIEhhbmRsZXMgdGhlIG1vdmUgb2YgOmZ1bmM6YHJlZHVjZWAgdG8gOmZ1bmM6YGZ1bmN0b29scy5yZWR1Y2VgLgogCisuLiAydG8zZml4ZXI6OiByZWxvYWQKKworICAgQ29udmVydHMgOmZ1bmM6YHJlbG9hZGAgdG8gOmZ1bmM6YGltcC5yZWxvYWRgLgorCiAuLiAydG8zZml4ZXI6OiByZW5hbWVzCiAKICAgIENoYW5nZXMgOmRhdGE6YHN5cy5tYXhpbnRgIHRvIDpkYXRhOmBzeXMubWF4c2l6ZWAuCkBAIC0zNTUsNyArMzkyLDcgQEAKICAgIFJlcGxhY2VzIHVzZSBvZiB0aGUgOmNsYXNzOmBzZXRgIGNvbnN0cnVjdG9yIHdpdGggc2V0IGxpdGVyYWxzLiAgVGhpcyBmaXhlcgogICAgaXMgb3B0aW9uYWwuCiAKLS4uIDJ0bzNmaXhlcjo6IHN0YW5kYXJkX2Vycm9yCisuLiAydG8zZml4ZXI6OiBzdGFuZGFyZGVycm9yCiAKICAgIFJlbmFtZXMgOmV4YzpgU3RhbmRhcmRFcnJvcmAgdG8gOmV4YzpgRXhjZXB0aW9uYC4KIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvX19tYWluX18ucnN0IGIvRG9jL2xpYnJhcnkvX19tYWluX18ucnN0CmluZGV4IGExZDNjMjQuLmE0Njk5M2QgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L19fbWFpbl9fLnJzdAorKysgYi9Eb2MvbGlicmFyeS9fX21haW5fXy5yc3QKQEAgLTUsMTMgKzUsMTkgQEAKIC4uIG1vZHVsZTo6IF9fbWFpbl9fCiAgICA6c3lub3BzaXM6IFRoZSBlbnZpcm9ubWVudCB3aGVyZSB0aGUgdG9wLWxldmVsIHNjcmlwdCBpcyBydW4uCiAKK2BgJ19fbWFpbl9fJ2BgIGlzIHRoZSBuYW1lIG9mIHRoZSBzY29wZSBpbiB3aGljaCB0b3AtbGV2ZWwgY29kZSBleGVjdXRlcy4KK0EgbW9kdWxlJ3MgX19uYW1lX18gaXMgc2V0IGVxdWFsIHRvIGBgJ19fbWFpbl9fJ2BgIHdoZW4gcmVhZCBmcm9tCitzdGFuZGFyZCBpbnB1dCwgYSBzY3JpcHQsIG9yIGZyb20gYW4gaW50ZXJhY3RpdmUgcHJvbXB0LgogCi1UaGlzIG1vZHVsZSByZXByZXNlbnRzIHRoZSAob3RoZXJ3aXNlIGFub255bW91cykgc2NvcGUgaW4gd2hpY2ggdGhlCi1pbnRlcnByZXRlcidzIG1haW4gcHJvZ3JhbSBleGVjdXRlcyAtLS0gY29tbWFuZHMgcmVhZCBlaXRoZXIgZnJvbSBzdGFuZGFyZAotaW5wdXQsIGZyb20gYSBzY3JpcHQgZmlsZSwgb3IgZnJvbSBhbiBpbnRlcmFjdGl2ZSBwcm9tcHQuICBJdCBpcyB0aGlzCi1lbnZpcm9ubWVudCBpbiB3aGljaCB0aGUgaWRpb21hdGljICJjb25kaXRpb25hbCBzY3JpcHQiIHN0YW56YSBjYXVzZXMgYSBzY3JpcHQKLXRvIHJ1bjo6CitBIG1vZHVsZSBjYW4gZGlzY292ZXIgd2hldGhlciBvciBub3QgaXQgaXMgcnVubmluZyBpbiB0aGUgbWFpbiBzY29wZSBieQorY2hlY2tpbmcgaXRzIG93biBgYF9fbmFtZV9fYGAsIHdoaWNoIGFsbG93cyBhIGNvbW1vbiBpZGlvbSBmb3IgY29uZGl0aW9uYWxseQorZXhlY3V0aW5nIGNvZGUgaW4gYSBtb2R1bGUgd2hlbiBpdCBpcyBydW4gYXMgYSBzY3JpcHQgb3Igd2l0aCBgYHB5dGhvbgorLW1gYCBidXQgbm90IHdoZW4gaXQgaXMgaW1wb3J0ZWQ6OgogCiAgICBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgICAgICMgZXhlY3V0ZSBvbmx5IGlmIHJ1biBhcyBhIHNjcmlwdAogICAgICAgIG1haW4oKQogCitGb3IgYSBwYWNrYWdlLCB0aGUgc2FtZSBlZmZlY3QgY2FuIGJlIGFjaGlldmVkIGJ5IGluY2x1ZGluZyBhCitgYF9fbWFpbl9fLnB5YGAgbW9kdWxlLCB0aGUgY29udGVudHMgb2Ygd2hpY2ggd2lsbCBiZSBleGVjdXRlZCB3aGVuIHRoZQorbW9kdWxlIGlzIHJ1biB3aXRoIGBgLW1gYC4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L190aHJlYWQucnN0IGIvRG9jL2xpYnJhcnkvX3RocmVhZC5yc3QKaW5kZXggMmUxMzBjMS4uNzEyMjg2MSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvX3RocmVhZC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvX3RocmVhZC5yc3QKQEAgLTkzLDcgKzkzLDggQEAKICAgIFJldHVybiB0aGUgdGhyZWFkIHN0YWNrIHNpemUgdXNlZCB3aGVuIGNyZWF0aW5nIG5ldyB0aHJlYWRzLiAgVGhlIG9wdGlvbmFsCiAgICAqc2l6ZSogYXJndW1lbnQgc3BlY2lmaWVzIHRoZSBzdGFjayBzaXplIHRvIGJlIHVzZWQgZm9yIHN1YnNlcXVlbnRseSBjcmVhdGVkCiAgICB0aHJlYWRzLCBhbmQgbXVzdCBiZSAwICh1c2UgcGxhdGZvcm0gb3IgY29uZmlndXJlZCBkZWZhdWx0KSBvciBhIHBvc2l0aXZlCi0gICBpbnRlZ2VyIHZhbHVlIG9mIGF0IGxlYXN0IDMyLDc2OCAoMzIgS2lCKS4gSWYgY2hhbmdpbmcgdGhlIHRocmVhZCBzdGFjayBzaXplIGlzCisgICBpbnRlZ2VyIHZhbHVlIG9mIGF0IGxlYXN0IDMyLDc2OCAoMzIgS2lCKS4gSWYgKnNpemUqIGlzIG5vdCBzcGVjaWZpZWQsCisgICAwIGlzIHVzZWQuICBJZiBjaGFuZ2luZyB0aGUgdGhyZWFkIHN0YWNrIHNpemUgaXMKICAgIHVuc3VwcG9ydGVkLCBhIDpleGM6YFJ1bnRpbWVFcnJvcmAgaXMgcmFpc2VkLiAgSWYgdGhlIHNwZWNpZmllZCBzdGFjayBzaXplIGlzCiAgICBpbnZhbGlkLCBhIDpleGM6YFZhbHVlRXJyb3JgIGlzIHJhaXNlZCBhbmQgdGhlIHN0YWNrIHNpemUgaXMgdW5tb2RpZmllZC4gIDMyIEtpQgogICAgaXMgY3VycmVudGx5IHRoZSBtaW5pbXVtIHN1cHBvcnRlZCBzdGFjayBzaXplIHZhbHVlIHRvIGd1YXJhbnRlZSBzdWZmaWNpZW50CkBAIC0xNzYsMTAgKzE3Nyw2IEBACiAqIENhbGxpbmcgOmZ1bmM6YHN5cy5leGl0YCBvciByYWlzaW5nIHRoZSA6ZXhjOmBTeXN0ZW1FeGl0YCBleGNlcHRpb24gaXMKICAgZXF1aXZhbGVudCB0byBjYWxsaW5nIDpmdW5jOmBfdGhyZWFkLmV4aXRgLgogCi0qIE5vdCBhbGwgYnVpbHQtaW4gZnVuY3Rpb25zIHRoYXQgbWF5IGJsb2NrIHdhaXRpbmcgZm9yIEkvTyBhbGxvdyBvdGhlciB0aHJlYWRzCi0gIHRvIHJ1bi4gIChUaGUgbW9zdCBwb3B1bGFyIG9uZXMgKDpmdW5jOmB0aW1lLnNsZWVwYCwgOm1ldGg6YGlvLkZpbGVJTy5yZWFkYCwKLSAgOmZ1bmM6YHNlbGVjdC5zZWxlY3RgKSB3b3JrIGFzIGV4cGVjdGVkLikKLQogKiBJdCBpcyBub3QgcG9zc2libGUgdG8gaW50ZXJydXB0IHRoZSA6bWV0aDpgYWNxdWlyZWAgbWV0aG9kIG9uIGEgbG9jayAtLS0gdGhlCiAgIDpleGM6YEtleWJvYXJkSW50ZXJydXB0YCBleGNlcHRpb24gd2lsbCBoYXBwZW4gYWZ0ZXIgdGhlIGxvY2sgaGFzIGJlZW4gYWNxdWlyZWQuCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2FiYy5yc3QgYi9Eb2MvbGlicmFyeS9hYmMucnN0CmluZGV4IDkyOTkxMjQuLjdhNzM3MDQgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2FiYy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvYWJjLnJzdApAQCAtMTIsOSArMTIsOSBAQAogLS0tLS0tLS0tLS0tLS0KIAogVGhpcyBtb2R1bGUgcHJvdmlkZXMgdGhlIGluZnJhc3RydWN0dXJlIGZvciBkZWZpbmluZyA6dGVybTpgYWJzdHJhY3QgYmFzZQotY2xhc3NlcyA8YWJzdHJhY3QgYmFzZSBjbGFzcz5gIChBQkNzKSBpbiBQeXRob24sIGFzIG91dGxpbmVkIGluIDpwZXA6YDMxMTlgOyBzZWUgdGhlIFBFUCBmb3Igd2h5IHRoaXMKLXdhcyBhZGRlZCB0byBQeXRob24uIChTZWUgYWxzbyA6cGVwOmAzMTQxYCBhbmQgdGhlIDptb2Q6YG51bWJlcnNgIG1vZHVsZQotcmVnYXJkaW5nIGEgdHlwZSBoaWVyYXJjaHkgZm9yIG51bWJlcnMgYmFzZWQgb24gQUJDcy4pCitjbGFzc2VzIDxhYnN0cmFjdCBiYXNlIGNsYXNzPmAgKEFCQ3MpIGluIFB5dGhvbiwgYXMgb3V0bGluZWQgaW4gOnBlcDpgMzExOWA7CitzZWUgdGhlIFBFUCBmb3Igd2h5IHRoaXMgd2FzIGFkZGVkIHRvIFB5dGhvbi4gKFNlZSBhbHNvIDpwZXA6YDMxNDFgIGFuZCB0aGUKKzptb2Q6YG51bWJlcnNgIG1vZHVsZSByZWdhcmRpbmcgYSB0eXBlIGhpZXJhcmNoeSBmb3IgbnVtYmVycyBiYXNlZCBvbiBBQkNzLikKIAogVGhlIDptb2Q6YGNvbGxlY3Rpb25zYCBtb2R1bGUgaGFzIHNvbWUgY29uY3JldGUgY2xhc3NlcyB0aGF0IGRlcml2ZSBmcm9tCiBBQkNzOyB0aGVzZSBjYW4sIG9mIGNvdXJzZSwgYmUgZnVydGhlciBkZXJpdmVkLiBJbiBhZGRpdGlvbiB0aGUKQEAgLTIzLDcgKzIzLDcgQEAKIGhhc2hhYmxlIG9yIGEgbWFwcGluZy4KIAogCi1UaGlzIG1vZHVsZSBwcm92aWRlcyB0aGUgZm9sbG93aW5nIGNsYXNzOgorVGhpcyBtb2R1bGUgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBjbGFzc2VzOgogCiAuLiBjbGFzczo6IEFCQ01ldGEKIApAQCAtNTgsNiArNTgsMTAgQEAKICAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCiAgICAgICAgICBSZXR1cm5zIHRoZSByZWdpc3RlcmVkIHN1YmNsYXNzLCB0byBhbGxvdyB1c2FnZSBhcyBhIGNsYXNzIGRlY29yYXRvci4KIAorICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgICAgIFRvIGRldGVjdCBjYWxscyB0byA6bWV0aDpgcmVnaXN0ZXJgLCB5b3UgY2FuIHVzZSB0aGUKKyAgICAgICAgIDpmdW5jOmBnZXRfY2FjaGVfdG9rZW5gIGZ1bmN0aW9uLgorCiAgICBZb3UgY2FuIGFsc28gb3ZlcnJpZGUgdGhpcyBtZXRob2QgaW4gYW4gYWJzdHJhY3QgYmFzZSBjbGFzczoKIAogICAgLi4gbWV0aG9kOjogX19zdWJjbGFzc2hvb2tfXyhzdWJjbGFzcykKQEAgLTEyNyw2ICsxMzEsMTkgQEAKICAgIGF2YWlsYWJsZSBhcyBhIG1ldGhvZCBvZiBgYEZvb2BgLCBzbyBpdCBpcyBwcm92aWRlZCBzZXBhcmF0ZWx5LgogCiAKKy4uIGNsYXNzOjogQUJDCisKKyAgIEEgaGVscGVyIGNsYXNzIHRoYXQgaGFzIDpjbGFzczpgQUJDTWV0YWAgYXMgaXRzIG1ldGFjbGFzcy4gIFdpdGggdGhpcyBjbGFzcywKKyAgIGFuIGFic3RyYWN0IGJhc2UgY2xhc3MgY2FuIGJlIGNyZWF0ZWQgYnkgc2ltcGx5IGRlcml2aW5nIGZyb20gOmNsYXNzOmBBQkNgLAorICAgYXZvaWRpbmcgc29tZXRpbWVzIGNvbmZ1c2luZyBtZXRhY2xhc3MgdXNhZ2UuCisKKyAgIE5vdGUgdGhhdCB0aGUgdHlwZSBvZiA6Y2xhc3M6YEFCQ2AgaXMgc3RpbGwgOmNsYXNzOmBBQkNNZXRhYCwgdGhlcmVmb3JlCisgICBpbmhlcml0aW5nIGZyb20gOmNsYXNzOmBBQkNgIHJlcXVpcmVzIHRoZSB1c3VhbCBwcmVjYXV0aW9ucyByZWdhcmRpbmcgbWV0YWNsYXNzCisgICB1c2FnZSwgYXMgbXVsdGlwbGUgaW5oZXJpdGFuY2UgbWF5IGxlYWQgdG8gbWV0YWNsYXNzIGNvbmZsaWN0cy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogVGhlIDptb2Q6YGFiY2AgbW9kdWxlIGFsc28gcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBkZWNvcmF0b3JzOgogCiAuLiBkZWNvcmF0b3I6OiBhYnN0cmFjdG1ldGhvZApAQCAtMjk1LDYgKzMxMiwxOSBAQAogICAgICAgIDpmdW5jOmBhYnN0cmFjdG1ldGhvZGAsIG1ha2luZyB0aGlzIGRlY29yYXRvciByZWR1bmRhbnQuCiAKIAorVGhlIDptb2Q6YGFiY2AgbW9kdWxlIGFsc28gcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6CisKKy4uIGZ1bmN0aW9uOjogZ2V0X2NhY2hlX3Rva2VuKCkKKworICAgUmV0dXJucyB0aGUgY3VycmVudCBhYnN0cmFjdCBiYXNlIGNsYXNzIGNhY2hlIHRva2VuLgorCisgICBUaGUgdG9rZW4gaXMgYW4gb3BhcXVlIG9iamVjdCAodGhhdCBzdXBwb3J0cyBlcXVhbGl0eSB0ZXN0aW5nKSBpZGVudGlmeWluZworICAgdGhlIGN1cnJlbnQgdmVyc2lvbiBvZiB0aGUgYWJzdHJhY3QgYmFzZSBjbGFzcyBjYWNoZSBmb3IgdmlydHVhbCBzdWJjbGFzc2VzLgorICAgVGhlIHRva2VuIGNoYW5nZXMgd2l0aCBldmVyeSBjYWxsIHRvIDptZXRoOmBBQkNNZXRhLnJlZ2lzdGVyYCBvbiBhbnkgQUJDLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiAuLiBydWJyaWM6OiBGb290bm90ZXMKIAogLi4gWyNdIEMrKyBwcm9ncmFtbWVycyBzaG91bGQgbm90ZSB0aGF0IFB5dGhvbidzIHZpcnR1YWwgYmFzZSBjbGFzcwpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvYWlmYy5yc3QgYi9Eb2MvbGlicmFyeS9haWZjLnJzdAppbmRleCA4YTM1NDFiLi42ZmJjZjI4IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9haWZjLnJzdAorKysgYi9Eb2MvbGlicmFyeS9haWZjLnJzdApAQCAtMzAsOCArMzAsOCBAQAogc2FtcGxlZC4gIFRoZSBudW1iZXIgb2YgY2hhbm5lbHMgaW5kaWNhdGUgaWYgdGhlIGF1ZGlvIGlzIG1vbm8sIHN0ZXJlbywgb3IKIHF1YWRyby4gIEVhY2ggZnJhbWUgY29uc2lzdHMgb2Ygb25lIHNhbXBsZSBwZXIgY2hhbm5lbC4gIFRoZSBzYW1wbGUgc2l6ZSBpcyB0aGUKIHNpemUgaW4gYnl0ZXMgb2YgZWFjaCBzYW1wbGUuICBUaHVzIGEgZnJhbWUgY29uc2lzdHMgb2YKLSpuY2hhbm5lbHMqXCpcICpzYW1wbGVzaXplKiBieXRlcywgYW5kIGEgc2Vjb25kJ3Mgd29ydGggb2YgYXVkaW8gY29uc2lzdHMgb2YKLSpuY2hhbm5lbHMqXCpcICpzYW1wbGVzaXplKlwqXCAqZnJhbWVyYXRlKiBieXRlcy4KK2BgbmNoYW5uZWxzICogc2FtcGxlc2l6ZWBgIGJ5dGVzLCBhbmQgYSBzZWNvbmQncyB3b3J0aCBvZiBhdWRpbyBjb25zaXN0cyBvZgorYGBuY2hhbm5lbHMgKiBzYW1wbGVzaXplICogZnJhbWVyYXRlYGAgYnl0ZXMuCiAKIEZvciBleGFtcGxlLCBDRCBxdWFsaXR5IGF1ZGlvIGhhcyBhIHNhbXBsZSBzaXplIG9mIHR3byBieXRlcyAoMTYgYml0cyksIHVzZXMgdHdvCiBjaGFubmVscyAoc3RlcmVvKSBhbmQgaGFzIGEgZnJhbWUgcmF0ZSBvZiA0NCwxMDAgZnJhbWVzL3NlY29uZC4gIFRoaXMgZ2l2ZXMgYQpAQCAtNTEsNiArNTEsMTEgQEAKICAgIHVzZWQgZm9yIHdyaXRpbmcsIHRoZSBmaWxlIG9iamVjdCBzaG91bGQgYmUgc2Vla2FibGUsIHVubGVzcyB5b3Uga25vdyBhaGVhZCBvZgogICAgdGltZSBob3cgbWFueSBzYW1wbGVzIHlvdSBhcmUgZ29pbmcgdG8gd3JpdGUgaW4gdG90YWwgYW5kIHVzZQogICAgOm1ldGg6YHdyaXRlZnJhbWVzcmF3YCBhbmQgOm1ldGg6YHNldG5mcmFtZXNgLgorICAgVGhlIDpmdW5jOmAub3BlbmAgZnVuY3Rpb24gbWF5IGJlIHVzZWQgaW4gYSA6a2V5d29yZDpgd2l0aGAgc3RhdGVtZW50LiAgV2hlbgorICAgdGhlIDprZXl3b3JkOmB3aXRoYCBibG9jayBjb21wbGV0ZXMsIHRoZSA6bWV0aDpgfmFpZmMuY2xvc2VgIG1ldGhvZCBpcyBjYWxsZWQuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBTdXBwb3J0IGZvciB0aGUgOmtleXdvcmQ6YHdpdGhgIHN0YXRlbWVudCB3YXMgYWRkZWQuCiAKIE9iamVjdHMgcmV0dXJuZWQgYnkgOmZ1bmM6YC5vcGVuYCB3aGVuIGEgZmlsZSBpcyBvcGVuZWQgZm9yIHJlYWRpbmcgaGF2ZSB0aGUKIGZvbGxvd2luZyBtZXRob2RzOgpAQCAtOTIsNyArOTcsOSBAQAogCiAuLiBtZXRob2Q6OiBhaWZjLmdldHBhcmFtcygpCiAKLSAgIFJldHVybiBhIHR1cGxlIGNvbnNpc3Rpbmcgb2YgYWxsIG9mIHRoZSBhYm92ZSB2YWx1ZXMgaW4gdGhlIGFib3ZlIG9yZGVyLgorICAgUmV0dXJucyBhIDpmdW5jOmB+Y29sbGVjdGlvbnMubmFtZWR0dXBsZWAgYGAobmNoYW5uZWxzLCBzYW1wd2lkdGgsCisgICBmcmFtZXJhdGUsIG5mcmFtZXMsIGNvbXB0eXBlLCBjb21wbmFtZSlgYCwgZXF1aXZhbGVudCB0byBvdXRwdXQgb2YgdGhlCisgICA6bWV0aDpgZ2V0XCpgIG1ldGhvZHMuCiAKIAogLi4gbWV0aG9kOjogYWlmYy5nZXRtYXJrZXJzKCkKQEAgLTIxOCwxMiArMjI1LDE4IEBACiAgICBXcml0ZSBkYXRhIHRvIHRoZSBvdXRwdXQgZmlsZS4gIFRoaXMgbWV0aG9kIGNhbiBvbmx5IGJlIGNhbGxlZCBhZnRlciB0aGUgYXVkaW8KICAgIGZpbGUgcGFyYW1ldGVycyBoYXZlIGJlZW4gc2V0LgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgQW55IDp0ZXJtOmBieXRlcy1saWtlIG9iamVjdGAgaXMgbm93IGFjY2VwdGVkLgorCiAKIC4uIG1ldGhvZDo6IGFpZmMud3JpdGVmcmFtZXNyYXcoZGF0YSkKIAogICAgTGlrZSA6bWV0aDpgd3JpdGVmcmFtZXNgLCBleGNlcHQgdGhhdCB0aGUgaGVhZGVyIG9mIHRoZSBhdWRpbyBmaWxlIGlzIG5vdAogICAgdXBkYXRlZC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIEFueSA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgIGlzIG5vdyBhY2NlcHRlZC4KKwogCiAuLiBtZXRob2Q6OiBhaWZjLmNsb3NlKCkKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvYWxsb3MucnN0IGIvRG9jL2xpYnJhcnkvYWxsb3MucnN0CmluZGV4IGJmOTE3MTcuLmY3MTA1ZDggMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2FsbG9zLnJzdAorKysgYi9Eb2MvbGlicmFyeS9hbGxvcy5yc3QKQEAgLTE2LDcgKzE2LDYgQEAKICAgIGlvLnJzdAogICAgdGltZS5yc3QKICAgIGFyZ3BhcnNlLnJzdAotICAgb3B0cGFyc2UucnN0CiAgICBnZXRvcHQucnN0CiAgICBsb2dnaW5nLnJzdAogICAgbG9nZ2luZy5jb25maWcucnN0CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9hcmdwYXJzZS5yc3QgYi9Eb2MvbGlicmFyeS9hcmdwYXJzZS5yc3QKaW5kZXggZGM5YzI3Zi4uZDkwNzIwMyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvYXJncGFyc2UucnN0CisrKyBiL0RvYy9saWJyYXJ5L2FyZ3BhcnNlLnJzdApAQCAtOTY4LDkgKzk2OCw5IEBACiBgYHR5cGVgYCBhcmd1bWVudCBpcyBhcHBsaWVkIHRvIGRlZmF1bHQgYXJndW1lbnRzLgogCiBUbyBlYXNlIHRoZSB1c2Ugb2YgdmFyaW91cyB0eXBlcyBvZiBmaWxlcywgdGhlIGFyZ3BhcnNlIG1vZHVsZSBwcm92aWRlcyB0aGUKLWZhY3RvcnkgRmlsZVR5cGUgd2hpY2ggdGFrZXMgdGhlIGBgbW9kZT1gYCBhbmQgYGBidWZzaXplPWBgIGFyZ3VtZW50cyBvZiB0aGUKLTpmdW5jOmBvcGVuYCBmdW5jdGlvbi4gIEZvciBleGFtcGxlLCBgYEZpbGVUeXBlKCd3JylgYCBjYW4gYmUgdXNlZCB0byBjcmVhdGUgYQotd3JpdGFibGUgZmlsZTo6CitmYWN0b3J5IEZpbGVUeXBlIHdoaWNoIHRha2VzIHRoZSBgYG1vZGU9YGAsIGBgYnVmc2l6ZT1gYCwgYGBlbmNvZGluZz1gYCBhbmQKK2BgZXJyb3JzPWBgIGFyZ3VtZW50cyBvZiB0aGUgOmZ1bmM6YG9wZW5gIGZ1bmN0aW9uLiAgRm9yIGV4YW1wbGUsCitgYEZpbGVUeXBlKCd3JylgYCBjYW4gYmUgdXNlZCB0byBjcmVhdGUgYSB3cml0YWJsZSBmaWxlOjoKIAogICAgPj4+IHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKICAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCdiYXInLCB0eXBlPWFyZ3BhcnNlLkZpbGVUeXBlKCd3JykpCkBAIC0xMjM1LDE2ICsxMjM1LDE2IEBACiBBY3Rpb24gY2xhc3NlcyBpbXBsZW1lbnQgdGhlIEFjdGlvbiBBUEksIGEgY2FsbGFibGUgd2hpY2ggcmV0dXJucyBhIGNhbGxhYmxlCiB3aGljaCBwcm9jZXNzZXMgYXJndW1lbnRzIGZyb20gdGhlIGNvbW1hbmQtbGluZS4gQW55IG9iamVjdCB3aGljaCBmb2xsb3dzCiB0aGlzIEFQSSBtYXkgYmUgcGFzc2VkIGFzIHRoZSBgYGFjdGlvbmBgIHBhcmFtZXRlciB0bwotOm1ldGhvZDpgYWRkX2FyZ3VtZW50YC4KKzptZXRoOmBhZGRfYXJndW1lbnRgLgogCi0uLiBjbGFzczo6IEFjdGlvbihvcHRpb25fc3RyaW5ncywgZGVzdCwgbmFyZ3M9Tm9uZSwgY29uc3Q9Tm9uZSwgZGVmYXVsdD1Ob25lLAotICAgICAgICAgICAgICAgICAgdHlwZT1Ob25lLCBjaG9pY2VzPU5vbmUsIHJlcXVpcmVkPUZhbHNlLCBoZWxwPU5vbmUsCisuLiBjbGFzczo6IEFjdGlvbihvcHRpb25fc3RyaW5ncywgZGVzdCwgbmFyZ3M9Tm9uZSwgY29uc3Q9Tm9uZSwgZGVmYXVsdD1Ob25lLCBcCisgICAgICAgICAgICAgICAgICB0eXBlPU5vbmUsIGNob2ljZXM9Tm9uZSwgcmVxdWlyZWQ9RmFsc2UsIGhlbHA9Tm9uZSwgXAogICAgICAgICAgICAgICAgICAgbWV0YXZhcj1Ob25lKQogCiBBY3Rpb24gb2JqZWN0cyBhcmUgdXNlZCBieSBhbiBBcmd1bWVudFBhcnNlciB0byByZXByZXNlbnQgdGhlIGluZm9ybWF0aW9uCiBuZWVkZWQgdG8gcGFyc2UgYSBzaW5nbGUgYXJndW1lbnQgZnJvbSBvbmUgb3IgbW9yZSBzdHJpbmdzIGZyb20gdGhlCiBjb21tYW5kIGxpbmUuIFRoZSBBY3Rpb24gY2xhc3MgbXVzdCBhY2NlcHQgdGhlIHR3byBwb3NpdGlvbmFsIGFyZ3VtZW50cwotcGx1cyBhbnkga2V5d29yZCBhcmd1bWVudHMgcGFzc2VkIHRvIDptZXRob2Q6YEFyZ3VtZW50UGFyc2VyLmFkZF9hcmd1bWVudGAKK3BsdXMgYW55IGtleXdvcmQgYXJndW1lbnRzIHBhc3NlZCB0byA6bWV0aDpgQXJndW1lbnRQYXJzZXIuYWRkX2FyZ3VtZW50YAogZXhjZXB0IGZvciB0aGUgYGBhY3Rpb25gYCBpdHNlbGYuCiAKIEluc3RhbmNlcyBvZiBBY3Rpb24gKG9yIHJldHVybiB2YWx1ZSBvZiBhbnkgY2FsbGFibGUgdG8gdGhlIGBgYWN0aW9uYGAKQEAgLTE1MjEsMTIgKzE1MjEsMTUgQEAKICAgICogcGFyc2VyX2NsYXNzIC0gY2xhc3Mgd2hpY2ggd2lsbCBiZSB1c2VkIHRvIGNyZWF0ZSBzdWItcGFyc2VyIGluc3RhbmNlcywgYnkKICAgICAgZGVmYXVsdCB0aGUgY2xhc3Mgb2YgdGhlIGN1cnJlbnQgcGFyc2VyIChlLmcuIEFyZ3VtZW50UGFyc2VyKQogCi0gICAqIGRlc3QgLSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUgdW5kZXIgd2hpY2ggc3ViLWNvbW1hbmQgbmFtZSB3aWxsIGJlCisgICAqIGFjdGlvbl8gLSB0aGUgYmFzaWMgdHlwZSBvZiBhY3Rpb24gdG8gYmUgdGFrZW4gd2hlbiB0aGlzIGFyZ3VtZW50IGlzCisgICAgIGVuY291bnRlcmVkIGF0IHRoZSBjb21tYW5kIGxpbmUKKworICAgKiBkZXN0XyAtIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZSB1bmRlciB3aGljaCBzdWItY29tbWFuZCBuYW1lIHdpbGwgYmUKICAgICAgc3RvcmVkOyBieSBkZWZhdWx0IE5vbmUgYW5kIG5vIHZhbHVlIGlzIHN0b3JlZAogCi0gICAqIGhlbHAgLSBoZWxwIGZvciBzdWItcGFyc2VyIGdyb3VwIGluIGhlbHAgb3V0cHV0LCBieSBkZWZhdWx0IE5vbmUKKyAgICogaGVscF8gLSBoZWxwIGZvciBzdWItcGFyc2VyIGdyb3VwIGluIGhlbHAgb3V0cHV0LCBieSBkZWZhdWx0IE5vbmUKIAotICAgKiBtZXRhdmFyIC0gc3RyaW5nIHByZXNlbnRpbmcgYXZhaWxhYmxlIHN1Yi1jb21tYW5kcyBpbiBoZWxwOyBieSBkZWZhdWx0IGl0CisgICAqIG1ldGF2YXJfIC0gc3RyaW5nIHByZXNlbnRpbmcgYXZhaWxhYmxlIHN1Yi1jb21tYW5kcyBpbiBoZWxwOyBieSBkZWZhdWx0IGl0CiAgICAgIGlzIE5vbmUgYW5kIHByZXNlbnRzIHN1Yi1jb21tYW5kcyBpbiBmb3JtIHtjbWQxLCBjbWQyLCAuLn0KIAogICAgU29tZSBleGFtcGxlIHVzYWdlOjoKQEAgLTE2ODIsMTcgKzE2ODUsMTkgQEAKIEZpbGVUeXBlIG9iamVjdHMKIF5eXl5eXl5eXl5eXl5eXl4KIAotLi4gY2xhc3M6OiBGaWxlVHlwZShtb2RlPSdyJywgYnVmc2l6ZT1Ob25lKQorLi4gY2xhc3M6OiBGaWxlVHlwZShtb2RlPSdyJywgYnVmc2l6ZT0tMSwgZW5jb2Rpbmc9Tm9uZSwgZXJyb3JzPU5vbmUpCiAKICAgIFRoZSA6Y2xhc3M6YEZpbGVUeXBlYCBmYWN0b3J5IGNyZWF0ZXMgb2JqZWN0cyB0aGF0IGNhbiBiZSBwYXNzZWQgdG8gdGhlIHR5cGUKICAgIGFyZ3VtZW50IG9mIDptZXRoOmBBcmd1bWVudFBhcnNlci5hZGRfYXJndW1lbnRgLiAgQXJndW1lbnRzIHRoYXQgaGF2ZQotICAgOmNsYXNzOmBGaWxlVHlwZWAgb2JqZWN0cyBhcyB0aGVpciB0eXBlIHdpbGwgb3BlbiBjb21tYW5kLWxpbmUgYXJndW1lbnRzIGFzIGZpbGVzCi0gICB3aXRoIHRoZSByZXF1ZXN0ZWQgbW9kZXMgYW5kIGJ1ZmZlciBzaXplczo6CisgICA6Y2xhc3M6YEZpbGVUeXBlYCBvYmplY3RzIGFzIHRoZWlyIHR5cGUgd2lsbCBvcGVuIGNvbW1hbmQtbGluZSBhcmd1bWVudHMgYXMKKyAgIGZpbGVzIHdpdGggdGhlIHJlcXVlc3RlZCBtb2RlcywgYnVmZmVyIHNpemVzLCBlbmNvZGluZ3MgYW5kIGVycm9yIGhhbmRsaW5nCisgICAoc2VlIHRoZSA6ZnVuYzpgb3BlbmAgZnVuY3Rpb24gZm9yIG1vcmUgZGV0YWlscyk6OgogCiAgICAgICA+Pj4gcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQotICAgICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJy0tb3V0cHV0JywgdHlwZT1hcmdwYXJzZS5GaWxlVHlwZSgnd2InLCAwKSkKLSAgICAgID4+PiBwYXJzZXIucGFyc2VfYXJncyhbJy0tb3V0cHV0JywgJ291dCddKQotICAgICAgTmFtZXNwYWNlKG91dHB1dD08X2lvLkJ1ZmZlcmVkV3JpdGVyIG5hbWU9J291dCc+KQorICAgICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJy0tcmF3JywgdHlwZT1hcmdwYXJzZS5GaWxlVHlwZSgnd2InLCAwKSkKKyAgICAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCdvdXQnLCB0eXBlPWFyZ3BhcnNlLkZpbGVUeXBlKCd3JywgZW5jb2Rpbmc9J1VURi04JykpCisgICAgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoWyctLXJhdycsICdyYXcuZGF0JywgJ2ZpbGUudHh0J10pCisgICAgICBOYW1lc3BhY2Uob3V0PTxfaW8uVGV4dElPV3JhcHBlciBuYW1lPSdmaWxlLnR4dCcgbW9kZT0ndycgZW5jb2Rpbmc9J1VURi04Jz4sIHJhdz08X2lvLkZpbGVJTyBuYW1lPSdyYXcuZGF0JyBtb2RlPSd3Yic+KQogCiAgICBGaWxlVHlwZSBvYmplY3RzIHVuZGVyc3RhbmQgdGhlIHBzZXVkby1hcmd1bWVudCBgYCctJ2BgIGFuZCBhdXRvbWF0aWNhbGx5CiAgICBjb252ZXJ0IHRoaXMgaW50byBgYHN5cy5zdGRpbmBgIGZvciByZWFkYWJsZSA6Y2xhc3M6YEZpbGVUeXBlYCBvYmplY3RzIGFuZApAQCAtMTcwMyw2ICsxNzA4LDkgQEAKICAgICAgID4+PiBwYXJzZXIucGFyc2VfYXJncyhbJy0nXSkKICAgICAgIE5hbWVzcGFjZShpbmZpbGU9PF9pby5UZXh0SU9XcmFwcGVyIG5hbWU9JzxzdGRpbj4nIGVuY29kaW5nPSdVVEYtOCc+KQogCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKyAgICAgIFRoZSAqZW5jb2RpbmdzKiBhbmQgKmVycm9ycyoga2V5d29yZCBhcmd1bWVudHMuCisKIAogQXJndW1lbnQgZ3JvdXBzCiBeXl5eXl5eXl5eXl5eXl4KQEAgLTE5MDIsNyArMTkxMCw3IEBACiAKICAgIEFyZ3VtZW50cyB0aGF0IGFyZSByZWFkIGZyb20gYSBmaWxlIChzZWUgdGhlICpmcm9tZmlsZV9wcmVmaXhfY2hhcnMqCiAgICBrZXl3b3JkIGFyZ3VtZW50IHRvIHRoZSA6Y2xhc3M6YEFyZ3VtZW50UGFyc2VyYCBjb25zdHJ1Y3RvcikgYXJlIHJlYWQgb25lCi0gICBhcmd1bWVudCBwZXIgbGluZS4gOm1ldGg6YGNvbnZlcnRfYXJnX2xpbmVfdG9fYXJnc2AgY2FuIGJlIG92ZXJyaWRlbiBmb3IKKyAgIGFyZ3VtZW50IHBlciBsaW5lLiA6bWV0aDpgY29udmVydF9hcmdfbGluZV90b19hcmdzYCBjYW4gYmUgb3ZlcnJpZGRlbiBmb3IKICAgIGZhbmNpZXIgcmVhZGluZy4KIAogICAgVGhpcyBtZXRob2QgdGFrZXMgYSBzaW5nbGUgYXJndW1lbnQgKmFyZ19saW5lKiB3aGljaCBpcyBhIHN0cmluZyByZWFkIGZyb20KQEAgLTE5MTMsMTAgKzE5MjEsNyBAQAogICAgYXMgYW4gYXJndW1lbnQ6OgogCiAgICAgZGVmIGNvbnZlcnRfYXJnX2xpbmVfdG9fYXJncyhzZWxmLCBhcmdfbGluZSk6Ci0gICAgICAgIGZvciBhcmcgaW4gYXJnX2xpbmUuc3BsaXQoKToKLSAgICAgICAgICAgIGlmIG5vdCBhcmcuc3RyaXAoKToKLSAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgeWllbGQgYXJnCisgICAgICAgIHJldHVybiBhcmdfbGluZS5zcGxpdCgpCiAKIAogRXhpdGluZyBtZXRob2RzCkBAIC0xOTQ0LDYgKzE5NDksMTYgQEAKIDptb2Q6YG9wdHBhcnNlYCBoYWQgZWl0aGVyIGJlZW4gY29weS1wYXN0ZWQgb3ZlciBvciBtb25rZXktcGF0Y2hlZCwgaXQgbm8KIGxvbmdlciBzZWVtZWQgcHJhY3RpY2FsIHRvIHRyeSB0byBtYWludGFpbiB0aGUgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuCiAKK1RoZSA6bW9kOmBhcmdwYXJzZWAgbW9kdWxlIGltcHJvdmVzIG9uIHRoZSBzdGFuZGFyZCBsaWJyYXJ5IDptb2Q6YG9wdHBhcnNlYAorbW9kdWxlIGluIGEgbnVtYmVyIG9mIHdheXMgaW5jbHVkaW5nOgorCisqIEhhbmRsaW5nIHBvc2l0aW9uYWwgYXJndW1lbnRzLgorKiBTdXBwb3J0aW5nIHN1Yi1jb21tYW5kcy4KKyogQWxsb3dpbmcgYWx0ZXJuYXRpdmUgb3B0aW9uIHByZWZpeGVzIGxpa2UgYGArYGAgYW5kIGBgL2BgLgorKiBIYW5kbGluZyB6ZXJvLW9yLW1vcmUgYW5kIG9uZS1vci1tb3JlIHN0eWxlIGFyZ3VtZW50cy4KKyogUHJvZHVjaW5nIG1vcmUgaW5mb3JtYXRpdmUgdXNhZ2UgbWVzc2FnZXMuCisqIFByb3ZpZGluZyBhIG11Y2ggc2ltcGxlciBpbnRlcmZhY2UgZm9yIGN1c3RvbSBgYHR5cGVgYCBhbmQgYGBhY3Rpb25gYC4KKwogQSBwYXJ0aWFsIHVwZ3JhZGUgcGF0aCBmcm9tIDptb2Q6YG9wdHBhcnNlYCB0byA6bW9kOmBhcmdwYXJzZWA6CiAKICogUmVwbGFjZSBhbGwgOm1ldGg6YG9wdHBhcnNlLk9wdGlvblBhcnNlci5hZGRfb3B0aW9uYCBjYWxscyB3aXRoCkBAIC0xOTY5LDQgKzE5ODQsNCBAQAogICBgYCUoZGVmYXVsdClzYGAgYW5kIGBgJShwcm9nKXNgYC4KIAogKiBSZXBsYWNlIHRoZSBPcHRpb25QYXJzZXIgY29uc3RydWN0b3IgYGB2ZXJzaW9uYGAgYXJndW1lbnQgd2l0aCBhIGNhbGwgdG8KLSAgYGBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXZlcnNpb24nLCBhY3Rpb249J3ZlcnNpb24nLCB2ZXJzaW9uPSc8dGhlIHZlcnNpb24+JylgYAorICBgYHBhcnNlci5hZGRfYXJndW1lbnQoJy0tdmVyc2lvbicsIGFjdGlvbj0ndmVyc2lvbicsIHZlcnNpb249Jzx0aGUgdmVyc2lvbj4nKWBgLgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvYXN0LnJzdCBiL0RvYy9saWJyYXJ5L2FzdC5yc3QKaW5kZXggZGFmMjhkZS4uNTM3M2FjZCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvYXN0LnJzdAorKysgYi9Eb2MvbGlicmFyeS9hc3QucnN0CkBAIC0xMDQsNyArMTA0LDcgQEAKIDptb2Q6YGFzdGAgSGVscGVycwogLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUFwYXJ0IGZyb20gdGhlIG5vZGUgY2xhc3NlcywgOm1vZDpgYXN0YCBtb2R1bGUgZGVmaW5lcyB0aGVzZSB1dGlsaXR5IGZ1bmN0aW9ucworQXBhcnQgZnJvbSB0aGUgbm9kZSBjbGFzc2VzLCB0aGUgOm1vZDpgYXN0YCBtb2R1bGUgZGVmaW5lcyB0aGVzZSB1dGlsaXR5IGZ1bmN0aW9ucwogYW5kIGNsYXNzZXMgZm9yIHRyYXZlcnNpbmcgYWJzdHJhY3Qgc3ludGF4IHRyZWVzOgogCiAuLiBmdW5jdGlvbjo6IHBhcnNlKHNvdXJjZSwgZmlsZW5hbWU9Jzx1bmtub3duPicsIG1vZGU9J2V4ZWMnKQpAQCAtMTE1LDEzICsxMTUsMTUgQEAKIAogLi4gZnVuY3Rpb246OiBsaXRlcmFsX2V2YWwobm9kZV9vcl9zdHJpbmcpCiAKLSAgIFNhZmVseSBldmFsdWF0ZSBhbiBleHByZXNzaW9uIG5vZGUgb3IgYSBzdHJpbmcgY29udGFpbmluZyBhIFB5dGhvbgotICAgZXhwcmVzc2lvbi4gIFRoZSBzdHJpbmcgb3Igbm9kZSBwcm92aWRlZCBtYXkgb25seSBjb25zaXN0IG9mIHRoZSBmb2xsb3dpbmcKLSAgIFB5dGhvbiBsaXRlcmFsIHN0cnVjdHVyZXM6IHN0cmluZ3MsIGJ5dGVzLCBudW1iZXJzLCB0dXBsZXMsIGxpc3RzLCBkaWN0cywKLSAgIHNldHMsIGJvb2xlYW5zLCBhbmQgYGBOb25lYGAuCisgICBTYWZlbHkgZXZhbHVhdGUgYW4gZXhwcmVzc2lvbiBub2RlIG9yIGEgc3RyaW5nIGNvbnRhaW5pbmcgYSBQeXRob24gbGl0ZXJhbCBvcgorICAgY29udGFpbmVyIGRpc3BsYXkuICBUaGUgc3RyaW5nIG9yIG5vZGUgcHJvdmlkZWQgbWF5IG9ubHkgY29uc2lzdCBvZiB0aGUKKyAgIGZvbGxvd2luZyBQeXRob24gbGl0ZXJhbCBzdHJ1Y3R1cmVzOiBzdHJpbmdzLCBieXRlcywgbnVtYmVycywgdHVwbGVzLCBsaXN0cywKKyAgIGRpY3RzLCBzZXRzLCBib29sZWFucywgYW5kIGBgTm9uZWBgLgogCi0gICBUaGlzIGNhbiBiZSB1c2VkIGZvciBzYWZlbHkgZXZhbHVhdGluZyBzdHJpbmdzIGNvbnRhaW5pbmcgUHl0aG9uIGV4cHJlc3Npb25zCi0gICBmcm9tIHVudHJ1c3RlZCBzb3VyY2VzIHdpdGhvdXQgdGhlIG5lZWQgdG8gcGFyc2UgdGhlIHZhbHVlcyBvbmVzZWxmLgorICAgVGhpcyBjYW4gYmUgdXNlZCBmb3Igc2FmZWx5IGV2YWx1YXRpbmcgc3RyaW5ncyBjb250YWluaW5nIFB5dGhvbiB2YWx1ZXMgZnJvbQorICAgdW50cnVzdGVkIHNvdXJjZXMgd2l0aG91dCB0aGUgbmVlZCB0byBwYXJzZSB0aGUgdmFsdWVzIG9uZXNlbGYuICBJdCBpcyBub3QKKyAgIGNhcGFibGUgb2YgZXZhbHVhdGluZyBhcmJpdHJhcmlseSBjb21wbGV4IGV4cHJlc3Npb25zLCBmb3IgZXhhbXBsZSBpbnZvbHZpbmcKKyAgIG9wZXJhdG9ycyBvciBpbmRleGluZy4KIAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKICAgICAgIE5vdyBhbGxvd3MgYnl0ZXMgYW5kIHNldCBsaXRlcmFscy4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2FzeW5jaGF0LnJzdCBiL0RvYy9saWJyYXJ5L2FzeW5jaGF0LnJzdAppbmRleCBhZGJkM2JlLi5jNmZhMDYxIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9hc3luY2hhdC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvYXN5bmNoYXQucnN0CkBAIC0xMCw2ICsxMCwxMSBAQAogCiAtLS0tLS0tLS0tLS0tLQogCisuLiBub3RlOjoKKworICAgVGhpcyBtb2R1bGUgZXhpc3RzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBvbmx5LiAgRm9yIG5ldyBjb2RlIHdlCisgICByZWNvbW1lbmQgdXNpbmcgOm1vZDpgYXN5bmNpb2AuCisKIFRoaXMgbW9kdWxlIGJ1aWxkcyBvbiB0aGUgOm1vZDpgYXN5bmNvcmVgIGluZnJhc3RydWN0dXJlLCBzaW1wbGlmeWluZwogYXN5bmNocm9ub3VzIGNsaWVudHMgYW5kIHNlcnZlcnMgYW5kIG1ha2luZyBpdCBlYXNpZXIgdG8gaGFuZGxlIHByb3RvY29scwogd2hvc2UgZWxlbWVudHMgYXJlIHRlcm1pbmF0ZWQgYnkgYXJiaXRyYXJ5IHN0cmluZ3MsIG9yIGFyZSBvZiB2YXJpYWJsZSBsZW5ndGguCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9hc3luY2lvLWRldi5yc3QgYi9Eb2MvbGlicmFyeS9hc3luY2lvLWRldi5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQxZjc5NQotLS0gL2Rldi9udWxsCisrKyBiL0RvYy9saWJyYXJ5L2FzeW5jaW8tZGV2LnJzdApAQCAtMCwwICsxLDQwMiBAQAorLi4gY3VycmVudG1vZHVsZTo6IGFzeW5jaW8KKworLi4gX2FzeW5jaW8tZGV2OgorCitEZXZlbG9wIHdpdGggYXN5bmNpbworPT09PT09PT09PT09PT09PT09PT0KKworQXN5bmNocm9ub3VzIHByb2dyYW1taW5nIGlzIGRpZmZlcmVudCB0aGFuIGNsYXNzaWNhbCAic2VxdWVudGlhbCIgcHJvZ3JhbW1pbmcuCitUaGlzIHBhZ2UgbGlzdHMgY29tbW9uIHRyYXBzIGFuZCBleHBsYWlucyBob3cgdG8gYXZvaWQgdGhlbS4KKworCisuLiBfYXN5bmNpby1kZWJ1Zy1tb2RlOgorCitEZWJ1ZyBtb2RlIG9mIGFzeW5jaW8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgaW1wbGVtZW50YXRpb24gb2YgOm1vZDpgYXN5bmNpb2AgaGFzIGJlZW4gd3JpdHRlbiBmb3IgcGVyZm9ybWFuY2UuCitJbiBvcmRlciB0byBlYXNlIHRoZSBkZXZlbG9wbWVudCBvZiBhc3luY2hyb25vdXMgY29kZSwgeW91IG1heSB3aXNoIHRvCitlbmFibGUgKmRlYnVnIG1vZGUqLgorCitUbyBlbmFibGUgYWxsIGRlYnVnIGNoZWNrcyBmb3IgYW4gYXBwbGljYXRpb246CisKKyogRW5hYmxlIHRoZSBhc3luY2lvIGRlYnVnIG1vZGUgZ2xvYmFsbHkgYnkgc2V0dGluZyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUKKyAgOmVudnZhcjpgUFlUSE9OQVNZTkNJT0RFQlVHYCB0byBgYDFgYCwgb3IgYnkgY2FsbGluZyA6bWV0aDpgQmFzZUV2ZW50TG9vcC5zZXRfZGVidWdgLgorKiBTZXQgdGhlIGxvZyBsZXZlbCBvZiB0aGUgOnJlZjpgYXN5bmNpbyBsb2dnZXIgPGFzeW5jaW8tbG9nZ2VyPmAgdG8KKyAgOnB5OmRhdGE6YGxvZ2dpbmcuREVCVUdgLiBGb3IgZXhhbXBsZSwgY2FsbAorICBgYGxvZ2dpbmcuYmFzaWNDb25maWcobGV2ZWw9bG9nZ2luZy5ERUJVRylgYCBhdCBzdGFydHVwLgorKiBDb25maWd1cmUgdGhlIDptb2Q6YHdhcm5pbmdzYCBtb2R1bGUgdG8gZGlzcGxheSA6ZXhjOmBSZXNvdXJjZVdhcm5pbmdgCisgIHdhcm5pbmdzLiBGb3IgZXhhbXBsZSwgdXNlIHRoZSBgYC1XZGVmYXVsdGBgIGNvbW1hbmQgbGluZSBvcHRpb24gb2YgUHl0aG9uIHRvCisgIGRpc3BsYXkgdGhlbS4KKworRXhhbXBsZXMgZGVidWcgY2hlY2tzOgorCisqIExvZyA6cmVmOmBjb3JvdXRpbmVzIGRlZmluZWQgYnV0IG5ldmVyICJ5aWVsZGVkIGZyb20iCisgIDxhc3luY2lvLWNvcm91dGluZS1ub3Qtc2NoZWR1bGVkPmAKKyogOm1ldGg6YH5CYXNlRXZlbnRMb29wLmNhbGxfc29vbmAgYW5kIDptZXRoOmB+QmFzZUV2ZW50TG9vcC5jYWxsX2F0YCBtZXRob2RzCisgIHJhaXNlIGFuIGV4Y2VwdGlvbiBpZiB0aGV5IGFyZSBjYWxsZWQgZnJvbSB0aGUgd3JvbmcgdGhyZWFkLgorKiBMb2cgdGhlIGV4ZWN1dGlvbiB0aW1lIG9mIHRoZSBzZWxlY3RvcgorKiBMb2cgY2FsbGJhY2tzIHRha2luZyBtb3JlIHRoYW4gMTAwIG1zIHRvIGJlIGV4ZWN1dGVkLiBUaGUKKyAgOmF0dHI6YEJhc2VFdmVudExvb3Auc2xvd19jYWxsYmFja19kdXJhdGlvbmAgYXR0cmlidXRlIGlzIHRoZSBtaW5pbXVtCisgIGR1cmF0aW9uIGluIHNlY29uZHMgb2YgInNsb3ciIGNhbGxiYWNrcy4KKyogOmV4YzpgUmVzb3VyY2VXYXJuaW5nYCB3YXJuaW5ncyBhcmUgZW1pdHRlZCB3aGVuIHRyYW5zcG9ydHMgYW5kIGV2ZW50IGxvb3BzCisgIGFyZSA6cmVmOmBub3QgY2xvc2VkIGV4cGxpY2l0bHkgPGFzeW5jaW8tY2xvc2UtdHJhbnNwb3J0cz5gLgorCisuLiBzZWVhbHNvOjoKKworICAgVGhlIDptZXRoOmBCYXNlRXZlbnRMb29wLnNldF9kZWJ1Z2AgbWV0aG9kIGFuZCB0aGUgOnJlZjpgYXN5bmNpbyBsb2dnZXIKKyAgIDxhc3luY2lvLWxvZ2dlcj5gLgorCisKK0NhbmNlbGxhdGlvbgorLS0tLS0tLS0tLS0tCisKK0NhbmNlbGxhdGlvbiBvZiB0YXNrcyBpcyBub3QgY29tbW9uIGluIGNsYXNzaWMgcHJvZ3JhbW1pbmcuIEluIGFzeW5jaHJvbm91cworcHJvZ3JhbW1pbmcsIG5vdCBvbmx5IGl0IGlzIHNvbWV0aGluZyBjb21tb24sIGJ1dCB5b3UgaGF2ZSB0byBwcmVwYXJlIHlvdXIKK2NvZGUgdG8gaGFuZGxlIGl0LgorCitGdXR1cmVzIGFuZCB0YXNrcyBjYW4gYmUgY2FuY2VsbGVkIGV4cGxpY2l0bHkgd2l0aCB0aGVpciA6bWV0aDpgRnV0dXJlLmNhbmNlbGAKK21ldGhvZC4gVGhlIDpmdW5jOmB3YWl0X2ZvcmAgZnVuY3Rpb24gY2FuY2VscyB0aGUgd2FpdGVkIHRhc2sgd2hlbiB0aGUgdGltZW91dAorb2NjdXJzLiBUaGVyZSBhcmUgbWFueSBvdGhlciBjYXNlcyB3aGVyZSBhIHRhc2sgY2FuIGJlIGNhbmNlbGxlZCBpbmRpcmVjdGx5LgorCitEb24ndCBjYWxsIDptZXRoOmB+RnV0dXJlLnNldF9yZXN1bHRgIG9yIDptZXRoOmB+RnV0dXJlLnNldF9leGNlcHRpb25gIG1ldGhvZAorb2YgOmNsYXNzOmBGdXR1cmVgIGlmIHRoZSBmdXR1cmUgaXMgY2FuY2VsbGVkOiBpdCB3b3VsZCBmYWlsIHdpdGggYW4gZXhjZXB0aW9uLgorRm9yIGV4YW1wbGUsIHdyaXRlOjoKKworICAgIGlmIG5vdCBmdXQuY2FuY2VsbGVkKCk6CisgICAgICAgIGZ1dC5zZXRfcmVzdWx0KCdkb25lJykKKworRG9uJ3Qgc2NoZWR1bGUgZGlyZWN0bHkgYSBjYWxsIHRvIHRoZSA6bWV0aDpgfkZ1dHVyZS5zZXRfcmVzdWx0YCBvciB0aGUKKzptZXRoOmB+RnV0dXJlLnNldF9leGNlcHRpb25gIG1ldGhvZCBvZiBhIGZ1dHVyZSB3aXRoCis6bWV0aDpgQmFzZUV2ZW50TG9vcC5jYWxsX3Nvb25gOiB0aGUgZnV0dXJlIGNhbiBiZSBjYW5jZWxsZWQgYmVmb3JlIGl0cyBtZXRob2QKK2lzIGNhbGxlZC4KKworSWYgeW91IHdhaXQgZm9yIGEgZnV0dXJlLCB5b3Ugc2hvdWxkIGNoZWNrIGVhcmx5IGlmIHRoZSBmdXR1cmUgd2FzIGNhbmNlbGxlZCB0bworYXZvaWQgdXNlbGVzcyBvcGVyYXRpb25zLiBFeGFtcGxlOjoKKworICAgIEBjb3JvdXRpbmUKKyAgICBkZWYgc2xvd19vcGVyYXRpb24oZnV0KToKKyAgICAgICAgaWYgZnV0LmNhbmNlbGxlZCgpOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICMgLi4uIHNsb3cgY29tcHV0YXRpb24gLi4uCisgICAgICAgIHlpZWxkIGZyb20gZnV0CisgICAgICAgICMgLi4uCisKK1RoZSA6ZnVuYzpgc2hpZWxkYCBmdW5jdGlvbiBjYW4gYWxzbyBiZSB1c2VkIHRvIGlnbm9yZSBjYW5jZWxsYXRpb24uCisKKworLi4gX2FzeW5jaW8tbXVsdGl0aHJlYWRpbmc6CisKK0NvbmN1cnJlbmN5IGFuZCBtdWx0aXRocmVhZGluZworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FuIGV2ZW50IGxvb3AgcnVucyBpbiBhIHRocmVhZCBhbmQgZXhlY3V0ZXMgYWxsIGNhbGxiYWNrcyBhbmQgdGFza3MgaW4gdGhlIHNhbWUKK3RocmVhZC4gV2hpbGUgYSB0YXNrIGlzIHJ1bm5pbmcgaW4gdGhlIGV2ZW50IGxvb3AsIG5vIG90aGVyIHRhc2sgaXMgcnVubmluZyBpbgordGhlIHNhbWUgdGhyZWFkLiBCdXQgd2hlbiB0aGUgdGFzayB1c2VzIGBgeWllbGQgZnJvbWBgLCB0aGUgdGFzayBpcyBzdXNwZW5kZWQKK2FuZCB0aGUgZXZlbnQgbG9vcCBleGVjdXRlcyB0aGUgbmV4dCB0YXNrLgorCitUbyBzY2hlZHVsZSBhIGNhbGxiYWNrIGZyb20gYSBkaWZmZXJlbnQgdGhyZWFkLCB0aGUKKzptZXRoOmBCYXNlRXZlbnRMb29wLmNhbGxfc29vbl90aHJlYWRzYWZlYCBtZXRob2Qgc2hvdWxkIGJlIHVzZWQuIEV4YW1wbGU6OgorCisgICAgbG9vcC5jYWxsX3Nvb25fdGhyZWFkc2FmZShjYWxsYmFjaywgKmFyZ3MpCisKK01vc3QgYXN5bmNpbyBvYmplY3RzIGFyZSBub3QgdGhyZWFkIHNhZmUuIFlvdSBzaG91bGQgb25seSB3b3JyeSBpZiB5b3UgYWNjZXNzCitvYmplY3RzIG91dHNpZGUgdGhlIGV2ZW50IGxvb3AuIEZvciBleGFtcGxlLCB0byBjYW5jZWwgYSBmdXR1cmUsIGRvbid0IGNhbGwKK2RpcmVjdGx5IGl0cyA6bWV0aDpgRnV0dXJlLmNhbmNlbGAgbWV0aG9kLCBidXQ6OgorCisgICAgbG9vcC5jYWxsX3Nvb25fdGhyZWFkc2FmZShmdXQuY2FuY2VsKQorCitUbyBzY2hlZHVsZSBhIGNvcm91dGluZSBvYmplY3QgZnJvbSBhIGRpZmZlcmVudCB0aHJlYWQsIHRoZQorOmZ1bmM6YHJ1bl9jb3JvdXRpbmVfdGhyZWFkc2FmZWAgZnVuY3Rpb24gc2hvdWxkIGJlIHVzZWQuIEl0IHJldHVybnMgYQorOmNsYXNzOmBjb25jdXJyZW50LmZ1dHVyZXMuRnV0dXJlYCB0byBhY2Nlc3MgdGhlIHJlc3VsdDo6CisKKyAgICAgZnV0dXJlID0gYXN5bmNpby5ydW5fY29yb3V0aW5lX3RocmVhZHNhZmUoY29yb19mdW5jKCksIGxvb3ApCisgICAgIHJlc3VsdCA9IGZ1dHVyZS5yZXN1bHQodGltZW91dCkgICMgV2FpdCBmb3IgdGhlIHJlc3VsdCB3aXRoIGEgdGltZW91dAorCitUbyBoYW5kbGUgc2lnbmFscyBhbmQgdG8gZXhlY3V0ZSBzdWJwcm9jZXNzZXMsIHRoZSBldmVudCBsb29wIG11c3QgYmUgcnVuIGluCit0aGUgbWFpbiB0aHJlYWQuCisKK1RoZSA6bWV0aDpgQmFzZUV2ZW50TG9vcC5ydW5faW5fZXhlY3V0b3JgIG1ldGhvZCBjYW4gYmUgdXNlZCB3aXRoIGEgdGhyZWFkIHBvb2wKK2V4ZWN1dG9yIHRvIGV4ZWN1dGUgYSBjYWxsYmFjayBpbiBkaWZmZXJlbnQgdGhyZWFkIHRvIG5vdCBibG9jayB0aGUgdGhyZWFkIG9mCit0aGUgZXZlbnQgbG9vcC4KKworLi4gc2VlYWxzbzo6CisKKyAgIFRoZSA6cmVmOmBTeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyA8YXN5bmNpby1zeW5jPmAgc2VjdGlvbiBkZXNjcmliZXMgd2F5cworICAgdG8gc3luY2hyb25pemUgdGFza3MuCisKKyAgIFRoZSA6cmVmOmBTdWJwcm9jZXNzIGFuZCB0aHJlYWRzIDxhc3luY2lvLXN1YnByb2Nlc3MtdGhyZWFkcz5gIHNlY3Rpb24gbGlzdHMKKyAgIGFzeW5jaW8gbGltaXRhdGlvbnMgdG8gcnVuIHN1YnByb2Nlc3NlcyBmcm9tIGRpZmZlcmVudCB0aHJlYWRzLgorCisKKworCisuLiBfYXN5bmNpby1oYW5kbGUtYmxvY2tpbmc6CisKK0hhbmRsZSBibG9ja2luZyBmdW5jdGlvbnMgY29ycmVjdGx5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitCbG9ja2luZyBmdW5jdGlvbnMgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuIEZvciBleGFtcGxlLCBpZiBhIGZ1bmN0aW9uCitibG9ja3MgZm9yIDEgc2Vjb25kLCBvdGhlciB0YXNrcyBhcmUgZGVsYXllZCBieSAxIHNlY29uZCB3aGljaCBjYW4gaGF2ZSBhbgoraW1wb3J0YW50IGltcGFjdCBvbiByZWFjdGl2aXR5LgorCitGb3IgbmV0d29ya2luZyBhbmQgc3VicHJvY2Vzc2VzLCB0aGUgOm1vZDpgYXN5bmNpb2AgbW9kdWxlIHByb3ZpZGVzIGhpZ2gtbGV2ZWwKK0FQSXMgbGlrZSA6cmVmOmBwcm90b2NvbHMgPGFzeW5jaW8tcHJvdG9jb2w+YC4KKworQW4gZXhlY3V0b3IgY2FuIGJlIHVzZWQgdG8gcnVuIGEgdGFzayBpbiBhIGRpZmZlcmVudCB0aHJlYWQgb3IgZXZlbiBpbiBhCitkaWZmZXJlbnQgcHJvY2VzcywgdG8gbm90IGJsb2NrIHRoZSB0aHJlYWQgb2YgdGhlIGV2ZW50IGxvb3AuIFNlZSB0aGUKKzptZXRoOmBCYXNlRXZlbnRMb29wLnJ1bl9pbl9leGVjdXRvcmAgbWV0aG9kLgorCisuLiBzZWVhbHNvOjoKKworICAgVGhlIDpyZWY6YERlbGF5ZWQgY2FsbHMgPGFzeW5jaW8tZGVsYXllZC1jYWxscz5gIHNlY3Rpb24gZGV0YWlscyBob3cgdGhlCisgICBldmVudCBsb29wIGhhbmRsZXMgdGltZS4KKworCisuLiBfYXN5bmNpby1sb2dnZXI6CisKK0xvZ2dpbmcKKy0tLS0tLS0KKworVGhlIDptb2Q6YGFzeW5jaW9gIG1vZHVsZSBsb2dzIGluZm9ybWF0aW9uIHdpdGggdGhlIDptb2Q6YGxvZ2dpbmdgIG1vZHVsZSBpbgordGhlIGxvZ2dlciBgYCdhc3luY2lvJ2BgLgorCisKKy4uIF9hc3luY2lvLWNvcm91dGluZS1ub3Qtc2NoZWR1bGVkOgorCitEZXRlY3QgY29yb3V0aW5lIG9iamVjdHMgbmV2ZXIgc2NoZWR1bGVkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doZW4gYSBjb3JvdXRpbmUgZnVuY3Rpb24gaXMgY2FsbGVkIGFuZCBpdHMgcmVzdWx0IGlzIG5vdCBwYXNzZWQgdG8KKzpmdW5jOmBhc3luY2Agb3IgdG8gdGhlIDptZXRoOmBCYXNlRXZlbnRMb29wLmNyZWF0ZV90YXNrYCBtZXRob2QsIHRoZSBleGVjdXRpb24KK29mIHRoZSBjb3JvdXRpbmUgb2JqZWN0IHdpbGwgbmV2ZXIgYmUgc2NoZWR1bGVkIHdoaWNoIGlzIHByb2JhYmx5IGEgYnVnLgorOnJlZjpgRW5hYmxlIHRoZSBkZWJ1ZyBtb2RlIG9mIGFzeW5jaW8gPGFzeW5jaW8tZGVidWctbW9kZT5gIHRvIDpyZWY6YGxvZyBhCit3YXJuaW5nIDxhc3luY2lvLWxvZ2dlcj5gIHRvIGRldGVjdCBpdC4KKworRXhhbXBsZSB3aXRoIHRoZSBidWc6OgorCisgICAgaW1wb3J0IGFzeW5jaW8KKworICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgIGRlZiB0ZXN0KCk6CisgICAgICAgIHByaW50KCJuZXZlciBzY2hlZHVsZWQiKQorCisgICAgdGVzdCgpCisKK091dHB1dCBpbiBkZWJ1ZyBtb2RlOjoKKworICAgIENvcm91dGluZSB0ZXN0KCkgYXQgdGVzdC5weTozIHdhcyBuZXZlciB5aWVsZGVkIGZyb20KKyAgICBDb3JvdXRpbmUgb2JqZWN0IGNyZWF0ZWQgYXQgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICBGaWxlICJ0ZXN0LnB5IiwgbGluZSA3LCBpbiA8bW9kdWxlPgorICAgICAgICB0ZXN0KCkKKworVGhlIGZpeCBpcyB0byBjYWxsIHRoZSA6ZnVuYzpgYXN5bmNgIGZ1bmN0aW9uIG9yIHRoZQorOm1ldGg6YEJhc2VFdmVudExvb3AuY3JlYXRlX3Rhc2tgIG1ldGhvZCB3aXRoIHRoZSBjb3JvdXRpbmUgb2JqZWN0LgorCisuLiBzZWVhbHNvOjoKKworICAgOnJlZjpgUGVuZGluZyB0YXNrIGRlc3Ryb3llZCA8YXN5bmNpby1wZW5kaW5nLXRhc2stZGVzdHJveWVkPmAuCisKKworRGV0ZWN0IGV4Y2VwdGlvbnMgbmV2ZXIgY29uc3VtZWQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1B5dGhvbiB1c3VhbGx5IGNhbGxzIDpmdW5jOmBzeXMuZGlzcGxheWhvb2tgIG9uIHVuaGFuZGxlZCBleGNlcHRpb25zLiBJZgorOm1ldGg6YEZ1dHVyZS5zZXRfZXhjZXB0aW9uYCBpcyBjYWxsZWQsIGJ1dCB0aGUgZXhjZXB0aW9uIGlzIG5ldmVyIGNvbnN1bWVkLAorOmZ1bmM6YHN5cy5kaXNwbGF5aG9va2AgaXMgbm90IGNhbGxlZC4gSW5zdGVhZCwgOnJlZjpgYSBsb2cgaXMgZW1pdHRlZAorPGFzeW5jaW8tbG9nZ2VyPmAgd2hlbiB0aGUgZnV0dXJlIGlzIGRlbGV0ZWQgYnkgdGhlIGdhcmJhZ2UgY29sbGVjdG9yLCB3aXRoIHRoZQordHJhY2ViYWNrIHdoZXJlIHRoZSBleGNlcHRpb24gd2FzIHJhaXNlZC4KKworRXhhbXBsZSBvZiB1bmhhbmRsZWQgZXhjZXB0aW9uOjoKKworICAgIGltcG9ydCBhc3luY2lvCisKKyAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICBkZWYgYnVnKCk6CisgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigibm90IGNvbnN1bWVkIikKKworICAgIGxvb3AgPSBhc3luY2lvLmdldF9ldmVudF9sb29wKCkKKyAgICBhc3luY2lvLmVuc3VyZV9mdXR1cmUoYnVnKCkpCisgICAgbG9vcC5ydW5fZm9yZXZlcigpCisgICAgbG9vcC5jbG9zZSgpCisKK091dHB1dDo6CisKKyAgICBUYXNrIGV4Y2VwdGlvbiB3YXMgbmV2ZXIgcmV0cmlldmVkCisgICAgZnV0dXJlOiA8VGFzayBmaW5pc2hlZCBjb3JvPTxjb3JvKCkgZG9uZSwgZGVmaW5lZCBhdCBhc3luY2lvL2Nvcm91dGluZXMucHk6MTM5PiBleGNlcHRpb249RXhjZXB0aW9uKCdub3QgY29uc3VtZWQnLCk+CisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgRmlsZSAiYXN5bmNpby90YXNrcy5weSIsIGxpbmUgMjM3LCBpbiBfc3RlcAorICAgICAgICByZXN1bHQgPSBuZXh0KGNvcm8pCisgICAgICBGaWxlICJhc3luY2lvL2Nvcm91dGluZXMucHkiLCBsaW5lIDE0MSwgaW4gY29ybworICAgICAgICByZXMgPSBmdW5jKCphcmdzLCAqKmt3KQorICAgICAgRmlsZSAidGVzdC5weSIsIGxpbmUgNSwgaW4gYnVnCisgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigibm90IGNvbnN1bWVkIikKKyAgICBFeGNlcHRpb246IG5vdCBjb25zdW1lZAorCis6cmVmOmBFbmFibGUgdGhlIGRlYnVnIG1vZGUgb2YgYXN5bmNpbyA8YXN5bmNpby1kZWJ1Zy1tb2RlPmAgdG8gZ2V0IHRoZQordHJhY2ViYWNrIHdoZXJlIHRoZSB0YXNrIHdhcyBjcmVhdGVkLiBPdXRwdXQgaW4gZGVidWcgbW9kZTo6CisKKyAgICBUYXNrIGV4Y2VwdGlvbiB3YXMgbmV2ZXIgcmV0cmlldmVkCisgICAgZnV0dXJlOiA8VGFzayBmaW5pc2hlZCBjb3JvPTxidWcoKSBkb25lLCBkZWZpbmVkIGF0IHRlc3QucHk6Mz4gZXhjZXB0aW9uPUV4Y2VwdGlvbignbm90IGNvbnN1bWVkJywpIGNyZWF0ZWQgYXQgdGVzdC5weTo4PgorICAgIHNvdXJjZV90cmFjZWJhY2s6IE9iamVjdCBjcmVhdGVkIGF0IChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgRmlsZSAidGVzdC5weSIsIGxpbmUgOCwgaW4gPG1vZHVsZT4KKyAgICAgICAgYXN5bmNpby5lbnN1cmVfZnV0dXJlKGJ1ZygpKQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgIEZpbGUgImFzeW5jaW8vdGFza3MucHkiLCBsaW5lIDIzNywgaW4gX3N0ZXAKKyAgICAgICAgcmVzdWx0ID0gbmV4dChjb3JvKQorICAgICAgRmlsZSAiYXN5bmNpby9jb3JvdXRpbmVzLnB5IiwgbGluZSA3OSwgaW4gX19uZXh0X18KKyAgICAgICAgcmV0dXJuIG5leHQoc2VsZi5nZW4pCisgICAgICBGaWxlICJhc3luY2lvL2Nvcm91dGluZXMucHkiLCBsaW5lIDE0MSwgaW4gY29ybworICAgICAgICByZXMgPSBmdW5jKCphcmdzLCAqKmt3KQorICAgICAgRmlsZSAidGVzdC5weSIsIGxpbmUgNSwgaW4gYnVnCisgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigibm90IGNvbnN1bWVkIikKKyAgICBFeGNlcHRpb246IG5vdCBjb25zdW1lZAorCitUaGVyZSBhcmUgZGlmZmVyZW50IG9wdGlvbnMgdG8gZml4IHRoaXMgaXNzdWUuIFRoZSBmaXJzdCBvcHRpb24gaXMgdG8gY2hhaW4gdGhlCitjb3JvdXRpbmUgaW4gYW5vdGhlciBjb3JvdXRpbmUgYW5kIHVzZSBjbGFzc2ljIHRyeS9leGNlcHQ6OgorCisgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgZGVmIGhhbmRsZV9leGNlcHRpb24oKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgeWllbGQgZnJvbSBidWcoKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgcHJpbnQoImV4Y2VwdGlvbiBjb25zdW1lZCIpCisKKyAgICBsb29wID0gYXN5bmNpby5nZXRfZXZlbnRfbG9vcCgpCisgICAgYXN5bmNpby5lbnN1cmVfZnV0dXJlKGhhbmRsZV9leGNlcHRpb24oKSkKKyAgICBsb29wLnJ1bl9mb3JldmVyKCkKKyAgICBsb29wLmNsb3NlKCkKKworQW5vdGhlciBvcHRpb24gaXMgdG8gdXNlIHRoZSA6bWV0aDpgQmFzZUV2ZW50TG9vcC5ydW5fdW50aWxfY29tcGxldGVgCitmdW5jdGlvbjo6CisKKyAgICB0YXNrID0gYXN5bmNpby5lbnN1cmVfZnV0dXJlKGJ1ZygpKQorICAgIHRyeToKKyAgICAgICAgbG9vcC5ydW5fdW50aWxfY29tcGxldGUodGFzaykKKyAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICBwcmludCgiZXhjZXB0aW9uIGNvbnN1bWVkIikKKworLi4gc2VlYWxzbzo6CisKKyAgIFRoZSA6bWV0aDpgRnV0dXJlLmV4Y2VwdGlvbmAgbWV0aG9kLgorCisKK0NoYWluIGNvcm91dGluZXMgY29ycmVjdGx5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGVuIGEgY29yb3V0aW5lIGZ1bmN0aW9uIGNhbGxzIG90aGVyIGNvcm91dGluZSBmdW5jdGlvbnMgYW5kIHRhc2tzLCB0aGV5CitzaG91bGQgYmUgY2hhaW5lZCBleHBsaWNpdGx5IHdpdGggYGB5aWVsZCBmcm9tYGAuIE90aGVyd2lzZSwgdGhlIGV4ZWN1dGlvbiBpcworbm90IGd1YXJhbnRlZWQgdG8gYmUgc2VxdWVudGlhbC4KKworRXhhbXBsZSB3aXRoIGRpZmZlcmVudCBidWdzIHVzaW5nIDpmdW5jOmBhc3luY2lvLnNsZWVwYCB0byBzaW11bGF0ZSBzbG93CitvcGVyYXRpb25zOjoKKworICAgIGltcG9ydCBhc3luY2lvCisKKyAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICBkZWYgY3JlYXRlKCk6CisgICAgICAgIHlpZWxkIGZyb20gYXN5bmNpby5zbGVlcCgzLjApCisgICAgICAgIHByaW50KCIoMSkgY3JlYXRlIGZpbGUiKQorCisgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgZGVmIHdyaXRlKCk6CisgICAgICAgIHlpZWxkIGZyb20gYXN5bmNpby5zbGVlcCgxLjApCisgICAgICAgIHByaW50KCIoMikgd3JpdGUgaW50byBmaWxlIikKKworICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgIGRlZiBjbG9zZSgpOgorICAgICAgICBwcmludCgiKDMpIGNsb3NlIGZpbGUiKQorCisgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgZGVmIHRlc3QoKToKKyAgICAgICAgYXN5bmNpby5lbnN1cmVfZnV0dXJlKGNyZWF0ZSgpKQorICAgICAgICBhc3luY2lvLmVuc3VyZV9mdXR1cmUod3JpdGUoKSkKKyAgICAgICAgYXN5bmNpby5lbnN1cmVfZnV0dXJlKGNsb3NlKCkpCisgICAgICAgIHlpZWxkIGZyb20gYXN5bmNpby5zbGVlcCgyLjApCisgICAgICAgIGxvb3Auc3RvcCgpCisKKyAgICBsb29wID0gYXN5bmNpby5nZXRfZXZlbnRfbG9vcCgpCisgICAgYXN5bmNpby5lbnN1cmVfZnV0dXJlKHRlc3QoKSkKKyAgICBsb29wLnJ1bl9mb3JldmVyKCkKKyAgICBwcmludCgiUGVuZGluZyB0YXNrcyBhdCBleGl0OiAlcyIgJSBhc3luY2lvLlRhc2suYWxsX3Rhc2tzKGxvb3ApKQorICAgIGxvb3AuY2xvc2UoKQorCitFeHBlY3RlZCBvdXRwdXQ6OgorCisgICAgKDEpIGNyZWF0ZSBmaWxlCisgICAgKDIpIHdyaXRlIGludG8gZmlsZQorICAgICgzKSBjbG9zZSBmaWxlCisgICAgUGVuZGluZyB0YXNrcyBhdCBleGl0OiBzZXQoKQorCitBY3R1YWwgb3V0cHV0OjoKKworICAgICgzKSBjbG9zZSBmaWxlCisgICAgKDIpIHdyaXRlIGludG8gZmlsZQorICAgIFBlbmRpbmcgdGFza3MgYXQgZXhpdDogezxUYXNrIHBlbmRpbmcgY3JlYXRlKCkgYXQgdGVzdC5weTo3IHdhaXRfZm9yPTxGdXR1cmUgcGVuZGluZyBjYj1bVGFzay5fd2FrZXVwKCldPj59CisgICAgVGFzayB3YXMgZGVzdHJveWVkIGJ1dCBpdCBpcyBwZW5kaW5nIQorICAgIHRhc2s6IDxUYXNrIHBlbmRpbmcgY3JlYXRlKCkgZG9uZSBhdCB0ZXN0LnB5OjUgd2FpdF9mb3I9PEZ1dHVyZSBwZW5kaW5nIGNiPVtUYXNrLl93YWtldXAoKV0+PgorCitUaGUgbG9vcCBzdG9wcGVkIGJlZm9yZSB0aGUgYGBjcmVhdGUoKWBgIGZpbmlzaGVkLCBgYGNsb3NlKClgYCBoYXMgYmVlbiBjYWxsZWQKK2JlZm9yZSBgYHdyaXRlKClgYCwgd2hlcmVhcyBjb3JvdXRpbmUgZnVuY3Rpb25zIHdlcmUgY2FsbGVkIGluIHRoaXMgb3JkZXI6CitgYGNyZWF0ZSgpYGAsIGBgd3JpdGUoKWBgLCBgYGNsb3NlKClgYC4KKworVG8gZml4IHRoZSBleGFtcGxlLCB0YXNrcyBtdXN0IGJlIG1hcmtlZCB3aXRoIGBgeWllbGQgZnJvbWBgOjoKKworICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgIGRlZiB0ZXN0KCk6CisgICAgICAgIHlpZWxkIGZyb20gYXN5bmNpby5lbnN1cmVfZnV0dXJlKGNyZWF0ZSgpKQorICAgICAgICB5aWVsZCBmcm9tIGFzeW5jaW8uZW5zdXJlX2Z1dHVyZSh3cml0ZSgpKQorICAgICAgICB5aWVsZCBmcm9tIGFzeW5jaW8uZW5zdXJlX2Z1dHVyZShjbG9zZSgpKQorICAgICAgICB5aWVsZCBmcm9tIGFzeW5jaW8uc2xlZXAoMi4wKQorICAgICAgICBsb29wLnN0b3AoKQorCitPciB3aXRob3V0IGBgYXN5bmNpby5lbnN1cmVfZnV0dXJlKClgYDo6CisKKyAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICBkZWYgdGVzdCgpOgorICAgICAgICB5aWVsZCBmcm9tIGNyZWF0ZSgpCisgICAgICAgIHlpZWxkIGZyb20gd3JpdGUoKQorICAgICAgICB5aWVsZCBmcm9tIGNsb3NlKCkKKyAgICAgICAgeWllbGQgZnJvbSBhc3luY2lvLnNsZWVwKDIuMCkKKyAgICAgICAgbG9vcC5zdG9wKCkKKworCisuLiBfYXN5bmNpby1wZW5kaW5nLXRhc2stZGVzdHJveWVkOgorCitQZW5kaW5nIHRhc2sgZGVzdHJveWVkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lmIGEgcGVuZGluZyB0YXNrIGlzIGRlc3Ryb3llZCwgdGhlIGV4ZWN1dGlvbiBvZiBpdHMgd3JhcHBlZCA6cmVmOmBjb3JvdXRpbmUKKzxjb3JvdXRpbmU+YCBkaWQgbm90IGNvbXBsZXRlLiBJdCBpcyBwcm9iYWJseSBhIGJ1ZyBhbmQgc28gYSB3YXJuaW5nIGlzIGxvZ2dlZC4KKworRXhhbXBsZSBvZiBsb2c6OgorCisgICAgVGFzayB3YXMgZGVzdHJveWVkIGJ1dCBpdCBpcyBwZW5kaW5nIQorICAgIHRhc2s6IDxUYXNrIHBlbmRpbmcgY29ybz08a2lsbF9tZSgpIGRvbmUsIGRlZmluZWQgYXQgdGVzdC5weTo1PiB3YWl0X2Zvcj08RnV0dXJlIHBlbmRpbmcgY2I9W1Rhc2suX3dha2V1cCgpXT4+CisKKzpyZWY6YEVuYWJsZSB0aGUgZGVidWcgbW9kZSBvZiBhc3luY2lvIDxhc3luY2lvLWRlYnVnLW1vZGU+YCB0byBnZXQgdGhlCit0cmFjZWJhY2sgd2hlcmUgdGhlIHRhc2sgd2FzIGNyZWF0ZWQuIEV4YW1wbGUgb2YgbG9nIGluIGRlYnVnIG1vZGU6OgorCisgICAgVGFzayB3YXMgZGVzdHJveWVkIGJ1dCBpdCBpcyBwZW5kaW5nIQorICAgIHNvdXJjZV90cmFjZWJhY2s6IE9iamVjdCBjcmVhdGVkIGF0IChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgRmlsZSAidGVzdC5weSIsIGxpbmUgMTUsIGluIDxtb2R1bGU+CisgICAgICAgIHRhc2sgPSBhc3luY2lvLmVuc3VyZV9mdXR1cmUoY29ybywgbG9vcD1sb29wKQorICAgIHRhc2s6IDxUYXNrIHBlbmRpbmcgY29ybz08a2lsbF9tZSgpIGRvbmUsIGRlZmluZWQgYXQgdGVzdC5weTo1PiB3YWl0X2Zvcj08RnV0dXJlIHBlbmRpbmcgY2I9W1Rhc2suX3dha2V1cCgpXSBjcmVhdGVkIGF0IHRlc3QucHk6Nz4gY3JlYXRlZCBhdCB0ZXN0LnB5OjE1PgorCisKKy4uIHNlZWFsc286OgorCisgICA6cmVmOmBEZXRlY3QgY29yb3V0aW5lIG9iamVjdHMgbmV2ZXIgc2NoZWR1bGVkIDxhc3luY2lvLWNvcm91dGluZS1ub3Qtc2NoZWR1bGVkPmAuCisKKy4uIF9hc3luY2lvLWNsb3NlLXRyYW5zcG9ydHM6CisKK0Nsb3NlIHRyYW5zcG9ydHMgYW5kIGV2ZW50IGxvb3BzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGVuIGEgdHJhbnNwb3J0IGlzIG5vIG1vcmUgbmVlZGVkLCBjYWxsIGl0cyBgYGNsb3NlKClgYCBtZXRob2QgdG8gcmVsZWFzZQorcmVzb3VyY2VzLiBFdmVudCBsb29wcyBtdXN0IGFsc28gYmUgY2xvc2VkIGV4cGxpY2l0bHkuCisKK0lmIGEgdHJhbnNwb3J0IG9yIGFuIGV2ZW50IGxvb3AgaXMgbm90IGNsb3NlZCBleHBsaWNpdGx5LCBhCis6ZXhjOmBSZXNvdXJjZVdhcm5pbmdgIHdhcm5pbmcgd2lsbCBiZSBlbWl0dGVkIGluIGl0cyBkZXN0cnVjdG9yLiBCeSBkZWZhdWx0LAorOmV4YzpgUmVzb3VyY2VXYXJuaW5nYCB3YXJuaW5ncyBhcmUgaWdub3JlZC4gVGhlIDpyZWY6YERlYnVnIG1vZGUgb2YgYXN5bmNpbworPGFzeW5jaW8tZGVidWctbW9kZT5gIHNlY3Rpb24gZXhwbGFpbnMgaG93IHRvIGRpc3BsYXkgdGhlbS4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2FzeW5jaW8tZXZlbnRsb29wLnJzdCBiL0RvYy9saWJyYXJ5L2FzeW5jaW8tZXZlbnRsb29wLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjQ2OGFlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jL2xpYnJhcnkvYXN5bmNpby1ldmVudGxvb3AucnN0CkBAIC0wLDAgKzEsOTE4IEBACisuLiBjdXJyZW50bW9kdWxlOjogYXN5bmNpbworCisuLiBfYXN5bmNpby1ldmVudC1sb29wOgorCitCYXNlIEV2ZW50IExvb3AKKz09PT09PT09PT09PT09PQorCitUaGUgZXZlbnQgbG9vcCBpcyB0aGUgY2VudHJhbCBleGVjdXRpb24gZGV2aWNlIHByb3ZpZGVkIGJ5IDptb2Q6YGFzeW5jaW9gLgorSXQgcHJvdmlkZXMgbXVsdGlwbGUgZmFjaWxpdGllcywgaW5jbHVkaW5nOgorCisqIFJlZ2lzdGVyaW5nLCBleGVjdXRpbmcgYW5kIGNhbmNlbGxpbmcgZGVsYXllZCBjYWxscyAodGltZW91dHMpLgorCisqIENyZWF0aW5nIGNsaWVudCBhbmQgc2VydmVyIDpyZWY6YHRyYW5zcG9ydHMgPGFzeW5jaW8tdHJhbnNwb3J0PmAgZm9yIHZhcmlvdXMKKyAga2luZHMgb2YgY29tbXVuaWNhdGlvbi4KKworKiBMYXVuY2hpbmcgc3VicHJvY2Vzc2VzIGFuZCB0aGUgYXNzb2NpYXRlZCA6cmVmOmB0cmFuc3BvcnRzCisgIDxhc3luY2lvLXRyYW5zcG9ydD5gIGZvciBjb21tdW5pY2F0aW9uIHdpdGggYW4gZXh0ZXJuYWwgcHJvZ3JhbS4KKworKiBEZWxlZ2F0aW5nIGNvc3RseSBmdW5jdGlvbiBjYWxscyB0byBhIHBvb2wgb2YgdGhyZWFkcy4KKworLi4gY2xhc3M6OiBCYXNlRXZlbnRMb29wCisKKyAgIEJhc2UgY2xhc3Mgb2YgZXZlbnQgbG9vcHMuCisKKyAgIFRoaXMgY2xhc3MgaXMgOnJlZjpgbm90IHRocmVhZCBzYWZlIDxhc3luY2lvLW11bHRpdGhyZWFkaW5nPmAuCisKK1J1biBhbiBldmVudCBsb29wCistLS0tLS0tLS0tLS0tLS0tLQorCisuLiBtZXRob2Q6OiBCYXNlRXZlbnRMb29wLnJ1bl9mb3JldmVyKCkKKworICAgUnVuIHVudGlsIDptZXRoOmBzdG9wYCBpcyBjYWxsZWQuICBJZiA6bWV0aDpgc3RvcGAgaXMgY2FsbGVkIGJlZm9yZQorICAgOm1ldGg6YHJ1bl9mb3JldmVyKClgIGlzIGNhbGxlZCwgdGhpcyBwb2xscyB0aGUgSS9PIHNlbGVjdG9yIG9uY2UKKyAgIHdpdGggYSB0aW1lb3V0IG9mIHplcm8sIHJ1bnMgYWxsIGNhbGxiYWNrcyBzY2hlZHVsZWQgaW4gcmVzcG9uc2UgdG8KKyAgIEkvTyBldmVudHMgKGFuZCB0aG9zZSB0aGF0IHdlcmUgYWxyZWFkeSBzY2hlZHVsZWQpLCBhbmQgdGhlbiBleGl0cy4KKyAgIElmIDptZXRoOmBzdG9wYCBpcyBjYWxsZWQgd2hpbGUgOm1ldGg6YHJ1bl9mb3JldmVyYCBpcyBydW5uaW5nLAorICAgdGhpcyB3aWxsIHJ1biB0aGUgY3VycmVudCBiYXRjaCBvZiBjYWxsYmFja3MgYW5kIHRoZW4gZXhpdC4gIE5vdGUKKyAgIHRoYXQgY2FsbGJhY2tzIHNjaGVkdWxlZCBieSBjYWxsYmFja3Mgd2lsbCBub3QgcnVuIGluIHRoYXQgY2FzZTsKKyAgIHRoZXkgd2lsbCBydW4gdGhlIG5leHQgdGltZSA6bWV0aDpgcnVuX2ZvcmV2ZXJgIGlzIGNhbGxlZC4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQuNAorCisuLiBtZXRob2Q6OiBCYXNlRXZlbnRMb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmdXR1cmUpCisKKyAgIFJ1biB1bnRpbCB0aGUgOmNsYXNzOmBGdXR1cmVgIGlzIGRvbmUuCisKKyAgIElmIHRoZSBhcmd1bWVudCBpcyBhIDpyZWY6YGNvcm91dGluZSBvYmplY3QgPGNvcm91dGluZT5gLCBpdCBpcyB3cmFwcGVkIGJ5CisgICA6ZnVuYzpgYXN5bmNgLgorCisgICBSZXR1cm4gdGhlIEZ1dHVyZSdzIHJlc3VsdCwgb3IgcmFpc2UgaXRzIGV4Y2VwdGlvbi4KKworLi4gbWV0aG9kOjogQmFzZUV2ZW50TG9vcC5pc19ydW5uaW5nKCkKKworICAgUmV0dXJucyBydW5uaW5nIHN0YXR1cyBvZiBldmVudCBsb29wLgorCisuLiBtZXRob2Q6OiBCYXNlRXZlbnRMb29wLnN0b3AoKQorCisgICBTdG9wIHJ1bm5pbmcgdGhlIGV2ZW50IGxvb3AuCisKKyAgIFRoaXMgY2F1c2VzIDptZXRoOmBydW5fZm9yZXZlcmAgdG8gZXhpdCBhdCB0aGUgbmV4dCBzdWl0YWJsZQorICAgb3Bwb3J0dW5pdHkgKHNlZSB0aGVyZSBmb3IgbW9yZSBkZXRhaWxzKS4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQuNAorCisuLiBtZXRob2Q6OiBCYXNlRXZlbnRMb29wLmlzX2Nsb3NlZCgpCisKKyAgIFJldHVybnMgYGBUcnVlYGAgaWYgdGhlIGV2ZW50IGxvb3Agd2FzIGNsb3NlZC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40LjIKKworLi4gbWV0aG9kOjogQmFzZUV2ZW50TG9vcC5jbG9zZSgpCisKKyAgIENsb3NlIHRoZSBldmVudCBsb29wLiBUaGUgbG9vcCBtdXN0IG5vdCBiZSBydW5uaW5nLiAgUGVuZGluZworICAgY2FsbGJhY2tzIHdpbGwgYmUgbG9zdC4KKworICAgVGhpcyBjbGVhcnMgdGhlIHF1ZXVlcyBhbmQgc2h1dHMgZG93biB0aGUgZXhlY3V0b3IsIGJ1dCBkb2VzIG5vdCB3YWl0IGZvcgorICAgdGhlIGV4ZWN1dG9yIHRvIGZpbmlzaC4KKworICAgVGhpcyBpcyBpZGVtcG90ZW50IGFuZCBpcnJldmVyc2libGUuIE5vIG90aGVyIG1ldGhvZHMgc2hvdWxkIGJlIGNhbGxlZCBhZnRlcgorICAgdGhpcyBvbmUuCisKKy4uIF9hc3luY2lvLXBhc3Mta2V5d29yZHM6CisKK0NhbGxzCistLS0tLQorCitNb3N0IDptb2Q6YGFzeW5jaW9gIGZ1bmN0aW9ucyBkb24ndCBhY2NlcHQga2V5d29yZHMuIElmIHlvdSB3YW50IHRvIHBhc3MKK2tleXdvcmRzIHRvIHlvdXIgY2FsbGJhY2ssIHVzZSA6ZnVuYzpgZnVuY3Rvb2xzLnBhcnRpYWxgLiBGb3IgZXhhbXBsZSwKK2BgbG9vcC5jYWxsX3Nvb24oZnVuY3Rvb2xzLnBhcnRpYWwocHJpbnQsICJIZWxsbyIsIGZsdXNoPVRydWUpKWBgIHdpbGwgY2FsbAorYGBwcmludCgiSGVsbG8iLCBmbHVzaD1UcnVlKWBgLgorCisuLiBub3RlOjoKKyAgIDpmdW5jOmBmdW5jdG9vbHMucGFydGlhbGAgaXMgYmV0dGVyIHRoYW4gYGBsYW1iZGFgYCBmdW5jdGlvbnMsIGJlY2F1c2UKKyAgIDptb2Q6YGFzeW5jaW9gIGNhbiBpbnNwZWN0IDpmdW5jOmBmdW5jdG9vbHMucGFydGlhbGAgb2JqZWN0IHRvIGRpc3BsYXkKKyAgIHBhcmFtZXRlcnMgaW4gZGVidWcgbW9kZSwgd2hlcmVhcyBgYGxhbWJkYWBgIGZ1bmN0aW9ucyBoYXZlIGEgcG9vcgorICAgcmVwcmVzZW50YXRpb24uCisKKy4uIG1ldGhvZDo6IEJhc2VFdmVudExvb3AuY2FsbF9zb29uKGNhbGxiYWNrLCBcKmFyZ3MpCisKKyAgIEFycmFuZ2UgZm9yIGEgY2FsbGJhY2sgdG8gYmUgY2FsbGVkIGFzIHNvb24gYXMgcG9zc2libGUuICBUaGUgY2FsbGJhY2sgaXMKKyAgIGNhbGxlZCBhZnRlciA6bWV0aDpgY2FsbF9zb29uYCByZXR1cm5zLCB3aGVuIGNvbnRyb2wgcmV0dXJucyB0byB0aGUgZXZlbnQKKyAgIGxvb3AuCisKKyAgIFRoaXMgb3BlcmF0ZXMgYXMgYSBGSUZPIHF1ZXVlLCBjYWxsYmFja3MgYXJlIGNhbGxlZCBpbiB0aGUgb3JkZXIgaW4KKyAgIHdoaWNoIHRoZXkgYXJlIHJlZ2lzdGVyZWQuICBFYWNoIGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIGV4YWN0bHkgb25jZS4KKworICAgQW55IHBvc2l0aW9uYWwgYXJndW1lbnRzIGFmdGVyIHRoZSBjYWxsYmFjayB3aWxsIGJlIHBhc3NlZCB0byB0aGUKKyAgIGNhbGxiYWNrIHdoZW4gaXQgaXMgY2FsbGVkLgorCisgICBBbiBpbnN0YW5jZSBvZiA6Y2xhc3M6YGFzeW5jaW8uSGFuZGxlYCBpcyByZXR1cm5lZCwgd2hpY2ggY2FuIGJlCisgICB1c2VkIHRvIGNhbmNlbCB0aGUgY2FsbGJhY2suCisKKyAgIDpyZWY6YFVzZSBmdW5jdG9vbHMucGFydGlhbCB0byBwYXNzIGtleXdvcmRzIHRvIHRoZSBjYWxsYmFjaworICAgPGFzeW5jaW8tcGFzcy1rZXl3b3Jkcz5gLgorCisuLiBtZXRob2Q6OiBCYXNlRXZlbnRMb29wLmNhbGxfc29vbl90aHJlYWRzYWZlKGNhbGxiYWNrLCBcKmFyZ3MpCisKKyAgIExpa2UgOm1ldGg6YGNhbGxfc29vbmAsIGJ1dCB0aHJlYWQgc2FmZS4KKworICAgU2VlIHRoZSA6cmVmOmBjb25jdXJyZW5jeSBhbmQgbXVsdGl0aHJlYWRpbmcgPGFzeW5jaW8tbXVsdGl0aHJlYWRpbmc+YAorICAgc2VjdGlvbiBvZiB0aGUgZG9jdW1lbnRhdGlvbi4KKworCisuLiBfYXN5bmNpby1kZWxheWVkLWNhbGxzOgorCitEZWxheWVkIGNhbGxzCistLS0tLS0tLS0tLS0tCisKK1RoZSBldmVudCBsb29wIGhhcyBpdHMgb3duIGludGVybmFsIGNsb2NrIGZvciBjb21wdXRpbmcgdGltZW91dHMuCitXaGljaCBjbG9jayBpcyB1c2VkIGRlcGVuZHMgb24gdGhlIChwbGF0Zm9ybS1zcGVjaWZpYykgZXZlbnQgbG9vcAoraW1wbGVtZW50YXRpb247IGlkZWFsbHkgaXQgaXMgYSBtb25vdG9uaWMgY2xvY2suICBUaGlzIHdpbGwgZ2VuZXJhbGx5IGJlCithIGRpZmZlcmVudCBjbG9jayB0aGFuIDpmdW5jOmB0aW1lLnRpbWVgLgorCisuLiBub3RlOjoKKworICAgVGltZW91dHMgKHJlbGF0aXZlICpkZWxheSogb3IgYWJzb2x1dGUgKndoZW4qKSBzaG91bGQgbm90IGV4Y2VlZCBvbmUgZGF5LgorCisKKy4uIG1ldGhvZDo6IEJhc2VFdmVudExvb3AuY2FsbF9sYXRlcihkZWxheSwgY2FsbGJhY2ssICphcmdzKQorCisgICBBcnJhbmdlIGZvciB0aGUgKmNhbGxiYWNrKiB0byBiZSBjYWxsZWQgYWZ0ZXIgdGhlIGdpdmVuICpkZWxheSoKKyAgIHNlY29uZHMgKGVpdGhlciBhbiBpbnQgb3IgZmxvYXQpLgorCisgICBBbiBpbnN0YW5jZSBvZiA6Y2xhc3M6YGFzeW5jaW8uSGFuZGxlYCBpcyByZXR1cm5lZCwgd2hpY2ggY2FuIGJlCisgICB1c2VkIHRvIGNhbmNlbCB0aGUgY2FsbGJhY2suCisKKyAgICpjYWxsYmFjayogd2lsbCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIHBlciBjYWxsIHRvIDptZXRoOmBjYWxsX2xhdGVyYC4KKyAgIElmIHR3byBjYWxsYmFja3MgYXJlIHNjaGVkdWxlZCBmb3IgZXhhY3RseSB0aGUgc2FtZSB0aW1lLCBpdCBpcworICAgdW5kZWZpbmVkIHdoaWNoIHdpbGwgYmUgY2FsbGVkIGZpcnN0LgorCisgICBUaGUgb3B0aW9uYWwgcG9zaXRpb25hbCAqYXJncyogd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrIHdoZW4gaXQKKyAgIGlzIGNhbGxlZC4gSWYgeW91IHdhbnQgdGhlIGNhbGxiYWNrIHRvIGJlIGNhbGxlZCB3aXRoIHNvbWUgbmFtZWQKKyAgIGFyZ3VtZW50cywgdXNlIGEgY2xvc3VyZSBvciA6ZnVuYzpgZnVuY3Rvb2xzLnBhcnRpYWxgLgorCisgICA6cmVmOmBVc2UgZnVuY3Rvb2xzLnBhcnRpYWwgdG8gcGFzcyBrZXl3b3JkcyB0byB0aGUgY2FsbGJhY2sKKyAgIDxhc3luY2lvLXBhc3Mta2V5d29yZHM+YC4KKworLi4gbWV0aG9kOjogQmFzZUV2ZW50TG9vcC5jYWxsX2F0KHdoZW4sIGNhbGxiYWNrLCAqYXJncykKKworICAgQXJyYW5nZSBmb3IgdGhlICpjYWxsYmFjayogdG8gYmUgY2FsbGVkIGF0IHRoZSBnaXZlbiBhYnNvbHV0ZSB0aW1lc3RhbXAKKyAgICp3aGVuKiAoYW4gaW50IG9yIGZsb2F0KSwgdXNpbmcgdGhlIHNhbWUgdGltZSByZWZlcmVuY2UgYXMKKyAgIDptZXRoOmBCYXNlRXZlbnRMb29wLnRpbWVgLgorCisgICBUaGlzIG1ldGhvZCdzIGJlaGF2aW9yIGlzIHRoZSBzYW1lIGFzIDptZXRoOmBjYWxsX2xhdGVyYC4KKworICAgQW4gaW5zdGFuY2Ugb2YgOmNsYXNzOmBhc3luY2lvLkhhbmRsZWAgaXMgcmV0dXJuZWQsIHdoaWNoIGNhbiBiZQorICAgdXNlZCB0byBjYW5jZWwgdGhlIGNhbGxiYWNrLgorCisgICA6cmVmOmBVc2UgZnVuY3Rvb2xzLnBhcnRpYWwgdG8gcGFzcyBrZXl3b3JkcyB0byB0aGUgY2FsbGJhY2sKKyAgIDxhc3luY2lvLXBhc3Mta2V5d29yZHM+YC4KKworLi4gbWV0aG9kOjogQmFzZUV2ZW50TG9vcC50aW1lKCkKKworICAgUmV0dXJuIHRoZSBjdXJyZW50IHRpbWUsIGFzIGEgOmNsYXNzOmBmbG9hdGAgdmFsdWUsIGFjY29yZGluZyB0byB0aGUKKyAgIGV2ZW50IGxvb3AncyBpbnRlcm5hbCBjbG9jay4KKworLi4gc2VlYWxzbzo6CisKKyAgIFRoZSA6ZnVuYzpgYXN5bmNpby5zbGVlcGAgZnVuY3Rpb24uCisKKworVGFza3MKKy0tLS0tCisKKy4uIG1ldGhvZDo6IEJhc2VFdmVudExvb3AuY3JlYXRlX3Rhc2soY29ybykKKworICAgU2NoZWR1bGUgdGhlIGV4ZWN1dGlvbiBvZiBhIDpyZWY6YGNvcm91dGluZSBvYmplY3QgPGNvcm91dGluZT5gOiB3cmFwIGl0IGluCisgICBhIGZ1dHVyZS4gUmV0dXJuIGEgOmNsYXNzOmBUYXNrYCBvYmplY3QuCisKKyAgIFRoaXJkLXBhcnR5IGV2ZW50IGxvb3BzIGNhbiB1c2UgdGhlaXIgb3duIHN1YmNsYXNzIG9mIDpjbGFzczpgVGFza2AgZm9yCisgICBpbnRlcm9wZXJhYmlsaXR5LiBJbiB0aGlzIGNhc2UsIHRoZSByZXN1bHQgdHlwZSBpcyBhIHN1YmNsYXNzIG9mCisgICA6Y2xhc3M6YFRhc2tgLgorCisgICBUaGlzIG1ldGhvZCB3YXMgYWRkZWQgaW4gUHl0aG9uIDMuNC4yLiBVc2UgdGhlIDpmdW5jOmBhc3luY2AgZnVuY3Rpb24gdG8KKyAgIHN1cHBvcnQgYWxzbyBvbGRlciBQeXRob24gdmVyc2lvbnMuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNC4yCisKKy4uIG1ldGhvZDo6IEJhc2VFdmVudExvb3Auc2V0X3Rhc2tfZmFjdG9yeShmYWN0b3J5KQorCisgICBTZXQgYSB0YXNrIGZhY3RvcnkgdGhhdCB3aWxsIGJlIHVzZWQgYnkKKyAgIDptZXRoOmBCYXNlRXZlbnRMb29wLmNyZWF0ZV90YXNrYC4KKworICAgSWYgKmZhY3RvcnkqIGlzIGBgTm9uZWBgIHRoZSBkZWZhdWx0IHRhc2sgZmFjdG9yeSB3aWxsIGJlIHNldC4KKworICAgSWYgKmZhY3RvcnkqIGlzIGEgKmNhbGxhYmxlKiwgaXQgc2hvdWxkIGhhdmUgYSBzaWduYXR1cmUgbWF0Y2hpbmcKKyAgIGBgKGxvb3AsIGNvcm8pYGAsIHdoZXJlICpsb29wKiB3aWxsIGJlIGEgcmVmZXJlbmNlIHRvIHRoZSBhY3RpdmUKKyAgIGV2ZW50IGxvb3AsICpjb3JvKiB3aWxsIGJlIGEgY29yb3V0aW5lIG9iamVjdC4gIFRoZSBjYWxsYWJsZQorICAgbXVzdCByZXR1cm4gYW4gOmNsYXNzOmBhc3luY2lvLkZ1dHVyZWAgY29tcGF0aWJsZSBvYmplY3QuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNC40CisKKy4uIG1ldGhvZDo6IEJhc2VFdmVudExvb3AuZ2V0X3Rhc2tfZmFjdG9yeSgpCisKKyAgIFJldHVybiBhIHRhc2sgZmFjdG9yeSwgb3IgYGBOb25lYGAgaWYgdGhlIGRlZmF1bHQgb25lIGlzIGluIHVzZS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40LjQKKworCitDcmVhdGluZyBjb25uZWN0aW9ucworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLi4gY29yb3V0aW5lbWV0aG9kOjogQmFzZUV2ZW50TG9vcC5jcmVhdGVfY29ubmVjdGlvbihwcm90b2NvbF9mYWN0b3J5LCBob3N0PU5vbmUsIHBvcnQ9Tm9uZSwgXCosIHNzbD1Ob25lLCBmYW1pbHk9MCwgcHJvdG89MCwgZmxhZ3M9MCwgc29jaz1Ob25lLCBsb2NhbF9hZGRyPU5vbmUsIHNlcnZlcl9ob3N0bmFtZT1Ob25lKQorCisgICBDcmVhdGUgYSBzdHJlYW1pbmcgdHJhbnNwb3J0IGNvbm5lY3Rpb24gdG8gYSBnaXZlbiBJbnRlcm5ldCAqaG9zdCogYW5kCisgICAqcG9ydCo6IHNvY2tldCBmYW1pbHkgOnB5OmRhdGE6YH5zb2NrZXQuQUZfSU5FVGAgb3IKKyAgIDpweTpkYXRhOmB+c29ja2V0LkFGX0lORVQ2YCBkZXBlbmRpbmcgb24gKmhvc3QqIChvciAqZmFtaWx5KiBpZiBzcGVjaWZpZWQpLAorICAgc29ja2V0IHR5cGUgOnB5OmRhdGE6YH5zb2NrZXQuU09DS19TVFJFQU1gLiAgKnByb3RvY29sX2ZhY3RvcnkqIG11c3QgYmUgYQorICAgY2FsbGFibGUgcmV0dXJuaW5nIGEgOnJlZjpgcHJvdG9jb2wgPGFzeW5jaW8tcHJvdG9jb2w+YCBpbnN0YW5jZS4KKworICAgVGhpcyBtZXRob2QgaXMgYSA6cmVmOmBjb3JvdXRpbmUgPGNvcm91dGluZT5gIHdoaWNoIHdpbGwgdHJ5IHRvCisgICBlc3RhYmxpc2ggdGhlIGNvbm5lY3Rpb24gaW4gdGhlIGJhY2tncm91bmQuICBXaGVuIHN1Y2Nlc3NmdWwsIHRoZQorICAgY29yb3V0aW5lIHJldHVybnMgYSBgYCh0cmFuc3BvcnQsIHByb3RvY29sKWBgIHBhaXIuCisKKyAgIFRoZSBjaHJvbm9sb2dpY2FsIHN5bm9wc2lzIG9mIHRoZSB1bmRlcmx5aW5nIG9wZXJhdGlvbiBpcyBhcyBmb2xsb3dzOgorCisgICAjLiBUaGUgY29ubmVjdGlvbiBpcyBlc3RhYmxpc2hlZCwgYW5kIGEgOnJlZjpgdHJhbnNwb3J0IDxhc3luY2lvLXRyYW5zcG9ydD5gCisgICAgICBpcyBjcmVhdGVkIHRvIHJlcHJlc2VudCBpdC4KKworICAgIy4gKnByb3RvY29sX2ZhY3RvcnkqIGlzIGNhbGxlZCB3aXRob3V0IGFyZ3VtZW50cyBhbmQgbXVzdCByZXR1cm4gYQorICAgICAgOnJlZjpgcHJvdG9jb2wgPGFzeW5jaW8tcHJvdG9jb2w+YCBpbnN0YW5jZS4KKworICAgIy4gVGhlIHByb3RvY29sIGluc3RhbmNlIGlzIHRpZWQgdG8gdGhlIHRyYW5zcG9ydCwgYW5kIGl0cworICAgICAgOm1ldGg6YGNvbm5lY3Rpb25fbWFkZWAgbWV0aG9kIGlzIGNhbGxlZC4KKworICAgIy4gVGhlIGNvcm91dGluZSByZXR1cm5zIHN1Y2Nlc3NmdWxseSB3aXRoIHRoZSBgYCh0cmFuc3BvcnQsIHByb3RvY29sKWBgCisgICAgICBwYWlyLgorCisgICBUaGUgY3JlYXRlZCB0cmFuc3BvcnQgaXMgYW4gaW1wbGVtZW50YXRpb24tZGVwZW5kZW50IGJpZGlyZWN0aW9uYWwgc3RyZWFtLgorCisgICAuLiBub3RlOjoKKyAgICAgICpwcm90b2NvbF9mYWN0b3J5KiBjYW4gYmUgYW55IGtpbmQgb2YgY2FsbGFibGUsIG5vdCBuZWNlc3NhcmlseQorICAgICAgYSBjbGFzcy4gIEZvciBleGFtcGxlLCBpZiB5b3Ugd2FudCB0byB1c2UgYSBwcmUtY3JlYXRlZAorICAgICAgcHJvdG9jb2wgaW5zdGFuY2UsIHlvdSBjYW4gcGFzcyBgYGxhbWJkYTogbXlfcHJvdG9jb2xgYC4KKworICAgT3B0aW9ucyBhbGxvd2luZyB0byBjaGFuZ2UgaG93IHRoZSBjb25uZWN0aW9uIGlzIGNyZWF0ZWQ6CisKKyAgICogKnNzbCo6IGlmIGdpdmVuIGFuZCBub3QgZmFsc2UsIGEgU1NML1RMUyB0cmFuc3BvcnQgaXMgY3JlYXRlZAorICAgICAoYnkgZGVmYXVsdCBhIHBsYWluIFRDUCB0cmFuc3BvcnQgaXMgY3JlYXRlZCkuICBJZiAqc3NsKiBpcworICAgICBhIDpjbGFzczpgc3NsLlNTTENvbnRleHRgIG9iamVjdCwgdGhpcyBjb250ZXh0IGlzIHVzZWQgdG8gY3JlYXRlCisgICAgIHRoZSB0cmFuc3BvcnQ7IGlmICpzc2wqIGlzIDpjb25zdDpgVHJ1ZWAsIGEgY29udGV4dCB3aXRoIHNvbWUKKyAgICAgdW5zcGVjaWZpZWQgZGVmYXVsdCBzZXR0aW5ncyBpcyB1c2VkLgorCisgICAgIC4uIHNlZWFsc286OiA6cmVmOmBTU0wvVExTIHNlY3VyaXR5IGNvbnNpZGVyYXRpb25zIDxzc2wtc2VjdXJpdHk+YAorCisgICAqICpzZXJ2ZXJfaG9zdG5hbWUqLCBpcyBvbmx5IGZvciB1c2UgdG9nZXRoZXIgd2l0aCAqc3NsKiwKKyAgICAgYW5kIHNldHMgb3Igb3ZlcnJpZGVzIHRoZSBob3N0bmFtZSB0aGF0IHRoZSB0YXJnZXQgc2VydmVyJ3MgY2VydGlmaWNhdGUKKyAgICAgd2lsbCBiZSBtYXRjaGVkIGFnYWluc3QuICBCeSBkZWZhdWx0IHRoZSB2YWx1ZSBvZiB0aGUgKmhvc3QqIGFyZ3VtZW50CisgICAgIGlzIHVzZWQuICBJZiAqaG9zdCogaXMgZW1wdHksIHRoZXJlIGlzIG5vIGRlZmF1bHQgYW5kIHlvdSBtdXN0IHBhc3MgYQorICAgICB2YWx1ZSBmb3IgKnNlcnZlcl9ob3N0bmFtZSouICBJZiAqc2VydmVyX2hvc3RuYW1lKiBpcyBhbiBlbXB0eQorICAgICBzdHJpbmcsIGhvc3RuYW1lIG1hdGNoaW5nIGlzIGRpc2FibGVkICh3aGljaCBpcyBhIHNlcmlvdXMgc2VjdXJpdHkKKyAgICAgcmlzaywgYWxsb3dpbmcgZm9yIG1hbi1pbi10aGUtbWlkZGxlLWF0dGFja3MpLgorCisgICAqICpmYW1pbHkqLCAqcHJvdG8qLCAqZmxhZ3MqIGFyZSB0aGUgb3B0aW9uYWwgYWRkcmVzcyBmYW1pbHksIHByb3RvY29sCisgICAgIGFuZCBmbGFncyB0byBiZSBwYXNzZWQgdGhyb3VnaCB0byBnZXRhZGRyaW5mbygpIGZvciAqaG9zdCogcmVzb2x1dGlvbi4KKyAgICAgSWYgZ2l2ZW4sIHRoZXNlIHNob3VsZCBhbGwgYmUgaW50ZWdlcnMgZnJvbSB0aGUgY29ycmVzcG9uZGluZworICAgICA6bW9kOmBzb2NrZXRgIG1vZHVsZSBjb25zdGFudHMuCisKKyAgICogKnNvY2sqLCBpZiBnaXZlbiwgc2hvdWxkIGJlIGFuIGV4aXN0aW5nLCBhbHJlYWR5IGNvbm5lY3RlZAorICAgICA6Y2xhc3M6YHNvY2tldC5zb2NrZXRgIG9iamVjdCB0byBiZSB1c2VkIGJ5IHRoZSB0cmFuc3BvcnQuCisgICAgIElmICpzb2NrKiBpcyBnaXZlbiwgbm9uZSBvZiAqaG9zdCosICpwb3J0KiwgKmZhbWlseSosICpwcm90byosICpmbGFncyoKKyAgICAgYW5kICpsb2NhbF9hZGRyKiBzaG91bGQgYmUgc3BlY2lmaWVkLgorCisgICAqICpsb2NhbF9hZGRyKiwgaWYgZ2l2ZW4sIGlzIGEgYGAobG9jYWxfaG9zdCwgbG9jYWxfcG9ydClgYCB0dXBsZSB1c2VkCisgICAgIHRvIGJpbmQgdGhlIHNvY2tldCB0byBsb2NhbGx5LiAgVGhlICpsb2NhbF9ob3N0KiBhbmQgKmxvY2FsX3BvcnQqCisgICAgIGFyZSBsb29rZWQgdXAgdXNpbmcgZ2V0YWRkcmluZm8oKSwgc2ltaWxhcmx5IHRvICpob3N0KiBhbmQgKnBvcnQqLgorCisgICBPbiBXaW5kb3dzIHdpdGggOmNsYXNzOmBQcm9hY3RvckV2ZW50TG9vcGAsIFNTTC9UTFMgaXMgbm90IHN1cHBvcnRlZC4KKworICAgLi4gc2VlYWxzbzo6CisKKyAgICAgIFRoZSA6ZnVuYzpgb3Blbl9jb25uZWN0aW9uYCBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBnZXQgYSBwYWlyIG9mCisgICAgICAoOmNsYXNzOmBTdHJlYW1SZWFkZXJgLCA6Y2xhc3M6YFN0cmVhbVdyaXRlcmApIGluc3RlYWQgb2YgYSBwcm90b2NvbC4KKworCisuLiBjb3JvdXRpbmVtZXRob2Q6OiBCYXNlRXZlbnRMb29wLmNyZWF0ZV9kYXRhZ3JhbV9lbmRwb2ludChwcm90b2NvbF9mYWN0b3J5LCBsb2NhbF9hZGRyPU5vbmUsIHJlbW90ZV9hZGRyPU5vbmUsIFwqLCBmYW1pbHk9MCwgcHJvdG89MCwgZmxhZ3M9MCwgcmV1c2VfYWRkcmVzcz1Ob25lLCByZXVzZV9wb3J0PU5vbmUsIGFsbG93X2Jyb2FkY2FzdD1Ob25lLCBzb2NrPU5vbmUpCisKKyAgIENyZWF0ZSBkYXRhZ3JhbSBjb25uZWN0aW9uOiBzb2NrZXQgZmFtaWx5IDpweTpkYXRhOmB+c29ja2V0LkFGX0lORVRgIG9yCisgICA6cHk6ZGF0YTpgfnNvY2tldC5BRl9JTkVUNmAgZGVwZW5kaW5nIG9uICpob3N0KiAob3IgKmZhbWlseSogaWYgc3BlY2lmaWVkKSwKKyAgIHNvY2tldCB0eXBlIDpweTpkYXRhOmB+c29ja2V0LlNPQ0tfREdSQU1gLiAqcHJvdG9jb2xfZmFjdG9yeSogbXVzdCBiZSBhCisgICBjYWxsYWJsZSByZXR1cm5pbmcgYSA6cmVmOmBwcm90b2NvbCA8YXN5bmNpby1wcm90b2NvbD5gIGluc3RhbmNlLgorCisgICBUaGlzIG1ldGhvZCBpcyBhIDpyZWY6YGNvcm91dGluZSA8Y29yb3V0aW5lPmAgd2hpY2ggd2lsbCB0cnkgdG8KKyAgIGVzdGFibGlzaCB0aGUgY29ubmVjdGlvbiBpbiB0aGUgYmFja2dyb3VuZC4gIFdoZW4gc3VjY2Vzc2Z1bCwgdGhlCisgICBjb3JvdXRpbmUgcmV0dXJucyBhIGBgKHRyYW5zcG9ydCwgcHJvdG9jb2wpYGAgcGFpci4KKworICAgT3B0aW9ucyBjaGFuZ2luZyBob3cgdGhlIGNvbm5lY3Rpb24gaXMgY3JlYXRlZDoKKworICAgKiAqbG9jYWxfYWRkciosIGlmIGdpdmVuLCBpcyBhIGBgKGxvY2FsX2hvc3QsIGxvY2FsX3BvcnQpYGAgdHVwbGUgdXNlZAorICAgICB0byBiaW5kIHRoZSBzb2NrZXQgdG8gbG9jYWxseS4gIFRoZSAqbG9jYWxfaG9zdCogYW5kICpsb2NhbF9wb3J0KgorICAgICBhcmUgbG9va2VkIHVwIHVzaW5nIDptZXRoOmBnZXRhZGRyaW5mb2AuCisKKyAgICogKnJlbW90ZV9hZGRyKiwgaWYgZ2l2ZW4sIGlzIGEgYGAocmVtb3RlX2hvc3QsIHJlbW90ZV9wb3J0KWBgIHR1cGxlIHVzZWQKKyAgICAgdG8gY29ubmVjdCB0aGUgc29ja2V0IHRvIGEgcmVtb3RlIGFkZHJlc3MuICBUaGUgKnJlbW90ZV9ob3N0KiBhbmQKKyAgICAgKnJlbW90ZV9wb3J0KiBhcmUgbG9va2VkIHVwIHVzaW5nIDptZXRoOmBnZXRhZGRyaW5mb2AuCisKKyAgICogKmZhbWlseSosICpwcm90byosICpmbGFncyogYXJlIHRoZSBvcHRpb25hbCBhZGRyZXNzIGZhbWlseSwgcHJvdG9jb2wKKyAgICAgYW5kIGZsYWdzIHRvIGJlIHBhc3NlZCB0aHJvdWdoIHRvIDptZXRoOmBnZXRhZGRyaW5mb2AgZm9yICpob3N0KgorICAgICByZXNvbHV0aW9uLiBJZiBnaXZlbiwgdGhlc2Ugc2hvdWxkIGFsbCBiZSBpbnRlZ2VycyBmcm9tIHRoZQorICAgICBjb3JyZXNwb25kaW5nIDptb2Q6YHNvY2tldGAgbW9kdWxlIGNvbnN0YW50cy4KKworICAgKiAqcmV1c2VfYWRkcmVzcyogdGVsbHMgdGhlIGtlcm5lbCB0byByZXVzZSBhIGxvY2FsIHNvY2tldCBpbgorICAgICBUSU1FX1dBSVQgc3RhdGUsIHdpdGhvdXQgd2FpdGluZyBmb3IgaXRzIG5hdHVyYWwgdGltZW91dCB0bworICAgICBleHBpcmUuIElmIG5vdCBzcGVjaWZpZWQgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIHNldCB0byBUcnVlIG9uCisgICAgIFVOSVguCisKKyAgICogKnJldXNlX3BvcnQqIHRlbGxzIHRoZSBrZXJuZWwgdG8gYWxsb3cgdGhpcyBlbmRwb2ludCB0byBiZSBib3VuZCB0byB0aGUKKyAgICAgc2FtZSBwb3J0IGFzIG90aGVyIGV4aXN0aW5nIGVuZHBvaW50cyBhcmUgYm91bmQgdG8sIHNvIGxvbmcgYXMgdGhleSBhbGwKKyAgICAgc2V0IHRoaXMgZmxhZyB3aGVuIGJlaW5nIGNyZWF0ZWQuIFRoaXMgb3B0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgb24gV2luZG93cworICAgICBhbmQgc29tZSBVTklYJ3MuIElmIHRoZSA6cHk6ZGF0YTpgfnNvY2tldC5TT19SRVVTRVBPUlRgIGNvbnN0YW50IGlzIG5vdAorICAgICBkZWZpbmVkIHRoZW4gdGhpcyBjYXBhYmlsaXR5IGlzIHVuc3VwcG9ydGVkLgorCisgICAqICphbGxvd19icm9hZGNhc3QqIHRlbGxzIHRoZSBrZXJuZWwgdG8gYWxsb3cgdGhpcyBlbmRwb2ludCB0byBzZW5kCisgICAgIG1lc3NhZ2VzIHRvIHRoZSBicm9hZGNhc3QgYWRkcmVzcy4KKworICAgKiAqc29jayogY2FuIG9wdGlvbmFsbHkgYmUgc3BlY2lmaWVkIGluIG9yZGVyIHRvIHVzZSBhIHByZWV4aXN0aW5nLAorICAgICBhbHJlYWR5IGNvbm5lY3RlZCwgOmNsYXNzOmBzb2NrZXQuc29ja2V0YCBvYmplY3QgdG8gYmUgdXNlZCBieSB0aGUKKyAgICAgdHJhbnNwb3J0LiBJZiBzcGVjaWZpZWQsICpsb2NhbF9hZGRyKiBhbmQgKnJlbW90ZV9hZGRyKiBzaG91bGQgYmUgb21pdHRlZAorICAgICAobXVzdCBiZSA6Y29uc3Q6YE5vbmVgKS4KKworICAgT24gV2luZG93cyB3aXRoIDpjbGFzczpgUHJvYWN0b3JFdmVudExvb3BgLCB0aGlzIG1ldGhvZCBpcyBub3Qgc3VwcG9ydGVkLgorCisgICBTZWUgOnJlZjpgVURQIGVjaG8gY2xpZW50IHByb3RvY29sIDxhc3luY2lvLXVkcC1lY2hvLWNsaWVudC1wcm90b2NvbD5gIGFuZAorICAgOnJlZjpgVURQIGVjaG8gc2VydmVyIHByb3RvY29sIDxhc3luY2lvLXVkcC1lY2hvLXNlcnZlci1wcm90b2NvbD5gIGV4YW1wbGVzLgorCisKKy4uIGNvcm91dGluZW1ldGhvZDo6IEJhc2VFdmVudExvb3AuY3JlYXRlX3VuaXhfY29ubmVjdGlvbihwcm90b2NvbF9mYWN0b3J5LCBwYXRoLCBcKiwgc3NsPU5vbmUsIHNvY2s9Tm9uZSwgc2VydmVyX2hvc3RuYW1lPU5vbmUpCisKKyAgIENyZWF0ZSBVTklYIGNvbm5lY3Rpb246IHNvY2tldCBmYW1pbHkgOnB5OmRhdGE6YH5zb2NrZXQuQUZfVU5JWGAsIHNvY2tldAorICAgdHlwZSA6cHk6ZGF0YTpgfnNvY2tldC5TT0NLX1NUUkVBTWAuIFRoZSA6cHk6ZGF0YTpgfnNvY2tldC5BRl9VTklYYCBzb2NrZXQKKyAgIGZhbWlseSBpcyB1c2VkIHRvIGNvbW11bmljYXRlIGJldHdlZW4gcHJvY2Vzc2VzIG9uIHRoZSBzYW1lIG1hY2hpbmUKKyAgIGVmZmljaWVudGx5LgorCisgICBUaGlzIG1ldGhvZCBpcyBhIDpyZWY6YGNvcm91dGluZSA8Y29yb3V0aW5lPmAgd2hpY2ggd2lsbCB0cnkgdG8KKyAgIGVzdGFibGlzaCB0aGUgY29ubmVjdGlvbiBpbiB0aGUgYmFja2dyb3VuZC4gIFdoZW4gc3VjY2Vzc2Z1bCwgdGhlCisgICBjb3JvdXRpbmUgcmV0dXJucyBhIGBgKHRyYW5zcG9ydCwgcHJvdG9jb2wpYGAgcGFpci4KKworICAgU2VlIHRoZSA6bWV0aDpgQmFzZUV2ZW50TG9vcC5jcmVhdGVfY29ubmVjdGlvbmAgbWV0aG9kIGZvciBwYXJhbWV0ZXJzLgorCisgICBBdmFpbGFiaWxpdHk6IFVOSVguCisKKworQ3JlYXRpbmcgbGlzdGVuaW5nIGNvbm5lY3Rpb25zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLi4gY29yb3V0aW5lbWV0aG9kOjogQmFzZUV2ZW50TG9vcC5jcmVhdGVfc2VydmVyKHByb3RvY29sX2ZhY3RvcnksIGhvc3Q9Tm9uZSwgcG9ydD1Ob25lLCBcKiwgZmFtaWx5PXNvY2tldC5BRl9VTlNQRUMsIGZsYWdzPXNvY2tldC5BSV9QQVNTSVZFLCBzb2NrPU5vbmUsIGJhY2tsb2c9MTAwLCBzc2w9Tm9uZSwgcmV1c2VfYWRkcmVzcz1Ob25lLCByZXVzZV9wb3J0PU5vbmUpCisKKyAgIENyZWF0ZSBhIFRDUCBzZXJ2ZXIgKHNvY2tldCB0eXBlIDpkYXRhOmB+c29ja2V0LlNPQ0tfU1RSRUFNYCkgYm91bmQgdG8KKyAgICpob3N0KiBhbmQgKnBvcnQqLgorCisgICBSZXR1cm4gYSA6Y2xhc3M6YFNlcnZlcmAgb2JqZWN0LCBpdHMgOmF0dHI6YH5TZXJ2ZXIuc29ja2V0c2AgYXR0cmlidXRlCisgICBjb250YWlucyBjcmVhdGVkIHNvY2tldHMuIFVzZSB0aGUgOm1ldGg6YFNlcnZlci5jbG9zZWAgbWV0aG9kIHRvIHN0b3AgdGhlCisgICBzZXJ2ZXI6IGNsb3NlIGxpc3RlbmluZyBzb2NrZXRzLgorCisgICBQYXJhbWV0ZXJzOgorCisgICAqIFRoZSAqaG9zdCogcGFyYW1ldGVyIGNhbiBiZSBhIHN0cmluZywgaW4gdGhhdCBjYXNlIHRoZSBUQ1Agc2VydmVyIGlzCisgICAgIGJvdW5kIHRvICpob3N0KiBhbmQgKnBvcnQqLiBUaGUgKmhvc3QqIHBhcmFtZXRlciBjYW4gYWxzbyBiZSBhIHNlcXVlbmNlCisgICAgIG9mIHN0cmluZ3MgYW5kIGluIHRoYXQgY2FzZSB0aGUgVENQIHNlcnZlciBpcyBib3VuZCB0byBhbGwgaG9zdHMgb2YgdGhlCisgICAgIHNlcXVlbmNlLiBJZiAqaG9zdCogaXMgYW4gZW1wdHkgc3RyaW5nIG9yIGBgTm9uZWBgLCBhbGwgaW50ZXJmYWNlcyBhcmUKKyAgICAgYXNzdW1lZCBhbmQgYSBsaXN0IG9mIG11bHRpcGxlIHNvY2tldHMgd2lsbCBiZSByZXR1cm5lZCAobW9zdCBsaWtlbHkgb25lCisgICAgIGZvciBJUHY0IGFuZCBhbm90aGVyIG9uZSBmb3IgSVB2NikuCisKKyAgICogKmZhbWlseSogY2FuIGJlIHNldCB0byBlaXRoZXIgOmRhdGE6YHNvY2tldC5BRl9JTkVUYCBvcgorICAgICA6ZGF0YTpgfnNvY2tldC5BRl9JTkVUNmAgdG8gZm9yY2UgdGhlIHNvY2tldCB0byB1c2UgSVB2NCBvciBJUHY2LiBJZiBub3Qgc2V0CisgICAgIGl0IHdpbGwgYmUgZGV0ZXJtaW5lZCBmcm9tIGhvc3QgKGRlZmF1bHRzIHRvIDpkYXRhOmBzb2NrZXQuQUZfVU5TUEVDYCkuCisKKyAgICogKmZsYWdzKiBpcyBhIGJpdG1hc2sgZm9yIDptZXRoOmBnZXRhZGRyaW5mb2AuCisKKyAgICogKnNvY2sqIGNhbiBvcHRpb25hbGx5IGJlIHNwZWNpZmllZCBpbiBvcmRlciB0byB1c2UgYSBwcmVleGlzdGluZworICAgICBzb2NrZXQgb2JqZWN0LiBJZiBzcGVjaWZpZWQsICpob3N0KiBhbmQgKnBvcnQqIHNob3VsZCBiZSBvbWl0dGVkIChtdXN0IGJlCisgICAgIDpjb25zdDpgTm9uZWApLgorCisgICAqICpiYWNrbG9nKiBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgcXVldWVkIGNvbm5lY3Rpb25zIHBhc3NlZCB0bworICAgICA6bWV0aDpgfnNvY2tldC5zb2NrZXQubGlzdGVuYCAoZGVmYXVsdHMgdG8gMTAwKS4KKworICAgKiAqc3NsKiBjYW4gYmUgc2V0IHRvIGFuIDpjbGFzczpgfnNzbC5TU0xDb250ZXh0YCB0byBlbmFibGUgU1NMIG92ZXIgdGhlCisgICAgIGFjY2VwdGVkIGNvbm5lY3Rpb25zLgorCisgICAqICpyZXVzZV9hZGRyZXNzKiB0ZWxscyB0aGUga2VybmVsIHRvIHJldXNlIGEgbG9jYWwgc29ja2V0IGluCisgICAgIFRJTUVfV0FJVCBzdGF0ZSwgd2l0aG91dCB3YWl0aW5nIGZvciBpdHMgbmF0dXJhbCB0aW1lb3V0IHRvCisgICAgIGV4cGlyZS4gSWYgbm90IHNwZWNpZmllZCB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgc2V0IHRvIFRydWUgb24KKyAgICAgVU5JWC4KKworICAgKiAqcmV1c2VfcG9ydCogdGVsbHMgdGhlIGtlcm5lbCB0byBhbGxvdyB0aGlzIGVuZHBvaW50IHRvIGJlIGJvdW5kIHRvIHRoZQorICAgICBzYW1lIHBvcnQgYXMgb3RoZXIgZXhpc3RpbmcgZW5kcG9pbnRzIGFyZSBib3VuZCB0bywgc28gbG9uZyBhcyB0aGV5IGFsbAorICAgICBzZXQgdGhpcyBmbGFnIHdoZW4gYmVpbmcgY3JlYXRlZC4gVGhpcyBvcHRpb24gaXMgbm90IHN1cHBvcnRlZCBvbgorICAgICBXaW5kb3dzLgorCisgICBUaGlzIG1ldGhvZCBpcyBhIDpyZWY6YGNvcm91dGluZSA8Y29yb3V0aW5lPmAuCisKKyAgIE9uIFdpbmRvd3Mgd2l0aCA6Y2xhc3M6YFByb2FjdG9yRXZlbnRMb29wYCwgU1NML1RMUyBpcyBub3Qgc3VwcG9ydGVkLgorCisgICAuLiBzZWVhbHNvOjoKKworICAgICAgVGhlIGZ1bmN0aW9uIDpmdW5jOmBzdGFydF9zZXJ2ZXJgIGNyZWF0ZXMgYSAoOmNsYXNzOmBTdHJlYW1SZWFkZXJgLAorICAgICAgOmNsYXNzOmBTdHJlYW1Xcml0ZXJgKSBwYWlyIGFuZCBjYWxscyBiYWNrIGEgZnVuY3Rpb24gd2l0aCB0aGlzIHBhaXIuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40LjQKKworICAgICAgVGhlICpob3N0KiBwYXJhbWV0ZXIgY2FuIG5vdyBiZSBhIHNlcXVlbmNlIG9mIHN0cmluZ3MuCisKKworLi4gY29yb3V0aW5lbWV0aG9kOjogQmFzZUV2ZW50TG9vcC5jcmVhdGVfdW5peF9zZXJ2ZXIocHJvdG9jb2xfZmFjdG9yeSwgcGF0aD1Ob25lLCBcKiwgc29jaz1Ob25lLCBiYWNrbG9nPTEwMCwgc3NsPU5vbmUpCisKKyAgIFNpbWlsYXIgdG8gOm1ldGg6YEJhc2VFdmVudExvb3AuY3JlYXRlX3NlcnZlcmAsIGJ1dCBzcGVjaWZpYyB0byB0aGUKKyAgIHNvY2tldCBmYW1pbHkgOnB5OmRhdGE6YH5zb2NrZXQuQUZfVU5JWGAuCisKKyAgIFRoaXMgbWV0aG9kIGlzIGEgOnJlZjpgY29yb3V0aW5lIDxjb3JvdXRpbmU+YC4KKworICAgQXZhaWxhYmlsaXR5OiBVTklYLgorCisKK1dhdGNoIGZpbGUgZGVzY3JpcHRvcnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworT24gV2luZG93cyB3aXRoIDpjbGFzczpgU2VsZWN0b3JFdmVudExvb3BgLCBvbmx5IHNvY2tldCBoYW5kbGVzIGFyZSBzdXBwb3J0ZWQKKyhleDogcGlwZSBmaWxlIGRlc2NyaXB0b3JzIGFyZSBub3Qgc3VwcG9ydGVkKS4KKworT24gV2luZG93cyB3aXRoIDpjbGFzczpgUHJvYWN0b3JFdmVudExvb3BgLCB0aGVzZSBtZXRob2RzIGFyZSBub3Qgc3VwcG9ydGVkLgorCisuLiBtZXRob2Q6OiBCYXNlRXZlbnRMb29wLmFkZF9yZWFkZXIoZmQsIGNhbGxiYWNrLCBcKmFyZ3MpCisKKyAgIFN0YXJ0IHdhdGNoaW5nIHRoZSBmaWxlIGRlc2NyaXB0b3IgZm9yIHJlYWQgYXZhaWxhYmlsaXR5IGFuZCB0aGVuIGNhbGwgdGhlCisgICAqY2FsbGJhY2sqIHdpdGggc3BlY2lmaWVkIGFyZ3VtZW50cy4KKworICAgOnJlZjpgVXNlIGZ1bmN0b29scy5wYXJ0aWFsIHRvIHBhc3Mga2V5d29yZHMgdG8gdGhlIGNhbGxiYWNrCisgICA8YXN5bmNpby1wYXNzLWtleXdvcmRzPmAuCisKKy4uIG1ldGhvZDo6IEJhc2VFdmVudExvb3AucmVtb3ZlX3JlYWRlcihmZCkKKworICAgU3RvcCB3YXRjaGluZyB0aGUgZmlsZSBkZXNjcmlwdG9yIGZvciByZWFkIGF2YWlsYWJpbGl0eS4KKworLi4gbWV0aG9kOjogQmFzZUV2ZW50TG9vcC5hZGRfd3JpdGVyKGZkLCBjYWxsYmFjaywgXCphcmdzKQorCisgICBTdGFydCB3YXRjaGluZyB0aGUgZmlsZSBkZXNjcmlwdG9yIGZvciB3cml0ZSBhdmFpbGFiaWxpdHkgYW5kIHRoZW4gY2FsbCB0aGUKKyAgICpjYWxsYmFjayogd2l0aCBzcGVjaWZpZWQgYXJndW1lbnRzLgorCisgICA6cmVmOmBVc2UgZnVuY3Rvb2xzLnBhcnRpYWwgdG8gcGFzcyBrZXl3b3JkcyB0byB0aGUgY2FsbGJhY2sKKyAgIDxhc3luY2lvLXBhc3Mta2V5d29yZHM+YC4KKworLi4gbWV0aG9kOjogQmFzZUV2ZW50TG9vcC5yZW1vdmVfd3JpdGVyKGZkKQorCisgICBTdG9wIHdhdGNoaW5nIHRoZSBmaWxlIGRlc2NyaXB0b3IgZm9yIHdyaXRlIGF2YWlsYWJpbGl0eS4KKworVGhlIDpyZWY6YHdhdGNoIGEgZmlsZSBkZXNjcmlwdG9yIGZvciByZWFkIGV2ZW50cyA8YXN5bmNpby13YXRjaC1yZWFkLWV2ZW50PmAKK2V4YW1wbGUgdXNlcyB0aGUgbG93LWxldmVsIDptZXRoOmBCYXNlRXZlbnRMb29wLmFkZF9yZWFkZXJgIG1ldGhvZCB0byByZWdpc3RlcgordGhlIGZpbGUgZGVzY3JpcHRvciBvZiBhIHNvY2tldC4KKworCitMb3ctbGV2ZWwgc29ja2V0IG9wZXJhdGlvbnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisuLiBjb3JvdXRpbmVtZXRob2Q6OiBCYXNlRXZlbnRMb29wLnNvY2tfcmVjdihzb2NrLCBuYnl0ZXMpCisKKyAgIFJlY2VpdmUgZGF0YSBmcm9tIHRoZSBzb2NrZXQuICBUaGUgcmV0dXJuIHZhbHVlIGlzIGEgYnl0ZXMgb2JqZWN0CisgICByZXByZXNlbnRpbmcgdGhlIGRhdGEgcmVjZWl2ZWQuICBUaGUgbWF4aW11bSBhbW91bnQgb2YgZGF0YSB0byBiZSByZWNlaXZlZAorICAgYXQgb25jZSBpcyBzcGVjaWZpZWQgYnkgKm5ieXRlcyouCisKKyAgIFdpdGggOmNsYXNzOmBTZWxlY3RvckV2ZW50TG9vcGAgZXZlbnQgbG9vcCwgdGhlIHNvY2tldCAqc29jayogbXVzdCBiZQorICAgbm9uLWJsb2NraW5nLgorCisgICBUaGlzIG1ldGhvZCBpcyBhIDpyZWY6YGNvcm91dGluZSA8Y29yb3V0aW5lPmAuCisKKyAgIC4uIHNlZWFsc286OgorCisgICAgICBUaGUgOm1ldGg6YHNvY2tldC5zb2NrZXQucmVjdmAgbWV0aG9kLgorCisuLiBjb3JvdXRpbmVtZXRob2Q6OiBCYXNlRXZlbnRMb29wLnNvY2tfc2VuZGFsbChzb2NrLCBkYXRhKQorCisgICBTZW5kIGRhdGEgdG8gdGhlIHNvY2tldC4gIFRoZSBzb2NrZXQgbXVzdCBiZSBjb25uZWN0ZWQgdG8gYSByZW1vdGUgc29ja2V0LgorICAgVGhpcyBtZXRob2QgY29udGludWVzIHRvIHNlbmQgZGF0YSBmcm9tICpkYXRhKiB1bnRpbCBlaXRoZXIgYWxsIGRhdGEgaGFzCisgICBiZWVuIHNlbnQgb3IgYW4gZXJyb3Igb2NjdXJzLiAgYGBOb25lYGAgaXMgcmV0dXJuZWQgb24gc3VjY2Vzcy4gIE9uIGVycm9yLAorICAgYW4gZXhjZXB0aW9uIGlzIHJhaXNlZCwgYW5kIHRoZXJlIGlzIG5vIHdheSB0byBkZXRlcm1pbmUgaG93IG11Y2ggZGF0YSwgaWYKKyAgIGFueSwgd2FzIHN1Y2Nlc3NmdWxseSBwcm9jZXNzZWQgYnkgdGhlIHJlY2VpdmluZyBlbmQgb2YgdGhlIGNvbm5lY3Rpb24uCisKKyAgIFdpdGggOmNsYXNzOmBTZWxlY3RvckV2ZW50TG9vcGAgZXZlbnQgbG9vcCwgdGhlIHNvY2tldCAqc29jayogbXVzdCBiZQorICAgbm9uLWJsb2NraW5nLgorCisgICBUaGlzIG1ldGhvZCBpcyBhIDpyZWY6YGNvcm91dGluZSA8Y29yb3V0aW5lPmAuCisKKyAgIC4uIHNlZWFsc286OgorCisgICAgICBUaGUgOm1ldGg6YHNvY2tldC5zb2NrZXQuc2VuZGFsbGAgbWV0aG9kLgorCisuLiBjb3JvdXRpbmVtZXRob2Q6OiBCYXNlRXZlbnRMb29wLnNvY2tfY29ubmVjdChzb2NrLCBhZGRyZXNzKQorCisgICBDb25uZWN0IHRvIGEgcmVtb3RlIHNvY2tldCBhdCAqYWRkcmVzcyouCisKKyAgIFRoZSAqYWRkcmVzcyogbXVzdCBiZSBhbHJlYWR5IHJlc29sdmVkIHRvIGF2b2lkIHRoZSB0cmFwIG9mIGhhbmdpbmcgdGhlCisgICBlbnRpcmUgZXZlbnQgbG9vcCB3aGVuIHRoZSBhZGRyZXNzIHJlcXVpcmVzIGRvaW5nIGEgRE5TIGxvb2t1cC4gIEZvcgorICAgZXhhbXBsZSwgaXQgbXVzdCBiZSBhbiBJUCBhZGRyZXNzLCBub3QgYW4gaG9zdG5hbWUsIGZvcgorICAgOnB5OmRhdGE6YH5zb2NrZXQuQUZfSU5FVGAgYW5kIDpweTpkYXRhOmB+c29ja2V0LkFGX0lORVQ2YCBhZGRyZXNzIGZhbWlsaWVzLgorICAgVXNlIDptZXRoOmBnZXRhZGRyaW5mb2AgdG8gcmVzb2x2ZSB0aGUgaG9zdG5hbWUgYXN5bmNocm9ub3VzbHkuCisKKyAgIFdpdGggOmNsYXNzOmBTZWxlY3RvckV2ZW50TG9vcGAgZXZlbnQgbG9vcCwgdGhlIHNvY2tldCAqc29jayogbXVzdCBiZQorICAgbm9uLWJsb2NraW5nLgorCisgICBUaGlzIG1ldGhvZCBpcyBhIDpyZWY6YGNvcm91dGluZSA8Y29yb3V0aW5lPmAuCisKKyAgIC4uIHNlZWFsc286OgorCisgICAgICBUaGUgOm1ldGg6YEJhc2VFdmVudExvb3AuY3JlYXRlX2Nvbm5lY3Rpb25gIG1ldGhvZCwgdGhlCisgICAgICA6ZnVuYzpgb3Blbl9jb25uZWN0aW9uYCBmdW5jdGlvbiBhbmQgdGhlIDptZXRoOmBzb2NrZXQuc29ja2V0LmNvbm5lY3RgCisgICAgICBtZXRob2QuCisKKworLi4gY29yb3V0aW5lbWV0aG9kOjogQmFzZUV2ZW50TG9vcC5zb2NrX2FjY2VwdChzb2NrKQorCisgICBBY2NlcHQgYSBjb25uZWN0aW9uLiBUaGUgc29ja2V0IG11c3QgYmUgYm91bmQgdG8gYW4gYWRkcmVzcyBhbmQgbGlzdGVuaW5nCisgICBmb3IgY29ubmVjdGlvbnMuIFRoZSByZXR1cm4gdmFsdWUgaXMgYSBwYWlyIGBgKGNvbm4sIGFkZHJlc3MpYGAgd2hlcmUgKmNvbm4qCisgICBpcyBhICpuZXcqIHNvY2tldCBvYmplY3QgdXNhYmxlIHRvIHNlbmQgYW5kIHJlY2VpdmUgZGF0YSBvbiB0aGUgY29ubmVjdGlvbiwKKyAgIGFuZCAqYWRkcmVzcyogaXMgdGhlIGFkZHJlc3MgYm91bmQgdG8gdGhlIHNvY2tldCBvbiB0aGUgb3RoZXIgZW5kIG9mIHRoZQorICAgY29ubmVjdGlvbi4KKworICAgVGhlIHNvY2tldCAqc29jayogbXVzdCBiZSBub24tYmxvY2tpbmcuCisKKyAgIFRoaXMgbWV0aG9kIGlzIGEgOnJlZjpgY29yb3V0aW5lIDxjb3JvdXRpbmU+YC4KKworICAgLi4gc2VlYWxzbzo6CisKKyAgICAgIFRoZSA6bWV0aDpgQmFzZUV2ZW50TG9vcC5jcmVhdGVfc2VydmVyYCBtZXRob2QsIHRoZSA6ZnVuYzpgc3RhcnRfc2VydmVyYAorICAgICAgZnVuY3Rpb24gYW5kIHRoZSA6bWV0aDpgc29ja2V0LnNvY2tldC5hY2NlcHRgIG1ldGhvZC4KKworCitSZXNvbHZlIGhvc3QgbmFtZQorLS0tLS0tLS0tLS0tLS0tLS0KKworLi4gY29yb3V0aW5lbWV0aG9kOjogQmFzZUV2ZW50TG9vcC5nZXRhZGRyaW5mbyhob3N0LCBwb3J0LCBcKiwgZmFtaWx5PTAsIHR5cGU9MCwgcHJvdG89MCwgZmxhZ3M9MCkKKworICAgVGhpcyBtZXRob2QgaXMgYSA6cmVmOmBjb3JvdXRpbmUgPGNvcm91dGluZT5gLCBzaW1pbGFyIHRvCisgICA6bWV0aDpgc29ja2V0LmdldGFkZHJpbmZvYCBmdW5jdGlvbiBidXQgbm9uLWJsb2NraW5nLgorCisuLiBjb3JvdXRpbmVtZXRob2Q6OiBCYXNlRXZlbnRMb29wLmdldG5hbWVpbmZvKHNvY2thZGRyLCBmbGFncz0wKQorCisgICBUaGlzIG1ldGhvZCBpcyBhIDpyZWY6YGNvcm91dGluZSA8Y29yb3V0aW5lPmAsIHNpbWlsYXIgdG8KKyAgIDptZXRoOmBzb2NrZXQuZ2V0bmFtZWluZm9gIGZ1bmN0aW9uIGJ1dCBub24tYmxvY2tpbmcuCisKKworQ29ubmVjdCBwaXBlcworLS0tLS0tLS0tLS0tLQorCitPbiBXaW5kb3dzIHdpdGggOmNsYXNzOmBTZWxlY3RvckV2ZW50TG9vcGAsIHRoZXNlIG1ldGhvZHMgYXJlIG5vdCBzdXBwb3J0ZWQuCitVc2UgOmNsYXNzOmBQcm9hY3RvckV2ZW50TG9vcGAgdG8gc3VwcG9ydCBwaXBlcyBvbiBXaW5kb3dzLgorCisuLiBjb3JvdXRpbmVtZXRob2Q6OiBCYXNlRXZlbnRMb29wLmNvbm5lY3RfcmVhZF9waXBlKHByb3RvY29sX2ZhY3RvcnksIHBpcGUpCisKKyAgIFJlZ2lzdGVyIHJlYWQgcGlwZSBpbiBldmVudGxvb3AuCisKKyAgICpwcm90b2NvbF9mYWN0b3J5KiBzaG91bGQgaW5zdGFudGlhdGUgb2JqZWN0IHdpdGggOmNsYXNzOmBQcm90b2NvbGAKKyAgIGludGVyZmFjZS4gICpwaXBlKiBpcyBhIDp0ZXJtOmBmaWxlLWxpa2Ugb2JqZWN0IDxmaWxlIG9iamVjdD5gLgorICAgUmV0dXJuIHBhaXIgYGAodHJhbnNwb3J0LCBwcm90b2NvbClgYCwgd2hlcmUgKnRyYW5zcG9ydCogc3VwcG9ydHMgdGhlCisgICA6Y2xhc3M6YFJlYWRUcmFuc3BvcnRgIGludGVyZmFjZS4KKworICAgV2l0aCA6Y2xhc3M6YFNlbGVjdG9yRXZlbnRMb29wYCBldmVudCBsb29wLCB0aGUgKnBpcGUqIGlzIHNldCB0bworICAgbm9uLWJsb2NraW5nIG1vZGUuCisKKyAgIFRoaXMgbWV0aG9kIGlzIGEgOnJlZjpgY29yb3V0aW5lIDxjb3JvdXRpbmU+YC4KKworLi4gY29yb3V0aW5lbWV0aG9kOjogQmFzZUV2ZW50TG9vcC5jb25uZWN0X3dyaXRlX3BpcGUocHJvdG9jb2xfZmFjdG9yeSwgcGlwZSkKKworICAgUmVnaXN0ZXIgd3JpdGUgcGlwZSBpbiBldmVudGxvb3AuCisKKyAgICpwcm90b2NvbF9mYWN0b3J5KiBzaG91bGQgaW5zdGFudGlhdGUgb2JqZWN0IHdpdGggOmNsYXNzOmBCYXNlUHJvdG9jb2xgCisgICBpbnRlcmZhY2UuICpwaXBlKiBpcyA6dGVybTpgZmlsZS1saWtlIG9iamVjdCA8ZmlsZSBvYmplY3Q+YC4KKyAgIFJldHVybiBwYWlyIGBgKHRyYW5zcG9ydCwgcHJvdG9jb2wpYGAsIHdoZXJlICp0cmFuc3BvcnQqIHN1cHBvcnRzCisgICA6Y2xhc3M6YFdyaXRlVHJhbnNwb3J0YCBpbnRlcmZhY2UuCisKKyAgIFdpdGggOmNsYXNzOmBTZWxlY3RvckV2ZW50TG9vcGAgZXZlbnQgbG9vcCwgdGhlICpwaXBlKiBpcyBzZXQgdG8KKyAgIG5vbi1ibG9ja2luZyBtb2RlLgorCisgICBUaGlzIG1ldGhvZCBpcyBhIDpyZWY6YGNvcm91dGluZSA8Y29yb3V0aW5lPmAuCisKKy4uIHNlZWFsc286OgorCisgICBUaGUgOm1ldGg6YEJhc2VFdmVudExvb3Auc3VicHJvY2Vzc19leGVjYCBhbmQKKyAgIDptZXRoOmBCYXNlRXZlbnRMb29wLnN1YnByb2Nlc3Nfc2hlbGxgIG1ldGhvZHMuCisKKworVU5JWCBzaWduYWxzCistLS0tLS0tLS0tLS0KKworQXZhaWxhYmlsaXR5OiBVTklYIG9ubHkuCisKKy4uIG1ldGhvZDo6IEJhc2VFdmVudExvb3AuYWRkX3NpZ25hbF9oYW5kbGVyKHNpZ251bSwgY2FsbGJhY2ssIFwqYXJncykKKworICAgQWRkIGEgaGFuZGxlciBmb3IgYSBzaWduYWwuCisKKyAgIFJhaXNlIDpleGM6YFZhbHVlRXJyb3JgIGlmIHRoZSBzaWduYWwgbnVtYmVyIGlzIGludmFsaWQgb3IgdW5jYXRjaGFibGUuCisgICBSYWlzZSA6ZXhjOmBSdW50aW1lRXJyb3JgIGlmIHRoZXJlIGlzIGEgcHJvYmxlbSBzZXR0aW5nIHVwIHRoZSBoYW5kbGVyLgorCisgICA6cmVmOmBVc2UgZnVuY3Rvb2xzLnBhcnRpYWwgdG8gcGFzcyBrZXl3b3JkcyB0byB0aGUgY2FsbGJhY2sKKyAgIDxhc3luY2lvLXBhc3Mta2V5d29yZHM+YC4KKworLi4gbWV0aG9kOjogQmFzZUV2ZW50TG9vcC5yZW1vdmVfc2lnbmFsX2hhbmRsZXIoc2lnKQorCisgICBSZW1vdmUgYSBoYW5kbGVyIGZvciBhIHNpZ25hbC4KKworICAgUmV0dXJuIGBgVHJ1ZWBgIGlmIGEgc2lnbmFsIGhhbmRsZXIgd2FzIHJlbW92ZWQsIGBgRmFsc2VgYCBpZiBub3QuCisKKy4uIHNlZWFsc286OgorCisgICBUaGUgOm1vZDpgc2lnbmFsYCBtb2R1bGUuCisKKworRXhlY3V0b3IKKy0tLS0tLS0tCisKK0NhbGwgYSBmdW5jdGlvbiBpbiBhbiA6Y2xhc3M6YH5jb25jdXJyZW50LmZ1dHVyZXMuRXhlY3V0b3JgIChwb29sIG9mIHRocmVhZHMgb3IKK3Bvb2wgb2YgcHJvY2Vzc2VzKS4gQnkgZGVmYXVsdCwgYW4gZXZlbnQgbG9vcCB1c2VzIGEgdGhyZWFkIHBvb2wgZXhlY3V0b3IKKyg6Y2xhc3M6YH5jb25jdXJyZW50LmZ1dHVyZXMuVGhyZWFkUG9vbEV4ZWN1dG9yYCkuCisKKy4uIGNvcm91dGluZW1ldGhvZDo6IEJhc2VFdmVudExvb3AucnVuX2luX2V4ZWN1dG9yKGV4ZWN1dG9yLCBmdW5jLCBcKmFyZ3MpCisKKyAgIEFycmFuZ2UgZm9yIGEgKmZ1bmMqIHRvIGJlIGNhbGxlZCBpbiB0aGUgc3BlY2lmaWVkIGV4ZWN1dG9yLgorCisgICBUaGUgKmV4ZWN1dG9yKiBhcmd1bWVudCBzaG91bGQgYmUgYW4gOmNsYXNzOmB+Y29uY3VycmVudC5mdXR1cmVzLkV4ZWN1dG9yYAorICAgaW5zdGFuY2UuIFRoZSBkZWZhdWx0IGV4ZWN1dG9yIGlzIHVzZWQgaWYgKmV4ZWN1dG9yKiBpcyBgYE5vbmVgYC4KKworICAgOnJlZjpgVXNlIGZ1bmN0b29scy5wYXJ0aWFsIHRvIHBhc3Mga2V5d29yZHMgdG8gdGhlICpmdW5jKgorICAgPGFzeW5jaW8tcGFzcy1rZXl3b3Jkcz5gLgorCisgICBUaGlzIG1ldGhvZCBpcyBhIDpyZWY6YGNvcm91dGluZSA8Y29yb3V0aW5lPmAuCisKKy4uIG1ldGhvZDo6IEJhc2VFdmVudExvb3Auc2V0X2RlZmF1bHRfZXhlY3V0b3IoZXhlY3V0b3IpCisKKyAgIFNldCB0aGUgZGVmYXVsdCBleGVjdXRvciB1c2VkIGJ5IDptZXRoOmBydW5faW5fZXhlY3V0b3JgLgorCisKK0Vycm9yIEhhbmRsaW5nIEFQSQorLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FsbG93cyB0byBjdXN0b21pemUgaG93IGV4Y2VwdGlvbnMgYXJlIGhhbmRsZWQgaW4gdGhlIGV2ZW50IGxvb3AuCisKKy4uIG1ldGhvZDo6IEJhc2VFdmVudExvb3Auc2V0X2V4Y2VwdGlvbl9oYW5kbGVyKGhhbmRsZXIpCisKKyAgIFNldCAqaGFuZGxlciogYXMgdGhlIG5ldyBldmVudCBsb29wIGV4Y2VwdGlvbiBoYW5kbGVyLgorCisgICBJZiAqaGFuZGxlciogaXMgYGBOb25lYGAsIHRoZSBkZWZhdWx0IGV4Y2VwdGlvbiBoYW5kbGVyIHdpbGwKKyAgIGJlIHNldC4KKworICAgSWYgKmhhbmRsZXIqIGlzIGEgY2FsbGFibGUgb2JqZWN0LCBpdCBzaG91bGQgaGF2ZSBhCisgICBtYXRjaGluZyBzaWduYXR1cmUgdG8gYGAobG9vcCwgY29udGV4dClgYCwgd2hlcmUgYGBsb29wYGAKKyAgIHdpbGwgYmUgYSByZWZlcmVuY2UgdG8gdGhlIGFjdGl2ZSBldmVudCBsb29wLCBgYGNvbnRleHRgYAorICAgd2lsbCBiZSBhIGBgZGljdGBgIG9iamVjdCAoc2VlIDptZXRoOmBjYWxsX2V4Y2VwdGlvbl9oYW5kbGVyYAorICAgZG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscyBhYm91dCBjb250ZXh0KS4KKworLi4gbWV0aG9kOjogQmFzZUV2ZW50TG9vcC5kZWZhdWx0X2V4Y2VwdGlvbl9oYW5kbGVyKGNvbnRleHQpCisKKyAgIERlZmF1bHQgZXhjZXB0aW9uIGhhbmRsZXIuCisKKyAgIFRoaXMgaXMgY2FsbGVkIHdoZW4gYW4gZXhjZXB0aW9uIG9jY3VycyBhbmQgbm8gZXhjZXB0aW9uCisgICBoYW5kbGVyIGlzIHNldCwgYW5kIGNhbiBiZSBjYWxsZWQgYnkgYSBjdXN0b20gZXhjZXB0aW9uCisgICBoYW5kbGVyIHRoYXQgd2FudHMgdG8gZGVmZXIgdG8gdGhlIGRlZmF1bHQgYmVoYXZpb3IuCisKKyAgICpjb250ZXh0KiBwYXJhbWV0ZXIgaGFzIHRoZSBzYW1lIG1lYW5pbmcgYXMgaW4KKyAgIDptZXRoOmBjYWxsX2V4Y2VwdGlvbl9oYW5kbGVyYC4KKworLi4gbWV0aG9kOjogQmFzZUV2ZW50TG9vcC5jYWxsX2V4Y2VwdGlvbl9oYW5kbGVyKGNvbnRleHQpCisKKyAgIENhbGwgdGhlIGN1cnJlbnQgZXZlbnQgbG9vcCBleGNlcHRpb24gaGFuZGxlci4KKworICAgKmNvbnRleHQqIGlzIGEgYGBkaWN0YGAgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGZvbGxvd2luZyBrZXlzCisgICAobmV3IGtleXMgbWF5IGJlIGludHJvZHVjZWQgbGF0ZXIpOgorCisgICAqICdtZXNzYWdlJzogRXJyb3IgbWVzc2FnZTsKKyAgICogJ2V4Y2VwdGlvbicgKG9wdGlvbmFsKTogRXhjZXB0aW9uIG9iamVjdDsKKyAgICogJ2Z1dHVyZScgKG9wdGlvbmFsKTogOmNsYXNzOmBhc3luY2lvLkZ1dHVyZWAgaW5zdGFuY2U7CisgICAqICdoYW5kbGUnIChvcHRpb25hbCk6IDpjbGFzczpgYXN5bmNpby5IYW5kbGVgIGluc3RhbmNlOworICAgKiAncHJvdG9jb2wnIChvcHRpb25hbCk6IDpyZWY6YFByb3RvY29sIDxhc3luY2lvLXByb3RvY29sPmAgaW5zdGFuY2U7CisgICAqICd0cmFuc3BvcnQnIChvcHRpb25hbCk6IDpyZWY6YFRyYW5zcG9ydCA8YXN5bmNpby10cmFuc3BvcnQ+YCBpbnN0YW5jZTsKKyAgICogJ3NvY2tldCcgKG9wdGlvbmFsKTogOmNsYXNzOmBzb2NrZXQuc29ja2V0YCBpbnN0YW5jZS4KKworICAgLi4gbm90ZTo6CisKKyAgICAgICBOb3RlOiB0aGlzIG1ldGhvZCBzaG91bGQgbm90IGJlIG92ZXJsb2FkZWQgaW4gc3ViY2xhc3NlZAorICAgICAgIGV2ZW50IGxvb3BzLiAgRm9yIGFueSBjdXN0b20gZXhjZXB0aW9uIGhhbmRsaW5nLCB1c2UKKyAgICAgICA6bWV0aDpgc2V0X2V4Y2VwdGlvbl9oYW5kbGVyKClgIG1ldGhvZC4KKworRGVidWcgbW9kZQorLS0tLS0tLS0tLQorCisuLiBtZXRob2Q6OiBCYXNlRXZlbnRMb29wLmdldF9kZWJ1ZygpCisKKyAgIEdldCB0aGUgZGVidWcgbW9kZSAoOmNsYXNzOmBib29sYCkgb2YgdGhlIGV2ZW50IGxvb3AuCisKKyAgIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGBgVHJ1ZWBgIGlmIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZQorICAgOmVudnZhcjpgUFlUSE9OQVNZTkNJT0RFQlVHYCBpcyBzZXQgdG8gYSBub24tZW1wdHkgc3RyaW5nLCBgYEZhbHNlYGAKKyAgIG90aGVyd2lzZS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40LjIKKworLi4gbWV0aG9kOjogQmFzZUV2ZW50TG9vcC5zZXRfZGVidWcoZW5hYmxlZDogYm9vbCkKKworICAgU2V0IHRoZSBkZWJ1ZyBtb2RlIG9mIHRoZSBldmVudCBsb29wLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQuMgorCisuLiBzZWVhbHNvOjoKKworICAgVGhlIDpyZWY6YGRlYnVnIG1vZGUgb2YgYXN5bmNpbyA8YXN5bmNpby1kZWJ1Zy1tb2RlPmAuCisKK1NlcnZlcgorLS0tLS0tCisKKy4uIGNsYXNzOjogU2VydmVyCisKKyAgIFNlcnZlciBsaXN0ZW5pbmcgb24gc29ja2V0cy4KKworICAgT2JqZWN0IGNyZWF0ZWQgYnkgdGhlIDptZXRoOmBCYXNlRXZlbnRMb29wLmNyZWF0ZV9zZXJ2ZXJgIG1ldGhvZCBhbmQgdGhlCisgICA6ZnVuYzpgc3RhcnRfc2VydmVyYCBmdW5jdGlvbi4gRG9uJ3QgaW5zdGFudGlhdGUgdGhlIGNsYXNzIGRpcmVjdGx5LgorCisgICAuLiBtZXRob2Q6OiBjbG9zZSgpCisKKyAgICAgIFN0b3Agc2VydmluZzogY2xvc2UgbGlzdGVuaW5nIHNvY2tldHMgYW5kIHNldCB0aGUgOmF0dHI6YHNvY2tldHNgCisgICAgICBhdHRyaWJ1dGUgdG8gYGBOb25lYGAuCisKKyAgICAgIFRoZSBzb2NrZXRzIHRoYXQgcmVwcmVzZW50IGV4aXN0aW5nIGluY29taW5nIGNsaWVudCBjb25uZWN0aW9ucyBhcmUKKyAgICAgIGxlYXZlZCBvcGVuLgorCisgICAgICBUaGUgc2VydmVyIGlzIGNsb3NlZCBhc3luY2hvbm91c2x5LCB1c2UgdGhlIDptZXRoOmB3YWl0X2Nsb3NlZGAgY29yb3V0aW5lCisgICAgICB0byB3YWl0IHVudGlsIHRoZSBzZXJ2ZXIgaXMgY2xvc2VkLgorCisgICAuLiBjb3JvdXRpbmVtZXRob2Q6OiB3YWl0X2Nsb3NlZCgpCisKKyAgICAgIFdhaXQgdW50aWwgdGhlIDptZXRoOmBjbG9zZWAgbWV0aG9kIGNvbXBsZXRlcy4KKworICAgICAgVGhpcyBtZXRob2QgaXMgYSA6cmVmOmBjb3JvdXRpbmUgPGNvcm91dGluZT5gLgorCisgICAuLiBhdHRyaWJ1dGU6OiBzb2NrZXRzCisKKyAgICAgIExpc3Qgb2YgOmNsYXNzOmBzb2NrZXQuc29ja2V0YCBvYmplY3RzIHRoZSBzZXJ2ZXIgaXMgbGlzdGVuaW5nIHRvLCBvcgorICAgICAgYGBOb25lYGAgaWYgdGhlIHNlcnZlciBpcyBjbG9zZWQuCisKKworSGFuZGxlCistLS0tLS0KKworLi4gY2xhc3M6OiBIYW5kbGUKKworICAgQSBjYWxsYmFjayB3cmFwcGVyIG9iamVjdCByZXR1cm5lZCBieSA6ZnVuYzpgQmFzZUV2ZW50TG9vcC5jYWxsX3Nvb25gLAorICAgOmZ1bmM6YEJhc2VFdmVudExvb3AuY2FsbF9zb29uX3RocmVhZHNhZmVgLCA6ZnVuYzpgQmFzZUV2ZW50TG9vcC5jYWxsX2xhdGVyYCwKKyAgIGFuZCA6ZnVuYzpgQmFzZUV2ZW50TG9vcC5jYWxsX2F0YC4KKworICAgLi4gbWV0aG9kOjogY2FuY2VsKCkKKworICAgICAgQ2FuY2VsIHRoZSBjYWxsLiAgSWYgdGhlIGNhbGxiYWNrIGlzIGFscmVhZHkgY2FuY2VsZWQgb3IgZXhlY3V0ZWQsCisgICAgICB0aGlzIG1ldGhvZCBoYXMgbm8gZWZmZWN0LgorCisKK0V2ZW50IGxvb3AgZXhhbXBsZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworLi4gX2FzeW5jaW8taGVsbG8td29ybGQtY2FsbGJhY2s6CisKK0hlbGxvIFdvcmxkIHdpdGggY2FsbF9zb29uKCkKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworRXhhbXBsZSB1c2luZyB0aGUgOm1ldGg6YEJhc2VFdmVudExvb3AuY2FsbF9zb29uYCBtZXRob2QgdG8gc2NoZWR1bGUgYQorY2FsbGJhY2suIFRoZSBjYWxsYmFjayBkaXNwbGF5cyBgYCJIZWxsbyBXb3JsZCJgYCBhbmQgdGhlbiBzdG9wcyB0aGUgZXZlbnQKK2xvb3A6OgorCisgICAgaW1wb3J0IGFzeW5jaW8KKworICAgIGRlZiBoZWxsb193b3JsZChsb29wKToKKyAgICAgICAgcHJpbnQoJ0hlbGxvIFdvcmxkJykKKyAgICAgICAgbG9vcC5zdG9wKCkKKworICAgIGxvb3AgPSBhc3luY2lvLmdldF9ldmVudF9sb29wKCkKKworICAgICMgU2NoZWR1bGUgYSBjYWxsIHRvIGhlbGxvX3dvcmxkKCkKKyAgICBsb29wLmNhbGxfc29vbihoZWxsb193b3JsZCwgbG9vcCkKKworICAgICMgQmxvY2tpbmcgY2FsbCBpbnRlcnJ1cHRlZCBieSBsb29wLnN0b3AoKQorICAgIGxvb3AucnVuX2ZvcmV2ZXIoKQorICAgIGxvb3AuY2xvc2UoKQorCisuLiBzZWVhbHNvOjoKKworICAgVGhlIDpyZWY6YEhlbGxvIFdvcmxkIGNvcm91dGluZSA8YXN5bmNpby1oZWxsby13b3JsZC1jb3JvdXRpbmU+YCBleGFtcGxlCisgICB1c2VzIGEgOnJlZjpgY29yb3V0aW5lIDxjb3JvdXRpbmU+YC4KKworCisuLiBfYXN5bmNpby1kYXRlLWNhbGxiYWNrOgorCitEaXNwbGF5IHRoZSBjdXJyZW50IGRhdGUgd2l0aCBjYWxsX2xhdGVyKCkKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorCitFeGFtcGxlIG9mIGNhbGxiYWNrIGRpc3BsYXlpbmcgdGhlIGN1cnJlbnQgZGF0ZSBldmVyeSBzZWNvbmQuIFRoZSBjYWxsYmFjayB1c2VzCit0aGUgOm1ldGg6YEJhc2VFdmVudExvb3AuY2FsbF9sYXRlcmAgbWV0aG9kIHRvIHJlc2NoZWR1bGUgaXRzZWxmIGR1cmluZyA1CitzZWNvbmRzLCBhbmQgdGhlbiBzdG9wcyB0aGUgZXZlbnQgbG9vcDo6CisKKyAgICBpbXBvcnQgYXN5bmNpbworICAgIGltcG9ydCBkYXRldGltZQorCisgICAgZGVmIGRpc3BsYXlfZGF0ZShlbmRfdGltZSwgbG9vcCk6CisgICAgICAgIHByaW50KGRhdGV0aW1lLmRhdGV0aW1lLm5vdygpKQorICAgICAgICBpZiAobG9vcC50aW1lKCkgKyAxLjApIDwgZW5kX3RpbWU6CisgICAgICAgICAgICBsb29wLmNhbGxfbGF0ZXIoMSwgZGlzcGxheV9kYXRlLCBlbmRfdGltZSwgbG9vcCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxvb3Auc3RvcCgpCisKKyAgICBsb29wID0gYXN5bmNpby5nZXRfZXZlbnRfbG9vcCgpCisKKyAgICAjIFNjaGVkdWxlIHRoZSBmaXJzdCBjYWxsIHRvIGRpc3BsYXlfZGF0ZSgpCisgICAgZW5kX3RpbWUgPSBsb29wLnRpbWUoKSArIDUuMAorICAgIGxvb3AuY2FsbF9zb29uKGRpc3BsYXlfZGF0ZSwgZW5kX3RpbWUsIGxvb3ApCisKKyAgICAjIEJsb2NraW5nIGNhbGwgaW50ZXJydXB0ZWQgYnkgbG9vcC5zdG9wKCkKKyAgICBsb29wLnJ1bl9mb3JldmVyKCkKKyAgICBsb29wLmNsb3NlKCkKKworLi4gc2VlYWxzbzo6CisKKyAgIFRoZSA6cmVmOmBjb3JvdXRpbmUgZGlzcGxheWluZyB0aGUgY3VycmVudCBkYXRlCisgICA8YXN5bmNpby1kYXRlLWNvcm91dGluZT5gIGV4YW1wbGUgdXNlcyBhIDpyZWY6YGNvcm91dGluZQorICAgPGNvcm91dGluZT5gLgorCisKKy4uIF9hc3luY2lvLXdhdGNoLXJlYWQtZXZlbnQ6CisKK1dhdGNoIGEgZmlsZSBkZXNjcmlwdG9yIGZvciByZWFkIGV2ZW50cworXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKK1dhaXQgdW50aWwgYSBmaWxlIGRlc2NyaXB0b3IgcmVjZWl2ZWQgc29tZSBkYXRhIHVzaW5nIHRoZQorOm1ldGg6YEJhc2VFdmVudExvb3AuYWRkX3JlYWRlcmAgbWV0aG9kIGFuZCB0aGVuIGNsb3NlIHRoZSBldmVudCBsb29wOjoKKworICAgIGltcG9ydCBhc3luY2lvCisgICAgdHJ5OgorICAgICAgICBmcm9tIHNvY2tldCBpbXBvcnQgc29ja2V0cGFpcgorICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgZnJvbSBhc3luY2lvLndpbmRvd3NfdXRpbHMgaW1wb3J0IHNvY2tldHBhaXIKKworICAgICMgQ3JlYXRlIGEgcGFpciBvZiBjb25uZWN0ZWQgZmlsZSBkZXNjcmlwdG9ycworICAgIHJzb2NrLCB3c29jayA9IHNvY2tldHBhaXIoKQorICAgIGxvb3AgPSBhc3luY2lvLmdldF9ldmVudF9sb29wKCkKKworICAgIGRlZiByZWFkZXIoKToKKyAgICAgICAgZGF0YSA9IHJzb2NrLnJlY3YoMTAwKQorICAgICAgICBwcmludCgiUmVjZWl2ZWQ6IiwgZGF0YS5kZWNvZGUoKSkKKyAgICAgICAgIyBXZSBhcmUgZG9uZTogdW5yZWdpc3RlciB0aGUgZmlsZSBkZXNjcmlwdG9yCisgICAgICAgIGxvb3AucmVtb3ZlX3JlYWRlcihyc29jaykKKyAgICAgICAgIyBTdG9wIHRoZSBldmVudCBsb29wCisgICAgICAgIGxvb3Auc3RvcCgpCisKKyAgICAjIFJlZ2lzdGVyIHRoZSBmaWxlIGRlc2NyaXB0b3IgZm9yIHJlYWQgZXZlbnQKKyAgICBsb29wLmFkZF9yZWFkZXIocnNvY2ssIHJlYWRlcikKKworICAgICMgU2ltdWxhdGUgdGhlIHJlY2VwdGlvbiBvZiBkYXRhIGZyb20gdGhlIG5ldHdvcmsKKyAgICBsb29wLmNhbGxfc29vbih3c29jay5zZW5kLCAnYWJjJy5lbmNvZGUoKSkKKworICAgICMgUnVuIHRoZSBldmVudCBsb29wCisgICAgbG9vcC5ydW5fZm9yZXZlcigpCisKKyAgICAjIFdlIGFyZSBkb25lLCBjbG9zZSBzb2NrZXRzIGFuZCB0aGUgZXZlbnQgbG9vcAorICAgIHJzb2NrLmNsb3NlKCkKKyAgICB3c29jay5jbG9zZSgpCisgICAgbG9vcC5jbG9zZSgpCisKKy4uIHNlZWFsc286OgorCisgICBUaGUgOnJlZjpgcmVnaXN0ZXIgYW4gb3BlbiBzb2NrZXQgdG8gd2FpdCBmb3IgZGF0YSB1c2luZyBhIHByb3RvY29sCisgICA8YXN5bmNpby1yZWdpc3Rlci1zb2NrZXQ+YCBleGFtcGxlIHVzZXMgYSBsb3ctbGV2ZWwgcHJvdG9jb2wgY3JlYXRlZCBieSB0aGUKKyAgIDptZXRoOmBCYXNlRXZlbnRMb29wLmNyZWF0ZV9jb25uZWN0aW9uYCBtZXRob2QuCisKKyAgIFRoZSA6cmVmOmByZWdpc3RlciBhbiBvcGVuIHNvY2tldCB0byB3YWl0IGZvciBkYXRhIHVzaW5nIHN0cmVhbXMKKyAgIDxhc3luY2lvLXJlZ2lzdGVyLXNvY2tldC1zdHJlYW1zPmAgZXhhbXBsZSB1c2VzIGhpZ2gtbGV2ZWwgc3RyZWFtcworICAgY3JlYXRlZCBieSB0aGUgOmZ1bmM6YG9wZW5fY29ubmVjdGlvbmAgZnVuY3Rpb24gaW4gYSBjb3JvdXRpbmUuCisKKworU2V0IHNpZ25hbCBoYW5kbGVycyBmb3IgU0lHSU5UIGFuZCBTSUdURVJNCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworUmVnaXN0ZXIgaGFuZGxlcnMgZm9yIHNpZ25hbHMgOnB5OmRhdGE6YFNJR0lOVGAgYW5kIDpweTpkYXRhOmBTSUdURVJNYCB1c2luZwordGhlIDptZXRoOmBCYXNlRXZlbnRMb29wLmFkZF9zaWduYWxfaGFuZGxlcmAgbWV0aG9kOjoKKworICAgIGltcG9ydCBhc3luY2lvCisgICAgaW1wb3J0IGZ1bmN0b29scworICAgIGltcG9ydCBvcworICAgIGltcG9ydCBzaWduYWwKKworICAgIGRlZiBhc2tfZXhpdChzaWduYW1lKToKKyAgICAgICAgcHJpbnQoImdvdCBzaWduYWwgJXM6IGV4aXQiICUgc2lnbmFtZSkKKyAgICAgICAgbG9vcC5zdG9wKCkKKworICAgIGxvb3AgPSBhc3luY2lvLmdldF9ldmVudF9sb29wKCkKKyAgICBmb3Igc2lnbmFtZSBpbiAoJ1NJR0lOVCcsICdTSUdURVJNJyk6CisgICAgICAgIGxvb3AuYWRkX3NpZ25hbF9oYW5kbGVyKGdldGF0dHIoc2lnbmFsLCBzaWduYW1lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rvb2xzLnBhcnRpYWwoYXNrX2V4aXQsIHNpZ25hbWUpKQorCisgICAgcHJpbnQoIkV2ZW50IGxvb3AgcnVubmluZyBmb3JldmVyLCBwcmVzcyBDdHJsK0MgdG8gaW50ZXJydXB0LiIpCisgICAgcHJpbnQoInBpZCAlczogc2VuZCBTSUdJTlQgb3IgU0lHVEVSTSB0byBleGl0LiIgJSBvcy5nZXRwaWQoKSkKKyAgICB0cnk6CisgICAgICAgIGxvb3AucnVuX2ZvcmV2ZXIoKQorICAgIGZpbmFsbHk6CisgICAgICAgIGxvb3AuY2xvc2UoKQorCitUaGlzIGV4YW1wbGUgb25seSB3b3JrcyBvbiBVTklYLgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvYXN5bmNpby1ldmVudGxvb3BzLnJzdCBiL0RvYy9saWJyYXJ5L2FzeW5jaW8tZXZlbnRsb29wcy5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQyZjY1YQotLS0gL2Rldi9udWxsCisrKyBiL0RvYy9saWJyYXJ5L2FzeW5jaW8tZXZlbnRsb29wcy5yc3QKQEAgLTAsMCArMSwxOTggQEAKKy4uIGN1cnJlbnRtb2R1bGU6OiBhc3luY2lvCisKK0V2ZW50IGxvb3BzCis9PT09PT09PT09PQorCitFdmVudCBsb29wIGZ1bmN0aW9ucworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYXJlIGNvbnZlbmllbnQgc2hvcnRjdXRzIHRvIGFjY2Vzc2luZyB0aGUgbWV0aG9kcyBvZiB0aGUKK2dsb2JhbCBwb2xpY3kuIE5vdGUgdGhhdCB0aGlzIHByb3ZpZGVzIGFjY2VzcyB0byB0aGUgZGVmYXVsdCBwb2xpY3ksIHVubGVzcyBhbgorYWx0ZXJuYXRpdmUgcG9saWN5IHdhcyBzZXQgYnkgY2FsbGluZyA6ZnVuYzpgc2V0X2V2ZW50X2xvb3BfcG9saWN5YCBlYXJsaWVyIGluCit0aGUgZXhlY3V0aW9uIG9mIHRoZSBwcm9jZXNzLgorCisuLiBmdW5jdGlvbjo6IGdldF9ldmVudF9sb29wKCkKKworICAgRXF1aXZhbGVudCB0byBjYWxsaW5nIGBgZ2V0X2V2ZW50X2xvb3BfcG9saWN5KCkuZ2V0X2V2ZW50X2xvb3AoKWBgLgorCisuLiBmdW5jdGlvbjo6IHNldF9ldmVudF9sb29wKGxvb3ApCisKKyAgIEVxdWl2YWxlbnQgdG8gY2FsbGluZyBgYGdldF9ldmVudF9sb29wX3BvbGljeSgpLnNldF9ldmVudF9sb29wKGxvb3ApYGAuCisKKy4uIGZ1bmN0aW9uOjogbmV3X2V2ZW50X2xvb3AoKQorCisgICBFcXVpdmFsZW50IHRvIGNhbGxpbmcgYGBnZXRfZXZlbnRfbG9vcF9wb2xpY3koKS5uZXdfZXZlbnRfbG9vcCgpYGAuCisKKworLi4gX2FzeW5jaW8tZXZlbnQtbG9vcHM6CisKK0F2YWlsYWJsZSBldmVudCBsb29wcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2FzeW5jaW8gY3VycmVudGx5IHByb3ZpZGVzIHR3byBpbXBsZW1lbnRhdGlvbnMgb2YgZXZlbnQgbG9vcHM6Cis6Y2xhc3M6YFNlbGVjdG9yRXZlbnRMb29wYCBhbmQgOmNsYXNzOmBQcm9hY3RvckV2ZW50TG9vcGAuCisKKy4uIGNsYXNzOjogU2VsZWN0b3JFdmVudExvb3AKKworICAgRXZlbnQgbG9vcCBiYXNlZCBvbiB0aGUgOm1vZDpgc2VsZWN0b3JzYCBtb2R1bGUuIFN1YmNsYXNzIG9mCisgICA6Y2xhc3M6YEJhc2VFdmVudExvb3BgLgorCisgICBVc2UgdGhlIG1vc3QgZWZmaWNpZW50IHNlbGVjdG9yIGF2YWlsYWJsZSBvbiB0aGUgcGxhdGZvcm0uCisKKyAgIE9uIFdpbmRvd3MsIG9ubHkgc29ja2V0cyBhcmUgc3VwcG9ydGVkIChleDogcGlwZXMgYXJlIG5vdCBzdXBwb3J0ZWQpOgorICAgc2VlIHRoZSBgTVNETiBkb2N1bWVudGF0aW9uIG9mIHNlbGVjdAorICAgPGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS93aW5kb3dzL2Rlc2t0b3AvbXM3NDAxNDElMjh2PXZzLjg1JTI5LmFzcHg+YF8uCisKKy4uIGNsYXNzOjogUHJvYWN0b3JFdmVudExvb3AKKworICAgUHJvYWN0b3IgZXZlbnQgbG9vcCBmb3IgV2luZG93cyB1c2luZyAiSS9PIENvbXBsZXRpb24gUG9ydHMiIGFrYSBJT0NQLgorICAgU3ViY2xhc3Mgb2YgOmNsYXNzOmBCYXNlRXZlbnRMb29wYC4KKworICAgQXZhaWxhYmlsaXR5OiBXaW5kb3dzLgorCisgICAuLiBzZWVhbHNvOjoKKworICAgICAgYE1TRE4gZG9jdW1lbnRhdGlvbiBvbiBJL08gQ29tcGxldGlvbiBQb3J0cworICAgICAgPGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS93aW5kb3dzL2Rlc2t0b3AvYWEzNjUxOTglMjh2PXZzLjg1JTI5LmFzcHg+YF8uCisKK0V4YW1wbGUgdG8gdXNlIGEgOmNsYXNzOmBQcm9hY3RvckV2ZW50TG9vcGAgb24gV2luZG93czo6CisKKyAgICBpbXBvcnQgYXN5bmNpbywgc3lzCisKKyAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKKyAgICAgICAgbG9vcCA9IGFzeW5jaW8uUHJvYWN0b3JFdmVudExvb3AoKQorICAgICAgICBhc3luY2lvLnNldF9ldmVudF9sb29wKGxvb3ApCisKKy4uIF9hc3luY2lvLXBsYXRmb3JtLXN1cHBvcnQ6CisKK1BsYXRmb3JtIHN1cHBvcnQKKy0tLS0tLS0tLS0tLS0tLS0KKworVGhlIDptb2Q6YGFzeW5jaW9gIG1vZHVsZSBoYXMgYmVlbiBkZXNpZ25lZCB0byBiZSBwb3J0YWJsZSwgYnV0IGVhY2ggcGxhdGZvcm0KK3N0aWxsIGhhcyBzdWJ0bGUgZGlmZmVyZW5jZXMgYW5kIG1heSBub3Qgc3VwcG9ydCBhbGwgOm1vZDpgYXN5bmNpb2AgZmVhdHVyZXMuCisKK1dpbmRvd3MKK15eXl5eXl4KKworQ29tbW9uIGxpbWl0cyBvZiBXaW5kb3dzIGV2ZW50IGxvb3BzOgorCistIDptZXRoOmB+QmFzZUV2ZW50TG9vcC5jcmVhdGVfdW5peF9jb25uZWN0aW9uYCBhbmQKKyAgOm1ldGg6YH5CYXNlRXZlbnRMb29wLmNyZWF0ZV91bml4X3NlcnZlcmAgYXJlIG5vdCBzdXBwb3J0ZWQ6IHRoZSBzb2NrZXQKKyAgZmFtaWx5IDpkYXRhOmBzb2NrZXQuQUZfVU5JWGAgaXMgc3BlY2lmaWMgdG8gVU5JWAorLSA6bWV0aDpgfkJhc2VFdmVudExvb3AuYWRkX3NpZ25hbF9oYW5kbGVyYCBhbmQKKyAgOm1ldGg6YH5CYXNlRXZlbnRMb29wLnJlbW92ZV9zaWduYWxfaGFuZGxlcmAgYXJlIG5vdCBzdXBwb3J0ZWQKKy0gOm1ldGg6YEV2ZW50TG9vcFBvbGljeS5zZXRfY2hpbGRfd2F0Y2hlcmAgaXMgbm90IHN1cHBvcnRlZC4KKyAgOmNsYXNzOmBQcm9hY3RvckV2ZW50TG9vcGAgc3VwcG9ydHMgc3VicHJvY2Vzc2VzLiBJdCBoYXMgb25seSBvbmUKKyAgaW1wbGVtZW50YXRpb24gdG8gd2F0Y2ggY2hpbGQgcHJvY2Vzc2VzLCB0aGVyZSBpcyBubyBuZWVkIHRvIGNvbmZpZ3VyZSBpdC4KKworOmNsYXNzOmBTZWxlY3RvckV2ZW50TG9vcGAgc3BlY2lmaWMgbGltaXRzOgorCistIDpjbGFzczpgfnNlbGVjdG9ycy5TZWxlY3RTZWxlY3RvcmAgaXMgdXNlZCB3aGljaCBvbmx5IHN1cHBvcnRzIHNvY2tldHMKKyAgYW5kIGlzIGxpbWl0ZWQgdG8gNTEyIHNvY2tldHMuCistIDptZXRoOmB+QmFzZUV2ZW50TG9vcC5hZGRfcmVhZGVyYCBhbmQgOm1ldGg6YH5CYXNlRXZlbnRMb29wLmFkZF93cml0ZXJgIG9ubHkKKyAgYWNjZXB0IGZpbGUgZGVzY3JpcHRvcnMgb2Ygc29ja2V0cworLSBQaXBlcyBhcmUgbm90IHN1cHBvcnRlZAorICAoZXg6IDptZXRoOmB+QmFzZUV2ZW50TG9vcC5jb25uZWN0X3JlYWRfcGlwZWAsCisgIDptZXRoOmB+QmFzZUV2ZW50TG9vcC5jb25uZWN0X3dyaXRlX3BpcGVgKQorLSA6cmVmOmBTdWJwcm9jZXNzZXMgPGFzeW5jaW8tc3VicHJvY2Vzcz5gIGFyZSBub3Qgc3VwcG9ydGVkCisgIChleDogOm1ldGg6YH5CYXNlRXZlbnRMb29wLnN1YnByb2Nlc3NfZXhlY2AsCisgIDptZXRoOmB+QmFzZUV2ZW50TG9vcC5zdWJwcm9jZXNzX3NoZWxsYCkKKworOmNsYXNzOmBQcm9hY3RvckV2ZW50TG9vcGAgc3BlY2lmaWMgbGltaXRzOgorCistIFNTTCBpcyBub3Qgc3VwcG9ydGVkOiA6bWV0aDpgfkJhc2VFdmVudExvb3AuY3JlYXRlX2Nvbm5lY3Rpb25gIGFuZAorICA6bWV0aDpgfkJhc2VFdmVudExvb3AuY3JlYXRlX3NlcnZlcmAgY2Fubm90IGJlIHVzZWQgd2l0aCBTU0wgZm9yIGV4YW1wbGUKKy0gOm1ldGg6YH5CYXNlRXZlbnRMb29wLmNyZWF0ZV9kYXRhZ3JhbV9lbmRwb2ludGAgKFVEUCkgaXMgbm90IHN1cHBvcnRlZAorLSA6bWV0aDpgfkJhc2VFdmVudExvb3AuYWRkX3JlYWRlcmAgYW5kIDptZXRoOmB+QmFzZUV2ZW50TG9vcC5hZGRfd3JpdGVyYCBhcmUKKyAgbm90IHN1cHBvcnRlZAorCitUaGUgcmVzb2x1dGlvbiBvZiB0aGUgbW9ub3RvbmljIGNsb2NrIG9uIFdpbmRvd3MgaXMgdXN1YWxseSBhcm91bmQgMTUuNiBtc2VjLgorVGhlIGJlc3QgcmVzb2x1dGlvbiBpcyAwLjUgbXNlYy4gVGhlIHJlc29sdXRpb24gZGVwZW5kcyBvbiB0aGUgaGFyZHdhcmUKKyhhdmFpbGFiaWxpdHkgb2YgYEhQRVQKKzxodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0hpZ2hfUHJlY2lzaW9uX0V2ZW50X1RpbWVyPmBfKSBhbmQgb24gdGhlIFdpbmRvd3MKK2NvbmZpZ3VyYXRpb24uIFNlZSA6cmVmOmBhc3luY2lvIGRlbGF5ZWQgY2FsbHMgPGFzeW5jaW8tZGVsYXllZC1jYWxscz5gLgorCisKK01hYyBPUyBYCiteXl5eXl5eXgorCitDaGFyYWN0ZXIgZGV2aWNlcyBsaWtlIFBUWSBhcmUgb25seSB3ZWxsIHN1cHBvcnRlZCBzaW5jZSBNYXZlcmlja3MgKE1hYyBPUworMTAuOSkuIFRoZXkgYXJlIG5vdCBzdXBwb3J0ZWQgYXQgYWxsIG9uIE1hYyBPUyAxMC41IGFuZCBvbGRlci4KKworT24gTWFjIE9TIDEwLjYsIDEwLjcgYW5kIDEwLjgsIHRoZSBkZWZhdWx0IGV2ZW50IGxvb3AgaXMKKzpjbGFzczpgU2VsZWN0b3JFdmVudExvb3BgIHdoaWNoIHVzZXMgOmNsYXNzOmBzZWxlY3RvcnMuS3F1ZXVlU2VsZWN0b3JgLgorOmNsYXNzOmBzZWxlY3RvcnMuS3F1ZXVlU2VsZWN0b3JgIGRvZXMgbm90IHN1cHBvcnQgY2hhcmFjdGVyIGRldmljZXMgb24gdGhlc2UKK3ZlcnNpb25zLiAgVGhlIDpjbGFzczpgU2VsZWN0b3JFdmVudExvb3BgIGNhbiBiZSB1c2VkIHdpdGgKKzpjbGFzczpgfnNlbGVjdG9ycy5TZWxlY3RTZWxlY3RvcmAgb3IgOmNsYXNzOmB+c2VsZWN0b3JzLlBvbGxTZWxlY3RvcmAgdG8KK3N1cHBvcnQgY2hhcmFjdGVyIGRldmljZXMgb24gdGhlc2UgdmVyc2lvbnMgb2YgTWFjIE9TIFguIEV4YW1wbGU6OgorCisgICAgaW1wb3J0IGFzeW5jaW8KKyAgICBpbXBvcnQgc2VsZWN0b3JzCisKKyAgICBzZWxlY3RvciA9IHNlbGVjdG9ycy5TZWxlY3RTZWxlY3RvcigpCisgICAgbG9vcCA9IGFzeW5jaW8uU2VsZWN0b3JFdmVudExvb3Aoc2VsZWN0b3IpCisgICAgYXN5bmNpby5zZXRfZXZlbnRfbG9vcChsb29wKQorCisKK0V2ZW50IGxvb3AgcG9saWNpZXMgYW5kIHRoZSBkZWZhdWx0IHBvbGljeQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0V2ZW50IGxvb3AgbWFuYWdlbWVudCBpcyBhYnN0cmFjdGVkIHdpdGggYSAqcG9saWN5KiBwYXR0ZXJuLCB0byBwcm92aWRlIG1heGltYWwKK2ZsZXhpYmlsaXR5IGZvciBjdXN0b20gcGxhdGZvcm1zIGFuZCBmcmFtZXdvcmtzLiBUaHJvdWdob3V0IHRoZSBleGVjdXRpb24gb2YgYQorcHJvY2VzcywgYSBzaW5nbGUgZ2xvYmFsIHBvbGljeSBvYmplY3QgbWFuYWdlcyB0aGUgZXZlbnQgbG9vcHMgYXZhaWxhYmxlIHRvIHRoZQorcHJvY2VzcyBiYXNlZCBvbiB0aGUgY2FsbGluZyBjb250ZXh0LiBBIHBvbGljeSBpcyBhbiBvYmplY3QgaW1wbGVtZW50aW5nIHRoZQorOmNsYXNzOmBBYnN0cmFjdEV2ZW50TG9vcFBvbGljeWAgaW50ZXJmYWNlLgorCitGb3IgbW9zdCB1c2VycyBvZiA6bW9kOmBhc3luY2lvYCwgcG9saWNpZXMgbmV2ZXIgaGF2ZSB0byBiZSBkZWFsdCB3aXRoCitleHBsaWNpdGx5LCBzaW5jZSB0aGUgZGVmYXVsdCBnbG9iYWwgcG9saWN5IGlzIHN1ZmZpY2llbnQuCisKK1RoZSBkZWZhdWx0IHBvbGljeSBkZWZpbmVzIGNvbnRleHQgYXMgdGhlIGN1cnJlbnQgdGhyZWFkLCBhbmQgbWFuYWdlcyBhbiBldmVudAorbG9vcCBwZXIgdGhyZWFkIHRoYXQgaW50ZXJhY3RzIHdpdGggOm1vZDpgYXN5bmNpb2AuIFRoZSBtb2R1bGUtbGV2ZWwgZnVuY3Rpb25zCis6ZnVuYzpgZ2V0X2V2ZW50X2xvb3BgIGFuZCA6ZnVuYzpgc2V0X2V2ZW50X2xvb3BgIHByb3ZpZGUgY29udmVuaWVudCBhY2Nlc3MgdG8KK2V2ZW50IGxvb3BzIG1hbmFnZWQgYnkgdGhlIGRlZmF1bHQgcG9saWN5LgorCisKK0V2ZW50IGxvb3AgcG9saWN5IGludGVyZmFjZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FuIGV2ZW50IGxvb3AgcG9saWN5IG11c3QgaW1wbGVtZW50IHRoZSBmb2xsb3dpbmcgaW50ZXJmYWNlOgorCisuLiBjbGFzczo6IEFic3RyYWN0RXZlbnRMb29wUG9saWN5CisKKyAgIEV2ZW50IGxvb3AgcG9saWN5LgorCisgICAuLiBtZXRob2Q6OiBnZXRfZXZlbnRfbG9vcCgpCisKKyAgICAgIEdldCB0aGUgZXZlbnQgbG9vcCBmb3IgdGhlIGN1cnJlbnQgY29udGV4dC4KKworICAgICAgUmV0dXJucyBhbiBldmVudCBsb29wIG9iamVjdCBpbXBsZW1lbnRpbmcgdGhlIDpjbGFzczpgQmFzZUV2ZW50TG9vcGAKKyAgICAgIGludGVyZmFjZS4KKworICAgICAgUmFpc2VzIGFuIGV4Y2VwdGlvbiBpbiBjYXNlIG5vIGV2ZW50IGxvb3AgaGFzIGJlZW4gc2V0IGZvciB0aGUgY3VycmVudAorICAgICAgY29udGV4dCBhbmQgdGhlIGN1cnJlbnQgcG9saWN5IGRvZXMgbm90IHNwZWNpZnkgdG8gY3JlYXRlIG9uZS4gSXQgbXVzdAorICAgICAgbmV2ZXIgcmV0dXJuIGBgTm9uZWBgLgorCisgICAuLiBtZXRob2Q6OiBzZXRfZXZlbnRfbG9vcChsb29wKQorCisgICAgICBTZXQgdGhlIGV2ZW50IGxvb3AgZm9yIHRoZSBjdXJyZW50IGNvbnRleHQgdG8gKmxvb3AqLgorCisgICAuLiBtZXRob2Q6OiBuZXdfZXZlbnRfbG9vcCgpCisKKyAgICAgIENyZWF0ZSBhbmQgcmV0dXJuIGEgbmV3IGV2ZW50IGxvb3Agb2JqZWN0IGFjY29yZGluZyB0byB0aGlzIHBvbGljeSdzCisgICAgICBydWxlcy4KKworICAgICAgSWYgdGhlcmUncyBuZWVkIHRvIHNldCB0aGlzIGxvb3AgYXMgdGhlIGV2ZW50IGxvb3AgZm9yIHRoZSBjdXJyZW50CisgICAgICBjb250ZXh0LCA6bWV0aDpgc2V0X2V2ZW50X2xvb3BgIG11c3QgYmUgY2FsbGVkIGV4cGxpY2l0bHkuCisKKworQWNjZXNzIHRvIHRoZSBnbG9iYWwgbG9vcCBwb2xpY3kKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy4uIGZ1bmN0aW9uOjogZ2V0X2V2ZW50X2xvb3BfcG9saWN5KCkKKworICAgR2V0IHRoZSBjdXJyZW50IGV2ZW50IGxvb3AgcG9saWN5LgorCisuLiBmdW5jdGlvbjo6IHNldF9ldmVudF9sb29wX3BvbGljeShwb2xpY3kpCisKKyAgIFNldCB0aGUgY3VycmVudCBldmVudCBsb29wIHBvbGljeS4gSWYgKnBvbGljeSogaXMgYGBOb25lYGAsIHRoZSBkZWZhdWx0CisgICBwb2xpY3kgaXMgcmVzdG9yZWQuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9hc3luY2lvLXByb3RvY29sLnJzdCBiL0RvYy9saWJyYXJ5L2FzeW5jaW8tcHJvdG9jb2wucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5Mjk4YjIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2MvbGlicmFyeS9hc3luY2lvLXByb3RvY29sLnJzdApAQCAtMCwwICsxLDcxNiBAQAorLi4gY3VycmVudG1vZHVsZTo6IGFzeW5jaW8KKworKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworVHJhbnNwb3J0cyAgYW5kIHByb3RvY29scyAoY2FsbGJhY2sgYmFzZWQgQVBJKQorKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworCisuLiBfYXN5bmNpby10cmFuc3BvcnQ6CisKK1RyYW5zcG9ydHMKKz09PT09PT09PT0KKworVHJhbnNwb3J0cyBhcmUgY2xhc3NlcyBwcm92aWRlZCBieSA6bW9kOmBhc3luY2lvYCBpbiBvcmRlciB0byBhYnN0cmFjdAordmFyaW91cyBraW5kcyBvZiBjb21tdW5pY2F0aW9uIGNoYW5uZWxzLiAgWW91IGdlbmVyYWxseSB3b24ndCBpbnN0YW50aWF0ZQorYSB0cmFuc3BvcnQgeW91cnNlbGY7IGluc3RlYWQsIHlvdSB3aWxsIGNhbGwgYSA6Y2xhc3M6YEJhc2VFdmVudExvb3BgIG1ldGhvZAord2hpY2ggd2lsbCBjcmVhdGUgdGhlIHRyYW5zcG9ydCBhbmQgdHJ5IHRvIGluaXRpYXRlIHRoZSB1bmRlcmx5aW5nCitjb21tdW5pY2F0aW9uIGNoYW5uZWwsIGNhbGxpbmcgeW91IGJhY2sgd2hlbiBpdCBzdWNjZWVkcy4KKworT25jZSB0aGUgY29tbXVuaWNhdGlvbiBjaGFubmVsIGlzIGVzdGFibGlzaGVkLCBhIHRyYW5zcG9ydCBpcyBhbHdheXMKK3BhaXJlZCB3aXRoIGEgOnJlZjpgcHJvdG9jb2wgPGFzeW5jaW8tcHJvdG9jb2w+YCBpbnN0YW5jZS4gIFRoZSBwcm90b2NvbCBjYW4KK3RoZW4gY2FsbCB0aGUgdHJhbnNwb3J0J3MgbWV0aG9kcyBmb3IgdmFyaW91cyBwdXJwb3Nlcy4KKworOm1vZDpgYXN5bmNpb2AgY3VycmVudGx5IGltcGxlbWVudHMgdHJhbnNwb3J0cyBmb3IgVENQLCBVRFAsIFNTTCwgYW5kCitzdWJwcm9jZXNzIHBpcGVzLiAgVGhlIG1ldGhvZHMgYXZhaWxhYmxlIG9uIGEgdHJhbnNwb3J0IGRlcGVuZCBvbgordGhlIHRyYW5zcG9ydCdzIGtpbmQuCisKK1RoZSB0cmFuc3BvcnQgY2xhc3NlcyBhcmUgOnJlZjpgbm90IHRocmVhZCBzYWZlIDxhc3luY2lvLW11bHRpdGhyZWFkaW5nPmAuCisKKworQmFzZVRyYW5zcG9ydAorLS0tLS0tLS0tLS0tLQorCisuLiBjbGFzczo6IEJhc2VUcmFuc3BvcnQKKworICAgQmFzZSBjbGFzcyBmb3IgdHJhbnNwb3J0cy4KKworICAgLi4gbWV0aG9kOjogY2xvc2Uoc2VsZikKKworICAgICAgQ2xvc2UgdGhlIHRyYW5zcG9ydC4gIElmIHRoZSB0cmFuc3BvcnQgaGFzIGEgYnVmZmVyIGZvciBvdXRnb2luZworICAgICAgZGF0YSwgYnVmZmVyZWQgZGF0YSB3aWxsIGJlIGZsdXNoZWQgYXN5bmNocm9ub3VzbHkuICBObyBtb3JlIGRhdGEKKyAgICAgIHdpbGwgYmUgcmVjZWl2ZWQuICBBZnRlciBhbGwgYnVmZmVyZWQgZGF0YSBpcyBmbHVzaGVkLCB0aGUKKyAgICAgIHByb3RvY29sJ3MgOm1ldGg6YGNvbm5lY3Rpb25fbG9zdGAgbWV0aG9kIHdpbGwgYmUgY2FsbGVkIHdpdGgKKyAgICAgIDpjb25zdDpgTm9uZWAgYXMgaXRzIGFyZ3VtZW50LgorCisgICAuLiBtZXRob2Q6OiBpc19jbG9zaW5nKHNlbGYpCisKKyAgICAgIFJldHVybiBgYFRydWVgYCBpZiB0aGUgdHJhbnNwb3J0IGlzIGNsb3Npbmcgb3IgaXMgY2xvc2VkLgorCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQuNAorCisgICAuLiBtZXRob2Q6OiBnZXRfZXh0cmFfaW5mbyhuYW1lLCBkZWZhdWx0PU5vbmUpCisKKyAgICAgIFJldHVybiBvcHRpb25hbCB0cmFuc3BvcnQgaW5mb3JtYXRpb24uICAqbmFtZSogaXMgYSBzdHJpbmcgcmVwcmVzZW50aW5nCisgICAgICB0aGUgcGllY2Ugb2YgdHJhbnNwb3J0LXNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGdldCwgKmRlZmF1bHQqIGlzIHRoZQorICAgICAgdmFsdWUgdG8gcmV0dXJuIGlmIHRoZSBpbmZvcm1hdGlvbiBkb2Vzbid0IGV4aXN0LgorCisgICAgICBUaGlzIG1ldGhvZCBhbGxvd3MgdHJhbnNwb3J0IGltcGxlbWVudGF0aW9ucyB0byBlYXNpbHkgZXhwb3NlCisgICAgICBjaGFubmVsLXNwZWNpZmljIGluZm9ybWF0aW9uLgorCisgICAgICAqIHNvY2tldDoKKworICAgICAgICAtIGBgJ3BlZXJuYW1lJ2BgOiB0aGUgcmVtb3RlIGFkZHJlc3MgdG8gd2hpY2ggdGhlIHNvY2tldCBpcyBjb25uZWN0ZWQsCisgICAgICAgICAgcmVzdWx0IG9mIDptZXRoOmBzb2NrZXQuc29ja2V0LmdldHBlZXJuYW1lYCAoYGBOb25lYGAgb24gZXJyb3IpCisgICAgICAgIC0gYGAnc29ja2V0J2BgOiA6Y2xhc3M6YHNvY2tldC5zb2NrZXRgIGluc3RhbmNlCisgICAgICAgIC0gYGAnc29ja25hbWUnYGA6IHRoZSBzb2NrZXQncyBvd24gYWRkcmVzcywKKyAgICAgICAgICByZXN1bHQgb2YgOm1ldGg6YHNvY2tldC5zb2NrZXQuZ2V0c29ja25hbWVgCisKKyAgICAgICogU1NMIHNvY2tldDoKKworICAgICAgICAtIGBgJ2NvbXByZXNzaW9uJ2BgOiB0aGUgY29tcHJlc3Npb24gYWxnb3JpdGhtIGJlaW5nIHVzZWQgYXMgYSBzdHJpbmcsCisgICAgICAgICAgb3IgYGBOb25lYGAgaWYgdGhlIGNvbm5lY3Rpb24gaXNuJ3QgY29tcHJlc3NlZDsgcmVzdWx0IG9mCisgICAgICAgICAgOm1ldGg6YHNzbC5TU0xTb2NrZXQuY29tcHJlc3Npb25gCisgICAgICAgIC0gYGAnY2lwaGVyJ2BgOiBhIHRocmVlLXZhbHVlIHR1cGxlIGNvbnRhaW5pbmcgdGhlIG5hbWUgb2YgdGhlIGNpcGhlcgorICAgICAgICAgIGJlaW5nIHVzZWQsIHRoZSB2ZXJzaW9uIG9mIHRoZSBTU0wgcHJvdG9jb2wgdGhhdCBkZWZpbmVzIGl0cyB1c2UsIGFuZAorICAgICAgICAgIHRoZSBudW1iZXIgb2Ygc2VjcmV0IGJpdHMgYmVpbmcgdXNlZDsgcmVzdWx0IG9mCisgICAgICAgICAgOm1ldGg6YHNzbC5TU0xTb2NrZXQuY2lwaGVyYAorICAgICAgICAtIGBgJ3BlZXJjZXJ0J2BgOiBwZWVyIGNlcnRpZmljYXRlOyByZXN1bHQgb2YKKyAgICAgICAgICA6bWV0aDpgc3NsLlNTTFNvY2tldC5nZXRwZWVyY2VydGAKKyAgICAgICAgLSBgYCdzc2xjb250ZXh0J2BgOiA6Y2xhc3M6YHNzbC5TU0xDb250ZXh0YCBpbnN0YW5jZQorICAgICAgICAtIGBgJ3NzbF9vYmplY3QnYGA6IDpjbGFzczpgc3NsLlNTTE9iamVjdGAgb3IgOmNsYXNzOmBzc2wuU1NMU29ja2V0YAorICAgICAgICAgIGluc3RhbmNlCisKKyAgICAgICogcGlwZToKKworICAgICAgICAtIGBgJ3BpcGUnYGA6IHBpcGUgb2JqZWN0CisKKyAgICAgICogc3VicHJvY2VzczoKKworICAgICAgICAtIGBgJ3N1YnByb2Nlc3MnYGA6IDpjbGFzczpgc3VicHJvY2Vzcy5Qb3BlbmAgaW5zdGFuY2UKKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQuNAorICAgICAgYGAnc3NsX29iamVjdCdgYCBpbmZvIHdhcyBhZGRlZCB0byBTU0wgc29ja2V0cy4KKworCitSZWFkVHJhbnNwb3J0CistLS0tLS0tLS0tLS0tCisKKy4uIGNsYXNzOjogUmVhZFRyYW5zcG9ydAorCisgICBJbnRlcmZhY2UgZm9yIHJlYWQtb25seSB0cmFuc3BvcnRzLgorCisgICAuLiBtZXRob2Q6OiBwYXVzZV9yZWFkaW5nKCkKKworICAgICAgUGF1c2UgdGhlIHJlY2VpdmluZyBlbmQgb2YgdGhlIHRyYW5zcG9ydC4gIE5vIGRhdGEgd2lsbCBiZSBwYXNzZWQgdG8KKyAgICAgIHRoZSBwcm90b2NvbCdzIDptZXRoOmBkYXRhX3JlY2VpdmVkYCBtZXRob2QgdW50aWwgOm1ldGg6YHJlc3VtZV9yZWFkaW5nYAorICAgICAgaXMgY2FsbGVkLgorCisgICAuLiBtZXRob2Q6OiByZXN1bWVfcmVhZGluZygpCisKKyAgICAgIFJlc3VtZSB0aGUgcmVjZWl2aW5nIGVuZC4gIFRoZSBwcm90b2NvbCdzIDptZXRoOmBkYXRhX3JlY2VpdmVkYCBtZXRob2QKKyAgICAgIHdpbGwgYmUgY2FsbGVkIG9uY2UgYWdhaW4gaWYgc29tZSBkYXRhIGlzIGF2YWlsYWJsZSBmb3IgcmVhZGluZy4KKworCitXcml0ZVRyYW5zcG9ydAorLS0tLS0tLS0tLS0tLS0KKworLi4gY2xhc3M6OiBXcml0ZVRyYW5zcG9ydAorCisgICBJbnRlcmZhY2UgZm9yIHdyaXRlLW9ubHkgdHJhbnNwb3J0cy4KKworICAgLi4gbWV0aG9kOjogYWJvcnQoKQorCisgICAgICBDbG9zZSB0aGUgdHJhbnNwb3J0IGltbWVkaWF0ZWx5LCB3aXRob3V0IHdhaXRpbmcgZm9yIHBlbmRpbmcgb3BlcmF0aW9ucworICAgICAgdG8gY29tcGxldGUuICBCdWZmZXJlZCBkYXRhIHdpbGwgYmUgbG9zdC4gIE5vIG1vcmUgZGF0YSB3aWxsIGJlIHJlY2VpdmVkLgorICAgICAgVGhlIHByb3RvY29sJ3MgOm1ldGg6YGNvbm5lY3Rpb25fbG9zdGAgbWV0aG9kIHdpbGwgZXZlbnR1YWxseSBiZQorICAgICAgY2FsbGVkIHdpdGggOmNvbnN0OmBOb25lYCBhcyBpdHMgYXJndW1lbnQuCisKKyAgIC4uIG1ldGhvZDo6IGNhbl93cml0ZV9lb2YoKQorCisgICAgICBSZXR1cm4gOmNvbnN0OmBUcnVlYCBpZiB0aGUgdHJhbnNwb3J0IHN1cHBvcnRzIDptZXRoOmB3cml0ZV9lb2ZgLAorICAgICAgOmNvbnN0OmBGYWxzZWAgaWYgbm90LgorCisgICAuLiBtZXRob2Q6OiBnZXRfd3JpdGVfYnVmZmVyX3NpemUoKQorCisgICAgICBSZXR1cm4gdGhlIGN1cnJlbnQgc2l6ZSBvZiB0aGUgb3V0cHV0IGJ1ZmZlciB1c2VkIGJ5IHRoZSB0cmFuc3BvcnQuCisKKyAgIC4uIG1ldGhvZDo6IGdldF93cml0ZV9idWZmZXJfbGltaXRzKCkKKworICAgICAgR2V0IHRoZSAqaGlnaCotIGFuZCAqbG93Ki13YXRlciBsaW1pdHMgZm9yIHdyaXRlIGZsb3cgY29udHJvbC4gUmV0dXJuIGEKKyAgICAgIHR1cGxlIGBgKGxvdywgaGlnaClgYCB3aGVyZSAqbG93KiBhbmQgKmhpZ2gqIGFyZSBwb3NpdGl2ZSBudW1iZXIgb2YKKyAgICAgIGJ5dGVzLgorCisgICAgICBVc2UgOm1ldGg6YHNldF93cml0ZV9idWZmZXJfbGltaXRzYCB0byBzZXQgdGhlIGxpbWl0cy4KKworICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy40LjIKKworICAgLi4gbWV0aG9kOjogc2V0X3dyaXRlX2J1ZmZlcl9saW1pdHMoaGlnaD1Ob25lLCBsb3c9Tm9uZSkKKworICAgICAgU2V0IHRoZSAqaGlnaCotIGFuZCAqbG93Ki13YXRlciBsaW1pdHMgZm9yIHdyaXRlIGZsb3cgY29udHJvbC4KKworICAgICAgVGhlc2UgdHdvIHZhbHVlcyBjb250cm9sIHdoZW4gY2FsbCB0aGUgcHJvdG9jb2wncworICAgICAgOm1ldGg6YHBhdXNlX3dyaXRpbmdgIGFuZCA6bWV0aDpgcmVzdW1lX3dyaXRpbmdgIG1ldGhvZHMgYXJlIGNhbGxlZC4KKyAgICAgIElmIHNwZWNpZmllZCwgdGhlIGxvdy13YXRlciBsaW1pdCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUKKyAgICAgIGhpZ2gtd2F0ZXIgbGltaXQuICBOZWl0aGVyICpoaWdoKiBub3IgKmxvdyogY2FuIGJlIG5lZ2F0aXZlLgorCisgICAgICBUaGUgZGVmYXVsdHMgYXJlIGltcGxlbWVudGF0aW9uLXNwZWNpZmljLiAgSWYgb25seSB0aGUKKyAgICAgIGhpZ2gtd2F0ZXIgbGltaXQgaXMgZ2l2ZW4sIHRoZSBsb3ctd2F0ZXIgbGltaXQgZGVmYXVsdHMgdG8gYW4KKyAgICAgIGltcGxlbWVudGF0aW9uLXNwZWNpZmljIHZhbHVlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUKKyAgICAgIGhpZ2gtd2F0ZXIgbGltaXQuICBTZXR0aW5nICpoaWdoKiB0byB6ZXJvIGZvcmNlcyAqbG93KiB0byB6ZXJvIGFzCisgICAgICB3ZWxsLCBhbmQgY2F1c2VzIDptZXRoOmBwYXVzZV93cml0aW5nYCB0byBiZSBjYWxsZWQgd2hlbmV2ZXIgdGhlCisgICAgICBidWZmZXIgYmVjb21lcyBub24tZW1wdHkuICBTZXR0aW5nICpsb3cqIHRvIHplcm8gY2F1c2VzCisgICAgICA6bWV0aDpgcmVzdW1lX3dyaXRpbmdgIHRvIGJlIGNhbGxlZCBvbmx5IG9uY2UgdGhlIGJ1ZmZlciBpcyBlbXB0eS4KKyAgICAgIFVzZSBvZiB6ZXJvIGZvciBlaXRoZXIgbGltaXQgaXMgZ2VuZXJhbGx5IHN1Yi1vcHRpbWFsIGFzIGl0CisgICAgICByZWR1Y2VzIG9wcG9ydHVuaXRpZXMgZm9yIGRvaW5nIEkvTyBhbmQgY29tcHV0YXRpb24KKyAgICAgIGNvbmN1cnJlbnRseS4KKworICAgICAgVXNlIDptZXRoOmBnZXRfd3JpdGVfYnVmZmVyX2xpbWl0c2AgdG8gZ2V0IHRoZSBsaW1pdHMuCisKKyAgIC4uIG1ldGhvZDo6IHdyaXRlKGRhdGEpCisKKyAgICAgIFdyaXRlIHNvbWUgKmRhdGEqIGJ5dGVzIHRvIHRoZSB0cmFuc3BvcnQuCisKKyAgICAgIFRoaXMgbWV0aG9kIGRvZXMgbm90IGJsb2NrOyBpdCBidWZmZXJzIHRoZSBkYXRhIGFuZCBhcnJhbmdlcyBmb3IgaXQKKyAgICAgIHRvIGJlIHNlbnQgb3V0IGFzeW5jaHJvbm91c2x5LgorCisgICAuLiBtZXRob2Q6OiB3cml0ZWxpbmVzKGxpc3Rfb2ZfZGF0YSkKKworICAgICAgV3JpdGUgYSBsaXN0IChvciBhbnkgaXRlcmFibGUpIG9mIGRhdGEgYnl0ZXMgdG8gdGhlIHRyYW5zcG9ydC4KKyAgICAgIFRoaXMgaXMgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgdG8gY2FsbGluZyA6bWV0aDpgd3JpdGVgIG9uIGVhY2gKKyAgICAgIGVsZW1lbnQgeWllbGRlZCBieSB0aGUgaXRlcmFibGUsIGJ1dCBtYXkgYmUgaW1wbGVtZW50ZWQgbW9yZSBlZmZpY2llbnRseS4KKworICAgLi4gbWV0aG9kOjogd3JpdGVfZW9mKCkKKworICAgICAgQ2xvc2UgdGhlIHdyaXRlIGVuZCBvZiB0aGUgdHJhbnNwb3J0IGFmdGVyIGZsdXNoaW5nIGJ1ZmZlcmVkIGRhdGEuCisgICAgICBEYXRhIG1heSBzdGlsbCBiZSByZWNlaXZlZC4KKworICAgICAgVGhpcyBtZXRob2QgY2FuIHJhaXNlIDpleGM6YE5vdEltcGxlbWVudGVkRXJyb3JgIGlmIHRoZSB0cmFuc3BvcnQKKyAgICAgIChlLmcuIFNTTCkgZG9lc24ndCBzdXBwb3J0IGhhbGYtY2xvc2VzLgorCisKK0RhdGFncmFtVHJhbnNwb3J0CistLS0tLS0tLS0tLS0tLS0tLQorCisuLiBtZXRob2Q6OiBEYXRhZ3JhbVRyYW5zcG9ydC5zZW5kdG8oZGF0YSwgYWRkcj1Ob25lKQorCisgICBTZW5kIHRoZSAqZGF0YSogYnl0ZXMgdG8gdGhlIHJlbW90ZSBwZWVyIGdpdmVuIGJ5ICphZGRyKiAoYQorICAgdHJhbnNwb3J0LWRlcGVuZGVudCB0YXJnZXQgYWRkcmVzcykuICBJZiAqYWRkciogaXMgOmNvbnN0OmBOb25lYCwgdGhlCisgICBkYXRhIGlzIHNlbnQgdG8gdGhlIHRhcmdldCBhZGRyZXNzIGdpdmVuIG9uIHRyYW5zcG9ydCBjcmVhdGlvbi4KKworICAgVGhpcyBtZXRob2QgZG9lcyBub3QgYmxvY2s7IGl0IGJ1ZmZlcnMgdGhlIGRhdGEgYW5kIGFycmFuZ2VzIGZvciBpdAorICAgdG8gYmUgc2VudCBvdXQgYXN5bmNocm9ub3VzbHkuCisKKy4uIG1ldGhvZDo6IERhdGFncmFtVHJhbnNwb3J0LmFib3J0KCkKKworICAgQ2xvc2UgdGhlIHRyYW5zcG9ydCBpbW1lZGlhdGVseSwgd2l0aG91dCB3YWl0aW5nIGZvciBwZW5kaW5nIG9wZXJhdGlvbnMKKyAgIHRvIGNvbXBsZXRlLiAgQnVmZmVyZWQgZGF0YSB3aWxsIGJlIGxvc3QuICBObyBtb3JlIGRhdGEgd2lsbCBiZSByZWNlaXZlZC4KKyAgIFRoZSBwcm90b2NvbCdzIDptZXRoOmBjb25uZWN0aW9uX2xvc3RgIG1ldGhvZCB3aWxsIGV2ZW50dWFsbHkgYmUKKyAgIGNhbGxlZCB3aXRoIDpjb25zdDpgTm9uZWAgYXMgaXRzIGFyZ3VtZW50LgorCisKK0Jhc2VTdWJwcm9jZXNzVHJhbnNwb3J0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisuLiBjbGFzczo6IEJhc2VTdWJwcm9jZXNzVHJhbnNwb3J0CisKKyAgIC4uIG1ldGhvZDo6IGdldF9waWQoKQorCisgICAgICBSZXR1cm4gdGhlIHN1YnByb2Nlc3MgcHJvY2VzcyBpZCBhcyBhbiBpbnRlZ2VyLgorCisgICAuLiBtZXRob2Q6OiBnZXRfcGlwZV90cmFuc3BvcnQoZmQpCisKKyAgICAgIFJldHVybiB0aGUgdHJhbnNwb3J0IGZvciB0aGUgY29tbXVuaWNhdGlvbiBwaXBlIGNvcnJlc3BvbmRpbmcgdG8gdGhlCisgICAgICBpbnRlZ2VyIGZpbGUgZGVzY3JpcHRvciAqZmQqOgorCisgICAgICAqIGBgMGBgOiByZWFkYWJsZSBzdHJlYW1pbmcgdHJhbnNwb3J0IG9mIHRoZSBzdGFuZGFyZCBpbnB1dCAoKnN0ZGluKiksCisgICAgICAgIG9yIDpjb25zdDpgTm9uZWAgaWYgdGhlIHN1YnByb2Nlc3Mgd2FzIG5vdCBjcmVhdGVkIHdpdGggYGBzdGRpbj1QSVBFYGAKKyAgICAgICogYGAxYGA6IHdyaXRhYmxlIHN0cmVhbWluZyB0cmFuc3BvcnQgb2YgdGhlIHN0YW5kYXJkIG91dHB1dCAoKnN0ZG91dCopLAorICAgICAgICBvciA6Y29uc3Q6YE5vbmVgIGlmIHRoZSBzdWJwcm9jZXNzIHdhcyBub3QgY3JlYXRlZCB3aXRoIGBgc3Rkb3V0PVBJUEVgYAorICAgICAgKiBgYDJgYDogd3JpdGFibGUgc3RyZWFtaW5nIHRyYW5zcG9ydCBvZiB0aGUgc3RhbmRhcmQgZXJyb3IgKCpzdGRlcnIqKSwKKyAgICAgICAgb3IgOmNvbnN0OmBOb25lYCBpZiB0aGUgc3VicHJvY2VzcyB3YXMgbm90IGNyZWF0ZWQgd2l0aCBgYHN0ZGVycj1QSVBFYGAKKyAgICAgICogb3RoZXIgKmZkKjogOmNvbnN0OmBOb25lYAorCisgICAuLiBtZXRob2Q6OiBnZXRfcmV0dXJuY29kZSgpCisKKyAgICAgIFJldHVybiB0aGUgc3VicHJvY2VzcyByZXR1cm5jb2RlIGFzIGFuIGludGVnZXIgb3IgOmNvbnN0OmBOb25lYAorICAgICAgaWYgaXQgaGFzbid0IHJldHVybmVkLCBzaW1pbGFybHkgdG8gdGhlCisgICAgICA6YXR0cjpgc3VicHJvY2Vzcy5Qb3Blbi5yZXR1cm5jb2RlYCBhdHRyaWJ1dGUuCisKKyAgIC4uIG1ldGhvZDo6IGtpbGwoc2VsZikKKworICAgICAgS2lsbCB0aGUgc3VicHJvY2VzcywgYXMgaW4gOm1ldGg6YHN1YnByb2Nlc3MuUG9wZW4ua2lsbGAuCisKKyAgICAgIE9uIFBPU0lYIHN5c3RlbXMsIHRoZSBmdW5jdGlvbiBzZW5kcyBTSUdLSUxMIHRvIHRoZSBzdWJwcm9jZXNzLgorICAgICAgT24gV2luZG93cywgdGhpcyBtZXRob2QgaXMgYW4gYWxpYXMgZm9yIDptZXRoOmB0ZXJtaW5hdGVgLgorCisgICAuLiBtZXRob2Q6OiBzZW5kX3NpZ25hbChzaWduYWwpCisKKyAgICAgIFNlbmQgdGhlICpzaWduYWwqIG51bWJlciB0byB0aGUgc3VicHJvY2VzcywgYXMgaW4KKyAgICAgIDptZXRoOmBzdWJwcm9jZXNzLlBvcGVuLnNlbmRfc2lnbmFsYC4KKworICAgLi4gbWV0aG9kOjogdGVybWluYXRlKCkKKworICAgICAgQXNrIHRoZSBzdWJwcm9jZXNzIHRvIHN0b3AsIGFzIGluIDptZXRoOmBzdWJwcm9jZXNzLlBvcGVuLnRlcm1pbmF0ZWAuCisgICAgICBUaGlzIG1ldGhvZCBpcyBhbiBhbGlhcyBmb3IgdGhlIDptZXRoOmBjbG9zZWAgbWV0aG9kLgorCisgICAgICBPbiBQT1NJWCBzeXN0ZW1zLCB0aGlzIG1ldGhvZCBzZW5kcyBTSUdURVJNIHRvIHRoZSBzdWJwcm9jZXNzLgorICAgICAgT24gV2luZG93cywgdGhlIFdpbmRvd3MgQVBJIGZ1bmN0aW9uIFRlcm1pbmF0ZVByb2Nlc3MoKSBpcyBjYWxsZWQgdG8KKyAgICAgIHN0b3AgdGhlIHN1YnByb2Nlc3MuCisKKyAgIC4uIG1ldGhvZDo6IGNsb3NlKCkKKworICAgICAgQXNrIHRoZSBzdWJwcm9jZXNzIHRvIHN0b3AgYnkgY2FsbGluZyB0aGUgOm1ldGg6YHRlcm1pbmF0ZWAgbWV0aG9kIGlmIHRoZQorICAgICAgc3VicHJvY2VzcyBoYXNuJ3QgcmV0dXJuZWQgeWV0LCBhbmQgY2xvc2UgdHJhbnNwb3J0cyBvZiBhbGwgcGlwZXMKKyAgICAgICgqc3RkaW4qLCAqc3Rkb3V0KiBhbmQgKnN0ZGVyciopLgorCisKKy4uIF9hc3luY2lvLXByb3RvY29sOgorCitQcm90b2NvbHMKKz09PT09PT09PQorCis6bW9kOmBhc3luY2lvYCBwcm92aWRlcyBiYXNlIGNsYXNzZXMgdGhhdCB5b3UgY2FuIHN1YmNsYXNzIHRvIGltcGxlbWVudAoreW91ciBuZXR3b3JrIHByb3RvY29scy4gIFRob3NlIGNsYXNzZXMgYXJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aAorOnJlZjpgdHJhbnNwb3J0cyA8YXN5bmNpby10cmFuc3BvcnQ+YCAoc2VlIGJlbG93KTogdGhlIHByb3RvY29sIHBhcnNlcyBpbmNvbWluZworZGF0YSBhbmQgYXNrcyBmb3IgdGhlIHdyaXRpbmcgb2Ygb3V0Z29pbmcgZGF0YSwgd2hpbGUgdGhlIHRyYW5zcG9ydCBpcworcmVzcG9uc2libGUgZm9yIHRoZSBhY3R1YWwgSS9PIGFuZCBidWZmZXJpbmcuCisKK1doZW4gc3ViY2xhc3NpbmcgYSBwcm90b2NvbCBjbGFzcywgaXQgaXMgcmVjb21tZW5kZWQgeW91IG92ZXJyaWRlIGNlcnRhaW4KK21ldGhvZHMuICBUaG9zZSBtZXRob2RzIGFyZSBjYWxsYmFja3M6IHRoZXkgd2lsbCBiZSBjYWxsZWQgYnkgdGhlIHRyYW5zcG9ydAorb24gY2VydGFpbiBldmVudHMgKGZvciBleGFtcGxlIHdoZW4gc29tZSBkYXRhIGlzIHJlY2VpdmVkKTsgeW91IHNob3VsZG4ndAorY2FsbCB0aGVtIHlvdXJzZWxmLCB1bmxlc3MgeW91IGFyZSBpbXBsZW1lbnRpbmcgYSB0cmFuc3BvcnQuCisKKy4uIG5vdGU6OgorICAgQWxsIGNhbGxiYWNrcyBoYXZlIGRlZmF1bHQgaW1wbGVtZW50YXRpb25zLCB3aGljaCBhcmUgZW1wdHkuICBUaGVyZWZvcmUsCisgICB5b3Ugb25seSBuZWVkIHRvIGltcGxlbWVudCB0aGUgY2FsbGJhY2tzIGZvciB0aGUgZXZlbnRzIGluIHdoaWNoIHlvdQorICAgYXJlIGludGVyZXN0ZWQuCisKKworUHJvdG9jb2wgY2xhc3NlcworLS0tLS0tLS0tLS0tLS0tLQorCisuLiBjbGFzczo6IFByb3RvY29sCisKKyAgIFRoZSBiYXNlIGNsYXNzIGZvciBpbXBsZW1lbnRpbmcgc3RyZWFtaW5nIHByb3RvY29scyAoZm9yIHVzZSB3aXRoCisgICBlLmcuIFRDUCBhbmQgU1NMIHRyYW5zcG9ydHMpLgorCisuLiBjbGFzczo6IERhdGFncmFtUHJvdG9jb2wKKworICAgVGhlIGJhc2UgY2xhc3MgZm9yIGltcGxlbWVudGluZyBkYXRhZ3JhbSBwcm90b2NvbHMgKGZvciB1c2Ugd2l0aAorICAgZS5nLiBVRFAgdHJhbnNwb3J0cykuCisKKy4uIGNsYXNzOjogU3VicHJvY2Vzc1Byb3RvY29sCisKKyAgIFRoZSBiYXNlIGNsYXNzIGZvciBpbXBsZW1lbnRpbmcgcHJvdG9jb2xzIGNvbW11bmljYXRpbmcgd2l0aCBjaGlsZAorICAgcHJvY2Vzc2VzICh0aHJvdWdoIGEgc2V0IG9mIHVuaWRpcmVjdGlvbmFsIHBpcGVzKS4KKworCitDb25uZWN0aW9uIGNhbGxiYWNrcworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlc2UgY2FsbGJhY2tzIG1heSBiZSBjYWxsZWQgb24gOmNsYXNzOmBQcm90b2NvbGAsIDpjbGFzczpgRGF0YWdyYW1Qcm90b2NvbGAKK2FuZCA6Y2xhc3M6YFN1YnByb2Nlc3NQcm90b2NvbGAgaW5zdGFuY2VzOgorCisuLiBtZXRob2Q6OiBCYXNlUHJvdG9jb2wuY29ubmVjdGlvbl9tYWRlKHRyYW5zcG9ydCkKKworICAgQ2FsbGVkIHdoZW4gYSBjb25uZWN0aW9uIGlzIG1hZGUuCisKKyAgIFRoZSAqdHJhbnNwb3J0KiBhcmd1bWVudCBpcyB0aGUgdHJhbnNwb3J0IHJlcHJlc2VudGluZyB0aGUKKyAgIGNvbm5lY3Rpb24uICBZb3UgYXJlIHJlc3BvbnNpYmxlIGZvciBzdG9yaW5nIGl0IHNvbWV3aGVyZQorICAgKGUuZy4gYXMgYW4gYXR0cmlidXRlKSBpZiB5b3UgbmVlZCB0by4KKworLi4gbWV0aG9kOjogQmFzZVByb3RvY29sLmNvbm5lY3Rpb25fbG9zdChleGMpCisKKyAgIENhbGxlZCB3aGVuIHRoZSBjb25uZWN0aW9uIGlzIGxvc3Qgb3IgY2xvc2VkLgorCisgICBUaGUgYXJndW1lbnQgaXMgZWl0aGVyIGFuIGV4Y2VwdGlvbiBvYmplY3Qgb3IgOmNvbnN0OmBOb25lYC4KKyAgIFRoZSBsYXR0ZXIgbWVhbnMgYSByZWd1bGFyIEVPRiBpcyByZWNlaXZlZCwgb3IgdGhlIGNvbm5lY3Rpb24gd2FzCisgICBhYm9ydGVkIG9yIGNsb3NlZCBieSB0aGlzIHNpZGUgb2YgdGhlIGNvbm5lY3Rpb24uCisKKzptZXRoOmB+QmFzZVByb3RvY29sLmNvbm5lY3Rpb25fbWFkZWAgYW5kIDptZXRoOmB+QmFzZVByb3RvY29sLmNvbm5lY3Rpb25fbG9zdGAKK2FyZSBjYWxsZWQgZXhhY3RseSBvbmNlIHBlciBzdWNjZXNzZnVsIGNvbm5lY3Rpb24uICBBbGwgb3RoZXIgY2FsbGJhY2tzIHdpbGwgYmUKK2NhbGxlZCBiZXR3ZWVuIHRob3NlIHR3byBtZXRob2RzLCB3aGljaCBhbGxvd3MgZm9yIGVhc2llciByZXNvdXJjZSBtYW5hZ2VtZW50CitpbiB5b3VyIHByb3RvY29sIGltcGxlbWVudGF0aW9uLgorCitUaGUgZm9sbG93aW5nIGNhbGxiYWNrcyBtYXkgYmUgY2FsbGVkIG9ubHkgb24gOmNsYXNzOmBTdWJwcm9jZXNzUHJvdG9jb2xgCitpbnN0YW5jZXM6CisKKy4uIG1ldGhvZDo6IFN1YnByb2Nlc3NQcm90b2NvbC5waXBlX2RhdGFfcmVjZWl2ZWQoZmQsIGRhdGEpCisKKyAgIENhbGxlZCB3aGVuIHRoZSBjaGlsZCBwcm9jZXNzIHdyaXRlcyBkYXRhIGludG8gaXRzIHN0ZG91dCBvciBzdGRlcnIgcGlwZS4KKyAgICpmZCogaXMgdGhlIGludGVnZXIgZmlsZSBkZXNjcmlwdG9yIG9mIHRoZSBwaXBlLiAgKmRhdGEqIGlzIGEgbm9uLWVtcHR5CisgICBieXRlcyBvYmplY3QgY29udGFpbmluZyB0aGUgZGF0YS4KKworLi4gbWV0aG9kOjogU3VicHJvY2Vzc1Byb3RvY29sLnBpcGVfY29ubmVjdGlvbl9sb3N0KGZkLCBleGMpCisKKyAgIENhbGxlZCB3aGVuIG9uZSBvZiB0aGUgcGlwZXMgY29tbXVuaWNhdGluZyB3aXRoIHRoZSBjaGlsZCBwcm9jZXNzCisgICBpcyBjbG9zZWQuICAqZmQqIGlzIHRoZSBpbnRlZ2VyIGZpbGUgZGVzY3JpcHRvciB0aGF0IHdhcyBjbG9zZWQuCisKKy4uIG1ldGhvZDo6IFN1YnByb2Nlc3NQcm90b2NvbC5wcm9jZXNzX2V4aXRlZCgpCisKKyAgIENhbGxlZCB3aGVuIHRoZSBjaGlsZCBwcm9jZXNzIGhhcyBleGl0ZWQuCisKKworU3RyZWFtaW5nIHByb3RvY29scworLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZm9sbG93aW5nIGNhbGxiYWNrcyBhcmUgY2FsbGVkIG9uIDpjbGFzczpgUHJvdG9jb2xgIGluc3RhbmNlczoKKworLi4gbWV0aG9kOjogUHJvdG9jb2wuZGF0YV9yZWNlaXZlZChkYXRhKQorCisgICBDYWxsZWQgd2hlbiBzb21lIGRhdGEgaXMgcmVjZWl2ZWQuICAqZGF0YSogaXMgYSBub24tZW1wdHkgYnl0ZXMgb2JqZWN0CisgICBjb250YWluaW5nIHRoZSBpbmNvbWluZyBkYXRhLgorCisgICAuLiBub3RlOjoKKyAgICAgIFdoZXRoZXIgdGhlIGRhdGEgaXMgYnVmZmVyZWQsIGNodW5rZWQgb3IgcmVhc3NlbWJsZWQgZGVwZW5kcyBvbgorICAgICAgdGhlIHRyYW5zcG9ydC4gIEluIGdlbmVyYWwsIHlvdSBzaG91bGRuJ3QgcmVseSBvbiBzcGVjaWZpYyBzZW1hbnRpY3MKKyAgICAgIGFuZCBpbnN0ZWFkIG1ha2UgeW91ciBwYXJzaW5nIGdlbmVyaWMgYW5kIGZsZXhpYmxlIGVub3VnaC4gIEhvd2V2ZXIsCisgICAgICBkYXRhIGlzIGFsd2F5cyByZWNlaXZlZCBpbiB0aGUgY29ycmVjdCBvcmRlci4KKworLi4gbWV0aG9kOjogUHJvdG9jb2wuZW9mX3JlY2VpdmVkKCkKKworICAgQ2FsbHMgd2hlbiB0aGUgb3RoZXIgZW5kIHNpZ25hbHMgaXQgd29uJ3Qgc2VuZCBhbnkgbW9yZSBkYXRhCisgICAoZm9yIGV4YW1wbGUgYnkgY2FsbGluZyA6bWV0aDpgd3JpdGVfZW9mYCwgaWYgdGhlIG90aGVyIGVuZCBhbHNvIHVzZXMKKyAgIGFzeW5jaW8pLgorCisgICBUaGlzIG1ldGhvZCBtYXkgcmV0dXJuIGEgZmFsc2UgdmFsdWUgKGluY2x1ZGluZyBOb25lKSwgaW4gd2hpY2ggY2FzZQorICAgdGhlIHRyYW5zcG9ydCB3aWxsIGNsb3NlIGl0c2VsZi4gIENvbnZlcnNlbHksIGlmIHRoaXMgbWV0aG9kIHJldHVybnMgYQorICAgdHJ1ZSB2YWx1ZSwgY2xvc2luZyB0aGUgdHJhbnNwb3J0IGlzIHVwIHRvIHRoZSBwcm90b2NvbC4gIFNpbmNlIHRoZQorICAgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIE5vbmUsIGl0IGltcGxpY2l0bHkgY2xvc2VzIHRoZSBjb25uZWN0aW9uLgorCisgICAuLiBub3RlOjoKKyAgICAgIFNvbWUgdHJhbnNwb3J0cyBzdWNoIGFzIFNTTCBkb24ndCBzdXBwb3J0IGhhbGYtY2xvc2VkIGNvbm5lY3Rpb25zLAorICAgICAgaW4gd2hpY2ggY2FzZSByZXR1cm5pbmcgdHJ1ZSBmcm9tIHRoaXMgbWV0aG9kIHdpbGwgbm90IHByZXZlbnQgY2xvc2luZworICAgICAgdGhlIGNvbm5lY3Rpb24uCisKKzptZXRoOmBkYXRhX3JlY2VpdmVkYCBjYW4gYmUgY2FsbGVkIGFuIGFyYml0cmFyeSBudW1iZXIgb2YgdGltZXMgZHVyaW5nCithIGNvbm5lY3Rpb24uICBIb3dldmVyLCA6bWV0aDpgZW9mX3JlY2VpdmVkYCBpcyBjYWxsZWQgYXQgbW9zdCBvbmNlCithbmQsIGlmIGNhbGxlZCwgOm1ldGg6YGRhdGFfcmVjZWl2ZWRgIHdvbid0IGJlIGNhbGxlZCBhZnRlciBpdC4KKworU3RhdGUgbWFjaGluZToKKworICAgIHN0YXJ0IC0+IDptZXRoOmB+QmFzZVByb3RvY29sLmNvbm5lY3Rpb25fbWFkZWAKKyAgICBbLT4gOm1ldGg6YH5Qcm90b2NvbC5kYXRhX3JlY2VpdmVkYCBcKl0KKyAgICBbLT4gOm1ldGg6YH5Qcm90b2NvbC5lb2ZfcmVjZWl2ZWRgID9dCisgICAgLT4gOm1ldGg6YH5CYXNlUHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0YCAtPiBlbmQKKworCitEYXRhZ3JhbSBwcm90b2NvbHMKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZm9sbG93aW5nIGNhbGxiYWNrcyBhcmUgY2FsbGVkIG9uIDpjbGFzczpgRGF0YWdyYW1Qcm90b2NvbGAgaW5zdGFuY2VzLgorCisuLiBtZXRob2Q6OiBEYXRhZ3JhbVByb3RvY29sLmRhdGFncmFtX3JlY2VpdmVkKGRhdGEsIGFkZHIpCisKKyAgIENhbGxlZCB3aGVuIGEgZGF0YWdyYW0gaXMgcmVjZWl2ZWQuICAqZGF0YSogaXMgYSBieXRlcyBvYmplY3QgY29udGFpbmluZworICAgdGhlIGluY29taW5nIGRhdGEuICAqYWRkciogaXMgdGhlIGFkZHJlc3Mgb2YgdGhlIHBlZXIgc2VuZGluZyB0aGUgZGF0YTsKKyAgIHRoZSBleGFjdCBmb3JtYXQgZGVwZW5kcyBvbiB0aGUgdHJhbnNwb3J0LgorCisuLiBtZXRob2Q6OiBEYXRhZ3JhbVByb3RvY29sLmVycm9yX3JlY2VpdmVkKGV4YykKKworICAgQ2FsbGVkIHdoZW4gYSBwcmV2aW91cyBzZW5kIG9yIHJlY2VpdmUgb3BlcmF0aW9uIHJhaXNlcyBhbgorICAgOmNsYXNzOmBPU0Vycm9yYC4gICpleGMqIGlzIHRoZSA6Y2xhc3M6YE9TRXJyb3JgIGluc3RhbmNlLgorCisgICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgaW4gcmFyZSBjb25kaXRpb25zLCB3aGVuIHRoZSB0cmFuc3BvcnQgKGUuZy4gVURQKQorICAgZGV0ZWN0cyB0aGF0IGEgZGF0YWdyYW0gY291bGRuJ3QgYmUgZGVsaXZlcmVkIHRvIGl0cyByZWNpcGllbnQuCisgICBJbiBtYW55IGNvbmRpdGlvbnMgdGhvdWdoLCB1bmRlbGl2ZXJhYmxlIGRhdGFncmFtcyB3aWxsIGJlIHNpbGVudGx5CisgICBkcm9wcGVkLgorCisKK0Zsb3cgY29udHJvbCBjYWxsYmFja3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlc2UgY2FsbGJhY2tzIG1heSBiZSBjYWxsZWQgb24gOmNsYXNzOmBQcm90b2NvbGAsCis6Y2xhc3M6YERhdGFncmFtUHJvdG9jb2xgIGFuZCA6Y2xhc3M6YFN1YnByb2Nlc3NQcm90b2NvbGAgaW5zdGFuY2VzOgorCisuLiBtZXRob2Q6OiBCYXNlUHJvdG9jb2wucGF1c2Vfd3JpdGluZygpCisKKyAgIENhbGxlZCB3aGVuIHRoZSB0cmFuc3BvcnQncyBidWZmZXIgZ29lcyBvdmVyIHRoZSBoaWdoLXdhdGVyIG1hcmsuCisKKy4uIG1ldGhvZDo6IEJhc2VQcm90b2NvbC5yZXN1bWVfd3JpdGluZygpCisKKyAgIENhbGxlZCB3aGVuIHRoZSB0cmFuc3BvcnQncyBidWZmZXIgZHJhaW5zIGJlbG93IHRoZSBsb3ctd2F0ZXIgbWFyay4KKworCis6bWV0aDpgcGF1c2Vfd3JpdGluZ2AgYW5kIDptZXRoOmByZXN1bWVfd3JpdGluZ2AgY2FsbHMgYXJlIHBhaXJlZCAtLQorOm1ldGg6YHBhdXNlX3dyaXRpbmdgIGlzIGNhbGxlZCBvbmNlIHdoZW4gdGhlIGJ1ZmZlciBnb2VzIHN0cmljdGx5IG92ZXIKK3RoZSBoaWdoLXdhdGVyIG1hcmsgKGV2ZW4gaWYgc3Vic2VxdWVudCB3cml0ZXMgaW5jcmVhc2VzIHRoZSBidWZmZXIgc2l6ZQorZXZlbiBtb3JlKSwgYW5kIGV2ZW50dWFsbHkgOm1ldGg6YHJlc3VtZV93cml0aW5nYCBpcyBjYWxsZWQgb25jZSB3aGVuIHRoZQorYnVmZmVyIHNpemUgcmVhY2hlcyB0aGUgbG93LXdhdGVyIG1hcmsuCisKKy4uIG5vdGU6OgorICAgSWYgdGhlIGJ1ZmZlciBzaXplIGVxdWFscyB0aGUgaGlnaC13YXRlciBtYXJrLAorICAgOm1ldGg6YHBhdXNlX3dyaXRpbmdgIGlzIG5vdCBjYWxsZWQgLS0gaXQgbXVzdCBnbyBzdHJpY3RseSBvdmVyLgorICAgQ29udmVyc2VseSwgOm1ldGg6YHJlc3VtZV93cml0aW5nYCBpcyBjYWxsZWQgd2hlbiB0aGUgYnVmZmVyIHNpemUgaXMKKyAgIGVxdWFsIG9yIGxvd2VyIHRoYW4gdGhlIGxvdy13YXRlciBtYXJrLiAgVGhlc2UgZW5kIGNvbmRpdGlvbnMKKyAgIGFyZSBpbXBvcnRhbnQgdG8gZW5zdXJlIHRoYXQgdGhpbmdzIGdvIGFzIGV4cGVjdGVkIHdoZW4gZWl0aGVyCisgICBtYXJrIGlzIHplcm8uCisKKy4uIG5vdGU6OgorICAgT24gQlNEIHN5c3RlbXMgKE9TIFgsIEZyZWVCU0QsIGV0Yy4pIGZsb3cgY29udHJvbCBpcyBub3Qgc3VwcG9ydGVkCisgICBmb3IgOmNsYXNzOmBEYXRhZ3JhbVByb3RvY29sYCwgYmVjYXVzZSBzZW5kIGZhaWx1cmVzIGNhdXNlZCBieQorICAgd3JpdGluZyB0b28gbWFueSBwYWNrZXRzIGNhbm5vdCBiZSBkZXRlY3RlZCBlYXNpbHkuICBUaGUgc29ja2V0CisgICBhbHdheXMgYXBwZWFycyAncmVhZHknIGFuZCBleGNlc3MgcGFja2V0cyBhcmUgZHJvcHBlZDsgYW4KKyAgIDpjbGFzczpgT1NFcnJvcmAgd2l0aCBlcnJubyBzZXQgdG8gOmNvbnN0OmBlcnJuby5FTk9CVUZTYCBtYXkgb3IKKyAgIG1heSBub3QgYmUgcmFpc2VkOyBpZiBpdCBpcyByYWlzZWQsIGl0IHdpbGwgYmUgcmVwb3J0ZWQgdG8KKyAgIDptZXRoOmBEYXRhZ3JhbVByb3RvY29sLmVycm9yX3JlY2VpdmVkYCBidXQgb3RoZXJ3aXNlIGlnbm9yZWQuCisKKworQ29yb3V0aW5lcyBhbmQgcHJvdG9jb2xzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29yb3V0aW5lcyBjYW4gYmUgc2NoZWR1bGVkIGluIGEgcHJvdG9jb2wgbWV0aG9kIHVzaW5nIDpmdW5jOmBhc3luY2AsIGJ1dCB0aGVyZQoraXMgbm8gZ3VhcmFudGVlIG1hZGUgYWJvdXQgdGhlIGV4ZWN1dGlvbiBvcmRlci4gIFByb3RvY29scyBhcmUgbm90IGF3YXJlIG9mCitjb3JvdXRpbmVzIGNyZWF0ZWQgaW4gcHJvdG9jb2wgbWV0aG9kcyBhbmQgc28gd2lsbCBub3Qgd2FpdCBmb3IgdGhlbS4KKworVG8gaGF2ZSBhIHJlbGlhYmxlIGV4ZWN1dGlvbiBvcmRlciwgdXNlIDpyZWY6YHN0cmVhbSBvYmplY3RzIDxhc3luY2lvLXN0cmVhbXM+YCBpbiBhCitjb3JvdXRpbmUgd2l0aCBgYHlpZWxkIGZyb21gYC4gRm9yIGV4YW1wbGUsIHRoZSA6bWV0aDpgU3RyZWFtV3JpdGVyLmRyYWluYAorY29yb3V0aW5lIGNhbiBiZSB1c2VkIHRvIHdhaXQgdW50aWwgdGhlIHdyaXRlIGJ1ZmZlciBpcyBmbHVzaGVkLgorCisKK1Byb3RvY29sIGV4YW1wbGVzCis9PT09PT09PT09PT09PT09PQorCisuLiBfYXN5bmNpby10Y3AtZWNoby1jbGllbnQtcHJvdG9jb2w6CisKK1RDUCBlY2hvIGNsaWVudCBwcm90b2NvbAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RDUCBlY2hvIGNsaWVudCAgdXNpbmcgdGhlIDptZXRoOmBCYXNlRXZlbnRMb29wLmNyZWF0ZV9jb25uZWN0aW9uYCBtZXRob2QsIHNlbmQKK2RhdGEgYW5kIHdhaXQgdW50aWwgdGhlIGNvbm5lY3Rpb24gaXMgY2xvc2VkOjoKKworICAgIGltcG9ydCBhc3luY2lvCisKKyAgICBjbGFzcyBFY2hvQ2xpZW50UHJvdG9jb2woYXN5bmNpby5Qcm90b2NvbCk6CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtZXNzYWdlLCBsb29wKToKKyAgICAgICAgICAgIHNlbGYubWVzc2FnZSA9IG1lc3NhZ2UKKyAgICAgICAgICAgIHNlbGYubG9vcCA9IGxvb3AKKworICAgICAgICBkZWYgY29ubmVjdGlvbl9tYWRlKHNlbGYsIHRyYW5zcG9ydCk6CisgICAgICAgICAgICB0cmFuc3BvcnQud3JpdGUoc2VsZi5tZXNzYWdlLmVuY29kZSgpKQorICAgICAgICAgICAgcHJpbnQoJ0RhdGEgc2VudDogeyFyfScuZm9ybWF0KHNlbGYubWVzc2FnZSkpCisKKyAgICAgICAgZGVmIGRhdGFfcmVjZWl2ZWQoc2VsZiwgZGF0YSk6CisgICAgICAgICAgICBwcmludCgnRGF0YSByZWNlaXZlZDogeyFyfScuZm9ybWF0KGRhdGEuZGVjb2RlKCkpKQorCisgICAgICAgIGRlZiBjb25uZWN0aW9uX2xvc3Qoc2VsZiwgZXhjKToKKyAgICAgICAgICAgIHByaW50KCdUaGUgc2VydmVyIGNsb3NlZCB0aGUgY29ubmVjdGlvbicpCisgICAgICAgICAgICBwcmludCgnU3RvcCB0aGUgZXZlbnQgbG9vcCcpCisgICAgICAgICAgICBzZWxmLmxvb3Auc3RvcCgpCisKKyAgICBsb29wID0gYXN5bmNpby5nZXRfZXZlbnRfbG9vcCgpCisgICAgbWVzc2FnZSA9ICdIZWxsbyBXb3JsZCEnCisgICAgY29ybyA9IGxvb3AuY3JlYXRlX2Nvbm5lY3Rpb24obGFtYmRhOiBFY2hvQ2xpZW50UHJvdG9jb2wobWVzc2FnZSwgbG9vcCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzEyNy4wLjAuMScsIDg4ODgpCisgICAgbG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ybykKKyAgICBsb29wLnJ1bl9mb3JldmVyKCkKKyAgICBsb29wLmNsb3NlKCkKKworVGhlIGV2ZW50IGxvb3AgaXMgcnVubmluZyB0d2ljZS4gVGhlCis6bWV0aDpgfkJhc2VFdmVudExvb3AucnVuX3VudGlsX2NvbXBsZXRlYCBtZXRob2QgaXMgcHJlZmVycmVkIGluIHRoaXMgc2hvcnQKK2V4YW1wbGUgdG8gcmFpc2UgYW4gZXhjZXB0aW9uIGlmIHRoZSBzZXJ2ZXIgaXMgbm90IGxpc3RlbmluZywgaW5zdGVhZCBvZgoraGF2aW5nIHRvIHdyaXRlIGEgc2hvcnQgY29yb3V0aW5lIHRvIGhhbmRsZSB0aGUgZXhjZXB0aW9uIGFuZCBzdG9wIHRoZQorcnVubmluZyBsb29wLiBBdCA6bWV0aDpgfkJhc2VFdmVudExvb3AucnVuX3VudGlsX2NvbXBsZXRlYCBleGl0LCB0aGUgbG9vcCBpcworbm8gbG9uZ2VyIHJ1bm5pbmcsIHNvIHRoZXJlIGlzIG5vIG5lZWQgdG8gc3RvcCB0aGUgbG9vcCBpbiBjYXNlIG9mIGFuIGVycm9yLgorCisuLiBzZWVhbHNvOjoKKworICAgVGhlIDpyZWY6YFRDUCBlY2hvIGNsaWVudCB1c2luZyBzdHJlYW1zIDxhc3luY2lvLXRjcC1lY2hvLWNsaWVudC1zdHJlYW1zPmAKKyAgIGV4YW1wbGUgdXNlcyB0aGUgOmZ1bmM6YGFzeW5jaW8ub3Blbl9jb25uZWN0aW9uYCBmdW5jdGlvbi4KKworCisuLiBfYXN5bmNpby10Y3AtZWNoby1zZXJ2ZXItcHJvdG9jb2w6CisKK1RDUCBlY2hvIHNlcnZlciBwcm90b2NvbAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RDUCBlY2hvIHNlcnZlciB1c2luZyB0aGUgOm1ldGg6YEJhc2VFdmVudExvb3AuY3JlYXRlX3NlcnZlcmAgbWV0aG9kLCBzZW5kIGJhY2sKK3JlY2VpdmVkIGRhdGEgYW5kIGNsb3NlIHRoZSBjb25uZWN0aW9uOjoKKworICAgIGltcG9ydCBhc3luY2lvCisKKyAgICBjbGFzcyBFY2hvU2VydmVyQ2xpZW50UHJvdG9jb2woYXN5bmNpby5Qcm90b2NvbCk6CisgICAgICAgIGRlZiBjb25uZWN0aW9uX21hZGUoc2VsZiwgdHJhbnNwb3J0KToKKyAgICAgICAgICAgIHBlZXJuYW1lID0gdHJhbnNwb3J0LmdldF9leHRyYV9pbmZvKCdwZWVybmFtZScpCisgICAgICAgICAgICBwcmludCgnQ29ubmVjdGlvbiBmcm9tIHt9Jy5mb3JtYXQocGVlcm5hbWUpKQorICAgICAgICAgICAgc2VsZi50cmFuc3BvcnQgPSB0cmFuc3BvcnQKKworICAgICAgICBkZWYgZGF0YV9yZWNlaXZlZChzZWxmLCBkYXRhKToKKyAgICAgICAgICAgIG1lc3NhZ2UgPSBkYXRhLmRlY29kZSgpCisgICAgICAgICAgICBwcmludCgnRGF0YSByZWNlaXZlZDogeyFyfScuZm9ybWF0KG1lc3NhZ2UpKQorCisgICAgICAgICAgICBwcmludCgnU2VuZDogeyFyfScuZm9ybWF0KG1lc3NhZ2UpKQorICAgICAgICAgICAgc2VsZi50cmFuc3BvcnQud3JpdGUoZGF0YSkKKworICAgICAgICAgICAgcHJpbnQoJ0Nsb3NlIHRoZSBjbGllbnQgc29ja2V0JykKKyAgICAgICAgICAgIHNlbGYudHJhbnNwb3J0LmNsb3NlKCkKKworICAgIGxvb3AgPSBhc3luY2lvLmdldF9ldmVudF9sb29wKCkKKyAgICAjIEVhY2ggY2xpZW50IGNvbm5lY3Rpb24gd2lsbCBjcmVhdGUgYSBuZXcgcHJvdG9jb2wgaW5zdGFuY2UKKyAgICBjb3JvID0gbG9vcC5jcmVhdGVfc2VydmVyKEVjaG9TZXJ2ZXJDbGllbnRQcm90b2NvbCwgJzEyNy4wLjAuMScsIDg4ODgpCisgICAgc2VydmVyID0gbG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ybykKKworICAgICMgU2VydmUgcmVxdWVzdHMgdW50aWwgQ3RybCtDIGlzIHByZXNzZWQKKyAgICBwcmludCgnU2VydmluZyBvbiB7fScuZm9ybWF0KHNlcnZlci5zb2NrZXRzWzBdLmdldHNvY2tuYW1lKCkpKQorICAgIHRyeToKKyAgICAgICAgbG9vcC5ydW5fZm9yZXZlcigpCisgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAgICBwYXNzCisKKyAgICAjIENsb3NlIHRoZSBzZXJ2ZXIKKyAgICBzZXJ2ZXIuY2xvc2UoKQorICAgIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHNlcnZlci53YWl0X2Nsb3NlZCgpKQorICAgIGxvb3AuY2xvc2UoKQorCis6bWV0aDpgVHJhbnNwb3J0LmNsb3NlYCBjYW4gYmUgY2FsbGVkIGltbWVkaWF0ZWx5IGFmdGVyCis6bWV0aDpgV3JpdGVUcmFuc3BvcnQud3JpdGVgIGV2ZW4gaWYgZGF0YSBhcmUgbm90IHNlbnQgeWV0IG9uIHRoZSBzb2NrZXQ6IGJvdGgKK21ldGhvZHMgYXJlIGFzeW5jaHJvbm91cy4gYGB5aWVsZCBmcm9tYGAgaXMgbm90IG5lZWRlZCBiZWNhdXNlIHRoZXNlIHRyYW5zcG9ydAorbWV0aG9kcyBhcmUgbm90IGNvcm91dGluZXMuCisKKy4uIHNlZWFsc286OgorCisgICBUaGUgOnJlZjpgVENQIGVjaG8gc2VydmVyIHVzaW5nIHN0cmVhbXMgPGFzeW5jaW8tdGNwLWVjaG8tc2VydmVyLXN0cmVhbXM+YAorICAgZXhhbXBsZSB1c2VzIHRoZSA6ZnVuYzpgYXN5bmNpby5zdGFydF9zZXJ2ZXJgIGZ1bmN0aW9uLgorCisKKy4uIF9hc3luY2lvLXVkcC1lY2hvLWNsaWVudC1wcm90b2NvbDoKKworVURQIGVjaG8gY2xpZW50IHByb3RvY29sCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVURQIGVjaG8gY2xpZW50IHVzaW5nIHRoZSA6bWV0aDpgQmFzZUV2ZW50TG9vcC5jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnRgCittZXRob2QsIHNlbmQgZGF0YSBhbmQgY2xvc2UgdGhlIHRyYW5zcG9ydCB3aGVuIHdlIHJlY2VpdmVkIHRoZSBhbnN3ZXI6OgorCisgICAgaW1wb3J0IGFzeW5jaW8KKworICAgIGNsYXNzIEVjaG9DbGllbnRQcm90b2NvbDoKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1lc3NhZ2UsIGxvb3ApOgorICAgICAgICAgICAgc2VsZi5tZXNzYWdlID0gbWVzc2FnZQorICAgICAgICAgICAgc2VsZi5sb29wID0gbG9vcAorICAgICAgICAgICAgc2VsZi50cmFuc3BvcnQgPSBOb25lCisKKyAgICAgICAgZGVmIGNvbm5lY3Rpb25fbWFkZShzZWxmLCB0cmFuc3BvcnQpOgorICAgICAgICAgICAgc2VsZi50cmFuc3BvcnQgPSB0cmFuc3BvcnQKKyAgICAgICAgICAgIHByaW50KCdTZW5kOicsIHNlbGYubWVzc2FnZSkKKyAgICAgICAgICAgIHNlbGYudHJhbnNwb3J0LnNlbmR0byhzZWxmLm1lc3NhZ2UuZW5jb2RlKCkpCisKKyAgICAgICAgZGVmIGRhdGFncmFtX3JlY2VpdmVkKHNlbGYsIGRhdGEsIGFkZHIpOgorICAgICAgICAgICAgcHJpbnQoIlJlY2VpdmVkOiIsIGRhdGEuZGVjb2RlKCkpCisKKyAgICAgICAgICAgIHByaW50KCJDbG9zZSB0aGUgc29ja2V0IikKKyAgICAgICAgICAgIHNlbGYudHJhbnNwb3J0LmNsb3NlKCkKKworICAgICAgICBkZWYgZXJyb3JfcmVjZWl2ZWQoc2VsZiwgZXhjKToKKyAgICAgICAgICAgIHByaW50KCdFcnJvciByZWNlaXZlZDonLCBleGMpCisKKyAgICAgICAgZGVmIGNvbm5lY3Rpb25fbG9zdChzZWxmLCBleGMpOgorICAgICAgICAgICAgcHJpbnQoIlNvY2tldCBjbG9zZWQsIHN0b3AgdGhlIGV2ZW50IGxvb3AiKQorICAgICAgICAgICAgbG9vcCA9IGFzeW5jaW8uZ2V0X2V2ZW50X2xvb3AoKQorICAgICAgICAgICAgbG9vcC5zdG9wKCkKKworICAgIGxvb3AgPSBhc3luY2lvLmdldF9ldmVudF9sb29wKCkKKyAgICBtZXNzYWdlID0gIkhlbGxvIFdvcmxkISIKKyAgICBjb25uZWN0ID0gbG9vcC5jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnQoCisgICAgICAgIGxhbWJkYTogRWNob0NsaWVudFByb3RvY29sKG1lc3NhZ2UsIGxvb3ApLAorICAgICAgICByZW1vdGVfYWRkcj0oJzEyNy4wLjAuMScsIDk5OTkpKQorICAgIHRyYW5zcG9ydCwgcHJvdG9jb2wgPSBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb25uZWN0KQorICAgIGxvb3AucnVuX2ZvcmV2ZXIoKQorICAgIHRyYW5zcG9ydC5jbG9zZSgpCisgICAgbG9vcC5jbG9zZSgpCisKKworLi4gX2FzeW5jaW8tdWRwLWVjaG8tc2VydmVyLXByb3RvY29sOgorCitVRFAgZWNobyBzZXJ2ZXIgcHJvdG9jb2wKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitVRFAgZWNobyBzZXJ2ZXIgdXNpbmcgdGhlIDptZXRoOmBCYXNlRXZlbnRMb29wLmNyZWF0ZV9kYXRhZ3JhbV9lbmRwb2ludGAKK21ldGhvZCwgc2VuZCBiYWNrIHJlY2VpdmVkIGRhdGE6OgorCisgICAgaW1wb3J0IGFzeW5jaW8KKworICAgIGNsYXNzIEVjaG9TZXJ2ZXJQcm90b2NvbDoKKyAgICAgICAgZGVmIGNvbm5lY3Rpb25fbWFkZShzZWxmLCB0cmFuc3BvcnQpOgorICAgICAgICAgICAgc2VsZi50cmFuc3BvcnQgPSB0cmFuc3BvcnQKKworICAgICAgICBkZWYgZGF0YWdyYW1fcmVjZWl2ZWQoc2VsZiwgZGF0YSwgYWRkcik6CisgICAgICAgICAgICBtZXNzYWdlID0gZGF0YS5kZWNvZGUoKQorICAgICAgICAgICAgcHJpbnQoJ1JlY2VpdmVkICVyIGZyb20gJXMnICUgKG1lc3NhZ2UsIGFkZHIpKQorICAgICAgICAgICAgcHJpbnQoJ1NlbmQgJXIgdG8gJXMnICUgKG1lc3NhZ2UsIGFkZHIpKQorICAgICAgICAgICAgc2VsZi50cmFuc3BvcnQuc2VuZHRvKGRhdGEsIGFkZHIpCisKKyAgICBsb29wID0gYXN5bmNpby5nZXRfZXZlbnRfbG9vcCgpCisgICAgcHJpbnQoIlN0YXJ0aW5nIFVEUCBzZXJ2ZXIiKQorICAgICMgT25lIHByb3RvY29sIGluc3RhbmNlIHdpbGwgYmUgY3JlYXRlZCB0byBzZXJ2ZSBhbGwgY2xpZW50IHJlcXVlc3RzCisgICAgbGlzdGVuID0gbG9vcC5jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnQoCisgICAgICAgIEVjaG9TZXJ2ZXJQcm90b2NvbCwgbG9jYWxfYWRkcj0oJzEyNy4wLjAuMScsIDk5OTkpKQorICAgIHRyYW5zcG9ydCwgcHJvdG9jb2wgPSBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZShsaXN0ZW4pCisKKyAgICB0cnk6CisgICAgICAgIGxvb3AucnVuX2ZvcmV2ZXIoKQorICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKKyAgICAgICAgcGFzcworCisgICAgdHJhbnNwb3J0LmNsb3NlKCkKKyAgICBsb29wLmNsb3NlKCkKKworCisuLiBfYXN5bmNpby1yZWdpc3Rlci1zb2NrZXQ6CisKK1JlZ2lzdGVyIGFuIG9wZW4gc29ja2V0IHRvIHdhaXQgZm9yIGRhdGEgdXNpbmcgYSBwcm90b2NvbAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1dhaXQgdW50aWwgYSBzb2NrZXQgcmVjZWl2ZXMgZGF0YSB1c2luZyB0aGUKKzptZXRoOmBCYXNlRXZlbnRMb29wLmNyZWF0ZV9jb25uZWN0aW9uYCBtZXRob2Qgd2l0aCBhIHByb3RvY29sLCBhbmQgdGhlbiBjbG9zZQordGhlIGV2ZW50IGxvb3AgOjoKKworICAgIGltcG9ydCBhc3luY2lvCisgICAgdHJ5OgorICAgICAgICBmcm9tIHNvY2tldCBpbXBvcnQgc29ja2V0cGFpcgorICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgZnJvbSBhc3luY2lvLndpbmRvd3NfdXRpbHMgaW1wb3J0IHNvY2tldHBhaXIKKworICAgICMgQ3JlYXRlIGEgcGFpciBvZiBjb25uZWN0ZWQgc29ja2V0cworICAgIHJzb2NrLCB3c29jayA9IHNvY2tldHBhaXIoKQorICAgIGxvb3AgPSBhc3luY2lvLmdldF9ldmVudF9sb29wKCkKKworICAgIGNsYXNzIE15UHJvdG9jb2woYXN5bmNpby5Qcm90b2NvbCk6CisgICAgICAgIHRyYW5zcG9ydCA9IE5vbmUKKworICAgICAgICBkZWYgY29ubmVjdGlvbl9tYWRlKHNlbGYsIHRyYW5zcG9ydCk6CisgICAgICAgICAgICBzZWxmLnRyYW5zcG9ydCA9IHRyYW5zcG9ydAorCisgICAgICAgIGRlZiBkYXRhX3JlY2VpdmVkKHNlbGYsIGRhdGEpOgorICAgICAgICAgICAgcHJpbnQoIlJlY2VpdmVkOiIsIGRhdGEuZGVjb2RlKCkpCisKKyAgICAgICAgICAgICMgV2UgYXJlIGRvbmU6IGNsb3NlIHRoZSB0cmFuc3BvcnQgKGl0IHdpbGwgY2FsbCBjb25uZWN0aW9uX2xvc3QoKSkKKyAgICAgICAgICAgIHNlbGYudHJhbnNwb3J0LmNsb3NlKCkKKworICAgICAgICBkZWYgY29ubmVjdGlvbl9sb3N0KHNlbGYsIGV4Yyk6CisgICAgICAgICAgICAjIFRoZSBzb2NrZXQgaGFzIGJlZW4gY2xvc2VkLCBzdG9wIHRoZSBldmVudCBsb29wCisgICAgICAgICAgICBsb29wLnN0b3AoKQorCisgICAgIyBSZWdpc3RlciB0aGUgc29ja2V0IHRvIHdhaXQgZm9yIGRhdGEKKyAgICBjb25uZWN0X2Nvcm8gPSBsb29wLmNyZWF0ZV9jb25uZWN0aW9uKE15UHJvdG9jb2wsIHNvY2s9cnNvY2spCisgICAgdHJhbnNwb3J0LCBwcm90b2NvbCA9IGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvbm5lY3RfY29ybykKKworICAgICMgU2ltdWxhdGUgdGhlIHJlY2VwdGlvbiBvZiBkYXRhIGZyb20gdGhlIG5ldHdvcmsKKyAgICBsb29wLmNhbGxfc29vbih3c29jay5zZW5kLCAnYWJjJy5lbmNvZGUoKSkKKworICAgICMgUnVuIHRoZSBldmVudCBsb29wCisgICAgbG9vcC5ydW5fZm9yZXZlcigpCisKKyAgICAjIFdlIGFyZSBkb25lLCBjbG9zZSBzb2NrZXRzIGFuZCB0aGUgZXZlbnQgbG9vcAorICAgIHJzb2NrLmNsb3NlKCkKKyAgICB3c29jay5jbG9zZSgpCisgICAgbG9vcC5jbG9zZSgpCisKKy4uIHNlZWFsc286OgorCisgICBUaGUgOnJlZjpgd2F0Y2ggYSBmaWxlIGRlc2NyaXB0b3IgZm9yIHJlYWQgZXZlbnRzCisgICA8YXN5bmNpby13YXRjaC1yZWFkLWV2ZW50PmAgZXhhbXBsZSB1c2VzIHRoZSBsb3ctbGV2ZWwKKyAgIDptZXRoOmBCYXNlRXZlbnRMb29wLmFkZF9yZWFkZXJgIG1ldGhvZCB0byByZWdpc3RlciB0aGUgZmlsZSBkZXNjcmlwdG9yIG9mIGEKKyAgIHNvY2tldC4KKworICAgVGhlIDpyZWY6YHJlZ2lzdGVyIGFuIG9wZW4gc29ja2V0IHRvIHdhaXQgZm9yIGRhdGEgdXNpbmcgc3RyZWFtcworICAgPGFzeW5jaW8tcmVnaXN0ZXItc29ja2V0LXN0cmVhbXM+YCBleGFtcGxlIHVzZXMgaGlnaC1sZXZlbCBzdHJlYW1zCisgICBjcmVhdGVkIGJ5IHRoZSA6ZnVuYzpgb3Blbl9jb25uZWN0aW9uYCBmdW5jdGlvbiBpbiBhIGNvcm91dGluZS4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2FzeW5jaW8tcXVldWUucnN0IGIvRG9jL2xpYnJhcnkvYXN5bmNpby1xdWV1ZS5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzM3MDY3MgotLS0gL2Rldi9udWxsCisrKyBiL0RvYy9saWJyYXJ5L2FzeW5jaW8tcXVldWUucnN0CkBAIC0wLDAgKzEsMTY5IEBACisuLiBjdXJyZW50bW9kdWxlOjogYXN5bmNpbworCitRdWV1ZXMKKz09PT09PQorCitRdWV1ZXM6CisKKyogOmNsYXNzOmBRdWV1ZWAKKyogOmNsYXNzOmBQcmlvcml0eVF1ZXVlYAorKiA6Y2xhc3M6YExpZm9RdWV1ZWAKKyogOmNsYXNzOmBKb2luYWJsZVF1ZXVlYAorCithc3luY2lvIHF1ZXVlIEFQSSB3YXMgZGVzaWduZWQgdG8gYmUgY2xvc2UgdG8gY2xhc3NlcyBvZiB0aGUgOm1vZDpgcXVldWVgCittb2R1bGUgKDpjbGFzczpgfnF1ZXVlLlF1ZXVlYCwgOmNsYXNzOmB+cXVldWUuUHJpb3JpdHlRdWV1ZWAsCis6Y2xhc3M6YH5xdWV1ZS5MaWZvUXVldWVgKSwgYnV0IGl0IGhhcyBubyAqdGltZW91dCogcGFyYW1ldGVyLiBUaGUKKzpmdW5jOmBhc3luY2lvLndhaXRfZm9yYCBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBjYW5jZWwgYSB0YXNrIGFmdGVyIGEgdGltZW91dC4KKworUXVldWUKKy0tLS0tCisKKy4uIGNsYXNzOjogUXVldWUobWF4c2l6ZT0wLCBcKiwgbG9vcD1Ob25lKQorCisgICBBIHF1ZXVlLCB1c2VmdWwgZm9yIGNvb3JkaW5hdGluZyBwcm9kdWNlciBhbmQgY29uc3VtZXIgY29yb3V0aW5lcy4KKworICAgSWYgKm1heHNpemUqIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB6ZXJvLCB0aGUgcXVldWUgc2l6ZSBpcyBpbmZpbml0ZS4gSWYKKyAgIGl0IGlzIGFuIGludGVnZXIgZ3JlYXRlciB0aGFuIGBgMGBgLCB0aGVuIGBgeWllbGQgZnJvbSBwdXQoKWBgIHdpbGwgYmxvY2sKKyAgIHdoZW4gdGhlIHF1ZXVlIHJlYWNoZXMgKm1heHNpemUqLCB1bnRpbCBhbiBpdGVtIGlzIHJlbW92ZWQgYnkgOm1ldGg6YGdldGAuCisKKyAgIFVubGlrZSB0aGUgc3RhbmRhcmQgbGlicmFyeSA6bW9kOmBxdWV1ZWAsIHlvdSBjYW4gcmVsaWFibHkga25vdyB0aGlzIFF1ZXVlJ3MKKyAgIHNpemUgd2l0aCA6bWV0aDpgcXNpemVgLCBzaW5jZSB5b3VyIHNpbmdsZS10aHJlYWRlZCBhc3luY2lvIGFwcGxpY2F0aW9uIHdvbid0CisgICBiZSBpbnRlcnJ1cHRlZCBiZXR3ZWVuIGNhbGxpbmcgOm1ldGg6YHFzaXplYCBhbmQgZG9pbmcgYW4gb3BlcmF0aW9uIG9uIHRoZQorICAgUXVldWUuCisKKyAgIFRoaXMgY2xhc3MgaXMgOnJlZjpgbm90IHRocmVhZCBzYWZlIDxhc3luY2lvLW11bHRpdGhyZWFkaW5nPmAuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40LjQKKyAgICAgIE5ldyA6bWV0aDpgam9pbmAgYW5kIDptZXRoOmB0YXNrX2RvbmVgIG1ldGhvZHMuCisKKyAgIC4uIG1ldGhvZDo6IGVtcHR5KCkKKworICAgICAgUmV0dXJuIGBgVHJ1ZWBgIGlmIHRoZSBxdWV1ZSBpcyBlbXB0eSwgYGBGYWxzZWBgIG90aGVyd2lzZS4KKworICAgLi4gbWV0aG9kOjogZnVsbCgpCisKKyAgICAgIFJldHVybiBgYFRydWVgYCBpZiB0aGVyZSBhcmUgOmF0dHI6YG1heHNpemVgIGl0ZW1zIGluIHRoZSBxdWV1ZS4KKworICAgICAgLi4gbm90ZTo6CisKKyAgICAgICAgIElmIHRoZSBRdWV1ZSB3YXMgaW5pdGlhbGl6ZWQgd2l0aCBgYG1heHNpemU9MGBgICh0aGUgZGVmYXVsdCksIHRoZW4KKyAgICAgICAgIDptZXRoOmBmdWxsKClgIGlzIG5ldmVyIGBgVHJ1ZWBgLgorCisgICAuLiBjb3JvdXRpbmVtZXRob2Q6OiBnZXQoKQorCisgICAgICBSZW1vdmUgYW5kIHJldHVybiBhbiBpdGVtIGZyb20gdGhlIHF1ZXVlLiBJZiBxdWV1ZSBpcyBlbXB0eSwgd2FpdCB1bnRpbAorICAgICAgYW4gaXRlbSBpcyBhdmFpbGFibGUuCisKKyAgICAgIFRoaXMgbWV0aG9kIGlzIGEgOnJlZjpgY29yb3V0aW5lIDxjb3JvdXRpbmU+YC4KKworICAgICAgLi4gc2VlYWxzbzo6CisKKyAgICAgICAgIFRoZSA6bWV0aDpgZW1wdHlgIG1ldGhvZC4KKworICAgLi4gbWV0aG9kOjogZ2V0X25vd2FpdCgpCisKKyAgICAgIFJlbW92ZSBhbmQgcmV0dXJuIGFuIGl0ZW0gZnJvbSB0aGUgcXVldWUuCisKKyAgICAgIFJldHVybiBhbiBpdGVtIGlmIG9uZSBpcyBpbW1lZGlhdGVseSBhdmFpbGFibGUsIGVsc2UgcmFpc2UKKyAgICAgIDpleGM6YFF1ZXVlRW1wdHlgLgorCisgICAuLiBjb3JvdXRpbmVtZXRob2Q6OiBqb2luKCkKKworICAgICAgQmxvY2sgdW50aWwgYWxsIGl0ZW1zIGluIHRoZSBxdWV1ZSBoYXZlIGJlZW4gZ290dGVuIGFuZCBwcm9jZXNzZWQuCisKKyAgICAgIFRoZSBjb3VudCBvZiB1bmZpbmlzaGVkIHRhc2tzIGdvZXMgdXAgd2hlbmV2ZXIgYW4gaXRlbSBpcyBhZGRlZCB0byB0aGUKKyAgICAgIHF1ZXVlLiBUaGUgY291bnQgZ29lcyBkb3duIHdoZW5ldmVyIGEgY29uc3VtZXIgdGhyZWFkIGNhbGxzCisgICAgICA6bWV0aDpgdGFza19kb25lYCB0byBpbmRpY2F0ZSB0aGF0IHRoZSBpdGVtIHdhcyByZXRyaWV2ZWQgYW5kIGFsbCB3b3JrIG9uCisgICAgICBpdCBpcyBjb21wbGV0ZS4gIFdoZW4gdGhlIGNvdW50IG9mIHVuZmluaXNoZWQgdGFza3MgZHJvcHMgdG8gemVybywKKyAgICAgIDptZXRoOmBqb2luYCB1bmJsb2Nrcy4KKworICAgICAgVGhpcyBtZXRob2QgaXMgYSA6cmVmOmBjb3JvdXRpbmUgPGNvcm91dGluZT5gLgorCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQuNAorCisgICAuLiBjb3JvdXRpbmVtZXRob2Q6OiBwdXQoaXRlbSkKKworICAgICAgUHV0IGFuIGl0ZW0gaW50byB0aGUgcXVldWUuIElmIHRoZSBxdWV1ZSBpcyBmdWxsLCB3YWl0IHVudGlsIGEgZnJlZSBzbG90CisgICAgICBpcyBhdmFpbGFibGUgYmVmb3JlIGFkZGluZyBpdGVtLgorCisgICAgICBUaGlzIG1ldGhvZCBpcyBhIDpyZWY6YGNvcm91dGluZSA8Y29yb3V0aW5lPmAuCisKKyAgICAgIC4uIHNlZWFsc286OgorCisgICAgICAgICBUaGUgOm1ldGg6YGZ1bGxgIG1ldGhvZC4KKworICAgLi4gbWV0aG9kOjogcHV0X25vd2FpdChpdGVtKQorCisgICAgICBQdXQgYW4gaXRlbSBpbnRvIHRoZSBxdWV1ZSB3aXRob3V0IGJsb2NraW5nLgorCisgICAgICBJZiBubyBmcmVlIHNsb3QgaXMgaW1tZWRpYXRlbHkgYXZhaWxhYmxlLCByYWlzZSA6ZXhjOmBRdWV1ZUZ1bGxgLgorCisgICAuLiBtZXRob2Q6OiBxc2l6ZSgpCisKKyAgICAgIE51bWJlciBvZiBpdGVtcyBpbiB0aGUgcXVldWUuCisKKyAgIC4uIG1ldGhvZDo6IHRhc2tfZG9uZSgpCisKKyAgICAgIEluZGljYXRlIHRoYXQgYSBmb3JtZXJseSBlbnF1ZXVlZCB0YXNrIGlzIGNvbXBsZXRlLgorCisgICAgICBVc2VkIGJ5IHF1ZXVlIGNvbnN1bWVycy4gRm9yIGVhY2ggOm1ldGg6YH5RdWV1ZS5nZXRgIHVzZWQgdG8gZmV0Y2ggYSB0YXNrLCBhCisgICAgICBzdWJzZXF1ZW50IGNhbGwgdG8gOm1ldGg6YHRhc2tfZG9uZWAgdGVsbHMgdGhlIHF1ZXVlIHRoYXQgdGhlIHByb2Nlc3NpbmcKKyAgICAgIG9uIHRoZSB0YXNrIGlzIGNvbXBsZXRlLgorCisgICAgICBJZiBhIDptZXRoOmBqb2luYCBpcyBjdXJyZW50bHkgYmxvY2tpbmcsIGl0IHdpbGwgcmVzdW1lIHdoZW4gYWxsIGl0ZW1zCisgICAgICBoYXZlIGJlZW4gcHJvY2Vzc2VkIChtZWFuaW5nIHRoYXQgYSA6bWV0aDpgdGFza19kb25lYCBjYWxsIHdhcyByZWNlaXZlZAorICAgICAgZm9yIGV2ZXJ5IGl0ZW0gdGhhdCBoYWQgYmVlbiA6bWV0aDpgflF1ZXVlLnB1dGAgaW50byB0aGUgcXVldWUpLgorCisgICAgICBSYWlzZXMgOmV4YzpgVmFsdWVFcnJvcmAgaWYgY2FsbGVkIG1vcmUgdGltZXMgdGhhbiB0aGVyZSB3ZXJlIGl0ZW1zCisgICAgICBwbGFjZWQgaW4gdGhlIHF1ZXVlLgorCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQuNAorCisgICAuLiBhdHRyaWJ1dGU6OiBtYXhzaXplCisKKyAgICAgIE51bWJlciBvZiBpdGVtcyBhbGxvd2VkIGluIHRoZSBxdWV1ZS4KKworCitQcmlvcml0eVF1ZXVlCistLS0tLS0tLS0tLS0tCisKKy4uIGNsYXNzOjogUHJpb3JpdHlRdWV1ZQorCisgICBBIHN1YmNsYXNzIG9mIDpjbGFzczpgUXVldWVgOyByZXRyaWV2ZXMgZW50cmllcyBpbiBwcmlvcml0eSBvcmRlciAobG93ZXN0CisgICBmaXJzdCkuCisKKyAgIEVudHJpZXMgYXJlIHR5cGljYWxseSB0dXBsZXMgb2YgdGhlIGZvcm06IChwcmlvcml0eSBudW1iZXIsIGRhdGEpLgorCisKK0xpZm9RdWV1ZQorLS0tLS0tLS0tCisKKy4uIGNsYXNzOjogTGlmb1F1ZXVlCisKKyAgICBBIHN1YmNsYXNzIG9mIDpjbGFzczpgUXVldWVgIHRoYXQgcmV0cmlldmVzIG1vc3QgcmVjZW50bHkgYWRkZWQgZW50cmllcworICAgIGZpcnN0LgorCisKK0pvaW5hYmxlUXVldWUKK15eXl5eXl5eXl5eXl4KKworLi4gY2xhc3M6OiBKb2luYWJsZVF1ZXVlCisKKyAgIERlcHJlY2F0ZWQgYWxpYXMgZm9yIDpjbGFzczpgUXVldWVgLgorCisgICAuLiBkZXByZWNhdGVkOjogMy40LjQKKworCitFeGNlcHRpb25zCiteXl5eXl5eXl5eCisKKy4uIGV4Y2VwdGlvbjo6IFF1ZXVlRW1wdHkKKworICAgRXhjZXB0aW9uIHJhaXNlZCB3aGVuIHRoZSA6bWV0aDpgflF1ZXVlLmdldF9ub3dhaXRgIG1ldGhvZCBpcyBjYWxsZWQgb24gYQorICAgOmNsYXNzOmBRdWV1ZWAgb2JqZWN0IHdoaWNoIGlzIGVtcHR5LgorCisKKy4uIGV4Y2VwdGlvbjo6IFF1ZXVlRnVsbAorCisgICBFeGNlcHRpb24gcmFpc2VkIHdoZW4gdGhlIDptZXRoOmB+UXVldWUucHV0X25vd2FpdGAgbWV0aG9kIGlzIGNhbGxlZCBvbiBhCisgICA6Y2xhc3M6YFF1ZXVlYCBvYmplY3Qgd2hpY2ggaXMgZnVsbC4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2FzeW5jaW8tc3RyZWFtLnJzdCBiL0RvYy9saWJyYXJ5L2FzeW5jaW8tc3RyZWFtLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmI5M2Y5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jL2xpYnJhcnkvYXN5bmNpby1zdHJlYW0ucnN0CkBAIC0wLDAgKzEsNDMxIEBACisuLiBjdXJyZW50bW9kdWxlOjogYXN5bmNpbworCisuLiBfYXN5bmNpby1zdHJlYW1zOgorCisrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworU3RyZWFtcyAoY29yb3V0aW5lIGJhc2VkIEFQSSkKKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisKK1N0cmVhbSBmdW5jdGlvbnMKKz09PT09PT09PT09PT09PT0KKworLi4gbm90ZTo6CisKKyAgIFRoZSB0b3AtbGV2ZWwgZnVuY3Rpb25zIGluIHRoaXMgbW9kdWxlIGFyZSBtZWFudCBjb252ZW5pZW5jZSB3cmFwcGVycworICAgb25seTsgdGhlcmUncyByZWFsbHkgbm90aGluZyBzcGVjaWFsIHRoZXJlLCBhbmQgaWYgdGhleSBkb24ndCBkbworICAgZXhhY3RseSB3aGF0IHlvdSB3YW50LCBmZWVsIGZyZWUgdG8gY29weSB0aGVpciBjb2RlLgorCisKKy4uIGNvcm91dGluZWZ1bmN0aW9uOjogb3Blbl9jb25uZWN0aW9uKGhvc3Q9Tm9uZSwgcG9ydD1Ob25lLCBcKiwgbG9vcD1Ob25lLCBsaW1pdD1Ob25lLCBcKlwqa3dkcykKKworICAgQSB3cmFwcGVyIGZvciA6bWV0aDpgfkJhc2VFdmVudExvb3AuY3JlYXRlX2Nvbm5lY3Rpb24oKWAgcmV0dXJuaW5nIGEgKHJlYWRlciwKKyAgIHdyaXRlcikgcGFpci4KKworICAgVGhlIHJlYWRlciByZXR1cm5lZCBpcyBhIDpjbGFzczpgU3RyZWFtUmVhZGVyYCBpbnN0YW5jZTsgdGhlIHdyaXRlciBpcworICAgYSA6Y2xhc3M6YFN0cmVhbVdyaXRlcmAgaW5zdGFuY2UuCisKKyAgIFRoZSBhcmd1bWVudHMgYXJlIGFsbCB0aGUgdXN1YWwgYXJndW1lbnRzIHRvCisgICA6bWV0aDpgQmFzZUV2ZW50TG9vcC5jcmVhdGVfY29ubmVjdGlvbmAgZXhjZXB0ICpwcm90b2NvbF9mYWN0b3J5KjsgbW9zdAorICAgY29tbW9uIGFyZSBwb3NpdGlvbmFsIGhvc3QgYW5kIHBvcnQsIHdpdGggdmFyaW91cyBvcHRpb25hbCBrZXl3b3JkIGFyZ3VtZW50cworICAgZm9sbG93aW5nLgorCisgICBBZGRpdGlvbmFsIG9wdGlvbmFsIGtleXdvcmQgYXJndW1lbnRzIGFyZSAqbG9vcCogKHRvIHNldCB0aGUgZXZlbnQgbG9vcAorICAgaW5zdGFuY2UgdG8gdXNlKSBhbmQgKmxpbWl0KiAodG8gc2V0IHRoZSBidWZmZXIgbGltaXQgcGFzc2VkIHRvIHRoZQorICAgOmNsYXNzOmBTdHJlYW1SZWFkZXJgKS4KKworICAgVGhpcyBmdW5jdGlvbiBpcyBhIDpyZWY6YGNvcm91dGluZSA8Y29yb3V0aW5lPmAuCisKKy4uIGNvcm91dGluZWZ1bmN0aW9uOjogc3RhcnRfc2VydmVyKGNsaWVudF9jb25uZWN0ZWRfY2IsIGhvc3Q9Tm9uZSwgcG9ydD1Ob25lLCBcKiwgbG9vcD1Ob25lLCBsaW1pdD1Ob25lLCBcKlwqa3dkcykKKworICAgU3RhcnQgYSBzb2NrZXQgc2VydmVyLCB3aXRoIGEgY2FsbGJhY2sgZm9yIGVhY2ggY2xpZW50IGNvbm5lY3RlZC4gVGhlIHJldHVybgorICAgdmFsdWUgaXMgdGhlIHNhbWUgYXMgOm1ldGg6YH5CYXNlRXZlbnRMb29wLmNyZWF0ZV9zZXJ2ZXIoKWAuCisKKyAgIFRoZSAqY2xpZW50X2Nvbm5lY3RlZF9jYiogcGFyYW1ldGVyIGlzIGNhbGxlZCB3aXRoIHR3byBwYXJhbWV0ZXJzOgorICAgKmNsaWVudF9yZWFkZXIqLCAqY2xpZW50X3dyaXRlciouICAqY2xpZW50X3JlYWRlciogaXMgYQorICAgOmNsYXNzOmBTdHJlYW1SZWFkZXJgIG9iamVjdCwgd2hpbGUgKmNsaWVudF93cml0ZXIqIGlzIGEKKyAgIDpjbGFzczpgU3RyZWFtV3JpdGVyYCBvYmplY3QuICBUaGUgKmNsaWVudF9jb25uZWN0ZWRfY2IqIHBhcmFtZXRlciBjYW4KKyAgIGVpdGhlciBiZSBhIHBsYWluIGNhbGxiYWNrIGZ1bmN0aW9uIG9yIGEgOnJlZjpgY29yb3V0aW5lIGZ1bmN0aW9uCisgICA8Y29yb3V0aW5lPmA7IGlmIGl0IGlzIGEgY29yb3V0aW5lIGZ1bmN0aW9uLCBpdCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkKKyAgIGNvbnZlcnRlZCBpbnRvIGEgOmNsYXNzOmBUYXNrYC4KKworICAgVGhlIHJlc3Qgb2YgdGhlIGFyZ3VtZW50cyBhcmUgYWxsIHRoZSB1c3VhbCBhcmd1bWVudHMgdG8KKyAgIDptZXRoOmB+QmFzZUV2ZW50TG9vcC5jcmVhdGVfc2VydmVyKClgIGV4Y2VwdCAqcHJvdG9jb2xfZmFjdG9yeSo7IG1vc3QKKyAgIGNvbW1vbiBhcmUgcG9zaXRpb25hbCAqaG9zdCogYW5kICpwb3J0Kiwgd2l0aCB2YXJpb3VzIG9wdGlvbmFsIGtleXdvcmQKKyAgIGFyZ3VtZW50cyBmb2xsb3dpbmcuCisKKyAgIEFkZGl0aW9uYWwgb3B0aW9uYWwga2V5d29yZCBhcmd1bWVudHMgYXJlICpsb29wKiAodG8gc2V0IHRoZSBldmVudCBsb29wCisgICBpbnN0YW5jZSB0byB1c2UpIGFuZCAqbGltaXQqICh0byBzZXQgdGhlIGJ1ZmZlciBsaW1pdCBwYXNzZWQgdG8gdGhlCisgICA6Y2xhc3M6YFN0cmVhbVJlYWRlcmApLgorCisgICBUaGlzIGZ1bmN0aW9uIGlzIGEgOnJlZjpgY29yb3V0aW5lIDxjb3JvdXRpbmU+YC4KKworLi4gY29yb3V0aW5lZnVuY3Rpb246OiBvcGVuX3VuaXhfY29ubmVjdGlvbihwYXRoPU5vbmUsIFwqLCBsb29wPU5vbmUsIGxpbWl0PU5vbmUsICoqa3dkcykKKworICAgQSB3cmFwcGVyIGZvciA6bWV0aDpgfkJhc2VFdmVudExvb3AuY3JlYXRlX3VuaXhfY29ubmVjdGlvbigpYCByZXR1cm5pbmcKKyAgIGEgKHJlYWRlciwgd3JpdGVyKSBwYWlyLgorCisgICBTZWUgOmZ1bmM6YG9wZW5fY29ubmVjdGlvbmAgZm9yIGluZm9ybWF0aW9uIGFib3V0IHJldHVybiB2YWx1ZSBhbmQgb3RoZXIKKyAgIGRldGFpbHMuCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgYSA6cmVmOmBjb3JvdXRpbmUgPGNvcm91dGluZT5gLgorCisgICBBdmFpbGFiaWxpdHk6IFVOSVguCisKKy4uIGNvcm91dGluZWZ1bmN0aW9uOjogc3RhcnRfdW5peF9zZXJ2ZXIoY2xpZW50X2Nvbm5lY3RlZF9jYiwgcGF0aD1Ob25lLCBcKiwgbG9vcD1Ob25lLCBsaW1pdD1Ob25lLCAqKmt3ZHMpCisKKyAgIFN0YXJ0IGEgVU5JWCBEb21haW4gU29ja2V0IHNlcnZlciwgd2l0aCBhIGNhbGxiYWNrIGZvciBlYWNoIGNsaWVudCBjb25uZWN0ZWQuCisKKyAgIFNlZSA6ZnVuYzpgc3RhcnRfc2VydmVyYCBmb3IgaW5mb3JtYXRpb24gYWJvdXQgcmV0dXJuIHZhbHVlIGFuZCBvdGhlcgorICAgZGV0YWlscy4KKworICAgVGhpcyBmdW5jdGlvbiBpcyBhIDpyZWY6YGNvcm91dGluZSA8Y29yb3V0aW5lPmAuCisKKyAgIEF2YWlsYWJpbGl0eTogVU5JWC4KKworCitTdHJlYW1SZWFkZXIKKz09PT09PT09PT09PQorCisuLiBjbGFzczo6IFN0cmVhbVJlYWRlcihsaW1pdD1Ob25lLCBsb29wPU5vbmUpCisKKyAgIFRoaXMgY2xhc3MgaXMgOnJlZjpgbm90IHRocmVhZCBzYWZlIDxhc3luY2lvLW11bHRpdGhyZWFkaW5nPmAuCisKKyAgIC4uIG1ldGhvZDo6IGV4Y2VwdGlvbigpCisKKyAgICAgIEdldCB0aGUgZXhjZXB0aW9uLgorCisgICAuLiBtZXRob2Q6OiBmZWVkX2VvZigpCisKKyAgICAgIEFja25vd2xlZGdlIHRoZSBFT0YuCisKKyAgIC4uIG1ldGhvZDo6IGZlZWRfZGF0YShkYXRhKQorCisgICAgICBGZWVkICpkYXRhKiBieXRlcyBpbiB0aGUgaW50ZXJuYWwgYnVmZmVyLiAgQW55IG9wZXJhdGlvbnMgd2FpdGluZworICAgICAgZm9yIHRoZSBkYXRhIHdpbGwgYmUgcmVzdW1lZC4KKworICAgLi4gbWV0aG9kOjogc2V0X2V4Y2VwdGlvbihleGMpCisKKyAgICAgIFNldCB0aGUgZXhjZXB0aW9uLgorCisgICAuLiBtZXRob2Q6OiBzZXRfdHJhbnNwb3J0KHRyYW5zcG9ydCkKKworICAgICAgU2V0IHRoZSB0cmFuc3BvcnQuCisKKyAgIC4uIGNvcm91dGluZW1ldGhvZDo6IHJlYWQobj0tMSkKKworICAgICAgUmVhZCB1cCB0byAqbiogYnl0ZXMuICBJZiAqbiogaXMgbm90IHByb3ZpZGVkLCBvciBzZXQgdG8gYGAtMWBgLAorICAgICAgcmVhZCB1bnRpbCBFT0YgYW5kIHJldHVybiBhbGwgcmVhZCBieXRlcy4KKworICAgICAgSWYgdGhlIEVPRiB3YXMgcmVjZWl2ZWQgYW5kIHRoZSBpbnRlcm5hbCBidWZmZXIgaXMgZW1wdHksCisgICAgICByZXR1cm4gYW4gZW1wdHkgYGBieXRlc2BgIG9iamVjdC4KKworICAgICAgVGhpcyBtZXRob2QgaXMgYSA6cmVmOmBjb3JvdXRpbmUgPGNvcm91dGluZT5gLgorCisgICAuLiBjb3JvdXRpbmVtZXRob2Q6OiByZWFkbGluZSgpCisKKyAgICAgIFJlYWQgb25lIGxpbmUsIHdoZXJlICJsaW5lIiBpcyBhIHNlcXVlbmNlIG9mIGJ5dGVzIGVuZGluZyB3aXRoIGBgXG5gYC4KKworICAgICAgSWYgRU9GIGlzIHJlY2VpdmVkLCBhbmQgYGBcbmBgIHdhcyBub3QgZm91bmQsIHRoZSBtZXRob2Qgd2lsbAorICAgICAgcmV0dXJuIHRoZSBwYXJ0aWFsIHJlYWQgYnl0ZXMuCisKKyAgICAgIElmIHRoZSBFT0Ygd2FzIHJlY2VpdmVkIGFuZCB0aGUgaW50ZXJuYWwgYnVmZmVyIGlzIGVtcHR5LAorICAgICAgcmV0dXJuIGFuIGVtcHR5IGBgYnl0ZXNgYCBvYmplY3QuCisKKyAgICAgIFRoaXMgbWV0aG9kIGlzIGEgOnJlZjpgY29yb3V0aW5lIDxjb3JvdXRpbmU+YC4KKworICAgLi4gY29yb3V0aW5lbWV0aG9kOjogcmVhZGV4YWN0bHkobikKKworICAgICAgUmVhZCBleGFjdGx5ICpuKiBieXRlcy4gUmFpc2UgYW4gOmV4YzpgSW5jb21wbGV0ZVJlYWRFcnJvcmAgaWYgdGhlIGVuZCBvZgorICAgICAgdGhlIHN0cmVhbSBpcyByZWFjaGVkIGJlZm9yZSAqbiogY2FuIGJlIHJlYWQsIHRoZQorICAgICAgOmF0dHI6YEluY29tcGxldGVSZWFkRXJyb3IucGFydGlhbGAgYXR0cmlidXRlIG9mIHRoZSBleGNlcHRpb24gY29udGFpbnMKKyAgICAgIHRoZSBwYXJ0aWFsIHJlYWQgYnl0ZXMuCisKKyAgICAgIFRoaXMgbWV0aG9kIGlzIGEgOnJlZjpgY29yb3V0aW5lIDxjb3JvdXRpbmU+YC4KKworICAgLi4gbWV0aG9kOjogYXRfZW9mKCkKKworICAgICAgUmV0dXJuIGBgVHJ1ZWBgIGlmIHRoZSBidWZmZXIgaXMgZW1wdHkgYW5kIDptZXRoOmBmZWVkX2VvZmAgd2FzIGNhbGxlZC4KKworCitTdHJlYW1Xcml0ZXIKKz09PT09PT09PT09PQorCisuLiBjbGFzczo6IFN0cmVhbVdyaXRlcih0cmFuc3BvcnQsIHByb3RvY29sLCByZWFkZXIsIGxvb3ApCisKKyAgIFdyYXBzIGEgVHJhbnNwb3J0LgorCisgICBUaGlzIGV4cG9zZXMgOm1ldGg6YHdyaXRlYCwgOm1ldGg6YHdyaXRlbGluZXNgLCA6bWV0aDpgY2FuX3dyaXRlX2VvZigpYCwKKyAgIDptZXRoOmB3cml0ZV9lb2ZgLCA6bWV0aDpgZ2V0X2V4dHJhX2luZm9gIGFuZCA6bWV0aDpgY2xvc2VgLiAgSXQgYWRkcworICAgOm1ldGg6YGRyYWluYCB3aGljaCByZXR1cm5zIGFuIG9wdGlvbmFsIDpjbGFzczpgRnV0dXJlYCBvbiB3aGljaCB5b3UgY2FuCisgICB3YWl0IGZvciBmbG93IGNvbnRyb2wuICBJdCBhbHNvIGFkZHMgYSB0cmFuc3BvcnQgYXR0cmlidXRlIHdoaWNoIHJlZmVyZW5jZXMKKyAgIHRoZSA6Y2xhc3M6YFRyYW5zcG9ydGAgZGlyZWN0bHkuCisKKyAgIFRoaXMgY2xhc3MgaXMgOnJlZjpgbm90IHRocmVhZCBzYWZlIDxhc3luY2lvLW11bHRpdGhyZWFkaW5nPmAuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IHRyYW5zcG9ydAorCisgICAgICBUcmFuc3BvcnQuCisKKyAgIC4uIG1ldGhvZDo6IGNhbl93cml0ZV9lb2YoKQorCisgICAgICBSZXR1cm4gOmNvbnN0OmBUcnVlYCBpZiB0aGUgdHJhbnNwb3J0IHN1cHBvcnRzIDptZXRoOmB3cml0ZV9lb2ZgLAorICAgICAgOmNvbnN0OmBGYWxzZWAgaWYgbm90LiBTZWUgOm1ldGg6YFdyaXRlVHJhbnNwb3J0LmNhbl93cml0ZV9lb2ZgLgorCisgICAuLiBtZXRob2Q6OiBjbG9zZSgpCisKKyAgICAgIENsb3NlIHRoZSB0cmFuc3BvcnQ6IHNlZSA6bWV0aDpgQmFzZVRyYW5zcG9ydC5jbG9zZWAuCisKKyAgIC4uIGNvcm91dGluZW1ldGhvZDo6IGRyYWluKCkKKworICAgICAgTGV0IHRoZSB3cml0ZSBidWZmZXIgb2YgdGhlIHVuZGVybHlpbmcgdHJhbnNwb3J0IGEgY2hhbmNlIHRvIGJlIGZsdXNoZWQuCisKKyAgICAgIFRoZSBpbnRlbmRlZCB1c2UgaXMgdG8gd3JpdGU6OgorCisgICAgICAgICAgdy53cml0ZShkYXRhKQorICAgICAgICAgIHlpZWxkIGZyb20gdy5kcmFpbigpCisKKyAgICAgIFdoZW4gdGhlIHNpemUgb2YgdGhlIHRyYW5zcG9ydCBidWZmZXIgcmVhY2hlcyB0aGUgaGlnaC13YXRlciBsaW1pdCAodGhlCisgICAgICBwcm90b2NvbCBpcyBwYXVzZWQpLCBibG9jayB1bnRpbCB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyIGlzIGRyYWluZWQgZG93bgorICAgICAgdG8gdGhlIGxvdy13YXRlciBsaW1pdCBhbmQgdGhlIHByb3RvY29sIGlzIHJlc3VtZWQuIFdoZW4gdGhlcmUgaXMgbm90aGluZworICAgICAgdG8gd2FpdCBmb3IsIHRoZSB5aWVsZC1mcm9tIGNvbnRpbnVlcyBpbW1lZGlhdGVseS4KKworICAgICAgWWllbGRpbmcgZnJvbSA6bWV0aDpgZHJhaW5gIGdpdmVzIHRoZSBvcHBvcnR1bml0eSBmb3IgdGhlIGxvb3AgdG8KKyAgICAgIHNjaGVkdWxlIHRoZSB3cml0ZSBvcGVyYXRpb24gYW5kIGZsdXNoIHRoZSBidWZmZXIuIEl0IHNob3VsZCBlc3BlY2lhbGx5CisgICAgICBiZSB1c2VkIHdoZW4gYSBwb3NzaWJseSBsYXJnZSBhbW91bnQgb2YgZGF0YSBpcyB3cml0dGVuIHRvIHRoZSB0cmFuc3BvcnQsCisgICAgICBhbmQgdGhlIGNvcm91dGluZSBkb2VzIG5vdCB5aWVsZC1mcm9tIGJldHdlZW4gY2FsbHMgdG8gOm1ldGg6YHdyaXRlYC4KKworICAgICAgVGhpcyBtZXRob2QgaXMgYSA6cmVmOmBjb3JvdXRpbmUgPGNvcm91dGluZT5gLgorCisgICAuLiBtZXRob2Q6OiBnZXRfZXh0cmFfaW5mbyhuYW1lLCBkZWZhdWx0PU5vbmUpCisKKyAgICAgIFJldHVybiBvcHRpb25hbCB0cmFuc3BvcnQgaW5mb3JtYXRpb246IHNlZQorICAgICAgOm1ldGg6YEJhc2VUcmFuc3BvcnQuZ2V0X2V4dHJhX2luZm9gLgorCisgICAuLiBtZXRob2Q6OiB3cml0ZShkYXRhKQorCisgICAgICBXcml0ZSBzb21lICpkYXRhKiBieXRlcyB0byB0aGUgdHJhbnNwb3J0OiBzZWUKKyAgICAgIDptZXRoOmBXcml0ZVRyYW5zcG9ydC53cml0ZWAuCisKKyAgIC4uIG1ldGhvZDo6IHdyaXRlbGluZXMoZGF0YSkKKworICAgICAgV3JpdGUgYSBsaXN0IChvciBhbnkgaXRlcmFibGUpIG9mIGRhdGEgYnl0ZXMgdG8gdGhlIHRyYW5zcG9ydDoKKyAgICAgIHNlZSA6bWV0aDpgV3JpdGVUcmFuc3BvcnQud3JpdGVsaW5lc2AuCisKKyAgIC4uIG1ldGhvZDo6IHdyaXRlX2VvZigpCisKKyAgICAgIENsb3NlIHRoZSB3cml0ZSBlbmQgb2YgdGhlIHRyYW5zcG9ydCBhZnRlciBmbHVzaGluZyBidWZmZXJlZCBkYXRhOgorICAgICAgc2VlIDptZXRoOmBXcml0ZVRyYW5zcG9ydC53cml0ZV9lb2ZgLgorCisKK1N0cmVhbVJlYWRlclByb3RvY29sCis9PT09PT09PT09PT09PT09PT09PQorCisuLiBjbGFzczo6IFN0cmVhbVJlYWRlclByb3RvY29sKHN0cmVhbV9yZWFkZXIsIGNsaWVudF9jb25uZWN0ZWRfY2I9Tm9uZSwgbG9vcD1Ob25lKQorCisgICAgVHJpdmlhbCBoZWxwZXIgY2xhc3MgdG8gYWRhcHQgYmV0d2VlbiA6Y2xhc3M6YFByb3RvY29sYCBhbmQKKyAgICA6Y2xhc3M6YFN0cmVhbVJlYWRlcmAuIFN1YmxjbGFzcyBvZiA6Y2xhc3M6YFByb3RvY29sYC4KKworICAgICpzdHJlYW1fcmVhZGVyKiBpcyBhIDpjbGFzczpgU3RyZWFtUmVhZGVyYCBpbnN0YW5jZSwgKmNsaWVudF9jb25uZWN0ZWRfY2IqCisgICAgaXMgYW4gb3B0aW9uYWwgZnVuY3Rpb24gY2FsbGVkIHdpdGggKHN0cmVhbV9yZWFkZXIsIHN0cmVhbV93cml0ZXIpIHdoZW4gYQorICAgIGNvbm5lY3Rpb24gaXMgbWFkZSwgKmxvb3AqIGlzIHRoZSBldmVudCBsb29wIGluc3RhbmNlIHRvIHVzZS4KKworICAgIChUaGlzIGlzIGEgaGVscGVyIGNsYXNzIGluc3RlYWQgb2YgbWFraW5nIDpjbGFzczpgU3RyZWFtUmVhZGVyYCBpdHNlbGYgYQorICAgIDpjbGFzczpgUHJvdG9jb2xgIHN1YmNsYXNzLCBiZWNhdXNlIHRoZSA6Y2xhc3M6YFN0cmVhbVJlYWRlcmAgaGFzIG90aGVyCisgICAgcG90ZW50aWFsIHVzZXMsIGFuZCB0byBwcmV2ZW50IHRoZSB1c2VyIG9mIHRoZSA6Y2xhc3M6YFN0cmVhbVJlYWRlcmAgZnJvbQorICAgIGFjY2lkZW50YWxseSBjYWxsaW5nIGluYXBwcm9wcmlhdGUgbWV0aG9kcyBvZiB0aGUgcHJvdG9jb2wuKQorCisKK0luY29tcGxldGVSZWFkRXJyb3IKKz09PT09PT09PT09PT09PT09PT0KKworLi4gZXhjZXB0aW9uOjogSW5jb21wbGV0ZVJlYWRFcnJvcgorCisgICAgSW5jb21wbGV0ZSByZWFkIGVycm9yLCBzdWJjbGFzcyBvZiA6ZXhjOmBFT0ZFcnJvcmAuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IGV4cGVjdGVkCisKKyAgICAgIFRvdGFsIG51bWJlciBvZiBleHBlY3RlZCBieXRlcyAoOmNsYXNzOmBpbnRgKS4KKworICAgLi4gYXR0cmlidXRlOjogcGFydGlhbAorCisgICAgICBSZWFkIGJ5dGVzIHN0cmluZyBiZWZvcmUgdGhlIGVuZCBvZiBzdHJlYW0gd2FzIHJlYWNoZWQgKDpjbGFzczpgYnl0ZXNgKS4KKworCitTdHJlYW0gZXhhbXBsZXMKKz09PT09PT09PT09PT09PQorCisuLiBfYXN5bmNpby10Y3AtZWNoby1jbGllbnQtc3RyZWFtczoKKworVENQIGVjaG8gY2xpZW50IHVzaW5nIHN0cmVhbXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RDUCBlY2hvIGNsaWVudCB1c2luZyB0aGUgOmZ1bmM6YGFzeW5jaW8ub3Blbl9jb25uZWN0aW9uYCBmdW5jdGlvbjo6CisKKyAgICBpbXBvcnQgYXN5bmNpbworCisgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgZGVmIHRjcF9lY2hvX2NsaWVudChtZXNzYWdlLCBsb29wKToKKyAgICAgICAgcmVhZGVyLCB3cml0ZXIgPSB5aWVsZCBmcm9tIGFzeW5jaW8ub3Blbl9jb25uZWN0aW9uKCcxMjcuMC4wLjEnLCA4ODg4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9vcD1sb29wKQorCisgICAgICAgIHByaW50KCdTZW5kOiAlcicgJSBtZXNzYWdlKQorICAgICAgICB3cml0ZXIud3JpdGUobWVzc2FnZS5lbmNvZGUoKSkKKworICAgICAgICBkYXRhID0geWllbGQgZnJvbSByZWFkZXIucmVhZCgxMDApCisgICAgICAgIHByaW50KCdSZWNlaXZlZDogJXInICUgZGF0YS5kZWNvZGUoKSkKKworICAgICAgICBwcmludCgnQ2xvc2UgdGhlIHNvY2tldCcpCisgICAgICAgIHdyaXRlci5jbG9zZSgpCisKKyAgICBtZXNzYWdlID0gJ0hlbGxvIFdvcmxkIScKKyAgICBsb29wID0gYXN5bmNpby5nZXRfZXZlbnRfbG9vcCgpCisgICAgbG9vcC5ydW5fdW50aWxfY29tcGxldGUodGNwX2VjaG9fY2xpZW50KG1lc3NhZ2UsIGxvb3ApKQorICAgIGxvb3AuY2xvc2UoKQorCisuLiBzZWVhbHNvOjoKKworICAgVGhlIDpyZWY6YFRDUCBlY2hvIGNsaWVudCBwcm90b2NvbCA8YXN5bmNpby10Y3AtZWNoby1jbGllbnQtcHJvdG9jb2w+YAorICAgZXhhbXBsZSB1c2VzIHRoZSA6bWV0aDpgQmFzZUV2ZW50TG9vcC5jcmVhdGVfY29ubmVjdGlvbmAgbWV0aG9kLgorCisKKy4uIF9hc3luY2lvLXRjcC1lY2hvLXNlcnZlci1zdHJlYW1zOgorCitUQ1AgZWNobyBzZXJ2ZXIgdXNpbmcgc3RyZWFtcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVENQIGVjaG8gc2VydmVyIHVzaW5nIHRoZSA6ZnVuYzpgYXN5bmNpby5zdGFydF9zZXJ2ZXJgIGZ1bmN0aW9uOjoKKworICAgIGltcG9ydCBhc3luY2lvCisKKyAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICBkZWYgaGFuZGxlX2VjaG8ocmVhZGVyLCB3cml0ZXIpOgorICAgICAgICBkYXRhID0geWllbGQgZnJvbSByZWFkZXIucmVhZCgxMDApCisgICAgICAgIG1lc3NhZ2UgPSBkYXRhLmRlY29kZSgpCisgICAgICAgIGFkZHIgPSB3cml0ZXIuZ2V0X2V4dHJhX2luZm8oJ3BlZXJuYW1lJykKKyAgICAgICAgcHJpbnQoIlJlY2VpdmVkICVyIGZyb20gJXIiICUgKG1lc3NhZ2UsIGFkZHIpKQorCisgICAgICAgIHByaW50KCJTZW5kOiAlciIgJSBtZXNzYWdlKQorICAgICAgICB3cml0ZXIud3JpdGUoZGF0YSkKKyAgICAgICAgeWllbGQgZnJvbSB3cml0ZXIuZHJhaW4oKQorCisgICAgICAgIHByaW50KCJDbG9zZSB0aGUgY2xpZW50IHNvY2tldCIpCisgICAgICAgIHdyaXRlci5jbG9zZSgpCisKKyAgICBsb29wID0gYXN5bmNpby5nZXRfZXZlbnRfbG9vcCgpCisgICAgY29ybyA9IGFzeW5jaW8uc3RhcnRfc2VydmVyKGhhbmRsZV9lY2hvLCAnMTI3LjAuMC4xJywgODg4OCwgbG9vcD1sb29wKQorICAgIHNlcnZlciA9IGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvcm8pCisKKyAgICAjIFNlcnZlIHJlcXVlc3RzIHVudGlsIEN0cmwrQyBpcyBwcmVzc2VkCisgICAgcHJpbnQoJ1NlcnZpbmcgb24ge30nLmZvcm1hdChzZXJ2ZXIuc29ja2V0c1swXS5nZXRzb2NrbmFtZSgpKSkKKyAgICB0cnk6CisgICAgICAgIGxvb3AucnVuX2ZvcmV2ZXIoKQorICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKKyAgICAgICAgcGFzcworCisgICAgIyBDbG9zZSB0aGUgc2VydmVyCisgICAgc2VydmVyLmNsb3NlKCkKKyAgICBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZShzZXJ2ZXIud2FpdF9jbG9zZWQoKSkKKyAgICBsb29wLmNsb3NlKCkKKworLi4gc2VlYWxzbzo6CisKKyAgIFRoZSA6cmVmOmBUQ1AgZWNobyBzZXJ2ZXIgcHJvdG9jb2wgPGFzeW5jaW8tdGNwLWVjaG8tc2VydmVyLXByb3RvY29sPmAKKyAgIGV4YW1wbGUgdXNlcyB0aGUgOm1ldGg6YEJhc2VFdmVudExvb3AuY3JlYXRlX3NlcnZlcmAgbWV0aG9kLgorCisKK0dldCBIVFRQIGhlYWRlcnMKKy0tLS0tLS0tLS0tLS0tLS0KKworU2ltcGxlIGV4YW1wbGUgcXVlcnlpbmcgSFRUUCBoZWFkZXJzIG9mIHRoZSBVUkwgcGFzc2VkIG9uIHRoZSBjb21tYW5kIGxpbmU6OgorCisgICAgaW1wb3J0IGFzeW5jaW8KKyAgICBpbXBvcnQgdXJsbGliLnBhcnNlCisgICAgaW1wb3J0IHN5cworCisgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgZGVmIHByaW50X2h0dHBfaGVhZGVycyh1cmwpOgorICAgICAgICB1cmwgPSB1cmxsaWIucGFyc2UudXJsc3BsaXQodXJsKQorICAgICAgICBpZiB1cmwuc2NoZW1lID09ICdodHRwcyc6CisgICAgICAgICAgICBjb25uZWN0ID0gYXN5bmNpby5vcGVuX2Nvbm5lY3Rpb24odXJsLmhvc3RuYW1lLCA0NDMsIHNzbD1UcnVlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY29ubmVjdCA9IGFzeW5jaW8ub3Blbl9jb25uZWN0aW9uKHVybC5ob3N0bmFtZSwgODApCisgICAgICAgIHJlYWRlciwgd3JpdGVyID0geWllbGQgZnJvbSBjb25uZWN0CisgICAgICAgIHF1ZXJ5ID0gKCdIRUFEIHtwYXRofSBIVFRQLzEuMFxyXG4nCisgICAgICAgICAgICAgICAgICdIb3N0OiB7aG9zdG5hbWV9XHJcbicKKyAgICAgICAgICAgICAgICAgJ1xyXG4nKS5mb3JtYXQocGF0aD11cmwucGF0aCBvciAnLycsIGhvc3RuYW1lPXVybC5ob3N0bmFtZSkKKyAgICAgICAgd3JpdGVyLndyaXRlKHF1ZXJ5LmVuY29kZSgnbGF0aW4tMScpKQorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgbGluZSA9IHlpZWxkIGZyb20gcmVhZGVyLnJlYWRsaW5lKCkKKyAgICAgICAgICAgIGlmIG5vdCBsaW5lOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBsaW5lID0gbGluZS5kZWNvZGUoJ2xhdGluMScpLnJzdHJpcCgpCisgICAgICAgICAgICBpZiBsaW5lOgorICAgICAgICAgICAgICAgIHByaW50KCdIVFRQIGhlYWRlcj4gJXMnICUgbGluZSkKKworICAgICAgICAjIElnbm9yZSB0aGUgYm9keSwgY2xvc2UgdGhlIHNvY2tldAorICAgICAgICB3cml0ZXIuY2xvc2UoKQorCisgICAgdXJsID0gc3lzLmFyZ3ZbMV0KKyAgICBsb29wID0gYXN5bmNpby5nZXRfZXZlbnRfbG9vcCgpCisgICAgdGFzayA9IGFzeW5jaW8uZW5zdXJlX2Z1dHVyZShwcmludF9odHRwX2hlYWRlcnModXJsKSkKKyAgICBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh0YXNrKQorICAgIGxvb3AuY2xvc2UoKQorCitVc2FnZTo6CisKKyAgICBweXRob24gZXhhbXBsZS5weSBodHRwOi8vZXhhbXBsZS5jb20vcGF0aC9wYWdlLmh0bWwKKworb3Igd2l0aCBIVFRQUzo6CisKKyAgICBweXRob24gZXhhbXBsZS5weSBodHRwczovL2V4YW1wbGUuY29tL3BhdGgvcGFnZS5odG1sCisKKy4uIF9hc3luY2lvLXJlZ2lzdGVyLXNvY2tldC1zdHJlYW1zOgorCitSZWdpc3RlciBhbiBvcGVuIHNvY2tldCB0byB3YWl0IGZvciBkYXRhIHVzaW5nIHN0cmVhbXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb3JvdXRpbmUgd2FpdGluZyB1bnRpbCBhIHNvY2tldCByZWNlaXZlcyBkYXRhIHVzaW5nIHRoZQorOmZ1bmM6YG9wZW5fY29ubmVjdGlvbmAgZnVuY3Rpb246OgorCisgICAgaW1wb3J0IGFzeW5jaW8KKyAgICB0cnk6CisgICAgICAgIGZyb20gc29ja2V0IGltcG9ydCBzb2NrZXRwYWlyCisgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICBmcm9tIGFzeW5jaW8ud2luZG93c191dGlscyBpbXBvcnQgc29ja2V0cGFpcgorCisgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgZGVmIHdhaXRfZm9yX2RhdGEobG9vcCk6CisgICAgICAgICMgQ3JlYXRlIGEgcGFpciBvZiBjb25uZWN0ZWQgc29ja2V0cworICAgICAgICByc29jaywgd3NvY2sgPSBzb2NrZXRwYWlyKCkKKworICAgICAgICAjIFJlZ2lzdGVyIHRoZSBvcGVuIHNvY2tldCB0byB3YWl0IGZvciBkYXRhCisgICAgICAgIHJlYWRlciwgd3JpdGVyID0geWllbGQgZnJvbSBhc3luY2lvLm9wZW5fY29ubmVjdGlvbihzb2NrPXJzb2NrLCBsb29wPWxvb3ApCisKKyAgICAgICAgIyBTaW11bGF0ZSB0aGUgcmVjZXB0aW9uIG9mIGRhdGEgZnJvbSB0aGUgbmV0d29yaworICAgICAgICBsb29wLmNhbGxfc29vbih3c29jay5zZW5kLCAnYWJjJy5lbmNvZGUoKSkKKworICAgICAgICAjIFdhaXQgZm9yIGRhdGEKKyAgICAgICAgZGF0YSA9IHlpZWxkIGZyb20gcmVhZGVyLnJlYWQoMTAwKQorCisgICAgICAgICMgR290IGRhdGEsIHdlIGFyZSBkb25lOiBjbG9zZSB0aGUgc29ja2V0CisgICAgICAgIHByaW50KCJSZWNlaXZlZDoiLCBkYXRhLmRlY29kZSgpKQorICAgICAgICB3cml0ZXIuY2xvc2UoKQorCisgICAgICAgICMgQ2xvc2UgdGhlIHNlY29uZCBzb2NrZXQKKyAgICAgICAgd3NvY2suY2xvc2UoKQorCisgICAgbG9vcCA9IGFzeW5jaW8uZ2V0X2V2ZW50X2xvb3AoKQorICAgIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHdhaXRfZm9yX2RhdGEobG9vcCkpCisgICAgbG9vcC5jbG9zZSgpCisKKy4uIHNlZWFsc286OgorCisgICBUaGUgOnJlZjpgcmVnaXN0ZXIgYW4gb3BlbiBzb2NrZXQgdG8gd2FpdCBmb3IgZGF0YSB1c2luZyBhIHByb3RvY29sCisgICA8YXN5bmNpby1yZWdpc3Rlci1zb2NrZXQ+YCBleGFtcGxlIHVzZXMgYSBsb3ctbGV2ZWwgcHJvdG9jb2wgY3JlYXRlZCBieSB0aGUKKyAgIDptZXRoOmBCYXNlRXZlbnRMb29wLmNyZWF0ZV9jb25uZWN0aW9uYCBtZXRob2QuCisKKyAgIFRoZSA6cmVmOmB3YXRjaCBhIGZpbGUgZGVzY3JpcHRvciBmb3IgcmVhZCBldmVudHMKKyAgIDxhc3luY2lvLXdhdGNoLXJlYWQtZXZlbnQ+YCBleGFtcGxlIHVzZXMgdGhlIGxvdy1sZXZlbAorICAgOm1ldGg6YEJhc2VFdmVudExvb3AuYWRkX3JlYWRlcmAgbWV0aG9kIHRvIHJlZ2lzdGVyIHRoZSBmaWxlIGRlc2NyaXB0b3Igb2YgYQorICAgc29ja2V0LgorCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9hc3luY2lvLXN1YnByb2Nlc3MucnN0IGIvRG9jL2xpYnJhcnkvYXN5bmNpby1zdWJwcm9jZXNzLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMWRhZTU0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jL2xpYnJhcnkvYXN5bmNpby1zdWJwcm9jZXNzLnJzdApAQCAtMCwwICsxLDQxOSBAQAorLi4gY3VycmVudG1vZHVsZTo6IGFzeW5jaW8KKworLi4gX2FzeW5jaW8tc3VicHJvY2VzczoKKworU3VicHJvY2VzcworPT09PT09PT09PQorCitXaW5kb3dzIGV2ZW50IGxvb3AKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitPbiBXaW5kb3dzLCB0aGUgZGVmYXVsdCBldmVudCBsb29wIGlzIDpjbGFzczpgU2VsZWN0b3JFdmVudExvb3BgIHdoaWNoIGRvZXMgbm90CitzdXBwb3J0IHN1YnByb2Nlc3Nlcy4gOmNsYXNzOmBQcm9hY3RvckV2ZW50TG9vcGAgc2hvdWxkIGJlIHVzZWQgaW5zdGVhZC4KK0V4YW1wbGUgdG8gdXNlIGl0IG9uIFdpbmRvd3M6OgorCisgICAgaW1wb3J0IGFzeW5jaW8sIHN5cworCisgICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6CisgICAgICAgIGxvb3AgPSBhc3luY2lvLlByb2FjdG9yRXZlbnRMb29wKCkKKyAgICAgICAgYXN5bmNpby5zZXRfZXZlbnRfbG9vcChsb29wKQorCisuLiBzZWVhbHNvOjoKKworICAgOnJlZjpgQXZhaWxhYmxlIGV2ZW50IGxvb3BzIDxhc3luY2lvLWV2ZW50LWxvb3BzPmAgYW5kIDpyZWY6YFBsYXRmb3JtCisgICBzdXBwb3J0IDxhc3luY2lvLXBsYXRmb3JtLXN1cHBvcnQ+YC4KKworCitDcmVhdGUgYSBzdWJwcm9jZXNzOiBoaWdoLWxldmVsIEFQSSB1c2luZyBQcm9jZXNzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy4uIGNvcm91dGluZWZ1bmN0aW9uOjogY3JlYXRlX3N1YnByb2Nlc3NfZXhlYyhcKmFyZ3MsIHN0ZGluPU5vbmUsIHN0ZG91dD1Ob25lLCBzdGRlcnI9Tm9uZSwgbG9vcD1Ob25lLCBsaW1pdD1Ob25lLCBcKlwqa3dkcykKKworICAgQ3JlYXRlIGEgc3VicHJvY2Vzcy4KKworICAgVGhlICpsaW1pdCogcGFyYW1ldGVyIHNldHMgdGhlIGJ1ZmZlciBsaW1pdCBwYXNzZWQgdG8gdGhlCisgICA6Y2xhc3M6YFN0cmVhbVJlYWRlcmAuIFNlZSA6bWV0aDpgQmFzZUV2ZW50TG9vcC5zdWJwcm9jZXNzX2V4ZWNgIGZvciBvdGhlcgorICAgcGFyYW1ldGVycy4KKworICAgUmV0dXJuIGEgOmNsYXNzOmB+YXN5bmNpby5zdWJwcm9jZXNzLlByb2Nlc3NgIGluc3RhbmNlLgorCisgICBUaGlzIGZ1bmN0aW9uIGlzIGEgOnJlZjpgY29yb3V0aW5lIDxjb3JvdXRpbmU+YC4KKworLi4gY29yb3V0aW5lZnVuY3Rpb246OiBjcmVhdGVfc3VicHJvY2Vzc19zaGVsbChjbWQsIHN0ZGluPU5vbmUsIHN0ZG91dD1Ob25lLCBzdGRlcnI9Tm9uZSwgbG9vcD1Ob25lLCBsaW1pdD1Ob25lLCBcKlwqa3dkcykKKworICAgUnVuIHRoZSBzaGVsbCBjb21tYW5kICpjbWQqLgorCisgICBUaGUgKmxpbWl0KiBwYXJhbWV0ZXIgc2V0cyB0aGUgYnVmZmVyIGxpbWl0IHBhc3NlZCB0byB0aGUKKyAgIDpjbGFzczpgU3RyZWFtUmVhZGVyYC4gU2VlIDptZXRoOmBCYXNlRXZlbnRMb29wLnN1YnByb2Nlc3Nfc2hlbGxgIGZvciBvdGhlcgorICAgcGFyYW1ldGVycy4KKworICAgUmV0dXJuIGEgOmNsYXNzOmB+YXN5bmNpby5zdWJwcm9jZXNzLlByb2Nlc3NgIGluc3RhbmNlLgorCisgICBJdCBpcyB0aGUgYXBwbGljYXRpb24ncyByZXNwb25zaWJpbGl0eSB0byBlbnN1cmUgdGhhdCBhbGwgd2hpdGVzcGFjZSBhbmQKKyAgIG1ldGFjaGFyYWN0ZXJzIGFyZSBxdW90ZWQgYXBwcm9wcmlhdGVseSB0byBhdm9pZCBgc2hlbGwgaW5qZWN0aW9uCisgICA8aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TaGVsbF9pbmplY3Rpb24jU2hlbGxfaW5qZWN0aW9uPmBfCisgICB2dWxuZXJhYmlsaXRpZXMuIFRoZSA6ZnVuYzpgc2hsZXgucXVvdGVgIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIHByb3Blcmx5CisgICBlc2NhcGUgd2hpdGVzcGFjZSBhbmQgc2hlbGwgbWV0YWNoYXJhY3RlcnMgaW4gc3RyaW5ncyB0aGF0IGFyZSBnb2luZyB0byBiZQorICAgdXNlZCB0byBjb25zdHJ1Y3Qgc2hlbGwgY29tbWFuZHMuCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgYSA6cmVmOmBjb3JvdXRpbmUgPGNvcm91dGluZT5gLgorCitVc2UgdGhlIDptZXRoOmBCYXNlRXZlbnRMb29wLmNvbm5lY3RfcmVhZF9waXBlYCBhbmQKKzptZXRoOmBCYXNlRXZlbnRMb29wLmNvbm5lY3Rfd3JpdGVfcGlwZWAgbWV0aG9kcyB0byBjb25uZWN0IHBpcGVzLgorCisKK0NyZWF0ZSBhIHN1YnByb2Nlc3M6IGxvdy1sZXZlbCBBUEkgdXNpbmcgc3VicHJvY2Vzcy5Qb3BlbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1J1biBzdWJwcm9jZXNzZXMgYXN5bmNocm9ub3VzbHkgdXNpbmcgdGhlIDptb2Q6YHN1YnByb2Nlc3NgIG1vZHVsZS4KKworLi4gY29yb3V0aW5lbWV0aG9kOjogQmFzZUV2ZW50TG9vcC5zdWJwcm9jZXNzX2V4ZWMocHJvdG9jb2xfZmFjdG9yeSwgXCphcmdzLCBzdGRpbj1zdWJwcm9jZXNzLlBJUEUsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUsIFwqXCprd2FyZ3MpCisKKyAgIENyZWF0ZSBhIHN1YnByb2Nlc3MgZnJvbSBvbmUgb3IgbW9yZSBzdHJpbmcgYXJndW1lbnRzIChjaGFyYWN0ZXIgc3RyaW5ncyBvcgorICAgYnl0ZXMgc3RyaW5ncyBlbmNvZGVkIHRvIHRoZSA6cmVmOmBmaWxlc3lzdGVtIGVuY29kaW5nCisgICA8ZmlsZXN5c3RlbS1lbmNvZGluZz5gKSwgd2hlcmUgdGhlIGZpcnN0IHN0cmluZworICAgc3BlY2lmaWVzIHRoZSBwcm9ncmFtIHRvIGV4ZWN1dGUsIGFuZCB0aGUgcmVtYWluaW5nIHN0cmluZ3Mgc3BlY2lmeSB0aGUKKyAgIHByb2dyYW0ncyBhcmd1bWVudHMuIChUaHVzLCB0b2dldGhlciB0aGUgc3RyaW5nIGFyZ3VtZW50cyBmb3JtIHRoZQorICAgYGBzeXMuYXJndmBgIHZhbHVlIG9mIHRoZSBwcm9ncmFtLCBhc3N1bWluZyBpdCBpcyBhIFB5dGhvbiBzY3JpcHQuKSBUaGlzIGlzCisgICBzaW1pbGFyIHRvIHRoZSBzdGFuZGFyZCBsaWJyYXJ5IDpjbGFzczpgc3VicHJvY2Vzcy5Qb3BlbmAgY2xhc3MgY2FsbGVkIHdpdGgKKyAgIHNoZWxsPUZhbHNlIGFuZCB0aGUgbGlzdCBvZiBzdHJpbmdzIHBhc3NlZCBhcyB0aGUgZmlyc3QgYXJndW1lbnQ7CisgICBob3dldmVyLCB3aGVyZSA6Y2xhc3M6YH5zdWJwcm9jZXNzLlBvcGVuYCB0YWtlcyBhIHNpbmdsZSBhcmd1bWVudCB3aGljaCBpcworICAgbGlzdCBvZiBzdHJpbmdzLCA6ZnVuYzpgc3VicHJvY2Vzc19leGVjYCB0YWtlcyBtdWx0aXBsZSBzdHJpbmcgYXJndW1lbnRzLgorCisgICBUaGUgKnByb3RvY29sX2ZhY3RvcnkqIG11c3QgaW5zdGFuY2lhdGUgYSBzdWJjbGFzcyBvZiB0aGUKKyAgIDpjbGFzczpgYXN5bmNpby5TdWJwcm9jZXNzUHJvdG9jb2xgIGNsYXNzLgorCisgICBPdGhlciBwYXJhbWV0ZXJzOgorCisgICAqICpzdGRpbio6IEVpdGhlciBhIGZpbGUtbGlrZSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBwaXBlIHRvIGJlIGNvbm5lY3RlZAorICAgICB0byB0aGUgc3VicHJvY2VzcydzIHN0YW5kYXJkIGlucHV0IHN0cmVhbSB1c2luZworICAgICA6bWV0aDpgfkJhc2VFdmVudExvb3AuY29ubmVjdF93cml0ZV9waXBlYCwgb3IgdGhlIGNvbnN0YW50CisgICAgIDpjb25zdDpgc3VicHJvY2Vzcy5QSVBFYCAodGhlIGRlZmF1bHQpLiBCeSBkZWZhdWx0IGEgbmV3IHBpcGUgd2lsbCBiZQorICAgICBjcmVhdGVkIGFuZCBjb25uZWN0ZWQuCisKKyAgICogKnN0ZG91dCo6IEVpdGhlciBhIGZpbGUtbGlrZSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBwaXBlIHRvIGJlIGNvbm5lY3RlZAorICAgICB0byB0aGUgc3VicHJvY2VzcydzIHN0YW5kYXJkIG91dHB1dCBzdHJlYW0gdXNpbmcKKyAgICAgOm1ldGg6YH5CYXNlRXZlbnRMb29wLmNvbm5lY3RfcmVhZF9waXBlYCwgb3IgdGhlIGNvbnN0YW50CisgICAgIDpjb25zdDpgc3VicHJvY2Vzcy5QSVBFYCAodGhlIGRlZmF1bHQpLiBCeSBkZWZhdWx0IGEgbmV3IHBpcGUgd2lsbCBiZQorICAgICBjcmVhdGVkIGFuZCBjb25uZWN0ZWQuCisKKyAgICogKnN0ZGVycio6IEVpdGhlciBhIGZpbGUtbGlrZSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBwaXBlIHRvIGJlIGNvbm5lY3RlZAorICAgICB0byB0aGUgc3VicHJvY2VzcydzIHN0YW5kYXJkIGVycm9yIHN0cmVhbSB1c2luZworICAgICA6bWV0aDpgfkJhc2VFdmVudExvb3AuY29ubmVjdF9yZWFkX3BpcGVgLCBvciBvbmUgb2YgdGhlIGNvbnN0YW50cworICAgICA6Y29uc3Q6YHN1YnByb2Nlc3MuUElQRWAgKHRoZSBkZWZhdWx0KSBvciA6Y29uc3Q6YHN1YnByb2Nlc3MuU1RET1VUYC4KKyAgICAgQnkgZGVmYXVsdCBhIG5ldyBwaXBlIHdpbGwgYmUgY3JlYXRlZCBhbmQgY29ubmVjdGVkLiBXaGVuCisgICAgIDpjb25zdDpgc3VicHJvY2Vzcy5TVERPVVRgIGlzIHNwZWNpZmllZCwgdGhlIHN1YnByb2Nlc3MncyBzdGFuZGFyZCBlcnJvcgorICAgICBzdHJlYW0gd2lsbCBiZSBjb25uZWN0ZWQgdG8gdGhlIHNhbWUgcGlwZSBhcyB0aGUgc3RhbmRhcmQgb3V0cHV0IHN0cmVhbS4KKworICAgKiBBbGwgb3RoZXIga2V5d29yZCBhcmd1bWVudHMgYXJlIHBhc3NlZCB0byA6Y2xhc3M6YHN1YnByb2Nlc3MuUG9wZW5gCisgICAgIHdpdGhvdXQgaW50ZXJwcmV0YXRpb24sIGV4Y2VwdCBmb3IgKmJ1ZnNpemUqLCAqdW5pdmVyc2FsX25ld2xpbmVzKiBhbmQKKyAgICAgKnNoZWxsKiwgd2hpY2ggc2hvdWxkIG5vdCBiZSBzcGVjaWZpZWQgYXQgYWxsLgorCisgICBSZXR1cm5zIGEgcGFpciBvZiBgYCh0cmFuc3BvcnQsIHByb3RvY29sKWBgLCB3aGVyZSAqdHJhbnNwb3J0KiBpcyBhbgorICAgaW5zdGFuY2Ugb2YgOmNsYXNzOmBCYXNlU3VicHJvY2Vzc1RyYW5zcG9ydGAuCisKKyAgIFRoaXMgbWV0aG9kIGlzIGEgOnJlZjpgY29yb3V0aW5lIDxjb3JvdXRpbmU+YC4KKworICAgU2VlIHRoZSBjb25zdHJ1Y3RvciBvZiB0aGUgOmNsYXNzOmBzdWJwcm9jZXNzLlBvcGVuYCBjbGFzcyBmb3IgcGFyYW1ldGVycy4KKworLi4gY29yb3V0aW5lbWV0aG9kOjogQmFzZUV2ZW50TG9vcC5zdWJwcm9jZXNzX3NoZWxsKHByb3RvY29sX2ZhY3RvcnksIGNtZCwgXCosIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSwgXCpcKmt3YXJncykKKworICAgQ3JlYXRlIGEgc3VicHJvY2VzcyBmcm9tICpjbWQqLCB3aGljaCBpcyBhIGNoYXJhY3RlciBzdHJpbmcgb3IgYSBieXRlcworICAgc3RyaW5nIGVuY29kZWQgdG8gdGhlIDpyZWY6YGZpbGVzeXN0ZW0gZW5jb2RpbmcgPGZpbGVzeXN0ZW0tZW5jb2Rpbmc+YCwKKyAgIHVzaW5nIHRoZSBwbGF0Zm9ybSdzICJzaGVsbCIgc3ludGF4LiBUaGlzIGlzIHNpbWlsYXIgdG8gdGhlIHN0YW5kYXJkIGxpYnJhcnkKKyAgIDpjbGFzczpgc3VicHJvY2Vzcy5Qb3BlbmAgY2xhc3MgY2FsbGVkIHdpdGggYGBzaGVsbD1UcnVlYGAuCisKKyAgIFRoZSAqcHJvdG9jb2xfZmFjdG9yeSogbXVzdCBpbnN0YW5jaWF0ZSBhIHN1YmNsYXNzIG9mIHRoZQorICAgOmNsYXNzOmBhc3luY2lvLlN1YnByb2Nlc3NQcm90b2NvbGAgY2xhc3MuCisKKyAgIFNlZSA6bWV0aDpgfkJhc2VFdmVudExvb3Auc3VicHJvY2Vzc19leGVjYCBmb3IgbW9yZSBkZXRhaWxzIGFib3V0CisgICB0aGUgcmVtYWluaW5nIGFyZ3VtZW50cy4KKworICAgUmV0dXJucyBhIHBhaXIgb2YgYGAodHJhbnNwb3J0LCBwcm90b2NvbClgYCwgd2hlcmUgKnRyYW5zcG9ydCogaXMgYW4KKyAgIGluc3RhbmNlIG9mIDpjbGFzczpgQmFzZVN1YnByb2Nlc3NUcmFuc3BvcnRgLgorCisgICBJdCBpcyB0aGUgYXBwbGljYXRpb24ncyByZXNwb25zaWJpbGl0eSB0byBlbnN1cmUgdGhhdCBhbGwgd2hpdGVzcGFjZSBhbmQKKyAgIG1ldGFjaGFyYWN0ZXJzIGFyZSBxdW90ZWQgYXBwcm9wcmlhdGVseSB0byBhdm9pZCBgc2hlbGwgaW5qZWN0aW9uCisgICA8aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TaGVsbF9pbmplY3Rpb24jU2hlbGxfaW5qZWN0aW9uPmBfCisgICB2dWxuZXJhYmlsaXRpZXMuIFRoZSA6ZnVuYzpgc2hsZXgucXVvdGVgIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIHByb3Blcmx5CisgICBlc2NhcGUgd2hpdGVzcGFjZSBhbmQgc2hlbGwgbWV0YWNoYXJhY3RlcnMgaW4gc3RyaW5ncyB0aGF0IGFyZSBnb2luZyB0byBiZQorICAgdXNlZCB0byBjb25zdHJ1Y3Qgc2hlbGwgY29tbWFuZHMuCisKKyAgIFRoaXMgbWV0aG9kIGlzIGEgOnJlZjpgY29yb3V0aW5lIDxjb3JvdXRpbmU+YC4KKworLi4gc2VlYWxzbzo6CisKKyAgIFRoZSA6bWV0aDpgQmFzZUV2ZW50TG9vcC5jb25uZWN0X3JlYWRfcGlwZWAgYW5kCisgICA6bWV0aDpgQmFzZUV2ZW50TG9vcC5jb25uZWN0X3dyaXRlX3BpcGVgIG1ldGhvZHMuCisKKworQ29uc3RhbnRzCistLS0tLS0tLS0KKworLi4gZGF0YTo6IGFzeW5jaW8uc3VicHJvY2Vzcy5QSVBFCisKKyAgIFNwZWNpYWwgdmFsdWUgdGhhdCBjYW4gYmUgdXNlZCBhcyB0aGUgKnN0ZGluKiwgKnN0ZG91dCogb3IgKnN0ZGVyciogYXJndW1lbnQKKyAgIHRvIDpmdW5jOmBjcmVhdGVfc3VicHJvY2Vzc19zaGVsbGAgYW5kIDpmdW5jOmBjcmVhdGVfc3VicHJvY2Vzc19leGVjYCBhbmQKKyAgIGluZGljYXRlcyB0aGF0IGEgcGlwZSB0byB0aGUgc3RhbmRhcmQgc3RyZWFtIHNob3VsZCBiZSBvcGVuZWQuCisKKy4uIGRhdGE6OiBhc3luY2lvLnN1YnByb2Nlc3MuU1RET1VUCisKKyAgIFNwZWNpYWwgdmFsdWUgdGhhdCBjYW4gYmUgdXNlZCBhcyB0aGUgKnN0ZGVyciogYXJndW1lbnQgdG8KKyAgIDpmdW5jOmBjcmVhdGVfc3VicHJvY2Vzc19zaGVsbGAgYW5kIDpmdW5jOmBjcmVhdGVfc3VicHJvY2Vzc19leGVjYCBhbmQKKyAgIGluZGljYXRlcyB0aGF0IHN0YW5kYXJkIGVycm9yIHNob3VsZCBnbyBpbnRvIHRoZSBzYW1lIGhhbmRsZSBhcyBzdGFuZGFyZAorICAgb3V0cHV0LgorCisuLiBkYXRhOjogYXN5bmNpby5zdWJwcm9jZXNzLkRFVk5VTEwKKworICAgU3BlY2lhbCB2YWx1ZSB0aGF0IGNhbiBiZSB1c2VkIGFzIHRoZSAqc3RkaW4qLCAqc3Rkb3V0KiBvciAqc3RkZXJyKiBhcmd1bWVudAorICAgdG8gOmZ1bmM6YGNyZWF0ZV9zdWJwcm9jZXNzX3NoZWxsYCBhbmQgOmZ1bmM6YGNyZWF0ZV9zdWJwcm9jZXNzX2V4ZWNgIGFuZAorICAgaW5kaWNhdGVzIHRoYXQgdGhlIHNwZWNpYWwgZmlsZSA6ZGF0YTpgb3MuZGV2bnVsbGAgd2lsbCBiZSB1c2VkLgorCisKK1Byb2Nlc3MKKy0tLS0tLS0KKworLi4gY2xhc3M6OiBhc3luY2lvLnN1YnByb2Nlc3MuUHJvY2VzcworCisgICBBIHN1YnByb2Nlc3MgY3JlYXRlZCBieSB0aGUgOmZ1bmM6YGNyZWF0ZV9zdWJwcm9jZXNzX2V4ZWNgIG9yIHRoZQorICAgOmZ1bmM6YGNyZWF0ZV9zdWJwcm9jZXNzX3NoZWxsYCBmdW5jdGlvbi4KKworICAgVGhlIEFQSSBvZiB0aGUgOmNsYXNzOmB+YXN5bmNpby5zdWJwcm9jZXNzLlByb2Nlc3NgIGNsYXNzIHdhcyBkZXNpZ25lZCB0byBiZQorICAgY2xvc2UgdG8gdGhlIEFQSSBvZiB0aGUgOmNsYXNzOmBzdWJwcm9jZXNzLlBvcGVuYCBjbGFzcywgYnV0IHRoZXJlIGFyZSBzb21lCisgICBkaWZmZXJlbmNlczoKKworICAgKiBUaGVyZSBpcyBubyBleHBsaWNpdCA6bWV0aDpgfnN1YnByb2Nlc3MuUG9wZW4ucG9sbGAgbWV0aG9kCisgICAqIFRoZSA6bWV0aDpgfnN1YnByb2Nlc3MuUG9wZW4uY29tbXVuaWNhdGVgIGFuZAorICAgICA6bWV0aDpgfnN1YnByb2Nlc3MuUG9wZW4ud2FpdGAgbWV0aG9kcyBkb24ndCB0YWtlIGEgKnRpbWVvdXQqIHBhcmFtZXRlcjoKKyAgICAgdXNlIHRoZSA6ZnVuYzpgd2FpdF9mb3JgIGZ1bmN0aW9uCisgICAqIFRoZSAqdW5pdmVyc2FsX25ld2xpbmVzKiBwYXJhbWV0ZXIgaXMgbm90IHN1cHBvcnRlZCAob25seSBieXRlcyBzdHJpbmdzCisgICAgIGFyZSBzdXBwb3J0ZWQpCisgICAqIFRoZSA6bWV0aDpgfmFzeW5jaW8uc3VicHJvY2Vzcy5Qcm9jZXNzLndhaXRgIG1ldGhvZCBvZgorICAgICB0aGUgOmNsYXNzOmB+YXN5bmNpby5zdWJwcm9jZXNzLlByb2Nlc3NgIGNsYXNzIGlzIGFzeW5jaHJvbm91cyB3aGVyZWFzIHRoZQorICAgICA6bWV0aDpgfnN1YnByb2Nlc3MuUG9wZW4ud2FpdGAgbWV0aG9kIG9mIHRoZSA6Y2xhc3M6YH5zdWJwcm9jZXNzLlBvcGVuYAorICAgICBjbGFzcyBpcyBpbXBsZW1lbnRlZCBhcyBhIGJ1c3kgbG9vcC4KKworICAgVGhpcyBjbGFzcyBpcyA6cmVmOmBub3QgdGhyZWFkIHNhZmUgPGFzeW5jaW8tbXVsdGl0aHJlYWRpbmc+YC4gU2VlIGFsc28gdGhlCisgICA6cmVmOmBTdWJwcm9jZXNzIGFuZCB0aHJlYWRzIDxhc3luY2lvLXN1YnByb2Nlc3MtdGhyZWFkcz5gIHNlY3Rpb24uCisKKyAgIC4uIGNvcm91dGluZW1ldGhvZDo6IHdhaXQoKQorCisgICAgICBXYWl0IGZvciBjaGlsZCBwcm9jZXNzIHRvIHRlcm1pbmF0ZS4gIFNldCBhbmQgcmV0dXJuIDphdHRyOmByZXR1cm5jb2RlYAorICAgICAgYXR0cmlidXRlLgorCisgICAgICBUaGlzIG1ldGhvZCBpcyBhIDpyZWY6YGNvcm91dGluZSA8Y29yb3V0aW5lPmAuCisKKyAgICAgIC4uIG5vdGU6OgorCisgICAgICAgICBUaGlzIHdpbGwgZGVhZGxvY2sgd2hlbiB1c2luZyBgYHN0ZG91dD1QSVBFYGAgb3IgYGBzdGRlcnI9UElQRWBgIGFuZAorICAgICAgICAgdGhlIGNoaWxkIHByb2Nlc3MgZ2VuZXJhdGVzIGVub3VnaCBvdXRwdXQgdG8gYSBwaXBlIHN1Y2ggdGhhdCBpdAorICAgICAgICAgYmxvY2tzIHdhaXRpbmcgZm9yIHRoZSBPUyBwaXBlIGJ1ZmZlciB0byBhY2NlcHQgbW9yZSBkYXRhLiBVc2UgdGhlCisgICAgICAgICA6bWV0aDpgY29tbXVuaWNhdGVgIG1ldGhvZCB3aGVuIHVzaW5nIHBpcGVzIHRvIGF2b2lkIHRoYXQuCisKKyAgIC4uIGNvcm91dGluZW1ldGhvZDo6IGNvbW11bmljYXRlKGlucHV0PU5vbmUpCisKKyAgICAgIEludGVyYWN0IHdpdGggcHJvY2VzczogU2VuZCBkYXRhIHRvIHN0ZGluLiAgUmVhZCBkYXRhIGZyb20gc3Rkb3V0IGFuZAorICAgICAgc3RkZXJyLCB1bnRpbCBlbmQtb2YtZmlsZSBpcyByZWFjaGVkLiAgV2FpdCBmb3IgcHJvY2VzcyB0byB0ZXJtaW5hdGUuCisgICAgICBUaGUgb3B0aW9uYWwgKmlucHV0KiBhcmd1bWVudCBzaG91bGQgYmUgZGF0YSB0byBiZSBzZW50IHRvIHRoZSBjaGlsZAorICAgICAgcHJvY2Vzcywgb3IgYGBOb25lYGAsIGlmIG5vIGRhdGEgc2hvdWxkIGJlIHNlbnQgdG8gdGhlIGNoaWxkLiAgVGhlIHR5cGUKKyAgICAgIG9mICppbnB1dCogbXVzdCBiZSBieXRlcy4KKworICAgICAgOm1ldGg6YGNvbW11bmljYXRlYCByZXR1cm5zIGEgdHVwbGUgYGAoc3Rkb3V0X2RhdGEsIHN0ZGVycl9kYXRhKWBgLgorCisgICAgICBJZiBhIDpleGM6YEJyb2tlblBpcGVFcnJvcmAgb3IgOmV4YzpgQ29ubmVjdGlvblJlc2V0RXJyb3JgIGV4Y2VwdGlvbiBpcworICAgICAgcmFpc2VkIHdoZW4gd3JpdGluZyAqaW5wdXQqIGludG8gc3RkaW4sIHRoZSBleGNlcHRpb24gaXMgaWdub3JlZC4gSXQKKyAgICAgIG9jY3VycyB3aGVuIHRoZSBwcm9jZXNzIGV4aXRzIGJlZm9yZSBhbGwgZGF0YSBhcmUgd3JpdHRlbiBpbnRvIHN0ZGluLgorCisgICAgICBOb3RlIHRoYXQgaWYgeW91IHdhbnQgdG8gc2VuZCBkYXRhIHRvIHRoZSBwcm9jZXNzJ3Mgc3RkaW4sIHlvdSBuZWVkIHRvCisgICAgICBjcmVhdGUgdGhlIFByb2Nlc3Mgb2JqZWN0IHdpdGggYGBzdGRpbj1QSVBFYGAuICBTaW1pbGFybHksIHRvIGdldCBhbnl0aGluZworICAgICAgb3RoZXIgdGhhbiBgYE5vbmVgYCBpbiB0aGUgcmVzdWx0IHR1cGxlLCB5b3UgbmVlZCB0byBnaXZlIGBgc3Rkb3V0PVBJUEVgYAorICAgICAgYW5kL29yIGBgc3RkZXJyPVBJUEVgYCB0b28uCisKKyAgICAgIFRoaXMgbWV0aG9kIGlzIGEgOnJlZjpgY29yb3V0aW5lIDxjb3JvdXRpbmU+YC4KKworICAgICAgLi4gbm90ZTo6CisKKyAgICAgICAgIFRoZSBkYXRhIHJlYWQgaXMgYnVmZmVyZWQgaW4gbWVtb3J5LCBzbyBkbyBub3QgdXNlIHRoaXMgbWV0aG9kIGlmIHRoZQorICAgICAgICAgZGF0YSBzaXplIGlzIGxhcmdlIG9yIHVubGltaXRlZC4KKworICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQuMgorICAgICAgICAgVGhlIG1ldGhvZCBub3cgaWdub3JlcyA6ZXhjOmBCcm9rZW5QaXBlRXJyb3JgIGFuZAorICAgICAgICAgOmV4YzpgQ29ubmVjdGlvblJlc2V0RXJyb3JgLgorCisgICAuLiBtZXRob2Q6OiBzZW5kX3NpZ25hbChzaWduYWwpCisKKyAgICAgIFNlbmRzIHRoZSBzaWduYWwgKnNpZ25hbCogdG8gdGhlIGNoaWxkIHByb2Nlc3MuCisKKyAgICAgIC4uIG5vdGU6OgorCisgICAgICAgICBPbiBXaW5kb3dzLCA6cHk6ZGF0YTpgU0lHVEVSTWAgaXMgYW4gYWxpYXMgZm9yIDptZXRoOmB0ZXJtaW5hdGVgLgorICAgICAgICAgYGBDVFJMX0NfRVZFTlRgYCBhbmQgYGBDVFJMX0JSRUFLX0VWRU5UYGAgY2FuIGJlIHNlbnQgdG8gcHJvY2Vzc2VzCisgICAgICAgICBzdGFydGVkIHdpdGggYSAqY3JlYXRpb25mbGFncyogcGFyYW1ldGVyIHdoaWNoIGluY2x1ZGVzCisgICAgICAgICBgYENSRUFURV9ORVdfUFJPQ0VTU19HUk9VUGBgLgorCisgICAuLiBtZXRob2Q6OiB0ZXJtaW5hdGUoKQorCisgICAgICBTdG9wIHRoZSBjaGlsZC4gT24gUG9zaXggT1NzIHRoZSBtZXRob2Qgc2VuZHMgOnB5OmRhdGE6YHNpZ25hbC5TSUdURVJNYAorICAgICAgdG8gdGhlIGNoaWxkLiBPbiBXaW5kb3dzIHRoZSBXaW4zMiBBUEkgZnVuY3Rpb24KKyAgICAgIDpjOmZ1bmM6YFRlcm1pbmF0ZVByb2Nlc3NgIGlzIGNhbGxlZCB0byBzdG9wIHRoZSBjaGlsZC4KKworICAgLi4gbWV0aG9kOjoga2lsbCgpCisKKyAgICAgIEtpbGxzIHRoZSBjaGlsZC4gT24gUG9zaXggT1NzIHRoZSBmdW5jdGlvbiBzZW5kcyA6cHk6ZGF0YTpgU0lHS0lMTGAgdG8KKyAgICAgIHRoZSBjaGlsZC4gIE9uIFdpbmRvd3MgOm1ldGg6YGtpbGxgIGlzIGFuIGFsaWFzIGZvciA6bWV0aDpgdGVybWluYXRlYC4KKworICAgLi4gYXR0cmlidXRlOjogc3RkaW4KKworICAgICAgU3RhbmRhcmQgaW5wdXQgc3RyZWFtICg6Y2xhc3M6YFN0cmVhbVdyaXRlcmApLCBgYE5vbmVgYCBpZiB0aGUgcHJvY2VzcworICAgICAgd2FzIGNyZWF0ZWQgd2l0aCBgYHN0ZGluPU5vbmVgYC4KKworICAgLi4gYXR0cmlidXRlOjogc3Rkb3V0CisKKyAgICAgIFN0YW5kYXJkIG91dHB1dCBzdHJlYW0gKDpjbGFzczpgU3RyZWFtUmVhZGVyYCksIGBgTm9uZWBgIGlmIHRoZSBwcm9jZXNzCisgICAgICB3YXMgY3JlYXRlZCB3aXRoIGBgc3Rkb3V0PU5vbmVgYC4KKworICAgLi4gYXR0cmlidXRlOjogc3RkZXJyCisKKyAgICAgIFN0YW5kYXJkIGVycm9yIHN0cmVhbSAoOmNsYXNzOmBTdHJlYW1SZWFkZXJgKSwgYGBOb25lYGAgaWYgdGhlIHByb2Nlc3MKKyAgICAgIHdhcyBjcmVhdGVkIHdpdGggYGBzdGRlcnI9Tm9uZWBgLgorCisgICAuLiB3YXJuaW5nOjoKKworICAgICAgVXNlIHRoZSA6bWV0aDpgY29tbXVuaWNhdGVgIG1ldGhvZCByYXRoZXIgdGhhbiA6YXR0cjpgLnN0ZGluLndyaXRlCisgICAgICA8c3RkaW4+YCwgOmF0dHI6YC5zdGRvdXQucmVhZCA8c3Rkb3V0PmAgb3IgOmF0dHI6YC5zdGRlcnIucmVhZCA8c3RkZXJyPmAKKyAgICAgIHRvIGF2b2lkIGRlYWRsb2NrcyBkdWUgdG8gc3RyZWFtcyBwYXVzaW5nIHJlYWRpbmcgb3Igd3JpdGluZyBhbmQgYmxvY2tpbmcKKyAgICAgIHRoZSBjaGlsZCBwcm9jZXNzLgorCisgICAuLiBhdHRyaWJ1dGU6OiBwaWQKKworICAgICAgVGhlIGlkZW50aWZpZXIgb2YgdGhlIHByb2Nlc3MuCisKKyAgICAgIE5vdGUgdGhhdCBmb3IgcHJvY2Vzc2VzIGNyZWF0ZWQgYnkgdGhlIDpmdW5jOmBjcmVhdGVfc3VicHJvY2Vzc19zaGVsbGAKKyAgICAgIGZ1bmN0aW9uLCB0aGlzIGF0dHJpYnV0ZSBpcyB0aGUgcHJvY2VzcyBpZGVudGlmaWVyIG9mIHRoZSBzcGF3bmVkIHNoZWxsLgorCisgICAuLiBhdHRyaWJ1dGU6OiByZXR1cm5jb2RlCisKKyAgICAgIFJldHVybiBjb2RlIG9mIHRoZSBwcm9jZXNzIHdoZW4gaXQgZXhpdGVkLiAgQSBgYE5vbmVgYCB2YWx1ZSBpbmRpY2F0ZXMKKyAgICAgIHRoYXQgdGhlIHByb2Nlc3MgaGFzIG5vdCB0ZXJtaW5hdGVkIHlldC4KKworICAgICAgQSBuZWdhdGl2ZSB2YWx1ZSBgYC1OYGAgaW5kaWNhdGVzIHRoYXQgdGhlIGNoaWxkIHdhcyB0ZXJtaW5hdGVkIGJ5IHNpZ25hbAorICAgICAgYGBOYGAgKFVuaXggb25seSkuCisKKworLi4gX2FzeW5jaW8tc3VicHJvY2Vzcy10aHJlYWRzOgorCitTdWJwcm9jZXNzIGFuZCB0aHJlYWRzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2FzeW5jaW8gc3VwcG9ydHMgcnVubmluZyBzdWJwcm9jZXNzZXMgZnJvbSBkaWZmZXJlbnQgdGhyZWFkcywgYnV0IHRoZXJlCithcmUgbGltaXRzOgorCisqIEFuIGV2ZW50IGxvb3AgbXVzdCBydW4gaW4gdGhlIG1haW4gdGhyZWFkCisqIFRoZSBjaGlsZCB3YXRjaGVyIG11c3QgYmUgaW5zdGFudGlhdGVkIGluIHRoZSBtYWluIHRocmVhZCwgYmVmb3JlIGV4ZWN1dGluZworICBzdWJwcm9jZXNzZXMgZnJvbSBvdGhlciB0aHJlYWRzLiBDYWxsIHRoZSA6ZnVuYzpgZ2V0X2NoaWxkX3dhdGNoZXJgCisgIGZ1bmN0aW9uIGluIHRoZSBtYWluIHRocmVhZCB0byBpbnN0YW50aWF0ZSB0aGUgY2hpbGQgd2F0Y2hlci4KKworVGhlIDpjbGFzczpgYXN5bmNpby5zdWJwcm9jZXNzLlByb2Nlc3NgIGNsYXNzIGlzIG5vdCB0aHJlYWQgc2FmZS4KKworLi4gc2VlYWxzbzo6CisKKyAgIFRoZSA6cmVmOmBDb25jdXJyZW5jeSBhbmQgbXVsdGl0aHJlYWRpbmcgaW4gYXN5bmNpbworICAgPGFzeW5jaW8tbXVsdGl0aHJlYWRpbmc+YCBzZWN0aW9uLgorCisKK1N1YnByb2Nlc3MgZXhhbXBsZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworU3VicHJvY2VzcyB1c2luZyB0cmFuc3BvcnQgYW5kIHByb3RvY29sCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworRXhhbXBsZSBvZiBhIHN1YnByb2Nlc3MgcHJvdG9jb2wgdXNpbmcgdG8gZ2V0IHRoZSBvdXRwdXQgb2YgYSBzdWJwcm9jZXNzIGFuZCB0bword2FpdCBmb3IgdGhlIHN1YnByb2Nlc3MgZXhpdC4gVGhlIHN1YnByb2Nlc3MgaXMgY3JlYXRlZCBieSB0aGUKKzptZXRoOmBCYXNlRXZlbnRMb29wLnN1YnByb2Nlc3NfZXhlY2AgbWV0aG9kOjoKKworICAgIGltcG9ydCBhc3luY2lvCisgICAgaW1wb3J0IHN5cworCisgICAgY2xhc3MgRGF0ZVByb3RvY29sKGFzeW5jaW8uU3VicHJvY2Vzc1Byb3RvY29sKToKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGV4aXRfZnV0dXJlKToKKyAgICAgICAgICAgIHNlbGYuZXhpdF9mdXR1cmUgPSBleGl0X2Z1dHVyZQorICAgICAgICAgICAgc2VsZi5vdXRwdXQgPSBieXRlYXJyYXkoKQorCisgICAgICAgIGRlZiBwaXBlX2RhdGFfcmVjZWl2ZWQoc2VsZiwgZmQsIGRhdGEpOgorICAgICAgICAgICAgc2VsZi5vdXRwdXQuZXh0ZW5kKGRhdGEpCisKKyAgICAgICAgZGVmIHByb2Nlc3NfZXhpdGVkKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5leGl0X2Z1dHVyZS5zZXRfcmVzdWx0KFRydWUpCisKKyAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICBkZWYgZ2V0X2RhdGUobG9vcCk6CisgICAgICAgIGNvZGUgPSAnaW1wb3J0IGRhdGV0aW1lOyBwcmludChkYXRldGltZS5kYXRldGltZS5ub3coKSknCisgICAgICAgIGV4aXRfZnV0dXJlID0gYXN5bmNpby5GdXR1cmUobG9vcD1sb29wKQorCisgICAgICAgICMgQ3JlYXRlIHRoZSBzdWJwcm9jZXNzIGNvbnRyb2xsZWQgYnkgdGhlIHByb3RvY29sIERhdGVQcm90b2NvbCwKKyAgICAgICAgIyByZWRpcmVjdCB0aGUgc3RhbmRhcmQgb3V0cHV0IGludG8gYSBwaXBlCisgICAgICAgIGNyZWF0ZSA9IGxvb3Auc3VicHJvY2Vzc19leGVjKGxhbWJkYTogRGF0ZVByb3RvY29sKGV4aXRfZnV0dXJlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzLmV4ZWN1dGFibGUsICctYycsIGNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGluPU5vbmUsIHN0ZGVycj1Ob25lKQorICAgICAgICB0cmFuc3BvcnQsIHByb3RvY29sID0geWllbGQgZnJvbSBjcmVhdGUKKworICAgICAgICAjIFdhaXQgZm9yIHRoZSBzdWJwcm9jZXNzIGV4aXQgdXNpbmcgdGhlIHByb2Nlc3NfZXhpdGVkKCkgbWV0aG9kCisgICAgICAgICMgb2YgdGhlIHByb3RvY29sCisgICAgICAgIHlpZWxkIGZyb20gZXhpdF9mdXR1cmUKKworICAgICAgICAjIENsb3NlIHRoZSBzdGRvdXQgcGlwZQorICAgICAgICB0cmFuc3BvcnQuY2xvc2UoKQorCisgICAgICAgICMgUmVhZCB0aGUgb3V0cHV0IHdoaWNoIHdhcyBjb2xsZWN0ZWQgYnkgdGhlIHBpcGVfZGF0YV9yZWNlaXZlZCgpCisgICAgICAgICMgbWV0aG9kIG9mIHRoZSBwcm90b2NvbAorICAgICAgICBkYXRhID0gYnl0ZXMocHJvdG9jb2wub3V0cHV0KQorICAgICAgICByZXR1cm4gZGF0YS5kZWNvZGUoJ2FzY2lpJykucnN0cmlwKCkKKworICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiOgorICAgICAgICBsb29wID0gYXN5bmNpby5Qcm9hY3RvckV2ZW50TG9vcCgpCisgICAgICAgIGFzeW5jaW8uc2V0X2V2ZW50X2xvb3AobG9vcCkKKyAgICBlbHNlOgorICAgICAgICBsb29wID0gYXN5bmNpby5nZXRfZXZlbnRfbG9vcCgpCisKKyAgICBkYXRlID0gbG9vcC5ydW5fdW50aWxfY29tcGxldGUoZ2V0X2RhdGUobG9vcCkpCisgICAgcHJpbnQoIkN1cnJlbnQgZGF0ZTogJXMiICUgZGF0ZSkKKyAgICBsb29wLmNsb3NlKCkKKworCitTdWJwcm9jZXNzIHVzaW5nIHN0cmVhbXMKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorCitFeGFtcGxlIHVzaW5nIHRoZSA6Y2xhc3M6YH5hc3luY2lvLnN1YnByb2Nlc3MuUHJvY2Vzc2AgY2xhc3MgdG8gY29udHJvbCB0aGUKK3N1YnByb2Nlc3MgYW5kIHRoZSA6Y2xhc3M6YFN0cmVhbVJlYWRlcmAgY2xhc3MgdG8gcmVhZCBmcm9tIHRoZSBzdGFuZGFyZAorb3V0cHV0LiAgVGhlIHN1YnByb2Nlc3MgaXMgY3JlYXRlZCBieSB0aGUgOmZ1bmM6YGNyZWF0ZV9zdWJwcm9jZXNzX2V4ZWNgCitmdW5jdGlvbjo6CisKKyAgICBpbXBvcnQgYXN5bmNpby5zdWJwcm9jZXNzCisgICAgaW1wb3J0IHN5cworCisgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgZGVmIGdldF9kYXRlKCk6CisgICAgICAgIGNvZGUgPSAnaW1wb3J0IGRhdGV0aW1lOyBwcmludChkYXRldGltZS5kYXRldGltZS5ub3coKSknCisKKyAgICAgICAgIyBDcmVhdGUgdGhlIHN1YnByb2Nlc3MsIHJlZGlyZWN0IHRoZSBzdGFuZGFyZCBvdXRwdXQgaW50byBhIHBpcGUKKyAgICAgICAgY3JlYXRlID0gYXN5bmNpby5jcmVhdGVfc3VicHJvY2Vzc19leGVjKHN5cy5leGVjdXRhYmxlLCAnLWMnLCBjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PWFzeW5jaW8uc3VicHJvY2Vzcy5QSVBFKQorICAgICAgICBwcm9jID0geWllbGQgZnJvbSBjcmVhdGUKKworICAgICAgICAjIFJlYWQgb25lIGxpbmUgb2Ygb3V0cHV0CisgICAgICAgIGRhdGEgPSB5aWVsZCBmcm9tIHByb2Muc3Rkb3V0LnJlYWRsaW5lKCkKKyAgICAgICAgbGluZSA9IGRhdGEuZGVjb2RlKCdhc2NpaScpLnJzdHJpcCgpCisKKyAgICAgICAgIyBXYWl0IGZvciB0aGUgc3VicHJvY2VzcyBleGl0CisgICAgICAgIHlpZWxkIGZyb20gcHJvYy53YWl0KCkKKyAgICAgICAgcmV0dXJuIGxpbmUKKworICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiOgorICAgICAgICBsb29wID0gYXN5bmNpby5Qcm9hY3RvckV2ZW50TG9vcCgpCisgICAgICAgIGFzeW5jaW8uc2V0X2V2ZW50X2xvb3AobG9vcCkKKyAgICBlbHNlOgorICAgICAgICBsb29wID0gYXN5bmNpby5nZXRfZXZlbnRfbG9vcCgpCisKKyAgICBkYXRlID0gbG9vcC5ydW5fdW50aWxfY29tcGxldGUoZ2V0X2RhdGUoKSkKKyAgICBwcmludCgiQ3VycmVudCBkYXRlOiAlcyIgJSBkYXRlKQorICAgIGxvb3AuY2xvc2UoKQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvYXN5bmNpby1zeW5jLnJzdCBiL0RvYy9saWJyYXJ5L2FzeW5jaW8tc3luYy5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQzYjUyMwotLS0gL2Rldi9udWxsCisrKyBiL0RvYy9saWJyYXJ5L2FzeW5jaW8tc3luYy5yc3QKQEAgLTAsMCArMSwyOTMgQEAKKy4uIGN1cnJlbnRtb2R1bGU6OiBhc3luY2lvCisuLiBfYXN5bmNpby1zeW5jOgorCitTeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworTG9ja3M6CisKKyogOmNsYXNzOmBMb2NrYAorKiA6Y2xhc3M6YEV2ZW50YAorKiA6Y2xhc3M6YENvbmRpdGlvbmAKKworU2VtYXBob3JlczoKKworKiA6Y2xhc3M6YFNlbWFwaG9yZWAKKyogOmNsYXNzOmBCb3VuZGVkU2VtYXBob3JlYAorCithc3luY2lvIGxvY2sgQVBJIHdhcyBkZXNpZ25lZCB0byBiZSBjbG9zZSB0byBjbGFzc2VzIG9mIHRoZSA6bW9kOmB0aHJlYWRpbmdgCittb2R1bGUgKDpjbGFzczpgfnRocmVhZGluZy5Mb2NrYCwgOmNsYXNzOmB+dGhyZWFkaW5nLkV2ZW50YCwKKzpjbGFzczpgfnRocmVhZGluZy5Db25kaXRpb25gLCA6Y2xhc3M6YH50aHJlYWRpbmcuU2VtYXBob3JlYCwKKzpjbGFzczpgfnRocmVhZGluZy5Cb3VuZGVkU2VtYXBob3JlYCksIGJ1dCBpdCBoYXMgbm8gKnRpbWVvdXQqIHBhcmFtZXRlci4gVGhlCis6ZnVuYzpgYXN5bmNpby53YWl0X2ZvcmAgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gY2FuY2VsIGEgdGFzayBhZnRlciBhIHRpbWVvdXQuCisKK0xvY2tzCistLS0tLQorCitMb2NrCiteXl5eCisKKy4uIGNsYXNzOjogTG9jayhcKiwgbG9vcD1Ob25lKQorCisgICBQcmltaXRpdmUgbG9jayBvYmplY3RzLgorCisgICBBIHByaW1pdGl2ZSBsb2NrIGlzIGEgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZSB0aGF0IGlzIG5vdCBvd25lZCBieSBhCisgICBwYXJ0aWN1bGFyIGNvcm91dGluZSB3aGVuIGxvY2tlZC4gIEEgcHJpbWl0aXZlIGxvY2sgaXMgaW4gb25lIG9mIHR3byBzdGF0ZXMsCisgICAnbG9ja2VkJyBvciAndW5sb2NrZWQnLgorCisgICBJdCBpcyBjcmVhdGVkIGluIHRoZSB1bmxvY2tlZCBzdGF0ZS4gIEl0IGhhcyB0d28gYmFzaWMgbWV0aG9kcywgOm1ldGg6YGFjcXVpcmVgCisgICBhbmQgOm1ldGg6YHJlbGVhc2VgLiAgV2hlbiB0aGUgc3RhdGUgaXMgdW5sb2NrZWQsIGFjcXVpcmUoKSBjaGFuZ2VzIHRoZSBzdGF0ZSB0bworICAgbG9ja2VkIGFuZCByZXR1cm5zIGltbWVkaWF0ZWx5LiAgV2hlbiB0aGUgc3RhdGUgaXMgbG9ja2VkLCBhY3F1aXJlKCkgYmxvY2tzCisgICB1bnRpbCBhIGNhbGwgdG8gcmVsZWFzZSgpIGluIGFub3RoZXIgY29yb3V0aW5lIGNoYW5nZXMgaXQgdG8gdW5sb2NrZWQsIHRoZW4KKyAgIHRoZSBhY3F1aXJlKCkgY2FsbCByZXNldHMgaXQgdG8gbG9ja2VkIGFuZCByZXR1cm5zLiAgVGhlIHJlbGVhc2UoKSBtZXRob2QKKyAgIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBpbiB0aGUgbG9ja2VkIHN0YXRlOyBpdCBjaGFuZ2VzIHRoZSBzdGF0ZSB0byB1bmxvY2tlZAorICAgYW5kIHJldHVybnMgaW1tZWRpYXRlbHkuICBJZiBhbiBhdHRlbXB0IGlzIG1hZGUgdG8gcmVsZWFzZSBhbiB1bmxvY2tlZCBsb2NrLAorICAgYSA6ZXhjOmBSdW50aW1lRXJyb3JgIHdpbGwgYmUgcmFpc2VkLgorCisgICBXaGVuIG1vcmUgdGhhbiBvbmUgY29yb3V0aW5lIGlzIGJsb2NrZWQgaW4gYWNxdWlyZSgpIHdhaXRpbmcgZm9yIHRoZSBzdGF0ZQorICAgdG8gdHVybiB0byB1bmxvY2tlZCwgb25seSBvbmUgY29yb3V0aW5lIHByb2NlZWRzIHdoZW4gYSByZWxlYXNlKCkgY2FsbAorICAgcmVzZXRzIHRoZSBzdGF0ZSB0byB1bmxvY2tlZDsgZmlyc3QgY29yb3V0aW5lIHdoaWNoIGlzIGJsb2NrZWQgaW4gYWNxdWlyZSgpCisgICBpcyBiZWluZyBwcm9jZXNzZWQuCisKKyAgIDptZXRoOmBhY3F1aXJlYCBpcyBhIGNvcm91dGluZSBhbmQgc2hvdWxkIGJlIGNhbGxlZCB3aXRoIGBgeWllbGQgZnJvbWBgLgorCisgICBMb2NrcyBhbHNvIHN1cHBvcnQgdGhlIGNvbnRleHQgbWFuYWdlbWVudCBwcm90b2NvbC4gIGBgKHlpZWxkIGZyb20gbG9jaylgYAorICAgc2hvdWxkIGJlIHVzZWQgYXMgY29udGV4dCBtYW5hZ2VyIGV4cHJlc3Npb24uCisKKyAgIFRoaXMgY2xhc3MgaXMgOnJlZjpgbm90IHRocmVhZCBzYWZlIDxhc3luY2lvLW11bHRpdGhyZWFkaW5nPmAuCisKKyAgIFVzYWdlOjoKKworICAgICAgIGxvY2sgPSBMb2NrKCkKKyAgICAgICAuLi4KKyAgICAgICB5aWVsZCBmcm9tIGxvY2sKKyAgICAgICB0cnk6CisgICAgICAgICAgIC4uLgorICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgIGxvY2sucmVsZWFzZSgpCisKKyAgIENvbnRleHQgbWFuYWdlciB1c2FnZTo6CisKKyAgICAgICBsb2NrID0gTG9jaygpCisgICAgICAgLi4uCisgICAgICAgd2l0aCAoeWllbGQgZnJvbSBsb2NrKToKKyAgICAgICAgICAgIC4uLgorCisgICBMb2NrIG9iamVjdHMgY2FuIGJlIHRlc3RlZCBmb3IgbG9ja2luZyBzdGF0ZTo6CisKKyAgICAgICBpZiBub3QgbG9jay5sb2NrZWQoKToKKyAgICAgICAgICB5aWVsZCBmcm9tIGxvY2sKKyAgICAgICBlbHNlOgorICAgICAgICAgICMgbG9jayBpcyBhY3F1aXJlZAorICAgICAgICAgICAuLi4KKworICAgLi4gbWV0aG9kOjogbG9ja2VkKCkKKworICAgICAgUmV0dXJuIGBgVHJ1ZWBgIGlmIHRoZSBsb2NrIGlzIGFjcXVpcmVkLgorCisgICAuLiBjb3JvdXRpbmVtZXRob2Q6OiBhY3F1aXJlKCkKKworICAgICAgQWNxdWlyZSBhIGxvY2suCisKKyAgICAgIFRoaXMgbWV0aG9kIGJsb2NrcyB1bnRpbCB0aGUgbG9jayBpcyB1bmxvY2tlZCwgdGhlbiBzZXRzIGl0IHRvIGxvY2tlZCBhbmQKKyAgICAgIHJldHVybnMgYGBUcnVlYGAuCisKKyAgICAgIFRoaXMgbWV0aG9kIGlzIGEgOnJlZjpgY29yb3V0aW5lIDxjb3JvdXRpbmU+YC4KKworICAgLi4gbWV0aG9kOjogcmVsZWFzZSgpCisKKyAgICAgIFJlbGVhc2UgYSBsb2NrLgorCisgICAgICBXaGVuIHRoZSBsb2NrIGlzIGxvY2tlZCwgcmVzZXQgaXQgdG8gdW5sb2NrZWQsIGFuZCByZXR1cm4uICBJZiBhbnkgb3RoZXIKKyAgICAgIGNvcm91dGluZXMgYXJlIGJsb2NrZWQgd2FpdGluZyBmb3IgdGhlIGxvY2sgdG8gYmVjb21lIHVubG9ja2VkLCBhbGxvdworICAgICAgZXhhY3RseSBvbmUgb2YgdGhlbSB0byBwcm9jZWVkLgorCisgICAgICBXaGVuIGludm9rZWQgb24gYW4gdW5sb2NrZWQgbG9jaywgYSA6ZXhjOmBSdW50aW1lRXJyb3JgIGlzIHJhaXNlZC4KKworICAgICAgVGhlcmUgaXMgbm8gcmV0dXJuIHZhbHVlLgorCisKK0V2ZW50CiteXl5eXgorCisuLiBjbGFzczo6IEV2ZW50KFwqLCBsb29wPU5vbmUpCisKKyAgIEFuIEV2ZW50IGltcGxlbWVudGF0aW9uLCBhc3luY2hyb25vdXMgZXF1aXZhbGVudCB0byA6Y2xhc3M6YHRocmVhZGluZy5FdmVudGAuCisKKyAgIENsYXNzIGltcGxlbWVudGluZyBldmVudCBvYmplY3RzLiBBbiBldmVudCBtYW5hZ2VzIGEgZmxhZyB0aGF0IGNhbiBiZSBzZXQgdG8KKyAgIHRydWUgd2l0aCB0aGUgOm1ldGg6YHNldGAgbWV0aG9kIGFuZCByZXNldCB0byBmYWxzZSB3aXRoIHRoZSA6bWV0aDpgY2xlYXJgCisgICBtZXRob2QuICBUaGUgOm1ldGg6YHdhaXRgIG1ldGhvZCBibG9ja3MgdW50aWwgdGhlIGZsYWcgaXMgdHJ1ZS4gVGhlIGZsYWcgaXMKKyAgIGluaXRpYWxseSBmYWxzZS4KKworICAgVGhpcyBjbGFzcyBpcyA6cmVmOmBub3QgdGhyZWFkIHNhZmUgPGFzeW5jaW8tbXVsdGl0aHJlYWRpbmc+YC4KKworICAgLi4gbWV0aG9kOjogY2xlYXIoKQorCisgICAgICBSZXNldCB0aGUgaW50ZXJuYWwgZmxhZyB0byBmYWxzZS4gU3Vic2VxdWVudGx5LCBjb3JvdXRpbmVzIGNhbGxpbmcKKyAgICAgIDptZXRoOmB3YWl0YCB3aWxsIGJsb2NrIHVudGlsIDptZXRoOmBzZXRgIGlzIGNhbGxlZCB0byBzZXQgdGhlIGludGVybmFsCisgICAgICBmbGFnIHRvIHRydWUgYWdhaW4uCisKKyAgIC4uIG1ldGhvZDo6IGlzX3NldCgpCisKKyAgICAgIFJldHVybiBgYFRydWVgYCBpZiBhbmQgb25seSBpZiB0aGUgaW50ZXJuYWwgZmxhZyBpcyB0cnVlLgorCisgICAuLiBtZXRob2Q6OiBzZXQoKQorCisgICAgICBTZXQgdGhlIGludGVybmFsIGZsYWcgdG8gdHJ1ZS4gQWxsIGNvcm91dGluZXMgd2FpdGluZyBmb3IgaXQgdG8gYmVjb21lCisgICAgICB0cnVlIGFyZSBhd2FrZW5lZC4gQ29yb3V0aW5lIHRoYXQgY2FsbCA6bWV0aDpgd2FpdGAgb25jZSB0aGUgZmxhZyBpcyB0cnVlCisgICAgICB3aWxsIG5vdCBibG9jayBhdCBhbGwuCisKKyAgIC4uIGNvcm91dGluZW1ldGhvZDo6IHdhaXQoKQorCisgICAgICBCbG9jayB1bnRpbCB0aGUgaW50ZXJuYWwgZmxhZyBpcyB0cnVlLgorCisgICAgICBJZiB0aGUgaW50ZXJuYWwgZmxhZyBpcyB0cnVlIG9uIGVudHJ5LCByZXR1cm4gYGBUcnVlYGAgaW1tZWRpYXRlbHkuCisgICAgICBPdGhlcndpc2UsIGJsb2NrIHVudGlsIGFub3RoZXIgY29yb3V0aW5lIGNhbGxzIDptZXRoOmBzZXRgIHRvIHNldCB0aGUKKyAgICAgIGZsYWcgdG8gdHJ1ZSwgdGhlbiByZXR1cm4gYGBUcnVlYGAuCisKKyAgICAgIFRoaXMgbWV0aG9kIGlzIGEgOnJlZjpgY29yb3V0aW5lIDxjb3JvdXRpbmU+YC4KKworCitDb25kaXRpb24KK15eXl5eXl5eXgorCisuLiBjbGFzczo6IENvbmRpdGlvbihsb2NrPU5vbmUsIFwqLCBsb29wPU5vbmUpCisKKyAgIEEgQ29uZGl0aW9uIGltcGxlbWVudGF0aW9uLCBhc3luY2hyb25vdXMgZXF1aXZhbGVudCB0bworICAgOmNsYXNzOmB0aHJlYWRpbmcuQ29uZGl0aW9uYC4KKworICAgVGhpcyBjbGFzcyBpbXBsZW1lbnRzIGNvbmRpdGlvbiB2YXJpYWJsZSBvYmplY3RzLiBBIGNvbmRpdGlvbiB2YXJpYWJsZQorICAgYWxsb3dzIG9uZSBvciBtb3JlIGNvcm91dGluZXMgdG8gd2FpdCB1bnRpbCB0aGV5IGFyZSBub3RpZmllZCBieSBhbm90aGVyCisgICBjb3JvdXRpbmUuCisKKyAgIElmIHRoZSAqbG9jayogYXJndW1lbnQgaXMgZ2l2ZW4gYW5kIG5vdCBgYE5vbmVgYCwgaXQgbXVzdCBiZSBhIDpjbGFzczpgTG9ja2AKKyAgIG9iamVjdCwgYW5kIGl0IGlzIHVzZWQgYXMgdGhlIHVuZGVybHlpbmcgbG9jay4gIE90aGVyd2lzZSwKKyAgIGEgbmV3IDpjbGFzczpgTG9ja2Agb2JqZWN0IGlzIGNyZWF0ZWQgYW5kIHVzZWQgYXMgdGhlIHVuZGVybHlpbmcgbG9jay4KKworICAgVGhpcyBjbGFzcyBpcyA6cmVmOmBub3QgdGhyZWFkIHNhZmUgPGFzeW5jaW8tbXVsdGl0aHJlYWRpbmc+YC4KKworICAgLi4gY29yb3V0aW5lbWV0aG9kOjogYWNxdWlyZSgpCisKKyAgICAgIEFjcXVpcmUgdGhlIHVuZGVybHlpbmcgbG9jay4KKworICAgICAgVGhpcyBtZXRob2QgYmxvY2tzIHVudGlsIHRoZSBsb2NrIGlzIHVubG9ja2VkLCB0aGVuIHNldHMgaXQgdG8gbG9ja2VkIGFuZAorICAgICAgcmV0dXJucyBgYFRydWVgYC4KKworICAgICAgVGhpcyBtZXRob2QgaXMgYSA6cmVmOmBjb3JvdXRpbmUgPGNvcm91dGluZT5gLgorCisgICAuLiBtZXRob2Q6OiBub3RpZnkobj0xKQorCisgICAgICBCeSBkZWZhdWx0LCB3YWtlIHVwIG9uZSBjb3JvdXRpbmUgd2FpdGluZyBvbiB0aGlzIGNvbmRpdGlvbiwgaWYgYW55LgorICAgICAgSWYgdGhlIGNhbGxpbmcgY29yb3V0aW5lIGhhcyBub3QgYWNxdWlyZWQgdGhlIGxvY2sgd2hlbiB0aGlzIG1ldGhvZCBpcworICAgICAgY2FsbGVkLCBhIDpleGM6YFJ1bnRpbWVFcnJvcmAgaXMgcmFpc2VkLgorCisgICAgICBUaGlzIG1ldGhvZCB3YWtlcyB1cCBhdCBtb3N0ICpuKiBvZiB0aGUgY29yb3V0aW5lcyB3YWl0aW5nIGZvciB0aGUKKyAgICAgIGNvbmRpdGlvbiB2YXJpYWJsZTsgaXQgaXMgYSBuby1vcCBpZiBubyBjb3JvdXRpbmVzIGFyZSB3YWl0aW5nLgorCisgICAgICAuLiBub3RlOjoKKworICAgICAgICAgQW4gYXdha2VuZWQgY29yb3V0aW5lIGRvZXMgbm90IGFjdHVhbGx5IHJldHVybiBmcm9tIGl0cyA6bWV0aDpgd2FpdGAKKyAgICAgICAgIGNhbGwgdW50aWwgaXQgY2FuIHJlYWNxdWlyZSB0aGUgbG9jay4gU2luY2UgOm1ldGg6YG5vdGlmeWAgZG9lcyBub3QKKyAgICAgICAgIHJlbGVhc2UgdGhlIGxvY2ssIGl0cyBjYWxsZXIgc2hvdWxkLgorCisgICAuLiBtZXRob2Q6OiBsb2NrZWQoKQorCisgICAgICBSZXR1cm4gYGBUcnVlYGAgaWYgdGhlIHVuZGVybHlpbmcgbG9jayBpcyBhY3F1aXJlZC4KKworICAgLi4gbWV0aG9kOjogbm90aWZ5X2FsbCgpCisKKyAgICAgIFdha2UgdXAgYWxsIGNvcm91dGluZXMgd2FpdGluZyBvbiB0aGlzIGNvbmRpdGlvbi4gVGhpcyBtZXRob2QgYWN0cyBsaWtlCisgICAgICA6bWV0aDpgbm90aWZ5YCwgYnV0IHdha2VzIHVwIGFsbCB3YWl0aW5nIGNvcm91dGluZXMgaW5zdGVhZCBvZiBvbmUuIElmIHRoZQorICAgICAgY2FsbGluZyBjb3JvdXRpbmUgaGFzIG5vdCBhY3F1aXJlZCB0aGUgbG9jayB3aGVuIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCwgYQorICAgICAgOmV4YzpgUnVudGltZUVycm9yYCBpcyByYWlzZWQuCisKKyAgIC4uIG1ldGhvZDo6IHJlbGVhc2UoKQorCisgICAgICBSZWxlYXNlIHRoZSB1bmRlcmx5aW5nIGxvY2suCisKKyAgICAgIFdoZW4gdGhlIGxvY2sgaXMgbG9ja2VkLCByZXNldCBpdCB0byB1bmxvY2tlZCwgYW5kIHJldHVybi4gSWYgYW55IG90aGVyCisgICAgICBjb3JvdXRpbmVzIGFyZSBibG9ja2VkIHdhaXRpbmcgZm9yIHRoZSBsb2NrIHRvIGJlY29tZSB1bmxvY2tlZCwgYWxsb3cKKyAgICAgIGV4YWN0bHkgb25lIG9mIHRoZW0gdG8gcHJvY2VlZC4KKworICAgICAgV2hlbiBpbnZva2VkIG9uIGFuIHVubG9ja2VkIGxvY2ssIGEgOmV4YzpgUnVudGltZUVycm9yYCBpcyByYWlzZWQuCisKKyAgICAgIFRoZXJlIGlzIG5vIHJldHVybiB2YWx1ZS4KKworICAgLi4gY29yb3V0aW5lbWV0aG9kOjogd2FpdCgpCisKKyAgICAgIFdhaXQgdW50aWwgbm90aWZpZWQuCisKKyAgICAgIElmIHRoZSBjYWxsaW5nIGNvcm91dGluZSBoYXMgbm90IGFjcXVpcmVkIHRoZSBsb2NrIHdoZW4gdGhpcyBtZXRob2QgaXMKKyAgICAgIGNhbGxlZCwgYSA6ZXhjOmBSdW50aW1lRXJyb3JgIGlzIHJhaXNlZC4KKworICAgICAgVGhpcyBtZXRob2QgcmVsZWFzZXMgdGhlIHVuZGVybHlpbmcgbG9jaywgYW5kIHRoZW4gYmxvY2tzIHVudGlsIGl0IGlzCisgICAgICBhd2FrZW5lZCBieSBhIDptZXRoOmBub3RpZnlgIG9yIDptZXRoOmBub3RpZnlfYWxsYCBjYWxsIGZvciB0aGUgc2FtZQorICAgICAgY29uZGl0aW9uIHZhcmlhYmxlIGluIGFub3RoZXIgY29yb3V0aW5lLiAgT25jZSBhd2FrZW5lZCwgaXQgcmUtYWNxdWlyZXMKKyAgICAgIHRoZSBsb2NrIGFuZCByZXR1cm5zIGBgVHJ1ZWBgLgorCisgICAgICBUaGlzIG1ldGhvZCBpcyBhIDpyZWY6YGNvcm91dGluZSA8Y29yb3V0aW5lPmAuCisKKyAgIC4uIGNvcm91dGluZW1ldGhvZDo6IHdhaXRfZm9yKHByZWRpY2F0ZSkKKworICAgICAgV2FpdCB1bnRpbCBhIHByZWRpY2F0ZSBiZWNvbWVzIHRydWUuCisKKyAgICAgIFRoZSBwcmVkaWNhdGUgc2hvdWxkIGJlIGEgY2FsbGFibGUgd2hpY2ggcmVzdWx0IHdpbGwgYmUgaW50ZXJwcmV0ZWQgYXMgYQorICAgICAgYm9vbGVhbiB2YWx1ZS4gVGhlIGZpbmFsIHByZWRpY2F0ZSB2YWx1ZSBpcyB0aGUgcmV0dXJuIHZhbHVlLgorCisgICAgICBUaGlzIG1ldGhvZCBpcyBhIDpyZWY6YGNvcm91dGluZSA8Y29yb3V0aW5lPmAuCisKKworU2VtYXBob3JlcworLS0tLS0tLS0tLQorCitTZW1hcGhvcmUKK15eXl5eXl5eXgorCisuLiBjbGFzczo6IFNlbWFwaG9yZSh2YWx1ZT0xLCBcKiwgbG9vcD1Ob25lKQorCisgICBBIFNlbWFwaG9yZSBpbXBsZW1lbnRhdGlvbi4KKworICAgQSBzZW1hcGhvcmUgbWFuYWdlcyBhbiBpbnRlcm5hbCBjb3VudGVyIHdoaWNoIGlzIGRlY3JlbWVudGVkIGJ5IGVhY2gKKyAgIDptZXRoOmBhY3F1aXJlYCBjYWxsIGFuZCBpbmNyZW1lbnRlZCBieSBlYWNoIDptZXRoOmByZWxlYXNlYCBjYWxsLiBUaGUKKyAgIGNvdW50ZXIgY2FuIG5ldmVyIGdvIGJlbG93IHplcm87IHdoZW4gOm1ldGg6YGFjcXVpcmVgIGZpbmRzIHRoYXQgaXQgaXMgemVybywKKyAgIGl0IGJsb2Nrcywgd2FpdGluZyB1bnRpbCBzb21lIG90aGVyIGNvcm91dGluZSBjYWxscyA6bWV0aDpgcmVsZWFzZWAuCisKKyAgIFNlbWFwaG9yZXMgYWxzbyBzdXBwb3J0IHRoZSBjb250ZXh0IG1hbmFnZW1lbnQgcHJvdG9jb2wuCisKKyAgIFRoZSBvcHRpb25hbCBhcmd1bWVudCBnaXZlcyB0aGUgaW5pdGlhbCB2YWx1ZSBmb3IgdGhlIGludGVybmFsIGNvdW50ZXI7IGl0CisgICBkZWZhdWx0cyB0byBgYDFgYC4gSWYgdGhlIHZhbHVlIGdpdmVuIGlzIGxlc3MgdGhhbiBgYDBgYCwgOmV4YzpgVmFsdWVFcnJvcmAKKyAgIGlzIHJhaXNlZC4KKworICAgVGhpcyBjbGFzcyBpcyA6cmVmOmBub3QgdGhyZWFkIHNhZmUgPGFzeW5jaW8tbXVsdGl0aHJlYWRpbmc+YC4KKworICAgLi4gY29yb3V0aW5lbWV0aG9kOjogYWNxdWlyZSgpCisKKyAgICAgIEFjcXVpcmUgYSBzZW1hcGhvcmUuCisKKyAgICAgIElmIHRoZSBpbnRlcm5hbCBjb3VudGVyIGlzIGxhcmdlciB0aGFuIHplcm8gb24gZW50cnksIGRlY3JlbWVudCBpdCBieSBvbmUKKyAgICAgIGFuZCByZXR1cm4gYGBUcnVlYGAgaW1tZWRpYXRlbHkuICBJZiBpdCBpcyB6ZXJvIG9uIGVudHJ5LCBibG9jaywgd2FpdGluZworICAgICAgdW50aWwgc29tZSBvdGhlciBjb3JvdXRpbmUgaGFzIGNhbGxlZCA6bWV0aDpgcmVsZWFzZWAgdG8gbWFrZSBpdCBsYXJnZXIKKyAgICAgIHRoYW4gYGAwYGAsIGFuZCB0aGVuIHJldHVybiBgYFRydWVgYC4KKworICAgICAgVGhpcyBtZXRob2QgaXMgYSA6cmVmOmBjb3JvdXRpbmUgPGNvcm91dGluZT5gLgorCisgICAuLiBtZXRob2Q6OiBsb2NrZWQoKQorCisgICAgICBSZXR1cm5zIGBgVHJ1ZWBgIGlmIHNlbWFwaG9yZSBjYW4gbm90IGJlIGFjcXVpcmVkIGltbWVkaWF0ZWx5LgorCisgICAuLiBtZXRob2Q6OiByZWxlYXNlKCkKKworICAgICAgUmVsZWFzZSBhIHNlbWFwaG9yZSwgaW5jcmVtZW50aW5nIHRoZSBpbnRlcm5hbCBjb3VudGVyIGJ5IG9uZS4gV2hlbiBpdAorICAgICAgd2FzIHplcm8gb24gZW50cnkgYW5kIGFub3RoZXIgY29yb3V0aW5lIGlzIHdhaXRpbmcgZm9yIGl0IHRvIGJlY29tZQorICAgICAgbGFyZ2VyIHRoYW4gemVybyBhZ2Fpbiwgd2FrZSB1cCB0aGF0IGNvcm91dGluZS4KKworCitCb3VuZGVkU2VtYXBob3JlCiteXl5eXl5eXl5eXl5eXl5eCisKKy4uIGNsYXNzOjogQm91bmRlZFNlbWFwaG9yZSh2YWx1ZT0xLCBcKiwgbG9vcD1Ob25lKQorCisgICBBIGJvdW5kZWQgc2VtYXBob3JlIGltcGxlbWVudGF0aW9uLiBJbmhlcml0IGZyb20gOmNsYXNzOmBTZW1hcGhvcmVgLgorCisgICBUaGlzIHJhaXNlcyA6ZXhjOmBWYWx1ZUVycm9yYCBpbiA6bWV0aDpgflNlbWFwaG9yZS5yZWxlYXNlYCBpZiBpdCB3b3VsZAorICAgaW5jcmVhc2UgdGhlIHZhbHVlIGFib3ZlIHRoZSBpbml0aWFsIHZhbHVlLgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvYXN5bmNpby10YXNrLnJzdCBiL0RvYy9saWJyYXJ5L2FzeW5jaW8tdGFzay5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmVlYTlkMgotLS0gL2Rldi9udWxsCisrKyBiL0RvYy9saWJyYXJ5L2FzeW5jaW8tdGFzay5yc3QKQEAgLTAsMCArMSw3MDIgQEAKKy4uIGN1cnJlbnRtb2R1bGU6OiBhc3luY2lvCisKK1Rhc2tzIGFuZCBjb3JvdXRpbmVzCis9PT09PT09PT09PT09PT09PT09PQorCisuLiBfY29yb3V0aW5lOgorCitDb3JvdXRpbmVzCistLS0tLS0tLS0tCisKK0EgY29yb3V0aW5lIGlzIGEgZ2VuZXJhdG9yIHRoYXQgZm9sbG93cyBjZXJ0YWluIGNvbnZlbnRpb25zLiAgRm9yCitkb2N1bWVudGF0aW9uIHB1cnBvc2VzLCBhbGwgY29yb3V0aW5lcyBzaG91bGQgYmUgZGVjb3JhdGVkIHdpdGgKK2BgQGFzeW5jaW8uY29yb3V0aW5lYGAsIGJ1dCB0aGlzIGNhbm5vdCBiZSBzdHJpY3RseSBlbmZvcmNlZC4KKworQ29yb3V0aW5lcyB1c2UgdGhlIGBgeWllbGQgZnJvbWBgIHN5bnRheCBpbnRyb2R1Y2VkIGluIDpwZXA6YDM4MGAsCitpbnN0ZWFkIG9mIHRoZSBvcmlnaW5hbCBgYHlpZWxkYGAgc3ludGF4LgorCitUaGUgd29yZCAiY29yb3V0aW5lIiwgbGlrZSB0aGUgd29yZCAiZ2VuZXJhdG9yIiwgaXMgdXNlZCBmb3IgdHdvCitkaWZmZXJlbnQgKHRob3VnaCByZWxhdGVkKSBjb25jZXB0czoKKworLSBUaGUgZnVuY3Rpb24gdGhhdCBkZWZpbmVzIGEgY29yb3V0aW5lIChhIGZ1bmN0aW9uIGRlZmluaXRpb24KKyAgZGVjb3JhdGVkIHdpdGggYGBAYXN5bmNpby5jb3JvdXRpbmVgYCkuICBJZiBkaXNhbWJpZ3VhdGlvbiBpcyBuZWVkZWQKKyAgd2Ugd2lsbCBjYWxsIHRoaXMgYSAqY29yb3V0aW5lIGZ1bmN0aW9uKiAoOmZ1bmM6YGlzY29yb3V0aW5lZnVuY3Rpb25gCisgIHJldHVybnMgYGBUcnVlYGApLgorCistIFRoZSBvYmplY3Qgb2J0YWluZWQgYnkgY2FsbGluZyBhIGNvcm91dGluZSBmdW5jdGlvbi4gIFRoaXMgb2JqZWN0CisgIHJlcHJlc2VudHMgYSBjb21wdXRhdGlvbiBvciBhbiBJL08gb3BlcmF0aW9uICh1c3VhbGx5IGEgY29tYmluYXRpb24pCisgIHRoYXQgd2lsbCBjb21wbGV0ZSBldmVudHVhbGx5LiAgSWYgZGlzYW1iaWd1YXRpb24gaXMgbmVlZGVkIHdlIHdpbGwKKyAgY2FsbCBpdCBhICpjb3JvdXRpbmUgb2JqZWN0KiAoOmZ1bmM6YGlzY29yb3V0aW5lYCByZXR1cm5zIGBgVHJ1ZWBgKS4KKworVGhpbmdzIGEgY29yb3V0aW5lIGNhbiBkbzoKKworLSBgYHJlc3VsdCA9IHlpZWxkIGZyb20gZnV0dXJlYGAgLS0gc3VzcGVuZHMgdGhlIGNvcm91dGluZSB1bnRpbCB0aGUKKyAgZnV0dXJlIGlzIGRvbmUsIHRoZW4gcmV0dXJucyB0aGUgZnV0dXJlJ3MgcmVzdWx0LCBvciByYWlzZXMgYW4KKyAgZXhjZXB0aW9uLCB3aGljaCB3aWxsIGJlIHByb3BhZ2F0ZWQuICAoSWYgdGhlIGZ1dHVyZSBpcyBjYW5jZWxsZWQsCisgIGl0IHdpbGwgcmFpc2UgYSBgYENhbmNlbGxlZEVycm9yYGAgZXhjZXB0aW9uLikgIE5vdGUgdGhhdCB0YXNrcyBhcmUKKyAgZnV0dXJlcywgYW5kIGV2ZXJ5dGhpbmcgc2FpZCBhYm91dCBmdXR1cmVzIGFsc28gYXBwbGllcyB0byB0YXNrcy4KKworLSBgYHJlc3VsdCA9IHlpZWxkIGZyb20gY29yb3V0aW5lYGAgLS0gd2FpdCBmb3IgYW5vdGhlciBjb3JvdXRpbmUgdG8KKyAgcHJvZHVjZSBhIHJlc3VsdCAob3IgcmFpc2UgYW4gZXhjZXB0aW9uLCB3aGljaCB3aWxsIGJlIHByb3BhZ2F0ZWQpLgorICBUaGUgYGBjb3JvdXRpbmVgYCBleHByZXNzaW9uIG11c3QgYmUgYSAqY2FsbCogdG8gYW5vdGhlciBjb3JvdXRpbmUuCisKKy0gYGByZXR1cm4gZXhwcmVzc2lvbmBgIC0tIHByb2R1Y2UgYSByZXN1bHQgdG8gdGhlIGNvcm91dGluZSB0aGF0IGlzCisgIHdhaXRpbmcgZm9yIHRoaXMgb25lIHVzaW5nIGBgeWllbGQgZnJvbWBgLgorCistIGBgcmFpc2UgZXhjZXB0aW9uYGAgLS0gcmFpc2UgYW4gZXhjZXB0aW9uIGluIHRoZSBjb3JvdXRpbmUgdGhhdCBpcworICB3YWl0aW5nIGZvciB0aGlzIG9uZSB1c2luZyBgYHlpZWxkIGZyb21gYC4KKworQ2FsbGluZyBhIGNvcm91dGluZSBkb2VzIG5vdCBzdGFydCBpdHMgY29kZSBydW5uaW5nIC0tIGl0IGlzIGp1c3QgYQorZ2VuZXJhdG9yLCBhbmQgdGhlIGNvcm91dGluZSBvYmplY3QgcmV0dXJuZWQgYnkgdGhlIGNhbGwgaXMgcmVhbGx5IGEKK2dlbmVyYXRvciBvYmplY3QsIHdoaWNoIGRvZXNuJ3QgZG8gYW55dGhpbmcgdW50aWwgeW91IGl0ZXJhdGUgb3ZlciBpdC4KK0luIHRoZSBjYXNlIG9mIGEgY29yb3V0aW5lIG9iamVjdCwgdGhlcmUgYXJlIHR3byBiYXNpYyB3YXlzIHRvIHN0YXJ0CitpdCBydW5uaW5nOiBjYWxsIGBgeWllbGQgZnJvbSBjb3JvdXRpbmVgYCBmcm9tIGFub3RoZXIgY29yb3V0aW5lCisoYXNzdW1pbmcgdGhlIG90aGVyIGNvcm91dGluZSBpcyBhbHJlYWR5IHJ1bm5pbmchKSwgb3Igc2NoZWR1bGUgaXRzIGV4ZWN1dGlvbgordXNpbmcgdGhlIDpmdW5jOmBhc3luY2AgZnVuY3Rpb24gb3IgdGhlIDptZXRoOmBCYXNlRXZlbnRMb29wLmNyZWF0ZV90YXNrYAorbWV0aG9kLgorCisKK0Nvcm91dGluZXMgKGFuZCB0YXNrcykgY2FuIG9ubHkgcnVuIHdoZW4gdGhlIGV2ZW50IGxvb3AgaXMgcnVubmluZy4KKworLi4gZGVjb3JhdG9yOjogY29yb3V0aW5lCisKKyAgICBEZWNvcmF0b3IgdG8gbWFyayBjb3JvdXRpbmVzLgorCisgICAgSWYgdGhlIGNvcm91dGluZSBpcyBub3QgeWllbGRlZCBmcm9tIGJlZm9yZSBpdCBpcyBkZXN0cm95ZWQsIGFuIGVycm9yCisgICAgbWVzc2FnZSBpcyBsb2dnZWQuIFNlZSA6cmVmOmBEZXRlY3QgY29yb3V0aW5lcyBuZXZlciBzY2hlZHVsZWQKKyAgICA8YXN5bmNpby1jb3JvdXRpbmUtbm90LXNjaGVkdWxlZD5gLgorCisuLiBub3RlOjoKKworICAgIEluIHRoaXMgZG9jdW1lbnRhdGlvbiwgc29tZSBtZXRob2RzIGFyZSBkb2N1bWVudGVkIGFzIGNvcm91dGluZXMsCisgICAgZXZlbiBpZiB0aGV5IGFyZSBwbGFpbiBQeXRob24gZnVuY3Rpb25zIHJldHVybmluZyBhIDpjbGFzczpgRnV0dXJlYC4KKyAgICBUaGlzIGlzIGludGVudGlvbmFsIHRvIGhhdmUgYSBmcmVlZG9tIG9mIHR3ZWFraW5nIHRoZSBpbXBsZW1lbnRhdGlvbgorICAgIG9mIHRoZXNlIGZ1bmN0aW9ucyBpbiB0aGUgZnV0dXJlLiBJZiBzdWNoIGEgZnVuY3Rpb24gaXMgbmVlZGVkIHRvIGJlCisgICAgdXNlZCBpbiBhIGNhbGxiYWNrLXN0eWxlIGNvZGUsIHdyYXAgaXRzIHJlc3VsdCB3aXRoIDpmdW5jOmBhc3luY2AuCisKKworLi4gX2FzeW5jaW8taGVsbG8td29ybGQtY29yb3V0aW5lOgorCitFeGFtcGxlOiBIZWxsbyBXb3JsZCBjb3JvdXRpbmUKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorCitFeGFtcGxlIG9mIGNvcm91dGluZSBkaXNwbGF5aW5nIGBgIkhlbGxvIFdvcmxkImBgOjoKKworICAgIGltcG9ydCBhc3luY2lvCisKKyAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICBkZWYgaGVsbG9fd29ybGQoKToKKyAgICAgICAgcHJpbnQoIkhlbGxvIFdvcmxkISIpCisKKyAgICBsb29wID0gYXN5bmNpby5nZXRfZXZlbnRfbG9vcCgpCisgICAgIyBCbG9ja2luZyBjYWxsIHdoaWNoIHJldHVybnMgd2hlbiB0aGUgaGVsbG9fd29ybGQoKSBjb3JvdXRpbmUgaXMgZG9uZQorICAgIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGhlbGxvX3dvcmxkKCkpCisgICAgbG9vcC5jbG9zZSgpCisKKy4uIHNlZWFsc286OgorCisgICBUaGUgOnJlZjpgSGVsbG8gV29ybGQgd2l0aCBjYWxsX3Nvb24oKSA8YXN5bmNpby1oZWxsby13b3JsZC1jYWxsYmFjaz5gCisgICBleGFtcGxlIHVzZXMgdGhlIDptZXRoOmBCYXNlRXZlbnRMb29wLmNhbGxfc29vbmAgbWV0aG9kIHRvIHNjaGVkdWxlIGEKKyAgIGNhbGxiYWNrLgorCisKKy4uIF9hc3luY2lvLWRhdGUtY29yb3V0aW5lOgorCitFeGFtcGxlOiBDb3JvdXRpbmUgZGlzcGxheWluZyB0aGUgY3VycmVudCBkYXRlCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKK0V4YW1wbGUgb2YgY29yb3V0aW5lIGRpc3BsYXlpbmcgdGhlIGN1cnJlbnQgZGF0ZSBldmVyeSBzZWNvbmQgZHVyaW5nIDUgc2Vjb25kcwordXNpbmcgdGhlIDptZXRoOmBzbGVlcGAgZnVuY3Rpb246OgorCisgICAgaW1wb3J0IGFzeW5jaW8KKyAgICBpbXBvcnQgZGF0ZXRpbWUKKworICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgIGRlZiBkaXNwbGF5X2RhdGUobG9vcCk6CisgICAgICAgIGVuZF90aW1lID0gbG9vcC50aW1lKCkgKyA1LjAKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIHByaW50KGRhdGV0aW1lLmRhdGV0aW1lLm5vdygpKQorICAgICAgICAgICAgaWYgKGxvb3AudGltZSgpICsgMS4wKSA+PSBlbmRfdGltZToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgeWllbGQgZnJvbSBhc3luY2lvLnNsZWVwKDEpCisKKyAgICBsb29wID0gYXN5bmNpby5nZXRfZXZlbnRfbG9vcCgpCisgICAgIyBCbG9ja2luZyBjYWxsIHdoaWNoIHJldHVybnMgd2hlbiB0aGUgZGlzcGxheV9kYXRlKCkgY29yb3V0aW5lIGlzIGRvbmUKKyAgICBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZShkaXNwbGF5X2RhdGUobG9vcCkpCisgICAgbG9vcC5jbG9zZSgpCisKKy4uIHNlZWFsc286OgorCisgICBUaGUgOnJlZjpgZGlzcGxheSB0aGUgY3VycmVudCBkYXRlIHdpdGggY2FsbF9sYXRlcigpCisgICA8YXN5bmNpby1kYXRlLWNhbGxiYWNrPmAgZXhhbXBsZSB1c2VzIGEgY2FsbGJhY2sgd2l0aCB0aGUKKyAgIDptZXRoOmBCYXNlRXZlbnRMb29wLmNhbGxfbGF0ZXJgIG1ldGhvZC4KKworCitFeGFtcGxlOiBDaGFpbiBjb3JvdXRpbmVzCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKK0V4YW1wbGUgY2hhaW5pbmcgY29yb3V0aW5lczo6CisKKyAgICBpbXBvcnQgYXN5bmNpbworCisgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgZGVmIGNvbXB1dGUoeCwgeSk6CisgICAgICAgIHByaW50KCJDb21wdXRlICVzICsgJXMgLi4uIiAlICh4LCB5KSkKKyAgICAgICAgeWllbGQgZnJvbSBhc3luY2lvLnNsZWVwKDEuMCkKKyAgICAgICAgcmV0dXJuIHggKyB5CisKKyAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICBkZWYgcHJpbnRfc3VtKHgsIHkpOgorICAgICAgICByZXN1bHQgPSB5aWVsZCBmcm9tIGNvbXB1dGUoeCwgeSkKKyAgICAgICAgcHJpbnQoIiVzICsgJXMgPSAlcyIgJSAoeCwgeSwgcmVzdWx0KSkKKworICAgIGxvb3AgPSBhc3luY2lvLmdldF9ldmVudF9sb29wKCkKKyAgICBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcmludF9zdW0oMSwgMikpCisgICAgbG9vcC5jbG9zZSgpCisKK2BgY29tcHV0ZSgpYGAgaXMgY2hhaW5lZCB0byBgYHByaW50X3N1bSgpYGA6IGBgcHJpbnRfc3VtKClgYCBjb3JvdXRpbmUgd2FpdHMKK3VudGlsIGBgY29tcHV0ZSgpYGAgaXMgY29tcGxldGVkIGJlZm9yZSByZXR1cm5pbmcgaXRzIHJlc3VsdC4KKworU2VxdWVuY2UgZGlhZ3JhbSBvZiB0aGUgZXhhbXBsZToKKworLi4gaW1hZ2U6OiB0dWxpcF9jb3JvLnBuZworICAgOmFsaWduOiBjZW50ZXIKKworVGhlICJUYXNrIiBpcyBjcmVhdGVkIGJ5IHRoZSA6bWV0aDpgQmFzZUV2ZW50TG9vcC5ydW5fdW50aWxfY29tcGxldGVgIG1ldGhvZAord2hlbiBpdCBnZXRzIGEgY29yb3V0aW5lIG9iamVjdCBpbnN0ZWFkIG9mIGEgdGFzay4KKworVGhlIGRpYWdyYW0gc2hvd3MgdGhlIGNvbnRyb2wgZmxvdywgaXQgZG9lcyBub3QgZGVzY3JpYmUgZXhhY3RseSBob3cgdGhpbmdzCit3b3JrIGludGVybmFsbHkuIEZvciBleGFtcGxlLCB0aGUgc2xlZXAgY29yb3V0aW5lIGNyZWF0ZXMgYW4gaW50ZXJuYWwgZnV0dXJlCit3aGljaCB1c2VzIDptZXRoOmBCYXNlRXZlbnRMb29wLmNhbGxfbGF0ZXJgIHRvIHdha2UgdXAgdGhlIHRhc2sgaW4gMSBzZWNvbmQuCisKKworSW52YWxpZFN0YXRlRXJyb3IKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy4uIGV4Y2VwdGlvbjo6IEludmFsaWRTdGF0ZUVycm9yCisKKyAgIFRoZSBvcGVyYXRpb24gaXMgbm90IGFsbG93ZWQgaW4gdGhpcyBzdGF0ZS4KKworCitUaW1lb3V0RXJyb3IKKy0tLS0tLS0tLS0tLQorCisuLiBleGNlcHRpb246OiBUaW1lb3V0RXJyb3IKKworICAgVGhlIG9wZXJhdGlvbiBleGNlZWRlZCB0aGUgZ2l2ZW4gZGVhZGxpbmUuCisKKy4uIG5vdGU6OgorCisgICBUaGlzIGV4Y2VwdGlvbiBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgYnVpbHRpbiA6ZXhjOmBUaW1lb3V0RXJyb3JgIGV4Y2VwdGlvbiEKKworCitGdXR1cmUKKy0tLS0tLQorCisuLiBjbGFzczo6IEZ1dHVyZShcKiwgbG9vcD1Ob25lKQorCisgICBUaGlzIGNsYXNzIGlzICphbG1vc3QqIGNvbXBhdGlibGUgd2l0aCA6Y2xhc3M6YGNvbmN1cnJlbnQuZnV0dXJlcy5GdXR1cmVgLgorCisgICBEaWZmZXJlbmNlczoKKworICAgLSA6bWV0aDpgcmVzdWx0YCBhbmQgOm1ldGg6YGV4Y2VwdGlvbmAgZG8gbm90IHRha2UgYSB0aW1lb3V0IGFyZ3VtZW50IGFuZAorICAgICByYWlzZSBhbiBleGNlcHRpb24gd2hlbiB0aGUgZnV0dXJlIGlzbid0IGRvbmUgeWV0LgorCisgICAtIENhbGxiYWNrcyByZWdpc3RlcmVkIHdpdGggOm1ldGg6YGFkZF9kb25lX2NhbGxiYWNrYCBhcmUgYWx3YXlzIGNhbGxlZAorICAgICB2aWEgdGhlIGV2ZW50IGxvb3AncyA6bWV0aDpgfkJhc2VFdmVudExvb3AuY2FsbF9zb29uX3RocmVhZHNhZmVgLgorCisgICAtIFRoaXMgY2xhc3MgaXMgbm90IGNvbXBhdGlibGUgd2l0aCB0aGUgOmZ1bmM6YH5jb25jdXJyZW50LmZ1dHVyZXMud2FpdGAgYW5kCisgICAgIDpmdW5jOmB+Y29uY3VycmVudC5mdXR1cmVzLmFzX2NvbXBsZXRlZGAgZnVuY3Rpb25zIGluIHRoZQorICAgICA6bW9kOmBjb25jdXJyZW50LmZ1dHVyZXNgIHBhY2thZ2UuCisKKyAgIFRoaXMgY2xhc3MgaXMgOnJlZjpgbm90IHRocmVhZCBzYWZlIDxhc3luY2lvLW11bHRpdGhyZWFkaW5nPmAuCisKKyAgIC4uIG1ldGhvZDo6IGNhbmNlbCgpCisKKyAgICAgIENhbmNlbCB0aGUgZnV0dXJlIGFuZCBzY2hlZHVsZSBjYWxsYmFja3MuCisKKyAgICAgIElmIHRoZSBmdXR1cmUgaXMgYWxyZWFkeSBkb25lIG9yIGNhbmNlbGxlZCwgcmV0dXJuIGBgRmFsc2VgYC4gT3RoZXJ3aXNlLAorICAgICAgY2hhbmdlIHRoZSBmdXR1cmUncyBzdGF0ZSB0byBjYW5jZWxsZWQsIHNjaGVkdWxlIHRoZSBjYWxsYmFja3MgYW5kIHJldHVybgorICAgICAgYGBUcnVlYGAuCisKKyAgIC4uIG1ldGhvZDo6IGNhbmNlbGxlZCgpCisKKyAgICAgIFJldHVybiBgYFRydWVgYCBpZiB0aGUgZnV0dXJlIHdhcyBjYW5jZWxsZWQuCisKKyAgIC4uIG1ldGhvZDo6IGRvbmUoKQorCisgICAgICBSZXR1cm4gVHJ1ZSBpZiB0aGUgZnV0dXJlIGlzIGRvbmUuCisKKyAgICAgIERvbmUgbWVhbnMgZWl0aGVyIHRoYXQgYSByZXN1bHQgLyBleGNlcHRpb24gYXJlIGF2YWlsYWJsZSwgb3IgdGhhdCB0aGUKKyAgICAgIGZ1dHVyZSB3YXMgY2FuY2VsbGVkLgorCisgICAuLiBtZXRob2Q6OiByZXN1bHQoKQorCisgICAgICBSZXR1cm4gdGhlIHJlc3VsdCB0aGlzIGZ1dHVyZSByZXByZXNlbnRzLgorCisgICAgICBJZiB0aGUgZnV0dXJlIGhhcyBiZWVuIGNhbmNlbGxlZCwgcmFpc2VzIDpleGM6YENhbmNlbGxlZEVycm9yYC4gSWYgdGhlCisgICAgICBmdXR1cmUncyByZXN1bHQgaXNuJ3QgeWV0IGF2YWlsYWJsZSwgcmFpc2VzIDpleGM6YEludmFsaWRTdGF0ZUVycm9yYC4gSWYKKyAgICAgIHRoZSBmdXR1cmUgaXMgZG9uZSBhbmQgaGFzIGFuIGV4Y2VwdGlvbiBzZXQsIHRoaXMgZXhjZXB0aW9uIGlzIHJhaXNlZC4KKworICAgLi4gbWV0aG9kOjogZXhjZXB0aW9uKCkKKworICAgICAgUmV0dXJuIHRoZSBleGNlcHRpb24gdGhhdCB3YXMgc2V0IG9uIHRoaXMgZnV0dXJlLgorCisgICAgICBUaGUgZXhjZXB0aW9uIChvciBgYE5vbmVgYCBpZiBubyBleGNlcHRpb24gd2FzIHNldCkgaXMgcmV0dXJuZWQgb25seSBpZgorICAgICAgdGhlIGZ1dHVyZSBpcyBkb25lLiBJZiB0aGUgZnV0dXJlIGhhcyBiZWVuIGNhbmNlbGxlZCwgcmFpc2VzCisgICAgICA6ZXhjOmBDYW5jZWxsZWRFcnJvcmAuIElmIHRoZSBmdXR1cmUgaXNuJ3QgZG9uZSB5ZXQsIHJhaXNlcworICAgICAgOmV4YzpgSW52YWxpZFN0YXRlRXJyb3JgLgorCisgICAuLiBtZXRob2Q6OiBhZGRfZG9uZV9jYWxsYmFjayhmbikKKworICAgICAgQWRkIGEgY2FsbGJhY2sgdG8gYmUgcnVuIHdoZW4gdGhlIGZ1dHVyZSBiZWNvbWVzIGRvbmUuCisKKyAgICAgIFRoZSBjYWxsYmFjayBpcyBjYWxsZWQgd2l0aCBhIHNpbmdsZSBhcmd1bWVudCAtIHRoZSBmdXR1cmUgb2JqZWN0LiBJZiB0aGUKKyAgICAgIGZ1dHVyZSBpcyBhbHJlYWR5IGRvbmUgd2hlbiB0aGlzIGlzIGNhbGxlZCwgdGhlIGNhbGxiYWNrIGlzIHNjaGVkdWxlZAorICAgICAgd2l0aCA6bWV0aDpgfkJhc2VFdmVudExvb3AuY2FsbF9zb29uYC4KKworICAgICAgOnJlZjpgVXNlIGZ1bmN0b29scy5wYXJ0aWFsIHRvIHBhc3MgcGFyYW1ldGVycyB0byB0aGUgY2FsbGJhY2sKKyAgICAgIDxhc3luY2lvLXBhc3Mta2V5d29yZHM+YC4gRm9yIGV4YW1wbGUsCisgICAgICBgYGZ1dC5hZGRfZG9uZV9jYWxsYmFjayhmdW5jdG9vbHMucGFydGlhbChwcmludCwgIkZ1dHVyZToiLAorICAgICAgZmx1c2g9VHJ1ZSkpYGAgd2lsbCBjYWxsIGBgcHJpbnQoIkZ1dHVyZToiLCBmdXQsIGZsdXNoPVRydWUpYGAuCisKKyAgIC4uIG1ldGhvZDo6IHJlbW92ZV9kb25lX2NhbGxiYWNrKGZuKQorCisgICAgICBSZW1vdmUgYWxsIGluc3RhbmNlcyBvZiBhIGNhbGxiYWNrIGZyb20gdGhlICJjYWxsIHdoZW4gZG9uZSIgbGlzdC4KKworICAgICAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGNhbGxiYWNrcyByZW1vdmVkLgorCisgICAuLiBtZXRob2Q6OiBzZXRfcmVzdWx0KHJlc3VsdCkKKworICAgICAgTWFyayB0aGUgZnV0dXJlIGRvbmUgYW5kIHNldCBpdHMgcmVzdWx0LgorCisgICAgICBJZiB0aGUgZnV0dXJlIGlzIGFscmVhZHkgZG9uZSB3aGVuIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCwgcmFpc2VzCisgICAgICA6ZXhjOmBJbnZhbGlkU3RhdGVFcnJvcmAuCisKKyAgIC4uIG1ldGhvZDo6IHNldF9leGNlcHRpb24oZXhjZXB0aW9uKQorCisgICAgICBNYXJrIHRoZSBmdXR1cmUgZG9uZSBhbmQgc2V0IGFuIGV4Y2VwdGlvbi4KKworICAgICAgSWYgdGhlIGZ1dHVyZSBpcyBhbHJlYWR5IGRvbmUgd2hlbiB0aGlzIG1ldGhvZCBpcyBjYWxsZWQsIHJhaXNlcworICAgICAgOmV4YzpgSW52YWxpZFN0YXRlRXJyb3JgLgorCisKK0V4YW1wbGU6IEZ1dHVyZSB3aXRoIHJ1bl91bnRpbF9jb21wbGV0ZSgpCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorCitFeGFtcGxlIGNvbWJpbmluZyBhIDpjbGFzczpgRnV0dXJlYCBhbmQgYSA6cmVmOmBjb3JvdXRpbmUgZnVuY3Rpb24KKzxjb3JvdXRpbmU+YDo6CisKKyAgICBpbXBvcnQgYXN5bmNpbworCisgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgZGVmIHNsb3dfb3BlcmF0aW9uKGZ1dHVyZSk6CisgICAgICAgIHlpZWxkIGZyb20gYXN5bmNpby5zbGVlcCgxKQorICAgICAgICBmdXR1cmUuc2V0X3Jlc3VsdCgnRnV0dXJlIGlzIGRvbmUhJykKKworICAgIGxvb3AgPSBhc3luY2lvLmdldF9ldmVudF9sb29wKCkKKyAgICBmdXR1cmUgPSBhc3luY2lvLkZ1dHVyZSgpCisgICAgYXN5bmNpby5lbnN1cmVfZnV0dXJlKHNsb3dfb3BlcmF0aW9uKGZ1dHVyZSkpCisgICAgbG9vcC5ydW5fdW50aWxfY29tcGxldGUoZnV0dXJlKQorICAgIHByaW50KGZ1dHVyZS5yZXN1bHQoKSkKKyAgICBsb29wLmNsb3NlKCkKKworVGhlIGNvcm91dGluZSBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgdGhlIGNvbXB1dGF0aW9uICh3aGljaCB0YWtlcyAxIHNlY29uZCkKK2FuZCBpdCBzdG9yZXMgdGhlIHJlc3VsdCBpbnRvIHRoZSBmdXR1cmUuIFRoZQorOm1ldGg6YH5CYXNlRXZlbnRMb29wLnJ1bl91bnRpbF9jb21wbGV0ZWAgbWV0aG9kIHdhaXRzIGZvciB0aGUgY29tcGxldGlvbiBvZgordGhlIGZ1dHVyZS4KKworLi4gbm90ZTo6CisgICBUaGUgOm1ldGg6YH5CYXNlRXZlbnRMb29wLnJ1bl91bnRpbF9jb21wbGV0ZWAgbWV0aG9kIHVzZXMgaW50ZXJuYWxseSB0aGUKKyAgIDptZXRoOmB+RnV0dXJlLmFkZF9kb25lX2NhbGxiYWNrYCBtZXRob2QgdG8gYmUgbm90aWZpZWQgd2hlbiB0aGUgZnV0dXJlIGlzCisgICBkb25lLgorCisKK0V4YW1wbGU6IEZ1dHVyZSB3aXRoIHJ1bl9mb3JldmVyKCkKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworVGhlIHByZXZpb3VzIGV4YW1wbGUgY2FuIGJlIHdyaXR0ZW4gZGlmZmVyZW50bHkgdXNpbmcgdGhlCis6bWV0aDpgRnV0dXJlLmFkZF9kb25lX2NhbGxiYWNrYCBtZXRob2QgdG8gZGVzY3JpYmUgZXhwbGljaXRseSB0aGUgY29udHJvbAorZmxvdzo6CisKKyAgICBpbXBvcnQgYXN5bmNpbworCisgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgZGVmIHNsb3dfb3BlcmF0aW9uKGZ1dHVyZSk6CisgICAgICAgIHlpZWxkIGZyb20gYXN5bmNpby5zbGVlcCgxKQorICAgICAgICBmdXR1cmUuc2V0X3Jlc3VsdCgnRnV0dXJlIGlzIGRvbmUhJykKKworICAgIGRlZiBnb3RfcmVzdWx0KGZ1dHVyZSk6CisgICAgICAgIHByaW50KGZ1dHVyZS5yZXN1bHQoKSkKKyAgICAgICAgbG9vcC5zdG9wKCkKKworICAgIGxvb3AgPSBhc3luY2lvLmdldF9ldmVudF9sb29wKCkKKyAgICBmdXR1cmUgPSBhc3luY2lvLkZ1dHVyZSgpCisgICAgYXN5bmNpby5lbnN1cmVfZnV0dXJlKHNsb3dfb3BlcmF0aW9uKGZ1dHVyZSkpCisgICAgZnV0dXJlLmFkZF9kb25lX2NhbGxiYWNrKGdvdF9yZXN1bHQpCisgICAgdHJ5OgorICAgICAgICBsb29wLnJ1bl9mb3JldmVyKCkKKyAgICBmaW5hbGx5OgorICAgICAgICBsb29wLmNsb3NlKCkKKworSW4gdGhpcyBleGFtcGxlLCB0aGUgZnV0dXJlIGlzIHVzZWQgdG8gbGluayBgYHNsb3dfb3BlcmF0aW9uKClgYCB0bworYGBnb3RfcmVzdWx0KClgYDogd2hlbiBgYHNsb3dfb3BlcmF0aW9uKClgYCBpcyBkb25lLCBgYGdvdF9yZXN1bHQoKWBgIGlzIGNhbGxlZAord2l0aCB0aGUgcmVzdWx0LgorCisKK1Rhc2sKKy0tLS0KKworLi4gY2xhc3M6OiBUYXNrKGNvcm8sIFwqLCBsb29wPU5vbmUpCisKKyAgIFNjaGVkdWxlIHRoZSBleGVjdXRpb24gb2YgYSA6cmVmOmBjb3JvdXRpbmUgPGNvcm91dGluZT5gOiB3cmFwIGl0IGluIGEKKyAgIGZ1dHVyZS4gQSB0YXNrIGlzIGEgc3ViY2xhc3Mgb2YgOmNsYXNzOmBGdXR1cmVgLgorCisgICBBIHRhc2sgaXMgcmVzcG9uc2libGUgZm9yIGV4ZWN1dGluZyBhIGNvcm91dGluZSBvYmplY3QgaW4gYW4gZXZlbnQgbG9vcC4gIElmCisgICB0aGUgd3JhcHBlZCBjb3JvdXRpbmUgeWllbGRzIGZyb20gYSBmdXR1cmUsIHRoZSB0YXNrIHN1c3BlbmRzIHRoZSBleGVjdXRpb24KKyAgIG9mIHRoZSB3cmFwcGVkIGNvcm91dGluZSBhbmQgd2FpdHMgZm9yIHRoZSBjb21wbGV0aXRpb24gb2YgdGhlIGZ1dHVyZS4gV2hlbgorICAgdGhlIGZ1dHVyZSBpcyBkb25lLCB0aGUgZXhlY3V0aW9uIG9mIHRoZSB3cmFwcGVkIGNvcm91dGluZSByZXN0YXJ0cyB3aXRoIHRoZQorICAgcmVzdWx0IG9yIHRoZSBleGNlcHRpb24gb2YgdGhlIGZ1dHVyZS4KKworICAgRXZlbnQgbG9vcHMgdXNlIGNvb3BlcmF0aXZlIHNjaGVkdWxpbmc6IGFuIGV2ZW50IGxvb3Agb25seSBydW5zIG9uZSB0YXNrIGF0CisgICBhIHRpbWUuIE90aGVyIHRhc2tzIG1heSBydW4gaW4gcGFyYWxsZWwgaWYgb3RoZXIgZXZlbnQgbG9vcHMgYXJlCisgICBydW5uaW5nIGluIGRpZmZlcmVudCB0aHJlYWRzLiBXaGlsZSBhIHRhc2sgd2FpdHMgZm9yIHRoZSBjb21wbGV0aW9uIG9mIGEKKyAgIGZ1dHVyZSwgdGhlIGV2ZW50IGxvb3AgZXhlY3V0ZXMgYSBuZXcgdGFzay4KKworICAgVGhlIGNhbmNlbGxhdGlvbiBvZiBhIHRhc2sgaXMgZGlmZmVyZW50IGZyb20gdGhlIGNhbmNlbGF0aW9uIG9mIGEgZnV0dXJlLiBDYWxsaW5nCisgICA6bWV0aDpgY2FuY2VsYCB3aWxsIHRocm93IGEgOmV4YzpgfmNvbmN1cnJlbnQuZnV0dXJlcy5DYW5jZWxsZWRFcnJvcmAgdG8gdGhlCisgICB3cmFwcGVkIGNvcm91dGluZS4gOm1ldGg6YH5GdXR1cmUuY2FuY2VsbGVkYCBvbmx5IHJldHVybnMgYGBUcnVlYGAgaWYgdGhlCisgICB3cmFwcGVkIGNvcm91dGluZSBkaWQgbm90IGNhdGNoIHRoZQorICAgOmV4YzpgfmNvbmN1cnJlbnQuZnV0dXJlcy5DYW5jZWxsZWRFcnJvcmAgZXhjZXB0aW9uLCBvciByYWlzZWQgYQorICAgOmV4YzpgfmNvbmN1cnJlbnQuZnV0dXJlcy5DYW5jZWxsZWRFcnJvcmAgZXhjZXB0aW9uLgorCisgICBJZiBhIHBlbmRpbmcgdGFzayBpcyBkZXN0cm95ZWQsIHRoZSBleGVjdXRpb24gb2YgaXRzIHdyYXBwZWQgOnJlZjpgY29yb3V0aW5lCisgICA8Y29yb3V0aW5lPmAgZGlkIG5vdCBjb21wbGV0ZS4gSXQgaXMgcHJvYmFibHkgYSBidWcgYW5kIGEgd2FybmluZyBpcworICAgbG9nZ2VkOiBzZWUgOnJlZjpgUGVuZGluZyB0YXNrIGRlc3Ryb3llZCA8YXN5bmNpby1wZW5kaW5nLXRhc2stZGVzdHJveWVkPmAuCisKKyAgIERvbid0IGRpcmVjdGx5IGNyZWF0ZSA6Y2xhc3M6YFRhc2tgIGluc3RhbmNlczogdXNlIHRoZSA6ZnVuYzpgYXN5bmNgCisgICBmdW5jdGlvbiBvciB0aGUgOm1ldGg6YEJhc2VFdmVudExvb3AuY3JlYXRlX3Rhc2tgIG1ldGhvZC4KKworICAgVGhpcyBjbGFzcyBpcyA6cmVmOmBub3QgdGhyZWFkIHNhZmUgPGFzeW5jaW8tbXVsdGl0aHJlYWRpbmc+YC4KKworICAgLi4gY2xhc3NtZXRob2Q6OiBhbGxfdGFza3MobG9vcD1Ob25lKQorCisgICAgICBSZXR1cm4gYSBzZXQgb2YgYWxsIHRhc2tzIGZvciBhbiBldmVudCBsb29wLgorCisgICAgICBCeSBkZWZhdWx0IGFsbCB0YXNrcyBmb3IgdGhlIGN1cnJlbnQgZXZlbnQgbG9vcCBhcmUgcmV0dXJuZWQuCisKKyAgIC4uIGNsYXNzbWV0aG9kOjogY3VycmVudF90YXNrKGxvb3A9Tm9uZSkKKworICAgICAgUmV0dXJuIHRoZSBjdXJyZW50bHkgcnVubmluZyB0YXNrIGluIGFuIGV2ZW50IGxvb3Agb3IgYGBOb25lYGAuCisKKyAgICAgIEJ5IGRlZmF1bHQgdGhlIGN1cnJlbnQgdGFzayBmb3IgdGhlIGN1cnJlbnQgZXZlbnQgbG9vcCBpcyByZXR1cm5lZC4KKworICAgICAgYGBOb25lYGAgaXMgcmV0dXJuZWQgd2hlbiBjYWxsZWQgbm90IGluIHRoZSBjb250ZXh0IG9mIGEgOmNsYXNzOmBUYXNrYC4KKworICAgLi4gbWV0aG9kOjogY2FuY2VsKCkKKworICAgICAgUmVxdWVzdCB0aGF0IHRoaXMgdGFzayBjYW5jZWwgaXRzZWxmLgorCisgICAgICBUaGlzIGFycmFuZ2VzIGZvciBhIDpleGM6YH5jb25jdXJyZW50LmZ1dHVyZXMuQ2FuY2VsbGVkRXJyb3JgIHRvIGJlCisgICAgICB0aHJvd24gaW50byB0aGUgd3JhcHBlZCBjb3JvdXRpbmUgb24gdGhlIG5leHQgY3ljbGUgdGhyb3VnaCB0aGUgZXZlbnQKKyAgICAgIGxvb3AuIFRoZSBjb3JvdXRpbmUgdGhlbiBoYXMgYSBjaGFuY2UgdG8gY2xlYW4gdXAgb3IgZXZlbiBkZW55IHRoZQorICAgICAgcmVxdWVzdCB1c2luZyB0cnkvZXhjZXB0L2ZpbmFsbHkuCisKKyAgICAgIFVubGlrZSA6bWV0aDpgRnV0dXJlLmNhbmNlbGAsIHRoaXMgZG9lcyBub3QgZ3VhcmFudGVlIHRoYXQgdGhlIHRhc2sKKyAgICAgIHdpbGwgYmUgY2FuY2VsbGVkOiB0aGUgZXhjZXB0aW9uIG1pZ2h0IGJlIGNhdWdodCBhbmQgYWN0ZWQgdXBvbiwgZGVsYXlpbmcKKyAgICAgIGNhbmNlbGxhdGlvbiBvZiB0aGUgdGFzayBvciBwcmV2ZW50aW5nIGNhbmNlbGxhdGlvbiBjb21wbGV0ZWx5LiBUaGUgdGFzaworICAgICAgbWF5IGFsc28gcmV0dXJuIGEgdmFsdWUgb3IgcmFpc2UgYSBkaWZmZXJlbnQgZXhjZXB0aW9uLgorCisgICAgICBJbW1lZGlhdGVseSBhZnRlciB0aGlzIG1ldGhvZCBpcyBjYWxsZWQsIDptZXRoOmB+RnV0dXJlLmNhbmNlbGxlZGAgd2lsbAorICAgICAgbm90IHJldHVybiBgYFRydWVgYCAodW5sZXNzIHRoZSB0YXNrIHdhcyBhbHJlYWR5IGNhbmNlbGxlZCkuIEEgdGFzayB3aWxsCisgICAgICBiZSBtYXJrZWQgYXMgY2FuY2VsbGVkIHdoZW4gdGhlIHdyYXBwZWQgY29yb3V0aW5lIHRlcm1pbmF0ZXMgd2l0aCBhCisgICAgICA6ZXhjOmB+Y29uY3VycmVudC5mdXR1cmVzLkNhbmNlbGxlZEVycm9yYCBleGNlcHRpb24gKGV2ZW4gaWYKKyAgICAgIDptZXRoOmBjYW5jZWxgIHdhcyBub3QgY2FsbGVkKS4KKworICAgLi4gbWV0aG9kOjogZ2V0X3N0YWNrKFwqLCBsaW1pdD1Ob25lKQorCisgICAgICBSZXR1cm4gdGhlIGxpc3Qgb2Ygc3RhY2sgZnJhbWVzIGZvciB0aGlzIHRhc2sncyBjb3JvdXRpbmUuCisKKyAgICAgIElmIHRoZSBjb3JvdXRpbmUgaXMgbm90IGRvbmUsIHRoaXMgcmV0dXJucyB0aGUgc3RhY2sgd2hlcmUgaXQgaXMgc3VzcGVuZGVkLgorICAgICAgSWYgdGhlIGNvcm91dGluZSBoYXMgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBvciB3YXMgY2FuY2VsbGVkLCB0aGlzCisgICAgICByZXR1cm5zIGFuIGVtcHR5IGxpc3QuICBJZiB0aGUgY29yb3V0aW5lIHdhcyB0ZXJtaW5hdGVkIGJ5IGFuIGV4Y2VwdGlvbiwKKyAgICAgIHRoaXMgcmV0dXJucyB0aGUgbGlzdCBvZiB0cmFjZWJhY2sgZnJhbWVzLgorCisgICAgICBUaGUgZnJhbWVzIGFyZSBhbHdheXMgb3JkZXJlZCBmcm9tIG9sZGVzdCB0byBuZXdlc3QuCisKKyAgICAgIFRoZSBvcHRpb25hbCBsaW1pdCBnaXZlcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgZnJhbWVzIHRvIHJldHVybjsgYnkKKyAgICAgIGRlZmF1bHQgYWxsIGF2YWlsYWJsZSBmcmFtZXMgYXJlIHJldHVybmVkLiAgSXRzIG1lYW5pbmcgZGlmZmVycyBkZXBlbmRpbmcKKyAgICAgIG9uIHdoZXRoZXIgYSBzdGFjayBvciBhIHRyYWNlYmFjayBpcyByZXR1cm5lZDogdGhlIG5ld2VzdCBmcmFtZXMgb2YgYQorICAgICAgc3RhY2sgYXJlIHJldHVybmVkLCBidXQgdGhlIG9sZGVzdCBmcmFtZXMgb2YgYSB0cmFjZWJhY2sgYXJlIHJldHVybmVkLgorICAgICAgKFRoaXMgbWF0Y2hlcyB0aGUgYmVoYXZpb3Igb2YgdGhlIHRyYWNlYmFjayBtb2R1bGUuKQorCisgICAgICBGb3IgcmVhc29ucyBiZXlvbmQgb3VyIGNvbnRyb2wsIG9ubHkgb25lIHN0YWNrIGZyYW1lIGlzIHJldHVybmVkIGZvciBhCisgICAgICBzdXNwZW5kZWQgY29yb3V0aW5lLgorCisgICAuLiBtZXRob2Q6OiBwcmludF9zdGFjayhcKiwgbGltaXQ9Tm9uZSwgZmlsZT1Ob25lKQorCisgICAgICBQcmludCB0aGUgc3RhY2sgb3IgdHJhY2ViYWNrIGZvciB0aGlzIHRhc2sncyBjb3JvdXRpbmUuCisKKyAgICAgIFRoaXMgcHJvZHVjZXMgb3V0cHV0IHNpbWlsYXIgdG8gdGhhdCBvZiB0aGUgdHJhY2ViYWNrIG1vZHVsZSwgZm9yIHRoZQorICAgICAgZnJhbWVzIHJldHJpZXZlZCBieSBnZXRfc3RhY2soKS4gIFRoZSBsaW1pdCBhcmd1bWVudCBpcyBwYXNzZWQgdG8KKyAgICAgIGdldF9zdGFjaygpLiAgVGhlIGZpbGUgYXJndW1lbnQgaXMgYW4gSS9PIHN0cmVhbSB0byB3aGljaCB0aGUgb3V0cHV0CisgICAgICBpcyB3cml0dGVuOyBieSBkZWZhdWx0IG91dHB1dCBpcyB3cml0dGVuIHRvIHN5cy5zdGRlcnIuCisKKworRXhhbXBsZTogUGFyYWxsZWwgZXhlY3V0aW9uIG9mIHRhc2tzCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworRXhhbXBsZSBleGVjdXRpbmcgMyB0YXNrcyAoQSwgQiwgQykgaW4gcGFyYWxsZWw6OgorCisgICAgaW1wb3J0IGFzeW5jaW8KKworICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgIGRlZiBmYWN0b3JpYWwobmFtZSwgbnVtYmVyKToKKyAgICAgICAgZiA9IDEKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMiwgbnVtYmVyKzEpOgorICAgICAgICAgICAgcHJpbnQoIlRhc2sgJXM6IENvbXB1dGUgZmFjdG9yaWFsKCVzKS4uLiIgJSAobmFtZSwgaSkpCisgICAgICAgICAgICB5aWVsZCBmcm9tIGFzeW5jaW8uc2xlZXAoMSkKKyAgICAgICAgICAgIGYgKj0gaQorICAgICAgICBwcmludCgiVGFzayAlczogZmFjdG9yaWFsKCVzKSA9ICVzIiAlIChuYW1lLCBudW1iZXIsIGYpKQorCisgICAgbG9vcCA9IGFzeW5jaW8uZ2V0X2V2ZW50X2xvb3AoKQorICAgIHRhc2tzID0gWworICAgICAgICBhc3luY2lvLmVuc3VyZV9mdXR1cmUoZmFjdG9yaWFsKCJBIiwgMikpLAorICAgICAgICBhc3luY2lvLmVuc3VyZV9mdXR1cmUoZmFjdG9yaWFsKCJCIiwgMykpLAorICAgICAgICBhc3luY2lvLmVuc3VyZV9mdXR1cmUoZmFjdG9yaWFsKCJDIiwgNCkpXQorICAgIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGFzeW5jaW8ud2FpdCh0YXNrcykpCisgICAgbG9vcC5jbG9zZSgpCisKK091dHB1dDo6CisKKyAgICBUYXNrIEE6IENvbXB1dGUgZmFjdG9yaWFsKDIpLi4uCisgICAgVGFzayBCOiBDb21wdXRlIGZhY3RvcmlhbCgyKS4uLgorICAgIFRhc2sgQzogQ29tcHV0ZSBmYWN0b3JpYWwoMikuLi4KKyAgICBUYXNrIEE6IGZhY3RvcmlhbCgyKSA9IDIKKyAgICBUYXNrIEI6IENvbXB1dGUgZmFjdG9yaWFsKDMpLi4uCisgICAgVGFzayBDOiBDb21wdXRlIGZhY3RvcmlhbCgzKS4uLgorICAgIFRhc2sgQjogZmFjdG9yaWFsKDMpID0gNgorICAgIFRhc2sgQzogQ29tcHV0ZSBmYWN0b3JpYWwoNCkuLi4KKyAgICBUYXNrIEM6IGZhY3RvcmlhbCg0KSA9IDI0CisKK0EgdGFzayBpcyBhdXRvbWF0aWNhbGx5IHNjaGVkdWxlZCBmb3IgZXhlY3V0aW9uIHdoZW4gaXQgaXMgY3JlYXRlZC4gVGhlIGV2ZW50Citsb29wIHN0b3BzIHdoZW4gYWxsIHRhc2tzIGFyZSBkb25lLgorCisKK1Rhc2sgZnVuY3Rpb25zCistLS0tLS0tLS0tLS0tLQorCisuLiBub3RlOjoKKworICAgSW4gdGhlIGZ1bmN0aW9ucyBiZWxvdywgdGhlIG9wdGlvbmFsICpsb29wKiBhcmd1bWVudCBhbGxvd3MgdG8gZXhwbGljaXRseSBzZXQKKyAgIHRoZSBldmVudCBsb29wIG9iamVjdCB1c2VkIGJ5IHRoZSB1bmRlcmx5aW5nIHRhc2sgb3IgY29yb3V0aW5lLiAgSWYgaXQncworICAgbm90IHByb3ZpZGVkLCB0aGUgZGVmYXVsdCBldmVudCBsb29wIGlzIHVzZWQuCisKKy4uIGZ1bmN0aW9uOjogYXNfY29tcGxldGVkKGZzLCBcKiwgbG9vcD1Ob25lLCB0aW1lb3V0PU5vbmUpCisKKyAgIFJldHVybiBhbiBpdGVyYXRvciB3aG9zZSB2YWx1ZXMsIHdoZW4gd2FpdGVkIGZvciwgYXJlIDpjbGFzczpgRnV0dXJlYAorICAgaW5zdGFuY2VzLgorCisgICBSYWlzZXMgOmV4YzpgYXN5bmNpby5UaW1lb3V0RXJyb3JgIGlmIHRoZSB0aW1lb3V0IG9jY3VycyBiZWZvcmUgYWxsIEZ1dHVyZXMKKyAgIGFyZSBkb25lLgorCisgICBFeGFtcGxlOjoKKworICAgICAgIGZvciBmIGluIGFzX2NvbXBsZXRlZChmcyk6CisgICAgICAgICAgIHJlc3VsdCA9IHlpZWxkIGZyb20gZiAgIyBUaGUgJ3lpZWxkIGZyb20nIG1heSByYWlzZQorICAgICAgICAgICAjIFVzZSByZXN1bHQKKworICAgLi4gbm90ZTo6CisKKyAgICAgIFRoZSBmdXR1cmVzIGBgZmBgIGFyZSBub3QgbmVjZXNzYXJpbHkgbWVtYmVycyBvZiBmcy4KKworLi4gZnVuY3Rpb246OiBlbnN1cmVfZnV0dXJlKGNvcm9fb3JfZnV0dXJlLCBcKiwgbG9vcD1Ob25lKQorCisgICBTY2hlZHVsZSB0aGUgZXhlY3V0aW9uIG9mIGEgOnJlZjpgY29yb3V0aW5lIG9iamVjdCA8Y29yb3V0aW5lPmA6IHdyYXAgaXQgaW4KKyAgIGEgZnV0dXJlLiBSZXR1cm4gYSA6Y2xhc3M6YFRhc2tgIG9iamVjdC4KKworICAgSWYgdGhlIGFyZ3VtZW50IGlzIGEgOmNsYXNzOmBGdXR1cmVgLCBpdCBpcyByZXR1cm5lZCBkaXJlY3RseS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40LjQKKworICAgLi4gc2VlYWxzbzo6CisKKyAgICAgIFRoZSA6bWV0aDpgQmFzZUV2ZW50TG9vcC5jcmVhdGVfdGFza2AgbWV0aG9kLgorCisuLiBmdW5jdGlvbjo6IGFzeW5jKGNvcm9fb3JfZnV0dXJlLCBcKiwgbG9vcD1Ob25lKQorCisgICBBIGRlcHJlY2F0ZWQgYWxpYXMgdG8gOmZ1bmM6YGVuc3VyZV9mdXR1cmVgLgorCisgICAuLiBkZXByZWNhdGVkOjogMy40LjQKKworLi4gZnVuY3Rpb246OiBnYXRoZXIoXCpjb3Jvc19vcl9mdXR1cmVzLCBsb29wPU5vbmUsIHJldHVybl9leGNlcHRpb25zPUZhbHNlKQorCisgICBSZXR1cm4gYSBmdXR1cmUgYWdncmVnYXRpbmcgcmVzdWx0cyBmcm9tIHRoZSBnaXZlbiBjb3JvdXRpbmUgb2JqZWN0cyBvcgorICAgZnV0dXJlcy4KKworICAgQWxsIGZ1dHVyZXMgbXVzdCBzaGFyZSB0aGUgc2FtZSBldmVudCBsb29wLiAgSWYgYWxsIHRoZSB0YXNrcyBhcmUgZG9uZQorICAgc3VjY2Vzc2Z1bGx5LCB0aGUgcmV0dXJuZWQgZnV0dXJlJ3MgcmVzdWx0IGlzIHRoZSBsaXN0IG9mIHJlc3VsdHMgKGluIHRoZQorICAgb3JkZXIgb2YgdGhlIG9yaWdpbmFsIHNlcXVlbmNlLCBub3QgbmVjZXNzYXJpbHkgdGhlIG9yZGVyIG9mIHJlc3VsdHMKKyAgIGFycml2YWwpLiAgSWYgKnJldHVybl9leGNlcHRpb25zKiBpcyBUcnVlLCBleGNlcHRpb25zIGluIHRoZSB0YXNrcyBhcmUKKyAgIHRyZWF0ZWQgdGhlIHNhbWUgYXMgc3VjY2Vzc2Z1bCByZXN1bHRzLCBhbmQgZ2F0aGVyZWQgaW4gdGhlIHJlc3VsdCBsaXN0OworICAgb3RoZXJ3aXNlLCB0aGUgZmlyc3QgcmFpc2VkIGV4Y2VwdGlvbiB3aWxsIGJlIGltbWVkaWF0ZWx5IHByb3BhZ2F0ZWQgdG8gdGhlCisgICByZXR1cm5lZCBmdXR1cmUuCisKKyAgIENhbmNlbGxhdGlvbjogaWYgdGhlIG91dGVyIEZ1dHVyZSBpcyBjYW5jZWxsZWQsIGFsbCBjaGlsZHJlbiAodGhhdCBoYXZlIG5vdAorICAgY29tcGxldGVkIHlldCkgYXJlIGFsc28gY2FuY2VsbGVkLiAgSWYgYW55IGNoaWxkIGlzIGNhbmNlbGxlZCwgdGhpcyBpcworICAgdHJlYXRlZCBhcyBpZiBpdCByYWlzZWQgOmV4YzpgfmNvbmN1cnJlbnQuZnV0dXJlcy5DYW5jZWxsZWRFcnJvcmAgLS0gdGhlCisgICBvdXRlciBGdXR1cmUgaXMgKm5vdCogY2FuY2VsbGVkIGluIHRoaXMgY2FzZS4gIChUaGlzIGlzIHRvIHByZXZlbnQgdGhlCisgICBjYW5jZWxsYXRpb24gb2Ygb25lIGNoaWxkIHRvIGNhdXNlIG90aGVyIGNoaWxkcmVuIHRvIGJlIGNhbmNlbGxlZC4pCisKKy4uIGZ1bmN0aW9uOjogaXNjb3JvdXRpbmUob2JqKQorCisgICBSZXR1cm4gYGBUcnVlYGAgaWYgKm9iaiogaXMgYSA6cmVmOmBjb3JvdXRpbmUgb2JqZWN0IDxjb3JvdXRpbmU+YC4KKworLi4gZnVuY3Rpb246OiBpc2Nvcm91dGluZWZ1bmN0aW9uKG9iaikKKworICAgUmV0dXJuIGBgVHJ1ZWBgIGlmICpmdW5jKiBpcyBhIGRlY29yYXRlZCA6cmVmOmBjb3JvdXRpbmUgZnVuY3Rpb24KKyAgIDxjb3JvdXRpbmU+YC4KKworLi4gY29yb3V0aW5lZnVuY3Rpb246OiBzbGVlcChkZWxheSwgcmVzdWx0PU5vbmUsIFwqLCBsb29wPU5vbmUpCisKKyAgIENyZWF0ZSBhIDpyZWY6YGNvcm91dGluZSA8Y29yb3V0aW5lPmAgdGhhdCBjb21wbGV0ZXMgYWZ0ZXIgYSBnaXZlbgorICAgdGltZSAoaW4gc2Vjb25kcykuICBJZiAqcmVzdWx0KiBpcyBwcm92aWRlZCwgaXQgaXMgcHJvZHVjZWQgdG8gdGhlIGNhbGxlcgorICAgd2hlbiB0aGUgY29yb3V0aW5lIGNvbXBsZXRlcy4KKworICAgVGhlIHJlc29sdXRpb24gb2YgdGhlIHNsZWVwIGRlcGVuZHMgb24gdGhlIDpyZWY6YGdyYW51bGFyaXR5IG9mIHRoZSBldmVudAorICAgbG9vcCA8YXN5bmNpby1kZWxheWVkLWNhbGxzPmAuCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgYSA6cmVmOmBjb3JvdXRpbmUgPGNvcm91dGluZT5gLgorCisuLiBmdW5jdGlvbjo6IHNoaWVsZChhcmcsIFwqLCBsb29wPU5vbmUpCisKKyAgIFdhaXQgZm9yIGEgZnV0dXJlLCBzaGllbGRpbmcgaXQgZnJvbSBjYW5jZWxsYXRpb24uCisKKyAgIFRoZSBzdGF0ZW1lbnQ6OgorCisgICAgICAgcmVzID0geWllbGQgZnJvbSBzaGllbGQoc29tZXRoaW5nKCkpCisKKyAgIGlzIGV4YWN0bHkgZXF1aXZhbGVudCB0byB0aGUgc3RhdGVtZW50OjoKKworICAgICAgIHJlcyA9IHlpZWxkIGZyb20gc29tZXRoaW5nKCkKKworICAgKmV4Y2VwdCogdGhhdCBpZiB0aGUgY29yb3V0aW5lIGNvbnRhaW5pbmcgaXQgaXMgY2FuY2VsbGVkLCB0aGUgdGFzayBydW5uaW5nCisgICBpbiBgYHNvbWV0aGluZygpYGAgaXMgbm90IGNhbmNlbGxlZC4gIEZyb20gdGhlIHBvaW50IG9mIHZpZXcgb2YKKyAgIGBgc29tZXRoaW5nKClgYCwgdGhlIGNhbmNlbGxhdGlvbiBkaWQgbm90IGhhcHBlbi4gIEJ1dCBpdHMgY2FsbGVyIGlzIHN0aWxsCisgICBjYW5jZWxsZWQsIHNvIHRoZSB5aWVsZC1mcm9tIGV4cHJlc3Npb24gc3RpbGwgcmFpc2VzCisgICA6ZXhjOmB+Y29uY3VycmVudC5mdXR1cmVzLkNhbmNlbGxlZEVycm9yYC4gIE5vdGU6IElmIGBgc29tZXRoaW5nKClgYCBpcworICAgY2FuY2VsbGVkIGJ5IG90aGVyIG1lYW5zIHRoaXMgd2lsbCBzdGlsbCBjYW5jZWwgYGBzaGllbGQoKWBgLgorCisgICBJZiB5b3Ugd2FudCB0byBjb21wbGV0ZWx5IGlnbm9yZSBjYW5jZWxsYXRpb24gKG5vdCByZWNvbW1lbmRlZCkgeW91IGNhbgorICAgY29tYmluZSBgYHNoaWVsZCgpYGAgd2l0aCBhIHRyeS9leGNlcHQgY2xhdXNlLCBhcyBmb2xsb3dzOjoKKworICAgICAgIHRyeToKKyAgICAgICAgICAgcmVzID0geWllbGQgZnJvbSBzaGllbGQoc29tZXRoaW5nKCkpCisgICAgICAgZXhjZXB0IENhbmNlbGxlZEVycm9yOgorICAgICAgICAgICByZXMgPSBOb25lCisKKy4uIGNvcm91dGluZWZ1bmN0aW9uOjogd2FpdChmdXR1cmVzLCBcKiwgbG9vcD1Ob25lLCB0aW1lb3V0PU5vbmUsIHJldHVybl93aGVuPUFMTF9DT01QTEVURUQpCisKKyAgIFdhaXQgZm9yIHRoZSBGdXR1cmVzIGFuZCBjb3JvdXRpbmUgb2JqZWN0cyBnaXZlbiBieSB0aGUgc2VxdWVuY2UgKmZ1dHVyZXMqCisgICB0byBjb21wbGV0ZS4gIENvcm91dGluZXMgd2lsbCBiZSB3cmFwcGVkIGluIFRhc2tzLiBSZXR1cm5zIHR3byBzZXRzIG9mCisgICA6Y2xhc3M6YEZ1dHVyZWA6IChkb25lLCBwZW5kaW5nKS4KKworICAgVGhlIHNlcXVlbmNlICpmdXR1cmVzKiBtdXN0IG5vdCBiZSBlbXB0eS4KKworICAgKnRpbWVvdXQqIGNhbiBiZSB1c2VkIHRvIGNvbnRyb2wgdGhlIG1heGltdW0gbnVtYmVyIG9mIHNlY29uZHMgdG8gd2FpdCBiZWZvcmUKKyAgIHJldHVybmluZy4gICp0aW1lb3V0KiBjYW4gYmUgYW4gaW50IG9yIGZsb2F0LiAgSWYgKnRpbWVvdXQqIGlzIG5vdCBzcGVjaWZpZWQKKyAgIG9yIGBgTm9uZWBgLCB0aGVyZSBpcyBubyBsaW1pdCB0byB0aGUgd2FpdCB0aW1lLgorCisgICAqcmV0dXJuX3doZW4qIGluZGljYXRlcyB3aGVuIHRoaXMgZnVuY3Rpb24gc2hvdWxkIHJldHVybi4gIEl0IG11c3QgYmUgb25lIG9mCisgICB0aGUgZm9sbG93aW5nIGNvbnN0YW50cyBvZiB0aGUgOm1vZDpgY29uY3VycmVudC5mdXR1cmVzYCBtb2R1bGU6CisKKyAgIC4uIHRhYnVsYXJjb2x1bW5zOjogfGx8THwKKworICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IENvbnN0YW50ICAgICAgICAgICAgICAgICAgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KworICAgfCA6Y29uc3Q6YEZJUlNUX0NPTVBMRVRFRGAgICAgfCBUaGUgZnVuY3Rpb24gd2lsbCByZXR1cm4gd2hlbiBhbnkgICAgICB8CisgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGZ1dHVyZSBmaW5pc2hlcyBvciBpcyBjYW5jZWxsZWQuICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCA6Y29uc3Q6YEZJUlNUX0VYQ0VQVElPTmAgICAgfCBUaGUgZnVuY3Rpb24gd2lsbCByZXR1cm4gd2hlbiBhbnkgICAgICB8CisgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGZ1dHVyZSBmaW5pc2hlcyBieSByYWlzaW5nIGFuICAgICAgICAgIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZXhjZXB0aW9uLiAgSWYgbm8gZnV0dXJlIHJhaXNlcyBhbiAgICAgfAorICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBleGNlcHRpb24gdGhlbiBpdCBpcyBlcXVpdmFsZW50IHRvICAgICB8CisgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDpjb25zdDpgQUxMX0NPTVBMRVRFRGAuICAgICAgICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCA6Y29uc3Q6YEFMTF9DT01QTEVURURgICAgICAgfCBUaGUgZnVuY3Rpb24gd2lsbCByZXR1cm4gd2hlbiBhbGwgICAgICB8CisgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGZ1dHVyZXMgZmluaXNoIG9yIGFyZSBjYW5jZWxsZWQuICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCisgICBUaGlzIGZ1bmN0aW9uIGlzIGEgOnJlZjpgY29yb3V0aW5lIDxjb3JvdXRpbmU+YC4KKworICAgVXNhZ2U6OgorCisgICAgICAgIGRvbmUsIHBlbmRpbmcgPSB5aWVsZCBmcm9tIGFzeW5jaW8ud2FpdChmcykKKworICAgLi4gbm90ZTo6CisKKyAgICAgIFRoaXMgZG9lcyBub3QgcmFpc2UgOmV4YzpgYXN5bmNpby5UaW1lb3V0RXJyb3JgISBGdXR1cmVzIHRoYXQgYXJlbid0IGRvbmUKKyAgICAgIHdoZW4gdGhlIHRpbWVvdXQgb2NjdXJzIGFyZSByZXR1cm5lZCBpbiB0aGUgc2Vjb25kIHNldC4KKworCisuLiBjb3JvdXRpbmVmdW5jdGlvbjo6IHdhaXRfZm9yKGZ1dCwgdGltZW91dCwgXCosIGxvb3A9Tm9uZSkKKworICAgV2FpdCBmb3IgdGhlIHNpbmdsZSA6Y2xhc3M6YEZ1dHVyZWAgb3IgOnJlZjpgY29yb3V0aW5lIG9iamVjdCA8Y29yb3V0aW5lPmAKKyAgIHRvIGNvbXBsZXRlIHdpdGggdGltZW91dC4gSWYgKnRpbWVvdXQqIGlzIGBgTm9uZWBgLCBibG9jayB1bnRpbCB0aGUgZnV0dXJlCisgICBjb21wbGV0ZXMuCisKKyAgIENvcm91dGluZSB3aWxsIGJlIHdyYXBwZWQgaW4gOmNsYXNzOmBUYXNrYC4KKworICAgUmV0dXJucyByZXN1bHQgb2YgdGhlIEZ1dHVyZSBvciBjb3JvdXRpbmUuICBXaGVuIGEgdGltZW91dCBvY2N1cnMsIGl0CisgICBjYW5jZWxzIHRoZSB0YXNrIGFuZCByYWlzZXMgOmV4YzpgYXN5bmNpby5UaW1lb3V0RXJyb3JgLiBUbyBhdm9pZCB0aGUgdGFzaworICAgY2FuY2VsbGF0aW9uLCB3cmFwIGl0IGluIDpmdW5jOmBzaGllbGRgLgorCisgICBJZiB0aGUgd2FpdCBpcyBjYW5jZWxsZWQsIHRoZSBmdXR1cmUgKmZ1dCogaXMgYWxzbyBjYW5jZWxsZWQuCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgYSA6cmVmOmBjb3JvdXRpbmUgPGNvcm91dGluZT5gLCB1c2FnZTo6CisKKyAgICAgICByZXN1bHQgPSB5aWVsZCBmcm9tIGFzeW5jaW8ud2FpdF9mb3IoZnV0LCA2MC4wKQorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNC4zCisgICAgICBJZiB0aGUgd2FpdCBpcyBjYW5jZWxsZWQsIHRoZSBmdXR1cmUgKmZ1dCogaXMgbm93IGFsc28gY2FuY2VsbGVkLgorCisKKy4uIGZ1bmN0aW9uOjogcnVuX2Nvcm91dGluZV90aHJlYWRzYWZlKGNvcm8sIGxvb3ApCisKKyAgIFN1Ym1pdCBhIDpyZWY6YGNvcm91dGluZSBvYmplY3QgPGNvcm91dGluZT5gIHRvIGEgZ2l2ZW4gZXZlbnQgbG9vcC4KKworICAgUmV0dXJuIGEgOmNsYXNzOmBjb25jdXJyZW50LmZ1dHVyZXMuRnV0dXJlYCB0byBhY2Nlc3MgdGhlIHJlc3VsdC4KKworICAgVGhpcyBmdW5jdGlvbiBpcyBtZWFudCB0byBiZSBjYWxsZWQgZnJvbSBhIGRpZmZlcmVudCB0aHJlYWQgdGhhbiB0aGUgb25lCisgICB3aGVyZSB0aGUgZXZlbnQgbG9vcCBpcyBydW5uaW5nLiBVc2FnZTo6CisKKyAgICAgIyBDcmVhdGUgYSBjb3JvdXRpbmUKKyAgICAgY29ybyA9IGFzeW5jaW8uc2xlZXAoMSwgcmVzdWx0PTMpCisgICAgICMgU3VibWl0IHRoZSBjb3JvdXRpbmUgdG8gYSBnaXZlbiBsb29wCisgICAgIGZ1dHVyZSA9IGFzeW5jaW8ucnVuX2Nvcm91dGluZV90aHJlYWRzYWZlKGNvcm8sIGxvb3ApCisgICAgICMgV2FpdCBmb3IgdGhlIHJlc3VsdCB3aXRoIGFuIG9wdGlvbmFsIHRpbWVvdXQgYXJndW1lbnQKKyAgICAgYXNzZXJ0IGZ1dHVyZS5yZXN1bHQodGltZW91dCkgPT0gMworCisgICBJZiBhbiBleGNlcHRpb24gaXMgcmFpc2VkIGluIHRoZSBjb3JvdXRpbmUsIHRoZSByZXR1cm5lZCBmdXR1cmUgd2lsbCBiZQorICAgbm90aWZpZWQuIEl0IGNhbiBhbHNvIGJlIHVzZWQgdG8gY2FuY2VsIHRoZSB0YXNrIGluIHRoZSBldmVudCBsb29wOjoKKworICAgICB0cnk6CisgICAgICAgICByZXN1bHQgPSBmdXR1cmUucmVzdWx0KHRpbWVvdXQpCisgICAgIGV4Y2VwdCBhc3luY2lvLlRpbWVvdXRFcnJvcjoKKyAgICAgICAgIHByaW50KCdUaGUgY29yb3V0aW5lIHRvb2sgdG9vIGxvbmcsIGNhbmNlbGxpbmcgdGhlIHRhc2suLi4nKQorICAgICAgICAgZnV0dXJlLmNhbmNlbCgpCisgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgcHJpbnQoJ1RoZSBjb3JvdXRpbmUgcmFpc2VkIGFuIGV4Y2VwdGlvbjogeyFyfScuZm9ybWF0KGV4YykpCisgICAgIGVsc2U6CisgICAgICAgICBwcmludCgnVGhlIGNvcm91dGluZSByZXR1cm5lZDogeyFyfScuZm9ybWF0KHJlc3VsdCkpCisKKyAgIFNlZSB0aGUgOnJlZjpgY29uY3VycmVuY3kgYW5kIG11bHRpdGhyZWFkaW5nIDxhc3luY2lvLW11bHRpdGhyZWFkaW5nPmAKKyAgIHNlY3Rpb24gb2YgdGhlIGRvY3VtZW50YXRpb24uCisKKyAgIC4uIG5vdGU6OgorCisgICAgICBVbmxpa2UgdGhlIGZ1bmN0aW9ucyBhYm92ZSwgOmZ1bmM6YHJ1bl9jb3JvdXRpbmVfdGhyZWFkc2FmZWAgcmVxdWlyZXMgdGhlCisgICAgICAqbG9vcCogYXJndW1lbnQgdG8gYmUgcGFzc2VkIGV4cGxpY2l0ZWx5LgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQuNCwgMy41LjEKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2FzeW5jaW8ucnN0IGIvRG9jL2xpYnJhcnkvYXN5bmNpby5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWI0ZDY1ZQotLS0gL2Rldi9udWxsCisrKyBiL0RvYy9saWJyYXJ5L2FzeW5jaW8ucnN0CkBAIC0wLDAgKzEsNzMgQEAKKzptb2Q6YGFzeW5jaW9gIC0tIEFzeW5jaHJvbm91cyBJL08sIGV2ZW50IGxvb3AsIGNvcm91dGluZXMgYW5kIHRhc2tzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisuLiBtb2R1bGU6OiBhc3luY2lvCisgICA6c3lub3BzaXM6IEFzeW5jaHJvbm91cyBJL08sIGV2ZW50IGxvb3AsIGNvcm91dGluZXMgYW5kIHRhc2tzLgorCisuLiBub3RlOjoKKworICAgVGhlIGFzeW5jaW8gcGFja2FnZSBoYXMgYmVlbiBpbmNsdWRlZCBpbiB0aGUgc3RhbmRhcmQgbGlicmFyeSBvbiBhCisgICA6dGVybTpgcHJvdmlzaW9uYWwgYmFzaXMgPHByb3Zpc2lvbmFsIHBhY2thZ2U+YC4gQmFja3dhcmRzIGluY29tcGF0aWJsZQorICAgY2hhbmdlcyAodXAgdG8gYW5kIGluY2x1ZGluZyByZW1vdmFsIG9mIHRoZSBtb2R1bGUpIG1heSBvY2N1ciBpZiBkZWVtZWQKKyAgIG5lY2Vzc2FyeSBieSB0aGUgY29yZSBkZXZlbG9wZXJzLgorCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvYXN5bmNpby9gCisKKy0tLS0tLS0tLS0tLS0tCisKK1RoaXMgbW9kdWxlIHByb3ZpZGVzIGluZnJhc3RydWN0dXJlIGZvciB3cml0aW5nIHNpbmdsZS10aHJlYWRlZCBjb25jdXJyZW50Citjb2RlIHVzaW5nIGNvcm91dGluZXMsIG11bHRpcGxleGluZyBJL08gYWNjZXNzIG92ZXIgc29ja2V0cyBhbmQgb3RoZXIKK3Jlc291cmNlcywgcnVubmluZyBuZXR3b3JrIGNsaWVudHMgYW5kIHNlcnZlcnMsIGFuZCBvdGhlciByZWxhdGVkIHByaW1pdGl2ZXMuCitIZXJlIGlzIGEgbW9yZSBkZXRhaWxlZCBsaXN0IG9mIHRoZSBwYWNrYWdlIGNvbnRlbnRzOgorCisqIGEgcGx1Z2dhYmxlIDpyZWY6YGV2ZW50IGxvb3AgPGFzeW5jaW8tZXZlbnQtbG9vcD5gIHdpdGggdmFyaW91cyBzeXN0ZW0tc3BlY2lmaWMKKyAgaW1wbGVtZW50YXRpb25zOworCisqIDpyZWY6YHRyYW5zcG9ydCA8YXN5bmNpby10cmFuc3BvcnQ+YCBhbmQgOnJlZjpgcHJvdG9jb2wgPGFzeW5jaW8tcHJvdG9jb2w+YCBhYnN0cmFjdGlvbnMKKyAgKHNpbWlsYXIgdG8gdGhvc2UgaW4gYFR3aXN0ZWQgPGh0dHBzOi8vdHdpc3RlZG1hdHJpeC5jb20vdHJhYy8+YF8pOworCisqIGNvbmNyZXRlIHN1cHBvcnQgZm9yIFRDUCwgVURQLCBTU0wsIHN1YnByb2Nlc3MgcGlwZXMsIGRlbGF5ZWQgY2FsbHMsIGFuZAorICBvdGhlcnMgKHNvbWUgbWF5IGJlIHN5c3RlbS1kZXBlbmRlbnQpOworCisqIGEgOmNsYXNzOmBGdXR1cmVgIGNsYXNzIHRoYXQgbWltaWNzIHRoZSBvbmUgaW4gdGhlIDptb2Q6YGNvbmN1cnJlbnQuZnV0dXJlc2AKKyAgbW9kdWxlLCBidXQgYWRhcHRlZCBmb3IgdXNlIHdpdGggdGhlIGV2ZW50IGxvb3A7CisKKyogY29yb3V0aW5lcyBhbmQgdGFza3MgYmFzZWQgb24gYGB5aWVsZCBmcm9tYGAgKDpQRVA6YDM4MGApLCB0byBoZWxwIHdyaXRlCisgIGNvbmN1cnJlbnQgY29kZSBpbiBhIHNlcXVlbnRpYWwgZmFzaGlvbjsKKworKiBjYW5jZWxsYXRpb24gc3VwcG9ydCBmb3IgOmNsYXNzOmBGdXR1cmVgXHMgYW5kIGNvcm91dGluZXM7CisKKyogOnJlZjpgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgPGFzeW5jaW8tc3luYz5gIGZvciB1c2UgYmV0d2VlbiBjb3JvdXRpbmVzIGluCisgIGEgc2luZ2xlIHRocmVhZCwgbWltaWNraW5nIHRob3NlIGluIHRoZSA6bW9kOmB0aHJlYWRpbmdgIG1vZHVsZTsKKworKiBhbiBpbnRlcmZhY2UgZm9yIHBhc3Npbmcgd29yayBvZmYgdG8gYSB0aHJlYWRwb29sLCBmb3IgdGltZXMgd2hlbgorICB5b3UgYWJzb2x1dGVseSwgcG9zaXRpdmVseSBoYXZlIHRvIHVzZSBhIGxpYnJhcnkgdGhhdCBtYWtlcyBibG9ja2luZworICBJL08gY2FsbHMuCisKK0FzeW5jaHJvbm91cyBwcm9ncmFtbWluZyBpcyBtb3JlIGNvbXBsZXggdGhhbiBjbGFzc2ljYWwgInNlcXVlbnRpYWwiCitwcm9ncmFtbWluZzogc2VlIHRoZSA6cmVmOmBEZXZlbG9wIHdpdGggYXN5bmNpbyA8YXN5bmNpby1kZXY+YCBwYWdlIHdoaWNoIGxpc3RzCitjb21tb24gdHJhcHMgYW5kIGV4cGxhaW5zIGhvdyB0byBhdm9pZCB0aGVtLiA6cmVmOmBFbmFibGUgdGhlIGRlYnVnIG1vZGUKKzxhc3luY2lvLWRlYnVnLW1vZGU+YCBkdXJpbmcgZGV2ZWxvcG1lbnQgdG8gZGV0ZWN0IGNvbW1vbiBpc3N1ZXMuCisKK1RhYmxlIG9mIGNvbnRlbnRzOgorCisuLiB0b2N0cmVlOjoKKyAgIDptYXhkZXB0aDogMworCisgICBhc3luY2lvLWV2ZW50bG9vcC5yc3QKKyAgIGFzeW5jaW8tZXZlbnRsb29wcy5yc3QKKyAgIGFzeW5jaW8tdGFzay5yc3QKKyAgIGFzeW5jaW8tcHJvdG9jb2wucnN0CisgICBhc3luY2lvLXN0cmVhbS5yc3QKKyAgIGFzeW5jaW8tc3VicHJvY2Vzcy5yc3QKKyAgIGFzeW5jaW8tc3luYy5yc3QKKyAgIGFzeW5jaW8tcXVldWUucnN0CisgICBhc3luY2lvLWRldi5yc3QKKworLi4gc2VlYWxzbzo6CisKKyAgIFRoZSA6bW9kOmBhc3luY2lvYCBtb2R1bGUgd2FzIGRlc2lnbmVkIGluIDpQRVA6YDMxNTZgLiBGb3IgYQorICAgbW90aXZhdGlvbmFsIHByaW1lciBvbiB0cmFuc3BvcnRzIGFuZCBwcm90b2NvbHMsIHNlZSA6UEVQOmAzMTUzYC4KKwpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvYXN5bmNvcmUucnN0IGIvRG9jL2xpYnJhcnkvYXN5bmNvcmUucnN0CmluZGV4IDE1MjFlNzIuLjkxN2QwNDQgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2FzeW5jb3JlLnJzdAorKysgYi9Eb2MvbGlicmFyeS9hc3luY29yZS5yc3QKQEAgLTEzLDYgKzEzLDExIEBACiAKIC0tLS0tLS0tLS0tLS0tCiAKKy4uIG5vdGU6OgorCisgICBUaGlzIG1vZHVsZSBleGlzdHMgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IG9ubHkuICBGb3IgbmV3IGNvZGUgd2UKKyAgIHJlY29tbWVuZCB1c2luZyA6bW9kOmBhc3luY2lvYC4KKwogVGhpcyBtb2R1bGUgcHJvdmlkZXMgdGhlIGJhc2ljIGluZnJhc3RydWN0dXJlIGZvciB3cml0aW5nIGFzeW5jaHJvbm91cyAgc29ja2V0CiBzZXJ2aWNlIGNsaWVudHMgYW5kIHNlcnZlcnMuCiAKQEAgLTIxMSw2ICsyMTYsMTAgQEAKICAgICAgIGVtcHR5IGJ5dGVzIG9iamVjdCBpbXBsaWVzIHRoYXQgdGhlIGNoYW5uZWwgaGFzIGJlZW4gY2xvc2VkIGZyb20gdGhlCiAgICAgICBvdGhlciBlbmQuCiAKKyAgICAgIE5vdGUgdGhhdCA6bWV0aDpgcmVjdmAgbWF5IHJhaXNlIDpleGM6YEJsb2NraW5nSU9FcnJvcmAgLCBldmVuIHRob3VnaAorICAgICAgOmZ1bmM6YHNlbGVjdC5zZWxlY3RgIG9yIDpmdW5jOmBzZWxlY3QucG9sbGAgaGFzIHJlcG9ydGVkIHRoZSBzb2NrZXQKKyAgICAgIHJlYWR5IGZvciByZWFkaW5nLgorCiAKICAgIC4uIG1ldGhvZDo6IGxpc3RlbihiYWNrbG9nKQogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9hdWRpb29wLnJzdCBiL0RvYy9saWJyYXJ5L2F1ZGlvb3AucnN0CmluZGV4IGVkYjM4NzAuLmNlMTI3YWEgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2F1ZGlvb3AucnN0CisrKyBiL0RvYy9saWJyYXJ5L2F1ZGlvb3AucnN0CkBAIC02LDkgKzYsMTQgQEAKIAogCiBUaGUgOm1vZDpgYXVkaW9vcGAgbW9kdWxlIGNvbnRhaW5zIHNvbWUgdXNlZnVsIG9wZXJhdGlvbnMgb24gc291bmQgZnJhZ21lbnRzLgotSXQgb3BlcmF0ZXMgb24gc291bmQgZnJhZ21lbnRzIGNvbnNpc3Rpbmcgb2Ygc2lnbmVkIGludGVnZXIgc2FtcGxlcyA4LCAxNiBvciAzMgotYml0cyB3aWRlLCBzdG9yZWQgaW4gYnl0ZXMgb2JqZWN0cy4gIEFsbCBzY2FsYXIgaXRlbXMgYXJlIGludGVnZXJzLCB1bmxlc3MKLXNwZWNpZmllZCBvdGhlcndpc2UuCitJdCBvcGVyYXRlcyBvbiBzb3VuZCBmcmFnbWVudHMgY29uc2lzdGluZyBvZiBzaWduZWQgaW50ZWdlciBzYW1wbGVzIDgsIDE2LCAyNAorb3IgMzIgYml0cyB3aWRlLCBzdG9yZWQgaW4gOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0YFwgcy4gIEFsbCBzY2FsYXIgaXRlbXMgYXJlCitpbnRlZ2VycywgdW5sZXNzIHNwZWNpZmllZCBvdGhlcndpc2UuCisKKy4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICBTdXBwb3J0IGZvciAyNC1iaXQgc2FtcGxlcyB3YXMgYWRkZWQuCisgICBBbGwgZnVuY3Rpb25zIG5vdyBhY2NlcHQgYW55IDp0ZXJtOmBieXRlcy1saWtlIG9iamVjdGAuCisgICBTdHJpbmcgaW5wdXQgbm93IHJlc3VsdHMgaW4gYW4gaW1tZWRpYXRlIGVycm9yLgogCiAuLiBpbmRleDo6CiAgICBzaW5nbGU6IEludGVsL0RWSSBBRFBDTQpAQCAtMzUsNyArNDAsNyBAQAogLi4gZnVuY3Rpb246OiBhZGQoZnJhZ21lbnQxLCBmcmFnbWVudDIsIHdpZHRoKQogCiAgICBSZXR1cm4gYSBmcmFnbWVudCB3aGljaCBpcyB0aGUgYWRkaXRpb24gb2YgdGhlIHR3byBzYW1wbGVzIHBhc3NlZCBhcyBwYXJhbWV0ZXJzLgotICAgKndpZHRoKiBpcyB0aGUgc2FtcGxlIHdpZHRoIGluIGJ5dGVzLCBlaXRoZXIgYGAxYGAsIGBgMmBgIG9yIGBgNGBgLiAgQm90aAorICAgKndpZHRoKiBpcyB0aGUgc2FtcGxlIHdpZHRoIGluIGJ5dGVzLCBlaXRoZXIgYGAxYGAsIGBgMmBgLCBgYDNgYCBvciBgYDRgYC4gIEJvdGgKICAgIGZyYWdtZW50cyBzaG91bGQgaGF2ZSB0aGUgc2FtZSBsZW5ndGguICBTYW1wbGVzIGFyZSB0cnVuY2F0ZWQgaW4gY2FzZSBvZiBvdmVyZmxvdy4KIAogCkBAIC03MCw2ICs3NSwxNCBAQAogICAgc2FtcGxlLiAgU2FtcGxlcyB3cmFwIGFyb3VuZCBpbiBjYXNlIG9mIG92ZXJmbG93LgogCiAKKy4uIGZ1bmN0aW9uOjogYnl0ZXN3YXAoZnJhZ21lbnQsIHdpZHRoKQorCisgICAiQnl0ZXN3YXAiIGFsbCBzYW1wbGVzIGluIGEgZnJhZ21lbnQgYW5kIHJldHVybnMgdGhlIG1vZGlmaWVkIGZyYWdtZW50LgorICAgQ29udmVydHMgYmlnLWVuZGlhbiBzYW1wbGVzIHRvIGxpdHRsZS1lbmRpYW4gYW5kIHZpY2UgdmVyc2EuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIC4uIGZ1bmN0aW9uOjogY3Jvc3MoZnJhZ21lbnQsIHdpZHRoKQogCiAgICBSZXR1cm4gdGhlIG51bWJlciBvZiB6ZXJvIGNyb3NzaW5ncyBpbiB0aGUgZnJhZ21lbnQgcGFzc2VkIGFzIGFuIGFyZ3VtZW50LgpAQCAtMTMzLDE5ICsxNDYsMTkgQEAKIAogLi4gZnVuY3Rpb246OiBsaW4ybGluKGZyYWdtZW50LCB3aWR0aCwgbmV3d2lkdGgpCiAKLSAgIENvbnZlcnQgc2FtcGxlcyBiZXR3ZWVuIDEtLCAyLSBhbmQgNC1ieXRlIGZvcm1hdHMuCisgICBDb252ZXJ0IHNhbXBsZXMgYmV0d2VlbiAxLSwgMi0sIDMtIGFuZCA0LWJ5dGUgZm9ybWF0cy4KIAogICAgLi4gbm90ZTo6CiAKLSAgICAgIEluIHNvbWUgYXVkaW8gZm9ybWF0cywgc3VjaCBhcyAuV0FWIGZpbGVzLCAxNiBhbmQgMzIgYml0IHNhbXBsZXMgYXJlCisgICAgICBJbiBzb21lIGF1ZGlvIGZvcm1hdHMsIHN1Y2ggYXMgLldBViBmaWxlcywgMTYsIDI0IGFuZCAzMiBiaXQgc2FtcGxlcyBhcmUKICAgICAgIHNpZ25lZCwgYnV0IDggYml0IHNhbXBsZXMgYXJlIHVuc2lnbmVkLiAgU28gd2hlbiBjb252ZXJ0aW5nIHRvIDggYml0IHdpZGUKICAgICAgIHNhbXBsZXMgZm9yIHRoZXNlIGZvcm1hdHMsIHlvdSBuZWVkIHRvIGFsc28gYWRkIDEyOCB0byB0aGUgcmVzdWx0OjoKIAogICAgICAgICAgbmV3X2ZyYW1lcyA9IGF1ZGlvb3AubGluMmxpbihmcmFtZXMsIG9sZF93aWR0aCwgMSkKICAgICAgICAgIG5ld19mcmFtZXMgPSBhdWRpb29wLmJpYXMobmV3X2ZyYW1lcywgMSwgMTI4KQogCi0gICAgICBUaGUgc2FtZSwgaW4gcmV2ZXJzZSwgaGFzIHRvIGJlIGFwcGxpZWQgd2hlbiBjb252ZXJ0aW5nIGZyb20gOCB0byAxNiBvciAzMgotICAgICAgYml0IHdpZHRoIHNhbXBsZXMuCisgICAgICBUaGUgc2FtZSwgaW4gcmV2ZXJzZSwgaGFzIHRvIGJlIGFwcGxpZWQgd2hlbiBjb252ZXJ0aW5nIGZyb20gOCB0byAxNiwgMjQKKyAgICAgIG9yIDMyIGJpdCB3aWR0aCBzYW1wbGVzLgogCiAKIC4uIGZ1bmN0aW9uOjogbGluMnVsYXcoZnJhZ21lbnQsIHdpZHRoKQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvYmFzZTY0LnJzdCBiL0RvYy9saWJyYXJ5L2Jhc2U2NC5yc3QKaW5kZXggZjBkMTFiMC4uZWJhNGIzNiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvYmFzZTY0LnJzdAorKysgYi9Eb2MvbGlicmFyeS9iYXNlNjQucnN0CkBAIC0xLDMyICsxLDQyIEBACi06bW9kOmBiYXNlNjRgIC0tLSBSRkMgMzU0ODogQmFzZTE2LCBCYXNlMzIsIEJhc2U2NCBEYXRhIEVuY29kaW5ncwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzptb2Q6YGJhc2U2NGAgLS0tIEJhc2UxNiwgQmFzZTMyLCBCYXNlNjQsIEJhc2U4NSBEYXRhIEVuY29kaW5ncworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKIC4uIG1vZHVsZTo6IGJhc2U2NAotICAgOnN5bm9wc2lzOiBSRkMgMzU0ODogQmFzZTE2LCBCYXNlMzIsIEJhc2U2NCBEYXRhIEVuY29kaW5ncworICAgOnN5bm9wc2lzOiBSRkMgMzU0ODogQmFzZTE2LCBCYXNlMzIsIEJhc2U2NCBEYXRhIEVuY29kaW5nczsKKyAgICAgICAgICAgICAgQmFzZTg1IGFuZCBBc2NpaTg1CiAKIAogLi4gaW5kZXg6OgogICAgcGFpcjogYmFzZTY0OyBlbmNvZGluZwogICAgc2luZ2xlOiBNSU1FOyBiYXNlNjQgZW5jb2RpbmcKIAotVGhpcyBtb2R1bGUgcHJvdmlkZXMgZGF0YSBlbmNvZGluZyBhbmQgZGVjb2RpbmcgYXMgc3BlY2lmaWVkIGluIDpyZmM6YDM1NDhgLgotVGhpcyBzdGFuZGFyZCBkZWZpbmVzIHRoZSBCYXNlMTYsIEJhc2UzMiwgYW5kIEJhc2U2NCBhbGdvcml0aG1zIGZvciBlbmNvZGluZwotYW5kIGRlY29kaW5nIGFyYml0cmFyeSBiaW5hcnkgc3RyaW5ncyBpbnRvIEFTQ0lJLW9ubHkgYnl0ZSBzdHJpbmdzIHRoYXQgY2FuIGJlCitUaGlzIG1vZHVsZSBwcm92aWRlcyBmdW5jdGlvbnMgZm9yIGVuY29kaW5nIGJpbmFyeSBkYXRhIHRvIHByaW50YWJsZQorQVNDSUkgY2hhcmFjdGVycyBhbmQgZGVjb2Rpbmcgc3VjaCBlbmNvZGluZ3MgYmFjayB0byBiaW5hcnkgZGF0YS4KK0l0IHByb3ZpZGVzIGVuY29kaW5nIGFuZCBkZWNvZGluZyBmdW5jdGlvbnMgZm9yIHRoZSBlbmNvZGluZ3Mgc3BlY2lmaWVkIGluCis6cmZjOmAzNTQ4YCwgd2hpY2ggZGVmaW5lcyB0aGUgQmFzZTE2LCBCYXNlMzIsIGFuZCBCYXNlNjQgYWxnb3JpdGhtcywKK2FuZCBmb3IgdGhlIGRlLWZhY3RvIHN0YW5kYXJkIEFzY2lpODUgYW5kIEJhc2U4NSBlbmNvZGluZ3MuCisKK1RoZSA6cmZjOmAzNTQ4YCBlbmNvZGluZ3MgYXJlIHN1aXRhYmxlIGZvciBlbmNvZGluZyBiaW5hcnkgZGF0YSBzbyB0aGF0IGl0IGNhbgogc2FmZWx5IHNlbnQgYnkgZW1haWwsIHVzZWQgYXMgcGFydHMgb2YgVVJMcywgb3IgaW5jbHVkZWQgYXMgcGFydCBvZiBhbiBIVFRQCiBQT1NUIHJlcXVlc3QuICBUaGUgZW5jb2RpbmcgYWxnb3JpdGhtIGlzIG5vdCB0aGUgc2FtZSBhcyB0aGUKIDpwcm9ncmFtOmB1dWVuY29kZWAgcHJvZ3JhbS4KIAotVGhlcmUgYXJlIHR3byBpbnRlcmZhY2VzIHByb3ZpZGVkIGJ5IHRoaXMgbW9kdWxlLiAgVGhlIG1vZGVybiBpbnRlcmZhY2UKLXN1cHBvcnRzIGVuY29kaW5nIGFuZCBkZWNvZGluZyBBU0NJSSBieXRlIHN0cmluZyBvYmplY3RzIHVzaW5nIGFsbCB0aHJlZQotYWxwaGFiZXRzLiBBZGRpdGlvbmFsbHksIHRoZSBkZWNvZGluZyBmdW5jdGlvbnMgb2YgdGhlIG1vZGVybiBpbnRlcmZhY2UgYWxzbwotYWNjZXB0IFVuaWNvZGUgc3RyaW5ncyBjb250YWluaW5nIG9ubHkgQVNDSUkgY2hhcmFjdGVycy4gVGhlIGxlZ2FjeSBpbnRlcmZhY2UKLXByb3ZpZGVzIGZvciBlbmNvZGluZyBhbmQgZGVjb2RpbmcgdG8gYW5kIGZyb20gZmlsZS1saWtlIG9iamVjdHMgYXMgd2VsbCBhcwotYnl0ZSBzdHJpbmdzLCBidXQgb25seSB1c2luZyB0aGUgQmFzZTY0IHN0YW5kYXJkIGFscGhhYmV0LgorVGhlcmUgYXJlIHR3byA6cmZjOmAzNTQ4YCBpbnRlcmZhY2VzIHByb3ZpZGVkIGJ5IHRoaXMgbW9kdWxlLiAgVGhlIG1vZGVybgoraW50ZXJmYWNlIHN1cHBvcnRzIGVuY29kaW5nIGFuZCBkZWNvZGluZyBBU0NJSSBieXRlIHN0cmluZyBvYmplY3RzIHVzaW5nIGFsbAordGhyZWUgOnJmYzpgMzU0OGAgZGVmaW5lZCBhbHBoYWJldHMgKG5vcm1hbCwgVVJMLXNhZmUsIGFuZCBmaWxlc3lzdGVtLXNhZmUpLgorQWRkaXRpb25hbGx5LCB0aGUgZGVjb2RpbmcgZnVuY3Rpb25zIG9mIHRoZSBtb2Rlcm4gaW50ZXJmYWNlIGFsc28gYWNjZXB0CitVbmljb2RlIHN0cmluZ3MgY29udGFpbmluZyBvbmx5IEFTQ0lJIGNoYXJhY3RlcnMuIFRoZSBsZWdhY3kgaW50ZXJmYWNlIHByb3ZpZGVzCitmb3IgZW5jb2RpbmcgYW5kIGRlY29kaW5nIHRvIGFuZCBmcm9tIGZpbGUtbGlrZSBvYmplY3RzIGFzIHdlbGwgYXMgYnl0ZQorc3RyaW5ncywgYnV0IG9ubHkgdXNpbmcgdGhlIEJhc2U2NCBzdGFuZGFyZCBhbHBoYWJldC4KIAogLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKICAgIEFTQ0lJLW9ubHkgVW5pY29kZSBzdHJpbmdzIGFyZSBub3cgYWNjZXB0ZWQgYnkgdGhlIGRlY29kaW5nIGZ1bmN0aW9ucyBvZgogICAgdGhlIG1vZGVybiBpbnRlcmZhY2UuCiAKKy4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICBBbnkgOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0YFwgcyBhcmUgbm93IGFjY2VwdGVkIGJ5IGFsbAorICAgZW5jb2RpbmcgYW5kIGRlY29kaW5nIGZ1bmN0aW9ucyBpbiB0aGlzIG1vZHVsZS4gIEFzY2lpODUvQmFzZTg1IHN1cHBvcnQgYWRkZWQuCisKIFRoZSBtb2Rlcm4gaW50ZXJmYWNlIHByb3ZpZGVzOgogCiAuLiBmdW5jdGlvbjo6IGI2NGVuY29kZShzLCBhbHRjaGFycz1Ob25lKQpAQCAtMTI4LDYgKzEzOCw3NiBAQAogICAgc3RyaW5nLgogCiAKKy4uIGZ1bmN0aW9uOjogYTg1ZW5jb2RlKHMsICosIGZvbGRzcGFjZXM9RmFsc2UsIHdyYXBjb2w9MCwgcGFkPUZhbHNlLCBhZG9iZT1GYWxzZSkKKworICAgRW5jb2RlIGEgYnl0ZSBzdHJpbmcgdXNpbmcgQXNjaWk4NS4KKworICAgKnMqIGlzIHRoZSBzdHJpbmcgdG8gZW5jb2RlLiBUaGUgZW5jb2RlZCBieXRlIHN0cmluZyBpcyByZXR1cm5lZC4KKworICAgKmZvbGRzcGFjZXMqIGlzIGFuIG9wdGlvbmFsIGZsYWcgdGhhdCB1c2VzIHRoZSBzcGVjaWFsIHNob3J0IHNlcXVlbmNlICd5JworICAgaW5zdGVhZCBvZiA0IGNvbnNlY3V0aXZlIHNwYWNlcyAoQVNDSUkgMHgyMCkgYXMgc3VwcG9ydGVkIGJ5ICdidG9hJy4gVGhpcworICAgZmVhdHVyZSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSAic3RhbmRhcmQiIEFzY2lpODUgZW5jb2RpbmcuCisKKyAgICp3cmFwY29sKiBjb250cm9scyB3aGV0aGVyIHRoZSBvdXRwdXQgc2hvdWxkIGhhdmUgbmV3bGluZSAoYGAnXG4nYGApCisgICBjaGFyYWN0ZXJzIGFkZGVkIHRvIGl0LiBJZiB0aGlzIGlzIG5vbi16ZXJvLCBlYWNoIG91dHB1dCBsaW5lIHdpbGwgYmUKKyAgIGF0IG1vc3QgdGhpcyBtYW55IGNoYXJhY3RlcnMgbG9uZy4KKworICAgKnBhZCogY29udHJvbHMgd2hldGhlciB0aGUgaW5wdXQgc3RyaW5nIGlzIHBhZGRlZCB0byBhIG11bHRpcGxlIG9mIDQKKyAgIGJlZm9yZSBlbmNvZGluZy4gTm90ZSB0aGF0IHRoZSBgYGJ0b2FgYCBpbXBsZW1lbnRhdGlvbiBhbHdheXMgcGFkcy4KKworICAgKmFkb2JlKiBjb250cm9scyB3aGV0aGVyIHRoZSBlbmNvZGVkIGJ5dGUgc2VxdWVuY2UgaXMgZnJhbWVkIHdpdGggYGA8fmBgCisgICBhbmQgYGB+PmBgLCB3aGljaCBpcyB1c2VkIGJ5IHRoZSBBZG9iZSBpbXBsZW1lbnRhdGlvbi4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKworLi4gZnVuY3Rpb246OiBhODVkZWNvZGUocywgKiwgZm9sZHNwYWNlcz1GYWxzZSwgYWRvYmU9RmFsc2UsIGlnbm9yZWNoYXJzPWInIFxcdFxcblxcclxcdicpCisKKyAgIERlY29kZSBhbiBBc2NpaTg1IGVuY29kZWQgYnl0ZSBzdHJpbmcuCisKKyAgICpzKiBpcyB0aGUgYnl0ZSBzdHJpbmcgdG8gZGVjb2RlLgorCisgICAqZm9sZHNwYWNlcyogaXMgYSBmbGFnIHRoYXQgc3BlY2lmaWVzIHdoZXRoZXIgdGhlICd5JyBzaG9ydCBzZXF1ZW5jZQorICAgc2hvdWxkIGJlIGFjY2VwdGVkIGFzIHNob3J0aGFuZCBmb3IgNCBjb25zZWN1dGl2ZSBzcGFjZXMgKEFTQ0lJIDB4MjApLgorICAgVGhpcyBmZWF0dXJlIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlICJzdGFuZGFyZCIgQXNjaWk4NSBlbmNvZGluZy4KKworICAgKmFkb2JlKiBjb250cm9scyB3aGV0aGVyIHRoZSBpbnB1dCBzZXF1ZW5jZSBpcyBpbiBBZG9iZSBBc2NpaTg1IGZvcm1hdAorICAgKGkuZS4gaXMgZnJhbWVkIHdpdGggPH4gYW5kIH4+KS4KKworICAgKmlnbm9yZWNoYXJzKiBzaG91bGQgYmUgYSBieXRlIHN0cmluZyBjb250YWluaW5nIGNoYXJhY3RlcnMgdG8gaWdub3JlCisgICBmcm9tIHRoZSBpbnB1dC4gVGhpcyBzaG91bGQgb25seSBjb250YWluIHdoaXRlc3BhY2UgY2hhcmFjdGVycywgYW5kIGJ5CisgICBkZWZhdWx0IGNvbnRhaW5zIGFsbCB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMgaW4gQVNDSUkuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKKy4uIGZ1bmN0aW9uOjogYjg1ZW5jb2RlKHMsIHBhZD1GYWxzZSkKKworICAgRW5jb2RlIGEgYnl0ZSBzdHJpbmcgdXNpbmcgYmFzZTg1LCBhcyB1c2VkIGluIGUuZy4gZ2l0LXN0eWxlIGJpbmFyeQorICAgZGlmZnMuCisKKyAgIElmICpwYWQqIGlzIHRydWUsIHRoZSBpbnB1dCBpcyBwYWRkZWQgd2l0aCAiXFwwIiBzbyBpdHMgbGVuZ3RoIGlzIGEKKyAgIG11bHRpcGxlIG9mIDQgY2hhcmFjdGVycyBiZWZvcmUgZW5jb2RpbmcuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKKy4uIGZ1bmN0aW9uOjogYjg1ZGVjb2RlKGIpCisKKyAgIERlY29kZSBiYXNlODUtZW5jb2RlZCBieXRlIHN0cmluZy4gIFBhZGRpbmcgaXMgaW1wbGljaXRseSByZW1vdmVkLCBpZgorICAgbmVjZXNzYXJ5LgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCisuLiBub3RlOjoKKyAgIEJvdGggQmFzZTg1IGFuZCBBc2NpaTg1IGhhdmUgYW4gZXhwYW5zaW9uIGZhY3RvciBvZiA1IHRvIDQgKDUgQmFzZTg1IG9yCisgICBBc2NpaTg1IGNoYXJhY3RlcnMgY2FuIGVuY29kZSA0IGJpbmFyeSBieXRlcyksIHdoaWxlIHRoZSBiZXR0ZXIta25vd24KKyAgIEJhc2U2NCBoYXMgYW4gZXhwYW5zaW9uIGZhY3RvciBvZiA2IHRvIDQuICBUaGV5IGFyZSB0aGVyZWZvcmUgbW9yZQorICAgZWZmaWNpZW50IHdoZW4gc3BhY2UgZXhwZW5zaXZlLiAgVGhleSBkaWZmZXIgYnkgZGV0YWlscyBzdWNoIGFzIHRoZQorICAgY2hhcmFjdGVyIG1hcCB1c2VkIGZvciBlbmNvZGluZy4KKworCiBUaGUgbGVnYWN5IGludGVyZmFjZToKIAogLi4gZnVuY3Rpb246OiBkZWNvZGUoaW5wdXQsIG91dHB1dCkKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2JkYi5yc3QgYi9Eb2MvbGlicmFyeS9iZGIucnN0CmluZGV4IDcyMjkwODcuLjhlZTk5MjEgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2JkYi5yc3QKKysrIGIvRG9jL2xpYnJhcnkvYmRiLnJzdApAQCAtMjMxLDcgKzIzMSw3IEBACiAgICAuLiBtZXRob2Q6OiBzZXRfdW50aWwoZnJhbWUpCiAKICAgICAgIFN0b3Agd2hlbiB0aGUgbGluZSB3aXRoIHRoZSBsaW5lIG5vIGdyZWF0ZXIgdGhhbiB0aGUgY3VycmVudCBvbmUgaXMKLSAgICAgIHJlYWNoZWQgb3Igd2hlbiByZXR1cm5pbmcgZnJvbSBjdXJyZW50IGZyYW1lCisgICAgICByZWFjaGVkIG9yIHdoZW4gcmV0dXJuaW5nIGZyb20gY3VycmVudCBmcmFtZS4KIAogICAgLi4gbWV0aG9kOjogc2V0X3RyYWNlKFtmcmFtZV0pCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2JpbmFzY2lpLnJzdCBiL0RvYy9saWJyYXJ5L2JpbmFzY2lpLnJzdAppbmRleCBjOTJhOGUxLi5kYmU1MzVkIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9iaW5hc2NpaS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvYmluYXNjaWkucnN0CkBAIC01NSwxOSArNTUsMTggQEAKIC4uIGZ1bmN0aW9uOjogYjJhX2Jhc2U2NChkYXRhKQogCiAgICBDb252ZXJ0IGJpbmFyeSBkYXRhIHRvIGEgbGluZSBvZiBBU0NJSSBjaGFyYWN0ZXJzIGluIGJhc2U2NCBjb2RpbmcuIFRoZSByZXR1cm4KLSAgIHZhbHVlIGlzIHRoZSBjb252ZXJ0ZWQgbGluZSwgaW5jbHVkaW5nIGEgbmV3bGluZSBjaGFyLiBUaGUgbGVuZ3RoIG9mICpkYXRhKgotICAgc2hvdWxkIGJlIGF0IG1vc3QgNTcgdG8gYWRoZXJlIHRvIHRoZSBiYXNlNjQgc3RhbmRhcmQuCisgICB2YWx1ZSBpcyB0aGUgY29udmVydGVkIGxpbmUsIGluY2x1ZGluZyBhIG5ld2xpbmUgY2hhci4gIFRoZSBuZXdsaW5lIGlzCisgICBhZGRlZCBiZWNhdXNlIHRoZSBvcmlnaW5hbCB1c2UgY2FzZSBmb3IgdGhpcyBmdW5jdGlvbiB3YXMgdG8gZmVlZCBpdCBhCisgICBzZXJpZXMgb2YgNTcgYnl0ZSBpbnB1dCBsaW5lcyB0byBnZXQgb3V0cHV0IGxpbmVzIHRoYXQgY29uZm9ybSB0byB0aGUKKyAgIE1JTUUtYmFzZTY0IHN0YW5kYXJkLiAgT3RoZXJ3aXNlIHRoZSBvdXRwdXQgY29uZm9ybXMgdG8gOnJmYzpgMzU0OGAuCiAKIAotLi4gZnVuY3Rpb246OiBhMmJfcXAoc3RyaW5nLCBoZWFkZXI9RmFsc2UpCisuLiBmdW5jdGlvbjo6IGEyYl9xcChkYXRhLCBoZWFkZXI9RmFsc2UpCiAKICAgIENvbnZlcnQgYSBibG9jayBvZiBxdW90ZWQtcHJpbnRhYmxlIGRhdGEgYmFjayB0byBiaW5hcnkgYW5kIHJldHVybiB0aGUgYmluYXJ5CiAgICBkYXRhLiBNb3JlIHRoYW4gb25lIGxpbmUgbWF5IGJlIHBhc3NlZCBhdCBhIHRpbWUuIElmIHRoZSBvcHRpb25hbCBhcmd1bWVudAogICAgKmhlYWRlciogaXMgcHJlc2VudCBhbmQgdHJ1ZSwgdW5kZXJzY29yZXMgd2lsbCBiZSBkZWNvZGVkIGFzIHNwYWNlcy4KIAotICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKLSAgICAgIEFjY2VwdCBvbmx5IGJ5dGVzdHJpbmcgb3IgYnl0ZWFycmF5IG9iamVjdHMgYXMgaW5wdXQuCi0KIAogLi4gZnVuY3Rpb246OiBiMmFfcXAoZGF0YSwgcXVvdGV0YWJzPUZhbHNlLCBpc3RleHQ9VHJ1ZSwgaGVhZGVyPUZhbHNlKQogCkBAIC0xNTYsOSArMTU1LDYgQEAKICAgIG9mIGhleGFkZWNpbWFsIGRpZ2l0cyAod2hpY2ggY2FuIGJlIHVwcGVyIG9yIGxvd2VyIGNhc2UpLCBvdGhlcndpc2UgYQogICAgOmV4YzpgVHlwZUVycm9yYCBpcyByYWlzZWQuCiAKLSAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCi0gICAgICBBY2NlcHQgb25seSBieXRlc3RyaW5nIG9yIGJ5dGVhcnJheSBvYmplY3RzIGFzIGlucHV0LgotCiAKIC4uIGV4Y2VwdGlvbjo6IEVycm9yCiAKQEAgLTE3NCw3ICsxNzAsOCBAQAogLi4gc2VlYWxzbzo6CiAKICAgIE1vZHVsZSA6bW9kOmBiYXNlNjRgCi0gICAgICBTdXBwb3J0IGZvciBiYXNlNjQgZW5jb2RpbmcgdXNlZCBpbiBNSU1FIGVtYWlsIG1lc3NhZ2VzLgorICAgICAgU3VwcG9ydCBmb3IgUkZDIGNvbXBsaWFudCBiYXNlNjQtc3R5bGUgZW5jb2RpbmcgaW4gYmFzZSAxNiwgMzIsIDY0LAorICAgICAgYW5kIDg1LgogCiAgICBNb2R1bGUgOm1vZDpgYmluaGV4YAogICAgICAgU3VwcG9ydCBmb3IgdGhlIGJpbmhleCBmb3JtYXQgdXNlZCBvbiB0aGUgTWFjaW50b3NoLgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvYnoyLnJzdCBiL0RvYy9saWJyYXJ5L2J6Mi5yc3QKaW5kZXggYjc5YmNjZC4uNDg4Y2RhNSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvYnoyLnJzdAorKysgYi9Eb2MvbGlicmFyeS9iejIucnN0CkBAIC0zNyw4ICszNyw4IEBACiAgICBmaWxlIG9iamVjdCB0byByZWFkIGZyb20gb3Igd3JpdGUgdG8uCiAKICAgIFRoZSAqbW9kZSogYXJndW1lbnQgY2FuIGJlIGFueSBvZiBgYCdyJ2BgLCBgYCdyYidgYCwgYGAndydgYCwgYGAnd2InYGAsCi0gICBgYCdhJ2BgLCBvciBgYCdhYidgYCBmb3IgYmluYXJ5IG1vZGUsIG9yIGBgJ3J0J2BgLCBgYCd3dCdgYCwgb3IgYGAnYXQnYGAgZm9yCi0gICB0ZXh0IG1vZGUuIFRoZSBkZWZhdWx0IGlzIGBgJ3JiJ2BgLgorICAgYGAneCdgYCwgYGAneGInYGAsIGBgJ2EnYGAgb3IgYGAnYWInYGAgZm9yIGJpbmFyeSBtb2RlLCBvciBgYCdydCdgYCwKKyAgIGBgJ3d0J2BgLCBgYCd4dCdgYCwgb3IgYGAnYXQnYGAgZm9yIHRleHQgbW9kZS4gVGhlIGRlZmF1bHQgaXMgYGAncmInYGAuCiAKICAgIFRoZSAqY29tcHJlc3NsZXZlbCogYXJndW1lbnQgaXMgYW4gaW50ZWdlciBmcm9tIDEgdG8gOSwgYXMgZm9yIHRoZQogICAgOmNsYXNzOmBCWjJGaWxlYCBjb25zdHJ1Y3Rvci4KQEAgLTU0LDYgKzU0LDkgQEAKIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgYGAneCdgYCAoZXhjbHVzaXZlIGNyZWF0aW9uKSBtb2RlIHdhcyBhZGRlZC4KKwogCiAuLiBjbGFzczo6IEJaMkZpbGUoZmlsZW5hbWUsIG1vZGU9J3InLCBidWZmZXJpbmc9Tm9uZSwgY29tcHJlc3NsZXZlbD05KQogCkBAIC02NCw4ICs2Nyw5IEBACiAgICBiZSB1c2VkIHRvIHJlYWQgb3Igd3JpdGUgdGhlIGNvbXByZXNzZWQgZGF0YS4KIAogICAgVGhlICptb2RlKiBhcmd1bWVudCBjYW4gYmUgZWl0aGVyIGBgJ3InYGAgZm9yIHJlYWRpbmcgKGRlZmF1bHQpLCBgYCd3J2BgIGZvcgotICAgb3ZlcndyaXRpbmcsIG9yIGBgJ2EnYGAgZm9yIGFwcGVuZGluZy4gVGhlc2UgY2FuIGVxdWl2YWxlbnRseSBiZSBnaXZlbiBhcwotICAgYGAncmInYGAsIGBgJ3diJ2BgLCBhbmQgYGAnYWInYGAgcmVzcGVjdGl2ZWx5LgorICAgb3ZlcndyaXRpbmcsIGBgJ3gnYGAgZm9yIGV4Y2x1c2l2ZSBjcmVhdGlvbiwgb3IgYGAnYSdgYCBmb3IgYXBwZW5kaW5nLiBUaGVzZQorICAgY2FuIGVxdWl2YWxlbnRseSBiZSBnaXZlbiBhcyBgYCdyYidgYCwgYGAnd2InYGAsIGBgJ3hiJ2BgIGFuZCBgYCdhYidgYAorICAgcmVzcGVjdGl2ZWx5LgogCiAgICBJZiAqZmlsZW5hbWUqIGlzIGEgZmlsZSBvYmplY3QgKHJhdGhlciB0aGFuIGFuIGFjdHVhbCBmaWxlIG5hbWUpLCBhIG1vZGUgb2YKICAgIGBgJ3cnYGAgZG9lcyBub3QgdHJ1bmNhdGUgdGhlIGZpbGUsIGFuZCBpcyBpbnN0ZWFkIGVxdWl2YWxlbnQgdG8gYGAnYSdgYC4KQEAgLTExMyw2ICsxMTcsOSBAQAogICAgICAgVGhlIGBgJ2EnYGAgKGFwcGVuZCkgbW9kZSB3YXMgYWRkZWQsIGFsb25nIHdpdGggc3VwcG9ydCBmb3IgcmVhZGluZwogICAgICAgbXVsdGktc3RyZWFtIGZpbGVzLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVGhlIGBgJ3gnYGAgKGV4Y2x1c2l2ZSBjcmVhdGlvbikgbW9kZSB3YXMgYWRkZWQuCisKIAogSW5jcmVtZW50YWwgKGRlKWNvbXByZXNzaW9uCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2NnaS5yc3QgYi9Eb2MvbGlicmFyeS9jZ2kucnN0CmluZGV4IGM0ZTdjNjAuLjc0YWJlZDUgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2NnaS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvY2dpLnJzdApAQCAtMTQyLDkgKzE0MiwxMSBAQAogbWV0aG9kIHJlYWRzIHRoZSBlbnRpcmUgZmlsZSBpbiBtZW1vcnkgYXMgYnl0ZXMuICBUaGlzIG1heSBub3QgYmUgd2hhdCB5b3UKIHdhbnQuICBZb3UgY2FuIHRlc3QgZm9yIGFuIHVwbG9hZGVkIGZpbGUgYnkgdGVzdGluZyBlaXRoZXIgdGhlCiA6YXR0cjpgfkZpZWxkU3RvcmFnZS5maWxlbmFtZWAgYXR0cmlidXRlIG9yIHRoZSA6YXR0cjpgfkZpZWxkU3RvcmFnZS5maWxlYAotYXR0cmlidXRlLiAgWW91IGNhbiB0aGVuIHJlYWQgdGhlIGRhdGEgYXQgbGVpc3VyZSBmcm9tIHRoZSA6YXR0cjpgIWZpbGVgCi1hdHRyaWJ1dGUgKHRoZSA6ZnVuYzpgfmlvLlJhd0lPQmFzZS5yZWFkYCBhbmQgOmZ1bmM6YH5pby5JT0Jhc2UucmVhZGxpbmVgCi1tZXRob2RzIHdpbGwgcmV0dXJuIGJ5dGVzKTo6CithdHRyaWJ1dGUuICBZb3UgY2FuIHRoZW4gcmVhZCB0aGUgZGF0YSBmcm9tIHRoZSA6YXR0cjpgIWZpbGVgCithdHRyaWJ1dGUgYmVmb3JlIGl0IGlzIGF1dG9tYXRpY2FsbHkgY2xvc2VkIGFzIHBhcnQgb2YgdGhlIGdhcmJhZ2UgY29sbGVjdGlvbiBvZgordGhlIDpjbGFzczpgRmllbGRTdG9yYWdlYCBpbnN0YW5jZQorKHRoZSA6ZnVuYzpgfmlvLlJhd0lPQmFzZS5yZWFkYCBhbmQgOmZ1bmM6YH5pby5JT0Jhc2UucmVhZGxpbmVgIG1ldGhvZHMgd2lsbAorcmV0dXJuIGJ5dGVzKTo6CiAKICAgIGZpbGVpdGVtID0gZm9ybVsidXNlcmZpbGUiXQogICAgaWYgZmlsZWl0ZW0uZmlsZToKQEAgLTE3Niw2ICsxNzgsMTEgQEAKIEEgZm9ybSBzdWJtaXR0ZWQgdmlhIFBPU1QgdGhhdCBhbHNvIGhhcyBhIHF1ZXJ5IHN0cmluZyB3aWxsIGNvbnRhaW4gYm90aAogOmNsYXNzOmBGaWVsZFN0b3JhZ2VgIGFuZCA6Y2xhc3M6YE1pbmlGaWVsZFN0b3JhZ2VgIGl0ZW1zLgogCisuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgVGhlIDphdHRyOmB+RmllbGRTdG9yYWdlLmZpbGVgIGF0dHJpYnV0ZSBpcyBhdXRvbWF0aWNhbGx5IGNsb3NlZCB1cG9uIHRoZQorICAgZ2FyYmFnZSBjb2xsZWN0aW9uIG9mIHRoZSBjcmVhdGluZyA6Y2xhc3M6YEZpZWxkU3RvcmFnZWAgaW5zdGFuY2UuCisKKwogSGlnaGVyIExldmVsIEludGVyZmFjZQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC0yNzgsNyArMjg1LDcgQEAKIAogLi4gZnVuY3Rpb246OiBwYXJzZV9xc2wocXMsIGtlZXBfYmxhbmtfdmFsdWVzPUZhbHNlLCBzdHJpY3RfcGFyc2luZz1GYWxzZSkKIAotICAgVGhpcyBmdW5jdGlvbiBpcyBkZXByZWNhdGVkIGluIHRoaXMgbW9kdWxlLiBVc2UgOmZ1bmM6YHVybGxpYi5wYXJzZS5wYXJzZV9xc2AKKyAgIFRoaXMgZnVuY3Rpb24gaXMgZGVwcmVjYXRlZCBpbiB0aGlzIG1vZHVsZS4gVXNlIDpmdW5jOmB1cmxsaWIucGFyc2UucGFyc2VfcXNsYAogICAgaW5zdGVhZC4gSXQgaXMgbWFpbnRhaW5lZCBoZXJlIG9ubHkgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCiAKIC4uIGZ1bmN0aW9uOjogcGFyc2VfbXVsdGlwYXJ0KGZwLCBwZGljdCkKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2NodW5rLnJzdCBiL0RvYy9saWJyYXJ5L2NodW5rLnJzdAppbmRleCA1MGI2OTc5Li5hOTBlOWY4IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9jaHVuay5yc3QKKysrIGIvRG9jL2xpYnJhcnkvY2h1bmsucnN0CkBAIC00Nyw3ICs0Nyw3IEBACiB0aGUgOmNsYXNzOmBDaHVua2AgY2xhc3MgZGVmaW5lZCBoZXJlIGlzIHRvIGluc3RhbnRpYXRlIGFuIGluc3RhbmNlIGF0IHRoZSBzdGFydAogb2YgZWFjaCBjaHVuayBhbmQgcmVhZCBmcm9tIHRoZSBpbnN0YW5jZSB1bnRpbCBpdCByZWFjaGVzIHRoZSBlbmQsIGFmdGVyIHdoaWNoIGEKIG5ldyBpbnN0YW5jZSBjYW4gYmUgaW5zdGFudGlhdGVkLiBBdCB0aGUgZW5kIG9mIHRoZSBmaWxlLCBjcmVhdGluZyBhIG5ldwotaW5zdGFuY2Ugd2lsbCBmYWlsIHdpdGggYSA6ZXhjOmBFT0ZFcnJvcmAgZXhjZXB0aW9uLgoraW5zdGFuY2Ugd2lsbCBmYWlsIHdpdGggYW4gOmV4YzpgRU9GRXJyb3JgIGV4Y2VwdGlvbi4KIAogCiAuLiBjbGFzczo6IENodW5rKGZpbGUsIGFsaWduPVRydWUsIGJpZ2VuZGlhbj1UcnVlLCBpbmNsaGVhZGVyPUZhbHNlKQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvY21hdGgucnN0IGIvRG9jL2xpYnJhcnkvY21hdGgucnN0CmluZGV4IGQ3Nzc4ZGYuLmE5ODFkOTQgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2NtYXRoLnJzdAorKysgYi9Eb2MvbGlicmFyeS9jbWF0aC5yc3QKQEAgLTE0OSwxMyArMTQ5LDEzIEBACiAKIC4uIGZ1bmN0aW9uOjogYWNvc2goeCkKIAotICAgUmV0dXJuIHRoZSBoeXBlcmJvbGljIGFyYyBjb3NpbmUgb2YgKngqLiBUaGVyZSBpcyBvbmUgYnJhbmNoIGN1dCwgZXh0ZW5kaW5nIGxlZnQKLSAgIGZyb20gMSBhbG9uZyB0aGUgcmVhbCBheGlzIHRvIC3iiJ4sIGNvbnRpbnVvdXMgZnJvbSBhYm92ZS4KKyAgIFJldHVybiB0aGUgaW52ZXJzZSBoeXBlcmJvbGljIGNvc2luZSBvZiAqeCouIFRoZXJlIGlzIG9uZSBicmFuY2ggY3V0LAorICAgZXh0ZW5kaW5nIGxlZnQgZnJvbSAxIGFsb25nIHRoZSByZWFsIGF4aXMgdG8gLeKIniwgY29udGludW91cyBmcm9tIGFib3ZlLgogCiAKIC4uIGZ1bmN0aW9uOjogYXNpbmgoeCkKIAotICAgUmV0dXJuIHRoZSBoeXBlcmJvbGljIGFyYyBzaW5lIG9mICp4Ki4gVGhlcmUgYXJlIHR3byBicmFuY2ggY3V0czoKKyAgIFJldHVybiB0aGUgaW52ZXJzZSBoeXBlcmJvbGljIHNpbmUgb2YgKngqLiBUaGVyZSBhcmUgdHdvIGJyYW5jaCBjdXRzOgogICAgT25lIGV4dGVuZHMgZnJvbSBgYDFqYGAgYWxvbmcgdGhlIGltYWdpbmFyeSBheGlzIHRvIGBg4oieamBgLAogICAgY29udGludW91cyBmcm9tIHRoZSByaWdodC4gIFRoZSBvdGhlciBleHRlbmRzIGZyb20gYGAtMWpgYCBhbG9uZwogICAgdGhlIGltYWdpbmFyeSBheGlzIHRvIGBgLeKInmpgYCwgY29udGludW91cyBmcm9tIHRoZSBsZWZ0LgpAQCAtMTYzLDcgKzE2Myw3IEBACiAKIC4uIGZ1bmN0aW9uOjogYXRhbmgoeCkKIAotICAgUmV0dXJuIHRoZSBoeXBlcmJvbGljIGFyYyB0YW5nZW50IG9mICp4Ki4gVGhlcmUgYXJlIHR3byBicmFuY2ggY3V0czogT25lCisgICBSZXR1cm4gdGhlIGludmVyc2UgaHlwZXJib2xpYyB0YW5nZW50IG9mICp4Ki4gVGhlcmUgYXJlIHR3byBicmFuY2ggY3V0czogT25lCiAgICBleHRlbmRzIGZyb20gYGAxYGAgYWxvbmcgdGhlIHJlYWwgYXhpcyB0byBgYOKInmBgLCBjb250aW51b3VzIGZyb20gYmVsb3cuIFRoZQogICAgb3RoZXIgZXh0ZW5kcyBmcm9tIGBgLTFgYCBhbG9uZyB0aGUgcmVhbCBheGlzIHRvIGBgLeKInmBgLCBjb250aW51b3VzIGZyb20KICAgIGFib3ZlLgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvY21kLnJzdCBiL0RvYy9saWJyYXJ5L2NtZC5yc3QKaW5kZXggOTcyMjkyOC4uMWFiMmQ3NCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvY21kLnJzdAorKysgYi9Eb2MvbGlicmFyeS9jbWQucnN0CkBAIC0xNDgsOCArMTQ4LDggQEAKICAgIEhvb2sgbWV0aG9kIGV4ZWN1dGVkIG9uY2Ugd2hlbiA6bWV0aDpgY21kbG9vcGAgaXMgYWJvdXQgdG8gcmV0dXJuLiBUaGlzIG1ldGhvZAogICAgaXMgYSBzdHViIGluIDpjbGFzczpgQ21kYDsgaXQgZXhpc3RzIHRvIGJlIG92ZXJyaWRkZW4gYnkgc3ViY2xhc3Nlcy4KIAotSW5zdGFuY2VzIG9mIDpjbGFzczpgQ21kYCBzdWJjbGFzc2VzIGhhdmUgc29tZSBwdWJsaWMgaW5zdGFuY2UgdmFyaWFibGVzOgogCitJbnN0YW5jZXMgb2YgOmNsYXNzOmBDbWRgIHN1YmNsYXNzZXMgaGF2ZSBzb21lIHB1YmxpYyBpbnN0YW5jZSB2YXJpYWJsZXM6CiAKIC4uIGF0dHJpYnV0ZTo6IENtZC5wcm9tcHQKIApAQCAtMTY2LDYgKzE2NiwxMyBAQAogICAgVGhlIGxhc3Qgbm9uZW1wdHkgY29tbWFuZCBwcmVmaXggc2Vlbi4KIAogCisuLiBhdHRyaWJ1dGU6OiBDbWQuY21kcXVldWUKKworICAgQSBsaXN0IG9mIHF1ZXVlZCBpbnB1dCBsaW5lcy4gIFRoZSBjbWRxdWV1ZSBsaXN0IGlzIGNoZWNrZWQgaW4KKyAgIDptZXRoOmBjbWRsb29wYCB3aGVuIG5ldyBpbnB1dCBpcyBuZWVkZWQ7IGlmIGl0IGlzIG5vbmVtcHR5LCBpdHMgZWxlbWVudHMKKyAgIHdpbGwgYmUgcHJvY2Vzc2VkIGluIG9yZGVyLCBhcyBpZiBlbnRlcmVkIGF0IHRoZSBwcm9tcHQuCisKKwogLi4gYXR0cmlidXRlOjogQ21kLmludHJvCiAKICAgIEEgc3RyaW5nIHRvIGlzc3VlIGFzIGFuIGludHJvIG9yIGJhbm5lci4gIE1heSBiZSBvdmVycmlkZGVuIGJ5IGdpdmluZyB0aGUKQEAgLTI1Miw3ICsyNTksNyBAQAogICAgICAgICAgICAgJ01vdmUgdHVydGxlIHRvIGFuIGFic29sdXRlIHBvc2l0aW9uIHdpdGggY2hhbmdpbmcgb3JpZW50YXRpb24uICBHT1RPIDEwMCAyMDAnCiAgICAgICAgICAgICBnb3RvKCpwYXJzZShhcmcpKQogICAgICAgICBkZWYgZG9faG9tZShzZWxmLCBhcmcpOgotICAgICAgICAgICAgJ1JldHVybiB0dXJ0bGUgdG8gdGhlIGhvbWUgcG9zdGlvbjogIEhPTUUnCisgICAgICAgICAgICAnUmV0dXJuIHR1cnRsZSB0byB0aGUgaG9tZSBwb3NpdGlvbjogIEhPTUUnCiAgICAgICAgICAgICBob21lKCkKICAgICAgICAgZGVmIGRvX2NpcmNsZShzZWxmLCBhcmcpOgogICAgICAgICAgICAgJ0RyYXcgY2lyY2xlIHdpdGggZ2l2ZW4gcmFkaXVzIGFuIG9wdGlvbnMgZXh0ZW50IGFuZCBzdGVwczogIENJUkNMRSA1MCcKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2NvZGUucnN0IGIvRG9jL2xpYnJhcnkvY29kZS5yc3QKaW5kZXggZTg2OTAwNC4uNWI1ZDdjYyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvY29kZS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvY29kZS5yc3QKQEAgLTEzMiwxMiArMTMyLDE1IEBACiAKIC4uIG1ldGhvZDo6IEludGVyYWN0aXZlQ29uc29sZS5pbnRlcmFjdChiYW5uZXI9Tm9uZSkKIAotICAgQ2xvc2VseSBlbXVsYXRlIHRoZSBpbnRlcmFjdGl2ZSBQeXRob24gY29uc29sZS4gVGhlIG9wdGlvbmFsIGJhbm5lciBhcmd1bWVudAorICAgQ2xvc2VseSBlbXVsYXRlIHRoZSBpbnRlcmFjdGl2ZSBQeXRob24gY29uc29sZS4gVGhlIG9wdGlvbmFsICpiYW5uZXIqIGFyZ3VtZW50CiAgICBzcGVjaWZ5IHRoZSBiYW5uZXIgdG8gcHJpbnQgYmVmb3JlIHRoZSBmaXJzdCBpbnRlcmFjdGlvbjsgYnkgZGVmYXVsdCBpdCBwcmludHMgYQogICAgYmFubmVyIHNpbWlsYXIgdG8gdGhlIG9uZSBwcmludGVkIGJ5IHRoZSBzdGFuZGFyZCBQeXRob24gaW50ZXJwcmV0ZXIsIGZvbGxvd2VkCiAgICBieSB0aGUgY2xhc3MgbmFtZSBvZiB0aGUgY29uc29sZSBvYmplY3QgaW4gcGFyZW50aGVzZXMgKHNvIGFzIG5vdCB0byBjb25mdXNlCiAgICB0aGlzIHdpdGggdGhlIHJlYWwgaW50ZXJwcmV0ZXIgLS0gc2luY2UgaXQncyBzbyBjbG9zZSEpLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVG8gc3VwcHJlc3MgcHJpbnRpbmcgYW55IGJhbm5lciwgcGFzcyBhbiBlbXB0eSBzdHJpbmcuCisKIAogLi4gbWV0aG9kOjogSW50ZXJhY3RpdmVDb25zb2xlLnB1c2gobGluZSkKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvY29kZWNzLnJzdCBiL0RvYy9saWJyYXJ5L2NvZGVjcy5yc3QKaW5kZXggMDA5YWUyNi4uNjI4OTY5YyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvY29kZWNzLnJzdAorKysgYi9Eb2MvbGlicmFyeS9jb2RlY3MucnN0CkBAIC0xNywxMTAgKzE3LDkyIEBACiAgICBwYWlyOiBzdGFja2FibGU7IHN0cmVhbXMKIAogVGhpcyBtb2R1bGUgZGVmaW5lcyBiYXNlIGNsYXNzZXMgZm9yIHN0YW5kYXJkIFB5dGhvbiBjb2RlY3MgKGVuY29kZXJzIGFuZAotZGVjb2RlcnMpIGFuZCBwcm92aWRlcyBhY2Nlc3MgdG8gdGhlIGludGVybmFsIFB5dGhvbiBjb2RlYyByZWdpc3RyeSB3aGljaAotbWFuYWdlcyB0aGUgY29kZWMgYW5kIGVycm9yIGhhbmRsaW5nIGxvb2t1cCBwcm9jZXNzLgorZGVjb2RlcnMpIGFuZCBwcm92aWRlcyBhY2Nlc3MgdG8gdGhlIGludGVybmFsIFB5dGhvbiBjb2RlYyByZWdpc3RyeSwgd2hpY2gKK21hbmFnZXMgdGhlIGNvZGVjIGFuZCBlcnJvciBoYW5kbGluZyBsb29rdXAgcHJvY2Vzcy4gTW9zdCBzdGFuZGFyZCBjb2RlY3MKK2FyZSA6dGVybTpgdGV4dCBlbmNvZGluZ3MgPHRleHQgZW5jb2Rpbmc+YCwgd2hpY2ggZW5jb2RlIHRleHQgdG8gYnl0ZXMsCitidXQgdGhlcmUgYXJlIGFsc28gY29kZWNzIHByb3ZpZGVkIHRoYXQgZW5jb2RlIHRleHQgdG8gdGV4dCwgYW5kIGJ5dGVzIHRvCitieXRlcy4gQ3VzdG9tIGNvZGVjcyBtYXkgZW5jb2RlIGFuZCBkZWNvZGUgYmV0d2VlbiBhcmJpdHJhcnkgdHlwZXMsIGJ1dCBzb21lCittb2R1bGUgZmVhdHVyZXMgYXJlIHJlc3RyaWN0ZWQgdG8gdXNlIHNwZWNpZmljYWxseSB3aXRoCis6dGVybTpgdGV4dCBlbmNvZGluZ3MgPHRleHQgZW5jb2Rpbmc+YCwgb3Igd2l0aCBjb2RlY3MgdGhhdCBlbmNvZGUgdG8KKzpjbGFzczpgYnl0ZXNgLgogCi1JdCBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOgorVGhlIG1vZHVsZSBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGZvciBlbmNvZGluZyBhbmQgZGVjb2Rpbmcgd2l0aAorYW55IGNvZGVjOgogCi0uLiBmdW5jdGlvbjo6IGVuY29kZShvYmosIGVuY29kaW5nPSd1dGYtOCcsIGVycm9ycz0nc3RyaWN0JykKKy4uIGZ1bmN0aW9uOjogZW5jb2RlKG9iaiwgW2VuY29kaW5nWywgZXJyb3JzXV0pCiAKLSAgIEVuY29kZXMgKm9iaiogdXNpbmcgdGhlIGNvZGVjIHJlZ2lzdGVyZWQgZm9yICplbmNvZGluZyouCisgICBFbmNvZGVzICpvYmoqIHVzaW5nIHRoZSBjb2RlYyByZWdpc3RlcmVkIGZvciAqZW5jb2RpbmcqLiBUaGUgZGVmYXVsdAorICAgZW5jb2RpbmcgaXMgYGB1dGYtOGBgLgogCiAgICAqRXJyb3JzKiBtYXkgYmUgZ2l2ZW4gdG8gc2V0IHRoZSBkZXNpcmVkIGVycm9yIGhhbmRsaW5nIHNjaGVtZS4gVGhlCi0gICBkZWZhdWx0IGVycm9yIGhhbmRsZXIgaXMgYGBzdHJpY3RgYCBtZWFuaW5nIHRoYXQgZW5jb2RpbmcgZXJyb3JzIHJhaXNlCisgICBkZWZhdWx0IGVycm9yIGhhbmRsZXIgaXMgYGAnc3RyaWN0J2BgIG1lYW5pbmcgdGhhdCBlbmNvZGluZyBlcnJvcnMgcmFpc2UKICAgIDpleGM6YFZhbHVlRXJyb3JgIChvciBhIG1vcmUgY29kZWMgc3BlY2lmaWMgc3ViY2xhc3MsIHN1Y2ggYXMKICAgIDpleGM6YFVuaWNvZGVFbmNvZGVFcnJvcmApLiBSZWZlciB0byA6cmVmOmBjb2RlYy1iYXNlLWNsYXNzZXNgIGZvciBtb3JlCiAgICBpbmZvcm1hdGlvbiBvbiBjb2RlYyBlcnJvciBoYW5kbGluZy4KIAotLi4gZnVuY3Rpb246OiBkZWNvZGUob2JqLCBlbmNvZGluZz0ndXRmLTgnLCBlcnJvcnM9J3N0cmljdCcpCisuLiBmdW5jdGlvbjo6IGRlY29kZShvYmosIFtlbmNvZGluZ1ssIGVycm9yc11dKQogCi0gICBEZWNvZGVzICpvYmoqIHVzaW5nIHRoZSBjb2RlYyByZWdpc3RlcmVkIGZvciAqZW5jb2RpbmcqLgorICAgRGVjb2RlcyAqb2JqKiB1c2luZyB0aGUgY29kZWMgcmVnaXN0ZXJlZCBmb3IgKmVuY29kaW5nKi4gVGhlIGRlZmF1bHQKKyAgIGVuY29kaW5nIGlzIGBgdXRmLThgYC4KIAogICAgKkVycm9ycyogbWF5IGJlIGdpdmVuIHRvIHNldCB0aGUgZGVzaXJlZCBlcnJvciBoYW5kbGluZyBzY2hlbWUuIFRoZQotICAgZGVmYXVsdCBlcnJvciBoYW5kbGVyIGlzIGBgc3RyaWN0YGAgbWVhbmluZyB0aGF0IGRlY29kaW5nIGVycm9ycyByYWlzZQorICAgZGVmYXVsdCBlcnJvciBoYW5kbGVyIGlzIGBgJ3N0cmljdCdgYCBtZWFuaW5nIHRoYXQgZGVjb2RpbmcgZXJyb3JzIHJhaXNlCiAgICA6ZXhjOmBWYWx1ZUVycm9yYCAob3IgYSBtb3JlIGNvZGVjIHNwZWNpZmljIHN1YmNsYXNzLCBzdWNoIGFzCiAgICA6ZXhjOmBVbmljb2RlRGVjb2RlRXJyb3JgKS4gUmVmZXIgdG8gOnJlZjpgY29kZWMtYmFzZS1jbGFzc2VzYCBmb3IgbW9yZQogICAgaW5mb3JtYXRpb24gb24gY29kZWMgZXJyb3IgaGFuZGxpbmcuCiAKLS4uIGZ1bmN0aW9uOjogcmVnaXN0ZXIoc2VhcmNoX2Z1bmN0aW9uKQotCi0gICBSZWdpc3RlciBhIGNvZGVjIHNlYXJjaCBmdW5jdGlvbi4gU2VhcmNoIGZ1bmN0aW9ucyBhcmUgZXhwZWN0ZWQgdG8gdGFrZSBvbmUKLSAgIGFyZ3VtZW50LCB0aGUgZW5jb2RpbmcgbmFtZSBpbiBhbGwgbG93ZXIgY2FzZSBsZXR0ZXJzLCBhbmQgcmV0dXJuIGEKLSAgIDpjbGFzczpgQ29kZWNJbmZvYCBvYmplY3QgaGF2aW5nIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczoKLQotICAgKiBgYG5hbWVgYCBUaGUgbmFtZSBvZiB0aGUgZW5jb2Rpbmc7Ci0KLSAgICogYGBlbmNvZGVgYCBUaGUgc3RhdGVsZXNzIGVuY29kaW5nIGZ1bmN0aW9uOwotCi0gICAqIGBgZGVjb2RlYGAgVGhlIHN0YXRlbGVzcyBkZWNvZGluZyBmdW5jdGlvbjsKLQotICAgKiBgYGluY3JlbWVudGFsZW5jb2RlcmBgIEFuIGluY3JlbWVudGFsIGVuY29kZXIgY2xhc3Mgb3IgZmFjdG9yeSBmdW5jdGlvbjsKLQotICAgKiBgYGluY3JlbWVudGFsZGVjb2RlcmBgIEFuIGluY3JlbWVudGFsIGRlY29kZXIgY2xhc3Mgb3IgZmFjdG9yeSBmdW5jdGlvbjsKLQotICAgKiBgYHN0cmVhbXdyaXRlcmBgIEEgc3RyZWFtIHdyaXRlciBjbGFzcyBvciBmYWN0b3J5IGZ1bmN0aW9uOwotCi0gICAqIGBgc3RyZWFtcmVhZGVyYGAgQSBzdHJlYW0gcmVhZGVyIGNsYXNzIG9yIGZhY3RvcnkgZnVuY3Rpb24uCi0KLSAgIFRoZSB2YXJpb3VzIGZ1bmN0aW9ucyBvciBjbGFzc2VzIHRha2UgdGhlIGZvbGxvd2luZyBhcmd1bWVudHM6Ci0KLSAgICplbmNvZGUqIGFuZCAqZGVjb2RlKjogVGhlc2UgbXVzdCBiZSBmdW5jdGlvbnMgb3IgbWV0aG9kcyB3aGljaCBoYXZlIHRoZSBzYW1lCi0gICBpbnRlcmZhY2UgYXMgdGhlIDptZXRoOmB+Q29kZWMuZW5jb2RlYC86bWV0aDpgfkNvZGVjLmRlY29kZWAgbWV0aG9kcyBvZiBDb2RlYwotICAgaW5zdGFuY2VzIChzZWUgOnJlZjpgQ29kZWMgSW50ZXJmYWNlIDxjb2RlYy1vYmplY3RzPmApLiBUaGUgZnVuY3Rpb25zL21ldGhvZHMKLSAgIGFyZSBleHBlY3RlZCB0byB3b3JrIGluIGEgc3RhdGVsZXNzIG1vZGUuCi0KLSAgICppbmNyZW1lbnRhbGVuY29kZXIqIGFuZCAqaW5jcmVtZW50YWxkZWNvZGVyKjogVGhlc2UgaGF2ZSB0byBiZSBmYWN0b3J5Ci0gICBmdW5jdGlvbnMgcHJvdmlkaW5nIHRoZSBmb2xsb3dpbmcgaW50ZXJmYWNlOgotCi0gICAgICBgYGZhY3RvcnkoZXJyb3JzPSdzdHJpY3QnKWBgCi0KLSAgIFRoZSBmYWN0b3J5IGZ1bmN0aW9ucyBtdXN0IHJldHVybiBvYmplY3RzIHByb3ZpZGluZyB0aGUgaW50ZXJmYWNlcyBkZWZpbmVkIGJ5Ci0gICB0aGUgYmFzZSBjbGFzc2VzIDpjbGFzczpgSW5jcmVtZW50YWxFbmNvZGVyYCBhbmQgOmNsYXNzOmBJbmNyZW1lbnRhbERlY29kZXJgLAotICAgcmVzcGVjdGl2ZWx5LiBJbmNyZW1lbnRhbCBjb2RlY3MgY2FuIG1haW50YWluIHN0YXRlLgotCi0gICAqc3RyZWFtcmVhZGVyKiBhbmQgKnN0cmVhbXdyaXRlcio6IFRoZXNlIGhhdmUgdG8gYmUgZmFjdG9yeSBmdW5jdGlvbnMgcHJvdmlkaW5nCi0gICB0aGUgZm9sbG93aW5nIGludGVyZmFjZToKLQotICAgICAgYGBmYWN0b3J5KHN0cmVhbSwgZXJyb3JzPSdzdHJpY3QnKWBgCi0KLSAgIFRoZSBmYWN0b3J5IGZ1bmN0aW9ucyBtdXN0IHJldHVybiBvYmplY3RzIHByb3ZpZGluZyB0aGUgaW50ZXJmYWNlcyBkZWZpbmVkIGJ5Ci0gICB0aGUgYmFzZSBjbGFzc2VzIDpjbGFzczpgU3RyZWFtUmVhZGVyYCBhbmQgOmNsYXNzOmBTdHJlYW1Xcml0ZXJgLCByZXNwZWN0aXZlbHkuCi0gICBTdHJlYW0gY29kZWNzIGNhbiBtYWludGFpbiBzdGF0ZS4KLQotICAgUG9zc2libGUgdmFsdWVzIGZvciBlcnJvcnMgYXJlCi0KLSAgICogYGAnc3RyaWN0J2BgOiByYWlzZSBhbiBleGNlcHRpb24gaW4gY2FzZSBvZiBhbiBlbmNvZGluZyBlcnJvcgotICAgKiBgYCdyZXBsYWNlJ2BgOiByZXBsYWNlIG1hbGZvcm1lZCBkYXRhIHdpdGggYSBzdWl0YWJsZSByZXBsYWNlbWVudCBtYXJrZXIsCi0gICAgIHN1Y2ggYXMgYGAnPydgYCBvciBgYCdcdWZmZmQnYGAKLSAgICogYGAnaWdub3JlJ2BgOiBpZ25vcmUgbWFsZm9ybWVkIGRhdGEgYW5kIGNvbnRpbnVlIHdpdGhvdXQgZnVydGhlciBub3RpY2UKLSAgICogYGAneG1sY2hhcnJlZnJlcGxhY2UnYGA6IHJlcGxhY2Ugd2l0aCB0aGUgYXBwcm9wcmlhdGUgWE1MIGNoYXJhY3RlcgotICAgICByZWZlcmVuY2UgKGZvciBlbmNvZGluZyBvbmx5KQotICAgKiBgYCdiYWNrc2xhc2hyZXBsYWNlJ2BgOiByZXBsYWNlIHdpdGggYmFja3NsYXNoZWQgZXNjYXBlIHNlcXVlbmNlcyAoZm9yCi0gICAgIGVuY29kaW5nIG9ubHkpCi0gICAqIGBgJ3N1cnJvZ2F0ZWVzY2FwZSdgYDogb24gZGVjb2RpbmcsIHJlcGxhY2Ugd2l0aCBjb2RlIHBvaW50cyBpbiB0aGUgVW5pY29kZQotICAgICBQcml2YXRlIFVzZSBBcmVhIHJhbmdpbmcgZnJvbSBVK0RDODAgdG8gVStEQ0ZGLiAgVGhlc2UgcHJpdmF0ZSBjb2RlCi0gICAgIHBvaW50cyB3aWxsIHRoZW4gYmUgdHVybmVkIGJhY2sgaW50byB0aGUgc2FtZSBieXRlcyB3aGVuIHRoZQotICAgICBgYHN1cnJvZ2F0ZWVzY2FwZWBgIGVycm9yIGhhbmRsZXIgaXMgdXNlZCB3aGVuIGVuY29kaW5nIHRoZSBkYXRhLgotICAgICAoU2VlIDpwZXA6YDM4M2AgZm9yIG1vcmUuKQotCi0gICBhcyB3ZWxsIGFzIGFueSBvdGhlciBlcnJvciBoYW5kbGluZyBuYW1lIGRlZmluZWQgdmlhIDpmdW5jOmByZWdpc3Rlcl9lcnJvcmAuCi0KLSAgIEluIGNhc2UgYSBzZWFyY2ggZnVuY3Rpb24gY2Fubm90IGZpbmQgYSBnaXZlbiBlbmNvZGluZywgaXQgc2hvdWxkIHJldHVybgotICAgYGBOb25lYGAuCi0KK1RoZSBmdWxsIGRldGFpbHMgZm9yIGVhY2ggY29kZWMgY2FuIGFsc28gYmUgbG9va2VkIHVwIGRpcmVjdGx5OgogCiAuLiBmdW5jdGlvbjo6IGxvb2t1cChlbmNvZGluZykKIAogICAgTG9va3MgdXAgdGhlIGNvZGVjIGluZm8gaW4gdGhlIFB5dGhvbiBjb2RlYyByZWdpc3RyeSBhbmQgcmV0dXJucyBhCi0gICA6Y2xhc3M6YENvZGVjSW5mb2Agb2JqZWN0IGFzIGRlZmluZWQgYWJvdmUuCisgICA6Y2xhc3M6YENvZGVjSW5mb2Agb2JqZWN0IGFzIGRlZmluZWQgYmVsb3cuCiAKICAgIEVuY29kaW5ncyBhcmUgZmlyc3QgbG9va2VkIHVwIGluIHRoZSByZWdpc3RyeSdzIGNhY2hlLiBJZiBub3QgZm91bmQsIHRoZSBsaXN0IG9mCiAgICByZWdpc3RlcmVkIHNlYXJjaCBmdW5jdGlvbnMgaXMgc2Nhbm5lZC4gSWYgbm8gOmNsYXNzOmBDb2RlY0luZm9gIG9iamVjdCBpcwogICAgZm91bmQsIGEgOmV4YzpgTG9va3VwRXJyb3JgIGlzIHJhaXNlZC4gT3RoZXJ3aXNlLCB0aGUgOmNsYXNzOmBDb2RlY0luZm9gIG9iamVjdAogICAgaXMgc3RvcmVkIGluIHRoZSBjYWNoZSBhbmQgcmV0dXJuZWQgdG8gdGhlIGNhbGxlci4KIAotVG8gc2ltcGxpZnkgYWNjZXNzIHRvIHRoZSB2YXJpb3VzIGNvZGVjcywgdGhlIG1vZHVsZSBwcm92aWRlcyB0aGVzZSBhZGRpdGlvbmFsCi1mdW5jdGlvbnMgd2hpY2ggdXNlIDpmdW5jOmBsb29rdXBgIGZvciB0aGUgY29kZWMgbG9va3VwOgorLi4gY2xhc3M6OiBDb2RlY0luZm8oZW5jb2RlLCBkZWNvZGUsIHN0cmVhbXJlYWRlcj1Ob25lLCBzdHJlYW13cml0ZXI9Tm9uZSwgaW5jcmVtZW50YWxlbmNvZGVyPU5vbmUsIGluY3JlbWVudGFsZGVjb2Rlcj1Ob25lLCBuYW1lPU5vbmUpCisKKyAgIENvZGVjIGRldGFpbHMgd2hlbiBsb29raW5nIHVwIHRoZSBjb2RlYyByZWdpc3RyeS4gVGhlIGNvbnN0cnVjdG9yCisgICBhcmd1bWVudHMgYXJlIHN0b3JlZCBpbiBhdHRyaWJ1dGVzIG9mIHRoZSBzYW1lIG5hbWU6CisKKworICAgLi4gYXR0cmlidXRlOjogbmFtZQorCisgICAgICBUaGUgbmFtZSBvZiB0aGUgZW5jb2RpbmcuCisKKworICAgLi4gYXR0cmlidXRlOjogZW5jb2RlCisgICAgICAgICAgICAgICAgICBkZWNvZGUKKworICAgICAgVGhlIHN0YXRlbGVzcyBlbmNvZGluZyBhbmQgZGVjb2RpbmcgZnVuY3Rpb25zLiBUaGVzZSBtdXN0IGJlCisgICAgICBmdW5jdGlvbnMgb3IgbWV0aG9kcyB3aGljaCBoYXZlIHRoZSBzYW1lIGludGVyZmFjZSBhcworICAgICAgdGhlIDptZXRoOmB+Q29kZWMuZW5jb2RlYCBhbmQgOm1ldGg6YH5Db2RlYy5kZWNvZGVgIG1ldGhvZHMgb2YgQ29kZWMKKyAgICAgIGluc3RhbmNlcyAoc2VlIDpyZWY6YENvZGVjIEludGVyZmFjZSA8Y29kZWMtb2JqZWN0cz5gKS4KKyAgICAgIFRoZSBmdW5jdGlvbnMgb3IgbWV0aG9kcyBhcmUgZXhwZWN0ZWQgdG8gd29yayBpbiBhIHN0YXRlbGVzcyBtb2RlLgorCisKKyAgIC4uIGF0dHJpYnV0ZTo6IGluY3JlbWVudGFsZW5jb2RlcgorICAgICAgICAgICAgICAgICAgaW5jcmVtZW50YWxkZWNvZGVyCisKKyAgICAgIEluY3JlbWVudGFsIGVuY29kZXIgYW5kIGRlY29kZXIgY2xhc3NlcyBvciBmYWN0b3J5IGZ1bmN0aW9ucy4KKyAgICAgIFRoZXNlIGhhdmUgdG8gcHJvdmlkZSB0aGUgaW50ZXJmYWNlIGRlZmluZWQgYnkgdGhlIGJhc2UgY2xhc3NlcworICAgICAgOmNsYXNzOmBJbmNyZW1lbnRhbEVuY29kZXJgIGFuZCA6Y2xhc3M6YEluY3JlbWVudGFsRGVjb2RlcmAsCisgICAgICByZXNwZWN0aXZlbHkuIEluY3JlbWVudGFsIGNvZGVjcyBjYW4gbWFpbnRhaW4gc3RhdGUuCisKKworICAgLi4gYXR0cmlidXRlOjogc3RyZWFtd3JpdGVyCisgICAgICAgICAgICAgICAgICBzdHJlYW1yZWFkZXIKKworICAgICAgU3RyZWFtIHdyaXRlciBhbmQgcmVhZGVyIGNsYXNzZXMgb3IgZmFjdG9yeSBmdW5jdGlvbnMuIFRoZXNlIGhhdmUgdG8KKyAgICAgIHByb3ZpZGUgdGhlIGludGVyZmFjZSBkZWZpbmVkIGJ5IHRoZSBiYXNlIGNsYXNzZXMKKyAgICAgIDpjbGFzczpgU3RyZWFtV3JpdGVyYCBhbmQgOmNsYXNzOmBTdHJlYW1SZWFkZXJgLCByZXNwZWN0aXZlbHkuCisgICAgICBTdHJlYW0gY29kZWNzIGNhbiBtYWludGFpbiBzdGF0ZS4KKworVG8gc2ltcGxpZnkgYWNjZXNzIHRvIHRoZSB2YXJpb3VzIGNvZGVjIGNvbXBvbmVudHMsIHRoZSBtb2R1bGUgcHJvdmlkZXMKK3RoZXNlIGFkZGl0aW9uYWwgZnVuY3Rpb25zIHdoaWNoIHVzZSA6ZnVuYzpgbG9va3VwYCBmb3IgdGhlIGNvZGVjIGxvb2t1cDoKIAogCiAuLiBmdW5jdGlvbjo6IGdldGVuY29kZXIoZW5jb2RpbmcpCkBAIC0xNzAsOTAgKzE1Miw0MyBAQAogCiAgICBSYWlzZXMgYSA6ZXhjOmBMb29rdXBFcnJvcmAgaW4gY2FzZSB0aGUgZW5jb2RpbmcgY2Fubm90IGJlIGZvdW5kLgogCitDdXN0b20gY29kZWNzIGFyZSBtYWRlIGF2YWlsYWJsZSBieSByZWdpc3RlcmluZyBhIHN1aXRhYmxlIGNvZGVjIHNlYXJjaAorZnVuY3Rpb246CiAKLS4uIGZ1bmN0aW9uOjogcmVnaXN0ZXJfZXJyb3IobmFtZSwgZXJyb3JfaGFuZGxlcikKKy4uIGZ1bmN0aW9uOjogcmVnaXN0ZXIoc2VhcmNoX2Z1bmN0aW9uKQogCi0gICBSZWdpc3RlciB0aGUgZXJyb3IgaGFuZGxpbmcgZnVuY3Rpb24gKmVycm9yX2hhbmRsZXIqIHVuZGVyIHRoZSBuYW1lICpuYW1lKi4KLSAgICplcnJvcl9oYW5kbGVyKiB3aWxsIGJlIGNhbGxlZCBkdXJpbmcgZW5jb2RpbmcgYW5kIGRlY29kaW5nIGluIGNhc2Ugb2YgYW4gZXJyb3IsCi0gICB3aGVuICpuYW1lKiBpcyBzcGVjaWZpZWQgYXMgdGhlIGVycm9ycyBwYXJhbWV0ZXIuCi0KLSAgIEZvciBlbmNvZGluZyAqZXJyb3JfaGFuZGxlciogd2lsbCBiZSBjYWxsZWQgd2l0aCBhIDpleGM6YFVuaWNvZGVFbmNvZGVFcnJvcmAKLSAgIGluc3RhbmNlLCB3aGljaCBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbG9jYXRpb24gb2YgdGhlIGVycm9yLiBUaGUKLSAgIGVycm9yIGhhbmRsZXIgbXVzdCBlaXRoZXIgcmFpc2UgdGhpcyBvciBhIGRpZmZlcmVudCBleGNlcHRpb24gb3IgcmV0dXJuIGEKLSAgIHR1cGxlIHdpdGggYSByZXBsYWNlbWVudCBmb3IgdGhlIHVuZW5jb2RhYmxlIHBhcnQgb2YgdGhlIGlucHV0IGFuZCBhIHBvc2l0aW9uCi0gICB3aGVyZSBlbmNvZGluZyBzaG91bGQgY29udGludWUuIFRoZSByZXBsYWNlbWVudCBtYXkgYmUgZWl0aGVyIDpjbGFzczpgc3RyYCBvcgotICAgOmNsYXNzOmBieXRlc2AuICBJZiB0aGUgcmVwbGFjZW1lbnQgaXMgYnl0ZXMsIHRoZSBlbmNvZGVyIHdpbGwgc2ltcGx5IGNvcHkKLSAgIHRoZW0gaW50byB0aGUgb3V0cHV0IGJ1ZmZlci4gSWYgdGhlIHJlcGxhY2VtZW50IGlzIGEgc3RyaW5nLCB0aGUgZW5jb2RlciB3aWxsCi0gICBlbmNvZGUgdGhlIHJlcGxhY2VtZW50LiAgRW5jb2RpbmcgY29udGludWVzIG9uIG9yaWdpbmFsIGlucHV0IGF0IHRoZQotICAgc3BlY2lmaWVkIHBvc2l0aW9uLiBOZWdhdGl2ZSBwb3NpdGlvbiB2YWx1ZXMgd2lsbCBiZSB0cmVhdGVkIGFzIGJlaW5nCi0gICByZWxhdGl2ZSB0byB0aGUgZW5kIG9mIHRoZSBpbnB1dCBzdHJpbmcuIElmIHRoZSByZXN1bHRpbmcgcG9zaXRpb24gaXMgb3V0IG9mCi0gICBib3VuZCBhbiA6ZXhjOmBJbmRleEVycm9yYCB3aWxsIGJlIHJhaXNlZC4KLQotICAgRGVjb2RpbmcgYW5kIHRyYW5zbGF0aW5nIHdvcmtzIHNpbWlsYXIsIGV4Y2VwdCA6ZXhjOmBVbmljb2RlRGVjb2RlRXJyb3JgIG9yCi0gICA6ZXhjOmBVbmljb2RlVHJhbnNsYXRlRXJyb3JgIHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBoYW5kbGVyIGFuZCB0aGF0IHRoZQotICAgcmVwbGFjZW1lbnQgZnJvbSB0aGUgZXJyb3IgaGFuZGxlciB3aWxsIGJlIHB1dCBpbnRvIHRoZSBvdXRwdXQgZGlyZWN0bHkuCi0KLQotLi4gZnVuY3Rpb246OiBsb29rdXBfZXJyb3IobmFtZSkKLQotICAgUmV0dXJuIHRoZSBlcnJvciBoYW5kbGVyIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCB1bmRlciB0aGUgbmFtZSAqbmFtZSouCi0KLSAgIFJhaXNlcyBhIDpleGM6YExvb2t1cEVycm9yYCBpbiBjYXNlIHRoZSBoYW5kbGVyIGNhbm5vdCBiZSBmb3VuZC4KLQotCi0uLiBmdW5jdGlvbjo6IHN0cmljdF9lcnJvcnMoZXhjZXB0aW9uKQotCi0gICBJbXBsZW1lbnRzIHRoZSBgYHN0cmljdGBgIGVycm9yIGhhbmRsaW5nOiBlYWNoIGVuY29kaW5nIG9yIGRlY29kaW5nIGVycm9yCi0gICByYWlzZXMgYSA6ZXhjOmBVbmljb2RlRXJyb3JgLgotCi0KLS4uIGZ1bmN0aW9uOjogcmVwbGFjZV9lcnJvcnMoZXhjZXB0aW9uKQotCi0gICBJbXBsZW1lbnRzIHRoZSBgYHJlcGxhY2VgYCBlcnJvciBoYW5kbGluZzogbWFsZm9ybWVkIGRhdGEgaXMgcmVwbGFjZWQgd2l0aCBhCi0gICBzdWl0YWJsZSByZXBsYWNlbWVudCBjaGFyYWN0ZXIgc3VjaCBhcyBgYCc/J2BgIGluIGJ5dGVzdHJpbmdzIGFuZAotICAgYGAnXHVmZmZkJ2BgIGluIFVuaWNvZGUgc3RyaW5ncy4KLQotCi0uLiBmdW5jdGlvbjo6IGlnbm9yZV9lcnJvcnMoZXhjZXB0aW9uKQotCi0gICBJbXBsZW1lbnRzIHRoZSBgYGlnbm9yZWBgIGVycm9yIGhhbmRsaW5nOiBtYWxmb3JtZWQgZGF0YSBpcyBpZ25vcmVkIGFuZAotICAgZW5jb2Rpbmcgb3IgZGVjb2RpbmcgaXMgY29udGludWVkIHdpdGhvdXQgZnVydGhlciBub3RpY2UuCi0KLQotLi4gZnVuY3Rpb246OiB4bWxjaGFycmVmcmVwbGFjZV9lcnJvcnMoZXhjZXB0aW9uKQotCi0gICBJbXBsZW1lbnRzIHRoZSBgYHhtbGNoYXJyZWZyZXBsYWNlYGAgZXJyb3IgaGFuZGxpbmcgKGZvciBlbmNvZGluZyBvbmx5KTogdGhlCi0gICB1bmVuY29kYWJsZSBjaGFyYWN0ZXIgaXMgcmVwbGFjZWQgYnkgYW4gYXBwcm9wcmlhdGUgWE1MIGNoYXJhY3RlciByZWZlcmVuY2UuCi0KLQotLi4gZnVuY3Rpb246OiBiYWNrc2xhc2hyZXBsYWNlX2Vycm9ycyhleGNlcHRpb24pCi0KLSAgIEltcGxlbWVudHMgdGhlIGBgYmFja3NsYXNocmVwbGFjZWBgIGVycm9yIGhhbmRsaW5nIChmb3IgZW5jb2Rpbmcgb25seSk6IHRoZQotICAgdW5lbmNvZGFibGUgY2hhcmFjdGVyIGlzIHJlcGxhY2VkIGJ5IGEgYmFja3NsYXNoZWQgZXNjYXBlIHNlcXVlbmNlLgotCi1UbyBzaW1wbGlmeSB3b3JraW5nIHdpdGggZW5jb2RlZCBmaWxlcyBvciBzdHJlYW0sIHRoZSBtb2R1bGUgYWxzbyBkZWZpbmVzIHRoZXNlCi11dGlsaXR5IGZ1bmN0aW9uczoKLQotCi0uLiBmdW5jdGlvbjo6IG9wZW4oZmlsZW5hbWUsIG1vZGVbLCBlbmNvZGluZ1ssIGVycm9yc1ssIGJ1ZmZlcmluZ11dXSkKLQotICAgT3BlbiBhbiBlbmNvZGVkIGZpbGUgdXNpbmcgdGhlIGdpdmVuICptb2RlKiBhbmQgcmV0dXJuIGEgd3JhcHBlZCB2ZXJzaW9uCi0gICBwcm92aWRpbmcgdHJhbnNwYXJlbnQgZW5jb2RpbmcvZGVjb2RpbmcuICBUaGUgZGVmYXVsdCBmaWxlIG1vZGUgaXMgYGAncidgYAotICAgbWVhbmluZyB0byBvcGVuIHRoZSBmaWxlIGluIHJlYWQgbW9kZS4KKyAgIFJlZ2lzdGVyIGEgY29kZWMgc2VhcmNoIGZ1bmN0aW9uLiBTZWFyY2ggZnVuY3Rpb25zIGFyZSBleHBlY3RlZCB0byB0YWtlIG9uZQorICAgYXJndW1lbnQsIGJlaW5nIHRoZSBlbmNvZGluZyBuYW1lIGluIGFsbCBsb3dlciBjYXNlIGxldHRlcnMsIGFuZCByZXR1cm4gYQorICAgOmNsYXNzOmBDb2RlY0luZm9gIG9iamVjdC4gSW4gY2FzZSBhIHNlYXJjaCBmdW5jdGlvbiBjYW5ub3QgZmluZAorICAgYSBnaXZlbiBlbmNvZGluZywgaXQgc2hvdWxkIHJldHVybiBgYE5vbmVgYC4KIAogICAgLi4gbm90ZTo6CiAKLSAgICAgIFRoZSB3cmFwcGVkIHZlcnNpb24ncyBtZXRob2RzIHdpbGwgYWNjZXB0IGFuZCByZXR1cm4gc3RyaW5ncyBvbmx5LiAgQnl0ZXMKLSAgICAgIGFyZ3VtZW50cyB3aWxsIGJlIHJlamVjdGVkLgorICAgICAgU2VhcmNoIGZ1bmN0aW9uIHJlZ2lzdHJhdGlvbiBpcyBub3QgY3VycmVudGx5IHJldmVyc2libGUsCisgICAgICB3aGljaCBtYXkgY2F1c2UgcHJvYmxlbXMgaW4gc29tZSBjYXNlcywgc3VjaCBhcyB1bml0IHRlc3Rpbmcgb3IKKyAgICAgIG1vZHVsZSByZWxvYWRpbmcuCisKK1doaWxlIHRoZSBidWlsdGluIDpmdW5jOmBvcGVuYCBhbmQgdGhlIGFzc29jaWF0ZWQgOm1vZDpgaW9gIG1vZHVsZSBhcmUgdGhlCityZWNvbW1lbmRlZCBhcHByb2FjaCBmb3Igd29ya2luZyB3aXRoIGVuY29kZWQgdGV4dCBmaWxlcywgdGhpcyBtb2R1bGUKK3Byb3ZpZGVzIGFkZGl0aW9uYWwgdXRpbGl0eSBmdW5jdGlvbnMgYW5kIGNsYXNzZXMgdGhhdCBhbGxvdyB0aGUgdXNlIG9mIGEKK3dpZGVyIHJhbmdlIG9mIGNvZGVjcyB3aGVuIHdvcmtpbmcgd2l0aCBiaW5hcnkgZmlsZXM6CisKKy4uIGZ1bmN0aW9uOjogb3BlbihmaWxlbmFtZSwgbW9kZT0ncicsIGVuY29kaW5nPU5vbmUsIGVycm9ycz0nc3RyaWN0JywgYnVmZmVyaW5nPTEpCisKKyAgIE9wZW4gYW4gZW5jb2RlZCBmaWxlIHVzaW5nIHRoZSBnaXZlbiAqbW9kZSogYW5kIHJldHVybiBhbiBpbnN0YW5jZSBvZgorICAgOmNsYXNzOmBTdHJlYW1SZWFkZXJXcml0ZXJgLCBwcm92aWRpbmcgdHJhbnNwYXJlbnQgZW5jb2RpbmcvZGVjb2RpbmcuCisgICBUaGUgZGVmYXVsdCBmaWxlIG1vZGUgaXMgYGAncidgYCwgbWVhbmluZyB0byBvcGVuIHRoZSBmaWxlIGluIHJlYWQgbW9kZS4KIAogICAgLi4gbm90ZTo6CiAKLSAgICAgIEZpbGVzIGFyZSBhbHdheXMgb3BlbmVkIGluIGJpbmFyeSBtb2RlLCBldmVuIGlmIG5vIGJpbmFyeSBtb2RlIHdhcwotICAgICAgc3BlY2lmaWVkLiAgVGhpcyBpcyBkb25lIHRvIGF2b2lkIGRhdGEgbG9zcyBkdWUgdG8gZW5jb2RpbmdzIHVzaW5nIDgtYml0Ci0gICAgICB2YWx1ZXMuICBUaGlzIG1lYW5zIHRoYXQgbm8gYXV0b21hdGljIGNvbnZlcnNpb24gb2YgYGBiJ1xuJ2BgIGlzIGRvbmUKLSAgICAgIG9uIHJlYWRpbmcgYW5kIHdyaXRpbmcuCisgICAgICBVbmRlcmx5aW5nIGVuY29kZWQgZmlsZXMgYXJlIGFsd2F5cyBvcGVuZWQgaW4gYmluYXJ5IG1vZGUuCisgICAgICBObyBhdXRvbWF0aWMgY29udmVyc2lvbiBvZiBgYCdcbidgYCBpcyBkb25lIG9uIHJlYWRpbmcgYW5kIHdyaXRpbmcuCisgICAgICBUaGUgKm1vZGUqIGFyZ3VtZW50IG1heSBiZSBhbnkgYmluYXJ5IG1vZGUgYWNjZXB0YWJsZSB0byB0aGUgYnVpbHQtaW4KKyAgICAgIDpmdW5jOmBvcGVuYCBmdW5jdGlvbjsgdGhlIGBgJ2InYGAgaXMgYXV0b21hdGljYWxseSBhZGRlZC4KIAogICAgKmVuY29kaW5nKiBzcGVjaWZpZXMgdGhlIGVuY29kaW5nIHdoaWNoIGlzIHRvIGJlIHVzZWQgZm9yIHRoZSBmaWxlLgorICAgQW55IGVuY29kaW5nIHRoYXQgZW5jb2RlcyB0byBhbmQgZGVjb2RlcyBmcm9tIGJ5dGVzIGlzIGFsbG93ZWQsIGFuZAorICAgdGhlIGRhdGEgdHlwZXMgc3VwcG9ydGVkIGJ5IHRoZSBmaWxlIG1ldGhvZHMgZGVwZW5kIG9uIHRoZSBjb2RlYyB1c2VkLgogCiAgICAqZXJyb3JzKiBtYXkgYmUgZ2l2ZW4gdG8gZGVmaW5lIHRoZSBlcnJvciBoYW5kbGluZy4gSXQgZGVmYXVsdHMgdG8gYGAnc3RyaWN0J2BgCiAgICB3aGljaCBjYXVzZXMgYSA6ZXhjOmBWYWx1ZUVycm9yYCB0byBiZSByYWlzZWQgaW4gY2FzZSBhbiBlbmNvZGluZyBlcnJvciBvY2N1cnMuCkBAIC0yNjQsMTIgKzE5OSwxNSBAQAogCiAuLiBmdW5jdGlvbjo6IEVuY29kZWRGaWxlKGZpbGUsIGRhdGFfZW5jb2RpbmcsIGZpbGVfZW5jb2Rpbmc9Tm9uZSwgZXJyb3JzPSdzdHJpY3QnKQogCi0gICBSZXR1cm4gYSB3cmFwcGVkIHZlcnNpb24gb2YgZmlsZSB3aGljaCBwcm92aWRlcyB0cmFuc3BhcmVudCBlbmNvZGluZwotICAgdHJhbnNsYXRpb24uCisgICBSZXR1cm4gYSA6Y2xhc3M6YFN0cmVhbVJlY29kZXJgIGluc3RhbmNlLCBhIHdyYXBwZWQgdmVyc2lvbiBvZiAqZmlsZSoKKyAgIHdoaWNoIHByb3ZpZGVzIHRyYW5zcGFyZW50IHRyYW5zY29kaW5nLiBUaGUgb3JpZ2luYWwgZmlsZSBpcyBjbG9zZWQKKyAgIHdoZW4gdGhlIHdyYXBwZWQgdmVyc2lvbiBpcyBjbG9zZWQuCiAKLSAgIEJ5dGVzIHdyaXR0ZW4gdG8gdGhlIHdyYXBwZWQgZmlsZSBhcmUgaW50ZXJwcmV0ZWQgYWNjb3JkaW5nIHRvIHRoZSBnaXZlbgotICAgKmRhdGFfZW5jb2RpbmcqIGFuZCB0aGVuIHdyaXR0ZW4gdG8gdGhlIG9yaWdpbmFsIGZpbGUgYXMgYnl0ZXMgdXNpbmcgdGhlCi0gICAqZmlsZV9lbmNvZGluZyouCisgICBEYXRhIHdyaXR0ZW4gdG8gdGhlIHdyYXBwZWQgZmlsZSBpcyBkZWNvZGVkIGFjY29yZGluZyB0byB0aGUgZ2l2ZW4KKyAgICpkYXRhX2VuY29kaW5nKiBhbmQgdGhlbiB3cml0dGVuIHRvIHRoZSBvcmlnaW5hbCBmaWxlIGFzIGJ5dGVzIHVzaW5nCisgICAqZmlsZV9lbmNvZGluZyouIEJ5dGVzIHJlYWQgZnJvbSB0aGUgb3JpZ2luYWwgZmlsZSBhcmUgZGVjb2RlZAorICAgYWNjb3JkaW5nIHRvICpmaWxlX2VuY29kaW5nKiwgYW5kIHRoZSByZXN1bHQgaXMgZW5jb2RlZAorICAgdXNpbmcgKmRhdGFfZW5jb2RpbmcqLgogCiAgICBJZiAqZmlsZV9lbmNvZGluZyogaXMgbm90IGdpdmVuLCBpdCBkZWZhdWx0cyB0byAqZGF0YV9lbmNvZGluZyouCiAKQEAgLTI4MSwxNCArMjE5LDE2IEBACiAuLiBmdW5jdGlvbjo6IGl0ZXJlbmNvZGUoaXRlcmF0b3IsIGVuY29kaW5nLCBlcnJvcnM9J3N0cmljdCcsICoqa3dhcmdzKQogCiAgICBVc2VzIGFuIGluY3JlbWVudGFsIGVuY29kZXIgdG8gaXRlcmF0aXZlbHkgZW5jb2RlIHRoZSBpbnB1dCBwcm92aWRlZCBieQotICAgKml0ZXJhdG9yKi4gVGhpcyBmdW5jdGlvbiBpcyBhIDp0ZXJtOmBnZW5lcmF0b3JgLiAgKmVycm9ycyogKGFzIHdlbGwgYXMgYW55CisgICAqaXRlcmF0b3IqLiBUaGlzIGZ1bmN0aW9uIGlzIGEgOnRlcm06YGdlbmVyYXRvcmAuCisgICBUaGUgKmVycm9ycyogYXJndW1lbnQgKGFzIHdlbGwgYXMgYW55CiAgICBvdGhlciBrZXl3b3JkIGFyZ3VtZW50KSBpcyBwYXNzZWQgdGhyb3VnaCB0byB0aGUgaW5jcmVtZW50YWwgZW5jb2Rlci4KIAogCiAuLiBmdW5jdGlvbjo6IGl0ZXJkZWNvZGUoaXRlcmF0b3IsIGVuY29kaW5nLCBlcnJvcnM9J3N0cmljdCcsICoqa3dhcmdzKQogCiAgICBVc2VzIGFuIGluY3JlbWVudGFsIGRlY29kZXIgdG8gaXRlcmF0aXZlbHkgZGVjb2RlIHRoZSBpbnB1dCBwcm92aWRlZCBieQotICAgKml0ZXJhdG9yKi4gVGhpcyBmdW5jdGlvbiBpcyBhIDp0ZXJtOmBnZW5lcmF0b3JgLiAgKmVycm9ycyogKGFzIHdlbGwgYXMgYW55CisgICAqaXRlcmF0b3IqLiBUaGlzIGZ1bmN0aW9uIGlzIGEgOnRlcm06YGdlbmVyYXRvcmAuCisgICBUaGUgKmVycm9ycyogYXJndW1lbnQgKGFzIHdlbGwgYXMgYW55CiAgICBvdGhlciBrZXl3b3JkIGFyZ3VtZW50KSBpcyBwYXNzZWQgdGhyb3VnaCB0byB0aGUgaW5jcmVtZW50YWwgZGVjb2Rlci4KIAogCkBAIC0zMDcsOSArMjQ3LDEwIEBACiAgICAgICAgICAgQk9NX1VURjMyX0JFCiAgICAgICAgICAgQk9NX1VURjMyX0xFCiAKLSAgIFRoZXNlIGNvbnN0YW50cyBkZWZpbmUgdmFyaW91cyBlbmNvZGluZ3Mgb2YgdGhlIFVuaWNvZGUgYnl0ZSBvcmRlciBtYXJrIChCT00pCi0gICB1c2VkIGluIFVURi0xNiBhbmQgVVRGLTMyIGRhdGEgc3RyZWFtcyB0byBpbmRpY2F0ZSB0aGUgYnl0ZSBvcmRlciB1c2VkIGluIHRoZQotICAgc3RyZWFtIG9yIGZpbGUgYW5kIGluIFVURi04IGFzIGEgVW5pY29kZSBzaWduYXR1cmUuIDpjb25zdDpgQk9NX1VURjE2YCBpcyBlaXRoZXIKKyAgIFRoZXNlIGNvbnN0YW50cyBkZWZpbmUgdmFyaW91cyBieXRlIHNlcXVlbmNlcywKKyAgIGJlaW5nIFVuaWNvZGUgYnl0ZSBvcmRlciBtYXJrcyAoQk9NcykgZm9yIHNldmVyYWwgZW5jb2RpbmdzLiBUaGV5IGFyZQorICAgdXNlZCBpbiBVVEYtMTYgYW5kIFVURi0zMiBkYXRhIHN0cmVhbXMgdG8gaW5kaWNhdGUgdGhlIGJ5dGUgb3JkZXIgdXNlZCwKKyAgIGFuZCBpbiBVVEYtOCBhcyBhIFVuaWNvZGUgc2lnbmF0dXJlLiA6Y29uc3Q6YEJPTV9VVEYxNmAgaXMgZWl0aGVyCiAgICA6Y29uc3Q6YEJPTV9VVEYxNl9CRWAgb3IgOmNvbnN0OmBCT01fVVRGMTZfTEVgIGRlcGVuZGluZyBvbiB0aGUgcGxhdGZvcm0ncwogICAgbmF0aXZlIGJ5dGUgb3JkZXIsIDpjb25zdDpgQk9NYCBpcyBhbiBhbGlhcyBmb3IgOmNvbnN0OmBCT01fVVRGMTZgLAogICAgOmNvbnN0OmBCT01fTEVgIGZvciA6Y29uc3Q6YEJPTV9VVEYxNl9MRWAgYW5kIDpjb25zdDpgQk9NX0JFYCBmb3IKQEAgLTMyMywyMCArMjY0LDI1IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0KIAogVGhlIDptb2Q6YGNvZGVjc2AgbW9kdWxlIGRlZmluZXMgYSBzZXQgb2YgYmFzZSBjbGFzc2VzIHdoaWNoIGRlZmluZSB0aGUKLWludGVyZmFjZSBhbmQgY2FuIGFsc28gYmUgdXNlZCB0byBlYXNpbHkgd3JpdGUgeW91ciBvd24gY29kZWNzIGZvciB1c2UgaW4KLVB5dGhvbi4KK2ludGVyZmFjZXMgZm9yIHdvcmtpbmcgd2l0aCBjb2RlYyBvYmplY3RzLCBhbmQgY2FuIGFsc28gYmUgdXNlZCBhcyB0aGUgYmFzaXMKK2ZvciBjdXN0b20gY29kZWMgaW1wbGVtZW50YXRpb25zLgogCiBFYWNoIGNvZGVjIGhhcyB0byBkZWZpbmUgZm91ciBpbnRlcmZhY2VzIHRvIG1ha2UgaXQgdXNhYmxlIGFzIGNvZGVjIGluIFB5dGhvbjoKIHN0YXRlbGVzcyBlbmNvZGVyLCBzdGF0ZWxlc3MgZGVjb2Rlciwgc3RyZWFtIHJlYWRlciBhbmQgc3RyZWFtIHdyaXRlci4gVGhlCiBzdHJlYW0gcmVhZGVyIGFuZCB3cml0ZXJzIHR5cGljYWxseSByZXVzZSB0aGUgc3RhdGVsZXNzIGVuY29kZXIvZGVjb2RlciB0bwotaW1wbGVtZW50IHRoZSBmaWxlIHByb3RvY29scy4KK2ltcGxlbWVudCB0aGUgZmlsZSBwcm90b2NvbHMuIENvZGVjIGF1dGhvcnMgYWxzbyBuZWVkIHRvIGRlZmluZSBob3cgdGhlCitjb2RlYyB3aWxsIGhhbmRsZSBlbmNvZGluZyBhbmQgZGVjb2RpbmcgZXJyb3JzLgogCi1UaGUgOmNsYXNzOmBDb2RlY2AgY2xhc3MgZGVmaW5lcyB0aGUgaW50ZXJmYWNlIGZvciBzdGF0ZWxlc3MgZW5jb2RlcnMvZGVjb2RlcnMuCiAKLVRvIHNpbXBsaWZ5IGFuZCBzdGFuZGFyZGl6ZSBlcnJvciBoYW5kbGluZywgdGhlIDptZXRoOmB+Q29kZWMuZW5jb2RlYCBhbmQKLTptZXRoOmB+Q29kZWMuZGVjb2RlYCBtZXRob2RzIG1heSBpbXBsZW1lbnQgZGlmZmVyZW50IGVycm9yIGhhbmRsaW5nIHNjaGVtZXMgYnkKLXByb3ZpZGluZyB0aGUgKmVycm9ycyogc3RyaW5nIGFyZ3VtZW50LiAgVGhlIGZvbGxvd2luZyBzdHJpbmcgdmFsdWVzIGFyZSBkZWZpbmVkCi1hbmQgaW1wbGVtZW50ZWQgYnkgYWxsIHN0YW5kYXJkIFB5dGhvbiBjb2RlY3M6CisuLiBfZXJyb3ItaGFuZGxlcnM6CisKK0Vycm9yIEhhbmRsZXJzCiteXl5eXl5eXl5eXl5eXgorCitUbyBzaW1wbGlmeSBhbmQgc3RhbmRhcmRpemUgZXJyb3IgaGFuZGxpbmcsCitjb2RlY3MgbWF5IGltcGxlbWVudCBkaWZmZXJlbnQgZXJyb3IgaGFuZGxpbmcgc2NoZW1lcyBieQorYWNjZXB0aW5nIHRoZSAqZXJyb3JzKiBzdHJpbmcgYXJndW1lbnQuICBUaGUgZm9sbG93aW5nIHN0cmluZyB2YWx1ZXMgYXJlCitkZWZpbmVkIGFuZCBpbXBsZW1lbnRlZCBieSBhbGwgc3RhbmRhcmQgUHl0aG9uIGNvZGVjczoKIAogLi4gdGFidWxhcmNvbHVtbnM6OiB8bHxMfAogCkBAIC0zNDQsNjMgKzI5MCwxNTQgQEAKIHwgVmFsdWUgICAgICAgICAgICAgICAgICAgfCBNZWFuaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogKz09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCiB8IGBgJ3N0cmljdCdgYCAgICAgICAgICAgIHwgUmFpc2UgOmV4YzpgVW5pY29kZUVycm9yYCAob3IgYSBzdWJjbGFzcyk7ICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgICAgfCB0aGlzIGlzIHRoZSBkZWZhdWx0LiAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICB8IHRoaXMgaXMgdGhlIGRlZmF1bHQuICBJbXBsZW1lbnRlZCBpbiAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgOmZ1bmM6YHN0cmljdF9lcnJvcnNgLiAgICAgICAgICAgICAgICAgICAgICAgIHwKICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCBgYCdpZ25vcmUnYGAgICAgICAgICAgICB8IElnbm9yZSB0aGUgY2hhcmFjdGVyIGFuZCBjb250aW51ZSB3aXRoIHRoZSAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgICAgIHwgbmV4dC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgYGAnaWdub3JlJ2BgICAgICAgICAgICAgfCBJZ25vcmUgdGhlIG1hbGZvcm1lZCBkYXRhIGFuZCBjb250aW51ZSAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICB8IHdpdGhvdXQgZnVydGhlciBub3RpY2UuICBJbXBsZW1lbnRlZCBpbiAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgOmZ1bmM6YGlnbm9yZV9lcnJvcnNgLiAgICAgICAgICAgICAgICAgICAgICAgIHwKICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCitUaGUgZm9sbG93aW5nIGVycm9yIGhhbmRsZXJzIGFyZSBvbmx5IGFwcGxpY2FibGUgdG8KKzp0ZXJtOmB0ZXh0IGVuY29kaW5ncyA8dGV4dCBlbmNvZGluZz5gOgorCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVmFsdWUgICAgICAgICAgICAgICAgICAgfCBNZWFuaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKz09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCiB8IGBgJ3JlcGxhY2UnYGAgICAgICAgICAgIHwgUmVwbGFjZSB3aXRoIGEgc3VpdGFibGUgcmVwbGFjZW1lbnQgICAgICAgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgICAgfCBjaGFyYWN0ZXI7IFB5dGhvbiB3aWxsIHVzZSB0aGUgb2ZmaWNpYWwgICAgICAgfAotfCAgICAgICAgICAgICAgICAgICAgICAgICB8IFUrRkZGRCBSRVBMQUNFTUVOVCBDSEFSQUNURVIgZm9yIHRoZSBidWlsdC1pbiB8Ci18ICAgICAgICAgICAgICAgICAgICAgICAgIHwgVW5pY29kZSBjb2RlY3Mgb24gZGVjb2RpbmcgYW5kICc/JyBvbiAgICAgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgICAgfCBlbmNvZGluZy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICB8IG1hcmtlcjsgUHl0aG9uIHdpbGwgdXNlIHRoZSBvZmZpY2lhbCAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgYGBVK0ZGRkRgYCBSRVBMQUNFTUVOVCBDSEFSQUNURVIgZm9yIHRoZSAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgfCBidWlsdC1pbiBjb2RlY3Mgb24gZGVjb2RpbmcsIGFuZCAnPycgb24gICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICB8IGVuY29kaW5nLiAgSW1wbGVtZW50ZWQgaW4gICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgOmZ1bmM6YHJlcGxhY2VfZXJyb3JzYC4gICAgICAgICAgICAgICAgICAgICAgIHwKICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogfCBgYCd4bWxjaGFycmVmcmVwbGFjZSdgYCB8IFJlcGxhY2Ugd2l0aCB0aGUgYXBwcm9wcmlhdGUgWE1MIGNoYXJhY3RlciAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgICAgIHwgcmVmZXJlbmNlIChvbmx5IGZvciBlbmNvZGluZykuICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgfCByZWZlcmVuY2UgKG9ubHkgZm9yIGVuY29kaW5nKS4gIEltcGxlbWVudGVkICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICB8IGluIDpmdW5jOmB4bWxjaGFycmVmcmVwbGFjZV9lcnJvcnNgLiAgICAgICAgICB8CiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIHwgYGAnYmFja3NsYXNocmVwbGFjZSdgYCAgfCBSZXBsYWNlIHdpdGggYmFja3NsYXNoZWQgZXNjYXBlIHNlcXVlbmNlcyAgICAgfAotfCAgICAgICAgICAgICAgICAgICAgICAgICB8IChvbmx5IGZvciBlbmNvZGluZykuICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgKG9ubHkgZm9yIGVuY29kaW5nKS4gIEltcGxlbWVudGVkIGluICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgfCA6ZnVuYzpgYmFja3NsYXNocmVwbGFjZV9lcnJvcnNgLiAgICAgICAgICAgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi18IGBgJ3N1cnJvZ2F0ZWVzY2FwZSdgYCAgIHwgUmVwbGFjZSBieXRlIHdpdGggc3Vycm9nYXRlIFUrREN4eCwgYXMgZGVmaW5lZHwKLXwgICAgICAgICAgICAgICAgICAgICAgICAgfCBpbiA6cGVwOmAzODNgLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCBgYCdzdXJyb2dhdGVlc2NhcGUnYGAgICB8IE9uIGRlY29kaW5nLCByZXBsYWNlIGJ5dGUgd2l0aCBpbmRpdmlkdWFsICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgc3Vycm9nYXRlIGNvZGUgcmFuZ2luZyBmcm9tIGBgVStEQzgwYGAgdG8gICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgfCBgYFUrRENGRmBgLiAgVGhpcyBjb2RlIHdpbGwgdGhlbiBiZSB0dXJuZWQgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICB8IGJhY2sgaW50byB0aGUgc2FtZSBieXRlIHdoZW4gdGhlICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgYGAnc3Vycm9nYXRlZXNjYXBlJ2BgIGVycm9yIGhhbmRsZXIgaXMgdXNlZCAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgfCB3aGVuIGVuY29kaW5nIHRoZSBkYXRhLiAgKFNlZSA6cGVwOmAzODNgIGZvciAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICB8IG1vcmUuKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIAotSW4gYWRkaXRpb24sIHRoZSBmb2xsb3dpbmcgZXJyb3IgaGFuZGxlcnMgYXJlIHNwZWNpZmljIHRvIGEgc2luZ2xlIGNvZGVjOgorSW4gYWRkaXRpb24sIHRoZSBmb2xsb3dpbmcgZXJyb3IgaGFuZGxlciBpcyBzcGVjaWZpYyB0byB0aGUgZ2l2ZW4gY29kZWNzOgogCi0rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLXwgVmFsdWUgICAgICAgICAgICAgfCBDb2RlYyAgIHwgTWVhbmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotKz09PT09PT09PT09PT09PT09PT0rPT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCi18YGAnc3Vycm9nYXRlcGFzcydgYHwgdXRmLTggICB8IEFsbG93IGVuY29kaW5nIGFuZCBkZWNvZGluZyBvZiBzdXJyb2dhdGUgIHwKLXwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHwgY29kZXMgaW4gVVRGLTguICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisrLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVmFsdWUgICAgICAgICAgICAgfCBDb2RlY3MgICAgICAgICAgICAgICAgIHwgTWVhbmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKz09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCit8YGAnc3Vycm9nYXRlcGFzcydgYHwgdXRmLTgsIHV0Zi0xNiwgdXRmLTMyLCB8IEFsbG93IGVuY29kaW5nIGFuZCBkZWNvZGluZyBvZiBzdXJyb2dhdGUgIHwKK3wgICAgICAgICAgICAgICAgICAgfCB1dGYtMTYtYmUsIHV0Zi0xNi1sZSwgIHwgY29kZXMuICBUaGVzZSBjb2RlY3Mgbm9ybWFsbHkgdHJlYXQgdGhlICAgfAorfCAgICAgICAgICAgICAgICAgICB8IHV0Zi0zMi1iZSwgdXRmLTMyLWxlICAgfCBwcmVzZW5jZSBvZiBzdXJyb2dhdGVzIGFzIGFuIGVycm9yLiAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIAogLi4gdmVyc2lvbmFkZGVkOjogMy4xCiAgICBUaGUgYGAnc3Vycm9nYXRlZXNjYXBlJ2BgIGFuZCBgYCdzdXJyb2dhdGVwYXNzJ2BgIGVycm9yIGhhbmRsZXJzLgogCi1UaGUgc2V0IG9mIGFsbG93ZWQgdmFsdWVzIGNhbiBiZSBleHRlbmRlZCB2aWEgOm1ldGg6YHJlZ2lzdGVyX2Vycm9yYC4KKy4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICBUaGUgYGAnc3Vycm9nYXRlcGFzcydgYCBlcnJvciBoYW5kbGVycyBub3cgd29ya3Mgd2l0aCB1dGYtMTZcKiBhbmQgdXRmLTMyXCogY29kZWNzLgorCitUaGUgc2V0IG9mIGFsbG93ZWQgdmFsdWVzIGNhbiBiZSBleHRlbmRlZCBieSByZWdpc3RlcmluZyBhIG5ldyBuYW1lZCBlcnJvcgoraGFuZGxlcjoKKworLi4gZnVuY3Rpb246OiByZWdpc3Rlcl9lcnJvcihuYW1lLCBlcnJvcl9oYW5kbGVyKQorCisgICBSZWdpc3RlciB0aGUgZXJyb3IgaGFuZGxpbmcgZnVuY3Rpb24gKmVycm9yX2hhbmRsZXIqIHVuZGVyIHRoZSBuYW1lICpuYW1lKi4KKyAgIFRoZSAqZXJyb3JfaGFuZGxlciogYXJndW1lbnQgd2lsbCBiZSBjYWxsZWQgZHVyaW5nIGVuY29kaW5nIGFuZCBkZWNvZGluZworICAgaW4gY2FzZSBvZiBhbiBlcnJvciwgd2hlbiAqbmFtZSogaXMgc3BlY2lmaWVkIGFzIHRoZSBlcnJvcnMgcGFyYW1ldGVyLgorCisgICBGb3IgZW5jb2RpbmcsICplcnJvcl9oYW5kbGVyKiB3aWxsIGJlIGNhbGxlZCB3aXRoIGEgOmV4YzpgVW5pY29kZUVuY29kZUVycm9yYAorICAgaW5zdGFuY2UsIHdoaWNoIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSBsb2NhdGlvbiBvZiB0aGUgZXJyb3IuIFRoZQorICAgZXJyb3IgaGFuZGxlciBtdXN0IGVpdGhlciByYWlzZSB0aGlzIG9yIGEgZGlmZmVyZW50IGV4Y2VwdGlvbiwgb3IgcmV0dXJuIGEKKyAgIHR1cGxlIHdpdGggYSByZXBsYWNlbWVudCBmb3IgdGhlIHVuZW5jb2RhYmxlIHBhcnQgb2YgdGhlIGlucHV0IGFuZCBhIHBvc2l0aW9uCisgICB3aGVyZSBlbmNvZGluZyBzaG91bGQgY29udGludWUuIFRoZSByZXBsYWNlbWVudCBtYXkgYmUgZWl0aGVyIDpjbGFzczpgc3RyYCBvcgorICAgOmNsYXNzOmBieXRlc2AuICBJZiB0aGUgcmVwbGFjZW1lbnQgaXMgYnl0ZXMsIHRoZSBlbmNvZGVyIHdpbGwgc2ltcGx5IGNvcHkKKyAgIHRoZW0gaW50byB0aGUgb3V0cHV0IGJ1ZmZlci4gSWYgdGhlIHJlcGxhY2VtZW50IGlzIGEgc3RyaW5nLCB0aGUgZW5jb2RlciB3aWxsCisgICBlbmNvZGUgdGhlIHJlcGxhY2VtZW50LiAgRW5jb2RpbmcgY29udGludWVzIG9uIG9yaWdpbmFsIGlucHV0IGF0IHRoZQorICAgc3BlY2lmaWVkIHBvc2l0aW9uLiBOZWdhdGl2ZSBwb3NpdGlvbiB2YWx1ZXMgd2lsbCBiZSB0cmVhdGVkIGFzIGJlaW5nCisgICByZWxhdGl2ZSB0byB0aGUgZW5kIG9mIHRoZSBpbnB1dCBzdHJpbmcuIElmIHRoZSByZXN1bHRpbmcgcG9zaXRpb24gaXMgb3V0IG9mCisgICBib3VuZCBhbiA6ZXhjOmBJbmRleEVycm9yYCB3aWxsIGJlIHJhaXNlZC4KKworICAgRGVjb2RpbmcgYW5kIHRyYW5zbGF0aW5nIHdvcmtzIHNpbWlsYXJseSwgZXhjZXB0IDpleGM6YFVuaWNvZGVEZWNvZGVFcnJvcmAgb3IKKyAgIDpleGM6YFVuaWNvZGVUcmFuc2xhdGVFcnJvcmAgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGhhbmRsZXIgYW5kIHRoYXQgdGhlCisgICByZXBsYWNlbWVudCBmcm9tIHRoZSBlcnJvciBoYW5kbGVyIHdpbGwgYmUgcHV0IGludG8gdGhlIG91dHB1dCBkaXJlY3RseS4KKworCitQcmV2aW91c2x5IHJlZ2lzdGVyZWQgZXJyb3IgaGFuZGxlcnMgKGluY2x1ZGluZyB0aGUgc3RhbmRhcmQgZXJyb3IgaGFuZGxlcnMpCitjYW4gYmUgbG9va2VkIHVwIGJ5IG5hbWU6CisKKy4uIGZ1bmN0aW9uOjogbG9va3VwX2Vycm9yKG5hbWUpCisKKyAgIFJldHVybiB0aGUgZXJyb3IgaGFuZGxlciBwcmV2aW91c2x5IHJlZ2lzdGVyZWQgdW5kZXIgdGhlIG5hbWUgKm5hbWUqLgorCisgICBSYWlzZXMgYSA6ZXhjOmBMb29rdXBFcnJvcmAgaW4gY2FzZSB0aGUgaGFuZGxlciBjYW5ub3QgYmUgZm91bmQuCisKK1RoZSBmb2xsb3dpbmcgc3RhbmRhcmQgZXJyb3IgaGFuZGxlcnMgYXJlIGFsc28gbWFkZSBhdmFpbGFibGUgYXMgbW9kdWxlIGxldmVsCitmdW5jdGlvbnM6CisKKy4uIGZ1bmN0aW9uOjogc3RyaWN0X2Vycm9ycyhleGNlcHRpb24pCisKKyAgIEltcGxlbWVudHMgdGhlIGBgJ3N0cmljdCdgYCBlcnJvciBoYW5kbGluZzogZWFjaCBlbmNvZGluZyBvcgorICAgZGVjb2RpbmcgZXJyb3IgcmFpc2VzIGEgOmV4YzpgVW5pY29kZUVycm9yYC4KKworCisuLiBmdW5jdGlvbjo6IHJlcGxhY2VfZXJyb3JzKGV4Y2VwdGlvbikKKworICAgSW1wbGVtZW50cyB0aGUgYGAncmVwbGFjZSdgYCBlcnJvciBoYW5kbGluZyAoZm9yIDp0ZXJtOmB0ZXh0IGVuY29kaW5ncworICAgPHRleHQgZW5jb2Rpbmc+YCBvbmx5KTogc3Vic3RpdHV0ZXMgYGAnPydgYCBmb3IgZW5jb2RpbmcgZXJyb3JzCisgICAodG8gYmUgZW5jb2RlZCBieSB0aGUgY29kZWMpLCBhbmQgYGAnXHVmZmZkJ2BgICh0aGUgVW5pY29kZSByZXBsYWNlbWVudAorICAgY2hhcmFjdGVyKSBmb3IgZGVjb2RpbmcgZXJyb3JzLgorCisKKy4uIGZ1bmN0aW9uOjogaWdub3JlX2Vycm9ycyhleGNlcHRpb24pCisKKyAgIEltcGxlbWVudHMgdGhlIGBgJ2lnbm9yZSdgYCBlcnJvciBoYW5kbGluZzogbWFsZm9ybWVkIGRhdGEgaXMgaWdub3JlZCBhbmQKKyAgIGVuY29kaW5nIG9yIGRlY29kaW5nIGlzIGNvbnRpbnVlZCB3aXRob3V0IGZ1cnRoZXIgbm90aWNlLgorCisKKy4uIGZ1bmN0aW9uOjogeG1sY2hhcnJlZnJlcGxhY2VfZXJyb3JzKGV4Y2VwdGlvbikKKworICAgSW1wbGVtZW50cyB0aGUgYGAneG1sY2hhcnJlZnJlcGxhY2UnYGAgZXJyb3IgaGFuZGxpbmcgKGZvciBlbmNvZGluZyB3aXRoCisgICA6dGVybTpgdGV4dCBlbmNvZGluZ3MgPHRleHQgZW5jb2Rpbmc+YCBvbmx5KTogdGhlCisgICB1bmVuY29kYWJsZSBjaGFyYWN0ZXIgaXMgcmVwbGFjZWQgYnkgYW4gYXBwcm9wcmlhdGUgWE1MIGNoYXJhY3RlciByZWZlcmVuY2UuCisKKworLi4gZnVuY3Rpb246OiBiYWNrc2xhc2hyZXBsYWNlX2Vycm9ycyhleGNlcHRpb24pCisKKyAgIEltcGxlbWVudHMgdGhlIGBgJ2JhY2tzbGFzaHJlcGxhY2UnYGAgZXJyb3IgaGFuZGxpbmcgKGZvciBlbmNvZGluZyB3aXRoCisgICA6dGVybTpgdGV4dCBlbmNvZGluZ3MgPHRleHQgZW5jb2Rpbmc+YCBvbmx5KTogdGhlCisgICB1bmVuY29kYWJsZSBjaGFyYWN0ZXIgaXMgcmVwbGFjZWQgYnkgYSBiYWNrc2xhc2hlZCBlc2NhcGUgc2VxdWVuY2UuCiAKIAogLi4gX2NvZGVjLW9iamVjdHM6CiAKLUNvZGVjIE9iamVjdHMKLV5eXl5eXl5eXl5eXl4KK1N0YXRlbGVzcyBFbmNvZGluZyBhbmQgRGVjb2RpbmcKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KIAotVGhlIDpjbGFzczpgQ29kZWNgIGNsYXNzIGRlZmluZXMgdGhlc2UgbWV0aG9kcyB3aGljaCBhbHNvIGRlZmluZSB0aGUgZnVuY3Rpb24KLWludGVyZmFjZXMgb2YgdGhlIHN0YXRlbGVzcyBlbmNvZGVyIGFuZCBkZWNvZGVyOgorVGhlIGJhc2UgOmNsYXNzOmBDb2RlY2AgY2xhc3MgZGVmaW5lcyB0aGVzZSBtZXRob2RzIHdoaWNoIGFsc28gZGVmaW5lIHRoZQorZnVuY3Rpb24gaW50ZXJmYWNlcyBvZiB0aGUgc3RhdGVsZXNzIGVuY29kZXIgYW5kIGRlY29kZXI6CiAKIAogLi4gbWV0aG9kOjogQ29kZWMuZW5jb2RlKGlucHV0WywgZXJyb3JzXSkKIAogICAgRW5jb2RlcyB0aGUgb2JqZWN0ICppbnB1dCogYW5kIHJldHVybnMgYSB0dXBsZSAob3V0cHV0IG9iamVjdCwgbGVuZ3RoIGNvbnN1bWVkKS4KLSAgIEVuY29kaW5nIGNvbnZlcnRzIGEgc3RyaW5nIG9iamVjdCB0byBhIGJ5dGVzIG9iamVjdCB1c2luZyBhIHBhcnRpY3VsYXIKKyAgIEZvciBpbnN0YW5jZSwgOnRlcm06YHRleHQgZW5jb2RpbmdgIGNvbnZlcnRzCisgICBhIHN0cmluZyBvYmplY3QgdG8gYSBieXRlcyBvYmplY3QgdXNpbmcgYSBwYXJ0aWN1bGFyCiAgICBjaGFyYWN0ZXIgc2V0IGVuY29kaW5nIChlLmcuLCBgYGNwMTI1MmBgIG9yIGBgaXNvLTg4NTktMWBgKS4KIAotICAgKmVycm9ycyogZGVmaW5lcyB0aGUgZXJyb3IgaGFuZGxpbmcgdG8gYXBwbHkuIEl0IGRlZmF1bHRzIHRvIGBgJ3N0cmljdCdgYAotICAgaGFuZGxpbmcuCisgICBUaGUgKmVycm9ycyogYXJndW1lbnQgZGVmaW5lcyB0aGUgZXJyb3IgaGFuZGxpbmcgdG8gYXBwbHkuCisgICBJdCBkZWZhdWx0cyB0byBgYCdzdHJpY3QnYGAgaGFuZGxpbmcuCiAKICAgIFRoZSBtZXRob2QgbWF5IG5vdCBzdG9yZSBzdGF0ZSBpbiB0aGUgOmNsYXNzOmBDb2RlY2AgaW5zdGFuY2UuIFVzZQotICAgOmNsYXNzOmBTdHJlYW1Db2RlY2AgZm9yIGNvZGVjcyB3aGljaCBoYXZlIHRvIGtlZXAgc3RhdGUgaW4gb3JkZXIgdG8gbWFrZQotICAgZW5jb2RpbmcvZGVjb2RpbmcgZWZmaWNpZW50LgorICAgOmNsYXNzOmBTdHJlYW1Xcml0ZXJgIGZvciBjb2RlY3Mgd2hpY2ggaGF2ZSB0byBrZWVwIHN0YXRlIGluIG9yZGVyIHRvIG1ha2UKKyAgIGVuY29kaW5nIGVmZmljaWVudC4KIAogICAgVGhlIGVuY29kZXIgbXVzdCBiZSBhYmxlIHRvIGhhbmRsZSB6ZXJvIGxlbmd0aCBpbnB1dCBhbmQgcmV0dXJuIGFuIGVtcHR5IG9iamVjdAogICAgb2YgdGhlIG91dHB1dCBvYmplY3QgdHlwZSBpbiB0aGlzIHNpdHVhdGlvbi4KQEAgLTQwOSwyMiArNDQ2LDI4IEBACiAuLiBtZXRob2Q6OiBDb2RlYy5kZWNvZGUoaW5wdXRbLCBlcnJvcnNdKQogCiAgICBEZWNvZGVzIHRoZSBvYmplY3QgKmlucHV0KiBhbmQgcmV0dXJucyBhIHR1cGxlIChvdXRwdXQgb2JqZWN0LCBsZW5ndGgKLSAgIGNvbnN1bWVkKS4gIERlY29kaW5nIGNvbnZlcnRzIGEgYnl0ZXMgb2JqZWN0IGVuY29kZWQgdXNpbmcgYSBwYXJ0aWN1bGFyCisgICBjb25zdW1lZCkuICBGb3IgaW5zdGFuY2UsIGZvciBhIDp0ZXJtOmB0ZXh0IGVuY29kaW5nYCwgZGVjb2RpbmcgY29udmVydHMKKyAgIGEgYnl0ZXMgb2JqZWN0IGVuY29kZWQgdXNpbmcgYSBwYXJ0aWN1bGFyCiAgICBjaGFyYWN0ZXIgc2V0IGVuY29kaW5nIHRvIGEgc3RyaW5nIG9iamVjdC4KIAotICAgKmlucHV0KiBtdXN0IGJlIGEgYnl0ZXMgb2JqZWN0IG9yIG9uZSB3aGljaCBwcm92aWRlcyB0aGUgcmVhZC1vbmx5IGNoYXJhY3RlcgorICAgRm9yIHRleHQgZW5jb2RpbmdzIGFuZCBieXRlcy10by1ieXRlcyBjb2RlY3MsCisgICAqaW5wdXQqIG11c3QgYmUgYSBieXRlcyBvYmplY3Qgb3Igb25lIHdoaWNoIHByb3ZpZGVzIHRoZSByZWFkLW9ubHkKICAgIGJ1ZmZlciBpbnRlcmZhY2UgLS0gZm9yIGV4YW1wbGUsIGJ1ZmZlciBvYmplY3RzIGFuZCBtZW1vcnkgbWFwcGVkIGZpbGVzLgogCi0gICAqZXJyb3JzKiBkZWZpbmVzIHRoZSBlcnJvciBoYW5kbGluZyB0byBhcHBseS4gSXQgZGVmYXVsdHMgdG8gYGAnc3RyaWN0J2BgCi0gICBoYW5kbGluZy4KKyAgIFRoZSAqZXJyb3JzKiBhcmd1bWVudCBkZWZpbmVzIHRoZSBlcnJvciBoYW5kbGluZyB0byBhcHBseS4KKyAgIEl0IGRlZmF1bHRzIHRvIGBgJ3N0cmljdCdgYCBoYW5kbGluZy4KIAogICAgVGhlIG1ldGhvZCBtYXkgbm90IHN0b3JlIHN0YXRlIGluIHRoZSA6Y2xhc3M6YENvZGVjYCBpbnN0YW5jZS4gVXNlCi0gICA6Y2xhc3M6YFN0cmVhbUNvZGVjYCBmb3IgY29kZWNzIHdoaWNoIGhhdmUgdG8ga2VlcCBzdGF0ZSBpbiBvcmRlciB0byBtYWtlCi0gICBlbmNvZGluZy9kZWNvZGluZyBlZmZpY2llbnQuCisgICA6Y2xhc3M6YFN0cmVhbVJlYWRlcmAgZm9yIGNvZGVjcyB3aGljaCBoYXZlIHRvIGtlZXAgc3RhdGUgaW4gb3JkZXIgdG8gbWFrZQorICAgZGVjb2RpbmcgZWZmaWNpZW50LgogCiAgICBUaGUgZGVjb2RlciBtdXN0IGJlIGFibGUgdG8gaGFuZGxlIHplcm8gbGVuZ3RoIGlucHV0IGFuZCByZXR1cm4gYW4gZW1wdHkgb2JqZWN0CiAgICBvZiB0aGUgb3V0cHV0IG9iamVjdCB0eXBlIGluIHRoaXMgc2l0dWF0aW9uLgogCisKK0luY3JlbWVudGFsIEVuY29kaW5nIGFuZCBEZWNvZGluZworXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKIFRoZSA6Y2xhc3M6YEluY3JlbWVudGFsRW5jb2RlcmAgYW5kIDpjbGFzczpgSW5jcmVtZW50YWxEZWNvZGVyYCBjbGFzc2VzIHByb3ZpZGUKIHRoZSBiYXNpYyBpbnRlcmZhY2UgZm9yIGluY3JlbWVudGFsIGVuY29kaW5nIGFuZCBkZWNvZGluZy4gRW5jb2RpbmcvZGVjb2RpbmcgdGhlCiBpbnB1dCBpc24ndCBkb25lIHdpdGggb25lIGNhbGwgdG8gdGhlIHN0YXRlbGVzcyBlbmNvZGVyL2RlY29kZXIgZnVuY3Rpb24sIGJ1dApAQCAtNDQyLDE0ICs0ODUsMTQgQEAKIC4uIF9pbmNyZW1lbnRhbC1lbmNvZGVyLW9iamVjdHM6CiAKIEluY3JlbWVudGFsRW5jb2RlciBPYmplY3RzCi1eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KIAogVGhlIDpjbGFzczpgSW5jcmVtZW50YWxFbmNvZGVyYCBjbGFzcyBpcyB1c2VkIGZvciBlbmNvZGluZyBhbiBpbnB1dCBpbiBtdWx0aXBsZQogc3RlcHMuIEl0IGRlZmluZXMgdGhlIGZvbGxvd2luZyBtZXRob2RzIHdoaWNoIGV2ZXJ5IGluY3JlbWVudGFsIGVuY29kZXIgbXVzdAogZGVmaW5lIGluIG9yZGVyIHRvIGJlIGNvbXBhdGlibGUgd2l0aCB0aGUgUHl0aG9uIGNvZGVjIHJlZ2lzdHJ5LgogCiAKLS4uIGNsYXNzOjogSW5jcmVtZW50YWxFbmNvZGVyKFtlcnJvcnNdKQorLi4gY2xhc3M6OiBJbmNyZW1lbnRhbEVuY29kZXIoZXJyb3JzPSdzdHJpY3QnKQogCiAgICBDb25zdHJ1Y3RvciBmb3IgYW4gOmNsYXNzOmBJbmNyZW1lbnRhbEVuY29kZXJgIGluc3RhbmNlLgogCkBAIC00NTgsMjYgKzUwMSwxNCBAQAogICAgdGhlIFB5dGhvbiBjb2RlYyByZWdpc3RyeS4KIAogICAgVGhlIDpjbGFzczpgSW5jcmVtZW50YWxFbmNvZGVyYCBtYXkgaW1wbGVtZW50IGRpZmZlcmVudCBlcnJvciBoYW5kbGluZyBzY2hlbWVzCi0gICBieSBwcm92aWRpbmcgdGhlICplcnJvcnMqIGtleXdvcmQgYXJndW1lbnQuIFRoZXNlIHBhcmFtZXRlcnMgYXJlIHByZWRlZmluZWQ6Ci0KLSAgICogYGAnc3RyaWN0J2BgIFJhaXNlIDpleGM6YFZhbHVlRXJyb3JgIChvciBhIHN1YmNsYXNzKTsgdGhpcyBpcyB0aGUgZGVmYXVsdC4KLQotICAgKiBgYCdpZ25vcmUnYGAgSWdub3JlIHRoZSBjaGFyYWN0ZXIgYW5kIGNvbnRpbnVlIHdpdGggdGhlIG5leHQuCi0KLSAgICogYGAncmVwbGFjZSdgYCBSZXBsYWNlIHdpdGggYSBzdWl0YWJsZSByZXBsYWNlbWVudCBjaGFyYWN0ZXIKLQotICAgKiBgYCd4bWxjaGFycmVmcmVwbGFjZSdgYCBSZXBsYWNlIHdpdGggdGhlIGFwcHJvcHJpYXRlIFhNTCBjaGFyYWN0ZXIgcmVmZXJlbmNlCi0KLSAgICogYGAnYmFja3NsYXNocmVwbGFjZSdgYCBSZXBsYWNlIHdpdGggYmFja3NsYXNoZWQgZXNjYXBlIHNlcXVlbmNlcy4KKyAgIGJ5IHByb3ZpZGluZyB0aGUgKmVycm9ycyoga2V5d29yZCBhcmd1bWVudC4gU2VlIDpyZWY6YGVycm9yLWhhbmRsZXJzYCBmb3IKKyAgIHBvc3NpYmxlIHZhbHVlcy4KIAogICAgVGhlICplcnJvcnMqIGFyZ3VtZW50IHdpbGwgYmUgYXNzaWduZWQgdG8gYW4gYXR0cmlidXRlIG9mIHRoZSBzYW1lIG5hbWUuCiAgICBBc3NpZ25pbmcgdG8gdGhpcyBhdHRyaWJ1dGUgbWFrZXMgaXQgcG9zc2libGUgdG8gc3dpdGNoIGJldHdlZW4gZGlmZmVyZW50IGVycm9yCiAgICBoYW5kbGluZyBzdHJhdGVnaWVzIGR1cmluZyB0aGUgbGlmZXRpbWUgb2YgdGhlIDpjbGFzczpgSW5jcmVtZW50YWxFbmNvZGVyYAogICAgb2JqZWN0LgogCi0gICBUaGUgc2V0IG9mIGFsbG93ZWQgdmFsdWVzIGZvciB0aGUgKmVycm9ycyogYXJndW1lbnQgY2FuIGJlIGV4dGVuZGVkIHdpdGgKLSAgIDpmdW5jOmByZWdpc3Rlcl9lcnJvcmAuCi0KIAogICAgLi4gbWV0aG9kOjogZW5jb2RlKG9iamVjdFssIGZpbmFsXSkKIApAQCAtNDg5LDcgKzUyMCw4IEBACiAgICAuLiBtZXRob2Q6OiByZXNldCgpCiAKICAgICAgIFJlc2V0IHRoZSBlbmNvZGVyIHRvIHRoZSBpbml0aWFsIHN0YXRlLiBUaGUgb3V0cHV0IGlzIGRpc2NhcmRlZDogY2FsbAotICAgICAgYGAuZW5jb2RlKCcnLCBmaW5hbD1UcnVlKWBgIHRvIHJlc2V0IHRoZSBlbmNvZGVyIGFuZCB0byBnZXQgdGhlIG91dHB1dC4KKyAgICAgIGBgLmVuY29kZShvYmplY3QsIGZpbmFsPVRydWUpYGAsIHBhc3NpbmcgYW4gZW1wdHkgYnl0ZSBvciB0ZXh0IHN0cmluZworICAgICAgaWYgbmVjZXNzYXJ5LCB0byByZXNldCB0aGUgZW5jb2RlciBhbmQgdG8gZ2V0IHRoZSBvdXRwdXQuCiAKIAogLi4gbWV0aG9kOjogSW5jcmVtZW50YWxFbmNvZGVyLmdldHN0YXRlKCkKQEAgLTUxMCwxNCArNTQyLDE0IEBACiAuLiBfaW5jcmVtZW50YWwtZGVjb2Rlci1vYmplY3RzOgogCiBJbmNyZW1lbnRhbERlY29kZXIgT2JqZWN0cwotXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CiAKIFRoZSA6Y2xhc3M6YEluY3JlbWVudGFsRGVjb2RlcmAgY2xhc3MgaXMgdXNlZCBmb3IgZGVjb2RpbmcgYW4gaW5wdXQgaW4gbXVsdGlwbGUKIHN0ZXBzLiBJdCBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgbWV0aG9kcyB3aGljaCBldmVyeSBpbmNyZW1lbnRhbCBkZWNvZGVyIG11c3QKIGRlZmluZSBpbiBvcmRlciB0byBiZSBjb21wYXRpYmxlIHdpdGggdGhlIFB5dGhvbiBjb2RlYyByZWdpc3RyeS4KIAogCi0uLiBjbGFzczo6IEluY3JlbWVudGFsRGVjb2RlcihbZXJyb3JzXSkKKy4uIGNsYXNzOjogSW5jcmVtZW50YWxEZWNvZGVyKGVycm9ycz0nc3RyaWN0JykKIAogICAgQ29uc3RydWN0b3IgZm9yIGFuIDpjbGFzczpgSW5jcmVtZW50YWxEZWNvZGVyYCBpbnN0YW5jZS4KIApAQCAtNTI2LDIyICs1NTgsMTQgQEAKICAgIHRoZSBQeXRob24gY29kZWMgcmVnaXN0cnkuCiAKICAgIFRoZSA6Y2xhc3M6YEluY3JlbWVudGFsRGVjb2RlcmAgbWF5IGltcGxlbWVudCBkaWZmZXJlbnQgZXJyb3IgaGFuZGxpbmcgc2NoZW1lcwotICAgYnkgcHJvdmlkaW5nIHRoZSAqZXJyb3JzKiBrZXl3b3JkIGFyZ3VtZW50LiBUaGVzZSBwYXJhbWV0ZXJzIGFyZSBwcmVkZWZpbmVkOgotCi0gICAqIGBgJ3N0cmljdCdgYCBSYWlzZSA6ZXhjOmBWYWx1ZUVycm9yYCAob3IgYSBzdWJjbGFzcyk7IHRoaXMgaXMgdGhlIGRlZmF1bHQuCi0KLSAgICogYGAnaWdub3JlJ2BgIElnbm9yZSB0aGUgY2hhcmFjdGVyIGFuZCBjb250aW51ZSB3aXRoIHRoZSBuZXh0LgotCi0gICAqIGBgJ3JlcGxhY2UnYGAgUmVwbGFjZSB3aXRoIGEgc3VpdGFibGUgcmVwbGFjZW1lbnQgY2hhcmFjdGVyLgorICAgYnkgcHJvdmlkaW5nIHRoZSAqZXJyb3JzKiBrZXl3b3JkIGFyZ3VtZW50LiBTZWUgOnJlZjpgZXJyb3ItaGFuZGxlcnNgIGZvcgorICAgcG9zc2libGUgdmFsdWVzLgogCiAgICBUaGUgKmVycm9ycyogYXJndW1lbnQgd2lsbCBiZSBhc3NpZ25lZCB0byBhbiBhdHRyaWJ1dGUgb2YgdGhlIHNhbWUgbmFtZS4KICAgIEFzc2lnbmluZyB0byB0aGlzIGF0dHJpYnV0ZSBtYWtlcyBpdCBwb3NzaWJsZSB0byBzd2l0Y2ggYmV0d2VlbiBkaWZmZXJlbnQgZXJyb3IKICAgIGhhbmRsaW5nIHN0cmF0ZWdpZXMgZHVyaW5nIHRoZSBsaWZldGltZSBvZiB0aGUgOmNsYXNzOmBJbmNyZW1lbnRhbERlY29kZXJgCiAgICBvYmplY3QuCiAKLSAgIFRoZSBzZXQgb2YgYWxsb3dlZCB2YWx1ZXMgZm9yIHRoZSAqZXJyb3JzKiBhcmd1bWVudCBjYW4gYmUgZXh0ZW5kZWQgd2l0aAotICAgOmZ1bmM6YHJlZ2lzdGVyX2Vycm9yYC4KLQogCiAgICAuLiBtZXRob2Q6OiBkZWNvZGUob2JqZWN0WywgZmluYWxdKQogCkBAIC01ODAsNiArNjA0LDEwIEBACiAgICAgICByZXR1cm5lZCBieSA6bWV0aDpgZ2V0c3RhdGVgLgogCiAKK1N0cmVhbSBFbmNvZGluZyBhbmQgRGVjb2RpbmcKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworCiBUaGUgOmNsYXNzOmBTdHJlYW1Xcml0ZXJgIGFuZCA6Y2xhc3M6YFN0cmVhbVJlYWRlcmAgY2xhc3NlcyBwcm92aWRlIGdlbmVyaWMKIHdvcmtpbmcgaW50ZXJmYWNlcyB3aGljaCBjYW4gYmUgdXNlZCB0byBpbXBsZW1lbnQgbmV3IGVuY29kaW5nIHN1Ym1vZHVsZXMgdmVyeQogZWFzaWx5LiBTZWUgOm1vZDpgZW5jb2RpbmdzLnV0Zl84YCBmb3IgYW4gZXhhbXBsZSBvZiBob3cgdGhpcyBpcyBkb25lLgpAQCAtNTg4LDE0ICs2MTYsMTQgQEAKIC4uIF9zdHJlYW0td3JpdGVyLW9iamVjdHM6CiAKIFN0cmVhbVdyaXRlciBPYmplY3RzCi1eXl5eXl5eXl5eXl5eXl5eXl5eXgorfn5+fn5+fn5+fn5+fn5+fn5+fn4KIAogVGhlIDpjbGFzczpgU3RyZWFtV3JpdGVyYCBjbGFzcyBpcyBhIHN1YmNsYXNzIG9mIDpjbGFzczpgQ29kZWNgIGFuZCBkZWZpbmVzIHRoZQogZm9sbG93aW5nIG1ldGhvZHMgd2hpY2ggZXZlcnkgc3RyZWFtIHdyaXRlciBtdXN0IGRlZmluZSBpbiBvcmRlciB0byBiZQogY29tcGF0aWJsZSB3aXRoIHRoZSBQeXRob24gY29kZWMgcmVnaXN0cnkuCiAKIAotLi4gY2xhc3M6OiBTdHJlYW1Xcml0ZXIoc3RyZWFtWywgZXJyb3JzXSkKKy4uIGNsYXNzOjogU3RyZWFtV3JpdGVyKHN0cmVhbSwgZXJyb3JzPSdzdHJpY3QnKQogCiAgICBDb25zdHJ1Y3RvciBmb3IgYSA6Y2xhc3M6YFN0cmVhbVdyaXRlcmAgaW5zdGFuY2UuCiAKQEAgLTYwMywyOSArNjMxLDE3IEBACiAgICBhZGRpdGlvbmFsIGtleXdvcmQgYXJndW1lbnRzLCBidXQgb25seSB0aGUgb25lcyBkZWZpbmVkIGhlcmUgYXJlIHVzZWQgYnkgdGhlCiAgICBQeXRob24gY29kZWMgcmVnaXN0cnkuCiAKLSAgICpzdHJlYW0qIG11c3QgYmUgYSBmaWxlLWxpa2Ugb2JqZWN0IG9wZW4gZm9yIHdyaXRpbmcgYmluYXJ5IGRhdGEuCisgICBUaGUgKnN0cmVhbSogYXJndW1lbnQgbXVzdCBiZSBhIGZpbGUtbGlrZSBvYmplY3Qgb3BlbiBmb3Igd3JpdGluZworICAgdGV4dCBvciBiaW5hcnkgZGF0YSwgYXMgYXBwcm9wcmlhdGUgZm9yIHRoZSBzcGVjaWZpYyBjb2RlYy4KIAogICAgVGhlIDpjbGFzczpgU3RyZWFtV3JpdGVyYCBtYXkgaW1wbGVtZW50IGRpZmZlcmVudCBlcnJvciBoYW5kbGluZyBzY2hlbWVzIGJ5Ci0gICBwcm92aWRpbmcgdGhlICplcnJvcnMqIGtleXdvcmQgYXJndW1lbnQuIFRoZXNlIHBhcmFtZXRlcnMgYXJlIHByZWRlZmluZWQ6Ci0KLSAgICogYGAnc3RyaWN0J2BgIFJhaXNlIDpleGM6YFZhbHVlRXJyb3JgIChvciBhIHN1YmNsYXNzKTsgdGhpcyBpcyB0aGUgZGVmYXVsdC4KLQotICAgKiBgYCdpZ25vcmUnYGAgSWdub3JlIHRoZSBjaGFyYWN0ZXIgYW5kIGNvbnRpbnVlIHdpdGggdGhlIG5leHQuCi0KLSAgICogYGAncmVwbGFjZSdgYCBSZXBsYWNlIHdpdGggYSBzdWl0YWJsZSByZXBsYWNlbWVudCBjaGFyYWN0ZXIKLQotICAgKiBgYCd4bWxjaGFycmVmcmVwbGFjZSdgYCBSZXBsYWNlIHdpdGggdGhlIGFwcHJvcHJpYXRlIFhNTCBjaGFyYWN0ZXIgcmVmZXJlbmNlCi0KLSAgICogYGAnYmFja3NsYXNocmVwbGFjZSdgYCBSZXBsYWNlIHdpdGggYmFja3NsYXNoZWQgZXNjYXBlIHNlcXVlbmNlcy4KKyAgIHByb3ZpZGluZyB0aGUgKmVycm9ycyoga2V5d29yZCBhcmd1bWVudC4gU2VlIDpyZWY6YGVycm9yLWhhbmRsZXJzYCBmb3IKKyAgIHRoZSBzdGFuZGFyZCBlcnJvciBoYW5kbGVycyB0aGUgdW5kZXJseWluZyBzdHJlYW0gY29kZWMgbWF5IHN1cHBvcnQuCiAKICAgIFRoZSAqZXJyb3JzKiBhcmd1bWVudCB3aWxsIGJlIGFzc2lnbmVkIHRvIGFuIGF0dHJpYnV0ZSBvZiB0aGUgc2FtZSBuYW1lLgogICAgQXNzaWduaW5nIHRvIHRoaXMgYXR0cmlidXRlIG1ha2VzIGl0IHBvc3NpYmxlIHRvIHN3aXRjaCBiZXR3ZWVuIGRpZmZlcmVudCBlcnJvcgogICAgaGFuZGxpbmcgc3RyYXRlZ2llcyBkdXJpbmcgdGhlIGxpZmV0aW1lIG9mIHRoZSA6Y2xhc3M6YFN0cmVhbVdyaXRlcmAgb2JqZWN0LgogCi0gICBUaGUgc2V0IG9mIGFsbG93ZWQgdmFsdWVzIGZvciB0aGUgKmVycm9ycyogYXJndW1lbnQgY2FuIGJlIGV4dGVuZGVkIHdpdGgKLSAgIDpmdW5jOmByZWdpc3Rlcl9lcnJvcmAuCi0KLQogICAgLi4gbWV0aG9kOjogd3JpdGUob2JqZWN0KQogCiAgICAgICBXcml0ZXMgdGhlIG9iamVjdCdzIGNvbnRlbnRzIGVuY29kZWQgdG8gdGhlIHN0cmVhbS4KQEAgLTYzNCw3ICs2NTAsOCBAQAogICAgLi4gbWV0aG9kOjogd3JpdGVsaW5lcyhsaXN0KQogCiAgICAgICBXcml0ZXMgdGhlIGNvbmNhdGVuYXRlZCBsaXN0IG9mIHN0cmluZ3MgdG8gdGhlIHN0cmVhbSAocG9zc2libHkgYnkgcmV1c2luZwotICAgICAgdGhlIDptZXRoOmB3cml0ZWAgbWV0aG9kKS4KKyAgICAgIHRoZSA6bWV0aDpgd3JpdGVgIG1ldGhvZCkuIFRoZSBzdGFuZGFyZCBieXRlcy10by1ieXRlcyBjb2RlY3MKKyAgICAgIGRvIG5vdCBzdXBwb3J0IHRoaXMgbWV0aG9kLgogCiAKICAgIC4uIG1ldGhvZDo6IHJlc2V0KCkKQEAgLTY1MywxNCArNjcwLDE0IEBACiAuLiBfc3RyZWFtLXJlYWRlci1vYmplY3RzOgogCiBTdHJlYW1SZWFkZXIgT2JqZWN0cwotXl5eXl5eXl5eXl5eXl5eXl5eXl4KK35+fn5+fn5+fn5+fn5+fn5+fn5+CiAKIFRoZSA6Y2xhc3M6YFN0cmVhbVJlYWRlcmAgY2xhc3MgaXMgYSBzdWJjbGFzcyBvZiA6Y2xhc3M6YENvZGVjYCBhbmQgZGVmaW5lcyB0aGUKIGZvbGxvd2luZyBtZXRob2RzIHdoaWNoIGV2ZXJ5IHN0cmVhbSByZWFkZXIgbXVzdCBkZWZpbmUgaW4gb3JkZXIgdG8gYmUKIGNvbXBhdGlibGUgd2l0aCB0aGUgUHl0aG9uIGNvZGVjIHJlZ2lzdHJ5LgogCiAKLS4uIGNsYXNzOjogU3RyZWFtUmVhZGVyKHN0cmVhbVssIGVycm9yc10pCisuLiBjbGFzczo6IFN0cmVhbVJlYWRlcihzdHJlYW0sIGVycm9ycz0nc3RyaWN0JykKIAogICAgQ29uc3RydWN0b3IgZm9yIGEgOmNsYXNzOmBTdHJlYW1SZWFkZXJgIGluc3RhbmNlLgogCkBAIC02NjgsMTYgKzY4NSwxMiBAQAogICAgYWRkaXRpb25hbCBrZXl3b3JkIGFyZ3VtZW50cywgYnV0IG9ubHkgdGhlIG9uZXMgZGVmaW5lZCBoZXJlIGFyZSB1c2VkIGJ5IHRoZQogICAgUHl0aG9uIGNvZGVjIHJlZ2lzdHJ5LgogCi0gICAqc3RyZWFtKiBtdXN0IGJlIGEgZmlsZS1saWtlIG9iamVjdCBvcGVuIGZvciByZWFkaW5nIChiaW5hcnkpIGRhdGEuCisgICBUaGUgKnN0cmVhbSogYXJndW1lbnQgbXVzdCBiZSBhIGZpbGUtbGlrZSBvYmplY3Qgb3BlbiBmb3IgcmVhZGluZworICAgdGV4dCBvciBiaW5hcnkgZGF0YSwgYXMgYXBwcm9wcmlhdGUgZm9yIHRoZSBzcGVjaWZpYyBjb2RlYy4KIAogICAgVGhlIDpjbGFzczpgU3RyZWFtUmVhZGVyYCBtYXkgaW1wbGVtZW50IGRpZmZlcmVudCBlcnJvciBoYW5kbGluZyBzY2hlbWVzIGJ5Ci0gICBwcm92aWRpbmcgdGhlICplcnJvcnMqIGtleXdvcmQgYXJndW1lbnQuIFRoZXNlIHBhcmFtZXRlcnMgYXJlIGRlZmluZWQ6Ci0KLSAgICogYGAnc3RyaWN0J2BgIFJhaXNlIDpleGM6YFZhbHVlRXJyb3JgIChvciBhIHN1YmNsYXNzKTsgdGhpcyBpcyB0aGUgZGVmYXVsdC4KLQotICAgKiBgYCdpZ25vcmUnYGAgSWdub3JlIHRoZSBjaGFyYWN0ZXIgYW5kIGNvbnRpbnVlIHdpdGggdGhlIG5leHQuCi0KLSAgICogYGAncmVwbGFjZSdgYCBSZXBsYWNlIHdpdGggYSBzdWl0YWJsZSByZXBsYWNlbWVudCBjaGFyYWN0ZXIuCisgICBwcm92aWRpbmcgdGhlICplcnJvcnMqIGtleXdvcmQgYXJndW1lbnQuIFNlZSA6cmVmOmBlcnJvci1oYW5kbGVyc2AgZm9yCisgICB0aGUgc3RhbmRhcmQgZXJyb3IgaGFuZGxlcnMgdGhlIHVuZGVybHlpbmcgc3RyZWFtIGNvZGVjIG1heSBzdXBwb3J0LgogCiAgICBUaGUgKmVycm9ycyogYXJndW1lbnQgd2lsbCBiZSBhc3NpZ25lZCB0byBhbiBhdHRyaWJ1dGUgb2YgdGhlIHNhbWUgbmFtZS4KICAgIEFzc2lnbmluZyB0byB0aGlzIGF0dHJpYnV0ZSBtYWtlcyBpdCBwb3NzaWJsZSB0byBzd2l0Y2ggYmV0d2VlbiBkaWZmZXJlbnQgZXJyb3IKQEAgLTY5MSwxNyArNzA0LDIwIEBACiAKICAgICAgIERlY29kZXMgZGF0YSBmcm9tIHRoZSBzdHJlYW0gYW5kIHJldHVybnMgdGhlIHJlc3VsdGluZyBvYmplY3QuCiAKLSAgICAgICpjaGFycyogaW5kaWNhdGVzIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB0byByZWFkIGZyb20gdGhlCi0gICAgICBzdHJlYW0uIDpmdW5jOmByZWFkYCB3aWxsIG5ldmVyIHJldHVybiBtb3JlIHRoYW4gKmNoYXJzKiBjaGFyYWN0ZXJzLCBidXQKLSAgICAgIGl0IG1pZ2h0IHJldHVybiBsZXNzLCBpZiB0aGVyZSBhcmUgbm90IGVub3VnaCBjaGFyYWN0ZXJzIGF2YWlsYWJsZS4KKyAgICAgIFRoZSAqY2hhcnMqIGFyZ3VtZW50IGluZGljYXRlcyB0aGUgbnVtYmVyIG9mIGRlY29kZWQKKyAgICAgIGNvZGUgcG9pbnRzIG9yIGJ5dGVzIHRvIHJldHVybi4gVGhlIDpmdW5jOmByZWFkYCBtZXRob2Qgd2lsbAorICAgICAgbmV2ZXIgcmV0dXJuIG1vcmUgZGF0YSB0aGFuIHJlcXVlc3RlZCwgYnV0IGl0IG1pZ2h0IHJldHVybiBsZXNzLAorICAgICAgaWYgdGhlcmUgaXMgbm90IGVub3VnaCBhdmFpbGFibGUuCiAKLSAgICAgICpzaXplKiBpbmRpY2F0ZXMgdGhlIGFwcHJveGltYXRlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQgZnJvbSB0aGUKLSAgICAgIHN0cmVhbSBmb3IgZGVjb2RpbmcgcHVycG9zZXMuIFRoZSBkZWNvZGVyIGNhbiBtb2RpZnkgdGhpcyBzZXR0aW5nIGFzCisgICAgICBUaGUgKnNpemUqIGFyZ3VtZW50IGluZGljYXRlcyB0aGUgYXBwcm94aW1hdGUgbWF4aW11bQorICAgICAgbnVtYmVyIG9mIGVuY29kZWQgYnl0ZXMgb3IgY29kZSBwb2ludHMgdG8gcmVhZAorICAgICAgZm9yIGRlY29kaW5nLiBUaGUgZGVjb2RlciBjYW4gbW9kaWZ5IHRoaXMgc2V0dGluZyBhcwogICAgICAgYXBwcm9wcmlhdGUuIFRoZSBkZWZhdWx0IHZhbHVlIC0xIGluZGljYXRlcyB0byByZWFkIGFuZCBkZWNvZGUgYXMgbXVjaCBhcwotICAgICAgcG9zc2libGUuICAqc2l6ZSogaXMgaW50ZW5kZWQgdG8gcHJldmVudCBoYXZpbmcgdG8gZGVjb2RlIGh1Z2UgZmlsZXMgaW4KLSAgICAgIG9uZSBzdGVwLgorICAgICAgcG9zc2libGUuICBUaGlzIHBhcmFtZXRlciBpcyBpbnRlbmRlZCB0bworICAgICAgcHJldmVudCBoYXZpbmcgdG8gZGVjb2RlIGh1Z2UgZmlsZXMgaW4gb25lIHN0ZXAuCiAKLSAgICAgICpmaXJzdGxpbmUqIGluZGljYXRlcyB0aGF0IGl0IHdvdWxkIGJlIHN1ZmZpY2llbnQgdG8gb25seSByZXR1cm4gdGhlIGZpcnN0CisgICAgICBUaGUgKmZpcnN0bGluZSogZmxhZyBpbmRpY2F0ZXMgdGhhdAorICAgICAgaXQgd291bGQgYmUgc3VmZmljaWVudCB0byBvbmx5IHJldHVybiB0aGUgZmlyc3QKICAgICAgIGxpbmUsIGlmIHRoZXJlIGFyZSBkZWNvZGluZyBlcnJvcnMgb24gbGF0ZXIgbGluZXMuCiAKICAgICAgIFRoZSBtZXRob2Qgc2hvdWxkIHVzZSBhIGdyZWVkeSByZWFkIHN0cmF0ZWd5IG1lYW5pbmcgdGhhdCBpdCBzaG91bGQgcmVhZApAQCAtNzQ0LDE3ICs3NjAsMTMgQEAKIEluIGFkZGl0aW9uIHRvIHRoZSBhYm92ZSBtZXRob2RzLCB0aGUgOmNsYXNzOmBTdHJlYW1SZWFkZXJgIG11c3QgYWxzbyBpbmhlcml0CiBhbGwgb3RoZXIgbWV0aG9kcyBhbmQgYXR0cmlidXRlcyBmcm9tIHRoZSB1bmRlcmx5aW5nIHN0cmVhbS4KIAotVGhlIG5leHQgdHdvIGJhc2UgY2xhc3NlcyBhcmUgaW5jbHVkZWQgZm9yIGNvbnZlbmllbmNlLiBUaGV5IGFyZSBub3QgbmVlZGVkIGJ5Ci10aGUgY29kZWMgcmVnaXN0cnksIGJ1dCBtYXkgcHJvdmlkZSB1c2VmdWwgaW4gcHJhY3RpY2UuCi0KLQogLi4gX3N0cmVhbS1yZWFkZXItd3JpdGVyOgogCiBTdHJlYW1SZWFkZXJXcml0ZXIgT2JqZWN0cwotXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CiAKLVRoZSA6Y2xhc3M6YFN0cmVhbVJlYWRlcldyaXRlcmAgYWxsb3dzIHdyYXBwaW5nIHN0cmVhbXMgd2hpY2ggd29yayBpbiBib3RoIHJlYWQKLWFuZCB3cml0ZSBtb2Rlcy4KK1RoZSA6Y2xhc3M6YFN0cmVhbVJlYWRlcldyaXRlcmAgaXMgYSBjb252ZW5pZW5jZSBjbGFzcyB0aGF0IGFsbG93cyB3cmFwcGluZworc3RyZWFtcyB3aGljaCB3b3JrIGluIGJvdGggcmVhZCBhbmQgd3JpdGUgbW9kZXMuCiAKIFRoZSBkZXNpZ24gaXMgc3VjaCB0aGF0IG9uZSBjYW4gdXNlIHRoZSBmYWN0b3J5IGZ1bmN0aW9ucyByZXR1cm5lZCBieSB0aGUKIDpmdW5jOmBsb29rdXBgIGZ1bmN0aW9uIHRvIGNvbnN0cnVjdCB0aGUgaW5zdGFuY2UuCkBAIC03NzUsOSArNzg3LDkgQEAKIC4uIF9zdHJlYW0tcmVjb2Rlci1vYmplY3RzOgogCiBTdHJlYW1SZWNvZGVyIE9iamVjdHMKLV5eXl5eXl5eXl5eXl5eXl5eXl5eXgorfn5+fn5+fn5+fn5+fn5+fn5+fn5+CiAKLVRoZSA6Y2xhc3M6YFN0cmVhbVJlY29kZXJgIHByb3ZpZGUgYSBmcm9udGVuZCAtIGJhY2tlbmQgdmlldyBvZiBlbmNvZGluZyBkYXRhCitUaGUgOmNsYXNzOmBTdHJlYW1SZWNvZGVyYCB0cmFuc2xhdGVzIGRhdGEgZnJvbSBvbmUgZW5jb2RpbmcgdG8gYW5vdGhlciwKIHdoaWNoIGlzIHNvbWV0aW1lcyB1c2VmdWwgd2hlbiBkZWFsaW5nIHdpdGggZGlmZmVyZW50IGVuY29kaW5nIGVudmlyb25tZW50cy4KIAogVGhlIGRlc2lnbiBpcyBzdWNoIHRoYXQgb25lIGNhbiB1c2UgdGhlIGZhY3RvcnkgZnVuY3Rpb25zIHJldHVybmVkIGJ5IHRoZQpAQCAtNzg3LDIyICs3OTksMjAgQEAKIC4uIGNsYXNzOjogU3RyZWFtUmVjb2RlcihzdHJlYW0sIGVuY29kZSwgZGVjb2RlLCBSZWFkZXIsIFdyaXRlciwgZXJyb3JzKQogCiAgICBDcmVhdGVzIGEgOmNsYXNzOmBTdHJlYW1SZWNvZGVyYCBpbnN0YW5jZSB3aGljaCBpbXBsZW1lbnRzIGEgdHdvLXdheSBjb252ZXJzaW9uOgotICAgKmVuY29kZSogYW5kICpkZWNvZGUqIHdvcmsgb24gdGhlIGZyb250ZW5kICh0aGUgaW5wdXQgdG8gOm1ldGg6YHJlYWRgIGFuZCBvdXRwdXQKLSAgIG9mIDptZXRoOmB3cml0ZWApIHdoaWxlICpSZWFkZXIqIGFuZCAqV3JpdGVyKiB3b3JrIG9uIHRoZSBiYWNrZW5kIChyZWFkaW5nIGFuZAotICAgd3JpdGluZyB0byB0aGUgc3RyZWFtKS4KKyAgICplbmNvZGUqIGFuZCAqZGVjb2RlKiB3b3JrIG9uIHRoZSBmcm9udGVuZMKg4oCUIHRoZSBkYXRhIHZpc2libGUgdG8KKyAgIGNvZGUgY2FsbGluZyA6bWV0aDpgcmVhZGAgYW5kIDptZXRoOmB3cml0ZWAsIHdoaWxlICpSZWFkZXIqIGFuZCAqV3JpdGVyKgorICAgd29yayBvbiB0aGUgYmFja2VuZMKg4oCUIHRoZSBkYXRhIGluICpzdHJlYW0qLgogCi0gICBZb3UgY2FuIHVzZSB0aGVzZSBvYmplY3RzIHRvIGRvIHRyYW5zcGFyZW50IGRpcmVjdCByZWNvZGluZ3MgZnJvbSBlLmcuIExhdGluLTEKKyAgIFlvdSBjYW4gdXNlIHRoZXNlIG9iamVjdHMgdG8gZG8gdHJhbnNwYXJlbnQgdHJhbnNjb2RpbmdzIGZyb20gZS5nLiBMYXRpbi0xCiAgICB0byBVVEYtOCBhbmQgYmFjay4KIAotICAgKnN0cmVhbSogbXVzdCBiZSBhIGZpbGUtbGlrZSBvYmplY3QuCisgICBUaGUgKnN0cmVhbSogYXJndW1lbnQgbXVzdCBiZSBhIGZpbGUtbGlrZSBvYmplY3QuCiAKLSAgICplbmNvZGUqLCAqZGVjb2RlKiBtdXN0IGFkaGVyZSB0byB0aGUgOmNsYXNzOmBDb2RlY2AgaW50ZXJmYWNlLiAqUmVhZGVyKiwKKyAgIFRoZSAqZW5jb2RlKiBhbmQgKmRlY29kZSogYXJndW1lbnRzIG11c3QKKyAgIGFkaGVyZSB0byB0aGUgOmNsYXNzOmBDb2RlY2AgaW50ZXJmYWNlLiAqUmVhZGVyKiBhbmQKICAgICpXcml0ZXIqIG11c3QgYmUgZmFjdG9yeSBmdW5jdGlvbnMgb3IgY2xhc3NlcyBwcm92aWRpbmcgb2JqZWN0cyBvZiB0aGUKICAgIDpjbGFzczpgU3RyZWFtUmVhZGVyYCBhbmQgOmNsYXNzOmBTdHJlYW1Xcml0ZXJgIGludGVyZmFjZSByZXNwZWN0aXZlbHkuCiAKLSAgICplbmNvZGUqIGFuZCAqZGVjb2RlKiBhcmUgbmVlZGVkIGZvciB0aGUgZnJvbnRlbmQgdHJhbnNsYXRpb24sICpSZWFkZXIqIGFuZAotICAgKldyaXRlciogZm9yIHRoZSBiYWNrZW5kIHRyYW5zbGF0aW9uLgotCiAgICBFcnJvciBoYW5kbGluZyBpcyBkb25lIGluIHRoZSBzYW1lIHdheSBhcyBkZWZpbmVkIGZvciB0aGUgc3RyZWFtIHJlYWRlcnMgYW5kCiAgICB3cml0ZXJzLgogCkBAIC04MTcsMzEgKzgyNywzNCBAQAogRW5jb2RpbmdzIGFuZCBVbmljb2RlCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotU3RyaW5ncyBhcmUgc3RvcmVkIGludGVybmFsbHkgYXMgc2VxdWVuY2VzIG9mIGNvZGVwb2ludHMgaW4gcmFuZ2UgYGAwIC0gMTBGRkZGYGAKLShzZWUgOnBlcDpgMzkzYCBmb3IgbW9yZSBkZXRhaWxzIGFib3V0IHRoZSBpbXBsZW1lbnRhdGlvbikuCi1PbmNlIGEgc3RyaW5nIG9iamVjdCBpcyB1c2VkIG91dHNpZGUgb2YgQ1BVIGFuZCBtZW1vcnksIENQVSBlbmRpYW5uZXNzCi1hbmQgaG93IHRoZXNlIGFycmF5cyBhcmUgc3RvcmVkIGFzIGJ5dGVzIGJlY29tZSBhbiBpc3N1ZS4gIFRyYW5zZm9ybWluZyBhCi1zdHJpbmcgb2JqZWN0IGludG8gYSBzZXF1ZW5jZSBvZiBieXRlcyBpcyBjYWxsZWQgZW5jb2RpbmcgYW5kIHJlY3JlYXRpbmcgdGhlCi1zdHJpbmcgb2JqZWN0IGZyb20gdGhlIHNlcXVlbmNlIG9mIGJ5dGVzIGlzIGtub3duIGFzIGRlY29kaW5nLiAgVGhlcmUgYXJlIG1hbnkKLWRpZmZlcmVudCBtZXRob2RzIGZvciBob3cgdGhpcyB0cmFuc2Zvcm1hdGlvbiBjYW4gYmUgZG9uZSAodGhlc2UgbWV0aG9kcyBhcmUKLWFsc28gY2FsbGVkIGVuY29kaW5ncykuIFRoZSBzaW1wbGVzdCBtZXRob2QgaXMgdG8gbWFwIHRoZSBjb2RlcG9pbnRzIDAtMjU1IHRvCi10aGUgYnl0ZXMgYGAweDBgYC1gYDB4ZmZgYC4gVGhpcyBtZWFucyB0aGF0IGEgc3RyaW5nIG9iamVjdCB0aGF0IGNvbnRhaW5zCi1jb2RlcG9pbnRzIGFib3ZlIGBgVSswMEZGYGAgY2FuJ3QgYmUgZW5jb2RlZCB3aXRoIHRoaXMgbWV0aG9kICh3aGljaCBpcyBjYWxsZWQKLWBgJ2xhdGluLTEnYGAgb3IgYGAnaXNvLTg4NTktMSdgYCkuIDpmdW5jOmBzdHIuZW5jb2RlYCB3aWxsIHJhaXNlIGEKLTpleGM6YFVuaWNvZGVFbmNvZGVFcnJvcmAgdGhhdCBsb29rcyBsaWtlIHRoaXM6IGBgVW5pY29kZUVuY29kZUVycm9yOiAnbGF0aW4tMScKLWNvZGVjIGNhbid0IGVuY29kZSBjaGFyYWN0ZXIgJ1x1MTIzNCcgaW4gcG9zaXRpb24gMzogb3JkaW5hbCBub3QgaW4KLXJhbmdlKDI1NilgYC4KK1N0cmluZ3MgYXJlIHN0b3JlZCBpbnRlcm5hbGx5IGFzIHNlcXVlbmNlcyBvZiBjb2RlIHBvaW50cyBpbgorcmFuZ2UgYGAweDBgYC1gYDB4MTBGRkZGYGAuICAoU2VlIDpwZXA6YDM5M2AgZm9yCittb3JlIGRldGFpbHMgYWJvdXQgdGhlIGltcGxlbWVudGF0aW9uLikKK09uY2UgYSBzdHJpbmcgb2JqZWN0IGlzIHVzZWQgb3V0c2lkZSBvZiBDUFUgYW5kIG1lbW9yeSwgZW5kaWFubmVzcworYW5kIGhvdyB0aGVzZSBhcnJheXMgYXJlIHN0b3JlZCBhcyBieXRlcyBiZWNvbWUgYW4gaXNzdWUuICBBcyB3aXRoIG90aGVyCitjb2RlY3MsIHNlcmlhbGlzaW5nIGEgc3RyaW5nIGludG8gYSBzZXF1ZW5jZSBvZiBieXRlcyBpcyBrbm93biBhcyAqZW5jb2RpbmcqLAorYW5kIHJlY3JlYXRpbmcgdGhlIHN0cmluZyBmcm9tIHRoZSBzZXF1ZW5jZSBvZiBieXRlcyBpcyBrbm93biBhcyAqZGVjb2RpbmcqLgorVGhlcmUgYXJlIGEgdmFyaWV0eSBvZiBkaWZmZXJlbnQgdGV4dCBzZXJpYWxpc2F0aW9uIGNvZGVjcywgd2hpY2ggYXJlCitjb2xsZWN0aXZpdHkgcmVmZXJyZWQgdG8gYXMgOnRlcm06YHRleHQgZW5jb2RpbmdzIDx0ZXh0IGVuY29kaW5nPmAuCisKK1RoZSBzaW1wbGVzdCB0ZXh0IGVuY29kaW5nIChjYWxsZWQgYGAnbGF0aW4tMSdgYCBvciBgYCdpc28tODg1OS0xJ2BgKSBtYXBzCit0aGUgY29kZSBwb2ludHMgMC0yNTUgdG8gdGhlIGJ5dGVzIGBgMHgwYGAtYGAweGZmYGAsIHdoaWNoIG1lYW5zIHRoYXQgYSBzdHJpbmcKK29iamVjdCB0aGF0IGNvbnRhaW5zIGNvZGUgcG9pbnRzIGFib3ZlIGBgVSswMEZGYGAgY2FuJ3QgYmUgZW5jb2RlZCB3aXRoIHRoaXMKK2NvZGVjLiBEb2luZyBzbyB3aWxsIHJhaXNlIGEgOmV4YzpgVW5pY29kZUVuY29kZUVycm9yYCB0aGF0IGxvb2tzCitsaWtlIHRoZSBmb2xsb3dpbmcgKGFsdGhvdWdoIHRoZSBkZXRhaWxzIG9mIHRoZSBlcnJvciBtZXNzYWdlIG1heSBkaWZmZXIpOgorYGBVbmljb2RlRW5jb2RlRXJyb3I6ICdsYXRpbi0xJyBjb2RlYyBjYW4ndCBlbmNvZGUgY2hhcmFjdGVyICdcdTEyMzQnIGluCitwb3NpdGlvbiAzOiBvcmRpbmFsIG5vdCBpbiByYW5nZSgyNTYpYGAuCiAKIFRoZXJlJ3MgYW5vdGhlciBncm91cCBvZiBlbmNvZGluZ3MgKHRoZSBzbyBjYWxsZWQgY2hhcm1hcCBlbmNvZGluZ3MpIHRoYXQgY2hvb3NlCi1hIGRpZmZlcmVudCBzdWJzZXQgb2YgYWxsIFVuaWNvZGUgY29kZSBwb2ludHMgYW5kIGhvdyB0aGVzZSBjb2RlcG9pbnRzIGFyZQorYSBkaWZmZXJlbnQgc3Vic2V0IG9mIGFsbCBVbmljb2RlIGNvZGUgcG9pbnRzIGFuZCBob3cgdGhlc2UgY29kZSBwb2ludHMgYXJlCiBtYXBwZWQgdG8gdGhlIGJ5dGVzIGBgMHgwYGAtYGAweGZmYGAuIFRvIHNlZSBob3cgdGhpcyBpcyBkb25lIHNpbXBseSBvcGVuCiBlLmcuIDpmaWxlOmBlbmNvZGluZ3MvY3AxMjUyLnB5YCAod2hpY2ggaXMgYW4gZW5jb2RpbmcgdGhhdCBpcyB1c2VkIHByaW1hcmlseSBvbgogV2luZG93cykuIFRoZXJlJ3MgYSBzdHJpbmcgY29uc3RhbnQgd2l0aCAyNTYgY2hhcmFjdGVycyB0aGF0IHNob3dzIHlvdSB3aGljaAogY2hhcmFjdGVyIGlzIG1hcHBlZCB0byB3aGljaCBieXRlIHZhbHVlLgogCi1BbGwgb2YgdGhlc2UgZW5jb2RpbmdzIGNhbiBvbmx5IGVuY29kZSAyNTYgb2YgdGhlIDExMTQxMTIgY29kZXBvaW50cworQWxsIG9mIHRoZXNlIGVuY29kaW5ncyBjYW4gb25seSBlbmNvZGUgMjU2IG9mIHRoZSAxMTE0MTEyIGNvZGUgcG9pbnRzCiBkZWZpbmVkIGluIFVuaWNvZGUuIEEgc2ltcGxlIGFuZCBzdHJhaWdodGZvcndhcmQgd2F5IHRoYXQgY2FuIHN0b3JlIGVhY2ggVW5pY29kZQotY29kZSBwb2ludCwgaXMgdG8gc3RvcmUgZWFjaCBjb2RlcG9pbnQgYXMgZm91ciBjb25zZWN1dGl2ZSBieXRlcy4gVGhlcmUgYXJlIHR3bworY29kZSBwb2ludCwgaXMgdG8gc3RvcmUgZWFjaCBjb2RlIHBvaW50IGFzIGZvdXIgY29uc2VjdXRpdmUgYnl0ZXMuIFRoZXJlIGFyZSB0d28KIHBvc3NpYmlsaXRpZXM6IHN0b3JlIHRoZSBieXRlcyBpbiBiaWcgZW5kaWFuIG9yIGluIGxpdHRsZSBlbmRpYW4gb3JkZXIuIFRoZXNlCiB0d28gZW5jb2RpbmdzIGFyZSBjYWxsZWQgYGBVVEYtMzItQkVgYCBhbmQgYGBVVEYtMzItTEVgYCByZXNwZWN0aXZlbHkuIFRoZWlyCiBkaXNhZHZhbnRhZ2UgaXMgdGhhdCBpZiBlLmcuIHlvdSB1c2UgYGBVVEYtMzItQkVgYCBvbiBhIGxpdHRsZSBlbmRpYW4gbWFjaGluZSB5b3UKQEAgLTk2Niw2ICs5NzksMTAgQEAKICstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIHwgY3AwMzcgICAgICAgICAgIHwgSUJNMDM3LCBJQk0wMzkgICAgICAgICAgICAgICAgIHwgRW5nbGlzaCAgICAgICAgICAgICAgICAgICAgICAgIHwKICstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgY3AyNzMgICAgICAgICAgIHwgMjczLCBJQk0yNzMsIGNzSUJNMjczICAgICAgICAgIHwgR2VybWFuICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgLi4gdmVyc2lvbmFkZGVkOjogMy40ICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIHwgY3A0MjQgICAgICAgICAgIHwgRUJDRElDLUNQLUhFLCBJQk00MjQgICAgICAgICAgIHwgSGVicmV3ICAgICAgICAgICAgICAgICAgICAgICAgIHwKICstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIHwgY3A0MzcgICAgICAgICAgIHwgNDM3LCBJQk00MzcgICAgICAgICAgICAgICAgICAgIHwgRW5nbGlzaCAgICAgICAgICAgICAgICAgICAgICAgIHwKQEAgLTEwMjIsNiArMTAzOSwxMCBAQAogKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogfCBjcDEwMjYgICAgICAgICAgfCBpYm0xMDI2ICAgICAgICAgICAgICAgICAgICAgICAgfCBUdXJraXNoICAgICAgICAgICAgICAgICAgICAgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBjcDExMjUgICAgICAgICAgfCAxMTI1LCBpYm0xMTI1LCBjcDg2NnUsIHJ1c2NpaSAgfCBVa3JhaW5pYW4gICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogfCBjcDExNDAgICAgICAgICAgfCBpYm0xMTQwICAgICAgICAgICAgICAgICAgICAgICAgfCBXZXN0ZXJuIEV1cm9wZSAgICAgICAgICAgICAgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogfCBjcDEyNTAgICAgICAgICAgfCB3aW5kb3dzLTEyNTAgICAgICAgICAgICAgICAgICAgfCBDZW50cmFsIGFuZCBFYXN0ZXJuIEV1cm9wZSAgICAgfApAQCAtMTEwOSw2ICsxMTMwLDggQEAKICstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIHwgaXNvODg1OV8xMCAgICAgIHwgaXNvLTg4NTktMTAsIGxhdGluNiwgTDYgICAgICAgIHwgTm9yZGljIGxhbmd1YWdlcyAgICAgICAgICAgICAgIHwKICstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgaXNvODg1OV8xMSAgICAgIHwgaXNvLTg4NTktMTEsIHRoYWkgICAgICAgICAgICAgIHwgVGhhaSBsYW5ndWFnZXMgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIHwgaXNvODg1OV8xMyAgICAgIHwgaXNvLTg4NTktMTMsIGxhdGluNywgTDcgICAgICAgIHwgQmFsdGljIGxhbmd1YWdlcyAgICAgICAgICAgICAgIHwKICstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIHwgaXNvODg1OV8xNCAgICAgIHwgaXNvLTg4NTktMTQsIGxhdGluOCwgTDggICAgICAgIHwgQ2VsdGljIGxhbmd1YWdlcyAgICAgICAgICAgICAgIHwKQEAgLTExNjcsNiArMTE5MCwxMyBAQAogfCB1dGZfOF9zaWcgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhbGwgbGFuZ3VhZ2VzICAgICAgICAgICAgICAgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogCisuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgVGhlIHV0Zi0xNlwqIGFuZCB1dGYtMzJcKiBlbmNvZGVycyBubyBsb25nZXIgYWxsb3cgc3Vycm9nYXRlIGNvZGUgcG9pbnRzCisgICAoYGBVK0Q4MDBgYC0tYGBVK0RGRkZgYCkgdG8gYmUgZW5jb2RlZC4KKyAgIFRoZSB1dGYtMzJcKiBkZWNvZGVycyBubyBsb25nZXIgZGVjb2RlCisgICBieXRlIHNlcXVlbmNlcyB0aGF0IGNvcnJlc3BvbmQgdG8gc3Vycm9nYXRlIGNvZGUgcG9pbnRzLgorCisKIFB5dGhvbiBTcGVjaWZpYyBFbmNvZGluZ3MKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtMTE3Nyw2ICsxMjA3LDkgQEAKIGFyYml0cmFyeSBkYXRhIHRyYW5zZm9ybXMgcmF0aGVyIHRoYW4ganVzdCB0ZXh0IGVuY29kaW5ncykuICBGb3IgYXN5bW1ldHJpYwogY29kZWNzLCB0aGUgc3RhdGVkIHB1cnBvc2UgZGVzY3JpYmVzIHRoZSBlbmNvZGluZyBkaXJlY3Rpb24uCiAKK1RleHQgRW5jb2RpbmdzCiteXl5eXl5eXl5eXl5eXgorCiBUaGUgZm9sbG93aW5nIGNvZGVjcyBwcm92aWRlIDpjbGFzczpgc3RyYCB0byA6Y2xhc3M6YGJ5dGVzYCBlbmNvZGluZyBhbmQKIDp0ZXJtOmBieXRlcy1saWtlIG9iamVjdGAgdG8gOmNsYXNzOmBzdHJgIGRlY29kaW5nLCBzaW1pbGFyIHRvIHRoZSBVbmljb2RlIHRleHQKIGVuY29kaW5ncy4KQEAgLTExODgsNyArMTIyMSw5IEBACiArPT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PSsKIHwgaWRuYSAgICAgICAgICAgICAgIHwgICAgICAgICB8IEltcGxlbWVudHMgOnJmYzpgMzQ5MGAsICAgfAogfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHwgc2VlIGFsc28gICAgICAgICAgICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfCA6bW9kOmBlbmNvZGluZ3MuaWRuYWAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8IDptb2Q6YGVuY29kaW5ncy5pZG5hYC4gICAgfAorfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHwgT25seSBgYGVycm9ycz0nc3RyaWN0J2BgICB8Cit8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfCBpcyBzdXBwb3J0ZWQuICAgICAgICAgICAgIHwKICstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogfCBtYmNzICAgICAgICAgICAgICAgfCBkYmNzICAgIHwgV2luZG93cyBvbmx5OiBFbmNvZGUgICAgICB8CiB8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfCBvcGVyYW5kIGFjY29yZGluZyB0byB0aGUgIHwKQEAgLTExOTYsODQgKzEyMzEsMTI1IEBACiArLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIHwgcGFsbW9zICAgICAgICAgICAgIHwgICAgICAgICB8IEVuY29kaW5nIG9mIFBhbG1PUyAzLjUgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi18IHB1bnljb2RlICAgICAgICAgICB8ICAgICAgICAgfCBJbXBsZW1lbnRzIDpyZmM6YDM0OTJgICAgIHwKK3wgcHVueWNvZGUgICAgICAgICAgIHwgICAgICAgICB8IEltcGxlbWVudHMgOnJmYzpgMzQ5MmAuICAgfAorfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHwgU3RhdGVmdWwgY29kZWNzIGFyZSBub3QgICB8Cit8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfCBzdXBwb3J0ZWQuICAgICAgICAgICAgICAgIHwKICstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCByYXdfdW5pY29kZV9lc2NhcGUgfCAgICAgICAgIHwgUHJvZHVjZSBhIHN0cmluZyB0aGF0IGlzICB8Ci18ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfCBzdWl0YWJsZSBhcyByYXcgVW5pY29kZSAgIHwKLXwgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8IGxpdGVyYWwgaW4gUHl0aG9uIHNvdXJjZSAgfAotfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHwgY29kZSAgICAgICAgICAgICAgICAgICAgICB8Cit8IHJhd191bmljb2RlX2VzY2FwZSB8ICAgICAgICAgfCBMYXRpbi0xIGVuY29kaW5nIHdpdGggICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8IGBgXHVYWFhYYGAgYW5kICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHwgYGBcVVhYWFhYWFhYYGAgZm9yIG90aGVyICB8Cit8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfCBjb2RlIHBvaW50cy4gRXhpc3RpbmcgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8IGJhY2tzbGFzaGVzIGFyZSBub3QgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHwgZXNjYXBlZCBpbiBhbnkgd2F5LiAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfCBJdCBpcyB1c2VkIGluIHRoZSBQeXRob24gIHwKK3wgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8IHBpY2tsZSBwcm90b2NvbC4gICAgICAgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiB8IHVuZGVmaW5lZCAgICAgICAgICB8ICAgICAgICAgfCBSYWlzZSBhbiBleGNlcHRpb24gZm9yICAgIHwKLXwgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8IGFsbCBjb252ZXJzaW9ucy4gQ2FuIGJlICAgfAotfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHwgdXNlZCBhcyB0aGUgc3lzdGVtICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfCBlbmNvZGluZyBpZiBubyBhdXRvbWF0aWMgIHwKLXwgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8IGNvZXJjaW9uIGJldHdlZW4gYnl0ZSBhbmQgfAotfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHwgVW5pY29kZSBzdHJpbmdzIGlzICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfCBkZXNpcmVkLiAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8IGFsbCBjb252ZXJzaW9ucywgZXZlbiAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHwgZW1wdHkgc3RyaW5ncy4gVGhlIGVycm9yICB8Cit8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfCBoYW5kbGVyIGlzIGlnbm9yZWQuICAgICAgIHwKICstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCB1bmljb2RlX2VzY2FwZSAgICAgfCAgICAgICAgIHwgUHJvZHVjZSBhIHN0cmluZyB0aGF0IGlzICB8Ci18ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfCBzdWl0YWJsZSBhcyBVbmljb2RlICAgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8IGxpdGVyYWwgaW4gUHl0aG9uIHNvdXJjZSAgfAotfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHwgY29kZSAgICAgICAgICAgICAgICAgICAgICB8Cit8IHVuaWNvZGVfZXNjYXBlICAgICB8ICAgICAgICAgfCBFbmNvZGluZyBzdWl0YWJsZSBhcyB0aGUgIHwKK3wgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8IGNvbnRlbnRzIG9mIGEgVW5pY29kZSAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHwgbGl0ZXJhbCBpbiBBU0NJSS1lbmNvZGVkICB8Cit8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfCBQeXRob24gc291cmNlIGNvZGUsICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8IGV4Y2VwdCB0aGF0IHF1b3RlcyBhcmUgICAgfAorfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHwgbm90IGVzY2FwZWQuIERlY29kZXMgZnJvbSB8Cit8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfCBMYXRpbi0xIHNvdXJjZSBjb2RlLiAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8IEJld2FyZSB0aGF0IFB5dGhvbiBzb3VyY2UgfAorfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHwgY29kZSBhY3R1YWxseSB1c2VzIFVURi04ICB8Cit8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfCBieSBkZWZhdWx0LiAgICAgICAgICAgICAgIHwKICstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogfCB1bmljb2RlX2ludGVybmFsICAgfCAgICAgICAgIHwgUmV0dXJuIHRoZSBpbnRlcm5hbCAgICAgICB8CiB8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfCByZXByZXNlbnRhdGlvbiBvZiB0aGUgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8IG9wZXJhbmQgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHwgb3BlcmFuZC4gU3RhdGVmdWwgY29kZWNzICB8Cit8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfCBhcmUgbm90IHN1cHBvcnRlZC4gICAgICAgIHwKIHwgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHwgLi4gZGVwcmVjYXRlZDo6IDMuMyAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfCAgICBUaGlzIHJlcHJlc2VudGF0aW9uIGlzIHwKK3wgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8ICAgIG9ic29sZXRlZCBieSAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHwgICAgOnBlcDpgMzkzYC4gICAgICAgICAgICB8CiArLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIAotVGhlIGZvbGxvd2luZyBjb2RlY3MgcHJvdmlkZSA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgIHRvIDpjbGFzczpgYnl0ZXNgCi1tYXBwaW5ncy4KKy4uIF9iaW5hcnktdHJhbnNmb3JtczoKKworQmluYXJ5IFRyYW5zZm9ybXMKK15eXl5eXl5eXl5eXl5eXl5eCisKK1RoZSBmb2xsb3dpbmcgY29kZWNzIHByb3ZpZGUgYmluYXJ5IHRyYW5zZm9ybXM6IDp0ZXJtOmBieXRlcy1saWtlIG9iamVjdGAKK3RvIDpjbGFzczpgYnl0ZXNgIG1hcHBpbmdzLiAgVGhleSBhcmUgbm90IHN1cHBvcnRlZCBieSA6bWV0aDpgYnl0ZXMuZGVjb2RlYAorKHdoaWNoIG9ubHkgcHJvZHVjZXMgOmNsYXNzOmBzdHJgIG91dHB1dCkuCiAKIAotLi4gdGFidWxhcmNvbHVtbnM6OiB8bHxMfEx8CisuLiB0YWJ1bGFyY29sdW1uczo6IHxsfEx8THxMfAogCi0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCBDb2RlYyAgICAgICAgICAgICAgICB8IFB1cnBvc2UgICAgICAgICAgICAgICAgICAgfCBFbmNvZGVyL2RlY29kZXIgICAgICAgICAgICAgIHwKLSs9PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCi18IGJhc2U2NF9jb2RlYyBbI2I2NF1fIHwgQ29udmVydCBvcGVyYW5kIHRvIE1JTUUgICB8IDptZXRoOmBiYXNlNjQuYjY0ZW5jb2RlYCwgICAgfAotfCAgICAgICAgICAgICAgICAgICAgICB8IGJhc2U2NCAodGhlIHJlc3VsdCBhbHdheXMgfCA6bWV0aDpgYmFzZTY0LmI2NGRlY29kZWAgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgfCBpbmNsdWRlcyBhIHRyYWlsaW5nICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgIHwgYGAnXG4nYGApICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLXwgYnoyX2NvZGVjICAgICAgICAgICAgfCBDb21wcmVzcyB0aGUgb3BlcmFuZCAgICAgIHwgOm1ldGg6YGJ6Mi5jb21wcmVzc2AsICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgIHwgdXNpbmcgYnoyICAgICAgICAgICAgICAgICB8IDptZXRoOmBiejIuZGVjb21wcmVzc2AgICAgICAgfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLXwgaGV4X2NvZGVjICAgICAgICAgICAgfCBDb252ZXJ0IG9wZXJhbmQgdG8gICAgICAgIHwgOm1ldGg6YGJhc2U2NC5iMTZlbmNvZGVgLCAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgIHwgaGV4YWRlY2ltYWwgICAgICAgICAgICAgICB8IDptZXRoOmBiYXNlNjQuYjE2ZGVjb2RlYCAgICAgfAotfCAgICAgICAgICAgICAgICAgICAgICB8IHJlcHJlc2VudGF0aW9uLCB3aXRoIHR3byAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgfCBkaWdpdHMgcGVyIGJ5dGUgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCBxdW9wcmlfY29kZWMgICAgICAgICB8IENvbnZlcnQgb3BlcmFuZCB0byBNSU1FICAgfCA6bWV0aDpgcXVvcHJpLmVuY29kZXN0cmluZ2AsIHwKLXwgICAgICAgICAgICAgICAgICAgICAgfCBxdW90ZWQgcHJpbnRhYmxlICAgICAgICAgIHwgOm1ldGg6YHF1b3ByaS5kZWNvZGVzdHJpbmdgICB8Ci0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCB1dV9jb2RlYyAgICAgICAgICAgICB8IENvbnZlcnQgdGhlIG9wZXJhbmQgdXNpbmcgfCA6bWV0aDpgdXUuZW5jb2RlYCwgICAgICAgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgfCB1dWVuY29kZSAgICAgICAgICAgICAgICAgIHwgOm1ldGg6YHV1LmRlY29kZWAgICAgICAgICAgICB8Ci0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCB6bGliX2NvZGVjICAgICAgICAgICB8IENvbXByZXNzIHRoZSBvcGVyYW5kICAgICAgfCA6bWV0aDpgemxpYi5jb21wcmVzc2AsICAgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgfCB1c2luZyBnemlwICAgICAgICAgICAgICAgIHwgOm1ldGg6YHpsaWIuZGVjb21wcmVzc2AgICAgICB8Ci0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IENvZGVjICAgICAgICAgICAgICAgIHwgQWxpYXNlcyAgICAgICAgICB8IFB1cnBvc2UgICAgICAgICAgICAgICAgICAgICAgfCBFbmNvZGVyIC8gZGVjb2RlciAgICAgICAgICAgIHwKKys9PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KworfCBiYXNlNjRfY29kZWMgWyNiNjRdXyB8IGJhc2U2NCwgYmFzZV82NCAgfCBDb252ZXJ0IG9wZXJhbmQgdG8gbXVsdGlsaW5lIHwgOm1ldGg6YGJhc2U2NC5lbmNvZGVieXRlc2AgLyB8Cit8ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICB8IE1JTUUgYmFzZTY0ICh0aGUgcmVzdWx0ICAgICAgfCA6bWV0aDpgYmFzZTY0LmRlY29kZWJ5dGVzYCAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgIHwgYWx3YXlzIGluY2x1ZGVzIGEgdHJhaWxpbmcgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgfCBgYCdcbidgYCkgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgIHwgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgfCAgICBhY2NlcHRzIGFueSAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICB8ICAgIDp0ZXJtOmBieXRlcy1saWtlIG9iamVjdGAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgIHwgICAgYXMgaW5wdXQgZm9yIGVuY29kaW5nIGFuZCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgfCAgICBkZWNvZGluZyAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgYnoyX2NvZGVjICAgICAgICAgICAgfCBiejIgICAgICAgICAgICAgIHwgQ29tcHJlc3MgdGhlIG9wZXJhbmQgICAgICAgICB8IDptZXRoOmBiejIuY29tcHJlc3NgIC8gICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgfCB1c2luZyBiejIgICAgICAgICAgICAgICAgICAgIHwgOm1ldGg6YGJ6Mi5kZWNvbXByZXNzYCAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgaGV4X2NvZGVjICAgICAgICAgICAgfCBoZXggICAgICAgICAgICAgIHwgQ29udmVydCBvcGVyYW5kIHRvICAgICAgICAgICB8IDptZXRoOmBiaW5hc2NpaS5iMmFfaGV4YCAvICAgfAorfCAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgfCBoZXhhZGVjaW1hbCAgICAgICAgICAgICAgICAgIHwgOm1ldGg6YGJpbmFzY2lpLmEyYl9oZXhgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICB8IHJlcHJlc2VudGF0aW9uLCB3aXRoIHR3byAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgIHwgZGlnaXRzIHBlciBieXRlICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IHF1b3ByaV9jb2RlYyAgICAgICAgIHwgcXVvcHJpLCAgICAgICAgICB8IENvbnZlcnQgb3BlcmFuZCB0byBNSU1FICAgICAgfCA6bWV0aDpgcXVvcHJpLmVuY29kZWAgd2l0aCAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgfCBxdW90ZWRwcmludGFibGUsIHwgcXVvdGVkIHByaW50YWJsZSAgICAgICAgICAgICB8IGBgcXVvdGV0YWJzPVRydWVgYCAvICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICB8IHF1b3RlZF9wcmludGFibGUgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgOm1ldGg6YHF1b3ByaS5kZWNvZGVgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgdXVfY29kZWMgICAgICAgICAgICAgfCB1dSAgICAgICAgICAgICAgIHwgQ29udmVydCB0aGUgb3BlcmFuZCB1c2luZyAgICB8IDptZXRoOmB1dS5lbmNvZGVgIC8gICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgfCB1dWVuY29kZSAgICAgICAgICAgICAgICAgICAgIHwgOm1ldGg6YHV1LmRlY29kZWAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgemxpYl9jb2RlYyAgICAgICAgICAgfCB6aXAsIHpsaWIgICAgICAgIHwgQ29tcHJlc3MgdGhlIG9wZXJhbmQgICAgICAgICB8IDptZXRoOmB6bGliLmNvbXByZXNzYCAvICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgfCB1c2luZyBnemlwICAgICAgICAgICAgICAgICAgIHwgOm1ldGg6YHpsaWIuZGVjb21wcmVzc2AgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIAotLi4gWyNiNjRdIFJhdGhlciB0aGFuIGFjY2VwdGluZyBhbnkgOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0YCwKLSAgIGBgJ2Jhc2U2NF9jb2RlYydgYCBhY2NlcHRzIG9ubHkgOmNsYXNzOmBieXRlc2AgYW5kIDpjbGFzczpgYnl0ZWFycmF5YCBmb3IKLSAgIGVuY29kaW5nIGFuZCBvbmx5IDpjbGFzczpgYnl0ZXNgLCA6Y2xhc3M6YGJ5dGVhcnJheWAsIGFuZCBBU0NJSS1vbmx5Ci0gICBpbnN0YW5jZXMgb2YgOmNsYXNzOmBzdHJgIGZvciBkZWNvZGluZwotCi0KLVRoZSBmb2xsb3dpbmcgY29kZWNzIHByb3ZpZGUgOmNsYXNzOmBzdHJgIHRvIDpjbGFzczpgc3RyYCBtYXBwaW5ncy4KLQotLi4gdGFidWxhcmNvbHVtbnM6OiB8bHxMfAotCi0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCBDb2RlYyAgICAgICAgICAgICAgfCBQdXJwb3NlICAgICAgICAgICAgICAgICAgIHwKLSs9PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT0rCi18IHJvdF8xMyAgICAgICAgICAgICB8IFJldHVybnMgdGhlIENhZXNhci1jeXBoZXIgfAotfCAgICAgICAgICAgICAgICAgICAgfCBlbmNyeXB0aW9uIG9mIHRoZSBvcGVyYW5kIHwKLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisuLiBbI2I2NF0gSW4gYWRkaXRpb24gdG8gOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0cyA8Ynl0ZXMtbGlrZSBvYmplY3Q+YCwKKyAgIGBgJ2Jhc2U2NF9jb2RlYydgYCBhbHNvIGFjY2VwdHMgQVNDSUktb25seSBpbnN0YW5jZXMgb2YgOmNsYXNzOmBzdHJgIGZvcgorICAgZGVjb2RpbmcKIAogLi4gdmVyc2lvbmFkZGVkOjogMy4yCi0gICBieXRlcy10by1ieXRlcyBhbmQgc3RyLXRvLXN0ciBjb2RlY3MuCisgICBSZXN0b3JhdGlvbiBvZiB0aGUgYmluYXJ5IHRyYW5zZm9ybXMuCisKKy4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICBSZXN0b3JhdGlvbiBvZiB0aGUgYWxpYXNlcyBmb3IgdGhlIGJpbmFyeSB0cmFuc2Zvcm1zLgorCisKKy4uIF90ZXh0LXRyYW5zZm9ybXM6CisKK1RleHQgVHJhbnNmb3JtcworXl5eXl5eXl5eXl5eXl5eCisKK1RoZSBmb2xsb3dpbmcgY29kZWMgcHJvdmlkZXMgYSB0ZXh0IHRyYW5zZm9ybTogYSA6Y2xhc3M6YHN0cmAgdG8gOmNsYXNzOmBzdHJgCittYXBwaW5nLiAgSXQgaXMgbm90IHN1cHBvcnRlZCBieSA6bWV0aDpgc3RyLmVuY29kZWAgKHdoaWNoIG9ubHkgcHJvZHVjZXMKKzpjbGFzczpgYnl0ZXNgIG91dHB1dCkuCisKKy4uIHRhYnVsYXJjb2x1bW5zOjogfGx8bHxMfAorCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgQ29kZWMgICAgICAgICAgICAgIHwgQWxpYXNlcyB8IFB1cnBvc2UgICAgICAgICAgICAgICAgICAgfAorKz09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT0rCit8IHJvdF8xMyAgICAgICAgICAgICB8IHJvdDEzICAgfCBSZXR1cm5zIHRoZSBDYWVzYXItY3lwaGVyIHwKK3wgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8IGVuY3J5cHRpb24gb2YgdGhlIG9wZXJhbmQgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKKy4uIHZlcnNpb25hZGRlZDo6IDMuMgorICAgUmVzdG9yYXRpb24gb2YgdGhlIGBgcm90XzEzYGAgdGV4dCB0cmFuc2Zvcm0uCisKKy4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICBSZXN0b3JhdGlvbiBvZiB0aGUgYGByb3QxM2BgIGFsaWFzLgogCiAKIDptb2Q6YGVuY29kaW5ncy5pZG5hYCAtLS0gSW50ZXJuYXRpb25hbGl6ZWQgRG9tYWluIE5hbWVzIGluIEFwcGxpY2F0aW9ucwpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvY29sbGVjdGlvbnMuYWJjLnJzdCBiL0RvYy9saWJyYXJ5L2NvbGxlY3Rpb25zLmFiYy5yc3QKaW5kZXggNGIyMTkzMi4uZDczZjA1YSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvY29sbGVjdGlvbnMuYWJjLnJzdAorKysgYi9Eb2MvbGlicmFyeS9jb2xsZWN0aW9ucy5hYmMucnN0CkBAIC0xNSw3ICsxNSw3IEBACiAgICBpbXBvcnQgaXRlcnRvb2xzCiAgICBfX25hbWVfXyA9ICc8ZG9jdGVzdD4nCiAKLSoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL2NvbGxlY3Rpb25zL2FiYy5weWAKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL19jb2xsZWN0aW9uc19hYmMucHlgCiAKIC0tLS0tLS0tLS0tLS0tCiAKQEAgLTEyMiw3ICsxMjIsNyBAQAogICAgICAgICAgICBLZXlzVmlldwogICAgICAgICAgICBWYWx1ZXNWaWV3CiAKLSAgIEFCQ3MgZm9yIG1hcHBpbmcsIGl0ZW1zLCBrZXlzLCBhbmQgdmFsdWVzIDp0ZXJtOmB2aWV3cyA8dmlldz5gLgorICAgQUJDcyBmb3IgbWFwcGluZywgaXRlbXMsIGtleXMsIGFuZCB2YWx1ZXMgOnRlcm06YHZpZXdzIDxkaWN0aW9uYXJ5IHZpZXc+YC4KIAogCiBUaGVzZSBBQkNzIGFsbG93IHVzIHRvIGFzayBjbGFzc2VzIG9yIGluc3RhbmNlcyBpZiB0aGV5IHByb3ZpZGUKQEAgLTEzNCw3ICsxMzQsNyBAQAogCiBTZXZlcmFsIG9mIHRoZSBBQkNzIGFyZSBhbHNvIHVzZWZ1bCBhcyBtaXhpbnMgdGhhdCBtYWtlIGl0IGVhc2llciB0byBkZXZlbG9wCiBjbGFzc2VzIHN1cHBvcnRpbmcgY29udGFpbmVyIEFQSXMuICBGb3IgZXhhbXBsZSwgdG8gd3JpdGUgYSBjbGFzcyBzdXBwb3J0aW5nCi10aGUgZnVsbCA6Y2xhc3M6YFNldGAgQVBJLCBpdCBvbmx5IG5lY2Vzc2FyeSB0byBzdXBwbHkgdGhlIHRocmVlIHVuZGVybHlpbmcKK3RoZSBmdWxsIDpjbGFzczpgU2V0YCBBUEksIGl0IGlzIG9ubHkgbmVjZXNzYXJ5IHRvIHN1cHBseSB0aGUgdGhyZWUgdW5kZXJseWluZwogYWJzdHJhY3QgbWV0aG9kczogOm1ldGg6YF9fY29udGFpbnNfX2AsIDptZXRoOmBfX2l0ZXJfX2AsIGFuZCA6bWV0aDpgX19sZW5fX2AuCiBUaGUgQUJDIHN1cHBsaWVzIHRoZSByZW1haW5pbmcgbWV0aG9kcyBzdWNoIGFzIDptZXRoOmBfX2FuZF9fYCBhbmQKIDptZXRoOmBpc2Rpc2pvaW50YDo6CkBAIC0xNzMsMTMgKzE3MywxMyBAQAogCiAoMikKICAgIFRvIG92ZXJyaWRlIHRoZSBjb21wYXJpc29ucyAocHJlc3VtYWJseSBmb3Igc3BlZWQsIGFzIHRoZQotICAgc2VtYW50aWNzIGFyZSBmaXhlZCksIHJlZGVmaW5lIDptZXRoOmBfX2xlX19gIGFuZAorICAgc2VtYW50aWNzIGFyZSBmaXhlZCksIHJlZGVmaW5lIDptZXRoOmBfX2xlX19gIGFuZCA6bWV0aDpgX19nZV9fYCwKICAgIHRoZW4gdGhlIG90aGVyIG9wZXJhdGlvbnMgd2lsbCBhdXRvbWF0aWNhbGx5IGZvbGxvdyBzdWl0LgogCiAoMykKICAgIFRoZSA6Y2xhc3M6YFNldGAgbWl4aW4gcHJvdmlkZXMgYSA6bWV0aDpgX2hhc2hgIG1ldGhvZCB0byBjb21wdXRlIGEgaGFzaCB2YWx1ZQogICAgZm9yIHRoZSBzZXQ7IGhvd2V2ZXIsIDptZXRoOmBfX2hhc2hfX2AgaXMgbm90IGRlZmluZWQgYmVjYXVzZSBub3QgYWxsIHNldHMKLSAgIGFyZSBoYXNoYWJsZSBvciBpbW11dGFibGUuICBUbyBhZGQgc2V0IGhhc2hhYmlsdHkgdXNpbmcgbWl4aW5zLAorICAgYXJlIGhhc2hhYmxlIG9yIGltbXV0YWJsZS4gIFRvIGFkZCBzZXQgaGFzaGFiaWxpdHkgdXNpbmcgbWl4aW5zLAogICAgaW5oZXJpdCBmcm9tIGJvdGggOm1ldGg6YFNldGAgYW5kIDptZXRoOmBIYXNoYWJsZWAsIHRoZW4gZGVmaW5lCiAgICBgYF9faGFzaF9fID0gU2V0Ll9oYXNoYGAuCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2NvbGxlY3Rpb25zLnJzdCBiL0RvYy9saWJyYXJ5L2NvbGxlY3Rpb25zLnJzdAppbmRleCA0ZGVmMWRjLi4wOTcxODI1IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9jb2xsZWN0aW9ucy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvY29sbGVjdGlvbnMucnN0CkBAIC03NiwxNCArNzYsMTkgQEAKICAgICAgICAgYmUgbW9kaWZpZWQgdG8gY2hhbmdlIHdoaWNoIG1hcHBpbmdzIGFyZSBzZWFyY2hlZC4gIFRoZSBsaXN0IHNob3VsZAogICAgICAgICBhbHdheXMgY29udGFpbiBhdCBsZWFzdCBvbmUgbWFwcGluZy4KIAotICAgIC4uIG1ldGhvZDo6IG5ld19jaGlsZCgpCisgICAgLi4gbWV0aG9kOjogbmV3X2NoaWxkKG09Tm9uZSkKIAotICAgICAgICBSZXR1cm5zIGEgbmV3IDpjbGFzczpgQ2hhaW5NYXBgIGNvbnRhaW5pbmcgYSBuZXcgOmNsYXNzOmBkaWN0YCBmb2xsb3dlZCBieQotICAgICAgICBhbGwgb2YgdGhlIG1hcHMgaW4gdGhlIGN1cnJlbnQgaW5zdGFuY2UuICBBIGNhbGwgdG8gYGBkLm5ld19jaGlsZCgpYGAgaXMKLSAgICAgICAgZXF1aXZhbGVudCB0bzogYGBDaGFpbk1hcCh7fSwgKmQubWFwcylgYC4gIFRoaXMgbWV0aG9kIGlzIHVzZWQgZm9yCisgICAgICAgIFJldHVybnMgYSBuZXcgOmNsYXNzOmBDaGFpbk1hcGAgY29udGFpbmluZyBhIG5ldyBtYXAgZm9sbG93ZWQgYnkKKyAgICAgICAgYWxsIG9mIHRoZSBtYXBzIGluIHRoZSBjdXJyZW50IGluc3RhbmNlLiAgSWYgYGBtYGAgaXMgc3BlY2lmaWVkLAorICAgICAgICBpdCBiZWNvbWVzIHRoZSBuZXcgbWFwIGF0IHRoZSBmcm9udCBvZiB0aGUgbGlzdCBvZiBtYXBwaW5nczsgaWYgbm90CisgICAgICAgIHNwZWNpZmllZCwgYW4gZW1wdHkgZGljdCBpcyB1c2VkLCBzbyB0aGF0IGEgY2FsbCB0byBgYGQubmV3X2NoaWxkKClgYAorICAgICAgICBpcyBlcXVpdmFsZW50IHRvOiBgYENoYWluTWFwKHt9LCAqZC5tYXBzKWBgLiAgVGhpcyBtZXRob2QgaXMgdXNlZCBmb3IKICAgICAgICAgY3JlYXRpbmcgc3ViY29udGV4dHMgdGhhdCBjYW4gYmUgdXBkYXRlZCB3aXRob3V0IGFsdGVyaW5nIHZhbHVlcyBpbiBhbnkKICAgICAgICAgb2YgdGhlIHBhcmVudCBtYXBwaW5ncy4KIAorICAgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgICAgICBUaGUgb3B0aW9uYWwgYGBtYGAgcGFyYW1ldGVyIHdhcyBhZGRlZC4KKwogICAgIC4uIGF0dHJpYnV0ZTo6IHBhcmVudHMKIAogICAgICAgICBQcm9wZXJ0eSByZXR1cm5pbmcgYSBuZXcgOmNsYXNzOmBDaGFpbk1hcGAgY29udGFpbmluZyBhbGwgb2YgdGhlIG1hcHMgaW4KQEAgLTEwNCw3ICsxMDksNyBAQAogICAgICAgd3JpdGluZyB0byBhbnkgbWFwcGluZyBpbiB0aGUgY2hhaW4uCiAKICAgICAqIERqYW5nbydzIGBDb250ZXh0IGNsYXNzCi0gICAgICA8aHR0cDovL2NvZGUuZGphbmdvcHJvamVjdC5jb20vYnJvd3Nlci9kamFuZ28vdHJ1bmsvZGphbmdvL3RlbXBsYXRlL2NvbnRleHQucHk+YF8KKyAgICAgIDxodHRwczovL2dpdGh1Yi5jb20vZGphbmdvL2RqYW5nby9ibG9iL21hc3Rlci9kamFuZ28vdGVtcGxhdGUvY29udGV4dC5weT5gXwogICAgICAgZm9yIHRlbXBsYXRpbmcgaXMgYSByZWFkLW9ubHkgY2hhaW4gb2YgbWFwcGluZ3MuICBJdCBhbHNvIGZlYXR1cmVzCiAgICAgICBwdXNoaW5nIGFuZCBwb3BwaW5nIG9mIGNvbnRleHRzIHNpbWlsYXIgdG8gdGhlCiAgICAgICA6bWV0aDpgfmNvbGxlY3Rpb25zLkNoYWluTWFwLm5ld19jaGlsZGAgbWV0aG9kIGFuZCB0aGUKQEAgLTI2Myw5ICsyNjgsOSBAQAogICAgIC4uIG1ldGhvZDo6IG1vc3RfY29tbW9uKFtuXSkKIAogICAgICAgICBSZXR1cm4gYSBsaXN0IG9mIHRoZSAqbiogbW9zdCBjb21tb24gZWxlbWVudHMgYW5kIHRoZWlyIGNvdW50cyBmcm9tIHRoZQotICAgICAgICBtb3N0IGNvbW1vbiB0byB0aGUgbGVhc3QuICBJZiAqbiogaXMgbm90IHNwZWNpZmllZCwgOmZ1bmM6YG1vc3RfY29tbW9uYAotICAgICAgICByZXR1cm5zICphbGwqIGVsZW1lbnRzIGluIHRoZSBjb3VudGVyLiAgRWxlbWVudHMgd2l0aCBlcXVhbCBjb3VudHMgYXJlCi0gICAgICAgIG9yZGVyZWQgYXJiaXRyYXJpbHk6CisgICAgICAgIG1vc3QgY29tbW9uIHRvIHRoZSBsZWFzdC4gIElmICpuKiBpcyBvbWl0dGVkIG9yIGBgTm9uZWBgLAorICAgICAgICA6ZnVuYzpgbW9zdF9jb21tb25gIHJldHVybnMgKmFsbCogZWxlbWVudHMgaW4gdGhlIGNvdW50ZXIuCisgICAgICAgIEVsZW1lbnRzIHdpdGggZXF1YWwgY291bnRzIGFyZSBvcmRlcmVkIGFyYml0cmFyaWx5OgogCiAgICAgICAgICAgICA+Pj4gQ291bnRlcignYWJyYWNhZGFicmEnKS5tb3N0X2NvbW1vbigzKQogICAgICAgICAgICAgWygnYScsIDUpLCAoJ3InLCAyKSwgKCdiJywgMildCkBAIC0zMjgsNyArMzMzLDcgQEAKICAgICA+Pj4gYyB8IGQgICAgICAgICAgICAgICAgICAgICAgICMgdW5pb246ICBtYXgoY1t4XSwgZFt4XSkKICAgICBDb3VudGVyKHsnYSc6IDMsICdiJzogMn0pCiAKLVVuYXJ5IGFkZGl0aW9uIGFuZCBzdWJzdHJhY3Rpb24gYXJlIHNob3J0Y3V0cyBmb3IgYWRkaW5nIGFuIGVtcHR5IGNvdW50ZXIKK1VuYXJ5IGFkZGl0aW9uIGFuZCBzdWJ0cmFjdGlvbiBhcmUgc2hvcnRjdXRzIGZvciBhZGRpbmcgYW4gZW1wdHkgY291bnRlcgogb3Igc3VidHJhY3RpbmcgZnJvbSBhbiBlbXB0eSBjb3VudGVyLgogCiAgICAgPj4+IGMgPSBDb3VudGVyKGE9MiwgYj0tNCkKQEAgLTM2OSwxMCArMzc0LDYgQEAKIAogLi4gc2VlYWxzbzo6CiAKLSAgICAqIGBDb3VudGVyIGNsYXNzIDxodHRwOi8vY29kZS5hY3RpdmVzdGF0ZS5jb20vcmVjaXBlcy81NzY2MTEvPmBfCi0gICAgICBhZGFwdGVkIGZvciBQeXRob24gMi41IGFuZCBhbiBlYXJseSBgQmFnIHJlY2lwZQotICAgICAgPGh0dHA6Ly9jb2RlLmFjdGl2ZXN0YXRlLmNvbS9yZWNpcGVzLzI1OTE3NC8+YF8gZm9yIFB5dGhvbiAyLjQuCi0KICAgICAqIGBCYWcgY2xhc3MgPGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9zbWFsbHRhbGsvbWFudWFsLWJhc2UvaHRtbF9ub2RlL0JhZy5odG1sPmBfCiAgICAgICBpbiBTbWFsbHRhbGsuCiAKQEAgLTgxNSwxMCArODE2LDEwIEBACiAuLiBtZXRob2Q6OiBzb21lbmFtZWR0dXBsZS5fYXNkaWN0KCkKIAogICAgIFJldHVybiBhIG5ldyA6Y2xhc3M6YE9yZGVyZWREaWN0YCB3aGljaCBtYXBzIGZpZWxkIG5hbWVzIHRvIHRoZWlyIGNvcnJlc3BvbmRpbmcKLSAgICB2YWx1ZXMuICBOb3RlLCB0aGlzIG1ldGhvZCBpcyBubyBsb25nZXIgbmVlZGVkIG5vdyB0aGF0IHRoZSBzYW1lIGVmZmVjdCBjYW4KLSAgICBiZSBhY2hpZXZlZCBieSB1c2luZyB0aGUgYnVpbHQtaW4gOmZ1bmM6YHZhcnNgIGZ1bmN0aW9uOjoKKyAgICB2YWx1ZXM6OgogCi0gICAgICAgID4+PiB2YXJzKHApCisgICAgICAgID4+PiBwID0gUG9pbnQoeD0xMSwgeT0yMikKKyAgICAgICAgPj4+IHAuX2FzZGljdCgpCiAgICAgICAgIE9yZGVyZWREaWN0KFsoJ3gnLCAxMSksICgneScsIDIyKV0pCiAKICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMQpAQCAtOTA3LDE5ICs5MDgsMTggQEAKICAgICA+Pj4gamFuZXNfYWNjb3VudCA9IGRlZmF1bHRfYWNjb3VudC5fcmVwbGFjZShvd25lcj0nSmFuZScpCiAKIEVudW1lcmF0ZWQgY29uc3RhbnRzIGNhbiBiZSBpbXBsZW1lbnRlZCB3aXRoIG5hbWVkIHR1cGxlcywgYnV0IGl0IGlzIHNpbXBsZXIKLWFuZCBtb3JlIGVmZmljaWVudCB0byB1c2UgYSBzaW1wbGUgY2xhc3MgZGVjbGFyYXRpb246CithbmQgbW9yZSBlZmZpY2llbnQgdG8gdXNlIGEgc2ltcGxlIDpjbGFzczpgfmVudW0uRW51bWA6CiAKICAgICA+Pj4gU3RhdHVzID0gbmFtZWR0dXBsZSgnU3RhdHVzJywgJ29wZW4gcGVuZGluZyBjbG9zZWQnKS5fbWFrZShyYW5nZSgzKSkKICAgICA+Pj4gU3RhdHVzLm9wZW4sIFN0YXR1cy5wZW5kaW5nLCBTdGF0dXMuY2xvc2VkCiAgICAgKDAsIDEsIDIpCi0gICAgPj4+IGNsYXNzIFN0YXR1czoKLSAgICAgICAgb3BlbiwgcGVuZGluZywgY2xvc2VkID0gcmFuZ2UoMykKKyAgICA+Pj4gZnJvbSBlbnVtIGltcG9ydCBFbnVtCisgICAgPj4+IGNsYXNzIFN0YXR1cyhFbnVtKToKKyAgICAuLi4gICAgIG9wZW4sIHBlbmRpbmcsIGNsb3NlZCA9IHJhbmdlKDMpCisKIAogLi4gc2VlYWxzbzo6CiAKLSAgICAqIGBOYW1lZCB0dXBsZSByZWNpcGUgPGh0dHA6Ly9jb2RlLmFjdGl2ZXN0YXRlLmNvbS9yZWNpcGVzLzUwMDI2MS8+YF8KLSAgICAgIGFkYXB0ZWQgZm9yIFB5dGhvbiAyLjQuCi0KICAgICAqIGBSZWNpcGUgZm9yIG5hbWVkIHR1cGxlIGFic3RyYWN0IGJhc2UgY2xhc3Mgd2l0aCBhIG1ldGFjbGFzcyBtaXgtaW4KICAgICAgIDxodHRwOi8vY29kZS5hY3RpdmVzdGF0ZS5jb20vcmVjaXBlcy81Nzc2MjktbmFtZWR0dXBsZWFiYy1hYnN0cmFjdC1iYXNlLWNsYXNzLW1peC1pbi1mb3ItbmFtZWQvPmBfCiAgICAgICBieSBKYW4gS2FsaXN6ZXdza2kuICBCZXNpZGVzIHByb3ZpZGluZyBhbiA6dGVybTpgYWJzdHJhY3QgYmFzZSBjbGFzc2AgZm9yCkBAIC05ODAsMTggKzk4MCwxNCBAQAogCiBUaGUgOmNsYXNzOmBPcmRlcmVkRGljdGAgY29uc3RydWN0b3IgYW5kIDptZXRoOmB1cGRhdGVgIG1ldGhvZCBib3RoIGFjY2VwdAoga2V5d29yZCBhcmd1bWVudHMsIGJ1dCB0aGVpciBvcmRlciBpcyBsb3N0IGJlY2F1c2UgUHl0aG9uJ3MgZnVuY3Rpb24gY2FsbAotc2VtYW50aWNzIHBhc3MtaW4ga2V5d29yZCBhcmd1bWVudHMgdXNpbmcgYSByZWd1bGFyIHVub3JkZXJlZCBkaWN0aW9uYXJ5Lgorc2VtYW50aWNzIHBhc3MgaW4ga2V5d29yZCBhcmd1bWVudHMgdXNpbmcgYSByZWd1bGFyIHVub3JkZXJlZCBkaWN0aW9uYXJ5LgogCi0uLiBzZWVhbHNvOjoKLQotICAgIGBFcXVpdmFsZW50IE9yZGVyZWREaWN0IHJlY2lwZSA8aHR0cDovL2NvZGUuYWN0aXZlc3RhdGUuY29tL3JlY2lwZXMvNTc2NjkzLz5gXwotICAgIHRoYXQgcnVucyBvbiBQeXRob24gMi40IG9yIGxhdGVyLgogCiA6Y2xhc3M6YE9yZGVyZWREaWN0YCBFeGFtcGxlcyBhbmQgUmVjaXBlcwogXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KIAogU2luY2UgYW4gb3JkZXJlZCBkaWN0aW9uYXJ5IHJlbWVtYmVycyBpdHMgaW5zZXJ0aW9uIG9yZGVyLCBpdCBjYW4gYmUgdXNlZAotaW4gY29uanVjdGlvbiB3aXRoIHNvcnRpbmcgdG8gbWFrZSBhIHNvcnRlZCBkaWN0aW9uYXJ5OjoKK2luIGNvbmp1bmN0aW9uIHdpdGggc29ydGluZyB0byBtYWtlIGEgc29ydGVkIGRpY3Rpb25hcnk6OgogCiAgICAgPj4+ICMgcmVndWxhciB1bnNvcnRlZCBkaWN0aW9uYXJ5CiAgICAgPj4+IGQgPSB7J2JhbmFuYSc6IDMsICdhcHBsZSc6NCwgJ3BlYXInOiAxLCAnb3JhbmdlJzogMn0KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2NvbXBpbGVhbGwucnN0IGIvRG9jL2xpYnJhcnkvY29tcGlsZWFsbC5yc3QKaW5kZXggYjEyYzIxNy4uOTcxMmRlMiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvY29tcGlsZWFsbC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvY29tcGlsZWFsbC5yc3QKQEAgLTQsNiArNCwxMCBAQAogLi4gbW9kdWxlOjogY29tcGlsZWFsbAogICAgOnN5bm9wc2lzOiBUb29scyBmb3IgYnl0ZS1jb21waWxpbmcgYWxsIFB5dGhvbiBzb3VyY2UgZmlsZXMgaW4gYSBkaXJlY3RvcnkgdHJlZS4KIAorKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvY29tcGlsZWFsbC5weWAKKworLS0tLS0tLS0tLS0tLS0KKwogCiBUaGlzIG1vZHVsZSBwcm92aWRlcyBzb21lIHV0aWxpdHkgZnVuY3Rpb25zIHRvIHN1cHBvcnQgaW5zdGFsbGluZyBQeXRob24KIGxpYnJhcmllcy4gIFRoZXNlIGZ1bmN0aW9ucyBjb21waWxlIFB5dGhvbiBzb3VyY2UgZmlsZXMgaW4gYSBkaXJlY3RvcnkgdHJlZS4KQEAgLTIwLDcgKzI0LDggQEAKIAogLi4gcHJvZ3JhbTo6IGNvbXBpbGVhbGwKIAotLi4gY21kb3B0aW9uOjogW2RpcmVjdG9yeXxmaWxlXS4uLgorLi4gY21kb3B0aW9uOjogZGlyZWN0b3J5IC4uLgorICAgICAgICAgICAgICAgZmlsZSAuLi4KIAogICAgUG9zaXRpb25hbCBhcmd1bWVudHMgYXJlIGZpbGVzIHRvIGNvbXBpbGUgb3IgZGlyZWN0b3JpZXMgdGhhdCBjb250YWluCiAgICBzb3VyY2UgZmlsZXMsIHRyYXZlcnNlZCByZWN1cnNpdmVseS4gIElmIG5vIGFyZ3VtZW50IGlzIGdpdmVuLCBiZWhhdmUgYXMgaWYKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2NvbmN1cnJlbmN5LnJzdCBiL0RvYy9saWJyYXJ5L2NvbmN1cnJlbmN5LnJzdAppbmRleCBmMmE1MTJmLi4wZGUyODFiIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9jb25jdXJyZW5jeS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvY29uY3VycmVuY3kucnN0CkBAIC0yMCw3ICsyMCw2IEBACiAgICBzdWJwcm9jZXNzLnJzdAogICAgc2NoZWQucnN0CiAgICBxdWV1ZS5yc3QKLSAgIHNlbGVjdC5yc3QKIAogCiBUaGUgZm9sbG93aW5nIGFyZSBzdXBwb3J0IG1vZHVsZXMgZm9yIHNvbWUgb2YgdGhlIGFib3ZlIHNlcnZpY2VzOgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvY29uY3VycmVudC5mdXR1cmVzLnJzdCBiL0RvYy9saWJyYXJ5L2NvbmN1cnJlbnQuZnV0dXJlcy5yc3QKaW5kZXggNTc1YjFlYS4uZTYzZTc0MSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvY29uY3VycmVudC5mdXR1cmVzLnJzdAorKysgYi9Eb2MvbGlicmFyeS9jb25jdXJyZW50LmZ1dHVyZXMucnN0CkBAIC03NSwxMyArNzUsMTMgQEAKICAgICAgICAgICAgICAgZS5zdWJtaXQoc2h1dGlsLmNvcHksICdzcmMxLnR4dCcsICdkZXN0MS50eHQnKQogICAgICAgICAgICAgICBlLnN1Ym1pdChzaHV0aWwuY29weSwgJ3NyYzIudHh0JywgJ2Rlc3QyLnR4dCcpCiAgICAgICAgICAgICAgIGUuc3VibWl0KHNodXRpbC5jb3B5LCAnc3JjMy50eHQnLCAnZGVzdDMudHh0JykKLSAgICAgICAgICAgICAgZS5zdWJtaXQoc2h1dGlsLmNvcHksICdzcmMzLnR4dCcsICdkZXN0NC50eHQnKQorICAgICAgICAgICAgICBlLnN1Ym1pdChzaHV0aWwuY29weSwgJ3NyYzQudHh0JywgJ2Rlc3Q0LnR4dCcpCiAKIAogVGhyZWFkUG9vbEV4ZWN1dG9yCiAtLS0tLS0tLS0tLS0tLS0tLS0KIAotOmNsYXNzOmBUaHJlYWRQb29sRXhlY3V0b3JgIGlzIGEgOmNsYXNzOmBFeGVjdXRvcmAgc3ViY2xhc3MgdGhhdCB1c2VzIGEgcG9vbCBvZgorOmNsYXNzOmBUaHJlYWRQb29sRXhlY3V0b3JgIGlzIGFuIDpjbGFzczpgRXhlY3V0b3JgIHN1YmNsYXNzIHRoYXQgdXNlcyBhIHBvb2wgb2YKIHRocmVhZHMgdG8gZXhlY3V0ZSBjYWxscyBhc3luY2hyb25vdXNseS4KIAogRGVhZGxvY2tzIGNhbiBvY2N1ciB3aGVuIHRoZSBjYWxsYWJsZSBhc3NvY2lhdGVkIHdpdGggYSA6Y2xhc3M6YEZ1dHVyZWAgd2FpdHMgb24KQEAgLTEzOCw4ICsxMzgsOCBAQAogCiAgICAjIFJldHJpZXZlIGEgc2luZ2xlIHBhZ2UgYW5kIHJlcG9ydCB0aGUgdXJsIGFuZCBjb250ZW50cwogICAgZGVmIGxvYWRfdXJsKHVybCwgdGltZW91dCk6Ci0gICAgICAgY29ubiA9IHVybGxpYi5yZXF1ZXN0LnVybG9wZW4odXJsLCB0aW1lb3V0PXRpbWVvdXQpCi0gICAgICAgcmV0dXJuIGNvbm4ucmVhZGFsbCgpCisgICAgICAgd2l0aCB1cmxsaWIucmVxdWVzdC51cmxvcGVuKHVybCwgdGltZW91dD10aW1lb3V0KSBhcyBjb25uOgorICAgICAgICAgICByZXR1cm4gY29ubi5yZWFkKCkKIAogICAgIyBXZSBjYW4gdXNlIGEgd2l0aCBzdGF0ZW1lbnQgdG8gZW5zdXJlIHRocmVhZHMgYXJlIGNsZWFuZWQgdXAgcHJvbXB0bHkKICAgIHdpdGggY29uY3VycmVudC5mdXR1cmVzLlRocmVhZFBvb2xFeGVjdXRvcihtYXhfd29ya2Vycz01KSBhcyBleGVjdXRvcjoKQEAgLTE2NCw2ICsxNjQsOSBAQAogYWxsb3dzIGl0IHRvIHNpZGUtc3RlcCB0aGUgOnRlcm06YEdsb2JhbCBJbnRlcnByZXRlciBMb2NrYCBidXQgYWxzbyBtZWFucyB0aGF0CiBvbmx5IHBpY2tsYWJsZSBvYmplY3RzIGNhbiBiZSBleGVjdXRlZCBhbmQgcmV0dXJuZWQuCiAKK1RoZSBgYF9fbWFpbl9fYGAgbW9kdWxlIG11c3QgYmUgaW1wb3J0YWJsZSBieSB3b3JrZXIgc3VicHJvY2Vzc2VzLiBUaGlzIG1lYW5zCit0aGF0IDpjbGFzczpgUHJvY2Vzc1Bvb2xFeGVjdXRvcmAgd2lsbCBub3Qgd29yayBpbiB0aGUgaW50ZXJhY3RpdmUgaW50ZXJwcmV0ZXIuCisKIENhbGxpbmcgOmNsYXNzOmBFeGVjdXRvcmAgb3IgOmNsYXNzOmBGdXR1cmVgIG1ldGhvZHMgZnJvbSBhIGNhbGxhYmxlIHN1Ym1pdHRlZAogdG8gYSA6Y2xhc3M6YFByb2Nlc3NQb29sRXhlY3V0b3JgIHdpbGwgcmVzdWx0IGluIGRlYWRsb2NrLgogCkBAIC0yODIsNyArMjg1LDcgQEAKIAogICAgICAgIEFkZGVkIGNhbGxhYmxlcyBhcmUgY2FsbGVkIGluIHRoZSBvcmRlciB0aGF0IHRoZXkgd2VyZSBhZGRlZCBhbmQgYXJlCiAgICAgICAgYWx3YXlzIGNhbGxlZCBpbiBhIHRocmVhZCBiZWxvbmdpbmcgdG8gdGhlIHByb2Nlc3MgdGhhdCBhZGRlZCB0aGVtLiAgSWYKLSAgICAgICB0aGUgY2FsbGFibGUgcmFpc2VzIGEgOmV4YzpgRXhjZXB0aW9uYCBzdWJjbGFzcywgaXQgd2lsbCBiZSBsb2dnZWQgYW5kCisgICAgICAgdGhlIGNhbGxhYmxlIHJhaXNlcyBhbiA6ZXhjOmBFeGNlcHRpb25gIHN1YmNsYXNzLCBpdCB3aWxsIGJlIGxvZ2dlZCBhbmQKICAgICAgICBpZ25vcmVkLiAgSWYgdGhlIGNhbGxhYmxlIHJhaXNlcyBhIDpleGM6YEJhc2VFeGNlcHRpb25gIHN1YmNsYXNzLCB0aGUKICAgICAgICBiZWhhdmlvciBpcyB1bmRlZmluZWQuCiAKQEAgLTM4OCw2ICszOTEsOCBAQAogRXhjZXB0aW9uIGNsYXNzZXMKIC0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIGN1cnJlbnRtb2R1bGU6OiBjb25jdXJyZW50LmZ1dHVyZXMucHJvY2VzcworCiAuLiBleGNlcHRpb246OiBCcm9rZW5Qcm9jZXNzUG9vbAogCiAgICBEZXJpdmVkIGZyb20gOmV4YzpgUnVudGltZUVycm9yYCwgdGhpcyBleGNlcHRpb24gY2xhc3MgaXMgcmFpc2VkIHdoZW4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2NvbmZpZ3BhcnNlci5yc3QgYi9Eb2MvbGlicmFyeS9jb25maWdwYXJzZXIucnN0CmluZGV4IDAyNGQyN2MuLjkyNTUxYmMgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2NvbmZpZ3BhcnNlci5yc3QKKysrIGIvRG9jL2xpYnJhcnkvY29uZmlncGFyc2VyLnJzdApAQCAtMzg2LDcgKzM4Niw3IEBACiAqIEFsbCBzZWN0aW9ucyBpbmNsdWRlIGBgREVGQVVMVFNFQ1RgYCB2YWx1ZXMgYXMgd2VsbCB3aGljaCBtZWFucyB0aGF0CiAgIGBgLmNsZWFyKClgYCBvbiBhIHNlY3Rpb24gbWF5IG5vdCBsZWF2ZSB0aGUgc2VjdGlvbiB2aXNpYmx5IGVtcHR5LiAgVGhpcyBpcwogICBiZWNhdXNlIGRlZmF1bHQgdmFsdWVzIGNhbm5vdCBiZSBkZWxldGVkIGZyb20gdGhlIHNlY3Rpb24gKGJlY2F1c2UgdGVjaG5pY2FsbHkKLSAgdGhleSBhcmUgbm90IHRoZXJlKS4gIElmIHRoZXkgYXJlIG92ZXJyaWRlbiBpbiB0aGUgc2VjdGlvbiwgZGVsZXRpbmcgY2F1c2VzCisgIHRoZXkgYXJlIG5vdCB0aGVyZSkuICBJZiB0aGV5IGFyZSBvdmVycmlkZGVuIGluIHRoZSBzZWN0aW9uLCBkZWxldGluZyBjYXVzZXMKICAgdGhlIGRlZmF1bHQgdmFsdWUgdG8gYmUgdmlzaWJsZSBhZ2Fpbi4gIFRyeWluZyB0byBkZWxldGUgYSBkZWZhdWx0IHZhbHVlCiAgIGNhdXNlcyBhIGBgS2V5RXJyb3JgYC4KIApAQCAtNjY3LDcgKzY2Nyw3IEBACiAKIE1vcmUgYWR2YW5jZWQgY3VzdG9taXphdGlvbiBtYXkgYmUgYWNoaWV2ZWQgYnkgb3ZlcnJpZGluZyBkZWZhdWx0IHZhbHVlcyBvZgogdGhlc2UgcGFyc2VyIGF0dHJpYnV0ZXMuICBUaGUgZGVmYXVsdHMgYXJlIGRlZmluZWQgb24gdGhlIGNsYXNzZXMsIHNvIHRoZXkKLW1heSBiZSBvdmVycmlkZW4gYnkgc3ViY2xhc3NlcyBvciBieSBhdHRyaWJ1dGUgYXNzaWdubWVudC4KK21heSBiZSBvdmVycmlkZGVuIGJ5IHN1YmNsYXNzZXMgb3IgYnkgYXR0cmlidXRlIGFzc2lnbm1lbnQuCiAKIC4uIGF0dHJpYnV0ZTo6IEJPT0xFQU5fU1RBVEVTCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2NvbnN0YW50cy5yc3QgYi9Eb2MvbGlicmFyeS9jb25zdGFudHMucnN0CmluZGV4IDA1OWEyMWQuLjQyYjVhZjIgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2NvbnN0YW50cy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvY29uc3RhbnRzLnJzdApAQCAtMjYsOSArMjYsMjQgQEAKIAogLi4gZGF0YTo6IE5vdEltcGxlbWVudGVkCiAKLSAgIFNwZWNpYWwgdmFsdWUgd2hpY2ggY2FuIGJlIHJldHVybmVkIGJ5IHRoZSAicmljaCBjb21wYXJpc29uIiBzcGVjaWFsIG1ldGhvZHMKLSAgICg6bWV0aDpgX19lcV9fYCwgOm1ldGg6YF9fbHRfX2AsIGFuZCBmcmllbmRzKSwgdG8gaW5kaWNhdGUgdGhhdCB0aGUgY29tcGFyaXNvbgotICAgaXMgbm90IGltcGxlbWVudGVkIHdpdGggcmVzcGVjdCB0byB0aGUgb3RoZXIgdHlwZS4KKyAgIFNwZWNpYWwgdmFsdWUgd2hpY2ggc2hvdWxkIGJlIHJldHVybmVkIGJ5IHRoZSBiaW5hcnkgc3BlY2lhbCBtZXRob2RzCisgICAoZS5nLiA6bWV0aDpgX19lcV9fYCwgOm1ldGg6YF9fbHRfX2AsIDptZXRoOmBfX2FkZF9fYCwgOm1ldGg6YF9fcnN1Yl9fYCwKKyAgIGV0Yy4pIHRvIGluZGljYXRlIHRoYXQgdGhlIG9wZXJhdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgd2l0aCByZXNwZWN0IHRvCisgICB0aGUgb3RoZXIgdHlwZTsgbWF5IGJlIHJldHVybmVkIGJ5IHRoZSBpbi1wbGFjZSBiaW5hcnkgc3BlY2lhbCBtZXRob2RzCisgICAoZS5nLiA6bWV0aDpgX19pbXVsX19gLCA6bWV0aDpgX19pYW5kX19gLCBldGMuKSBmb3IgdGhlIHNhbWUgcHVycG9zZS4KKyAgIEl0cyB0cnV0aCB2YWx1ZSBpcyB0cnVlLgorCisuLiBub3RlOjoKKworICAgV2hlbiBgYE5vdEltcGxlbWVudGVkYGAgaXMgcmV0dXJuZWQsIHRoZSBpbnRlcnByZXRlciB3aWxsIHRoZW4gdHJ5IHRoZQorICAgcmVmbGVjdGVkIG9wZXJhdGlvbiBvbiB0aGUgb3RoZXIgdHlwZSwgb3Igc29tZSBvdGhlciBmYWxsYmFjaywgZGVwZW5kaW5nCisgICBvbiB0aGUgb3BlcmF0b3IuICBJZiBhbGwgYXR0ZW1wdGVkIG9wZXJhdGlvbnMgcmV0dXJuIGBgTm90SW1wbGVtZW50ZWRgYCwgdGhlCisgICBpbnRlcnByZXRlciB3aWxsIHJhaXNlIGFuIGFwcHJvcHJpYXRlIGV4Y2VwdGlvbi4KKworICAgU2VlCisgICA6cmVmOmBpbXBsZW1lbnRpbmctdGhlLWFyaXRobWV0aWMtb3BlcmF0aW9uc2AKKyAgIGZvciBtb3JlIGRldGFpbHMuCisKIAogCiAuLiBkYXRhOjogRWxsaXBzaXMKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2NvbnRleHRsaWIucnN0IGIvRG9jL2xpYnJhcnkvY29udGV4dGxpYi5yc3QKaW5kZXggZmJhNDhmNC4uMmIyY2VjZSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvY29udGV4dGxpYi5yc3QKKysrIGIvRG9jL2xpYnJhcnkvY29udGV4dGxpYi5yc3QKQEAgLTk1LDYgKzk1LDgzIEBACiAgICBgYHBhZ2UuY2xvc2UoKWBgIHdpbGwgYmUgY2FsbGVkIHdoZW4gdGhlIDprZXl3b3JkOmB3aXRoYCBibG9jayBpcyBleGl0ZWQuCiAKIAorLi4gZnVuY3Rpb246OiBzdXBwcmVzcygqZXhjZXB0aW9ucykKKworICAgUmV0dXJuIGEgY29udGV4dCBtYW5hZ2VyIHRoYXQgc3VwcHJlc3NlcyBhbnkgb2YgdGhlIHNwZWNpZmllZCBleGNlcHRpb25zCisgICBpZiB0aGV5IG9jY3VyIGluIHRoZSBib2R5IG9mIGEgd2l0aCBzdGF0ZW1lbnQgYW5kIHRoZW4gcmVzdW1lcyBleGVjdXRpb24KKyAgIHdpdGggdGhlIGZpcnN0IHN0YXRlbWVudCBmb2xsb3dpbmcgdGhlIGVuZCBvZiB0aGUgd2l0aCBzdGF0ZW1lbnQuCisKKyAgIEFzIHdpdGggYW55IG90aGVyIG1lY2hhbmlzbSB0aGF0IGNvbXBsZXRlbHkgc3VwcHJlc3NlcyBleGNlcHRpb25zLCB0aGlzCisgICBjb250ZXh0IG1hbmFnZXIgc2hvdWxkIGJlIHVzZWQgb25seSB0byBjb3ZlciB2ZXJ5IHNwZWNpZmljIGVycm9ycyB3aGVyZQorICAgc2lsZW50bHkgY29udGludWluZyB3aXRoIHByb2dyYW0gZXhlY3V0aW9uIGlzIGtub3duIHRvIGJlIHRoZSByaWdodAorICAgdGhpbmcgdG8gZG8uCisKKyAgIEZvciBleGFtcGxlOjoKKworICAgICAgIGZyb20gY29udGV4dGxpYiBpbXBvcnQgc3VwcHJlc3MKKworICAgICAgIHdpdGggc3VwcHJlc3MoRmlsZU5vdEZvdW5kRXJyb3IpOgorICAgICAgICAgICBvcy5yZW1vdmUoJ3NvbWVmaWxlLnRtcCcpCisKKyAgICAgICB3aXRoIHN1cHByZXNzKEZpbGVOb3RGb3VuZEVycm9yKToKKyAgICAgICAgICAgb3MucmVtb3ZlKCdzb21lb3RoZXJmaWxlLnRtcCcpCisKKyAgIFRoaXMgY29kZSBpcyBlcXVpdmFsZW50IHRvOjoKKworICAgICAgIHRyeToKKyAgICAgICAgICAgb3MucmVtb3ZlKCdzb21lZmlsZS50bXAnKQorICAgICAgIGV4Y2VwdCBGaWxlTm90Rm91bmRFcnJvcjoKKyAgICAgICAgICAgcGFzcworCisgICAgICAgdHJ5OgorICAgICAgICAgICBvcy5yZW1vdmUoJ3NvbWVvdGhlcmZpbGUudG1wJykKKyAgICAgICBleGNlcHQgRmlsZU5vdEZvdW5kRXJyb3I6CisgICAgICAgICAgIHBhc3MKKworICAgVGhpcyBjb250ZXh0IG1hbmFnZXIgaXMgOnJlZjpgcmVlbnRyYW50IDxyZWVudHJhbnQtY21zPmAuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKKy4uIGZ1bmN0aW9uOjogcmVkaXJlY3Rfc3Rkb3V0KG5ld190YXJnZXQpCisKKyAgIENvbnRleHQgbWFuYWdlciBmb3IgdGVtcG9yYXJpbHkgcmVkaXJlY3RpbmcgOmRhdGE6YHN5cy5zdGRvdXRgIHRvCisgICBhbm90aGVyIGZpbGUgb3IgZmlsZS1saWtlIG9iamVjdC4KKworICAgVGhpcyB0b29sIGFkZHMgZmxleGliaWxpdHkgdG8gZXhpc3RpbmcgZnVuY3Rpb25zIG9yIGNsYXNzZXMgd2hvc2Ugb3V0cHV0CisgICBpcyBoYXJkd2lyZWQgdG8gc3Rkb3V0LgorCisgICBGb3IgZXhhbXBsZSwgdGhlIG91dHB1dCBvZiA6ZnVuYzpgaGVscGAgbm9ybWFsbHkgaXMgc2VudCB0byAqc3lzLnN0ZG91dCouCisgICBZb3UgY2FuIGNhcHR1cmUgdGhhdCBvdXRwdXQgaW4gYSBzdHJpbmcgYnkgcmVkaXJlY3RpbmcgdGhlIG91dHB1dCB0byBhbgorICAgOmNsYXNzOmBpby5TdHJpbmdJT2Agb2JqZWN0OjoKKworICAgICAgICBmID0gaW8uU3RyaW5nSU8oKQorICAgICAgICB3aXRoIHJlZGlyZWN0X3N0ZG91dChmKToKKyAgICAgICAgICAgIGhlbHAocG93KQorICAgICAgICBzID0gZi5nZXR2YWx1ZSgpCisKKyAgIFRvIHNlbmQgdGhlIG91dHB1dCBvZiA6ZnVuYzpgaGVscGAgdG8gYSBmaWxlIG9uIGRpc2ssIHJlZGlyZWN0IHRoZSBvdXRwdXQKKyAgIHRvIGEgcmVndWxhciBmaWxlOjoKKworICAgICAgICB3aXRoIG9wZW4oJ2hlbHAudHh0JywgJ3cnKSBhcyBmOgorICAgICAgICAgICAgd2l0aCByZWRpcmVjdF9zdGRvdXQoZik6CisgICAgICAgICAgICAgICAgaGVscChwb3cpCisKKyAgIFRvIHNlbmQgdGhlIG91dHB1dCBvZiA6ZnVuYzpgaGVscGAgdG8gKnN5cy5zdGRlcnIqOjoKKworICAgICAgICB3aXRoIHJlZGlyZWN0X3N0ZG91dChzeXMuc3RkZXJyKToKKyAgICAgICAgICAgIGhlbHAocG93KQorCisgICBOb3RlIHRoYXQgdGhlIGdsb2JhbCBzaWRlIGVmZmVjdCBvbiA6ZGF0YTpgc3lzLnN0ZG91dGAgbWVhbnMgdGhhdCB0aGlzCisgICBjb250ZXh0IG1hbmFnZXIgaXMgbm90IHN1aXRhYmxlIGZvciB1c2UgaW4gbGlicmFyeSBjb2RlIGFuZCBtb3N0IHRocmVhZGVkCisgICBhcHBsaWNhdGlvbnMuIEl0IGFsc28gaGFzIG5vIGVmZmVjdCBvbiB0aGUgb3V0cHV0IG9mIHN1YnByb2Nlc3Nlcy4KKyAgIEhvd2V2ZXIsIGl0IGlzIHN0aWxsIGEgdXNlZnVsIGFwcHJvYWNoIGZvciBtYW55IHV0aWxpdHkgc2NyaXB0cy4KKworICAgVGhpcyBjb250ZXh0IG1hbmFnZXIgaXMgOnJlZjpgcmVlbnRyYW50IDxyZWVudHJhbnQtY21zPmAuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIC4uIGNsYXNzOjogQ29udGV4dERlY29yYXRvcigpCiAKICAgIEEgYmFzZSBjbGFzcyB0aGF0IGVuYWJsZXMgYSBjb250ZXh0IG1hbmFnZXIgdG8gYWxzbyBiZSB1c2VkIGFzIGEgZGVjb3JhdG9yLgpAQCAtMjk0LDcgKzM3MSw3IEBACiAgICAgd2l0aCBFeGl0U3RhY2soKSBhcyBzdGFjazoKICAgICAgICAgZm9yIHJlc291cmNlIGluIHJlc291cmNlczoKICAgICAgICAgICAgIHN0YWNrLmVudGVyX2NvbnRleHQocmVzb3VyY2UpCi0gICAgICAgIGlmIG5lZWRfc3BlY2lhbCByZXNvdXJjZToKKyAgICAgICAgaWYgbmVlZF9zcGVjaWFsX3Jlc291cmNlKCk6CiAgICAgICAgICAgICBzcGVjaWFsID0gYWNxdWlyZV9zcGVjaWFsX3Jlc291cmNlKCkKICAgICAgICAgICAgIHN0YWNrLmNhbGxiYWNrKHJlbGVhc2Vfc3BlY2lhbF9yZXNvdXJjZSwgc3BlY2lhbCkKICAgICAgICAgIyBQZXJmb3JtIG9wZXJhdGlvbnMgdGhhdCB1c2UgdGhlIGFjcXVpcmVkIHJlc291cmNlcwpAQCAtNDY2LDcgKzU0Myw3IEBACiAKIER1ZSB0byB0aGUgd2F5IHRoZSBkZWNvcmF0b3IgcHJvdG9jb2wgd29ya3MsIGEgY2FsbGJhY2sgZnVuY3Rpb24KIGRlY2xhcmVkIHRoaXMgd2F5IGNhbm5vdCB0YWtlIGFueSBwYXJhbWV0ZXJzLiBJbnN0ZWFkLCBhbnkgcmVzb3VyY2VzIHRvCi1iZSByZWxlYXNlZCBtdXN0IGJlIGFjY2Vzc2VkIGFzIGNsb3N1cmUgdmFyaWFibGVzCitiZSByZWxlYXNlZCBtdXN0IGJlIGFjY2Vzc2VkIGFzIGNsb3N1cmUgdmFyaWFibGVzLgogCiAKIFVzaW5nIGEgY29udGV4dCBtYW5hZ2VyIGFzIGEgZnVuY3Rpb24gZGVjb3JhdG9yCkBAIC00OTEsMTAgKzU2OCwxMCBAQAogICAgICAgICAgICAgc2VsZi5uYW1lID0gbmFtZQogCiAgICAgICAgIGRlZiBfX2VudGVyX18oc2VsZik6Ci0gICAgICAgICAgICBsb2dnaW5nLmluZm8oJ0VudGVyaW5nOiB7fScuZm9ybWF0KG5hbWUpKQorICAgICAgICAgICAgbG9nZ2luZy5pbmZvKCdFbnRlcmluZzoge30nLmZvcm1hdChzZWxmLm5hbWUpKQogCiAgICAgICAgIGRlZiBfX2V4aXRfXyhzZWxmLCBleGNfdHlwZSwgZXhjLCBleGNfdGIpOgotICAgICAgICAgICAgbG9nZ2luZy5pbmZvKCdFeGl0aW5nOiB7fScuZm9ybWF0KG5hbWUpKQorICAgICAgICAgICAgbG9nZ2luZy5pbmZvKCdFeGl0aW5nOiB7fScuZm9ybWF0KHNlbGYubmFtZSkpCiAKIEluc3RhbmNlcyBvZiB0aGlzIGNsYXNzIGNhbiBiZSB1c2VkIGFzIGJvdGggYSBjb250ZXh0IG1hbmFnZXI6OgogCkBAIC01MjAsMyArNTk3LDE1MyBAQAogICAgICAgVGhlIHNwZWNpZmljYXRpb24sIGJhY2tncm91bmQsIGFuZCBleGFtcGxlcyBmb3IgdGhlIFB5dGhvbiA6a2V5d29yZDpgd2l0aGAKICAgICAgIHN0YXRlbWVudC4KIAorLi4gX3NpbmdsZS11c2UtcmV1c2FibGUtYW5kLXJlZW50cmFudC1jbXM6CisKK1NpbmdsZSB1c2UsIHJldXNhYmxlIGFuZCByZWVudHJhbnQgY29udGV4dCBtYW5hZ2VycworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK01vc3QgY29udGV4dCBtYW5hZ2VycyBhcmUgd3JpdHRlbiBpbiBhIHdheSB0aGF0IG1lYW5zIHRoZXkgY2FuIG9ubHkgYmUKK3VzZWQgZWZmZWN0aXZlbHkgaW4gYSA6a2V5d29yZDpgd2l0aGAgc3RhdGVtZW50IG9uY2UuIFRoZXNlIHNpbmdsZSB1c2UKK2NvbnRleHQgbWFuYWdlcnMgbXVzdCBiZSBjcmVhdGVkIGFmcmVzaCBlYWNoIHRpbWUgdGhleSdyZSB1c2VkIC0KK2F0dGVtcHRpbmcgdG8gdXNlIHRoZW0gYSBzZWNvbmQgdGltZSB3aWxsIHRyaWdnZXIgYW4gZXhjZXB0aW9uIG9yCitvdGhlcndpc2Ugbm90IHdvcmsgY29ycmVjdGx5LgorCitUaGlzIGNvbW1vbiBsaW1pdGF0aW9uIG1lYW5zIHRoYXQgaXQgaXMgZ2VuZXJhbGx5IGFkdmlzYWJsZSB0byBjcmVhdGUKK2NvbnRleHQgbWFuYWdlcnMgZGlyZWN0bHkgaW4gdGhlIGhlYWRlciBvZiB0aGUgOmtleXdvcmQ6YHdpdGhgIHN0YXRlbWVudAord2hlcmUgdGhleSBhcmUgdXNlZCAoYXMgc2hvd24gaW4gYWxsIG9mIHRoZSB1c2FnZSBleGFtcGxlcyBhYm92ZSkuCisKK0ZpbGVzIGFyZSBhbiBleGFtcGxlIG9mIGVmZmVjdGl2ZWx5IHNpbmdsZSB1c2UgY29udGV4dCBtYW5hZ2Vycywgc2luY2UKK3RoZSBmaXJzdCA6a2V5d29yZDpgd2l0aGAgc3RhdGVtZW50IHdpbGwgY2xvc2UgdGhlIGZpbGUsIHByZXZlbnRpbmcgYW55CitmdXJ0aGVyIElPIG9wZXJhdGlvbnMgdXNpbmcgdGhhdCBmaWxlIG9iamVjdC4KKworQ29udGV4dCBtYW5hZ2VycyBjcmVhdGVkIHVzaW5nIDpmdW5jOmBjb250ZXh0bWFuYWdlcmAgYXJlIGFsc28gc2luZ2xlIHVzZQorY29udGV4dCBtYW5hZ2VycywgYW5kIHdpbGwgY29tcGxhaW4gYWJvdXQgdGhlIHVuZGVybHlpbmcgZ2VuZXJhdG9yIGZhaWxpbmcKK3RvIHlpZWxkIGlmIGFuIGF0dGVtcHQgaXMgbWFkZSB0byB1c2UgdGhlbSBhIHNlY29uZCB0aW1lOjoKKworICAgID4+PiBmcm9tIGNvbnRleHRsaWIgaW1wb3J0IGNvbnRleHRtYW5hZ2VyCisgICAgPj4+IEBjb250ZXh0bWFuYWdlcgorICAgIC4uLiBkZWYgc2luZ2xldXNlKCk6CisgICAgLi4uICAgICBwcmludCgiQmVmb3JlIikKKyAgICAuLi4gICAgIHlpZWxkCisgICAgLi4uICAgICBwcmludCgiQWZ0ZXIiKQorICAgIC4uLgorICAgID4+PiBjbSA9IHNpbmdsZXVzZSgpCisgICAgPj4+IHdpdGggY206CisgICAgLi4uICAgICBwYXNzCisgICAgLi4uCisgICAgQmVmb3JlCisgICAgQWZ0ZXIKKyAgICA+Pj4gd2l0aCBjbToKKyAgICAuLi4gICAgcGFzcworICAgIC4uLgorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgICAgLi4uCisgICAgUnVudGltZUVycm9yOiBnZW5lcmF0b3IgZGlkbid0IHlpZWxkCisKKworLi4gX3JlZW50cmFudC1jbXM6CisKK1JlZW50cmFudCBjb250ZXh0IG1hbmFnZXJzCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorCitNb3JlIHNvcGhpc3RpY2F0ZWQgY29udGV4dCBtYW5hZ2VycyBtYXkgYmUgInJlZW50cmFudCIuIFRoZXNlIGNvbnRleHQKK21hbmFnZXJzIGNhbiBub3Qgb25seSBiZSB1c2VkIGluIG11bHRpcGxlIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnRzLAorYnV0IG1heSBhbHNvIGJlIHVzZWQgKmluc2lkZSogYSA6a2V5d29yZDpgd2l0aGAgc3RhdGVtZW50IHRoYXQgaXMgYWxyZWFkeQordXNpbmcgdGhlIHNhbWUgY29udGV4dCBtYW5hZ2VyLgorCis6Y2xhc3M6YHRocmVhZGluZy5STG9ja2AgaXMgYW4gZXhhbXBsZSBvZiBhIHJlZW50cmFudCBjb250ZXh0IG1hbmFnZXIsIGFzIGFyZQorOmZ1bmM6YHN1cHByZXNzYCBhbmQgOmZ1bmM6YHJlZGlyZWN0X3N0ZG91dGAuIEhlcmUncyBhIHZlcnkgc2ltcGxlIGV4YW1wbGUgb2YKK3JlZW50cmFudCB1c2U6OgorCisgICAgPj4+IGZyb20gY29udGV4dGxpYiBpbXBvcnQgcmVkaXJlY3Rfc3Rkb3V0CisgICAgPj4+IGZyb20gaW8gaW1wb3J0IFN0cmluZ0lPCisgICAgPj4+IHN0cmVhbSA9IFN0cmluZ0lPKCkKKyAgICA+Pj4gd3JpdGVfdG9fc3RyZWFtID0gcmVkaXJlY3Rfc3Rkb3V0KHN0cmVhbSkKKyAgICA+Pj4gd2l0aCB3cml0ZV90b19zdHJlYW06CisgICAgLi4uICAgICBwcmludCgiVGhpcyBpcyB3cml0dGVuIHRvIHRoZSBzdHJlYW0gcmF0aGVyIHRoYW4gc3Rkb3V0IikKKyAgICAuLi4gICAgIHdpdGggd3JpdGVfdG9fc3RyZWFtOgorICAgIC4uLiAgICAgICAgIHByaW50KCJUaGlzIGlzIGFsc28gd3JpdHRlbiB0byB0aGUgc3RyZWFtIikKKyAgICAuLi4KKyAgICA+Pj4gcHJpbnQoIlRoaXMgaXMgd3JpdHRlbiBkaXJlY3RseSB0byBzdGRvdXQiKQorICAgIFRoaXMgaXMgd3JpdHRlbiBkaXJlY3RseSB0byBzdGRvdXQKKyAgICA+Pj4gcHJpbnQoc3RyZWFtLmdldHZhbHVlKCkpCisgICAgVGhpcyBpcyB3cml0dGVuIHRvIHRoZSBzdHJlYW0gcmF0aGVyIHRoYW4gc3Rkb3V0CisgICAgVGhpcyBpcyBhbHNvIHdyaXR0ZW4gdG8gdGhlIHN0cmVhbQorCitSZWFsIHdvcmxkIGV4YW1wbGVzIG9mIHJlZW50cmFuY3kgYXJlIG1vcmUgbGlrZWx5IHRvIGludm9sdmUgbXVsdGlwbGUKK2Z1bmN0aW9ucyBjYWxsaW5nIGVhY2ggb3RoZXIgYW5kIGhlbmNlIGJlIGZhciBtb3JlIGNvbXBsaWNhdGVkIHRoYW4gdGhpcworZXhhbXBsZS4KKworTm90ZSBhbHNvIHRoYXQgYmVpbmcgcmVlbnRyYW50IGlzICpub3QqIHRoZSBzYW1lIHRoaW5nIGFzIGJlaW5nIHRocmVhZCBzYWZlLgorOmZ1bmM6YHJlZGlyZWN0X3N0ZG91dGAsIGZvciBleGFtcGxlLCBpcyBkZWZpbml0ZWx5IG5vdCB0aHJlYWQgc2FmZSwgYXMgaXQKK21ha2VzIGEgZ2xvYmFsIG1vZGlmaWNhdGlvbiB0byB0aGUgc3lzdGVtIHN0YXRlIGJ5IGJpbmRpbmcgOmRhdGE6YHN5cy5zdGRvdXRgCit0byBhIGRpZmZlcmVudCBzdHJlYW0uCisKKworLi4gX3JldXNhYmxlLWNtczoKKworUmV1c2FibGUgY29udGV4dCBtYW5hZ2VycworXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorCitEaXN0aW5jdCBmcm9tIGJvdGggc2luZ2xlIHVzZSBhbmQgcmVlbnRyYW50IGNvbnRleHQgbWFuYWdlcnMgYXJlICJyZXVzYWJsZSIKK2NvbnRleHQgbWFuYWdlcnMgKG9yLCB0byBiZSBjb21wbGV0ZWx5IGV4cGxpY2l0LCAicmV1c2FibGUsIGJ1dCBub3QKK3JlZW50cmFudCIgY29udGV4dCBtYW5hZ2Vycywgc2luY2UgcmVlbnRyYW50IGNvbnRleHQgbWFuYWdlcnMgYXJlIGFsc28KK3JldXNhYmxlKS4gVGhlc2UgY29udGV4dCBtYW5hZ2VycyBzdXBwb3J0IGJlaW5nIHVzZWQgbXVsdGlwbGUgdGltZXMsIGJ1dAord2lsbCBmYWlsIChvciBvdGhlcndpc2Ugbm90IHdvcmsgY29ycmVjdGx5KSBpZiB0aGUgc3BlY2lmaWMgY29udGV4dCBtYW5hZ2VyCitpbnN0YW5jZSBoYXMgYWxyZWFkeSBiZWVuIHVzZWQgaW4gYSBjb250YWluaW5nIHdpdGggc3RhdGVtZW50LgorCis6Y2xhc3M6YHRocmVhZGluZy5Mb2NrYCBpcyBhbiBleGFtcGxlIG9mIGEgcmV1c2FibGUsIGJ1dCBub3QgcmVlbnRyYW50LAorY29udGV4dCBtYW5hZ2VyIChmb3IgYSByZWVudHJhbnQgbG9jaywgaXQgaXMgbmVjZXNzYXJ5IHRvIHVzZQorOmNsYXNzOmB0aHJlYWRpbmcuUkxvY2tgIGluc3RlYWQpLgorCitBbm90aGVyIGV4YW1wbGUgb2YgYSByZXVzYWJsZSwgYnV0IG5vdCByZWVudHJhbnQsIGNvbnRleHQgbWFuYWdlciBpcworOmNsYXNzOmBFeGl0U3RhY2tgLCBhcyBpdCBpbnZva2VzICphbGwqIGN1cnJlbnRseSByZWdpc3RlcmVkIGNhbGxiYWNrcword2hlbiBsZWF2aW5nIGFueSB3aXRoIHN0YXRlbWVudCwgcmVnYXJkbGVzcyBvZiB3aGVyZSB0aG9zZSBjYWxsYmFja3MKK3dlcmUgYWRkZWQ6OgorCisgICAgPj4+IGZyb20gY29udGV4dGxpYiBpbXBvcnQgRXhpdFN0YWNrCisgICAgPj4+IHN0YWNrID0gRXhpdFN0YWNrKCkKKyAgICA+Pj4gd2l0aCBzdGFjazoKKyAgICAuLi4gICAgIHN0YWNrLmNhbGxiYWNrKHByaW50LCAiQ2FsbGJhY2s6IGZyb20gZmlyc3QgY29udGV4dCIpCisgICAgLi4uICAgICBwcmludCgiTGVhdmluZyBmaXJzdCBjb250ZXh0IikKKyAgICAuLi4KKyAgICBMZWF2aW5nIGZpcnN0IGNvbnRleHQKKyAgICBDYWxsYmFjazogZnJvbSBmaXJzdCBjb250ZXh0CisgICAgPj4+IHdpdGggc3RhY2s6CisgICAgLi4uICAgICBzdGFjay5jYWxsYmFjayhwcmludCwgIkNhbGxiYWNrOiBmcm9tIHNlY29uZCBjb250ZXh0IikKKyAgICAuLi4gICAgIHByaW50KCJMZWF2aW5nIHNlY29uZCBjb250ZXh0IikKKyAgICAuLi4KKyAgICBMZWF2aW5nIHNlY29uZCBjb250ZXh0CisgICAgQ2FsbGJhY2s6IGZyb20gc2Vjb25kIGNvbnRleHQKKyAgICA+Pj4gd2l0aCBzdGFjazoKKyAgICAuLi4gICAgIHN0YWNrLmNhbGxiYWNrKHByaW50LCAiQ2FsbGJhY2s6IGZyb20gb3V0ZXIgY29udGV4dCIpCisgICAgLi4uICAgICB3aXRoIHN0YWNrOgorICAgIC4uLiAgICAgICAgIHN0YWNrLmNhbGxiYWNrKHByaW50LCAiQ2FsbGJhY2s6IGZyb20gaW5uZXIgY29udGV4dCIpCisgICAgLi4uICAgICAgICAgcHJpbnQoIkxlYXZpbmcgaW5uZXIgY29udGV4dCIpCisgICAgLi4uICAgICBwcmludCgiTGVhdmluZyBvdXRlciBjb250ZXh0IikKKyAgICAuLi4KKyAgICBMZWF2aW5nIGlubmVyIGNvbnRleHQKKyAgICBDYWxsYmFjazogZnJvbSBpbm5lciBjb250ZXh0CisgICAgQ2FsbGJhY2s6IGZyb20gb3V0ZXIgY29udGV4dAorICAgIExlYXZpbmcgb3V0ZXIgY29udGV4dAorCitBcyB0aGUgb3V0cHV0IGZyb20gdGhlIGV4YW1wbGUgc2hvd3MsIHJldXNpbmcgYSBzaW5nbGUgc3RhY2sgb2JqZWN0IGFjcm9zcworbXVsdGlwbGUgd2l0aCBzdGF0ZW1lbnRzIHdvcmtzIGNvcnJlY3RseSwgYnV0IGF0dGVtcHRpbmcgdG8gbmVzdCB0aGVtCit3aWxsIGNhdXNlIHRoZSBzdGFjayB0byBiZSBjbGVhcmVkIGF0IHRoZSBlbmQgb2YgdGhlIGlubmVybW9zdCB3aXRoCitzdGF0ZW1lbnQsIHdoaWNoIGlzIHVubGlrZWx5IHRvIGJlIGRlc2lyYWJsZSBiZWhhdmlvdXIuCisKK1VzaW5nIHNlcGFyYXRlIDpjbGFzczpgRXhpdFN0YWNrYCBpbnN0YW5jZXMgaW5zdGVhZCBvZiByZXVzaW5nIGEgc2luZ2xlCitpbnN0YW5jZSBhdm9pZHMgdGhhdCBwcm9ibGVtOjoKKworICAgID4+PiBmcm9tIGNvbnRleHRsaWIgaW1wb3J0IEV4aXRTdGFjaworICAgID4+PiB3aXRoIEV4aXRTdGFjaygpIGFzIG91dGVyX3N0YWNrOgorICAgIC4uLiAgICAgb3V0ZXJfc3RhY2suY2FsbGJhY2socHJpbnQsICJDYWxsYmFjazogZnJvbSBvdXRlciBjb250ZXh0IikKKyAgICAuLi4gICAgIHdpdGggRXhpdFN0YWNrKCkgYXMgaW5uZXJfc3RhY2s6CisgICAgLi4uICAgICAgICAgaW5uZXJfc3RhY2suY2FsbGJhY2socHJpbnQsICJDYWxsYmFjazogZnJvbSBpbm5lciBjb250ZXh0IikKKyAgICAuLi4gICAgICAgICBwcmludCgiTGVhdmluZyBpbm5lciBjb250ZXh0IikKKyAgICAuLi4gICAgIHByaW50KCJMZWF2aW5nIG91dGVyIGNvbnRleHQiKQorICAgIC4uLgorICAgIExlYXZpbmcgaW5uZXIgY29udGV4dAorICAgIENhbGxiYWNrOiBmcm9tIGlubmVyIGNvbnRleHQKKyAgICBMZWF2aW5nIG91dGVyIGNvbnRleHQKKyAgICBDYWxsYmFjazogZnJvbSBvdXRlciBjb250ZXh0CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9jb3B5LnJzdCBiL0RvYy9saWJyYXJ5L2NvcHkucnN0CmluZGV4IDFkYjVjMmQuLjAyZWYwZTUgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2NvcHkucnN0CisrKyBiL0RvYy9saWJyYXJ5L2NvcHkucnN0CkBAIC02Nyw4ICs2Nyw4IEBACiAKIENsYXNzZXMgY2FuIHVzZSB0aGUgc2FtZSBpbnRlcmZhY2VzIHRvIGNvbnRyb2wgY29weWluZyB0aGF0IHRoZXkgdXNlIHRvIGNvbnRyb2wKIHBpY2tsaW5nLiAgU2VlIHRoZSBkZXNjcmlwdGlvbiBvZiBtb2R1bGUgOm1vZDpgcGlja2xlYCBmb3IgaW5mb3JtYXRpb24gb24gdGhlc2UKLW1ldGhvZHMuICBJbiBmYWN0LCA6bW9kOmBjb3B5YCBtb2R1bGUgdXNlcyB0aGUgcmVnaXN0ZXJlZCBwaWNrbGUgZnVuY3Rpb25zIGZyb20KLTptb2Q6YGNvcHlyZWdgIG1vZHVsZS4KK21ldGhvZHMuICBJbiBmYWN0LCB0aGUgOm1vZDpgY29weWAgbW9kdWxlIHVzZXMgdGhlIHJlZ2lzdGVyZWQKK3BpY2tsZSBmdW5jdGlvbnMgZnJvbSB0aGUgOm1vZDpgY29weXJlZ2AgbW9kdWxlLgogCiAuLiBpbmRleDo6CiAgICBzaW5nbGU6IF9fY29weV9fKCkgKGNvcHkgcHJvdG9jb2wpCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9jb3B5cmVnLnJzdCBiL0RvYy9saWJyYXJ5L2NvcHlyZWcucnN0CmluZGV4IDUwZDU4NzkuLjE4MzA2YzcgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2NvcHlyZWcucnN0CisrKyBiL0RvYy9saWJyYXJ5L2NvcHlyZWcucnN0CkBAIC05LDcgKzksNyBAQAogICAgbW9kdWxlOiBwaWNrbGUKICAgIG1vZHVsZTogY29weQogCi1UaGUgOm1vZDpgY29weXJlZ2AgbW9kdWxlIG9mZmVycyBhIHdheSB0byBkZWZpbmUgZnVjdGlvbnMgdXNlZCB3aGlsZSBwaWNrbGluZworVGhlIDptb2Q6YGNvcHlyZWdgIG1vZHVsZSBvZmZlcnMgYSB3YXkgdG8gZGVmaW5lIGZ1bmN0aW9ucyB1c2VkIHdoaWxlIHBpY2tsaW5nCiBzcGVjaWZpYyBvYmplY3RzLiAgVGhlIDptb2Q6YHBpY2tsZWAgYW5kIDptb2Q6YGNvcHlgIG1vZHVsZXMgdXNlIHRob3NlIGZ1bmN0aW9ucwogd2hlbiBwaWNrbGluZy9jb3B5aW5nIHRob3NlIG9iamVjdHMuICBUaGUgbW9kdWxlIHByb3ZpZGVzIGNvbmZpZ3VyYXRpb24KIGluZm9ybWF0aW9uIGFib3V0IG9iamVjdCBjb25zdHJ1Y3RvcnMgd2hpY2ggYXJlIG5vdCBjbGFzc2VzLgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvY3J5cHRvLnJzdCBiL0RvYy9saWJyYXJ5L2NyeXB0by5yc3QKaW5kZXggNDY5ZWRlNC4uOGFkMjRjOCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvY3J5cHRvLnJzdAorKysgYi9Eb2MvbGlicmFyeS9jcnlwdG8ucnN0CkBAIC0yNSw2ICsyNSw1IEBACiBIYXJkY29yZSBjeXBoZXJwdW5rcyB3aWxsIHByb2JhYmx5IGZpbmQgdGhlIGNyeXB0b2dyYXBoaWMgbW9kdWxlcyB3cml0dGVuIGJ5CiBBLk0uIEt1Y2hsaW5nIG9mIGZ1cnRoZXIgaW50ZXJlc3Q7IHRoZSBwYWNrYWdlIGNvbnRhaW5zIG1vZHVsZXMgZm9yIHZhcmlvdXMKIGVuY3J5cHRpb24gYWxnb3JpdGhtcywgbW9zdCBub3RhYmx5IEFFUy4gIFRoZXNlIG1vZHVsZXMgYXJlIG5vdCBkaXN0cmlidXRlZCB3aXRoCi1QeXRob24gYnV0IGF2YWlsYWJsZSBzZXBhcmF0ZWx5LiAgU2VlIHRoZSBVUkwKLWh0dHA6Ly93d3cucHljcnlwdG8ub3JnICBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KLQorUHl0aG9uIGJ1dCBhdmFpbGFibGUgc2VwYXJhdGVseS4gIFNlZSB0aGUgVVJMIGh0dHA6Ly93d3cucHljcnlwdG8ub3JnLyBmb3IgbW9yZQoraW5mb3JtYXRpb24uCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9jc3YucnN0IGIvRG9jL2xpYnJhcnkvY3N2LnJzdAppbmRleCBjY2M5ZGM2Li5lOWE5Y2I1IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9jc3YucnN0CisrKyBiL0RvYy9saWJyYXJ5L2Nzdi5yc3QKQEAgLTEwOCw3ICsxMDgsNyBAQAogICAgICAgICAgIHNwYW13cml0ZXIud3JpdGVyb3coWydTcGFtJywgJ0xvdmVseSBTcGFtJywgJ1dvbmRlcmZ1bCBTcGFtJ10pCiAKIAotLi4gZnVuY3Rpb246OiByZWdpc3Rlcl9kaWFsZWN0KG5hbWVbLCBkaWFsZWN0XSwgKipmbXRwYXJhbXMpCisuLiBmdW5jdGlvbjo6IHJlZ2lzdGVyX2RpYWxlY3QobmFtZVssIGRpYWxlY3RbLCAqKmZtdHBhcmFtc11dKQogCiAgICBBc3NvY2lhdGUgKmRpYWxlY3QqIHdpdGggKm5hbWUqLiAgKm5hbWUqIG11c3QgYmUgYSBzdHJpbmcuIFRoZQogICAgZGlhbGVjdCBjYW4gYmUgc3BlY2lmaWVkIGVpdGhlciBieSBwYXNzaW5nIGEgc3ViLWNsYXNzIG9mIDpjbGFzczpgRGlhbGVjdGAsIG9yCkBAIC0xNTgsNiArMTU4LDE4IEBACiAgICB0aGUgb3B0aW9uYWwgKnJlc3R2YWwqIHBhcmFtZXRlci4gIEFueSBvdGhlciBvcHRpb25hbCBvciBrZXl3b3JkIGFyZ3VtZW50cwogICAgYXJlIHBhc3NlZCB0byB0aGUgdW5kZXJseWluZyA6Y2xhc3M6YHJlYWRlcmAgaW5zdGFuY2UuCiAKKyAgIEEgc2hvcnQgdXNhZ2UgZXhhbXBsZTo6CisKKyAgICAgICA+Pj4gaW1wb3J0IGNzdgorICAgICAgID4+PiB3aXRoIG9wZW4oJ25hbWVzLmNzdicpIGFzIGNzdmZpbGU6CisgICAgICAgLi4uICAgICByZWFkZXIgPSBjc3YuRGljdFJlYWRlcihjc3ZmaWxlKQorICAgICAgIC4uLiAgICAgZm9yIHJvdyBpbiByZWFkZXI6CisgICAgICAgLi4uICAgICAgICAgcHJpbnQocm93WydmaXJzdF9uYW1lJ10sIHJvd1snbGFzdF9uYW1lJ10pCisgICAgICAgLi4uCisgICAgICAgQmFrZWQgQmVhbnMKKyAgICAgICBMb3ZlbHkgU3BhbQorICAgICAgIFdvbmRlcmZ1bCBTcGFtCisKIAogLi4gY2xhc3M6OiBEaWN0V3JpdGVyKGNzdmZpbGUsIGZpZWxkbmFtZXMsIHJlc3R2YWw9JycsIGV4dHJhc2FjdGlvbj0ncmFpc2UnLCBcCiAgICAgICAgICAgICAgICAgICAgICAgZGlhbGVjdD0nZXhjZWwnLCAqYXJncywgKiprd2RzKQpAQCAtMTgwLDYgKzE5MiwxOSBAQAogICAgb2JqZWN0cyBhcmUgbm90IG9yZGVyZWQsIHRoZXJlIGlzIG5vdCBlbm91Z2ggaW5mb3JtYXRpb24gYXZhaWxhYmxlIHRvIGRlZHVjZQogICAgdGhlIG9yZGVyIGluIHdoaWNoIHRoZSByb3cgc2hvdWxkIGJlIHdyaXR0ZW4gdG8gdGhlICpjc3ZmaWxlKi4KIAorICAgQSBzaG9ydCB1c2FnZSBleGFtcGxlOjoKKworICAgICAgIGltcG9ydCBjc3YKKworICAgICAgIHdpdGggb3BlbignbmFtZXMuY3N2JywgJ3cnKSBhcyBjc3ZmaWxlOgorICAgICAgICAgICBmaWVsZG5hbWVzID0gWydmaXJzdF9uYW1lJywgJ2xhc3RfbmFtZSddCisgICAgICAgICAgIHdyaXRlciA9IGNzdi5EaWN0V3JpdGVyKGNzdmZpbGUsIGZpZWxkbmFtZXM9ZmllbGRuYW1lcykKKworICAgICAgICAgICB3cml0ZXIud3JpdGVoZWFkZXIoKQorICAgICAgICAgICB3cml0ZXIud3JpdGVyb3coeydmaXJzdF9uYW1lJzogJ0Jha2VkJywgJ2xhc3RfbmFtZSc6ICdCZWFucyd9KQorICAgICAgICAgICB3cml0ZXIud3JpdGVyb3coeydmaXJzdF9uYW1lJzogJ0xvdmVseScsICdsYXN0X25hbWUnOiAnU3BhbSd9KQorICAgICAgICAgICB3cml0ZXIud3JpdGVyb3coeydmaXJzdF9uYW1lJzogJ1dvbmRlcmZ1bCcsICdsYXN0X25hbWUnOiAnU3BhbSd9KQorCiAKIC4uIGNsYXNzOjogRGlhbGVjdAogCkBAIC0yOTksNyArMzI0LDcgQEAKIAogLi4gYXR0cmlidXRlOjogRGlhbGVjdC5kb3VibGVxdW90ZQogCi0gICBDb250cm9scyBob3cgaW5zdGFuY2VzIG9mICpxdW90ZWNoYXIqIGFwcGVhcmluZyBpbnNpZGUgYSBmaWVsZCBzaG91bGQgYmUKKyAgIENvbnRyb2xzIGhvdyBpbnN0YW5jZXMgb2YgKnF1b3RlY2hhciogYXBwZWFyaW5nIGluc2lkZSBhIGZpZWxkIHNob3VsZAogICAgdGhlbXNlbHZlcyBiZSBxdW90ZWQuICBXaGVuIDpjb25zdDpgVHJ1ZWAsIHRoZSBjaGFyYWN0ZXIgaXMgZG91YmxlZC4gV2hlbgogICAgOmNvbnN0OmBGYWxzZWAsIHRoZSAqZXNjYXBlY2hhciogaXMgdXNlZCBhcyBhIHByZWZpeCB0byB0aGUgKnF1b3RlY2hhciouICBJdAogICAgZGVmYXVsdHMgdG8gOmNvbnN0OmBUcnVlYC4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2N0eXBlcy5yc3QgYi9Eb2MvbGlicmFyeS9jdHlwZXMucnN0CmluZGV4IGY0NmRhODUuLjYzMGQyNzkgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2N0eXBlcy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvY3R5cGVzLnJzdApAQCAtMzksNyArMzksNyBAQAogY29udmVudGlvbiwgd2hpbGUgKndpbmRsbCogbGlicmFyaWVzIGNhbGwgZnVuY3Rpb25zIHVzaW5nIHRoZSBgYHN0ZGNhbGxgYAogY2FsbGluZyBjb252ZW50aW9uLiAqb2xlZGxsKiBhbHNvIHVzZXMgdGhlIGBgc3RkY2FsbGBgIGNhbGxpbmcgY29udmVudGlvbiwgYW5kCiBhc3N1bWVzIHRoZSBmdW5jdGlvbnMgcmV0dXJuIGEgV2luZG93cyA6Yzp0eXBlOmBIUkVTVUxUYCBlcnJvciBjb2RlLiBUaGUgZXJyb3IKLWNvZGUgaXMgdXNlZCB0byBhdXRvbWF0aWNhbGx5IHJhaXNlIGEgOmNsYXNzOmBPU0Vycm9yYCBleGNlcHRpb24gd2hlbiB0aGUKK2NvZGUgaXMgdXNlZCB0byBhdXRvbWF0aWNhbGx5IHJhaXNlIGFuIDpjbGFzczpgT1NFcnJvcmAgZXhjZXB0aW9uIHdoZW4gdGhlCiBmdW5jdGlvbiBjYWxsIGZhaWxzLgogCiAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMwpAQCAtMTAzMiw3ICsxMDMyLDcgQEAKICAgIG91dHNpZGUgb2YgUHl0aG9uJ3MgY29udHJvbCAoZS5nLiBieSB0aGUgZm9yZWlnbiBjb2RlIHRoYXQgY2FsbHMgdGhlCiAgICBjYWxsYmFjayksIGN0eXBlcyBjcmVhdGVzIGEgbmV3IGR1bW15IFB5dGhvbiB0aHJlYWQgb24gZXZlcnkgaW52b2NhdGlvbi4gVGhpcwogICAgYmVoYXZpb3IgaXMgY29ycmVjdCBmb3IgbW9zdCBwdXJwb3NlcywgYnV0IGl0IG1lYW5zIHRoYXQgdmFsdWVzIHN0b3JlZCB3aXRoCi0gICBgdGhyZWFkaW5nLmxvY2FsYCB3aWxsICpub3QqIHN1cnZpdmUgYWNyb3NzIGRpZmZlcmVudCBjYWxsYmFja3MsIGV2ZW4gd2hlbgorICAgOmNsYXNzOmB0aHJlYWRpbmcubG9jYWxgIHdpbGwgKm5vdCogc3Vydml2ZSBhY3Jvc3MgZGlmZmVyZW50IGNhbGxiYWNrcywgZXZlbiB3aGVuCiAgICB0aG9zZSBjYWxscyBhcmUgbWFkZSBmcm9tIHRoZSBzYW1lIEMgdGhyZWFkLgogCiAuLiBfY3R5cGVzLWFjY2Vzc2luZy12YWx1ZXMtZXhwb3J0ZWQtZnJvbS1kbGxzOgpAQCAtMTM4NiwxMSArMTM4NiwxNiBAQAogICAgVGhlIGRlZmF1bHQgbW9kZSB3aGljaCBpcyB1c2VkIHRvIGxvYWQgc2hhcmVkIGxpYnJhcmllcy4gIE9uIE9TWCAxMC4zLCB0aGlzIGlzCiAgICAqUlRMRF9HTE9CQUwqLCBvdGhlcndpc2UgaXQgaXMgdGhlIHNhbWUgYXMgKlJUTERfTE9DQUwqLgogCi1JbnN0YW5jZXMgb2YgdGhlc2UgY2xhc3NlcyBoYXZlIG5vIHB1YmxpYyBtZXRob2RzLCBob3dldmVyIDptZXRoOmBfX2dldGF0dHJfX2AKLWFuZCA6bWV0aDpgX19nZXRpdGVtX19gIGhhdmUgc3BlY2lhbCBiZWhhdmlvcjogZnVuY3Rpb25zIGV4cG9ydGVkIGJ5IHRoZSBzaGFyZWQKLWxpYnJhcnkgY2FuIGJlIGFjY2Vzc2VkIGFzIGF0dHJpYnV0ZXMgb2YgYnkgaW5kZXguICBQbGVhc2Ugbm90ZSB0aGF0IGJvdGgKLTptZXRoOmBfX2dldGF0dHJfX2AgYW5kIDptZXRoOmBfX2dldGl0ZW1fX2AgY2FjaGUgdGhlaXIgcmVzdWx0LCBzbyBjYWxsaW5nIHRoZW0KLXJlcGVhdGVkbHkgcmV0dXJucyB0aGUgc2FtZSBvYmplY3QgZWFjaCB0aW1lLgorSW5zdGFuY2VzIG9mIHRoZXNlIGNsYXNzZXMgaGF2ZSBubyBwdWJsaWMgbWV0aG9kcy4gIEZ1bmN0aW9ucyBleHBvcnRlZCBieSB0aGUKK3NoYXJlZCBsaWJyYXJ5IGNhbiBiZSBhY2Nlc3NlZCBhcyBhdHRyaWJ1dGVzIG9yIGJ5IGluZGV4LiAgUGxlYXNlIG5vdGUgdGhhdAorYWNjZXNzaW5nIHRoZSBmdW5jdGlvbiB0aHJvdWdoIGFuIGF0dHJpYnV0ZSBjYWNoZXMgdGhlIHJlc3VsdCBhbmQgdGhlcmVmb3JlCithY2Nlc3NpbmcgaXQgcmVwZWF0ZWRseSByZXR1cm5zIHRoZSBzYW1lIG9iamVjdCBlYWNoIHRpbWUuICBPbiB0aGUgb3RoZXIgaGFuZCwKK2FjY2Vzc2luZyBpdCB0aHJvdWdoIGFuIGluZGV4IHJldHVybnMgYSBuZXcgb2JqZWN0IGVhY2ggdGltZToKKworICAgPj4+IGxpYmMudGltZSA9PSBsaWJjLnRpbWUKKyAgIFRydWUKKyAgID4+PiBsaWJjWyd0aW1lJ10gPT0gbGliY1sndGltZSddCisgICBGYWxzZQogCiBUaGUgZm9sbG93aW5nIHB1YmxpYyBhdHRyaWJ1dGVzIGFyZSBhdmFpbGFibGUsIHRoZWlyIG5hbWUgc3RhcnRzIHdpdGggYW4KIHVuZGVyc2NvcmUgdG8gbm90IGNsYXNoIHdpdGggZXhwb3J0ZWQgZnVuY3Rpb24gbmFtZXM6CkBAIC0xODI4LDcgKzE4MzMsNyBAQAogLi4gZnVuY3Rpb246OiBmaW5kX21zdmNydCgpCiAgICA6bW9kdWxlOiBjdHlwZXMudXRpbAogCi0gICBXaW5kb3dzIG9ubHk6IHJldHVybiB0aGUgZmlsZW5hbWUgb2YgdGhlIFZDIHJ1bnR5cGUgbGlicmFyeSB1c2VkIGJ5IFB5dGhvbiwKKyAgIFdpbmRvd3Mgb25seTogcmV0dXJuIHRoZSBmaWxlbmFtZSBvZiB0aGUgVkMgcnVudGltZSBsaWJyYXJ5IHVzZWQgYnkgUHl0aG9uLAogICAgYW5kIGJ5IHRoZSBleHRlbnNpb24gbW9kdWxlcy4gIElmIHRoZSBuYW1lIG9mIHRoZSBsaWJyYXJ5IGNhbm5vdCBiZQogICAgZGV0ZXJtaW5lZCwgYGBOb25lYGAgaXMgcmV0dXJuZWQuCiAKQEAgLTIzMzAsMTEgKzIzMzUsNiBAQAogICAgICAgYW5kIHNvIG9uKS4gIExhdGVyIGFzc2lnbm1lbnRzIHRvIHRoZSA6YXR0cjpgX2ZpZWxkc19gIGNsYXNzIHZhcmlhYmxlIHdpbGwKICAgICAgIHJhaXNlIGFuIEF0dHJpYnV0ZUVycm9yLgogCi0gICAgICBTdHJ1Y3R1cmUgYW5kIHVuaW9uIHN1YmNsYXNzIGNvbnN0cnVjdG9ycyBhY2NlcHQgYm90aCBwb3NpdGlvbmFsIGFuZCBuYW1lZAotICAgICAgYXJndW1lbnRzLiAgUG9zaXRpb25hbCBhcmd1bWVudHMgYXJlIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgZmllbGRzIGluIHRoZQotICAgICAgc2FtZSBvcmRlciBhcyB0aGV5IGFwcGVhciBpbiB0aGUgOmF0dHI6YF9maWVsZHNfYCBkZWZpbml0aW9uLCBuYW1lZAotICAgICAgYXJndW1lbnRzIGFyZSB1c2VkIHRvIGluaXRpYWxpemUgdGhlIGZpZWxkcyB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIG5hbWUuCi0KICAgICAgIEl0IGlzIHBvc3NpYmxlIHRvIGRlZmluZWQgc3ViLXN1YmNsYXNzZXMgb2Ygc3RydWN0dXJlIHR5cGVzLCB0aGV5IGluaGVyaXQKICAgICAgIHRoZSBmaWVsZHMgb2YgdGhlIGJhc2UgY2xhc3MgcGx1cyB0aGUgOmF0dHI6YF9maWVsZHNfYCBkZWZpbmVkIGluIHRoZQogICAgICAgc3ViLXN1YmNsYXNzLCBpZiBhbnkuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9jdXJzZXMucnN0IGIvRG9jL2xpYnJhcnkvY3Vyc2VzLnJzdAppbmRleCAzMTQ2MzZlLi5mM2U2MGI0IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9jdXJzZXMucnN0CisrKyBiL0RvYy9saWJyYXJ5L2N1cnNlcy5yc3QKQEAgLTEyLDcgKzEyLDcgQEAKIGRlLWZhY3RvIHN0YW5kYXJkIGZvciBwb3J0YWJsZSBhZHZhbmNlZCB0ZXJtaW5hbCBoYW5kbGluZy4KIAogV2hpbGUgY3Vyc2VzIGlzIG1vc3Qgd2lkZWx5IHVzZWQgaW4gdGhlIFVuaXggZW52aXJvbm1lbnQsIHZlcnNpb25zIGFyZSBhdmFpbGFibGUKLWZvciBET1MsIE9TLzIsIGFuZCBwb3NzaWJseSBvdGhlciBzeXN0ZW1zIGFzIHdlbGwuICBUaGlzIGV4dGVuc2lvbiBtb2R1bGUgaXMKK2ZvciBXaW5kb3dzLCBET1MsIGFuZCBwb3NzaWJseSBvdGhlciBzeXN0ZW1zIGFzIHdlbGwuICBUaGlzIGV4dGVuc2lvbiBtb2R1bGUgaXMKIGRlc2lnbmVkIHRvIG1hdGNoIHRoZSBBUEkgb2YgbmN1cnNlcywgYW4gb3Blbi1zb3VyY2UgY3Vyc2VzIGxpYnJhcnkgaG9zdGVkIG9uCiBMaW51eCBhbmQgdGhlIEJTRCB2YXJpYW50cyBvZiBVbml4LgogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9kYXRhdHlwZXMucnN0IGIvRG9jL2xpYnJhcnkvZGF0YXR5cGVzLnJzdAppbmRleCBkMDM4MmUwLi40OGFmMDgyIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9kYXRhdHlwZXMucnN0CisrKyBiL0RvYy9saWJyYXJ5L2RhdGF0eXBlcy5yc3QKQEAgLTMwLDMgKzMwLDQgQEAKICAgIGNvcHkucnN0CiAgICBwcHJpbnQucnN0CiAgICByZXBybGliLnJzdAorICAgZW51bS5yc3QKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2RhdGV0aW1lLnJzdCBiL0RvYy9saWJyYXJ5L2RhdGV0aW1lLnJzdAppbmRleCAwNjVlODUwLi44OGYzZjZlIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9kYXRldGltZS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZGF0ZXRpbWUucnN0CkBAIC0xNzAsMTAgKzE3MCwxMiBAQAogICAgKiBgYDAgPD0gc2Vjb25kcyA8IDM2MDAqMjRgYCAodGhlIG51bWJlciBvZiBzZWNvbmRzIGluIG9uZSBkYXkpCiAgICAqIGBgLTk5OTk5OTk5OSA8PSBkYXlzIDw9IDk5OTk5OTk5OWBgCiAKLSAgIElmIGFueSBhcmd1bWVudCBpcyBhIGZsb2F0IGFuZCB0aGVyZSBhcmUgZnJhY3Rpb25hbCBtaWNyb3NlY29uZHMsIHRoZSBmcmFjdGlvbmFsCi0gICBtaWNyb3NlY29uZHMgbGVmdCBvdmVyIGZyb20gYWxsIGFyZ3VtZW50cyBhcmUgY29tYmluZWQgYW5kIHRoZWlyIHN1bSBpcyByb3VuZGVkCi0gICB0byB0aGUgbmVhcmVzdCBtaWNyb3NlY29uZC4gIElmIG5vIGFyZ3VtZW50IGlzIGEgZmxvYXQsIHRoZSBjb252ZXJzaW9uIGFuZAotICAgbm9ybWFsaXphdGlvbiBwcm9jZXNzZXMgYXJlIGV4YWN0IChubyBpbmZvcm1hdGlvbiBpcyBsb3N0KS4KKyAgIElmIGFueSBhcmd1bWVudCBpcyBhIGZsb2F0IGFuZCB0aGVyZSBhcmUgZnJhY3Rpb25hbCBtaWNyb3NlY29uZHMsCisgICB0aGUgZnJhY3Rpb25hbCBtaWNyb3NlY29uZHMgbGVmdCBvdmVyIGZyb20gYWxsIGFyZ3VtZW50cyBhcmUKKyAgIGNvbWJpbmVkIGFuZCB0aGVpciBzdW0gaXMgcm91bmRlZCB0byB0aGUgbmVhcmVzdCBtaWNyb3NlY29uZCB1c2luZworICAgcm91bmQtaGFsZi10by1ldmVuIHRpZWJyZWFrZXIuICBJZiBubyBhcmd1bWVudCBpcyBhIGZsb2F0LCB0aGUKKyAgIGNvbnZlcnNpb24gYW5kIG5vcm1hbGl6YXRpb24gcHJvY2Vzc2VzIGFyZSBleGFjdCAobm8gaW5mb3JtYXRpb24gaXMKKyAgIGxvc3QpLgogCiAgICBJZiB0aGUgbm9ybWFsaXplZCB2YWx1ZSBvZiBkYXlzIGxpZXMgb3V0c2lkZSB0aGUgaW5kaWNhdGVkIHJhbmdlLAogICAgOmV4YzpgT3ZlcmZsb3dFcnJvcmAgaXMgcmFpc2VkLgpAQCAtNTU2LDcgKzU1OCw3IEBACiAgICBSZXR1cm4gYSAzLXR1cGxlLCAoSVNPIHllYXIsIElTTyB3ZWVrIG51bWJlciwgSVNPIHdlZWtkYXkpLgogCiAgICBUaGUgSVNPIGNhbGVuZGFyIGlzIGEgd2lkZWx5IHVzZWQgdmFyaWFudCBvZiB0aGUgR3JlZ29yaWFuIGNhbGVuZGFyLiBTZWUKLSAgIGh0dHA6Ly93d3cucGh5cy51dS5ubC9+dmdlbnQvY2FsZW5kYXIvaXNvY2FsZW5kYXIuaHRtIGZvciBhIGdvb2QKKyAgIGh0dHA6Ly93d3cuc3RhZmYuc2NpZW5jZS51dS5ubC9+Z2VudDAxMTMvY2FsZW5kYXIvaXNvY2FsZW5kYXIuaHRtIGZvciBhIGdvb2QKICAgIGV4cGxhbmF0aW9uLgogCiAgICBUaGUgSVNPIHllYXIgY29uc2lzdHMgb2YgNTIgb3IgNTMgZnVsbCB3ZWVrcywgYW5kIHdoZXJlIGEgd2VlayBzdGFydHMgb24gYQpAQCAtNjYyLDggKzY2NCw4IEBACiAKIC4uIF9kYXRldGltZS1kYXRldGltZToKIAotOmNsYXNzOmBkYXRldGltZWAgT2JqZWN0cwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorOmNsYXNzOmAuZGF0ZXRpbWVgIE9iamVjdHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEEgOmNsYXNzOmAuZGF0ZXRpbWVgIG9iamVjdCBpcyBhIHNpbmdsZSBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIGluZm9ybWF0aW9uCiBmcm9tIGEgOmNsYXNzOmBkYXRlYCBvYmplY3QgYW5kIGEgOmNsYXNzOmAudGltZWAgb2JqZWN0LiAgTGlrZSBhIDpjbGFzczpgZGF0ZWAKQEAgLTE2ODQsMTIgKzE2ODYsMTIgQEAKIAogLi4gc2VlYWxzbzo6CiAKLSAgIGBweXR6IDxodHRwOi8vcHlwaS5weXRob24ub3JnL3B5cGkvcHl0ei8+YF8KLSAgICAgIFRoZSBzdGFuZGFyZCBsaWJyYXJ5IGhhcyBubyA6Y2xhc3M6YHR6aW5mb2AgaW5zdGFuY2VzIGV4Y2VwdCBmb3IgVVRDLCBidXQKLSAgICAgIHRoZXJlIGV4aXN0cyBhIHRoaXJkLXBhcnR5IGxpYnJhcnkgd2hpY2ggYnJpbmdzIHRoZSAqSUFOQSB0aW1lem9uZQotICAgICAgZGF0YWJhc2UqIChhbHNvIGtub3duIGFzIHRoZSBPbHNvbiBkYXRhYmFzZSkgdG8gUHl0aG9uOiAqcHl0eiouCisgICBgcHl0eiA8aHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9weXR6Lz5gXworICAgICAgVGhlIHN0YW5kYXJkIGxpYnJhcnkgaGFzIDpjbGFzczpgdGltZXpvbmVgIGNsYXNzIGZvciBoYW5kbGluZyBhcmJpdHJhcnkKKyAgICAgIGZpeGVkIG9mZnNldHMgZnJvbSBVVEMgYW5kIDphdHRyOmB0aW1lem9uZS51dGNgIGFzIFVUQyB0aW1lem9uZSBpbnN0YW5jZS4KIAotICAgICAgKnB5dHoqIGNvbnRhaW5zIHVwLXRvLWRhdGUgaW5mb3JtYXRpb24gYW5kIGl0cyB1c2FnZSBpcyByZWNvbW1lbmRlZC4KKyAgICAgICpweXR6KiBsaWJyYXJ5IGJyaW5ncyB0aGUgKklBTkEgdGltZXpvbmUgZGF0YWJhc2UqIChhbHNvIGtub3duIGFzIHRoZQorICAgICAgT2xzb24gZGF0YWJhc2UpIHRvIFB5dGhvbiBhbmQgaXRzIHVzYWdlIGlzIHJlY29tbWVuZGVkLgogCiAgICBgSUFOQSB0aW1lem9uZSBkYXRhYmFzZSA8aHR0cDovL3d3dy5pYW5hLm9yZy90aW1lLXpvbmVzPmBfCiAgICAgICBUaGUgVGltZSBab25lIERhdGFiYXNlIChvZnRlbiBjYWxsZWQgdHogb3Igem9uZWluZm8pIGNvbnRhaW5zIGNvZGUgYW5kCkBAIC0xNzI2LDYgKzE3MjgsOCBAQAogICAqb2Zmc2V0KiwgSEggYW5kIE1NIGFyZSB0d28gZGlnaXRzIG9mIGBgb2Zmc2V0LmhvdXJzYGAgYW5kCiAgIGBgb2Zmc2V0Lm1pbnV0ZXNgYCByZXNwZWN0aXZlbHkuCiAKKyAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCisKIC4uIG1ldGhvZDo6IHRpbWV6b25lLnV0Y29mZnNldChkdCkKIAogICBSZXR1cm4gdGhlIGZpeGVkIHZhbHVlIHNwZWNpZmllZCB3aGVuIHRoZSA6Y2xhc3M6YHRpbWV6b25lYCBpbnN0YW5jZSBpcwpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZGJtLnJzdCBiL0RvYy9saWJyYXJ5L2RibS5yc3QKaW5kZXggYmQ4OGY0MS4uZTZhODJkNiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZGJtLnJzdAorKysgYi9Eb2MvbGlicmFyeS9kYm0ucnN0CkBAIC03MywzMyArNzMsMzkgQEAKIHN0cmluZ3MgYXJlIHVzZWQgdGhleSBhcmUgaW1wbGljaXRseSBjb252ZXJ0ZWQgdG8gdGhlIGRlZmF1bHQgZW5jb2RpbmcgYmVmb3JlCiBiZWluZyBzdG9yZWQuCiAKK1RoZXNlIG9iamVjdHMgYWxzbyBzdXBwb3J0IGJlaW5nIHVzZWQgaW4gYSA6a2V5d29yZDpgd2l0aGAgc3RhdGVtZW50LCB3aGljaAord2lsbCBhdXRvbWF0aWNhbGx5IGNsb3NlIHRoZW0gd2hlbiBkb25lLgorCisuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgQWRkZWQgbmF0aXZlIHN1cHBvcnQgZm9yIHRoZSBjb250ZXh0IG1hbmFnZW1lbnQgcHJvdG9jb2wgdG8gdGhlIG9iamVjdHMKKyAgIHJldHVybmVkIGJ5IDpmdW5jOmAub3BlbmAuCisKIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSByZWNvcmRzIHNvbWUgaG9zdG5hbWVzIGFuZCBhIGNvcnJlc3BvbmRpbmcgdGl0bGUsICBhbmQKIHRoZW4gcHJpbnRzIG91dCB0aGUgY29udGVudHMgb2YgdGhlIGRhdGFiYXNlOjoKIAogICAgaW1wb3J0IGRibQogCiAgICAjIE9wZW4gZGF0YWJhc2UsIGNyZWF0aW5nIGl0IGlmIG5lY2Vzc2FyeS4KLSAgIGRiID0gZGJtLm9wZW4oJ2NhY2hlJywgJ2MnKQorICAgd2l0aCBkYm0ub3BlbignY2FjaGUnLCAnYycpIGFzIGRiOgogCi0gICAjIFJlY29yZCBzb21lIHZhbHVlcwotICAgZGJbYidoZWxsbyddID0gYid0aGVyZScKLSAgIGRiWyd3d3cucHl0aG9uLm9yZyddID0gJ1B5dGhvbiBXZWJzaXRlJwotICAgZGJbJ3d3dy5jbm4uY29tJ10gPSAnQ2FibGUgTmV3cyBOZXR3b3JrJworICAgICAgICMgUmVjb3JkIHNvbWUgdmFsdWVzCisgICAgICAgZGJbYidoZWxsbyddID0gYid0aGVyZScKKyAgICAgICBkYlsnd3d3LnB5dGhvbi5vcmcnXSA9ICdQeXRob24gV2Vic2l0ZScKKyAgICAgICBkYlsnd3d3LmNubi5jb20nXSA9ICdDYWJsZSBOZXdzIE5ldHdvcmsnCiAKLSAgICMgTm90ZSB0aGF0IHRoZSBrZXlzIGFyZSBjb25zaWRlcmVkIGJ5dGVzIG5vdy4KLSAgIGFzc2VydCBkYltiJ3d3dy5weXRob24ub3JnJ10gPT0gYidQeXRob24gV2Vic2l0ZScKLSAgICMgTm90aWNlIGhvdyB0aGUgdmFsdWUgaXMgbm93IGluIGJ5dGVzLgotICAgYXNzZXJ0IGRiWyd3d3cuY25uLmNvbSddID09IGInQ2FibGUgTmV3cyBOZXR3b3JrJworICAgICAgICMgTm90ZSB0aGF0IHRoZSBrZXlzIGFyZSBjb25zaWRlcmVkIGJ5dGVzIG5vdy4KKyAgICAgICBhc3NlcnQgZGJbYid3d3cucHl0aG9uLm9yZyddID09IGInUHl0aG9uIFdlYnNpdGUnCisgICAgICAgIyBOb3RpY2UgaG93IHRoZSB2YWx1ZSBpcyBub3cgaW4gYnl0ZXMuCisgICAgICAgYXNzZXJ0IGRiWyd3d3cuY25uLmNvbSddID09IGInQ2FibGUgTmV3cyBOZXR3b3JrJwogCi0gICAjIE9mdGVuLXVzZWQgbWV0aG9kcyBvZiB0aGUgZGljdCBpbnRlcmZhY2Ugd29yayB0b28uCi0gICBwcmludChkYi5nZXQoJ3B5dGhvbi5vcmcnLCBiJ25vdCBwcmVzZW50JykpCisgICAgICAgIyBPZnRlbi11c2VkIG1ldGhvZHMgb2YgdGhlIGRpY3QgaW50ZXJmYWNlIHdvcmsgdG9vLgorICAgICAgIHByaW50KGRiLmdldCgncHl0aG9uLm9yZycsIGInbm90IHByZXNlbnQnKSkKIAotICAgIyBTdG9yaW5nIGEgbm9uLXN0cmluZyBrZXkgb3IgdmFsdWUgd2lsbCByYWlzZSBhbiBleGNlcHRpb24gKG1vc3QKLSAgICMgbGlrZWx5IGEgVHlwZUVycm9yKS4KLSAgIGRiWyd3d3cueWFob28uY29tJ10gPSA0CisgICAgICAgIyBTdG9yaW5nIGEgbm9uLXN0cmluZyBrZXkgb3IgdmFsdWUgd2lsbCByYWlzZSBhbiBleGNlcHRpb24gKG1vc3QKKyAgICAgICAjIGxpa2VseSBhIFR5cGVFcnJvcikuCisgICAgICAgZGJbJ3d3dy55YWhvby5jb20nXSA9IDQKIAotICAgIyBDbG9zZSB3aGVuIGRvbmUuCi0gICBkYi5jbG9zZSgpCisgICAjIGRiIGlzIGF1dG9tYXRpY2FsbHkgY2xvc2VkIHdoZW4gbGVhdmluZyB0aGUgd2l0aCBzdGF0ZW1lbnQuCiAKIAogLi4gc2VlYWxzbzo6CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9kZWJ1Zy5yc3QgYi9Eb2MvbGlicmFyeS9kZWJ1Zy5yc3QKaW5kZXggYzY5ZmIxYy4uODhhMmZhNiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZGVidWcucnN0CisrKyBiL0RvYy9saWJyYXJ5L2RlYnVnLnJzdApAQCAtMTUsMyArMTUsNCBAQAogICAgcHJvZmlsZS5yc3QKICAgIHRpbWVpdC5yc3QKICAgIHRyYWNlLnJzdAorICAgdHJhY2VtYWxsb2MucnN0CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9kZWNpbWFsLnJzdCBiL0RvYy9saWJyYXJ5L2RlY2ltYWwucnN0CmluZGV4IDA1OWFlN2MuLmNhNDFjM2EgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2RlY2ltYWwucnN0CisrKyBiL0RvYy9saWJyYXJ5L2RlY2ltYWwucnN0CkBAIC0yNjEsNyArMjYxLDcgQEAKIENvbnRleHQoKSBjb25zdHJ1Y3Rvci4gIFRvIG1ha2UgYW4gYWx0ZXJuYXRlIGFjdGl2ZSwgdXNlIHRoZSA6ZnVuYzpgc2V0Y29udGV4dGAKIGZ1bmN0aW9uLgogCi1JbiBhY2NvcmRhbmNlIHdpdGggdGhlIHN0YW5kYXJkLCB0aGUgOm1vZDpgRGVjaW1hbGAgbW9kdWxlIHByb3ZpZGVzIHR3byByZWFkeSB0bworSW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBzdGFuZGFyZCwgdGhlIDptb2Q6YGRlY2ltYWxgIG1vZHVsZSBwcm92aWRlcyB0d28gcmVhZHkgdG8KIHVzZSBzdGFuZGFyZCBjb250ZXh0cywgOmNvbnN0OmBCYXNpY0NvbnRleHRgIGFuZCA6Y29uc3Q6YEV4dGVuZGVkQ29udGV4dGAuIFRoZQogZm9ybWVyIGlzIGVzcGVjaWFsbHkgdXNlZnVsIGZvciBkZWJ1Z2dpbmcgYmVjYXVzZSBtYW55IG9mIHRoZSB0cmFwcyBhcmUKIGVuYWJsZWQ6CkBAIC04NDUsNyArODQ1LDcgQEAKIAogICAgICAgRW5naW5lZXJpbmcgbm90YXRpb24gaGFzIGFuIGV4cG9uZW50IHdoaWNoIGlzIGEgbXVsdGlwbGUgb2YgMywgc28gdGhlcmUKICAgICAgIGFyZSB1cCB0byAzIGRpZ2l0cyBsZWZ0IG9mIHRoZSBkZWNpbWFsIHBsYWNlLiAgRm9yIGV4YW1wbGUsIGNvbnZlcnRzCi0gICAgICBgYERlY2ltYWwoJzEyM0UrMScpYGAgdG8gYGBEZWNpbWFsKCcxLjIzRSszJylgYAorICAgICAgYGBEZWNpbWFsKCcxMjNFKzEnKWBgIHRvIGBgRGVjaW1hbCgnMS4yM0UrMycpYGAuCiAKICAgIC4uIG1ldGhvZDo6IHRvX2ludGVncmFsKHJvdW5kaW5nPU5vbmUsIGNvbnRleHQ9Tm9uZSkKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZGV2ZWxvcG1lbnQucnN0IGIvRG9jL2xpYnJhcnkvZGV2ZWxvcG1lbnQucnN0CmluZGV4IDIzNjg3NjkuLjA2ZTcwNDggMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2RldmVsb3BtZW50LnJzdAorKysgYi9Eb2MvbGlicmFyeS9kZXZlbG9wbWVudC5yc3QKQEAgLTIzLDQgKzIzLDMgQEAKICAgIHVuaXR0ZXN0Lm1vY2stZXhhbXBsZXMucnN0CiAgICAydG8zLnJzdAogICAgdGVzdC5yc3QKLSAgIHZlbnYucnN0CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9kaWZmbGliLnJzdCBiL0RvYy9saWJyYXJ5L2RpZmZsaWIucnN0CmluZGV4IDgxZGMwZjEuLmNlYWQ4MTggMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2RpZmZsaWIucnN0CisrKyBiL0RvYy9saWJyYXJ5L2RpZmZsaWIucnN0CkBAIC05NCw5ICs5NCw5IEBACiAgICAgICAqd3JhcGNvbHVtbiogaXMgYW4gb3B0aW9uYWwga2V5d29yZCB0byBzcGVjaWZ5IGNvbHVtbiBudW1iZXIgd2hlcmUgbGluZXMgYXJlCiAgICAgICBicm9rZW4gYW5kIHdyYXBwZWQsIGRlZmF1bHRzIHRvIGBgTm9uZWBgIHdoZXJlIGxpbmVzIGFyZSBub3Qgd3JhcHBlZC4KIAotICAgICAgKmxpbmVqdW5rKiBhbmQgKmNoYXJqdW5rKiBhcmUgb3B0aW9uYWwga2V5d29yZCBhcmd1bWVudHMgcGFzc2VkIGludG8gYGBuZGlmZigpYGAKKyAgICAgICpsaW5lanVuayogYW5kICpjaGFyanVuayogYXJlIG9wdGlvbmFsIGtleXdvcmQgYXJndW1lbnRzIHBhc3NlZCBpbnRvIDpmdW5jOmBuZGlmZmAKICAgICAgICh1c2VkIGJ5IDpjbGFzczpgSHRtbERpZmZgIHRvIGdlbmVyYXRlIHRoZSBzaWRlIGJ5IHNpZGUgSFRNTCBkaWZmZXJlbmNlcykuICBTZWUKLSAgICAgIGBgbmRpZmYoKWBgIGRvY3VtZW50YXRpb24gZm9yIGFyZ3VtZW50IGRlZmF1bHQgdmFsdWVzIGFuZCBkZXNjcmlwdGlvbnMuCisgICAgICA6ZnVuYzpgbmRpZmZgIGRvY3VtZW50YXRpb24gZm9yIGFyZ3VtZW50IGRlZmF1bHQgdmFsdWVzIGFuZCBkZXNjcmlwdGlvbnMuCiAKICAgIFRoZSBmb2xsb3dpbmcgbWV0aG9kcyBhcmUgcHVibGljOgogCkBAIC0yMjYsOCArMjI2LDggQEAKIAogICAgOmZpbGU6YFRvb2xzL3NjcmlwdHMvbmRpZmYucHlgIGlzIGEgY29tbWFuZC1saW5lIGZyb250LWVuZCB0byB0aGlzIGZ1bmN0aW9uLgogCi0gICAgICA+Pj4gZGlmZiA9IG5kaWZmKCdvbmVcbnR3b1xudGhyZWVcbicuc3BsaXRsaW5lcygxKSwKLSAgICAgIC4uLiAgICAgICAgICAgICAgJ29yZVxudHJlZVxuZW11XG4nLnNwbGl0bGluZXMoMSkpCisgICAgICA+Pj4gZGlmZiA9IG5kaWZmKCdvbmVcbnR3b1xudGhyZWVcbicuc3BsaXRsaW5lcyhrZWVwZW5kcz1UcnVlKSwKKyAgICAgIC4uLiAgICAgICAgICAgICAgJ29yZVxudHJlZVxuZW11XG4nLnNwbGl0bGluZXMoa2VlcGVuZHM9VHJ1ZSkpCiAgICAgICA+Pj4gcHJpbnQoJycuam9pbihkaWZmKSwgZW5kPSIiKQogICAgICAgLSBvbmUKICAgICAgID8gIF4KQEAgLTI1MCw4ICsyNTAsOCBAQAogCiAgICBFeGFtcGxlOgogCi0gICAgICA+Pj4gZGlmZiA9IG5kaWZmKCdvbmVcbnR3b1xudGhyZWVcbicuc3BsaXRsaW5lcygxKSwKLSAgICAgIC4uLiAgICAgICAgICAgICAgJ29yZVxudHJlZVxuZW11XG4nLnNwbGl0bGluZXMoMSkpCisgICAgICA+Pj4gZGlmZiA9IG5kaWZmKCdvbmVcbnR3b1xudGhyZWVcbicuc3BsaXRsaW5lcyhrZWVwZW5kcz1UcnVlKSwKKyAgICAgIC4uLiAgICAgICAgICAgICAgJ29yZVxudHJlZVxuZW11XG4nLnNwbGl0bGluZXMoa2VlcGVuZHM9VHJ1ZSkpCiAgICAgICA+Pj4gZGlmZiA9IGxpc3QoZGlmZikgIyBtYXRlcmlhbGl6ZSB0aGUgZ2VuZXJhdGVkIGRlbHRhIGludG8gYSBsaXN0CiAgICAgICA+Pj4gcHJpbnQoJycuam9pbihyZXN0b3JlKGRpZmYsIDEpKSwgZW5kPSIiKQogICAgICAgb25lCkBAIC0yNjksNyArMjY5LDcgQEAKICAgIGdlbmVyYXRpbmcgdGhlIGRlbHRhIGxpbmVzKSBpbiB1bmlmaWVkIGRpZmYgZm9ybWF0LgogCiAgICBVbmlmaWVkIGRpZmZzIGFyZSBhIGNvbXBhY3Qgd2F5IG9mIHNob3dpbmcganVzdCB0aGUgbGluZXMgdGhhdCBoYXZlIGNoYW5nZWQgcGx1cwotICAgYSBmZXcgbGluZXMgb2YgY29udGV4dC4gIFRoZSBjaGFuZ2VzIGFyZSBzaG93biBpbiBhIGlubGluZSBzdHlsZSAoaW5zdGVhZCBvZgorICAgYSBmZXcgbGluZXMgb2YgY29udGV4dC4gIFRoZSBjaGFuZ2VzIGFyZSBzaG93biBpbiBhbiBpbmxpbmUgc3R5bGUgKGluc3RlYWQgb2YKICAgIHNlcGFyYXRlIGJlZm9yZS9hZnRlciBibG9ja3MpLiAgVGhlIG51bWJlciBvZiBjb250ZXh0IGxpbmVzIGlzIHNldCBieSAqbiogd2hpY2gKICAgIGRlZmF1bHRzIHRvIHRocmVlLgogCkBAIC0zMjMsOSArMzIzLDkgQEAKIAogLi4gc2VlYWxzbzo6CiAKLSAgIGBQYXR0ZXJuIE1hdGNoaW5nOiBUaGUgR2VzdGFsdCBBcHByb2FjaCA8aHR0cDovL3d3dy5kZGouY29tLzE4NDQwNzk3MD9wZ25vPTU+YF8KKyAgIGBQYXR0ZXJuIE1hdGNoaW5nOiBUaGUgR2VzdGFsdCBBcHByb2FjaCA8aHR0cDovL3d3dy5kcmRvYmJzLmNvbS9kYXRhYmFzZS9wYXR0ZXJuLW1hdGNoaW5nLXRoZS1nZXN0YWx0LWFwcHJvYWNoLzE4NDQwNzk3MD5gXwogICAgICAgRGlzY3Vzc2lvbiBvZiBhIHNpbWlsYXIgYWxnb3JpdGhtIGJ5IEpvaG4gVy4gUmF0Y2xpZmYgYW5kIEQuIEUuIE1ldHplbmVyLiBUaGlzCi0gICAgICB3YXMgcHVibGlzaGVkIGluIGBEci4gRG9iYidzIEpvdXJuYWwgPGh0dHA6Ly93d3cuZGRqLmNvbS8+YF8gaW4gSnVseSwgMTk4OC4KKyAgICAgIHdhcyBwdWJsaXNoZWQgaW4gYERyLiBEb2JiJ3MgSm91cm5hbCA8aHR0cDovL3d3dy5kcmRvYmJzLmNvbS8+YF8gaW4gSnVseSwgMTk4OC4KIAogCiAuLiBfc2VxdWVuY2UtbWF0Y2hlcjoKQEAgLTY1MCw3ICs2NTAsNyBAQAogICAgLi4uICAgMi4gRXhwbGljaXQgaXMgYmV0dGVyIHRoYW4gaW1wbGljaXQuCiAgICAuLi4gICAzLiBTaW1wbGUgaXMgYmV0dGVyIHRoYW4gY29tcGxleC4KICAgIC4uLiAgIDQuIENvbXBsZXggaXMgYmV0dGVyIHRoYW4gY29tcGxpY2F0ZWQuCi0gICAuLi4gJycnLnNwbGl0bGluZXMoMSkKKyAgIC4uLiAnJycuc3BsaXRsaW5lcyhrZWVwZW5kcz1UcnVlKQogICAgPj4+IGxlbih0ZXh0MSkKICAgIDQKICAgID4+PiB0ZXh0MVswXVstMV0KQEAgLTY1OSw3ICs2NTksNyBAQAogICAgLi4uICAgMy4gICBTaW1wbGUgaXMgYmV0dGVyIHRoYW4gY29tcGxleC4KICAgIC4uLiAgIDQuIENvbXBsaWNhdGVkIGlzIGJldHRlciB0aGFuIGNvbXBsZXguCiAgICAuLi4gICA1LiBGbGF0IGlzIGJldHRlciB0aGFuIG5lc3RlZC4KLSAgIC4uLiAnJycuc3BsaXRsaW5lcygxKQorICAgLi4uICcnJy5zcGxpdGxpbmVzKGtlZXBlbmRzPVRydWUpCiAKIE5leHQgd2UgaW5zdGFudGlhdGUgYSBEaWZmZXIgb2JqZWN0OgogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9kaXMucnN0IGIvRG9jL2xpYnJhcnkvZGlzLnJzdAppbmRleCBlYzcxMTJkLi4yNzNmYjIwIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9kaXMucnN0CisrKyBiL0RvYy9saWJyYXJ5L2Rpcy5yc3QKQEAgLTksOSArOSw5IEBACiAtLS0tLS0tLS0tLS0tLQogCiBUaGUgOm1vZDpgZGlzYCBtb2R1bGUgc3VwcG9ydHMgdGhlIGFuYWx5c2lzIG9mIENQeXRob24gOnRlcm06YGJ5dGVjb2RlYCBieQotZGlzYXNzZW1ibGluZyBpdC4gVGhlIENQeXRob24gYnl0ZWNvZGUgd2hpY2ggdGhpcyBtb2R1bGUgdGFrZXMgYXMgYW4KLWlucHV0IGlzIGRlZmluZWQgaW4gdGhlIGZpbGUgOmZpbGU6YEluY2x1ZGUvb3Bjb2RlLmhgIGFuZCB1c2VkIGJ5IHRoZSBjb21waWxlcgotYW5kIHRoZSBpbnRlcnByZXRlci4KK2Rpc2Fzc2VtYmxpbmcgaXQuIFRoZSBDUHl0aG9uIGJ5dGVjb2RlIHdoaWNoIHRoaXMgbW9kdWxlIHRha2VzIGFzIGFuIGlucHV0IGlzCitkZWZpbmVkIGluIHRoZSBmaWxlIDpmaWxlOmBJbmNsdWRlL29wY29kZS5oYCBhbmQgdXNlZCBieSB0aGUgY29tcGlsZXIgYW5kIHRoZQoraW50ZXJwcmV0ZXIuCiAKIC4uIGltcGwtZGV0YWlsOjoKIApAQCAtMjYsNyArMjYsOCBAQAogICAgZGVmIG15ZnVuYyhhbGlzdCk6CiAgICAgICAgcmV0dXJuIGxlbihhbGlzdCkKIAotdGhlIGZvbGxvd2luZyBjb21tYW5kIGNhbiBiZSB1c2VkIHRvIGdldCB0aGUgZGlzYXNzZW1ibHkgb2YgOmZ1bmM6YG15ZnVuY2A6OgordGhlIGZvbGxvd2luZyBjb21tYW5kIGNhbiBiZSB1c2VkIHRvIGRpc3BsYXkgdGhlIGRpc2Fzc2VtYmx5IG9mCis6ZnVuYzpgbXlmdW5jYDo6CiAKICAgID4+PiBkaXMuZGlzKG15ZnVuYykKICAgICAgMiAgICAgICAgICAgMCBMT0FEX0dMT0JBTCAgICAgICAgICAgICAgMCAobGVuKQpAQCAtMzYsOCArMzcsNzQgQEAKIAogKFRoZSAiMiIgaXMgYSBsaW5lIG51bWJlcikuCiAKLVRoZSA6bW9kOmBkaXNgIG1vZHVsZSBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFuZCBjb25zdGFudHM6CitCeXRlY29kZSBhbmFseXNpcworLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gdmVyc2lvbmFkZGVkOjogMy40CisKK1RoZSBieXRlY29kZSBhbmFseXNpcyBBUEkgYWxsb3dzIHBpZWNlcyBvZiBQeXRob24gY29kZSB0byBiZSB3cmFwcGVkIGluIGEKKzpjbGFzczpgQnl0ZWNvZGVgIG9iamVjdCB0aGF0IHByb3ZpZGVzIGVhc3kgYWNjZXNzIHRvIGRldGFpbHMgb2YgdGhlIGNvbXBpbGVkCitjb2RlLgorCisuLiBjbGFzczo6IEJ5dGVjb2RlKHgsICosIGZpcnN0X2xpbmU9Tm9uZSwgY3VycmVudF9vZmZzZXQ9Tm9uZSkKKworICAgQW5hbHlzZSB0aGUgYnl0ZWNvZGUgY29ycmVzcG9uZGluZyB0byBhIGZ1bmN0aW9uLCBtZXRob2QsIHN0cmluZyBvZiBzb3VyY2UKKyAgIGNvZGUsIG9yIGEgY29kZSBvYmplY3QgKGFzIHJldHVybmVkIGJ5IDpmdW5jOmBjb21waWxlYCkuCisKKyAgIFRoaXMgaXMgYSBjb252ZW5pZW5jZSB3cmFwcGVyIGFyb3VuZCBtYW55IG9mIHRoZSBmdW5jdGlvbnMgbGlzdGVkIGJlbG93LCBtb3N0CisgICBub3RhYmx5IDpmdW5jOmBnZXRfaW5zdHJ1Y3Rpb25zYCwgYXMgaXRlcmF0aW5nIG92ZXIgYSA6Y2xhc3M6YEJ5dGVjb2RlYAorICAgaW5zdGFuY2UgeWllbGRzIHRoZSBieXRlY29kZSBvcGVyYXRpb25zIGFzIDpjbGFzczpgSW5zdHJ1Y3Rpb25gIGluc3RhbmNlcy4KKworICAgSWYgKmZpcnN0X2xpbmUqIGlzIG5vdCBOb25lLCBpdCBpbmRpY2F0ZXMgdGhlIGxpbmUgbnVtYmVyIHRoYXQgc2hvdWxkIGJlCisgICByZXBvcnRlZCBmb3IgdGhlIGZpcnN0IHNvdXJjZSBsaW5lIGluIHRoZSBkaXNhc3NlbWJsZWQgY29kZS4gIE90aGVyd2lzZSwgdGhlCisgICBzb3VyY2UgbGluZSBpbmZvcm1hdGlvbiAoaWYgYW55KSBpcyB0YWtlbiBkaXJlY3RseSBmcm9tIHRoZSBkaXNhc3NlbWJsZWQgY29kZQorICAgb2JqZWN0LgorCisgICBJZiAqY3VycmVudF9vZmZzZXQqIGlzIG5vdCBOb25lLCBpdCByZWZlcnMgdG8gYW4gaW5zdHJ1Y3Rpb24gb2Zmc2V0IGluIHRoZQorICAgZGlzYXNzZW1ibGVkIGNvZGUuIFNldHRpbmcgdGhpcyBtZWFucyA6bWV0aDpgLmRpc2Agd2lsbCBkaXNwbGF5IGEgImN1cnJlbnQKKyAgIGluc3RydWN0aW9uIiBtYXJrZXIgYWdhaW5zdCB0aGUgc3BlY2lmaWVkIG9wY29kZS4KKworICAgLi4gY2xhc3NtZXRob2Q6OiBmcm9tX3RyYWNlYmFjayh0YikKKworICAgICAgQ29uc3RydWN0IGEgOmNsYXNzOmBCeXRlY29kZWAgaW5zdGFuY2UgZnJvbSB0aGUgZ2l2ZW4gdHJhY2ViYWNrLCBzZXR0aW5nCisgICAgICAqY3VycmVudF9vZmZzZXQqIHRvIHRoZSBpbnN0cnVjdGlvbiByZXNwb25zaWJsZSBmb3IgdGhlIGV4Y2VwdGlvbi4KKworICAgLi4gZGF0YTo6IGNvZGVvYmoKKworICAgICAgVGhlIGNvbXBpbGVkIGNvZGUgb2JqZWN0LgorCisgICAuLiBkYXRhOjogZmlyc3RfbGluZQorCisgICAgICBUaGUgZmlyc3Qgc291cmNlIGxpbmUgb2YgdGhlIGNvZGUgb2JqZWN0IChpZiBhdmFpbGFibGUpCisKKyAgIC4uIG1ldGhvZDo6IGRpcygpCisKKyAgICAgIFJldHVybiBhIGZvcm1hdHRlZCB2aWV3IG9mIHRoZSBieXRlY29kZSBvcGVyYXRpb25zICh0aGUgc2FtZSBhcyBwcmludGVkIGJ5CisgICAgICA6ZnVuYzpgZGlzLmRpc2AsIGJ1dCByZXR1cm5lZCBhcyBhIG11bHRpLWxpbmUgc3RyaW5nKS4KKworICAgLi4gbWV0aG9kOjogaW5mbygpCisKKyAgICAgIFJldHVybiBhIGZvcm1hdHRlZCBtdWx0aS1saW5lIHN0cmluZyB3aXRoIGRldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0IHRoZQorICAgICAgY29kZSBvYmplY3QsIGxpa2UgOmZ1bmM6YGNvZGVfaW5mb2AuCisKK0V4YW1wbGU6OgorCisgICAgPj4+IGJ5dGVjb2RlID0gZGlzLkJ5dGVjb2RlKG15ZnVuYykKKyAgICA+Pj4gZm9yIGluc3RyIGluIGJ5dGVjb2RlOgorICAgIC4uLiAgICAgcHJpbnQoaW5zdHIub3BuYW1lKQorICAgIC4uLgorICAgIExPQURfR0xPQkFMCisgICAgTE9BRF9GQVNUCisgICAgQ0FMTF9GVU5DVElPTgorICAgIFJFVFVSTl9WQUxVRQorCisKK0FuYWx5c2lzIGZ1bmN0aW9ucworLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSA6bW9kOmBkaXNgIG1vZHVsZSBhbHNvIGRlZmluZXMgdGhlIGZvbGxvd2luZyBhbmFseXNpcyBmdW5jdGlvbnMgdGhhdCBjb252ZXJ0Cit0aGUgaW5wdXQgZGlyZWN0bHkgdG8gdGhlIGRlc2lyZWQgb3V0cHV0LiBUaGV5IGNhbiBiZSB1c2VmdWwgaWYgb25seSBhIHNpbmdsZQorb3BlcmF0aW9uIGlzIGJlaW5nIHBlcmZvcm1lZCwgc28gdGhlIGludGVybWVkaWF0ZSBhbmFseXNpcyBvYmplY3QgaXNuJ3QgdXNlZnVsOgogCiAuLiBmdW5jdGlvbjo6IGNvZGVfaW5mbyh4KQogCkBAIC01MSwxNyArMTE4LDIyIEBACiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKIAogCi0uLiBmdW5jdGlvbjo6IHNob3dfY29kZSh4KQorLi4gZnVuY3Rpb246OiBzaG93X2NvZGUoeCwgKiwgZmlsZT1Ob25lKQogCiAgICBQcmludCBkZXRhaWxlZCBjb2RlIG9iamVjdCBpbmZvcm1hdGlvbiBmb3IgdGhlIHN1cHBsaWVkIGZ1bmN0aW9uLCBtZXRob2QsCi0gICBzb3VyY2UgY29kZSBzdHJpbmcgb3IgY29kZSBvYmplY3QgdG8gc3Rkb3V0LgorICAgc291cmNlIGNvZGUgc3RyaW5nIG9yIGNvZGUgb2JqZWN0IHRvICpmaWxlKiAob3IgYGBzeXMuc3Rkb3V0YGAgaWYgKmZpbGUqCisgICBpcyBub3Qgc3BlY2lmaWVkKS4KIAotICAgVGhpcyBpcyBhIGNvbnZlbmllbnQgc2hvcnRoYW5kIGZvciBgYHByaW50KGNvZGVfaW5mbyh4KSlgYCwgaW50ZW5kZWQgZm9yCi0gICBpbnRlcmFjdGl2ZSBleHBsb3JhdGlvbiBhdCB0aGUgaW50ZXJwcmV0ZXIgcHJvbXB0LgorICAgVGhpcyBpcyBhIGNvbnZlbmllbnQgc2hvcnRoYW5kIGZvciBgYHByaW50KGNvZGVfaW5mbyh4KSwgZmlsZT1maWxlKWBgLAorICAgaW50ZW5kZWQgZm9yIGludGVyYWN0aXZlIGV4cGxvcmF0aW9uIGF0IHRoZSBpbnRlcnByZXRlciBwcm9tcHQuCiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgogCi0uLiBmdW5jdGlvbjo6IGRpcyh4PU5vbmUpCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgQWRkZWQgKmZpbGUqIHBhcmFtZXRlci4KKworCisuLiBmdW5jdGlvbjo6IGRpcyh4PU5vbmUsICosIGZpbGU9Tm9uZSkKIAogICAgRGlzYXNzZW1ibGUgdGhlICp4KiBvYmplY3QuICAqeCogY2FuIGRlbm90ZSBlaXRoZXIgYSBtb2R1bGUsIGEgY2xhc3MsIGEKICAgIG1ldGhvZCwgYSBmdW5jdGlvbiwgYSBjb2RlIG9iamVjdCwgYSBzdHJpbmcgb2Ygc291cmNlIGNvZGUgb3IgYSBieXRlIHNlcXVlbmNlCkBAIC03MiwxNiArMTQ0LDI4IEBACiAgICBkaXNhc3NlbWJsZWQuICBJZiBubyBvYmplY3QgaXMgcHJvdmlkZWQsIHRoaXMgZnVuY3Rpb24gZGlzYXNzZW1ibGVzIHRoZSBsYXN0CiAgICB0cmFjZWJhY2suCiAKKyAgIFRoZSBkaXNhc3NlbWJseSBpcyB3cml0dGVuIGFzIHRleHQgdG8gdGhlIHN1cHBsaWVkICpmaWxlKiBhcmd1bWVudCBpZgorICAgcHJvdmlkZWQgYW5kIHRvIGBgc3lzLnN0ZG91dGBgIG90aGVyd2lzZS4KIAotLi4gZnVuY3Rpb246OiBkaXN0Yih0Yj1Ob25lKQorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIEFkZGVkICpmaWxlKiBwYXJhbWV0ZXIuCisKKworLi4gZnVuY3Rpb246OiBkaXN0Yih0Yj1Ob25lLCAqLCBmaWxlPU5vbmUpCiAKICAgIERpc2Fzc2VtYmxlIHRoZSB0b3Atb2Ytc3RhY2sgZnVuY3Rpb24gb2YgYSB0cmFjZWJhY2ssIHVzaW5nIHRoZSBsYXN0CiAgICB0cmFjZWJhY2sgaWYgbm9uZSB3YXMgcGFzc2VkLiAgVGhlIGluc3RydWN0aW9uIGNhdXNpbmcgdGhlIGV4Y2VwdGlvbiBpcwogICAgaW5kaWNhdGVkLgogCisgICBUaGUgZGlzYXNzZW1ibHkgaXMgd3JpdHRlbiBhcyB0ZXh0IHRvIHRoZSBzdXBwbGllZCAqZmlsZSogYXJndW1lbnQgaWYKKyAgIHByb3ZpZGVkIGFuZCB0byBgYHN5cy5zdGRvdXRgYCBvdGhlcndpc2UuCiAKLS4uIGZ1bmN0aW9uOjogZGlzYXNzZW1ibGUoY29kZSwgbGFzdGk9LTEpCi0gICAgICAgICAgICAgIGRpc2NvKGNvZGUsIGxhc3RpPS0xKQorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIEFkZGVkICpmaWxlKiBwYXJhbWV0ZXIuCisKKworLi4gZnVuY3Rpb246OiBkaXNhc3NlbWJsZShjb2RlLCBsYXN0aT0tMSwgKiwgZmlsZT1Ob25lKQorICAgICAgICAgICAgICBkaXNjbyhjb2RlLCBsYXN0aT0tMSwgKiwgZmlsZT1Ob25lKQogCiAgICBEaXNhc3NlbWJsZSBhIGNvZGUgb2JqZWN0LCBpbmRpY2F0aW5nIHRoZSBsYXN0IGluc3RydWN0aW9uIGlmICpsYXN0aSogd2FzCiAgICBwcm92aWRlZC4gIFRoZSBvdXRwdXQgaXMgZGl2aWRlZCBpbiB0aGUgZm9sbG93aW5nIGNvbHVtbnM6CkBAIC05Nyw2ICsxODEsMjggQEAKICAgIFRoZSBwYXJhbWV0ZXIgaW50ZXJwcmV0YXRpb24gcmVjb2duaXplcyBsb2NhbCBhbmQgZ2xvYmFsIHZhcmlhYmxlIG5hbWVzLAogICAgY29uc3RhbnQgdmFsdWVzLCBicmFuY2ggdGFyZ2V0cywgYW5kIGNvbXBhcmUgb3BlcmF0b3JzLgogCisgICBUaGUgZGlzYXNzZW1ibHkgaXMgd3JpdHRlbiBhcyB0ZXh0IHRvIHRoZSBzdXBwbGllZCAqZmlsZSogYXJndW1lbnQgaWYKKyAgIHByb3ZpZGVkIGFuZCB0byBgYHN5cy5zdGRvdXRgYCBvdGhlcndpc2UuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBBZGRlZCAqZmlsZSogcGFyYW1ldGVyLgorCisKKy4uIGZ1bmN0aW9uOjogZ2V0X2luc3RydWN0aW9ucyh4LCAqLCBmaXJzdF9saW5lPU5vbmUpCisKKyAgIFJldHVybiBhbiBpdGVyYXRvciBvdmVyIHRoZSBpbnN0cnVjdGlvbnMgaW4gdGhlIHN1cHBsaWVkIGZ1bmN0aW9uLCBtZXRob2QsCisgICBzb3VyY2UgY29kZSBzdHJpbmcgb3IgY29kZSBvYmplY3QuCisKKyAgIFRoZSBpdGVyYXRvciBnZW5lcmF0ZXMgYSBzZXJpZXMgb2YgOmNsYXNzOmBJbnN0cnVjdGlvbmAgbmFtZWQgdHVwbGVzIGdpdmluZworICAgdGhlIGRldGFpbHMgb2YgZWFjaCBvcGVyYXRpb24gaW4gdGhlIHN1cHBsaWVkIGNvZGUuCisKKyAgIElmICpmaXJzdF9saW5lKiBpcyBub3QgTm9uZSwgaXQgaW5kaWNhdGVzIHRoZSBsaW5lIG51bWJlciB0aGF0IHNob3VsZCBiZQorICAgcmVwb3J0ZWQgZm9yIHRoZSBmaXJzdCBzb3VyY2UgbGluZSBpbiB0aGUgZGlzYXNzZW1ibGVkIGNvZGUuICBPdGhlcndpc2UsIHRoZQorICAgc291cmNlIGxpbmUgaW5mb3JtYXRpb24gKGlmIGFueSkgaXMgdGFrZW4gZGlyZWN0bHkgZnJvbSB0aGUgZGlzYXNzZW1ibGVkIGNvZGUKKyAgIG9iamVjdC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIAogLi4gZnVuY3Rpb246OiBmaW5kbGluZXN0YXJ0cyhjb2RlKQogCkBAIC0xMTEsNjEgKzIxNyw2NyBAQAogICAgcmV0dXJuIGEgbGlzdCBvZiB0aGVzZSBvZmZzZXRzLgogCiAKLS4uIGRhdGE6OiBvcG5hbWUKKy4uIGZ1bmN0aW9uOjogc3RhY2tfZWZmZWN0KG9wY29kZSwgW29wYXJnXSkKIAotICAgU2VxdWVuY2Ugb2Ygb3BlcmF0aW9uIG5hbWVzLCBpbmRleGFibGUgdXNpbmcgdGhlIGJ5dGVjb2RlLgorICAgQ29tcHV0ZSB0aGUgc3RhY2sgZWZmZWN0IG9mICpvcGNvZGUqIHdpdGggYXJndW1lbnQgKm9wYXJnKi4KIAotCi0uLiBkYXRhOjogb3BtYXAKLQotICAgRGljdGlvbmFyeSBtYXBwaW5nIG9wZXJhdGlvbiBuYW1lcyB0byBieXRlY29kZXMuCi0KLQotLi4gZGF0YTo6IGNtcF9vcAotCi0gICBTZXF1ZW5jZSBvZiBhbGwgY29tcGFyZSBvcGVyYXRpb24gbmFtZXMuCi0KLQotLi4gZGF0YTo6IGhhc2NvbnN0Ci0KLSAgIFNlcXVlbmNlIG9mIGJ5dGVjb2RlcyB0aGF0IGhhdmUgYSBjb25zdGFudCBwYXJhbWV0ZXIuCi0KLQotLi4gZGF0YTo6IGhhc2ZyZWUKLQotICAgU2VxdWVuY2Ugb2YgYnl0ZWNvZGVzIHRoYXQgYWNjZXNzIGEgZnJlZSB2YXJpYWJsZS4KLQotCi0uLiBkYXRhOjogaGFzbmFtZQotCi0gICBTZXF1ZW5jZSBvZiBieXRlY29kZXMgdGhhdCBhY2Nlc3MgYW4gYXR0cmlidXRlIGJ5IG5hbWUuCi0KLQotLi4gZGF0YTo6IGhhc2pyZWwKLQotICAgU2VxdWVuY2Ugb2YgYnl0ZWNvZGVzIHRoYXQgaGF2ZSBhIHJlbGF0aXZlIGp1bXAgdGFyZ2V0LgotCi0KLS4uIGRhdGE6OiBoYXNqYWJzCi0KLSAgIFNlcXVlbmNlIG9mIGJ5dGVjb2RlcyB0aGF0IGhhdmUgYW4gYWJzb2x1dGUganVtcCB0YXJnZXQuCi0KLQotLi4gZGF0YTo6IGhhc2xvY2FsCi0KLSAgIFNlcXVlbmNlIG9mIGJ5dGVjb2RlcyB0aGF0IGFjY2VzcyBhIGxvY2FsIHZhcmlhYmxlLgotCi0KLS4uIGRhdGE6OiBoYXNjb21wYXJlCi0KLSAgIFNlcXVlbmNlIG9mIGJ5dGVjb2RlcyBvZiBCb29sZWFuIG9wZXJhdGlvbnMuCi0KKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAogCiAuLiBfYnl0ZWNvZGVzOgogCiBQeXRob24gQnl0ZWNvZGUgSW5zdHJ1Y3Rpb25zCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK1RoZSA6ZnVuYzpgZ2V0X2luc3RydWN0aW9uc2AgZnVuY3Rpb24gYW5kIDpjbGFzczpgQnl0ZWNvZGVgIGNsYXNzIHByb3ZpZGUKK2RldGFpbHMgb2YgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb25zIGFzIDpjbGFzczpgSW5zdHJ1Y3Rpb25gIGluc3RhbmNlczoKKworLi4gY2xhc3M6OiBJbnN0cnVjdGlvbgorCisgICBEZXRhaWxzIGZvciBhIGJ5dGVjb2RlIG9wZXJhdGlvbgorCisgICAuLiBkYXRhOjogb3Bjb2RlCisKKyAgICAgIG51bWVyaWMgY29kZSBmb3Igb3BlcmF0aW9uLCBjb3JyZXNwb25kaW5nIHRvIHRoZSBvcGNvZGUgdmFsdWVzIGxpc3RlZAorICAgICAgYmVsb3cgYW5kIHRoZSBieXRlY29kZSB2YWx1ZXMgaW4gdGhlIDpyZWY6YG9wY29kZV9jb2xsZWN0aW9uc2AuCisKKworICAgLi4gZGF0YTo6IG9wbmFtZQorCisgICAgICBodW1hbiByZWFkYWJsZSBuYW1lIGZvciBvcGVyYXRpb24KKworCisgICAuLiBkYXRhOjogYXJnCisKKyAgICAgIG51bWVyaWMgYXJndW1lbnQgdG8gb3BlcmF0aW9uIChpZiBhbnkpLCBvdGhlcndpc2UgTm9uZQorCisKKyAgIC4uIGRhdGE6OiBhcmd2YWwKKworICAgICAgcmVzb2x2ZWQgYXJnIHZhbHVlIChpZiBrbm93biksIG90aGVyd2lzZSBzYW1lIGFzIGFyZworCisKKyAgIC4uIGRhdGE6OiBhcmdyZXByCisKKyAgICAgIGh1bWFuIHJlYWRhYmxlIGRlc2NyaXB0aW9uIG9mIG9wZXJhdGlvbiBhcmd1bWVudAorCisKKyAgIC4uIGRhdGE6OiBvZmZzZXQKKworICAgICAgc3RhcnQgaW5kZXggb2Ygb3BlcmF0aW9uIHdpdGhpbiBieXRlY29kZSBzZXF1ZW5jZQorCisKKyAgIC4uIGRhdGE6OiBzdGFydHNfbGluZQorCisgICAgICBsaW5lIHN0YXJ0ZWQgYnkgdGhpcyBvcGNvZGUgKGlmIGFueSksIG90aGVyd2lzZSBOb25lCisKKworICAgLi4gZGF0YTo6IGlzX2p1bXBfdGFyZ2V0CisKKyAgICAgIGBgVHJ1ZWBgIGlmIG90aGVyIGNvZGUganVtcHMgdG8gaGVyZSwgb3RoZXJ3aXNlIGBgRmFsc2VgYAorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiBUaGUgUHl0aG9uIGNvbXBpbGVyIGN1cnJlbnRseSBnZW5lcmF0ZXMgdGhlIGZvbGxvd2luZyBieXRlY29kZSBpbnN0cnVjdGlvbnMuCiAKIApAQCAtMzg2LDggKzQ5OCw4IEBACiAuLiBvcGNvZGU6OiBQUklOVF9FWFBSCiAKICAgIEltcGxlbWVudHMgdGhlIGV4cHJlc3Npb24gc3RhdGVtZW50IGZvciB0aGUgaW50ZXJhY3RpdmUgbW9kZS4gIFRPUyBpcyByZW1vdmVkCi0gICBmcm9tIHRoZSBzdGFjayBhbmQgcHJpbnRlZC4gIEluIG5vbi1pbnRlcmFjdGl2ZSBtb2RlLCBhbiBleHByZXNzaW9uIHN0YXRlbWVudCBpcwotICAgdGVybWluYXRlZCB3aXRoIGBgUE9QX1NUQUNLYGAuCisgICBmcm9tIHRoZSBzdGFjayBhbmQgcHJpbnRlZC4gIEluIG5vbi1pbnRlcmFjdGl2ZSBtb2RlLCBhbiBleHByZXNzaW9uIHN0YXRlbWVudAorICAgaXMgdGVybWluYXRlZCB3aXRoIDpvcGNvZGU6YFBPUF9UT1BgLgogCiAKIC4uIG9wY29kZTo6IEJSRUFLX0xPT1AKQEAgLTM5OCw3ICs1MTAsNyBAQAogLi4gb3Bjb2RlOjogQ09OVElOVUVfTE9PUCAodGFyZ2V0KQogCiAgICBDb250aW51ZXMgYSBsb29wIGR1ZSB0byBhIDprZXl3b3JkOmBjb250aW51ZWAgc3RhdGVtZW50LiAgKnRhcmdldCogaXMgdGhlCi0gICBhZGRyZXNzIHRvIGp1bXAgdG8gKHdoaWNoIHNob3VsZCBiZSBhIGBgRk9SX0lURVJgYCBpbnN0cnVjdGlvbikuCisgICBhZGRyZXNzIHRvIGp1bXAgdG8gKHdoaWNoIHNob3VsZCBiZSBhIDpvcGNvZGU6YEZPUl9JVEVSYCBpbnN0cnVjdGlvbikuCiAKIAogLi4gb3Bjb2RlOjogU0VUX0FERCAoaSkKQEAgLTQxNiw5ICs1MjgsMTAgQEAKICAgIENhbGxzIGBgZGljdC5zZXRpdGVtKFRPUzFbLWldLCBUT1MsIFRPUzEpYGAuICBVc2VkIHRvIGltcGxlbWVudCBkaWN0CiAgICBjb21wcmVoZW5zaW9ucy4KIAotRm9yIGFsbCBvZiB0aGUgU0VUX0FERCwgTElTVF9BUFBFTkQgYW5kIE1BUF9BREQgaW5zdHJ1Y3Rpb25zLCB3aGlsZSB0aGUKLWFkZGVkIHZhbHVlIG9yIGtleS92YWx1ZSBwYWlyIGlzIHBvcHBlZCBvZmYsIHRoZSBjb250YWluZXIgb2JqZWN0IHJlbWFpbnMgb24KLXRoZSBzdGFjayBzbyB0aGF0IGl0IGlzIGF2YWlsYWJsZSBmb3IgZnVydGhlciBpdGVyYXRpb25zIG9mIHRoZSBsb29wLgorRm9yIGFsbCBvZiB0aGUgOm9wY29kZTpgU0VUX0FERGAsIDpvcGNvZGU6YExJU1RfQVBQRU5EYCBhbmQgOm9wY29kZTpgTUFQX0FERGAKK2luc3RydWN0aW9ucywgd2hpbGUgdGhlIGFkZGVkIHZhbHVlIG9yIGtleS92YWx1ZSBwYWlyIGlzIHBvcHBlZCBvZmYsIHRoZQorY29udGFpbmVyIG9iamVjdCByZW1haW5zIG9uIHRoZSBzdGFjayBzbyB0aGF0IGl0IGlzIGF2YWlsYWJsZSBmb3IgZnVydGhlcgoraXRlcmF0aW9ucyBvZiB0aGUgbG9vcC4KIAogCiAuLiBvcGNvZGU6OiBSRVRVUk5fVkFMVUUKQEAgLTQyOCwzNSArNTQxLDM1IEBACiAKIC4uIG9wY29kZTo6IFlJRUxEX1ZBTFVFCiAKLSAgIFBvcHMgYGBUT1NgYCBhbmQgeWllbGRzIGl0IGZyb20gYSA6dGVybTpgZ2VuZXJhdG9yYC4KKyAgIFBvcHMgVE9TIGFuZCB5aWVsZHMgaXQgZnJvbSBhIDp0ZXJtOmBnZW5lcmF0b3JgLgogCiAKIC4uIG9wY29kZTo6IFlJRUxEX0ZST00KIAotICAgUG9wcyBgYFRPU2BgIGFuZCBkZWxlZ2F0ZXMgdG8gaXQgYXMgYSBzdWJpdGVyYXRvciBmcm9tIGEgOnRlcm06YGdlbmVyYXRvcmAuCisgICBQb3BzIFRPUyBhbmQgZGVsZWdhdGVzIHRvIGl0IGFzIGEgc3ViaXRlcmF0b3IgZnJvbSBhIDp0ZXJtOmBnZW5lcmF0b3JgLgogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKIAogCiAuLiBvcGNvZGU6OiBJTVBPUlRfU1RBUgogCi0gICBMb2FkcyBhbGwgc3ltYm9scyBub3Qgc3RhcnRpbmcgd2l0aCBgYCdfJ2BgIGRpcmVjdGx5IGZyb20gdGhlIG1vZHVsZSBUT1MgdG8gdGhlCi0gICBsb2NhbCBuYW1lc3BhY2UuIFRoZSBtb2R1bGUgaXMgcG9wcGVkIGFmdGVyIGxvYWRpbmcgYWxsIG5hbWVzLiBUaGlzIG9wY29kZQotICAgaW1wbGVtZW50cyBgYGZyb20gbW9kdWxlIGltcG9ydCAqYGAuCisgICBMb2FkcyBhbGwgc3ltYm9scyBub3Qgc3RhcnRpbmcgd2l0aCBgYCdfJ2BgIGRpcmVjdGx5IGZyb20gdGhlIG1vZHVsZSBUT1MgdG8KKyAgIHRoZSBsb2NhbCBuYW1lc3BhY2UuIFRoZSBtb2R1bGUgaXMgcG9wcGVkIGFmdGVyIGxvYWRpbmcgYWxsIG5hbWVzLiBUaGlzCisgICBvcGNvZGUgaW1wbGVtZW50cyBgYGZyb20gbW9kdWxlIGltcG9ydCAqYGAuCiAKIAogLi4gb3Bjb2RlOjogUE9QX0JMT0NLCiAKLSAgIFJlbW92ZXMgb25lIGJsb2NrIGZyb20gdGhlIGJsb2NrIHN0YWNrLiAgUGVyIGZyYW1lLCB0aGVyZSBpcyBhICBzdGFjayBvZiBibG9ja3MsCi0gICBkZW5vdGluZyBuZXN0ZWQgbG9vcHMsIHRyeSBzdGF0ZW1lbnRzLCBhbmQgc3VjaC4KKyAgIFJlbW92ZXMgb25lIGJsb2NrIGZyb20gdGhlIGJsb2NrIHN0YWNrLiAgUGVyIGZyYW1lLCB0aGVyZSBpcyBhIHN0YWNrIG9mCisgICBibG9ja3MsIGRlbm90aW5nIG5lc3RlZCBsb29wcywgdHJ5IHN0YXRlbWVudHMsIGFuZCBzdWNoLgogCiAKIC4uIG9wY29kZTo6IFBPUF9FWENFUFQKIAogICAgUmVtb3ZlcyBvbmUgYmxvY2sgZnJvbSB0aGUgYmxvY2sgc3RhY2suIFRoZSBwb3BwZWQgYmxvY2sgbXVzdCBiZSBhbiBleGNlcHRpb24KLSAgIGhhbmRsZXIgYmxvY2ssIGFzIGltcGxpY2l0bHkgY3JlYXRlZCB3aGVuIGVudGVyaW5nIGFuIGV4Y2VwdCBoYW5kbGVyLgotICAgSW4gYWRkaXRpb24gdG8gcG9wcGluZyBleHRyYW5lb3VzIHZhbHVlcyBmcm9tIHRoZSBmcmFtZSBzdGFjaywgdGhlCi0gICBsYXN0IHRocmVlIHBvcHBlZCB2YWx1ZXMgYXJlIHVzZWQgdG8gcmVzdG9yZSB0aGUgZXhjZXB0aW9uIHN0YXRlLgorICAgaGFuZGxlciBibG9jaywgYXMgaW1wbGljaXRseSBjcmVhdGVkIHdoZW4gZW50ZXJpbmcgYW4gZXhjZXB0IGhhbmRsZXIuICBJbgorICAgYWRkaXRpb24gdG8gcG9wcGluZyBleHRyYW5lb3VzIHZhbHVlcyBmcm9tIHRoZSBmcmFtZSBzdGFjaywgdGhlIGxhc3QgdGhyZWUKKyAgIHBvcHBlZCB2YWx1ZXMgYXJlIHVzZWQgdG8gcmVzdG9yZSB0aGUgZXhjZXB0aW9uIHN0YXRlLgogCiAKIC4uIG9wY29kZTo6IEVORF9GSU5BTExZCkBAIC00NjksNyArNTgyLDcgQEAKIC4uIG9wY29kZTo6IExPQURfQlVJTERfQ0xBU1MKIAogICAgUHVzaGVzIDpmdW5jOmBidWlsdGlucy5fX2J1aWxkX2NsYXNzX19gIG9udG8gdGhlIHN0YWNrLiAgSXQgaXMgbGF0ZXIgY2FsbGVkCi0gICBieSBgYENBTExfRlVOQ1RJT05gYCB0byBjb25zdHJ1Y3QgYSBjbGFzcy4KKyAgIGJ5IDpvcGNvZGU6YENBTExfRlVOQ1RJT05gIHRvIGNvbnN0cnVjdCBhIGNsYXNzLgogCiAKIC4uIG9wY29kZTo6IFNFVFVQX1dJVEggKGRlbHRhKQpAQCAtNDg2LDkgKzU5OSw5IEBACiAKIC4uIG9wY29kZTo6IFdJVEhfQ0xFQU5VUAogCi0gICBDbGVhbnMgdXAgdGhlIHN0YWNrIHdoZW4gYSA6a2V5d29yZDpgd2l0aGAgc3RhdGVtZW50IGJsb2NrIGV4aXRzLiAgVE9TIGlzCi0gICB0aGUgY29udGV4dCBtYW5hZ2VyJ3MgOm1ldGg6YF9fZXhpdF9fYCBib3VuZCBtZXRob2QuIEJlbG93IFRPUyBhcmUgMS0tMwotICAgdmFsdWVzIGluZGljYXRpbmcgaG93L3doeSB0aGUgZmluYWxseSBjbGF1c2Ugd2FzIGVudGVyZWQ6CisgICBDbGVhbnMgdXAgdGhlIHN0YWNrIHdoZW4gYSA6a2V5d29yZDpgd2l0aGAgc3RhdGVtZW50IGJsb2NrIGV4aXRzLiAgVE9TIGlzIHRoZQorICAgY29udGV4dCBtYW5hZ2VyJ3MgOm1ldGg6YF9fZXhpdF9fYCBib3VuZCBtZXRob2QuIEJlbG93IFRPUyBhcmUgMS0tMyB2YWx1ZXMKKyAgIGluZGljYXRpbmcgaG93L3doeSB0aGUgZmluYWxseSBjbGF1c2Ugd2FzIGVudGVyZWQ6CiAKICAgICogU0VDT05EID0gYGBOb25lYGAKICAgICogKFNFQ09ORCwgVEhJUkQpID0gKGBgV0hZX3tSRVRVUk4sQ09OVElOVUV9YGApLCByZXR2YWwKQEAgLTQ5OCwyOCArNjExLDIyIEBACiAgICBJbiB0aGUgbGFzdCBjYXNlLCBgYFRPUyhTRUNPTkQsIFRISVJELCBGT1VSVEgpYGAgaXMgY2FsbGVkLCBvdGhlcndpc2UKICAgIGBgVE9TKE5vbmUsIE5vbmUsIE5vbmUpYGAuICBJbiBhZGRpdGlvbiwgVE9TIGlzIHJlbW92ZWQgZnJvbSB0aGUgc3RhY2suCiAKLSAgIElmIHRoZSBzdGFjayByZXByZXNlbnRzIGFuIGV4Y2VwdGlvbiwgKmFuZCogdGhlIGZ1bmN0aW9uIGNhbGwgcmV0dXJucwotICAgYSAndHJ1ZScgdmFsdWUsIHRoaXMgaW5mb3JtYXRpb24gaXMgInphcHBlZCIgYW5kIHJlcGxhY2VkIHdpdGggYSBzaW5nbGUKLSAgIGBgV0hZX1NJTEVOQ0VEYGAgdG8gcHJldmVudCBgYEVORF9GSU5BTExZYGAgZnJvbSByZS1yYWlzaW5nIHRoZSBleGNlcHRpb24uCi0gICAoQnV0IG5vbi1sb2NhbCBnb3RvcyB3aWxsIHN0aWxsIGJlIHJlc3VtZWQuKQorICAgSWYgdGhlIHN0YWNrIHJlcHJlc2VudHMgYW4gZXhjZXB0aW9uLCAqYW5kKiB0aGUgZnVuY3Rpb24gY2FsbCByZXR1cm5zIGEKKyAgICd0cnVlJyB2YWx1ZSwgdGhpcyBpbmZvcm1hdGlvbiBpcyAiemFwcGVkIiBhbmQgcmVwbGFjZWQgd2l0aCBhIHNpbmdsZQorICAgYGBXSFlfU0lMRU5DRURgYCB0byBwcmV2ZW50IDpvcGNvZGU6YEVORF9GSU5BTExZYCBmcm9tIHJlLXJhaXNpbmcgdGhlCisgICBleGNlcHRpb24uICAoQnV0IG5vbi1sb2NhbCBnb3RvcyB3aWxsIHN0aWxsIGJlIHJlc3VtZWQuKQogCiAgICAuLiBYWFggZXhwbGFpbiB0aGUgV0hZIHN0dWZmIQogCiAKLS4uIG9wY29kZTo6IFNUT1JFX0xPQ0FMUwotCi0gICBQb3BzIFRPUyBmcm9tIHRoZSBzdGFjayBhbmQgc3RvcmVzIGl0IGFzIHRoZSBjdXJyZW50IGZyYW1lJ3MgYGBmX2xvY2Fsc2BgLgotICAgVGhpcyBpcyB1c2VkIGluIGNsYXNzIGNvbnN0cnVjdGlvbi4KLQotCiBBbGwgb2YgdGhlIGZvbGxvd2luZyBvcGNvZGVzIGV4cGVjdCBhcmd1bWVudHMuICBBbiBhcmd1bWVudCBpcyB0d28gYnl0ZXMsIHdpdGgKIHRoZSBtb3JlIHNpZ25pZmljYW50IGJ5dGUgbGFzdC4KIAogLi4gb3Bjb2RlOjogU1RPUkVfTkFNRSAobmFtZWkpCiAKICAgIEltcGxlbWVudHMgYGBuYW1lID0gVE9TYGAuICpuYW1laSogaXMgdGhlIGluZGV4IG9mICpuYW1lKiBpbiB0aGUgYXR0cmlidXRlCi0gICA6YXR0cjpgY29fbmFtZXNgIG9mIHRoZSBjb2RlIG9iamVjdC4gVGhlIGNvbXBpbGVyIHRyaWVzIHRvIHVzZSBgYFNUT1JFX0ZBU1RgYAotICAgb3IgYGBTVE9SRV9HTE9CQUxgYCBpZiBwb3NzaWJsZS4KKyAgIDphdHRyOmBjb19uYW1lc2Agb2YgdGhlIGNvZGUgb2JqZWN0LiBUaGUgY29tcGlsZXIgdHJpZXMgdG8gdXNlCisgICA6b3Bjb2RlOmBTVE9SRV9GQVNUYCBvciA6b3Bjb2RlOmBTVE9SRV9HTE9CQUxgIGlmIHBvc3NpYmxlLgogCiAKIC4uIG9wY29kZTo6IERFTEVURV9OQU1FIChuYW1laSkKQEAgLTU1OSwxMiArNjY2LDEyIEBACiAKIC4uIG9wY29kZTo6IFNUT1JFX0dMT0JBTCAobmFtZWkpCiAKLSAgIFdvcmtzIGFzIGBgU1RPUkVfTkFNRWBgLCBidXQgc3RvcmVzIHRoZSBuYW1lIGFzIGEgZ2xvYmFsLgorICAgV29ya3MgYXMgOm9wY29kZTpgU1RPUkVfTkFNRWAsIGJ1dCBzdG9yZXMgdGhlIG5hbWUgYXMgYSBnbG9iYWwuCiAKIAogLi4gb3Bjb2RlOjogREVMRVRFX0dMT0JBTCAobmFtZWkpCiAKLSAgIFdvcmtzIGFzIGBgREVMRVRFX05BTUVgYCwgYnV0IGRlbGV0ZXMgYSBnbG9iYWwgbmFtZS4KKyAgIFdvcmtzIGFzIDpvcGNvZGU6YERFTEVURV9OQU1FYCwgYnV0IGRlbGV0ZXMgYSBnbG9iYWwgbmFtZS4KIAogCiAuLiBvcGNvZGU6OiBMT0FEX0NPTlNUIChjb25zdGkpCkBAIC01NzksMTggKzY4NiwxOCBAQAogCiAuLiBvcGNvZGU6OiBCVUlMRF9UVVBMRSAoY291bnQpCiAKLSAgIENyZWF0ZXMgYSB0dXBsZSBjb25zdW1pbmcgKmNvdW50KiBpdGVtcyBmcm9tIHRoZSBzdGFjaywgYW5kIHB1c2hlcyB0aGUgcmVzdWx0aW5nCi0gICB0dXBsZSBvbnRvIHRoZSBzdGFjay4KKyAgIENyZWF0ZXMgYSB0dXBsZSBjb25zdW1pbmcgKmNvdW50KiBpdGVtcyBmcm9tIHRoZSBzdGFjaywgYW5kIHB1c2hlcyB0aGUKKyAgIHJlc3VsdGluZyB0dXBsZSBvbnRvIHRoZSBzdGFjay4KIAogCiAuLiBvcGNvZGU6OiBCVUlMRF9MSVNUIChjb3VudCkKIAotICAgV29ya3MgYXMgYGBCVUlMRF9UVVBMRWBgLCBidXQgY3JlYXRlcyBhIGxpc3QuCisgICBXb3JrcyBhcyA6b3Bjb2RlOmBCVUlMRF9UVVBMRWAsIGJ1dCBjcmVhdGVzIGEgbGlzdC4KIAogCiAuLiBvcGNvZGU6OiBCVUlMRF9TRVQgKGNvdW50KQogCi0gICBXb3JrcyBhcyBgYEJVSUxEX1RVUExFYGAsIGJ1dCBjcmVhdGVzIGEgc2V0LgorICAgV29ya3MgYXMgOm9wY29kZTpgQlVJTERfVFVQTEVgLCBidXQgY3JlYXRlcyBhIHNldC4KIAogCiAuLiBvcGNvZGU6OiBCVUlMRF9NQVAgKGNvdW50KQpAQCAtNjE0LDggKzcyMSw4IEBACiAKICAgIEltcG9ydHMgdGhlIG1vZHVsZSBgYGNvX25hbWVzW25hbWVpXWBgLiAgVE9TIGFuZCBUT1MxIGFyZSBwb3BwZWQgYW5kIHByb3ZpZGUKICAgIHRoZSAqZnJvbWxpc3QqIGFuZCAqbGV2ZWwqIGFyZ3VtZW50cyBvZiA6ZnVuYzpgX19pbXBvcnRfX2AuICBUaGUgbW9kdWxlCi0gICBvYmplY3QgaXMgcHVzaGVkIG9udG8gdGhlIHN0YWNrLiAgVGhlIGN1cnJlbnQgbmFtZXNwYWNlIGlzIG5vdCBhZmZlY3RlZDoKLSAgIGZvciBhIHByb3BlciBpbXBvcnQgc3RhdGVtZW50LCBhIHN1YnNlcXVlbnQgYGBTVE9SRV9GQVNUYGAgaW5zdHJ1Y3Rpb24KKyAgIG9iamVjdCBpcyBwdXNoZWQgb250byB0aGUgc3RhY2suICBUaGUgY3VycmVudCBuYW1lc3BhY2UgaXMgbm90IGFmZmVjdGVkOiBmb3IKKyAgIGEgcHJvcGVyIGltcG9ydCBzdGF0ZW1lbnQsIGEgc3Vic2VxdWVudCA6b3Bjb2RlOmBTVE9SRV9GQVNUYCBpbnN0cnVjdGlvbgogICAgbW9kaWZpZXMgdGhlIG5hbWVzcGFjZS4KIAogCkBAIC02MjMsNyArNzMwLDcgQEAKIAogICAgTG9hZHMgdGhlIGF0dHJpYnV0ZSBgYGNvX25hbWVzW25hbWVpXWBgIGZyb20gdGhlIG1vZHVsZSBmb3VuZCBpbiBUT1MuIFRoZQogICAgcmVzdWx0aW5nIG9iamVjdCBpcyBwdXNoZWQgb250byB0aGUgc3RhY2ssIHRvIGJlIHN1YnNlcXVlbnRseSBzdG9yZWQgYnkgYQotICAgYGBTVE9SRV9GQVNUYGAgaW5zdHJ1Y3Rpb24uCisgICA6b3Bjb2RlOmBTVE9SRV9GQVNUYCBpbnN0cnVjdGlvbi4KIAogCiAuLiBvcGNvZGU6OiBKVU1QX0ZPUldBUkQgKGRlbHRhKQpAQCAtNjQzLDE0ICs3NTAsMTQgQEAKIAogLi4gb3Bjb2RlOjogSlVNUF9JRl9UUlVFX09SX1BPUCAodGFyZ2V0KQogCi0gICBJZiBUT1MgaXMgdHJ1ZSwgc2V0cyB0aGUgYnl0ZWNvZGUgY291bnRlciB0byAqdGFyZ2V0KiBhbmQgbGVhdmVzIFRPUwotICAgb24gdGhlIHN0YWNrLiAgT3RoZXJ3aXNlIChUT1MgaXMgZmFsc2UpLCBUT1MgaXMgcG9wcGVkLgorICAgSWYgVE9TIGlzIHRydWUsIHNldHMgdGhlIGJ5dGVjb2RlIGNvdW50ZXIgdG8gKnRhcmdldCogYW5kIGxlYXZlcyBUT1Mgb24gdGhlCisgICBzdGFjay4gIE90aGVyd2lzZSAoVE9TIGlzIGZhbHNlKSwgVE9TIGlzIHBvcHBlZC4KIAogCiAuLiBvcGNvZGU6OiBKVU1QX0lGX0ZBTFNFX09SX1BPUCAodGFyZ2V0KQogCi0gICBJZiBUT1MgaXMgZmFsc2UsIHNldHMgdGhlIGJ5dGVjb2RlIGNvdW50ZXIgdG8gKnRhcmdldCogYW5kIGxlYXZlcwotICAgVE9TIG9uIHRoZSBzdGFjay4gIE90aGVyd2lzZSAoVE9TIGlzIHRydWUpLCBUT1MgaXMgcG9wcGVkLgorICAgSWYgVE9TIGlzIGZhbHNlLCBzZXRzIHRoZSBieXRlY29kZSBjb3VudGVyIHRvICp0YXJnZXQqIGFuZCBsZWF2ZXMgVE9TIG9uIHRoZQorICAgc3RhY2suICBPdGhlcndpc2UgKFRPUyBpcyB0cnVlKSwgVE9TIGlzIHBvcHBlZC4KIAogCiAuLiBvcGNvZGU6OiBKVU1QX0FCU09MVVRFICh0YXJnZXQpCkBAIC02NjAsMTAgKzc2NywxMCBAQAogCiAuLiBvcGNvZGU6OiBGT1JfSVRFUiAoZGVsdGEpCiAKLSAgIGBgVE9TYGAgaXMgYW4gOnRlcm06YGl0ZXJhdG9yYC4gIENhbGwgaXRzIDptZXRoOmB+aXRlcmF0b3IuX19uZXh0X19gIG1ldGhvZC4KLSAgIElmIHRoaXMgeWllbGRzIGEgbmV3IHZhbHVlLCBwdXNoIGl0IG9uIHRoZSBzdGFjayAobGVhdmluZyB0aGUgaXRlcmF0b3IgYmVsb3cKLSAgIGl0KS4gIElmIHRoZSBpdGVyYXRvciBpbmRpY2F0ZXMgaXQgaXMgZXhoYXVzdGVkIGBgVE9TYGAgaXMgcG9wcGVkLCBhbmQgdGhlCi0gICBieXRlIGNvZGUgY291bnRlciBpcyBpbmNyZW1lbnRlZCBieSAqZGVsdGEqLgorICAgVE9TIGlzIGFuIDp0ZXJtOmBpdGVyYXRvcmAuICBDYWxsIGl0cyA6bWV0aDpgfml0ZXJhdG9yLl9fbmV4dF9fYCBtZXRob2QuICBJZgorICAgdGhpcyB5aWVsZHMgYSBuZXcgdmFsdWUsIHB1c2ggaXQgb24gdGhlIHN0YWNrIChsZWF2aW5nIHRoZSBpdGVyYXRvciBiZWxvdworICAgaXQpLiAgSWYgdGhlIGl0ZXJhdG9yIGluZGljYXRlcyBpdCBpcyBleGhhdXN0ZWQgVE9TIGlzIHBvcHBlZCwgYW5kIHRoZSBieXRlCisgICBjb2RlIGNvdW50ZXIgaXMgaW5jcmVtZW50ZWQgYnkgKmRlbHRhKi4KIAogCiAuLiBvcGNvZGU6OiBMT0FEX0dMT0JBTCAobmFtZWkpCkBAIC02NzksMTkgKzc4NiwxOSBAQAogCiAuLiBvcGNvZGU6OiBTRVRVUF9FWENFUFQgKGRlbHRhKQogCi0gICBQdXNoZXMgYSB0cnkgYmxvY2sgZnJvbSBhIHRyeS1leGNlcHQgY2xhdXNlIG9udG8gdGhlIGJsb2NrIHN0YWNrLiAqZGVsdGEqIHBvaW50cwotICAgdG8gdGhlIGZpcnN0IGV4Y2VwdCBibG9jay4KKyAgIFB1c2hlcyBhIHRyeSBibG9jayBmcm9tIGEgdHJ5LWV4Y2VwdCBjbGF1c2Ugb250byB0aGUgYmxvY2sgc3RhY2suICpkZWx0YSoKKyAgIHBvaW50cyB0byB0aGUgZmlyc3QgZXhjZXB0IGJsb2NrLgogCiAKIC4uIG9wY29kZTo6IFNFVFVQX0ZJTkFMTFkgKGRlbHRhKQogCi0gICBQdXNoZXMgYSB0cnkgYmxvY2sgZnJvbSBhIHRyeS1leGNlcHQgY2xhdXNlIG9udG8gdGhlIGJsb2NrIHN0YWNrLiAqZGVsdGEqIHBvaW50cwotICAgdG8gdGhlIGZpbmFsbHkgYmxvY2suCisgICBQdXNoZXMgYSB0cnkgYmxvY2sgZnJvbSBhIHRyeS1leGNlcHQgY2xhdXNlIG9udG8gdGhlIGJsb2NrIHN0YWNrLiAqZGVsdGEqCisgICBwb2ludHMgdG8gdGhlIGZpbmFsbHkgYmxvY2suCiAKIC4uIG9wY29kZTo6IFNUT1JFX01BUAogCi0gICBTdG9yZSBhIGtleSBhbmQgdmFsdWUgcGFpciBpbiBhIGRpY3Rpb25hcnkuICBQb3BzIHRoZSBrZXkgYW5kIHZhbHVlIHdoaWxlIGxlYXZpbmcKLSAgIHRoZSBkaWN0aW9uYXJ5IG9uIHRoZSBzdGFjay4KKyAgIFN0b3JlIGEga2V5IGFuZCB2YWx1ZSBwYWlyIGluIGEgZGljdGlvbmFyeS4gIFBvcHMgdGhlIGtleSBhbmQgdmFsdWUgd2hpbGUKKyAgIGxlYXZpbmcgdGhlIGRpY3Rpb25hcnkgb24gdGhlIHN0YWNrLgogCiAuLiBvcGNvZGU6OiBMT0FEX0ZBU1QgKHZhcl9udW0pCiAKQEAgLTcxMSw4ICs4MTgsOCBAQAogLi4gb3Bjb2RlOjogTE9BRF9DTE9TVVJFIChpKQogCiAgICBQdXNoZXMgYSByZWZlcmVuY2UgdG8gdGhlIGNlbGwgY29udGFpbmVkIGluIHNsb3QgKmkqIG9mIHRoZSBjZWxsIGFuZCBmcmVlCi0gICB2YXJpYWJsZSBzdG9yYWdlLiAgVGhlIG5hbWUgb2YgdGhlIHZhcmlhYmxlIGlzICBgYGNvX2NlbGx2YXJzW2ldYGAgaWYgKmkqIGlzCi0gICBsZXNzIHRoYW4gdGhlIGxlbmd0aCBvZiAqY29fY2VsbHZhcnMqLiAgT3RoZXJ3aXNlIGl0IGlzICBgYGNvX2ZyZWV2YXJzW2kgLQorICAgdmFyaWFibGUgc3RvcmFnZS4gIFRoZSBuYW1lIG9mIHRoZSB2YXJpYWJsZSBpcyBgYGNvX2NlbGx2YXJzW2ldYGAgaWYgKmkqIGlzCisgICBsZXNzIHRoYW4gdGhlIGxlbmd0aCBvZiAqY29fY2VsbHZhcnMqLiAgT3RoZXJ3aXNlIGl0IGlzIGBgY29fZnJlZXZhcnNbaSAtCiAgICBsZW4oY29fY2VsbHZhcnMpXWBgLgogCiAKQEAgLTcyMiw2ICs4MjksMTMgQEAKICAgIFB1c2hlcyBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IHRoZSBjZWxsIGNvbnRhaW5zIG9uIHRoZSBzdGFjay4KIAogCisuLiBvcGNvZGU6OiBMT0FEX0NMQVNTREVSRUYgKGkpCisKKyAgIE11Y2ggbGlrZSA6b3Bjb2RlOmBMT0FEX0RFUkVGYCBidXQgZmlyc3QgY2hlY2tzIHRoZSBsb2NhbHMgZGljdGlvbmFyeSBiZWZvcmUKKyAgIGNvbnN1bHRpbmcgdGhlIGNlbGwuICBUaGlzIGlzIHVzZWQgZm9yIGxvYWRpbmcgZnJlZSB2YXJpYWJsZXMgaW4gY2xhc3MKKyAgIGJvZGllcy4KKworCiAuLiBvcGNvZGU6OiBTVE9SRV9ERVJFRiAoaSkKIAogICAgU3RvcmVzIFRPUyBpbnRvIHRoZSBjZWxsIGNvbnRhaW5lZCBpbiBzbG90ICppKiBvZiB0aGUgY2VsbCBhbmQgZnJlZSB2YXJpYWJsZQpAQCAtNzQ1LDExICs4NTksMTIgQEAKIAogICAgQ2FsbHMgYSBmdW5jdGlvbi4gIFRoZSBsb3cgYnl0ZSBvZiAqYXJnYyogaW5kaWNhdGVzIHRoZSBudW1iZXIgb2YgcG9zaXRpb25hbAogICAgcGFyYW1ldGVycywgdGhlIGhpZ2ggYnl0ZSB0aGUgbnVtYmVyIG9mIGtleXdvcmQgcGFyYW1ldGVycy4gT24gdGhlIHN0YWNrLCB0aGUKLSAgIG9wY29kZSBmaW5kcyB0aGUga2V5d29yZCBwYXJhbWV0ZXJzIGZpcnN0LiAgRm9yIGVhY2gga2V5d29yZCBhcmd1bWVudCwgdGhlIHZhbHVlCi0gICBpcyBvbiB0b3Agb2YgdGhlIGtleS4gIEJlbG93IHRoZSBrZXl3b3JkIHBhcmFtZXRlcnMsIHRoZSBwb3NpdGlvbmFsIHBhcmFtZXRlcnMKLSAgIGFyZSBvbiB0aGUgc3RhY2ssIHdpdGggdGhlIHJpZ2h0LW1vc3QgcGFyYW1ldGVyIG9uIHRvcC4gIEJlbG93IHRoZSBwYXJhbWV0ZXJzLAotICAgdGhlIGZ1bmN0aW9uIG9iamVjdCB0byBjYWxsIGlzIG9uIHRoZSBzdGFjay4gIFBvcHMgYWxsIGZ1bmN0aW9uIGFyZ3VtZW50cywgYW5kCi0gICB0aGUgZnVuY3Rpb24gaXRzZWxmIG9mZiB0aGUgc3RhY2ssIGFuZCBwdXNoZXMgdGhlIHJldHVybiB2YWx1ZS4KKyAgIG9wY29kZSBmaW5kcyB0aGUga2V5d29yZCBwYXJhbWV0ZXJzIGZpcnN0LiAgRm9yIGVhY2gga2V5d29yZCBhcmd1bWVudCwgdGhlCisgICB2YWx1ZSBpcyBvbiB0b3Agb2YgdGhlIGtleS4gIEJlbG93IHRoZSBrZXl3b3JkIHBhcmFtZXRlcnMsIHRoZSBwb3NpdGlvbmFsCisgICBwYXJhbWV0ZXJzIGFyZSBvbiB0aGUgc3RhY2ssIHdpdGggdGhlIHJpZ2h0LW1vc3QgcGFyYW1ldGVyIG9uIHRvcC4gIEJlbG93IHRoZQorICAgcGFyYW1ldGVycywgdGhlIGZ1bmN0aW9uIG9iamVjdCB0byBjYWxsIGlzIG9uIHRoZSBzdGFjay4gIFBvcHMgYWxsIGZ1bmN0aW9uCisgICBhcmd1bWVudHMsIGFuZCB0aGUgZnVuY3Rpb24gaXRzZWxmIG9mZiB0aGUgc3RhY2ssIGFuZCBwdXNoZXMgdGhlIHJldHVybgorICAgdmFsdWUuCiAKIAogLi4gb3Bjb2RlOjogTUFLRV9GVU5DVElPTiAoYXJnYykKQEAgLTc3Miw4ICs4ODcsOCBAQAogICAgQ3JlYXRlcyBhIG5ldyBmdW5jdGlvbiBvYmplY3QsIHNldHMgaXRzICpfX2Nsb3N1cmVfXyogc2xvdCwgYW5kIHB1c2hlcyBpdCBvbgogICAgdGhlIHN0YWNrLiAgVE9TIGlzIHRoZSA6dGVybTpgcXVhbGlmaWVkIG5hbWVgIG9mIHRoZSBmdW5jdGlvbiwgVE9TMSBpcyB0aGUKICAgIGNvZGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBmdW5jdGlvbiwgYW5kIFRPUzIgaXMgdGhlIHR1cGxlIGNvbnRhaW5pbmcgY2VsbHMgZm9yCi0gICB0aGUgY2xvc3VyZSdzIGZyZWUgdmFyaWFibGVzLiAgVGhlIGZ1bmN0aW9uIGFsc28gaGFzICphcmdjKiBkZWZhdWx0IHBhcmFtZXRlcnMsCi0gICB3aGljaCBhcmUgZm91bmQgYmVsb3cgdGhlIGNlbGxzLgorICAgdGhlIGNsb3N1cmUncyBmcmVlIHZhcmlhYmxlcy4gICphcmdjKiBpcyBpbnRlcnByZXRlZCBhcyBpbiBgYE1BS0VfRlVOQ1RJT05gYDsKKyAgIHRoZSBhbm5vdGF0aW9ucyBhbmQgZGVmYXVsdHMgYXJlIGFsc28gaW4gdGhlIHNhbWUgb3JkZXIgYmVsb3cgVE9TMi4KIAogCiAuLiBvcGNvZGU6OiBCVUlMRF9TTElDRSAoYXJnYykKQEAgLTc4OSwzNCArOTA0LDk0IEBACiAKICAgIFByZWZpeGVzIGFueSBvcGNvZGUgd2hpY2ggaGFzIGFuIGFyZ3VtZW50IHRvbyBiaWcgdG8gZml0IGludG8gdGhlIGRlZmF1bHQgdHdvCiAgICBieXRlcy4gICpleHQqIGhvbGRzIHR3byBhZGRpdGlvbmFsIGJ5dGVzIHdoaWNoLCB0YWtlbiB0b2dldGhlciB3aXRoIHRoZQotICAgc3Vic2VxdWVudCBvcGNvZGUncyBhcmd1bWVudCwgY29tcHJpc2UgYSBmb3VyLWJ5dGUgYXJndW1lbnQsICpleHQqIGJlaW5nIHRoZSB0d28KLSAgIG1vc3Qtc2lnbmlmaWNhbnQgYnl0ZXMuCisgICBzdWJzZXF1ZW50IG9wY29kZSdzIGFyZ3VtZW50LCBjb21wcmlzZSBhIGZvdXItYnl0ZSBhcmd1bWVudCwgKmV4dCogYmVpbmcgdGhlCisgICB0d28gbW9zdC1zaWduaWZpY2FudCBieXRlcy4KIAogCiAuLiBvcGNvZGU6OiBDQUxMX0ZVTkNUSU9OX1ZBUiAoYXJnYykKIAotICAgQ2FsbHMgYSBmdW5jdGlvbi4gKmFyZ2MqIGlzIGludGVycHJldGVkIGFzIGluIGBgQ0FMTF9GVU5DVElPTmBgLiBUaGUgdG9wIGVsZW1lbnQKLSAgIG9uIHRoZSBzdGFjayBjb250YWlucyB0aGUgdmFyaWFibGUgYXJndW1lbnQgbGlzdCwgZm9sbG93ZWQgYnkga2V5d29yZCBhbmQKLSAgIHBvc2l0aW9uYWwgYXJndW1lbnRzLgorICAgQ2FsbHMgYSBmdW5jdGlvbi4gKmFyZ2MqIGlzIGludGVycHJldGVkIGFzIGluIDpvcGNvZGU6YENBTExfRlVOQ1RJT05gLiBUaGUKKyAgIHRvcCBlbGVtZW50IG9uIHRoZSBzdGFjayBjb250YWlucyB0aGUgdmFyaWFibGUgYXJndW1lbnQgbGlzdCwgZm9sbG93ZWQgYnkKKyAgIGtleXdvcmQgYW5kIHBvc2l0aW9uYWwgYXJndW1lbnRzLgogCiAKIC4uIG9wY29kZTo6IENBTExfRlVOQ1RJT05fS1cgKGFyZ2MpCiAKLSAgIENhbGxzIGEgZnVuY3Rpb24uICphcmdjKiBpcyBpbnRlcnByZXRlZCBhcyBpbiBgYENBTExfRlVOQ1RJT05gYC4gVGhlIHRvcCBlbGVtZW50Ci0gICBvbiB0aGUgc3RhY2sgY29udGFpbnMgdGhlIGtleXdvcmQgYXJndW1lbnRzIGRpY3Rpb25hcnksICBmb2xsb3dlZCBieSBleHBsaWNpdAotICAga2V5d29yZCBhbmQgcG9zaXRpb25hbCBhcmd1bWVudHMuCisgICBDYWxscyBhIGZ1bmN0aW9uLiAqYXJnYyogaXMgaW50ZXJwcmV0ZWQgYXMgaW4gOm9wY29kZTpgQ0FMTF9GVU5DVElPTmAuIFRoZQorICAgdG9wIGVsZW1lbnQgb24gdGhlIHN0YWNrIGNvbnRhaW5zIHRoZSBrZXl3b3JkIGFyZ3VtZW50cyBkaWN0aW9uYXJ5LCBmb2xsb3dlZAorICAgYnkgZXhwbGljaXQga2V5d29yZCBhbmQgcG9zaXRpb25hbCBhcmd1bWVudHMuCiAKIAogLi4gb3Bjb2RlOjogQ0FMTF9GVU5DVElPTl9WQVJfS1cgKGFyZ2MpCiAKLSAgIENhbGxzIGEgZnVuY3Rpb24uICphcmdjKiBpcyBpbnRlcnByZXRlZCBhcyBpbiBgYENBTExfRlVOQ1RJT05gYC4gIFRoZSB0b3AKLSAgIGVsZW1lbnQgb24gdGhlIHN0YWNrIGNvbnRhaW5zIHRoZSBrZXl3b3JkIGFyZ3VtZW50cyBkaWN0aW9uYXJ5LCBmb2xsb3dlZCBieSB0aGUKLSAgIHZhcmlhYmxlLWFyZ3VtZW50cyB0dXBsZSwgZm9sbG93ZWQgYnkgZXhwbGljaXQga2V5d29yZCBhbmQgcG9zaXRpb25hbCBhcmd1bWVudHMuCisgICBDYWxscyBhIGZ1bmN0aW9uLiAqYXJnYyogaXMgaW50ZXJwcmV0ZWQgYXMgaW4gOm9wY29kZTpgQ0FMTF9GVU5DVElPTmAuICBUaGUKKyAgIHRvcCBlbGVtZW50IG9uIHRoZSBzdGFjayBjb250YWlucyB0aGUga2V5d29yZCBhcmd1bWVudHMgZGljdGlvbmFyeSwgZm9sbG93ZWQKKyAgIGJ5IHRoZSB2YXJpYWJsZS1hcmd1bWVudHMgdHVwbGUsIGZvbGxvd2VkIGJ5IGV4cGxpY2l0IGtleXdvcmQgYW5kIHBvc2l0aW9uYWwKKyAgIGFyZ3VtZW50cy4KIAogCiAuLiBvcGNvZGU6OiBIQVZFX0FSR1VNRU5UCiAKLSAgIFRoaXMgaXMgbm90IHJlYWxseSBhbiBvcGNvZGUuICBJdCBpZGVudGlmaWVzIHRoZSBkaXZpZGluZyBsaW5lIGJldHdlZW4gb3Bjb2RlcwotICAgd2hpY2ggZG9uJ3QgdGFrZSBhcmd1bWVudHMgYGA8IEhBVkVfQVJHVU1FTlRgYCBhbmQgdGhvc2Ugd2hpY2ggZG8gYGA+PQotICAgSEFWRV9BUkdVTUVOVGBgLgorICAgVGhpcyBpcyBub3QgcmVhbGx5IGFuIG9wY29kZS4gIEl0IGlkZW50aWZpZXMgdGhlIGRpdmlkaW5nIGxpbmUgYmV0d2VlbgorICAgb3Bjb2RlcyB3aGljaCBkb24ndCB0YWtlIGFyZ3VtZW50cyBgYDwgSEFWRV9BUkdVTUVOVGBgIGFuZCB0aG9zZSB3aGljaCBkbworICAgYGA+PSBIQVZFX0FSR1VNRU5UYGAuCiAKKy4uIF9vcGNvZGVfY29sbGVjdGlvbnM6CisKK09wY29kZSBjb2xsZWN0aW9ucworLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZXNlIGNvbGxlY3Rpb25zIGFyZSBwcm92aWRlZCBmb3IgYXV0b21hdGljIGludHJvc3BlY3Rpb24gb2YgYnl0ZWNvZGUKK2luc3RydWN0aW9uczoKKworLi4gZGF0YTo6IG9wbmFtZQorCisgICBTZXF1ZW5jZSBvZiBvcGVyYXRpb24gbmFtZXMsIGluZGV4YWJsZSB1c2luZyB0aGUgYnl0ZWNvZGUuCisKKworLi4gZGF0YTo6IG9wbWFwCisKKyAgIERpY3Rpb25hcnkgbWFwcGluZyBvcGVyYXRpb24gbmFtZXMgdG8gYnl0ZWNvZGVzLgorCisKKy4uIGRhdGE6OiBjbXBfb3AKKworICAgU2VxdWVuY2Ugb2YgYWxsIGNvbXBhcmUgb3BlcmF0aW9uIG5hbWVzLgorCisKKy4uIGRhdGE6OiBoYXNjb25zdAorCisgICBTZXF1ZW5jZSBvZiBieXRlY29kZXMgdGhhdCBoYXZlIGEgY29uc3RhbnQgcGFyYW1ldGVyLgorCisKKy4uIGRhdGE6OiBoYXNmcmVlCisKKyAgIFNlcXVlbmNlIG9mIGJ5dGVjb2RlcyB0aGF0IGFjY2VzcyBhIGZyZWUgdmFyaWFibGUgKG5vdGUgdGhhdCAnZnJlZScgaW4gdGhpcworICAgY29udGV4dCByZWZlcnMgdG8gbmFtZXMgaW4gdGhlIGN1cnJlbnQgc2NvcGUgdGhhdCBhcmUgcmVmZXJlbmNlZCBieSBpbm5lcgorICAgc2NvcGVzIG9yIG5hbWVzIGluIG91dGVyIHNjb3BlcyB0aGF0IGFyZSByZWZlcmVuY2VkIGZyb20gdGhpcyBzY29wZS4gIEl0IGRvZXMKKyAgICpub3QqIGluY2x1ZGUgcmVmZXJlbmNlcyB0byBnbG9iYWwgb3IgYnVpbHRpbiBzY29wZXMpLgorCisKKy4uIGRhdGE6OiBoYXNuYW1lCisKKyAgIFNlcXVlbmNlIG9mIGJ5dGVjb2RlcyB0aGF0IGFjY2VzcyBhbiBhdHRyaWJ1dGUgYnkgbmFtZS4KKworCisuLiBkYXRhOjogaGFzanJlbAorCisgICBTZXF1ZW5jZSBvZiBieXRlY29kZXMgdGhhdCBoYXZlIGEgcmVsYXRpdmUganVtcCB0YXJnZXQuCisKKworLi4gZGF0YTo6IGhhc2phYnMKKworICAgU2VxdWVuY2Ugb2YgYnl0ZWNvZGVzIHRoYXQgaGF2ZSBhbiBhYnNvbHV0ZSBqdW1wIHRhcmdldC4KKworCisuLiBkYXRhOjogaGFzbG9jYWwKKworICAgU2VxdWVuY2Ugb2YgYnl0ZWNvZGVzIHRoYXQgYWNjZXNzIGEgbG9jYWwgdmFyaWFibGUuCisKKworLi4gZGF0YTo6IGhhc2NvbXBhcmUKKworICAgU2VxdWVuY2Ugb2YgYnl0ZWNvZGVzIG9mIEJvb2xlYW4gb3BlcmF0aW9ucy4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2Rpc3RyaWJ1dGlvbi5yc3QgYi9Eb2MvbGlicmFyeS9kaXN0cmlidXRpb24ucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0OTU0ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2MvbGlicmFyeS9kaXN0cmlidXRpb24ucnN0CkBAIC0wLDAgKzEsMTQgQEAKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitTb2Z0d2FyZSBQYWNrYWdpbmcgYW5kIERpc3RyaWJ1dGlvbgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworVGhlc2UgbGlicmFyaWVzIGhlbHAgeW91IHdpdGggcHVibGlzaGluZyBhbmQgaW5zdGFsbGluZyBQeXRob24gc29mdHdhcmUuCitXaGlsZSB0aGVzZSBtb2R1bGVzIGFyZSBkZXNpZ25lZCB0byB3b3JrIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlCitgUHl0aG9uIFBhY2thZ2UgSW5kZXggPGh0dHBzOi8vcHlwaS5weXRob24ub3JnL3B5cGk+YF9fLCB0aGV5IGNhbiBhbHNvIGJlIHVzZWQKK3dpdGggYSBsb2NhbCBpbmRleCBzZXJ2ZXIsIG9yIHdpdGhvdXQgYW55IGluZGV4IHNlcnZlciBhdCBhbGwuCisKKy4uIHRvY3RyZWU6OgorCisgICBkaXN0dXRpbHMucnN0CisgICBlbnN1cmVwaXAucnN0CisgICB2ZW52LnJzdApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZGlzdHV0aWxzLnJzdCBiL0RvYy9saWJyYXJ5L2Rpc3R1dGlscy5yc3QKaW5kZXggNjY2NmE5Yi4uZTNkMTMxNCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZGlzdHV0aWxzLnJzdAorKysgYi9Eb2MvbGlicmFyeS9kaXN0dXRpbHMucnN0CkBAIC0xMiwxNCArMTIsMzEgQEAKIDEwMCUtcHVyZSBQeXRob24sIG9yIG1heSBiZSBleHRlbnNpb24gbW9kdWxlcyB3cml0dGVuIGluIEMsIG9yIG1heSBiZQogY29sbGVjdGlvbnMgb2YgUHl0aG9uIHBhY2thZ2VzIHdoaWNoIGluY2x1ZGUgbW9kdWxlcyBjb2RlZCBpbiBib3RoIFB5dGhvbiBhbmQgQy4KIAorTW9zdCBQeXRob24gdXNlcnMgd2lsbCAqbm90KiB3YW50IHRvIHVzZSB0aGlzIG1vZHVsZSBkaXJlY3RseSwgYnV0IGluc3RlYWQKK3VzZSB0aGUgY3Jvc3MtdmVyc2lvbiB0b29scyBtYWludGFpbmVkIGJ5IHRoZSBQeXRob24gUGFja2FnaW5nIEF1dGhvcml0eS4gSW4KK3BhcnRpY3VsYXIsCitgc2V0dXB0b29scyA8aHR0cHM6Ly9zZXR1cHRvb2xzLnB5cGEuaW8vZW4vbGF0ZXN0L3NldHVwdG9vbHMuaHRtbD5gX18gaXMgYW4KK2VuaGFuY2VkIGFsdGVybmF0aXZlIHRvIDptb2Q6YGRpc3R1dGlsc2AgdGhhdCBwcm92aWRlczoKIAotVXNlciBkb2N1bWVudGF0aW9uIGFuZCBBUEkgcmVmZXJlbmNlIGFyZSBwcm92aWRlZCBpbiBhbm90aGVyIGRvY3VtZW50OgorKiBzdXBwb3J0IGZvciBkZWNsYXJpbmcgcHJvamVjdCBkZXBlbmRlbmNpZXMKKyogYWRkaXRpb25hbCBtZWNoYW5pc21zIGZvciBjb25maWd1cmluZyB3aGljaCBmaWxlcyB0byBpbmNsdWRlIGluIHNvdXJjZQorICByZWxlYXNlcyAoaW5jbHVkaW5nIHBsdWdpbnMgZm9yIGludGVncmF0aW9uIHdpdGggdmVyc2lvbiBjb250cm9sIHN5c3RlbXMpCisqIHRoZSBhYmlsaXR5IHRvIGRlY2xhcmUgcHJvamVjdCAiZW50cnkgcG9pbnRzIiwgd2hpY2ggY2FuIGJlIHVzZWQgYXMgdGhlCisgIGJhc2lzIGZvciBhcHBsaWNhdGlvbiBwbHVnaW4gc3lzdGVtcworKiB0aGUgYWJpbGl0eSB0byBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlIFdpbmRvd3MgY29tbWFuZCBsaW5lIGV4ZWN1dGFibGVzIGF0CisgIGluc3RhbGxhdGlvbiB0aW1lIHJhdGhlciB0aGFuIG5lZWRpbmcgdG8gcHJlYnVpbGQgdGhlbQorKiBjb25zaXN0ZW50IGJlaGF2aW91ciBhY3Jvc3MgYWxsIHN1cHBvcnRlZCBQeXRob24gdmVyc2lvbnMKIAotLi4gc2VlYWxzbzo6CitUaGUgcmVjb21tZW5kZWQgYHBpcCA8aHR0cHM6Ly9waXAucHlwYS5pby8+YF9fIGluc3RhbGxlciBydW5zIGFsbAorYGBzZXR1cC5weWBgIHNjcmlwdHMgd2l0aCBgYHNldHVwdG9vbHNgYCwgZXZlbiBpZiB0aGUgc2NyaXB0IGl0c2VsZiBvbmx5CitpbXBvcnRzIGBgZGlzdHV0aWxzYGAuIFJlZmVyIHRvIHRoZQorYFB5dGhvbiBQYWNrYWdpbmcgVXNlciBHdWlkZSA8aHR0cHM6Ly9wYWNrYWdpbmcucHl0aG9uLm9yZz5gXyBmb3IgbW9yZQoraW5mb3JtYXRpb24uCiAKLSAgIDpyZWY6YGRpc3R1dGlscy1pbmRleGAKLSAgICAgIFRoZSBtYW51YWwgZm9yIGRldmVsb3BlcnMgYW5kIHBhY2thZ2VycyBvZiBQeXRob24gbW9kdWxlcy4gIFRoaXMgZGVzY3JpYmVzCi0gICAgICBob3cgdG8gcHJlcGFyZSA6bW9kOmBkaXN0dXRpbHNgXCAtYmFzZWQgcGFja2FnZXMgc28gdGhhdCB0aGV5IG1heSBiZQotICAgICAgZWFzaWx5IGluc3RhbGxlZCBpbnRvIGFuIGV4aXN0aW5nIFB5dGhvbiBpbnN0YWxsYXRpb24uICBJdCBhbHNvIGNvbnRhaW5zCi0gICAgICBpbnN0cnVjdGlvbnMgZm9yIGVuZC11c2VycyB3YW50aW5nIHRvIGluc3RhbGwgYSBkaXN0dXRpbHMtYmFzZWQgcGFja2FnZSwKLSAgICAgIDpyZWY6YGluc3RhbGwtaW5kZXhgLgorRm9yIHRoZSBiZW5lZml0cyBvZiBwYWNrYWdpbmcgdG9vbCBhdXRob3JzIGFuZCB1c2VycyBzZWVraW5nIGEgZGVlcGVyCit1bmRlcnN0YW5kaW5nIG9mIHRoZSBkZXRhaWxzIG9mIHRoZSBjdXJyZW50IHBhY2thZ2luZyBhbmQgZGlzdHJpYnV0aW9uCitzeXN0ZW0sIHRoZSBsZWdhY3kgOm1vZDpgZGlzdHV0aWxzYCBiYXNlZCB1c2VyIGRvY3VtZW50YXRpb24gYW5kIEFQSQorcmVmZXJlbmNlIHJlbWFpbiBhdmFpbGFibGU6CisKKyogOnJlZjpgaW5zdGFsbC1pbmRleGAKKyogOnJlZjpgZGlzdHV0aWxzLWluZGV4YApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZG9jdGVzdC5yc3QgYi9Eb2MvbGlicmFyeS9kb2N0ZXN0LnJzdAppbmRleCAyMjJjNzE5Li5lYTZlMWI1IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9kb2N0ZXN0LnJzdAorKysgYi9Eb2MvbGlicmFyeS9kb2N0ZXN0LnJzdApAQCAtMjc4LDYgKzI3OCwxMCBAQAogQW55IGNsYXNzZXMgZm91bmQgYXJlIHJlY3Vyc2l2ZWx5IHNlYXJjaGVkIHNpbWlsYXJseSwgdG8gdGVzdCBkb2NzdHJpbmdzIGluCiB0aGVpciBjb250YWluZWQgbWV0aG9kcyBhbmQgbmVzdGVkIGNsYXNzZXMuCiAKKy4uIGltcGwtZGV0YWlsOjoKKyAgIFByaW9yIHRvIHZlcnNpb24gMy40LCBleHRlbnNpb24gbW9kdWxlcyB3cml0dGVuIGluIEMgd2VyZSBub3QgZnVsbHkKKyAgIHNlYXJjaGVkIGJ5IGRvY3Rlc3QuCisKIAogLi4gX2RvY3Rlc3QtZmluZGluZy1leGFtcGxlczoKIApAQCAtNDk1LDcgKzQ5OSwxMSBAQAogQSBudW1iZXIgb2Ygb3B0aW9uIGZsYWdzIGNvbnRyb2wgdmFyaW91cyBhc3BlY3RzIG9mIGRvY3Rlc3QncyBiZWhhdmlvci4KIFN5bWJvbGljIG5hbWVzIGZvciB0aGUgZmxhZ3MgYXJlIHN1cHBsaWVkIGFzIG1vZHVsZSBjb25zdGFudHMsIHdoaWNoIGNhbiBiZQogb3InZWQgdG9nZXRoZXIgYW5kIHBhc3NlZCB0byB2YXJpb3VzIGZ1bmN0aW9ucy4gIFRoZSBuYW1lcyBjYW4gYWxzbyBiZSB1c2VkIGluCi06cmVmOmBkb2N0ZXN0IGRpcmVjdGl2ZXMgPGRvY3Rlc3QtZGlyZWN0aXZlcz5gLgorOnJlZjpgZG9jdGVzdCBkaXJlY3RpdmVzIDxkb2N0ZXN0LWRpcmVjdGl2ZXM+YCwgYW5kIG1heSBiZSBwYXNzZWQgdG8gdGhlCitkb2N0ZXN0IGNvbW1hbmQgbGluZSBpbnRlcmZhY2UgdmlhIHRoZSBgYC1vYGAgb3B0aW9uLgorCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKyAgIFRoZSBgYC1vYGAgY29tbWFuZCBsaW5lIG9wdGlvbi4KIAogVGhlIGZpcnN0IGdyb3VwIG9mIG9wdGlvbnMgZGVmaW5lIHRlc3Qgc2VtYW50aWNzLCBjb250cm9sbGluZyBhc3BlY3RzIG9mIGhvdwogZG9jdGVzdCBkZWNpZGVzIHdoZXRoZXIgYWN0dWFsIG91dHB1dCBtYXRjaGVzIGFuIGV4YW1wbGUncyBleHBlY3RlZCBvdXRwdXQ6CkBAIC02MzMsNiArNjQxLDE5IEBACiAgICB0aGUgb3V0cHV0IGlzIHN1cHByZXNzZWQuCiAKIAorLi4gZGF0YTo6IEZBSUxfRkFTVAorCisgICBXaGVuIHNwZWNpZmllZCwgZXhpdCBhZnRlciB0aGUgZmlyc3QgZmFpbGluZyBleGFtcGxlIGFuZCBkb24ndCBhdHRlbXB0IHRvIHJ1bgorICAgdGhlIHJlbWFpbmluZyBleGFtcGxlcy4gVGh1cywgdGhlIG51bWJlciBvZiBmYWlsdXJlcyByZXBvcnRlZCB3aWxsIGJlIGF0IG1vc3QKKyAgIDEuICBUaGlzIGZsYWcgbWF5IGJlIHVzZWZ1bCBkdXJpbmcgZGVidWdnaW5nLCBzaW5jZSBleGFtcGxlcyBhZnRlciB0aGUgZmlyc3QKKyAgIGZhaWx1cmUgd29uJ3QgZXZlbiBwcm9kdWNlIGRlYnVnZ2luZyBvdXRwdXQuCisKKyAgIFRoZSBkb2N0ZXN0IGNvbW1hbmQgbGluZSBhY2NlcHRzIHRoZSBvcHRpb24gYGAtZmBgIGFzIGEgc2hvcnRoYW5kIGZvciBgYC1vCisgICBGQUlMX0ZBU1RgYC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogLi4gZGF0YTo6IFJFUE9SVElOR19GTEFHUwogCiAgICBBIGJpdG1hc2sgb3InaW5nIHRvZ2V0aGVyIGFsbCB0aGUgcmVwb3J0aW5nIGZsYWdzIGFib3ZlLgpAQCAtODQ0LDggKzg2NSw4IEBACiAgICBub3RoaW5nIGF0IHRoZSBlbmQuICBJbiB2ZXJib3NlIG1vZGUsIHRoZSBzdW1tYXJ5IGlzIGRldGFpbGVkLCBlbHNlIHRoZSBzdW1tYXJ5CiAgICBpcyB2ZXJ5IGJyaWVmIChpbiBmYWN0LCBlbXB0eSBpZiBhbGwgdGVzdHMgcGFzc2VkKS4KIAotICAgT3B0aW9uYWwgYXJndW1lbnQgKm9wdGlvbmZsYWdzKiBvcidzIHRvZ2V0aGVyIG9wdGlvbiBmbGFncy4gIFNlZSBzZWN0aW9uCi0gICA6cmVmOmBkb2N0ZXN0LW9wdGlvbnNgLgorICAgT3B0aW9uYWwgYXJndW1lbnQgKm9wdGlvbmZsYWdzKiAoZGVmYXVsdCB2YWx1ZSAwKSB0YWtlcyB0aGUgYml0d2lzZS1vciBvZgorICAgb3B0aW9uIGZsYWdzLiAgU2VlIHNlY3Rpb24gOnJlZjpgZG9jdGVzdC1vcHRpb25zYC4KIAogICAgT3B0aW9uYWwgYXJndW1lbnQgKnJhaXNlX29uX2Vycm9yKiBkZWZhdWx0cyB0byBmYWxzZS4gIElmIHRydWUsIGFuIGV4Y2VwdGlvbiBpcwogICAgcmFpc2VkIHVwb24gdGhlIGZpcnN0IGZhaWx1cmUgb3IgdW5leHBlY3RlZCBleGNlcHRpb24gaW4gYW4gZXhhbXBsZS4gIFRoaXMKQEAgLTg5MywxNSArOTE0LDEwIEBACiAgICBhYm92ZSwgZXhjZXB0IHRoYXQgKmdsb2JzKiBkZWZhdWx0cyB0byBgYG0uX19kaWN0X19gYC4KIAogCi1UaGVyZSdzIGFsc28gYSBmdW5jdGlvbiB0byBydW4gdGhlIGRvY3Rlc3RzIGFzc29jaWF0ZWQgd2l0aCBhIHNpbmdsZSBvYmplY3QuCi1UaGlzIGZ1bmN0aW9uIGlzIHByb3ZpZGVkIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiAgVGhlcmUgYXJlIG5vIHBsYW5zIHRvCi1kZXByZWNhdGUgaXQsIGJ1dCBpdCdzIHJhcmVseSB1c2VmdWw6Ci0KLQogLi4gZnVuY3Rpb246OiBydW5fZG9jc3RyaW5nX2V4YW1wbGVzKGYsIGdsb2JzLCB2ZXJib3NlPUZhbHNlLCBuYW1lPSJOb05hbWUiLCBjb21waWxlZmxhZ3M9Tm9uZSwgb3B0aW9uZmxhZ3M9MCkKIAotICAgVGVzdCBleGFtcGxlcyBhc3NvY2lhdGVkIHdpdGggb2JqZWN0ICpmKjsgZm9yIGV4YW1wbGUsICpmKiBtYXkgYmUgYSBtb2R1bGUsCi0gICBmdW5jdGlvbiwgb3IgY2xhc3Mgb2JqZWN0LgorICAgVGVzdCBleGFtcGxlcyBhc3NvY2lhdGVkIHdpdGggb2JqZWN0ICpmKjsgZm9yIGV4YW1wbGUsICpmKiBtYXkgYmUgYSBzdHJpbmcsCisgICBhIG1vZHVsZSwgYSBmdW5jdGlvbiwgb3IgYSBjbGFzcyBvYmplY3QuCiAKICAgIEEgc2hhbGxvdyBjb3B5IG9mIGRpY3Rpb25hcnkgYXJndW1lbnQgKmdsb2JzKiBpcyB1c2VkIGZvciB0aGUgZXhlY3V0aW9uIGNvbnRleHQuCiAKQEAgLTEwNzYsNyArMTA5Miw3IEBACiAKICAgIFNldCB0aGUgOm1vZDpgZG9jdGVzdGAgcmVwb3J0aW5nIGZsYWdzIHRvIHVzZS4KIAotICAgQXJndW1lbnQgKmZsYWdzKiBvcidzIHRvZ2V0aGVyIG9wdGlvbiBmbGFncy4gIFNlZSBzZWN0aW9uCisgICBBcmd1bWVudCAqZmxhZ3MqIHRha2VzIHRoZSBiaXR3aXNlLW9yIG9mIG9wdGlvbiBmbGFncy4gIFNlZSBzZWN0aW9uCiAgICA6cmVmOmBkb2N0ZXN0LW9wdGlvbnNgLiAgT25seSAicmVwb3J0aW5nIGZsYWdzIiBjYW4gYmUgdXNlZC4KIAogICAgVGhpcyBpcyBhIG1vZHVsZS1nbG9iYWwgc2V0dGluZywgYW5kIGFmZmVjdHMgYWxsIGZ1dHVyZSBkb2N0ZXN0cyBydW4gYnkgbW9kdWxlCkBAIC0xMjY5LDkgKzEyODUsOCBAQAogCiAgICBBIHByb2Nlc3NpbmcgY2xhc3MgdXNlZCB0byBleHRyYWN0IHRoZSA6Y2xhc3M6YERvY1Rlc3RgXCBzIHRoYXQgYXJlIHJlbGV2YW50IHRvCiAgICBhIGdpdmVuIG9iamVjdCwgZnJvbSBpdHMgZG9jc3RyaW5nIGFuZCB0aGUgZG9jc3RyaW5ncyBvZiBpdHMgY29udGFpbmVkIG9iamVjdHMuCi0gICA6Y2xhc3M6YERvY1Rlc3RgXCBzIGNhbiBjdXJyZW50bHkgYmUgZXh0cmFjdGVkIGZyb20gdGhlIGZvbGxvd2luZyBvYmplY3QgdHlwZXM6Ci0gICBtb2R1bGVzLCBmdW5jdGlvbnMsIGNsYXNzZXMsIG1ldGhvZHMsIHN0YXRpY21ldGhvZHMsIGNsYXNzbWV0aG9kcywgYW5kCi0gICBwcm9wZXJ0aWVzLgorICAgOmNsYXNzOmBEb2NUZXN0YFwgcyBjYW4gYmUgZXh0cmFjdGVkIGZyb20gbW9kdWxlcywgY2xhc3NlcywgZnVuY3Rpb25zLAorICAgbWV0aG9kcywgc3RhdGljbWV0aG9kcywgY2xhc3NtZXRob2RzLCBhbmQgcHJvcGVydGllcy4KIAogICAgVGhlIG9wdGlvbmFsIGFyZ3VtZW50ICp2ZXJib3NlKiBjYW4gYmUgdXNlZCB0byBkaXNwbGF5IHRoZSBvYmplY3RzIHNlYXJjaGVkIGJ5CiAgICB0aGUgZmluZGVyLiAgSXQgZGVmYXVsdHMgdG8gYGBGYWxzZWBgIChubyBvdXRwdXQpLgpAQCAtMTgwMSw2ICsxODE2LDI3IEBACiAqIERlZmluZSBhIGBgX190ZXN0X19gYCBkaWN0aW9uYXJ5IG1hcHBpbmcgZnJvbSByZWdyZXNzaW9uIHRlc3QgdG9waWNzIHRvCiAgIGRvY3N0cmluZ3MgY29udGFpbmluZyB0ZXN0IGNhc2VzLgogCitXaGVuIHlvdSBoYXZlIHBsYWNlZCB5b3VyIHRlc3RzIGluIGEgbW9kdWxlLCB0aGUgbW9kdWxlIGNhbiBpdHNlbGYgYmUgdGhlIHRlc3QKK3J1bm5lci4gIFdoZW4gYSB0ZXN0IGZhaWxzLCB5b3UgY2FuIGFycmFuZ2UgZm9yIHlvdXIgdGVzdCBydW5uZXIgdG8gcmUtcnVuIG9ubHkKK3RoZSBmYWlsaW5nIGRvY3Rlc3Qgd2hpbGUgeW91IGRlYnVnIHRoZSBwcm9ibGVtLiAgSGVyZSBpcyBhIG1pbmltYWwgZXhhbXBsZSBvZgorc3VjaCBhIHRlc3QgcnVubmVyOjoKKworICAgIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgICAgIGltcG9ydCBkb2N0ZXN0CisgICAgICAgIGZsYWdzID0gZG9jdGVzdC5SRVBPUlRfTkRJRkZ8ZG9jdGVzdC5GQUlMX0ZBU1QKKyAgICAgICAgaWYgbGVuKHN5cy5hcmd2KSA+IDE6CisgICAgICAgICAgICBuYW1lID0gc3lzLmFyZ3ZbMV0KKyAgICAgICAgICAgIGlmIG5hbWUgaW4gZ2xvYmFscygpOgorICAgICAgICAgICAgICAgIG9iaiA9IGdsb2JhbHMoKVtuYW1lXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBvYmogPSBfX3Rlc3RfX1tuYW1lXQorICAgICAgICAgICAgZG9jdGVzdC5ydW5fZG9jc3RyaW5nX2V4YW1wbGVzKG9iaiwgZ2xvYmFscygpLCBuYW1lPW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uZmxhZ3M9ZmxhZ3MpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmYWlsLCB0b3RhbCA9IGRvY3Rlc3QudGVzdG1vZChvcHRpb25mbGFncz1mbGFncykKKyAgICAgICAgICAgIHByaW50KCJ7fSBmYWlsdXJlcyBvdXQgb2Yge30gdGVzdHMiLmZvcm1hdChmYWlsLCB0b3RhbCkpCisKKwogLi4gcnVicmljOjogRm9vdG5vdGVzCiAKIC4uIFsjXSBFeGFtcGxlcyBjb250YWluaW5nIGJvdGggZXhwZWN0ZWQgb3V0cHV0IGFuZCBhbiBleGNlcHRpb24gYXJlIG5vdCBzdXBwb3J0ZWQuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9lbWFpbC1leGFtcGxlcy5yc3QgYi9Eb2MvbGlicmFyeS9lbWFpbC1leGFtcGxlcy5yc3QKaW5kZXggMzJjZWNmMy4uY2JiY2I3OCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZW1haWwtZXhhbXBsZXMucnN0CisrKyBiL0RvYy9saWJyYXJ5L2VtYWlsLWV4YW1wbGVzLnJzdApAQCAtNDAsNiArNDAsMzYgQEAKIC4uIGxpdGVyYWxpbmNsdWRlOjogLi4vaW5jbHVkZXMvZW1haWwtYWx0ZXJuYXRpdmUucHkKIAogCisuLiBfZW1haWwtY29udGVudG1hbmFnZXItYXBpLWV4YW1wbGVzOgorCitFeGFtcGxlcyB1c2luZyB0aGUgUHJvdmlzaW9uYWwgQVBJCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CitIZXJlIGlzIGEgcmV3b3JraW5nIG9mIHRoZSBsYXN0IGV4YW1wbGUgdXNpbmcgdGhlIHByb3Zpc2lvbmFsIEFQSS4gIFRvIG1ha2UKK3RoaW5ncyBhIGJpdCBtb3JlIGludGVyZXN0aW5nLCB3ZSBpbmNsdWRlIGEgcmVsYXRlZCBpbWFnZSBpbiB0aGUgaHRtbCBwYXJ0LCBhbmQKK3dlIHNhdmUgYSBjb3B5IG9mIHdoYXQgd2UgYXJlIGdvaW5nIHRvIHNlbmQgdG8gZGlzaywgYXMgd2VsbCBhcyBzZW5kaW5nIGl0LgorCitUaGlzIGV4YW1wbGUgYWxzbyBzaG93cyBob3cgZWFzeSBpdCBpcyB0byBpbmNsdWRlIG5vbi1BU0NJSSwgYW5kIHNpbXBsaWZpZXMgdGhlCitzZW5kaW5nIG9mIHRoZSBtZXNzYWdlIHVzaW5nIHRoZSA6bWV0aDpgLnNlbmRfbWVzc2FnZWAgbWV0aG9kIG9mIHRoZQorOm1vZDpgc210cGxpYmAgbW9kdWxlLgorCisuLiBsaXRlcmFsaW5jbHVkZTo6IC4uL2luY2x1ZGVzL2VtYWlsLWFsdGVybmF0aXZlLW5ldy1hcGkucHkKKworSWYgd2Ugd2VyZSBpbnN0ZWFkIHNlbnQgdGhlIG1lc3NhZ2UgZnJvbSB0aGUgbGFzdCBleGFtcGxlLCBoZXJlIGlzIG9uZQord2F5IHdlIGNvdWxkIHByb2Nlc3MgaXQ6CisKKy4uIGxpdGVyYWxpbmNsdWRlOjogLi4vaW5jbHVkZXMvZW1haWwtcmVhZC1hbHRlcm5hdGl2ZS1uZXctYXBpLnB5CisKK1VwIHRvIHRoZSBwcm9tcHQsIHRoZSBvdXRwdXQgZnJvbSB0aGUgYWJvdmUgaXM6OgorCisgICAgVG86IFBlbmVsb3BlIFB1c3N5Y2F0IDwicGVuZWxvcGVAZXhhbXBsZS5jb20iPiwgRmFicmV0dGUgUHVzc3ljYXQgPCJmYWJyZXR0ZUBleGFtcGxlLmNvbSI+CisgICAgRnJvbTogUGVww6kgTGUgUGV3IDxwZXBlQGV4YW1wbGUuY29tPgorICAgIFN1YmplY3Q6IEF5b25zIGFzcGVyZ2VzIHBvdXIgbGUgZMOpamV1bmVyCisKKyAgICBTYWx1dCEKKworICAgIENlbGEgcmVzc2VtYmxlIMOgIHVuIGV4Y2VsbGVudCByZWNpcGllWzFdIGTDqWpldW5lci4KKworCiAuLiBydWJyaWM6OiBGb290bm90ZXMKIAogLi4gWzFdIFRoYW5rcyB0byBNYXR0aGV3IERpeG9uIENvd2xlcyBmb3IgdGhlIG9yaWdpbmFsIGluc3BpcmF0aW9uIGFuZCBleGFtcGxlcy4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2VtYWlsLmNoYXJzZXQucnN0IGIvRG9jL2xpYnJhcnkvZW1haWwuY2hhcnNldC5yc3QKaW5kZXggMTlhNjk1My4uODBlZjNkNiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZW1haWwuY2hhcnNldC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZW1haWwuY2hhcnNldC5yc3QKQEAgLTIzNCw1ICsyMzQsNSBAQAogCiAgICAqY2hhcnNldCogaXMgdGhlIGNhbm9uaWNhbCBuYW1lIG9mIGEgY2hhcmFjdGVyIHNldC4gKmNvZGVjbmFtZSogaXMgdGhlIG5hbWUgb2YgYQogICAgUHl0aG9uIGNvZGVjLCBhcyBhcHByb3ByaWF0ZSBmb3IgdGhlIHNlY29uZCBhcmd1bWVudCB0byB0aGUgOmNsYXNzOmBzdHJgJ3MKLSAgIDptZXRoOmB+c3RyLmVuY29kZWAgbWV0aG9kCisgICA6bWV0aDpgfnN0ci5lbmNvZGVgIG1ldGhvZC4KIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZW1haWwuY29udGVudG1hbmFnZXIucnN0IGIvRG9jL2xpYnJhcnkvZW1haWwuY29udGVudG1hbmFnZXIucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1M2QzNGIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2MvbGlicmFyeS9lbWFpbC5jb250ZW50bWFuYWdlci5yc3QKQEAgLTAsMCArMSw0MzQgQEAKKzptb2Q6YGVtYWlsLmNvbnRlbnRtYW5hZ2VyYDogTWFuYWdpbmcgTUlNRSBDb250ZW50CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisuLiBtb2R1bGU6OiBlbWFpbC5jb250ZW50bWFuYWdlcgorICAgOnN5bm9wc2lzOiBTdG9yaW5nIGFuZCBSZXRyaWV2aW5nIENvbnRlbnQgZnJvbSBNSU1FIFBhcnRzCisKKy4uIG1vZHVsZWF1dGhvcjo6IFIuIERhdmlkIE11cnJheSA8cmRtdXJyYXlAYml0ZGFuY2UuY29tPgorLi4gc2VjdGlvbmF1dGhvcjo6IFIuIERhdmlkIE11cnJheSA8cmRtdXJyYXlAYml0ZGFuY2UuY29tPgorCisKKy4uIG5vdGU6OgorCisgICBUaGUgY29udGVudG1hbmFnZXIgbW9kdWxlIGhhcyBiZWVuIGluY2x1ZGVkIGluIHRoZSBzdGFuZGFyZCBsaWJyYXJ5IG9uIGEKKyAgIDp0ZXJtOmBwcm92aXNpb25hbCBiYXNpcyA8cHJvdmlzaW9uYWwgcGFja2FnZT5gLiBCYWNrd2FyZHMgaW5jb21wYXRpYmxlCisgICBjaGFuZ2VzICh1cCB0byBhbmQgaW5jbHVkaW5nIHJlbW92YWwgb2YgdGhlIG1vZHVsZSkgbWF5IG9jY3VyIGlmIGRlZW1lZAorICAgbmVjZXNzYXJ5IGJ5IHRoZSBjb3JlIGRldmVsb3BlcnMuCisKKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorICAgYXMgYSA6dGVybTpgcHJvdmlzaW9uYWwgbW9kdWxlIDxwcm92aXNpb25hbCBwYWNrYWdlPmAuCisKK1RoZSA6bW9kOmB+ZW1haWwubWVzc2FnZWAgbW9kdWxlIHByb3ZpZGVzIGEgY2xhc3MgdGhhdCBjYW4gcmVwcmVzZW50IGFuCithcmJpdHJhcnkgZW1haWwgbWVzc2FnZS4gIFRoYXQgYmFzaWMgbWVzc2FnZSBtb2RlbCBoYXMgYSB1c2VmdWwgYW5kIGZsZXhpYmxlCitBUEksIGJ1dCBpdCBwcm92aWRlcyBvbmx5IGEgbG93ZXItbGV2ZWwgQVBJIGZvciBpbnRlcmFjdGluZyB3aXRoIHRoZSBnZW5lcmljCitwYXJ0cyBvZiBhIG1lc3NhZ2UgKHRoZSBoZWFkZXJzLCBnZW5lcmljIGhlYWRlciBwYXJhbWV0ZXJzLCBhbmQgdGhlIHBheWxvYWQsCit3aGljaCBtYXkgYmUgYSBsaXN0IG9mIHN1Yi1wYXJ0cykuICBUaGlzIG1vZHVsZSBwcm92aWRlcyBjbGFzc2VzIGFuZCB0b29scwordGhhdCBwcm92aWRlIGFuIGVuaGFuY2VkIGFuZCBleHRlbnNpYmxlIEFQSSBmb3IgZGVhbGluZyB3aXRoIHZhcmlvdXMgc3BlY2lmaWMKK3R5cGVzIG9mIGNvbnRlbnQsIGluY2x1ZGluZyB0aGUgYWJpbGl0eSB0byByZXRyaWV2ZSB0aGUgY29udGVudCBvZiB0aGUgbWVzc2FnZQorYXMgYSBzcGVjaWFsaXplZCBvYmplY3QgdHlwZSByYXRoZXIgdGhhbiBhcyBhIHNpbXBsZSBieXRlcyBvYmplY3QuICBUaGUgbW9kdWxlCithdXRvbWF0aWNhbGx5IHRha2VzIGNhcmUgb2YgdGhlIFJGQy1zcGVjaWZpZWQgTUlNRSBkZXRhaWxzIChyZXF1aXJlZCBoZWFkZXJzCithbmQgcGFyYW1ldGVycywgZXRjLikgZm9yIHRoZSBjZXJ0YWluIGNvbW1vbiBjb250ZW50IHR5cGVzIGNvbnRlbnQgcHJvcGVydGllcywKK2FuZCBzdXBwb3J0IGZvciBhZGRpdGlvbmFsIHR5cGVzIGNhbiBiZSBhZGRlZCBieSBhbiBhcHBsaWNhdGlvbiB1c2luZyB0aGUKK2V4dGVuc2lvbiBtZWNoYW5pc21zLgorCitUaGlzIG1vZHVsZSBkZWZpbmVzIHRoZSBlcG9ueW1vdXMgIkNvbnRlbnQgTWFuYWdlciIgY2xhc3Nlcy4gIFRoZSBiYXNlCis6Y2xhc3M6YC5Db250ZW50TWFuYWdlcmAgY2xhc3MgZGVmaW5lcyBhbiBBUEkgZm9yIHJlZ2lzdGVyaW5nIGNvbnRlbnQKK21hbmFnZW1lbnQgZnVuY3Rpb25zIHdoaWNoIGV4dHJhY3QgZGF0YSBmcm9tIGBgTWVzc2FnZWBgIG9iamVjdHMgb3IgaW5zZXJ0IGRhdGEKK2FuZCBoZWFkZXJzIGludG8gYGBNZXNzYWdlYGAgb2JqZWN0cywgdGh1cyBwcm92aWRpbmcgYSB3YXkgb2YgY29udmVydGluZworYmV0d2VlbiBgYE1lc3NhZ2VgYCBvYmplY3RzIGNvbnRhaW5pbmcgZGF0YSBhbmQgb3RoZXIgcmVwcmVzZW50YXRpb25zIG9mIHRoYXQKK2RhdGEgKFB5dGhvbiBkYXRhIHR5cGVzLCBzcGVjaWFsaXplZCBQeXRob24gb2JqZWN0cywgZXh0ZXJuYWwgZmlsZXMsIGV0YykuICBUaGUKK21vZHVsZSBhbHNvIGRlZmluZXMgb25lIGNvbmNyZXRlIGNvbnRlbnQgbWFuYWdlcjogOmRhdGE6YHJhd19kYXRhX21hbmFnZXJgCitjb252ZXJ0cyBiZXR3ZWVuIE1JTUUgY29udGVudCB0eXBlcyBhbmQgYGBzdHJgYCBvciBgYGJ5dGVzYGAgZGF0YS4gIEl0IGFsc28KK3Byb3ZpZGVzIGEgY29udmVuaWVudCBBUEkgZm9yIG1hbmFnaW5nIHRoZSBNSU1FIHBhcmFtZXRlcnMgd2hlbiBpbnNlcnRpbmcKK2NvbnRlbnQgaW50byBgYE1lc3NhZ2VgYFwgcy4gIEl0IGFsc28gaGFuZGxlcyBpbnNlcnRpbmcgYW5kIGV4dHJhY3RpbmcKK2BgTWVzc2FnZWBgIG9iamVjdHMgd2hlbiBkZWFsaW5nIHdpdGggdGhlIGBgbWVzc2FnZS9yZmM4MjJgYCBjb250ZW50IHR5cGUuCisKK0Fub3RoZXIgcGFydCBvZiB0aGUgZW5oYW5jZWQgaW50ZXJmYWNlIGlzIHN1YmNsYXNzZXMgb2YKKzpjbGFzczpgfmVtYWlsLm1lc3NhZ2UuTWVzc2FnZWAgdGhhdCBwcm92aWRlIG5ldyBjb252ZW5pZW5jZSBBUEkgZnVuY3Rpb25zLAoraW5jbHVkaW5nIGNvbnZlbmllbmNlIG1ldGhvZHMgZm9yIGNhbGxpbmcgdGhlIENvbnRlbnQgTWFuYWdlcnMgZGVyaXZlZCBmcm9tCit0aGlzIG1vZHVsZS4KKworLi4gbm90ZTo6CisKKyAgIEFsdGhvdWdoIDpjbGFzczpgLkVtYWlsTWVzc2FnZWAgYW5kIDpjbGFzczpgLk1JTUVQYXJ0YCBhcmUgY3VycmVudGx5CisgICBkb2N1bWVudGVkIGluIHRoaXMgbW9kdWxlIGJlY2F1c2Ugb2YgdGhlIHByb3Zpc2lvbmFsIG5hdHVyZSBvZiB0aGUgY29kZSwgdGhlCisgICBpbXBsZW1lbnRhdGlvbiBsaXZlcyBpbiB0aGUgOm1vZDpgZW1haWwubWVzc2FnZWAgbW9kdWxlLgorCisuLiBjdXJyZW50bW9kdWxlOjogZW1haWwubWVzc2FnZQorCisuLiBjbGFzczo6IEVtYWlsTWVzc2FnZShwb2xpY3k9ZGVmYXVsdCkKKworICAgSWYgKnBvbGljeSogaXMgc3BlY2lmaWVkIChpdCBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIGEgOm1vZDpgfmVtYWlsLnBvbGljeWAKKyAgIGNsYXNzKSB1c2UgdGhlIHJ1bGVzIGl0IHNwZWNpZmllcyB0byB1ZHBhdGUgYW5kIHNlcmlhbGl6ZSB0aGUgcmVwcmVzZW50YXRpb24KKyAgIG9mIHRoZSBtZXNzYWdlLiAgSWYgKnBvbGljeSogaXMgbm90IHNldCwgdXNlIHRoZQorICAgOmNsYXNzOmB+ZW1haWwucG9saWN5LmRlZmF1bHRgIHBvbGljeSwgd2hpY2ggZm9sbG93cyB0aGUgcnVsZXMgb2YgdGhlIGVtYWlsCisgICBSRkNzIGV4Y2VwdCBmb3IgbGluZSBlbmRpbmdzIChpbnN0ZWFkIG9mIHRoZSBSRkMgbWFuZGF0ZWQgYGBcclxuYGAsIGl0IHVzZXMKKyAgIHRoZSBQeXRob24gc3RhbmRhcmQgYGBcbmBgIGxpbmUgZW5kaW5ncykuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWUgdGhlCisgICA6bW9kOmB+ZW1haWwucG9saWN5YCBkb2N1bWVudGF0aW9uLgorCisgICBUaGlzIGNsYXNzIGlzIGEgc3ViY2xhc3Mgb2YgOmNsYXNzOmB+ZW1haWwubWVzc2FnZS5NZXNzYWdlYC4gIEl0IGFkZHMKKyAgIHRoZSBmb2xsb3dpbmcgbWV0aG9kczoKKworCisgICAuLiBtZXRob2Q6OiBpc19hdHRhY2htZW50CisKKyAgICAgIFJldHVybiBgYFRydWVgYCBpZiB0aGVyZSBpcyBhIDptYWlsaGVhZGVyOmBDb250ZW50LURpc3Bvc2l0aW9uYCBoZWFkZXIKKyAgICAgIGFuZCBpdHMgKGNhc2UgaW5zZW5zaXRpdmUpIHZhbHVlIGlzIGBgYXR0YWNobWVudGBgLCBgYEZhbHNlYGAgb3RoZXJ3aXNlLgorCisgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNC4yCisgICAgICAgICBpc19hdHRhY2htZW50IGlzIG5vdyBhIG1ldGhvZCBpbnN0ZWFkIG9mIGEgcHJvcGVydHksIGZvciBjb25zaXN0ZW5jeQorICAgICAgICAgd2l0aCA6bWV0aDpgfmVtYWlsLm1lc3NhZ2UuTWVzc2FnZS5pc19tdWx0aXBhcnRgLgorCisKKyAgIC4uIG1ldGhvZDo6IGdldF9ib2R5KHByZWZlcmVuY2VsaXN0PSgncmVsYXRlZCcsICdodG1sJywgJ3BsYWluJykpCisKKyAgICAgIFJldHVybiB0aGUgTUlNRSBwYXJ0IHRoYXQgaXMgdGhlIGJlc3QgY2FuZGlkYXRlIHRvIGJlIHRoZSAiYm9keSIgb2YgdGhlCisgICAgICBtZXNzYWdlLgorCisgICAgICAqcHJlZmVyZW5jZWxpc3QqIG11c3QgYmUgYSBzZXF1ZW5jZSBvZiBzdHJpbmdzIGZyb20gdGhlIHNldCBgYHJlbGF0ZWRgYCwKKyAgICAgIGBgaHRtbGBgLCBhbmQgYGBwbGFpbmBgLCBhbmQgaW5kaWNhdGVzIHRoZSBvcmRlciBvZiBwcmVmZXJlbmNlIGZvciB0aGUKKyAgICAgIGNvbnRlbnQgdHlwZSBvZiB0aGUgcGFydCByZXR1cm5lZC4KKworICAgICAgU3RhcnQgbG9va2luZyBmb3IgY2FuZGlkYXRlIG1hdGNoZXMgd2l0aCB0aGUgb2JqZWN0IG9uIHdoaWNoIHRoZQorICAgICAgYGBnZXRfYm9keWBgIG1ldGhvZCBpcyBjYWxsZWQuCisKKyAgICAgIElmIGBgcmVsYXRlZGBgIGlzIG5vdCBpbmNsdWRlZCBpbiAqcHJlZmVyZW5jZWxpc3QqLCBjb25zaWRlciB0aGUgcm9vdAorICAgICAgcGFydCAob3Igc3VicGFydCBvZiB0aGUgcm9vdCBwYXJ0KSBvZiBhbnkgcmVsYXRlZCBlbmNvdW50ZXJlZCBhcyBhCisgICAgICBjYW5kaWRhdGUgaWYgdGhlIChzdWItKXBhcnQgbWF0Y2hlcyBhIHByZWZlcmVuY2UuCisKKyAgICAgIFdoZW4gZW5jb3VudGVyaW5nIGEgYGBtdWx0aXBhcnQvcmVsYXRlZGBgLCBjaGVjayB0aGUgYGBzdGFydGBgIHBhcmFtZXRlcgorICAgICAgYW5kIGlmIGEgcGFydCB3aXRoIGEgbWF0Y2hpbmcgOm1haWxoZWFkZXI6YENvbnRlbnQtSURgIGlzIGZvdW5kLCBjb25zaWRlcgorICAgICAgb25seSBpdCB3aGVuIGxvb2tpbmcgZm9yIGNhbmRpZGF0ZSBtYXRjaGVzLiAgT3RoZXJ3aXNlIGNvbnNpZGVyIG9ubHkgdGhlCisgICAgICBmaXJzdCAoZGVmYXVsdCByb290KSBwYXJ0IG9mIHRoZSBgYG11bHRpcGFydC9yZWxhdGVkYGAuCisKKyAgICAgIElmIGEgcGFydCBoYXMgYSA6bWFpbGhlYWRlcjpgQ29udGVudC1EaXNwb3NpdGlvbmAgaGVhZGVyLCBvbmx5IGNvbnNpZGVyCisgICAgICB0aGUgcGFydCBhIGNhbmRpZGF0ZSBtYXRjaCBpZiB0aGUgdmFsdWUgb2YgdGhlIGhlYWRlciBpcyBgYGlubGluZWBgLgorCisgICAgICBJZiBub25lIG9mIHRoZSBjYW5kaWRhdGVzIG1hdGNoZXMgYW55IG9mIHRoZSBwcmVmZXJlbmNlcyBpbgorICAgICAgKnByZWZlcm5lY2xpc3QqLCByZXR1cm4gYGBOb25lYGAuCisKKyAgICAgIE5vdGVzOiAoMSkgRm9yIG1vc3QgYXBwbGljYXRpb25zIHRoZSBvbmx5ICpwcmVmZXJlbmNlbGlzdCogY29tYmluYXRpb25zCisgICAgICB0aGF0IHJlYWxseSBtYWtlIHNlbnNlIGFyZSBgYCgncGxhaW4nLClgYCwgYGAoJ2h0bWwnLCAncGxhaW4nKWBgLCBhbmQgdGhlCisgICAgICBkZWZhdWx0LCBgYCgncmVsYXRlZCcsICdodG1sJywgJ3BsYWluJylgYC4gICgyKSBCZWNhdXNlIG1hdGNoaW5nIHN0YXJ0cworICAgICAgd2l0aCB0aGUgb2JqZWN0IG9uIHdoaWNoIGBgZ2V0X2JvZHlgYCBpcyBjYWxsZWQsIGNhbGxpbmcgYGBnZXRfYm9keWBgIG9uCisgICAgICBhIGBgbXVsdGlwYXJ0L3JlbGF0ZWRgYCB3aWxsIHJldHVybiB0aGUgb2JqZWN0IGl0c2VsZiB1bmxlc3MKKyAgICAgICpwcmVmZXJlbmNlbGlzdCogaGFzIGEgbm9uLWRlZmF1bHQgdmFsdWUuICgzKSBNZXNzYWdlcyAob3IgbWVzc2FnZSBwYXJ0cykKKyAgICAgIHRoYXQgZG8gbm90IHNwZWNpZnkgYSA6bWFpbGhlYWRlcjpgQ29udGVudC1UeXBlYCBvciB3aG9zZQorICAgICAgOm1haWxoZWFkZXI6YENvbnRlbnQtVHlwZWAgaGVhZGVyIGlzIGludmFsaWQgd2lsbCBiZSB0cmVhdGVkIGFzIGlmIHRoZXkKKyAgICAgIGFyZSBvZiB0eXBlIGBgdGV4dC9wbGFpbmBgLCB3aGljaCBtYXkgb2NjYXNpb25hbGx5IGNhdXNlIGBgZ2V0X2JvZHlgYCB0bworICAgICAgcmV0dXJuIHVuZXhwZWN0ZWQgcmVzdWx0cy4KKworCisgICAuLiBtZXRob2Q6OiBpdGVyX2F0dGFjaG1lbnRzKCkKKworICAgICAgUmV0dXJuIGFuIGl0ZXJhdG9yIG92ZXIgYWxsIG9mIHRoZSBwYXJ0cyBvZiB0aGUgbWVzc2FnZSB0aGF0IGFyZSBub3QKKyAgICAgIGNhbmRpZGF0ZSAiYm9keSIgcGFydHMuICBUaGF0IGlzLCBza2lwIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIGVhY2ggb2YKKyAgICAgIGBgdGV4dC9wbGFpbmBgLCBgYHRleHQvaHRtbGBgLCBgYG11bHRpcGFydC9yZWxhdGVkYGAsIG9yCisgICAgICBgYG11bHRpcGFydC9hbHRlcm5hdGl2ZWBgICh1bmxlc3MgdGhleSBhcmUgZXhwbGljaXRseSBtYXJrZWQgYXMKKyAgICAgIGF0dGFjaG1lbnRzIHZpYSA6bWFpbGhlYWRlcjpgQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudGApLCBhbmQKKyAgICAgIHJldHVybiBhbGwgcmVtYWluaW5nIHBhcnRzLiAgV2hlbiBhcHBsaWVkIGRpcmVjdGx5IHRvIGEKKyAgICAgIGBgbXVsdGlwYXJ0L3JlbGF0ZWRgYCwgcmV0dXJuIGFuIGl0ZXJhdG9yIG92ZXIgdGhlIGFsbCB0aGUgcmVsYXRlZCBwYXJ0cworICAgICAgZXhjZXB0IHRoZSByb290IHBhcnQgKGllOiB0aGUgcGFydCBwb2ludGVkIHRvIGJ5IHRoZSBgYHN0YXJ0YGAgcGFyYW1ldGVyLAorICAgICAgb3IgdGhlIGZpcnN0IHBhcnQgaWYgdGhlcmUgaXMgbm8gYGBzdGFydGBgIHBhcmFtZXRlciBvciB0aGUgYGBzdGFydGBgCisgICAgICBwYXJhbWV0ZXIgZG9lc24ndCBtYXRjaCB0aGUgOm1haWxoZWFkZXI6YENvbnRlbnQtSURgIG9mIGFueSBvZiB0aGUKKyAgICAgIHBhcnRzKS4gIFdoZW4gYXBwbGllZCBkaXJlY3RseSB0byBhIGBgbXVsdGlwYXJ0L2FsdGVybmF0aXZlYGAgb3IgYQorICAgICAgbm9uLWBgbXVsdGlwYXJ0YGAsIHJldHVybiBhbiBlbXB0eSBpdGVyYXRvci4KKworCisgICAuLiBtZXRob2Q6OiBpdGVyX3BhcnRzKCkKKworICAgICAgUmV0dXJuIGFuIGl0ZXJhdG9yIG92ZXIgYWxsIG9mIHRoZSBpbW1lZGlhdGUgc3ViLXBhcnRzIG9mIHRoZSBtZXNzYWdlLAorICAgICAgd2hpY2ggd2lsbCBiZSBlbXB0eSBmb3IgYSBub24tYGBtdWx0aXBhcnRgYC4gIChTZWUgYWxzbworICAgICAgOm1ldGg6YH5lbWFpbC5tZXNzYWdlLndhbGtgLikKKworCisgICAuLiBtZXRob2Q6OiBnZXRfY29udGVudCgqYXJncywgY29udGVudF9tYW5hZ2VyPU5vbmUsICoqa3cpCisKKyAgICAgIENhbGwgdGhlIGBgZ2V0X2NvbnRlbnRgYCBtZXRob2Qgb2YgdGhlICpjb250ZW50X21hbmFnZXIqLCBwYXNzaW5nIHNlbGYKKyAgICAgIGFzIHRoZSBtZXNzYWdlIG9iamVjdCwgYW5kIHBhc3NpbmcgYWxvbmcgYW55IG90aGVyIGFyZ3VtZW50cyBvciBrZXl3b3JkcworICAgICAgYXMgYWRkaXRpb25hbCBhcmd1bWVudHMuICBJZiAqY29udGVudF9tYW5hZ2VyKiBpcyBub3Qgc3BlY2lmaWVkLCB1c2UKKyAgICAgIHRoZSBgYGNvbnRlbnRfbWFuYWdlcmBgIHNwZWNpZmllZCBieSB0aGUgY3VycmVudCA6bW9kOmB+ZW1haWwucG9saWN5YC4KKworCisgICAuLiBtZXRob2Q6OiBzZXRfY29udGVudCgqYXJncywgY29udGVudF9tYW5hZ2VyPU5vbmUsICoqa3cpCisKKyAgICAgIENhbGwgdGhlIGBgc2V0X2NvbnRlbnRgYCBtZXRob2Qgb2YgdGhlICpjb250ZW50X21hbmFnZXIqLCBwYXNzaW5nIHNlbGYKKyAgICAgIGFzIHRoZSBtZXNzYWdlIG9iamVjdCwgYW5kIHBhc3NpbmcgYWxvbmcgYW55IG90aGVyIGFyZ3VtZW50cyBvciBrZXl3b3JkcworICAgICAgYXMgYWRkaXRpb25hbCBhcmd1bWVudHMuICBJZiAqY29udGVudF9tYW5hZ2VyKiBpcyBub3Qgc3BlY2lmaWVkLCB1c2UKKyAgICAgIHRoZSBgYGNvbnRlbnRfbWFuYWdlcmBgIHNwZWNpZmllZCBieSB0aGUgY3VycmVudCA6bW9kOmB+ZW1haWwucG9saWN5YC4KKworCisgICAuLiBtZXRob2Q6OiBtYWtlX3JlbGF0ZWQoYm91bmRhcnk9Tm9uZSkKKworICAgICAgQ29udmVydCBhIG5vbi1gYG11bHRpcGFydGBgIG1lc3NhZ2UgaW50byBhIGBgbXVsdGlwYXJ0L3JlbGF0ZWRgYCBtZXNzYWdlLAorICAgICAgbW92aW5nIGFueSBleGlzdGluZyA6bWFpbGhlYWRlcjpgQ29udGVudC1gIGhlYWRlcnMgYW5kIHBheWxvYWQgaW50byBhCisgICAgICAobmV3KSBmaXJzdCBwYXJ0IG9mIHRoZSBgYG11bHRpcGFydGBgLiAgSWYgKmJvdW5kYXJ5KiBpcyBzcGVjaWZpZWQsIHVzZQorICAgICAgaXQgYXMgdGhlIGJvdW5kYXJ5IHN0cmluZyBpbiB0aGUgbXVsdGlwYXJ0LCBvdGhlcndpc2UgbGVhdmUgdGhlIGJvdW5kYXJ5CisgICAgICB0byBiZSBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgd2hlbiBpdCBpcyBuZWVkZWQgKGZvciBleGFtcGxlLCB3aGVuIHRoZQorICAgICAgbWVzc2FnZSBpcyBzZXJpYWxpemVkKS4KKworCisgICAuLiBtZXRob2Q6OiBtYWtlX2FsdGVybmF0aXZlKGJvdW5kYXJ5PU5vbmUpCisKKyAgICAgIENvbnZlcnQgYSBub24tYGBtdWx0aXBhcnRgYCBvciBhIGBgbXVsdGlwYXJ0L3JlbGF0ZWRgYCBpbnRvIGEKKyAgICAgIGBgbXVsdGlwYXJ0L2FsdGVybmF0aXZlYGAsIG1vdmluZyBhbnkgZXhpc3RpbmcgOm1haWxoZWFkZXI6YENvbnRlbnQtYAorICAgICAgaGVhZGVycyBhbmQgcGF5bG9hZCBpbnRvIGEgKG5ldykgZmlyc3QgcGFydCBvZiB0aGUgYGBtdWx0aXBhcnRgYC4gIElmCisgICAgICAqYm91bmRhcnkqIGlzIHNwZWNpZmllZCwgdXNlIGl0IGFzIHRoZSBib3VuZGFyeSBzdHJpbmcgaW4gdGhlIG11bHRpcGFydCwKKyAgICAgIG90aGVyd2lzZSBsZWF2ZSB0aGUgYm91bmRhcnkgdG8gYmUgYXV0b21hdGljYWxseSBjcmVhdGVkIHdoZW4gaXQgaXMKKyAgICAgIG5lZWRlZCAoZm9yIGV4YW1wbGUsIHdoZW4gdGhlIG1lc3NhZ2UgaXMgc2VyaWFsaXplZCkuCisKKworICAgLi4gbWV0aG9kOjogbWFrZV9taXhlZChib3VuZGFyeT1Ob25lKQorCisgICAgICBDb252ZXJ0IGEgbm9uLWBgbXVsdGlwYXJ0YGAsIGEgYGBtdWx0aXBhcnQvcmVsYXRlZGBgLCBvciBhCisgICAgICBgYG11bHRpcGFydC1hbHRlcm5hdGl2ZWBgIGludG8gYSBgYG11bHRpcGFydC9taXhlZGBgLCBtb3ZpbmcgYW55IGV4aXN0aW5nCisgICAgICA6bWFpbGhlYWRlcjpgQ29udGVudC1gIGhlYWRlcnMgYW5kIHBheWxvYWQgaW50byBhIChuZXcpIGZpcnN0IHBhcnQgb2YgdGhlCisgICAgICBgYG11bHRpcGFydGBgLiAgSWYgKmJvdW5kYXJ5KiBpcyBzcGVjaWZpZWQsIHVzZSBpdCBhcyB0aGUgYm91bmRhcnkgc3RyaW5nCisgICAgICBpbiB0aGUgbXVsdGlwYXJ0LCBvdGhlcndpc2UgbGVhdmUgdGhlIGJvdW5kYXJ5IHRvIGJlIGF1dG9tYXRpY2FsbHkKKyAgICAgIGNyZWF0ZWQgd2hlbiBpdCBpcyBuZWVkZWQgKGZvciBleGFtcGxlLCB3aGVuIHRoZSBtZXNzYWdlIGlzIHNlcmlhbGl6ZWQpLgorCisKKyAgIC4uIG1ldGhvZDo6IGFkZF9yZWxhdGVkKCphcmdzLCBjb250ZW50X21hbmFnZXI9Tm9uZSwgKiprdykKKworICAgICAgSWYgdGhlIG1lc3NhZ2UgaXMgYSBgYG11bHRpcGFydC9yZWxhdGVkYGAsIGNyZWF0ZSBhIG5ldyBtZXNzYWdlCisgICAgICBvYmplY3QsIHBhc3MgYWxsIG9mIHRoZSBhcmd1bWVudHMgdG8gaXRzIDptZXRoOmBzZXRfY29udGVudGAgbWV0aG9kLAorICAgICAgYW5kIDptZXRoOmB+ZW1haWwubWVzc2FnZS5NZXNzYWdlLmF0dGFjaGAgaXQgdG8gdGhlIGBgbXVsdGlwYXJ0YGAuICBJZgorICAgICAgdGhlIG1lc3NhZ2UgaXMgYSBub24tYGBtdWx0aXBhcnRgYCwgY2FsbCA6bWV0aDpgbWFrZV9yZWxhdGVkYCBhbmQgdGhlbgorICAgICAgcHJvY2VlZCBhcyBhYm92ZS4gIElmIHRoZSBtZXNzYWdlIGlzIGFueSBvdGhlciB0eXBlIG9mIGBgbXVsdGlwYXJ0YGAsCisgICAgICByYWlzZSBhIDpleGM6YFR5cGVFcnJvcmAuIElmICpjb250ZW50X21hbmFnZXIqIGlzIG5vdCBzcGVjaWZpZWQsIHVzZQorICAgICAgdGhlIGBgY29udGVudF9tYW5hZ2VyYGAgc3BlY2lmaWVkIGJ5IHRoZSBjdXJyZW50IDptb2Q6YH5lbWFpbC5wb2xpY3lgLgorICAgICAgSWYgdGhlIGFkZGVkIHBhcnQgaGFzIG5vIDptYWlsaGVhZGVyOmBDb250ZW50LURpc3Bvc2l0aW9uYCBoZWFkZXIsCisgICAgICBhZGQgb25lIHdpdGggdGhlIHZhbHVlIGBgaW5saW5lYGAuCisKKworICAgLi4gbWV0aG9kOjogYWRkX2FsdGVybmF0aXZlKCphcmdzLCBjb250ZW50X21hbmFnZXI9Tm9uZSwgKiprdykKKworICAgICAgSWYgdGhlIG1lc3NhZ2UgaXMgYSBgYG11bHRpcGFydC9hbHRlcm5hdGl2ZWBgLCBjcmVhdGUgYSBuZXcgbWVzc2FnZQorICAgICAgb2JqZWN0LCBwYXNzIGFsbCBvZiB0aGUgYXJndW1lbnRzIHRvIGl0cyA6bWV0aDpgc2V0X2NvbnRlbnRgIG1ldGhvZCwgYW5kCisgICAgICA6bWV0aDpgfmVtYWlsLm1lc3NhZ2UuTWVzc2FnZS5hdHRhY2hgIGl0IHRvIHRoZSBgYG11bHRpcGFydGBgLiAgSWYgdGhlCisgICAgICBtZXNzYWdlIGlzIGEgbm9uLWBgbXVsdGlwYXJ0YGAgb3IgYGBtdWx0aXBhcnQvcmVsYXRlZGBgLCBjYWxsCisgICAgICA6bWV0aDpgbWFrZV9hbHRlcm5hdGl2ZWAgYW5kIHRoZW4gcHJvY2VlZCBhcyBhYm92ZS4gIElmIHRoZSBtZXNzYWdlIGlzCisgICAgICBhbnkgb3RoZXIgdHlwZSBvZiBgYG11bHRpcGFydGBgLCByYWlzZSBhIDpleGM6YFR5cGVFcnJvcmAuIElmCisgICAgICAqY29udGVudF9tYW5hZ2VyKiBpcyBub3Qgc3BlY2lmaWVkLCB1c2UgdGhlIGBgY29udGVudF9tYW5hZ2VyYGAgc3BlY2lmaWVkCisgICAgICBieSB0aGUgY3VycmVudCA6bW9kOmB+ZW1haWwucG9saWN5YC4KKworCisgICAuLiBtZXRob2Q6OiBhZGRfYXR0YWNobWVudCgqYXJncywgY29udGVudF9tYW5hZ2VyPU5vbmUsICoqa3cpCisKKyAgICAgIElmIHRoZSBtZXNzYWdlIGlzIGEgYGBtdWx0aXBhcnQvbWl4ZWRgYCwgY3JlYXRlIGEgbmV3IG1lc3NhZ2Ugb2JqZWN0LAorICAgICAgcGFzcyBhbGwgb2YgdGhlIGFyZ3VtZW50cyB0byBpdHMgOm1ldGg6YHNldF9jb250ZW50YCBtZXRob2QsIGFuZAorICAgICAgOm1ldGg6YH5lbWFpbC5tZXNzYWdlLk1lc3NhZ2UuYXR0YWNoYCBpdCB0byB0aGUgYGBtdWx0aXBhcnRgYC4gIElmIHRoZQorICAgICAgbWVzc2FnZSBpcyBhIG5vbi1gYG11bHRpcGFydGBgLCBgYG11bHRpcGFydC9yZWxhdGVkYGAsIG9yCisgICAgICBgYG11bHRpcGFydC9hbHRlcm5hdGl2ZWBgLCBjYWxsIDptZXRoOmBtYWtlX21peGVkYCBhbmQgdGhlbiBwcm9jZWVkIGFzCisgICAgICBhYm92ZS4gSWYgKmNvbnRlbnRfbWFuYWdlciogaXMgbm90IHNwZWNpZmllZCwgdXNlIHRoZSBgYGNvbnRlbnRfbWFuYWdlcmBgCisgICAgICBzcGVjaWZpZWQgYnkgdGhlIGN1cnJlbnQgOm1vZDpgfmVtYWlsLnBvbGljeWAuICBJZiB0aGUgYWRkZWQgcGFydAorICAgICAgaGFzIG5vIDptYWlsaGVhZGVyOmBDb250ZW50LURpc3Bvc2l0aW9uYCBoZWFkZXIsIGFkZCBvbmUgd2l0aCB0aGUgdmFsdWUKKyAgICAgIGBgYXR0YWNobWVudGBgLiAgVGhpcyBtZXRob2QgY2FuIGJlIHVzZWQgYm90aCBmb3IgZXhwbGljaXQgYXR0YWNobWVudHMKKyAgICAgICg6bWFpbGhlYWRlcjpgQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudGAgYW5kIGBgaW5saW5lYGAgYXR0YWNobWVudHMKKyAgICAgICg6bWFpbGhlYWRlcjpgQ29udGVudC1EaXNwb3NpdGlvbjogaW5saW5lYCksIGJ5IHBhc3NpbmcgYXBwcm9wcmlhdGUKKyAgICAgIG9wdGlvbnMgdG8gdGhlIGBgY29udGVudF9tYW5hZ2VyYGAuCisKKworICAgLi4gbWV0aG9kOjogY2xlYXIoKQorCisgICAgICBSZW1vdmUgdGhlIHBheWxvYWQgYW5kIGFsbCBvZiB0aGUgaGVhZGVycy4KKworCisgICAuLiBtZXRob2Q6OiBjbGVhcl9jb250ZW50KCkKKworICAgICAgUmVtb3ZlIHRoZSBwYXlsb2FkIGFuZCBhbGwgb2YgdGhlIDpleGM6YENvbnRlbnQtYCBoZWFkZXJzLCBsZWF2aW5nCisgICAgICBhbGwgb3RoZXIgaGVhZGVycyBpbnRhY3QgYW5kIGluIHRoZWlyIG9yaWdpbmFsIG9yZGVyLgorCisKKy4uIGNsYXNzOjogTUlNRVBhcnQocG9saWN5PWRlZmF1bHQpCisKKyAgICBUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBzdWJwYXJ0IG9mIGEgTUlNRSBtZXNzYWdlLiAgSXQgaXMgaWRlbnRpY2FsIHRvCisgICAgOmNsYXNzOmBFbWFpbE1lc3NhZ2VgLCBleGNlcHQgdGhhdCBubyA6bWFpbGhlYWRlcjpgTUlNRS1WZXJzaW9uYCBoZWFkZXJzIGFyZQorICAgIGFkZGVkIHdoZW4gOm1ldGg6YH5FbWFpbE1lc3NhZ2Uuc2V0X2NvbnRlbnRgIGlzIGNhbGxlZCwgc2luY2Ugc3ViLXBhcnRzIGRvCisgICAgbm90IG5lZWQgdGhlaXIgb3duIDptYWlsaGVhZGVyOmBNSU1FLVZlcnNpb25gIGhlYWRlcnMuCisKKworLi4gY3VycmVudG1vZHVsZTo6IGVtYWlsLmNvbnRlbnRtYW5hZ2VyCisKKy4uIGNsYXNzOjogQ29udGVudE1hbmFnZXIoKQorCisgICBCYXNlIGNsYXNzIGZvciBjb250ZW50IG1hbmFnZXJzLiAgUHJvdmlkZXMgdGhlIHN0YW5kYXJkIHJlZ2lzdHJ5IG1lY2hhbmlzbXMKKyAgIHRvIHJlZ2lzdGVyIGNvbnZlcnRlcnMgYmV0d2VlbiBNSU1FIGNvbnRlbnQgYW5kIG90aGVyIHJlcHJlc2VudGF0aW9ucywgYXMKKyAgIHdlbGwgYXMgdGhlIGBgZ2V0X2NvbnRlbnRgYCBhbmQgYGBzZXRfY29udGVudGBgIGRpc3BhdGNoIG1ldGhvZHMuCisKKworICAgLi4gbWV0aG9kOjogZ2V0X2NvbnRlbnQobXNnLCAqYXJncywgKiprdykKKworICAgICAgTG9vayB1cCBhIGhhbmRsZXIgZnVuY3Rpb24gYmFzZWQgb24gdGhlIGBgbWltZXR5cGVgYCBvZiAqbXNnKiAoc2VlIG5leHQKKyAgICAgIHBhcmFncmFwaCksIGNhbGwgaXQsIHBhc3NpbmcgdGhyb3VnaCBhbGwgYXJndW1lbnRzLCBhbmQgcmV0dXJuIHRoZSByZXN1bHQKKyAgICAgIG9mIHRoZSBjYWxsLiAgVGhlIGV4cGVjdGF0aW9uIGlzIHRoYXQgdGhlIGhhbmRsZXIgd2lsbCBleHRyYWN0IHRoZQorICAgICAgcGF5bG9hZCBmcm9tICptc2cqIGFuZCByZXR1cm4gYW4gb2JqZWN0IHRoYXQgZW5jb2RlcyBpbmZvcm1hdGlvbiBhYm91dAorICAgICAgdGhlIGV4dHJhY3RlZCBkYXRhLgorCisgICAgICBUbyBmaW5kIHRoZSBoYW5kbGVyLCBsb29rIGZvciB0aGUgZm9sbG93aW5nIGtleXMgaW4gdGhlIHJlZ2lzdHJ5LAorICAgICAgc3RvcHBpbmcgd2l0aCB0aGUgZmlyc3Qgb25lIGZvdW5kOgorCisgICAgICAgICAgICAqIHRoZSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBmdWxsIE1JTUUgdHlwZSAoYGBtYWludHlwZS9zdWJ0eXBlYGApCisgICAgICAgICAgICAqIHRoZSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBgYG1haW50eXBlYGAKKyAgICAgICAgICAgICogdGhlIGVtcHR5IHN0cmluZworCisgICAgICBJZiBub25lIG9mIHRoZXNlIGtleXMgcHJvZHVjZSBhIGhhbmRsZXIsIHJhaXNlIGEgOmV4YzpgS2V5RXJyb3JgIGZvciB0aGUKKyAgICAgIGZ1bGwgTUlNRSB0eXBlLgorCisKKyAgIC4uIG1ldGhvZDo6IHNldF9jb250ZW50KG1zZywgb2JqLCAqYXJncywgKiprdykKKworICAgICAgSWYgdGhlIGBgbWFpbnR5cGVgYCBpcyBgYG11bHRpcGFydGBgLCByYWlzZSBhIDpleGM6YFR5cGVFcnJvcmA7IG90aGVyd2lzZQorICAgICAgbG9vayB1cCBhIGhhbmRsZXIgZnVuY3Rpb24gYmFzZWQgb24gdGhlIHR5cGUgb2YgKm9iaiogKHNlZSBuZXh0CisgICAgICBwYXJhZ3JhcGgpLCBjYWxsIDptZXRoOmB+ZW1haWwubWVzc2FnZS5FbWFpbE1lc3NhZ2UuY2xlYXJfY29udGVudGAgb24gdGhlCisgICAgICAqbXNnKiwgYW5kIGNhbGwgdGhlIGhhbmRsZXIgZnVuY3Rpb24sIHBhc3NpbmcgdGhyb3VnaCBhbGwgYXJndW1lbnRzLiAgVGhlCisgICAgICBleHBlY3RhdGlvbiBpcyB0aGF0IHRoZSBoYW5kbGVyIHdpbGwgdHJhbnNmb3JtIGFuZCBzdG9yZSAqb2JqKiBpbnRvCisgICAgICAqbXNnKiwgcG9zc2libHkgbWFraW5nIG90aGVyIGNoYW5nZXMgdG8gKm1zZyogYXMgd2VsbCwgc3VjaCBhcyBhZGRpbmcKKyAgICAgIHZhcmlvdXMgTUlNRSBoZWFkZXJzIHRvIGVuY29kZSBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gaW50ZXJwcmV0IHRoZSBzdG9yZWQKKyAgICAgIGRhdGEuCisKKyAgICAgIFRvIGZpbmQgdGhlIGhhbmRsZXIsIG9idGFpbiB0aGUgdHlwZSBvZiAqb2JqKiAoYGB0eXAgPSB0eXBlKG9iailgYCksIGFuZAorICAgICAgbG9vayBmb3IgdGhlIGZvbGxvd2luZyBrZXlzIGluIHRoZSByZWdpc3RyeSwgc3RvcHBpbmcgd2l0aCB0aGUgZmlyc3Qgb25lCisgICAgICBmb3VuZDoKKworICAgICAgICAgICAqIHRoZSB0eXBlIGl0c2VsZiAoYGB0eXBgYCkKKyAgICAgICAgICAgKiB0aGUgdHlwZSdzIGZ1bGx5IHF1YWxpZmllZCBuYW1lIChgYHR5cC5fX21vZHVsZV9fICsgJy4nICsKKyAgICAgICAgICAgICB0eXAuX19xdWFsbmFtZV9fYGApLgorICAgICAgICAgICAqIHRoZSB0eXBlJ3MgcXVhbG5hbWUgKGBgdHlwLl9fcXVhbG5hbWVfX2BgKQorICAgICAgICAgICAqIHRoZSB0eXBlJ3MgbmFtZSAoYGB0eXAuX19uYW1lX19gYCkuCisKKyAgICAgIElmIG5vbmUgb2YgdGhlIGFib3ZlIG1hdGNoLCByZXBlYXQgYWxsIG9mIHRoZSBjaGVja3MgYWJvdmUgZm9yIGVhY2ggb2YKKyAgICAgIHRoZSB0eXBlcyBpbiB0aGUgOnRlcm06YE1ST2AgKGBgdHlwLl9fbXJvX19gYCkuICBGaW5hbGx5LCBpZiBubyBvdGhlciBrZXkKKyAgICAgIHlpZWxkcyBhIGhhbmRsZXIsIGNoZWNrIGZvciBhIGhhbmRsZXIgZm9yIHRoZSBrZXkgYGBOb25lYGAuICBJZiB0aGVyZSBpcworICAgICAgbm8gaGFuZGxlciBmb3IgYGBOb25lYGAsIHJhaXNlIGEgOmV4YzpgS2V5RXJyb3JgIGZvciB0aGUgZnVsbHkKKyAgICAgIHF1YWxpZmllZCBuYW1lIG9mIHRoZSB0eXBlLgorCisgICAgICBBbHNvIGFkZCBhIDptYWlsaGVhZGVyOmBNSU1FLVZlcnNpb25gIGhlYWRlciBpZiBvbmUgaXMgbm90IHByZXNlbnQgKHNlZQorICAgICAgYWxzbyA6Y2xhc3M6YC5NSU1FUGFydGApLgorCisKKyAgIC4uIG1ldGhvZDo6IGFkZF9nZXRfaGFuZGxlcihrZXksIGhhbmRsZXIpCisKKyAgICAgIFJlY29yZCB0aGUgZnVuY3Rpb24gKmhhbmRsZXIqIGFzIHRoZSBoYW5kbGVyIGZvciAqa2V5Ki4gIEZvciB0aGUgcG9zc2libGUKKyAgICAgIHZhbHVlcyBvZiAqa2V5Kiwgc2VlIDptZXRoOmBnZXRfY29udGVudGAuCisKKworICAgLi4gbWV0aG9kOjogYWRkX3NldF9oYW5kbGVyKHR5cGVrZXksIGhhbmRsZXIpCisKKyAgICAgIFJlY29yZCAqaGFuZGxlciogYXMgdGhlIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiBhbiBvYmplY3Qgb2YgYSB0eXBlCisgICAgICBtYXRjaGluZyAqdHlwZWtleSogaXMgcGFzc2VkIHRvIDptZXRoOmBzZXRfY29udGVudGAuICBGb3IgdGhlIHBvc3NpYmxlCisgICAgICB2YWx1ZXMgb2YgKnR5cGVrZXkqLCBzZWUgOm1ldGg6YHNldF9jb250ZW50YC4KKworCitDb250ZW50IE1hbmFnZXIgSW5zdGFuY2VzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK0N1cnJlbnRseSB0aGUgZW1haWwgcGFja2FnZSBwcm92aWRlcyBvbmx5IG9uZSBjb25jcmV0ZSBjb250ZW50IG1hbmFnZXIsCis6ZGF0YTpgcmF3X2RhdGFfbWFuYWdlcmAsIGFsdGhvdWdoIG1vcmUgbWF5IGJlIGFkZGVkIGluIHRoZSBmdXR1cmUuCis6ZGF0YTpgcmF3X2RhdGFfbWFuYWdlcmAgaXMgdGhlCis6YXR0cjpgfmVtYWlsLnBvbGljeS5FbWFpbFBvbGljeS5jb250ZW50X21hbmFnZXJgIHByb3ZpZGVkIGJ5Cis6YXR0cjpgfmVtYWlsLnBvbGljeS5FbWFpbFBvbGljeWAgYW5kIGl0cyBkZXJpdmF0aXZlcy4KKworCisuLiBkYXRhOjogcmF3X2RhdGFfbWFuYWdlcgorCisgICBUaGlzIGNvbnRlbnQgbWFuYWdlciBwcm92aWRlcyBvbmx5IGEgbWluaW11bSBpbnRlcmZhY2UgYmV5b25kIHRoYXQgcHJvdmlkZWQKKyAgIGJ5IDpjbGFzczpgfmVtYWlsLm1lc3NhZ2UuTWVzc2FnZWAgaXRzZWxmOiAgaXQgZGVhbHMgb25seSB3aXRoIHRleHQsIHJhdworICAgYnl0ZSBzdHJpbmdzLCBhbmQgOmNsYXNzOmB+ZW1haWwubWVzc2FnZS5NZXNzYWdlYCBvYmplY3RzLiAgTmV2ZXJ0aGVsZXNzLCBpdAorICAgcHJvdmlkZXMgc2lnbmlmaWNhbnQgYWR2YW50YWdlcyBjb21wYXJlZCB0byB0aGUgYmFzZSBBUEk6IGBgZ2V0X2NvbnRlbnRgYCBvbgorICAgYSB0ZXh0IHBhcnQgd2lsbCByZXR1cm4gYSB1bmljb2RlIHN0cmluZyB3aXRob3V0IHRoZSBhcHBsaWNhdGlvbiBuZWVkaW5nIHRvCisgICBtYW51YWxseSBkZWNvZGUgaXQsIGBgc2V0X2NvbnRlbnRgYCBwcm92aWRlcyBhIHJpY2ggc2V0IG9mIG9wdGlvbnMgZm9yCisgICBjb250cm9sbGluZyB0aGUgaGVhZGVycyBhZGRlZCB0byBhIHBhcnQgYW5kIGNvbnRyb2xsaW5nIHRoZSBjb250ZW50IHRyYW5zZmVyCisgICBlbmNvZGluZywgYW5kIGl0IGVuYWJsZXMgdGhlIHVzZSBvZiB0aGUgdmFyaW91cyBgYGFkZF9gYCBtZXRob2RzLCB0aGVyZWJ5CisgICBzaW1wbGlmeWluZyB0aGUgY3JlYXRpb24gb2YgbXVsdGlwYXJ0IG1lc3NhZ2VzLgorCisgICAuLiBtZXRob2Q6OiBnZXRfY29udGVudChtc2csIGVycm9ycz0ncmVwbGFjZScpCisKKyAgICAgIFJldHVybiB0aGUgcGF5bG9hZCBvZiB0aGUgcGFydCBhcyBlaXRoZXIgYSBzdHJpbmcgKGZvciBgYHRleHRgYCBwYXJ0cyksIGEKKyAgICAgIDpjbGFzczpgfmVtYWlsLm1lc3NhZ2UuRW1haWxNZXNzYWdlYCBvYmplY3QgKGZvciBgYG1lc3NhZ2UvcmZjODIyYGAKKyAgICAgIHBhcnRzKSwgb3IgYSBgYGJ5dGVzYGAgb2JqZWN0IChmb3IgYWxsIG90aGVyIG5vbi1tdWx0aXBhcnQgdHlwZXMpLiAgUmFpc2UKKyAgICAgIGEgOmV4YzpgS2V5RXJyb3JgIGlmIGNhbGxlZCBvbiBhIGBgbXVsdGlwYXJ0YGAuICBJZiB0aGUgcGFydCBpcyBhCisgICAgICBgYHRleHRgYCBwYXJ0IGFuZCAqZXJyb3JzKiBpcyBzcGVjaWZpZWQsIHVzZSBpdCBhcyB0aGUgZXJyb3IgaGFuZGxlciB3aGVuCisgICAgICBkZWNvZGluZyB0aGUgcGF5bG9hZCB0byB1bmljb2RlLiAgVGhlIGRlZmF1bHQgZXJyb3IgaGFuZGxlciBpcworICAgICAgYGByZXBsYWNlYGAuCisKKyAgIC4uIG1ldGhvZDo6IHNldF9jb250ZW50KG1zZywgPCdzdHInPiwgc3VidHlwZT0icGxhaW4iLCBjaGFyc2V0PSd1dGYtOCcgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY3RlPU5vbmUsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3Bvc2l0aW9uPU5vbmUsIGZpbGVuYW1lPU5vbmUsIGNpZD1Ob25lLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXM9Tm9uZSwgaGVhZGVycz1Ob25lKQorICAgICAgICAgICAgICAgc2V0X2NvbnRlbnQobXNnLCA8J2J5dGVzJz4sIG1haW50eXBlLCBzdWJ0eXBlLCBjdGU9ImJhc2U2NCIsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3Bvc2l0aW9uPU5vbmUsIGZpbGVuYW1lPU5vbmUsIGNpZD1Ob25lLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXM9Tm9uZSwgaGVhZGVycz1Ob25lKQorICAgICAgICAgICAgICAgc2V0X2NvbnRlbnQobXNnLCA8J01lc3NhZ2UnPiwgY3RlPU5vbmUsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3Bvc2l0aW9uPU5vbmUsIGZpbGVuYW1lPU5vbmUsIGNpZD1Ob25lLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXM9Tm9uZSwgaGVhZGVycz1Ob25lKQorICAgICAgICAgICAgICAgc2V0X2NvbnRlbnQobXNnLCA8J2xpc3QnPiwgc3VidHlwZT0nbWl4ZWQnLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwb3NpdGlvbj1Ob25lLCBmaWxlbmFtZT1Ob25lLCBjaWQ9Tm9uZSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zPU5vbmUsIGhlYWRlcnM9Tm9uZSkKKworICAgICAgIEFkZCBoZWFkZXJzIGFuZCBwYXlsb2FkIHRvICptc2cqOgorCisgICAgICAgQWRkIGEgOm1haWxoZWFkZXI6YENvbnRlbnQtVHlwZWAgaGVhZGVyIHdpdGggYSBgYG1haW50eXBlL3N1YnR5cGVgYAorICAgICAgIHZhbHVlLgorCisgICAgICAgICAgICogRm9yIGBgc3RyYGAsIHNldCB0aGUgTUlNRSBgYG1haW50eXBlYGAgdG8gYGB0ZXh0YGAsIGFuZCBzZXQgdGhlCisgICAgICAgICAgICAgc3VidHlwZSB0byAqc3VidHlwZSogaWYgaXQgaXMgc3BlY2lmaWVkLCBvciBgYHBsYWluYGAgaWYgaXQgaXMgbm90LgorICAgICAgICAgICAqIEZvciBgYGJ5dGVzYGAsIHVzZSB0aGUgc3BlY2lmaWVkICptYWludHlwZSogYW5kICpzdWJ0eXBlKiwgb3IKKyAgICAgICAgICAgICByYWlzZSBhIDpleGM6YFR5cGVFcnJvcmAgaWYgdGhleSBhcmUgbm90IHNwZWNpZmllZC4KKyAgICAgICAgICAgKiBGb3IgOmNsYXNzOmB+ZW1haWwubWVzc2FnZS5NZXNzYWdlYCBvYmplY3RzLCBzZXQgdGhlIG1haW50eXBlIHRvCisgICAgICAgICAgICAgYGBtZXNzYWdlYGAsIGFuZCBzZXQgdGhlIHN1YnR5cGUgdG8gKnN1YnR5cGUqIGlmIGl0IGlzIHNwZWNpZmllZAorICAgICAgICAgICAgIG9yIGBgcmZjODIyYGAgaWYgaXQgaXMgbm90LiAgSWYgKnN1YnR5cGUqIGlzIGBgcGFydGlhbGBgLCByYWlzZSBhbgorICAgICAgICAgICAgIGVycm9yIChgYGJ5dGVzYGAgb2JqZWN0cyBtdXN0IGJlIHVzZWQgdG8gY29uc3RydWN0CisgICAgICAgICAgICAgYGBtZXNzYWdlL3BhcnRpYWxgYCBwYXJ0cykuCisgICAgICAgICAgICogRm9yICo8J2xpc3QnPiosIHdoaWNoIHNob3VsZCBiZSBhIGxpc3Qgb2YKKyAgICAgICAgICAgICA6Y2xhc3M6YH5lbWFpbC5tZXNzYWdlLk1lc3NhZ2VgIG9iamVjdHMsIHNldCB0aGUgYGBtYWludHlwZWBgIHRvCisgICAgICAgICAgICAgYGBtdWx0aXBhcnRgYCwgYW5kIHRoZSBgYHN1YnR5cGVgYCB0byAqc3VidHlwZSogaWYgaXQgaXMKKyAgICAgICAgICAgICBzcGVjaWZpZWQsIGFuZCBgYG1peGVkYGAgaWYgaXQgaXMgbm90LiAgSWYgdGhlIG1lc3NhZ2UgcGFydHMgaW4KKyAgICAgICAgICAgICB0aGUgKjwnbGlzdCc+KiBoYXZlIDptYWlsaGVhZGVyOmBNSU1FLVZlcnNpb25gIGhlYWRlcnMsIHJlbW92ZQorICAgICAgICAgICAgIHRoZW0uCisKKyAgICAgICBJZiAqY2hhcnNldCogaXMgcHJvdmlkZWQgKHdoaWNoIGlzIHZhbGlkIG9ubHkgZm9yIGBgc3RyYGApLCBlbmNvZGUgdGhlCisgICAgICAgc3RyaW5nIHRvIGJ5dGVzIHVzaW5nIHRoZSBzcGVjaWZpZWQgY2hhcmFjdGVyIHNldC4gIFRoZSBkZWZhdWx0IGlzCisgICAgICAgYGB1dGYtOGBgLiAgSWYgdGhlIHNwZWNpZmllZCAqY2hhcnNldCogaXMgYSBrbm93biBhbGlhcyBmb3IgYSBzdGFuZGFyZAorICAgICAgIE1JTUUgY2hhcnNldCBuYW1lLCB1c2UgdGhlIHN0YW5kYXJkIGNoYXJzZXQgaW5zdGVhZC4KKworICAgICAgIElmICpjdGUqIGlzIHNldCwgZW5jb2RlIHRoZSBwYXlsb2FkIHVzaW5nIHRoZSBzcGVjaWZpZWQgY29udGVudCB0cmFuc2ZlcgorICAgICAgIGVuY29kaW5nLCBhbmQgc2V0IHRoZSA6bWFpbGhlYWRlcjpgQ29udGVudC1UcmFuc2Zlci1FbmRjb2RpbmdgIGhlYWRlciB0bworICAgICAgIHRoYXQgdmFsdWUuICBGb3IgYGBzdHJgYCBvYmplY3RzLCBpZiBpdCBpcyBub3Qgc2V0IHVzZSBoZXVyaXN0aWNzIHRvCisgICAgICAgZGV0ZXJtaW5lIHRoZSBtb3N0IGNvbXBhY3QgZW5jb2RpbmcuICBQb3NzaWJsZSB2YWx1ZXMgZm9yICpjdGUqIGFyZQorICAgICAgIGBgcXVvdGVkLXByaW50YWJsZWBgLCBgYGJhc2U2NGBgLCBgYDdiaXRgYCwgYGA4Yml0YGAsIGFuZCBgYGJpbmFyeWBgLgorICAgICAgIElmIHRoZSBpbnB1dCBjYW5ub3QgYmUgZW5jb2RlZCBpbiB0aGUgc3BlY2lmaWVkIGVuY29kaW5nIChlZzogYGA3Yml0YGApLAorICAgICAgIHJhaXNlIGEgOmV4YzpgVmFsdWVFcnJvcmAuICBGb3IgOmNsYXNzOmB+ZW1haWwubWVzc2FnZS5NZXNzYWdlYCwgcGVyCisgICAgICAgOnJmYzpgMjA0NmAsIHJhaXNlIGFuIGVycm9yIGlmIGEgKmN0ZSogb2YgYGBxdW90ZWQtcHJpbnRhYmxlYGAgb3IKKyAgICAgICBgYGJhc2U2NGBgIGlzIHJlcXVlc3RlZCBmb3IgKnN1YnR5cGUqIGBgcmZjODIyYGAsIGFuZCBmb3IgYW55ICpjdGUqCisgICAgICAgb3RoZXIgdGhhbiBgYDdiaXRgYCBmb3IgKnN1YnR5cGUqIGBgZXh0ZXJuYWwtYm9keWBgLiAgRm9yCisgICAgICAgYGBtZXNzYWdlL3JmYzgyMmBgLCB1c2UgYGA4Yml0YGAgaWYgKmN0ZSogaXMgbm90IHNwZWNpZmllZC4gIEZvciBhbGwKKyAgICAgICBvdGhlciB2YWx1ZXMgb2YgKnN1YnR5cGUqLCB1c2UgYGA3Yml0YGAuCisKKyAgICAgICAuLiBub3RlOjogQSAqY3RlKiBvZiBgYGJpbmFyeWBgIGRvZXMgbm90IGFjdHVhbGx5IHdvcmsgY29ycmVjdGx5IHlldC4KKyAgICAgICAgICBUaGUgYGBNZXNzYWdlYGAgb2JqZWN0IGFzIG1vZGlmaWVkIGJ5IGBgc2V0X2NvbnRlbnRgYCBpcyBjb3JyZWN0LCBidXQKKyAgICAgICAgICA6Y2xhc3M6YH5lbWFpbC5nZW5lcmF0b3IuQnl0ZXNHZW5lcmF0b3JgIGRvZXMgbm90IHNlcmlhbGl6ZSBpdAorICAgICAgICAgIGNvcnJlY3RseS4KKworICAgICAgIElmICpkaXNwb3NpdGlvbiogaXMgc2V0LCB1c2UgaXQgYXMgdGhlIHZhbHVlIG9mIHRoZQorICAgICAgIDptYWlsaGVhZGVyOmBDb250ZW50LURpc3Bvc2l0aW9uYCBoZWFkZXIuICBJZiBub3Qgc3BlY2lmaWVkLCBhbmQKKyAgICAgICAqZmlsZW5hbWUqIGlzIHNwZWNpZmllZCwgYWRkIHRoZSBoZWFkZXIgd2l0aCB0aGUgdmFsdWUgYGBhdHRhY2htZW50YGAuCisgICAgICAgSWYgaXQgaXMgbm90IHNwZWNpZmllZCBhbmQgKmZpbGVuYW1lKiBpcyBhbHNvIG5vdCBzcGVjaWZpZWQsIGRvIG5vdCBhZGQKKyAgICAgICB0aGUgaGVhZGVyLiAgVGhlIG9ubHkgdmFsaWQgdmFsdWVzIGZvciAqZGlzcG9zaXRpb24qIGFyZSBgYGF0dGFjaG1lbnRgYAorICAgICAgIGFuZCBgYGlubGluZWBgLgorCisgICAgICAgSWYgKmZpbGVuYW1lKiBpcyBzcGVjaWZpZWQsIHVzZSBpdCBhcyB0aGUgdmFsdWUgb2YgdGhlIGBgZmlsZW5hbWVgYAorICAgICAgIHBhcmFtZXRlciBvZiB0aGUgOm1haWxoZWFkZXI6YENvbnRlbnQtRGlzcG9zaXRpb25gIGhlYWRlci4gIFRoZXJlIGlzIG5vCisgICAgICAgZGVmYXVsdC4KKworICAgICAgIElmICpjaWQqIGlzIHNwZWNpZmllZCwgYWRkIGEgOm1haWxoZWFkZXI6YENvbnRlbnQtSURgIGhlYWRlciB3aXRoCisgICAgICAgKmNpZCogYXMgaXRzIHZhbHVlLgorCisgICAgICAgSWYgKnBhcmFtcyogaXMgc3BlY2lmaWVkLCBpdGVyYXRlIGl0cyBgYGl0ZW1zYGAgbWV0aG9kIGFuZCB1c2UgdGhlCisgICAgICAgcmVzdWx0aW5nIGBgKGtleSwgdmFsdWUpYGAgcGFpcnMgdG8gc2V0IGFkZGl0aW9uYWwgcGFyYW1ldGVycyBvbiB0aGUKKyAgICAgICA6bWFpbGhlYWRlcjpgQ29udGVudC1UeXBlYCBoZWFkZXIuCisKKyAgICAgICBJZiAqaGVhZGVycyogaXMgc3BlY2lmaWVkIGFuZCBpcyBhIGxpc3Qgb2Ygc3RyaW5ncyBvZiB0aGUgZm9ybQorICAgICAgIGBgaGVhZGVybmFtZTogaGVhZGVydmFsdWVgYCBvciBhIGxpc3Qgb2YgYGBoZWFkZXJgYCBvYmplY3RzCisgICAgICAgKGRpc3Rpbmd1aXNlZCBmcm9tIHN0cmluZ3MgYnkgaGF2aW5nIGEgYGBuYW1lYGAgYXR0cmlidXRlKSwgYWRkIHRoZQorICAgICAgIGhlYWRlcnMgdG8gKm1zZyouCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9lbWFpbC5nZW5lcmF0b3IucnN0IGIvRG9jL2xpYnJhcnkvZW1haWwuZ2VuZXJhdG9yLnJzdAppbmRleCBjMTcyYWNiLi40OGQ0MWUxIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9lbWFpbC5nZW5lcmF0b3IucnN0CisrKyBiL0RvYy9saWJyYXJ5L2VtYWlsLmdlbmVyYXRvci5yc3QKQEAgLTExMiw3ICsxMTIsNyBAQAogOm1vZDpgZW1haWwubWVzc2FnZWAuCiAKIC4uIGNsYXNzOjogQnl0ZXNHZW5lcmF0b3Iob3V0ZnAsIG1hbmdsZV9mcm9tXz1UcnVlLCBtYXhoZWFkZXJsZW49NzgsICosIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcG9saWN5PXBvbGljeS5kZWZhdWx0KQorICAgICAgICAgICAgICAgICAgICAgICAgICBwb2xpY3k9Tm9uZSkKIAogICAgVGhlIGNvbnN0cnVjdG9yIGZvciB0aGUgOmNsYXNzOmBCeXRlc0dlbmVyYXRvcmAgY2xhc3MgdGFrZXMgYSBiaW5hcnkKICAgIDp0ZXJtOmBmaWxlLWxpa2Ugb2JqZWN0YCBjYWxsZWQgKm91dGZwKiBmb3IgYW4gYXJndW1lbnQuICAqb3V0ZnAqIG11c3QKQEAgLTEzNCw5ICsxMzQsMTEgQEAKICAgIHdyYXBwaW5nLiAgVGhlIGRlZmF1bHQgaXMgNzgsIGFzIHJlY29tbWVuZGVkIChidXQgbm90IHJlcXVpcmVkKSBieQogICAgOnJmYzpgMjgyMmAuCiAKKwogICAgVGhlICpwb2xpY3kqIGtleXdvcmQgc3BlY2lmaWVzIGEgOm1vZDpgfmVtYWlsLnBvbGljeWAgb2JqZWN0IHRoYXQgY29udHJvbHMgYQotICAgbnVtYmVyIG9mIGFzcGVjdHMgb2YgdGhlIGdlbmVyYXRvcidzIG9wZXJhdGlvbi4gIFRoZSBkZWZhdWx0IHBvbGljeQotICAgbWFpbnRhaW5zIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCisgICBudW1iZXIgb2YgYXNwZWN0cyBvZiB0aGUgZ2VuZXJhdG9yJ3Mgb3BlcmF0aW9uLiAgSWYgbm8gKnBvbGljeSogaXMgc3BlY2lmaWVkLAorICAgdGhlbiB0aGUgKnBvbGljeSogYXR0YWNoZWQgdG8gdGhlIG1lc3NhZ2Ugb2JqZWN0IHBhc3NlZCB0byA6YXR0cjpgZmxhdHRlbmAKKyAgIGlzIHVzZWQuCiAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zIEFkZGVkIHRoZSAqcG9saWN5KiBrZXl3b3JkLgogCkBAIC0xNzQsNyArMTc2LDcgQEAKIAogICAgICAgT3B0aW9uYWwgKmxpbmVzZXAqIHNwZWNpZmllcyB0aGUgbGluZSBzZXBhcmF0b3IgY2hhcmFjdGVyIHVzZWQgdG8KICAgICAgIHRlcm1pbmF0ZSBsaW5lcyBpbiB0aGUgb3V0cHV0LiAgSWYgc3BlY2lmaWVkIGl0IG92ZXJyaWRlcyB0aGUgdmFsdWUKLSAgICAgIHNwZWNpZmllZCBieSB0aGUgYGBHZW5lcmF0b3JgYFwgJ3MgYGBwb2xpY3lgYC4KKyAgICAgIHNwZWNpZmllZCBieSB0aGUgYGBHZW5lcmF0b3JgYFwgb3IgKm1zZypcICdzIGBgcG9saWN5YGAuCiAKICAgIC4uIG1ldGhvZDo6IGNsb25lKGZwKQogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9lbWFpbC5tZXNzYWdlLnJzdCBiL0RvYy9saWJyYXJ5L2VtYWlsLm1lc3NhZ2UucnN0CmluZGV4IDMwNzVlODYuLmFlZWE5NDIgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2VtYWlsLm1lc3NhZ2UucnN0CisrKyBiL0RvYy9saWJyYXJ5L2VtYWlsLm1lc3NhZ2UucnN0CkBAIC0zMywyMyArMzMsMzEgQEAKIAogLi4gY2xhc3M6OiBNZXNzYWdlKHBvbGljeT1jb21wYXQzMikKIAotICAgVGhlICpwb2xpY3kqIGFyZ3VtZW50IGRldGVybWllbnMgdGhlIDptb2Q6YH5lbWFpbC5wb2xpY3lgIHRoYXQgd2lsbCBiZSB1c2VkCi0gICB0byB1cGRhdGUgdGhlIG1lc3NhZ2UgbW9kZWwuICBUaGUgZGVmYXVsdCB2YWx1ZSwgOmNsYXNzOmBjb21wYXQzMgotICAgPGVtYWlsLnBvbGljeS5Db21wYXQzMj5gIG1haW50YWlucyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGggdGhlCi0gICBQeXRob24gMy4yIHZlcnNpb24gb2YgdGhlIGVtYWlsIHBhY2thZ2UuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWUgdGhlCisgICBJZiAqcG9saWN5KiBpcyBzcGVjaWZpZWQgKGl0IG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgYSA6bW9kOmB+ZW1haWwucG9saWN5YAorICAgY2xhc3MpIHVzZSB0aGUgcnVsZXMgaXQgc3BlY2lmaWVzIHRvIHVwZGF0ZSBhbmQgc2VyaWFsaXplIHRoZSByZXByZXNlbnRhdGlvbgorICAgb2YgdGhlIG1lc3NhZ2UuICBJZiAqcG9saWN5KiBpcyBub3Qgc2V0LCB1c2UgdGhlIDpjbGFzczpgY29tcGF0MzIKKyAgIDxlbWFpbC5wb2xpY3kuQ29tcGF0MzI+YCBwb2xpY3ksIHdoaWNoIG1haW50YWlucyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGgKKyAgIHRoZSBQeXRob24gMy4yIHZlcnNpb24gb2YgdGhlIGVtYWlsIHBhY2thZ2UuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWUgdGhlCiAgICA6bW9kOmB+ZW1haWwucG9saWN5YCBkb2N1bWVudGF0aW9uLgogCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMyBUaGUgKnBvbGljeSoga2V5d29yZCBhcmd1bWVudCB3YXMgYWRkZWQuCiAKIAotICAgLi4gbWV0aG9kOjogYXNfc3RyaW5nKHVuaXhmcm9tPUZhbHNlLCBtYXhoZWFkZXJsZW49MCkKKyAgIC4uIG1ldGhvZDo6IGFzX3N0cmluZyh1bml4ZnJvbT1GYWxzZSwgbWF4aGVhZGVybGVuPTAsIHBvbGljeT1Ob25lKQogCiAgICAgICBSZXR1cm4gdGhlIGVudGlyZSBtZXNzYWdlIGZsYXR0ZW5lZCBhcyBhIHN0cmluZy4gIFdoZW4gb3B0aW9uYWwgKnVuaXhmcm9tKgotICAgICAgaXMgYGBUcnVlYGAsIHRoZSBlbnZlbG9wZSBoZWFkZXIgaXMgaW5jbHVkZWQgaW4gdGhlIHJldHVybmVkIHN0cmluZy4KLSAgICAgICp1bml4ZnJvbSogZGVmYXVsdHMgdG8gYGBGYWxzZWBgLiAgRmxhdHRlbmluZyB0aGUgbWVzc2FnZSBtYXkgdHJpZ2dlcgotICAgICAgY2hhbmdlcyB0byB0aGUgOmNsYXNzOmBNZXNzYWdlYCBpZiBkZWZhdWx0cyBuZWVkIHRvIGJlIGZpbGxlZCBpbiB0bwotICAgICAgY29tcGxldGUgdGhlIHRyYW5zZm9ybWF0aW9uIHRvIGEgc3RyaW5nIChmb3IgZXhhbXBsZSwgTUlNRSBib3VuZGFyaWVzIG1heQotICAgICAgYmUgZ2VuZXJhdGVkIG9yIG1vZGlmaWVkKS4KKyAgICAgIGlzIHRydWUsIHRoZSBlbnZlbG9wZSBoZWFkZXIgaXMgaW5jbHVkZWQgaW4gdGhlIHJldHVybmVkIHN0cmluZy4KKyAgICAgICp1bml4ZnJvbSogZGVmYXVsdHMgdG8gYGBGYWxzZWBgLiAgRm9yIGJhY2t3YXJkIGNvbXBhYml0aWxpdHkgcmVhc29ucywKKyAgICAgICptYXhoZWFkZXJsZW4qIGRlZmF1bHRzIHRvIGBgMGBgLCBzbyBpZiB5b3Ugd2FudCBhIGRpZmZlcmVudCB2YWx1ZSB5b3UKKyAgICAgIG11c3Qgb3ZlcnJpZGUgaXQgZXhwbGljaXRseSAodGhlIHZhbHVlIHNwZWNpZmllZCBmb3IgKm1heF9saW5lX2xlbmd0aCogaW4KKyAgICAgIHRoZSBwb2xpY3kgd2lsbCBiZSBpZ25vcmVkIGJ5IHRoaXMgbWV0aG9kKS4gIFRoZSAqcG9saWN5KiBhcmd1bWVudCBtYXkgYmUKKyAgICAgIHVzZWQgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgcG9saWN5IG9idGFpbmVkIGZyb20gdGhlIG1lc3NhZ2UgaW5zdGFuY2UuCisgICAgICBUaGlzIGNhbiBiZSB1c2VkIHRvIGNvbnRyb2wgc29tZSBvZiB0aGUgZm9ybWF0dGluZyBwcm9kdWNlZCBieSB0aGUKKyAgICAgIG1ldGhvZCwgc2luY2UgdGhlIHNwZWNpZmllZCAqcG9saWN5KiB3aWxsIGJlIHBhc3NlZCB0byB0aGUgYGBHZW5lcmF0b3JgYC4KKworICAgICAgRmxhdHRlbmluZyB0aGUgbWVzc2FnZSBtYXkgdHJpZ2dlciBjaGFuZ2VzIHRvIHRoZSA6Y2xhc3M6YE1lc3NhZ2VgIGlmCisgICAgICBkZWZhdWx0cyBuZWVkIHRvIGJlIGZpbGxlZCBpbiB0byBjb21wbGV0ZSB0aGUgdHJhbnNmb3JtYXRpb24gdG8gYSBzdHJpbmcKKyAgICAgIChmb3IgZXhhbXBsZSwgTUlNRSBib3VuZGFyaWVzIG1heSBiZSBnZW5lcmF0ZWQgb3IgbW9kaWZpZWQpLgogCiAgICAgICBOb3RlIHRoYXQgdGhpcyBtZXRob2QgaXMgcHJvdmlkZWQgYXMgYSBjb252ZW5pZW5jZSBhbmQgbWF5IG5vdCBhbHdheXMKICAgICAgIGZvcm1hdCB0aGUgbWVzc2FnZSB0aGUgd2F5IHlvdSB3YW50LiAgRm9yIGV4YW1wbGUsIGJ5IGRlZmF1bHQgaXQgZG9lcwpAQCAtNjUsMTcgKzczLDY5IEBACiAgICAgICAgICBnLmZsYXR0ZW4obXNnKQogICAgICAgICAgdGV4dCA9IGZwLmdldHZhbHVlKCkKIAorICAgICAgSWYgdGhlIG1lc3NhZ2Ugb2JqZWN0IGNvbnRhaW5zIGJpbmFyeSBkYXRhIHRoYXQgaXMgbm90IGVuY29kZWQgYWNjb3JkaW5nCisgICAgICB0byBSRkMgc3RhbmRhcmRzLCB0aGUgbm9uLWNvbXBsaWFudCBkYXRhIHdpbGwgYmUgcmVwbGFjZWQgYnkgdW5pY29kZQorICAgICAgInVua25vd24gY2hhcmFjdGVyIiBjb2RlIHBvaW50cy4gIChTZWUgYWxzbyA6bWV0aDpgLmFzX2J5dGVzYCBhbmQKKyAgICAgIDpjbGFzczpgfmVtYWlsLmdlbmVyYXRvci5CeXRlc0dlbmVyYXRvcmAuKQorCisgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNCB0aGUgKnBvbGljeSoga2V5d29yZCBhcmd1bWVudCB3YXMgYWRkZWQuCisKIAogICAgLi4gbWV0aG9kOjogX19zdHJfXygpCiAKLSAgICAgIEVxdWl2YWxlbnQgdG8gYGBhc19zdHJpbmcodW5peGZyb209VHJ1ZSlgYC4KKyAgICAgIEVxdWl2YWxlbnQgdG8gOm1ldGg6YC5hc19zdHJpbmcoKWAuICBBbGxvd3MgYGBzdHIobXNnKWBgIHRvIHByb2R1Y2UgYQorICAgICAgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGZvcm1hdHRlZCBtZXNzYWdlLgorCisKKyAgIC4uIG1ldGhvZDo6IGFzX2J5dGVzKHVuaXhmcm9tPUZhbHNlLCBwb2xpY3k9Tm9uZSkKKworICAgICAgUmV0dXJuIHRoZSBlbnRpcmUgbWVzc2FnZSBmbGF0dGVuZWQgYXMgYSBieXRlcyBvYmplY3QuICBXaGVuIG9wdGlvbmFsCisgICAgICAqdW5peGZyb20qIGlzIHRydWUsIHRoZSBlbnZlbG9wZSBoZWFkZXIgaXMgaW5jbHVkZWQgaW4gdGhlIHJldHVybmVkCisgICAgICBzdHJpbmcuICAqdW5peGZyb20qIGRlZmF1bHRzIHRvIGBgRmFsc2VgYC4gIFRoZSAqcG9saWN5KiBhcmd1bWVudCBtYXkgYmUKKyAgICAgIHVzZWQgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgcG9saWN5IG9idGFpbmVkIGZyb20gdGhlIG1lc3NhZ2UgaW5zdGFuY2UuCisgICAgICBUaGlzIGNhbiBiZSB1c2VkIHRvIGNvbnRyb2wgc29tZSBvZiB0aGUgZm9ybWF0dGluZyBwcm9kdWNlZCBieSB0aGUKKyAgICAgIG1ldGhvZCwgc2luY2UgdGhlIHNwZWNpZmllZCAqcG9saWN5KiB3aWxsIGJlIHBhc3NlZCB0byB0aGUKKyAgICAgIGBgQnl0ZXNHZW5lcmF0b3JgYC4KKworICAgICAgRmxhdHRlbmluZyB0aGUgbWVzc2FnZSBtYXkgdHJpZ2dlciBjaGFuZ2VzIHRvIHRoZSA6Y2xhc3M6YE1lc3NhZ2VgIGlmCisgICAgICBkZWZhdWx0cyBuZWVkIHRvIGJlIGZpbGxlZCBpbiB0byBjb21wbGV0ZSB0aGUgdHJhbnNmb3JtYXRpb24gdG8gYSBzdHJpbmcKKyAgICAgIChmb3IgZXhhbXBsZSwgTUlNRSBib3VuZGFyaWVzIG1heSBiZSBnZW5lcmF0ZWQgb3IgbW9kaWZpZWQpLgorCisgICAgICBOb3RlIHRoYXQgdGhpcyBtZXRob2QgaXMgcHJvdmlkZWQgYXMgYSBjb252ZW5pZW5jZSBhbmQgbWF5IG5vdCBhbHdheXMKKyAgICAgIGZvcm1hdCB0aGUgbWVzc2FnZSB0aGUgd2F5IHlvdSB3YW50LiAgRm9yIGV4YW1wbGUsIGJ5IGRlZmF1bHQgaXQgZG9lcworICAgICAgbm90IGRvIHRoZSBtYW5nbGluZyBvZiBsaW5lcyB0aGF0IGJlZ2luIHdpdGggYGBGcm9tYGAgdGhhdCBpcworICAgICAgcmVxdWlyZWQgYnkgdGhlIHVuaXggbWJveCBmb3JtYXQuICBGb3IgbW9yZSBmbGV4aWJpbGl0eSwgaW5zdGFudGlhdGUgYQorICAgICAgOmNsYXNzOmB+ZW1haWwuZ2VuZXJhdG9yLkJ5dGVzR2VuZXJhdG9yYCBpbnN0YW5jZSBhbmQgdXNlIGl0cworICAgICAgOm1ldGg6YH5lbWFpbC5nZW5lcmF0b3IuQnl0ZXNHZW5lcmF0b3IuZmxhdHRlbmAgbWV0aG9kIGRpcmVjdGx5LgorICAgICAgRm9yIGV4YW1wbGU6OgorCisgICAgICAgICBmcm9tIGlvIGltcG9ydCBCeXRlc0lPCisgICAgICAgICBmcm9tIGVtYWlsLmdlbmVyYXRvciBpbXBvcnQgQnl0ZXNHZW5lcmF0b3IKKyAgICAgICAgIGZwID0gQnl0ZXNJTygpCisgICAgICAgICBnID0gQnl0ZXNHZW5lcmF0b3IoZnAsIG1hbmdsZV9mcm9tXz1UcnVlLCBtYXhoZWFkZXJsZW49NjApCisgICAgICAgICBnLmZsYXR0ZW4obXNnKQorICAgICAgICAgdGV4dCA9IGZwLmdldHZhbHVlKCkKKworICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKworICAgLi4gbWV0aG9kOjogX19ieXRlc19fKCkKKworICAgICAgRXF1aXZhbGVudCB0byA6bWV0aDpgLmFzX2J5dGVzKClgLiAgQWxsb3dzIGBgYnl0ZXMobXNnKWBgIHRvIHByb2R1Y2UgYQorICAgICAgYnl0ZXMgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGZvcm1hdHRlZCBtZXNzYWdlLgorCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKIAogCiAgICAuLiBtZXRob2Q6OiBpc19tdWx0aXBhcnQoKQogCiAgICAgICBSZXR1cm4gYGBUcnVlYGAgaWYgdGhlIG1lc3NhZ2UncyBwYXlsb2FkIGlzIGEgbGlzdCBvZiBzdWItXAogICAgICAgOmNsYXNzOmBNZXNzYWdlYCBvYmplY3RzLCBvdGhlcndpc2UgcmV0dXJuIGBgRmFsc2VgYC4gIFdoZW4KLSAgICAgIDptZXRoOmBpc19tdWx0aXBhcnRgIHJldHVybnMgYGBGYWxzZWBgLCB0aGUgcGF5bG9hZCBzaG91bGQgYmUgYSBzdHJpbmcgb2JqZWN0LgorICAgICAgOm1ldGg6YGlzX211bHRpcGFydGAgcmV0dXJucyBgYEZhbHNlYGAsIHRoZSBwYXlsb2FkIHNob3VsZCBiZSBhIHN0cmluZworICAgICAgb2JqZWN0LiAgKE5vdGUgdGhhdCA6bWV0aDpgaXNfbXVsdGlwYXJ0YCByZXR1cm5pbmcgYGBUcnVlYGAgZG9lcyBub3QKKyAgICAgIG5lY2Vzc2FyaWx5IG1lYW4gdGhhdCAibXNnLmdldF9jb250ZW50X21haW50eXBlKCkgPT0gJ211bHRpcGFydCciIHdpbGwKKyAgICAgIHJldHVybiB0aGUgYGBUcnVlYGAuICAgRm9yIGV4YW1wbGUsIGBgaXNfbXVsdGlwYXJ0YGAgd2lsbCByZXR1cm4gYGBUcnVlYGAKKyAgICAgIHdoZW4gdGhlIDpjbGFzczpgTWVzc2FnZWAgaXMgb2YgdHlwZSBgYG1lc3NhZ2UvcmZjODIyYGAuKQogCiAKICAgIC4uIG1ldGhvZDo6IHNldF91bml4ZnJvbSh1bml4ZnJvbSkKQEAgLTQxMCw3ICs0NzAsOCBAQAogICAgICAgdG8gYGBGYWxzZWBgLgogCiAKLSAgIC4uIG1ldGhvZDo6IHNldF9wYXJhbShwYXJhbSwgdmFsdWUsIGhlYWRlcj0nQ29udGVudC1UeXBlJywgcmVxdW90ZT1UcnVlLCBjaGFyc2V0PU5vbmUsIGxhbmd1YWdlPScnKQorICAgLi4gbWV0aG9kOjogc2V0X3BhcmFtKHBhcmFtLCB2YWx1ZSwgaGVhZGVyPSdDb250ZW50LVR5cGUnLCByZXF1b3RlPVRydWUsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyc2V0PU5vbmUsIGxhbmd1YWdlPScnLCByZXBsYWNlPUZhbHNlKQogCiAgICAgICBTZXQgYSBwYXJhbWV0ZXIgaW4gdGhlIDptYWlsaGVhZGVyOmBDb250ZW50LVR5cGVgIGhlYWRlci4gIElmIHRoZQogICAgICAgcGFyYW1ldGVyIGFscmVhZHkgZXhpc3RzIGluIHRoZSBoZWFkZXIsIGl0cyB2YWx1ZSB3aWxsIGJlIHJlcGxhY2VkIHdpdGgKQEAgLTQyNyw2ICs0ODgsMTIgQEAKICAgICAgIGxhbmd1YWdlLCBkZWZhdWx0aW5nIHRvIHRoZSBlbXB0eSBzdHJpbmcuICBCb3RoICpjaGFyc2V0KiBhbmQgKmxhbmd1YWdlKgogICAgICAgc2hvdWxkIGJlIHN0cmluZ3MuCiAKKyAgICAgIElmICpyZXBsYWNlKiBpcyBgYEZhbHNlYGAgKHRoZSBkZWZhdWx0KSB0aGUgaGVhZGVyIGlzIG1vdmVkIHRvIHRoZQorICAgICAgZW5kIG9mIHRoZSBsaXN0IG9mIGhlYWRlcnMuICBJZiAqcmVwbGFjZSogaXMgYGBUcnVlYGAsIHRoZSBoZWFkZXIKKyAgICAgIHdpbGwgYmUgdXBkYXRlZCBpbiBwbGFjZS4KKworICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQgYGByZXBsYWNlYGAga2V5d29yZCB3YXMgYWRkZWQuCisKIAogICAgLi4gbWV0aG9kOjogZGVsX3BhcmFtKHBhcmFtLCBoZWFkZXI9J2NvbnRlbnQtdHlwZScsIHJlcXVvdGU9VHJ1ZSkKIApAQCAtNTIxLDIzICs1ODgsNTYgQEAKICAgICAgIEhlcmUncyBhbiBleGFtcGxlIHRoYXQgcHJpbnRzIHRoZSBNSU1FIHR5cGUgb2YgZXZlcnkgcGFydCBvZiBhIG11bHRpcGFydAogICAgICAgbWVzc2FnZSBzdHJ1Y3R1cmU6CiAKLSAgICAgICAuLiB0ZXN0c2V0dXA6OgorICAgICAgLi4gdGVzdHNldHVwOjoKIAotICAgICAgICAgICAgPj4+IGZyb20gZW1haWwgaW1wb3J0IG1lc3NhZ2VfZnJvbV9iaW5hcnlfZmlsZQotICAgICAgICAgICAgPj4+IHdpdGggb3BlbignTGliL3Rlc3QvdGVzdF9lbWFpbC9kYXRhL21zZ18xNi50eHQnLCAncmInKSBhcyBmOgotICAgICAgICAgICAgLi4uICAgICBtc2cgPSBtZXNzYWdlX2Zyb21fYmluYXJ5X2ZpbGUoZikKKyAgICAgICAgID4+PiBmcm9tIGVtYWlsIGltcG9ydCBtZXNzYWdlX2Zyb21fYmluYXJ5X2ZpbGUKKyAgICAgICAgID4+PiB3aXRoIG9wZW4oJ0xpYi90ZXN0L3Rlc3RfZW1haWwvZGF0YS9tc2dfMTYudHh0JywgJ3JiJykgYXMgZjoKKyAgICAgICAgIC4uLiAgICAgbXNnID0gbWVzc2FnZV9mcm9tX2JpbmFyeV9maWxlKGYpCisgICAgICAgICA+Pj4gZnJvbSBlbWFpbC5pdGVyYXRvcnMgaW1wb3J0IF9zdHJ1Y3R1cmUKIAotICAgICAgIC4uIGRvY3Rlc3Q6OgorICAgICAgLi4gZG9jdGVzdDo6CiAKLSAgICAgICAgICAgID4+PiBmb3IgcGFydCBpbiBtc2cud2FsaygpOgotICAgICAgICAgICAgLi4uICAgICBwcmludChwYXJ0LmdldF9jb250ZW50X3R5cGUoKSkKLSAgICAgICAgICAgIG11bHRpcGFydC9yZXBvcnQKLSAgICAgICAgICAgIHRleHQvcGxhaW4KLSAgICAgICAgICAgIG1lc3NhZ2UvZGVsaXZlcnktc3RhdHVzCi0gICAgICAgICAgICB0ZXh0L3BsYWluCi0gICAgICAgICAgICB0ZXh0L3BsYWluCi0gICAgICAgICAgICBtZXNzYWdlL3JmYzgyMgotICAgICAgICAgICAgdGV4dC9wbGFpbgorICAgICAgICAgPj4+IGZvciBwYXJ0IGluIG1zZy53YWxrKCk6CisgICAgICAgICAuLi4gICAgIHByaW50KHBhcnQuZ2V0X2NvbnRlbnRfdHlwZSgpKQorICAgICAgICAgbXVsdGlwYXJ0L3JlcG9ydAorICAgICAgICAgdGV4dC9wbGFpbgorICAgICAgICAgbWVzc2FnZS9kZWxpdmVyeS1zdGF0dXMKKyAgICAgICAgIHRleHQvcGxhaW4KKyAgICAgICAgIHRleHQvcGxhaW4KKyAgICAgICAgIG1lc3NhZ2UvcmZjODIyCisgICAgICAgICB0ZXh0L3BsYWluCisKKyAgICAgIGBgd2Fsa2BgIGl0ZXJhdGVzIG92ZXIgdGhlIHN1YnBhcnRzIG9mIGFueSBwYXJ0IHdoZXJlCisgICAgICA6bWV0aDpgaXNfbXVsdGlwYXJ0YCByZXR1cm5zIGBgVHJ1ZWBgLCBldmVuIHRob3VnaAorICAgICAgYGBtc2cuZ2V0X2NvbnRlbnRfbWFpbnR5cGUoKSA9PSAnbXVsdGlwYXJ0J2BgIG1heSByZXR1cm4gYGBGYWxzZWBgLiAgV2UKKyAgICAgIGNhbiBzZWUgdGhpcyBpbiBvdXIgZXhhbXBsZSBieSBtYWtpbmcgdXNlIG9mIHRoZSBgYF9zdHJ1Y3R1cmVgYCBkZWJ1ZworICAgICAgaGVscGVyIGZ1bmN0aW9uOgorCisgICAgICAuLiBkb2N0ZXN0OjoKKworICAgICAgICAgPj4+IGZvciBwYXJ0IGluIG1zZy53YWxrKCk6CisgICAgICAgICAuLi4gICAgIHByaW50KHBhcnQuZ2V0X2NvbnRlbnRfbWFpbnR5cGUoKSA9PSAnbXVsdGlwYXJ0JyksCisgICAgICAgICAuLi4gICAgICAgICAgIHBhcnQuaXNfbXVsdGlwYXJ0KCkpCisgICAgICAgICBUcnVlIFRydWUKKyAgICAgICAgIEZhbHNlIEZhbHNlCisgICAgICAgICBGYWxzZSBUcnVlCisgICAgICAgICBGYWxzZSBGYWxzZQorICAgICAgICAgRmFsc2UgRmFsc2UKKyAgICAgICAgIEZhbHNlIFRydWUKKyAgICAgICAgIEZhbHNlIEZhbHNlCisgICAgICAgICA+Pj4gX3N0cnVjdHVyZShtc2cpCisgICAgICAgICBtdWx0aXBhcnQvcmVwb3J0CisgICAgICAgICAgICAgdGV4dC9wbGFpbgorICAgICAgICAgbWVzc2FnZS9kZWxpdmVyeS1zdGF0dXMKKyAgICAgICAgICAgICB0ZXh0L3BsYWluCisgICAgICAgICAgICAgdGV4dC9wbGFpbgorICAgICAgICAgbWVzc2FnZS9yZmM4MjIKKyAgICAgICAgICAgICB0ZXh0L3BsYWluCisKKyAgICAgIEhlcmUgdGhlIGBgbWVzc2FnZWBgIHBhcnRzIGFyZSBub3QgYGBtdWx0aXBhcnRzYGAsIGJ1dCB0aGV5IGRvIGNvbnRhaW4KKyAgICAgIHN1YnBhcnRzLiBgYGlzX211bHRpcGFydCgpYGAgcmV0dXJucyBgYFRydWVgYCBhbmQgYGB3YWxrYGAgZGVzY2VuZHMKKyAgICAgIGludG8gdGhlIHN1YnBhcnRzLgorCiAKICAgIDpjbGFzczpgTWVzc2FnZWAgb2JqZWN0cyBjYW4gYWxzbyBvcHRpb25hbGx5IGNvbnRhaW4gdHdvIGluc3RhbmNlIGF0dHJpYnV0ZXMsCiAgICB3aGljaCBjYW4gYmUgdXNlZCB3aGVuIGdlbmVyYXRpbmcgdGhlIHBsYWluIHRleHQgb2YgYSBNSU1FIG1lc3NhZ2UuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9lbWFpbC5taW1lLnJzdCBiL0RvYy9saWJyYXJ5L2VtYWlsLm1pbWUucnN0CmluZGV4IDRjZGIzMjIuLjFkNzAyMjUgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2VtYWlsLm1pbWUucnN0CisrKyBiL0RvYy9saWJyYXJ5L2VtYWlsLm1pbWUucnN0CkBAIC0xOTQsNyArMTk0LDcgQEAKICAgIG1pbm9yIHR5cGUgYW5kIGRlZmF1bHRzIHRvIDptaW1ldHlwZTpgcGxhaW5gLiAgKl9jaGFyc2V0KiBpcyB0aGUgY2hhcmFjdGVyCiAgICBzZXQgb2YgdGhlIHRleHQgYW5kIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCB0byB0aGUKICAgIDpjbGFzczpgfmVtYWlsLm1pbWUubm9ubXVsdGlwYXJ0Lk1JTUVOb25NdWx0aXBhcnRgIGNvbnN0cnVjdG9yOyBpdCBkZWZhdWx0cwotICAgdG8gYGB1cy1hc2NpaWBgIGlmIHRoZSBzdHJpbmcgY29udGFpbnMgb25seSBgYGFzY2lpYGAgY29kZXBvaW50cywgYW5kCisgICB0byBgYHVzLWFzY2lpYGAgaWYgdGhlIHN0cmluZyBjb250YWlucyBvbmx5IGBgYXNjaWlgYCBjb2RlIHBvaW50cywgYW5kCiAgICBgYHV0Zi04YGAgb3RoZXJ3aXNlLgogCiAgICBVbmxlc3MgdGhlICpfY2hhcnNldCogYXJndW1lbnQgaXMgZXhwbGljaXRseSBzZXQgdG8gYGBOb25lYGAsIHRoZQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZW1haWwucGFyc2VyLnJzdCBiL0RvYy9saWJyYXJ5L2VtYWlsLnBhcnNlci5yc3QKaW5kZXggZWU2YWYzZi4uMTc3YWRjNiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZW1haWwucGFyc2VyLnJzdAorKysgYi9Eb2MvbGlicmFyeS9lbWFpbC5wYXJzZXIucnN0CkBAIC02MCwxNSArNjAsMTggQEAKIEhlcmUgaXMgdGhlIEFQSSBmb3IgdGhlIDpjbGFzczpgRmVlZFBhcnNlcmA6CiAKIAotLi4gY2xhc3M6OiBGZWVkUGFyc2VyKF9mYWN0b3J5PWVtYWlsLm1lc3NhZ2UuTWVzc2FnZSwgKiwgcG9saWN5PXBvbGljeS5kZWZhdWx0KQorLi4gY2xhc3M6OiBGZWVkUGFyc2VyKF9mYWN0b3J5PWVtYWlsLm1lc3NhZ2UuTWVzc2FnZSwgKiwgcG9saWN5PXBvbGljeS5jb21wYXQzMikKIAogICAgQ3JlYXRlIGEgOmNsYXNzOmBGZWVkUGFyc2VyYCBpbnN0YW5jZS4gIE9wdGlvbmFsICpfZmFjdG9yeSogaXMgYSBuby1hcmd1bWVudAogICAgY2FsbGFibGUgdGhhdCB3aWxsIGJlIGNhbGxlZCB3aGVuZXZlciBhIG5ldyBtZXNzYWdlIG9iamVjdCBpcyBuZWVkZWQuICBJdAogICAgZGVmYXVsdHMgdG8gdGhlIDpjbGFzczpgZW1haWwubWVzc2FnZS5NZXNzYWdlYCBjbGFzcy4KIAotICAgVGhlICpwb2xpY3kqIGtleXdvcmQgc3BlY2lmaWVzIGEgOm1vZDpgfmVtYWlsLnBvbGljeWAgb2JqZWN0IHRoYXQgY29udHJvbHMgYQotICAgbnVtYmVyIG9mIGFzcGVjdHMgb2YgdGhlIHBhcnNlcidzIG9wZXJhdGlvbi4gIFRoZSBkZWZhdWx0IHBvbGljeSBtYWludGFpbnMKLSAgIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCisgICBJZiAqcG9saWN5KiBpcyBzcGVjaWZpZWQgKGl0IG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgYSA6bW9kOmB+ZW1haWwucG9saWN5YAorICAgY2xhc3MpIHVzZSB0aGUgcnVsZXMgaXQgc3BlY2lmaWVzIHRvIHVwZGF0ZSB0aGUgcmVwcmVzZW50YXRpb24gb2YgdGhlCisgICBtZXNzYWdlLiAgSWYgKnBvbGljeSogaXMgbm90IHNldCwgdXNlIHRoZSA6Y2xhc3M6YGNvbXBhdDMyCisgICA8ZW1haWwucG9saWN5LkNvbXBhdDMyPmAgcG9saWN5LCB3aGljaCBtYWludGFpbnMgYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoCisgICB0aGUgUHl0aG9uIDMuMiB2ZXJzaW9uIG9mIHRoZSBlbWFpbCBwYWNrYWdlLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlIHRoZQorICAgOm1vZDpgfmVtYWlsLnBvbGljeWAgZG9jdW1lbnRhdGlvbi4KIAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMgQWRkZWQgdGhlICpwb2xpY3kqIGtleXdvcmQuCiAKQEAgLTExMyw3ICsxMTYsNyBAQAogICAgVGhlIEJ5dGVzSGVhZGVyUGFyc2VyIGNsYXNzLgogCiAKLS4uIGNsYXNzOjogUGFyc2VyKF9jbGFzcz1lbWFpbC5tZXNzYWdlLk1lc3NhZ2UsICosIHBvbGljeT1wb2xpY3kuZGVmYXVsdCkKKy4uIGNsYXNzOjogUGFyc2VyKF9jbGFzcz1lbWFpbC5tZXNzYWdlLk1lc3NhZ2UsICosIHBvbGljeT1wb2xpY3kuY29tcGF0MzIpCiAKICAgIFRoZSBjb25zdHJ1Y3RvciBmb3IgdGhlIDpjbGFzczpgUGFyc2VyYCBjbGFzcyB0YWtlcyBhbiBvcHRpb25hbCBhcmd1bWVudAogICAgKl9jbGFzcyouICBUaGlzIG11c3QgYmUgYSBjYWxsYWJsZSBmYWN0b3J5IChzdWNoIGFzIGEgZnVuY3Rpb24gb3IgYSBjbGFzcyksIGFuZApAQCAtMTIxLDkgKzEyNCwxMiBAQAogICAgOmNsYXNzOmB+ZW1haWwubWVzc2FnZS5NZXNzYWdlYCAoc2VlIDptb2Q6YGVtYWlsLm1lc3NhZ2VgKS4gIFRoZSBmYWN0b3J5IHdpbGwKICAgIGJlIGNhbGxlZCB3aXRob3V0IGFyZ3VtZW50cy4KIAotICAgVGhlICpwb2xpY3kqIGtleXdvcmQgc3BlY2lmaWVzIGEgOm1vZDpgfmVtYWlsLnBvbGljeWAgb2JqZWN0IHRoYXQgY29udHJvbHMgYQotICAgbnVtYmVyIG9mIGFzcGVjdHMgb2YgdGhlIHBhcnNlcidzIG9wZXJhdGlvbi4gIFRoZSBkZWZhdWx0IHBvbGljeSBtYWludGFpbnMKLSAgIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCisgICBJZiAqcG9saWN5KiBpcyBzcGVjaWZpZWQgKGl0IG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgYSA6bW9kOmB+ZW1haWwucG9saWN5YAorICAgY2xhc3MpIHVzZSB0aGUgcnVsZXMgaXQgc3BlY2lmaWVzIHRvIHVwZGF0ZSB0aGUgcmVwcmVzZW50YXRpb24gb2YgdGhlCisgICBtZXNzYWdlLiAgSWYgKnBvbGljeSogaXMgbm90IHNldCwgdXNlIHRoZSA6Y2xhc3M6YGNvbXBhdDMyCisgICA8ZW1haWwucG9saWN5LkNvbXBhdDMyPmAgcG9saWN5LCB3aGljaCBtYWludGFpbnMgYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoCisgICB0aGUgUHl0aG9uIDMuMiB2ZXJzaW9uIG9mIHRoZSBlbWFpbCBwYWNrYWdlLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlIHRoZQorICAgOm1vZDpgfmVtYWlsLnBvbGljeWAgZG9jdW1lbnRhdGlvbi4KIAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKICAgICAgIFJlbW92ZWQgdGhlICpzdHJpY3QqIGFyZ3VtZW50IHRoYXQgd2FzIGRlcHJlY2F0ZWQgaW4gMi40LiAgQWRkZWQgdGhlCkBAIC0xNDAsNyArMTQ2LDcgQEAKICAgICAgIG1ldGhvZHMgb24gZmlsZS1saWtlIG9iamVjdHMuCiAKICAgICAgIFRoZSB0ZXh0IGNvbnRhaW5lZCBpbiAqZnAqIG11c3QgYmUgZm9ybWF0dGVkIGFzIGEgYmxvY2sgb2YgOnJmYzpgMjgyMmAKLSAgICAgIHN0eWxlIGhlYWRlcnMgYW5kIGhlYWRlciBjb250aW51YXRpb24gbGluZXMsIG9wdGlvbmFsbHkgcHJlY2VkZWQgYnkgYQorICAgICAgc3R5bGUgaGVhZGVycyBhbmQgaGVhZGVyIGNvbnRpbnVhdGlvbiBsaW5lcywgb3B0aW9uYWxseSBwcmVjZWRlZCBieSBhbgogICAgICAgZW52ZWxvcGUgaGVhZGVyLiAgVGhlIGhlYWRlciBibG9jayBpcyB0ZXJtaW5hdGVkIGVpdGhlciBieSB0aGUgZW5kIG9mIHRoZQogICAgICAgZGF0YSBvciBieSBhIGJsYW5rIGxpbmUuICBGb2xsb3dpbmcgdGhlIGhlYWRlciBibG9jayBpcyB0aGUgYm9keSBvZiB0aGUKICAgICAgIG1lc3NhZ2UgKHdoaWNoIG1heSBjb250YWluIE1JTUUtZW5jb2RlZCBzdWJwYXJ0cykuCkBAIC0xNTksMjAgKzE2NSwyMyBAQAogICAgICAgT3B0aW9uYWwgKmhlYWRlcnNvbmx5KiBpcyBhcyB3aXRoIHRoZSA6bWV0aDpgcGFyc2VgIG1ldGhvZC4KIAogCi0uLiBjbGFzczo6IEJ5dGVzUGFyc2VyKF9jbGFzcz1lbWFpbC5tZXNzYWdlLk1lc3NhZ2UsICosIHBvbGljeT1wb2xpY3kuZGVmYXVsdCkKKy4uIGNsYXNzOjogQnl0ZXNQYXJzZXIoX2NsYXNzPWVtYWlsLm1lc3NhZ2UuTWVzc2FnZSwgKiwgcG9saWN5PXBvbGljeS5jb21wYXQzMikKIAogICAgVGhpcyBjbGFzcyBpcyBleGFjdGx5IHBhcmFsbGVsIHRvIDpjbGFzczpgUGFyc2VyYCwgYnV0IGhhbmRsZXMgYnl0ZXMgaW5wdXQuCiAgICBUaGUgKl9jbGFzcyogYW5kICpzdHJpY3QqIGFyZ3VtZW50cyBhcmUgaW50ZXJwcmV0ZWQgaW4gdGhlIHNhbWUgd2F5IGFzIGZvcgogICAgdGhlIDpjbGFzczpgUGFyc2VyYCBjb25zdHJ1Y3Rvci4KIAotICAgVGhlICpwb2xpY3kqIGtleXdvcmQgc3BlY2lmaWVzIGEgOm1vZDpgfmVtYWlsLnBvbGljeWAgb2JqZWN0IHRoYXQKLSAgIGNvbnRyb2xzIGEgbnVtYmVyIG9mIGFzcGVjdHMgb2YgdGhlIHBhcnNlcidzIG9wZXJhdGlvbi4gIFRoZSBkZWZhdWx0Ci0gICBwb2xpY3kgbWFpbnRhaW5zIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCisgICBJZiAqcG9saWN5KiBpcyBzcGVjaWZpZWQgKGl0IG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgYSA6bW9kOmB+ZW1haWwucG9saWN5YAorICAgY2xhc3MpIHVzZSB0aGUgcnVsZXMgaXQgc3BlY2lmaWVzIHRvIHVwZGF0ZSB0aGUgcmVwcmVzZW50YXRpb24gb2YgdGhlCisgICBtZXNzYWdlLiAgSWYgKnBvbGljeSogaXMgbm90IHNldCwgdXNlIHRoZSA6Y2xhc3M6YGNvbXBhdDMyCisgICA8ZW1haWwucG9saWN5LkNvbXBhdDMyPmAgcG9saWN5LCB3aGljaCBtYWludGFpbnMgYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoCisgICB0aGUgUHl0aG9uIDMuMiB2ZXJzaW9uIG9mIHRoZSBlbWFpbCBwYWNrYWdlLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlIHRoZQorICAgOm1vZDpgfmVtYWlsLnBvbGljeWAgZG9jdW1lbnRhdGlvbi4KIAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKICAgICAgIFJlbW92ZWQgdGhlICpzdHJpY3QqIGFyZ3VtZW50LiAgQWRkZWQgdGhlICpwb2xpY3kqIGtleXdvcmQuCiAKLSAgIC4uIG1ldGhvZDo6IHBhcnNlKGZwLCBoZWFkZXJvbmx5PUZhbHNlKQorICAgLi4gbWV0aG9kOjogcGFyc2UoZnAsIGhlYWRlcnNvbmx5PUZhbHNlKQogCiAgICAgICBSZWFkIGFsbCB0aGUgZGF0YSBmcm9tIHRoZSBiaW5hcnkgZmlsZS1saWtlIG9iamVjdCAqZnAqLCBwYXJzZSB0aGUKICAgICAgIHJlc3VsdGluZyBieXRlcywgYW5kIHJldHVybiB0aGUgbWVzc2FnZSBvYmplY3QuICAqZnAqIG11c3Qgc3VwcG9ydApAQCAtMTgwLDcgKzE4OSw3IEBACiAgICAgICBtZXRob2RzIG9uIGZpbGUtbGlrZSBvYmplY3RzLgogCiAgICAgICBUaGUgYnl0ZXMgY29udGFpbmVkIGluICpmcCogbXVzdCBiZSBmb3JtYXR0ZWQgYXMgYSBibG9jayBvZiA6cmZjOmAyODIyYAotICAgICAgc3R5bGUgaGVhZGVycyBhbmQgaGVhZGVyIGNvbnRpbnVhdGlvbiBsaW5lcywgb3B0aW9uYWxseSBwcmVjZWRlZCBieSBhCisgICAgICBzdHlsZSBoZWFkZXJzIGFuZCBoZWFkZXIgY29udGludWF0aW9uIGxpbmVzLCBvcHRpb25hbGx5IHByZWNlZGVkIGJ5IGFuCiAgICAgICBlbnZlbG9wZSBoZWFkZXIuICBUaGUgaGVhZGVyIGJsb2NrIGlzIHRlcm1pbmF0ZWQgZWl0aGVyIGJ5IHRoZSBlbmQgb2YgdGhlCiAgICAgICBkYXRhIG9yIGJ5IGEgYmxhbmsgbGluZS4gIEZvbGxvd2luZyB0aGUgaGVhZGVyIGJsb2NrIGlzIHRoZSBib2R5IG9mIHRoZQogICAgICAgbWVzc2FnZSAod2hpY2ggbWF5IGNvbnRhaW4gTUlNRS1lbmNvZGVkIHN1YnBhcnRzLCBpbmNsdWRpbmcgc3VicGFydHMKQEAgLTIwOSw3ICsyMTgsNyBAQAogLi4gY3VycmVudG1vZHVsZTo6IGVtYWlsCiAKIC4uIGZ1bmN0aW9uOjogbWVzc2FnZV9mcm9tX3N0cmluZyhzLCBfY2xhc3M9ZW1haWwubWVzc2FnZS5NZXNzYWdlLCAqLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9saWN5PXBvbGljeS5kZWZhdWx0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvbGljeT1wb2xpY3kuY29tcGF0MzIpCiAKICAgIFJldHVybiBhIG1lc3NhZ2Ugb2JqZWN0IHN0cnVjdHVyZSBmcm9tIGEgc3RyaW5nLiAgVGhpcyBpcyBleGFjdGx5IGVxdWl2YWxlbnQgdG8KICAgIGBgUGFyc2VyKCkucGFyc2VzdHIocylgYC4gICpfY2xhc3MqIGFuZCAqcG9saWN5KiBhcmUgaW50ZXJwcmV0ZWQgYXMKQEAgLTIxOSw3ICsyMjgsNyBAQAogICAgICAgUmVtb3ZlZCB0aGUgKnN0cmljdCogYXJndW1lbnQuICBBZGRlZCB0aGUgKnBvbGljeSoga2V5d29yZC4KIAogLi4gZnVuY3Rpb246OiBtZXNzYWdlX2Zyb21fYnl0ZXMocywgX2NsYXNzPWVtYWlsLm1lc3NhZ2UuTWVzc2FnZSwgKiwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9saWN5PXBvbGljeS5kZWZhdWx0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9saWN5PXBvbGljeS5jb21wYXQzMikKIAogICAgUmV0dXJuIGEgbWVzc2FnZSBvYmplY3Qgc3RydWN0dXJlIGZyb20gYSBieXRlIHN0cmluZy4gIFRoaXMgaXMgZXhhY3RseQogICAgZXF1aXZhbGVudCB0byBgYEJ5dGVzUGFyc2VyKCkucGFyc2VieXRlcyhzKWBgLiAgT3B0aW9uYWwgKl9jbGFzcyogYW5kCkBAIC0yMzEsNyArMjQwLDcgQEAKICAgICAgIFJlbW92ZWQgdGhlICpzdHJpY3QqIGFyZ3VtZW50LiAgQWRkZWQgdGhlICpwb2xpY3kqIGtleXdvcmQuCiAKIC4uIGZ1bmN0aW9uOjogbWVzc2FnZV9mcm9tX2ZpbGUoZnAsIF9jbGFzcz1lbWFpbC5tZXNzYWdlLk1lc3NhZ2UsICosIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9saWN5PXBvbGljeS5kZWZhdWx0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2xpY3k9cG9saWN5LmNvbXBhdDMyKQogCiAgICBSZXR1cm4gYSBtZXNzYWdlIG9iamVjdCBzdHJ1Y3R1cmUgdHJlZSBmcm9tIGFuIG9wZW4gOnRlcm06YGZpbGUgb2JqZWN0YC4KICAgIFRoaXMgaXMgZXhhY3RseSBlcXVpdmFsZW50IHRvIGBgUGFyc2VyKCkucGFyc2UoZnApYGAuICAqX2NsYXNzKgpAQCAtMjQyLDcgKzI1MSw3IEBACiAgICAgICBSZW1vdmVkIHRoZSAqc3RyaWN0KiBhcmd1bWVudC4gIEFkZGVkIHRoZSAqcG9saWN5KiBrZXl3b3JkLgogCiAuLiBmdW5jdGlvbjo6IG1lc3NhZ2VfZnJvbV9iaW5hcnlfZmlsZShmcCwgX2NsYXNzPWVtYWlsLm1lc3NhZ2UuTWVzc2FnZSwgKiwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9saWN5PXBvbGljeS5kZWZhdWx0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9saWN5PXBvbGljeS5jb21wYXQzMikKIAogICAgUmV0dXJuIGEgbWVzc2FnZSBvYmplY3Qgc3RydWN0dXJlIHRyZWUgZnJvbSBhbiBvcGVuIGJpbmFyeSA6dGVybTpgZmlsZQogICAgb2JqZWN0YC4gIFRoaXMgaXMgZXhhY3RseSBlcXVpdmFsZW50IHRvIGBgQnl0ZXNQYXJzZXIoKS5wYXJzZShmcClgYC4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2VtYWlsLnBvbGljeS5yc3QgYi9Eb2MvbGlicmFyeS9lbWFpbC5wb2xpY3kucnN0CmluZGV4IGNiMjAyM2MuLmQ0ZTNmYzEgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2VtYWlsLnBvbGljeS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZW1haWwucG9saWN5LnJzdApAQCAtOTcsNiArOTcsMTcgQEAKIGBgc2VuZG1haWwnc2BgIGBgc3RkaW5gYCwgd2hlcmUgdGhlIGRlZmF1bHQgcG9saWN5IHdvdWxkIHVzZSBgYFxuYGAgbGluZQogc2VwYXJhdG9ycy4KIAorU29tZSBlbWFpbCBwYWNrYWdlIG1ldGhvZHMgYWNjZXB0IGEgKnBvbGljeSoga2V5d29yZCBhcmd1bWVudCwgYWxsb3dpbmcgdGhlCitwb2xpY3kgdG8gYmUgb3ZlcnJpZGRlbiBmb3IgdGhhdCBtZXRob2QuICBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBjb2RlIHVzZXMKK3RoZSA6bWV0aDpgfmVtYWlsLm1lc3NhZ2UuTWVzc2FnZS5hc19ieXRlc2AgbWV0aG9kIG9mIHRoZSAqbXNnKiBvYmplY3QgZnJvbQordGhlIHByZXZpb3VzIGV4YW1wbGUgYW5kIHdyaXRlcyB0aGUgbWVzc2FnZSB0byBhIGZpbGUgdXNpbmcgdGhlIG5hdGl2ZSBsaW5lCitzZXBhcmF0b3JzIGZvciB0aGUgcGxhdGZvcm0gb24gd2hpY2ggaXQgaXMgcnVubmluZzo6CisKKyAgID4+PiBpbXBvcnQgb3MKKyAgID4+PiB3aXRoIG9wZW4oJ2NvbnZlcnRlZC50eHQnLCAnd2InKSBhcyBmOgorICAgLi4uICAgICBmLndyaXRlKG1zZy5hc19ieXRlcyhwb2xpY3k9bXNnLnBvbGljeS5jbG9uZShsaW5lc2VwPW9zLmxpbmVzZXApKSkKKyAgIDE3CisKIFBvbGljeSBvYmplY3RzIGNhbiBhbHNvIGJlIGNvbWJpbmVkIHVzaW5nIHRoZSBhZGRpdGlvbiBvcGVyYXRvciwgcHJvZHVjaW5nIGEKIHBvbGljeSBvYmplY3Qgd2hvc2Ugc2V0dGluZ3MgYXJlIGEgY29tYmluYXRpb24gb2YgdGhlIG5vbi1kZWZhdWx0IHZhbHVlcyBvZiB0aGUKIHN1bW1lZCBvYmplY3RzOjoKQEAgLTM2MCw3ICszNzEsNyBAQAogICAgdG8pIDpyZmM6YDUzMjJgLCA6cmZjOmAyMDQ3YCwgYW5kIHRoZSBjdXJyZW50IE1JTUUgUkZDcy4KIAogICAgVGhpcyBwb2xpY3kgYWRkcyBuZXcgaGVhZGVyIHBhcnNpbmcgYW5kIGZvbGRpbmcgYWxnb3JpdGhtcy4gIEluc3RlYWQgb2YKLSAgIHNpbXBsZSBzdHJpbmdzLCBoZWFkZXJzIGFyZSBjdXN0b20gb2JqZWN0cyB3aXRoIGN1c3RvbSBhdHRyaWJ1dGVzIGRlcGVuZGluZworICAgc2ltcGxlIHN0cmluZ3MsIGhlYWRlcnMgYXJlIGBgc3RyYGAgc3ViY2xhc3NlcyB3aXRoIGF0dHJpYnV0ZXMgdGhhdCBkZXBlbmQKICAgIG9uIHRoZSB0eXBlIG9mIHRoZSBmaWVsZC4gIFRoZSBwYXJzaW5nIGFuZCBmb2xkaW5nIGFsZ29yaXRobSBmdWxseSBpbXBsZW1lbnQKICAgIDpyZmM6YDIwNDdgIGFuZCA6cmZjOmA1MzIyYC4KIApAQCAtMzk3LDYgKzQwOCwyMCBAQAogICAgICAgZmllbGRzIGFyZSB0cmVhdGVkIGFzIHVuc3RydWN0dXJlZC4gIFRoaXMgbGlzdCB3aWxsIGJlIGNvbXBsZXRlZCBiZWZvcmUKICAgICAgIHRoZSBleHRlbnNpb24gaXMgbWFya2VkIHN0YWJsZS4pCiAKKyAgIC4uIGF0dHJpYnV0ZTo6IGNvbnRlbnRfbWFuYWdlcgorCisgICAgICBBbiBvYmplY3Qgd2l0aCBhdCBsZWFzdCB0d28gbWV0aG9kczogZ2V0X2NvbnRlbnQgYW5kIHNldF9jb250ZW50LiAgV2hlbgorICAgICAgdGhlIDptZXRoOmB+ZW1haWwubWVzc2FnZS5NZXNzYWdlLmdldF9jb250ZW50YCBvcgorICAgICAgOm1ldGg6YH5lbWFpbC5tZXNzYWdlLk1lc3NhZ2Uuc2V0X2NvbnRlbnRgIG1ldGhvZCBvZiBhCisgICAgICA6Y2xhc3M6YH5lbWFpbC5tZXNzYWdlLk1lc3NhZ2VgIG9iamVjdCBpcyBjYWxsZWQsIGl0IGNhbGxzIHRoZQorICAgICAgY29ycmVzcG9uZGluZyBtZXRob2Qgb2YgdGhpcyBvYmplY3QsIHBhc3NpbmcgaXQgdGhlIG1lc3NhZ2Ugb2JqZWN0IGFzIGl0cworICAgICAgZmlyc3QgYXJndW1lbnQsIGFuZCBhbnkgYXJndW1lbnRzIG9yIGtleXdvcmRzIHRoYXQgd2VyZSBwYXNzZWQgdG8gaXQgYXMKKyAgICAgIGFkZGl0aW9uYWwgYXJndW1lbnRzLiAgQnkgZGVmYXVsdCBgYGNvbnRlbnRfbWFuYWdlcmBgIGlzIHNldCB0bworICAgICAgOmRhdGE6YH5lbWFpbC5jb250ZW50bWFuYWdlci5yYXdfZGF0YV9tYW5hZ2VyYC4KKworICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogICAgVGhlIGNsYXNzIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgY29uY3JldGUgaW1wbGVtZW50YXRpb25zIG9mIHRoZSBhYnN0cmFjdAogICAgbWV0aG9kcyBvZiA6Y2xhc3M6YFBvbGljeWA6CiAKQEAgLTQxNiw3ICs0NDEsNyBAQAogICAgICAgVGhlIG5hbWUgaXMgcmV0dXJuZWQgdW5jaGFuZ2VkLiAgSWYgdGhlIGlucHV0IHZhbHVlIGhhcyBhIGBgbmFtZWBgCiAgICAgICBhdHRyaWJ1dGUgYW5kIGl0IG1hdGNoZXMgKm5hbWUqIGlnbm9yaW5nIGNhc2UsIHRoZSB2YWx1ZSBpcyByZXR1cm5lZAogICAgICAgdW5jaGFuZ2VkLiAgT3RoZXJ3aXNlIHRoZSAqbmFtZSogYW5kICp2YWx1ZSogYXJlIHBhc3NlZCB0bwotICAgICAgYGBoZWFkZXJfZmFjdG9yeWBgLCBhbmQgdGhlIHJlc3VsdGluZyBjdXN0b20gaGVhZGVyIG9iamVjdCBpcyByZXR1cm5lZCBhcworICAgICAgYGBoZWFkZXJfZmFjdG9yeWBgLCBhbmQgdGhlIHJlc3VsdGluZyBoZWFkZXIgb2JqZWN0IGlzIHJldHVybmVkIGFzCiAgICAgICB0aGUgdmFsdWUuICBJbiB0aGlzIGNhc2UgYSBgYFZhbHVlRXJyb3JgYCBpcyByYWlzZWQgaWYgdGhlIGlucHV0IHZhbHVlCiAgICAgICBjb250YWlucyBDUiBvciBMRiBjaGFyYWN0ZXJzLgogCkBAIC00MjQsNyArNDQ5LDcgQEAKIAogICAgICAgSWYgdGhlIHZhbHVlIGhhcyBhIGBgbmFtZWBgIGF0dHJpYnV0ZSwgaXQgaXMgcmV0dXJuZWQgdG8gdW5tb2RpZmllZC4KICAgICAgIE90aGVyd2lzZSB0aGUgKm5hbWUqLCBhbmQgdGhlICp2YWx1ZSogd2l0aCBhbnkgQ1Igb3IgTEYgY2hhcmFjdGVycwotICAgICAgcmVtb3ZlZCwgYXJlIHBhc3NlZCB0byB0aGUgYGBoZWFkZXJfZmFjdG9yeWBgLCBhbmQgdGhlIHJlc3VsdGluZyBjdXN0b20KKyAgICAgIHJlbW92ZWQsIGFyZSBwYXNzZWQgdG8gdGhlIGBgaGVhZGVyX2ZhY3RvcnlgYCwgYW5kIHRoZSByZXN1bHRpbmcKICAgICAgIGhlYWRlciBvYmplY3QgaXMgcmV0dXJuZWQuICBBbnkgc3Vycm9nYXRlZXNjYXBlZCBieXRlcyBnZXQgdHVybmVkIGludG8KICAgICAgIHRoZSB1bmljb2RlIHVua25vd24tY2hhcmFjdGVyIGdseXBoLgogCkBAIC00MzQsOSArNDU5LDkgQEAKICAgICAgIEEgdmFsdWUgaXMgY29uc2lkZXJlZCB0byBiZSBhICdzb3VyY2UgdmFsdWUnIGlmIGFuZCBvbmx5IGlmIGl0IGRvZXMgbm90CiAgICAgICBoYXZlIGEgYGBuYW1lYGAgYXR0cmlidXRlIChoYXZpbmcgYSBgYG5hbWVgYCBhdHRyaWJ1dGUgbWVhbnMgaXQgaXMgYQogICAgICAgaGVhZGVyIG9iamVjdCBvZiBzb21lIHNvcnQpLiAgSWYgYSBzb3VyY2UgdmFsdWUgbmVlZHMgdG8gYmUgcmVmb2xkZWQKLSAgICAgIGFjY29yZGluZyB0byB0aGUgcG9saWN5LCBpdCBpcyBjb252ZXJ0ZWQgaW50byBhIGN1c3RvbSBoZWFkZXIgb2JqZWN0IGJ5CisgICAgICBhY2NvcmRpbmcgdG8gdGhlIHBvbGljeSwgaXQgaXMgY29udmVydGVkIGludG8gYSBoZWFkZXIgb2JqZWN0IGJ5CiAgICAgICBwYXNzaW5nIHRoZSAqbmFtZSogYW5kIHRoZSAqdmFsdWUqIHdpdGggYW55IENSIGFuZCBMRiBjaGFyYWN0ZXJzIHJlbW92ZWQKLSAgICAgIHRvIHRoZSBgYGhlYWRlcl9mYWN0b3J5YGAuICBGb2xkaW5nIG9mIGEgY3VzdG9tIGhlYWRlciBvYmplY3QgaXMgZG9uZSBieQorICAgICAgdG8gdGhlIGBgaGVhZGVyX2ZhY3RvcnlgYC4gIEZvbGRpbmcgb2YgYSBoZWFkZXIgb2JqZWN0IGlzIGRvbmUgYnkKICAgICAgIGNhbGxpbmcgaXRzIGBgZm9sZGBgIG1ldGhvZCB3aXRoIHRoZSBjdXJyZW50IHBvbGljeS4KIAogICAgICAgU291cmNlIHZhbHVlcyBhcmUgc3BsaXQgaW50byBsaW5lcyB1c2luZyA6bWV0aDpgfnN0ci5zcGxpdGxpbmVzYC4gIElmCkBAIC00OTEsMjMgKzUxNiwyMyBAQAogdGhlIGVtYWlsIHBhY2thZ2UgaXMgY2hhbmdlZCBmcm9tIHRoZSBQeXRob24gMy4yIEFQSSBpbiB0aGUgZm9sbG93aW5nIHdheXM6CiAKICAgICogU2V0dGluZyBhIGhlYWRlciBvbiBhIDpjbGFzczpgfmVtYWlsLm1lc3NhZ2UuTWVzc2FnZWAgcmVzdWx0cyBpbiB0aGF0Ci0gICAgIGhlYWRlciBiZWluZyBwYXJzZWQgYW5kIGEgY3VzdG9tIGhlYWRlciBvYmplY3QgY3JlYXRlZC4KKyAgICAgaGVhZGVyIGJlaW5nIHBhcnNlZCBhbmQgYSBoZWFkZXIgb2JqZWN0IGNyZWF0ZWQuCiAKICAgICogRmV0Y2hpbmcgYSBoZWFkZXIgdmFsdWUgZnJvbSBhIDpjbGFzczpgfmVtYWlsLm1lc3NhZ2UuTWVzc2FnZWAgcmVzdWx0cwotICAgICBpbiB0aGF0IGhlYWRlciBiZWluZyBwYXJzZWQgYW5kIGEgY3VzdG9tIGhlYWRlciBvYmplY3QgY3JlYXRlZCBhbmQKKyAgICAgaW4gdGhhdCBoZWFkZXIgYmVpbmcgcGFyc2VkIGFuZCBhIGhlYWRlciBvYmplY3QgY3JlYXRlZCBhbmQKICAgICAgcmV0dXJuZWQuCiAKLSAgICogQW55IGN1c3RvbSBoZWFkZXIgb2JqZWN0LCBvciBhbnkgaGVhZGVyIHRoYXQgaXMgcmVmb2xkZWQgZHVlIHRvIHRoZQorICAgKiBBbnkgaGVhZGVyIG9iamVjdCwgb3IgYW55IGhlYWRlciB0aGF0IGlzIHJlZm9sZGVkIGR1ZSB0byB0aGUKICAgICAgcG9saWN5IHNldHRpbmdzLCBpcyBmb2xkZWQgdXNpbmcgYW4gYWxnb3JpdGhtIHRoYXQgZnVsbHkgaW1wbGVtZW50cyB0aGUKICAgICAgUkZDIGZvbGRpbmcgYWxnb3JpdGhtcywgaW5jbHVkaW5nIGtub3dpbmcgd2hlcmUgZW5jb2RlZCB3b3JkcyBhcmUgcmVxdWlyZWQKICAgICAgYW5kIGFsbG93ZWQuCiAKIEZyb20gdGhlIGFwcGxpY2F0aW9uIHZpZXcsIHRoaXMgbWVhbnMgdGhhdCBhbnkgaGVhZGVyIG9idGFpbmVkIHRocm91Z2ggdGhlCi06Y2xhc3M6YH5lbWFpbC5tZXNzYWdlLk1lc3NhZ2VgIGlzIGEgY3VzdG9tIGhlYWRlciBvYmplY3Qgd2l0aCBjdXN0b20KKzpjbGFzczpgfmVtYWlsLm1lc3NhZ2UuTWVzc2FnZWAgaXMgYSBoZWFkZXIgb2JqZWN0IHdpdGggZXh0cmEKIGF0dHJpYnV0ZXMsIHdob3NlIHN0cmluZyB2YWx1ZSBpcyB0aGUgZnVsbHkgZGVjb2RlZCB1bmljb2RlIHZhbHVlIG9mIHRoZQogaGVhZGVyLiAgTGlrZXdpc2UsIGEgaGVhZGVyIG1heSBiZSBhc3NpZ25lZCBhIG5ldyB2YWx1ZSwgb3IgYSBuZXcgaGVhZGVyCiBjcmVhdGVkLCB1c2luZyBhIHVuaWNvZGUgc3RyaW5nLCBhbmQgdGhlIHBvbGljeSB3aWxsIHRha2UgY2FyZSBvZiBjb252ZXJ0aW5nCiB0aGUgdW5pY29kZSBzdHJpbmcgaW50byB0aGUgY29ycmVjdCBSRkMgZW5jb2RlZCBmb3JtLgogCi1UaGUgY3VzdG9tIGhlYWRlciBvYmplY3RzIGFuZCB0aGVpciBhdHRyaWJ1dGVzIGFyZSBkZXNjcmliZWQgaW4KK1RoZSBoZWFkZXIgb2JqZWN0cyBhbmQgdGhlaXIgYXR0cmlidXRlcyBhcmUgZGVzY3JpYmVkIGluCiA6bW9kOmB+ZW1haWwuaGVhZGVycmVnaXN0cnlgLgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZW1haWwucnN0IGIvRG9jL2xpYnJhcnkvZW1haWwucnN0CmluZGV4IGE2Y2JiY2UuLjk1YzBhMmYgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2VtYWlsLnJzdAorKysgYi9Eb2MvbGlicmFyeS9lbWFpbC5yc3QKQEAgLTUzLDYgKzUzLDcgQEAKICAgIGVtYWlsLmdlbmVyYXRvci5yc3QKICAgIGVtYWlsLnBvbGljeS5yc3QKICAgIGVtYWlsLmhlYWRlcnJlZ2lzdHJ5LnJzdAorICAgZW1haWwuY29udGVudG1hbmFnZXIucnN0CiAgICBlbWFpbC5taW1lLnJzdAogICAgZW1haWwuaGVhZGVyLnJzdAogICAgZW1haWwuY2hhcnNldC5yc3QKQEAgLTkwLDE1ICs5MSwxOSBAQAogKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiB8IDpjb25zdDpgMi41YCAgfCBQeXRob24gMi4yLjIrIGFuZCBQeXRob24gMi4zIHwgUHl0aG9uIDIuMSB0byAyLjUgICAgIHwKICstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCA6Y29uc3Q6YDMuMGAgIHwgUHl0aG9uIDIuNCAgICAgICAgICAgICAgICAgICB8IFB5dGhvbiAyLjMgdG8gMi41ICAgICB8Cit8IDpjb25zdDpgMy4wYCAgfCBQeXRob24gMi40IGFuZCBQeXRob24gMi41ICAgIHwgUHl0aG9uIDIuMyB0byAyLjYgICAgIHwKICstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCA6Y29uc3Q6YDQuMGAgIHwgUHl0aG9uIDIuNSAgICAgICAgICAgICAgICAgICB8IFB5dGhvbiAyLjMgdG8gMi41ICAgICB8Cit8IDpjb25zdDpgNC4wYCAgfCBQeXRob24gMi41IHRvIFB5dGhvbiAyLjcgICAgIHwgUHl0aG9uIDIuMyB0byAyLjcgICAgIHwKICstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogfCA6Y29uc3Q6YDUuMGAgIHwgUHl0aG9uIDMuMCBhbmQgUHl0aG9uIDMuMSAgICB8IFB5dGhvbiAzLjAgdG8gMy4yICAgICB8CiArLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLXwgOmNvbnN0OmA1LjFgICB8IFB5dGhvbiAzLjIgICAgICAgICAgICAgICAgICAgfCBQeXRob24gMy4wIHRvIDMuMiAgICAgfAorfCA6Y29uc3Q6YDUuMWAgIHwgUHl0aG9uIDMuMiAgICAgICAgICAgICAgICAgICB8IFB5dGhvbiAzLjIgICAgICAgICAgICB8CiArLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIAorQWZ0ZXIgVmVyc2lvbiA1LjEgKFB5dGhvbiAzLjIpLCB0aGUgZW1haWwgcGFja2FnZSBubyBsb25nZXIgaGFzIGEgdmVyc2lvbiB0aGF0CitpcyBzZXBhcmF0ZSBmcm9tIHRoZSBQeXRob24gdmVyc2lvbi4gIChTZWUgdGhlIDpyZWY6YHdoYXRzbmV3LWluZGV4YCBkb2N1bWVudHMKK2ZvciB0aGUgcmVzcGVjdGl2ZSBQeXRob24gdmVyc2lvbnMgZm9yIGRldGFpbHMgb24gY2hhbmdlcy4pCisKIEhlcmUgYXJlIHRoZSBtYWpvciBkaWZmZXJlbmNlcyBiZXR3ZWVuIDptb2Q6YGVtYWlsYCB2ZXJzaW9uIDUuMSBhbmQKIHZlcnNpb24gNS4wOgogCkBAIC0yNTcsNyArMjYyLDcgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogVGhlIDptb2Q6YGVtYWlsYCBwYWNrYWdlIHdhcyBvcmlnaW5hbGx5IHByb3RvdHlwZWQgYXMgYSBzZXBhcmF0ZSBsaWJyYXJ5IGNhbGxlZAotYG1pbWVsaWIgPGh0dHA6Ly9taW1lbGliLnNmLm5ldC8+YF8uIENoYW5nZXMgaGF2ZSBiZWVuIG1hZGUgc28gdGhhdCBtZXRob2QgbmFtZXMKK2BtaW1lbGliIDxodHRwOi8vbWltZWxpYi5zb3VyY2Vmb3JnZS5uZXQvPmBfLiBDaGFuZ2VzIGhhdmUgYmVlbiBtYWRlIHNvIHRoYXQgbWV0aG9kIG5hbWVzCiBhcmUgbW9yZSBjb25zaXN0ZW50LCBhbmQgc29tZSBtZXRob2RzIG9yIG1vZHVsZXMgaGF2ZSBlaXRoZXIgYmVlbiBhZGRlZCBvcgogcmVtb3ZlZC4gIFRoZSBzZW1hbnRpY3Mgb2Ygc29tZSBvZiB0aGUgbWV0aG9kcyBoYXZlIGFsc28gY2hhbmdlZC4gIEZvciB0aGUgbW9zdAogcGFydCwgYW55IGZ1bmN0aW9uYWxpdHkgYXZhaWxhYmxlIGluIDptb2Q6YG1pbWVsaWJgIGlzIHN0aWxsIGF2YWlsYWJsZSBpbiB0aGUKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2VtYWlsLnV0aWwucnN0IGIvRG9jL2xpYnJhcnkvZW1haWwudXRpbC5yc3QKaW5kZXggZjc1OTc1ZS4uMjE5ZTI4NCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZW1haWwudXRpbC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZW1haWwudXRpbC5yc3QKQEAgLTk4LDEyICs5OCw5IEBACiAKIC4uIGZ1bmN0aW9uOjogbWt0aW1lX3R6KHR1cGxlKQogCi0gICBUdXJuIGEgMTAtdHVwbGUgYXMgcmV0dXJuZWQgYnkgOmZ1bmM6YHBhcnNlZGF0ZV90emAgaW50byBhIFVUQyB0aW1lc3RhbXAuICBJdAotICAgdGhlIHRpbWV6b25lIGl0ZW0gaW4gdGhlIHR1cGxlIGlzIGBgTm9uZWBgLCBhc3N1bWUgbG9jYWwgdGltZS4gIE1pbm9yCi0gICBkZWZpY2llbmN5OiA6ZnVuYzpgbWt0aW1lX3R6YCBpbnRlcnByZXRzIHRoZSBmaXJzdCA4IGVsZW1lbnRzIG9mICp0dXBsZSogYXMgYQotICAgbG9jYWwgdGltZSBhbmQgdGhlbiBjb21wZW5zYXRlcyBmb3IgdGhlIHRpbWV6b25lIGRpZmZlcmVuY2UuICBUaGlzIG1heSB5aWVsZCBhCi0gICBzbGlnaHQgZXJyb3IgYXJvdW5kIGNoYW5nZXMgaW4gZGF5bGlnaHQgc2F2aW5ncyB0aW1lLCB0aG91Z2ggbm90IHdvcnRoIHdvcnJ5aW5nCi0gICBhYm91dCBmb3IgY29tbW9uIHVzZS4KKyAgIFR1cm4gYSAxMC10dXBsZSBhcyByZXR1cm5lZCBieSA6ZnVuYzpgcGFyc2VkYXRlX3R6YCBpbnRvIGEgVVRDCisgICB0aW1lc3RhbXAgKHNlY29uZHMgc2luY2UgdGhlIEVwb2NoKS4gIElmIHRoZSB0aW1lem9uZSBpdGVtIGluIHRoZQorICAgdHVwbGUgaXMgYGBOb25lYGAsIGFzc3VtZSBsb2NhbCB0aW1lLgogCiAKIC4uIGZ1bmN0aW9uOjogZm9ybWF0ZGF0ZSh0aW1ldmFsPU5vbmUsIGxvY2FsdGltZT1GYWxzZSwgdXNlZ210PUZhbHNlKQpAQCAtMjEwLDQgKzIwNywzIEBACiAuLiBbI10gTm90ZSB0aGF0IHRoZSBzaWduIG9mIHRoZSB0aW1lem9uZSBvZmZzZXQgaXMgdGhlIG9wcG9zaXRlIG9mIHRoZSBzaWduIG9mIHRoZQogICAgYGB0aW1lLnRpbWV6b25lYGAgdmFyaWFibGUgZm9yIHRoZSBzYW1lIHRpbWV6b25lOyB0aGUgbGF0dGVyIHZhcmlhYmxlIGZvbGxvd3MKICAgIHRoZSBQT1NJWCBzdGFuZGFyZCB3aGlsZSB0aGlzIG1vZHVsZSBmb2xsb3dzIDpyZmM6YDI4MjJgLgotCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9lbnN1cmVwaXAucnN0IGIvRG9jL2xpYnJhcnkvZW5zdXJlcGlwLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTg5ZjFjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jL2xpYnJhcnkvZW5zdXJlcGlwLnJzdApAQCAtMCwwICsxLDEzMSBAQAorOm1vZDpgZW5zdXJlcGlwYCAtLS0gQm9vdHN0cmFwcGluZyB0aGUgYGBwaXBgYCBpbnN0YWxsZXIKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy4uIG1vZHVsZTo6IGVuc3VyZXBpcAorICAgOnN5bm9wc2lzOiBCb290c3RyYXBwaW5nIHRoZSAicGlwIiBpbnN0YWxsZXIgaW50byBhbiBleGlzdGluZyBQeXRob24KKyAgICAgICAgICAgICAgaW5zdGFsbGF0aW9uIG9yIHZpcnR1YWwgZW52aXJvbm1lbnQuCisKKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorCitUaGUgOm1vZDpgZW5zdXJlcGlwYCBwYWNrYWdlIHByb3ZpZGVzIHN1cHBvcnQgZm9yIGJvb3RzdHJhcHBpbmcgdGhlIGBgcGlwYGAKK2luc3RhbGxlciBpbnRvIGFuIGV4aXN0aW5nIFB5dGhvbiBpbnN0YWxsYXRpb24gb3IgdmlydHVhbCBlbnZpcm9ubWVudC4gVGhpcworYm9vdHN0cmFwcGluZyBhcHByb2FjaCByZWZsZWN0cyB0aGUgZmFjdCB0aGF0IGBgcGlwYGAgaXMgYW4gaW5kZXBlbmRlbnQKK3Byb2plY3Qgd2l0aCBpdHMgb3duIHJlbGVhc2UgY3ljbGUsIGFuZCB0aGUgbGF0ZXN0IGF2YWlsYWJsZSBzdGFibGUgdmVyc2lvbgoraXMgYnVuZGxlZCB3aXRoIG1haW50ZW5hbmNlIGFuZCBmZWF0dXJlIHJlbGVhc2VzIG9mIHRoZSBDUHl0aG9uIHJlZmVyZW5jZQoraW50ZXJwcmV0ZXIuCisKK0luIG1vc3QgY2FzZXMsIGVuZCB1c2VycyBvZiBQeXRob24gc2hvdWxkbid0IG5lZWQgdG8gaW52b2tlIHRoaXMgbW9kdWxlCitkaXJlY3RseSAoYXMgYGBwaXBgYCBzaG91bGQgYmUgYm9vdHN0cmFwcGVkIGJ5IGRlZmF1bHQpLCBidXQgaXQgbWF5IGJlCituZWVkZWQgaWYgaW5zdGFsbGluZyBgYHBpcGBgIHdhcyBza2lwcGVkIHdoZW4gaW5zdGFsbGluZyBQeXRob24gKG9yCit3aGVuIGNyZWF0aW5nIGEgdmlydHVhbCBlbnZpcm9ubWVudCkgb3IgYWZ0ZXIgZXhwbGljaXRseSB1bmluc3RhbGxpbmcKK2BgcGlwYGAuCisKKy4uIG5vdGU6OgorCisgICBUaGlzIG1vZHVsZSAqZG9lcyBub3QqIGFjY2VzcyB0aGUgaW50ZXJuZXQuIEFsbCBvZiB0aGUgY29tcG9uZW50cworICAgbmVlZGVkIHRvIGJvb3RzdHJhcCBgYHBpcGBgIGFyZSBpbmNsdWRlZCBhcyBpbnRlcm5hbCBwYXJ0cyBvZiB0aGUKKyAgIHBhY2thZ2UuCisKKy4uIHNlZWFsc286OgorCisgICA6cmVmOmBpbnN0YWxsaW5nLWluZGV4YAorICAgICAgVGhlIGVuZCB1c2VyIGd1aWRlIGZvciBpbnN0YWxsaW5nIFB5dGhvbiBwYWNrYWdlcworCisgICA6cGVwOmA0NTNgOiBFeHBsaWNpdCBib290c3RyYXBwaW5nIG9mIHBpcCBpbiBQeXRob24gaW5zdGFsbGF0aW9ucworICAgICAgVGhlIG9yaWdpbmFsIHJhdGlvbmFsZSBhbmQgc3BlY2lmaWNhdGlvbiBmb3IgdGhpcyBtb2R1bGUuCisKKworQ29tbWFuZCBsaW5lIGludGVyZmFjZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgY29tbWFuZCBsaW5lIGludGVyZmFjZSBpcyBpbnZva2VkIHVzaW5nIHRoZSBpbnRlcnByZXRlcidzIGBgLW1gYCBzd2l0Y2guCisKK1RoZSBzaW1wbGVzdCBwb3NzaWJsZSBpbnZvY2F0aW9uIGlzOjoKKworICAgIHB5dGhvbiAtbSBlbnN1cmVwaXAKKworVGhpcyBpbnZvY2F0aW9uIHdpbGwgaW5zdGFsbCBgYHBpcGBgIGlmIGl0IGlzIG5vdCBhbHJlYWR5IGluc3RhbGxlZCwKK2J1dCBvdGhlcndpc2UgZG9lcyBub3RoaW5nLiBUbyBlbnN1cmUgdGhlIGluc3RhbGxlZCB2ZXJzaW9uIG9mIGBgcGlwYGAKK2lzIGF0IGxlYXN0IGFzIHJlY2VudCBhcyB0aGUgb25lIGJ1bmRsZWQgd2l0aCBgYGVuc3VyZXBpcGBgLCBwYXNzIHRoZQorYGAtLXVwZ3JhZGVgYCBvcHRpb246OgorCisgICAgcHl0aG9uIC1tIGVuc3VyZXBpcCAtLXVwZ3JhZGUKKworQnkgZGVmYXVsdCwgYGBwaXBgYCBpcyBpbnN0YWxsZWQgaW50byB0aGUgY3VycmVudCB2aXJ0dWFsIGVudmlyb25tZW50CisoaWYgb25lIGlzIGFjdGl2ZSkgb3IgaW50byB0aGUgc3lzdGVtIHNpdGUgcGFja2FnZXMgKGlmIHRoZXJlIGlzIG5vCithY3RpdmUgdmlydHVhbCBlbnZpcm9ubWVudCkuIFRoZSBpbnN0YWxsYXRpb24gbG9jYXRpb24gY2FuIGJlIGNvbnRyb2xsZWQKK3Rocm91Z2ggdHdvIGFkZGl0aW9uYWwgY29tbWFuZCBsaW5lIG9wdGlvbnM6CisKKyogYGAtLXJvb3QgPGRpcj5gYDogSW5zdGFsbHMgYGBwaXBgYCByZWxhdGl2ZSB0byB0aGUgZ2l2ZW4gcm9vdCBkaXJlY3RvcnkKKyAgcmF0aGVyIHRoYW4gdGhlIHJvb3Qgb2YgdGhlIGN1cnJlbnRseSBhY3RpdmUgdmlydHVhbCBlbnZpcm9ubWVudCAoaWYgYW55KQorICBvciB0aGUgZGVmYXVsdCByb290IGZvciB0aGUgY3VycmVudCBQeXRob24gaW5zdGFsbGF0aW9uLgorKiBgYC0tdXNlcmBgOiBJbnN0YWxscyBgYHBpcGBgIGludG8gdGhlIHVzZXIgc2l0ZSBwYWNrYWdlcyBkaXJlY3RvcnkgcmF0aGVyCisgIHRoYW4gZ2xvYmFsbHkgZm9yIHRoZSBjdXJyZW50IFB5dGhvbiBpbnN0YWxsYXRpb24gKHRoaXMgb3B0aW9uIGlzIG5vdAorICBwZXJtaXR0ZWQgaW5zaWRlIGFuIGFjdGl2ZSB2aXJ0dWFsIGVudmlyb25tZW50KS4KKworQnkgZGVmYXVsdCwgdGhlIHNjcmlwdHMgYGBwaXBYYGAgYW5kIGBgcGlwWC5ZYGAgd2lsbCBiZSBpbnN0YWxsZWQgKHdoZXJlCitYLlkgc3RhbmRzIGZvciB0aGUgdmVyc2lvbiBvZiBQeXRob24gdXNlZCB0byBpbnZva2UgYGBlbnN1cmVwaXBgYCkuIFRoZQorc2NyaXB0cyBpbnN0YWxsZWQgY2FuIGJlIGNvbnRyb2xsZWQgdGhyb3VnaCB0d28gYWRkaXRpb25hbCBjb21tYW5kIGxpbmUKK29wdGlvbnM6CisKKyogYGAtLWFsdGluc3RhbGxgYDogaWYgYW4gYWx0ZXJuYXRlIGluc3RhbGxhdGlvbiBpcyByZXF1ZXN0ZWQsIHRoZSBgYHBpcFhgYAorICBzY3JpcHQgd2lsbCAqbm90KiBiZSBpbnN0YWxsZWQuCisKKyogYGAtLWRlZmF1bHQtcGlwYGA6IGlmIGEgImRlZmF1bHQgcGlwIiBpbnN0YWxsYXRpb24gaXMgcmVxdWVzdGVkLCB0aGUKKyAgIGBgcGlwYGAgc2NyaXB0IHdpbGwgYmUgaW5zdGFsbGVkIGluIGFkZGl0aW9uIHRvIHRoZSB0d28gcmVndWxhciBzY3JpcHRzLgorCitQcm92aWRpbmcgYm90aCBvZiB0aGUgc2NyaXB0IHNlbGVjdGlvbiBvcHRpb25zIHdpbGwgdHJpZ2dlciBhbiBleGNlcHRpb24uCisKKworTW9kdWxlIEFQSQorLS0tLS0tLS0tLQorCis6bW9kOmBlbnN1cmVwaXBgIGV4cG9zZXMgdHdvIGZ1bmN0aW9ucyBmb3IgcHJvZ3JhbW1hdGljIHVzZToKKworLi4gZnVuY3Rpb246OiB2ZXJzaW9uKCkKKworICAgUmV0dXJucyBhIHN0cmluZyBzcGVjaWZ5aW5nIHRoZSBidW5kbGVkIHZlcnNpb24gb2YgcGlwIHRoYXQgd2lsbCBiZQorICAgaW5zdGFsbGVkIHdoZW4gYm9vdHN0cmFwcGluZyBhbiBlbnZpcm9ubWVudC4KKworLi4gZnVuY3Rpb246OiBib290c3RyYXAocm9vdD1Ob25lLCB1cGdyYWRlPUZhbHNlLCB1c2VyPUZhbHNlLCBcCisgICAgICAgICAgICAgICAgICAgICAgICBhbHRpbnN0YWxsPUZhbHNlLCBkZWZhdWx0X3BpcD1GYWxzZSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgdmVyYm9zaXR5PTApCisKKyAgIEJvb3RzdHJhcHMgYGBwaXBgYCBpbnRvIHRoZSBjdXJyZW50IG9yIGRlc2lnbmF0ZWQgZW52aXJvbm1lbnQuCisKKyAgICpyb290KiBzcGVjaWZpZXMgYW4gYWx0ZXJuYXRpdmUgcm9vdCBkaXJlY3RvcnkgdG8gaW5zdGFsbCByZWxhdGl2ZSB0by4KKyAgIElmICpyb290KiBpcyBOb25lLCB0aGVuIGluc3RhbGxhdGlvbiB1c2VzIHRoZSBkZWZhdWx0IGluc3RhbGwgbG9jYXRpb24KKyAgIGZvciB0aGUgY3VycmVudCBlbnZpcm9ubWVudC4KKworICAgKnVwZ3JhZGUqIGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0byB1cGdyYWRlIGFuIGV4aXN0aW5nIGluc3RhbGxhdGlvbgorICAgb2YgYW4gZWFybGllciB2ZXJzaW9uIG9mIGBgcGlwYGAgdG8gdGhlIGJ1bmRsZWQgdmVyc2lvbi4KKworICAgKnVzZXIqIGluZGljYXRlcyB3aGV0aGVyIHRvIHVzZSB0aGUgdXNlciBzY2hlbWUgcmF0aGVyIHRoYW4gaW5zdGFsbGluZworICAgZ2xvYmFsbHkuCisKKyAgIEJ5IGRlZmF1bHQsIHRoZSBzY3JpcHRzIGBgcGlwWGBgIGFuZCBgYHBpcFguWWBgIHdpbGwgYmUgaW5zdGFsbGVkICh3aGVyZQorICAgWC5ZIHN0YW5kcyBmb3IgdGhlIGN1cnJlbnQgdmVyc2lvbiBvZiBQeXRob24pLgorCisgICBJZiAqYWx0aW5zdGFsbCogaXMgc2V0LCB0aGVuIGBgcGlwWGBgIHdpbGwgKm5vdCogYmUgaW5zdGFsbGVkLgorCisgICBJZiAqZGVmYXVsdF9waXAqIGlzIHNldCwgdGhlbiBgYHBpcGBgIHdpbGwgYmUgaW5zdGFsbGVkIGluIGFkZGl0aW9uIHRvCisgICB0aGUgdHdvIHJlZ3VsYXIgc2NyaXB0cy4KKworICAgU2V0dGluZyBib3RoICphbHRpbnN0YWxsKiBhbmQgKmRlZmF1bHRfcGlwKiB3aWxsIHRyaWdnZXIKKyAgIDpleGM6YFZhbHVlRXJyb3JgLgorCisgICAqdmVyYm9zaXR5KiBjb250cm9scyB0aGUgbGV2ZWwgb2Ygb3V0cHV0IHRvIDpkYXRhOmBzeXMuc3Rkb3V0YCBmcm9tIHRoZQorICAgYm9vdHN0cmFwcGluZyBvcGVyYXRpb24uCisKKyAgIC4uIG5vdGU6OgorCisgICAgICBUaGUgYm9vdHN0cmFwcGluZyBwcm9jZXNzIGhhcyBzaWRlIGVmZmVjdHMgb24gYm90aCBgYHN5cy5wYXRoYGAgYW5kCisgICAgICBgYG9zLmVudmlyb25gYC4gSW52b2tpbmcgdGhlIGNvbW1hbmQgbGluZSBpbnRlcmZhY2UgaW4gYSBzdWJwcm9jZXNzCisgICAgICBpbnN0ZWFkIGFsbG93cyB0aGVzZSBzaWRlIGVmZmVjdHMgdG8gYmUgYXZvaWRlZC4KKworICAgLi4gbm90ZTo6CisKKyAgICAgIFRoZSBib290c3RyYXBwaW5nIHByb2Nlc3MgbWF5IGluc3RhbGwgYWRkaXRpb25hbCBtb2R1bGVzIHJlcXVpcmVkIGJ5CisgICAgICBgYHBpcGBgLCBidXQgb3RoZXIgc29mdHdhcmUgc2hvdWxkIG5vdCBhc3N1bWUgdGhvc2UgZGVwZW5kZW5jaWVzIHdpbGwKKyAgICAgIGFsd2F5cyBiZSBwcmVzZW50IGJ5IGRlZmF1bHQgKGFzIHRoZSBkZXBlbmRlbmNpZXMgbWF5IGJlIHJlbW92ZWQgaW4gYQorICAgICAgZnV0dXJlIHZlcnNpb24gb2YgYGBwaXBgYCkuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9lbnVtLnJzdCBiL0RvYy9saWJyYXJ5L2VudW0ucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjNzZlODcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2MvbGlicmFyeS9lbnVtLnJzdApAQCAtMCwwICsxLDc1NiBAQAorOm1vZDpgZW51bWAgLS0tIFN1cHBvcnQgZm9yIGVudW1lcmF0aW9ucworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisuLiBtb2R1bGU6OiBlbnVtCisgICA6c3lub3BzaXM6IEltcGxlbWVudGF0aW9uIG9mIGFuIGVudW1lcmF0aW9uIGNsYXNzLgorCisuLiA6bW9kdWxlYXV0aG9yOjogRXRoYW4gRnVybWFuIDxldGhhbkBzdG9uZWxlYWYudXM+CisuLiA6c2VjdGlvbmF1dGhvcjo6IEJhcnJ5IFdhcnNhdyA8YmFycnlAcHl0aG9uLm9yZz4sCisuLiA6c2VjdGlvbmF1dGhvcjo6IEVsaSBCZW5kZXJza3kgPGVsaWJlbkBnbWFpbC5jb20+LAorLi4gOnNlY3Rpb25hdXRob3I6OiBFdGhhbiBGdXJtYW4gPGV0aGFuQHN0b25lbGVhZi51cz4KKworLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL2VudW0ucHlgCisKKy0tLS0tLS0tLS0tLS0tLS0KKworQW4gZW51bWVyYXRpb24gaXMgYSBzZXQgb2Ygc3ltYm9saWMgbmFtZXMgKG1lbWJlcnMpIGJvdW5kIHRvIHVuaXF1ZSwKK2NvbnN0YW50IHZhbHVlcy4gIFdpdGhpbiBhbiBlbnVtZXJhdGlvbiwgdGhlIG1lbWJlcnMgY2FuIGJlIGNvbXBhcmVkCitieSBpZGVudGl0eSwgYW5kIHRoZSBlbnVtZXJhdGlvbiBpdHNlbGYgY2FuIGJlIGl0ZXJhdGVkIG92ZXIuCisKKworTW9kdWxlIENvbnRlbnRzCistLS0tLS0tLS0tLS0tLS0KKworVGhpcyBtb2R1bGUgZGVmaW5lcyB0d28gZW51bWVyYXRpb24gY2xhc3NlcyB0aGF0IGNhbiBiZSB1c2VkIHRvIGRlZmluZSB1bmlxdWUKK3NldHMgb2YgbmFtZXMgYW5kIHZhbHVlczogOmNsYXNzOmBFbnVtYCBhbmQgOmNsYXNzOmBJbnRFbnVtYC4gIEl0IGFsc28gZGVmaW5lcworb25lIGRlY29yYXRvciwgOmZ1bmM6YHVuaXF1ZWAuCisKKy4uIGNsYXNzOjogRW51bQorCisgICAgQmFzZSBjbGFzcyBmb3IgY3JlYXRpbmcgZW51bWVyYXRlZCBjb25zdGFudHMuICBTZWUgc2VjdGlvbgorICAgIGBGdW5jdGlvbmFsIEFQSWBfIGZvciBhbiBhbHRlcm5hdGUgY29uc3RydWN0aW9uIHN5bnRheC4KKworLi4gY2xhc3M6OiBJbnRFbnVtCisKKyAgICBCYXNlIGNsYXNzIGZvciBjcmVhdGluZyBlbnVtZXJhdGVkIGNvbnN0YW50cyB0aGF0IGFyZSBhbHNvCisgICAgc3ViY2xhc3NlcyBvZiA6Y2xhc3M6YGludGAuCisKKy4uIGZ1bmN0aW9uOjogdW5pcXVlCisKKyAgICBFbnVtIGNsYXNzIGRlY29yYXRvciB0aGF0IGVuc3VyZXMgb25seSBvbmUgbmFtZSBpcyBib3VuZCB0byBhbnkgb25lIHZhbHVlLgorCisKK0NyZWF0aW5nIGFuIEVudW0KKy0tLS0tLS0tLS0tLS0tLS0KKworRW51bWVyYXRpb25zIGFyZSBjcmVhdGVkIHVzaW5nIHRoZSA6a2V5d29yZDpgY2xhc3NgIHN5bnRheCwgd2hpY2ggbWFrZXMgdGhlbQorZWFzeSB0byByZWFkIGFuZCB3cml0ZS4gIEFuIGFsdGVybmF0aXZlIGNyZWF0aW9uIG1ldGhvZCBpcyBkZXNjcmliZWQgaW4KK2BGdW5jdGlvbmFsIEFQSWBfLiAgVG8gZGVmaW5lIGFuIGVudW1lcmF0aW9uLCBzdWJjbGFzcyA6Y2xhc3M6YEVudW1gIGFzCitmb2xsb3dzOjoKKworICAgID4+PiBmcm9tIGVudW0gaW1wb3J0IEVudW0KKyAgICA+Pj4gY2xhc3MgQ29sb3IoRW51bSk6CisgICAgLi4uICAgICByZWQgPSAxCisgICAgLi4uICAgICBncmVlbiA9IDIKKyAgICAuLi4gICAgIGJsdWUgPSAzCisgICAgLi4uCisKKy4uIG5vdGU6OiBOb21lbmNsYXR1cmUKKworICAtIFRoZSBjbGFzcyA6Y2xhc3M6YENvbG9yYCBpcyBhbiAqZW51bWVyYXRpb24qIChvciAqZW51bSopCisgIC0gVGhlIGF0dHJpYnV0ZXMgOmF0dHI6YENvbG9yLnJlZGAsIDphdHRyOmBDb2xvci5ncmVlbmAsIGV0Yy4sIGFyZQorICAgICplbnVtZXJhdGlvbiBtZW1iZXJzKiAob3IgKmVudW0gbWVtYmVycyopLgorICAtIFRoZSBlbnVtIG1lbWJlcnMgaGF2ZSAqbmFtZXMqIGFuZCAqdmFsdWVzKiAodGhlIG5hbWUgb2YKKyAgICA6YXR0cjpgQ29sb3IucmVkYCBpcyBgYHJlZGBgLCB0aGUgdmFsdWUgb2YgOmF0dHI6YENvbG9yLmJsdWVgIGlzCisgICAgYGAzYGAsIGV0Yy4pCisKKy4uIG5vdGU6OgorCisgICAgRXZlbiB0aG91Z2ggd2UgdXNlIHRoZSA6a2V5d29yZDpgY2xhc3NgIHN5bnRheCB0byBjcmVhdGUgRW51bXMsIEVudW1zCisgICAgYXJlIG5vdCBub3JtYWwgUHl0aG9uIGNsYXNzZXMuICBTZWUgYEhvdyBhcmUgRW51bXMgZGlmZmVyZW50P2BfIGZvcgorICAgIG1vcmUgZGV0YWlscy4KKworRW51bWVyYXRpb24gbWVtYmVycyBoYXZlIGh1bWFuIHJlYWRhYmxlIHN0cmluZyByZXByZXNlbnRhdGlvbnM6OgorCisgICAgPj4+IHByaW50KENvbG9yLnJlZCkKKyAgICBDb2xvci5yZWQKKworLi4ud2hpbGUgdGhlaXIgYGByZXByYGAgaGFzIG1vcmUgaW5mb3JtYXRpb246OgorCisgICAgPj4+IHByaW50KHJlcHIoQ29sb3IucmVkKSkKKyAgICA8Q29sb3IucmVkOiAxPgorCitUaGUgKnR5cGUqIG9mIGFuIGVudW1lcmF0aW9uIG1lbWJlciBpcyB0aGUgZW51bWVyYXRpb24gaXQgYmVsb25ncyB0bzo6CisKKyAgICA+Pj4gdHlwZShDb2xvci5yZWQpCisgICAgPGVudW0gJ0NvbG9yJz4KKyAgICA+Pj4gaXNpbnN0YW5jZShDb2xvci5ncmVlbiwgQ29sb3IpCisgICAgVHJ1ZQorICAgID4+PgorCitFbnVtIG1lbWJlcnMgYWxzbyBoYXZlIGEgcHJvcGVydHkgdGhhdCBjb250YWlucyBqdXN0IHRoZWlyIGl0ZW0gbmFtZTo6CisKKyAgICA+Pj4gcHJpbnQoQ29sb3IucmVkLm5hbWUpCisgICAgcmVkCisKK0VudW1lcmF0aW9ucyBzdXBwb3J0IGl0ZXJhdGlvbiwgaW4gZGVmaW5pdGlvbiBvcmRlcjo6CisKKyAgICA+Pj4gY2xhc3MgU2hha2UoRW51bSk6CisgICAgLi4uICAgICB2YW5pbGxhID0gNworICAgIC4uLiAgICAgY2hvY29sYXRlID0gNAorICAgIC4uLiAgICAgY29va2llcyA9IDkKKyAgICAuLi4gICAgIG1pbnQgPSAzCisgICAgLi4uCisgICAgPj4+IGZvciBzaGFrZSBpbiBTaGFrZToKKyAgICAuLi4gICAgIHByaW50KHNoYWtlKQorICAgIC4uLgorICAgIFNoYWtlLnZhbmlsbGEKKyAgICBTaGFrZS5jaG9jb2xhdGUKKyAgICBTaGFrZS5jb29raWVzCisgICAgU2hha2UubWludAorCitFbnVtZXJhdGlvbiBtZW1iZXJzIGFyZSBoYXNoYWJsZSwgc28gdGhleSBjYW4gYmUgdXNlZCBpbiBkaWN0aW9uYXJpZXMgYW5kIHNldHM6OgorCisgICAgPj4+IGFwcGxlcyA9IHt9CisgICAgPj4+IGFwcGxlc1tDb2xvci5yZWRdID0gJ3JlZCBkZWxpY2lvdXMnCisgICAgPj4+IGFwcGxlc1tDb2xvci5ncmVlbl0gPSAnZ3Jhbm55IHNtaXRoJworICAgID4+PiBhcHBsZXMgPT0ge0NvbG9yLnJlZDogJ3JlZCBkZWxpY2lvdXMnLCBDb2xvci5ncmVlbjogJ2dyYW5ueSBzbWl0aCd9CisgICAgVHJ1ZQorCisKK1Byb2dyYW1tYXRpYyBhY2Nlc3MgdG8gZW51bWVyYXRpb24gbWVtYmVycyBhbmQgdGhlaXIgYXR0cmlidXRlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NvbWV0aW1lcyBpdCdzIHVzZWZ1bCB0byBhY2Nlc3MgbWVtYmVycyBpbiBlbnVtZXJhdGlvbnMgcHJvZ3JhbW1hdGljYWxseSAoaS5lLgorc2l0dWF0aW9ucyB3aGVyZSBgYENvbG9yLnJlZGBgIHdvbid0IGRvIGJlY2F1c2UgdGhlIGV4YWN0IGNvbG9yIGlzIG5vdCBrbm93bgorYXQgcHJvZ3JhbS13cml0aW5nIHRpbWUpLiAgYGBFbnVtYGAgYWxsb3dzIHN1Y2ggYWNjZXNzOjoKKworICAgID4+PiBDb2xvcigxKQorICAgIDxDb2xvci5yZWQ6IDE+CisgICAgPj4+IENvbG9yKDMpCisgICAgPENvbG9yLmJsdWU6IDM+CisKK0lmIHlvdSB3YW50IHRvIGFjY2VzcyBlbnVtIG1lbWJlcnMgYnkgKm5hbWUqLCB1c2UgaXRlbSBhY2Nlc3M6OgorCisgICAgPj4+IENvbG9yWydyZWQnXQorICAgIDxDb2xvci5yZWQ6IDE+CisgICAgPj4+IENvbG9yWydncmVlbiddCisgICAgPENvbG9yLmdyZWVuOiAyPgorCitJZiB5b3UgaGF2ZSBhbiBlbnVtIG1lbWJlciBhbmQgbmVlZCBpdHMgOmF0dHI6YG5hbWVgIG9yIDphdHRyOmB2YWx1ZWA6OgorCisgICAgPj4+IG1lbWJlciA9IENvbG9yLnJlZAorICAgID4+PiBtZW1iZXIubmFtZQorICAgICdyZWQnCisgICAgPj4+IG1lbWJlci52YWx1ZQorICAgIDEKKworCitEdXBsaWNhdGluZyBlbnVtIG1lbWJlcnMgYW5kIHZhbHVlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSGF2aW5nIHR3byBlbnVtIG1lbWJlcnMgd2l0aCB0aGUgc2FtZSBuYW1lIGlzIGludmFsaWQ6OgorCisgICAgPj4+IGNsYXNzIFNoYXBlKEVudW0pOgorICAgIC4uLiAgICAgc3F1YXJlID0gMgorICAgIC4uLiAgICAgc3F1YXJlID0gMworICAgIC4uLgorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAuLi4KKyAgICBUeXBlRXJyb3I6IEF0dGVtcHRlZCB0byByZXVzZSBrZXk6ICdzcXVhcmUnCisKK0hvd2V2ZXIsIHR3byBlbnVtIG1lbWJlcnMgYXJlIGFsbG93ZWQgdG8gaGF2ZSB0aGUgc2FtZSB2YWx1ZS4gIEdpdmVuIHR3byBtZW1iZXJzCitBIGFuZCBCIHdpdGggdGhlIHNhbWUgdmFsdWUgKGFuZCBBIGRlZmluZWQgZmlyc3QpLCBCIGlzIGFuIGFsaWFzIHRvIEEuICBCeS12YWx1ZQorbG9va3VwIG9mIHRoZSB2YWx1ZSBvZiBBIGFuZCBCIHdpbGwgcmV0dXJuIEEuICBCeS1uYW1lIGxvb2t1cCBvZiBCIHdpbGwgYWxzbworcmV0dXJuIEE6OgorCisgICAgPj4+IGNsYXNzIFNoYXBlKEVudW0pOgorICAgIC4uLiAgICAgc3F1YXJlID0gMgorICAgIC4uLiAgICAgZGlhbW9uZCA9IDEKKyAgICAuLi4gICAgIGNpcmNsZSA9IDMKKyAgICAuLi4gICAgIGFsaWFzX2Zvcl9zcXVhcmUgPSAyCisgICAgLi4uCisgICAgPj4+IFNoYXBlLnNxdWFyZQorICAgIDxTaGFwZS5zcXVhcmU6IDI+CisgICAgPj4+IFNoYXBlLmFsaWFzX2Zvcl9zcXVhcmUKKyAgICA8U2hhcGUuc3F1YXJlOiAyPgorICAgID4+PiBTaGFwZSgyKQorICAgIDxTaGFwZS5zcXVhcmU6IDI+CisKKy4uIG5vdGU6OgorCisgICAgQXR0ZW1wdGluZyB0byBjcmVhdGUgYSBtZW1iZXIgd2l0aCB0aGUgc2FtZSBuYW1lIGFzIGFuIGFscmVhZHkKKyAgICBkZWZpbmVkIGF0dHJpYnV0ZSAoYW5vdGhlciBtZW1iZXIsIGEgbWV0aG9kLCBldGMuKSBvciBhdHRlbXB0aW5nIHRvIGNyZWF0ZQorICAgIGFuIGF0dHJpYnV0ZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgYSBtZW1iZXIgaXMgbm90IGFsbG93ZWQuCisKKworRW5zdXJpbmcgdW5pcXVlIGVudW1lcmF0aW9uIHZhbHVlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitCeSBkZWZhdWx0LCBlbnVtZXJhdGlvbnMgYWxsb3cgbXVsdGlwbGUgbmFtZXMgYXMgYWxpYXNlcyBmb3IgdGhlIHNhbWUgdmFsdWUuCitXaGVuIHRoaXMgYmVoYXZpb3IgaXNuJ3QgZGVzaXJlZCwgdGhlIGZvbGxvd2luZyBkZWNvcmF0b3IgY2FuIGJlIHVzZWQgdG8KK2Vuc3VyZSBlYWNoIHZhbHVlIGlzIHVzZWQgb25seSBvbmNlIGluIHRoZSBlbnVtZXJhdGlvbjoKKworLi4gZGVjb3JhdG9yOjogdW5pcXVlCisKK0EgOmtleXdvcmQ6YGNsYXNzYCBkZWNvcmF0b3Igc3BlY2lmaWNhbGx5IGZvciBlbnVtZXJhdGlvbnMuICBJdCBzZWFyY2hlcyBhbgorZW51bWVyYXRpb24ncyA6YXR0cjpgX19tZW1iZXJzX19gIGdhdGhlcmluZyBhbnkgYWxpYXNlcyBpdCBmaW5kczsgaWYgYW55IGFyZQorZm91bmQgOmV4YzpgVmFsdWVFcnJvcmAgaXMgcmFpc2VkIHdpdGggdGhlIGRldGFpbHM6OgorCisgICAgPj4+IGZyb20gZW51bSBpbXBvcnQgRW51bSwgdW5pcXVlCisgICAgPj4+IEB1bmlxdWUKKyAgICAuLi4gY2xhc3MgTWlzdGFrZShFbnVtKToKKyAgICAuLi4gICAgIG9uZSA9IDEKKyAgICAuLi4gICAgIHR3byA9IDIKKyAgICAuLi4gICAgIHRocmVlID0gMworICAgIC4uLiAgICAgZm91ciA9IDMKKyAgICAuLi4KKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgLi4uCisgICAgVmFsdWVFcnJvcjogZHVwbGljYXRlIHZhbHVlcyBmb3VuZCBpbiA8ZW51bSAnTWlzdGFrZSc+OiBmb3VyIC0+IHRocmVlCisKKworSXRlcmF0aW9uCistLS0tLS0tLS0KKworSXRlcmF0aW5nIG92ZXIgdGhlIG1lbWJlcnMgb2YgYW4gZW51bSBkb2VzIG5vdCBwcm92aWRlIHRoZSBhbGlhc2VzOjoKKworICAgID4+PiBsaXN0KFNoYXBlKQorICAgIFs8U2hhcGUuc3F1YXJlOiAyPiwgPFNoYXBlLmRpYW1vbmQ6IDE+LCA8U2hhcGUuY2lyY2xlOiAzPl0KKworVGhlIHNwZWNpYWwgYXR0cmlidXRlIGBgX19tZW1iZXJzX19gYCBpcyBhbiBvcmRlcmVkIGRpY3Rpb25hcnkgbWFwcGluZyBuYW1lcwordG8gbWVtYmVycy4gIEl0IGluY2x1ZGVzIGFsbCBuYW1lcyBkZWZpbmVkIGluIHRoZSBlbnVtZXJhdGlvbiwgaW5jbHVkaW5nIHRoZQorYWxpYXNlczo6CisKKyAgICA+Pj4gZm9yIG5hbWUsIG1lbWJlciBpbiBTaGFwZS5fX21lbWJlcnNfXy5pdGVtcygpOgorICAgIC4uLiAgICAgbmFtZSwgbWVtYmVyCisgICAgLi4uCisgICAgKCdzcXVhcmUnLCA8U2hhcGUuc3F1YXJlOiAyPikKKyAgICAoJ2RpYW1vbmQnLCA8U2hhcGUuZGlhbW9uZDogMT4pCisgICAgKCdjaXJjbGUnLCA8U2hhcGUuY2lyY2xlOiAzPikKKyAgICAoJ2FsaWFzX2Zvcl9zcXVhcmUnLCA8U2hhcGUuc3F1YXJlOiAyPikKKworVGhlIGBgX19tZW1iZXJzX19gYCBhdHRyaWJ1dGUgY2FuIGJlIHVzZWQgZm9yIGRldGFpbGVkIHByb2dyYW1tYXRpYyBhY2Nlc3MgdG8KK3RoZSBlbnVtZXJhdGlvbiBtZW1iZXJzLiAgRm9yIGV4YW1wbGUsIGZpbmRpbmcgYWxsIHRoZSBhbGlhc2VzOjoKKworICAgID4+PiBbbmFtZSBmb3IgbmFtZSwgbWVtYmVyIGluIFNoYXBlLl9fbWVtYmVyc19fLml0ZW1zKCkgaWYgbWVtYmVyLm5hbWUgIT0gbmFtZV0KKyAgICBbJ2FsaWFzX2Zvcl9zcXVhcmUnXQorCisKK0NvbXBhcmlzb25zCistLS0tLS0tLS0tLQorCitFbnVtZXJhdGlvbiBtZW1iZXJzIGFyZSBjb21wYXJlZCBieSBpZGVudGl0eTo6CisKKyAgICA+Pj4gQ29sb3IucmVkIGlzIENvbG9yLnJlZAorICAgIFRydWUKKyAgICA+Pj4gQ29sb3IucmVkIGlzIENvbG9yLmJsdWUKKyAgICBGYWxzZQorICAgID4+PiBDb2xvci5yZWQgaXMgbm90IENvbG9yLmJsdWUKKyAgICBUcnVlCisKK09yZGVyZWQgY29tcGFyaXNvbnMgYmV0d2VlbiBlbnVtZXJhdGlvbiB2YWx1ZXMgYXJlICpub3QqIHN1cHBvcnRlZC4gIEVudW0KK21lbWJlcnMgYXJlIG5vdCBpbnRlZ2VycyAoYnV0IHNlZSBgSW50RW51bWBfIGJlbG93KTo6CisKKyAgICA+Pj4gQ29sb3IucmVkIDwgQ29sb3IuYmx1ZQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDEsIGluIDxtb2R1bGU+CisgICAgVHlwZUVycm9yOiB1bm9yZGVyYWJsZSB0eXBlczogQ29sb3IoKSA8IENvbG9yKCkKKworRXF1YWxpdHkgY29tcGFyaXNvbnMgYXJlIGRlZmluZWQgdGhvdWdoOjoKKworICAgID4+PiBDb2xvci5ibHVlID09IENvbG9yLnJlZAorICAgIEZhbHNlCisgICAgPj4+IENvbG9yLmJsdWUgIT0gQ29sb3IucmVkCisgICAgVHJ1ZQorICAgID4+PiBDb2xvci5ibHVlID09IENvbG9yLmJsdWUKKyAgICBUcnVlCisKK0NvbXBhcmlzb25zIGFnYWluc3Qgbm9uLWVudW1lcmF0aW9uIHZhbHVlcyB3aWxsIGFsd2F5cyBjb21wYXJlIG5vdCBlcXVhbAorKGFnYWluLCA6Y2xhc3M6YEludEVudW1gIHdhcyBleHBsaWNpdGx5IGRlc2lnbmVkIHRvIGJlaGF2ZSBkaWZmZXJlbnRseSwgc2VlCitiZWxvdyk6OgorCisgICAgPj4+IENvbG9yLmJsdWUgPT0gMgorICAgIEZhbHNlCisKKworQWxsb3dlZCBtZW1iZXJzIGFuZCBhdHRyaWJ1dGVzIG9mIGVudW1lcmF0aW9ucworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZXhhbXBsZXMgYWJvdmUgdXNlIGludGVnZXJzIGZvciBlbnVtZXJhdGlvbiB2YWx1ZXMuICBVc2luZyBpbnRlZ2VycyBpcworc2hvcnQgYW5kIGhhbmR5IChhbmQgcHJvdmlkZWQgYnkgZGVmYXVsdCBieSB0aGUgYEZ1bmN0aW9uYWwgQVBJYF8pLCBidXQgbm90CitzdHJpY3RseSBlbmZvcmNlZC4gIEluIHRoZSB2YXN0IG1ham9yaXR5IG9mIHVzZS1jYXNlcywgb25lIGRvZXNuJ3QgY2FyZSB3aGF0Cit0aGUgYWN0dWFsIHZhbHVlIG9mIGFuIGVudW1lcmF0aW9uIGlzLiAgQnV0IGlmIHRoZSB2YWx1ZSAqaXMqIGltcG9ydGFudCwKK2VudW1lcmF0aW9ucyBjYW4gaGF2ZSBhcmJpdHJhcnkgdmFsdWVzLgorCitFbnVtZXJhdGlvbnMgYXJlIFB5dGhvbiBjbGFzc2VzLCBhbmQgY2FuIGhhdmUgbWV0aG9kcyBhbmQgc3BlY2lhbCBtZXRob2RzIGFzCit1c3VhbC4gIElmIHdlIGhhdmUgdGhpcyBlbnVtZXJhdGlvbjo6CisKKyAgICA+Pj4gY2xhc3MgTW9vZChFbnVtKToKKyAgICAuLi4gICAgIGZ1bmt5ID0gMQorICAgIC4uLiAgICAgaGFwcHkgPSAzCisgICAgLi4uCisgICAgLi4uICAgICBkZWYgZGVzY3JpYmUoc2VsZik6CisgICAgLi4uICAgICAgICAgIyBzZWxmIGlzIHRoZSBtZW1iZXIgaGVyZQorICAgIC4uLiAgICAgICAgIHJldHVybiBzZWxmLm5hbWUsIHNlbGYudmFsdWUKKyAgICAuLi4KKyAgICAuLi4gICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgIC4uLiAgICAgICAgIHJldHVybiAnbXkgY3VzdG9tIHN0ciEgezB9Jy5mb3JtYXQoc2VsZi52YWx1ZSkKKyAgICAuLi4KKyAgICAuLi4gICAgIEBjbGFzc21ldGhvZAorICAgIC4uLiAgICAgZGVmIGZhdm9yaXRlX21vb2QoY2xzKToKKyAgICAuLi4gICAgICAgICAjIGNscyBoZXJlIGlzIHRoZSBlbnVtZXJhdGlvbgorICAgIC4uLiAgICAgICAgIHJldHVybiBjbHMuaGFwcHkKKyAgICAuLi4KKworVGhlbjo6CisKKyAgICA+Pj4gTW9vZC5mYXZvcml0ZV9tb29kKCkKKyAgICA8TW9vZC5oYXBweTogMz4KKyAgICA+Pj4gTW9vZC5oYXBweS5kZXNjcmliZSgpCisgICAgKCdoYXBweScsIDMpCisgICAgPj4+IHN0cihNb29kLmZ1bmt5KQorICAgICdteSBjdXN0b20gc3RyISAxJworCitUaGUgcnVsZXMgZm9yIHdoYXQgaXMgYWxsb3dlZCBhcmUgYXMgZm9sbG93czogX3N1bmRlcl8gbmFtZXMgKHN0YXJ0aW5nIGFuZAorZW5kaW5nIHdpdGggYSBzaW5nbGUgdW5kZXJzY29yZSkgYXJlIHJlc2VydmVkIGJ5IGVudW0gYW5kIGNhbm5vdCBiZSB1c2VkOworYWxsIG90aGVyIGF0dHJpYnV0ZXMgZGVmaW5lZCB3aXRoaW4gYW4gZW51bWVyYXRpb24gd2lsbCBiZWNvbWUgbWVtYmVycyBvZiB0aGlzCitlbnVtZXJhdGlvbiwgd2l0aCB0aGUgZXhjZXB0aW9uIG9mICpfX2R1bmRlcl9fKiBuYW1lcyBhbmQgZGVzY3JpcHRvcnMgKG1ldGhvZHMKK2FyZSBhbHNvIGRlc2NyaXB0b3JzKS4KKworTm90ZTogIGlmIHlvdXIgZW51bWVyYXRpb24gZGVmaW5lcyA6bWV0aDpgX19uZXdfX2AgYW5kL29yIDptZXRoOmBfX2luaXRfX2AgdGhlbgord2hhdGV2ZXIgdmFsdWUocykgd2VyZSBnaXZlbiB0byB0aGUgZW51bSBtZW1iZXIgd2lsbCBiZSBwYXNzZWQgaW50byB0aG9zZQorbWV0aG9kcy4gIFNlZSBgUGxhbmV0YF8gZm9yIGFuIGV4YW1wbGUuCisKKworUmVzdHJpY3RlZCBzdWJjbGFzc2luZyBvZiBlbnVtZXJhdGlvbnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1N1YmNsYXNzaW5nIGFuIGVudW1lcmF0aW9uIGlzIGFsbG93ZWQgb25seSBpZiB0aGUgZW51bWVyYXRpb24gZG9lcyBub3QgZGVmaW5lCithbnkgbWVtYmVycy4gIFNvIHRoaXMgaXMgZm9yYmlkZGVuOjoKKworICAgID4+PiBjbGFzcyBNb3JlQ29sb3IoQ29sb3IpOgorICAgIC4uLiAgICAgcGluayA9IDE3CisgICAgLi4uCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgIC4uLgorICAgIFR5cGVFcnJvcjogQ2Fubm90IGV4dGVuZCBlbnVtZXJhdGlvbnMKKworQnV0IHRoaXMgaXMgYWxsb3dlZDo6CisKKyAgICA+Pj4gY2xhc3MgRm9vKEVudW0pOgorICAgIC4uLiAgICAgZGVmIHNvbWVfYmVoYXZpb3Ioc2VsZik6CisgICAgLi4uICAgICAgICAgcGFzcworICAgIC4uLgorICAgID4+PiBjbGFzcyBCYXIoRm9vKToKKyAgICAuLi4gICAgIGhhcHB5ID0gMQorICAgIC4uLiAgICAgc2FkID0gMgorICAgIC4uLgorCitBbGxvd2luZyBzdWJjbGFzc2luZyBvZiBlbnVtcyB0aGF0IGRlZmluZSBtZW1iZXJzIHdvdWxkIGxlYWQgdG8gYSB2aW9sYXRpb24gb2YKK3NvbWUgaW1wb3J0YW50IGludmFyaWFudHMgb2YgdHlwZXMgYW5kIGluc3RhbmNlcy4gIE9uIHRoZSBvdGhlciBoYW5kLCBpdCBtYWtlcworc2Vuc2UgdG8gYWxsb3cgc2hhcmluZyBzb21lIGNvbW1vbiBiZWhhdmlvciBiZXR3ZWVuIGEgZ3JvdXAgb2YgZW51bWVyYXRpb25zLgorKFNlZSBgT3JkZXJlZEVudW1gXyBmb3IgYW4gZXhhbXBsZS4pCisKKworUGlja2xpbmcKKy0tLS0tLS0tCisKK0VudW1lcmF0aW9ucyBjYW4gYmUgcGlja2xlZCBhbmQgdW5waWNrbGVkOjoKKworICAgID4+PiBmcm9tIHRlc3QudGVzdF9lbnVtIGltcG9ydCBGcnVpdAorICAgID4+PiBmcm9tIHBpY2tsZSBpbXBvcnQgZHVtcHMsIGxvYWRzCisgICAgPj4+IEZydWl0LnRvbWF0byBpcyBsb2FkcyhkdW1wcyhGcnVpdC50b21hdG8pKQorICAgIFRydWUKKworVGhlIHVzdWFsIHJlc3RyaWN0aW9ucyBmb3IgcGlja2xpbmcgYXBwbHk6IHBpY2tsYWJsZSBlbnVtcyBtdXN0IGJlIGRlZmluZWQgaW4KK3RoZSB0b3AgbGV2ZWwgb2YgYSBtb2R1bGUsIHNpbmNlIHVucGlja2xpbmcgcmVxdWlyZXMgdGhlbSB0byBiZSBpbXBvcnRhYmxlCitmcm9tIHRoYXQgbW9kdWxlLgorCisuLiBub3RlOjoKKworICAgIFdpdGggcGlja2xlIHByb3RvY29sIHZlcnNpb24gNCBpdCBpcyBwb3NzaWJsZSB0byBlYXNpbHkgcGlja2xlIGVudW1zCisgICAgbmVzdGVkIGluIG90aGVyIGNsYXNzZXMuCisKK0l0IGlzIHBvc3NpYmxlIHRvIG1vZGlmeSBob3cgRW51bSBtZW1iZXJzIGFyZSBwaWNrbGVkL3VucGlja2xlZCBieSBkZWZpbmluZworOm1ldGg6YF9fcmVkdWNlX2V4X19gIGluIHRoZSBlbnVtZXJhdGlvbiBjbGFzcy4KKworCitGdW5jdGlvbmFsIEFQSQorLS0tLS0tLS0tLS0tLS0KKworVGhlIDpjbGFzczpgRW51bWAgY2xhc3MgaXMgY2FsbGFibGUsIHByb3ZpZGluZyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uYWwgQVBJOjoKKworICAgID4+PiBBbmltYWwgPSBFbnVtKCdBbmltYWwnLCAnYW50IGJlZSBjYXQgZG9nJykKKyAgICA+Pj4gQW5pbWFsCisgICAgPGVudW0gJ0FuaW1hbCc+CisgICAgPj4+IEFuaW1hbC5hbnQKKyAgICA8QW5pbWFsLmFudDogMT4KKyAgICA+Pj4gQW5pbWFsLmFudC52YWx1ZQorICAgIDEKKyAgICA+Pj4gbGlzdChBbmltYWwpCisgICAgWzxBbmltYWwuYW50OiAxPiwgPEFuaW1hbC5iZWU6IDI+LCA8QW5pbWFsLmNhdDogMz4sIDxBbmltYWwuZG9nOiA0Pl0KKworVGhlIHNlbWFudGljcyBvZiB0aGlzIEFQSSByZXNlbWJsZSA6Y2xhc3M6YH5jb2xsZWN0aW9ucy5uYW1lZHR1cGxlYC4gVGhlIGZpcnN0Cithcmd1bWVudCBvZiB0aGUgY2FsbCB0byA6Y2xhc3M6YEVudW1gIGlzIHRoZSBuYW1lIG9mIHRoZSBlbnVtZXJhdGlvbi4KKworVGhlIHNlY29uZCBhcmd1bWVudCBpcyB0aGUgKnNvdXJjZSogb2YgZW51bWVyYXRpb24gbWVtYmVyIG5hbWVzLiAgSXQgY2FuIGJlIGEKK3doaXRlc3BhY2Utc2VwYXJhdGVkIHN0cmluZyBvZiBuYW1lcywgYSBzZXF1ZW5jZSBvZiBuYW1lcywgYSBzZXF1ZW5jZSBvZgorMi10dXBsZXMgd2l0aCBrZXkvdmFsdWUgcGFpcnMsIG9yIGEgbWFwcGluZyAoZS5nLiBkaWN0aW9uYXJ5KSBvZiBuYW1lcyB0bwordmFsdWVzLiAgVGhlIGxhc3QgdHdvIG9wdGlvbnMgZW5hYmxlIGFzc2lnbmluZyBhcmJpdHJhcnkgdmFsdWVzIHRvCitlbnVtZXJhdGlvbnM7IHRoZSBvdGhlcnMgYXV0by1hc3NpZ24gaW5jcmVhc2luZyBpbnRlZ2VycyBzdGFydGluZyB3aXRoIDEuICBBCituZXcgY2xhc3MgZGVyaXZlZCBmcm9tIDpjbGFzczpgRW51bWAgaXMgcmV0dXJuZWQuICBJbiBvdGhlciB3b3JkcywgdGhlIGFib3ZlCithc3NpZ25tZW50IHRvIDpjbGFzczpgQW5pbWFsYCBpcyBlcXVpdmFsZW50IHRvOjoKKworICAgID4+PiBjbGFzcyBBbmltYWwoRW51bSk6CisgICAgLi4uICAgICBhbnQgPSAxCisgICAgLi4uICAgICBiZWUgPSAyCisgICAgLi4uICAgICBjYXQgPSAzCisgICAgLi4uICAgICBkb2cgPSA0CisgICAgLi4uCisKK1RoZSByZWFzb24gZm9yIGRlZmF1bHRpbmcgdG8gYGAxYGAgYXMgdGhlIHN0YXJ0aW5nIG51bWJlciBhbmQgbm90IGBgMGBgIGlzCit0aGF0IGBgMGBgIGlzIGBgRmFsc2VgYCBpbiBhIGJvb2xlYW4gc2Vuc2UsIGJ1dCBlbnVtIG1lbWJlcnMgYWxsIGV2YWx1YXRlCit0byBgYFRydWVgYC4KKworUGlja2xpbmcgZW51bXMgY3JlYXRlZCB3aXRoIHRoZSBmdW5jdGlvbmFsIEFQSSBjYW4gYmUgdHJpY2t5IGFzIGZyYW1lIHN0YWNrCitpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGFyZSB1c2VkIHRvIHRyeSBhbmQgZmlndXJlIG91dCB3aGljaCBtb2R1bGUgdGhlCitlbnVtZXJhdGlvbiBpcyBiZWluZyBjcmVhdGVkIGluIChlLmcuIGl0IHdpbGwgZmFpbCBpZiB5b3UgdXNlIGEgdXRpbGl0eQorZnVuY3Rpb24gaW4gc2VwYXJhdGUgbW9kdWxlLCBhbmQgYWxzbyBtYXkgbm90IHdvcmsgb24gSXJvblB5dGhvbiBvciBKeXRob24pLgorVGhlIHNvbHV0aW9uIGlzIHRvIHNwZWNpZnkgdGhlIG1vZHVsZSBuYW1lIGV4cGxpY2l0bHkgYXMgZm9sbG93czo6CisKKyAgICA+Pj4gQW5pbWFsID0gRW51bSgnQW5pbWFsJywgJ2FudCBiZWUgY2F0IGRvZycsIG1vZHVsZT1fX25hbWVfXykKKworLi4gd2FybmluZzo6CisKKyAgICBJZiBgYG1vZHVsZWBgIGlzIG5vdCBzdXBwbGllZCwgYW5kIEVudW0gY2Fubm90IGRldGVybWluZSB3aGF0IGl0IGlzLAorICAgIHRoZSBuZXcgRW51bSBtZW1iZXJzIHdpbGwgbm90IGJlIHVucGlja2xhYmxlOyB0byBrZWVwIGVycm9ycyBjbG9zZXIgdG8KKyAgICB0aGUgc291cmNlLCBwaWNrbGluZyB3aWxsIGJlIGRpc2FibGVkLgorCitUaGUgbmV3IHBpY2tsZSBwcm90b2NvbCA0IGFsc28sIGluIHNvbWUgY2lyY3Vtc3RhbmNlcywgcmVsaWVzIG9uCis6YXR0cjpgX19xdWFsbmFtZV9fYCBiZWluZyBzZXQgdG8gdGhlIGxvY2F0aW9uIHdoZXJlIHBpY2tsZSB3aWxsIGJlIGFibGUKK3RvIGZpbmQgdGhlIGNsYXNzLiAgRm9yIGV4YW1wbGUsIGlmIHRoZSBjbGFzcyB3YXMgbWFkZSBhdmFpbGFibGUgaW4gY2xhc3MKK1NvbWVEYXRhIGluIHRoZSBnbG9iYWwgc2NvcGU6OgorCisgICAgPj4+IEFuaW1hbCA9IEVudW0oJ0FuaW1hbCcsICdhbnQgYmVlIGNhdCBkb2cnLCBxdWFsbmFtZT0nU29tZURhdGEuQW5pbWFsJykKKworVGhlIGNvbXBsZXRlIHNpZ25hdHVyZSBpczo6CisKKyAgICBFbnVtKHZhbHVlPSdOZXdFbnVtTmFtZScsIG5hbWVzPTwuLi4+LCAqLCBtb2R1bGU9Jy4uLicsIHF1YWxuYW1lPScuLi4nLCB0eXBlPTxtaXhlZC1pbiBjbGFzcz4pCisKKzp2YWx1ZTogV2hhdCB0aGUgbmV3IEVudW0gY2xhc3Mgd2lsbCByZWNvcmQgYXMgaXRzIG5hbWUuCisKKzpuYW1lczogVGhlIEVudW0gbWVtYmVycy4gIFRoaXMgY2FuIGJlIGEgd2hpdGVzcGFjZSBvciBjb21tYSBzZXBhcmF0ZWQgc3RyaW5nCisgICh2YWx1ZXMgd2lsbCBzdGFydCBhdCAxKTo6CisKKyAgICAncmVkIGdyZWVuIGJsdWUnIHwgJ3JlZCxncmVlbixibHVlJyB8ICdyZWQsIGdyZWVuLCBibHVlJworCisgIG9yIGFuIGl0ZXJhdG9yIG9mIG5hbWVzOjoKKworICAgIFsncmVkJywgJ2dyZWVuJywgJ2JsdWUnXQorCisgIG9yIGFuIGl0ZXJhdG9yIG9mIChuYW1lLCB2YWx1ZSkgcGFpcnM6OgorCisgICAgWygnY3lhbicsIDQpLCAoJ21hZ2VudGEnLCA1KSwgKCd5ZWxsb3cnLCA2KV0KKworICBvciBhIG1hcHBpbmc6OgorCisgICAgeydjaGFydHJldXNlJzogNywgJ3NlYV9ncmVlbic6IDExLCAncm9zZW1hcnknOiA0Mn0KKworOm1vZHVsZTogbmFtZSBvZiBtb2R1bGUgd2hlcmUgbmV3IEVudW0gY2xhc3MgY2FuIGJlIGZvdW5kLgorCis6cXVhbG5hbWU6IHdoZXJlIGluIG1vZHVsZSBuZXcgRW51bSBjbGFzcyBjYW4gYmUgZm91bmQuCisKKzp0eXBlOiB0eXBlIHRvIG1peCBpbiB0byBuZXcgRW51bSBjbGFzcy4KKworCitEZXJpdmVkIEVudW1lcmF0aW9ucworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSW50RW51bQorXl5eXl5eXgorCitBIHZhcmlhdGlvbiBvZiA6Y2xhc3M6YEVudW1gIGlzIHByb3ZpZGVkIHdoaWNoIGlzIGFsc28gYSBzdWJjbGFzcyBvZgorOmNsYXNzOmBpbnRgLiAgTWVtYmVycyBvZiBhbiA6Y2xhc3M6YEludEVudW1gIGNhbiBiZSBjb21wYXJlZCB0byBpbnRlZ2VyczsKK2J5IGV4dGVuc2lvbiwgaW50ZWdlciBlbnVtZXJhdGlvbnMgb2YgZGlmZmVyZW50IHR5cGVzIGNhbiBhbHNvIGJlIGNvbXBhcmVkCit0byBlYWNoIG90aGVyOjoKKworICAgID4+PiBmcm9tIGVudW0gaW1wb3J0IEludEVudW0KKyAgICA+Pj4gY2xhc3MgU2hhcGUoSW50RW51bSk6CisgICAgLi4uICAgICBjaXJjbGUgPSAxCisgICAgLi4uICAgICBzcXVhcmUgPSAyCisgICAgLi4uCisgICAgPj4+IGNsYXNzIFJlcXVlc3QoSW50RW51bSk6CisgICAgLi4uICAgICBwb3N0ID0gMQorICAgIC4uLiAgICAgZ2V0ID0gMgorICAgIC4uLgorICAgID4+PiBTaGFwZSA9PSAxCisgICAgRmFsc2UKKyAgICA+Pj4gU2hhcGUuY2lyY2xlID09IDEKKyAgICBUcnVlCisgICAgPj4+IFNoYXBlLmNpcmNsZSA9PSBSZXF1ZXN0LnBvc3QKKyAgICBUcnVlCisKK0hvd2V2ZXIsIHRoZXkgc3RpbGwgY2FuJ3QgYmUgY29tcGFyZWQgdG8gc3RhbmRhcmQgOmNsYXNzOmBFbnVtYCBlbnVtZXJhdGlvbnM6OgorCisgICAgPj4+IGNsYXNzIFNoYXBlKEludEVudW0pOgorICAgIC4uLiAgICAgY2lyY2xlID0gMQorICAgIC4uLiAgICAgc3F1YXJlID0gMgorICAgIC4uLgorICAgID4+PiBjbGFzcyBDb2xvcihFbnVtKToKKyAgICAuLi4gICAgIHJlZCA9IDEKKyAgICAuLi4gICAgIGdyZWVuID0gMgorICAgIC4uLgorICAgID4+PiBTaGFwZS5jaXJjbGUgPT0gQ29sb3IucmVkCisgICAgRmFsc2UKKworOmNsYXNzOmBJbnRFbnVtYCB2YWx1ZXMgYmVoYXZlIGxpa2UgaW50ZWdlcnMgaW4gb3RoZXIgd2F5cyB5b3UnZCBleHBlY3Q6OgorCisgICAgPj4+IGludChTaGFwZS5jaXJjbGUpCisgICAgMQorICAgID4+PiBbJ2EnLCAnYicsICdjJ11bU2hhcGUuY2lyY2xlXQorICAgICdiJworICAgID4+PiBbaSBmb3IgaSBpbiByYW5nZShTaGFwZS5zcXVhcmUpXQorICAgIFswLCAxXQorCitGb3IgdGhlIHZhc3QgbWFqb3JpdHkgb2YgY29kZSwgOmNsYXNzOmBFbnVtYCBpcyBzdHJvbmdseSByZWNvbW1lbmRlZCwKK3NpbmNlIDpjbGFzczpgSW50RW51bWAgYnJlYWtzIHNvbWUgc2VtYW50aWMgcHJvbWlzZXMgb2YgYW4gZW51bWVyYXRpb24gKGJ5CitiZWluZyBjb21wYXJhYmxlIHRvIGludGVnZXJzLCBhbmQgdGh1cyBieSB0cmFuc2l0aXZpdHkgdG8gb3RoZXIKK3VucmVsYXRlZCBlbnVtZXJhdGlvbnMpLiAgSXQgc2hvdWxkIGJlIHVzZWQgb25seSBpbiBzcGVjaWFsIGNhc2VzIHdoZXJlCit0aGVyZSdzIG5vIG90aGVyIGNob2ljZTsgZm9yIGV4YW1wbGUsIHdoZW4gaW50ZWdlciBjb25zdGFudHMgYXJlCityZXBsYWNlZCB3aXRoIGVudW1lcmF0aW9ucyBhbmQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgaXMgcmVxdWlyZWQgd2l0aCBjb2RlCit0aGF0IHN0aWxsIGV4cGVjdHMgaW50ZWdlcnMuCisKKworT3RoZXJzCiteXl5eXl4KKworV2hpbGUgOmNsYXNzOmBJbnRFbnVtYCBpcyBwYXJ0IG9mIHRoZSA6bW9kOmBlbnVtYCBtb2R1bGUsIGl0IHdvdWxkIGJlIHZlcnkKK3NpbXBsZSB0byBpbXBsZW1lbnQgaW5kZXBlbmRlbnRseTo6CisKKyAgICBjbGFzcyBJbnRFbnVtKGludCwgRW51bSk6CisgICAgICAgIHBhc3MKKworVGhpcyBkZW1vbnN0cmF0ZXMgaG93IHNpbWlsYXIgZGVyaXZlZCBlbnVtZXJhdGlvbnMgY2FuIGJlIGRlZmluZWQ7IGZvciBleGFtcGxlCithIDpjbGFzczpgU3RyRW51bWAgdGhhdCBtaXhlcyBpbiA6Y2xhc3M6YHN0cmAgaW5zdGVhZCBvZiA6Y2xhc3M6YGludGAuCisKK1NvbWUgcnVsZXM6CisKKzEuIFdoZW4gc3ViY2xhc3NpbmcgOmNsYXNzOmBFbnVtYCwgbWl4LWluIHR5cGVzIG11c3QgYXBwZWFyIGJlZm9yZQorICAgOmNsYXNzOmBFbnVtYCBpdHNlbGYgaW4gdGhlIHNlcXVlbmNlIG9mIGJhc2VzLCBhcyBpbiB0aGUgOmNsYXNzOmBJbnRFbnVtYAorICAgZXhhbXBsZSBhYm92ZS4KKzIuIFdoaWxlIDpjbGFzczpgRW51bWAgY2FuIGhhdmUgbWVtYmVycyBvZiBhbnkgdHlwZSwgb25jZSB5b3UgbWl4IGluIGFuCisgICBhZGRpdGlvbmFsIHR5cGUsIGFsbCB0aGUgbWVtYmVycyBtdXN0IGhhdmUgdmFsdWVzIG9mIHRoYXQgdHlwZSwgZS5nLgorICAgOmNsYXNzOmBpbnRgIGFib3ZlLiAgVGhpcyByZXN0cmljdGlvbiBkb2VzIG5vdCBhcHBseSB0byBtaXgtaW5zIHdoaWNoIG9ubHkKKyAgIGFkZCBtZXRob2RzIGFuZCBkb24ndCBzcGVjaWZ5IGFub3RoZXIgZGF0YSB0eXBlIHN1Y2ggYXMgOmNsYXNzOmBpbnRgIG9yCisgICA6Y2xhc3M6YHN0cmAuCiszLiBXaGVuIGFub3RoZXIgZGF0YSB0eXBlIGlzIG1peGVkIGluLCB0aGUgOmF0dHI6YHZhbHVlYCBhdHRyaWJ1dGUgaXMgKm5vdCB0aGUKKyAgIHNhbWUqIGFzIHRoZSBlbnVtIG1lbWJlciBpdHNlbGYsIGFsdGhvdWdoIGl0IGlzIGVxdWl2YWxlbnQgYW5kIHdpbGwgY29tcGFyZQorICAgZXF1YWwuCis0LiAlLXN0eWxlIGZvcm1hdHRpbmc6ICBgJXNgIGFuZCBgJXJgIGNhbGwgOmNsYXNzOmBFbnVtYCdzIDptZXRoOmBfX3N0cl9fYCBhbmQKKyAgIDptZXRoOmBfX3JlcHJfX2AgcmVzcGVjdGl2ZWx5OyBvdGhlciBjb2RlcyAoc3VjaCBhcyBgJWlgIG9yIGAlaGAgZm9yCisgICBJbnRFbnVtKSB0cmVhdCB0aGUgZW51bSBtZW1iZXIgYXMgaXRzIG1peGVkLWluIHR5cGUuCis1LiA6bWV0aDpgc3RyLl9fZm9ybWF0X19gIChvciA6ZnVuYzpgZm9ybWF0YCkgd2lsbCB1c2UgdGhlIG1peGVkLWluCisgICB0eXBlJ3MgOm1ldGg6YF9fZm9ybWF0X19gLiAgSWYgdGhlIDpjbGFzczpgRW51bWAncyA6ZnVuYzpgc3RyYCBvcgorICAgOmZ1bmM6YHJlcHJgIGlzIGRlc2lyZWQgdXNlIHRoZSBgIXNgIG9yIGAhcmAgOmNsYXNzOmBzdHJgIGZvcm1hdCBjb2Rlcy4KKworCitJbnRlcmVzdGluZyBleGFtcGxlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2hpbGUgOmNsYXNzOmBFbnVtYCBhbmQgOmNsYXNzOmBJbnRFbnVtYCBhcmUgZXhwZWN0ZWQgdG8gY292ZXIgdGhlIG1ham9yaXR5IG9mCit1c2UtY2FzZXMsIHRoZXkgY2Fubm90IGNvdmVyIHRoZW0gYWxsLiAgSGVyZSBhcmUgcmVjaXBlcyBmb3Igc29tZSBkaWZmZXJlbnQKK3R5cGVzIG9mIGVudW1lcmF0aW9ucyB0aGF0IGNhbiBiZSB1c2VkIGRpcmVjdGx5LCBvciBhcyBleGFtcGxlcyBmb3IgY3JlYXRpbmcKK29uZSdzIG93bi4KKworCitBdXRvTnVtYmVyCiteXl5eXl5eXl5eCisKK0F2b2lkcyBoYXZpbmcgdG8gc3BlY2lmeSB0aGUgdmFsdWUgZm9yIGVhY2ggZW51bWVyYXRpb24gbWVtYmVyOjoKKworICAgID4+PiBjbGFzcyBBdXRvTnVtYmVyKEVudW0pOgorICAgIC4uLiAgICAgZGVmIF9fbmV3X18oY2xzKToKKyAgICAuLi4gICAgICAgICB2YWx1ZSA9IGxlbihjbHMuX19tZW1iZXJzX18pICsgMQorICAgIC4uLiAgICAgICAgIG9iaiA9IG9iamVjdC5fX25ld19fKGNscykKKyAgICAuLi4gICAgICAgICBvYmouX3ZhbHVlXyA9IHZhbHVlCisgICAgLi4uICAgICAgICAgcmV0dXJuIG9iagorICAgIC4uLgorICAgID4+PiBjbGFzcyBDb2xvcihBdXRvTnVtYmVyKToKKyAgICAuLi4gICAgIHJlZCA9ICgpCisgICAgLi4uICAgICBncmVlbiA9ICgpCisgICAgLi4uICAgICBibHVlID0gKCkKKyAgICAuLi4KKyAgICA+Pj4gQ29sb3IuZ3JlZW4udmFsdWUgPT0gMgorICAgIFRydWUKKworLi4gbm90ZTo6CisKKyAgICBUaGUgOm1ldGg6YF9fbmV3X19gIG1ldGhvZCwgaWYgZGVmaW5lZCwgaXMgdXNlZCBkdXJpbmcgY3JlYXRpb24gb2YgdGhlIEVudW0KKyAgICBtZW1iZXJzOyBpdCBpcyB0aGVuIHJlcGxhY2VkIGJ5IEVudW0ncyA6bWV0aDpgX19uZXdfX2Agd2hpY2ggaXMgdXNlZCBhZnRlcgorICAgIGNsYXNzIGNyZWF0aW9uIGZvciBsb29rdXAgb2YgZXhpc3RpbmcgbWVtYmVycy4KKworCitPcmRlcmVkRW51bQorXl5eXl5eXl5eXl4KKworQW4gb3JkZXJlZCBlbnVtZXJhdGlvbiB0aGF0IGlzIG5vdCBiYXNlZCBvbiA6Y2xhc3M6YEludEVudW1gIGFuZCBzbyBtYWludGFpbnMKK3RoZSBub3JtYWwgOmNsYXNzOmBFbnVtYCBpbnZhcmlhbnRzIChzdWNoIGFzIG5vdCBiZWluZyBjb21wYXJhYmxlIHRvIG90aGVyCitlbnVtZXJhdGlvbnMpOjoKKworICAgID4+PiBjbGFzcyBPcmRlcmVkRW51bShFbnVtKToKKyAgICAuLi4gICAgIGRlZiBfX2dlX18oc2VsZiwgb3RoZXIpOgorICAgIC4uLiAgICAgICAgIGlmIHNlbGYuX19jbGFzc19fIGlzIG90aGVyLl9fY2xhc3NfXzoKKyAgICAuLi4gICAgICAgICAgICAgcmV0dXJuIHNlbGYudmFsdWUgPj0gb3RoZXIudmFsdWUKKyAgICAuLi4gICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICAuLi4gICAgIGRlZiBfX2d0X18oc2VsZiwgb3RoZXIpOgorICAgIC4uLiAgICAgICAgIGlmIHNlbGYuX19jbGFzc19fIGlzIG90aGVyLl9fY2xhc3NfXzoKKyAgICAuLi4gICAgICAgICAgICAgcmV0dXJuIHNlbGYudmFsdWUgPiBvdGhlci52YWx1ZQorICAgIC4uLiAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgIC4uLiAgICAgZGVmIF9fbGVfXyhzZWxmLCBvdGhlcik6CisgICAgLi4uICAgICAgICAgaWYgc2VsZi5fX2NsYXNzX18gaXMgb3RoZXIuX19jbGFzc19fOgorICAgIC4uLiAgICAgICAgICAgICByZXR1cm4gc2VsZi52YWx1ZSA8PSBvdGhlci52YWx1ZQorICAgIC4uLiAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgIC4uLiAgICAgZGVmIF9fbHRfXyhzZWxmLCBvdGhlcik6CisgICAgLi4uICAgICAgICAgaWYgc2VsZi5fX2NsYXNzX18gaXMgb3RoZXIuX19jbGFzc19fOgorICAgIC4uLiAgICAgICAgICAgICByZXR1cm4gc2VsZi52YWx1ZSA8IG90aGVyLnZhbHVlCisgICAgLi4uICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgLi4uCisgICAgPj4+IGNsYXNzIEdyYWRlKE9yZGVyZWRFbnVtKToKKyAgICAuLi4gICAgIEEgPSA1CisgICAgLi4uICAgICBCID0gNAorICAgIC4uLiAgICAgQyA9IDMKKyAgICAuLi4gICAgIEQgPSAyCisgICAgLi4uICAgICBGID0gMQorICAgIC4uLgorICAgID4+PiBHcmFkZS5DIDwgR3JhZGUuQQorICAgIFRydWUKKworCitEdXBsaWNhdGVGcmVlRW51bQorXl5eXl5eXl5eXl5eXl5eXl4KKworUmFpc2VzIGFuIGVycm9yIGlmIGEgZHVwbGljYXRlIG1lbWJlciBuYW1lIGlzIGZvdW5kIGluc3RlYWQgb2YgY3JlYXRpbmcgYW4KK2FsaWFzOjoKKworICAgID4+PiBjbGFzcyBEdXBsaWNhdGVGcmVlRW51bShFbnVtKToKKyAgICAuLi4gICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncyk6CisgICAgLi4uICAgICAgICAgY2xzID0gc2VsZi5fX2NsYXNzX18KKyAgICAuLi4gICAgICAgICBpZiBhbnkoc2VsZi52YWx1ZSA9PSBlLnZhbHVlIGZvciBlIGluIGNscyk6CisgICAgLi4uICAgICAgICAgICAgIGEgPSBzZWxmLm5hbWUKKyAgICAuLi4gICAgICAgICAgICAgZSA9IGNscyhzZWxmLnZhbHVlKS5uYW1lCisgICAgLi4uICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCisgICAgLi4uICAgICAgICAgICAgICAgICAiYWxpYXNlcyBub3QgYWxsb3dlZCBpbiBEdXBsaWNhdGVGcmVlRW51bTogICVyIC0tPiAlciIKKyAgICAuLi4gICAgICAgICAgICAgICAgICUgKGEsIGUpKQorICAgIC4uLgorICAgID4+PiBjbGFzcyBDb2xvcihEdXBsaWNhdGVGcmVlRW51bSk6CisgICAgLi4uICAgICByZWQgPSAxCisgICAgLi4uICAgICBncmVlbiA9IDIKKyAgICAuLi4gICAgIGJsdWUgPSAzCisgICAgLi4uICAgICBncmVuZSA9IDIKKyAgICAuLi4KKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgLi4uCisgICAgVmFsdWVFcnJvcjogYWxpYXNlcyBub3QgYWxsb3dlZCBpbiBEdXBsaWNhdGVGcmVlRW51bTogICdncmVuZScgLS0+ICdncmVlbicKKworLi4gbm90ZTo6CisKKyAgICBUaGlzIGlzIGEgdXNlZnVsIGV4YW1wbGUgZm9yIHN1YmNsYXNzaW5nIEVudW0gdG8gYWRkIG9yIGNoYW5nZSBvdGhlcgorICAgIGJlaGF2aW9ycyBhcyB3ZWxsIGFzIGRpc2FsbG93aW5nIGFsaWFzZXMuICBJZiB0aGUgb25seSBkZXNpcmVkIGNoYW5nZSBpcworICAgIGRpc2FsbG93aW5nIGFsaWFzZXMsIHRoZSA6ZnVuYzpgdW5pcXVlYCBkZWNvcmF0b3IgY2FuIGJlIHVzZWQgaW5zdGVhZC4KKworCitQbGFuZXQKK15eXl5eXgorCitJZiA6bWV0aDpgX19uZXdfX2Agb3IgOm1ldGg6YF9faW5pdF9fYCBpcyBkZWZpbmVkIHRoZSB2YWx1ZSBvZiB0aGUgZW51bSBtZW1iZXIKK3dpbGwgYmUgcGFzc2VkIHRvIHRob3NlIG1ldGhvZHM6OgorCisgICAgPj4+IGNsYXNzIFBsYW5ldChFbnVtKToKKyAgICAuLi4gICAgIE1FUkNVUlkgPSAoMy4zMDNlKzIzLCAyLjQzOTdlNikKKyAgICAuLi4gICAgIFZFTlVTICAgPSAoNC44NjllKzI0LCA2LjA1MThlNikKKyAgICAuLi4gICAgIEVBUlRIICAgPSAoNS45NzZlKzI0LCA2LjM3ODE0ZTYpCisgICAgLi4uICAgICBNQVJTICAgID0gKDYuNDIxZSsyMywgMy4zOTcyZTYpCisgICAgLi4uICAgICBKVVBJVEVSID0gKDEuOWUrMjcsICAgNy4xNDkyZTcpCisgICAgLi4uICAgICBTQVRVUk4gID0gKDUuNjg4ZSsyNiwgNi4wMjY4ZTcpCisgICAgLi4uICAgICBVUkFOVVMgID0gKDguNjg2ZSsyNSwgMi41NTU5ZTcpCisgICAgLi4uICAgICBORVBUVU5FID0gKDEuMDI0ZSsyNiwgMi40NzQ2ZTcpCisgICAgLi4uICAgICBkZWYgX19pbml0X18oc2VsZiwgbWFzcywgcmFkaXVzKToKKyAgICAuLi4gICAgICAgICBzZWxmLm1hc3MgPSBtYXNzICAgICAgICMgaW4ga2lsb2dyYW1zCisgICAgLi4uICAgICAgICAgc2VsZi5yYWRpdXMgPSByYWRpdXMgICAjIGluIG1ldGVycworICAgIC4uLiAgICAgQHByb3BlcnR5CisgICAgLi4uICAgICBkZWYgc3VyZmFjZV9ncmF2aXR5KHNlbGYpOgorICAgIC4uLiAgICAgICAgICMgdW5pdmVyc2FsIGdyYXZpdGF0aW9uYWwgY29uc3RhbnQgIChtMyBrZy0xIHMtMikKKyAgICAuLi4gICAgICAgICBHID0gNi42NzMwMEUtMTEKKyAgICAuLi4gICAgICAgICByZXR1cm4gRyAqIHNlbGYubWFzcyAvIChzZWxmLnJhZGl1cyAqIHNlbGYucmFkaXVzKQorICAgIC4uLgorICAgID4+PiBQbGFuZXQuRUFSVEgudmFsdWUKKyAgICAoNS45NzZlKzI0LCA2Mzc4MTQwLjApCisgICAgPj4+IFBsYW5ldC5FQVJUSC5zdXJmYWNlX2dyYXZpdHkKKyAgICA5LjgwMjY1Mjc0MzMzNzEyOQorCisKK0hvdyBhcmUgRW51bXMgZGlmZmVyZW50PworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0VudW1zIGhhdmUgYSBjdXN0b20gbWV0YWNsYXNzIHRoYXQgYWZmZWN0cyBtYW55IGFzcGVjdHMgb2YgYm90aCBkZXJpdmVkIEVudW0KK2NsYXNzZXMgYW5kIHRoZWlyIGluc3RhbmNlcyAobWVtYmVycykuCisKKworRW51bSBDbGFzc2VzCiteXl5eXl5eXl5eXl4KKworVGhlIDpjbGFzczpgRW51bU1ldGFgIG1ldGFjbGFzcyBpcyByZXNwb25zaWJsZSBmb3IgcHJvdmlkaW5nIHRoZQorOm1ldGg6YF9fY29udGFpbnNfX2AsIDptZXRoOmBfX2Rpcl9fYCwgOm1ldGg6YF9faXRlcl9fYCBhbmQgb3RoZXIgbWV0aG9kcyB0aGF0CithbGxvdyBvbmUgdG8gZG8gdGhpbmdzIHdpdGggYW4gOmNsYXNzOmBFbnVtYCBjbGFzcyB0aGF0IGZhaWwgb24gYSB0eXBpY2FsCitjbGFzcywgc3VjaCBhcyBgbGlzdChDb2xvcilgIG9yIGBzb21lX3ZhciBpbiBDb2xvcmAuICA6Y2xhc3M6YEVudW1NZXRhYCBpcworcmVzcG9uc2libGUgZm9yIGVuc3VyaW5nIHRoYXQgdmFyaW91cyBvdGhlciBtZXRob2RzIG9uIHRoZSBmaW5hbCA6Y2xhc3M6YEVudW1gCitjbGFzcyBhcmUgY29ycmVjdCAoc3VjaCBhcyA6bWV0aDpgX19uZXdfX2AsIDptZXRoOmBfX2dldG5ld2FyZ3NfX2AsCis6bWV0aDpgX19zdHJfX2AgYW5kIDptZXRoOmBfX3JlcHJfX2ApLgorCisKK0VudW0gTWVtYmVycyAoYWthIGluc3RhbmNlcykKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworVGhlIG1vc3QgaW50ZXJlc3RpbmcgdGhpbmcgYWJvdXQgRW51bSBtZW1iZXJzIGlzIHRoYXQgdGhleSBhcmUgc2luZ2xldG9ucy4KKzpjbGFzczpgRW51bU1ldGFgIGNyZWF0ZXMgdGhlbSBhbGwgd2hpbGUgaXQgaXMgY3JlYXRpbmcgdGhlIDpjbGFzczpgRW51bWAKK2NsYXNzIGl0c2VsZiwgYW5kIHRoZW4gcHV0cyBhIGN1c3RvbSA6bWV0aDpgX19uZXdfX2AgaW4gcGxhY2UgdG8gZW5zdXJlCit0aGF0IG5vIG5ldyBvbmVzIGFyZSBldmVyIGluc3RhbnRpYXRlZCBieSByZXR1cm5pbmcgb25seSB0aGUgZXhpc3RpbmcKK21lbWJlciBpbnN0YW5jZXMuCisKKworRmluZXIgUG9pbnRzCiteXl5eXl5eXl5eXl4KKworRW51bSBtZW1iZXJzIGFyZSBpbnN0YW5jZXMgb2YgYW4gRW51bSBjbGFzcywgYW5kIGV2ZW4gdGhvdWdoIHRoZXkgYXJlCithY2Nlc3NpYmxlIGFzIGBFbnVtQ2xhc3MubWVtYmVyYCwgdGhleSBhcmUgbm90IGFjY2Vzc2libGUgZGlyZWN0bHkgZnJvbQordGhlIG1lbWJlcjo6CisKKyAgICA+Pj4gQ29sb3IucmVkCisgICAgPENvbG9yLnJlZDogMT4KKyAgICA+Pj4gQ29sb3IucmVkLmJsdWUKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgLi4uCisgICAgQXR0cmlidXRlRXJyb3I6ICdDb2xvcicgb2JqZWN0IGhhcyBubyBhdHRyaWJ1dGUgJ2JsdWUnCisKK0xpa2V3aXNlLCB0aGUgOmF0dHI6YF9fbWVtYmVyc19fYCBpcyBvbmx5IGF2YWlsYWJsZSBvbiB0aGUgY2xhc3MuCisKK0lmIHlvdSBnaXZlIHlvdXIgOmNsYXNzOmBFbnVtYCBzdWJjbGFzcyBleHRyYSBtZXRob2RzLCBsaWtlIHRoZSBgUGxhbmV0YF8KK2NsYXNzIGFib3ZlLCB0aG9zZSBtZXRob2RzIHdpbGwgc2hvdyB1cCBpbiBhIDpmdW5jOmBkaXJgIG9mIHRoZSBtZW1iZXIsCitidXQgbm90IG9mIHRoZSBjbGFzczo6CisKKyAgICA+Pj4gZGlyKFBsYW5ldCkKKyAgICBbJ0VBUlRIJywgJ0pVUElURVInLCAnTUFSUycsICdNRVJDVVJZJywgJ05FUFRVTkUnLCAnU0FUVVJOJywgJ1VSQU5VUycsICdWRU5VUycsICdfX2NsYXNzX18nLCAnX19kb2NfXycsICdfX21lbWJlcnNfXycsICdfX21vZHVsZV9fJ10KKyAgICA+Pj4gZGlyKFBsYW5ldC5FQVJUSCkKKyAgICBbJ19fY2xhc3NfXycsICdfX2RvY19fJywgJ19fbW9kdWxlX18nLCAnbmFtZScsICdzdXJmYWNlX2dyYXZpdHknLCAndmFsdWUnXQorCitUaGUgOm1ldGg6YF9fbmV3X19gIG1ldGhvZCB3aWxsIG9ubHkgYmUgdXNlZCBmb3IgdGhlIGNyZWF0aW9uIG9mIHRoZQorOmNsYXNzOmBFbnVtYCBtZW1iZXJzIC0tIGFmdGVyIHRoYXQgaXQgaXMgcmVwbGFjZWQuICBBbnkgY3VzdG9tIDptZXRoOmBfX25ld19fYAorbWV0aG9kIG11c3QgY3JlYXRlIHRoZSBvYmplY3QgYW5kIHNldCB0aGUgOmF0dHI6YF92YWx1ZV9gIGF0dHJpYnV0ZQorYXBwcm9wcmlhdGVseS4KKworSWYgeW91IHdpc2ggdG8gY2hhbmdlIGhvdyA6Y2xhc3M6YEVudW1gIG1lbWJlcnMgYXJlIGxvb2tlZCB1cCB5b3Ugc2hvdWxkIGVpdGhlcgord3JpdGUgYSBoZWxwZXIgZnVuY3Rpb24gb3IgYSA6ZnVuYzpgY2xhc3NtZXRob2RgIGZvciB0aGUgOmNsYXNzOmBFbnVtYAorc3ViY2xhc3MuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9leGNlcHRpb25zLnJzdCBiL0RvYy9saWJyYXJ5L2V4Y2VwdGlvbnMucnN0CmluZGV4IDZlNDU1OWMuLmVmMzllNmMgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2V4Y2VwdGlvbnMucnN0CisrKyBiL0RvYy9saWJyYXJ5L2V4Y2VwdGlvbnMucnN0CkBAIC0yOCwxMyArMjgsMTQgQEAKIGludGVycHJldGVyIHJhaXNlcyB0aGUgc2FtZSBleGNlcHRpb247IGJ1dCBiZXdhcmUgdGhhdCB0aGVyZSBpcyBub3RoaW5nIHRvCiBwcmV2ZW50IHVzZXIgY29kZSBmcm9tIHJhaXNpbmcgYW4gaW5hcHByb3ByaWF0ZSBlcnJvci4KIAotVGhlIGJ1aWx0LWluIGV4Y2VwdGlvbiBjbGFzc2VzIGNhbiBiZSBzdWItY2xhc3NlZCB0byBkZWZpbmUgbmV3IGV4Y2VwdGlvbnM7Ci1wcm9ncmFtbWVycyBhcmUgZW5jb3VyYWdlZCB0byBhdCBsZWFzdCBkZXJpdmUgbmV3IGV4Y2VwdGlvbnMgZnJvbSB0aGUKLTpleGM6YEV4Y2VwdGlvbmAgY2xhc3MgYW5kIG5vdCA6ZXhjOmBCYXNlRXhjZXB0aW9uYC4gIE1vcmUgaW5mb3JtYXRpb24gb24KLWRlZmluaW5nIGV4Y2VwdGlvbnMgaXMgYXZhaWxhYmxlIGluIHRoZSBQeXRob24gVHV0b3JpYWwgdW5kZXIKK1RoZSBidWlsdC1pbiBleGNlcHRpb24gY2xhc3NlcyBjYW4gYmUgc3ViY2xhc3NlZCB0byBkZWZpbmUgbmV3IGV4Y2VwdGlvbnM7Citwcm9ncmFtbWVycyBhcmUgZW5jb3VyYWdlZCB0byBkZXJpdmUgbmV3IGV4Y2VwdGlvbnMgZnJvbSB0aGUgOmV4YzpgRXhjZXB0aW9uYAorY2xhc3Mgb3Igb25lIG9mIGl0cyBzdWJjbGFzc2VzLCBhbmQgbm90IGZyb20gOmV4YzpgQmFzZUV4Y2VwdGlvbmAuICBNb3JlCitpbmZvcm1hdGlvbiBvbiBkZWZpbmluZyBleGNlcHRpb25zIGlzIGF2YWlsYWJsZSBpbiB0aGUgUHl0aG9uIFR1dG9yaWFsIHVuZGVyCiA6cmVmOmB0dXQtdXNlcmV4Y2VwdGlvbnNgLgogCi1XaGVuIHJhaXNpbmcgKG9yIHJlLXJhaXNpbmcpIGFuIGV4Y2VwdGlvbiBpbiBhbiA6a2V5d29yZDpgZXhjZXB0YCBjbGF1c2UKK1doZW4gcmFpc2luZyAob3IgcmUtcmFpc2luZykgYW4gZXhjZXB0aW9uIGluIGFuIDprZXl3b3JkOmBleGNlcHRgIG9yCis6a2V5d29yZDpgZmluYWxseWAgY2xhdXNlCiA6YXR0cjpgX19jb250ZXh0X19gIGlzIGF1dG9tYXRpY2FsbHkgc2V0IHRvIHRoZSBsYXN0IGV4Y2VwdGlvbiBjYXVnaHQ7IGlmIHRoZQogbmV3IGV4Y2VwdGlvbiBpcyBub3QgaGFuZGxlZCB0aGUgdHJhY2ViYWNrIHRoYXQgaXMgZXZlbnR1YWxseSBkaXNwbGF5ZWQgd2lsbAogaW5jbHVkZSB0aGUgb3JpZ2luYXRpbmcgZXhjZXB0aW9uKHMpIGFuZCB0aGUgZmluYWwgZXhjZXB0aW9uLgpAQCAtODIsNyArODMsNyBAQAogICAgLi4gYXR0cmlidXRlOjogYXJncwogCiAgICAgICBUaGUgdHVwbGUgb2YgYXJndW1lbnRzIGdpdmVuIHRvIHRoZSBleGNlcHRpb24gY29uc3RydWN0b3IuICBTb21lIGJ1aWx0LWluCi0gICAgICBleGNlcHRpb25zIChsaWtlIDpleGM6YElPRXJyb3JgKSBleHBlY3QgYSBjZXJ0YWluIG51bWJlciBvZiBhcmd1bWVudHMgYW5kCisgICAgICBleGNlcHRpb25zIChsaWtlIDpleGM6YE9TRXJyb3JgKSBleHBlY3QgYSBjZXJ0YWluIG51bWJlciBvZiBhcmd1bWVudHMgYW5kCiAgICAgICBhc3NpZ24gYSBzcGVjaWFsIG1lYW5pbmcgdG8gdGhlIGVsZW1lbnRzIG9mIHRoaXMgdHVwbGUsIHdoaWxlIG90aGVycyBhcmUKICAgICAgIHVzdWFsbHkgY2FsbGVkIG9ubHkgd2l0aCBhIHNpbmdsZSBzdHJpbmcgZ2l2aW5nIGFuIGVycm9yIG1lc3NhZ2UuCiAKQEAgLTE2MSw3ICsxNjIsNyBAQAogCiAuLiBleGNlcHRpb246OiBHZW5lcmF0b3JFeGl0CiAKLSAgIFJhaXNlIHdoZW4gYSA6dGVybTpgZ2VuZXJhdG9yYFwncyA6bWV0aDpgY2xvc2VgIG1ldGhvZCBpcyBjYWxsZWQuICBJdAorICAgUmFpc2VkIHdoZW4gYSA6dGVybTpgZ2VuZXJhdG9yYFwncyA6bWV0aDpgY2xvc2VgIG1ldGhvZCBpcyBjYWxsZWQuICBJdAogICAgZGlyZWN0bHkgaW5oZXJpdHMgZnJvbSA6ZXhjOmBCYXNlRXhjZXB0aW9uYCBpbnN0ZWFkIG9mIDpleGM6YEV4Y2VwdGlvbmAgc2luY2UKICAgIGl0IGlzIHRlY2huaWNhbGx5IG5vdCBhbiBlcnJvci4KIApAQCAtMjMwLDQzICsyMzEsODEgQEAKICAgIGNsYXNzZXMgdG8gb3ZlcnJpZGUgdGhlIG1ldGhvZC4KIAogCi0uLiBleGNlcHRpb246OiBPU0Vycm9yCisuLiBleGNlcHRpb246OiBPU0Vycm9yKFthcmddKQorICAgICAgICAgICAgICAgT1NFcnJvcihlcnJubywgc3RyZXJyb3JbLCBmaWxlbmFtZVssIHdpbmVycm9yWywgZmlsZW5hbWUyXV1dKQogCiAgICAuLiBpbmRleDo6IG1vZHVsZTogZXJybm8KIAogICAgVGhpcyBleGNlcHRpb24gaXMgcmFpc2VkIHdoZW4gYSBzeXN0ZW0gZnVuY3Rpb24gcmV0dXJucyBhIHN5c3RlbS1yZWxhdGVkCiAgICBlcnJvciwgaW5jbHVkaW5nIEkvTyBmYWlsdXJlcyBzdWNoIGFzICJmaWxlIG5vdCBmb3VuZCIgb3IgImRpc2sgZnVsbCIKLSAgIChub3QgZm9yIGlsbGVnYWwgYXJndW1lbnQgdHlwZXMgb3Igb3RoZXIgaW5jaWRlbnRhbCBlcnJvcnMpLiAgT2Z0ZW4gYQotICAgc3ViY2xhc3Mgb2YgOmV4YzpgT1NFcnJvcmAgd2lsbCBhY3R1YWxseSBiZSByYWlzZWQgYXMgZGVzY3JpYmVkIGluCi0gICBgT1MgZXhjZXB0aW9uc2BfIGJlbG93LiAgVGhlIDphdHRyOmBlcnJub2AgYXR0cmlidXRlIGlzIGEgbnVtZXJpYyBlcnJvcgotICAgY29kZSBmcm9tIHRoZSBDIHZhcmlhYmxlIDpjOmRhdGE6YGVycm5vYC4KKyAgIChub3QgZm9yIGlsbGVnYWwgYXJndW1lbnQgdHlwZXMgb3Igb3RoZXIgaW5jaWRlbnRhbCBlcnJvcnMpLgogCi0gICBVbmRlciBXaW5kb3dzLCB0aGUgOmF0dHI6YHdpbmVycm9yYCBhdHRyaWJ1dGUgZ2l2ZXMgeW91IHRoZSBuYXRpdmUKLSAgIFdpbmRvd3MgZXJyb3IgY29kZS4gIFRoZSA6YXR0cjpgZXJybm9gIGF0dHJpYnV0ZSBpcyB0aGVuIGFuIGFwcHJveGltYXRlCi0gICB0cmFuc2xhdGlvbiwgaW4gUE9TSVggdGVybXMsIG9mIHRoYXQgbmF0aXZlIGVycm9yIGNvZGUuCisgICBUaGUgc2Vjb25kIGZvcm0gb2YgdGhlIGNvbnN0cnVjdG9yIHNldHMgdGhlIGNvcnJlc3BvbmRpbmcgYXR0cmlidXRlcywKKyAgIGRlc2NyaWJlZCBiZWxvdy4gIFRoZSBhdHRyaWJ1dGVzIGRlZmF1bHQgdG8gOmNvbnN0OmBOb25lYCBpZiBub3QKKyAgIHNwZWNpZmllZC4gIEZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSwgaWYgdGhyZWUgYXJndW1lbnRzIGFyZSBwYXNzZWQsCisgICB0aGUgOmF0dHI6YH5CYXNlRXhjZXB0aW9uLmFyZ3NgIGF0dHJpYnV0ZSBjb250YWlucyBvbmx5IGEgMi10dXBsZQorICAgb2YgdGhlIGZpcnN0IHR3byBjb25zdHJ1Y3RvciBhcmd1bWVudHMuCiAKLSAgIFVuZGVyIGFsbCBwbGF0Zm9ybXMsIHRoZSA6YXR0cjpgc3RyZXJyb3JgIGF0dHJpYnV0ZSBpcyB0aGUgY29ycmVzcG9uZGluZwotICAgZXJyb3IgbWVzc2FnZSBhcyBwcm92aWRlZCBieSB0aGUgb3BlcmF0aW5nIHN5c3RlbSAoYXMgZm9ybWF0dGVkIGJ5IHRoZSBDCi0gICBmdW5jdGlvbnMgOmM6ZnVuYzpgcGVycm9yYCB1bmRlciBQT1NJWCwgYW5kIDpjOmZ1bmM6YEZvcm1hdE1lc3NhZ2VgCi0gICBXaW5kb3dzKS4KKyAgIFRoZSBjb25zdHJ1Y3RvciBvZnRlbiBhY3R1YWxseSByZXR1cm5zIGEgc3ViY2xhc3Mgb2YgOmV4YzpgT1NFcnJvcmAsIGFzCisgICBkZXNjcmliZWQgaW4gYE9TIGV4Y2VwdGlvbnNgXyBiZWxvdy4gIFRoZSBwYXJ0aWN1bGFyIHN1YmNsYXNzIGRlcGVuZHMgb24KKyAgIHRoZSBmaW5hbCA6YXR0cjpgLmVycm5vYCB2YWx1ZS4gIFRoaXMgYmVoYXZpb3VyIG9ubHkgb2NjdXJzIHdoZW4KKyAgIGNvbnN0cnVjdGluZyA6ZXhjOmBPU0Vycm9yYCBkaXJlY3RseSBvciB2aWEgYW4gYWxpYXMsIGFuZCBpcyBub3QKKyAgIGluaGVyaXRlZCB3aGVuIHN1YmNsYXNzaW5nLgogCi0gICBGb3IgZXhjZXB0aW9ucyB0aGF0IGludm9sdmUgYSBmaWxlIHN5c3RlbSBwYXRoIChzdWNoIGFzIDpmdW5jOmBvcGVuYCBvcgotICAgOmZ1bmM6YG9zLnVubGlua2ApLCB0aGUgZXhjZXB0aW9uIGluc3RhbmNlIHdpbGwgY29udGFpbiBhbiBhZGRpdGlvbmFsCi0gICBhdHRyaWJ1dGUsIDphdHRyOmBmaWxlbmFtZWAsIHdoaWNoIGlzIHRoZSBmaWxlIG5hbWUgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbi4KKyAgIC4uIGF0dHJpYnV0ZTo6IGVycm5vCisKKyAgICAgIEEgbnVtZXJpYyBlcnJvciBjb2RlIGZyb20gdGhlIEMgdmFyaWFibGUgOmM6ZGF0YTpgZXJybm9gLgorCisgICAuLiBhdHRyaWJ1dGU6OiB3aW5lcnJvcgorCisgICAgICBVbmRlciBXaW5kb3dzLCB0aGlzIGdpdmVzIHlvdSB0aGUgbmF0aXZlCisgICAgICBXaW5kb3dzIGVycm9yIGNvZGUuICBUaGUgOmF0dHI6YC5lcnJub2AgYXR0cmlidXRlIGlzIHRoZW4gYW4gYXBwcm94aW1hdGUKKyAgICAgIHRyYW5zbGF0aW9uLCBpbiBQT1NJWCB0ZXJtcywgb2YgdGhhdCBuYXRpdmUgZXJyb3IgY29kZS4KKworICAgICAgVW5kZXIgV2luZG93cywgaWYgdGhlICp3aW5lcnJvciogY29uc3RydWN0b3IgYXJndW1lbnQgaXMgYW4gaW50ZWdlciwKKyAgICAgIHRoZSA6YXR0cjpgLmVycm5vYCBhdHRyaWJ1dGUgaXMgZGV0ZXJtaW5lZCBmcm9tIHRoZSBXaW5kb3dzIGVycm9yIGNvZGUsCisgICAgICBhbmQgdGhlICplcnJubyogYXJndW1lbnQgaXMgaWdub3JlZC4gIE9uIG90aGVyIHBsYXRmb3JtcywgdGhlCisgICAgICAqd2luZXJyb3IqIGFyZ3VtZW50IGlzIGlnbm9yZWQsIGFuZCB0aGUgOmF0dHI6YHdpbmVycm9yYCBhdHRyaWJ1dGUKKyAgICAgIGRvZXMgbm90IGV4aXN0LgorCisgICAuLiBhdHRyaWJ1dGU6OiBzdHJlcnJvcgorCisgICAgICBUaGUgY29ycmVzcG9uZGluZyBlcnJvciBtZXNzYWdlLCBhcyBwcm92aWRlZCBieQorICAgICAgdGhlIG9wZXJhdGluZyBzeXN0ZW0uICBJdCBpcyBmb3JtYXR0ZWQgYnkgdGhlIEMKKyAgICAgIGZ1bmN0aW9ucyA6YzpmdW5jOmBwZXJyb3JgIHVuZGVyIFBPU0lYLCBhbmQgOmM6ZnVuYzpgRm9ybWF0TWVzc2FnZWAKKyAgICAgIHVuZGVyIFdpbmRvd3MuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IGZpbGVuYW1lCisgICAgICAgICAgICAgICAgICBmaWxlbmFtZTIKKworICAgICAgRm9yIGV4Y2VwdGlvbnMgdGhhdCBpbnZvbHZlIGEgZmlsZSBzeXN0ZW0gcGF0aCAoc3VjaCBhcyA6ZnVuYzpgb3BlbmAgb3IKKyAgICAgIDpmdW5jOmBvcy51bmxpbmtgKSwgOmF0dHI6YGZpbGVuYW1lYCBpcyB0aGUgZmlsZSBuYW1lIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24uCisgICAgICBGb3IgZnVuY3Rpb25zIHRoYXQgaW52b2x2ZSB0d28gZmlsZSBzeXN0ZW0gcGF0aHMgKHN1Y2ggYXMKKyAgICAgIDpmdW5jOmBvcy5yZW5hbWVgKSwgOmF0dHI6YGZpbGVuYW1lMmAgY29ycmVzcG9uZHMgdG8gdGhlIHNlY29uZAorICAgICAgZmlsZSBuYW1lIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24uCisKIAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKICAgICAgIDpleGM6YEVudmlyb25tZW50RXJyb3JgLCA6ZXhjOmBJT0Vycm9yYCwgOmV4YzpgV2luZG93c0Vycm9yYCwKICAgICAgIDpleGM6YFZNU0Vycm9yYCwgOmV4Yzpgc29ja2V0LmVycm9yYCwgOmV4Yzpgc2VsZWN0LmVycm9yYCBhbmQKLSAgICAgIDpleGM6YG1tYXAuZXJyb3JgIGhhdmUgYmVlbiBtZXJnZWQgaW50byA6ZXhjOmBPU0Vycm9yYC4KKyAgICAgIDpleGM6YG1tYXAuZXJyb3JgIGhhdmUgYmVlbiBtZXJnZWQgaW50byA6ZXhjOmBPU0Vycm9yYCwgYW5kIHRoZQorICAgICAgY29uc3RydWN0b3IgbWF5IHJldHVybiBhIHN1YmNsYXNzLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVGhlIDphdHRyOmBmaWxlbmFtZWAgYXR0cmlidXRlIGlzIG5vdyB0aGUgb3JpZ2luYWwgZmlsZSBuYW1lIHBhc3NlZCB0bworICAgICAgdGhlIGZ1bmN0aW9uLCBpbnN0ZWFkIG9mIHRoZSBuYW1lIGVuY29kZWQgdG8gb3IgZGVjb2RlZCBmcm9tIHRoZQorICAgICAgZmlsZXN5c3RlbSBlbmNvZGluZy4gIEFsc28sIHRoZSAqZmlsZW5hbWUyKiBjb25zdHJ1Y3RvciBhcmd1bWVudCBhbmQKKyAgICAgIGF0dHJpYnV0ZSB3YXMgYWRkZWQuCiAKIAogLi4gZXhjZXB0aW9uOjogT3ZlcmZsb3dFcnJvcgogCiAgICBSYWlzZWQgd2hlbiB0aGUgcmVzdWx0IG9mIGFuIGFyaXRobWV0aWMgb3BlcmF0aW9uIGlzIHRvbyBsYXJnZSB0byBiZQogICAgcmVwcmVzZW50ZWQuICBUaGlzIGNhbm5vdCBvY2N1ciBmb3IgaW50ZWdlcnMgKHdoaWNoIHdvdWxkIHJhdGhlciByYWlzZQotICAgOmV4YzpgTWVtb3J5RXJyb3JgIHRoYW4gZ2l2ZSB1cCkuICBCZWNhdXNlIG9mIHRoZSBsYWNrIG9mIHN0YW5kYXJkaXphdGlvbiBvZgotICAgZmxvYXRpbmcgcG9pbnQgZXhjZXB0aW9uIGhhbmRsaW5nIGluIEMsIG1vc3QgZmxvYXRpbmcgcG9pbnQgb3BlcmF0aW9ucyBhbHNvCi0gICBhcmVuJ3QgY2hlY2tlZC4KKyAgIDpleGM6YE1lbW9yeUVycm9yYCB0aGFuIGdpdmUgdXApLiAgSG93ZXZlciwgZm9yIGhpc3RvcmljYWwgcmVhc29ucywKKyAgIE92ZXJmbG93RXJyb3IgaXMgc29tZXRpbWVzIHJhaXNlZCBmb3IgaW50ZWdlcnMgdGhhdCBhcmUgb3V0c2lkZSBhIHJlcXVpcmVkCisgICByYW5nZS4gICBCZWNhdXNlIG9mIHRoZSBsYWNrIG9mIHN0YW5kYXJkaXphdGlvbiBvZiBmbG9hdGluZyBwb2ludCBleGNlcHRpb24KKyAgIGhhbmRsaW5nIGluIEMsIG1vc3QgZmxvYXRpbmcgcG9pbnQgb3BlcmF0aW9ucyBhcmUgbm90IGNoZWNrZWQuCiAKIAogLi4gZXhjZXB0aW9uOjogUmVmZXJlbmNlRXJyb3IKQEAgLTM0MSwxOCArMzgwLDE3IEBACiAKIC4uIGV4Y2VwdGlvbjo6IFN5c3RlbUV4aXQKIAotICAgVGhpcyBleGNlcHRpb24gaXMgcmFpc2VkIGJ5IHRoZSA6ZnVuYzpgc3lzLmV4aXRgIGZ1bmN0aW9uLiAgV2hlbiBpdCBpcyBub3QKLSAgIGhhbmRsZWQsIHRoZSBQeXRob24gaW50ZXJwcmV0ZXIgZXhpdHM7IG5vIHN0YWNrIHRyYWNlYmFjayBpcyBwcmludGVkLiAgSWYgdGhlCi0gICBhc3NvY2lhdGVkIHZhbHVlIGlzIGFuIGludGVnZXIsIGl0IHNwZWNpZmllcyB0aGUgc3lzdGVtIGV4aXQgc3RhdHVzIChwYXNzZWQKLSAgIHRvIEMncyA6YzpmdW5jOmBleGl0YCBmdW5jdGlvbik7IGlmIGl0IGlzIGBgTm9uZWBgLCB0aGUgZXhpdCBzdGF0dXMgaXMgemVybzsKLSAgIGlmIGl0IGhhcyBhbm90aGVyIHR5cGUgKHN1Y2ggYXMgYSBzdHJpbmcpLCB0aGUgb2JqZWN0J3MgdmFsdWUgaXMgcHJpbnRlZCBhbmQKKyAgIFRoaXMgZXhjZXB0aW9uIGlzIHJhaXNlZCBieSB0aGUgOmZ1bmM6YHN5cy5leGl0YCBmdW5jdGlvbi4gIEl0IGluaGVyaXRzIGZyb20KKyAgIDpleGM6YEJhc2VFeGNlcHRpb25gIGluc3RlYWQgb2YgOmV4YzpgRXhjZXB0aW9uYCBzbyB0aGF0IGl0IGlzIG5vdCBhY2NpZGVudGFsbHkKKyAgIGNhdWdodCBieSBjb2RlIHRoYXQgY2F0Y2hlcyA6ZXhjOmBFeGNlcHRpb25gLiAgVGhpcyBhbGxvd3MgdGhlIGV4Y2VwdGlvbiB0bworICAgcHJvcGVybHkgcHJvcGFnYXRlIHVwIGFuZCBjYXVzZSB0aGUgaW50ZXJwcmV0ZXIgdG8gZXhpdC4gIFdoZW4gaXQgaXMgbm90CisgICBoYW5kbGVkLCB0aGUgUHl0aG9uIGludGVycHJldGVyIGV4aXRzOyBubyBzdGFjayB0cmFjZWJhY2sgaXMgcHJpbnRlZC4gIFRoZQorICAgY29uc3RydWN0b3IgYWNjZXB0cyB0aGUgc2FtZSBvcHRpb25hbCBhcmd1bWVudCBwYXNzZWQgdG8gOmZ1bmM6YHN5cy5leGl0YC4KKyAgIElmIHRoZSB2YWx1ZSBpcyBhbiBpbnRlZ2VyLCBpdCBzcGVjaWZpZXMgdGhlIHN5c3RlbSBleGl0IHN0YXR1cyAocGFzc2VkIHRvCisgICBDJ3MgOmM6ZnVuYzpgZXhpdGAgZnVuY3Rpb24pOyBpZiBpdCBpcyBgYE5vbmVgYCwgdGhlIGV4aXQgc3RhdHVzIGlzIHplcm87IGlmCisgICBpdCBoYXMgYW5vdGhlciB0eXBlIChzdWNoIGFzIGEgc3RyaW5nKSwgdGhlIG9iamVjdCdzIHZhbHVlIGlzIHByaW50ZWQgYW5kCiAgICB0aGUgZXhpdCBzdGF0dXMgaXMgb25lLgogCi0gICBJbnN0YW5jZXMgaGF2ZSBhbiBhdHRyaWJ1dGUgOmF0dHI6YCFjb2RlYCB3aGljaCBpcyBzZXQgdG8gdGhlIHByb3Bvc2VkIGV4aXQKLSAgIHN0YXR1cyBvciBlcnJvciBtZXNzYWdlIChkZWZhdWx0aW5nIHRvIGBgTm9uZWBgKS4gQWxzbywgdGhpcyBleGNlcHRpb24gZGVyaXZlcwotICAgZGlyZWN0bHkgZnJvbSA6ZXhjOmBCYXNlRXhjZXB0aW9uYCBhbmQgbm90IDpleGM6YEV4Y2VwdGlvbmAsIHNpbmNlIGl0IGlzIG5vdAotICAgdGVjaG5pY2FsbHkgYW4gZXJyb3IuCi0KICAgIEEgY2FsbCB0byA6ZnVuYzpgc3lzLmV4aXRgIGlzIHRyYW5zbGF0ZWQgaW50byBhbiBleGNlcHRpb24gc28gdGhhdCBjbGVhbi11cAogICAgaGFuZGxlcnMgKDprZXl3b3JkOmBmaW5hbGx5YCBjbGF1c2VzIG9mIDprZXl3b3JkOmB0cnlgIHN0YXRlbWVudHMpIGNhbiBiZQogICAgZXhlY3V0ZWQsIGFuZCBzbyB0aGF0IGEgZGVidWdnZXIgY2FuIGV4ZWN1dGUgYSBzY3JpcHQgd2l0aG91dCBydW5uaW5nIHRoZSByaXNrCkBAIC0zNjAsOSArMzk4LDEwIEBACiAgICBhYnNvbHV0ZWx5IHBvc2l0aXZlbHkgbmVjZXNzYXJ5IHRvIGV4aXQgaW1tZWRpYXRlbHkgKGZvciBleGFtcGxlLCBpbiB0aGUgY2hpbGQKICAgIHByb2Nlc3MgYWZ0ZXIgYSBjYWxsIHRvIDpmdW5jOmBvcy5mb3JrYCkuCiAKLSAgIFRoZSBleGNlcHRpb24gaW5oZXJpdHMgZnJvbSA6ZXhjOmBCYXNlRXhjZXB0aW9uYCBpbnN0ZWFkIG9mIDpleGM6YEV4Y2VwdGlvbmAgc28KLSAgIHRoYXQgaXQgaXMgbm90IGFjY2lkZW50YWxseSBjYXVnaHQgYnkgY29kZSB0aGF0IGNhdGNoZXMgOmV4YzpgRXhjZXB0aW9uYC4gIFRoaXMKLSAgIGFsbG93cyB0aGUgZXhjZXB0aW9uIHRvIHByb3Blcmx5IHByb3BhZ2F0ZSB1cCBhbmQgY2F1c2UgdGhlIGludGVycHJldGVyIHRvIGV4aXQuCisgICAuLiBhdHRyaWJ1dGU6OiBjb2RlCisKKyAgICAgIFRoZSBleGl0IHN0YXR1cyBvciBlcnJvciBtZXNzYWdlIHRoYXQgaXMgcGFzc2VkIHRvIHRoZSBjb25zdHJ1Y3Rvci4KKyAgICAgIChEZWZhdWx0cyB0byBgYE5vbmVgYC4pCiAKIAogLi4gZXhjZXB0aW9uOjogVHlwZUVycm9yCkBAIC00NDcsMTAgKzQ4Niw2IEBACiAKIC4uIGV4Y2VwdGlvbjo6IElPRXJyb3IKIAotLi4gZXhjZXB0aW9uOjogVk1TRXJyb3IKLQotICAgT25seSBhdmFpbGFibGUgb24gVk1TLgotCiAuLiBleGNlcHRpb246OiBXaW5kb3dzRXJyb3IKIAogICAgT25seSBhdmFpbGFibGUgb24gV2luZG93cy4KQEAgLTU5NSw3ICs2MzAsNyBAQAogCiAuLiBleGNlcHRpb246OiBTeW50YXhXYXJuaW5nCiAKLSAgIEJhc2UgY2xhc3MgZm9yIHdhcm5pbmdzIGFib3V0IGR1YmlvdXMgc3ludGF4CisgICBCYXNlIGNsYXNzIGZvciB3YXJuaW5ncyBhYm91dCBkdWJpb3VzIHN5bnRheC4KIAogCiAuLiBleGNlcHRpb246OiBSdW50aW1lV2FybmluZwpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZmF1bHRoYW5kbGVyLnJzdCBiL0RvYy9saWJyYXJ5L2ZhdWx0aGFuZGxlci5yc3QKaW5kZXggM2MzMzYyMS4uZWIyMDE2YSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZmF1bHRoYW5kbGVyLnJzdAorKysgYi9Eb2MvbGlicmFyeS9mYXVsdGhhbmRsZXIucnN0CkBAIC00LDEyICs0LDE0IEBACiAuLiBtb2R1bGU6OiBmYXVsdGhhbmRsZXIKICAgIDpzeW5vcHNpczogRHVtcCB0aGUgUHl0aG9uIHRyYWNlYmFjay4KIAorLi4gdmVyc2lvbmFkZGVkOjogMy4zCisKIFRoaXMgbW9kdWxlIGNvbnRhaW5zIGZ1bmN0aW9ucyB0byBkdW1wIFB5dGhvbiB0cmFjZWJhY2tzIGV4cGxpY2l0bHksIG9uIGEgZmF1bHQsCiBhZnRlciBhIHRpbWVvdXQsIG9yIG9uIGEgdXNlciBzaWduYWwuIENhbGwgOmZ1bmM6YGZhdWx0aGFuZGxlci5lbmFibGVgIHRvCiBpbnN0YWxsIGZhdWx0IGhhbmRsZXJzIGZvciB0aGUgOmNvbnN0OmBTSUdTRUdWYCwgOmNvbnN0OmBTSUdGUEVgLAogOmNvbnN0OmBTSUdBQlJUYCwgOmNvbnN0OmBTSUdCVVNgLCBhbmQgOmNvbnN0OmBTSUdJTExgIHNpZ25hbHMuIFlvdSBjYW4gYWxzbwogZW5hYmxlIHRoZW0gYXQgc3RhcnR1cCBieSBzZXR0aW5nIHRoZSA6ZW52dmFyOmBQWVRIT05GQVVMVEhBTkRMRVJgIGVudmlyb25tZW50Ci12YXJpYWJsZSBvciBieSB1c2luZyA6b3B0aW9uOmAtWGAgYGBmYXVsdGhhbmRsZXJgYCBjb21tYW5kIGxpbmUgb3B0aW9uLgordmFyaWFibGUgb3IgYnkgdXNpbmcgdGhlIDpvcHRpb246YC1YYCBgYGZhdWx0aGFuZGxlcmBgIGNvbW1hbmQgbGluZSBvcHRpb24uCiAKIFRoZSBmYXVsdCBoYW5kbGVyIGlzIGNvbXBhdGlibGUgd2l0aCBzeXN0ZW0gZmF1bHQgaGFuZGxlcnMgbGlrZSBBcHBvcnQgb3IgdGhlCiBXaW5kb3dzIGZhdWx0IGhhbmRsZXIuIFRoZSBtb2R1bGUgdXNlcyBhbiBhbHRlcm5hdGl2ZSBzdGFjayBmb3Igc2lnbmFsIGhhbmRsZXJzCkBAIC0yNyw2ICsyOSw3IEBACiAqIE9ubHkgdGhlIGZpbGVuYW1lLCB0aGUgZnVuY3Rpb24gbmFtZSBhbmQgdGhlIGxpbmUgbnVtYmVyIGFyZQogICBkaXNwbGF5ZWQuIChubyBzb3VyY2UgY29kZSkKICogSXQgaXMgbGltaXRlZCB0byAxMDAgZnJhbWVzIGFuZCAxMDAgdGhyZWFkcy4KKyogVGhlIG9yZGVyIGlzIHJldmVyc2VkOiB0aGUgbW9zdCByZWNlbnQgY2FsbCBpcyBzaG93biBmaXJzdC4KIAogQnkgZGVmYXVsdCwgdGhlIFB5dGhvbiB0cmFjZWJhY2sgaXMgd3JpdHRlbiB0byA6ZGF0YTpgc3lzLnN0ZGVycmAuIFRvIHNlZQogdHJhY2ViYWNrcywgYXBwbGljYXRpb25zIG11c3QgYmUgcnVuIGluIHRoZSB0ZXJtaW5hbC4gQSBsb2cgZmlsZSBjYW4KQEAgLTM1LDExICszOCw5IEBACiBUaGUgbW9kdWxlIGlzIGltcGxlbWVudGVkIGluIEMsIHNvIHRyYWNlYmFja3MgY2FuIGJlIGR1bXBlZCBvbiBhIGNyYXNoIG9yIHdoZW4KIFB5dGhvbiBpcyBkZWFkbG9ja2VkLgogCi0uLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKIAotCi1EdW1wIHRoZSB0cmFjZWJhY2sKLS0tLS0tLS0tLS0tLS0tLS0tLQorRHVtcGluZyB0aGUgdHJhY2ViYWNrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogLi4gZnVuY3Rpb246OiBkdW1wX3RyYWNlYmFjayhmaWxlPXN5cy5zdGRlcnIsIGFsbF90aHJlYWRzPVRydWUpCiAKQEAgLTY4LDggKzY5LDggQEAKICAgIENoZWNrIGlmIHRoZSBmYXVsdCBoYW5kbGVyIGlzIGVuYWJsZWQuCiAKIAotRHVtcCB0aGUgdHJhY2ViYWNrcyBhZnRlciBhIHRpbWVvdXQKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitEdW1waW5nIHRoZSB0cmFjZWJhY2tzIGFmdGVyIGEgdGltZW91dAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogLi4gZnVuY3Rpb246OiBkdW1wX3RyYWNlYmFja19sYXRlcih0aW1lb3V0LCByZXBlYXQ9RmFsc2UsIGZpbGU9c3lzLnN0ZGVyciwgZXhpdD1GYWxzZSkKIApAQCAtODksOCArOTAsOCBAQAogICAgQ2FuY2VsIHRoZSBsYXN0IGNhbGwgdG8gOmZ1bmM6YGR1bXBfdHJhY2ViYWNrX2xhdGVyYC4KIAogCi1EdW1wIHRoZSB0cmFjZWJhY2sgb24gYSB1c2VyIHNpZ25hbAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0R1bXBpbmcgdGhlIHRyYWNlYmFjayBvbiBhIHVzZXIgc2lnbmFsCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAuLiBmdW5jdGlvbjo6IHJlZ2lzdGVyKHNpZ251bSwgZmlsZT1zeXMuc3RkZXJyLCBhbGxfdGhyZWFkcz1UcnVlLCBjaGFpbj1GYWxzZSkKIApAQCAtMTA5LDggKzExMCw4IEBACiAgICBOb3QgYXZhaWxhYmxlIG9uIFdpbmRvd3MuCiAKIAotRmlsZSBkZXNjcmlwdG9yIGlzc3VlCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0lzc3VlIHdpdGggZmlsZSBkZXNjcmlwdG9ycworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIDpmdW5jOmBlbmFibGVgLCA6ZnVuYzpgZHVtcF90cmFjZWJhY2tfbGF0ZXJgIGFuZCA6ZnVuYzpgcmVnaXN0ZXJgIGtlZXAgdGhlCiBmaWxlIGRlc2NyaXB0b3Igb2YgdGhlaXIgKmZpbGUqIGFyZ3VtZW50LiBJZiB0aGUgZmlsZSBpcyBjbG9zZWQgYW5kIGl0cyBmaWxlCkBAIC0xMjIsMTQgKzEyMywyMCBAQAogRXhhbXBsZQogLS0tLS0tLQogCi1FeGFtcGxlIG9mIGEgc2VnbWVudGF0aW9uIGZhdWx0IG9uIExpbnV4OiA6OgorLi4gaGlnaGxpZ2h0Ojogc2gKIAotICAgICQgcHl0aG9uIC1xIC1YIGZhdWx0aGFuZGxlcgorRXhhbXBsZSBvZiBhIHNlZ21lbnRhdGlvbiBmYXVsdCBvbiBMaW51eCB3aXRoIGFuZCB3aXRob3V0IGVuYWJsaW5nIHRoZSBmYXVsdAoraGFuZGxlcjo6CisKKyAgICAkIHB5dGhvbjMgLWMgImltcG9ydCBjdHlwZXM7IGN0eXBlcy5zdHJpbmdfYXQoMCkiCisgICAgU2VnbWVudGF0aW9uIGZhdWx0CisKKyAgICAkIHB5dGhvbjMgLXEgLVggZmF1bHRoYW5kbGVyCiAgICAgPj4+IGltcG9ydCBjdHlwZXMKICAgICA+Pj4gY3R5cGVzLnN0cmluZ19hdCgwKQogICAgIEZhdGFsIFB5dGhvbiBlcnJvcjogU2VnbWVudGF0aW9uIGZhdWx0CiAKLSAgICBDdXJyZW50IHRocmVhZCAweDAwMDA3ZmI4OTlmMzk3MDA6CisgICAgQ3VycmVudCB0aHJlYWQgMHgwMDAwN2ZiODk5ZjM5NzAwIChtb3N0IHJlY2VudCBjYWxsIGZpcnN0KToKICAgICAgIEZpbGUgIi9ob21lL3B5dGhvbi9jcHl0aG9uL0xpYi9jdHlwZXMvX19pbml0X18ucHkiLCBsaW5lIDQ4NiBpbiBzdHJpbmdfYXQKICAgICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDEgaW4gPG1vZHVsZT4KICAgICBTZWdtZW50YXRpb24gZmF1bHQKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2ZjbnRsLnJzdCBiL0RvYy9saWJyYXJ5L2ZjbnRsLnJzdAppbmRleCA4ZTkzMmZiLi5iNzk4ZjIyIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9mY250bC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZmNudGwucnN0CkBAIC0xNiwxMyArMTYsMTMgQEAKIAogQWxsIGZ1bmN0aW9ucyBpbiB0aGlzIG1vZHVsZSB0YWtlIGEgZmlsZSBkZXNjcmlwdG9yICpmZCogYXMgdGhlaXIgZmlyc3QKIGFyZ3VtZW50LiAgVGhpcyBjYW4gYmUgYW4gaW50ZWdlciBmaWxlIGRlc2NyaXB0b3IsIHN1Y2ggYXMgcmV0dXJuZWQgYnkKLWBgc3lzLnN0ZGluLmZpbGVubygpYGAsIG9yIGEgOmNsYXNzOmBpby5JT0Jhc2VgIG9iamVjdCwgc3VjaCBhcyBgYHN5cy5zdGRpbmBgCitgYHN5cy5zdGRpbi5maWxlbm8oKWBgLCBvciBhbiA6Y2xhc3M6YGlvLklPQmFzZWAgb2JqZWN0LCBzdWNoIGFzIGBgc3lzLnN0ZGluYGAKIGl0c2VsZiwgd2hpY2ggcHJvdmlkZXMgYSA6bWV0aDpgfmlvLklPQmFzZS5maWxlbm9gIHRoYXQgcmV0dXJucyBhIGdlbnVpbmUgZmlsZQogZGVzY3JpcHRvci4KIAogLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKLSAgIE9wZXJhdGlvbnMgaW4gdGhpcyBtb2R1bGUgdXNlZCB0byByYWlzZSBhIDpleGM6YElPRXJyb3JgIHdoZXJlIHRoZXkgbm93Ci0gICByYWlzZSBhIDpleGM6YE9TRXJyb3JgLgorICAgT3BlcmF0aW9ucyBpbiB0aGlzIG1vZHVsZSB1c2VkIHRvIHJhaXNlIGFuIDpleGM6YElPRXJyb3JgIHdoZXJlIHRoZXkgbm93CisgICByYWlzZSBhbiA6ZXhjOmBPU0Vycm9yYC4KIAogCiBUaGUgbW9kdWxlIGRlZmluZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6CkBAIC04Myw2ICs4Myw4IEBACiAgICBidWZmZXIgMTAyNCBieXRlcyBsb25nIHdoaWNoIGlzIHRoZW4gcGFzc2VkIHRvIDpmdW5jOmBpb2N0bGAgYW5kIGNvcGllZCBiYWNrCiAgICBpbnRvIHRoZSBzdXBwbGllZCBidWZmZXIuCiAKKyAgIElmIHRoZSA6YzpmdW5jOmBpb2N0bGAgZmFpbHMsIGFuIDpleGM6YElPRXJyb3JgIGV4Y2VwdGlvbiBpcyByYWlzZWQuCisKICAgIEFuIGV4YW1wbGU6OgogCiAgICAgICA+Pj4gaW1wb3J0IGFycmF5LCBmY250bCwgc3RydWN0LCB0ZXJtaW9zLCBvcwpAQCAtMTA0LDYgKzEwNiw4IEBACiAgICA6bWFucGFnZTpgZmxvY2soMilgIGZvciBkZXRhaWxzLiAgKE9uIHNvbWUgc3lzdGVtcywgdGhpcyBmdW5jdGlvbiBpcyBlbXVsYXRlZAogICAgdXNpbmcgOmM6ZnVuYzpgZmNudGxgLikKIAorICAgSWYgdGhlIDpjOmZ1bmM6YGZsb2NrYCBmYWlscywgYW4gOmV4YzpgSU9FcnJvcmAgZXhjZXB0aW9uIGlzIHJhaXNlZC4KKwogCiAuLiBmdW5jdGlvbjo6IGxvY2tmKGZkLCBvcGVyYXRpb24sIFtsZW5ndGgsIFtzdGFydCwgW3doZW5jZV1dXSkKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZmlsZWNtcC5yc3QgYi9Eb2MvbGlicmFyeS9maWxlY21wLnJzdAppbmRleCA4YTg4ZjhjLi4wNmQzZjIxIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9maWxlY21wLnJzdAorKysgYi9Eb2MvbGlicmFyeS9maWxlY21wLnJzdApAQCAtMjcsNiArMjcsMTAgQEAKICAgIE5vdGUgdGhhdCBubyBleHRlcm5hbCBwcm9ncmFtcyBhcmUgY2FsbGVkIGZyb20gdGhpcyBmdW5jdGlvbiwgZ2l2aW5nIGl0CiAgICBwb3J0YWJpbGl0eSBhbmQgZWZmaWNpZW5jeS4KIAorICAgVGhpcyBmdW5jdGlvbiB1c2VzIGEgY2FjaGUgZm9yIHBhc3QgY29tcGFyaXNvbnMgYW5kIHRoZSByZXN1bHRzLAorICAgd2l0aCBjYWNoZSBlbnRyaWVzIGludmFsaWRhdGVkIGlmIHRoZSA6ZnVuYzpgb3Muc3RhdGAgaW5mb3JtYXRpb24gZm9yIHRoZQorICAgZmlsZSBjaGFuZ2VzLiAgVGhlIGVudGlyZSBjYWNoZSBtYXkgYmUgY2xlYXJlZCB1c2luZyA6ZnVuYzpgY2xlYXJfY2FjaGVgLgorCiAKIC4uIGZ1bmN0aW9uOjogY21wZmlsZXMoZGlyMSwgZGlyMiwgY29tbW9uLCBzaGFsbG93PVRydWUpCiAKQEAgLTQ4LDYgKzUyLDE1IEBACiAgICBvbmUgb2YgdGhlIHRocmVlIHJldHVybmVkIGxpc3RzLgogCiAKKy4uIGZ1bmN0aW9uOjogY2xlYXJfY2FjaGUoKQorCisgICBDbGVhciB0aGUgZmlsZWNtcCBjYWNoZS4gVGhpcyBtYXkgYmUgdXNlZnVsIGlmIGEgZmlsZSBpcyBjb21wYXJlZCBzbyBxdWlja2x5CisgICBhZnRlciBpdCBpcyBtb2RpZmllZCB0aGF0IGl0IGlzIHdpdGhpbiB0aGUgbXRpbWUgcmVzb2x1dGlvbiBvZgorICAgdGhlIHVuZGVybHlpbmcgZmlsZXN5c3RlbS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogLi4gX2RpcmNtcC1vYmplY3RzOgogCiBUaGUgOmNsYXNzOmBkaXJjbXBgIGNsYXNzCkBAIC01NSwyOCArNjgsMjUgQEAKIAogLi4gY2xhc3M6OiBkaXJjbXAoYSwgYiwgaWdub3JlPU5vbmUsIGhpZGU9Tm9uZSkKIAotICAgQ29uc3RydWN0IGEgbmV3IGRpcmVjdG9yeSBjb21wYXJpc29uIG9iamVjdCwgdG8gY29tcGFyZSB0aGUgZGlyZWN0b3JpZXMgKmEqIGFuZAotICAgKmIqLiAqaWdub3JlKiBpcyBhIGxpc3Qgb2YgbmFtZXMgdG8gaWdub3JlLCBhbmQgZGVmYXVsdHMgdG8gYGBbJ1JDUycsICdDVlMnLAotICAgJ3RhZ3MnXWBgLiAqaGlkZSogaXMgYSBsaXN0IG9mIG5hbWVzIHRvIGhpZGUsIGFuZCBkZWZhdWx0cyB0byBgYFtvcy5jdXJkaXIsCi0gICBvcy5wYXJkaXJdYGAuCisgICBDb25zdHJ1Y3QgYSBuZXcgZGlyZWN0b3J5IGNvbXBhcmlzb24gb2JqZWN0LCB0byBjb21wYXJlIHRoZSBkaXJlY3RvcmllcyAqYSoKKyAgIGFuZCAqYiouICAqaWdub3JlKiBpcyBhIGxpc3Qgb2YgbmFtZXMgdG8gaWdub3JlLCBhbmQgZGVmYXVsdHMgdG8KKyAgIDphdHRyOmBmaWxlY21wLkRFRkFVTFRfSUdOT1JFU2AuICAqaGlkZSogaXMgYSBsaXN0IG9mIG5hbWVzIHRvIGhpZGUsIGFuZAorICAgZGVmYXVsdHMgdG8gYGBbb3MuY3VyZGlyLCBvcy5wYXJkaXJdYGAuCiAKICAgIFRoZSA6Y2xhc3M6YGRpcmNtcGAgY2xhc3MgY29tcGFyZXMgZmlsZXMgYnkgZG9pbmcgKnNoYWxsb3cqIGNvbXBhcmlzb25zCiAgICBhcyBkZXNjcmliZWQgZm9yIDpmdW5jOmBmaWxlY21wLmNtcGAuCiAKICAgIFRoZSA6Y2xhc3M6YGRpcmNtcGAgY2xhc3MgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBtZXRob2RzOgogCi0KICAgIC4uIG1ldGhvZDo6IHJlcG9ydCgpCiAKICAgICAgIFByaW50ICh0byA6ZGF0YTpgc3lzLnN0ZG91dGApIGEgY29tcGFyaXNvbiBiZXR3ZWVuICphKiBhbmQgKmIqLgogCi0KICAgIC4uIG1ldGhvZDo6IHJlcG9ydF9wYXJ0aWFsX2Nsb3N1cmUoKQogCiAgICAgICBQcmludCBhIGNvbXBhcmlzb24gYmV0d2VlbiAqYSogYW5kICpiKiBhbmQgY29tbW9uIGltbWVkaWF0ZQogICAgICAgc3ViZGlyZWN0b3JpZXMuCiAKLQogICAgLi4gbWV0aG9kOjogcmVwb3J0X2Z1bGxfY2xvc3VyZSgpCiAKICAgICAgIFByaW50IGEgY29tcGFyaXNvbiBiZXR3ZWVuICphKiBhbmQgKmIqIGFuZCBjb21tb24gc3ViZGlyZWN0b3JpZXMKQEAgLTEzMyw3ICsxNDMsNyBAQAogCiAgICAuLiBhdHRyaWJ1dGU6OiBjb21tb25fZmlsZXMKIAotICAgICAgRmlsZXMgaW4gYm90aCAqYSogYW5kICpiKgorICAgICAgRmlsZXMgaW4gYm90aCAqYSogYW5kICpiKi4KIAogCiAgICAuLiBhdHRyaWJ1dGU6OiBjb21tb25fZnVubnkKQEAgLTE2NCw2ICsxNzQsMTIgQEAKICAgICAgIEEgZGljdGlvbmFyeSBtYXBwaW5nIG5hbWVzIGluIDphdHRyOmBjb21tb25fZGlyc2AgdG8gOmNsYXNzOmBkaXJjbXBgCiAgICAgICBvYmplY3RzLgogCisuLiBhdHRyaWJ1dGU6OiBERUZBVUxUX0lHTk9SRVMKKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKyAgIExpc3Qgb2YgZGlyZWN0b3JpZXMgaWdub3JlZCBieSA6Y2xhc3M6YGRpcmNtcGAgYnkgZGVmYXVsdC4KKwogCiBIZXJlIGlzIGEgc2ltcGxpZmllZCBleGFtcGxlIG9mIHVzaW5nIHRoZSBgYHN1YmRpcnNgYCBhdHRyaWJ1dGUgdG8gc2VhcmNoCiByZWN1cnNpdmVseSB0aHJvdWdoIHR3byBkaXJlY3RvcmllcyB0byBzaG93IGNvbW1vbiBkaWZmZXJlbnQgZmlsZXM6OgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZmlsZWlucHV0LnJzdCBiL0RvYy9saWJyYXJ5L2ZpbGVpbnB1dC5yc3QKaW5kZXggZDVhNDg3NS4uZWUwNjgzMCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZmlsZWlucHV0LnJzdAorKysgYi9Eb2MvbGlicmFyeS9maWxlaW5wdXQucnN0CkBAIC0xNjAsNiArMTYwLDkgQEAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCiAgICAgICBDYW4gYmUgdXNlZCBhcyBhIGNvbnRleHQgbWFuYWdlci4KIAorICAgLi4gZGVwcmVjYXRlZDo6IDMuNAorICAgICAgICBUaGUgYGAnclUnYGAgYW5kIGBgJ1UnYGAgbW9kZXMuCisKIAogKipPcHRpb25hbCBpbi1wbGFjZSBmaWx0ZXJpbmc6KiogaWYgdGhlIGtleXdvcmQgYXJndW1lbnQgYGBpbnBsYWNlPVRydWVgYCBpcwogcGFzc2VkIHRvIDpmdW5jOmBmaWxlaW5wdXQuaW5wdXRgIG9yIHRvIHRoZSA6Y2xhc3M6YEZpbGVJbnB1dGAgY29uc3RydWN0b3IsIHRoZQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZmlsZXN5cy5yc3QgYi9Eb2MvbGlicmFyeS9maWxlc3lzLnJzdAppbmRleCA1ODk5OGE4Li4wM2UwODViIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9maWxlc3lzLnJzdAorKysgYi9Eb2MvbGlicmFyeS9maWxlc3lzLnJzdApAQCAtMTIsNiArMTIsNyBAQAogCiAuLiB0b2N0cmVlOjoKIAorICAgcGF0aGxpYi5yc3QKICAgIG9zLnBhdGgucnN0CiAgICBmaWxlaW5wdXQucnN0CiAgICBzdGF0LnJzdApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZm5tYXRjaC5yc3QgYi9Eb2MvbGlicmFyeS9mbm1hdGNoLnJzdAppbmRleCBlMDQzNGIwLi42OGI0MzdmIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9mbm1hdGNoLnJzdAorKysgYi9Eb2MvbGlicmFyeS9mbm1hdGNoLnJzdApAQCAtODMsMTAgKzgzLDEwIEBACiAgICAgICA+Pj4KICAgICAgID4+PiByZWdleCA9IGZubWF0Y2gudHJhbnNsYXRlKCcqLnR4dCcpCiAgICAgICA+Pj4gcmVnZXgKLSAgICAgICcuKlxcLnR4dCQnCisgICAgICAnLipcXC50eHRcXFooP21zKScKICAgICAgID4+PiByZW9iaiA9IHJlLmNvbXBpbGUocmVnZXgpCiAgICAgICA+Pj4gcmVvYmoubWF0Y2goJ2Zvb2Jhci50eHQnKQotICAgICAgPF9zcmUuU1JFX01hdGNoIG9iamVjdCBhdCAweC4uLj4KKyAgICAgIDxfc3JlLlNSRV9NYXRjaCBvYmplY3Q7IHNwYW49KDAsIDEwKSwgbWF0Y2g9J2Zvb2Jhci50eHQnPgogCiAKIC4uIHNlZWFsc286OgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZm9ybWF0dGVyLnJzdCBiL0RvYy9saWJyYXJ5L2Zvcm1hdHRlci5yc3QKaW5kZXggODhiZTExYy4uMTg0N2E4MCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZm9ybWF0dGVyLnJzdAorKysgYi9Eb2MvbGlicmFyeS9mb3JtYXR0ZXIucnN0CkBAIC0zLDYgKzMsMTEgQEAKIAogLi4gbW9kdWxlOjogZm9ybWF0dGVyCiAgICA6c3lub3BzaXM6IEdlbmVyaWMgb3V0cHV0IGZvcm1hdHRlciBhbmQgZGV2aWNlIGludGVyZmFjZS4KKyAgIDpkZXByZWNhdGVkOgorCisuLiBkZXByZWNhdGVkOjogMy40CisgICBEdWUgdG8gbGFjayBvZiB1c2FnZSwgdGhlIGZvcm1hdHRlciBtb2R1bGUgaGFzIGJlZW4gZGVwcmVjYXRlZCBhbmQgaXMgc2xhdGVkCisgICBmb3IgcmVtb3ZhbCBpbiBQeXRob24gMy42LgogCiAKIFRoaXMgbW9kdWxlIHN1cHBvcnRzIHR3byBpbnRlcmZhY2UgZGVmaW5pdGlvbnMsIGVhY2ggd2l0aCBtdWx0aXBsZQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZnJhY3Rpb25zLnJzdCBiL0RvYy9saWJyYXJ5L2ZyYWN0aW9ucy5yc3QKaW5kZXggYzJjNzQwMS4uM2QyNTI5ZCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZnJhY3Rpb25zLnJzdAorKysgYi9Eb2MvbGlicmFyeS9mcmFjdGlvbnMucnN0CkBAIC05Nyw3ICs5Nyw3IEBACiAKICAgICAgIFRoaXMgY2xhc3MgbWV0aG9kIGNvbnN0cnVjdHMgYSA6Y2xhc3M6YEZyYWN0aW9uYCByZXByZXNlbnRpbmcgdGhlIGV4YWN0CiAgICAgICB2YWx1ZSBvZiAqZmx0Kiwgd2hpY2ggbXVzdCBiZSBhIDpjbGFzczpgZmxvYXRgLiBCZXdhcmUgdGhhdAotICAgICAgYGBGcmFjdGlvbi5mcm9tX2Zsb2F0KDAuMylgYCBpcyBub3QgdGhlIHNhbWUgdmFsdWUgYXMgYGBGcmFjdGlvbigzLCAxMClgYAorICAgICAgYGBGcmFjdGlvbi5mcm9tX2Zsb2F0KDAuMylgYCBpcyBub3QgdGhlIHNhbWUgdmFsdWUgYXMgYGBGcmFjdGlvbigzLCAxMClgYC4KIAogICAgICAgLi4gbm90ZTo6CiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2Z0cGxpYi5yc3QgYi9Eb2MvbGlicmFyeS9mdHBsaWIucnN0CmluZGV4IGRjYjJhYzQuLmYwNmU2NzggMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2Z0cGxpYi5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZnRwbGliLnJzdApAQCAtNTIsOCArNTIsNyBAQAogICAgd2lsbCBiZSB1c2VkKS4gKnNvdXJjZV9hZGRyZXNzKiBpcyBhIDItdHVwbGUgYGAoaG9zdCwgcG9ydClgYCBmb3IgdGhlIHNvY2tldAogICAgdG8gYmluZCB0byBhcyBpdHMgc291cmNlIGFkZHJlc3MgYmVmb3JlIGNvbm5lY3RpbmcuCiAKLSAgIDpjbGFzczpgRlRQYCBjbGFzcyBzdXBwb3J0cyB0aGUgOmtleXdvcmQ6YHdpdGhgIHN0YXRlbWVudC4gSGVyZSBpcyBhIHNhbXBsZQotICAgb24gaG93IHVzaW5nIGl0OgorICAgVGhlIDpjbGFzczpgRlRQYCBjbGFzcyBzdXBwb3J0cyB0aGUgOmtleXdvcmQ6YHdpdGhgIHN0YXRlbWVudCwgZS5nLjoKIAogICAgID4+PiBmcm9tIGZ0cGxpYiBpbXBvcnQgRlRQCiAgICAgPj4+IHdpdGggRlRQKCJmdHAxLmF0LnByb2Z0cGQub3JnIikgYXMgZnRwOgpAQCAtODAsNDAgKzc5LDM0IEBACiAgICA6cmZjOmA0MjE3YC4KICAgIENvbm5lY3QgYXMgdXN1YWwgdG8gcG9ydCAyMSBpbXBsaWNpdGx5IHNlY3VyaW5nIHRoZSBGVFAgY29udHJvbCBjb25uZWN0aW9uCiAgICBiZWZvcmUgYXV0aGVudGljYXRpbmcuIFNlY3VyaW5nIHRoZSBkYXRhIGNvbm5lY3Rpb24gcmVxdWlyZXMgdGhlIHVzZXIgdG8KLSAgIGV4cGxpY2l0bHkgYXNrIGZvciBpdCBieSBjYWxsaW5nIHRoZSA6bWV0aDpgcHJvdF9wYCBtZXRob2QuCi0gICAqa2V5ZmlsZSogYW5kICpjZXJ0ZmlsZSogYXJlIG9wdGlvbmFsIC0tIHRoZXkgY2FuIGNvbnRhaW4gYSBQRU0gZm9ybWF0dGVkCi0gICBwcml2YXRlIGtleSBhbmQgY2VydGlmaWNhdGUgY2hhaW4gZmlsZSBuYW1lIGZvciB0aGUgU1NMIGNvbm5lY3Rpb24uCi0gICAqY29udGV4dCogcGFyYW1ldGVyIGlzIGEgOmNsYXNzOmBzc2wuU1NMQ29udGV4dGAgb2JqZWN0IHdoaWNoIGFsbG93cwotICAgYnVuZGxpbmcgU1NMIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgY2VydGlmaWNhdGVzIGFuZCBwcml2YXRlIGtleXMgaW50byBhCi0gICBzaW5nbGUgKHBvdGVudGlhbGx5IGxvbmctbGl2ZWQpIHN0cnVjdHVyZS4gKnNvdXJjZV9hZGRyZXNzKiBpcyBhIDItdHVwbGUKLSAgIGBgKGhvc3QsIHBvcnQpYGAgZm9yIHRoZSBzb2NrZXQgdG8gYmluZCB0byBhcyBpdHMgc291cmNlIGFkZHJlc3MgYmVmb3JlCi0gICBjb25uZWN0aW5nLgorICAgZXhwbGljaXRseSBhc2sgZm9yIGl0IGJ5IGNhbGxpbmcgdGhlIDptZXRoOmBwcm90X3BgIG1ldGhvZC4gICpjb250ZXh0KgorICAgaXMgYSA6Y2xhc3M6YHNzbC5TU0xDb250ZXh0YCBvYmplY3Qgd2hpY2ggYWxsb3dzIGJ1bmRsaW5nIFNTTCBjb25maWd1cmF0aW9uCisgICBvcHRpb25zLCBjZXJ0aWZpY2F0ZXMgYW5kIHByaXZhdGUga2V5cyBpbnRvIGEgc2luZ2xlIChwb3RlbnRpYWxseQorICAgbG9uZy1saXZlZCkgc3RydWN0dXJlLiAgUGxlYXNlIHJlYWQgOnJlZjpgc3NsLXNlY3VyaXR5YCBmb3IgYmVzdCBwcmFjdGljZXMuCisKKyAgICprZXlmaWxlKiBhbmQgKmNlcnRmaWxlKiBhcmUgYSBsZWdhY3kgYWx0ZXJuYXRpdmUgdG8gKmNvbnRleHQqIC0tIHRoZXkKKyAgIGNhbiBwb2ludCB0byBQRU0tZm9ybWF0dGVkIHByaXZhdGUga2V5IGFuZCBjZXJ0aWZpY2F0ZSBjaGFpbiBmaWxlcworICAgKHJlc3BlY3RpdmVseSkgZm9yIHRoZSBTU0wgY29ubmVjdGlvbi4KIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCiAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCiAgICAgICAqc291cmNlX2FkZHJlc3MqIHBhcmFtZXRlciB3YXMgYWRkZWQuCiAKLSAgIEhlcmUncyBhIHNhbXBsZSBzZXNzaW9uIHVzaW5nIHRoZSA6Y2xhc3M6YEZUUF9UTFNgIGNsYXNzOgorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSBjbGFzcyBub3cgc3VwcG9ydHMgaG9zdG5hbWUgY2hlY2sgd2l0aAorICAgICAgOmF0dHI6YHNzbC5TU0xDb250ZXh0LmNoZWNrX2hvc3RuYW1lYCBhbmQgKlNlcnZlciBOYW1lIEluZGljYXRpb24qIChzZWUKKyAgICAgIDpkYXRhOmBzc2wuSEFTX1NOSWApLgogCi0gICA+Pj4gZnJvbSBmdHBsaWIgaW1wb3J0IEZUUF9UTFMKLSAgID4+PiBmdHBzID0gRlRQX1RMUygnZnRwLnB5dGhvbi5vcmcnKQotICAgPj4+IGZ0cHMubG9naW4oKSAgICAgICAgICAgIyBsb2dpbiBhbm9ueW1vdXNseSBiZWZvcmUgc2VjdXJpbmcgY29udHJvbCBjaGFubmVsCi0gICA+Pj4gZnRwcy5wcm90X3AoKSAgICAgICAgICAjIHN3aXRjaCB0byBzZWN1cmUgZGF0YSBjb25uZWN0aW9uCi0gICA+Pj4gZnRwcy5yZXRybGluZXMoJ0xJU1QnKSAjIGxpc3QgZGlyZWN0b3J5IGNvbnRlbnQgc2VjdXJlbHkKLSAgIHRvdGFsIDkKLSAgIGRyd3hyLXhyLXggICA4IHJvb3QgICAgIHdoZWVsICAgICAgICAxMDI0IEphbiAgMyAgMTk5NCAuCi0gICBkcnd4ci14ci14ICAgOCByb290ICAgICB3aGVlbCAgICAgICAgMTAyNCBKYW4gIDMgIDE5OTQgLi4KLSAgIGRyd3hyLXhyLXggICAyIHJvb3QgICAgIHdoZWVsICAgICAgICAxMDI0IEphbiAgMyAgMTk5NCBiaW4KLSAgIGRyd3hyLXhyLXggICAyIHJvb3QgICAgIHdoZWVsICAgICAgICAxMDI0IEphbiAgMyAgMTk5NCBldGMKLSAgIGQtd3hyd3hyLXggICAyIGZ0cCAgICAgIHdoZWVsICAgICAgICAxMDI0IFNlcCAgNSAxMzo0MyBpbmNvbWluZwotICAgZHJ3eHIteHIteCAgIDIgcm9vdCAgICAgd2hlZWwgICAgICAgIDEwMjQgTm92IDE3ICAxOTkzIGxpYgotICAgZHJ3eHIteHIteCAgIDYgMTA5NCAgICAgd2hlZWwgICAgICAgIDEwMjQgU2VwIDEzIDE5OjA3IHB1YgotICAgZHJ3eHIteHIteCAgIDMgcm9vdCAgICAgd2hlZWwgICAgICAgIDEwMjQgSmFuICAzICAxOTk0IHVzcgotICAgLXJ3LXItLXItLSAgIDEgcm9vdCAgICAgcm9vdCAgICAgICAgICAzMTIgQXVnICAxICAxOTk0IHdlbGNvbWUubXNnCi0gICAnMjI2IFRyYW5zZmVyIGNvbXBsZXRlLicKLSAgID4+PiBmdHBzLnF1aXQoKQotICAgPj4+CisgICBIZXJlJ3MgYSBzYW1wbGUgc2Vzc2lvbiB1c2luZyB0aGUgOmNsYXNzOmBGVFBfVExTYCBjbGFzczo6CisKKyAgICAgID4+PiBmdHBzID0gRlRQX1RMUygnZnRwLnB1cmVmdHBkLm9yZycpCisgICAgICA+Pj4gZnRwcy5sb2dpbigpCisgICAgICAnMjMwIEFub255bW91cyB1c2VyIGxvZ2dlZCBpbicKKyAgICAgID4+PiBmdHBzLnByb3RfcCgpCisgICAgICAnMjAwIERhdGEgcHJvdGVjdGlvbiBsZXZlbCBzZXQgdG8gInByaXZhdGUiJworICAgICAgPj4+IGZ0cHMubmxzdCgpCisgICAgICBbJzZqYWNrJywgJ09wZW5CU0QnLCAnYW50aWxpbmsnLCAnYmxvZ2JlbmNoJywgJ2JzZGNhbScsICdjbG9ja3NwZWVkJywgJ2RqYmRucy1qZWRpJywgJ2RvY3MnLCAnZWFjY2VsZXJhdG9yLWplZGknLCAnZmF2aWNvbi5pY28nLCAnZnJhbmNvdG9uZScsICdmdWd1JywgJ2lnbm9yZScsICdsaWJwdXp6bGUnLCAnbWV0YWxvZycsICdtaW5pZGVudGQnLCAnbWlzYycsICdteXNxbC11ZGYtZ2xvYmFsLXVzZXItdmFyaWFibGVzJywgJ3BocC1qZW5raW5zLWhhc2gnLCAncGhwLXNrZWluLWhhc2gnLCAncGhwLXdlYmRhdicsICdwaHBhdWRpdCcsICdwaHBiZW5jaCcsICdwaW5jYXN0ZXInLCAncGluZycsICdwb3N0bycsICdwdWInLCAncHVibGljJywgJ3B1YmxpY19rZXlzJywgJ3B1cmUtZnRwZCcsICdxc2NhbicsICdxdGMnLCAnc2hhcmVkYW5jZScsICdza3ljYWNoZScsICdzb3VuZCcsICd0bXAnLCAndWNhcnAnXQogCiAKIC4uIGV4Y2VwdGlvbjo6IGVycm9yX3JlcGx5CkBAIC0yNjgsMTAgKzI2MSwxMCBAQAogICAgUGFzc2l2ZSBtb2RlIGlzIG9uIGJ5IGRlZmF1bHQuCiAKIAotLi4gbWV0aG9kOjogRlRQLnN0b3JiaW5hcnkoY21kLCBmaWxlLCBibG9ja3NpemU9ODE5MiwgY2FsbGJhY2s9Tm9uZSwgcmVzdD1Ob25lKQorLi4gbWV0aG9kOjogRlRQLnN0b3JiaW5hcnkoY21kLCBmcCwgYmxvY2tzaXplPTgxOTIsIGNhbGxiYWNrPU5vbmUsIHJlc3Q9Tm9uZSkKIAogICAgU3RvcmUgYSBmaWxlIGluIGJpbmFyeSB0cmFuc2ZlciBtb2RlLiAgKmNtZCogc2hvdWxkIGJlIGFuIGFwcHJvcHJpYXRlCi0gICBgYFNUT1JgYCBjb21tYW5kOiBgYCJTVE9SIGZpbGVuYW1lImBgLiAqZmlsZSogaXMgYSA6dGVybTpgZmlsZSBvYmplY3RgCisgICBgYFNUT1JgYCBjb21tYW5kOiBgYCJTVE9SIGZpbGVuYW1lImBgLiAqZnAqIGlzIGEgOnRlcm06YGZpbGUgb2JqZWN0YAogICAgKG9wZW5lZCBpbiBiaW5hcnkgbW9kZSkgd2hpY2ggaXMgcmVhZCB1bnRpbCBFT0YgdXNpbmcgaXRzIDptZXRoOmB+aW8uSU9CYXNlLnJlYWRgCiAgICBtZXRob2QgaW4gYmxvY2tzIG9mIHNpemUgKmJsb2Nrc2l6ZSogdG8gcHJvdmlkZSB0aGUgZGF0YSB0byBiZSBzdG9yZWQuCiAgICBUaGUgKmJsb2Nrc2l6ZSogYXJndW1lbnQgZGVmYXVsdHMgdG8gODE5Mi4gICpjYWxsYmFjayogaXMgYW4gb3B0aW9uYWwgc2luZ2xlCkBAIC0yODIsMjAgKzI3NSwyMCBAQAogICAgICAgKnJlc3QqIHBhcmFtZXRlciBhZGRlZC4KIAogCi0uLiBtZXRob2Q6OiBGVFAuc3RvcmxpbmVzKGNtZCwgZmlsZSwgY2FsbGJhY2s9Tm9uZSkKKy4uIG1ldGhvZDo6IEZUUC5zdG9ybGluZXMoY21kLCBmcCwgY2FsbGJhY2s9Tm9uZSkKIAogICAgU3RvcmUgYSBmaWxlIGluIEFTQ0lJIHRyYW5zZmVyIG1vZGUuICAqY21kKiBzaG91bGQgYmUgYW4gYXBwcm9wcmlhdGUKICAgIGBgU1RPUmBgIGNvbW1hbmQgKHNlZSA6bWV0aDpgc3RvcmJpbmFyeWApLiAgTGluZXMgYXJlIHJlYWQgdW50aWwgRU9GIGZyb20gdGhlCi0gICA6dGVybTpgZmlsZSBvYmplY3RgICpmaWxlKiAob3BlbmVkIGluIGJpbmFyeSBtb2RlKSB1c2luZyBpdHMgOm1ldGg6YH5pby5JT0Jhc2UucmVhZGxpbmVgCisgICA6dGVybTpgZmlsZSBvYmplY3RgICpmcCogKG9wZW5lZCBpbiBiaW5hcnkgbW9kZSkgdXNpbmcgaXRzIDptZXRoOmB+aW8uSU9CYXNlLnJlYWRsaW5lYAogICAgbWV0aG9kIHRvIHByb3ZpZGUgdGhlIGRhdGEgdG8gYmUgc3RvcmVkLiAgKmNhbGxiYWNrKiBpcyBhbiBvcHRpb25hbCBzaW5nbGUKICAgIHBhcmFtZXRlciBjYWxsYWJsZSB0aGF0IGlzIGNhbGxlZCBvbiBlYWNoIGxpbmUgYWZ0ZXIgaXQgaXMgc2VudC4KIAogCiAuLiBtZXRob2Q6OiBGVFAudHJhbnNmZXJjbWQoY21kLCByZXN0PU5vbmUpCiAKLSAgIEluaXRpYXRlIGEgdHJhbnNmZXIgb3ZlciB0aGUgZGF0YSBjb25uZWN0aW9uLiAgSWYgdGhlIHRyYW5zZmVyIGlzIGFjdGl2ZSwgc2VuZCBhCisgICBJbml0aWF0ZSBhIHRyYW5zZmVyIG92ZXIgdGhlIGRhdGEgY29ubmVjdGlvbi4gIElmIHRoZSB0cmFuc2ZlciBpcyBhY3RpdmUsIHNlbmQgYW4KICAgIGBgRVBSVGBgIG9yICBgYFBPUlRgYCBjb21tYW5kIGFuZCB0aGUgdHJhbnNmZXIgY29tbWFuZCBzcGVjaWZpZWQgYnkgKmNtZCosIGFuZAotICAgYWNjZXB0IHRoZSBjb25uZWN0aW9uLiAgSWYgdGhlIHNlcnZlciBpcyBwYXNzaXZlLCBzZW5kIGEgYGBFUFNWYGAgb3IgYGBQQVNWYGAKKyAgIGFjY2VwdCB0aGUgY29ubmVjdGlvbi4gIElmIHRoZSBzZXJ2ZXIgaXMgcGFzc2l2ZSwgc2VuZCBhbiBgYEVQU1ZgYCBvciBgYFBBU1ZgYAogICAgY29tbWFuZCwgY29ubmVjdCB0byBpdCwgYW5kIHN0YXJ0IHRoZSB0cmFuc2ZlciBjb21tYW5kLiAgRWl0aGVyIHdheSwgcmV0dXJuIHRoZQogICAgc29ja2V0IGZvciB0aGUgY29ubmVjdGlvbi4KIApAQCAtNDIwLDEyICs0MTMsMTcgQEAKIAogLi4gYXR0cmlidXRlOjogRlRQX1RMUy5zc2xfdmVyc2lvbgogCi0gICBUaGUgU1NMIHZlcnNpb24gdG8gdXNlIChkZWZhdWx0cyB0byAqVExTdjEqKS4KKyAgIFRoZSBTU0wgdmVyc2lvbiB0byB1c2UgKGRlZmF1bHRzIHRvIDphdHRyOmBzc2wuUFJPVE9DT0xfU1NMdjIzYCkuCiAKIC4uIG1ldGhvZDo6IEZUUF9UTFMuYXV0aCgpCiAKLSAgIFNldCB1cCBzZWN1cmUgY29udHJvbCBjb25uZWN0aW9uIGJ5IHVzaW5nIFRMUyBvciBTU0wsIGRlcGVuZGluZyBvbiB3aGF0Ci0gICBzcGVjaWZpZWQgaW4gOm1ldGg6YHNzbF92ZXJzaW9uYCBhdHRyaWJ1dGUuCisgICBTZXQgdXAgYSBzZWN1cmUgY29udHJvbCBjb25uZWN0aW9uIGJ5IHVzaW5nIFRMUyBvciBTU0wsIGRlcGVuZGluZyBvbiB3aGF0CisgICBpcyBzcGVjaWZpZWQgaW4gdGhlIDphdHRyOmBzc2xfdmVyc2lvbmAgYXR0cmlidXRlLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVGhlIG1ldGhvZCBub3cgc3VwcG9ydHMgaG9zdG5hbWUgY2hlY2sgd2l0aAorICAgICAgOmF0dHI6YHNzbC5TU0xDb250ZXh0LmNoZWNrX2hvc3RuYW1lYCBhbmQgKlNlcnZlciBOYW1lIEluZGljYXRpb24qIChzZWUKKyAgICAgIDpkYXRhOmBzc2wuSEFTX1NOSWApLgogCiAuLiBtZXRob2Q6OiBGVFBfVExTLmNjYygpCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2Z1bmN0aW9ucy5yc3QgYi9Eb2MvbGlicmFyeS9mdW5jdGlvbnMucnN0CmluZGV4IDdlZDI1YzEuLjEyNjEwNjIgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2Z1bmN0aW9ucy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZnVuY3Rpb25zLnJzdApAQCAtODUsMjIgKzg1LDIyIEBACiAgICA6bWV0aDpgX19pbmRleF9fYCBtZXRob2QgdGhhdCByZXR1cm5zIGFuIGludGVnZXIuCiAKIAotLi4gZnVuY3Rpb246OiBib29sKFt4XSkKKy4uIGNsYXNzOjogYm9vbChbeF0pCiAKLSAgIENvbnZlcnQgYSB2YWx1ZSB0byBhIEJvb2xlYW4sIHVzaW5nIHRoZSBzdGFuZGFyZCA6cmVmOmB0cnV0aCB0ZXN0aW5nCi0gICBwcm9jZWR1cmUgPHRydXRoPmAuICBJZiAqeCogaXMgZmFsc2Ugb3Igb21pdHRlZCwgdGhpcyByZXR1cm5zIGBgRmFsc2VgYDsKLSAgIG90aGVyd2lzZSBpdCByZXR1cm5zIGBgVHJ1ZWBgLiA6Y2xhc3M6YGJvb2xgIGlzIGFsc28gYSBjbGFzcywgd2hpY2ggaXMgYQotICAgc3ViY2xhc3Mgb2YgOmNsYXNzOmBpbnRgIChzZWUgOnJlZjpgdHlwZXNudW1lcmljYCkuICBDbGFzcyA6Y2xhc3M6YGJvb2xgCi0gICBjYW5ub3QgYmUgc3ViY2xhc3NlZCBmdXJ0aGVyLiAgSXRzIG9ubHkgaW5zdGFuY2VzIGFyZSBgYEZhbHNlYGAgYW5kCisgICBSZXR1cm4gYSBCb29sZWFuIHZhbHVlLCBpLmUuIG9uZSBvZiBgYFRydWVgYCBvciBgYEZhbHNlYGAuICAqeCogaXMgY29udmVydGVkCisgICB1c2luZyB0aGUgc3RhbmRhcmQgOnJlZjpgdHJ1dGggdGVzdGluZyBwcm9jZWR1cmUgPHRydXRoPmAuICBJZiAqeCogaXMgZmFsc2UKKyAgIG9yIG9taXR0ZWQsIHRoaXMgcmV0dXJucyBgYEZhbHNlYGA7IG90aGVyd2lzZSBpdCByZXR1cm5zIGBgVHJ1ZWBgLiAgVGhlCisgICA6Y2xhc3M6YGJvb2xgIGNsYXNzIGlzIGEgc3ViY2xhc3Mgb2YgOmNsYXNzOmBpbnRgIChzZWUgOnJlZjpgdHlwZXNudW1lcmljYCkuCisgICBJdCBjYW5ub3QgYmUgc3ViY2xhc3NlZCBmdXJ0aGVyLiAgSXRzIG9ubHkgaW5zdGFuY2VzIGFyZSBgYEZhbHNlYGAgYW5kCiAgICBgYFRydWVgYCAoc2VlIDpyZWY6YGJsdGluLWJvb2xlYW4tdmFsdWVzYCkuCiAKICAgIC4uIGluZGV4OjogcGFpcjogQm9vbGVhbjsgdHlwZQogCiAKIC4uIF9mdW5jLWJ5dGVhcnJheToKLS4uIGZ1bmN0aW9uOjogYnl0ZWFycmF5KFtzb3VyY2VbLCBlbmNvZGluZ1ssIGVycm9yc11dXSkKKy4uIGNsYXNzOjogYnl0ZWFycmF5KFtzb3VyY2VbLCBlbmNvZGluZ1ssIGVycm9yc11dXSkKIAotICAgUmV0dXJuIGEgbmV3IGFycmF5IG9mIGJ5dGVzLiAgVGhlIDpjbGFzczpgYnl0ZWFycmF5YCB0eXBlIGlzIGEgbXV0YWJsZQorICAgUmV0dXJuIGEgbmV3IGFycmF5IG9mIGJ5dGVzLiAgVGhlIDpjbGFzczpgYnl0ZWFycmF5YCBjbGFzcyBpcyBhIG11dGFibGUKICAgIHNlcXVlbmNlIG9mIGludGVnZXJzIGluIHRoZSByYW5nZSAwIDw9IHggPCAyNTYuICBJdCBoYXMgbW9zdCBvZiB0aGUgdXN1YWwKICAgIG1ldGhvZHMgb2YgbXV0YWJsZSBzZXF1ZW5jZXMsIGRlc2NyaWJlZCBpbiA6cmVmOmB0eXBlc3NlcS1tdXRhYmxlYCwgYXMgd2VsbAogICAgYXMgbW9zdCBtZXRob2RzIHRoYXQgdGhlIDpjbGFzczpgYnl0ZXNgIHR5cGUgaGFzLCBzZWUgOnJlZjpgYnl0ZXMtbWV0aG9kc2AuCkBAIC0xMjcsNyArMTI3LDcgQEAKIAogCiAuLiBfZnVuYy1ieXRlczoKLS4uIGZ1bmN0aW9uOjogYnl0ZXMoW3NvdXJjZVssIGVuY29kaW5nWywgZXJyb3JzXV1dKQorLi4gY2xhc3M6OiBieXRlcyhbc291cmNlWywgZW5jb2RpbmdbLCBlcnJvcnNdXV0pCiAKICAgIFJldHVybiBhIG5ldyAiYnl0ZXMiIG9iamVjdCwgd2hpY2ggaXMgYW4gaW1tdXRhYmxlIHNlcXVlbmNlIG9mIGludGVnZXJzIGluCiAgICB0aGUgcmFuZ2UgYGAwIDw9IHggPCAyNTZgYC4gIDpjbGFzczpgYnl0ZXNgIGlzIGFuIGltbXV0YWJsZSB2ZXJzaW9uIG9mCkBAIC0xNTYsNyArMTU2LDcgQEAKIAogLi4gZnVuY3Rpb246OiBjaHIoaSkKIAotICAgUmV0dXJuIHRoZSBzdHJpbmcgcmVwcmVzZW50aW5nIGEgY2hhcmFjdGVyIHdob3NlIFVuaWNvZGUgY29kZXBvaW50IGlzIHRoZSBpbnRlZ2VyCisgICBSZXR1cm4gdGhlIHN0cmluZyByZXByZXNlbnRpbmcgYSBjaGFyYWN0ZXIgd2hvc2UgVW5pY29kZSBjb2RlIHBvaW50IGlzIHRoZSBpbnRlZ2VyCiAgICAqaSouICBGb3IgZXhhbXBsZSwgYGBjaHIoOTcpYGAgcmV0dXJucyB0aGUgc3RyaW5nIGBgJ2EnYGAuIFRoaXMgaXMgdGhlCiAgICBpbnZlcnNlIG9mIDpmdW5jOmBvcmRgLiAgVGhlIHZhbGlkIHJhbmdlIGZvciB0aGUgYXJndW1lbnQgaXMgZnJvbSAwIHRocm91Z2gKICAgIDEsMTE0LDExMSAoMHgxMEZGRkYgaW4gYmFzZSAxNikuICA6ZXhjOmBWYWx1ZUVycm9yYCB3aWxsIGJlIHJhaXNlZCBpZiAqaSogaXMKQEAgLTIxMCw3ICsyMTAsNyBAQAogICAgVGhlIG9wdGlvbmFsIGFyZ3VtZW50cyAqZmxhZ3MqIGFuZCAqZG9udF9pbmhlcml0KiBjb250cm9sIHdoaWNoIGZ1dHVyZQogICAgc3RhdGVtZW50cyAoc2VlIDpwZXA6YDIzNmApIGFmZmVjdCB0aGUgY29tcGlsYXRpb24gb2YgKnNvdXJjZSouICBJZiBuZWl0aGVyCiAgICBpcyBwcmVzZW50IChvciBib3RoIGFyZSB6ZXJvKSB0aGUgY29kZSBpcyBjb21waWxlZCB3aXRoIHRob3NlIGZ1dHVyZQotICAgc3RhdGVtZW50cyB0aGF0IGFyZSBpbiBlZmZlY3QgaW4gdGhlIGNvZGUgdGhhdCBpcyBjYWxsaW5nIGNvbXBpbGUuICBJZiB0aGUKKyAgIHN0YXRlbWVudHMgdGhhdCBhcmUgaW4gZWZmZWN0IGluIHRoZSBjb2RlIHRoYXQgaXMgY2FsbGluZyA6ZnVuYzpgY29tcGlsZWAuICBJZiB0aGUKICAgICpmbGFncyogYXJndW1lbnQgaXMgZ2l2ZW4gYW5kICpkb250X2luaGVyaXQqIGlzIG5vdCAob3IgaXMgemVybykgdGhlbiB0aGUKICAgIGZ1dHVyZSBzdGF0ZW1lbnRzIHNwZWNpZmllZCBieSB0aGUgKmZsYWdzKiBhcmd1bWVudCBhcmUgdXNlZCBpbiBhZGRpdGlvbiB0bwogICAgdGhvc2UgdGhhdCB3b3VsZCBiZSB1c2VkIGFueXdheS4gSWYgKmRvbnRfaW5oZXJpdCogaXMgYSBub24temVybyBpbnRlZ2VyIHRoZW4KQEAgLTIzMSw2ICsyMzEsOSBAQAogICAgVGhpcyBmdW5jdGlvbiByYWlzZXMgOmV4YzpgU3ludGF4RXJyb3JgIGlmIHRoZSBjb21waWxlZCBzb3VyY2UgaXMgaW52YWxpZCwKICAgIGFuZCA6ZXhjOmBUeXBlRXJyb3JgIGlmIHRoZSBzb3VyY2UgY29udGFpbnMgbnVsbCBieXRlcy4KIAorICAgSWYgeW91IHdhbnQgdG8gcGFyc2UgUHl0aG9uIGNvZGUgaW50byBpdHMgQVNUIHJlcHJlc2VudGF0aW9uLCBzZWUKKyAgIDpmdW5jOmBhc3QucGFyc2VgLgorCiAgICAuLiBub3RlOjoKIAogICAgICAgV2hlbiBjb21waWxpbmcgYSBzdHJpbmcgd2l0aCBtdWx0aS1saW5lIGNvZGUgaW4gYGAnc2luZ2xlJ2BgIG9yCkBAIC0yNDMsMTUgKzI0NiwxNiBAQAogICAgICAgZG9lcyBub3QgaGF2ZSB0byBlbmQgaW4gYSBuZXdsaW5lIGFueW1vcmUuICBBZGRlZCB0aGUgKm9wdGltaXplKiBwYXJhbWV0ZXIuCiAKIAotLi4gZnVuY3Rpb246OiBjb21wbGV4KFtyZWFsWywgaW1hZ11dKQorLi4gY2xhc3M6OiBjb21wbGV4KFtyZWFsWywgaW1hZ11dKQogCi0gICBDcmVhdGUgYSBjb21wbGV4IG51bWJlciB3aXRoIHRoZSB2YWx1ZSAqcmVhbCogKyAqaW1hZypcKmogb3IgY29udmVydCBhIHN0cmluZyBvcgotICAgbnVtYmVyIHRvIGEgY29tcGxleCBudW1iZXIuICBJZiB0aGUgZmlyc3QgcGFyYW1ldGVyIGlzIGEgc3RyaW5nLCBpdCB3aWxsIGJlCi0gICBpbnRlcnByZXRlZCBhcyBhIGNvbXBsZXggbnVtYmVyIGFuZCB0aGUgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgd2l0aG91dCBhIHNlY29uZAotICAgcGFyYW1ldGVyLiAgVGhlIHNlY29uZCBwYXJhbWV0ZXIgY2FuIG5ldmVyIGJlIGEgc3RyaW5nLiBFYWNoIGFyZ3VtZW50IG1heSBiZSBhbnkKLSAgIG51bWVyaWMgdHlwZSAoaW5jbHVkaW5nIGNvbXBsZXgpLiBJZiAqaW1hZyogaXMgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gemVybyBhbmQKLSAgIHRoZSBmdW5jdGlvbiBzZXJ2ZXMgYXMgYSBudW1lcmljIGNvbnZlcnNpb24gZnVuY3Rpb24gbGlrZSA6ZnVuYzpgaW50YAotICAgYW5kIDpmdW5jOmBmbG9hdGAuICBJZiBib3RoIGFyZ3VtZW50cyBhcmUgb21pdHRlZCwgcmV0dXJucyBgYDBqYGAuCisgICBSZXR1cm4gYSBjb21wbGV4IG51bWJlciB3aXRoIHRoZSB2YWx1ZSAqcmVhbCogKyAqaW1hZypcKjFqIG9yIGNvbnZlcnQgYSBzdHJpbmcKKyAgIG9yIG51bWJlciB0byBhIGNvbXBsZXggbnVtYmVyLiAgSWYgdGhlIGZpcnN0IHBhcmFtZXRlciBpcyBhIHN0cmluZywgaXQgd2lsbAorICAgYmUgaW50ZXJwcmV0ZWQgYXMgYSBjb21wbGV4IG51bWJlciBhbmQgdGhlIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIHdpdGhvdXQgYQorICAgc2Vjb25kIHBhcmFtZXRlci4gIFRoZSBzZWNvbmQgcGFyYW1ldGVyIGNhbiBuZXZlciBiZSBhIHN0cmluZy4gRWFjaCBhcmd1bWVudAorICAgbWF5IGJlIGFueSBudW1lcmljIHR5cGUgKGluY2x1ZGluZyBjb21wbGV4KS4gIElmICppbWFnKiBpcyBvbWl0dGVkLCBpdAorICAgZGVmYXVsdHMgdG8gemVybyBhbmQgdGhlIGNvbnN0cnVjdG9yIHNlcnZlcyBhcyBhIG51bWVyaWMgY29udmVyc2lvbiBsaWtlCisgICA6Y2xhc3M6YGludGAgYW5kIDpjbGFzczpgZmxvYXRgLiAgSWYgYm90aCBhcmd1bWVudHMgYXJlIG9taXR0ZWQsIHJldHVybnMKKyAgIGBgMGpgYC4KIAogICAgLi4gbm90ZTo6CiAKQEAgLTI3MiwxNCArMjc2LDEzIEBACiAKIAogLi4gX2Z1bmMtZGljdDoKLS4uIGZ1bmN0aW9uOjogZGljdCgqKmt3YXJnKQotICAgICAgICAgICAgICBkaWN0KG1hcHBpbmcsICoqa3dhcmcpCi0gICAgICAgICAgICAgIGRpY3QoaXRlcmFibGUsICoqa3dhcmcpCisuLiBjbGFzczo6IGRpY3QoKiprd2FyZykKKyAgICAgICAgICAgZGljdChtYXBwaW5nLCAqKmt3YXJnKQorICAgICAgICAgICBkaWN0KGl0ZXJhYmxlLCAqKmt3YXJnKQogICAgOm5vaW5kZXg6CiAKICAgIENyZWF0ZSBhIG5ldyBkaWN0aW9uYXJ5LiAgVGhlIDpjbGFzczpgZGljdGAgb2JqZWN0IGlzIHRoZSBkaWN0aW9uYXJ5IGNsYXNzLgotICAgU2VlIDpjbGFzczpgZGljdGAgYW5kIDpyZWY6YHR5cGVzbWFwcGluZ2AgZm9yIGRvY3VtZW50YXRpb24gYWJvdXQgdGhpcwotICAgY2xhc3MuCisgICBTZWUgOmNsYXNzOmBkaWN0YCBhbmQgOnJlZjpgdHlwZXNtYXBwaW5nYCBmb3IgZG9jdW1lbnRhdGlvbiBhYm91dCB0aGlzIGNsYXNzLgogCiAgICBGb3Igb3RoZXIgY29udGFpbmVycyBzZWUgdGhlIGJ1aWx0LWluIDpjbGFzczpgbGlzdGAsIDpjbGFzczpgc2V0YCwgYW5kCiAgICA6Y2xhc3M6YHR1cGxlYCBjbGFzc2VzLCBhcyB3ZWxsIGFzIHRoZSA6bW9kOmBjb2xsZWN0aW9uc2AgbW9kdWxlLgpAQCAtNDEwLDYgKzQxMyw3IEBACiAgICBTZWUgOmZ1bmM6YGFzdC5saXRlcmFsX2V2YWxgIGZvciBhIGZ1bmN0aW9uIHRoYXQgY2FuIHNhZmVseSBldmFsdWF0ZSBzdHJpbmdzCiAgICB3aXRoIGV4cHJlc3Npb25zIGNvbnRhaW5pbmcgb25seSBsaXRlcmFscy4KIAorLi4gaW5kZXg6OiBidWlsdGluOiBleGVjCiAKIC4uIGZ1bmN0aW9uOjogZXhlYyhvYmplY3RbLCBnbG9iYWxzWywgbG9jYWxzXV0pCiAKQEAgLTQ2OSwxMyArNDczLDEzIEBACiAgICBlbGVtZW50cyBvZiAqaXRlcmFibGUqIGZvciB3aGljaCAqZnVuY3Rpb24qIHJldHVybnMgZmFsc2UuCiAKIAotLi4gZnVuY3Rpb246OiBmbG9hdChbeF0pCisuLiBjbGFzczo6IGZsb2F0KFt4XSkKIAogICAgLi4gaW5kZXg6OgogICAgICAgc2luZ2xlOiBOYU4KICAgICAgIHNpbmdsZTogSW5maW5pdHkKIAotICAgQ29udmVydCBhIHN0cmluZyBvciBhIG51bWJlciB0byBmbG9hdGluZyBwb2ludC4KKyAgIFJldHVybiBhIGZsb2F0aW5nIHBvaW50IG51bWJlciBjb25zdHJ1Y3RlZCBmcm9tIGEgbnVtYmVyIG9yIHN0cmluZyAqeCouCiAKICAgIElmIHRoZSBhcmd1bWVudCBpcyBhIHN0cmluZywgaXQgc2hvdWxkIGNvbnRhaW4gYSBkZWNpbWFsIG51bWJlciwgb3B0aW9uYWxseQogICAgcHJlY2VkZWQgYnkgYSBzaWduLCBhbmQgb3B0aW9uYWxseSBlbWJlZGRlZCBpbiB3aGl0ZXNwYWNlLiAgVGhlIG9wdGlvbmFsCkBAIC01MzgsMTQgKzU0MiwxOSBAQAogICAgZWZmZWN0IGFzIGNhbGxpbmcgOmZ1bmM6YHN0cih2YWx1ZSkgPHN0cj5gLgogCiAgICBBIGNhbGwgdG8gYGBmb3JtYXQodmFsdWUsIGZvcm1hdF9zcGVjKWBgIGlzIHRyYW5zbGF0ZWQgdG8KLSAgIGBgdHlwZSh2YWx1ZSkuX19mb3JtYXRfXyhmb3JtYXRfc3BlYylgYCB3aGljaCBieXBhc3NlcyB0aGUgaW5zdGFuY2UKKyAgIGBgdHlwZSh2YWx1ZSkuX19mb3JtYXRfXyh2YWx1ZSwgZm9ybWF0X3NwZWMpYGAgd2hpY2ggYnlwYXNzZXMgdGhlIGluc3RhbmNlCiAgICBkaWN0aW9uYXJ5IHdoZW4gc2VhcmNoaW5nIGZvciB0aGUgdmFsdWUncyA6bWV0aDpgX19mb3JtYXRfX2AgbWV0aG9kLiAgQQotICAgOmV4YzpgVHlwZUVycm9yYCBleGNlcHRpb24gaXMgcmFpc2VkIGlmIHRoZSBtZXRob2QgaXMgbm90IGZvdW5kIG9yIGlmIGVpdGhlcgotICAgdGhlICpmb3JtYXRfc3BlYyogb3IgdGhlIHJldHVybiB2YWx1ZSBhcmUgbm90IHN0cmluZ3MuCisgICA6ZXhjOmBUeXBlRXJyb3JgIGV4Y2VwdGlvbiBpcyByYWlzZWQgaWYgdGhlIG1ldGhvZCBzZWFyY2ggcmVhY2hlcworICAgOm1vZDpgb2JqZWN0YCBhbmQgdGhlICpmb3JtYXRfc3BlYyogaXMgbm9uLWVtcHR5LCBvciBpZiBlaXRoZXIgdGhlCisgICAqZm9ybWF0X3NwZWMqIG9yIHRoZSByZXR1cm4gdmFsdWUgYXJlIG5vdCBzdHJpbmdzLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgYGBvYmplY3QoKS5fX2Zvcm1hdF9fKGZvcm1hdF9zcGVjKWBgIHJhaXNlcyA6ZXhjOmBUeXBlRXJyb3JgCisgICAgICBpZiAqZm9ybWF0X3NwZWMqIGlzIG5vdCBhbiBlbXB0eSBzdHJpbmcuCiAKIAogLi4gX2Z1bmMtZnJvemVuc2V0OgotLi4gZnVuY3Rpb246OiBmcm96ZW5zZXQoW2l0ZXJhYmxlXSkKKy4uIGNsYXNzOjogZnJvemVuc2V0KFtpdGVyYWJsZV0pCiAgICA6bm9pbmRleDoKIAogICAgUmV0dXJuIGEgbmV3IDpjbGFzczpgZnJvemVuc2V0YCBvYmplY3QsIG9wdGlvbmFsbHkgd2l0aCBlbGVtZW50cyB0YWtlbiBmcm9tCkBAIC02MDUsNiArNjE0LDEwIEBACiAKICAgIFRoaXMgZnVuY3Rpb24gaXMgYWRkZWQgdG8gdGhlIGJ1aWx0LWluIG5hbWVzcGFjZSBieSB0aGUgOm1vZDpgc2l0ZWAgbW9kdWxlLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgQ2hhbmdlcyB0byA6bW9kOmBweWRvY2AgYW5kIDptb2Q6YGluc3BlY3RgIG1lYW4gdGhhdCB0aGUgcmVwb3J0ZWQKKyAgICAgIHNpZ25hdHVyZXMgZm9yIGNhbGxhYmxlcyBhcmUgbm93IG1vcmUgY29tcHJlaGVuc2l2ZSBhbmQgY29uc2lzdGVudC4KKwogCiAuLiBmdW5jdGlvbjo6IGhleCh4KQogCkBAIC02NTQsMTIgKzY2NywxMyBAQAogICAgdG8gcHJvdmlkZSBlbGFib3JhdGUgbGluZSBlZGl0aW5nIGFuZCBoaXN0b3J5IGZlYXR1cmVzLgogCiAKLS4uIGZ1bmN0aW9uOjogaW50KHg9MCkKLSAgICAgICAgICAgICAgaW50KHgsIGJhc2U9MTApCisuLiBjbGFzczo6IGludCh4PTApCisgICAgICAgICAgIGludCh4LCBiYXNlPTEwKQogCi0gICBDb252ZXJ0IGEgbnVtYmVyIG9yIHN0cmluZyAqeCogdG8gYW4gaW50ZWdlciwgb3IgcmV0dXJuIGBgMGBgIGlmIG5vCi0gICBhcmd1bWVudHMgYXJlIGdpdmVuLiAgSWYgKngqIGlzIGEgbnVtYmVyLCByZXR1cm4gOm1ldGg6YHguX19pbnRfXygpCi0gICA8b2JqZWN0Ll9faW50X18+YC4gIEZvciBmbG9hdGluZyBwb2ludCBudW1iZXJzLCB0aGlzIHRydW5jYXRlcyB0b3dhcmRzIHplcm8uCisgICBSZXR1cm4gYW4gaW50ZWdlciBvYmplY3QgY29uc3RydWN0ZWQgZnJvbSBhIG51bWJlciBvciBzdHJpbmcgKngqLCBvciByZXR1cm4KKyAgIGBgMGBgIGlmIG5vIGFyZ3VtZW50cyBhcmUgZ2l2ZW4uICBJZiAqeCogaXMgYSBudW1iZXIsIHJldHVybgorICAgOm1ldGg6YHguX19pbnRfXygpIDxvYmplY3QuX19pbnRfXz5gLiAgRm9yIGZsb2F0aW5nIHBvaW50IG51bWJlcnMsIHRoaXMKKyAgIHRydW5jYXRlcyB0b3dhcmRzIHplcm8uCiAKICAgIElmICp4KiBpcyBub3QgYSBudW1iZXIgb3IgaWYgKmJhc2UqIGlzIGdpdmVuLCB0aGVuICp4KiBtdXN0IGJlIGEgc3RyaW5nLAogICAgOmNsYXNzOmBieXRlc2AsIG9yIDpjbGFzczpgYnl0ZWFycmF5YCBpbnN0YW5jZSByZXByZXNlbnRpbmcgYW4gOnJlZjpgaW50ZWdlcgpAQCAtNjc2LDE2ICs2OTAsMjIgQEAKIAogICAgVGhlIGludGVnZXIgdHlwZSBpcyBkZXNjcmliZWQgaW4gOnJlZjpgdHlwZXNudW1lcmljYC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIElmICpiYXNlKiBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgOmNsYXNzOmBpbnRgIGFuZCB0aGUgKmJhc2UqIG9iamVjdCBoYXMgYQorICAgICAgOm1ldGg6YGJhc2UuX19pbmRleF9fIDxvYmplY3QuX19pbmRleF9fPmAgbWV0aG9kLCB0aGF0IG1ldGhvZCBpcyBjYWxsZWQKKyAgICAgIHRvIG9idGFpbiBhbiBpbnRlZ2VyIGZvciB0aGUgYmFzZS4gIFByZXZpb3VzIHZlcnNpb25zIHVzZWQKKyAgICAgIDptZXRoOmBiYXNlLl9faW50X18gPG9iamVjdC5fX2ludF9fPmAgaW5zdGVhZCBvZiA6bWV0aDpgYmFzZS5fX2luZGV4X18KKyAgICAgIDxvYmplY3QuX19pbmRleF9fPmAuCiAKIC4uIGZ1bmN0aW9uOjogaXNpbnN0YW5jZShvYmplY3QsIGNsYXNzaW5mbykKIAogICAgUmV0dXJuIHRydWUgaWYgdGhlICpvYmplY3QqIGFyZ3VtZW50IGlzIGFuIGluc3RhbmNlIG9mIHRoZSAqY2xhc3NpbmZvKgogICAgYXJndW1lbnQsIG9yIG9mIGEgKGRpcmVjdCwgaW5kaXJlY3Qgb3IgOnRlcm06YHZpcnR1YWwgPGFic3RyYWN0IGJhc2UKICAgIGNsYXNzPmApIHN1YmNsYXNzIHRoZXJlb2YuICBJZiAqb2JqZWN0KiBpcyBub3QKLSAgIGFuIG9iamVjdCBvZiB0aGUgZ2l2ZW4gdHlwZSwgdGhlIGZ1bmN0aW9uIGFsd2F5cyByZXR1cm5zIGZhbHNlLiAgSWYKLSAgICpjbGFzc2luZm8qIGlzIG5vdCBhIGNsYXNzICh0eXBlIG9iamVjdCksIGl0IG1heSBiZSBhIHR1cGxlIG9mIHR5cGUgb2JqZWN0cywKLSAgIG9yIG1heSByZWN1cnNpdmVseSBjb250YWluIG90aGVyIHN1Y2ggdHVwbGVzIChvdGhlciBzZXF1ZW5jZSB0eXBlcyBhcmUgbm90Ci0gICBhY2NlcHRlZCkuICBJZiAqY2xhc3NpbmZvKiBpcyBub3QgYSB0eXBlIG9yIHR1cGxlIG9mIHR5cGVzIGFuZCBzdWNoIHR1cGxlcywKKyAgIGFuIG9iamVjdCBvZiB0aGUgZ2l2ZW4gdHlwZSwgdGhlIGZ1bmN0aW9uIGFsd2F5cyByZXR1cm5zIGZhbHNlLgorICAgSWYgKmNsYXNzaW5mbyogaXMgYSB0dXBsZSBvZiB0eXBlIG9iamVjdHMgKG9yIHJlY3Vyc2l2ZWx5LCBvdGhlciBzdWNoCisgICB0dXBsZXMpLCByZXR1cm4gdHJ1ZSBpZiAqb2JqZWN0KiBpcyBhbiBpbnN0YW5jZSBvZiBhbnkgb2YgdGhlIHR5cGVzLgorICAgSWYgKmNsYXNzaW5mbyogaXMgbm90IGEgdHlwZSBvciB0dXBsZSBvZiB0eXBlcyBhbmQgc3VjaCB0dXBsZXMsCiAgICBhIDpleGM6YFR5cGVFcnJvcmAgZXhjZXB0aW9uIGlzIHJhaXNlZC4KIAogCkBAIC03MjcsMTEgKzc0NywxMiBAQAogLi4gZnVuY3Rpb246OiBsZW4ocykKIAogICAgUmV0dXJuIHRoZSBsZW5ndGggKHRoZSBudW1iZXIgb2YgaXRlbXMpIG9mIGFuIG9iamVjdC4gIFRoZSBhcmd1bWVudCBtYXkgYmUgYQotICAgc2VxdWVuY2UgKHN0cmluZywgdHVwbGUgb3IgbGlzdCkgb3IgYSBtYXBwaW5nIChkaWN0aW9uYXJ5KS4KKyAgIHNlcXVlbmNlIChzdWNoIGFzIGEgc3RyaW5nLCBieXRlcywgdHVwbGUsIGxpc3QsIG9yIHJhbmdlKSBvciBhIGNvbGxlY3Rpb24KKyAgIChzdWNoIGFzIGEgZGljdGlvbmFyeSwgc2V0LCBvciBmcm96ZW4gc2V0KS4KIAogCiAuLiBfZnVuYy1saXN0OgotLi4gZnVuY3Rpb246OiBsaXN0KFtpdGVyYWJsZV0pCisuLiBjbGFzczo6IGxpc3QoW2l0ZXJhYmxlXSkKICAgIDpub2luZGV4OgogCiAgICBSYXRoZXIgdGhhbiBiZWluZyBhIGZ1bmN0aW9uLCA6Y2xhc3M6YGxpc3RgIGlzIGFjdHVhbGx5IGEgbXV0YWJsZQpAQCAtNzU4LDI1ICs3NzksMzEgQEAKICAgIGFscmVhZHkgYXJyYW5nZWQgaW50byBhcmd1bWVudCB0dXBsZXMsIHNlZSA6ZnVuYzpgaXRlcnRvb2xzLnN0YXJtYXBgXC4KIAogCi0uLiBmdW5jdGlvbjo6IG1heChpdGVyYWJsZSwgKlssIGtleV0pCisuLiBmdW5jdGlvbjo6IG1heChpdGVyYWJsZSwgKlssIGtleSwgZGVmYXVsdF0pCiAgICAgICAgICAgICAgIG1heChhcmcxLCBhcmcyLCAqYXJnc1ssIGtleV0pCiAKICAgIFJldHVybiB0aGUgbGFyZ2VzdCBpdGVtIGluIGFuIGl0ZXJhYmxlIG9yIHRoZSBsYXJnZXN0IG9mIHR3byBvciBtb3JlCiAgICBhcmd1bWVudHMuCiAKLSAgIElmIG9uZSBwb3NpdGlvbmFsIGFyZ3VtZW50IGlzIHByb3ZpZGVkLCAqaXRlcmFibGUqIG11c3QgYmUgYSBub24tZW1wdHkKLSAgIGl0ZXJhYmxlIChzdWNoIGFzIGEgbm9uLWVtcHR5IHN0cmluZywgdHVwbGUgb3IgbGlzdCkuICBUaGUgbGFyZ2VzdCBpdGVtCi0gICBpbiB0aGUgaXRlcmFibGUgaXMgcmV0dXJuZWQuICBJZiB0d28gb3IgbW9yZSBwb3NpdGlvbmFsIGFyZ3VtZW50cyBhcmUKLSAgIHByb3ZpZGVkLCB0aGUgbGFyZ2VzdCBvZiB0aGUgcG9zaXRpb25hbCBhcmd1bWVudHMgaXMgcmV0dXJuZWQuCisgICBJZiBvbmUgcG9zaXRpb25hbCBhcmd1bWVudCBpcyBwcm92aWRlZCwgaXQgc2hvdWxkIGJlIGFuIDp0ZXJtOmBpdGVyYWJsZWAuCisgICBUaGUgbGFyZ2VzdCBpdGVtIGluIHRoZSBpdGVyYWJsZSBpcyByZXR1cm5lZC4gIElmIHR3byBvciBtb3JlIHBvc2l0aW9uYWwKKyAgIGFyZ3VtZW50cyBhcmUgcHJvdmlkZWQsIHRoZSBsYXJnZXN0IG9mIHRoZSBwb3NpdGlvbmFsIGFyZ3VtZW50cyBpcworICAgcmV0dXJuZWQuCiAKLSAgIFRoZSBvcHRpb25hbCBrZXl3b3JkLW9ubHkgKmtleSogYXJndW1lbnQgc3BlY2lmaWVzIGEgb25lLWFyZ3VtZW50IG9yZGVyaW5nCi0gICBmdW5jdGlvbiBsaWtlIHRoYXQgdXNlZCBmb3IgOm1ldGg6YGxpc3Quc29ydGAuCisgICBUaGVyZSBhcmUgdHdvIG9wdGlvbmFsIGtleXdvcmQtb25seSBhcmd1bWVudHMuIFRoZSAqa2V5KiBhcmd1bWVudCBzcGVjaWZpZXMKKyAgIGEgb25lLWFyZ3VtZW50IG9yZGVyaW5nIGZ1bmN0aW9uIGxpa2UgdGhhdCB1c2VkIGZvciA6bWV0aDpgbGlzdC5zb3J0YC4gVGhlCisgICAqZGVmYXVsdCogYXJndW1lbnQgc3BlY2lmaWVzIGFuIG9iamVjdCB0byByZXR1cm4gaWYgdGhlIHByb3ZpZGVkIGl0ZXJhYmxlIGlzCisgICBlbXB0eS4gSWYgdGhlIGl0ZXJhYmxlIGlzIGVtcHR5IGFuZCAqZGVmYXVsdCogaXMgbm90IHByb3ZpZGVkLCBhCisgICA6ZXhjOmBWYWx1ZUVycm9yYCBpcyByYWlzZWQuCiAKICAgIElmIG11bHRpcGxlIGl0ZW1zIGFyZSBtYXhpbWFsLCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgZmlyc3Qgb25lCiAgICBlbmNvdW50ZXJlZC4gIFRoaXMgaXMgY29uc2lzdGVudCB3aXRoIG90aGVyIHNvcnQtc3RhYmlsaXR5IHByZXNlcnZpbmcgdG9vbHMKICAgIHN1Y2ggYXMgYGBzb3J0ZWQoaXRlcmFibGUsIGtleT1rZXlmdW5jLCByZXZlcnNlPVRydWUpWzBdYGAgYW5kCiAgICBgYGhlYXBxLm5sYXJnZXN0KDEsIGl0ZXJhYmxlLCBrZXk9a2V5ZnVuYylgYC4KIAorICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisgICAgICBUaGUgKmRlZmF1bHQqIGtleXdvcmQtb25seSBhcmd1bWVudC4KKwogCiAuLiBfZnVuYy1tZW1vcnl2aWV3OgogLi4gZnVuY3Rpb246OiBtZW1vcnl2aWV3KG9iaikKQEAgLTc4NiwyNSArODEzLDMyIEBACiAgICA6cmVmOmB0eXBlbWVtb3J5dmlld2AgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAKIAotLi4gZnVuY3Rpb246OiBtaW4oaXRlcmFibGUsICpbLCBrZXldKQorLi4gZnVuY3Rpb246OiBtaW4oaXRlcmFibGUsICpbLCBrZXksIGRlZmF1bHRdKQogICAgICAgICAgICAgICBtaW4oYXJnMSwgYXJnMiwgKmFyZ3NbLCBrZXldKQogCiAgICBSZXR1cm4gdGhlIHNtYWxsZXN0IGl0ZW0gaW4gYW4gaXRlcmFibGUgb3IgdGhlIHNtYWxsZXN0IG9mIHR3byBvciBtb3JlCiAgICBhcmd1bWVudHMuCiAKLSAgIElmIG9uZSBwb3NpdGlvbmFsIGFyZ3VtZW50IGlzIHByb3ZpZGVkLCAqaXRlcmFibGUqIG11c3QgYmUgYSBub24tZW1wdHkKLSAgIGl0ZXJhYmxlIChzdWNoIGFzIGEgbm9uLWVtcHR5IHN0cmluZywgdHVwbGUgb3IgbGlzdCkuICBUaGUgc21hbGxlc3QgaXRlbQotICAgaW4gdGhlIGl0ZXJhYmxlIGlzIHJldHVybmVkLiAgSWYgdHdvIG9yIG1vcmUgcG9zaXRpb25hbCBhcmd1bWVudHMgYXJlCi0gICBwcm92aWRlZCwgdGhlIHNtYWxsZXN0IG9mIHRoZSBwb3NpdGlvbmFsIGFyZ3VtZW50cyBpcyByZXR1cm5lZC4KKyAgIElmIG9uZSBwb3NpdGlvbmFsIGFyZ3VtZW50IGlzIHByb3ZpZGVkLCBpdCBzaG91bGQgYmUgYW4gOnRlcm06YGl0ZXJhYmxlYC4KKyAgIFRoZSBzbWFsbGVzdCBpdGVtIGluIHRoZSBpdGVyYWJsZSBpcyByZXR1cm5lZC4gIElmIHR3byBvciBtb3JlIHBvc2l0aW9uYWwKKyAgIGFyZ3VtZW50cyBhcmUgcHJvdmlkZWQsIHRoZSBzbWFsbGVzdCBvZiB0aGUgcG9zaXRpb25hbCBhcmd1bWVudHMgaXMKKyAgIHJldHVybmVkLgogCi0gICBUaGUgb3B0aW9uYWwga2V5d29yZC1vbmx5ICprZXkqIGFyZ3VtZW50IHNwZWNpZmllcyBhIG9uZS1hcmd1bWVudCBvcmRlcmluZwotICAgZnVuY3Rpb24gbGlrZSB0aGF0IHVzZWQgZm9yIDptZXRoOmBsaXN0LnNvcnRgLgorICAgVGhlcmUgYXJlIHR3byBvcHRpb25hbCBrZXl3b3JkLW9ubHkgYXJndW1lbnRzLiBUaGUgKmtleSogYXJndW1lbnQgc3BlY2lmaWVzCisgICBhIG9uZS1hcmd1bWVudCBvcmRlcmluZyBmdW5jdGlvbiBsaWtlIHRoYXQgdXNlZCBmb3IgOm1ldGg6YGxpc3Quc29ydGAuIFRoZQorICAgKmRlZmF1bHQqIGFyZ3VtZW50IHNwZWNpZmllcyBhbiBvYmplY3QgdG8gcmV0dXJuIGlmIHRoZSBwcm92aWRlZCBpdGVyYWJsZSBpcworICAgZW1wdHkuIElmIHRoZSBpdGVyYWJsZSBpcyBlbXB0eSBhbmQgKmRlZmF1bHQqIGlzIG5vdCBwcm92aWRlZCwgYQorICAgOmV4YzpgVmFsdWVFcnJvcmAgaXMgcmFpc2VkLgogCiAgICBJZiBtdWx0aXBsZSBpdGVtcyBhcmUgbWluaW1hbCwgdGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIGZpcnN0IG9uZQogICAgZW5jb3VudGVyZWQuICBUaGlzIGlzIGNvbnNpc3RlbnQgd2l0aCBvdGhlciBzb3J0LXN0YWJpbGl0eSBwcmVzZXJ2aW5nIHRvb2xzCiAgICBzdWNoIGFzIGBgc29ydGVkKGl0ZXJhYmxlLCBrZXk9a2V5ZnVuYylbMF1gYCBhbmQgYGBoZWFwcS5uc21hbGxlc3QoMSwKICAgIGl0ZXJhYmxlLCBrZXk9a2V5ZnVuYylgYC4KIAorICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisgICAgICBUaGUgKmRlZmF1bHQqIGtleXdvcmQtb25seSBhcmd1bWVudC4KKworCiAuLiBmdW5jdGlvbjo6IG5leHQoaXRlcmF0b3JbLCBkZWZhdWx0XSkKIAogICAgUmV0cmlldmUgdGhlIG5leHQgaXRlbSBmcm9tIHRoZSAqaXRlcmF0b3IqIGJ5IGNhbGxpbmcgaXRzCkBAIC04MTIsNyArODQ2LDcgQEAKICAgIGlmIHRoZSBpdGVyYXRvciBpcyBleGhhdXN0ZWQsIG90aGVyd2lzZSA6ZXhjOmBTdG9wSXRlcmF0aW9uYCBpcyByYWlzZWQuCiAKIAotLi4gZnVuY3Rpb246OiBvYmplY3QoKQorLi4gY2xhc3M6OiBvYmplY3QoKQogCiAgICBSZXR1cm4gYSBuZXcgZmVhdHVyZWxlc3Mgb2JqZWN0LiAgOmNsYXNzOmBvYmplY3RgIGlzIGEgYmFzZSBmb3IgYWxsIGNsYXNzZXMuCiAgICBJdCBoYXMgdGhlIG1ldGhvZHMgdGhhdCBhcmUgY29tbW9uIHRvIGFsbCBpbnN0YW5jZXMgb2YgUHl0aG9uIGNsYXNzZXMuICBUaGlzCkBAIC04NjYsOCArOTAwLDcgQEAKICAgIGBgJ2InYGAgICBiaW5hcnkgbW9kZQogICAgYGAndCdgYCAgIHRleHQgbW9kZSAoZGVmYXVsdCkKICAgIGBgJysnYGAgICBvcGVuIGEgZGlzayBmaWxlIGZvciB1cGRhdGluZyAocmVhZGluZyBhbmQgd3JpdGluZykKLSAgIGBgJ1UnYGAgICB1bml2ZXJzYWwgbmV3bGluZXMgbW9kZSAoZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OyBzaG91bGQKLSAgICAgICAgICAgICBub3QgYmUgdXNlZCBpbiBuZXcgY29kZSkKKyAgIGBgJ1UnYGAgICA6dGVybTpgdW5pdmVyc2FsIG5ld2xpbmVzYCBtb2RlIChkZXByZWNhdGVkKQogICAgPT09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiAgICBUaGUgZGVmYXVsdCBtb2RlIGlzIGBgJ3InYGAgKG9wZW4gZm9yIHJlYWRpbmcgdGV4dCwgc3lub255bSBvZiBgYCdydCdgYCkuCkBAIC05MDYsMTUgKzkzOSwxNyBAQAogICAgKmVuY29kaW5nKiBpcyB0aGUgbmFtZSBvZiB0aGUgZW5jb2RpbmcgdXNlZCB0byBkZWNvZGUgb3IgZW5jb2RlIHRoZSBmaWxlLgogICAgVGhpcyBzaG91bGQgb25seSBiZSB1c2VkIGluIHRleHQgbW9kZS4gIFRoZSBkZWZhdWx0IGVuY29kaW5nIGlzIHBsYXRmb3JtCiAgICBkZXBlbmRlbnQgKHdoYXRldmVyIDpmdW5jOmBsb2NhbGUuZ2V0cHJlZmVycmVkZW5jb2RpbmdgIHJldHVybnMpLCBidXQgYW55Ci0gICBlbmNvZGluZyBzdXBwb3J0ZWQgYnkgUHl0aG9uIGNhbiBiZSB1c2VkLiAgU2VlIHRoZSA6bW9kOmBjb2RlY3NgIG1vZHVsZSBmb3IKKyAgIDp0ZXJtOmB0ZXh0IGVuY29kaW5nYCBzdXBwb3J0ZWQgYnkgUHl0aG9uCisgICBjYW4gYmUgdXNlZC4gIFNlZSB0aGUgOm1vZDpgY29kZWNzYCBtb2R1bGUgZm9yCiAgICB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQgZW5jb2RpbmdzLgogCiAgICAqZXJyb3JzKiBpcyBhbiBvcHRpb25hbCBzdHJpbmcgdGhhdCBzcGVjaWZpZXMgaG93IGVuY29kaW5nIGFuZCBkZWNvZGluZwogICAgZXJyb3JzIGFyZSB0byBiZSBoYW5kbGVkLS10aGlzIGNhbm5vdCBiZSB1c2VkIGluIGJpbmFyeSBtb2RlLgotICAgQSB2YXJpZXR5IG9mIHN0YW5kYXJkIGVycm9yIGhhbmRsZXJzIGFyZSBhdmFpbGFibGUsIHRob3VnaCBhbnkKKyAgIEEgdmFyaWV0eSBvZiBzdGFuZGFyZCBlcnJvciBoYW5kbGVycyBhcmUgYXZhaWxhYmxlCisgICAobGlzdGVkIHVuZGVyIDpyZWY6YGVycm9yLWhhbmRsZXJzYCksIHRob3VnaCBhbnkKICAgIGVycm9yIGhhbmRsaW5nIG5hbWUgdGhhdCBoYXMgYmVlbiByZWdpc3RlcmVkIHdpdGgKICAgIDpmdW5jOmBjb2RlY3MucmVnaXN0ZXJfZXJyb3JgIGlzIGFsc28gdmFsaWQuICBUaGUgc3RhbmRhcmQgbmFtZXMKLSAgIGFyZToKKyAgIGluY2x1ZGU6CiAKICAgICogYGAnc3RyaWN0J2BgIHRvIHJhaXNlIGEgOmV4YzpgVmFsdWVFcnJvcmAgZXhjZXB0aW9uIGlmIHRoZXJlIGlzCiAgICAgIGFuIGVuY29kaW5nIGVycm9yLiAgVGhlIGRlZmF1bHQgdmFsdWUgb2YgYGBOb25lYGAgaGFzIHRoZSBzYW1lCkBAIC05NzMsNiArMTAwOCw4IEBACiAgICA6bW9kOmBvcy5vcGVuYCBhcyAqb3BlbmVyKiByZXN1bHRzIGluIGZ1bmN0aW9uYWxpdHkgc2ltaWxhciB0byBwYXNzaW5nCiAgICBgYE5vbmVgYCkuCiAKKyAgIFRoZSBuZXdseSBjcmVhdGVkIGZpbGUgaXMgOnJlZjpgbm9uLWluaGVyaXRhYmxlIDxmZF9pbmhlcml0YW5jZT5gLgorCiAgICBUaGUgZm9sbG93aW5nIGV4YW1wbGUgdXNlcyB0aGUgOnJlZjpgZGlyX2ZkIDxkaXJfZmQ+YCBwYXJhbWV0ZXIgb2YgdGhlCiAgICA6ZnVuYzpgb3Mub3BlbmAgZnVuY3Rpb24gdG8gb3BlbiBhIGZpbGUgcmVsYXRpdmUgdG8gYSBnaXZlbiBkaXJlY3Rvcnk6OgogCkBAIC05ODYsMTkgKzEwMjMsMTUgQEAKICAgICAgIC4uLgogICAgICAgPj4+IG9zLmNsb3NlKGRpcl9mZCkgICMgZG9uJ3QgbGVhayBhIGZpbGUgZGVzY3JpcHRvcgogCi0gICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMwotICAgICAgVGhlICpvcGVuZXIqIHBhcmFtZXRlciB3YXMgYWRkZWQuCi0gICAgICBUaGUgYGAneCdgYCBtb2RlIHdhcyBhZGRlZC4KLQogICAgVGhlIHR5cGUgb2YgOnRlcm06YGZpbGUgb2JqZWN0YCByZXR1cm5lZCBieSB0aGUgOmZ1bmM6YG9wZW5gIGZ1bmN0aW9uCiAgICBkZXBlbmRzIG9uIHRoZSBtb2RlLiAgV2hlbiA6ZnVuYzpgb3BlbmAgaXMgdXNlZCB0byBvcGVuIGEgZmlsZSBpbiBhIHRleHQKICAgIG1vZGUgKGBgJ3cnYGAsIGBgJ3InYGAsIGBgJ3d0J2BgLCBgYCdydCdgYCwgZXRjLiksIGl0IHJldHVybnMgYSBzdWJjbGFzcyBvZgogICAgOmNsYXNzOmBpby5UZXh0SU9CYXNlYCAoc3BlY2lmaWNhbGx5IDpjbGFzczpgaW8uVGV4dElPV3JhcHBlcmApLiAgV2hlbiB1c2VkCiAgICB0byBvcGVuIGEgZmlsZSBpbiBhIGJpbmFyeSBtb2RlIHdpdGggYnVmZmVyaW5nLCB0aGUgcmV0dXJuZWQgY2xhc3MgaXMgYQogICAgc3ViY2xhc3Mgb2YgOmNsYXNzOmBpby5CdWZmZXJlZElPQmFzZWAuICBUaGUgZXhhY3QgY2xhc3MgdmFyaWVzOiBpbiByZWFkCi0gICBiaW5hcnkgbW9kZSwgaXQgcmV0dXJucyBhIDpjbGFzczpgaW8uQnVmZmVyZWRSZWFkZXJgOyBpbiB3cml0ZSBiaW5hcnkgYW5kCi0gICBhcHBlbmQgYmluYXJ5IG1vZGVzLCBpdCByZXR1cm5zIGEgOmNsYXNzOmBpby5CdWZmZXJlZFdyaXRlcmAsIGFuZCBpbgotICAgcmVhZC93cml0ZSBtb2RlLCBpdCByZXR1cm5zIGEgOmNsYXNzOmBpby5CdWZmZXJlZFJhbmRvbWAuICBXaGVuIGJ1ZmZlcmluZyBpcworICAgYmluYXJ5IG1vZGUsIGl0IHJldHVybnMgYW4gOmNsYXNzOmBpby5CdWZmZXJlZFJlYWRlcmA7IGluIHdyaXRlIGJpbmFyeSBhbmQKKyAgIGFwcGVuZCBiaW5hcnkgbW9kZXMsIGl0IHJldHVybnMgYW4gOmNsYXNzOmBpby5CdWZmZXJlZFdyaXRlcmAsIGFuZCBpbgorICAgcmVhZC93cml0ZSBtb2RlLCBpdCByZXR1cm5zIGFuIDpjbGFzczpgaW8uQnVmZmVyZWRSYW5kb21gLiAgV2hlbiBidWZmZXJpbmcgaXMKICAgIGRpc2FibGVkLCB0aGUgcmF3IHN0cmVhbSwgYSBzdWJjbGFzcyBvZiA6Y2xhc3M6YGlvLlJhd0lPQmFzZWAsCiAgICA6Y2xhc3M6YGlvLkZpbGVJT2AsIGlzIHJldHVybmVkLgogCkBAIC0xMDE2LDEwICsxMDQ5LDE5IEBACiAgICBhbmQgOm1vZDpgc2h1dGlsYC4KIAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKKyAgICAgIFRoZSAqb3BlbmVyKiBwYXJhbWV0ZXIgd2FzIGFkZGVkLgorICAgICAgVGhlIGBgJ3gnYGAgbW9kZSB3YXMgYWRkZWQuCiAgICAgICA6ZXhjOmBJT0Vycm9yYCB1c2VkIHRvIGJlIHJhaXNlZCwgaXQgaXMgbm93IGFuIGFsaWFzIG9mIDpleGM6YE9TRXJyb3JgLgogICAgICAgOmV4YzpgRmlsZUV4aXN0c0Vycm9yYCBpcyBub3cgcmFpc2VkIGlmIHRoZSBmaWxlIG9wZW5lZCBpbiBleGNsdXNpdmUKICAgICAgIGNyZWF0aW9uIG1vZGUgKGBgJ3gnYGApIGFscmVhZHkgZXhpc3RzLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVGhlIGZpbGUgaXMgbm93IG5vbi1pbmhlcml0YWJsZS4KKworICAgLi4gZGVwcmVjYXRlZC1yZW1vdmVkOjogMy40IDQuMAorCisgICAgICBUaGUgYGAnVSdgYCBtb2RlLgorCiAKIC4uIFhYWCB3b3JrcyBmb3IgYnl0ZXMgdG9vLCBidXQgc2hvdWxkIGl0PwogLi4gZnVuY3Rpb246OiBvcmQoYykKQEAgLTEwNDgsOCArMTA5MCw4IEBACiAKIC4uIGZ1bmN0aW9uOjogcHJpbnQoKm9iamVjdHMsIHNlcD0nICcsIGVuZD0nXFxuJywgZmlsZT1zeXMuc3Rkb3V0LCBmbHVzaD1GYWxzZSkKIAotICAgUHJpbnQgKm9iamVjdHMqIHRvIHRoZSBzdHJlYW0gKmZpbGUqLCBzZXBhcmF0ZWQgYnkgKnNlcCogYW5kIGZvbGxvd2VkIGJ5Ci0gICAqZW5kKi4gICpzZXAqLCAqZW5kKiBhbmQgKmZpbGUqLCBpZiBwcmVzZW50LCBtdXN0IGJlIGdpdmVuIGFzIGtleXdvcmQKKyAgIFByaW50ICpvYmplY3RzKiB0byB0aGUgdGV4dCBzdHJlYW0gKmZpbGUqLCBzZXBhcmF0ZWQgYnkgKnNlcCogYW5kIGZvbGxvd2VkCisgICBieSAqZW5kKi4gICpzZXAqLCAqZW5kKiBhbmQgKmZpbGUqLCBpZiBwcmVzZW50LCBtdXN0IGJlIGdpdmVuIGFzIGtleXdvcmQKICAgIGFyZ3VtZW50cy4KIAogICAgQWxsIG5vbi1rZXl3b3JkIGFyZ3VtZW50cyBhcmUgY29udmVydGVkIHRvIHN0cmluZ3MgbGlrZSA6ZnVuYzpgc3RyYCBkb2VzIGFuZApAQCAtMTA1OSwyMSArMTEwMSwyNiBAQAogICAgKmVuZCouCiAKICAgIFRoZSAqZmlsZSogYXJndW1lbnQgbXVzdCBiZSBhbiBvYmplY3Qgd2l0aCBhIGBgd3JpdGUoc3RyaW5nKWBgIG1ldGhvZDsgaWYgaXQKLSAgIGlzIG5vdCBwcmVzZW50IG9yIGBgTm9uZWBgLCA6ZGF0YTpgc3lzLnN0ZG91dGAgd2lsbCBiZSB1c2VkLiAgV2hldGhlciBvdXRwdXQKLSAgIGlzIGJ1ZmZlcmVkIGlzIHVzdWFsbHkgZGV0ZXJtaW5lZCBieSAqZmlsZSosIGJ1dCBpZiB0aGUgICpmbHVzaCoga2V5d29yZAotICAgYXJndW1lbnQgaXMgdHJ1ZSwgdGhlIHN0cmVhbSBpcyBmb3JjaWJseSBmbHVzaGVkLgorICAgaXMgbm90IHByZXNlbnQgb3IgYGBOb25lYGAsIDpkYXRhOmBzeXMuc3Rkb3V0YCB3aWxsIGJlIHVzZWQuICBTaW5jZSBwcmludGVkCisgICBhcmd1bWVudHMgYXJlIGNvbnZlcnRlZCB0byB0ZXh0IHN0cmluZ3MsIDpmdW5jOmBwcmludGAgY2Fubm90IGJlIHVzZWQgd2l0aAorICAgYmluYXJ5IG1vZGUgZmlsZSBvYmplY3RzLiAgRm9yIHRoZXNlLCB1c2UgYGBmaWxlLndyaXRlKC4uLilgYCBpbnN0ZWFkLgorCisgICBXaGV0aGVyIG91dHB1dCBpcyBidWZmZXJlZCBpcyB1c3VhbGx5IGRldGVybWluZWQgYnkgKmZpbGUqLCBidXQgaWYgdGhlCisgICAqZmx1c2gqIGtleXdvcmQgYXJndW1lbnQgaXMgdHJ1ZSwgdGhlIHN0cmVhbSBpcyBmb3JjaWJseSBmbHVzaGVkLgogCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMwogICAgICAgQWRkZWQgdGhlICpmbHVzaCoga2V5d29yZCBhcmd1bWVudC4KIAogCi0uLiBmdW5jdGlvbjo6IHByb3BlcnR5KGZnZXQ9Tm9uZSwgZnNldD1Ob25lLCBmZGVsPU5vbmUsIGRvYz1Ob25lKQorLi4gY2xhc3M6OiBwcm9wZXJ0eShmZ2V0PU5vbmUsIGZzZXQ9Tm9uZSwgZmRlbD1Ob25lLCBkb2M9Tm9uZSkKIAogICAgUmV0dXJuIGEgcHJvcGVydHkgYXR0cmlidXRlLgogCi0gICAqZmdldCogaXMgYSBmdW5jdGlvbiBmb3IgZ2V0dGluZyBhbiBhdHRyaWJ1dGUgdmFsdWUsIGxpa2V3aXNlICpmc2V0KiBpcyBhCi0gICBmdW5jdGlvbiBmb3Igc2V0dGluZywgYW5kICpmZGVsKiBhIGZ1bmN0aW9uIGZvciBkZWwnaW5nLCBhbiBhdHRyaWJ1dGUuICBUeXBpY2FsCi0gICB1c2UgaXMgdG8gZGVmaW5lIGEgbWFuYWdlZCBhdHRyaWJ1dGUgYGB4YGA6OgorICAgKmZnZXQqIGlzIGEgZnVuY3Rpb24gZm9yIGdldHRpbmcgYW4gYXR0cmlidXRlIHZhbHVlLiAgKmZzZXQqIGlzIGEgZnVuY3Rpb24KKyAgIGZvciBzZXR0aW5nIGFuIGF0dHJpYnV0ZSB2YWx1ZS4gKmZkZWwqIGlzIGEgZnVuY3Rpb24gZm9yIGRlbGV0aW5nIGFuIGF0dHJpYnV0ZQorICAgdmFsdWUuICBBbmQgKmRvYyogY3JlYXRlcyBhIGRvY3N0cmluZyBmb3IgdGhlIGF0dHJpYnV0ZS4KKworICAgQSB0eXBpY2FsIHVzZSBpcyB0byBkZWZpbmUgYSBtYW5hZ2VkIGF0dHJpYnV0ZSBgYHhgYDo6CiAKICAgICAgIGNsYXNzIEM6CiAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgpAQCAtMTA4MSwxMyArMTEyOCwxNiBAQAogCiAgICAgICAgICAgZGVmIGdldHgoc2VsZik6CiAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl94CisKICAgICAgICAgICBkZWYgc2V0eChzZWxmLCB2YWx1ZSk6CiAgICAgICAgICAgICAgIHNlbGYuX3ggPSB2YWx1ZQorCiAgICAgICAgICAgZGVmIGRlbHgoc2VsZik6CiAgICAgICAgICAgICAgIGRlbCBzZWxmLl94CisKICAgICAgICAgICB4ID0gcHJvcGVydHkoZ2V0eCwgc2V0eCwgZGVseCwgIkknbSB0aGUgJ3gnIHByb3BlcnR5LiIpCiAKLSAgIElmIHRoZW4gKmMqIGlzIGFuIGluc3RhbmNlIG9mICpDKiwgYGBjLnhgYCB3aWxsIGludm9rZSB0aGUgZ2V0dGVyLAorICAgSWYgKmMqIGlzIGFuIGluc3RhbmNlIG9mICpDKiwgYGBjLnhgYCB3aWxsIGludm9rZSB0aGUgZ2V0dGVyLAogICAgYGBjLnggPSB2YWx1ZWBgIHdpbGwgaW52b2tlIHRoZSBzZXR0ZXIgYW5kIGBgZGVsIGMueGBgIHRoZSBkZWxldGVyLgogCiAgICBJZiBnaXZlbiwgKmRvYyogd2lsbCBiZSB0aGUgZG9jc3RyaW5nIG9mIHRoZSBwcm9wZXJ0eSBhdHRyaWJ1dGUuIE90aGVyd2lzZSwgdGhlCkBAIC0xMTAzLDggKzExNTMsOSBAQAogICAgICAgICAgICAgICAiIiJHZXQgdGhlIGN1cnJlbnQgdm9sdGFnZS4iIiIKICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3ZvbHRhZ2UKIAotICAgdHVybnMgdGhlIDptZXRoOmB2b2x0YWdlYCBtZXRob2QgaW50byBhICJnZXR0ZXIiIGZvciBhIHJlYWQtb25seSBhdHRyaWJ1dGUKLSAgIHdpdGggdGhlIHNhbWUgbmFtZS4KKyAgIFRoZSBgYEBwcm9wZXJ0eWBgIGRlY29yYXRvciB0dXJucyB0aGUgOm1ldGg6YHZvbHRhZ2VgIG1ldGhvZCBpbnRvIGEgImdldHRlciIKKyAgIGZvciBhIHJlYWQtb25seSBhdHRyaWJ1dGUgd2l0aCB0aGUgc2FtZSBuYW1lLCBhbmQgaXQgc2V0cyB0aGUgZG9jc3RyaW5nIGZvcgorICAgKnZvbHRhZ2UqIHRvICJHZXQgdGhlIGN1cnJlbnQgdm9sdGFnZS4iCiAKICAgIEEgcHJvcGVydHkgb2JqZWN0IGhhcyA6YXR0cjpgfnByb3BlcnR5LmdldHRlcmAsIDphdHRyOmB+cHJvcGVydHkuc2V0dGVyYCwKICAgIGFuZCA6YXR0cjpgfnByb3BlcnR5LmRlbGV0ZXJgIG1ldGhvZHMgdXNhYmxlIGFzIGRlY29yYXRvcnMgdGhhdCBjcmVhdGUgYQpAQCAtMTEzMiw3ICsxMTgzLDcgQEAKICAgIGFkZGl0aW9uYWwgZnVuY3Rpb25zIHRoZSBzYW1lIG5hbWUgYXMgdGhlIG9yaWdpbmFsIHByb3BlcnR5IChgYHhgYCBpbiB0aGlzCiAgICBjYXNlLikKIAotICAgVGhlIHJldHVybmVkIHByb3BlcnR5IGFsc28gaGFzIHRoZSBhdHRyaWJ1dGVzIGBgZmdldGBgLCBgYGZzZXRgYCwgYW5kCisgICBUaGUgcmV0dXJuZWQgcHJvcGVydHkgb2JqZWN0IGFsc28gaGFzIHRoZSBhdHRyaWJ1dGVzIGBgZmdldGBgLCBgYGZzZXRgYCwgYW5kCiAgICBgYGZkZWxgYCBjb3JyZXNwb25kaW5nIHRvIHRoZSBjb25zdHJ1Y3RvciBhcmd1bWVudHMuCiAKIApAQCAtMTE4Nyw3ICsxMjM4LDcgQEAKIAogCiAuLiBfZnVuYy1zZXQ6Ci0uLiBmdW5jdGlvbjo6IHNldChbaXRlcmFibGVdKQorLi4gY2xhc3M6OiBzZXQoW2l0ZXJhYmxlXSkKICAgIDpub2luZGV4OgogCiAgICBSZXR1cm4gYSBuZXcgOmNsYXNzOmBzZXRgIG9iamVjdCwgb3B0aW9uYWxseSB3aXRoIGVsZW1lbnRzIHRha2VuIGZyb20KQEAgLTEyMDgsOCArMTI1OSw4IEBACiAgICBgYHguZm9vYmFyID0gMTIzYGAuCiAKIAotLi4gZnVuY3Rpb246OiBzbGljZShzdG9wKQotICAgICAgICAgICAgICBzbGljZShzdGFydCwgc3RvcFssIHN0ZXBdKQorLi4gY2xhc3M6OiBzbGljZShzdG9wKQorICAgICAgICAgICBzbGljZShzdGFydCwgc3RvcFssIHN0ZXBdKQogCiAgICAuLiBpbmRleDo6IHNpbmdsZTogTnVtZXJpY2FsIFB5dGhvbgogCkBAIC0xMjQwLDggKzEyOTEsMTMgQEAKICAgIFVzZSA6ZnVuYzpgZnVuY3Rvb2xzLmNtcF90b19rZXlgIHRvIGNvbnZlcnQgYW4gb2xkLXN0eWxlICpjbXAqIGZ1bmN0aW9uIHRvIGEKICAgICprZXkqIGZ1bmN0aW9uLgogCisgICBUaGUgYnVpbHQtaW4gOmZ1bmM6YHNvcnRlZGAgZnVuY3Rpb24gaXMgZ3VhcmFudGVlZCB0byBiZSBzdGFibGUuIEEgc29ydCBpcworICAgc3RhYmxlIGlmIGl0IGd1YXJhbnRlZXMgbm90IHRvIGNoYW5nZSB0aGUgcmVsYXRpdmUgb3JkZXIgb2YgZWxlbWVudHMgdGhhdAorICAgY29tcGFyZSBlcXVhbCAtLS0gdGhpcyBpcyBoZWxwZnVsIGZvciBzb3J0aW5nIGluIG11bHRpcGxlIHBhc3NlcyAoZm9yCisgICBleGFtcGxlLCBzb3J0IGJ5IGRlcGFydG1lbnQsIHRoZW4gYnkgc2FsYXJ5IGdyYWRlKS4KKwogICAgRm9yIHNvcnRpbmcgZXhhbXBsZXMgYW5kIGEgYnJpZWYgc29ydGluZyB0dXRvcmlhbCwgc2VlIGBTb3J0aW5nIEhvd1RvCi0gICA8aHR0cDovL3dpa2kucHl0aG9uLm9yZy9tb2luL0hvd1RvL1NvcnRpbmcvPmBfXC4KKyAgIDxodHRwczovL3dpa2kucHl0aG9uLm9yZy9tb2luL0hvd1RvL1NvcnRpbmcvPmBfXC4KIAogLi4gZnVuY3Rpb246OiBzdGF0aWNtZXRob2QoZnVuY3Rpb24pCiAKQEAgLTEyNzIsOCArMTMyOCw4IEBACiAKIAogLi4gX2Z1bmMtc3RyOgotLi4gZnVuY3Rpb246OiBzdHIob2JqZWN0PScnKQotICAgICAgICAgICAgICBzdHIob2JqZWN0PWInJywgZW5jb2Rpbmc9J3V0Zi04JywgZXJyb3JzPSdzdHJpY3QnKQorLi4gY2xhc3M6OiBzdHIob2JqZWN0PScnKQorICAgICAgICAgICBzdHIob2JqZWN0PWInJywgZW5jb2Rpbmc9J3V0Zi04JywgZXJyb3JzPSdzdHJpY3QnKQogICAgOm5vaW5kZXg6CiAKICAgIFJldHVybiBhIDpjbGFzczpgc3RyYCB2ZXJzaW9uIG9mICpvYmplY3QqLiAgU2VlIDpmdW5jOmBzdHJgIGZvciBkZXRhaWxzLgpAQCAtMTM2MCwxMiArMTQxNiwxMSBAQAogICAgc2VxdWVuY2UgdHlwZSwgYXMgZG9jdW1lbnRlZCBpbiA6cmVmOmB0eXBlc3NlcS10dXBsZWAgYW5kIDpyZWY6YHR5cGVzc2VxYC4KIAogCi0uLiBmdW5jdGlvbjo6IHR5cGUob2JqZWN0KQotICAgICAgICAgICAgICB0eXBlKG5hbWUsIGJhc2VzLCBkaWN0KQorLi4gY2xhc3M6OiB0eXBlKG9iamVjdCkKKyAgICAgICAgICAgdHlwZShuYW1lLCBiYXNlcywgZGljdCkKIAogICAgLi4gaW5kZXg6OiBvYmplY3Q6IHR5cGUKIAotCiAgICBXaXRoIG9uZSBhcmd1bWVudCwgcmV0dXJuIHRoZSB0eXBlIG9mIGFuICpvYmplY3QqLiAgVGhlIHJldHVybiB2YWx1ZSBpcyBhCiAgICB0eXBlIG9iamVjdCBhbmQgZ2VuZXJhbGx5IHRoZSBzYW1lIG9iamVjdCBhcyByZXR1cm5lZCBieQogICAgOmF0dHI6YG9iamVjdC5fX2NsYXNzX18gPGluc3RhbmNlLl9fY2xhc3NfXz5gLgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZnVuY3Rvb2xzLnJzdCBiL0RvYy9saWJyYXJ5L2Z1bmN0b29scy5yc3QKaW5kZXggM2M5NDZlMy4uNDZhYTg4NyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZnVuY3Rvb2xzLnJzdAorKysgYi9Eb2MvbGlicmFyeS9mdW5jdG9vbHMucnN0CkBAIC02LDYgKzYsNyBAQAogLi4gbW9kdWxlYXV0aG9yOjogUGV0ZXIgSGFycmlzIDxzY2F2QGJsdWV5b25kZXIuY28udWs+CiAuLiBtb2R1bGVhdXRob3I6OiBSYXltb25kIEhldHRpbmdlciA8cHl0aG9uQHJjbi5jb20+CiAuLiBtb2R1bGVhdXRob3I6OiBOaWNrIENvZ2hsYW4gPG5jb2dobGFuQGdtYWlsLmNvbT4KKy4uIG1vZHVsZWF1dGhvcjo6IMWBdWthc3ogTGFuZ2EgPGx1a2FzekBsYW5nYS5wbD4KIC4uIHNlY3Rpb25hdXRob3I6OiBQZXRlciBIYXJyaXMgPHNjYXZAYmx1ZXlvbmRlci5jby51az4KIAogKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvZnVuY3Rvb2xzLnB5YApAQCAtMjAsOCArMjEsOCBAQAogCiAuLiBmdW5jdGlvbjo6IGNtcF90b19rZXkoZnVuYykKIAotICAgVHJhbnNmb3JtIGFuIG9sZC1zdHlsZSBjb21wYXJpc29uIGZ1bmN0aW9uIHRvIGEga2V5IGZ1bmN0aW9uLiAgVXNlZCB3aXRoCi0gICB0b29scyB0aGF0IGFjY2VwdCBrZXkgZnVuY3Rpb25zIChzdWNoIGFzIDpmdW5jOmBzb3J0ZWRgLCA6ZnVuYzpgbWluYCwKKyAgIFRyYW5zZm9ybSBhbiBvbGQtc3R5bGUgY29tcGFyaXNvbiBmdW5jdGlvbiB0byBhIDp0ZXJtOmBrZXkgZnVuY3Rpb25gLiAgVXNlZAorICAgd2l0aCB0b29scyB0aGF0IGFjY2VwdCBrZXkgZnVuY3Rpb25zIChzdWNoIGFzIDpmdW5jOmBzb3J0ZWRgLCA6ZnVuYzpgbWluYCwKICAgIDpmdW5jOmBtYXhgLCA6ZnVuYzpgaGVhcHEubmxhcmdlc3RgLCA6ZnVuYzpgaGVhcHEubnNtYWxsZXN0YCwKICAgIDpmdW5jOmBpdGVydG9vbHMuZ3JvdXBieWApLiAgVGhpcyBmdW5jdGlvbiBpcyBwcmltYXJpbHkgdXNlZCBhcyBhIHRyYW5zaXRpb24KICAgIHRvb2wgZm9yIHByb2dyYW1zIGJlaW5nIGNvbnZlcnRlZCBmcm9tIFB5dGhvbiAyIHdoaWNoIHN1cHBvcnRlZCB0aGUgdXNlIG9mCkBAIC0zMCwxMyArMzEsMTQgQEAKICAgIEEgY29tcGFyaXNvbiBmdW5jdGlvbiBpcyBhbnkgY2FsbGFibGUgdGhhdCBhY2NlcHQgdHdvIGFyZ3VtZW50cywgY29tcGFyZXMgdGhlbSwKICAgIGFuZCByZXR1cm5zIGEgbmVnYXRpdmUgbnVtYmVyIGZvciBsZXNzLXRoYW4sIHplcm8gZm9yIGVxdWFsaXR5LCBvciBhIHBvc2l0aXZlCiAgICBudW1iZXIgZm9yIGdyZWF0ZXItdGhhbi4gIEEga2V5IGZ1bmN0aW9uIGlzIGEgY2FsbGFibGUgdGhhdCBhY2NlcHRzIG9uZQotICAgYXJndW1lbnQgYW5kIHJldHVybnMgYW5vdGhlciB2YWx1ZSBpbmRpY2F0aW5nIHRoZSBwb3NpdGlvbiBpbiB0aGUgZGVzaXJlZAotICAgY29sbGF0aW9uIHNlcXVlbmNlLgorICAgYXJndW1lbnQgYW5kIHJldHVybnMgYW5vdGhlciB2YWx1ZSB0byBiZSB1c2VkIGFzIHRoZSBzb3J0IGtleS4KIAogICAgRXhhbXBsZTo6CiAKICAgICAgICBzb3J0ZWQoaXRlcmFibGUsIGtleT1jbXBfdG9fa2V5KGxvY2FsZS5zdHJjb2xsKSkgICMgbG9jYWxlLWF3YXJlIHNvcnQgb3JkZXIKIAorICAgRm9yIHNvcnRpbmcgZXhhbXBsZXMgYW5kIGEgYnJpZWYgc29ydGluZyB0dXRvcmlhbCwgc2VlIDpyZWY6YHNvcnRpbmdob3d0b2AuCisKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgogCiAKQEAgLTcxLDcgKzczLDcgQEAKICAgIGJ5cGFzc2luZyB0aGUgY2FjaGUsIG9yIGZvciByZXdyYXBwaW5nIHRoZSBmdW5jdGlvbiB3aXRoIGEgZGlmZmVyZW50IGNhY2hlLgogCiAgICBBbiBgTFJVIChsZWFzdCByZWNlbnRseSB1c2VkKSBjYWNoZQotICAgPGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ2FjaGVfYWxnb3JpdGhtcyNMZWFzdF9SZWNlbnRseV9Vc2VkPmBfIHdvcmtzCisgICA8aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9DYWNoZV9hbGdvcml0aG1zI0V4YW1wbGVzPmBfIHdvcmtzCiAgICBiZXN0IHdoZW4gdGhlIG1vc3QgcmVjZW50IGNhbGxzIGFyZSB0aGUgYmVzdCBwcmVkaWN0b3JzIG9mIHVwY29taW5nIGNhbGxzIChmb3IKICAgIGV4YW1wbGUsIHRoZSBtb3N0IHBvcHVsYXIgYXJ0aWNsZXMgb24gYSBuZXdzIHNlcnZlciB0ZW5kIHRvIGNoYW5nZSBlYWNoIGRheSkuCiAgICBUaGUgY2FjaGUncyBzaXplIGxpbWl0IGFzc3VyZXMgdGhhdCB0aGUgY2FjaGUgZG9lcyBub3QgZ3JvdyB3aXRob3V0IGJvdW5kIG9uCkBAIC0xMzMsMTUgKzEzNSwzNCBAQAogCiAgICAgICAgQHRvdGFsX29yZGVyaW5nCiAgICAgICAgY2xhc3MgU3R1ZGVudDoKKyAgICAgICAgICAgZGVmIF9pc192YWxpZF9vcGVyYW5kKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgIHJldHVybiAoaGFzYXR0cihvdGhlciwgImxhc3RuYW1lIikgYW5kCisgICAgICAgICAgICAgICAgICAgICAgIGhhc2F0dHIob3RoZXIsICJmaXJzdG5hbWUiKSkKICAgICAgICAgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5faXNfdmFsaWRfb3BlcmFuZChvdGhlcik6CisgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCiAgICAgICAgICAgICAgICByZXR1cm4gKChzZWxmLmxhc3RuYW1lLmxvd2VyKCksIHNlbGYuZmlyc3RuYW1lLmxvd2VyKCkpID09CiAgICAgICAgICAgICAgICAgICAgICAgIChvdGhlci5sYXN0bmFtZS5sb3dlcigpLCBvdGhlci5maXJzdG5hbWUubG93ZXIoKSkpCiAgICAgICAgICAgIGRlZiBfX2x0X18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuX2lzX3ZhbGlkX29wZXJhbmQob3RoZXIpOgorICAgICAgICAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAogICAgICAgICAgICAgICAgcmV0dXJuICgoc2VsZi5sYXN0bmFtZS5sb3dlcigpLCBzZWxmLmZpcnN0bmFtZS5sb3dlcigpKSA8CiAgICAgICAgICAgICAgICAgICAgICAgIChvdGhlci5sYXN0bmFtZS5sb3dlcigpLCBvdGhlci5maXJzdG5hbWUubG93ZXIoKSkpCiAKKyAgIC4uIG5vdGU6OgorCisgICAgICBXaGlsZSB0aGlzIGRlY29yYXRvciBtYWtlcyBpdCBlYXN5IHRvIGNyZWF0ZSB3ZWxsIGJlaGF2ZWQgdG90YWxseQorICAgICAgb3JkZXJlZCB0eXBlcywgaXQgKmRvZXMqIGNvbWUgYXQgdGhlIGNvc3Qgb2Ygc2xvd2VyIGV4ZWN1dGlvbiBhbmQKKyAgICAgIG1vcmUgY29tcGxleCBzdGFjayB0cmFjZXMgZm9yIHRoZSBkZXJpdmVkIGNvbXBhcmlzb24gbWV0aG9kcy4gSWYKKyAgICAgIHBlcmZvcm1hbmNlIGJlbmNobWFya2luZyBpbmRpY2F0ZXMgdGhpcyBpcyBhIGJvdHRsZW5lY2sgZm9yIGEgZ2l2ZW4KKyAgICAgIGFwcGxpY2F0aW9uLCBpbXBsZW1lbnRpbmcgYWxsIHNpeCByaWNoIGNvbXBhcmlzb24gbWV0aG9kcyBpbnN0ZWFkIGlzCisgICAgICBsaWtlbHkgdG8gcHJvdmlkZSBhbiBlYXN5IHNwZWVkIGJvb3N0LgorCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFJldHVybmluZyBOb3RJbXBsZW1lbnRlZCBmcm9tIHRoZSB1bmRlcmx5aW5nIGNvbXBhcmlzb24gZnVuY3Rpb24gZm9yCisgICAgICB1bnJlY29nbmlzZWQgdHlwZXMgaXMgbm93IHN1cHBvcnRlZC4KIAogLi4gZnVuY3Rpb246OiBwYXJ0aWFsKGZ1bmMsICphcmdzLCAqKmtleXdvcmRzKQogCkBAIC0xNzQsNiArMTk1LDUwIEBACiAgICAgICAxOAogCiAKKy4uIGNsYXNzOjogcGFydGlhbG1ldGhvZChmdW5jLCAqYXJncywgKiprZXl3b3JkcykKKworICAgUmV0dXJuIGEgbmV3IDpjbGFzczpgcGFydGlhbG1ldGhvZGAgZGVzY3JpcHRvciB3aGljaCBiZWhhdmVzCisgICBsaWtlIDpjbGFzczpgcGFydGlhbGAgZXhjZXB0IHRoYXQgaXQgaXMgZGVzaWduZWQgdG8gYmUgdXNlZCBhcyBhIG1ldGhvZAorICAgZGVmaW5pdGlvbiByYXRoZXIgdGhhbiBiZWluZyBkaXJlY3RseSBjYWxsYWJsZS4KKworICAgKmZ1bmMqIG11c3QgYmUgYSA6dGVybTpgZGVzY3JpcHRvcmAgb3IgYSBjYWxsYWJsZSAob2JqZWN0cyB3aGljaCBhcmUgYm90aCwKKyAgIGxpa2Ugbm9ybWFsIGZ1bmN0aW9ucywgYXJlIGhhbmRsZWQgYXMgZGVzY3JpcHRvcnMpLgorCisgICBXaGVuICpmdW5jKiBpcyBhIGRlc2NyaXB0b3IgKHN1Y2ggYXMgYSBub3JtYWwgUHl0aG9uIGZ1bmN0aW9uLAorICAgOmZ1bmM6YGNsYXNzbWV0aG9kYCwgOmZ1bmM6YHN0YXRpY21ldGhvZGAsIDpmdW5jOmBhYnN0cmFjdG1ldGhvZGAgb3IKKyAgIGFub3RoZXIgaW5zdGFuY2Ugb2YgOmNsYXNzOmBwYXJ0aWFsbWV0aG9kYCksIGNhbGxzIHRvIGBgX19nZXRfX2BgIGFyZQorICAgZGVsZWdhdGVkIHRvIHRoZSB1bmRlcmx5aW5nIGRlc2NyaXB0b3IsIGFuZCBhbiBhcHByb3ByaWF0ZQorICAgOmNsYXNzOmBwYXJ0aWFsYCBvYmplY3QgcmV0dXJuZWQgYXMgdGhlIHJlc3VsdC4KKworICAgV2hlbiAqZnVuYyogaXMgYSBub24tZGVzY3JpcHRvciBjYWxsYWJsZSwgYW4gYXBwcm9wcmlhdGUgYm91bmQgbWV0aG9kIGlzCisgICBjcmVhdGVkIGR5bmFtaWNhbGx5LiBUaGlzIGJlaGF2ZXMgbGlrZSBhIG5vcm1hbCBQeXRob24gZnVuY3Rpb24gd2hlbgorICAgdXNlZCBhcyBhIG1ldGhvZDogdGhlICpzZWxmKiBhcmd1bWVudCB3aWxsIGJlIGluc2VydGVkIGFzIHRoZSBmaXJzdAorICAgcG9zaXRpb25hbCBhcmd1bWVudCwgZXZlbiBiZWZvcmUgdGhlICphcmdzKiBhbmQgKmtleXdvcmRzKiBzdXBwbGllZCB0bworICAgdGhlIDpjbGFzczpgcGFydGlhbG1ldGhvZGAgY29uc3RydWN0b3IuCisKKyAgIEV4YW1wbGU6OgorCisgICAgICA+Pj4gY2xhc3MgQ2VsbChvYmplY3QpOgorICAgICAgLi4uICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAuLi4gICAgICAgICBzZWxmLl9hbGl2ZSA9IEZhbHNlCisgICAgICAuLi4gICAgIEBwcm9wZXJ0eQorICAgICAgLi4uICAgICBkZWYgYWxpdmUoc2VsZik6CisgICAgICAuLi4gICAgICAgICByZXR1cm4gc2VsZi5fYWxpdmUKKyAgICAgIC4uLiAgICAgZGVmIHNldF9zdGF0ZShzZWxmLCBzdGF0ZSk6CisgICAgICAuLi4gICAgICAgICBzZWxmLl9hbGl2ZSA9IGJvb2woc3RhdGUpCisgICAgICAuLi4gICAgIHNldF9hbGl2ZSA9IHBhcnRpYWxtZXRob2Qoc2V0X3N0YXRlLCBUcnVlKQorICAgICAgLi4uICAgICBzZXRfZGVhZCA9IHBhcnRpYWxtZXRob2Qoc2V0X3N0YXRlLCBGYWxzZSkKKyAgICAgIC4uLgorICAgICAgPj4+IGMgPSBDZWxsKCkKKyAgICAgID4+PiBjLmFsaXZlCisgICAgICBGYWxzZQorICAgICAgPj4+IGMuc2V0X2FsaXZlKCkKKyAgICAgID4+PiBjLmFsaXZlCisgICAgICBUcnVlCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIC4uIGZ1bmN0aW9uOjogcmVkdWNlKGZ1bmN0aW9uLCBpdGVyYWJsZVssIGluaXRpYWxpemVyXSkKIAogICAgQXBwbHkgKmZ1bmN0aW9uKiBvZiB0d28gYXJndW1lbnRzIGN1bXVsYXRpdmVseSB0byB0aGUgaXRlbXMgb2YgKnNlcXVlbmNlKiwgZnJvbQpAQCAtMTg1LDcgKzI1MCw3IEBACiAgICBhIGRlZmF1bHQgd2hlbiB0aGUgc2VxdWVuY2UgaXMgZW1wdHkuICBJZiAqaW5pdGlhbGl6ZXIqIGlzIG5vdCBnaXZlbiBhbmQKICAgICpzZXF1ZW5jZSogY29udGFpbnMgb25seSBvbmUgaXRlbSwgdGhlIGZpcnN0IGl0ZW0gaXMgcmV0dXJuZWQuCiAKLSAgIEVxdWl2YWxlbnQgdG86OgorICAgUm91Z2hseSBlcXVpdmFsZW50IHRvOjoKIAogICAgICAgZGVmIHJlZHVjZShmdW5jdGlvbiwgaXRlcmFibGUsIGluaXRpYWxpemVyPU5vbmUpOgogICAgICAgICAgIGl0ID0gaXRlcihpdGVyYWJsZSkKQEAgLTE5OCw2ICsyNjMsMTExIEBACiAgICAgICAgICAgcmV0dXJuIHZhbHVlCiAKIAorLi4gZGVjb3JhdG9yOjogc2luZ2xlZGlzcGF0Y2goZGVmYXVsdCkKKworICAgVHJhbnNmb3JtcyBhIGZ1bmN0aW9uIGludG8gYSA6dGVybTpgc2luZ2xlLWRpc3BhdGNoIDxzaW5nbGUKKyAgIGRpc3BhdGNoPmAgOnRlcm06YGdlbmVyaWMgZnVuY3Rpb25gLgorCisgICBUbyBkZWZpbmUgYSBnZW5lcmljIGZ1bmN0aW9uLCBkZWNvcmF0ZSBpdCB3aXRoIHRoZSBgYEBzaW5nbGVkaXNwYXRjaGBgCisgICBkZWNvcmF0b3IuIE5vdGUgdGhhdCB0aGUgZGlzcGF0Y2ggaGFwcGVucyBvbiB0aGUgdHlwZSBvZiB0aGUgZmlyc3QgYXJndW1lbnQsCisgICBjcmVhdGUgeW91ciBmdW5jdGlvbiBhY2NvcmRpbmdseTo6CisKKyAgICAgPj4+IGZyb20gZnVuY3Rvb2xzIGltcG9ydCBzaW5nbGVkaXNwYXRjaAorICAgICA+Pj4gQHNpbmdsZWRpc3BhdGNoCisgICAgIC4uLiBkZWYgZnVuKGFyZywgdmVyYm9zZT1GYWxzZSk6CisgICAgIC4uLiAgICAgaWYgdmVyYm9zZToKKyAgICAgLi4uICAgICAgICAgcHJpbnQoIkxldCBtZSBqdXN0IHNheSwiLCBlbmQ9IiAiKQorICAgICAuLi4gICAgIHByaW50KGFyZykKKworICAgVG8gYWRkIG92ZXJsb2FkZWQgaW1wbGVtZW50YXRpb25zIHRvIHRoZSBmdW5jdGlvbiwgdXNlIHRoZSA6ZnVuYzpgcmVnaXN0ZXJgCisgICBhdHRyaWJ1dGUgb2YgdGhlIGdlbmVyaWMgZnVuY3Rpb24uICBJdCBpcyBhIGRlY29yYXRvciwgdGFraW5nIGEgdHlwZQorICAgcGFyYW1ldGVyIGFuZCBkZWNvcmF0aW5nIGEgZnVuY3Rpb24gaW1wbGVtZW50aW5nIHRoZSBvcGVyYXRpb24gZm9yIHRoYXQKKyAgIHR5cGU6OgorCisgICAgID4+PiBAZnVuLnJlZ2lzdGVyKGludCkKKyAgICAgLi4uIGRlZiBfKGFyZywgdmVyYm9zZT1GYWxzZSk6CisgICAgIC4uLiAgICAgaWYgdmVyYm9zZToKKyAgICAgLi4uICAgICAgICAgcHJpbnQoIlN0cmVuZ3RoIGluIG51bWJlcnMsIGVoPyIsIGVuZD0iICIpCisgICAgIC4uLiAgICAgcHJpbnQoYXJnKQorICAgICAuLi4KKyAgICAgPj4+IEBmdW4ucmVnaXN0ZXIobGlzdCkKKyAgICAgLi4uIGRlZiBfKGFyZywgdmVyYm9zZT1GYWxzZSk6CisgICAgIC4uLiAgICAgaWYgdmVyYm9zZToKKyAgICAgLi4uICAgICAgICAgcHJpbnQoIkVudW1lcmF0ZSB0aGlzOiIpCisgICAgIC4uLiAgICAgZm9yIGksIGVsZW0gaW4gZW51bWVyYXRlKGFyZyk6CisgICAgIC4uLiAgICAgICAgIHByaW50KGksIGVsZW0pCisKKyAgIFRvIGVuYWJsZSByZWdpc3RlcmluZyBsYW1iZGFzIGFuZCBwcmUtZXhpc3RpbmcgZnVuY3Rpb25zLCB0aGUKKyAgIDpmdW5jOmByZWdpc3RlcmAgYXR0cmlidXRlIGNhbiBiZSB1c2VkIGluIGEgZnVuY3Rpb25hbCBmb3JtOjoKKworICAgICA+Pj4gZGVmIG5vdGhpbmcoYXJnLCB2ZXJib3NlPUZhbHNlKToKKyAgICAgLi4uICAgICBwcmludCgiTm90aGluZy4iKQorICAgICAuLi4KKyAgICAgPj4+IGZ1bi5yZWdpc3Rlcih0eXBlKE5vbmUpLCBub3RoaW5nKQorCisgICBUaGUgOmZ1bmM6YHJlZ2lzdGVyYCBhdHRyaWJ1dGUgcmV0dXJucyB0aGUgdW5kZWNvcmF0ZWQgZnVuY3Rpb24gd2hpY2gKKyAgIGVuYWJsZXMgZGVjb3JhdG9yIHN0YWNraW5nLCBwaWNrbGluZywgYXMgd2VsbCBhcyBjcmVhdGluZyB1bml0IHRlc3RzIGZvcgorICAgZWFjaCB2YXJpYW50IGluZGVwZW5kZW50bHk6OgorCisgICAgID4+PiBAZnVuLnJlZ2lzdGVyKGZsb2F0KQorICAgICAuLi4gQGZ1bi5yZWdpc3RlcihEZWNpbWFsKQorICAgICAuLi4gZGVmIGZ1bl9udW0oYXJnLCB2ZXJib3NlPUZhbHNlKToKKyAgICAgLi4uICAgICBpZiB2ZXJib3NlOgorICAgICAuLi4gICAgICAgICBwcmludCgiSGFsZiBvZiB5b3VyIG51bWJlcjoiLCBlbmQ9IiAiKQorICAgICAuLi4gICAgIHByaW50KGFyZyAvIDIpCisgICAgIC4uLgorICAgICA+Pj4gZnVuX251bSBpcyBmdW4KKyAgICAgRmFsc2UKKworICAgV2hlbiBjYWxsZWQsIHRoZSBnZW5lcmljIGZ1bmN0aW9uIGRpc3BhdGNoZXMgb24gdGhlIHR5cGUgb2YgdGhlIGZpcnN0CisgICBhcmd1bWVudDo6CisKKyAgICAgPj4+IGZ1bigiSGVsbG8sIHdvcmxkLiIpCisgICAgIEhlbGxvLCB3b3JsZC4KKyAgICAgPj4+IGZ1bigidGVzdC4iLCB2ZXJib3NlPVRydWUpCisgICAgIExldCBtZSBqdXN0IHNheSwgdGVzdC4KKyAgICAgPj4+IGZ1big0MiwgdmVyYm9zZT1UcnVlKQorICAgICBTdHJlbmd0aCBpbiBudW1iZXJzLCBlaD8gNDIKKyAgICAgPj4+IGZ1bihbJ3NwYW0nLCAnc3BhbScsICdlZ2dzJywgJ3NwYW0nXSwgdmVyYm9zZT1UcnVlKQorICAgICBFbnVtZXJhdGUgdGhpczoKKyAgICAgMCBzcGFtCisgICAgIDEgc3BhbQorICAgICAyIGVnZ3MKKyAgICAgMyBzcGFtCisgICAgID4+PiBmdW4oTm9uZSkKKyAgICAgTm90aGluZy4KKyAgICAgPj4+IGZ1bigxLjIzKQorICAgICAwLjYxNQorCisgICBXaGVyZSB0aGVyZSBpcyBubyByZWdpc3RlcmVkIGltcGxlbWVudGF0aW9uIGZvciBhIHNwZWNpZmljIHR5cGUsIGl0cworICAgbWV0aG9kIHJlc29sdXRpb24gb3JkZXIgaXMgdXNlZCB0byBmaW5kIGEgbW9yZSBnZW5lcmljIGltcGxlbWVudGF0aW9uLgorICAgVGhlIG9yaWdpbmFsIGZ1bmN0aW9uIGRlY29yYXRlZCB3aXRoIGBgQHNpbmdsZWRpc3BhdGNoYGAgaXMgcmVnaXN0ZXJlZAorICAgZm9yIHRoZSBiYXNlIGBgb2JqZWN0YGAgdHlwZSwgd2hpY2ggbWVhbnMgaXQgaXMgdXNlZCBpZiBubyBiZXR0ZXIKKyAgIGltcGxlbWVudGF0aW9uIGlzIGZvdW5kLgorCisgICBUbyBjaGVjayB3aGljaCBpbXBsZW1lbnRhdGlvbiB3aWxsIHRoZSBnZW5lcmljIGZ1bmN0aW9uIGNob29zZSBmb3IKKyAgIGEgZ2l2ZW4gdHlwZSwgdXNlIHRoZSBgYGRpc3BhdGNoKClgYCBhdHRyaWJ1dGU6OgorCisgICAgID4+PiBmdW4uZGlzcGF0Y2goZmxvYXQpCisgICAgIDxmdW5jdGlvbiBmdW5fbnVtIGF0IDB4MTAzNWEyODQwPgorICAgICA+Pj4gZnVuLmRpc3BhdGNoKGRpY3QpICAgICMgbm90ZTogZGVmYXVsdCBpbXBsZW1lbnRhdGlvbgorICAgICA8ZnVuY3Rpb24gZnVuIGF0IDB4MTAzZmUwMDAwPgorCisgICBUbyBhY2Nlc3MgYWxsIHJlZ2lzdGVyZWQgaW1wbGVtZW50YXRpb25zLCB1c2UgdGhlIHJlYWQtb25seSBgYHJlZ2lzdHJ5YGAKKyAgIGF0dHJpYnV0ZTo6CisKKyAgICA+Pj4gZnVuLnJlZ2lzdHJ5LmtleXMoKQorICAgIGRpY3Rfa2V5cyhbPGNsYXNzICdOb25lVHlwZSc+LCA8Y2xhc3MgJ2ludCc+LCA8Y2xhc3MgJ29iamVjdCc+LAorICAgICAgICAgICAgICA8Y2xhc3MgJ2RlY2ltYWwuRGVjaW1hbCc+LCA8Y2xhc3MgJ2xpc3QnPiwKKyAgICAgICAgICAgICAgPGNsYXNzICdmbG9hdCc+XSkKKyAgICA+Pj4gZnVuLnJlZ2lzdHJ5W2Zsb2F0XQorICAgIDxmdW5jdGlvbiBmdW5fbnVtIGF0IDB4MTAzNWEyODQwPgorICAgID4+PiBmdW4ucmVnaXN0cnlbb2JqZWN0XQorICAgIDxmdW5jdGlvbiBmdW4gYXQgMHgxMDNmZTAwMDA+CisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIC4uIGZ1bmN0aW9uOjogdXBkYXRlX3dyYXBwZXIod3JhcHBlciwgd3JhcHBlZCwgYXNzaWduZWQ9V1JBUFBFUl9BU1NJR05NRU5UUywgdXBkYXRlZD1XUkFQUEVSX1VQREFURVMpCiAKICAgIFVwZGF0ZSBhICp3cmFwcGVyKiBmdW5jdGlvbiB0byBsb29rIGxpa2UgdGhlICp3cmFwcGVkKiBmdW5jdGlvbi4gVGhlIG9wdGlvbmFsCkBAIC0yMTIsOCArMzgyLDggQEAKIAogICAgVG8gYWxsb3cgYWNjZXNzIHRvIHRoZSBvcmlnaW5hbCBmdW5jdGlvbiBmb3IgaW50cm9zcGVjdGlvbiBhbmQgb3RoZXIgcHVycG9zZXMKICAgIChlLmcuIGJ5cGFzc2luZyBhIGNhY2hpbmcgZGVjb3JhdG9yIHN1Y2ggYXMgOmZ1bmM6YGxydV9jYWNoZWApLCB0aGlzIGZ1bmN0aW9uCi0gICBhdXRvbWF0aWNhbGx5IGFkZHMgYSBfX3dyYXBwZWRfXyBhdHRyaWJ1dGUgdG8gdGhlIHdyYXBwZXIgdGhhdCByZWZlcnMgdG8KLSAgIHRoZSBvcmlnaW5hbCBmdW5jdGlvbi4KKyAgIGF1dG9tYXRpY2FsbHkgYWRkcyBhIGBgX193cmFwcGVkX19gYCBhdHRyaWJ1dGUgdG8gdGhlIHdyYXBwZXIgdGhhdCByZWZlcnMgdG8KKyAgIHRoZSBmdW5jdGlvbiBiZWluZyB3cmFwcGVkLgogCiAgICBUaGUgbWFpbiBpbnRlbmRlZCB1c2UgZm9yIHRoaXMgZnVuY3Rpb24gaXMgaW4gOnRlcm06YGRlY29yYXRvcmAgZnVuY3Rpb25zIHdoaWNoCiAgICB3cmFwIHRoZSBkZWNvcmF0ZWQgZnVuY3Rpb24gYW5kIHJldHVybiB0aGUgd3JhcHBlci4gSWYgdGhlIHdyYXBwZXIgZnVuY3Rpb24gaXMKQEAgLTIzNiwxMiArNDA2LDE4IEBACiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgogICAgICAgTWlzc2luZyBhdHRyaWJ1dGVzIG5vIGxvbmdlciB0cmlnZ2VyIGFuIDpleGM6YEF0dHJpYnV0ZUVycm9yYC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSBgYF9fd3JhcHBlZF9fYGAgYXR0cmlidXRlIG5vdyBhbHdheXMgcmVmZXJzIHRvIHRoZSB3cmFwcGVkCisgICAgICBmdW5jdGlvbiwgZXZlbiBpZiB0aGF0IGZ1bmN0aW9uIGRlZmluZWQgYSBgYF9fd3JhcHBlZF9fYGAgYXR0cmlidXRlLgorICAgICAgKHNlZSA6aXNzdWU6YDE3NDgyYCkKKwogCiAuLiBkZWNvcmF0b3I6OiB3cmFwcyh3cmFwcGVkLCBhc3NpZ25lZD1XUkFQUEVSX0FTU0lHTk1FTlRTLCB1cGRhdGVkPVdSQVBQRVJfVVBEQVRFUykKIAotICAgVGhpcyBpcyBhIGNvbnZlbmllbmNlIGZ1bmN0aW9uIGZvciBpbnZva2luZyBgYHBhcnRpYWwodXBkYXRlX3dyYXBwZXIsCi0gICB3cmFwcGVkPXdyYXBwZWQsIGFzc2lnbmVkPWFzc2lnbmVkLCB1cGRhdGVkPXVwZGF0ZWQpYGAgYXMgYSBmdW5jdGlvbiBkZWNvcmF0b3IKLSAgIHdoZW4gZGVmaW5pbmcgYSB3cmFwcGVyIGZ1bmN0aW9uLiBGb3IgZXhhbXBsZToKKyAgIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBmdW5jdGlvbiBmb3IgaW52b2tpbmcgOmZ1bmM6YHVwZGF0ZV93cmFwcGVyYCBhcyBhCisgICBmdW5jdGlvbiBkZWNvcmF0b3Igd2hlbiBkZWZpbmluZyBhIHdyYXBwZXIgZnVuY3Rpb24uICBJdCBpcyBlcXVpdmFsZW50IHRvCisgICBgYHBhcnRpYWwodXBkYXRlX3dyYXBwZXIsIHdyYXBwZWQ9d3JhcHBlZCwgYXNzaWduZWQ9YXNzaWduZWQsIHVwZGF0ZWQ9dXBkYXRlZClgYC4KKyAgIEZvciBleGFtcGxlOjoKIAogICAgICAgPj4+IGZyb20gZnVuY3Rvb2xzIGltcG9ydCB3cmFwcwogICAgICAgPj4+IGRlZiBteV9kZWNvcmF0b3IoZik6CkBAIC0zMDEsNCArNDc3LDMgQEAKIGFyZSBub3QgY3JlYXRlZCBhdXRvbWF0aWNhbGx5LiAgQWxzbywgOmNsYXNzOmBwYXJ0aWFsYCBvYmplY3RzIGRlZmluZWQgaW4KIGNsYXNzZXMgYmVoYXZlIGxpa2Ugc3RhdGljIG1ldGhvZHMgYW5kIGRvIG5vdCB0cmFuc2Zvcm0gaW50byBib3VuZCBtZXRob2RzCiBkdXJpbmcgaW5zdGFuY2UgYXR0cmlidXRlIGxvb2stdXAuCi0KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2djLnJzdCBiL0RvYy9saWJyYXJ5L2djLnJzdAppbmRleCA3MTQ0OWEzLi44MTM1NTQyIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9nYy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZ2MucnN0CkBAIC02Nyw2ICs2NywyNSBAQAogICAgcmV0dXJuZWQuCiAKIAorLi4gZnVuY3Rpb246OiBnZXRfc3RhdHMoKQorCisgICBSZXR1cm4gYSBsaXN0IG9mIHRocmVlIHBlci1nZW5lcmF0aW9uIGRpY3Rpb25hcmllcyBjb250YWluaW5nIGNvbGxlY3Rpb24KKyAgIHN0YXRpc3RpY3Mgc2luY2UgaW50ZXJwcmV0ZXIgc3RhcnQuICBUaGUgbnVtYmVyIG9mIGtleXMgbWF5IGNoYW5nZQorICAgaW4gdGhlIGZ1dHVyZSwgYnV0IGN1cnJlbnRseSBlYWNoIGRpY3Rpb25hcnkgd2lsbCBjb250YWluIHRoZSBmb2xsb3dpbmcKKyAgIGl0ZW1zOgorCisgICAqIGBgY29sbGVjdGlvbnNgYCBpcyB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoaXMgZ2VuZXJhdGlvbiB3YXMgY29sbGVjdGVkOworCisgICAqIGBgY29sbGVjdGVkYGAgaXMgdGhlIHRvdGFsIG51bWJlciBvZiBvYmplY3RzIGNvbGxlY3RlZCBpbnNpZGUgdGhpcworICAgICBnZW5lcmF0aW9uOworCisgICAqIGBgdW5jb2xsZWN0YWJsZWBgIGlzIHRoZSB0b3RhbCBudW1iZXIgb2Ygb2JqZWN0cyB3aGljaCB3ZXJlIGZvdW5kCisgICAgIHRvIGJlIHVuY29sbGVjdGFibGUgKGFuZCB3ZXJlIHRoZXJlZm9yZSBtb3ZlZCB0byB0aGUgOmRhdGE6YGdhcmJhZ2VgCisgICAgIGxpc3QpIGluc2lkZSB0aGlzIGdlbmVyYXRpb24uCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIC4uIGZ1bmN0aW9uOjogc2V0X3RocmVzaG9sZCh0aHJlc2hvbGQwWywgdGhyZXNob2xkMVssIHRocmVzaG9sZDJdXSkKIAogICAgU2V0IHRoZSBnYXJiYWdlIGNvbGxlY3Rpb24gdGhyZXNob2xkcyAodGhlIGNvbGxlY3Rpb24gZnJlcXVlbmN5KS4gU2V0dGluZwpAQCAtMTU4LDI0ICsxNzcsMTMgQEAKIAogLi4gZGF0YTo6IGdhcmJhZ2UKIAotICAgQSBsaXN0IG9mIG9iamVjdHMgd2hpY2ggdGhlIGNvbGxlY3RvciBmb3VuZCB0byBiZSB1bnJlYWNoYWJsZSBidXQgY291bGQgbm90IGJlCi0gICBmcmVlZCAodW5jb2xsZWN0YWJsZSBvYmplY3RzKS4gIEJ5IGRlZmF1bHQsIHRoaXMgbGlzdCBjb250YWlucyBvbmx5IG9iamVjdHMgd2l0aAotICAgOm1ldGg6YF9fZGVsX19gIG1ldGhvZHMuIE9iamVjdHMgdGhhdCBoYXZlIDptZXRoOmBfX2RlbF9fYCBtZXRob2RzIGFuZCBhcmUKLSAgIHBhcnQgb2YgYSByZWZlcmVuY2UgY3ljbGUgY2F1c2UgdGhlIGVudGlyZSByZWZlcmVuY2UgY3ljbGUgdG8gYmUgdW5jb2xsZWN0YWJsZSwKLSAgIGluY2x1ZGluZyBvYmplY3RzIG5vdCBuZWNlc3NhcmlseSBpbiB0aGUgY3ljbGUgYnV0IHJlYWNoYWJsZSBvbmx5IGZyb20gaXQuCi0gICBQeXRob24gZG9lc24ndCBjb2xsZWN0IHN1Y2ggY3ljbGVzIGF1dG9tYXRpY2FsbHkgYmVjYXVzZSwgaW4gZ2VuZXJhbCwgaXQgaXNuJ3QKLSAgIHBvc3NpYmxlIGZvciBQeXRob24gdG8gZ3Vlc3MgYSBzYWZlIG9yZGVyIGluIHdoaWNoIHRvIHJ1biB0aGUgOm1ldGg6YF9fZGVsX19gCi0gICBtZXRob2RzLiAgSWYgeW91IGtub3cgYSBzYWZlIG9yZGVyLCB5b3UgY2FuIGZvcmNlIHRoZSBpc3N1ZSBieSBleGFtaW5pbmcgdGhlCi0gICAqZ2FyYmFnZSogbGlzdCwgYW5kIGV4cGxpY2l0bHkgYnJlYWtpbmcgY3ljbGVzIGR1ZSB0byB5b3VyIG9iamVjdHMgd2l0aGluIHRoZQotICAgbGlzdC4gIE5vdGUgdGhhdCB0aGVzZSBvYmplY3RzIGFyZSBrZXB0IGFsaXZlIGV2ZW4gc28gYnkgdmlydHVlIG9mIGJlaW5nIGluIHRoZQotICAgKmdhcmJhZ2UqIGxpc3QsIHNvIHRoZXkgc2hvdWxkIGJlIHJlbW92ZWQgZnJvbSAqZ2FyYmFnZSogdG9vLiAgRm9yIGV4YW1wbGUsCi0gICBhZnRlciBicmVha2luZyBjeWNsZXMsIGRvIGBgZGVsIGdjLmdhcmJhZ2VbOl1gYCB0byBlbXB0eSB0aGUgbGlzdC4gIEl0J3MKLSAgIGdlbmVyYWxseSBiZXR0ZXIgdG8gYXZvaWQgdGhlIGlzc3VlIGJ5IG5vdCBjcmVhdGluZyBjeWNsZXMgY29udGFpbmluZyBvYmplY3RzCi0gICB3aXRoIDptZXRoOmBfX2RlbF9fYCBtZXRob2RzLCBhbmQgKmdhcmJhZ2UqIGNhbiBiZSBleGFtaW5lZCBpbiB0aGF0IGNhc2UgdG8KLSAgIHZlcmlmeSB0aGF0IG5vIHN1Y2ggY3ljbGVzIGFyZSBiZWluZyBjcmVhdGVkLgorICAgQSBsaXN0IG9mIG9iamVjdHMgd2hpY2ggdGhlIGNvbGxlY3RvciBmb3VuZCB0byBiZSB1bnJlYWNoYWJsZSBidXQgY291bGQKKyAgIG5vdCBiZSBmcmVlZCAodW5jb2xsZWN0YWJsZSBvYmplY3RzKS4gIFN0YXJ0aW5nIHdpdGggUHl0aG9uIDMuNCwgdGhpcworICAgbGlzdCBzaG91bGQgYmUgZW1wdHkgbW9zdCBvZiB0aGUgdGltZSwgZXhjZXB0IHdoZW4gdXNpbmcgaW5zdGFuY2VzIG9mCisgICBDIGV4dGVuc2lvbiB0eXBlcyB3aXRoIGEgbm9uLU5VTEwgYGB0cF9kZWxgYCBzbG90LgogCi0gICBJZiA6Y29uc3Q6YERFQlVHX1NBVkVBTExgIGlzIHNldCwgdGhlbiBhbGwgdW5yZWFjaGFibGUgb2JqZWN0cyB3aWxsIGJlIGFkZGVkCi0gICB0byB0aGlzIGxpc3QgcmF0aGVyIHRoYW4gZnJlZWQuCisgICBJZiA6Y29uc3Q6YERFQlVHX1NBVkVBTExgIGlzIHNldCwgdGhlbiBhbGwgdW5yZWFjaGFibGUgb2JqZWN0cyB3aWxsIGJlCisgICBhZGRlZCB0byB0aGlzIGxpc3QgcmF0aGVyIHRoYW4gZnJlZWQuCiAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCiAgICAgICBJZiB0aGlzIGxpc3QgaXMgbm9uLWVtcHR5IGF0IGludGVycHJldGVyIHNodXRkb3duLCBhCkBAIC0xODMsNiArMTkxLDEwIEBACiAgICAgICA6Y29uc3Q6YERFQlVHX1VOQ09MTEVDVEFCTEVgIGlzIHNldCwgaW4gYWRkaXRpb24gYWxsIHVuY29sbGVjdGFibGUgb2JqZWN0cwogICAgICAgYXJlIHByaW50ZWQuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBGb2xsb3dpbmcgOnBlcDpgNDQyYCwgb2JqZWN0cyB3aXRoIGEgOm1ldGg6YF9fZGVsX19gIG1ldGhvZCBkb24ndCBlbmQKKyAgICAgIHVwIGluIDphdHRyOmBnYy5nYXJiYWdlYCBhbnltb3JlLgorCiAuLiBkYXRhOjogY2FsbGJhY2tzCiAKICAgIEEgbGlzdCBvZiBjYWxsYmFja3MgdGhhdCB3aWxsIGJlIGludm9rZWQgYnkgdGhlIGdhcmJhZ2UgY29sbGVjdG9yIGJlZm9yZSBhbmQKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2dldHBhc3MucnN0IGIvRG9jL2xpYnJhcnkvZ2V0cGFzcy5yc3QKaW5kZXggZmZlMmIxMi4uMjExNTYzZSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZ2V0cGFzcy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZ2V0cGFzcy5yc3QKQEAgLTEzLDEwICsxMywxMSBAQAogLi4gZnVuY3Rpb246OiBnZXRwYXNzKHByb21wdD0nUGFzc3dvcmQ6ICcsIHN0cmVhbT1Ob25lKQogCiAgICBQcm9tcHQgdGhlIHVzZXIgZm9yIGEgcGFzc3dvcmQgd2l0aG91dCBlY2hvaW5nLiAgVGhlIHVzZXIgaXMgcHJvbXB0ZWQgdXNpbmcKLSAgIHRoZSBzdHJpbmcgKnByb21wdCosIHdoaWNoIGRlZmF1bHRzIHRvIGBgJ1Bhc3N3b3JkOiAnYGAuICBPbiBVbml4LCB0aGUgcHJvbXB0Ci0gICBpcyB3cml0dGVuIHRvIHRoZSBmaWxlLWxpa2Ugb2JqZWN0ICpzdHJlYW0qLiAgKnN0cmVhbSogZGVmYXVsdHMgdG8gdGhlCi0gICBjb250cm9sbGluZyB0ZXJtaW5hbCAoOmZpbGU6YC9kZXYvdHR5YCkgb3IgaWYgdGhhdCBpcyB1bmF2YWlsYWJsZSB0bwotICAgYGBzeXMuc3RkZXJyYGAgKHRoaXMgYXJndW1lbnQgaXMgaWdub3JlZCBvbiBXaW5kb3dzKS4KKyAgIHRoZSBzdHJpbmcgKnByb21wdCosIHdoaWNoIGRlZmF1bHRzIHRvIGBgJ1Bhc3N3b3JkOiAnYGAuICBPbiBVbml4LCB0aGUKKyAgIHByb21wdCBpcyB3cml0dGVuIHRvIHRoZSBmaWxlLWxpa2Ugb2JqZWN0ICpzdHJlYW0qIHVzaW5nIHRoZSByZXBsYWNlIGVycm9yCisgICBoYW5kbGVyIGlmIG5lZWRlZC4gICpzdHJlYW0qIGRlZmF1bHRzIHRvIHRoZSBjb250cm9sbGluZyB0ZXJtaW5hbAorICAgKDpmaWxlOmAvZGV2L3R0eWApIG9yIGlmIHRoYXQgaXMgdW5hdmFpbGFibGUgdG8gYGBzeXMuc3RkZXJyYGAgKHRoaXMKKyAgIGFyZ3VtZW50IGlzIGlnbm9yZWQgb24gV2luZG93cykuCiAKICAgIElmIGVjaG8gZnJlZSBpbnB1dCBpcyB1bmF2YWlsYWJsZSBnZXRwYXNzKCkgZmFsbHMgYmFjayB0byBwcmludGluZwogICAgYSB3YXJuaW5nIG1lc3NhZ2UgdG8gKnN0cmVhbSogYW5kIHJlYWRpbmcgZnJvbSBgYHN5cy5zdGRpbmBgIGFuZApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZ2V0dGV4dC5yc3QgYi9Eb2MvbGlicmFyeS9nZXR0ZXh0LnJzdAppbmRleCA5ODI3ODBmLi5mZjIzYjU5IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9nZXR0ZXh0LnJzdAorKysgYi9Eb2MvbGlicmFyeS9nZXR0ZXh0LnJzdApAQCAtNDYwLDcgKzQ2MCw3IEBACiBpbnRlcm5hdGlvbmFsaXphdGlvbiBsaWJyYXJ5IHRoYXQgaW5jbHVkZXMgYSA6ZmlsZTpgcHliYWJlbGAgc2NyaXB0IHRvCiBleHRyYWN0IGFuZCBjb21waWxlIG1lc3NhZ2UgY2F0YWxvZ3MuICBGcmFuw6dvaXMgUGluYXJkJ3MgcHJvZ3JhbQogY2FsbGVkIDpwcm9ncmFtOmB4cG90YCBkb2VzIGEgc2ltaWxhciBqb2IgYW5kIGlzIGF2YWlsYWJsZSBhcyBwYXJ0IG9mCi1oaXMgYHBvLXV0aWxzIHBhY2thZ2UgPGh0dHA6Ly9wby11dGlscy5wcm9naWNpZWxzLWJwaS5jYS8+YF9fLgoraGlzIGBwby11dGlscyBwYWNrYWdlIDxodHRwczovL2dpdGh1Yi5jb20vcGluYXJkL3BvLXV0aWxzPmBfXy4KIAogKFB5dGhvbiBhbHNvIGluY2x1ZGVzIHB1cmUtUHl0aG9uIHZlcnNpb25zIG9mIHRoZXNlIHByb2dyYW1zLCBjYWxsZWQKIDpwcm9ncmFtOmBweWdldHRleHQucHlgIGFuZCA6cHJvZ3JhbTpgbXNnZm10LnB5YDsgc29tZSBQeXRob24gZGlzdHJpYnV0aW9ucwpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZ2xvYi5yc3QgYi9Eb2MvbGlicmFyeS9nbG9iLnJzdAppbmRleCBlZmYxMzhiLi44ZTlhZjM3IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9nbG9iLnJzdAorKysgYi9Eb2MvbGlicmFyeS9nbG9iLnJzdApAQCAtMTIsMTkgKzEyLDIzIEBACiAtLS0tLS0tLS0tLS0tLQogCiBUaGUgOm1vZDpgZ2xvYmAgbW9kdWxlIGZpbmRzIGFsbCB0aGUgcGF0aG5hbWVzIG1hdGNoaW5nIGEgc3BlY2lmaWVkIHBhdHRlcm4KLWFjY29yZGluZyB0byB0aGUgcnVsZXMgdXNlZCBieSB0aGUgVW5peCBzaGVsbC4gIE5vIHRpbGRlIGV4cGFuc2lvbiBpcyBkb25lLCBidXQKLWBgKmBgLCBgYD9gYCwgYW5kIGNoYXJhY3RlciByYW5nZXMgZXhwcmVzc2VkIHdpdGggYGBbXWBgIHdpbGwgYmUgY29ycmVjdGx5Ci1tYXRjaGVkLiAgVGhpcyBpcyBkb25lIGJ5IHVzaW5nIHRoZSA6ZnVuYzpgb3MubGlzdGRpcmAgYW5kCi06ZnVuYzpgZm5tYXRjaC5mbm1hdGNoYCBmdW5jdGlvbnMgaW4gY29uY2VydCwgYW5kIG5vdCBieSBhY3R1YWxseSBpbnZva2luZyBhCi1zdWJzaGVsbC4gIE5vdGUgdGhhdCB1bmxpa2UgOmZ1bmM6YGZubWF0Y2guZm5tYXRjaGAsIDptb2Q6YGdsb2JgIHRyZWF0cwotZmlsZW5hbWVzIGJlZ2lubmluZyB3aXRoIGEgZG90IChgYC5gYCkgYXMgc3BlY2lhbCBjYXNlcy4gIChGb3IgdGlsZGUgYW5kIHNoZWxsCi12YXJpYWJsZSBleHBhbnNpb24sIHVzZSA6ZnVuYzpgb3MucGF0aC5leHBhbmR1c2VyYCBhbmQKK2FjY29yZGluZyB0byB0aGUgcnVsZXMgdXNlZCBieSB0aGUgVW5peCBzaGVsbCwgYWx0aG91Z2ggcmVzdWx0cyBhcmUgcmV0dXJuZWQgaW4KK2FyYml0cmFyeSBvcmRlci4gIE5vIHRpbGRlIGV4cGFuc2lvbiBpcyBkb25lLCBidXQgYGAqYGAsIGBgP2BgLCBhbmQgY2hhcmFjdGVyCityYW5nZXMgZXhwcmVzc2VkIHdpdGggYGBbXWBgIHdpbGwgYmUgY29ycmVjdGx5IG1hdGNoZWQuICBUaGlzIGlzIGRvbmUgYnkgdXNpbmcKK3RoZSA6ZnVuYzpgb3MubGlzdGRpcmAgYW5kIDpmdW5jOmBmbm1hdGNoLmZubWF0Y2hgIGZ1bmN0aW9ucyBpbiBjb25jZXJ0LCBhbmQKK25vdCBieSBhY3R1YWxseSBpbnZva2luZyBhIHN1YnNoZWxsLiAgTm90ZSB0aGF0IHVubGlrZSA6ZnVuYzpgZm5tYXRjaC5mbm1hdGNoYCwKKzptb2Q6YGdsb2JgIHRyZWF0cyBmaWxlbmFtZXMgYmVnaW5uaW5nIHdpdGggYSBkb3QgKGBgLmBgKSBhcyBzcGVjaWFsIGNhc2VzLgorKEZvciB0aWxkZSBhbmQgc2hlbGwgdmFyaWFibGUgZXhwYW5zaW9uLCB1c2UgOmZ1bmM6YG9zLnBhdGguZXhwYW5kdXNlcmAgYW5kCiA6ZnVuYzpgb3MucGF0aC5leHBhbmR2YXJzYC4pCiAKIEZvciBhIGxpdGVyYWwgbWF0Y2gsIHdyYXAgdGhlIG1ldGEtY2hhcmFjdGVycyBpbiBicmFja2V0cy4KIEZvciBleGFtcGxlLCBgYCdbP10nYGAgbWF0Y2hlcyB0aGUgY2hhcmFjdGVyIGBgJz8nYGAuCiAKIAorLi4gc2VlYWxzbzo6CisgICBUaGUgOm1vZDpgcGF0aGxpYmAgbW9kdWxlIG9mZmVycyBoaWdoLWxldmVsIHBhdGggb2JqZWN0cy4KKworCiAuLiBmdW5jdGlvbjo6IGdsb2IocGF0aG5hbWUpCiAKICAgIFJldHVybiBhIHBvc3NpYmx5LWVtcHR5IGxpc3Qgb2YgcGF0aCBuYW1lcyB0aGF0IG1hdGNoICpwYXRobmFtZSosIHdoaWNoIG11c3QgYmUKQEAgLTQwLDYgKzQ0LDE3IEBACiAgICB3aXRob3V0IGFjdHVhbGx5IHN0b3JpbmcgdGhlbSBhbGwgc2ltdWx0YW5lb3VzbHkuCiAKIAorLi4gZnVuY3Rpb246OiBlc2NhcGUocGF0aG5hbWUpCisKKyAgIEVzY2FwZSBhbGwgc3BlY2lhbCBjaGFyYWN0ZXJzIChgYCc/J2BgLCBgYCcqJ2BgIGFuZCBgYCdbJ2BgKS4KKyAgIFRoaXMgaXMgdXNlZnVsIGlmIHlvdSB3YW50IHRvIG1hdGNoIGFuIGFyYml0cmFyeSBsaXRlcmFsIHN0cmluZyB0aGF0IG1heQorICAgaGF2ZSBzcGVjaWFsIGNoYXJhY3RlcnMgaW4gaXQuICBTcGVjaWFsIGNoYXJhY3RlcnMgaW4gZHJpdmUvVU5DCisgICBzaGFyZXBvaW50cyBhcmUgbm90IGVzY2FwZWQsIGUuZy4gb24gV2luZG93cworICAgYGBlc2NhcGUoJy8vPy9jOi9RdW8gdmFkaXM/LnR4dCcpYGAgcmV0dXJucyBgYCcvLz8vYzovUXVvIHZhZGlzWz9dLnR4dCdgYC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogRm9yIGV4YW1wbGUsIGNvbnNpZGVyIGEgZGlyZWN0b3J5IGNvbnRhaW5pbmcgb25seSB0aGUgZm9sbG93aW5nIGZpbGVzOgogOmZpbGU6YDEuZ2lmYCwgOmZpbGU6YDIudHh0YCwgYW5kIDpmaWxlOmBjYXJkLmdpZmAuICA6ZnVuYzpgZ2xvYmAgd2lsbCBwcm9kdWNlCiB0aGUgZm9sbG93aW5nIHJlc3VsdHMuICBOb3RpY2UgaG93IGFueSBsZWFkaW5nIGNvbXBvbmVudHMgb2YgdGhlIHBhdGggYXJlCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9nemlwLnJzdCBiL0RvYy9saWJyYXJ5L2d6aXAucnN0CmluZGV4IDM1NGRlZWQuLjM1NWNmOWMgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2d6aXAucnN0CisrKyBiL0RvYy9saWJyYXJ5L2d6aXAucnN0CkBAIC0zNSw4ICszNSw4IEBACiAgICA6Y2xhc3M6YGJ5dGVzYCBvYmplY3QpLCBvciBhbiBleGlzdGluZyBmaWxlIG9iamVjdCB0byByZWFkIGZyb20gb3Igd3JpdGUgdG8uCiAKICAgIFRoZSAqbW9kZSogYXJndW1lbnQgY2FuIGJlIGFueSBvZiBgYCdyJ2BgLCBgYCdyYidgYCwgYGAnYSdgYCwgYGAnYWInYGAsCi0gICBgYCd3J2BgLCBvciBgYCd3YidgYCBmb3IgYmluYXJ5IG1vZGUsIG9yIGBgJ3J0J2BgLCBgYCdhdCdgYCwgb3IgYGAnd3QnYGAgZm9yCi0gICB0ZXh0IG1vZGUuIFRoZSBkZWZhdWx0IGlzIGBgJ3JiJ2BgLgorICAgYGAndydgYCwgYGAnd2InYGAsIGBgJ3gnYGAgb3IgYGAneGInYGAgZm9yIGJpbmFyeSBtb2RlLCBvciBgYCdydCdgYCwKKyAgIGBgJ2F0J2BgLCBgYCd3dCdgYCwgb3IgYGAneHQnYGAgZm9yIHRleHQgbW9kZS4gVGhlIGRlZmF1bHQgaXMgYGAncmInYGAuCiAKICAgIFRoZSAqY29tcHJlc3NsZXZlbCogYXJndW1lbnQgaXMgYW4gaW50ZWdlciBmcm9tIDAgdG8gOSwgYXMgZm9yIHRoZQogICAgOmNsYXNzOmBHemlwRmlsZWAgY29uc3RydWN0b3IuCkBAIC01Myw2ICs1Myw5IEBACiAgICAgICBBZGRlZCBzdXBwb3J0IGZvciAqZmlsZW5hbWUqIGJlaW5nIGEgZmlsZSBvYmplY3QsIHN1cHBvcnQgZm9yIHRleHQgbW9kZSwKICAgICAgIGFuZCB0aGUgKmVuY29kaW5nKiwgKmVycm9ycyogYW5kICpuZXdsaW5lKiBhcmd1bWVudHMuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBBZGRlZCBzdXBwb3J0IGZvciB0aGUgYGAneCdgYCwgYGAneGInYGAgYW5kIGBgJ3h0J2BgIG1vZGVzLgorCiAKIC4uIGNsYXNzOjogR3ppcEZpbGUoZmlsZW5hbWU9Tm9uZSwgbW9kZT1Ob25lLCBjb21wcmVzc2xldmVsPTksIGZpbGVvYmo9Tm9uZSwgbXRpbWU9Tm9uZSkKIApAQCAtNjEsNyArNjQsNyBAQAogICAgbWV0aG9kLiAgQXQgbGVhc3Qgb25lIG9mICpmaWxlb2JqKiBhbmQgKmZpbGVuYW1lKiBtdXN0IGJlIGdpdmVuIGEgbm9uLXRyaXZpYWwKICAgIHZhbHVlLgogCi0gICBUaGUgbmV3IGNsYXNzIGluc3RhbmNlIGlzIGJhc2VkIG9uICpmaWxlb2JqKiwgd2hpY2ggY2FuIGJlIGEgcmVndWxhciBmaWxlLCBhCisgICBUaGUgbmV3IGNsYXNzIGluc3RhbmNlIGlzIGJhc2VkIG9uICpmaWxlb2JqKiwgd2hpY2ggY2FuIGJlIGEgcmVndWxhciBmaWxlLCBhbgogICAgOmNsYXNzOmBpby5CeXRlc0lPYCBvYmplY3QsIG9yIGFueSBvdGhlciBvYmplY3Qgd2hpY2ggc2ltdWxhdGVzIGEgZmlsZS4gIEl0CiAgICBkZWZhdWx0cyB0byBgYE5vbmVgYCwgaW4gd2hpY2ggY2FzZSAqZmlsZW5hbWUqIGlzIG9wZW5lZCB0byBwcm92aWRlIGEgZmlsZQogICAgb2JqZWN0LgpAQCAtNzMsOCArNzYsOSBAQAogICAgb3JpZ2luYWwgZmlsZW5hbWUgaXMgbm90IGluY2x1ZGVkIGluIHRoZSBoZWFkZXIuCiAKICAgIFRoZSAqbW9kZSogYXJndW1lbnQgY2FuIGJlIGFueSBvZiBgYCdyJ2BgLCBgYCdyYidgYCwgYGAnYSdgYCwgYGAnYWInYGAsIGBgJ3cnYGAsCi0gICBvciBgYCd3YidgYCwgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIGZpbGUgd2lsbCBiZSByZWFkIG9yIHdyaXR0ZW4uICBUaGUgZGVmYXVsdAotICAgaXMgdGhlIG1vZGUgb2YgKmZpbGVvYmoqIGlmIGRpc2Nlcm5pYmxlOyBvdGhlcndpc2UsIHRoZSBkZWZhdWx0IGlzIGBgJ3JiJ2BgLgorICAgYGAnd2InYGAsIGBgJ3gnYGAsIG9yIGBgJ3hiJ2BgLCBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgZmlsZSB3aWxsIGJlIHJlYWQgb3IKKyAgIHdyaXR0ZW4uICBUaGUgZGVmYXVsdCBpcyB0aGUgbW9kZSBvZiAqZmlsZW9iaiogaWYgZGlzY2VybmlibGU7IG90aGVyd2lzZSwgdGhlCisgICBkZWZhdWx0IGlzIGBgJ3JiJ2BgLgogCiAgICBOb3RlIHRoYXQgdGhlIGZpbGUgaXMgYWx3YXlzIG9wZW5lZCBpbiBiaW5hcnkgbW9kZS4gVG8gb3BlbiBhIGNvbXByZXNzZWQgZmlsZQogICAgaW4gdGV4dCBtb2RlLCB1c2UgOmZ1bmM6YC5vcGVuYCAob3Igd3JhcCB5b3VyIDpjbGFzczpgR3ppcEZpbGVgIHdpdGggYW4KQEAgLTk2LDcgKzEwMCw3IEBACiAKICAgIENhbGxpbmcgYSA6Y2xhc3M6YEd6aXBGaWxlYCBvYmplY3QncyA6bWV0aDpgY2xvc2VgIG1ldGhvZCBkb2VzIG5vdCBjbG9zZQogICAgKmZpbGVvYmoqLCBzaW5jZSB5b3UgbWlnaHQgd2lzaCB0byBhcHBlbmQgbW9yZSBtYXRlcmlhbCBhZnRlciB0aGUgY29tcHJlc3NlZAotICAgZGF0YS4gIFRoaXMgYWxzbyBhbGxvd3MgeW91IHRvIHBhc3MgYSA6Y2xhc3M6YGlvLkJ5dGVzSU9gIG9iamVjdCBvcGVuZWQgZm9yCisgICBkYXRhLiAgVGhpcyBhbHNvIGFsbG93cyB5b3UgdG8gcGFzcyBhbiA6Y2xhc3M6YGlvLkJ5dGVzSU9gIG9iamVjdCBvcGVuZWQgZm9yCiAgICB3cml0aW5nIGFzICpmaWxlb2JqKiwgYW5kIHJldHJpZXZlIHRoZSByZXN1bHRpbmcgbWVtb3J5IGJ1ZmZlciB1c2luZyB0aGUKICAgIDpjbGFzczpgaW8uQnl0ZXNJT2Agb2JqZWN0J3MgOm1ldGg6YH5pby5CeXRlc0lPLmdldHZhbHVlYCBtZXRob2QuCiAKQEAgLTEzMCw2ICsxMzQsOSBAQAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKICAgICAgIFRoZSA6bWV0aDpgaW8uQnVmZmVyZWRJT0Jhc2UucmVhZDFgIG1ldGhvZCBpcyBub3cgaW1wbGVtZW50ZWQuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBBZGRlZCBzdXBwb3J0IGZvciB0aGUgYGAneCdgYCBhbmQgYGAneGInYGAgbW9kZXMuCisKIAogLi4gZnVuY3Rpb246OiBjb21wcmVzcyhkYXRhLCBjb21wcmVzc2xldmVsPTkpCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2hhc2hsaWIucnN0IGIvRG9jL2xpYnJhcnkvaGFzaGxpYi5yc3QKaW5kZXggYTY5M2Y3ZS4uNzY5Zjk2ZiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvaGFzaGxpYi5yc3QKKysrIGIvRG9jL2xpYnJhcnkvaGFzaGxpYi5yc3QKQEAgLTMyLDYgKzMyLDEyIEBACiAgICBTb21lIGFsZ29yaXRobXMgaGF2ZSBrbm93biBoYXNoIGNvbGxpc2lvbiB3ZWFrbmVzc2VzLCByZWZlciB0byB0aGUgIlNlZQogICAgYWxzbyIgc2VjdGlvbiBhdCB0aGUgZW5kLgogCisKKy4uIF9oYXNoLWFsZ29yaXRobXM6CisKK0hhc2ggYWxnb3JpdGhtcworLS0tLS0tLS0tLS0tLS0tCisKIFRoZXJlIGlzIG9uZSBjb25zdHJ1Y3RvciBtZXRob2QgbmFtZWQgZm9yIGVhY2ggdHlwZSBvZiA6ZGZuOmBoYXNoYC4gIEFsbCByZXR1cm4KIGEgaGFzaCBvYmplY3Qgd2l0aCB0aGUgc2FtZSBzaW1wbGUgaW50ZXJmYWNlLiBGb3IgZXhhbXBsZTogdXNlIDpmdW5jOmBzaGExYCB0bwogY3JlYXRlIGEgU0hBMSBoYXNoIG9iamVjdC4gWW91IGNhbiBub3cgZmVlZCB0aGlzIG9iamVjdCB3aXRoIDp0ZXJtOmBieXRlcy1saWtlCkBAIC01Myw5ICs1OSw5IEBACiAuLiBpbmRleDo6IHNpbmdsZTogT3BlblNTTDsgKHVzZSBpbiBtb2R1bGUgaGFzaGxpYikKIAogQ29uc3RydWN0b3JzIGZvciBoYXNoIGFsZ29yaXRobXMgdGhhdCBhcmUgYWx3YXlzIHByZXNlbnQgaW4gdGhpcyBtb2R1bGUgYXJlCi06ZnVuYzpgbWQ1YCwgOmZ1bmM6YHNoYTFgLCA6ZnVuYzpgc2hhMjI0YCwgOmZ1bmM6YHNoYTI1NmAsIDpmdW5jOmBzaGEzODRgLCBhbmQKLTpmdW5jOmBzaGE1MTJgLiAgQWRkaXRpb25hbCBhbGdvcml0aG1zIG1heSBhbHNvIGJlIGF2YWlsYWJsZSBkZXBlbmRpbmcgdXBvbiB0aGUKLU9wZW5TU0wgbGlicmFyeSB0aGF0IFB5dGhvbiB1c2VzIG9uIHlvdXIgcGxhdGZvcm0uCis6ZnVuYzpgbWQ1YCwgOmZ1bmM6YHNoYTFgLCA6ZnVuYzpgc2hhMjI0YCwgOmZ1bmM6YHNoYTI1NmAsIDpmdW5jOmBzaGEzODRgLAorYW5kIDpmdW5jOmBzaGE1MTJgLiBBZGRpdGlvbmFsIGFsZ29yaXRobXMgbWF5IGFsc28gYmUgYXZhaWxhYmxlIGRlcGVuZGluZyB1cG9uCit0aGUgT3BlblNTTCBsaWJyYXJ5IHRoYXQgUHl0aG9uIHVzZXMgb24geW91ciBwbGF0Zm9ybS4KIAogRm9yIGV4YW1wbGUsIHRvIG9idGFpbiB0aGUgZGlnZXN0IG9mIHRoZSBieXRlIHN0cmluZyBgYGInTm9ib2R5IGluc3BlY3RzIHRoZQogc3BhbW1pc2ggcmVwZXRpdGlvbidgYDo6CkBAIC0xMjIsNiArMTI4LDE4IEBACiAKICAgIFRoZSBpbnRlcm5hbCBibG9jayBzaXplIG9mIHRoZSBoYXNoIGFsZ29yaXRobSBpbiBieXRlcy4KIAorQSBoYXNoIG9iamVjdCBoYXMgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzOgorCisuLiBhdHRyaWJ1dGU6OiBoYXNoLm5hbWUKKworICAgVGhlIGNhbm9uaWNhbCBuYW1lIG9mIHRoaXMgaGFzaCwgYWx3YXlzIGxvd2VyY2FzZSBhbmQgYWx3YXlzIHN1aXRhYmxlIGFzIGEKKyAgIHBhcmFtZXRlciB0byA6ZnVuYzpgbmV3YCB0byBjcmVhdGUgYW5vdGhlciBoYXNoIG9mIHRoaXMgdHlwZS4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSBuYW1lIGF0dHJpYnV0ZSBoYXMgYmVlbiBwcmVzZW50IGluIENQeXRob24gc2luY2UgaXRzIGluY2VwdGlvbiwgYnV0CisgICAgICB1bnRpbCBQeXRob24gMy40IHdhcyBub3QgZm9ybWFsbHkgc3BlY2lmaWVkLCBzbyBtYXkgbm90IGV4aXN0IG9uIHNvbWUKKyAgICAgIHBsYXRmb3Jtcy4KKwogQSBoYXNoIG9iamVjdCBoYXMgdGhlIGZvbGxvd2luZyBtZXRob2RzOgogCiAKQEAgLTE1OCw2ICsxNzYsNDYgQEAKICAgIGNvbXB1dGUgdGhlIGRpZ2VzdHMgb2YgZGF0YSBzaGFyaW5nIGEgY29tbW9uIGluaXRpYWwgc3Vic3RyaW5nLgogCiAKK0tleSBkZXJpdmF0aW9uCistLS0tLS0tLS0tLS0tLQorCitLZXkgZGVyaXZhdGlvbiBhbmQga2V5IHN0cmV0Y2hpbmcgYWxnb3JpdGhtcyBhcmUgZGVzaWduZWQgZm9yIHNlY3VyZSBwYXNzd29yZAoraGFzaGluZy4gTmFpdmUgYWxnb3JpdGhtcyBzdWNoIGFzIGBgc2hhMShwYXNzd29yZClgYCBhcmUgbm90IHJlc2lzdGFudCBhZ2FpbnN0CiticnV0ZS1mb3JjZSBhdHRhY2tzLiBBIGdvb2QgcGFzc3dvcmQgaGFzaGluZyBmdW5jdGlvbiBtdXN0IGJlIHR1bmFibGUsIHNsb3csIGFuZAoraW5jbHVkZSBhIGBzYWx0IDxodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TYWx0XyUyOGNyeXB0b2dyYXBoeSUyOT5gXy4KKworCisuLiBmdW5jdGlvbjo6IHBia2RmMl9obWFjKG5hbWUsIHBhc3N3b3JkLCBzYWx0LCByb3VuZHMsIGRrbGVuPU5vbmUpCisKKyAgIFRoZSBmdW5jdGlvbiBwcm92aWRlcyBQS0NTIzUgcGFzc3dvcmQtYmFzZWQga2V5IGRlcml2YXRpb24gZnVuY3Rpb24gMi4gSXQKKyAgIHVzZXMgSE1BQyBhcyBwc2V1ZG9yYW5kb20gZnVuY3Rpb24uCisKKyAgIFRoZSBzdHJpbmcgKm5hbWUqIGlzIHRoZSBkZXNpcmVkIG5hbWUgb2YgdGhlIGhhc2ggZGlnZXN0IGFsZ29yaXRobSBmb3IKKyAgIEhNQUMsIGUuZy4gJ3NoYTEnIG9yICdzaGEyNTYnLiAqcGFzc3dvcmQqIGFuZCAqc2FsdCogYXJlIGludGVycHJldGVkIGFzCisgICBidWZmZXJzIG9mIGJ5dGVzLiBBcHBsaWNhdGlvbnMgYW5kIGxpYnJhcmllcyBzaG91bGQgbGltaXQgKnBhc3N3b3JkKiB0bworICAgYSBzZW5zaWJsZSB2YWx1ZSAoZS5nLiAxMDI0KS4gKnNhbHQqIHNob3VsZCBiZSBhYm91dCAxNiBvciBtb3JlIGJ5dGVzIGZyb20KKyAgIGEgcHJvcGVyIHNvdXJjZSwgZS5nLiA6ZnVuYzpgb3MudXJhbmRvbWAuCisKKyAgIFRoZSBudW1iZXIgb2YgKnJvdW5kcyogc2hvdWxkIGJlIGNob3NlbiBiYXNlZCBvbiB0aGUgaGFzaCBhbGdvcml0aG0gYW5kCisgICBjb21wdXRpbmcgcG93ZXIuIEFzIG9mIDIwMTMsIGF0IGxlYXN0IDEwMCwwMDAgcm91bmRzIG9mIFNIQS0yNTYgaXMgc3VnZ2VzdGVkLgorCisgICAqZGtsZW4qIGlzIHRoZSBsZW5ndGggb2YgdGhlIGRlcml2ZWQga2V5LiBJZiAqZGtsZW4qIGlzIGBgTm9uZWBgIHRoZW4gdGhlCisgICBkaWdlc3Qgc2l6ZSBvZiB0aGUgaGFzaCBhbGdvcml0aG0gKm5hbWUqIGlzIHVzZWQsIGUuZy4gNjQgZm9yIFNIQS01MTIuCisKKyAgID4+PiBpbXBvcnQgaGFzaGxpYiwgYmluYXNjaWkKKyAgID4+PiBkayA9IGhhc2hsaWIucGJrZGYyX2htYWMoJ3NoYTI1NicsIGIncGFzc3dvcmQnLCBiJ3NhbHQnLCAxMDAwMDApCisgICA+Pj4gYmluYXNjaWkuaGV4bGlmeShkaykKKyAgIGInMDM5NGEyZWRlMzMyYzlhMTNlYjgyZTliMjQ2MzE2MDRjMzFkZjk3OGI0ZTJmMGZiZDJjNTQ5OTQ0ZjlkNzlhNScKKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKyAgIC4uIG5vdGU6OgorCisgICAgICBBIGZhc3QgaW1wbGVtZW50YXRpb24gb2YgKnBia2RmMl9obWFjKiBpcyBhdmFpbGFibGUgd2l0aCBPcGVuU1NMLiAgVGhlCisgICAgICBQeXRob24gaW1wbGVtZW50YXRpb24gdXNlcyBhbiBpbmxpbmUgdmVyc2lvbiBvZiA6bW9kOmBobWFjYC4gSXQgaXMgYWJvdXQKKyAgICAgIHRocmVlIHRpbWVzIHNsb3dlciBhbmQgZG9lc24ndCByZWxlYXNlIHRoZSBHSUwuCisKKwogLi4gc2VlYWxzbzo6CiAKICAgIE1vZHVsZSA6bW9kOmBobWFjYApAQCAtMTY5LDcgKzIyNyw5IEBACiAgICBodHRwOi8vY3NyYy5uaXN0Lmdvdi9wdWJsaWNhdGlvbnMvZmlwcy9maXBzMTgwLTIvZmlwczE4MC0yLnBkZgogICAgICAgVGhlIEZJUFMgMTgwLTIgcHVibGljYXRpb24gb24gU2VjdXJlIEhhc2ggQWxnb3JpdGhtcy4KIAotICAgaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9DcnlwdG9ncmFwaGljX2hhc2hfZnVuY3Rpb24jQ3J5cHRvZ3JhcGhpY19oYXNoX2FsZ29yaXRobXMKKyAgIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NyeXB0b2dyYXBoaWNfaGFzaF9mdW5jdGlvbiNDcnlwdG9ncmFwaGljX2hhc2hfYWxnb3JpdGhtcwogICAgICAgV2lraXBlZGlhIGFydGljbGUgd2l0aCBpbmZvcm1hdGlvbiBvbiB3aGljaCBhbGdvcml0aG1zIGhhdmUga25vd24gaXNzdWVzIGFuZAogICAgICAgd2hhdCB0aGF0IG1lYW5zIHJlZ2FyZGluZyB0aGVpciB1c2UuCiAKKyAgIGh0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzI4OTgudHh0CisgICAgICBQS0NTICM1OiBQYXNzd29yZC1CYXNlZCBDcnlwdG9ncmFwaHkgU3BlY2lmaWNhdGlvbiBWZXJzaW9uIDIuMApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvaGVhcHEucnN0IGIvRG9jL2xpYnJhcnkvaGVhcHEucnN0CmluZGV4IDRmMWE2ODIuLmY4OTcwYmUgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2hlYXBxLnJzdAorKysgYi9Eb2MvbGlicmFyeS9oZWFwcS5yc3QKQEAgLTQ3LDcgKzQ3LDggQEAKIC4uIGZ1bmN0aW9uOjogaGVhcHBvcChoZWFwKQogCiAgICBQb3AgYW5kIHJldHVybiB0aGUgc21hbGxlc3QgaXRlbSBmcm9tIHRoZSAqaGVhcCosIG1haW50YWluaW5nIHRoZSBoZWFwCi0gICBpbnZhcmlhbnQuICBJZiB0aGUgaGVhcCBpcyBlbXB0eSwgOmV4YzpgSW5kZXhFcnJvcmAgaXMgcmFpc2VkLgorICAgaW52YXJpYW50LiAgSWYgdGhlIGhlYXAgaXMgZW1wdHksIDpleGM6YEluZGV4RXJyb3JgIGlzIHJhaXNlZC4gIFRvIGFjY2VzcyB0aGUKKyAgIHNtYWxsZXN0IGl0ZW0gd2l0aG91dCBwb3BwaW5nIGl0LCB1c2UgYGBoZWFwWzBdYGAuCiAKIAogLi4gZnVuY3Rpb246OiBoZWFwcHVzaHBvcChoZWFwLCBpdGVtKQpAQCAtMTEyLDcgKzExMyw4IEBACiBUaGUgbGF0dGVyIHR3byBmdW5jdGlvbnMgcGVyZm9ybSBiZXN0IGZvciBzbWFsbGVyIHZhbHVlcyBvZiAqbiouICBGb3IgbGFyZ2VyCiB2YWx1ZXMsIGl0IGlzIG1vcmUgZWZmaWNpZW50IHRvIHVzZSB0aGUgOmZ1bmM6YHNvcnRlZGAgZnVuY3Rpb24uICBBbHNvLCB3aGVuCiBgYG49PTFgYCwgaXQgaXMgbW9yZSBlZmZpY2llbnQgdG8gdXNlIHRoZSBidWlsdC1pbiA6ZnVuYzpgbWluYCBhbmQgOmZ1bmM6YG1heGAKLWZ1bmN0aW9ucy4KK2Z1bmN0aW9ucy4gIElmIHJlcGVhdGVkIHVzYWdlIG9mIHRoZXNlIGZ1bmN0aW9ucyBpcyByZXF1aXJlZCwgY29uc2lkZXIgdHVybmluZwordGhlIGl0ZXJhYmxlIGludG8gYW4gYWN0dWFsIGhlYXAuCiAKIAogQmFzaWMgRXhhbXBsZXMKQEAgLTEyMyw3ICsxMjUsNiBAQAogdGltZTo6CiAKICAgID4+PiBkZWYgaGVhcHNvcnQoaXRlcmFibGUpOgotICAgLi4uICAgICAnRXF1aXZhbGVudCB0byBzb3J0ZWQoaXRlcmFibGUpJwogICAgLi4uICAgICBoID0gW10KICAgIC4uLiAgICAgZm9yIHZhbHVlIGluIGl0ZXJhYmxlOgogICAgLi4uICAgICAgICAgaGVhcHB1c2goaCwgdmFsdWUpCkBAIC0xMzIsNiArMTMzLDkgQEAKICAgID4+PiBoZWFwc29ydChbMSwgMywgNSwgNywgOSwgMiwgNCwgNiwgOCwgMF0pCiAgICBbMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOV0KIAorVGhpcyBpcyBzaW1pbGFyIHRvIGBgc29ydGVkKGl0ZXJhYmxlKWBgLCBidXQgdW5saWtlIDpmdW5jOmBzb3J0ZWRgLCB0aGlzCitpbXBsZW1lbnRhdGlvbiBpcyBub3Qgc3RhYmxlLgorCiBIZWFwIGVsZW1lbnRzIGNhbiBiZSB0dXBsZXMuICBUaGlzIGlzIHVzZWZ1bCBmb3IgYXNzaWduaW5nIGNvbXBhcmlzb24gdmFsdWVzCiAoc3VjaCBhcyB0YXNrIHByaW9yaXRpZXMpIGFsb25nc2lkZSB0aGUgbWFpbiByZWNvcmQgYmVpbmcgdHJhY2tlZDo6CiAKQEAgLTI1OCwxMSArMjYyLDExIEBACiB0aGUgd29yc3QgY2FzZXMgbWlnaHQgYmUgdGVycmlibGUuCiAKIEhlYXBzIGFyZSBhbHNvIHZlcnkgdXNlZnVsIGluIGJpZyBkaXNrIHNvcnRzLiAgWW91IG1vc3QgcHJvYmFibHkgYWxsIGtub3cgdGhhdCBhCi1iaWcgc29ydCBpbXBsaWVzIHByb2R1Y2luZyAicnVucyIgKHdoaWNoIGFyZSBwcmUtc29ydGVkIHNlcXVlbmNlcywgd2hpY2ggc2l6ZSBpcworYmlnIHNvcnQgaW1wbGllcyBwcm9kdWNpbmcgInJ1bnMiICh3aGljaCBhcmUgcHJlLXNvcnRlZCBzZXF1ZW5jZXMsIHdob3NlIHNpemUgaXMKIHVzdWFsbHkgcmVsYXRlZCB0byB0aGUgYW1vdW50IG9mIENQVSBtZW1vcnkpLCBmb2xsb3dlZCBieSBhIG1lcmdpbmcgcGFzc2VzIGZvcgogdGhlc2UgcnVucywgd2hpY2ggbWVyZ2luZyBpcyBvZnRlbiB2ZXJ5IGNsZXZlcmx5IG9yZ2FuaXNlZCBbI11fLiBJdCBpcyB2ZXJ5CiBpbXBvcnRhbnQgdGhhdCB0aGUgaW5pdGlhbCBzb3J0IHByb2R1Y2VzIHRoZSBsb25nZXN0IHJ1bnMgcG9zc2libGUuICBUb3VybmFtZW50cwotYXJlIGEgZ29vZCB3YXkgdG8gdGhhdC4gIElmLCB1c2luZyBhbGwgdGhlIG1lbW9yeSBhdmFpbGFibGUgdG8gaG9sZCBhCithcmUgYSBnb29kIHdheSB0byBhY2hpZXZlIHRoYXQuICBJZiwgdXNpbmcgYWxsIHRoZSBtZW1vcnkgYXZhaWxhYmxlIHRvIGhvbGQgYQogdG91cm5hbWVudCwgeW91IHJlcGxhY2UgYW5kIHBlcmNvbGF0ZSBpdGVtcyB0aGF0IGhhcHBlbiB0byBmaXQgdGhlIGN1cnJlbnQgcnVuLAogeW91J2xsIHByb2R1Y2UgcnVucyB3aGljaCBhcmUgdHdpY2UgdGhlIHNpemUgb2YgdGhlIG1lbW9yeSBmb3IgcmFuZG9tIGlucHV0LCBhbmQKIG11Y2ggYmV0dGVyIGZvciBpbnB1dCBmdXp6aWx5IG9yZGVyZWQuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9obWFjLnJzdCBiL0RvYy9saWJyYXJ5L2htYWMucnN0CmluZGV4IDk1NzU2OTMuLjE0NDZkYTYgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2htYWMucnN0CisrKyBiL0RvYy9saWJyYXJ5L2htYWMucnN0CkBAIC0zLDcgKzMsNiBAQAogCiAuLiBtb2R1bGU6OiBobWFjCiAgICA6c3lub3BzaXM6IEtleWVkLUhhc2hpbmcgZm9yIE1lc3NhZ2UgQXV0aGVudGljYXRpb24gKEhNQUMpIGltcGxlbWVudGF0aW9uCi0gICAgICAgICAgICAgIGZvciBQeXRob24uCiAuLiBtb2R1bGVhdXRob3I6OiBHZXJoYXJkIEjDpHJpbmcgPGdoYWVyaW5nQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KIC4uIHNlY3Rpb25hdXRob3I6OiBHZXJoYXJkIEjDpHJpbmcgPGdoYWVyaW5nQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KIApAQCAtMTYsMjAgKzE1LDMyIEBACiAKIC4uIGZ1bmN0aW9uOjogbmV3KGtleSwgbXNnPU5vbmUsIGRpZ2VzdG1vZD1Ob25lKQogCi0gICBSZXR1cm4gYSBuZXcgaG1hYyBvYmplY3QuICAqa2V5KiBpcyBhIGJ5dGVzIG9iamVjdCBnaXZpbmcgdGhlIHNlY3JldCBrZXkuICBJZgotICAgKm1zZyogaXMgcHJlc2VudCwgdGhlIG1ldGhvZCBjYWxsIGBgdXBkYXRlKG1zZylgYCBpcyBtYWRlLiAgKmRpZ2VzdG1vZCogaXMKLSAgIHRoZSBkaWdlc3QgY29uc3RydWN0b3Igb3IgbW9kdWxlIGZvciB0aGUgSE1BQyBvYmplY3QgdG8gdXNlLiBJdCBkZWZhdWx0cyB0bwotICAgdGhlIDpkYXRhOmBoYXNobGliLm1kNWAgY29uc3RydWN0b3IuCisgICBSZXR1cm4gYSBuZXcgaG1hYyBvYmplY3QuICAqa2V5KiBpcyBhIGJ5dGVzIG9yIGJ5dGVhcnJheSBvYmplY3QgZ2l2aW5nIHRoZQorICAgc2VjcmV0IGtleS4gIElmICptc2cqIGlzIHByZXNlbnQsIHRoZSBtZXRob2QgY2FsbCBgYHVwZGF0ZShtc2cpYGAgaXMgbWFkZS4KKyAgICpkaWdlc3Rtb2QqIGlzIHRoZSBkaWdlc3QgbmFtZSwgZGlnZXN0IGNvbnN0cnVjdG9yIG9yIG1vZHVsZSBmb3IgdGhlIEhNQUMKKyAgIG9iamVjdCB0byB1c2UuIEl0IHN1cHBvcnRzIGFueSBuYW1lIHN1aXRhYmxlIHRvIDpmdW5jOmBoYXNobGliLm5ld2AgYW5kCisgICBkZWZhdWx0cyB0byB0aGUgOmRhdGE6YGhhc2hsaWIubWQ1YCBjb25zdHJ1Y3Rvci4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFBhcmFtZXRlciAqa2V5KiBjYW4gYmUgYSBieXRlcyBvciBieXRlYXJyYXkgb2JqZWN0LgorICAgICAgUGFyYW1ldGVyICptc2cqIGNhbiBiZSBvZiBhbnkgdHlwZSBzdXBwb3J0ZWQgYnkgOm1vZDpgaGFzaGxpYmAuCisgICAgICBQYXJhbWV0ZXIgKmRpZ2VzdG1vZCogY2FuIGJlIHRoZSBuYW1lIG9mIGEgaGFzaCBhbGdvcml0aG0uCisKKyAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjQKKyAgICAgIE1ENSBhcyBpbXBsaWNpdCBkZWZhdWx0IGRpZ2VzdCBmb3IgKmRpZ2VzdG1vZCogaXMgZGVwcmVjYXRlZC4KIAogCiBBbiBITUFDIG9iamVjdCBoYXMgdGhlIGZvbGxvd2luZyBtZXRob2RzOgogCiAuLiBtZXRob2Q6OiBITUFDLnVwZGF0ZShtc2cpCiAKLSAgIFVwZGF0ZSB0aGUgaG1hYyBvYmplY3Qgd2l0aCB0aGUgYnl0ZXMgb2JqZWN0ICptc2cqLiAgUmVwZWF0ZWQgY2FsbHMgYXJlCi0gICBlcXVpdmFsZW50IHRvIGEgc2luZ2xlIGNhbGwgd2l0aCB0aGUgY29uY2F0ZW5hdGlvbiBvZiBhbGwgdGhlIGFyZ3VtZW50czoKKyAgIFVwZGF0ZSB0aGUgaG1hYyBvYmplY3Qgd2l0aCAqbXNnKi4gIFJlcGVhdGVkIGNhbGxzIGFyZSBlcXVpdmFsZW50IHRvIGEKKyAgIHNpbmdsZSBjYWxsIHdpdGggdGhlIGNvbmNhdGVuYXRpb24gb2YgYWxsIHRoZSBhcmd1bWVudHM6CiAgICBgYG0udXBkYXRlKGEpOyBtLnVwZGF0ZShiKWBgIGlzIGVxdWl2YWxlbnQgdG8gYGBtLnVwZGF0ZShhICsgYilgYC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFBhcmFtZXRlciAqbXNnKiBjYW4gYmUgb2YgYW55IHR5cGUgc3VwcG9ydGVkIGJ5IDptb2Q6YGhhc2hsaWJgLgorCiAKIC4uIG1ldGhvZDo6IEhNQUMuZGlnZXN0KCkKIApAQCAtNjYsNiArNzcsMjUgQEAKICAgIGNvbXB1dGUgdGhlIGRpZ2VzdHMgb2Ygc3RyaW5ncyB0aGF0IHNoYXJlIGEgY29tbW9uIGluaXRpYWwgc3Vic3RyaW5nLgogCiAKK0EgaGFzaCBvYmplY3QgaGFzIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczoKKworLi4gYXR0cmlidXRlOjogSE1BQy5kaWdlc3Rfc2l6ZQorCisgICBUaGUgc2l6ZSBvZiB0aGUgcmVzdWx0aW5nIEhNQUMgZGlnZXN0IGluIGJ5dGVzLgorCisuLiBhdHRyaWJ1dGU6OiBITUFDLmJsb2NrX3NpemUKKworICAgVGhlIGludGVybmFsIGJsb2NrIHNpemUgb2YgdGhlIGhhc2ggYWxnb3JpdGhtIGluIGJ5dGVzLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworLi4gYXR0cmlidXRlOjogSE1BQy5uYW1lCisKKyAgIFRoZSBjYW5vbmljYWwgbmFtZSBvZiB0aGlzIEhNQUMsIGFsd2F5cyBsb3dlcmNhc2UsIGUuZy4gYGBobWFjLW1kNWBgLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiBUaGlzIG1vZHVsZSBhbHNvIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgaGVscGVyIGZ1bmN0aW9uOgogCiAuLiBmdW5jdGlvbjo6IGNvbXBhcmVfZGlnZXN0KGEsIGIpCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9odG1sLmVudGl0aWVzLnJzdCBiL0RvYy9saWJyYXJ5L2h0bWwuZW50aXRpZXMucnN0CmluZGV4IDBhYWJiYWQuLmUxMGU0NmUgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2h0bWwuZW50aXRpZXMucnN0CisrKyBiL0RvYy9saWJyYXJ5L2h0bWwuZW50aXRpZXMucnN0CkBAIC0yMCw2ICsyMCw3IEBACiAgICBOb3RlIHRoYXQgdGhlIHRyYWlsaW5nIHNlbWljb2xvbiBpcyBpbmNsdWRlZCBpbiB0aGUgbmFtZSAoZS5nLiBgYCdndDsnYGApLAogICAgaG93ZXZlciBzb21lIG9mIHRoZSBuYW1lcyBhcmUgYWNjZXB0ZWQgYnkgdGhlIHN0YW5kYXJkIGV2ZW4gd2l0aG91dCB0aGUKICAgIHNlbWljb2xvbjogaW4gdGhpcyBjYXNlIHRoZSBuYW1lIGlzIHByZXNlbnQgd2l0aCBhbmQgd2l0aG91dCB0aGUgYGAnOydgYC4KKyAgIFNlZSBhbHNvIDpmdW5jOmBodG1sLnVuZXNjYXBlYC4KIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKQEAgLTMyLDEyICszMywxMiBAQAogCiAuLiBkYXRhOjogbmFtZTJjb2RlcG9pbnQKIAotICAgQSBkaWN0aW9uYXJ5IHRoYXQgbWFwcyBIVE1MIGVudGl0eSBuYW1lcyB0byB0aGUgVW5pY29kZSBjb2RlcG9pbnRzLgorICAgQSBkaWN0aW9uYXJ5IHRoYXQgbWFwcyBIVE1MIGVudGl0eSBuYW1lcyB0byB0aGUgVW5pY29kZSBjb2RlIHBvaW50cy4KIAogCiAuLiBkYXRhOjogY29kZXBvaW50Mm5hbWUKIAotICAgQSBkaWN0aW9uYXJ5IHRoYXQgbWFwcyBVbmljb2RlIGNvZGVwb2ludHMgdG8gSFRNTCBlbnRpdHkgbmFtZXMuCisgICBBIGRpY3Rpb25hcnkgdGhhdCBtYXBzIFVuaWNvZGUgY29kZSBwb2ludHMgdG8gSFRNTCBlbnRpdHkgbmFtZXMuCiAKIAogLi4gcnVicmljOjogRm9vdG5vdGVzCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9odG1sLnBhcnNlci5yc3QgYi9Eb2MvbGlicmFyeS9odG1sLnBhcnNlci5yc3QKaW5kZXggZTQxNTRlZi4uZmVmOWMzOCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvaHRtbC5wYXJzZXIucnN0CisrKyBiL0RvYy9saWJyYXJ5L2h0bWwucGFyc2VyLnJzdApAQCAtMTYsMTQgKzE2LDIxIEBACiBUaGlzIG1vZHVsZSBkZWZpbmVzIGEgY2xhc3MgOmNsYXNzOmBIVE1MUGFyc2VyYCB3aGljaCBzZXJ2ZXMgYXMgdGhlIGJhc2lzIGZvcgogcGFyc2luZyB0ZXh0IGZpbGVzIGZvcm1hdHRlZCBpbiBIVE1MIChIeXBlclRleHQgTWFyay11cCBMYW5ndWFnZSkgYW5kIFhIVE1MLgogCi0uLiBjbGFzczo6IEhUTUxQYXJzZXIoc3RyaWN0PUZhbHNlKQorLi4gY2xhc3M6OiBIVE1MUGFyc2VyKHN0cmljdD1GYWxzZSwgKiwgY29udmVydF9jaGFycmVmcz1GYWxzZSkKIAotICAgQ3JlYXRlIGEgcGFyc2VyIGluc3RhbmNlLiAgSWYgKnN0cmljdCogaXMgYGBGYWxzZWBgICh0aGUgZGVmYXVsdCksIHRoZSBwYXJzZXIKLSAgIHdpbGwgYWNjZXB0IGFuZCBwYXJzZSBpbnZhbGlkIG1hcmt1cC4gIElmICpzdHJpY3QqIGlzIGBgVHJ1ZWBgIHRoZSBwYXJzZXIKLSAgIHdpbGwgcmFpc2UgYW4gOmV4Yzpgfmh0bWwucGFyc2VyLkhUTUxQYXJzZUVycm9yYCBleGNlcHRpb24gaW5zdGVhZCBbI11fIHdoZW4KLSAgIGl0J3Mgbm90IGFibGUgdG8gcGFyc2UgdGhlIG1hcmt1cC4KLSAgIFRoZSB1c2Ugb2YgYGBzdHJpY3Q9VHJ1ZWBgIGlzIGRpc2NvdXJhZ2VkIGFuZCB0aGUgKnN0cmljdCogYXJndW1lbnQgaXMKLSAgIGRlcHJlY2F0ZWQuCisgICBDcmVhdGUgYSBwYXJzZXIgaW5zdGFuY2UuCisKKyAgIElmICpjb252ZXJ0X2NoYXJyZWZzKiBpcyBgYFRydWVgYCAoZGVmYXVsdDogYGBGYWxzZWBgKSwgYWxsIGNoYXJhY3RlcgorICAgcmVmZXJlbmNlcyAoZXhjZXB0IHRoZSBvbmVzIGluIGBgc2NyaXB0YGAvYGBzdHlsZWBgIGVsZW1lbnRzKSBhcmUKKyAgIGF1dG9tYXRpY2FsbHkgY29udmVydGVkIHRvIHRoZSBjb3JyZXNwb25kaW5nIFVuaWNvZGUgY2hhcmFjdGVycy4KKyAgIFRoZSB1c2Ugb2YgYGBjb252ZXJ0X2NoYXJyZWZzPVRydWVgYCBpcyBlbmNvdXJhZ2VkIGFuZCB3aWxsIGJlY29tZQorICAgdGhlIGRlZmF1bHQgaW4gUHl0aG9uIDMuNS4KKworICAgSWYgKnN0cmljdCogaXMgYGBGYWxzZWBgICh0aGUgZGVmYXVsdCksIHRoZSBwYXJzZXIgd2lsbCBhY2NlcHQgYW5kIHBhcnNlCisgICBpbnZhbGlkIG1hcmt1cC4gIElmICpzdHJpY3QqIGlzIGBgVHJ1ZWBgIHRoZSBwYXJzZXIgd2lsbCByYWlzZSBhbgorICAgOmV4Yzpgfmh0bWwucGFyc2VyLkhUTUxQYXJzZUVycm9yYCBleGNlcHRpb24gaW5zdGVhZCBbI11fIHdoZW4gaXQncyBub3QKKyAgIGFibGUgdG8gcGFyc2UgdGhlIG1hcmt1cC4gIFRoZSB1c2Ugb2YgYGBzdHJpY3Q9VHJ1ZWBgIGlzIGRpc2NvdXJhZ2VkIGFuZAorICAgdGhlICpzdHJpY3QqIGFyZ3VtZW50IGlzIGRlcHJlY2F0ZWQuCiAKICAgIEFuIDpjbGFzczpgLkhUTUxQYXJzZXJgIGluc3RhbmNlIGlzIGZlZCBIVE1MIGRhdGEgYW5kIGNhbGxzIGhhbmRsZXIgbWV0aG9kcwogICAgd2hlbiBzdGFydCB0YWdzLCBlbmQgdGFncywgdGV4dCwgY29tbWVudHMsIGFuZCBvdGhlciBtYXJrdXAgZWxlbWVudHMgYXJlCkBAIC0zNCwxMiArNDEsMTUgQEAKICAgIGhhbmRsZXIgZm9yIGVsZW1lbnRzIHdoaWNoIGFyZSBjbG9zZWQgaW1wbGljaXRseSBieSBjbG9zaW5nIGFuIG91dGVyIGVsZW1lbnQuCiAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCi0gICAgICAqc3RyaWN0KiBrZXl3b3JkIGFkZGVkLgorICAgICAgKnN0cmljdCogYXJndW1lbnQgYWRkZWQuCiAKICAgIC4uIGRlcHJlY2F0ZWQtcmVtb3ZlZDo6IDMuMyAzLjUKICAgICAgIFRoZSAqc3RyaWN0KiBhcmd1bWVudCBhbmQgdGhlIHN0cmljdCBtb2RlIGhhdmUgYmVlbiBkZXByZWNhdGVkLgogICAgICAgVGhlIHBhcnNlciBpcyBub3cgYWJsZSB0byBhY2NlcHQgYW5kIHBhcnNlIGludmFsaWQgbWFya3VwIHRvby4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgICpjb252ZXJ0X2NoYXJyZWZzKiBrZXl3b3JkIGFyZ3VtZW50IGFkZGVkLgorCiBBbiBleGNlcHRpb24gaXMgZGVmaW5lZCBhcyB3ZWxsOgogCiAKQEAgLTc0LDcgKzg0LDcgQEAKICAgICAgICBkZWYgaGFuZGxlX2RhdGEoc2VsZiwgZGF0YSk6CiAgICAgICAgICAgIHByaW50KCJFbmNvdW50ZXJlZCBzb21lIGRhdGEgIDoiLCBkYXRhKQogCi0gICBwYXJzZXIgPSBNeUhUTUxQYXJzZXIoc3RyaWN0PUZhbHNlKQorICAgcGFyc2VyID0gTXlIVE1MUGFyc2VyKCkKICAgIHBhcnNlci5mZWVkKCc8aHRtbD48aGVhZD48dGl0bGU+VGVzdDwvdGl0bGU+PC9oZWFkPicKICAgICAgICAgICAgICAgICc8Ym9keT48aDE+UGFyc2UgbWUhPC9oMT48L2JvZHk+PC9odG1sPicpCiAKQEAgLTE4MSw3ICsxOTEsOCBAQAogCiAgICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdG8gcHJvY2VzcyBhIG5hbWVkIGNoYXJhY3RlciByZWZlcmVuY2Ugb2YgdGhlIGZvcm0KICAgIGBgJm5hbWU7YGAgKGUuZy4gYGAmZ3Q7YGApLCB3aGVyZSAqbmFtZSogaXMgYSBnZW5lcmFsIGVudGl0eSByZWZlcmVuY2UKLSAgIChlLmcuIGBgJ2d0J2BgKS4KKyAgIChlLmcuIGBgJ2d0J2BgKS4gIFRoaXMgbWV0aG9kIGlzIG5ldmVyIGNhbGxlZCBpZiAqY29udmVydF9jaGFycmVmcyogaXMKKyAgIGBgVHJ1ZWBgLgogCiAKIC4uIG1ldGhvZDo6IEhUTUxQYXJzZXIuaGFuZGxlX2NoYXJyZWYobmFtZSkKQEAgLTE4OSw3ICsyMDAsOCBAQAogICAgVGhpcyBtZXRob2QgaXMgY2FsbGVkIHRvIHByb2Nlc3MgZGVjaW1hbCBhbmQgaGV4YWRlY2ltYWwgbnVtZXJpYyBjaGFyYWN0ZXIKICAgIHJlZmVyZW5jZXMgb2YgdGhlIGZvcm0gYGAmI05OTjtgYCBhbmQgYGAmI3hOTk47YGAuICBGb3IgZXhhbXBsZSwgdGhlIGRlY2ltYWwKICAgIGVxdWl2YWxlbnQgZm9yIGBgJmd0O2BgIGlzIGBgJiM2MjtgYCwgd2hlcmVhcyB0aGUgaGV4YWRlY2ltYWwgaXMgYGAmI3gzRTtgYDsKLSAgIGluIHRoaXMgY2FzZSB0aGUgbWV0aG9kIHdpbGwgcmVjZWl2ZSBgYCc2MidgYCBvciBgYCd4M0UnYGAuCisgICBpbiB0aGlzIGNhc2UgdGhlIG1ldGhvZCB3aWxsIHJlY2VpdmUgYGAnNjInYGAgb3IgYGAneDNFJ2BgLiAgVGhpcyBtZXRob2QKKyAgIGlzIG5ldmVyIGNhbGxlZCBpZiAqY29udmVydF9jaGFycmVmcyogaXMgYGBUcnVlYGAuCiAKIAogLi4gbWV0aG9kOjogSFRNTFBhcnNlci5oYW5kbGVfY29tbWVudChkYXRhKQpAQCAtMjAxLDcgKzIxMyw3IEBACiAKICAgIFRoZSBjb250ZW50IG9mIEludGVybmV0IEV4cGxvcmVyIGNvbmRpdGlvbmFsIGNvbW1lbnRzIChjb25kY29tcykgd2lsbCBhbHNvIGJlCiAgICBzZW50IHRvIHRoaXMgbWV0aG9kLCBzbywgZm9yIGBgPCEtLVtpZiBJRSA5XT5JRTktc3BlY2lmaWMgY29udGVudDwhW2VuZGlmXS0tPmBgLAotICAgdGhpcyBtZXRob2Qgd2lsbCByZWNlaXZlIGBgJ1tpZiBJRSA5XT5JRS1zcGVjaWZpYyBjb250ZW50PCFbZW5kaWZdJ2BgLgorICAgdGhpcyBtZXRob2Qgd2lsbCByZWNlaXZlIGBgJ1tpZiBJRSA5XT5JRTktc3BlY2lmaWMgY29udGVudDwhW2VuZGlmXSdgYC4KIAogCiAuLiBtZXRob2Q6OiBIVE1MUGFyc2VyLmhhbmRsZV9kZWNsKGRlY2wpCkBAIC0yNzIsNyArMjg0LDcgQEAKICAgICAgICBkZWYgaGFuZGxlX2RlY2woc2VsZiwgZGF0YSk6CiAgICAgICAgICAgIHByaW50KCJEZWNsICAgICA6IiwgZGF0YSkKIAotICAgcGFyc2VyID0gTXlIVE1MUGFyc2VyKHN0cmljdD1GYWxzZSkKKyAgIHBhcnNlciA9IE15SFRNTFBhcnNlcigpCiAKIFBhcnNpbmcgYSBkb2N0eXBlOjoKIApAQCAtMzI0LDcgKzMzNiw4IEBACiAgICBOdW0gZW50ICA6ID4KIAogRmVlZGluZyBpbmNvbXBsZXRlIGNodW5rcyB0byA6bWV0aDpgfkhUTUxQYXJzZXIuZmVlZGAgd29ya3MsIGJ1dAotOm1ldGg6YH5IVE1MUGFyc2VyLmhhbmRsZV9kYXRhYCBtaWdodCBiZSBjYWxsZWQgbW9yZSB0aGFuIG9uY2U6OgorOm1ldGg6YH5IVE1MUGFyc2VyLmhhbmRsZV9kYXRhYCBtaWdodCBiZSBjYWxsZWQgbW9yZSB0aGFuIG9uY2UKKyh1bmxlc3MgKmNvbnZlcnRfY2hhcnJlZnMqIGlzIHNldCB0byBgYFRydWVgYCk6OgogCiAgICA+Pj4gZm9yIGNodW5rIGluIFsnPHNwJywgJ2FuPmJ1ZmYnLCAnZXJlZCAnLCAndGV4dDwvcycsICdwYW4+J106CiAgICAuLi4gICAgIHBhcnNlci5mZWVkKGNodW5rKQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvaHRtbC5yc3QgYi9Eb2MvbGlicmFyeS9odG1sLnJzdAppbmRleCAxMTA3Y2E5Li5kMDcwNmJjIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9odG1sLnJzdAorKysgYi9Eb2MvbGlicmFyeS9odG1sLnJzdApAQCAtMjAsNiArMjAsMTcgQEAKIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCiAKKworLi4gZnVuY3Rpb246OiB1bmVzY2FwZShzKQorCisgICBDb252ZXJ0IGFsbCBuYW1lZCBhbmQgbnVtZXJpYyBjaGFyYWN0ZXIgcmVmZXJlbmNlcyAoZS5nLiBgYCZndDtgYCwKKyAgIGBgJiM2MjtgYCwgYGAmeDNlO2BgKSBpbiB0aGUgc3RyaW5nICpzKiB0byB0aGUgY29ycmVzcG9uZGluZyB1bmljb2RlCisgICBjaGFyYWN0ZXJzLiAgVGhpcyBmdW5jdGlvbiB1c2VzIHRoZSBydWxlcyBkZWZpbmVkIGJ5IHRoZSBIVE1MIDUgc3RhbmRhcmQKKyAgIGZvciBib3RoIHZhbGlkIGFuZCBpbnZhbGlkIGNoYXJhY3RlciByZWZlcmVuY2VzLCBhbmQgdGhlIDpkYXRhOmBsaXN0IG9mCisgICBIVE1MIDUgbmFtZWQgY2hhcmFjdGVyIHJlZmVyZW5jZXMgPGh0bWwuZW50aXRpZXMuaHRtbDU+YC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIC0tLS0tLS0tLS0tLS0tCiAKIFN1Ym1vZHVsZXMgaW4gdGhlIGBgaHRtbGBgIHBhY2thZ2UgYXJlOgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvaHR0cC5jbGllbnQucnN0IGIvRG9jL2xpYnJhcnkvaHR0cC5jbGllbnQucnN0CmluZGV4IGJiMzBmMjQuLjgwN2Y2ODUgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2h0dHAuY2xpZW50LnJzdAorKysgYi9Eb2MvbGlicmFyeS9odHRwLmNsaWVudC5yc3QKQEAgLTE5LDYgKzE5LDExIEBACiBIVFRQUyBwcm90b2NvbHMuICBJdCBpcyBub3JtYWxseSBub3QgdXNlZCBkaXJlY3RseSAtLS0gdGhlIG1vZHVsZQogOm1vZDpgdXJsbGliLnJlcXVlc3RgIHVzZXMgaXQgdG8gaGFuZGxlIFVSTHMgdGhhdCB1c2UgSFRUUCBhbmQgSFRUUFMuCiAKKy4uIHNlZWFsc286OgorCisgICAgVGhlIGBSZXF1ZXN0cyBwYWNrYWdlIDxodHRwOi8vcmVxdWVzdHMucmVhZHRoZWRvY3Mub3JnLz5gXworICAgIGlzIHJlY29tbWVuZGVkIGZvciBhIGhpZ2hlci1sZXZlbCBodHRwIGNsaWVudCBpbnRlcmZhY2UuCisKIC4uIG5vdGU6OgogCiAgICBIVFRQUyBzdXBwb3J0IGlzIG9ubHkgYXZhaWxhYmxlIGlmIFB5dGhvbiB3YXMgY29tcGlsZWQgd2l0aCBTU0wgc3VwcG9ydApAQCAtMjcsNyArMzIsNyBAQAogVGhlIG1vZHVsZSBwcm92aWRlcyB0aGUgZm9sbG93aW5nIGNsYXNzZXM6CiAKIAotLi4gY2xhc3M6OiBIVFRQQ29ubmVjdGlvbihob3N0LCBwb3J0PU5vbmVbLCBzdHJpY3RdWywgdGltZW91dF0sIFwKKy4uIGNsYXNzOjogSFRUUENvbm5lY3Rpb24oaG9zdCwgcG9ydD1Ob25lWywgdGltZW91dF0sIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlX2FkZHJlc3M9Tm9uZSkKIAogICAgQW4gOmNsYXNzOmBIVFRQQ29ubmVjdGlvbmAgaW5zdGFuY2UgcmVwcmVzZW50cyBvbmUgdHJhbnNhY3Rpb24gd2l0aCBhbiBIVFRQCkBAIC00Myw0NCArNDgsMzcgQEAKICAgIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIGNhbGxzIGFsbCBjcmVhdGUgaW5zdGFuY2VzIHRoYXQgY29ubmVjdCB0byB0aGUgc2VydmVyCiAgICBhdCB0aGUgc2FtZSBob3N0IGFuZCBwb3J0OjoKIAotICAgICAgPj4+IGgxID0gaHR0cC5jbGllbnQuSFRUUENvbm5lY3Rpb24oJ3d3dy5jd2kubmwnKQotICAgICAgPj4+IGgyID0gaHR0cC5jbGllbnQuSFRUUENvbm5lY3Rpb24oJ3d3dy5jd2kubmw6ODAnKQotICAgICAgPj4+IGgzID0gaHR0cC5jbGllbnQuSFRUUENvbm5lY3Rpb24oJ3d3dy5jd2kubmwnLCA4MCkKLSAgICAgID4+PiBoMyA9IGh0dHAuY2xpZW50LkhUVFBDb25uZWN0aW9uKCd3d3cuY3dpLm5sJywgODAsIHRpbWVvdXQ9MTApCisgICAgICA+Pj4gaDEgPSBodHRwLmNsaWVudC5IVFRQQ29ubmVjdGlvbignd3d3LnB5dGhvbi5vcmcnKQorICAgICAgPj4+IGgyID0gaHR0cC5jbGllbnQuSFRUUENvbm5lY3Rpb24oJ3d3dy5weXRob24ub3JnOjgwJykKKyAgICAgID4+PiBoMyA9IGh0dHAuY2xpZW50LkhUVFBDb25uZWN0aW9uKCd3d3cucHl0aG9uLm9yZycsIDgwKQorICAgICAgPj4+IGg0ID0gaHR0cC5jbGllbnQuSFRUUENvbm5lY3Rpb24oJ3d3dy5weXRob24ub3JnJywgODAsIHRpbWVvdXQ9MTApCiAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCiAgICAgICAqc291cmNlX2FkZHJlc3MqIHdhcyBhZGRlZC4KIAotICAgLi4gZGVwcmVjYXRlZC1yZW1vdmVkOjogMy4yIDMuNAotICAgICAgVGhlICpzdHJpY3QqIHBhcmFtZXRlciBpcyBkZXByZWNhdGVkLiAgSFRUUCAwLjktc3R5bGUgIlNpbXBsZSBSZXNwb25zZXMiCi0gICAgICBhcmUgbm90IHN1cHBvcnRlZCBhbnltb3JlLgorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSAgKnN0cmljdCogcGFyYW1ldGVyIHdhcyByZW1vdmVkLiBIVFRQIDAuOS1zdHlsZSAiU2ltcGxlIFJlc3BvbnNlcyIgYXJlCisgICAgICBub3QgbG9uZ2VyIHN1cHBvcnRlZC4KIAogCiAuLiBjbGFzczo6IEhUVFBTQ29ubmVjdGlvbihob3N0LCBwb3J0PU5vbmUsIGtleV9maWxlPU5vbmUsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRfZmlsZT1Ob25lWywgc3RyaWN0XVssIHRpbWVvdXRdLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0X2ZpbGU9Tm9uZVssIHRpbWVvdXRdLCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VfYWRkcmVzcz1Ob25lLCAqLCBjb250ZXh0PU5vbmUsIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrX2hvc3RuYW1lPU5vbmUpCiAKICAgIEEgc3ViY2xhc3Mgb2YgOmNsYXNzOmBIVFRQQ29ubmVjdGlvbmAgdGhhdCB1c2VzIFNTTCBmb3IgY29tbXVuaWNhdGlvbiB3aXRoCiAgICBzZWN1cmUgc2VydmVycy4gIERlZmF1bHQgcG9ydCBpcyBgYDQ0M2BgLiAgSWYgKmNvbnRleHQqIGlzIHNwZWNpZmllZCwgaXQKICAgIG11c3QgYmUgYSA6Y2xhc3M6YHNzbC5TU0xDb250ZXh0YCBpbnN0YW5jZSBkZXNjcmliaW5nIHRoZSB2YXJpb3VzIFNTTAotICAgb3B0aW9ucy4gIElmICpjb250ZXh0KiBpcyBzcGVjaWZpZWQgYW5kIGhhcyBhIDphdHRyOmB+c3NsLlNTTENvbnRleHQudmVyaWZ5X21vZGVgCi0gICBvZiBlaXRoZXIgOmRhdGE6YH5zc2wuQ0VSVF9PUFRJT05BTGAgb3IgOmRhdGE6YH5zc2wuQ0VSVF9SRVFVSVJFRGAsIHRoZW4KLSAgIGJ5IGRlZmF1bHQgKmhvc3QqIGlzIG1hdGNoZWQgYWdhaW5zdCB0aGUgaG9zdCBuYW1lKHMpIGFsbG93ZWQgYnkgdGhlCi0gICBzZXJ2ZXIncyBjZXJ0aWZpY2F0ZS4gIElmIHlvdSB3YW50IHRvIGNoYW5nZSB0aGF0IGJlaGF2aW91ciwgeW91IGNhbgotICAgZXhwbGljaXRseSBzZXQgKmNoZWNrX2hvc3RuYW1lKiB0byBGYWxzZS4KKyAgIG9wdGlvbnMuCiAKICAgICprZXlfZmlsZSogYW5kICpjZXJ0X2ZpbGUqIGFyZSBkZXByZWNhdGVkLCBwbGVhc2UgdXNlCi0gICA6bWV0aDpgc3NsLlNTTENvbnRleHQubG9hZF9jZXJ0X2NoYWluYCBpbnN0ZWFkLgorICAgOm1ldGg6YHNzbC5TU0xDb250ZXh0LmxvYWRfY2VydF9jaGFpbmAgaW5zdGVhZCwgb3IgbGV0CisgICA6ZnVuYzpgc3NsLmNyZWF0ZV9kZWZhdWx0X2NvbnRleHRgIHNlbGVjdCB0aGUgc3lzdGVtJ3MgdHJ1c3RlZCBDQQorICAgY2VydGlmaWNhdGVzIGZvciB5b3UuICBUaGUgKmNoZWNrX2hvc3RuYW1lKiBwYXJhbWV0ZXIgaXMgYWxzbyBkZXByZWNhdGVkOyB0aGUKKyAgIDphdHRyOmBzc2wuU1NMQ29udGV4dC5jaGVja19ob3N0bmFtZWAgYXR0cmlidXRlIG9mICpjb250ZXh0KiBzaG91bGQgYmUgdXNlZAorICAgaW5zdGVhZC4KIAotICAgSWYgeW91IGFjY2VzcyBhcmJpdHJhcnkgaG9zdHMgb24gdGhlIEludGVybmV0LCBpdCBpcyByZWNvbW1lbmRlZCB0bwotICAgcmVxdWlyZSBjZXJ0aWZpY2F0ZSBjaGVja2luZyBhbmQgZmVlZCB0aGUgKmNvbnRleHQqIHdpdGggYSBzZXQgb2YKLSAgIHRydXN0ZWQgQ0EgY2VydGlmaWNhdGVzOjoKLQotICAgICAgY29udGV4dCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MSkKLSAgICAgIGNvbnRleHQudmVyaWZ5X21vZGUgPSBzc2wuQ0VSVF9SRVFVSVJFRAotICAgICAgY29udGV4dC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoJy9ldGMvcGtpL3Rscy9jZXJ0cy9jYS1idW5kbGUuY3J0JykKLSAgICAgIGggPSBjbGllbnQuSFRUUFNDb25uZWN0aW9uKCdzdm4ucHl0aG9uLm9yZycsIDQ0MywgY29udGV4dD1jb250ZXh0KQorICAgUGxlYXNlIHJlYWQgOnJlZjpgc3NsLXNlY3VyaXR5YCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBiZXN0IHByYWN0aWNlcy4KIAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKICAgICAgICpzb3VyY2VfYWRkcmVzcyosICpjb250ZXh0KiBhbmQgKmNoZWNrX2hvc3RuYW1lKiB3ZXJlIGFkZGVkLgpAQCAtODksMTkgKzg3LDI1IEBACiAgICAgICBUaGlzIGNsYXNzIG5vdyBzdXBwb3J0cyBIVFRQUyB2aXJ0dWFsIGhvc3RzIGlmIHBvc3NpYmxlICh0aGF0IGlzLAogICAgICAgaWYgOmRhdGE6YHNzbC5IQVNfU05JYCBpcyB0cnVlKS4KIAotICAgLi4gZGVwcmVjYXRlZC1yZW1vdmVkOjogMy4yIDMuNAotICAgICAgVGhlICpzdHJpY3QqIHBhcmFtZXRlciBpcyBkZXByZWNhdGVkLiAgSFRUUCAwLjktc3R5bGUgIlNpbXBsZSBSZXNwb25zZXMiCi0gICAgICBhcmUgbm90IHN1cHBvcnRlZCBhbnltb3JlLgorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSAqc3RyaWN0KiBwYXJhbWV0ZXIgd2FzIHJlbW92ZWQuIEhUVFAgMC45LXN0eWxlICJTaW1wbGUgUmVzcG9uc2VzIiBhcmUKKyAgICAgIG5vIGxvbmdlciBzdXBwb3J0ZWQuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40LjMKKyAgICAgIFRoaXMgY2xhc3Mgbm93IHBlcmZvcm1zIGFsbCB0aGUgbmVjZXNzYXJ5IGNlcnRpZmljYXRlIGFuZCBob3N0bmFtZSBjaGVja3MKKyAgICAgIGJ5IGRlZmF1bHQuIFRvIHJldmVydCB0byB0aGUgcHJldmlvdXMsIHVudmVyaWZpZWQsIGJlaGF2aW9yCisgICAgICA6ZnVuYzpgc3NsLl9jcmVhdGVfdW52ZXJpZmllZF9jb250ZXh0YCBjYW4gYmUgcGFzc2VkIHRvIHRoZSAqY29udGV4dCoKKyAgICAgIHBhcmFtZXRlci4KIAogCi0uLiBjbGFzczo6IEhUVFBSZXNwb25zZShzb2NrLCBkZWJ1Z2xldmVsPTBbLCBzdHJpY3RdLCBtZXRob2Q9Tm9uZSwgdXJsPU5vbmUpCisuLiBjbGFzczo6IEhUVFBSZXNwb25zZShzb2NrLCBkZWJ1Z2xldmVsPTAsIG1ldGhvZD1Ob25lLCB1cmw9Tm9uZSkKIAogICAgQ2xhc3Mgd2hvc2UgaW5zdGFuY2VzIGFyZSByZXR1cm5lZCB1cG9uIHN1Y2Nlc3NmdWwgY29ubmVjdGlvbi4gIE5vdAogICAgaW5zdGFudGlhdGVkIGRpcmVjdGx5IGJ5IHVzZXIuCiAKLSAgIC4uIGRlcHJlY2F0ZWQtcmVtb3ZlZDo6IDMuMiAzLjQKLSAgICAgIFRoZSAqc3RyaWN0KiBwYXJhbWV0ZXIgaXMgZGVwcmVjYXRlZC4gIEhUVFAgMC45LXN0eWxlICJTaW1wbGUgUmVzcG9uc2VzIgotICAgICAgYXJlIG5vdCBzdXBwb3J0ZWQgYW55bW9yZS4KKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgKnN0cmljdCogcGFyYW1ldGVyIHdhcyByZW1vdmVkLiBIVFRQIDAuOSBzdHlsZSAiU2ltcGxlIFJlc3BvbnNlcyIgYXJlCisgICAgICBubyBsb25nZXIgc3VwcG9ydGVkLgogCiAKIFRoZSBmb2xsb3dpbmcgZXhjZXB0aW9ucyBhcmUgcmFpc2VkIGFzIGFwcHJvcHJpYXRlOgpAQCAtMTcwLDYgKzE3NCwxMiBAQAogICAgc3RhdHVzIGNvZGUgdGhhdCB3ZSBkb24ndCB1bmRlcnN0YW5kLgogCiAKKy4uIGV4Y2VwdGlvbjo6IExpbmVUb29Mb25nCisKKyAgIEEgc3ViY2xhc3Mgb2YgOmV4YzpgSFRUUEV4Y2VwdGlvbmAuICBSYWlzZWQgaWYgYW4gZXhjZXNzaXZlbHkgbG9uZyBsaW5lCisgICBpcyByZWNlaXZlZCBpbiB0aGUgSFRUUCBwcm90b2NvbCBmcm9tIHRoZSBzZXJ2ZXIuCisKKwogVGhlIGNvbnN0YW50cyBkZWZpbmVkIGluIHRoaXMgbW9kdWxlIGFyZToKIAogLi4gZGF0YTo6IEhUVFBfUE9SVApAQCAtNDA4LDIzICs0MTgsMzMgQEAKIC4uIG1ldGhvZDo6IEhUVFBDb25uZWN0aW9uLnJlcXVlc3QobWV0aG9kLCB1cmwsIGJvZHk9Tm9uZSwgaGVhZGVycz17fSkKIAogICAgVGhpcyB3aWxsIHNlbmQgYSByZXF1ZXN0IHRvIHRoZSBzZXJ2ZXIgdXNpbmcgdGhlIEhUVFAgcmVxdWVzdAotICAgbWV0aG9kICptZXRob2QqIGFuZCB0aGUgc2VsZWN0b3IgKnVybCouICBJZiB0aGUgKmJvZHkqIGFyZ3VtZW50IGlzCi0gICBwcmVzZW50LCBpdCBzaG91bGQgYmUgc3RyaW5nIG9yIGJ5dGVzIG9iamVjdCBvZiBkYXRhIHRvIHNlbmQgYWZ0ZXIKLSAgIHRoZSBoZWFkZXJzIGFyZSBmaW5pc2hlZC4gIFN0cmluZ3MgYXJlIGVuY29kZWQgYXMgSVNPLTg4NTktMSwgdGhlCi0gICBkZWZhdWx0IGNoYXJzZXQgZm9yIEhUVFAuICBUbyB1c2Ugb3RoZXIgZW5jb2RpbmdzLCBwYXNzIGEgYnl0ZXMKLSAgIG9iamVjdC4gIFRoZSBDb250ZW50LUxlbmd0aCBoZWFkZXIgaXMgc2V0IHRvIHRoZSBsZW5ndGggb2YgdGhlCi0gICBzdHJpbmcuCisgICBtZXRob2QgKm1ldGhvZCogYW5kIHRoZSBzZWxlY3RvciAqdXJsKi4KIAotICAgVGhlICpib2R5KiBtYXkgYWxzbyBiZSBhbiBvcGVuIDp0ZXJtOmBmaWxlIG9iamVjdGAsIGluIHdoaWNoIGNhc2UgdGhlCi0gICBjb250ZW50cyBvZiB0aGUgZmlsZSBpcyBzZW50OyB0aGlzIGZpbGUgb2JqZWN0IHNob3VsZCBzdXBwb3J0IGBgZmlsZW5vKClgYAotICAgYW5kIGBgcmVhZCgpYGAgbWV0aG9kcy4gVGhlIGhlYWRlciBDb250ZW50LUxlbmd0aCBpcyBhdXRvbWF0aWNhbGx5IHNldCB0bwotICAgdGhlIGxlbmd0aCBvZiB0aGUgZmlsZSBhcyByZXBvcnRlZCBieSBzdGF0LiBUaGUgKmJvZHkqIGFyZ3VtZW50IG1heSBhbHNvIGJlCi0gICBhbiBpdGVyYWJsZSBhbmQgQ29udGVudC1MZW5ndGggaGVhZGVyIHNob3VsZCBiZSBleHBsaWNpdGx5IHByb3ZpZGVkIHdoZW4gdGhlCi0gICBib2R5IGlzIGFuIGl0ZXJhYmxlLgorICAgSWYgKmJvZHkqIGlzIHNwZWNpZmllZCwgdGhlIHNwZWNpZmllZCBkYXRhIGlzIHNlbnQgYWZ0ZXIgdGhlIGhlYWRlcnMgYXJlCisgICBmaW5pc2hlZC4gIEl0IG1heSBiZSBhIHN0cmluZywgYSA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgLCBhbiBvcGVuCisgICA6dGVybTpgZmlsZSBvYmplY3RgLCBvciBhbiBpdGVyYWJsZSBvZiA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgXHMuICBJZgorICAgKmJvZHkqIGlzIGEgc3RyaW5nLCBpdCBpcyBlbmNvZGVkIGFzIElTTy04ODUxLTEsIHRoZSBkZWZhdWx0IGZvciBIVFRQLiAgSWYKKyAgIGl0IGlzIGEgYnl0ZXMtbGlrZSBvYmplY3QgdGhlIGJ5dGVzIGFyZSBzZW50IGFzIGlzLiAgSWYgaXQgaXMgYSA6dGVybTpgZmlsZQorICAgb2JqZWN0YCwgdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlIGlzIHNlbnQ7IHRoaXMgZmlsZSBvYmplY3Qgc2hvdWxkIHN1cHBvcnQKKyAgIGF0IGxlYXN0IHRoZSBgYHJlYWQoKWBgIG1ldGhvZC4gIElmIHRoZSBmaWxlIG9iamVjdCBoYXMgYSBgYG1vZGVgYAorICAgYXR0cmlidXRlLCB0aGUgZGF0YSByZXR1cm5lZCBieSB0aGUgYGByZWFkKClgYCBtZXRob2Qgd2lsbCBiZSBlbmNvZGVkIGFzCisgICBJU08tODg1MS0xIHVubGVzcyB0aGUgYGBtb2RlYGAgYXR0cmlidXRlIGNvbnRhaW5zIHRoZSBzdWJzdHJpbmcgYGBiYGAsCisgICBvdGhlcndpc2UgdGhlIGRhdGEgcmV0dXJuZWQgYnkgYGByZWFkKClgYCBpcyBzZW50IGFzIGlzLiAgSWYgKmJvZHkqIGlzIGFuCisgICBpdGVyYWJsZSwgdGhlIGVsZW1lbnRzIG9mIHRoZSBpdGVyYWJsZSBhcmUgc2VudCBhcyBpcyB1bnRpbCB0aGUgaXRlcmFibGUgaXMKKyAgIGV4aGF1c3RlZC4KIAogICAgVGhlICpoZWFkZXJzKiBhcmd1bWVudCBzaG91bGQgYmUgYSBtYXBwaW5nIG9mIGV4dHJhIEhUVFAKICAgIGhlYWRlcnMgdG8gc2VuZCB3aXRoIHRoZSByZXF1ZXN0LgogCisgICBJZiAqaGVhZGVycyogZG9lcyBub3QgY29udGFpbiBhIENvbnRlbnQtTGVuZ3RoIGl0ZW0sIG9uZSBpcyBhZGRlZAorICAgYXV0b21hdGljYWxseSBpZiBwb3NzaWJsZS4gIElmICpib2R5KiBpcyBgYE5vbmVgYCwgdGhlIENvbnRlbnQtTGVuZ3RoIGhlYWRlcgorICAgaXMgc2V0IHRvIGBgMGBgIGZvciBtZXRob2RzIHRoYXQgZXhwZWN0IGEgYm9keSAoYGBQVVRgYCwgYGBQT1NUYGAsIGFuZAorICAgYGBQQVRDSGBgKS4gIElmICpib2R5KiBpcyBhIHN0cmluZyBvciBieXRlcyBvYmplY3QsIHRoZSBDb250ZW50LUxlbmd0aAorICAgaGVhZGVyIGlzIHNldCB0byBpdHMgbGVuZ3RoLiAgSWYgKmJvZHkqIGlzIGEgOnRlcm06YGZpbGUgb2JqZWN0YCBhbmQgaXQKKyAgIHdvcmtzIHRvIGNhbGwgOmZ1bmM6YH5vcy5mc3RhdGAgb24gdGhlIHJlc3VsdCBvZiBpdHMgYGBmaWxlbm8oKWBgIG1ldGhvZCwKKyAgIHRoZW4gdGhlIENvbnRlbnQtTGVuZ3RoIGhlYWRlciBpcyBzZXQgdG8gdGhlIGBgc3Rfc2l6ZWBgIHJlcG9ydGVkIGJ5IHRoZQorICAgYGBmc3RhdGBgIGNhbGwuICBPdGhlcndpc2Ugbm8gQ29udGVudC1MZW5ndGggaGVhZGVyIGlzIGFkZGVkLgorCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKICAgICAgICpib2R5KiBjYW4gbm93IGJlIGFuIGl0ZXJhYmxlLgogCkBAIC01OTUsMTggKzYxNSwxOCBAQAogSGVyZSBpcyBhbiBleGFtcGxlIHNlc3Npb24gdGhhdCB1c2VzIHRoZSBgYEdFVGBgIG1ldGhvZDo6CiAKICAgID4+PiBpbXBvcnQgaHR0cC5jbGllbnQKLSAgID4+PiBjb25uID0gaHR0cC5jbGllbnQuSFRUUENvbm5lY3Rpb24oInd3dy5weXRob24ub3JnIikKLSAgID4+PiBjb25uLnJlcXVlc3QoIkdFVCIsICIvaW5kZXguaHRtbCIpCisgICA+Pj4gY29ubiA9IGh0dHAuY2xpZW50LkhUVFBTQ29ubmVjdGlvbigid3d3LnB5dGhvbi5vcmciKQorICAgPj4+IGNvbm4ucmVxdWVzdCgiR0VUIiwgIi8iKQogICAgPj4+IHIxID0gY29ubi5nZXRyZXNwb25zZSgpCiAgICA+Pj4gcHJpbnQocjEuc3RhdHVzLCByMS5yZWFzb24pCiAgICAyMDAgT0sKICAgID4+PiBkYXRhMSA9IHIxLnJlYWQoKSAgIyBUaGlzIHdpbGwgcmV0dXJuIGVudGlyZSBjb250ZW50LgogICAgPj4+ICMgVGhlIGZvbGxvd2luZyBleGFtcGxlIGRlbW9uc3RyYXRlcyByZWFkaW5nIGRhdGEgaW4gY2h1bmtzLgotICAgPj4+IGNvbm4ucmVxdWVzdCgiR0VUIiwgIi9pbmRleC5odG1sIikKKyAgID4+PiBjb25uLnJlcXVlc3QoIkdFVCIsICIvIikKICAgID4+PiByMSA9IGNvbm4uZ2V0cmVzcG9uc2UoKQogICAgPj4+IHdoaWxlIG5vdCByMS5jbG9zZWQ6CiAgICAuLi4gICAgIHByaW50KHIxLnJlYWQoMjAwKSkgIyAyMDAgYnl0ZXMKLSAgIGInPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIuLi4KKyAgIGInPCFkb2N0eXBlIGh0bWw+XG48IS0tW2lmIi4uLgogICAgLi4uCiAgICA+Pj4gIyBFeGFtcGxlIG9mIGFuIGludmFsaWQgcmVxdWVzdAogICAgPj4+IGNvbm4ucmVxdWVzdCgiR0VUIiwgIi9wYXJyb3Quc3BhbSIpCkBAIC02MjAsOCArNjQwLDggQEAKIGBgSEVBRGBgIG1ldGhvZCBuZXZlciByZXR1cm5zIGFueSBkYXRhLiA6OgogCiAgICA+Pj4gaW1wb3J0IGh0dHAuY2xpZW50Ci0gICA+Pj4gY29ubiA9IGh0dHAuY2xpZW50LkhUVFBDb25uZWN0aW9uKCJ3d3cucHl0aG9uLm9yZyIpCi0gICA+Pj4gY29ubi5yZXF1ZXN0KCJIRUFEIiwiL2luZGV4Lmh0bWwiKQorICAgPj4+IGNvbm4gPSBodHRwLmNsaWVudC5IVFRQU0Nvbm5lY3Rpb24oInd3dy5weXRob24ub3JnIikKKyAgID4+PiBjb25uLnJlcXVlc3QoIkhFQUQiLCAiLyIpCiAgICA+Pj4gcmVzID0gY29ubi5nZXRyZXNwb25zZSgpCiAgICA+Pj4gcHJpbnQocmVzLnN0YXR1cywgcmVzLnJlYXNvbikKICAgIDIwMCBPSwpAQCAtNjU2LDcgKzY3Niw3IEBACiAKICAgICA+Pj4gIyBUaGlzIGNyZWF0ZXMgYW4gSFRUUCBtZXNzYWdlCiAgICAgPj4+ICMgd2l0aCB0aGUgY29udGVudCBvZiBCT0RZIGFzIHRoZSBlbmNsb3NlZCByZXByZXNlbnRhdGlvbgotICAgID4+PiAjIGZvciB0aGUgcmVzb3VyY2UgaHR0cDovL2xvY2FsaG9zdDo4MDgwL2Zvb2JhcgorICAgID4+PiAjIGZvciB0aGUgcmVzb3VyY2UgaHR0cDovL2xvY2FsaG9zdDo4MDgwL2ZpbGUKICAgICAuLi4KICAgICA+Pj4gaW1wb3J0IGh0dHAuY2xpZW50CiAgICAgPj4+IEJPRFkgPSAiKioqZmlsZWNvbnRlbnRzKioqIgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvaHR0cC5jb29raWVqYXIucnN0IGIvRG9jL2xpYnJhcnkvaHR0cC5jb29raWVqYXIucnN0CmluZGV4IDJmYWU0N2MuLmNhNjhhYWMgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2h0dHAuY29va2llamFyLnJzdAorKysgYi9Eb2MvbGlicmFyeS9odHRwLmNvb2tpZWphci5yc3QKQEAgLTExNSw3ICsxMTUsNyBAQAogICAgICAgOm1vZDpgaHR0cC5jb29raWVqYXJgIGFuZCA6bW9kOmBodHRwLmNvb2tpZXNgIG1vZHVsZXMgZG8gbm90IGRlcGVuZCBvbiBlYWNoCiAgICAgICBvdGhlci4KIAotICAgaHR0cDovL3dwLm5ldHNjYXBlLmNvbS9uZXdzcmVmL3N0ZC9jb29raWVfc3BlYy5odG1sCisgICBodHRwOi8vY3VybC5oYXh4LnNlL3JmYy9jb29raWVfc3BlYy5odG1sCiAgICAgICBUaGUgc3BlY2lmaWNhdGlvbiBvZiB0aGUgb3JpZ2luYWwgTmV0c2NhcGUgY29va2llIHByb3RvY29sLiAgVGhvdWdoIHRoaXMgaXMKICAgICAgIHN0aWxsIHRoZSBkb21pbmFudCBwcm90b2NvbCwgdGhlICdOZXRzY2FwZSBjb29raWUgcHJvdG9jb2wnIGltcGxlbWVudGVkIGJ5IGFsbAogICAgICAgdGhlIG1ham9yIGJyb3dzZXJzIChhbmQgOm1vZDpgaHR0cC5jb29raWVqYXJgKSBvbmx5IGJlYXJzIGEgcGFzc2luZyByZXNlbWJsYW5jZSB0bwpAQCAtMTc2LDcgKzE3Niw3IEBACiAKICAgIFRoZSAqcmVzcG9uc2UqIG9iamVjdCAodXN1YWxseSB0aGUgcmVzdWx0IG9mIGEgY2FsbCB0bwogICAgOm1ldGg6YHVybGxpYi5yZXF1ZXN0LnVybG9wZW5gLCBvciBzaW1pbGFyKSBzaG91bGQgc3VwcG9ydCBhbiA6bWV0aDpgaW5mb2AKLSAgIG1ldGhvZCwgd2hpY2ggcmV0dXJucyBhIDpjbGFzczpgZW1haWwubWVzc2FnZS5NZXNzYWdlYCBpbnN0YW5jZS4KKyAgIG1ldGhvZCwgd2hpY2ggcmV0dXJucyBhbiA6Y2xhc3M6YGVtYWlsLm1lc3NhZ2UuTWVzc2FnZWAgaW5zdGFuY2UuCiAKICAgIFRoZSAqcmVxdWVzdCogb2JqZWN0ICh1c3VhbGx5IGEgOmNsYXNzOmB1cmxsaWIucmVxdWVzdC5SZXF1ZXN0YCBpbnN0YW5jZSkKICAgIG11c3Qgc3VwcG9ydCB0aGUgbWV0aG9kcyA6bWV0aDpgZ2V0X2Z1bGxfdXJsYCwgOm1ldGg6YGdldF9ob3N0YCwKQEAgLTU0MCw3ICs1NDAsNyBAQAogCiAuLiBhdHRyaWJ1dGU6OiBEZWZhdWx0Q29va2llUG9saWN5LnN0cmljdF9uc191bnZlcmlmaWFibGUKIAotICAgYXBwbHkgUkZDIDI5NjUgcnVsZXMgb24gdW52ZXJpZmlhYmxlIHRyYW5zYWN0aW9ucyBldmVuIHRvIE5ldHNjYXBlIGNvb2tpZXMKKyAgIEFwcGx5IFJGQyAyOTY1IHJ1bGVzIG9uIHVudmVyaWZpYWJsZSB0cmFuc2FjdGlvbnMgZXZlbiB0byBOZXRzY2FwZSBjb29raWVzLgogCiAKIC4uIGF0dHJpYnV0ZTo6IERlZmF1bHRDb29raWVQb2xpY3kuc3RyaWN0X25zX2RvbWFpbgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvaHR0cC5jb29raWVzLnJzdCBiL0RvYy9saWJyYXJ5L2h0dHAuY29va2llcy5yc3QKaW5kZXggNjQ2ZjJlOC4uZDBjMWU1NCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvaHR0cC5jb29raWVzLnJzdAorKysgYi9Eb2MvbGlicmFyeS9odHRwLmNvb2tpZXMucnN0CkBAIC04NCw3ICs4NCw3IEBACiAKICAgIFJldHVybiBhbiBlbmNvZGVkIHZhbHVlLiAqdmFsKiBjYW4gYmUgYW55IHR5cGUsIGJ1dCByZXR1cm4gdmFsdWUgbXVzdCBiZSBhCiAgICBzdHJpbmcuIFRoaXMgbWV0aG9kIGRvZXMgbm90aGluZyBpbiA6Y2xhc3M6YEJhc2VDb29raWVgIC0tLSBpdCBleGlzdHMgc28gaXQgY2FuCi0gICBiZSBvdmVycmlkZGVuCisgICBiZSBvdmVycmlkZGVuLgogCiAgICBJbiBnZW5lcmFsLCBpdCBzaG91bGQgYmUgdGhlIGNhc2UgdGhhdCA6bWV0aDpgdmFsdWVfZW5jb2RlYCBhbmQKICAgIDptZXRoOmB2YWx1ZV9kZWNvZGVgIGFyZSBpbnZlcnNlcyBvbiB0aGUgcmFuZ2Ugb2YgKnZhbHVlX2RlY29kZSouCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9odHRwLnNlcnZlci5yc3QgYi9Eb2MvbGlicmFyeS9odHRwLnNlcnZlci5yc3QKaW5kZXggNWFlYjcxOS4uMGJkZTM1YiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvaHR0cC5zZXJ2ZXIucnN0CisrKyBiL0RvYy9saWJyYXJ5L2h0dHAuc2VydmVyLnJzdApAQCAtNjQsNiArNjQsMTggQEAKIAogICAgICAgQ29udGFpbnMgdGhlIHNlcnZlciBpbnN0YW5jZS4KIAorICAgLi4gYXR0cmlidXRlOjogY2xvc2VfY29ubmVjdGlvbgorCisgICAgICBCb29sZWFuIHRoYXQgc2hvdWxkIGJlIHNldCBiZWZvcmUgOm1ldGg6YGhhbmRsZV9vbmVfcmVxdWVzdGAgcmV0dXJucywKKyAgICAgIGluZGljYXRpbmcgaWYgYW5vdGhlciByZXF1ZXN0IG1heSBiZSBleHBlY3RlZCwgb3IgaWYgdGhlIGNvbm5lY3Rpb24gc2hvdWxkCisgICAgICBiZSBzaHV0IGRvd24uCisKKyAgIC4uIGF0dHJpYnV0ZTo6IHJlcXVlc3RsaW5lCisKKyAgICAgIENvbnRhaW5zIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIEhUVFAgcmVxdWVzdCBsaW5lLiBUaGUKKyAgICAgIHRlcm1pbmF0aW5nIENSTEYgaXMgc3RyaXBwZWQuIFRoaXMgYXR0cmlidXRlIHNob3VsZCBiZSBzZXQgYnkKKyAgICAgIDptZXRoOmBoYW5kbGVfb25lX3JlcXVlc3RgLiBJZiBubyB2YWxpZCByZXF1ZXN0IGxpbmUgd2FzIHByb2Nlc3NlZCwgaXQKKyAgICAgIHNob3VsZCBiZSBzZXQgdG8gdGhlIGVtcHR5IHN0cmluZy4KIAogICAgLi4gYXR0cmlidXRlOjogY29tbWFuZAogCkBAIC04MSw3ICs5MywxMCBAQAogCiAgICAgICBIb2xkcyBhbiBpbnN0YW5jZSBvZiB0aGUgY2xhc3Mgc3BlY2lmaWVkIGJ5IHRoZSA6YXR0cjpgTWVzc2FnZUNsYXNzYCBjbGFzcwogICAgICAgdmFyaWFibGUuIFRoaXMgaW5zdGFuY2UgcGFyc2VzIGFuZCBtYW5hZ2VzIHRoZSBoZWFkZXJzIGluIHRoZSBIVFRQCi0gICAgICByZXF1ZXN0LgorICAgICAgcmVxdWVzdC4gVGhlIDpmdW5jOmB+aHR0cC5jbGllbnQucGFyc2VfaGVhZGVyc2AgZnVuY3Rpb24gZnJvbQorICAgICAgOm1vZDpgaHR0cC5jbGllbnRgIGlzIHVzZWQgdG8gcGFyc2UgdGhlIGhlYWRlcnMgYW5kIGl0IHJlcXVpcmVzIHRoYXQgdGhlCisgICAgICBIVFRQIHJlcXVlc3QgcHJvdmlkZSBhIHZhbGlkIDpyZmM6YDI4MjJgIHN0eWxlIGhlYWRlci4KKwogCiAgICAuLiBhdHRyaWJ1dGU6OiByZmlsZQogCkBAIC0xMTYsNyArMTMxLDcgQEAKICAgICAgIEhUVFAgZXJyb3IgY29kZSB2YWx1ZS4gKm1lc3NhZ2UqIHNob3VsZCBiZSBhIHN0cmluZyBjb250YWluaW5nIGEKICAgICAgIChkZXRhaWxlZCkgZXJyb3IgbWVzc2FnZSBvZiB3aGF0IG9jY3VycmVkLCBhbmQgKmV4cGxhaW4qIHNob3VsZCBiZSBhbgogICAgICAgZXhwbGFuYXRpb24gb2YgdGhlIGVycm9yIGNvZGUgbnVtYmVyLiBEZWZhdWx0ICptZXNzYWdlKiBhbmQgKmV4cGxhaW4qCi0gICAgICB2YWx1ZXMgY2FuIGZvdW5kIGluIHRoZSAqcmVzcG9uc2VzKiBjbGFzcyB2YXJpYWJsZS4KKyAgICAgIHZhbHVlcyBjYW4gZm91bmQgaW4gdGhlIDphdHRyOmByZXNwb25zZXNgIGNsYXNzIHZhcmlhYmxlLgogCiAgICAuLiBhdHRyaWJ1dGU6OiBlcnJvcl9jb250ZW50X3R5cGUKIApAQCAtMTYxLDcgKzE3Niw3IEBACiAKICAgIC4uIG1ldGhvZDo6IGhhbmRsZV9leHBlY3RfMTAwKCkKIAotICAgICAgV2hlbiBhIEhUVFAvMS4xIGNvbXBsaWFudCBzZXJ2ZXIgcmVjZWl2ZXMgYSBgYEV4cGVjdDogMTAwLWNvbnRpbnVlYGAKKyAgICAgIFdoZW4gYSBIVFRQLzEuMSBjb21wbGlhbnQgc2VydmVyIHJlY2VpdmVzIGFuIGBgRXhwZWN0OiAxMDAtY29udGludWVgYAogICAgICAgcmVxdWVzdCBoZWFkZXIgaXQgcmVzcG9uZHMgYmFjayB3aXRoIGEgYGAxMDAgQ29udGludWVgYCBmb2xsb3dlZCBieSBgYDIwMAogICAgICAgT0tgYCBoZWFkZXJzLgogICAgICAgVGhpcyBtZXRob2QgY2FuIGJlIG92ZXJyaWRkZW4gdG8gcmFpc2UgYW4gZXJyb3IgaWYgdGhlIHNlcnZlciBkb2VzIG5vdApAQCAtMTcwLDEyICsxODUsMjIgQEAKIAogICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCiAKLSAgIC4uIG1ldGhvZDo6IHNlbmRfZXJyb3IoY29kZSwgbWVzc2FnZT1Ob25lKQorICAgLi4gbWV0aG9kOjogc2VuZF9lcnJvcihjb2RlLCBtZXNzYWdlPU5vbmUsIGV4cGxhaW49Tm9uZSkKIAogICAgICAgU2VuZHMgYW5kIGxvZ3MgYSBjb21wbGV0ZSBlcnJvciByZXBseSB0byB0aGUgY2xpZW50LiBUaGUgbnVtZXJpYyAqY29kZSoKLSAgICAgIHNwZWNpZmllcyB0aGUgSFRUUCBlcnJvciBjb2RlLCB3aXRoICptZXNzYWdlKiBhcyBvcHRpb25hbCwgbW9yZSBzcGVjaWZpYyB0ZXh0LiBBCi0gICAgICBjb21wbGV0ZSBzZXQgb2YgaGVhZGVycyBpcyBzZW50LCBmb2xsb3dlZCBieSB0ZXh0IGNvbXBvc2VkIHVzaW5nIHRoZQotICAgICAgOmF0dHI6YGVycm9yX21lc3NhZ2VfZm9ybWF0YCBjbGFzcyB2YXJpYWJsZS4KKyAgICAgIHNwZWNpZmllcyB0aGUgSFRUUCBlcnJvciBjb2RlLCB3aXRoICptZXNzYWdlKiBhcyBhbiBvcHRpb25hbCwgc2hvcnQsIGh1bWFuCisgICAgICByZWFkYWJsZSBkZXNjcmlwdGlvbiBvZiB0aGUgZXJyb3IuICBUaGUgKmV4cGxhaW4qIGFyZ3VtZW50IGNhbiBiZSB1c2VkIHRvCisgICAgICBwcm92aWRlIG1vcmUgZGV0YWlsZWQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGVycm9yOyBpdCB3aWxsIGJlIGZvcm1hdHRlZAorICAgICAgdXNpbmcgdGhlIDphdHRyOmBlcnJvcl9tZXNzYWdlX2Zvcm1hdGAgY2xhc3MgdmFyaWFibGUgYW5kIGVtaXR0ZWQsIGFmdGVyCisgICAgICBhIGNvbXBsZXRlIHNldCBvZiBoZWFkZXJzLCBhcyB0aGUgcmVzcG9uc2UgYm9keS4gIFRoZSA6YXR0cjpgcmVzcG9uc2VzYAorICAgICAgY2xhc3MgdmFyaWFibGUgaG9sZHMgdGhlIGRlZmF1bHQgdmFsdWVzIGZvciAqbWVzc2FnZSogYW5kICpleHBsYWluKiB0aGF0CisgICAgICB3aWxsIGJlIHVzZWQgaWYgbm8gdmFsdWUgaXMgcHJvdmlkZWQ7IGZvciB1bmtub3duIGNvZGVzIHRoZSBkZWZhdWx0IHZhbHVlCisgICAgICBmb3IgYm90aCBpcyB0aGUgc3RyaW5nIGBgPz8/YGAuCisKKyAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICAgICBUaGUgZXJyb3IgcmVzcG9uc2UgaW5jbHVkZXMgYSBDb250ZW50LUxlbmd0aCBoZWFkZXIuCisgICAgICAgICBBZGRlZCB0aGUgKmV4cGxhaW4qIGFyZ3VtZW50LgorCiAKICAgIC4uIG1ldGhvZDo6IHNlbmRfcmVzcG9uc2UoY29kZSwgbWVzc2FnZT1Ob25lKQogCkBAIC0xODUsNyArMjEwLDcgQEAKICAgICAgIGFyZSBwaWNrZWQgdXAgZnJvbSB0aGUgOm1ldGg6YHZlcnNpb25fc3RyaW5nYCBhbmQKICAgICAgIDptZXRoOmBkYXRlX3RpbWVfc3RyaW5nYCBtZXRob2RzLCByZXNwZWN0aXZlbHkuIElmIHRoZSBzZXJ2ZXIgZG9lcyBub3QKICAgICAgIGludGVuZCB0byBzZW5kIGFueSBvdGhlciBoZWFkZXJzIHVzaW5nIHRoZSA6bWV0aDpgc2VuZF9oZWFkZXJgIG1ldGhvZCwKLSAgICAgIHRoZW4gOm1ldGg6YHNlbmRfcmVzcG9uc2VgIHNob3VsZCBiZSBmb2xsb3dlZCBieSBhIDptZXRoOmBlbmRfaGVhZGVyc2AKKyAgICAgIHRoZW4gOm1ldGg6YHNlbmRfcmVzcG9uc2VgIHNob3VsZCBiZSBmb2xsb3dlZCBieSBhbiA6bWV0aDpgZW5kX2hlYWRlcnNgCiAgICAgICBjYWxsLgogCiAgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMwpAQCAtMjA3LDcgKzIzMiw3IEBACiAKICAgIC4uIG1ldGhvZDo6IHNlbmRfcmVzcG9uc2Vfb25seShjb2RlLCBtZXNzYWdlPU5vbmUpCiAKLSAgICAgIFNlbmRzIHRoZSByZXBvbnNlIGhlYWRlciBvbmx5LCB1c2VkIGZvciB0aGUgcHVycG9zZXMgd2hlbiBgYDEwMAorICAgICAgU2VuZHMgdGhlIHJlc3BvbnNlIGhlYWRlciBvbmx5LCB1c2VkIGZvciB0aGUgcHVycG9zZXMgd2hlbiBgYDEwMAogICAgICAgQ29udGludWVgYCByZXNwb25zZSBpcyBzZW50IGJ5IHRoZSBzZXJ2ZXIgdG8gdGhlIGNsaWVudC4gVGhlIGhlYWRlcnMgbm90CiAgICAgICBidWZmZXJlZCBhbmQgc2VudCBkaXJlY3RseSB0aGUgb3V0cHV0IHN0cmVhbS5JZiB0aGUgKm1lc3NhZ2UqIGlzIG5vdAogICAgICAgc3BlY2lmaWVkLCB0aGUgSFRUUCBtZXNzYWdlIGNvcnJlc3BvbmRpbmcgdGhlIHJlc3BvbnNlICpjb2RlKiAgaXMgc2VudC4KQEAgLTM0MSw3ICszNjYsNyBAQAogCiBUaGUgOmNsYXNzOmBTaW1wbGVIVFRQUmVxdWVzdEhhbmRsZXJgIGNsYXNzIGNhbiBiZSB1c2VkIGluIHRoZSBmb2xsb3dpbmcKIG1hbm5lciBpbiBvcmRlciB0byBjcmVhdGUgYSB2ZXJ5IGJhc2ljIHdlYnNlcnZlciBzZXJ2aW5nIGZpbGVzIHJlbGF0aXZlIHRvCi10aGUgY3VycmVudCBkaXJlY3RvcnkuIDo6Cit0aGUgY3VycmVudCBkaXJlY3Rvcnk6OgogCiAgICBpbXBvcnQgaHR0cC5zZXJ2ZXIKICAgIGltcG9ydCBzb2NrZXRzZXJ2ZXIKQEAgLTM1NSwxMiArMzgwLDIzIEBACiAgICBwcmludCgic2VydmluZyBhdCBwb3J0IiwgUE9SVCkKICAgIGh0dHBkLnNlcnZlX2ZvcmV2ZXIoKQogCisuLiBfaHR0cC1zZXJ2ZXItY2xpOgorCiA6bW9kOmBodHRwLnNlcnZlcmAgY2FuIGFsc28gYmUgaW52b2tlZCBkaXJlY3RseSB1c2luZyB0aGUgOm9wdGlvbjpgLW1gCiBzd2l0Y2ggb2YgdGhlIGludGVycHJldGVyIHdpdGggYSBgYHBvcnQgbnVtYmVyYGAgYXJndW1lbnQuICBTaW1pbGFyIHRvCi10aGUgcHJldmlvdXMgZXhhbXBsZSwgdGhpcyBzZXJ2ZXMgZmlsZXMgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LiA6OgordGhlIHByZXZpb3VzIGV4YW1wbGUsIHRoaXMgc2VydmVzIGZpbGVzIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IGRpcmVjdG9yeTo6CiAKICAgICAgICAgcHl0aG9uIC1tIGh0dHAuc2VydmVyIDgwMDAKIAorQnkgZGVmYXVsdCwgc2VydmVyIGJpbmRzIGl0c2VsZiB0byBhbGwgaW50ZXJmYWNlcy4gIFRoZSBvcHRpb24gYGAtYi8tLWJpbmRgYAorc3BlY2lmaWVzIGEgc3BlY2lmaWMgYWRkcmVzcyB0byB3aGljaCBpdCBzaG91bGQgYmluZC4gIEZvciBleGFtcGxlLCB0aGUKK2ZvbGxvd2luZyBjb21tYW5kIGNhdXNlcyB0aGUgc2VydmVyIHRvIGJpbmQgdG8gbG9jYWxob3N0IG9ubHk6OgorCisgICAgICAgIHB5dGhvbiAtbSBodHRwLnNlcnZlciA4MDAwIC0tYmluZCAxMjcuMC4wLjEKKworLi4gdmVyc2lvbmFkZGVkOjogMy40CisgICAgYGAtLWJpbmRgYCBhcmd1bWVudCB3YXMgaW50cm9kdWNlZC4KKwogCiAuLiBjbGFzczo6IENHSUhUVFBSZXF1ZXN0SGFuZGxlcihyZXF1ZXN0LCBjbGllbnRfYWRkcmVzcywgc2VydmVyKQogCkBAIC00MDMsNyArNDM5LDcgQEAKICAgIHJlYXNvbnMuICBQcm9ibGVtcyB3aXRoIHRoZSBDR0kgc2NyaXB0IHdpbGwgYmUgdHJhbnNsYXRlZCB0byBlcnJvciA0MDMuCiAKIDpjbGFzczpgQ0dJSFRUUFJlcXVlc3RIYW5kbGVyYCBjYW4gYmUgZW5hYmxlZCBpbiB0aGUgY29tbWFuZCBsaW5lIGJ5IHBhc3NpbmcKLXRoZSBgYC0tY2dpYGAgb3B0aW9uLjo6Cit0aGUgYGAtLWNnaWBgIG9wdGlvbjo6CiAKICAgICAgICAgcHl0aG9uIC1tIGh0dHAuc2VydmVyIC0tY2dpIDgwMDAKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvaWRsZS5yc3QgYi9Eb2MvbGlicmFyeS9pZGxlLnJzdAppbmRleCAzNmQ3OGIwLi40Mzg0ZDU2IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9pZGxlLnJzdAorKysgYi9Eb2MvbGlicmFyeS9pZGxlLnJzdApAQCAtMywyMDAgKzMsMzAwIEBACiBJRExFCiA9PT09CiAKLS4uIG1vZHVsZWF1dGhvcjo6IEd1aWRvIHZhbiBSb3NzdW0gPGd1aWRvQFB5dGhvbi5vcmc+Ci0KIC4uIGluZGV4OjoKICAgIHNpbmdsZTogSURMRQogICAgc2luZ2xlOiBQeXRob24gRWRpdG9yCiAgICBzaW5nbGU6IEludGVncmF0ZWQgRGV2ZWxvcG1lbnQgRW52aXJvbm1lbnQKIAotSURMRSBpcyB0aGUgUHl0aG9uIElERSBidWlsdCB3aXRoIHRoZSA6bW9kOmB0a2ludGVyYCBHVUkgdG9vbGtpdC4KKy4uIG1vZHVsZWF1dGhvcjo6IEd1aWRvIHZhbiBSb3NzdW0gPGd1aWRvQHB5dGhvbi5vcmc+CisKK0lETEUgaXMgUHl0aG9uJ3MgSW50ZWdyYXRlZCBEZXZlbG9wbWVudCBhbmQgTGVhcm5pbmcgRW52aXJvbm1lbnQuCiAKIElETEUgaGFzIHRoZSBmb2xsb3dpbmcgZmVhdHVyZXM6CiAKICogY29kZWQgaW4gMTAwJSBwdXJlIFB5dGhvbiwgdXNpbmcgdGhlIDptb2Q6YHRraW50ZXJgIEdVSSB0b29sa2l0CiAKLSogY3Jvc3MtcGxhdGZvcm06IHdvcmtzIG9uIFdpbmRvd3MgYW5kIFVuaXgKKyogY3Jvc3MtcGxhdGZvcm06IHdvcmtzIG1vc3RseSB0aGUgc2FtZSBvbiBXaW5kb3dzLCBVbml4LCBhbmQgTWFjIE9TIFgKIAotKiBtdWx0aS13aW5kb3cgdGV4dCBlZGl0b3Igd2l0aCBtdWx0aXBsZSB1bmRvLCBQeXRob24gY29sb3JpemluZyBhbmQgbWFueSBvdGhlcgotICBmZWF0dXJlcywgZS5nLiBzbWFydCBpbmRlbnQgYW5kIGNhbGwgdGlwcworKiBQeXRob24gc2hlbGwgd2luZG93IChpbnRlcmFjdGl2ZSBpbnRlcnByZXRlcikgd2l0aCBjb2xvcml6aW5nCisgIG9mIGNvZGUgaW5wdXQsIG91dHB1dCwgYW5kIGVycm9yIG1lc3NhZ2VzCiAKLSogUHl0aG9uIHNoZWxsIHdpbmRvdyAoYS5rLmEuIGludGVyYWN0aXZlIGludGVycHJldGVyKQorKiBtdWx0aS13aW5kb3cgdGV4dCBlZGl0b3Igd2l0aCBtdWx0aXBsZSB1bmRvLCBQeXRob24gY29sb3JpemluZywKKyAgc21hcnQgaW5kZW50LCBjYWxsIHRpcHMsIGF1dG8gY29tcGxldGlvbiwgYW5kIG90aGVyIGZlYXR1cmVzCiAKLSogZGVidWdnZXIgKG5vdCBjb21wbGV0ZSwgYnV0IHlvdSBjYW4gc2V0IGJyZWFrcG9pbnRzLCB2aWV3ICBhbmQgc3RlcCkKKyogc2VhcmNoIHdpdGhpbiBhbnkgd2luZG93LCByZXBsYWNlIHdpdGhpbiBlZGl0b3Igd2luZG93cywgYW5kIHNlYXJjaAorICB0aHJvdWdoIG11bHRpcGxlIGZpbGVzIChncmVwKQogCisqIGRlYnVnZ2VyIHdpdGggcGVyc2lzdGVudCBicmVha3BvaW50cywgc3RlcHBpbmcsIGFuZCB2aWV3aW5nCisgIG9mIGdsb2JhbCBhbmQgbG9jYWwgbmFtZXNwYWNlcworCisqIGNvbmZpZ3VyYXRpb24sIGJyb3dzZXJzLCBhbmQgb3RoZXIgZGlhbG9ncwogCiBNZW51cwogLS0tLS0KIAorSURMRSBoYXMgdHdvIG1haW4gd2luZG93IHR5cGVzLCB0aGUgU2hlbGwgd2luZG93IGFuZCB0aGUgRWRpdG9yIHdpbmRvdy4gIEl0IGlzCitwb3NzaWJsZSB0byBoYXZlIG11bHRpcGxlIGVkaXRvciB3aW5kb3dzIHNpbXVsdGFuZW91c2x5LiAgT3V0cHV0IHdpbmRvd3MsIHN1Y2gKK2FzIHVzZWQgZm9yIEVkaXQgLyBGaW5kIGluIEZpbGVzLCBhcmUgYSBzdWJ0eXBlIG9mIGVkaXQgd2luZG93LiAgVGhleSBjdXJyZW50bHkKK2hhdmUgdGhlIHNhbWUgdG9wIG1lbnUgYXMgRWRpdG9yIHdpbmRvd3MgYnV0IGEgZGlmZmVyZW50IGRlZmF1bHQgdGl0bGUgYW5kCitjb250ZXh0IG1lbnUuCiAKLUZpbGUgbWVudQotXl5eXl5eXl5eCitJRExFJ3MgbWVudXMgZHluYW1pY2FsbHkgY2hhbmdlIGJhc2VkIG9uIHdoaWNoIHdpbmRvdyBpcyBjdXJyZW50bHkgc2VsZWN0ZWQuCitFYWNoIG1lbnUgZG9jdW1lbnRlZCBiZWxvdyBpbmRpY2F0ZXMgd2hpY2ggd2luZG93IHR5cGUgaXQgaXMgYXNzb2NpYXRlZCB3aXRoLgogCi1OZXcgZmlsZQotICAgY3JlYXRlIGEgbmV3IGZpbGUgZWRpdGluZyB3aW5kb3cKK0ZpbGUgbWVudSAoU2hlbGwgYW5kIEVkaXRvcikKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworTmV3IEZpbGUKKyAgIENyZWF0ZSBhIG5ldyBmaWxlIGVkaXRpbmcgd2luZG93LgogCiBPcGVuLi4uCi0gICBvcGVuIGFuIGV4aXN0aW5nIGZpbGUKKyAgIE9wZW4gYW4gZXhpc3RpbmcgZmlsZSB3aXRoIGFuIE9wZW4gZGlhbG9nLgogCi1PcGVuIG1vZHVsZS4uLgotICAgb3BlbiBhbiBleGlzdGluZyBtb2R1bGUgKHNlYXJjaGVzIHN5cy5wYXRoKQorUmVjZW50IEZpbGVzCisgICBPcGVuIGEgbGlzdCBvZiByZWNlbnQgZmlsZXMuICBDbGljayBvbmUgdG8gb3BlbiBpdC4KIAotQ2xhc3MgYnJvd3NlcgotICAgc2hvdyBjbGFzc2VzIGFuZCBtZXRob2RzIGluIGN1cnJlbnQgZmlsZQotCi1QYXRoIGJyb3dzZXIKLSAgIHNob3cgc3lzLnBhdGggZGlyZWN0b3JpZXMsIG1vZHVsZXMsIGNsYXNzZXMgYW5kIG1ldGhvZHMKK09wZW4gTW9kdWxlLi4uCisgICBPcGVuIGFuIGV4aXN0aW5nIG1vZHVsZSAoc2VhcmNoZXMgc3lzLnBhdGgpLgogCiAuLiBpbmRleDo6CiAgICBzaW5nbGU6IENsYXNzIGJyb3dzZXIKICAgIHNpbmdsZTogUGF0aCBicm93c2VyCiAKK0NsYXNzIEJyb3dzZXIKKyAgIFNob3cgZnVuY3Rpb25zLCBjbGFzc2VzLCBhbmQgbWV0aG9kcyBpbiB0aGUgY3VycmVudCBFZGl0b3IgZmlsZSBpbiBhCisgICB0cmVlIHN0cnVjdHVyZS4gIEluIHRoZSBzaGVsbCwgb3BlbiBhIG1vZHVsZSBmaXJzdC4KKworUGF0aCBCcm93c2VyCisgICBTaG93IHN5cy5wYXRoIGRpcmVjdG9yaWVzLCBtb2R1bGVzLCBmdW5jdGlvbnMsIGNsYXNzZXMgYW5kIG1ldGhvZHMgaW4gYQorICAgdHJlZSBzdHJ1Y3R1cmUuCisKIFNhdmUKLSAgIHNhdmUgY3VycmVudCB3aW5kb3cgdG8gdGhlIGFzc29jaWF0ZWQgZmlsZSAodW5zYXZlZCB3aW5kb3dzIGhhdmUgYSBcKiBiZWZvcmUgYW5kCi0gICBhZnRlciB0aGUgd2luZG93IHRpdGxlKQorICAgU2F2ZSB0aGUgY3VycmVudCB3aW5kb3cgdG8gdGhlIGFzc29jaWF0ZWQgZmlsZSwgaWYgdGhlcmUgaXMgb25lLiAgV2luZG93cworICAgdGhhdCBoYXZlIGJlZW4gY2hhbmdlZCBzaW5jZSBiZWluZyBvcGVuZWQgb3IgbGFzdCBzYXZlZCBoYXZlIGEgXCogYmVmb3JlCisgICBhbmQgYWZ0ZXIgdGhlIHdpbmRvdyB0aXRsZS4gIElmIHRoZXJlIGlzIG5vIGFzc29jaWF0ZWQgZmlsZSwKKyAgIGRvIFNhdmUgQXMgaW5zdGVhZC4KIAogU2F2ZSBBcy4uLgotICAgc2F2ZSBjdXJyZW50IHdpbmRvdyB0byBuZXcgZmlsZSwgd2hpY2ggYmVjb21lcyB0aGUgYXNzb2NpYXRlZCBmaWxlCisgICBTYXZlIHRoZSBjdXJyZW50IHdpbmRvdyB3aXRoIGEgU2F2ZSBBcyBkaWFsb2cuICBUaGUgZmlsZSBzYXZlZCBiZWNvbWVzIHRoZQorICAgbmV3IGFzc29jaWF0ZWQgZmlsZSBmb3IgdGhlIHdpbmRvdy4KIAogU2F2ZSBDb3B5IEFzLi4uCi0gICBzYXZlIGN1cnJlbnQgd2luZG93IHRvIGRpZmZlcmVudCBmaWxlIHdpdGhvdXQgY2hhbmdpbmcgdGhlIGFzc29jaWF0ZWQgZmlsZQorICAgU2F2ZSB0aGUgY3VycmVudCB3aW5kb3cgdG8gZGlmZmVyZW50IGZpbGUgd2l0aG91dCBjaGFuZ2luZyB0aGUgYXNzb2NpYXRlZAorICAgZmlsZS4KKworUHJpbnQgV2luZG93CisgICBQcmludCB0aGUgY3VycmVudCB3aW5kb3cgdG8gdGhlIGRlZmF1bHQgcHJpbnRlci4KIAogQ2xvc2UKLSAgIGNsb3NlIGN1cnJlbnQgd2luZG93IChhc2tzIHRvIHNhdmUgaWYgdW5zYXZlZCkKKyAgIENsb3NlIHRoZSBjdXJyZW50IHdpbmRvdyAoYXNrIHRvIHNhdmUgaWYgdW5zYXZlZCkuCiAKIEV4aXQKLSAgIGNsb3NlIGFsbCB3aW5kb3dzIGFuZCBxdWl0IElETEUgKGFza3MgdG8gc2F2ZSBpZiB1bnNhdmVkKQorICAgQ2xvc2UgYWxsIHdpbmRvd3MgYW5kIHF1aXQgSURMRSAoYXNrIHRvIHNhdmUgdW5zYXZlZCB3aW5kb3dzKS4KIAotCi1FZGl0IG1lbnUKLV5eXl5eXl5eXgorRWRpdCBtZW51IChTaGVsbCBhbmQgRWRpdG9yKQorXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgogCiBVbmRvCi0gICBVbmRvIGxhc3QgY2hhbmdlIHRvIGN1cnJlbnQgd2luZG93IChtYXggMTAwMCBjaGFuZ2VzKQorICAgVW5kbyB0aGUgbGFzdCBjaGFuZ2UgdG8gdGhlIGN1cnJlbnQgd2luZG93LiAgQSBtYXhpbXVtIG9mIDEwMDAgY2hhbmdlcyBtYXkKKyAgIGJlIHVuZG9uZS4KIAogUmVkbwotICAgUmVkbyBsYXN0IHVuZG9uZSBjaGFuZ2UgdG8gY3VycmVudCB3aW5kb3cKKyAgIFJlZG8gdGhlIGxhc3QgdW5kb25lIGNoYW5nZSB0byB0aGUgY3VycmVudCB3aW5kb3cuCiAKIEN1dAotICAgQ29weSBzZWxlY3Rpb24gaW50byBzeXN0ZW0td2lkZSBjbGlwYm9hcmQ7IHRoZW4gZGVsZXRlIHNlbGVjdGlvbgorICAgQ29weSBzZWxlY3Rpb24gaW50byB0aGUgc3lzdGVtLXdpZGUgY2xpcGJvYXJkOyB0aGVuIGRlbGV0ZSB0aGUgc2VsZWN0aW9uLgogCiBDb3B5Ci0gICBDb3B5IHNlbGVjdGlvbiBpbnRvIHN5c3RlbS13aWRlIGNsaXBib2FyZAorICAgQ29weSBzZWxlY3Rpb24gaW50byB0aGUgc3lzdGVtLXdpZGUgY2xpcGJvYXJkLgogCiBQYXN0ZQotICAgSW5zZXJ0IHN5c3RlbS13aWRlIGNsaXBib2FyZCBpbnRvIHdpbmRvdworICAgSW5zZXJ0IGNvbnRlbnRzIG9mIHRoZSBzeXN0ZW0td2lkZSBjbGlwYm9hcmQgaW50byB0aGUgY3VycmVudCB3aW5kb3cuCisKK1RoZSBjbGlwYm9hcmQgZnVuY3Rpb25zIGFyZSBhbHNvIGF2YWlsYWJsZSBpbiBjb250ZXh0IG1lbnVzLgogCiBTZWxlY3QgQWxsCi0gICBTZWxlY3QgdGhlIGVudGlyZSBjb250ZW50cyBvZiB0aGUgZWRpdCBidWZmZXIKKyAgIFNlbGVjdCB0aGUgZW50aXJlIGNvbnRlbnRzIG9mIHRoZSBjdXJyZW50IHdpbmRvdy4KIAogRmluZC4uLgotICAgT3BlbiBhIHNlYXJjaCBkaWFsb2cgYm94IHdpdGggbWFueSBvcHRpb25zCisgICBPcGVuIGEgc2VhcmNoIGRpYWxvZyB3aXRoIG1hbnkgb3B0aW9ucwogCi1GaW5kIGFnYWluCi0gICBSZXBlYXQgbGFzdCBzZWFyY2gKK0ZpbmQgQWdhaW4KKyAgIFJlcGVhdCB0aGUgbGFzdCBzZWFyY2gsIGlmIHRoZXJlIGlzIG9uZS4KIAotRmluZCBzZWxlY3Rpb24KLSAgIFNlYXJjaCBmb3IgdGhlIHN0cmluZyBpbiB0aGUgc2VsZWN0aW9uCitGaW5kIFNlbGVjdGlvbgorICAgU2VhcmNoIGZvciB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHN0cmluZywgaWYgdGhlcmUgaXMgb25lLgogCiBGaW5kIGluIEZpbGVzLi4uCi0gICBPcGVuIGEgc2VhcmNoIGRpYWxvZyBib3ggZm9yIHNlYXJjaGluZyBmaWxlcworICAgT3BlbiBhIGZpbGUgc2VhcmNoIGRpYWxvZy4gIFB1dCByZXN1bHRzIGluIGFuIG5ldyBvdXRwdXQgd2luZG93LgogCiBSZXBsYWNlLi4uCi0gICBPcGVuIGEgc2VhcmNoLWFuZC1yZXBsYWNlIGRpYWxvZyBib3gKKyAgIE9wZW4gYSBzZWFyY2gtYW5kLXJlcGxhY2UgZGlhbG9nLgogCi1HbyB0byBsaW5lCi0gICBBc2sgZm9yIGEgbGluZSBudW1iZXIgYW5kIHNob3cgdGhhdCBsaW5lCitHbyB0byBMaW5lCisgICBNb3ZlIGN1cnNvciB0byB0aGUgbGluZSBudW1iZXIgcmVxdWVzdGVkIGFuZCBtYWtlIHRoYXQgbGluZSB2aXNpYmxlLgogCi1JbmRlbnQgcmVnaW9uCi0gICBTaGlmdCBzZWxlY3RlZCBsaW5lcyByaWdodCA0IHNwYWNlcworU2hvdyBDb21wbGV0aW9ucworICAgT3BlbiBhIHNjcm9sbGFibGUgbGlzdCBhbGxvd2luZyBzZWxlY3Rpb24gb2Yga2V5d29yZHMgYW5kIGF0dHJpYnV0ZXMuIFNlZQorICAgQ29tcGxldGlvbnMgaW4gdGhlIFRpcHMgc2VjdGlvbnMgYmVsb3cuCiAKLURlZGVudCByZWdpb24KLSAgIFNoaWZ0IHNlbGVjdGVkIGxpbmVzIGxlZnQgNCBzcGFjZXMKK0V4cGFuZCBXb3JkCisgICBFeHBhbmQgYSBwcmVmaXggeW91IGhhdmUgdHlwZWQgdG8gbWF0Y2ggYSBmdWxsIHdvcmQgaW4gdGhlIHNhbWUgd2luZG93OworICAgcmVwZWF0IHRvIGdldCBhIGRpZmZlcmVudCBleHBhbnNpb24uCiAKLUNvbW1lbnQgb3V0IHJlZ2lvbgotICAgSW5zZXJ0ICMjIGluIGZyb250IG9mIHNlbGVjdGVkIGxpbmVzCitTaG93IGNhbGwgdGlwCisgICBBZnRlciBhbiB1bmNsb3NlZCBwYXJlbnRoZXNpcyBmb3IgYSBmdW5jdGlvbiwgb3BlbiBhIHNtYWxsIHdpbmRvdyB3aXRoCisgICBmdW5jdGlvbiBwYXJhbWV0ZXIgaGludHMuCiAKLVVuY29tbWVudCByZWdpb24KLSAgIFJlbW92ZSBsZWFkaW5nICMgb3IgIyMgZnJvbSBzZWxlY3RlZCBsaW5lcworU2hvdyBzdXJyb3VuZGluZyBwYXJlbnMKKyAgIEhpZ2hsaWdodCB0aGUgc3Vycm91bmRpbmcgcGFyZW50aGVzaXMuCiAKLVRhYmlmeSByZWdpb24KLSAgIFR1cm5zICpsZWFkaW5nKiBzdHJldGNoZXMgb2Ygc3BhY2VzIGludG8gdGFicworRm9ybWF0IG1lbnUgKEVkaXRvciB3aW5kb3cgb25seSkKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCiAKLVVudGFiaWZ5IHJlZ2lvbgotICAgVHVybiAqYWxsKiB0YWJzIGludG8gdGhlIHJpZ2h0IG51bWJlciBvZiBzcGFjZXMKK0luZGVudCBSZWdpb24KKyAgIFNoaWZ0IHNlbGVjdGVkIGxpbmVzIHJpZ2h0IGJ5IHRoZSBpbmRlbnQgd2lkdGggKGRlZmF1bHQgNCBzcGFjZXMpLgogCi1FeHBhbmQgd29yZAotICAgRXhwYW5kIHRoZSB3b3JkIHlvdSBoYXZlIHR5cGVkIHRvIG1hdGNoIGFub3RoZXIgd29yZCBpbiB0aGUgc2FtZSBidWZmZXI7IHJlcGVhdAotICAgdG8gZ2V0IGEgZGlmZmVyZW50IGV4cGFuc2lvbgorRGVkZW50IFJlZ2lvbgorICAgU2hpZnQgc2VsZWN0ZWQgbGluZXMgbGVmdCBieSB0aGUgaW5kZW50IHdpZHRoIChkZWZhdWx0IDQgc3BhY2VzKS4KKworQ29tbWVudCBPdXQgUmVnaW9uCisgICBJbnNlcnQgIyMgaW4gZnJvbnQgb2Ygc2VsZWN0ZWQgbGluZXMuCisKK1VuY29tbWVudCBSZWdpb24KKyAgIFJlbW92ZSBsZWFkaW5nICMgb3IgIyMgZnJvbSBzZWxlY3RlZCBsaW5lcy4KKworVGFiaWZ5IFJlZ2lvbgorICAgVHVybiAqbGVhZGluZyogc3RyZXRjaGVzIG9mIHNwYWNlcyBpbnRvIHRhYnMuIChOb3RlOiBXZSByZWNvbW1lbmQgdXNpbmcKKyAgIDQgc3BhY2UgYmxvY2tzIHRvIGluZGVudCBQeXRob24gY29kZS4pCisKK1VudGFiaWZ5IFJlZ2lvbgorICAgVHVybiAqYWxsKiB0YWJzIGludG8gdGhlIGNvcnJlY3QgbnVtYmVyIG9mIHNwYWNlcy4KKworVG9nZ2xlIFRhYnMKKyAgIE9wZW4gYSBkaWFsb2cgdG8gc3dpdGNoIGJldHdlZW4gaW5kZW50aW5nIHdpdGggc3BhY2VzIGFuZCB0YWJzLgorCitOZXcgSW5kZW50IFdpZHRoCisgICBPcGVuIGEgZGlhbG9nIHRvIGNoYW5nZSBpbmRlbnQgd2lkdGguIFRoZSBhY2NlcHRlZCBkZWZhdWx0IGJ5IHRoZSBQeXRob24KKyAgIGNvbW11bml0eSBpcyA0IHNwYWNlcy4KIAogRm9ybWF0IFBhcmFncmFwaAotICAgUmVmb3JtYXQgdGhlIGN1cnJlbnQgYmxhbmstbGluZS1zZXBhcmF0ZWQgcGFyYWdyYXBoCisgICBSZWZvcm1hdCB0aGUgY3VycmVudCBibGFuay1saW5lLWRlbGltaXRlZCBwYXJhZ3JhcGggaW4gY29tbWVudCBibG9jayBvcgorICAgbXVsdGlsaW5lIHN0cmluZyBvciBzZWxlY3RlZCBsaW5lIGluIGEgc3RyaW5nLiAgQWxsIGxpbmVzIGluIHRoZQorICAgcGFyYWdyYXBoIHdpbGwgYmUgZm9ybWF0dGVkIHRvIGxlc3MgdGhhbiBOIGNvbHVtbnMsIHdoZXJlIE4gZGVmYXVsdHMgdG8gNzIuCiAKLUltcG9ydCBtb2R1bGUKLSAgIEltcG9ydCBvciByZWxvYWQgdGhlIGN1cnJlbnQgbW9kdWxlCi0KLVJ1biBzY3JpcHQKLSAgIEV4ZWN1dGUgdGhlIGN1cnJlbnQgZmlsZSBpbiB0aGUgX19tYWluX18gbmFtZXNwYWNlCitTdHJpcCB0cmFpbGluZyB3aGl0ZXNwYWNlCisgICBSZW1vdmUgYW55IHNwYWNlIGNoYXJhY3RlcnMgYWZ0ZXIgdGhlIGxhc3Qgbm9uLXNwYWNlIGNoYXJhY3RlciBvZiBhIGxpbmUuCiAKIC4uIGluZGV4OjoKLSAgIHNpbmdsZTogSW1wb3J0IG1vZHVsZQogICAgc2luZ2xlOiBSdW4gc2NyaXB0CiAKK1J1biBtZW51IChFZGl0b3Igd2luZG93IG9ubHkpCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgogCi1XaW5kb3dzIG1lbnUKLV5eXl5eXl5eXl5eXgorUHl0aG9uIFNoZWxsCisgICBPcGVuIG9yIHdha2UgdXAgdGhlIFB5dGhvbiBTaGVsbCB3aW5kb3cuCisKK0NoZWNrIE1vZHVsZQorICAgQ2hlY2sgdGhlIHN5bnRheCBvZiB0aGUgbW9kdWxlIGN1cnJlbnRseSBvcGVuIGluIHRoZSBFZGl0b3Igd2luZG93LiBJZiB0aGUKKyAgIG1vZHVsZSBoYXMgbm90IGJlZW4gc2F2ZWQgSURMRSB3aWxsIGVpdGhlciBwcm9tcHQgdGhlIHVzZXIgdG8gc2F2ZSBvcgorICAgYXV0b3NhdmUsIGFzIHNlbGVjdGVkIGluIHRoZSBHZW5lcmFsIHRhYiBvZiB0aGUgSWRsZSBTZXR0aW5ncyBkaWFsb2cuICBJZgorICAgdGhlcmUgaXMgYSBzeW50YXggZXJyb3IsIHRoZSBhcHByb3hpbWF0ZSBsb2NhdGlvbiBpcyBpbmRpY2F0ZWQgaW4gdGhlCisgICBFZGl0b3Igd2luZG93LgorCitSdW4gTW9kdWxlCisgICBEbyBDaGVjayBNb2R1bGUgKGFib3ZlKS4gIElmIG5vIGVycm9yLCByZXN0YXJ0IHRoZSBzaGVsbCB0byBjbGVhbiB0aGUKKyAgIGVudmlyb25tZW50LCB0aGVuIGV4ZWN1dGUgdGhlIG1vZHVsZS4gIE91dHB1dCBpcyBkaXNwbGF5ZWQgaW4gdGhlIFNoZWxsCisgICB3aW5kb3cuICBOb3RlIHRoYXQgb3V0cHV0IHJlcXVpcmVzIHVzZSBvZiBgYHByaW50YGAgb3IgYGB3cml0ZWBgLgorICAgV2hlbiBleGVjdXRpb24gaXMgY29tcGxldGUsIHRoZSBTaGVsbCByZXRhaW5zIGZvY3VzIGFuZCBkaXNwbGF5cyBhIHByb21wdC4KKyAgIEF0IHRoaXMgcG9pbnQsIG9uZSBtYXkgaW50ZXJhY3RpdmVseSBleHBsb3JlIHRoZSByZXN1bHQgb2YgZXhlY3V0aW9uLgorICAgVGhpcyBpcyBzaW1pbGFyIHRvIGV4ZWN1dGluZyBhIGZpbGUgd2l0aCBgYHB5dGhvbiAtaSBmaWxlYGAgYXQgYSBjb21tYW5kCisgICBsaW5lLgorCitTaGVsbCBtZW51IChTaGVsbCB3aW5kb3cgb25seSkKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorCitWaWV3IExhc3QgUmVzdGFydAorICBTY3JvbGwgdGhlIHNoZWxsIHdpbmRvdyB0byB0aGUgbGFzdCBTaGVsbCByZXN0YXJ0LgorCitSZXN0YXJ0IFNoZWxsCisgIFJlc3RhcnQgdGhlIHNoZWxsIHRvIGNsZWFuIHRoZSBlbnZpcm9ubWVudC4KKworRGVidWcgbWVudSAoU2hlbGwgd2luZG93IG9ubHkpCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworR28gdG8gRmlsZS9MaW5lCisgICBMb29rIG9uIHRoZSBjdXJyZW50IGxpbmUuIHdpdGggdGhlIGN1cnNvciwgYW5kIHRoZSBsaW5lIGFib3ZlIGZvciBhIGZpbGVuYW1lCisgICBhbmQgbGluZSBudW1iZXIuICBJZiBmb3VuZCwgb3BlbiB0aGUgZmlsZSBpZiBub3QgYWxyZWFkeSBvcGVuLCBhbmQgc2hvdyB0aGUKKyAgIGxpbmUuICBVc2UgdGhpcyB0byB2aWV3IHNvdXJjZSBsaW5lcyByZWZlcmVuY2VkIGluIGFuIGV4Y2VwdGlvbiB0cmFjZWJhY2sKKyAgIGFuZCBsaW5lcyBmb3VuZCBieSBGaW5kIGluIEZpbGVzLiBBbHNvIGF2YWlsYWJsZSBpbiB0aGUgY29udGV4dCBtZW51IG9mCisgICB0aGUgU2hlbGwgd2luZG93IGFuZCBPdXRwdXQgd2luZG93cy4KKworLi4gaW5kZXg6OgorICAgc2luZ2xlOiBkZWJ1Z2dlcgorICAgc2luZ2xlOiBzdGFjayB2aWV3ZXIKKworRGVidWdnZXIgKHRvZ2dsZSkKKyAgIFdoZW4gYWN0aXZlZCwgY29kZSBlbnRlcmVkIGluIHRoZSBTaGVsbCBvciBydW4gZnJvbSBhbiBFZGl0b3Igd2lsbCBydW4KKyAgIHVuZGVyIHRoZSBkZWJ1Z2dlci4gIEluIHRoZSBFZGl0b3IsIGJyZWFrcG9pbnRzIGNhbiBiZSBzZXQgd2l0aCB0aGUgY29udGV4dAorICAgbWVudS4gIFRoaXMgZmVhdHVyZSBpcyBzdGlsbCBpbmNvbXBsZXRlIGFuZCBzb21ld2hhdCBleHBlcmltZW50YWwuCisKK1N0YWNrIFZpZXdlcgorICAgU2hvdyB0aGUgc3RhY2sgdHJhY2ViYWNrIG9mIHRoZSBsYXN0IGV4Y2VwdGlvbiBpbiBhIHRyZWUgd2lkZ2V0LCB3aXRoCisgICBhY2Nlc3MgdG8gbG9jYWxzIGFuZCBnbG9iYWxzLgorCitBdXRvLW9wZW4gU3RhY2sgVmlld2VyCisgICBUb2dnbGUgYXV0b21hdGljYWxseSBvcGVuaW5nIHRoZSBzdGFjayB2aWV3ZXIgb24gYW4gdW5oYW5kbGVkIGV4Y2VwdGlvbi4KKworT3B0aW9ucyBtZW51IChTaGVsbCBhbmQgRWRpdG9yKQorXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorCitDb25maWd1cmUgSURMRQorICAgT3BlbiBhIGNvbmZpZ3VyYXRpb24gZGlhbG9nIGFuZCBjaGFuZ2UgcHJlZmVyZW5jZXMgZm9yIHRoZSBmb2xsb3dpbmc6CisgICBmb250cywgaW5kZW50YXRpb24sIGtleWJpbmRpbmdzLCB0ZXh0IGNvbG9yIHRoZW1lcywgc3RhcnR1cCB3aW5kb3dzIGFuZAorICAgc2l6ZSwgYWRkaXRpb25hbCBoZWxwIHNvdXJjZXMsIGFuZCBleHRlbnNpb25zIChzZWUgYmVsb3cpLiAgT24gT1MgWCwKKyAgIG9wZW4gdGhlIGNvbmZpZ3VyYXRpb24gZGlhbG9nIGJ5IHNlbGVjdGluZyBQcmVmZXJlbmNlcyBpbiB0aGUgYXBwbGljYXRpb24KKyAgIG1lbnUuICBUbyB1c2UgYSBuZXcgYnVpbHQtaW4gY29sb3IgdGhlbWUgKElETEUgRGFyaykgd2l0aCBvbGRlciBJRExFcywKKyAgIHNhdmUgaXQgYXMgYSBuZXcgY3VzdG9tIHRoZW1lLgorCisgICBOb24tZGVmYXVsdCB1c2VyIHNldHRpbmdzIGFyZSBzYXZlZCBpbiBhIC5pZGxlcmMgZGlyZWN0b3J5IGluIHRoZSB1c2VyJ3MKKyAgIGhvbWUgZGlyZWN0b3J5LiAgUHJvYmxlbXMgY2F1c2VkIGJ5IGJhZCB1c2VyIGNvbmZpZ3VyYXRpb24gZmlsZXMgYXJlIHNvbHZlZAorICAgYnkgZWRpdGluZyBvciBkZWxldGluZyBvbmUgb3IgbW9yZSBvZiB0aGUgZmlsZXMgaW4gLmlkbGVyYy4KKworQ29kZSBDb250ZXh0ICh0b2dnbGUpKEVkaXRvciBXaW5kb3cgb25seSkKKyAgIE9wZW4gYSBwYW5lIGF0IHRoZSB0b3Agb2YgdGhlIGVkaXQgd2luZG93IHdoaWNoIHNob3dzIHRoZSBibG9jayBjb250ZXh0CisgICBvZiB0aGUgY29kZSB3aGljaCBoYXMgc2Nyb2xsZWQgYWJvdmUgdGhlIHRvcCBvZiB0aGUgd2luZG93LgorCitXaW5kb3cgbWVudSAoU2hlbGwgYW5kIEVkaXRvcikKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgogCiBab29tIEhlaWdodAotICAgdG9nZ2xlcyB0aGUgd2luZG93IGJldHdlZW4gbm9ybWFsIHNpemUgKDI0eDgwKSBhbmQgbWF4aW11bSBoZWlnaHQuCisgICBUb2dnbGVzIHRoZSB3aW5kb3cgYmV0d2VlbiBub3JtYWwgc2l6ZSBhbmQgbWF4aW11bSBoZWlnaHQuIFRoZSBpbml0aWFsIHNpemUKKyAgIGRlZmF1bHRzIHRvIDQwIGxpbmVzIGJ5IDgwIGNoYXJzIHVubGVzcyBjaGFuZ2VkIG9uIHRoZSBHZW5lcmFsIHRhYiBvZiB0aGUKKyAgIENvbmZpZ3VyZSBJRExFIGRpYWxvZy4KIAogVGhlIHJlc3Qgb2YgdGhpcyBtZW51IGxpc3RzIHRoZSBuYW1lcyBvZiBhbGwgb3BlbiB3aW5kb3dzOyBzZWxlY3Qgb25lIHRvIGJyaW5nCiBpdCB0byB0aGUgZm9yZWdyb3VuZCAoZGVpY29uaWZ5aW5nIGl0IGlmIG5lY2Vzc2FyeSkuCiAKK0hlbHAgbWVudSAoU2hlbGwgYW5kIEVkaXRvcikKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KIAotRGVidWcgbWVudQotXl5eXl5eXl5eXgorQWJvdXQgSURMRQorICAgRGlzcGxheSB2ZXJzaW9uLCBjb3B5cmlnaHQsIGxpY2Vuc2UsIGNyZWRpdHMsIGFuZCBtb3JlLgogCi0qIGluIHRoZSBQeXRob24gU2hlbGwgd2luZG93IG9ubHkKK0lETEUgSGVscAorICAgRGlzcGxheSBhIGhlbHAgZmlsZSBmb3IgSURMRSBkZXRhaWxpbmcgdGhlIG1lbnUgb3B0aW9ucywgYmFzaWMgZWRpdGluZyBhbmQKKyAgIG5hdmlnYXRpb24sIGFuZCBvdGhlciB0aXBzLgogCi1HbyB0byBmaWxlL2xpbmUKLSAgIExvb2sgYXJvdW5kIHRoZSBpbnNlcnQgcG9pbnQgZm9yIGEgZmlsZW5hbWUgYW5kIGxpbmUgbnVtYmVyLCBvcGVuIHRoZSBmaWxlLAotICAgYW5kIHNob3cgdGhlIGxpbmUuICBVc2VmdWwgdG8gdmlldyB0aGUgc291cmNlIGxpbmVzIHJlZmVyZW5jZWQgaW4gYW4KLSAgIGV4Y2VwdGlvbiB0cmFjZWJhY2suCitQeXRob24gRG9jcworICAgQWNjZXNzIGxvY2FsIFB5dGhvbiBkb2N1bWVudGF0aW9uLCBpZiBpbnN0YWxsZWQsIG9yIHN0YXJ0IGEgd2ViIGJyb3dzZXIKKyAgIGFuZCBvcGVuIGRvY3MucHl0aG9uLm9yZyBzaG93aW5nIHRoZSBsYXRlc3QgUHl0aG9uIGRvY3VtZW50YXRpb24uCiAKLURlYnVnZ2VyCi0gICBSdW4gY29tbWFuZHMgaW4gdGhlIHNoZWxsIHVuZGVyIHRoZSBkZWJ1Z2dlci4KK1R1cnRsZSBEZW1vCisgICBSdW4gdGhlIHR1cnRsZWRlbW8gbW9kdWxlIHdpdGggZXhhbXBsZSBweXRob24gY29kZSBhbmQgdHVydGxlIGRyYXdpbmdzLgogCi1TdGFjayB2aWV3ZXIKLSAgIFNob3cgdGhlIHN0YWNrIHRyYWNlYmFjayBvZiB0aGUgbGFzdCBleGNlcHRpb24uCi0KLUF1dG8tb3BlbiBTdGFjayBWaWV3ZXIKLSAgIE9wZW4gc3RhY2sgdmlld2VyIG9uIHRyYWNlYmFjay4KLQotLi4gaW5kZXg6OgotICAgc2luZ2xlOiBzdGFjayB2aWV3ZXIKLSAgIHNpbmdsZTogZGVidWdnZXIKLQotCi1FZGl0IGNvbnRleHQgbWVudQotXl5eXl5eXl5eXl5eXl5eXl4KLQotKiBSaWdodC1jbGljayBpbiBFZGl0IHdpbmRvdyAoQ29udHJvbC1jbGljayBvbiBPUyBYKQotCi1DdXQKLSAgIENvcHkgc2VsZWN0aW9uIGludG8gc3lzdGVtLXdpZGUgY2xpcGJvYXJkOyB0aGVuIGRlbGV0ZSBzZWxlY3Rpb24KLQotQ29weQotICAgQ29weSBzZWxlY3Rpb24gaW50byBzeXN0ZW0td2lkZSBjbGlwYm9hcmQKLQotUGFzdGUKLSAgIEluc2VydCBzeXN0ZW0td2lkZSBjbGlwYm9hcmQgaW50byB3aW5kb3cKLQotU2V0IEJyZWFrcG9pbnQKLSAgIFNldHMgYSBicmVha3BvaW50LiAgQnJlYWtwb2ludHMgYXJlIG9ubHkgZW5hYmxlZCB3aGVuIHRoZSBkZWJ1Z2dlciBpcyBvcGVuLgotCi1DbGVhciBCcmVha3BvaW50Ci0gICBDbGVhcnMgdGhlIGJyZWFrcG9pbnQgb24gdGhhdCBsaW5lLgorQWRkaXRpb25hbCBoZWxwIHNvdXJjZXMgbWF5IGJlIGFkZGVkIGhlcmUgd2l0aCB0aGUgQ29uZmlndXJlIElETEUgZGlhbG9nIHVuZGVyCit0aGUgR2VuZXJhbCB0YWIuCiAKIC4uIGluZGV4OjoKICAgIHNpbmdsZTogQ3V0CkBAIC0yMDYsMzggKzMwNiw3OCBAQAogICAgc2luZ2xlOiBDbGVhciBCcmVha3BvaW50CiAgICBzaW5nbGU6IGJyZWFrcG9pbnRzCiAKK0NvbnRleHQgTWVudXMKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCiAKLVNoZWxsIGNvbnRleHQgbWVudQotXl5eXl5eXl5eXl5eXl5eXl5eCi0KLSogUmlnaHQtY2xpY2sgaW4gUHl0aG9uIFNoZWxsIHdpbmRvdyAoQ29udHJvbC1jbGljayBvbiBPUyBYKQorT3BlbiBhIGNvbnRleHQgbWVudSBieSByaWdodC1jbGlja2luZyBpbiBhIHdpbmRvdyAoQ29udHJvbC1jbGljayBvbiBPUyBYKS4KK0NvbnRleHQgbWVudXMgaGF2ZSB0aGUgc3RhbmRhcmQgY2xpcGJvYXJkIGZ1bmN0aW9ucyBhbHNvIG9uIHRoZSBFZGl0IG1lbnUuCiAKIEN1dAotICAgQ29weSBzZWxlY3Rpb24gaW50byBzeXN0ZW0td2lkZSBjbGlwYm9hcmQ7IHRoZW4gZGVsZXRlIHNlbGVjdGlvbgorICAgQ29weSBzZWxlY3Rpb24gaW50byB0aGUgc3lzdGVtLXdpZGUgY2xpcGJvYXJkOyB0aGVuIGRlbGV0ZSB0aGUgc2VsZWN0aW9uLgogCiBDb3B5Ci0gICBDb3B5IHNlbGVjdGlvbiBpbnRvIHN5c3RlbS13aWRlIGNsaXBib2FyZAorICAgQ29weSBzZWxlY3Rpb24gaW50byB0aGUgc3lzdGVtLXdpZGUgY2xpcGJvYXJkLgogCiBQYXN0ZQotICAgSW5zZXJ0IHN5c3RlbS13aWRlIGNsaXBib2FyZCBpbnRvIHdpbmRvdworICAgSW5zZXJ0IGNvbnRlbnRzIG9mIHRoZSBzeXN0ZW0td2lkZSBjbGlwYm9hcmQgaW50byB0aGUgY3VycmVudCB3aW5kb3cuCisKK0VkaXRvciB3aW5kb3dzIGFsc28gaGF2ZSBicmVha3BvaW50IGZ1bmN0aW9ucy4gIExpbmVzIHdpdGggYSBicmVha3BvaW50IHNldCBhcmUKK3NwZWNpYWxseSBtYXJrZWQuICBCcmVha3BvaW50cyBvbmx5IGhhdmUgYW4gZWZmZWN0IHdoZW4gcnVubmluZyB1bmRlciB0aGUKK2RlYnVnZ2VyLiAgQnJlYWtwb2ludHMgZm9yIGEgZmlsZSBhcmUgc2F2ZWQgaW4gdGhlIHVzZXIncyAuaWRsZXJjIGRpcmVjdG9yeS4KKworU2V0IEJyZWFrcG9pbnQKKyAgIFNldCBhIGJyZWFrcG9pbnQgb24gdGhlIGN1cnJlbnQgbGluZS4KKworQ2xlYXIgQnJlYWtwb2ludAorICAgQ2xlYXIgdGhlIGJyZWFrcG9pbnQgb24gdGhhdCBsaW5lLgorCitTaGVsbCBhbmQgT3V0cHV0IHdpbmRvd3MgaGF2ZSB0aGUgZm9sbG93aW5nLgogCiBHbyB0byBmaWxlL2xpbmUKICAgIFNhbWUgYXMgaW4gRGVidWcgbWVudS4KIAogCi1CYXNpYyBlZGl0aW5nIGFuZCBuYXZpZ2F0aW9uCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitFZGl0aW5nIGFuZCBuYXZpZ2F0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0luIHRoaXMgc2VjdGlvbiwgJ0MnIHJlZmVycyB0byB0aGUgOmtiZDpgQ29udHJvbGAga2V5IG9uIFdpbmRvd3MgYW5kIFVuaXggYW5kCit0aGUgOmtiZDpgQ29tbWFuZGAga2V5IG9uIE1hYyBPU1guCiAKICogOmtiZDpgQmFja3NwYWNlYCBkZWxldGVzIHRvIHRoZSBsZWZ0OyA6a2JkOmBEZWxgIGRlbGV0ZXMgdG8gdGhlIHJpZ2h0CiAKKyogOmtiZDpgQy1CYWNrc3BhY2VgIGRlbGV0ZSB3b3JkIGxlZnQ7IDprYmQ6YEMtRGVsYCBkZWxldGUgd29yZCB0byB0aGUgcmlnaHQKKwogKiBBcnJvdyBrZXlzIGFuZCA6a2JkOmBQYWdlIFVwYC86a2JkOmBQYWdlIERvd25gIHRvIG1vdmUgYXJvdW5kCiAKKyogOmtiZDpgQy1MZWZ0QXJyb3dgIGFuZCA6a2JkOmBDLVJpZ2h0QXJyb3dgIG1vdmVzIGJ5IHdvcmRzCisKICogOmtiZDpgSG9tZWAvOmtiZDpgRW5kYCBnbyB0byBiZWdpbi9lbmQgb2YgbGluZQogCiAqIDprYmQ6YEMtSG9tZWAvOmtiZDpgQy1FbmRgIGdvIHRvIGJlZ2luL2VuZCBvZiBmaWxlCiAKLSogU29tZSA6cHJvZ3JhbTpgRW1hY3NgIGJpbmRpbmdzIG1heSBhbHNvIHdvcmssIGluY2x1ZGluZyA6a2JkOmBDLUJgLAotICA6a2JkOmBDLVBgLCA6a2JkOmBDLUFgLCA6a2JkOmBDLUVgLCA6a2JkOmBDLURgLCA6a2JkOmBDLUxgCisqIFNvbWUgdXNlZnVsIEVtYWNzIGJpbmRpbmdzIGFyZSBpbmhlcml0ZWQgZnJvbSBUY2wvVGs6CisKKyAgICogOmtiZDpgQy1hYCBiZWdpbm5pbmcgb2YgbGluZQorCisgICAqIDprYmQ6YEMtZWAgZW5kIG9mIGxpbmUKKworICAgKiA6a2JkOmBDLWtgIGtpbGwgbGluZSAoYnV0IGRvZXNuJ3QgcHV0IGl0IGluIGNsaXBib2FyZCkKKworICAgKiA6a2JkOmBDLWxgIGNlbnRlciB3aW5kb3cgYXJvdW5kIHRoZSBpbnNlcnRpb24gcG9pbnQKKworICAgKiA6a2JkOmBDLWJgIGdvIGJhY2t3YXJkcyBvbmUgY2hhcmFjdGVyIHdpdGhvdXQgZGVsZXRpbmcgKHVzdWFsbHkgeW91IGNhbgorICAgICBhbHNvIHVzZSB0aGUgY3Vyc29yIGtleSBmb3IgdGhpcykKKworICAgKiA6a2JkOmBDLWZgIGdvIGZvcndhcmQgb25lIGNoYXJhY3RlciB3aXRob3V0IGRlbGV0aW5nICh1c3VhbGx5IHlvdSBjYW4KKyAgICAgYWxzbyB1c2UgdGhlIGN1cnNvciBrZXkgZm9yIHRoaXMpCisKKyAgICogOmtiZDpgQy1wYCBnbyB1cCBvbmUgbGluZSAodXN1YWxseSB5b3UgY2FuIGFsc28gdXNlIHRoZSBjdXJzb3Iga2V5IGZvcgorICAgICB0aGlzKQorCisgICAqIDprYmQ6YEMtZGAgZGVsZXRlIG5leHQgY2hhcmFjdGVyCisKK1N0YW5kYXJkIGtleWJpbmRpbmdzIChsaWtlIDprYmQ6YEMtY2AgdG8gY29weSBhbmQgOmtiZDpgQy12YCB0byBwYXN0ZSkKK21heSB3b3JrLiAgS2V5YmluZGluZ3MgYXJlIHNlbGVjdGVkIGluIHRoZSBDb25maWd1cmUgSURMRSBkaWFsb2cuCiAKIAogQXV0b21hdGljIGluZGVudGF0aW9uCkBAIC0yNDYsNzkgKzM4NiwxMzUgQEAKIEFmdGVyIGEgYmxvY2stb3BlbmluZyBzdGF0ZW1lbnQsIHRoZSBuZXh0IGxpbmUgaXMgaW5kZW50ZWQgYnkgNCBzcGFjZXMgKGluIHRoZQogUHl0aG9uIFNoZWxsIHdpbmRvdyBieSBvbmUgdGFiKS4gIEFmdGVyIGNlcnRhaW4ga2V5d29yZHMgKGJyZWFrLCByZXR1cm4gZXRjLikKIHRoZSBuZXh0IGxpbmUgaXMgZGVkZW50ZWQuICBJbiBsZWFkaW5nIGluZGVudGF0aW9uLCA6a2JkOmBCYWNrc3BhY2VgIGRlbGV0ZXMgdXAKLXRvIDQgc3BhY2VzIGlmIHRoZXkgYXJlIHRoZXJlLiA6a2JkOmBUYWJgIGluc2VydHMgMS00IHNwYWNlcyAoaW4gdGhlIFB5dGhvbgotU2hlbGwgd2luZG93IG9uZSB0YWIpLiBTZWUgYWxzbyB0aGUgaW5kZW50L2RlZGVudCByZWdpb24gY29tbWFuZHMgaW4gdGhlIGVkaXQKLW1lbnUuCit0byA0IHNwYWNlcyBpZiB0aGV5IGFyZSB0aGVyZS4gOmtiZDpgVGFiYCBpbnNlcnRzIHNwYWNlcyAoaW4gdGhlIFB5dGhvbgorU2hlbGwgd2luZG93IG9uZSB0YWIpLCBudW1iZXIgZGVwZW5kcyBvbiBJbmRlbnQgd2lkdGguIEN1cnJlbnRseSB0YWJzCithcmUgcmVzdHJpY3RlZCB0byBmb3VyIHNwYWNlcyBkdWUgdG8gVGNsL1RrIGxpbWl0YXRpb25zLgogCitTZWUgYWxzbyB0aGUgaW5kZW50L2RlZGVudCByZWdpb24gY29tbWFuZHMgaW4gdGhlIGVkaXQgbWVudS4KKworQ29tcGxldGlvbnMKK15eXl5eXl5eXl5eCisKK0NvbXBsZXRpb25zIGFyZSBzdXBwbGllZCBmb3IgZnVuY3Rpb25zLCBjbGFzc2VzLCBhbmQgYXR0cmlidXRlcyBvZiBjbGFzc2VzLAorYm90aCBidWlsdC1pbiBhbmQgdXNlci1kZWZpbmVkLiBDb21wbGV0aW9ucyBhcmUgYWxzbyBwcm92aWRlZCBmb3IKK2ZpbGVuYW1lcy4KKworVGhlIEF1dG9Db21wbGV0ZVdpbmRvdyAoQUNXKSB3aWxsIG9wZW4gYWZ0ZXIgYSBwcmVkZWZpbmVkIGRlbGF5IChkZWZhdWx0IGlzCit0d28gc2Vjb25kcykgYWZ0ZXIgYSAnLicgb3IgKGluIGEgc3RyaW5nKSBhbiBvcy5zZXAgaXMgdHlwZWQuIElmIGFmdGVyIG9uZQorb2YgdGhvc2UgY2hhcmFjdGVycyAocGx1cyB6ZXJvIG9yIG1vcmUgb3RoZXIgY2hhcmFjdGVycykgYSB0YWIgaXMgdHlwZWQKK3RoZSBBQ1cgd2lsbCBvcGVuIGltbWVkaWF0ZWx5IGlmIGEgcG9zc2libGUgY29udGludWF0aW9uIGlzIGZvdW5kLgorCitJZiB0aGVyZSBpcyBvbmx5IG9uZSBwb3NzaWJsZSBjb21wbGV0aW9uIGZvciB0aGUgY2hhcmFjdGVycyBlbnRlcmVkLCBhCis6a2JkOmBUYWJgIHdpbGwgc3VwcGx5IHRoYXQgY29tcGxldGlvbiB3aXRob3V0IG9wZW5pbmcgdGhlIEFDVy4KKworJ1Nob3cgQ29tcGxldGlvbnMnIHdpbGwgZm9yY2Ugb3BlbiBhIGNvbXBsZXRpb25zIHdpbmRvdywgYnkgZGVmYXVsdCB0aGUKKzprYmQ6YEMtc3BhY2VgIHdpbGwgb3BlbiBhIGNvbXBsZXRpb25zIHdpbmRvdy4gSW4gYW4gZW1wdHkKK3N0cmluZywgdGhpcyB3aWxsIGNvbnRhaW4gdGhlIGZpbGVzIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4gT24gYQorYmxhbmsgbGluZSwgaXQgd2lsbCBjb250YWluIHRoZSBidWlsdC1pbiBhbmQgdXNlci1kZWZpbmVkIGZ1bmN0aW9ucyBhbmQKK2NsYXNzZXMgaW4gdGhlIGN1cnJlbnQgbmFtZSBzcGFjZXMsIHBsdXMgYW55IG1vZHVsZXMgaW1wb3J0ZWQuIElmIHNvbWUKK2NoYXJhY3RlcnMgaGF2ZSBiZWVuIGVudGVyZWQsIHRoZSBBQ1cgd2lsbCBhdHRlbXB0IHRvIGJlIG1vcmUgc3BlY2lmaWMuCisKK0lmIGEgc3RyaW5nIG9mIGNoYXJhY3RlcnMgaXMgdHlwZWQsIHRoZSBBQ1cgc2VsZWN0aW9uIHdpbGwganVtcCB0byB0aGUKK2VudHJ5IG1vc3QgY2xvc2VseSBtYXRjaGluZyB0aG9zZSBjaGFyYWN0ZXJzLiAgRW50ZXJpbmcgYSA6a2JkOmB0YWJgIHdpbGwKK2NhdXNlIHRoZSBsb25nZXN0IG5vbi1hbWJpZ3VvdXMgbWF0Y2ggdG8gYmUgZW50ZXJlZCBpbiB0aGUgRWRpdG9yIHdpbmRvdyBvcgorU2hlbGwuICBUd28gOmtiZDpgdGFiYCBpbiBhIHJvdyB3aWxsIHN1cHBseSB0aGUgY3VycmVudCBBQ1cgc2VsZWN0aW9uLCBhcword2lsbCByZXR1cm4gb3IgYSBkb3VibGUgY2xpY2suICBDdXJzb3Iga2V5cywgUGFnZSBVcC9Eb3duLCBtb3VzZSBzZWxlY3Rpb24sCithbmQgdGhlIHNjcm9sbCB3aGVlbCBhbGwgb3BlcmF0ZSBvbiB0aGUgQUNXLgorCisiSGlkZGVuIiBhdHRyaWJ1dGVzIGNhbiBiZSBhY2Nlc3NlZCBieSB0eXBpbmcgdGhlIGJlZ2lubmluZyBvZiBoaWRkZW4KK25hbWUgYWZ0ZXIgYSAnLicsIGUuZy4gJ18nLiBUaGlzIGFsbG93cyBhY2Nlc3MgdG8gbW9kdWxlcyB3aXRoCitgYF9fYWxsX19gYCBzZXQsIG9yIHRvIGNsYXNzLXByaXZhdGUgYXR0cmlidXRlcy4KKworQ29tcGxldGlvbnMgYW5kIHRoZSAnRXhwYW5kIFdvcmQnIGZhY2lsaXR5IGNhbiBzYXZlIGEgbG90IG9mIHR5cGluZyEKKworQ29tcGxldGlvbnMgYXJlIGN1cnJlbnRseSBsaW1pdGVkIHRvIHRob3NlIGluIHRoZSBuYW1lc3BhY2VzLiBOYW1lcyBpbgorYW4gRWRpdG9yIHdpbmRvdyB3aGljaCBhcmUgbm90IHZpYSBgYF9fbWFpbl9fYGAgYW5kIDpkYXRhOmBzeXMubW9kdWxlc2Agd2lsbAorbm90IGJlIGZvdW5kLiAgUnVuIHRoZSBtb2R1bGUgb25jZSB3aXRoIHlvdXIgaW1wb3J0cyB0byBjb3JyZWN0IHRoaXMgc2l0dWF0aW9uLgorTm90ZSB0aGF0IElETEUgaXRzZWxmIHBsYWNlcyBxdWl0ZSBhIGZldyBtb2R1bGVzIGluIHN5cy5tb2R1bGVzLCBzbworbXVjaCBjYW4gYmUgZm91bmQgYnkgZGVmYXVsdCwgZS5nLiB0aGUgcmUgbW9kdWxlLgorCitJZiB5b3UgZG9uJ3QgbGlrZSB0aGUgQUNXIHBvcHBpbmcgdXAgdW5iaWRkZW4sIHNpbXBseSBtYWtlIHRoZSBkZWxheQorbG9uZ2VyIG9yIGRpc2FibGUgdGhlIGV4dGVuc2lvbi4KKworQ2FsbHRpcHMKK15eXl5eXl5eCisKK0EgY2FsbHRpcCBpcyBzaG93biB3aGVuIG9uZSB0eXBlcyA6a2JkOmAoYCBhZnRlciB0aGUgbmFtZSBvZiBhbiAqYWNjY2Vzc2libGUqCitmdW5jdGlvbi4gIEEgbmFtZSBleHByZXNzaW9uIG1heSBpbmNsdWRlIGRvdHMgYW5kIHN1YnNjcmlwdHMuICBBIGNhbGx0aXAKK3JlbWFpbnMgdW50aWwgaXQgaXMgY2xpY2tlZCwgdGhlIGN1cnNvciBpcyBtb3ZlZCBvdXQgb2YgdGhlIGFyZ3VtZW50IGFyZWEsCitvciA6a2JkOmApYCBpcyB0eXBlZC4gIFdoZW4gdGhlIGN1cnNvciBpcyBpbiB0aGUgYXJndW1lbnQgcGFydCBvZiBhIGRlZmluaXRpb24sCit0aGUgbWVudSBvciBzaG9ydGN1dCBkaXNwbGF5IGEgY2FsbHRpcC4KKworQSBjYWxsdGlwIGNvbnNpc3RzIG9mIHRoZSBmdW5jdGlvbiBzaWduYXR1cmUgYW5kIHRoZSBmaXJzdCBsaW5lIG9mIHRoZQorZG9jc3RyaW5nLiAgRm9yIGJ1aWx0aW5zIHdpdGhvdXQgYW4gYWNjZXNzaWJsZSBzaWduYXR1cmUsIHRoZSBjYWxsdGlwCitjb25zaXN0cyBvZiBhbGwgbGluZXMgdXAgdGhlIGZpZnRoIGxpbmUgb3IgdGhlIGZpcnN0IGJsYW5rIGxpbmUuICBUaGVzZQorZGV0YWlscyBtYXkgY2hhbmdlLgorCitUaGUgc2V0IG9mICphY2Nlc3NpYmxlKiBmdW5jdGlvbnMgZGVwZW5kcyBvbiB3aGF0IG1vZHVsZXMgaGF2ZSBiZWVuIGltcG9ydGVkCitpbnRvIHRoZSB1c2VyIHByb2Nlc3MsIGluY2x1ZGluZyB0aG9zZSBpbXBvcnRlZCBieSBJZGxlIGl0c2VsZiwKK2FuZCB3aGF0IGRlZmluaXRpb25zIGhhdmUgYmVlbiBydW4sIGFsbCBzaW5jZSB0aGUgbGFzdCByZXN0YXJ0LgorCitGb3IgZXhhbXBsZSwgcmVzdGFydCB0aGUgU2hlbGwgYW5kIGVudGVyIGBgaXRlcnRvb2xzLmNvdW50KGBgLiAgQSBjYWxsdGlwCithcHBlYXJzIGJlY2F1c2UgSWRsZSBpbXBvcnRzIGl0ZXJ0b29scyBpbnRvIHRoZSB1c2VyIHByb2Nlc3MgZm9yIGl0cyBvd24gdXNlLgorKFRoaXMgY291bGQgY2hhbmdlLikgIEVudGVyIGBgdHVydGxlLndyaXRlKGBgIGFuZCBub3RoaW5nIGFwcGVhcnMuICBJZGxlIGRvZXMKK25vdCBpbXBvcnQgdHVydGxlLiAgVGhlIG1lbnUgb3Igc2hvcnRjdXQgZG8gbm90aGluZyBlaXRoZXIuICBFbnRlcgorYGBpbXBvcnQgdHVydGxlYGAgYW5kIHRoZW4gYGB0dXJ0bGUud3JpdGUoYGAgd2lsbCB3b3JrLgorCitJbiBhbiBlZGl0b3IsIGltcG9ydCBzdGF0ZW1lbnRzIGhhdmUgbm8gZWZmZWN0IHVudGlsIG9uZSBydW5zIHRoZSBmaWxlLiAgT25lCittaWdodCB3YW50IHRvIHJ1biBhIGZpbGUgYWZ0ZXIgd3JpdGluZyB0aGUgaW1wb3J0IHN0YXRlbWVudHMgYXQgdGhlIHRvcCwKK29yIGltbWVkaWF0ZWx5IHJ1biBhbiBleGlzdGluZyBmaWxlIGJlZm9yZSBlZGl0aW5nLgogCiBQeXRob24gU2hlbGwgd2luZG93CiBeXl5eXl5eXl5eXl5eXl5eXl5eCiAKLSogOmtiZDpgQy1DYCBpbnRlcnJ1cHRzIGV4ZWN1dGluZyBjb21tYW5kCisqIDprYmQ6YEMtY2AgaW50ZXJydXB0cyBleGVjdXRpbmcgY29tbWFuZAogCi0qIDprYmQ6YEMtRGAgc2VuZHMgZW5kLW9mLWZpbGU7IGNsb3NlcyB3aW5kb3cgaWYgdHlwZWQgYXQgYSBgYD4+PmBgIHByb21wdAorKiA6a2JkOmBDLWRgIHNlbmRzIGVuZC1vZi1maWxlOyBjbG9zZXMgd2luZG93IGlmIHR5cGVkIGF0IGEgYGA+Pj5gYCBwcm9tcHQKIAotKiA6a2JkOmBBbHQtcGAgcmV0cmlldmVzIHByZXZpb3VzIGNvbW1hbmQgbWF0Y2hpbmcgd2hhdCB5b3UgaGF2ZSB0eXBlZAorKiA6a2JkOmBBbHQtL2AgKEV4cGFuZCB3b3JkKSBpcyBhbHNvIHVzZWZ1bCB0byByZWR1Y2UgdHlwaW5nCiAKLSogOmtiZDpgQWx0LW5gIHJldHJpZXZlcyBuZXh0CisgIENvbW1hbmQgaGlzdG9yeQogCi0qIDprYmQ6YFJldHVybmAgd2hpbGUgb24gYW55IHByZXZpb3VzIGNvbW1hbmQgcmV0cmlldmVzIHRoYXQgY29tbWFuZAorICAqIDprYmQ6YEFsdC1wYCByZXRyaWV2ZXMgcHJldmlvdXMgY29tbWFuZCBtYXRjaGluZyB3aGF0IHlvdSBoYXZlIHR5cGVkLiBPbgorICAgIE9TIFggdXNlIDprYmQ6YEMtcGAuCiAKLSogOmtiZDpgQWx0LS9gIChFeHBhbmQgd29yZCkgaXMgYWxzbyB1c2VmdWwgaGVyZQorICAqIDprYmQ6YEFsdC1uYCByZXRyaWV2ZXMgbmV4dC4gT24gT1MgWCB1c2UgOmtiZDpgQy1uYC4KIAotLi4gaW5kZXg6OiBzaW5nbGU6IGluZGVudGF0aW9uCisgICogOmtiZDpgUmV0dXJuYCB3aGlsZSBvbiBhbnkgcHJldmlvdXMgY29tbWFuZCByZXRyaWV2ZXMgdGhhdCBjb21tYW5kCiAKIAotU3ludGF4IGNvbG9ycwotLS0tLS0tLS0tLS0tLQorVGV4dCBjb2xvcnMKK15eXl5eXl5eXl5eCiAKLVRoZSBjb2xvcmluZyBpcyBhcHBsaWVkIGluIGEgYmFja2dyb3VuZCAidGhyZWFkLCIgc28geW91IG1heSBvY2Nhc2lvbmFsbHkgc2VlCi11bmNvbG9yaXplZCB0ZXh0LiAgVG8gY2hhbmdlIHRoZSBjb2xvciBzY2hlbWUsIGVkaXQgdGhlIGBgW0NvbG9yc11gYCBzZWN0aW9uIGluCi06ZmlsZTpgY29uZmlnLnR4dGAuCitJZGxlIGRlZmF1bHRzIHRvIGJsYWNrIG9uIHdoaXRlIHRleHQsIGJ1dCBjb2xvcnMgdGV4dCB3aXRoIHNwZWNpYWwgbWVhbmluZ3MuCitGb3IgdGhlIHNoZWxsLCB0aGVzZSBhcmUgc2hlbGwgb3V0cHV0LCBzaGVsbCBlcnJvciwgdXNlciBvdXRwdXQsIGFuZAordXNlciBlcnJvci4gIEZvciBQeXRob24gY29kZSwgYXQgdGhlIHNoZWxsIHByb21wdCBvciBpbiBhbiBlZGl0b3IsIHRoZXNlIGFyZQora2V5d29yZHMsIGJ1aWx0aW4gY2xhc3MgYW5kIGZ1bmN0aW9uIG5hbWVzLCBuYW1lcyBmb2xsb3dpbmcgYGBjbGFzc2BgIGFuZAorYGBkZWZgYCwgc3RyaW5ncywgYW5kIGNvbW1lbnRzLiBGb3IgYW55IHRleHQgd2luZG93LCB0aGVzZSBhcmUgdGhlIGN1cnNvciAod2hlbgorcHJlc2VudCksIGZvdW5kIHRleHQgKHdoZW4gcG9zc2libGUpLCBhbmQgc2VsZWN0ZWQgdGV4dC4KIAotUHl0aG9uIHN5bnRheCBjb2xvcnM6Ci0gICBLZXl3b3JkcwotICAgICAgb3JhbmdlCi0KLSAgIFN0cmluZ3MKLSAgICAgIGdyZWVuCi0KLSAgIENvbW1lbnRzCi0gICAgICByZWQKLQotICAgRGVmaW5pdGlvbnMKLSAgICAgIGJsdWUKLQotU2hlbGwgY29sb3JzOgotICAgQ29uc29sZSBvdXRwdXQKLSAgICAgIGJyb3duCi0KLSAgIHN0ZG91dAotICAgICAgYmx1ZQotCi0gICBzdGRlcnIKLSAgICAgIGRhcmsgZ3JlZW4KLQotICAgc3RkaW4KLSAgICAgIGJsYWNrCitUZXh0IGNvbG9yaW5nIGlzIGRvbmUgaW4gdGhlIGJhY2tncm91bmQsIHNvIHVuY29sb3JpemVkIHRleHQgaXMgb2NjYXNpb25hbGx5Cit2aXNpYmxlLiAgVG8gY2hhbmdlIHRoZSBjb2xvciBzY2hlbWUsIHVzZSB0aGUgQ29uZmlndXJlIElETEUgZGlhbG9nCitIaWdobGlnaHRpbmcgdGFiLiAgVGhlIG1hcmtpbmcgb2YgZGVidWdnZXIgYnJlYWtwb2ludCBsaW5lcyBpbiB0aGUgZWRpdG9yIGFuZAordGV4dCBpbiBwb3B1cHMgYW5kIGRpYWxvZ3MgaXMgbm90IHVzZXItY29uZmlndXJhYmxlLgogCiAKLVN0YXJ0dXAKLS0tLS0tLS0KK1N0YXJ0dXAgYW5kIGNvZGUgZXhlY3V0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBVcG9uIHN0YXJ0dXAgd2l0aCB0aGUgYGAtc2BgIG9wdGlvbiwgSURMRSB3aWxsIGV4ZWN1dGUgdGhlIGZpbGUgcmVmZXJlbmNlZCBieQogdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyA6ZW52dmFyOmBJRExFU1RBUlRVUGAgb3IgOmVudnZhcjpgUFlUSE9OU1RBUlRVUGAuCi1JZGxlIGZpcnN0IGNoZWNrcyBmb3IgYGBJRExFU1RBUlRVUGBgOyBpZiBgYElETEVTVEFSVFVQYGAgaXMgcHJlc2VudCB0aGUgZmlsZQotcmVmZXJlbmNlZCBpcyBydW4uICBJZiBgYElETEVTVEFSVFVQYGAgaXMgbm90IHByZXNlbnQsIElkbGUgY2hlY2tzIGZvcgorSURMRSBmaXJzdCBjaGVja3MgZm9yIGBgSURMRVNUQVJUVVBgYDsgaWYgYGBJRExFU1RBUlRVUGBgIGlzIHByZXNlbnQgdGhlIGZpbGUKK3JlZmVyZW5jZWQgaXMgcnVuLiAgSWYgYGBJRExFU1RBUlRVUGBgIGlzIG5vdCBwcmVzZW50LCBJRExFIGNoZWNrcyBmb3IKIGBgUFlUSE9OU1RBUlRVUGBgLiAgRmlsZXMgcmVmZXJlbmNlZCBieSB0aGVzZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlCi1jb252ZW5pZW50IHBsYWNlcyB0byBzdG9yZSBmdW5jdGlvbnMgdGhhdCBhcmUgdXNlZCBmcmVxdWVudGx5IGZyb20gdGhlIElkbGUKK2NvbnZlbmllbnQgcGxhY2VzIHRvIHN0b3JlIGZ1bmN0aW9ucyB0aGF0IGFyZSB1c2VkIGZyZXF1ZW50bHkgZnJvbSB0aGUgSURMRQogc2hlbGwsIG9yIGZvciBleGVjdXRpbmcgaW1wb3J0IHN0YXRlbWVudHMgdG8gaW1wb3J0IGNvbW1vbiBtb2R1bGVzLgogCiBJbiBhZGRpdGlvbiwgYGBUa2BgIGFsc28gbG9hZHMgYSBzdGFydHVwIGZpbGUgaWYgaXQgaXMgcHJlc2VudC4gIE5vdGUgdGhhdCB0aGUKIFRrIGZpbGUgaXMgbG9hZGVkIHVuY29uZGl0aW9uYWxseS4gIFRoaXMgYWRkaXRpb25hbCBmaWxlIGlzIGBgLklkbGUucHlgYCBhbmQgaXMKIGxvb2tlZCBmb3IgaW4gdGhlIHVzZXIncyBob21lIGRpcmVjdG9yeS4gIFN0YXRlbWVudHMgaW4gdGhpcyBmaWxlIHdpbGwgYmUKLWV4ZWN1dGVkIGluIHRoZSBUayBuYW1lc3BhY2UsIHNvIHRoaXMgZmlsZSBpcyBub3QgdXNlZnVsIGZvciBpbXBvcnRpbmcgZnVuY3Rpb25zCi10byBiZSB1c2VkIGZyb20gSWRsZSdzIFB5dGhvbiBzaGVsbC4KK2V4ZWN1dGVkIGluIHRoZSBUayBuYW1lc3BhY2UsIHNvIHRoaXMgZmlsZSBpcyBub3QgdXNlZnVsIGZvciBpbXBvcnRpbmcKK2Z1bmN0aW9ucyB0byBiZSB1c2VkIGZyb20gSURMRSdzIFB5dGhvbiBzaGVsbC4KIAogCiBDb21tYW5kIGxpbmUgdXNhZ2UKQEAgLTMyNiwyNiArNTIyLDExOCBAQAogCiA6OgogCi0gICBpZGxlLnB5IFstYyBjb21tYW5kXSBbLWRdIFstZV0gWy1zXSBbLXQgdGl0bGVdIFthcmddIC4uLgorICAgaWRsZS5weSBbLWMgY29tbWFuZF0gWy1kXSBbLWVdIFstaF0gWy1pXSBbLXIgZmlsZV0gWy1zXSBbLXQgdGl0bGVdIFstXSBbYXJnXSAuLi4KIAotICAgLWMgY29tbWFuZCAgcnVuIHRoaXMgY29tbWFuZAotICAgLWQgICAgICAgICAgZW5hYmxlIGRlYnVnZ2VyCi0gICAtZSAgICAgICAgICBlZGl0IG1vZGU7IGFyZ3VtZW50cyBhcmUgZmlsZXMgdG8gYmUgZWRpdGVkCi0gICAtcyAgICAgICAgICBydW4gJElETEVTVEFSVFVQIG9yICRQWVRIT05TVEFSVFVQIGZpcnN0CisgICAtYyBjb21tYW5kICBydW4gY29tbWFuZCBpbiB0aGUgc2hlbGwgd2luZG93CisgICAtZCAgICAgICAgICBlbmFibGUgZGVidWdnZXIgYW5kIG9wZW4gc2hlbGwgd2luZG93CisgICAtZSAgICAgICAgICBvcGVuIGVkaXRvciB3aW5kb3cKKyAgIC1oICAgICAgICAgIHByaW50IGhlbHAgbWVzc2FnZSB3aXRoIGxlZ2FsIGNvbWJpbmF0aW9zIGFuZCBleGl0CisgICAtaSAgICAgICAgICBvcGVuIHNoZWxsIHdpbmRvdworICAgLXIgZmlsZSAgICAgcnVuIGZpbGUgaW4gc2hlbGwgd2luZG93CisgICAtcyAgICAgICAgICBydW4gJElETEVTVEFSVFVQIG9yICRQWVRIT05TVEFSVFVQIGZpcnN0LCBpbiBzaGVsbCB3aW5kb3cKICAgIC10IHRpdGxlICAgIHNldCB0aXRsZSBvZiBzaGVsbCB3aW5kb3cKKyAgIC0gICAgICAgICAgIHJ1biBzdGRpbiBpbiBzaGVsbCAoLSBtdXN0IGJlIGxhc3Qgb3B0aW9uIGJlZm9yZSBhcmdzKQogCiBJZiB0aGVyZSBhcmUgYXJndW1lbnRzOgogCi0jLiBJZiBgYC1lYGAgaXMgdXNlZCwgYXJndW1lbnRzIGFyZSBmaWxlcyBvcGVuZWQgZm9yIGVkaXRpbmcgYW5kCi0gICBgYHN5cy5hcmd2YGAgcmVmbGVjdHMgdGhlIGFyZ3VtZW50cyBwYXNzZWQgdG8gSURMRSBpdHNlbGYuCisqIElmIGBgLWBgLCBgYC1jYGAsIG9yIGBgcmBgIGlzIHVzZWQsIGFsbCBhcmd1bWVudHMgYXJlIHBsYWNlZCBpbgorICBgYHN5cy5hcmd2WzE6Li4uXWBgIGFuZCBgYHN5cy5hcmd2WzBdYGAgaXMgc2V0IHRvIGBgJydgYCwgYGAnLWMnYGAsCisgIG9yIGBgJy1yJ2BgLiAgTm8gZWRpdG9yIHdpbmRvdyBpcyBvcGVuZWQsIGV2ZW4gaWYgdGhhdCBpcyB0aGUgZGVmYXVsdAorICBzZXQgaW4gdGhlIE9wdGlvbnMgZGlhbG9nLgogCi0jLiBPdGhlcndpc2UsIGlmIGBgLWNgYCBpcyB1c2VkLCBhbGwgYXJndW1lbnRzIGFyZSBwbGFjZWQgaW4KLSAgIGBgc3lzLmFyZ3ZbMTouLi5dYGAsIHdpdGggYGBzeXMuYXJndlswXWBgIHNldCB0byBgYCctYydgYC4KLQotIy4gT3RoZXJ3aXNlLCBpZiBuZWl0aGVyIGBgLWVgYCBub3IgYGAtY2BgIGlzIHVzZWQsIHRoZSBmaXJzdAotICAgYXJndW1lbnQgaXMgYSBzY3JpcHQgd2hpY2ggaXMgZXhlY3V0ZWQgd2l0aCB0aGUgcmVtYWluaW5nIGFyZ3VtZW50cyBpbgotICAgYGBzeXMuYXJndlsxOi4uLl1gYCAgYW5kIGBgc3lzLmFyZ3ZbMF1gYCBzZXQgdG8gdGhlIHNjcmlwdCBuYW1lLiAgSWYgdGhlIHNjcmlwdAotICAgbmFtZSBpcyAnLScsIG5vIHNjcmlwdCBpcyBleGVjdXRlZCBidXQgYW4gaW50ZXJhY3RpdmUgUHl0aG9uIHNlc3Npb24gaXMgc3RhcnRlZDsKLSAgIHRoZSBhcmd1bWVudHMgYXJlIHN0aWxsIGF2YWlsYWJsZSBpbiBgYHN5cy5hcmd2YGAuCisqIE90aGVyd2lzZSwgYXJndW1lbnRzIGFyZSBmaWxlcyBvcGVuZWQgZm9yIGVkaXRpbmcgYW5kCisgIGBgc3lzLmFyZ3ZgYCByZWZsZWN0cyB0aGUgYXJndW1lbnRzIHBhc3NlZCB0byBJRExFIGl0c2VsZi4KIAogCitJRExFLWNvbnNvbGUgZGlmZmVyZW5jZXMKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorCitBcyBtdWNoIGFzIHBvc3NpYmxlLCB0aGUgcmVzdWx0IG9mIGV4ZWN1dGluZyBQeXRob24gY29kZSB3aXRoIElETEUgaXMgdGhlCitzYW1lIGFzIGV4ZWN1dGluZyB0aGUgc2FtZSBjb2RlIGluIGEgY29uc29sZSB3aW5kb3cuICBIb3dldmVyLCB0aGUgZGlmZmVyZW50CitpbnRlcmZhY2UgYW5kIG9wZXJhdGlvbiBvY2Nhc2lvbmFsbHkgYWZmZWN0cyByZXN1bHRzLgorCitGb3IgaW5zdGFuY2UsIElETEUgbm9ybWFsbHkgZXhlY3V0ZXMgdXNlciBjb2RlIGluIGEgc2VwYXJhdGUgcHJvY2VzcyBmcm9tCit0aGUgSURMRSBHVUkgaXRzZWxmLiAgVGhlIElETEUgdmVyc2lvbnMgb2Ygc3lzLnN0ZGluLCAuc3Rkb3V0LCBhbmQgLnN0ZGVyciBpbiB0aGUKK2V4ZWN1dGlvbiBwcm9jZXNzIGdldCBpbnB1dCBmcm9tIGFuZCBzZW5kIG91dHB1dCB0byB0aGUgR1VJIHByb2Nlc3MsCit3aGljaCBrZWVwcyBjb250cm9sIG9mIHRoZSBrZXlib2FyZCBhbmQgc2NyZWVuLiAgVGhpcyBpcyBub3JtYWxseSB0cmFuc3BhcmVudCwKK2J1dCBjb2RlIHRoYXQgYWNjZXNzIHRoZXNlIG9iamVjdCB3aWxsIHNlZSBkaWZmZXJlbnQgYXR0cmlidXRlIHZhbHVlcy4KK0Fsc28sIGZ1bmN0aW9ucyB0aGF0IGRpcmVjdGx5IGFjY2VzcyB0aGUga2V5Ym9hcmQgYW5kIHNjcmVlbiB3aWxsIG5vdCB3b3JrLgorCitXaXRoIElETEUncyBTaGVsbCwgb25lIGVudGVycywgZWRpdHMsIGFuZCByZWNhbGxzIGNvbXBsZXRlIHN0YXRlbWVudHMuCitTb21lIGNvbnNvbGVzIG9ubHkgd29yayB3aXRoIGEgc2luZ2xlIHBoeXNpY2FsIGxpbmUgYXQgYSB0aW1lLgorCitSdW5uaW5nIHdpdGhvdXQgYSBzdWJwcm9jZXNzCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKK0J5IGRlZmF1bHQsIElETEUgZXhlY3V0ZXMgdXNlciBjb2RlIGluIGEgc2VwYXJhdGUgc3VicHJvY2VzcyB2aWEgYSBzb2NrZXQsCit3aGljaCB1c2VzIHRoZSBpbnRlcm5hbCBsb29wYmFjayBpbnRlcmZhY2UuICBUaGlzIGNvbm5lY3Rpb24gaXMgbm90CitleHRlcm5hbGx5IHZpc2libGUgYW5kIG5vIGRhdGEgaXMgc2VudCB0byBvciByZWNlaXZlZCBmcm9tIHRoZSBJbnRlcm5ldC4KK0lmIGZpcmV3YWxsIHNvZnR3YXJlIGNvbXBsYWlucyBhbnl3YXksIHlvdSBjYW4gaWdub3JlIGl0LgorCitJZiB0aGUgYXR0ZW1wdCB0byBtYWtlIHRoZSBzb2NrZXQgY29ubmVjdGlvbiBmYWlscywgSWRsZSB3aWxsIG5vdGlmeSB5b3UuCitTdWNoIGZhaWx1cmVzIGFyZSBzb21ldGltZXMgdHJhbnNpZW50LCBidXQgaWYgcGVyc2lzdGVudCwgdGhlIHByb2JsZW0KK21heSBiZSBlaXRoZXIgYSBmaXJld2FsbCBibG9ja2luZyB0aGUgY29ubmVjdG9uIG9yIG1pc2NvbmZpZ3VyYXRpb24gb2YKK2EgcGFydGljdWxhciBzeXN0ZW0uICBVbnRpbCB0aGUgcHJvYmxlbSBpcyBmaXhlZCwgb25lIGNhbiBydW4gSWRsZSB3aXRoCit0aGUgLW4gY29tbWFuZCBsaW5lIHN3aXRjaC4KKworSWYgSURMRSBpcyBzdGFydGVkIHdpdGggdGhlIC1uIGNvbW1hbmQgbGluZSBzd2l0Y2ggaXQgd2lsbCBydW4gaW4gYQorc2luZ2xlIHByb2Nlc3MgYW5kIHdpbGwgbm90IGNyZWF0ZSB0aGUgc3VicHJvY2VzcyB3aGljaCBydW5zIHRoZSBSUEMKK1B5dGhvbiBleGVjdXRpb24gc2VydmVyLiAgVGhpcyBjYW4gYmUgdXNlZnVsIGlmIFB5dGhvbiBjYW5ub3QgY3JlYXRlCit0aGUgc3VicHJvY2VzcyBvciB0aGUgUlBDIHNvY2tldCBpbnRlcmZhY2Ugb24geW91ciBwbGF0Zm9ybS4gIEhvd2V2ZXIsCitpbiB0aGlzIG1vZGUgdXNlciBjb2RlIGlzIG5vdCBpc29sYXRlZCBmcm9tIElETEUgaXRzZWxmLiAgQWxzbywgdGhlCitlbnZpcm9ubWVudCBpcyBub3QgcmVzdGFydGVkIHdoZW4gUnVuL1J1biBNb2R1bGUgKEY1KSBpcyBzZWxlY3RlZC4gIElmCit5b3VyIGNvZGUgaGFzIGJlZW4gbW9kaWZpZWQsIHlvdSBtdXN0IHJlbG9hZCgpIHRoZSBhZmZlY3RlZCBtb2R1bGVzIGFuZAorcmUtaW1wb3J0IGFueSBzcGVjaWZpYyBpdGVtcyAoZS5nLiBmcm9tIGZvbyBpbXBvcnQgYmF6KSBpZiB0aGUgY2hhbmdlcworYXJlIHRvIHRha2UgZWZmZWN0LiAgRm9yIHRoZXNlIHJlYXNvbnMsIGl0IGlzIHByZWZlcmFibGUgdG8gcnVuIElETEUKK3dpdGggdGhlIGRlZmF1bHQgc3VicHJvY2VzcyBpZiBhdCBhbGwgcG9zc2libGUuCisKKy4uIGRlcHJlY2F0ZWQ6OiAzLjQKKworCitIZWxwIGFuZCBwcmVmZXJlbmNlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQWRkaXRpb25hbCBoZWxwIHNvdXJjZXMKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKK0lETEUgaW5jbHVkZXMgYSBoZWxwIG1lbnUgZW50cnkgY2FsbGVkICJQeXRob24gRG9jcyIgdGhhdCB3aWxsIG9wZW4gdGhlCitleHRlbnNpdmUgc291cmNlcyBvZiBoZWxwLCBpbmNsdWRpbmcgdHV0b3JpYWxzLCBhdmFpbGFibGUgYXQgZG9jcy5weXRob24ub3JnLgorU2VsZWN0ZWQgVVJMcyBjYW4gYmUgYWRkZWQgb3IgcmVtb3ZlZCBmcm9tIHRoZSBoZWxwIG1lbnUgYXQgYW55IHRpbWUgdXNpbmcgdGhlCitDb25maWd1cmUgSURMRSBkaWFsb2cuIFNlZSB0aGUgSURMRSBoZWxwIG9wdGlvbiBpbiB0aGUgaGVscCBtZW51IG9mIElETEUgZm9yCittb3JlIGluZm9ybWF0aW9uLgorCisKK1NldHRpbmcgcHJlZmVyZW5jZXMKK15eXl5eXl5eXl5eXl5eXl5eXl4KKworVGhlIGZvbnQgcHJlZmVyZW5jZXMsIGhpZ2hsaWdodGluZywga2V5cywgYW5kIGdlbmVyYWwgcHJlZmVyZW5jZXMgY2FuIGJlCitjaGFuZ2VkIHZpYSBDb25maWd1cmUgSURMRSBvbiB0aGUgT3B0aW9uIG1lbnUuICBLZXlzIGNhbiBiZSB1c2VyIGRlZmluZWQ7CitJRExFIHNoaXBzIHdpdGggZm91ciBidWlsdCBpbiBrZXkgc2V0cy4gSW4gYWRkaXRpb24gYSB1c2VyIGNhbiBjcmVhdGUgYQorY3VzdG9tIGtleSBzZXQgaW4gdGhlIENvbmZpZ3VyZSBJRExFIGRpYWxvZyB1bmRlciB0aGUga2V5cyB0YWIuCisKKworRXh0ZW5zaW9ucworXl5eXl5eXl5eXgorCitJRExFIGNvbnRhaW5zIGFuIGV4dGVuc2lvbiBmYWNpbGl0eS4gIFBlZmVyZW5jZXMgZm9yIGV4dGVuc2lvbnMgY2FuIGJlCitjaGFuZ2VkIHdpdGggQ29uZmlndXJlIEV4dGVuc2lvbnMuIFNlZSB0aGUgYmVnaW5uaW5nIG9mIGNvbmZpZy1leHRlbnNpb25zLmRlZgoraW4gdGhlIGlkbGVsaWIgZGlyZWN0b3J5IGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uLiAgVGhlIGRlZmF1bHQgZXh0ZW5zaW9ucworYXJlIGN1cnJlbnRseToKKworKiBGb3JtYXRQYXJhZ3JhcGgKKworKiBBdXRvRXhwYW5kCisKKyogWm9vbUhlaWdodAorCisqIFNjcmlwdEJpbmRpbmcKKworKiBDYWxsVGlwcworCisqIFBhcmVuTWF0Y2gKKworKiBBdXRvQ29tcGxldGUKKworKiBDb2RlQ29udGV4dAorCisqIFJzdHJpcEV4dGVuc2lvbgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvaW1hcGxpYi5yc3QgYi9Eb2MvbGlicmFyeS9pbWFwbGliLnJzdAppbmRleCAwMTIzNmZiLi5mYTczNmZlIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9pbWFwbGliLnJzdAorKysgYi9Eb2MvbGlicmFyeS9pbWFwbGliLnJzdApAQCAtNjksMTcgKzY5LDI1IEBACiAgICBUaGlzIGlzIGEgc3ViY2xhc3MgZGVyaXZlZCBmcm9tIDpjbGFzczpgSU1BUDRgIHRoYXQgY29ubmVjdHMgb3ZlciBhbiBTU0wKICAgIGVuY3J5cHRlZCBzb2NrZXQgKHRvIHVzZSB0aGlzIGNsYXNzIHlvdSBuZWVkIGEgc29ja2V0IG1vZHVsZSB0aGF0IHdhcyBjb21waWxlZAogICAgd2l0aCBTU0wgc3VwcG9ydCkuICBJZiAqaG9zdCogaXMgbm90IHNwZWNpZmllZCwgYGAnJ2BgICh0aGUgbG9jYWwgaG9zdCkgaXMgdXNlZC4KLSAgIElmICpwb3J0KiBpcyBvbWl0dGVkLCB0aGUgc3RhbmRhcmQgSU1BUDQtb3Zlci1TU0wgcG9ydCAoOTkzKSBpcyB1c2VkLiAgKmtleWZpbGUqCi0gICBhbmQgKmNlcnRmaWxlKiBhcmUgYWxzbyBvcHRpb25hbCAtIHRoZXkgY2FuIGNvbnRhaW4gYSBQRU0gZm9ybWF0dGVkIHByaXZhdGUga2V5Ci0gICBhbmQgY2VydGlmaWNhdGUgY2hhaW4gZmlsZSBmb3IgdGhlIFNTTCBjb25uZWN0aW9uLiAqc3NsX2NvbnRleHQqIHBhcmFtZXRlciBpcyBhCi0gICA6Y2xhc3M6YHNzbC5TU0xDb250ZXh0YCBvYmplY3Qgd2hpY2ggYWxsb3dzIGJ1bmRsaW5nIFNTTCBjb25maWd1cmF0aW9uCi0gICBvcHRpb25zLCBjZXJ0aWZpY2F0ZXMgYW5kIHByaXZhdGUga2V5cyBpbnRvIGEgc2luZ2xlIChwb3RlbnRpYWxseSBsb25nLWxpdmVkKQotICAgc3RydWN0dXJlLiBOb3RlIHRoYXQgdGhlICprZXlmaWxlKi8qY2VydGZpbGUqIHBhcmFtZXRlcnMgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSB3aXRoICpzc2xfY29udGV4dCosCi0gICBhIDpjbGFzczpgVmFsdWVFcnJvcmAgaXMgcmFpc2VkIGlmICprZXlmaWxlKi8qY2VydGZpbGUqIGlzIHByb3ZpZGVkIGFsb25nIHdpdGggKnNzbF9jb250ZXh0Ki4KKyAgIElmICpwb3J0KiBpcyBvbWl0dGVkLCB0aGUgc3RhbmRhcmQgSU1BUDQtb3Zlci1TU0wgcG9ydCAoOTkzKSBpcyB1c2VkLgorICAgKnNzbF9jb250ZXh0KiBpcyBhIDpjbGFzczpgc3NsLlNTTENvbnRleHRgIG9iamVjdCB3aGljaCBhbGxvd3MgYnVuZGxpbmcKKyAgIFNTTCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGNlcnRpZmljYXRlcyBhbmQgcHJpdmF0ZSBrZXlzIGludG8gYSBzaW5nbGUKKyAgIChwb3RlbnRpYWxseSBsb25nLWxpdmVkKSBzdHJ1Y3R1cmUuICBQbGVhc2UgcmVhZCA6cmVmOmBzc2wtc2VjdXJpdHlgIGZvcgorICAgYmVzdCBwcmFjdGljZXMuCisKKyAgICprZXlmaWxlKiBhbmQgKmNlcnRmaWxlKiBhcmUgYSBsZWdhY3kgYWx0ZXJuYXRpdmUgdG8gKnNzbF9jb250ZXh0KiAtIHRoZXkKKyAgIGNhbiBwb2ludCB0byBQRU0tZm9ybWF0dGVkIHByaXZhdGUga2V5IGFuZCBjZXJ0aWZpY2F0ZSBjaGFpbiBmaWxlcyBmb3IKKyAgIHRoZSBTU0wgY29ubmVjdGlvbi4gIE5vdGUgdGhhdCB0aGUgKmtleWZpbGUqLypjZXJ0ZmlsZSogcGFyYW1ldGVycyBhcmUKKyAgIG11dHVhbGx5IGV4Y2x1c2l2ZSB3aXRoICpzc2xfY29udGV4dCosIGEgOmNsYXNzOmBWYWx1ZUVycm9yYCBpcyByYWlzZWQKKyAgIGlmICprZXlmaWxlKi8qY2VydGZpbGUqIGlzIHByb3ZpZGVkIGFsb25nIHdpdGggKnNzbF9jb250ZXh0Ki4KIAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKICAgICAgICpzc2xfY29udGV4dCogcGFyYW1ldGVyIGFkZGVkLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVGhlIGNsYXNzIG5vdyBzdXBwb3J0cyBob3N0bmFtZSBjaGVjayB3aXRoCisgICAgICA6YXR0cjpgc3NsLlNTTENvbnRleHQuY2hlY2tfaG9zdG5hbWVgIGFuZCAqU2VydmVyIE5hbWUgSW5kaWNhdGlvbiogKHNlZQorICAgICAgOmRhdGE6YHNzbC5IQVNfU05JYCkuCiAKIFRoZSBzZWNvbmQgc3ViY2xhc3MgYWxsb3dzIGZvciBjb25uZWN0aW9ucyBjcmVhdGVkIGJ5IGEgY2hpbGQgcHJvY2VzczoKIApAQCAtNDMzLDEwICs0NDEsMTYgQEAKIAogICAgU2VuZCBhIGBgU1RBUlRUTFNgYCBjb21tYW5kLiAgVGhlICpzc2xfY29udGV4dCogYXJndW1lbnQgaXMgb3B0aW9uYWwKICAgIGFuZCBzaG91bGQgYmUgYSA6Y2xhc3M6YHNzbC5TU0xDb250ZXh0YCBvYmplY3QuICBUaGlzIHdpbGwgZW5hYmxlCi0gICBlbmNyeXB0aW9uIG9uIHRoZSBJTUFQIGNvbm5lY3Rpb24uCisgICBlbmNyeXB0aW9uIG9uIHRoZSBJTUFQIGNvbm5lY3Rpb24uICBQbGVhc2UgcmVhZCA6cmVmOmBzc2wtc2VjdXJpdHlgIGZvcgorICAgYmVzdCBwcmFjdGljZXMuCiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVGhlIG1ldGhvZCBub3cgc3VwcG9ydHMgaG9zdG5hbWUgY2hlY2sgd2l0aAorICAgICAgOmF0dHI6YHNzbC5TU0xDb250ZXh0LmNoZWNrX2hvc3RuYW1lYCBhbmQgKlNlcnZlciBOYW1lIEluZGljYXRpb24qIChzZWUKKyAgICAgIDpkYXRhOmBzc2wuSEFTX1NOSWApLgorCiAKIC4uIG1ldGhvZDo6IElNQVA0LnN0YXR1cyhtYWlsYm94LCBuYW1lcykKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvaW1wLnJzdCBiL0RvYy9saWJyYXJ5L2ltcC5yc3QKaW5kZXggMzY0ZDgxZS4uODNhNTJlNCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvaW1wLnJzdAorKysgYi9Eb2MvbGlicmFyeS9pbXAucnN0CkBAIC0zLDcgKzMsMTAgQEAKIAogLi4gbW9kdWxlOjogaW1wCiAgICA6c3lub3BzaXM6IEFjY2VzcyB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIGltcG9ydCBzdGF0ZW1lbnQuCisgICA6ZGVwcmVjYXRlZDoKIAorLi4gZGVwcmVjYXRlZDo6IDMuNAorICAgVGhlIDptb2Q6YGltcGAgcGFja2FnZSBpcyBwZW5kaW5nIGRlcHJlY2F0aW9uIGluIGZhdm9yIG9mIDptb2Q6YGltcG9ydGxpYmAuCiAKIC4uIGluZGV4Ojogc3RhdGVtZW50OiBpbXBvcnQKIApAQCAtMTEsMTAgKzE0LDYgQEAKIDprZXl3b3JkOmBpbXBvcnRgIHN0YXRlbWVudC4gIEl0IGRlZmluZXMgdGhlIGZvbGxvd2luZyBjb25zdGFudHMgYW5kIGZ1bmN0aW9uczoKIAogCi0uLiBub3RlOjoKLSAgIE5ldyBwcm9ncmFtcyBzaG91bGQgdXNlIDptb2Q6YGltcG9ydGxpYmAgcmF0aGVyIHRoYW4gdGhpcyBtb2R1bGUuCi0KLQogLi4gZnVuY3Rpb246OiBnZXRfbWFnaWMoKQogCiAgICAuLiBpbmRleDo6IHBhaXI6IGZpbGU7IGJ5dGUtY29kZQpAQCAtMjIsNiArMjEsOSBAQAogICAgUmV0dXJuIHRoZSBtYWdpYyBzdHJpbmcgdmFsdWUgdXNlZCB0byByZWNvZ25pemUgYnl0ZS1jb21waWxlZCBjb2RlIGZpbGVzCiAgICAoOmZpbGU6YC5weWNgIGZpbGVzKS4gIChUaGlzIHZhbHVlIG1heSBiZSBkaWZmZXJlbnQgZm9yIGVhY2ggUHl0aG9uIHZlcnNpb24uKQogCisgICAuLiBkZXByZWNhdGVkOjogMy40CisgICAgICAgVXNlIDphdHRyOmBpbXBvcnRsaWIudXRpbC5NQUdJQ19OVU1CRVJgIGluc3RlYWQuCisKIAogLi4gZnVuY3Rpb246OiBnZXRfc3VmZml4ZXMoKQogCkBAIC03Nyw3ICs3OSw5IEBACiAgICBXaGVuICpQKiBpdHNlbGYgaGFzIGEgZG90dGVkIG5hbWUsIGFwcGx5IHRoaXMgcmVjaXBlIHJlY3Vyc2l2ZWx5LgogCiAgICAuLiBkZXByZWNhdGVkOjogMy4zCi0gICAgICBVc2UgOmZ1bmM6YGltcG9ydGxpYi5maW5kX2xvYWRlcmAgaW5zdGVhZC4KKyAgICAgIFVzZSA6ZnVuYzpgaW1wb3J0bGliLnV0aWwuZmluZF9zcGVjYCBpbnN0ZWFkIHVubGVzcyBQeXRob24gMy4zCisgICAgICBjb21wYXRpYmlsaXR5IGlzIHJlcXVpcmVkLCBpbiB3aGljaCBjYXNlIHVzZQorICAgICAgOmZ1bmM6YGltcG9ydGxpYi5maW5kX2xvYWRlcmAuCiAKIAogLi4gZnVuY3Rpb246OiBsb2FkX21vZHVsZShuYW1lLCBmaWxlLCBwYXRobmFtZSwgZGVzY3JpcHRpb24pCkBAIC0xMDEsOCArMTA1LDEyIEBACiAgICB1c2luZyBhIDprZXl3b3JkOmB0cnlgIC4uLiA6a2V5d29yZDpgZmluYWxseWAgc3RhdGVtZW50LgogCiAgICAuLiBkZXByZWNhdGVkOjogMy4zCi0gICAgICBVbm5lZWRlZCBhcyBsb2FkZXJzIHNob3VsZCBiZSB1c2VkIHRvIGxvYWQgbW9kdWxlcyBhbmQKLSAgICAgIDpmdW5jOmBmaW5kX21vZHVsZWAgaXMgZGVwcmVjYXRlZC4KKyAgICAgIElmIHByZXZpb3VzbHkgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIDpmdW5jOmBpbXAuZmluZF9tb2R1bGVgIHRoZW4KKyAgICAgIGNvbnNpZGVyIHVzaW5nIDpmdW5jOmBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZWAsIG90aGVyd2lzZSB1c2UgdGhlIGxvYWRlcgorICAgICAgcmV0dXJuZWQgYnkgdGhlIHJlcGxhY2VtZW50IHlvdSBjaG9zZSBmb3IgOmZ1bmM6YGltcC5maW5kX21vZHVsZWAuIElmIHlvdQorICAgICAgY2FsbGVkIDpmdW5jOmBpbXAubG9hZF9tb2R1bGVgIGFuZCByZWxhdGVkIGZ1bmN0aW9ucyBkaXJlY3RseSB0aGVuIHVzZSB0aGUKKyAgICAgIGNsYXNzZXMgaW4gOm1vZDpgaW1wb3J0bGliLm1hY2hpbmVyeWAsIGUuZy4KKyAgICAgIGBgaW1wb3J0bGliLm1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyKG5hbWUsIHBhdGgpLmxvYWRfbW9kdWxlKClgYC4KIAogCiAuLiBmdW5jdGlvbjo6IG5ld19tb2R1bGUobmFtZSkKQEAgLTExMCw2ICsxMTgsOSBAQAogICAgUmV0dXJuIGEgbmV3IGVtcHR5IG1vZHVsZSBvYmplY3QgY2FsbGVkICpuYW1lKi4gIFRoaXMgb2JqZWN0IGlzICpub3QqIGluc2VydGVkCiAgICBpbiBgYHN5cy5tb2R1bGVzYGAuCiAKKyAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjQKKyAgICAgIFVzZSA6Y2xhc3M6YHR5cGVzLk1vZHVsZVR5cGVgIGluc3RlYWQuCisKIAogLi4gZnVuY3Rpb246OiByZWxvYWQobW9kdWxlKQogCkBAIC0xMzgsMTIgKzE0OSw2IEBACiAKICAgIFRoZXJlIGFyZSBhIG51bWJlciBvZiBvdGhlciBjYXZlYXRzOgogCi0gICBJZiBhIG1vZHVsZSBpcyBzeW50YWN0aWNhbGx5IGNvcnJlY3QgYnV0IGl0cyBpbml0aWFsaXphdGlvbiBmYWlscywgdGhlIGZpcnN0Ci0gICA6a2V5d29yZDpgaW1wb3J0YCBzdGF0ZW1lbnQgZm9yIGl0IGRvZXMgbm90IGJpbmQgaXRzIG5hbWUgbG9jYWxseSwgYnV0IGRvZXMKLSAgIHN0b3JlIGEgKHBhcnRpYWxseSBpbml0aWFsaXplZCkgbW9kdWxlIG9iamVjdCBpbiBgYHN5cy5tb2R1bGVzYGAuICBUbyByZWxvYWQgdGhlCi0gICBtb2R1bGUgeW91IG11c3QgZmlyc3QgOmtleXdvcmQ6YGltcG9ydGAgaXQgYWdhaW4gKHRoaXMgd2lsbCBiaW5kIHRoZSBuYW1lIHRvIHRoZQotICAgcGFydGlhbGx5IGluaXRpYWxpemVkIG1vZHVsZSBvYmplY3QpIGJlZm9yZSB5b3UgY2FuIDpmdW5jOmByZWxvYWRgIGl0LgotCiAgICBXaGVuIGEgbW9kdWxlIGlzIHJlbG9hZGVkLCBpdHMgZGljdGlvbmFyeSAoY29udGFpbmluZyB0aGUgbW9kdWxlJ3MgZ2xvYmFsCiAgICB2YXJpYWJsZXMpIGlzIHJldGFpbmVkLiAgUmVkZWZpbml0aW9ucyBvZiBuYW1lcyB3aWxsIG92ZXJyaWRlIHRoZSBvbGQKICAgIGRlZmluaXRpb25zLCBzbyB0aGlzIGlzIGdlbmVyYWxseSBub3QgYSBwcm9ibGVtLiAgSWYgdGhlIG5ldyB2ZXJzaW9uIG9mIGEgbW9kdWxlCkBAIC0xNzYsNiArMTgxLDkgQEAKICAgICAgIFJlbGllcyBvbiBib3RoIGBgX19uYW1lX19gYCBhbmQgYGBfX2xvYWRlcl9fYGAgYmVpbmcgZGVmaW5lZCBvbiB0aGUgbW9kdWxlCiAgICAgICBiZWluZyByZWxvYWRlZCBpbnN0ZWFkIG9mIGp1c3QgYGBfX25hbWVfX2BgLgogCisgICAuLiBkZXByZWNhdGVkOjogMy40CisgICAgICBVc2UgOmZ1bmM6YGltcG9ydGxpYi5yZWxvYWRgIGluc3RlYWQuCisKIAogVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYXJlIGNvbnZlbmllbmNlcyBmb3IgaGFuZGxpbmcgOnBlcDpgMzE0N2AgYnl0ZS1jb21waWxlZAogZmlsZSBwYXRocy4KQEAgLTIwMSw2ICsyMDksOSBAQAogICAgICAgSWYgOmF0dHI6YHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWdgIGlzIGBgTm9uZWBgLCB0aGVuCiAgICAgICA6ZXhjOmBOb3RJbXBsZW1lbnRlZEVycm9yYCBpcyByYWlzZWQuCiAKKyAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjQKKyAgICAgIFVzZSA6ZnVuYzpgaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2VgIGluc3RlYWQuCisKIAogLi4gZnVuY3Rpb246OiBzb3VyY2VfZnJvbV9jYWNoZShwYXRoKQogCkBAIC0yMTYsMTQgKzIyNywxNyBAQAogICAgICAgUmFpc2UgOmV4YzpgTm90SW1wbGVtZW50ZWRFcnJvcmAgd2hlbgogICAgICAgOmF0dHI6YHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWdgIGlzIG5vdCBkZWZpbmVkLgogCisgICAuLiBkZXByZWNhdGVkOjogMy40CisgICAgICBVc2UgOmZ1bmM6YGltcG9ydGxpYi51dGlsLnNvdXJjZV9mcm9tX2NhY2hlYCBpbnN0ZWFkLgorCiAKIC4uIGZ1bmN0aW9uOjogZ2V0X3RhZygpCiAKICAgIFJldHVybiB0aGUgOnBlcDpgMzE0N2AgbWFnaWMgdGFnIHN0cmluZyBtYXRjaGluZyB0aGlzIHZlcnNpb24gb2YgUHl0aG9uJ3MKICAgIG1hZ2ljIG51bWJlciwgYXMgcmV0dXJuZWQgYnkgOmZ1bmM6YGdldF9tYWdpY2AuCiAKLSAgIC4uIG5vdGU6OgotICAgICAgWW91IG1heSB1c2UgOmF0dHI6YHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWdgIGRpcmVjdGx5IHN0YXJ0aW5nCisgICAuLiBkZXByZWNhdGVkOjogMy40CisgICAgICBVc2UgOmF0dHI6YHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWdgIGRpcmVjdGx5IHN0YXJ0aW5nCiAgICAgICBpbiBQeXRob24gMy4zLgogCiAKQEAgLTI0NiwxMCArMjYwLDEyIEBACiAgICBleGNlcHRpb24gaXMgbWFkZSBmb3IgY2lyY3VsYXIgaW1wb3J0cywgd2hpY2ggYnkgY29uc3RydWN0aW9uIGhhdmUgdG8KICAgIGV4cG9zZSBhbiBpbmNvbXBsZXRlIG1vZHVsZSBvYmplY3QgYXQgc29tZSBwb2ludC4KIAotLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKLSAgIFRoZSBsb2NraW5nIHNjaGVtZSBoYXMgY2hhbmdlZCB0byBwZXItbW9kdWxlIGxvY2tzIGZvcgotICAgdGhlIG1vc3QgcGFydC4gIEEgZ2xvYmFsIGltcG9ydCBsb2NrIGlzIGtlcHQgZm9yIHNvbWUgY3JpdGljYWwgdGFza3MsCi0gICBzdWNoIGFzIGluaXRpYWxpemluZyB0aGUgcGVyLW1vZHVsZSBsb2Nrcy4KKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCisgICAgICBUaGUgbG9ja2luZyBzY2hlbWUgaGFzIGNoYW5nZWQgdG8gcGVyLW1vZHVsZSBsb2NrcyBmb3IKKyAgICAgIHRoZSBtb3N0IHBhcnQuICBBIGdsb2JhbCBpbXBvcnQgbG9jayBpcyBrZXB0IGZvciBzb21lIGNyaXRpY2FsIHRhc2tzLAorICAgICAgc3VjaCBhcyBpbml0aWFsaXppbmcgdGhlIHBlci1tb2R1bGUgbG9ja3MuCisKKyAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjQKIAogCiAuLiBmdW5jdGlvbjo6IGFjcXVpcmVfbG9jaygpCkBAIC0yNjQsMTAgKzI4MCwxMiBAQAogCiAgICBPbiBwbGF0Zm9ybXMgd2l0aG91dCB0aHJlYWRzLCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90aGluZy4KIAotLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKLSAgIFRoZSBsb2NraW5nIHNjaGVtZSBoYXMgY2hhbmdlZCB0byBwZXItbW9kdWxlIGxvY2tzIGZvcgotICAgdGhlIG1vc3QgcGFydC4gIEEgZ2xvYmFsIGltcG9ydCBsb2NrIGlzIGtlcHQgZm9yIHNvbWUgY3JpdGljYWwgdGFza3MsCi0gICBzdWNoIGFzIGluaXRpYWxpemluZyB0aGUgcGVyLW1vZHVsZSBsb2Nrcy4KKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCisgICAgICBUaGUgbG9ja2luZyBzY2hlbWUgaGFzIGNoYW5nZWQgdG8gcGVyLW1vZHVsZSBsb2NrcyBmb3IKKyAgICAgIHRoZSBtb3N0IHBhcnQuICBBIGdsb2JhbCBpbXBvcnQgbG9jayBpcyBrZXB0IGZvciBzb21lIGNyaXRpY2FsIHRhc2tzLAorICAgICAgc3VjaCBhcyBpbml0aWFsaXppbmcgdGhlIHBlci1tb2R1bGUgbG9ja3MuCisKKyAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjQKIAogCiAuLiBmdW5jdGlvbjo6IHJlbGVhc2VfbG9jaygpCkBAIC0yNzUsMTAgKzI5MywxMiBAQAogICAgUmVsZWFzZSB0aGUgaW50ZXJwcmV0ZXIncyBnbG9iYWwgaW1wb3J0IGxvY2suIE9uIHBsYXRmb3JtcyB3aXRob3V0CiAgICB0aHJlYWRzLCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90aGluZy4KIAotLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKLSAgIFRoZSBsb2NraW5nIHNjaGVtZSBoYXMgY2hhbmdlZCB0byBwZXItbW9kdWxlIGxvY2tzIGZvcgotICAgdGhlIG1vc3QgcGFydC4gIEEgZ2xvYmFsIGltcG9ydCBsb2NrIGlzIGtlcHQgZm9yIHNvbWUgY3JpdGljYWwgdGFza3MsCi0gICBzdWNoIGFzIGluaXRpYWxpemluZyB0aGUgcGVyLW1vZHVsZSBsb2Nrcy4KKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCisgICAgICBUaGUgbG9ja2luZyBzY2hlbWUgaGFzIGNoYW5nZWQgdG8gcGVyLW1vZHVsZSBsb2NrcyBmb3IKKyAgICAgIHRoZSBtb3N0IHBhcnQuICBBIGdsb2JhbCBpbXBvcnQgbG9jayBpcyBrZXB0IGZvciBzb21lIGNyaXRpY2FsIHRhc2tzLAorICAgICAgc3VjaCBhcyBpbml0aWFsaXppbmcgdGhlIHBlci1tb2R1bGUgbG9ja3MuCisKKyAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjQKIAogCiBUaGUgZm9sbG93aW5nIGNvbnN0YW50cyB3aXRoIGludGVnZXIgdmFsdWVzLCBkZWZpbmVkIGluIHRoaXMgbW9kdWxlLCBhcmUgdXNlZApAQCAtMzQ1LDYgKzM2NSw5IEBACiAgICAgICBgYE5vbmVgYCBpcyBpbnNlcnRlZCBpbnRvIGBgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGVgYCBpbnN0ZWFkIG9mIGFuCiAgICAgICBpbnN0YW5jZSBvZiA6Y2xhc3M6YE51bGxJbXBvcnRlcmAuCiAKKyAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjQKKyAgICAgIEluc2VydCBgYE5vbmVgYCBpbnRvIGBgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGVgYCBpbnN0ZWFkLgorCiAKIC4uIF9leGFtcGxlcy1pbXA6CiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2ltcG9ydGxpYi5yc3QgYi9Eb2MvbGlicmFyeS9pbXBvcnRsaWIucnN0CmluZGV4IDVmNzQwYTIuLjQyODEyZjYgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2ltcG9ydGxpYi5yc3QKKysrIGIvRG9jL2xpYnJhcnkvaW1wb3J0bGliLnJzdApAQCAtMjksNyArMjksNyBAQAogICAgIDpyZWY6YGltcG9ydGAKICAgICAgICAgVGhlIGxhbmd1YWdlIHJlZmVyZW5jZSBmb3IgdGhlIDprZXl3b3JkOmBpbXBvcnRgIHN0YXRlbWVudC4KIAotICAgIGBQYWNrYWdlcyBzcGVjaWZpY2F0aW9uIDxodHRwOi8vd3d3LnB5dGhvbi5vcmcvZG9jL2Vzc2F5cy9wYWNrYWdlcy5odG1sPmBfXworICAgIGBQYWNrYWdlcyBzcGVjaWZpY2F0aW9uIDxodHRwOi8vbGVnYWN5LnB5dGhvbi5vcmcvZG9jL2Vzc2F5cy9wYWNrYWdlcy5odG1sPmBfXwogICAgICAgICBPcmlnaW5hbCBzcGVjaWZpY2F0aW9uIG9mIHBhY2thZ2VzLiBTb21lIHNlbWFudGljcyBoYXZlIGNoYW5nZWQgc2luY2UKICAgICAgICAgdGhlIHdyaXRpbmcgb2YgdGhpcyBkb2N1bWVudCAoZS5nLiByZWRpcmVjdGluZyBiYXNlZCBvbiBgYE5vbmVgYAogICAgICAgICBpbiA6ZGF0YTpgc3lzLm1vZHVsZXNgKS4KQEAgLTk1LDcgKzk1LDcgQEAKIAogICAgRmluZCB0aGUgbG9hZGVyIGZvciBhIG1vZHVsZSwgb3B0aW9uYWxseSB3aXRoaW4gdGhlIHNwZWNpZmllZCAqcGF0aCouIElmIHRoZQogICAgbW9kdWxlIGlzIGluIDphdHRyOmBzeXMubW9kdWxlc2AsIHRoZW4gYGBzeXMubW9kdWxlc1tuYW1lXS5fX2xvYWRlcl9fYGAgaXMKLSAgIHJldHVybmVkICh1bmxlc3MgdGhlIGxvYWRlciB3b3VsZCBiZSBgYE5vbmVgYCwgaW4gd2hpY2ggY2FzZQorICAgcmV0dXJuZWQgKHVubGVzcyB0aGUgbG9hZGVyIHdvdWxkIGJlIGBgTm9uZWBgIG9yIGlzIG5vdCBzZXQsIGluIHdoaWNoIGNhc2UKICAgIDpleGM6YFZhbHVlRXJyb3JgIGlzIHJhaXNlZCkuIE90aGVyd2lzZSBhIHNlYXJjaCB1c2luZyA6YXR0cjpgc3lzLm1ldGFfcGF0aGAKICAgIGlzIGRvbmUuIGBgTm9uZWBgIGlzIHJldHVybmVkIGlmIG5vIGxvYWRlciBpcyBmb3VuZC4KIApAQCAtMTA0LDYgKzEwNCwxNSBAQAogICAgd2lsbCBuZWVkIHRvIGltcG9ydCBhbGwgcGFyZW50IHBhY2thZ2VzIG9mIHRoZSBzdWJtb2R1bGUgYW5kIHVzZSB0aGUgY29ycmVjdAogICAgYXJndW1lbnQgdG8gKnBhdGgqLgogCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIElmIGBgX19sb2FkZXJfX2BgIGlzIG5vdCBzZXQsIHJhaXNlIDpleGM6YFZhbHVlRXJyb3JgLCBqdXN0IGxpa2Ugd2hlbiB0aGUKKyAgICAgIGF0dHJpYnV0ZSBpcyBzZXQgdG8gYGBOb25lYGAuCisKKyAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjQKKyAgICAgIFVzZSA6ZnVuYzpgaW1wb3J0bGliLnV0aWwuZmluZF9zcGVjYCBpbnN0ZWFkLgorCiAuLiBmdW5jdGlvbjo6IGludmFsaWRhdGVfY2FjaGVzKCkKIAogICAgSW52YWxpZGF0ZSB0aGUgaW50ZXJuYWwgY2FjaGVzIG9mIGZpbmRlcnMgc3RvcmVkIGF0CkBAIC0xMTQsNiArMTIzLDY4IEBACiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMwogCisuLiBmdW5jdGlvbjo6IHJlbG9hZChtb2R1bGUpCisKKyAgIFJlbG9hZCBhIHByZXZpb3VzbHkgaW1wb3J0ZWQgKm1vZHVsZSouICBUaGUgYXJndW1lbnQgbXVzdCBiZSBhIG1vZHVsZSBvYmplY3QsCisgICBzbyBpdCBtdXN0IGhhdmUgYmVlbiBzdWNjZXNzZnVsbHkgaW1wb3J0ZWQgYmVmb3JlLiAgVGhpcyBpcyB1c2VmdWwgaWYgeW91CisgICBoYXZlIGVkaXRlZCB0aGUgbW9kdWxlIHNvdXJjZSBmaWxlIHVzaW5nIGFuIGV4dGVybmFsIGVkaXRvciBhbmQgd2FudCB0byB0cnkKKyAgIG91dCB0aGUgbmV3IHZlcnNpb24gd2l0aG91dCBsZWF2aW5nIHRoZSBQeXRob24gaW50ZXJwcmV0ZXIuICBUaGUgcmV0dXJuIHZhbHVlCisgICBpcyB0aGUgbW9kdWxlIG9iamVjdCAod2hpY2ggY2FuIGJlIGRpZmZlcmVudCBpZiByZS1pbXBvcnRpbmcgY2F1c2VzIGEKKyAgIGRpZmZlcmVudCBvYmplY3QgdG8gYmUgcGxhY2VkIGluIDpkYXRhOmBzeXMubW9kdWxlc2ApLgorCisgICBXaGVuIDpmdW5jOmByZWxvYWRgIGlzIGV4ZWN1dGVkOgorCisgICAqIFB5dGhvbiBtb2R1bGUncyBjb2RlIGlzIHJlY29tcGlsZWQgYW5kIHRoZSBtb2R1bGUtbGV2ZWwgY29kZSByZS1leGVjdXRlZCwKKyAgICAgZGVmaW5pbmcgYSBuZXcgc2V0IG9mIG9iamVjdHMgd2hpY2ggYXJlIGJvdW5kIHRvIG5hbWVzIGluIHRoZSBtb2R1bGUncworICAgICBkaWN0aW9uYXJ5IGJ5IHJldXNpbmcgdGhlIDp0ZXJtOmBsb2FkZXJgIHdoaWNoIG9yaWdpbmFsbHkgbG9hZGVkIHRoZQorICAgICBtb2R1bGUuICBUaGUgYGBpbml0YGAgZnVuY3Rpb24gb2YgZXh0ZW5zaW9uIG1vZHVsZXMgaXMgbm90IGNhbGxlZCBhIHNlY29uZAorICAgICB0aW1lLgorCisgICAqIEFzIHdpdGggYWxsIG90aGVyIG9iamVjdHMgaW4gUHl0aG9uIHRoZSBvbGQgb2JqZWN0cyBhcmUgb25seSByZWNsYWltZWQKKyAgICAgYWZ0ZXIgdGhlaXIgcmVmZXJlbmNlIGNvdW50cyBkcm9wIHRvIHplcm8uCisKKyAgICogVGhlIG5hbWVzIGluIHRoZSBtb2R1bGUgbmFtZXNwYWNlIGFyZSB1cGRhdGVkIHRvIHBvaW50IHRvIGFueSBuZXcgb3IKKyAgICAgY2hhbmdlZCBvYmplY3RzLgorCisgICAqIE90aGVyIHJlZmVyZW5jZXMgdG8gdGhlIG9sZCBvYmplY3RzIChzdWNoIGFzIG5hbWVzIGV4dGVybmFsIHRvIHRoZSBtb2R1bGUpIGFyZQorICAgICBub3QgcmVib3VuZCB0byByZWZlciB0byB0aGUgbmV3IG9iamVjdHMgYW5kIG11c3QgYmUgdXBkYXRlZCBpbiBlYWNoIG5hbWVzcGFjZQorICAgICB3aGVyZSB0aGV5IG9jY3VyIGlmIHRoYXQgaXMgZGVzaXJlZC4KKworICAgVGhlcmUgYXJlIGEgbnVtYmVyIG9mIG90aGVyIGNhdmVhdHM6CisKKyAgIFdoZW4gYSBtb2R1bGUgaXMgcmVsb2FkZWQsIGl0cyBkaWN0aW9uYXJ5IChjb250YWluaW5nIHRoZSBtb2R1bGUncyBnbG9iYWwKKyAgIHZhcmlhYmxlcykgaXMgcmV0YWluZWQuICBSZWRlZmluaXRpb25zIG9mIG5hbWVzIHdpbGwgb3ZlcnJpZGUgdGhlIG9sZAorICAgZGVmaW5pdGlvbnMsIHNvIHRoaXMgaXMgZ2VuZXJhbGx5IG5vdCBhIHByb2JsZW0uICBJZiB0aGUgbmV3IHZlcnNpb24gb2YgYQorICAgbW9kdWxlIGRvZXMgbm90IGRlZmluZSBhIG5hbWUgdGhhdCB3YXMgZGVmaW5lZCBieSB0aGUgb2xkIHZlcnNpb24sIHRoZSBvbGQKKyAgIGRlZmluaXRpb24gcmVtYWlucy4gIFRoaXMgZmVhdHVyZSBjYW4gYmUgdXNlZCB0byB0aGUgbW9kdWxlJ3MgYWR2YW50YWdlIGlmIGl0CisgICBtYWludGFpbnMgYSBnbG9iYWwgdGFibGUgb3IgY2FjaGUgb2Ygb2JqZWN0cyAtLS0gd2l0aCBhIDprZXl3b3JkOmB0cnlgCisgICBzdGF0ZW1lbnQgaXQgY2FuIHRlc3QgZm9yIHRoZSB0YWJsZSdzIHByZXNlbmNlIGFuZCBza2lwIGl0cyBpbml0aWFsaXphdGlvbiBpZgorICAgZGVzaXJlZDo6CisKKyAgICAgIHRyeToKKyAgICAgICAgICBjYWNoZQorICAgICAgZXhjZXB0IE5hbWVFcnJvcjoKKyAgICAgICAgICBjYWNoZSA9IHt9CisKKyAgIEl0IGlzIGdlbmVyYWxseSBub3QgdmVyeSB1c2VmdWwgdG8gcmVsb2FkIGJ1aWx0LWluIG9yIGR5bmFtaWNhbGx5IGxvYWRlZAorICAgbW9kdWxlcy4gIFJlbG9hZGluZyA6bW9kOmBzeXNgLCA6bW9kOmBfX21haW5fX2AsIDptb2Q6YGJ1aWx0aW5zYCBhbmQgb3RoZXIKKyAgIGtleSBtb2R1bGVzIGlzIG5vdCByZWNvbW1lbmRlZC4gIEluIG1hbnkgY2FzZXMgZXh0ZW5zaW9uIG1vZHVsZXMgYXJlIG5vdAorICAgZGVzaWduZWQgdG8gYmUgaW5pdGlhbGl6ZWQgbW9yZSB0aGFuIG9uY2UsIGFuZCBtYXkgZmFpbCBpbiBhcmJpdHJhcnkgd2F5cworICAgd2hlbiByZWxvYWRlZC4KKworICAgSWYgYSBtb2R1bGUgaW1wb3J0cyBvYmplY3RzIGZyb20gYW5vdGhlciBtb2R1bGUgdXNpbmcgOmtleXdvcmQ6YGZyb21gIC4uLgorICAgOmtleXdvcmQ6YGltcG9ydGAgLi4uLCBjYWxsaW5nIDpmdW5jOmByZWxvYWRgIGZvciB0aGUgb3RoZXIgbW9kdWxlIGRvZXMgbm90CisgICByZWRlZmluZSB0aGUgb2JqZWN0cyBpbXBvcnRlZCBmcm9tIGl0IC0tLSBvbmUgd2F5IGFyb3VuZCB0aGlzIGlzIHRvCisgICByZS1leGVjdXRlIHRoZSA6a2V5d29yZDpgZnJvbWAgc3RhdGVtZW50LCBhbm90aGVyIGlzIHRvIHVzZSA6a2V5d29yZDpgaW1wb3J0YAorICAgYW5kIHF1YWxpZmllZCBuYW1lcyAoKm1vZHVsZS5uYW1lKikgaW5zdGVhZC4KKworICAgSWYgYSBtb2R1bGUgaW5zdGFudGlhdGVzIGluc3RhbmNlcyBvZiBhIGNsYXNzLCByZWxvYWRpbmcgdGhlIG1vZHVsZSB0aGF0CisgICBkZWZpbmVzIHRoZSBjbGFzcyBkb2VzIG5vdCBhZmZlY3QgdGhlIG1ldGhvZCBkZWZpbml0aW9ucyBvZiB0aGUgaW5zdGFuY2VzIC0tLQorICAgdGhleSBjb250aW51ZSB0byB1c2UgdGhlIG9sZCBjbGFzcyBkZWZpbml0aW9uLiAgVGhlIHNhbWUgaXMgdHJ1ZSBmb3IgZGVyaXZlZAorICAgY2xhc3Nlcy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIAogOm1vZDpgaW1wb3J0bGliLmFiY2AgLS0gQWJzdHJhY3QgYmFzZSBjbGFzc2VzIHJlbGF0ZWQgdG8gaW1wb3J0CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTEzNyw4ICsyMDgsNiBAQAogICAgICAgICAgICAgICAgKy0tIEV4ZWN1dGlvbkxvYWRlciAtLSsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0gRmlsZUxvYWRlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLSBTb3VyY2VMb2FkZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLSBQeUxvYWRlciAoZGVwcmVjYXRlZCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLSBQeVB5Y0xvYWRlciAoZGVwcmVjYXRlZCkKIAogCiAuLiBjbGFzczo6IEZpbmRlcgpAQCAtMTU0LDYgKzIyMywxMCBAQAogICAgICAgbW9kdWxlLiAgT3JpZ2luYWxseSBzcGVjaWZpZWQgaW4gOnBlcDpgMzAyYCwgdGhpcyBtZXRob2Qgd2FzIG1lYW50CiAgICAgICBmb3IgdXNlIGluIDpkYXRhOmBzeXMubWV0YV9wYXRoYCBhbmQgaW4gdGhlIHBhdGgtYmFzZWQgaW1wb3J0IHN1YnN5c3RlbS4KIAorICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgICAgIFJldHVybnMgYGBOb25lYGAgd2hlbiBjYWxsZWQgaW5zdGVhZCBvZiByYWlzaW5nCisgICAgICAgICA6ZXhjOmBOb3RJbXBsZW1lbnRlZEVycm9yYC4KKwogCiAuLiBjbGFzczo6IE1ldGFQYXRoRmluZGVyCiAKQEAgLTE2MiwyMCArMjM1LDQ2IEBACiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMwogCisgICAuLiBtZXRob2Q6OiBmaW5kX3NwZWMoZnVsbG5hbWUsIHBhdGgsIHRhcmdldD1Ob25lKQorCisgICAgICBBbiBhYnN0cmFjdCBtZXRob2QgZm9yIGZpbmRpbmcgYSA6dGVybTpgc3BlYyA8bW9kdWxlIHNwZWM+YCBmb3IKKyAgICAgIHRoZSBzcGVjaWZpZWQgbW9kdWxlLiAgSWYgdGhpcyBpcyBhIHRvcC1sZXZlbCBpbXBvcnQsICpwYXRoKiB3aWxsCisgICAgICBiZSBgYE5vbmVgYC4gIE90aGVyd2lzZSwgdGhpcyBpcyBhIHNlYXJjaCBmb3IgYSBzdWJwYWNrYWdlIG9yCisgICAgICBtb2R1bGUgYW5kICpwYXRoKiB3aWxsIGJlIHRoZSB2YWx1ZSBvZiA6YXR0cjpgX19wYXRoX19gIGZyb20gdGhlCisgICAgICBwYXJlbnQgcGFja2FnZS4gSWYgYSBzcGVjIGNhbm5vdCBiZSBmb3VuZCwgYGBOb25lYGAgaXMgcmV0dXJuZWQuCisgICAgICBXaGVuIHBhc3NlZCBpbiwgYGB0YXJnZXRgYCBpcyBhIG1vZHVsZSBvYmplY3QgdGhhdCB0aGUgZmluZGVyIG1heQorICAgICAgdXNlIHRvIG1ha2UgYSBtb3JlIGVkdWNhdGVkIGFib3V0IHdoYXQgc3BlYyB0byByZXR1cm4uCisKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiAgICAuLiBtZXRob2Q6OiBmaW5kX21vZHVsZShmdWxsbmFtZSwgcGF0aCkKIAotICAgICAgQW4gYWJzdHJhY3QgbWV0aG9kIGZvciBmaW5kaW5nIGEgOnRlcm06YGxvYWRlcmAgZm9yIHRoZSBzcGVjaWZpZWQKKyAgICAgIEEgbGVnYWN5IG1ldGhvZCBmb3IgZmluZGluZyBhIDp0ZXJtOmBsb2FkZXJgIGZvciB0aGUgc3BlY2lmaWVkCiAgICAgICBtb2R1bGUuICBJZiB0aGlzIGlzIGEgdG9wLWxldmVsIGltcG9ydCwgKnBhdGgqIHdpbGwgYmUgYGBOb25lYGAuCiAgICAgICBPdGhlcndpc2UsIHRoaXMgaXMgYSBzZWFyY2ggZm9yIGEgc3VicGFja2FnZSBvciBtb2R1bGUgYW5kICpwYXRoKgogICAgICAgd2lsbCBiZSB0aGUgdmFsdWUgb2YgOmF0dHI6YF9fcGF0aF9fYCBmcm9tIHRoZSBwYXJlbnQKICAgICAgIHBhY2thZ2UuIElmIGEgbG9hZGVyIGNhbm5vdCBiZSBmb3VuZCwgYGBOb25lYGAgaXMgcmV0dXJuZWQuCiAKKyAgICAgIElmIDptZXRoOmBmaW5kX3NwZWNgIGlzIGRlZmluZWQsIGJhY2t3YXJkcy1jb21wYXRpYmxlIGZ1bmN0aW9uYWxpdHkgaXMKKyAgICAgIHByb3ZpZGVkLgorCisgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgICAgUmV0dXJucyBgYE5vbmVgYCB3aGVuIGNhbGxlZCBpbnN0ZWFkIG9mIHJhaXNpbmcKKyAgICAgICAgIDpleGM6YE5vdEltcGxlbWVudGVkRXJyb3JgLiBDYW4gdXNlIDptZXRoOmBmaW5kX3NwZWNgIHRvIHByb3ZpZGUKKyAgICAgICAgIGZ1bmN0aW9uYWxpdHkuCisKKyAgICAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjQKKyAgICAgICAgIFVzZSA6bWV0aDpgZmluZF9zcGVjYCBpbnN0ZWFkLgorCiAgICAuLiBtZXRob2Q6OiBpbnZhbGlkYXRlX2NhY2hlcygpCiAKICAgICAgIEFuIG9wdGlvbmFsIG1ldGhvZCB3aGljaCwgd2hlbiBjYWxsZWQsIHNob3VsZCBpbnZhbGlkYXRlIGFueSBpbnRlcm5hbAogICAgICAgY2FjaGUgdXNlZCBieSB0aGUgZmluZGVyLiBVc2VkIGJ5IDpmdW5jOmBpbXBvcnRsaWIuaW52YWxpZGF0ZV9jYWNoZXNgCiAgICAgICB3aGVuIGludmFsaWRhdGluZyB0aGUgY2FjaGVzIG9mIGFsbCBmaW5kZXJzIG9uIDpkYXRhOmBzeXMubWV0YV9wYXRoYC4KIAorICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgICAgIFJldHVybnMgYGBOb25lYGAgd2hlbiBjYWxsZWQgaW5zdGVhZCBvZiBgYE5vdEltcGxlbWVudGVkYGAuCisKIAogLi4gY2xhc3M6OiBQYXRoRW50cnlGaW5kZXIKIApAQCAtMTgzLDI3ICsyODIsNTEgQEAKICAgIGl0IGJlYXJzIHNvbWUgc2ltaWxhcml0aWVzIHRvIDpjbGFzczpgTWV0YVBhdGhGaW5kZXJgLCBgYFBhdGhFbnRyeUZpbmRlcmBgCiAgICBpcyBtZWFudCBmb3IgdXNlIG9ubHkgd2l0aGluIHRoZSBwYXRoLWJhc2VkIGltcG9ydCBzdWJzeXN0ZW0gcHJvdmlkZWQKICAgIGJ5IDpjbGFzczpgUGF0aEZpbmRlcmAuIFRoaXMgQUJDIGlzIGEgc3ViY2xhc3Mgb2YgOmNsYXNzOmBGaW5kZXJgIGZvcgotICAgY29tcGF0aWJpbGl0eS4KKyAgIGNvbXBhdGliaWxpdHkgcmVhc29ucyBvbmx5LgogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKIAorICAgLi4gbWV0aG9kOjogZmluZF9zcGVjKGZ1bGxuYW1lLCB0YXJnZXQ9Tm9uZSkKKworICAgICAgQW4gYWJzdHJhY3QgbWV0aG9kIGZvciBmaW5kaW5nIGEgOnRlcm06YHNwZWMgPG1vZHVsZSBzcGVjPmAgZm9yCisgICAgICB0aGUgc3BlY2lmaWVkIG1vZHVsZS4gIFRoZSBmaW5kZXIgd2lsbCBzZWFyY2ggZm9yIHRoZSBtb2R1bGUgb25seQorICAgICAgd2l0aGluIHRoZSA6dGVybTpgcGF0aCBlbnRyeWAgdG8gd2hpY2ggaXQgaXMgYXNzaWduZWQuICBJZiBhIHNwZWMKKyAgICAgIGNhbm5vdCBiZSBmb3VuZCwgYGBOb25lYGAgaXMgcmV0dXJuZWQuICBXaGVuIHBhc3NlZCBpbiwgYGB0YXJnZXRgYAorICAgICAgaXMgYSBtb2R1bGUgb2JqZWN0IHRoYXQgdGhlIGZpbmRlciBtYXkgdXNlIHRvIG1ha2UgYSBtb3JlIGVkdWNhdGVkCisgICAgICBhYm91dCB3aGF0IHNwZWMgdG8gcmV0dXJuLgorCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogICAgLi4gbWV0aG9kOjogZmluZF9sb2FkZXIoZnVsbG5hbWUpCiAKLSAgICAgIEFuIGFic3RyYWN0IG1ldGhvZCBmb3IgZmluZGluZyBhIDp0ZXJtOmBsb2FkZXJgIGZvciB0aGUgc3BlY2lmaWVkCisgICAgICBBIGxlZ2FjeSBtZXRob2QgZm9yIGZpbmRpbmcgYSA6dGVybTpgbG9hZGVyYCBmb3IgdGhlIHNwZWNpZmllZAogICAgICAgbW9kdWxlLiAgUmV0dXJucyBhIDItdHVwbGUgb2YgYGAobG9hZGVyLCBwb3J0aW9uKWBgIHdoZXJlIGBgcG9ydGlvbmBgCiAgICAgICBpcyBhIHNlcXVlbmNlIG9mIGZpbGUgc3lzdGVtIGxvY2F0aW9ucyBjb250cmlidXRpbmcgdG8gcGFydCBvZiBhIG5hbWVzcGFjZQogICAgICAgcGFja2FnZS4gVGhlIGxvYWRlciBtYXkgYmUgYGBOb25lYGAgd2hpbGUgc3BlY2lmeWluZyBgYHBvcnRpb25gYCB0bwogICAgICAgc2lnbmlmeSB0aGUgY29udHJpYnV0aW9uIG9mIHRoZSBmaWxlIHN5c3RlbSBsb2NhdGlvbnMgdG8gYSBuYW1lc3BhY2UKICAgICAgIHBhY2thZ2UuIEFuIGVtcHR5IGxpc3QgY2FuIGJlIHVzZWQgZm9yIGBgcG9ydGlvbmBgIHRvIHNpZ25pZnkgdGhlIGxvYWRlcgotICAgICAgaXMgbm90IHBhcnQgb2YgYSBwYWNrYWdlLiBJZiBgYGxvYWRlcmBgIGlzIGBgTm9uZWBgIGFuZCBgYHBvcnRpb25gYCBpcwotICAgICAgdGhlIGVtcHR5IGxpc3QgdGhlbiBubyBsb2FkZXIgb3IgbG9jYXRpb24gZm9yIGEgbmFtZXNwYWNlIHBhY2thZ2Ugd2VyZQotICAgICAgZm91bmQgKGkuZS4gZmFpbHVyZSB0byBmaW5kIGFueXRoaW5nIGZvciB0aGUgbW9kdWxlKS4KKyAgICAgIGlzIG5vdCBwYXJ0IG9mIGEgbmFtZXNwYWNlIHBhY2thZ2UuIElmIGBgbG9hZGVyYGAgaXMgYGBOb25lYGAgYW5kCisgICAgICBgYHBvcnRpb25gYCBpcyB0aGUgZW1wdHkgbGlzdCB0aGVuIG5vIGxvYWRlciBvciBsb2NhdGlvbiBmb3IgYSBuYW1lc3BhY2UKKyAgICAgIHBhY2thZ2Ugd2VyZSBmb3VuZCAoaS5lLiBmYWlsdXJlIHRvIGZpbmQgYW55dGhpbmcgZm9yIHRoZSBtb2R1bGUpLgorCisgICAgICBJZiA6bWV0aDpgZmluZF9zcGVjYCBpcyBkZWZpbmVkIHRoZW4gYmFja3dhcmRzLWNvbXBhdGlibGUgZnVuY3Rpb25hbGl0eSBpcworICAgICAgcHJvdmlkZWQuCisKKyAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICAgICBSZXR1cm5zIGBgKE5vbmUsIFtdKWBgIGluc3RlYWQgb2YgcmFpc2luZyA6ZXhjOmBOb3RJbXBsZW1lbnRlZEVycm9yYC4KKyAgICAgICAgIFVzZXMgOm1ldGg6YGZpbmRfc3BlY2Agd2hlbiBhdmFpbGFibGUgdG8gcHJvdmlkZSBmdW5jdGlvbmFsaXR5LgorCisgICAgICAuLiBkZXByZWNhdGVkOjogMy40CisgICAgICAgICBVc2UgOm1ldGg6YGZpbmRfc3BlY2AgaW5zdGVhZC4KIAogICAgLi4gbWV0aG9kOjogZmluZF9tb2R1bGUoZnVsbG5hbWUpCiAKICAgICAgIEEgY29uY3JldGUgaW1wbGVtZW50YXRpb24gb2YgOm1ldGg6YEZpbmRlci5maW5kX21vZHVsZWAgd2hpY2ggaXMKICAgICAgIGVxdWl2YWxlbnQgdG8gYGBzZWxmLmZpbmRfbG9hZGVyKGZ1bGxuYW1lKVswXWBgLgogCisgICAgICAuLiBkZXByZWNhdGVkOjogMy40CisgICAgICAgICBVc2UgOm1ldGg6YGZpbmRfc3BlY2AgaW5zdGVhZC4KKwogICAgLi4gbWV0aG9kOjogaW52YWxpZGF0ZV9jYWNoZXMoKQogCiAgICAgICBBbiBvcHRpb25hbCBtZXRob2Qgd2hpY2gsIHdoZW4gY2FsbGVkLCBzaG91bGQgaW52YWxpZGF0ZSBhbnkgaW50ZXJuYWwKQEAgLTIxNiw5ICszMzksMjYgQEAKICAgICBBbiBhYnN0cmFjdCBiYXNlIGNsYXNzIGZvciBhIDp0ZXJtOmBsb2FkZXJgLgogICAgIFNlZSA6cGVwOmAzMDJgIGZvciB0aGUgZXhhY3QgZGVmaW5pdGlvbiBmb3IgYSBsb2FkZXIuCiAKKyAgICAuLiBtZXRob2Q6OiBjcmVhdGVfbW9kdWxlKHNwZWMpCisKKyAgICAgICBBbiBvcHRpb25hbCBtZXRob2QgdGhhdCByZXR1cm5zIHRoZSBtb2R1bGUgb2JqZWN0IHRvIHVzZSB3aGVuCisgICAgICAgaW1wb3J0aW5nIGEgbW9kdWxlLiAgY3JlYXRlX21vZHVsZSgpIG1heSBhbHNvIHJldHVybiBgYE5vbmVgYCwKKyAgICAgICBpbmRpY2F0aW5nIHRoYXQgdGhlIGRlZmF1bHQgbW9kdWxlIGNyZWF0aW9uIHNob3VsZCB0YWtlIHBsYWNlCisgICAgICAgaW5zdGVhZC4KKworICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisgICAgLi4gbWV0aG9kOjogZXhlY19tb2R1bGUobW9kdWxlKQorCisgICAgICAgQW4gYWJzdHJhY3QgbWV0aG9kIHRoYXQgZXhlY3V0ZXMgdGhlIG1vZHVsZSBpbiBpdHMgb3duIG5hbWVzcGFjZQorICAgICAgIHdoZW4gYSBtb2R1bGUgaXMgaW1wb3J0ZWQgb3IgcmVsb2FkZWQuICBUaGUgbW9kdWxlIHNob3VsZCBhbHJlYWR5CisgICAgICAgYmUgaW5pdGlhbGl6ZWQgd2hlbiBleGVjX21vZHVsZSgpIGlzIGNhbGxlZC4KKworICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiAgICAgLi4gbWV0aG9kOjogbG9hZF9tb2R1bGUoZnVsbG5hbWUpCiAKLSAgICAgICAgQW4gYWJzdHJhY3QgbWV0aG9kIGZvciBsb2FkaW5nIGEgbW9kdWxlLiBJZiB0aGUgbW9kdWxlIGNhbm5vdCBiZQorICAgICAgICBBIGxlZ2FjeSBtZXRob2QgZm9yIGxvYWRpbmcgYSBtb2R1bGUuIElmIHRoZSBtb2R1bGUgY2Fubm90IGJlCiAgICAgICAgIGxvYWRlZCwgOmV4YzpgSW1wb3J0RXJyb3JgIGlzIHJhaXNlZCwgb3RoZXJ3aXNlIHRoZSBsb2FkZWQgbW9kdWxlIGlzCiAgICAgICAgIHJldHVybmVkLgogCkBAIC0yMjksMTIgKzM2OSwxMSBAQAogICAgICAgICBmcm9tIHRoZSBpbXBvcnQuIElmIHRoZSBsb2FkZXIgaW5zZXJ0ZWQgYSBtb2R1bGUgYW5kIHRoZSBsb2FkIGZhaWxzLCBpdAogICAgICAgICBtdXN0IGJlIHJlbW92ZWQgYnkgdGhlIGxvYWRlciBmcm9tIDpkYXRhOmBzeXMubW9kdWxlc2A7IG1vZHVsZXMgYWxyZWFkeQogICAgICAgICBpbiA6ZGF0YTpgc3lzLm1vZHVsZXNgIGJlZm9yZSB0aGUgbG9hZGVyIGJlZ2FuIGV4ZWN1dGlvbiBzaG91bGQgYmUgbGVmdAotICAgICAgICBhbG9uZS4gVGhlIDpmdW5jOmBpbXBvcnRsaWIudXRpbC5tb2R1bGVfZm9yX2xvYWRlcmAgZGVjb3JhdG9yIGhhbmRsZXMKLSAgICAgICAgYWxsIG9mIHRoZXNlIGRldGFpbHMuCisgICAgICAgIGFsb25lIChzZWUgOmZ1bmM6YGltcG9ydGxpYi51dGlsLm1vZHVsZV9mb3JfbG9hZGVyYCkuCiAKICAgICAgICAgVGhlIGxvYWRlciBzaG91bGQgc2V0IHNldmVyYWwgYXR0cmlidXRlcyBvbiB0aGUgbW9kdWxlLgogICAgICAgICAoTm90ZSB0aGF0IHNvbWUgb2YgdGhlc2UgYXR0cmlidXRlcyBjYW4gY2hhbmdlIHdoZW4gYSBtb2R1bGUgaXMKLSAgICAgICAgcmVsb2FkZWQuKQorICAgICAgICByZWxvYWRlZCk6CiAKICAgICAgICAgLSA6YXR0cjpgX19uYW1lX19gCiAgICAgICAgICAgICBUaGUgbmFtZSBvZiB0aGUgbW9kdWxlLgpAQCAtMjU0LDIwICszOTMsNDIgQEAKICAgICAgICAgLSA6YXR0cjpgX19wYWNrYWdlX19gCiAgICAgICAgICAgICBUaGUgcGFyZW50IHBhY2thZ2UgZm9yIHRoZSBtb2R1bGUvcGFja2FnZS4gSWYgdGhlIG1vZHVsZSBpcwogICAgICAgICAgICAgdG9wLWxldmVsIHRoZW4gaXQgaGFzIGEgdmFsdWUgb2YgdGhlIGVtcHR5IHN0cmluZy4gVGhlCi0gICAgICAgICAgICA6ZnVuYzpgaW1wb3J0bGliLnV0aWwuc2V0X3BhY2thZ2VgIGRlY29yYXRvciBjYW4gaGFuZGxlIHRoZSBkZXRhaWxzCi0gICAgICAgICAgICBmb3IgOmF0dHI6YF9fcGFja2FnZV9fYC4KKyAgICAgICAgICAgIDpmdW5jOmBpbXBvcnRsaWIudXRpbC5tb2R1bGVfZm9yX2xvYWRlcmAgZGVjb3JhdG9yIGNhbiBoYW5kbGUgdGhlCisgICAgICAgICAgICBkZXRhaWxzIGZvciA6YXR0cjpgX19wYWNrYWdlX19gLgogCiAgICAgICAgIC0gOmF0dHI6YF9fbG9hZGVyX19gCi0gICAgICAgICAgICBUaGUgbG9hZGVyIHVzZWQgdG8gbG9hZCB0aGUgbW9kdWxlLgotICAgICAgICAgICAgKFRoaXMgaXMgbm90IHNldCBieSB0aGUgYnVpbHQtaW4gaW1wb3J0IG1hY2hpbmVyeSwKLSAgICAgICAgICAgIGJ1dCBpdCBzaG91bGQgYmUgc2V0IHdoZW5ldmVyIGEgOnRlcm06YGxvYWRlcmAgaXMgdXNlZC4pCisgICAgICAgICAgICBUaGUgbG9hZGVyIHVzZWQgdG8gbG9hZCB0aGUgbW9kdWxlLiBUaGUKKyAgICAgICAgICAgIDpmdW5jOmBpbXBvcnRsaWIudXRpbC5tb2R1bGVfZm9yX2xvYWRlcmAgZGVjb3JhdG9yIGNhbiBoYW5kbGUgdGhlCisgICAgICAgICAgICBkZXRhaWxzIGZvciA6YXR0cjpgX19wYWNrYWdlX19gLgorCisgICAgICAgIFdoZW4gOm1ldGg6YGV4ZWNfbW9kdWxlYCBpcyBhdmFpbGFibGUgdGhlbiBiYWNrd2FyZHMtY29tcGF0aWJsZQorICAgICAgICBmdW5jdGlvbmFsaXR5IGlzIHByb3ZpZGVkLgorCisgICAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICAgICAgIFJhaXNlIDpleGM6YEltcG9ydEVycm9yYCB3aGVuIGNhbGxlZCBpbnN0ZWFkIG9mCisgICAgICAgICAgIDpleGM6YE5vdEltcGxlbWVudGVkRXJyb3JgLiBGdW5jdGlvbmFsaXR5IHByb3ZpZGVkIHdoZW4KKyAgICAgICAgICAgOm1ldGg6YGV4ZWNfbW9kdWxlYCBpcyBhdmFpbGFibGUuCisKKyAgICAgICAgLi4gZGVwcmVjYXRlZDo6IDMuNAorICAgICAgICAgICBUaGUgcmVjb21tZW5kZWQgQVBJIGZvciBsb2FkaW5nIGEgbW9kdWxlIGlzIDptZXRoOmBleGVjX21vZHVsZWAKKyAgICAgICAgICAgKGFuZCBvcHRpb25hbGx5IDptZXRoOmBjcmVhdGVfbW9kdWxlYCkuICBMb2FkZXJzIHNob3VsZCBpbXBsZW1lbnQKKyAgICAgICAgICAgaXQgaW5zdGVhZCBvZiBsb2FkX21vZHVsZSgpLiAgVGhlIGltcG9ydCBtYWNoaW5lcnkgdGFrZXMgY2FyZSBvZgorICAgICAgICAgICBhbGwgdGhlIG90aGVyIHJlc3BvbnNpYmlsaXRpZXMgb2YgbG9hZF9tb2R1bGUoKSB3aGVuIGV4ZWNfbW9kdWxlKCkKKyAgICAgICAgICAgaXMgaW1wbGVtZW50ZWQuCiAKICAgICAuLiBtZXRob2Q6OiBtb2R1bGVfcmVwcihtb2R1bGUpCiAKLSAgICAgICAgQW4gYWJzdHJhY3QgbWV0aG9kIHdoaWNoIHdoZW4gaW1wbGVtZW50ZWQgY2FsY3VsYXRlcyBhbmQgcmV0dXJucyB0aGUKLSAgICAgICAgZ2l2ZW4gbW9kdWxlJ3MgcmVwciwgYXMgYSBzdHJpbmcuCisgICAgICAgIEEgbGVnYWN5IG1ldGhvZCB3aGljaCB3aGVuIGltcGxlbWVudGVkIGNhbGN1bGF0ZXMgYW5kIHJldHVybnMgdGhlCisgICAgICAgIGdpdmVuIG1vZHVsZSdzIHJlcHIsIGFzIGEgc3RyaW5nLiBUaGUgbW9kdWxlIHR5cGUncyBkZWZhdWx0IHJlcHIoKSB3aWxsCisgICAgICAgIHVzZSB0aGUgcmVzdWx0IG9mIHRoaXMgbWV0aG9kIGFzIGFwcHJvcHJpYXRlLgogCi0gICAgICAgIC4uIHZlcnNpb25hZGRlZDogMy4zCisgICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMworCisgICAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICAgICAgIE1hZGUgb3B0aW9uYWwgaW5zdGVhZCBvZiBhbiBhYnN0cmFjdG1ldGhvZC4KKworICAgICAgICAuLiBkZXByZWNhdGVkOjogMy40CisgICAgICAgICAgIFRoZSBpbXBvcnQgbWFjaGluZXJ5IG5vdyB0YWtlcyBjYXJlIG9mIHRoaXMgYXV0b21hdGljYWxseS4KIAogCiAuLiBjbGFzczo6IFJlc291cmNlTG9hZGVyCkBAIC0yODIsMTAgKzQ0MywxMyBAQAogICAgICAgICBMb2FkZXJzIHRoYXQgaGF2ZSBhIGZpbGUtbGlrZSBzdG9yYWdlIGJhY2stZW5kCiAgICAgICAgIHRoYXQgYWxsb3dzIHN0b3JpbmcgYXJiaXRyYXJ5IGRhdGEKICAgICAgICAgY2FuIGltcGxlbWVudCB0aGlzIGFic3RyYWN0IG1ldGhvZCB0byBnaXZlIGRpcmVjdCBhY2Nlc3MKLSAgICAgICAgdG8gdGhlIGRhdGEgc3RvcmVkLiA6ZXhjOmBJT0Vycm9yYCBpcyB0byBiZSByYWlzZWQgaWYgdGhlICpwYXRoKiBjYW5ub3QKKyAgICAgICAgdG8gdGhlIGRhdGEgc3RvcmVkLiA6ZXhjOmBPU0Vycm9yYCBpcyB0byBiZSByYWlzZWQgaWYgdGhlICpwYXRoKiBjYW5ub3QKICAgICAgICAgYmUgZm91bmQuIFRoZSAqcGF0aCogaXMgZXhwZWN0ZWQgdG8gYmUgY29uc3RydWN0ZWQgdXNpbmcgYSBtb2R1bGUncwogICAgICAgICA6YXR0cjpgX19maWxlX19gIGF0dHJpYnV0ZSBvciBhbiBpdGVtIGZyb20gYSBwYWNrYWdlJ3MgOmF0dHI6YF9fcGF0aF9fYC4KIAorICAgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgICAgICBSYWlzZXMgOmV4YzpgT1NFcnJvcmAgaW5zdGVhZCBvZiA6ZXhjOmBOb3RJbXBsZW1lbnRlZEVycm9yYC4KKwogCiAuLiBjbGFzczo6IEluc3BlY3RMb2FkZXIKIApAQCAtMjk0LDE0ICs0NTgsMjEgQEAKIAogICAgIC4uIG1ldGhvZDo6IGdldF9jb2RlKGZ1bGxuYW1lKQogCi0gICAgICAgIEFuIGFic3RyYWN0IG1ldGhvZCB0byByZXR1cm4gdGhlIDpjbGFzczpgY29kZWAgb2JqZWN0IGZvciBhIG1vZHVsZS4KLSAgICAgICAgYGBOb25lYGAgaXMgcmV0dXJuZWQgaWYgdGhlIG1vZHVsZSBkb2VzIG5vdCBoYXZlIGEgY29kZSBvYmplY3QKLSAgICAgICAgKGUuZy4gYnVpbHQtaW4gbW9kdWxlKS4gIDpleGM6YEltcG9ydEVycm9yYCBpcyByYWlzZWQgaWYgbG9hZGVyIGNhbm5vdAotICAgICAgICBmaW5kIHRoZSByZXF1ZXN0ZWQgbW9kdWxlLgorICAgICAgICBSZXR1cm4gdGhlIGNvZGUgb2JqZWN0IGZvciBhIG1vZHVsZSwgb3IgYGBOb25lYGAgaWYgdGhlIG1vZHVsZSBkb2VzIG5vdAorICAgICAgICBoYXZlIGEgY29kZSBvYmplY3QgKGFzIHdvdWxkIGJlIHRoZSBjYXNlLCBmb3IgZXhhbXBsZSwgZm9yIGEgYnVpbHQtaW4KKyAgICAgICAgbW9kdWxlKS4gIFJhaXNlIGFuIDpleGM6YEltcG9ydEVycm9yYCBpZiBsb2FkZXIgY2Fubm90IGZpbmQgdGhlCisgICAgICAgIHJlcXVlc3RlZCBtb2R1bGUuCisKKyAgICAgICAgLi4gbm90ZTo6CisgICAgICAgICAgIFdoaWxlIHRoZSBtZXRob2QgaGFzIGEgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiwgaXQgaXMgc3VnZ2VzdGVkIHRoYXQKKyAgICAgICAgICAgaXQgYmUgb3ZlcnJpZGRlbiBpZiBwb3NzaWJsZSBmb3IgcGVyZm9ybWFuY2UuCiAKICAgICAgICAgLi4gaW5kZXg6OgogICAgICAgICAgICBzaW5nbGU6IHVuaXZlcnNhbCBuZXdsaW5lczsgaW1wb3J0bGliLmFiYy5JbnNwZWN0TG9hZGVyLmdldF9zb3VyY2UgbWV0aG9kCiAKKyAgICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgICAgICAgTm8gbG9uZ2VyIGFic3RyYWN0IGFuZCBhIGNvbmNyZXRlIGltcGxlbWVudGF0aW9uIGlzIHByb3ZpZGVkLgorCiAgICAgLi4gbWV0aG9kOjogZ2V0X3NvdXJjZShmdWxsbmFtZSkKIAogICAgICAgICBBbiBhYnN0cmFjdCBtZXRob2QgdG8gcmV0dXJuIHRoZSBzb3VyY2Ugb2YgYSBtb2R1bGUuIEl0IGlzIHJldHVybmVkIGFzCkBAIC0zMTAsMTIgKzQ4MSw0MiBAQAogICAgICAgICBpZiBubyBzb3VyY2UgaXMgYXZhaWxhYmxlIChlLmcuIGEgYnVpbHQtaW4gbW9kdWxlKS4gUmFpc2VzCiAgICAgICAgIDpleGM6YEltcG9ydEVycm9yYCBpZiB0aGUgbG9hZGVyIGNhbm5vdCBmaW5kIHRoZSBtb2R1bGUgc3BlY2lmaWVkLgogCisgICAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICAgICAgIFJhaXNlcyA6ZXhjOmBJbXBvcnRFcnJvcmAgaW5zdGVhZCBvZiA6ZXhjOmBOb3RJbXBsZW1lbnRlZEVycm9yYC4KKwogICAgIC4uIG1ldGhvZDo6IGlzX3BhY2thZ2UoZnVsbG5hbWUpCiAKICAgICAgICAgQW4gYWJzdHJhY3QgbWV0aG9kIHRvIHJldHVybiBhIHRydWUgdmFsdWUgaWYgdGhlIG1vZHVsZSBpcyBhIHBhY2thZ2UsIGEKICAgICAgICAgZmFsc2UgdmFsdWUgb3RoZXJ3aXNlLiA6ZXhjOmBJbXBvcnRFcnJvcmAgaXMgcmFpc2VkIGlmIHRoZQogICAgICAgICA6dGVybTpgbG9hZGVyYCBjYW5ub3QgZmluZCB0aGUgbW9kdWxlLgogCisgICAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICAgICAgIFJhaXNlcyA6ZXhjOmBJbXBvcnRFcnJvcmAgaW5zdGVhZCBvZiA6ZXhjOmBOb3RJbXBsZW1lbnRlZEVycm9yYC4KKworICAgIC4uIG1ldGhvZDo6IHNvdXJjZV90b19jb2RlKGRhdGEsIHBhdGg9JzxzdHJpbmc+JykKKworICAgICAgICBDcmVhdGUgYSBjb2RlIG9iamVjdCBmcm9tIFB5dGhvbiBzb3VyY2UuCisKKyAgICAgICAgVGhlICpkYXRhKiBhcmd1bWVudCBjYW4gYmUgd2hhdGV2ZXIgdGhlIDpmdW5jOmBjb21waWxlYCBmdW5jdGlvbgorICAgICAgICBzdXBwb3J0cyAoaS5lLiBzdHJpbmcgb3IgYnl0ZXMpLiBUaGUgKnBhdGgqIGFyZ3VtZW50IHNob3VsZCBiZQorICAgICAgICB0aGUgInBhdGgiIHRvIHdoZXJlIHRoZSBzb3VyY2UgY29kZSBvcmlnaW5hdGVkIGZyb20sIHdoaWNoIGNhbiBiZSBhbgorICAgICAgICBhYnN0cmFjdCBjb25jZXB0IChlLmcuIGxvY2F0aW9uIGluIGEgemlwIGZpbGUpLgorCisgICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisgICAgLi4gbWV0aG9kOjogZXhlY19tb2R1bGUobW9kdWxlKQorCisgICAgICAgSW1wbGVtZW50YXRpb24gb2YgOm1ldGg6YExvYWRlci5leGVjX21vZHVsZWAuCisKKyAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworICAgIC4uIG1ldGhvZDo6IGxvYWRfbW9kdWxlKGZ1bGxuYW1lKQorCisgICAgICAgSW1wbGVtZW50YXRpb24gb2YgOm1ldGg6YExvYWRlci5sb2FkX21vZHVsZWAuCisKKyAgICAgICAuLiBkZXByZWNhdGVkOjogMy40CisgICAgICAgICAgdXNlIDptZXRoOmBleGVjX21vZHVsZWAgaW5zdGVhZC4KKwogCiAuLiBjbGFzczo6IEV4ZWN1dGlvbkxvYWRlcgogCkBAIC0zMzMsNiArNTM0LDkgQEAKICAgICAgICAgdGhlIHNvdXJjZSBmaWxlLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgYSBieXRlY29kZSB3YXMgdXNlZCB0byBsb2FkIHRoZQogICAgICAgICBtb2R1bGUuCiAKKyAgICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgICAgICAgUmFpc2VzIDpleGM6YEltcG9ydEVycm9yYCBpbnN0ZWFkIG9mIDpleGM6YE5vdEltcGxlbWVudGVkRXJyb3JgLgorCiAKIC4uIGNsYXNzOjogRmlsZUxvYWRlcihmdWxsbmFtZSwgcGF0aCkKIApAQCAtMzU3LDEzICs1NjEsMTYgQEAKIAogICAgICAgQ2FsbHMgc3VwZXIncyBgYGxvYWRfbW9kdWxlKClgYC4KIAorICAgICAgLi4gZGVwcmVjYXRlZDo6IDMuNAorICAgICAgICAgVXNlIDptZXRoOmBMb2FkZXIuZXhlY19tb2R1bGVgIGluc3RlYWQuCisKICAgIC4uIG1ldGhvZDo6IGdldF9maWxlbmFtZShmdWxsbmFtZSkKIAogICAgICAgUmV0dXJucyA6YXR0cjpgcGF0aGAuCiAKICAgIC4uIG1ldGhvZDo6IGdldF9kYXRhKHBhdGgpCiAKLSAgICAgIFJldHVybnMgdGhlIG9wZW4sIGJpbmFyeSBmaWxlIGZvciAqcGF0aCouCisgICAgICBSZWFkcyAqcGF0aCogYXMgYSBiaW5hcnkgZmlsZSBhbmQgcmV0dXJucyB0aGUgYnl0ZXMgZnJvbSBpdC4KIAogCiAuLiBjbGFzczo6IFNvdXJjZUxvYWRlcgpAQCAtMzc4LDcgKzU4NSw4IEBACiAgICAgICAgICAgbG9hZGluZyBpcyBub3Qgc3VwcG9ydGVkLgogCiAgICAgVGhlIGFic3RyYWN0IG1ldGhvZHMgZGVmaW5lZCBieSB0aGlzIGNsYXNzIGFyZSB0byBhZGQgb3B0aW9uYWwgYnl0ZWNvZGUKLSAgICBmaWxlIHN1cHBvcnQuIE5vdCBpbXBsZW1lbnRpbmcgdGhlc2Ugb3B0aW9uYWwgbWV0aG9kcyBjYXVzZXMgdGhlIGxvYWRlciB0bworICAgIGZpbGUgc3VwcG9ydC4gTm90IGltcGxlbWVudGluZyB0aGVzZSBvcHRpb25hbCBtZXRob2RzIChvciBjYXVzaW5nIHRoZW0gdG8KKyAgICByYWlzZSA6ZXhjOmBOb3RJbXBsZW1lbnRlZEVycm9yYCkgY2F1c2VzIHRoZSBsb2FkZXIgdG8KICAgICBvbmx5IHdvcmsgd2l0aCBzb3VyY2UgY29kZS4gSW1wbGVtZW50aW5nIHRoZSBtZXRob2RzIGFsbG93cyB0aGUgbG9hZGVyIHRvCiAgICAgd29yayB3aXRoIHNvdXJjZSAqYW5kKiBieXRlY29kZSBmaWxlczsgaXQgZG9lcyBub3QgYWxsb3cgZm9yICpzb3VyY2VsZXNzKgogICAgIGxvYWRpbmcgd2hlcmUgb25seSBieXRlY29kZSBpcyBwcm92aWRlZC4gIEJ5dGVjb2RlIGZpbGVzIGFyZSBhbgpAQCAtMzk1LDEwICs2MDMsMTMgQEAKICAgICAgICAgLSBgYCdzaXplJ2BgIChvcHRpb25hbCk6IHRoZSBzaXplIGluIGJ5dGVzIG9mIHRoZSBzb3VyY2UgY29kZS4KIAogICAgICAgICBBbnkgb3RoZXIga2V5cyBpbiB0aGUgZGljdGlvbmFyeSBhcmUgaWdub3JlZCwgdG8gYWxsb3cgZm9yIGZ1dHVyZQotICAgICAgICBleHRlbnNpb25zLgorICAgICAgICBleHRlbnNpb25zLiBJZiB0aGUgcGF0aCBjYW5ub3QgYmUgaGFuZGxlZCwgOmV4YzpgT1NFcnJvcmAgaXMgcmFpc2VkLgogCiAgICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMwogCisgICAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICAgICAgIFJhaXNlIDpleGM6YE9TRXJyb3JgIGluc3RlYWQgb2YgOmV4YzpgTm90SW1wbGVtZW50ZWRFcnJvcmAuCisKICAgICAuLiBtZXRob2Q6OiBwYXRoX210aW1lKHBhdGgpCiAKICAgICAgICAgT3B0aW9uYWwgYWJzdHJhY3QgbWV0aG9kIHdoaWNoIHJldHVybnMgdGhlIG1vZGlmaWNhdGlvbiB0aW1lIGZvciB0aGUKQEAgLTQwNyw3ICs2MTgsMTAgQEAKICAgICAgICAgLi4gZGVwcmVjYXRlZDo6IDMuMwogICAgICAgICAgICBUaGlzIG1ldGhvZCBpcyBkZXByZWNhdGVkIGluIGZhdm91ciBvZiA6bWV0aDpgcGF0aF9zdGF0c2AuICBZb3UgZG9uJ3QKICAgICAgICAgICAgaGF2ZSB0byBpbXBsZW1lbnQgaXQsIGJ1dCBpdCBpcyBzdGlsbCBhdmFpbGFibGUgZm9yIGNvbXBhdGliaWxpdHkKLSAgICAgICAgICAgcHVycG9zZXMuCisgICAgICAgICAgIHB1cnBvc2VzLiBSYWlzZSA6ZXhjOmBPU0Vycm9yYCBpZiB0aGUgcGF0aCBjYW5ub3QgYmUgaGFuZGxlZC4KKworICAgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgICAgICBSYWlzZSA6ZXhjOmBPU0Vycm9yYCBpbnN0ZWFkIG9mIDpleGM6YE5vdEltcGxlbWVudGVkRXJyb3JgLgogCiAgICAgLi4gbWV0aG9kOjogc2V0X2RhdGEocGF0aCwgZGF0YSkKIApAQCAtNDE5LDEzICs2MzMsMjUgQEAKICAgICAgICAgKDphdHRyOmBlcnJuby5FQUNDRVNgLzpleGM6YFBlcm1pc3Npb25FcnJvcmApLCBkbyBub3QgcHJvcGFnYXRlIHRoZQogICAgICAgICBleGNlcHRpb24uCiAKKyAgICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgICAgICAgTm8gbG9uZ2VyIHJhaXNlcyA6ZXhjOmBOb3RJbXBsZW1lbnRlZEVycm9yYCB3aGVuIGNhbGxlZC4KKwogICAgIC4uIG1ldGhvZDo6IGdldF9jb2RlKGZ1bGxuYW1lKQogCiAgICAgICAgIENvbmNyZXRlIGltcGxlbWVudGF0aW9uIG9mIDptZXRoOmBJbnNwZWN0TG9hZGVyLmdldF9jb2RlYC4KIAorICAgIC4uIG1ldGhvZDo6IGV4ZWNfbW9kdWxlKG1vZHVsZSkKKworICAgICAgIENvbmNyZXRlIGltcGxlbWVudGF0aW9uIG9mIDptZXRoOmBMb2FkZXIuZXhlY19tb2R1bGVgLgorCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogICAgIC4uIG1ldGhvZDo6IGxvYWRfbW9kdWxlKGZ1bGxuYW1lKQogCi0gICAgICAgIENvbmNyZXRlIGltcGxlbWVudGF0aW9uIG9mIDptZXRoOmBMb2FkZXIubG9hZF9tb2R1bGVgLgorICAgICAgIENvbmNyZXRlIGltcGxlbWVudGF0aW9uIG9mIDptZXRoOmBMb2FkZXIubG9hZF9tb2R1bGVgLgorCisgICAgICAgLi4gZGVwcmVjYXRlZDo6IDMuNAorICAgICAgICAgIFVzZSA6bWV0aDpgZXhlY19tb2R1bGVgIGluc3RlYWQuCiAKICAgICAuLiBtZXRob2Q6OiBnZXRfc291cmNlKGZ1bGxuYW1lKQogCkBAIC00NDAsMTQyICs2NjYsNiBAQAogICAgICAgICBpdHNlbGYgZG9lcyBub3QgZW5kIGluIGBgX19pbml0X19gYC4KIAogCi0uLiBjbGFzczo6IFB5TG9hZGVyCi0KLSAgICBBbiBhYnN0cmFjdCBiYXNlIGNsYXNzIGluaGVyaXRpbmcgZnJvbQotICAgIDpjbGFzczpgRXhlY3V0aW9uTG9hZGVyYCBhbmQKLSAgICA6Y2xhc3M6YFJlc291cmNlTG9hZGVyYCBkZXNpZ25lZCB0byBlYXNlIHRoZSBsb2FkaW5nIG9mCi0gICAgUHl0aG9uIHNvdXJjZSBtb2R1bGVzIChieXRlY29kZSBpcyBub3QgaGFuZGxlZDsgc2VlCi0gICAgOmNsYXNzOmBTb3VyY2VMb2FkZXJgIGZvciBhIHNvdXJjZS9ieXRlY29kZSBBQkMpLiBBIHN1YmNsYXNzCi0gICAgaW1wbGVtZW50aW5nIHRoaXMgQUJDIHdpbGwgb25seSBuZWVkIHRvIHdvcnJ5IGFib3V0IGV4cG9zaW5nIGhvdyB0aGUgc291cmNlCi0gICAgY29kZSBpcyBzdG9yZWQ7IGFsbCBvdGhlciBkZXRhaWxzIGZvciBsb2FkaW5nIFB5dGhvbiBzb3VyY2UgY29kZSB3aWxsIGJlCi0gICAgaGFuZGxlZCBieSB0aGUgY29uY3JldGUgaW1wbGVtZW50YXRpb25zIG9mIGtleSBtZXRob2RzLgotCi0gICAgLi4gZGVwcmVjYXRlZDo6IDMuMgotICAgICAgICBUaGlzIGNsYXNzIGhhcyBiZWVuIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgOmNsYXNzOmBTb3VyY2VMb2FkZXJgIGFuZCBpcwotICAgICAgICBzbGF0ZWQgZm9yIHJlbW92YWwgaW4gUHl0aG9uIDMuNC4gU2VlIGJlbG93IGZvciBob3cgdG8gY3JlYXRlIGEKLSAgICAgICAgc3ViY2xhc3MgdGhhdCBpcyBjb21wYXRpYmxlIHdpdGggUHl0aG9uIDMuMSBvbndhcmRzLgotCi0gICAgSWYgY29tcGF0aWJpbGl0eSB3aXRoIFB5dGhvbiAzLjEgaXMgcmVxdWlyZWQsIHRoZW4gdXNlIHRoZSBmb2xsb3dpbmcgaWRpb20KLSAgICB0byBpbXBsZW1lbnQgYSBzdWJjbGFzcyB0aGF0IHdpbGwgd29yayB3aXRoIFB5dGhvbiAzLjEgb253YXJkcyAobWFrZSBzdXJlCi0gICAgdG8gaW1wbGVtZW50IDptZXRoOmBFeGVjdXRpb25Mb2FkZXIuZ2V0X2ZpbGVuYW1lYCk6OgotCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGZyb20gaW1wb3J0bGliLmFiYyBpbXBvcnQgU291cmNlTG9hZGVyCi0gICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAgICAgICAgIGZyb20gaW1wb3J0bGliLmFiYyBpbXBvcnQgUHlMb2FkZXIgYXMgU291cmNlTG9hZGVyCi0KLQotICAgICAgICBjbGFzcyBDdXN0b21Mb2FkZXIoU291cmNlTG9hZGVyKToKLSAgICAgICAgICAgIGRlZiBnZXRfZmlsZW5hbWUoc2VsZiwgZnVsbG5hbWUpOgotICAgICAgICAgICAgICAgICIiIlJldHVybiB0aGUgcGF0aCB0byB0aGUgc291cmNlIGZpbGUuIiIiCi0gICAgICAgICAgICAgICAgIyBJbXBsZW1lbnQgLi4uCi0KLSAgICAgICAgICAgIGRlZiBzb3VyY2VfcGF0aChzZWxmLCBmdWxsbmFtZSk6Ci0gICAgICAgICAgICAgICAgIiIiSW1wbGVtZW50IHNvdXJjZV9wYXRoIGluIHRlcm1zIG9mIGdldF9maWxlbmFtZS4iIiIKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmdldF9maWxlbmFtZShmdWxsbmFtZSkKLSAgICAgICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25lCi0KLSAgICAgICAgICAgIGRlZiBpc19wYWNrYWdlKHNlbGYsIGZ1bGxuYW1lKToKLSAgICAgICAgICAgICAgICAiIiJJbXBsZW1lbnQgaXNfcGFja2FnZSBieSBsb29raW5nIGZvciBhbiBfX2luaXRfXyBmaWxlCi0gICAgICAgICAgICAgICAgbmFtZSBhcyByZXR1cm5lZCBieSBnZXRfZmlsZW5hbWUuIiIiCi0gICAgICAgICAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKHNlbGYuZ2V0X2ZpbGVuYW1lKGZ1bGxuYW1lKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gb3MucGF0aC5zcGxpdGV4dChmaWxlbmFtZSlbMF0gPT0gJ19faW5pdF9fJwotCi0KLSAgICAuLiBtZXRob2Q6OiBzb3VyY2VfcGF0aChmdWxsbmFtZSkKLQotICAgICAgICBBbiBhYnN0cmFjdCBtZXRob2QgdGhhdCByZXR1cm5zIHRoZSBwYXRoIHRvIHRoZSBzb3VyY2UgY29kZSBmb3IgYQotICAgICAgICBtb2R1bGUuIFNob3VsZCByZXR1cm4gYGBOb25lYGAgaWYgdGhlcmUgaXMgbm8gc291cmNlIGNvZGUuCi0gICAgICAgIFJhaXNlcyA6ZXhjOmBJbXBvcnRFcnJvcmAgaWYgdGhlIGxvYWRlciBrbm93cyBpdCBjYW5ub3QgaGFuZGxlIHRoZQotICAgICAgICBtb2R1bGUuCi0KLSAgICAuLiBtZXRob2Q6OiBnZXRfZmlsZW5hbWUoZnVsbG5hbWUpCi0KLSAgICAgICAgQSBjb25jcmV0ZSBpbXBsZW1lbnRhdGlvbiBvZgotICAgICAgICA6bWV0aDpgaW1wb3J0bGliLmFiYy5FeGVjdXRpb25Mb2FkZXIuZ2V0X2ZpbGVuYW1lYCB0aGF0Ci0gICAgICAgIHJlbGllcyBvbiA6bWV0aDpgc291cmNlX3BhdGhgLiBJZiA6bWV0aDpgc291cmNlX3BhdGhgIHJldHVybnMKLSAgICAgICAgYGBOb25lYGAsIHRoZW4gOmV4YzpgSW1wb3J0RXJyb3JgIGlzIHJhaXNlZC4KLQotICAgIC4uIG1ldGhvZDo6IGxvYWRfbW9kdWxlKGZ1bGxuYW1lKQotCi0gICAgICAgIEEgY29uY3JldGUgaW1wbGVtZW50YXRpb24gb2YgOm1ldGg6YGltcG9ydGxpYi5hYmMuTG9hZGVyLmxvYWRfbW9kdWxlYAotICAgICAgICB0aGF0IGxvYWRzIFB5dGhvbiBzb3VyY2UgY29kZS4gQWxsIG5lZWRlZCBpbmZvcm1hdGlvbiBjb21lcyBmcm9tIHRoZQotICAgICAgICBhYnN0cmFjdCBtZXRob2RzIHJlcXVpcmVkIGJ5IHRoaXMgQUJDLiBUaGUgb25seSBwZXJ0aW5lbnQgYXNzdW1wdGlvbgotICAgICAgICBtYWRlIGJ5IHRoaXMgbWV0aG9kIGlzIHRoYXQgd2hlbiBsb2FkaW5nIGEgcGFja2FnZQotICAgICAgICA6YXR0cjpgX19wYXRoX19gIGlzIHNldCB0byBgYFtvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pXWBgLgotCi0gICAgLi4gbWV0aG9kOjogZ2V0X2NvZGUoZnVsbG5hbWUpCi0KLSAgICAgICAgQSBjb25jcmV0ZSBpbXBsZW1lbnRhdGlvbiBvZgotICAgICAgICA6bWV0aDpgaW1wb3J0bGliLmFiYy5JbnNwZWN0TG9hZGVyLmdldF9jb2RlYCB0aGF0IGNyZWF0ZXMgY29kZSBvYmplY3RzCi0gICAgICAgIGZyb20gUHl0aG9uIHNvdXJjZSBjb2RlLCBieSByZXF1ZXN0aW5nIHRoZSBzb3VyY2UgY29kZSAodXNpbmcKLSAgICAgICAgOm1ldGg6YHNvdXJjZV9wYXRoYCBhbmQgOm1ldGg6YGdldF9kYXRhYCkgYW5kIGNvbXBpbGluZyBpdCB3aXRoIHRoZQotICAgICAgICBidWlsdC1pbiA6ZnVuYzpgY29tcGlsZWAgZnVuY3Rpb24uCi0KLSAgICAuLiBtZXRob2Q6OiBnZXRfc291cmNlKGZ1bGxuYW1lKQotCi0gICAgICAgIEEgY29uY3JldGUgaW1wbGVtZW50YXRpb24gb2YKLSAgICAgICAgOm1ldGg6YGltcG9ydGxpYi5hYmMuSW5zcGVjdExvYWRlci5nZXRfc291cmNlYC4gVXNlcwotICAgICAgICA6bWV0aDpgaW1wb3J0bGliLmFiYy5SZXNvdXJjZUxvYWRlci5nZXRfZGF0YWAgYW5kIDptZXRoOmBzb3VyY2VfcGF0aGAKLSAgICAgICAgdG8gZ2V0IHRoZSBzb3VyY2UgY29kZS4gIEl0IHRyaWVzIHRvIGd1ZXNzIHRoZSBzb3VyY2UgZW5jb2RpbmcgdXNpbmcKLSAgICAgICAgOmZ1bmM6YHRva2VuaXplLmRldGVjdF9lbmNvZGluZ2AuCi0KLQotLi4gY2xhc3M6OiBQeVB5Y0xvYWRlcgotCi0gICAgQW4gYWJzdHJhY3QgYmFzZSBjbGFzcyBpbmhlcml0aW5nIGZyb20gOmNsYXNzOmBQeUxvYWRlcmAuCi0gICAgVGhpcyBBQkMgaXMgbWVhbnQgdG8gaGVscCBpbiBjcmVhdGluZyBsb2FkZXJzIHRoYXQgc3VwcG9ydCBib3RoIFB5dGhvbgotICAgIHNvdXJjZSBhbmQgYnl0ZWNvZGUuCi0KLSAgICAuLiBkZXByZWNhdGVkOjogMy4yCi0gICAgICAgIFRoaXMgY2xhc3MgaGFzIGJlZW4gZGVwcmVjYXRlZCBpbiBmYXZvciBvZiA6Y2xhc3M6YFNvdXJjZUxvYWRlcmAgYW5kIHRvCi0gICAgICAgIHByb3Blcmx5IHN1cHBvcnQgOnBlcDpgMzE0N2AuIElmIGNvbXBhdGliaWxpdHkgaXMgcmVxdWlyZWQgd2l0aAotICAgICAgICBQeXRob24gMy4xLCBpbXBsZW1lbnQgYm90aCA6Y2xhc3M6YFNvdXJjZUxvYWRlcmAgYW5kIDpjbGFzczpgUHlMb2FkZXJgOwotICAgICAgICBpbnN0cnVjdGlvbnMgb24gaG93IHRvIGRvIHNvIGFyZSBpbmNsdWRlZCBpbiB0aGUgZG9jdW1lbnRhdGlvbiBmb3IKLSAgICAgICAgOmNsYXNzOmBQeUxvYWRlcmAuIERvIG5vdGUgdGhhdCB0aGlzIHNvbHV0aW9uIHdpbGwgbm90IHN1cHBvcnQKLSAgICAgICAgc291cmNlbGVzcy9ieXRlY29kZS1vbmx5IGxvYWRpbmc7IG9ubHkgc291cmNlICphbmQqIGJ5dGVjb2RlIGxvYWRpbmcuCi0KLSAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMwotICAgICAgIFVwZGF0ZWQgdG8gcGFyc2UgKGJ1dCBub3QgdXNlKSB0aGUgbmV3IHNvdXJjZSBzaXplIGZpZWxkIGluIGJ5dGVjb2RlCi0gICAgICAgZmlsZXMgd2hlbiByZWFkaW5nIGFuZCB0byB3cml0ZSBvdXQgdGhlIGZpZWxkIHByb3Blcmx5IHdoZW4gd3JpdGluZy4KLQotICAgIC4uIG1ldGhvZDo6IHNvdXJjZV9tdGltZShmdWxsbmFtZSkKLQotICAgICAgICBBbiBhYnN0cmFjdCBtZXRob2Qgd2hpY2ggcmV0dXJucyB0aGUgbW9kaWZpY2F0aW9uIHRpbWUgZm9yIHRoZSBzb3VyY2UKLSAgICAgICAgY29kZSBvZiB0aGUgc3BlY2lmaWVkIG1vZHVsZS4gVGhlIG1vZGlmaWNhdGlvbiB0aW1lIHNob3VsZCBiZSBhbgotICAgICAgICBpbnRlZ2VyLiBJZiB0aGVyZSBpcyBubyBzb3VyY2UgY29kZSwgcmV0dXJuIGBgTm9uZWBgLiBJZiB0aGUKLSAgICAgICAgbW9kdWxlIGNhbm5vdCBiZSBmb3VuZCB0aGVuIDpleGM6YEltcG9ydEVycm9yYCBpcyByYWlzZWQuCi0KLSAgICAuLiBtZXRob2Q6OiBieXRlY29kZV9wYXRoKGZ1bGxuYW1lKQotCi0gICAgICAgIEFuIGFic3RyYWN0IG1ldGhvZCB3aGljaCByZXR1cm5zIHRoZSBwYXRoIHRvIHRoZSBieXRlY29kZSBmb3IgdGhlCi0gICAgICAgIHNwZWNpZmllZCBtb2R1bGUsIGlmIGl0IGV4aXN0cy4gSXQgcmV0dXJucyBgYE5vbmVgYAotICAgICAgICBpZiBubyBieXRlY29kZSBleGlzdHMgKHlldCkuCi0gICAgICAgIFJhaXNlcyA6ZXhjOmBJbXBvcnRFcnJvcmAgaWYgdGhlIGxvYWRlciBrbm93cyBpdCBjYW5ub3QgaGFuZGxlIHRoZQotICAgICAgICBtb2R1bGUuCi0KLSAgICAuLiBtZXRob2Q6OiBnZXRfZmlsZW5hbWUoZnVsbG5hbWUpCi0KLSAgICAgICAgQSBjb25jcmV0ZSBpbXBsZW1lbnRhdGlvbiBvZgotICAgICAgICA6bWV0aDpgRXhlY3V0aW9uTG9hZGVyLmdldF9maWxlbmFtZWAgdGhhdCByZWxpZXMgb24KLSAgICAgICAgOm1ldGg6YFB5TG9hZGVyLnNvdXJjZV9wYXRoYCBhbmQgOm1ldGg6YGJ5dGVjb2RlX3BhdGhgLgotICAgICAgICBJZiA6bWV0aDpgc291cmNlX3BhdGhgIHJldHVybnMgYSBwYXRoLCB0aGVuIHRoYXQgdmFsdWUgaXMgcmV0dXJuZWQuCi0gICAgICAgIEVsc2UgaWYgOm1ldGg6YGJ5dGVjb2RlX3BhdGhgIHJldHVybnMgYSBwYXRoLCB0aGF0IHBhdGggd2lsbCBiZQotICAgICAgICByZXR1cm5lZC4gSWYgYSBwYXRoIGlzIG5vdCBhdmFpbGFibGUgZnJvbSBib3RoIG1ldGhvZHMsCi0gICAgICAgIDpleGM6YEltcG9ydEVycm9yYCBpcyByYWlzZWQuCi0KLSAgICAuLiBtZXRob2Q6OiB3cml0ZV9ieXRlY29kZShmdWxsbmFtZSwgYnl0ZWNvZGUpCi0KLSAgICAgICAgQW4gYWJzdHJhY3QgbWV0aG9kIHdoaWNoIGhhcyB0aGUgbG9hZGVyIHdyaXRlICpieXRlY29kZSogZm9yIGZ1dHVyZQotICAgICAgICB1c2UuIElmIHRoZSBieXRlY29kZSBpcyB3cml0dGVuLCByZXR1cm4gYGBUcnVlYGAuIFJldHVybgotICAgICAgICBgYEZhbHNlYGAgaWYgdGhlIGJ5dGVjb2RlIGNvdWxkIG5vdCBiZSB3cml0dGVuLiBUaGlzIG1ldGhvZAotICAgICAgICBzaG91bGQgbm90IGJlIGNhbGxlZCBpZiA6ZGF0YTpgc3lzLmRvbnRfd3JpdGVfYnl0ZWNvZGVgIGlzIHRydWUuCi0gICAgICAgIFRoZSAqYnl0ZWNvZGUqIGFyZ3VtZW50IHNob3VsZCBiZSBhIGJ5dGVzIHN0cmluZyBvciBieXRlcyBhcnJheS4KLQotCiA6bW9kOmBpbXBvcnRsaWIubWFjaGluZXJ5YCAtLSBJbXBvcnRlcnMgYW5kIHBhdGggaG9va3MKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC02MjcsNyArNzE3LDcgQEAKICAgIG1vZHVsZXMgcmVjb2duaXplZCBieSB0aGUgc3RhbmRhcmQgaW1wb3J0IG1hY2hpbmVyeS4gVGhpcyBpcyBhCiAgICBoZWxwZXIgZm9yIGNvZGUgd2hpY2ggc2ltcGx5IG5lZWRzIHRvIGtub3cgaWYgYSBmaWxlc3lzdGVtIHBhdGgKICAgIHBvdGVudGlhbGx5IHJlZmVycyB0byBhIG1vZHVsZSB3aXRob3V0IG5lZWRpbmcgYW55IGRldGFpbHMgb24gdGhlIGtpbmQKLSAgIG9mIG1vZHVsZSAoZm9yIGV4YW1wbGUsIDpmdW5jOmBpbnNwZWN0LmdldG1vZHVsZW5hbWVgKQorICAgb2YgbW9kdWxlIChmb3IgZXhhbXBsZSwgOmZ1bmM6YGluc3BlY3QuZ2V0bW9kdWxlbmFtZWApLgogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKIApAQCAtNjQyLDYgKzczMiwxMCBAQAogICAgIE9ubHkgY2xhc3MgbWV0aG9kcyBhcmUgZGVmaW5lZCBieSB0aGlzIGNsYXNzIHRvIGFsbGV2aWF0ZSB0aGUgbmVlZCBmb3IKICAgICBpbnN0YW50aWF0aW9uLgogCisgICAgLi4gbm90ZTo6CisgICAgICAgRHVlIHRvIGxpbWl0YXRpb25zIGluIHRoZSBleHRlbnNpb24gbW9kdWxlIEMtQVBJLCBmb3Igbm93CisgICAgICAgQnVpbHRpbkltcG9ydGVyIGRvZXMgbm90IGltcGxlbWVudCA6bWV0aDpgTG9hZGVyLmV4ZWNfbW9kdWxlYC4KKwogCiAuLiBjbGFzczo6IEZyb3plbkltcG9ydGVyCiAKQEAgLTY3MiwyNCArNzY2LDM3IEBACiAgICBPbmx5IGNsYXNzIG1ldGhvZHMgYXJlIGRlZmluZWQgYnkgdGhpcyBjbGFzcyB0byBhbGxldmlhdGUgdGhlIG5lZWQgZm9yCiAgICBpbnN0YW50aWF0aW9uLgogCisgICAuLiBjbGFzc21ldGhvZDo6IGZpbmRfc3BlYyhmdWxsbmFtZSwgcGF0aD1Ob25lLCB0YXJnZXQ9Tm9uZSkKKworICAgICAgQ2xhc3MgbWV0aG9kIHRoYXQgYXR0ZW1wdHMgdG8gZmluZCBhIDp0ZXJtOmBzcGVjIDxtb2R1bGUgc3BlYz5gCisgICAgICBmb3IgdGhlIG1vZHVsZSBzcGVjaWZpZWQgYnkgKmZ1bGxuYW1lKiBvbiA6ZGF0YTpgc3lzLnBhdGhgIG9yLCBpZgorICAgICAgZGVmaW5lZCwgb24gKnBhdGgqLiBGb3IgZWFjaCBwYXRoIGVudHJ5IHRoYXQgaXMgc2VhcmNoZWQsCisgICAgICA6ZGF0YTpgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGVgIGlzIGNoZWNrZWQuIElmIGEgbm9uLWZhbHNlIG9iamVjdAorICAgICAgaXMgZm91bmQgdGhlbiBpdCBpcyB1c2VkIGFzIHRoZSA6dGVybTpgcGF0aCBlbnRyeSBmaW5kZXJgIHRvIGxvb2sKKyAgICAgIGZvciB0aGUgbW9kdWxlIGJlaW5nIHNlYXJjaGVkIGZvci4gSWYgbm8gZW50cnkgaXMgZm91bmQgaW4KKyAgICAgIDpkYXRhOmBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZWAsIHRoZW4gOmRhdGE6YHN5cy5wYXRoX2hvb2tzYCBpcworICAgICAgc2VhcmNoZWQgZm9yIGEgZmluZGVyIGZvciB0aGUgcGF0aCBlbnRyeSBhbmQsIGlmIGZvdW5kLCBpcyBzdG9yZWQKKyAgICAgIGluIDpkYXRhOmBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZWAgYWxvbmcgd2l0aCBiZWluZyBxdWVyaWVkIGFib3V0CisgICAgICB0aGUgbW9kdWxlLiBJZiBubyBmaW5kZXIgaXMgZXZlciBmb3VuZCB0aGVuIGBgTm9uZWBgIGlzIGJvdGgKKyAgICAgIHN0b3JlZCBpbiB0aGUgY2FjaGUgYW5kIHJldHVybmVkLgorCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogICAgLi4gY2xhc3NtZXRob2Q6OiBmaW5kX21vZHVsZShmdWxsbmFtZSwgcGF0aD1Ob25lKQogCi0gICAgIENsYXNzIG1ldGhvZCB0aGF0IGF0dGVtcHRzIHRvIGZpbmQgYSA6dGVybTpgbG9hZGVyYCBmb3IgdGhlIG1vZHVsZQotICAgICBzcGVjaWZpZWQgYnkgKmZ1bGxuYW1lKiBvbiA6ZGF0YTpgc3lzLnBhdGhgIG9yLCBpZiBkZWZpbmVkLCBvbgotICAgICAqcGF0aCouIEZvciBlYWNoIHBhdGggZW50cnkgdGhhdCBpcyBzZWFyY2hlZCwKLSAgICAgOmRhdGE6YHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlYCBpcyBjaGVja2VkLiBJZiBhIG5vbi1mYWxzZSBvYmplY3QgaXMKLSAgICAgZm91bmQgdGhlbiBpdCBpcyB1c2VkIGFzIHRoZSA6dGVybTpgcGF0aCBlbnRyeSBmaW5kZXJgIHRvIGxvb2sgZm9yIHRoZQotICAgICBtb2R1bGUgYmVpbmcgc2VhcmNoZWQgZm9yLiBJZiBubyBlbnRyeSBpcyBmb3VuZCBpbgotICAgICA6ZGF0YTpgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGVgLCB0aGVuIDpkYXRhOmBzeXMucGF0aF9ob29rc2AgaXMKLSAgICAgc2VhcmNoZWQgZm9yIGEgZmluZGVyIGZvciB0aGUgcGF0aCBlbnRyeSBhbmQsIGlmIGZvdW5kLCBpcyBzdG9yZWQgaW4KLSAgICAgOmRhdGE6YHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlYCBhbG9uZyB3aXRoIGJlaW5nIHF1ZXJpZWQgYWJvdXQgdGhlCi0gICAgIG1vZHVsZS4gSWYgbm8gZmluZGVyIGlzIGV2ZXIgZm91bmQgdGhlbiBgYE5vbmVgYCBpcyBib3RoIHN0b3JlZCBpbgotICAgICB0aGUgY2FjaGUgYW5kIHJldHVybmVkLgorICAgICAgQSBsZWdhY3kgd3JhcHBlciBhcm91bmQgOm1ldGg6YGZpbmRfc3BlY2AuCisKKyAgICAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjQKKyAgICAgICAgIFVzZSA6bWV0aDpgZmluZF9zcGVjYCBpbnN0ZWFkLgogCiAgICAuLiBjbGFzc21ldGhvZDo6IGludmFsaWRhdGVfY2FjaGVzKCkKIAotICAgICBDYWxscyA6bWV0aDpgaW1wb3J0bGliLmFiYy5QYXRoRW50cnlGaW5kZXIuaW52YWxpZGF0ZV9jYWNoZXNgIG9uIGFsbAotICAgICBmaW5kZXJzIHN0b3JlZCBpbiA6YXR0cjpgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGVgLgorICAgICAgQ2FsbHMgOm1ldGg6YGltcG9ydGxpYi5hYmMuUGF0aEVudHJ5RmluZGVyLmludmFsaWRhdGVfY2FjaGVzYCBvbiBhbGwKKyAgICAgIGZpbmRlcnMgc3RvcmVkIGluIDphdHRyOmBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZWAuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBDYWxscyBvYmplY3RzIGluIDpkYXRhOmBzeXMucGF0aF9ob29rc2Agd2l0aCB0aGUgY3VycmVudCB3b3JraW5nCisgICAgICBkaXJlY3RvcnkgZm9yIGBgJydgYCAoaS5lLiB0aGUgZW1wdHkgc3RyaW5nKS4KIAogCiAuLiBjbGFzczo6IEZpbGVGaW5kZXIocGF0aCwgXCpsb2FkZXJfZGV0YWlscykKQEAgLTcyMSw2ICs4MjgsMTIgQEAKIAogICAgICAgVGhlIHBhdGggdGhlIGZpbmRlciB3aWxsIHNlYXJjaCBpbi4KIAorICAgLi4gbWV0aG9kOjogZmluZF9zcGVjKGZ1bGxuYW1lLCB0YXJnZXQ9Tm9uZSkKKworICAgICAgQXR0ZW1wdCB0byBmaW5kIHRoZSBzcGVjIHRvIGhhbmRsZSAqZnVsbG5hbWUqIHdpdGhpbiA6YXR0cjpgcGF0aGAuCisKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiAgICAuLiBtZXRob2Q6OiBmaW5kX2xvYWRlcihmdWxsbmFtZSkKIAogICAgICAgQXR0ZW1wdCB0byBmaW5kIHRoZSBsb2FkZXIgdG8gaGFuZGxlICpmdWxsbmFtZSogd2l0aGluIDphdHRyOmBwYXRoYC4KQEAgLTc2OCw2ICs4ODEsMTEgQEAKIAogICAgICAgQ29uY3JldGUgaW1wbGVtZW50YXRpb24gb2YgOm1ldGg6YGltcG9ydGxpYi5hYmMuU291cmNlTG9hZGVyLnNldF9kYXRhYC4KIAorICAgLi4gbWV0aG9kOjogbG9hZF9tb2R1bGUobmFtZT1Ob25lKQorCisgICAgICBDb25jcmV0ZSBpbXBsZW1lbnRhdGlvbiBvZiA6bWV0aDpgaW1wb3J0bGliLmFiYy5Mb2FkZXIubG9hZF9tb2R1bGVgIHdoZXJlCisgICAgICBzcGVjaWZ5aW5nIHRoZSBuYW1lIG9mIHRoZSBtb2R1bGUgdG8gbG9hZCBpcyBvcHRpb25hbC4KKwogCiAuLiBjbGFzczo6IFNvdXJjZWxlc3NGaWxlTG9hZGVyKGZ1bGxuYW1lLCBwYXRoKQogCkBAIC04MDIsMTAgKzkyMCwxNSBAQAogICAgICAgUmV0dXJucyBgYE5vbmVgYCBhcyBieXRlY29kZSBmaWxlcyBoYXZlIG5vIHNvdXJjZSB3aGVuIHRoaXMgbG9hZGVyIGlzCiAgICAgICB1c2VkLgogCisgICAuLiBtZXRob2Q6OiBsb2FkX21vZHVsZShuYW1lPU5vbmUpCisKKyAgIENvbmNyZXRlIGltcGxlbWVudGF0aW9uIG9mIDptZXRoOmBpbXBvcnRsaWIuYWJjLkxvYWRlci5sb2FkX21vZHVsZWAgd2hlcmUKKyAgIHNwZWNpZnlpbmcgdGhlIG5hbWUgb2YgdGhlIG1vZHVsZSB0byBsb2FkIGlzIG9wdGlvbmFsLgorCiAKIC4uIGNsYXNzOjogRXh0ZW5zaW9uRmlsZUxvYWRlcihmdWxsbmFtZSwgcGF0aCkKIAotICAgQSBjb25jcmV0ZSBpbXBsZW1lbnRhdGlvbiBvZiA6Y2xhc3M6YGltcG9ydGxpYi5hYmMuSW5zcGVjdExvYWRlcmAgZm9yCisgICBBIGNvbmNyZXRlIGltcGxlbWVudGF0aW9uIG9mIDpjbGFzczpgaW1wb3J0bGliLmFiYy5FeGVjdXRpb25Mb2FkZXJgIGZvcgogICAgZXh0ZW5zaW9uIG1vZHVsZXMuCiAKICAgIFRoZSAqZnVsbG5hbWUqIGFyZ3VtZW50IHNwZWNpZmllcyB0aGUgbmFtZSBvZiB0aGUgbW9kdWxlIHRoZSBsb2FkZXIgaXMgdG8KQEAgLTgyMSwxMSArOTQ0LDE1IEBACiAKICAgICAgIFBhdGggdG8gdGhlIGV4dGVuc2lvbiBtb2R1bGUuCiAKLSAgIC4uIG1ldGhvZDo6IGxvYWRfbW9kdWxlKGZ1bGxuYW1lKQorICAgLi4gbWV0aG9kOjogbG9hZF9tb2R1bGUobmFtZT1Ob25lKQogCiAgICAgICBMb2FkcyB0aGUgZXh0ZW5zaW9uIG1vZHVsZSBpZiBhbmQgb25seSBpZiAqZnVsbG5hbWUqIGlzIHRoZSBzYW1lIGFzCiAgICAgICA6YXR0cjpgbmFtZWAgb3IgaXMgYGBOb25lYGAuCiAKKyAgICAgIC4uIG5vdGU6OgorICAgICAgICAgRHVlIHRvIGxpbWl0YXRpb25zIGluIHRoZSBleHRlbnNpb24gbW9kdWxlIEMtQVBJLCBmb3Igbm93CisgICAgICAgICBFeHRlbnNpb25GaWxlTG9hZGVyIGRvZXMgbm90IGltcGxlbWVudCA6bWV0aDpgTG9hZGVyLmV4ZWNfbW9kdWxlYC4KKwogICAgLi4gbWV0aG9kOjogaXNfcGFja2FnZShmdWxsbmFtZSkKIAogICAgICAgUmV0dXJucyBgYFRydWVgYCBpZiB0aGUgZmlsZSBwYXRoIHBvaW50cyB0byBhIHBhY2thZ2UncyBgYF9faW5pdF9fYGAKQEAgLTgzOSw2ICs5NjYsNzAgQEAKIAogICAgICAgUmV0dXJucyBgYE5vbmVgYCBhcyBleHRlbnNpb24gbW9kdWxlcyBkbyBub3QgaGF2ZSBzb3VyY2UgY29kZS4KIAorICAgLi4gbWV0aG9kOjogZ2V0X2ZpbGVuYW1lKGZ1bGxuYW1lKQorCisgICAgICBSZXR1cm5zIDphdHRyOmBwYXRoYC4KKworICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKworLi4gY2xhc3M6OiBNb2R1bGVTcGVjKG5hbWUsIGxvYWRlciwgKiwgb3JpZ2luPU5vbmUsIGxvYWRlcl9zdGF0ZT1Ob25lLCBpc19wYWNrYWdlPU5vbmUpCisKKyAgIEEgc3BlY2lmaWNhdGlvbiBmb3IgYSBtb2R1bGUncyBpbXBvcnQtc3lzdGVtLXJlbGF0ZWQgc3RhdGUuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisgICAuLiBhdHRyaWJ1dGU6OiBuYW1lCisKKyAgIChgYF9fbmFtZV9fYGApCisKKyAgIEEgc3RyaW5nIGZvciB0aGUgZnVsbHktcXVhbGlmaWVkIG5hbWUgb2YgdGhlIG1vZHVsZS4KKworICAgLi4gYXR0cmlidXRlOjogbG9hZGVyCisKKyAgIChgYF9fbG9hZGVyX19gYCkKKworICAgVGhlIGxvYWRlciB0byB1c2UgZm9yIGxvYWRpbmcuICBGb3IgbmFtZXNwYWNlIHBhY2thZ2VzIHRoaXMgc2hvdWxkIGJlCisgICBzZXQgdG8gTm9uZS4KKworICAgLi4gYXR0cmlidXRlOjogb3JpZ2luCisKKyAgIChgYF9fZmlsZV9fYGApCisKKyAgIE5hbWUgb2YgdGhlIHBsYWNlIGZyb20gd2hpY2ggdGhlIG1vZHVsZSBpcyBsb2FkZWQsIGUuZy4gImJ1aWx0aW4iIGZvcgorICAgYnVpbHQtaW4gbW9kdWxlcyBhbmQgdGhlIGZpbGVuYW1lIGZvciBtb2R1bGVzIGxvYWRlZCBmcm9tIHNvdXJjZS4KKyAgIE5vcm1hbGx5ICJvcmlnaW4iIHNob3VsZCBiZSBzZXQsIGJ1dCBpdCBtYXkgYmUgTm9uZSAodGhlIGRlZmF1bHQpCisgICB3aGljaCBpbmRpY2F0ZXMgaXQgaXMgdW5zcGVjaWZpZWQuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IHN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zCisKKyAgIChgYF9fcGF0aF9fYGApCisKKyAgIExpc3Qgb2Ygc3RyaW5ncyBmb3Igd2hlcmUgdG8gZmluZCBzdWJtb2R1bGVzLCBpZiBhIHBhY2thZ2UgKE5vbmUKKyAgIG90aGVyd2lzZSkuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IGxvYWRlcl9zdGF0ZQorCisgICBDb250YWluZXIgb2YgZXh0cmEgbW9kdWxlLXNwZWNpZmljIGRhdGEgZm9yIHVzZSBkdXJpbmcgbG9hZGluZyAob3IKKyAgIE5vbmUpLgorCisgICAuLiBhdHRyaWJ1dGU6OiBjYWNoZWQKKworICAgKGBgX19jYWNoZWRfX2BgKQorCisgICBTdHJpbmcgZm9yIHdoZXJlIHRoZSBjb21waWxlZCBtb2R1bGUgc2hvdWxkIGJlIHN0b3JlZCAob3IgTm9uZSkuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IHBhcmVudAorCisgICAoYGBfX3BhY2thZ2VfX2BgKQorCisgICAoUmVhZC1vbmx5KSBGdWxseS1xdWFsaWZpZWQgbmFtZSBvZiB0aGUgcGFja2FnZSB0byB3aGljaCB0aGUgbW9kdWxlCisgICBiZWxvbmdzIGFzIGEgc3VibW9kdWxlIChvciBOb25lKS4KKworICAgLi4gYXR0cmlidXRlOjogaGFzX2xvY2F0aW9uCisKKyAgIEJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIG9yIG5vdCB0aGUgbW9kdWxlJ3MgIm9yaWdpbiIKKyAgIGF0dHJpYnV0ZSByZWZlcnMgdG8gYSBsb2FkYWJsZSBsb2NhdGlvbi4KIAogOm1vZDpgaW1wb3J0bGliLnV0aWxgIC0tIFV0aWxpdHkgY29kZSBmb3IgaW1wb3J0ZXJzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTg0OSw2ICsxMDQwLDUxIEBACiBUaGlzIG1vZHVsZSBjb250YWlucyB0aGUgdmFyaW91cyBvYmplY3RzIHRoYXQgaGVscCBpbiB0aGUgY29uc3RydWN0aW9uIG9mCiBhbiA6dGVybTpgaW1wb3J0ZXJgLgogCisuLiBhdHRyaWJ1dGU6OiBNQUdJQ19OVU1CRVIKKworICAgVGhlIGJ5dGVzIHdoaWNoIHJlcHJlc2VudCB0aGUgYnl0ZWNvZGUgdmVyc2lvbiBudW1iZXIuIElmIHlvdSBuZWVkIGhlbHAgd2l0aAorICAgbG9hZGluZy93cml0aW5nIGJ5dGVjb2RlIHRoZW4gY29uc2lkZXIgOmNsYXNzOmBpbXBvcnRsaWIuYWJjLlNvdXJjZUxvYWRlcmAuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisuLiBmdW5jdGlvbjo6IGNhY2hlX2Zyb21fc291cmNlKHBhdGgsIGRlYnVnX292ZXJyaWRlPU5vbmUpCisKKyAgIFJldHVybiB0aGUgOnBlcDpgMzE0N2AgcGF0aCB0byB0aGUgYnl0ZS1jb21waWxlZCBmaWxlIGFzc29jaWF0ZWQgd2l0aCB0aGUKKyAgIHNvdXJjZSAqcGF0aCouICBGb3IgZXhhbXBsZSwgaWYgKnBhdGgqIGlzIGBgL2Zvby9iYXIvYmF6LnB5YGAgdGhlIHJldHVybgorICAgdmFsdWUgd291bGQgYmUgYGAvZm9vL2Jhci9fX3B5Y2FjaGVfXy9iYXouY3B5dGhvbi0zMi5weWNgYCBmb3IgUHl0aG9uIDMuMi4KKyAgIFRoZSBgYGNweXRob24tMzJgYCBzdHJpbmcgY29tZXMgZnJvbSB0aGUgY3VycmVudCBtYWdpYyB0YWcgKHNlZQorICAgOmZ1bmM6YGdldF90YWdgOyBpZiA6YXR0cjpgc3lzLmltcGxlbWVudGF0aW9uLmNhY2hlX3RhZ2AgaXMgbm90IGRlZmluZWQgdGhlbgorICAgOmV4YzpgTm90SW1wbGVtZW50ZWRFcnJvcmAgd2lsbCBiZSByYWlzZWQpLiAgVGhlIHJldHVybmVkIHBhdGggd2lsbCBlbmQgaW4KKyAgIGBgLnB5Y2BgIHdoZW4gYGBfX2RlYnVnX19gYCBpcyBgYFRydWVgYCBvciBgYC5weW9gYCBmb3IgYW4gb3B0aW1pemVkIFB5dGhvbgorICAgKGkuZS4gYGBfX2RlYnVnX19gYCBpcyBgYEZhbHNlYGApLiAgQnkgcGFzc2luZyBpbiBgYFRydWVgYCBvciBgYEZhbHNlYGAgZm9yCisgICAqZGVidWdfb3ZlcnJpZGUqIHlvdSBjYW4gb3ZlcnJpZGUgdGhlIHN5c3RlbSdzIHZhbHVlIGZvciBgYF9fZGVidWdfX2BgIGZvcgorICAgZXh0ZW5zaW9uIHNlbGVjdGlvbi4KKworICAgKnBhdGgqIG5lZWQgbm90IGV4aXN0LgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCisuLiBmdW5jdGlvbjo6IHNvdXJjZV9mcm9tX2NhY2hlKHBhdGgpCisKKyAgIEdpdmVuIHRoZSAqcGF0aCogdG8gYSA6cGVwOmAzMTQ3YCBmaWxlIG5hbWUsIHJldHVybiB0aGUgYXNzb2NpYXRlZCBzb3VyY2UgY29kZQorICAgZmlsZSBwYXRoLiAgRm9yIGV4YW1wbGUsIGlmICpwYXRoKiBpcworICAgYGAvZm9vL2Jhci9fX3B5Y2FjaGVfXy9iYXouY3B5dGhvbi0zMi5weWNgYCB0aGUgcmV0dXJuZWQgcGF0aCB3b3VsZCBiZQorICAgYGAvZm9vL2Jhci9iYXoucHlgYC4gICpwYXRoKiBuZWVkIG5vdCBleGlzdCwgaG93ZXZlciBpZiBpdCBkb2VzIG5vdCBjb25mb3JtCisgICB0byA6cGVwOmAzMTQ3YCBmb3JtYXQsIGEgYGBWYWx1ZUVycm9yYGAgaXMgcmFpc2VkLiBJZgorICAgOmF0dHI6YHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWdgIGlzIG5vdCBkZWZpbmVkLAorICAgOmV4YzpgTm90SW1wbGVtZW50ZWRFcnJvcmAgaXMgcmFpc2VkLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworLi4gZnVuY3Rpb246OiBkZWNvZGVfc291cmNlKHNvdXJjZV9ieXRlcykKKworICAgRGVjb2RlIHRoZSBnaXZlbiBieXRlcyByZXByZXNlbnRpbmcgc291cmNlIGNvZGUgYW5kIHJldHVybiBpdCBhcyBhIHN0cmluZworICAgd2l0aCB1bml2ZXJzYWwgbmV3bGluZXMgKGFzIHJlcXVpcmVkIGJ5CisgICA6bWV0aDpgaW1wb3J0bGliLmFiYy5JbnNwZWN0TG9hZGVyLmdldF9zb3VyY2VgKS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIC4uIGZ1bmN0aW9uOjogcmVzb2x2ZV9uYW1lKG5hbWUsIHBhY2thZ2UpCiAKICAgIFJlc29sdmUgYSByZWxhdGl2ZSBtb2R1bGUgbmFtZSB0byBhbiBhYnNvbHV0ZSBvbmUuCkBAIC04NjUsOSArMTEwMSwyNSBAQAogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKIAorLi4gZnVuY3Rpb246OiBmaW5kX3NwZWMobmFtZSwgcGFja2FnZT1Ob25lKQorCisgICBGaW5kIHRoZSA6dGVybTpgc3BlYyA8bW9kdWxlIHNwZWM+YCBmb3IgYSBtb2R1bGUsIG9wdGlvbmFsbHkgcmVsYXRpdmUgdG8KKyAgIHRoZSBzcGVjaWZpZWQgKipwYWNrYWdlKiogbmFtZS4gSWYgdGhlIG1vZHVsZSBpcyBpbiA6YXR0cjpgc3lzLm1vZHVsZXNgLAorICAgdGhlbiBgYHN5cy5tb2R1bGVzW25hbWVdLl9fc3BlY19fYGAgaXMgcmV0dXJuZWQgKHVubGVzcyB0aGUgc3BlYyB3b3VsZCBiZQorICAgYGBOb25lYGAgb3IgaXMgbm90IHNldCwgaW4gd2hpY2ggY2FzZSA6ZXhjOmBWYWx1ZUVycm9yYCBpcyByYWlzZWQpLgorICAgT3RoZXJ3aXNlIGEgc2VhcmNoIHVzaW5nIDphdHRyOmBzeXMubWV0YV9wYXRoYCBpcyBkb25lLiBgYE5vbmVgYCBpcworICAgcmV0dXJuZWQgaWYgbm8gc3BlYyBpcyBmb3VuZC4KKworICAgSWYgKipuYW1lKiogaXMgZm9yIGEgc3VibW9kdWxlIChjb250YWlucyBhIGRvdCksIHRoZSBwYXJlbnQgbW9kdWxlIGlzCisgICBhdXRvbWF0aWNhbGx5IGltcG9ydGVkLgorCisgICAqKm5hbWUqKiBhbmQgKipwYWNrYWdlKiogd29yayB0aGUgc2FtZSBhcyBmb3IgOmZ1bmM6YGltcG9ydF9tb2R1bGVgLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogLi4gZGVjb3JhdG9yOjogbW9kdWxlX2Zvcl9sb2FkZXIKIAotICAgIEEgOnRlcm06YGRlY29yYXRvcmAgZm9yIGEgOnRlcm06YGxvYWRlcmAgbWV0aG9kLAorICAgIEEgOnRlcm06YGRlY29yYXRvcmAgZm9yIDptZXRoOmBpbXBvcnRsaWIuYWJjLkxvYWRlci5sb2FkX21vZHVsZWAKICAgICB0byBoYW5kbGUgc2VsZWN0aW5nIHRoZSBwcm9wZXIKICAgICBtb2R1bGUgb2JqZWN0IHRvIGxvYWQgd2l0aC4gVGhlIGRlY29yYXRlZCBtZXRob2QgaXMgZXhwZWN0ZWQgdG8gaGF2ZSBhIGNhbGwKICAgICBzaWduYXR1cmUgdGFraW5nIHR3byBwb3NpdGlvbmFsIGFyZ3VtZW50cwpAQCAtODc4LDU1ICsxMTMwLDY4IEBACiAKICAgICBUaGUgZGVjb3JhdGVkIG1ldGhvZCB3aWxsIHRha2UgaW4gdGhlICoqbmFtZSoqIG9mIHRoZSBtb2R1bGUgdG8gYmUgbG9hZGVkCiAgICAgYXMgZXhwZWN0ZWQgZm9yIGEgOnRlcm06YGxvYWRlcmAuIElmIHRoZSBtb2R1bGUgaXMgbm90IGZvdW5kIGluCi0gICAgOmRhdGE6YHN5cy5tb2R1bGVzYCB0aGVuIGEgbmV3IG9uZSBpcyBjb25zdHJ1Y3RlZCB3aXRoIGl0cwotICAgIDphdHRyOmBfX25hbWVfX2AgYXR0cmlidXRlIHNldCB0byAqKm5hbWUqKiwgOmF0dHI6YF9fbG9hZGVyX19gIHNldCB0bwotICAgICoqc2VsZioqLCBhbmQgOmF0dHI6YF9fcGFja2FnZV9fYCBzZXQgaWYKLSAgICA6bWV0aDpgaW1wb3J0bGliLmFiYy5JbnNwZWN0TG9hZGVyLmlzX3BhY2thZ2VgIGlzIGRlZmluZWQgZm9yICoqc2VsZioqIGFuZAotICAgIGRvZXMgbm90IHJhaXNlIDpleGM6YEltcG9ydEVycm9yYCBmb3IgKipuYW1lKiouIElmIGEgbmV3IG1vZHVsZSBpcyBub3QKLSAgICBuZWVkZWQgdGhlbiB0aGUgbW9kdWxlIGZvdW5kIGluIDpkYXRhOmBzeXMubW9kdWxlc2Agd2lsbCBiZSBwYXNzZWQgaW50byB0aGUKLSAgICBtZXRob2QuCisgICAgOmRhdGE6YHN5cy5tb2R1bGVzYCB0aGVuIGEgbmV3IG9uZSBpcyBjb25zdHJ1Y3RlZC4gUmVnYXJkbGVzcyBvZiB3aGVyZSB0aGUKKyAgICBtb2R1bGUgY2FtZSBmcm9tLCA6YXR0cjpgX19sb2FkZXJfX2Agc2V0IHRvICoqc2VsZioqIGFuZCA6YXR0cjpgX19wYWNrYWdlX19gCisgICAgaXMgc2V0IGJhc2VkIG9uIHdoYXQgOm1ldGg6YGltcG9ydGxpYi5hYmMuSW5zcGVjdExvYWRlci5pc19wYWNrYWdlYCByZXR1cm5zCisgICAgKGlmIGF2YWlsYWJsZSkuIFRoZXNlIGF0dHJpYnV0ZXMgYXJlIHNldCB1bmNvbmRpdGlvbmFsbHkgdG8gc3VwcG9ydAorICAgIHJlbG9hZGluZy4KIAogICAgIElmIGFuIGV4Y2VwdGlvbiBpcyByYWlzZWQgYnkgdGhlIGRlY29yYXRlZCBtZXRob2QgYW5kIGEgbW9kdWxlIHdhcyBhZGRlZCB0bwotICAgIDpkYXRhOmBzeXMubW9kdWxlc2AgaXQgd2lsbCBiZSByZW1vdmVkIHRvIHByZXZlbnQgYSBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQKLSAgICBtb2R1bGUgZnJvbSBiZWluZyBpbiBsZWZ0IGluIDpkYXRhOmBzeXMubW9kdWxlc2AuIElmIHRoZSBtb2R1bGUgd2FzIGFscmVhZHkKLSAgICBpbiA6ZGF0YTpgc3lzLm1vZHVsZXNgIHRoZW4gaXQgaXMgbGVmdCBhbG9uZS4KLQotICAgIFVzZSBvZiB0aGlzIGRlY29yYXRvciBoYW5kbGVzIGFsbCB0aGUgZGV0YWlscyBvZiB3aGljaCBtb2R1bGUgb2JqZWN0IGEKLSAgICBsb2FkZXIgc2hvdWxkIGluaXRpYWxpemUgYXMgc3BlY2lmaWVkIGJ5IDpwZXA6YDMwMmAgYXMgYmVzdCBhcyBwb3NzaWJsZS4KKyAgICA6ZGF0YTpgc3lzLm1vZHVsZXNgLCB0aGVuIHRoZSBtb2R1bGUgd2lsbCBiZSByZW1vdmVkIHRvIHByZXZlbnQgYSBwYXJ0aWFsbHkKKyAgICBpbml0aWFsaXplZCBtb2R1bGUgZnJvbSBiZWluZyBpbiBsZWZ0IGluIDpkYXRhOmBzeXMubW9kdWxlc2AuIElmIHRoZSBtb2R1bGUKKyAgICB3YXMgYWxyZWFkeSBpbiA6ZGF0YTpgc3lzLm1vZHVsZXNgIHRoZW4gaXQgaXMgbGVmdCBhbG9uZS4KIAogICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCiAgICAgICAgOmF0dHI6YF9fbG9hZGVyX19gIGFuZCA6YXR0cjpgX19wYWNrYWdlX19gIGFyZSBhdXRvbWF0aWNhbGx5IHNldAogICAgICAgICh3aGVuIHBvc3NpYmxlKS4KIAorICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICAgU2V0IDphdHRyOmBfX25hbWVfX2AsIDphdHRyOmBfX2xvYWRlcl9fYCA6YXR0cjpgX19wYWNrYWdlX19gCisgICAgICAgdW5jb25kaXRpb25hbGx5IHRvIHN1cHBvcnQgcmVsb2FkaW5nLgorCisgICAgLi4gZGVwcmVjYXRlZDo6IDMuNAorICAgICAgIFRoZSBpbXBvcnQgbWFjaGluZXJ5IG5vdyBkaXJlY3RseSBwZXJmb3JtcyBhbGwgdGhlIGZ1bmN0aW9uYWxpdHkKKyAgICAgICBwcm92aWRlZCBieSB0aGlzIGZ1bmN0aW9uLgorCiAuLiBkZWNvcmF0b3I6OiBzZXRfbG9hZGVyCiAKLSAgICBBIDp0ZXJtOmBkZWNvcmF0b3JgIGZvciBhIDp0ZXJtOmBsb2FkZXJgIG1ldGhvZCwKLSAgICB0byBzZXQgdGhlIDphdHRyOmBfX2xvYWRlcl9fYAotICAgIGF0dHJpYnV0ZSBvbiBsb2FkZWQgbW9kdWxlcy4gSWYgdGhlIGF0dHJpYnV0ZSBpcyBhbHJlYWR5IHNldCB0aGUgZGVjb3JhdG9yCi0gICAgZG9lcyBub3RoaW5nLiBJdCBpcyBhc3N1bWVkIHRoYXQgdGhlIGZpcnN0IHBvc2l0aW9uYWwgYXJndW1lbnQgdG8gdGhlCi0gICAgd3JhcHBlZCBtZXRob2QgKGkuZS4gYGBzZWxmYGApIGlzIHdoYXQgOmF0dHI6YF9fbG9hZGVyX19gIHNob3VsZCBiZSBzZXQgdG8uCisgICBBIDp0ZXJtOmBkZWNvcmF0b3JgIGZvciA6bWV0aDpgaW1wb3J0bGliLmFiYy5Mb2FkZXIubG9hZF9tb2R1bGVgCisgICB0byBzZXQgdGhlIDphdHRyOmBfX2xvYWRlcl9fYAorICAgYXR0cmlidXRlIG9uIHRoZSByZXR1cm5lZCBtb2R1bGUuIElmIHRoZSBhdHRyaWJ1dGUgaXMgYWxyZWFkeSBzZXQgdGhlCisgICBkZWNvcmF0b3IgZG9lcyBub3RoaW5nLiBJdCBpcyBhc3N1bWVkIHRoYXQgdGhlIGZpcnN0IHBvc2l0aW9uYWwgYXJndW1lbnQgdG8KKyAgIHRoZSB3cmFwcGVkIG1ldGhvZCAoaS5lLiBgYHNlbGZgYCkgaXMgd2hhdCA6YXR0cjpgX19sb2FkZXJfX2Agc2hvdWxkIGJlIHNldAorICAgdG8uCiAKLSAgIC4uIG5vdGU6OgorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFNldCBgYF9fbG9hZGVyX19gYCBpZiBzZXQgdG8gYGBOb25lYGAsIGFzIGlmIHRoZSBhdHRyaWJ1dGUgZG9lcyBub3QKKyAgICAgIGV4aXN0LgogCi0gICAgICBJdCBpcyByZWNvbW1lbmRlZCB0aGF0IDpmdW5jOmBtb2R1bGVfZm9yX2xvYWRlcmAgYmUgdXNlZCBvdmVyIHRoaXMKLSAgICAgIGRlY29yYXRvciBhcyBpdCBzdWJzdW1lcyB0aGlzIGZ1bmN0aW9uYWxpdHkuCi0KKyAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjQKKyAgICAgIFRoZSBpbXBvcnQgbWFjaGluZXJ5IHRha2VzIGNhcmUgb2YgdGhpcyBhdXRvbWF0aWNhbGx5LgogCiAuLiBkZWNvcmF0b3I6OiBzZXRfcGFja2FnZQogCi0gICAgQSA6dGVybTpgZGVjb3JhdG9yYCBmb3IgYSA6dGVybTpgbG9hZGVyYCB0byBzZXQgdGhlIDphdHRyOmBfX3BhY2thZ2VfX2AKLSAgICBhdHRyaWJ1dGUgb24gdGhlIG1vZHVsZSByZXR1cm5lZCBieSB0aGUgbG9hZGVyLiBJZiA6YXR0cjpgX19wYWNrYWdlX19gIGlzCi0gICAgc2V0IGFuZCBoYXMgYSB2YWx1ZSBvdGhlciB0aGFuIGBgTm9uZWBgIGl0IHdpbGwgbm90IGJlIGNoYW5nZWQuCi0gICAgTm90ZSB0aGF0IHRoZSBtb2R1bGUgcmV0dXJuZWQgYnkgdGhlIGxvYWRlciBpcyB3aGF0IGhhcyB0aGUgYXR0cmlidXRlCi0gICAgc2V0IG9uIGFuZCBub3QgdGhlIG1vZHVsZSBmb3VuZCBpbiA6ZGF0YTpgc3lzLm1vZHVsZXNgLgorICAgQSA6dGVybTpgZGVjb3JhdG9yYCBmb3IgOm1ldGg6YGltcG9ydGxpYi5hYmMuTG9hZGVyLmxvYWRfbW9kdWxlYCB0byBzZXQgdGhlIDphdHRyOmBfX3BhY2thZ2VfX2AgYXR0cmlidXRlIG9uIHRoZSByZXR1cm5lZCBtb2R1bGUuIElmIDphdHRyOmBfX3BhY2thZ2VfX2AKKyAgIGlzIHNldCBhbmQgaGFzIGEgdmFsdWUgb3RoZXIgdGhhbiBgYE5vbmVgYCBpdCB3aWxsIG5vdCBiZSBjaGFuZ2VkLgogCi0gICAgUmVsaWFuY2Ugb24gdGhpcyBkZWNvcmF0b3IgaXMgZGlzY291cmFnZWQgd2hlbiBpdCBpcyBwb3NzaWJsZSB0byBzZXQKLSAgICA6YXR0cjpgX19wYWNrYWdlX19gIGJlZm9yZSBpbXBvcnRpbmcuIEJ5Ci0gICAgc2V0dGluZyBpdCBiZWZvcmVoYW5kIHRoZSBjb2RlIGZvciB0aGUgbW9kdWxlIGlzIGV4ZWN1dGVkIHdpdGggdGhlCi0gICAgYXR0cmlidXRlIHNldCBhbmQgdGh1cyBjYW4gYmUgdXNlZCBieSBnbG9iYWwgbGV2ZWwgY29kZSBkdXJpbmcKLSAgICBpbml0aWFsaXphdGlvbi4KKyAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjQKKyAgICAgIFRoZSBpbXBvcnQgbWFjaGluZXJ5IHRha2VzIGNhcmUgb2YgdGhpcyBhdXRvbWF0aWNhbGx5LgogCi0gICAuLiBub3RlOjoKKy4uIGZ1bmN0aW9uOjogc3BlY19mcm9tX2xvYWRlcihuYW1lLCBsb2FkZXIsICosIG9yaWdpbj1Ob25lLCBpc19wYWNrYWdlPU5vbmUpCiAKLSAgICAgIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgOmZ1bmM6YG1vZHVsZV9mb3JfbG9hZGVyYCBiZSB1c2VkIG92ZXIgdGhpcwotICAgICAgZGVjb3JhdG9yIGFzIGl0IHN1YnN1bWVzIHRoaXMgZnVuY3Rpb25hbGl0eS4KKyAgIEEgZmFjdG9yeSBmdW5jdGlvbiBmb3IgY3JlYXRpbmcgYSA6Y2xhc3M6YE1vZHVsZVNwZWNgIGluc3RhbmNlIGJhc2VkCisgICBvbiBhIGxvYWRlci4gIFRoZSBwYXJhbWV0ZXJzIGhhdmUgdGhlIHNhbWUgbWVhbmluZyBhcyB0aGV5IGRvIGZvcgorICAgTW9kdWxlU3BlYy4gIFRoZSBmdW5jdGlvbiB1c2VzIGF2YWlsYWJsZSA6dGVybTpgbG9hZGVyYCBBUElzLCBzdWNoIGFzCisgICA6bWV0aDpgSW5zcGVjdExvYWRlci5pc19wYWNrYWdlYCwgdG8gZmlsbCBpbiBhbnkgbWlzc2luZworICAgaW5mb3JtYXRpb24gb24gdGhlIHNwZWMuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisuLiBmdW5jdGlvbjo6IHNwZWNfZnJvbV9maWxlX2xvY2F0aW9uKG5hbWUsIGxvY2F0aW9uLCAqLCBsb2FkZXI9Tm9uZSwgc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnM9Tm9uZSkKKworICAgQSBmYWN0b3J5IGZ1bmN0aW9uIGZvciBjcmVhdGluZyBhIDpjbGFzczpgTW9kdWxlU3BlY2AgaW5zdGFuY2UgYmFzZWQKKyAgIG9uIHRoZSBwYXRoIHRvIGEgZmlsZS4gIE1pc3NpbmcgaW5mb3JtYXRpb24gd2lsbCBiZSBmaWxsZWQgaW4gb24gdGhlCisgICBzcGVjIGJ5IG1ha2luZyB1c2Ugb2YgbG9hZGVyIEFQSXMgYW5kIGJ5IHRoZSBpbXBsaWNhdGlvbiB0aGF0IHRoZQorICAgbW9kdWxlIHdpbGwgYmUgZmlsZS1iYXNlZC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9pbmRleC5yc3QgYi9Eb2MvbGlicmFyeS9pbmRleC5yc3QKaW5kZXggMWIyNWM2ZS4uYTkyNWUxMCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvaW5kZXgucnN0CisrKyBiL0RvYy9saWJyYXJ5L2luZGV4LnJzdApAQCAtMjAsNyArMjAsNyBAQAogZW5jb3VyYWdlIGFuZCBlbmhhbmNlIHRoZSBwb3J0YWJpbGl0eSBvZiBQeXRob24gcHJvZ3JhbXMgYnkgYWJzdHJhY3RpbmcKIGF3YXkgcGxhdGZvcm0tc3BlY2lmaWNzIGludG8gcGxhdGZvcm0tbmV1dHJhbCBBUElzLgogCi1UaGUgUHl0aG9uIGluc3RhbGxlcnMgZm9yIHRoZSBXaW5kb3dzIHBsYXRmb3JtIHVzdWFsbHkgaW5jbHVkZXMKK1RoZSBQeXRob24gaW5zdGFsbGVycyBmb3IgdGhlIFdpbmRvd3MgcGxhdGZvcm0gdXN1YWxseSBpbmNsdWRlCiB0aGUgZW50aXJlIHN0YW5kYXJkIGxpYnJhcnkgYW5kIG9mdGVuIGFsc28gaW5jbHVkZSBtYW55IGFkZGl0aW9uYWwKIGNvbXBvbmVudHMuIEZvciBVbml4LWxpa2Ugb3BlcmF0aW5nIHN5c3RlbXMgUHl0aG9uIGlzIG5vcm1hbGx5IHByb3ZpZGVkCiBhcyBhIGNvbGxlY3Rpb24gb2YgcGFja2FnZXMsIHNvIGl0IG1heSBiZSBuZWNlc3NhcnkgdG8gdXNlIHRoZSBwYWNrYWdpbmcKQEAgLTMwLDcgKzMwLDcgQEAKIEluIGFkZGl0aW9uIHRvIHRoZSBzdGFuZGFyZCBsaWJyYXJ5LCB0aGVyZSBpcyBhIGdyb3dpbmcgY29sbGVjdGlvbiBvZgogc2V2ZXJhbCB0aG91c2FuZCBjb21wb25lbnRzIChmcm9tIGluZGl2aWR1YWwgcHJvZ3JhbXMgYW5kIG1vZHVsZXMgdG8KIHBhY2thZ2VzIGFuZCBlbnRpcmUgYXBwbGljYXRpb24gZGV2ZWxvcG1lbnQgZnJhbWV3b3JrcyksIGF2YWlsYWJsZSBmcm9tCi10aGUgYFB5dGhvbiBQYWNrYWdlIEluZGV4IDxodHRwOi8vcHlwaS5weXRob24ub3JnL3B5cGk+YF8uCit0aGUgYFB5dGhvbiBQYWNrYWdlIEluZGV4IDxodHRwczovL3B5cGkucHl0aG9uLm9yZy9weXBpPmBfLgogCiAKIC4uIHRvY3RyZWU6OgpAQCAtNjUsNiArNjUsNyBAQAogICAgdGsucnN0CiAgICBkZXZlbG9wbWVudC5yc3QKICAgIGRlYnVnLnJzdAorICAgZGlzdHJpYnV0aW9uLnJzdAogICAgcHl0aG9uLnJzdAogICAgY3VzdG9taW50ZXJwLnJzdAogICAgbW9kdWxlcy5yc3QKQEAgLTcyLDQgKzczLDUgQEAKICAgIG1pc2MucnN0CiAgICB3aW5kb3dzLnJzdAogICAgdW5peC5yc3QKKyAgIHN1cGVyc2VkZWQucnN0CiAgICB1bmRvYy5yc3QKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2luc3BlY3QucnN0IGIvRG9jL2xpYnJhcnkvaW5zcGVjdC5yc3QKaW5kZXggZDRjZjkwNS4uNTdlYjRmZiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvaW5zcGVjdC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvaW5zcGVjdC5yc3QKQEAgLTQzLDYgKzQzLDExIEBACiArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogfCBjbGFzcyAgICAgfCBfX2RvY19fICAgICAgICAgfCBkb2N1bWVudGF0aW9uIHN0cmluZyAgICAgIHwKICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8ICAgICAgICAgICB8IF9fbmFtZV9fICAgICAgICB8IG5hbWUgd2l0aCB3aGljaCB0aGlzICAgICAgfAorfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgfCBjbGFzcyB3YXMgZGVmaW5lZCAgICAgICAgIHwKKystLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8ICAgICAgICAgICB8IF9fcXVhbG5hbWVfXyAgICB8IHF1YWxpZmllZCBuYW1lICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIHwgICAgICAgICAgIHwgX19tb2R1bGVfXyAgICAgIHwgbmFtZSBvZiBtb2R1bGUgaW4gd2hpY2ggICB8CiB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICB8IHRoaXMgY2xhc3Mgd2FzIGRlZmluZWQgICAgfAogKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKQEAgLTUxLDYgKzU2LDggQEAKIHwgICAgICAgICAgIHwgX19uYW1lX18gICAgICAgIHwgbmFtZSB3aXRoIHdoaWNoIHRoaXMgICAgICB8CiB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICB8IG1ldGhvZCB3YXMgZGVmaW5lZCAgICAgICAgfAogKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgICAgICAgICAgIHwgX19xdWFsbmFtZV9fICAgIHwgcXVhbGlmaWVkIG5hbWUgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogfCAgICAgICAgICAgfCBfX2Z1bmNfXyAgICAgICAgfCBmdW5jdGlvbiBvYmplY3QgICAgICAgICAgIHwKIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIHwgY29udGFpbmluZyBpbXBsZW1lbnRhdGlvbiB8CiB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICB8IG9mIG1ldGhvZCAgICAgICAgICAgICAgICAgfApAQCAtNjQsMTIgKzcxLDE5IEBACiB8ICAgICAgICAgICB8IF9fbmFtZV9fICAgICAgICB8IG5hbWUgd2l0aCB3aGljaCB0aGlzICAgICAgfAogfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgfCBmdW5jdGlvbiB3YXMgZGVmaW5lZCAgICAgIHwKICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8ICAgICAgICAgICB8IF9fcXVhbG5hbWVfXyAgICB8IHF1YWxpZmllZCBuYW1lICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIHwgICAgICAgICAgIHwgX19jb2RlX18gICAgICAgIHwgY29kZSBvYmplY3QgY29udGFpbmluZyAgICB8CiB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICB8IGNvbXBpbGVkIGZ1bmN0aW9uICAgICAgICAgfAogfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgfCA6dGVybTpgYnl0ZWNvZGVgICAgICAgICAgIHwKICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiB8ICAgICAgICAgICB8IF9fZGVmYXVsdHNfXyAgICB8IHR1cGxlIG9mIGFueSBkZWZhdWx0ICAgICAgfAotfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgfCB2YWx1ZXMgZm9yIGFyZ3VtZW50cyAgICAgIHwKK3wgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIHwgdmFsdWVzIGZvciBwb3NpdGlvbmFsIG9yICB8Cit8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICB8IGtleXdvcmQgcGFyYW1ldGVycyAgICAgICAgfAorKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgICAgICAgICAgIHwgX19rd2RlZmF1bHRzX18gIHwgbWFwcGluZyBvZiBhbnkgZGVmYXVsdCAgICB8Cit8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICB8IHZhbHVlcyBmb3Iga2V5d29yZC1vbmx5ICAgfAorfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgfCBwYXJhbWV0ZXJzICAgICAgICAgICAgICAgIHwKICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiB8ICAgICAgICAgICB8IF9fZ2xvYmFsc19fICAgICB8IGdsb2JhbCBuYW1lc3BhY2UgaW4gd2hpY2ggfAogfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgfCB0aGlzIGZ1bmN0aW9uIHdhcyBkZWZpbmVkIHwKQEAgLTE1OSw2ICsxNzMsOCBAQAogfCAgICAgICAgICAgfCBfX25hbWVfXyAgICAgICAgfCBvcmlnaW5hbCBuYW1lIG9mIHRoaXMgICAgIHwKIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIHwgZnVuY3Rpb24gb3IgbWV0aG9kICAgICAgICB8CiArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCAgICAgICAgICAgfCBfX3F1YWxuYW1lX18gICAgfCBxdWFsaWZpZWQgbmFtZSAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiB8ICAgICAgICAgICB8IF9fc2VsZl9fICAgICAgICB8IGluc3RhbmNlIHRvIHdoaWNoIGEgICAgICAgfAogfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgfCBtZXRob2QgaXMgYm91bmQsIG9yICAgICAgIHwKIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIHwgYGBOb25lYGAgICAgICAgICAgICAgICAgICB8CkBAIC0xNzMsOCArMTg5LDkgQEAKIAogICAgLi4gbm90ZTo6CiAKLSAgICAgIDpmdW5jOmBnZXRtZW1iZXJzYCBkb2VzIG5vdCByZXR1cm4gbWV0YWNsYXNzIGF0dHJpYnV0ZXMgd2hlbiB0aGUgYXJndW1lbnQKLSAgICAgIGlzIGEgY2xhc3MgKHRoaXMgYmVoYXZpb3IgaXMgaW5oZXJpdGVkIGZyb20gdGhlIDpmdW5jOmBkaXJgIGZ1bmN0aW9uKS4KKyAgICAgIDpmdW5jOmBnZXRtZW1iZXJzYCB3aWxsIG9ubHkgcmV0dXJuIGNsYXNzIGF0dHJpYnV0ZXMgZGVmaW5lZCBpbiB0aGUKKyAgICAgIG1ldGFjbGFzcyB3aGVuIHRoZSBhcmd1bWVudCBpcyBhIGNsYXNzIGFuZCB0aG9zZSBhdHRyaWJ1dGVzIGhhdmUgYmVlbgorICAgICAgbGlzdGVkIGluIHRoZSBtZXRhY2xhc3MnIGN1c3RvbSA6bWV0aDpgX19kaXJfX2AuCiAKIAogLi4gZnVuY3Rpb246OiBnZXRtb2R1bGVpbmZvKHBhdGgpCkBAIC00MjgsMTEgKzQ0NSwxNCBAQAogICAgQWNjZXB0cyBhIHdpZGUgcmFuZ2Ugb2YgcHl0aG9uIGNhbGxhYmxlcywgZnJvbSBwbGFpbiBmdW5jdGlvbnMgYW5kIGNsYXNzZXMgdG8KICAgIDpmdW5jOmBmdW5jdG9vbHMucGFydGlhbGAgb2JqZWN0cy4KIAorICAgUmFpc2VzIDpleGM6YFZhbHVlRXJyb3JgIGlmIG5vIHNpZ25hdHVyZSBjYW4gYmUgcHJvdmlkZWQsIGFuZAorICAgOmV4YzpgVHlwZUVycm9yYCBpZiB0aGF0IHR5cGUgb2Ygb2JqZWN0IGlzIG5vdCBzdXBwb3J0ZWQuCisKICAgIC4uIG5vdGU6OgogCiAgICAgICBTb21lIGNhbGxhYmxlcyBtYXkgbm90IGJlIGludHJvc3BlY3RhYmxlIGluIGNlcnRhaW4gaW1wbGVtZW50YXRpb25zIG9mCi0gICAgICBQeXRob24uICBGb3IgZXhhbXBsZSwgaW4gQ1B5dGhvbiwgYnVpbHQtaW4gZnVuY3Rpb25zIGRlZmluZWQgaW4gQyBwcm92aWRlCi0gICAgICBubyBtZXRhZGF0YSBhYm91dCB0aGVpciBhcmd1bWVudHMuCisgICAgICBQeXRob24uICBGb3IgZXhhbXBsZSwgaW4gQ1B5dGhvbiwgc29tZSBidWlsdC1pbiBmdW5jdGlvbnMgZGVmaW5lZCBpbgorICAgICAgQyBwcm92aWRlIG5vIG1ldGFkYXRhIGFib3V0IHRoZWlyIGFyZ3VtZW50cy4KIAogCiAuLiBjbGFzczo6IFNpZ25hdHVyZShwYXJhbWV0ZXJzPU5vbmUsIFwqLCByZXR1cm5fYW5ub3RhdGlvbj1TaWduYXR1cmUuZW1wdHkpCkBAIC01MTAsOSArNTMwLDggQEAKIAogICAgLi4gYXR0cmlidXRlOjogUGFyYW1ldGVyLm5hbWUKIAotICAgICAgVGhlIG5hbWUgb2YgdGhlIHBhcmFtZXRlciBhcyBhIHN0cmluZy4gIE11c3QgYmUgYSB2YWxpZCBweXRob24gaWRlbnRpZmllcgotICAgICAgbmFtZSAod2l0aCB0aGUgZXhjZXB0aW9uIG9mIGBgUE9TSVRJT05BTF9PTkxZYGAgcGFyYW1ldGVycywgd2hpY2ggY2FuIGhhdmUKLSAgICAgIGl0IHNldCB0byBgYE5vbmVgYCkuCisgICAgICBUaGUgbmFtZSBvZiB0aGUgcGFyYW1ldGVyIGFzIGEgc3RyaW5nLiAgVGhlIG5hbWUgbXVzdCBiZSBhIHZhbGlkCisgICAgICBQeXRob24gaWRlbnRpZmllci4KIAogICAgLi4gYXR0cmlidXRlOjogUGFyYW1ldGVyLmRlZmF1bHQKIApAQCAtNTk2LDYgKzYxNSwxMCBAQAogICAgICAgICAgPj4+IHN0cihwYXJhbS5yZXBsYWNlKGRlZmF1bHQ9UGFyYW1ldGVyLmVtcHR5LCBhbm5vdGF0aW9uPSdzcGFtJykpCiAgICAgICAgICAiZm9vOidzcGFtJyIKIAorICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICAgIEluIFB5dGhvbiAzLjMgUGFyYW1ldGVyIG9iamVjdHMgd2VyZSBhbGxvd2VkIHRvIGhhdmUgYGBuYW1lYGAgc2V0CisgICAgICAgIHRvIGBgTm9uZWBgIGlmIHRoZWlyIGBga2luZGBgIHdhcyBzZXQgdG8gYGBQT1NJVElPTkFMX09OTFlgYC4KKyAgICAgICAgVGhpcyBpcyBubyBsb25nZXIgcGVybWl0dGVkLgogCiAuLiBjbGFzczo6IEJvdW5kQXJndW1lbnRzCiAKQEAgLTYzMCw3ICs2NTMsOCBAQAogICAgICAgICAoKDUsKSwge30pCiAKICAgICAgICAgPj4+IGZvciBwYXJhbSBpbiBzaWcucGFyYW1ldGVycy52YWx1ZXMoKToKLSAgICAgICAgLi4uICAgICBpZiBwYXJhbS5uYW1lIG5vdCBpbiBiYS5hcmd1bWVudHM6CisgICAgICAgIC4uLiAgICAgaWYgKHBhcmFtLm5hbWUgbm90IGluIGJhLmFyZ3VtZW50cworICAgICAgICAuLi4gICAgICAgICAgICAgYW5kIHBhcmFtLmRlZmF1bHQgaXMgbm90IHBhcmFtLmVtcHR5KToKICAgICAgICAgLi4uICAgICAgICAgYmEuYXJndW1lbnRzW3BhcmFtLm5hbWVdID0gcGFyYW0uZGVmYXVsdAogCiAgICAgICAgID4+PiBiYS5hcmdzLCBiYS5rd2FyZ3MKQEAgLTY0Nyw2ICs2NzEsMTAgQEAKICAgICAgIEEgZGljdCBvZiBrZXl3b3JkIGFyZ3VtZW50cyB2YWx1ZXMuICBEeW5hbWljYWxseSBjb21wdXRlZCBmcm9tIHRoZQogICAgICAgOmF0dHI6YGFyZ3VtZW50c2AgYXR0cmlidXRlLgogCisgICAuLiBhdHRyaWJ1dGU6OiBCb3VuZEFyZ3VtZW50cy5zaWduYXR1cmUKKworICAgICAgQSByZWZlcmVuY2UgdG8gdGhlIHBhcmVudCA6Y2xhc3M6YFNpZ25hdHVyZWAgb2JqZWN0LgorCiAgICBUaGUgOmF0dHI6YGFyZ3NgIGFuZCA6YXR0cjpga3dhcmdzYCBwcm9wZXJ0aWVzIGNhbiBiZSB1c2VkIHRvIGludm9rZQogICAgZnVuY3Rpb25zOjoKIApAQCAtNzE3LDYgKzc0NSwxMSBAQAogICAgICAgQ29uc2lkZXIgdXNpbmcgdGhlIG5ldyA6cmVmOmBTaWduYXR1cmUgT2JqZWN0IDxpbnNwZWN0LXNpZ25hdHVyZS1vYmplY3Q+YAogICAgICAgaW50ZXJmYWNlLCB3aGljaCBwcm92aWRlcyBhIGJldHRlciB3YXkgb2YgaW50cm9zcGVjdGluZyBmdW5jdGlvbnMuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGlzIGZ1bmN0aW9uIGlzIG5vdyBiYXNlZCBvbiA6ZnVuYzpgc2lnbmF0dXJlYCwgYnV0IHN0aWxsIGlnbm9yZXMKKyAgICAgIGBgX193cmFwcGVkX19gYCBhdHRyaWJ1dGVzIGFuZCBpbmNsdWRlcyB0aGUgYWxyZWFkeSBib3VuZCBmaXJzdAorICAgICAgcGFyYW1ldGVyIGluIHRoZSBzaWduYXR1cmUgb3V0cHV0IGZvciBib3VuZCBtZXRob2RzLgorCiAKIC4uIGZ1bmN0aW9uOjogZ2V0YXJndmFsdWVzKGZyYW1lKQogCkBAIC03MzMsMTcgKzc2NiwyMCBAQAogICAgOmZ1bmM6YGdldGFyZ3NwZWNgIG9yIDpmdW5jOmBnZXRmdWxsYXJnc3BlY2AuCiAKICAgIFRoZSBmaXJzdCBzZXZlbiBhcmd1bWVudHMgYXJlIChgYGFyZ3NgYCwgYGB2YXJhcmdzYGAsIGBgdmFya3dgYCwKLSAgIGBgZGVmYXVsdHNgYCwgYGBrd29ubHlhcmdzYGAsIGBga3dvbmx5ZGVmYXVsdHNgYCwgYGBhbm5vdGF0aW9uc2BgKS4gVGhlCi0gICBvdGhlciBmaXZlIGFyZ3VtZW50cyBhcmUgdGhlIGNvcnJlc3BvbmRpbmcgb3B0aW9uYWwgZm9ybWF0dGluZyBmdW5jdGlvbnMKLSAgIHRoYXQgYXJlIGNhbGxlZCB0byB0dXJuIG5hbWVzIGFuZCB2YWx1ZXMgaW50byBzdHJpbmdzLiBUaGUgbGFzdCBhcmd1bWVudAotICAgaXMgYW4gb3B0aW9uYWwgZnVuY3Rpb24gdG8gZm9ybWF0IHRoZSBzZXF1ZW5jZSBvZiBhcmd1bWVudHMuIEZvciBleGFtcGxlOjoKKyAgIGBgZGVmYXVsdHNgYCwgYGBrd29ubHlhcmdzYGAsIGBga3dvbmx5ZGVmYXVsdHNgYCwgYGBhbm5vdGF0aW9uc2BgKS4KIAotICAgID4+PiBmcm9tIGluc3BlY3QgaW1wb3J0IGZvcm1hdGFyZ3NwZWMsIGdldGZ1bGxhcmdzcGVjCi0gICAgPj4+IGRlZiBmKGE6IGludCwgYjogZmxvYXQpOgotICAgIC4uLiAgICAgcGFzcwotICAgIC4uLgotICAgID4+PiBmb3JtYXRhcmdzcGVjKCpnZXRmdWxsYXJnc3BlYyhmKSkKLSAgICAnKGE6IGludCwgYjogZmxvYXQpJworICAgVGhlIG90aGVyIHNpeCBhcmd1bWVudHMgYXJlIGZ1bmN0aW9ucyB0aGF0IGFyZSBjYWxsZWQgdG8gdHVybiBhcmd1bWVudCBuYW1lcywKKyAgIGBgKmBgIGFyZ3VtZW50IG5hbWUsIGBgKipgYCBhcmd1bWVudCBuYW1lLCBkZWZhdWx0IHZhbHVlcywgcmV0dXJuIGFubm90YXRpb24KKyAgIGFuZCBpbmRpdmlkdWFsIGFubm90YXRpb25zIGludG8gc3RyaW5ncywgcmVzcGVjdGl2ZWx5LgorCisgICBGb3IgZXhhbXBsZToKKworICAgPj4+IGZyb20gaW5zcGVjdCBpbXBvcnQgZm9ybWF0YXJnc3BlYywgZ2V0ZnVsbGFyZ3NwZWMKKyAgID4+PiBkZWYgZihhOiBpbnQsIGI6IGZsb2F0KToKKyAgIC4uLiAgICAgcGFzcworICAgLi4uCisgICA+Pj4gZm9ybWF0YXJnc3BlYygqZ2V0ZnVsbGFyZ3NwZWMoZikpCisgICAnKGE6IGludCwgYjogZmxvYXQpJwogCiAKIC4uIGZ1bmN0aW9uOjogZm9ybWF0YXJndmFsdWVzKGFyZ3NbLCB2YXJhcmdzLCB2YXJrdywgbG9jYWxzLCBmb3JtYXRhcmcsIGZvcm1hdHZhcmFyZ3MsIGZvcm1hdHZhcmt3LCBmb3JtYXR2YWx1ZV0pCkBAIC04MDYsNiArODQyLDIzIEBACiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKIAogCisuLiBmdW5jdGlvbjo6IHVud3JhcChmdW5jLCAqLCBzdG9wPU5vbmUpCisKKyAgIEdldCB0aGUgb2JqZWN0IHdyYXBwZWQgYnkgKmZ1bmMqLiBJdCBmb2xsb3dzIHRoZSBjaGFpbiBvZiA6YXR0cjpgX193cmFwcGVkX19gCisgICBhdHRyaWJ1dGVzIHJldHVybmluZyB0aGUgbGFzdCBvYmplY3QgaW4gdGhlIGNoYWluLgorCisgICAqc3RvcCogaXMgYW4gb3B0aW9uYWwgY2FsbGJhY2sgYWNjZXB0aW5nIGFuIG9iamVjdCBpbiB0aGUgd3JhcHBlciBjaGFpbgorICAgYXMgaXRzIHNvbGUgYXJndW1lbnQgdGhhdCBhbGxvd3MgdGhlIHVud3JhcHBpbmcgdG8gYmUgdGVybWluYXRlZCBlYXJseSBpZgorICAgdGhlIGNhbGxiYWNrIHJldHVybnMgYSB0cnVlIHZhbHVlLiBJZiB0aGUgY2FsbGJhY2sgbmV2ZXIgcmV0dXJucyBhIHRydWUKKyAgIHZhbHVlLCB0aGUgbGFzdCBvYmplY3QgaW4gdGhlIGNoYWluIGlzIHJldHVybmVkIGFzIHVzdWFsLiBGb3IgZXhhbXBsZSwKKyAgIDpmdW5jOmBzaWduYXR1cmVgIHVzZXMgdGhpcyB0byBzdG9wIHVud3JhcHBpbmcgaWYgYW55IG9iamVjdCBpbiB0aGUKKyAgIGNoYWluIGhhcyBhIGBgX19zaWduYXR1cmVfX2BgIGF0dHJpYnV0ZSBkZWZpbmVkLgorCisgICA6ZXhjOmBWYWx1ZUVycm9yYCBpcyByYWlzZWQgaWYgYSBjeWNsZSBpcyBlbmNvdW50ZXJlZC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogLi4gX2luc3BlY3Qtc3RhY2s6CiAKIFRoZSBpbnRlcnByZXRlciBzdGFjawpAQCAtODM4LDYgKzg5MSwxMCBAQAogICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgIGRlbCBmcmFtZQogCisgICBJZiB5b3Ugd2FudCB0byBrZWVwIHRoZSBmcmFtZSBhcm91bmQgKGZvciBleGFtcGxlIHRvIHByaW50IGEgdHJhY2ViYWNrCisgICBsYXRlciksIHlvdSBjYW4gYWxzbyBicmVhayByZWZlcmVuY2UgY3ljbGVzIGJ5IHVzaW5nIHRoZQorICAgOm1ldGg6YGZyYW1lLmNsZWFyYCBtZXRob2QuCisKIFRoZSBvcHRpb25hbCAqY29udGV4dCogYXJndW1lbnQgc3VwcG9ydGVkIGJ5IG1vc3Qgb2YgdGhlc2UgZnVuY3Rpb25zIHNwZWNpZmllcwogdGhlIG51bWJlciBvZiBsaW5lcyBvZiBjb250ZXh0IHRvIHJldHVybiwgd2hpY2ggYXJlIGNlbnRlcmVkIGFyb3VuZCB0aGUgY3VycmVudAogbGluZS4KQEAgLTk5NCwzICsxMDUxLDIyIEBACiAgICAgICByZXR1cm4gYW4gZW1wdHkgZGljdGlvbmFyeS4KIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCisKKworLi4gX2luc3BlY3QtbW9kdWxlLWNsaToKKworQ29tbWFuZCBMaW5lIEludGVyZmFjZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgOm1vZDpgaW5zcGVjdGAgbW9kdWxlIGFsc28gcHJvdmlkZXMgYSBiYXNpYyBpbnRyb3NwZWN0aW9uIGNhcGFiaWxpdHkKK2Zyb20gdGhlIGNvbW1hbmQgbGluZS4KKworLi4gcHJvZ3JhbTo6IGluc3BlY3QKKworQnkgZGVmYXVsdCwgYWNjZXB0cyB0aGUgbmFtZSBvZiBhIG1vZHVsZSBhbmQgcHJpbnRzIHRoZSBzb3VyY2Ugb2YgdGhhdAorbW9kdWxlLiBBIGNsYXNzIG9yIGZ1bmN0aW9uIHdpdGhpbiB0aGUgbW9kdWxlIGNhbiBiZSBwcmludGVkIGluc3RlYWQgYnkKK2FwcGVuZGVkIGEgY29sb24gYW5kIHRoZSBxdWFsaWZpZWQgbmFtZSBvZiB0aGUgdGFyZ2V0IG9iamVjdC4KKworLi4gY21kb3B0aW9uOjogLS1kZXRhaWxzCisKKyAgIFByaW50IGluZm9ybWF0aW9uIGFib3V0IHRoZSBzcGVjaWZpZWQgb2JqZWN0IHJhdGhlciB0aGFuIHRoZSBzb3VyY2UgY29kZQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvaW50cm8ucnN0IGIvRG9jL2xpYnJhcnkvaW50cm8ucnN0CmluZGV4IGEwZjJkNjMuLmUzMjgzY2EgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2ludHJvLnJzdAorKysgYi9Eb2MvbGlicmFyeS9pbnRyby5yc3QKQEAgLTMwLDEwICszMCw4IEBACiBvcHRpb24gd2FzIGNob3NlbiBhdCB0aGUgdGltZSB3aGVuIFB5dGhvbiB3YXMgY29tcGlsZWQgYW5kIGluc3RhbGxlZC4KIAogVGhpcyBtYW51YWwgaXMgb3JnYW5pemVkICJmcm9tIHRoZSBpbnNpZGUgb3V0OiIgaXQgZmlyc3QgZGVzY3JpYmVzIHRoZSBidWlsdC1pbgotZGF0YSB0eXBlcywgdGhlbiB0aGUgYnVpbHQtaW4gZnVuY3Rpb25zIGFuZCBleGNlcHRpb25zLCBhbmQgZmluYWxseSB0aGUgbW9kdWxlcywKLWdyb3VwZWQgaW4gY2hhcHRlcnMgb2YgcmVsYXRlZCBtb2R1bGVzLiAgVGhlIG9yZGVyaW5nIG9mIHRoZSBjaGFwdGVycyBhcyB3ZWxsIGFzCi10aGUgb3JkZXJpbmcgb2YgdGhlIG1vZHVsZXMgd2l0aGluIGVhY2ggY2hhcHRlciBpcyByb3VnaGx5IGZyb20gbW9zdCByZWxldmFudCB0bwotbGVhc3QgaW1wb3J0YW50LgorZnVuY3Rpb25zLCBkYXRhIHR5cGVzIGFuZCBleGNlcHRpb25zLCBhbmQgZmluYWxseSB0aGUgbW9kdWxlcywgZ3JvdXBlZCBpbgorY2hhcHRlcnMgb2YgcmVsYXRlZCBtb2R1bGVzLgogCiBUaGlzIG1lYW5zIHRoYXQgaWYgeW91IHN0YXJ0IHJlYWRpbmcgdGhpcyBtYW51YWwgZnJvbSB0aGUgc3RhcnQsIGFuZCBza2lwIHRvIHRoZQogbmV4dCBjaGFwdGVyIHdoZW4geW91IGdldCBib3JlZCwgeW91IHdpbGwgZ2V0IGEgcmVhc29uYWJsZSBvdmVydmlldyBvZiB0aGUKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2lvLnJzdCBiL0RvYy9saWJyYXJ5L2lvLnJzdAppbmRleCA3MTY3NjdmLi41OTJiYzQ4IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9pby5yc3QKKysrIGIvRG9jL2xpYnJhcnkvaW8ucnN0CkBAIC0yODMsMTMgKzI4MywxMyBAQAogICAgICAgUmV0dXJuIGBgVHJ1ZWBgIGlmIHRoZSBzdHJlYW0gY2FuIGJlIHJlYWQgZnJvbS4gIElmIGBgRmFsc2VgYCwgOm1ldGg6YHJlYWRgCiAgICAgICB3aWxsIHJhaXNlIDpleGM6YE9TRXJyb3JgLgogCi0gICAuLiBtZXRob2Q6OiByZWFkbGluZShsaW1pdD0tMSkKKyAgIC4uIG1ldGhvZDo6IHJlYWRsaW5lKHNpemU9LTEpCiAKLSAgICAgIFJlYWQgYW5kIHJldHVybiBvbmUgbGluZSBmcm9tIHRoZSBzdHJlYW0uICBJZiAqbGltaXQqIGlzIHNwZWNpZmllZCwgYXQKLSAgICAgIG1vc3QgKmxpbWl0KiBieXRlcyB3aWxsIGJlIHJlYWQuCisgICAgICBSZWFkIGFuZCByZXR1cm4gb25lIGxpbmUgZnJvbSB0aGUgc3RyZWFtLiAgSWYgKnNpemUqIGlzIHNwZWNpZmllZCwgYXQKKyAgICAgIG1vc3QgKnNpemUqIGJ5dGVzIHdpbGwgYmUgcmVhZC4KIAogICAgICAgVGhlIGxpbmUgdGVybWluYXRvciBpcyBhbHdheXMgYGBiJ1xuJ2BgIGZvciBiaW5hcnkgZmlsZXM7IGZvciB0ZXh0IGZpbGVzLAotICAgICAgdGhlICpuZXdsaW5lcyogYXJndW1lbnQgdG8gOmZ1bmM6YG9wZW5gIGNhbiBiZSB1c2VkIHRvIHNlbGVjdCB0aGUgbGluZQorICAgICAgdGhlICpuZXdsaW5lKiBhcmd1bWVudCB0byA6ZnVuYzpgb3BlbmAgY2FuIGJlIHVzZWQgdG8gc2VsZWN0IHRoZSBsaW5lCiAgICAgICB0ZXJtaW5hdG9yKHMpIHJlY29nbml6ZWQuCiAKICAgIC4uIG1ldGhvZDo6IHJlYWRsaW5lcyhoaW50PS0xKQpAQCAtMzAxLDExICszMDEsMTEgQEAKICAgICAgIE5vdGUgdGhhdCBpdCdzIGFscmVhZHkgcG9zc2libGUgdG8gaXRlcmF0ZSBvbiBmaWxlIG9iamVjdHMgdXNpbmcgYGBmb3IKICAgICAgIGxpbmUgaW4gZmlsZTogLi4uYGAgd2l0aG91dCBjYWxsaW5nIGBgZmlsZS5yZWFkbGluZXMoKWBgLgogCi0gICAuLiBtZXRob2Q6OiBzZWVrKG9mZnNldCwgd2hlbmNlPVNFRUtfU0VUKQorICAgLi4gbWV0aG9kOjogc2VlayhvZmZzZXRbLCB3aGVuY2VdKQogCiAgICAgICBDaGFuZ2UgdGhlIHN0cmVhbSBwb3NpdGlvbiB0byB0aGUgZ2l2ZW4gYnl0ZSAqb2Zmc2V0Ki4gICpvZmZzZXQqIGlzCi0gICAgICBpbnRlcnByZXRlZCByZWxhdGl2ZSB0byB0aGUgcG9zaXRpb24gaW5kaWNhdGVkIGJ5ICp3aGVuY2UqLiAgVmFsdWVzIGZvcgotICAgICAgKndoZW5jZSogYXJlOgorICAgICAgaW50ZXJwcmV0ZWQgcmVsYXRpdmUgdG8gdGhlIHBvc2l0aW9uIGluZGljYXRlZCBieSAqd2hlbmNlKi4gIFRoZSBkZWZhdWx0CisgICAgICB2YWx1ZSBmb3IgKndoZW5jZSogaXMgOmRhdGE6YFNFRUtfU0VUYC4gIFZhbHVlcyBmb3IgKndoZW5jZSogYXJlOgogCiAgICAgICAqIDpkYXRhOmBTRUVLX1NFVGAgb3IgYGAwYGAgLS0gc3RhcnQgb2YgdGhlIHN0cmVhbSAodGhlIGRlZmF1bHQpOwogICAgICAgICAqb2Zmc2V0KiBzaG91bGQgYmUgemVybyBvciBwb3NpdGl2ZQpAQCAtMzUzLDYgKzM1MywxMiBAQAogICAgICAgaXMgdXN1YWwgZm9yIGVhY2ggb2YgdGhlIGxpbmVzIHByb3ZpZGVkIHRvIGhhdmUgYSBsaW5lIHNlcGFyYXRvciBhdCB0aGUKICAgICAgIGVuZC4KIAorICAgLi4gbWV0aG9kOjogX19kZWxfXygpCisKKyAgICAgIFByZXBhcmUgZm9yIG9iamVjdCBkZXN0cnVjdGlvbi4gOmNsYXNzOmBJT0Jhc2VgIHByb3ZpZGVzIGEgZGVmYXVsdAorICAgICAgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBtZXRob2QgdGhhdCBjYWxscyB0aGUgaW5zdGFuY2UncworICAgICAgOm1ldGg6YH5JT0Jhc2UuY2xvc2VgIG1ldGhvZC4KKwogCiAuLiBjbGFzczo6IFJhd0lPQmFzZQogCkBAIC0zNjYsMTQgKzM3MiwxNCBAQAogICAgSW4gYWRkaXRpb24gdG8gdGhlIGF0dHJpYnV0ZXMgYW5kIG1ldGhvZHMgZnJvbSA6Y2xhc3M6YElPQmFzZWAsCiAgICA6Y2xhc3M6YFJhd0lPQmFzZWAgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBtZXRob2RzOgogCi0gICAuLiBtZXRob2Q6OiByZWFkKG49LTEpCisgICAuLiBtZXRob2Q6OiByZWFkKHNpemU9LTEpCiAKLSAgICAgIFJlYWQgdXAgdG8gKm4qIGJ5dGVzIGZyb20gdGhlIG9iamVjdCBhbmQgcmV0dXJuIHRoZW0uICBBcyBhIGNvbnZlbmllbmNlLAotICAgICAgaWYgKm4qIGlzIHVuc3BlY2lmaWVkIG9yIC0xLCA6bWV0aDpgcmVhZGFsbGAgaXMgY2FsbGVkLiAgT3RoZXJ3aXNlLAotICAgICAgb25seSBvbmUgc3lzdGVtIGNhbGwgaXMgZXZlciBtYWRlLiAgRmV3ZXIgdGhhbiAqbiogYnl0ZXMgbWF5IGJlCi0gICAgICByZXR1cm5lZCBpZiB0aGUgb3BlcmF0aW5nIHN5c3RlbSBjYWxsIHJldHVybnMgZmV3ZXIgdGhhbiAqbiogYnl0ZXMuCisgICAgICBSZWFkIHVwIHRvICpzaXplKiBieXRlcyBmcm9tIHRoZSBvYmplY3QgYW5kIHJldHVybiB0aGVtLiAgQXMgYSBjb252ZW5pZW5jZSwKKyAgICAgIGlmICpzaXplKiBpcyB1bnNwZWNpZmllZCBvciAtMSwgOm1ldGg6YHJlYWRhbGxgIGlzIGNhbGxlZC4gIE90aGVyd2lzZSwKKyAgICAgIG9ubHkgb25lIHN5c3RlbSBjYWxsIGlzIGV2ZXIgbWFkZS4gIEZld2VyIHRoYW4gKnNpemUqIGJ5dGVzIG1heSBiZQorICAgICAgcmV0dXJuZWQgaWYgdGhlIG9wZXJhdGluZyBzeXN0ZW0gY2FsbCByZXR1cm5zIGZld2VyIHRoYW4gKnNpemUqIGJ5dGVzLgogCi0gICAgICBJZiAwIGJ5dGVzIGFyZSByZXR1cm5lZCwgYW5kICpuKiB3YXMgbm90IDAsIHRoaXMgaW5kaWNhdGVzIGVuZCBvZiBmaWxlLgorICAgICAgSWYgMCBieXRlcyBhcmUgcmV0dXJuZWQsIGFuZCAqc2l6ZSogd2FzIG5vdCAwLCB0aGlzIGluZGljYXRlcyBlbmQgb2YgZmlsZS4KICAgICAgIElmIHRoZSBvYmplY3QgaXMgaW4gbm9uLWJsb2NraW5nIG1vZGUgYW5kIG5vIGJ5dGVzIGFyZSBhdmFpbGFibGUsCiAgICAgICBgYE5vbmVgYCBpcyByZXR1cm5lZC4KIApAQCAtNDQyLDEwICs0NDgsMTAgQEAKIAogICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy4xCiAKLSAgIC4uIG1ldGhvZDo6IHJlYWQobj0tMSkKKyAgIC4uIG1ldGhvZDo6IHJlYWQoc2l6ZT0tMSkKIAotICAgICAgUmVhZCBhbmQgcmV0dXJuIHVwIHRvICpuKiBieXRlcy4gIElmIHRoZSBhcmd1bWVudCBpcyBvbWl0dGVkLCBgYE5vbmVgYCwgb3IKLSAgICAgIG5lZ2F0aXZlLCBkYXRhIGlzIHJlYWQgYW5kIHJldHVybmVkIHVudGlsIEVPRiBpcyByZWFjaGVkLiAgQW4gZW1wdHkKKyAgICAgIFJlYWQgYW5kIHJldHVybiB1cCB0byAqc2l6ZSogYnl0ZXMuICBJZiB0aGUgYXJndW1lbnQgaXMgb21pdHRlZCwgYGBOb25lYGAsCisgICAgICBvciBuZWdhdGl2ZSwgZGF0YSBpcyByZWFkIGFuZCByZXR1cm5lZCB1bnRpbCBFT0YgaXMgcmVhY2hlZC4gIEFuIGVtcHR5CiAgICAgICA6Y2xhc3M6YGJ5dGVzYCBvYmplY3QgaXMgcmV0dXJuZWQgaWYgdGhlIHN0cmVhbSBpcyBhbHJlYWR5IGF0IEVPRi4KIAogICAgICAgSWYgdGhlIGFyZ3VtZW50IGlzIHBvc2l0aXZlLCBhbmQgdGhlIHVuZGVybHlpbmcgcmF3IHN0cmVhbSBpcyBub3QKQEAgLTQ1Nyw5ICs0NjMsOSBAQAogICAgICAgQSA6ZXhjOmBCbG9ja2luZ0lPRXJyb3JgIGlzIHJhaXNlZCBpZiB0aGUgdW5kZXJseWluZyByYXcgc3RyZWFtIGlzIGluCiAgICAgICBub24gYmxvY2tpbmctbW9kZSwgYW5kIGhhcyBubyBkYXRhIGF2YWlsYWJsZSBhdCB0aGUgbW9tZW50LgogCi0gICAuLiBtZXRob2Q6OiByZWFkMShuPS0xKQorICAgLi4gbWV0aG9kOjogcmVhZDEoc2l6ZT0tMSkKIAotICAgICAgUmVhZCBhbmQgcmV0dXJuIHVwIHRvICpuKiBieXRlcywgd2l0aCBhdCBtb3N0IG9uZSBjYWxsIHRvIHRoZSB1bmRlcmx5aW5nCisgICAgICBSZWFkIGFuZCByZXR1cm4gdXAgdG8gKnNpemUqIGJ5dGVzLCB3aXRoIGF0IG1vc3Qgb25lIGNhbGwgdG8gdGhlIHVuZGVybHlpbmcKICAgICAgIHJhdyBzdHJlYW0ncyA6bWV0aDpgflJhd0lPQmFzZS5yZWFkYCBtZXRob2QuICBUaGlzIGNhbiBiZSB1c2VmdWwgaWYgeW91CiAgICAgICBhcmUgaW1wbGVtZW50aW5nIHlvdXIgb3duIGJ1ZmZlcmluZyBvbiB0b3Agb2YgYSA6Y2xhc3M6YEJ1ZmZlcmVkSU9CYXNlYAogICAgICAgb2JqZWN0LgpAQCAtNTIyLDYgKzUyOCw4IEBACiAgICA6bW9kOmBvcy5vcGVuYCBhcyAqb3BlbmVyKiByZXN1bHRzIGluIGZ1bmN0aW9uYWxpdHkgc2ltaWxhciB0byBwYXNzaW5nCiAgICBgYE5vbmVgYCkuCiAKKyAgIFRoZSBuZXdseSBjcmVhdGVkIGZpbGUgaXMgOnJlZjpgbm9uLWluaGVyaXRhYmxlIDxmZF9pbmhlcml0YW5jZT5gLgorCiAgICBTZWUgdGhlIDpmdW5jOmBvcGVuYCBidWlsdC1pbiBmdW5jdGlvbiBmb3IgZXhhbXBsZXMgb24gdXNpbmcgdGhlICpvcGVuZXIqCiAgICBwYXJhbWV0ZXIuCiAKQEAgLTUyOSw2ICs1MzcsOSBAQAogICAgICAgVGhlICpvcGVuZXIqIHBhcmFtZXRlciB3YXMgYWRkZWQuCiAgICAgICBUaGUgYGAneCdgYCBtb2RlIHdhcyBhZGRlZC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSBmaWxlIGlzIG5vdyBub24taW5oZXJpdGFibGUuCisKICAgIEluIGFkZGl0aW9uIHRvIHRoZSBhdHRyaWJ1dGVzIGFuZCBtZXRob2RzIGZyb20gOmNsYXNzOmBJT0Jhc2VgIGFuZAogICAgOmNsYXNzOmBSYXdJT0Jhc2VgLCA6Y2xhc3M6YEZpbGVJT2AgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBkYXRhCiAgICBhdHRyaWJ1dGVzOgpAQCAtNTUyLDcgKzU2Myw4IEBACiAuLiBjbGFzczo6IEJ5dGVzSU8oW2luaXRpYWxfYnl0ZXNdKQogCiAgICBBIHN0cmVhbSBpbXBsZW1lbnRhdGlvbiB1c2luZyBhbiBpbi1tZW1vcnkgYnl0ZXMgYnVmZmVyLiAgSXQgaW5oZXJpdHMKLSAgIDpjbGFzczpgQnVmZmVyZWRJT0Jhc2VgLgorICAgOmNsYXNzOmBCdWZmZXJlZElPQmFzZWAuICBUaGUgYnVmZmVyIGlzIGRpc2NhcmRlZCB3aGVuIHRoZQorICAgOm1ldGg6YH5JT0Jhc2UuY2xvc2VgIG1ldGhvZCBpcyBjYWxsZWQuCiAKICAgIFRoZSBhcmd1bWVudCAqaW5pdGlhbF9ieXRlcyogY29udGFpbnMgb3B0aW9uYWwgaW5pdGlhbCA6Y2xhc3M6YGJ5dGVzYCBkYXRhLgogCkBAIC01NzMsNyArNTg1LDcgQEAKIAogICAgICAgLi4gbm90ZTo6CiAgICAgICAgICBBcyBsb25nIGFzIHRoZSB2aWV3IGV4aXN0cywgdGhlIDpjbGFzczpgQnl0ZXNJT2Agb2JqZWN0IGNhbm5vdCBiZQotICAgICAgICAgcmVzaXplZC4KKyAgICAgICAgIHJlc2l6ZWQgb3IgY2xvc2VkLgogCiAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKIApAQCAtNTgxLDYgKzU5Myw3IEBACiAKICAgICAgIFJldHVybiA6Y2xhc3M6YGJ5dGVzYCBjb250YWluaW5nIHRoZSBlbnRpcmUgY29udGVudHMgb2YgdGhlIGJ1ZmZlci4KIAorCiAgICAuLiBtZXRob2Q6OiByZWFkMSgpCiAKICAgICAgIEluIDpjbGFzczpgQnl0ZXNJT2AsIHRoaXMgaXMgdGhlIHNhbWUgYXMgOm1ldGg6YHJlYWRgLgpAQCAtNjAxLDIxICs2MTQsMjEgQEAKICAgIDpjbGFzczpgQnVmZmVyZWRSZWFkZXJgIHByb3ZpZGVzIG9yIG92ZXJyaWRlcyB0aGVzZSBtZXRob2RzIGluIGFkZGl0aW9uIHRvCiAgICB0aG9zZSBmcm9tIDpjbGFzczpgQnVmZmVyZWRJT0Jhc2VgIGFuZCA6Y2xhc3M6YElPQmFzZWA6CiAKLSAgIC4uIG1ldGhvZDo6IHBlZWsoW25dKQorICAgLi4gbWV0aG9kOjogcGVlayhbc2l6ZV0pCiAKICAgICAgIFJldHVybiBieXRlcyBmcm9tIHRoZSBzdHJlYW0gd2l0aG91dCBhZHZhbmNpbmcgdGhlIHBvc2l0aW9uLiAgQXQgbW9zdCBvbmUKICAgICAgIHNpbmdsZSByZWFkIG9uIHRoZSByYXcgc3RyZWFtIGlzIGRvbmUgdG8gc2F0aXNmeSB0aGUgY2FsbC4gVGhlIG51bWJlciBvZgogICAgICAgYnl0ZXMgcmV0dXJuZWQgbWF5IGJlIGxlc3Mgb3IgbW9yZSB0aGFuIHJlcXVlc3RlZC4KIAotICAgLi4gbWV0aG9kOjogcmVhZChbbl0pCisgICAuLiBtZXRob2Q6OiByZWFkKFtzaXplXSkKIAotICAgICAgUmVhZCBhbmQgcmV0dXJuICpuKiBieXRlcywgb3IgaWYgKm4qIGlzIG5vdCBnaXZlbiBvciBuZWdhdGl2ZSwgdW50aWwgRU9GCi0gICAgICBvciBpZiB0aGUgcmVhZCBjYWxsIHdvdWxkIGJsb2NrIGluIG5vbi1ibG9ja2luZyBtb2RlLgorICAgICAgUmVhZCBhbmQgcmV0dXJuICpzaXplKiBieXRlcywgb3IgaWYgKnNpemUqIGlzIG5vdCBnaXZlbiBvciBuZWdhdGl2ZSwgdW50aWwKKyAgICAgIEVPRiBvciBpZiB0aGUgcmVhZCBjYWxsIHdvdWxkIGJsb2NrIGluIG5vbi1ibG9ja2luZyBtb2RlLgogCi0gICAuLiBtZXRob2Q6OiByZWFkMShuKQorICAgLi4gbWV0aG9kOjogcmVhZDEoc2l6ZSkKIAotICAgICAgUmVhZCBhbmQgcmV0dXJuIHVwIHRvICpuKiBieXRlcyB3aXRoIG9ubHkgb25lIGNhbGwgb24gdGhlIHJhdyBzdHJlYW0uICBJZgotICAgICAgYXQgbGVhc3Qgb25lIGJ5dGUgaXMgYnVmZmVyZWQsIG9ubHkgYnVmZmVyZWQgYnl0ZXMgYXJlIHJldHVybmVkLgorICAgICAgUmVhZCBhbmQgcmV0dXJuIHVwIHRvICpzaXplKiBieXRlcyB3aXRoIG9ubHkgb25lIGNhbGwgb24gdGhlIHJhdyBzdHJlYW0uCisgICAgICBJZiBhdCBsZWFzdCBvbmUgYnl0ZSBpcyBidWZmZXJlZCwgb25seSBidWZmZXJlZCBieXRlcyBhcmUgcmV0dXJuZWQuCiAgICAgICBPdGhlcndpc2UsIG9uZSByYXcgc3RyZWFtIHJlYWQgY2FsbCBpcyBtYWRlLgogCiAKQEAgLTczNSwyMiArNzQ4LDIzIEBACiAKICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMQogCi0gICAuLiBtZXRob2Q6OiByZWFkKG4pCisgICAuLiBtZXRob2Q6OiByZWFkKHNpemUpCiAKLSAgICAgIFJlYWQgYW5kIHJldHVybiBhdCBtb3N0ICpuKiBjaGFyYWN0ZXJzIGZyb20gdGhlIHN0cmVhbSBhcyBhIHNpbmdsZQotICAgICAgOmNsYXNzOmBzdHJgLiAgSWYgKm4qIGlzIG5lZ2F0aXZlIG9yIGBgTm9uZWBgLCByZWFkcyB1bnRpbCBFT0YuCisgICAgICBSZWFkIGFuZCByZXR1cm4gYXQgbW9zdCAqc2l6ZSogY2hhcmFjdGVycyBmcm9tIHRoZSBzdHJlYW0gYXMgYSBzaW5nbGUKKyAgICAgIDpjbGFzczpgc3RyYC4gIElmICpzaXplKiBpcyBuZWdhdGl2ZSBvciBgYE5vbmVgYCwgcmVhZHMgdW50aWwgRU9GLgogCi0gICAuLiBtZXRob2Q6OiByZWFkbGluZShsaW1pdD0tMSkKKyAgIC4uIG1ldGhvZDo6IHJlYWRsaW5lKHNpemU9LTEpCiAKICAgICAgIFJlYWQgdW50aWwgbmV3bGluZSBvciBFT0YgYW5kIHJldHVybiBhIHNpbmdsZSBgYHN0cmBgLiAgSWYgdGhlIHN0cmVhbSBpcwogICAgICAgYWxyZWFkeSBhdCBFT0YsIGFuIGVtcHR5IHN0cmluZyBpcyByZXR1cm5lZC4KIAotICAgICAgSWYgKmxpbWl0KiBpcyBzcGVjaWZpZWQsIGF0IG1vc3QgKmxpbWl0KiBjaGFyYWN0ZXJzIHdpbGwgYmUgcmVhZC4KKyAgICAgIElmICpzaXplKiBpcyBzcGVjaWZpZWQsIGF0IG1vc3QgKnNpemUqIGNoYXJhY3RlcnMgd2lsbCBiZSByZWFkLgogCi0gICAuLiBtZXRob2Q6OiBzZWVrKG9mZnNldCwgd2hlbmNlPVNFRUtfU0VUKQorICAgLi4gbWV0aG9kOjogc2VlayhvZmZzZXRbLCB3aGVuY2VdKQogCi0gICAgICBDaGFuZ2UgdGhlIHN0cmVhbSBwb3NpdGlvbiB0byB0aGUgZ2l2ZW4gKm9mZnNldCouICBCZWhhdmlvdXIgZGVwZW5kcwotICAgICAgb24gdGhlICp3aGVuY2UqIHBhcmFtZXRlcjoKKyAgICAgIENoYW5nZSB0aGUgc3RyZWFtIHBvc2l0aW9uIHRvIHRoZSBnaXZlbiAqb2Zmc2V0Ki4gIEJlaGF2aW91ciBkZXBlbmRzIG9uCisgICAgICB0aGUgKndoZW5jZSogcGFyYW1ldGVyLiAgVGhlIGRlZmF1bHQgdmFsdWUgZm9yICp3aGVuY2UqIGlzCisgICAgICA6ZGF0YTpgU0VFS19TRVRgLgogCiAgICAgICAqIDpkYXRhOmBTRUVLX1NFVGAgb3IgYGAwYGA6IHNlZWsgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIHN0cmVhbQogICAgICAgICAodGhlIGRlZmF1bHQpOyAqb2Zmc2V0KiBtdXN0IGVpdGhlciBiZSBhIG51bWJlciByZXR1cm5lZCBieQpAQCAtODQ3LDIxICs4NjEsMjggQEAKIAogLi4gY2xhc3M6OiBTdHJpbmdJTyhpbml0aWFsX3ZhbHVlPScnLCBuZXdsaW5lPSdcXG4nKQogCi0gICBBbiBpbi1tZW1vcnkgc3RyZWFtIGZvciB0ZXh0IEkvTy4KKyAgIEFuIGluLW1lbW9yeSBzdHJlYW0gZm9yIHRleHQgSS9PLiAgVGhlIHRleHQgYnVmZmVyIGlzIGRpc2NhcmRlZCB3aGVuIHRoZQorICAgOm1ldGg6YH5JT0Jhc2UuY2xvc2VgIG1ldGhvZCBpcyBjYWxsZWQuCiAKLSAgIFRoZSBpbml0aWFsIHZhbHVlIG9mIHRoZSBidWZmZXIgKGFuIGVtcHR5IHN0cmluZyBieSBkZWZhdWx0KSBjYW4gYmUgc2V0IGJ5Ci0gICBwcm92aWRpbmcgKmluaXRpYWxfdmFsdWUqLiAgVGhlICpuZXdsaW5lKiBhcmd1bWVudCB3b3JrcyBsaWtlIHRoYXQgb2YKLSAgIDpjbGFzczpgVGV4dElPV3JhcHBlcmAuICBUaGUgZGVmYXVsdCBpcyB0byBjb25zaWRlciBvbmx5IGBgXG5gYCBjaGFyYWN0ZXJzCi0gICBhcyBlbmQgb2YgbGluZXMgYW5kIHRvIGRvIG5vIG5ld2xpbmUgdHJhbnNsYXRpb24uCisgICBUaGUgaW5pdGlhbCB2YWx1ZSBvZiB0aGUgYnVmZmVyIGNhbiBiZSBzZXQgYnkgcHJvdmlkaW5nICppbml0aWFsX3ZhbHVlKi4KKyAgIElmIG5ld2xpbmUgdHJhbnNsYXRpb24gaXMgZW5hYmxlZCwgbmV3bGluZXMgd2lsbCBiZSBlbmNvZGVkIGFzIGlmIGJ5CisgICA6bWV0aDpgflRleHRJT0Jhc2Uud3JpdGVgLiAgVGhlIHN0cmVhbSBpcyBwb3NpdGlvbmVkIGF0IHRoZSBzdGFydCBvZgorICAgdGhlIGJ1ZmZlci4KKworICAgVGhlICpuZXdsaW5lKiBhcmd1bWVudCB3b3JrcyBsaWtlIHRoYXQgb2YgOmNsYXNzOmBUZXh0SU9XcmFwcGVyYC4KKyAgIFRoZSBkZWZhdWx0IGlzIHRvIGNvbnNpZGVyIG9ubHkgYGBcbmBgIGNoYXJhY3RlcnMgYXMgZW5kcyBvZiBsaW5lcyBhbmQKKyAgIHRvIGRvIG5vIG5ld2xpbmUgdHJhbnNsYXRpb24uICBJZiAqbmV3bGluZSogaXMgc2V0IHRvIGBgTm9uZWBgLAorICAgbmV3bGluZXMgYXJlIHdyaXR0ZW4gYXMgYGBcbmBgIG9uIGFsbCBwbGF0Zm9ybXMsIGJ1dCB1bml2ZXJzYWwKKyAgIG5ld2xpbmUgZGVjb2RpbmcgaXMgc3RpbGwgcGVyZm9ybWVkIHdoZW4gcmVhZGluZy4KIAogICAgOmNsYXNzOmBTdHJpbmdJT2AgcHJvdmlkZXMgdGhpcyBtZXRob2QgaW4gYWRkaXRpb24gdG8gdGhvc2UgZnJvbQogICAgOmNsYXNzOmBUZXh0SU9CYXNlYCBhbmQgaXRzIHBhcmVudHM6CiAKICAgIC4uIG1ldGhvZDo6IGdldHZhbHVlKCkKIAotICAgICAgUmV0dXJuIGEgYGBzdHJgYCBjb250YWluaW5nIHRoZSBlbnRpcmUgY29udGVudHMgb2YgdGhlIGJ1ZmZlciBhdCBhbnkKLSAgICAgIHRpbWUgYmVmb3JlIHRoZSA6Y2xhc3M6YFN0cmluZ0lPYCBvYmplY3QncyA6bWV0aDpgY2xvc2VgIG1ldGhvZCBpcwotICAgICAgY2FsbGVkLgorICAgICAgUmV0dXJuIGEgYGBzdHJgYCBjb250YWluaW5nIHRoZSBlbnRpcmUgY29udGVudHMgb2YgdGhlIGJ1ZmZlci4KKyAgICAgIE5ld2xpbmVzIGFyZSBkZWNvZGVkIGFzIGlmIGJ5IDptZXRoOmB+VGV4dElPQmFzZS5yZWFkYCwgYWx0aG91Z2gKKyAgICAgIHRoZSBzdHJlYW0gcG9zaXRpb24gaXMgbm90IGNoYW5nZWQuCiAKICAgIEV4YW1wbGUgdXNhZ2U6OgogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9pcGFkZHJlc3MucnN0IGIvRG9jL2xpYnJhcnkvaXBhZGRyZXNzLnJzdAppbmRleCA4ZWFjOTJmLi4zMDEwNDhlIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9pcGFkZHJlc3MucnN0CisrKyBiL0RvYy9saWJyYXJ5L2lwYWRkcmVzcy5yc3QKQEAgLTksMTMgKzksNiBAQAogCiAtLS0tLS0tLS0tLS0tLQogCi0uLiBub3RlOjoKLQotICAgVGhlIGBgaXBhZGRyZXNzYGAgbW9kdWxlIGhhcyBiZWVuIGluY2x1ZGVkIGluIHRoZSBzdGFuZGFyZCBsaWJyYXJ5IG9uIGEKLSAgIDp0ZXJtOmBwcm92aXNpb25hbCBiYXNpcyA8cHJvdmlzaW9uYWwgcGFja2FnZT5gLiBCYWNrd2FyZHMgaW5jb21wYXRpYmxlCi0gICBjaGFuZ2VzICh1cCB0byBhbmQgaW5jbHVkaW5nIHJlbW92YWwgb2YgdGhlIHBhY2thZ2UpIG1heSBvY2N1ciBpZiBkZWVtZWQKLSAgIG5lY2Vzc2FyeSBieSB0aGUgY29yZSBkZXZlbG9wZXJzLgotCiA6bW9kOmBpcGFkZHJlc3NgIHByb3ZpZGVzIHRoZSBjYXBhYmlsaXRpZXMgdG8gY3JlYXRlLCBtYW5pcHVsYXRlIGFuZAogb3BlcmF0ZSBvbiBJUHY0IGFuZCBJUHY2IGFkZHJlc3NlcyBhbmQgbmV0d29ya3MuCiAKQEAgLTI1LDggKzE4LDggQEAKIHN1Ym5ldCwgY2hlY2tpbmcgd2hldGhlciBvciBub3QgYSBzdHJpbmcgcmVwcmVzZW50cyBhIHZhbGlkIElQIGFkZHJlc3Mgb3IKIG5ldHdvcmsgZGVmaW5pdGlvbiwgYW5kIHNvIG9uLgogCi1UaGlzIGlzIHRoZSBmdWxsIG1vZHVsZSBBUEkgcmVmZXJlbmNlIC0gZm9yIGFuIG92ZXJ2aWV3IGFuZCBpbnRyb2R1Y3Rpb24sCi1zZWUgOnJlZjpgaXBhZGRyZXNzLWhvd3RvYC4KK1RoaXMgaXMgdGhlIGZ1bGwgbW9kdWxlIEFQSSByZWZlcmVuY2XigJRmb3IgYW4gb3ZlcnZpZXcgYW5kIGludHJvZHVjdGlvbiwgc2VlCis6cmVmOmBpcGFkZHJlc3MtaG93dG9gLgogCiAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKIApAQCAtMTEwLDcgKzEwMyw3IEBACiAgICAxLiBBIHN0cmluZyBpbiBkZWNpbWFsLWRvdCBub3RhdGlvbiwgY29uc2lzdGluZyBvZiBmb3VyIGRlY2ltYWwgaW50ZWdlcnMgaW4KICAgICAgIHRoZSBpbmNsdXNpdmUgcmFuZ2UgMC0yNTUsIHNlcGFyYXRlZCBieSBkb3RzIChlLmcuIGBgMTkyLjE2OC4wLjFgYCkuIEVhY2gKICAgICAgIGludGVnZXIgcmVwcmVzZW50cyBhbiBvY3RldCAoYnl0ZSkgaW4gdGhlIGFkZHJlc3MuIExlYWRpbmcgemVyb2VzIGFyZQotICAgICAgdG9sZXJhdGVkIG9ubHkgZm9yIHZhbHVlcyBsZXNzIHRoZW4gOCAoYXMgdGhlcmUgaXMgbm8gYW1iaWd1aXR5CisgICAgICB0b2xlcmF0ZWQgb25seSBmb3IgdmFsdWVzIGxlc3MgdGhhbiA4IChhcyB0aGVyZSBpcyBubyBhbWJpZ3VpdHkKICAgICAgIGJldHdlZW4gdGhlIGRlY2ltYWwgYW5kIG9jdGFsIGludGVycHJldGF0aW9ucyBvZiBzdWNoIHN0cmluZ3MpLgogICAgMi4gQW4gaW50ZWdlciB0aGF0IGZpdHMgaW50byAzMiBiaXRzLgogICAgMy4gQW4gaW50ZWdlciBwYWNrZWQgaW50byBhIDpjbGFzczpgYnl0ZXNgIG9iamVjdCBvZiBsZW5ndGggNCAobW9zdApAQCAtMTYxLDcgKzE1NCwxNiBAQAogICAgLi4gYXR0cmlidXRlOjogaXNfcHJpdmF0ZQogCiAgICAgICBgYFRydWVgYCBpZiB0aGUgYWRkcmVzcyBpcyBhbGxvY2F0ZWQgZm9yIHByaXZhdGUgbmV0d29ya3MuICBTZWUKLSAgICAgIDpSRkM6YDE5MThgIChmb3IgSVB2NCkgb3IgOlJGQzpgNDE5M2AgKGZvciBJUHY2KS4KKyAgICAgIGlhbmEtaXB2NC1zcGVjaWFsLXJlZ2lzdHJ5XyAoZm9yIElQdjQpIG9yIGlhbmEtaXB2Ni1zcGVjaWFsLXJlZ2lzdHJ5XworICAgICAgKGZvciBJUHY2KS4KKworICAgLi4gYXR0cmlidXRlOjogaXNfZ2xvYmFsCisKKyAgICAgIGBgVHJ1ZWBgIGlmIHRoZSBhZGRyZXNzIGlzIGFsbG9jYXRlZCBmb3IgcHVibGljIG5ldHdvcmtzLiAgU2VlCisgICAgICBpYW5hLWlwdjQtc3BlY2lhbC1yZWdpc3RyeV8gKGZvciBJUHY0KSBvciBpYW5hLWlwdjYtc3BlY2lhbC1yZWdpc3RyeV8KKyAgICAgIChmb3IgSVB2NikuCisKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAogCiAgICAuLiBhdHRyaWJ1dGU6OiBpc191bnNwZWNpZmllZAogCkBAIC0xODIsNiArMTg0LDkgQEAKICAgICAgIGBgVHJ1ZWBgIGlmIHRoZSBhZGRyZXNzIGlzIHJlc2VydmVkIGZvciBsaW5rLWxvY2FsIHVzYWdlLiAgU2VlCiAgICAgICA6UkZDOmAzOTI3YC4KIAorLi4gX2lhbmEtaXB2NC1zcGVjaWFsLXJlZ2lzdHJ5OiBodHRwOi8vd3d3LmlhbmEub3JnL2Fzc2lnbm1lbnRzL2lhbmEtaXB2NC1zcGVjaWFsLXJlZ2lzdHJ5L2lhbmEtaXB2NC1zcGVjaWFsLXJlZ2lzdHJ5LnhodG1sCisuLiBfaWFuYS1pcHY2LXNwZWNpYWwtcmVnaXN0cnk6IGh0dHA6Ly93d3cuaWFuYS5vcmcvYXNzaWdubWVudHMvaWFuYS1pcHY2LXNwZWNpYWwtcmVnaXN0cnkvaWFuYS1pcHY2LXNwZWNpYWwtcmVnaXN0cnkueGh0bWwKKwogCiAuLiBjbGFzczo6IElQdjZBZGRyZXNzKGFkZHJlc3MpCiAKQEAgLTIxNiwxOCArMjIxLDIzIEBACiAgICBUaGUgbG9uZyBmb3JtIG9mIHRoZSBhZGRyZXNzIHJlcHJlc2VudGF0aW9uLCB3aXRoIGFsbCBsZWFkaW5nIHplcm9lcyBhbmQKICAgIGdyb3VwcyBjb25zaXN0aW5nIGVudGlyZWx5IG9mIHplcm9lcyBpbmNsdWRlZC4KIAorCisgICBGb3IgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzLCBzZWUgdGhlIGNvcnJlc3BvbmRpbmcgZG9jdW1lbnRpb24gb2YgdGhlCisgICA6Y2xhc3M6YElQdjRBZGRyZXNzYCBjbGFzczoKKwogICAgLi4gYXR0cmlidXRlOjogcGFja2VkCiAgICAuLiBhdHRyaWJ1dGU6OiB2ZXJzaW9uCiAgICAuLiBhdHRyaWJ1dGU6OiBtYXhfcHJlZml4bGVuCiAgICAuLiBhdHRyaWJ1dGU6OiBpc19tdWx0aWNhc3QKICAgIC4uIGF0dHJpYnV0ZTo6IGlzX3ByaXZhdGUKKyAgIC4uIGF0dHJpYnV0ZTo6IGlzX2dsb2JhbAogICAgLi4gYXR0cmlidXRlOjogaXNfdW5zcGVjaWZpZWQKICAgIC4uIGF0dHJpYnV0ZTo6IGlzX3Jlc2VydmVkCiAgICAuLiBhdHRyaWJ1dGU6OiBpc19sb29wYmFjawogICAgLi4gYXR0cmlidXRlOjogaXNfbGlua19sb2NhbAogCi0gICAgICBSZWZlciB0byB0aGUgY29ycmVzcG9uZGluZyBhdHRyaWJ1dGUgZG9jdW1lbnRhdGlvbiBpbgotICAgICAgOmNsYXNzOmBJUHY0QWRkcmVzc2AKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorICAgICAgICAgaXNfZ2xvYmFsCiAKICAgIC4uIGF0dHJpYnV0ZTo6IGlzX3NpdGVfbG9jYWwKIApAQCAtNTQwLDcgKzU1MCw3IEBACiAgICAgICBzaW5nbGUtYWRkcmVzcyBuZXR3b3JrLCB3aXRoIHRoZSBuZXR3b3JrIGFkZHJlc3MgYmVpbmcgKmFkZHJlc3MqIGFuZAogICAgICAgdGhlIG1hc2sgYmVpbmcgYGAvMTI4YGAuCiAKLSAgIDMuIEFuIGludGVnZXIgcGFja2VkIGludG8gYSA6Y2xhc3M6YGJ5dGVzYCBvYmplY3Qgb2YgbGVuZ3RoIDE2LCBiaXQtZW5kaWFuLgorICAgMy4gQW4gaW50ZWdlciBwYWNrZWQgaW50byBhIDpjbGFzczpgYnl0ZXNgIG9iamVjdCBvZiBsZW5ndGggMTYsIGJpZy1lbmRpYW4uCiAgICAgICBUaGUgaW50ZXJwcmV0YXRpb24gaXMgc2ltaWxhciB0byBhbiBpbnRlZ2VyICphZGRyZXNzKi4KIAogICAgQW4gOmV4YzpgQWRkcmVzc1ZhbHVlRXJyb3JgIGlzIHJhaXNlZCBpZiAqYWRkcmVzcyogaXMgbm90IGEgdmFsaWQgSVB2NgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvaXBjLnJzdCBiL0RvYy9saWJyYXJ5L2lwYy5yc3QKaW5kZXggOTFlYzY5My4uNmIxNzU2MyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvaXBjLnJzdAorKysgYi9Eb2MvbGlicmFyeS9pcGMucnN0CkBAIC05LDcgKzksNyBAQAogCiBTb21lIG1vZHVsZXMgb25seSB3b3JrIGZvciB0d28gcHJvY2Vzc2VzIHRoYXQgYXJlIG9uIHRoZSBzYW1lIG1hY2hpbmUsIGUuZy4KIDptb2Q6YHNpZ25hbGAgYW5kIDptb2Q6YG1tYXBgLiAgT3RoZXIgbW9kdWxlcyBzdXBwb3J0IG5ldHdvcmtpbmcgcHJvdG9jb2xzCi10aGF0IHR3byBvciBtb3JlIHByb2Nlc3NlcyBjYW4gdXNlZCB0byBjb21tdW5pY2F0ZSBhY3Jvc3MgbWFjaGluZXMuCit0aGF0IHR3byBvciBtb3JlIHByb2Nlc3NlcyBjYW4gdXNlIHRvIGNvbW11bmljYXRlIGFjcm9zcyBtYWNoaW5lcy4KIAogVGhlIGxpc3Qgb2YgbW9kdWxlcyBkZXNjcmliZWQgaW4gdGhpcyBjaGFwdGVyIGlzOgogCkBAIC0xOCw2ICsxOCw5IEBACiAKICAgIHNvY2tldC5yc3QKICAgIHNzbC5yc3QKKyAgIHNlbGVjdC5yc3QKKyAgIHNlbGVjdG9ycy5yc3QKKyAgIGFzeW5jaW8ucnN0CiAgICBhc3luY29yZS5yc3QKICAgIGFzeW5jaGF0LnJzdAogICAgc2lnbmFsLnJzdApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvaXRlcnRvb2xzLnJzdCBiL0RvYy9saWJyYXJ5L2l0ZXJ0b29scy5yc3QKaW5kZXggNWQzZTUwYS4uZjQ4OTUzNSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvaXRlcnRvb2xzLnJzdAorKysgYi9Eb2MvbGlicmFyeS9pdGVydG9vbHMucnN0CkBAIC03ODQsNiArNzg0LDE5IEBACiAgICAgICAgZXhjZXB0IGV4Y2VwdGlvbjoKICAgICAgICAgICAgcGFzcwogCisgICBkZWYgZmlyc3RfdHJ1ZShpdGVyYWJsZSwgZGVmYXVsdD1GYWxzZSwgcHJlZD1Ob25lKToKKyAgICAgICAiIiJSZXR1cm5zIHRoZSBmaXJzdCB0cnVlIHZhbHVlIGluIHRoZSBpdGVyYWJsZS4KKworICAgICAgIElmIG5vIHRydWUgdmFsdWUgaXMgZm91bmQsIHJldHVybnMgKmRlZmF1bHQqCisKKyAgICAgICBJZiAqcHJlZCogaXMgbm90IE5vbmUsIHJldHVybnMgdGhlIGZpcnN0IGl0ZW0KKyAgICAgICBmb3Igd2hpY2ggcHJlZChpdGVtKSBpcyB0cnVlLgorCisgICAgICAgIiIiCisgICAgICAgIyBmaXJzdF90cnVlKFthLGIsY10sIHgpIC0tPiBhIG9yIGIgb3IgYyBvciB4CisgICAgICAgIyBmaXJzdF90cnVlKFthLGJdLCB4LCBmKSAtLT4gYSBpZiBmKGEpIGVsc2UgYiBpZiBmKGIpIGVsc2UgeAorICAgICAgIHJldHVybiBuZXh0KGZpbHRlcihwcmVkLCBpdGVyYWJsZSksIGRlZmF1bHQpCisKICAgIGRlZiByYW5kb21fcHJvZHVjdCgqYXJncywgcmVwZWF0PTEpOgogICAgICAgICJSYW5kb20gc2VsZWN0aW9uIGZyb20gaXRlcnRvb2xzLnByb2R1Y3QoKmFyZ3MsICoqa3dkcykiCiAgICAgICAgcG9vbHMgPSBbdHVwbGUocG9vbCkgZm9yIHBvb2wgaW4gYXJnc10gKiByZXBlYXQKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2pzb24ucnN0IGIvRG9jL2xpYnJhcnkvanNvbi5yc3QKaW5kZXggZjY1MjAzOS4uYTAxZTYzNiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvanNvbi5yc3QKKysrIGIvRG9jL2xpYnJhcnkvanNvbi5yc3QKQEAgLTcsOSArNywxMSBAQAogLi4gc2VjdGlvbmF1dGhvcjo6IEJvYiBJcHBvbGl0byA8Ym9iQHJlZGl2aS5jb20+CiAKIGBKU09OIChKYXZhU2NyaXB0IE9iamVjdCBOb3RhdGlvbikgPGh0dHA6Ly9qc29uLm9yZz5gXywgc3BlY2lmaWVkIGJ5Ci06cmZjOmA0NjI3YCwgaXMgYSBsaWdodHdlaWdodCBkYXRhIGludGVyY2hhbmdlIGZvcm1hdCBiYXNlZCBvbiBhIHN1YnNldCBvZgotYEphdmFTY3JpcHQgPGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSmF2YVNjcmlwdD5gXyBzeW50YXggKGBFQ01BLTI2MiAzcmQKLWVkaXRpb24gPGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9wdWJsaWNhdGlvbnMvZmlsZXMvRUNNQS1TVC1BUkNIL0VDTUEtMjYyLCUyMDNyZCUyMGVkaXRpb24sJTIwRGVjZW1iZXIlMjAxOTk5LnBkZj5gXykuCis6cmZjOmA3MTU5YCAod2hpY2ggb2Jzb2xldGVzIDpyZmM6YDQ2MjdgKSBhbmQgYnkKK2BFQ01BLTQwNCA8aHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL3B1YmxpY2F0aW9ucy9zdGFuZGFyZHMvRWNtYS00MDQuaHRtPmBfLAoraXMgYSBsaWdodHdlaWdodCBkYXRhIGludGVyY2hhbmdlIGZvcm1hdCBpbnNwaXJlZCBieQorYEphdmFTY3JpcHQgPGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSmF2YVNjcmlwdD5gXyBvYmplY3QgbGl0ZXJhbCBzeW50YXgKKyhhbHRob3VnaCBpdCBpcyBub3QgYSBzdHJpY3Qgc3Vic2V0IG9mIEphdmFTY3JpcHQgWyNyZmMtZXJyYXRhXV8gKS4KIAogOm1vZDpganNvbmAgZXhwb3NlcyBhbiBBUEkgZmFtaWxpYXIgdG8gdXNlcnMgb2YgdGhlIHN0YW5kYXJkIGxpYnJhcnkKIDptb2Q6YG1hcnNoYWxgIGFuZCA6bW9kOmBwaWNrbGVgIG1vZHVsZXMuCkBAIC00Miw4ICs0NCw3IEBACiBQcmV0dHkgcHJpbnRpbmc6OgogCiAgICAgPj4+IGltcG9ydCBqc29uCi0gICAgPj4+IHByaW50KGpzb24uZHVtcHMoeyc0JzogNSwgJzYnOiA3fSwgc29ydF9rZXlzPVRydWUsCi0gICAgLi4uICAgICAgICAgICAgICAgICAgaW5kZW50PTQsIHNlcGFyYXRvcnM9KCcsJywgJzogJykpKQorICAgID4+PiBwcmludChqc29uLmR1bXBzKHsnNCc6IDUsICc2JzogN30sIHNvcnRfa2V5cz1UcnVlLCBpbmRlbnQ9NCkpCiAgICAgewogICAgICAgICAiNCI6IDUsCiAgICAgICAgICI2IjogNwpAQCAtOTgsMTEgKzk5LDExIEBACiAKIFVzaW5nIGpzb24udG9vbCBmcm9tIHRoZSBzaGVsbCB0byB2YWxpZGF0ZSBhbmQgcHJldHR5LXByaW50OjoKIAotICAgICQgZWNobyAneyJqc29uIjoib2JqIn0nIHwgcHl0aG9uIC1tanNvbi50b29sCisgICAgJCBlY2hvICd7Impzb24iOiJvYmoifScgfCBweXRob24gLW0ganNvbi50b29sCiAgICAgewogICAgICAgICAianNvbiI6ICJvYmoiCiAgICAgfQotICAgICQgZWNobyAnezEuMjozLjR9JyB8IHB5dGhvbiAtbWpzb24udG9vbAorICAgICQgZWNobyAnezEuMjozLjR9JyB8IHB5dGhvbiAtbSBqc29uLnRvb2wKICAgICBFeHBlY3RpbmcgcHJvcGVydHkgbmFtZSBlbmNsb3NlZCBpbiBkb3VibGUgcXVvdGVzOiBsaW5lIDEgY29sdW1uIDIgKGNoYXIgMSkKIAogLi4gaGlnaGxpZ2h0OjogcHl0aG9uMwpAQCAtMTU4LDE1ICsxNTksMTMgQEAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCiAgICAgICBBbGxvdyBzdHJpbmdzIGZvciAqaW5kZW50KiBpbiBhZGRpdGlvbiB0byBpbnRlZ2Vycy4KIAotICAgLi4gbm90ZTo6CisgICBJZiBzcGVjaWZpZWQsICpzZXBhcmF0b3JzKiBzaG91bGQgYmUgYW4gYGAoaXRlbV9zZXBhcmF0b3IsIGtleV9zZXBhcmF0b3IpYGAKKyAgIHR1cGxlLiAgVGhlIGRlZmF1bHQgaXMgYGAoJywgJywgJzogJylgYCBpZiAqaW5kZW50KiBpcyBgYE5vbmVgYCBhbmQKKyAgIGBgKCcsJywgJzogJylgYCBvdGhlcndpc2UuICBUbyBnZXQgdGhlIG1vc3QgY29tcGFjdCBKU09OIHJlcHJlc2VudGF0aW9uLAorICAgeW91IHNob3VsZCBzcGVjaWZ5IGBgKCcsJywgJzonKWBgIHRvIGVsaW1pbmF0ZSB3aGl0ZXNwYWNlLgogCi0gICAgICBTaW5jZSB0aGUgZGVmYXVsdCBpdGVtIHNlcGFyYXRvciBpcyBgYCcsICdgYCwgIHRoZSBvdXRwdXQgbWlnaHQgaW5jbHVkZQotICAgICAgdHJhaWxpbmcgd2hpdGVzcGFjZSB3aGVuICppbmRlbnQqIGlzIHNwZWNpZmllZC4gIFlvdSBjYW4gdXNlCi0gICAgICBgYHNlcGFyYXRvcnM9KCcsJywgJzogJylgYCB0byBhdm9pZCB0aGlzLgotCi0gICBJZiAqc2VwYXJhdG9ycyogaXMgYW4gYGAoaXRlbV9zZXBhcmF0b3IsIGRpY3Rfc2VwYXJhdG9yKWBgIHR1cGxlLCB0aGVuIGl0Ci0gICB3aWxsIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBgYCgnLCAnLCAnOiAnKWBgIHNlcGFyYXRvcnMuICBgYCgnLCcsCi0gICAnOicpYGAgaXMgdGhlIG1vc3QgY29tcGFjdCBKU09OIHJlcHJlc2VudGF0aW9uLgorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFVzZSBgYCgnLCcsICc6ICcpYGAgYXMgZGVmYXVsdCBpZiAqaW5kZW50KiBpcyBub3QgYGBOb25lYGAuCiAKICAgICpkZWZhdWx0KG9iaikqIGlzIGEgZnVuY3Rpb24gdGhhdCBzaG91bGQgcmV0dXJuIGEgc2VyaWFsaXphYmxlIHZlcnNpb24gb2YKICAgICpvYmoqIG9yIHJhaXNlIDpleGM6YFR5cGVFcnJvcmAuICBUaGUgZGVmYXVsdCBzaW1wbHkgcmFpc2VzIDpleGM6YFR5cGVFcnJvcmAuCkBAIC0yNDgsNiArMjQ3LDggQEAKICAgIGt3YXJnOyBvdGhlcndpc2UgOmNsYXNzOmBKU09ORGVjb2RlcmAgaXMgdXNlZC4gIEFkZGl0aW9uYWwga2V5d29yZCBhcmd1bWVudHMKICAgIHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBjb25zdHJ1Y3RvciBvZiB0aGUgY2xhc3MuCiAKKyAgIElmIHRoZSBkYXRhIGJlaW5nIGRlc2VyaWFsaXplZCBpcyBub3QgYSB2YWxpZCBKU09OIGRvY3VtZW50LCBhCisgICA6ZXhjOmBWYWx1ZUVycm9yYCB3aWxsIGJlIHJhaXNlZC4KIAogLi4gZnVuY3Rpb246OiBsb2FkcyhzLCBlbmNvZGluZz1Ob25lLCBjbHM9Tm9uZSwgb2JqZWN0X2hvb2s9Tm9uZSwgcGFyc2VfZmxvYXQ9Tm9uZSwgcGFyc2VfaW50PU5vbmUsIHBhcnNlX2NvbnN0YW50PU5vbmUsIG9iamVjdF9wYWlyc19ob29rPU5vbmUsICoqa3cpCiAKQEAgLTI1Nyw2ICsyNTgsOCBAQAogICAgVGhlIG90aGVyIGFyZ3VtZW50cyBoYXZlIHRoZSBzYW1lIG1lYW5pbmcgYXMgaW4gOmZ1bmM6YGxvYWRgLCBleGNlcHQKICAgICplbmNvZGluZyogd2hpY2ggaXMgaWdub3JlZCBhbmQgZGVwcmVjYXRlZC4KIAorICAgSWYgdGhlIGRhdGEgYmVpbmcgZGVzZXJpYWxpemVkIGlzIG5vdCBhIHZhbGlkIEpTT04gZG9jdW1lbnQsIGEKKyAgIDpleGM6YFZhbHVlRXJyb3JgIHdpbGwgYmUgcmFpc2VkLgogCiBFbmNvZGVycyBhbmQgRGVjb2RlcnMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMzM0LDcgKzMzNyw3IEBACiAgICAuLiBtZXRob2Q6OiBkZWNvZGUocykKIAogICAgICAgUmV0dXJuIHRoZSBQeXRob24gcmVwcmVzZW50YXRpb24gb2YgKnMqIChhIDpjbGFzczpgc3RyYCBpbnN0YW5jZQotICAgICAgY29udGFpbmluZyBhIEpTT04gZG9jdW1lbnQpCisgICAgICBjb250YWluaW5nIGEgSlNPTiBkb2N1bWVudCkuCiAKICAgIC4uIG1ldGhvZDo6IHJhd19kZWNvZGUocykKIApAQCAtMzU0LDIzICszNTcsMjYgQEAKIAogICAgLi4gX3B5LXRvLWpzb24tdGFibGU6CiAKLSAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKLSAgIHwgUHl0aG9uICAgICAgICAgICAgfCBKU09OICAgICAgICAgIHwKLSAgICs9PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PSsKLSAgIHwgZGljdCAgICAgICAgICAgICAgfCBvYmplY3QgICAgICAgIHwKLSAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKLSAgIHwgbGlzdCwgdHVwbGUgICAgICAgfCBhcnJheSAgICAgICAgIHwKLSAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKLSAgIHwgc3RyICAgICAgICAgICAgICAgfCBzdHJpbmcgICAgICAgIHwKLSAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKLSAgIHwgaW50LCBmbG9hdCAgICAgICAgfCBudW1iZXIgICAgICAgIHwKLSAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKLSAgIHwgVHJ1ZSAgICAgICAgICAgICAgfCB0cnVlICAgICAgICAgIHwKLSAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKLSAgIHwgRmFsc2UgICAgICAgICAgICAgfCBmYWxzZSAgICAgICAgIHwKLSAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKLSAgIHwgTm9uZSAgICAgICAgICAgICAgfCBudWxsICAgICAgICAgIHwKLSAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgUHl0aG9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBKU09OICAgICAgICAgIHwKKyAgICs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PSsKKyAgIHwgZGljdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBvYmplY3QgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgbGlzdCwgdHVwbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhcnJheSAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgc3RyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzdHJpbmcgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgaW50LCBmbG9hdCwgaW50LSAmIGZsb2F0LWRlcml2ZWQgRW51bXMgfCBudW1iZXIgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgVHJ1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0cnVlICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgRmFsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBmYWxzZSAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgTm9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBudWxsICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIEFkZGVkIHN1cHBvcnQgZm9yIGludC0gYW5kIGZsb2F0LWRlcml2ZWQgRW51bSBjbGFzc2VzLgogCiAgICBUbyBleHRlbmQgdGhpcyB0byByZWNvZ25pemUgb3RoZXIgb2JqZWN0cywgc3ViY2xhc3MgYW5kIGltcGxlbWVudCBhCiAgICA6bWV0aDpgZGVmYXVsdGAgbWV0aG9kIHdpdGggYW5vdGhlciBtZXRob2QgdGhhdCByZXR1cm5zIGEgc2VyaWFsaXphYmxlIG9iamVjdApAQCAtNDEwLDE1ICs0MTYsMTMgQEAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCiAgICAgICBBbGxvdyBzdHJpbmdzIGZvciAqaW5kZW50KiBpbiBhZGRpdGlvbiB0byBpbnRlZ2Vycy4KIAotICAgLi4gbm90ZTo6Ci0KLSAgICAgIFNpbmNlIHRoZSBkZWZhdWx0IGl0ZW0gc2VwYXJhdG9yIGlzIGBgJywgJ2BgLCAgdGhlIG91dHB1dCBtaWdodCBpbmNsdWRlCi0gICAgICB0cmFpbGluZyB3aGl0ZXNwYWNlIHdoZW4gKmluZGVudCogaXMgc3BlY2lmaWVkLiAgWW91IGNhbiB1c2UKLSAgICAgIGBgc2VwYXJhdG9ycz0oJywnLCAnOiAnKWBgIHRvIGF2b2lkIHRoaXMuCi0KICAgIElmIHNwZWNpZmllZCwgKnNlcGFyYXRvcnMqIHNob3VsZCBiZSBhbiBgYChpdGVtX3NlcGFyYXRvciwga2V5X3NlcGFyYXRvcilgYAotICAgdHVwbGUuICBUaGUgZGVmYXVsdCBpcyBgYCgnLCAnLCAnOiAnKWBgLiAgVG8gZ2V0IHRoZSBtb3N0IGNvbXBhY3QgSlNPTgotICAgcmVwcmVzZW50YXRpb24sIHlvdSBzaG91bGQgc3BlY2lmeSBgYCgnLCcsICc6JylgYCB0byBlbGltaW5hdGUgd2hpdGVzcGFjZS4KKyAgIHR1cGxlLiAgVGhlIGRlZmF1bHQgaXMgYGAoJywgJywgJzogJylgYCBpZiAqaW5kZW50KiBpcyBgYE5vbmVgYCBhbmQKKyAgIGBgKCcsJywgJzogJylgYCBvdGhlcndpc2UuICBUbyBnZXQgdGhlIG1vc3QgY29tcGFjdCBKU09OIHJlcHJlc2VudGF0aW9uLAorICAgeW91IHNob3VsZCBzcGVjaWZ5IGBgKCcsJywgJzonKWBgIHRvIGVsaW1pbmF0ZSB3aGl0ZXNwYWNlLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVXNlIGBgKCcsJywgJzogJylgYCBhcyBkZWZhdWx0IGlmICppbmRlbnQqIGlzIG5vdCBgYE5vbmVgYC4KIAogICAgSWYgc3BlY2lmaWVkLCAqZGVmYXVsdCogaXMgYSBmdW5jdGlvbiB0aGF0IGdldHMgY2FsbGVkIGZvciBvYmplY3RzIHRoYXQgY2FuJ3QKICAgIG90aGVyd2lzZSBiZSBzZXJpYWxpemVkLiAgSXQgc2hvdWxkIHJldHVybiBhIEpTT04gZW5jb2RhYmxlIHZlcnNpb24gb2YgdGhlCkBAIC00NjMsMTggKzQ2NywxOCBAQAogICAgICAgICAgICAgICAgIG15c29ja2V0LndyaXRlKGNodW5rKQogCiAKLVN0YW5kYXJkIENvbXBsaWFuY2UKLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1N0YW5kYXJkIENvbXBsaWFuY2UgYW5kIEludGVyb3BlcmFiaWxpdHkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotVGhlIEpTT04gZm9ybWF0IGlzIHNwZWNpZmllZCBieSA6cmZjOmA0NjI3YC4gIFRoaXMgc2VjdGlvbiBkZXRhaWxzIHRoaXMKLW1vZHVsZSdzIGxldmVsIG9mIGNvbXBsaWFuY2Ugd2l0aCB0aGUgUkZDLiAgRm9yIHNpbXBsaWNpdHksCi06Y2xhc3M6YEpTT05FbmNvZGVyYCBhbmQgOmNsYXNzOmBKU09ORGVjb2RlcmAgc3ViY2xhc3NlcywgYW5kIHBhcmFtZXRlcnMgb3RoZXIKLXRoYW4gdGhvc2UgZXhwbGljaXRseSBtZW50aW9uZWQsIGFyZSBub3QgY29uc2lkZXJlZC4KK1RoZSBKU09OIGZvcm1hdCBpcyBzcGVjaWZpZWQgYnkgOnJmYzpgNzE1OWAgYW5kIGJ5CitgRUNNQS00MDQgPGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9wdWJsaWNhdGlvbnMvc3RhbmRhcmRzL0VjbWEtNDA0Lmh0bT5gXy4KK1RoaXMgc2VjdGlvbiBkZXRhaWxzIHRoaXMgbW9kdWxlJ3MgbGV2ZWwgb2YgY29tcGxpYW5jZSB3aXRoIHRoZSBSRkMuCitGb3Igc2ltcGxpY2l0eSwgOmNsYXNzOmBKU09ORW5jb2RlcmAgYW5kIDpjbGFzczpgSlNPTkRlY29kZXJgIHN1YmNsYXNzZXMsIGFuZAorcGFyYW1ldGVycyBvdGhlciB0aGFuIHRob3NlIGV4cGxpY2l0bHkgbWVudGlvbmVkLCBhcmUgbm90IGNvbnNpZGVyZWQuCiAKIFRoaXMgbW9kdWxlIGRvZXMgbm90IGNvbXBseSB3aXRoIHRoZSBSRkMgaW4gYSBzdHJpY3QgZmFzaGlvbiwgaW1wbGVtZW50aW5nIHNvbWUKIGV4dGVuc2lvbnMgdGhhdCBhcmUgdmFsaWQgSmF2YVNjcmlwdCBidXQgbm90IHZhbGlkIEpTT04uICBJbiBwYXJ0aWN1bGFyOgogCi0tIFRvcC1sZXZlbCBub24tb2JqZWN0LCBub24tYXJyYXkgdmFsdWVzIGFyZSBhY2NlcHRlZCBhbmQgb3V0cHV0OwogLSBJbmZpbml0ZSBhbmQgTmFOIG51bWJlciB2YWx1ZXMgYXJlIGFjY2VwdGVkIGFuZCBvdXRwdXQ7CiAtIFJlcGVhdGVkIG5hbWVzIHdpdGhpbiBhbiBvYmplY3QgYXJlIGFjY2VwdGVkLCBhbmQgb25seSB0aGUgdmFsdWUgb2YgdGhlIGxhc3QKICAgbmFtZS12YWx1ZSBwYWlyIGlzIHVzZWQuCkBAIC00ODYsOCArNDkwLDggQEAKIENoYXJhY3RlciBFbmNvZGluZ3MKIF5eXl5eXl5eXl5eXl5eXl5eXl4KIAotVGhlIFJGQyByZWNvbW1lbmRzIHRoYXQgSlNPTiBiZSByZXByZXNlbnRlZCB1c2luZyBlaXRoZXIgVVRGLTgsIFVURi0xNiwgb3IKLVVURi0zMiwgd2l0aCBVVEYtOCBiZWluZyB0aGUgZGVmYXVsdC4KK1RoZSBSRkMgcmVxdWlyZXMgdGhhdCBKU09OIGJlIHJlcHJlc2VudGVkIHVzaW5nIGVpdGhlciBVVEYtOCwgVVRGLTE2LCBvcgorVVRGLTMyLCB3aXRoIFVURi04IGJlaW5nIHRoZSByZWNvbW1lbmRlZCBkZWZhdWx0IGZvciBtYXhpbXVtIGludGVyb3BlcmFiaWxpdHkuCiAKIEFzIHBlcm1pdHRlZCwgdGhvdWdoIG5vdCByZXF1aXJlZCwgYnkgdGhlIFJGQywgdGhpcyBtb2R1bGUncyBzZXJpYWxpemVyIHNldHMKICplbnN1cmVfYXNjaWk9VHJ1ZSogYnkgZGVmYXVsdCwgdGh1cyBlc2NhcGluZyB0aGUgb3V0cHV0IHNvIHRoYXQgdGhlIHJlc3VsdGluZwpAQCAtNDk1LDM0ICs0OTksMjAgQEAKIAogT3RoZXIgdGhhbiB0aGUgKmVuc3VyZV9hc2NpaSogcGFyYW1ldGVyLCB0aGlzIG1vZHVsZSBpcyBkZWZpbmVkIHN0cmljdGx5IGluCiB0ZXJtcyBvZiBjb252ZXJzaW9uIGJldHdlZW4gUHl0aG9uIG9iamVjdHMgYW5kCi06Y2xhc3M6YFVuaWNvZGUgc3RyaW5ncyA8c3RyPmAsIGFuZCB0aHVzIGRvZXMgbm90IG90aGVyd2lzZSBhZGRyZXNzIHRoZSBpc3N1ZQotb2YgY2hhcmFjdGVyIGVuY29kaW5ncy4KKzpjbGFzczpgVW5pY29kZSBzdHJpbmdzIDxzdHI+YCwgYW5kIHRodXMgZG9lcyBub3Qgb3RoZXJ3aXNlIGRpcmVjdGx5IGFkZHJlc3MKK3RoZSBpc3N1ZSBvZiBjaGFyYWN0ZXIgZW5jb2RpbmdzLgogCitUaGUgUkZDIHByb2hpYml0cyBhZGRpbmcgYSBieXRlIG9yZGVyIG1hcmsgKEJPTSkgdG8gdGhlIHN0YXJ0IG9mIGEgSlNPTiB0ZXh0LAorYW5kIHRoaXMgbW9kdWxlJ3Mgc2VyaWFsaXplciBkb2VzIG5vdCBhZGQgYSBCT00gdG8gaXRzIG91dHB1dC4KK1RoZSBSRkMgcGVybWl0cywgYnV0IGRvZXMgbm90IHJlcXVpcmUsIEpTT04gZGVzZXJpYWxpemVycyB0byBpZ25vcmUgYW4gaW5pdGlhbAorQk9NIGluIHRoZWlyIGlucHV0LiAgVGhpcyBtb2R1bGUncyBkZXNlcmlhbGl6ZXIgcmFpc2VzIGEgOmV4YzpgVmFsdWVFcnJvcmAKK3doZW4gYW4gaW5pdGlhbCBCT00gaXMgcHJlc2VudC4KIAotVG9wLWxldmVsIE5vbi1PYmplY3QsIE5vbi1BcnJheSBWYWx1ZXMKLV5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCi0KLVRoZSBSRkMgc3BlY2lmaWVzIHRoYXQgdGhlIHRvcC1sZXZlbCB2YWx1ZSBvZiBhIEpTT04gdGV4dCBtdXN0IGJlIGVpdGhlciBhCi1KU09OIG9iamVjdCBvciBhcnJheSAoUHl0aG9uIDpjbGFzczpgZGljdGAgb3IgOmNsYXNzOmBsaXN0YCkuICBUaGlzIG1vZHVsZSdzCi1kZXNlcmlhbGl6ZXIgYWxzbyBhY2NlcHRzIGlucHV0IHRleHRzIGNvbnNpc3Rpbmcgc29sZWx5IG9mIGEKLUpTT04gbnVsbCwgYm9vbGVhbiwgbnVtYmVyLCBvciBzdHJpbmcgdmFsdWU6OgotCi0gICA+Pj4ganVzdF9hX2pzb25fc3RyaW5nID0gJyJzcGFtIGFuZCBlZ2dzIicgICMgTm90IGJ5IGl0c2VsZiBhIHZhbGlkIEpTT04gdGV4dAotICAgPj4+IGpzb24ubG9hZHMoanVzdF9hX2pzb25fc3RyaW5nKQotICAgJ3NwYW0gYW5kIGVnZ3MnCi0KLVRoaXMgbW9kdWxlIGl0c2VsZiBkb2VzIG5vdCBpbmNsdWRlIGEgd2F5IHRvIHJlcXVlc3QgdGhhdCBzdWNoIGlucHV0IHRleHRzIGJlCi1yZWdhcmRlZCBhcyBpbGxlZ2FsLiAgTGlrZXdpc2UsIHRoaXMgbW9kdWxlJ3Mgc2VyaWFsaXplciBhbHNvIGFjY2VwdHMgc2luZ2xlCi1QeXRob24gOmRhdGE6YE5vbmVgLCA6Y2xhc3M6YGJvb2xgLCBudW1lcmljLCBhbmQgOmNsYXNzOmBzdHJgCi12YWx1ZXMgYXMgaW5wdXQgYW5kIHdpbGwgZ2VuZXJhdGUgb3V0cHV0IHRleHRzIGNvbnNpc3Rpbmcgc29sZWx5IG9mIGEgdG9wLWxldmVsCi1KU09OIG51bGwsIGJvb2xlYW4sIG51bWJlciwgb3Igc3RyaW5nIHZhbHVlIHdpdGhvdXQgcmFpc2luZyBhbiBleGNlcHRpb246OgotCi0gICA+Pj4gbmVpdGhlcl9hX2xpc3Rfbm9yX2FfZGljdCA9ICJzcGFtIGFuZCBlZ2dzIgotICAgPj4+IGpzb24uZHVtcHMobmVpdGhlcl9hX2xpc3Rfbm9yX2FfZGljdCkgICMgVGhlIHJlc3VsdCBpcyBub3QgYSB2YWxpZCBKU09OIHRleHQKLSAgICcic3BhbSBhbmQgZWdncyInCi0KLVRoaXMgbW9kdWxlJ3Mgc2VyaWFsaXplciBkb2VzIG5vdCBpdHNlbGYgaW5jbHVkZSBhIHdheSB0byBlbmZvcmNlIHRoZQotYWZvcmVtZW50aW9uZWQgY29uc3RyYWludC4KK1RoZSBSRkMgZG9lcyBub3QgZXhwbGljaXRseSBmb3JiaWQgSlNPTiBzdHJpbmdzIHdoaWNoIGNvbnRhaW4gYnl0ZSBzZXF1ZW5jZXMKK3RoYXQgZG9uJ3QgY29ycmVzcG9uZCB0byB2YWxpZCBVbmljb2RlIGNoYXJhY3RlcnMgKGUuZy4gdW5wYWlyZWQgVVRGLTE2CitzdXJyb2dhdGVzKSwgYnV0IGl0IGRvZXMgbm90ZSB0aGF0IHRoZXkgbWF5IGNhdXNlIGludGVyb3BlcmFiaWxpdHkgcHJvYmxlbXMuCitCeSBkZWZhdWx0LCB0aGlzIG1vZHVsZSBhY2NlcHRzIGFuZCBvdXRwdXRzICh3aGVuIHByZXNlbnQgaW4gdGhlIG9yaWdpbmFsCis6Y2xhc3M6YHN0cmApIGNvZGUgcG9pbnRzIGZvciBzdWNoIHNlcXVlbmNlcy4KIAogCiBJbmZpbml0ZSBhbmQgTmFOIE51bWJlciBWYWx1ZXMKQEAgLTU1Miw3ICs1NDIsNyBAQAogXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgogCiBUaGUgUkZDIHNwZWNpZmllcyB0aGF0IHRoZSBuYW1lcyB3aXRoaW4gYSBKU09OIG9iamVjdCBzaG91bGQgYmUgdW5pcXVlLCBidXQKLWRvZXMgbm90IHNwZWNpZnkgaG93IHJlcGVhdGVkIG5hbWVzIGluIEpTT04gb2JqZWN0cyBzaG91bGQgYmUgaGFuZGxlZC4gIEJ5Citkb2VzIG5vdCBtYW5kYXRlIGhvdyByZXBlYXRlZCBuYW1lcyBpbiBKU09OIG9iamVjdHMgc2hvdWxkIGJlIGhhbmRsZWQuICBCeQogZGVmYXVsdCwgdGhpcyBtb2R1bGUgZG9lcyBub3QgcmFpc2UgYW4gZXhjZXB0aW9uOyBpbnN0ZWFkLCBpdCBpZ25vcmVzIGFsbCBidXQKIHRoZSBsYXN0IG5hbWUtdmFsdWUgcGFpciBmb3IgYSBnaXZlbiBuYW1lOjoKIApAQCAtNTYxLDMgKzU1MSw0OCBAQAogICAgeyd4JzogM30KIAogVGhlICpvYmplY3RfcGFpcnNfaG9vayogcGFyYW1ldGVyIGNhbiBiZSB1c2VkIHRvIGFsdGVyIHRoaXMgYmVoYXZpb3IuCisKKworVG9wLWxldmVsIE5vbi1PYmplY3QsIE5vbi1BcnJheSBWYWx1ZXMKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKK1RoZSBvbGQgdmVyc2lvbiBvZiBKU09OIHNwZWNpZmllZCBieSB0aGUgb2Jzb2xldGUgOnJmYzpgNDYyN2AgcmVxdWlyZWQgdGhhdAordGhlIHRvcC1sZXZlbCB2YWx1ZSBvZiBhIEpTT04gdGV4dCBtdXN0IGJlIGVpdGhlciBhIEpTT04gb2JqZWN0IG9yIGFycmF5CisoUHl0aG9uIDpjbGFzczpgZGljdGAgb3IgOmNsYXNzOmBsaXN0YCksIGFuZCBjb3VsZCBub3QgYmUgYSBKU09OIG51bGwsCitib29sZWFuLCBudW1iZXIsIG9yIHN0cmluZyB2YWx1ZS4gIDpyZmM6YDcxNTlgIHJlbW92ZWQgdGhhdCByZXN0cmljdGlvbiwgYW5kCit0aGlzIG1vZHVsZSBkb2VzIG5vdCBhbmQgaGFzIG5ldmVyIGltcGxlbWVudGVkIHRoYXQgcmVzdHJpY3Rpb24gaW4gZWl0aGVyIGl0cworc2VyaWFsaXplciBvciBpdHMgZGVzZXJpYWxpemVyLgorCitSZWdhcmRsZXNzLCBmb3IgbWF4aW11bSBpbnRlcm9wZXJhYmlsaXR5LCB5b3UgbWF5IHdpc2ggdG8gdm9sdW50YXJpbHkgYWRoZXJlCit0byB0aGUgcmVzdHJpY3Rpb24geW91cnNlbGYuCisKKworSW1wbGVtZW50YXRpb24gTGltaXRhdGlvbnMKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKK1NvbWUgSlNPTiBkZXNlcmlhbGl6ZXIgaW1wbGVtZW50YXRpb25zIG1heSBzZXQgbGltaXRzIG9uOgorCisqIHRoZSBzaXplIG9mIGFjY2VwdGVkIEpTT04gdGV4dHMKKyogdGhlIG1heGltdW0gbGV2ZWwgb2YgbmVzdGluZyBvZiBKU09OIG9iamVjdHMgYW5kIGFycmF5cworKiB0aGUgcmFuZ2UgYW5kIHByZWNpc2lvbiBvZiBKU09OIG51bWJlcnMKKyogdGhlIGNvbnRlbnQgYW5kIG1heGltdW0gbGVuZ3RoIG9mIEpTT04gc3RyaW5ncworCitUaGlzIG1vZHVsZSBkb2VzIG5vdCBpbXBvc2UgYW55IHN1Y2ggbGltaXRzIGJleW9uZCB0aG9zZSBvZiB0aGUgcmVsZXZhbnQKK1B5dGhvbiBkYXRhdHlwZXMgdGhlbXNlbHZlcyBvciB0aGUgUHl0aG9uIGludGVycHJldGVyIGl0c2VsZi4KKworV2hlbiBzZXJpYWxpemluZyB0byBKU09OLCBiZXdhcmUgYW55IHN1Y2ggbGltaXRhdGlvbnMgaW4gYXBwbGljYXRpb25zIHRoYXQgbWF5Citjb25zdW1lIHlvdXIgSlNPTi4gIEluIHBhcnRpY3VsYXIsIGl0IGlzIGNvbW1vbiBmb3IgSlNPTiBudW1iZXJzIHRvIGJlCitkZXNlcmlhbGl6ZWQgaW50byBJRUVFIDc1NCBkb3VibGUgcHJlY2lzaW9uIG51bWJlcnMgYW5kIHRodXMgc3ViamVjdCB0byB0aGF0CityZXByZXNlbnRhdGlvbidzIHJhbmdlIGFuZCBwcmVjaXNpb24gbGltaXRhdGlvbnMuICBUaGlzIGlzIGVzcGVjaWFsbHkgcmVsZXZhbnQKK3doZW4gc2VyaWFsaXppbmcgUHl0aG9uIDpjbGFzczpgaW50YCB2YWx1ZXMgb2YgZXh0cmVtZWx5IGxhcmdlIG1hZ25pdHVkZSwgb3IKK3doZW4gc2VyaWFsaXppbmcgaW5zdGFuY2VzIG9mICJleG90aWMiIG51bWVyaWNhbCB0eXBlcyBzdWNoIGFzCis6Y2xhc3M6YGRlY2ltYWwuRGVjaW1hbGAuCisKKworLi4gcnVicmljOjogRm9vdG5vdGVzCisKKy4uIFsjcmZjLWVycmF0YV0gQXMgbm90ZWQgaW4gYHRoZSBlcnJhdGEgZm9yIFJGQyA3MTU5CisgICA8aHR0cDovL3d3dy5yZmMtZWRpdG9yLm9yZy9lcnJhdGFfc2VhcmNoLnBocD9yZmM9NzE1OT5gXywKKyAgIEpTT04gcGVybWl0cyBsaXRlcmFsIFUrMjAyOCAoTElORSBTRVBBUkFUT1IpIGFuZAorICAgVSsyMDI5IChQQVJBR1JBUEggU0VQQVJBVE9SKSBjaGFyYWN0ZXJzIGluIHN0cmluZ3MsIHdoZXJlYXMgSmF2YVNjcmlwdAorICAgKGFzIG9mIEVDTUFTY3JpcHQgRWRpdGlvbiA1LjEpIGRvZXMgbm90LgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvbGluZWNhY2hlLnJzdCBiL0RvYy9saWJyYXJ5L2xpbmVjYWNoZS5yc3QKaW5kZXggZGFjZjhhYS4uZjE4YjFjZCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvbGluZWNhY2hlLnJzdAorKysgYi9Eb2MvbGlicmFyeS9saW5lY2FjaGUucnN0CkBAIC05LDExICs5LDE1IEBACiAKIC0tLS0tLS0tLS0tLS0tCiAKLVRoZSA6bW9kOmBsaW5lY2FjaGVgIG1vZHVsZSBhbGxvd3Mgb25lIHRvIGdldCBhbnkgbGluZSBmcm9tIGFueSBmaWxlLCB3aGlsZQorVGhlIDptb2Q6YGxpbmVjYWNoZWAgbW9kdWxlIGFsbG93cyBvbmUgdG8gZ2V0IGFueSBsaW5lIGZyb20gYSBQeXRob24gc291cmNlIGZpbGUsIHdoaWxlCiBhdHRlbXB0aW5nIHRvIG9wdGltaXplIGludGVybmFsbHksIHVzaW5nIGEgY2FjaGUsIHRoZSBjb21tb24gY2FzZSB3aGVyZSBtYW55CiBsaW5lcyBhcmUgcmVhZCBmcm9tIGEgc2luZ2xlIGZpbGUuICBUaGlzIGlzIHVzZWQgYnkgdGhlIDptb2Q6YHRyYWNlYmFja2AgbW9kdWxlCiB0byByZXRyaWV2ZSBzb3VyY2UgbGluZXMgZm9yIGluY2x1c2lvbiBpbiAgdGhlIGZvcm1hdHRlZCB0cmFjZWJhY2suCiAKK1RoZSA6ZnVuYzpgdG9rZW5pemUub3BlbmAgZnVuY3Rpb24gaXMgdXNlZCB0byBvcGVuIGZpbGVzLiBUaGlzCitmdW5jdGlvbiB1c2VzIDpmdW5jOmB0b2tlbml6ZS5kZXRlY3RfZW5jb2RpbmdgIHRvIGdldCB0aGUgZW5jb2Rpbmcgb2YgdGhlCitmaWxlOyBpbiB0aGUgYWJzZW5jZSBvZiBhbiBlbmNvZGluZyB0b2tlbiwgdGhlIGZpbGUgZW5jb2RpbmcgZGVmYXVsdHMgdG8gVVRGLTguCisKIFRoZSA6bW9kOmBsaW5lY2FjaGVgIG1vZHVsZSBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOgogCiAKQEAgLTQ3LDYgKzUxLDUgQEAKIEV4YW1wbGU6OgogCiAgICA+Pj4gaW1wb3J0IGxpbmVjYWNoZQotICAgPj4+IGxpbmVjYWNoZS5nZXRsaW5lKCcvZXRjL3Bhc3N3ZCcsIDQpCi0gICAnc3lzOng6MzozOnN5czovZGV2Oi9iaW4vc2hcbicKLQorICAgPj4+IGxpbmVjYWNoZS5nZXRsaW5lKGxpbmVjYWNoZS5fX2ZpbGVfXywgOCkKKyAgICdpbXBvcnQgc3lzXG4nCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9sb2NhbGUucnN0IGIvRG9jL2xpYnJhcnkvbG9jYWxlLnJzdAppbmRleCA5NjAwMTkzLi5iMTRjNTUxYiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvbG9jYWxlLnJzdAorKysgYi9Eb2MvbGlicmFyeS9sb2NhbGUucnN0CkBAIC0yMDQsNyArMjA0LDcgQEAKIAogICAgLi4gZGF0YTo6IFJBRElYQ0hBUgogCi0gICAgICBHZXQgdGhlIHJhZGl4IGNoYXJhY3RlciAoZGVjaW1hbCBkb3QsIGRlY2ltYWwgY29tbWEsIGV0Yy4pCisgICAgICBHZXQgdGhlIHJhZGl4IGNoYXJhY3RlciAoZGVjaW1hbCBkb3QsIGRlY2ltYWwgY29tbWEsIGV0Yy4pLgogCiAgICAuLiBkYXRhOjogVEhPVVNFUAogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9sb2dnaW5nLmNvbmZpZy5yc3QgYi9Eb2MvbGlicmFyeS9sb2dnaW5nLmNvbmZpZy5yc3QKaW5kZXggMzAzYjRkOC4uZmQ2YTQ3NyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvbG9nZ2luZy5jb25maWcucnN0CisrKyBiL0RvYy9saWJyYXJ5L2xvZ2dpbmcuY29uZmlnLnJzdApAQCAtODAsMjcgKzgwLDQ5IEBACiAKIC4uIGZ1bmN0aW9uOjogZmlsZUNvbmZpZyhmbmFtZSwgZGVmYXVsdHM9Tm9uZSwgZGlzYWJsZV9leGlzdGluZ19sb2dnZXJzPVRydWUpCiAKLSAgIFJlYWRzIHRoZSBsb2dnaW5nIGNvbmZpZ3VyYXRpb24gZnJvbSBhIDptb2Q6YGNvbmZpZ3BhcnNlcmBcLWZvcm1hdCBmaWxlCi0gICBuYW1lZCAqZm5hbWUqLiBUaGUgZm9ybWF0IG9mIHRoZSBmaWxlIHNob3VsZCBiZSBhcyBkZXNjcmliZWQgaW4KLSAgIDpyZWY6YGxvZ2dpbmctY29uZmlnLWZpbGVmb3JtYXRgLiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgc2V2ZXJhbCB0aW1lcwotICAgZnJvbSBhbiBhcHBsaWNhdGlvbiwgYWxsb3dpbmcgYW4gZW5kIHVzZXIgdG8gc2VsZWN0IGZyb20gdmFyaW91cyBwcmUtY2FubmVkCi0gICBjb25maWd1cmF0aW9ucyAoaWYgdGhlIGRldmVsb3BlciBwcm92aWRlcyBhIG1lY2hhbmlzbSB0byBwcmVzZW50IHRoZSBjaG9pY2VzCi0gICBhbmQgbG9hZCB0aGUgY2hvc2VuIGNvbmZpZ3VyYXRpb24pLgorICAgUmVhZHMgdGhlIGxvZ2dpbmcgY29uZmlndXJhdGlvbiBmcm9tIGEgOm1vZDpgY29uZmlncGFyc2VyYFwtZm9ybWF0IGZpbGUuIFRoZQorICAgZm9ybWF0IG9mIHRoZSBmaWxlIHNob3VsZCBiZSBhcyBkZXNjcmliZWQgaW4KKyAgIDpyZWY6YGxvZ2dpbmctY29uZmlnLWZpbGVmb3JtYXRgLgorICAgVGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIHNldmVyYWwgdGltZXMgZnJvbSBhbiBhcHBsaWNhdGlvbiwgYWxsb3dpbmcgYW4KKyAgIGVuZCB1c2VyIHRvIHNlbGVjdCBmcm9tIHZhcmlvdXMgcHJlLWNhbm5lZCBjb25maWd1cmF0aW9ucyAoaWYgdGhlIGRldmVsb3BlcgorICAgcHJvdmlkZXMgYSBtZWNoYW5pc20gdG8gcHJlc2VudCB0aGUgY2hvaWNlcyBhbmQgbG9hZCB0aGUgY2hvc2VuCisgICBjb25maWd1cmF0aW9uKS4KKworICAgOnBhcmFtIGZuYW1lOiBBIGZpbGVuYW1lLCBvciBhIGZpbGUtbGlrZSBvYmplY3QsIG9yIGFuIGluc3RhbmNlIGRlcml2ZWQKKyAgICAgICAgICAgICAgICAgZnJvbSA6Y2xhc3M6YH5jb25maWdwYXJzZXIuUmF3Q29uZmlnUGFyc2VyYC4gSWYgYQorICAgICAgICAgICAgICAgICBgYFJhd0NvbmZpZ1BhcnNlcmBgLWRlcml2ZWQgaW5zdGFuY2UgaXMgcGFzc2VkLCBpdCBpcyB1c2VkIGFzCisgICAgICAgICAgICAgICAgIGlzLiBPdGhlcndpc2UsIGEgOmNsYXNzOmB+Y29uZmlncGFyc2VyLkNvbmZpZ3BhcnNlcmAgaXMKKyAgICAgICAgICAgICAgICAgaW5zdGFudGlhdGVkLCBhbmQgdGhlIGNvbmZpZ3VyYXRpb24gcmVhZCBieSBpdCBmcm9tIHRoZQorICAgICAgICAgICAgICAgICBvYmplY3QgcGFzc2VkIGluIGBgZm5hbWVgYC4gSWYgdGhhdCBoYXMgYSA6bWV0aDpgcmVhZGxpbmVgCisgICAgICAgICAgICAgICAgIG1ldGhvZCwgaXQgaXMgYXNzdW1lZCB0byBiZSBhIGZpbGUtbGlrZSBvYmplY3QgYW5kIHJlYWQgdXNpbmcKKyAgICAgICAgICAgICAgICAgOm1ldGg6YH5jb25maWdwYXJzZXIuQ29uZmlnUGFyc2VyLnJlYWRfZmlsZWA7IG90aGVyd2lzZSwKKyAgICAgICAgICAgICAgICAgaXQgaXMgYXNzdW1lZCB0byBiZSBhIGZpbGVuYW1lIGFuZCBwYXNzZWQgdG8KKyAgICAgICAgICAgICAgICAgOm1ldGg6YH5jb25maWdwYXJzZXIuQ29uZmlnUGFyc2VyLnJlYWRgLgorCiAKICAgIDpwYXJhbSBkZWZhdWx0czogRGVmYXVsdHMgdG8gYmUgcGFzc2VkIHRvIHRoZSBDb25maWdQYXJzZXIgY2FuIGJlIHNwZWNpZmllZAogICAgICAgICAgICAgICAgICAgICBpbiB0aGlzIGFyZ3VtZW50LgogCiAgICA6cGFyYW0gZGlzYWJsZV9leGlzdGluZ19sb2dnZXJzOiBJZiBzcGVjaWZpZWQgYXMgYGBGYWxzZWBgLCBsb2dnZXJzIHdoaWNoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGlzdCB3aGVuIHRoaXMgY2FsbCBpcyBtYWRlIGFyZSBsZWZ0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbG9uZS4gVGhlIGRlZmF1bHQgaXMgYGBUcnVlYGAgYmVjYXVzZSB0aGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVkLiBUaGUgZGVmYXVsdCBpcyBgYFRydWVgYCBiZWNhdXNlIHRoaXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZXMgb2xkIGJlaGF2aW91ciBpbiBhIGJhY2t3YXJkLQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGF0aWJsZSB3YXkuIFRoaXMgYmVoYXZpb3VyIGlzIHRvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlIGFueSBleGlzdGluZyBsb2dnZXJzIHVubGVzcyB0aGV5IG9yCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVpciBhbmNlc3RvcnMgYXJlIGV4cGxpY2l0bHkgbmFtZWQgaW4gdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dnaW5nIGNvbmZpZ3VyYXRpb24uCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBBbiBpbnN0YW5jZSBvZiBhIHN1YmNsYXNzIG9mIDpjbGFzczpgfmNvbmZpZ3BhcnNlci5SYXdDb25maWdQYXJzZXJgIGlzCisgICAgICBub3cgYWNjZXB0ZWQgYXMgYSB2YWx1ZSBmb3IgYGBmbmFtZWBgLiBUaGlzIGZhY2lsaXRhdGVzOgogCi0uLiBmdW5jdGlvbjo6IGxpc3Rlbihwb3J0PURFRkFVTFRfTE9HR0lOR19DT05GSUdfUE9SVCkKKyAgICAgICogVXNlIG9mIGEgY29uZmlndXJhdGlvbiBmaWxlIHdoZXJlIGxvZ2dpbmcgY29uZmlndXJhdGlvbiBpcyBqdXN0IHBhcnQKKyAgICAgICAgb2YgdGhlIG92ZXJhbGwgYXBwbGljYXRpb24gY29uZmlndXJhdGlvbi4KKyAgICAgICogVXNlIG9mIGEgY29uZmlndXJhdGlvbiByZWFkIGZyb20gYSBmaWxlLCBhbmQgdGhlbiBtb2RpZmllZCBieSB0aGUgdXNpbmcKKyAgICAgICAgYXBwbGljYXRpb24gKGUuZy4gYmFzZWQgb24gY29tbWFuZC1saW5lIHBhcmFtZXRlcnMgb3Igb3RoZXIgYXNwZWN0cworICAgICAgICBvZiB0aGUgcnVudGltZSBlbnZpcm9ubWVudCkgYmVmb3JlIGJlaW5nIHBhc3NlZCB0byBgYGZpbGVDb25maWdgYC4KKworLi4gZnVuY3Rpb246OiBsaXN0ZW4ocG9ydD1ERUZBVUxUX0xPR0dJTkdfQ09ORklHX1BPUlQsIHZlcmlmeT1Ob25lKQogCiAgICBTdGFydHMgdXAgYSBzb2NrZXQgc2VydmVyIG9uIHRoZSBzcGVjaWZpZWQgcG9ydCwgYW5kIGxpc3RlbnMgZm9yIG5ldwogICAgY29uZmlndXJhdGlvbnMuIElmIG5vIHBvcnQgaXMgc3BlY2lmaWVkLCB0aGUgbW9kdWxlJ3MgZGVmYXVsdApAQCAtMTExLDYgKzEzMywxNyBAQAogICAgOm1ldGg6YH50aHJlYWRpbmcuVGhyZWFkLmpvaW5gIHdoZW4gYXBwcm9wcmlhdGUuIFRvIHN0b3AgdGhlIHNlcnZlciwKICAgIGNhbGwgOmZ1bmM6YHN0b3BMaXN0ZW5pbmdgLgogCisgICBUaGUgYGB2ZXJpZnlgYCBhcmd1bWVudCwgaWYgc3BlY2lmaWVkLCBzaG91bGQgYmUgYSBjYWxsYWJsZSB3aGljaCBzaG91bGQKKyAgIHZlcmlmeSB3aGV0aGVyIGJ5dGVzIHJlY2VpdmVkIGFjcm9zcyB0aGUgc29ja2V0IGFyZSB2YWxpZCBhbmQgc2hvdWxkIGJlCisgICBwcm9jZXNzZWQuIFRoaXMgY291bGQgYmUgZG9uZSBieSBlbmNyeXB0aW5nIGFuZC9vciBzaWduaW5nIHdoYXQgaXMgc2VudAorICAgYWNyb3NzIHRoZSBzb2NrZXQsIHN1Y2ggdGhhdCB0aGUgYGB2ZXJpZnlgYCBjYWxsYWJsZSBjYW4gcGVyZm9ybQorICAgc2lnbmF0dXJlIHZlcmlmaWNhdGlvbiBhbmQvb3IgZGVjcnlwdGlvbi4gVGhlIGBgdmVyaWZ5YGAgY2FsbGFibGUgaXMgY2FsbGVkCisgICB3aXRoIGEgc2luZ2xlIGFyZ3VtZW50IC0gdGhlIGJ5dGVzIHJlY2VpdmVkIGFjcm9zcyB0aGUgc29ja2V0IC0gYW5kIHNob3VsZAorICAgcmV0dXJuIHRoZSBieXRlcyB0byBiZSBwcm9jZXNzZWQsIG9yIE5vbmUgdG8gaW5kaWNhdGUgdGhhdCB0aGUgYnl0ZXMgc2hvdWxkCisgICBiZSBkaXNjYXJkZWQuIFRoZSByZXR1cm5lZCBieXRlcyBjb3VsZCBiZSB0aGUgc2FtZSBhcyB0aGUgcGFzc2VkIGluIGJ5dGVzCisgICAoZS5nLiB3aGVuIG9ubHkgdmVyaWZpY2F0aW9uIGlzIGRvbmUpLCBvciB0aGV5IGNvdWxkIGJlIGNvbXBsZXRlbHkgZGlmZmVyZW50CisgICAocGVyaGFwcyBpZiBkZWNyeXB0aW9uIHdlcmUgcGVyZm9ybWVkKS4KKwogICAgVG8gc2VuZCBhIGNvbmZpZ3VyYXRpb24gdG8gdGhlIHNvY2tldCwgcmVhZCBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlIGFuZAogICAgc2VuZCBpdCB0byB0aGUgc29ja2V0IGFzIGEgc3RyaW5nIG9mIGJ5dGVzIHByZWNlZGVkIGJ5IGEgZm91ci1ieXRlIGxlbmd0aAogICAgc3RyaW5nIHBhY2tlZCBpbiBiaW5hcnkgdXNpbmcgYGBzdHJ1Y3QucGFjaygnPkwnLCBuKWBgLgpAQCAtMTI5LDcgKzE2MiwxMiBAQAogICAgICAgOmZ1bmM6YGxpc3RlbmAgc29ja2V0IGFuZCBzZW5kaW5nIGEgY29uZmlndXJhdGlvbiB3aGljaCBydW5zIHdoYXRldmVyCiAgICAgICBjb2RlIHRoZSBhdHRhY2tlciB3YW50cyB0byBoYXZlIGV4ZWN1dGVkIGluIHRoZSB2aWN0aW0ncyBwcm9jZXNzLiBUaGlzIGlzCiAgICAgICBlc3BlY2lhbGx5IGVhc3kgdG8gZG8gaWYgdGhlIGRlZmF1bHQgcG9ydCBpcyB1c2VkLCBidXQgbm90IGhhcmQgZXZlbiBpZiBhCi0gICAgICBkaWZmZXJlbnQgcG9ydCBpcyB1c2VkKS4KKyAgICAgIGRpZmZlcmVudCBwb3J0IGlzIHVzZWQpLiBUbyBhdm9pZCB0aGUgcmlzayBvZiB0aGlzIGhhcHBlbmluZywgdXNlIHRoZQorICAgICAgYGB2ZXJpZnlgYCBhcmd1bWVudCB0byA6ZnVuYzpgbGlzdGVuYCB0byBwcmV2ZW50IHVucmVjb2duaXNlZAorICAgICAgY29uZmlndXJhdGlvbnMgZnJvbSBiZWluZyBhcHBsaWVkLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNC4KKyAgICAgIFRoZSBgYHZlcmlmeWBgIGFyZ3VtZW50IHdhcyBhZGRlZC4KIAogLi4gZnVuY3Rpb246OiBzdG9wTGlzdGVuaW5nKCkKIApAQCAtNTc3LDYgKzYxNSwxOCBAQAogc3BlY2lmaWVkIGluIGEgc2VjdGlvbiBjYWxsZWQgYGBbZm9ybWF0dGVyX2Zvcm0wMV1gYC4gVGhlIHJvb3QgbG9nZ2VyCiBjb25maWd1cmF0aW9uIG11c3QgYmUgc3BlY2lmaWVkIGluIGEgc2VjdGlvbiBjYWxsZWQgYGBbbG9nZ2VyX3Jvb3RdYGAuCiAKKy4uIG5vdGU6OgorCisgICBUaGUgOmZ1bmM6YGZpbGVDb25maWdgIEFQSSBpcyBvbGRlciB0aGFuIHRoZSA6ZnVuYzpgZGljdENvbmZpZ2AgQVBJIGFuZCBkb2VzCisgICBub3QgcHJvdmlkZSBmdW5jdGlvbmFsaXR5IHRvIGNvdmVyIGNlcnRhaW4gYXNwZWN0cyBvZiBsb2dnaW5nLiBGb3IgZXhhbXBsZSwKKyAgIHlvdSBjYW5ub3QgY29uZmlndXJlIDpjbGFzczpgfmxvZ2dpbmcuRmlsdGVyYCBvYmplY3RzLCB3aGljaCBwcm92aWRlIGZvcgorICAgZmlsdGVyaW5nIG9mIG1lc3NhZ2VzIGJleW9uZCBzaW1wbGUgaW50ZWdlciBsZXZlbHMsIHVzaW5nIDpmdW5jOmBmaWxlQ29uZmlnYC4KKyAgIElmIHlvdSBuZWVkIHRvIGhhdmUgaW5zdGFuY2VzIG9mIDpjbGFzczpgfmxvZ2dpbmcuRmlsdGVyYCBpbiB5b3VyIGxvZ2dpbmcKKyAgIGNvbmZpZ3VyYXRpb24sIHlvdSB3aWxsIG5lZWQgdG8gdXNlIDpmdW5jOmBkaWN0Q29uZmlnYC4gTm90ZSB0aGF0IGZ1dHVyZQorICAgZW5oYW5jZW1lbnRzIHRvIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb25hbGl0eSB3aWxsIGJlIGFkZGVkIHRvCisgICA6ZnVuYzpgZGljdENvbmZpZ2AsIHNvIGl0J3Mgd29ydGggY29uc2lkZXJpbmcgdHJhbnNpdGlvbmluZyB0byB0aGlzIG5ld2VyCisgICBBUEkgd2hlbiBpdCdzIGNvbnZlbmllbnQgdG8gZG8gc28uCisKIEV4YW1wbGVzIG9mIHRoZXNlIHNlY3Rpb25zIGluIHRoZSBmaWxlIGFyZSBnaXZlbiBiZWxvdy4gOjoKIAogICAgW2xvZ2dlcnNdCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLnJzdCBiL0RvYy9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMucnN0CmluZGV4IDQxNWUzOTcuLjllNTU4ZTUgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMucnN0CisrKyBiL0RvYy9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMucnN0CkBAIC0yMzAsNyArMjMwLDcgQEAKICAgICAgIHJlbmFtZWQgdG8gdGhlIGRlc3RpbmF0aW9uLgogCiAgICAgICA6cGFyYW0gc291cmNlOiBUaGUgc291cmNlIGZpbGVuYW1lLiBUaGlzIGlzIG5vcm1hbGx5IHRoZSBiYXNlCi0gICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSwgZS5nLiAndGVzdC5sb2cnCisgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSwgZS5nLiAndGVzdC5sb2cnLgogICAgICAgOnBhcmFtIGRlc3Q6ICAgVGhlIGRlc3RpbmF0aW9uIGZpbGVuYW1lLiBUaGlzIGlzIG5vcm1hbGx5CiAgICAgICAgICAgICAgICAgICAgICB3aGF0IHRoZSBzb3VyY2UgaXMgcm90YXRlZCB0bywgZS5nLiAndGVzdC5sb2cuMScuCiAKQEAgLTI2OSwxNSArMjY5LDE2IEBACiAgICBZb3UgY2FuIHVzZSB0aGUgKm1heEJ5dGVzKiBhbmQgKmJhY2t1cENvdW50KiB2YWx1ZXMgdG8gYWxsb3cgdGhlIGZpbGUgdG8KICAgIDpkZm46YHJvbGxvdmVyYCBhdCBhIHByZWRldGVybWluZWQgc2l6ZS4gV2hlbiB0aGUgc2l6ZSBpcyBhYm91dCB0byBiZSBleGNlZWRlZCwKICAgIHRoZSBmaWxlIGlzIGNsb3NlZCBhbmQgYSBuZXcgZmlsZSBpcyBzaWxlbnRseSBvcGVuZWQgZm9yIG91dHB1dC4gUm9sbG92ZXIgb2NjdXJzCi0gICB3aGVuZXZlciB0aGUgY3VycmVudCBsb2cgZmlsZSBpcyBuZWFybHkgKm1heEJ5dGVzKiBpbiBsZW5ndGg7IGlmICptYXhCeXRlcyogaXMKLSAgIHplcm8sIHJvbGxvdmVyIG5ldmVyIG9jY3Vycy4gIElmICpiYWNrdXBDb3VudCogaXMgbm9uLXplcm8sIHRoZSBzeXN0ZW0gd2lsbCBzYXZlCi0gICBvbGQgbG9nIGZpbGVzIGJ5IGFwcGVuZGluZyB0aGUgZXh0ZW5zaW9ucyAnLjEnLCAnLjInIGV0Yy4sIHRvIHRoZSBmaWxlbmFtZS4gRm9yCi0gICBleGFtcGxlLCB3aXRoIGEgKmJhY2t1cENvdW50KiBvZiA1IGFuZCBhIGJhc2UgZmlsZSBuYW1lIG9mIDpmaWxlOmBhcHAubG9nYCwgeW91Ci0gICB3b3VsZCBnZXQgOmZpbGU6YGFwcC5sb2dgLCA6ZmlsZTpgYXBwLmxvZy4xYCwgOmZpbGU6YGFwcC5sb2cuMmAsIHVwIHRvCi0gICA6ZmlsZTpgYXBwLmxvZy41YC4gVGhlIGZpbGUgYmVpbmcgd3JpdHRlbiB0byBpcyBhbHdheXMgOmZpbGU6YGFwcC5sb2dgLiAgV2hlbgotICAgdGhpcyBmaWxlIGlzIGZpbGxlZCwgaXQgaXMgY2xvc2VkIGFuZCByZW5hbWVkIHRvIDpmaWxlOmBhcHAubG9nLjFgLCBhbmQgaWYgZmlsZXMKLSAgIDpmaWxlOmBhcHAubG9nLjFgLCA6ZmlsZTpgYXBwLmxvZy4yYCwgZXRjLiAgZXhpc3QsIHRoZW4gdGhleSBhcmUgcmVuYW1lZCB0bwotICAgOmZpbGU6YGFwcC5sb2cuMmAsIDpmaWxlOmBhcHAubG9nLjNgIGV0Yy4gIHJlc3BlY3RpdmVseS4KKyAgIHdoZW5ldmVyIHRoZSBjdXJyZW50IGxvZyBmaWxlIGlzIG5lYXJseSAqbWF4Qnl0ZXMqIGluIGxlbmd0aDsgaWYgZWl0aGVyIG9mCisgICAqbWF4Qnl0ZXMqIG9yICpiYWNrdXBDb3VudCogaXMgemVybywgcm9sbG92ZXIgbmV2ZXIgb2NjdXJzLiAgSWYgKmJhY2t1cENvdW50KgorICAgaXMgbm9uLXplcm8sIHRoZSBzeXN0ZW0gd2lsbCBzYXZlIG9sZCBsb2cgZmlsZXMgYnkgYXBwZW5kaW5nIHRoZSBleHRlbnNpb25zCisgICAnLjEnLCAnLjInIGV0Yy4sIHRvIHRoZSBmaWxlbmFtZS4gRm9yIGV4YW1wbGUsIHdpdGggYSAqYmFja3VwQ291bnQqIG9mIDUgYW5kCisgICBhIGJhc2UgZmlsZSBuYW1lIG9mIDpmaWxlOmBhcHAubG9nYCwgeW91IHdvdWxkIGdldCA6ZmlsZTpgYXBwLmxvZ2AsCisgICA6ZmlsZTpgYXBwLmxvZy4xYCwgOmZpbGU6YGFwcC5sb2cuMmAsIHVwIHRvIDpmaWxlOmBhcHAubG9nLjVgLiBUaGUgZmlsZSBiZWluZworICAgd3JpdHRlbiB0byBpcyBhbHdheXMgOmZpbGU6YGFwcC5sb2dgLiAgV2hlbiB0aGlzIGZpbGUgaXMgZmlsbGVkLCBpdCBpcyBjbG9zZWQKKyAgIGFuZCByZW5hbWVkIHRvIDpmaWxlOmBhcHAubG9nLjFgLCBhbmQgaWYgZmlsZXMgOmZpbGU6YGFwcC5sb2cuMWAsCisgICA6ZmlsZTpgYXBwLmxvZy4yYCwgZXRjLiAgZXhpc3QsIHRoZW4gdGhleSBhcmUgcmVuYW1lZCB0byA6ZmlsZTpgYXBwLmxvZy4yYCwKKyAgIDpmaWxlOmBhcHAubG9nLjNgIGV0Yy4gIHJlc3BlY3RpdmVseS4KIAogCiAgICAuLiBtZXRob2Q6OiBkb1JvbGxvdmVyKCkKQEAgLTMwMCw3ICszMDEsNyBAQAogdGltZWQgaW50ZXJ2YWxzLgogCiAKLS4uIGNsYXNzOjogVGltZWRSb3RhdGluZ0ZpbGVIYW5kbGVyKGZpbGVuYW1lLCB3aGVuPSdoJywgaW50ZXJ2YWw9MSwgYmFja3VwQ291bnQ9MCwgZW5jb2Rpbmc9Tm9uZSwgZGVsYXk9RmFsc2UsIHV0Yz1GYWxzZSkKKy4uIGNsYXNzOjogVGltZWRSb3RhdGluZ0ZpbGVIYW5kbGVyKGZpbGVuYW1lLCB3aGVuPSdoJywgaW50ZXJ2YWw9MSwgYmFja3VwQ291bnQ9MCwgZW5jb2Rpbmc9Tm9uZSwgZGVsYXk9RmFsc2UsIHV0Yz1GYWxzZSwgYXRUaW1lPU5vbmUpCiAKICAgIFJldHVybnMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIDpjbGFzczpgVGltZWRSb3RhdGluZ0ZpbGVIYW5kbGVyYCBjbGFzcy4gVGhlCiAgICBzcGVjaWZpZWQgZmlsZSBpcyBvcGVuZWQgYW5kIHVzZWQgYXMgdGhlIHN0cmVhbSBmb3IgbG9nZ2luZy4gT24gcm90YXRpbmcgaXQgYWxzbwpAQCAtMzUwLDYgKzM1MSwxMiBAQAogICAgSWYgKmRlbGF5KiBpcyB0cnVlLCB0aGVuIGZpbGUgb3BlbmluZyBpcyBkZWZlcnJlZCB1bnRpbCB0aGUgZmlyc3QgY2FsbCB0bwogICAgOm1ldGg6YGVtaXRgLgogCisgICBJZiAqYXRUaW1lKiBpcyBub3QgYGBOb25lYGAsIGl0IG11c3QgYmUgYSBgYGRhdGV0aW1lLnRpbWVgYCBpbnN0YW5jZSB3aGljaAorICAgc3BlY2lmaWVzIHRoZSB0aW1lIG9mIGRheSB3aGVuIHJvbGxvdmVyIG9jY3VycywgZm9yIHRoZSBjYXNlcyB3aGVyZSByb2xsb3ZlcgorICAgaXMgc2V0IHRvIGhhcHBlbiAiYXQgbWlkbmlnaHQiIG9yICJvbiBhIHBhcnRpY3VsYXIgd2Vla2RheSIuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICAqYXRUaW1lKiBwYXJhbWV0ZXIgd2FzIGFkZGVkLgogCiAgICAuLiBtZXRob2Q6OiBkb1JvbGxvdmVyKCkKIApAQCAtMzc1LDYgKzM4Miw5IEBACiAgICBSZXR1cm5zIGEgbmV3IGluc3RhbmNlIG9mIHRoZSA6Y2xhc3M6YFNvY2tldEhhbmRsZXJgIGNsYXNzIGludGVuZGVkIHRvCiAgICBjb21tdW5pY2F0ZSB3aXRoIGEgcmVtb3RlIG1hY2hpbmUgd2hvc2UgYWRkcmVzcyBpcyBnaXZlbiBieSAqaG9zdCogYW5kICpwb3J0Ki4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIElmIGBgcG9ydGBgIGlzIHNwZWNpZmllZCBhcyBgYE5vbmVgYCwgYSBVbml4IGRvbWFpbiBzb2NrZXQgaXMgY3JlYXRlZAorICAgICAgdXNpbmcgdGhlIHZhbHVlIGluIGBgaG9zdGBgIC0gb3RoZXJ3aXNlLCBhIFRDUCBzb2NrZXQgaXMgY3JlYXRlZC4KIAogICAgLi4gbWV0aG9kOjogY2xvc2UoKQogCkBAIC00MjYsNyArNDM2LDcgQEAKICAgIC4uIG1ldGhvZDo6IGNyZWF0ZVNvY2tldCgpCiAKICAgICAgIFRyaWVzIHRvIGNyZWF0ZSBhIHNvY2tldDsgb24gZmFpbHVyZSwgdXNlcyBhbiBleHBvbmVudGlhbCBiYWNrLW9mZgotICAgICAgYWxnb3JpdGhtLiAgT24gaW50aWFsIGZhaWx1cmUsIHRoZSBoYW5kbGVyIHdpbGwgZHJvcCB0aGUgbWVzc2FnZSBpdCB3YXMKKyAgICAgIGFsZ29yaXRobS4gIE9uIGluaXRpYWwgZmFpbHVyZSwgdGhlIGhhbmRsZXIgd2lsbCBkcm9wIHRoZSBtZXNzYWdlIGl0IHdhcwogICAgICAgdHJ5aW5nIHRvIHNlbmQuICBXaGVuIHN1YnNlcXVlbnQgbWVzc2FnZXMgYXJlIGhhbmRsZWQgYnkgdGhlIHNhbWUKICAgICAgIGluc3RhbmNlLCBpdCB3aWxsIG5vdCB0cnkgY29ubmVjdGluZyB1bnRpbCBzb21lIHRpbWUgaGFzIHBhc3NlZC4gIFRoZQogICAgICAgZGVmYXVsdCBwYXJhbWV0ZXJzIGFyZSBzdWNoIHRoYXQgdGhlIGluaXRpYWwgZGVsYXkgaXMgb25lIHNlY29uZCwgYW5kIGlmCkBAIC00NjAsNiArNDcwLDkgQEAKICAgIFJldHVybnMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIDpjbGFzczpgRGF0YWdyYW1IYW5kbGVyYCBjbGFzcyBpbnRlbmRlZCB0bwogICAgY29tbXVuaWNhdGUgd2l0aCBhIHJlbW90ZSBtYWNoaW5lIHdob3NlIGFkZHJlc3MgaXMgZ2l2ZW4gYnkgKmhvc3QqIGFuZCAqcG9ydCouCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBJZiBgYHBvcnRgYCBpcyBzcGVjaWZpZWQgYXMgYGBOb25lYGAsIGEgVW5peCBkb21haW4gc29ja2V0IGlzIGNyZWF0ZWQKKyAgICAgIHVzaW5nIHRoZSB2YWx1ZSBpbiBgYGhvc3RgYCAtIG90aGVyd2lzZSwgYSBUQ1Agc29ja2V0IGlzIGNyZWF0ZWQuCiAKICAgIC4uIG1ldGhvZDo6IGVtaXQoKQogCkBAIC04MjcsMjEgKzg0MCw0MyBAQAogYGBQT1NUYGAgc2VtYW50aWNzLgogCiAKLS4uIGNsYXNzOjogSFRUUEhhbmRsZXIoaG9zdCwgdXJsLCBtZXRob2Q9J0dFVCcsIHNlY3VyZT1GYWxzZSwgY3JlZGVudGlhbHM9Tm9uZSkKKy4uIGNsYXNzOjogSFRUUEhhbmRsZXIoaG9zdCwgdXJsLCBtZXRob2Q9J0dFVCcsIHNlY3VyZT1GYWxzZSwgY3JlZGVudGlhbHM9Tm9uZSwgY29udGV4dD1Ob25lKQogCiAgICBSZXR1cm5zIGEgbmV3IGluc3RhbmNlIG9mIHRoZSA6Y2xhc3M6YEhUVFBIYW5kbGVyYCBjbGFzcy4gVGhlICpob3N0KiBjYW4gYmUKLSAgIG9mIHRoZSBmb3JtIGBgaG9zdDpwb3J0YGAsIHNob3VsZCB5b3UgbmVlZCB0byB1c2UgYSBzcGVjaWZpYyBwb3J0IG51bWJlci4KLSAgIElmIG5vICptZXRob2QqIGlzIHNwZWNpZmllZCwgYGBHRVRgYCBpcyB1c2VkLiBJZiAqc2VjdXJlKiBpcyB0cnVlLCBhbiBIVFRQUwotICAgY29ubmVjdGlvbiB3aWxsIGJlIHVzZWQuIElmICpjcmVkZW50aWFscyogaXMgc3BlY2lmaWVkLCBpdCBzaG91bGQgYmUgYQotICAgMi10dXBsZSBjb25zaXN0aW5nIG9mIHVzZXJpZCBhbmQgcGFzc3dvcmQsIHdoaWNoIHdpbGwgYmUgcGxhY2VkIGluIGFuIEhUVFAKKyAgIG9mIHRoZSBmb3JtIGBgaG9zdDpwb3J0YGAsIHNob3VsZCB5b3UgbmVlZCB0byB1c2UgYSBzcGVjaWZpYyBwb3J0IG51bWJlci4gIElmCisgICBubyAqbWV0aG9kKiBpcyBzcGVjaWZpZWQsIGBgR0VUYGAgaXMgdXNlZC4gSWYgKnNlY3VyZSogaXMgdHJ1ZSwgYSBIVFRQUworICAgY29ubmVjdGlvbiB3aWxsIGJlIHVzZWQuIFRoZSAqY29udGV4dCogcGFyYW1ldGVyIG1heSBiZSBzZXQgdG8gYQorICAgOmNsYXNzOmBzc2wuU1NMQ29udGV4dGAgaW5zdGFuY2UgdG8gY29uZmlndXJlIHRoZSBTU0wgc2V0dGluZ3MgdXNlZCBmb3IgdGhlCisgICBIVFRQUyBjb25uZWN0aW9uLiBJZiAqY3JlZGVudGlhbHMqIGlzIHNwZWNpZmllZCwgaXQgc2hvdWxkIGJlIGEgMi10dXBsZQorICAgY29uc2lzdGluZyBvZiB1c2VyaWQgYW5kIHBhc3N3b3JkLCB3aGljaCB3aWxsIGJlIHBsYWNlZCBpbiBhIEhUVFAKICAgICdBdXRob3JpemF0aW9uJyBoZWFkZXIgdXNpbmcgQmFzaWMgYXV0aGVudGljYXRpb24uIElmIHlvdSBzcGVjaWZ5CiAgICBjcmVkZW50aWFscywgeW91IHNob3VsZCBhbHNvIHNwZWNpZnkgc2VjdXJlPVRydWUgc28gdGhhdCB5b3VyIHVzZXJpZCBhbmQKICAgIHBhc3N3b3JkIGFyZSBub3QgcGFzc2VkIGluIGNsZWFydGV4dCBhY3Jvc3MgdGhlIHdpcmUuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40LjMKKyAgICAgIFRoZSAqY29udGV4dCogcGFyYW1ldGVyIHdhcyBhZGRlZC4KKworICAgLi4gbWV0aG9kOjogbWFwTG9nUmVjb3JkKHJlY29yZCkKKworICAgICAgUHJvdmlkZXMgYSBkaWN0aW9uYXJ5LCBiYXNlZCBvbiBgYHJlY29yZGBgLCB3aGljaCBpcyB0byBiZSBVUkwtZW5jb2RlZAorICAgICAgYW5kIHNlbnQgdG8gdGhlIHdlYiBzZXJ2ZXIuIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGp1c3QgcmV0dXJucworICAgICAgYGByZWNvcmQuX19kaWN0X19gYC4gVGhpcyBtZXRob2QgY2FuIGJlIG92ZXJyaWRkZW4gaWYgZS5nLiBvbmx5IGEKKyAgICAgIHN1YnNldCBvZiA6Y2xhc3M6YH5sb2dnaW5nLkxvZ1JlY29yZGAgaXMgdG8gYmUgc2VudCB0byB0aGUgd2ViIHNlcnZlciwgb3IKKyAgICAgIGlmIG1vcmUgc3BlY2lmaWMgY3VzdG9taXphdGlvbiBvZiB3aGF0J3Mgc2VudCB0byB0aGUgc2VydmVyIGlzIHJlcXVpcmVkLgogCiAgICAuLiBtZXRob2Q6OiBlbWl0KHJlY29yZCkKIAotICAgICAgU2VuZHMgdGhlIHJlY29yZCB0byB0aGUgV2ViIHNlcnZlciBhcyBhIHBlcmNlbnQtZW5jb2RlZCBkaWN0aW9uYXJ5LgorICAgICAgU2VuZHMgdGhlIHJlY29yZCB0byB0aGUgV2ViIHNlcnZlciBhcyBhbiBVUkwtZW5jb2RlZCBkaWN0aW9uYXJ5LiBUaGUKKyAgICAgIDptZXRoOmBtYXBMb2dSZWNvcmRgIG1ldGhvZCBpcyB1c2VkIHRvIGNvbnZlcnQgdGhlIHJlY29yZCB0byB0aGUKKyAgICAgIGRpY3Rpb25hcnkgdG8gYmUgc2VudC4KKworICAgLi4gbm90ZTo6IFNpbmNlIHByZXBhcmluZyBhIHJlY29yZCBmb3Igc2VuZGluZyBpdCB0byBhIFdlYiBzZXJ2ZXIgaXMgbm90CisgICAgICB0aGUgc2FtZSBhcyBhIGdlbmVyaWMgZm9ybWF0dGluZyBvcGVyYXRpb24sIHVzaW5nCisgICAgICA6bWV0aDpgfmxvZ2dpbmcuSGFuZGxlci5zZXRGb3JtYXR0ZXJgIHRvIHNwZWNpZnkgYQorICAgICAgOmNsYXNzOmB+bG9nZ2luZy5Gb3JtYXR0ZXJgIGZvciBhIDpjbGFzczpgSFRUUEhhbmRsZXJgIGhhcyBubyBlZmZlY3QuCisgICAgICBJbnN0ZWFkIG9mIGNhbGxpbmcgOm1ldGg6YH5sb2dnaW5nLkhhbmRsZXIuZm9ybWF0YCwgdGhpcyBoYW5kbGVyIGNhbGxzCisgICAgICA6bWV0aDpgbWFwTG9nUmVjb3JkYCBhbmQgdGhlbiA6ZnVuYzpgdXJsbGliLnBhcnNlLnVybGVuY29kZWAgdG8gZW5jb2RlIHRoZQorICAgICAgZGljdGlvbmFyeSBpbiBhIGZvcm0gc3VpdGFibGUgZm9yIHNlbmRpbmcgdG8gYSBXZWIgc2VydmVyLgogCiAKIC4uIF9xdWV1ZS1oYW5kbGVyOgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvbG9nZ2luZy5yc3QgYi9Eb2MvbGlicmFyeS9sb2dnaW5nLnJzdAppbmRleCA4ZDA5M2UxLi44ZmQ3ZTQwIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9sb2dnaW5nLnJzdAorKysgYi9Eb2MvbGlicmFyeS9sb2dnaW5nLnJzdApAQCAtMTE4LDcgKzExOCw5IEBACiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgogICAgICAgVGhlICpsdmwqIHBhcmFtZXRlciBub3cgYWNjZXB0cyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUKICAgICAgIGxldmVsIHN1Y2ggYXMgJ0lORk8nIGFzIGFuIGFsdGVybmF0aXZlIHRvIHRoZSBpbnRlZ2VyIGNvbnN0YW50cwotICAgICAgc3VjaCBhcyA6Y29uc3Q6YElORk9gLgorICAgICAgc3VjaCBhcyA6Y29uc3Q6YElORk9gLiBOb3RlLCBob3dldmVyLCB0aGF0IGxldmVscyBhcmUgaW50ZXJuYWxseSBzdG9yZWQKKyAgICAgIGFzIGludGVnZXJzLCBhbmQgbWV0aG9kcyBzdWNoIGFzIGUuZy4gOm1ldGg6YGdldEVmZmVjdGl2ZUxldmVsYCBhbmQKKyAgICAgIDptZXRoOmBpc0VuYWJsZWRGb3JgIHdpbGwgcmV0dXJuL2V4cGVjdCB0byBiZSBwYXNzZWQgaW50ZWdlcnMuCiAKIAogLi4gbWV0aG9kOjogTG9nZ2VyLmlzRW5hYmxlZEZvcihsdmwpCkBAIC0xMzQsNyArMTM2LDkgQEAKICAgIEluZGljYXRlcyB0aGUgZWZmZWN0aXZlIGxldmVsIGZvciB0aGlzIGxvZ2dlci4gSWYgYSB2YWx1ZSBvdGhlciB0aGFuCiAgICA6Y29uc3Q6YE5PVFNFVGAgaGFzIGJlZW4gc2V0IHVzaW5nIDptZXRoOmBzZXRMZXZlbGAsIGl0IGlzIHJldHVybmVkLiBPdGhlcndpc2UsCiAgICB0aGUgaGllcmFyY2h5IGlzIHRyYXZlcnNlZCB0b3dhcmRzIHRoZSByb290IHVudGlsIGEgdmFsdWUgb3RoZXIgdGhhbgotICAgOmNvbnN0OmBOT1RTRVRgIGlzIGZvdW5kLCBhbmQgdGhhdCB2YWx1ZSBpcyByZXR1cm5lZC4KKyAgIDpjb25zdDpgTk9UU0VUYCBpcyBmb3VuZCwgYW5kIHRoYXQgdmFsdWUgaXMgcmV0dXJuZWQuIFRoZSB2YWx1ZSByZXR1cm5lZCBpcworICAgYW4gaW50ZWdlciwgdHlwaWNhbGx5IG9uZSBvZiA6Y29uc3Q6YGxvZ2dpbmcuREVCVUdgLCA6Y29uc3Q6YGxvZ2dpbmcuSU5GT2AKKyAgIGV0Yy4KIAogCiAuLiBtZXRob2Q6OiBMb2dnZXIuZ2V0Q2hpbGQoc3VmZml4KQpAQCAtMjUwLDcgKzI1NCw3IEBACiAgICBpbnRlcnByZXRlZCBhcyBmb3IgOm1ldGg6YGRlYnVnYC4KIAogCi0uLiBtZXRob2Q6OiBMb2dnZXIuZXhjZXB0aW9uKG1zZywgKmFyZ3MpCisuLiBtZXRob2Q6OiBMb2dnZXIuZXhjZXB0aW9uKG1zZywgKmFyZ3MsICoqa3dhcmdzKQogCiAgICBMb2dzIGEgbWVzc2FnZSB3aXRoIGxldmVsIDpjb25zdDpgRVJST1JgIG9uIHRoaXMgbG9nZ2VyLiBUaGUgYXJndW1lbnRzIGFyZQogICAgaW50ZXJwcmV0ZWQgYXMgZm9yIDptZXRoOmBkZWJ1Z2AuIEV4Y2VwdGlvbiBpbmZvIGlzIGFkZGVkIHRvIHRoZSBsb2dnaW5nCkBAIC00NzcsNyArNDgxLDkgQEAKIHJlc3BvbnNpYmxlIGZvciBjb252ZXJ0aW5nIGEgOmNsYXNzOmBMb2dSZWNvcmRgIHRvICh1c3VhbGx5KSBhIHN0cmluZyB3aGljaCBjYW4KIGJlIGludGVycHJldGVkIGJ5IGVpdGhlciBhIGh1bWFuIG9yIGFuIGV4dGVybmFsIHN5c3RlbS4gVGhlIGJhc2UKIDpjbGFzczpgRm9ybWF0dGVyYCBhbGxvd3MgYSBmb3JtYXR0aW5nIHN0cmluZyB0byBiZSBzcGVjaWZpZWQuIElmIG5vbmUgaXMKLXN1cHBsaWVkLCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiBgYCclKG1lc3NhZ2UpcydgYCBpcyB1c2VkLgorc3VwcGxpZWQsIHRoZSBkZWZhdWx0IHZhbHVlIG9mIGBgJyUobWVzc2FnZSlzJ2BgIGlzIHVzZWQsIHdoaWNoIGp1c3QgaW5jbHVkZXMKK3RoZSBtZXNzYWdlIGluIHRoZSBsb2dnaW5nIGNhbGwuIFRvIGhhdmUgYWRkaXRpb25hbCBpdGVtcyBvZiBpbmZvcm1hdGlvbiBpbiB0aGUKK2Zvcm1hdHRlZCBvdXRwdXQgKHN1Y2ggYXMgYSB0aW1lc3RhbXApLCBrZWVwIHJlYWRpbmcuCiAKIEEgRm9ybWF0dGVyIGNhbiBiZSBpbml0aWFsaXplZCB3aXRoIGEgZm9ybWF0IHN0cmluZyB3aGljaCBtYWtlcyB1c2Ugb2Yga25vd2xlZGdlCiBvZiB0aGUgOmNsYXNzOmBMb2dSZWNvcmRgIGF0dHJpYnV0ZXMgLSBzdWNoIGFzIHRoZSBkZWZhdWx0IHZhbHVlIG1lbnRpb25lZCBhYm92ZQpAQCAtNzMyLDcgKzczOCw5IEBACiB8IEF0dHJpYnV0ZSBuYW1lIHwgRm9ybWF0ICAgICAgICAgICAgICAgICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogKz09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsKIHwgYXJncyAgICAgICAgICAgfCBZb3Ugc2hvdWxkbid0IG5lZWQgdG8gICB8IFRoZSB0dXBsZSBvZiBhcmd1bWVudHMgbWVyZ2VkIGludG8gYGBtc2dgYCB0byB8Ci18ICAgICAgICAgICAgICAgIHwgZm9ybWF0IHRoaXMgeW91cnNlbGYuICAgfCBwcm9kdWNlIGBgbWVzc2FnZWBgLiAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICB8IGZvcm1hdCB0aGlzIHlvdXJzZWxmLiAgIHwgcHJvZHVjZSBgYG1lc3NhZ2VgYCwgb3IgYSBkaWN0IHdob3NlIHZhbHVlcyAgIHwKK3wgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8IGFyZSB1c2VkIGZvciB0aGUgbWVyZ2UgKHdoZW4gdGhlcmUgaXMgb25seSBvbmV8Cit8ICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCBhcmd1bWVudCwgYW5kIGl0IGlzIGEgZGljdGlvbmFyeSkuICAgICAgICAgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIHwgYXNjdGltZSAgICAgICAgfCBgYCUoYXNjdGltZSlzYGAgICAgICAgICB8IEh1bWFuLXJlYWRhYmxlIHRpbWUgd2hlbiB0aGUgICAgICAgICAgICAgICAgICB8CiB8ICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCA6Y2xhc3M6YExvZ1JlY29yZGAgd2FzIGNyZWF0ZWQuICBCeSBkZWZhdWx0ICAgfApAQCAtOTkyLDcgKzEwMDAsNyBAQAogICAgYXJlIGludGVycHJldGVkIGFzIGZvciA6ZnVuYzpgZGVidWdgLgogCiAKLS4uIGZ1bmN0aW9uOjogZXhjZXB0aW9uKG1zZywgKmFyZ3MpCisuLiBmdW5jdGlvbjo6IGV4Y2VwdGlvbihtc2csICphcmdzLCAqKmt3YXJncykKIAogICAgTG9ncyBhIG1lc3NhZ2Ugd2l0aCBsZXZlbCA6Y29uc3Q6YEVSUk9SYCBvbiB0aGUgcm9vdCBsb2dnZXIuIFRoZSBhcmd1bWVudHMgYXJlCiAgICBpbnRlcnByZXRlZCBhcyBmb3IgOmZ1bmM6YGRlYnVnYC4gRXhjZXB0aW9uIGluZm8gaXMgYWRkZWQgdG8gdGhlIGxvZ2dpbmcKQEAgLTEwNDksNiArMTA1NywxNiBAQAogICAgb2YgdGhlIGRlZmluZWQgbGV2ZWxzIGlzIHBhc3NlZCBpbiwgdGhlIGNvcnJlc3BvbmRpbmcgc3RyaW5nIHJlcHJlc2VudGF0aW9uIGlzCiAgICByZXR1cm5lZC4gT3RoZXJ3aXNlLCB0aGUgc3RyaW5nICdMZXZlbCAlcycgJSBsdmwgaXMgcmV0dXJuZWQuCiAKKyAgIC4uIG5vdGU6OiBMZXZlbHMgYXJlIGludGVybmFsbHkgaW50ZWdlcnMgKGFzIHRoZXkgbmVlZCB0byBiZSBjb21wYXJlZCBpbiB0aGUKKyAgICAgIGxvZ2dpbmcgbG9naWMpLiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gY29udmVydCBiZXR3ZWVuIGFuIGludGVnZXIgbGV2ZWwKKyAgICAgIGFuZCB0aGUgbGV2ZWwgbmFtZSBkaXNwbGF5ZWQgaW4gdGhlIGZvcm1hdHRlZCBsb2cgb3V0cHV0IGJ5IG1lYW5zIG9mIHRoZQorICAgICAgYGAlKGxldmVsbmFtZSlzYGAgZm9ybWF0IHNwZWNpZmllciAoc2VlIDpyZWY6YGxvZ3JlY29yZC1hdHRyaWJ1dGVzYCkuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBJbiBQeXRob24gdmVyc2lvbnMgZWFybGllciB0aGFuIDMuNCwgdGhpcyBmdW5jdGlvbiBjb3VsZCBhbHNvIGJlIHBhc3NlZCBhCisgICAgICB0ZXh0IGxldmVsLCBhbmQgd291bGQgcmV0dXJuIHRoZSBjb3JyZXNwb25kaW5nIG51bWVyaWMgdmFsdWUgb2YgdGhlIGxldmVsLgorICAgICAgVGhpcyB1bmRvY3VtZW50ZWQgYmVoYXZpb3VyIHdhcyBjb25zaWRlcmVkIGEgbWlzdGFrZSwgYW5kIHdhcyByZW1vdmVkIGluCisgICAgICBQeXRob24gMy40LCBidXQgcmVpbnN0YXRlZCBpbiAzLjQuMiBkdWUgdG8gcmV0YWluIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCiAKIC4uIGZ1bmN0aW9uOjogbWFrZUxvZ1JlY29yZChhdHRyZGljdCkKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvbHptYS5yc3QgYi9Eb2MvbGlicmFyeS9sem1hLnJzdAppbmRleCAwN2I2OWViLi5iNzEwNTFkIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9sem1hLnJzdAorKysgYi9Eb2MvbGlicmFyeS9sem1hLnJzdApAQCAtMzksOCArMzksOCBAQAogICAgb3BlbmVkLCBvciBpdCBjYW4gYmUgYW4gZXhpc3RpbmcgZmlsZSBvYmplY3QgdG8gcmVhZCBmcm9tIG9yIHdyaXRlIHRvLgogCiAgICBUaGUgKm1vZGUqIGFyZ3VtZW50IGNhbiBiZSBhbnkgb2YgYGAiciJgYCwgYGAicmIiYGAsIGBgInciYGAsIGBgIndiImBgLAotICAgYGAiYSJgYCBvciBgYCJhYiJgYCBmb3IgYmluYXJ5IG1vZGUsIG9yIGBgInJ0ImBgLCBgYCJ3dCJgYCwgb3IgYGAiYXQiYGAgZm9yCi0gICB0ZXh0IG1vZGUuIFRoZSBkZWZhdWx0IGlzIGBgInJiImBgLgorICAgYGAieCJgYCwgYGAieGIiYGAsIGBgImEiYGAgb3IgYGAiYWIiYGAgZm9yIGJpbmFyeSBtb2RlLCBvciBgYCJydCJgYCwKKyAgIGBgInd0ImBgLCBgYCJ4dCJgYCwgb3IgYGAiYXQiYGAgZm9yIHRleHQgbW9kZS4gVGhlIGRlZmF1bHQgaXMgYGAicmIiYGAuCiAKICAgIFdoZW4gb3BlbmluZyBhIGZpbGUgZm9yIHJlYWRpbmcsIHRoZSAqZm9ybWF0KiBhbmQgKmZpbHRlcnMqIGFyZ3VtZW50cyBoYXZlCiAgICB0aGUgc2FtZSBtZWFuaW5ncyBhcyBmb3IgOmNsYXNzOmBMWk1BRGVjb21wcmVzc29yYC4gSW4gdGhpcyBjYXNlLCB0aGUgKmNoZWNrKgpAQCAtNTcsNiArNTcsOSBAQAogICAgOmNsYXNzOmBpby5UZXh0SU9XcmFwcGVyYCBpbnN0YW5jZSB3aXRoIHRoZSBzcGVjaWZpZWQgZW5jb2RpbmcsIGVycm9yCiAgICBoYW5kbGluZyBiZWhhdmlvciwgYW5kIGxpbmUgZW5kaW5nKHMpLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgQWRkZWQgc3VwcG9ydCBmb3IgdGhlIGBgIngiYGAsIGBgInhiImBgIGFuZCBgYCJ4dCJgYCBtb2Rlcy4KKwogCiAuLiBjbGFzczo6IExaTUFGaWxlKGZpbGVuYW1lPU5vbmUsIG1vZGU9InIiLCBcKiwgZm9ybWF0PU5vbmUsIGNoZWNrPS0xLCBwcmVzZXQ9Tm9uZSwgZmlsdGVycz1Ob25lKQogCkBAIC02OSw4ICs3Miw5IEBACiAgICBmaWxlIHdpbGwgbm90IGJlIGNsb3NlZCB3aGVuIHRoZSA6Y2xhc3M6YExaTUFGaWxlYCBpcyBjbG9zZWQuCiAKICAgIFRoZSAqbW9kZSogYXJndW1lbnQgY2FuIGJlIGVpdGhlciBgYCJyImBgIGZvciByZWFkaW5nIChkZWZhdWx0KSwgYGAidyJgYCBmb3IKLSAgIG92ZXJ3cml0aW5nLCBvciBgYCJhImBgIGZvciBhcHBlbmRpbmcuIFRoZXNlIGNhbiBlcXVpdmFsZW50bHkgYmUgZ2l2ZW4gYXMKLSAgIGBgInJiImBgLCBgYCJ3YiJgYCwgYW5kIGBgImFiImBgIHJlc3BlY3RpdmVseS4KKyAgIG92ZXJ3cml0aW5nLCBgYCJ4ImBgIGZvciBleGNsdXNpdmUgY3JlYXRpb24sIG9yIGBgImEiYGAgZm9yIGFwcGVuZGluZy4gVGhlc2UKKyAgIGNhbiBlcXVpdmFsZW50bHkgYmUgZ2l2ZW4gYXMgYGAicmIiYGAsIGBgIndiImBgLCBgYCJ4YiJgYCBhbmQgYGAiYWIiYGAKKyAgIHJlc3BlY3RpdmVseS4KIAogICAgSWYgKmZpbGVuYW1lKiBpcyBhIGZpbGUgb2JqZWN0IChyYXRoZXIgdGhhbiBhbiBhY3R1YWwgZmlsZSBuYW1lKSwgYSBtb2RlIG9mCiAgICBgYCJ3ImBgIGRvZXMgbm90IHRydW5jYXRlIHRoZSBmaWxlLCBhbmQgaXMgaW5zdGVhZCBlcXVpdmFsZW50IHRvIGBgImEiYGAuCkBAIC0xMDMsNiArMTA3LDkgQEAKICAgICAgICAgIGZpbGUgb2JqZWN0IChlLmcuIGlmIHRoZSA6Y2xhc3M6YExaTUFGaWxlYCB3YXMgY29uc3RydWN0ZWQgYnkgcGFzc2luZyBhCiAgICAgICAgICBmaWxlIG9iamVjdCBmb3IgKmZpbGVuYW1lKikuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBBZGRlZCBzdXBwb3J0IGZvciB0aGUgYGAieCJgYCBhbmQgYGAieGIiYGAgbW9kZXMuCisKIAogQ29tcHJlc3NpbmcgYW5kIGRlY29tcHJlc3NpbmcgZGF0YSBpbiBtZW1vcnkKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9tYWlsYm94LnJzdCBiL0RvYy9saWJyYXJ5L21haWxib3gucnN0CmluZGV4IDA0NzhlZDEuLmQyOTkwMmQgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L21haWxib3gucnN0CisrKyBiL0RvYy9saWJyYXJ5L21haWxib3gucnN0CkBAIC0yMDIsNyArMjAyLDcgQEAKICAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCiAgICAgICAgICBUaGUgZmlsZSBvYmplY3QgcmVhbGx5IGlzIGEgYmluYXJ5IGZpbGU7IHByZXZpb3VzbHkgaXQgd2FzIGluY29ycmVjdGx5CiAgICAgICAgICByZXR1cm5lZCBpbiB0ZXh0IG1vZGUuICBBbHNvLCB0aGUgZmlsZS1saWtlIG9iamVjdCBub3cgc3VwcG9ydHMgdGhlCi0gICAgICAgICBjb250ZXh0IG1hbmFnZXIgcHJvdG9jb2w6IHlvdSBjYW4gdXNlIGEgOmtleXdvcmQ6YHdpdGhgIHN0YXRlbWVudCB0bworICAgICAgICAgY29udGV4dCBtYW5hZ2VtZW50IHByb3RvY29sOiB5b3UgY2FuIHVzZSBhIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQgdG8KICAgICAgICAgIGF1dG9tYXRpY2FsbHkgY2xvc2UgaXQuCiAKICAgICAgIC4uIG5vdGU6OgpAQCAtNDg3LDcgKzQ4Nyw3IEBACiAgICBgQ29uZmlndXJpbmcgTmV0c2NhcGUgTWFpbCBvbiBVbml4OiBXaHkgVGhlIENvbnRlbnQtTGVuZ3RoIEZvcm1hdCBpcyBCYWQgPGh0dHA6Ly93d3cuand6Lm9yZy9kb2MvY29udGVudC1sZW5ndGguaHRtbD5gXwogICAgICAgQW4gYXJndW1lbnQgZm9yIHVzaW5nIHRoZSBvcmlnaW5hbCBtYm94IGZvcm1hdCByYXRoZXIgdGhhbiBhIHZhcmlhdGlvbi4KIAotICAgYCJtYm94IiBpcyBhIGZhbWlseSBvZiBzZXZlcmFsIG11dHVhbGx5IGluY29tcGF0aWJsZSBtYWlsYm94IGZvcm1hdHMgPGh0dHA6Ly9ob21lcGFnZXMudGVzY28ubmV0Li9+Si5kZUJveW5lUG9sbGFyZC9GR0EvbWFpbC1tYm94LWZvcm1hdHMuaHRtbD5gXworICAgYCJtYm94IiBpcyBhIGZhbWlseSBvZiBzZXZlcmFsIG11dHVhbGx5IGluY29tcGF0aWJsZSBtYWlsYm94IGZvcm1hdHMgPGh0dHA6Ly9ob21lcGFnZS5udGx3b3JsZC5jb20vam9uYXRoYW4uZGVib3luZXBvbGxhcmQvRkdBL21haWwtbWJveC1mb3JtYXRzLmh0bWw+YF8KICAgICAgIEEgaGlzdG9yeSBvZiBtYm94IHZhcmlhdGlvbnMuCiAKIApAQCAtNjc0LDcgKzY3NCw3IEBACiAKICAgICAgIEluIEJhYnlsIG1haWxib3hlcywgdGhlIGhlYWRlcnMgb2YgYSBtZXNzYWdlIGFyZSBub3Qgc3RvcmVkIGNvbnRpZ3VvdXNseQogICAgICAgd2l0aCB0aGUgYm9keSBvZiB0aGUgbWVzc2FnZS4gVG8gZ2VuZXJhdGUgYSBmaWxlLWxpa2UgcmVwcmVzZW50YXRpb24sIHRoZQotICAgICAgaGVhZGVycyBhbmQgYm9keSBhcmUgY29waWVkIHRvZ2V0aGVyIGludG8gYSA6Y2xhc3M6YGlvLkJ5dGVzSU9gIGluc3RhbmNlLAorICAgICAgaGVhZGVycyBhbmQgYm9keSBhcmUgY29waWVkIHRvZ2V0aGVyIGludG8gYW4gOmNsYXNzOmBpby5CeXRlc0lPYCBpbnN0YW5jZSwKICAgICAgIHdoaWNoIGhhcyBhbiBBUEkgaWRlbnRpY2FsIHRvIHRoYXQgb2YgYQogICAgICAgZmlsZS4gQXMgYSByZXN1bHQsIHRoZSBmaWxlLWxpa2Ugb2JqZWN0IGlzIHRydWx5IGluZGVwZW5kZW50IG9mIHRoZQogICAgICAgdW5kZXJseWluZyBtYWlsYm94IGJ1dCBkb2VzIG5vdCBzYXZlIG1lbW9yeSBjb21wYXJlZCB0byBhIHN0cmluZwpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvbWFyc2hhbC5yc3QgYi9Eb2MvbGlicmFyeS9tYXJzaGFsLnJzdAppbmRleCAzYjllM2QyLi5hZjQzOTQ0IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9tYXJzaGFsLnJzdAorKysgYi9Eb2MvbGlicmFyeS9tYXJzaGFsLnJzdApAQCAtNDAsMTAgKzQwLDExIEBACiBwb2ludCBudW1iZXJzLCBjb21wbGV4IG51bWJlcnMsIHN0cmluZ3MsIGJ5dGVzLCBieXRlYXJyYXlzLCB0dXBsZXMsIGxpc3RzLCBzZXRzLAogZnJvemVuc2V0cywgZGljdGlvbmFyaWVzLCBhbmQgY29kZSBvYmplY3RzLCB3aGVyZSBpdCBzaG91bGQgYmUgdW5kZXJzdG9vZCB0aGF0CiB0dXBsZXMsIGxpc3RzLCBzZXRzLCBmcm96ZW5zZXRzIGFuZCBkaWN0aW9uYXJpZXMgYXJlIG9ubHkgc3VwcG9ydGVkIGFzIGxvbmcgYXMKLXRoZSB2YWx1ZXMgY29udGFpbmVkIHRoZXJlaW4gYXJlIHRoZW1zZWx2ZXMgc3VwcG9ydGVkOyBhbmQgcmVjdXJzaXZlIGxpc3RzLCBzZXRzCi1hbmQgZGljdGlvbmFyaWVzIHNob3VsZCBub3QgYmUgd3JpdHRlbiAodGhleSB3aWxsIGNhdXNlIGluZmluaXRlIGxvb3BzKS4gIFRoZQordGhlIHZhbHVlcyBjb250YWluZWQgdGhlcmVpbiBhcmUgdGhlbXNlbHZlcyBzdXBwb3J0ZWQuCiBzaW5nbGV0b25zIDpjb25zdDpgTm9uZWAsIDpjb25zdDpgRWxsaXBzaXNgIGFuZCA6ZXhjOmBTdG9wSXRlcmF0aW9uYCBjYW4gYWxzbyBiZQogbWFyc2hhbGxlZCBhbmQgdW5tYXJzaGFsbGVkLgorRm9yIGZvcm1hdCAqdmVyc2lvbiogbG93ZXIgdGhhbiAzLCByZWN1cnNpdmUgbGlzdHMsIHNldHMgYW5kIGRpY3Rpb25hcmllcyBjYW5ub3QKK2JlIHdyaXR0ZW4gKHNlZSBiZWxvdykuCiAKIFRoZXJlIGFyZSBmdW5jdGlvbnMgdGhhdCByZWFkL3dyaXRlIGZpbGVzIGFzIHdlbGwgYXMgZnVuY3Rpb25zIG9wZXJhdGluZyBvbgogc3RyaW5ncy4KQEAgLTEwMyw3ICsxMDQsOSBAQAogCiAgICBJbmRpY2F0ZXMgdGhlIGZvcm1hdCB0aGF0IHRoZSBtb2R1bGUgdXNlcy4gVmVyc2lvbiAwIGlzIHRoZSBoaXN0b3JpY2FsCiAgICBmb3JtYXQsIHZlcnNpb24gMSBzaGFyZXMgaW50ZXJuZWQgc3RyaW5ncyBhbmQgdmVyc2lvbiAyIHVzZXMgYSBiaW5hcnkgZm9ybWF0Ci0gICBmb3IgZmxvYXRpbmcgcG9pbnQgbnVtYmVycy4gVGhlIGN1cnJlbnQgdmVyc2lvbiBpcyAyLgorICAgZm9yIGZsb2F0aW5nIHBvaW50IG51bWJlcnMuCisgICBWZXJzaW9uIDMgYWRkcyBzdXBwb3J0IGZvciBvYmplY3QgaW5zdGFuY2luZyBhbmQgcmVjdXJzaW9uLgorICAgVGhlIGN1cnJlbnQgdmVyc2lvbiBpcyA0LgogCiAKIC4uIHJ1YnJpYzo6IEZvb3Rub3RlcwpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvbWF0aC5yc3QgYi9Eb2MvbGlicmFyeS9tYXRoLnJzdAppbmRleCAzYzQxNjcyLi4wZmM3YzdjIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9tYXRoLnJzdAorKysgYi9Eb2MvbGlicmFyeS9tYXRoLnJzdApAQCAtMjgwLDEyICsyODAsMTIgQEAKIAogLi4gZnVuY3Rpb246OiBkZWdyZWVzKHgpCiAKLSAgIENvbnZlcnRzIGFuZ2xlICp4KiBmcm9tIHJhZGlhbnMgdG8gZGVncmVlcy4KKyAgIENvbnZlcnQgYW5nbGUgKngqIGZyb20gcmFkaWFucyB0byBkZWdyZWVzLgogCiAKIC4uIGZ1bmN0aW9uOjogcmFkaWFucyh4KQogCi0gICBDb252ZXJ0cyBhbmdsZSAqeCogZnJvbSBkZWdyZWVzIHRvIHJhZGlhbnMuCisgICBDb252ZXJ0IGFuZ2xlICp4KiBmcm9tIGRlZ3JlZXMgdG8gcmFkaWFucy4KIAogSHlwZXJib2xpYyBmdW5jdGlvbnMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9taW1ldHlwZXMucnN0IGIvRG9jL2xpYnJhcnkvbWltZXR5cGVzLnJzdAppbmRleCAxMmM5ZWNhLi44NzM5ZWEzIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9taW1ldHlwZXMucnN0CisrKyBiL0RvYy9saWJyYXJ5L21pbWV0eXBlcy5yc3QKQEAgLTQ0LDcgKzQ0LDcgQEAKIAogICAgVGhlIG9wdGlvbmFsICpzdHJpY3QqIGFyZ3VtZW50IGlzIGEgZmxhZyBzcGVjaWZ5aW5nIHdoZXRoZXIgdGhlIGxpc3Qgb2Yga25vd24gTUlNRSB0eXBlcwogICAgaXMgbGltaXRlZCB0byBvbmx5IHRoZSBvZmZpY2lhbCB0eXBlcyBgcmVnaXN0ZXJlZCB3aXRoIElBTkEKLSAgIDxodHRwOi8vd3d3LmlhbmEub3JnL2Fzc2lnbm1lbnRzL21lZGlhLXR5cGVzLz5gXy4KKyAgIDxodHRwOi8vd3d3LmlhbmEub3JnL2Fzc2lnbm1lbnRzL21lZGlhLXR5cGVzL21lZGlhLXR5cGVzLnhodG1sPmBfLgogICAgV2hlbiAqc3RyaWN0KiBpcyBgYFRydWVgYCAodGhlIGRlZmF1bHQpLCBvbmx5IHRoZSBJQU5BIHR5cGVzIGFyZSBzdXBwb3J0ZWQ7IHdoZW4KICAgICpzdHJpY3QqIGlzIGBgRmFsc2VgYCwgc29tZSBhZGRpdGlvbmFsIG5vbi1zdGFuZGFyZCBidXQgY29tbW9ubHkgdXNlZCBNSU1FIHR5cGVzCiAgICBhcmUgYWxzbyByZWNvZ25pemVkLgpAQCAtMTA2LDggKzEwNiw4IEBACiAgICBleHRlbnNpb24gaXMgYWxyZWFkeSBrbm93biwgdGhlIG5ldyB0eXBlIHdpbGwgcmVwbGFjZSB0aGUgb2xkIG9uZS4gV2hlbiB0aGUgdHlwZQogICAgaXMgYWxyZWFkeSBrbm93biB0aGUgZXh0ZW5zaW9uIHdpbGwgYmUgYWRkZWQgdG8gdGhlIGxpc3Qgb2Yga25vd24gZXh0ZW5zaW9ucy4KIAotICAgV2hlbiAqc3RyaWN0KiBpcyBgYFRydWVgYCAodGhlIGRlZmF1bHQpLCB0aGUgbWFwcGluZyB3aWxsIGFkZGVkIHRvIHRoZSBvZmZpY2lhbCBNSU1FCi0gICB0eXBlcywgb3RoZXJ3aXNlIHRvIHRoZSBub24tc3RhbmRhcmQgb25lcy4KKyAgIFdoZW4gKnN0cmljdCogaXMgYGBUcnVlYGAgKHRoZSBkZWZhdWx0KSwgdGhlIG1hcHBpbmcgd2lsbCBiZSBhZGRlZCB0byB0aGUKKyAgIG9mZmljaWFsIE1JTUUgdHlwZXMsIG90aGVyd2lzZSB0byB0aGUgbm9uLXN0YW5kYXJkIG9uZXMuCiAKIAogLi4gZGF0YTo6IGluaXRlZApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvbW9kdWxlZmluZGVyLnJzdCBiL0RvYy9saWJyYXJ5L21vZHVsZWZpbmRlci5yc3QKaW5kZXggOTdhY2U2MC4uZTg0YTQ5NiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvbW9kdWxlZmluZGVyLnJzdAorKysgYi9Eb2MvbGlicmFyeS9tb2R1bGVmaW5kZXIucnN0CkBAIC01Myw3ICs1Myw3IEBACiAgICAuLiBhdHRyaWJ1dGU6OiBtb2R1bGVzCiAKICAgICAgIEEgZGljdGlvbmFyeSBtYXBwaW5nIG1vZHVsZSBuYW1lcyB0byBtb2R1bGVzLiBTZWUKLSAgICAgIDpyZWY6YG1vZHVsZWZpbmRlci1leGFtcGxlYAorICAgICAgOnJlZjpgbW9kdWxlZmluZGVyLWV4YW1wbGVgLgogCiAKIC4uIF9tb2R1bGVmaW5kZXItZXhhbXBsZToKQEAgLTEwNCw3ICsxMDQsNyBAQAogICAgIHJlOiAgX19tb2R1bGVfXyxmaW5kaXRlcixfZXhwYW5kCiAgICAgaXRlcnRvb2xzOgogICAgIF9fbWFpbl9fOiAgcmUsaXRlcnRvb2xzLGJhY29uaGFtZWdncwotICAgIHNyZV9wYXJzZTogIF9fZ2V0c2xpY2VfXyxfUEFUVEVSTkVOREVSUyxTUkVfRkxBR19VTklDT0RFCisgICAgc3JlX3BhcnNlOiAgX1BBVFRFUk5FTkRFUlMsU1JFX0ZMQUdfVU5JQ09ERQogICAgIGFycmF5OgogICAgIHR5cGVzOiAgX19tb2R1bGVfXyxJbnRUeXBlLFR5cGVUeXBlCiAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9tb2R1bGVzLnJzdCBiL0RvYy9saWJyYXJ5L21vZHVsZXMucnN0CmluZGV4IGQ4OWVmMTAuLjZiMmE0MGEgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L21vZHVsZXMucnN0CisrKyBiL0RvYy9saWJyYXJ5L21vZHVsZXMucnN0CkBAIC0xMiw3ICsxMiw2IEBACiAKIC4uIHRvY3RyZWU6OgogCi0gICBpbXAucnN0CiAgICB6aXBpbXBvcnQucnN0CiAgICBwa2d1dGlsLnJzdAogICAgbW9kdWxlZmluZGVyLnJzdApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvbXNpbGliLnJzdCBiL0RvYy9saWJyYXJ5L21zaWxpYi5yc3QKaW5kZXggZDM0NTFjOC4uNDE0NWM4ZSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvbXNpbGliLnJzdAorKysgYi9Eb2MvbGlicmFyeS9tc2lsaWIucnN0CkBAIC0xMjAsOSArMTIwLDkgQEAKIAogLi4gc2VlYWxzbzo6CiAKLSAgIGBGQ0lDcmVhdGVGaWxlIDxodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2xpYnJhcnkvZGVmYXVsdC5hc3A/dXJsPS9saWJyYXJ5L2VuLXVzL2Rldm5vdGVzL3dpbnByb2cvZmNpY3JlYXRlLmFzcD5gXwotICAgYFV1aWRDcmVhdGUgPGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vbGlicmFyeS9kZWZhdWx0LmFzcD91cmw9L2xpYnJhcnkvZW4tdXMvcnBjL3JwYy91dWlkY3JlYXRlLmFzcD5gXwotICAgYFV1aWRUb1N0cmluZyA8aHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9saWJyYXJ5L2RlZmF1bHQuYXNwP3VybD0vbGlicmFyeS9lbi11cy9ycGMvcnBjL3V1aWR0b3N0cmluZy5hc3A+YF8KKyAgIGBGQ0lDcmVhdGVGaWxlIDxodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2xpYnJhcnk/dXJsPS9saWJyYXJ5L2VuLXVzL2Rldm5vdGVzL3dpbnByb2cvZmNpY3JlYXRlLmFzcD5gXworICAgYFV1aWRDcmVhdGUgPGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vbGlicmFyeT91cmw9L2xpYnJhcnkvZW4tdXMvcnBjL3JwYy91dWlkY3JlYXRlLmFzcD5gXworICAgYFV1aWRUb1N0cmluZyA8aHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9saWJyYXJ5P3VybD0vbGlicmFyeS9lbi11cy9ycGMvcnBjL3V1aWR0b3N0cmluZy5hc3A+YF8KIAogLi4gX2RhdGFiYXNlLW9iamVjdHM6CiAKQEAgLTE1MSw5ICsxNTEsOSBAQAogCiAuLiBzZWVhbHNvOjoKIAotICAgYE1TSURhdGFiYXNlT3BlblZpZXcgPGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vbGlicmFyeS9kZWZhdWx0LmFzcD91cmw9L2xpYnJhcnkvZW4tdXMvbXNpL3NldHVwL21zaWRhdGFiYXNlb3BlbnZpZXcuYXNwPmBfCi0gICBgTVNJRGF0YWJhc2VDb21taXQgPGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vbGlicmFyeS9kZWZhdWx0LmFzcD91cmw9L2xpYnJhcnkvZW4tdXMvbXNpL3NldHVwL21zaWRhdGFiYXNlY29tbWl0LmFzcD5gXwotICAgYE1TSUdldFN1bW1hcnlJbmZvcm1hdGlvbiA8aHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9saWJyYXJ5L2RlZmF1bHQuYXNwP3VybD0vbGlicmFyeS9lbi11cy9tc2kvc2V0dXAvbXNpZ2V0c3VtbWFyeWluZm9ybWF0aW9uLmFzcD5gXworICAgYE1TSURhdGFiYXNlT3BlblZpZXcgPGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vbGlicmFyeT91cmw9L2xpYnJhcnkvZW4tdXMvbXNpL3NldHVwL21zaWRhdGFiYXNlb3BlbnZpZXcuYXNwPmBfCisgICBgTVNJRGF0YWJhc2VDb21taXQgPGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vbGlicmFyeT91cmw9L2xpYnJhcnkvZW4tdXMvbXNpL3NldHVwL21zaWRhdGFiYXNlY29tbWl0LmFzcD5gXworICAgYE1TSUdldFN1bW1hcnlJbmZvcm1hdGlvbiA8aHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9saWJyYXJ5P3VybD0vbGlicmFyeS9lbi11cy9tc2kvc2V0dXAvbXNpZ2V0c3VtbWFyeWluZm9ybWF0aW9uLmFzcD5gXwogCiAuLiBfdmlldy1vYmplY3RzOgogCkBAIC0xOTksMTEgKzE5OSwxMSBAQAogCiAuLiBzZWVhbHNvOjoKIAotICAgYE1zaVZpZXdFeGVjdXRlIDxodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2xpYnJhcnkvZGVmYXVsdC5hc3A/dXJsPS9saWJyYXJ5L2VuLXVzL21zaS9zZXR1cC9tc2l2aWV3ZXhlY3V0ZS5hc3A+YF8KLSAgIGBNU0lWaWV3R2V0Q29sdW1uSW5mbyA8aHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9saWJyYXJ5L2RlZmF1bHQuYXNwP3VybD0vbGlicmFyeS9lbi11cy9tc2kvc2V0dXAvbXNpdmlld2dldGNvbHVtbmluZm8uYXNwPmBfCi0gICBgTXNpVmlld0ZldGNoIDxodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2xpYnJhcnkvZGVmYXVsdC5hc3A/dXJsPS9saWJyYXJ5L2VuLXVzL21zaS9zZXR1cC9tc2l2aWV3ZmV0Y2guYXNwPmBfCi0gICBgTXNpVmlld01vZGlmeSA8aHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9saWJyYXJ5L2RlZmF1bHQuYXNwP3VybD0vbGlicmFyeS9lbi11cy9tc2kvc2V0dXAvbXNpdmlld21vZGlmeS5hc3A+YF8KLSAgIGBNc2lWaWV3Q2xvc2UgPGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vbGlicmFyeS9kZWZhdWx0LmFzcD91cmw9L2xpYnJhcnkvZW4tdXMvbXNpL3NldHVwL21zaXZpZXdjbG9zZS5hc3A+YF8KKyAgIGBNc2lWaWV3RXhlY3V0ZSA8aHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9saWJyYXJ5P3VybD0vbGlicmFyeS9lbi11cy9tc2kvc2V0dXAvbXNpdmlld2V4ZWN1dGUuYXNwPmBfCisgICBgTVNJVmlld0dldENvbHVtbkluZm8gPGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vbGlicmFyeT91cmw9L2xpYnJhcnkvZW4tdXMvbXNpL3NldHVwL21zaXZpZXdnZXRjb2x1bW5pbmZvLmFzcD5gXworICAgYE1zaVZpZXdGZXRjaCA8aHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9saWJyYXJ5P3VybD0vbGlicmFyeS9lbi11cy9tc2kvc2V0dXAvbXNpdmlld2ZldGNoLmFzcD5gXworICAgYE1zaVZpZXdNb2RpZnkgPGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vbGlicmFyeT91cmw9L2xpYnJhcnkvZW4tdXMvbXNpL3NldHVwL21zaXZpZXdtb2RpZnkuYXNwPmBfCisgICBgTXNpVmlld0Nsb3NlIDxodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2xpYnJhcnk/dXJsPS9saWJyYXJ5L2VuLXVzL21zaS9zZXR1cC9tc2l2aWV3Y2xvc2UuYXNwPmBfCiAKIC4uIF9zdW1tYXJ5LW9iamVjdHM6CiAKQEAgLTI0MywxMCArMjQzLDEwIEBACiAKIC4uIHNlZWFsc286OgogCi0gICBgTXNpU3VtbWFyeUluZm9HZXRQcm9wZXJ0eSA8aHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9saWJyYXJ5L2RlZmF1bHQuYXNwP3VybD0vbGlicmFyeS9lbi11cy9tc2kvc2V0dXAvbXNpc3VtbWFyeWluZm9nZXRwcm9wZXJ0eS5hc3A+YF8KLSAgIGBNc2lTdW1tYXJ5SW5mb0dldFByb3BlcnR5Q291bnQgPGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vbGlicmFyeS9kZWZhdWx0LmFzcD91cmw9L2xpYnJhcnkvZW4tdXMvbXNpL3NldHVwL21zaXN1bW1hcnlpbmZvZ2V0cHJvcGVydHljb3VudC5hc3A+YF8KLSAgIGBNc2lTdW1tYXJ5SW5mb1NldFByb3BlcnR5IDxodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2xpYnJhcnkvZGVmYXVsdC5hc3A/dXJsPS9saWJyYXJ5L2VuLXVzL21zaS9zZXR1cC9tc2lzdW1tYXJ5aW5mb3NldHByb3BlcnR5LmFzcD5gXwotICAgYE1zaVN1bW1hcnlJbmZvUGVyc2lzdCA8aHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9saWJyYXJ5L2RlZmF1bHQuYXNwP3VybD0vbGlicmFyeS9lbi11cy9tc2kvc2V0dXAvbXNpc3VtbWFyeWluZm9wZXJzaXN0LmFzcD5gXworICAgYE1zaVN1bW1hcnlJbmZvR2V0UHJvcGVydHkgPGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vbGlicmFyeT91cmw9L2xpYnJhcnkvZW4tdXMvbXNpL3NldHVwL21zaXN1bW1hcnlpbmZvZ2V0cHJvcGVydHkuYXNwPmBfCisgICBgTXNpU3VtbWFyeUluZm9HZXRQcm9wZXJ0eUNvdW50IDxodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2xpYnJhcnk/dXJsPS9saWJyYXJ5L2VuLXVzL21zaS9zZXR1cC9tc2lzdW1tYXJ5aW5mb2dldHByb3BlcnR5Y291bnQuYXNwPmBfCisgICBgTXNpU3VtbWFyeUluZm9TZXRQcm9wZXJ0eSA8aHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9saWJyYXJ5P3VybD0vbGlicmFyeS9lbi11cy9tc2kvc2V0dXAvbXNpc3VtbWFyeWluZm9zZXRwcm9wZXJ0eS5hc3A+YF8KKyAgIGBNc2lTdW1tYXJ5SW5mb1BlcnNpc3QgPGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vbGlicmFyeT91cmw9L2xpYnJhcnkvZW4tdXMvbXNpL3NldHVwL21zaXN1bW1hcnlpbmZvcGVyc2lzdC5hc3A+YF8KIAogLi4gX3JlY29yZC1vYmplY3RzOgogCkBAIC0yOTcsMTEgKzI5NywxMSBAQAogCiAuLiBzZWVhbHNvOjoKIAotICAgYE1zaVJlY29yZEdldEZpZWxkQ291bnQgPGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vbGlicmFyeS9kZWZhdWx0LmFzcD91cmw9L2xpYnJhcnkvZW4tdXMvbXNpL3NldHVwL21zaXJlY29yZGdldGZpZWxkY291bnQuYXNwPmBfCi0gICBgTXNpUmVjb3JkU2V0U3RyaW5nIDxodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2xpYnJhcnkvZGVmYXVsdC5hc3A/dXJsPS9saWJyYXJ5L2VuLXVzL21zaS9zZXR1cC9tc2lyZWNvcmRzZXRzdHJpbmcuYXNwPmBfCi0gICBgTXNpUmVjb3JkU2V0U3RyZWFtIDxodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2xpYnJhcnkvZGVmYXVsdC5hc3A/dXJsPS9saWJyYXJ5L2VuLXVzL21zaS9zZXR1cC9tc2lyZWNvcmRzZXRzdHJlYW0uYXNwPmBfCi0gICBgTXNpUmVjb3JkU2V0SW50ZWdlciA8aHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9saWJyYXJ5L2RlZmF1bHQuYXNwP3VybD0vbGlicmFyeS9lbi11cy9tc2kvc2V0dXAvbXNpcmVjb3Jkc2V0aW50ZWdlci5hc3A+YF8KLSAgIGBNc2lSZWNvcmRDbGVhciA8aHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9saWJyYXJ5L2RlZmF1bHQuYXNwP3VybD0vbGlicmFyeS9lbi11cy9tc2kvc2V0dXAvbXNpcmVjb3JkY2xlYXIuYXNwPmBfCisgICBgTXNpUmVjb3JkR2V0RmllbGRDb3VudCA8aHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9saWJyYXJ5P3VybD0vbGlicmFyeS9lbi11cy9tc2kvc2V0dXAvbXNpcmVjb3JkZ2V0ZmllbGRjb3VudC5hc3A+YF8KKyAgIGBNc2lSZWNvcmRTZXRTdHJpbmcgPGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vbGlicmFyeT91cmw9L2xpYnJhcnkvZW4tdXMvbXNpL3NldHVwL21zaXJlY29yZHNldHN0cmluZy5hc3A+YF8KKyAgIGBNc2lSZWNvcmRTZXRTdHJlYW0gPGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vbGlicmFyeT91cmw9L2xpYnJhcnkvZW4tdXMvbXNpL3NldHVwL21zaXJlY29yZHNldHN0cmVhbS5hc3A+YF8KKyAgIGBNc2lSZWNvcmRTZXRJbnRlZ2VyIDxodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2xpYnJhcnk/dXJsPS9saWJyYXJ5L2VuLXVzL21zaS9zZXR1cC9tc2lyZWNvcmRzZXRpbnRlZ2VyLmFzcD5gXworICAgYE1zaVJlY29yZENsZWFyIDxodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2xpYnJhcnk/dXJsPS9saWJyYXJ5L2VuLXVzL21zaS9zZXR1cC9tc2lyZWNvcmRjbGVhci5hc3A+YF8KIAogLi4gX21zaS1lcnJvcnM6CiAKQEAgLTM5MywxMCArMzkzLDEwIEBACiAKIC4uIHNlZWFsc286OgogCi0gICBgRGlyZWN0b3J5IFRhYmxlIDxodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2xpYnJhcnkvZGVmYXVsdC5hc3A/dXJsPS9saWJyYXJ5L2VuLXVzL21zaS9zZXR1cC9kaXJlY3RvcnlfdGFibGUuYXNwPmBfCi0gICBgRmlsZSBUYWJsZSA8aHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9saWJyYXJ5L2RlZmF1bHQuYXNwP3VybD0vbGlicmFyeS9lbi11cy9tc2kvc2V0dXAvZmlsZV90YWJsZS5hc3A+YF8KLSAgIGBDb21wb25lbnQgVGFibGUgPGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vbGlicmFyeS9kZWZhdWx0LmFzcD91cmw9L2xpYnJhcnkvZW4tdXMvbXNpL3NldHVwL2NvbXBvbmVudF90YWJsZS5hc3A+YF8KLSAgIGBGZWF0dXJlQ29tcG9uZW50cyBUYWJsZSA8aHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9saWJyYXJ5L2RlZmF1bHQuYXNwP3VybD0vbGlicmFyeS9lbi11cy9tc2kvc2V0dXAvZmVhdHVyZWNvbXBvbmVudHNfdGFibGUuYXNwPmBfCisgICBgRGlyZWN0b3J5IFRhYmxlIDxodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2xpYnJhcnk/dXJsPS9saWJyYXJ5L2VuLXVzL21zaS9zZXR1cC9kaXJlY3RvcnlfdGFibGUuYXNwPmBfCisgICBgRmlsZSBUYWJsZSA8aHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9saWJyYXJ5P3VybD0vbGlicmFyeS9lbi11cy9tc2kvc2V0dXAvZmlsZV90YWJsZS5hc3A+YF8KKyAgIGBDb21wb25lbnQgVGFibGUgPGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vbGlicmFyeT91cmw9L2xpYnJhcnkvZW4tdXMvbXNpL3NldHVwL2NvbXBvbmVudF90YWJsZS5hc3A+YF8KKyAgIGBGZWF0dXJlQ29tcG9uZW50cyBUYWJsZSA8aHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9saWJyYXJ5P3VybD0vbGlicmFyeS9lbi11cy9tc2kvc2V0dXAvZmVhdHVyZWNvbXBvbmVudHNfdGFibGUuYXNwPmBfCiAKIC4uIF9mZWF0dXJlczoKIApAQCAtNDIxLDcgKzQyMSw3IEBACiAKIC4uIHNlZWFsc286OgogCi0gICBgRmVhdHVyZSBUYWJsZSA8aHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9saWJyYXJ5L2RlZmF1bHQuYXNwP3VybD0vbGlicmFyeS9lbi11cy9tc2kvc2V0dXAvZmVhdHVyZV90YWJsZS5hc3A+YF8KKyAgIGBGZWF0dXJlIFRhYmxlIDxodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2xpYnJhcnk/dXJsPS9saWJyYXJ5L2VuLXVzL21zaS9zZXR1cC9mZWF0dXJlX3RhYmxlLmFzcD5gXwogCiAuLiBfbXNpLWd1aToKIApAQCAtNTE2LDEzICs1MTYsMTMgQEAKIAogLi4gc2VlYWxzbzo6CiAKLSAgIGBEaWFsb2cgVGFibGUgPGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vbGlicmFyeS9kZWZhdWx0LmFzcD91cmw9L2xpYnJhcnkvZW4tdXMvbXNpL3NldHVwL2RpYWxvZ190YWJsZS5hc3A+YF8KLSAgIGBDb250cm9sIFRhYmxlIDxodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2xpYnJhcnkvZGVmYXVsdC5hc3A/dXJsPS9saWJyYXJ5L2VuLXVzL21zaS9zZXR1cC9jb250cm9sX3RhYmxlLmFzcD5gXwotICAgYENvbnRyb2wgVHlwZXMgPGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vbGlicmFyeS9kZWZhdWx0LmFzcD91cmw9L2xpYnJhcnkvZW4tdXMvbXNpL3NldHVwL2NvbnRyb2xzLmFzcD5gXwotICAgYENvbnRyb2xDb25kaXRpb24gVGFibGUgPGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vbGlicmFyeS9kZWZhdWx0LmFzcD91cmw9L2xpYnJhcnkvZW4tdXMvbXNpL3NldHVwL2NvbnRyb2xjb25kaXRpb25fdGFibGUuYXNwPmBfCi0gICBgQ29udHJvbEV2ZW50IFRhYmxlIDxodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2xpYnJhcnkvZGVmYXVsdC5hc3A/dXJsPS9saWJyYXJ5L2VuLXVzL21zaS9zZXR1cC9jb250cm9sZXZlbnRfdGFibGUuYXNwPmBfCi0gICBgRXZlbnRNYXBwaW5nIFRhYmxlIDxodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2xpYnJhcnkvZGVmYXVsdC5hc3A/dXJsPS9saWJyYXJ5L2VuLXVzL21zaS9zZXR1cC9ldmVudG1hcHBpbmdfdGFibGUuYXNwPmBfCi0gICBgUmFkaW9CdXR0b24gVGFibGUgPGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vbGlicmFyeS9kZWZhdWx0LmFzcD91cmw9L2xpYnJhcnkvZW4tdXMvbXNpL3NldHVwL3JhZGlvYnV0dG9uX3RhYmxlLmFzcD5gXworICAgYERpYWxvZyBUYWJsZSA8aHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9saWJyYXJ5P3VybD0vbGlicmFyeS9lbi11cy9tc2kvc2V0dXAvZGlhbG9nX3RhYmxlLmFzcD5gXworICAgYENvbnRyb2wgVGFibGUgPGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vbGlicmFyeT91cmw9L2xpYnJhcnkvZW4tdXMvbXNpL3NldHVwL2NvbnRyb2xfdGFibGUuYXNwPmBfCisgICBgQ29udHJvbCBUeXBlcyA8aHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9saWJyYXJ5P3VybD0vbGlicmFyeS9lbi11cy9tc2kvc2V0dXAvY29udHJvbHMuYXNwPmBfCisgICBgQ29udHJvbENvbmRpdGlvbiBUYWJsZSA8aHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9saWJyYXJ5P3VybD0vbGlicmFyeS9lbi11cy9tc2kvc2V0dXAvY29udHJvbGNvbmRpdGlvbl90YWJsZS5hc3A+YF8KKyAgIGBDb250cm9sRXZlbnQgVGFibGUgPGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vbGlicmFyeT91cmw9L2xpYnJhcnkvZW4tdXMvbXNpL3NldHVwL2NvbnRyb2xldmVudF90YWJsZS5hc3A+YF8KKyAgIGBFdmVudE1hcHBpbmcgVGFibGUgPGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vbGlicmFyeT91cmw9L2xpYnJhcnkvZW4tdXMvbXNpL3NldHVwL2V2ZW50bWFwcGluZ190YWJsZS5hc3A+YF8KKyAgIGBSYWRpb0J1dHRvbiBUYWJsZSA8aHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9saWJyYXJ5P3VybD0vbGlicmFyeS9lbi11cy9tc2kvc2V0dXAvcmFkaW9idXR0b25fdGFibGUuYXNwPmBfCiAKIC4uIF9tc2ktdGFibGVzOgogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9tc3ZjcnQucnN0IGIvRG9jL2xpYnJhcnkvbXN2Y3J0LnJzdAppbmRleCA5ZDIzNzIwLi5mYWRhZjA1IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9tc3ZjcnQucnN0CisrKyBiL0RvYy9saWJyYXJ5L21zdmNydC5yc3QKQEAgLTE4LDcgKzE4LDcgQEAKIFRoZSBtb2R1bGUgaW1wbGVtZW50cyBib3RoIHRoZSBub3JtYWwgYW5kIHdpZGUgY2hhciB2YXJpYW50cyBvZiB0aGUgY29uc29sZSBJL08KIGFwaS4gVGhlIG5vcm1hbCBBUEkgZGVhbHMgb25seSB3aXRoIEFTQ0lJIGNoYXJhY3RlcnMgYW5kIGlzIG9mIGxpbWl0ZWQgdXNlCiBmb3IgaW50ZXJuYXRpb25hbGl6ZWQgYXBwbGljYXRpb25zLiBUaGUgd2lkZSBjaGFyIEFQSSBzaG91bGQgYmUgdXNlZCB3aGVyZQotZXZlciBwb3NzaWJsZQorZXZlciBwb3NzaWJsZS4KIAogLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKICAgIE9wZXJhdGlvbnMgaW4gdGhpcyBtb2R1bGUgbm93IHJhaXNlIDpleGM6YE9TRXJyb3JgIHdoZXJlIDpleGM6YElPRXJyb3JgCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcucnN0IGIvRG9jL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLnJzdAppbmRleCA1ZjUwY2YxLi5mN2RjMTFiIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcucnN0CisrKyBiL0RvYy9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5yc3QKQEAgLTE2LDQxICsxNiwyNyBAQAogbGV2ZXJhZ2UgbXVsdGlwbGUgcHJvY2Vzc29ycyBvbiBhIGdpdmVuIG1hY2hpbmUuICBJdCBydW5zIG9uIGJvdGggVW5peCBhbmQKIFdpbmRvd3MuCiAKLS4uIG5vdGU6OgorVGhlIDptb2Q6YG11bHRpcHJvY2Vzc2luZ2AgbW9kdWxlIGFsc28gaW50cm9kdWNlcyBBUElzIHdoaWNoIGRvIG5vdCBoYXZlCithbmFsb2dzIGluIHRoZSA6bW9kOmB0aHJlYWRpbmdgIG1vZHVsZS4gIEEgcHJpbWUgZXhhbXBsZSBvZiB0aGlzIGlzIHRoZQorOmNsYXNzOmB+bXVsdGlwcm9jZXNzaW5nLnBvb2wuUG9vbGAgb2JqZWN0IHdoaWNoIG9mZmVycyBhIGNvbnZlbmllbnQgbWVhbnMgb2YKK3BhcmFsbGVsaXppbmcgdGhlIGV4ZWN1dGlvbiBvZiBhIGZ1bmN0aW9uIGFjcm9zcyBtdWx0aXBsZSBpbnB1dCB2YWx1ZXMsCitkaXN0cmlidXRpbmcgdGhlIGlucHV0IGRhdGEgYWNyb3NzIHByb2Nlc3NlcyAoZGF0YSBwYXJhbGxlbGlzbSkuICBUaGUgZm9sbG93aW5nCitleGFtcGxlIGRlbW9uc3RyYXRlcyB0aGUgY29tbW9uIHByYWN0aWNlIG9mIGRlZmluaW5nIHN1Y2ggZnVuY3Rpb25zIGluIGEgbW9kdWxlCitzbyB0aGF0IGNoaWxkIHByb2Nlc3NlcyBjYW4gc3VjY2Vzc2Z1bGx5IGltcG9ydCB0aGF0IG1vZHVsZS4gIFRoaXMgYmFzaWMgZXhhbXBsZQorb2YgZGF0YSBwYXJhbGxlbGlzbSB1c2luZyA6Y2xhc3M6YH5tdWx0aXByb2Nlc3NpbmcucG9vbC5Qb29sYCwgOjoKIAotICAgIFNvbWUgb2YgdGhpcyBwYWNrYWdlJ3MgZnVuY3Rpb25hbGl0eSByZXF1aXJlcyBhIGZ1bmN0aW9uaW5nIHNoYXJlZCBzZW1hcGhvcmUKLSAgICBpbXBsZW1lbnRhdGlvbiBvbiB0aGUgaG9zdCBvcGVyYXRpbmcgc3lzdGVtLiBXaXRob3V0IG9uZSwgdGhlCi0gICAgOm1vZDpgbXVsdGlwcm9jZXNzaW5nLnN5bmNocm9uaXplYCBtb2R1bGUgd2lsbCBiZSBkaXNhYmxlZCwgYW5kIGF0dGVtcHRzIHRvCi0gICAgaW1wb3J0IGl0IHdpbGwgcmVzdWx0IGluIGFuIDpleGM6YEltcG9ydEVycm9yYC4gU2VlCi0gICAgOmlzc3VlOmAzNzcwYCBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi4KKyAgIGZyb20gbXVsdGlwcm9jZXNzaW5nIGltcG9ydCBQb29sCiAKLS4uIG5vdGU6OgorICAgZGVmIGYoeCk6CisgICAgICAgcmV0dXJuIHgqeAogCi0gICAgRnVuY3Rpb25hbGl0eSB3aXRoaW4gdGhpcyBwYWNrYWdlIHJlcXVpcmVzIHRoYXQgdGhlIGBgX19tYWluX19gYCBtb2R1bGUgYmUKLSAgICBpbXBvcnRhYmxlIGJ5IHRoZSBjaGlsZHJlbi4gVGhpcyBpcyBjb3ZlcmVkIGluIDpyZWY6YG11bHRpcHJvY2Vzc2luZy1wcm9ncmFtbWluZ2AKLSAgICBob3dldmVyIGl0IGlzIHdvcnRoIHBvaW50aW5nIG91dCBoZXJlLiBUaGlzIG1lYW5zIHRoYXQgc29tZSBleGFtcGxlcywgc3VjaAotICAgIGFzIHRoZSA6Y2xhc3M6YG11bHRpcHJvY2Vzc2luZy5wb29sLlBvb2xgIGV4YW1wbGVzIHdpbGwgbm90IHdvcmsgaW4gdGhlCi0gICAgaW50ZXJhY3RpdmUgaW50ZXJwcmV0ZXIuIEZvciBleGFtcGxlOjoKKyAgIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgICAgd2l0aCBQb29sKDUpIGFzIHA6CisgICAgICAgICAgIHByaW50KHAubWFwKGYsIFsxLCAyLCAzXSkpCiAKLSAgICAgICAgPj4+IGZyb20gbXVsdGlwcm9jZXNzaW5nIGltcG9ydCBQb29sCi0gICAgICAgID4+PiBwID0gUG9vbCg1KQotICAgICAgICA+Pj4gZGVmIGYoeCk6Ci0gICAgICAgIC4uLiAgICAgcmV0dXJuIHgqeAotICAgICAgICAuLi4KLSAgICAgICAgPj4+IHAubWFwKGYsIFsxLDIsM10pCi0gICAgICAgIFByb2Nlc3MgUG9vbFdvcmtlci0xOgotICAgICAgICBQcm9jZXNzIFBvb2xXb3JrZXItMjoKLSAgICAgICAgUHJvY2VzcyBQb29sV29ya2VyLTM6Ci0gICAgICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKLSAgICAgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgotICAgICAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6Ci0gICAgICAgIEF0dHJpYnV0ZUVycm9yOiAnbW9kdWxlJyBvYmplY3QgaGFzIG5vIGF0dHJpYnV0ZSAnZicKLSAgICAgICAgQXR0cmlidXRlRXJyb3I6ICdtb2R1bGUnIG9iamVjdCBoYXMgbm8gYXR0cmlidXRlICdmJwotICAgICAgICBBdHRyaWJ1dGVFcnJvcjogJ21vZHVsZScgb2JqZWN0IGhhcyBubyBhdHRyaWJ1dGUgJ2YnCit3aWxsIHByaW50IHRvIHN0YW5kYXJkIG91dHB1dCA6OgogCi0gICAgKElmIHlvdSB0cnkgdGhpcyBpdCB3aWxsIGFjdHVhbGx5IG91dHB1dCB0aHJlZSBmdWxsIHRyYWNlYmFja3MKLSAgICBpbnRlcmxlYXZlZCBpbiBhIHNlbWktcmFuZG9tIGZhc2hpb24sIGFuZCB0aGVuIHlvdSBtYXkgaGF2ZSB0bwotICAgIHN0b3AgdGhlIG1hc3RlciBwcm9jZXNzIHNvbWVob3cuKQorICAgWzEsIDQsIDldCiAKIAogVGhlIDpjbGFzczpgUHJvY2Vzc2AgY2xhc3MKQEAgLTc5LDggKzY1LDcgQEAKICAgICBkZWYgaW5mbyh0aXRsZSk6CiAgICAgICAgIHByaW50KHRpdGxlKQogICAgICAgICBwcmludCgnbW9kdWxlIG5hbWU6JywgX19uYW1lX18pCi0gICAgICAgIGlmIGhhc2F0dHIob3MsICdnZXRwcGlkJyk6ICAjIG9ubHkgYXZhaWxhYmxlIG9uIFVuaXgKLSAgICAgICAgICAgIHByaW50KCdwYXJlbnQgcHJvY2VzczonLCBvcy5nZXRwcGlkKCkpCisgICAgICAgIHByaW50KCdwYXJlbnQgcHJvY2VzczonLCBvcy5nZXRwcGlkKCkpCiAgICAgICAgIHByaW50KCdwcm9jZXNzIGlkOicsIG9zLmdldHBpZCgpKQogCiAgICAgZGVmIGYobmFtZSk6CkBAIC05MywxMSArNzgsMTEyIEBACiAgICAgICAgIHAuc3RhcnQoKQogICAgICAgICBwLmpvaW4oKQogCi1Gb3IgYW4gZXhwbGFuYXRpb24gb2Ygd2h5IChvbiBXaW5kb3dzKSB0aGUgYGBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nYGAgcGFydCBpcworRm9yIGFuIGV4cGxhbmF0aW9uIG9mIHdoeSB0aGUgYGBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nYGAgcGFydCBpcwogbmVjZXNzYXJ5LCBzZWUgOnJlZjpgbXVsdGlwcm9jZXNzaW5nLXByb2dyYW1taW5nYC4KIAogCiAKK0NvbnRleHRzIGFuZCBzdGFydCBtZXRob2RzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCisuLiBfbXVsdGlwcm9jZXNzaW5nLXN0YXJ0LW1ldGhvZHM6CisKK0RlcGVuZGluZyBvbiB0aGUgcGxhdGZvcm0sIDptb2Q6YG11bHRpcHJvY2Vzc2luZ2Agc3VwcG9ydHMgdGhyZWUgd2F5cwordG8gc3RhcnQgYSBwcm9jZXNzLiAgVGhlc2UgKnN0YXJ0IG1ldGhvZHMqIGFyZQorCisgICpzcGF3bioKKyAgICBUaGUgcGFyZW50IHByb2Nlc3Mgc3RhcnRzIGEgZnJlc2ggcHl0aG9uIGludGVycHJldGVyIHByb2Nlc3MuICBUaGUKKyAgICBjaGlsZCBwcm9jZXNzIHdpbGwgb25seSBpbmhlcml0IHRob3NlIHJlc291cmNlcyBuZWNlc3NhcnkgdG8gcnVuCisgICAgdGhlIHByb2Nlc3Mgb2JqZWN0cyA6bWV0aDpgflByb2Nlc3MucnVuYCBtZXRob2QuICBJbiBwYXJ0aWN1bGFyLAorICAgIHVubmVjZXNzYXJ5IGZpbGUgZGVzY3JpcHRvcnMgYW5kIGhhbmRsZXMgZnJvbSB0aGUgcGFyZW50IHByb2Nlc3MKKyAgICB3aWxsIG5vdCBiZSBpbmhlcml0ZWQuICBTdGFydGluZyBhIHByb2Nlc3MgdXNpbmcgdGhpcyBtZXRob2QgaXMKKyAgICByYXRoZXIgc2xvdyBjb21wYXJlZCB0byB1c2luZyAqZm9yayogb3IgKmZvcmtzZXJ2ZXIqLgorCisgICAgQXZhaWxhYmxlIG9uIFVuaXggYW5kIFdpbmRvd3MuICBUaGUgZGVmYXVsdCBvbiBXaW5kb3dzLgorCisgICpmb3JrKgorICAgIFRoZSBwYXJlbnQgcHJvY2VzcyB1c2VzIDpmdW5jOmBvcy5mb3JrYCB0byBmb3JrIHRoZSBQeXRob24KKyAgICBpbnRlcnByZXRlci4gIFRoZSBjaGlsZCBwcm9jZXNzLCB3aGVuIGl0IGJlZ2lucywgaXMgZWZmZWN0aXZlbHkKKyAgICBpZGVudGljYWwgdG8gdGhlIHBhcmVudCBwcm9jZXNzLiAgQWxsIHJlc291cmNlcyBvZiB0aGUgcGFyZW50IGFyZQorICAgIGluaGVyaXRlZCBieSB0aGUgY2hpbGQgcHJvY2Vzcy4gIE5vdGUgdGhhdCBzYWZlbHkgZm9ya2luZyBhCisgICAgbXVsdGl0aHJlYWRlZCBwcm9jZXNzIGlzIHByb2JsZW1hdGljLgorCisgICAgQXZhaWxhYmxlIG9uIFVuaXggb25seS4gIFRoZSBkZWZhdWx0IG9uIFVuaXguCisKKyAgKmZvcmtzZXJ2ZXIqCisgICAgV2hlbiB0aGUgcHJvZ3JhbSBzdGFydHMgYW5kIHNlbGVjdHMgdGhlICpmb3Jrc2VydmVyKiBzdGFydCBtZXRob2QsCisgICAgYSBzZXJ2ZXIgcHJvY2VzcyBpcyBzdGFydGVkLiAgRnJvbSB0aGVuIG9uLCB3aGVuZXZlciBhIG5ldyBwcm9jZXNzCisgICAgaXMgbmVlZGVkLCB0aGUgcGFyZW50IHByb2Nlc3MgY29ubmVjdHMgdG8gdGhlIHNlcnZlciBhbmQgcmVxdWVzdHMKKyAgICB0aGF0IGl0IGZvcmsgYSBuZXcgcHJvY2Vzcy4gIFRoZSBmb3JrIHNlcnZlciBwcm9jZXNzIGlzIHNpbmdsZQorICAgIHRocmVhZGVkIHNvIGl0IGlzIHNhZmUgZm9yIGl0IHRvIHVzZSA6ZnVuYzpgb3MuZm9ya2AuICBObworICAgIHVubmVjZXNzYXJ5IHJlc291cmNlcyBhcmUgaW5oZXJpdGVkLgorCisgICAgQXZhaWxhYmxlIG9uIFVuaXggcGxhdGZvcm1zIHdoaWNoIHN1cHBvcnQgcGFzc2luZyBmaWxlIGRlc2NyaXB0b3JzCisgICAgb3ZlciBVbml4IHBpcGVzLgorCisuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgKnNwYXduKiBhZGRlZCBvbiBhbGwgdW5peCBwbGF0Zm9ybXMsIGFuZCAqZm9ya3NlcnZlciogYWRkZWQgZm9yCisgICBzb21lIHVuaXggcGxhdGZvcm1zLgorICAgQ2hpbGQgcHJvY2Vzc2VzIG5vIGxvbmdlciBpbmhlcml0IGFsbCBvZiB0aGUgcGFyZW50cyBpbmhlcml0YWJsZQorICAgaGFuZGxlcyBvbiBXaW5kb3dzLgorCitPbiBVbml4IHVzaW5nIHRoZSAqc3Bhd24qIG9yICpmb3Jrc2VydmVyKiBzdGFydCBtZXRob2RzIHdpbGwgYWxzbworc3RhcnQgYSAqc2VtYXBob3JlIHRyYWNrZXIqIHByb2Nlc3Mgd2hpY2ggdHJhY2tzIHRoZSB1bmxpbmtlZCBuYW1lZAorc2VtYXBob3JlcyBjcmVhdGVkIGJ5IHByb2Nlc3NlcyBvZiB0aGUgcHJvZ3JhbS4gIFdoZW4gYWxsIHByb2Nlc3NlcworaGF2ZSBleGl0ZWQgdGhlIHNlbWFwaG9yZSB0cmFja2VyIHVubGlua3MgYW55IHJlbWFpbmluZyBzZW1hcGhvcmVzLgorVXN1YWxseSB0aGVyZSBzaG91bGQgYmUgbm9uZSwgYnV0IGlmIGEgcHJvY2VzcyB3YXMga2lsbGVkIGJ5IGEgc2lnbmFsCit0aGVyZSBtYXkgc29tZSAibGVha2VkIiBzZW1hcGhvcmVzLiAgKFVubGlua2luZyB0aGUgbmFtZWQgc2VtYXBob3JlcworaXMgYSBzZXJpb3VzIG1hdHRlciBzaW5jZSB0aGUgc3lzdGVtIGFsbG93cyBvbmx5IGEgbGltaXRlZCBudW1iZXIsIGFuZAordGhleSB3aWxsIG5vdCBiZSBhdXRvbWF0aWNhbGx5IHVubGlua2VkIHVudGlsIHRoZSBuZXh0IHJlYm9vdC4pCisKK1RvIHNlbGVjdCBhIHN0YXJ0IG1ldGhvZCB5b3UgdXNlIHRoZSA6ZnVuYzpgc2V0X3N0YXJ0X21ldGhvZGAgaW4KK3RoZSBgYGlmIF9fbmFtZV9fID09ICdfX21haW5fXydgYCBjbGF1c2Ugb2YgdGhlIG1haW4gbW9kdWxlLiAgRm9yCitleGFtcGxlOjoKKworICAgICAgIGltcG9ydCBtdWx0aXByb2Nlc3NpbmcgYXMgbXAKKworICAgICAgIGRlZiBmb28ocSk6CisgICAgICAgICAgIHEucHV0KCdoZWxsbycpCisKKyAgICAgICBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgICAgICAgICBtcC5zZXRfc3RhcnRfbWV0aG9kKCdzcGF3bicpCisgICAgICAgICAgIHEgPSBtcC5RdWV1ZSgpCisgICAgICAgICAgIHAgPSBtcC5Qcm9jZXNzKHRhcmdldD1mb28sIGFyZ3M9KHEsKSkKKyAgICAgICAgICAgcC5zdGFydCgpCisgICAgICAgICAgIHByaW50KHEuZ2V0KCkpCisgICAgICAgICAgIHAuam9pbigpCisKKzpmdW5jOmBzZXRfc3RhcnRfbWV0aG9kYCBzaG91bGQgbm90IGJlIHVzZWQgbW9yZSB0aGFuIG9uY2UgaW4gdGhlCitwcm9ncmFtLgorCitBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIHVzZSA6ZnVuYzpgZ2V0X2NvbnRleHRgIHRvIG9idGFpbiBhIGNvbnRleHQKK29iamVjdC4gIENvbnRleHQgb2JqZWN0cyBoYXZlIHRoZSBzYW1lIEFQSSBhcyB0aGUgbXVsdGlwcm9jZXNzaW5nCittb2R1bGUsIGFuZCBhbGxvdyBvbmUgdG8gdXNlIG11bHRpcGxlIHN0YXJ0IG1ldGhvZHMgaW4gdGhlIHNhbWUKK3Byb2dyYW0uIDo6CisKKyAgICAgICBpbXBvcnQgbXVsdGlwcm9jZXNzaW5nIGFzIG1wCisKKyAgICAgICBkZWYgZm9vKHEpOgorICAgICAgICAgICBxLnB1dCgnaGVsbG8nKQorCisgICAgICAgaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICAgICAgICAgY3R4ID0gbXAuZ2V0X2NvbnRleHQoJ3NwYXduJykKKyAgICAgICAgICAgcSA9IGN0eC5RdWV1ZSgpCisgICAgICAgICAgIHAgPSBjdHguUHJvY2Vzcyh0YXJnZXQ9Zm9vLCBhcmdzPShxLCkpCisgICAgICAgICAgIHAuc3RhcnQoKQorICAgICAgICAgICBwcmludChxLmdldCgpKQorICAgICAgICAgICBwLmpvaW4oKQorCitOb3RlIHRoYXQgb2JqZWN0cyByZWxhdGVkIHRvIG9uZSBjb250ZXh0IG1heSBub3QgYmUgY29tcGF0aWJsZSB3aXRoCitwcm9jZXNzZXMgZm9yIGEgZGlmZmVyZW50IGNvbnRleHQuICBJbiBwYXJ0aWN1bGFyLCBsb2NrcyBjcmVhdGVkIHVzaW5nCit0aGUgKmZvcmsqIGNvbnRleHQgY2Fubm90IGJlIHBhc3NlZCB0byBhIHByb2Nlc3NlcyBzdGFydGVkIHVzaW5nIHRoZQorKnNwYXduKiBvciAqZm9ya3NlcnZlciogc3RhcnQgbWV0aG9kcy4KKworQSBsaWJyYXJ5IHdoaWNoIHdhbnRzIHRvIHVzZSBhIHBhcnRpY3VsYXIgc3RhcnQgbWV0aG9kIHNob3VsZCBwcm9iYWJseQordXNlIDpmdW5jOmBnZXRfY29udGV4dGAgdG8gYXZvaWQgaW50ZXJmZXJpbmcgd2l0aCB0aGUgY2hvaWNlIG9mIHRoZQorbGlicmFyeSB1c2VyLgorCisKIEV4Y2hhbmdpbmcgb2JqZWN0cyBiZXR3ZWVuIHByb2Nlc3Nlcwogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CiAKQEAgLTE2MSw4ICsyNDcsMTAgQEAKIAogICAgZGVmIGYobCwgaSk6CiAgICAgICAgbC5hY3F1aXJlKCkKLSAgICAgICBwcmludCgnaGVsbG8gd29ybGQnLCBpKQotICAgICAgIGwucmVsZWFzZSgpCisgICAgICAgdHJ5OgorICAgICAgICAgICBwcmludCgnaGVsbG8gd29ybGQnLCBpKQorICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgIGwucmVsZWFzZSgpCiAKICAgIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgICAgbG9jayA9IExvY2soKQpAQCAtMjc0LDE5ICszNjIsNjMgQEAKIEZvciBleGFtcGxlOjoKIAogICAgZnJvbSBtdWx0aXByb2Nlc3NpbmcgaW1wb3J0IFBvb2wKKyAgIGZyb20gdGltZSBpbXBvcnQgc2xlZXAKIAogICAgZGVmIGYoeCk6CiAgICAgICAgcmV0dXJuIHgqeAogCiAgICBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgICAgIHdpdGggUG9vbChwcm9jZXNzZXM9NCkgYXMgcG9vbDogICAgICAgICMgc3RhcnQgNCB3b3JrZXIgcHJvY2Vzc2VzCi0gICAgICAgICAgIHJlc3VsdCA9IHBvb2wuYXBwbHlfYXN5bmMoZiwgWzEwXSkgIyBldmFsdWF0ZSAiZigxMCkiIGFzeW5jaHJvbm91c2x5Ci0gICAgICAgICAgIHByaW50KHJlc3VsdC5nZXQodGltZW91dD0xKSkgICAgICAgIyBwcmludHMgIjEwMCIgdW5sZXNzIHlvdXIgY29tcHV0ZXIgaXMgKnZlcnkqIHNsb3cKLSAgICAgICAgICAgcHJpbnQocG9vbC5tYXAoZiwgcmFuZ2UoMTApKSkgICAgICAjIHByaW50cyAiWzAsIDEsIDQsLi4uLCA4MV0iCisgICAgICAgIyBzdGFydCA0IHdvcmtlciBwcm9jZXNzZXMKKyAgICAgICB3aXRoIFBvb2wocHJvY2Vzc2VzPTQpIGFzIHBvb2w6CisKKyAgICAgICAgICAgIyBwcmludCAiWzAsIDEsIDQsLi4uLCA4MV0iCisgICAgICAgICAgIHByaW50KHBvb2wubWFwKGYsIHJhbmdlKDEwKSkpCisKKyAgICAgICAgICAgIyBwcmludCBzYW1lIG51bWJlcnMgaW4gYXJiaXRyYXJ5IG9yZGVyCisgICAgICAgICAgIGZvciBpIGluIHBvb2wuaW1hcF91bm9yZGVyZWQoZiwgcmFuZ2UoMTApKToKKyAgICAgICAgICAgICAgIHByaW50KGkpCisKKyAgICAgICAgICAgIyBldmFsdWF0ZSAiZigxMCkiIGFzeW5jaHJvbm91c2x5CisgICAgICAgICAgIHJlcyA9IHBvb2wuYXBwbHlfYXN5bmMoZiwgWzEwXSkKKyAgICAgICAgICAgcHJpbnQocmVzLmdldCh0aW1lb3V0PTEpKSAgICAgICAgICAgICAjIHByaW50cyAiMTAwIgorCisgICAgICAgICAgICMgbWFrZSB3b3JrZXIgc2xlZXAgZm9yIDEwIHNlY3MKKyAgICAgICAgICAgcmVzID0gcG9vbC5hcHBseV9hc3luYyhzbGVlcCwgWzEwXSkKKyAgICAgICAgICAgcHJpbnQocmVzLmdldCh0aW1lb3V0PTEpKSAgICAgICAgICAgICAjIHJhaXNlcyBtdWx0aXByb2Nlc3NpbmcuVGltZW91dEVycm9yCisKKyAgICAgICAjIGV4aXRpbmcgdGhlICd3aXRoJy1ibG9jayBoYXMgc3RvcHBlZCB0aGUgcG9vbAogCiBOb3RlIHRoYXQgdGhlIG1ldGhvZHMgb2YgYSBwb29sIHNob3VsZCBvbmx5IGV2ZXIgYmUgdXNlZCBieSB0aGUKIHByb2Nlc3Mgd2hpY2ggY3JlYXRlZCBpdC4KIAorLi4gbm90ZTo6CisKKyAgIEZ1bmN0aW9uYWxpdHkgd2l0aGluIHRoaXMgcGFja2FnZSByZXF1aXJlcyB0aGF0IHRoZSBgYF9fbWFpbl9fYGAgbW9kdWxlIGJlCisgICBpbXBvcnRhYmxlIGJ5IHRoZSBjaGlsZHJlbi4gVGhpcyBpcyBjb3ZlcmVkIGluIDpyZWY6YG11bHRpcHJvY2Vzc2luZy1wcm9ncmFtbWluZ2AKKyAgIGhvd2V2ZXIgaXQgaXMgd29ydGggcG9pbnRpbmcgb3V0IGhlcmUuIFRoaXMgbWVhbnMgdGhhdCBzb21lIGV4YW1wbGVzLCBzdWNoCisgICBhcyB0aGUgOmNsYXNzOmBtdWx0aXByb2Nlc3NpbmcucG9vbC5Qb29sYCBleGFtcGxlcyB3aWxsIG5vdCB3b3JrIGluIHRoZQorICAgaW50ZXJhY3RpdmUgaW50ZXJwcmV0ZXIuIEZvciBleGFtcGxlOjoKKworICAgICAgPj4+IGZyb20gbXVsdGlwcm9jZXNzaW5nIGltcG9ydCBQb29sCisgICAgICA+Pj4gcCA9IFBvb2woNSkKKyAgICAgID4+PiBkZWYgZih4KToKKyAgICAgIC4uLiAgICAgcmV0dXJuIHgqeAorICAgICAgLi4uCisgICAgICA+Pj4gcC5tYXAoZiwgWzEsMiwzXSkKKyAgICAgIFByb2Nlc3MgUG9vbFdvcmtlci0xOgorICAgICAgUHJvY2VzcyBQb29sV29ya2VyLTI6CisgICAgICBQcm9jZXNzIFBvb2xXb3JrZXItMzoKKyAgICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgIEF0dHJpYnV0ZUVycm9yOiAnbW9kdWxlJyBvYmplY3QgaGFzIG5vIGF0dHJpYnV0ZSAnZicKKyAgICAgIEF0dHJpYnV0ZUVycm9yOiAnbW9kdWxlJyBvYmplY3QgaGFzIG5vIGF0dHJpYnV0ZSAnZicKKyAgICAgIEF0dHJpYnV0ZUVycm9yOiAnbW9kdWxlJyBvYmplY3QgaGFzIG5vIGF0dHJpYnV0ZSAnZicKKworICAgKElmIHlvdSB0cnkgdGhpcyBpdCB3aWxsIGFjdHVhbGx5IG91dHB1dCB0aHJlZSBmdWxsIHRyYWNlYmFja3MKKyAgIGludGVybGVhdmVkIGluIGEgc2VtaS1yYW5kb20gZmFzaGlvbiwgYW5kIHRoZW4geW91IG1heSBoYXZlIHRvCisgICBzdG9wIHRoZSBtYXN0ZXIgcHJvY2VzcyBzb21laG93LikKKwogCiBSZWZlcmVuY2UKIC0tLS0tLS0tLQpAQCAtNjY3LDYgKzc5OSwxNCBAQAogICAgICAgaW1tZWRpYXRlbHkgd2l0aG91dCB3YWl0aW5nIHRvIGZsdXNoIGVucXVldWVkIGRhdGEgdG8gdGhlCiAgICAgICB1bmRlcmx5aW5nIHBpcGUsIGFuZCB5b3UgZG9uJ3QgY2FyZSBhYm91dCBsb3N0IGRhdGEuCiAKKyAgIC4uIG5vdGU6OgorCisgICAgICBUaGlzIGNsYXNzJ3MgZnVuY3Rpb25hbGl0eSByZXF1aXJlcyBhIGZ1bmN0aW9uaW5nIHNoYXJlZCBzZW1hcGhvcmUKKyAgICAgIGltcGxlbWVudGF0aW9uIG9uIHRoZSBob3N0IG9wZXJhdGluZyBzeXN0ZW0uIFdpdGhvdXQgb25lLCB0aGUKKyAgICAgIGZ1bmN0aW9uYWxpdHkgaW4gdGhpcyBjbGFzcyB3aWxsIGJlIGRpc2FibGVkLCBhbmQgYXR0ZW1wdHMgdG8KKyAgICAgIGluc3RhbnRpYXRlIGEgOmNsYXNzOmBRdWV1ZWAgd2lsbCByZXN1bHQgaW4gYW4gOmV4YzpgSW1wb3J0RXJyb3JgLiBTZWUKKyAgICAgIDppc3N1ZTpgMzc3MGAgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uICBUaGUgc2FtZSBob2xkcyB0cnVlIGZvciBhbnkKKyAgICAgIG9mIHRoZSBzcGVjaWFsaXplZCBxdWV1ZSB0eXBlcyBsaXN0ZWQgYmVsb3cuCiAKIC4uIGNsYXNzOjogU2ltcGxlUXVldWUoKQogCkBAIC03MjMsNyArODYzLDcgQEAKIAogICAgUmV0dXJuIGxpc3Qgb2YgYWxsIGxpdmUgY2hpbGRyZW4gb2YgdGhlIGN1cnJlbnQgcHJvY2Vzcy4KIAotICAgQ2FsbGluZyB0aGlzIGhhcyB0aGUgc2lkZSBhZmZlY3Qgb2YgImpvaW5pbmciIGFueSBwcm9jZXNzZXMgd2hpY2ggaGF2ZQorICAgQ2FsbGluZyB0aGlzIGhhcyB0aGUgc2lkZSBlZmZlY3Qgb2YgImpvaW5pbmciIGFueSBwcm9jZXNzZXMgd2hpY2ggaGF2ZQogICAgYWxyZWFkeSBmaW5pc2hlZC4KIAogLi4gZnVuY3Rpb246OiBjcHVfY291bnQoKQpAQCAtNzMxLDYgKzg3MSw5IEBACiAgICBSZXR1cm4gdGhlIG51bWJlciBvZiBDUFVzIGluIHRoZSBzeXN0ZW0uICBNYXkgcmFpc2UKICAgIDpleGM6YE5vdEltcGxlbWVudGVkRXJyb3JgLgogCisgICAuLiBzZWVhbHNvOjoKKyAgICAgIDpmdW5jOmBvcy5jcHVfY291bnRgCisKIC4uIGZ1bmN0aW9uOjogY3VycmVudF9wcm9jZXNzKCkKIAogICAgUmV0dXJuIHRoZSA6Y2xhc3M6YFByb2Nlc3NgIG9iamVjdCBjb3JyZXNwb25kaW5nIHRvIHRoZSBjdXJyZW50IHByb2Nlc3MuCkBAIC03NjEsNiArOTA0LDQzIEBACiAgICBJZiB0aGUgbW9kdWxlIGlzIGJlaW5nIHJ1biBub3JtYWxseSBieSB0aGUgUHl0aG9uIGludGVycHJldGVyIHRoZW4KICAgIDpmdW5jOmBmcmVlemVfc3VwcG9ydGAgaGFzIG5vIGVmZmVjdC4KIAorLi4gZnVuY3Rpb246OiBnZXRfYWxsX3N0YXJ0X21ldGhvZHMoKQorCisgICBSZXR1cm5zIGEgbGlzdCBvZiB0aGUgc3VwcG9ydGVkIHN0YXJ0IG1ldGhvZHMsIHRoZSBmaXJzdCBvZiB3aGljaAorICAgaXMgdGhlIGRlZmF1bHQuICBUaGUgcG9zc2libGUgc3RhcnQgbWV0aG9kcyBhcmUgYGAnZm9yaydgYCwKKyAgIGBgJ3NwYXduJ2BgIGFuZCBgYCdmb3Jrc2VydmVyJ2BgLiAgT24gV2luZG93cyBvbmx5IGBgJ3NwYXduJ2BgIGlzCisgICBhdmFpbGFibGUuICBPbiBVbml4IGBgJ2ZvcmsnYGAgYW5kIGBgJ3NwYXduJ2BgIGFyZSBhbHdheXMKKyAgIHN1cHBvcnRlZCwgd2l0aCBgYCdmb3JrJ2BgIGJlaW5nIHRoZSBkZWZhdWx0LgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworLi4gZnVuY3Rpb246OiBnZXRfY29udGV4dChtZXRob2Q9Tm9uZSkKKworICAgUmV0dXJuIGEgY29udGV4dCBvYmplY3Qgd2hpY2ggaGFzIHRoZSBzYW1lIGF0dHJpYnV0ZXMgYXMgdGhlCisgICA6bW9kOmBtdWx0aXByb2Nlc3NpbmdgIG1vZHVsZS4KKworICAgSWYgKm1ldGhvZCogaXMgKk5vbmUqIHRoZW4gdGhlIGRlZmF1bHQgY29udGV4dCBpcyByZXR1cm5lZC4KKyAgIE90aGVyd2lzZSAqbWV0aG9kKiBzaG91bGQgYmUgYGAnZm9yaydgYCwgYGAnc3Bhd24nYGAsCisgICBgYCdmb3Jrc2VydmVyJ2BgLiAgOmV4YzpgVmFsdWVFcnJvcmAgaXMgcmFpc2VkIGlmIHRoZSBzcGVjaWZpZWQKKyAgIHN0YXJ0IG1ldGhvZCBpcyBub3QgYXZhaWxhYmxlLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworLi4gZnVuY3Rpb246OiBnZXRfc3RhcnRfbWV0aG9kKGFsbG93X25vbmU9RmFsc2UpCisKKyAgIFJldHVybiB0aGUgbmFtZSBvZiBzdGFydCBtZXRob2QgdXNlZCBmb3Igc3RhcnRpbmcgcHJvY2Vzc2VzLgorCisgICBJZiB0aGUgc3RhcnQgbWV0aG9kIGhhcyBub3QgYmVlbiBmaXhlZCBhbmQgKmFsbG93X25vbmUqIGlzIGZhbHNlLAorICAgdGhlbiB0aGUgc3RhcnQgbWV0aG9kIGlzIGZpeGVkIHRvIHRoZSBkZWZhdWx0IGFuZCB0aGUgbmFtZSBpcworICAgcmV0dXJuZWQuICBJZiB0aGUgc3RhcnQgbWV0aG9kIGhhcyBub3QgYmVlbiBmaXhlZCBhbmQgKmFsbG93X25vbmUqCisgICBpcyB0cnVlIHRoZW4gKk5vbmUqIGlzIHJldHVybmVkLgorCisgICBUaGUgcmV0dXJuIHZhbHVlIGNhbiBiZSBgYCdmb3JrJ2BgLCBgYCdzcGF3bidgYCwgYGAnZm9ya3NlcnZlcidgYAorICAgb3IgKk5vbmUqLiAgYGAnZm9yaydgYCBpcyB0aGUgZGVmYXVsdCBvbiBVbml4LCB3aGlsZSBgYCdzcGF3bidgYCBpcworICAgdGhlIGRlZmF1bHQgb24gV2luZG93cy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIC4uIGZ1bmN0aW9uOjogc2V0X2V4ZWN1dGFibGUoKQogCiAgICBTZXRzIHRoZSBwYXRoIG9mIHRoZSBQeXRob24gaW50ZXJwcmV0ZXIgdG8gdXNlIHdoZW4gc3RhcnRpbmcgYSBjaGlsZCBwcm9jZXNzLgpAQCAtNzY5LDggKzk0OSwyMSBAQAogCiAgICAgICBzZXRfZXhlY3V0YWJsZShvcy5wYXRoLmpvaW4oc3lzLmV4ZWNfcHJlZml4LCAncHl0aG9udy5leGUnKSkKIAotICAgYmVmb3JlIHRoZXkgY2FuIGNyZWF0ZSBjaGlsZCBwcm9jZXNzZXMuICAoV2luZG93cyBvbmx5KQorICAgYmVmb3JlIHRoZXkgY2FuIGNyZWF0ZSBjaGlsZCBwcm9jZXNzZXMuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBOb3cgc3VwcG9ydGVkIG9uIFVuaXggd2hlbiB0aGUgYGAnc3Bhd24nYGAgc3RhcnQgbWV0aG9kIGlzIHVzZWQuCisKKy4uIGZ1bmN0aW9uOjogc2V0X3N0YXJ0X21ldGhvZChtZXRob2QpCisKKyAgIFNldCB0aGUgbWV0aG9kIHdoaWNoIHNob3VsZCBiZSB1c2VkIHRvIHN0YXJ0IGNoaWxkIHByb2Nlc3Nlcy4KKyAgICptZXRob2QqIGNhbiBiZSBgYCdmb3JrJ2BgLCBgYCdzcGF3bidgYCBvciBgYCdmb3Jrc2VydmVyJ2BgLgorCisgICBOb3RlIHRoYXQgdGhpcyBzaG91bGQgYmUgY2FsbGVkIGF0IG1vc3Qgb25jZSwgYW5kIGl0IHNob3VsZCBiZQorICAgcHJvdGVjdGVkIGluc2lkZSB0aGUgYGBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nYGAgY2xhdXNlIG9mIHRoZQorICAgbWFpbiBtb2R1bGUuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAogCiAuLiBub3RlOjoKIApAQCAtODQ4LDcgKzEwNDEsNyBAQAogICAgICAgcmVhZGFibGUuCiAKICAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCi0gICAgICAgICBUaGlzIGZ1bmN0aW9uIHVzZWQgdG8gcmFpc2UgYSA6ZXhjOmBJT0Vycm9yYCwgd2hpY2ggaXMgbm93IGFuCisgICAgICAgICBUaGlzIGZ1bmN0aW9uIHVzZWQgdG8gcmFpc2UgOmV4YzpgSU9FcnJvcmAsIHdoaWNoIGlzIG5vdyBhbgogICAgICAgICAgYWxpYXMgb2YgOmV4YzpgT1NFcnJvcmAuCiAKIApAQCAtODc0LDcgKzEwNjcsNyBAQAogICAgICAgdXNpbmcgOm1ldGg6YENvbm5lY3Rpb24uc2VuZGAgYW5kIDptZXRoOmBDb25uZWN0aW9uLnJlY3ZgLgogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKLSAgICAgIENvbm5lY3Rpb24gb2JqZWN0cyBub3cgc3VwcG9ydCB0aGUgY29udGV4dCBtYW5hZ2VyIHByb3RvY29sIC0tIHNlZQorICAgICAgQ29ubmVjdGlvbiBvYmplY3RzIG5vdyBzdXBwb3J0IHRoZSBjb250ZXh0IG1hbmFnZW1lbnQgcHJvdG9jb2wgLS0gc2VlCiAgICAgICA6cmVmOmB0eXBlY29udGV4dG1hbmFnZXJgLiAgOm1ldGg6YH5jb250ZXh0bWFuYWdlci5fX2VudGVyX19gIHJldHVybnMgdGhlCiAgICAgICBjb25uZWN0aW9uIG9iamVjdCwgYW5kIDptZXRoOmB+Y29udGV4dG1hbmFnZXIuX19leGl0X19gIGNhbGxzIDptZXRoOmBjbG9zZWAuCiAKQEAgLTkzNiwxMCArMTEyOSwxNSBAQAogCiAuLiBjbGFzczo6IEJvdW5kZWRTZW1hcGhvcmUoW3ZhbHVlXSkKIAotICAgQSBib3VuZGVkIHNlbWFwaG9yZSBvYmplY3Q6IGEgY2xvbmUgb2YgOmNsYXNzOmB0aHJlYWRpbmcuQm91bmRlZFNlbWFwaG9yZWAuCisgICBBIGJvdW5kZWQgc2VtYXBob3JlIG9iamVjdDogYSBjbG9zZSBhbmFsb2cgb2YKKyAgIDpjbGFzczpgdGhyZWFkaW5nLkJvdW5kZWRTZW1hcGhvcmVgLgogCi0gICAoT24gTWFjIE9TIFgsIHRoaXMgaXMgaW5kaXN0aW5ndWlzaGFibGUgZnJvbSA6Y2xhc3M6YFNlbWFwaG9yZWAgYmVjYXVzZQotICAgYGBzZW1fZ2V0dmFsdWUoKWBgIGlzIG5vdCBpbXBsZW1lbnRlZCBvbiB0aGF0IHBsYXRmb3JtKS4KKyAgIEEgc29saXRhcnkgZGlmZmVyZW5jZSBmcm9tIGl0cyBjbG9zZSBhbmFsb2cgZXhpc3RzOiBpdHMgYGBhY3F1aXJlYGAgbWV0aG9kJ3MKKyAgIGZpcnN0IGFyZ3VtZW50IGlzIG5hbWVkICpibG9jayosIGFzIGlzIGNvbnNpc3RlbnQgd2l0aCA6bWV0aDpgTG9jay5hY3F1aXJlYC4KKworICAgLi4gbm90ZTo6CisgICAgICBPbiBNYWMgT1MgWCwgdGhpcyBpcyBpbmRpc3Rpbmd1aXNoYWJsZSBmcm9tIDpjbGFzczpgU2VtYXBob3JlYCBiZWNhdXNlCisgICAgICBgYHNlbV9nZXR2YWx1ZSgpYGAgaXMgbm90IGltcGxlbWVudGVkIG9uIHRoYXQgcGxhdGZvcm0uCiAKIC4uIGNsYXNzOjogQ29uZGl0aW9uKFtsb2NrXSkKIApAQCAtOTU1LDMyICsxMTUzLDEzNCBAQAogCiAgICBBIGNsb25lIG9mIDpjbGFzczpgdGhyZWFkaW5nLkV2ZW50YC4KIAorCiAuLiBjbGFzczo6IExvY2soKQogCi0gICBBIG5vbi1yZWN1cnNpdmUgbG9jayBvYmplY3Q6IGEgY2xvbmUgb2YgOmNsYXNzOmB0aHJlYWRpbmcuTG9ja2AuCisgICBBIG5vbi1yZWN1cnNpdmUgbG9jayBvYmplY3Q6IGEgY2xvc2UgYW5hbG9nIG9mIDpjbGFzczpgdGhyZWFkaW5nLkxvY2tgLgorICAgT25jZSBhIHByb2Nlc3Mgb3IgdGhyZWFkIGhhcyBhY3F1aXJlZCBhIGxvY2ssIHN1YnNlcXVlbnQgYXR0ZW1wdHMgdG8KKyAgIGFjcXVpcmUgaXQgZnJvbSBhbnkgcHJvY2VzcyBvciB0aHJlYWQgd2lsbCBibG9jayB1bnRpbCBpdCBpcyByZWxlYXNlZDsKKyAgIGFueSBwcm9jZXNzIG9yIHRocmVhZCBtYXkgcmVsZWFzZSBpdC4gIFRoZSBjb25jZXB0cyBhbmQgYmVoYXZpb3JzIG9mCisgICA6Y2xhc3M6YHRocmVhZGluZy5Mb2NrYCBhcyBpdCBhcHBsaWVzIHRvIHRocmVhZHMgYXJlIHJlcGxpY2F0ZWQgaGVyZSBpbgorICAgOmNsYXNzOmBtdWx0aXByb2Nlc3NpbmcuTG9ja2AgYXMgaXQgYXBwbGllcyB0byBlaXRoZXIgcHJvY2Vzc2VzIG9yIHRocmVhZHMsCisgICBleGNlcHQgYXMgbm90ZWQuCisKKyAgIE5vdGUgdGhhdCA6Y2xhc3M6YExvY2tgIGlzIGFjdHVhbGx5IGEgZmFjdG9yeSBmdW5jdGlvbiB3aGljaCByZXR1cm5zIGFuCisgICBpbnN0YW5jZSBvZiBgYG11bHRpcHJvY2Vzc2luZy5zeW5jaHJvbml6ZS5Mb2NrYGAgaW5pdGlhbGl6ZWQgd2l0aCBhCisgICBkZWZhdWx0IGNvbnRleHQuCisKKyAgIDpjbGFzczpgTG9ja2Agc3VwcG9ydHMgdGhlIDp0ZXJtOmBjb250ZXh0IG1hbmFnZXJgIHByb3RvY29sIGFuZCB0aHVzIG1heSBiZQorICAgdXNlZCBpbiA6a2V5d29yZDpgd2l0aGAgc3RhdGVtZW50cy4KKworICAgLi4gbWV0aG9kOjogYWNxdWlyZShibG9jaz1UcnVlLCB0aW1lb3V0PU5vbmUpCisKKyAgICAgIEFjcXVpcmUgYSBsb2NrLCBibG9ja2luZyBvciBub24tYmxvY2tpbmcuCisKKyAgICAgIFdpdGggdGhlICpibG9jayogYXJndW1lbnQgc2V0IHRvIGBgVHJ1ZWBgICh0aGUgZGVmYXVsdCksIHRoZSBtZXRob2QgY2FsbAorICAgICAgd2lsbCBibG9jayB1bnRpbCB0aGUgbG9jayBpcyBpbiBhbiB1bmxvY2tlZCBzdGF0ZSwgdGhlbiBzZXQgaXQgdG8gbG9ja2VkCisgICAgICBhbmQgcmV0dXJuIGBgVHJ1ZWBgLiAgTm90ZSB0aGF0IHRoZSBuYW1lIG9mIHRoaXMgZmlyc3QgYXJndW1lbnQgZGlmZmVycworICAgICAgZnJvbSB0aGF0IGluIDptZXRoOmB0aHJlYWRpbmcuTG9jay5hY3F1aXJlYC4KKworICAgICAgV2l0aCB0aGUgKmJsb2NrKiBhcmd1bWVudCBzZXQgdG8gYGBGYWxzZWBgLCB0aGUgbWV0aG9kIGNhbGwgZG9lcyBub3QKKyAgICAgIGJsb2NrLiAgSWYgdGhlIGxvY2sgaXMgY3VycmVudGx5IGluIGEgbG9ja2VkIHN0YXRlLCByZXR1cm4gYGBGYWxzZWBgOworICAgICAgb3RoZXJ3aXNlIHNldCB0aGUgbG9jayB0byBhIGxvY2tlZCBzdGF0ZSBhbmQgcmV0dXJuIGBgVHJ1ZWBgLgorCisgICAgICBXaGVuIGludm9rZWQgd2l0aCBhIHBvc2l0aXZlLCBmbG9hdGluZy1wb2ludCB2YWx1ZSBmb3IgKnRpbWVvdXQqLCBibG9jaworICAgICAgZm9yIGF0IG1vc3QgdGhlIG51bWJlciBvZiBzZWNvbmRzIHNwZWNpZmllZCBieSAqdGltZW91dCogYXMgbG9uZyBhcworICAgICAgdGhlIGxvY2sgY2FuIG5vdCBiZSBhY3F1aXJlZC4gIEludm9jYXRpb25zIHdpdGggYSBuZWdhdGl2ZSB2YWx1ZSBmb3IKKyAgICAgICp0aW1lb3V0KiBhcmUgZXF1aXZhbGVudCB0byBhICp0aW1lb3V0KiBvZiB6ZXJvLiAgSW52b2NhdGlvbnMgd2l0aCBhCisgICAgICAqdGltZW91dCogdmFsdWUgb2YgYGBOb25lYGAgKHRoZSBkZWZhdWx0KSBzZXQgdGhlIHRpbWVvdXQgcGVyaW9kIHRvCisgICAgICBpbmZpbml0ZS4gIE5vdGUgdGhhdCB0aGUgdHJlYXRtZW50IG9mIG5lZ2F0aXZlIG9yIGBgTm9uZWBgIHZhbHVlcyBmb3IKKyAgICAgICp0aW1lb3V0KiBkaWZmZXJzIGZyb20gdGhlIGltcGxlbWVudGVkIGJlaGF2aW9yIGluCisgICAgICA6bWV0aDpgdGhyZWFkaW5nLkxvY2suYWNxdWlyZWAuICBUaGUgKnRpbWVvdXQqIGFyZ3VtZW50IGhhcyBubyBwcmFjdGljYWwKKyAgICAgIGltcGxpY2F0aW9ucyBpZiB0aGUgKmJsb2NrKiBhcmd1bWVudCBpcyBzZXQgdG8gYGBGYWxzZWBgIGFuZCBpcyB0aHVzCisgICAgICBpZ25vcmVkLiAgUmV0dXJucyBgYFRydWVgYCBpZiB0aGUgbG9jayBoYXMgYmVlbiBhY3F1aXJlZCBvciBgYEZhbHNlYGAgaWYKKyAgICAgIHRoZSB0aW1lb3V0IHBlcmlvZCBoYXMgZWxhcHNlZC4KKworCisgICAuLiBtZXRob2Q6OiByZWxlYXNlKCkKKworICAgICAgUmVsZWFzZSBhIGxvY2suICBUaGlzIGNhbiBiZSBjYWxsZWQgZnJvbSBhbnkgcHJvY2VzcyBvciB0aHJlYWQsIG5vdCBvbmx5CisgICAgICB0aGUgcHJvY2VzcyBvciB0aHJlYWQgd2hpY2ggb3JpZ2luYWxseSBhY3F1aXJlZCB0aGUgbG9jay4KKworICAgICAgQmVoYXZpb3IgaXMgdGhlIHNhbWUgYXMgaW4gOm1ldGg6YHRocmVhZGluZy5Mb2NrLnJlbGVhc2VgIGV4Y2VwdCB0aGF0CisgICAgICB3aGVuIGludm9rZWQgb24gYW4gdW5sb2NrZWQgbG9jaywgYSA6ZXhjOmBWYWx1ZUVycm9yYCBpcyByYWlzZWQuCisKIAogLi4gY2xhc3M6OiBSTG9jaygpCiAKLSAgIEEgcmVjdXJzaXZlIGxvY2sgb2JqZWN0OiBhIGNsb25lIG9mIDpjbGFzczpgdGhyZWFkaW5nLlJMb2NrYC4KKyAgIEEgcmVjdXJzaXZlIGxvY2sgb2JqZWN0OiBhIGNsb3NlIGFuYWxvZyBvZiA6Y2xhc3M6YHRocmVhZGluZy5STG9ja2AuICBBCisgICByZWN1cnNpdmUgbG9jayBtdXN0IGJlIHJlbGVhc2VkIGJ5IHRoZSBwcm9jZXNzIG9yIHRocmVhZCB0aGF0IGFjcXVpcmVkIGl0LgorICAgT25jZSBhIHByb2Nlc3Mgb3IgdGhyZWFkIGhhcyBhY3F1aXJlZCBhIHJlY3Vyc2l2ZSBsb2NrLCB0aGUgc2FtZSBwcm9jZXNzCisgICBvciB0aHJlYWQgbWF5IGFjcXVpcmUgaXQgYWdhaW4gd2l0aG91dCBibG9ja2luZzsgdGhhdCBwcm9jZXNzIG9yIHRocmVhZAorICAgbXVzdCByZWxlYXNlIGl0IG9uY2UgZm9yIGVhY2ggdGltZSBpdCBoYXMgYmVlbiBhY3F1aXJlZC4KKworICAgTm90ZSB0aGF0IDpjbGFzczpgUkxvY2tgIGlzIGFjdHVhbGx5IGEgZmFjdG9yeSBmdW5jdGlvbiB3aGljaCByZXR1cm5zIGFuCisgICBpbnN0YW5jZSBvZiBgYG11bHRpcHJvY2Vzc2luZy5zeW5jaHJvbml6ZS5STG9ja2BgIGluaXRpYWxpemVkIHdpdGggYQorICAgZGVmYXVsdCBjb250ZXh0LgorCisgICA6Y2xhc3M6YFJMb2NrYCBzdXBwb3J0cyB0aGUgOnRlcm06YGNvbnRleHQgbWFuYWdlcmAgcHJvdG9jb2wgYW5kIHRodXMgbWF5IGJlCisgICB1c2VkIGluIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnRzLgorCisKKyAgIC4uIG1ldGhvZDo6IGFjcXVpcmUoYmxvY2s9VHJ1ZSwgdGltZW91dD1Ob25lKQorCisgICAgICBBY3F1aXJlIGEgbG9jaywgYmxvY2tpbmcgb3Igbm9uLWJsb2NraW5nLgorCisgICAgICBXaGVuIGludm9rZWQgd2l0aCB0aGUgKmJsb2NrKiBhcmd1bWVudCBzZXQgdG8gYGBUcnVlYGAsIGJsb2NrIHVudGlsIHRoZQorICAgICAgbG9jayBpcyBpbiBhbiB1bmxvY2tlZCBzdGF0ZSAobm90IG93bmVkIGJ5IGFueSBwcm9jZXNzIG9yIHRocmVhZCkgdW5sZXNzCisgICAgICB0aGUgbG9jayBpcyBhbHJlYWR5IG93bmVkIGJ5IHRoZSBjdXJyZW50IHByb2Nlc3Mgb3IgdGhyZWFkLiAgVGhlIGN1cnJlbnQKKyAgICAgIHByb2Nlc3Mgb3IgdGhyZWFkIHRoZW4gdGFrZXMgb3duZXJzaGlwIG9mIHRoZSBsb2NrIChpZiBpdCBkb2VzIG5vdAorICAgICAgYWxyZWFkeSBoYXZlIG93bmVyc2hpcCkgYW5kIHRoZSByZWN1cnNpb24gbGV2ZWwgaW5zaWRlIHRoZSBsb2NrIGluY3JlbWVudHMKKyAgICAgIGJ5IG9uZSwgcmVzdWx0aW5nIGluIGEgcmV0dXJuIHZhbHVlIG9mIGBgVHJ1ZWBgLiAgTm90ZSB0aGF0IHRoZXJlIGFyZQorICAgICAgc2V2ZXJhbCBkaWZmZXJlbmNlcyBpbiB0aGlzIGZpcnN0IGFyZ3VtZW50J3MgYmVoYXZpb3IgY29tcGFyZWQgdG8gdGhlCisgICAgICBpbXBsZW1lbnRhdGlvbiBvZiA6bWV0aDpgdGhyZWFkaW5nLlJMb2NrLmFjcXVpcmVgLCBzdGFydGluZyB3aXRoIHRoZSBuYW1lCisgICAgICBvZiB0aGUgYXJndW1lbnQgaXRzZWxmLgorCisgICAgICBXaGVuIGludm9rZWQgd2l0aCB0aGUgKmJsb2NrKiBhcmd1bWVudCBzZXQgdG8gYGBGYWxzZWBgLCBkbyBub3QgYmxvY2suCisgICAgICBJZiB0aGUgbG9jayBoYXMgYWxyZWFkeSBiZWVuIGFjcXVpcmVkIChhbmQgdGh1cyBpcyBvd25lZCkgYnkgYW5vdGhlcgorICAgICAgcHJvY2VzcyBvciB0aHJlYWQsIHRoZSBjdXJyZW50IHByb2Nlc3Mgb3IgdGhyZWFkIGRvZXMgbm90IHRha2Ugb3duZXJzaGlwCisgICAgICBhbmQgdGhlIHJlY3Vyc2lvbiBsZXZlbCB3aXRoaW4gdGhlIGxvY2sgaXMgbm90IGNoYW5nZWQsIHJlc3VsdGluZyBpbgorICAgICAgYSByZXR1cm4gdmFsdWUgb2YgYGBGYWxzZWBgLiAgSWYgdGhlIGxvY2sgaXMgaW4gYW4gdW5sb2NrZWQgc3RhdGUsIHRoZQorICAgICAgY3VycmVudCBwcm9jZXNzIG9yIHRocmVhZCB0YWtlcyBvd25lcnNoaXAgYW5kIHRoZSByZWN1cnNpb24gbGV2ZWwgaXMKKyAgICAgIGluY3JlbWVudGVkLCByZXN1bHRpbmcgaW4gYSByZXR1cm4gdmFsdWUgb2YgYGBUcnVlYGAuCisKKyAgICAgIFVzZSBhbmQgYmVoYXZpb3JzIG9mIHRoZSAqdGltZW91dCogYXJndW1lbnQgYXJlIHRoZSBzYW1lIGFzIGluCisgICAgICA6bWV0aDpgTG9jay5hY3F1aXJlYC4gIE5vdGUgdGhhdCBzb21lIG9mIHRoZXNlIGJlaGF2aW9ycyBvZiAqdGltZW91dCoKKyAgICAgIGRpZmZlciBmcm9tIHRoZSBpbXBsZW1lbnRlZCBiZWhhdmlvcnMgaW4gOm1ldGg6YHRocmVhZGluZy5STG9jay5hY3F1aXJlYC4KKworCisgICAuLiBtZXRob2Q6OiByZWxlYXNlKCkKKworICAgICAgUmVsZWFzZSBhIGxvY2ssIGRlY3JlbWVudGluZyB0aGUgcmVjdXJzaW9uIGxldmVsLiAgSWYgYWZ0ZXIgdGhlCisgICAgICBkZWNyZW1lbnQgdGhlIHJlY3Vyc2lvbiBsZXZlbCBpcyB6ZXJvLCByZXNldCB0aGUgbG9jayB0byB1bmxvY2tlZCAobm90CisgICAgICBvd25lZCBieSBhbnkgcHJvY2VzcyBvciB0aHJlYWQpIGFuZCBpZiBhbnkgb3RoZXIgcHJvY2Vzc2VzIG9yIHRocmVhZHMKKyAgICAgIGFyZSBibG9ja2VkIHdhaXRpbmcgZm9yIHRoZSBsb2NrIHRvIGJlY29tZSB1bmxvY2tlZCwgYWxsb3cgZXhhY3RseSBvbmUKKyAgICAgIG9mIHRoZW0gdG8gcHJvY2VlZC4gIElmIGFmdGVyIHRoZSBkZWNyZW1lbnQgdGhlIHJlY3Vyc2lvbiBsZXZlbCBpcyBzdGlsbAorICAgICAgbm9uemVybywgdGhlIGxvY2sgcmVtYWlucyBsb2NrZWQgYW5kIG93bmVkIGJ5IHRoZSBjYWxsaW5nIHByb2Nlc3Mgb3IKKyAgICAgIHRocmVhZC4KKworICAgICAgT25seSBjYWxsIHRoaXMgbWV0aG9kIHdoZW4gdGhlIGNhbGxpbmcgcHJvY2VzcyBvciB0aHJlYWQgb3ducyB0aGUgbG9jay4KKyAgICAgIEFuIDpleGM6YEFzc2VydGlvbkVycm9yYCBpcyByYWlzZWQgaWYgdGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IGEgcHJvY2VzcworICAgICAgb3IgdGhyZWFkIG90aGVyIHRoYW4gdGhlIG93bmVyIG9yIGlmIHRoZSBsb2NrIGlzIGluIGFuIHVubG9ja2VkICh1bm93bmVkKQorICAgICAgc3RhdGUuICBOb3RlIHRoYXQgdGhlIHR5cGUgb2YgZXhjZXB0aW9uIHJhaXNlZCBpbiB0aGlzIHNpdHVhdGlvbgorICAgICAgZGlmZmVycyBmcm9tIHRoZSBpbXBsZW1lbnRlZCBiZWhhdmlvciBpbiA6bWV0aDpgdGhyZWFkaW5nLlJMb2NrLnJlbGVhc2VgLgorCiAKIC4uIGNsYXNzOjogU2VtYXBob3JlKFt2YWx1ZV0pCiAKLSAgIEEgc2VtYXBob3JlIG9iamVjdDogYSBjbG9uZSBvZiA6Y2xhc3M6YHRocmVhZGluZy5TZW1hcGhvcmVgLgorICAgQSBzZW1hcGhvcmUgb2JqZWN0OiBhIGNsb3NlIGFuYWxvZyBvZiA6Y2xhc3M6YHRocmVhZGluZy5TZW1hcGhvcmVgLgorCisgICBBIHNvbGl0YXJ5IGRpZmZlcmVuY2UgZnJvbSBpdHMgY2xvc2UgYW5hbG9nIGV4aXN0czogaXRzIGBgYWNxdWlyZWBgIG1ldGhvZCdzCisgICBmaXJzdCBhcmd1bWVudCBpcyBuYW1lZCAqYmxvY2sqLCBhcyBpcyBjb25zaXN0ZW50IHdpdGggOm1ldGg6YExvY2suYWNxdWlyZWAuCiAKIC4uIG5vdGU6OgogCi0gICBUaGUgOm1ldGg6YGFjcXVpcmVgIGFuZCA6bWV0aDpgd2FpdGAgbWV0aG9kcyBvZiBlYWNoIG9mIHRoZXNlIHR5cGVzCi0gICB0cmVhdCBuZWdhdGl2ZSB0aW1lb3V0cyBhcyB6ZXJvIHRpbWVvdXRzLiAgVGhpcyBkaWZmZXJzIGZyb20KLSAgIDptb2Q6YHRocmVhZGluZ2Agd2hlcmUsIHNpbmNlIHZlcnNpb24gMy4yLCB0aGUgZXF1aXZhbGVudAotICAgOm1ldGg6YGFjcXVpcmVgIG1ldGhvZHMgdHJlYXQgbmVnYXRpdmUgdGltZW91dHMgYXMgaW5maW5pdGUKLSAgIHRpbWVvdXRzLgotCiAgICBPbiBNYWMgT1MgWCwgYGBzZW1fdGltZWR3YWl0YGAgaXMgdW5zdXBwb3J0ZWQsIHNvIGNhbGxpbmcgYGBhY3F1aXJlKClgYCB3aXRoCiAgICBhIHRpbWVvdXQgd2lsbCBlbXVsYXRlIHRoYXQgZnVuY3Rpb24ncyBiZWhhdmlvciB1c2luZyBhIHNsZWVwaW5nIGxvb3AuCiAKIC4uIG5vdGU6OgogCi0gICBJZiB0aGUgU0lHSU5UIHNpZ25hbCBnZW5lcmF0ZWQgYnkgQ3RybC1DIGFycml2ZXMgd2hpbGUgdGhlIG1haW4gdGhyZWFkIGlzCisgICBJZiB0aGUgU0lHSU5UIHNpZ25hbCBnZW5lcmF0ZWQgYnkgOmtiZDpgQ3RybC1DYCBhcnJpdmVzIHdoaWxlIHRoZSBtYWluIHRocmVhZCBpcwogICAgYmxvY2tlZCBieSBhIGNhbGwgdG8gOm1ldGg6YEJvdW5kZWRTZW1hcGhvcmUuYWNxdWlyZWAsIDptZXRoOmBMb2NrLmFjcXVpcmVgLAogICAgOm1ldGg6YFJMb2NrLmFjcXVpcmVgLCA6bWV0aDpgU2VtYXBob3JlLmFjcXVpcmVgLCA6bWV0aDpgQ29uZGl0aW9uLmFjcXVpcmVgCiAgICBvciA6bWV0aDpgQ29uZGl0aW9uLndhaXRgIHRoZW4gdGhlIGNhbGwgd2lsbCBiZSBpbW1lZGlhdGVseSBpbnRlcnJ1cHRlZCBhbmQKQEAgLTk4OSw2ICsxMjg5LDE0IEBACiAgICBUaGlzIGRpZmZlcnMgZnJvbSB0aGUgYmVoYXZpb3VyIG9mIDptb2Q6YHRocmVhZGluZ2Agd2hlcmUgU0lHSU5UIHdpbGwgYmUKICAgIGlnbm9yZWQgd2hpbGUgdGhlIGVxdWl2YWxlbnQgYmxvY2tpbmcgY2FsbHMgYXJlIGluIHByb2dyZXNzLgogCisuLiBub3RlOjoKKworICAgU29tZSBvZiB0aGlzIHBhY2thZ2UncyBmdW5jdGlvbmFsaXR5IHJlcXVpcmVzIGEgZnVuY3Rpb25pbmcgc2hhcmVkIHNlbWFwaG9yZQorICAgaW1wbGVtZW50YXRpb24gb24gdGhlIGhvc3Qgb3BlcmF0aW5nIHN5c3RlbS4gV2l0aG91dCBvbmUsIHRoZQorICAgOm1vZDpgbXVsdGlwcm9jZXNzaW5nLnN5bmNocm9uaXplYCBtb2R1bGUgd2lsbCBiZSBkaXNhYmxlZCwgYW5kIGF0dGVtcHRzIHRvCisgICBpbXBvcnQgaXQgd2lsbCByZXN1bHQgaW4gYW4gOmV4YzpgSW1wb3J0RXJyb3JgLiBTZWUKKyAgIDppc3N1ZTpgMzc3MGAgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uCisKIAogU2hhcmVkIDptb2Q6YGN0eXBlc2AgT2JqZWN0cwogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgpAQCAtMTMzMSw3ICsxNjM5LDcgQEAKICAgICAgIFRoZSBhZGRyZXNzIHVzZWQgYnkgdGhlIG1hbmFnZXIuCiAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCi0gICAgICBNYW5hZ2VyIG9iamVjdHMgc3VwcG9ydCB0aGUgY29udGV4dCBtYW5hZ2VyIHByb3RvY29sIC0tIHNlZQorICAgICAgTWFuYWdlciBvYmplY3RzIHN1cHBvcnQgdGhlIGNvbnRleHQgbWFuYWdlbWVudCBwcm90b2NvbCAtLSBzZWUKICAgICAgIDpyZWY6YHR5cGVjb250ZXh0bWFuYWdlcmAuICA6bWV0aDpgfmNvbnRleHRtYW5hZ2VyLl9fZW50ZXJfX2Agc3RhcnRzIHRoZQogICAgICAgc2VydmVyIHByb2Nlc3MgKGlmIGl0IGhhcyBub3QgYWxyZWFkeSBzdGFydGVkKSBhbmQgdGhlbiByZXR1cm5zIHRoZQogICAgICAgbWFuYWdlciBvYmplY3QuICA6bWV0aDpgfmNvbnRleHRtYW5hZ2VyLl9fZXhpdF9fYCBjYWxscyA6bWV0aDpgc2h1dGRvd25gLgpAQCAtMTYyOCw3ICsxOTM2LDcgQEAKICAgICAgIHJhaXNlZCBieSA6bWV0aDpgX2NhbGxtZXRob2RgLgogCiAgICAgICBOb3RlIGluIHBhcnRpY3VsYXIgdGhhdCBhbiBleGNlcHRpb24gd2lsbCBiZSByYWlzZWQgaWYgKm1ldGhvZG5hbWUqIGhhcwotICAgICAgbm90IGJlZW4gKmV4cG9zZWQqCisgICAgICBub3QgYmVlbiAqZXhwb3NlZCouCiAKICAgICAgIEFuIGV4YW1wbGUgb2YgdGhlIHVzYWdlIG9mIDptZXRoOmBfY2FsbG1ldGhvZGA6CiAKQEAgLTE2MzcsNyArMTk0NSw3IEBACiAgICAgICAgICA+Pj4gbCA9IG1hbmFnZXIubGlzdChyYW5nZSgxMCkpCiAgICAgICAgICA+Pj4gbC5fY2FsbG1ldGhvZCgnX19sZW5fXycpCiAgICAgICAgICAxMAotICAgICAgICAgPj4+IGwuX2NhbGxtZXRob2QoJ19fZ2V0c2xpY2VfXycsICgyLCA3KSkgICAjIGVxdWl2IHRvIGBsWzI6N11gCisgICAgICAgICA+Pj4gbC5fY2FsbG1ldGhvZCgnX19nZXRpdGVtX18nLCAoc2xpY2UoMiwgNyksKSkgICMgZXF1aXYgdG8gYGxbMjo3XWAKICAgICAgICAgIFsyLCAzLCA0LCA1LCA2XQogICAgICAgICAgPj4+IGwuX2NhbGxtZXRob2QoJ19fZ2V0aXRlbV9fJywgKDIwLCkpICAgICAjIGVxdWl2IHRvIGBsWzIwXWAKICAgICAgICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKQEAgLTE2NzgsMjUgKzE5ODYsMzcgQEAKIE9uZSBjYW4gY3JlYXRlIGEgcG9vbCBvZiBwcm9jZXNzZXMgd2hpY2ggd2lsbCBjYXJyeSBvdXQgdGFza3Mgc3VibWl0dGVkIHRvIGl0CiB3aXRoIHRoZSA6Y2xhc3M6YFBvb2xgIGNsYXNzLgogCi0uLiBjbGFzczo6IFBvb2woW3Byb2Nlc3Nlc1ssIGluaXRpYWxpemVyWywgaW5pdGFyZ3NbLCBtYXh0YXNrc3BlcmNoaWxkXV1dXSkKKy4uIGNsYXNzOjogUG9vbChbcHJvY2Vzc2VzWywgaW5pdGlhbGl6ZXJbLCBpbml0YXJnc1ssIG1heHRhc2tzcGVyY2hpbGQgWywgY29udGV4dF1dXV1dKQogCiAgICBBIHByb2Nlc3MgcG9vbCBvYmplY3Qgd2hpY2ggY29udHJvbHMgYSBwb29sIG9mIHdvcmtlciBwcm9jZXNzZXMgdG8gd2hpY2ggam9icwogICAgY2FuIGJlIHN1Ym1pdHRlZC4gIEl0IHN1cHBvcnRzIGFzeW5jaHJvbm91cyByZXN1bHRzIHdpdGggdGltZW91dHMgYW5kCiAgICBjYWxsYmFja3MgYW5kIGhhcyBhIHBhcmFsbGVsIG1hcCBpbXBsZW1lbnRhdGlvbi4KIAogICAgKnByb2Nlc3NlcyogaXMgdGhlIG51bWJlciBvZiB3b3JrZXIgcHJvY2Vzc2VzIHRvIHVzZS4gIElmICpwcm9jZXNzZXMqIGlzCi0gICBgYE5vbmVgYCB0aGVuIHRoZSBudW1iZXIgcmV0dXJuZWQgYnkgOmZ1bmM6YGNwdV9jb3VudGAgaXMgdXNlZC4gIElmCi0gICAqaW5pdGlhbGl6ZXIqIGlzIG5vdCBgYE5vbmVgYCB0aGVuIGVhY2ggd29ya2VyIHByb2Nlc3Mgd2lsbCBjYWxsCisgICBgYE5vbmVgYCB0aGVuIHRoZSBudW1iZXIgcmV0dXJuZWQgYnkgOmZ1bmM6YG9zLmNwdV9jb3VudGAgaXMgdXNlZC4KKworICAgSWYgKmluaXRpYWxpemVyKiBpcyBub3QgYGBOb25lYGAgdGhlbiBlYWNoIHdvcmtlciBwcm9jZXNzIHdpbGwgY2FsbAogICAgYGBpbml0aWFsaXplcigqaW5pdGFyZ3MpYGAgd2hlbiBpdCBzdGFydHMuCiAKKyAgICptYXh0YXNrc3BlcmNoaWxkKiBpcyB0aGUgbnVtYmVyIG9mIHRhc2tzIGEgd29ya2VyIHByb2Nlc3MgY2FuIGNvbXBsZXRlCisgICBiZWZvcmUgaXQgd2lsbCBleGl0IGFuZCBiZSByZXBsYWNlZCB3aXRoIGEgZnJlc2ggd29ya2VyIHByb2Nlc3MsIHRvIGVuYWJsZQorICAgdW51c2VkIHJlc291cmNlcyB0byBiZSBmcmVlZC4gVGhlIGRlZmF1bHQgKm1heHRhc2tzcGVyY2hpbGQqIGlzIE5vbmUsIHdoaWNoCisgICBtZWFucyB3b3JrZXIgcHJvY2Vzc2VzIHdpbGwgbGl2ZSBhcyBsb25nIGFzIHRoZSBwb29sLgorCisgICAqY29udGV4dCogY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgY29udGV4dCB1c2VkIGZvciBzdGFydGluZworICAgdGhlIHdvcmtlciBwcm9jZXNzZXMuICBVc3VhbGx5IGEgcG9vbCBpcyBjcmVhdGVkIHVzaW5nIHRoZQorICAgZnVuY3Rpb24gOmZ1bmM6YG11bHRpcHJvY2Vzc2luZy5Qb29sYCBvciB0aGUgOm1ldGg6YFBvb2xgIG1ldGhvZAorICAgb2YgYSBjb250ZXh0IG9iamVjdC4gIEluIGJvdGggY2FzZXMgKmNvbnRleHQqIGlzIHNldAorICAgYXBwcm9wcmlhdGVseS4KKwogICAgTm90ZSB0aGF0IHRoZSBtZXRob2RzIG9mIHRoZSBwb29sIG9iamVjdCBzaG91bGQgb25seSBiZSBjYWxsZWQgYnkKICAgIHRoZSBwcm9jZXNzIHdoaWNoIGNyZWF0ZWQgdGhlIHBvb2wuCiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgotICAgICAgKm1heHRhc2tzcGVyY2hpbGQqIGlzIHRoZSBudW1iZXIgb2YgdGFza3MgYSB3b3JrZXIgcHJvY2VzcyBjYW4gY29tcGxldGUKLSAgICAgIGJlZm9yZSBpdCB3aWxsIGV4aXQgYW5kIGJlIHJlcGxhY2VkIHdpdGggYSBmcmVzaCB3b3JrZXIgcHJvY2VzcywgdG8gZW5hYmxlCi0gICAgICB1bnVzZWQgcmVzb3VyY2VzIHRvIGJlIGZyZWVkLiBUaGUgZGVmYXVsdCAqbWF4dGFza3NwZXJjaGlsZCogaXMgTm9uZSwgd2hpY2gKLSAgICAgIG1lYW5zIHdvcmtlciBwcm9jZXNzZXMgd2lsbCBsaXZlIGFzIGxvbmcgYXMgdGhlIHBvb2wuCisgICAgICAqbWF4dGFza3NwZXJjaGlsZCoKKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisgICAgICAqY29udGV4dCoKIAogICAgLi4gbm90ZTo6CiAKQEAgLTE3MjIsNyArMjA0Miw3IEBACiAgICAgICBJZiAqY2FsbGJhY2sqIGlzIHNwZWNpZmllZCB0aGVuIGl0IHNob3VsZCBiZSBhIGNhbGxhYmxlIHdoaWNoIGFjY2VwdHMgYQogICAgICAgc2luZ2xlIGFyZ3VtZW50LiAgV2hlbiB0aGUgcmVzdWx0IGJlY29tZXMgcmVhZHkgKmNhbGxiYWNrKiBpcyBhcHBsaWVkIHRvCiAgICAgICBpdCwgdGhhdCBpcyB1bmxlc3MgdGhlIGNhbGwgZmFpbGVkLCBpbiB3aGljaCBjYXNlIHRoZSAqZXJyb3JfY2FsbGJhY2sqCi0gICAgICBpcyBhcHBsaWVkIGluc3RlYWQKKyAgICAgIGlzIGFwcGxpZWQgaW5zdGVhZC4KIAogICAgICAgSWYgKmVycm9yX2NhbGxiYWNrKiBpcyBzcGVjaWZpZWQgdGhlbiBpdCBzaG91bGQgYmUgYSBjYWxsYWJsZSB3aGljaAogICAgICAgYWNjZXB0cyBhIHNpbmdsZSBhcmd1bWVudC4gIElmIHRoZSB0YXJnZXQgZnVuY3Rpb24gZmFpbHMsIHRoZW4KQEAgLTE3NDcsNyArMjA2Nyw3IEBACiAgICAgICBJZiAqY2FsbGJhY2sqIGlzIHNwZWNpZmllZCB0aGVuIGl0IHNob3VsZCBiZSBhIGNhbGxhYmxlIHdoaWNoIGFjY2VwdHMgYQogICAgICAgc2luZ2xlIGFyZ3VtZW50LiAgV2hlbiB0aGUgcmVzdWx0IGJlY29tZXMgcmVhZHkgKmNhbGxiYWNrKiBpcyBhcHBsaWVkIHRvCiAgICAgICBpdCwgdGhhdCBpcyB1bmxlc3MgdGhlIGNhbGwgZmFpbGVkLCBpbiB3aGljaCBjYXNlIHRoZSAqZXJyb3JfY2FsbGJhY2sqCi0gICAgICBpcyBhcHBsaWVkIGluc3RlYWQKKyAgICAgIGlzIGFwcGxpZWQgaW5zdGVhZC4KIAogICAgICAgSWYgKmVycm9yX2NhbGxiYWNrKiBpcyBzcGVjaWZpZWQgdGhlbiBpdCBzaG91bGQgYmUgYSBjYWxsYWJsZSB3aGljaAogICAgICAgYWNjZXB0cyBhIHNpbmdsZSBhcmd1bWVudC4gIElmIHRoZSB0YXJnZXQgZnVuY3Rpb24gZmFpbHMsIHRoZW4KQEAgLTE3NzgsMTggKzIwOTgsMTggQEAKIAogICAgLi4gbWV0aG9kOjogc3Rhcm1hcChmdW5jLCBpdGVyYWJsZVssIGNodW5rc2l6ZV0pCiAKLSAgICAgIExpa2UgOm1ldGg6YG1hcGAgZXhjZXB0IHRoYXQgdGhlIGVsZW1lbnRzIG9mIHRoZSBgaXRlcmFibGVgIGFyZSBleHBlY3RlZAorICAgICAgTGlrZSA6bWV0aDpgbWFwYCBleGNlcHQgdGhhdCB0aGUgZWxlbWVudHMgb2YgdGhlICppdGVyYWJsZSogYXJlIGV4cGVjdGVkCiAgICAgICB0byBiZSBpdGVyYWJsZXMgdGhhdCBhcmUgdW5wYWNrZWQgYXMgYXJndW1lbnRzLgogCi0gICAgICBIZW5jZSBhbiBgaXRlcmFibGVgIG9mIGBbKDEsMiksICgzLCA0KV1gIHJlc3VsdHMgaW4gYFtmdW5jKDEsMiksCi0gICAgICBmdW5jKDMsNCldYC4KKyAgICAgIEhlbmNlIGFuICppdGVyYWJsZSogb2YgYGBbKDEsMiksICgzLCA0KV1gYCByZXN1bHRzIGluIGBgW2Z1bmMoMSwyKSwKKyAgICAgIGZ1bmMoMyw0KV1gYC4KIAogICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKICAgIC4uIG1ldGhvZDo6IHN0YXJtYXBfYXN5bmMoZnVuYywgaXRlcmFibGVbLCBjaHVua3NpemVbLCBjYWxsYmFja1ssIGVycm9yX2JhY2tdXV0pCiAKICAgICAgIEEgY29tYmluYXRpb24gb2YgOm1ldGg6YHN0YXJtYXBgIGFuZCA6bWV0aDpgbWFwX2FzeW5jYCB0aGF0IGl0ZXJhdGVzIG92ZXIKLSAgICAgIGBpdGVyYWJsZWAgb2YgaXRlcmFibGVzIGFuZCBjYWxscyBgZnVuY2Agd2l0aCB0aGUgaXRlcmFibGVzIHVucGFja2VkLgorICAgICAgKml0ZXJhYmxlKiBvZiBpdGVyYWJsZXMgYW5kIGNhbGxzICpmdW5jKiB3aXRoIHRoZSBpdGVyYWJsZXMgdW5wYWNrZWQuCiAgICAgICBSZXR1cm5zIGEgcmVzdWx0IG9iamVjdC4KIAogICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCkBAIC0xODExLDcgKzIxMzEsNyBAQAogICAgICAgOm1ldGg6YHRlcm1pbmF0ZWAgYmVmb3JlIHVzaW5nIDptZXRoOmBqb2luYC4KIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCi0gICAgICBQb29sIG9iamVjdHMgbm93IHN1cHBvcnQgdGhlIGNvbnRleHQgbWFuYWdlciBwcm90b2NvbCAtLSBzZWUKKyAgICAgIFBvb2wgb2JqZWN0cyBub3cgc3VwcG9ydCB0aGUgY29udGV4dCBtYW5hZ2VtZW50IHByb3RvY29sIC0tIHNlZQogICAgICAgOnJlZjpgdHlwZWNvbnRleHRtYW5hZ2VyYC4gIDptZXRoOmB+Y29udGV4dG1hbmFnZXIuX19lbnRlcl9fYCByZXR1cm5zIHRoZQogICAgICAgcG9vbCBvYmplY3QsIGFuZCA6bWV0aDpgfmNvbnRleHRtYW5hZ2VyLl9fZXhpdF9fYCBjYWxscyA6bWV0aDpgdGVybWluYXRlYC4KIApAQCAtMTk4NCw3ICsyMzA0LDcgQEAKICAgICAgIHVuYXZhaWxhYmxlIHRoZW4gaXQgaXMgYGBOb25lYGAuCiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMwotICAgICAgTGlzdGVuZXIgb2JqZWN0cyBub3cgc3VwcG9ydCB0aGUgY29udGV4dCBtYW5hZ2VyIHByb3RvY29sIC0tIHNlZQorICAgICAgTGlzdGVuZXIgb2JqZWN0cyBub3cgc3VwcG9ydCB0aGUgY29udGV4dCBtYW5hZ2VtZW50IHByb3RvY29sIC0tIHNlZQogICAgICAgOnJlZjpgdHlwZWNvbnRleHRtYW5hZ2VyYC4gIDptZXRoOmB+Y29udGV4dG1hbmFnZXIuX19lbnRlcl9fYCByZXR1cm5zIHRoZQogICAgICAgbGlzdGVuZXIgb2JqZWN0LCBhbmQgOm1ldGg6YH5jb250ZXh0bWFuYWdlci5fX2V4aXRfX2AgY2FsbHMgOm1ldGg6YGNsb3NlYC4KIApAQCAtMjE4OSw0MyArMjUwOSw4IEBACiAgICAgW0lORk8vTWFpblByb2Nlc3NdIHNlbmRpbmcgc2h1dGRvd24gbWVzc2FnZSB0byBtYW5hZ2VyCiAgICAgW0lORk8vU3luY01hbmFnZXItLi4uXSBtYW5hZ2VyIGV4aXRpbmcgd2l0aCBleGl0Y29kZSAwCiAKLUluIGFkZGl0aW9uIHRvIGhhdmluZyB0aGVzZSB0d28gbG9nZ2luZyBmdW5jdGlvbnMsIHRoZSBtdWx0aXByb2Nlc3NpbmcgYWxzbwotZXhwb3NlcyB0d28gYWRkaXRpb25hbCBsb2dnaW5nIGxldmVsIGF0dHJpYnV0ZXMuIFRoZXNlIGFyZSAgOmNvbnN0OmBTVUJXQVJOSU5HYAotYW5kIDpjb25zdDpgU1VCREVCVUdgLiBUaGUgdGFibGUgYmVsb3cgaWxsdXN0cmF0ZXMgd2hlcmUgdGhlc2VzIGZpdCBpbiB0aGUKLW5vcm1hbCBsZXZlbCBoaWVyYXJjaHkuCi0KLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rCi18IExldmVsICAgICAgICAgIHwgTnVtZXJpYyB2YWx1ZSAgfAotKz09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PSsKLXwgYGBTVUJXQVJOSU5HYGAgfCAyNSAgICAgICAgICAgICB8Ci0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKwotfCBgYFNVQkRFQlVHYGAgICB8IDUgICAgICAgICAgICAgIHwKLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rCi0KIEZvciBhIGZ1bGwgdGFibGUgb2YgbG9nZ2luZyBsZXZlbHMsIHNlZSB0aGUgOm1vZDpgbG9nZ2luZ2AgbW9kdWxlLgogCi1UaGVzZSBhZGRpdGlvbmFsIGxvZ2dpbmcgbGV2ZWxzIGFyZSB1c2VkIHByaW1hcmlseSBmb3IgY2VydGFpbiBkZWJ1ZyBtZXNzYWdlcwotd2l0aGluIHRoZSBtdWx0aXByb2Nlc3NpbmcgbW9kdWxlLiBCZWxvdyBpcyB0aGUgc2FtZSBleGFtcGxlIGFzIGFib3ZlLCBleGNlcHQKLXdpdGggOmNvbnN0OmBTVUJERUJVR2AgZW5hYmxlZDo6Ci0KLSAgICA+Pj4gaW1wb3J0IG11bHRpcHJvY2Vzc2luZywgbG9nZ2luZwotICAgID4+PiBsb2dnZXIgPSBtdWx0aXByb2Nlc3NpbmcubG9nX3RvX3N0ZGVycigpCi0gICAgPj4+IGxvZ2dlci5zZXRMZXZlbChtdWx0aXByb2Nlc3NpbmcuU1VCREVCVUcpCi0gICAgPj4+IGxvZ2dlci53YXJuaW5nKCdkb29tZWQnKQotICAgIFtXQVJOSU5HL01haW5Qcm9jZXNzXSBkb29tZWQKLSAgICA+Pj4gbSA9IG11bHRpcHJvY2Vzc2luZy5NYW5hZ2VyKCkKLSAgICBbSU5GTy9TeW5jTWFuYWdlci0uLi5dIGNoaWxkIHByb2Nlc3MgY2FsbGluZyBzZWxmLnJ1bigpCi0gICAgW0lORk8vU3luY01hbmFnZXItLi4uXSBjcmVhdGVkIHRlbXAgZGlyZWN0b3J5IC8uLi4vcHltcC0uLi4KLSAgICBbSU5GTy9TeW5jTWFuYWdlci0uLi5dIG1hbmFnZXIgc2VydmluZyBhdCAnLy4uLi9weW1wLWRqR0JYTi9saXN0ZW5lci0uLi4nCi0gICAgPj4+IGRlbCBtCi0gICAgW1NVQkRFQlVHL01haW5Qcm9jZXNzXSBmaW5hbGl6ZXIgY2FsbGluZyAuLi4KLSAgICBbSU5GTy9NYWluUHJvY2Vzc10gc2VuZGluZyBzaHV0ZG93biBtZXNzYWdlIHRvIG1hbmFnZXIKLSAgICBbREVCVUcvU3luY01hbmFnZXItLi4uXSBtYW5hZ2VyIHJlY2VpdmVkIHNodXRkb3duIG1lc3NhZ2UKLSAgICBbU1VCREVCVUcvU3luY01hbmFnZXItLi4uXSBjYWxsaW5nIDxGaW5hbGl6ZSBvYmplY3QsIGNhbGxiYWNrPXVubGluaywgLi4uCi0gICAgW1NVQkRFQlVHL1N5bmNNYW5hZ2VyLS4uLl0gZmluYWxpemVyIGNhbGxpbmcgPGJ1aWx0LWluIGZ1bmN0aW9uIHVubGluaz4gLi4uCi0gICAgW1NVQkRFQlVHL1N5bmNNYW5hZ2VyLS4uLl0gY2FsbGluZyA8RmluYWxpemUgb2JqZWN0LCBkZWFkPgotICAgIFtTVUJERUJVRy9TeW5jTWFuYWdlci0uLi5dIGZpbmFsaXplciBjYWxsaW5nIDxmdW5jdGlvbiBybXRyZWUgYXQgMHg1YWE3MzA+IC4uLgotICAgIFtJTkZPL1N5bmNNYW5hZ2VyLS4uLl0gbWFuYWdlciBleGl0aW5nIHdpdGggZXhpdGNvZGUgMAogCiBUaGUgOm1vZDpgbXVsdGlwcm9jZXNzaW5nLmR1bW15YCBtb2R1bGUKIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgpAQCAtMjI0Niw4ICsyNTMxLDEwIEBACiA6bW9kOmBtdWx0aXByb2Nlc3NpbmdgLgogCiAKLUFsbCBwbGF0Zm9ybXMKLX5+fn5+fn5+fn5+fn4KK0FsbCBzdGFydCBtZXRob2RzCit+fn5+fn5+fn5+fn5+fn5+fgorCitUaGUgZm9sbG93aW5nIGFwcGxpZXMgdG8gYWxsIHN0YXJ0IG1ldGhvZHMuCiAKIEF2b2lkIHNoYXJlZCBzdGF0ZQogCkBAIC0yMjgxLDExICsyNTY4LDEzIEBACiAKIEJldHRlciB0byBpbmhlcml0IHRoYW4gcGlja2xlL3VucGlja2xlCiAKLSAgICBPbiBXaW5kb3dzIG1hbnkgdHlwZXMgZnJvbSA6bW9kOmBtdWx0aXByb2Nlc3NpbmdgIG5lZWQgdG8gYmUgcGlja2xhYmxlIHNvCi0gICAgdGhhdCBjaGlsZCBwcm9jZXNzZXMgY2FuIHVzZSB0aGVtLiAgSG93ZXZlciwgb25lIHNob3VsZCBnZW5lcmFsbHkgYXZvaWQKLSAgICBzZW5kaW5nIHNoYXJlZCBvYmplY3RzIHRvIG90aGVyIHByb2Nlc3NlcyB1c2luZyBwaXBlcyBvciBxdWV1ZXMuICBJbnN0ZWFkCi0gICAgeW91IHNob3VsZCBhcnJhbmdlIHRoZSBwcm9ncmFtIHNvIHRoYXQgYSBwcm9jZXNzIHdoaWNoIG5lZWRzIGFjY2VzcyB0byBhCi0gICAgc2hhcmVkIHJlc291cmNlIGNyZWF0ZWQgZWxzZXdoZXJlIGNhbiBpbmhlcml0IGl0IGZyb20gYW4gYW5jZXN0b3IgcHJvY2Vzcy4KKyAgICBXaGVuIHVzaW5nIHRoZSAqc3Bhd24qIG9yICpmb3Jrc2VydmVyKiBzdGFydCBtZXRob2RzIG1hbnkgdHlwZXMKKyAgICBmcm9tIDptb2Q6YG11bHRpcHJvY2Vzc2luZ2AgbmVlZCB0byBiZSBwaWNrbGFibGUgc28gdGhhdCBjaGlsZAorICAgIHByb2Nlc3NlcyBjYW4gdXNlIHRoZW0uICBIb3dldmVyLCBvbmUgc2hvdWxkIGdlbmVyYWxseSBhdm9pZAorICAgIHNlbmRpbmcgc2hhcmVkIG9iamVjdHMgdG8gb3RoZXIgcHJvY2Vzc2VzIHVzaW5nIHBpcGVzIG9yIHF1ZXVlcy4KKyAgICBJbnN0ZWFkIHlvdSBzaG91bGQgYXJyYW5nZSB0aGUgcHJvZ3JhbSBzbyB0aGF0IGEgcHJvY2VzcyB3aGljaAorICAgIG5lZWRzIGFjY2VzcyB0byBhIHNoYXJlZCByZXNvdXJjZSBjcmVhdGVkIGVsc2V3aGVyZSBjYW4gaW5oZXJpdCBpdAorICAgIGZyb20gYW4gYW5jZXN0b3IgcHJvY2Vzcy4KIAogQXZvaWQgdGVybWluYXRpbmcgcHJvY2Vzc2VzCiAKQEAgLTIzMTEsNyArMjYwMCw3IEBACiAgICAgaXRlbXMgd2hpY2ggaGF2ZSBiZWVuIHB1dCBvbiB0aGUgcXVldWUgd2lsbCBldmVudHVhbGx5IGJlIHJlbW92ZWQgYmVmb3JlIHRoZQogICAgIHByb2Nlc3MgaXMgam9pbmVkLiAgT3RoZXJ3aXNlIHlvdSBjYW5ub3QgYmUgc3VyZSB0aGF0IHByb2Nlc3NlcyB3aGljaCBoYXZlCiAgICAgcHV0IGl0ZW1zIG9uIHRoZSBxdWV1ZSB3aWxsIHRlcm1pbmF0ZS4gIFJlbWVtYmVyIGFsc28gdGhhdCBub24tZGFlbW9uaWMKLSAgICBwcm9jZXNzZXMgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGJlIGpvaW5lZC4KKyAgICBwcm9jZXNzZXMgd2lsbCBiZSBqb2luZWQgYXV0b21hdGljYWxseS4KIAogICAgIEFuIGV4YW1wbGUgd2hpY2ggd2lsbCBkZWFkbG9jayBpcyB0aGUgZm9sbG93aW5nOjoKIApAQCAtMjMyNywyMCArMjYxNiwyMiBAQAogICAgICAgICAgICAgcC5qb2luKCkgICAgICAgICAgICAgICAgICAgICMgdGhpcyBkZWFkbG9ja3MKICAgICAgICAgICAgIG9iaiA9IHF1ZXVlLmdldCgpCiAKLSAgICBBIGZpeCBoZXJlIHdvdWxkIGJlIHRvIHN3YXAgdGhlIGxhc3QgdHdvIGxpbmVzIHJvdW5kIChvciBzaW1wbHkgcmVtb3ZlIHRoZQorICAgIEEgZml4IGhlcmUgd291bGQgYmUgdG8gc3dhcCB0aGUgbGFzdCB0d28gbGluZXMgKG9yIHNpbXBseSByZW1vdmUgdGhlCiAgICAgYGBwLmpvaW4oKWBgIGxpbmUpLgogCiBFeHBsaWNpdGx5IHBhc3MgcmVzb3VyY2VzIHRvIGNoaWxkIHByb2Nlc3NlcwogCi0gICAgT24gVW5peCBhIGNoaWxkIHByb2Nlc3MgY2FuIG1ha2UgdXNlIG9mIGEgc2hhcmVkIHJlc291cmNlIGNyZWF0ZWQgaW4gYQotICAgIHBhcmVudCBwcm9jZXNzIHVzaW5nIGEgZ2xvYmFsIHJlc291cmNlLiAgSG93ZXZlciwgaXQgaXMgYmV0dGVyIHRvIHBhc3MgdGhlCi0gICAgb2JqZWN0IGFzIGFuIGFyZ3VtZW50IHRvIHRoZSBjb25zdHJ1Y3RvciBmb3IgdGhlIGNoaWxkIHByb2Nlc3MuCisgICAgT24gVW5peCB1c2luZyB0aGUgKmZvcmsqIHN0YXJ0IG1ldGhvZCwgYSBjaGlsZCBwcm9jZXNzIGNhbiBtYWtlCisgICAgdXNlIG9mIGEgc2hhcmVkIHJlc291cmNlIGNyZWF0ZWQgaW4gYSBwYXJlbnQgcHJvY2VzcyB1c2luZyBhCisgICAgZ2xvYmFsIHJlc291cmNlLiAgSG93ZXZlciwgaXQgaXMgYmV0dGVyIHRvIHBhc3MgdGhlIG9iamVjdCBhcyBhbgorICAgIGFyZ3VtZW50IHRvIHRoZSBjb25zdHJ1Y3RvciBmb3IgdGhlIGNoaWxkIHByb2Nlc3MuCiAKLSAgICBBcGFydCBmcm9tIG1ha2luZyB0aGUgY29kZSAocG90ZW50aWFsbHkpIGNvbXBhdGlibGUgd2l0aCBXaW5kb3dzIHRoaXMgYWxzbwotICAgIGVuc3VyZXMgdGhhdCBhcyBsb25nIGFzIHRoZSBjaGlsZCBwcm9jZXNzIGlzIHN0aWxsIGFsaXZlIHRoZSBvYmplY3Qgd2lsbCBub3QKLSAgICBiZSBnYXJiYWdlIGNvbGxlY3RlZCBpbiB0aGUgcGFyZW50IHByb2Nlc3MuICBUaGlzIG1pZ2h0IGJlIGltcG9ydGFudCBpZiBzb21lCi0gICAgcmVzb3VyY2UgaXMgZnJlZWQgd2hlbiB0aGUgb2JqZWN0IGlzIGdhcmJhZ2UgY29sbGVjdGVkIGluIHRoZSBwYXJlbnQKLSAgICBwcm9jZXNzLgorICAgIEFwYXJ0IGZyb20gbWFraW5nIHRoZSBjb2RlIChwb3RlbnRpYWxseSkgY29tcGF0aWJsZSB3aXRoIFdpbmRvd3MKKyAgICBhbmQgdGhlIG90aGVyIHN0YXJ0IG1ldGhvZHMgdGhpcyBhbHNvIGVuc3VyZXMgdGhhdCBhcyBsb25nIGFzIHRoZQorICAgIGNoaWxkIHByb2Nlc3MgaXMgc3RpbGwgYWxpdmUgdGhlIG9iamVjdCB3aWxsIG5vdCBiZSBnYXJiYWdlCisgICAgY29sbGVjdGVkIGluIHRoZSBwYXJlbnQgcHJvY2Vzcy4gIFRoaXMgbWlnaHQgYmUgaW1wb3J0YW50IGlmIHNvbWUKKyAgICByZXNvdXJjZSBpcyBmcmVlZCB3aGVuIHRoZSBvYmplY3QgaXMgZ2FyYmFnZSBjb2xsZWN0ZWQgaW4gdGhlCisgICAgcGFyZW50IHByb2Nlc3MuCiAKICAgICBTbyBmb3IgaW5zdGFuY2UgOjoKIApAQCAtMjM5OSwxNyArMjY5MCwxOSBAQAogCiAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSA6aXNzdWU6YDUxNTVgLCA6aXNzdWU6YDUzMTNgIGFuZCA6aXNzdWU6YDUzMzFgCiAKLVdpbmRvd3MKLX5+fn5+fn4KK1RoZSAqc3Bhd24qIGFuZCAqZm9ya3NlcnZlciogc3RhcnQgbWV0aG9kcworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CiAKLVNpbmNlIFdpbmRvd3MgbGFja3MgOmZ1bmM6YG9zLmZvcmtgIGl0IGhhcyBhIGZldyBleHRyYSByZXN0cmljdGlvbnM6CitUaGVyZSBhcmUgYSBmZXcgZXh0cmEgcmVzdHJpY3Rpb24gd2hpY2ggZG9uJ3QgYXBwbHkgdG8gdGhlICpmb3JrKgorc3RhcnQgbWV0aG9kLgogCiBNb3JlIHBpY2tsYWJpbGl0eQogCi0gICAgRW5zdXJlIHRoYXQgYWxsIGFyZ3VtZW50cyB0byA6bWV0aDpgUHJvY2Vzcy5fX2luaXRfX2AgYXJlIHBpY2tsYWJsZS4gIFRoaXMKLSAgICBtZWFucywgaW4gcGFydGljdWxhciwgdGhhdCBib3VuZCBvciB1bmJvdW5kIG1ldGhvZHMgY2Fubm90IGJlIHVzZWQgZGlyZWN0bHkKLSAgICBhcyB0aGUgYGB0YXJnZXRgYCBhcmd1bWVudCBvbiBXaW5kb3dzIC0tLSBqdXN0IGRlZmluZSBhIGZ1bmN0aW9uIGFuZCB1c2UKLSAgICB0aGF0IGluc3RlYWQuCisgICAgRW5zdXJlIHRoYXQgYWxsIGFyZ3VtZW50cyB0byA6bWV0aDpgUHJvY2Vzcy5fX2luaXRfX2AgYXJlCisgICAgcGlja2xhYmxlLiAgVGhpcyBtZWFucywgaW4gcGFydGljdWxhciwgdGhhdCBib3VuZCBvciB1bmJvdW5kCisgICAgbWV0aG9kcyBjYW5ub3QgYmUgdXNlZCBkaXJlY3RseSBhcyB0aGUgYGB0YXJnZXRgYCAodW5sZXNzIHlvdSB1c2UKKyAgICB0aGUgKmZvcmsqIHN0YXJ0IG1ldGhvZCkgLS0tIGp1c3QgZGVmaW5lIGEgZnVuY3Rpb24gYW5kIHVzZSB0aGF0CisgICAgaW5zdGVhZC4KIAogICAgIEFsc28sIGlmIHlvdSBzdWJjbGFzcyA6Y2xhc3M6YH5tdWx0aXByb2Nlc3NpbmcuUHJvY2Vzc2AgdGhlbiBtYWtlIHN1cmUgdGhhdAogICAgIGluc3RhbmNlcyB3aWxsIGJlIHBpY2tsYWJsZSB3aGVuIHRoZSA6bWV0aDpgUHJvY2Vzcy5zdGFydApAQCAtMjQzMSw3ICsyNzI0LDggQEAKICAgICBpbnRlcnByZXRlciB3aXRob3V0IGNhdXNpbmcgdW5pbnRlbmRlZCBzaWRlIGVmZmVjdHMgKHN1Y2ggYSBzdGFydGluZyBhIG5ldwogICAgIHByb2Nlc3MpLgogCi0gICAgRm9yIGV4YW1wbGUsIHVuZGVyIFdpbmRvd3MgcnVubmluZyB0aGUgZm9sbG93aW5nIG1vZHVsZSB3b3VsZCBmYWlsIHdpdGggYQorICAgIEZvciBleGFtcGxlLCB1c2luZyB0aGUgKnNwYXduKiBvciAqZm9ya3NlcnZlciogc3RhcnQgbWV0aG9kCisgICAgcnVubmluZyB0aGUgZm9sbG93aW5nIG1vZHVsZSB3b3VsZCBmYWlsIHdpdGggYQogICAgIDpleGM6YFJ1bnRpbWVFcnJvcmA6OgogCiAgICAgICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nIGltcG9ydCBQcm9jZXNzCkBAIC0yNDQ1LDEzICsyNzM5LDE0IEBACiAgICAgSW5zdGVhZCBvbmUgc2hvdWxkIHByb3RlY3QgdGhlICJlbnRyeSBwb2ludCIgb2YgdGhlIHByb2dyYW0gYnkgdXNpbmcgYGBpZgogICAgIF9fbmFtZV9fID09ICdfX21haW5fXyc6YGAgYXMgZm9sbG93czo6CiAKLSAgICAgICBmcm9tIG11bHRpcHJvY2Vzc2luZyBpbXBvcnQgUHJvY2VzcywgZnJlZXplX3N1cHBvcnQKKyAgICAgICBmcm9tIG11bHRpcHJvY2Vzc2luZyBpbXBvcnQgUHJvY2VzcywgZnJlZXplX3N1cHBvcnQsIHNldF9zdGFydF9tZXRob2QKIAogICAgICAgIGRlZiBmb28oKToKICAgICAgICAgICAgcHJpbnQoJ2hlbGxvJykKIAogICAgICAgIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgICAgICAgIGZyZWV6ZV9zdXBwb3J0KCkKKyAgICAgICAgICAgc2V0X3N0YXJ0X21ldGhvZCgnc3Bhd24nKQogICAgICAgICAgICBwID0gUHJvY2Vzcyh0YXJnZXQ9Zm9vKQogICAgICAgICAgICBwLnN0YXJ0KCkKIApAQCAtMjQ4MiwyNiArMjc3Nyw3IEBACiAgICA6bGFuZ3VhZ2U6IHB5dGhvbjMKIAogCi1TeW5jaHJvbml6YXRpb24gdHlwZXMgbGlrZSBsb2NrcywgY29uZGl0aW9ucyBhbmQgcXVldWVzOgotCi0uLiBsaXRlcmFsaW5jbHVkZTo6IC4uL2luY2x1ZGVzL21wX3N5bmNocm9uaXplLnB5Ci0gICA6bGFuZ3VhZ2U6IHB5dGhvbjMKLQotCiBBbiBleGFtcGxlIHNob3dpbmcgaG93IHRvIHVzZSBxdWV1ZXMgdG8gZmVlZCB0YXNrcyB0byBhIGNvbGxlY3Rpb24gb2Ygd29ya2VyCiBwcm9jZXNzZXMgYW5kIGNvbGxlY3QgdGhlIHJlc3VsdHM6CiAKIC4uIGxpdGVyYWxpbmNsdWRlOjogLi4vaW5jbHVkZXMvbXBfd29ya2Vycy5weQotCi0KLUFuIGV4YW1wbGUgb2YgaG93IGEgcG9vbCBvZiB3b3JrZXIgcHJvY2Vzc2VzIGNhbiBlYWNoIHJ1biBhCi06Y2xhc3M6YH5odHRwLnNlcnZlci5TaW1wbGVIVFRQUmVxdWVzdEhhbmRsZXJgIGluc3RhbmNlIHdoaWxlIHNoYXJpbmcgYSBzaW5nbGUKLWxpc3RlbmluZyBzb2NrZXQuCi0KLS4uIGxpdGVyYWxpbmNsdWRlOjogLi4vaW5jbHVkZXMvbXBfd2Vic2VydmVyLnB5Ci0KLQotU29tZSBzaW1wbGUgYmVuY2htYXJrcyBjb21wYXJpbmcgOm1vZDpgbXVsdGlwcm9jZXNzaW5nYCB3aXRoIDptb2Q6YHRocmVhZGluZ2A6Ci0KLS4uIGxpdGVyYWxpbmNsdWRlOjogLi4vaW5jbHVkZXMvbXBfYmVuY2htYXJrcy5weQotCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9uZXRyYy5yc3QgYi9Eb2MvbGlicmFyeS9uZXRyYy5yc3QKaW5kZXggNTY0ZjEwMS4uMjNmZmVkNiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvbmV0cmMucnN0CisrKyBiL0RvYy9saWJyYXJ5L25ldHJjLnJzdApAQCAtMjksNyArMjksNyBAQAogICAgVGhpcyBpbXBsZW1lbnRzIHNlY3VyaXR5IGJlaGF2aW9yIGVxdWl2YWxlbnQgdG8gdGhhdCBvZiBmdHAgYW5kIG90aGVyCiAgICBwcm9ncmFtcyB0aGF0IHVzZSA6ZmlsZTpgLm5ldHJjYC4KIAotICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMuMyBBZGRlZCB0aGUgUE9TSVggcGVybWlzc2lvbiBjaGVjay4KKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40IEFkZGVkIHRoZSBQT1NJWCBwZXJtaXNzaW9uIGNoZWNrLgogCiAKIC4uIGV4Y2VwdGlvbjo6IE5ldHJjUGFyc2VFcnJvcgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvbm50cGxpYi5yc3QgYi9Eb2MvbGlicmFyeS9ubnRwbGliLnJzdAppbmRleCBhMTVkN2Y3Li45ZmIxYjQ1IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9ubnRwbGliLnJzdAorKysgYi9Eb2MvbGlicmFyeS9ubnRwbGliLnJzdApAQCAtMSw0ICsxLDMgQEAKLQogOm1vZDpgbm50cGxpYmAgLS0tIE5OVFAgcHJvdG9jb2wgY2xpZW50CiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIApAQCAtNzAsOSArNjksOSBAQAogICAgY29ubmVjdGluZyB0byBhbiBOTlRQIHNlcnZlciBvbiB0aGUgbG9jYWwgbWFjaGluZSBhbmQgaW50ZW5kIHRvIGNhbGwKICAgIHJlYWRlci1zcGVjaWZpYyBjb21tYW5kcywgc3VjaCBhcyBgYGdyb3VwYGAuICBJZiB5b3UgZ2V0IHVuZXhwZWN0ZWQKICAgIDpleGM6YE5OVFBQZXJtYW5lbnRFcnJvcmBcIHMsIHlvdSBtaWdodCBuZWVkIHRvIHNldCAqcmVhZGVybW9kZSouCi0gICA6Y2xhc3M6YE5OVFBgIGNsYXNzIHN1cHBvcnRzIHRoZSA6a2V5d29yZDpgd2l0aGAgc3RhdGVtZW50IHRvCi0gICB1bmNvbmRpdGlvbmFsbHkgY29uc3VtZSA6ZXhjOmBzb2NrZXQuZXJyb3JgIGV4Y2VwdGlvbnMgYW5kIHRvIGNsb3NlIHRoZSBOTlRQCi0gICBjb25uZWN0aW9uIHdoZW4gZG9uZS4gSGVyZSBpcyBhIHNhbXBsZSBvbiBob3cgdXNpbmcgaXQ6CisgICBUaGUgOmNsYXNzOmBOTlRQYCBjbGFzcyBzdXBwb3J0cyB0aGUgOmtleXdvcmQ6YHdpdGhgIHN0YXRlbWVudCB0bworICAgdW5jb25kaXRpb25hbGx5IGNvbnN1bWUgOmV4YzpgT1NFcnJvcmAgZXhjZXB0aW9ucyBhbmQgdG8gY2xvc2UgdGhlIE5OVFAKKyAgIGNvbm5lY3Rpb24gd2hlbiBkb25lLCBlLmcuOgogCiAgICAgPj4+IGZyb20gbm50cGxpYiBpbXBvcnQgTk5UUAogICAgID4+PiB3aXRoIE5OVFAoJ25ld3MuZ21hbmUub3JnJykgYXMgbjoKQEAgLTk1LDYgKzk0LDcgQEAKICAgIHBvcnQgKnBvcnQqLiAgOmNsYXNzOmBOTlRQX1NTTGAgb2JqZWN0cyBoYXZlIHRoZSBzYW1lIG1ldGhvZHMgYXMKICAgIDpjbGFzczpgTk5UUGAgb2JqZWN0cy4gIElmICpwb3J0KiBpcyBvbWl0dGVkLCBwb3J0IDU2MyAoTk5UUFMpIGlzIHVzZWQuCiAgICAqc3NsX2NvbnRleHQqIGlzIGFsc28gb3B0aW9uYWwsIGFuZCBpcyBhIDpjbGFzczpgfnNzbC5TU0xDb250ZXh0YCBvYmplY3QuCisgICBQbGVhc2UgcmVhZCA6cmVmOmBzc2wtc2VjdXJpdHlgIGZvciBiZXN0IHByYWN0aWNlcy4KICAgIEFsbCBvdGhlciBwYXJhbWV0ZXJzIGJlaGF2ZSB0aGUgc2FtZSBhcyBmb3IgOmNsYXNzOmBOTlRQYC4KIAogICAgTm90ZSB0aGF0IFNTTC1vbi01NjMgaXMgZGlzY291cmFnZWQgcGVyIDpyZmM6YDQ2NDJgLCBpbiBmYXZvciBvZgpAQCAtMTAzLDYgKzEwMywxMCBAQAogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSBjbGFzcyBub3cgc3VwcG9ydHMgaG9zdG5hbWUgY2hlY2sgd2l0aAorICAgICAgOmF0dHI6YHNzbC5TU0xDb250ZXh0LmNoZWNrX2hvc3RuYW1lYCBhbmQgKlNlcnZlciBOYW1lIEluZGljYXRpb24qIChzZWUKKyAgICAgIDpkYXRhOmBzc2wuSEFTX1NOSWApLgogCiAuLiBleGNlcHRpb246OiBOTlRQRXJyb3IKIApAQCAtMjMxLDkgKzIzNSwxMCBAQAogCiAuLiBtZXRob2Q6OiBOTlRQLnN0YXJ0dGxzKHNzbF9jb250ZXh0PU5vbmUpCiAKLSAgIFNlbmQgYSBgYFNUQVJUVExTYGAgY29tbWFuZC4gIFRoZSAqc3NsX2NvbnRleHQqIGFyZ3VtZW50IGlzIG9wdGlvbmFsCi0gICBhbmQgc2hvdWxkIGJlIGEgOmNsYXNzOmBzc2wuU1NMQ29udGV4dGAgb2JqZWN0LiAgVGhpcyB3aWxsIGVuYWJsZQotICAgZW5jcnlwdGlvbiBvbiB0aGUgTk5UUCBjb25uZWN0aW9uLgorICAgU2VuZCBhIGBgU1RBUlRUTFNgYCBjb21tYW5kLiAgVGhpcyB3aWxsIGVuYWJsZSBlbmNyeXB0aW9uIG9uIHRoZSBOTlRQCisgICBjb25uZWN0aW9uLiAgVGhlICpzc2xfY29udGV4dCogYXJndW1lbnQgaXMgb3B0aW9uYWwgYW5kIHNob3VsZCBiZSBhCisgICA6Y2xhc3M6YHNzbC5TU0xDb250ZXh0YCBvYmplY3QuICBQbGVhc2UgcmVhZCA6cmVmOmBzc2wtc2VjdXJpdHlgIGZvciBiZXN0CisgICBwcmFjdGljZXMuCiAKICAgIE5vdGUgdGhhdCB0aGlzIG1heSBub3QgYmUgZG9uZSBhZnRlciBhdXRoZW50aWNhdGlvbiBpbmZvcm1hdGlvbiBoYXMKICAgIGJlZW4gdHJhbnNtaXR0ZWQsIGFuZCBhdXRoZW50aWNhdGlvbiBvY2N1cnMgYnkgZGVmYXVsdCBpZiBwb3NzaWJsZSBkdXJpbmcgYQpAQCAtMjQyLDYgKzI0NywxMCBAQAogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSBtZXRob2Qgbm93IHN1cHBvcnRzIGhvc3RuYW1lIGNoZWNrIHdpdGgKKyAgICAgIDphdHRyOmBzc2wuU1NMQ29udGV4dC5jaGVja19ob3N0bmFtZWAgYW5kICpTZXJ2ZXIgTmFtZSBJbmRpY2F0aW9uKiAoc2VlCisgICAgICA6ZGF0YTpgc3NsLkhBU19TTklgKS4KIAogLi4gbWV0aG9kOjogTk5UUC5uZXdncm91cHMoZGF0ZSwgKiwgZmlsZT1Ob25lKQogCkBAIC0zMzIsNyArMzQxLDcgQEAKIAogLi4gbWV0aG9kOjogTk5UUC5vdmVyKG1lc3NhZ2Vfc3BlYywgKiwgZmlsZT1Ob25lKQogCi0gICBTZW5kIGEgYGBPVkVSYGAgY29tbWFuZCwgb3IgYSBgYFhPVkVSYGAgY29tbWFuZCBvbiBsZWdhY3kgc2VydmVycy4KKyAgIFNlbmQgYW4gYGBPVkVSYGAgY29tbWFuZCwgb3IgYW4gYGBYT1ZFUmBgIGNvbW1hbmQgb24gbGVnYWN5IHNlcnZlcnMuCiAgICAqbWVzc2FnZV9zcGVjKiBjYW4gYmUgZWl0aGVyIGEgc3RyaW5nIHJlcHJlc2VudGluZyBhIG1lc3NhZ2UgaWQsIG9yCiAgICBhIGBgKGZpcnN0LCBsYXN0KWBgIHR1cGxlIG9mIG51bWJlcnMgaW5kaWNhdGluZyBhIHJhbmdlIG9mIGFydGljbGVzIGluCiAgICB0aGUgY3VycmVudCBncm91cCwgb3IgYSBgYChmaXJzdCwgTm9uZSlgYCB0dXBsZSBpbmRpY2F0aW5nIGEgcmFuZ2Ugb2YKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L251bWJlcnMucnN0IGIvRG9jL2xpYnJhcnkvbnVtYmVycy5yc3QKaW5kZXggZmVjMDRlZC4uOGFiMDdkMCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvbnVtYmVycy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvbnVtYmVycy5yc3QKQEAgLTExMCw2ICsxMTAsOCBAQAogICAgIE15Rm9vLnJlZ2lzdGVyKFJlYWwpCiAKIAorLi4gX2ltcGxlbWVudGluZy10aGUtYXJpdGhtZXRpYy1vcGVyYXRpb25zOgorCiBJbXBsZW1lbnRpbmcgdGhlIGFyaXRobWV0aWMgb3BlcmF0aW9ucwogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvbnVtZXJpYy5yc3QgYi9Eb2MvbGlicmFyeS9udW1lcmljLnJzdAppbmRleCAyNzMyYTg0Li43Yzc2YTQ3IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9udW1lcmljLnJzdAorKysgYi9Eb2MvbGlicmFyeS9udW1lcmljLnJzdApAQCAtMjMsMyArMjMsNCBAQAogICAgZGVjaW1hbC5yc3QKICAgIGZyYWN0aW9ucy5yc3QKICAgIHJhbmRvbS5yc3QKKyAgIHN0YXRpc3RpY3MucnN0CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9vcGVyYXRvci5yc3QgYi9Eb2MvbGlicmFyeS9vcGVyYXRvci5yc3QKaW5kZXggMjRiZWNmOS4uZjllMmEzZCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvb3BlcmF0b3IucnN0CisrKyBiL0RvYy9saWJyYXJ5L29wZXJhdG9yLnJzdApAQCAtMTEsNiArMTEsOSBAQAogICAgaW1wb3J0IG9wZXJhdG9yCiAgICBmcm9tIG9wZXJhdG9yIGltcG9ydCBpdGVtZ2V0dGVyLCBpYWRkCiAKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL29wZXJhdG9yLnB5YAorCistLS0tLS0tLS0tLS0tLQogCiBUaGUgOm1vZDpgb3BlcmF0b3JgIG1vZHVsZSBleHBvcnRzIGEgc2V0IG9mIGVmZmljaWVudCBmdW5jdGlvbnMgY29ycmVzcG9uZGluZyB0bwogdGhlIGludHJpbnNpYyBvcGVyYXRvcnMgb2YgUHl0aG9uLiAgRm9yIGV4YW1wbGUsIGBgb3BlcmF0b3IuYWRkKHgsIHkpYGAgaXMKQEAgLTIyNSwxNSArMjI4LDE0IEBACiAKICAgIFNldCB0aGUgdmFsdWUgb2YgKmEqIGF0IGluZGV4ICpiKiB0byAqYyouCiAKLUV4YW1wbGU6IEJ1aWxkIGEgZGljdGlvbmFyeSB0aGF0IG1hcHMgdGhlIG9yZGluYWxzIGZyb20gYGAwYGAgdG8gYGAyNTVgYCB0bwotdGhlaXIgY2hhcmFjdGVyIGVxdWl2YWxlbnRzLgogCi0gICA+Pj4gZCA9IHt9Ci0gICA+Pj4ga2V5cyA9IHJhbmdlKDI1NikKLSAgID4+PiB2YWxzID0gbWFwKGNociwga2V5cykKLSAgID4+PiBtYXAob3BlcmF0b3Iuc2V0aXRlbSwgW2RdKmxlbihrZXlzKSwga2V5cywgdmFscykgICAjIGRvY3Rlc3Q6ICtTS0lQCisuLiBmdW5jdGlvbjo6IGxlbmd0aF9oaW50KG9iaiwgZGVmYXVsdD0wKQogCi0uLiBYWFg6IGZpbmQgYSBiZXR0ZXIsIHJlYWRhYmxlLCBleGFtcGxlCisgICBSZXR1cm4gYW4gZXN0aW1hdGVkIGxlbmd0aCBmb3IgdGhlIG9iamVjdCAqbyouIEZpcnN0IHRyeSB0byByZXR1cm4gaXRzCisgICBhY3R1YWwgbGVuZ3RoLCB0aGVuIGFuIGVzdGltYXRlIHVzaW5nIDptZXRoOmBvYmplY3QuX19sZW5ndGhfaGludF9fYCwgYW5kCisgICBmaW5hbGx5IHJldHVybiB0aGUgZGVmYXVsdCB2YWx1ZS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CiAKIFRoZSA6bW9kOmBvcGVyYXRvcmAgbW9kdWxlIGFsc28gZGVmaW5lcyB0b29scyBmb3IgZ2VuZXJhbGl6ZWQgYXR0cmlidXRlIGFuZCBpdGVtCiBsb29rdXBzLiAgVGhlc2UgYXJlIHVzZWZ1bCBmb3IgbWFraW5nIGZhc3QgZmllbGQgZXh0cmFjdG9ycyBhcyBhcmd1bWVudHMgZm9yCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9vcHRwYXJzZS5yc3QgYi9Eb2MvbGlicmFyeS9vcHRwYXJzZS5yc3QKaW5kZXggMTMzOTViNi4uMTYwYzI5ZCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvb3B0cGFyc2UucnN0CisrKyBiL0RvYy9saWJyYXJ5L29wdHBhcnNlLnJzdApAQCAtOCw4ICs4LDggQEAKIC4uIHNlY3Rpb25hdXRob3I6OiBHcmVnIFdhcmQgPGd3YXJkQHB5dGhvbi5uZXQ+CiAKIC4uIGRlcHJlY2F0ZWQ6OiAzLjIKLSAgVGhlIDptb2Q6YG9wdHBhcnNlYCBtb2R1bGUgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBub3QgYmUgZGV2ZWxvcGVkIGZ1cnRoZXI7Ci0gIGRldmVsb3BtZW50IHdpbGwgY29udGludWUgd2l0aCB0aGUgOm1vZDpgYXJncGFyc2VgIG1vZHVsZS4KKyAgIFRoZSA6bW9kOmBvcHRwYXJzZWAgbW9kdWxlIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgbm90IGJlIGRldmVsb3BlZCBmdXJ0aGVyOworICAgZGV2ZWxvcG1lbnQgd2lsbCBjb250aW51ZSB3aXRoIHRoZSA6bW9kOmBhcmdwYXJzZWAgbW9kdWxlLgogCiAqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9vcHRwYXJzZS5weWAKIApAQCAtMTMyNCw3ICsxMzI0LDcgQEAKICAgIHRoZSBsaXN0IG9mIGFyZ3VtZW50cyB0byBwcm9jZXNzIChkZWZhdWx0OiBgYHN5cy5hcmd2WzE6XWBgKQogCiBgYHZhbHVlc2BgCi0gICBhIDpjbGFzczpgb3B0cGFyc2UuVmFsdWVzYCBvYmplY3QgdG8gc3RvcmUgb3B0aW9uIGFyZ3VtZW50cyBpbiAoZGVmYXVsdDogYQorICAgYW4gOmNsYXNzOmBvcHRwYXJzZS5WYWx1ZXNgIG9iamVjdCB0byBzdG9yZSBvcHRpb24gYXJndW1lbnRzIGluIChkZWZhdWx0OiBhCiAgICBuZXcgaW5zdGFuY2Ugb2YgOmNsYXNzOmBWYWx1ZXNgKSAtLSBpZiB5b3UgZ2l2ZSBhbiBleGlzdGluZyBvYmplY3QsIHRoZQogICAgb3B0aW9uIGRlZmF1bHRzIHdpbGwgbm90IGJlIGluaXRpYWxpemVkIG9uIGl0CiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L29zLnBhdGgucnN0IGIvRG9jL2xpYnJhcnkvb3MucGF0aC5yc3QKaW5kZXggNTdhNmJjYS4uMzNlZjU2NCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvb3MucGF0aC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvb3MucGF0aC5yc3QKQEAgLTIyLDYgKzIyLDExIEBACiBleHBsaWNpdGx5IHdoZW4gYW4gYXBwbGljYXRpb24gZGVzaXJlcyBzaGVsbC1saWtlIHBhdGggZXhwYW5zaW9uLiAgKFNlZSBhbHNvCiB0aGUgOm1vZDpgZ2xvYmAgbW9kdWxlLikKIAorCisuLiBzZWVhbHNvOjoKKyAgIFRoZSA6bW9kOmBwYXRobGliYCBtb2R1bGUgb2ZmZXJzIGhpZ2gtbGV2ZWwgcGF0aCBvYmplY3RzLgorCisKIC4uIG5vdGU6OgogCiAgICBBbGwgb2YgdGhlc2UgZnVuY3Rpb25zIGFjY2VwdCBlaXRoZXIgb25seSBieXRlcyBvciBvbmx5IHN0cmluZyBvYmplY3RzIGFzCkBAIC00Miw3ICs0Nyw2IEBACiAgICAqIDptb2Q6YHBvc2l4cGF0aGAgZm9yIFVOSVgtc3R5bGUgcGF0aHMKICAgICogOm1vZDpgbnRwYXRoYCBmb3IgV2luZG93cyBwYXRocwogICAgKiA6bW9kOmBtYWNwYXRoYCBmb3Igb2xkLXN0eWxlIE1hY09TIHBhdGhzCi0gICAqIDptb2Q6YG9zMmVteHBhdGhgIGZvciBPUy8yIEVNWCBwYXRocwogCiAKIC4uIGZ1bmN0aW9uOjogYWJzcGF0aChwYXRoKQpAQCAtMTg0LDI5ICsxODgsNDAgQEAKIC4uIGZ1bmN0aW9uOjogaXNsaW5rKHBhdGgpCiAKICAgIFJldHVybiBgYFRydWVgYCBpZiAqcGF0aCogcmVmZXJzIHRvIGEgZGlyZWN0b3J5IGVudHJ5IHRoYXQgaXMgYSBzeW1ib2xpYyBsaW5rLgotICAgQWx3YXlzIGBgRmFsc2VgYCBpZiBzeW1ib2xpYyBsaW5rcyBhcmUgbm90IHN1cHBvcnRlZC4KKyAgIEFsd2F5cyBgYEZhbHNlYGAgaWYgc3ltYm9saWMgbGlua3MgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIHB5dGhvbiBydW50aW1lLgogCiAKIC4uIGZ1bmN0aW9uOjogaXNtb3VudChwYXRoKQogCi0gICBSZXR1cm4gYGBUcnVlYGAgaWYgcGF0aG5hbWUgKnBhdGgqIGlzIGEgOmRmbjpgbW91bnQgcG9pbnRgOiBhIHBvaW50IGluIGEgZmlsZQotICAgc3lzdGVtIHdoZXJlIGEgZGlmZmVyZW50IGZpbGUgc3lzdGVtIGhhcyBiZWVuIG1vdW50ZWQuICBUaGUgZnVuY3Rpb24gY2hlY2tzCi0gICB3aGV0aGVyICpwYXRoKidzIHBhcmVudCwgOmZpbGU6YHBhdGgvLi5gLCBpcyBvbiBhIGRpZmZlcmVudCBkZXZpY2UgdGhhbiAqcGF0aCosCi0gICBvciB3aGV0aGVyIDpmaWxlOmBwYXRoLy4uYCBhbmQgKnBhdGgqIHBvaW50IHRvIHRoZSBzYW1lIGktbm9kZSBvbiB0aGUgc2FtZQotICAgZGV2aWNlIC0tLSB0aGlzIHNob3VsZCBkZXRlY3QgbW91bnQgcG9pbnRzIGZvciBhbGwgVW5peCBhbmQgUE9TSVggdmFyaWFudHMuCisgICBSZXR1cm4gYGBUcnVlYGAgaWYgcGF0aG5hbWUgKnBhdGgqIGlzIGEgOmRmbjpgbW91bnQgcG9pbnRgOiBhIHBvaW50IGluIGEKKyAgIGZpbGUgc3lzdGVtIHdoZXJlIGEgZGlmZmVyZW50IGZpbGUgc3lzdGVtIGhhcyBiZWVuIG1vdW50ZWQuICBPbiBQT1NJWCwgdGhlCisgICBmdW5jdGlvbiBjaGVja3Mgd2hldGhlciAqcGF0aConcyBwYXJlbnQsIDpmaWxlOmBwYXRoLy4uYCwgaXMgb24gYSBkaWZmZXJlbnQKKyAgIGRldmljZSB0aGFuICpwYXRoKiwgb3Igd2hldGhlciA6ZmlsZTpgcGF0aC8uLmAgYW5kICpwYXRoKiBwb2ludCB0byB0aGUgc2FtZQorICAgaS1ub2RlIG9uIHRoZSBzYW1lIGRldmljZSAtLS0gdGhpcyBzaG91bGQgZGV0ZWN0IG1vdW50IHBvaW50cyBmb3IgYWxsIFVuaXgKKyAgIGFuZCBQT1NJWCB2YXJpYW50cy4gIE9uIFdpbmRvd3MsIGEgZHJpdmUgbGV0dGVyIHJvb3QgYW5kIGEgc2hhcmUgVU5DIGFyZQorICAgYWx3YXlzIG1vdW50IHBvaW50cywgYW5kIGZvciBhbnkgb3RoZXIgcGF0aCBgYEdldFZvbHVtZVBhdGhOYW1lYGAgaXMgY2FsbGVkCisgICB0byBzZWUgaWYgaXQgaXMgZGlmZmVyZW50IGZyb20gdGhlIGlucHV0IHBhdGguCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorICAgICAgU3VwcG9ydCBmb3IgZGV0ZWN0aW5nIG5vbi1yb290IG1vdW50IHBvaW50cyBvbiBXaW5kb3dzLgogCiAKLS4uIGZ1bmN0aW9uOjogam9pbihwYXRoMVssIHBhdGgyWywgLi4uXV0pCisuLiBmdW5jdGlvbjo6IGpvaW4ocGF0aCwgKnBhdGhzKQogCi0gICBKb2luIG9uZSBvciBtb3JlIHBhdGggY29tcG9uZW50cyBpbnRlbGxpZ2VudGx5LiAgSWYgYW55IGNvbXBvbmVudCBpcyBhbiBhYnNvbHV0ZQotICAgcGF0aCwgYWxsIHByZXZpb3VzIGNvbXBvbmVudHMgKG9uIFdpbmRvd3MsIGluY2x1ZGluZyB0aGUgcHJldmlvdXMgZHJpdmUgbGV0dGVyLAotICAgaWYgdGhlcmUgd2FzIG9uZSkgYXJlIHRocm93biBhd2F5LCBhbmQgam9pbmluZyBjb250aW51ZXMuICBUaGUgcmV0dXJuIHZhbHVlIGlzCi0gICB0aGUgY29uY2F0ZW5hdGlvbiBvZiAqcGF0aDEqLCBhbmQgb3B0aW9uYWxseSAqcGF0aDIqLCBldGMuLCB3aXRoIGV4YWN0bHkgb25lCi0gICBkaXJlY3Rvcnkgc2VwYXJhdG9yIChgYG9zLnNlcGBgKSBmb2xsb3dpbmcgZWFjaCBub24tZW1wdHkgcGFydCBleGNlcHQgdGhlIGxhc3QuCi0gICAoVGhpcyBtZWFucyB0aGF0IGFuIGVtcHR5IGxhc3QgcGFydCB3aWxsIHJlc3VsdCBpbiBhIHBhdGggdGhhdCBlbmRzIHdpdGggYQotICAgc2VwYXJhdG9yLikgIE5vdGUgdGhhdCBvbiBXaW5kb3dzLCBzaW5jZSB0aGVyZSBpcyBhIGN1cnJlbnQgZGlyZWN0b3J5IGZvcgotICAgZWFjaCBkcml2ZSwgYGBvcy5wYXRoLmpvaW4oImM6IiwgImZvbyIpYGAgcmVwcmVzZW50cyBhIHBhdGggcmVsYXRpdmUgdG8gdGhlCi0gICBjdXJyZW50IGRpcmVjdG9yeSBvbiBkcml2ZSA6ZmlsZTpgQzpgICg6ZmlsZTpgYzpmb29gKSwgbm90IDpmaWxlOmBjOlxcZm9vYC4KKyAgIEpvaW4gb25lIG9yIG1vcmUgcGF0aCBjb21wb25lbnRzIGludGVsbGlnZW50bHkuICBUaGUgcmV0dXJuIHZhbHVlIGlzIHRoZQorICAgY29uY2F0ZW5hdGlvbiBvZiAqcGF0aCogYW5kIGFueSBtZW1iZXJzIG9mICpcKnBhdGhzKiB3aXRoIGV4YWN0bHkgb25lCisgICBkaXJlY3Rvcnkgc2VwYXJhdG9yIChgYG9zLnNlcGBgKSBmb2xsb3dpbmcgZWFjaCBub24tZW1wdHkgcGFydCBleGNlcHQgdGhlCisgICBsYXN0LCBtZWFuaW5nIHRoYXQgdGhlIHJlc3VsdCB3aWxsIG9ubHkgZW5kIGluIGEgc2VwYXJhdG9yIGlmIHRoZSBsYXN0CisgICBwYXJ0IGlzIGVtcHR5LiAgSWYgYSBjb21wb25lbnQgaXMgYW4gYWJzb2x1dGUgcGF0aCwgYWxsIHByZXZpb3VzCisgICBjb21wb25lbnRzIGFyZSB0aHJvd24gYXdheSBhbmQgam9pbmluZyBjb250aW51ZXMgZnJvbSB0aGUgYWJzb2x1dGUgcGF0aAorICAgY29tcG9uZW50LgorCisgICBPbiBXaW5kb3dzLCB0aGUgZHJpdmUgbGV0dGVyIGlzIG5vdCByZXNldCB3aGVuIGFuIGFic29sdXRlIHBhdGggY29tcG9uZW50CisgICAoZS5nLiwgYGByJ1xmb28nYGApIGlzIGVuY291bnRlcmVkLiAgSWYgYSBjb21wb25lbnQgY29udGFpbnMgYSBkcml2ZQorICAgbGV0dGVyLCBhbGwgcHJldmlvdXMgY29tcG9uZW50cyBhcmUgdGhyb3duIGF3YXkgYW5kIHRoZSBkcml2ZSBsZXR0ZXIgaXMKKyAgIHJlc2V0LiAgTm90ZSB0aGF0IHNpbmNlIHRoZXJlIGlzIGEgY3VycmVudCBkaXJlY3RvcnkgZm9yIGVhY2ggZHJpdmUsCisgICBgYG9zLnBhdGguam9pbigiYzoiLCAiZm9vIilgYCByZXByZXNlbnRzIGEgcGF0aCByZWxhdGl2ZSB0byB0aGUgY3VycmVudAorICAgZGlyZWN0b3J5IG9uIGRyaXZlIDpmaWxlOmBDOmAgKDpmaWxlOmBjOmZvb2ApLCBub3QgOmZpbGU6YGM6XFxmb29gLgogCiAKIC4uIGZ1bmN0aW9uOjogbm9ybWNhc2UocGF0aCkKQEAgLTIzMiw3ICsyNDcsNyBAQAogICAgbGlua3MgZW5jb3VudGVyZWQgaW4gdGhlIHBhdGggKGlmIHRoZXkgYXJlIHN1cHBvcnRlZCBieSB0aGUgb3BlcmF0aW5nIHN5c3RlbSkuCiAKIAotLi4gZnVuY3Rpb246OiByZWxwYXRoKHBhdGgsIHN0YXJ0PU5vbmUpCisuLiBmdW5jdGlvbjo6IHJlbHBhdGgocGF0aCwgc3RhcnQ9b3MuY3VyZGlyKQogCiAgICBSZXR1cm4gYSByZWxhdGl2ZSBmaWxlcGF0aCB0byAqcGF0aCogZWl0aGVyIGZyb20gdGhlIGN1cnJlbnQgZGlyZWN0b3J5IG9yCiAgICBmcm9tIGFuIG9wdGlvbmFsICpzdGFydCogZGlyZWN0b3J5LiAgVGhpcyBpcyBhIHBhdGggY29tcHV0YXRpb246ICB0aGUKQEAgLTI0NywxOCArMjYyLDE3IEBACiAuLiBmdW5jdGlvbjo6IHNhbWVmaWxlKHBhdGgxLCBwYXRoMikKIAogICAgUmV0dXJuIGBgVHJ1ZWBgIGlmIGJvdGggcGF0aG5hbWUgYXJndW1lbnRzIHJlZmVyIHRvIHRoZSBzYW1lIGZpbGUgb3IgZGlyZWN0b3J5LgotICAgT24gVW5peCwgdGhpcyBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBkZXZpY2UgbnVtYmVyIGFuZCBpLW5vZGUgbnVtYmVyIGFuZCByYWlzZXMgYW4KLSAgIGV4Y2VwdGlvbiBpZiBhIDpmdW5jOmBvcy5zdGF0YCBjYWxsIG9uIGVpdGhlciBwYXRobmFtZSBmYWlscy4KLQotICAgT24gV2luZG93cywgdHdvIGZpbGVzIGFyZSB0aGUgc2FtZSBpZiB0aGV5IHJlc29sdmUgdG8gdGhlIHNhbWUgZmluYWwgcGF0aAotICAgbmFtZSB1c2luZyB0aGUgV2luZG93cyBBUEkgY2FsbCBHZXRGaW5hbFBhdGhOYW1lQnlIYW5kbGUuIFRoaXMgZnVuY3Rpb24KLSAgIHJhaXNlcyBhbiBleGNlcHRpb24gaWYgaGFuZGxlcyBjYW5ub3QgYmUgb2J0YWluZWQgdG8gZWl0aGVyIGZpbGUuCisgICBUaGlzIGlzIGRldGVybWluZWQgYnkgdGhlIGRldmljZSBudW1iZXIgYW5kIGktbm9kZSBudW1iZXIgYW5kIHJhaXNlcyBhbgorICAgZXhjZXB0aW9uIGlmIGFuIDpmdW5jOmBvcy5zdGF0YCBjYWxsIG9uIGVpdGhlciBwYXRobmFtZSBmYWlscy4KIAogICAgQXZhaWxhYmlsaXR5OiBVbml4LCBXaW5kb3dzLgogCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgogICAgICAgQWRkZWQgV2luZG93cyBzdXBwb3J0LgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgV2luZG93cyBub3cgdXNlcyB0aGUgc2FtZSBpbXBsZW1lbnRhdGlvbiBhcyBhbGwgb3RoZXIgcGxhdGZvcm1zLgorCiAKIC4uIGZ1bmN0aW9uOjogc2FtZW9wZW5maWxlKGZwMSwgZnAyKQogCkBAIC0yNzcsNyArMjkxLDEwIEBACiAgICA6ZnVuYzpgb3MubHN0YXRgLCBvciA6ZnVuYzpgb3Muc3RhdGAuICBUaGlzIGZ1bmN0aW9uIGltcGxlbWVudHMgdGhlCiAgICB1bmRlcmx5aW5nIGNvbXBhcmlzb24gdXNlZCBieSA6ZnVuYzpgc2FtZWZpbGVgIGFuZCA6ZnVuYzpgc2FtZW9wZW5maWxlYC4KIAotICAgQXZhaWxhYmlsaXR5OiBVbml4LgorICAgQXZhaWxhYmlsaXR5OiBVbml4LCBXaW5kb3dzLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgQWRkZWQgV2luZG93cyBzdXBwb3J0LgogCiAKIC4uIGZ1bmN0aW9uOjogc3BsaXQocGF0aCkKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L29zLnJzdCBiL0RvYy9saWJyYXJ5L29zLnJzdAppbmRleCBkN2I5ODI5Li43YmM1OTg5IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9vcy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvb3MucnN0CkBAIC01Myw4ICs1Myw4IEBACiAuLiBkYXRhOjogbmFtZQogCiAgICBUaGUgbmFtZSBvZiB0aGUgb3BlcmF0aW5nIHN5c3RlbSBkZXBlbmRlbnQgbW9kdWxlIGltcG9ydGVkLiAgVGhlIGZvbGxvd2luZwotICAgbmFtZXMgaGF2ZSBjdXJyZW50bHkgYmVlbiByZWdpc3RlcmVkOiBgYCdwb3NpeCdgYCwgYGAnbnQnYGAsIGBgJ21hYydgYCwKLSAgIGBgJ29zMidgYCwgYGAnY2UnYGAsIGBgJ2phdmEnYGAuCisgICBuYW1lcyBoYXZlIGN1cnJlbnRseSBiZWVuIHJlZ2lzdGVyZWQ6IGBgJ3Bvc2l4J2BgLCBgYCdudCdgYCwKKyAgIGBgJ2NlJ2BgLCBgYCdqYXZhJ2BgLgogCiAgICAuLiBzZWVhbHNvOjoKICAgICAgIDphdHRyOmBzeXMucGxhdGZvcm1gIGhhcyBhIGZpbmVyIGdyYW51bGFyaXR5LiAgOmZ1bmM6YG9zLnVuYW1lYCBnaXZlcwpAQCAtNjUsNiArNjUsNyBAQAogCiAKIC4uIF9vcy1maWxlbmFtZXM6CisuLiBfZmlsZXN5c3RlbS1lbmNvZGluZzoKIAogRmlsZSBOYW1lcywgQ29tbWFuZCBMaW5lIEFyZ3VtZW50cywgYW5kIEVudmlyb25tZW50IFZhcmlhYmxlcwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMjgwLDEwICsyODEsMTAgQEAKIC4uIGZ1bmN0aW9uOjogZ2V0bG9naW4oKQogCiAgICBSZXR1cm4gdGhlIG5hbWUgb2YgdGhlIHVzZXIgbG9nZ2VkIGluIG9uIHRoZSBjb250cm9sbGluZyB0ZXJtaW5hbCBvZiB0aGUKLSAgIHByb2Nlc3MuICBGb3IgbW9zdCBwdXJwb3NlcywgaXQgaXMgbW9yZSB1c2VmdWwgdG8gdXNlIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMKLSAgIDplbnZ2YXI6YExPR05BTUVgIG9yIDplbnZ2YXI6YFVTRVJOQU1FYCB0byBmaW5kIG91dCB3aG8gdGhlIHVzZXIgaXMsIG9yCi0gICBgYHB3ZC5nZXRwd3VpZChvcy5nZXR1aWQoKSlbMF1gYCB0byBnZXQgdGhlIGxvZ2luIG5hbWUgb2YgdGhlIGN1cnJlbnRseQotICAgZWZmZWN0aXZlIHVzZXIgaWQuCisgICBwcm9jZXNzLiAgRm9yIG1vc3QgcHVycG9zZXMsIGl0IGlzIG1vcmUgdXNlZnVsIHRvIHVzZSB0aGUgZW52aXJvbm1lbnQKKyAgIHZhcmlhYmxlcyA6ZW52dmFyOmBMT0dOQU1FYCBvciA6ZW52dmFyOmBVU0VSTkFNRWAgdG8gZmluZCBvdXQgd2hvIHRoZSB1c2VyCisgICBpcywgb3IgYGBwd2QuZ2V0cHd1aWQob3MuZ2V0dWlkKCkpWzBdYGAgdG8gZ2V0IHRoZSBsb2dpbiBuYW1lIG9mIHRoZSBjdXJyZW50CisgICByZWFsIHVzZXIgaWQuCiAKICAgIEF2YWlsYWJpbGl0eTogVW5peCwgV2luZG93cy4KIApAQCAtMzc5LDcgKzM4MCw3IEBACiAKICAgIC4uIGluZGV4Ojogc2luZ2xlOiB1c2VyOyBpZAogCi0gICBSZXR1cm4gdGhlIGN1cnJlbnQgcHJvY2VzcydzIHVzZXIgaWQuCisgICBSZXR1cm4gdGhlIGN1cnJlbnQgcHJvY2VzcydzIHJlYWwgdXNlciBpZC4KIAogICAgQXZhaWxhYmlsaXR5OiBVbml4LgogCkBAIC02ODcsMTcgKzY4OCwzMCBAQAogCiAuLiBmdW5jdGlvbjo6IGR1cChmZCkKIAotICAgUmV0dXJuIGEgZHVwbGljYXRlIG9mIGZpbGUgZGVzY3JpcHRvciAqZmQqLgorICAgUmV0dXJuIGEgZHVwbGljYXRlIG9mIGZpbGUgZGVzY3JpcHRvciAqZmQqLiBUaGUgbmV3IGZpbGUgZGVzY3JpcHRvciBpcworICAgOnJlZjpgbm9uLWluaGVyaXRhYmxlIDxmZF9pbmhlcml0YW5jZT5gLgorCisgICBPbiBXaW5kb3dzLCB3aGVuIGR1cGxpY2F0aW5nIGEgc3RhbmRhcmQgc3RyZWFtICgwOiBzdGRpbiwgMTogc3Rkb3V0LAorICAgMjogc3RkZXJyKSwgdGhlIG5ldyBmaWxlIGRlc2NyaXB0b3IgaXMgOnJlZjpgaW5oZXJpdGFibGUKKyAgIDxmZF9pbmhlcml0YW5jZT5gLgogCiAgICBBdmFpbGFiaWxpdHk6IFVuaXgsIFdpbmRvd3MuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgbmV3IGZpbGUgZGVzY3JpcHRvciBpcyBub3cgbm9uLWluaGVyaXRhYmxlLgogCi0uLiBmdW5jdGlvbjo6IGR1cDIoZmQsIGZkMikKKworLi4gZnVuY3Rpb246OiBkdXAyKGZkLCBmZDIsIGluaGVyaXRhYmxlPVRydWUpCiAKICAgIER1cGxpY2F0ZSBmaWxlIGRlc2NyaXB0b3IgKmZkKiB0byAqZmQyKiwgY2xvc2luZyB0aGUgbGF0dGVyIGZpcnN0IGlmIG5lY2Vzc2FyeS4KKyAgIFRoZSBmaWxlIGRlc2NyaXB0b3IgKmZkMiogaXMgOnJlZjpgaW5oZXJpdGFibGUgPGZkX2luaGVyaXRhbmNlPmAgYnkgZGVmYXVsdCwKKyAgIG9yIG5vbi1pbmhlcml0YWJsZSBpZiAqaW5oZXJpdGFibGUqIGlzIGBgRmFsc2VgYC4KIAogICAgQXZhaWxhYmlsaXR5OiBVbml4LCBXaW5kb3dzLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgQWRkIHRoZSBvcHRpb25hbCAqaW5oZXJpdGFibGUqIHBhcmFtZXRlci4KKwogCiAuLiBmdW5jdGlvbjo6IGZjaG1vZChmZCwgbW9kZSkKIApAQCAtNzUxLDggKzc2NSwxNCBAQAogCiAuLiBmdW5jdGlvbjo6IGZzdGF0KGZkKQogCi0gICBSZXR1cm4gc3RhdHVzIGZvciBmaWxlIGRlc2NyaXB0b3IgKmZkKiwgbGlrZSA6ZnVuYzpgfm9zLnN0YXRgLiAgQXMgb2YgUHl0aG9uCi0gICAzLjMsIHRoaXMgaXMgZXF1aXZhbGVudCB0byBgYG9zLnN0YXQoZmQpYGAuCisgICBHZXQgdGhlIHN0YXR1cyBvZiB0aGUgZmlsZSBkZXNjcmlwdG9yICpmZCouIFJldHVybiBhIDpjbGFzczpgc3RhdF9yZXN1bHRgCisgICBvYmplY3QuCisKKyAgIEFzIG9mIFB5dGhvbiAzLjMsIHRoaXMgaXMgZXF1aXZhbGVudCB0byBgYG9zLnN0YXQoZmQpYGAuCisKKyAgIC4uIHNlZWFsc286OgorCisgICAgICBUaGUgOmZ1bmM6YC5zdGF0YCBmdW5jdGlvbi4KIAogICAgQXZhaWxhYmlsaXR5OiBVbml4LCBXaW5kb3dzLgogCkBAIC04NDMsMjIgKzg2MywyNiBAQAogICAgICAgOmRhdGE6YG9zLlNFRUtfSE9MRWAgb3IgOmRhdGE6YG9zLlNFRUtfREFUQWAuCiAKIAotLi4gZnVuY3Rpb246OiBvcGVuKGZpbGUsIGZsYWdzLCBtb2RlPTBvNzc3LCAqLCBkaXJfZmQ9Tm9uZSkKKy4uIGZ1bmN0aW9uOjogb3BlbihwYXRoLCBmbGFncywgbW9kZT0wbzc3NywgKiwgZGlyX2ZkPU5vbmUpCiAKLSAgIE9wZW4gdGhlIGZpbGUgKmZpbGUqIGFuZCBzZXQgdmFyaW91cyBmbGFncyBhY2NvcmRpbmcgdG8gKmZsYWdzKiBhbmQgcG9zc2libHkKKyAgIE9wZW4gdGhlIGZpbGUgKnBhdGgqIGFuZCBzZXQgdmFyaW91cyBmbGFncyBhY2NvcmRpbmcgdG8gKmZsYWdzKiBhbmQgcG9zc2libHkKICAgIGl0cyBtb2RlIGFjY29yZGluZyB0byAqbW9kZSouICBXaGVuIGNvbXB1dGluZyAqbW9kZSosIHRoZSBjdXJyZW50IHVtYXNrIHZhbHVlCiAgICBpcyBmaXJzdCBtYXNrZWQgb3V0LiAgUmV0dXJuIHRoZSBmaWxlIGRlc2NyaXB0b3IgZm9yIHRoZSBuZXdseSBvcGVuZWQgZmlsZS4KKyAgIFRoZSBuZXcgZmlsZSBkZXNjcmlwdG9yIGlzIDpyZWY6YG5vbi1pbmhlcml0YWJsZSA8ZmRfaW5oZXJpdGFuY2U+YC4KIAogICAgRm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlIGZsYWcgYW5kIG1vZGUgdmFsdWVzLCBzZWUgdGhlIEMgcnVuLXRpbWUgZG9jdW1lbnRhdGlvbjsKICAgIGZsYWcgY29uc3RhbnRzIChsaWtlIDpjb25zdDpgT19SRE9OTFlgIGFuZCA6Y29uc3Q6YE9fV1JPTkxZYCkgYXJlIGRlZmluZWQgaW4KLSAgIHRoaXMgbW9kdWxlIHRvbyAoc2VlIDpyZWY6YG9wZW4tY29uc3RhbnRzYCkuICBJbiBwYXJ0aWN1bGFyLCBvbiBXaW5kb3dzIGFkZGluZworICAgdGhlIDptb2Q6YG9zYCBtb2R1bGUuICBJbiBwYXJ0aWN1bGFyLCBvbiBXaW5kb3dzIGFkZGluZwogICAgOmNvbnN0OmBPX0JJTkFSWWAgaXMgbmVlZGVkIHRvIG9wZW4gZmlsZXMgaW4gYmluYXJ5IG1vZGUuCiAKICAgIFRoaXMgZnVuY3Rpb24gY2FuIHN1cHBvcnQgOnJlZjpgcGF0aHMgcmVsYXRpdmUgdG8gZGlyZWN0b3J5IGRlc2NyaXB0b3JzCi0gICA8ZGlyX2ZkPmAuCisgICA8ZGlyX2ZkPmAgd2l0aCB0aGUgKmRpcl9mZCogcGFyYW1ldGVyLgogCiAgICBBdmFpbGFiaWxpdHk6IFVuaXgsIFdpbmRvd3MuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgbmV3IGZpbGUgZGVzY3JpcHRvciBpcyBub3cgbm9uLWluaGVyaXRhYmxlLgorCiAgICAuLiBub3RlOjoKIAogICAgICAgVGhpcyBmdW5jdGlvbiBpcyBpbnRlbmRlZCBmb3IgbG93LWxldmVsIEkvTy4gIEZvciBub3JtYWwgdXNhZ2UsIHVzZSB0aGUKQEAgLTg2OSwyNSArODkzLDkzIEBACiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKICAgICAgIFRoZSAqZGlyX2ZkKiBhcmd1bWVudC4KIAorVGhlIGZvbGxvd2luZyBjb25zdGFudHMgYXJlIG9wdGlvbnMgZm9yIHRoZSAqZmxhZ3MqIHBhcmFtZXRlciB0byB0aGUKKzpmdW5jOmB+b3Mub3BlbmAgZnVuY3Rpb24uICBUaGV5IGNhbiBiZSBjb21iaW5lZCB1c2luZyB0aGUgYml0d2lzZSBPUiBvcGVyYXRvcgorYGB8YGAuICBTb21lIG9mIHRoZW0gYXJlIG5vdCBhdmFpbGFibGUgb24gYWxsIHBsYXRmb3Jtcy4gIEZvciBkZXNjcmlwdGlvbnMgb2YKK3RoZWlyIGF2YWlsYWJpbGl0eSBhbmQgdXNlLCBjb25zdWx0IHRoZSA6bWFucGFnZTpgb3BlbigyKWAgbWFudWFsIHBhZ2Ugb24gVW5peAorb3IgYHRoZSBNU0ROIDxodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvejBrYzhlM3ouYXNweD5gXyBvbiBXaW5kb3dzLgorCisKKy4uIGRhdGE6OiBPX1JET05MWQorICAgICAgICAgIE9fV1JPTkxZCisgICAgICAgICAgT19SRFdSCisgICAgICAgICAgT19BUFBFTkQKKyAgICAgICAgICBPX0NSRUFUCisgICAgICAgICAgT19FWENMCisgICAgICAgICAgT19UUlVOQworCisgICBUaGVzZSBjb25zdGFudHMgYXJlIGF2YWlsYWJsZSBvbiBVbml4IGFuZCBXaW5kb3dzLgorCisKKy4uIGRhdGE6OiBPX0RTWU5DCisgICAgICAgICAgT19SU1lOQworICAgICAgICAgIE9fU1lOQworICAgICAgICAgIE9fTkRFTEFZCisgICAgICAgICAgT19OT05CTE9DSworICAgICAgICAgIE9fTk9DVFRZCisgICAgICAgICAgT19TSExPQ0sKKyAgICAgICAgICBPX0VYTE9DSworICAgICAgICAgIE9fQ0xPRVhFQworCisgICBUaGVzZSBjb25zdGFudHMgYXJlIG9ubHkgYXZhaWxhYmxlIG9uIFVuaXguCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCisgICAgICBBZGQgOmRhdGE6YE9fQ0xPRVhFQ2AgY29uc3RhbnQuCisKKy4uIGRhdGE6OiBPX0JJTkFSWQorICAgICAgICAgIE9fTk9JTkhFUklUCisgICAgICAgICAgT19TSE9SVF9MSVZFRAorICAgICAgICAgIE9fVEVNUE9SQVJZCisgICAgICAgICAgT19SQU5ET00KKyAgICAgICAgICBPX1NFUVVFTlRJQUwKKyAgICAgICAgICBPX1RFWFQKKworICAgVGhlc2UgY29uc3RhbnRzIGFyZSBvbmx5IGF2YWlsYWJsZSBvbiBXaW5kb3dzLgorCisKKy4uIGRhdGE6OiBPX0FTWU5DCisgICAgICAgICAgT19ESVJFQ1QKKyAgICAgICAgICBPX0RJUkVDVE9SWQorICAgICAgICAgIE9fTk9GT0xMT1cKKyAgICAgICAgICBPX05PQVRJTUUKKyAgICAgICAgICBPX1BBVEgKKyAgICAgICAgICBPX1RNUEZJTEUKKworICAgVGhlc2UgY29uc3RhbnRzIGFyZSBHTlUgZXh0ZW5zaW9ucyBhbmQgbm90IHByZXNlbnQgaWYgdGhleSBhcmUgbm90IGRlZmluZWQgYnkKKyAgIHRoZSBDIGxpYnJhcnkuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBBZGQgOmRhdGE6YE9fUEFUSGAgb24gc3lzdGVtcyB0aGF0IHN1cHBvcnQgaXQuCisgICAgICBBZGQgOmRhdGE6YE9fVE1QRklMRWAsIG9ubHkgYXZhaWxhYmxlIG9uIExpbnV4IEtlcm5lbCAzLjExCisgICAgICAgIG9yIG5ld2VyLgorCiAKIC4uIGZ1bmN0aW9uOjogb3BlbnB0eSgpCiAKICAgIC4uIGluZGV4OjogbW9kdWxlOiBwdHkKIAotICAgT3BlbiBhIG5ldyBwc2V1ZG8tdGVybWluYWwgcGFpci4gUmV0dXJuIGEgcGFpciBvZiBmaWxlIGRlc2NyaXB0b3JzIGBgKG1hc3RlciwKLSAgIHNsYXZlKWBgIGZvciB0aGUgcHR5IGFuZCB0aGUgdHR5LCByZXNwZWN0aXZlbHkuIEZvciBhIChzbGlnaHRseSkgbW9yZSBwb3J0YWJsZQotICAgYXBwcm9hY2gsIHVzZSB0aGUgOm1vZDpgcHR5YCBtb2R1bGUuCisgICBPcGVuIGEgbmV3IHBzZXVkby10ZXJtaW5hbCBwYWlyLiBSZXR1cm4gYSBwYWlyIG9mIGZpbGUgZGVzY3JpcHRvcnMKKyAgIGBgKG1hc3Rlciwgc2xhdmUpYGAgZm9yIHRoZSBwdHkgYW5kIHRoZSB0dHksIHJlc3BlY3RpdmVseS4gVGhlIG5ldyBmaWxlCisgICBkZXNjcmlwdG9ycyBhcmUgOnJlZjpgbm9uLWluaGVyaXRhYmxlIDxmZF9pbmhlcml0YW5jZT5gLiBGb3IgYSAoc2xpZ2h0bHkpIG1vcmUKKyAgIHBvcnRhYmxlIGFwcHJvYWNoLCB1c2UgdGhlIDptb2Q6YHB0eWAgbW9kdWxlLgogCiAgICBBdmFpbGFiaWxpdHk6IHNvbWUgZmxhdm9ycyBvZiBVbml4LgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVGhlIG5ldyBmaWxlIGRlc2NyaXB0b3JzIGFyZSBub3cgbm9uLWluaGVyaXRhYmxlLgorCiAKIC4uIGZ1bmN0aW9uOjogcGlwZSgpCiAKLSAgIENyZWF0ZSBhIHBpcGUuICBSZXR1cm4gYSBwYWlyIG9mIGZpbGUgZGVzY3JpcHRvcnMgYGAociwgdylgYCB1c2FibGUgZm9yIHJlYWRpbmcKLSAgIGFuZCB3cml0aW5nLCByZXNwZWN0aXZlbHkuCisgICBDcmVhdGUgYSBwaXBlLiAgUmV0dXJuIGEgcGFpciBvZiBmaWxlIGRlc2NyaXB0b3JzIGBgKHIsIHcpYGAgdXNhYmxlIGZvcgorICAgcmVhZGluZyBhbmQgd3JpdGluZywgcmVzcGVjdGl2ZWx5LiBUaGUgbmV3IGZpbGUgZGVzY3JpcHRvciBpcworICAgOnJlZjpgbm9uLWluaGVyaXRhYmxlIDxmZF9pbmhlcml0YW5jZT5gLgogCiAgICBBdmFpbGFiaWxpdHk6IFVuaXgsIFdpbmRvd3MuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgbmV3IGZpbGUgZGVzY3JpcHRvcnMgYXJlIG5vdyBub24taW5oZXJpdGFibGUuCisKIAogLi4gZnVuY3Rpb246OiBwaXBlMihmbGFncykKIApAQCAtOTUyLDEwICsxMDQ0LDEwIEBACiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKIAogCi0uLiBmdW5jdGlvbjo6IHB3cml0ZShmZCwgc3RyaW5nLCBvZmZzZXQpCisuLiBmdW5jdGlvbjo6IHB3cml0ZShmZCwgc3RyLCBvZmZzZXQpCiAKLSAgIFdyaXRlICpzdHJpbmcqIHRvIGEgZmlsZSBkZXNjcmlwdG9yLCAqZmQqLCBmcm9tICpvZmZzZXQqLCBsZWF2aW5nIHRoZSBmaWxlCi0gICBvZmZzZXQgdW5jaGFuZ2VkLgorICAgV3JpdGUgKmJ5dGVzdHJpbmcqIHRvIGEgZmlsZSBkZXNjcmlwdG9yLCAqZmQqLCBmcm9tICpvZmZzZXQqLAorICAgbGVhdmluZyB0aGUgZmlsZSBvZmZzZXQgdW5jaGFuZ2VkLgogCiAgICBBdmFpbGFiaWxpdHk6IFVuaXguCiAKQEAgLTk3OSwxMCArMTA3MSwxMCBAQAogICAgICAgOm1ldGg6YH5maWxlLnJlYWRgIG9yIDptZXRoOmB+ZmlsZS5yZWFkbGluZWAgbWV0aG9kcy4KIAogCi0uLiBmdW5jdGlvbjo6IHNlbmRmaWxlKG91dCwgaW4sIG9mZnNldCwgbmJ5dGVzKQotICAgICAgICAgICAgICBzZW5kZmlsZShvdXQsIGluLCBvZmZzZXQsIG5ieXRlcywgaGVhZGVycz1Ob25lLCB0cmFpbGVycz1Ob25lLCBmbGFncz0wKQorLi4gZnVuY3Rpb246OiBzZW5kZmlsZShvdXQsIGluLCBvZmZzZXQsIGNvdW50KQorICAgICAgICAgICAgICBzZW5kZmlsZShvdXQsIGluLCBvZmZzZXQsIGNvdW50LCBbaGVhZGVyc10sIFt0cmFpbGVyc10sIGZsYWdzPTApCiAKLSAgIENvcHkgKm5ieXRlcyogYnl0ZXMgZnJvbSBmaWxlIGRlc2NyaXB0b3IgKmluKiB0byBmaWxlIGRlc2NyaXB0b3IgKm91dCoKKyAgIENvcHkgKmNvdW50KiBieXRlcyBmcm9tIGZpbGUgZGVzY3JpcHRvciAqaW4qIHRvIGZpbGUgZGVzY3JpcHRvciAqb3V0KgogICAgc3RhcnRpbmcgYXQgKm9mZnNldCouCiAgICBSZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyBzZW50LiBXaGVuIEVPRiBpcyByZWFjaGVkIHJldHVybiAwLgogCkBAIC05OTYsMTIgKzEwODgsMTUgQEAKICAgICp0cmFpbGVycyogYXJlIGFyYml0cmFyeSBzZXF1ZW5jZXMgb2YgYnVmZmVycyB0aGF0IGFyZSB3cml0dGVuIGJlZm9yZSBhbmQKICAgIGFmdGVyIHRoZSBkYXRhIGZyb20gKmluKiBpcyB3cml0dGVuLiBJdCByZXR1cm5zIHRoZSBzYW1lIGFzIHRoZSBmaXJzdCBjYXNlLgogCi0gICBPbiBNYWMgT1MgWCBhbmQgRnJlZUJTRCwgYSB2YWx1ZSBvZiAwIGZvciAqbmJ5dGVzKiBzcGVjaWZpZXMgdG8gc2VuZCB1bnRpbAorICAgT24gTWFjIE9TIFggYW5kIEZyZWVCU0QsIGEgdmFsdWUgb2YgMCBmb3IgKmNvdW50KiBzcGVjaWZpZXMgdG8gc2VuZCB1bnRpbAogICAgdGhlIGVuZCBvZiAqaW4qIGlzIHJlYWNoZWQuCiAKICAgIEFsbCBwbGF0Zm9ybXMgc3VwcG9ydCBzb2NrZXRzIGFzICpvdXQqIGZpbGUgZGVzY3JpcHRvciwgYW5kIHNvbWUgcGxhdGZvcm1zCiAgICBhbGxvdyBvdGhlciB0eXBlcyAoZS5nLiByZWd1bGFyIGZpbGUsIHBpcGUpIGFzIHdlbGwuCiAKKyAgIENyb3NzLXBsYXRmb3JtIGFwcGxpY2F0aW9ucyBzaG91bGQgbm90IHVzZSAqaGVhZGVycyosICp0cmFpbGVycyogYW5kICpmbGFncyoKKyAgIGFyZ3VtZW50cy4KKwogICAgQXZhaWxhYmlsaXR5OiBVbml4LgogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKQEAgLTEwMjcsNyArMTEyMiw3IEBACiAgICBzZXF1ZW5jZSB0byBob2xkIHRoZSByZXN0IG9mIHRoZSBkYXRhLiA6ZnVuYzpgfm9zLnJlYWR2YCByZXR1cm5zIHRoZSB0b3RhbAogICAgbnVtYmVyIG9mIGJ5dGVzIHJlYWQgKHdoaWNoIG1heSBiZSBsZXNzIHRoYW4gdGhlIHRvdGFsIGNhcGFjaXR5IG9mIGFsbCB0aGUKICAgIG9iamVjdHMpLgotICAgICAgICAgIAorCiAgICBBdmFpbGFiaWxpdHk6IFVuaXguCiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMwpAQCAtMTA4MCw4NCArMTE3NSwxMiBAQAogICAgc2VxdWVuY2Ugb2YgOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0cyA8Ynl0ZXMtbGlrZSBvYmplY3Q+YC4KICAgIDpmdW5jOmB+b3Mud3JpdGV2YCB3cml0ZXMgdGhlIGNvbnRlbnRzIG9mIGVhY2ggb2JqZWN0IHRvIHRoZSBmaWxlIGRlc2NyaXB0b3IKICAgIGFuZCByZXR1cm5zIHRoZSB0b3RhbCBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbi4KLSAgIAorCiAgICBBdmFpbGFiaWxpdHk6IFVuaXguCiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMwogCiAKLS4uIF9vcGVuLWNvbnN0YW50czoKLQotYGBvcGVuKClgYCBmbGFnIGNvbnN0YW50cwotfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgotCi1UaGUgZm9sbG93aW5nIGNvbnN0YW50cyBhcmUgb3B0aW9ucyBmb3IgdGhlICpmbGFncyogcGFyYW1ldGVyIHRvIHRoZQotOmZ1bmM6YH5vcy5vcGVuYCBmdW5jdGlvbi4gIFRoZXkgY2FuIGJlIGNvbWJpbmVkIHVzaW5nIHRoZSBiaXR3aXNlIE9SIG9wZXJhdG9yCi1gYHxgYC4gIFNvbWUgb2YgdGhlbSBhcmUgbm90IGF2YWlsYWJsZSBvbiBhbGwgcGxhdGZvcm1zLiAgRm9yIGRlc2NyaXB0aW9ucyBvZgotdGhlaXIgYXZhaWxhYmlsaXR5IGFuZCB1c2UsIGNvbnN1bHQgdGhlIDptYW5wYWdlOmBvcGVuKDIpYCBtYW51YWwgcGFnZSBvbiBVbml4Ci1vciBgdGhlIE1TRE4gPGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS96MGtjOGUzei5hc3B4PmBfIG9uIFdpbmRvd3MuCi0KLQotLi4gZGF0YTo6IE9fUkRPTkxZCi0gICAgICAgICAgT19XUk9OTFkKLSAgICAgICAgICBPX1JEV1IKLSAgICAgICAgICBPX0FQUEVORAotICAgICAgICAgIE9fQ1JFQVQKLSAgICAgICAgICBPX0VYQ0wKLSAgICAgICAgICBPX1RSVU5DCi0KLSAgIFRoZXNlIGNvbnN0YW50cyBhcmUgYXZhaWxhYmxlIG9uIFVuaXggYW5kIFdpbmRvd3MuCi0KLQotLi4gZGF0YTo6IE9fRFNZTkMKLSAgICAgICAgICBPX1JTWU5DCi0gICAgICAgICAgT19TWU5DCi0gICAgICAgICAgT19OREVMQVkKLSAgICAgICAgICBPX05PTkJMT0NLCi0gICAgICAgICAgT19OT0NUVFkKLSAgICAgICAgICBPX1NITE9DSwotICAgICAgICAgIE9fRVhMT0NLCi0gICAgICAgICAgT19DTE9FWEVDCi0KLSAgIFRoZXNlIGNvbnN0YW50cyBhcmUgb25seSBhdmFpbGFibGUgb24gVW5peC4KLQotICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKLSAgICAgIEFkZCA6ZGF0YTpgT19DTE9FWEVDYCBjb25zdGFudC4KLQotLi4gZGF0YTo6IE9fQklOQVJZCi0gICAgICAgICAgT19OT0lOSEVSSVQKLSAgICAgICAgICBPX1NIT1JUX0xJVkVECi0gICAgICAgICAgT19URU1QT1JBUlkKLSAgICAgICAgICBPX1JBTkRPTQotICAgICAgICAgIE9fU0VRVUVOVElBTAotICAgICAgICAgIE9fVEVYVAotCi0gICBUaGVzZSBjb25zdGFudHMgYXJlIG9ubHkgYXZhaWxhYmxlIG9uIFdpbmRvd3MuCi0KLQotLi4gZGF0YTo6IE9fQVNZTkMKLSAgICAgICAgICBPX0RJUkVDVAotICAgICAgICAgIE9fRElSRUNUT1JZCi0gICAgICAgICAgT19OT0ZPTExPVwotICAgICAgICAgIE9fTk9BVElNRQotCi0gICBUaGVzZSBjb25zdGFudHMgYXJlIEdOVSBleHRlbnNpb25zIGFuZCBub3QgcHJlc2VudCBpZiB0aGV5IGFyZSBub3QgZGVmaW5lZCBieQotICAgdGhlIEMgbGlicmFyeS4KLQotCi0uLiBkYXRhOjogUlRMRF9MQVpZCi0gICAgICAgICAgUlRMRF9OT1cKLSAgICAgICAgICBSVExEX0dMT0JBTAotICAgICAgICAgIFJUTERfTE9DQUwKLSAgICAgICAgICBSVExEX05PREVMRVRFCi0gICAgICAgICAgUlRMRF9OT0xPQUQKLSAgICAgICAgICBSVExEX0RFRVBCSU5ECi0KLSAgIFNlZSB0aGUgVW5peCBtYW51YWwgcGFnZSA6bWFucGFnZTpgZGxvcGVuKDMpYC4KLQotICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCi0KLQogLi4gX3Rlcm1pbmFsLXNpemU6CiAKIFF1ZXJ5aW5nIHRoZSBzaXplIG9mIGEgdGVybWluYWwKQEAgLTExOTUsNiArMTIxOCw0OSBAQAogICAgICAgSGVpZ2h0IG9mIHRoZSB0ZXJtaW5hbCB3aW5kb3cgaW4gY2hhcmFjdGVycy4KIAogCisuLiBfZmRfaW5oZXJpdGFuY2U6CisKK0luaGVyaXRhbmNlIG9mIEZpbGUgRGVzY3JpcHRvcnMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworLi4gdmVyc2lvbmFkZGVkOjogMy40CisKK0EgZmlsZSBkZXNjcmlwdG9yIGhhcyBhbiAiaW5oZXJpdGFibGUiIGZsYWcgd2hpY2ggaW5kaWNhdGVzIGlmIHRoZSBmaWxlIGRlc2NyaXB0b3IKK2NhbiBiZSBpbmhlcml0ZWQgYnkgY2hpbGQgcHJvY2Vzc2VzLiAgU2luY2UgUHl0aG9uIDMuNCwgZmlsZSBkZXNjcmlwdG9ycworY3JlYXRlZCBieSBQeXRob24gYXJlIG5vbi1pbmhlcml0YWJsZSBieSBkZWZhdWx0LgorCitPbiBVTklYLCBub24taW5oZXJpdGFibGUgZmlsZSBkZXNjcmlwdG9ycyBhcmUgY2xvc2VkIGluIGNoaWxkIHByb2Nlc3NlcyBhdCB0aGUKK2V4ZWN1dGlvbiBvZiBhIG5ldyBwcm9ncmFtLCBvdGhlciBmaWxlIGRlc2NyaXB0b3JzIGFyZSBpbmhlcml0ZWQuCisKK09uIFdpbmRvd3MsIG5vbi1pbmhlcml0YWJsZSBoYW5kbGVzIGFuZCBmaWxlIGRlc2NyaXB0b3JzIGFyZSBjbG9zZWQgaW4gY2hpbGQKK3Byb2Nlc3NlcywgZXhjZXB0IGZvciBzdGFuZGFyZCBzdHJlYW1zIChmaWxlIGRlc2NyaXB0b3JzIDAsIDEgYW5kIDI6IHN0ZGluLCBzdGRvdXQKK2FuZCBzdGRlcnIpLCB3aGljaCBhcmUgYWx3YXlzIGluaGVyaXRlZC4gIFVzaW5nIDpmdW5jOmBzcGF3blwqIDxzcGF3bmw+YCBmdW5jdGlvbnMsCithbGwgaW5oZXJpdGFibGUgaGFuZGxlcyBhbmQgYWxsIGluaGVyaXRhYmxlIGZpbGUgZGVzY3JpcHRvcnMgYXJlIGluaGVyaXRlZC4KK1VzaW5nIHRoZSA6bW9kOmBzdWJwcm9jZXNzYCBtb2R1bGUsIGFsbCBmaWxlIGRlc2NyaXB0b3JzIGV4Y2VwdCBzdGFuZGFyZAorc3RyZWFtcyBhcmUgY2xvc2VkLCBhbmQgaW5oZXJpdGFibGUgaGFuZGxlcyBhcmUgb25seSBpbmhlcml0ZWQgaWYgdGhlCisqY2xvc2VfZmRzKiBwYXJhbWV0ZXIgaXMgYGBGYWxzZWBgLgorCisuLiBmdW5jdGlvbjo6IGdldF9pbmhlcml0YWJsZShmZCkKKworICAgR2V0IHRoZSAiaW5oZXJpdGFibGUiIGZsYWcgb2YgdGhlIHNwZWNpZmllZCBmaWxlIGRlc2NyaXB0b3IgKGEgYm9vbGVhbikuCisKKy4uIGZ1bmN0aW9uOjogc2V0X2luaGVyaXRhYmxlKGZkLCBpbmhlcml0YWJsZSkKKworICAgU2V0IHRoZSAiaW5oZXJpdGFibGUiIGZsYWcgb2YgdGhlIHNwZWNpZmllZCBmaWxlIGRlc2NyaXB0b3IuCisKKy4uIGZ1bmN0aW9uOjogZ2V0X2hhbmRsZV9pbmhlcml0YWJsZShoYW5kbGUpCisKKyAgIEdldCB0aGUgImluaGVyaXRhYmxlIiBmbGFnIG9mIHRoZSBzcGVjaWZpZWQgaGFuZGxlIChhIGJvb2xlYW4pLgorCisgICBBdmFpbGFiaWxpdHk6IFdpbmRvd3MuCisKKy4uIGZ1bmN0aW9uOjogc2V0X2hhbmRsZV9pbmhlcml0YWJsZShoYW5kbGUsIGluaGVyaXRhYmxlKQorCisgICBTZXQgdGhlICJpbmhlcml0YWJsZSIgZmxhZyBvZiB0aGUgc3BlY2lmaWVkIGhhbmRsZS4KKworICAgQXZhaWxhYmlsaXR5OiBXaW5kb3dzLgorCisKIC4uIF9vcy1maWxlLWRpcjoKIAogRmlsZXMgYW5kIERpcmVjdG9yaWVzCkBAIC0xNTEzLDE3ICsxNTc5LDI1IEBACiAgICAgICBBZGRlZCBzdXBwb3J0IGZvciBzcGVjaWZ5aW5nIGFuIG9wZW4gZmlsZSBkZXNjcmlwdG9yIGZvciAqcGF0aCouCiAKIAotLi4gZnVuY3Rpb246OiBsc3RhdChwYXRoLCAqLCBkaXJfZmQ9Tm9uZSkKKy4uIGZ1bmN0aW9uOjogbHN0YXQocGF0aCwgXCosIGRpcl9mZD1Ob25lKQogCiAgICBQZXJmb3JtIHRoZSBlcXVpdmFsZW50IG9mIGFuIDpjOmZ1bmM6YGxzdGF0YCBzeXN0ZW0gY2FsbCBvbiB0aGUgZ2l2ZW4gcGF0aC4KLSAgIFNpbWlsYXIgdG8gOmZ1bmM6YH5vcy5zdGF0YCwgYnV0IGRvZXMgbm90IGZvbGxvdyBzeW1ib2xpYyBsaW5rcy4gIE9uCi0gICBwbGF0Zm9ybXMgdGhhdCBkbyBub3Qgc3VwcG9ydCBzeW1ib2xpYyBsaW5rcywgdGhpcyBpcyBhbiBhbGlhcyBmb3IKLSAgIDpmdW5jOmB+b3Muc3RhdGAuICBBcyBvZiBQeXRob24gMy4zLCB0aGlzIGlzIGVxdWl2YWxlbnQgdG8gYGBvcy5zdGF0KHBhdGgsCi0gICBkaXJfZmQ9ZGlyX2ZkLCBmb2xsb3dfc3ltbGlua3M9RmFsc2UpYGAuCisgICBTaW1pbGFyIHRvIDpmdW5jOmB+b3Muc3RhdGAsIGJ1dCBkb2VzIG5vdCBmb2xsb3cgc3ltYm9saWMgbGlua3MuIFJldHVybiBhCisgICA6Y2xhc3M6YHN0YXRfcmVzdWx0YCBvYmplY3QuCisKKyAgIE9uIHBsYXRmb3JtcyB0aGF0IGRvIG5vdCBzdXBwb3J0IHN5bWJvbGljIGxpbmtzLCB0aGlzIGlzIGFuIGFsaWFzIGZvcgorICAgOmZ1bmM6YH5vcy5zdGF0YC4KKworICAgQXMgb2YgUHl0aG9uIDMuMywgdGhpcyBpcyBlcXVpdmFsZW50IHRvIGBgb3Muc3RhdChwYXRoLCBkaXJfZmQ9ZGlyX2ZkLAorICAgZm9sbG93X3N5bWxpbmtzPUZhbHNlKWBgLgogCiAgICBUaGlzIGZ1bmN0aW9uIGNhbiBhbHNvIHN1cHBvcnQgOnJlZjpgcGF0aHMgcmVsYXRpdmUgdG8gZGlyZWN0b3J5IGRlc2NyaXB0b3JzCiAgICA8ZGlyX2ZkPmAuCiAKKyAgIC4uIHNlZWFsc286OgorCisgICAgICBUaGUgOmZ1bmM6YC5zdGF0YCBmdW5jdGlvbi4KKwogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKICAgICAgIEFkZGVkIHN1cHBvcnQgZm9yIFdpbmRvd3MgNi4wIChWaXN0YSkgc3ltYm9saWMgbGlua3MuCiAKQEAgLTE1NTEsNyArMTYyNSw3IEBACiAgICAgICBUaGUgKmRpcl9mZCogYXJndW1lbnQuCiAKIAotLi4gZnVuY3Rpb246OiBtYWtlZGlycyhwYXRoLCBtb2RlPTBvNzc3LCBleGlzdF9vaz1GYWxzZSkKKy4uIGZ1bmN0aW9uOjogbWFrZWRpcnMobmFtZSwgbW9kZT0wbzc3NywgZXhpc3Rfb2s9RmFsc2UpCiAKICAgIC4uIGluZGV4OjoKICAgICAgIHNpbmdsZTogZGlyZWN0b3J5OyBjcmVhdGluZwpAQCAtMTU3NiwxMiArMTY1MCwxMiBAQAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCiAgICAgICBUaGUgKmV4aXN0X29rKiBwYXJhbWV0ZXIuCiAKLSAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zLjYKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40LjEKIAotICAgICAgQmVmb3JlIFB5dGhvbiAzLjMuNiwgaWYgKmV4aXN0X29rKiB3YXMgYGBUcnVlYGAgYW5kIHRoZSBkaXJlY3RvcnkgZXhpc3RlZCwKKyAgICAgIEJlZm9yZSBQeXRob24gMy40LjEsIGlmICpleGlzdF9vayogd2FzIGBgVHJ1ZWBgIGFuZCB0aGUgZGlyZWN0b3J5IGV4aXN0ZWQsCiAgICAgICA6ZnVuYzpgbWFrZWRpcnNgIHdvdWxkIHN0aWxsIHJhaXNlIGFuIGVycm9yIGlmICptb2RlKiBkaWQgbm90IG1hdGNoIHRoZQogICAgICAgbW9kZSBvZiB0aGUgZXhpc3RpbmcgZGlyZWN0b3J5LiBTaW5jZSB0aGlzIGJlaGF2aW9yIHdhcyBpbXBvc3NpYmxlIHRvCi0gICAgICBpbXBsZW1lbnQgc2FmZWx5LCBpdCB3YXMgcmVtb3ZlZCBpbiBQeXRob24gMy4zLjYuIFNlZSA6aXNzdWU6YDIxMDgyYC4KKyAgICAgIGltcGxlbWVudCBzYWZlbHksIGl0IHdhcyByZW1vdmVkIGluIFB5dGhvbiAzLjQuMS4gU2VlIDppc3N1ZTpgMjEwODJgLgogCiAKIC4uIGZ1bmN0aW9uOjogbWtmaWZvKHBhdGgsIG1vZGU9MG82NjYsICosIGRpcl9mZD1Ob25lKQpAQCAtMTYwNCwxMCArMTY3OCwxMCBAQAogICAgICAgVGhlICpkaXJfZmQqIGFyZ3VtZW50LgogCiAKLS4uIGZ1bmN0aW9uOjogbWtub2QoZmlsZW5hbWUsIG1vZGU9MG82MDAsIGRldmljZT0wLCAqLCBkaXJfZmQ9Tm9uZSkKKy4uIGZ1bmN0aW9uOjogbWtub2QocGF0aCwgbW9kZT0wbzYwMCwgZGV2aWNlPTAsICosIGRpcl9mZD1Ob25lKQogCiAgICBDcmVhdGUgYSBmaWxlc3lzdGVtIG5vZGUgKGZpbGUsIGRldmljZSBzcGVjaWFsIGZpbGUgb3IgbmFtZWQgcGlwZSkgbmFtZWQKLSAgICpmaWxlbmFtZSouICptb2RlKiBzcGVjaWZpZXMgYm90aCB0aGUgcGVybWlzc2lvbnMgdG8gdXNlIGFuZCB0aGUgdHlwZSBvZiBub2RlCisgICAqcGF0aCouICptb2RlKiBzcGVjaWZpZXMgYm90aCB0aGUgcGVybWlzc2lvbnMgdG8gdXNlIGFuZCB0aGUgdHlwZSBvZiBub2RlCiAgICB0byBiZSBjcmVhdGVkLCBiZWluZyBjb21iaW5lZCAoYml0d2lzZSBPUikgd2l0aCBvbmUgb2YgYGBzdGF0LlNfSUZSRUdgYCwKICAgIGBgc3RhdC5TX0lGQ0hSYGAsIGBgc3RhdC5TX0lGQkxLYGAsIGFuZCBgYHN0YXQuU19JRklGT2BgICh0aG9zZSBjb25zdGFudHMgYXJlCiAgICBhdmFpbGFibGUgaW4gOm1vZDpgc3RhdGApLiAgRm9yIGBgc3RhdC5TX0lGQ0hSYGAgYW5kIGBgc3RhdC5TX0lGQkxLYGAsCkBAIC0xNzExLDcgKzE3ODUsNyBAQAogICAgICAgVGhlICpkaXJfZmQqIGFyZ3VtZW50LgogCiAKLS4uIGZ1bmN0aW9uOjogcmVtb3ZlZGlycyhwYXRoKQorLi4gZnVuY3Rpb246OiByZW1vdmVkaXJzKG5hbWUpCiAKICAgIC4uIGluZGV4Ojogc2luZ2xlOiBkaXJlY3Rvcnk7IGRlbGV0aW5nCiAKQEAgLTE3OTAsNTUgKzE4NjQsMTE2IEBACiAgICAgICBUaGUgKmRpcl9mZCogcGFyYW1ldGVyLgogCiAKLS4uIGZ1bmN0aW9uOjogc3RhdChwYXRoLCAqLCBkaXJfZmQ9Tm9uZSwgZm9sbG93X3N5bWxpbmtzPVRydWUpCisuLiBmdW5jdGlvbjo6IHN0YXQocGF0aCwgXCosIGRpcl9mZD1Ob25lLCBmb2xsb3dfc3ltbGlua3M9VHJ1ZSkKIAotICAgUGVyZm9ybSB0aGUgZXF1aXZhbGVudCBvZiBhIDpjOmZ1bmM6YHN0YXRgIHN5c3RlbSBjYWxsIG9uIHRoZSBnaXZlbiBwYXRoLgotICAgKnBhdGgqIG1heSBiZSBzcGVjaWZpZWQgYXMgZWl0aGVyIGEgc3RyaW5nIG9yIGFzIGFuIG9wZW4gZmlsZSBkZXNjcmlwdG9yLgotICAgKFRoaXMgZnVuY3Rpb24gbm9ybWFsbHkgZm9sbG93cyBzeW1saW5rczsgdG8gc3RhdCBhIHN5bWxpbmsgYWRkIHRoZSBhcmd1bWVudAotICAgYGBmb2xsb3dfc3ltbGlua3M9RmFsc2VgYCwgb3IgdXNlIDpmdW5jOmBsc3RhdGAuKQorICAgR2V0IHRoZSBzdGF0dXMgb2YgYSBmaWxlIG9yIGEgZmlsZSBkZXNjcmlwdG9yLiBQZXJmb3JtIHRoZSBlcXVpdmFsZW50IG9mIGEKKyAgIDpjOmZ1bmM6YHN0YXRgIHN5c3RlbSBjYWxsIG9uIHRoZSBnaXZlbiBwYXRoLiAqcGF0aCogbWF5IGJlIHNwZWNpZmllZCBhcworICAgZWl0aGVyIGEgc3RyaW5nIG9yIGFzIGFuIG9wZW4gZmlsZSBkZXNjcmlwdG9yLiBSZXR1cm4gYSA6Y2xhc3M6YHN0YXRfcmVzdWx0YAorICAgb2JqZWN0LgogCi0gICBUaGUgcmV0dXJuIHZhbHVlIGlzIGFuIG9iamVjdCB3aG9zZSBhdHRyaWJ1dGVzIGNvcnJlc3BvbmQgcm91Z2hseQotICAgdG8gdGhlIG1lbWJlcnMgb2YgdGhlIDpjOnR5cGU6YHN0YXRgIHN0cnVjdHVyZSwgbmFtZWx5OgorICAgVGhpcyBmdW5jdGlvbiBub3JtYWxseSBmb2xsb3dzIHN5bWxpbmtzOyB0byBzdGF0IGEgc3ltbGluayBhZGQgdGhlIGFyZ3VtZW50CisgICBgYGZvbGxvd19zeW1saW5rcz1GYWxzZWBgLCBvciB1c2UgOmZ1bmM6YGxzdGF0YC4KIAotICAgKiA6YXR0cjpgc3RfbW9kZWAgLSBwcm90ZWN0aW9uIGJpdHMsCi0gICAqIDphdHRyOmBzdF9pbm9gIC0gaW5vZGUgbnVtYmVyLAotICAgKiA6YXR0cjpgc3RfZGV2YCAtIGRldmljZSwKLSAgICogOmF0dHI6YHN0X25saW5rYCAtIG51bWJlciBvZiBoYXJkIGxpbmtzLAotICAgKiA6YXR0cjpgc3RfdWlkYCAtIHVzZXIgaWQgb2Ygb3duZXIsCi0gICAqIDphdHRyOmBzdF9naWRgIC0gZ3JvdXAgaWQgb2Ygb3duZXIsCi0gICAqIDphdHRyOmBzdF9zaXplYCAtIHNpemUgb2YgZmlsZSwgaW4gYnl0ZXMsCi0gICAqIDphdHRyOmBzdF9hdGltZWAgLSB0aW1lIG9mIG1vc3QgcmVjZW50IGFjY2VzcyBleHByZXNzZWQgaW4gc2Vjb25kcywKLSAgICogOmF0dHI6YHN0X210aW1lYCAtIHRpbWUgb2YgbW9zdCByZWNlbnQgY29udGVudCBtb2RpZmljYXRpb24KLSAgICAgZXhwcmVzc2VkIGluIHNlY29uZHMsCi0gICAqIDphdHRyOmBzdF9jdGltZWAgLSBwbGF0Zm9ybSBkZXBlbmRlbnQ7IHRpbWUgb2YgbW9zdCByZWNlbnQgbWV0YWRhdGEKLSAgICAgY2hhbmdlIG9uIFVuaXgsIG9yIHRoZSB0aW1lIG9mIGNyZWF0aW9uIG9uIFdpbmRvd3MsIGV4cHJlc3NlZCBpbiBzZWNvbmRzCi0gICAqIDphdHRyOmBzdF9hdGltZV9uc2AgLSB0aW1lIG9mIG1vc3QgcmVjZW50IGFjY2VzcwotICAgICBleHByZXNzZWQgaW4gbmFub3NlY29uZHMgYXMgYW4gaW50ZWdlciwKLSAgICogOmF0dHI6YHN0X210aW1lX25zYCAtIHRpbWUgb2YgbW9zdCByZWNlbnQgY29udGVudCBtb2RpZmljYXRpb24KLSAgICAgZXhwcmVzc2VkIGluIG5hbm9zZWNvbmRzIGFzIGFuIGludGVnZXIsCi0gICAqIDphdHRyOmBzdF9jdGltZV9uc2AgLSBwbGF0Zm9ybSBkZXBlbmRlbnQ7IHRpbWUgb2YgbW9zdCByZWNlbnQgbWV0YWRhdGEKLSAgICAgY2hhbmdlIG9uIFVuaXgsIG9yIHRoZSB0aW1lIG9mIGNyZWF0aW9uIG9uIFdpbmRvd3MsCi0gICAgIGV4cHJlc3NlZCBpbiBuYW5vc2Vjb25kcyBhcyBhbiBpbnRlZ2VyCisgICBUaGlzIGZ1bmN0aW9uIGNhbiBzdXBwb3J0IDpyZWY6YHNwZWNpZnlpbmcgYSBmaWxlIGRlc2NyaXB0b3IgPHBhdGhfZmQ+YCBhbmQKKyAgIDpyZWY6YG5vdCBmb2xsb3dpbmcgc3ltbGlua3MgPGZvbGxvd19zeW1saW5rcz5gLgogCi0gICBPbiBzb21lIFVuaXggc3lzdGVtcyAoc3VjaCBhcyBMaW51eCksIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlcyBtYXkgYWxzbyBiZQotICAgYXZhaWxhYmxlOgorICAgLi4gaW5kZXg6OiBtb2R1bGU6IHN0YXQKIAotICAgKiA6YXR0cjpgc3RfYmxvY2tzYCAtIG51bWJlciBvZiA1MTItYnl0ZSBibG9ja3MgYWxsb2NhdGVkIGZvciBmaWxlCi0gICAqIDphdHRyOmBzdF9ibGtzaXplYCAtIGZpbGVzeXN0ZW0gYmxvY2tzaXplIGZvciBlZmZpY2llbnQgZmlsZSBzeXN0ZW0gSS9PCi0gICAqIDphdHRyOmBzdF9yZGV2YCAtIHR5cGUgb2YgZGV2aWNlIGlmIGFuIGlub2RlIGRldmljZQotICAgKiA6YXR0cjpgc3RfZmxhZ3NgIC0gdXNlciBkZWZpbmVkIGZsYWdzIGZvciBmaWxlCisgICBFeGFtcGxlOjoKIAotICAgT24gb3RoZXIgVW5peCBzeXN0ZW1zIChzdWNoIGFzIEZyZWVCU0QpLCB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXMgbWF5IGJlCi0gICBhdmFpbGFibGUgKGJ1dCBtYXkgYmUgb25seSBmaWxsZWQgb3V0IGlmIHJvb3QgdHJpZXMgdG8gdXNlIHRoZW0pOgorICAgICAgPj4+IGltcG9ydCBvcworICAgICAgPj4+IHN0YXRpbmZvID0gb3Muc3RhdCgnc29tZWZpbGUudHh0JykKKyAgICAgID4+PiBzdGF0aW5mbworICAgICAgb3Muc3RhdF9yZXN1bHQoc3RfbW9kZT0zMzE4OCwgc3RfaW5vPTc4NzY5MzIsIHN0X2Rldj0yMzQ4ODEwMjYsCisgICAgICBzdF9ubGluaz0xLCBzdF91aWQ9NTAxLCBzdF9naWQ9NTAxLCBzdF9zaXplPTI2NCwgc3RfYXRpbWU9MTI5NzIzMDI5NSwKKyAgICAgIHN0X210aW1lPTEyOTcyMzAwMjcsIHN0X2N0aW1lPTEyOTcyMzAwMjcpCisgICAgICA+Pj4gc3RhdGluZm8uc3Rfc2l6ZQorICAgICAgMjY0CiAKLSAgICogOmF0dHI6YHN0X2dlbmAgLSBmaWxlIGdlbmVyYXRpb24gbnVtYmVyCi0gICAqIDphdHRyOmBzdF9iaXJ0aHRpbWVgIC0gdGltZSBvZiBmaWxlIGNyZWF0aW9uCisgICBBdmFpbGFiaWxpdHk6IFVuaXgsIFdpbmRvd3MuCiAKLSAgIE9uIE1hYyBPUyBzeXN0ZW1zLCB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXMgbWF5IGFsc28gYmUgYXZhaWxhYmxlOgorICAgLi4gc2VlYWxzbzo6CiAKLSAgICogOmF0dHI6YHN0X3JzaXplYAotICAgKiA6YXR0cjpgc3RfY3JlYXRvcmAKLSAgICogOmF0dHI6YHN0X3R5cGVgCisgICAgICA6ZnVuYzpgZnN0YXRgIGFuZCA6ZnVuYzpgbHN0YXRgIGZ1bmN0aW9ucy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCisgICAgICBBZGRlZCB0aGUgKmRpcl9mZCogYW5kICpmb2xsb3dfc3ltbGlua3MqIGFyZ3VtZW50cywgc3BlY2lmeWluZyBhIGZpbGUKKyAgICAgIGRlc2NyaXB0b3IgaW5zdGVhZCBvZiBhIHBhdGguCisKKworLi4gY2xhc3M6OiBzdGF0X3Jlc3VsdAorCisgICBPYmplY3Qgd2hvc2UgYXR0cmlidXRlcyBjb3JyZXNwb25kIHJvdWdobHkgdG8gdGhlIG1lbWJlcnMgb2YgdGhlCisgICA6Yzp0eXBlOmBzdGF0YCBzdHJ1Y3R1cmUuIEl0IGlzIHVzZWQgZm9yIHRoZSByZXN1bHQgb2YgOmZ1bmM6YG9zLnN0YXRgLAorICAgOmZ1bmM6YG9zLmZzdGF0YCBhbmQgOmZ1bmM6YG9zLmxzdGF0YC4KKworICAgQXR0cmlidXRlczoKKworICAgLi4gYXR0cmlidXRlOjogc3RfbW9kZQorCisgICAgICBGaWxlIG1vZGU6IGZpbGUgdHlwZSBhbmQgZmlsZSBtb2RlIGJpdHMgKHBlcm1pc3Npb25zKS4KKworICAgLi4gYXR0cmlidXRlOjogc3RfaW5vCisKKyAgICAgIElub2RlIG51bWJlci4KKworICAgLi4gYXR0cmlidXRlOjogc3RfZGV2CisKKyAgICAgIElkZW50aWZpZXIgb2YgdGhlIGRldmljZSBvbiB3aGljaCB0aGlzIGZpbGUgcmVzaWRlcy4KKworICAgLi4gYXR0cmlidXRlOjogc3RfbmxpbmsKKworICAgICAgTnVtYmVyIG9mIGhhcmQgbGlua3MuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IHN0X3VpZAorCisgICAgICBVc2VyIGlkZW50aWZpZXIgb2YgdGhlIGZpbGUgb3duZXIuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IHN0X2dpZAorCisgICAgICBHcm91cCBpZGVudGlmaWVyIG9mIHRoZSBmaWxlIG93bmVyLgorCisgICAuLiBhdHRyaWJ1dGU6OiBzdF9zaXplCisKKyAgICAgIFNpemUgb2YgdGhlIGZpbGUgaW4gYnl0ZXMsIGlmIGl0IGlzIGEgcmVndWxhciBmaWxlIG9yIGEgc3ltYm9saWMgbGluay4KKyAgICAgIFRoZSBzaXplIG9mIGEgc3ltYm9saWMgbGluayBpcyB0aGUgbGVuZ3RoIG9mIHRoZSBwYXRobmFtZSBpdCBjb250YWlucywKKyAgICAgIHdpdGhvdXQgYSB0ZXJtaW5hdGluZyBudWxsIGJ5dGUuCisKKyAgIFRpbWVzdGFtcHM6CisKKyAgIC4uIGF0dHJpYnV0ZTo6IHN0X2F0aW1lCisKKyAgICAgIFRpbWUgb2YgbW9zdCByZWNlbnQgYWNjZXNzIGV4cHJlc3NlZCBpbiBzZWNvbmRzLgorCisgICAuLiBhdHRyaWJ1dGU6OiBzdF9tdGltZQorCisgICAgICBUaW1lIG9mIG1vc3QgcmVjZW50IGNvbnRlbnQgbW9kaWZpY2F0aW9uIGV4cHJlc3NlZCBpbiBzZWNvbmRzLgorCisgICAuLiBhdHRyaWJ1dGU6OiBzdF9jdGltZQorCisgICAgICBQbGF0Zm9ybSBkZXBlbmRlbnQ6CisKKyAgICAgICogdGhlIHRpbWUgb2YgbW9zdCByZWNlbnQgbWV0YWRhdGEgY2hhbmdlIG9uIFVuaXgsCisgICAgICAqIHRoZSB0aW1lIG9mIGNyZWF0aW9uIG9uIFdpbmRvd3MsIGV4cHJlc3NlZCBpbiBzZWNvbmRzLgorCisgICAuLiBhdHRyaWJ1dGU6OiBzdF9hdGltZV9ucworCisgICAgICBUaW1lIG9mIG1vc3QgcmVjZW50IGFjY2VzcyBleHByZXNzZWQgaW4gbmFub3NlY29uZHMgYXMgYW4gaW50ZWdlci4KKworICAgLi4gYXR0cmlidXRlOjogc3RfbXRpbWVfbnMKKworICAgICAgVGltZSBvZiBtb3N0IHJlY2VudCBjb250ZW50IG1vZGlmaWNhdGlvbiBleHByZXNzZWQgaW4gbmFub3NlY29uZHMgYXMgYW4KKyAgICAgIGludGVnZXIuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IHN0X2N0aW1lX25zCisKKyAgICAgIFBsYXRmb3JtIGRlcGVuZGVudDoKKworICAgICAgKiB0aGUgdGltZSBvZiBtb3N0IHJlY2VudCBtZXRhZGF0YSBjaGFuZ2Ugb24gVW5peCwKKyAgICAgICogdGhlIHRpbWUgb2YgY3JlYXRpb24gb24gV2luZG93cywgZXhwcmVzc2VkIGluIG5hbm9zZWNvbmRzIGFzIGFuCisgICAgICAgIGludGVnZXIuCisKKyAgIFNlZSBhbHNvIHRoZSA6ZnVuYzpgc3RhdF9mbG9hdF90aW1lc2AgZnVuY3Rpb24uCiAKICAgIC4uIG5vdGU6OgogCkBAIC0xODQ4LDYgKzE5ODMsNyBAQAogICAgICAgb3IgRkFUMzIgZmlsZSBzeXN0ZW1zLCA6YXR0cjpgc3RfbXRpbWVgIGhhcyAyLXNlY29uZCByZXNvbHV0aW9uLCBhbmQKICAgICAgIDphdHRyOmBzdF9hdGltZWAgaGFzIG9ubHkgMS1kYXkgcmVzb2x1dGlvbi4gIFNlZSB5b3VyIG9wZXJhdGluZyBzeXN0ZW0KICAgICAgIGRvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuCisKICAgICAgIFNpbWlsYXJseSwgYWx0aG91Z2ggOmF0dHI6YHN0X2F0aW1lX25zYCwgOmF0dHI6YHN0X210aW1lX25zYCwKICAgICAgIGFuZCA6YXR0cjpgc3RfY3RpbWVfbnNgIGFyZSBhbHdheXMgZXhwcmVzc2VkIGluIG5hbm9zZWNvbmRzLCBtYW55CiAgICAgICBzeXN0ZW1zIGRvIG5vdCBwcm92aWRlIG5hbm9zZWNvbmQgcHJlY2lzaW9uLiAgT24gc3lzdGVtcyB0aGF0IGRvCkBAIC0xODU3LDQxICsxOTkzLDY4IEBACiAgICAgICBJZiB5b3UgbmVlZCB0aGUgZXhhY3QgdGltZXN0YW1wcyB5b3Ugc2hvdWxkIGFsd2F5cyB1c2UKICAgICAgIDphdHRyOmBzdF9hdGltZV9uc2AsIDphdHRyOmBzdF9tdGltZV9uc2AsIGFuZCA6YXR0cjpgc3RfY3RpbWVfbnNgLgogCi0gICBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgdGhlIHJldHVybiB2YWx1ZSBvZiA6ZnVuYzpgfm9zLnN0YXRgIGlzIGFsc28KKyAgIE9uIHNvbWUgVW5peCBzeXN0ZW1zIChzdWNoIGFzIExpbnV4KSwgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzIG1heSBhbHNvIGJlCisgICBhdmFpbGFibGU6CisKKyAgIC4uIGF0dHJpYnV0ZTo6IHN0X2Jsb2NrcworCisgICAgICBOdW1iZXIgb2YgNTEyLWJ5dGUgYmxvY2tzIGFsbG9jYXRlZCBmb3IgZmlsZS4KKyAgICAgIFRoaXMgbWF5IGJlIHNtYWxsZXIgdGhhbiA6YXR0cjpgc3Rfc2l6ZWAvNTEyIHdoZW4gdGhlIGZpbGUgaGFzIGhvbGVzLgorCisgICAuLiBhdHRyaWJ1dGU6OiBzdF9ibGtzaXplCisKKyAgICAgICJQcmVmZXJyZWQiIGJsb2Nrc2l6ZSBmb3IgZWZmaWNpZW50IGZpbGUgc3lzdGVtIEkvTy4gV3JpdGluZyB0byBhIGZpbGUgaW4KKyAgICAgIHNtYWxsZXIgY2h1bmtzIG1heSBjYXVzZSBhbiBpbmVmZmljaWVudCByZWFkLW1vZGlmeS1yZXdyaXRlLgorCisgICAuLiBhdHRyaWJ1dGU6OiBzdF9yZGV2CisKKyAgICAgIFR5cGUgb2YgZGV2aWNlIGlmIGFuIGlub2RlIGRldmljZS4KKworICAgLi4gYXR0cmlidXRlOjogc3RfZmxhZ3MKKworICAgICAgVXNlciBkZWZpbmVkIGZsYWdzIGZvciBmaWxlLgorCisgICBPbiBvdGhlciBVbml4IHN5c3RlbXMgKHN1Y2ggYXMgRnJlZUJTRCksIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlcyBtYXkgYmUKKyAgIGF2YWlsYWJsZSAoYnV0IG1heSBiZSBvbmx5IGZpbGxlZCBvdXQgaWYgcm9vdCB0cmllcyB0byB1c2UgdGhlbSk6CisKKyAgIC4uIGF0dHJpYnV0ZTo6IHN0X2dlbgorCisgICAgICBGaWxlIGdlbmVyYXRpb24gbnVtYmVyLgorCisgICAuLiBhdHRyaWJ1dGU6OiBzdF9iaXJ0aHRpbWUKKworICAgICAgVGltZSBvZiBmaWxlIGNyZWF0aW9uLgorCisgICBPbiBNYWMgT1Mgc3lzdGVtcywgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzIG1heSBhbHNvIGJlIGF2YWlsYWJsZToKKworICAgLi4gYXR0cmlidXRlOjogc3RfcnNpemUKKworICAgICAgUmVhbCBzaXplIG9mIHRoZSBmaWxlLgorCisgICAuLiBhdHRyaWJ1dGU6OiBzdF9jcmVhdG9yCisKKyAgICAgIENyZWF0b3Igb2YgdGhlIGZpbGUuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IHN0X3R5cGUKKworICAgICAgRmlsZSB0eXBlLgorCisgICBUaGUgc3RhbmRhcmQgbW9kdWxlIDptb2Q6YHN0YXRgIGRlZmluZXMgZnVuY3Rpb25zIGFuZCBjb25zdGFudHMgdGhhdCBhcmUKKyAgIHVzZWZ1bCBmb3IgZXh0cmFjdGluZyBpbmZvcm1hdGlvbiBmcm9tIGEgOmM6dHlwZTpgc3RhdGAgc3RydWN0dXJlLiAoT24KKyAgIFdpbmRvd3MsIHNvbWUgaXRlbXMgYXJlIGZpbGxlZCB3aXRoIGR1bW15IHZhbHVlcy4pCisKKyAgIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCBhIDpjbGFzczpgc3RhdF9yZXN1bHRgIGluc3RhbmNlIGlzIGFsc28KICAgIGFjY2Vzc2libGUgYXMgYSB0dXBsZSBvZiBhdCBsZWFzdCAxMCBpbnRlZ2VycyBnaXZpbmcgdGhlIG1vc3QgaW1wb3J0YW50IChhbmQKICAgIHBvcnRhYmxlKSBtZW1iZXJzIG9mIHRoZSA6Yzp0eXBlOmBzdGF0YCBzdHJ1Y3R1cmUsIGluIHRoZSBvcmRlcgogICAgOmF0dHI6YHN0X21vZGVgLCA6YXR0cjpgc3RfaW5vYCwgOmF0dHI6YHN0X2RldmAsIDphdHRyOmBzdF9ubGlua2AsCiAgICA6YXR0cjpgc3RfdWlkYCwgOmF0dHI6YHN0X2dpZGAsIDphdHRyOmBzdF9zaXplYCwgOmF0dHI6YHN0X2F0aW1lYCwKICAgIDphdHRyOmBzdF9tdGltZWAsIDphdHRyOmBzdF9jdGltZWAuIE1vcmUgaXRlbXMgbWF5IGJlIGFkZGVkIGF0IHRoZSBlbmQgYnkKLSAgIHNvbWUgaW1wbGVtZW50YXRpb25zLgotCi0gICBUaGlzIGZ1bmN0aW9uIGNhbiBzdXBwb3J0IDpyZWY6YHNwZWNpZnlpbmcgYSBmaWxlIGRlc2NyaXB0b3IgPHBhdGhfZmQ+YCBhbmQKLSAgIDpyZWY6YG5vdCBmb2xsb3dpbmcgc3ltbGlua3MgPGZvbGxvd19zeW1saW5rcz5gLgotCi0gICAuLiBpbmRleDo6IG1vZHVsZTogc3RhdAotCi0gICBUaGUgc3RhbmRhcmQgbW9kdWxlIDptb2Q6YHN0YXRgIGRlZmluZXMgZnVuY3Rpb25zIGFuZCBjb25zdGFudHMgdGhhdCBhcmUgdXNlZnVsCi0gICBmb3IgZXh0cmFjdGluZyBpbmZvcm1hdGlvbiBmcm9tIGEgOmM6dHlwZTpgc3RhdGAgc3RydWN0dXJlLiAoT24gV2luZG93cywgc29tZQotICAgaXRlbXMgYXJlIGZpbGxlZCB3aXRoIGR1bW15IHZhbHVlcy4pCi0KLSAgIEV4YW1wbGU6OgotCi0gICAgICA+Pj4gaW1wb3J0IG9zCi0gICAgICA+Pj4gc3RhdGluZm8gPSBvcy5zdGF0KCdzb21lZmlsZS50eHQnKQotICAgICAgPj4+IHN0YXRpbmZvCi0gICAgICBwb3NpeC5zdGF0X3Jlc3VsdChzdF9tb2RlPTMzMTg4LCBzdF9pbm89Nzg3NjkzMiwgc3RfZGV2PTIzNDg4MTAyNiwKLSAgICAgIHN0X25saW5rPTEsIHN0X3VpZD01MDEsIHN0X2dpZD01MDEsIHN0X3NpemU9MjY0LCBzdF9hdGltZT0xMjk3MjMwMjk1LAotICAgICAgc3RfbXRpbWU9MTI5NzIzMDAyNywgc3RfY3RpbWU9MTI5NzIzMDAyNykKLSAgICAgID4+PiBzdGF0aW5mby5zdF9zaXplCi0gICAgICAyNjQKLQotICAgQXZhaWxhYmlsaXR5OiBVbml4LCBXaW5kb3dzLgorICAgc29tZSBpbXBsZW1lbnRhdGlvbnMuIEZvciBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgUHl0aG9uIHZlcnNpb25zLAorICAgYWNjZXNzaW5nIDpjbGFzczpgc3RhdF9yZXN1bHRgIGFzIGEgdHVwbGUgYWx3YXlzIHJldHVybnMgaW50ZWdlcnMuCiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMwotICAgICAgQWRkZWQgdGhlICpkaXJfZmQqIGFuZCAqZm9sbG93X3N5bWxpbmtzKiBhcmd1bWVudHMsCi0gICAgICBzcGVjaWZ5aW5nIGEgZmlsZSBkZXNjcmlwdG9yIGluc3RlYWQgb2YgYSBwYXRoLAotICAgICAgYW5kIHRoZSA6YXR0cjpgc3RfYXRpbWVfbnNgLCA6YXR0cjpgc3RfbXRpbWVfbnNgLAotICAgICAgYW5kIDphdHRyOmBzdF9jdGltZV9uc2AgbWVtYmVycy4KKyAgICAgIEFkZGVkIHRoZSA6YXR0cjpgc3RfYXRpbWVfbnNgLCA6YXR0cjpgc3RfbXRpbWVfbnNgLCBhbmQKKyAgICAgIDphdHRyOmBzdF9jdGltZV9uc2AgbWVtYmVycy4KIAogCiAuLiBmdW5jdGlvbjo6IHN0YXRfZmxvYXRfdGltZXMoW25ld3ZhbHVlXSkKQEAgLTE5MzUsMTEgKzIwOTgsMjYgQEAKICAgIHJlYWQtb25seSwgYW5kIGlmIDpjb25zdDpgU1RfTk9TVUlEYCBpcyBzZXQsIHRoZSBzZW1hbnRpY3Mgb2YKICAgIHNldHVpZC9zZXRnaWQgYml0cyBhcmUgZGlzYWJsZWQgb3Igbm90IHN1cHBvcnRlZC4KIAorICAgQWRkaXRpb25hbCBtb2R1bGUtbGV2ZWwgY29uc3RhbnRzIGFyZSBkZWZpbmVkIGZvciBHTlUvZ2xpYmMgYmFzZWQgc3lzdGVtcy4KKyAgIFRoZXNlIGFyZSA6Y29uc3Q6YFNUX05PREVWYCAoZGlzYWxsb3cgYWNjZXNzIHRvIGRldmljZSBzcGVjaWFsIGZpbGVzKSwKKyAgIDpjb25zdDpgU1RfTk9FWEVDYCAoZGlzYWxsb3cgcHJvZ3JhbSBleGVjdXRpb24pLCA6Y29uc3Q6YFNUX1NZTkNIUk9OT1VTYAorICAgKHdyaXRlcyBhcmUgc3luY2VkIGF0IG9uY2UpLCA6Y29uc3Q6YFNUX01BTkRMT0NLYCAoYWxsb3cgbWFuZGF0b3J5IGxvY2tzIG9uIGFuIEZTKSwKKyAgIDpjb25zdDpgU1RfV1JJVEVgICh3cml0ZSBvbiBmaWxlL2RpcmVjdG9yeS9zeW1saW5rKSwgOmNvbnN0OmBTVF9BUFBFTkRgCisgICAoYXBwZW5kLW9ubHkgZmlsZSksIDpjb25zdDpgU1RfSU1NVVRBQkxFYCAoaW1tdXRhYmxlIGZpbGUpLCA6Y29uc3Q6YFNUX05PQVRJTUVgCisgICAoZG8gbm90IHVwZGF0ZSBhY2Nlc3MgdGltZXMpLCA6Y29uc3Q6YFNUX05PRElSQVRJTUVgIChkbyBub3QgdXBkYXRlIGRpcmVjdG9yeSBhY2Nlc3MKKyAgIHRpbWVzKSwgOmNvbnN0OmBTVF9SRUxBVElNRWAgKHVwZGF0ZSBhdGltZSByZWxhdGl2ZSB0byBtdGltZS9jdGltZSkuCisKICAgIFRoaXMgZnVuY3Rpb24gY2FuIHN1cHBvcnQgOnJlZjpgc3BlY2lmeWluZyBhIGZpbGUgZGVzY3JpcHRvciA8cGF0aF9mZD5gLgogCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgogICAgICAgVGhlIDpjb25zdDpgU1RfUkRPTkxZYCBhbmQgOmNvbnN0OmBTVF9OT1NVSURgIGNvbnN0YW50cyB3ZXJlIGFkZGVkLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVGhlIDpjb25zdDpgU1RfTk9ERVZgLCA6Y29uc3Q6YFNUX05PRVhFQ2AsIDpjb25zdDpgU1RfU1lOQ0hST05PVVNgLAorICAgICAgOmNvbnN0OmBTVF9NQU5ETE9DS2AsIDpjb25zdDpgU1RfV1JJVEVgLCA6Y29uc3Q6YFNUX0FQUEVORGAsCisgICAgICA6Y29uc3Q6YFNUX0lNTVVUQUJMRWAsIDpjb25zdDpgU1RfTk9BVElNRWAsIDpjb25zdDpgU1RfTk9ESVJBVElNRWAsCisgICAgICBhbmQgOmNvbnN0OmBTVF9SRUxBVElNRWAgY29uc3RhbnRzIHdlcmUgYWRkZWQuCisKICAgIEF2YWlsYWJpbGl0eTogVW5peC4KIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCkBAIC0xOTc2LDcgKzIxNTQsOCBAQAogICAgY29udGFpbiA6ZnVuYzpgb3MuYWNjZXNzYCwgb3RoZXJ3aXNlIGl0IHdpbGwgYmUgZW1wdHkuCiAKICAgIFRvIGNoZWNrIHdoZXRoZXIgeW91IGNhbiB1c2UgdGhlICplZmZlY3RpdmVfaWRzKiBwYXJhbWV0ZXIgZm9yCi0gICA6ZnVuYzpgb3MuYWNjZXNzYCwgdXNlIHRoZSBgYGluYGAgb3BlcmF0b3Igb24gYGBzdXBwb3J0c19kaXJfZmRgYCwgbGlrZSBzbzo6CisgICA6ZnVuYzpgb3MuYWNjZXNzYCwgdXNlIHRoZSBgYGluYGAgb3BlcmF0b3Igb24gYGBzdXBwb3J0c19lZmZlY3RpdmVfaWRzYGAsCisgICBsaWtlIHNvOjoKIAogICAgICAgIG9zLmFjY2VzcyBpbiBvcy5zdXBwb3J0c19lZmZlY3RpdmVfaWRzCiAKQEAgLTIwMjYsOSArMjIwNSw5IEBACiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKIAogCi0uLiBmdW5jdGlvbjo6IHN5bWxpbmsoc291cmNlLCBsaW5rX25hbWUsIHRhcmdldF9pc19kaXJlY3Rvcnk9RmFsc2UsICosIGRpcl9mZD1Ob25lKQorLi4gZnVuY3Rpb246OiBzeW1saW5rKHNyYywgZHN0LCB0YXJnZXRfaXNfZGlyZWN0b3J5PUZhbHNlLCAqLCBkaXJfZmQ9Tm9uZSkKIAotICAgQ3JlYXRlIGEgc3ltYm9saWMgbGluayBwb2ludGluZyB0byAqc291cmNlKiBuYW1lZCAqbGlua19uYW1lKi4KKyAgIENyZWF0ZSBhIHN5bWJvbGljIGxpbmsgcG9pbnRpbmcgdG8gKnNyYyogbmFtZWQgKmRzdCouCiAKICAgIE9uIFdpbmRvd3MsIGEgc3ltbGluayByZXByZXNlbnRzIGVpdGhlciBhIGZpbGUgb3IgYSBkaXJlY3RvcnksIGFuZCBkb2VzIG5vdAogICAgbW9ycGggdG8gdGhlIHRhcmdldCBkeW5hbWljYWxseS4gIElmIHRoZSB0YXJnZXQgaXMgcHJlc2VudCwgdGhlIHR5cGUgb2YgdGhlCkBAIC0yMDk4LDIwICsyMjc3LDIwIEBACiAgICAgICBUaGUgKmRpcl9mZCogcGFyYW1ldGVyLgogCiAKLS4uIGZ1bmN0aW9uOjogdXRpbWUocGF0aCwgdGltZXM9Tm9uZSwgKiwgbnM9Tm9uZSwgZGlyX2ZkPU5vbmUsIGZvbGxvd19zeW1saW5rcz1UcnVlKQorLi4gZnVuY3Rpb246OiB1dGltZShwYXRoLCB0aW1lcz1Ob25lLCAqWywgbnNdLCBkaXJfZmQ9Tm9uZSwgZm9sbG93X3N5bWxpbmtzPVRydWUpCiAKICAgIFNldCB0aGUgYWNjZXNzIGFuZCBtb2RpZmllZCB0aW1lcyBvZiB0aGUgZmlsZSBzcGVjaWZpZWQgYnkgKnBhdGgqLgogCiAgICA6ZnVuYzpgdXRpbWVgIHRha2VzIHR3byBvcHRpb25hbCBwYXJhbWV0ZXJzLCAqdGltZXMqIGFuZCAqbnMqLgogICAgVGhlc2Ugc3BlY2lmeSB0aGUgdGltZXMgc2V0IG9uICpwYXRoKiBhbmQgYXJlIHVzZWQgYXMgZm9sbG93czoKIAotICAgLSBJZiAqbnMqIGlzIG5vdCBgYE5vbmVgYCwKKyAgIC0gSWYgKm5zKiBpcyBzcGVjaWZpZWQsCiAgICAgIGl0IG11c3QgYmUgYSAyLXR1cGxlIG9mIHRoZSBmb3JtIGBgKGF0aW1lX25zLCBtdGltZV9ucylgYAogICAgICB3aGVyZSBlYWNoIG1lbWJlciBpcyBhbiBpbnQgZXhwcmVzc2luZyBuYW5vc2Vjb25kcy4KICAgIC0gSWYgKnRpbWVzKiBpcyBub3QgYGBOb25lYGAsCiAgICAgIGl0IG11c3QgYmUgYSAyLXR1cGxlIG9mIHRoZSBmb3JtIGBgKGF0aW1lLCBtdGltZSlgYAogICAgICB3aGVyZSBlYWNoIG1lbWJlciBpcyBhbiBpbnQgb3IgZmxvYXQgZXhwcmVzc2luZyBzZWNvbmRzLgotICAgLSBJZiAqdGltZXMqIGFuZCAqbnMqIGFyZSBib3RoIGBgTm9uZWBgLAorICAgLSBJZiAqdGltZXMqIGlzIGBgTm9uZWBgIGFuZCAqbnMqIGlzIHVuc3BlY2lmaWVkLAogICAgICB0aGlzIGlzIGVxdWl2YWxlbnQgdG8gc3BlY2lmeWluZyBgYG5zPShhdGltZV9ucywgbXRpbWVfbnMpYGAKICAgICAgd2hlcmUgYm90aCB0aW1lcyBhcmUgdGhlIGN1cnJlbnQgdGltZS4KIApAQCAtMjE1NywxOCArMjMzNiwyMCBAQAogCiAgICBJZiBvcHRpb25hbCBhcmd1bWVudCAqdG9wZG93biogaXMgYGBUcnVlYGAgb3Igbm90IHNwZWNpZmllZCwgdGhlIHRyaXBsZSBmb3IgYQogICAgZGlyZWN0b3J5IGlzIGdlbmVyYXRlZCBiZWZvcmUgdGhlIHRyaXBsZXMgZm9yIGFueSBvZiBpdHMgc3ViZGlyZWN0b3JpZXMKLSAgIChkaXJlY3RvcmllcyBhcmUgZ2VuZXJhdGVkIHRvcC1kb3duKS4gIElmICp0b3Bkb3duKiBpcyBgYEZhbHNlYGAsIHRoZSB0cmlwbGUgZm9yIGEKLSAgIGRpcmVjdG9yeSBpcyBnZW5lcmF0ZWQgYWZ0ZXIgdGhlIHRyaXBsZXMgZm9yIGFsbCBvZiBpdHMgc3ViZGlyZWN0b3JpZXMKLSAgIChkaXJlY3RvcmllcyBhcmUgZ2VuZXJhdGVkIGJvdHRvbS11cCkuCisgICAoZGlyZWN0b3JpZXMgYXJlIGdlbmVyYXRlZCB0b3AtZG93bikuICBJZiAqdG9wZG93biogaXMgYGBGYWxzZWBgLCB0aGUgdHJpcGxlCisgICBmb3IgYSBkaXJlY3RvcnkgaXMgZ2VuZXJhdGVkIGFmdGVyIHRoZSB0cmlwbGVzIGZvciBhbGwgb2YgaXRzIHN1YmRpcmVjdG9yaWVzCisgICAoZGlyZWN0b3JpZXMgYXJlIGdlbmVyYXRlZCBib3R0b20tdXApLiBObyBtYXR0ZXIgdGhlIHZhbHVlIG9mICp0b3Bkb3duKiwgdGhlCisgICBsaXN0IG9mIHN1YmRpcmVjdG9yaWVzIGlzIHJldHJpZXZlZCBiZWZvcmUgdGhlIHR1cGxlcyBmb3IgdGhlIGRpcmVjdG9yeSBhbmQKKyAgIGl0cyBzdWJkaXJlY3RvcmllcyBhcmUgZ2VuZXJhdGVkLgogCiAgICBXaGVuICp0b3Bkb3duKiBpcyBgYFRydWVgYCwgdGhlIGNhbGxlciBjYW4gbW9kaWZ5IHRoZSAqZGlybmFtZXMqIGxpc3QgaW4tcGxhY2UKICAgIChwZXJoYXBzIHVzaW5nIDprZXl3b3JkOmBkZWxgIG9yIHNsaWNlIGFzc2lnbm1lbnQpLCBhbmQgOmZ1bmM6YHdhbGtgIHdpbGwgb25seQogICAgcmVjdXJzZSBpbnRvIHRoZSBzdWJkaXJlY3RvcmllcyB3aG9zZSBuYW1lcyByZW1haW4gaW4gKmRpcm5hbWVzKjsgdGhpcyBjYW4gYmUKICAgIHVzZWQgdG8gcHJ1bmUgdGhlIHNlYXJjaCwgaW1wb3NlIGEgc3BlY2lmaWMgb3JkZXIgb2YgdmlzaXRpbmcsIG9yIGV2ZW4gdG8gaW5mb3JtCiAgICA6ZnVuYzpgd2Fsa2AgYWJvdXQgZGlyZWN0b3JpZXMgdGhlIGNhbGxlciBjcmVhdGVzIG9yIHJlbmFtZXMgYmVmb3JlIGl0IHJlc3VtZXMKLSAgIDpmdW5jOmB3YWxrYCBhZ2Fpbi4gIE1vZGlmeWluZyAqZGlybmFtZXMqIHdoZW4gKnRvcGRvd24qIGlzIGBgRmFsc2VgYCBpcwotICAgaW5lZmZlY3RpdmUsIGJlY2F1c2UgaW4gYm90dG9tLXVwIG1vZGUgdGhlIGRpcmVjdG9yaWVzIGluICpkaXJuYW1lcyogYXJlCi0gICBnZW5lcmF0ZWQgYmVmb3JlICpkaXJwYXRoKiBpdHNlbGYgaXMgZ2VuZXJhdGVkLgorICAgOmZ1bmM6YHdhbGtgIGFnYWluLiAgTW9kaWZ5aW5nICpkaXJuYW1lcyogd2hlbiAqdG9wZG93biogaXMgYGBGYWxzZWBgIGhhcworICAgbm8gZWZmZWN0IG9uIHRoZSBiZWhhdmlvciBvZiB0aGUgd2FsaywgYmVjYXVzZSBpbiBib3R0b20tdXAgbW9kZSB0aGUgZGlyZWN0b3JpZXMKKyAgIGluICpkaXJuYW1lcyogYXJlIGdlbmVyYXRlZCBiZWZvcmUgKmRpcnBhdGgqIGl0c2VsZiBpcyBnZW5lcmF0ZWQuCiAKICAgIEJ5IGRlZmF1bHQsIGVycm9ycyBmcm9tIHRoZSA6ZnVuYzpgbGlzdGRpcmAgY2FsbCBhcmUgaWdub3JlZC4gIElmIG9wdGlvbmFsCiAgICBhcmd1bWVudCAqb25lcnJvciogaXMgc3BlY2lmaWVkLCBpdCBzaG91bGQgYmUgYSBmdW5jdGlvbjsgaXQgd2lsbCBiZSBjYWxsZWQgd2l0aApAQCAtMjIwNSw4ICsyMzg2LDkgQEAKICAgICAgICAgICBpZiAnQ1ZTJyBpbiBkaXJzOgogICAgICAgICAgICAgICBkaXJzLnJlbW92ZSgnQ1ZTJykgICMgZG9uJ3QgdmlzaXQgQ1ZTIGRpcmVjdG9yaWVzCiAKLSAgIEluIHRoZSBuZXh0IGV4YW1wbGUsIHdhbGtpbmcgdGhlIHRyZWUgYm90dG9tLXVwIGlzIGVzc2VudGlhbDogOmZ1bmM6YHJtZGlyYAotICAgZG9lc24ndCBhbGxvdyBkZWxldGluZyBhIGRpcmVjdG9yeSBiZWZvcmUgdGhlIGRpcmVjdG9yeSBpcyBlbXB0eTo6CisgICBJbiB0aGUgbmV4dCBleGFtcGxlIChzaW1wbGUgaW1wbGVtZW50YXRpb24gb2YgOmZ1bmM6YHNodXRpbC5ybXRyZWVgKSwKKyAgIHdhbGtpbmcgdGhlIHRyZWUgYm90dG9tLXVwIGlzIGVzc2VudGlhbCwgOmZ1bmM6YHJtZGlyYCBkb2Vzbid0IGFsbG93CisgICBkZWxldGluZyBhIGRpcmVjdG9yeSBiZWZvcmUgdGhlIGRpcmVjdG9yeSBpcyBlbXB0eTo6CiAKICAgICAgICMgRGVsZXRlIGV2ZXJ5dGhpbmcgcmVhY2hhYmxlIGZyb20gdGhlIGRpcmVjdG9yeSBuYW1lZCBpbiAidG9wIiwKICAgICAgICMgYXNzdW1pbmcgdGhlcmUgYXJlIG5vIHN5bWJvbGljIGxpbmtzLgpAQCAtMjU4OSw3ICsyNzcxLDcgQEAKICAgIEZvcmsgYSBjaGlsZCBwcm9jZXNzLiAgUmV0dXJuIGBgMGBgIGluIHRoZSBjaGlsZCBhbmQgdGhlIGNoaWxkJ3MgcHJvY2VzcyBpZCBpbiB0aGUKICAgIHBhcmVudC4gIElmIGFuIGVycm9yIG9jY3VycyA6ZXhjOmBPU0Vycm9yYCBpcyByYWlzZWQuCiAKLSAgIE5vdGUgdGhhdCBzb21lIHBsYXRmb3JtcyBpbmNsdWRpbmcgRnJlZUJTRCA8PSA2LjMsIEN5Z3dpbiBhbmQgT1MvMiBFTVggaGF2ZQorICAgTm90ZSB0aGF0IHNvbWUgcGxhdGZvcm1zIGluY2x1ZGluZyBGcmVlQlNEIDw9IDYuMyBhbmQgQ3lnd2luIGhhdmUKICAgIGtub3duIGlzc3VlcyB3aGVuIHVzaW5nIGZvcmsoKSBmcm9tIGEgdGhyZWFkLgogCiAgICAuLiB3YXJuaW5nOjoKQEAgLTI2NTksMTAgKzI4NDEsMjggQEAKICAgIEF2YWlsYWJpbGl0eTogVW5peC4KIAogCi0uLiBmdW5jdGlvbjo6IHBvcGVuKC4uLikKKy4uIGZ1bmN0aW9uOjogcG9wZW4oY21kLCBtb2RlPSdyJywgYnVmZmVyaW5nPS0xKQogCi0gICBSdW4gY2hpbGQgcHJvY2Vzc2VzLCByZXR1cm5pbmcgb3BlbmVkIHBpcGVzIGZvciBjb21tdW5pY2F0aW9ucy4gIFRoZXNlIGZ1bmN0aW9ucwotICAgYXJlIGRlc2NyaWJlZCBpbiBzZWN0aW9uIDpyZWY6YG9zLW5ld3N0cmVhbXNgLgorICAgT3BlbiBhIHBpcGUgdG8gb3IgZnJvbSBjb21tYW5kICpjbWQqLgorICAgVGhlIHJldHVybiB2YWx1ZSBpcyBhbiBvcGVuIGZpbGUgb2JqZWN0CisgICBjb25uZWN0ZWQgdG8gdGhlIHBpcGUsIHdoaWNoIGNhbiBiZSByZWFkIG9yIHdyaXR0ZW4gZGVwZW5kaW5nIG9uIHdoZXRoZXIgKm1vZGUqCisgICBpcyBgYCdyJ2BgIChkZWZhdWx0KSBvciBgYCd3J2BgLiBUaGUgKmJ1ZmZlcmluZyogYXJndW1lbnQgaGFzIHRoZSBzYW1lIG1lYW5pbmcgYXMKKyAgIHRoZSBjb3JyZXNwb25kaW5nIGFyZ3VtZW50IHRvIHRoZSBidWlsdC1pbiA6ZnVuYzpgb3BlbmAgZnVuY3Rpb24uIFRoZQorICAgcmV0dXJuZWQgZmlsZSBvYmplY3QgcmVhZHMgb3Igd3JpdGVzIHRleHQgc3RyaW5ncyByYXRoZXIgdGhhbiBieXRlcy4KKworICAgVGhlIGBgY2xvc2VgYCBtZXRob2QgcmV0dXJucyA6Y29uc3Q6YE5vbmVgIGlmIHRoZSBzdWJwcm9jZXNzIGV4aXRlZAorICAgc3VjY2Vzc2Z1bGx5LCBvciB0aGUgc3VicHJvY2VzcydzIHJldHVybiBjb2RlIGlmIHRoZXJlIHdhcyBhbgorICAgZXJyb3IuIE9uIFBPU0lYIHN5c3RlbXMsIGlmIHRoZSByZXR1cm4gY29kZSBpcyBwb3NpdGl2ZSBpdAorICAgcmVwcmVzZW50cyB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBwcm9jZXNzIGxlZnQtc2hpZnRlZCBieSBvbmUKKyAgIGJ5dGUuICBJZiB0aGUgcmV0dXJuIGNvZGUgaXMgbmVnYXRpdmUsIHRoZSBwcm9jZXNzIHdhcyB0ZXJtaW5hdGVkCisgICBieSB0aGUgc2lnbmFsIGdpdmVuIGJ5IHRoZSBuZWdhdGVkIHZhbHVlIG9mIHRoZSByZXR1cm4gY29kZS4gIChGb3IKKyAgIGV4YW1wbGUsIHRoZSByZXR1cm4gdmFsdWUgbWlnaHQgYmUgYGAtIHNpZ25hbC5TSUdLSUxMYGAgaWYgdGhlCisgICBzdWJwcm9jZXNzIHdhcyBraWxsZWQuKSAgT24gV2luZG93cyBzeXN0ZW1zLCB0aGUgcmV0dXJuIHZhbHVlCisgICBjb250YWlucyB0aGUgc2lnbmVkIGludGVnZXIgcmV0dXJuIGNvZGUgZnJvbSB0aGUgY2hpbGQgcHJvY2Vzcy4KKworICAgVGhpcyBpcyBpbXBsZW1lbnRlZCB1c2luZyA6Y2xhc3M6YHN1YnByb2Nlc3MuUG9wZW5gOyBzZWUgdGhhdCBjbGFzcydzCisgICBkb2N1bWVudGF0aW9uIGZvciBtb3JlIHBvd2VyZnVsIHdheXMgdG8gbWFuYWdlIGFuZCBjb21tdW5pY2F0ZSB3aXRoCisgICBzdWJwcm9jZXNzZXMuCiAKIAogLi4gZnVuY3Rpb246OiBzcGF3bmwobW9kZSwgcGF0aCwgLi4uKQpAQCAtMjgzNSw3ICszMDM1LDYgQEAKICAgIDptYW5wYWdlOmB0aW1lcygyKWAgb3IgdGhlIGNvcnJlc3BvbmRpbmcgV2luZG93cyBQbGF0Zm9ybSBBUEkgZG9jdW1lbnRhdGlvbi4KICAgIE9uIFdpbmRvd3MsIG9ubHkgOmF0dHI6YHVzZXJgIGFuZCA6YXR0cjpgc3lzdGVtYCBhcmUga25vd247IHRoZSBvdGhlcgogICAgYXR0cmlidXRlcyBhcmUgemVyby4KLSAgIE9uIE9TLzIsIG9ubHkgOmF0dHI6YGVsYXBzZWRgIGlzIGtub3duOyB0aGUgb3RoZXIgYXR0cmlidXRlcyBhcmUgemVyby4KIAogICAgQXZhaWxhYmlsaXR5OiBVbml4LCBXaW5kb3dzLgogCkBAIC0zMDU3LDcgKzMyNTYsNyBAQAogCiAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKIAotVGhlIGZvbGxvd2luZyBzY2hlZHVsaW5nIHBvbGljaWVzIGFyZSBleHBvc2VkIGlmIHRoZXkgYXJlIGEgc3VwcG9ydGVkIGJ5IHRoZQorVGhlIGZvbGxvd2luZyBzY2hlZHVsaW5nIHBvbGljaWVzIGFyZSBleHBvc2VkIGlmIHRoZXkgYXJlIHN1cHBvcnRlZCBieSB0aGUKIG9wZXJhdGluZyBzeXN0ZW0uCiAKIC4uIGRhdGE6OiBTQ0hFRF9PVEhFUgpAQCAtMzE2NiwxMCArMzM2NSw2IEBACiAgICBSZXR1cm4gdGhlIHNldCBvZiBDUFVzIHRoZSBwcm9jZXNzIHdpdGggUElEICpwaWQqIChvciB0aGUgY3VycmVudCBwcm9jZXNzCiAgICBpZiB6ZXJvKSBpcyByZXN0cmljdGVkIHRvLgogCi0gICAuLiBzZWVhbHNvOjoKLSAgICAgIDpmdW5jOmBtdWx0aXByb2Nlc3NpbmcuY3B1X2NvdW50YCByZXR1cm5zIHRoZSBudW1iZXIgb2YgQ1BVcyBpbiB0aGUKLSAgICAgIHN5c3RlbS4KLQogCiAuLiBfb3MtcGF0aDoKIApAQCAtMzIwNyw2ICszNDAyLDEzIEBACiAgICBBdmFpbGFiaWxpdHk6IFVuaXguCiAKIAorLi4gZnVuY3Rpb246OiBjcHVfY291bnQoKQorCisgICBSZXR1cm4gdGhlIG51bWJlciBvZiBDUFVzIGluIHRoZSBzeXN0ZW0uIFJldHVybnMgTm9uZSBpZiB1bmRldGVybWluZWQuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIC4uIGZ1bmN0aW9uOjogZ2V0bG9hZGF2ZygpCiAKICAgIFJldHVybiB0aGUgbnVtYmVyIG9mIHByb2Nlc3NlcyBpbiB0aGUgc3lzdGVtIHJ1biBxdWV1ZSBhdmVyYWdlZCBvdmVyIHRoZSBsYXN0CkBAIC0zMzA1LDYgKzM1MDcsMTkgQEAKICAgIFRoZSBmaWxlIHBhdGggb2YgdGhlIG51bGwgZGV2aWNlLiBGb3IgZXhhbXBsZTogYGAnL2Rldi9udWxsJ2BgIGZvcgogICAgUE9TSVgsIGBgJ251bCdgYCBmb3IgV2luZG93cy4gIEFsc28gYXZhaWxhYmxlIHZpYSA6bW9kOmBvcy5wYXRoYC4KIAorLi4gZGF0YTo6IFJUTERfTEFaWQorICAgICAgICAgIFJUTERfTk9XCisgICAgICAgICAgUlRMRF9HTE9CQUwKKyAgICAgICAgICBSVExEX0xPQ0FMCisgICAgICAgICAgUlRMRF9OT0RFTEVURQorICAgICAgICAgIFJUTERfTk9MT0FECisgICAgICAgICAgUlRMRF9ERUVQQklORAorCisgICBGbGFncyBmb3IgdXNlIHdpdGggdGhlIDpmdW5jOmB+c3lzLnNldGRsb3BlbmZsYWdzYCBhbmQKKyAgIDpmdW5jOmB+c3lzLmdldGRsb3BlbmZsYWdzYCBmdW5jdGlvbnMuICBTZWUgdGhlIFVuaXggbWFudWFsIHBhZ2UKKyAgIDptYW5wYWdlOmBkbG9wZW4oMylgIGZvciB3aGF0IHRoZSBkaWZmZXJlbnQgZmxhZ3MgbWVhbi4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKIC4uIF9vcy1taXNjZnVuYzoKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvb3NzYXVkaW9kZXYucnN0IGIvRG9jL2xpYnJhcnkvb3NzYXVkaW9kZXYucnN0CmluZGV4IDgwNTUxYWEuLmJiNTA4MWEgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L29zc2F1ZGlvZGV2LnJzdAorKysgYi9Eb2MvbGlicmFyeS9vc3NhdWRpb2Rldi5yc3QKQEAgLTE2NSw3ICsxNjUsNyBAQAogICAgZGF0YSB3cml0dGVuIGlzIGFsd2F5cyBlcXVhbCB0byB0aGUgYW1vdW50IG9mIGRhdGEgc3VwcGxpZWQuCiAKIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCi0gICBBdWRpbyBkZXZpY2Ugb2JqZWN0cyBhbHNvIHN1cHBvcnQgdGhlIGNvbnRleHQgbWFuYWdlciBwcm90b2NvbCwgaS5lLiB0aGV5IGNhbgorICAgQXVkaW8gZGV2aWNlIG9iamVjdHMgYWxzbyBzdXBwb3J0IHRoZSBjb250ZXh0IG1hbmFnZW1lbnQgcHJvdG9jb2wsIGkuZS4gdGhleSBjYW4KICAgIGJlIHVzZWQgaW4gYSA6a2V5d29yZDpgd2l0aGAgc3RhdGVtZW50LgogCiAKQEAgLTM1Nyw3ICszNTcsNyBAQAogICAgUmV0dXJucyB0aGUgZmlsZSBoYW5kbGUgbnVtYmVyIG9mIHRoZSBvcGVuIG1peGVyIGRldmljZSBmaWxlLgogCiAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgotICAgTWl4ZXIgb2JqZWN0cyBhbHNvIHN1cHBvcnQgdGhlIGNvbnRleHQgbWFuYWdlciBwcm90b2NvbC4KKyAgIE1peGVyIG9iamVjdHMgYWxzbyBzdXBwb3J0IHRoZSBjb250ZXh0IG1hbmFnZW1lbnQgcHJvdG9jb2wuCiAKIAogVGhlIHJlbWFpbmluZyBtZXRob2RzIGFyZSBzcGVjaWZpYyB0byBhdWRpbyBtaXhpbmc6CkBAIC00MDcsNyArNDA3LDcgQEAKICAgIChzaWxlbnQpIHRvIDEwMCAoZnVsbCB2b2x1bWUpLiAgSWYgdGhlIGNvbnRyb2wgaXMgbW9ub3Bob25pYywgYSAyLXR1cGxlIGlzIHN0aWxsCiAgICByZXR1cm5lZCwgYnV0IGJvdGggdm9sdW1lcyBhcmUgdGhlIHNhbWUuCiAKLSAgIFJhaXNlcyA6ZXhjOmBPU1NBdWRpb0Vycm9yYCBpZiBhbiBpbnZhbGlkIGNvbnRyb2wgd2FzIGlzIHNwZWNpZmllZCwgb3IKKyAgIFJhaXNlcyA6ZXhjOmBPU1NBdWRpb0Vycm9yYCBpZiBhbiBpbnZhbGlkIGNvbnRyb2wgaXMgc3BlY2lmaWVkLCBvcgogICAgOmV4YzpgT1NFcnJvcmAgaWYgYW4gdW5zdXBwb3J0ZWQgY29udHJvbCBpcyBzcGVjaWZpZWQuCiAKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvb3RoZXJndWkucnN0IGIvRG9jL2xpYnJhcnkvb3RoZXJndWkucnN0CmluZGV4IGViNDliOTkuLjQzNzIxYjIgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L290aGVyZ3VpLnJzdAorKysgYi9Eb2MvbGlicmFyeS9vdGhlcmd1aS5yc3QKQEAgLTEwLDcgKzEwLDcgQEAKIAogICAgYFB5R09iamVjdCA8aHR0cHM6Ly9saXZlLmdub21lLm9yZy9QeUdPYmplY3Q+YF8KICAgICAgIHByb3ZpZGVzIGludHJvc3BlY3Rpb24gYmluZGluZ3MgZm9yIEMgbGlicmFyaWVzIHVzaW5nCi0gICAgICBgR09iamVjdCA8aHR0cDovL2RldmVsb3Blci5nbm9tZS5vcmcvZ29iamVjdC9zdGFibGUvPmBfLiAgT25lIG9mCisgICAgICBgR09iamVjdCA8aHR0cHM6Ly9kZXZlbG9wZXIuZ25vbWUub3JnL2dvYmplY3Qvc3RhYmxlLz5gXy4gIE9uZSBvZgogICAgICAgdGhlc2UgbGlicmFyaWVzIGlzIHRoZSBgR1RLKyAzIDxodHRwOi8vd3d3Lmd0ay5vcmcvPmBfIHdpZGdldCBzZXQuCiAgICAgICBHVEsrIGNvbWVzIHdpdGggbWFueSBtb3JlIHdpZGdldHMgdGhhbiBUa2ludGVyIHByb3ZpZGVzLiAgQW4gb25saW5lCiAgICAgICBgUHl0aG9uIEdUSysgMyBUdXRvcmlhbCA8aHR0cDovL3B5dGhvbi1ndGstMy10dXRvcmlhbC5yZWFkdGhlZG9jcy5vcmcvZW4vbGF0ZXN0Lz5gXwpAQCAtMjIsNyArMjIsNyBAQAogICAgICAgYEdOT01FIDxodHRwOi8vd3d3Lmdub21lLm9yZz5gXy4gIEFuIG9ubGluZSBgdHV0b3JpYWwKICAgICAgIDxodHRwOi8vd3d3LnB5Z3RrLm9yZy9weWd0azJ0dXRvcmlhbC9pbmRleC5odG1sPmBfIGlzIGF2YWlsYWJsZS4KIAotICAgYFB5UXQgPGh0dHA6Ly93d3cucml2ZXJiYW5rY29tcHV0aW5nLmNvLnVrL3NvZnR3YXJlL3B5cXQvPmBfCisgICBgUHlRdCA8aHR0cDovL3d3dy5yaXZlcmJhbmtjb21wdXRpbmcuY28udWsvc29mdHdhcmUvcHlxdC9pbnRybz5gXwogICAgICAgUHlRdCBpcyBhIDpwcm9ncmFtOmBzaXBgXCAtd3JhcHBlZCBiaW5kaW5nIHRvIHRoZSBRdCB0b29sa2l0LiAgUXQgaXMgYW4KICAgICAgIGV4dGVuc2l2ZSBDKysgR1VJIGFwcGxpY2F0aW9uIGRldmVsb3BtZW50IGZyYW1ld29yayB0aGF0IGlzCiAgICAgICBhdmFpbGFibGUgZm9yIFVuaXgsIFdpbmRvd3MgYW5kIE1hYyBPUyBYLiA6cHJvZ3JhbTpgc2lwYCBpcyBhIHRvb2wKQEAgLTM0LDcgKzM0LDcgQEAKICAgICAgIHdpdGggUHl0aG9uIGFuZCBRdCA8aHR0cDovL3d3dy5xdHJhYy5ldS9weXF0Ym9vay5odG1sPmBfLCBieSBNYXJrCiAgICAgICBTdW1tZXJmaWVsZC4KIAotICAgYFB5U2lkZSA8aHR0cDovL3d3dy5weXNpZGUub3JnLz5gXworICAgYFB5U2lkZSA8aHR0cDovL3F0LXByb2plY3Qub3JnL3dpa2kvUHlTaWRlPmBfCiAgICAgICBpcyBhIG5ld2VyIGJpbmRpbmcgdG8gdGhlIFF0IHRvb2xraXQsIHByb3ZpZGVkIGJ5IE5va2lhLgogICAgICAgQ29tcGFyZWQgdG8gUHlRdCwgaXRzIGxpY2Vuc2luZyBzY2hlbWUgaXMgZnJpZW5kbGllciB0byBub24tb3BlbiBzb3VyY2UKICAgICAgIGFwcGxpY2F0aW9ucy4KQEAgLTUwLDEzICs1MCwxMyBAQAogICAgICAgbG93LWxldmVsIGRldmljZSBjb250ZXh0IGRyYXdpbmcsIGRyYWcgYW5kIGRyb3AsIHN5c3RlbSBjbGlwYm9hcmQgYWNjZXNzLAogICAgICAgYW4gWE1MLWJhc2VkIHJlc291cmNlIGZvcm1hdCBhbmQgbW9yZSwgaW5jbHVkaW5nIGFuIGV2ZXIgZ3Jvd2luZyBsaWJyYXJ5CiAgICAgICBvZiB1c2VyLWNvbnRyaWJ1dGVkIG1vZHVsZXMuICB3eFB5dGhvbiBoYXMgYSBib29rLCBgd3hQeXRob24gaW4gQWN0aW9uCi0gICAgICA8aHR0cDovL3d3dy5hbWF6b24uY29tL2V4ZWMvb2JpZG9zL0FTSU4vMTkzMjM5NDYyMT5gXywgYnkgTm9lbCBSYXBwaW4gYW5kCisgICAgICA8aHR0cDovL3d3dy5tYW5uaW5nLmNvbS9yYXBwaW4vPmBfLCBieSBOb2VsIFJhcHBpbiBhbmQKICAgICAgIFJvYmluIER1bm4uCiAKIFB5R1RLLCBQeVF0LCBhbmQgd3hQeXRob24sIGFsbCBoYXZlIGEgbW9kZXJuIGxvb2sgYW5kIGZlZWwgYW5kIG1vcmUKIHdpZGdldHMgdGhhbiBUa2ludGVyLiBJbiBhZGRpdGlvbiwgdGhlcmUgYXJlIG1hbnkgb3RoZXIgR1VJIHRvb2xraXRzIGZvcgogUHl0aG9uLCBib3RoIGNyb3NzLXBsYXRmb3JtLCBhbmQgcGxhdGZvcm0tc3BlY2lmaWMuIFNlZSB0aGUgYEdVSSBQcm9ncmFtbWluZwotPGh0dHA6Ly93aWtpLnB5dGhvbi5vcmcvbW9pbi9HdWlQcm9ncmFtbWluZz5gXyBwYWdlIGluIHRoZSBQeXRob24gV2lraSBmb3IgYQorPGh0dHBzOi8vd2lraS5weXRob24ub3JnL21vaW4vR3VpUHJvZ3JhbW1pbmc+YF8gcGFnZSBpbiB0aGUgUHl0aG9uIFdpa2kgZm9yIGEKIG11Y2ggbW9yZSBjb21wbGV0ZSBsaXN0LCBhbmQgYWxzbyBmb3IgbGlua3MgdG8gZG9jdW1lbnRzIHdoZXJlIHRoZQogZGlmZmVyZW50IEdVSSB0b29sa2l0cyBhcmUgY29tcGFyZWQuCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3BhdGhsaWItaW5oZXJpdGFuY2UucG5nIGIvRG9jL2xpYnJhcnkvcGF0aGxpYi1pbmhlcml0YW5jZS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjgxYzNkZQotLS0gL2Rldi9udWxsCisrKyBiL0RvYy9saWJyYXJ5L3BhdGhsaWItaW5oZXJpdGFuY2UucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3BhdGhsaWItaW5oZXJpdGFuY2Uuc3ZnIGIvRG9jL2xpYnJhcnkvcGF0aGxpYi1pbmhlcml0YW5jZS5zdmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWY0MjAwNQotLS0gL2Rldi9udWxsCisrKyBiL0RvYy9saWJyYXJ5L3BhdGhsaWItaW5oZXJpdGFuY2Uuc3ZnCkBAIC0wLDAgKzEsNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJ5ZXMiPz4KKworPHN2ZyB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAuMCAwLjAgNTM4LjAgNDk2LjAiIGZpbGw9Im5vbmUiIHN0cm9rZT0ibm9uZSIgc3Ryb2tlLWxpbmVjYXA9InNxdWFyZSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj48Y2xpcFBhdGggaWQ9InAuMCI+PHBhdGggZD0ibTAgMGw1MzguMCAwbDAgNDk2LjBsLTUzOC4wIDBsMCAtNDk2LjB6IiBjbGlwLXJ1bGU9Im5vbnplcm8iPjwvcGF0aD48L2NsaXBQYXRoPjxnIGNsaXAtcGF0aD0idXJsKCNwLjApIj48cGF0aCBmaWxsPSIjMDAwMDAwIiBmaWxsLW9wYWNpdHk9IjAuMCIgZD0ibTAgMGw1MzguOTE2IDBsMCA0OTYuMDgzOThsLTUzOC45MTYgMHoiIGZpbGwtcnVsZT0ibm9uemVybyI+PC9wYXRoPjxwYXRoIGZpbGw9IiNmZmZmZmYiIGQ9Im0xNzYuMCAyNC4wbDE4Ny40MzMwNyAwbDAgODAuNTM1NDNsLTE4Ny40MzMwNyAweiIgZmlsbC1ydWxlPSJub256ZXJvIj48L3BhdGg+PHBhdGggc3Ryb2tlPSIjMDAwMDAwIiBzdHJva2Utd2lkdGg9IjEuMCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLWxpbmVjYXA9ImJ1dHQiIGQ9Im0xNzYuMCAyNC4wbDE4Ny40MzMwNyAwbDAgODAuNTM1NDNsLTE4Ny40MzMwNyAweiIgZmlsbC1ydWxlPSJub256ZXJvIj48L3BhdGg+PHBhdGggZmlsbD0iIzAwMDAwMCIgZD0ibTIzNS4xODUyNyA2Ni44Nzc3MTZsMCAxLjY0MDYyNWwxLjYyNSAwcTAuNTc4MTI1IDAgMC44MTI1IDAuMjM0Mzc1cTAuMjUgMC4yMTg3NSAwLjI1IDAuNTc4MTI1cTAgMC4zNDM3NSAtMC4yNSAwLjU3ODEyNXEtMC4yMzQzNzUgMC4yMTg3NSAtMC44MTI1IDAuMjE4NzVsLTMuNDY4NzUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjM0Mzc1IC0wLjI1IC0wLjU5Mzc1cTAgLTAuMzQzNzUgMC4yNSAtMC41NjI1cTAuMjUgLTAuMjM0Mzc1IDAuODI4MTI1IC0wLjIzNDM3NWwwLjI1IDBsMCAtNi4yNjU2MjVsLTAuMjUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjE4NzUgLTAuMjUgLTAuNTc4MTI1cTAgLTAuMzU5Mzc1IDAuMjUgLTAuNTc4MTI1cTAuMjUgLTAuMjM0Mzc1IDAuODI4MTI1IC0wLjIzNDM3NWwzLjY4NzUgMC4wMTU2MjVxMS42MjUgMCAyLjU2MjUgMC44OTA2MjVxMC45NTMxMjUgMC44NzUgMC45NTMxMjUgMi4xNTYyNXEwIDAuNzAzMTI1IC0wLjMxMjUgMS4zMjgxMjVxLTAuMjUgMC40Njg3NSAtMC44MTI1IDAuOTIxODc1cS0wLjU2MjUgMC40NTMxMjUgLTEuMTU2MjUgMC42ODc1cS0wLjU5Mzc1IDAuMjM0Mzc1IC0xLjU2MjUgMC4yMzQzNzVsLTEuNTE1NjI1IDB6bTAgLTEuNjA5Mzc1bDEuNDg0Mzc1IDBxMS4wNDY4NzUgMCAxLjY1NjI1IC0wLjQ2ODc1cTAuNjI1IC0wLjQ2ODc1IDAuNjI1IC0xLjE0MDYyNXEwIC0wLjU2MjUgLTAuNSAtMC45ODQzNzVxLTAuNSAtMC40MjE4NzUgLTEuNDIxODc1IC0wLjQyMTg3NWwtMS44NDM3NSAwbDAgMy4wMTU2MjV6bTEzLjkyOTY4NzUgLTIuMjM0Mzc1bDAgNS40ODQzNzVxMC41MTU2MjUgMCAwLjc1IDAuMjM0Mzc1cTAuMjUgMC4yMTg3NSAwLjI1IDAuNTc4MTI1cTAgMC4zNDM3NSAtMC4yNSAwLjU3ODEyNXEtMC4yNSAwLjIxODc1IC0wLjgyODEyNSAwLjIxODc1bC0xLjUxNTYyNSAwbDAgLTAuMzc1cS0wLjY4NzUgMC4zMTI1IC0xLjMxMjUgMC40Njg3NXEtMC42MjUgMC4xNzE4NzUgLTEuMTg3NSAwLjE3MTg3NXEtMC43OTY4NzUgMCAtMS4zNzUgLTAuMzI4MTI1cS0wLjU3ODEyNSAtMC4zNDM3NSAtMC45MDYyNSAtMC45Mzc1cS0wLjI1IC0wLjQyMTg3NSAtMC4yNSAtMS4wNDY4NzVsMCAtMy40NTMxMjVsLTAuMjY1NjI1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjI1IC0wLjIxODc1IC0wLjI1IC0wLjU3ODEyNXEwIC0wLjM1OTM3NSAwLjI1IC0wLjU3ODEyNXEwLjI1IC0wLjIxODc1IDAuODI4MTI1IC0wLjIxODc1bDEuODc1IDBsMCA0Ljc2NTYyNXEwIDAuNSAwLjIzNDM3NSAwLjc1cTAuMjUgMC4yMzQzNzUgMC43NjU2MjUgMC4yMzQzNzVxMC40ODQzNzUgMCAxLjAzMTI1IC0wLjE4NzVxMC41NjI1IC0wLjIwMzEyNSAxLjM5MDYyNSAtMC43MDMxMjVsMCAtMy4yNjU2MjVsLTAuNTc4MTI1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjI1IC0wLjIxODc1IC0wLjI1IC0wLjU3ODEyNXEwIC0wLjM1OTM3NSAwLjI1IC0wLjU3ODEyNXEwLjI1IC0wLjIxODc1IDAuODI4MTI1IC0wLjIxODc1bDIuMTcxODc1IDB6bTUuODY3MTg3NSAwbDAgMS4wcTEuMDE1NjI1IC0wLjczNDM3NSAxLjU5Mzc1IC0wLjk2ODc1cTAuNTc4MTI1IC0wLjI1IDEuMDkzNzUgLTAuMjVxMC43ODEyNSAwIDEuNTE1NjI1IDAuNTc4MTI1cTAuNSAwLjM5MDYyNSAwLjUgMC43OTY4NzVxMCAwLjM0Mzc1IC0wLjI1IDAuNTkzNzVxLTAuMjM0Mzc1IDAuMjM0Mzc1IC0wLjU2MjUgMC4yMzQzNzVxLTAuMjk2ODc1IDAgLTAuNjI1IC0wLjI5Njg3NXEtMC4zMjgxMjUgLTAuMjk2ODc1IC0wLjU5Mzc1IC0wLjI5Njg3NXEtMC4zMjgxMjUgMCAtMS4wIDAuNDIxODc1cS0wLjY3MTg3NSAwLjQyMTg3NSAtMS42NzE4NzUgMS4yNjU2MjVsMCAyLjQwNjI1bDIuMjgxMjUgMHEwLjU3ODEyNSAwIDAuODI4MTI1IDAuMjM0Mzc1cTAuMjUgMC4yMTg3NSAwLjI1IDAuNTc4MTI1cTAgMC4zNDM3NSAtMC4yNSAwLjU3ODEyNXEtMC4yNSAwLjIxODc1IC0wLjgyODEyNSAwLjIxODc1bC00LjgyODEyNSAwcS0wLjU3ODEyNSAwIC0wLjgyODEyNSAtMC4yMTg3NXEtMC4yNSAtMC4yMzQzNzUgLTAuMjUgLTAuNTkzNzVxMCAtMC4zNDM3NSAwLjI1IC0wLjU2MjVxMC4yNSAtMC4yMzQzNzUgMC44MjgxMjUgLTAuMjM0Mzc1bDAuOTUzMTI1IDBsMCAtMy44OTA2MjVsLTAuNTc4MTI1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjI1IC0wLjIxODc1IC0wLjI1IC0wLjU3ODEyNXEwIC0wLjM1OTM3NSAwLjI1IC0wLjU3ODEyNXEwLjI1IC0wLjIxODc1IDAuODI4MTI1IC0wLjIxODc1bDIuMTcxODc1IDB6bTEzLjk2MDkzNzUgNC4zNTkzNzVsLTYuNTc4MTI1IDBxMC4yNSAwLjYyNSAwLjg5MDYyNSAxLjAxNTYyNXEwLjY0MDYyNSAwLjM3NSAxLjcxODc1IDAuMzc1cTAuODkwNjI1IDAgMi4zNzUgLTAuMzkwNjI1cTAuNjA5Mzc1IC0wLjE1NjI1IDAuODQzNzUgLTAuMTU2MjVxMC4zMTI1IDAgMC41MzEyNSAwLjIzNDM3NXEwLjIxODc1IDAuMjE4NzUgMC4yMTg3NSAwLjU2MjVxMCAwLjMxMjUgLTAuMjM0Mzc1IDAuNTMxMjVxLTAuMzEyNSAwLjI5Njg3NSAtMS41MzEyNSAwLjU2MjVxLTEuMjAzMTI1IDAuMjY1NjI1IC0yLjMxMjUgMC4yNjU2MjVxLTEuOTIxODc1IDAgLTMuMDc4MTI1IC0xLjA5Mzc1cS0xLjE1NjI1IC0xLjA5Mzc1IC0xLjE1NjI1IC0yLjY3MTg3NXEwIC0xLjY4NzUgMS4yNSAtMi43NXExLjI1IC0xLjA2MjUgMi44NzUgLTEuMDYyNXEwLjk2ODc1IDAgMS43ODEyNSAwLjM0Mzc1cTAuODI4MTI1IDAuMzQzNzUgMS4yMTg3NSAwLjc1cTAuNTYyNSAwLjU3ODEyNSAwLjkzNzUgMS40MjE4NzVxMC4yNSAwLjU5Mzc1IDAuMjUgMS4zNzVsMCAwLjY4NzV6bS0xLjc4MTI1IC0xLjYwOTM3NXEtMC4zNTkzNzUgLTAuNjg3NSAtMC45NTMxMjUgLTEuMDE1NjI1cS0wLjU5Mzc1IC0wLjM0Mzc1IC0xLjQyMTg3NSAtMC4zNDM3NXEtMC44MTI1IDAgLTEuNDA2MjUgMC4zNDM3NXEtMC41OTM3NSAwLjMyODEyNSAtMC45Njg3NSAxLjAxNTYyNWw0Ljc1IDB6bTYuNDI5Njg3NSAxLjA5Mzc1bDAgMS42NDA2MjVsMS42MjUgMHEwLjU3ODEyNSAwIDAuODEyNSAwLjIzNDM3NXEwLjI1IDAuMjE4NzUgMC4yNSAwLjU3ODEyNXEwIDAuMzQzNzUgLTAuMjUgMC41NzgxMjVxLTAuMjM0Mzc1IDAuMjE4NzUgLTAuODEyNSAwLjIxODc1bC0zLjQ2ODc1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjI1IC0wLjIzNDM3NSAtMC4yNSAtMC41OTM3NXEwIC0wLjM0Mzc1IDAuMjUgLTAuNTYyNXEwLjI1IC0wLjIzNDM3NSAwLjgyODEyNSAtMC4yMzQzNzVsMC4yNSAwbDAgLTYuMjY1NjI1bC0wLjI1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjI1IC0wLjIxODc1IC0wLjI1IC0wLjU3ODEyNXEwIC0wLjM1OTM3NSAwLjI1IC0wLjU3ODEyNXEwLjI1IC0wLjIzNDM3NSAwLjgyODEyNSAtMC4yMzQzNzVsMy42ODc1IDAuMDE1NjI1cTEuNjI1IDAgMi41NjI1IDAuODkwNjI1cTAuOTUzMTI1IDAuODc1IDAuOTUzMTI1IDIuMTU2MjVxMCAwLjcwMzEyNSAtMC4zMTI1IDEuMzI4MTI1cS0wLjI1IDAuNDY4NzUgLTAuODEyNSAwLjkyMTg3NXEtMC41NjI1IDAuNDUzMTI1IC0xLjE1NjI1IDAuNjg3NXEtMC41OTM3NSAwLjIzNDM3NSAtMS41NjI1IDAuMjM0Mzc1bC0xLjUxNTYyNSAwem0wIC0xLjYwOTM3NWwxLjQ4NDM3NSAwcTEuMDQ2ODc1IDAgMS42NTYyNSAtMC40Njg3NXEwLjYyNSAtMC40Njg3NSAwLjYyNSAtMS4xNDA2MjVxMCAtMC41NjI1IC0wLjUgLTAuOTg0Mzc1cS0wLjUgLTAuNDIxODc1IC0xLjQyMTg3NSAtMC40MjE4NzVsLTEuODQzNzUgMGwwIDMuMDE1NjI1em0xMS45NzY1NjI1IDQuODU5Mzc1bDAgLTAuMzc1cS0wLjYwOTM3NSAwLjMxMjUgLTEuMzQzNzUgMC40Njg3NXEtMC43MTg3NSAwLjE3MTg3NSAtMS4zMTI1IDAuMTcxODc1cS0xLjI4MTI1IDAgLTIuMDkzNzUgLTAuNjg3NXEtMC43OTY4NzUgLTAuNjg3NSAtMC43OTY4NzUgLTEuNTE1NjI1cTAgLTEuMCAxLjAxNTYyNSAtMS44NTkzNzVxMS4wMzEyNSAtMC44NzUgMi44NDM3NSAtMC44NzVxMC43MzQzNzUgMCAxLjY4NzUgMC4xNTYyNWwwIC0wLjM3NXEwIC0wLjM1OTM3NSAtMC4zMTI1IC0wLjU3ODEyNXEtMC4zMTI1IC0wLjIzNDM3NSAtMS4xNzE4NzUgLTAuMjM0Mzc1cS0wLjcxODc1IDAgLTEuODQzNzUgMC4yODEyNXEtMC40MjE4NzUgMC4wOTM3NSAtMC42NTYyNSAwLjA5Mzc1cS0wLjMyODEyNSAwIC0wLjU0Njg3NSAtMC4yMTg3NXEtMC4yMTg3NSAtMC4yMzQzNzUgLTAuMjE4NzUgLTAuNTkzNzVxMCAtMC4yMDMxMjUgMC4wNzgxMjUgLTAuMzQzNzVxMC4wNzgxMjUgLTAuMTU2MjUgMC4yMTg3NSAtMC4yNXEwLjE0MDYyNSAtMC4wOTM3NSAwLjU3ODEyNSAtMC4yMTg3NXEwLjU5Mzc1IC0wLjE1NjI1IDEuMjAzMTI1IC0wLjI1cTAuNjI1IC0wLjEwOTM3NSAxLjEyNSAtMC4xMDkzNzVxMS41IDAgMi4zMTI1IDAuNjU2MjVxMC44MjgxMjUgMC42NDA2MjUgMC44MjgxMjUgMS43NWwwIDMuMjk2ODc1bDAuMjgxMjUgMHEwLjU3ODEyNSAwIDAuODEyNSAwLjIzNDM3NXEwLjI1IDAuMjE4NzUgMC4yNSAwLjU3ODEyNXEwIDAuMzQzNzUgLTAuMjUgMC41NzgxMjVxLTAuMjM0Mzc1IDAuMjE4NzUgLTAuODEyNSAwLjIxODc1bC0xLjg3NSAwem0wIC0yLjg3NXEtMC45Njg3NSAtMC4xODc1IC0xLjc4MTI1IC0wLjE4NzVxLTAuOTY4NzUgMCAtMS42NzE4NzUgMC40ODQzNzVxLTAuNDM3NSAwLjI5Njg3NSAtMC40Mzc1IDAuNjA5Mzc1cTAgMC4yMzQzNzUgMC4yMDMxMjUgMC4zNzVxMC4zOTA2MjUgMC4yNSAxLjA3ODEyNSAwLjI1cTAuNTc4MTI1IDAgMS4yOTY4NzUgLTAuMjE4NzVxMC43MzQzNzUgLTAuMjM0Mzc1IDEuMzEyNSAtMC42MjVsMCAtMC42ODc1em03Ljc1NzgxMjUgLTIuNjI1bDAgMy4yMTg3NXEwIDAuNTE1NjI1IDAuMjE4NzUgMC42NzE4NzVxMC4zMjgxMjUgMC4yNjU2MjUgMS4xNzE4NzUgMC4yNjU2MjVxMS4yMTg3NSAwIDIuMjY1NjI1IC0wLjUzMTI1cTAuMzkwNjI1IC0wLjIwMzEyNSAwLjYyNSAtMC4yMDMxMjVxMC4zMTI1IDAgMC41MzEyNSAwLjIzNDM3NXEwLjIzNDM3NSAwLjIzNDM3NSAwLjIzNDM3NSAwLjU3ODEyNXEwIDAuMzEyNSAtMC4yNSAwLjUzMTI1cS0wLjM3NSAwLjM3NSAtMS41MTU2MjUgMC42ODc1cS0xLjEyNSAwLjMxMjUgLTEuODkwNjI1IDAuMzEyNXEtMS41IDAgLTIuMjUgLTAuNjQwNjI1cS0wLjczNDM3NSAtMC42NTYyNSAtMC43MzQzNzUgLTEuNTkzNzVsMCAtMy41MzEyNWwtMC41NzgxMjUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjE4NzUgLTAuMjUgLTAuNTc4MTI1cTAgLTAuMzU5Mzc1IDAuMjUgLTAuNTc4MTI1cTAuMjUgLTAuMjE4NzUgMC44MjgxMjUgLTAuMjE4NzVsMC41NzgxMjUgMGwwIC0xLjQ1MzEyNXEwIC0wLjU3ODEyNSAwLjIxODc1IC0wLjgxMjVxMC4yMTg3NSAtMC4yNSAwLjU3ODEyNSAtMC4yNXEwLjM1OTM3NSAwIDAuNTc4MTI1IDAuMjVxMC4yMTg3NSAwLjIzNDM3NSAwLjIxODc1IDAuODEyNWwwIDEuNDUzMTI1bDIuOTY4NzUgMHEwLjU3ODEyNSAwIDAuODEyNSAwLjIxODc1cTAuMjUgMC4yMTg3NSAwLjI1IDAuNTc4MTI1cTAgMC4zNTkzNzUgLTAuMjUgMC41NzgxMjVxLTAuMjM0Mzc1IDAuMjE4NzUgLTAuODEyNSAwLjIxODc1bC0yLjk2ODc1IDB6bTguMzUxNTYyNSAtNC42NDA2MjVsMCAzLjQyMTg3NXEwLjUgLTAuMjk2ODc1IDEuMCAtMC40Mzc1cTAuNTE1NjI1IC0wLjE1NjI1IDEuMDQ2ODc1IC0wLjE1NjI1cTAuODI4MTI1IDAgMS40Njg3NSAwLjI4MTI1cTAuNjU2MjUgMC4yODEyNSAxLjA3ODEyNSAwLjg5MDYyNXEwLjQyMTg3NSAwLjYwOTM3NSAwLjQyMTg3NSAxLjUzMTI1bDAgMy4wcTAuNjA5Mzc1IDAgMC43OTY4NzUgMC4xMjVxMC4zNzUgMC4yMzQzNzUgMC4zNzUgMC42ODc1cTAgMC4zNDM3NSAtMC4yNSAwLjU3ODEyNXEtMC4yMzQzNzUgMC4yMTg3NSAtMC44MTI1IDAuMjE4NzVsLTEuODI4MTI1IDBxLTAuNTYyNSAwIC0wLjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjM0Mzc1IC0wLjI1IC0wLjU5Mzc1cTAgLTAuNDM3NSAwLjM3NSAtMC42NzE4NzVxMC4yMDMxMjUgLTAuMTI1IDAuNzk2ODc1IC0wLjEyNWwwIC0yLjg5MDYyNXEwIC0wLjYyNSAtMC4yODEyNSAtMC44NzVxLTAuMzU5Mzc1IC0wLjMyODEyNSAtMS4wNzgxMjUgLTAuMzI4MTI1cS0wLjUzMTI1IDAgLTAuOTUzMTI1IDAuMjAzMTI1cS0wLjQwNjI1IDAuMjAzMTI1IC0xLjA5Mzc1IDAuODkwNjI1bDAgMy4wcTAuNjA5Mzc1IDAgMC43OTY4NzUgMC4xMjVxMC4zNzUgMC4yMzQzNzUgMC4zNzUgMC42ODc1cTAgMC4zNDM3NSAtMC4yNSAwLjU3ODEyNXEtMC4yMzQzNzUgMC4yMTg3NSAtMC44MTI1IDAuMjE4NzVsLTEuODI4MTI1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjIzNDM3NSAtMC4yMzQzNzUgLTAuMjM0Mzc1IC0wLjU5Mzc1cTAgLTAuNDM3NSAwLjM3NSAtMC42NzE4NzVxMC4xODc1IC0wLjEyNSAwLjc5Njg3NSAtMC4xMjVsMCAtNi45MjE4NzVsLTAuMjY1NjI1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjI1IC0wLjIzNDM3NSAtMC4yNSAtMC41OTM3NXEwIC0wLjM0Mzc1IDAuMjUgLTAuNTYyNXEwLjI1IC0wLjIzNDM3NSAwLjgyODEyNSAtMC4yMzQzNzVsMS44NzUgMHoiIGZpbGwtcnVsZT0ibm9uemVybyI+PC9wYXRoPjxwYXRoIGZpbGw9IiNmZmZmZmYiIGQ9Im0xNi4wIDE0NC4wbDE4Ny40MzMwNiAwbDAgODAuNTM1NDNsLTE4Ny40MzMwNiAweiIgZmlsbC1ydWxlPSJub256ZXJvIj48L3BhdGg+PHBhdGggc3Ryb2tlPSIjMDAwMDAwIiBzdHJva2Utd2lkdGg9IjEuMCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLWxpbmVjYXA9ImJ1dHQiIGQ9Im0xNi4wIDE0NC4wbDE4Ny40MzMwNiAwbDAgODAuNTM1NDNsLTE4Ny40MzMwNiAweiIgZmlsbC1ydWxlPSJub256ZXJvIj48L3BhdGg+PHBhdGggZmlsbD0iIzAwMDAwMCIgZD0ibTUxLjE4MTM3NCAxODYuODc3NzJsMCAxLjY0MDYyNWwxLjYyNSAwcTAuNTc4MTI1IDAgMC44MTI1IDAuMjM0Mzc1cTAuMjUgMC4yMTg3NSAwLjI1IDAuNTc4MTI1cTAgMC4zNDM3NSAtMC4yNSAwLjU3ODEyNXEtMC4yMzQzNzUgMC4yMTg3NSAtMC44MTI1IDAuMjE4NzVsLTMuNDY4NzUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjM0Mzc1IC0wLjI1IC0wLjU5Mzc1cTAgLTAuMzQzNzUgMC4yNSAtMC41NjI1cTAuMjUgLTAuMjM0Mzc1IDAuODI4MTI1IC0wLjIzNDM3NWwwLjI1IDBsMCAtNi4yNjU2MjVsLTAuMjUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjE4NzUgLTAuMjUgLTAuNTc4MTI1cTAgLTAuMzU5Mzc1IDAuMjUgLTAuNTc4MTI1cTAuMjUgLTAuMjM0Mzc1IDAuODI4MTI1IC0wLjIzNDM3NWwzLjY4NzUgMC4wMTU2MjVxMS42MjUgMCAyLjU2MjUgMC44OTA2MjVxMC45NTMxMjUgMC44NzUgMC45NTMxMjUgMi4xNTYyNXEwIDAuNzAzMTI1IC0wLjMxMjUgMS4zMjgxMjVxLTAuMjUgMC40Njg3NSAtMC44MTI1IDAuOTIxODc1cS0wLjU2MjUgMC40NTMxMjUgLTEuMTU2MjUgMC42ODc1cS0wLjU5Mzc1IDAuMjM0Mzc1IC0xLjU2MjUgMC4yMzQzNzVsLTEuNTE1NjI1IDB6bTAgLTEuNjA5Mzc1bDEuNDg0Mzc1IDBxMS4wNDY4NzUgMCAxLjY1NjI1IC0wLjQ2ODc1cTAuNjI1IC0wLjQ2ODc1IDAuNjI1IC0xLjE0MDYyNXEwIC0wLjU2MjUgLTAuNSAtMC45ODQzNzVxLTAuNSAtMC40MjE4NzUgLTEuNDIxODc1IC0wLjQyMTg3NWwtMS44NDM3NSAwbDAgMy4wMTU2MjV6bTEzLjkyOTY4NzUgLTIuMjM0Mzc1bDAgNS40ODQzNzVxMC41MTU2MjUgMCAwLjc1IDAuMjM0Mzc1cTAuMjUgMC4yMTg3NSAwLjI1IDAuNTc4MTI1cTAgMC4zNDM3NSAtMC4yNSAwLjU3ODEyNXEtMC4yNSAwLjIxODc1IC0wLjgyODEyNSAwLjIxODc1bC0xLjUxNTYyNSAwbDAgLTAuMzc1cS0wLjY4NzUgMC4zMTI1IC0xLjMxMjUgMC40Njg3NXEtMC42MjUgMC4xNzE4NzUgLTEuMTg3NSAwLjE3MTg3NXEtMC43OTY4NzUgMCAtMS4zNzUgLTAuMzI4MTI1cS0wLjU3ODEyNSAtMC4zNDM3NSAtMC45MDYyNSAtMC45Mzc1cS0wLjI1IC0wLjQyMTg3NSAtMC4yNSAtMS4wNDY4NzVsMCAtMy40NTMxMjVsLTAuMjY1NjI1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjI1IC0wLjIxODc1IC0wLjI1IC0wLjU3ODEyNXEwIC0wLjM1OTM3NSAwLjI1IC0wLjU3ODEyNXEwLjI1IC0wLjIxODc1IDAuODI4MTI1IC0wLjIxODc1bDEuODc1IDBsMCA0Ljc2NTYyNXEwIDAuNSAwLjIzNDM3NSAwLjc1cTAuMjUgMC4yMzQzNzUgMC43NjU2MjUgMC4yMzQzNzVxMC40ODQzNzUgMCAxLjAzMTI1IC0wLjE4NzVxMC41NjI1IC0wLjIwMzEyNSAxLjM5MDYyNSAtMC43MDMxMjVsMCAtMy4yNjU2MjVsLTAuNTc4MTI1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjI1IC0wLjIxODc1IC0wLjI1IC0wLjU3ODEyNXEwIC0wLjM1OTM3NSAwLjI1IC0wLjU3ODEyNXEwLjI1IC0wLjIxODc1IDAuODI4MTI1IC0wLjIxODc1bDIuMTcxODc1IDB6bTUuODY3MTg3NSAwbDAgMS4wcTEuMDE1NjI1IC0wLjczNDM3NSAxLjU5Mzc1IC0wLjk2ODc1cTAuNTc4MTI1IC0wLjI1IDEuMDkzNzUgLTAuMjVxMC43ODEyNSAwIDEuNTE1NjI1IDAuNTc4MTI1cTAuNSAwLjM5MDYyNSAwLjUgMC43OTY4NzVxMCAwLjM0Mzc1IC0wLjI1IDAuNTkzNzVxLTAuMjM0Mzc1IDAuMjM0Mzc1IC0wLjU2MjUgMC4yMzQzNzVxLTAuMjk2ODc1IDAgLTAuNjI1IC0wLjI5Njg3NXEtMC4zMjgxMjUgLTAuMjk2ODc1IC0wLjU5Mzc1IC0wLjI5Njg3NXEtMC4zMjgxMjUgMCAtMS4wIDAuNDIxODc1cS0wLjY3MTg3NSAwLjQyMTg3NSAtMS42NzE4NzUgMS4yNjU2MjVsMCAyLjQwNjI1bDIuMjgxMjUgMHEwLjU3ODEyNSAwIDAuODI4MTI1IDAuMjM0Mzc1cTAuMjUgMC4yMTg3NSAwLjI1IDAuNTc4MTI1cTAgMC4zNDM3NSAtMC4yNSAwLjU3ODEyNXEtMC4yNSAwLjIxODc1IC0wLjgyODEyNSAwLjIxODc1bC00LjgyODEyNSAwcS0wLjU3ODEyNSAwIC0wLjgyODEyNSAtMC4yMTg3NXEtMC4yNSAtMC4yMzQzNzUgLTAuMjUgLTAuNTkzNzVxMCAtMC4zNDM3NSAwLjI1IC0wLjU2MjVxMC4yNSAtMC4yMzQzNzUgMC44MjgxMjUgLTAuMjM0Mzc1bDAuOTUzMTI1IDBsMCAtMy44OTA2MjVsLTAuNTc4MTI1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjI1IC0wLjIxODc1IC0wLjI1IC0wLjU3ODEyNXEwIC0wLjM1OTM3NSAwLjI1IC0wLjU3ODEyNXEwLjI1IC0wLjIxODc1IDAuODI4MTI1IC0wLjIxODc1bDIuMTcxODc1IDB6bTEzLjk2MDkzNzUgNC4zNTkzNzVsLTYuNTc4MTI1IDBxMC4yNSAwLjYyNSAwLjg5MDYyNSAxLjAxNTYyNXEwLjY0MDYyNSAwLjM3NSAxLjcxODc1IDAuMzc1cTAuODkwNjI1IDAgMi4zNzUgLTAuMzkwNjI1cTAuNjA5Mzc1IC0wLjE1NjI1IDAuODQzNzUgLTAuMTU2MjVxMC4zMTI1IDAgMC41MzEyNSAwLjIzNDM3NXEwLjIxODc1IDAuMjE4NzUgMC4yMTg3NSAwLjU2MjVxMCAwLjMxMjUgLTAuMjM0Mzc1IDAuNTMxMjVxLTAuMzEyNSAwLjI5Njg3NSAtMS41MzEyNSAwLjU2MjVxLTEuMjAzMTI1IDAuMjY1NjI1IC0yLjMxMjUgMC4yNjU2MjVxLTEuOTIxODc1IDAgLTMuMDc4MTI1IC0xLjA5Mzc1cS0xLjE1NjI1IC0xLjA5Mzc1IC0xLjE1NjI1IC0yLjY3MTg3NXEwIC0xLjY4NzUgMS4yNSAtMi43NXExLjI1IC0xLjA2MjUgMi44NzUgLTEuMDYyNXEwLjk2ODc1IDAgMS43ODEyNSAwLjM0Mzc1cTAuODI4MTI1IDAuMzQzNzUgMS4yMTg3NSAwLjc1cTAuNTYyNSAwLjU3ODEyNSAwLjkzNzUgMS40MjE4NzVxMC4yNSAwLjU5Mzc1IDAuMjUgMS4zNzVsMCAwLjY4NzV6bS0xLjc4MTI1IC0xLjYwOTM3NXEtMC4zNTkzNzUgLTAuNjg3NSAtMC45NTMxMjUgLTEuMDE1NjI1cS0wLjU5Mzc1IC0wLjM0Mzc1IC0xLjQyMTg3NSAtMC4zNDM3NXEtMC44MTI1IDAgLTEuNDA2MjUgMC4zNDM3NXEtMC41OTM3NSAwLjMyODEyNSAtMC45Njg3NSAxLjAxNTYyNWw0Ljc1IDB6bTYuNDI5Njg3NSAxLjA5Mzc1bDAgMS42NDA2MjVsMS42MjUgMHEwLjU3ODEyNSAwIDAuODEyNSAwLjIzNDM3NXEwLjI1IDAuMjE4NzUgMC4yNSAwLjU3ODEyNXEwIDAuMzQzNzUgLTAuMjUgMC41NzgxMjVxLTAuMjM0Mzc1IDAuMjE4NzUgLTAuODEyNSAwLjIxODc1bC0zLjQ2ODc1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjI1IC0wLjIzNDM3NSAtMC4yNSAtMC41OTM3NXEwIC0wLjM0Mzc1IDAuMjUgLTAuNTYyNXEwLjI1IC0wLjIzNDM3NSAwLjgyODEyNSAtMC4yMzQzNzVsMC4yNSAwbDAgLTYuMjY1NjI1bC0wLjI1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjI1IC0wLjIxODc1IC0wLjI1IC0wLjU3ODEyNXEwIC0wLjM1OTM3NSAwLjI1IC0wLjU3ODEyNXEwLjI1IC0wLjIzNDM3NSAwLjgyODEyNSAtMC4yMzQzNzVsMy42ODc1IDAuMDE1NjI1cTEuNjI1IDAgMi41NjI1IDAuODkwNjI1cTAuOTUzMTI1IDAuODc1IDAuOTUzMTI1IDIuMTU2MjVxMCAwLjcwMzEyNSAtMC4zMTI1IDEuMzI4MTI1cS0wLjI1IDAuNDY4NzUgLTAuODEyNSAwLjkyMTg3NXEtMC41NjI1IDAuNDUzMTI1IC0xLjE1NjI1IDAuNjg3NXEtMC41OTM3NSAwLjIzNDM3NSAtMS41NjI1IDAuMjM0Mzc1bC0xLjUxNTYyNSAwem0wIC0xLjYwOTM3NWwxLjQ4NDM3NSAwcTEuMDQ2ODc1IDAgMS42NTYyNSAtMC40Njg3NXEwLjYyNSAtMC40Njg3NSAwLjYyNSAtMS4xNDA2MjVxMCAtMC41NjI1IC0wLjUgLTAuOTg0Mzc1cS0wLjUgLTAuNDIxODc1IC0xLjQyMTg3NSAtMC40MjE4NzVsLTEuODQzNzUgMGwwIDMuMDE1NjI1em0xNC42OTUzMTI1IDEuNDM3NXEwIDAuOTIxODc1IC0wLjUxNTYyNSAxLjc5Njg3NXEtMC41MTU2MjUgMC44NTkzNzUgLTEuNTMxMjUgMS4zNzVxLTEuMCAwLjUxNTYyNSAtMi4xMDkzNzUgMC41MTU2MjVxLTEuMDkzNzUgMCAtMi4wOTM3NSAtMC41cS0xLjAgLTAuNTE1NjI1IC0xLjUzMTI1IC0xLjM3NXEtMC41MTU2MjUgLTAuODc1IC0wLjUxNTYyNSAtMS44MjgxMjVxMCAtMC45NTMxMjUgMC41MzEyNSAtMS44NzVxMC41MzEyNSAtMC45Mzc1IDEuNTMxMjUgLTEuNDY4NzVxMS4wIC0wLjUzMTI1IDIuMDc4MTI1IC0wLjUzMTI1cTEuMDkzNzUgMCAyLjEwOTM3NSAwLjU0Njg3NXExLjAxNTYyNSAwLjU0Njg3NSAxLjUzMTI1IDEuNDY4NzVxMC41MTU2MjUgMC45MDYyNSAwLjUxNTYyNSAxLjg3NXptLTEuNjA5Mzc1IDAuMDE1NjI1cTAgLTAuNzgxMjUgLTAuNTQ2ODc1IC0xLjQyMTg3NXEtMC43NjU2MjUgLTAuODc1IC0yLjAgLTAuODc1cS0xLjA3ODEyNSAwIC0xLjgxMjUgMC43MDMxMjVxLTAuNzE4NzUgMC42ODc1IC0wLjcxODc1IDEuNTkzNzVxMCAwLjc1IDAuNzM0Mzc1IDEuNDA2MjVxMC43MzQzNzUgMC42NTYyNSAxLjc5Njg3NSAwLjY1NjI1cTEuMDc4MTI1IDAgMS44MTI1IC0wLjY1NjI1cTAuNzM0Mzc1IC0wLjY1NjI1IDAuNzM0Mzc1IC0xLjQwNjI1em04Ljc3MzQzNzUgLTEuODEyNXEtMC4zOTA2MjUgLTAuMjUgLTAuODI4MTI1IC0wLjM1OTM3NXEtMC40MjE4NzUgLTAuMTI1IC0wLjg5MDYyNSAtMC4xMjVxLTAuOTIxODc1IDAgLTEuNDY4NzUgMC4yOTY4NzVxLTAuMjUgMC4xNDA2MjUgLTAuMjUgMC4yOTY4NzVxMCAwLjE3MTg3NSAwLjMyODEyNSAwLjM0Mzc1cTAuMjUgMC4xMjUgMS4xMjUgMC4yNXExLjU5Mzc1IDAuMjE4NzUgMi4yMTg3NSAwLjQzNzVxMC44MTI1IDAuMjgxMjUgMS4yNSAwLjg1OTM3NXEwLjQ1MzEyNSAwLjU2MjUgMC40NTMxMjUgMS4yMDMxMjVxMCAwLjg1OTM3NSAtMC43NSAxLjQzNzVxLTEuMDkzNzUgMC44NDM3NSAtMi44MjgxMjUgMC44NDM3NXEtMC42ODc1IDAgLTEuMjgxMjUgLTAuMTI1cS0wLjU5Mzc1IC0wLjEyNSAtMS4wNzgxMjUgLTAuMzU5Mzc1cS0wLjEyNSAwLjA5Mzc1IC0wLjI2NTYyNSAwLjE1NjI1cS0wLjEyNSAwLjA0Njg3NSAtMC4yNjU2MjUgMC4wNDY4NzVxLTAuMzc1IDAgLTAuNTkzNzUgLTAuMjM0Mzc1cS0wLjIxODc1IC0wLjI1IC0wLjIxODc1IC0wLjgyODEyNWwwIC0wLjU0Njg3NXEwIC0wLjU3ODEyNSAwLjIxODc1IC0wLjgxMjVxMC4yMTg3NSAtMC4yNSAwLjU3ODEyNSAtMC4yNXEwLjI5Njg3NSAwIDAuNDg0Mzc1IDAuMTU2MjVxMC4yMDMxMjUgMC4xNTYyNSAwLjMxMjUgMC41NDY4NzVxMC4zNTkzNzUgMC4zMTI1IDAuODc1IDAuNDg0Mzc1cTAuNTE1NjI1IDAuMTU2MjUgMS4xODc1IDAuMTU2MjVxMS4xMDkzNzUgMCAxLjcxODc1IC0wLjM0Mzc1cTAuMjgxMjUgLTAuMTcxODc1IDAuMjgxMjUgLTAuMzU5Mzc1cTAgLTAuMzEyNSAtMC40MDYyNSAtMC41MTU2MjVxLTAuNDIxODc1IC0wLjIwMzEyNSAtMS43MTg3NSAtMC4zNDM3NXEtMS45MjE4NzUgLTAuMjAzMTI1IC0yLjU3ODEyNSAtMC43ODEyNXEtMC42NDA2MjUgLTAuNTc4MTI1IC0wLjY0MDYyNSAtMS40MDYyNXEwIC0wLjg1OTM3NSAwLjcxODc1IC0xLjQzNzVxMC45ODQzNzUgLTAuNzgxMjUgMi41NzgxMjUgLTAuNzgxMjVxMC41NjI1IDAgMS4wNjI1IDAuMTA5Mzc1cTAuNTE1NjI1IDAuMTA5Mzc1IDAuOTg0Mzc1IDAuMzI4MTI1cTAuMTU2MjUgLTAuMTA5Mzc1IDAuMjgxMjUgLTAuMTU2MjVxMC4xMjUgLTAuMDYyNSAwLjIzNDM3NSAtMC4wNjI1cTAuMzI4MTI1IDAgMC41NDY4NzUgMC4yNXEwLjIxODc1IDAuMjM0Mzc1IDAuMjE4NzUgMC44MTI1bDAgMC4zOTA2MjVxMCAwLjUzMTI1IC0wLjEyNSAwLjcxODc1cS0wLjI1IDAuMzU5Mzc1IC0wLjY3MTg3NSAwLjM1OTM3NXEtMC4yOTY4NzUgMCAtMC41MTU2MjUgLTAuMTcxODc1cS0wLjIxODc1IC0wLjE4NzUgLTAuMjgxMjUgLTAuNDg0Mzc1em04LjQ0NTMxMjUgLTQuOTIxODc1bDAgMS43MDMxMjVsLTEuOTA2MjUgMGwwIC0xLjcwMzEyNWwxLjkwNjI1IDB6bTAuMjE4NzUgMy4wNDY4NzVsMCA1LjQ4NDM3NWwxLjkyMTg3NSAwcTAuNTc4MTI1IDAgMC44MjgxMjUgMC4yMzQzNzVxMC4yNSAwLjIxODc1IDAuMjUgMC41NzgxMjVxMCAwLjM0Mzc1IC0wLjI1IDAuNTc4MTI1cS0wLjI1IDAuMjE4NzUgLTAuODI4MTI1IDAuMjE4NzVsLTUuNDM3NSAwcS0wLjU3ODEyNSAwIC0wLjgyODEyNSAtMC4yMTg3NXEtMC4yNSAtMC4yMzQzNzUgLTAuMjUgLTAuNTkzNzVxMCAtMC4zNDM3NSAwLjI1IC0wLjU2MjVxMC4yNSAtMC4yMzQzNzUgMC44MjgxMjUgLTAuMjM0Mzc1bDEuOTIxODc1IDBsMCAtMy44OTA2MjVsLTEuMjk2ODc1IDBxLTAuNTYyNSAwIC0wLjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjE4NzUgLTAuMjUgLTAuNTc4MTI1cTAgLTAuMzU5Mzc1IDAuMjM0Mzc1IC0wLjU3ODEyNXEwLjI1IC0wLjIxODc1IDAuODI4MTI1IC0wLjIxODc1bDIuODkwNjI1IDB6bTEwLjAwNzgwNSAzLjQwNjI1bDIuNDM3NSAyLjA3ODEyNXEwLjQzNzUgMC4wMzEyNSAwLjY1NjI1IDAuMjVxMC4yMTg3NSAwLjIxODc1IDAuMjE4NzUgMC41NjI1cTAgMC4zNDM3NSAtMC4yNSAwLjU3ODEyNXEtMC4yNSAwLjIxODc1IC0wLjgyODEyNSAwLjIxODc1bC0xLjgxMjUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjM0Mzc1IC0wLjI1IC0wLjU5Mzc1cTAgLTAuMjgxMjUgMC4xNzE4NzUgLTAuNXEwLjE4NzUgLTAuMjE4NzUgMC40ODQzNzUgLTAuMjk2ODc1bC0xLjE4NzUgLTEuMDMxMjVsLTEuMjE4NzQyNCAxLjAzMTI1cTAuMzU5MzY3MzcgMC4wOTM3NSAwLjUxNTYxNzQgMC4yOTY4NzVxMC4xNzE4NzUgMC4xODc1IDAuMTcxODc1IDAuNXEwIDAuMzU5Mzc1IC0wLjI1IDAuNTkzNzVxLTAuMjM0MzY3MzcgMC4yMTg3NSAtMC44MTI0OTI0IDAuMjE4NzVsLTEuODEyNSAwcS0wLjU3ODEyNSAwIC0wLjgyODEyNSAtMC4yMTg3NXEtMC4yMzQzNzUgLTAuMjM0Mzc1IC0wLjIzNDM3NSAtMC41OTM3NXEwIC0wLjMyODEyNSAwLjIxODc1IC0wLjU0Njg3NXEwLjIxODc1IC0wLjIxODc1IDAuNjU2MjUgLTAuMjVsMi4zNzUgLTIuMDkzNzVsLTIuMTA5Mzc1IC0xLjc5Njg3NXEtMC40MDYyNSAtMC4wMzEyNSAtMC42MjUgLTAuMjVxLTAuMjE4NzUgLTAuMjE4NzUgLTAuMjE4NzUgLTAuNTQ2ODc1cTAgLTAuMzU5Mzc1IDAuMjUgLTAuNTc4MTI1cTAuMjUgLTAuMjE4NzUgMC44MjgxMjUgLTAuMjE4NzVsMS41IDBxMC41NzgxMjUgMCAwLjgxMjQ5MjQgMC4yMTg3NXEwLjI1IDAuMjE4NzUgMC4yNSAwLjU2MjVxMCAwLjQ2ODc1IC0wLjQzNzQ5MjM3IDAuNzVsMC45Njg3NDI0IDAuODEyNWwwLjk1MzEyNSAtMC44MjgxMjVxLTAuNDIxODc1IC0wLjI5Njg3NSAtMC40MjE4NzUgLTAuNzAzMTI1cTAgLTAuMzc1IDAuMjM0Mzc1IC0wLjU5Mzc1cTAuMjUgLTAuMjE4NzUgMC44MjgxMjUgLTAuMjE4NzVsMS40ODQzNzUgMHEwLjU3ODEyNSAwIDAuODI4MTI1IDAuMjE4NzVxMC4yNSAwLjIxODc1IDAuMjUgMC41NzgxMjVxMCAwLjMyODEyNSAtMC4yMTg3NSAwLjU0Njg3NXEtMC4yMTg3NSAwLjIxODc1IC0wLjY0MDYyNSAwLjI1bC0yLjEwOTM3NSAxLjgxMjV6bTcuNDc2NTYyNSAwLjQzNzVsMCAxLjY0MDYyNWwxLjYyNSAwcTAuNTc4MTI1IDAgMC44MTI1IDAuMjM0Mzc1cTAuMjUgMC4yMTg3NSAwLjI1IDAuNTc4MTI1cTAgMC4zNDM3NSAtMC4yNSAwLjU3ODEyNXEtMC4yMzQzNzUgMC4yMTg3NSAtMC44MTI1IDAuMjE4NzVsLTMuNDY4NzUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjM0Mzc1IC0wLjI1IC0wLjU5Mzc1cTAgLTAuMzQzNzUgMC4yNSAtMC41NjI1cTAuMjUgLTAuMjM0Mzc1IDAuODI4MTI1IC0wLjIzNDM3NWwwLjI1IDBsMCAtNi4yNjU2MjVsLTAuMjUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjE4NzUgLTAuMjUgLTAuNTc4MTI1cTAgLTAuMzU5Mzc1IDAuMjUgLTAuNTc4MTI1cTAuMjUgLTAuMjM0Mzc1IDAuODI4MTI1IC0wLjIzNDM3NWwzLjY4NzUgMC4wMTU2MjVxMS42MjUgMCAyLjU2MjUgMC44OTA2MjVxMC45NTMxMjUgMC44NzUgMC45NTMxMjUgMi4xNTYyNXEwIDAuNzAzMTI1IC0wLjMxMjUgMS4zMjgxMjVxLTAuMjUgMC40Njg3NSAtMC44MTI1IDAuOTIxODc1cS0wLjU2MjUgMC40NTMxMjUgLTEuMTU2MjUgMC42ODc1cS0wLjU5Mzc1IDAuMjM0Mzc1IC0xLjU2MjUgMC4yMzQzNzVsLTEuNTE1NjI1IDB6bTAgLTEuNjA5Mzc1bDEuNDg0Mzc1IDBxMS4wNDY4NzUgMCAxLjY1NjI1IC0wLjQ2ODc1cTAuNjI1IC0wLjQ2ODc1IDAuNjI1IC0xLjE0MDYyNXEwIC0wLjU2MjUgLTAuNSAtMC45ODQzNzVxLTAuNSAtMC40MjE4NzUgLTEuNDIxODc1IC0wLjQyMTg3NWwtMS44NDM3NSAwbDAgMy4wMTU2MjV6bTExLjk3NjU2MjUgNC44NTkzNzVsMCAtMC4zNzVxLTAuNjA5Mzc1IDAuMzEyNSAtMS4zNDM3NSAwLjQ2ODc1cS0wLjcxODc1IDAuMTcxODc1IC0xLjMxMjUgMC4xNzE4NzVxLTEuMjgxMjUgMCAtMi4wOTM3NSAtMC42ODc1cS0wLjc5Njg3NSAtMC42ODc1IC0wLjc5Njg3NSAtMS41MTU2MjVxMCAtMS4wIDEuMDE1NjI1IC0xLjg1OTM3NXExLjAzMTI1IC0wLjg3NSAyLjg0Mzc1IC0wLjg3NXEwLjczNDM3NSAwIDEuNjg3NSAwLjE1NjI1bDAgLTAuMzc1cTAgLTAuMzU5Mzc1IC0wLjMxMjUgLTAuNTc4MTI1cS0wLjMxMjUgLTAuMjM0Mzc1IC0xLjE3MTg3NSAtMC4yMzQzNzVxLTAuNzE4NzUgMCAtMS44NDM3NSAwLjI4MTI1cS0wLjQyMTg3NSAwLjA5Mzc1IC0wLjY1NjI1IDAuMDkzNzVxLTAuMzI4MTI1IDAgLTAuNTQ2ODc1IC0wLjIxODc1cS0wLjIxODc1IC0wLjIzNDM3NSAtMC4yMTg3NSAtMC41OTM3NXEwIC0wLjIwMzEyNSAwLjA3ODEyNSAtMC4zNDM3NXEwLjA3ODEyNSAtMC4xNTYyNSAwLjIxODc1IC0wLjI1cTAuMTQwNjI1IC0wLjA5Mzc1IDAuNTc4MTI1IC0wLjIxODc1cTAuNTkzNzUgLTAuMTU2MjUgMS4yMDMxMjUgLTAuMjVxMC42MjUgLTAuMTA5Mzc1IDEuMTI1IC0wLjEwOTM3NXExLjUgMCAyLjMxMjUgMC42NTYyNXEwLjgyODEyNSAwLjY0MDYyNSAwLjgyODEyNSAxLjc1bDAgMy4yOTY4NzVsMC4yODEyNSAwcTAuNTc4MTI1IDAgMC44MTI1IDAuMjM0Mzc1cTAuMjUgMC4yMTg3NSAwLjI1IDAuNTc4MTI1cTAgMC4zNDM3NSAtMC4yNSAwLjU3ODEyNXEtMC4yMzQzNzUgMC4yMTg3NSAtMC44MTI1IDAuMjE4NzVsLTEuODc1IDB6bTAgLTIuODc1cS0wLjk2ODc1IC0wLjE4NzUgLTEuNzgxMjUgLTAuMTg3NXEtMC45Njg3NSAwIC0xLjY3MTg3NSAwLjQ4NDM3NXEtMC40Mzc1IDAuMjk2ODc1IC0wLjQzNzUgMC42MDkzNzVxMCAwLjIzNDM3NSAwLjIwMzEyNSAwLjM3NXEwLjM5MDYyNSAwLjI1IDEuMDc4MTI1IDAuMjVxMC41NzgxMjUgMCAxLjI5Njg3NSAtMC4yMTg3NXEwLjczNDM3NSAtMC4yMzQzNzUgMS4zMTI1IC0wLjYyNWwwIC0wLjY4NzV6bTcuNzU3ODEyNSAtMi42MjVsMCAzLjIxODc1cTAgMC41MTU2MjUgMC4yMTg3NSAwLjY3MTg3NXEwLjMyODEyNSAwLjI2NTYyNSAxLjE3MTg3NSAwLjI2NTYyNXExLjIxODc1IDAgMi4yNjU2MjUgLTAuNTMxMjVxMC4zOTA2MjUgLTAuMjAzMTI1IDAuNjI1IC0wLjIwMzEyNXEwLjMxMjUgMCAwLjUzMTI1IDAuMjM0Mzc1cTAuMjM0Mzc1IDAuMjM0Mzc1IDAuMjM0Mzc1IDAuNTc4MTI1cTAgMC4zMTI1IC0wLjI1IDAuNTMxMjVxLTAuMzc1IDAuMzc1IC0xLjUxNTYyNSAwLjY4NzVxLTEuMTI1IDAuMzEyNSAtMS44OTA2MjUgMC4zMTI1cS0xLjUgMCAtMi4yNSAtMC42NDA2MjVxLTAuNzM0Mzc1IC0wLjY1NjI1IC0wLjczNDM3NSAtMS41OTM3NWwwIC0zLjUzMTI1bC0wLjU3ODEyNSAwcS0wLjU3ODEyNSAwIC0wLjgyODEyNSAtMC4yMTg3NXEtMC4yNSAtMC4yMTg3NSAtMC4yNSAtMC41NzgxMjVxMCAtMC4zNTkzNzUgMC4yNSAtMC41NzgxMjVxMC4yNSAtMC4yMTg3NSAwLjgyODEyNSAtMC4yMTg3NWwwLjU3ODEyNSAwbDAgLTEuNDUzMTI1cTAgLTAuNTc4MTI1IDAuMjE4NzUgLTAuODEyNXEwLjIxODc1IC0wLjI1IDAuNTc4MTI1IC0wLjI1cTAuMzU5Mzc1IDAgMC41NzgxMjUgMC4yNXEwLjIxODc1IDAuMjM0Mzc1IDAuMjE4NzUgMC44MTI1bDAgMS40NTMxMjVsMi45Njg3NSAwcTAuNTc4MTI1IDAgMC44MTI1IDAuMjE4NzVxMC4yNSAwLjIxODc1IDAuMjUgMC41NzgxMjVxMCAwLjM1OTM3NSAtMC4yNSAwLjU3ODEyNXEtMC4yMzQzNzUgMC4yMTg3NSAtMC44MTI1IDAuMjE4NzVsLTIuOTY4NzUgMHptOC4zNTE1NjI1IC00LjY0MDYyNWwwIDMuNDIxODc1cTAuNSAtMC4yOTY4NzUgMS4wIC0wLjQzNzVxMC41MTU2MjUgLTAuMTU2MjUgMS4wNDY4NzUgLTAuMTU2MjVxMC44MjgxMjUgMCAxLjQ2ODc1IDAuMjgxMjVxMC42NTYyNSAwLjI4MTI1IDEuMDc4MTI1IDAuODkwNjI1cTAuNDIxODc1IDAuNjA5Mzc1IDAuNDIxODc1IDEuNTMxMjVsMCAzLjBxMC42MDkzNzUgMCAwLjc5Njg3NSAwLjEyNXEwLjM3NSAwLjIzNDM3NSAwLjM3NSAwLjY4NzVxMCAwLjM0Mzc1IC0wLjI1IDAuNTc4MTI1cS0wLjIzNDM3NSAwLjIxODc1IC0wLjgxMjUgMC4yMTg3NWwtMS44MjgxMjUgMHEtMC41NjI1IDAgLTAuODEyNSAtMC4yMTg3NXEtMC4yNSAtMC4yMzQzNzUgLTAuMjUgLTAuNTkzNzVxMCAtMC40Mzc1IDAuMzc1IC0wLjY3MTg3NXEwLjIwMzEyNSAtMC4xMjUgMC43OTY4NzUgLTAuMTI1bDAgLTIuODkwNjI1cTAgLTAuNjI1IC0wLjI4MTI1IC0wLjg3NXEtMC4zNTkzNzUgLTAuMzI4MTI1IC0xLjA3ODEyNSAtMC4zMjgxMjVxLTAuNTMxMjUgMCAtMC45NTMxMjUgMC4yMDMxMjVxLTAuNDA2MjUgMC4yMDMxMjUgLTEuMDkzNzUgMC44OTA2MjVsMCAzLjBxMC42MDkzNzUgMCAwLjc5Njg3NSAwLjEyNXEwLjM3NSAwLjIzNDM3NSAwLjM3NSAwLjY4NzVxMCAwLjM0Mzc1IC0wLjI1IDAuNTc4MTI1cS0wLjIzNDM3NSAwLjIxODc1IC0wLjgxMjUgMC4yMTg3NWwtMS44MjgxMjUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjM0Mzc1IC0wLjIzNDM3NSAtMC4yMzQzNzUgLTAuNTkzNzVxMCAtMC40Mzc1IDAuMzc1IC0wLjY3MTg3NXEwLjE4NzUgLTAuMTI1IDAuNzk2ODc1IC0wLjEyNWwwIC02LjkyMTg3NWwtMC4yNjU2MjUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjM0Mzc1IC0wLjI1IC0wLjU5Mzc1cTAgLTAuMzQzNzUgMC4yNSAtMC41NjI1cTAuMjUgLTAuMjM0Mzc1IDAuODI4MTI1IC0wLjIzNDM3NWwxLjg3NSAweiIgZmlsbC1ydWxlPSJub256ZXJvIj48L3BhdGg+PHBhdGggZmlsbD0iI2ZmZmZmZiIgZD0ibTMzNi4wIDE0My40NjQ1N2wxODcuNDMzMDQgMGwwIDgwLjUzNTQzbC0xODcuNDMzMDQgMHoiIGZpbGwtcnVsZT0ibm9uemVybyI+PC9wYXRoPjxwYXRoIHN0cm9rZT0iIzAwMDAwMCIgc3Ryb2tlLXdpZHRoPSIxLjAiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1saW5lY2FwPSJidXR0IiBkPSJtMzM2LjAgMTQzLjQ2NDU3bDE4Ny40MzMwNCAwbDAgODAuNTM1NDNsLTE4Ny40MzMwNCAweiIgZmlsbC1ydWxlPSJub256ZXJvIj48L3BhdGg+PHBhdGggZmlsbD0iIzAwMDAwMCIgZD0ibTM2MS41Nzk4IDE4Ni4zNDIyOWwwIDEuNjQwNjI1bDEuNjI1IDBxMC41NzgxMjUgMCAwLjgxMjUgMC4yMzQzNzVxMC4yNSAwLjIxODc1IDAuMjUgMC41NzgxMjVxMCAwLjM0Mzc1IC0wLjI1IDAuNTc4MTI1cS0wLjIzNDM3NSAwLjIxODc1IC0wLjgxMjUgMC4yMTg3NWwtMy40Njg3NSAwcS0wLjU3ODEyNSAwIC0wLjgyODEyNSAtMC4yMTg3NXEtMC4yNSAtMC4yMzQzNzUgLTAuMjUgLTAuNTkzNzVxMCAtMC4zNDM3NSAwLjI1IC0wLjU2MjVxMC4yNSAtMC4yMzQzNzUgMC44MjgxMjUgLTAuMjM0Mzc1bDAuMjUgMGwwIC02LjI2NTYyNWwtMC4yNSAwcS0wLjU3ODEyNSAwIC0wLjgyODEyNSAtMC4yMTg3NXEtMC4yNSAtMC4yMTg3NSAtMC4yNSAtMC41NzgxMjVxMCAtMC4zNTkzNzUgMC4yNSAtMC41NzgxMjVxMC4yNSAtMC4yMzQzNzUgMC44MjgxMjUgLTAuMjM0Mzc1bDMuNjg3NSAwLjAxNTYyNXExLjYyNSAwIDIuNTYyNSAwLjg5MDYyNXEwLjk1MzEyNSAwLjg3NSAwLjk1MzEyNSAyLjE1NjI1cTAgMC43MDMxMjUgLTAuMzEyNSAxLjMyODEyNXEtMC4yNSAwLjQ2ODc1IC0wLjgxMjUgMC45MjE4NzVxLTAuNTYyNSAwLjQ1MzEyNSAtMS4xNTYyNSAwLjY4NzVxLTAuNTkzNzUgMC4yMzQzNzUgLTEuNTYyNSAwLjIzNDM3NWwtMS41MTU2MjUgMHptMCAtMS42MDkzNzVsMS40ODQzNzUgMHExLjA0Njg3NSAwIDEuNjU2MjUgLTAuNDY4NzVxMC42MjUgLTAuNDY4NzUgMC42MjUgLTEuMTQwNjI1cTAgLTAuNTYyNSAtMC41IC0wLjk4NDM3NXEtMC41IC0wLjQyMTg3NSAtMS40MjE4NzUgLTAuNDIxODc1bC0xLjg0Mzc1IDBsMCAzLjAxNTYyNXptMTMuOTI5Njg3NSAtMi4yMzQzNzVsMCA1LjQ4NDM3NXEwLjUxNTYyNSAwIDAuNzUgMC4yMzQzNzVxMC4yNSAwLjIxODc1IDAuMjUgMC41NzgxMjVxMCAwLjM0Mzc1IC0wLjI1IDAuNTc4MTI1cS0wLjI1IDAuMjE4NzUgLTAuODI4MTI1IDAuMjE4NzVsLTEuNTE1NjI1IDBsMCAtMC4zNzVxLTAuNjg3NSAwLjMxMjUgLTEuMzEyNSAwLjQ2ODc1cS0wLjYyNSAwLjE3MTg3NSAtMS4xODc1IDAuMTcxODc1cS0wLjc5Njg3NSAwIC0xLjM3NSAtMC4zMjgxMjVxLTAuNTc4MTI1IC0wLjM0Mzc1IC0wLjkwNjI1IC0wLjkzNzVxLTAuMjUgLTAuNDIxODc1IC0wLjI1IC0xLjA0Njg3NWwwIC0zLjQ1MzEyNWwtMC4yNjU2MjUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjE4NzUgLTAuMjUgLTAuNTc4MTI1cTAgLTAuMzU5Mzc1IDAuMjUgLTAuNTc4MTI1cTAuMjUgLTAuMjE4NzUgMC44MjgxMjUgLTAuMjE4NzVsMS44NzUgMGwwIDQuNzY1NjI1cTAgMC41IDAuMjM0Mzc1IDAuNzVxMC4yNSAwLjIzNDM3NSAwLjc2NTYyNSAwLjIzNDM3NXEwLjQ4NDM3NSAwIDEuMDMxMjUgLTAuMTg3NXEwLjU2MjUgLTAuMjAzMTI1IDEuMzkwNjI1IC0wLjcwMzEyNWwwIC0zLjI2NTYyNWwtMC41NzgxMjUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjE4NzUgLTAuMjUgLTAuNTc4MTI1cTAgLTAuMzU5Mzc1IDAuMjUgLTAuNTc4MTI1cTAuMjUgLTAuMjE4NzUgMC44MjgxMjUgLTAuMjE4NzVsMi4xNzE4NzUgMHptNS44NjcxODc1IDBsMCAxLjBxMS4wMTU2MjUgLTAuNzM0Mzc1IDEuNTkzNzUgLTAuOTY4NzVxMC41NzgxMjUgLTAuMjUgMS4wOTM3NSAtMC4yNXEwLjc4MTI1IDAgMS41MTU2MjUgMC41NzgxMjVxMC41IDAuMzkwNjI1IDAuNSAwLjc5Njg3NXEwIDAuMzQzNzUgLTAuMjUgMC41OTM3NXEtMC4yMzQzNzUgMC4yMzQzNzUgLTAuNTYyNSAwLjIzNDM3NXEtMC4yOTY4NzUgMCAtMC42MjUgLTAuMjk2ODc1cS0wLjMyODEyNSAtMC4yOTY4NzUgLTAuNTkzNzUgLTAuMjk2ODc1cS0wLjMyODEyNSAwIC0xLjAgMC40MjE4NzVxLTAuNjcxODc1IDAuNDIxODc1IC0xLjY3MTg3NSAxLjI2NTYyNWwwIDIuNDA2MjVsMi4yODEyNSAwcTAuNTc4MTI1IDAgMC44MjgxMjUgMC4yMzQzNzVxMC4yNSAwLjIxODc1IDAuMjUgMC41NzgxMjVxMCAwLjM0Mzc1IC0wLjI1IDAuNTc4MTI1cS0wLjI1IDAuMjE4NzUgLTAuODI4MTI1IDAuMjE4NzVsLTQuODI4MTI1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjI1IC0wLjIzNDM3NSAtMC4yNSAtMC41OTM3NXEwIC0wLjM0Mzc1IDAuMjUgLTAuNTYyNXEwLjI1IC0wLjIzNDM3NSAwLjgyODEyNSAtMC4yMzQzNzVsMC45NTMxMjUgMGwwIC0zLjg5MDYyNWwtMC41NzgxMjUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjE4NzUgLTAuMjUgLTAuNTc4MTI1cTAgLTAuMzU5Mzc1IDAuMjUgLTAuNTc4MTI1cTAuMjUgLTAuMjE4NzUgMC44MjgxMjUgLTAuMjE4NzVsMi4xNzE4NzUgMHptMTMuOTYwOTM3NSA0LjM1OTM3NWwtNi41NzgxMjUgMHEwLjI1IDAuNjI1IDAuODkwNjI1IDEuMDE1NjI1cTAuNjQwNjI1IDAuMzc1IDEuNzE4NzUgMC4zNzVxMC44OTA2MjUgMCAyLjM3NSAtMC4zOTA2MjVxMC42MDkzNzUgLTAuMTU2MjUgMC44NDM3NSAtMC4xNTYyNXEwLjMxMjUgMCAwLjUzMTI1IDAuMjM0Mzc1cTAuMjE4NzUgMC4yMTg3NSAwLjIxODc1IDAuNTYyNXEwIDAuMzEyNSAtMC4yMzQzNzUgMC41MzEyNXEtMC4zMTI1IDAuMjk2ODc1IC0xLjUzMTI1IDAuNTYyNXEtMS4yMDMxMjUgMC4yNjU2MjUgLTIuMzEyNSAwLjI2NTYyNXEtMS45MjE4NzUgMCAtMy4wNzgxMjUgLTEuMDkzNzVxLTEuMTU2MjUgLTEuMDkzNzUgLTEuMTU2MjUgLTIuNjcxODc1cTAgLTEuNjg3NSAxLjI1IC0yLjc1cTEuMjUgLTEuMDYyNSAyLjg3NSAtMS4wNjI1cTAuOTY4NzUgMCAxLjc4MTI1IDAuMzQzNzVxMC44MjgxMjUgMC4zNDM3NSAxLjIxODc1IDAuNzVxMC41NjI1IDAuNTc4MTI1IDAuOTM3NSAxLjQyMTg3NXEwLjI1IDAuNTkzNzUgMC4yNSAxLjM3NWwwIDAuNjg3NXptLTEuNzgxMjUgLTEuNjA5Mzc1cS0wLjM1OTM3NSAtMC42ODc1IC0wLjk1MzEyNSAtMS4wMTU2MjVxLTAuNTkzNzUgLTAuMzQzNzUgLTEuNDIxODc1IC0wLjM0Mzc1cS0wLjgxMjUgMCAtMS40MDYyNSAwLjM0Mzc1cS0wLjU5Mzc1IDAuMzI4MTI1IC0wLjk2ODc1IDEuMDE1NjI1bDQuNzUgMHptNy4zNjcxODc1IC0wLjIwMzEyNWwtMS40ODQzNzUgNC41NDY4NzVsLTEuNzk2ODc1IDBsLTAuOTUzMTI1IC03Ljg3NXEtMC4zNzUgLTAuMDQ2ODc1IC0wLjU2MjUgLTAuMjVxLTAuMTg3NSAtMC4yMDMxMjUgLTAuMTg3NSAtMC41MzEyNXEwIC0wLjM3NSAwLjI1IC0wLjU5Mzc1cTAuMjUgLTAuMjM0Mzc1IDAuODI4MTI1IC0wLjIzNDM3NWwyLjEyNSAwLjAxNTYyNXEwLjU3ODEyNSAwIDAuODI4MTI1IDAuMjE4NzVxMC4yNSAwLjIxODc1IDAuMjUgMC41NzgxMjVxMCAwLjM1OTM3NSAtMC4yNSAwLjU3ODEyNXEtMC4yNSAwLjIxODc1IC0wLjgyODEyNSAwLjIxODc1bC0wLjgyODEyNSAwbDAuNTMxMjUgNC40ODQzNzVsMS4yNSAtMy43MzQzNzVsMS42NzE4NzUgMGwxLjI1IDMuNzM0Mzc1bDAuNTMxMjUgLTQuNDg0Mzc1bC0wLjg0Mzc1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjIzNDM3NSAtMC4yMTg3NSAtMC4yMzQzNzUgLTAuNTc4MTI1cTAgLTAuMzU5Mzc1IDAuMjM0Mzc1IC0wLjU3ODEyNXEwLjI1IC0wLjIzNDM3NSAwLjgyODEyNSAtMC4yMzQzNzVsMi4xMjUgMC4wMTU2MjVxMC41NzgxMjUgMCAwLjgyODEyNSAwLjIxODc1cTAuMjUgMC4yMTg3NSAwLjI1IDAuNTc4MTI1cTAgMC4yOTY4NzUgLTAuMjAzMTI1IDAuNTE1NjI1cS0wLjE4NzUgMC4yMTg3NSAtMC41NjI1IDAuMjgxMjVsLTAuOTIxODc1IDcuODc1bC0xLjc2NTYyNSAwbC0xLjUzMTI1IC00LjU0Njg3NXptMTAuMTY0MDYyNSAtNS41OTM3NWwwIDEuNzAzMTI1bC0xLjkwNjI1IDBsMCAtMS43MDMxMjVsMS45MDYyNSAwem0wLjIxODc1IDMuMDQ2ODc1bDAgNS40ODQzNzVsMS45MjE4NzUgMHEwLjU3ODEyNSAwIDAuODI4MTI1IDAuMjM0Mzc1cTAuMjUgMC4yMTg3NSAwLjI1IDAuNTc4MTI1cTAgMC4zNDM3NSAtMC4yNSAwLjU3ODEyNXEtMC4yNSAwLjIxODc1IC0wLjgyODEyNSAwLjIxODc1bC01LjQzNzUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjM0Mzc1IC0wLjI1IC0wLjU5Mzc1cTAgLTAuMzQzNzUgMC4yNSAtMC41NjI1cTAuMjUgLTAuMjM0Mzc1IDAuODI4MTI1IC0wLjIzNDM3NWwxLjkyMTg3NSAwbDAgLTMuODkwNjI1bC0xLjI5Njg3NSAwcS0wLjU2MjUgMCAtMC44MTI1IC0wLjIxODc1cS0wLjI1IC0wLjIxODc1IC0wLjI1IC0wLjU3ODEyNXEwIC0wLjM1OTM3NSAwLjIzNDM3NSAtMC41NzgxMjVxMC4yNSAtMC4yMTg3NSAwLjgyODEyNSAtMC4yMTg3NWwyLjg5MDYyNSAwem03LjE5NTMxMjUgMGwwIDAuNTMxMjVxMC40Mzc1IC0wLjM3NSAwLjk1MzEyNSAtMC41NjI1cTAuNTMxMjUgLTAuMTg3NSAxLjE1NjI1IC0wLjE4NzVxMS40MjE4NzUgMCAyLjI1IDAuODkwNjI1cTAuNjU2MjUgMC43MDMxMjUgMC42NTYyNSAxLjg0Mzc1bDAgMi45Njg3NXEwLjUgMCAwLjczNDM3NSAwLjIzNDM3NXEwLjI1IDAuMjE4NzUgMC4yNSAwLjU3ODEyNXEwIDAuMzQzNzUgLTAuMjUgMC41NzgxMjVxLTAuMjM0Mzc1IDAuMjE4NzUgLTAuODEyNSAwLjIxODc1bC0xLjQ1MzEyNSAwcS0wLjU3ODEyNSAwIC0wLjgyODEyNSAtMC4yMTg3NXEtMC4yMzQzNzUgLTAuMjM0Mzc1IC0wLjIzNDM3NSAtMC41OTM3NXEwIC0wLjM0Mzc1IDAuMjM0Mzc1IC0wLjU2MjVxMC4yNSAtMC4yMzQzNzUgMC43NSAtMC4yMzQzNzVsMCAtMy4wMTU2MjVxMCAtMC41MzEyNSAtMC4yODEyNSAtMC43NjU2MjVxLTAuMzU5Mzc1IC0wLjMxMjUgLTEuMDkzNzUgLTAuMzEyNXEtMC41NjI1IDAgLTAuOTg0Mzc1IDAuMjE4NzVxLTAuNDA2MjUgMC4yMDMxMjUgLTEuMDQ2ODc1IDAuOTA2MjVsMCAyLjk2ODc1cTAuNjA5Mzc1IDAgMC43OTY4NzUgMC4xMjVxMC4zNzUgMC4yMzQzNzUgMC4zNzUgMC42ODc1cTAgMC4zNDM3NSAtMC4yNSAwLjU3ODEyNXEtMC4yMzQzNzUgMC4yMTg3NSAtMC44MTI1IDAuMjE4NzVsLTEuODI4MTI1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjIzNDM3NSAtMC4yMzQzNzUgLTAuMjM0Mzc1IC0wLjU5Mzc1cTAgLTAuNDM3NSAwLjM3NSAtMC42NzE4NzVxMC4xODc1IC0wLjEyNSAwLjc5Njg3NSAtMC4xMjVsMCAtMy44OTA2MjVxLTAuNSAwIC0wLjc1IC0wLjIxODc1cS0wLjIzNDM3NSAtMC4yMzQzNzUgLTAuMjM0Mzc1IC0wLjU3ODEyNXEwIC0wLjM1OTM3NSAwLjIzNDM3NSAtMC41NzgxMjVxMC4yNSAtMC4yMTg3NSAwLjgyODEyNSAtMC4yMTg3NWwxLjUzMTI1IDB6bTE0Ljg5ODQzNzUgLTMuMDQ2ODc1bDAgOC41MzEyNWwwLjI2NTYyNSAwcTAuNTc4MTI1IDAgMC44MjgxMjUgMC4yMzQzNzVxMC4yNSAwLjIxODc1IDAuMjUgMC41NzgxMjVxMCAwLjM0Mzc1IC0wLjI1IDAuNTc4MTI1cS0wLjI1IDAuMjE4NzUgLTAuODI4MTI1IDAuMjE4NzVsLTEuODc1IDBsMCAtMC4zOTA2MjVxLTAuNTQ2ODc1IDAuMzEyNSAtMS4xNDA2MjUgMC40ODQzNzVxLTAuNTkzNzUgMC4xNzE4NzUgLTEuMjM0Mzc1IDAuMTcxODc1cS0xLjgxMjUgMCAtMi45MjE4NzUgLTEuMDQ2ODc1cS0xLjA5Mzc1IC0xLjA0Njg3NSAtMS4wOTM3NSAtMi42MDkzNzVxMCAtMS42MjUgMS4xNTYyNSAtMi43NjU2MjVxMS4xNTYyNSAtMS4xNTYyNSAyLjgyODEyNSAtMS4xNTYyNXEwLjYyNSAwIDEuMjE4NzUgMC4yMDMxMjVxMC42MDkzNzUgMC4xODc1IDEuMTg3NSAwLjU2MjVsMCAtMS45ODQzNzVsLTAuMjY1NjI1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjI1IC0wLjIzNDM3NSAtMC4yNSAtMC41NzgxMjVxMCAtMC4zNTkzNzUgMC4yNSAtMC41NzgxMjVxMC4yNSAtMC4yMzQzNzUgMC44MjgxMjUgLTAuMjM0Mzc1bDEuODc1IDB6bS0xLjYwOTM3NSA2Ljc5Njg3NXEwIC0wLjk4NDM3NSAtMC43MDMxMjUgLTEuNjcxODc1cS0wLjY4NzUgLTAuNjg3NSAtMS42ODc1IC0wLjY4NzVxLTEuMCAwIC0xLjcwMzEyNSAwLjY4NzVxLTAuNjg3NSAwLjY4NzUgLTAuNjg3NSAxLjY1NjI1cTAgMC44NzUgMC42MjUgMS40NTMxMjVxMC42MjUgMC41NjI1IDEuNzY1NjI1IDAuNTYyNXExLjEyNSAwIDEuNzUgLTAuNTYyNXEwLjY0MDYyNSAtMC41NzgxMjUgMC42NDA2MjUgLTEuNDM3NXptMTEuNjk1MzEyNSAtMC4wNzgxMjVxMCAwLjkyMTg3NSAtMC41MTU2MjUgMS43OTY4NzVxLTAuNTE1NjI1IDAuODU5Mzc1IC0xLjUzMTI1IDEuMzc1cS0xLjAgMC41MTU2MjUgLTIuMTA5Mzc1IDAuNTE1NjI1cS0xLjA5Mzc1IDAgLTIuMDkzNzUgLTAuNXEtMS4wIC0wLjUxNTYyNSAtMS41MzEyNSAtMS4zNzVxLTAuNTE1NjI1IC0wLjg3NSAtMC41MTU2MjUgLTEuODI4MTI1cTAgLTAuOTUzMTI1IDAuNTMxMjUgLTEuODc1cTAuNTMxMjUgLTAuOTM3NSAxLjUzMTI1IC0xLjQ2ODc1cTEuMCAtMC41MzEyNSAyLjA3ODEyNSAtMC41MzEyNXExLjA5Mzc1IDAgMi4xMDkzNzUgMC41NDY4NzVxMS4wMTU2MjUgMC41NDY4NzUgMS41MzEyNSAxLjQ2ODc1cTAuNTE1NjI1IDAuOTA2MjUgMC41MTU2MjUgMS44NzV6bS0xLjYwOTM3NSAwLjAxNTYyNXEwIC0wLjc4MTI1IC0wLjU0Njg3NSAtMS40MjE4NzVxLTAuNzY1NjI1IC0wLjg3NSAtMi4wIC0wLjg3NXEtMS4wNzgxMjUgMCAtMS44MTI1IDAuNzAzMTI1cS0wLjcxODc1IDAuNjg3NSAtMC43MTg3NSAxLjU5Mzc1cTAgMC43NSAwLjczNDM3NSAxLjQwNjI1cTAuNzM0Mzc1IDAuNjU2MjUgMS43OTY4NzUgMC42NTYyNXExLjA3ODEyNSAwIDEuODEyNSAtMC42NTYyNXEwLjczNDM3NSAtMC42NTYyNSAwLjczNDM3NSAtMS40MDYyNXptNy4wNTQ2ODc1IDAuNDUzMTI1bC0xLjEwOTM3NSAyLjk1MzEyNWwtMS41IDBsLTEuMzQzNzUgLTUuNXEtMC40Mzc1IC0wLjAxNTYyNSAtMC42NzE4NzUgLTAuMjM0Mzc1cS0wLjIxODc1IC0wLjIzNDM3NSAtMC4yMTg3NSAtMC41NjI1cTAgLTAuMzU5Mzc1IDAuMjUgLTAuNTc4MTI1cTAuMjUgLTAuMjE4NzUgMC44MjgxMjUgLTAuMjE4NzVsMS40ODQzNzUgMHEwLjU3ODEyNSAwIDAuODI4MTI1IDAuMjE4NzVxMC4yNSAwLjIxODc1IDAuMjUgMC41NzgxMjVxMCAwLjM1OTM3NSAtMC4yODEyNSAwLjYwOTM3NXEtMC4yMTg3NSAwLjE4NzUgLTAuODI4MTI1IDAuMTg3NWwwLjYwOTM3NSAyLjU0Njg3NWwwLjk4NDM3NSAtMi42MDkzNzVsMS40MjE4NzUgMGwxLjAgMi42MDkzNzVsMC42MjUgLTIuNTQ2ODc1cS0wLjU5Mzc1IDAgLTAuNzgxMjUgLTAuMTA5Mzc1cS0wLjM3NSAtMC4yNSAtMC4zNzUgLTAuNjg3NXEwIC0wLjM1OTM3NSAwLjI1IC0wLjU3ODEyNXEwLjI1IC0wLjIxODc1IDAuODI4MTI1IC0wLjIxODc1bDEuNSAwcTAuNTc4MTI1IDAgMC44MjgxMjUgMC4yMTg3NXEwLjI1IDAuMjE4NzUgMC4yNSAwLjU3ODEyNXEwIDAuMzI4MTI1IC0wLjIxODc1IDAuNTQ2ODc1cS0wLjIxODc1IDAuMjE4NzUgLTAuNjQwNjI1IDAuMjVsLTEuMzEyNSA1LjVsLTEuNDg0Mzc1IDBsLTEuMTcxODc1IC0yLjk1MzEyNXptMTEuMzIwMzEyNSAtMi4yNjU2MjVxLTAuMzkwNjI1IC0wLjI1IC0wLjgyODEyNSAtMC4zNTkzNzVxLTAuNDIxODc1IC0wLjEyNSAtMC44OTA2MjUgLTAuMTI1cS0wLjkyMTg3NSAwIC0xLjQ2ODc1IDAuMjk2ODc1cS0wLjI1IDAuMTQwNjI1IC0wLjI1IDAuMjk2ODc1cTAgMC4xNzE4NzUgMC4zMjgxMjUgMC4zNDM3NXEwLjI1IDAuMTI1IDEuMTI1IDAuMjVxMS41OTM3NSAwLjIxODc1IDIuMjE4NzUgMC40Mzc1cTAuODEyNSAwLjI4MTI1IDEuMjUgMC44NTkzNzVxMC40NTMxMjUgMC41NjI1IDAuNDUzMTI1IDEuMjAzMTI1cTAgMC44NTkzNzUgLTAuNzUgMS40Mzc1cS0xLjA5Mzc1IDAuODQzNzUgLTIuODI4MTI1IDAuODQzNzVxLTAuNjg3NSAwIC0xLjI4MTI1IC0wLjEyNXEtMC41OTM3NSAtMC4xMjUgLTEuMDc4MTI1IC0wLjM1OTM3NXEtMC4xMjUgMC4wOTM3NSAtMC4yNjU2MjUgMC4xNTYyNXEtMC4xMjUgMC4wNDY4NzUgLTAuMjY1NjI1IDAuMDQ2ODc1cS0wLjM3NSAwIC0wLjU5Mzc1IC0wLjIzNDM3NXEtMC4yMTg3NSAtMC4yNSAtMC4yMTg3NSAtMC44MjgxMjVsMCAtMC41NDY4NzVxMCAtMC41NzgxMjUgMC4yMTg3NSAtMC44MTI1cTAuMjE4NzUgLTAuMjUgMC41NzgxMjUgLTAuMjVxMC4yOTY4NzUgMCAwLjQ4NDM3NSAwLjE1NjI1cTAuMjAzMTI1IDAuMTU2MjUgMC4zMTI1IDAuNTQ2ODc1cTAuMzU5Mzc1IDAuMzEyNSAwLjg3NSAwLjQ4NDM3NXEwLjUxNTYyNSAwLjE1NjI1IDEuMTg3NSAwLjE1NjI1cTEuMTA5Mzc1IDAgMS43MTg3NSAtMC4zNDM3NXEwLjI4MTI1IC0wLjE3MTg3NSAwLjI4MTI1IC0wLjM1OTM3NXEwIC0wLjMxMjUgLTAuNDA2MjUgLTAuNTE1NjI1cS0wLjQyMTg3NSAtMC4yMDMxMjUgLTEuNzE4NzUgLTAuMzQzNzVxLTEuOTIxODc1IC0wLjIwMzEyNSAtMi41NzgxMjUgLTAuNzgxMjVxLTAuNjQwNjI1IC0wLjU3ODEyNSAtMC42NDA2MjUgLTEuNDA2MjVxMCAtMC44NTkzNzUgMC43MTg3NSAtMS40Mzc1cTAuOTg0Mzc1IC0wLjc4MTI1IDIuNTc4MTI1IC0wLjc4MTI1cTAuNTYyNSAwIDEuMDYyNSAwLjEwOTM3NXEwLjUxNTYyNSAwLjEwOTM3NSAwLjk4NDM3NSAwLjMyODEyNXEwLjE1NjI1IC0wLjEwOTM3NSAwLjI4MTI1IC0wLjE1NjI1cTAuMTI1IC0wLjA2MjUgMC4yMzQzNzUgLTAuMDYyNXEwLjMyODEyNSAwIDAuNTQ2ODc1IDAuMjVxMC4yMTg3NSAwLjIzNDM3NSAwLjIxODc1IDAuODEyNWwwIDAuMzkwNjI1cTAgMC41MzEyNSAtMC4xMjUgMC43MTg3NXEtMC4yNSAwLjM1OTM3NSAtMC42NzE4NzUgMC4zNTkzNzVxLTAuMjk2ODc1IDAgLTAuNTE1NjI1IC0wLjE3MTg3NXEtMC4yMTg3NSAtMC4xODc1IC0wLjI4MTI1IC0wLjQ4NDM3NXptNi45NDUzMTI1IDEuOTY4NzVsMCAxLjY0MDYyNWwxLjYyNSAwcTAuNTc4MTI1IDAgMC44MTI1IDAuMjM0Mzc1cTAuMjUgMC4yMTg3NSAwLjI1IDAuNTc4MTI1cTAgMC4zNDM3NSAtMC4yNSAwLjU3ODEyNXEtMC4yMzQzNzUgMC4yMTg3NSAtMC44MTI1IDAuMjE4NzVsLTMuNDY4NzUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjM0Mzc1IC0wLjI1IC0wLjU5Mzc1cTAgLTAuMzQzNzUgMC4yNSAtMC41NjI1cTAuMjUgLTAuMjM0Mzc1IDAuODI4MTI1IC0wLjIzNDM3NWwwLjI1IDBsMCAtNi4yNjU2MjVsLTAuMjUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjE4NzUgLTAuMjUgLTAuNTc4MTI1cTAgLTAuMzU5Mzc1IDAuMjUgLTAuNTc4MTI1cTAuMjUgLTAuMjM0Mzc1IDAuODI4MTI1IC0wLjIzNDM3NWwzLjY4NzUgMC4wMTU2MjVxMS42MjUgMCAyLjU2MjUgMC44OTA2MjVxMC45NTMxMjUgMC44NzUgMC45NTMxMjUgMi4xNTYyNXEwIDAuNzAzMTI1IC0wLjMxMjUgMS4zMjgxMjVxLTAuMjUgMC40Njg3NSAtMC44MTI1IDAuOTIxODc1cS0wLjU2MjUgMC40NTMxMjUgLTEuMTU2MjUgMC42ODc1cS0wLjU5Mzc1IDAuMjM0Mzc1IC0xLjU2MjUgMC4yMzQzNzVsLTEuNTE1NjI1IDB6bTAgLTEuNjA5Mzc1bDEuNDg0Mzc1IDBxMS4wNDY4NzUgMCAxLjY1NjI1IC0wLjQ2ODc1cTAuNjI1IC0wLjQ2ODc1IDAuNjI1IC0xLjE0MDYyNXEwIC0wLjU2MjUgLTAuNSAtMC45ODQzNzVxLTAuNSAtMC40MjE4NzUgLTEuNDIxODc1IC0wLjQyMTg3NWwtMS44NDM3NSAwbDAgMy4wMTU2MjV6bTExLjk3NjU2MjUgNC44NTkzNzVsMCAtMC4zNzVxLTAuNjA5Mzc1IDAuMzEyNSAtMS4zNDM3NSAwLjQ2ODc1cS0wLjcxODc1IDAuMTcxODc1IC0xLjMxMjUgMC4xNzE4NzVxLTEuMjgxMjUgMCAtMi4wOTM3NSAtMC42ODc1cS0wLjc5Njg3NSAtMC42ODc1IC0wLjc5Njg3NSAtMS41MTU2MjVxMCAtMS4wIDEuMDE1NjI1IC0xLjg1OTM3NXExLjAzMTI1IC0wLjg3NSAyLjg0Mzc1IC0wLjg3NXEwLjczNDM3NSAwIDEuNjg3NSAwLjE1NjI1bDAgLTAuMzc1cTAgLTAuMzU5Mzc1IC0wLjMxMjUgLTAuNTc4MTI1cS0wLjMxMjUgLTAuMjM0Mzc1IC0xLjE3MTg3NSAtMC4yMzQzNzVxLTAuNzE4NzUgMCAtMS44NDM3NSAwLjI4MTI1cS0wLjQyMTg3NSAwLjA5Mzc1IC0wLjY1NjI1IDAuMDkzNzVxLTAuMzI4MTI1IDAgLTAuNTQ2ODc1IC0wLjIxODc1cS0wLjIxODc1IC0wLjIzNDM3NSAtMC4yMTg3NSAtMC41OTM3NXEwIC0wLjIwMzEyNSAwLjA3ODEyNSAtMC4zNDM3NXEwLjA3ODEyNSAtMC4xNTYyNSAwLjIxODc1IC0wLjI1cTAuMTQwNjI1IC0wLjA5Mzc1IDAuNTc4MTI1IC0wLjIxODc1cTAuNTkzNzUgLTAuMTU2MjUgMS4yMDMxMjUgLTAuMjVxMC42MjUgLTAuMTA5Mzc1IDEuMTI1IC0wLjEwOTM3NXExLjUgMCAyLjMxMjUgMC42NTYyNXEwLjgyODEyNSAwLjY0MDYyNSAwLjgyODEyNSAxLjc1bDAgMy4yOTY4NzVsMC4yODEyNSAwcTAuNTc4MTI1IDAgMC44MTI1IDAuMjM0Mzc1cTAuMjUgMC4yMTg3NSAwLjI1IDAuNTc4MTI1cTAgMC4zNDM3NSAtMC4yNSAwLjU3ODEyNXEtMC4yMzQzNzUgMC4yMTg3NSAtMC44MTI1IDAuMjE4NzVsLTEuODc1IDB6bTAgLTIuODc1cS0wLjk2ODc1IC0wLjE4NzUgLTEuNzgxMjUgLTAuMTg3NXEtMC45Njg3NSAwIC0xLjY3MTg3NSAwLjQ4NDM3NXEtMC40Mzc1IDAuMjk2ODc1IC0wLjQzNzUgMC42MDkzNzVxMCAwLjIzNDM3NSAwLjIwMzEyNSAwLjM3NXEwLjM5MDYyNSAwLjI1IDEuMDc4MTI1IDAuMjVxMC41NzgxMjUgMCAxLjI5Njg3NSAtMC4yMTg3NXEwLjczNDM3NSAtMC4yMzQzNzUgMS4zMTI1IC0wLjYyNWwwIC0wLjY4NzV6bTcuNzU3ODEyNSAtMi42MjVsMCAzLjIxODc1cTAgMC41MTU2MjUgMC4yMTg3NSAwLjY3MTg3NXEwLjMyODEyNSAwLjI2NTYyNSAxLjE3MTg3NSAwLjI2NTYyNXExLjIxODc1IDAgMi4yNjU2MjUgLTAuNTMxMjVxMC4zOTA2MjUgLTAuMjAzMTI1IDAuNjI1IC0wLjIwMzEyNXEwLjMxMjUgMCAwLjUzMTI1IDAuMjM0Mzc1cTAuMjM0Mzc1IDAuMjM0Mzc1IDAuMjM0Mzc1IDAuNTc4MTI1cTAgMC4zMTI1IC0wLjI1IDAuNTMxMjVxLTAuMzc1IDAuMzc1IC0xLjUxNTYyNSAwLjY4NzVxLTEuMTI1IDAuMzEyNSAtMS44OTA2MjUgMC4zMTI1cS0xLjUgMCAtMi4yNSAtMC42NDA2MjVxLTAuNzM0Mzc1IC0wLjY1NjI1IC0wLjczNDM3NSAtMS41OTM3NWwwIC0zLjUzMTI1bC0wLjU3ODEyNSAwcS0wLjU3ODEyNSAwIC0wLjgyODEyNSAtMC4yMTg3NXEtMC4yNSAtMC4yMTg3NSAtMC4yNSAtMC41NzgxMjVxMCAtMC4zNTkzNzUgMC4yNSAtMC41NzgxMjVxMC4yNSAtMC4yMTg3NSAwLjgyODEyNSAtMC4yMTg3NWwwLjU3ODEyNSAwbDAgLTEuNDUzMTI1cTAgLTAuNTc4MTI1IDAuMjE4NzUgLTAuODEyNXEwLjIxODc1IC0wLjI1IDAuNTc4MTI1IC0wLjI1cTAuMzU5Mzc1IDAgMC41NzgxMjUgMC4yNXEwLjIxODc1IDAuMjM0Mzc1IDAuMjE4NzUgMC44MTI1bDAgMS40NTMxMjVsMi45Njg3NSAwcTAuNTc4MTI1IDAgMC44MTI1IDAuMjE4NzVxMC4yNSAwLjIxODc1IDAuMjUgMC41NzgxMjVxMCAwLjM1OTM3NSAtMC4yNSAwLjU3ODEyNXEtMC4yMzQzNzUgMC4yMTg3NSAtMC44MTI1IDAuMjE4NzVsLTIuOTY4NzUgMHptOC4zNTE1NjI1IC00LjY0MDYyNWwwIDMuNDIxODc1cTAuNSAtMC4yOTY4NzUgMS4wIC0wLjQzNzVxMC41MTU2MjUgLTAuMTU2MjUgMS4wNDY4NzUgLTAuMTU2MjVxMC44MjgxMjUgMCAxLjQ2ODc1IDAuMjgxMjVxMC42NTYyNSAwLjI4MTI1IDEuMDc4MTI1IDAuODkwNjI1cTAuNDIxODc1IDAuNjA5Mzc1IDAuNDIxODc1IDEuNTMxMjVsMCAzLjBxMC42MDkzNzUgMCAwLjc5Njg3NSAwLjEyNXEwLjM3NSAwLjIzNDM3NSAwLjM3NSAwLjY4NzVxMCAwLjM0Mzc1IC0wLjI1IDAuNTc4MTI1cS0wLjIzNDM3NSAwLjIxODc1IC0wLjgxMjUgMC4yMTg3NWwtMS44MjgxMjUgMHEtMC41NjI1IDAgLTAuODEyNSAtMC4yMTg3NXEtMC4yNSAtMC4yMzQzNzUgLTAuMjUgLTAuNTkzNzVxMCAtMC40Mzc1IDAuMzc1IC0wLjY3MTg3NXEwLjIwMzEyNSAtMC4xMjUgMC43OTY4NzUgLTAuMTI1bDAgLTIuODkwNjI1cTAgLTAuNjI1IC0wLjI4MTI1IC0wLjg3NXEtMC4zNTkzNzUgLTAuMzI4MTI1IC0xLjA3ODEyNSAtMC4zMjgxMjVxLTAuNTMxMjUgMCAtMC45NTMxMjUgMC4yMDMxMjVxLTAuNDA2MjUgMC4yMDMxMjUgLTEuMDkzNzUgMC44OTA2MjVsMCAzLjBxMC42MDkzNzUgMCAwLjc5Njg3NSAwLjEyNXEwLjM3NSAwLjIzNDM3NSAwLjM3NSAwLjY4NzVxMCAwLjM0Mzc1IC0wLjI1IDAuNTc4MTI1cS0wLjIzNDM3NSAwLjIxODc1IC0wLjgxMjUgMC4yMTg3NWwtMS44MjgxMjUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjM0Mzc1IC0wLjIzNDM3NSAtMC4yMzQzNzUgLTAuNTkzNzVxMCAtMC40Mzc1IDAuMzc1IC0wLjY3MTg3NXEwLjE4NzUgLTAuMTI1IDAuNzk2ODc1IC0wLjEyNWwwIC02LjkyMTg3NWwtMC4yNjU2MjUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjM0Mzc1IC0wLjI1IC0wLjU5Mzc1cTAgLTAuMzQzNzUgMC4yNSAtMC41NjI1cTAuMjUgLTAuMjM0Mzc1IDAuODI4MTI1IC0wLjIzNDM3NWwxLjg3NSAweiIgZmlsbC1ydWxlPSJub256ZXJvIj48L3BhdGg+PHBhdGggZmlsbD0iI2ZmZmZmZiIgZD0ibTE3Ni4wIDI3MS40NjQ1N2wxODcuNDMzMDcgMGwwIDgwLjUzNTQzbC0xODcuNDMzMDcgMHoiIGZpbGwtcnVsZT0ibm9uemVybyI+PC9wYXRoPjxwYXRoIHN0cm9rZT0iIzAwMDAwMCIgc3Ryb2tlLXdpZHRoPSIxLjAiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1saW5lY2FwPSJidXR0IiBkPSJtMTc2LjAgMjcxLjQ2NDU3bDE4Ny40MzMwNyAwbDAgODAuNTM1NDNsLTE4Ny40MzMwNyAweiIgZmlsbC1ydWxlPSJub256ZXJvIj48L3BhdGg+PHBhdGggZmlsbD0iIzAwMDAwMCIgZD0ibTI1NC4zODg0IDMxNC4zNDIzbDAgMS42NDA2MjVsMS42MjUgMHEwLjU3ODEyNSAwIDAuODEyNSAwLjIzNDM3NXEwLjI1IDAuMjE4NzUgMC4yNSAwLjU3ODEyNXEwIDAuMzQzNzUgLTAuMjUgMC41NzgxMjVxLTAuMjM0Mzc1IDAuMjE4NzUgLTAuODEyNSAwLjIxODc1bC0zLjQ2ODc1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjI1IC0wLjIzNDM3NSAtMC4yNSAtMC41OTM3NXEwIC0wLjM0Mzc1IDAuMjUgLTAuNTYyNXEwLjI1IC0wLjIzNDM3NSAwLjgyODEyNSAtMC4yMzQzNzVsMC4yNSAwbDAgLTYuMjY1NjI1bC0wLjI1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjI1IC0wLjIxODc1IC0wLjI1IC0wLjU3ODEyNXEwIC0wLjM1OTM3NSAwLjI1IC0wLjU3ODEyNXEwLjI1IC0wLjIzNDM3NSAwLjgyODEyNSAtMC4yMzQzNzVsMy42ODc1IDAuMDE1NjI1cTEuNjI1IDAgMi41NjI1IDAuODkwNjI1cTAuOTUzMTI1IDAuODc1IDAuOTUzMTI1IDIuMTU2MjVxMCAwLjcwMzEyNSAtMC4zMTI1IDEuMzI4MTI1cS0wLjI1IDAuNDY4NzUgLTAuODEyNSAwLjkyMTg3NXEtMC41NjI1IDAuNDUzMTI1IC0xLjE1NjI1IDAuNjg3NXEtMC41OTM3NSAwLjIzNDM3NSAtMS41NjI1IDAuMjM0Mzc1bC0xLjUxNTYyNSAwem0wIC0xLjYwOTM3NWwxLjQ4NDM3NSAwcTEuMDQ2ODc1IDAgMS42NTYyNSAtMC40Njg3NXEwLjYyNSAtMC40Njg3NSAwLjYyNSAtMS4xNDA2MjVxMCAtMC41NjI1IC0wLjUgLTAuOTg0Mzc1cS0wLjUgLTAuNDIxODc1IC0xLjQyMTg3NSAtMC40MjE4NzVsLTEuODQzNzUgMGwwIDMuMDE1NjI1em0xMS45NzY1NjI1IDQuODU5Mzc1bDAgLTAuMzc1cS0wLjYwOTM3NSAwLjMxMjUgLTEuMzQzNzUgMC40Njg3NXEtMC43MTg3NSAwLjE3MTg3NSAtMS4zMTI1IDAuMTcxODc1cS0xLjI4MTI1IDAgLTIuMDkzNzUgLTAuNjg3NXEtMC43OTY4NzUgLTAuNjg3NSAtMC43OTY4NzUgLTEuNTE1NjI1cTAgLTEuMCAxLjAxNTYyNSAtMS44NTkzNzVxMS4wMzEyNSAtMC44NzUgMi44NDM3NSAtMC44NzVxMC43MzQzNzUgMCAxLjY4NzUgMC4xNTYyNWwwIC0wLjM3NXEwIC0wLjM1OTM3NSAtMC4zMTI1IC0wLjU3ODEyNXEtMC4zMTI1IC0wLjIzNDM3NSAtMS4xNzE4NzUgLTAuMjM0Mzc1cS0wLjcxODc1IDAgLTEuODQzNzUgMC4yODEyNXEtMC40MjE4NzUgMC4wOTM3NSAtMC42NTYyNSAwLjA5Mzc1cS0wLjMyODEyNSAwIC0wLjU0Njg3NSAtMC4yMTg3NXEtMC4yMTg3NSAtMC4yMzQzNzUgLTAuMjE4NzUgLTAuNTkzNzVxMCAtMC4yMDMxMjUgMC4wNzgxMjUgLTAuMzQzNzVxMC4wNzgxMjUgLTAuMTU2MjUgMC4yMTg3NSAtMC4yNXEwLjE0MDYyNSAtMC4wOTM3NSAwLjU3ODEyNSAtMC4yMTg3NXEwLjU5Mzc1IC0wLjE1NjI1IDEuMjAzMTI1IC0wLjI1cTAuNjI1IC0wLjEwOTM3NSAxLjEyNSAtMC4xMDkzNzVxMS41IDAgMi4zMTI1IDAuNjU2MjVxMC44MjgxMjUgMC42NDA2MjUgMC44MjgxMjUgMS43NWwwIDMuMjk2ODc1bDAuMjgxMjUgMHEwLjU3ODEyNSAwIDAuODEyNSAwLjIzNDM3NXEwLjI1IDAuMjE4NzUgMC4yNSAwLjU3ODEyNXEwIDAuMzQzNzUgLTAuMjUgMC41NzgxMjVxLTAuMjM0Mzc1IDAuMjE4NzUgLTAuODEyNSAwLjIxODc1bC0xLjg3NSAwem0wIC0yLjg3NXEtMC45Njg3NSAtMC4xODc1IC0xLjc4MTI1IC0wLjE4NzVxLTAuOTY4NzUgMCAtMS42NzE4NzUgMC40ODQzNzVxLTAuNDM3NSAwLjI5Njg3NSAtMC40Mzc1IDAuNjA5Mzc1cTAgMC4yMzQzNzUgMC4yMDMxMjUgMC4zNzVxMC4zOTA2MjUgMC4yNSAxLjA3ODEyNSAwLjI1cTAuNTc4MTI1IDAgMS4yOTY4NzUgLTAuMjE4NzVxMC43MzQzNzUgLTAuMjM0Mzc1IDEuMzEyNSAtMC42MjVsMCAtMC42ODc1em03Ljc1NzgxMjUgLTIuNjI1bDAgMy4yMTg3NXEwIDAuNTE1NjI1IDAuMjE4NzUgMC42NzE4NzVxMC4zMjgxMjUgMC4yNjU2MjUgMS4xNzE4NzUgMC4yNjU2MjVxMS4yMTg3NSAwIDIuMjY1NjI1IC0wLjUzMTI1cTAuMzkwNjI1IC0wLjIwMzEyNSAwLjYyNSAtMC4yMDMxMjVxMC4zMTI1IDAgMC41MzEyNSAwLjIzNDM3NXEwLjIzNDM3NSAwLjIzNDM3NSAwLjIzNDM3NSAwLjU3ODEyNXEwIDAuMzEyNSAtMC4yNSAwLjUzMTI1cS0wLjM3NSAwLjM3NSAtMS41MTU2MjUgMC42ODc1cS0xLjEyNSAwLjMxMjUgLTEuODkwNjI1IDAuMzEyNXEtMS41IDAgLTIuMjUgLTAuNjQwNjI1cS0wLjczNDM3NSAtMC42NTYyNSAtMC43MzQzNzUgLTEuNTkzNzVsMCAtMy41MzEyNWwtMC41NzgxMjUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjE4NzUgLTAuMjUgLTAuNTc4MTI1cTAgLTAuMzU5Mzc1IDAuMjUgLTAuNTc4MTI1cTAuMjUgLTAuMjE4NzUgMC44MjgxMjUgLTAuMjE4NzVsMC41NzgxMjUgMGwwIC0xLjQ1MzEyNXEwIC0wLjU3ODEyNSAwLjIxODc1IC0wLjgxMjVxMC4yMTg3NSAtMC4yNSAwLjU3ODEyNSAtMC4yNXEwLjM1OTM3NSAwIDAuNTc4MTI1IDAuMjVxMC4yMTg3NSAwLjIzNDM3NSAwLjIxODc1IDAuODEyNWwwIDEuNDUzMTI1bDIuOTY4NzUgMHEwLjU3ODEyNSAwIDAuODEyNSAwLjIxODc1cTAuMjUgMC4yMTg3NSAwLjI1IDAuNTc4MTI1cTAgMC4zNTkzNzUgLTAuMjUgMC41NzgxMjVxLTAuMjM0Mzc1IDAuMjE4NzUgLTAuODEyNSAwLjIxODc1bC0yLjk2ODc1IDB6bTguMzUxNTYyNSAtNC42NDA2MjVsMCAzLjQyMTg3NXEwLjUgLTAuMjk2ODc1IDEuMCAtMC40Mzc1cTAuNTE1NjI1IC0wLjE1NjI1IDEuMDQ2ODc1IC0wLjE1NjI1cTAuODI4MTI1IDAgMS40Njg3NSAwLjI4MTI1cTAuNjU2MjUgMC4yODEyNSAxLjA3ODEyNSAwLjg5MDYyNXEwLjQyMTg3NSAwLjYwOTM3NSAwLjQyMTg3NSAxLjUzMTI1bDAgMy4wcTAuNjA5Mzc1IDAgMC43OTY4NzUgMC4xMjVxMC4zNzUgMC4yMzQzNzUgMC4zNzUgMC42ODc1cTAgMC4zNDM3NSAtMC4yNSAwLjU3ODEyNXEtMC4yMzQzNzUgMC4yMTg3NSAtMC44MTI1IDAuMjE4NzVsLTEuODI4MTI1IDBxLTAuNTYyNSAwIC0wLjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjM0Mzc1IC0wLjI1IC0wLjU5Mzc1cTAgLTAuNDM3NSAwLjM3NSAtMC42NzE4NzVxMC4yMDMxMjUgLTAuMTI1IDAuNzk2ODc1IC0wLjEyNWwwIC0yLjg5MDYyNXEwIC0wLjYyNSAtMC4yODEyNSAtMC44NzVxLTAuMzU5Mzc1IC0wLjMyODEyNSAtMS4wNzgxMjUgLTAuMzI4MTI1cS0wLjUzMTI1IDAgLTAuOTUzMTI1IDAuMjAzMTI1cS0wLjQwNjI1IDAuMjAzMTI1IC0xLjA5Mzc1IDAuODkwNjI1bDAgMy4wcTAuNjA5Mzc1IDAgMC43OTY4NzUgMC4xMjVxMC4zNzUgMC4yMzQzNzUgMC4zNzUgMC42ODc1cTAgMC4zNDM3NSAtMC4yNSAwLjU3ODEyNXEtMC4yMzQzNzUgMC4yMTg3NSAtMC44MTI1IDAuMjE4NzVsLTEuODI4MTI1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjIzNDM3NSAtMC4yMzQzNzUgLTAuMjM0Mzc1IC0wLjU5Mzc1cTAgLTAuNDM3NSAwLjM3NSAtMC42NzE4NzVxMC4xODc1IC0wLjEyNSAwLjc5Njg3NSAtMC4xMjVsMCAtNi45MjE4NzVsLTAuMjY1NjI1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjI1IC0wLjIzNDM3NSAtMC4yNSAtMC41OTM3NXEwIC0wLjM0Mzc1IDAuMjUgLTAuNTYyNXEwLjI1IC0wLjIzNDM3NSAwLjgyODEyNSAtMC4yMzQzNzVsMS44NzUgMHoiIGZpbGwtcnVsZT0ibm9uemVybyI+PC9wYXRoPjxwYXRoIGZpbGw9IiNmZmZmZmYiIGQ9Im0xNi4wIDQwMC4wbDE4Ny40MzMwNiAwbDAgODAuNTM1NDNsLTE4Ny40MzMwNiAweiIgZmlsbC1ydWxlPSJub256ZXJvIj48L3BhdGg+PHBhdGggc3Ryb2tlPSIjMDAwMDAwIiBzdHJva2Utd2lkdGg9IjEuMCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLWxpbmVjYXA9ImJ1dHQiIGQ9Im0xNi4wIDQwMC4wbDE4Ny40MzMwNiAwbDAgODAuNTM1NDNsLTE4Ny40MzMwNiAweiIgZmlsbC1ydWxlPSJub256ZXJvIj48L3BhdGg+PHBhdGggZmlsbD0iIzAwMDAwMCIgZD0ibTcwLjM4NDUgNDQyLjg3NzcybDAgMS42NDA2MjVsMS42MjUgMHEwLjU3ODEyNSAwIDAuODEyNSAwLjIzNDM3NXEwLjI1IDAuMjE4NzUgMC4yNSAwLjU3ODEyNXEwIDAuMzQzNzUgLTAuMjUgMC41NzgxMjVxLTAuMjM0Mzc1IDAuMjE4NzUgLTAuODEyNSAwLjIxODc1bC0zLjQ2ODc1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjI1IC0wLjIzNDM3NSAtMC4yNSAtMC41OTM3NXEwIC0wLjM0Mzc1IDAuMjUgLTAuNTYyNXEwLjI1IC0wLjIzNDM3NSAwLjgyODEyNSAtMC4yMzQzNzVsMC4yNSAwbDAgLTYuMjY1NjI1bC0wLjI1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjI1IC0wLjIxODc1IC0wLjI1IC0wLjU3ODEyNXEwIC0wLjM1OTM3NSAwLjI1IC0wLjU3ODEyNXEwLjI1IC0wLjIzNDM3NSAwLjgyODEyNSAtMC4yMzQzNzVsMy42ODc1IDAuMDE1NjI1cTEuNjI1IDAgMi41NjI1IDAuODkwNjI1cTAuOTUzMTI1IDAuODc1IDAuOTUzMTI1IDIuMTU2MjVxMCAwLjcwMzEyNSAtMC4zMTI1IDEuMzI4MTI1cS0wLjI1IDAuNDY4NzUgLTAuODEyNSAwLjkyMTg3NXEtMC41NjI1IDAuNDUzMTI1IC0xLjE1NjI1IDAuNjg3NXEtMC41OTM3NSAwLjIzNDM3NSAtMS41NjI1IDAuMjM0Mzc1bC0xLjUxNTYyNSAwem0wIC0xLjYwOTM3NWwxLjQ4NDM3NSAwcTEuMDQ2ODc1IDAgMS42NTYyNSAtMC40Njg3NXEwLjYyNSAtMC40Njg3NSAwLjYyNSAtMS4xNDA2MjVxMCAtMC41NjI1IC0wLjUgLTAuOTg0Mzc1cS0wLjUgLTAuNDIxODc1IC0xLjQyMTg3NSAtMC40MjE4NzVsLTEuODQzNzUgMGwwIDMuMDE1NjI1em0xNC42OTUzMTI1IDEuNDM3NXEwIDAuOTIxODc1IC0wLjUxNTYyNSAxLjc5Njg3NXEtMC41MTU2MjUgMC44NTkzNzUgLTEuNTMxMjUgMS4zNzVxLTEuMCAwLjUxNTYyNSAtMi4xMDkzNzUgMC41MTU2MjVxLTEuMDkzNzUgMCAtMi4wOTM3NSAtMC41cS0xLjAgLTAuNTE1NjI1IC0xLjUzMTI1IC0xLjM3NXEtMC41MTU2MjUgLTAuODc1IC0wLjUxNTYyNSAtMS44MjgxMjVxMCAtMC45NTMxMjUgMC41MzEyNSAtMS44NzVxMC41MzEyNSAtMC45Mzc1IDEuNTMxMjUgLTEuNDY4NzVxMS4wIC0wLjUzMTI1IDIuMDc4MTI1IC0wLjUzMTI1cTEuMDkzNzUgMCAyLjEwOTM3NSAwLjU0Njg3NXExLjAxNTYyNSAwLjU0Njg3NSAxLjUzMTI1IDEuNDY4NzVxMC41MTU2MjUgMC45MDYyNSAwLjUxNTYyNSAxLjg3NXptLTEuNjA5Mzc1IDAuMDE1NjI1cTAgLTAuNzgxMjUgLTAuNTQ2ODc1IC0xLjQyMTg3NXEtMC43NjU2MjUgLTAuODc1IC0yLjAgLTAuODc1cS0xLjA3ODEyNSAwIC0xLjgxMjUgMC43MDMxMjVxLTAuNzE4NzUgMC42ODc1IC0wLjcxODc1IDEuNTkzNzVxMCAwLjc1IDAuNzM0Mzc1IDEuNDA2MjVxMC43MzQzNzUgMC42NTYyNSAxLjc5Njg3NSAwLjY1NjI1cTEuMDc4MTI1IDAgMS44MTI1IC0wLjY1NjI1cTAuNzM0Mzc1IC0wLjY1NjI1IDAuNzM0Mzc1IC0xLjQwNjI1em04Ljc3MzQzNzUgLTEuODEyNXEtMC4zOTA2MjUgLTAuMjUgLTAuODI4MTI1IC0wLjM1OTM3NXEtMC40MjE4NzUgLTAuMTI1IC0wLjg5MDYyNSAtMC4xMjVxLTAuOTIxODc1IDAgLTEuNDY4NzUgMC4yOTY4NzVxLTAuMjUgMC4xNDA2MjUgLTAuMjUgMC4yOTY4NzVxMCAwLjE3MTg3NSAwLjMyODEyNSAwLjM0Mzc1cTAuMjUgMC4xMjUgMS4xMjUgMC4yNXExLjU5Mzc1IDAuMjE4NzUgMi4yMTg3NSAwLjQzNzVxMC44MTI1IDAuMjgxMjUgMS4yNSAwLjg1OTM3NXEwLjQ1MzEyNSAwLjU2MjUgMC40NTMxMjUgMS4yMDMxMjVxMCAwLjg1OTM3NSAtMC43NSAxLjQzNzVxLTEuMDkzNzUgMC44NDM3NSAtMi44MjgxMjUgMC44NDM3NXEtMC42ODc1IDAgLTEuMjgxMjUgLTAuMTI1cS0wLjU5Mzc1IC0wLjEyNSAtMS4wNzgxMjUgLTAuMzU5Mzc1cS0wLjEyNSAwLjA5Mzc1IC0wLjI2NTYyNSAwLjE1NjI1cS0wLjEyNSAwLjA0Njg3NSAtMC4yNjU2MjUgMC4wNDY4NzVxLTAuMzc1IDAgLTAuNTkzNzUgLTAuMjM0Mzc1cS0wLjIxODc1IC0wLjI1IC0wLjIxODc1IC0wLjgyODEyNWwwIC0wLjU0Njg3NXEwIC0wLjU3ODEyNSAwLjIxODc1IC0wLjgxMjVxMC4yMTg3NSAtMC4yNSAwLjU3ODEyNSAtMC4yNXEwLjI5Njg3NSAwIDAuNDg0Mzc1IDAuMTU2MjVxMC4yMDMxMjUgMC4xNTYyNSAwLjMxMjUgMC41NDY4NzVxMC4zNTkzNzUgMC4zMTI1IDAuODc1IDAuNDg0Mzc1cTAuNTE1NjI1IDAuMTU2MjUgMS4xODc1IDAuMTU2MjVxMS4xMDkzNzUgMCAxLjcxODc1IC0wLjM0Mzc1cTAuMjgxMjUgLTAuMTcxODc1IDAuMjgxMjUgLTAuMzU5Mzc1cTAgLTAuMzEyNSAtMC40MDYyNSAtMC41MTU2MjVxLTAuNDIxODc1IC0wLjIwMzEyNSAtMS43MTg3NSAtMC4zNDM3NXEtMS45MjE4NzUgLTAuMjAzMTI1IC0yLjU3ODEyNSAtMC43ODEyNXEtMC42NDA2MjUgLTAuNTc4MTI1IC0wLjY0MDYyNSAtMS40MDYyNXEwIC0wLjg1OTM3NSAwLjcxODc1IC0xLjQzNzVxMC45ODQzNzUgLTAuNzgxMjUgMi41NzgxMjUgLTAuNzgxMjVxMC41NjI1IDAgMS4wNjI1IDAuMTA5Mzc1cTAuNTE1NjI1IDAuMTA5Mzc1IDAuOTg0Mzc1IDAuMzI4MTI1cTAuMTU2MjUgLTAuMTA5Mzc1IDAuMjgxMjUgLTAuMTU2MjVxMC4xMjUgLTAuMDYyNSAwLjIzNDM3NSAtMC4wNjI1cTAuMzI4MTI1IDAgMC41NDY4NzUgMC4yNXEwLjIxODc1IDAuMjM0Mzc1IDAuMjE4NzUgMC44MTI1bDAgMC4zOTA2MjVxMCAwLjUzMTI1IC0wLjEyNSAwLjcxODc1cS0wLjI1IDAuMzU5Mzc1IC0wLjY3MTg3NSAwLjM1OTM3NXEtMC4yOTY4NzUgMCAtMC41MTU2MjUgLTAuMTcxODc1cS0wLjIxODc1IC0wLjE4NzUgLTAuMjgxMjUgLTAuNDg0Mzc1em04LjQ0NTMxMjUgLTQuOTIxODc1bDAgMS43MDMxMjVsLTEuOTA2MjUgMGwwIC0xLjcwMzEyNWwxLjkwNjI1IDB6bTAuMjE4NzUgMy4wNDY4NzVsMCA1LjQ4NDM3NWwxLjkyMTg3NSAwcTAuNTc4MTI1IDAgMC44MjgxMjUgMC4yMzQzNzVxMC4yNSAwLjIxODc1IDAuMjUgMC41NzgxMjVxMCAwLjM0Mzc1IC0wLjI1IDAuNTc4MTI1cS0wLjI1IDAuMjE4NzUgLTAuODI4MTI1IDAuMjE4NzVsLTUuNDM3NSAwcS0wLjU3ODEyNSAwIC0wLjgyODEyNSAtMC4yMTg3NXEtMC4yNSAtMC4yMzQzNzUgLTAuMjUgLTAuNTkzNzVxMCAtMC4zNDM3NSAwLjI1IC0wLjU2MjVxMC4yNSAtMC4yMzQzNzUgMC44MjgxMjUgLTAuMjM0Mzc1bDEuOTIxODc1IDBsMCAtMy44OTA2MjVsLTEuMjk2ODc1IDBxLTAuNTYyNSAwIC0wLjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjE4NzUgLTAuMjUgLTAuNTc4MTI1cTAgLTAuMzU5Mzc1IDAuMjM0Mzc1IC0wLjU3ODEyNXEwLjI1IC0wLjIxODc1IDAuODI4MTI1IC0wLjIxODc1bDIuODkwNjI1IDB6bTEwLjAwNzgxMjUgMy40MDYyNWwyLjQzNzUgMi4wNzgxMjVxMC40Mzc1IDAuMDMxMjUgMC42NTYyNSAwLjI1cTAuMjE4NzUgMC4yMTg3NSAwLjIxODc1IDAuNTYyNXEwIDAuMzQzNzUgLTAuMjUgMC41NzgxMjVxLTAuMjUgMC4yMTg3NSAtMC44MjgxMjUgMC4yMTg3NWwtMS44MTI1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjI1IC0wLjIzNDM3NSAtMC4yNSAtMC41OTM3NXEwIC0wLjI4MTI1IDAuMTcxODc1IC0wLjVxMC4xODc1IC0wLjIxODc1IDAuNDg0Mzc1IC0wLjI5Njg3NWwtMS4xODc1IC0xLjAzMTI1bC0xLjIxODc1IDEuMDMxMjVxMC4zNTkzNzUgMC4wOTM3NSAwLjUxNTYyNSAwLjI5Njg3NXEwLjE3MTg3NSAwLjE4NzUgMC4xNzE4NzUgMC41cTAgMC4zNTkzNzUgLTAuMjUgMC41OTM3NXEtMC4yMzQzNzUgMC4yMTg3NSAtMC44MTI1IDAuMjE4NzVsLTEuODEyNSAwcS0wLjU3ODEyNSAwIC0wLjgyODEyNSAtMC4yMTg3NXEtMC4yMzQzNzUgLTAuMjM0Mzc1IC0wLjIzNDM3NSAtMC41OTM3NXEwIC0wLjMyODEyNSAwLjIxODc1IC0wLjU0Njg3NXEwLjIxODc1IC0wLjIxODc1IDAuNjU2MjUgLTAuMjVsMi4zNzUgLTIuMDkzNzVsLTIuMTA5Mzc1IC0xLjc5Njg3NXEtMC40MDYyNSAtMC4wMzEyNSAtMC42MjUgLTAuMjVxLTAuMjE4NzUgLTAuMjE4NzUgLTAuMjE4NzUgLTAuNTQ2ODc1cTAgLTAuMzU5Mzc1IDAuMjUgLTAuNTc4MTI1cTAuMjUgLTAuMjE4NzUgMC44MjgxMjUgLTAuMjE4NzVsMS41IDBxMC41NzgxMjUgMCAwLjgxMjUgMC4yMTg3NXEwLjI1IDAuMjE4NzUgMC4yNSAwLjU2MjVxMCAwLjQ2ODc1IC0wLjQzNzUgMC43NWwwLjk2ODc1IDAuODEyNWwwLjk1MzEyNSAtMC44MjgxMjVxLTAuNDIxODc1IC0wLjI5Njg3NSAtMC40MjE4NzUgLTAuNzAzMTI1cTAgLTAuMzc1IDAuMjM0Mzc1IC0wLjU5Mzc1cTAuMjUgLTAuMjE4NzUgMC44MjgxMjUgLTAuMjE4NzVsMS40ODQzNzUgMHEwLjU3ODEyNSAwIDAuODI4MTI1IDAuMjE4NzVxMC4yNSAwLjIxODc1IDAuMjUgMC41NzgxMjVxMCAwLjMyODEyNSAtMC4yMTg3NSAwLjU0Njg3NXEtMC4yMTg3NSAwLjIxODc1IC0wLjY0MDYyNSAwLjI1bC0yLjEwOTM3NSAxLjgxMjV6bTcuNDc2NTYyNSAwLjQzNzVsMCAxLjY0MDYyNWwxLjYyNSAwcTAuNTc4MTI1IDAgMC44MTI1IDAuMjM0Mzc1cTAuMjUgMC4yMTg3NSAwLjI1IDAuNTc4MTI1cTAgMC4zNDM3NSAtMC4yNSAwLjU3ODEyNXEtMC4yMzQzNzUgMC4yMTg3NSAtMC44MTI1IDAuMjE4NzVsLTMuNDY4NzUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjM0Mzc1IC0wLjI1IC0wLjU5Mzc1cTAgLTAuMzQzNzUgMC4yNSAtMC41NjI1cTAuMjUgLTAuMjM0Mzc1IDAuODI4MTI1IC0wLjIzNDM3NWwwLjI1IDBsMCAtNi4yNjU2MjVsLTAuMjUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjE4NzUgLTAuMjUgLTAuNTc4MTI1cTAgLTAuMzU5Mzc1IDAuMjUgLTAuNTc4MTI1cTAuMjUgLTAuMjM0Mzc1IDAuODI4MTI1IC0wLjIzNDM3NWwzLjY4NzUgMC4wMTU2MjVxMS42MjUgMCAyLjU2MjUgMC44OTA2MjVxMC45NTMxMjUgMC44NzUgMC45NTMxMjUgMi4xNTYyNXEwIDAuNzAzMTI1IC0wLjMxMjUgMS4zMjgxMjVxLTAuMjUgMC40Njg3NSAtMC44MTI1IDAuOTIxODc1cS0wLjU2MjUgMC40NTMxMjUgLTEuMTU2MjUgMC42ODc1cS0wLjU5Mzc1IDAuMjM0Mzc1IC0xLjU2MjUgMC4yMzQzNzVsLTEuNTE1NjI1IDB6bTAgLTEuNjA5Mzc1bDEuNDg0Mzc1IDBxMS4wNDY4NzUgMCAxLjY1NjI1IC0wLjQ2ODc1cTAuNjI1IC0wLjQ2ODc1IDAuNjI1IC0xLjE0MDYyNXEwIC0wLjU2MjUgLTAuNSAtMC45ODQzNzVxLTAuNSAtMC40MjE4NzUgLTEuNDIxODc1IC0wLjQyMTg3NWwtMS44NDM3NSAwbDAgMy4wMTU2MjV6bTExLjk3NjU1NSA0Ljg1OTM3NWwwIC0wLjM3NXEtMC42MDkzNzUgMC4zMTI1IC0xLjM0Mzc1IDAuNDY4NzVxLTAuNzE4NzUgMC4xNzE4NzUgLTEuMzEyNDkyNCAwLjE3MTg3NXEtMS4yODEyNSAwIC0yLjA5Mzc1IC0wLjY4NzVxLTAuNzk2ODc1IC0wLjY4NzUgLTAuNzk2ODc1IC0xLjUxNTYyNXEwIC0xLjAgMS4wMTU2MjUgLTEuODU5Mzc1cTEuMDMxMjUgLTAuODc1IDIuODQzNzQyNCAtMC44NzVxMC43MzQzNzUgMCAxLjY4NzUgMC4xNTYyNWwwIC0wLjM3NXEwIC0wLjM1OTM3NSAtMC4zMTI1IC0wLjU3ODEyNXEtMC4zMTI1IC0wLjIzNDM3NSAtMS4xNzE4NzUgLTAuMjM0Mzc1cS0wLjcxODc1IDAgLTEuODQzNzQyNCAwLjI4MTI1cS0wLjQyMTg3NSAwLjA5Mzc1IC0wLjY1NjI1IDAuMDkzNzVxLTAuMzI4MTI1IDAgLTAuNTQ2ODc1IC0wLjIxODc1cS0wLjIxODc1IC0wLjIzNDM3NSAtMC4yMTg3NSAtMC41OTM3NXEwIC0wLjIwMzEyNSAwLjA3ODEyNSAtMC4zNDM3NXEwLjA3ODEyNSAtMC4xNTYyNSAwLjIxODc1IC0wLjI1cTAuMTQwNjI1IC0wLjA5Mzc1IDAuNTc4MTI1IC0wLjIxODc1cTAuNTkzNzUgLTAuMTU2MjUgMS4yMDMxMjUgLTAuMjVxMC42MjQ5OTI0IC0wLjEwOTM3NSAxLjEyNDk5MjQgLTAuMTA5Mzc1cTEuNSAwIDIuMzEyNSAwLjY1NjI1cTAuODI4MTI1IDAuNjQwNjI1IDAuODI4MTI1IDEuNzVsMCAzLjI5Njg3NWwwLjI4MTI1IDBxMC41NzgxMjUgMCAwLjgxMjUgMC4yMzQzNzVxMC4yNSAwLjIxODc1IDAuMjUgMC41NzgxMjVxMCAwLjM0Mzc1IC0wLjI1IDAuNTc4MTI1cS0wLjIzNDM3NSAwLjIxODc1IC0wLjgxMjUgMC4yMTg3NWwtMS44NzUgMHptMCAtMi44NzVxLTAuOTY4NzUgLTAuMTg3NSAtMS43ODEyNSAtMC4xODc1cS0wLjk2ODc0MjQgMCAtMS42NzE4Njc0IDAuNDg0Mzc1cS0wLjQzNzUgMC4yOTY4NzUgLTAuNDM3NSAwLjYwOTM3NXEwIDAuMjM0Mzc1IDAuMjAzMTI1IDAuMzc1cTAuMzkwNjI1IDAuMjUgMS4wNzgxMjUgMC4yNXEwLjU3ODExNzQgMCAxLjI5Njg2NzQgLTAuMjE4NzVxMC43MzQzNzUgLTAuMjM0Mzc1IDEuMzEyNSAtMC42MjVsMCAtMC42ODc1em03Ljc1NzgxMjUgLTIuNjI1bDAgMy4yMTg3NXEwIDAuNTE1NjI1IDAuMjE4NzUgMC42NzE4NzVxMC4zMjgxMjUgMC4yNjU2MjUgMS4xNzE4NzUgMC4yNjU2MjVxMS4yMTg3NSAwIDIuMjY1NjI1IC0wLjUzMTI1cTAuMzkwNjI1IC0wLjIwMzEyNSAwLjYyNSAtMC4yMDMxMjVxMC4zMTI1IDAgMC41MzEyNSAwLjIzNDM3NXEwLjIzNDM3NSAwLjIzNDM3NSAwLjIzNDM3NSAwLjU3ODEyNXEwIDAuMzEyNSAtMC4yNSAwLjUzMTI1cS0wLjM3NSAwLjM3NSAtMS41MTU2MjUgMC42ODc1cS0xLjEyNSAwLjMxMjUgLTEuODkwNjI1IDAuMzEyNXEtMS41IDAgLTIuMjUgLTAuNjQwNjI1cS0wLjczNDM3NSAtMC42NTYyNSAtMC43MzQzNzUgLTEuNTkzNzVsMCAtMy41MzEyNWwtMC41NzgxMjUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjE4NzUgLTAuMjUgLTAuNTc4MTI1cTAgLTAuMzU5Mzc1IDAuMjUgLTAuNTc4MTI1cTAuMjUgLTAuMjE4NzUgMC44MjgxMjUgLTAuMjE4NzVsMC41NzgxMjUgMGwwIC0xLjQ1MzEyNXEwIC0wLjU3ODEyNSAwLjIxODc1IC0wLjgxMjVxMC4yMTg3NSAtMC4yNSAwLjU3ODEyNSAtMC4yNXEwLjM1OTM3NSAwIDAuNTc4MTI1IDAuMjVxMC4yMTg3NSAwLjIzNDM3NSAwLjIxODc1IDAuODEyNWwwIDEuNDUzMTI1bDIuOTY4NzUgMHEwLjU3ODEyNSAwIDAuODEyNSAwLjIxODc1cTAuMjUgMC4yMTg3NSAwLjI1IDAuNTc4MTI1cTAgMC4zNTkzNzUgLTAuMjUgMC41NzgxMjVxLTAuMjM0Mzc1IDAuMjE4NzUgLTAuODEyNSAwLjIxODc1bC0yLjk2ODc1IDB6bTguMzUxNTYyNSAtNC42NDA2MjVsMCAzLjQyMTg3NXEwLjUgLTAuMjk2ODc1IDEuMCAtMC40Mzc1cTAuNTE1NjI1IC0wLjE1NjI1IDEuMDQ2ODc1IC0wLjE1NjI1cTAuODI4MTI1IDAgMS40Njg3NSAwLjI4MTI1cTAuNjU2MjUgMC4yODEyNSAxLjA3ODEyNSAwLjg5MDYyNXEwLjQyMTg3NSAwLjYwOTM3NSAwLjQyMTg3NSAxLjUzMTI1bDAgMy4wcTAuNjA5Mzc1IDAgMC43OTY4NzUgMC4xMjVxMC4zNzUgMC4yMzQzNzUgMC4zNzUgMC42ODc1cTAgMC4zNDM3NSAtMC4yNSAwLjU3ODEyNXEtMC4yMzQzNzUgMC4yMTg3NSAtMC44MTI1IDAuMjE4NzVsLTEuODI4MTI1IDBxLTAuNTYyNSAwIC0wLjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjM0Mzc1IC0wLjI1IC0wLjU5Mzc1cTAgLTAuNDM3NSAwLjM3NSAtMC42NzE4NzVxMC4yMDMxMjUgLTAuMTI1IDAuNzk2ODc1IC0wLjEyNWwwIC0yLjg5MDYyNXEwIC0wLjYyNSAtMC4yODEyNSAtMC44NzVxLTAuMzU5Mzc1IC0wLjMyODEyNSAtMS4wNzgxMjUgLTAuMzI4MTI1cS0wLjUzMTI1IDAgLTAuOTUzMTI1IDAuMjAzMTI1cS0wLjQwNjI1IDAuMjAzMTI1IC0xLjA5Mzc1IDAuODkwNjI1bDAgMy4wcTAuNjA5Mzc1IDAgMC43OTY4NzUgMC4xMjVxMC4zNzUgMC4yMzQzNzUgMC4zNzUgMC42ODc1cTAgMC4zNDM3NSAtMC4yNSAwLjU3ODEyNXEtMC4yMzQzNzUgMC4yMTg3NSAtMC44MTI1IDAuMjE4NzVsLTEuODI4MTI1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjIzNDM3NSAtMC4yMzQzNzUgLTAuMjM0Mzc1IC0wLjU5Mzc1cTAgLTAuNDM3NSAwLjM3NSAtMC42NzE4NzVxMC4xODc1IC0wLjEyNSAwLjc5Njg3NSAtMC4xMjVsMCAtNi45MjE4NzVsLTAuMjY1NjI1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjI1IC0wLjIzNDM3NSAtMC4yNSAtMC41OTM3NXEwIC0wLjM0Mzc1IDAuMjUgLTAuNTYyNXEwLjI1IC0wLjIzNDM3NSAwLjgyODEyNSAtMC4yMzQzNzVsMS44NzUgMHoiIGZpbGwtcnVsZT0ibm9uemVybyI+PC9wYXRoPjxwYXRoIGZpbGw9IiNmZmZmZmYiIGQ9Im0zMzYuMCA0MDAuMGwxODcuNDMzMDQgMGwwIDgwLjUzNTQzbC0xODcuNDMzMDQgMHoiIGZpbGwtcnVsZT0ibm9uemVybyI+PC9wYXRoPjxwYXRoIHN0cm9rZT0iIzAwMDAwMCIgc3Ryb2tlLXdpZHRoPSIxLjAiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1saW5lY2FwPSJidXR0IiBkPSJtMzM2LjAgNDAwLjBsMTg3LjQzMzA0IDBsMCA4MC41MzU0M2wtMTg3LjQzMzA0IDB6IiBmaWxsLXJ1bGU9Im5vbnplcm8iPjwvcGF0aD48cGF0aCBmaWxsPSIjMDAwMDAwIiBkPSJtMzgxLjcyMDQzIDQ0MS41ODA4NGwtMS40ODQzNzUgNC41NDY4NzVsLTEuNzk2ODc1IDBsLTAuOTUzMTI1IC03Ljg3NXEtMC4zNzUgLTAuMDQ2ODc1IC0wLjU2MjUgLTAuMjVxLTAuMTg3NSAtMC4yMDMxMjUgLTAuMTg3NSAtMC41MzEyNXEwIC0wLjM3NSAwLjI1IC0wLjU5Mzc1cTAuMjUgLTAuMjM0Mzc1IDAuODI4MTI1IC0wLjIzNDM3NWwyLjEyNSAwLjAxNTYyNXEwLjU3ODEyNSAwIDAuODI4MTI1IDAuMjE4NzVxMC4yNSAwLjIxODc1IDAuMjUgMC41NzgxMjVxMCAwLjM1OTM3NSAtMC4yNSAwLjU3ODEyNXEtMC4yNSAwLjIxODc1IC0wLjgyODEyNSAwLjIxODc1bC0wLjgyODEyNSAwbDAuNTMxMjUgNC40ODQzNzVsMS4yNSAtMy43MzQzNzVsMS42NzE4NzUgMGwxLjI1IDMuNzM0Mzc1bDAuNTMxMjUgLTQuNDg0Mzc1bC0wLjg0Mzc1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjIzNDM3NSAtMC4yMTg3NSAtMC4yMzQzNzUgLTAuNTc4MTI1cTAgLTAuMzU5Mzc1IDAuMjM0Mzc1IC0wLjU3ODEyNXEwLjI1IC0wLjIzNDM3NSAwLjgyODEyNSAtMC4yMzQzNzVsMi4xMjUgMC4wMTU2MjVxMC41NzgxMjUgMCAwLjgyODEyNSAwLjIxODc1cTAuMjUgMC4yMTg3NSAwLjI1IDAuNTc4MTI1cTAgMC4yOTY4NzUgLTAuMjAzMTI1IDAuNTE1NjI1cS0wLjE4NzUgMC4yMTg3NSAtMC41NjI1IDAuMjgxMjVsLTAuOTIxODc1IDcuODc1bC0xLjc2NTYyNSAwbC0xLjUzMTI1IC00LjU0Njg3NXptMTAuMTY0MDYyNSAtNS41OTM3NWwwIDEuNzAzMTI1bC0xLjkwNjI1IDBsMCAtMS43MDMxMjVsMS45MDYyNSAwem0wLjIxODc1IDMuMDQ2ODc1bDAgNS40ODQzNzVsMS45MjE4NzUgMHEwLjU3ODEyNSAwIDAuODI4MTI1IDAuMjM0Mzc1cTAuMjUgMC4yMTg3NSAwLjI1IDAuNTc4MTI1cTAgMC4zNDM3NSAtMC4yNSAwLjU3ODEyNXEtMC4yNSAwLjIxODc1IC0wLjgyODEyNSAwLjIxODc1bC01LjQzNzUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjM0Mzc1IC0wLjI1IC0wLjU5Mzc1cTAgLTAuMzQzNzUgMC4yNSAtMC41NjI1cTAuMjUgLTAuMjM0Mzc1IDAuODI4MTI1IC0wLjIzNDM3NWwxLjkyMTg3NSAwbDAgLTMuODkwNjI1bC0xLjI5Njg3NSAwcS0wLjU2MjUgMCAtMC44MTI1IC0wLjIxODc1cS0wLjI1IC0wLjIxODc1IC0wLjI1IC0wLjU3ODEyNXEwIC0wLjM1OTM3NSAwLjIzNDM3NSAtMC41NzgxMjVxMC4yNSAtMC4yMTg3NSAwLjgyODEyNSAtMC4yMTg3NWwyLjg5MDYyNSAwem03LjE5NTMxMjUgMGwwIDAuNTMxMjVxMC40Mzc1IC0wLjM3NSAwLjk1MzEyNSAtMC41NjI1cTAuNTMxMjUgLTAuMTg3NSAxLjE1NjI1IC0wLjE4NzVxMS40MjE4NzUgMCAyLjI1IDAuODkwNjI1cTAuNjU2MjUgMC43MDMxMjUgMC42NTYyNSAxLjg0Mzc1bDAgMi45Njg3NXEwLjUgMCAwLjczNDM3NSAwLjIzNDM3NXEwLjI1IDAuMjE4NzUgMC4yNSAwLjU3ODEyNXEwIDAuMzQzNzUgLTAuMjUgMC41NzgxMjVxLTAuMjM0Mzc1IDAuMjE4NzUgLTAuODEyNSAwLjIxODc1bC0xLjQ1MzEyNSAwcS0wLjU3ODEyNSAwIC0wLjgyODEyNSAtMC4yMTg3NXEtMC4yMzQzNzUgLTAuMjM0Mzc1IC0wLjIzNDM3NSAtMC41OTM3NXEwIC0wLjM0Mzc1IDAuMjM0Mzc1IC0wLjU2MjVxMC4yNSAtMC4yMzQzNzUgMC43NSAtMC4yMzQzNzVsMCAtMy4wMTU2MjVxMCAtMC41MzEyNSAtMC4yODEyNSAtMC43NjU2MjVxLTAuMzU5Mzc1IC0wLjMxMjUgLTEuMDkzNzUgLTAuMzEyNXEtMC41NjI1IDAgLTAuOTg0Mzc1IDAuMjE4NzVxLTAuNDA2MjUgMC4yMDMxMjUgLTEuMDQ2ODc1IDAuOTA2MjVsMCAyLjk2ODc1cTAuNjA5Mzc1IDAgMC43OTY4NzUgMC4xMjVxMC4zNzUgMC4yMzQzNzUgMC4zNzUgMC42ODc1cTAgMC4zNDM3NSAtMC4yNSAwLjU3ODEyNXEtMC4yMzQzNzUgMC4yMTg3NSAtMC44MTI1IDAuMjE4NzVsLTEuODI4MTI1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjIzNDM3NSAtMC4yMzQzNzUgLTAuMjM0Mzc1IC0wLjU5Mzc1cTAgLTAuNDM3NSAwLjM3NSAtMC42NzE4NzVxMC4xODc1IC0wLjEyNSAwLjc5Njg3NSAtMC4xMjVsMCAtMy44OTA2MjVxLTAuNSAwIC0wLjc1IC0wLjIxODc1cS0wLjIzNDM3NSAtMC4yMzQzNzUgLTAuMjM0Mzc1IC0wLjU3ODEyNXEwIC0wLjM1OTM3NSAwLjIzNDM3NSAtMC41NzgxMjVxMC4yNSAtMC4yMTg3NSAwLjgyODEyNSAtMC4yMTg3NWwxLjUzMTI1IDB6bTE0Ljg5ODQzNzUgLTMuMDQ2ODc1bDAgOC41MzEyNWwwLjI2NTYyNSAwcTAuNTc4MTI1IDAgMC44MjgxMjUgMC4yMzQzNzVxMC4yNSAwLjIxODc1IDAuMjUgMC41NzgxMjVxMCAwLjM0Mzc1IC0wLjI1IDAuNTc4MTI1cS0wLjI1IDAuMjE4NzUgLTAuODI4MTI1IDAuMjE4NzVsLTEuODc1IDBsMCAtMC4zOTA2MjVxLTAuNTQ2ODc1IDAuMzEyNSAtMS4xNDA2MjUgMC40ODQzNzVxLTAuNTkzNzUgMC4xNzE4NzUgLTEuMjM0Mzc1IDAuMTcxODc1cS0xLjgxMjUgMCAtMi45MjE4NzUgLTEuMDQ2ODc1cS0xLjA5Mzc1IC0xLjA0Njg3NSAtMS4wOTM3NSAtMi42MDkzNzVxMCAtMS42MjUgMS4xNTYyNSAtMi43NjU2MjVxMS4xNTYyNSAtMS4xNTYyNSAyLjgyODEyNSAtMS4xNTYyNXEwLjYyNSAwIDEuMjE4NzUgMC4yMDMxMjVxMC42MDkzNzUgMC4xODc1IDEuMTg3NSAwLjU2MjVsMCAtMS45ODQzNzVsLTAuMjY1NjI1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjI1IC0wLjIzNDM3NSAtMC4yNSAtMC41NzgxMjVxMCAtMC4zNTkzNzUgMC4yNSAtMC41NzgxMjVxMC4yNSAtMC4yMzQzNzUgMC44MjgxMjUgLTAuMjM0Mzc1bDEuODc1IDB6bS0xLjYwOTM3NSA2Ljc5Njg3NXEwIC0wLjk4NDM3NSAtMC43MDMxMjUgLTEuNjcxODc1cS0wLjY4NzUgLTAuNjg3NSAtMS42ODc1IC0wLjY4NzVxLTEuMCAwIC0xLjcwMzEyNSAwLjY4NzVxLTAuNjg3NSAwLjY4NzUgLTAuNjg3NSAxLjY1NjI1cTAgMC44NzUgMC42MjUgMS40NTMxMjVxMC42MjUgMC41NjI1IDEuNzY1NjI1IDAuNTYyNXExLjEyNSAwIDEuNzUgLTAuNTYyNXEwLjY0MDYyNSAtMC41NzgxMjUgMC42NDA2MjUgLTEuNDM3NXptMTEuNjk1MzEyNSAtMC4wNzgxMjVxMCAwLjkyMTg3NSAtMC41MTU2MjUgMS43OTY4NzVxLTAuNTE1NjI1IDAuODU5Mzc1IC0xLjUzMTI1IDEuMzc1cS0xLjAgMC41MTU2MjUgLTIuMTA5Mzc1IDAuNTE1NjI1cS0xLjA5Mzc1IDAgLTIuMDkzNzUgLTAuNXEtMS4wIC0wLjUxNTYyNSAtMS41MzEyNSAtMS4zNzVxLTAuNTE1NjI1IC0wLjg3NSAtMC41MTU2MjUgLTEuODI4MTI1cTAgLTAuOTUzMTI1IDAuNTMxMjUgLTEuODc1cTAuNTMxMjUgLTAuOTM3NSAxLjUzMTI1IC0xLjQ2ODc1cTEuMCAtMC41MzEyNSAyLjA3ODEyNSAtMC41MzEyNXExLjA5Mzc1IDAgMi4xMDkzNzUgMC41NDY4NzVxMS4wMTU2MjUgMC41NDY4NzUgMS41MzEyNSAxLjQ2ODc1cTAuNTE1NjI1IDAuOTA2MjUgMC41MTU2MjUgMS44NzV6bS0xLjYwOTM3NSAwLjAxNTYyNXEwIC0wLjc4MTI1IC0wLjU0Njg3NSAtMS40MjE4NzVxLTAuNzY1NjI1IC0wLjg3NSAtMi4wIC0wLjg3NXEtMS4wNzgxMjUgMCAtMS44MTI1IDAuNzAzMTI1cS0wLjcxODc1IDAuNjg3NSAtMC43MTg3NSAxLjU5Mzc1cTAgMC43NSAwLjczNDM3NSAxLjQwNjI1cTAuNzM0Mzc1IDAuNjU2MjUgMS43OTY4NzUgMC42NTYyNXExLjA3ODEyNSAwIDEuODEyNSAtMC42NTYyNXEwLjczNDM3NSAtMC42NTYyNSAwLjczNDM3NSAtMS40MDYyNXptNy4wNTQ2ODc1IDAuNDUzMTI1bC0xLjEwOTM3NSAyLjk1MzEyNWwtMS41IDBsLTEuMzQzNzUgLTUuNXEtMC40Mzc1IC0wLjAxNTYyNSAtMC42NzE4NzUgLTAuMjM0Mzc1cS0wLjIxODc1IC0wLjIzNDM3NSAtMC4yMTg3NSAtMC41NjI1cTAgLTAuMzU5Mzc1IDAuMjUgLTAuNTc4MTI1cTAuMjUgLTAuMjE4NzUgMC44MjgxMjUgLTAuMjE4NzVsMS40ODQzNzUgMHEwLjU3ODEyNSAwIDAuODI4MTI1IDAuMjE4NzVxMC4yNSAwLjIxODc1IDAuMjUgMC41NzgxMjVxMCAwLjM1OTM3NSAtMC4yODEyNSAwLjYwOTM3NXEtMC4yMTg3NSAwLjE4NzUgLTAuODI4MTI1IDAuMTg3NWwwLjYwOTM3NSAyLjU0Njg3NWwwLjk4NDM3NSAtMi42MDkzNzVsMS40MjE4NzUgMGwxLjAgMi42MDkzNzVsMC42MjUgLTIuNTQ2ODc1cS0wLjU5Mzc1IDAgLTAuNzgxMjUgLTAuMTA5Mzc1cS0wLjM3NSAtMC4yNSAtMC4zNzUgLTAuNjg3NXEwIC0wLjM1OTM3NSAwLjI1IC0wLjU3ODEyNXEwLjI1IC0wLjIxODc1IDAuODI4MTI1IC0wLjIxODc1bDEuNSAwcTAuNTc4MTI1IDAgMC44MjgxMjUgMC4yMTg3NXEwLjI1IDAuMjE4NzUgMC4yNSAwLjU3ODEyNXEwIDAuMzI4MTI1IC0wLjIxODc1IDAuNTQ2ODc1cS0wLjIxODc1IDAuMjE4NzUgLTAuNjQwNjI1IDAuMjVsLTEuMzEyNSA1LjVsLTEuNDg0Mzc1IDBsLTEuMTcxODc1IC0yLjk1MzEyNXptMTEuMzIwMzEyNSAtMi4yNjU2MjVxLTAuMzkwNjI1IC0wLjI1IC0wLjgyODEyNSAtMC4zNTkzNzVxLTAuNDIxODc1IC0wLjEyNSAtMC44OTA2MjUgLTAuMTI1cS0wLjkyMTg3NSAwIC0xLjQ2ODc1IDAuMjk2ODc1cS0wLjI1IDAuMTQwNjI1IC0wLjI1IDAuMjk2ODc1cTAgMC4xNzE4NzUgMC4zMjgxMjUgMC4zNDM3NXEwLjI1IDAuMTI1IDEuMTI1IDAuMjVxMS41OTM3NSAwLjIxODc1IDIuMjE4NzUgMC40Mzc1cTAuODEyNSAwLjI4MTI1IDEuMjUgMC44NTkzNzVxMC40NTMxMjUgMC41NjI1IDAuNDUzMTI1IDEuMjAzMTI1cTAgMC44NTkzNzUgLTAuNzUgMS40Mzc1cS0xLjA5Mzc1IDAuODQzNzUgLTIuODI4MTI1IDAuODQzNzVxLTAuNjg3NSAwIC0xLjI4MTI1IC0wLjEyNXEtMC41OTM3NSAtMC4xMjUgLTEuMDc4MTI1IC0wLjM1OTM3NXEtMC4xMjUgMC4wOTM3NSAtMC4yNjU2MjUgMC4xNTYyNXEtMC4xMjUgMC4wNDY4NzUgLTAuMjY1NjI1IDAuMDQ2ODc1cS0wLjM3NSAwIC0wLjU5Mzc1IC0wLjIzNDM3NXEtMC4yMTg3NSAtMC4yNSAtMC4yMTg3NSAtMC44MjgxMjVsMCAtMC41NDY4NzVxMCAtMC41NzgxMjUgMC4yMTg3NSAtMC44MTI1cTAuMjE4NzUgLTAuMjUgMC41NzgxMjUgLTAuMjVxMC4yOTY4NzUgMCAwLjQ4NDM3NSAwLjE1NjI1cTAuMjAzMTI1IDAuMTU2MjUgMC4zMTI1IDAuNTQ2ODc1cTAuMzU5Mzc1IDAuMzEyNSAwLjg3NSAwLjQ4NDM3NXEwLjUxNTYyNSAwLjE1NjI1IDEuMTg3NSAwLjE1NjI1cTEuMTA5Mzc1IDAgMS43MTg3NSAtMC4zNDM3NXEwLjI4MTI1IC0wLjE3MTg3NSAwLjI4MTI1IC0wLjM1OTM3NXEwIC0wLjMxMjUgLTAuNDA2MjUgLTAuNTE1NjI1cS0wLjQyMTg3NSAtMC4yMDMxMjUgLTEuNzE4NzUgLTAuMzQzNzVxLTEuOTIxODc1IC0wLjIwMzEyNSAtMi41NzgxMjUgLTAuNzgxMjVxLTAuNjQwNjI1IC0wLjU3ODEyNSAtMC42NDA2MjUgLTEuNDA2MjVxMCAtMC44NTkzNzUgMC43MTg3NSAtMS40Mzc1cTAuOTg0Mzc1IC0wLjc4MTI1IDIuNTc4MTI1IC0wLjc4MTI1cTAuNTYyNSAwIDEuMDYyNSAwLjEwOTM3NXEwLjUxNTYyNSAwLjEwOTM3NSAwLjk4NDM3NSAwLjMyODEyNXEwLjE1NjI1IC0wLjEwOTM3NSAwLjI4MTI1IC0wLjE1NjI1cTAuMTI1IC0wLjA2MjUgMC4yMzQzNzUgLTAuMDYyNXEwLjMyODEyNSAwIDAuNTQ2ODc1IDAuMjVxMC4yMTg3NSAwLjIzNDM3NSAwLjIxODc1IDAuODEyNWwwIDAuMzkwNjI1cTAgMC41MzEyNSAtMC4xMjUgMC43MTg3NXEtMC4yNSAwLjM1OTM3NSAtMC42NzE4NzUgMC4zNTkzNzVxLTAuMjk2ODc1IDAgLTAuNTE1NjI1IC0wLjE3MTg3NXEtMC4yMTg3NSAtMC4xODc1IC0wLjI4MTI1IC0wLjQ4NDM3NXptNi45NDUzMTI1IDEuOTY4NzVsMCAxLjY0MDYyNWwxLjYyNSAwcTAuNTc4MTI1IDAgMC44MTI1IDAuMjM0Mzc1cTAuMjUgMC4yMTg3NSAwLjI1IDAuNTc4MTI1cTAgMC4zNDM3NSAtMC4yNSAwLjU3ODEyNXEtMC4yMzQzNzUgMC4yMTg3NSAtMC44MTI1IDAuMjE4NzVsLTMuNDY4NzUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjM0Mzc1IC0wLjI1IC0wLjU5Mzc1cTAgLTAuMzQzNzUgMC4yNSAtMC41NjI1cTAuMjUgLTAuMjM0Mzc1IDAuODI4MTI1IC0wLjIzNDM3NWwwLjI1IDBsMCAtNi4yNjU2MjVsLTAuMjUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjE4NzUgLTAuMjUgLTAuNTc4MTI1cTAgLTAuMzU5Mzc1IDAuMjUgLTAuNTc4MTI1cTAuMjUgLTAuMjM0Mzc1IDAuODI4MTI1IC0wLjIzNDM3NWwzLjY4NzUgMC4wMTU2MjVxMS42MjUgMCAyLjU2MjUgMC44OTA2MjVxMC45NTMxMjUgMC44NzUgMC45NTMxMjUgMi4xNTYyNXEwIDAuNzAzMTI1IC0wLjMxMjUgMS4zMjgxMjVxLTAuMjUgMC40Njg3NSAtMC44MTI1IDAuOTIxODc1cS0wLjU2MjUgMC40NTMxMjUgLTEuMTU2MjUgMC42ODc1cS0wLjU5Mzc1IDAuMjM0Mzc1IC0xLjU2MjUgMC4yMzQzNzVsLTEuNTE1NjI1IDB6bTAgLTEuNjA5Mzc1bDEuNDg0Mzc1IDBxMS4wNDY4NzUgMCAxLjY1NjI1IC0wLjQ2ODc1cTAuNjI1IC0wLjQ2ODc1IDAuNjI1IC0xLjE0MDYyNXEwIC0wLjU2MjUgLTAuNSAtMC45ODQzNzVxLTAuNSAtMC40MjE4NzUgLTEuNDIxODc1IC0wLjQyMTg3NWwtMS44NDM3NSAwbDAgMy4wMTU2MjV6bTExLjk3NjU2MjUgNC44NTkzNzVsMCAtMC4zNzVxLTAuNjA5Mzc1IDAuMzEyNSAtMS4zNDM3NSAwLjQ2ODc1cS0wLjcxODc1IDAuMTcxODc1IC0xLjMxMjUgMC4xNzE4NzVxLTEuMjgxMjUgMCAtMi4wOTM3NSAtMC42ODc1cS0wLjc5Njg3NSAtMC42ODc1IC0wLjc5Njg3NSAtMS41MTU2MjVxMCAtMS4wIDEuMDE1NjI1IC0xLjg1OTM3NXExLjAzMTI1IC0wLjg3NSAyLjg0Mzc1IC0wLjg3NXEwLjczNDM3NSAwIDEuNjg3NSAwLjE1NjI1bDAgLTAuMzc1cTAgLTAuMzU5Mzc1IC0wLjMxMjUgLTAuNTc4MTI1cS0wLjMxMjUgLTAuMjM0Mzc1IC0xLjE3MTg3NSAtMC4yMzQzNzVxLTAuNzE4NzUgMCAtMS44NDM3NSAwLjI4MTI1cS0wLjQyMTg3NSAwLjA5Mzc1IC0wLjY1NjI1IDAuMDkzNzVxLTAuMzI4MTI1IDAgLTAuNTQ2ODc1IC0wLjIxODc1cS0wLjIxODc1IC0wLjIzNDM3NSAtMC4yMTg3NSAtMC41OTM3NXEwIC0wLjIwMzEyNSAwLjA3ODEyNSAtMC4zNDM3NXEwLjA3ODEyNSAtMC4xNTYyNSAwLjIxODc1IC0wLjI1cTAuMTQwNjI1IC0wLjA5Mzc1IDAuNTc4MTI1IC0wLjIxODc1cTAuNTkzNzUgLTAuMTU2MjUgMS4yMDMxMjUgLTAuMjVxMC42MjUgLTAuMTA5Mzc1IDEuMTI1IC0wLjEwOTM3NXExLjUgMCAyLjMxMjUgMC42NTYyNXEwLjgyODEyNSAwLjY0MDYyNSAwLjgyODEyNSAxLjc1bDAgMy4yOTY4NzVsMC4yODEyNSAwcTAuNTc4MTI1IDAgMC44MTI1IDAuMjM0Mzc1cTAuMjUgMC4yMTg3NSAwLjI1IDAuNTc4MTI1cTAgMC4zNDM3NSAtMC4yNSAwLjU3ODEyNXEtMC4yMzQzNzUgMC4yMTg3NSAtMC44MTI1IDAuMjE4NzVsLTEuODc1IDB6bTAgLTIuODc1cS0wLjk2ODc1IC0wLjE4NzUgLTEuNzgxMjUgLTAuMTg3NXEtMC45Njg3NSAwIC0xLjY3MTg3NSAwLjQ4NDM3NXEtMC40Mzc1IDAuMjk2ODc1IC0wLjQzNzUgMC42MDkzNzVxMCAwLjIzNDM3NSAwLjIwMzEyNSAwLjM3NXEwLjM5MDYyNSAwLjI1IDEuMDc4MTI1IDAuMjVxMC41NzgxMjUgMCAxLjI5Njg3NSAtMC4yMTg3NXEwLjczNDM3NSAtMC4yMzQzNzUgMS4zMTI1IC0wLjYyNWwwIC0wLjY4NzV6bTcuNzU3ODEyNSAtMi42MjVsMCAzLjIxODc1cTAgMC41MTU2MjUgMC4yMTg3NSAwLjY3MTg3NXEwLjMyODEyNSAwLjI2NTYyNSAxLjE3MTg3NSAwLjI2NTYyNXExLjIxODc1IDAgMi4yNjU2MjUgLTAuNTMxMjVxMC4zOTA2MjUgLTAuMjAzMTI1IDAuNjI1IC0wLjIwMzEyNXEwLjMxMjUgMCAwLjUzMTI1IDAuMjM0Mzc1cTAuMjM0Mzc1IDAuMjM0Mzc1IDAuMjM0Mzc1IDAuNTc4MTI1cTAgMC4zMTI1IC0wLjI1IDAuNTMxMjVxLTAuMzc1IDAuMzc1IC0xLjUxNTYyNSAwLjY4NzVxLTEuMTI1IDAuMzEyNSAtMS44OTA2MjUgMC4zMTI1cS0xLjUgMCAtMi4yNSAtMC42NDA2MjVxLTAuNzM0Mzc1IC0wLjY1NjI1IC0wLjczNDM3NSAtMS41OTM3NWwwIC0zLjUzMTI1bC0wLjU3ODEyNSAwcS0wLjU3ODEyNSAwIC0wLjgyODEyNSAtMC4yMTg3NXEtMC4yNSAtMC4yMTg3NSAtMC4yNSAtMC41NzgxMjVxMCAtMC4zNTkzNzUgMC4yNSAtMC41NzgxMjVxMC4yNSAtMC4yMTg3NSAwLjgyODEyNSAtMC4yMTg3NWwwLjU3ODEyNSAwbDAgLTEuNDUzMTI1cTAgLTAuNTc4MTI1IDAuMjE4NzUgLTAuODEyNXEwLjIxODc1IC0wLjI1IDAuNTc4MTI1IC0wLjI1cTAuMzU5Mzc1IDAgMC41NzgxMjUgMC4yNXEwLjIxODc1IDAuMjM0Mzc1IDAuMjE4NzUgMC44MTI1bDAgMS40NTMxMjVsMi45Njg3NSAwcTAuNTc4MTI1IDAgMC44MTI1IDAuMjE4NzVxMC4yNSAwLjIxODc1IDAuMjUgMC41NzgxMjVxMCAwLjM1OTM3NSAtMC4yNSAwLjU3ODEyNXEtMC4yMzQzNzUgMC4yMTg3NSAtMC44MTI1IDAuMjE4NzVsLTIuOTY4NzUgMHptOC4zNTE1NjI1IC00LjY0MDYyNWwwIDMuNDIxODc1cTAuNSAtMC4yOTY4NzUgMS4wIC0wLjQzNzVxMC41MTU2MjUgLTAuMTU2MjUgMS4wNDY4NzUgLTAuMTU2MjVxMC44MjgxMjUgMCAxLjQ2ODc1IDAuMjgxMjVxMC42NTYyNSAwLjI4MTI1IDEuMDc4MTI1IDAuODkwNjI1cTAuNDIxODc1IDAuNjA5Mzc1IDAuNDIxODc1IDEuNTMxMjVsMCAzLjBxMC42MDkzNzUgMCAwLjc5Njg3NSAwLjEyNXEwLjM3NSAwLjIzNDM3NSAwLjM3NSAwLjY4NzVxMCAwLjM0Mzc1IC0wLjI1IDAuNTc4MTI1cS0wLjIzNDM3NSAwLjIxODc1IC0wLjgxMjUgMC4yMTg3NWwtMS44MjgxMjUgMHEtMC41NjI1IDAgLTAuODEyNSAtMC4yMTg3NXEtMC4yNSAtMC4yMzQzNzUgLTAuMjUgLTAuNTkzNzVxMCAtMC40Mzc1IDAuMzc1IC0wLjY3MTg3NXEwLjIwMzEyNSAtMC4xMjUgMC43OTY4NzUgLTAuMTI1bDAgLTIuODkwNjI1cTAgLTAuNjI1IC0wLjI4MTI1IC0wLjg3NXEtMC4zNTkzNzUgLTAuMzI4MTI1IC0xLjA3ODEyNSAtMC4zMjgxMjVxLTAuNTMxMjUgMCAtMC45NTMxMjUgMC4yMDMxMjVxLTAuNDA2MjUgMC4yMDMxMjUgLTEuMDkzNzUgMC44OTA2MjVsMCAzLjBxMC42MDkzNzUgMCAwLjc5Njg3NSAwLjEyNXEwLjM3NSAwLjIzNDM3NSAwLjM3NSAwLjY4NzVxMCAwLjM0Mzc1IC0wLjI1IDAuNTc4MTI1cS0wLjIzNDM3NSAwLjIxODc1IC0wLjgxMjUgMC4yMTg3NWwtMS44MjgxMjUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjM0Mzc1IC0wLjIzNDM3NSAtMC4yMzQzNzUgLTAuNTkzNzVxMCAtMC40Mzc1IDAuMzc1IC0wLjY3MTg3NXEwLjE4NzUgLTAuMTI1IDAuNzk2ODc1IC0wLjEyNWwwIC02LjkyMTg3NWwtMC4yNjU2MjUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjM0Mzc1IC0wLjI1IC0wLjU5Mzc1cTAgLTAuMzQzNzUgMC4yNSAtMC41NjI1cTAuMjUgLTAuMjM0Mzc1IDAuODI4MTI1IC0wLjIzNDM3NWwxLjg3NSAweiIgZmlsbC1ydWxlPSJub256ZXJvIj48L3BhdGg+PHBhdGggZmlsbD0iIzAwMDAwMCIgZmlsbC1vcGFjaXR5PSIwLjAiIGQ9Im05Ni4wIDE0NC4wbDAgLTgwLjBsODAuMCAwIiBmaWxsLXJ1bGU9Im5vbnplcm8iPjwvcGF0aD48cGF0aCBzdHJva2U9IiMwMDAwMDAiIHN0cm9rZS13aWR0aD0iMi4wIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2UtbGluZWNhcD0iYnV0dCIgZD0ibTk2LjAgMTQ0LjBsMCAtODAuMGw2OC4wIDAiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PC9wYXRoPjxwYXRoIHN0cm9rZT0iIzAwMDAwMCIgc3Ryb2tlLXdpZHRoPSIyLjAiIHN0cm9rZS1saW5lY2FwPSJidXR0IiBkPSJtMTY0LjAgNjcuMzAzNDdsOS4wNzYyMDIgLTMuMzAzNDY2OGwtOS4wNzYyMDIgLTMuMzAzNDYzeiIgZmlsbC1ydWxlPSJldmVub2RkIj48L3BhdGg+PHBhdGggZmlsbD0iIzAwMDAwMCIgZmlsbC1vcGFjaXR5PSIwLjAiIGQ9Im00MzEuNTAxMyAxNDMuMDgzOThsMCAtNzguOTk5OTlsLTY4LjAgMCIgZmlsbC1ydWxlPSJub256ZXJvIj48L3BhdGg+PHBhdGggc3Ryb2tlPSIjMDAwMDAwIiBzdHJva2Utd2lkdGg9IjIuMCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLWxpbmVjYXA9ImJ1dHQiIGQ9Im00MzEuNTAxMyAxNDMuMDgzOThsMCAtNzguOTk5OTlsLTU2LjAgMCIgZmlsbC1ydWxlPSJldmVub2RkIj48L3BhdGg+PHBhdGggc3Ryb2tlPSIjMDAwMDAwIiBzdHJva2Utd2lkdGg9IjIuMCIgc3Ryb2tlLWxpbmVjYXA9ImJ1dHQiIGQ9Im0zNzUuNTAxMyA2MC43ODA1MjVsLTkuMDc2MjAyIDMuMzAzNDY2OGw5LjA3NjIwMiAzLjMwMzQ1OTJ6IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjwvcGF0aD48cGF0aCBmaWxsPSIjMDAwMDAwIiBmaWxsLW9wYWNpdHk9IjAuMCIgZD0ibTI2OS43MTY1MiAxMDQuNTM1NDNsMCAxNjYuOTI5MTQiIGZpbGwtcnVsZT0ibm9uemVybyI+PC9wYXRoPjxwYXRoIHN0cm9rZT0iIzAwMDAwMCIgc3Ryb2tlLXdpZHRoPSIyLjAiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1saW5lY2FwPSJidXR0IiBkPSJtMjY5LjcxNjUyIDExNi41MzU0M2wwIDE1NC45MjkxNCIgZmlsbC1ydWxlPSJldmVub2RkIj48L3BhdGg+PHBhdGggc3Ryb2tlPSIjMDAwMDAwIiBzdHJva2Utd2lkdGg9IjIuMCIgc3Ryb2tlLWxpbmVjYXA9ImJ1dHQiIGQ9Im0yNzMuMDIgMTE2LjUzNTQzbC0zLjMwMzQ2NjggLTkuMDc2MTk1bC0zLjMwMzQ2NjggOS4wNzYxOTV6IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjwvcGF0aD48cGF0aCBmaWxsPSIjMDAwMDAwIiBmaWxsLW9wYWNpdHk9IjAuMCIgZD0ibTY1LjAgMjIzLjA4Mzk4bC0xLjAwNzg3MzUgMTc2LjkxMzM5IiBmaWxsLXJ1bGU9Im5vbnplcm8iPjwvcGF0aD48cGF0aCBzdHJva2U9IiMwMDAwMDAiIHN0cm9rZS13aWR0aD0iMi4wIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2UtbGluZWNhcD0iYnV0dCIgZD0ibTY0LjkzMTYzIDIzNS4wODM3OWwtMC45Mzk1MDY1MyAxNjQuOTEzNTkiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PC9wYXRoPjxwYXRoIHN0cm9rZT0iIzAwMDAwMCIgc3Ryb2tlLXdpZHRoPSIyLjAiIHN0cm9rZS1saW5lY2FwPSJidXR0IiBkPSJtNjguMjM1MDUgMjM1LjEwMjYybC0zLjI1MTcwMTQgLTkuMDk0ODY0bC0zLjM1NTExNzggOS4wNTcyMnoiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PC9wYXRoPjxwYXRoIGZpbGw9IiMwMDAwMDAiIGZpbGwtb3BhY2l0eT0iMC4wIiBkPSJtNDcxLjAgMjI0LjM4MDU4bC0xLjAwNzg3MzUgMTc2LjkxMzM2IiBmaWxsLXJ1bGU9Im5vbnplcm8iPjwvcGF0aD48cGF0aCBzdHJva2U9IiMwMDAwMDAiIHN0cm9rZS13aWR0aD0iMi4wIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2UtbGluZWNhcD0iYnV0dCIgZD0ibTQ3MC45MzE2NCAyMzYuMzgwMzdsLTAuOTM5NTE0MTYgMTY0LjkxMzYiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PC9wYXRoPjxwYXRoIHN0cm9rZT0iIzAwMDAwMCIgc3Ryb2tlLXdpZHRoPSIyLjAiIHN0cm9rZS1saW5lY2FwPSJidXR0IiBkPSJtNDc0LjIzNTA1IDIzNi4zOTkybC0zLjI1MTcwOSAtOS4wOTQ4NjRsLTMuMzU1MTAyNSA5LjA1NzIyeiIgZmlsbC1ydWxlPSJldmVub2RkIj48L3BhdGg+PHBhdGggZmlsbD0iIzAwMDAwMCIgZmlsbC1vcGFjaXR5PSIwLjAiIGQ9Im0xMjguNTAxMzEgNDAwLjAwMjY2bDAgLTg2LjE2OGw0Ny40OTYwMDIgMCIgZmlsbC1ydWxlPSJub256ZXJvIj48L3BhdGg+PHBhdGggc3Ryb2tlPSIjMDAwMDAwIiBzdHJva2Utd2lkdGg9IjIuMCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLWxpbmVjYXA9ImJ1dHQiIGQ9Im0xMjguNTAxMzEgNDAwLjAwMjY2bDAgLTg2LjE2OGwzNS40OTYwMDIgMCIgZmlsbC1ydWxlPSJldmVub2RkIj48L3BhdGg+PHBhdGggc3Ryb2tlPSIjMDAwMDAwIiBzdHJva2Utd2lkdGg9IjIuMCIgc3Ryb2tlLWxpbmVjYXA9ImJ1dHQiIGQ9Im0xNjMuOTk3MzEgMzE3LjEzODEybDkuMDc2MjAyIC0zLjMwMzQ2NjhsLTkuMDc2MjAyIC0zLjMwMzQ2Njh6IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjwvcGF0aD48cGF0aCBmaWxsPSIjMDAwMDAwIiBmaWxsLW9wYWNpdHk9IjAuMCIgZD0ibTQxNC43MTkwMiA0MDAuMDAyNjZsMCAtODYuMTY4bC01MS4yMTYwMDMgMCIgZmlsbC1ydWxlPSJub256ZXJvIj48L3BhdGg+PHBhdGggc3Ryb2tlPSIjMDAwMDAwIiBzdHJva2Utd2lkdGg9IjIuMCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLWxpbmVjYXA9ImJ1dHQiIGQ9Im00MTQuNzE5MDIgNDAwLjAwMjY2bDAgLTg2LjE2OGwtMzkuMjE2MDAzIDAiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PC9wYXRoPjxwYXRoIHN0cm9rZT0iIzAwMDAwMCIgc3Ryb2tlLXdpZHRoPSIyLjAiIHN0cm9rZS1saW5lY2FwPSJidXR0IiBkPSJtMzc1LjUwMzAyIDMxMC41MzEybC05LjA3NjE3MiAzLjMwMzQ2NjhsOS4wNzYxNzIgMy4zMDM0NjY4eiIgZmlsbC1ydWxlPSJldmVub2RkIj48L3BhdGg+PC9nPjwvc3ZnPgorCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9wYXRobGliLnJzdCBiL0RvYy9saWJyYXJ5L3BhdGhsaWIucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0ZTJhMzAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2MvbGlicmFyeS9wYXRobGliLnJzdApAQCAtMCwwICsxLDkxOSBAQAorCis6bW9kOmBwYXRobGliYCAtLS0gT2JqZWN0LW9yaWVudGVkIGZpbGVzeXN0ZW0gcGF0aHMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisuLiBtb2R1bGU6OiBwYXRobGliCisgICA6c3lub3BzaXM6IE9iamVjdC1vcmllbnRlZCBmaWxlc3lzdGVtIHBhdGhzCisKKy4uIGluZGV4Ojogc2luZ2xlOiBwYXRoOyBvcGVyYXRpb25zCisKKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorCitUaGlzIG1vZHVsZSBvZmZlcnMgY2xhc3NlcyByZXByZXNlbnRpbmcgZmlsZXN5c3RlbSBwYXRocyB3aXRoIHNlbWFudGljcworYXBwcm9wcmlhdGUgZm9yIGRpZmZlcmVudCBvcGVyYXRpbmcgc3lzdGVtcy4gIFBhdGggY2xhc3NlcyBhcmUgZGl2aWRlZAorYmV0d2VlbiA6cmVmOmBwdXJlIHBhdGhzIDxwdXJlLXBhdGhzPmAsIHdoaWNoIHByb3ZpZGUgcHVyZWx5IGNvbXB1dGF0aW9uYWwKK29wZXJhdGlvbnMgd2l0aG91dCBJL08sIGFuZCA6cmVmOmBjb25jcmV0ZSBwYXRocyA8Y29uY3JldGUtcGF0aHM+YCwgd2hpY2gKK2luaGVyaXQgZnJvbSBwdXJlIHBhdGhzIGJ1dCBhbHNvIHByb3ZpZGUgSS9PIG9wZXJhdGlvbnMuCisKKy4uIGltYWdlOjogcGF0aGxpYi1pbmhlcml0YW5jZS5wbmcKKyAgIDphbGlnbjogY2VudGVyCisKK0lmIHlvdSd2ZSBuZXZlciB1c2VkIHRoaXMgbW9kdWxlIGJlZm9yZSBvciBqdXN0IGFyZW4ndCBzdXJlIHdoaWNoIGNsYXNzIGlzCityaWdodCBmb3IgeW91ciB0YXNrLCA6Y2xhc3M6YFBhdGhgIGlzIG1vc3QgbGlrZWx5IHdoYXQgeW91IG5lZWQuIEl0IGluc3RhbnRpYXRlcworYSA6cmVmOmBjb25jcmV0ZSBwYXRoIDxjb25jcmV0ZS1wYXRocz5gIGZvciB0aGUgcGxhdGZvcm0gdGhlIGNvZGUgaXMgcnVubmluZyBvbi4KKworUHVyZSBwYXRocyBhcmUgdXNlZnVsIGluIHNvbWUgc3BlY2lhbCBjYXNlczsgZm9yIGV4YW1wbGU6CisKKyMuIElmIHlvdSB3YW50IHRvIG1hbmlwdWxhdGUgV2luZG93cyBwYXRocyBvbiBhIFVuaXggbWFjaGluZSAob3IgdmljZSB2ZXJzYSkuCisgICBZb3UgY2Fubm90IGluc3RhbnRpYXRlIGEgOmNsYXNzOmBXaW5kb3dzUGF0aGAgd2hlbiBydW5uaW5nIG9uIFVuaXgsIGJ1dCB5b3UKKyAgIGNhbiBpbnN0YW50aWF0ZSA6Y2xhc3M6YFB1cmVXaW5kb3dzUGF0aGAuCisjLiBZb3Ugd2FudCB0byBtYWtlIHN1cmUgdGhhdCB5b3VyIGNvZGUgb25seSBtYW5pcHVsYXRlcyBwYXRocyB3aXRob3V0IGFjdHVhbGx5CisgICBhY2Nlc3NpbmcgdGhlIE9TLiBJbiB0aGlzIGNhc2UsIGluc3RhbnRpYXRpbmcgb25lIG9mIHRoZSBwdXJlIGNsYXNzZXMgbWF5IGJlCisgICB1c2VmdWwgc2luY2UgdGhvc2Ugc2ltcGx5IGRvbid0IGhhdmUgYW55IE9TLWFjY2Vzc2luZyBvcGVyYXRpb25zLgorCisuLiBub3RlOjoKKyAgIFRoaXMgbW9kdWxlIGhhcyBiZWVuIGluY2x1ZGVkIGluIHRoZSBzdGFuZGFyZCBsaWJyYXJ5IG9uIGEKKyAgIDp0ZXJtOmBwcm92aXNpb25hbCBiYXNpcyA8cHJvdmlzaW9uYWwgcGFja2FnZT5gLiBCYWNrd2FyZHMgaW5jb21wYXRpYmxlCisgICBjaGFuZ2VzICh1cCB0byBhbmQgaW5jbHVkaW5nIHJlbW92YWwgb2YgdGhlIHBhY2thZ2UpIG1heSBvY2N1ciBpZiBkZWVtZWQKKyAgIG5lY2Vzc2FyeSBieSB0aGUgY29yZSBkZXZlbG9wZXJzLgorCisuLiBzZWVhbHNvOjoKKyAgIDpwZXA6YDQyOGA6IFRoZSBwYXRobGliIG1vZHVsZSAtLSBvYmplY3Qtb3JpZW50ZWQgZmlsZXN5c3RlbSBwYXRocy4KKworLi4gc2VlYWxzbzo6CisgICBGb3IgbG93LWxldmVsIHBhdGggbWFuaXB1bGF0aW9uIG9uIHN0cmluZ3MsIHlvdSBjYW4gYWxzbyB1c2UgdGhlCisgICA6bW9kOmBvcy5wYXRoYCBtb2R1bGUuCisKKworQmFzaWMgdXNlCistLS0tLS0tLS0KKworSW1wb3J0aW5nIHRoZSBtYWluIGNsYXNzOjoKKworICAgPj4+IGZyb20gcGF0aGxpYiBpbXBvcnQgUGF0aAorCitMaXN0aW5nIHN1YmRpcmVjdG9yaWVzOjoKKworICAgPj4+IHAgPSBQYXRoKCcuJykKKyAgID4+PiBbeCBmb3IgeCBpbiBwLml0ZXJkaXIoKSBpZiB4LmlzX2RpcigpXQorICAgW1Bvc2l4UGF0aCgnLmhnJyksIFBvc2l4UGF0aCgnZG9jcycpLCBQb3NpeFBhdGgoJ2Rpc3QnKSwKKyAgICBQb3NpeFBhdGgoJ19fcHljYWNoZV9fJyksIFBvc2l4UGF0aCgnYnVpbGQnKV0KKworTGlzdGluZyBQeXRob24gc291cmNlIGZpbGVzIGluIHRoaXMgZGlyZWN0b3J5IHRyZWU6OgorCisgICA+Pj4gbGlzdChwLmdsb2IoJyoqLyoucHknKSkKKyAgIFtQb3NpeFBhdGgoJ3Rlc3RfcGF0aGxpYi5weScpLCBQb3NpeFBhdGgoJ3NldHVwLnB5JyksCisgICAgUG9zaXhQYXRoKCdwYXRobGliLnB5JyksIFBvc2l4UGF0aCgnZG9jcy9jb25mLnB5JyksCisgICAgUG9zaXhQYXRoKCdidWlsZC9saWIvcGF0aGxpYi5weScpXQorCitOYXZpZ2F0aW5nIGluc2lkZSBhIGRpcmVjdG9yeSB0cmVlOjoKKworICAgPj4+IHAgPSBQYXRoKCcvZXRjJykKKyAgID4+PiBxID0gcCAvICdpbml0LmQnIC8gJ3JlYm9vdCcKKyAgID4+PiBxCisgICBQb3NpeFBhdGgoJy9ldGMvaW5pdC5kL3JlYm9vdCcpCisgICA+Pj4gcS5yZXNvbHZlKCkKKyAgIFBvc2l4UGF0aCgnL2V0Yy9yYy5kL2luaXQuZC9oYWx0JykKKworUXVlcnlpbmcgcGF0aCBwcm9wZXJ0aWVzOjoKKworICAgPj4+IHEuZXhpc3RzKCkKKyAgIFRydWUKKyAgID4+PiBxLmlzX2RpcigpCisgICBGYWxzZQorCitPcGVuaW5nIGEgZmlsZTo6CisKKyAgID4+PiB3aXRoIHEub3BlbigpIGFzIGY6IGYucmVhZGxpbmUoKQorICAgLi4uCisgICAnIyEvYmluL2Jhc2hcbicKKworCisuLiBfcHVyZS1wYXRoczoKKworUHVyZSBwYXRocworLS0tLS0tLS0tLQorCitQdXJlIHBhdGggb2JqZWN0cyBwcm92aWRlIHBhdGgtaGFuZGxpbmcgb3BlcmF0aW9ucyB3aGljaCBkb24ndCBhY3R1YWxseQorYWNjZXNzIGEgZmlsZXN5c3RlbS4gIFRoZXJlIGFyZSB0aHJlZSB3YXlzIHRvIGFjY2VzcyB0aGVzZSBjbGFzc2VzLCB3aGljaAord2UgYWxzbyBjYWxsICpmbGF2b3Vycyo6CisKKy4uIGNsYXNzOjogUHVyZVBhdGgoKnBhdGhzZWdtZW50cykKKworICAgQSBnZW5lcmljIGNsYXNzIHRoYXQgcmVwcmVzZW50cyB0aGUgc3lzdGVtJ3MgcGF0aCBmbGF2b3VyIChpbnN0YW50aWF0aW5nCisgICBpdCBjcmVhdGVzIGVpdGhlciBhIDpjbGFzczpgUHVyZVBvc2l4UGF0aGAgb3IgYSA6Y2xhc3M6YFB1cmVXaW5kb3dzUGF0aGApOjoKKworICAgICAgPj4+IFB1cmVQYXRoKCdzZXR1cC5weScpICAgICAgIyBSdW5uaW5nIG9uIGEgVW5peCBtYWNoaW5lCisgICAgICBQdXJlUG9zaXhQYXRoKCdzZXR1cC5weScpCisKKyAgIEVhY2ggZWxlbWVudCBvZiAqcGF0aHNlZ21lbnRzKiBjYW4gYmUgZWl0aGVyIGEgc3RyaW5nIHJlcHJlc2VudGluZyBhCisgICBwYXRoIHNlZ21lbnQsIG9yIGFub3RoZXIgcGF0aCBvYmplY3Q6OgorCisgICAgICA+Pj4gUHVyZVBhdGgoJ2ZvbycsICdzb21lL3BhdGgnLCAnYmFyJykKKyAgICAgIFB1cmVQb3NpeFBhdGgoJ2Zvby9zb21lL3BhdGgvYmFyJykKKyAgICAgID4+PiBQdXJlUGF0aChQYXRoKCdmb28nKSwgUGF0aCgnYmFyJykpCisgICAgICBQdXJlUG9zaXhQYXRoKCdmb28vYmFyJykKKworICAgV2hlbiAqcGF0aHNlZ21lbnRzKiBpcyBlbXB0eSwgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGlzIGFzc3VtZWQ6OgorCisgICAgICA+Pj4gUHVyZVBhdGgoKQorICAgICAgUHVyZVBvc2l4UGF0aCgnLicpCisKKyAgIFdoZW4gc2V2ZXJhbCBhYnNvbHV0ZSBwYXRocyBhcmUgZ2l2ZW4sIHRoZSBsYXN0IGlzIHRha2VuIGFzIGFuIGFuY2hvcgorICAgKG1pbWlja2luZyA6ZnVuYzpgb3MucGF0aC5qb2luYCdzIGJlaGF2aW91cik6OgorCisgICAgICA+Pj4gUHVyZVBhdGgoJy9ldGMnLCAnL3VzcicsICdsaWI2NCcpCisgICAgICBQdXJlUG9zaXhQYXRoKCcvdXNyL2xpYjY0JykKKyAgICAgID4+PiBQdXJlV2luZG93c1BhdGgoJ2M6L1dpbmRvd3MnLCAnZDpiYXInKQorICAgICAgUHVyZVdpbmRvd3NQYXRoKCdkOmJhcicpCisKKyAgIEhvd2V2ZXIsIGluIGEgV2luZG93cyBwYXRoLCBjaGFuZ2luZyB0aGUgbG9jYWwgcm9vdCBkb2Vzbid0IGRpc2NhcmQgdGhlCisgICBwcmV2aW91cyBkcml2ZSBzZXR0aW5nOjoKKworICAgICAgPj4+IFB1cmVXaW5kb3dzUGF0aCgnYzovV2luZG93cycsICcvUHJvZ3JhbSBGaWxlcycpCisgICAgICBQdXJlV2luZG93c1BhdGgoJ2M6L1Byb2dyYW0gRmlsZXMnKQorCisgICBTcHVyaW91cyBzbGFzaGVzIGFuZCBzaW5nbGUgZG90cyBhcmUgY29sbGFwc2VkLCBidXQgZG91YmxlIGRvdHMgKGBgJy4uJ2BgKQorICAgYXJlIG5vdCwgc2luY2UgdGhpcyB3b3VsZCBjaGFuZ2UgdGhlIG1lYW5pbmcgb2YgYSBwYXRoIGluIHRoZSBmYWNlIG9mCisgICBzeW1ib2xpYyBsaW5rczo6CisKKyAgICAgID4+PiBQdXJlUGF0aCgnZm9vLy9iYXInKQorICAgICAgUHVyZVBvc2l4UGF0aCgnZm9vL2JhcicpCisgICAgICA+Pj4gUHVyZVBhdGgoJ2Zvby8uL2JhcicpCisgICAgICBQdXJlUG9zaXhQYXRoKCdmb28vYmFyJykKKyAgICAgID4+PiBQdXJlUGF0aCgnZm9vLy4uL2JhcicpCisgICAgICBQdXJlUG9zaXhQYXRoKCdmb28vLi4vYmFyJykKKworICAgKGEgbmHDr3ZlIGFwcHJvYWNoIHdvdWxkIG1ha2UgYGBQdXJlUG9zaXhQYXRoKCdmb28vLi4vYmFyJylgYCBlcXVpdmFsZW50CisgICB0byBgYFB1cmVQb3NpeFBhdGgoJ2JhcicpYGAsIHdoaWNoIGlzIHdyb25nIGlmIGBgZm9vYGAgaXMgYSBzeW1ib2xpYyBsaW5rCisgICB0byBhbm90aGVyIGRpcmVjdG9yeSkKKworLi4gY2xhc3M6OiBQdXJlUG9zaXhQYXRoKCpwYXRoc2VnbWVudHMpCisKKyAgIEEgc3ViY2xhc3Mgb2YgOmNsYXNzOmBQdXJlUGF0aGAsIHRoaXMgcGF0aCBmbGF2b3VyIHJlcHJlc2VudHMgbm9uLVdpbmRvd3MKKyAgIGZpbGVzeXN0ZW0gcGF0aHM6OgorCisgICAgICA+Pj4gUHVyZVBvc2l4UGF0aCgnL2V0YycpCisgICAgICBQdXJlUG9zaXhQYXRoKCcvZXRjJykKKworICAgKnBhdGhzZWdtZW50cyogaXMgc3BlY2lmaWVkIHNpbWlsYXJseSB0byA6Y2xhc3M6YFB1cmVQYXRoYC4KKworLi4gY2xhc3M6OiBQdXJlV2luZG93c1BhdGgoKnBhdGhzZWdtZW50cykKKworICAgQSBzdWJjbGFzcyBvZiA6Y2xhc3M6YFB1cmVQYXRoYCwgdGhpcyBwYXRoIGZsYXZvdXIgcmVwcmVzZW50cyBXaW5kb3dzCisgICBmaWxlc3lzdGVtIHBhdGhzOjoKKworICAgICAgPj4+IFB1cmVXaW5kb3dzUGF0aCgnYzovUHJvZ3JhbSBGaWxlcy8nKQorICAgICAgUHVyZVdpbmRvd3NQYXRoKCdjOi9Qcm9ncmFtIEZpbGVzJykKKworICAgKnBhdGhzZWdtZW50cyogaXMgc3BlY2lmaWVkIHNpbWlsYXJseSB0byA6Y2xhc3M6YFB1cmVQYXRoYC4KKworUmVnYXJkbGVzcyBvZiB0aGUgc3lzdGVtIHlvdSdyZSBydW5uaW5nIG9uLCB5b3UgY2FuIGluc3RhbnRpYXRlIGFsbCBvZgordGhlc2UgY2xhc3Nlcywgc2luY2UgdGhleSBkb24ndCBwcm92aWRlIGFueSBvcGVyYXRpb24gdGhhdCBkb2VzIHN5c3RlbSBjYWxscy4KKworCitHZW5lcmFsIHByb3BlcnRpZXMKK15eXl5eXl5eXl5eXl5eXl5eXgorCitQYXRocyBhcmUgaW1tdXRhYmxlIGFuZCBoYXNoYWJsZS4gIFBhdGhzIG9mIGEgc2FtZSBmbGF2b3VyIGFyZSBjb21wYXJhYmxlCithbmQgb3JkZXJhYmxlLiAgVGhlc2UgcHJvcGVydGllcyByZXNwZWN0IHRoZSBmbGF2b3VyJ3MgY2FzZS1mb2xkaW5nCitzZW1hbnRpY3M6OgorCisgICA+Pj4gUHVyZVBvc2l4UGF0aCgnZm9vJykgPT0gUHVyZVBvc2l4UGF0aCgnRk9PJykKKyAgIEZhbHNlCisgICA+Pj4gUHVyZVdpbmRvd3NQYXRoKCdmb28nKSA9PSBQdXJlV2luZG93c1BhdGgoJ0ZPTycpCisgICBUcnVlCisgICA+Pj4gUHVyZVdpbmRvd3NQYXRoKCdGT08nKSBpbiB7IFB1cmVXaW5kb3dzUGF0aCgnZm9vJykgfQorICAgVHJ1ZQorICAgPj4+IFB1cmVXaW5kb3dzUGF0aCgnQzonKSA8IFB1cmVXaW5kb3dzUGF0aCgnZDonKQorICAgVHJ1ZQorCitQYXRocyBvZiBhIGRpZmZlcmVudCBmbGF2b3VyIGNvbXBhcmUgdW5lcXVhbCBhbmQgY2Fubm90IGJlIG9yZGVyZWQ6OgorCisgICA+Pj4gUHVyZVdpbmRvd3NQYXRoKCdmb28nKSA9PSBQdXJlUG9zaXhQYXRoKCdmb28nKQorICAgRmFsc2UKKyAgID4+PiBQdXJlV2luZG93c1BhdGgoJ2ZvbycpIDwgUHVyZVBvc2l4UGF0aCgnZm9vJykKKyAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgMSwgaW4gPG1vZHVsZT4KKyAgIFR5cGVFcnJvcjogdW5vcmRlcmFibGUgdHlwZXM6IFB1cmVXaW5kb3dzUGF0aCgpIDwgUHVyZVBvc2l4UGF0aCgpCisKKworT3BlcmF0b3JzCiteXl5eXl5eXl4KKworVGhlIHNsYXNoIG9wZXJhdG9yIGhlbHBzIGNyZWF0ZSBjaGlsZCBwYXRocywgc2ltaWxhcmx5IHRvIDpmdW5jOmBvcy5wYXRoLmpvaW5gOjoKKworICAgPj4+IHAgPSBQdXJlUGF0aCgnL2V0YycpCisgICA+Pj4gcAorICAgUHVyZVBvc2l4UGF0aCgnL2V0YycpCisgICA+Pj4gcCAvICdpbml0LmQnIC8gJ2FwYWNoZTInCisgICBQdXJlUG9zaXhQYXRoKCcvZXRjL2luaXQuZC9hcGFjaGUyJykKKyAgID4+PiBxID0gUHVyZVBhdGgoJ2JpbicpCisgICA+Pj4gJy91c3InIC8gcQorICAgUHVyZVBvc2l4UGF0aCgnL3Vzci9iaW4nKQorCitUaGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgcGF0aCBpcyB0aGUgcmF3IGZpbGVzeXN0ZW0gcGF0aCBpdHNlbGYKKyhpbiBuYXRpdmUgZm9ybSwgZS5nLiB3aXRoIGJhY2tzbGFzaGVzIHVuZGVyIFdpbmRvd3MpLCB3aGljaCB5b3UgY2FuCitwYXNzIHRvIGFueSBmdW5jdGlvbiB0YWtpbmcgYSBmaWxlIHBhdGggYXMgYSBzdHJpbmc6OgorCisgICA+Pj4gcCA9IFB1cmVQYXRoKCcvZXRjJykKKyAgID4+PiBzdHIocCkKKyAgICcvZXRjJworICAgPj4+IHAgPSBQdXJlV2luZG93c1BhdGgoJ2M6L1Byb2dyYW0gRmlsZXMnKQorICAgPj4+IHN0cihwKQorICAgJ2M6XFxQcm9ncmFtIEZpbGVzJworCitTaW1pbGFybHksIGNhbGxpbmcgOmNsYXNzOmBieXRlc2Agb24gYSBwYXRoIGdpdmVzIHRoZSByYXcgZmlsZXN5c3RlbSBwYXRoIGFzIGEKK2J5dGVzIG9iamVjdCwgYXMgZW5jb2RlZCBieSA6ZnVuYzpgb3MuZnNlbmNvZGVgOjoKKworICAgPj4+IGJ5dGVzKHApCisgICBiJy9ldGMnCisKKy4uIG5vdGU6OgorICAgQ2FsbGluZyA6Y2xhc3M6YGJ5dGVzYCBpcyBvbmx5IHJlY29tbWVuZGVkIHVuZGVyIFVuaXguICBVbmRlciBXaW5kb3dzLAorICAgdGhlIHVuaWNvZGUgZm9ybSBpcyB0aGUgY2Fub25pY2FsIHJlcHJlc2VudGF0aW9uIG9mIGZpbGVzeXN0ZW0gcGF0aHMuCisKKworQWNjZXNzaW5nIGluZGl2aWR1YWwgcGFydHMKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKK1RvIGFjY2VzcyB0aGUgaW5kaXZpZHVhbCAicGFydHMiIChjb21wb25lbnRzKSBvZiBhIHBhdGgsIHVzZSB0aGUgZm9sbG93aW5nCitwcm9wZXJ0eToKKworLi4gZGF0YTo6IFB1cmVQYXRoLnBhcnRzCisKKyAgIEEgdHVwbGUgZ2l2aW5nIGFjY2VzcyB0byB0aGUgcGF0aCdzIHZhcmlvdXMgY29tcG9uZW50czo6CisKKyAgICAgID4+PiBwID0gUHVyZVBhdGgoJy91c3IvYmluL3B5dGhvbjMnKQorICAgICAgPj4+IHAucGFydHMKKyAgICAgICgnLycsICd1c3InLCAnYmluJywgJ3B5dGhvbjMnKQorCisgICAgICA+Pj4gcCA9IFB1cmVXaW5kb3dzUGF0aCgnYzovUHJvZ3JhbSBGaWxlcy9QU0YnKQorICAgICAgPj4+IHAucGFydHMKKyAgICAgICgnYzpcXCcsICdQcm9ncmFtIEZpbGVzJywgJ1BTRicpCisKKyAgIChub3RlIGhvdyB0aGUgZHJpdmUgYW5kIGxvY2FsIHJvb3QgYXJlIHJlZ3JvdXBlZCBpbiBhIHNpbmdsZSBwYXJ0KQorCisKK01ldGhvZHMgYW5kIHByb3BlcnRpZXMKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworUHVyZSBwYXRocyBwcm92aWRlIHRoZSBmb2xsb3dpbmcgbWV0aG9kcyBhbmQgcHJvcGVydGllczoKKworLi4gZGF0YTo6IFB1cmVQYXRoLmRyaXZlCisKKyAgIEEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgZHJpdmUgbGV0dGVyIG9yIG5hbWUsIGlmIGFueTo6CisKKyAgICAgID4+PiBQdXJlV2luZG93c1BhdGgoJ2M6L1Byb2dyYW0gRmlsZXMvJykuZHJpdmUKKyAgICAgICdjOicKKyAgICAgID4+PiBQdXJlV2luZG93c1BhdGgoJy9Qcm9ncmFtIEZpbGVzLycpLmRyaXZlCisgICAgICAnJworICAgICAgPj4+IFB1cmVQb3NpeFBhdGgoJy9ldGMnKS5kcml2ZQorICAgICAgJycKKworICAgVU5DIHNoYXJlcyBhcmUgYWxzbyBjb25zaWRlcmVkIGRyaXZlczo6CisKKyAgICAgID4+PiBQdXJlV2luZG93c1BhdGgoJy8vaG9zdC9zaGFyZS9mb28udHh0JykuZHJpdmUKKyAgICAgICdcXFxcaG9zdFxcc2hhcmUnCisKKy4uIGRhdGE6OiBQdXJlUGF0aC5yb290CisKKyAgIEEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgKGxvY2FsIG9yIGdsb2JhbCkgcm9vdCwgaWYgYW55OjoKKworICAgICAgPj4+IFB1cmVXaW5kb3dzUGF0aCgnYzovUHJvZ3JhbSBGaWxlcy8nKS5yb290CisgICAgICAnXFwnCisgICAgICA+Pj4gUHVyZVdpbmRvd3NQYXRoKCdjOlByb2dyYW0gRmlsZXMvJykucm9vdAorICAgICAgJycKKyAgICAgID4+PiBQdXJlUG9zaXhQYXRoKCcvZXRjJykucm9vdAorICAgICAgJy8nCisKKyAgIFVOQyBzaGFyZXMgYWx3YXlzIGhhdmUgYSByb290OjoKKworICAgICAgPj4+IFB1cmVXaW5kb3dzUGF0aCgnLy9ob3N0L3NoYXJlJykucm9vdAorICAgICAgJ1xcJworCisuLiBkYXRhOjogUHVyZVBhdGguYW5jaG9yCisKKyAgIFRoZSBjb25jYXRlbmF0aW9uIG9mIHRoZSBkcml2ZSBhbmQgcm9vdDo6CisKKyAgICAgID4+PiBQdXJlV2luZG93c1BhdGgoJ2M6L1Byb2dyYW0gRmlsZXMvJykuYW5jaG9yCisgICAgICAnYzpcXCcKKyAgICAgID4+PiBQdXJlV2luZG93c1BhdGgoJ2M6UHJvZ3JhbSBGaWxlcy8nKS5hbmNob3IKKyAgICAgICdjOicKKyAgICAgID4+PiBQdXJlUG9zaXhQYXRoKCcvZXRjJykuYW5jaG9yCisgICAgICAnLycKKyAgICAgID4+PiBQdXJlV2luZG93c1BhdGgoJy8vaG9zdC9zaGFyZScpLmFuY2hvcgorICAgICAgJ1xcXFxob3N0XFxzaGFyZVxcJworCisKKy4uIGRhdGE6OiBQdXJlUGF0aC5wYXJlbnRzCisKKyAgIEFuIGltbXV0YWJsZSBzZXF1ZW5jZSBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBsb2dpY2FsIGFuY2VzdG9ycyBvZgorICAgdGhlIHBhdGg6OgorCisgICAgICA+Pj4gcCA9IFB1cmVXaW5kb3dzUGF0aCgnYzovZm9vL2Jhci9zZXR1cC5weScpCisgICAgICA+Pj4gcC5wYXJlbnRzWzBdCisgICAgICBQdXJlV2luZG93c1BhdGgoJ2M6L2Zvby9iYXInKQorICAgICAgPj4+IHAucGFyZW50c1sxXQorICAgICAgUHVyZVdpbmRvd3NQYXRoKCdjOi9mb28nKQorICAgICAgPj4+IHAucGFyZW50c1syXQorICAgICAgUHVyZVdpbmRvd3NQYXRoKCdjOi8nKQorCisKKy4uIGRhdGE6OiBQdXJlUGF0aC5wYXJlbnQKKworICAgVGhlIGxvZ2ljYWwgcGFyZW50IG9mIHRoZSBwYXRoOjoKKworICAgICAgPj4+IHAgPSBQdXJlUG9zaXhQYXRoKCcvYS9iL2MvZCcpCisgICAgICA+Pj4gcC5wYXJlbnQKKyAgICAgIFB1cmVQb3NpeFBhdGgoJy9hL2IvYycpCisKKyAgIFlvdSBjYW5ub3QgZ28gcGFzdCBhbiBhbmNob3IsIG9yIGVtcHR5IHBhdGg6OgorCisgICAgICA+Pj4gcCA9IFB1cmVQb3NpeFBhdGgoJy8nKQorICAgICAgPj4+IHAucGFyZW50CisgICAgICBQdXJlUG9zaXhQYXRoKCcvJykKKyAgICAgID4+PiBwID0gUHVyZVBvc2l4UGF0aCgnLicpCisgICAgICA+Pj4gcC5wYXJlbnQKKyAgICAgIFB1cmVQb3NpeFBhdGgoJy4nKQorCisgICAuLiBub3RlOjoKKyAgICAgIFRoaXMgaXMgYSBwdXJlbHkgbGV4aWNhbCBvcGVyYXRpb24sIGhlbmNlIHRoZSBmb2xsb3dpbmcgYmVoYXZpb3VyOjoKKworICAgICAgICAgPj4+IHAgPSBQdXJlUG9zaXhQYXRoKCdmb28vLi4nKQorICAgICAgICAgPj4+IHAucGFyZW50CisgICAgICAgICBQdXJlUG9zaXhQYXRoKCdmb28nKQorCisgICAgICBJZiB5b3Ugd2FudCB0byB3YWxrIGFuIGFyYml0cmFyeSBmaWxlc3lzdGVtIHBhdGggdXB3YXJkcywgaXQgaXMKKyAgICAgIHJlY29tbWVuZGVkIHRvIGZpcnN0IGNhbGwgOm1ldGg6YFBhdGgucmVzb2x2ZWAgc28gYXMgdG8gcmVzb2x2ZQorICAgICAgc3ltbGlua3MgYW5kIGVsaW1pbmF0ZSBgIi4uImAgY29tcG9uZW50cy4KKworCisuLiBkYXRhOjogUHVyZVBhdGgubmFtZQorCisgICBBIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGZpbmFsIHBhdGggY29tcG9uZW50LCBleGNsdWRpbmcgdGhlIGRyaXZlIGFuZAorICAgcm9vdCwgaWYgYW55OjoKKworICAgICAgPj4+IFB1cmVQb3NpeFBhdGgoJ215L2xpYnJhcnkvc2V0dXAucHknKS5uYW1lCisgICAgICAnc2V0dXAucHknCisKKyAgIFVOQyBkcml2ZSBuYW1lcyBhcmUgbm90IGNvbnNpZGVyZWQ6OgorCisgICAgICA+Pj4gUHVyZVdpbmRvd3NQYXRoKCcvL3NvbWUvc2hhcmUvc2V0dXAucHknKS5uYW1lCisgICAgICAnc2V0dXAucHknCisgICAgICA+Pj4gUHVyZVdpbmRvd3NQYXRoKCcvL3NvbWUvc2hhcmUnKS5uYW1lCisgICAgICAnJworCisKKy4uIGRhdGE6OiBQdXJlUGF0aC5zdWZmaXgKKworICAgVGhlIGZpbGUgZXh0ZW5zaW9uIG9mIHRoZSBmaW5hbCBjb21wb25lbnQsIGlmIGFueTo6CisKKyAgICAgID4+PiBQdXJlUG9zaXhQYXRoKCdteS9saWJyYXJ5L3NldHVwLnB5Jykuc3VmZml4CisgICAgICAnLnB5JworICAgICAgPj4+IFB1cmVQb3NpeFBhdGgoJ215L2xpYnJhcnkudGFyLmd6Jykuc3VmZml4CisgICAgICAnLmd6JworICAgICAgPj4+IFB1cmVQb3NpeFBhdGgoJ215L2xpYnJhcnknKS5zdWZmaXgKKyAgICAgICcnCisKKworLi4gZGF0YTo6IFB1cmVQYXRoLnN1ZmZpeGVzCisKKyAgIEEgbGlzdCBvZiB0aGUgcGF0aCdzIGZpbGUgZXh0ZW5zaW9uczo6CisKKyAgICAgID4+PiBQdXJlUG9zaXhQYXRoKCdteS9saWJyYXJ5LnRhci5nYXInKS5zdWZmaXhlcworICAgICAgWycudGFyJywgJy5nYXInXQorICAgICAgPj4+IFB1cmVQb3NpeFBhdGgoJ215L2xpYnJhcnkudGFyLmd6Jykuc3VmZml4ZXMKKyAgICAgIFsnLnRhcicsICcuZ3onXQorICAgICAgPj4+IFB1cmVQb3NpeFBhdGgoJ215L2xpYnJhcnknKS5zdWZmaXhlcworICAgICAgW10KKworCisuLiBkYXRhOjogUHVyZVBhdGguc3RlbQorCisgICBUaGUgZmluYWwgcGF0aCBjb21wb25lbnQsIHdpdGhvdXQgaXRzIHN1ZmZpeDo6CisKKyAgICAgID4+PiBQdXJlUG9zaXhQYXRoKCdteS9saWJyYXJ5LnRhci5neicpLnN0ZW0KKyAgICAgICdsaWJyYXJ5LnRhcicKKyAgICAgID4+PiBQdXJlUG9zaXhQYXRoKCdteS9saWJyYXJ5LnRhcicpLnN0ZW0KKyAgICAgICdsaWJyYXJ5JworICAgICAgPj4+IFB1cmVQb3NpeFBhdGgoJ215L2xpYnJhcnknKS5zdGVtCisgICAgICAnbGlicmFyeScKKworCisuLiBtZXRob2Q6OiBQdXJlUGF0aC5hc19wb3NpeCgpCisKKyAgIFJldHVybiBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgcGF0aCB3aXRoIGZvcndhcmQgc2xhc2hlcyAoYGAvYGApOjoKKworICAgICAgPj4+IHAgPSBQdXJlV2luZG93c1BhdGgoJ2M6XFx3aW5kb3dzJykKKyAgICAgID4+PiBzdHIocCkKKyAgICAgICdjOlxcd2luZG93cycKKyAgICAgID4+PiBwLmFzX3Bvc2l4KCkKKyAgICAgICdjOi93aW5kb3dzJworCisKKy4uIG1ldGhvZDo6IFB1cmVQYXRoLmFzX3VyaSgpCisKKyAgIFJlcHJlc2VudCB0aGUgcGF0aCBhcyBhIGBgZmlsZWBgIFVSSS4gIDpleGM6YFZhbHVlRXJyb3JgIGlzIHJhaXNlZCBpZgorICAgdGhlIHBhdGggaXNuJ3QgYWJzb2x1dGUuCisKKyAgICAgID4+PiBwID0gUHVyZVBvc2l4UGF0aCgnL2V0Yy9wYXNzd2QnKQorICAgICAgPj4+IHAuYXNfdXJpKCkKKyAgICAgICdmaWxlOi8vL2V0Yy9wYXNzd2QnCisgICAgICA+Pj4gcCA9IFB1cmVXaW5kb3dzUGF0aCgnYzovV2luZG93cycpCisgICAgICA+Pj4gcC5hc191cmkoKQorICAgICAgJ2ZpbGU6Ly8vYzovV2luZG93cycKKworCisuLiBtZXRob2Q6OiBQdXJlUGF0aC5pc19hYnNvbHV0ZSgpCisKKyAgIFJldHVybiB3aGV0aGVyIHRoZSBwYXRoIGlzIGFic29sdXRlIG9yIG5vdC4gIEEgcGF0aCBpcyBjb25zaWRlcmVkIGFic29sdXRlCisgICBpZiBpdCBoYXMgYm90aCBhIHJvb3QgYW5kIChpZiB0aGUgZmxhdm91ciBhbGxvd3MpIGEgZHJpdmU6OgorCisgICAgICA+Pj4gUHVyZVBvc2l4UGF0aCgnL2EvYicpLmlzX2Fic29sdXRlKCkKKyAgICAgIFRydWUKKyAgICAgID4+PiBQdXJlUG9zaXhQYXRoKCdhL2InKS5pc19hYnNvbHV0ZSgpCisgICAgICBGYWxzZQorCisgICAgICA+Pj4gUHVyZVdpbmRvd3NQYXRoKCdjOi9hL2InKS5pc19hYnNvbHV0ZSgpCisgICAgICBUcnVlCisgICAgICA+Pj4gUHVyZVdpbmRvd3NQYXRoKCcvYS9iJykuaXNfYWJzb2x1dGUoKQorICAgICAgRmFsc2UKKyAgICAgID4+PiBQdXJlV2luZG93c1BhdGgoJ2M6JykuaXNfYWJzb2x1dGUoKQorICAgICAgRmFsc2UKKyAgICAgID4+PiBQdXJlV2luZG93c1BhdGgoJy8vc29tZS9zaGFyZScpLmlzX2Fic29sdXRlKCkKKyAgICAgIFRydWUKKworCisuLiBtZXRob2Q6OiBQdXJlUGF0aC5pc19yZXNlcnZlZCgpCisKKyAgIFdpdGggOmNsYXNzOmBQdXJlV2luZG93c1BhdGhgLCByZXR1cm4gYGBUcnVlYGAgaWYgdGhlIHBhdGggaXMgY29uc2lkZXJlZAorICAgcmVzZXJ2ZWQgdW5kZXIgV2luZG93cywgYGBGYWxzZWBgIG90aGVyd2lzZS4gIFdpdGggOmNsYXNzOmBQdXJlUG9zaXhQYXRoYCwKKyAgIGBgRmFsc2VgYCBpcyBhbHdheXMgcmV0dXJuZWQuCisKKyAgICAgID4+PiBQdXJlV2luZG93c1BhdGgoJ251bCcpLmlzX3Jlc2VydmVkKCkKKyAgICAgIFRydWUKKyAgICAgID4+PiBQdXJlUG9zaXhQYXRoKCdudWwnKS5pc19yZXNlcnZlZCgpCisgICAgICBGYWxzZQorCisgICBGaWxlIHN5c3RlbSBjYWxscyBvbiByZXNlcnZlZCBwYXRocyBjYW4gZmFpbCBteXN0ZXJpb3VzbHkgb3IgaGF2ZQorICAgdW5pbnRlbmRlZCBlZmZlY3RzLgorCisKKy4uIG1ldGhvZDo6IFB1cmVQYXRoLmpvaW5wYXRoKCpvdGhlcikKKworICAgQ2FsbGluZyB0aGlzIG1ldGhvZCBpcyBlcXVpdmFsZW50IHRvIGNvbWJpbmluZyB0aGUgcGF0aCB3aXRoIGVhY2ggb2YKKyAgIHRoZSAqb3RoZXIqIGFyZ3VtZW50cyBpbiB0dXJuOjoKKworICAgICAgPj4+IFB1cmVQb3NpeFBhdGgoJy9ldGMnKS5qb2lucGF0aCgncGFzc3dkJykKKyAgICAgIFB1cmVQb3NpeFBhdGgoJy9ldGMvcGFzc3dkJykKKyAgICAgID4+PiBQdXJlUG9zaXhQYXRoKCcvZXRjJykuam9pbnBhdGgoUHVyZVBvc2l4UGF0aCgncGFzc3dkJykpCisgICAgICBQdXJlUG9zaXhQYXRoKCcvZXRjL3Bhc3N3ZCcpCisgICAgICA+Pj4gUHVyZVBvc2l4UGF0aCgnL2V0YycpLmpvaW5wYXRoKCdpbml0LmQnLCAnYXBhY2hlMicpCisgICAgICBQdXJlUG9zaXhQYXRoKCcvZXRjL2luaXQuZC9hcGFjaGUyJykKKyAgICAgID4+PiBQdXJlV2luZG93c1BhdGgoJ2M6Jykuam9pbnBhdGgoJy9Qcm9ncmFtIEZpbGVzJykKKyAgICAgIFB1cmVXaW5kb3dzUGF0aCgnYzovUHJvZ3JhbSBGaWxlcycpCisKKworLi4gbWV0aG9kOjogUHVyZVBhdGgubWF0Y2gocGF0dGVybikKKworICAgTWF0Y2ggdGhpcyBwYXRoIGFnYWluc3QgdGhlIHByb3ZpZGVkIGdsb2Itc3R5bGUgcGF0dGVybi4gIFJldHVybiBgYFRydWVgYAorICAgaWYgbWF0Y2hpbmcgaXMgc3VjY2Vzc2Z1bCwgYGBGYWxzZWBgIG90aGVyd2lzZS4KKworICAgSWYgKnBhdHRlcm4qIGlzIHJlbGF0aXZlLCB0aGUgcGF0aCBjYW4gYmUgZWl0aGVyIHJlbGF0aXZlIG9yIGFic29sdXRlLAorICAgYW5kIG1hdGNoaW5nIGlzIGRvbmUgZnJvbSB0aGUgcmlnaHQ6OgorCisgICAgICA+Pj4gUHVyZVBhdGgoJ2EvYi5weScpLm1hdGNoKCcqLnB5JykKKyAgICAgIFRydWUKKyAgICAgID4+PiBQdXJlUGF0aCgnL2EvYi9jLnB5JykubWF0Y2goJ2IvKi5weScpCisgICAgICBUcnVlCisgICAgICA+Pj4gUHVyZVBhdGgoJy9hL2IvYy5weScpLm1hdGNoKCdhLyoucHknKQorICAgICAgRmFsc2UKKworICAgSWYgKnBhdHRlcm4qIGlzIGFic29sdXRlLCB0aGUgcGF0aCBtdXN0IGJlIGFic29sdXRlLCBhbmQgdGhlIHdob2xlIHBhdGgKKyAgIG11c3QgbWF0Y2g6OgorCisgICAgICA+Pj4gUHVyZVBhdGgoJy9hLnB5JykubWF0Y2goJy8qLnB5JykKKyAgICAgIFRydWUKKyAgICAgID4+PiBQdXJlUGF0aCgnYS9iLnB5JykubWF0Y2goJy8qLnB5JykKKyAgICAgIEZhbHNlCisKKyAgIEFzIHdpdGggb3RoZXIgbWV0aG9kcywgY2FzZS1zZW5zaXRpdml0eSBpcyBvYnNlcnZlZDo6CisKKyAgICAgID4+PiBQdXJlV2luZG93c1BhdGgoJ2IucHknKS5tYXRjaCgnKi5QWScpCisgICAgICBUcnVlCisKKworLi4gbWV0aG9kOjogUHVyZVBhdGgucmVsYXRpdmVfdG8oKm90aGVyKQorCisgICBDb21wdXRlIGEgdmVyc2lvbiBvZiB0aGlzIHBhdGggcmVsYXRpdmUgdG8gdGhlIHBhdGggcmVwcmVzZW50ZWQgYnkKKyAgICpvdGhlciouICBJZiBpdCdzIGltcG9zc2libGUsIFZhbHVlRXJyb3IgaXMgcmFpc2VkOjoKKworICAgICAgPj4+IHAgPSBQdXJlUG9zaXhQYXRoKCcvZXRjL3Bhc3N3ZCcpCisgICAgICA+Pj4gcC5yZWxhdGl2ZV90bygnLycpCisgICAgICBQdXJlUG9zaXhQYXRoKCdldGMvcGFzc3dkJykKKyAgICAgID4+PiBwLnJlbGF0aXZlX3RvKCcvZXRjJykKKyAgICAgIFB1cmVQb3NpeFBhdGgoJ3Bhc3N3ZCcpCisgICAgICA+Pj4gcC5yZWxhdGl2ZV90bygnL3VzcicpCisgICAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDEsIGluIDxtb2R1bGU+CisgICAgICAgIEZpbGUgInBhdGhsaWIucHkiLCBsaW5lIDY5NCwgaW4gcmVsYXRpdmVfdG8KKyAgICAgICAgICAuZm9ybWF0KHN0cihzZWxmKSwgc3RyKGZvcm1hdHRlZCkpKQorICAgICAgVmFsdWVFcnJvcjogJy9ldGMvcGFzc3dkJyBkb2VzIG5vdCBzdGFydCB3aXRoICcvdXNyJworCisKKy4uIG1ldGhvZDo6IFB1cmVQYXRoLndpdGhfbmFtZShuYW1lKQorCisgICBSZXR1cm4gYSBuZXcgcGF0aCB3aXRoIHRoZSA6YXR0cjpgbmFtZWAgY2hhbmdlZC4gIElmIHRoZSBvcmlnaW5hbCBwYXRoCisgICBkb2Vzbid0IGhhdmUgYSBuYW1lLCBWYWx1ZUVycm9yIGlzIHJhaXNlZDo6CisKKyAgICAgID4+PiBwID0gUHVyZVdpbmRvd3NQYXRoKCdjOi9Eb3dubG9hZHMvcGF0aGxpYi50YXIuZ3onKQorICAgICAgPj4+IHAud2l0aF9uYW1lKCdzZXR1cC5weScpCisgICAgICBQdXJlV2luZG93c1BhdGgoJ2M6L0Rvd25sb2Fkcy9zZXR1cC5weScpCisgICAgICA+Pj4gcCA9IFB1cmVXaW5kb3dzUGF0aCgnYzovJykKKyAgICAgID4+PiBwLndpdGhfbmFtZSgnc2V0dXAucHknKQorICAgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA8bW9kdWxlPgorICAgICAgICBGaWxlICIvaG9tZS9hbnRvaW5lL2NweXRob24vZGVmYXVsdC9MaWIvcGF0aGxpYi5weSIsIGxpbmUgNzUxLCBpbiB3aXRoX25hbWUKKyAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCIlciBoYXMgYW4gZW1wdHkgbmFtZSIgJSAoc2VsZiwpKQorICAgICAgVmFsdWVFcnJvcjogUHVyZVdpbmRvd3NQYXRoKCdjOi8nKSBoYXMgYW4gZW1wdHkgbmFtZQorCisKKy4uIG1ldGhvZDo6IFB1cmVQYXRoLndpdGhfc3VmZml4KHN1ZmZpeCkKKworICAgUmV0dXJuIGEgbmV3IHBhdGggd2l0aCB0aGUgOmF0dHI6YHN1ZmZpeGAgY2hhbmdlZC4gIElmIHRoZSBvcmlnaW5hbCBwYXRoCisgICBkb2Vzbid0IGhhdmUgYSBzdWZmaXgsIHRoZSBuZXcgKnN1ZmZpeCogaXMgYXBwZW5kZWQgaW5zdGVhZDo6CisKKyAgICAgID4+PiBwID0gUHVyZVdpbmRvd3NQYXRoKCdjOi9Eb3dubG9hZHMvcGF0aGxpYi50YXIuZ3onKQorICAgICAgPj4+IHAud2l0aF9zdWZmaXgoJy5iejInKQorICAgICAgUHVyZVdpbmRvd3NQYXRoKCdjOi9Eb3dubG9hZHMvcGF0aGxpYi50YXIuYnoyJykKKyAgICAgID4+PiBwID0gUHVyZVdpbmRvd3NQYXRoKCdSRUFETUUnKQorICAgICAgPj4+IHAud2l0aF9zdWZmaXgoJy50eHQnKQorICAgICAgUHVyZVdpbmRvd3NQYXRoKCdSRUFETUUudHh0JykKKworCisuLiBfY29uY3JldGUtcGF0aHM6CisKKworQ29uY3JldGUgcGF0aHMKKy0tLS0tLS0tLS0tLS0tCisKK0NvbmNyZXRlIHBhdGhzIGFyZSBzdWJjbGFzc2VzIG9mIHRoZSBwdXJlIHBhdGggY2xhc3Nlcy4gIEluIGFkZGl0aW9uIHRvCitvcGVyYXRpb25zIHByb3ZpZGVkIGJ5IHRoZSBsYXR0ZXIsIHRoZXkgYWxzbyBwcm92aWRlIG1ldGhvZHMgdG8gZG8gc3lzdGVtCitjYWxscyBvbiBwYXRoIG9iamVjdHMuICBUaGVyZSBhcmUgdGhyZWUgd2F5cyB0byBpbnN0YW50aWF0ZSBjb25jcmV0ZSBwYXRoczoKKworLi4gY2xhc3M6OiBQYXRoKCpwYXRoc2VnbWVudHMpCisKKyAgIEEgc3ViY2xhc3Mgb2YgOmNsYXNzOmBQdXJlUGF0aGAsIHRoaXMgY2xhc3MgcmVwcmVzZW50cyBjb25jcmV0ZSBwYXRocyBvZgorICAgdGhlIHN5c3RlbSdzIHBhdGggZmxhdm91ciAoaW5zdGFudGlhdGluZyBpdCBjcmVhdGVzIGVpdGhlciBhCisgICA6Y2xhc3M6YFBvc2l4UGF0aGAgb3IgYSA6Y2xhc3M6YFdpbmRvd3NQYXRoYCk6OgorCisgICAgICA+Pj4gUGF0aCgnc2V0dXAucHknKQorICAgICAgUG9zaXhQYXRoKCdzZXR1cC5weScpCisKKyAgICpwYXRoc2VnbWVudHMqIGlzIHNwZWNpZmllZCBzaW1pbGFybHkgdG8gOmNsYXNzOmBQdXJlUGF0aGAuCisKKy4uIGNsYXNzOjogUG9zaXhQYXRoKCpwYXRoc2VnbWVudHMpCisKKyAgIEEgc3ViY2xhc3Mgb2YgOmNsYXNzOmBQYXRoYCBhbmQgOmNsYXNzOmBQdXJlUG9zaXhQYXRoYCwgdGhpcyBjbGFzcworICAgcmVwcmVzZW50cyBjb25jcmV0ZSBub24tV2luZG93cyBmaWxlc3lzdGVtIHBhdGhzOjoKKworICAgICAgPj4+IFBvc2l4UGF0aCgnL2V0YycpCisgICAgICBQb3NpeFBhdGgoJy9ldGMnKQorCisgICAqcGF0aHNlZ21lbnRzKiBpcyBzcGVjaWZpZWQgc2ltaWxhcmx5IHRvIDpjbGFzczpgUHVyZVBhdGhgLgorCisuLiBjbGFzczo6IFdpbmRvd3NQYXRoKCpwYXRoc2VnbWVudHMpCisKKyAgIEEgc3ViY2xhc3Mgb2YgOmNsYXNzOmBQYXRoYCBhbmQgOmNsYXNzOmBQdXJlV2luZG93c1BhdGhgLCB0aGlzIGNsYXNzCisgICByZXByZXNlbnRzIGNvbmNyZXRlIFdpbmRvd3MgZmlsZXN5c3RlbSBwYXRoczo6CisKKyAgICAgID4+PiBXaW5kb3dzUGF0aCgnYzovUHJvZ3JhbSBGaWxlcy8nKQorICAgICAgV2luZG93c1BhdGgoJ2M6L1Byb2dyYW0gRmlsZXMnKQorCisgICAqcGF0aHNlZ21lbnRzKiBpcyBzcGVjaWZpZWQgc2ltaWxhcmx5IHRvIDpjbGFzczpgUHVyZVBhdGhgLgorCitZb3UgY2FuIG9ubHkgaW5zdGFudGlhdGUgdGhlIGNsYXNzIGZsYXZvdXIgdGhhdCBjb3JyZXNwb25kcyB0byB5b3VyIHN5c3RlbQorKGFsbG93aW5nIHN5c3RlbSBjYWxscyBvbiBub24tY29tcGF0aWJsZSBwYXRoIGZsYXZvdXJzIGNvdWxkIGxlYWQgdG8KK2J1Z3Mgb3IgZmFpbHVyZXMgaW4geW91ciBhcHBsaWNhdGlvbik6OgorCisgICA+Pj4gaW1wb3J0IG9zCisgICA+Pj4gb3MubmFtZQorICAgJ3Bvc2l4JworICAgPj4+IFBhdGgoJ3NldHVwLnB5JykKKyAgIFBvc2l4UGF0aCgnc2V0dXAucHknKQorICAgPj4+IFBvc2l4UGF0aCgnc2V0dXAucHknKQorICAgUG9zaXhQYXRoKCdzZXR1cC5weScpCisgICA+Pj4gV2luZG93c1BhdGgoJ3NldHVwLnB5JykKKyAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgMSwgaW4gPG1vZHVsZT4KKyAgICAgRmlsZSAicGF0aGxpYi5weSIsIGxpbmUgNzk4LCBpbiBfX25ld19fCisgICAgICAgJSAoY2xzLl9fbmFtZV9fLCkpCisgICBOb3RJbXBsZW1lbnRlZEVycm9yOiBjYW5ub3QgaW5zdGFudGlhdGUgJ1dpbmRvd3NQYXRoJyBvbiB5b3VyIHN5c3RlbQorCisKK01ldGhvZHMKK15eXl5eXl4KKworQ29uY3JldGUgcGF0aHMgcHJvdmlkZSB0aGUgZm9sbG93aW5nIG1ldGhvZHMgaW4gYWRkaXRpb24gdG8gcHVyZSBwYXRocworbWV0aG9kcy4gIE1hbnkgb2YgdGhlc2UgbWV0aG9kcyBjYW4gcmFpc2UgYW4gOmV4YzpgT1NFcnJvcmAgaWYgYSBzeXN0ZW0KK2NhbGwgZmFpbHMgKGZvciBleGFtcGxlIGJlY2F1c2UgdGhlIHBhdGggZG9lc24ndCBleGlzdCk6CisKKy4uIGNsYXNzbWV0aG9kOjogUGF0aC5jd2QoKQorCisgICBSZXR1cm4gYSBuZXcgcGF0aCBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IGRpcmVjdG9yeSAoYXMgcmV0dXJuZWQKKyAgIGJ5IDpmdW5jOmBvcy5nZXRjd2RgKTo6CisKKyAgICAgID4+PiBQYXRoLmN3ZCgpCisgICAgICBQb3NpeFBhdGgoJy9ob21lL2FudG9pbmUvcGF0aGxpYicpCisKKworLi4gbWV0aG9kOjogUGF0aC5zdGF0KCkKKworICAgUmV0dXJuIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgcGF0aCAoc2ltaWxhcmx5IHRvIDpmdW5jOmBvcy5zdGF0YCkuCisgICBUaGUgcmVzdWx0IGlzIGxvb2tlZCB1cCBhdCBlYWNoIGNhbGwgdG8gdGhpcyBtZXRob2QuCisKKyAgICAgID4+PiBwID0gUGF0aCgnc2V0dXAucHknKQorICAgICAgPj4+IHAuc3RhdCgpLnN0X3NpemUKKyAgICAgIDk1NgorICAgICAgPj4+IHAuc3RhdCgpLnN0X210aW1lCisgICAgICAxMzI3ODgzNTQ3Ljg1MjU1NAorCisKKy4uIG1ldGhvZDo6IFBhdGguY2htb2QobW9kZSkKKworICAgQ2hhbmdlIHRoZSBmaWxlIG1vZGUgYW5kIHBlcm1pc3Npb25zLCBsaWtlIDpmdW5jOmBvcy5jaG1vZGA6OgorCisgICAgICA+Pj4gcCA9IFBhdGgoJ3NldHVwLnB5JykKKyAgICAgID4+PiBwLnN0YXQoKS5zdF9tb2RlCisgICAgICAzMzI3NworICAgICAgPj4+IHAuY2htb2QoMG80NDQpCisgICAgICA+Pj4gcC5zdGF0KCkuc3RfbW9kZQorICAgICAgMzMwNjAKKworCisuLiBtZXRob2Q6OiBQYXRoLmV4aXN0cygpCisKKyAgIFdoZXRoZXIgdGhlIHBhdGggcG9pbnRzIHRvIGFuIGV4aXN0aW5nIGZpbGUgb3IgZGlyZWN0b3J5OjoKKworICAgICAgPj4+IFBhdGgoJy4nKS5leGlzdHMoKQorICAgICAgVHJ1ZQorICAgICAgPj4+IFBhdGgoJ3NldHVwLnB5JykuZXhpc3RzKCkKKyAgICAgIFRydWUKKyAgICAgID4+PiBQYXRoKCcvZXRjJykuZXhpc3RzKCkKKyAgICAgIFRydWUKKyAgICAgID4+PiBQYXRoKCdub25leGlzdGVudGZpbGUnKS5leGlzdHMoKQorICAgICAgRmFsc2UKKworICAgLi4gbm90ZTo6CisgICAgICBJZiB0aGUgcGF0aCBwb2ludHMgdG8gYSBzeW1saW5rLCA6bWV0aDpgZXhpc3RzYCByZXR1cm5zIHdoZXRoZXIgdGhlCisgICAgICBzeW1saW5rICpwb2ludHMgdG8qIGFuIGV4aXN0aW5nIGZpbGUgb3IgZGlyZWN0b3J5LgorCisKKy4uIG1ldGhvZDo6IFBhdGguZ2xvYihwYXR0ZXJuKQorCisgICBHbG9iIHRoZSBnaXZlbiAqcGF0dGVybiogaW4gdGhlIGRpcmVjdG9yeSByZXByZXNlbnRlZCBieSB0aGlzIHBhdGgsCisgICB5aWVsZGluZyBhbGwgbWF0Y2hpbmcgZmlsZXMgKG9mIGFueSBraW5kKTo6CisKKyAgICAgID4+PiBzb3J0ZWQoUGF0aCgnLicpLmdsb2IoJyoucHknKSkKKyAgICAgIFtQb3NpeFBhdGgoJ3BhdGhsaWIucHknKSwgUG9zaXhQYXRoKCdzZXR1cC5weScpLCBQb3NpeFBhdGgoJ3Rlc3RfcGF0aGxpYi5weScpXQorICAgICAgPj4+IHNvcnRlZChQYXRoKCcuJykuZ2xvYignKi8qLnB5JykpCisgICAgICBbUG9zaXhQYXRoKCdkb2NzL2NvbmYucHknKV0KKworICAgVGhlICJgYCoqYGAiIHBhdHRlcm4gbWVhbnMgInRoaXMgZGlyZWN0b3J5IGFuZCBhbGwgc3ViZGlyZWN0b3JpZXMsCisgICByZWN1cnNpdmVseSIuICBJbiBvdGhlciB3b3JkcywgaXQgZW5hYmxlcyByZWN1cnNpdmUgZ2xvYmJpbmc6OgorCisgICAgICA+Pj4gc29ydGVkKFBhdGgoJy4nKS5nbG9iKCcqKi8qLnB5JykpCisgICAgICBbUG9zaXhQYXRoKCdidWlsZC9saWIvcGF0aGxpYi5weScpLAorICAgICAgIFBvc2l4UGF0aCgnZG9jcy9jb25mLnB5JyksCisgICAgICAgUG9zaXhQYXRoKCdwYXRobGliLnB5JyksCisgICAgICAgUG9zaXhQYXRoKCdzZXR1cC5weScpLAorICAgICAgIFBvc2l4UGF0aCgndGVzdF9wYXRobGliLnB5JyldCisKKyAgIC4uIG5vdGU6OgorICAgICAgVXNpbmcgdGhlICJgYCoqYGAiIHBhdHRlcm4gaW4gbGFyZ2UgZGlyZWN0b3J5IHRyZWVzIG1heSBjb25zdW1lCisgICAgICBhbiBpbm9yZGluYXRlIGFtb3VudCBvZiB0aW1lLgorCisKKy4uIG1ldGhvZDo6IFBhdGguZ3JvdXAoKQorCisgICBSZXR1cm4gdGhlIG5hbWUgb2YgdGhlIGdyb3VwIG93bmluZyB0aGUgZmlsZS4gIDpleGM6YEtleUVycm9yYCBpcyByYWlzZWQKKyAgIGlmIHRoZSBmaWxlJ3MgZ2lkIGlzbid0IGZvdW5kIGluIHRoZSBzeXN0ZW0gZGF0YWJhc2UuCisKKworLi4gbWV0aG9kOjogUGF0aC5pc19kaXIoKQorCisgICBSZXR1cm4gYGBUcnVlYGAgaWYgdGhlIHBhdGggcG9pbnRzIHRvIGEgZGlyZWN0b3J5IChvciBhIHN5bWJvbGljIGxpbmsKKyAgIHBvaW50aW5nIHRvIGEgZGlyZWN0b3J5KSwgYGBGYWxzZWBgIGlmIGl0IHBvaW50cyB0byBhbm90aGVyIGtpbmQgb2YgZmlsZS4KKworICAgYGBGYWxzZWBgIGlzIGFsc28gcmV0dXJuZWQgaWYgdGhlIHBhdGggZG9lc24ndCBleGlzdCBvciBpcyBhIGJyb2tlbiBzeW1saW5rOworICAgb3RoZXIgZXJyb3JzIChzdWNoIGFzIHBlcm1pc3Npb24gZXJyb3JzKSBhcmUgcHJvcGFnYXRlZC4KKworCisuLiBtZXRob2Q6OiBQYXRoLmlzX2ZpbGUoKQorCisgICBSZXR1cm4gYGBUcnVlYGAgaWYgdGhlIHBhdGggcG9pbnRzIHRvIGEgcmVndWxhciBmaWxlIChvciBhIHN5bWJvbGljIGxpbmsKKyAgIHBvaW50aW5nIHRvIGEgcmVndWxhciBmaWxlKSwgYGBGYWxzZWBgIGlmIGl0IHBvaW50cyB0byBhbm90aGVyIGtpbmQgb2YgZmlsZS4KKworICAgYGBGYWxzZWBgIGlzIGFsc28gcmV0dXJuZWQgaWYgdGhlIHBhdGggZG9lc24ndCBleGlzdCBvciBpcyBhIGJyb2tlbiBzeW1saW5rOworICAgb3RoZXIgZXJyb3JzIChzdWNoIGFzIHBlcm1pc3Npb24gZXJyb3JzKSBhcmUgcHJvcGFnYXRlZC4KKworCisuLiBtZXRob2Q6OiBQYXRoLmlzX3N5bWxpbmsoKQorCisgICBSZXR1cm4gYGBUcnVlYGAgaWYgdGhlIHBhdGggcG9pbnRzIHRvIGEgc3ltYm9saWMgbGluaywgYGBGYWxzZWBgIG90aGVyd2lzZS4KKworICAgYGBGYWxzZWBgIGlzIGFsc28gcmV0dXJuZWQgaWYgdGhlIHBhdGggZG9lc24ndCBleGlzdDsgb3RoZXIgZXJyb3JzIChzdWNoCisgICBhcyBwZXJtaXNzaW9uIGVycm9ycykgYXJlIHByb3BhZ2F0ZWQuCisKKworLi4gbWV0aG9kOjogUGF0aC5pc19zb2NrZXQoKQorCisgICBSZXR1cm4gYGBUcnVlYGAgaWYgdGhlIHBhdGggcG9pbnRzIHRvIGEgVW5peCBzb2NrZXQgKG9yIGEgc3ltYm9saWMgbGluaworICAgcG9pbnRpbmcgdG8gYSBVbml4IHNvY2tldCksIGBgRmFsc2VgYCBpZiBpdCBwb2ludHMgdG8gYW5vdGhlciBraW5kIG9mIGZpbGUuCisKKyAgIGBgRmFsc2VgYCBpcyBhbHNvIHJldHVybmVkIGlmIHRoZSBwYXRoIGRvZXNuJ3QgZXhpc3Qgb3IgaXMgYSBicm9rZW4gc3ltbGluazsKKyAgIG90aGVyIGVycm9ycyAoc3VjaCBhcyBwZXJtaXNzaW9uIGVycm9ycykgYXJlIHByb3BhZ2F0ZWQuCisKKworLi4gbWV0aG9kOjogUGF0aC5pc19maWZvKCkKKworICAgUmV0dXJuIGBgVHJ1ZWBgIGlmIHRoZSBwYXRoIHBvaW50cyB0byBhIEZJRk8gKG9yIGEgc3ltYm9saWMgbGluaworICAgcG9pbnRpbmcgdG8gYSBGSUZPKSwgYGBGYWxzZWBgIGlmIGl0IHBvaW50cyB0byBhbm90aGVyIGtpbmQgb2YgZmlsZS4KKworICAgYGBGYWxzZWBgIGlzIGFsc28gcmV0dXJuZWQgaWYgdGhlIHBhdGggZG9lc24ndCBleGlzdCBvciBpcyBhIGJyb2tlbiBzeW1saW5rOworICAgb3RoZXIgZXJyb3JzIChzdWNoIGFzIHBlcm1pc3Npb24gZXJyb3JzKSBhcmUgcHJvcGFnYXRlZC4KKworCisuLiBtZXRob2Q6OiBQYXRoLmlzX2Jsb2NrX2RldmljZSgpCisKKyAgIFJldHVybiBgYFRydWVgYCBpZiB0aGUgcGF0aCBwb2ludHMgdG8gYSBibG9jayBkZXZpY2UgKG9yIGEgc3ltYm9saWMgbGluaworICAgcG9pbnRpbmcgdG8gYSBibG9jayBkZXZpY2UpLCBgYEZhbHNlYGAgaWYgaXQgcG9pbnRzIHRvIGFub3RoZXIga2luZCBvZiBmaWxlLgorCisgICBgYEZhbHNlYGAgaXMgYWxzbyByZXR1cm5lZCBpZiB0aGUgcGF0aCBkb2Vzbid0IGV4aXN0IG9yIGlzIGEgYnJva2VuIHN5bWxpbms7CisgICBvdGhlciBlcnJvcnMgKHN1Y2ggYXMgcGVybWlzc2lvbiBlcnJvcnMpIGFyZSBwcm9wYWdhdGVkLgorCisKKy4uIG1ldGhvZDo6IFBhdGguaXNfY2hhcl9kZXZpY2UoKQorCisgICBSZXR1cm4gYGBUcnVlYGAgaWYgdGhlIHBhdGggcG9pbnRzIHRvIGEgY2hhcmFjdGVyIGRldmljZSAob3IgYSBzeW1ib2xpYyBsaW5rCisgICBwb2ludGluZyB0byBhIGNoYXJhY3RlciBkZXZpY2UpLCBgYEZhbHNlYGAgaWYgaXQgcG9pbnRzIHRvIGFub3RoZXIga2luZCBvZiBmaWxlLgorCisgICBgYEZhbHNlYGAgaXMgYWxzbyByZXR1cm5lZCBpZiB0aGUgcGF0aCBkb2Vzbid0IGV4aXN0IG9yIGlzIGEgYnJva2VuIHN5bWxpbms7CisgICBvdGhlciBlcnJvcnMgKHN1Y2ggYXMgcGVybWlzc2lvbiBlcnJvcnMpIGFyZSBwcm9wYWdhdGVkLgorCisKKy4uIG1ldGhvZDo6IFBhdGguaXRlcmRpcigpCisKKyAgIFdoZW4gdGhlIHBhdGggcG9pbnRzIHRvIGEgZGlyZWN0b3J5LCB5aWVsZCBwYXRoIG9iamVjdHMgb2YgdGhlIGRpcmVjdG9yeQorICAgY29udGVudHM6OgorCisgICAgICA+Pj4gcCA9IFBhdGgoJ2RvY3MnKQorICAgICAgPj4+IGZvciBjaGlsZCBpbiBwLml0ZXJkaXIoKTogY2hpbGQKKyAgICAgIC4uLgorICAgICAgUG9zaXhQYXRoKCdkb2NzL2NvbmYucHknKQorICAgICAgUG9zaXhQYXRoKCdkb2NzL190ZW1wbGF0ZXMnKQorICAgICAgUG9zaXhQYXRoKCdkb2NzL21ha2UuYmF0JykKKyAgICAgIFBvc2l4UGF0aCgnZG9jcy9pbmRleC5yc3QnKQorICAgICAgUG9zaXhQYXRoKCdkb2NzL19idWlsZCcpCisgICAgICBQb3NpeFBhdGgoJ2RvY3MvX3N0YXRpYycpCisgICAgICBQb3NpeFBhdGgoJ2RvY3MvTWFrZWZpbGUnKQorCisuLiBtZXRob2Q6OiBQYXRoLmxjaG1vZChtb2RlKQorCisgICBMaWtlIDptZXRoOmBQYXRoLmNobW9kYCBidXQsIGlmIHRoZSBwYXRoIHBvaW50cyB0byBhIHN5bWJvbGljIGxpbmssIHRoZQorICAgc3ltYm9saWMgbGluaydzIG1vZGUgaXMgY2hhbmdlZCByYXRoZXIgdGhhbiBpdHMgdGFyZ2V0J3MuCisKKworLi4gbWV0aG9kOjogUGF0aC5sc3RhdCgpCisKKyAgIExpa2UgOm1ldGg6YFBhdGguc3RhdGAgYnV0LCBpZiB0aGUgcGF0aCBwb2ludHMgdG8gYSBzeW1ib2xpYyBsaW5rLCByZXR1cm4KKyAgIHRoZSBzeW1ib2xpYyBsaW5rJ3MgaW5mb3JtYXRpb24gcmF0aGVyIHRoYW4gaXRzIHRhcmdldCdzLgorCisKKy4uIG1ldGhvZDo6IFBhdGgubWtkaXIobW9kZT0wbzc3NywgcGFyZW50cz1GYWxzZSkKKworICAgQ3JlYXRlIGEgbmV3IGRpcmVjdG9yeSBhdCB0aGlzIGdpdmVuIHBhdGguICBJZiAqbW9kZSogaXMgZ2l2ZW4sIGl0IGlzCisgICBjb21iaW5lZCB3aXRoIHRoZSBwcm9jZXNzJyBgYHVtYXNrYGAgdmFsdWUgdG8gZGV0ZXJtaW5lIHRoZSBmaWxlIG1vZGUKKyAgIGFuZCBhY2Nlc3MgZmxhZ3MuICBJZiB0aGUgcGF0aCBhbHJlYWR5IGV4aXN0cywgOmV4YzpgRmlsZUV4aXN0c0Vycm9yYAorICAgaXMgcmFpc2VkLgorCisgICBJZiAqcGFyZW50cyogaXMgdHJ1ZSwgYW55IG1pc3NpbmcgcGFyZW50cyBvZiB0aGlzIHBhdGggYXJlIGNyZWF0ZWQKKyAgIGFzIG5lZWRlZDsgdGhleSBhcmUgY3JlYXRlZCB3aXRoIHRoZSBkZWZhdWx0IHBlcm1pc3Npb25zIHdpdGhvdXQgdGFraW5nCisgICAqbW9kZSogaW50byBhY2NvdW50IChtaW1pY2tpbmcgdGhlIFBPU0lYIGBgbWtkaXIgLXBgYCBjb21tYW5kKS4KKworICAgSWYgKnBhcmVudHMqIGlzIGZhbHNlICh0aGUgZGVmYXVsdCksIGEgbWlzc2luZyBwYXJlbnQgcmFpc2VzCisgICA6ZXhjOmBGaWxlTm90Rm91bmRFcnJvcmAuCisKKworLi4gbWV0aG9kOjogUGF0aC5vcGVuKG1vZGU9J3InLCBidWZmZXJpbmc9LTEsIGVuY29kaW5nPU5vbmUsIGVycm9ycz1Ob25lLCBuZXdsaW5lPU5vbmUpCisKKyAgIE9wZW4gdGhlIGZpbGUgcG9pbnRlZCB0byBieSB0aGUgcGF0aCwgbGlrZSB0aGUgYnVpbHQtaW4gOmZ1bmM6YG9wZW5gCisgICBmdW5jdGlvbiBkb2VzOjoKKworICAgICAgPj4+IHAgPSBQYXRoKCdzZXR1cC5weScpCisgICAgICA+Pj4gd2l0aCBwLm9wZW4oKSBhcyBmOgorICAgICAgLi4uICAgICBmLnJlYWRsaW5lKCkKKyAgICAgIC4uLgorICAgICAgJyMhL3Vzci9iaW4vZW52IHB5dGhvbjNcbicKKworCisuLiBtZXRob2Q6OiBQYXRoLm93bmVyKCkKKworICAgUmV0dXJuIHRoZSBuYW1lIG9mIHRoZSB1c2VyIG93bmluZyB0aGUgZmlsZS4gIDpleGM6YEtleUVycm9yYCBpcyByYWlzZWQKKyAgIGlmIHRoZSBmaWxlJ3MgdWlkIGlzbid0IGZvdW5kIGluIHRoZSBzeXN0ZW0gZGF0YWJhc2UuCisKKworLi4gbWV0aG9kOjogUGF0aC5yZW5hbWUodGFyZ2V0KQorCisgICBSZW5hbWUgdGhpcyBmaWxlIG9yIGRpcmVjdG9yeSB0byB0aGUgZ2l2ZW4gKnRhcmdldCouICAqdGFyZ2V0KiBjYW4gYmUKKyAgIGVpdGhlciBhIHN0cmluZyBvciBhbm90aGVyIHBhdGggb2JqZWN0OjoKKworICAgICAgPj4+IHAgPSBQYXRoKCdmb28nKQorICAgICAgPj4+IHAub3BlbigndycpLndyaXRlKCdzb21lIHRleHQnKQorICAgICAgOQorICAgICAgPj4+IHRhcmdldCA9IFBhdGgoJ2JhcicpCisgICAgICA+Pj4gcC5yZW5hbWUodGFyZ2V0KQorICAgICAgPj4+IHRhcmdldC5vcGVuKCkucmVhZCgpCisgICAgICAnc29tZSB0ZXh0JworCisKKy4uIG1ldGhvZDo6IFBhdGgucmVwbGFjZSh0YXJnZXQpCisKKyAgIFJlbmFtZSB0aGlzIGZpbGUgb3IgZGlyZWN0b3J5IHRvIHRoZSBnaXZlbiAqdGFyZ2V0Ki4gIElmICp0YXJnZXQqIHBvaW50cworICAgdG8gYW4gZXhpc3RpbmcgZmlsZSBvciBkaXJlY3RvcnksIGl0IHdpbGwgYmUgdW5jb25kaXRpb25hbGx5IHJlcGxhY2VkLgorCisKKy4uIG1ldGhvZDo6IFBhdGgucmVzb2x2ZSgpCisKKyAgIE1ha2UgdGhlIHBhdGggYWJzb2x1dGUsIHJlc29sdmluZyBhbnkgc3ltbGlua3MuICBBIG5ldyBwYXRoIG9iamVjdCBpcworICAgcmV0dXJuZWQ6OgorCisgICAgICA+Pj4gcCA9IFBhdGgoKQorICAgICAgPj4+IHAKKyAgICAgIFBvc2l4UGF0aCgnLicpCisgICAgICA+Pj4gcC5yZXNvbHZlKCkKKyAgICAgIFBvc2l4UGF0aCgnL2hvbWUvYW50b2luZS9wYXRobGliJykKKworICAgYCIuLiJgIGNvbXBvbmVudHMgYXJlIGFsc28gZWxpbWluYXRlZCAodGhpcyBpcyB0aGUgb25seSBtZXRob2QgdG8gZG8gc28pOjoKKworICAgICAgPj4+IHAgPSBQYXRoKCdkb2NzLy4uL3NldHVwLnB5JykKKyAgICAgID4+PiBwLnJlc29sdmUoKQorICAgICAgUG9zaXhQYXRoKCcvaG9tZS9hbnRvaW5lL3BhdGhsaWIvc2V0dXAucHknKQorCisgICBJZiB0aGUgcGF0aCBkb2Vzbid0IGV4aXN0LCA6ZXhjOmBGaWxlTm90Rm91bmRFcnJvcmAgaXMgcmFpc2VkLiAgSWYgYW4KKyAgIGluZmluaXRlIGxvb3AgaXMgZW5jb3VudGVyZWQgYWxvbmcgdGhlIHJlc29sdXRpb24gcGF0aCwKKyAgIDpleGM6YFJ1bnRpbWVFcnJvcmAgaXMgcmFpc2VkLgorCisKKy4uIG1ldGhvZDo6IFBhdGgucmdsb2IocGF0dGVybikKKworICAgVGhpcyBpcyBsaWtlIGNhbGxpbmcgOm1ldGg6YGdsb2JgIHdpdGggImBgKipgYCIgYWRkZWQgaW4gZnJvbnQgb2YgdGhlCisgICBnaXZlbiAqcGF0dGVybio6CisKKyAgICAgID4+PiBzb3J0ZWQoUGF0aCgpLnJnbG9iKCIqLnB5IikpCisgICAgICBbUG9zaXhQYXRoKCdidWlsZC9saWIvcGF0aGxpYi5weScpLAorICAgICAgIFBvc2l4UGF0aCgnZG9jcy9jb25mLnB5JyksCisgICAgICAgUG9zaXhQYXRoKCdwYXRobGliLnB5JyksCisgICAgICAgUG9zaXhQYXRoKCdzZXR1cC5weScpLAorICAgICAgIFBvc2l4UGF0aCgndGVzdF9wYXRobGliLnB5JyldCisKKworLi4gbWV0aG9kOjogUGF0aC5ybWRpcigpCisKKyAgIFJlbW92ZSB0aGlzIGRpcmVjdG9yeS4gIFRoZSBkaXJlY3RvcnkgbXVzdCBiZSBlbXB0eS4KKworCisuLiBtZXRob2Q6OiBQYXRoLnN5bWxpbmtfdG8odGFyZ2V0LCB0YXJnZXRfaXNfZGlyZWN0b3J5PUZhbHNlKQorCisgICBNYWtlIHRoaXMgcGF0aCBhIHN5bWJvbGljIGxpbmsgdG8gKnRhcmdldCouICBVbmRlciBXaW5kb3dzLAorICAgKnRhcmdldF9pc19kaXJlY3RvcnkqIG11c3QgYmUgdHJ1ZSAoZGVmYXVsdCBgYEZhbHNlYGApIGlmIHRoZSBsaW5rJ3MgdGFyZ2V0CisgICBpcyBhIGRpcmVjdG9yeS4gIFVuZGVyIFBPU0lYLCAqdGFyZ2V0X2lzX2RpcmVjdG9yeSoncyB2YWx1ZSBpcyBpZ25vcmVkLgorCisgICAgICA+Pj4gcCA9IFBhdGgoJ215bGluaycpCisgICAgICA+Pj4gcC5zeW1saW5rX3RvKCdzZXR1cC5weScpCisgICAgICA+Pj4gcC5yZXNvbHZlKCkKKyAgICAgIFBvc2l4UGF0aCgnL2hvbWUvYW50b2luZS9wYXRobGliL3NldHVwLnB5JykKKyAgICAgID4+PiBwLnN0YXQoKS5zdF9zaXplCisgICAgICA5NTYKKyAgICAgID4+PiBwLmxzdGF0KCkuc3Rfc2l6ZQorICAgICAgOAorCisgICAuLiBub3RlOjoKKyAgICAgIFRoZSBvcmRlciBvZiBhcmd1bWVudHMgKGxpbmssIHRhcmdldCkgaXMgdGhlIHJldmVyc2UKKyAgICAgIG9mIDpmdW5jOmBvcy5zeW1saW5rYCdzLgorCisKKy4uIG1ldGhvZDo6IFBhdGgudG91Y2gobW9kZT0wbzc3NywgZXhpc3Rfb2s9VHJ1ZSkKKworICAgQ3JlYXRlIGEgZmlsZSBhdCB0aGlzIGdpdmVuIHBhdGguICBJZiAqbW9kZSogaXMgZ2l2ZW4sIGl0IGlzIGNvbWJpbmVkCisgICB3aXRoIHRoZSBwcm9jZXNzJyBgYHVtYXNrYGAgdmFsdWUgdG8gZGV0ZXJtaW5lIHRoZSBmaWxlIG1vZGUgYW5kIGFjY2VzcworICAgZmxhZ3MuICBJZiB0aGUgZmlsZSBhbHJlYWR5IGV4aXN0cywgdGhlIGZ1bmN0aW9uIHN1Y2NlZWRzIGlmICpleGlzdF9vayoKKyAgIGlzIHRydWUgKGFuZCBpdHMgbW9kaWZpY2F0aW9uIHRpbWUgaXMgdXBkYXRlZCB0byB0aGUgY3VycmVudCB0aW1lKSwKKyAgIG90aGVyd2lzZSA6ZXhjOmBGaWxlRXhpc3RzRXJyb3JgIGlzIHJhaXNlZC4KKworCisuLiBtZXRob2Q6OiBQYXRoLnVubGluaygpCisKKyAgIFJlbW92ZSB0aGlzIGZpbGUgb3Igc3ltYm9saWMgbGluay4gIElmIHRoZSBwYXRoIHBvaW50cyB0byBhIGRpcmVjdG9yeSwKKyAgIHVzZSA6ZnVuYzpgUGF0aC5ybWRpcmAgaW5zdGVhZC4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3BkYi5yc3QgYi9Eb2MvbGlicmFyeS9wZGIucnN0CmluZGV4IGY0ZTM3YWMuLmMxNDRkYjYgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3BkYi5yc3QKKysrIGIvRG9jL2xpYnJhcnkvcGRiLnJzdApAQCAtNiw2ICs2LDkgQEAKIC4uIG1vZHVsZTo6IHBkYgogICAgOnN5bm9wc2lzOiBUaGUgUHl0aG9uIGRlYnVnZ2VyIGZvciBpbnRlcmFjdGl2ZSBpbnRlcnByZXRlcnMuCiAKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL3BkYi5weWAKKworLS0tLS0tLS0tLS0tLS0KIAogLi4gaW5kZXg6OiBzaW5nbGU6IGRlYnVnZ2luZwogCkBAIC00MSw3ICs0NCw3IEBACiAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMwogICAgVGFiLWNvbXBsZXRpb24gdmlhIHRoZSA6bW9kOmByZWFkbGluZWAgbW9kdWxlIGlzIGF2YWlsYWJsZSBmb3IgY29tbWFuZHMgYW5kCiAgICBjb21tYW5kIGFyZ3VtZW50cywgZS5nLiB0aGUgY3VycmVudCBnbG9iYWwgYW5kIGxvY2FsIG5hbWVzIGFyZSBvZmZlcmVkIGFzCi0gICBhcmd1bWVudHMgb2YgdGhlIGBgcHJpbnRgYCBjb21tYW5kLgorICAgYXJndW1lbnRzIG9mIHRoZSBgYHBgYCBjb21tYW5kLgogCiA6ZmlsZTpgcGRiLnB5YCBjYW4gYWxzbyBiZSBpbnZva2VkIGFzIGEgc2NyaXB0IHRvIGRlYnVnIG90aGVyIHNjcmlwdHMuICBGb3IKIGV4YW1wbGU6OgpAQCAtMTUzLDggKzE1Niw4IEBACiAgICB0aGF0IG1hdGNoZXMgb25lIG9mIHRoZXNlIHBhdHRlcm5zLiBbMV1fCiAKICAgIEJ5IGRlZmF1bHQsIFBkYiBzZXRzIGEgaGFuZGxlciBmb3IgdGhlIFNJR0lOVCBzaWduYWwgKHdoaWNoIGlzIHNlbnQgd2hlbiB0aGUKLSAgIHVzZXIgcHJlc3NlcyBDdHJsLUMgb24gdGhlIGNvbnNvbGUpIHdoZW4geW91IGdpdmUgYSBgYGNvbnRpbnVlYGAgY29tbWFuZC4KLSAgIFRoaXMgYWxsb3dzIHlvdSB0byBicmVhayBpbnRvIHRoZSBkZWJ1Z2dlciBhZ2FpbiBieSBwcmVzc2luZyBDdHJsLUMuICBJZiB5b3UKKyAgIHVzZXIgcHJlc3NlcyA6a2JkOmBDdHJsLUNgIG9uIHRoZSBjb25zb2xlKSB3aGVuIHlvdSBnaXZlIGEgYGBjb250aW51ZWBgIGNvbW1hbmQuCisgICBUaGlzIGFsbG93cyB5b3UgdG8gYnJlYWsgaW50byB0aGUgZGVidWdnZXIgYWdhaW4gYnkgcHJlc3NpbmcgOmtiZDpgQ3RybC1DYC4gIElmIHlvdQogICAgd2FudCBQZGIgbm90IHRvIHRvdWNoIHRoZSBTSUdJTlQgaGFuZGxlciwgc2V0ICpub3NpZ2ludCogdG90IHRydWUuCiAKICAgIEV4YW1wbGUgY2FsbCB0byBlbmFibGUgdHJhY2luZyB3aXRoICpza2lwKjo6CkBAIC0zMDksNyArMzEyLDcgQEAKICAgIGBgZW5kYGAgdG8gdGVybWluYXRlIHRoZSBjb21tYW5kcy4gQW4gZXhhbXBsZTo6CiAKICAgICAgIChQZGIpIGNvbW1hbmRzIDEKLSAgICAgIChjb20pIHByaW50IHNvbWVfdmFyaWFibGUKKyAgICAgIChjb20pIHAgc29tZV92YXJpYWJsZQogICAgICAgKGNvbSkgZW5kCiAgICAgICAoUGRiKQogCkBAIC00MDMsMTMgKzQwNiwxOSBAQAogCiAgICBQcmludCB0aGUgYXJndW1lbnQgbGlzdCBvZiB0aGUgY3VycmVudCBmdW5jdGlvbi4KIAotLi4gcGRiY29tbWFuZDo6IHAocmludCkgZXhwcmVzc2lvbgorLi4gcGRiY29tbWFuZDo6IHAgZXhwcmVzc2lvbgogCiAgICBFdmFsdWF0ZSB0aGUgKmV4cHJlc3Npb24qIGluIHRoZSBjdXJyZW50IGNvbnRleHQgYW5kIHByaW50IGl0cyB2YWx1ZS4KIAorICAgLi4gbm90ZTo6CisKKyAgICAgIGBgcHJpbnQoKWBgIGNhbiBhbHNvIGJlIHVzZWQsIGJ1dCBpcyBub3QgYSBkZWJ1Z2dlciBjb21tYW5kIC0tLSB0aGlzIGV4ZWN1dGVzIHRoZQorICAgICAgUHl0aG9uIDpmdW5jOmBwcmludGAgZnVuY3Rpb24uCisKKwogLi4gcGRiY29tbWFuZDo6IHBwIGV4cHJlc3Npb24KIAotICAgTGlrZSB0aGUgOnBkYmNtZDpgcHJpbnRgIGNvbW1hbmQsIGV4Y2VwdCB0aGUgdmFsdWUgb2YgdGhlIGV4cHJlc3Npb24gaXMKKyAgIExpa2UgdGhlIDpwZGJjbWQ6YHBgIGNvbW1hbmQsIGV4Y2VwdCB0aGUgdmFsdWUgb2YgdGhlIGV4cHJlc3Npb24gaXMKICAgIHByZXR0eS1wcmludGVkIHVzaW5nIHRoZSA6bW9kOmBwcHJpbnRgIG1vZHVsZS4KIAogLi4gcGRiY29tbWFuZDo6IHdoYXRpcyBleHByZXNzaW9uCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9waWNrbGUucnN0IGIvRG9jL2xpYnJhcnkvcGlja2xlLnJzdAppbmRleCAyNzNmYjM0Li4zMzA1MTk1IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9waWNrbGUucnN0CisrKyBiL0RvYy9saWJyYXJ5L3BpY2tsZS5yc3QKQEAgLTI2LDkgKzI2LDkgQEAKIAogLi4gd2FybmluZzo6CiAKLSAgIFRoZSA6bW9kOmBwaWNrbGVgIG1vZHVsZSBpcyBub3QgaW50ZW5kZWQgdG8gYmUgc2VjdXJlIGFnYWluc3QgZXJyb25lb3VzIG9yCi0gICBtYWxpY2lvdXNseSBjb25zdHJ1Y3RlZCBkYXRhLiAgTmV2ZXIgdW5waWNrbGUgZGF0YSByZWNlaXZlZCBmcm9tIGFuIHVudHJ1c3RlZAotICAgb3IgdW5hdXRoZW50aWNhdGVkIHNvdXJjZS4KKyAgIFRoZSA6bW9kOmBwaWNrbGVgIG1vZHVsZSBpcyBub3Qgc2VjdXJlIGFnYWluc3QgZXJyb25lb3VzIG9yIG1hbGljaW91c2x5CisgICBjb25zdHJ1Y3RlZCBkYXRhLiAgTmV2ZXIgdW5waWNrbGUgZGF0YSByZWNlaXZlZCBmcm9tIGFuIHVudHJ1c3RlZCBvcgorICAgdW5hdXRoZW50aWNhdGVkIHNvdXJjZS4KIAogCiBSZWxhdGlvbnNoaXAgdG8gb3RoZXIgUHl0aG9uIG1vZHVsZXMKQEAgLTk0LDYgKzk0LDkgQEAKICAgIFRoZSA6bW9kOmBqc29uYCBtb2R1bGU6IGEgc3RhbmRhcmQgbGlicmFyeSBtb2R1bGUgYWxsb3dpbmcgSlNPTgogICAgc2VyaWFsaXphdGlvbiBhbmQgZGVzZXJpYWxpemF0aW9uLgogCisKKy4uIF9waWNrbGUtcHJvdG9jb2xzOgorCiBEYXRhIHN0cmVhbSBmb3JtYXQKIC0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC0xMTMsNyArMTE2LDkgQEAKIGdlbmVyYXRlZCBieSA6bW9kOmBwaWNrbGVgLiAgOm1vZDpgcGlja2xldG9vbHNgIHNvdXJjZSBjb2RlIGhhcyBleHRlbnNpdmUKIGNvbW1lbnRzIGFib3V0IG9wY29kZXMgdXNlZCBieSBwaWNrbGUgcHJvdG9jb2xzLgogCi1UaGVyZSBhcmUgY3VycmVudGx5IDQgZGlmZmVyZW50IHByb3RvY29scyB3aGljaCBjYW4gYmUgdXNlZCBmb3IgcGlja2xpbmcuCitUaGVyZSBhcmUgY3VycmVudGx5IDUgZGlmZmVyZW50IHByb3RvY29scyB3aGljaCBjYW4gYmUgdXNlZCBmb3IgcGlja2xpbmcuCitUaGUgaGlnaGVyIHRoZSBwcm90b2NvbCB1c2VkLCB0aGUgbW9yZSByZWNlbnQgdGhlIHZlcnNpb24gb2YgUHl0aG9uIG5lZWRlZAordG8gcmVhZCB0aGUgcGlja2xlIHByb2R1Y2VkLgogCiAqIFByb3RvY29sIHZlcnNpb24gMCBpcyB0aGUgb3JpZ2luYWwgImh1bWFuLXJlYWRhYmxlIiBwcm90b2NvbCBhbmQgaXMKICAgYmFja3dhcmRzIGNvbXBhdGlibGUgd2l0aCBlYXJsaWVyIHZlcnNpb25zIG9mIFB5dGhvbi4KQEAgLTEyNSwxMCArMTMwLDE1IEBACiAgIGVmZmljaWVudCBwaWNrbGluZyBvZiA6dGVybTpgbmV3LXN0eWxlIGNsYXNzYFxlcy4gIFJlZmVyIHRvIDpwZXA6YDMwN2AgZm9yCiAgIGluZm9ybWF0aW9uIGFib3V0IGltcHJvdmVtZW50cyBicm91Z2h0IGJ5IHByb3RvY29sIDIuCiAKLSogUHJvdG9jb2wgdmVyc2lvbiAzIHdhcyBhZGRlZCBpbiBQeXRob24gMy4gIEl0IGhhcyBleHBsaWNpdCBzdXBwb3J0IGZvcgorKiBQcm90b2NvbCB2ZXJzaW9uIDMgd2FzIGFkZGVkIGluIFB5dGhvbiAzLjAuICBJdCBoYXMgZXhwbGljaXQgc3VwcG9ydCBmb3IKICAgOmNsYXNzOmBieXRlc2Agb2JqZWN0cyBhbmQgY2Fubm90IGJlIHVucGlja2xlZCBieSBQeXRob24gMi54LiAgVGhpcyBpcwotICB0aGUgZGVmYXVsdCBhcyB3ZWxsIGFzIHRoZSBjdXJyZW50IHJlY29tbWVuZGVkIHByb3RvY29sOyB1c2UgaXQgd2hlbmV2ZXIKLSAgcG9zc2libGUuCisgIHRoZSBkZWZhdWx0IHByb3RvY29sLCBhbmQgdGhlIHJlY29tbWVuZGVkIHByb3RvY29sIHdoZW4gY29tcGF0aWJpbGl0eSB3aXRoCisgIG90aGVyIFB5dGhvbiAzIHZlcnNpb25zIGlzIHJlcXVpcmVkLgorCisqIFByb3RvY29sIHZlcnNpb24gNCB3YXMgYWRkZWQgaW4gUHl0aG9uIDMuNC4gIEl0IGFkZHMgc3VwcG9ydCBmb3IgdmVyeSBsYXJnZQorICBvYmplY3RzLCBwaWNrbGluZyBtb3JlIGtpbmRzIG9mIG9iamVjdHMsIGFuZCBzb21lIGRhdGEgZm9ybWF0CisgIG9wdGltaXphdGlvbnMuICBSZWZlciB0byA6cGVwOmAzMTU0YCBmb3IgaW5mb3JtYXRpb24gYWJvdXQgaW1wcm92ZW1lbnRzCisgIGJyb3VnaHQgYnkgcHJvdG9jb2wgNC4KIAogLi4gbm90ZTo6CiAgICBTZXJpYWxpemF0aW9uIGlzIGEgbW9yZSBwcmltaXRpdmUgbm90aW9uIHRoYW4gcGVyc2lzdGVuY2U7IGFsdGhvdWdoCkBAIC0xNTYsMTMgKzE2NiwxNiBAQAogCiAuLiBkYXRhOjogSElHSEVTVF9QUk9UT0NPTAogCi0gICBUaGUgaGlnaGVzdCBwcm90b2NvbCB2ZXJzaW9uIGF2YWlsYWJsZS4gIFRoaXMgdmFsdWUgY2FuIGJlIHBhc3NlZCBhcyBhCi0gICAqcHJvdG9jb2wqIHZhbHVlLgorICAgQW4gaW50ZWdlciwgdGhlIGhpZ2hlc3QgOnJlZjpgcHJvdG9jb2wgdmVyc2lvbiA8cGlja2xlLXByb3RvY29scz5gCisgICBhdmFpbGFibGUuICBUaGlzIHZhbHVlIGNhbiBiZSBwYXNzZWQgYXMgYSAqcHJvdG9jb2wqIHZhbHVlIHRvIGZ1bmN0aW9ucworICAgOmZ1bmM6YGR1bXBgIGFuZCA6ZnVuYzpgZHVtcHNgIGFzIHdlbGwgYXMgdGhlIDpjbGFzczpgUGlja2xlcmAKKyAgIGNvbnN0cnVjdG9yLgogCiAuLiBkYXRhOjogREVGQVVMVF9QUk9UT0NPTAogCi0gICBUaGUgZGVmYXVsdCBwcm90b2NvbCB1c2VkIGZvciBwaWNrbGluZy4gIE1heSBiZSBsZXNzIHRoYW4gSElHSEVTVF9QUk9UT0NPTC4KLSAgIEN1cnJlbnRseSB0aGUgZGVmYXVsdCBwcm90b2NvbCBpcyAzLCBhIG5ldyBwcm90b2NvbCBkZXNpZ25lZCBmb3IgUHl0aG9uIDMuMC4KKyAgIEFuIGludGVnZXIsIHRoZSBkZWZhdWx0IDpyZWY6YHByb3RvY29sIHZlcnNpb24gPHBpY2tsZS1wcm90b2NvbHM+YCB1c2VkCisgICBmb3IgcGlja2xpbmcuICBNYXkgYmUgbGVzcyB0aGFuIDpkYXRhOmBISUdIRVNUX1BST1RPQ09MYC4gIEN1cnJlbnRseSB0aGUKKyAgIGRlZmF1bHQgcHJvdG9jb2wgaXMgMywgYSBuZXcgcHJvdG9jb2wgZGVzaWduZWQgZm9yIFB5dGhvbiAzLgogCiAKIFRoZSA6bW9kOmBwaWNrbGVgIG1vZHVsZSBwcm92aWRlcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyB0byBtYWtlIHRoZSBwaWNrbGluZwpAQCAtMTczLDc4ICsxODYsNjggQEAKICAgIFdyaXRlIGEgcGlja2xlZCByZXByZXNlbnRhdGlvbiBvZiAqb2JqKiB0byB0aGUgb3BlbiA6dGVybTpgZmlsZSBvYmplY3RgICpmaWxlKi4KICAgIFRoaXMgaXMgZXF1aXZhbGVudCB0byBgYFBpY2tsZXIoZmlsZSwgcHJvdG9jb2wpLmR1bXAob2JqKWBgLgogCi0gICBUaGUgb3B0aW9uYWwgKnByb3RvY29sKiBhcmd1bWVudCB0ZWxscyB0aGUgcGlja2xlciB0byB1c2UgdGhlIGdpdmVuIHByb3RvY29sOwotICAgc3VwcG9ydGVkIHByb3RvY29scyBhcmUgMCwgMSwgMiwgMy4gIFRoZSBkZWZhdWx0IHByb3RvY29sIGlzIDM7IGEKLSAgIGJhY2t3YXJkLWluY29tcGF0aWJsZSBwcm90b2NvbCBkZXNpZ25lZCBmb3IgUHl0aG9uIDMuMC4KLQotICAgU3BlY2lmeWluZyBhIG5lZ2F0aXZlIHByb3RvY29sIHZlcnNpb24gc2VsZWN0cyB0aGUgaGlnaGVzdCBwcm90b2NvbCB2ZXJzaW9uCi0gICBzdXBwb3J0ZWQuICBUaGUgaGlnaGVyIHRoZSBwcm90b2NvbCB1c2VkLCB0aGUgbW9yZSByZWNlbnQgdGhlIHZlcnNpb24gb2YKLSAgIFB5dGhvbiBuZWVkZWQgdG8gcmVhZCB0aGUgcGlja2xlIHByb2R1Y2VkLgorICAgVGhlIG9wdGlvbmFsICpwcm90b2NvbCogYXJndW1lbnQsIGFuIGludGVnZXIsIHRlbGxzIHRoZSBwaWNrbGVyIHRvIHVzZQorICAgdGhlIGdpdmVuIHByb3RvY29sOyBzdXBwb3J0ZWQgcHJvdG9jb2xzIGFyZSAwIHRvIDpkYXRhOmBISUdIRVNUX1BST1RPQ09MYC4KKyAgIElmIG5vdCBzcGVjaWZpZWQsIHRoZSBkZWZhdWx0IGlzIDpkYXRhOmBERUZBVUxUX1BST1RPQ09MYC4gIElmIGEgbmVnYXRpdmUKKyAgIG51bWJlciBpcyBzcGVjaWZpZWQsIDpkYXRhOmBISUdIRVNUX1BST1RPQ09MYCBpcyBzZWxlY3RlZC4KIAogICAgVGhlICpmaWxlKiBhcmd1bWVudCBtdXN0IGhhdmUgYSB3cml0ZSgpIG1ldGhvZCB0aGF0IGFjY2VwdHMgYSBzaW5nbGUgYnl0ZXMKLSAgIGFyZ3VtZW50LiAgSXQgY2FuIHRodXMgYmUgYW4gb24tZGlzayBmaWxlIG9wZW5lZCBmb3IgYmluYXJ5IHdyaXRpbmcsIGEKKyAgIGFyZ3VtZW50LiAgSXQgY2FuIHRodXMgYmUgYW4gb24tZGlzayBmaWxlIG9wZW5lZCBmb3IgYmluYXJ5IHdyaXRpbmcsIGFuCiAgICA6Y2xhc3M6YGlvLkJ5dGVzSU9gIGluc3RhbmNlLCBvciBhbnkgb3RoZXIgY3VzdG9tIG9iamVjdCB0aGF0IG1lZXRzIHRoaXMKICAgIGludGVyZmFjZS4KIAogICAgSWYgKmZpeF9pbXBvcnRzKiBpcyB0cnVlIGFuZCAqcHJvdG9jb2wqIGlzIGxlc3MgdGhhbiAzLCBwaWNrbGUgd2lsbCB0cnkgdG8KLSAgIG1hcCB0aGUgbmV3IFB5dGhvbiAzLnggbmFtZXMgdG8gdGhlIG9sZCBtb2R1bGUgbmFtZXMgdXNlZCBpbiBQeXRob24gMi54LAotICAgc28gdGhhdCB0aGUgcGlja2xlIGRhdGEgc3RyZWFtIGlzIHJlYWRhYmxlIHdpdGggUHl0aG9uIDIueC4KKyAgIG1hcCB0aGUgbmV3IFB5dGhvbiAzIG5hbWVzIHRvIHRoZSBvbGQgbW9kdWxlIG5hbWVzIHVzZWQgaW4gUHl0aG9uIDIsIHNvCisgICB0aGF0IHRoZSBwaWNrbGUgZGF0YSBzdHJlYW0gaXMgcmVhZGFibGUgd2l0aCBQeXRob24gMi4KIAogLi4gZnVuY3Rpb246OiBkdW1wcyhvYmosIHByb3RvY29sPU5vbmUsIFwqLCBmaXhfaW1wb3J0cz1UcnVlKQogCi0gICBSZXR1cm4gdGhlIHBpY2tsZWQgcmVwcmVzZW50YXRpb24gb2YgdGhlIG9iamVjdCBhcyBhIDpjbGFzczpgYnl0ZXNgCi0gICBvYmplY3QsIGluc3RlYWQgb2Ygd3JpdGluZyBpdCB0byBhIGZpbGUuCisgICBSZXR1cm4gdGhlIHBpY2tsZWQgcmVwcmVzZW50YXRpb24gb2YgdGhlIG9iamVjdCBhcyBhIDpjbGFzczpgYnl0ZXNgIG9iamVjdCwKKyAgIGluc3RlYWQgb2Ygd3JpdGluZyBpdCB0byBhIGZpbGUuCiAKLSAgIFRoZSBvcHRpb25hbCAqcHJvdG9jb2wqIGFyZ3VtZW50IHRlbGxzIHRoZSBwaWNrbGVyIHRvIHVzZSB0aGUgZ2l2ZW4gcHJvdG9jb2w7Ci0gICBzdXBwb3J0ZWQgcHJvdG9jb2xzIGFyZSAwLCAxLCAyLCAzLiAgVGhlIGRlZmF1bHQgcHJvdG9jb2wgaXMgMzsgYQotICAgYmFja3dhcmQtaW5jb21wYXRpYmxlIHByb3RvY29sIGRlc2lnbmVkIGZvciBQeXRob24gMy4wLgotCi0gICBTcGVjaWZ5aW5nIGEgbmVnYXRpdmUgcHJvdG9jb2wgdmVyc2lvbiBzZWxlY3RzIHRoZSBoaWdoZXN0IHByb3RvY29sIHZlcnNpb24KLSAgIHN1cHBvcnRlZC4gIFRoZSBoaWdoZXIgdGhlIHByb3RvY29sIHVzZWQsIHRoZSBtb3JlIHJlY2VudCB0aGUgdmVyc2lvbiBvZgotICAgUHl0aG9uIG5lZWRlZCB0byByZWFkIHRoZSBwaWNrbGUgcHJvZHVjZWQuCi0KLSAgIElmICpmaXhfaW1wb3J0cyogaXMgdHJ1ZSBhbmQgKnByb3RvY29sKiBpcyBsZXNzIHRoYW4gMywgcGlja2xlIHdpbGwgdHJ5IHRvCi0gICBtYXAgdGhlIG5ldyBQeXRob24gMy54IG5hbWVzIHRvIHRoZSBvbGQgbW9kdWxlIG5hbWVzIHVzZWQgaW4gUHl0aG9uIDIueCwKLSAgIHNvIHRoYXQgdGhlIHBpY2tsZSBkYXRhIHN0cmVhbSBpcyByZWFkYWJsZSB3aXRoIFB5dGhvbiAyLnguCisgICBBcmd1bWVudHMgKnByb3RvY29sKiBhbmQgKmZpeF9pbXBvcnRzKiBoYXZlIHRoZSBzYW1lIG1lYW5pbmcgYXMgaW4KKyAgIDpmdW5jOmBkdW1wYC4KIAogLi4gZnVuY3Rpb246OiBsb2FkKGZpbGUsIFwqLCBmaXhfaW1wb3J0cz1UcnVlLCBlbmNvZGluZz0iQVNDSUkiLCBlcnJvcnM9InN0cmljdCIpCiAKLSAgIFJlYWQgYSBwaWNrbGVkIG9iamVjdCByZXByZXNlbnRhdGlvbiBmcm9tIHRoZSBvcGVuIDp0ZXJtOmBmaWxlIG9iamVjdGAgKmZpbGUqCi0gICBhbmQgcmV0dXJuIHRoZSByZWNvbnN0aXR1dGVkIG9iamVjdCBoaWVyYXJjaHkgc3BlY2lmaWVkIHRoZXJlaW4uICBUaGlzIGlzCi0gICBlcXVpdmFsZW50IHRvIGBgVW5waWNrbGVyKGZpbGUpLmxvYWQoKWBgLgorICAgUmVhZCBhIHBpY2tsZWQgb2JqZWN0IHJlcHJlc2VudGF0aW9uIGZyb20gdGhlIG9wZW4gOnRlcm06YGZpbGUgb2JqZWN0YAorICAgKmZpbGUqIGFuZCByZXR1cm4gdGhlIHJlY29uc3RpdHV0ZWQgb2JqZWN0IGhpZXJhcmNoeSBzcGVjaWZpZWQgdGhlcmVpbi4KKyAgIFRoaXMgaXMgZXF1aXZhbGVudCB0byBgYFVucGlja2xlcihmaWxlKS5sb2FkKClgYC4KIAotICAgVGhlIHByb3RvY29sIHZlcnNpb24gb2YgdGhlIHBpY2tsZSBpcyBkZXRlY3RlZCBhdXRvbWF0aWNhbGx5LCBzbyBubyBwcm90b2NvbAotICAgYXJndW1lbnQgaXMgbmVlZGVkLiAgQnl0ZXMgcGFzdCB0aGUgcGlja2xlZCBvYmplY3QncyByZXByZXNlbnRhdGlvbiBhcmUKLSAgIGlnbm9yZWQuCisgICBUaGUgcHJvdG9jb2wgdmVyc2lvbiBvZiB0aGUgcGlja2xlIGlzIGRldGVjdGVkIGF1dG9tYXRpY2FsbHksIHNvIG5vCisgICBwcm90b2NvbCBhcmd1bWVudCBpcyBuZWVkZWQuICBCeXRlcyBwYXN0IHRoZSBwaWNrbGVkIG9iamVjdCdzCisgICByZXByZXNlbnRhdGlvbiBhcmUgaWdub3JlZC4KIAogICAgVGhlIGFyZ3VtZW50ICpmaWxlKiBtdXN0IGhhdmUgdHdvIG1ldGhvZHMsIGEgcmVhZCgpIG1ldGhvZCB0aGF0IHRha2VzIGFuCiAgICBpbnRlZ2VyIGFyZ3VtZW50LCBhbmQgYSByZWFkbGluZSgpIG1ldGhvZCB0aGF0IHJlcXVpcmVzIG5vIGFyZ3VtZW50cy4gIEJvdGgKLSAgIG1ldGhvZHMgc2hvdWxkIHJldHVybiBieXRlcy4gIFRodXMgKmZpbGUqIGNhbiBiZSBhbiBvbi1kaXNrIGZpbGUgb3BlbmVkCi0gICBmb3IgYmluYXJ5IHJlYWRpbmcsIGEgOmNsYXNzOmBpby5CeXRlc0lPYCBvYmplY3QsIG9yIGFueSBvdGhlciBjdXN0b20gb2JqZWN0CisgICBtZXRob2RzIHNob3VsZCByZXR1cm4gYnl0ZXMuICBUaHVzICpmaWxlKiBjYW4gYmUgYW4gb24tZGlzayBmaWxlIG9wZW5lZCBmb3IKKyAgIGJpbmFyeSByZWFkaW5nLCBhbiA6Y2xhc3M6YGlvLkJ5dGVzSU9gIG9iamVjdCwgb3IgYW55IG90aGVyIGN1c3RvbSBvYmplY3QKICAgIHRoYXQgbWVldHMgdGhpcyBpbnRlcmZhY2UuCiAKICAgIE9wdGlvbmFsIGtleXdvcmQgYXJndW1lbnRzIGFyZSAqZml4X2ltcG9ydHMqLCAqZW5jb2RpbmcqIGFuZCAqZXJyb3JzKiwKICAgIHdoaWNoIGFyZSB1c2VkIHRvIGNvbnRyb2wgY29tcGF0aWJpbGl0eSBzdXBwb3J0IGZvciBwaWNrbGUgc3RyZWFtIGdlbmVyYXRlZAotICAgYnkgUHl0aG9uIDIueC4gIElmICpmaXhfaW1wb3J0cyogaXMgdHJ1ZSwgcGlja2xlIHdpbGwgdHJ5IHRvIG1hcCB0aGUgb2xkCi0gICBQeXRob24gMi54IG5hbWVzIHRvIHRoZSBuZXcgbmFtZXMgdXNlZCBpbiBQeXRob24gMy54LiAgVGhlICplbmNvZGluZyogYW5kCisgICBieSBQeXRob24gMi4gIElmICpmaXhfaW1wb3J0cyogaXMgdHJ1ZSwgcGlja2xlIHdpbGwgdHJ5IHRvIG1hcCB0aGUgb2xkCisgICBQeXRob24gMiBuYW1lcyB0byB0aGUgbmV3IG5hbWVzIHVzZWQgaW4gUHl0aG9uIDMuICBUaGUgKmVuY29kaW5nKiBhbmQKICAgICplcnJvcnMqIHRlbGwgcGlja2xlIGhvdyB0byBkZWNvZGUgOC1iaXQgc3RyaW5nIGluc3RhbmNlcyBwaWNrbGVkIGJ5IFB5dGhvbgotICAgMi54OyB0aGVzZSBkZWZhdWx0IHRvICdBU0NJSScgYW5kICdzdHJpY3QnLCByZXNwZWN0aXZlbHkuCisgICAyOyB0aGVzZSBkZWZhdWx0IHRvICdBU0NJSScgYW5kICdzdHJpY3QnLCByZXNwZWN0aXZlbHkuICBUaGUgKmVuY29kaW5nKiBjYW4KKyAgIGJlICdieXRlcycgdG8gcmVhZCB0aGVzZSA4LWJpdCBzdHJpbmcgaW5zdGFuY2VzIGFzIGJ5dGVzIG9iamVjdHMuCiAKIC4uIGZ1bmN0aW9uOjogbG9hZHMoYnl0ZXNfb2JqZWN0LCBcKiwgZml4X2ltcG9ydHM9VHJ1ZSwgZW5jb2Rpbmc9IkFTQ0lJIiwgZXJyb3JzPSJzdHJpY3QiKQogCiAgICBSZWFkIGEgcGlja2xlZCBvYmplY3QgaGllcmFyY2h5IGZyb20gYSA6Y2xhc3M6YGJ5dGVzYCBvYmplY3QgYW5kIHJldHVybiB0aGUKLSAgIHJlY29uc3RpdHV0ZWQgb2JqZWN0IGhpZXJhcmNoeSBzcGVjaWZpZWQgdGhlcmVpbgorICAgcmVjb25zdGl0dXRlZCBvYmplY3QgaGllcmFyY2h5IHNwZWNpZmllZCB0aGVyZWluLgogCi0gICBUaGUgcHJvdG9jb2wgdmVyc2lvbiBvZiB0aGUgcGlja2xlIGlzIGRldGVjdGVkIGF1dG9tYXRpY2FsbHksIHNvIG5vIHByb3RvY29sCi0gICBhcmd1bWVudCBpcyBuZWVkZWQuICBCeXRlcyBwYXN0IHRoZSBwaWNrbGVkIG9iamVjdCdzIHJlcHJlc2VudGF0aW9uIGFyZQotICAgaWdub3JlZC4KKyAgIFRoZSBwcm90b2NvbCB2ZXJzaW9uIG9mIHRoZSBwaWNrbGUgaXMgZGV0ZWN0ZWQgYXV0b21hdGljYWxseSwgc28gbm8KKyAgIHByb3RvY29sIGFyZ3VtZW50IGlzIG5lZWRlZC4gIEJ5dGVzIHBhc3QgdGhlIHBpY2tsZWQgb2JqZWN0J3MKKyAgIHJlcHJlc2VudGF0aW9uIGFyZSBpZ25vcmVkLgogCiAgICBPcHRpb25hbCBrZXl3b3JkIGFyZ3VtZW50cyBhcmUgKmZpeF9pbXBvcnRzKiwgKmVuY29kaW5nKiBhbmQgKmVycm9ycyosCiAgICB3aGljaCBhcmUgdXNlZCB0byBjb250cm9sIGNvbXBhdGliaWxpdHkgc3VwcG9ydCBmb3IgcGlja2xlIHN0cmVhbSBnZW5lcmF0ZWQKLSAgIGJ5IFB5dGhvbiAyLnguICBJZiAqZml4X2ltcG9ydHMqIGlzIHRydWUsIHBpY2tsZSB3aWxsIHRyeSB0byBtYXAgdGhlIG9sZAotICAgUHl0aG9uIDIueCBuYW1lcyB0byB0aGUgbmV3IG5hbWVzIHVzZWQgaW4gUHl0aG9uIDMueC4gIFRoZSAqZW5jb2RpbmcqIGFuZAorICAgYnkgUHl0aG9uIDIuICBJZiAqZml4X2ltcG9ydHMqIGlzIHRydWUsIHBpY2tsZSB3aWxsIHRyeSB0byBtYXAgdGhlIG9sZAorICAgUHl0aG9uIDIgbmFtZXMgdG8gdGhlIG5ldyBuYW1lcyB1c2VkIGluIFB5dGhvbiAzLiAgVGhlICplbmNvZGluZyogYW5kCiAgICAqZXJyb3JzKiB0ZWxsIHBpY2tsZSBob3cgdG8gZGVjb2RlIDgtYml0IHN0cmluZyBpbnN0YW5jZXMgcGlja2xlZCBieSBQeXRob24KLSAgIDIueDsgdGhlc2UgZGVmYXVsdCB0byAnQVNDSUknIGFuZCAnc3RyaWN0JywgcmVzcGVjdGl2ZWx5LgorICAgMjsgdGhlc2UgZGVmYXVsdCB0byAnQVNDSUknIGFuZCAnc3RyaWN0JywgcmVzcGVjdGl2ZWx5LiAgVGhlICplbmNvZGluZyogY2FuCisgICBiZSAnYnl0ZXMnIHRvIHJlYWQgdGhlc2UgOC1iaXQgc3RyaW5nIGluc3RhbmNlcyBhcyBieXRlcyBvYmplY3RzLgogCiAKIFRoZSA6bW9kOmBwaWNrbGVgIG1vZHVsZSBkZWZpbmVzIHRocmVlIGV4Y2VwdGlvbnM6CkBAIC0yNzksMjEgKzI4MiwxOSBAQAogCiAgICBUaGlzIHRha2VzIGEgYmluYXJ5IGZpbGUgZm9yIHdyaXRpbmcgYSBwaWNrbGUgZGF0YSBzdHJlYW0uCiAKLSAgIFRoZSBvcHRpb25hbCAqcHJvdG9jb2wqIGFyZ3VtZW50IHRlbGxzIHRoZSBwaWNrbGVyIHRvIHVzZSB0aGUgZ2l2ZW4gcHJvdG9jb2w7Ci0gICBzdXBwb3J0ZWQgcHJvdG9jb2xzIGFyZSAwLCAxLCAyLCAzLiAgVGhlIGRlZmF1bHQgcHJvdG9jb2wgaXMgMzsgYQotICAgYmFja3dhcmQtaW5jb21wYXRpYmxlIHByb3RvY29sIGRlc2lnbmVkIGZvciBQeXRob24gMy4wLgotCi0gICBTcGVjaWZ5aW5nIGEgbmVnYXRpdmUgcHJvdG9jb2wgdmVyc2lvbiBzZWxlY3RzIHRoZSBoaWdoZXN0IHByb3RvY29sIHZlcnNpb24KLSAgIHN1cHBvcnRlZC4gIFRoZSBoaWdoZXIgdGhlIHByb3RvY29sIHVzZWQsIHRoZSBtb3JlIHJlY2VudCB0aGUgdmVyc2lvbiBvZgotICAgUHl0aG9uIG5lZWRlZCB0byByZWFkIHRoZSBwaWNrbGUgcHJvZHVjZWQuCisgICBUaGUgb3B0aW9uYWwgKnByb3RvY29sKiBhcmd1bWVudCwgYW4gaW50ZWdlciwgdGVsbHMgdGhlIHBpY2tsZXIgdG8gdXNlCisgICB0aGUgZ2l2ZW4gcHJvdG9jb2w7IHN1cHBvcnRlZCBwcm90b2NvbHMgYXJlIDAgdG8gOmRhdGE6YEhJR0hFU1RfUFJPVE9DT0xgLgorICAgSWYgbm90IHNwZWNpZmllZCwgdGhlIGRlZmF1bHQgaXMgOmRhdGE6YERFRkFVTFRfUFJPVE9DT0xgLiAgSWYgYSBuZWdhdGl2ZQorICAgbnVtYmVyIGlzIHNwZWNpZmllZCwgOmRhdGE6YEhJR0hFU1RfUFJPVE9DT0xgIGlzIHNlbGVjdGVkLgogCiAgICBUaGUgKmZpbGUqIGFyZ3VtZW50IG11c3QgaGF2ZSBhIHdyaXRlKCkgbWV0aG9kIHRoYXQgYWNjZXB0cyBhIHNpbmdsZSBieXRlcwotICAgYXJndW1lbnQuICBJdCBjYW4gdGh1cyBiZSBhbiBvbi1kaXNrIGZpbGUgb3BlbmVkIGZvciBiaW5hcnkgd3JpdGluZywgYQotICAgOmNsYXNzOmBpby5CeXRlc0lPYCBpbnN0YW5jZSwgb3IgYW55IG90aGVyIGN1c3RvbSBvYmplY3QgdGhhdCBtZWV0cyB0aGlzIGludGVyZmFjZS4KKyAgIGFyZ3VtZW50LiAgSXQgY2FuIHRodXMgYmUgYW4gb24tZGlzayBmaWxlIG9wZW5lZCBmb3IgYmluYXJ5IHdyaXRpbmcsIGFuCisgICA6Y2xhc3M6YGlvLkJ5dGVzSU9gIGluc3RhbmNlLCBvciBhbnkgb3RoZXIgY3VzdG9tIG9iamVjdCB0aGF0IG1lZXRzIHRoaXMKKyAgIGludGVyZmFjZS4KIAogICAgSWYgKmZpeF9pbXBvcnRzKiBpcyB0cnVlIGFuZCAqcHJvdG9jb2wqIGlzIGxlc3MgdGhhbiAzLCBwaWNrbGUgd2lsbCB0cnkgdG8KLSAgIG1hcCB0aGUgbmV3IFB5dGhvbiAzLnggbmFtZXMgdG8gdGhlIG9sZCBtb2R1bGUgbmFtZXMgdXNlZCBpbiBQeXRob24gMi54LAotICAgc28gdGhhdCB0aGUgcGlja2xlIGRhdGEgc3RyZWFtIGlzIHJlYWRhYmxlIHdpdGggUHl0aG9uIDIueC4KKyAgIG1hcCB0aGUgbmV3IFB5dGhvbiAzIG5hbWVzIHRvIHRoZSBvbGQgbW9kdWxlIG5hbWVzIHVzZWQgaW4gUHl0aG9uIDIsIHNvCisgICB0aGF0IHRoZSBwaWNrbGUgZGF0YSBzdHJlYW0gaXMgcmVhZGFibGUgd2l0aCBQeXRob24gMi4KIAogICAgLi4gbWV0aG9kOjogZHVtcChvYmopCiAKQEAgLTM1NSwxNiArMzU2LDE3IEBACiAKICAgIFRoZSBhcmd1bWVudCAqZmlsZSogbXVzdCBoYXZlIHR3byBtZXRob2RzLCBhIHJlYWQoKSBtZXRob2QgdGhhdCB0YWtlcyBhbgogICAgaW50ZWdlciBhcmd1bWVudCwgYW5kIGEgcmVhZGxpbmUoKSBtZXRob2QgdGhhdCByZXF1aXJlcyBubyBhcmd1bWVudHMuICBCb3RoCi0gICBtZXRob2RzIHNob3VsZCByZXR1cm4gYnl0ZXMuICBUaHVzICpmaWxlKiBjYW4gYmUgYW4gb24tZGlzayBmaWxlIG9iamVjdCBvcGVuZWQKLSAgIGZvciBiaW5hcnkgcmVhZGluZywgYSA6Y2xhc3M6YGlvLkJ5dGVzSU9gIG9iamVjdCwgb3IgYW55IG90aGVyIGN1c3RvbSBvYmplY3QKLSAgIHRoYXQgbWVldHMgdGhpcyBpbnRlcmZhY2UuCisgICBtZXRob2RzIHNob3VsZCByZXR1cm4gYnl0ZXMuICBUaHVzICpmaWxlKiBjYW4gYmUgYW4gb24tZGlzayBmaWxlIG9iamVjdAorICAgb3BlbmVkIGZvciBiaW5hcnkgcmVhZGluZywgYW4gOmNsYXNzOmBpby5CeXRlc0lPYCBvYmplY3QsIG9yIGFueSBvdGhlcgorICAgY3VzdG9tIG9iamVjdCB0aGF0IG1lZXRzIHRoaXMgaW50ZXJmYWNlLgogCiAgICBPcHRpb25hbCBrZXl3b3JkIGFyZ3VtZW50cyBhcmUgKmZpeF9pbXBvcnRzKiwgKmVuY29kaW5nKiBhbmQgKmVycm9ycyosCiAgICB3aGljaCBhcmUgdXNlZCB0byBjb250cm9sIGNvbXBhdGliaWxpdHkgc3VwcG9ydCBmb3IgcGlja2xlIHN0cmVhbSBnZW5lcmF0ZWQKLSAgIGJ5IFB5dGhvbiAyLnguICBJZiAqZml4X2ltcG9ydHMqIGlzIHRydWUsIHBpY2tsZSB3aWxsIHRyeSB0byBtYXAgdGhlIG9sZAotICAgUHl0aG9uIDIueCBuYW1lcyB0byB0aGUgbmV3IG5hbWVzIHVzZWQgaW4gUHl0aG9uIDMueC4gIFRoZSAqZW5jb2RpbmcqIGFuZAorICAgYnkgUHl0aG9uIDIuICBJZiAqZml4X2ltcG9ydHMqIGlzIHRydWUsIHBpY2tsZSB3aWxsIHRyeSB0byBtYXAgdGhlIG9sZAorICAgUHl0aG9uIDIgbmFtZXMgdG8gdGhlIG5ldyBuYW1lcyB1c2VkIGluIFB5dGhvbiAzLiAgVGhlICplbmNvZGluZyogYW5kCiAgICAqZXJyb3JzKiB0ZWxsIHBpY2tsZSBob3cgdG8gZGVjb2RlIDgtYml0IHN0cmluZyBpbnN0YW5jZXMgcGlja2xlZCBieSBQeXRob24KLSAgIDIueDsgdGhlc2UgZGVmYXVsdCB0byAnQVNDSUknIGFuZCAnc3RyaWN0JywgcmVzcGVjdGl2ZWx5LgorICAgMjsgdGhlc2UgZGVmYXVsdCB0byAnQVNDSUknIGFuZCAnc3RyaWN0JywgcmVzcGVjdGl2ZWx5LiAgVGhlICplbmNvZGluZyogY2FuCisgICBiZSAnYnl0ZXMnIHRvIHJlYWQgdGhlc2Ugw584LWJpdCBzdHJpbmcgaW5zdGFuY2VzIGFzIGJ5dGVzIG9iamVjdHMuCiAKICAgIC4uIG1ldGhvZDo6IGxvYWQoKQogCkBAIC00MDksNyArNDExLDggQEAKIAogKiB0dXBsZXMsIGxpc3RzLCBzZXRzLCBhbmQgZGljdGlvbmFyaWVzIGNvbnRhaW5pbmcgb25seSBwaWNrbGFibGUgb2JqZWN0cwogCi0qIGZ1bmN0aW9ucyBkZWZpbmVkIGF0IHRoZSB0b3AgbGV2ZWwgb2YgYSBtb2R1bGUKKyogZnVuY3Rpb25zIGRlZmluZWQgYXQgdGhlIHRvcCBsZXZlbCBvZiBhIG1vZHVsZSAodXNpbmcgOmtleXdvcmQ6YGRlZmAsIG5vdAorICA6a2V5d29yZDpgbGFtYmRhYCkKIAogKiBidWlsdC1pbiBmdW5jdGlvbnMgZGVmaW5lZCBhdCB0aGUgdG9wIGxldmVsIG9mIGEgbW9kdWxlCiAKQEAgLTQyNyw3ICs0MzAsNyBAQAogOmZ1bmM6YHN5cy5zZXRyZWN1cnNpb25saW1pdGAuCiAKIE5vdGUgdGhhdCBmdW5jdGlvbnMgKGJ1aWx0LWluIGFuZCB1c2VyLWRlZmluZWQpIGFyZSBwaWNrbGVkIGJ5ICJmdWxseSBxdWFsaWZpZWQiCi1uYW1lIHJlZmVyZW5jZSwgbm90IGJ5IHZhbHVlLiAgVGhpcyBtZWFucyB0aGF0IG9ubHkgdGhlIGZ1bmN0aW9uIG5hbWUgaXMKK25hbWUgcmVmZXJlbmNlLCBub3QgYnkgdmFsdWUuIFsjXV8gIFRoaXMgbWVhbnMgdGhhdCBvbmx5IHRoZSBmdW5jdGlvbiBuYW1lIGlzCiBwaWNrbGVkLCBhbG9uZyB3aXRoIHRoZSBuYW1lIG9mIHRoZSBtb2R1bGUgdGhlIGZ1bmN0aW9uIGlzIGRlZmluZWQgaW4uICBOZWl0aGVyCiB0aGUgZnVuY3Rpb24ncyBjb2RlLCBub3IgYW55IG9mIGl0cyBmdW5jdGlvbiBhdHRyaWJ1dGVzIGFyZSBwaWNrbGVkLiAgVGh1cyB0aGUKIGRlZmluaW5nIG1vZHVsZSBtdXN0IGJlIGltcG9ydGFibGUgaW4gdGhlIHVucGlja2xpbmcgZW52aXJvbm1lbnQsIGFuZCB0aGUgbW9kdWxlCkBAIC00ODMsMTIgKzQ4NiwyOSBAQAogQ2xhc3NlcyBjYW4gYWx0ZXIgdGhlIGRlZmF1bHQgYmVoYXZpb3VyIGJ5IHByb3ZpZGluZyBvbmUgb3Igc2V2ZXJhbCBzcGVjaWFsCiBtZXRob2RzOgogCisuLiBtZXRob2Q6OiBvYmplY3QuX19nZXRuZXdhcmdzX2V4X18oKQorCisgICBJbiBwcm90b2NvbHMgNCBhbmQgbmV3ZXIsIGNsYXNzZXMgdGhhdCBpbXBsZW1lbnRzIHRoZQorICAgOm1ldGg6YF9fZ2V0bmV3YXJnc19leF9fYCBtZXRob2QgY2FuIGRpY3RhdGUgdGhlIHZhbHVlcyBwYXNzZWQgdG8gdGhlCisgICA6bWV0aDpgX19uZXdfX2AgbWV0aG9kIHVwb24gdW5waWNrbGluZy4gIFRoZSBtZXRob2QgbXVzdCByZXR1cm4gYSBwYWlyCisgICBgYChhcmdzLCBrd2FyZ3MpYGAgd2hlcmUgKmFyZ3MqIGlzIGEgdHVwbGUgb2YgcG9zaXRpb25hbCBhcmd1bWVudHMKKyAgIGFuZCAqa3dhcmdzKiBhIGRpY3Rpb25hcnkgb2YgbmFtZWQgYXJndW1lbnRzIGZvciBjb25zdHJ1Y3RpbmcgdGhlCisgICBvYmplY3QuICBUaG9zZSB3aWxsIGJlIHBhc3NlZCB0byB0aGUgOm1ldGg6YF9fbmV3X19gIG1ldGhvZCB1cG9uCisgICB1bnBpY2tsaW5nLgorCisgICBZb3Ugc2hvdWxkIGltcGxlbWVudCB0aGlzIG1ldGhvZCBpZiB0aGUgOm1ldGg6YF9fbmV3X19gIG1ldGhvZCBvZiB5b3VyCisgICBjbGFzcyByZXF1aXJlcyBrZXl3b3JkLW9ubHkgYXJndW1lbnRzLiAgT3RoZXJ3aXNlLCBpdCBpcyByZWNvbW1lbmRlZCBmb3IKKyAgIGNvbXBhdGliaWxpdHkgdG8gaW1wbGVtZW50IDptZXRoOmBfX2dldG5ld2FyZ3NfX2AuCisKKwogLi4gbWV0aG9kOjogb2JqZWN0Ll9fZ2V0bmV3YXJnc19fKCkKIAotICAgSW4gcHJvdG9jb2wgMiBhbmQgbmV3ZXIsIGNsYXNzZXMgdGhhdCBpbXBsZW1lbnRzIHRoZSA6bWV0aDpgX19nZXRuZXdhcmdzX19gCi0gICBtZXRob2QgY2FuIGRpY3RhdGUgdGhlIHZhbHVlcyBwYXNzZWQgdG8gdGhlIDptZXRoOmBfX25ld19fYCBtZXRob2QgdXBvbgotICAgdW5waWNrbGluZy4gIFRoaXMgaXMgb2Z0ZW4gbmVlZGVkIGZvciBjbGFzc2VzIHdob3NlIDptZXRoOmBfX25ld19fYCBtZXRob2QKLSAgIHJlcXVpcmVzIGFyZ3VtZW50cy4KKyAgIFRoaXMgbWV0aG9kIHNlcnZlIGEgc2ltaWxhciBwdXJwb3NlIGFzIDptZXRoOmBfX2dldG5ld2FyZ3NfZXhfX2AgYnV0CisgICBmb3IgcHJvdG9jb2xzIDIgYW5kIG5ld2VyLiAgSXQgbXVzdCByZXR1cm4gYSB0dXBsZSBvZiBhcmd1bWVudHMgYGBhcmdzYGAKKyAgIHdoaWNoIHdpbGwgYmUgcGFzc2VkIHRvIHRoZSA6bWV0aDpgX19uZXdfX2AgbWV0aG9kIHVwb24gdW5waWNrbGluZy4KKworICAgSW4gcHJvdG9jb2xzIDQgYW5kIG5ld2VyLCA6bWV0aDpgX19nZXRuZXdhcmdzX19gIHdpbGwgbm90IGJlIGNhbGxlZCBpZgorICAgOm1ldGg6YF9fZ2V0bmV3YXJnc19leF9fYCBpcyBkZWZpbmVkLgogCiAKIC4uIG1ldGhvZDo6IG9iamVjdC5fX2dldHN0YXRlX18oKQpAQCAtNTIwLDEwICs1NDAsMTAgQEAKIAogICAgQXQgdW5waWNrbGluZyB0aW1lLCBzb21lIG1ldGhvZHMgbGlrZSA6bWV0aDpgX19nZXRhdHRyX19gLAogICAgOm1ldGg6YF9fZ2V0YXR0cmlidXRlX19gLCBvciA6bWV0aDpgX19zZXRhdHRyX19gIG1heSBiZSBjYWxsZWQgdXBvbiB0aGUKLSAgIGluc3RhbmNlLiAgSW4gY2FzZSB0aG9zZSBtZXRob2RzIHJlbHkgb24gc29tZSBpbnRlcm5hbCBpbnZhcmlhbnQgYmVpbmcgdHJ1ZSwKLSAgIHRoZSB0eXBlIHNob3VsZCBpbXBsZW1lbnQgOm1ldGg6YF9fZ2V0bmV3YXJnc19fYCB0byBlc3RhYmxpc2ggc3VjaCBhbgotICAgaW52YXJpYW50OyBvdGhlcndpc2UsIG5laXRoZXIgOm1ldGg6YF9fbmV3X19gIG5vciA6bWV0aDpgX19pbml0X19gIHdpbGwgYmUKLSAgIGNhbGxlZC4KKyAgIGluc3RhbmNlLiAgSW4gY2FzZSB0aG9zZSBtZXRob2RzIHJlbHkgb24gc29tZSBpbnRlcm5hbCBpbnZhcmlhbnQgYmVpbmcKKyAgIHRydWUsIHRoZSB0eXBlIHNob3VsZCBpbXBsZW1lbnQgOm1ldGg6YF9fZ2V0bmV3YXJnc19fYCBvcgorICAgOm1ldGg6YF9fZ2V0bmV3YXJnc19leF9fYCB0byBlc3RhYmxpc2ggc3VjaCBhbiBpbnZhcmlhbnQ7IG90aGVyd2lzZSwKKyAgIG5laXRoZXIgOm1ldGg6YF9fbmV3X19gIG5vciA6bWV0aDpgX19pbml0X19gIHdpbGwgYmUgY2FsbGVkLgogCiAuLiBpbmRleDo6IHBhaXI6IGNvcHk7IHByb3RvY29sCiAKQEAgLTUzNSw3ICs1NTUsNyBAQAogCiBBbHRob3VnaCBwb3dlcmZ1bCwgaW1wbGVtZW50aW5nIDptZXRoOmBfX3JlZHVjZV9fYCBkaXJlY3RseSBpbiB5b3VyIGNsYXNzZXMgaXMKIGVycm9yIHByb25lLiAgRm9yIHRoaXMgcmVhc29uLCBjbGFzcyBkZXNpZ25lcnMgc2hvdWxkIHVzZSB0aGUgaGlnaC1sZXZlbAotaW50ZXJmYWNlIChpLmUuLCA6bWV0aDpgX19nZXRuZXdhcmdzX19gLCA6bWV0aDpgX19nZXRzdGF0ZV9fYCBhbmQKK2ludGVyZmFjZSAoaS5lLiwgOm1ldGg6YF9fZ2V0bmV3YXJnc19leF9fYCwgOm1ldGg6YF9fZ2V0c3RhdGVfX2AgYW5kCiA6bWV0aDpgX19zZXRzdGF0ZV9fYCkgd2hlbmV2ZXIgcG9zc2libGUuICBXZSB3aWxsIHNob3csIGhvd2V2ZXIsIGNhc2VzIHdoZXJlCiB1c2luZyA6bWV0aDpgX19yZWR1Y2VfX2AgaXMgdGhlIG9ubHkgb3B0aW9uIG9yIGxlYWRzIHRvIG1vcmUgZWZmaWNpZW50IHBpY2tsaW5nCiBvciBib3RoLgpAQCAtODgzLDYgKzkwMyw5IEBACiAKIC4uIFsjXSBEb24ndCBjb25mdXNlIHRoaXMgd2l0aCB0aGUgOm1vZDpgbWFyc2hhbGAgbW9kdWxlCiAKKy4uIFsjXSBUaGlzIGlzIHdoeSA6a2V5d29yZDpgbGFtYmRhYCBmdW5jdGlvbnMgY2Fubm90IGJlIHBpY2tsZWQ6ICBhbGwKKyAgICA6a2V5d29yZDpgbGFtYmRhYCBmdW5jdGlvbnMgc2hhcmUgdGhlIHNhbWUgbmFtZTogIGBgPGxhbWJkYT5gYC4KKwogLi4gWyNdIFRoZSBleGNlcHRpb24gcmFpc2VkIHdpbGwgbGlrZWx5IGJlIGFuIDpleGM6YEltcG9ydEVycm9yYCBvciBhbgogICAgOmV4YzpgQXR0cmlidXRlRXJyb3JgIGJ1dCBpdCBjb3VsZCBiZSBzb21ldGhpbmcgZWxzZS4KIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvcGtndXRpbC5yc3QgYi9Eb2MvbGlicmFyeS9wa2d1dGlsLnJzdAppbmRleCA3YzRmOTEyLi4xM2VhN2I5IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9wa2d1dGlsLnJzdAorKysgYi9Eb2MvbGlicmFyeS9wa2d1dGlsLnJzdApAQCAtNzQsMTUgKzc0LDE3IEBACiAKICAgIFJldHJpZXZlIGEgOnBlcDpgMzAyYCBtb2R1bGUgbG9hZGVyIGZvciB0aGUgZ2l2ZW4gKmZ1bGxuYW1lKi4KIAotICAgVGhpcyBpcyBhIGNvbnZlbmllbmNlIHdyYXBwZXIgYXJvdW5kIDpmdW5jOmBpbXBvcnRsaWIuZmluZF9sb2FkZXJgIHRoYXQKLSAgIHNldHMgdGhlICpwYXRoKiBhcmd1bWVudCBjb3JyZWN0bHkgd2hlbiBzZWFyY2hpbmcgZm9yIHN1Ym1vZHVsZXMsIGFuZAotICAgYWxzbyBlbnN1cmVzIHBhcmVudCBwYWNrYWdlcyAoaWYgYW55KSBhcmUgaW1wb3J0ZWQgYmVmb3JlIHNlYXJjaGluZyBmb3IKLSAgIHN1Ym1vZHVsZXMuCisgICBUaGlzIGlzIGEgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd3JhcHBlciBhcm91bmQKKyAgIDpmdW5jOmBpbXBvcnRsaWIudXRpbC5maW5kX3NwZWNgIHRoYXQgY29udmVydHMgbW9zdCBmYWlsdXJlcyB0bworICAgOmV4YzpgSW1wb3J0RXJyb3JgIGFuZCBvbmx5IHJldHVybnMgdGhlIGxvYWRlciByYXRoZXIgdGhhbiB0aGUgZnVsbAorICAgOmNsYXNzOmBNb2R1bGVTcGVjYC4KIAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKICAgICAgIFVwZGF0ZWQgdG8gYmUgYmFzZWQgZGlyZWN0bHkgb24gOm1vZDpgaW1wb3J0bGliYCByYXRoZXIgdGhhbiByZWx5aW5nCiAgICAgICBvbiB0aGUgcGFja2FnZSBpbnRlcm5hbCBQRVAgMzAyIGltcG9ydCBlbXVsYXRpb24uCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBVcGRhdGVkIHRvIGJlIGJhc2VkIG9uIDpwZXA6YDQ1MWAKIAogLi4gZnVuY3Rpb246OiBnZXRfaW1wb3J0ZXIocGF0aF9pdGVtKQogCkBAIC0xMDksMTQgKzExMSwxMyBAQAogICAgbm90IGFscmVhZHkgaW1wb3J0ZWQsIGl0cyBjb250YWluaW5nIHBhY2thZ2UgKGlmIGFueSkgaXMgaW1wb3J0ZWQsIGluIG9yZGVyCiAgICB0byBlc3RhYmxpc2ggdGhlIHBhY2thZ2UgYGBfX3BhdGhfX2BgLgogCi0gICBUaGlzIGZ1bmN0aW9uIHVzZXMgOmZ1bmM6YGl0ZXJfaW1wb3J0ZXJzYCwgYW5kIGlzIHRodXMgc3ViamVjdCB0byB0aGUgc2FtZQotICAgbGltaXRhdGlvbnMgcmVnYXJkaW5nIHBsYXRmb3JtLXNwZWNpZmljIHNwZWNpYWwgaW1wb3J0IGxvY2F0aW9ucyBzdWNoIGFzIHRoZQotICAgV2luZG93cyByZWdpc3RyeS4KLQogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKICAgICAgIFVwZGF0ZWQgdG8gYmUgYmFzZWQgZGlyZWN0bHkgb24gOm1vZDpgaW1wb3J0bGliYCByYXRoZXIgdGhhbiByZWx5aW5nCiAgICAgICBvbiB0aGUgcGFja2FnZSBpbnRlcm5hbCBQRVAgMzAyIGltcG9ydCBlbXVsYXRpb24uCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBVcGRhdGVkIHRvIGJlIGJhc2VkIG9uIDpwZXA6YDQ1MWAKKwogCiAuLiBmdW5jdGlvbjo6IGl0ZXJfaW1wb3J0ZXJzKGZ1bGxuYW1lPScnKQogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9wbGF0Zm9ybS5yc3QgYi9Eb2MvbGlicmFyeS9wbGF0Zm9ybS5yc3QKaW5kZXggZTI3ZjJhZC4uNjZiNjg5MiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvcGxhdGZvcm0ucnN0CisrKyBiL0RvYy9saWJyYXJ5L3BsYXRmb3JtLnJzdApAQCAtMTE3LDcgKzExNyw3IEBACiAKIC4uIGZ1bmN0aW9uOjogcHl0aG9uX3ZlcnNpb24oKQogCi0gICBSZXR1cm5zIHRoZSBQeXRob24gdmVyc2lvbiBhcyBzdHJpbmcgYGAnbWFqb3IubWlub3IucGF0Y2hsZXZlbCdgYAorICAgUmV0dXJucyB0aGUgUHl0aG9uIHZlcnNpb24gYXMgc3RyaW5nIGBgJ21ham9yLm1pbm9yLnBhdGNobGV2ZWwnYGAuCiAKICAgIE5vdGUgdGhhdCB1bmxpa2UgdGhlIFB5dGhvbiBgYHN5cy52ZXJzaW9uYGAsIHRoZSByZXR1cm5lZCB2YWx1ZSB3aWxsIGFsd2F5cwogICAgaW5jbHVkZSB0aGUgcGF0Y2hsZXZlbCAoaXQgZGVmYXVsdHMgdG8gMCkuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9wbGlzdGxpYi5yc3QgYi9Eb2MvbGlicmFyeS9wbGlzdGxpYi5yc3QKaW5kZXggYTI2NzM2OC4uMmMxZjNkZCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvcGxpc3RsaWIucnN0CisrKyBiL0RvYy9saWJyYXJ5L3BsaXN0bGliLnJzdApAQCAtMTYsNjYgKzE2LDE3NCBAQAogLS0tLS0tLS0tLS0tLS0KIAogVGhpcyBtb2R1bGUgcHJvdmlkZXMgYW4gaW50ZXJmYWNlIGZvciByZWFkaW5nIGFuZCB3cml0aW5nIHRoZSAicHJvcGVydHkgbGlzdCIKLVhNTCBmaWxlcyB1c2VkIG1haW5seSBieSBNYWMgT1MgWC4KK2ZpbGVzIHVzZWQgbWFpbmx5IGJ5IE1hYyBPUyBYIGFuZCBzdXBwb3J0cyBib3RoIGJpbmFyeSBhbmQgWE1MIHBsaXN0IGZpbGVzLgogCi1UaGUgcHJvcGVydHkgbGlzdCAoYGAucGxpc3RgYCkgZmlsZSBmb3JtYXQgaXMgYSBzaW1wbGUgWE1MIHBpY2tsZSBzdXBwb3J0aW5nCitUaGUgcHJvcGVydHkgbGlzdCAoYGAucGxpc3RgYCkgZmlsZSBmb3JtYXQgaXMgYSBzaW1wbGUgc2VyaWFsaXphdGlvbiBzdXBwb3J0aW5nCiBiYXNpYyBvYmplY3QgdHlwZXMsIGxpa2UgZGljdGlvbmFyaWVzLCBsaXN0cywgbnVtYmVycyBhbmQgc3RyaW5ncy4gIFVzdWFsbHkgdGhlCiB0b3AgbGV2ZWwgb2JqZWN0IGlzIGEgZGljdGlvbmFyeS4KIAotVG8gd3JpdGUgb3V0IGFuZCB0byBwYXJzZSBhIHBsaXN0IGZpbGUsIHVzZSB0aGUgOmZ1bmM6YHdyaXRlUGxpc3RgIGFuZAotOmZ1bmM6YHJlYWRQbGlzdGAgZnVuY3Rpb25zLgorVG8gd3JpdGUgb3V0IGFuZCB0byBwYXJzZSBhIHBsaXN0IGZpbGUsIHVzZSB0aGUgOmZ1bmM6YGR1bXBgIGFuZAorOmZ1bmM6YGxvYWRgIGZ1bmN0aW9ucy4KIAotVG8gd29yayB3aXRoIHBsaXN0IGRhdGEgaW4gYnl0ZXMgb2JqZWN0cywgdXNlIDpmdW5jOmB3cml0ZVBsaXN0VG9CeXRlc2AKLWFuZCA6ZnVuYzpgcmVhZFBsaXN0RnJvbUJ5dGVzYC4KK1RvIHdvcmsgd2l0aCBwbGlzdCBkYXRhIGluIGJ5dGVzIG9iamVjdHMsIHVzZSA6ZnVuYzpgZHVtcHNgCithbmQgOmZ1bmM6YGxvYWRzYC4KIAogVmFsdWVzIGNhbiBiZSBzdHJpbmdzLCBpbnRlZ2VycywgZmxvYXRzLCBib29sZWFucywgdHVwbGVzLCBsaXN0cywgZGljdGlvbmFyaWVzCi0oYnV0IG9ubHkgd2l0aCBzdHJpbmcga2V5cyksIDpjbGFzczpgRGF0YWAgb3IgOmNsYXNzOmBkYXRldGltZS5kYXRldGltZWAKLW9iamVjdHMuICBTdHJpbmcgdmFsdWVzIChpbmNsdWRpbmcgZGljdGlvbmFyeSBrZXlzKSBoYXZlIHRvIGJlIHVuaWNvZGUgc3RyaW5ncyAtLQotdGhleSB3aWxsIGJlIHdyaXR0ZW4gb3V0IGFzIFVURi04LgorKGJ1dCBvbmx5IHdpdGggc3RyaW5nIGtleXMpLCA6Y2xhc3M6YERhdGFgLCA6Y2xhc3M6YGJ5dGVzYCwgOmNsYXNzOmBieXRlc2FycmF5YAorb3IgOmNsYXNzOmBkYXRldGltZS5kYXRldGltZWAgb2JqZWN0cy4KIAotVGhlIGBgPGRhdGE+YGAgcGxpc3QgdHlwZSBpcyBzdXBwb3J0ZWQgdGhyb3VnaCB0aGUgOmNsYXNzOmBEYXRhYCBjbGFzcy4gIFRoaXMgaXMKLWEgdGhpbiB3cmFwcGVyIGFyb3VuZCBhIFB5dGhvbiBieXRlcyBvYmplY3QuICBVc2UgOmNsYXNzOmBEYXRhYCBpZiB5b3VyIHN0cmluZ3MKLWNvbnRhaW4gY29udHJvbCBjaGFyYWN0ZXJzLgorLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgIE5ldyBBUEksIG9sZCBBUEkgZGVwcmVjYXRlZC4gIFN1cHBvcnQgZm9yIGJpbmFyeSBmb3JtYXQgcGxpc3RzIGFkZGVkLgogCiAuLiBzZWVhbHNvOjoKIAotICAgYFBMaXN0IG1hbnVhbCBwYWdlIDxodHRwOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL0Rhcndpbi9SZWZlcmVuY2UvTWFuUGFnZXMvbWFuNS9wbGlzdC41Lmh0bWw+YF8KKyAgIGBQTGlzdCBtYW51YWwgcGFnZSA8aHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2xpYnJhcnkvbWFjL2RvY3VtZW50YXRpb24vRGFyd2luL1JlZmVyZW5jZS9NYW5QYWdlcy9tYW41L3BsaXN0LjUuaHRtbD5gXwogICAgICAgQXBwbGUncyBkb2N1bWVudGF0aW9uIG9mIHRoZSBmaWxlIGZvcm1hdC4KIAogCiBUaGlzIG1vZHVsZSBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOgogCi0uLiBmdW5jdGlvbjo6IHJlYWRQbGlzdChwYXRoT3JGaWxlKQorLi4gZnVuY3Rpb246OiBsb2FkKGZwLCBcKiwgZm10PU5vbmUsIHVzZV9idWlsdGluX3R5cGVzPVRydWUsIGRpY3RfdHlwZT1kaWN0KQogCi0gICBSZWFkIGEgcGxpc3QgZmlsZS4gKnBhdGhPckZpbGUqIG1heSBlaXRoZXIgYmUgYSBmaWxlIG5hbWUgb3IgYSAocmVhZGFibGUgYW5kCi0gICBiaW5hcnkpIGZpbGUgb2JqZWN0LiAgUmV0dXJuIHRoZSB1bnBhY2tlZCByb290IG9iamVjdCAod2hpY2ggdXN1YWxseSBpcyBhCisgICBSZWFkIGEgcGxpc3QgZmlsZS4gKmZwKiBzaG91bGQgYmUgYSByZWFkYWJsZSBhbmQgYmluYXJ5IGZpbGUgb2JqZWN0LgorICAgUmV0dXJuIHRoZSB1bnBhY2tlZCByb290IG9iamVjdCAod2hpY2ggdXN1YWxseSBpcyBhCiAgICBkaWN0aW9uYXJ5KS4KIAotICAgVGhlIFhNTCBkYXRhIGlzIHBhcnNlZCB1c2luZyB0aGUgRXhwYXQgcGFyc2VyIGZyb20gOm1vZDpgeG1sLnBhcnNlcnMuZXhwYXRgCi0gICAtLSBzZWUgaXRzIGRvY3VtZW50YXRpb24gZm9yIHBvc3NpYmxlIGV4Y2VwdGlvbnMgb24gaWxsLWZvcm1lZCBYTUwuCi0gICBVbmtub3duIGVsZW1lbnRzIHdpbGwgc2ltcGx5IGJlIGlnbm9yZWQgYnkgdGhlIHBsaXN0IHBhcnNlci4KKyAgIFRoZSAqZm10KiBpcyB0aGUgZm9ybWF0IG9mIHRoZSBmaWxlIGFuZCB0aGUgZm9sbG93aW5nIHZhbHVlcyBhcmUgdmFsaWQ6CisKKyAgICogOmRhdGE6YE5vbmVgOiBBdXRvZGV0ZWN0IHRoZSBmaWxlIGZvcm1hdAorCisgICAqIDpkYXRhOmBGTVRfWE1MYDogWE1MIGZpbGUgZm9ybWF0CisKKyAgICogOmRhdGE6YEZNVF9CSU5BUllgOiBCaW5hcnkgcGxpc3QgZm9ybWF0CisKKyAgIElmICp1c2VfYnVpbHRpbl90eXBlcyogaXMgdHJ1ZSAodGhlIGRlZmF1bHQpIGJpbmFyeSBkYXRhIHdpbGwgYmUgcmV0dXJuZWQKKyAgIGFzIGluc3RhbmNlcyBvZiA6Y2xhc3M6YGJ5dGVzYCwgb3RoZXJ3aXNlIGl0IGlzIHJldHVybmVkIGFzIGluc3RhbmNlcyBvZgorICAgOmNsYXNzOmBEYXRhYC4KKworICAgVGhlICpkaWN0X3R5cGUqIGlzIHRoZSB0eXBlIHVzZWQgZm9yIGRpY3Rpb25hcmllcyB0aGF0IGFyZSByZWFkIGZyb20gdGhlCisgICBwbGlzdCBmaWxlLiBUaGUgZXhhY3Qgc3RydWN0dXJlIG9mIHRoZSBwbGlzdCBjYW4gYmUgcmVjb3ZlcmVkIGJ5IHVzaW5nCisgICA6Y2xhc3M6YGNvbGxlY3Rpb25zLk9yZGVyZWREaWN0YCAoYWx0aG91Z2ggdGhlIG9yZGVyIG9mIGtleXMgc2hvdWxkbid0IGJlCisgICBpbXBvcnRhbnQgaW4gcGxpc3QgZmlsZXMpLgorCisgICBYTUwgZGF0YSBmb3IgdGhlIDpkYXRhOmBGTVRfWE1MYCBmb3JtYXQgaXMgcGFyc2VkIHVzaW5nIHRoZSBFeHBhdCBwYXJzZXIKKyAgIGZyb20gOm1vZDpgeG1sLnBhcnNlcnMuZXhwYXRgIC0tIHNlZSBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgcG9zc2libGUKKyAgIGV4Y2VwdGlvbnMgb24gaWxsLWZvcm1lZCBYTUwuICBVbmtub3duIGVsZW1lbnRzIHdpbGwgc2ltcGx5IGJlIGlnbm9yZWQKKyAgIGJ5IHRoZSBwbGlzdCBwYXJzZXIuCisKKyAgIFRoZSBwYXJzZXIgZm9yIHRoZSBiaW5hcnkgZm9ybWF0IHJhaXNlcyA6ZXhjOmBJbnZhbGlkRmlsZUV4Y2VwdGlvbmAKKyAgIHdoZW4gdGhlIGZpbGUgY2Fubm90IGJlIHBhcnNlZC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKworLi4gZnVuY3Rpb246OiBsb2FkcyhkYXRhLCBcKiwgZm10PU5vbmUsIHVzZV9idWlsdGluX3R5cGVzPVRydWUsIGRpY3RfdHlwZT1kaWN0KQorCisgICBMb2FkIGEgcGxpc3QgZnJvbSBhIGJ5dGVzIG9iamVjdC4gU2VlIDpmdW5jOmBsb2FkYCBmb3IgYW4gZXhwbGFuYXRpb24gb2YKKyAgIHRoZSBrZXl3b3JkIGFyZ3VtZW50cy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKworLi4gZnVuY3Rpb246OiBkdW1wKHZhbHVlLCBmcCwgXCosIGZtdD1GTVRfWE1MLCBzb3J0X2tleXM9VHJ1ZSwgc2tpcGtleXM9RmFsc2UpCisKKyAgIFdyaXRlICp2YWx1ZSogdG8gYSBwbGlzdCBmaWxlLiAqRnAqIHNob3VsZCBiZSBhIHdyaXRhYmxlLCBiaW5hcnkKKyAgIGZpbGUgb2JqZWN0LgorCisgICBUaGUgKmZtdCogYXJndW1lbnQgc3BlY2lmaWVzIHRoZSBmb3JtYXQgb2YgdGhlIHBsaXN0IGZpbGUgYW5kIGNhbiBiZQorICAgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorCisgICAqIDpkYXRhOmBGTVRfWE1MYDogWE1MIGZvcm1hdHRlZCBwbGlzdCBmaWxlCisKKyAgICogOmRhdGE6YEZNVF9CSU5BUllgOiBCaW5hcnkgZm9ybWF0dGVkIHBsaXN0IGZpbGUKKworICAgV2hlbiAqc29ydF9rZXlzKiBpcyB0cnVlICh0aGUgZGVmYXVsdCkgdGhlIGtleXMgZm9yIGRpY3Rpb25hcmllcyB3aWxsIGJlCisgICB3cml0dGVuIHRvIHRoZSBwbGlzdCBpbiBzb3J0ZWQgb3JkZXIsIG90aGVyd2lzZSB0aGV5IHdpbGwgYmUgd3JpdHRlbiBpbgorICAgdGhlIGl0ZXJhdGlvbiBvcmRlciBvZiB0aGUgZGljdGlvbmFyeS4KKworICAgV2hlbiAqc2tpcGtleXMqIGlzIGZhbHNlICh0aGUgZGVmYXVsdCkgdGhlIGZ1bmN0aW9uIHJhaXNlcyA6ZXhjOmBUeXBlRXJyb3JgCisgICB3aGVuIGEga2V5IG9mIGEgZGljdGlvbmFyeSBpcyBub3QgYSBzdHJpbmcsIG90aGVyd2lzZSBzdWNoIGtleXMgYXJlIHNraXBwZWQuCisKKyAgIEEgOmV4YzpgVHlwZUVycm9yYCB3aWxsIGJlIHJhaXNlZCBpZiB0aGUgb2JqZWN0IGlzIG9mIGFuIHVuc3VwcG9ydGVkIHR5cGUgb3IKKyAgIGEgY29udGFpbmVyIHRoYXQgY29udGFpbnMgb2JqZWN0cyBvZiB1bnN1cHBvcnRlZCB0eXBlcy4KKworICAgQW4gOmV4YzpgT3ZlcmZsb3dFcnJvcmAgd2lsbCBiZSByYWlzZWQgZm9yIGludGVnZXIgdmFsdWVzIHRoYXQgY2Fubm90CisgICBiZSByZXByZXNlbnRlZCBpbiAoYmluYXJ5KSBwbGlzdCBmaWxlcy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKworLi4gZnVuY3Rpb246OiBkdW1wcyh2YWx1ZSwgXCosIGZtdD1GTVRfWE1MLCBzb3J0X2tleXM9VHJ1ZSwgc2tpcGtleXM9RmFsc2UpCisKKyAgIFJldHVybiAqdmFsdWUqIGFzIGEgcGxpc3QtZm9ybWF0dGVkIGJ5dGVzIG9iamVjdC4gU2VlCisgICB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgOmZ1bmM6YGR1bXBgIGZvciBhbiBleHBsYW5hdGlvbiBvZiB0aGUga2V5d29yZAorICAgYXJndW1lbnRzIG9mIHRoaXMgZnVuY3Rpb24uCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCitUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUgZGVwcmVjYXRlZDoKKworLi4gZnVuY3Rpb246OiByZWFkUGxpc3QocGF0aE9yRmlsZSkKKworICAgUmVhZCBhIHBsaXN0IGZpbGUuICpwYXRoT3JGaWxlKiBtYXkgYmUgZWl0aGVyIGEgZmlsZSBuYW1lIG9yIGEgKHJlYWRhYmxlCisgICBhbmQgYmluYXJ5KSBmaWxlIG9iamVjdC4gUmV0dXJucyB0aGUgdW5wYWNrZWQgcm9vdCBvYmplY3QgKHdoaWNoIHVzdWFsbHkKKyAgIGlzIGEgZGljdGlvbmFyeSkuCisKKyAgIFRoaXMgZnVuY3Rpb24gY2FsbHMgOmZ1bmM6YGxvYWRgIHRvIGRvIHRoZSBhY3R1YWwgd29yaywgc2VlIHRoZSBkb2N1bWVudGF0aW9uCisgICBvZiA6ZnVuYzpgdGhhdCBmdW5jdGlvbiA8bG9hZD5gIGZvciBhbiBleHBsYW5hdGlvbiBvZiB0aGUga2V5d29yZCBhcmd1bWVudHMuCisKKyAgIC4uIG5vdGU6OgorCisgICAgICBEaWN0IHZhbHVlcyBpbiB0aGUgcmVzdWx0IGhhdmUgYSBgYF9fZ2V0YXR0cl9fYGAgbWV0aG9kIHRoYXQgZGVmZXJzCisgICAgICB0byBgYF9fZ2V0aXRlbV9gYC4gVGhpcyBtZWFucyB0aGF0IHlvdSBjYW4gdXNlIGF0dHJpYnV0ZSBhY2Nlc3MgdG8KKyAgICAgIGFjY2VzcyBpdGVtcyBvZiB0aGVzZSBkaWN0aW9uYXJpZXMuCisKKyAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjQgVXNlIDpmdW5jOmBsb2FkYCBpbnN0ZWFkLgogCiAKIC4uIGZ1bmN0aW9uOjogd3JpdGVQbGlzdChyb290T2JqZWN0LCBwYXRoT3JGaWxlKQogCi0gICAgV3JpdGUgKnJvb3RPYmplY3QqIHRvIGEgcGxpc3QgZmlsZS4gKnBhdGhPckZpbGUqIG1heSBlaXRoZXIgYmUgYSBmaWxlIG5hbWUKLSAgICBvciBhICh3cml0YWJsZSBhbmQgYmluYXJ5KSBmaWxlIG9iamVjdC4KKyAgIFdyaXRlICpyb290T2JqZWN0KiB0byBhbiBYTUwgcGxpc3QgZmlsZS4gKnBhdGhPckZpbGUqIG1heSBiZSBlaXRoZXIgYSBmaWxlIG5hbWUKKyAgIG9yIGEgKHdyaXRhYmxlIGFuZCBiaW5hcnkpIGZpbGUgb2JqZWN0CiAKLSAgICBBIDpleGM6YFR5cGVFcnJvcmAgd2lsbCBiZSByYWlzZWQgaWYgdGhlIG9iamVjdCBpcyBvZiBhbiB1bnN1cHBvcnRlZCB0eXBlIG9yCi0gICAgYSBjb250YWluZXIgdGhhdCBjb250YWlucyBvYmplY3RzIG9mIHVuc3VwcG9ydGVkIHR5cGVzLgorICAgLi4gZGVwcmVjYXRlZDo6IDMuNCBVc2UgOmZ1bmM6YGR1bXBgIGluc3RlYWQuCiAKIAogLi4gZnVuY3Rpb246OiByZWFkUGxpc3RGcm9tQnl0ZXMoZGF0YSkKIAogICAgUmVhZCBhIHBsaXN0IGRhdGEgZnJvbSBhIGJ5dGVzIG9iamVjdC4gIFJldHVybiB0aGUgcm9vdCBvYmplY3QuCiAKKyAgIFNlZSA6ZnVuYzpgbG9hZGAgZm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlIGtleXdvcmQgYXJndW1lbnRzLgorCisgICAuLiBub3RlOjoKKworICAgICAgRGljdCB2YWx1ZXMgaW4gdGhlIHJlc3VsdCBoYXZlIGEgYGBfX2dldGF0dHJfX2BgIG1ldGhvZCB0aGF0IGRlZmVycworICAgICAgdG8gYGBfX2dldGl0ZW1fYGAuIFRoaXMgbWVhbnMgdGhhdCB5b3UgY2FuIHVzZSBhdHRyaWJ1dGUgYWNjZXNzIHRvCisgICAgICBhY2Nlc3MgaXRlbXMgb2YgdGhlc2UgZGljdGlvbmFyaWVzLgorCisgICAuLiBkZXByZWNhdGVkOjogMy40IFVzZSA6ZnVuYzpgbG9hZHNgIGluc3RlYWQuCisKIAogLi4gZnVuY3Rpb246OiB3cml0ZVBsaXN0VG9CeXRlcyhyb290T2JqZWN0KQogCi0gICBSZXR1cm4gKnJvb3RPYmplY3QqIGFzIGEgcGxpc3QtZm9ybWF0dGVkIGJ5dGVzIG9iamVjdC4KKyAgIFJldHVybiAqcm9vdE9iamVjdCogYXMgYW4gWE1MIHBsaXN0LWZvcm1hdHRlZCBieXRlcyBvYmplY3QuCisKKyAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjQgVXNlIDpmdW5jOmBkdW1wc2AgaW5zdGVhZC4KIAogCi1UaGUgZm9sbG93aW5nIGNsYXNzIGlzIGF2YWlsYWJsZToKK1RoZSBmb2xsb3dpbmcgY2xhc3NlcyBhcmUgYXZhaWxhYmxlOgorCisuLiBjbGFzczo6IERpY3QoW2RpY3RdKToKKworICAgUmV0dXJuIGFuIGV4dGVuZGVkIG1hcHBpbmcgb2JqZWN0IHdpdGggdGhlIHNhbWUgdmFsdWUgYXMgZGljdGlvbmFyeQorICAgKmRpY3QqLgorCisgICBUaGlzIGNsYXNzIGlzIGEgc3ViY2xhc3Mgb2YgOmNsYXNzOmBkaWN0YCB3aGVyZSBhdHRyaWJ1dGUgYWNjZXNzIGNhbgorICAgYmUgdXNlZCB0byBhY2Nlc3MgaXRlbXMuIFRoYXQgaXMsIGBgYURpY3Qua2V5YGAgaXMgdGhlIHNhbWUgYXMKKyAgIGBgYURpY3RbJ2tleSddYGAgZm9yIGdldHRpbmcsIHNldHRpbmcgYW5kIGRlbGV0aW5nIGl0ZW1zIGluIHRoZSBtYXBwaW5nLgorCisgICAuLiBkZXByZWNhdGVkOjogMy4wCisKIAogLi4gY2xhc3M6OiBEYXRhKGRhdGEpCiAKQEAgLTg2LDYgKzE5NCwyNCBAQAogICAgSXQgaGFzIG9uZSBhdHRyaWJ1dGUsIDphdHRyOmBkYXRhYCwgdGhhdCBjYW4gYmUgdXNlZCB0byByZXRyaWV2ZSB0aGUgUHl0aG9uCiAgICBieXRlcyBvYmplY3Qgc3RvcmVkIGluIGl0LgogCisgICAuLiBkZXByZWNhdGVkOjogMy40IFVzZSBhIDpjbGFzczpgYnl0ZXNgIG9iamVjdCBpbnN0ZWFkLgorCisKK1RoZSBmb2xsb3dpbmcgY29uc3RhbnRzIGFyZSBhdmFpbGFibGU6CisKKy4uIGRhdGE6OiBGTVRfWE1MCisKKyAgIFRoZSBYTUwgZm9ybWF0IGZvciBwbGlzdCBmaWxlcy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKworLi4gZGF0YTo6IEZNVF9CSU5BUlkKKworICAgVGhlIGJpbmFyeSBmb3JtYXQgZm9yIHBsaXN0IGZpbGVzCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiAKIEV4YW1wbGVzCiAtLS0tLS0tLQpAQCAtMTAzLDEzICsyMjksMTUgQEAKICAgICAgICAgICAgIGFUcnVlVmFsdWUgPSBUcnVlLAogICAgICAgICAgICAgYUZhbHNlVmFsdWUgPSBGYWxzZSwKICAgICAgICAgKSwKLSAgICAgICAgc29tZURhdGEgPSBEYXRhKGIiPGJpbmFyeSBndW5rPiIpLAotICAgICAgICBzb21lTW9yZURhdGEgPSBEYXRhKGIiPGxvdHMgb2YgYmluYXJ5IGd1bms+IiAqIDEwKSwKKyAgICAgICAgc29tZURhdGEgPSBiIjxiaW5hcnkgZ3Vuaz4iLAorICAgICAgICBzb21lTW9yZURhdGEgPSBiIjxsb3RzIG9mIGJpbmFyeSBndW5rPiIgKiAxMCwKICAgICAgICAgYURhdGUgPSBkYXRldGltZS5kYXRldGltZS5mcm9tdGltZXN0YW1wKHRpbWUubWt0aW1lKHRpbWUuZ210aW1lKCkpKSwKICAgICApCi0gICAgd3JpdGVQbGlzdChwbCwgZmlsZU5hbWUpCisgICAgd2l0aCBvcGVuKGZpbGVOYW1lLCAnd2InKSBhcyBmcDoKKyAgICAgICAgZHVtcChwbCwgZnApCiAKIFBhcnNpbmcgYSBwbGlzdDo6CiAKLSAgICBwbCA9IHJlYWRQbGlzdChwYXRoT3JGaWxlKQorICAgIHdpdGggb3BlbihmaWxlTmFtZSwgJ3JiJykgYXMgZnA6CisgICAgICAgIHBsID0gbG9hZChmcCkKICAgICBwcmludChwbFsiYUtleSJdKQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvcG9wbGliLnJzdCBiL0RvYy9saWJyYXJ5L3BvcGxpYi5yc3QKaW5kZXggYjQwODBkNi4uNDViYWFkOSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvcG9wbGliLnJzdAorKysgYi9Eb2MvbGlicmFyeS9wb3BsaWIucnN0CkBAIC0xMyw4ICsxMywxMSBAQAogLS0tLS0tLS0tLS0tLS0KIAogVGhpcyBtb2R1bGUgZGVmaW5lcyBhIGNsYXNzLCA6Y2xhc3M6YFBPUDNgLCB3aGljaCBlbmNhcHN1bGF0ZXMgYSBjb25uZWN0aW9uIHRvIGEKLVBPUDMgc2VydmVyIGFuZCBpbXBsZW1lbnRzIHRoZSBwcm90b2NvbCBhcyBkZWZpbmVkIGluIDpyZmM6YDE3MjVgLiAgVGhlCi06Y2xhc3M6YFBPUDNgIGNsYXNzIHN1cHBvcnRzIGJvdGggdGhlIG1pbmltYWwgYW5kIG9wdGlvbmFsIGNvbW1hbmQgc2V0cy4KK1BPUDMgc2VydmVyIGFuZCBpbXBsZW1lbnRzIHRoZSBwcm90b2NvbCBhcyBkZWZpbmVkIGluIDpyZmM6YDE5MzlgLiBUaGUKKzpjbGFzczpgUE9QM2AgY2xhc3Mgc3VwcG9ydHMgYm90aCB0aGUgbWluaW1hbCBhbmQgb3B0aW9uYWwgY29tbWFuZCBzZXRzIGZyb20KKzpyZmM6YDE5MzlgLiBUaGUgOmNsYXNzOmBQT1AzYCBjbGFzcyBhbHNvIHN1cHBvcnRzIHRoZSBgYFNUTFNgYCBjb21tYW5kIGludHJvZHVjZWQKK2luIDpyZmM6YDI1OTVgIHRvIGVuYWJsZSBlbmNyeXB0ZWQgY29tbXVuaWNhdGlvbiBvbiBhbiBhbHJlYWR5IGVzdGFibGlzaGVkIGNvbm5lY3Rpb24uCisKIEFkZGl0aW9uYWxseSwgdGhpcyBtb2R1bGUgcHJvdmlkZXMgYSBjbGFzcyA6Y2xhc3M6YFBPUDNfU1NMYCwgd2hpY2ggcHJvdmlkZXMKIHN1cHBvcnQgZm9yIGNvbm5lY3RpbmcgdG8gUE9QMyBzZXJ2ZXJzIHRoYXQgdXNlIFNTTCBhcyBhbiB1bmRlcmx5aW5nIHByb3RvY29sCiBsYXllci4KQEAgLTQwLDE2ICs0MywyMyBAQAogCiAgICBUaGlzIGlzIGEgc3ViY2xhc3Mgb2YgOmNsYXNzOmBQT1AzYCB0aGF0IGNvbm5lY3RzIHRvIHRoZSBzZXJ2ZXIgb3ZlciBhbiBTU0wKICAgIGVuY3J5cHRlZCBzb2NrZXQuICBJZiAqcG9ydCogaXMgbm90IHNwZWNpZmllZCwgOTk1LCB0aGUgc3RhbmRhcmQgUE9QMy1vdmVyLVNTTAotICAgcG9ydCBpcyB1c2VkLiAgKmtleWZpbGUqIGFuZCAqY2VydGZpbGUqIGFyZSBhbHNvIG9wdGlvbmFsIC0gdGhleSBjYW4gY29udGFpbiBhCi0gICBQRU0gZm9ybWF0dGVkIHByaXZhdGUga2V5IGFuZCBjZXJ0aWZpY2F0ZSBjaGFpbiBmaWxlIGZvciB0aGUgU1NMIGNvbm5lY3Rpb24uCi0gICAqdGltZW91dCogd29ya3MgYXMgaW4gdGhlIDpjbGFzczpgUE9QM2AgY29uc3RydWN0b3IuICpjb250ZXh0KiBwYXJhbWV0ZXIgaXMgYQotICAgOmNsYXNzOmBzc2wuU1NMQ29udGV4dGAgb2JqZWN0IHdoaWNoIGFsbG93cyBidW5kbGluZyBTU0wgY29uZmlndXJhdGlvbgotICAgb3B0aW9ucywgY2VydGlmaWNhdGVzIGFuZCBwcml2YXRlIGtleXMgaW50byBhIHNpbmdsZSAocG90ZW50aWFsbHkgbG9uZy1saXZlZCkKLSAgIHN0cnVjdHVyZS4KKyAgIHBvcnQgaXMgdXNlZC4gICp0aW1lb3V0KiB3b3JrcyBhcyBpbiB0aGUgOmNsYXNzOmBQT1AzYCBjb25zdHJ1Y3Rvci4KKyAgICpjb250ZXh0KiBpcyBhbiBvcHRpb25hbCA6Y2xhc3M6YHNzbC5TU0xDb250ZXh0YCBvYmplY3Qgd2hpY2ggYWxsb3dzCisgICBidW5kbGluZyBTU0wgY29uZmlndXJhdGlvbiBvcHRpb25zLCBjZXJ0aWZpY2F0ZXMgYW5kIHByaXZhdGUga2V5cyBpbnRvIGEKKyAgIHNpbmdsZSAocG90ZW50aWFsbHkgbG9uZy1saXZlZCkgc3RydWN0dXJlLiAgUGxlYXNlIHJlYWQgOnJlZjpgc3NsLXNlY3VyaXR5YAorICAgZm9yIGJlc3QgcHJhY3RpY2VzLgorCisgICAqa2V5ZmlsZSogYW5kICpjZXJ0ZmlsZSogYXJlIGEgbGVnYWN5IGFsdGVybmF0aXZlIHRvICpjb250ZXh0KiAtIHRoZXkgY2FuCisgICBwb2ludCB0byBQRU0tZm9ybWF0dGVkIHByaXZhdGUga2V5IGFuZCBjZXJ0aWZpY2F0ZSBjaGFpbiBmaWxlcywKKyAgIHJlc3BlY3RpdmVseSwgZm9yIHRoZSBTU0wgY29ubmVjdGlvbi4KIAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKICAgICAgICpjb250ZXh0KiBwYXJhbWV0ZXIgYWRkZWQuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgY2xhc3Mgbm93IHN1cHBvcnRzIGhvc3RuYW1lIGNoZWNrIHdpdGgKKyAgICAgIDphdHRyOmBzc2wuU1NMQ29udGV4dC5jaGVja19ob3N0bmFtZWAgYW5kICpTZXJ2ZXIgTmFtZSBJbmRpY2F0aW9uKiAoc2VlCisgICAgICA6ZGF0YTpgc3NsLkhBU19TTklgKS4KIAogT25lIGV4Y2VwdGlvbiBpcyBkZWZpbmVkIGFzIGFuIGF0dHJpYnV0ZSBvZiB0aGUgOm1vZDpgcG9wbGliYCBtb2R1bGU6CiAKQEAgLTk3LDYgKzEwNywxNCBAQAogICAgUmV0dXJucyB0aGUgZ3JlZXRpbmcgc3RyaW5nIHNlbnQgYnkgdGhlIFBPUDMgc2VydmVyLgogCiAKKy4uIG1ldGhvZDo6IFBPUDMuY2FwYSgpCisKKyAgIFF1ZXJ5IHRoZSBzZXJ2ZXIncyBjYXBhYmlsaXRpZXMgYXMgc3BlY2lmaWVkIGluIDpyZmM6YDI0NDlgLgorICAgUmV0dXJucyBhIGRpY3Rpb25hcnkgaW4gdGhlIGZvcm0gYGB7J25hbWUnOiBbJ3BhcmFtJy4uLl19YGAuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIC4uIG1ldGhvZDo6IFBPUDMudXNlcih1c2VybmFtZSkKIAogICAgU2VuZCB1c2VyIGNvbW1hbmQsIHJlc3BvbnNlIHNob3VsZCBpbmRpY2F0ZSB0aGF0IGEgcGFzc3dvcmQgaXMgcmVxdWlyZWQuCkBAIC0xNzYsNiArMTk0LDIzIEBACiAgICB0aGUgdW5pcXVlIGlkIGZvciB0aGF0IG1lc3NhZ2UgaW4gdGhlIGZvcm0gYGAncmVzcG9uc2UgbWVzZ251bSB1aWRgYCwgb3RoZXJ3aXNlCiAgICByZXN1bHQgaXMgbGlzdCBgYChyZXNwb25zZSwgWydtZXNnbnVtIHVpZCcsIC4uLl0sIG9jdGV0cylgYC4KIAorLi4gbWV0aG9kOjogUE9QMy5zdGxzKGNvbnRleHQ9Tm9uZSkKKworICAgU3RhcnQgYSBUTFMgc2Vzc2lvbiBvbiB0aGUgYWN0aXZlIGNvbm5lY3Rpb24gYXMgc3BlY2lmaWVkIGluIDpyZmM6YDI1OTVgLgorICAgVGhpcyBpcyBvbmx5IGFsbG93ZWQgYmVmb3JlIHVzZXIgYXV0aGVudGljYXRpb24KKworICAgKmNvbnRleHQqIHBhcmFtZXRlciBpcyBhIDpjbGFzczpgc3NsLlNTTENvbnRleHRgIG9iamVjdCB3aGljaCBhbGxvd3MKKyAgIGJ1bmRsaW5nIFNTTCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGNlcnRpZmljYXRlcyBhbmQgcHJpdmF0ZSBrZXlzIGludG8KKyAgIGEgc2luZ2xlIChwb3RlbnRpYWxseSBsb25nLWxpdmVkKSBzdHJ1Y3R1cmUuICBQbGVhc2UgcmVhZCA6cmVmOmBzc2wtc2VjdXJpdHlgCisgICBmb3IgYmVzdCBwcmFjdGljZXMuCisKKyAgIFRoaXMgbWV0aG9kIHN1cHBvcnRzIGhvc3RuYW1lIGNoZWNraW5nIHZpYQorICAgOmF0dHI6YHNzbC5TU0xDb250ZXh0LmNoZWNrX2hvc3RuYW1lYCBhbmQgKlNlcnZlciBOYW1lIEluZGljYXRpb24qIChzZWUKKyAgIDpkYXRhOmBzc2wuSEFTX1NOSWApLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiBJbnN0YW5jZXMgb2YgOmNsYXNzOmBQT1AzX1NTTGAgaGF2ZSBubyBhZGRpdGlvbmFsIG1ldGhvZHMuIFRoZSBpbnRlcmZhY2Ugb2YgdGhpcwogc3ViY2xhc3MgaXMgaWRlbnRpY2FsIHRvIGl0cyBwYXJlbnQuCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3BwcmludC5yc3QgYi9Eb2MvbGlicmFyeS9wcHJpbnQucnN0CmluZGV4IDNhODYzMzEuLmMwNTg5YTMgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3BwcmludC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvcHByaW50LnJzdApAQCAtMTQsOCArMTQsOCBAQAogUHl0aG9uIGRhdGEgc3RydWN0dXJlcyBpbiBhIGZvcm0gd2hpY2ggY2FuIGJlIHVzZWQgYXMgaW5wdXQgdG8gdGhlIGludGVycHJldGVyLgogSWYgdGhlIGZvcm1hdHRlZCBzdHJ1Y3R1cmVzIGluY2x1ZGUgb2JqZWN0cyB3aGljaCBhcmUgbm90IGZ1bmRhbWVudGFsIFB5dGhvbgogdHlwZXMsIHRoZSByZXByZXNlbnRhdGlvbiBtYXkgbm90IGJlIGxvYWRhYmxlLiAgVGhpcyBtYXkgYmUgdGhlIGNhc2UgaWYgb2JqZWN0cwotc3VjaCBhcyBmaWxlcywgc29ja2V0cywgY2xhc3Nlcywgb3IgaW5zdGFuY2VzIGFyZSBpbmNsdWRlZCwgYXMgd2VsbCBhcyBtYW55Ci1vdGhlciBidWlsdC1pbiBvYmplY3RzIHdoaWNoIGFyZSBub3QgcmVwcmVzZW50YWJsZSBhcyBQeXRob24gY29uc3RhbnRzLgorc3VjaCBhcyBmaWxlcywgc29ja2V0cyBvciBjbGFzc2VzIGFyZSBpbmNsdWRlZCwgYXMgd2VsbCBhcyBtYW55IG90aGVyCitvYmplY3RzIHdoaWNoIGFyZSBub3QgcmVwcmVzZW50YWJsZSBhcyBQeXRob24gbGl0ZXJhbHMuCiAKIFRoZSBmb3JtYXR0ZWQgcmVwcmVzZW50YXRpb24ga2VlcHMgb2JqZWN0cyBvbiBhIHNpbmdsZSBsaW5lIGlmIGl0IGNhbiwgYW5kCiBicmVha3MgdGhlbSBvbnRvIG11bHRpcGxlIGxpbmVzIGlmIHRoZXkgZG9uJ3QgZml0IHdpdGhpbiB0aGUgYWxsb3dlZCB3aWR0aC4KQEAgLTI5LDE0ICsyOSwxNCBAQAogLi4gRmlyc3QgdGhlIGltcGxlbWVudGF0aW9uIGNsYXNzOgogCiAKLS4uIGNsYXNzOjogUHJldHR5UHJpbnRlcihpbmRlbnQ9MSwgd2lkdGg9ODAsIGRlcHRoPU5vbmUsIHN0cmVhbT1Ob25lKQorLi4gY2xhc3M6OiBQcmV0dHlQcmludGVyKGluZGVudD0xLCB3aWR0aD04MCwgZGVwdGg9Tm9uZSwgc3RyZWFtPU5vbmUsICosIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb21wYWN0PUZhbHNlKQogCiAgICBDb25zdHJ1Y3QgYSA6Y2xhc3M6YFByZXR0eVByaW50ZXJgIGluc3RhbmNlLiAgVGhpcyBjb25zdHJ1Y3RvciB1bmRlcnN0YW5kcwogICAgc2V2ZXJhbCBrZXl3b3JkIHBhcmFtZXRlcnMuICBBbiBvdXRwdXQgc3RyZWFtIG1heSBiZSBzZXQgdXNpbmcgdGhlICpzdHJlYW0qCiAgICBrZXl3b3JkOyB0aGUgb25seSBtZXRob2QgdXNlZCBvbiB0aGUgc3RyZWFtIG9iamVjdCBpcyB0aGUgZmlsZSBwcm90b2NvbCdzCiAgICA6bWV0aDpgd3JpdGVgIG1ldGhvZC4gIElmIG5vdCBzcGVjaWZpZWQsIHRoZSA6Y2xhc3M6YFByZXR0eVByaW50ZXJgIGFkb3B0cwotICAgYGBzeXMuc3Rkb3V0YGAuICBUaHJlZSBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgbWF5IGJlIHVzZWQgdG8gY29udHJvbCB0aGUKLSAgIGZvcm1hdHRlZCByZXByZXNlbnRhdGlvbi4gIFRoZSBrZXl3b3JkcyBhcmUgKmluZGVudCosICpkZXB0aCosIGFuZCAqd2lkdGgqLiAgVGhlCisgICBgYHN5cy5zdGRvdXRgYC4gIFRoZQogICAgYW1vdW50IG9mIGluZGVudGF0aW9uIGFkZGVkIGZvciBlYWNoIHJlY3Vyc2l2ZSBsZXZlbCBpcyBzcGVjaWZpZWQgYnkgKmluZGVudCo7CiAgICB0aGUgZGVmYXVsdCBpcyBvbmUuICBPdGhlciB2YWx1ZXMgY2FuIGNhdXNlIG91dHB1dCB0byBsb29rIGEgbGl0dGxlIG9kZCwgYnV0IGNhbgogICAgbWFrZSBuZXN0aW5nIGVhc2llciB0byBzcG90LiAgVGhlIG51bWJlciBvZiBsZXZlbHMgd2hpY2ggbWF5IGJlIHByaW50ZWQgaXMKQEAgLTQ1LDcgKzQ1LDEyIEBACiAgICB0aGUgZGVwdGggb2YgdGhlIG9iamVjdHMgYmVpbmcgZm9ybWF0dGVkLiAgVGhlIGRlc2lyZWQgb3V0cHV0IHdpZHRoIGlzCiAgICBjb25zdHJhaW5lZCB1c2luZyB0aGUgKndpZHRoKiBwYXJhbWV0ZXI7IHRoZSBkZWZhdWx0IGlzIDgwIGNoYXJhY3RlcnMuICBJZiBhCiAgICBzdHJ1Y3R1cmUgY2Fubm90IGJlIGZvcm1hdHRlZCB3aXRoaW4gdGhlIGNvbnN0cmFpbmVkIHdpZHRoLCBhIGJlc3QgZWZmb3J0IHdpbGwKLSAgIGJlIG1hZGUuCisgICBiZSBtYWRlLiAgSWYgKmNvbXBhY3QqIGlzIGZhbHNlICh0aGUgZGVmYXVsdCkgZWFjaCBpdGVtIG9mIGEgbG9uZyBzZXF1ZW5jZQorICAgd2lsbCBiZSBmb3JtYXR0ZWQgb24gYSBzZXBhcmF0ZSBsaW5lLiAgSWYgKmNvbXBhY3QqIGlzIHRydWUsIGFzIG1hbnkgaXRlbXMKKyAgIGFzIHdpbGwgZml0IHdpdGhpbiB0aGUgKndpZHRoKiB3aWxsIGJlIGZvcm1hdHRlZCBvbiBlYWNoIG91dHB1dCBsaW5lLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgQWRkZWQgdGhlICpjb21wYWN0KiBwYXJhbWV0ZXIuCiAKICAgICAgID4+PiBpbXBvcnQgcHByaW50CiAgICAgICA+Pj4gc3R1ZmYgPSBbJ3NwYW0nLCAnZWdncycsICdsdW1iZXJqYWNrJywgJ2tuaWdodHMnLCAnbmknXQpAQCAtNTgsNiArNjMsMTIgQEAKICAgICAgICAgICAnbHVtYmVyamFjaycsCiAgICAgICAgICAgJ2tuaWdodHMnLAogICAgICAgICAgICduaSddCisgICAgICA+Pj4gcHAgPSBwcHJpbnQuUHJldHR5UHJpbnRlcih3aWR0aD00MSwgY29tcGFjdD1UcnVlKQorICAgICAgPj4+IHBwLnBwcmludChzdHVmZikKKyAgICAgIFtbJ3NwYW0nLCAnZWdncycsICdsdW1iZXJqYWNrJywKKyAgICAgICAgJ2tuaWdodHMnLCAnbmknXSwKKyAgICAgICAnc3BhbScsICdlZ2dzJywgJ2x1bWJlcmphY2snLCAna25pZ2h0cycsCisgICAgICAgJ25pJ10KICAgICAgID4+PiB0dXAgPSAoJ3NwYW0nLCAoJ2VnZ3MnLCAoJ2x1bWJlcmphY2snLCAoJ2tuaWdodHMnLCAoJ25pJywgKCdkZWFkJywKICAgICAgIC4uLiAoJ3BhcnJvdCcsICgnZnJlc2ggZnJ1aXQnLCkpKSkpKSkpCiAgICAgICA+Pj4gcHAgPSBwcHJpbnQuUHJldHR5UHJpbnRlcihkZXB0aD02KQpAQCAtNjUsMjMgKzc2LDMwIEBACiAgICAgICAoJ3NwYW0nLCAoJ2VnZ3MnLCAoJ2x1bWJlcmphY2snLCAoJ2tuaWdodHMnLCAoJ25pJywgKCdkZWFkJywgKC4uLikpKSkpKSkKIAogCi1UaGUgOmNsYXNzOmBQcmV0dHlQcmludGVyYCBjbGFzcyBzdXBwb3J0cyBzZXZlcmFsIGRlcml2YXRpdmUgZnVuY3Rpb25zOgorVGhlIDptb2Q6YHBwcmludGAgbW9kdWxlIGFsc28gcHJvdmlkZXMgc2V2ZXJhbCBzaG9ydGN1dCBmdW5jdGlvbnM6CiAKLS4uIGZ1bmN0aW9uOjogcGZvcm1hdChvYmplY3QsIGluZGVudD0xLCB3aWR0aD04MCwgZGVwdGg9Tm9uZSkKKy4uIGZ1bmN0aW9uOjogcGZvcm1hdChvYmplY3QsIGluZGVudD0xLCB3aWR0aD04MCwgZGVwdGg9Tm9uZSwgKiwgY29tcGFjdD1GYWxzZSkKIAotICAgUmV0dXJuIHRoZSBmb3JtYXR0ZWQgcmVwcmVzZW50YXRpb24gb2YgKm9iamVjdCogYXMgYSBzdHJpbmcuICAqaW5kZW50KiwgKndpZHRoKgotICAgYW5kICpkZXB0aCogd2lsbCBiZSBwYXNzZWQgdG8gdGhlIDpjbGFzczpgUHJldHR5UHJpbnRlcmAgY29uc3RydWN0b3IgYXMKLSAgIGZvcm1hdHRpbmcgcGFyYW1ldGVycy4KKyAgIFJldHVybiB0aGUgZm9ybWF0dGVkIHJlcHJlc2VudGF0aW9uIG9mICpvYmplY3QqIGFzIGEgc3RyaW5nLiAgKmluZGVudCosCisgICAqd2lkdGgqLCAqZGVwdGgqIGFuZCAqY29tcGFjdCogd2lsbCBiZSBwYXNzZWQgdG8gdGhlIDpjbGFzczpgUHJldHR5UHJpbnRlcmAKKyAgIGNvbnN0cnVjdG9yIGFzIGZvcm1hdHRpbmcgcGFyYW1ldGVycy4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIEFkZGVkIHRoZSAqY29tcGFjdCogcGFyYW1ldGVyLgogCiAKLS4uIGZ1bmN0aW9uOjogcHByaW50KG9iamVjdCwgc3RyZWFtPU5vbmUsIGluZGVudD0xLCB3aWR0aD04MCwgZGVwdGg9Tm9uZSkKKy4uIGZ1bmN0aW9uOjogcHByaW50KG9iamVjdCwgc3RyZWFtPU5vbmUsIGluZGVudD0xLCB3aWR0aD04MCwgZGVwdGg9Tm9uZSwgKiwgXAorICAgICAgICAgICAgICAgICAgICAgY29tcGFjdD1GYWxzZSkKIAogICAgUHJpbnRzIHRoZSBmb3JtYXR0ZWQgcmVwcmVzZW50YXRpb24gb2YgKm9iamVjdCogb24gKnN0cmVhbSosIGZvbGxvd2VkIGJ5IGEKICAgIG5ld2xpbmUuICBJZiAqc3RyZWFtKiBpcyBgYE5vbmVgYCwgYGBzeXMuc3Rkb3V0YGAgaXMgdXNlZC4gIFRoaXMgbWF5IGJlIHVzZWQKICAgIGluIHRoZSBpbnRlcmFjdGl2ZSBpbnRlcnByZXRlciBpbnN0ZWFkIG9mIHRoZSA6ZnVuYzpgcHJpbnRgIGZ1bmN0aW9uIGZvcgogICAgaW5zcGVjdGluZyB2YWx1ZXMgKHlvdSBjYW4gZXZlbiByZWFzc2lnbiBgYHByaW50ID0gcHByaW50LnBwcmludGBgIGZvciB1c2UKLSAgIHdpdGhpbiBhIHNjb3BlKS4gICppbmRlbnQqLCAqd2lkdGgqIGFuZCAqZGVwdGgqIHdpbGwgYmUgcGFzc2VkIHRvIHRoZQotICAgOmNsYXNzOmBQcmV0dHlQcmludGVyYCBjb25zdHJ1Y3RvciBhcyBmb3JtYXR0aW5nIHBhcmFtZXRlcnMuCisgICB3aXRoaW4gYSBzY29wZSkuICAqaW5kZW50KiwgKndpZHRoKiwgKmRlcHRoKiBhbmQgKmNvbXBhY3QqIHdpbGwgYmUgcGFzc2VkCisgICB0byB0aGUgOmNsYXNzOmBQcmV0dHlQcmludGVyYCBjb25zdHJ1Y3RvciBhcyBmb3JtYXR0aW5nIHBhcmFtZXRlcnMuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBBZGRlZCB0aGUgKmNvbXBhY3QqIHBhcmFtZXRlci4KIAogICAgICAgPj4+IGltcG9ydCBwcHJpbnQKICAgICAgID4+PiBzdHVmZiA9IFsnc3BhbScsICdlZ2dzJywgJ2x1bWJlcmphY2snLCAna25pZ2h0cycsICduaSddCkBAIC0xOTMsMTAxICsyMTEsMTQxIEBACiAtLS0tLS0tCiAKIFRvIGRlbW9uc3RyYXRlIHNldmVyYWwgdXNlcyBvZiB0aGUgOmZ1bmM6YHBwcmludGAgZnVuY3Rpb24gYW5kIGl0cyBwYXJhbWV0ZXJzLAotbGV0J3MgZmV0Y2ggaW5mb3JtYXRpb24gYWJvdXQgYSBwcm9qZWN0IGZyb20gUHlQSTo6CitsZXQncyBmZXRjaCBpbmZvcm1hdGlvbiBhYm91dCBhIHByb2plY3QgZnJvbSBgUHlQSSA8aHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaT5gXzo6CiAKICAgID4+PiBpbXBvcnQganNvbgogICAgPj4+IGltcG9ydCBwcHJpbnQKICAgID4+PiBmcm9tIHVybGxpYi5yZXF1ZXN0IGltcG9ydCB1cmxvcGVuCi0gICA+Pj4gd2l0aCB1cmxvcGVuKCdodHRwOi8vcHlwaS5weXRob24ub3JnL3B5cGkvY29uZmlncGFyc2VyL2pzb24nKSBhcyB1cmw6CisgICA+Pj4gd2l0aCB1cmxvcGVuKCdodHRwOi8vcHlwaS5weXRob24ub3JnL3B5cGkvVHdpc3RlZC9qc29uJykgYXMgdXJsOgogICAgLi4uICAgICBodHRwX2luZm8gPSB1cmwuaW5mbygpCiAgICAuLi4gICAgIHJhd19kYXRhID0gdXJsLnJlYWQoKS5kZWNvZGUoaHR0cF9pbmZvLmdldF9jb250ZW50X2NoYXJzZXQoKSkKICAgID4+PiBwcm9qZWN0X2luZm8gPSBqc29uLmxvYWRzKHJhd19kYXRhKQotICAgPj4+IHJlc3VsdCA9IHsnaGVhZGVycyc6IGh0dHBfaW5mby5pdGVtcygpLCAnYm9keSc6IHByb2plY3RfaW5mb30KIAogSW4gaXRzIGJhc2ljIGZvcm0sIDpmdW5jOmBwcHJpbnRgIHNob3dzIHRoZSB3aG9sZSBvYmplY3Q6OgogCi0gICA+Pj4gcHByaW50LnBwcmludChyZXN1bHQpCi0gICB7J2JvZHknOiB7J2luZm8nOiB7J19weXBpX2hpZGRlbic6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICdfcHlwaV9vcmRlcmluZyc6IDEyLAotICAgICAgICAgICAgICAgICAgICAgICdjbGFzc2lmaWVycyc6IFsnRGV2ZWxvcG1lbnQgU3RhdHVzIDo6IDQgLSBCZXRhJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ludGVuZGVkIEF1ZGllbmNlIDo6IERldmVsb3BlcnMnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTGljZW5zZSA6OiBPU0kgQXBwcm92ZWQgOjogTUlUIExpY2Vuc2UnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTmF0dXJhbCBMYW5ndWFnZSA6OiBFbmdsaXNoJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ09wZXJhdGluZyBTeXN0ZW0gOjogT1MgSW5kZXBlbmRlbnQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1Byb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6OiAyJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1Byb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6OiAyLjYnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uIDo6IDIuNycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUb3BpYyA6OiBTb2Z0d2FyZSBEZXZlbG9wbWVudCA6OiBMaWJyYXJpZXMnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVG9waWMgOjogU29mdHdhcmUgRGV2ZWxvcG1lbnQgOjogTGlicmFyaWVzIDo6IFB5dGhvbiBNb2R1bGVzJ10sCi0gICAgICAgICAgICAgICAgICAgICAgJ2Rvd25sb2FkX3VybCc6ICdVTktOT1dOJywKLSAgICAgICAgICAgICAgICAgICAgICAnaG9tZV9wYWdlJzogJ2h0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvcHkzay9saWJyYXJ5L2NvbmZpZ3BhcnNlci5odG1sJywKLSAgICAgICAgICAgICAgICAgICAgICAna2V5d29yZHMnOiAnY29uZmlncGFyc2VyIGluaSBwYXJzaW5nIGNvbmYgY2ZnIGNvbmZpZ3VyYXRpb24gZmlsZScsCi0gICAgICAgICAgICAgICAgICAgICAgJ2xpY2Vuc2UnOiAnTUlUJywKLSAgICAgICAgICAgICAgICAgICAgICAnbmFtZSc6ICdjb25maWdwYXJzZXInLAotICAgICAgICAgICAgICAgICAgICAgICdwYWNrYWdlX3VybCc6ICdodHRwOi8vcHlwaS5weXRob24ub3JnL3B5cGkvY29uZmlncGFyc2VyJywKLSAgICAgICAgICAgICAgICAgICAgICAncGxhdGZvcm0nOiAnYW55JywKLSAgICAgICAgICAgICAgICAgICAgICAncmVsZWFzZV91cmwnOiAnaHR0cDovL3B5cGkucHl0aG9uLm9yZy9weXBpL2NvbmZpZ3BhcnNlci8zLjIuMHIzJywKLSAgICAgICAgICAgICAgICAgICAgICAncmVxdWlyZXNfcHl0aG9uJzogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAnc3RhYmxlX3ZlcnNpb24nOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICdzdW1tYXJ5JzogJ1RoaXMgbGlicmFyeSBicmluZ3MgdGhlIHVwZGF0ZWQgY29uZmlncGFyc2VyIGZyb20gUHl0aG9uIDMuMisgdG8gUHl0aG9uIDIuNi0yLjcuJywKLSAgICAgICAgICAgICAgICAgICAgICAndmVyc2lvbic6ICczLjIuMHIzJ30sCi0gICAgICAgICAgICd1cmxzJzogW3snY29tbWVudF90ZXh0JzogJycsCi0gICAgICAgICAgICAgICAgICAgICAnZG93bmxvYWRzJzogNDcsCi0gICAgICAgICAgICAgICAgICAgICAnZmlsZW5hbWUnOiAnY29uZmlncGFyc2VyLTMuMi4wcjMudGFyLmd6JywKLSAgICAgICAgICAgICAgICAgICAgICdoYXNfc2lnJzogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAnbWQ1X2RpZ2VzdCc6ICc4NTAwZmQ4N2M2MWFjMGRlMzI4ZmM5OTZmY2U2OWI5NicsCi0gICAgICAgICAgICAgICAgICAgICAncGFja2FnZXR5cGUnOiAnc2Rpc3QnLAotICAgICAgICAgICAgICAgICAgICAgJ3B5dGhvbl92ZXJzaW9uJzogJ3NvdXJjZScsCi0gICAgICAgICAgICAgICAgICAgICAnc2l6ZSc6IDMyMjgxLAotICAgICAgICAgICAgICAgICAgICAgJ3VwbG9hZF90aW1lJzogJzIwMTEtMDUtMTBUMTY6Mjg6NTAnLAotICAgICAgICAgICAgICAgICAgICAgJ3VybCc6ICdodHRwOi8vcHlwaS5weXRob24ub3JnL3BhY2thZ2VzL3NvdXJjZS9jL2NvbmZpZ3BhcnNlci9jb25maWdwYXJzZXItMy4yLjByMy50YXIuZ3onfV19LAotICAgJ2hlYWRlcnMnOiBbKCdEYXRlJywgJ1NhdCwgMTQgTWF5IDIwMTEgMTI6NDg6NTIgR01UJyksCi0gICAgICAgICAgICAgICAoJ1NlcnZlcicsICdBcGFjaGUvMi4yLjE2IChEZWJpYW4pJyksCi0gICAgICAgICAgICAgICAoJ0NvbnRlbnQtRGlzcG9zaXRpb24nLCAnaW5saW5lJyksCi0gICAgICAgICAgICAgICAoJ0Nvbm5lY3Rpb24nLCAnY2xvc2UnKSwKLSAgICAgICAgICAgICAgICgnVHJhbnNmZXItRW5jb2RpbmcnLCAnY2h1bmtlZCcpLAotICAgICAgICAgICAgICAgKCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD0iVVRGLTgiJyldfQorICAgPj4+IHBwcmludC5wcHJpbnQocHJvamVjdF9pbmZvKQorICAgeydpbmZvJzogeydfcHlwaV9oaWRkZW4nOiBGYWxzZSwKKyAgICAgICAgICAgICAnX3B5cGlfb3JkZXJpbmcnOiAxMjUsCisgICAgICAgICAgICAgJ2F1dGhvcic6ICdHbHlwaCBMZWZrb3dpdHonLAorICAgICAgICAgICAgICdhdXRob3JfZW1haWwnOiAnZ2x5cGhAdHdpc3RlZG1hdHJpeC5jb20nLAorICAgICAgICAgICAgICdidWd0cmFja191cmwnOiAnJywKKyAgICAgICAgICAgICAnY2hlZXNlY2FrZV9jb2RlX2t3YWxpdGVlX2lkJzogTm9uZSwKKyAgICAgICAgICAgICAnY2hlZXNlY2FrZV9kb2N1bWVudGF0aW9uX2lkJzogTm9uZSwKKyAgICAgICAgICAgICAnY2hlZXNlY2FrZV9pbnN0YWxsYWJpbGl0eV9pZCc6IE5vbmUsCisgICAgICAgICAgICAgJ2NsYXNzaWZpZXJzJzogWydQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMi42JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1Byb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6OiAyLjcnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uIDo6IDIgOjogT25seSddLAorICAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICdBbiBleHRlbnNpYmxlIGZyYW1ld29yayBmb3IgUHl0aG9uIHByb2dyYW1taW5nLCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dpdGggc3BlY2lhbCBmb2N1c1xyXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29uIGV2ZW50LWJhc2VkIG5ldHdvcmsgcHJvZ3JhbW1pbmcgYW5kICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbXVsdGlwcm90b2NvbCBpbnRlZ3JhdGlvbi4nLAorICAgICAgICAgICAgICdkb2NzX3VybCc6ICcnLAorICAgICAgICAgICAgICdkb3dubG9hZF91cmwnOiAnVU5LTk9XTicsCisgICAgICAgICAgICAgJ2hvbWVfcGFnZSc6ICdodHRwOi8vdHdpc3RlZG1hdHJpeC5jb20vJywKKyAgICAgICAgICAgICAna2V5d29yZHMnOiAnJywKKyAgICAgICAgICAgICAnbGljZW5zZSc6ICdNSVQnLAorICAgICAgICAgICAgICdtYWludGFpbmVyJzogJycsCisgICAgICAgICAgICAgJ21haW50YWluZXJfZW1haWwnOiAnJywKKyAgICAgICAgICAgICAnbmFtZSc6ICdUd2lzdGVkJywKKyAgICAgICAgICAgICAncGFja2FnZV91cmwnOiAnaHR0cDovL3B5cGkucHl0aG9uLm9yZy9weXBpL1R3aXN0ZWQnLAorICAgICAgICAgICAgICdwbGF0Zm9ybSc6ICdVTktOT1dOJywKKyAgICAgICAgICAgICAncmVsZWFzZV91cmwnOiAnaHR0cDovL3B5cGkucHl0aG9uLm9yZy9weXBpL1R3aXN0ZWQvMTIuMy4wJywKKyAgICAgICAgICAgICAncmVxdWlyZXNfcHl0aG9uJzogTm9uZSwKKyAgICAgICAgICAgICAnc3RhYmxlX3ZlcnNpb24nOiBOb25lLAorICAgICAgICAgICAgICdzdW1tYXJ5JzogJ0FuIGFzeW5jaHJvbm91cyBuZXR3b3JraW5nIGZyYW1ld29yayB3cml0dGVuIGluIFB5dGhvbicsCisgICAgICAgICAgICAgJ3ZlcnNpb24nOiAnMTIuMy4wJ30sCisgICAgJ3VybHMnOiBbeydjb21tZW50X3RleHQnOiAnJywKKyAgICAgICAgICAgICAgJ2Rvd25sb2Fkcyc6IDcxODQ0LAorICAgICAgICAgICAgICAnZmlsZW5hbWUnOiAnVHdpc3RlZC0xMi4zLjAudGFyLmJ6MicsCisgICAgICAgICAgICAgICdoYXNfc2lnJzogRmFsc2UsCisgICAgICAgICAgICAgICdtZDVfZGlnZXN0JzogJzZlMjg5ODI1ZjNiZjU1OTFjZmQ2NzA4NzRjYzA4NjJkJywKKyAgICAgICAgICAgICAgJ3BhY2thZ2V0eXBlJzogJ3NkaXN0JywKKyAgICAgICAgICAgICAgJ3B5dGhvbl92ZXJzaW9uJzogJ3NvdXJjZScsCisgICAgICAgICAgICAgICdzaXplJzogMjYxNTczMywKKyAgICAgICAgICAgICAgJ3VwbG9hZF90aW1lJzogJzIwMTItMTItMjZUMTI6NDc6MDMnLAorICAgICAgICAgICAgICAndXJsJzogJ2h0dHBzOi8vcHlwaS5weXRob24ub3JnL3BhY2thZ2VzL3NvdXJjZS9UL1R3aXN0ZWQvVHdpc3RlZC0xMi4zLjAudGFyLmJ6Mid9LAorICAgICAgICAgICAgIHsnY29tbWVudF90ZXh0JzogJycsCisgICAgICAgICAgICAgICdkb3dubG9hZHMnOiA1MjI0LAorICAgICAgICAgICAgICAnZmlsZW5hbWUnOiAnVHdpc3RlZC0xMi4zLjAud2luMzItcHkyLjcubXNpJywKKyAgICAgICAgICAgICAgJ2hhc19zaWcnOiBGYWxzZSwKKyAgICAgICAgICAgICAgJ21kNV9kaWdlc3QnOiAnNmI3NzhmNTIwMWI2MjJhNTUxOWEyYWNhMWEyZmU1MTInLAorICAgICAgICAgICAgICAncGFja2FnZXR5cGUnOiAnYmRpc3RfbXNpJywKKyAgICAgICAgICAgICAgJ3B5dGhvbl92ZXJzaW9uJzogJzIuNycsCisgICAgICAgICAgICAgICdzaXplJzogMjkxNjM1MiwKKyAgICAgICAgICAgICAgJ3VwbG9hZF90aW1lJzogJzIwMTItMTItMjZUMTI6NDg6MTUnLAorICAgICAgICAgICAgICAndXJsJzogJ2h0dHBzOi8vcHlwaS5weXRob24ub3JnL3BhY2thZ2VzLzIuNy9UL1R3aXN0ZWQvVHdpc3RlZC0xMi4zLjAud2luMzItcHkyLjcubXNpJ31dfQogCiBUaGUgcmVzdWx0IGNhbiBiZSBsaW1pdGVkIHRvIGEgY2VydGFpbiAqZGVwdGgqIChlbGxpcHNpcyBpcyB1c2VkIGZvciBkZWVwZXIKIGNvbnRlbnRzKTo6CiAKLSAgID4+PiBwcHJpbnQucHByaW50KHJlc3VsdCwgZGVwdGg9MykKLSAgIHsnYm9keSc6IHsnaW5mbyc6IHsnX3B5cGlfaGlkZGVuJzogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgJ19weXBpX29yZGVyaW5nJzogMTIsCi0gICAgICAgICAgICAgICAgICAgICAgJ2NsYXNzaWZpZXJzJzogWy4uLl0sCi0gICAgICAgICAgICAgICAgICAgICAgJ2Rvd25sb2FkX3VybCc6ICdVTktOT1dOJywKLSAgICAgICAgICAgICAgICAgICAgICAnaG9tZV9wYWdlJzogJ2h0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvcHkzay9saWJyYXJ5L2NvbmZpZ3BhcnNlci5odG1sJywKLSAgICAgICAgICAgICAgICAgICAgICAna2V5d29yZHMnOiAnY29uZmlncGFyc2VyIGluaSBwYXJzaW5nIGNvbmYgY2ZnIGNvbmZpZ3VyYXRpb24gZmlsZScsCi0gICAgICAgICAgICAgICAgICAgICAgJ2xpY2Vuc2UnOiAnTUlUJywKLSAgICAgICAgICAgICAgICAgICAgICAnbmFtZSc6ICdjb25maWdwYXJzZXInLAotICAgICAgICAgICAgICAgICAgICAgICdwYWNrYWdlX3VybCc6ICdodHRwOi8vcHlwaS5weXRob24ub3JnL3B5cGkvY29uZmlncGFyc2VyJywKLSAgICAgICAgICAgICAgICAgICAgICAncGxhdGZvcm0nOiAnYW55JywKLSAgICAgICAgICAgICAgICAgICAgICAncmVsZWFzZV91cmwnOiAnaHR0cDovL3B5cGkucHl0aG9uLm9yZy9weXBpL2NvbmZpZ3BhcnNlci8zLjIuMHIzJywKLSAgICAgICAgICAgICAgICAgICAgICAncmVxdWlyZXNfcHl0aG9uJzogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAnc3RhYmxlX3ZlcnNpb24nOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICdzdW1tYXJ5JzogJ1RoaXMgbGlicmFyeSBicmluZ3MgdGhlIHVwZGF0ZWQgY29uZmlncGFyc2VyIGZyb20gUHl0aG9uIDMuMisgdG8gUHl0aG9uIDIuNi0yLjcuJywKLSAgICAgICAgICAgICAgICAgICAgICAndmVyc2lvbic6ICczLjIuMHIzJ30sCi0gICAgICAgICAgICd1cmxzJzogW3suLi59XX0sCi0gICAnaGVhZGVycyc6IFsoJ0RhdGUnLCAnU2F0LCAxNCBNYXkgMjAxMSAxMjo0ODo1MiBHTVQnKSwKLSAgICAgICAgICAgICAgICgnU2VydmVyJywgJ0FwYWNoZS8yLjIuMTYgKERlYmlhbiknKSwKLSAgICAgICAgICAgICAgICgnQ29udGVudC1EaXNwb3NpdGlvbicsICdpbmxpbmUnKSwKLSAgICAgICAgICAgICAgICgnQ29ubmVjdGlvbicsICdjbG9zZScpLAotICAgICAgICAgICAgICAgKCdUcmFuc2Zlci1FbmNvZGluZycsICdjaHVua2VkJyksCi0gICAgICAgICAgICAgICAoJ0NvbnRlbnQtVHlwZScsICdhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PSJVVEYtOCInKV19CisgICA+Pj4gcHByaW50LnBwcmludChwcm9qZWN0X2luZm8sIGRlcHRoPTIpCisgICB7J2luZm8nOiB7J19weXBpX2hpZGRlbic6IEZhbHNlLAorICAgICAgICAgICAgICdfcHlwaV9vcmRlcmluZyc6IDEyNSwKKyAgICAgICAgICAgICAnYXV0aG9yJzogJ0dseXBoIExlZmtvd2l0eicsCisgICAgICAgICAgICAgJ2F1dGhvcl9lbWFpbCc6ICdnbHlwaEB0d2lzdGVkbWF0cml4LmNvbScsCisgICAgICAgICAgICAgJ2J1Z3RyYWNrX3VybCc6ICcnLAorICAgICAgICAgICAgICdjaGVlc2VjYWtlX2NvZGVfa3dhbGl0ZWVfaWQnOiBOb25lLAorICAgICAgICAgICAgICdjaGVlc2VjYWtlX2RvY3VtZW50YXRpb25faWQnOiBOb25lLAorICAgICAgICAgICAgICdjaGVlc2VjYWtlX2luc3RhbGxhYmlsaXR5X2lkJzogTm9uZSwKKyAgICAgICAgICAgICAnY2xhc3NpZmllcnMnOiBbLi4uXSwKKyAgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAnQW4gZXh0ZW5zaWJsZSBmcmFtZXdvcmsgZm9yIFB5dGhvbiBwcm9ncmFtbWluZywgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3aXRoIHNwZWNpYWwgZm9jdXNcclxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvbiBldmVudC1iYXNlZCBuZXR3b3JrIHByb2dyYW1taW5nIGFuZCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ211bHRpcHJvdG9jb2wgaW50ZWdyYXRpb24uJywKKyAgICAgICAgICAgICAnZG9jc191cmwnOiAnJywKKyAgICAgICAgICAgICAnZG93bmxvYWRfdXJsJzogJ1VOS05PV04nLAorICAgICAgICAgICAgICdob21lX3BhZ2UnOiAnaHR0cDovL3R3aXN0ZWRtYXRyaXguY29tLycsCisgICAgICAgICAgICAgJ2tleXdvcmRzJzogJycsCisgICAgICAgICAgICAgJ2xpY2Vuc2UnOiAnTUlUJywKKyAgICAgICAgICAgICAnbWFpbnRhaW5lcic6ICcnLAorICAgICAgICAgICAgICdtYWludGFpbmVyX2VtYWlsJzogJycsCisgICAgICAgICAgICAgJ25hbWUnOiAnVHdpc3RlZCcsCisgICAgICAgICAgICAgJ3BhY2thZ2VfdXJsJzogJ2h0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9Ud2lzdGVkJywKKyAgICAgICAgICAgICAncGxhdGZvcm0nOiAnVU5LTk9XTicsCisgICAgICAgICAgICAgJ3JlbGVhc2VfdXJsJzogJ2h0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9Ud2lzdGVkLzEyLjMuMCcsCisgICAgICAgICAgICAgJ3JlcXVpcmVzX3B5dGhvbic6IE5vbmUsCisgICAgICAgICAgICAgJ3N0YWJsZV92ZXJzaW9uJzogTm9uZSwKKyAgICAgICAgICAgICAnc3VtbWFyeSc6ICdBbiBhc3luY2hyb25vdXMgbmV0d29ya2luZyBmcmFtZXdvcmsgd3JpdHRlbiBpbiBQeXRob24nLAorICAgICAgICAgICAgICd2ZXJzaW9uJzogJzEyLjMuMCd9LAorICAgICd1cmxzJzogW3suLi59LCB7Li4ufV19CiAKLUFkZGl0aW9uYWxseSwgbWF4aW11bSAqd2lkdGgqIGNhbiBiZSBzdWdnZXN0ZWQuIElmIGEgbG9uZyBvYmplY3QgY2Fubm90IGJlCi1zcGxpdCwgdGhlIHNwZWNpZmllZCB3aWR0aCB3aWxsIGJlIGV4Y2VlZGVkOjoKK0FkZGl0aW9uYWxseSwgbWF4aW11bSBjaGFyYWN0ZXIgKndpZHRoKiBjYW4gYmUgc3VnZ2VzdGVkLiBJZiBhIGxvbmcgb2JqZWN0CitjYW5ub3QgYmUgc3BsaXQsIHRoZSBzcGVjaWZpZWQgd2lkdGggd2lsbCBiZSBleGNlZWRlZDo6CiAKLSAgID4+PiBwcHJpbnQucHByaW50KHJlc3VsdFsnaGVhZGVycyddLCB3aWR0aD0zMCkKLSAgIFsoJ0RhdGUnLAotICAgICAnU2F0LCAxNCBNYXkgMjAxMSAxMjo0ODo1MiBHTVQnKSwKLSAgICAoJ1NlcnZlcicsCi0gICAgICdBcGFjaGUvMi4yLjE2IChEZWJpYW4pJyksCi0gICAgKCdDb250ZW50LURpc3Bvc2l0aW9uJywKLSAgICAgJ2lubGluZScpLAotICAgICgnQ29ubmVjdGlvbicsICdjbG9zZScpLAotICAgICgnVHJhbnNmZXItRW5jb2RpbmcnLAotICAgICAnY2h1bmtlZCcpLAotICAgICgnQ29udGVudC1UeXBlJywKLSAgICAgJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9IlVURi04IicpXQorICAgPj4+IHBwcmludC5wcHJpbnQocHJvamVjdF9pbmZvLCBkZXB0aD0yLCB3aWR0aD01MCkKKyAgIHsnaW5mbyc6IHsnX3B5cGlfaGlkZGVuJzogRmFsc2UsCisgICAgICAgICAgICAgJ19weXBpX29yZGVyaW5nJzogMTI1LAorICAgICAgICAgICAgICdhdXRob3InOiAnR2x5cGggTGVma293aXR6JywKKyAgICAgICAgICAgICAnYXV0aG9yX2VtYWlsJzogJ2dseXBoQHR3aXN0ZWRtYXRyaXguY29tJywKKyAgICAgICAgICAgICAnYnVndHJhY2tfdXJsJzogJycsCisgICAgICAgICAgICAgJ2NoZWVzZWNha2VfY29kZV9rd2FsaXRlZV9pZCc6IE5vbmUsCisgICAgICAgICAgICAgJ2NoZWVzZWNha2VfZG9jdW1lbnRhdGlvbl9pZCc6IE5vbmUsCisgICAgICAgICAgICAgJ2NoZWVzZWNha2VfaW5zdGFsbGFiaWxpdHlfaWQnOiBOb25lLAorICAgICAgICAgICAgICdjbGFzc2lmaWVycyc6IFsuLi5dLAorICAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICdBbiBleHRlbnNpYmxlICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZnJhbWV3b3JrIGZvciAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1B5dGhvbiBwcm9ncmFtbWluZywgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3aXRoIHNwZWNpYWwgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmb2N1c1xyXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29uIGV2ZW50LWJhc2VkICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbmV0d29yayBwcm9ncmFtbWluZyAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FuZCBtdWx0aXByb3RvY29sICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW50ZWdyYXRpb24uJywKKyAgICAgICAgICAgICAnZG9jc191cmwnOiAnJywKKyAgICAgICAgICAgICAnZG93bmxvYWRfdXJsJzogJ1VOS05PV04nLAorICAgICAgICAgICAgICdob21lX3BhZ2UnOiAnaHR0cDovL3R3aXN0ZWRtYXRyaXguY29tLycsCisgICAgICAgICAgICAgJ2tleXdvcmRzJzogJycsCisgICAgICAgICAgICAgJ2xpY2Vuc2UnOiAnTUlUJywKKyAgICAgICAgICAgICAnbWFpbnRhaW5lcic6ICcnLAorICAgICAgICAgICAgICdtYWludGFpbmVyX2VtYWlsJzogJycsCisgICAgICAgICAgICAgJ25hbWUnOiAnVHdpc3RlZCcsCisgICAgICAgICAgICAgJ3BhY2thZ2VfdXJsJzogJ2h0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9Ud2lzdGVkJywKKyAgICAgICAgICAgICAncGxhdGZvcm0nOiAnVU5LTk9XTicsCisgICAgICAgICAgICAgJ3JlbGVhc2VfdXJsJzogJ2h0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9Ud2lzdGVkLzEyLjMuMCcsCisgICAgICAgICAgICAgJ3JlcXVpcmVzX3B5dGhvbic6IE5vbmUsCisgICAgICAgICAgICAgJ3N0YWJsZV92ZXJzaW9uJzogTm9uZSwKKyAgICAgICAgICAgICAnc3VtbWFyeSc6ICdBbiBhc3luY2hyb25vdXMgJworICAgICAgICAgICAgICAgICAgICAgICAgJ25ldHdvcmtpbmcgZnJhbWV3b3JrICcKKyAgICAgICAgICAgICAgICAgICAgICAgICd3cml0dGVuIGluIFB5dGhvbicsCisgICAgICAgICAgICAgJ3ZlcnNpb24nOiAnMTIuMy4wJ30sCisgICAgJ3VybHMnOiBbey4uLn0sIHsuLi59XX0KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3Byb2ZpbGUucnN0IGIvRG9jL2xpYnJhcnkvcHJvZmlsZS5yc3QKaW5kZXggZjI0NTNmMS4uMjkyODgyMSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvcHJvZmlsZS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvcHJvZmlsZS5yc3QKQEAgLTE3Miw3ICsxNzIsNyBAQAogZm9yIG9ubHkgdGhlIGNsYXNzIGluaXQgbWV0aG9kcyAoc2luY2UgdGhleSBhcmUgc3BlbGxlZCB3aXRoIGBgX19pbml0X19gYCBpbgogdGhlbSkuICBBcyBvbmUgZmluYWwgZXhhbXBsZSwgeW91IGNvdWxkIHRyeTo6CiAKLSAgIHAuc29ydF9zdGF0cygndGltZScsICdjdW0nKS5wcmludF9zdGF0cyguNSwgJ2luaXQnKQorICAgcC5zb3J0X3N0YXRzKCd0aW1lJywgJ2N1bXVsYXRpdmUnKS5wcmludF9zdGF0cyguNSwgJ2luaXQnKQogCiBUaGlzIGxpbmUgc29ydHMgc3RhdGlzdGljcyB3aXRoIGEgcHJpbWFyeSBrZXkgb2YgdGltZSwgYW5kIGEgc2Vjb25kYXJ5IGtleSBvZgogY3VtdWxhdGl2ZSB0aW1lLCBhbmQgdGhlbiBwcmludHMgb3V0IHNvbWUgb2YgdGhlIHN0YXRpc3RpY3MuIFRvIGJlIHNwZWNpZmljLCB0aGUKQEAgLTYzOCw3ICs2MzgsNyBAQAogCiAgICAgICBwciA9IGNQcm9maWxlLlByb2ZpbGUoeW91cl9pbnRlZ2VyX3RpbWVfZnVuYywgMC4wMDEpCiAKLSAgIEFzIHRoZSA6bW9kOmBjUHJvZmlsZS5Qcm9maWxlYCBjbGFzcyBjYW5ub3QgYmUgY2FsaWJyYXRlZCwgY3VzdG9tIHRpbWVyCisgICBBcyB0aGUgOmNsYXNzOmBjUHJvZmlsZS5Qcm9maWxlYCBjbGFzcyBjYW5ub3QgYmUgY2FsaWJyYXRlZCwgY3VzdG9tIHRpbWVyCiAgICBmdW5jdGlvbnMgc2hvdWxkIGJlIHVzZWQgd2l0aCBjYXJlIGFuZCBzaG91bGQgYmUgYXMgZmFzdCBhcyBwb3NzaWJsZS4gIEZvcgogICAgdGhlIGJlc3QgcmVzdWx0cyB3aXRoIGEgY3VzdG9tIHRpbWVyLCBpdCBtaWdodCBiZSBuZWNlc3NhcnkgdG8gaGFyZC1jb2RlIGl0CiAgICBpbiB0aGUgQyBzb3VyY2Ugb2YgdGhlIGludGVybmFsIDptb2Q6YF9sc3Byb2ZgIG1vZHVsZS4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3B0eS5yc3QgYi9Eb2MvbGlicmFyeS9wdHkucnN0CmluZGV4IDJiOTM4NWIuLmI4YTM4OTcgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3B0eS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvcHR5LnJzdApAQCAtNDUsNiArNDUsOSBAQAogICAgYSBmaWxlIGRlc2NyaXB0b3IuIFRoZSBkZWZhdWx0cyB0cnkgdG8gcmVhZCAxMDI0IGJ5dGVzIGVhY2ggdGltZSB0aGV5IGFyZQogICAgY2FsbGVkLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgOmZ1bmM6YHNwYXduYCBub3cgcmV0dXJucyB0aGUgc3RhdHVzIHZhbHVlIGZyb20gOmZ1bmM6YG9zLndhaXRwaWRgCisgICAgICBvbiB0aGUgY2hpbGQgcHJvY2Vzcy4KIAogRXhhbXBsZQogLS0tLS0tLQpAQCAtNTUsNDAgKzU4LDMyIEBACiBwc2V1ZG8tdGVybWluYWwgdG8gcmVjb3JkIGFsbCBpbnB1dCBhbmQgb3V0cHV0IG9mIGEgdGVybWluYWwgc2Vzc2lvbiBpbiBhCiAidHlwZXNjcmlwdCIuIDo6CiAKLSAgIGltcG9ydCBzeXMsIG9zLCB0aW1lLCBnZXRvcHQKLSAgIGltcG9ydCBwdHkKKyAgICBpbXBvcnQgYXJncGFyc2UKKyAgICBpbXBvcnQgb3MKKyAgICBpbXBvcnQgcHR5CisgICAgaW1wb3J0IHN5cworICAgIGltcG9ydCB0aW1lCiAKLSAgIG1vZGUgPSAnd2InCi0gICBzaGVsbCA9ICdzaCcKLSAgIGZpbGVuYW1lID0gJ3R5cGVzY3JpcHQnCi0gICBpZiAnU0hFTEwnIGluIG9zLmVudmlyb246Ci0gICAgICAgc2hlbGwgPSBvcy5lbnZpcm9uWydTSEVMTCddCisgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1hJywgZGVzdD0nYXBwZW5kJywgYWN0aW9uPSdzdG9yZV90cnVlJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctcCcsIGRlc3Q9J3VzZV9weXRob24nLCBhY3Rpb249J3N0b3JlX3RydWUnKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJ2ZpbGVuYW1lJywgbmFyZ3M9Jz8nLCBkZWZhdWx0PSd0eXBlc2NyaXB0JykKKyAgICBvcHRpb25zID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQogCi0gICB0cnk6Ci0gICAgICAgb3B0cywgYXJncyA9IGdldG9wdC5nZXRvcHQoc3lzLmFyZ3ZbMTpdLCAnYXAnKQotICAgZXhjZXB0IGdldG9wdC5lcnJvciBhcyBtc2c6Ci0gICAgICAgcHJpbnQoJyVzOiAlcycgJSAoc3lzLmFyZ3ZbMF0sIG1zZykpCi0gICAgICAgc3lzLmV4aXQoMikKKyAgICBzaGVsbCA9IHN5cy5leGVjdXRhYmxlIGlmIG9wdGlvbnMudXNlX3B5dGhvbiBlbHNlIG9zLmVudmlyb24uZ2V0KCdTSEVMTCcsICdzaCcpCisgICAgZmlsZW5hbWUgPSBvcHRpb25zLmZpbGVuYW1lCisgICAgbW9kZSA9ICdhYicgaWYgb3B0aW9ucy5hcHBlbmQgZWxzZSAnd2InCiAKLSAgIGZvciBvcHQsIGFyZyBpbiBvcHRzOgotICAgICAgICMgb3B0aW9uIC1hOiBhcHBlbmQgdG8gdHlwZXNjcmlwdCBmaWxlCi0gICAgICAgaWYgb3B0ID09ICctYSc6Ci0gICAgICAgICAgIG1vZGUgPSAnYWInCi0gICAgICAgIyBvcHRpb24gLXA6IHVzZSBhIFB5dGhvbiBzaGVsbCBhcyB0aGUgdGVybWluYWwgY29tbWFuZAotICAgICAgIGVsaWYgb3B0ID09ICctcCc6Ci0gICAgICAgICAgIHNoZWxsID0gc3lzLmV4ZWN1dGFibGUKLSAgIGlmIGFyZ3M6Ci0gICAgICAgZmlsZW5hbWUgPSBhcmdzWzBdCisgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCBtb2RlKSBhcyBzY3JpcHQ6CisgICAgICAgIGRlZiByZWFkKGZkKToKKyAgICAgICAgICAgIGRhdGEgPSBvcy5yZWFkKGZkLCAxMDI0KQorICAgICAgICAgICAgc2NyaXB0LndyaXRlKGRhdGEpCisgICAgICAgICAgICByZXR1cm4gZGF0YQogCi0gICBzY3JpcHQgPSBvcGVuKGZpbGVuYW1lLCBtb2RlKQorICAgICAgICBwcmludCgnU2NyaXB0IHN0YXJ0ZWQsIGZpbGUgaXMnLCBmaWxlbmFtZSkKKyAgICAgICAgc2NyaXB0LndyaXRlKCgnU2NyaXB0IHN0YXJ0ZWQgb24gJXNcbicgJSB0aW1lLmFzY3RpbWUoKSkuZW5jb2RlKCkpCiAKLSAgIGRlZiByZWFkKGZkKToKLSAgICAgICBkYXRhID0gb3MucmVhZChmZCwgMTAyNCkKLSAgICAgICBzY3JpcHQud3JpdGUoZGF0YSkKLSAgICAgICByZXR1cm4gZGF0YQorICAgICAgICBwdHkuc3Bhd24oc2hlbGwsIHJlYWQpCiAKLSAgIHN5cy5zdGRvdXQud3JpdGUoJ1NjcmlwdCBzdGFydGVkLCBmaWxlIGlzICVzXG4nICUgZmlsZW5hbWUpCi0gICBzY3JpcHQud3JpdGUoKCdTY3JpcHQgc3RhcnRlZCBvbiAlc1xuJyAlIHRpbWUuYXNjdGltZSgpKS5lbmNvZGUoKSkKLSAgIHB0eS5zcGF3bihzaGVsbCwgcmVhZCkKLSAgIHNjcmlwdC53cml0ZSgoJ1NjcmlwdCBkb25lIG9uICVzXG4nICUgdGltZS5hc2N0aW1lKCkpLmVuY29kZSgpKQotICAgc3lzLnN0ZG91dC53cml0ZSgnU2NyaXB0IGRvbmUsIGZpbGUgaXMgJXNcbicgJSBmaWxlbmFtZSkKKyAgICAgICAgc2NyaXB0LndyaXRlKCgnU2NyaXB0IGRvbmUgb24gJXNcbicgJSB0aW1lLmFzY3RpbWUoKSkuZW5jb2RlKCkpCisgICAgICAgIHByaW50KCdTY3JpcHQgZG9uZSwgZmlsZSBpcycsIGZpbGVuYW1lKQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvcHlfY29tcGlsZS5yc3QgYi9Eb2MvbGlicmFyeS9weV9jb21waWxlLnJzdAppbmRleCAwN2RkYzI1Li5iYWU4NDUwIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9weV9jb21waWxlLnJzdAorKysgYi9Eb2MvbGlicmFyeS9weV9jb21waWxlLnJzdApAQCAtMjgsNyArMjgsNyBAQAogCiAuLiBmdW5jdGlvbjo6IGNvbXBpbGUoZmlsZSwgY2ZpbGU9Tm9uZSwgZGZpbGU9Tm9uZSwgZG9yYWlzZT1GYWxzZSwgb3B0aW1pemU9LTEpCiAKLSAgIENvbXBpbGUgYSBzb3VyY2UgZmlsZSB0byBieXRlLWNvZGUgYW5kIHdyaXRlIG91dCB0aGUgYnl0ZS1jb2RlIGNhY2hlICBmaWxlLgorICAgQ29tcGlsZSBhIHNvdXJjZSBmaWxlIHRvIGJ5dGUtY29kZSBhbmQgd3JpdGUgb3V0IHRoZSBieXRlLWNvZGUgY2FjaGUgZmlsZS4KICAgIFRoZSBzb3VyY2UgY29kZSBpcyBsb2FkZWQgZnJvbSB0aGUgZmlsZSBuYW1lICpmaWxlKi4gIFRoZSAgYnl0ZS1jb2RlIGlzCiAgICB3cml0dGVuIHRvICpjZmlsZSosIHdoaWNoIGRlZmF1bHRzIHRvIHRoZSA6UEVQOmAzMTQ3YCBwYXRoLCBlbmRpbmcgaW4KICAgIGBgLnB5Y2BgIChgYC5weW9gYCBpZiBvcHRpbWl6YXRpb24gaXMgZW5hYmxlZCBpbiB0aGUgY3VycmVudCBpbnRlcnByZXRlcikuCkBAIC00MSw2ICs0MSwxMyBAQAogICAgaXMgcmFpc2VkLiAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBwYXRoIHRvIGJ5dGUtY29tcGlsZWQgZmlsZSwgaS5lLgogICAgd2hhdGV2ZXIgKmNmaWxlKiB2YWx1ZSB3YXMgdXNlZC4KIAorICAgSWYgdGhlIHBhdGggdGhhdCAqY2ZpbGUqIGJlY29tZXMgKGVpdGhlciBleHBsaWNpdGx5IHNwZWNpZmllZCBvciBjb21wdXRlZCkKKyAgIGlzIGEgc3ltbGluayBvciBub24tcmVndWxhciBmaWxlLCA6ZXhjOmBGaWxlRXhpc3RzRXJyb3JgIHdpbGwgYmUgcmFpc2VkLgorICAgVGhpcyBpcyB0byBhY3QgYXMgYSB3YXJuaW5nIHRoYXQgaW1wb3J0IHdpbGwgdHVybiB0aG9zZSBwYXRocyBpbnRvIHJlZ3VsYXIKKyAgIGZpbGVzIGlmIGl0IGlzIGFsbG93ZWQgdG8gd3JpdGUgYnl0ZS1jb21waWxlZCBmaWxlcyB0byB0aG9zZSBwYXRocy4gVGhpcyBpcworICAgYSBzaWRlLWVmZmVjdCBvZiBpbXBvcnQgdXNpbmcgZmlsZSByZW5hbWluZyB0byBwbGFjZSB0aGUgZmluYWwgYnl0ZS1jb21waWxlZAorICAgZmlsZSBpbnRvIHBsYWNlIHRvIHByZXZlbnQgY29uY3VycmVudCBmaWxlIHdyaXRpbmcgaXNzdWVzLgorCiAgICAqb3B0aW1pemUqIGNvbnRyb2xzIHRoZSBvcHRpbWl6YXRpb24gbGV2ZWwgYW5kIGlzIHBhc3NlZCB0byB0aGUgYnVpbHQtaW4KICAgIDpmdW5jOmBjb21waWxlYCBmdW5jdGlvbi4gIFRoZSBkZWZhdWx0IG9mIGBgLTFgYCBzZWxlY3RzIHRoZSBvcHRpbWl6YXRpb24KICAgIGxldmVsIG9mIHRoZSBjdXJyZW50IGludGVycHJldGVyLgpAQCAtNTAsNiArNTcsMTMgQEAKICAgICAgIGRlZmF1bHQgd2FzICpmaWxlKiArIGBgJ2MnYGAgKGBgJ28nYGAgaWYgb3B0aW1pemF0aW9uIHdhcyBlbmFibGVkKS4KICAgICAgIEFsc28gYWRkZWQgdGhlICpvcHRpbWl6ZSogcGFyYW1ldGVyLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgQ2hhbmdlZCBjb2RlIHRvIHVzZSA6bW9kOmBpbXBvcnRsaWJgIGZvciB0aGUgYnl0ZS1jb2RlIGNhY2hlIGZpbGUgd3JpdGluZy4KKyAgICAgIFRoaXMgbWVhbnMgZmlsZSBjcmVhdGlvbi93cml0aW5nIHNlbWFudGljcyBub3cgbWF0Y2ggd2hhdCA6bW9kOmBpbXBvcnRsaWJgCisgICAgICBkb2VzLCBlLmcuIHBlcm1pc3Npb25zLCB3cml0ZS1hbmQtbW92ZSBzZW1hbnRpY3MsIGV0Yy4gQWxzbyBhZGRlZCB0aGUKKyAgICAgIGNhdmVhdCB0aGF0IDpleGM6YEZpbGVFeGlzdHNFcnJvcmAgaXMgcmFpc2VkIGlmICpjZmlsZSogaXMgYSBzeW1saW5rIG9yCisgICAgICBub24tcmVndWxhciBmaWxlLgorCiAKIC4uIGZ1bmN0aW9uOjogbWFpbihhcmdzPU5vbmUpCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3B5ZG9jLnJzdCBiL0RvYy9saWJyYXJ5L3B5ZG9jLnJzdAppbmRleCBlMTAwODY1Li5iNWUzMjMzIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9weWRvYy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvcHlkb2MucnN0CkBAIC0yMCw2ICsyMCwxMyBAQAogbW9kdWxlcy4gIFRoZSBkb2N1bWVudGF0aW9uIGNhbiBiZSBwcmVzZW50ZWQgYXMgcGFnZXMgb2YgdGV4dCBvbiB0aGUgY29uc29sZSwKIHNlcnZlZCB0byBhIFdlYiBicm93c2VyLCBvciBzYXZlZCB0byBIVE1MIGZpbGVzLgogCitGb3IgbW9kdWxlcywgY2xhc3NlcywgZnVuY3Rpb25zIGFuZCBtZXRob2RzLCB0aGUgZGlzcGxheWVkIGRvY3VtZW50YXRpb24gaXMKK2Rlcml2ZWQgZnJvbSB0aGUgZG9jc3RyaW5nIChpLmUuIHRoZSA6YXR0cjpgX19kb2NfX2AgYXR0cmlidXRlKSBvZiB0aGUgb2JqZWN0LAorYW5kIHJlY3Vyc2l2ZWx5IG9mIGl0cyBkb2N1bWVudGFibGUgbWVtYmVycy4gIElmIHRoZXJlIGlzIG5vIGRvY3N0cmluZywKKzptb2Q6YHB5ZG9jYCB0cmllcyB0byBvYnRhaW4gYSBkZXNjcmlwdGlvbiBmcm9tIHRoZSBibG9jayBvZiBjb21tZW50IGxpbmVzIGp1c3QKK2Fib3ZlIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBjbGFzcywgZnVuY3Rpb24gb3IgbWV0aG9kIGluIHRoZSBzb3VyY2UgZmlsZSwgb3IgYXQKK3RoZSB0b3Agb2YgdGhlIG1vZHVsZSAoc2VlIDpmdW5jOmBpbnNwZWN0LmdldGNvbW1lbnRzYCkuCisKIFRoZSBidWlsdC1pbiBmdW5jdGlvbiA6ZnVuYzpgaGVscGAgaW52b2tlcyB0aGUgb25saW5lIGhlbHAgc3lzdGVtIGluIHRoZQogaW50ZXJhY3RpdmUgaW50ZXJwcmV0ZXIsIHdoaWNoIHVzZXMgOm1vZDpgcHlkb2NgIHRvIGdlbmVyYXRlIGl0cyBkb2N1bWVudGF0aW9uCiBhcyB0ZXh0IG9uIHRoZSBjb25zb2xlLiAgVGhlIHNhbWUgdGV4dCBkb2N1bWVudGF0aW9uIGNhbiBhbHNvIGJlIHZpZXdlZCBmcm9tCkBAIC00NCw2ICs1MSwxMCBAQAogICAgZXhlY3V0ZWQgb24gdGhhdCBvY2Nhc2lvbi4gIFVzZSBhbiBgYGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6YGAgZ3VhcmQgdG8KICAgIG9ubHkgZXhlY3V0ZSBjb2RlIHdoZW4gYSBmaWxlIGlzIGludm9rZWQgYXMgYSBzY3JpcHQgYW5kIG5vdCBqdXN0IGltcG9ydGVkLgogCitXaGVuIHByaW50aW5nIG91dHB1dCB0byB0aGUgY29uc29sZSwgOnByb2dyYW06YHB5ZG9jYCBhdHRlbXB0cyB0byBwYWdpbmF0ZSB0aGUKK291dHB1dCBmb3IgZWFzaWVyIHJlYWRpbmcuICBJZiB0aGUgOmVudnZhcjpgUEFHRVJgIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHNldCwKKzpwcm9ncmFtOmBweWRvY2Agd2lsbCB1c2UgaXRzIHZhbHVlIGFzIGEgcGFnaW5hdGlvbiBwcm9ncmFtLgorCiBTcGVjaWZ5aW5nIGEgYGAtd2BgIGZsYWcgYmVmb3JlIHRoZSBhcmd1bWVudCB3aWxsIGNhdXNlIEhUTUwgZG9jdW1lbnRhdGlvbgogdG8gYmUgd3JpdHRlbiBvdXQgdG8gYSBmaWxlIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSwgaW5zdGVhZCBvZiBkaXNwbGF5aW5nIHRleHQKIG9uIHRoZSBjb25zb2xlLgpAQCAtNTksMTEgKzcwLDYgQEAKIGRvY3VtZW50YXRpb24gYXQgYGBodHRwOi8vbG9jYWxob3N0OjEyMzQvYGAgaW4geW91ciBwcmVmZXJyZWQgV2ViIGJyb3dzZXIuCiBTcGVjaWZ5aW5nIGBgMGBgIGFzIHRoZSBwb3J0IG51bWJlciB3aWxsIHNlbGVjdCBhbiBhcmJpdHJhcnkgdW51c2VkIHBvcnQuCiAKLTpwcm9ncmFtOmBweWRvYyAtZ2Agd2lsbCBzdGFydCB0aGUgc2VydmVyIGFuZCBhZGRpdGlvbmFsbHkgYnJpbmcgdXAgYQotc21hbGwgOm1vZDpgdGtpbnRlcmBcIC1iYXNlZCBncmFwaGljYWwgaW50ZXJmYWNlIHRvIGhlbHAgeW91IHNlYXJjaCBmb3IKLWRvY3VtZW50YXRpb24gcGFnZXMuICBUaGUgYGAtZ2BgIG9wdGlvbiBpcyBkZXByZWNhdGVkLCBzaW5jZSB0aGUgc2VydmVyIGNhbgotbm93IGJlIGNvbnRyb2xsZWQgZGlyZWN0bHkgZnJvbSBIVFRQIGNsaWVudHMuCi0KIDpwcm9ncmFtOmBweWRvYyAtYmAgd2lsbCBzdGFydCB0aGUgc2VydmVyIGFuZCBhZGRpdGlvbmFsbHkgb3BlbiBhIHdlYgogYnJvd3NlciB0byBhIG1vZHVsZSBpbmRleCBwYWdlLiAgRWFjaCBzZXJ2ZWQgcGFnZSBoYXMgYSBuYXZpZ2F0aW9uIGJhciBhdCB0aGUKIHRvcCB3aGVyZSB5b3UgY2FuICpHZXQqIGhlbHAgb24gYW4gaW5kaXZpZHVhbCBpdGVtLCAqU2VhcmNoKiBhbGwgbW9kdWxlcyB3aXRoIGEKQEAgLTc2LDExICs4MiwxOSBAQAogUHl0aG9uIGludGVycHJldGVyIGFuZCB0eXBlZCBgYGltcG9ydCBzcGFtYGAuCiAKIE1vZHVsZSBkb2NzIGZvciBjb3JlIG1vZHVsZXMgYXJlIGFzc3VtZWQgdG8gcmVzaWRlIGluCi1gYGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvWC5ZL2xpYnJhcnkvYGAgd2hlcmUgYGBYYGAgYW5kIGBgWWBgIGFyZSB0aGUKK2BgaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvWC5ZL2xpYnJhcnkvYGAgd2hlcmUgYGBYYGAgYW5kIGBgWWBgIGFyZSB0aGUKIG1ham9yIGFuZCBtaW5vciB2ZXJzaW9uIG51bWJlcnMgb2YgdGhlIFB5dGhvbiBpbnRlcnByZXRlci4gIFRoaXMgY2FuCiBiZSBvdmVycmlkZGVuIGJ5IHNldHRpbmcgdGhlIDplbnZ2YXI6YFBZVEhPTkRPQ1NgIGVudmlyb25tZW50IHZhcmlhYmxlCiB0byBhIGRpZmZlcmVudCBVUkwgb3IgdG8gYSBsb2NhbCBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgTGlicmFyeQogUmVmZXJlbmNlIE1hbnVhbCBwYWdlcy4KIAogLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKLSAgIEFkZGVkIHRoZSBgYC1iYGAgb3B0aW9uLCBkZXByZWNhdGVkIHRoZSBgYC1nYGAgb3B0aW9uLgorICAgQWRkZWQgdGhlIGBgLWJgYCBvcHRpb24uCisKKy4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCisgICBUaGUgYGAtZ2BgIGNvbW1hbmQgbGluZSBvcHRpb24gd2FzIHJlbW92ZWQuCisKKy4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICA6bW9kOmBweWRvY2Agbm93IHVzZXMgOmZ1bmM6YGluc3BlY3Quc2lnbmF0dXJlYCByYXRoZXIgdGhhbgorICAgOmZ1bmM6YGluc3BlY3QuZ2V0ZnVsbGFyZ3NwZWNgIHRvIGV4dHJhY3Qgc2lnbmF0dXJlIGluZm9ybWF0aW9uIGZyb20KKyAgIGNhbGxhYmxlcy4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3B5ZXhwYXQucnN0IGIvRG9jL2xpYnJhcnkvcHlleHBhdC5yc3QKaW5kZXggM2Q4OGQ4NS4uNjIwZmZiMSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvcHlleHBhdC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvcHlleHBhdC5yc3QKQEAgLTEwMCw2ICsxMDAsMTEgQEAKICAgICAgIGh0dHA6Ly93d3cucHl0aG9uLm9yZy9ucy8gZWxlbTEKICAgICAgIGVsZW0yCiAKKyAgIER1ZSB0byBsaW1pdGF0aW9ucyBpbiB0aGUgYGBFeHBhdGBgIGxpYnJhcnkgdXNlZCBieSA6bW9kOmBweWV4cGF0YCwKKyAgIHRoZSA6Y2xhc3M6YHhtbHBhcnNlcmAgaW5zdGFuY2UgcmV0dXJuZWQgY2FuIG9ubHkgYmUgdXNlZCB0byBwYXJzZSBhIHNpbmdsZQorICAgWE1MIGRvY3VtZW50LiAgQ2FsbCBgYFBhcnNlckNyZWF0ZWBgIGZvciBlYWNoIGRvY3VtZW50IHRvIHByb3ZpZGUgdW5pcXVlCisgICBwYXJzZXIgaW5zdGFuY2VzLgorCiAKIC4uIHNlZWFsc286OgogCkBAIC0xMTksNyArMTI0LDkgQEAKIAogICAgUGFyc2VzIHRoZSBjb250ZW50cyBvZiB0aGUgc3RyaW5nICpkYXRhKiwgY2FsbGluZyB0aGUgYXBwcm9wcmlhdGUgaGFuZGxlcgogICAgZnVuY3Rpb25zIHRvIHByb2Nlc3MgdGhlIHBhcnNlZCBkYXRhLiAgKmlzZmluYWwqIG11c3QgYmUgdHJ1ZSBvbiB0aGUgZmluYWwgY2FsbAotICAgdG8gdGhpcyBtZXRob2QuICAqZGF0YSogY2FuIGJlIHRoZSBlbXB0eSBzdHJpbmcgYXQgYW55IHRpbWUuCisgICB0byB0aGlzIG1ldGhvZDsgaXQgYWxsb3dzIHRoZSBwYXJzaW5nIG9mIGEgc2luZ2xlIGZpbGUgaW4gZnJhZ21lbnRzLAorICAgbm90IHRoZSBzdWJtaXNzaW9uIG9mIG11bHRpcGxlIGZpbGVzLgorICAgKmRhdGEqIGNhbiBiZSB0aGUgZW1wdHkgc3RyaW5nIGF0IGFueSB0aW1lLgogCiAKIC4uIG1ldGhvZDo6IHhtbHBhcnNlci5QYXJzZUZpbGUoZmlsZSkKQEAgLTc1Niw3ICs3NjMsNyBAQAogCiAuLiBkYXRhOjogWE1MX0VSUk9SX1VOREVGSU5FRF9FTlRJVFkKIAotICAgQSByZWZlcmVuY2Ugd2FzIG1hZGUgdG8gYSBlbnRpdHkgd2hpY2ggd2FzIG5vdCBkZWZpbmVkLgorICAgQSByZWZlcmVuY2Ugd2FzIG1hZGUgdG8gYW4gZW50aXR5IHdoaWNoIHdhcyBub3QgZGVmaW5lZC4KIAogCiAuLiBkYXRhOjogWE1MX0VSUk9SX1VOS05PV05fRU5DT0RJTkcKQEAgLTg2MSw1ICs4NjgsNSBAQAogLi4gWyNdIFRoZSBlbmNvZGluZyBzdHJpbmcgaW5jbHVkZWQgaW4gWE1MIG91dHB1dCBzaG91bGQgY29uZm9ybSB0byB0aGUKICAgIGFwcHJvcHJpYXRlIHN0YW5kYXJkcy4gRm9yIGV4YW1wbGUsICJVVEYtOCIgaXMgdmFsaWQsIGJ1dCAiVVRGOCIgaXMKICAgIG5vdC4gU2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDYvUkVDLXhtbDExLTIwMDYwODE2LyNOVC1FbmNvZGluZ0RlY2wKLSAgIGFuZCBodHRwOi8vd3d3LmlhbmEub3JnL2Fzc2lnbm1lbnRzL2NoYXJhY3Rlci1zZXRzXCAuCisgICBhbmQgaHR0cDovL3d3dy5pYW5hLm9yZy9hc3NpZ25tZW50cy9jaGFyYWN0ZXItc2V0cy9jaGFyYWN0ZXItc2V0cy54aHRtbC4KIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvcHl0aG9uLnJzdCBiL0RvYy9saWJyYXJ5L3B5dGhvbi5yc3QKaW5kZXggYjY3ZmJmYy4uZjMwN2Q3ZCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvcHl0aG9uLnJzdAorKysgYi9Eb2MvbGlicmFyeS9weXRob24ucnN0CkBAIC0yNSw0ICsyNSwzIEBACiAgICBpbnNwZWN0LnJzdAogICAgc2l0ZS5yc3QKICAgIGZwZWN0bC5yc3QKLSAgIGRpc3R1dGlscy5yc3QKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3F1b3ByaS5yc3QgYi9Eb2MvbGlicmFyeS9xdW9wcmkucnN0CmluZGV4IDc1NTgxMWEuLjNhNzRjZjggMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3F1b3ByaS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvcXVvcHJpLnJzdApAQCAtMjQsOSArMjQsOCBAQAogLi4gZnVuY3Rpb246OiBkZWNvZGUoaW5wdXQsIG91dHB1dCwgaGVhZGVyPUZhbHNlKQogCiAgICBEZWNvZGUgdGhlIGNvbnRlbnRzIG9mIHRoZSAqaW5wdXQqIGZpbGUgYW5kIHdyaXRlIHRoZSByZXN1bHRpbmcgZGVjb2RlZCBiaW5hcnkKLSAgIGRhdGEgdG8gdGhlICpvdXRwdXQqIGZpbGUuICppbnB1dCogYW5kICpvdXRwdXQqIG11c3QgYmUgOnRlcm06YGZpbGUgb2JqZWN0cwotICAgPGZpbGUgb2JqZWN0PmAuICAqaW5wdXQqIHdpbGwgYmUgcmVhZCB1bnRpbCBgYGlucHV0LnJlYWRsaW5lKClgYCByZXR1cm5zIGFuCi0gICBlbXB0eSBzdHJpbmcuIElmIHRoZSBvcHRpb25hbCBhcmd1bWVudCAqaGVhZGVyKiBpcyBwcmVzZW50IGFuZCB0cnVlLCB1bmRlcnNjb3JlCisgICBkYXRhIHRvIHRoZSAqb3V0cHV0KiBmaWxlLiAqaW5wdXQqIGFuZCAqb3V0cHV0KiBtdXN0IGJlIDp0ZXJtOmBiaW5hcnkgZmlsZSBvYmplY3RzCisgICA8ZmlsZSBvYmplY3Q+YC4gIElmIHRoZSBvcHRpb25hbCBhcmd1bWVudCAqaGVhZGVyKiBpcyBwcmVzZW50IGFuZCB0cnVlLCB1bmRlcnNjb3JlCiAgICB3aWxsIGJlIGRlY29kZWQgYXMgc3BhY2UuIFRoaXMgaXMgdXNlZCB0byBkZWNvZGUgIlEiLWVuY29kZWQgaGVhZGVycyBhcwogICAgZGVzY3JpYmVkIGluIDpyZmM6YDE1MjJgOiAiTUlNRSAoTXVsdGlwdXJwb3NlIEludGVybmV0IE1haWwgRXh0ZW5zaW9ucykKICAgIFBhcnQgVHdvOiBNZXNzYWdlIEhlYWRlciBFeHRlbnNpb25zIGZvciBOb24tQVNDSUkgVGV4dCIuCkBAIC0zNCwyNyArMzMsMjggQEAKIAogLi4gZnVuY3Rpb246OiBlbmNvZGUoaW5wdXQsIG91dHB1dCwgcXVvdGV0YWJzLCBoZWFkZXI9RmFsc2UpCiAKLSAgIEVuY29kZSB0aGUgY29udGVudHMgb2YgdGhlICppbnB1dCogZmlsZSBhbmQgd3JpdGUgdGhlIHJlc3VsdGluZyBxdW90ZWQtcHJpbnRhYmxlCi0gICBkYXRhIHRvIHRoZSAqb3V0cHV0KiBmaWxlLiAqaW5wdXQqIGFuZCAqb3V0cHV0KiBtdXN0IGJlIDp0ZXJtOmBmaWxlIG9iamVjdHMKLSAgIDxmaWxlIG9iamVjdD5gLiAgKmlucHV0KiB3aWxsIGJlIHJlYWQgdW50aWwgYGBpbnB1dC5yZWFkbGluZSgpYGAgcmV0dXJucyBhbgotICAgZW1wdHkgc3RyaW5nLiAqcXVvdGV0YWJzKiBpcyBhIGZsYWcgd2hpY2ggY29udHJvbHMgd2hldGhlciB0byBlbmNvZGUgZW1iZWRkZWQKLSAgIHNwYWNlcyBhbmQgdGFiczsgd2hlbiB0cnVlIGl0IGVuY29kZXMgc3VjaCBlbWJlZGRlZCB3aGl0ZXNwYWNlLCBhbmQgd2hlbgotICAgZmFsc2UgaXQgbGVhdmVzIHRoZW0gdW5lbmNvZGVkLiAgTm90ZSB0aGF0IHNwYWNlcyBhbmQgdGFicyBhcHBlYXJpbmcgYXQgdGhlCi0gICBlbmQgb2YgbGluZXMgYXJlIGFsd2F5cyBlbmNvZGVkLCBhcyBwZXIgOnJmYzpgMTUyMWAuICAqaGVhZGVyKiBpcyBhIGZsYWcKLSAgIHdoaWNoIGNvbnRyb2xzIGlmIHNwYWNlcyBhcmUgZW5jb2RlZCBhcyB1bmRlcnNjb3JlcyBhcyBwZXIgOnJmYzpgMTUyMmAuCisgICBFbmNvZGUgdGhlIGNvbnRlbnRzIG9mIHRoZSAqaW5wdXQqIGZpbGUgYW5kIHdyaXRlIHRoZSByZXN1bHRpbmcgcXVvdGVkLQorICAgcHJpbnRhYmxlIGRhdGEgdG8gdGhlICpvdXRwdXQqIGZpbGUuICppbnB1dCogYW5kICpvdXRwdXQqIG11c3QgYmUKKyAgIDp0ZXJtOmBiaW5hcnkgZmlsZSBvYmplY3RzIDxmaWxlIG9iamVjdD5gLiAqcXVvdGV0YWJzKiwgYSBmbGFnIHdoaWNoIGNvbnRyb2xzCisgICB3aGV0aGVyIHRvIGVuY29kZSBlbWJlZGRlZCBzcGFjZXMgYW5kIHRhYnMgbXVzdCBiZSBwcm92aWRlZGEgYW5kIHdoZW4gdHJ1ZSBpdAorICAgZW5jb2RlcyBzdWNoIGVtYmVkZGVkIHdoaXRlc3BhY2UsIGFuZCB3aGVuIGZhbHNlIGl0IGxlYXZlcyB0aGVtIHVuZW5jb2RlZC4KKyAgIE5vdGUgdGhhdCBzcGFjZXMgYW5kIHRhYnMgYXBwZWFyaW5nIGF0IHRoZSBlbmQgb2YgbGluZXMgYXJlIGFsd2F5cyBlbmNvZGVkLAorICAgYXMgcGVyIDpyZmM6YDE1MjFgLiAgKmhlYWRlciogaXMgYSBmbGFnIHdoaWNoIGNvbnRyb2xzIGlmIHNwYWNlcyBhcmUgZW5jb2RlZAorICAgYXMgdW5kZXJzY29yZXMgYXMgcGVyIDpyZmM6YDE1MjJgLgogCiAKIC4uIGZ1bmN0aW9uOjogZGVjb2Rlc3RyaW5nKHMsIGhlYWRlcj1GYWxzZSkKIAotICAgTGlrZSA6ZnVuYzpgZGVjb2RlYCwgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBhIHNvdXJjZSBzdHJpbmcgYW5kIHJldHVybnMgdGhlCi0gICBjb3JyZXNwb25kaW5nIGRlY29kZWQgc3RyaW5nLgorICAgTGlrZSA6ZnVuYzpgZGVjb2RlYCwgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBhIHNvdXJjZSA6Y2xhc3M6YGJ5dGVzYCBhbmQKKyAgIHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgZGVjb2RlZCA6Y2xhc3M6YGJ5dGVzYC4KIAogCiAuLiBmdW5jdGlvbjo6IGVuY29kZXN0cmluZyhzLCBxdW90ZXRhYnM9RmFsc2UsIGhlYWRlcj1GYWxzZSkKIAotICAgTGlrZSA6ZnVuYzpgZW5jb2RlYCwgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBhIHNvdXJjZSBzdHJpbmcgYW5kIHJldHVybnMgdGhlCi0gICBjb3JyZXNwb25kaW5nIGVuY29kZWQgc3RyaW5nLiAgKnF1b3RldGFicyogYW5kICpoZWFkZXIqIGFyZSBvcHRpb25hbAotICAgKGRlZmF1bHRpbmcgdG8gYGBGYWxzZWBgKSwgYW5kIGFyZSBwYXNzZWQgc3RyYWlnaHQgdGhyb3VnaCB0byA6ZnVuYzpgZW5jb2RlYC4KKyAgIExpa2UgOmZ1bmM6YGVuY29kZWAsIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYSBzb3VyY2UgOmNsYXNzOmBieXRlc2AgYW5kCisgICByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIGVuY29kZWQgOmNsYXNzOmBieXRlc2AuIEJ5IGRlZmF1bHQsIGl0IHNlbmRzIGEKKyAgIEZhbHNlIHZhbHVlIHRvICpxdW90ZXRhYnMqIHBhcmFtZXRlciBvZiB0aGUgOmZ1bmM6YGVuY29kZWAgZnVuY3Rpb24uCisKIAogCiAuLiBzZWVhbHNvOjoKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3JlLnJzdCBiL0RvYy9saWJyYXJ5L3JlLnJzdAppbmRleCBkZDc5MGU3Li5jYWU2ODc0IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9yZS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvcmUucnN0CkBAIC0zOCwxMyArMzgsNiBAQAogdGhhdCBkb24ndCByZXF1aXJlIHlvdSB0byBjb21waWxlIGEgcmVnZXggb2JqZWN0IGZpcnN0LCBidXQgbWlzcyBzb21lCiBmaW5lLXR1bmluZyBwYXJhbWV0ZXJzLgogCi0uLiBzZWVhbHNvOjoKLQotICAgTWFzdGVyaW5nIFJlZ3VsYXIgRXhwcmVzc2lvbnMKLSAgICAgIEJvb2sgb24gcmVndWxhciBleHByZXNzaW9ucyBieSBKZWZmcmV5IEZyaWVkbCwgcHVibGlzaGVkIGJ5IE8nUmVpbGx5LiAgVGhlCi0gICAgICBzZWNvbmQgZWRpdGlvbiBvZiB0aGUgYm9vayBubyBsb25nZXIgY292ZXJzIFB5dGhvbiBhdCBhbGwsIGJ1dCB0aGUgZmlyc3QKLSAgICAgIGVkaXRpb24gY292ZXJlZCB3cml0aW5nIGdvb2QgcmVndWxhciBleHByZXNzaW9uIHBhdHRlcm5zIGluIGdyZWF0IGRldGFpbC4KLQogCiAuLiBfcmUtc3ludGF4OgogCkBAIC0yODgsNyArMjgxLDkgQEAKICAgIGFzc2VydGlvbmAuIGBgKD88PWFiYylkZWZgYCB3aWxsIGZpbmQgYSBtYXRjaCBpbiBgYGFiY2RlZmBgLCBzaW5jZSB0aGUKICAgIGxvb2tiZWhpbmQgd2lsbCBiYWNrIHVwIDMgY2hhcmFjdGVycyBhbmQgY2hlY2sgaWYgdGhlIGNvbnRhaW5lZCBwYXR0ZXJuIG1hdGNoZXMuCiAgICBUaGUgY29udGFpbmVkIHBhdHRlcm4gbXVzdCBvbmx5IG1hdGNoIHN0cmluZ3Mgb2Ygc29tZSBmaXhlZCBsZW5ndGgsIG1lYW5pbmcgdGhhdAotICAgYGBhYmNgYCBvciBgYGF8YmBgIGFyZSBhbGxvd2VkLCBidXQgYGBhKmBgIGFuZCBgYGF7Myw0fWBgIGFyZSBub3QuICBOb3RlIHRoYXQKKyAgIGBgYWJjYGAgb3IgYGBhfGJgYCBhcmUgYWxsb3dlZCwgYnV0IGBgYSpgYCBhbmQgYGBhezMsNH1gYCBhcmUgbm90LiAgR3JvdXAKKyAgIHJlZmVyZW5jZXMgYXJlIG5vdCBzdXBwb3J0ZWQgZXZlbiBpZiB0aGV5IG1hdGNoIHN0cmluZ3Mgb2Ygc29tZSBmaXhlZCBsZW5ndGguCisgICBOb3RlIHRoYXQKICAgIHBhdHRlcm5zIHdoaWNoIHN0YXJ0IHdpdGggcG9zaXRpdmUgbG9va2JlaGluZCBhc3NlcnRpb25zIHdpbGwgbm90IG1hdGNoIGF0IHRoZQogICAgYmVnaW5uaW5nIG9mIHRoZSBzdHJpbmcgYmVpbmcgc2VhcmNoZWQ7IHlvdSB3aWxsIG1vc3QgbGlrZWx5IHdhbnQgdG8gdXNlIHRoZQogICAgOmZ1bmM6YHNlYXJjaGAgZnVuY3Rpb24gcmF0aGVyIHRoYW4gdGhlIDpmdW5jOmBtYXRjaGAgZnVuY3Rpb246CkBAIC0zMDgsNyArMzAzLDggQEAKICAgIE1hdGNoZXMgaWYgdGhlIGN1cnJlbnQgcG9zaXRpb24gaW4gdGhlIHN0cmluZyBpcyBub3QgcHJlY2VkZWQgYnkgYSBtYXRjaCBmb3IKICAgIGBgLi4uYGAuICBUaGlzIGlzIGNhbGxlZCBhIDpkZm46YG5lZ2F0aXZlIGxvb2tiZWhpbmQgYXNzZXJ0aW9uYC4gIFNpbWlsYXIgdG8KICAgIHBvc2l0aXZlIGxvb2tiZWhpbmQgYXNzZXJ0aW9ucywgdGhlIGNvbnRhaW5lZCBwYXR0ZXJuIG11c3Qgb25seSBtYXRjaCBzdHJpbmdzIG9mCi0gICBzb21lIGZpeGVkIGxlbmd0aC4gIFBhdHRlcm5zIHdoaWNoIHN0YXJ0IHdpdGggbmVnYXRpdmUgbG9va2JlaGluZCBhc3NlcnRpb25zIG1heQorICAgc29tZSBmaXhlZCBsZW5ndGggYW5kIHNob3VsZG4ndCBjb250YWluIGdyb3VwIHJlZmVyZW5jZXMuCisgICBQYXR0ZXJucyB3aGljaCBzdGFydCB3aXRoIG5lZ2F0aXZlIGxvb2tiZWhpbmQgYXNzZXJ0aW9ucyBtYXkKICAgIG1hdGNoIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHN0cmluZyBiZWluZyBzZWFyY2hlZC4KIAogYGAoPyhpZC9uYW1lKXllcy1wYXR0ZXJufG5vLXBhdHRlcm4pYGAKQEAgLTQ0Myw2ICs0MzksMTQgQEAKICAgIFRoZSBgYCdcdSdgYCBhbmQgYGAnXFUnYGAgZXNjYXBlIHNlcXVlbmNlcyBoYXZlIGJlZW4gYWRkZWQuCiAKIAorLi4gc2VlYWxzbzo6CisKKyAgIE1hc3RlcmluZyBSZWd1bGFyIEV4cHJlc3Npb25zCisgICAgICBCb29rIG9uIHJlZ3VsYXIgZXhwcmVzc2lvbnMgYnkgSmVmZnJleSBGcmllZGwsIHB1Ymxpc2hlZCBieSBPJ1JlaWxseS4gIFRoZQorICAgICAgc2Vjb25kIGVkaXRpb24gb2YgdGhlIGJvb2sgbm8gbG9uZ2VyIGNvdmVycyBQeXRob24gYXQgYWxsLCBidXQgdGhlIGZpcnN0CisgICAgICBlZGl0aW9uIGNvdmVyZWQgd3JpdGluZyBnb29kIHJlZ3VsYXIgZXhwcmVzc2lvbiBwYXR0ZXJucyBpbiBncmVhdCBkZXRhaWwuCisKKwogCiAuLiBfY29udGVudHMtb2YtbW9kdWxlLXJlOgogCkBAIC00NTgsOCArNDYyLDggQEAKIC4uIGZ1bmN0aW9uOjogY29tcGlsZShwYXR0ZXJuLCBmbGFncz0wKQogCiAgICBDb21waWxlIGEgcmVndWxhciBleHByZXNzaW9uIHBhdHRlcm4gaW50byBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBvYmplY3QsIHdoaWNoCi0gICBjYW4gYmUgdXNlZCBmb3IgbWF0Y2hpbmcgdXNpbmcgaXRzIDpmdW5jOmBtYXRjaGAgYW5kIDpmdW5jOmBzZWFyY2hgIG1ldGhvZHMsCi0gICBkZXNjcmliZWQgYmVsb3cuCisgICBjYW4gYmUgdXNlZCBmb3IgbWF0Y2hpbmcgdXNpbmcgaXRzIDpmdW5jOmB+cmVnZXgubWF0Y2hgIGFuZAorICAgOmZ1bmM6YH5yZWdleC5zZWFyY2hgIG1ldGhvZHMsIGRlc2NyaWJlZCBiZWxvdy4KIAogICAgVGhlIGV4cHJlc3Npb24ncyBiZWhhdmlvdXIgY2FuIGJlIG1vZGlmaWVkIGJ5IHNwZWNpZnlpbmcgYSAqZmxhZ3MqIHZhbHVlLgogICAgVmFsdWVzIGNhbiBiZSBhbnkgb2YgdGhlIGZvbGxvd2luZyB2YXJpYWJsZXMsIGNvbWJpbmVkIHVzaW5nIGJpdHdpc2UgT1IgKHRoZQpAQCAtNDgxLDcgKzQ4NSw3IEBACiAgICAuLiBub3RlOjoKIAogICAgICAgVGhlIGNvbXBpbGVkIHZlcnNpb25zIG9mIHRoZSBtb3N0IHJlY2VudCBwYXR0ZXJucyBwYXNzZWQgdG8KLSAgICAgIDpmdW5jOmByZS5tYXRjaGAsIDpmdW5jOmByZS5zZWFyY2hgIG9yIDpmdW5jOmByZS5jb21waWxlYCBhcmUgY2FjaGVkLCBzbworICAgICAgOmZ1bmM6YHJlLmNvbXBpbGVgIGFuZCB0aGUgbW9kdWxlLWxldmVsIG1hdGNoaW5nIGZ1bmN0aW9ucyBhcmUgY2FjaGVkLCBzbwogICAgICAgcHJvZ3JhbXMgdGhhdCB1c2Ugb25seSBhIGZldyByZWd1bGFyIGV4cHJlc3Npb25zIGF0IGEgdGltZSBuZWVkbid0IHdvcnJ5CiAgICAgICBhYm91dCBjb21waWxpbmcgcmVndWxhciBleHByZXNzaW9ucy4KIApAQCAtNTQ0LDEzICs1NDgsMTUgQEAKIC4uIGRhdGE6OiBYCiAgICAgICAgICAgVkVSQk9TRQogCi0gICBUaGlzIGZsYWcgYWxsb3dzIHlvdSB0byB3cml0ZSByZWd1bGFyIGV4cHJlc3Npb25zIHRoYXQgbG9vayBuaWNlci4gV2hpdGVzcGFjZQotICAgd2l0aGluIHRoZSBwYXR0ZXJuIGlzIGlnbm9yZWQsIGV4Y2VwdCB3aGVuIGluIGEgY2hhcmFjdGVyIGNsYXNzIG9yIHByZWNlZGVkIGJ5Ci0gICBhbiB1bmVzY2FwZWQgYmFja3NsYXNoLCBhbmQsIHdoZW4gYSBsaW5lIGNvbnRhaW5zIGEgYGAnIydgYCBuZWl0aGVyIGluIGEKLSAgIGNoYXJhY3RlciBjbGFzcyBvciBwcmVjZWRlZCBieSBhbiB1bmVzY2FwZWQgYmFja3NsYXNoLCBhbGwgY2hhcmFjdGVycyBmcm9tIHRoZQotICAgbGVmdG1vc3Qgc3VjaCBgYCcjJ2BgIHRocm91Z2ggdGhlIGVuZCBvZiB0aGUgbGluZSBhcmUgaWdub3JlZC4KKyAgIFRoaXMgZmxhZyBhbGxvd3MgeW91IHRvIHdyaXRlIHJlZ3VsYXIgZXhwcmVzc2lvbnMgdGhhdCBsb29rIG5pY2VyIGFuZCBhcmUKKyAgIG1vcmUgcmVhZGFibGUgYnkgYWxsb3dpbmcgeW91IHRvIHZpc3VhbGx5IHNlcGFyYXRlIGxvZ2ljYWwgc2VjdGlvbnMgb2YgdGhlCisgICBwYXR0ZXJuIGFuZCBhZGQgY29tbWVudHMuIFdoaXRlc3BhY2Ugd2l0aGluIHRoZSBwYXR0ZXJuIGlzIGlnbm9yZWQsIGV4Y2VwdAorICAgd2hlbiBpbiBhIGNoYXJhY3RlciBjbGFzcyBvciB3aGVuIHByZWNlZGVkIGJ5IGFuIHVuZXNjYXBlZCBiYWNrc2xhc2guCisgICBXaGVuIGEgbGluZSBjb250YWlucyBhIGBgI2BgIHRoYXQgaXMgbm90IGluIGEgY2hhcmFjdGVyIGNsYXNzIGFuZCBpcyBub3QKKyAgIHByZWNlZGVkIGJ5IGFuIHVuZXNjYXBlZCBiYWNrc2xhc2gsIGFsbCBjaGFyYWN0ZXJzIGZyb20gdGhlIGxlZnRtb3N0IHN1Y2gKKyAgIGBgI2BgIHRocm91Z2ggdGhlIGVuZCBvZiB0aGUgbGluZSBhcmUgaWdub3JlZC4KIAotICAgVGhhdCBtZWFucyB0aGF0IHRoZSB0d28gZm9sbG93aW5nIHJlZ3VsYXIgZXhwcmVzc2lvbiBvYmplY3RzIHRoYXQgbWF0Y2ggYQorICAgVGhpcyBtZWFucyB0aGF0IHRoZSB0d28gZm9sbG93aW5nIHJlZ3VsYXIgZXhwcmVzc2lvbiBvYmplY3RzIHRoYXQgbWF0Y2ggYQogICAgZGVjaW1hbCBudW1iZXIgYXJlIGZ1bmN0aW9uYWxseSBlcXVhbDo6CiAKICAgICAgIGEgPSByZS5jb21waWxlKHIiIiJcZCArICAjIHRoZSBpbnRlZ3JhbCBwYXJ0CkBAIC01NjMsNyArNTY5LDcgQEAKIAogLi4gZnVuY3Rpb246OiBzZWFyY2gocGF0dGVybiwgc3RyaW5nLCBmbGFncz0wKQogCi0gICBTY2FuIHRocm91Z2ggKnN0cmluZyogbG9va2luZyBmb3IgYSBsb2NhdGlvbiB3aGVyZSB0aGUgcmVndWxhciBleHByZXNzaW9uCisgICBTY2FuIHRocm91Z2ggKnN0cmluZyogbG9va2luZyBmb3IgdGhlIGZpcnN0IGxvY2F0aW9uIHdoZXJlIHRoZSByZWd1bGFyIGV4cHJlc3Npb24KICAgICpwYXR0ZXJuKiBwcm9kdWNlcyBhIG1hdGNoLCBhbmQgcmV0dXJuIGEgY29ycmVzcG9uZGluZyA6cmVmOmBtYXRjaCBvYmplY3QKICAgIDxtYXRjaC1vYmplY3RzPmAuICBSZXR1cm4gYGBOb25lYGAgaWYgbm8gcG9zaXRpb24gaW4gdGhlIHN0cmluZyBtYXRjaGVzIHRoZQogICAgcGF0dGVybjsgbm90ZSB0aGF0IHRoaXMgaXMgZGlmZmVyZW50IGZyb20gZmluZGluZyBhIHplcm8tbGVuZ3RoIG1hdGNoIGF0IHNvbWUKQEAgLTU4NCw2ICs1OTAsMTYgQEAKICAgIGluc3RlYWQgKHNlZSBhbHNvIDpyZWY6YHNlYXJjaC12cy1tYXRjaGApLgogCiAKKy4uIGZ1bmN0aW9uOjogZnVsbG1hdGNoKHBhdHRlcm4sIHN0cmluZywgZmxhZ3M9MCkKKworICAgSWYgdGhlIHdob2xlICpzdHJpbmcqIG1hdGNoZXMgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiAqcGF0dGVybiosIHJldHVybiBhCisgICBjb3JyZXNwb25kaW5nIDpyZWY6YG1hdGNoIG9iamVjdCA8bWF0Y2gtb2JqZWN0cz5gLiAgUmV0dXJuIGBgTm9uZWBgIGlmIHRoZQorICAgc3RyaW5nIGRvZXMgbm90IG1hdGNoIHRoZSBwYXR0ZXJuOyBub3RlIHRoYXQgdGhpcyBpcyBkaWZmZXJlbnQgZnJvbSBhCisgICB6ZXJvLWxlbmd0aCBtYXRjaC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogLi4gZnVuY3Rpb246OiBzcGxpdChwYXR0ZXJuLCBzdHJpbmcsIG1heHNwbGl0PTAsIGZsYWdzPTApCiAKICAgIFNwbGl0ICpzdHJpbmcqIGJ5IHRoZSBvY2N1cnJlbmNlcyBvZiAqcGF0dGVybiouICBJZiBjYXB0dXJpbmcgcGFyZW50aGVzZXMgYXJlCkBAIC03NTUsNyArNzcxLDcgQEAKIAogICAgPj4+IHBhdHRlcm4gPSByZS5jb21waWxlKCJkIikKICAgID4+PiBwYXR0ZXJuLnNlYXJjaCgiZG9nIikgICAgICMgTWF0Y2ggYXQgaW5kZXggMAotICAgPF9zcmUuU1JFX01hdGNoIG9iamVjdCBhdCAuLi4+CisgICA8X3NyZS5TUkVfTWF0Y2ggb2JqZWN0OyBzcGFuPSgwLCAxKSwgbWF0Y2g9J2QnPgogICAgPj4+IHBhdHRlcm4uc2VhcmNoKCJkb2ciLCAxKSAgIyBObyBtYXRjaDsgc2VhcmNoIGRvZXNuJ3QgaW5jbHVkZSB0aGUgImQiCiAKIApAQCAtNzcyLDEyICs3ODgsMzAgQEAKICAgID4+PiBwYXR0ZXJuID0gcmUuY29tcGlsZSgibyIpCiAgICA+Pj4gcGF0dGVybi5tYXRjaCgiZG9nIikgICAgICAjIE5vIG1hdGNoIGFzICJvIiBpcyBub3QgYXQgdGhlIHN0YXJ0IG9mICJkb2ciLgogICAgPj4+IHBhdHRlcm4ubWF0Y2goImRvZyIsIDEpICAgIyBNYXRjaCBhcyAibyIgaXMgdGhlIDJuZCBjaGFyYWN0ZXIgb2YgImRvZyIuCi0gICA8X3NyZS5TUkVfTWF0Y2ggb2JqZWN0IGF0IC4uLj4KKyAgIDxfc3JlLlNSRV9NYXRjaCBvYmplY3Q7IHNwYW49KDEsIDIpLCBtYXRjaD0nbyc+CiAKICAgIElmIHlvdSB3YW50IHRvIGxvY2F0ZSBhIG1hdGNoIGFueXdoZXJlIGluICpzdHJpbmcqLCB1c2UKICAgIDptZXRoOmB+cmVnZXguc2VhcmNoYCBpbnN0ZWFkIChzZWUgYWxzbyA6cmVmOmBzZWFyY2gtdnMtbWF0Y2hgKS4KIAogCisuLiBtZXRob2Q6OiByZWdleC5mdWxsbWF0Y2goc3RyaW5nWywgcG9zWywgZW5kcG9zXV0pCisKKyAgIElmIHRoZSB3aG9sZSAqc3RyaW5nKiBtYXRjaGVzIHRoaXMgcmVndWxhciBleHByZXNzaW9uLCByZXR1cm4gYSBjb3JyZXNwb25kaW5nCisgICA6cmVmOmBtYXRjaCBvYmplY3QgPG1hdGNoLW9iamVjdHM+YC4gIFJldHVybiBgYE5vbmVgYCBpZiB0aGUgc3RyaW5nIGRvZXMgbm90CisgICBtYXRjaCB0aGUgcGF0dGVybjsgbm90ZSB0aGF0IHRoaXMgaXMgZGlmZmVyZW50IGZyb20gYSB6ZXJvLWxlbmd0aCBtYXRjaC4KKworICAgVGhlIG9wdGlvbmFsICpwb3MqIGFuZCAqZW5kcG9zKiBwYXJhbWV0ZXJzIGhhdmUgdGhlIHNhbWUgbWVhbmluZyBhcyBmb3IgdGhlCisgICA6bWV0aDpgfnJlZ2V4LnNlYXJjaGAgbWV0aG9kLgorCisgICA+Pj4gcGF0dGVybiA9IHJlLmNvbXBpbGUoIm9bZ2hdIikKKyAgID4+PiBwYXR0ZXJuLmZ1bGxtYXRjaCgiZG9nIikgICAgICAjIE5vIG1hdGNoIGFzICJvIiBpcyBub3QgYXQgdGhlIHN0YXJ0IG9mICJkb2ciLgorICAgPj4+IHBhdHRlcm4uZnVsbG1hdGNoKCJvZ3JlIikgICAgICMgTm8gbWF0Y2ggYXMgbm90IHRoZSBmdWxsIHN0cmluZyBtYXRjaGVzLgorICAgPj4+IHBhdHRlcm4uZnVsbG1hdGNoKCJkb2dnaWUiLCAxLCAzKSAgICMgTWF0Y2hlcyB3aXRoaW4gZ2l2ZW4gbGltaXRzLgorICAgPF9zcmUuU1JFX01hdGNoIG9iamVjdDsgc3Bhbj0oMSwgMyksIG1hdGNoPSdvZyc+CisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIC4uIG1ldGhvZDo6IHJlZ2V4LnNwbGl0KHN0cmluZywgbWF4c3BsaXQ9MCkKIAogICAgSWRlbnRpY2FsIHRvIHRoZSA6ZnVuYzpgc3BsaXRgIGZ1bmN0aW9uLCB1c2luZyB0aGUgY29tcGlsZWQgcGF0dGVybi4KQEAgLTExMzksNyArMTE3Myw3IEBACiAKICAgID4+PiByZS5tYXRjaCgiYyIsICJhYmNkZWYiKSAgIyBObyBtYXRjaAogICAgPj4+IHJlLnNlYXJjaCgiYyIsICJhYmNkZWYiKSAjIE1hdGNoCi0gICA8X3NyZS5TUkVfTWF0Y2ggb2JqZWN0IGF0IC4uLj4KKyAgIDxfc3JlLlNSRV9NYXRjaCBvYmplY3Q7IHNwYW49KDIsIDMpLCBtYXRjaD0nYyc+CiAKIFJlZ3VsYXIgZXhwcmVzc2lvbnMgYmVnaW5uaW5nIHdpdGggYGAnXidgYCBjYW4gYmUgdXNlZCB3aXRoIDpmdW5jOmBzZWFyY2hgIHRvCiByZXN0cmljdCB0aGUgbWF0Y2ggYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgc3RyaW5nOjoKQEAgLTExNDcsNyArMTE4MSw3IEBACiAgICA+Pj4gcmUubWF0Y2goImMiLCAiYWJjZGVmIikgICMgTm8gbWF0Y2gKICAgID4+PiByZS5zZWFyY2goIl5jIiwgImFiY2RlZiIpICMgTm8gbWF0Y2gKICAgID4+PiByZS5zZWFyY2goIl5hIiwgImFiY2RlZiIpICAjIE1hdGNoCi0gICA8X3NyZS5TUkVfTWF0Y2ggb2JqZWN0IGF0IC4uLj4KKyAgIDxfc3JlLlNSRV9NYXRjaCBvYmplY3Q7IHNwYW49KDAsIDEpLCBtYXRjaD0nYSc+CiAKIE5vdGUgaG93ZXZlciB0aGF0IGluIDpjb25zdDpgTVVMVElMSU5FYCBtb2RlIDpmdW5jOmBtYXRjaGAgb25seSBtYXRjaGVzIGF0IHRoZQogYmVnaW5uaW5nIG9mIHRoZSBzdHJpbmcsIHdoZXJlYXMgdXNpbmcgOmZ1bmM6YHNlYXJjaGAgd2l0aCBhIHJlZ3VsYXIgZXhwcmVzc2lvbgpAQCAtMTE1NSw3ICsxMTg5LDcgQEAKIAogICAgPj4+IHJlLm1hdGNoKCdYJywgJ0FcbkJcblgnLCByZS5NVUxUSUxJTkUpICAjIE5vIG1hdGNoCiAgICA+Pj4gcmUuc2VhcmNoKCdeWCcsICdBXG5CXG5YJywgcmUuTVVMVElMSU5FKSAgIyBNYXRjaAotICAgPF9zcmUuU1JFX01hdGNoIG9iamVjdCBhdCAuLi4+CisgICA8X3NyZS5TUkVfTWF0Y2ggb2JqZWN0OyBzcGFuPSg0LCA1KSwgbWF0Y2g9J1gnPgogCiAKIE1ha2luZyBhIFBob25lYm9vawpAQCAtMTI3NCw5ICsxMzA4LDkgQEAKIGZ1bmN0aW9uYWxseSBpZGVudGljYWw6CiAKICAgID4+PiByZS5tYXRjaChyIlxXKC4pXDFcVyIsICIgZmYgIikKLSAgIDxfc3JlLlNSRV9NYXRjaCBvYmplY3QgYXQgLi4uPgorICAgPF9zcmUuU1JFX01hdGNoIG9iamVjdDsgc3Bhbj0oMCwgNCksIG1hdGNoPScgZmYgJz4KICAgID4+PiByZS5tYXRjaCgiXFxXKC4pXFwxXFxXIiwgIiBmZiAiKQotICAgPF9zcmUuU1JFX01hdGNoIG9iamVjdCBhdCAuLi4+CisgICA8X3NyZS5TUkVfTWF0Y2ggb2JqZWN0OyBzcGFuPSgwLCA0KSwgbWF0Y2g9JyBmZiAnPgogCiBXaGVuIG9uZSB3YW50cyB0byBtYXRjaCBhIGxpdGVyYWwgYmFja3NsYXNoLCBpdCBtdXN0IGJlIGVzY2FwZWQgaW4gdGhlIHJlZ3VsYXIKIGV4cHJlc3Npb24uICBXaXRoIHJhdyBzdHJpbmcgbm90YXRpb24sIHRoaXMgbWVhbnMgYGByIlxcImBgLiAgV2l0aG91dCByYXcgc3RyaW5nCkBAIC0xMjg0LDkgKzEzMTgsOSBAQAogZnVuY3Rpb25hbGx5IGlkZW50aWNhbDoKIAogICAgPj4+IHJlLm1hdGNoKHIiXFwiLCByIlxcIikKLSAgIDxfc3JlLlNSRV9NYXRjaCBvYmplY3QgYXQgLi4uPgorICAgPF9zcmUuU1JFX01hdGNoIG9iamVjdDsgc3Bhbj0oMCwgMSksIG1hdGNoPSdcXCc+CiAgICA+Pj4gcmUubWF0Y2goIlxcXFwiLCByIlxcIikKLSAgIDxfc3JlLlNSRV9NYXRjaCBvYmplY3QgYXQgLi4uPgorICAgPF9zcmUuU1JFX01hdGNoIG9iamVjdDsgc3Bhbj0oMCwgMSksIG1hdGNoPSdcXCc+CiAKIAogV3JpdGluZyBhIFRva2VuaXplcgpAQCAtMTMwNSwzNiArMTMzOSwzNiBAQAogCiAgICAgVG9rZW4gPSBjb2xsZWN0aW9ucy5uYW1lZHR1cGxlKCdUb2tlbicsIFsndHlwJywgJ3ZhbHVlJywgJ2xpbmUnLCAnY29sdW1uJ10pCiAKLSAgICBkZWYgdG9rZW5pemUocyk6CisgICAgZGVmIHRva2VuaXplKGNvZGUpOgogICAgICAgICBrZXl3b3JkcyA9IHsnSUYnLCAnVEhFTicsICdFTkRJRicsICdGT1InLCAnTkVYVCcsICdHT1NVQicsICdSRVRVUk4nfQogICAgICAgICB0b2tlbl9zcGVjaWZpY2F0aW9uID0gWwogICAgICAgICAgICAgKCdOVU1CRVInLCAgcidcZCsoXC5cZCopPycpLCAjIEludGVnZXIgb3IgZGVjaW1hbCBudW1iZXIKICAgICAgICAgICAgICgnQVNTSUdOJywgIHInOj0nKSwgICAgICAgICAgIyBBc3NpZ25tZW50IG9wZXJhdG9yCiAgICAgICAgICAgICAoJ0VORCcsICAgICByJzsnKSwgICAgICAgICAgICMgU3RhdGVtZW50IHRlcm1pbmF0b3IKICAgICAgICAgICAgICgnSUQnLCAgICAgIHInW0EtWmEtel0rJyksICAgIyBJZGVudGlmaWVycwotICAgICAgICAgICAgKCdPUCcsICAgICAgcidbKypcL1wtXScpLCAgICAjIEFyaXRobWV0aWMgb3BlcmF0b3JzCisgICAgICAgICAgICAoJ09QJywgICAgICByJ1srXC0qL10nKSwgICAgICMgQXJpdGhtZXRpYyBvcGVyYXRvcnMKICAgICAgICAgICAgICgnTkVXTElORScsIHInXG4nKSwgICAgICAgICAgIyBMaW5lIGVuZGluZ3MKLSAgICAgICAgICAgICgnU0tJUCcsICAgIHInWyBcdF0nKSwgICAgICAgIyBTa2lwIG92ZXIgc3BhY2VzIGFuZCB0YWJzCisgICAgICAgICAgICAoJ1NLSVAnLCAgICByJ1sgXHRdKycpLCAgICAgICMgU2tpcCBvdmVyIHNwYWNlcyBhbmQgdGFicworICAgICAgICAgICAgKCdNSVNNQVRDSCcscicuJyksICAgICAgICAgICAjIEFueSBvdGhlciBjaGFyYWN0ZXIKICAgICAgICAgXQogICAgICAgICB0b2tfcmVnZXggPSAnfCcuam9pbignKD9QPCVzPiVzKScgJSBwYWlyIGZvciBwYWlyIGluIHRva2VuX3NwZWNpZmljYXRpb24pCi0gICAgICAgIGdldF90b2tlbiA9IHJlLmNvbXBpbGUodG9rX3JlZ2V4KS5tYXRjaAotICAgICAgICBsaW5lID0gMQotICAgICAgICBwb3MgPSBsaW5lX3N0YXJ0ID0gMAotICAgICAgICBtbyA9IGdldF90b2tlbihzKQotICAgICAgICB3aGlsZSBtbyBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHR5cCA9IG1vLmxhc3Rncm91cAotICAgICAgICAgICAgaWYgdHlwID09ICdORVdMSU5FJzoKLSAgICAgICAgICAgICAgICBsaW5lX3N0YXJ0ID0gcG9zCi0gICAgICAgICAgICAgICAgbGluZSArPSAxCi0gICAgICAgICAgICBlbGlmIHR5cCAhPSAnU0tJUCc6Ci0gICAgICAgICAgICAgICAgdmFsID0gbW8uZ3JvdXAodHlwKQotICAgICAgICAgICAgICAgIGlmIHR5cCA9PSAnSUQnIGFuZCB2YWwgaW4ga2V5d29yZHM6Ci0gICAgICAgICAgICAgICAgICAgIHR5cCA9IHZhbAotICAgICAgICAgICAgICAgIHlpZWxkIFRva2VuKHR5cCwgdmFsLCBsaW5lLCBtby5zdGFydCgpLWxpbmVfc3RhcnQpCi0gICAgICAgICAgICBwb3MgPSBtby5lbmQoKQotICAgICAgICAgICAgbW8gPSBnZXRfdG9rZW4ocywgcG9zKQotICAgICAgICBpZiBwb3MgIT0gbGVuKHMpOgotICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdVbmV4cGVjdGVkIGNoYXJhY3RlciAlciBvbiBsaW5lICVkJyAlKHNbcG9zXSwgbGluZSkpCisgICAgICAgIGxpbmVfbnVtID0gMQorICAgICAgICBsaW5lX3N0YXJ0ID0gMAorICAgICAgICBmb3IgbW8gaW4gcmUuZmluZGl0ZXIodG9rX3JlZ2V4LCBjb2RlKToKKyAgICAgICAgICAgIGtpbmQgPSBtby5sYXN0Z3JvdXAKKyAgICAgICAgICAgIHZhbHVlID0gbW8uZ3JvdXAoa2luZCkKKyAgICAgICAgICAgIGlmIGtpbmQgPT0gJ05FV0xJTkUnOgorICAgICAgICAgICAgICAgIGxpbmVfc3RhcnQgPSBtby5lbmQoKQorICAgICAgICAgICAgICAgIGxpbmVfbnVtICs9IDEKKyAgICAgICAgICAgIGVsaWYga2luZCA9PSAnU0tJUCc6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxpZiBraW5kID09ICdNSVNNQVRDSCc6CisgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCclciB1bmV4cGVjdGVkIG9uIGxpbmUgJWQnICUgKHZhbHVlLCBsaW5lX251bSkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIGtpbmQgPT0gJ0lEJyBhbmQgdmFsdWUgaW4ga2V5d29yZHM6CisgICAgICAgICAgICAgICAgICAgIGtpbmQgPSB2YWx1ZQorICAgICAgICAgICAgICAgIGNvbHVtbiA9IG1vLnN0YXJ0KCkgLSBsaW5lX3N0YXJ0CisgICAgICAgICAgICAgICAgeWllbGQgVG9rZW4oa2luZCwgdmFsdWUsIGxpbmVfbnVtLCBjb2x1bW4pCiAKICAgICBzdGF0ZW1lbnRzID0gJycnCiAgICAgICAgIElGIHF1YW50aXR5IFRIRU4KQEAgLTEzNDgsMjIgKzEzODIsMjIgQEAKIAogVGhlIHRva2VuaXplciBwcm9kdWNlcyB0aGUgZm9sbG93aW5nIG91dHB1dDo6CiAKLSAgICBUb2tlbih0eXA9J0lGJywgdmFsdWU9J0lGJywgbGluZT0yLCBjb2x1bW49NSkKLSAgICBUb2tlbih0eXA9J0lEJywgdmFsdWU9J3F1YW50aXR5JywgbGluZT0yLCBjb2x1bW49OCkKLSAgICBUb2tlbih0eXA9J1RIRU4nLCB2YWx1ZT0nVEhFTicsIGxpbmU9MiwgY29sdW1uPTE3KQotICAgIFRva2VuKHR5cD0nSUQnLCB2YWx1ZT0ndG90YWwnLCBsaW5lPTMsIGNvbHVtbj05KQotICAgIFRva2VuKHR5cD0nQVNTSUdOJywgdmFsdWU9Jzo9JywgbGluZT0zLCBjb2x1bW49MTUpCi0gICAgVG9rZW4odHlwPSdJRCcsIHZhbHVlPSd0b3RhbCcsIGxpbmU9MywgY29sdW1uPTE4KQotICAgIFRva2VuKHR5cD0nT1AnLCB2YWx1ZT0nKycsIGxpbmU9MywgY29sdW1uPTI0KQotICAgIFRva2VuKHR5cD0nSUQnLCB2YWx1ZT0ncHJpY2UnLCBsaW5lPTMsIGNvbHVtbj0yNikKLSAgICBUb2tlbih0eXA9J09QJywgdmFsdWU9JyonLCBsaW5lPTMsIGNvbHVtbj0zMikKLSAgICBUb2tlbih0eXA9J0lEJywgdmFsdWU9J3F1YW50aXR5JywgbGluZT0zLCBjb2x1bW49MzQpCi0gICAgVG9rZW4odHlwPSdFTkQnLCB2YWx1ZT0nOycsIGxpbmU9MywgY29sdW1uPTQyKQotICAgIFRva2VuKHR5cD0nSUQnLCB2YWx1ZT0ndGF4JywgbGluZT00LCBjb2x1bW49OSkKLSAgICBUb2tlbih0eXA9J0FTU0lHTicsIHZhbHVlPSc6PScsIGxpbmU9NCwgY29sdW1uPTEzKQotICAgIFRva2VuKHR5cD0nSUQnLCB2YWx1ZT0ncHJpY2UnLCBsaW5lPTQsIGNvbHVtbj0xNikKLSAgICBUb2tlbih0eXA9J09QJywgdmFsdWU9JyonLCBsaW5lPTQsIGNvbHVtbj0yMikKLSAgICBUb2tlbih0eXA9J05VTUJFUicsIHZhbHVlPScwLjA1JywgbGluZT00LCBjb2x1bW49MjQpCi0gICAgVG9rZW4odHlwPSdFTkQnLCB2YWx1ZT0nOycsIGxpbmU9NCwgY29sdW1uPTI4KQotICAgIFRva2VuKHR5cD0nRU5ESUYnLCB2YWx1ZT0nRU5ESUYnLCBsaW5lPTUsIGNvbHVtbj01KQotICAgIFRva2VuKHR5cD0nRU5EJywgdmFsdWU9JzsnLCBsaW5lPTUsIGNvbHVtbj0xMCkKKyAgICBUb2tlbih0eXA9J0lGJywgdmFsdWU9J0lGJywgbGluZT0yLCBjb2x1bW49NCkKKyAgICBUb2tlbih0eXA9J0lEJywgdmFsdWU9J3F1YW50aXR5JywgbGluZT0yLCBjb2x1bW49NykKKyAgICBUb2tlbih0eXA9J1RIRU4nLCB2YWx1ZT0nVEhFTicsIGxpbmU9MiwgY29sdW1uPTE2KQorICAgIFRva2VuKHR5cD0nSUQnLCB2YWx1ZT0ndG90YWwnLCBsaW5lPTMsIGNvbHVtbj04KQorICAgIFRva2VuKHR5cD0nQVNTSUdOJywgdmFsdWU9Jzo9JywgbGluZT0zLCBjb2x1bW49MTQpCisgICAgVG9rZW4odHlwPSdJRCcsIHZhbHVlPSd0b3RhbCcsIGxpbmU9MywgY29sdW1uPTE3KQorICAgIFRva2VuKHR5cD0nT1AnLCB2YWx1ZT0nKycsIGxpbmU9MywgY29sdW1uPTIzKQorICAgIFRva2VuKHR5cD0nSUQnLCB2YWx1ZT0ncHJpY2UnLCBsaW5lPTMsIGNvbHVtbj0yNSkKKyAgICBUb2tlbih0eXA9J09QJywgdmFsdWU9JyonLCBsaW5lPTMsIGNvbHVtbj0zMSkKKyAgICBUb2tlbih0eXA9J0lEJywgdmFsdWU9J3F1YW50aXR5JywgbGluZT0zLCBjb2x1bW49MzMpCisgICAgVG9rZW4odHlwPSdFTkQnLCB2YWx1ZT0nOycsIGxpbmU9MywgY29sdW1uPTQxKQorICAgIFRva2VuKHR5cD0nSUQnLCB2YWx1ZT0ndGF4JywgbGluZT00LCBjb2x1bW49OCkKKyAgICBUb2tlbih0eXA9J0FTU0lHTicsIHZhbHVlPSc6PScsIGxpbmU9NCwgY29sdW1uPTEyKQorICAgIFRva2VuKHR5cD0nSUQnLCB2YWx1ZT0ncHJpY2UnLCBsaW5lPTQsIGNvbHVtbj0xNSkKKyAgICBUb2tlbih0eXA9J09QJywgdmFsdWU9JyonLCBsaW5lPTQsIGNvbHVtbj0yMSkKKyAgICBUb2tlbih0eXA9J05VTUJFUicsIHZhbHVlPScwLjA1JywgbGluZT00LCBjb2x1bW49MjMpCisgICAgVG9rZW4odHlwPSdFTkQnLCB2YWx1ZT0nOycsIGxpbmU9NCwgY29sdW1uPTI3KQorICAgIFRva2VuKHR5cD0nRU5ESUYnLCB2YWx1ZT0nRU5ESUYnLCBsaW5lPTUsIGNvbHVtbj00KQorICAgIFRva2VuKHR5cD0nRU5EJywgdmFsdWU9JzsnLCBsaW5lPTUsIGNvbHVtbj05KQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvcmVhZGxpbmUucnN0IGIvRG9jL2xpYnJhcnkvcmVhZGxpbmUucnN0CmluZGV4IDExMzQ2MTkuLjY5MjMxMGIgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3JlYWRsaW5lLnJzdAorKysgYi9Eb2MvbGlicmFyeS9yZWFkbGluZS5yc3QKQEAgLTE5MCwyOCArMTkwLDMyIEBACiAKIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSBkZW1vbnN0cmF0ZXMgaG93IHRvIHVzZSB0aGUgOm1vZDpgcmVhZGxpbmVgIG1vZHVsZSdzCiBoaXN0b3J5IHJlYWRpbmcgYW5kIHdyaXRpbmcgZnVuY3Rpb25zIHRvIGF1dG9tYXRpY2FsbHkgbG9hZCBhbmQgc2F2ZSBhIGhpc3RvcnkKLWZpbGUgbmFtZWQgOmZpbGU6YC5weWhpc3RgIGZyb20gdGhlIHVzZXIncyBob21lIGRpcmVjdG9yeS4gIFRoZSBjb2RlIGJlbG93IHdvdWxkCi1ub3JtYWxseSBiZSBleGVjdXRlZCBhdXRvbWF0aWNhbGx5IGR1cmluZyBpbnRlcmFjdGl2ZSBzZXNzaW9ucyBmcm9tIHRoZSB1c2VyJ3MKLTplbnZ2YXI6YFBZVEhPTlNUQVJUVVBgIGZpbGUuIDo6CitmaWxlIG5hbWVkIDpmaWxlOmAucHl0aG9uX2hpc3RvcnlgIGZyb20gdGhlIHVzZXIncyBob21lIGRpcmVjdG9yeS4gIFRoZSBjb2RlCitiZWxvdyB3b3VsZCBub3JtYWxseSBiZSBleGVjdXRlZCBhdXRvbWF0aWNhbGx5IGR1cmluZyBpbnRlcmFjdGl2ZSBzZXNzaW9ucworZnJvbSB0aGUgdXNlcidzIDplbnZ2YXI6YFBZVEhPTlNUQVJUVVBgIGZpbGUuIDo6CiAKKyAgIGltcG9ydCBhdGV4aXQKICAgIGltcG9ydCBvcwogICAgaW1wb3J0IHJlYWRsaW5lCi0gICBoaXN0ZmlsZSA9IG9zLnBhdGguam9pbihvcy5wYXRoLmV4cGFuZHVzZXIoIn4iKSwgIi5weWhpc3QiKQorCisgICBoaXN0ZmlsZSA9IG9zLnBhdGguam9pbihvcy5wYXRoLmV4cGFuZHVzZXIoIn4iKSwgIi5weXRob25faGlzdG9yeSIpCiAgICB0cnk6CiAgICAgICAgcmVhZGxpbmUucmVhZF9oaXN0b3J5X2ZpbGUoaGlzdGZpbGUpCiAgICBleGNlcHQgRmlsZU5vdEZvdW5kRXJyb3I6CiAgICAgICAgcGFzcwotICAgaW1wb3J0IGF0ZXhpdAorCiAgICBhdGV4aXQucmVnaXN0ZXIocmVhZGxpbmUud3JpdGVfaGlzdG9yeV9maWxlLCBoaXN0ZmlsZSkKLSAgIGRlbCBvcywgaGlzdGZpbGUKKworVGhpcyBjb2RlIGlzIGFjdHVhbGx5IGF1dG9tYXRpY2FsbHkgcnVuIHdoZW4gUHl0aG9uIGlzIHJ1biBpbgorOnJlZjpgaW50ZXJhY3RpdmUgbW9kZSA8dHV0LWludGVyYWN0aXZlPmAgKHNlZSA6cmVmOmBybGNvbXBsZXRlci1jb25maWdgKS4KIAogVGhlIGZvbGxvd2luZyBleGFtcGxlIGV4dGVuZHMgdGhlIDpjbGFzczpgY29kZS5JbnRlcmFjdGl2ZUNvbnNvbGVgIGNsYXNzIHRvCiBzdXBwb3J0IGhpc3Rvcnkgc2F2ZS9yZXN0b3JlLiA6OgogCi0gICBpbXBvcnQgY29kZQotICAgaW1wb3J0IHJlYWRsaW5lCiAgICBpbXBvcnQgYXRleGl0CisgICBpbXBvcnQgY29kZQogICAgaW1wb3J0IG9zCisgICBpbXBvcnQgcmVhZGxpbmUKIAogICAgY2xhc3MgSGlzdG9yeUNvbnNvbGUoY29kZS5JbnRlcmFjdGl2ZUNvbnNvbGUpOgogICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb2NhbHM9Tm9uZSwgZmlsZW5hbWU9Ijxjb25zb2xlPiIsCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9yZXBybGliLnJzdCBiL0RvYy9saWJyYXJ5L3JlcHJsaWIucnN0CmluZGV4IDI0YThlNTIuLmVlOWExMGQgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3JlcHJsaWIucnN0CisrKyBiL0RvYy9saWJyYXJ5L3JlcHJsaWIucnN0CkBAIC00OSw4ICs0OSw4IEBACiAKICAgICAgICAgPj4+IGNsYXNzIE15TGlzdChsaXN0KToKICAgICAgICAgLi4uICAgICBAcmVjdXJzaXZlX3JlcHIoKQotICAgICAgICAuLi4gICAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAgIC4uLiAgICAgICAgICByZXR1cm4gJzwnICsgJ3wnLmpvaW4obWFwKHJlcHIsIHNlbGYpKSArICc+JworICAgICAgICAuLi4gICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgLi4uICAgICAgICAgcmV0dXJuICc8JyArICd8Jy5qb2luKG1hcChyZXByLCBzZWxmKSkgKyAnPicKICAgICAgICAgLi4uCiAgICAgICAgID4+PiBtID0gTXlMaXN0KCdhYmMnKQogICAgICAgICA+Pj4gbS5hcHBlbmQobSkKQEAgLTEyOSw5ICsxMjksOSBAQAogCiAgICBGb3JtYXR0aW5nIG1ldGhvZHMgZm9yIHNwZWNpZmljIHR5cGVzIGFyZSBpbXBsZW1lbnRlZCBhcyBtZXRob2RzIHdpdGggYSBuYW1lCiAgICBiYXNlZCBvbiB0aGUgdHlwZSBuYW1lLiAgSW4gdGhlIG1ldGhvZCBuYW1lLCAqKlRZUEUqKiBpcyByZXBsYWNlZCBieQotICAgYGBzdHJpbmcuam9pbihzdHJpbmcuc3BsaXQodHlwZShvYmopLl9fbmFtZV9fLCAnXycpKWBgLiBEaXNwYXRjaCB0byB0aGVzZQotICAgbWV0aG9kcyBpcyBoYW5kbGVkIGJ5IDptZXRoOmByZXByMWAuIFR5cGUtc3BlY2lmaWMgbWV0aG9kcyB3aGljaCBuZWVkIHRvCi0gICByZWN1cnNpdmVseSBmb3JtYXQgYSB2YWx1ZSBzaG91bGQgY2FsbCBgYHNlbGYucmVwcjEoc3Vib2JqLCBsZXZlbCAtIDEpYGAuCisgICBgYCdfJy5qb2luKHR5cGUob2JqKS5fX25hbWVfXy5zcGxpdCgpKWBgLiBEaXNwYXRjaCB0byB0aGVzZSBtZXRob2RzIGlzCisgICBoYW5kbGVkIGJ5IDptZXRoOmByZXByMWAuIFR5cGUtc3BlY2lmaWMgbWV0aG9kcyB3aGljaCBuZWVkIHRvIHJlY3Vyc2l2ZWx5CisgICBmb3JtYXQgYSB2YWx1ZSBzaG91bGQgY2FsbCBgYHNlbGYucmVwcjEoc3Vib2JqLCBsZXZlbCAtIDEpYGAuCiAKIAogLi4gX3N1YmNsYXNzaW5nLXJlcHJzOgpAQCAtMTQ4LDEyICsxNDgsMTEgQEAKICAgIGltcG9ydCBzeXMKIAogICAgY2xhc3MgTXlSZXByKHJlcHJsaWIuUmVwcik6Ci0gICAgICAgZGVmIHJlcHJfZmlsZShzZWxmLCBvYmosIGxldmVsKToKLSAgICAgICAgICAgaWYgb2JqLm5hbWUgaW4gWyc8c3RkaW4+JywgJzxzdGRvdXQ+JywgJzxzdGRlcnI+J106CisKKyAgICAgICBkZWYgcmVwcl9UZXh0SU9XcmFwcGVyKHNlbGYsIG9iaiwgbGV2ZWwpOgorICAgICAgICAgICBpZiBvYmoubmFtZSBpbiB7JzxzdGRpbj4nLCAnPHN0ZG91dD4nLCAnPHN0ZGVycj4nfToKICAgICAgICAgICAgICAgIHJldHVybiBvYmoubmFtZQotICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgcmV0dXJuIHJlcHIob2JqKQorICAgICAgICAgICByZXR1cm4gcmVwcihvYmopCiAKICAgIGFSZXByID0gTXlSZXByKCkKICAgIHByaW50KGFSZXByLnJlcHIoc3lzLnN0ZGluKSkgICAgICAgICAjIHByaW50cyAnPHN0ZGluPicKLQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvcmVzb3VyY2UucnN0IGIvRG9jL2xpYnJhcnkvcmVzb3VyY2UucnN0CmluZGV4IGVkODU4NTAuLmE3YjIyOWUgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3Jlc291cmNlLnJzdAorKysgYi9Eb2MvbGlicmFyeS9yZXNvdXJjZS5yc3QKQEAgLTQ1LDcgKzQ1LDcgQEAKIAogLi4gZGF0YTo6IFJMSU1fSU5GSU5JVFkKIAotICAgQ29uc3RhbnQgdXNlZCB0byByZXByZXNlbnQgdGhlIHRoZSBsaW1pdCBmb3IgYW4gdW5saW1pdGVkIHJlc291cmNlLgorICAgQ29uc3RhbnQgdXNlZCB0byByZXByZXNlbnQgdGhlIGxpbWl0IGZvciBhbiB1bmxpbWl0ZWQgcmVzb3VyY2UuCiAKIAogLi4gZnVuY3Rpb246OiBnZXRybGltaXQocmVzb3VyY2UpCkBAIC03NCw2ICs3NCwyNyBAQAogICAgYGBzZXRybGltaXRgYCBtYXkgYWxzbyByYWlzZSA6ZXhjOmBlcnJvcmAgaWYgdGhlIHVuZGVybHlpbmcgc3lzdGVtIGNhbGwKICAgIGZhaWxzLgogCisuLiBmdW5jdGlvbjo6IHBybGltaXQocGlkLCByZXNvdXJjZVssIGxpbWl0c10pCisKKyAgIENvbWJpbmVzIDpmdW5jOmBzZXRybGltaXRgIGFuZCA6ZnVuYzpgZ2V0cmxpbWl0YCBpbiBvbmUgZnVuY3Rpb24gYW5kCisgICBzdXBwb3J0cyB0byBnZXQgYW5kIHNldCB0aGUgcmVzb3VyY2VzIGxpbWl0cyBvZiBhbiBhcmJpdHJhcnkgcHJvY2Vzcy4gSWYKKyAgICpwaWQqIGlzIDAsIHRoZW4gdGhlIGNhbGwgYXBwbGllcyB0byB0aGUgY3VycmVudCBwcm9jZXNzLiAqcmVzb3VyY2UqIGFuZAorICAgKmxpbWl0cyogaGF2ZSB0aGUgc2FtZSBtZWFuaW5nIGFzIGluIDpmdW5jOmBzZXRybGltaXRgLCBleGNlcHQgdGhhdAorICAgKmxpbWl0cyogaXMgb3B0aW9uYWwuCisKKyAgIFdoZW4gKmxpbWl0cyogaXMgbm90IGdpdmVuIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSAqcmVzb3VyY2UqIGxpbWl0IG9mIHRoZQorICAgcHJvY2VzcyAqcGlkKi4gV2hlbiAqbGltaXRzKiBpcyBnaXZlbiB0aGUgKnJlc291cmNlKiBsaW1pdCBvZiB0aGUgcHJvY2VzcyBpcworICAgc2V0IGFuZCB0aGUgZm9ybWVyIHJlc291cmNlIGxpbWl0IGlzIHJldHVybmVkLgorCisgICBSYWlzZXMgOmV4YzpgUHJvY2Vzc0xvb2t1cEVycm9yYCB3aGVuICpwaWQqIGNhbid0IGJlIGZvdW5kIGFuZAorICAgOmV4YzpgUGVybWlzc2lvbkVycm9yYCB3aGVuIHRoZSB1c2VyIGRvZXNuJ3QgaGF2ZSBgYENBUF9TWVNfUkVTT1VSQ0VgYCBmb3IKKyAgIHRoZSBwcm9jZXNzLgorCisgICBBdmFpbGFiaWxpdHk6IExpbnV4IDIuNi4zNiBvciBsYXRlciB3aXRoIGdsaWJjIDIuMTMgb3IgbGF0ZXIKKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogVGhlc2Ugc3ltYm9scyBkZWZpbmUgcmVzb3VyY2VzIHdob3NlIGNvbnN1bXB0aW9uIGNhbiBiZSBjb250cm9sbGVkIHVzaW5nIHRoZQogOmZ1bmM6YHNldHJsaW1pdGAgYW5kIDpmdW5jOmBnZXRybGltaXRgIGZ1bmN0aW9ucyBkZXNjcmliZWQgYmVsb3cuIFRoZSB2YWx1ZXMgb2YKIHRoZXNlIHN5bWJvbHMgYXJlIGV4YWN0bHkgdGhlIGNvbnN0YW50cyB1c2VkIGJ5IEMgcHJvZ3JhbXMuCkBAIC0xNTEsNiArMTcyLDgwIEBACiAgICBUaGUgbWF4aW11bSBhcmVhIChpbiBieXRlcykgb2YgYWRkcmVzcyBzcGFjZSB3aGljaCBtYXkgYmUgdGFrZW4gYnkgdGhlIHByb2Nlc3MuCiAKIAorLi4gZGF0YTo6IFJMSU1JVF9NU0dRVUVVRQorCisgICBUaGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgY2FuIGJlIGFsbG9jYXRlZCBmb3IgUE9TSVggbWVzc2FnZSBxdWV1ZXMuCisKKyAgIEF2YWlsYWJpbGl0eTogTGludXggMi42Ljggb3IgbGF0ZXIuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKKy4uIGRhdGE6OiBSTElNSVRfTklDRQorCisgICBUaGUgY2VpbGluZyBmb3IgdGhlIHByb2Nlc3MncyBuaWNlIGxldmVsIChjYWxjdWxhdGVkIGFzIDIwIC0gcmxpbV9jdXIpLgorCisgICBBdmFpbGFiaWxpdHk6IExpbnV4IDIuNi4xMiBvciBsYXRlci4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKworLi4gZGF0YTo6IFJMSU1JVF9SVFBSSU8KKworICAgVGhlIGNlaWxpbmcgb2YgdGhlIHJlYWwtdGltZSBwcmlvcml0eS4KKworICAgQXZhaWxhYmlsaXR5OiBMaW51eCAyLjYuMTIgb3IgbGF0ZXIuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKKy4uIGRhdGE6OiBSTElNSVRfUlRUSU1FCisKKyAgIFRoZSB0aW1lIGxpbWl0IChpbiBtaWNyb3NlY29uZHMpIG9uIENQVSB0aW1lIHRoYXQgYSBwcm9jZXNzIGNhbiBzcGVuZAorICAgdW5kZXIgcmVhbC10aW1lIHNjaGVkdWxpbmcgd2l0aG91dCBtYWtpbmcgYSBibG9ja2luZyBzeXNjYWxsLgorCisgICBBdmFpbGFiaWxpdHk6IExpbnV4IDIuNi4yNSBvciBsYXRlci4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKworLi4gZGF0YTo6IFJMSU1JVF9TSUdQRU5ESU5HCisKKyAgIFRoZSBudW1iZXIgb2Ygc2lnbmFscyB3aGljaCB0aGUgcHJvY2VzcyBtYXkgcXVldWUuCisKKyAgIEF2YWlsYWJpbGl0eTogTGludXggMi42Ljggb3IgbGF0ZXIuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisuLiBkYXRhOjogUkxJTUlUX1NCU0laRQorCisgICBUaGUgbWF4aW11bSBzaXplIChpbiBieXRlcykgb2Ygc29ja2V0IGJ1ZmZlciB1c2FnZSBmb3IgdGhpcyB1c2VyLgorICAgVGhpcyBsaW1pdHMgdGhlIGFtb3VudCBvZiBuZXR3b3JrIG1lbW9yeSwgYW5kIGhlbmNlIHRoZSBhbW91bnQgb2YgbWJ1ZnMsCisgICB0aGF0IHRoaXMgdXNlciBtYXkgaG9sZCBhdCBhbnkgdGltZS4KKworICAgQXZhaWxhYmlsaXR5OiBGcmVlQlNEIDkgb3IgbGF0ZXIuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisuLiBkYXRhOjogUkxJTUlUX1NXQVAKKworICAgVGhlIG1heGltdW0gc2l6ZSAoaW4gYnl0ZXMpIG9mIHRoZSBzd2FwIHNwYWNlIHRoYXQgbWF5IGJlIHJlc2VydmVkIG9yCisgICB1c2VkIGJ5IGFsbCBvZiB0aGlzIHVzZXIgaWQncyBwcm9jZXNzZXMuCisgICBUaGlzIGxpbWl0IGlzIGVuZm9yY2VkIG9ubHkgaWYgYml0IDEgb2YgdGhlIHZtLm92ZXJjb21taXQgc3lzY3RsIGlzIHNldC4KKyAgIFBsZWFzZSBzZWUgOm1hbnBhZ2U6YHR1bmluZyg3KWAgZm9yIGEgY29tcGxldGUgZGVzY3JpcHRpb24gb2YgdGhpcyBzeXNjdGwuCisKKyAgIEF2YWlsYWJpbGl0eTogRnJlZUJTRCA5IG9yIGxhdGVyLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworLi4gZGF0YTo6IFJMSU1JVF9OUFRTCisKKyAgIFRoZSBtYXhpbXVtIG51bWJlciBvZiBwc2V1ZG8tdGVybWluYWxzIGNyZWF0ZWQgYnkgdGhpcyB1c2VyIGlkLgorCisgICBBdmFpbGFiaWxpdHk6IEZyZWVCU0QgOSBvciBsYXRlci4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIFJlc291cmNlIFVzYWdlCiAtLS0tLS0tLS0tLS0tLQogCkBAIC0yMjEsMTAgKzMxNiw3IEBACiAuLiBmdW5jdGlvbjo6IGdldHBhZ2VzaXplKCkKIAogICAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIGEgc3lzdGVtIHBhZ2UuIChUaGlzIG5lZWQgbm90IGJlIHRoZSBzYW1lIGFzIHRoZQotICAgaGFyZHdhcmUgcGFnZSBzaXplLikgVGhpcyBmdW5jdGlvbiBpcyB1c2VmdWwgZm9yIGRldGVybWluaW5nIHRoZSBudW1iZXIgb2YgYnl0ZXMKLSAgIG9mIG1lbW9yeSBhIHByb2Nlc3MgaXMgdXNpbmcuIFRoZSB0aGlyZCBlbGVtZW50IG9mIHRoZSB0dXBsZSByZXR1cm5lZCBieQotICAgOmZ1bmM6YGdldHJ1c2FnZWAgZGVzY3JpYmVzIG1lbW9yeSB1c2FnZSBpbiBwYWdlczsgbXVsdGlwbHlpbmcgYnkgcGFnZSBzaXplCi0gICBwcm9kdWNlcyBudW1iZXIgb2YgYnl0ZXMuCisgICBoYXJkd2FyZSBwYWdlIHNpemUuKQogCiBUaGUgZm9sbG93aW5nIDpjb25zdDpgUlVTQUdFX1wqYCBzeW1ib2xzIGFyZSBwYXNzZWQgdG8gdGhlIDpmdW5jOmBnZXRydXNhZ2VgCiBmdW5jdGlvbiB0byBzcGVjaWZ5IHdoaWNoIHByb2Nlc3NlcyBpbmZvcm1hdGlvbiBzaG91bGQgYmUgcHJvdmlkZWQgZm9yLgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvcmxjb21wbGV0ZXIucnN0IGIvRG9jL2xpYnJhcnkvcmxjb21wbGV0ZXIucnN0CmluZGV4IDYzMzA4OGQuLjllZDAxYzcgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3JsY29tcGxldGVyLnJzdAorKysgYi9Eb2MvbGlicmFyeS9ybGNvbXBsZXRlci5yc3QKQEAgLTI3LDE4ICsyNywxMCBAQAogICAgcmVhZGxpbmUuX19uYW1lX18gICAgICAgICByZWFkbGluZS5wYXJzZV9hbmRfYmluZCgKICAgID4+PiByZWFkbGluZS4KIAotVGhlIDptb2Q6YHJsY29tcGxldGVyYCBtb2R1bGUgaXMgZGVzaWduZWQgZm9yIHVzZSB3aXRoIFB5dGhvbidzIGludGVyYWN0aXZlCi1tb2RlLiAgQSB1c2VyIGNhbiBhZGQgdGhlIGZvbGxvd2luZyBsaW5lcyB0byBoaXMgb3IgaGVyIGluaXRpYWxpemF0aW9uIGZpbGUKLShpZGVudGlmaWVkIGJ5IHRoZSA6ZW52dmFyOmBQWVRIT05TVEFSVFVQYCBlbnZpcm9ubWVudCB2YXJpYWJsZSkgdG8gZ2V0Ci1hdXRvbWF0aWMgOmtiZDpgVGFiYCBjb21wbGV0aW9uOjoKLQotICAgdHJ5OgotICAgICAgIGltcG9ydCByZWFkbGluZQotICAgZXhjZXB0IEltcG9ydEVycm9yOgotICAgICAgIHByaW50KCJNb2R1bGUgcmVhZGxpbmUgbm90IGF2YWlsYWJsZS4iKQotICAgZWxzZToKLSAgICAgICBpbXBvcnQgcmxjb21wbGV0ZXIKLSAgICAgICByZWFkbGluZS5wYXJzZV9hbmRfYmluZCgidGFiOiBjb21wbGV0ZSIpCitUaGUgOm1vZDpgcmxjb21wbGV0ZXJgIG1vZHVsZSBpcyBkZXNpZ25lZCBmb3IgdXNlIHdpdGggUHl0aG9uJ3MKKzpyZWY6YGludGVyYWN0aXZlIG1vZGUgPHR1dC1pbnRlcmFjdGl2ZT5gLiAgVW5sZXNzIFB5dGhvbiBpcyBydW4gd2l0aCB0aGUKKzpvcHRpb246YC1TYCBvcHRpb24sIHRoZSBtb2R1bGUgaXMgYXV0b21hdGljYWxseSBpbXBvcnRlZCBhbmQgY29uZmlndXJlZAorKHNlZSA6cmVmOmBybGNvbXBsZXRlci1jb25maWdgKS4KIAogT24gcGxhdGZvcm1zIHdpdGhvdXQgOm1vZDpgcmVhZGxpbmVgLCB0aGUgOmNsYXNzOmBDb21wbGV0ZXJgIGNsYXNzIGRlZmluZWQgYnkKIHRoaXMgbW9kdWxlIGNhbiBzdGlsbCBiZSB1c2VkIGZvciBjdXN0b20gcHVycG9zZXMuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9ydW5weS5yc3QgYi9Eb2MvbGlicmFyeS9ydW5weS5yc3QKaW5kZXggNjkxOWJjMC4uNzI5M2YxNSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvcnVucHkucnN0CisrKyBiL0RvYy9saWJyYXJ5L3J1bnB5LnJzdApAQCAtMjgsNiArMjgsOSBAQAogCiAuLiBmdW5jdGlvbjo6IHJ1bl9tb2R1bGUobW9kX25hbWUsIGluaXRfZ2xvYmFscz1Ob25lLCBydW5fbmFtZT1Ob25lLCBhbHRlcl9zeXM9RmFsc2UpCiAKKyAgIC4uIGluZGV4OjoKKyAgICAgIG1vZHVsZTogX19tYWluX18KKwogICAgRXhlY3V0ZSB0aGUgY29kZSBvZiB0aGUgc3BlY2lmaWVkIG1vZHVsZSBhbmQgcmV0dXJuIHRoZSByZXN1bHRpbmcgbW9kdWxlCiAgICBnbG9iYWxzIGRpY3Rpb25hcnkuIFRoZSBtb2R1bGUncyBjb2RlIGlzIGZpcnN0IGxvY2F0ZWQgdXNpbmcgdGhlIHN0YW5kYXJkCiAgICBpbXBvcnQgbWVjaGFuaXNtIChyZWZlciB0byA6cGVwOmAzMDJgIGZvciBkZXRhaWxzKSBhbmQgdGhlbiBleGVjdXRlZCBpbiBhCkBAIC00NCwyOCArNDcsMjIgQEAKICAgIGJlbG93IGFyZSBkZWZpbmVkIGluIHRoZSBzdXBwbGllZCBkaWN0aW9uYXJ5LCB0aG9zZSBkZWZpbml0aW9ucyBhcmUKICAgIG92ZXJyaWRkZW4gYnkgOmZ1bmM6YHJ1bl9tb2R1bGVgLgogCi0gICBUaGUgc3BlY2lhbCBnbG9iYWwgdmFyaWFibGVzIGBgX19uYW1lX19gYCwgYGBfX2ZpbGVfX2BgLCBgYF9fY2FjaGVkX19gYCwKLSAgIGBgX19sb2FkZXJfX2BgCi0gICBhbmQgYGBfX3BhY2thZ2VfX2BgIGFyZSBzZXQgaW4gdGhlIGdsb2JhbHMgZGljdGlvbmFyeSBiZWZvcmUgdGhlIG1vZHVsZQotICAgY29kZSBpcyBleGVjdXRlZCAoTm90ZSB0aGF0IHRoaXMgaXMgYSBtaW5pbWFsIHNldCBvZiB2YXJpYWJsZXMgLSBvdGhlcgotICAgdmFyaWFibGVzIG1heSBiZSBzZXQgaW1wbGljaXRseSBhcyBhbiBpbnRlcnByZXRlciBpbXBsZW1lbnRhdGlvbiBkZXRhaWwpLgorICAgVGhlIHNwZWNpYWwgZ2xvYmFsIHZhcmlhYmxlcyBgYF9fbmFtZV9fYGAsIGBgX19zcGVjX19gYCwgYGBfX2ZpbGVfX2BgLAorICAgYGBfX2NhY2hlZF9fYGAsIGBgX19sb2FkZXJfX2BgIGFuZCBgYF9fcGFja2FnZV9fYGAgYXJlIHNldCBpbiB0aGUgZ2xvYmFscworICAgZGljdGlvbmFyeSBiZWZvcmUgdGhlIG1vZHVsZSBjb2RlIGlzIGV4ZWN1dGVkIChOb3RlIHRoYXQgdGhpcyBpcyBhCisgICBtaW5pbWFsIHNldCBvZiB2YXJpYWJsZXMgLSBvdGhlciB2YXJpYWJsZXMgbWF5IGJlIHNldCBpbXBsaWNpdGx5IGFzIGFuCisgICBpbnRlcnByZXRlciBpbXBsZW1lbnRhdGlvbiBkZXRhaWwpLgogCiAgICBgYF9fbmFtZV9fYGAgaXMgc2V0IHRvICpydW5fbmFtZSogaWYgdGhpcyBvcHRpb25hbCBhcmd1bWVudCBpcyBub3QKICAgIDpjb25zdDpgTm9uZWAsIHRvIGBgbW9kX25hbWUgKyAnLl9fbWFpbl9fJ2BgIGlmIHRoZSBuYW1lZCBtb2R1bGUgaXMgYQogICAgcGFja2FnZSBhbmQgdG8gdGhlICptb2RfbmFtZSogYXJndW1lbnQgb3RoZXJ3aXNlLgogCi0gICBgYF9fZmlsZV9fYGAgaXMgc2V0IHRvIHRoZSBuYW1lIHByb3ZpZGVkIGJ5IHRoZSBtb2R1bGUgbG9hZGVyLiBJZiB0aGUKLSAgIGxvYWRlciBkb2VzIG5vdCBtYWtlIGZpbGVuYW1lIGluZm9ybWF0aW9uIGF2YWlsYWJsZSwgdGhpcyB2YXJpYWJsZSBpcyBzZXQKLSAgIHRvIDpjb25zdDpgTm9uZWAuCisgICBgYF9fc3BlY19fYGAgd2lsbCBiZSBzZXQgYXBwcm9wcmlhdGVseSBmb3IgdGhlICphY3R1YWxseSogaW1wb3J0ZWQKKyAgIG1vZHVsZSAodGhhdCBpcywgYGBfX3NwZWNfXy5uYW1lYGAgd2lsbCBhbHdheXMgYmUgKm1vZF9uYW1lKiBvcgorICAgYGBtb2RfbmFtZSArICcuX19tYWluX19gYCwgbmV2ZXIgKnJ1bl9uYW1lKikuCiAKLSAgIGBgX19jYWNoZWRfX2BgIHdpbGwgYmUgc2V0IHRvIGBgTm9uZWBgLgotCi0gICBgYF9fbG9hZGVyX19gYCBpcyBzZXQgdG8gdGhlIDpwZXA6YDMwMmAgbW9kdWxlIGxvYWRlciB1c2VkIHRvIHJldHJpZXZlIHRoZQotICAgY29kZSBmb3IgdGhlIG1vZHVsZSAoVGhpcyBsb2FkZXIgbWF5IGJlIGEgd3JhcHBlciBhcm91bmQgdGhlIHN0YW5kYXJkCi0gICBpbXBvcnQgbWVjaGFuaXNtKS4KLQotICAgYGBfX3BhY2thZ2VfX2BgIGlzIHNldCB0byAqbW9kX25hbWUqIGlmIHRoZSBuYW1lZCBtb2R1bGUgaXMgYSBwYWNrYWdlIGFuZAotICAgdG8gYGBtb2RfbmFtZS5ycGFydGl0aW9uKCcuJylbMF1gYCBvdGhlcndpc2UuCisgICBgYF9fZmlsZV9fYGAsIGBgX19jYWNoZWRfX2BgLCBgYF9fbG9hZGVyX19gYCBhbmQgYGBfX3BhY2thZ2VfX2BgIGFyZQorICAgOnJlZjpgc2V0IGFzIG5vcm1hbCA8aW1wb3J0LW1vZC1hdHRycz5gIGJhc2VkIG9uIHRoZSBtb2R1bGUgc3BlYy4KIAogICAgSWYgdGhlIGFyZ3VtZW50ICphbHRlcl9zeXMqIGlzIHN1cHBsaWVkIGFuZCBldmFsdWF0ZXMgdG8gOmNvbnN0OmBUcnVlYCwKICAgIHRoZW4gYGBzeXMuYXJndlswXWBgIGlzIHVwZGF0ZWQgd2l0aCB0aGUgdmFsdWUgb2YgYGBfX2ZpbGVfX2BgIGFuZApAQCAtNzgsMTYgKzc1LDI3IEBACiAgICBhcmd1bWVudHMuIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgdGhlIDptb2Q6YHN5c2AgbW9kdWxlIGJlIGxlZnQgYWxvbmUgd2hlbgogICAgaW52b2tpbmcgdGhpcyBmdW5jdGlvbiBmcm9tIHRocmVhZGVkIGNvZGUuCiAKKyAgIC4uIHNlZWFsc286OgorICAgICAgVGhlIDpvcHRpb246YC1tYCBvcHRpb24gb2ZmZXJpbmcgZXF1aXZhbGVudCBmdW5jdGlvbmFsaXR5IGZyb20gdGhlCisgICAgICBjb21tYW5kIGxpbmUuCiAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4xCiAgICAgICBBZGRlZCBhYmlsaXR5IHRvIGV4ZWN1dGUgcGFja2FnZXMgYnkgbG9va2luZyBmb3IgYSBgYF9fbWFpbl9fYGAgc3VibW9kdWxlLgogCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgotICAgICAgQWRkZWQgYGBfX2NhY2hlZF9fYGAgZ2xvYmFsIHZhcmlhYmxlIChzZWUgOlBFUDpgMzE0N2ApLgorICAgICAgQWRkZWQgYGBfX2NhY2hlZF9fYGAgZ2xvYmFsIHZhcmlhYmxlIChzZWUgOnBlcDpgMzE0N2ApLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVXBkYXRlZCB0byB0YWtlIGFkdmFudGFnZSBvZiB0aGUgbW9kdWxlIHNwZWMgZmVhdHVyZSBhZGRlZCBieQorICAgICAgOnBlcDpgNDUxYC4gVGhpcyBhbGxvd3MgYGBfX2NhY2hlZF9fYGAgdG8gYmUgc2V0IGNvcnJlY3RseSBmb3IgbW9kdWxlcworICAgICAgcnVuIHRoaXMgd2F5LCBhcyB3ZWxsIGFzIGVuc3VyaW5nIHRoZSByZWFsIG1vZHVsZSBuYW1lIGlzIGFsd2F5cworICAgICAgYWNjZXNzaWJsZSBhcyBgYF9fc3BlY19fLm5hbWVgYC4KIAogLi4gZnVuY3Rpb246OiBydW5fcGF0aChmaWxlX3BhdGgsIGluaXRfZ2xvYmFscz1Ob25lLCBydW5fbmFtZT1Ob25lKQogCisgICAuLiBpbmRleDo6CisgICAgICBtb2R1bGU6IF9fbWFpbl9fCisKICAgIEV4ZWN1dGUgdGhlIGNvZGUgYXQgdGhlIG5hbWVkIGZpbGVzeXN0ZW0gbG9jYXRpb24gYW5kIHJldHVybiB0aGUgcmVzdWx0aW5nCiAgICBtb2R1bGUgZ2xvYmFscyBkaWN0aW9uYXJ5LiBBcyB3aXRoIGEgc2NyaXB0IG5hbWUgc3VwcGxpZWQgdG8gdGhlIENQeXRob24KICAgIGNvbW1hbmQgbGluZSwgdGhlIHN1cHBsaWVkIHBhdGggbWF5IHJlZmVyIHRvIGEgUHl0aG9uIHNvdXJjZSBmaWxlLCBhCkBAIC0xMDgsMjMgKzExNiwyNSBAQAogICAgYmVsb3cgYXJlIGRlZmluZWQgaW4gdGhlIHN1cHBsaWVkIGRpY3Rpb25hcnksIHRob3NlIGRlZmluaXRpb25zIGFyZQogICAgb3ZlcnJpZGRlbiBieSA6ZnVuYzpgcnVuX3BhdGhgLgogCi0gICBUaGUgc3BlY2lhbCBnbG9iYWwgdmFyaWFibGVzIGBgX19uYW1lX19gYCwgYGBfX2ZpbGVfX2BgLCBgYF9fbG9hZGVyX19gYAotICAgYW5kIGBgX19wYWNrYWdlX19gYCBhcmUgc2V0IGluIHRoZSBnbG9iYWxzIGRpY3Rpb25hcnkgYmVmb3JlIHRoZSBtb2R1bGUKLSAgIGNvZGUgaXMgZXhlY3V0ZWQgKE5vdGUgdGhhdCB0aGlzIGlzIGEgbWluaW1hbCBzZXQgb2YgdmFyaWFibGVzIC0gb3RoZXIKLSAgIHZhcmlhYmxlcyBtYXkgYmUgc2V0IGltcGxpY2l0bHkgYXMgYW4gaW50ZXJwcmV0ZXIgaW1wbGVtZW50YXRpb24gZGV0YWlsKS4KKyAgIFRoZSBzcGVjaWFsIGdsb2JhbCB2YXJpYWJsZXMgYGBfX25hbWVfX2BgLCBgYF9fc3BlY19fYGAsIGBgX19maWxlX19gYCwKKyAgIGBgX19jYWNoZWRfX2BgLCBgYF9fbG9hZGVyX19gYCBhbmQgYGBfX3BhY2thZ2VfX2BgIGFyZSBzZXQgaW4gdGhlIGdsb2JhbHMKKyAgIGRpY3Rpb25hcnkgYmVmb3JlIHRoZSBtb2R1bGUgY29kZSBpcyBleGVjdXRlZCAoTm90ZSB0aGF0IHRoaXMgaXMgYQorICAgbWluaW1hbCBzZXQgb2YgdmFyaWFibGVzIC0gb3RoZXIgdmFyaWFibGVzIG1heSBiZSBzZXQgaW1wbGljaXRseSBhcyBhbgorICAgaW50ZXJwcmV0ZXIgaW1wbGVtZW50YXRpb24gZGV0YWlsKS4KIAogICAgYGBfX25hbWVfX2BgIGlzIHNldCB0byAqcnVuX25hbWUqIGlmIHRoaXMgb3B0aW9uYWwgYXJndW1lbnQgaXMgbm90CiAgICA6Y29uc3Q6YE5vbmVgIGFuZCB0byBgYCc8cnVuX3BhdGg+J2BgIG90aGVyd2lzZS4KIAotICAgYGBfX2ZpbGVfX2BgIGlzIHNldCB0byB0aGUgbmFtZSBwcm92aWRlZCBieSB0aGUgbW9kdWxlIGxvYWRlci4gSWYgdGhlCi0gICBsb2FkZXIgZG9lcyBub3QgbWFrZSBmaWxlbmFtZSBpbmZvcm1hdGlvbiBhdmFpbGFibGUsIHRoaXMgdmFyaWFibGUgaXMgc2V0Ci0gICB0byA6Y29uc3Q6YE5vbmVgLiBGb3IgYSBzaW1wbGUgc2NyaXB0LCB0aGlzIHdpbGwgYmUgc2V0IHRvIGBgZmlsZV9wYXRoYGAuCisgICBJZiB0aGUgc3VwcGxpZWQgcGF0aCBkaXJlY3RseSByZWZlcmVuY2VzIGEgc2NyaXB0IGZpbGUgKHdoZXRoZXIgYXMgc291cmNlCisgICBvciBhcyBwcmVjb21waWxlZCBieXRlIGNvZGUpLCB0aGVuIGBgX19maWxlX19gYCB3aWxsIGJlIHNldCB0byB0aGUKKyAgIHN1cHBsaWVkIHBhdGgsIGFuZCBgYF9fc3BlY19fYGAsIGBgX19jYWNoZWRfX2BgLCBgYF9fbG9hZGVyX19gYCBhbmQKKyAgIGBgX19wYWNrYWdlX19gYCB3aWxsIGFsbCBiZSBzZXQgdG8gOmNvbnN0OmBOb25lYC4KIAotICAgYGBfX2xvYWRlcl9fYGAgaXMgc2V0IHRvIHRoZSA6cGVwOmAzMDJgIG1vZHVsZSBsb2FkZXIgdXNlZCB0byByZXRyaWV2ZSB0aGUKLSAgIGNvZGUgZm9yIHRoZSBtb2R1bGUgKFRoaXMgbG9hZGVyIG1heSBiZSBhIHdyYXBwZXIgYXJvdW5kIHRoZSBzdGFuZGFyZAotICAgaW1wb3J0IG1lY2hhbmlzbSkuIEZvciBhIHNpbXBsZSBzY3JpcHQsIHRoaXMgd2lsbCBiZSBzZXQgdG8gOmNvbnN0OmBOb25lYC4KLQotICAgYGBfX3BhY2thZ2VfX2BgIGlzIHNldCB0byBgYF9fbmFtZV9fLnJwYXJ0aXRpb24oJy4nKVswXWBgLgorICAgSWYgdGhlIHN1cHBsaWVkIHBhdGggaXMgYSByZWZlcmVuY2UgdG8gYSB2YWxpZCBzeXMucGF0aCBlbnRyeSwgdGhlbgorICAgYGBfX3NwZWNfX2BgIHdpbGwgYmUgc2V0IGFwcHJvcHJpYXRlbHkgZm9yIHRoZSBpbXBvcnRlZCBgYF9fbWFpbl9fYGAKKyAgIG1vZHVsZSAodGhhdCBpcywgYGBfX3NwZWNfXy5uYW1lYGAgd2lsbCBhbHdheXMgYmUgYGBfX21haW5fX2BgKS4KKyAgIGBgX19maWxlX19gYCwgYGBfX2NhY2hlZF9fYGAsIGBgX19sb2FkZXJfX2BgIGFuZCBgYF9fcGFja2FnZV9fYGAgd2lsbCBiZQorICAgOnJlZjpgc2V0IGFzIG5vcm1hbCA8aW1wb3J0LW1vZC1hdHRycz5gIGJhc2VkIG9uIHRoZSBtb2R1bGUgc3BlYy4KIAogICAgQSBudW1iZXIgb2YgYWx0ZXJhdGlvbnMgYXJlIGFsc28gbWFkZSB0byB0aGUgOm1vZDpgc3lzYCBtb2R1bGUuIEZpcnN0bHksCiAgICBgYHN5cy5wYXRoYGAgbWF5IGJlIGFsdGVyZWQgYXMgZGVzY3JpYmVkIGFib3ZlLiBgYHN5cy5hcmd2WzBdYGAgaXMgdXBkYXRlZApAQCAtMTM5LDE2ICsxNDksMjkgQEAKICAgIGxpbWl0YXRpb25zIHN0aWxsIGFwcGx5LCB1c2Ugb2YgdGhpcyBmdW5jdGlvbiBpbiB0aHJlYWRlZCBjb2RlIHNob3VsZCBiZQogICAgZWl0aGVyIHNlcmlhbGlzZWQgd2l0aCB0aGUgaW1wb3J0IGxvY2sgb3IgZGVsZWdhdGVkIHRvIGEgc2VwYXJhdGUgcHJvY2Vzcy4KIAorICAgLi4gc2VlYWxzbzo6CisgICAgICA6cmVmOmB1c2luZy1vbi1pbnRlcmZhY2Utb3B0aW9uc2AgZm9yIGVxdWl2YWxlbnQgZnVuY3Rpb25hbGl0eSBvbiB0aGUKKyAgICAgIGNvbW1hbmQgbGluZSAoYGBweXRob24gcGF0aC90by9zY3JpcHRgYCkuCisKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVXBkYXRlZCB0byB0YWtlIGFkdmFudGFnZSBvZiB0aGUgbW9kdWxlIHNwZWMgZmVhdHVyZSBhZGRlZCBieQorICAgICAgOnBlcDpgNDUxYC4gVGhpcyBhbGxvd3MgYGBfX2NhY2hlZF9fYGAgdG8gYmUgc2V0IGNvcnJlY3RseSBpbiB0aGUKKyAgICAgIGNhc2Ugd2hlcmUgYGBfX21haW5fX2BgIGlzIGltcG9ydGVkIGZyb20gYSB2YWxpZCBzeXMucGF0aCBlbnRyeSByYXRoZXIKKyAgICAgIHRoYW4gYmVpbmcgZXhlY3V0ZWQgZGlyZWN0bHkuCisKIC4uIHNlZWFsc286OgogCi0gICA6cGVwOmAzMzhgIC0gRXhlY3V0aW5nIG1vZHVsZXMgYXMgc2NyaXB0cworICAgOnBlcDpgMzM4YCAtLSBFeGVjdXRpbmcgbW9kdWxlcyBhcyBzY3JpcHRzCiAgICAgICBQRVAgd3JpdHRlbiBhbmQgaW1wbGVtZW50ZWQgYnkgTmljayBDb2dobGFuLgogCi0gICA6cGVwOmAzNjZgIC0gTWFpbiBtb2R1bGUgZXhwbGljaXQgcmVsYXRpdmUgaW1wb3J0cworICAgOnBlcDpgMzY2YCAtLSBNYWluIG1vZHVsZSBleHBsaWNpdCByZWxhdGl2ZSBpbXBvcnRzCiAgICAgICBQRVAgd3JpdHRlbiBhbmQgaW1wbGVtZW50ZWQgYnkgTmljayBDb2dobGFuLgogCisgICA6cGVwOmA0NTFgIC0tIEEgTW9kdWxlU3BlYyBUeXBlIGZvciB0aGUgSW1wb3J0IFN5c3RlbQorICAgICAgUEVQIHdyaXR0ZW4gYW5kIGltcGxlbWVudGVkIGJ5IEVyaWMgU25vdworCiAgICA6cmVmOmB1c2luZy1vbi1nZW5lcmFsYCAtIENQeXRob24gY29tbWFuZCBsaW5lIGRldGFpbHMKIAogICAgVGhlIDpmdW5jOmBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZWAgZnVuY3Rpb24KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3NlbGVjdC5yc3QgYi9Eb2MvbGlicmFyeS9zZWxlY3QucnN0CmluZGV4IGIxZmQzYTguLjUzMzRhZjggMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3NlbGVjdC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvc2VsZWN0LnJzdApAQCAtMTQsNiArMTQsMTQgQEAKIEl0IGNhbm5vdCBiZSB1c2VkIG9uIHJlZ3VsYXIgZmlsZXMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYSBmaWxlIGhhcyBncm93biBzaW5jZQogaXQgd2FzIGxhc3QgcmVhZC4KIAorLi4gbm90ZTo6CisKKyAgIFRoZSA6bW9kOmBzZWxlY3RvcnNgIG1vZHVsZSBhbGxvd3MgaGlnaC1sZXZlbCBhbmQgZWZmaWNpZW50IEkvTworICAgbXVsdGlwbGV4aW5nLCBidWlsdCB1cG9uIHRoZSA6bW9kOmBzZWxlY3RgIG1vZHVsZSBwcmltaXRpdmVzLiBVc2VycyBhcmUKKyAgIGVuY291cmFnZWQgdG8gdXNlIHRoZSA6bW9kOmBzZWxlY3RvcnNgIG1vZHVsZSBpbnN0ZWFkLCB1bmxlc3MgdGhleSB3YW50CisgICBwcmVjaXNlIGNvbnRyb2wgb3ZlciB0aGUgT1MtbGV2ZWwgcHJpbWl0aXZlcyB1c2VkLgorCisKIFRoZSBtb2R1bGUgZGVmaW5lcyB0aGUgZm9sbG93aW5nOgogCiAKQEAgLTM3LDIxICs0NSwzNyBAQAogICAgaW5jcmVhc2VzIHRoaXMgdmFsdWUsIDpjOmZ1bmM6YGRldnBvbGxgIG1heSByZXR1cm4gYW4KICAgIGluY29tcGxldGUgbGlzdCBvZiBhY3RpdmUgZmlsZSBkZXNjcmlwdG9ycy4KIAorICAgVGhlIG5ldyBmaWxlIGRlc2NyaXB0b3IgaXMgOnJlZjpgbm9uLWluaGVyaXRhYmxlIDxmZF9pbmhlcml0YW5jZT5gLgorCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSBuZXcgZmlsZSBkZXNjcmlwdG9yIGlzIG5vdyBub24taW5oZXJpdGFibGUuCisKIC4uIGZ1bmN0aW9uOjogZXBvbGwoc2l6ZWhpbnQ9LTEsIGZsYWdzPTApCiAKICAgIChPbmx5IHN1cHBvcnRlZCBvbiBMaW51eCAyLjUuNDQgYW5kIG5ld2VyLikgUmV0dXJuIGFuIGVkZ2UgcG9sbGluZyBvYmplY3QsCiAgICB3aGljaCBjYW4gYmUgdXNlZCBhcyBFZGdlIG9yIExldmVsIFRyaWdnZXJlZCBpbnRlcmZhY2UgZm9yIEkvTwogICAgZXZlbnRzLiAqc2l6ZWhpbnQqIGlzIGRlcHJlY2F0ZWQgYW5kIGNvbXBsZXRlbHkgaWdub3JlZC4gKmZsYWdzKiBjYW4gYmUgc2V0CiAgICB0byA6Y29uc3Q6YEVQT0xMX0NMT0VYRUNgLCB3aGljaCBjYXVzZXMgdGhlIGVwb2xsIGRlc2NyaXB0b3IgdG8gYmUgY2xvc2VkCi0gICBhdXRvbWF0aWNhbGx5IHdoZW4gOmZ1bmM6YG9zLmV4ZWN2ZWAgaXMgY2FsbGVkLiBTZWUgc2VjdGlvbgotICAgOnJlZjpgZXBvbGwtb2JqZWN0c2AgYmVsb3cgZm9yIHRoZSBtZXRob2RzIHN1cHBvcnRlZCBieSBlcG9sbGluZyBvYmplY3RzLgorICAgYXV0b21hdGljYWxseSB3aGVuIDpmdW5jOmBvcy5leGVjdmVgIGlzIGNhbGxlZC4KIAorICAgU2VlIHRoZSA6cmVmOmBlcG9sbC1vYmplY3RzYCBzZWN0aW9uIGJlbG93IGZvciB0aGUgbWV0aG9kcyBzdXBwb3J0ZWQgYnkKKyAgIGVwb2xsaW5nIG9iamVjdHMuCisKKyAgIGBgZXBvbGxgYCBvYmplY3RzIHN1cHBvcnQgdGhlIGNvbnRleHQgbWFuYWdlbWVudCBwcm90b2NvbDogd2hlbiB1c2VkIGluIGEKKyAgIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQsIHRoZSBuZXcgZmlsZSBkZXNjcmlwdG9yIGlzIGF1dG9tYXRpY2FsbHkgY2xvc2VkCisgICBhdCB0aGUgZW5kIG9mIHRoZSBibG9jay4KKworICAgVGhlIG5ldyBmaWxlIGRlc2NyaXB0b3IgaXMgOnJlZjpgbm9uLWluaGVyaXRhYmxlIDxmZF9pbmhlcml0YW5jZT5gLgogCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMwogICAgICAgQWRkZWQgdGhlICpmbGFncyogcGFyYW1ldGVyLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgU3VwcG9ydCBmb3IgdGhlIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQgd2FzIGFkZGVkLgorICAgICAgVGhlIG5ldyBmaWxlIGRlc2NyaXB0b3IgaXMgbm93IG5vbi1pbmhlcml0YWJsZS4KKwogCiAuLiBmdW5jdGlvbjo6IHBvbGwoKQogCkBAIC02Niw2ICs5MCwxMSBAQAogICAgKE9ubHkgc3VwcG9ydGVkIG9uIEJTRC4pICBSZXR1cm5zIGEga2VybmVsIHF1ZXVlIG9iamVjdDsgc2VlIHNlY3Rpb24KICAgIDpyZWY6YGtxdWV1ZS1vYmplY3RzYCBiZWxvdyBmb3IgdGhlIG1ldGhvZHMgc3VwcG9ydGVkIGJ5IGtxdWV1ZSBvYmplY3RzLgogCisgICBUaGUgbmV3IGZpbGUgZGVzY3JpcHRvciBpcyA6cmVmOmBub24taW5oZXJpdGFibGUgPGZkX2luaGVyaXRhbmNlPmAuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgbmV3IGZpbGUgZGVzY3JpcHRvciBpcyBub3cgbm9uLWluaGVyaXRhYmxlLgorCiAKIC4uIGZ1bmN0aW9uOjoga2V2ZW50KGlkZW50LCBmaWx0ZXI9S1FfRklMVEVSX1JFQUQsIGZsYWdzPUtRX0VWX0FERCwgZmZsYWdzPTAsIGRhdGE9MCwgdWRhdGE9MCkKIApAQCAtMTMxLDEwICsxNjAsNyBAQAogLi4gX2RldnBvbGwtb2JqZWN0czoKIAogYGAvZGV2L3BvbGxgYCBQb2xsaW5nIE9iamVjdHMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAgaHR0cDovL2RldmVsb3BlcnMuc3VuLmNvbS9zb2xhcmlzL2FydGljbGVzL3VzaW5nX2RldnBvbGwuaHRtbAotICAgaHR0cDovL2RldmVsb3BlcnMuc3VuLmNvbS9zb2xhcmlzL2FydGljbGVzL3BvbGxpbmdfZWZmaWNpZW50Lmh0bWwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFNvbGFyaXMgYW5kIGRlcml2YXRpdmVzIGhhdmUgYGAvZGV2L3BvbGxgYC4gV2hpbGUgOmM6ZnVuYzpgc2VsZWN0YCBpcwogTyhoaWdoZXN0IGZpbGUgZGVzY3JpcHRvcikgYW5kIDpjOmZ1bmM6YHBvbGxgIGlzIE8obnVtYmVyIG9mIGZpbGUKQEAgLTE0NCw2ICsxNzAsMjcgQEAKIG9iamVjdC4KIAogCisuLiBtZXRob2Q6OiBkZXZwb2xsLmNsb3NlKCkKKworICAgQ2xvc2UgdGhlIGZpbGUgZGVzY3JpcHRvciBvZiB0aGUgcG9sbGluZyBvYmplY3QuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKKy4uIGF0dHJpYnV0ZTo6IGRldnBvbGwuY2xvc2VkCisKKyAgIGBgVHJ1ZWBgIGlmIHRoZSBwb2xsaW5nIG9iamVjdCBpcyBjbG9zZWQuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKKy4uIG1ldGhvZDo6IGRldnBvbGwuZmlsZW5vKCkKKworICAgUmV0dXJuIHRoZSBmaWxlIGRlc2NyaXB0b3IgbnVtYmVyIG9mIHRoZSBwb2xsaW5nIG9iamVjdC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogLi4gbWV0aG9kOjogZGV2cG9sbC5yZWdpc3RlcihmZFssIGV2ZW50bWFza10pCiAKICAgIFJlZ2lzdGVyIGEgZmlsZSBkZXNjcmlwdG9yIHdpdGggdGhlIHBvbGxpbmcgb2JqZWN0LiAgRnV0dXJlIGNhbGxzIHRvIHRoZQpAQCAtMTYwLDcgKzIwNyw3IEBACiAgICAuLiB3YXJuaW5nOjoKIAogICAgICAgUmVnaXN0ZXJpbmcgYSBmaWxlIGRlc2NyaXB0b3IgdGhhdCdzIGFscmVhZHkgcmVnaXN0ZXJlZCBpcyBub3QgYW4KLSAgICAgIGVycm9yLCBidXQgdGhlIHJlc3VsdCBpcyB1bmRlZmluZWQuIFRoZSBhcHByb3BpYXRlIGFjdGlvbiBpcyB0bworICAgICAgZXJyb3IsIGJ1dCB0aGUgcmVzdWx0IGlzIHVuZGVmaW5lZC4gVGhlIGFwcHJvcHJpYXRlIGFjdGlvbiBpcyB0bwogICAgICAgdW5yZWdpc3RlciBvciBtb2RpZnkgaXQgZmlyc3QuIFRoaXMgaXMgYW4gaW1wb3J0YW50IGRpZmZlcmVuY2UKICAgICAgIGNvbXBhcmVkIHdpdGggOmM6ZnVuYzpgcG9sbGAuCiAKQEAgLTI0MSw2ICsyODgsMTEgQEAKICAgIENsb3NlIHRoZSBjb250cm9sIGZpbGUgZGVzY3JpcHRvciBvZiB0aGUgZXBvbGwgb2JqZWN0LgogCiAKKy4uIGF0dHJpYnV0ZTo6IGVwb2xsLmNsb3NlZAorCisgICBgYFRydWVgYCBpZiB0aGUgZXBvbGwgb2JqZWN0IGlzIGNsb3NlZC4KKworCiAuLiBtZXRob2Q6OiBlcG9sbC5maWxlbm8oKQogCiAgICBSZXR1cm4gdGhlIGZpbGUgZGVzY3JpcHRvciBudW1iZXIgb2YgdGhlIGNvbnRyb2wgZmQuCkBAIC0yNTgsNyArMzEwLDcgQEAKIAogLi4gbWV0aG9kOjogZXBvbGwubW9kaWZ5KGZkLCBldmVudG1hc2spCiAKLSAgIE1vZGlmeSBhIHJlZ2lzdGVyIGZpbGUgZGVzY3JpcHRvci4KKyAgIE1vZGlmeSBhIHJlZ2lzdGVyZWQgZmlsZSBkZXNjcmlwdG9yLgogCiAKIC4uIG1ldGhvZDo6IGVwb2xsLnVucmVnaXN0ZXIoZmQpCkBAIC0zMjIsNyArMzc0LDcgQEAKIAogICAgTW9kaWZpZXMgYW4gYWxyZWFkeSByZWdpc3RlcmVkIGZkLiBUaGlzIGhhcyB0aGUgc2FtZSBlZmZlY3QgYXMKICAgIGBgcmVnaXN0ZXIoZmQsIGV2ZW50bWFzaylgYC4gIEF0dGVtcHRpbmcgdG8gbW9kaWZ5IGEgZmlsZSBkZXNjcmlwdG9yCi0gICB0aGF0IHdhcyBuZXZlciByZWdpc3RlcmVkIGNhdXNlcyBhbiA6ZXhjOmBJT0Vycm9yYCBleGNlcHRpb24gd2l0aCBlcnJubworICAgdGhhdCB3YXMgbmV2ZXIgcmVnaXN0ZXJlZCBjYXVzZXMgYW4gOmV4YzpgT1NFcnJvcmAgZXhjZXB0aW9uIHdpdGggZXJybm8KICAgIDpjb25zdDpgRU5PRU5UYCB0byBiZSByYWlzZWQuCiAKIApAQCAtMzYwLDYgKzQxMiwxMSBAQAogICAgQ2xvc2UgdGhlIGNvbnRyb2wgZmlsZSBkZXNjcmlwdG9yIG9mIHRoZSBrcXVldWUgb2JqZWN0LgogCiAKKy4uIGF0dHJpYnV0ZTo6IGtxdWV1ZS5jbG9zZWQKKworICAgYGBUcnVlYGAgaWYgdGhlIGtxdWV1ZSBvYmplY3QgaXMgY2xvc2VkLgorCisKIC4uIG1ldGhvZDo6IGtxdWV1ZS5maWxlbm8oKQogCiAgICBSZXR1cm4gdGhlIGZpbGUgZGVzY3JpcHRvciBudW1iZXIgb2YgdGhlIGNvbnRyb2wgZmQuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9zZWxlY3RvcnMucnN0IGIvRG9jL2xpYnJhcnkvc2VsZWN0b3JzLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODM3N2M4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jL2xpYnJhcnkvc2VsZWN0b3JzLnJzdApAQCAtMCwwICsxLDI1NyBAQAorOm1vZDpgc2VsZWN0b3JzYCAtLSBIaWdoLWxldmVsIEkvTyBtdWx0aXBsZXhpbmcKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy4uIG1vZHVsZTo6IHNlbGVjdG9ycworICAgOnN5bm9wc2lzOiBIaWdoLWxldmVsIEkvTyBtdWx0aXBsZXhpbmcuCisKKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKK0ludHJvZHVjdGlvbgorLS0tLS0tLS0tLS0tCisKK1RoaXMgbW9kdWxlIGFsbG93cyBoaWdoLWxldmVsIGFuZCBlZmZpY2llbnQgSS9PIG11bHRpcGxleGluZywgYnVpbHQgdXBvbiB0aGUKKzptb2Q6YHNlbGVjdGAgbW9kdWxlIHByaW1pdGl2ZXMuIFVzZXJzIGFyZSBlbmNvdXJhZ2VkIHRvIHVzZSB0aGlzIG1vZHVsZQoraW5zdGVhZCwgdW5sZXNzIHRoZXkgd2FudCBwcmVjaXNlIGNvbnRyb2wgb3ZlciB0aGUgT1MtbGV2ZWwgcHJpbWl0aXZlcyB1c2VkLgorCitJdCBkZWZpbmVzIGEgOmNsYXNzOmBCYXNlU2VsZWN0b3JgIGFic3RyYWN0IGJhc2UgY2xhc3MsIGFsb25nIHdpdGggc2V2ZXJhbAorY29uY3JldGUgaW1wbGVtZW50YXRpb25zICg6Y2xhc3M6YEtxdWV1ZVNlbGVjdG9yYCwgOmNsYXNzOmBFcG9sbFNlbGVjdG9yYC4uLiksCit0aGF0IGNhbiBiZSB1c2VkIHRvIHdhaXQgZm9yIEkvTyByZWFkaW5lc3Mgbm90aWZpY2F0aW9uIG9uIG11bHRpcGxlIGZpbGUKK29iamVjdHMuIEluIHRoZSBmb2xsb3dpbmcsICJmaWxlIG9iamVjdCIgcmVmZXJzIHRvIGFueSBvYmplY3Qgd2l0aCBhCis6bWV0aDpgZmlsZW5vKClgIG1ldGhvZCwgb3IgYSByYXcgZmlsZSBkZXNjcmlwdG9yLiBTZWUgOnRlcm06YGZpbGUgb2JqZWN0YC4KKworOmNsYXNzOmBEZWZhdWx0U2VsZWN0b3JgIGlzIGFuIGFsaWFzIHRvIHRoZSBtb3N0IGVmZmljaWVudCBpbXBsZW1lbnRhdGlvbgorYXZhaWxhYmxlIG9uIHRoZSBjdXJyZW50IHBsYXRmb3JtOiB0aGlzIHNob3VsZCBiZSB0aGUgZGVmYXVsdCBjaG9pY2UgZm9yIG1vc3QKK3VzZXJzLgorCisuLiBub3RlOjoKKyAgIFRoZSB0eXBlIG9mIGZpbGUgb2JqZWN0cyBzdXBwb3J0ZWQgZGVwZW5kcyBvbiB0aGUgcGxhdGZvcm06IG9uIFdpbmRvd3MsCisgICBzb2NrZXRzIGFyZSBzdXBwb3J0ZWQsIGJ1dCBub3QgcGlwZXMsIHdoZXJlYXMgb24gVW5peCwgYm90aCBhcmUgc3VwcG9ydGVkCisgICAoc29tZSBvdGhlciB0eXBlcyBtYXkgYmUgc3VwcG9ydGVkIGFzIHdlbGwsIHN1Y2ggYXMgZmlmb3Mgb3Igc3BlY2lhbCBmaWxlCisgICBkZXZpY2VzKS4KKworLi4gc2VlYWxzbzo6CisKKyAgIDptb2Q6YHNlbGVjdGAKKyAgICAgIExvdy1sZXZlbCBJL08gbXVsdGlwbGV4aW5nIG1vZHVsZS4KKworCitDbGFzc2VzCistLS0tLS0tCisKK0NsYXNzZXMgaGllcmFyY2h5OjoKKworICAgQmFzZVNlbGVjdG9yCisgICArLS0gU2VsZWN0U2VsZWN0b3IKKyAgICstLSBQb2xsU2VsZWN0b3IKKyAgICstLSBFcG9sbFNlbGVjdG9yCisgICArLS0gS3F1ZXVlU2VsZWN0b3IKKworCitJbiB0aGUgZm9sbG93aW5nLCAqZXZlbnRzKiBpcyBhIGJpdHdpc2UgbWFzayBpbmRpY2F0aW5nIHdoaWNoIEkvTyBldmVudHMgc2hvdWxkCitiZSB3YWl0ZWQgZm9yIG9uIGEgZ2l2ZW4gZmlsZSBvYmplY3QuIEl0IGNhbiBiZSBhIGNvbWJpbmF0aW9uIG9mIHRoZSBjb25zdGFudHMKK2JlbG93OgorCisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IENvbnN0YW50ICAgICAgICAgICAgICB8IE1lYW5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArPT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCisgICB8IDpjb25zdDpgRVZFTlRfUkVBRGAgICB8IEF2YWlsYWJsZSBmb3IgcmVhZCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IDpjb25zdDpgRVZFTlRfV1JJVEVgICB8IEF2YWlsYWJsZSBmb3Igd3JpdGUgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKKworLi4gY2xhc3M6OiBTZWxlY3RvcktleQorCisgICBBIDpjbGFzczpgU2VsZWN0b3JLZXlgIGlzIGEgOmNsYXNzOmB+Y29sbGVjdGlvbnMubmFtZWR0dXBsZWAgdXNlZCB0bworICAgYXNzb2NpYXRlIGEgZmlsZSBvYmplY3QgdG8gaXRzIHVuZGVybHlpbmcgZmlsZSBkZWNyaXB0b3IsIHNlbGVjdGVkIGV2ZW50CisgICBtYXNrIGFuZCBhdHRhY2hlZCBkYXRhLiBJdCBpcyByZXR1cm5lZCBieSBzZXZlcmFsIDpjbGFzczpgQmFzZVNlbGVjdG9yYAorICAgbWV0aG9kcy4KKworICAgLi4gYXR0cmlidXRlOjogZmlsZW9iagorCisgICAgICBGaWxlIG9iamVjdCByZWdpc3RlcmVkLgorCisgICAuLiBhdHRyaWJ1dGU6OiBmZAorCisgICAgICBVbmRlcmx5aW5nIGZpbGUgZGVzY3JpcHRvci4KKworICAgLi4gYXR0cmlidXRlOjogZXZlbnRzCisKKyAgICAgIEV2ZW50cyB0aGF0IG11c3QgYmUgd2FpdGVkIGZvciBvbiB0aGlzIGZpbGUgb2JqZWN0LgorCisgICAuLiBhdHRyaWJ1dGU6OiBkYXRhCisKKyAgICAgIE9wdGlvbmFsIG9wYXF1ZSBkYXRhIGFzc29jaWF0ZWQgdG8gdGhpcyBmaWxlIG9iamVjdDogZm9yIGV4YW1wbGUsIHRoaXMKKyAgICAgIGNvdWxkIGJlIHVzZWQgdG8gc3RvcmUgYSBwZXItY2xpZW50IHNlc3Npb24gSUQuCisKKworLi4gY2xhc3M6OiBCYXNlU2VsZWN0b3IKKworICAgQSA6Y2xhc3M6YEJhc2VTZWxlY3RvcmAgaXMgdXNlZCB0byB3YWl0IGZvciBJL08gZXZlbnQgcmVhZGluZXNzIG9uIG11bHRpcGxlCisgICBmaWxlIG9iamVjdHMuIEl0IHN1cHBvcnRzIGZpbGUgc3RyZWFtIHJlZ2lzdHJhdGlvbiwgdW5yZWdpc3RyYXRpb24sIGFuZCBhCisgICBtZXRob2QgdG8gd2FpdCBmb3IgSS9PIGV2ZW50cyBvbiB0aG9zZSBzdHJlYW1zLCB3aXRoIGFuIG9wdGlvbmFsIHRpbWVvdXQuCisgICBJdCdzIGFuIGFic3RyYWN0IGJhc2UgY2xhc3MsIHNvIGNhbm5vdCBiZSBpbnN0YW50aWF0ZWQuIFVzZQorICAgOmNsYXNzOmBEZWZhdWx0U2VsZWN0b3JgIGluc3RlYWQsIG9yIG9uZSBvZiA6Y2xhc3M6YFNlbGVjdFNlbGVjdG9yYCwKKyAgIDpjbGFzczpgS3F1ZXVlU2VsZWN0b3JgIGV0Yy4gaWYgeW91IHdhbnQgdG8gc3BlY2lmaWNhbGx5IHVzZSBhbgorICAgaW1wbGVtZW50YXRpb24sIGFuZCB5b3VyIHBsYXRmb3JtIHN1cHBvcnRzIGl0LgorICAgOmNsYXNzOmBCYXNlU2VsZWN0b3JgIGFuZCBpdHMgY29uY3JldGUgaW1wbGVtZW50YXRpb25zIHN1cHBvcnQgdGhlCisgICA6dGVybTpgY29udGV4dCBtYW5hZ2VyYCBwcm90b2NvbC4KKworICAgLi4gbWV0aG9kOjogcmVnaXN0ZXIoZmlsZW9iaiwgZXZlbnRzLCBkYXRhPU5vbmUpCisKKyAgICAgIFJlZ2lzdGVyIGEgZmlsZSBvYmplY3QgZm9yIHNlbGVjdGlvbiwgbW9uaXRvcmluZyBpdCBmb3IgSS9PIGV2ZW50cy4KKworICAgICAgKmZpbGVvYmoqIGlzIHRoZSBmaWxlIG9iamVjdCB0byBtb25pdG9yLiAgSXQgbWF5IGVpdGhlciBiZSBhbiBpbnRlZ2VyCisgICAgICBmaWxlIGRlc2NyaXB0b3Igb3IgYW4gb2JqZWN0IHdpdGggYSBgYGZpbGVubygpYGAgbWV0aG9kLgorICAgICAgKmV2ZW50cyogaXMgYSBiaXR3aXNlIG1hc2sgb2YgZXZlbnRzIHRvIG1vbml0b3IuCisgICAgICAqZGF0YSogaXMgYW4gb3BhcXVlIG9iamVjdC4KKworICAgICAgVGhpcyByZXR1cm5zIGEgbmV3IDpjbGFzczpgU2VsZWN0b3JLZXlgIGluc3RhbmNlLCBvciByYWlzZXMgYQorICAgICAgOmV4YzpgVmFsdWVFcnJvcmAgaW4gY2FzZSBvZiBpbnZhbGlkIGV2ZW50IG1hc2sgb3IgZmlsZSBkZXNjcmlwdG9yLCBvcgorICAgICAgOmV4YzpgS2V5RXJyb3JgIGlmIHRoZSBmaWxlIG9iamVjdCBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQuCisKKyAgIC4uIG1ldGhvZDo6IHVucmVnaXN0ZXIoZmlsZW9iaikKKworICAgICAgVW5yZWdpc3RlciBhIGZpbGUgb2JqZWN0IGZyb20gc2VsZWN0aW9uLCByZW1vdmluZyBpdCBmcm9tIG1vbml0b3JpbmcuIEEKKyAgICAgIGZpbGUgb2JqZWN0IHNoYWxsIGJlIHVucmVnaXN0ZXJlZCBwcmlvciB0byBiZWluZyBjbG9zZWQuCisKKyAgICAgICpmaWxlb2JqKiBtdXN0IGJlIGEgZmlsZSBvYmplY3QgcHJldmlvdXNseSByZWdpc3RlcmVkLgorCisgICAgICBUaGlzIHJldHVybnMgdGhlIGFzc29jaWF0ZWQgOmNsYXNzOmBTZWxlY3RvcktleWAgaW5zdGFuY2UsIG9yIHJhaXNlcyBhCisgICAgICA6ZXhjOmBLZXlFcnJvcmAgaWYgKmZpbGVvYmoqIGlzIG5vdCByZWdpc3RlcmVkLiAgSXQgd2lsbCByYWlzZQorICAgICAgOmV4YzpgVmFsdWVFcnJvcmAgaWYgKmZpbGVvYmoqIGlzIGludmFsaWQgKGUuZy4gaXQgaGFzIG5vIGBgZmlsZW5vKClgYAorICAgICAgbWV0aG9kIG9yIGl0cyBgYGZpbGVubygpYGAgbWV0aG9kIGhhcyBhbiBpbnZhbGlkIHJldHVybiB2YWx1ZSkuCisKKyAgIC4uIG1ldGhvZDo6IG1vZGlmeShmaWxlb2JqLCBldmVudHMsIGRhdGE9Tm9uZSkKKworICAgICAgQ2hhbmdlIGEgcmVnaXN0ZXJlZCBmaWxlIG9iamVjdCdzIG1vbml0b3JlZCBldmVudHMgb3IgYXR0YWNoZWQgZGF0YS4KKworICAgICAgVGhpcyBpcyBlcXVpdmFsZW50IHRvIDptZXRoOmBCYXNlU2VsZWN0b3IudW5yZWdpc3RlcihmaWxlb2JqKWAgZm9sbG93ZWQKKyAgICAgIGJ5IDptZXRoOmBCYXNlU2VsZWN0b3IucmVnaXN0ZXIoZmlsZW9iaiwgZXZlbnRzLCBkYXRhKWAsIGV4Y2VwdCB0aGF0IGl0CisgICAgICBjYW4gYmUgaW1wbGVtZW50ZWQgbW9yZSBlZmZpY2llbnRseS4KKworICAgICAgVGhpcyByZXR1cm5zIGEgbmV3IDpjbGFzczpgU2VsZWN0b3JLZXlgIGluc3RhbmNlLCBvciByYWlzZXMgYQorICAgICAgOmV4YzpgVmFsdWVFcnJvcmAgaW4gY2FzZSBvZiBpbnZhbGlkIGV2ZW50IG1hc2sgb3IgZmlsZSBkZXNjcmlwdG9yLCBvcgorICAgICAgOmV4YzpgS2V5RXJyb3JgIGlmIHRoZSBmaWxlIG9iamVjdCBpcyBub3QgcmVnaXN0ZXJlZC4KKworICAgLi4gbWV0aG9kOjogc2VsZWN0KHRpbWVvdXQ9Tm9uZSkKKworICAgICAgV2FpdCB1bnRpbCBzb21lIHJlZ2lzdGVyZWQgZmlsZSBvYmplY3RzIGJlY29tZSByZWFkeSwgb3IgdGhlIHRpbWVvdXQKKyAgICAgIGV4cGlyZXMuCisKKyAgICAgIElmIGBgdGltZW91dCA+IDBgYCwgdGhpcyBzcGVjaWZpZXMgdGhlIG1heGltdW0gd2FpdCB0aW1lLCBpbiBzZWNvbmRzLgorICAgICAgSWYgYGB0aW1lb3V0IDw9IDBgYCwgdGhlIGNhbGwgd29uJ3QgYmxvY2ssIGFuZCB3aWxsIHJlcG9ydCB0aGUgY3VycmVudGx5CisgICAgICByZWFkeSBmaWxlIG9iamVjdHMuCisgICAgICBJZiAqdGltZW91dCogaXMgYGBOb25lYGAsIHRoZSBjYWxsIHdpbGwgYmxvY2sgdW50aWwgYSBtb25pdG9yZWQgZmlsZSBvYmplY3QKKyAgICAgIGJlY29tZXMgcmVhZHkuCisKKyAgICAgIFRoaXMgcmV0dXJucyBhIGxpc3Qgb2YgYGAoa2V5LCBldmVudHMpYGAgdHVwbGVzLCBvbmUgZm9yIGVhY2ggcmVhZHkgZmlsZQorICAgICAgb2JqZWN0LgorCisgICAgICAqa2V5KiBpcyB0aGUgOmNsYXNzOmBTZWxlY3RvcktleWAgaW5zdGFuY2UgY29ycmVzcG9uZGluZyB0byBhIHJlYWR5IGZpbGUKKyAgICAgIG9iamVjdC4KKyAgICAgICpldmVudHMqIGlzIGEgYml0bWFzayBvZiBldmVudHMgcmVhZHkgb24gdGhpcyBmaWxlIG9iamVjdC4KKworICAgICAgLi4gbm90ZTo6CisgICAgICAgICAgVGhpcyBtZXRob2QgY2FuIHJldHVybiBiZWZvcmUgYW55IGZpbGUgb2JqZWN0IGJlY29tZXMgcmVhZHkgb3IgdGhlCisgICAgICAgICAgdGltZW91dCBoYXMgZWxhcHNlZCBpZiB0aGUgY3VycmVudCBwcm9jZXNzIHJlY2VpdmVzIGEgc2lnbmFsOiBpbiB0aGlzCisgICAgICAgICAgY2FzZSwgYW4gZW1wdHkgbGlzdCB3aWxsIGJlIHJldHVybmVkLgorCisgICAuLiBtZXRob2Q6OiBjbG9zZSgpCisKKyAgICAgIENsb3NlIHRoZSBzZWxlY3Rvci4KKworICAgICAgVGhpcyBtdXN0IGJlIGNhbGxlZCB0byBtYWtlIHN1cmUgdGhhdCBhbnkgdW5kZXJseWluZyByZXNvdXJjZSBpcyBmcmVlZC4KKyAgICAgIFRoZSBzZWxlY3RvciBzaGFsbCBub3QgYmUgdXNlZCBvbmNlIGl0IGhhcyBiZWVuIGNsb3NlZC4KKworICAgLi4gbWV0aG9kOjogZ2V0X2tleShmaWxlb2JqKQorCisgICAgICBSZXR1cm4gdGhlIGtleSBhc3NvY2lhdGVkIHdpdGggYSByZWdpc3RlcmVkIGZpbGUgb2JqZWN0LgorCisgICAgICBUaGlzIHJldHVybnMgdGhlIDpjbGFzczpgU2VsZWN0b3JLZXlgIGluc3RhbmNlIGFzc29jaWF0ZWQgdG8gdGhpcyBmaWxlCisgICAgICBvYmplY3QsIG9yIHJhaXNlcyA6ZXhjOmBLZXlFcnJvcmAgaWYgdGhlIGZpbGUgb2JqZWN0IGlzIG5vdCByZWdpc3RlcmVkLgorCisgICAuLiBtZXRob2Q6OiBnZXRfbWFwKCkKKworICAgICAgUmV0dXJuIGEgbWFwcGluZyBvZiBmaWxlIG9iamVjdHMgdG8gc2VsZWN0b3Iga2V5cy4KKworICAgICAgVGhpcyByZXR1cm5zIGEgOmNsYXNzOmB+Y29sbGVjdGlvbnMuYWJjLk1hcHBpbmdgIGluc3RhbmNlIG1hcHBpbmcKKyAgICAgIHJlZ2lzdGVyZWQgZmlsZSBvYmplY3RzIHRvIHRoZWlyIGFzc29jaWF0ZWQgOmNsYXNzOmBTZWxlY3RvcktleWAKKyAgICAgIGluc3RhbmNlLgorCisKKy4uIGNsYXNzOjogRGVmYXVsdFNlbGVjdG9yKCkKKworICAgVGhlIGRlZmF1bHQgc2VsZWN0b3IgY2xhc3MsIHVzaW5nIHRoZSBtb3N0IGVmZmljaWVudCBpbXBsZW1lbnRhdGlvbgorICAgYXZhaWxhYmxlIG9uIHRoZSBjdXJyZW50IHBsYXRmb3JtLiBUaGlzIHNob3VsZCBiZSB0aGUgZGVmYXVsdCBjaG9pY2UgZm9yCisgICBtb3N0IHVzZXJzLgorCisKKy4uIGNsYXNzOjogU2VsZWN0U2VsZWN0b3IoKQorCisgICA6ZnVuYzpgc2VsZWN0LnNlbGVjdGAtYmFzZWQgc2VsZWN0b3IuCisKKworLi4gY2xhc3M6OiBQb2xsU2VsZWN0b3IoKQorCisgICA6ZnVuYzpgc2VsZWN0LnBvbGxgLWJhc2VkIHNlbGVjdG9yLgorCisKKy4uIGNsYXNzOjogRXBvbGxTZWxlY3RvcigpCisKKyAgIDpmdW5jOmBzZWxlY3QuZXBvbGxgLWJhc2VkIHNlbGVjdG9yLgorCisgICAuLiBtZXRob2Q6OiBmaWxlbm8oKQorCisgICAgICBUaGlzIHJldHVybnMgdGhlIGZpbGUgZGVzY3JpcHRvciB1c2VkIGJ5IHRoZSB1bmRlcmx5aW5nCisgICAgICA6ZnVuYzpgc2VsZWN0LmVwb2xsYCBvYmplY3QuCisKKworLi4gY2xhc3M6OiBLcXVldWVTZWxlY3RvcigpCisKKyAgIDpmdW5jOmBzZWxlY3Qua3F1ZXVlYC1iYXNlZCBzZWxlY3Rvci4KKworICAgLi4gbWV0aG9kOjogZmlsZW5vKCkKKworICAgICAgVGhpcyByZXR1cm5zIHRoZSBmaWxlIGRlc2NyaXB0b3IgdXNlZCBieSB0aGUgdW5kZXJseWluZworICAgICAgOmZ1bmM6YHNlbGVjdC5rcXVldWVgIG9iamVjdC4KKworCitFeGFtcGxlcworLS0tLS0tLS0KKworSGVyZSBpcyBhIHNpbXBsZSBlY2hvIHNlcnZlciBpbXBsZW1lbnRhdGlvbjo6CisKKyAgIGltcG9ydCBzZWxlY3RvcnMKKyAgIGltcG9ydCBzb2NrZXQKKworICAgc2VsID0gc2VsZWN0b3JzLkRlZmF1bHRTZWxlY3RvcigpCisKKyAgIGRlZiBhY2NlcHQoc29jaywgbWFzayk6CisgICAgICAgY29ubiwgYWRkciA9IHNvY2suYWNjZXB0KCkgICMgU2hvdWxkIGJlIHJlYWR5CisgICAgICAgcHJpbnQoJ2FjY2VwdGVkJywgY29ubiwgJ2Zyb20nLCBhZGRyKQorICAgICAgIGNvbm4uc2V0YmxvY2tpbmcoRmFsc2UpCisgICAgICAgc2VsLnJlZ2lzdGVyKGNvbm4sIHNlbGVjdG9ycy5FVkVOVF9SRUFELCByZWFkKQorCisgICBkZWYgcmVhZChjb25uLCBtYXNrKToKKyAgICAgICBkYXRhID0gY29ubi5yZWN2KDEwMDApICAjIFNob3VsZCBiZSByZWFkeQorICAgICAgIGlmIGRhdGE6CisgICAgICAgICAgIHByaW50KCdlY2hvaW5nJywgcmVwcihkYXRhKSwgJ3RvJywgY29ubikKKyAgICAgICAgICAgY29ubi5zZW5kKGRhdGEpICAjIEhvcGUgaXQgd29uJ3QgYmxvY2sKKyAgICAgICBlbHNlOgorICAgICAgICAgICBwcmludCgnY2xvc2luZycsIGNvbm4pCisgICAgICAgICAgIHNlbC51bnJlZ2lzdGVyKGNvbm4pCisgICAgICAgICAgIGNvbm4uY2xvc2UoKQorCisgICBzb2NrID0gc29ja2V0LnNvY2tldCgpCisgICBzb2NrLmJpbmQoKCdsb2NhbGhvc3QnLCAxMjM0KSkKKyAgIHNvY2subGlzdGVuKDEwMCkKKyAgIHNvY2suc2V0YmxvY2tpbmcoRmFsc2UpCisgICBzZWwucmVnaXN0ZXIoc29jaywgc2VsZWN0b3JzLkVWRU5UX1JFQUQsIGFjY2VwdCkKKworICAgd2hpbGUgVHJ1ZToKKyAgICAgICBldmVudHMgPSBzZWwuc2VsZWN0KCkKKyAgICAgICBmb3Iga2V5LCBtYXNrIGluIGV2ZW50czoKKyAgICAgICAgICAgY2FsbGJhY2sgPSBrZXkuZGF0YQorICAgICAgICAgICBjYWxsYmFjayhrZXkuZmlsZW9iaiwgbWFzaykKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3NoZWx2ZS5yc3QgYi9Eb2MvbGlicmFyeS9zaGVsdmUucnN0CmluZGV4IDA0OGY4MGEuLjIyZTIwMmQgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3NoZWx2ZS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvc2hlbHZlLnJzdApAQCAtNDQsOCArNDQsMTEgQEAKICAgIC4uIG5vdGU6OgogCiAgICAgICBEbyBub3QgcmVseSBvbiB0aGUgc2hlbGYgYmVpbmcgY2xvc2VkIGF1dG9tYXRpY2FsbHk7IGFsd2F5cyBjYWxsCi0gICAgICA6bWV0aDpgY2xvc2VgIGV4cGxpY2l0bHkgd2hlbiB5b3UgZG9uJ3QgbmVlZCBpdCBhbnkgbW9yZSwgb3IgdXNlIGEKLSAgICAgIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQgd2l0aCA6ZnVuYzpgY29udGV4dGxpYi5jbG9zaW5nYC4KKyAgICAgIDptZXRoOmB+U2hlbGYuY2xvc2VgIGV4cGxpY2l0bHkgd2hlbiB5b3UgZG9uJ3QgbmVlZCBpdCBhbnkgbW9yZSwgb3IKKyAgICAgIHVzZSA6ZnVuYzpgc2hlbHZlLm9wZW5gIGFzIGEgY29udGV4dCBtYW5hZ2VyOjoKKworICAgICAgICAgIHdpdGggc2hlbHZlLm9wZW4oJ3NwYW0nKSBhcyBkYjoKKyAgICAgICAgICAgICAgZGJbJ2VnZ3MnXSA9ICdlZ2dzJwogCiAuLiB3YXJuaW5nOjoKIApAQCAtMTE4LDEwICsxMjEsMTYgQEAKICAgIFRoZSAqa2V5ZW5jb2RpbmcqIHBhcmFtZXRlciBpcyB0aGUgZW5jb2RpbmcgdXNlZCB0byBlbmNvZGUga2V5cyBiZWZvcmUgdGhleQogICAgYXJlIHVzZWQgd2l0aCB0aGUgdW5kZXJseWluZyBkaWN0LgogCi0gICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKLSAgICAgIFRoZSAqa2V5ZW5jb2RpbmcqIHBhcmFtZXRlcjsgcHJldmlvdXNseSwga2V5cyB3ZXJlIGFsd2F5cyBlbmNvZGVkIGluCisgICBBIDpjbGFzczpgU2hlbGZgIG9iamVjdCBjYW4gYWxzbyBiZSB1c2VkIGFzIGEgY29udGV4dCBtYW5hZ2VyLCBpbiB3aGljaAorICAgY2FzZSBpdCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgY2xvc2VkIHdoZW4gdGhlIDprZXl3b3JkOmB3aXRoYCBibG9jayBlbmRzLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgorICAgICAgQWRkZWQgdGhlICprZXllbmNvZGluZyogcGFyYW1ldGVyOyBwcmV2aW91c2x5LCBrZXlzIHdlcmUgYWx3YXlzIGVuY29kZWQgaW4KICAgICAgIFVURi04LgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgQWRkZWQgY29udGV4dCBtYW5hZ2VyIHN1cHBvcnQuCisKIAogLi4gY2xhc3M6OiBCc2REYlNoZWxmKGRpY3QsIHByb3RvY29sPU5vbmUsIHdyaXRlYmFjaz1GYWxzZSwga2V5ZW5jb2Rpbmc9J3V0Zi04JykKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvc2h1dGlsLnJzdCBiL0RvYy9saWJyYXJ5L3NodXRpbC5yc3QKaW5kZXggYTE0NTdkMC4uNzU2NjUyMSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvc2h1dGlsLnJzdAorKysgYi9Eb2MvbGlicmFyeS9zaHV0aWwucnN0CkBAIC01Myw3ICs1Myw3IEBACiAgICAqZHN0KiBhbmQgcmV0dXJuICpkc3QqLiAgKnNyYyogYW5kICpkc3QqIGFyZSBwYXRoIG5hbWVzIGdpdmVuIGFzIHN0cmluZ3MuCiAgICAqZHN0KiBtdXN0IGJlIHRoZSBjb21wbGV0ZSB0YXJnZXQgZmlsZSBuYW1lOyBsb29rIGF0IDpmdW5jOmBzaHV0aWwuY29weWAKICAgIGZvciBhIGNvcHkgdGhhdCBhY2NlcHRzIGEgdGFyZ2V0IGRpcmVjdG9yeSBwYXRoLiAgSWYgKnNyYyogYW5kICpkc3QqCi0gICBzcGVjaWZ5IHRoZSBzYW1lIGZpbGUsIDpleGM6YEVycm9yYCBpcyByYWlzZWQuCisgICBzcGVjaWZ5IHRoZSBzYW1lIGZpbGUsIDpleGM6YFNhbWVGaWxlRXJyb3JgIGlzIHJhaXNlZC4KIAogICAgVGhlIGRlc3RpbmF0aW9uIGxvY2F0aW9uIG11c3QgYmUgd3JpdGFibGU7IG90aGVyd2lzZSwgYW4gOmV4YzpgT1NFcnJvcmAKICAgIGV4Y2VwdGlvbiB3aWxsIGJlIHJhaXNlZC4gSWYgKmRzdCogYWxyZWFkeSBleGlzdHMsIGl0IHdpbGwgYmUgcmVwbGFjZWQuCkBAIC02OSw2ICs2OSwxOSBAQAogICAgICAgQWRkZWQgKmZvbGxvd19zeW1saW5rcyogYXJndW1lbnQuCiAgICAgICBOb3cgcmV0dXJucyAqZHN0Ki4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFJhaXNlIDpleGM6YFNhbWVGaWxlRXJyb3JgIGluc3RlYWQgb2YgOmV4YzpgRXJyb3JgLiAgU2luY2UgdGhlIGZvcm1lciBpcworICAgICAgYSBzdWJjbGFzcyBvZiB0aGUgbGF0dGVyLCB0aGlzIGNoYW5nZSBpcyBiYWNrd2FyZCBjb21wYXRpYmxlLgorCisKKy4uIGV4Y2VwdGlvbjo6IFNhbWVGaWxlRXJyb3IKKworICAgVGhpcyBleGNlcHRpb24gaXMgcmFpc2VkIGlmIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gaW4gOmZ1bmM6YGNvcHlmaWxlYAorICAgYXJlIHRoZSBzYW1lIGZpbGUuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIC4uIGZ1bmN0aW9uOjogY29weW1vZGUoc3JjLCBkc3QsICosIGZvbGxvd19zeW1saW5rcz1UcnVlKQogCiAgICBDb3B5IHRoZSBwZXJtaXNzaW9uIGJpdHMgZnJvbSAqc3JjKiB0byAqZHN0Ki4gIFRoZSBmaWxlIGNvbnRlbnRzLCBvd25lciwgYW5kCkBAIC0xOTMsOCArMjA2LDggQEAKICAgIGFuZCBtZXRhZGF0YSBvZiB0aGUgbGlua2VkIGZpbGVzIGFyZSBjb3BpZWQgdG8gdGhlIG5ldyB0cmVlLgogCiAgICBXaGVuICpzeW1saW5rcyogaXMgZmFsc2UsIGlmIHRoZSBmaWxlIHBvaW50ZWQgYnkgdGhlIHN5bWxpbmsgZG9lc24ndAotICAgZXhpc3QsIGEgZXhjZXB0aW9uIHdpbGwgYmUgYWRkZWQgaW4gdGhlIGxpc3Qgb2YgZXJyb3JzIHJhaXNlZCBpbgotICAgYSA6ZXhjOmBFcnJvcmAgZXhjZXB0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIGNvcHkgcHJvY2Vzcy4KKyAgIGV4aXN0LCBhbiBleGNlcHRpb24gd2lsbCBiZSBhZGRlZCBpbiB0aGUgbGlzdCBvZiBlcnJvcnMgcmFpc2VkIGluCisgICBhbiA6ZXhjOmBFcnJvcmAgZXhjZXB0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIGNvcHkgcHJvY2Vzcy4KICAgIFlvdSBjYW4gc2V0IHRoZSBvcHRpb25hbCAqaWdub3JlX2RhbmdsaW5nX3N5bWxpbmtzKiBmbGFnIHRvIHRydWUgaWYgeW91CiAgICB3YW50IHRvIHNpbGVuY2UgdGhpcyBleGNlcHRpb24uIE5vdGljZSB0aGF0IHRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3QKICAgIG9uIHBsYXRmb3JtcyB0aGF0IGRvbid0IHN1cHBvcnQgOmZ1bmM6YG9zLnN5bWxpbmtgLgpAQCAtMjc0LDEyICsyODcsOSBAQAogICAgUmVjdXJzaXZlbHkgbW92ZSBhIGZpbGUgb3IgZGlyZWN0b3J5ICgqc3JjKikgdG8gYW5vdGhlciBsb2NhdGlvbiAoKmRzdCopCiAgICBhbmQgcmV0dXJuIHRoZSBkZXN0aW5hdGlvbi4KIAotICAgSWYgdGhlIGRlc3RpbmF0aW9uIGlzIGEgZGlyZWN0b3J5IG9yIGEgc3ltbGluayB0byBhIGRpcmVjdG9yeSwgdGhlbiAqc3JjKiBpcwotICAgbW92ZWQgaW5zaWRlIHRoYXQgZGlyZWN0b3J5LgotCi0gICBUaGUgZGVzdGluYXRpb24gZGlyZWN0b3J5IG11c3Qgbm90IGFscmVhZHkgZXhpc3QuICBJZiB0aGUgZGVzdGluYXRpb24gYWxyZWFkeQotICAgZXhpc3RzIGJ1dCBpcyBub3QgYSBkaXJlY3RvcnksIGl0IG1heSBiZSBvdmVyd3JpdHRlbiBkZXBlbmRpbmcgb24KLSAgIDpmdW5jOmBvcy5yZW5hbWVgIHNlbWFudGljcy4KKyAgIElmIHRoZSBkZXN0aW5hdGlvbiBpcyBhbiBleGlzdGluZyBkaXJlY3RvcnksIHRoZW4gKnNyYyogaXMgbW92ZWQgaW5zaWRlIHRoYXQKKyAgIGRpcmVjdG9yeS4gSWYgdGhlIGRlc3RpbmF0aW9uIGFscmVhZHkgZXhpc3RzIGJ1dCBpcyBub3QgYSBkaXJlY3RvcnksIGl0IG1heQorICAgYmUgb3ZlcndyaXR0ZW4gZGVwZW5kaW5nIG9uIDpmdW5jOmBvcy5yZW5hbWVgIHNlbWFudGljcy4KIAogICAgSWYgdGhlIGRlc3RpbmF0aW9uIGlzIG9uIHRoZSBjdXJyZW50IGZpbGVzeXN0ZW0sIHRoZW4gOmZ1bmM6YG9zLnJlbmFtZWAgaXMKICAgIHVzZWQuICBPdGhlcndpc2UsICpzcmMqIGlzIGNvcGllZCAodXNpbmcgOmZ1bmM6YHNodXRpbC5jb3B5MmApIHRvICpkc3QqIGFuZApAQCAtMzI4LDcgKzMzOCw3IEBACiAKICAgIE9uIFdpbmRvd3MsIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBpcyBhbHdheXMgcHJlcGVuZGVkIHRvIHRoZSAqcGF0aCogd2hldGhlcgogICAgb3Igbm90IHlvdSB1c2UgdGhlIGRlZmF1bHQgb3IgcHJvdmlkZSB5b3VyIG93biwgd2hpY2ggaXMgdGhlIGJlaGF2aW9yIHRoZQotICAgY29tbWFuZCBzaGVsbCB1c2VzIHdoZW4gZmluZGluZyBleGVjdXRhYmxlcy4gIEFkZGl0aW9uYWx5LCB3aGVuIGZpbmRpbmcgdGhlCisgICBjb21tYW5kIHNoZWxsIHVzZXMgd2hlbiBmaW5kaW5nIGV4ZWN1dGFibGVzLiAgQWRkaXRpb25hbGx5LCB3aGVuIGZpbmRpbmcgdGhlCiAgICAqY21kKiBpbiB0aGUgKnBhdGgqLCB0aGUgYGBQQVRIRVhUYGAgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgY2hlY2tlZC4gIEZvcgogICAgZXhhbXBsZSwgaWYgeW91IGNhbGwgYGBzaHV0aWwud2hpY2goInB5dGhvbiIpYGAsIDpmdW5jOmB3aGljaGAgd2lsbCBzZWFyY2gKICAgIGBgUEFUSEVYVGBgIHRvIGtub3cgdGhhdCBpdCBzaG91bGQgbG9vayBmb3IgYGBweXRob24uZXhlYGAgd2l0aGluIHRoZSAqcGF0aCoKQEAgLTM4MCwxMSArMzkwLDEwIEBACiAgICAgICAgICAgICAgICBlcnJvcnMuZXh0ZW5kKGVyci5hcmdzWzBdKQogICAgICAgIHRyeToKICAgICAgICAgICAgY29weXN0YXQoc3JjLCBkc3QpCi0gICAgICAgZXhjZXB0IFdpbmRvd3NFcnJvcjoKLSAgICAgICAgICAgIyBjYW4ndCBjb3B5IGZpbGUgYWNjZXNzIHRpbWVzIG9uIFdpbmRvd3MKLSAgICAgICAgICAgcGFzcwogICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIHdoeToKLSAgICAgICAgICAgZXJyb3JzLmV4dGVuZCgoc3JjLCBkc3QsIHN0cih3aHkpKSkKKyAgICAgICAgICAgIyBjYW4ndCBjb3B5IGZpbGUgYWNjZXNzIHRpbWVzIG9uIFdpbmRvd3MKKyAgICAgICAgICAgaWYgd2h5LndpbmVycm9yIGlzIE5vbmU6CisgICAgICAgICAgICAgICBlcnJvcnMuZXh0ZW5kKChzcmMsIGRzdCwgc3RyKHdoeSkpKQogICAgICAgIGlmIGVycm9yczoKICAgICAgICAgICAgcmFpc2UgRXJyb3IoZXJyb3JzKQogCkBAIC00MzcsMTcgKzQ0NiwyMiBAQAogCiAgICAqcm9vdF9kaXIqIGFuZCAqYmFzZV9kaXIqIGJvdGggZGVmYXVsdCB0byB0aGUgY3VycmVudCBkaXJlY3RvcnkuCiAKKyAgIElmICpkcnlfcnVuKiBpcyB0cnVlLCBubyBhcmNoaXZlIGlzIGNyZWF0ZWQsIGJ1dCB0aGUgb3BlcmF0aW9ucyB0aGF0IHdvdWxkIGJlCisgICBleGVjdXRlZCBhcmUgbG9nZ2VkIHRvICpsb2dnZXIqLgorCiAgICAqb3duZXIqIGFuZCAqZ3JvdXAqIGFyZSB1c2VkIHdoZW4gY3JlYXRpbmcgYSB0YXIgYXJjaGl2ZS4gQnkgZGVmYXVsdCwKICAgIHVzZXMgdGhlIGN1cnJlbnQgb3duZXIgYW5kIGdyb3VwLgogCiAgICAqbG9nZ2VyKiBtdXN0IGJlIGFuIG9iamVjdCBjb21wYXRpYmxlIHdpdGggOnBlcDpgMjgyYCwgdXN1YWxseSBhbiBpbnN0YW5jZSBvZgogICAgOmNsYXNzOmBsb2dnaW5nLkxvZ2dlcmAuCiAKKyAgIFRoZSAqdmVyYm9zZSogYXJndW1lbnQgaXMgdW51c2VkIGFuZCBkZXByZWNhdGVkLgorCiAKIC4uIGZ1bmN0aW9uOjogZ2V0X2FyY2hpdmVfZm9ybWF0cygpCiAKICAgIFJldHVybiBhIGxpc3Qgb2Ygc3VwcG9ydGVkIGZvcm1hdHMgZm9yIGFyY2hpdmluZy4KLSAgIEVhY2ggZWxlbWVudCBvZiB0aGUgcmV0dXJuZWQgc2VxdWVuY2UgaXMgYSB0dXBsZSBgYChuYW1lLCBkZXNjcmlwdGlvbilgYAorICAgRWFjaCBlbGVtZW50IG9mIHRoZSByZXR1cm5lZCBzZXF1ZW5jZSBpcyBhIHR1cGxlIGBgKG5hbWUsIGRlc2NyaXB0aW9uKWBgLgogCiAgICBCeSBkZWZhdWx0IDptb2Q6YHNodXRpbGAgcHJvdmlkZXMgdGhlc2UgZm9ybWF0czoKIApAQCAtNDYyLDE0ICs0NzYsMTkgQEAKIAogLi4gZnVuY3Rpb246OiByZWdpc3Rlcl9hcmNoaXZlX2Zvcm1hdChuYW1lLCBmdW5jdGlvbiwgW2V4dHJhX2FyZ3MsIFtkZXNjcmlwdGlvbl1dKQogCi0gICBSZWdpc3RlciBhbiBhcmNoaXZlciBmb3IgdGhlIGZvcm1hdCAqbmFtZSouICpmdW5jdGlvbiogaXMgYSBjYWxsYWJsZSB0aGF0Ci0gICB3aWxsIGJlIHVzZWQgdG8gaW52b2tlIHRoZSBhcmNoaXZlci4KKyAgIFJlZ2lzdGVyIGFuIGFyY2hpdmVyIGZvciB0aGUgZm9ybWF0ICpuYW1lKi4KKworICAgKmZ1bmN0aW9uKiBpcyB0aGUgY2FsbGFibGUgdGhhdCB3aWxsIGJlIHVzZWQgdG8gdW5wYWNrIGFyY2hpdmVzLiBUaGUgY2FsbGFibGUKKyAgIHdpbGwgcmVjZWl2ZSB0aGUgKmJhc2VfbmFtZSogb2YgdGhlIGZpbGUgdG8gY3JlYXRlLCBmb2xsb3dlZCBieSB0aGUKKyAgICpiYXNlX2RpciogKHdoaWNoIGRlZmF1bHRzIHRvIDpkYXRhOmBvcy5jdXJkaXJgKSB0byBzdGFydCBhcmNoaXZpbmcgZnJvbS4KKyAgIEZ1cnRoZXIgYXJndW1lbnRzIGFyZSBwYXNzZWQgYXMga2V5d29yZCBhcmd1bWVudHM6ICpvd25lciosICpncm91cCosCisgICAqZHJ5X3J1biogYW5kICpsb2dnZXIqIChhcyBwYXNzZWQgaW4gOmZ1bmM6YG1ha2VfYXJjaGl2ZWApLgogCiAgICBJZiBnaXZlbiwgKmV4dHJhX2FyZ3MqIGlzIGEgc2VxdWVuY2Ugb2YgYGAobmFtZSwgdmFsdWUpYGAgcGFpcnMgdGhhdCB3aWxsIGJlCiAgICB1c2VkIGFzIGV4dHJhIGtleXdvcmRzIGFyZ3VtZW50cyB3aGVuIHRoZSBhcmNoaXZlciBjYWxsYWJsZSBpcyB1c2VkLgogCiAgICAqZGVzY3JpcHRpb24qIGlzIHVzZWQgYnkgOmZ1bmM6YGdldF9hcmNoaXZlX2Zvcm1hdHNgIHdoaWNoIHJldHVybnMgdGhlCi0gICBsaXN0IG9mIGFyY2hpdmVycy4gRGVmYXVsdHMgdG8gYW4gZW1wdHkgbGlzdC4KKyAgIGxpc3Qgb2YgYXJjaGl2ZXJzLiAgRGVmYXVsdHMgdG8gYW4gZW1wdHkgc3RyaW5nLgogCiAKIC4uIGZ1bmN0aW9uOjogdW5yZWdpc3Rlcl9hcmNoaXZlX2Zvcm1hdChuYW1lKQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvc2lnbmFsLnJzdCBiL0RvYy9saWJyYXJ5L3NpZ25hbC5yc3QKaW5kZXggODRlMjgzNi4uOGI5MDk5NCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvc2lnbmFsLnJzdAorKysgYi9Eb2MvbGlicmFyeS9zaWduYWwucnN0CkBAIC05NSw3ICs5NSw3IEBACiAKIC4uIGRhdGE6OiBDVFJMX0NfRVZFTlQKIAotICAgVGhlIHNpZ25hbCBjb3JyZXNwb25kaW5nIHRvIHRoZSBDVFJMK0Mga2V5c3Ryb2tlIGV2ZW50LiBUaGlzIHNpZ25hbCBjYW4KKyAgIFRoZSBzaWduYWwgY29ycmVzcG9uZGluZyB0byB0aGUgOmtiZDpgQ3RybCtDYCBrZXlzdHJva2UgZXZlbnQuIFRoaXMgc2lnbmFsIGNhbgogICAgb25seSBiZSB1c2VkIHdpdGggOmZ1bmM6YG9zLmtpbGxgLgogCiAgICBBdmFpbGFiaWxpdHk6IFdpbmRvd3MuCkBAIC0xMDUsNyArMTA1LDcgQEAKIAogLi4gZGF0YTo6IENUUkxfQlJFQUtfRVZFTlQKIAotICAgVGhlIHNpZ25hbCBjb3JyZXNwb25kaW5nIHRvIHRoZSBDVFJMK0JSRUFLIGtleXN0cm9rZSBldmVudC4gVGhpcyBzaWduYWwgY2FuCisgICBUaGUgc2lnbmFsIGNvcnJlc3BvbmRpbmcgdG8gdGhlIDprYmQ6YEN0cmwrQnJlYWtgIGtleXN0cm9rZSBldmVudC4gVGhpcyBzaWduYWwgY2FuCiAgICBvbmx5IGJlIHVzZWQgd2l0aCA6ZnVuYzpgb3Mua2lsbGAuCiAKICAgIEF2YWlsYWJpbGl0eTogV2luZG93cy4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3NpdGUucnN0IGIvRG9jL2xpYnJhcnkvc2l0ZS5yc3QKaW5kZXggMzZiODBjMy4uNTFlNWRhOCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvc2l0ZS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvc2l0ZS5yc3QKQEAgLTM4LDYgKzM4LDkgQEAKIGlmIGl0IHJlZmVycyB0byBhbiBleGlzdGluZyBkaXJlY3RvcnksIGFuZCBpZiBzbywgYWRkcyBpdCB0byBgYHN5cy5wYXRoYGAgYW5kCiBhbHNvIGluc3BlY3RzIHRoZSBuZXdseSBhZGRlZCBwYXRoIGZvciBjb25maWd1cmF0aW9uIGZpbGVzLgogCisuLiBkZXByZWNhdGVkOjogMy40CisgICBTdXBwb3J0IGZvciB0aGUgInNpdGUtcHl0aG9uIiBkaXJlY3Rvcnkgd2lsbCBiZSByZW1vdmVkIGluIDMuNS4KKwogSWYgYSBmaWxlIG5hbWVkICJweXZlbnYuY2ZnIiBleGlzdHMgb25lIGRpcmVjdG9yeSBhYm92ZSBzeXMuZXhlY3V0YWJsZSwKIHN5cy5wcmVmaXggYW5kIHN5cy5leGVjX3ByZWZpeCBhcmUgc2V0IHRvIHRoYXQgZGlyZWN0b3J5IGFuZAogaXQgaXMgYWxzbyBjaGVja2VkIGZvciBzaXRlLXBhY2thZ2VzIGFuZCBzaXRlLXB5dGhvbiAoc3lzLmJhc2VfcHJlZml4IGFuZApAQCAtOTYsNyArOTksMTEgQEAKIDptb2Q6YHNpdGVjdXN0b21pemVgLCB3aGljaCBjYW4gcGVyZm9ybSBhcmJpdHJhcnkgc2l0ZS1zcGVjaWZpYyBjdXN0b21pemF0aW9ucy4KIEl0IGlzIHR5cGljYWxseSBjcmVhdGVkIGJ5IGEgc3lzdGVtIGFkbWluaXN0cmF0b3IgaW4gdGhlIHNpdGUtcGFja2FnZXMKIGRpcmVjdG9yeS4gIElmIHRoaXMgaW1wb3J0IGZhaWxzIHdpdGggYW4gOmV4YzpgSW1wb3J0RXJyb3JgIGV4Y2VwdGlvbiwgaXQgaXMKLXNpbGVudGx5IGlnbm9yZWQuCitzaWxlbnRseSBpZ25vcmVkLiAgSWYgUHl0aG9uIGlzIHN0YXJ0ZWQgd2l0aG91dCBvdXRwdXQgc3RyZWFtcyBhdmFpbGFibGUsIGFzCit3aXRoIDpmaWxlOmBweXRob253LmV4ZWAgb24gV2luZG93cyAod2hpY2ggaXMgdXNlZCBieSBkZWZhdWx0IHRvIHN0YXJ0IElETEUpLAorYXR0ZW1wdGVkIG91dHB1dCBmcm9tIDptb2Q6YHNpdGVjdXN0b21pemVgIGlzIGlnbm9yZWQuIEFueSBleGNlcHRpb24gb3RoZXIKK3RoYW4gOmV4YzpgSW1wb3J0RXJyb3JgIGNhdXNlcyBhIHNpbGVudCBhbmQgcGVyaGFwcyBteXN0ZXJpb3VzIGZhaWx1cmUgb2YgdGhlCitwcm9jZXNzLgogCiAuLiBpbmRleDo6IG1vZHVsZTogdXNlcmN1c3RvbWl6ZQogCkBAIC0xMTEsNiArMTE4LDI3IEBACiA6bW9kOmBzaXRlY3VzdG9taXplYCBhbmQgOm1vZDpgdXNlcmN1c3RvbWl6ZWAgaXMgc3RpbGwgYXR0ZW1wdGVkLgogCiAKKy4uIF9ybGNvbXBsZXRlci1jb25maWc6CisKK1JlYWRsaW5lIGNvbmZpZ3VyYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworT24gc3lzdGVtcyB0aGF0IHN1cHBvcnQgOm1vZDpgcmVhZGxpbmVgLCB0aGlzIG1vZHVsZSB3aWxsIGFsc28gaW1wb3J0IGFuZAorY29uZmlndXJlIHRoZSA6bW9kOmBybGNvbXBsZXRlcmAgbW9kdWxlLCBpZiBQeXRob24gaXMgc3RhcnRlZCBpbgorOnJlZjpgaW50ZXJhY3RpdmUgbW9kZSA8dHV0LWludGVyYWN0aXZlPmAgYW5kIHdpdGhvdXQgdGhlIDpvcHRpb246YC1TYCBvcHRpb24uCitUaGUgZGVmYXVsdCBiZWhhdmlvciBpcyBlbmFibGUgdGFiLWNvbXBsZXRpb24gYW5kIHRvIHVzZQorOmZpbGU6YH4vLnB5dGhvbl9oaXN0b3J5YCBhcyB0aGUgaGlzdG9yeSBzYXZlIGZpbGUuICBUbyBkaXNhYmxlIGl0LCBkZWxldGUgKG9yCitvdmVycmlkZSkgdGhlIDpkYXRhOmBzeXMuX19pbnRlcmFjdGl2ZWhvb2tfX2AgYXR0cmlidXRlIGluIHlvdXIKKzptb2Q6YHNpdGVjdXN0b21pemVgIG9yIDptb2Q6YHVzZXJjdXN0b21pemVgIG1vZHVsZSBvciB5b3VyCis6ZW52dmFyOmBQWVRIT05TVEFSVFVQYCBmaWxlLgorCisuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgQWN0aXZhdGlvbiBvZiBybGNvbXBsZXRlciBhbmQgaGlzdG9yeSB3YXMgbWFkZSBhdXRvbWF0aWMuCisKKworTW9kdWxlIGNvbnRlbnRzCistLS0tLS0tLS0tLS0tLS0KKwogLi4gZGF0YTo6IFBSRUZJWEVTCiAKICAgIEEgbGlzdCBvZiBwcmVmaXhlcyBmb3Igc2l0ZS1wYWNrYWdlcyBkaXJlY3Rvcmllcy4KQEAgLTE1MywxMSArMTgxLDEwIEBACiAKICAgIEFkZHMgYWxsIHRoZSBzdGFuZGFyZCBzaXRlLXNwZWNpZmljIGRpcmVjdG9yaWVzIHRvIHRoZSBtb2R1bGUgc2VhcmNoCiAgICBwYXRoLiAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXV0b21hdGljYWxseSB3aGVuIHRoaXMgbW9kdWxlIGlzIGltcG9ydGVkLAotICAgdW5sZXNzIHRoZSA6cHJvZ3JhbTpgcHl0aG9uYCBpbnRlcnByZXRlciB3YXMgc3RhcnRlZCB3aXRoIHRoZSA6b3B0aW9uOmAtU2AKLSAgIGZsYWcuCisgICB1bmxlc3MgdGhlIFB5dGhvbiBpbnRlcnByZXRlciB3YXMgc3RhcnRlZCB3aXRoIHRoZSA6b3B0aW9uOmAtU2AgZmxhZy4KIAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKLSAgICAgIFRoaXMgZnVuY3Rpb24gdXNlZCB0byBiZSBjYWxsZWQgdW5jb25kaXRpb25uYWxseS4KKyAgICAgIFRoaXMgZnVuY3Rpb24gdXNlZCB0byBiZSBjYWxsZWQgdW5jb25kaXRpb25hbGx5LgogCiAKIC4uIGZ1bmN0aW9uOjogYWRkc2l0ZWRpcihzaXRlZGlyLCBrbm93bl9wYXRocz1Ob25lKQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvc210cGQucnN0IGIvRG9jL2xpYnJhcnkvc210cGQucnN0CmluZGV4IGYzMDU4MTguLjNlYmVkMDYgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3NtdHBkLnJzdAorKysgYi9Eb2MvbGlicmFyeS9zbXRwZC5yc3QKQEAgLTI3LDcgKzI3LDggQEAKIC0tLS0tLS0tLS0tLS0tLS0tLQogCiAKLS4uIGNsYXNzOjogU01UUFNlcnZlcihsb2NhbGFkZHIsIHJlbW90ZWFkZHIsIGRhdGFfc2l6ZV9saW1pdD0zMzU1NDQzMikKKy4uIGNsYXNzOjogU01UUFNlcnZlcihsb2NhbGFkZHIsIHJlbW90ZWFkZHIsIGRhdGFfc2l6ZV9saW1pdD0zMzU1NDQzMixcCisgICAgICAgICAgICAgICAgICAgICAgbWFwPU5vbmUpCiAKICAgIENyZWF0ZSBhIG5ldyA6Y2xhc3M6YFNNVFBTZXJ2ZXJgIG9iamVjdCwgd2hpY2ggYmluZHMgdG8gbG9jYWwgYWRkcmVzcwogICAgKmxvY2FsYWRkciouICBJdCB3aWxsIHRyZWF0ICpyZW1vdGVhZGRyKiBhcyBhbiB1cHN0cmVhbSBTTVRQIHJlbGF5ZXIuICBJdApAQCAtMzgsNiArMzksOCBAQAogICAgYWNjZXB0ZWQgaW4gYSBgYERBVEFgYCBjb21tYW5kLiAgQSB2YWx1ZSBvZiBgYE5vbmVgYCBvciBgYDBgYCBtZWFucyBubwogICAgbGltaXQuCiAKKyAgIEEgZGljdGlvbmFyeSBjYW4gYmUgc3BlY2lmaWVkIGluICptYXAqIHRvIGF2b2lkIHVzaW5nIGEgZ2xvYmFsIHNvY2tldCBtYXAuCisKICAgIC4uIG1ldGhvZDo6IHByb2Nlc3NfbWVzc2FnZShwZWVyLCBtYWlsZnJvbSwgcmNwdHRvcywgZGF0YSkKIAogICAgICAgUmFpc2UgOmV4YzpgTm90SW1wbGVtZW50ZWRFcnJvcmAgZXhjZXB0aW9uLiBPdmVycmlkZSB0aGlzIGluIHN1YmNsYXNzZXMgdG8KQEAgLTUzLDYgKzU2LDkgQEAKICAgICAgIE92ZXJyaWRlIHRoaXMgaW4gc3ViY2xhc3NlcyB0byB1c2UgYSBjdXN0b20gOmNsYXNzOmBTTVRQQ2hhbm5lbGAgZm9yCiAgICAgICBtYW5hZ2luZyBTTVRQIGNsaWVudHMuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgKm1hcCogYXJndW1lbnQgd2FzIGFkZGVkLgorCiAKIERlYnVnZ2luZ1NlcnZlciBPYmplY3RzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtOTAsMTEgKzk2LDIwIEBACiBTTVRQQ2hhbm5lbCBPYmplY3RzCiAtLS0tLS0tLS0tLS0tLS0tLS0tCiAKLS4uIGNsYXNzOjogU01UUENoYW5uZWwoc2VydmVyLCBjb25uLCBhZGRyKQorLi4gY2xhc3M6OiBTTVRQQ2hhbm5lbChzZXJ2ZXIsIGNvbm4sIGFkZHIsIGRhdGFfc2l6ZV9saW1pdD0zMzU1NDQzMixcCisgICAgICAgICAgICAgICAgICAgICAgIG1hcD1Ob25lKSkKIAogICAgQ3JlYXRlIGEgbmV3IDpjbGFzczpgU01UUENoYW5uZWxgIG9iamVjdCB3aGljaCBtYW5hZ2VzIHRoZSBjb21tdW5pY2F0aW9uCiAgICBiZXR3ZWVuIHRoZSBzZXJ2ZXIgYW5kIGEgc2luZ2xlIFNNVFAgY2xpZW50LgogCisgICAqY29ubiogYW5kICphZGRyKiBhcmUgYXMgcGVyIHRoZSBpbnN0YW5jZSB2YXJpYWJsZXMgZGVzY3JpYmVkIGJlbG93LgorCisgICAqZGF0YV9zaXplX2xpbWl0KiBzcGVjaWZpZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRoYXQgd2lsbCBiZQorICAgYWNjZXB0ZWQgaW4gYSBgYERBVEFgYCBjb21tYW5kLiAgQSB2YWx1ZSBvZiBgYE5vbmVgYCBvciBgYDBgYCBtZWFucyBubworICAgbGltaXQuCisKKyAgIEEgZGljdGlvbmFyeSBjYW4gYmUgc3BlY2lmaWVkIGluICptYXAqIHRvIGF2b2lkIHVzaW5nIGEgZ2xvYmFsIHNvY2tldCBtYXAuCisKICAgIFRvIHVzZSBhIGN1c3RvbSBTTVRQQ2hhbm5lbCBpbXBsZW1lbnRhdGlvbiB5b3UgbmVlZCB0byBvdmVycmlkZSB0aGUKICAgIDphdHRyOmBTTVRQU2VydmVyLmNoYW5uZWxfY2xhc3NgIG9mIHlvdXIgOmNsYXNzOmBTTVRQU2VydmVyYC4KIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvc210cGxpYi5yc3QgYi9Eb2MvbGlicmFyeS9zbXRwbGliLnJzdAppbmRleCBhZGRjNmJlLi5iODdhZDVmIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9zbXRwbGliLnJzdAorKysgYi9Eb2MvbGlicmFyeS9zbXRwbGliLnJzdApAQCAtMjIsNyArMjIsNyBAQAogCiAuLiBjbGFzczo6IFNNVFAoaG9zdD0nJywgcG9ydD0wLCBsb2NhbF9ob3N0bmFtZT1Ob25lWywgdGltZW91dF0sIHNvdXJjZV9hZGRyZXNzPU5vbmUpCiAKLSAgIEEgOmNsYXNzOmBTTVRQYCBpbnN0YW5jZSBlbmNhcHN1bGF0ZXMgYW4gU01UUCBjb25uZWN0aW9uLiAgSXQgaGFzIG1ldGhvZHMKKyAgIEFuIDpjbGFzczpgU01UUGAgaW5zdGFuY2UgZW5jYXBzdWxhdGVzIGFuIFNNVFAgY29ubmVjdGlvbi4gIEl0IGhhcyBtZXRob2RzCiAgICB0aGF0IHN1cHBvcnQgYSBmdWxsIHJlcGVydG9pcmUgb2YgU01UUCBhbmQgRVNNVFAgb3BlcmF0aW9ucy4gSWYgdGhlIG9wdGlvbmFsCiAgICBob3N0IGFuZCBwb3J0IHBhcmFtZXRlcnMgYXJlIGdpdmVuLCB0aGUgU01UUCA6bWV0aDpgY29ubmVjdGAgbWV0aG9kIGlzCiAgICBjYWxsZWQgd2l0aCB0aG9zZSBwYXJhbWV0ZXJzIGR1cmluZyBpbml0aWFsaXphdGlvbi4gIElmIHNwZWNpZmllZCwKQEAgLTMyLDcgKzMyLDggQEAKICAgIHRoYW4gYSBzdWNjZXNzIGNvZGUsIGFuIDpleGM6YFNNVFBDb25uZWN0RXJyb3JgIGlzIHJhaXNlZC4gVGhlIG9wdGlvbmFsCiAgICAqdGltZW91dCogcGFyYW1ldGVyIHNwZWNpZmllcyBhIHRpbWVvdXQgaW4gc2Vjb25kcyBmb3IgYmxvY2tpbmcgb3BlcmF0aW9ucwogICAgbGlrZSB0aGUgY29ubmVjdGlvbiBhdHRlbXB0IChpZiBub3Qgc3BlY2lmaWVkLCB0aGUgZ2xvYmFsIGRlZmF1bHQgdGltZW91dAotICAgc2V0dGluZyB3aWxsIGJlIHVzZWQpLiBUaGUgb3B0aW9uYWwgc291cmNlX2FkZHJlc3MgcGFyYW1ldGVyIGFsbG93cyB0byBiaW5kCisgICBzZXR0aW5nIHdpbGwgYmUgdXNlZCkuICBJZiB0aGUgdGltZW91dCBleHBpcmVzLCA6ZXhjOmBzb2NrZXQudGltZW91dGAgaXMKKyAgIHJhaXNlZC4gIFRoZSBvcHRpb25hbCBzb3VyY2VfYWRkcmVzcyBwYXJhbWV0ZXIgYWxsb3dzIHRvIGJpbmQKICAgIHRvIHNvbWUgc3BlY2lmaWMgc291cmNlIGFkZHJlc3MgaW4gYSBtYWNoaW5lIHdpdGggbXVsdGlwbGUgbmV0d29yawogICAgaW50ZXJmYWNlcywgYW5kL29yIHRvIHNvbWUgc3BlY2lmaWMgc291cmNlIFRDUCBwb3J0LiBJdCB0YWtlcyBhIDItdHVwbGUKICAgIChob3N0LCBwb3J0KSwgZm9yIHRoZSBzb2NrZXQgdG8gYmluZCB0byBhcyBpdHMgc291cmNlIGFkZHJlc3MgYmVmb3JlCkBAIC02NCwyNSArNjUsMjAgQEAKICAgICAgICAgICAgICAgICAgICAgY2VydGZpbGU9Tm9uZSBbLCB0aW1lb3V0XSwgY29udGV4dD1Ob25lLCBcCiAgICAgICAgICAgICAgICAgICAgIHNvdXJjZV9hZGRyZXNzPU5vbmUpCiAKLSAgIEEgOmNsYXNzOmBTTVRQX1NTTGAgaW5zdGFuY2UgYmVoYXZlcyBleGFjdGx5IHRoZSBzYW1lIGFzIGluc3RhbmNlcyBvZgorICAgQW4gOmNsYXNzOmBTTVRQX1NTTGAgaW5zdGFuY2UgYmVoYXZlcyBleGFjdGx5IHRoZSBzYW1lIGFzIGluc3RhbmNlcyBvZgogICAgOmNsYXNzOmBTTVRQYC4gOmNsYXNzOmBTTVRQX1NTTGAgc2hvdWxkIGJlIHVzZWQgZm9yIHNpdHVhdGlvbnMgd2hlcmUgU1NMIGlzCiAgICByZXF1aXJlZCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGNvbm5lY3Rpb24gYW5kIHVzaW5nIDptZXRoOmBzdGFydHRsc2AgaXMKICAgIG5vdCBhcHByb3ByaWF0ZS4gSWYgKmhvc3QqIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBsb2NhbCBob3N0IGlzIHVzZWQuIElmCiAgICAqcG9ydCogaXMgemVybywgdGhlIHN0YW5kYXJkIFNNVFAtb3Zlci1TU0wgcG9ydCAoNDY1KSBpcyB1c2VkLiAgVGhlIG9wdGlvbmFsCi0gICBhcmd1bWVudHMgKmxvY2FsX2hvc3RuYW1lKiBhbmQgKnNvdXJjZV9hZGRyZXNzKiBoYXZlIHRoZSBzYW1lIG1lYW5pbmcgYXMKLSAgIHRoZXkgZG8gaW4gdGhlIDpjbGFzczpgU01UUGAgY2xhc3MuICAqa2V5ZmlsZSogYW5kICpjZXJ0ZmlsZSogYXJlIGFsc28KLSAgIG9wdGlvbmFsLCBhbmQgY2FuIGNvbnRhaW4gYSBQRU0gZm9ybWF0dGVkIHByaXZhdGUga2V5IGFuZCBjZXJ0aWZpY2F0ZSBjaGFpbgotICAgZmlsZSBmb3IgdGhlIFNTTCBjb25uZWN0aW9uLiAqY29udGV4dCogYWxzbyBvcHRpb25hbCwgY2FuIGNvbnRhaW4gYQotICAgU1NMQ29udGV4dCwgYW5kIGlzIGFuIGFsdGVybmF0aXZlIHRvIGtleWZpbGUgYW5kIGNlcnRmaWxlOyBJZiBpdCBpcwotICAgc3BlY2lmaWVkIGJvdGgga2V5ZmlsZSBhbmQgY2VydGZpbGUgbXVzdCBiZSBOb25lLiAgVGhlIG9wdGlvbmFsICp0aW1lb3V0KgotICAgcGFyYW1ldGVyIHNwZWNpZmllcyBhIHRpbWVvdXQgaW4gc2Vjb25kcyBmb3IgYmxvY2tpbmcgb3BlcmF0aW9ucyBsaWtlIHRoZQotICAgY29ubmVjdGlvbiBhdHRlbXB0IChpZiBub3Qgc3BlY2lmaWVkLCB0aGUgZ2xvYmFsIGRlZmF1bHQgdGltZW91dCBzZXR0aW5nCi0gICB3aWxsIGJlIHVzZWQpLiBUaGUgb3B0aW9uYWwgc291cmNlX2FkZHJlc3MgcGFyYW1ldGVyIGFsbG93cyB0byBiaW5kIHRvIHNvbWUKLSAgIHNwZWNpZmljIHNvdXJjZSBhZGRyZXNzIGluIGEgbWFjaGluZSB3aXRoIG11bHRpcGxlIG5ldHdvcmsgaW50ZXJmYWNlcywKLSAgIGFuZC9vciB0byBzb21lIHNwZWNpZmljIHNvdXJjZSB0Y3AgcG9ydC4gSXQgdGFrZXMgYSAyLXR1cGxlIChob3N0LCBwb3J0KSwKLSAgIGZvciB0aGUgc29ja2V0IHRvIGJpbmQgdG8gYXMgaXRzIHNvdXJjZSBhZGRyZXNzIGJlZm9yZSBjb25uZWN0aW5nLiBJZgotICAgb21pdHRlZCAob3IgaWYgaG9zdCBvciBwb3J0IGFyZSBgYCcnYGAgYW5kL29yIDAgcmVzcGVjdGl2ZWx5KSB0aGUgT1MgZGVmYXVsdAotICAgYmVoYXZpb3Igd2lsbCBiZSB1c2VkLgorICAgYXJndW1lbnRzICpsb2NhbF9ob3N0bmFtZSosICp0aW1lb3V0KiBhbmQgKnNvdXJjZV9hZGRyZXNzKiBoYXZlIHRoZSBzYW1lCisgICBtZWFuaW5nIGFzIHRoZXkgZG8gaW4gdGhlIDpjbGFzczpgU01UUGAgY2xhc3MuICAqY29udGV4dCosIGFsc28gb3B0aW9uYWwsCisgICBjYW4gY29udGFpbiBhIDpjbGFzczpgfnNzbC5TU0xDb250ZXh0YCBhbmQgYWxsb3dzIHRvIGNvbmZpZ3VyZSB2YXJpb3VzCisgICBhc3BlY3RzIG9mIHRoZSBzZWN1cmUgY29ubmVjdGlvbi4gIFBsZWFzZSByZWFkIDpyZWY6YHNzbC1zZWN1cml0eWAgZm9yCisgICBiZXN0IHByYWN0aWNlcy4KKworICAgKmtleWZpbGUqIGFuZCAqY2VydGZpbGUqIGFyZSBhIGxlZ2FjeSBhbHRlcm5hdGl2ZSB0byAqY29udGV4dCosIGFuZCBjYW4KKyAgIHBvaW50IHRvIGEgUEVNIGZvcm1hdHRlZCBwcml2YXRlIGtleSBhbmQgY2VydGlmaWNhdGUgY2hhaW4gZmlsZSBmb3IgdGhlCisgICBTU0wgY29ubmVjdGlvbi4KIAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKICAgICAgICpjb250ZXh0KiB3YXMgYWRkZWQuCkBAIC05MCw2ICs4NiwxMCBAQAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKICAgICAgIHNvdXJjZV9hZGRyZXNzIGFyZ3VtZW50IHdhcyBhZGRlZC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSBjbGFzcyBub3cgc3VwcG9ydHMgaG9zdG5hbWUgY2hlY2sgd2l0aAorICAgICAgOmF0dHI6YHNzbC5TU0xDb250ZXh0LmNoZWNrX2hvc3RuYW1lYCBhbmQgKlNlcnZlciBOYW1lIEluZGljYXRpb24qIChzZWUKKyAgICAgIDpkYXRhOmBzc2wuSEFTX1NOSWApLgogCiAuLiBjbGFzczo6IExNVFAoaG9zdD0nJywgcG9ydD1MTVRQX1BPUlQsIGxvY2FsX2hvc3RuYW1lPU5vbmUsIHNvdXJjZV9hZGRyZXNzPU5vbmUpCiAKQEAgLTExMCw4ICsxMTAsMTEgQEAKIAogLi4gZXhjZXB0aW9uOjogU01UUEV4Y2VwdGlvbgogCi0gICBUaGUgYmFzZSBleGNlcHRpb24gY2xhc3MgZm9yIGFsbCB0aGUgb3RoZXIgZXhjZXB0aW9ucyBwcm92aWRlZCBieSB0aGlzCi0gICBtb2R1bGUuCisgICBTdWJjbGFzcyBvZiA6ZXhjOmBPU0Vycm9yYCB0aGF0IGlzIHRoZSBiYXNlIGV4Y2VwdGlvbiBjbGFzcyBmb3IgYWxsCisgICB0aGUgb3RoZXIgZXhjZXB0aW9ucyBwcm92aWRlZCBieSB0aGlzIG1vZHVsZS4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFNNVFBFeGNlcHRpb24gYmVjYW1lIHN1YmNsYXNzIG9mIDpleGM6YE9TRXJyb3JgCiAKIAogLi4gZXhjZXB0aW9uOjogU01UUFNlcnZlckRpc2Nvbm5lY3RlZApAQCAtMzE2LDYgKzMxOSwxMSBAQAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKICAgICAgICpjb250ZXh0KiB3YXMgYWRkZWQuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgbWV0aG9kIG5vdyBzdXBwb3J0cyBob3N0bmFtZSBjaGVjayB3aXRoCisgICAgICA6YXR0cjpgU1NMQ29udGV4dC5jaGVja19ob3N0bmFtZWAgYW5kICpTZXJ2ZXIgTmFtZSBJbmRpY2F0b3IqIChzZWUKKyAgICAgIDpkYXRhOmB+c3NsLkhBU19TTklgKS4KKwogCiAuLiBtZXRob2Q6OiBTTVRQLnNlbmRtYWlsKGZyb21fYWRkciwgdG9fYWRkcnMsIG1zZywgbWFpbF9vcHRpb25zPVtdLCByY3B0X29wdGlvbnM9W10pCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3NvY2tldC5yc3QgYi9Eb2MvbGlicmFyeS9zb2NrZXQucnN0CmluZGV4IDNhNDllZWQuLjg1NzdjM2MgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3NvY2tldC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvc29ja2V0LnJzdApAQCAtNiw4ICs2LDcgQEAKIAogCiBUaGlzIG1vZHVsZSBwcm92aWRlcyBhY2Nlc3MgdG8gdGhlIEJTRCAqc29ja2V0KiBpbnRlcmZhY2UuIEl0IGlzIGF2YWlsYWJsZSBvbgotYWxsIG1vZGVybiBVbml4IHN5c3RlbXMsIFdpbmRvd3MsIE1hY09TLCBPUy8yLCBhbmQgcHJvYmFibHkgYWRkaXRpb25hbAotcGxhdGZvcm1zLgorYWxsIG1vZGVybiBVbml4IHN5c3RlbXMsIFdpbmRvd3MsIE1hY09TLCBhbmQgcHJvYmFibHkgYWRkaXRpb25hbCBwbGF0Zm9ybXMuCiAKIC4uIG5vdGU6OgogCkBAIC05MSw5ICs5MCw2IEBACiAgICAgSWYgKmFkZHJfdHlwZSogaXMgOmNvbnN0OmBUSVBDX0FERFJfSURgLCB0aGVuICp2MSogaXMgdGhlIG5vZGUsICp2MiogaXMgdGhlCiAgICAgcmVmZXJlbmNlLCBhbmQgKnYzKiBzaG91bGQgYmUgc2V0IHRvIDAuCiAKLSAgICBJZiAqYWRkcl90eXBlKiBpcyA6Y29uc3Q6YFRJUENfQUREUl9JRGAsIHRoZW4gKnYxKiBpcyB0aGUgbm9kZSwgKnYyKiBpcyB0aGUKLSAgICByZWZlcmVuY2UsIGFuZCAqdjMqIHNob3VsZCBiZSBzZXQgdG8gMC4KLQogLSBBIHR1cGxlIGBgKGludGVyZmFjZSwgKWBgIGlzIHVzZWQgZm9yIHRoZSA6Y29uc3Q6YEFGX0NBTmAgYWRkcmVzcyBmYW1pbHksCiAgIHdoZXJlICppbnRlcmZhY2UqIGlzIGEgc3RyaW5nIHJlcHJlc2VudGluZyBhIG5ldHdvcmsgaW50ZXJmYWNlIG5hbWUgbGlrZQogICBgYCdjYW4wJ2BgLiBUaGUgbmV0d29yayBpbnRlcmZhY2UgbmFtZSBgYCcnYGAgY2FuIGJlIHVzZWQgdG8gcmVjZWl2ZSBwYWNrZXRzCkBAIC0xMDcsNyArMTAzLDI5IEBACiAKICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKLS0gQ2VydGFpbiBvdGhlciBhZGRyZXNzIGZhbWlsaWVzICg6Y29uc3Q6YEFGX0JMVUVUT09USGAsIDpjb25zdDpgQUZfUEFDS0VUYCkKKy0gOmNvbnN0OmBBRl9CTFVFVE9PVEhgIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgcHJvdG9jb2xzIGFuZCBhZGRyZXNzCisgIGZvcm1hdHM6CisKKyAgLSA6Y29uc3Q6YEJUUFJPVE9fTDJDQVBgIGFjY2VwdHMgYGAoYmRhZGRyLCBwc20pYGAgd2hlcmUgYGBiZGFkZHJgYCBpcworICAgIHRoZSBCbHVldG9vdGggYWRkcmVzcyBhcyBhIHN0cmluZyBhbmQgYGBwc21gYCBpcyBhbiBpbnRlZ2VyLgorCisgIC0gOmNvbnN0OmBCVFBST1RPX1JGQ09NTWAgYWNjZXB0cyBgYChiZGFkZHIsIGNoYW5uZWwpYGAgd2hlcmUgYGBiZGFkZHJgYAorICAgIGlzIHRoZSBCbHVldG9vdGggYWRkcmVzcyBhcyBhIHN0cmluZyBhbmQgYGBjaGFubmVsYGAgaXMgYW4gaW50ZWdlci4KKworICAtIDpjb25zdDpgQlRQUk9UT19IQ0lgIGFjY2VwdHMgYGAoZGV2aWNlX2lkLClgYCB3aGVyZSBgYGRldmljZV9pZGBgIGlzCisgICAgZWl0aGVyIGFuIGludGVnZXIgb3IgYSBzdHJpbmcgd2l0aCB0aGUgQmx1ZXRvb3RoIGFkZHJlc3Mgb2YgdGhlCisgICAgaW50ZXJmYWNlLiAoVGhpcyBkZXBlbmRzIG9uIHlvdXIgT1M7IE5ldEJTRCBhbmQgRHJhZ29uRmx5QlNEIGV4cGVjdAorICAgIGEgQmx1ZXRvb3RoIGFkZHJlc3Mgd2hpbGUgZXZlcnl0aGluZyBlbHNlIGV4cGVjdHMgYW4gaW50ZWdlci4pCisKKyAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgorICAgICAgIE5ldEJTRCBhbmQgRHJhZ29uRmx5QlNEIHN1cHBvcnQgYWRkZWQuCisKKyAgLSA6Y29uc3Q6YEJUUFJPVE9fU0NPYCBhY2NlcHRzIGBgYmRhZGRyYGAgd2hlcmUgYGBiZGFkZHJgYCBpcyBhCisgICAgOmNsYXNzOmBieXRlc2Agb2JqZWN0IGNvbnRhaW5pbmcgdGhlIEJsdWV0b290aCBhZGRyZXNzIGluIGEKKyAgICBzdHJpbmcgZm9ybWF0LiAoZXguIGBgYicxMjoyMzozNDo0NTo1Njo2NydgYCkgVGhpcyBwcm90b2NvbCBpcyBub3QKKyAgICBzdXBwb3J0ZWQgdW5kZXIgRnJlZUJTRC4KKworLSBDZXJ0YWluIG90aGVyIGFkZHJlc3MgZmFtaWxpZXMgKDpjb25zdDpgQUZfUEFDS0VUYCwgOmNvbnN0OmBBRl9DQU5gKQogICBzdXBwb3J0IHNwZWNpZmljIHJlcHJlc2VudGF0aW9ucy4KIAogICAuLiBYWFggZG9jdW1lbnQgdGhlbSEKQEAgLTE5Myw2ICsyMTEsMTEgQEAKIENvbnN0YW50cwogXl5eXl5eXl5eCiAKKyAgIFRoZSBBRl8qIGFuZCBTT0NLXyogY29uc3RhbnRzIGFyZSBub3cgOmNsYXNzOmBBZGRyZXNzRmFtaWx5YCBhbmQKKyAgIDpjbGFzczpgU29ja2V0S2luZGAgOmNsYXNzOmAuSW50RW51bWAgY29sbGVjdGlvbnMuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiAuLiBkYXRhOjogQUZfVU5JWAogICAgICAgICAgIEFGX0lORVQKICAgICAgICAgICBBRl9JTkVUNgpAQCAtMjY0LDYgKzI4NywxNiBAQAogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKIAorLi4gZGF0YTo6IENBTl9CQ00KKyAgICAgICAgICBDQU5fQkNNXyoKKworICAgQ0FOX0JDTSwgaW4gdGhlIENBTiBwcm90b2NvbCBmYW1pbHksIGlzIHRoZSBicm9hZGNhc3QgbWFuYWdlciAoQkNNKSBwcm90b2NvbC4KKyAgIEJyb2FkY2FzdCBtYW5hZ2VyIGNvbnN0YW50cywgZG9jdW1lbnRlZCBpbiB0aGUgTGludXggZG9jdW1lbnRhdGlvbiwgYXJlIGFsc28KKyAgIGRlZmluZWQgaW4gdGhlIHNvY2tldCBtb2R1bGUuCisKKyAgIEF2YWlsYWJpbGl0eTogTGludXggPj0gMi42LjI1LgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKIAogLi4gZGF0YTo6IEFGX1JEUwogICAgICAgICAgIFBGX1JEUwpAQCAtMjkwLDEyICszMjMsMzMgQEAKICAgIFRJUEMgcmVsYXRlZCBjb25zdGFudHMsIG1hdGNoaW5nIHRoZSBvbmVzIGV4cG9ydGVkIGJ5IHRoZSBDIHNvY2tldCBBUEkuIFNlZQogICAgdGhlIFRJUEMgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KIAorLi4gZGF0YTo6IEFGX0xJTksKKworICBBdmFpbGFiaWxpdHk6IEJTRCwgT1NYLgorCisgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAogCiAuLiBkYXRhOjogaGFzX2lwdjYKIAogICAgVGhpcyBjb25zdGFudCBjb250YWlucyBhIGJvb2xlYW4gdmFsdWUgd2hpY2ggaW5kaWNhdGVzIGlmIElQdjYgaXMgc3VwcG9ydGVkIG9uCiAgICB0aGlzIHBsYXRmb3JtLgogCisuLiBkYXRhOjogQkRBRERSX0FOWQorICAgICAgICAgIEJEQUREUl9MT0NBTAorCisgICBUaGVzZSBhcmUgc3RyaW5nIGNvbnN0YW50cyBjb250YWluaW5nIEJsdWV0b290aCBhZGRyZXNzZXMgd2l0aCBzcGVjaWFsCisgICBtZWFuaW5ncy4gRm9yIGV4YW1wbGUsIDpjb25zdDpgQkRBRERSX0FOWWAgY2FuIGJlIHVzZWQgdG8gaW5kaWNhdGUKKyAgIGFueSBhZGRyZXNzIHdoZW4gc3BlY2lmeWluZyB0aGUgYmluZGluZyBzb2NrZXQgd2l0aAorICAgOmNvbnN0OmBCVFBST1RPX1JGQ09NTWAuCisKKy4uIGRhdGE6OiBIQ0lfRklMVEVSCisgICAgICAgICAgSENJX1RJTUVfU1RBTVAKKyAgICAgICAgICBIQ0lfREFUQV9ESVIKKworICAgRm9yIHVzZSB3aXRoIDpjb25zdDpgQlRQUk9UT19IQ0lgLiA6Y29uc3Q6YEhDSV9GSUxURVJgIGlzIG5vdAorICAgYXZhaWxhYmxlIGZvciBOZXRCU0Qgb3IgRHJhZ29uRmx5QlNELiA6Y29uc3Q6YEhDSV9USU1FX1NUQU1QYCBhbmQKKyAgIDpjb25zdDpgSENJX0RBVEFfRElSYCBhcmUgbm90IGF2YWlsYWJsZSBmb3IgRnJlZUJTRCwgTmV0QlNELCBvcgorICAgRHJhZ29uRmx5QlNELgogCiBGdW5jdGlvbnMKIF5eXl5eXl5eXgpAQCAtMzA2LDIwICszNjAsMzMgQEAKIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFsbCBjcmVhdGUgOnJlZjpgc29ja2V0IG9iamVjdHMgPHNvY2tldC1vYmplY3RzPmAuCiAKIAotLi4gZnVuY3Rpb246OiBzb2NrZXQoW2ZhbWlseVssIHR5cGVbLCBwcm90b11dXSkKKy4uIGZ1bmN0aW9uOjogc29ja2V0KGZhbWlseT1BRl9JTkVULCB0eXBlPVNPQ0tfU1RSRUFNLCBwcm90bz0wLCBmaWxlbm89Tm9uZSkKIAogICAgQ3JlYXRlIGEgbmV3IHNvY2tldCB1c2luZyB0aGUgZ2l2ZW4gYWRkcmVzcyBmYW1pbHksIHNvY2tldCB0eXBlIGFuZCBwcm90b2NvbAogICAgbnVtYmVyLiAgVGhlIGFkZHJlc3MgZmFtaWx5IHNob3VsZCBiZSA6Y29uc3Q6YEFGX0lORVRgICh0aGUgZGVmYXVsdCksCiAgICA6Y29uc3Q6YEFGX0lORVQ2YCwgOmNvbnN0OmBBRl9VTklYYCwgOmNvbnN0OmBBRl9DQU5gIG9yIDpjb25zdDpgQUZfUkRTYC4gVGhlCiAgICBzb2NrZXQgdHlwZSBzaG91bGQgYmUgOmNvbnN0OmBTT0NLX1NUUkVBTWAgKHRoZSBkZWZhdWx0KSwKICAgIDpjb25zdDpgU09DS19ER1JBTWAsIDpjb25zdDpgU09DS19SQVdgIG9yIHBlcmhhcHMgb25lIG9mIHRoZSBvdGhlciBgYFNPQ0tfYGAKLSAgIGNvbnN0YW50cy4gVGhlIHByb3RvY29sIG51bWJlciBpcyB1c3VhbGx5IHplcm8gYW5kIG1heSBiZSBvbWl0dGVkIGluIHRoYXQKLSAgIGNhc2Ugb3IgOmNvbnN0OmBDQU5fUkFXYCBpbiBjYXNlIHRoZSBhZGRyZXNzIGZhbWlseSBpcyA6Y29uc3Q6YEFGX0NBTmAuCisgICBjb25zdGFudHMuIFRoZSBwcm90b2NvbCBudW1iZXIgaXMgdXN1YWxseSB6ZXJvIGFuZCBtYXkgYmUgb21pdHRlZCBvciBpbiB0aGUKKyAgIGNhc2Ugd2hlcmUgdGhlIGFkZHJlc3MgZmFtaWx5IGlzIDpjb25zdDpgQUZfQ0FOYCB0aGUgcHJvdG9jb2wgc2hvdWxkIGJlIG9uZQorICAgb2YgOmNvbnN0OmBDQU5fUkFXYCBvciA6Y29uc3Q6YENBTl9CQ01gLiAgSWYgKmZpbGVubyogaXMgc3BlY2lmaWVkLCB0aGUgb3RoZXIKKyAgIGFyZ3VtZW50cyBhcmUgaWdub3JlZCwgY2F1c2luZyB0aGUgc29ja2V0IHdpdGggdGhlIHNwZWNpZmllZCBmaWxlIGRlc2NyaXB0b3IKKyAgIHRvIHJldHVybi4gIFVubGlrZSA6ZnVuYzpgc29ja2V0LmZyb21mZGAsICpmaWxlbm8qIHdpbGwgcmV0dXJuIHRoZSBzYW1lCisgICBzb2NrZXQgYW5kIG5vdCBhIGR1cGxpY2F0ZS4gVGhpcyBtYXkgaGVscCBjbG9zZSBhIGRldGFjaGVkIHNvY2tldCB1c2luZworICAgOm1ldGg6YHNvY2tldC5jbG9zZSgpYC4KKworICAgVGhlIG5ld2x5IGNyZWF0ZWQgc29ja2V0IGlzIDpyZWY6YG5vbi1pbmhlcml0YWJsZSA8ZmRfaW5oZXJpdGFuY2U+YC4KIAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKICAgICAgIFRoZSBBRl9DQU4gZmFtaWx5IHdhcyBhZGRlZC4KICAgICAgIFRoZSBBRl9SRFMgZmFtaWx5IHdhcyBhZGRlZC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgICBUaGUgQ0FOX0JDTSBwcm90b2NvbCB3YXMgYWRkZWQuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgcmV0dXJuZWQgc29ja2V0IGlzIG5vdyBub24taW5oZXJpdGFibGUuCisKIAogLi4gZnVuY3Rpb246OiBzb2NrZXRwYWlyKFtmYW1pbHlbLCB0eXBlWywgcHJvdG9dXV0pCiAKQEAgLTMyOSwxMCArMzk2LDE1IEBACiAgICBpZiBkZWZpbmVkIG9uIHRoZSBwbGF0Zm9ybTsgb3RoZXJ3aXNlLCB0aGUgZGVmYXVsdCBpcyA6Y29uc3Q6YEFGX0lORVRgLgogICAgQXZhaWxhYmlsaXR5OiBVbml4LgogCisgICBUaGUgbmV3bHkgY3JlYXRlZCBzb2NrZXRzIGFyZSA6cmVmOmBub24taW5oZXJpdGFibGUgPGZkX2luaGVyaXRhbmNlPmAuCisKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCiAgICAgICBUaGUgcmV0dXJuZWQgc29ja2V0IG9iamVjdHMgbm93IHN1cHBvcnQgdGhlIHdob2xlIHNvY2tldCBBUEksIHJhdGhlcgogICAgICAgdGhhbiBhIHN1YnNldC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSByZXR1cm5lZCBzb2NrZXRzIGFyZSBub3cgbm9uLWluaGVyaXRhYmxlLgorCiAKIC4uIGZ1bmN0aW9uOjogY3JlYXRlX2Nvbm5lY3Rpb24oYWRkcmVzc1ssIHRpbWVvdXRbLCBzb3VyY2VfYWRkcmVzc11dKQogCkBAIC0zNjAsNyArNDMyLDcgQEAKICAgICAgIHN1cHBvcnQgZm9yIHRoZSA6a2V5d29yZDpgd2l0aGAgc3RhdGVtZW50IHdhcyBhZGRlZC4KIAogCi0uLiBmdW5jdGlvbjo6IGZyb21mZChmZCwgZmFtaWx5LCB0eXBlWywgcHJvdG9dKQorLi4gZnVuY3Rpb246OiBmcm9tZmQoZmQsIGZhbWlseSwgdHlwZSwgcHJvdG89MCkKIAogICAgRHVwbGljYXRlIHRoZSBmaWxlIGRlc2NyaXB0b3IgKmZkKiAoYW4gaW50ZWdlciBhcyByZXR1cm5lZCBieSBhIGZpbGUgb2JqZWN0J3MKICAgIDptZXRoOmBmaWxlbm9gIG1ldGhvZCkgYW5kIGJ1aWxkIGEgc29ja2V0IG9iamVjdCBmcm9tIHRoZSByZXN1bHQuICBBZGRyZXNzCkBAIC0zNzEsNiArNDQzLDExIEBACiAgICBhIHNvY2tldCBwYXNzZWQgdG8gYSBwcm9ncmFtIGFzIHN0YW5kYXJkIGlucHV0IG9yIG91dHB1dCAoc3VjaCBhcyBhIHNlcnZlcgogICAgc3RhcnRlZCBieSB0aGUgVW5peCBpbmV0IGRhZW1vbikuICBUaGUgc29ja2V0IGlzIGFzc3VtZWQgdG8gYmUgaW4gYmxvY2tpbmcgbW9kZS4KIAorICAgVGhlIG5ld2x5IGNyZWF0ZWQgc29ja2V0IGlzIDpyZWY6YG5vbi1pbmhlcml0YWJsZSA8ZmRfaW5oZXJpdGFuY2U+YC4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSByZXR1cm5lZCBzb2NrZXQgaXMgbm93IG5vbi1pbmhlcml0YWJsZS4KKwogCiAuLiBmdW5jdGlvbjo6IGZyb21zaGFyZShkYXRhKQogCkBAIC00MjYsMTIgKzUwMywxNCBAQAogICAgbWV0aG9kLgogCiAgICBUaGUgZm9sbG93aW5nIGV4YW1wbGUgZmV0Y2hlcyBhZGRyZXNzIGluZm9ybWF0aW9uIGZvciBhIGh5cG90aGV0aWNhbCBUQ1AKLSAgIGNvbm5lY3Rpb24gdG8gYGB3d3cucHl0aG9uLm9yZ2BgIG9uIHBvcnQgODAgKHJlc3VsdHMgbWF5IGRpZmZlciBvbiB5b3VyCisgICBjb25uZWN0aW9uIHRvIGBgZXhhbXBsZS5vcmdgYCBvbiBwb3J0IDgwIChyZXN1bHRzIG1heSBkaWZmZXIgb24geW91cgogICAgc3lzdGVtIGlmIElQdjYgaXNuJ3QgZW5hYmxlZCk6OgogCi0gICAgICA+Pj4gc29ja2V0LmdldGFkZHJpbmZvKCJ3d3cucHl0aG9uLm9yZyIsIDgwLCBwcm90bz1zb2NrZXQuU09MX1RDUCkKLSAgICAgIFsoMiwgMSwgNiwgJycsICgnODIuOTQuMTY0LjE2MicsIDgwKSksCi0gICAgICAgKDEwLCAxLCA2LCAnJywgKCcyMDAxOjg4ODoyMDAwOmQ6OmEyJywgODAsIDAsIDApKV0KKyAgICAgID4+PiBzb2NrZXQuZ2V0YWRkcmluZm8oImV4YW1wbGUub3JnIiwgODAsIHByb3RvPXNvY2tldC5JUFBST1RPX1RDUCkKKyAgICAgIFsoPEFkZHJlc3NGYW1pbHkuQUZfSU5FVDY6IDEwPiwgPFNvY2tldFR5cGUuU09DS19TVFJFQU06IDE+LAorICAgICAgIDYsICcnLCAoJzI2MDY6MjgwMDoyMjA6MToyNDg6MTg5MzoyNWM4OjE5NDYnLCA4MCwgMCwgMCkpLAorICAgICAgICg8QWRkcmVzc0ZhbWlseS5BRl9JTkVUOiAyPiwgPFNvY2tldFR5cGUuU09DS19TVFJFQU06IDE+LAorICAgICAgIDYsICcnLCAoJzkzLjE4NC4yMTYuMzQnLCA4MCkpXQogCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgogICAgICAgcGFyYW1ldGVycyBjYW4gbm93IGJlIHBhc3NlZCB1c2luZyBrZXl3b3JkIGFyZ3VtZW50cy4KQEAgLTQ3OCw3ICs1NTcsNyBAQAogICAgYWx3YXlzIGhvbGQuCiAKICAgIE5vdGU6IDpmdW5jOmBnZXRob3N0bmFtZWAgZG9lc24ndCBhbHdheXMgcmV0dXJuIHRoZSBmdWxseSBxdWFsaWZpZWQgZG9tYWluCi0gICBuYW1lOyB1c2UgYGBnZXRmcWRuKClgYCAoc2VlIGFib3ZlKS4KKyAgIG5hbWU7IHVzZSA6ZnVuYzpgZ2V0ZnFkbmAgZm9yIHRoYXQuCiAKIAogLi4gZnVuY3Rpb246OiBnZXRob3N0YnlhZGRyKGlwX2FkZHJlc3MpCkBAIC01OTgsNyArNjc3LDEwIEBACiAgICBib3RoIHRoZSB2YWx1ZSBvZiAqYWRkcmVzc19mYW1pbHkqIGFuZCB0aGUgdW5kZXJseWluZyBpbXBsZW1lbnRhdGlvbiBvZgogICAgOmM6ZnVuYzpgaW5ldF9wdG9uYC4KIAotICAgQXZhaWxhYmlsaXR5OiBVbml4IChtYXliZSBub3QgYWxsIHBsYXRmb3JtcykuCisgICBBdmFpbGFiaWxpdHk6IFVuaXggKG1heWJlIG5vdCBhbGwgcGxhdGZvcm1zKSwgV2luZG93cy4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFdpbmRvd3Mgc3VwcG9ydCBhZGRlZAogCiAKIC4uIGZ1bmN0aW9uOjogaW5ldF9udG9wKGFkZHJlc3NfZmFtaWx5LCBwYWNrZWRfaXApCkBAIC02MTEsMTAgKzY5MywxMyBAQAogCiAgICBTdXBwb3J0ZWQgdmFsdWVzIGZvciAqYWRkcmVzc19mYW1pbHkqIGFyZSBjdXJyZW50bHkgOmNvbnN0OmBBRl9JTkVUYCBhbmQKICAgIDpjb25zdDpgQUZfSU5FVDZgLiBJZiB0aGUgc3RyaW5nICpwYWNrZWRfaXAqIGlzIG5vdCB0aGUgY29ycmVjdCBsZW5ndGggZm9yIHRoZQotICAgc3BlY2lmaWVkIGFkZHJlc3MgZmFtaWx5LCA6ZXhjOmBWYWx1ZUVycm9yYCB3aWxsIGJlIHJhaXNlZC4gIEEKKyAgIHNwZWNpZmllZCBhZGRyZXNzIGZhbWlseSwgOmV4YzpgVmFsdWVFcnJvcmAgd2lsbCBiZSByYWlzZWQuCiAgICA6ZXhjOmBPU0Vycm9yYCBpcyByYWlzZWQgZm9yIGVycm9ycyBmcm9tIHRoZSBjYWxsIHRvIDpmdW5jOmBpbmV0X250b3BgLgogCi0gICBBdmFpbGFiaWxpdHk6IFVuaXggKG1heWJlIG5vdCBhbGwgcGxhdGZvcm1zKS4KKyAgIEF2YWlsYWJpbGl0eTogVW5peCAobWF5YmUgbm90IGFsbCBwbGF0Zm9ybXMpLCBXaW5kb3dzLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgV2luZG93cyBzdXBwb3J0IGFkZGVkCiAKIAogLi4KQEAgLTY3Nyw3ICs3NjIsNyBAQAogCiAuLiBmdW5jdGlvbjo6IHNldGhvc3RuYW1lKG5hbWUpCiAKLSAgIFNldCB0aGUgbWFjaGluZSdzIGhvc3RuYW1lIHRvICpuYW1lKi4gIFRoaXMgd2lsbCByYWlzZSBhCisgICBTZXQgdGhlIG1hY2hpbmUncyBob3N0bmFtZSB0byAqbmFtZSouICBUaGlzIHdpbGwgcmFpc2UgYW4KICAgIDpleGM6YE9TRXJyb3JgIGlmIHlvdSBkb24ndCBoYXZlIGVub3VnaCByaWdodHMuCiAKICAgIEF2YWlsYWJpbGl0eTogVW5peC4KQEAgLTcwOSw3ICs3OTQsNyBAQAogCiAuLiBmdW5jdGlvbjo6IGlmX2luZGV4dG9uYW1lKGlmX2luZGV4KQogCi0gICBSZXR1cm4gYSBuZXR3b3JrIGludGVyZmFjZSBuYW1lIGNvcnJlc3BvbmRpbmcgdG8gYQorICAgUmV0dXJuIGEgbmV0d29yayBpbnRlcmZhY2UgbmFtZSBjb3JyZXNwb25kaW5nIHRvIGFuCiAgICBpbnRlcmZhY2UgaW5kZXggbnVtYmVyLgogICAgOmV4YzpgT1NFcnJvcmAgaWYgbm8gaW50ZXJmYWNlIHdpdGggdGhlIGdpdmVuIGluZGV4IGV4aXN0cy4KIApAQCAtNzM1LDYgKzgyMCwxMSBAQAogICAgKm5ldyogc29ja2V0IG9iamVjdCB1c2FibGUgdG8gc2VuZCBhbmQgcmVjZWl2ZSBkYXRhIG9uIHRoZSBjb25uZWN0aW9uLCBhbmQKICAgICphZGRyZXNzKiBpcyB0aGUgYWRkcmVzcyBib3VuZCB0byB0aGUgc29ja2V0IG9uIHRoZSBvdGhlciBlbmQgb2YgdGhlIGNvbm5lY3Rpb24uCiAKKyAgIFRoZSBuZXdseSBjcmVhdGVkIHNvY2tldCBpcyA6cmVmOmBub24taW5oZXJpdGFibGUgPGZkX2luaGVyaXRhbmNlPmAuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgc29ja2V0IGlzIG5vdyBub24taW5oZXJpdGFibGUuCisKIAogLi4gbWV0aG9kOjogc29ja2V0LmJpbmQoYWRkcmVzcykKIApAQCAtNzg3LDYgKzg3NywxNiBAQAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCiAKIAorLi4gbWV0aG9kOjogc29ja2V0LmR1cCgpCisKKyAgIER1cGxpY2F0ZSB0aGUgc29ja2V0LgorCisgICBUaGUgbmV3bHkgY3JlYXRlZCBzb2NrZXQgaXMgOnJlZjpgbm9uLWluaGVyaXRhYmxlIDxmZF9pbmhlcml0YW5jZT5gLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVGhlIHNvY2tldCBpcyBub3cgbm9uLWluaGVyaXRhYmxlLgorCisKIC4uIG1ldGhvZDo6IHNvY2tldC5maWxlbm8oKQogCiAgICBSZXR1cm4gdGhlIHNvY2tldCdzIGZpbGUgZGVzY3JpcHRvciAoYSBzbWFsbCBpbnRlZ2VyKS4gIFRoaXMgaXMgdXNlZnVsIHdpdGgKQEAgLTc5Nyw2ICs4OTcsMTUgQEAKICAgIHRoaXMgbGltaXRhdGlvbi4KIAogCisuLiBtZXRob2Q6OiBzb2NrZXQuZ2V0X2luaGVyaXRhYmxlKCkKKworICAgR2V0IHRoZSA6cmVmOmBpbmhlcml0YWJsZSBmbGFnIDxmZF9pbmhlcml0YW5jZT5gIG9mIHRoZSBzb2NrZXQncyBmaWxlCisgICBkZXNjcmlwdG9yIG9yIHNvY2tldCdzIGhhbmRsZTogYGBUcnVlYGAgaWYgdGhlIHNvY2tldCBjYW4gYmUgaW5oZXJpdGVkIGluCisgICBjaGlsZCBwcm9jZXNzZXMsIGBgRmFsc2VgYCBpZiBpdCBjYW5ub3QuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIC4uIG1ldGhvZDo6IHNvY2tldC5nZXRwZWVybmFtZSgpCiAKICAgIFJldHVybiB0aGUgcmVtb3RlIGFkZHJlc3MgdG8gd2hpY2ggdGhlIHNvY2tldCBpcyBjb25uZWN0ZWQuICBUaGlzIGlzIHVzZWZ1bCB0bwpAQCAtODYwLDcgKzk2OSw3IEBACiAgICBpbnRlcnByZXRlZCB0aGUgc2FtZSB3YXkgYXMgYnkgdGhlIGJ1aWx0LWluIDpmdW5jOmBvcGVuYCBmdW5jdGlvbi4KIAogICAgVGhlIHNvY2tldCBtdXN0IGJlIGluIGJsb2NraW5nIG1vZGU7IGl0IGNhbiBoYXZlIGEgdGltZW91dCwgYnV0IHRoZSBmaWxlCi0gICBvYmplY3QncyBpbnRlcm5hbCBidWZmZXIgbWF5IGVuZCB1cCBpbiBhIGluY29uc2lzdGVudCBzdGF0ZSBpZiBhIHRpbWVvdXQKKyAgIG9iamVjdCdzIGludGVybmFsIGJ1ZmZlciBtYXkgZW5kIHVwIGluIGFuIGluY29uc2lzdGVudCBzdGF0ZSBpZiBhIHRpbWVvdXQKICAgIG9jY3Vycy4KIAogICAgQ2xvc2luZyB0aGUgZmlsZSBvYmplY3QgcmV0dXJuZWQgYnkgOm1ldGg6YG1ha2VmaWxlYCB3b24ndCBjbG9zZSB0aGUKQEAgLTEwNTMsNyArMTE2Miw4IEBACiAgICBTZW5kIG5vcm1hbCBhbmQgYW5jaWxsYXJ5IGRhdGEgdG8gdGhlIHNvY2tldCwgZ2F0aGVyaW5nIHRoZQogICAgbm9uLWFuY2lsbGFyeSBkYXRhIGZyb20gYSBzZXJpZXMgb2YgYnVmZmVycyBhbmQgY29uY2F0ZW5hdGluZyBpdAogICAgaW50byBhIHNpbmdsZSBtZXNzYWdlLiAgVGhlICpidWZmZXJzKiBhcmd1bWVudCBzcGVjaWZpZXMgdGhlCi0gICBub24tYW5jaWxsYXJ5IGRhdGEgYXMgYW4gaXRlcmFibGUgb2YgYnVmZmVyLWNvbXBhdGlibGUgb2JqZWN0cworICAgbm9uLWFuY2lsbGFyeSBkYXRhIGFzIGFuIGl0ZXJhYmxlIG9mCisgICA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RzIDxieXRlcy1saWtlIG9iamVjdD5gCiAgICAoZS5nLiA6Y2xhc3M6YGJ5dGVzYCBvYmplY3RzKTsgdGhlIG9wZXJhdGluZyBzeXN0ZW0gbWF5IHNldCBhIGxpbWl0CiAgICAoOmZ1bmM6YH5vcy5zeXNjb25mYCB2YWx1ZSBgYFNDX0lPVl9NQVhgYCkgb24gdGhlIG51bWJlciBvZiBidWZmZXJzCiAgICB0aGF0IGNhbiBiZSB1c2VkLiAgVGhlICphbmNkYXRhKiBhcmd1bWVudCBzcGVjaWZpZXMgdGhlIGFuY2lsbGFyeQpAQCAtMTA2MSw3ICsxMTcxLDcgQEAKICAgIGBgKGNtc2dfbGV2ZWwsIGNtc2dfdHlwZSwgY21zZ19kYXRhKWBgLCB3aGVyZSAqY21zZ19sZXZlbCogYW5kCiAgICAqY21zZ190eXBlKiBhcmUgaW50ZWdlcnMgc3BlY2lmeWluZyB0aGUgcHJvdG9jb2wgbGV2ZWwgYW5kCiAgICBwcm90b2NvbC1zcGVjaWZpYyB0eXBlIHJlc3BlY3RpdmVseSwgYW5kICpjbXNnX2RhdGEqIGlzIGEKLSAgIGJ1ZmZlci1jb21wYXRpYmxlIG9iamVjdCBob2xkaW5nIHRoZSBhc3NvY2lhdGVkIGRhdGEuICBOb3RlIHRoYXQKKyAgIGJ5dGVzLWxpa2Ugb2JqZWN0IGhvbGRpbmcgdGhlIGFzc29jaWF0ZWQgZGF0YS4gIE5vdGUgdGhhdAogICAgc29tZSBzeXN0ZW1zIChpbiBwYXJ0aWN1bGFyLCBzeXN0ZW1zIHdpdGhvdXQgOmZ1bmM6YENNU0dfU1BBQ0VgKQogICAgbWlnaHQgc3VwcG9ydCBzZW5kaW5nIG9ubHkgb25lIGNvbnRyb2wgbWVzc2FnZSBwZXIgY2FsbC4gIFRoZQogICAgKmZsYWdzKiBhcmd1bWVudCBkZWZhdWx0cyB0byAwIGFuZCBoYXMgdGhlIHNhbWUgbWVhbmluZyBhcyBmb3IKQEAgLTEwODMsNiArMTE5MywxNCBAQAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKIAorLi4gbWV0aG9kOjogc29ja2V0LnNldF9pbmhlcml0YWJsZShpbmhlcml0YWJsZSkKKworICAgU2V0IHRoZSA6cmVmOmBpbmhlcml0YWJsZSBmbGFnIDxmZF9pbmhlcml0YW5jZT5gIG9mIHRoZSBzb2NrZXQncyBmaWxlCisgICBkZXNjcmlwdG9yIG9yIHNvY2tldCdzIGhhbmRsZS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogLi4gbWV0aG9kOjogc29ja2V0LnNldGJsb2NraW5nKGZsYWcpCiAKICAgIFNldCBibG9ja2luZyBvciBub24tYmxvY2tpbmcgbW9kZSBvZiB0aGUgc29ja2V0OiBpZiAqZmxhZyogaXMgZmFsc2UsIHRoZQpAQCAtMTM2NCw3ICsxNDgyLDE2IEBACiAgICBzLmlvY3RsKHNvY2tldC5TSU9fUkNWQUxMLCBzb2NrZXQuUkNWQUxMX09GRikKIAogVGhlIGxhc3QgZXhhbXBsZSBzaG93cyBob3cgdG8gdXNlIHRoZSBzb2NrZXQgaW50ZXJmYWNlIHRvIGNvbW11bmljYXRlIHRvIGEgQ0FOCi1uZXR3b3JrLiBUaGlzIGV4YW1wbGUgbWlnaHQgcmVxdWlyZSBzcGVjaWFsIHByaXZpbGVkZ2U6OgorbmV0d29yayB1c2luZyB0aGUgcmF3IHNvY2tldCBwcm90b2NvbC4gVG8gdXNlIENBTiB3aXRoIHRoZSBicm9hZGNhc3QKK21hbmFnZXIgcHJvdG9jb2wgaW5zdGVhZCwgb3BlbiBhIHNvY2tldCB3aXRoOjoKKworICAgIHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0NBTiwgc29ja2V0LlNPQ0tfREdSQU0sIHNvY2tldC5DQU5fQkNNKQorCitBZnRlciBiaW5kaW5nICg6Y29uc3Q6YENBTl9SQVdgKSBvciBjb25uZWN0aW5nICg6Y29uc3Q6YENBTl9CQ01gKSB0aGUgc29ja2V0LCB5b3UKK2NhbiB1c2UgdGhlIDptZXRoOmBzb2NrZXQuc2VuZGAsIGFuZCB0aGUgOm1ldGg6YHNvY2tldC5yZWN2YCBvcGVyYXRpb25zIChhbmQKK3RoZWlyIGNvdW50ZXJwYXJ0cykgb24gdGhlIHNvY2tldCBvYmplY3QgYXMgdXN1YWwuCisKK1RoaXMgZXhhbXBsZSBtaWdodCByZXF1aXJlIHNwZWNpYWwgcHJpdmlsZWdlczo6CiAKICAgIGltcG9ydCBzb2NrZXQKICAgIGltcG9ydCBzdHJ1Y3QKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3NvY2tldHNlcnZlci5yc3QgYi9Eb2MvbGlicmFyeS9zb2NrZXRzZXJ2ZXIucnN0CmluZGV4IDFlYzQ0MzguLjNlNDlhZjYgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3NvY2tldHNlcnZlci5yc3QKKysrIGIvRG9jL2xpYnJhcnkvc29ja2V0c2VydmVyLnJzdApAQCAtMzMsOSArMzMsMTAgQEAKIGhhbmRsZXIgY2xhc3MgYnkgc3ViY2xhc3NpbmcgdGhlIDpjbGFzczpgQmFzZVJlcXVlc3RIYW5kbGVyYCBjbGFzcyBhbmQKIG92ZXJyaWRpbmcgaXRzIDptZXRoOmBoYW5kbGVgIG1ldGhvZDsgdGhpcyBtZXRob2Qgd2lsbCBwcm9jZXNzIGluY29taW5nCiByZXF1ZXN0cy4gIFNlY29uZCwgeW91IG11c3QgaW5zdGFudGlhdGUgb25lIG9mIHRoZSBzZXJ2ZXIgY2xhc3NlcywgcGFzc2luZyBpdAotdGhlIHNlcnZlcidzIGFkZHJlc3MgYW5kIHRoZSByZXF1ZXN0IGhhbmRsZXIgY2xhc3MuICBGaW5hbGx5LCBjYWxsIHRoZQordGhlIHNlcnZlcidzIGFkZHJlc3MgYW5kIHRoZSByZXF1ZXN0IGhhbmRsZXIgY2xhc3MuICBUaGVuIGNhbGwgdGhlCiA6bWV0aDpgaGFuZGxlX3JlcXVlc3RgIG9yIDptZXRoOmBzZXJ2ZV9mb3JldmVyYCBtZXRob2Qgb2YgdGhlIHNlcnZlciBvYmplY3QgdG8KLXByb2Nlc3Mgb25lIG9yIG1hbnkgcmVxdWVzdHMuCitwcm9jZXNzIG9uZSBvciBtYW55IHJlcXVlc3RzLiAgRmluYWxseSwgY2FsbCA6bWV0aDpgfkJhc2VTZXJ2ZXIuc2VydmVyX2Nsb3NlYAordG8gY2xvc2UgdGhlIHNvY2tldC4KIAogV2hlbiBpbmhlcml0aW5nIGZyb20gOmNsYXNzOmBUaHJlYWRpbmdNaXhJbmAgZm9yIHRocmVhZGVkIGNvbm5lY3Rpb24gYmVoYXZpb3IsCiB5b3Ugc2hvdWxkIGV4cGxpY2l0bHkgZGVjbGFyZSBob3cgeW91IHdhbnQgeW91ciB0aHJlYWRzIHRvIGJlaGF2ZSBvbiBhbiBhYnJ1cHQKQEAgLTE3Nyw2ICsxNzgsMTMgQEAKICAgIFRlbGwgdGhlIDptZXRoOmBzZXJ2ZV9mb3JldmVyYCBsb29wIHRvIHN0b3AgYW5kIHdhaXQgdW50aWwgaXQgZG9lcy4KIAogCisuLiBtZXRob2Q6OiBCYXNlU2VydmVyLnNlcnZlcl9jbG9zZSgpCisKKyAgIENsZWFuIHVwIHRoZSBzZXJ2ZXIuIE1heSBiZSBvdmVycmlkZGVuLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjYKKworCiAuLiBhdHRyaWJ1dGU6OiBCYXNlU2VydmVyLmFkZHJlc3NfZmFtaWx5CiAKICAgIFRoZSBmYW1pbHkgb2YgcHJvdG9jb2xzIHRvIHdoaWNoIHRoZSBzZXJ2ZXIncyBzb2NrZXQgYmVsb25ncy4KQEAgLTU0Nyw2ICs1NTUsNyBAQAogICAgICAgIGNsaWVudChpcCwgcG9ydCwgIkhlbGxvIFdvcmxkIDMiKQogCiAgICAgICAgc2VydmVyLnNodXRkb3duKCkKKyAgICAgICBzZXJ2ZXIuc2VydmVyX2Nsb3NlKCkKIAogCiBUaGUgb3V0cHV0IG9mIHRoZSBleGFtcGxlIHNob3VsZCBsb29rIHNvbWV0aGluZyBsaWtlIHRoaXM6OgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvc3B3ZC5yc3QgYi9Eb2MvbGlicmFyeS9zcHdkLnJzdAppbmRleCBhZGQ2MTFmLi41OGJlNzhmIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9zcHdkLnJzdAorKysgYi9Eb2MvbGlicmFyeS9zcHdkLnJzdApAQCAtMTksOSArMTksOSBAQAogKy0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIHwgSW5kZXggfCBBdHRyaWJ1dGUgICAgIHwgTWVhbmluZyAgICAgICAgICAgICAgICAgICAgICAgICB8CiArPT09PT09PSs9PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KwotfCAwICAgICB8IGBgc3BfbmFtYGAgICAgfCBMb2dpbiBuYW1lICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMCAgICAgfCBgYHNwX25hbXBgYCAgIHwgTG9naW4gbmFtZSAgICAgICAgICAgICAgICAgICAgICB8CiArLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCAxICAgICB8IGBgc3BfcHdkYGAgICAgfCBFbmNyeXB0ZWQgcGFzc3dvcmQgICAgICAgICAgICAgIHwKK3wgMSAgICAgfCBgYHNwX3B3ZHBgYCAgIHwgRW5jcnlwdGVkIHBhc3N3b3JkICAgICAgICAgICAgICB8CiArLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogfCAyICAgICB8IGBgc3BfbHN0Y2hnYGAgfCBEYXRlIG9mIGxhc3QgY2hhbmdlICAgICAgICAgICAgIHwKICstLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCkBAIC0zNiwxNSArMzYsMTUgQEAKICstLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiB8IDYgICAgIHwgYGBzcF9pbmFjdGBgICB8IE51bWJlciBvZiBkYXlzIGFmdGVyIHBhc3N3b3JkICAgfAogfCAgICAgICB8ICAgICAgICAgICAgICAgfCBleHBpcmVzIHVudGlsIGFjY291bnQgaXMgICAgICAgIHwKLXwgICAgICAgfCAgICAgICAgICAgICAgIHwgYmxvY2tlZCAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgIHwgICAgICAgICAgICAgICB8IGRpc2FibGVkICAgICAgICAgICAgICAgICAgICAgICAgfAogKy0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIHwgNyAgICAgfCBgYHNwX2V4cGlyZWBgIHwgTnVtYmVyIG9mIGRheXMgc2luY2UgMTk3MC0wMS0wMSB8Ci18ICAgICAgIHwgICAgICAgICAgICAgICB8IHVudGlsIGFjY291bnQgaXMgZGlzYWJsZWQgICAgICAgfAorfCAgICAgICB8ICAgICAgICAgICAgICAgfCB3aGVuIGFjY291bnQgZXhwaXJlcyAgICAgICAgICAgIHwKICstLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiB8IDggICAgIHwgYGBzcF9mbGFnYGAgICB8IFJlc2VydmVkICAgICAgICAgICAgICAgICAgICAgICAgfAogKy0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIAotVGhlIHNwX25hbSBhbmQgc3BfcHdkIGl0ZW1zIGFyZSBzdHJpbmdzLCBhbGwgb3RoZXJzIGFyZSBpbnRlZ2Vycy4KK1RoZSBzcF9uYW1wIGFuZCBzcF9wd2RwIGl0ZW1zIGFyZSBzdHJpbmdzLCBhbGwgb3RoZXJzIGFyZSBpbnRlZ2Vycy4KIDpleGM6YEtleUVycm9yYCBpcyByYWlzZWQgaWYgdGhlIGVudHJ5IGFza2VkIGZvciBjYW5ub3QgYmUgZm91bmQuCiAKIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSBkZWZpbmVkOgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvc3FsaXRlMy5yc3QgYi9Eb2MvbGlicmFyeS9zcWxpdGUzLnJzdAppbmRleCA4YTUwZjg3Li43MTUzMjFhIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9zcWxpdGUzLnJzdAorKysgYi9Eb2MvbGlicmFyeS9zcWxpdGUzLnJzdApAQCAtMTMsOCArMTMsOCBAQAogYXBwbGljYXRpb24gdXNpbmcgU1FMaXRlIGFuZCB0aGVuIHBvcnQgdGhlIGNvZGUgdG8gYSBsYXJnZXIgZGF0YWJhc2Ugc3VjaCBhcwogUG9zdGdyZVNRTCBvciBPcmFjbGUuCiAKLXNxbGl0ZTMgd2FzIHdyaXR0ZW4gYnkgR2VyaGFyZCBIw6RyaW5nIGFuZCBwcm92aWRlcyBhIFNRTCBpbnRlcmZhY2UgY29tcGxpYW50Ci13aXRoIHRoZSBEQi1BUEkgMi4wIHNwZWNpZmljYXRpb24gZGVzY3JpYmVkIGJ5IDpwZXA6YDI0OWAuCitUaGUgc3FsaXRlMyBtb2R1bGUgd2FzIHdyaXR0ZW4gYnkgR2VyaGFyZCBIw6RyaW5nLiAgSXQgcHJvdmlkZXMgYSBTUUwgaW50ZXJmYWNlCitjb21wbGlhbnQgd2l0aCB0aGUgREItQVBJIDIuMCBzcGVjaWZpY2F0aW9uIGRlc2NyaWJlZCBieSA6cGVwOmAyNDlgLgogCiBUbyB1c2UgdGhlIG1vZHVsZSwgeW91IG11c3QgZmlyc3QgY3JlYXRlIGEgOmNsYXNzOmBDb25uZWN0aW9uYCBvYmplY3QgdGhhdAogcmVwcmVzZW50cyB0aGUgZGF0YWJhc2UuICBIZXJlIHRoZSBkYXRhIHdpbGwgYmUgc3RvcmVkIGluIHRoZQpAQCAtMzEsMjMgKzMxLDI5IEBACiAgICBjID0gY29ubi5jdXJzb3IoKQogCiAgICAjIENyZWF0ZSB0YWJsZQotICAgYy5leGVjdXRlKCcnJ2NyZWF0ZSB0YWJsZSBzdG9ja3MKLSAgIChkYXRlIHRleHQsIHRyYW5zIHRleHQsIHN5bWJvbCB0ZXh0LAotICAgIHF0eSByZWFsLCBwcmljZSByZWFsKScnJykKKyAgIGMuZXhlY3V0ZSgnJydDUkVBVEUgVEFCTEUgc3RvY2tzCisgICAgICAgICAgICAgICAgKGRhdGUgdGV4dCwgdHJhbnMgdGV4dCwgc3ltYm9sIHRleHQsIHF0eSByZWFsLCBwcmljZSByZWFsKScnJykKIAogICAgIyBJbnNlcnQgYSByb3cgb2YgZGF0YQotICAgYy5leGVjdXRlKCIiImluc2VydCBpbnRvIHN0b2NrcwotICAgICAgICAgICAgIHZhbHVlcyAoJzIwMDYtMDEtMDUnLCdCVVknLCdSSEFUJywxMDAsMzUuMTQpIiIiKQorICAgYy5leGVjdXRlKCJJTlNFUlQgSU5UTyBzdG9ja3MgVkFMVUVTICgnMjAwNi0wMS0wNScsJ0JVWScsJ1JIQVQnLDEwMCwzNS4xNCkiKQogCiAgICAjIFNhdmUgKGNvbW1pdCkgdGhlIGNoYW5nZXMKICAgIGNvbm4uY29tbWl0KCkKIAotICAgIyBXZSBjYW4gYWxzbyBjbG9zZSB0aGUgY3Vyc29yIGlmIHdlIGFyZSBkb25lIHdpdGggaXQKLSAgIGMuY2xvc2UoKQorICAgIyBXZSBjYW4gYWxzbyBjbG9zZSB0aGUgY29ubmVjdGlvbiBpZiB3ZSBhcmUgZG9uZSB3aXRoIGl0LgorICAgIyBKdXN0IGJlIHN1cmUgYW55IGNoYW5nZXMgaGF2ZSBiZWVuIGNvbW1pdHRlZCBvciB0aGV5IHdpbGwgYmUgbG9zdC4KKyAgIGNvbm4uY2xvc2UoKQorCitUaGUgZGF0YSB5b3UndmUgc2F2ZWQgaXMgcGVyc2lzdGVudCBhbmQgaXMgYXZhaWxhYmxlIGluIHN1YnNlcXVlbnQgc2Vzc2lvbnM6OgorCisgICBpbXBvcnQgc3FsaXRlMworICAgY29ubiA9IHNxbGl0ZTMuY29ubmVjdCgnZXhhbXBsZS5kYicpCisgICBjID0gY29ubi5jdXJzb3IoKQogCiBVc3VhbGx5IHlvdXIgU1FMIG9wZXJhdGlvbnMgd2lsbCBuZWVkIHRvIHVzZSB2YWx1ZXMgZnJvbSBQeXRob24gdmFyaWFibGVzLiAgWW91CiBzaG91bGRuJ3QgYXNzZW1ibGUgeW91ciBxdWVyeSB1c2luZyBQeXRob24ncyBzdHJpbmcgb3BlcmF0aW9ucyBiZWNhdXNlIGRvaW5nIHNvCi1pcyBpbnNlY3VyZTsgaXQgbWFrZXMgeW91ciBwcm9ncmFtIHZ1bG5lcmFibGUgdG8gYW4gU1FMIGluamVjdGlvbiBhdHRhY2suCitpcyBpbnNlY3VyZTsgaXQgbWFrZXMgeW91ciBwcm9ncmFtIHZ1bG5lcmFibGUgdG8gYW4gU1FMIGluamVjdGlvbiBhdHRhY2sKKyhzZWUgaHR0cDovL3hrY2QuY29tLzMyNy8gZm9yIGh1bW9yb3VzIGV4YW1wbGUgb2Ygd2hhdCBjYW4gZ28gd3JvbmcpLgogCiBJbnN0ZWFkLCB1c2UgdGhlIERCLUFQSSdzIHBhcmFtZXRlciBzdWJzdGl0dXRpb24uICBQdXQgYGA/YGAgYXMgYSBwbGFjZWhvbGRlcgogd2hlcmV2ZXIgeW91IHdhbnQgdG8gdXNlIGEgdmFsdWUsIGFuZCB0aGVuIHByb3ZpZGUgYSB0dXBsZSBvZiB2YWx1ZXMgYXMgdGhlCkBAIC01NiwxOSArNjIsMjAgQEAKIGV4YW1wbGU6OgogCiAgICAjIE5ldmVyIGRvIHRoaXMgLS0gaW5zZWN1cmUhCi0gICBzeW1ib2wgPSAnSUJNJwotICAgYy5leGVjdXRlKCJzZWxlY3QgKiBmcm9tIHN0b2NrcyB3aGVyZSBzeW1ib2wgPSAnJXMnIiAlIHN5bWJvbCkKKyAgIHN5bWJvbCA9ICdSSEFUJworICAgYy5leGVjdXRlKCJTRUxFQ1QgKiBGUk9NIHN0b2NrcyBXSEVSRSBzeW1ib2wgPSAnJXMnIiAlIHN5bWJvbCkKIAogICAgIyBEbyB0aGlzIGluc3RlYWQKLSAgIHQgPSAoJ0lCTScsKQotICAgYy5leGVjdXRlKCdzZWxlY3QgKiBmcm9tIHN0b2NrcyB3aGVyZSBzeW1ib2w9PycsIHQpCisgICB0ID0gKCdSSEFUJywpCisgICBjLmV4ZWN1dGUoJ1NFTEVDVCAqIEZST00gc3RvY2tzIFdIRVJFIHN5bWJvbD0/JywgdCkKKyAgIHByaW50KGMuZmV0Y2hvbmUoKSkKIAotICAgIyBMYXJnZXIgZXhhbXBsZQotICAgZm9yIHQgaW4gWygnMjAwNi0wMy0yOCcsICdCVVknLCAnSUJNJywgMTAwMCwgNDUuMDApLAotICAgICAgICAgICAgICgnMjAwNi0wNC0wNScsICdCVVknLCAnTVNGVCcsIDEwMDAsIDcyLjAwKSwKLSAgICAgICAgICAgICAoJzIwMDYtMDQtMDYnLCAnU0VMTCcsICdJQk0nLCA1MDAsIDUzLjAwKSwKLSAgICAgICAgICAgIF06Ci0gICAgICAgYy5leGVjdXRlKCdpbnNlcnQgaW50byBzdG9ja3MgdmFsdWVzICg/LD8sPyw/LD8pJywgdCkKKyAgICMgTGFyZ2VyIGV4YW1wbGUgdGhhdCBpbnNlcnRzIG1hbnkgcmVjb3JkcyBhdCBhIHRpbWUKKyAgIHB1cmNoYXNlcyA9IFsoJzIwMDYtMDMtMjgnLCAnQlVZJywgJ0lCTScsIDEwMDAsIDQ1LjAwKSwKKyAgICAgICAgICAgICAgICAoJzIwMDYtMDQtMDUnLCAnQlVZJywgJ01TRlQnLCAxMDAwLCA3Mi4wMCksCisgICAgICAgICAgICAgICAgKCcyMDA2LTA0LTA2JywgJ1NFTEwnLCAnSUJNJywgNTAwLCA1My4wMCksCisgICAgICAgICAgICAgICBdCisgICBjLmV4ZWN1dGVtYW55KCdJTlNFUlQgSU5UTyBzdG9ja3MgVkFMVUVTICg/LD8sPyw/LD8pJywgcHVyY2hhc2VzKQogCiBUbyByZXRyaWV2ZSBkYXRhIGFmdGVyIGV4ZWN1dGluZyBhIFNFTEVDVCBzdGF0ZW1lbnQsIHlvdSBjYW4gZWl0aGVyIHRyZWF0IHRoZQogY3Vyc29yIGFzIGFuIDp0ZXJtOmBpdGVyYXRvcmAsIGNhbGwgdGhlIGN1cnNvcidzIDptZXRoOmB+Q3Vyc29yLmZldGNob25lYCBtZXRob2QgdG8KQEAgLTc3LDE2ICs4NCwxMyBAQAogCiBUaGlzIGV4YW1wbGUgdXNlcyB0aGUgaXRlcmF0b3IgZm9ybTo6CiAKLSAgID4+PiBjID0gY29ubi5jdXJzb3IoKQotICAgPj4+IGMuZXhlY3V0ZSgnc2VsZWN0ICogZnJvbSBzdG9ja3Mgb3JkZXIgYnkgcHJpY2UnKQotICAgPj4+IGZvciByb3cgaW4gYzoKLSAgIC4uLiAgICAgcHJpbnQocm93KQotICAgLi4uCisgICA+Pj4gZm9yIHJvdyBpbiBjLmV4ZWN1dGUoJ1NFTEVDVCAqIEZST00gc3RvY2tzIE9SREVSIEJZIHByaWNlJyk6CisgICAgICAgICAgIHByaW50KHJvdykKKwogICAgKCcyMDA2LTAxLTA1JywgJ0JVWScsICdSSEFUJywgMTAwLCAzNS4xNCkKICAgICgnMjAwNi0wMy0yOCcsICdCVVknLCAnSUJNJywgMTAwMCwgNDUuMCkKICAgICgnMjAwNi0wNC0wNicsICdTRUxMJywgJ0lCTScsIDUwMCwgNTMuMCkKLSAgICgnMjAwNi0wNC0wNScsICdCVVknLCAnTVNPRlQnLCAxMDAwLCA3Mi4wKQotICAgPj4+CisgICAoJzIwMDYtMDQtMDUnLCAnQlVZJywgJ01TRlQnLCAxMDAwLCA3Mi4wKQogCiAKIC4uIHNlZWFsc286OgpAQCAtOTksNiArMTAzLDkgQEAKICAgICAgIFRoZSBTUUxpdGUgd2ViIHBhZ2U7IHRoZSBkb2N1bWVudGF0aW9uIGRlc2NyaWJlcyB0aGUgc3ludGF4IGFuZCB0aGUKICAgICAgIGF2YWlsYWJsZSBkYXRhIHR5cGVzIGZvciB0aGUgc3VwcG9ydGVkIFNRTCBkaWFsZWN0LgogCisgICBodHRwOi8vd3d3Lnczc2Nob29scy5jb20vc3FsLworICAgICAgVHV0b3JpYWwsIHJlZmVyZW5jZSBhbmQgZXhhbXBsZXMgZm9yIGxlYXJuaW5nIFNRTCBzeW50YXguCisKICAgIDpwZXA6YDI0OWAgLSBEYXRhYmFzZSBBUEkgU3BlY2lmaWNhdGlvbiAyLjAKICAgICAgIFBFUCB3cml0dGVuIGJ5IE1hcmMtQW5kcsOpIExlbWJ1cmcuCiAKQEAgLTE1OSw3ICsxNjYsNyBAQAogICAgZmlyc3QgYmxhbmsgZm9yIHRoZSBjb2x1bW4gbmFtZTogdGhlIGNvbHVtbiBuYW1lIHdvdWxkIHNpbXBseSBiZSAieCIuCiAKIAotLi4gZnVuY3Rpb246OiBjb25uZWN0KGRhdGFiYXNlWywgdGltZW91dCwgZGV0ZWN0X3R5cGVzLCBpc29sYXRpb25fbGV2ZWwsIGNoZWNrX3NhbWVfdGhyZWFkLCBmYWN0b3J5LCBjYWNoZWRfc3RhdGVtZW50c10pCisuLiBmdW5jdGlvbjo6IGNvbm5lY3QoZGF0YWJhc2VbLCB0aW1lb3V0LCBkZXRlY3RfdHlwZXMsIGlzb2xhdGlvbl9sZXZlbCwgY2hlY2tfc2FtZV90aHJlYWQsIGZhY3RvcnksIGNhY2hlZF9zdGF0ZW1lbnRzLCB1cmldKQogCiAgICBPcGVucyBhIGNvbm5lY3Rpb24gdG8gdGhlIFNRTGl0ZSBkYXRhYmFzZSBmaWxlICpkYXRhYmFzZSouIFlvdSBjYW4gdXNlCiAgICBgYCI6bWVtb3J5OiJgYCB0byBvcGVuIGEgZGF0YWJhc2UgY29ubmVjdGlvbiB0byBhIGRhdGFiYXNlIHRoYXQgcmVzaWRlcyBpbiBSQU0KQEAgLTE5NSw2ICsyMDIsMTggQEAKICAgIGZvciB0aGUgY29ubmVjdGlvbiwgeW91IGNhbiBzZXQgdGhlICpjYWNoZWRfc3RhdGVtZW50cyogcGFyYW1ldGVyLiBUaGUgY3VycmVudGx5CiAgICBpbXBsZW1lbnRlZCBkZWZhdWx0IGlzIHRvIGNhY2hlIDEwMCBzdGF0ZW1lbnRzLgogCisgICBJZiAqdXJpKiBpcyB0cnVlLCAqZGF0YWJhc2UqIGlzIGludGVycHJldGVkIGFzIGEgVVJJLiBUaGlzIGFsbG93cyB5b3UKKyAgIHRvIHNwZWNpZnkgb3B0aW9ucy4gRm9yIGV4YW1wbGUsIHRvIG9wZW4gYSBkYXRhYmFzZSBpbiByZWFkLW9ubHkgbW9kZQorICAgeW91IGNhbiB1c2U6OgorCisgICAgICAgZGIgPSBzcWxpdGUzLmNvbm5lY3QoJ2ZpbGU6cGF0aC90by9kYXRhYmFzZT9tb2RlPXJvJywgdXJpPVRydWUpCisKKyAgIE1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBmZWF0dXJlLCBpbmNsdWRpbmcgYSBsaXN0IG9mIHJlY29nbml6ZWQgb3B0aW9ucywgY2FuCisgICBiZSBmb3VuZCBpbiB0aGUgYFNRTGl0ZSBVUkkgZG9jdW1lbnRhdGlvbiA8aHR0cDovL3d3dy5zcWxpdGUub3JnL3VyaS5odG1sPmBfLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgQWRkZWQgdGhlICp1cmkqIHBhcmFtZXRlci4KKwogCiAuLiBmdW5jdGlvbjo6IHJlZ2lzdGVyX2NvbnZlcnRlcih0eXBlbmFtZSwgY2FsbGFibGUpCiAKQEAgLTUwNSw3ICs1MjQsNyBAQAogCiAgICAuLiBtZXRob2Q6OiBleGVjdXRlKHNxbCwgW3BhcmFtZXRlcnNdKQogCi0gICAgICBFeGVjdXRlcyBhbiBTUUwgc3RhdGVtZW50LiBUaGUgU1FMIHN0YXRlbWVudCBtYXkgYmUgcGFyYW1ldHJpemVkIChpLiBlLgorICAgICAgRXhlY3V0ZXMgYW4gU1FMIHN0YXRlbWVudC4gVGhlIFNRTCBzdGF0ZW1lbnQgbWF5IGJlIHBhcmFtZXRlcml6ZWQgKGkuIGUuCiAgICAgICBwbGFjZWhvbGRlcnMgaW5zdGVhZCBvZiBTUUwgbGl0ZXJhbHMpLiBUaGUgOm1vZDpgc3FsaXRlM2AgbW9kdWxlIHN1cHBvcnRzIHR3bwogICAgICAga2luZHMgb2YgcGxhY2Vob2xkZXJzOiBxdWVzdGlvbiBtYXJrcyAocW1hcmsgc3R5bGUpIGFuZCBuYW1lZCBwbGFjZWhvbGRlcnMKICAgICAgIChuYW1lZCBzdHlsZSkuCkBAIC01OTYsNyArNjE1LDcgQEAKICAgIC4uIGF0dHJpYnV0ZTo6IGxhc3Ryb3dpZAogCiAgICAgICBUaGlzIHJlYWQtb25seSBhdHRyaWJ1dGUgcHJvdmlkZXMgdGhlIHJvd2lkIG9mIHRoZSBsYXN0IG1vZGlmaWVkIHJvdy4gSXQgaXMKLSAgICAgIG9ubHkgc2V0IGlmIHlvdSBpc3N1ZWQgYSBgYElOU0VSVGBgIHN0YXRlbWVudCB1c2luZyB0aGUgOm1ldGg6YGV4ZWN1dGVgCisgICAgICBvbmx5IHNldCBpZiB5b3UgaXNzdWVkIGFuIGBgSU5TRVJUYGAgc3RhdGVtZW50IHVzaW5nIHRoZSA6bWV0aDpgZXhlY3V0ZWAKICAgICAgIG1ldGhvZC4gRm9yIG9wZXJhdGlvbnMgb3RoZXIgdGhhbiBgYElOU0VSVGBgIG9yIHdoZW4gOm1ldGg6YGV4ZWN1dGVtYW55YCBpcwogICAgICAgY2FsbGVkLCA6YXR0cjpgbGFzdHJvd2lkYCBpcyBzZXQgdG8gOmNvbnN0OmBOb25lYC4KIApAQCAtNjI3LDcgKzY0Niw3IEBACiAKICAgIC4uIG1ldGhvZDo6IGtleXMKIAotICAgICAgVGhpcyBtZXRob2QgcmV0dXJucyBhIHR1cGxlIG9mIGNvbHVtbiBuYW1lcy4gSW1tZWRpYXRlbHkgYWZ0ZXIgYSBxdWVyeSwKKyAgICAgIFRoaXMgbWV0aG9kIHJldHVybnMgYSBsaXN0IG9mIGNvbHVtbiBuYW1lcy4gSW1tZWRpYXRlbHkgYWZ0ZXIgYSBxdWVyeSwKICAgICAgIGl0IGlzIHRoZSBmaXJzdCBtZW1iZXIgb2YgZWFjaCB0dXBsZSBpbiA6YXR0cjpgQ3Vyc29yLmRlc2NyaXB0aW9uYC4KIAogTGV0J3MgYXNzdW1lIHdlIGluaXRpYWxpemUgYSB0YWJsZSBhcyBpbiB0aGUgZXhhbXBsZSBnaXZlbiBhYm92ZTo6CkBAIC03MDIsMTkgKzcyMSwyMCBAQAogCiBUaGlzIGlzIGhvdyBTUUxpdGUgdHlwZXMgYXJlIGNvbnZlcnRlZCB0byBQeXRob24gdHlwZXMgYnkgZGVmYXVsdDoKIAotKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCBTUUxpdGUgdHlwZSB8IFB5dGhvbiB0eXBlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotKz09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KwotfCBgYE5VTExgYCAgICB8IDpjb25zdDpgTm9uZWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCBgYElOVEVHRVJgYCB8IDpjbGFzczpgaW50YCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCBgYFJFQUxgYCAgICB8IDpjbGFzczpgZmxvYXRgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCBgYFRFWFRgYCAgICB8IGRlcGVuZHMgb24gdGV4dF9mYWN0b3J5LCBzdHIgYnkgZGVmYXVsdCAgICAgfAotKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCBgYEJMT0JgYCAgICB8IDpjbGFzczpgYnl0ZXNgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgU1FMaXRlIHR5cGUgfCBQeXRob24gdHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrPT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KworfCBgYE5VTExgYCAgICB8IDpjb25zdDpgTm9uZWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IGBgSU5URUdFUmBgIHwgOmNsYXNzOmBpbnRgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgYGBSRUFMYGAgICAgfCA6Y2xhc3M6YGZsb2F0YCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBgYFRFWFRgYCAgICB8IGRlcGVuZHMgb24gOmF0dHI6YH5Db25uZWN0aW9uLnRleHRfZmFjdG9yeWAsIHwKK3wgICAgICAgICAgICAgfCA6Y2xhc3M6YHN0cmAgYnkgZGVmYXVsdCAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBgYEJMT0JgYCAgICB8IDpjbGFzczpgYnl0ZXNgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAKIFRoZSB0eXBlIHN5c3RlbSBvZiB0aGUgOm1vZDpgc3FsaXRlM2AgbW9kdWxlIGlzIGV4dGVuc2libGUgaW4gdHdvIHdheXM6IHlvdSBjYW4KIHN0b3JlIGFkZGl0aW9uYWwgUHl0aG9uIHR5cGVzIGluIGEgU1FMaXRlIGRhdGFiYXNlIHZpYSBvYmplY3QgYWRhcHRhdGlvbiwgYW5kCkBAIC03MzAsOSArNzUwLDYgQEAKIHNxbGl0ZTMgbW9kdWxlJ3Mgc3VwcG9ydGVkIHR5cGVzIGZvciBTUUxpdGU6IG9uZSBvZiBOb25lVHlwZSwgaW50LCBmbG9hdCwKIHN0ciwgYnl0ZXMuCiAKLVRoZSA6bW9kOmBzcWxpdGUzYCBtb2R1bGUgdXNlcyBQeXRob24gb2JqZWN0IGFkYXB0YXRpb24sIGFzIGRlc2NyaWJlZCBpbgotOnBlcDpgMjQ2YCBmb3IgdGhpcy4gIFRoZSBwcm90b2NvbCB0byB1c2UgaXMgOmNsYXNzOmBQcmVwYXJlUHJvdG9jb2xgLgotCiBUaGVyZSBhcmUgdHdvIHdheXMgdG8gZW5hYmxlIHRoZSA6bW9kOmBzcWxpdGUzYCBtb2R1bGUgdG8gYWRhcHQgYSBjdXN0b20gUHl0aG9uCiB0eXBlIHRvIG9uZSBvZiB0aGUgc3VwcG9ydGVkIG9uZXMuCiAKQEAgLTc4OCw4ICs4MDUsOCBAQAogCiAuLiBub3RlOjoKIAotICAgQ29udmVydGVyIGZ1bmN0aW9ucyAqKmFsd2F5cyoqIGdldCBjYWxsZWQgd2l0aCBhIHN0cmluZywgbm8gbWF0dGVyIHVuZGVyIHdoaWNoCi0gICBkYXRhIHR5cGUgeW91IHNlbnQgdGhlIHZhbHVlIHRvIFNRTGl0ZS4KKyAgIENvbnZlcnRlciBmdW5jdGlvbnMgKiphbHdheXMqKiBnZXQgY2FsbGVkIHdpdGggYSA6Y2xhc3M6YGJ5dGVzYCBvYmplY3QsIG5vCisgICBtYXR0ZXIgdW5kZXIgd2hpY2ggZGF0YSB0eXBlIHlvdSBzZW50IHRoZSB2YWx1ZSB0byBTUUxpdGUuCiAKIDo6CiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3NzbC5yc3QgYi9Eb2MvbGlicmFyeS9zc2wucnN0CmluZGV4IGFhNWE1MmYuLmIwY2Y0ZWIgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3NzbC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvc3NsLnJzdApAQCAtMjYsNyArMjYsOCBAQAogCiAgICBTb21lIGJlaGF2aW9yIG1heSBiZSBwbGF0Zm9ybSBkZXBlbmRlbnQsIHNpbmNlIGNhbGxzIGFyZSBtYWRlIHRvIHRoZQogICAgb3BlcmF0aW5nIHN5c3RlbSBzb2NrZXQgQVBJcy4gIFRoZSBpbnN0YWxsZWQgdmVyc2lvbiBvZiBPcGVuU1NMIG1heSBhbHNvCi0gICBjYXVzZSB2YXJpYXRpb25zIGluIGJlaGF2aW9yLgorICAgY2F1c2UgdmFyaWF0aW9ucyBpbiBiZWhhdmlvci4gRm9yIGV4YW1wbGUsIFRMU3YxLjEgYW5kIFRMU3YxLjIgY29tZSB3aXRoCisgICBvcGVuc3NsIHZlcnNpb24gMS4wLjEuCiAKIC4uIHdhcm5pbmc6OgogICAgRG9uJ3QgdXNlIHRoaXMgbW9kdWxlIHdpdGhvdXQgcmVhZGluZyB0aGUgOnJlZjpgc3NsLXNlY3VyaXR5YC4gIERvaW5nIHNvCkBAIC0xODYsMjUgKzE4NywyMiBAQAogCiAgICAgIC4uIHRhYmxlOjoKIAotICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09ICA9PT09PT09PT0gID09PT09PT09PT0gID09PT09PT09PQotICAgICAgICAqY2xpZW50KiAvICoqc2VydmVyKiogICAgKipTU0x2MioqICAqKlNTTHYzKiogICoqU1NMdjIzKiogICoqVExTdjEqKgotICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgLS0tLS0tLS0tICAtLS0tLS0tLS0gIC0tLS0tLS0tLS0gIC0tLS0tLS0tLQotICAgICAgICAqU1NMdjIqICAgICAgICAgICAgICAgICAgICB5ZXMgICAgICAgIG5vICAgICAgICAgeWVzICAgICAgICAgbm8KLSAgICAgICAgKlNTTHYzKiAgICAgICAgICAgICAgICAgICAgbm8gICAgICAgICB5ZXMgICAgICAgIHllcyAgICAgICAgIG5vCi0gICAgICAgICpTU0x2MjMqICAgICAgICAgICAgICAgICAgIHllcyAgICAgICAgbm8gICAgICAgICB5ZXMgICAgICAgICBubwotICAgICAgICAqVExTdjEqICAgICAgICAgICAgICAgICAgICBubyAgICAgICAgIG5vICAgICAgICAgeWVzICAgICAgICAgeWVzCi0gICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT0gID09PT09PT09PSAgPT09PT09PT09PSAgPT09PT09PT09CisgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT0gID09PT09PT09PSAgPT09PT09PT09PSAgPT09PT09PT09ICA9PT09PT09PT09PSAgPT09PT09PT09PT0KKyAgICAgICAgKmNsaWVudCogLyAqKnNlcnZlcioqICAgICoqU1NMdjIqKiAgKipTU0x2MyoqICAqKlNTTHYyMyoqICAqKlRMU3YxKiogICoqVExTdjEuMSoqICAqKlRMU3YxLjIqKgorICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgLS0tLS0tLS0tICAtLS0tLS0tLS0gIC0tLS0tLS0tLS0gIC0tLS0tLS0tLSAgLS0tLS0tLS0tLS0gIC0tLS0tLS0tLS0tCisgICAgICAgICpTU0x2MiogICAgICAgICAgICAgICAgICAgIHllcyAgICAgICAgbm8gICAgICAgICB5ZXMgICAgICAgICBubyAgICAgICAgIG5vICAgICAgICAgbm8KKyAgICAgICAgKlNTTHYzKiAgICAgICAgICAgICAgICAgICAgbm8gICAgICAgICB5ZXMgICAgICAgIHllcyAgICAgICAgIG5vICAgICAgICAgbm8gICAgICAgICBubworICAgICAgICAqU1NMdjIzKiAgICAgICAgICAgICAgICAgICBubyAgICAgICAgIHllcyAgICAgICAgeWVzICAgICAgICAgeWVzICAgICAgICB5ZXMgICAgICAgIHllcworICAgICAgICAqVExTdjEqICAgICAgICAgICAgICAgICAgICBubyAgICAgICAgIG5vICAgICAgICAgeWVzICAgICAgICAgeWVzICAgICAgICBubyAgICAgICAgIG5vCisgICAgICAgICpUTFN2MS4xKiAgICAgICAgICAgICAgICAgIG5vICAgICAgICAgbm8gICAgICAgICB5ZXMgICAgICAgICBubyAgICAgICAgIHllcyAgICAgICAgbm8KKyAgICAgICAgKlRMU3YxLjIqICAgICAgICAgICAgICAgICAgbm8gICAgICAgICBubyAgICAgICAgIHllcyAgICAgICAgIG5vICAgICAgICAgbm8gICAgICAgICB5ZXMKKyAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT0gID09PT09PT09PSAgPT09PT09PT09ICA9PT09PT09PT09ICA9PT09PT09PT0gID09PT09PT09PT09ICA9PT09PT09PT09PQogCiAgICAuLiBub3RlOjoKIAogICAgICAgV2hpY2ggY29ubmVjdGlvbnMgc3VjY2VlZCB3aWxsIHZhcnkgZGVwZW5kaW5nIG9uIHRoZSB2ZXJzaW9uIG9mCi0gICAgICBPcGVuU1NMLiAgRm9yIGluc3RhbmNlLCBpbiBzb21lIG9sZGVyIHZlcnNpb25zIG9mIE9wZW5TU0wgKHN1Y2gKLSAgICAgIGFzIDAuOS43bCBvbiBPUyBYIDEwLjQpLCBhbiBTU0x2MiBjbGllbnQgY291bGQgbm90IGNvbm5lY3QgdG8gYW4KLSAgICAgIFNTTHYyMyBzZXJ2ZXIuICBBbm90aGVyIGV4YW1wbGU6IGJlZ2lubmluZyB3aXRoIE9wZW5TU0wgMS4wLjAsCi0gICAgICBhbiBTU0x2MjMgY2xpZW50IHdpbGwgbm90IGFjdHVhbGx5IGF0dGVtcHQgU1NMdjIgY29ubmVjdGlvbnMKLSAgICAgIHVubGVzcyB5b3UgZXhwbGljaXRseSBlbmFibGUgU1NMdjIgY2lwaGVyczsgZm9yIGV4YW1wbGUsIHlvdQotICAgICAgbWlnaHQgc3BlY2lmeSBgYCJBTEwiYGAgb3IgYGAiU1NMdjIiYGAgYXMgdGhlICpjaXBoZXJzKiBwYXJhbWV0ZXIKLSAgICAgIHRvIGVuYWJsZSB0aGVtLgorICAgICAgT3BlblNTTC4gIEZvciBleGFtcGxlLCBiZWZvcmUgT3BlblNTTCAxLjAuMCwgYW4gU1NMdjIzIGNsaWVudAorICAgICAgd291bGQgYWx3YXlzIGF0dGVtcHQgU1NMdjIgY29ubmVjdGlvbnMuCiAKICAgIFRoZSAqY2lwaGVycyogcGFyYW1ldGVyIHNldHMgdGhlIGF2YWlsYWJsZSBjaXBoZXJzIGZvciB0aGlzIFNTTCBvYmplY3QuCiAgICBJdCBzaG91bGQgYmUgYSBzdHJpbmcgaW4gdGhlIGBPcGVuU1NMIGNpcGhlciBsaXN0IGZvcm1hdApAQCAtMjI3LDE3ICsyMjUsNzUgQEAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCiAgICAgICBOZXcgb3B0aW9uYWwgYXJndW1lbnQgKmNpcGhlcnMqLgogCisKK0NvbnRleHQgY3JlYXRpb24KK15eXl5eXl5eXl5eXl5eXl4KKworQSBjb252ZW5pZW5jZSBmdW5jdGlvbiBoZWxwcyBjcmVhdGUgOmNsYXNzOmBTU0xDb250ZXh0YCBvYmplY3RzIGZvciBjb21tb24KK3B1cnBvc2VzLgorCisuLiBmdW5jdGlvbjo6IGNyZWF0ZV9kZWZhdWx0X2NvbnRleHQocHVycG9zZT1QdXJwb3NlLlNFUlZFUl9BVVRILCBjYWZpbGU9Tm9uZSwgY2FwYXRoPU5vbmUsIGNhZGF0YT1Ob25lKQorCisgICBSZXR1cm4gYSBuZXcgOmNsYXNzOmBTU0xDb250ZXh0YCBvYmplY3Qgd2l0aCBkZWZhdWx0IHNldHRpbmdzIGZvcgorICAgdGhlIGdpdmVuICpwdXJwb3NlKi4gIFRoZSBzZXR0aW5ncyBhcmUgY2hvc2VuIGJ5IHRoZSA6bW9kOmBzc2xgIG1vZHVsZSwKKyAgIGFuZCB1c3VhbGx5IHJlcHJlc2VudCBhIGhpZ2hlciBzZWN1cml0eSBsZXZlbCB0aGFuIHdoZW4gY2FsbGluZyB0aGUKKyAgIDpjbGFzczpgU1NMQ29udGV4dGAgY29uc3RydWN0b3IgZGlyZWN0bHkuCisKKyAgICpjYWZpbGUqLCAqY2FwYXRoKiwgKmNhZGF0YSogcmVwcmVzZW50IG9wdGlvbmFsIENBIGNlcnRpZmljYXRlcyB0bworICAgdHJ1c3QgZm9yIGNlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiwgYXMgaW4KKyAgIDptZXRoOmBTU0xDb250ZXh0LmxvYWRfdmVyaWZ5X2xvY2F0aW9uc2AuICBJZiBhbGwgdGhyZWUgYXJlCisgICA6Y29uc3Q6YE5vbmVgLCB0aGlzIGZ1bmN0aW9uIGNhbiBjaG9vc2UgdG8gdHJ1c3QgdGhlIHN5c3RlbSdzIGRlZmF1bHQKKyAgIENBIGNlcnRpZmljYXRlcyBpbnN0ZWFkLgorCisgICBUaGUgc2V0dGluZ3MgYXJlOiA6ZGF0YTpgUFJPVE9DT0xfU1NMdjIzYCwgOmRhdGE6YE9QX05PX1NTTHYyYCwgYW5kCisgICA6ZGF0YTpgT1BfTk9fU1NMdjNgIHdpdGggaGlnaCBlbmNyeXB0aW9uIGNpcGhlciBzdWl0ZXMgd2l0aG91dCBSQzQgYW5kCisgICB3aXRob3V0IHVuYXV0aGVudGljYXRlZCBjaXBoZXIgc3VpdGVzLiBQYXNzaW5nIDpkYXRhOmB+UHVycG9zZS5TRVJWRVJfQVVUSGAKKyAgIGFzICpwdXJwb3NlKiBzZXRzIDpkYXRhOmB+U1NMQ29udGV4dC52ZXJpZnlfbW9kZWAgdG8gOmRhdGE6YENFUlRfUkVRVUlSRURgCisgICBhbmQgZWl0aGVyIGxvYWRzIENBIGNlcnRpZmljYXRlcyAod2hlbiBhdCBsZWFzdCBvbmUgb2YgKmNhZmlsZSosICpjYXBhdGgqIG9yCisgICAqY2FkYXRhKiBpcyBnaXZlbikgb3IgdXNlcyA6bWV0aDpgU1NMQ29udGV4dC5sb2FkX2RlZmF1bHRfY2VydHNgIHRvIGxvYWQKKyAgIGRlZmF1bHQgQ0EgY2VydGlmaWNhdGVzLgorCisgICAuLiBub3RlOjoKKyAgICAgIFRoZSBwcm90b2NvbCwgb3B0aW9ucywgY2lwaGVyIGFuZCBvdGhlciBzZXR0aW5ncyBtYXkgY2hhbmdlIHRvIG1vcmUKKyAgICAgIHJlc3RyaWN0aXZlIHZhbHVlcyBhbnl0aW1lIHdpdGhvdXQgcHJpb3IgZGVwcmVjYXRpb24uICBUaGUgdmFsdWVzCisgICAgICByZXByZXNlbnQgYSBmYWlyIGJhbGFuY2UgYmV0d2VlbiBjb21wYXRpYmlsaXR5IGFuZCBzZWN1cml0eS4KKworICAgICAgSWYgeW91ciBhcHBsaWNhdGlvbiBuZWVkcyBzcGVjaWZpYyBzZXR0aW5ncywgeW91IHNob3VsZCBjcmVhdGUgYQorICAgICAgOmNsYXNzOmBTU0xDb250ZXh0YCBhbmQgYXBwbHkgdGhlIHNldHRpbmdzIHlvdXJzZWxmLgorCisgICAuLiBub3RlOjoKKyAgICAgIElmIHlvdSBmaW5kIHRoYXQgd2hlbiBjZXJ0YWluIG9sZGVyIGNsaWVudHMgb3Igc2VydmVycyBhdHRlbXB0IHRvIGNvbm5lY3QKKyAgICAgIHdpdGggYSA6Y2xhc3M6YFNTTENvbnRleHRgIGNyZWF0ZWQgYnkgdGhpcyBmdW5jdGlvbiB0aGF0IHRoZXkgZ2V0IGFuIGVycm9yCisgICAgICBzdGF0aW5nICJQcm90b2NvbCBvciBjaXBoZXIgc3VpdGUgbWlzbWF0Y2giLCBpdCBtYXkgYmUgdGhhdCB0aGV5IG9ubHkKKyAgICAgIHN1cHBvcnQgU1NMMy4wIHdoaWNoIHRoaXMgZnVuY3Rpb24gZXhjbHVkZXMgdXNpbmcgdGhlCisgICAgICA6ZGF0YTpgT1BfTk9fU1NMdjNgLiBTU0wzLjAgaXMgd2lkZWx5IGNvbnNpZGVyZWQgdG8gYmUgYGNvbXBsZXRlbHkgYnJva2VuCisgICAgICA8aHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUE9PRExFPmBfLiBJZiB5b3Ugc3RpbGwgd2lzaCB0byBjb250aW51ZSB0bworICAgICAgdXNlIHRoaXMgZnVuY3Rpb24gYnV0IHN0aWxsIGFsbG93IFNTTCAzLjAgY29ubmVjdGlvbnMgeW91IGNhbiByZS1lbmFibGUKKyAgICAgIHRoZW0gdXNpbmc6OgorCisgICAgICAgICBjdHggPSBzc2wuY3JlYXRlX2RlZmF1bHRfY29udGV4dChQdXJwb3NlLkNMSUVOVF9BVVRIKQorICAgICAgICAgY3R4Lm9wdGlvbnMgJj0gfnNzbC5PUF9OT19TU0x2MworCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQuNAorCisgICAgIFJDNCB3YXMgZHJvcHBlZCBmcm9tIHRoZSBkZWZhdWx0IGNpcGhlciBzdHJpbmcuCisKKwogUmFuZG9tIGdlbmVyYXRpb24KIF5eXl5eXl5eXl5eXl5eXl5eCiAKIC4uIGZ1bmN0aW9uOjogUkFORF9ieXRlcyhudW0pCiAKLSAgIFJldHVybnMgKm51bSogY3J5cHRvZ3JhcGhpY2FsbHkgc3Ryb25nIHBzZXVkby1yYW5kb20gYnl0ZXMuIFJhaXNlcyBhbgorICAgUmV0dXJuICpudW0qIGNyeXB0b2dyYXBoaWNhbGx5IHN0cm9uZyBwc2V1ZG8tcmFuZG9tIGJ5dGVzLiBSYWlzZXMgYW4KICAgIDpjbGFzczpgU1NMRXJyb3JgIGlmIHRoZSBQUk5HIGhhcyBub3QgYmVlbiBzZWVkZWQgd2l0aCBlbm91Z2ggZGF0YSBvciBpZiB0aGUKICAgIG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBjdXJyZW50IFJBTkQgbWV0aG9kLiA6ZnVuYzpgUkFORF9zdGF0dXNgCiAgICBjYW4gYmUgdXNlZCB0byBjaGVjayB0aGUgc3RhdHVzIG9mIHRoZSBQUk5HIGFuZCA6ZnVuYzpgUkFORF9hZGRgIGNhbiBiZSB1c2VkCiAgICB0byBzZWVkIHRoZSBQUk5HLgogCisgICBGb3IgYWxtb3N0IGFsbCBhcHBsaWNhdGlvbnMgOmZ1bmM6YG9zLnVyYW5kb21gIGlzIHByZWZlcmFibGUuCisKICAgIFJlYWQgdGhlIFdpa2lwZWRpYSBhcnRpY2xlLCBgQ3J5cHRvZ3JhcGhpY2FsbHkgc2VjdXJlIHBzZXVkb3JhbmRvbSBudW1iZXIKICAgIGdlbmVyYXRvciAoQ1NQUk5HKQogICAgPGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ3J5cHRvZ3JhcGhpY2FsbHlfc2VjdXJlX3BzZXVkb3JhbmRvbV9udW1iZXJfZ2VuZXJhdG9yPmBfLApAQCAtMjQ3LDcgKzMwMyw3IEBACiAKIC4uIGZ1bmN0aW9uOjogUkFORF9wc2V1ZG9fYnl0ZXMobnVtKQogCi0gICBSZXR1cm5zIChieXRlcywgaXNfY3J5cHRvZ3JhcGhpYyk6IGJ5dGVzIGFyZSAqbnVtKiBwc2V1ZG8tcmFuZG9tIGJ5dGVzLAorICAgUmV0dXJuIChieXRlcywgaXNfY3J5cHRvZ3JhcGhpYyk6IGJ5dGVzIGFyZSAqbnVtKiBwc2V1ZG8tcmFuZG9tIGJ5dGVzLAogICAgaXNfY3J5cHRvZ3JhcGhpYyBpcyBgYFRydWVgYCBpZiB0aGUgYnl0ZXMgZ2VuZXJhdGVkIGFyZSBjcnlwdG9ncmFwaGljYWxseQogICAgc3Ryb25nLiBSYWlzZXMgYW4gOmNsYXNzOmBTU0xFcnJvcmAgaWYgdGhlIG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZQogICAgY3VycmVudCBSQU5EIG1ldGhvZC4KQEAgLTI1NywxNCArMzEzLDE2IEBACiAgICBmb3Igbm9uLWNyeXB0b2dyYXBoaWMgcHVycG9zZXMgYW5kIGZvciBjZXJ0YWluIHB1cnBvc2VzIGluIGNyeXB0b2dyYXBoaWMKICAgIHByb3RvY29scywgYnV0IHVzdWFsbHkgbm90IGZvciBrZXkgZ2VuZXJhdGlvbiBldGMuCiAKKyAgIEZvciBhbG1vc3QgYWxsIGFwcGxpY2F0aW9ucyA6ZnVuYzpgb3MudXJhbmRvbWAgaXMgcHJlZmVyYWJsZS4KKwogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKIC4uIGZ1bmN0aW9uOjogUkFORF9zdGF0dXMoKQogCi0gICBSZXR1cm5zIGBgVHJ1ZWBgIGlmIHRoZSBTU0wgcHNldWRvLXJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIGhhcyBiZWVuIHNlZWRlZCB3aXRoCi0gICAnZW5vdWdoJyByYW5kb21uZXNzLCBhbmQgYGBGYWxzZWBgIG90aGVyd2lzZS4gIFlvdSBjYW4gdXNlIDpmdW5jOmBzc2wuUkFORF9lZ2RgCi0gICBhbmQgOmZ1bmM6YHNzbC5SQU5EX2FkZGAgdG8gaW5jcmVhc2UgdGhlIHJhbmRvbW5lc3Mgb2YgdGhlIHBzZXVkby1yYW5kb20KLSAgIG51bWJlciBnZW5lcmF0b3IuCisgICBSZXR1cm4gYGBUcnVlYGAgaWYgdGhlIFNTTCBwc2V1ZG8tcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgaGFzIGJlZW4gc2VlZGVkCisgICB3aXRoICdlbm91Z2gnIHJhbmRvbW5lc3MsIGFuZCBgYEZhbHNlYGAgb3RoZXJ3aXNlLiAgWW91IGNhbiB1c2UKKyAgIDpmdW5jOmBzc2wuUkFORF9lZ2RgIGFuZCA6ZnVuYzpgc3NsLlJBTkRfYWRkYCB0byBpbmNyZWFzZSB0aGUgcmFuZG9tbmVzcyBvZgorICAgdGhlIHBzZXVkby1yYW5kb20gbnVtYmVyIGdlbmVyYXRvci4KIAogLi4gZnVuY3Rpb246OiBSQU5EX2VnZChwYXRoKQogCkBAIC0yNzksNyArMzM3LDcgQEAKIAogLi4gZnVuY3Rpb246OiBSQU5EX2FkZChieXRlcywgZW50cm9weSkKIAotICAgTWl4ZXMgdGhlIGdpdmVuICpieXRlcyogaW50byB0aGUgU1NMIHBzZXVkby1yYW5kb20gbnVtYmVyIGdlbmVyYXRvci4gIFRoZQorICAgTWl4IHRoZSBnaXZlbiAqYnl0ZXMqIGludG8gdGhlIFNTTCBwc2V1ZG8tcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuICBUaGUKICAgIHBhcmFtZXRlciAqZW50cm9weSogKGEgZmxvYXQpIGlzIGEgbG93ZXIgYm91bmQgb24gdGhlIGVudHJvcHkgY29udGFpbmVkIGluCiAgICBzdHJpbmcgKHNvIHlvdSBjYW4gYWx3YXlzIHVzZSA6Y29uc3Q6YDAuMGApLiAgU2VlIDpyZmM6YDE3NTBgIGZvciBtb3JlCiAgICBpbmZvcm1hdGlvbiBvbiBzb3VyY2VzIG9mIGVudHJvcHkuCkBAIC0zNTYsNiArNDE0LDYxIEBACiAgICBHaXZlbiBhIGNlcnRpZmljYXRlIGFzIGFuIEFTQ0lJIFBFTSBzdHJpbmcsIHJldHVybnMgYSBERVItZW5jb2RlZCBzZXF1ZW5jZSBvZgogICAgYnl0ZXMgZm9yIHRoYXQgc2FtZSBjZXJ0aWZpY2F0ZS4KIAorLi4gZnVuY3Rpb246OiBnZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHMoKQorCisgICBSZXR1cm5zIGEgbmFtZWQgdHVwbGUgd2l0aCBwYXRocyB0byBPcGVuU1NMJ3MgZGVmYXVsdCBjYWZpbGUgYW5kIGNhcGF0aC4KKyAgIFRoZSBwYXRocyBhcmUgdGhlIHNhbWUgYXMgdXNlZCBieQorICAgOm1ldGg6YFNTTENvbnRleHQuc2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzYC4gVGhlIHJldHVybiB2YWx1ZSBpcyBhCisgICA6dGVybTpgbmFtZWQgdHVwbGVgIGBgRGVmYXVsdFZlcmlmeVBhdGhzYGA6CisKKyAgICogOmF0dHI6YGNhZmlsZWAgLSByZXNvbHZlZCBwYXRoIHRvIGNhZmlsZSBvciBOb25lIGlmIHRoZSBmaWxlIGRvZXNuJ3QgZXhpc3QsCisgICAqIDphdHRyOmBjYXBhdGhgIC0gcmVzb2x2ZWQgcGF0aCB0byBjYXBhdGggb3IgTm9uZSBpZiB0aGUgZGlyZWN0b3J5IGRvZXNuJ3QgZXhpc3QsCisgICAqIDphdHRyOmBvcGVuc3NsX2NhZmlsZV9lbnZgIC0gT3BlblNTTCdzIGVudmlyb25tZW50IGtleSB0aGF0IHBvaW50cyB0byBhIGNhZmlsZSwKKyAgICogOmF0dHI6YG9wZW5zc2xfY2FmaWxlYCAtIGhhcmQgY29kZWQgcGF0aCB0byBhIGNhZmlsZSwKKyAgICogOmF0dHI6YG9wZW5zc2xfY2FwYXRoX2VudmAgLSBPcGVuU1NMJ3MgZW52aXJvbm1lbnQga2V5IHRoYXQgcG9pbnRzIHRvIGEgY2FwYXRoLAorICAgKiA6YXR0cjpgb3BlbnNzbF9jYXBhdGhgIC0gaGFyZCBjb2RlZCBwYXRoIHRvIGEgY2FwYXRoIGRpcmVjdG9yeQorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworLi4gZnVuY3Rpb246OiBlbnVtX2NlcnRpZmljYXRlcyhzdG9yZV9uYW1lKQorCisgICBSZXRyaWV2ZSBjZXJ0aWZpY2F0ZXMgZnJvbSBXaW5kb3dzJyBzeXN0ZW0gY2VydCBzdG9yZS4gKnN0b3JlX25hbWUqIG1heSBiZQorICAgb25lIG9mIGBgQ0FgYCwgYGBST09UYGAgb3IgYGBNWWBgLiBXaW5kb3dzIG1heSBwcm92aWRlIGFkZGl0aW9uYWwgY2VydAorICAgc3RvcmVzLCB0b28uCisKKyAgIFRoZSBmdW5jdGlvbiByZXR1cm5zIGEgbGlzdCBvZiAoY2VydF9ieXRlcywgZW5jb2RpbmdfdHlwZSwgdHJ1c3QpIHR1cGxlcy4KKyAgIFRoZSBlbmNvZGluZ190eXBlIHNwZWNpZmllcyB0aGUgZW5jb2Rpbmcgb2YgY2VydF9ieXRlcy4gSXQgaXMgZWl0aGVyCisgICA6Y29uc3Q6YHg1MDlfYXNuYCBmb3IgWC41MDkgQVNOLjEgZGF0YSBvciA6Y29uc3Q6YHBrY3NfN19hc25gIGZvcgorICAgUEtDUyM3IEFTTi4xIGRhdGEuIFRydXN0IHNwZWNpZmllcyB0aGUgcHVycG9zZSBvZiB0aGUgY2VydGlmaWNhdGUgYXMgYSBzZXQKKyAgIG9mIE9JRFMgb3IgZXhhY3RseSBgYFRydWVgYCBpZiB0aGUgY2VydGlmaWNhdGUgaXMgdHJ1c3R3b3J0aHkgZm9yIGFsbAorICAgcHVycG9zZXMuCisKKyAgIEV4YW1wbGU6OgorCisgICAgICA+Pj4gc3NsLmVudW1fY2VydGlmaWNhdGVzKCJDQSIpCisgICAgICBbKGInZGF0YS4uLicsICd4NTA5X2FzbicsIHsnMS4zLjYuMS41LjUuNy4zLjEnLCAnMS4zLjYuMS41LjUuNy4zLjInfSksCisgICAgICAgKGInZGF0YS4uLicsICd4NTA5X2FzbicsIFRydWUpXQorCisgICBBdmFpbGFiaWxpdHk6IFdpbmRvd3MuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisuLiBmdW5jdGlvbjo6IGVudW1fY3JscyhzdG9yZV9uYW1lKQorCisgICBSZXRyaWV2ZSBDUkxzIGZyb20gV2luZG93cycgc3lzdGVtIGNlcnQgc3RvcmUuICpzdG9yZV9uYW1lKiBtYXkgYmUKKyAgIG9uZSBvZiBgYENBYGAsIGBgUk9PVGBgIG9yIGBgTVlgYC4gV2luZG93cyBtYXkgcHJvdmlkZSBhZGRpdGlvbmFsIGNlcnQKKyAgIHN0b3JlcywgdG9vLgorCisgICBUaGUgZnVuY3Rpb24gcmV0dXJucyBhIGxpc3Qgb2YgKGNlcnRfYnl0ZXMsIGVuY29kaW5nX3R5cGUsIHRydXN0KSB0dXBsZXMuCisgICBUaGUgZW5jb2RpbmdfdHlwZSBzcGVjaWZpZXMgdGhlIGVuY29kaW5nIG9mIGNlcnRfYnl0ZXMuIEl0IGlzIGVpdGhlcgorICAgOmNvbnN0OmB4NTA5X2FzbmAgZm9yIFguNTA5IEFTTi4xIGRhdGEgb3IgOmNvbnN0OmBwa2NzXzdfYXNuYCBmb3IKKyAgIFBLQ1MjNyBBU04uMSBkYXRhLgorCisgICBBdmFpbGFiaWxpdHk6IFdpbmRvd3MuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIENvbnN0YW50cwogXl5eXl5eXl5eCiAKQEAgLTM5MiwzNCArNTA1LDkxIEBACiAgICBiZSBwYXNzZWQsIGVpdGhlciB0byA6bWV0aDpgU1NMQ29udGV4dC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnNgIG9yIGFzIGEKICAgIHZhbHVlIG9mIHRoZSBgYGNhX2NlcnRzYGAgcGFyYW1ldGVyIHRvIDpmdW5jOmB3cmFwX3NvY2tldGAuCiAKKy4uIGRhdGE6OiBWRVJJRllfREVGQVVMVAorCisgICBQb3NzaWJsZSB2YWx1ZSBmb3IgOmF0dHI6YFNTTENvbnRleHQudmVyaWZ5X2ZsYWdzYC4gSW4gdGhpcyBtb2RlLCBjZXJ0aWZpY2F0ZQorICAgcmV2b2NhdGlvbiBsaXN0cyAoQ1JMcykgYXJlIG5vdCBjaGVja2VkLiBCeSBkZWZhdWx0IE9wZW5TU0wgZG9lcyBuZWl0aGVyCisgICByZXF1aXJlIG5vciB2ZXJpZnkgQ1JMcy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKy4uIGRhdGE6OiBWRVJJRllfQ1JMX0NIRUNLX0xFQUYKKworICAgUG9zc2libGUgdmFsdWUgZm9yIDphdHRyOmBTU0xDb250ZXh0LnZlcmlmeV9mbGFnc2AuIEluIHRoaXMgbW9kZSwgb25seSB0aGUKKyAgIHBlZXIgY2VydCBpcyBjaGVjayBidXQgbm9uIG9mIHRoZSBpbnRlcm1lZGlhdGUgQ0EgY2VydGlmaWNhdGVzLiBUaGUgbW9kZQorICAgcmVxdWlyZXMgYSB2YWxpZCBDUkwgdGhhdCBpcyBzaWduZWQgYnkgdGhlIHBlZXIgY2VydCdzIGlzc3VlciAoaXRzIGRpcmVjdAorICAgYW5jZXN0b3IgQ0EpLiBJZiBubyBwcm9wZXIgaGFzIGJlZW4gbG9hZGVkCisgICA6YXR0cjpgU1NMQ29udGV4dC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnNgLCB2YWxpZGF0aW9uIHdpbGwgZmFpbC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKy4uIGRhdGE6OiBWRVJJRllfQ1JMX0NIRUNLX0NIQUlOCisKKyAgIFBvc3NpYmxlIHZhbHVlIGZvciA6YXR0cjpgU1NMQ29udGV4dC52ZXJpZnlfZmxhZ3NgLiBJbiB0aGlzIG1vZGUsIENSTHMgb2YKKyAgIGFsbCBjZXJ0aWZpY2F0ZXMgaW4gdGhlIHBlZXIgY2VydCBjaGFpbiBhcmUgY2hlY2tlZC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKy4uIGRhdGE6OiBWRVJJRllfWDUwOV9TVFJJQ1QKKworICAgUG9zc2libGUgdmFsdWUgZm9yIDphdHRyOmBTU0xDb250ZXh0LnZlcmlmeV9mbGFnc2AgdG8gZGlzYWJsZSB3b3JrYXJvdW5kcworICAgZm9yIGJyb2tlbiBYLjUwOSBjZXJ0aWZpY2F0ZXMuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisuLiBkYXRhOjogVkVSSUZZX1g1MDlfVFJVU1RFRF9GSVJTVAorCisgICBQb3NzaWJsZSB2YWx1ZSBmb3IgOmF0dHI6YFNTTENvbnRleHQudmVyaWZ5X2ZsYWdzYC4gSXQgaW5zdHJ1Y3RzIE9wZW5TU0wgdG8KKyAgIHByZWZlciB0cnVzdGVkIGNlcnRpZmljYXRlcyB3aGVuIGJ1aWxkaW5nIHRoZSB0cnVzdCBjaGFpbiB0byB2YWxpZGF0ZSBhCisgICBjZXJ0aWZpY2F0ZS4gVGhpcyBmbGFnIGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40LjQKKworLi4gZGF0YTo6IFBST1RPQ09MX1NTTHYyMworCisgICBTZWxlY3RzIHRoZSBoaWdoZXN0IHByb3RvY29sIHZlcnNpb24gdGhhdCBib3RoIHRoZSBjbGllbnQgYW5kIHNlcnZlciBzdXBwb3J0LgorICAgRGVzcGl0ZSB0aGUgbmFtZSwgdGhpcyBvcHRpb24gY2FuIHNlbGVjdCAiVExTIiBwcm90b2NvbHMgYXMgd2VsbCBhcyAiU1NMIi4KKwogLi4gZGF0YTo6IFBST1RPQ09MX1NTTHYyCiAKICAgIFNlbGVjdHMgU1NMIHZlcnNpb24gMiBhcyB0aGUgY2hhbm5lbCBlbmNyeXB0aW9uIHByb3RvY29sLgogCi0gICBUaGlzIHByb3RvY29sIGlzIG5vdCBhdmFpbGFibGUgaWYgT3BlblNTTCBpcyBjb21waWxlZCB3aXRoIE9QRU5TU0xfTk9fU1NMMgotICAgZmxhZy4KKyAgIFRoaXMgcHJvdG9jb2wgaXMgbm90IGF2YWlsYWJsZSBpZiBPcGVuU1NMIGlzIGNvbXBpbGVkIHdpdGggdGhlCisgICBgYE9QRU5TU0xfTk9fU1NMMmBgIGZsYWcuCiAKICAgIC4uIHdhcm5pbmc6OgogCiAgICAgICBTU0wgdmVyc2lvbiAyIGlzIGluc2VjdXJlLiAgSXRzIHVzZSBpcyBoaWdobHkgZGlzY291cmFnZWQuCiAKLS4uIGRhdGE6OiBQUk9UT0NPTF9TU0x2MjMKLQotICAgU2VsZWN0cyBTU0wgdmVyc2lvbiAyIG9yIDMgYXMgdGhlIGNoYW5uZWwgZW5jcnlwdGlvbiBwcm90b2NvbC4gIFRoaXMgaXMgYQotICAgc2V0dGluZyB0byB1c2Ugd2l0aCBzZXJ2ZXJzIGZvciBtYXhpbXVtIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgb3RoZXIgZW5kIG9mCi0gICBhbiBTU0wgY29ubmVjdGlvbiwgYnV0IGl0IG1heSBjYXVzZSB0aGUgc3BlY2lmaWMgY2lwaGVycyBjaG9zZW4gZm9yIHRoZQotICAgZW5jcnlwdGlvbiB0byBiZSBvZiBmYWlybHkgbG93IHF1YWxpdHkuCi0KIC4uIGRhdGE6OiBQUk9UT0NPTF9TU0x2MwogCi0gICBTZWxlY3RzIFNTTCB2ZXJzaW9uIDMgYXMgdGhlIGNoYW5uZWwgZW5jcnlwdGlvbiBwcm90b2NvbC4gIEZvciBjbGllbnRzLCB0aGlzCi0gICBpcyB0aGUgbWF4aW1hbGx5IGNvbXBhdGlibGUgU1NMIHZhcmlhbnQuCisgICBTZWxlY3RzIFNTTCB2ZXJzaW9uIDMgYXMgdGhlIGNoYW5uZWwgZW5jcnlwdGlvbiBwcm90b2NvbC4KKworICAgVGhpcyBwcm90b2NvbCBpcyBub3QgYmUgYXZhaWxhYmxlIGlmIE9wZW5TU0wgaXMgY29tcGlsZWQgd2l0aCB0aGUKKyAgIGBgT1BFTlNTTF9OT19TU0x2M2BgIGZsYWcuCisKKyAgIC4uIHdhcm5pbmc6OgorCisgICAgICBTU0wgdmVyc2lvbiAzIGlzIGluc2VjdXJlLiAgSXRzIHVzZSBpcyBoaWdobHkgZGlzY291cmFnZWQuCiAKIC4uIGRhdGE6OiBQUk9UT0NPTF9UTFN2MQogCi0gICBTZWxlY3RzIFRMUyB2ZXJzaW9uIDEgYXMgdGhlIGNoYW5uZWwgZW5jcnlwdGlvbiBwcm90b2NvbC4gIFRoaXMgaXMgdGhlIG1vc3QKLSAgIG1vZGVybiB2ZXJzaW9uLCBhbmQgcHJvYmFibHkgdGhlIGJlc3QgY2hvaWNlIGZvciBtYXhpbXVtIHByb3RlY3Rpb24sIGlmIGJvdGgKLSAgIHNpZGVzIGNhbiBzcGVhayBpdC4KKyAgIFNlbGVjdHMgVExTIHZlcnNpb24gMS4wIGFzIHRoZSBjaGFubmVsIGVuY3J5cHRpb24gcHJvdG9jb2wuCisKKy4uIGRhdGE6OiBQUk9UT0NPTF9UTFN2MV8xCisKKyAgIFNlbGVjdHMgVExTIHZlcnNpb24gMS4xIGFzIHRoZSBjaGFubmVsIGVuY3J5cHRpb24gcHJvdG9jb2wuCisgICBBdmFpbGFibGUgb25seSB3aXRoIG9wZW5zc2wgdmVyc2lvbiAxLjAuMSsuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisuLiBkYXRhOjogUFJPVE9DT0xfVExTdjFfMgorCisgICBTZWxlY3RzIFRMUyB2ZXJzaW9uIDEuMiBhcyB0aGUgY2hhbm5lbCBlbmNyeXB0aW9uIHByb3RvY29sLiBUaGlzIGlzIHRoZQorICAgbW9zdCBtb2Rlcm4gdmVyc2lvbiwgYW5kIHByb2JhYmx5IHRoZSBiZXN0IGNob2ljZSBmb3IgbWF4aW11bSBwcm90ZWN0aW9uLAorICAgaWYgYm90aCBzaWRlcyBjYW4gc3BlYWsgaXQuICBBdmFpbGFibGUgb25seSB3aXRoIG9wZW5zc2wgdmVyc2lvbiAxLjAuMSsuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAogCiAuLiBkYXRhOjogT1BfQUxMCiAKQEAgLTQ1Myw2ICs2MjMsMjIgQEAKIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCiAKKy4uIGRhdGE6OiBPUF9OT19UTFN2MV8xCisKKyAgIFByZXZlbnRzIGEgVExTdjEuMSBjb25uZWN0aW9uLiBUaGlzIG9wdGlvbiBpcyBvbmx5IGFwcGxpY2FibGUgaW4gY29uanVuY3Rpb24KKyAgIHdpdGggOmNvbnN0OmBQUk9UT0NPTF9TU0x2MjNgLiBJdCBwcmV2ZW50cyB0aGUgcGVlcnMgZnJvbSBjaG9vc2luZyBUTFN2MS4xIGFzCisgICB0aGUgcHJvdG9jb2wgdmVyc2lvbi4gQXZhaWxhYmxlIG9ubHkgd2l0aCBvcGVuc3NsIHZlcnNpb24gMS4wLjErLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworLi4gZGF0YTo6IE9QX05PX1RMU3YxXzIKKworICAgUHJldmVudHMgYSBUTFN2MS4yIGNvbm5lY3Rpb24uIFRoaXMgb3B0aW9uIGlzIG9ubHkgYXBwbGljYWJsZSBpbiBjb25qdW5jdGlvbgorICAgd2l0aCA6Y29uc3Q6YFBST1RPQ09MX1NTTHYyM2AuIEl0IHByZXZlbnRzIHRoZSBwZWVycyBmcm9tIGNob29zaW5nIFRMU3YxLjIgYXMKKyAgIHRoZSBwcm90b2NvbCB2ZXJzaW9uLiBBdmFpbGFibGUgb25seSB3aXRoIG9wZW5zc2wgdmVyc2lvbiAxLjAuMSsuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiAuLiBkYXRhOjogT1BfQ0lQSEVSX1NFUlZFUl9QUkVGRVJFTkNFCiAKICAgIFVzZSB0aGUgc2VydmVyJ3MgY2lwaGVyIG9yZGVyaW5nIHByZWZlcmVuY2UsIHJhdGhlciB0aGFuIHRoZSBjbGllbnQncy4KQEAgLTQ5Niw5ICs2ODIsNyBAQAogLi4gZGF0YTo6IEhBU19TTkkKIAogICAgV2hldGhlciB0aGUgT3BlblNTTCBsaWJyYXJ5IGhhcyBidWlsdC1pbiBzdXBwb3J0IGZvciB0aGUgKlNlcnZlciBOYW1lCi0gICBJbmRpY2F0aW9uKiBleHRlbnNpb24gdG8gdGhlIFNTTHYzIGFuZCBUTFN2MSBwcm90b2NvbHMgKGFzIGRlZmluZWQgaW4KLSAgIDpyZmM6YDQzNjZgKS4gIFdoZW4gdHJ1ZSwgeW91IGNhbiB1c2UgdGhlICpzZXJ2ZXJfaG9zdG5hbWUqIGFyZ3VtZW50IHRvCi0gICA6bWV0aDpgU1NMQ29udGV4dC53cmFwX3NvY2tldGAuCisgICBJbmRpY2F0aW9uKiBleHRlbnNpb24gKGFzIGRlZmluZWQgaW4gOnJmYzpgNDM2NmApLgogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKIApAQCAtNTQ5LDQ1ICs3MzMsMTIyIEBACiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgogCisuLiBkYXRhOjogQUxFUlRfREVTQ1JJUFRJT05fSEFORFNIQUtFX0ZBSUxVUkUKKyAgICAgICAgICBBTEVSVF9ERVNDUklQVElPTl9JTlRFUk5BTF9FUlJPUgorICAgICAgICAgIEFMRVJUX0RFU0NSSVBUSU9OXyoKKworICAgQWxlcnQgRGVzY3JpcHRpb25zIGZyb20gOnJmYzpgNTI0NmAgYW5kIG90aGVycy4gVGhlIGBJQU5BIFRMUyBBbGVydCBSZWdpc3RyeQorICAgPGh0dHA6Ly93d3cuaWFuYS5vcmcvYXNzaWdubWVudHMvdGxzLXBhcmFtZXRlcnMvdGxzLXBhcmFtZXRlcnMueG1sI3Rscy1wYXJhbWV0ZXJzLTY+YF8KKyAgIGNvbnRhaW5zIHRoaXMgbGlzdCBhbmQgcmVmZXJlbmNlcyB0byB0aGUgUkZDcyB3aGVyZSB0aGVpciBtZWFuaW5nIGlzIGRlZmluZWQuCisKKyAgIFVzZWQgYXMgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gaW4KKyAgIDptZXRoOmBTU0xDb250ZXh0LnNldF9zZXJ2ZXJuYW1lX2NhbGxiYWNrYC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKy4uIGRhdGE6OiBQdXJwb3NlLlNFUlZFUl9BVVRICisKKyAgIE9wdGlvbiBmb3IgOmZ1bmM6YGNyZWF0ZV9kZWZhdWx0X2NvbnRleHRgIGFuZAorICAgOm1ldGg6YFNTTENvbnRleHQubG9hZF9kZWZhdWx0X2NlcnRzYC4gIFRoaXMgdmFsdWUgaW5kaWNhdGVzIHRoYXQgdGhlCisgICBjb250ZXh0IG1heSBiZSB1c2VkIHRvIGF1dGhlbnRpY2F0ZSBXZWIgc2VydmVycyAodGhlcmVmb3JlLCBpdCB3aWxsCisgICBiZSB1c2VkIHRvIGNyZWF0ZSBjbGllbnQtc2lkZSBzb2NrZXRzKS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKy4uIGRhdGE6OiBQdXJwb3NlLkNMSUVOVF9BVVRICisKKyAgIE9wdGlvbiBmb3IgOmZ1bmM6YGNyZWF0ZV9kZWZhdWx0X2NvbnRleHRgIGFuZAorICAgOm1ldGg6YFNTTENvbnRleHQubG9hZF9kZWZhdWx0X2NlcnRzYC4gIFRoaXMgdmFsdWUgaW5kaWNhdGVzIHRoYXQgdGhlCisgICBjb250ZXh0IG1heSBiZSB1c2VkIHRvIGF1dGhlbnRpY2F0ZSBXZWIgY2xpZW50cyAodGhlcmVmb3JlLCBpdCB3aWxsCisgICBiZSB1c2VkIHRvIGNyZWF0ZSBzZXJ2ZXItc2lkZSBzb2NrZXRzKS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIAogU1NMIFNvY2tldHMKIC0tLS0tLS0tLS0tCiAKLVNTTCBzb2NrZXRzIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBtZXRob2RzIG9mIDpyZWY6YHNvY2tldC1vYmplY3RzYDoKKy4uIGNsYXNzOjogU1NMU29ja2V0KHNvY2tldC5zb2NrZXQpCiAKLS0gOm1ldGg6YH5zb2NrZXQuc29ja2V0LmFjY2VwdCgpYAotLSA6bWV0aDpgfnNvY2tldC5zb2NrZXQuYmluZCgpYAotLSA6bWV0aDpgfnNvY2tldC5zb2NrZXQuY2xvc2UoKWAKLS0gOm1ldGg6YH5zb2NrZXQuc29ja2V0LmNvbm5lY3QoKWAKLS0gOm1ldGg6YH5zb2NrZXQuc29ja2V0LmRldGFjaCgpYAotLSA6bWV0aDpgfnNvY2tldC5zb2NrZXQuZmlsZW5vKClgCi0tIDptZXRoOmB+c29ja2V0LnNvY2tldC5nZXRwZWVybmFtZSgpYCwgOm1ldGg6YH5zb2NrZXQuc29ja2V0LmdldHNvY2tuYW1lKClgCi0tIDptZXRoOmB+c29ja2V0LnNvY2tldC5nZXRzb2Nrb3B0KClgLCA6bWV0aDpgfnNvY2tldC5zb2NrZXQuc2V0c29ja29wdCgpYAotLSA6bWV0aDpgfnNvY2tldC5zb2NrZXQuZ2V0dGltZW91dCgpYCwgOm1ldGg6YH5zb2NrZXQuc29ja2V0LnNldHRpbWVvdXQoKWAsCi0gIDptZXRoOmB+c29ja2V0LnNvY2tldC5zZXRibG9ja2luZygpYAotLSA6bWV0aDpgfnNvY2tldC5zb2NrZXQubGlzdGVuKClgCi0tIDptZXRoOmB+c29ja2V0LnNvY2tldC5tYWtlZmlsZSgpYAotLSA6bWV0aDpgfnNvY2tldC5zb2NrZXQucmVjdigpYCwgOm1ldGg6YH5zb2NrZXQuc29ja2V0LnJlY3ZfaW50bygpYAotICAoYnV0IHBhc3NpbmcgYSBub24temVybyBgYGZsYWdzYGAgYXJndW1lbnQgaXMgbm90IGFsbG93ZWQpCi0tIDptZXRoOmB+c29ja2V0LnNvY2tldC5zZW5kKClgLCA6bWV0aDpgfnNvY2tldC5zb2NrZXQuc2VuZGFsbCgpYCAod2l0aAotICB0aGUgc2FtZSBsaW1pdGF0aW9uKQotLSA6bWV0aDpgfnNvY2tldC5zb2NrZXQuc2h1dGRvd24oKWAKKyAgIFNTTCBzb2NrZXRzIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBtZXRob2RzIG9mIDpyZWY6YHNvY2tldC1vYmplY3RzYDoKIAotSG93ZXZlciwgc2luY2UgdGhlIFNTTCAoYW5kIFRMUykgcHJvdG9jb2wgaGFzIGl0cyBvd24gZnJhbWluZyBhdG9wCi1vZiBUQ1AsIHRoZSBTU0wgc29ja2V0cyBhYnN0cmFjdGlvbiBjYW4sIGluIGNlcnRhaW4gcmVzcGVjdHMsIGRpdmVyZ2UgZnJvbQotdGhlIHNwZWNpZmljYXRpb24gb2Ygbm9ybWFsLCBPUy1sZXZlbCBzb2NrZXRzLiAgU2VlIGVzcGVjaWFsbHkgdGhlCi06cmVmOmBub3RlcyBvbiBub24tYmxvY2tpbmcgc29ja2V0cyA8c3NsLW5vbmJsb2NraW5nPmAuCisgICAtIDptZXRoOmB+c29ja2V0LnNvY2tldC5hY2NlcHQoKWAKKyAgIC0gOm1ldGg6YH5zb2NrZXQuc29ja2V0LmJpbmQoKWAKKyAgIC0gOm1ldGg6YH5zb2NrZXQuc29ja2V0LmNsb3NlKClgCisgICAtIDptZXRoOmB+c29ja2V0LnNvY2tldC5jb25uZWN0KClgCisgICAtIDptZXRoOmB+c29ja2V0LnNvY2tldC5kZXRhY2goKWAKKyAgIC0gOm1ldGg6YH5zb2NrZXQuc29ja2V0LmZpbGVubygpYAorICAgLSA6bWV0aDpgfnNvY2tldC5zb2NrZXQuZ2V0cGVlcm5hbWUoKWAsIDptZXRoOmB+c29ja2V0LnNvY2tldC5nZXRzb2NrbmFtZSgpYAorICAgLSA6bWV0aDpgfnNvY2tldC5zb2NrZXQuZ2V0c29ja29wdCgpYCwgOm1ldGg6YH5zb2NrZXQuc29ja2V0LnNldHNvY2tvcHQoKWAKKyAgIC0gOm1ldGg6YH5zb2NrZXQuc29ja2V0LmdldHRpbWVvdXQoKWAsIDptZXRoOmB+c29ja2V0LnNvY2tldC5zZXR0aW1lb3V0KClgLAorICAgICA6bWV0aDpgfnNvY2tldC5zb2NrZXQuc2V0YmxvY2tpbmcoKWAKKyAgIC0gOm1ldGg6YH5zb2NrZXQuc29ja2V0Lmxpc3RlbigpYAorICAgLSA6bWV0aDpgfnNvY2tldC5zb2NrZXQubWFrZWZpbGUoKWAKKyAgIC0gOm1ldGg6YH5zb2NrZXQuc29ja2V0LnJlY3YoKWAsIDptZXRoOmB+c29ja2V0LnNvY2tldC5yZWN2X2ludG8oKWAKKyAgICAgKGJ1dCBwYXNzaW5nIGEgbm9uLXplcm8gYGBmbGFnc2BgIGFyZ3VtZW50IGlzIG5vdCBhbGxvd2VkKQorICAgLSA6bWV0aDpgfnNvY2tldC5zb2NrZXQuc2VuZCgpYCwgOm1ldGg6YH5zb2NrZXQuc29ja2V0LnNlbmRhbGwoKWAgKHdpdGgKKyAgICAgdGhlIHNhbWUgbGltaXRhdGlvbikKKyAgIC0gOm1ldGg6YH5zb2NrZXQuc29ja2V0LnNodXRkb3duKClgCisKKyAgIEhvd2V2ZXIsIHNpbmNlIHRoZSBTU0wgKGFuZCBUTFMpIHByb3RvY29sIGhhcyBpdHMgb3duIGZyYW1pbmcgYXRvcAorICAgb2YgVENQLCB0aGUgU1NMIHNvY2tldHMgYWJzdHJhY3Rpb24gY2FuLCBpbiBjZXJ0YWluIHJlc3BlY3RzLCBkaXZlcmdlIGZyb20KKyAgIHRoZSBzcGVjaWZpY2F0aW9uIG9mIG5vcm1hbCwgT1MtbGV2ZWwgc29ja2V0cy4gIFNlZSBlc3BlY2lhbGx5IHRoZQorICAgOnJlZjpgbm90ZXMgb24gbm9uLWJsb2NraW5nIHNvY2tldHMgPHNzbC1ub25ibG9ja2luZz5gLgorCisgICBVc3VhbGx5LCA6Y2xhc3M6YFNTTFNvY2tldGAgYXJlIG5vdCBjcmVhdGVkIGRpcmVjdGx5LCBidXQgdXNpbmcgdGhlCisgICA6ZnVuYzpgd3JhcF9zb2NrZXRgIGZ1bmN0aW9uIG9yIHRoZSA6bWV0aDpgU1NMQ29udGV4dC53cmFwX3NvY2tldGAgbWV0aG9kLgogCiBTU0wgc29ja2V0cyBhbHNvIGhhdmUgdGhlIGZvbGxvd2luZyBhZGRpdGlvbmFsIG1ldGhvZHMgYW5kIGF0dHJpYnV0ZXM6CiAKKy4uIG1ldGhvZDo6IFNTTFNvY2tldC5yZWFkKGxlbj0wLCBidWZmZXI9Tm9uZSkKKworICAgUmVhZCB1cCB0byAqbGVuKiBieXRlcyBvZiBkYXRhIGZyb20gdGhlIFNTTCBzb2NrZXQgYW5kIHJldHVybiB0aGUgcmVzdWx0IGFzCisgICBhIGBgYnl0ZXNgYCBpbnN0YW5jZS4gSWYgKmJ1ZmZlciogaXMgc3BlY2lmaWVkLCB0aGVuIHJlYWQgaW50byB0aGUgYnVmZmVyCisgICBpbnN0ZWFkLCBhbmQgcmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVhZC4KKworICAgUmFpc2UgOmV4YzpgU1NMV2FudFJlYWRFcnJvcmAgb3IgOmV4YzpgU1NMV2FudFdyaXRlRXJyb3JgIGlmIHRoZSBzb2NrZXQgaXMKKyAgIDpyZWY6YG5vbi1ibG9ja2luZyA8c3NsLW5vbmJsb2NraW5nPmAgYW5kIHRoZSByZWFkIHdvdWxkIGJsb2NrLgorCisgICBBcyBhdCBhbnkgdGltZSBhIHJlLW5lZ290aWF0aW9uIGlzIHBvc3NpYmxlLCBhIGNhbGwgdG8gOm1ldGg6YHJlYWRgIGNhbiBhbHNvCisgICBjYXVzZSB3cml0ZSBvcGVyYXRpb25zLgorCisuLiBtZXRob2Q6OiBTU0xTb2NrZXQud3JpdGUoYnVmKQorCisgICBXcml0ZSAqYnVmKiB0byB0aGUgU1NMIHNvY2tldCBhbmQgcmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbi4gVGhlCisgICAqYnVmKiBhcmd1bWVudCBtdXN0IGJlIGFuIG9iamVjdCBzdXBwb3J0aW5nIHRoZSBidWZmZXIgaW50ZXJmYWNlLgorCisgICBSYWlzZSA6ZXhjOmBTU0xXYW50UmVhZEVycm9yYCBvciA6ZXhjOmBTU0xXYW50V3JpdGVFcnJvcmAgaWYgdGhlIHNvY2tldCBpcworICAgOnJlZjpgbm9uLWJsb2NraW5nIDxzc2wtbm9uYmxvY2tpbmc+YCBhbmQgdGhlIHdyaXRlIHdvdWxkIGJsb2NrLgorCisgICBBcyBhdCBhbnkgdGltZSBhIHJlLW5lZ290aWF0aW9uIGlzIHBvc3NpYmxlLCBhIGNhbGwgdG8gOm1ldGg6YHdyaXRlYCBjYW4KKyAgIGFsc28gY2F1c2UgcmVhZCBvcGVyYXRpb25zLgorCisuLiBub3RlOjoKKworICAgVGhlIDptZXRoOmB+U1NMU29ja2V0LnJlYWRgIGFuZCA6bWV0aDpgflNTTFNvY2tldC53cml0ZWAgbWV0aG9kcyBhcmUgdGhlCisgICBsb3ctbGV2ZWwgbWV0aG9kcyB0aGF0IHJlYWQgYW5kIHdyaXRlIHVuZW5jcnlwdGVkLCBhcHBsaWNhdGlvbi1sZXZlbCBkYXRhCisgICBhbmQgZGVjcnlwdC9lbmNyeXB0IGl0IHRvIGVuY3J5cHRlZCwgd2lyZS1sZXZlbCBkYXRhLiBUaGVzZSBtZXRob2RzCisgICByZXF1aXJlIGFuIGFjdGl2ZSBTU0wgY29ubmVjdGlvbiwgaS5lLiB0aGUgaGFuZHNoYWtlIHdhcyBjb21wbGV0ZWQgYW5kCisgICA6bWV0aDpgU1NMU29ja2V0LnVud3JhcGAgd2FzIG5vdCBjYWxsZWQuCisKKyAgIE5vcm1hbGx5IHlvdSBzaG91bGQgdXNlIHRoZSBzb2NrZXQgQVBJIG1ldGhvZHMgbGlrZQorICAgOm1ldGg6YH5zb2NrZXQuc29ja2V0LnJlY3ZgIGFuZCA6bWV0aDpgfnNvY2tldC5zb2NrZXQuc2VuZGAgaW5zdGVhZCBvZiB0aGVzZQorICAgbWV0aG9kcy4KKwogLi4gbWV0aG9kOjogU1NMU29ja2V0LmRvX2hhbmRzaGFrZSgpCiAKICAgIFBlcmZvcm0gdGhlIFNTTCBzZXR1cCBoYW5kc2hha2UuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgaGFuZHNoYWtlIG1ldGhvZCBhbHNvIHBlcmZvcm1zIDpmdW5jOmBtYXRjaF9ob3N0bmFtZWAgd2hlbiB0aGUKKyAgICAgIDphdHRyOmB+U1NMQ29udGV4dC5jaGVja19ob3N0bmFtZWAgYXR0cmlidXRlIG9mIHRoZSBzb2NrZXQncworICAgICAgOmF0dHI6YH5TU0xTb2NrZXQuY29udGV4dGAgaXMgdHJ1ZS4KKwogLi4gbWV0aG9kOjogU1NMU29ja2V0LmdldHBlZXJjZXJ0KGJpbmFyeV9mb3JtPUZhbHNlKQogCiAgICBJZiB0aGVyZSBpcyBubyBjZXJ0aWZpY2F0ZSBmb3IgdGhlIHBlZXIgb24gdGhlIG90aGVyIGVuZCBvZiB0aGUgY29ubmVjdGlvbiwKLSAgIHJldHVybnMgYGBOb25lYGAuCisgICByZXR1cm4gYGBOb25lYGAuICBJZiB0aGUgU1NMIGhhbmRzaGFrZSBoYXNuJ3QgYmVlbiBkb25lIHlldCwgcmFpc2UKKyAgIDpleGM6YFZhbHVlRXJyb3JgLgogCiAgICBJZiB0aGUgYGBiaW5hcnlfZm9ybWBgIHBhcmFtZXRlciBpcyA6Y29uc3Q6YEZhbHNlYCwgYW5kIGEgY2VydGlmaWNhdGUgd2FzCiAgICByZWNlaXZlZCBmcm9tIHRoZSBwZWVyLCB0aGlzIG1ldGhvZCByZXR1cm5zIGEgOmNsYXNzOmBkaWN0YCBpbnN0YW5jZS4gIElmIHRoZQpAQCAtNjQ1LDYgKzkwNiwxMSBAQAogICAgICAgVGhlIHJldHVybmVkIGRpY3Rpb25hcnkgaW5jbHVkZXMgYWRkaXRpb25hbCBpdGVtcyBzdWNoIGFzIGBgaXNzdWVyYGAKICAgICAgIGFuZCBgYG5vdEJlZm9yZWBgLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgOmV4YzpgVmFsdWVFcnJvcmAgaXMgcmFpc2VkIHdoZW4gdGhlIGhhbmRzaGFrZSBpc24ndCBkb25lLgorICAgICAgVGhlIHJldHVybmVkIGRpY3Rpb25hcnkgaW5jbHVkZXMgYWRkaXRpb25hbCBYNTA5djMgZXh0ZW5zaW9uIGl0ZW1zCisgICAgICAgIHN1Y2ggYXMgYGBjcmxEaXN0cmlidXRpb25Qb2ludHNgYCwgYGBjYUlzc3VlcnNgYCBhbmQgYGBPQ1NQYGAgVVJJcy4KKwogLi4gbWV0aG9kOjogU1NMU29ja2V0LmNpcGhlcigpCiAKICAgIFJldHVybnMgYSB0aHJlZS12YWx1ZSB0dXBsZSBjb250YWluaW5nIHRoZSBuYW1lIG9mIHRoZSBjaXBoZXIgYmVpbmcgdXNlZCwgdGhlCkBAIC02OTEsNiArOTU3LDExIEBACiAgICByZXR1cm5lZCBzb2NrZXQgc2hvdWxkIGFsd2F5cyBiZSB1c2VkIGZvciBmdXJ0aGVyIGNvbW11bmljYXRpb24gd2l0aCB0aGUKICAgIG90aGVyIHNpZGUgb2YgdGhlIGNvbm5lY3Rpb24sIHJhdGhlciB0aGFuIHRoZSBvcmlnaW5hbCBzb2NrZXQuCiAKKy4uIG1ldGhvZDo6IFNTTFNvY2tldC5wZW5kaW5nKCkKKworICAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGFscmVhZHkgZGVjcnlwdGVkIGJ5dGVzIGF2YWlsYWJsZSBmb3IgcmVhZCwgcGVuZGluZyBvbgorICAgdGhlIGNvbm5lY3Rpb24uCisKIC4uIGF0dHJpYnV0ZTo6IFNTTFNvY2tldC5jb250ZXh0CiAKICAgIFRoZSA6Y2xhc3M6YFNTTENvbnRleHRgIG9iamVjdCB0aGlzIFNTTCBzb2NrZXQgaXMgdGllZCB0by4gIElmIHRoZSBTU0wKQEAgLTcwMCw2ICs5NzEsMjAgQEAKIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCiAKKy4uIGF0dHJpYnV0ZTo6IFNTTFNvY2tldC5zZXJ2ZXJfc2lkZQorCisgICBBIGJvb2xlYW4gd2hpY2ggaXMgYGBUcnVlYGAgZm9yIHNlcnZlci1zaWRlIHNvY2tldHMgYW5kIGBgRmFsc2VgYCBmb3IKKyAgIGNsaWVudC1zaWRlIHNvY2tldHMuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgorCisuLiBhdHRyaWJ1dGU6OiBTU0xTb2NrZXQuc2VydmVyX2hvc3RuYW1lCisKKyAgIEhvc3RuYW1lIG9mIHRoZSBzZXJ2ZXI6IDpjbGFzczpgc3RyYCB0eXBlLCBvciBgYE5vbmVgYCBmb3Igc2VydmVyLXNpZGUKKyAgIHNvY2tldCBvciBpZiB0aGUgaG9zdG5hbWUgd2FzIG5vdCBzcGVjaWZpZWQgaW4gdGhlIGNvbnN0cnVjdG9yLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKKwogCiBTU0wgQ29udGV4dHMKIC0tLS0tLS0tLS0tLQpAQCAtNzE1LDExICsxMDAwLDMwIEBACiAKICAgIENyZWF0ZSBhIG5ldyBTU0wgY29udGV4dC4gIFlvdSBtdXN0IHBhc3MgKnByb3RvY29sKiB3aGljaCBtdXN0IGJlIG9uZQogICAgb2YgdGhlIGBgUFJPVE9DT0xfKmBgIGNvbnN0YW50cyBkZWZpbmVkIGluIHRoaXMgbW9kdWxlLgotICAgOmRhdGE6YFBST1RPQ09MX1NTTHYyM2AgaXMgcmVjb21tZW5kZWQgZm9yIG1heGltdW0gaW50ZXJvcGVyYWJpbGl0eS4KKyAgIDpkYXRhOmBQUk9UT0NPTF9TU0x2MjNgIGlzIGN1cnJlbnRseSByZWNvbW1lbmRlZCBmb3IgbWF4aW11bQorICAgaW50ZXJvcGVyYWJpbGl0eS4KKworICAgLi4gc2VlYWxzbzo6CisgICAgICA6ZnVuYzpgY3JlYXRlX2RlZmF1bHRfY29udGV4dGAgbGV0cyB0aGUgOm1vZDpgc3NsYCBtb2R1bGUgY2hvb3NlCisgICAgICBzZWN1cml0eSBzZXR0aW5ncyBmb3IgYSBnaXZlbiBwdXJwb3NlLgogCiAKIDpjbGFzczpgU1NMQ29udGV4dGAgb2JqZWN0cyBoYXZlIHRoZSBmb2xsb3dpbmcgbWV0aG9kcyBhbmQgYXR0cmlidXRlczoKIAorLi4gbWV0aG9kOjogU1NMQ29udGV4dC5jZXJ0X3N0b3JlX3N0YXRzKCkKKworICAgR2V0IHN0YXRpc3RpY3MgYWJvdXQgcXVhbnRpdGllcyBvZiBsb2FkZWQgWC41MDkgY2VydGlmaWNhdGVzLCBjb3VudCBvZgorICAgWC41MDkgY2VydGlmaWNhdGVzIGZsYWdnZWQgYXMgQ0EgY2VydGlmaWNhdGVzIGFuZCBjZXJ0aWZpY2F0ZSByZXZvY2F0aW9uCisgICBsaXN0cyBhcyBkaWN0aW9uYXJ5LgorCisgICBFeGFtcGxlIGZvciBhIGNvbnRleHQgd2l0aCBvbmUgQ0EgY2VydCBhbmQgb25lIG90aGVyIGNlcnQ6OgorCisgICAgICA+Pj4gY29udGV4dC5jZXJ0X3N0b3JlX3N0YXRzKCkKKyAgICAgIHsnY3JsJzogMCwgJ3g1MDlfY2EnOiAxLCAneDUwOSc6IDJ9CisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIC4uIG1ldGhvZDo6IFNTTENvbnRleHQubG9hZF9jZXJ0X2NoYWluKGNlcnRmaWxlLCBrZXlmaWxlPU5vbmUsIHBhc3N3b3JkPU5vbmUpCiAKICAgIExvYWQgYSBwcml2YXRlIGtleSBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgY2VydGlmaWNhdGUuICBUaGUgKmNlcnRmaWxlKgpAQCAtNzUwLDEyICsxMDU0LDMyIEBACiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMwogICAgICAgTmV3IG9wdGlvbmFsIGFyZ3VtZW50ICpwYXNzd29yZCouCiAKLS4uIG1ldGhvZDo6IFNTTENvbnRleHQubG9hZF92ZXJpZnlfbG9jYXRpb25zKGNhZmlsZT1Ob25lLCBjYXBhdGg9Tm9uZSkKKy4uIG1ldGhvZDo6IFNTTENvbnRleHQubG9hZF9kZWZhdWx0X2NlcnRzKHB1cnBvc2U9UHVycG9zZS5TRVJWRVJfQVVUSCkKKworICAgTG9hZCBhIHNldCBvZiBkZWZhdWx0ICJjZXJ0aWZpY2F0aW9uIGF1dGhvcml0eSIgKENBKSBjZXJ0aWZpY2F0ZXMgZnJvbQorICAgZGVmYXVsdCBsb2NhdGlvbnMuIE9uIFdpbmRvd3MgaXQgbG9hZHMgQ0EgY2VydHMgZnJvbSB0aGUgYGBDQWBgIGFuZAorICAgYGBST09UYGAgc3lzdGVtIHN0b3Jlcy4gT24gb3RoZXIgc3lzdGVtcyBpdCBjYWxscworICAgOm1ldGg6YFNTTENvbnRleHQuc2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzYC4gSW4gdGhlIGZ1dHVyZSB0aGUgbWV0aG9kIG1heQorICAgbG9hZCBDQSBjZXJ0aWZpY2F0ZXMgZnJvbSBvdGhlciBsb2NhdGlvbnMsIHRvby4KKworICAgVGhlICpwdXJwb3NlKiBmbGFnIHNwZWNpZmllcyB3aGF0IGtpbmQgb2YgQ0EgY2VydGlmaWNhdGVzIGFyZSBsb2FkZWQuIFRoZQorICAgZGVmYXVsdCBzZXR0aW5ncyA6ZGF0YTpgUHVycG9zZS5TRVJWRVJfQVVUSGAgbG9hZHMgY2VydGlmaWNhdGVzLCB0aGF0IGFyZQorICAgZmxhZ2dlZCBhbmQgdHJ1c3RlZCBmb3IgVExTIHdlYiBzZXJ2ZXIgYXV0aGVudGljYXRpb24gKGNsaWVudCBzaWRlCisgICBzb2NrZXRzKS4gOmRhdGE6YFB1cnBvc2UuQ0xJRU5UX0FVVEhgIGxvYWRzIENBIGNlcnRpZmljYXRlcyBmb3IgY2xpZW50CisgICBjZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gb24gdGhlIHNlcnZlciBzaWRlLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworLi4gbWV0aG9kOjogU1NMQ29udGV4dC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoY2FmaWxlPU5vbmUsIGNhcGF0aD1Ob25lLCBjYWRhdGE9Tm9uZSkKIAogICAgTG9hZCBhIHNldCBvZiAiY2VydGlmaWNhdGlvbiBhdXRob3JpdHkiIChDQSkgY2VydGlmaWNhdGVzIHVzZWQgdG8gdmFsaWRhdGUKICAgIG90aGVyIHBlZXJzJyBjZXJ0aWZpY2F0ZXMgd2hlbiA6ZGF0YTpgdmVyaWZ5X21vZGVgIGlzIG90aGVyIHRoYW4KICAgIDpkYXRhOmBDRVJUX05PTkVgLiAgQXQgbGVhc3Qgb25lIG9mICpjYWZpbGUqIG9yICpjYXBhdGgqIG11c3QgYmUgc3BlY2lmaWVkLgogCisgICBUaGlzIG1ldGhvZCBjYW4gYWxzbyBsb2FkIGNlcnRpZmljYXRpb24gcmV2b2NhdGlvbiBsaXN0cyAoQ1JMcykgaW4gUEVNIG9yCisgICBERVIgZm9ybWF0LiBJbiBvcmRlciB0byBtYWtlIHVzZSBvZiBDUkxzLCA6YXR0cjpgU1NMQ29udGV4dC52ZXJpZnlfZmxhZ3NgCisgICBtdXN0IGJlIGNvbmZpZ3VyZWQgcHJvcGVybHkuCisKICAgIFRoZSAqY2FmaWxlKiBzdHJpbmcsIGlmIHByZXNlbnQsIGlzIHRoZSBwYXRoIHRvIGEgZmlsZSBvZiBjb25jYXRlbmF0ZWQKICAgIENBIGNlcnRpZmljYXRlcyBpbiBQRU0gZm9ybWF0LiBTZWUgdGhlIGRpc2N1c3Npb24gb2YKICAgIDpyZWY6YHNzbC1jZXJ0aWZpY2F0ZXNgIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGhvdyB0byBhcnJhbmdlIHRoZQpAQCAtNzY2LDYgKzEwOTAsMjkgQEAKICAgIGZvbGxvd2luZyBhbiBgT3BlblNTTCBzcGVjaWZpYyBsYXlvdXQKICAgIDxodHRwOi8vd3d3Lm9wZW5zc2wub3JnL2RvY3Mvc3NsL1NTTF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRpb25zLmh0bWw+YF8uCiAKKyAgIFRoZSAqY2FkYXRhKiBvYmplY3QsIGlmIHByZXNlbnQsIGlzIGVpdGhlciBhbiBBU0NJSSBzdHJpbmcgb2Ygb25lIG9yIG1vcmUKKyAgIFBFTS1lbmNvZGVkIGNlcnRpZmljYXRlcyBvciBhIDp0ZXJtOmBieXRlcy1saWtlIG9iamVjdGAgb2YgREVSLWVuY29kZWQKKyAgIGNlcnRpZmljYXRlcy4gTGlrZSB3aXRoICpjYXBhdGgqIGV4dHJhIGxpbmVzIGFyb3VuZCBQRU0tZW5jb2RlZAorICAgY2VydGlmaWNhdGVzIGFyZSBpZ25vcmVkIGJ1dCBhdCBsZWFzdCBvbmUgY2VydGlmaWNhdGUgbXVzdCBiZSBwcmVzZW50LgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgTmV3IG9wdGlvbmFsIGFyZ3VtZW50ICpjYWRhdGEqCisKKy4uIG1ldGhvZDo6IFNTTENvbnRleHQuZ2V0X2NhX2NlcnRzKGJpbmFyeV9mb3JtPUZhbHNlKQorCisgICBHZXQgYSBsaXN0IG9mIGxvYWRlZCAiY2VydGlmaWNhdGlvbiBhdXRob3JpdHkiIChDQSkgY2VydGlmaWNhdGVzLiBJZiB0aGUKKyAgIGBgYmluYXJ5X2Zvcm1gYCBwYXJhbWV0ZXIgaXMgOmNvbnN0OmBGYWxzZWAgZWFjaCBsaXN0CisgICBlbnRyeSBpcyBhIGRpY3QgbGlrZSB0aGUgb3V0cHV0IG9mIDptZXRoOmBTU0xTb2NrZXQuZ2V0cGVlcmNlcnRgLiBPdGhlcndpc2UKKyAgIHRoZSBtZXRob2QgcmV0dXJucyBhIGxpc3Qgb2YgREVSLWVuY29kZWQgY2VydGlmaWNhdGVzLiBUaGUgcmV0dXJuZWQgbGlzdAorICAgZG9lcyBub3QgY29udGFpbiBjZXJ0aWZpY2F0ZXMgZnJvbSAqY2FwYXRoKiB1bmxlc3MgYSBjZXJ0aWZpY2F0ZSB3YXMKKyAgIHJlcXVlc3RlZCBhbmQgbG9hZGVkIGJ5IGEgU1NMIGNvbm5lY3Rpb24uCisKKyAgIC4uIG5vdGU6OgorICAgICAgQ2VydGlmaWNhdGVzIGluIGEgY2FwYXRoIGRpcmVjdG9yeSBhcmVuJ3QgbG9hZGVkIHVubGVzcyB0aGV5IGhhdmUKKyAgICAgIGJlZW4gdXNlZCBhdCBsZWFzdCBvbmNlLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogLi4gbWV0aG9kOjogU1NMQ29udGV4dC5zZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHMoKQogCiAgICBMb2FkIGEgc2V0IG9mIGRlZmF1bHQgImNlcnRpZmljYXRpb24gYXV0aG9yaXR5IiAoQ0EpIGNlcnRpZmljYXRlcyBmcm9tCkBAIC04MDMsNiArMTE1MCw1NiBAQAogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKIAorLi4gbWV0aG9kOjogU1NMQ29udGV4dC5zZXRfc2VydmVybmFtZV9jYWxsYmFjayhzZXJ2ZXJfbmFtZV9jYWxsYmFjaykKKworICAgUmVnaXN0ZXIgYSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIGFmdGVyIHRoZSBUTFMgQ2xpZW50IEhlbGxvCisgICBoYW5kc2hha2UgbWVzc2FnZSBoYXMgYmVlbiByZWNlaXZlZCBieSB0aGUgU1NML1RMUyBzZXJ2ZXIgd2hlbiB0aGUgVExTIGNsaWVudAorICAgc3BlY2lmaWVzIGEgc2VydmVyIG5hbWUgaW5kaWNhdGlvbi4gVGhlIHNlcnZlciBuYW1lIGluZGljYXRpb24gbWVjaGFuaXNtCisgICBpcyBzcGVjaWZpZWQgaW4gOnJmYzpgNjA2NmAgc2VjdGlvbiAzIC0gU2VydmVyIE5hbWUgSW5kaWNhdGlvbi4KKworICAgT25seSBvbmUgY2FsbGJhY2sgY2FuIGJlIHNldCBwZXIgYGBTU0xDb250ZXh0YGAuICBJZiAqc2VydmVyX25hbWVfY2FsbGJhY2sqCisgICBpcyBgYE5vbmVgYCB0aGVuIHRoZSBjYWxsYmFjayBpcyBkaXNhYmxlZC4gQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIGEKKyAgIHN1YnNlcXVlbnQgdGltZSB3aWxsIGRpc2FibGUgdGhlIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCBjYWxsYmFjay4KKworICAgVGhlIGNhbGxiYWNrIGZ1bmN0aW9uLCAqc2VydmVyX25hbWVfY2FsbGJhY2sqLCB3aWxsIGJlIGNhbGxlZCB3aXRoIHRocmVlCisgICBhcmd1bWVudHM7IHRoZSBmaXJzdCBiZWluZyB0aGUgOmNsYXNzOmBzc2wuU1NMU29ja2V0YCwgdGhlIHNlY29uZCBpcyBhIHN0cmluZworICAgdGhhdCByZXByZXNlbnRzIHRoZSBzZXJ2ZXIgbmFtZSB0aGF0IHRoZSBjbGllbnQgaXMgaW50ZW5kaW5nIHRvIGNvbW11bmljYXRlCisgICAob3IgOmNvbnN0OmBOb25lYCBpZiB0aGUgVExTIENsaWVudCBIZWxsbyBkb2VzIG5vdCBjb250YWluIGEgc2VydmVyIG5hbWUpCisgICBhbmQgdGhlIHRoaXJkIGFyZ3VtZW50IGlzIHRoZSBvcmlnaW5hbCA6Y2xhc3M6YFNTTENvbnRleHRgLiBUaGUgc2VydmVyIG5hbWUKKyAgIGFyZ3VtZW50IGlzIHRoZSBJRE5BIGRlY29kZWQgc2VydmVyIG5hbWUuCisKKyAgIEEgdHlwaWNhbCB1c2Ugb2YgdGhpcyBjYWxsYmFjayBpcyB0byBjaGFuZ2UgdGhlIDpjbGFzczpgc3NsLlNTTFNvY2tldGAncworICAgOmF0dHI6YFNTTFNvY2tldC5jb250ZXh0YCBhdHRyaWJ1dGUgdG8gYSBuZXcgb2JqZWN0IG9mIHR5cGUKKyAgIDpjbGFzczpgU1NMQ29udGV4dGAgcmVwcmVzZW50aW5nIGEgY2VydGlmaWNhdGUgY2hhaW4gdGhhdCBtYXRjaGVzIHRoZSBzZXJ2ZXIKKyAgIG5hbWUuCisKKyAgIER1ZSB0byB0aGUgZWFybHkgbmVnb3RpYXRpb24gcGhhc2Ugb2YgdGhlIFRMUyBjb25uZWN0aW9uLCBvbmx5IGxpbWl0ZWQKKyAgIG1ldGhvZHMgYW5kIGF0dHJpYnV0ZXMgYXJlIHVzYWJsZSBsaWtlCisgICA6bWV0aDpgU1NMU29ja2V0LnNlbGVjdGVkX25wbl9wcm90b2NvbGAgYW5kIDphdHRyOmBTU0xTb2NrZXQuY29udGV4dGAuCisgICA6bWV0aDpgU1NMU29ja2V0LmdldHBlZXJjZXJ0YCwgOm1ldGg6YFNTTFNvY2tldC5nZXRwZWVyY2VydGAsCisgICA6bWV0aDpgU1NMU29ja2V0LmNpcGhlcmAgYW5kIDptZXRoOmBTU0xTb2NrZXQuY29tcHJlc3NgIG1ldGhvZHMgcmVxdWlyZSB0aGF0CisgICB0aGUgVExTIGNvbm5lY3Rpb24gaGFzIHByb2dyZXNzZWQgYmV5b25kIHRoZSBUTFMgQ2xpZW50IEhlbGxvIGFuZCB0aGVyZWZvcmUKKyAgIHdpbGwgbm90IGNvbnRhaW4gcmV0dXJuIG1lYW5pbmdmdWwgdmFsdWVzIG5vciBjYW4gdGhleSBiZSBjYWxsZWQgc2FmZWx5LgorCisgICBUaGUgKnNlcnZlcl9uYW1lX2NhbGxiYWNrKiBmdW5jdGlvbiBtdXN0IHJldHVybiBgYE5vbmVgYCB0byBhbGxvdyB0aGUKKyAgIFRMUyBuZWdvdGlhdGlvbiB0byBjb250aW51ZS4gIElmIGEgVExTIGZhaWx1cmUgaXMgcmVxdWlyZWQsIGEgY29uc3RhbnQKKyAgIDpjb25zdDpgQUxFUlRfREVTQ1JJUFRJT05fKiA8QUxFUlRfREVTQ1JJUFRJT05fSU5URVJOQUxfRVJST1I+YCBjYW4gYmUKKyAgIHJldHVybmVkLiAgT3RoZXIgcmV0dXJuIHZhbHVlcyB3aWxsIHJlc3VsdCBpbiBhIFRMUyBmYXRhbCBlcnJvciB3aXRoCisgICA6Y29uc3Q6YEFMRVJUX0RFU0NSSVBUSU9OX0lOVEVSTkFMX0VSUk9SYC4KKworICAgSWYgdGhlcmUgaXMgYW4gSUROQSBkZWNvZGluZyBlcnJvciBvbiB0aGUgc2VydmVyIG5hbWUsIHRoZSBUTFMgY29ubmVjdGlvbgorICAgd2lsbCB0ZXJtaW5hdGUgd2l0aCBhbiA6Y29uc3Q6YEFMRVJUX0RFU0NSSVBUSU9OX0lOVEVSTkFMX0VSUk9SYCBmYXRhbCBUTFMKKyAgIGFsZXJ0IG1lc3NhZ2UgdG8gdGhlIGNsaWVudC4KKworICAgSWYgYW4gZXhjZXB0aW9uIGlzIHJhaXNlZCBmcm9tIHRoZSAqc2VydmVyX25hbWVfY2FsbGJhY2sqIGZ1bmN0aW9uIHRoZSBUTFMKKyAgIGNvbm5lY3Rpb24gd2lsbCB0ZXJtaW5hdGUgd2l0aCBhIGZhdGFsIFRMUyBhbGVydCBtZXNzYWdlCisgICA6Y29uc3Q6YEFMRVJUX0RFU0NSSVBUSU9OX0hBTkRTSEFLRV9GQUlMVVJFYC4KKworICAgVGhpcyBtZXRob2Qgd2lsbCByYWlzZSA6ZXhjOmBOb3RJbXBsZW1lbnRlZEVycm9yYCBpZiB0aGUgT3BlblNTTCBsaWJyYXJ5CisgICBoYWQgT1BFTlNTTF9OT19UTFNFWFQgZGVmaW5lZCB3aGVuIGl0IHdhcyBidWlsdC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIC4uIG1ldGhvZDo6IFNTTENvbnRleHQubG9hZF9kaF9wYXJhbXMoZGhmaWxlKQogCiAgICBMb2FkIHRoZSBrZXkgZ2VuZXJhdGlvbiBwYXJhbWV0ZXJzIGZvciBEaWZmaWUtSGVsbWFuIChESCkga2V5IGV4Y2hhbmdlLgpAQCAtODUxLDExICsxMjQ4LDEyIEBACiAgICBPbiBjbGllbnQgY29ubmVjdGlvbnMsIHRoZSBvcHRpb25hbCBwYXJhbWV0ZXIgKnNlcnZlcl9ob3N0bmFtZSogc3BlY2lmaWVzCiAgICB0aGUgaG9zdG5hbWUgb2YgdGhlIHNlcnZpY2Ugd2hpY2ggd2UgYXJlIGNvbm5lY3RpbmcgdG8uICBUaGlzIGFsbG93cyBhCiAgICBzaW5nbGUgc2VydmVyIHRvIGhvc3QgbXVsdGlwbGUgU1NMLWJhc2VkIHNlcnZpY2VzIHdpdGggZGlzdGluY3QgY2VydGlmaWNhdGVzLAotICAgcXVpdGUgc2ltaWxhcmx5IHRvIEhUVFAgdmlydHVhbCBob3N0cy4gIFNwZWNpZnlpbmcgKnNlcnZlcl9ob3N0bmFtZSoKLSAgIHdpbGwgcmFpc2UgYSA6ZXhjOmBWYWx1ZUVycm9yYCBpZiB0aGUgT3BlblNTTCBsaWJyYXJ5IGRvZXNuJ3QgaGF2ZSBzdXBwb3J0Ci0gICBmb3IgaXQgKHRoYXQgaXMsIGlmIDpkYXRhOmBIQVNfU05JYCBpcyA6Y29uc3Q6YEZhbHNlYCkuICBTcGVjaWZ5aW5nCi0gICAqc2VydmVyX2hvc3RuYW1lKiB3aWxsIGFsc28gcmFpc2UgYSA6ZXhjOmBWYWx1ZUVycm9yYCBpZiAqc2VydmVyX3NpZGUqCi0gICBpcyB0cnVlLgorICAgcXVpdGUgc2ltaWxhcmx5IHRvIEhUVFAgdmlydHVhbCBob3N0cy4gU3BlY2lmeWluZyAqc2VydmVyX2hvc3RuYW1lKiB3aWxsCisgICByYWlzZSBhIDpleGM6YFZhbHVlRXJyb3JgIGlmICpzZXJ2ZXJfc2lkZSogaXMgdHJ1ZS4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQuMworICAgICAgQWx3YXlzIGFsbG93IGEgc2VydmVyX2hvc3RuYW1lIHRvIGJlIHBhc3NlZCwgZXZlbiBpZiBPcGVuU1NMIGRvZXMgbm90CisgICAgICBoYXZlIFNOSS4KIAogLi4gbWV0aG9kOjogU1NMQ29udGV4dC5zZXNzaW9uX3N0YXRzKCkKIApAQCAtODY5LDYgKzEyNjcsMzMgQEAKICAgICAgID4+PiBzdGF0c1snaGl0cyddLCBzdGF0c1snbWlzc2VzJ10KICAgICAgICgwLCAwKQogCisuLiBhdHRyaWJ1dGU6OiBTU0xDb250ZXh0LmNoZWNrX2hvc3RuYW1lCisKKyAgIFdoZXRoZXIgdG8gbWF0Y2ggdGhlIHBlZXIgY2VydCdzIGhvc3RuYW1lIHdpdGggOmZ1bmM6YG1hdGNoX2hvc3RuYW1lYCBpbgorICAgOm1ldGg6YFNTTFNvY2tldC5kb19oYW5kc2hha2VgLiBUaGUgY29udGV4dCdzCisgICA6YXR0cjpgflNTTENvbnRleHQudmVyaWZ5X21vZGVgIG11c3QgYmUgc2V0IHRvIDpkYXRhOmBDRVJUX09QVElPTkFMYCBvcgorICAgOmRhdGE6YENFUlRfUkVRVUlSRURgLCBhbmQgeW91IG11c3QgcGFzcyAqc2VydmVyX2hvc3RuYW1lKiB0bworICAgOm1ldGg6YH5TU0xDb250ZXh0LndyYXBfc29ja2V0YCBpbiBvcmRlciB0byBtYXRjaCB0aGUgaG9zdG5hbWUuCisKKyAgIEV4YW1wbGU6OgorCisgICAgICBpbXBvcnQgc29ja2V0LCBzc2wKKworICAgICAgY29udGV4dCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MSkKKyAgICAgIGNvbnRleHQudmVyaWZ5X21vZGUgPSBzc2wuQ0VSVF9SRVFVSVJFRAorICAgICAgY29udGV4dC5jaGVja19ob3N0bmFtZSA9IFRydWUKKyAgICAgIGNvbnRleHQubG9hZF9kZWZhdWx0X2NlcnRzKCkKKworICAgICAgcyA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgIHNzbF9zb2NrID0gY29udGV4dC53cmFwX3NvY2tldChzLCBzZXJ2ZXJfaG9zdG5hbWU9J3d3dy52ZXJpc2lnbi5jb20nKQorICAgICAgc3NsX3NvY2suY29ubmVjdCgoJ3d3dy52ZXJpc2lnbi5jb20nLCA0NDMpKQorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworICAgLi4gbm90ZTo6CisKKyAgICAgVGhpcyBmZWF0dXJlcyByZXF1aXJlcyBPcGVuU1NMIDAuOS44ZiBvciBuZXdlci4KKwogLi4gYXR0cmlidXRlOjogU1NMQ29udGV4dC5vcHRpb25zCiAKICAgIEFuIGludGVnZXIgcmVwcmVzZW50aW5nIHRoZSBzZXQgb2YgU1NMIG9wdGlvbnMgZW5hYmxlZCBvbiB0aGlzIGNvbnRleHQuCkBAIC04ODUsNiArMTMxMCwxNSBAQAogICAgVGhlIHByb3RvY29sIHZlcnNpb24gY2hvc2VuIHdoZW4gY29uc3RydWN0aW5nIHRoZSBjb250ZXh0LiAgVGhpcyBhdHRyaWJ1dGUKICAgIGlzIHJlYWQtb25seS4KIAorLi4gYXR0cmlidXRlOjogU1NMQ29udGV4dC52ZXJpZnlfZmxhZ3MKKworICAgVGhlIGZsYWdzIGZvciBjZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gb3BlcmF0aW9ucy4gWW91IGNhbiBzZXQgZmxhZ3MgbGlrZQorICAgOmRhdGE6YFZFUklGWV9DUkxfQ0hFQ0tfTEVBRmAgYnkgT1JpbmcgdGhlbSB0b2dldGhlci4gQnkgZGVmYXVsdCBPcGVuU1NMCisgICBkb2VzIG5laXRoZXIgcmVxdWlyZSBub3IgdmVyaWZ5IGNlcnRpZmljYXRlIHJldm9jYXRpb24gbGlzdHMgKENSTHMpLgorICAgQXZhaWxhYmxlIG9ubHkgd2l0aCBvcGVuc3NsIHZlcnNpb24gMC45LjgrLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogLi4gYXR0cmlidXRlOjogU1NMQ29udGV4dC52ZXJpZnlfbW9kZQogCiAgICBXaGV0aGVyIHRvIHRyeSB0byB2ZXJpZnkgb3RoZXIgcGVlcnMnIGNlcnRpZmljYXRlcyBhbmQgaG93IHRvIGJlaGF2ZQpAQCAtOTcwLDIwICsxNDA0LDkgQEAKIGNlcnRpZmljYXRlLCB5b3UgbmVlZCB0byBwcm92aWRlIGEgIkNBIGNlcnRzIiBmaWxlLCBmaWxsZWQgd2l0aCB0aGUgY2VydGlmaWNhdGUKIGNoYWlucyBmb3IgZWFjaCBpc3N1ZXIgeW91IGFyZSB3aWxsaW5nIHRvIHRydXN0LiAgQWdhaW4sIHRoaXMgZmlsZSBqdXN0IGNvbnRhaW5zCiB0aGVzZSBjaGFpbnMgY29uY2F0ZW5hdGVkIHRvZ2V0aGVyLiAgRm9yIHZhbGlkYXRpb24sIFB5dGhvbiB3aWxsIHVzZSB0aGUgZmlyc3QKLWNoYWluIGl0IGZpbmRzIGluIHRoZSBmaWxlIHdoaWNoIG1hdGNoZXMuICBTb21lICJzdGFuZGFyZCIgcm9vdCBjZXJ0aWZpY2F0ZXMgYXJlCi1hdmFpbGFibGUgZnJvbSB2YXJpb3VzIGNlcnRpZmljYXRpb24gYXV0aG9yaXRpZXM6IGBDQUNlcnQub3JnCi08aHR0cDovL3d3dy5jYWNlcnQub3JnL2luZGV4LnBocD9pZD0zPmBfLCBgVGhhd3RlCi08aHR0cDovL3d3dy50aGF3dGUuY29tL3Jvb3RzLz5gXywgYFZlcmlzaWduCi08aHR0cDovL3d3dy52ZXJpc2lnbi5jb20vc3VwcG9ydC9yb290cy5odG1sPmBfLCBgUG9zaXRpdmUgU1NMCi08aHR0cDovL3d3dy5Qb3NpdGl2ZVNTTC5jb20vc3NsLWNlcnRpZmljYXRlLXN1cHBvcnQvY2VydF9pbnN0YWxsYXRpb24vVVROLVVTRVJGaXJzdC1IYXJkd2FyZS5jcnQ+YF8KLSh1c2VkIGJ5IHB5dGhvbi5vcmcpLCBgRXF1aWZheCBhbmQgR2VvVHJ1c3QKLTxodHRwOi8vd3d3Lmdlb3RydXN0LmNvbS9yZXNvdXJjZXMvcm9vdF9jZXJ0aWZpY2F0ZXMvaW5kZXguYXNwPmBfLgotCi1JbiBnZW5lcmFsLCBpZiB5b3UgYXJlIHVzaW5nIFNTTDMgb3IgVExTMSwgeW91IGRvbid0IG5lZWQgdG8gcHV0IHRoZSBmdWxsIGNoYWluCi1pbiB5b3VyICJDQSBjZXJ0cyIgZmlsZTsgeW91IG9ubHkgbmVlZCB0aGUgcm9vdCBjZXJ0aWZpY2F0ZXMsIGFuZCB0aGUgcmVtb3RlCi1wZWVyIGlzIHN1cHBvc2VkIHRvIGZ1cm5pc2ggdGhlIG90aGVyIGNlcnRpZmljYXRlcyBuZWNlc3NhcnkgdG8gY2hhaW4gZnJvbSBpdHMKLWNlcnRpZmljYXRlIHRvIGEgcm9vdCBjZXJ0aWZpY2F0ZS4gIFNlZSA6cmZjOmA0MTU4YCBmb3IgbW9yZSBkaXNjdXNzaW9uIG9mIHRoZQotd2F5IGluIHdoaWNoIGNlcnRpZmljYXRpb24gY2hhaW5zIGNhbiBiZSBidWlsdC4KK2NoYWluIGl0IGZpbmRzIGluIHRoZSBmaWxlIHdoaWNoIG1hdGNoZXMuICBUaGUgcGxhdGZvcm0ncyBjZXJ0aWZpY2F0ZXMgZmlsZSBjYW4KK2JlIHVzZWQgYnkgY2FsbGluZyA6bWV0aDpgU1NMQ29udGV4dC5sb2FkX2RlZmF1bHRfY2VydHNgLCB0aGlzIGlzIGRvbmUKK2F1dG9tYXRpY2FsbHkgd2l0aCA6ZnVuYzpgLmNyZWF0ZV9kZWZhdWx0X2NvbnRleHRgLgogCiBDb21iaW5lZCBrZXkgYW5kIGNlcnRpZmljYXRlCiBeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCkBAIC0xMDU3LDExOCArMTQ4MCwxMDAgQEAKIENsaWVudC1zaWRlIG9wZXJhdGlvbgogXl5eXl5eXl5eXl5eXl5eXl5eXl5eCiAKLVRoaXMgZXhhbXBsZSBjb25uZWN0cyB0byBhbiBTU0wgc2VydmVyIGFuZCBwcmludHMgdGhlIHNlcnZlcidzIGNlcnRpZmljYXRlOjoKK1RoaXMgZXhhbXBsZSBjcmVhdGVzIGEgU1NMIGNvbnRleHQgd2l0aCB0aGUgcmVjb21tZW5kZWQgc2VjdXJpdHkgc2V0dGluZ3MKK2ZvciBjbGllbnQgc29ja2V0cywgaW5jbHVkaW5nIGF1dG9tYXRpYyBjZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb246OgogCi0gICBpbXBvcnQgc29ja2V0LCBzc2wsIHBwcmludAorICAgPj4+IGNvbnRleHQgPSBzc2wuY3JlYXRlX2RlZmF1bHRfY29udGV4dCgpCiAKLSAgIHMgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCi0gICAjIHJlcXVpcmUgYSBjZXJ0aWZpY2F0ZSBmcm9tIHRoZSBzZXJ2ZXIKLSAgIHNzbF9zb2NrID0gc3NsLndyYXBfc29ja2V0KHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYV9jZXJ0cz0iL2V0Yy9jYV9jZXJ0c19maWxlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRfcmVxcz1zc2wuQ0VSVF9SRVFVSVJFRCkKLSAgIHNzbF9zb2NrLmNvbm5lY3QoKCd3d3cudmVyaXNpZ24uY29tJywgNDQzKSkKLQotICAgcHByaW50LnBwcmludChzc2xfc29jay5nZXRwZWVyY2VydCgpKQotICAgIyBub3RlIHRoYXQgY2xvc2luZyB0aGUgU1NMU29ja2V0IHdpbGwgYWxzbyBjbG9zZSB0aGUgdW5kZXJseWluZyBzb2NrZXQKLSAgIHNzbF9zb2NrLmNsb3NlKCkKLQotQXMgb2YgSmFudWFyeSA2LCAyMDEyLCB0aGUgY2VydGlmaWNhdGUgcHJpbnRlZCBieSB0aGlzIHByb2dyYW0gbG9va3MgbGlrZQotdGhpczo6Ci0KLSAgIHsnaXNzdWVyJzogKCgoJ2NvdW50cnlOYW1lJywgJ1VTJyksKSwKLSAgICAgICAgICAgICAgICgoJ29yZ2FuaXphdGlvbk5hbWUnLCAnVmVyaVNpZ24sIEluYy4nKSwpLAotICAgICAgICAgICAgICAgKCgnb3JnYW5pemF0aW9uYWxVbml0TmFtZScsICdWZXJpU2lnbiBUcnVzdCBOZXR3b3JrJyksKSwKLSAgICAgICAgICAgICAgICgoJ29yZ2FuaXphdGlvbmFsVW5pdE5hbWUnLAotICAgICAgICAgICAgICAgICAnVGVybXMgb2YgdXNlIGF0IGh0dHBzOi8vd3d3LnZlcmlzaWduLmNvbS9ycGEgKGMpMDYnKSwpLAotICAgICAgICAgICAgICAgKCgnY29tbW9uTmFtZScsCi0gICAgICAgICAgICAgICAgICdWZXJpU2lnbiBDbGFzcyAzIEV4dGVuZGVkIFZhbGlkYXRpb24gU1NMIFNHQyBDQScpLCkpLAotICAgICdub3RBZnRlcic6ICdNYXkgMjUgMjM6NTk6NTkgMjAxMiBHTVQnLAotICAgICdub3RCZWZvcmUnOiAnTWF5IDI2IDAwOjAwOjAwIDIwMTAgR01UJywKLSAgICAnc2VyaWFsTnVtYmVyJzogJzUzRDJCRUY5MjRBNzI0NUU4M0NBMDFFNDZDQUEyNDc3JywKLSAgICAnc3ViamVjdCc6ICgoKCcxLjMuNi4xLjQuMS4zMTEuNjAuMi4xLjMnLCAnVVMnKSwpLAotICAgICAgICAgICAgICAgICgoJzEuMy42LjEuNC4xLjMxMS42MC4yLjEuMicsICdEZWxhd2FyZScpLCksCi0gICAgICAgICAgICAgICAgKCgnYnVzaW5lc3NDYXRlZ29yeScsICdWMS4wLCBDbGF1c2UgNS4oYiknKSwpLAotICAgICAgICAgICAgICAgICgoJ3NlcmlhbE51bWJlcicsICcyNDk3ODg2JyksKSwKLSAgICAgICAgICAgICAgICAoKCdjb3VudHJ5TmFtZScsICdVUycpLCksCi0gICAgICAgICAgICAgICAgKCgncG9zdGFsQ29kZScsICc5NDA0MycpLCksCi0gICAgICAgICAgICAgICAgKCgnc3RhdGVPclByb3ZpbmNlTmFtZScsICdDYWxpZm9ybmlhJyksKSwKLSAgICAgICAgICAgICAgICAoKCdsb2NhbGl0eU5hbWUnLCAnTW91bnRhaW4gVmlldycpLCksCi0gICAgICAgICAgICAgICAgKCgnc3RyZWV0QWRkcmVzcycsICc0ODcgRWFzdCBNaWRkbGVmaWVsZCBSb2FkJyksKSwKLSAgICAgICAgICAgICAgICAoKCdvcmdhbml6YXRpb25OYW1lJywgJ1ZlcmlTaWduLCBJbmMuJyksKSwKLSAgICAgICAgICAgICAgICAoKCdvcmdhbml6YXRpb25hbFVuaXROYW1lJywgJyBQcm9kdWN0aW9uIFNlY3VyaXR5IFNlcnZpY2VzJyksKSwKLSAgICAgICAgICAgICAgICAoKCdjb21tb25OYW1lJywgJ3d3dy52ZXJpc2lnbi5jb20nKSwpKSwKLSAgICAnc3ViamVjdEFsdE5hbWUnOiAoKCdETlMnLCAnd3d3LnZlcmlzaWduLmNvbScpLAotICAgICAgICAgICAgICAgICAgICAgICAoJ0ROUycsICd2ZXJpc2lnbi5jb20nKSwKLSAgICAgICAgICAgICAgICAgICAgICAgKCdETlMnLCAnd3d3LnZlcmlzaWduLm5ldCcpLAotICAgICAgICAgICAgICAgICAgICAgICAoJ0ROUycsICd2ZXJpc2lnbi5uZXQnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgKCdETlMnLCAnd3d3LnZlcmlzaWduLm1vYmknKSwKLSAgICAgICAgICAgICAgICAgICAgICAgKCdETlMnLCAndmVyaXNpZ24ubW9iaScpLAotICAgICAgICAgICAgICAgICAgICAgICAoJ0ROUycsICd3d3cudmVyaXNpZ24uZXUnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgKCdETlMnLCAndmVyaXNpZ24uZXUnKSksCi0gICAgJ3ZlcnNpb24nOiAzfQotCi1UaGlzIG90aGVyIGV4YW1wbGUgZmlyc3QgY3JlYXRlcyBhbiBTU0wgY29udGV4dCwgaW5zdHJ1Y3RzIGl0IHRvIHZlcmlmeQotY2VydGlmaWNhdGVzIHNlbnQgYnkgcGVlcnMsIGFuZCBmZWVkcyBpdCBhIHNldCBvZiByZWNvZ25pemVkIGNlcnRpZmljYXRlCi1hdXRob3JpdGllcyAoQ0EpOjoKK0lmIHlvdSBwcmVmZXIgdG8gdHVuZSBzZWN1cml0eSBzZXR0aW5ncyB5b3Vyc2VsZiwgeW91IG1pZ2h0IGNyZWF0ZQorYSBjb250ZXh0IGZyb20gc2NyYXRjaCAoYnV0IGJld2FyZSB0aGF0IHlvdSBtaWdodCBub3QgZ2V0IHRoZSBzZXR0aW5ncworcmlnaHQpOjoKIAogICAgPj4+IGNvbnRleHQgPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfU1NMdjIzKQogICAgPj4+IGNvbnRleHQudmVyaWZ5X21vZGUgPSBzc2wuQ0VSVF9SRVFVSVJFRAorICAgPj4+IGNvbnRleHQuY2hlY2tfaG9zdG5hbWUgPSBUcnVlCiAgICA+Pj4gY29udGV4dC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoIi9ldGMvc3NsL2NlcnRzL2NhLWJ1bmRsZS5jcnQiKQogCi0oaXQgaXMgYXNzdW1lZCB5b3VyIG9wZXJhdGluZyBzeXN0ZW0gcGxhY2VzIGEgYnVuZGxlIG9mIGFsbCBDQSBjZXJ0aWZpY2F0ZXMKLWluIGBgL2V0Yy9zc2wvY2VydHMvY2EtYnVuZGxlLmNydGBgOyBpZiBub3QsIHlvdSdsbCBnZXQgYW4gZXJyb3IgYW5kIGhhdmUKLXRvIGFkanVzdCB0aGUgbG9jYXRpb24pCisodGhpcyBzbmlwcGV0IGFzc3VtZXMgeW91ciBvcGVyYXRpbmcgc3lzdGVtIHBsYWNlcyBhIGJ1bmRsZSBvZiBhbGwgQ0EKK2NlcnRpZmljYXRlcyBpbiBgYC9ldGMvc3NsL2NlcnRzL2NhLWJ1bmRsZS5jcnRgYDsgaWYgbm90LCB5b3UnbGwgZ2V0IGFuCitlcnJvciBhbmQgaGF2ZSB0byBhZGp1c3QgdGhlIGxvY2F0aW9uKQogCiBXaGVuIHlvdSB1c2UgdGhlIGNvbnRleHQgdG8gY29ubmVjdCB0byBhIHNlcnZlciwgOmNvbnN0OmBDRVJUX1JFUVVJUkVEYAogdmFsaWRhdGVzIHRoZSBzZXJ2ZXIgY2VydGlmaWNhdGU6IGl0IGVuc3VyZXMgdGhhdCB0aGUgc2VydmVyIGNlcnRpZmljYXRlCiB3YXMgc2lnbmVkIHdpdGggb25lIG9mIHRoZSBDQSBjZXJ0aWZpY2F0ZXMsIGFuZCBjaGVja3MgdGhlIHNpZ25hdHVyZSBmb3IKIGNvcnJlY3RuZXNzOjoKIAotICAgPj4+IGNvbm4gPSBjb250ZXh0LndyYXBfc29ja2V0KHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQpKQotICAgPj4+IGNvbm4uY29ubmVjdCgoImxpbnV4ZnIub3JnIiwgNDQzKSkKKyAgID4+PiBjb25uID0gY29udGV4dC53cmFwX3NvY2tldChzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUKSwKKyAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfaG9zdG5hbWU9Ind3dy5weXRob24ub3JnIikKKyAgID4+PiBjb25uLmNvbm5lY3QoKCJ3d3cucHl0aG9uLm9yZyIsIDQ0MykpCiAKLVlvdSBzaG91bGQgdGhlbiBmZXRjaCB0aGUgY2VydGlmaWNhdGUgYW5kIGNoZWNrIGl0cyBmaWVsZHMgZm9yIGNvbmZvcm1pdHk6OgorWW91IG1heSB0aGVuIGZldGNoIHRoZSBjZXJ0aWZpY2F0ZTo6CiAKICAgID4+PiBjZXJ0ID0gY29ubi5nZXRwZWVyY2VydCgpCi0gICA+Pj4gc3NsLm1hdGNoX2hvc3RuYW1lKGNlcnQsICJsaW51eGZyLm9yZyIpCiAKIFZpc3VhbCBpbnNwZWN0aW9uIHNob3dzIHRoYXQgdGhlIGNlcnRpZmljYXRlIGRvZXMgaWRlbnRpZnkgdGhlIGRlc2lyZWQgc2VydmljZQotKHRoYXQgaXMsIHRoZSBIVFRQUyBob3N0IGBgbGludXhmci5vcmdgYCk6OgorKHRoYXQgaXMsIHRoZSBIVFRQUyBob3N0IGBgd3d3LnB5dGhvbi5vcmdgYCk6OgogCiAgICA+Pj4gcHByaW50LnBwcmludChjZXJ0KQotICAgeydpc3N1ZXInOiAoKCgnb3JnYW5pemF0aW9uTmFtZScsICdDQWNlcnQgSW5jLicpLCksCi0gICAgICAgICAgICAgICAoKCdvcmdhbml6YXRpb25hbFVuaXROYW1lJywgJ2h0dHA6Ly93d3cuQ0FjZXJ0Lm9yZycpLCksCi0gICAgICAgICAgICAgICAoKCdjb21tb25OYW1lJywgJ0NBY2VydCBDbGFzcyAzIFJvb3QnKSwpKSwKLSAgICAnbm90QWZ0ZXInOiAnSnVuICA3IDIxOjAyOjI0IDIwMTMgR01UJywKLSAgICAnbm90QmVmb3JlJzogJ0p1biAgOCAyMTowMjoyNCAyMDExIEdNVCcsCi0gICAgJ3NlcmlhbE51bWJlcic6ICdEM0U5JywKLSAgICAnc3ViamVjdCc6ICgoKCdjb21tb25OYW1lJywgJ2xpbnV4ZnIub3JnJyksKSwpLAotICAgICdzdWJqZWN0QWx0TmFtZSc6ICgoJ0ROUycsICdsaW51eGZyLm9yZycpLAotICAgICAgICAgICAgICAgICAgICAgICAoJ290aGVybmFtZScsICc8dW5zdXBwb3J0ZWQ+JyksCi0gICAgICAgICAgICAgICAgICAgICAgICgnRE5TJywgJ2xpbnV4ZnIub3JnJyksCi0gICAgICAgICAgICAgICAgICAgICAgICgnb3RoZXJuYW1lJywgJzx1bnN1cHBvcnRlZD4nKSwKLSAgICAgICAgICAgICAgICAgICAgICAgKCdETlMnLCAnZGV2LmxpbnV4ZnIub3JnJyksCi0gICAgICAgICAgICAgICAgICAgICAgICgnb3RoZXJuYW1lJywgJzx1bnN1cHBvcnRlZD4nKSwKLSAgICAgICAgICAgICAgICAgICAgICAgKCdETlMnLCAncHJvZC5saW51eGZyLm9yZycpLAotICAgICAgICAgICAgICAgICAgICAgICAoJ290aGVybmFtZScsICc8dW5zdXBwb3J0ZWQ+JyksCi0gICAgICAgICAgICAgICAgICAgICAgICgnRE5TJywgJ2FscGhhLmxpbnV4ZnIub3JnJyksCi0gICAgICAgICAgICAgICAgICAgICAgICgnb3RoZXJuYW1lJywgJzx1bnN1cHBvcnRlZD4nKSwKLSAgICAgICAgICAgICAgICAgICAgICAgKCdETlMnLCAnKi5saW51eGZyLm9yZycpLAotICAgICAgICAgICAgICAgICAgICAgICAoJ290aGVybmFtZScsICc8dW5zdXBwb3J0ZWQ+JykpLAorICAgeydPQ1NQJzogKCdodHRwOi8vb2NzcC5kaWdpY2VydC5jb20nLCksCisgICAgJ2NhSXNzdWVycyc6ICgnaHR0cDovL2NhY2VydHMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0U0hBMkV4dGVuZGVkVmFsaWRhdGlvblNlcnZlckNBLmNydCcsKSwKKyAgICAnY3JsRGlzdHJpYnV0aW9uUG9pbnRzJzogKCdodHRwOi8vY3JsMy5kaWdpY2VydC5jb20vc2hhMi1ldi1zZXJ2ZXItZzEuY3JsJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdodHRwOi8vY3JsNC5kaWdpY2VydC5jb20vc2hhMi1ldi1zZXJ2ZXItZzEuY3JsJyksCisgICAgJ2lzc3Vlcic6ICgoKCdjb3VudHJ5TmFtZScsICdVUycpLCksCisgICAgICAgICAgICAgICAoKCdvcmdhbml6YXRpb25OYW1lJywgJ0RpZ2lDZXJ0IEluYycpLCksCisgICAgICAgICAgICAgICAoKCdvcmdhbml6YXRpb25hbFVuaXROYW1lJywgJ3d3dy5kaWdpY2VydC5jb20nKSwpLAorICAgICAgICAgICAgICAgKCgnY29tbW9uTmFtZScsICdEaWdpQ2VydCBTSEEyIEV4dGVuZGVkIFZhbGlkYXRpb24gU2VydmVyIENBJyksKSksCisgICAgJ25vdEFmdGVyJzogJ1NlcCAgOSAxMjowMDowMCAyMDE2IEdNVCcsCisgICAgJ25vdEJlZm9yZSc6ICdTZXAgIDUgMDA6MDA6MDAgMjAxNCBHTVQnLAorICAgICdzZXJpYWxOdW1iZXInOiAnMDFCQjZGMDAxMjJCMTc3RjM2Q0FCNDlDRUE4QjZCMjYnLAorICAgICdzdWJqZWN0JzogKCgoJ2J1c2luZXNzQ2F0ZWdvcnknLCAnUHJpdmF0ZSBPcmdhbml6YXRpb24nKSwpLAorICAgICAgICAgICAgICAgICgoJzEuMy42LjEuNC4xLjMxMS42MC4yLjEuMycsICdVUycpLCksCisgICAgICAgICAgICAgICAgKCgnMS4zLjYuMS40LjEuMzExLjYwLjIuMS4yJywgJ0RlbGF3YXJlJyksKSwKKyAgICAgICAgICAgICAgICAoKCdzZXJpYWxOdW1iZXInLCAnMzM1OTMwMCcpLCksCisgICAgICAgICAgICAgICAgKCgnc3RyZWV0QWRkcmVzcycsICcxNiBBbGxlbiBSZCcpLCksCisgICAgICAgICAgICAgICAgKCgncG9zdGFsQ29kZScsICcwMzg5NC00ODAxJyksKSwKKyAgICAgICAgICAgICAgICAoKCdjb3VudHJ5TmFtZScsICdVUycpLCksCisgICAgICAgICAgICAgICAgKCgnc3RhdGVPclByb3ZpbmNlTmFtZScsICdOSCcpLCksCisgICAgICAgICAgICAgICAgKCgnbG9jYWxpdHlOYW1lJywgJ1dvbGZlYm9ybywnKSwpLAorICAgICAgICAgICAgICAgICgoJ29yZ2FuaXphdGlvbk5hbWUnLCAnUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24nKSwpLAorICAgICAgICAgICAgICAgICgoJ2NvbW1vbk5hbWUnLCAnd3d3LnB5dGhvbi5vcmcnKSwpKSwKKyAgICAnc3ViamVjdEFsdE5hbWUnOiAoKCdETlMnLCAnd3d3LnB5dGhvbi5vcmcnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgKCdETlMnLCAncHl0aG9uLm9yZycpLAorICAgICAgICAgICAgICAgICAgICAgICAoJ0ROUycsICdweXBpLnB5dGhvbi5vcmcnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgKCdETlMnLCAnZG9jcy5weXRob24ub3JnJyksCisgICAgICAgICAgICAgICAgICAgICAgICgnRE5TJywgJ3Rlc3RweXBpLnB5dGhvbi5vcmcnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgKCdETlMnLCAnYnVncy5weXRob24ub3JnJyksCisgICAgICAgICAgICAgICAgICAgICAgICgnRE5TJywgJ3dpa2kucHl0aG9uLm9yZycpLAorICAgICAgICAgICAgICAgICAgICAgICAoJ0ROUycsICdoZy5weXRob24ub3JnJyksCisgICAgICAgICAgICAgICAgICAgICAgICgnRE5TJywgJ21haWwucHl0aG9uLm9yZycpLAorICAgICAgICAgICAgICAgICAgICAgICAoJ0ROUycsICdwYWNrYWdpbmcucHl0aG9uLm9yZycpLAorICAgICAgICAgICAgICAgICAgICAgICAoJ0ROUycsICdweXRob25ob3N0ZWQub3JnJyksCisgICAgICAgICAgICAgICAgICAgICAgICgnRE5TJywgJ3d3dy5weXRob25ob3N0ZWQub3JnJyksCisgICAgICAgICAgICAgICAgICAgICAgICgnRE5TJywgJ3Rlc3QucHl0aG9uaG9zdGVkLm9yZycpLAorICAgICAgICAgICAgICAgICAgICAgICAoJ0ROUycsICd1cy5weWNvbi5vcmcnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgKCdETlMnLCAnaWQucHl0aG9uLm9yZycpKSwKICAgICAndmVyc2lvbic6IDN9CiAKLU5vdyB0aGF0IHlvdSBhcmUgYXNzdXJlZCBvZiBpdHMgYXV0aGVudGljaXR5LCB5b3UgY2FuIHByb2NlZWQgdG8gdGFsayB3aXRoCi10aGUgc2VydmVyOjoKK05vdyB0aGUgU1NMIGNoYW5uZWwgaXMgZXN0YWJsaXNoZWQgYW5kIHRoZSBjZXJ0aWZpY2F0ZSB2ZXJpZmllZCwgeW91IGNhbgorcHJvY2VlZCB0byB0YWxrIHdpdGggdGhlIHNlcnZlcjo6CiAKICAgID4+PiBjb25uLnNlbmRhbGwoYiJIRUFEIC8gSFRUUC8xLjBcclxuSG9zdDogbGludXhmci5vcmdcclxuXHJcbiIpCiAgICA+Pj4gcHByaW50LnBwcmludChjb25uLnJlY3YoMTAyNCkuc3BsaXQoYiJcclxuIikpCi0gICBbYidIVFRQLzEuMSAzMDIgRm91bmQnLAotICAgIGInRGF0ZTogU3VuLCAxNiBNYXkgMjAxMCAxMzo0MzoyOCBHTVQnLAotICAgIGInU2VydmVyOiBBcGFjaGUvMi4yJywKLSAgICBiJ0xvY2F0aW9uOiBodHRwczovL2xpbnV4ZnIub3JnL3B1Yi8nLAotICAgIGInVmFyeTogQWNjZXB0LUVuY29kaW5nJywKKyAgIFtiJ0hUVFAvMS4xIDIwMCBPSycsCisgICAgYidEYXRlOiBTYXQsIDE4IE9jdCAyMDE0IDE4OjI3OjIwIEdNVCcsCisgICAgYidTZXJ2ZXI6IG5naW54JywKKyAgICBiJ0NvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04JywKKyAgICBiJ1gtRnJhbWUtT3B0aW9uczogU0FNRU9SSUdJTicsCisgICAgYidDb250ZW50LUxlbmd0aDogNDU2NzknLAorICAgIGInQWNjZXB0LVJhbmdlczogYnl0ZXMnLAorICAgIGInVmlhOiAxLjEgdmFybmlzaCcsCisgICAgYidBZ2U6IDIxODgnLAorICAgIGInWC1TZXJ2ZWQtQnk6IGNhY2hlLWxjeTExMzQtTENZJywKKyAgICBiJ1gtQ2FjaGU6IEhJVCcsCisgICAgYidYLUNhY2hlLUhpdHM6IDExJywKKyAgICBiJ1Zhcnk6IENvb2tpZScsCisgICAgYidTdHJpY3QtVHJhbnNwb3J0LVNlY3VyaXR5OiBtYXgtYWdlPTYzMDcyMDAwOyBpbmNsdWRlU3ViRG9tYWlucycsCiAgICAgYidDb25uZWN0aW9uOiBjbG9zZScsCi0gICAgYidDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xJywKICAgICBiJycsCiAgICAgYicnXQogCkBAIC0xMTg2LDcgKzE1OTEsNyBAQAogCiAgICBpbXBvcnQgc29ja2V0LCBzc2wKIAotICAgY29udGV4dCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MSkKKyAgIGNvbnRleHQgPSBzc2wuY3JlYXRlX2RlZmF1bHRfY29udGV4dChzc2wuUHVycG9zZS5DTElFTlRfQVVUSCkKICAgIGNvbnRleHQubG9hZF9jZXJ0X2NoYWluKGNlcnRmaWxlPSJteWNlcnRmaWxlIiwga2V5ZmlsZT0ibXlrZXlmaWxlIikKIAogICAgYmluZHNvY2tldCA9IHNvY2tldC5zb2NrZXQoKQpAQCAtMTIzMCw4ICsxNjM1LDE5IEBACiBOb3RlcyBvbiBub24tYmxvY2tpbmcgc29ja2V0cwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotV2hlbiB3b3JraW5nIHdpdGggbm9uLWJsb2NraW5nIHNvY2tldHMsIHRoZXJlIGFyZSBzZXZlcmFsIHRoaW5ncyB5b3UgbmVlZAotdG8gYmUgYXdhcmUgb2Y6CitTU0wgc29ja2V0cyBiZWhhdmUgc2xpZ2h0bHkgZGlmZmVyZW50IHRoYW4gcmVndWxhciBzb2NrZXRzIGluCitub24tYmxvY2tpbmcgbW9kZS4gV2hlbiB3b3JraW5nIHdpdGggbm9uLWJsb2NraW5nIHNvY2tldHMsIHRoZXJlIGFyZQordGh1cyBzZXZlcmFsIHRoaW5ncyB5b3UgbmVlZCB0byBiZSBhd2FyZSBvZjoKKworLSBNb3N0IDpjbGFzczpgU1NMU29ja2V0YCBtZXRob2RzIHdpbGwgcmFpc2UgZWl0aGVyCisgIDpleGM6YFNTTFdhbnRXcml0ZUVycm9yYCBvciA6ZXhjOmBTU0xXYW50UmVhZEVycm9yYCBpbnN0ZWFkIG9mCisgIDpleGM6YEJsb2NraW5nSU9FcnJvcmAgaWYgYW4gSS9PIG9wZXJhdGlvbiB3b3VsZAorICBibG9jay4gOmV4YzpgU1NMV2FudFJlYWRFcnJvcmAgd2lsbCBiZSByYWlzZWQgaWYgYSByZWFkIG9wZXJhdGlvbiBvbgorICB0aGUgdW5kZXJseWluZyBzb2NrZXQgaXMgbmVjZXNzYXJ5LCBhbmQgOmV4YzpgU1NMV2FudFdyaXRlRXJyb3JgIGZvcgorICBhIHdyaXRlIG9wZXJhdGlvbiBvbiB0aGUgdW5kZXJseWluZyBzb2NrZXQuIE5vdGUgdGhhdCBhdHRlbXB0cyB0bworICAqd3JpdGUqIHRvIGFuIFNTTCBzb2NrZXQgbWF5IHJlcXVpcmUgKnJlYWRpbmcqIGZyb20gdGhlIHVuZGVybHlpbmcKKyAgc29ja2V0IGZpcnN0LCBhbmQgYXR0ZW1wdHMgdG8gKnJlYWQqIGZyb20gdGhlIFNTTCBzb2NrZXQgbWF5IHJlcXVpcmUKKyAgYSBwcmlvciAqd3JpdGUqIHRvIHRoZSB1bmRlcmx5aW5nIHNvY2tldC4KIAogLSBDYWxsaW5nIDpmdW5jOmB+c2VsZWN0LnNlbGVjdGAgdGVsbHMgeW91IHRoYXQgdGhlIE9TLWxldmVsIHNvY2tldCBjYW4gYmUKICAgcmVhZCBmcm9tIChvciB3cml0dGVuIHRvKSwgYnV0IGl0IGRvZXMgbm90IGltcGx5IHRoYXQgdGhlcmUgaXMgc3VmZmljaWVudApAQCAtMTI0MCw4ICsxNjU2LDE0IEBACiAgIGFuZCA6bWV0aDpgU1NMU29ja2V0LnNlbmRgIGZhaWx1cmVzLCBhbmQgcmV0cnkgYWZ0ZXIgYW5vdGhlciBjYWxsIHRvCiAgIDpmdW5jOmB+c2VsZWN0LnNlbGVjdGAuCiAKKy0gQ29udmVyc2VseSwgc2luY2UgdGhlIFNTTCBsYXllciBoYXMgaXRzIG93biBmcmFtaW5nLCBhIFNTTCBzb2NrZXQgbWF5CisgIHN0aWxsIGhhdmUgZGF0YSBhdmFpbGFibGUgZm9yIHJlYWRpbmcgd2l0aG91dCA6ZnVuYzpgfnNlbGVjdC5zZWxlY3RgCisgIGJlaW5nIGF3YXJlIG9mIGl0LiAgVGhlcmVmb3JlLCB5b3Ugc2hvdWxkIGZpcnN0IGNhbGwKKyAgOm1ldGg6YFNTTFNvY2tldC5yZWN2YCB0byBkcmFpbiBhbnkgcG90ZW50aWFsbHkgYXZhaWxhYmxlIGRhdGEsIGFuZCB0aGVuCisgIG9ubHkgYmxvY2sgb24gYSA6ZnVuYzpgfnNlbGVjdC5zZWxlY3RgIGNhbGwgaWYgc3RpbGwgbmVjZXNzYXJ5LgorCiAgIChvZiBjb3Vyc2UsIHNpbWlsYXIgcHJvdmlzaW9ucyBhcHBseSB3aGVuIHVzaW5nIG90aGVyIHByaW1pdGl2ZXMgc3VjaCBhcwotICA6ZnVuYzpgfnNlbGVjdC5wb2xsYCkKKyAgOmZ1bmM6YH5zZWxlY3QucG9sbGAsIG9yIHRob3NlIGluIHRoZSA6bW9kOmBzZWxlY3RvcnNgIG1vZHVsZSkKIAogLSBUaGUgU1NMIGhhbmRzaGFrZSBpdHNlbGYgd2lsbCBiZSBub24tYmxvY2tpbmc6IHRoZQogICA6bWV0aDpgU1NMU29ja2V0LmRvX2hhbmRzaGFrZWAgbWV0aG9kIGhhcyB0byBiZSByZXRyaWVkIHVudGlsIGl0IHJldHVybnMKQEAgLTEyNTcsMTUgKzE2NzksNTQgQEAKICAgICAgICAgZXhjZXB0IHNzbC5TU0xXYW50V3JpdGVFcnJvcjoKICAgICAgICAgICAgIHNlbGVjdC5zZWxlY3QoW10sIFtzb2NrXSwgW10pCiAKKy4uIHNlZWFsc286OgorCisgICBUaGUgOm1vZDpgYXN5bmNpb2AgbW9kdWxlIHN1cHBvcnRzIG5vbi1ibG9ja2luZyBTU0wgc29ja2V0cyBhbmQgcHJvdmlkZXMgYQorICAgaGlnaGVyIGxldmVsIEFQSS4gSXQgcG9sbHMgZm9yIGV2ZW50cyB1c2luZyB0aGUgOm1vZDpgc2VsZWN0b3JzYCBtb2R1bGUgYW5kCisgICBoYW5kbGVzIDpleGM6YFNTTFdhbnRXcml0ZUVycm9yYCwgOmV4YzpgU1NMV2FudFJlYWRFcnJvcmAgYW5kCisgICA6ZXhjOmBCbG9ja2luZ0lPRXJyb3JgIGV4Y2VwdGlvbnMuIEl0IHJ1bnMgdGhlIFNTTCBoYW5kc2hha2UgYXN5bmNocm9ub3VzbHkKKyAgIGFzIHdlbGwuCisKIAogLi4gX3NzbC1zZWN1cml0eToKIAogU2VjdXJpdHkgY29uc2lkZXJhdGlvbnMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVZlcmlmeWluZyBjZXJ0aWZpY2F0ZXMKLV5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KK0Jlc3QgZGVmYXVsdHMKK15eXl5eXl5eXl5eXl4KIAorRm9yICoqY2xpZW50IHVzZSoqLCBpZiB5b3UgZG9uJ3QgaGF2ZSBhbnkgc3BlY2lhbCByZXF1aXJlbWVudHMgZm9yIHlvdXIKK3NlY3VyaXR5IHBvbGljeSwgaXQgaXMgaGlnaGx5IHJlY29tbWVuZGVkIHRoYXQgeW91IHVzZSB0aGUKKzpmdW5jOmBjcmVhdGVfZGVmYXVsdF9jb250ZXh0YCBmdW5jdGlvbiB0byBjcmVhdGUgeW91ciBTU0wgY29udGV4dC4KK0l0IHdpbGwgbG9hZCB0aGUgc3lzdGVtJ3MgdHJ1c3RlZCBDQSBjZXJ0aWZpY2F0ZXMsIGVuYWJsZSBjZXJ0aWZpY2F0ZQordmFsaWRhdGlvbiBhbmQgaG9zdG5hbWUgY2hlY2tpbmcsIGFuZCB0cnkgdG8gY2hvb3NlIHJlYXNvbmFibHkgc2VjdXJlCitwcm90b2NvbCBhbmQgY2lwaGVyIHNldHRpbmdzLgorCitGb3IgZXhhbXBsZSwgaGVyZSBpcyBob3cgeW91IHdvdWxkIHVzZSB0aGUgOmNsYXNzOmBzbXRwbGliLlNNVFBgIGNsYXNzIHRvCitjcmVhdGUgYSB0cnVzdGVkLCBzZWN1cmUgY29ubmVjdGlvbiB0byBhIFNNVFAgc2VydmVyOjoKKworICAgPj4+IGltcG9ydCBzc2wsIHNtdHBsaWIKKyAgID4+PiBzbXRwID0gc210cGxpYi5TTVRQKCJtYWlsLnB5dGhvbi5vcmciLCBwb3J0PTU4NykKKyAgID4+PiBjb250ZXh0ID0gc3NsLmNyZWF0ZV9kZWZhdWx0X2NvbnRleHQoKQorICAgPj4+IHNtdHAuc3RhcnR0bHMoY29udGV4dD1jb250ZXh0KQorICAgKDIyMCwgYicyLjAuMCBSZWFkeSB0byBzdGFydCBUTFMnKQorCitJZiBhIGNsaWVudCBjZXJ0aWZpY2F0ZSBpcyBuZWVkZWQgZm9yIHRoZSBjb25uZWN0aW9uLCBpdCBjYW4gYmUgYWRkZWQgd2l0aAorOm1ldGg6YFNTTENvbnRleHQubG9hZF9jZXJ0X2NoYWluYC4KKworQnkgY29udHJhc3QsIGlmIHlvdSBjcmVhdGUgdGhlIFNTTCBjb250ZXh0IGJ5IGNhbGxpbmcgdGhlIDpjbGFzczpgU1NMQ29udGV4dGAKK2NvbnN0cnVjdG9yIHlvdXJzZWxmLCBpdCB3aWxsIG5vdCBoYXZlIGNlcnRpZmljYXRlIHZhbGlkYXRpb24gbm9yIGhvc3RuYW1lCitjaGVja2luZyBlbmFibGVkIGJ5IGRlZmF1bHQuICBJZiB5b3UgZG8gc28sIHBsZWFzZSByZWFkIHRoZSBwYXJhZ3JhcGhzIGJlbG93Cit0byBhY2hpZXZlIGEgZ29vZCBzZWN1cml0eSBsZXZlbC4KKworTWFudWFsIHNldHRpbmdzCiteXl5eXl5eXl5eXl5eXl4KKworVmVyaWZ5aW5nIGNlcnRpZmljYXRlcworJycnJycnJycnJycnJycnJycnJycnJworCitXaGVuIGNhbGxpbmcgdGhlIDpjbGFzczpgU1NMQ29udGV4dGAgY29uc3RydWN0b3IgZGlyZWN0bHksCiA6Y29uc3Q6YENFUlRfTk9ORWAgaXMgdGhlIGRlZmF1bHQuICBTaW5jZSBpdCBkb2VzIG5vdCBhdXRoZW50aWNhdGUgdGhlIG90aGVyCiBwZWVyLCBpdCBjYW4gYmUgaW5zZWN1cmUsIGVzcGVjaWFsbHkgaW4gY2xpZW50IG1vZGUgd2hlcmUgbW9zdCBvZiB0aW1lIHlvdQogd291bGQgbGlrZSB0byBlbnN1cmUgdGhlIGF1dGhlbnRpY2l0eSBvZiB0aGUgc2VydmVyIHlvdSdyZSB0YWxraW5nIHRvLgpAQCAtMTI3NCw3ICsxNzM1LDkgQEAKIGhhdmUgdG8gY2hlY2sgdGhhdCB0aGUgc2VydmVyIGNlcnRpZmljYXRlLCB3aGljaCBjYW4gYmUgb2J0YWluZWQgYnkgY2FsbGluZwogOm1ldGg6YFNTTFNvY2tldC5nZXRwZWVyY2VydGAsIG1hdGNoZXMgdGhlIGRlc2lyZWQgc2VydmljZS4gIEZvciBtYW55CiBwcm90b2NvbHMgYW5kIGFwcGxpY2F0aW9ucywgdGhlIHNlcnZpY2UgY2FuIGJlIGlkZW50aWZpZWQgYnkgdGhlIGhvc3RuYW1lOwotaW4gdGhpcyBjYXNlLCB0aGUgOmZ1bmM6YG1hdGNoX2hvc3RuYW1lYCBmdW5jdGlvbiBjYW4gYmUgdXNlZC4KK2luIHRoaXMgY2FzZSwgdGhlIDpmdW5jOmBtYXRjaF9ob3N0bmFtZWAgZnVuY3Rpb24gY2FuIGJlIHVzZWQuICBUaGlzIGNvbW1vbgorY2hlY2sgaXMgYXV0b21hdGljYWxseSBwZXJmb3JtZWQgd2hlbiA6YXR0cjpgU1NMQ29udGV4dC5jaGVja19ob3N0bmFtZWAgaXMKK2VuYWJsZWQuCiAKIEluIHNlcnZlciBtb2RlLCBpZiB5b3Ugd2FudCB0byBhdXRoZW50aWNhdGUgeW91ciBjbGllbnRzIHVzaW5nIHRoZSBTU0wgbGF5ZXIKIChyYXRoZXIgdGhhbiB1c2luZyBhIGhpZ2hlci1sZXZlbCBhdXRoZW50aWNhdGlvbiBtZWNoYW5pc20pLCB5b3UnbGwgYWxzbyBoYXZlCkBAIC0xMjg3LDM3ICsxNzUwLDMyIEBACiAgICAgICBieSBkZWZhdWx0KS4KIAogUHJvdG9jb2wgdmVyc2lvbnMKLV5eXl5eXl5eXl5eXl5eXl5eCisnJycnJycnJycnJycnJycnJwogCi1TU0wgdmVyc2lvbiAyIGlzIGNvbnNpZGVyZWQgaW5zZWN1cmUgYW5kIGlzIHRoZXJlZm9yZSBkYW5nZXJvdXMgdG8gdXNlLiAgSWYKLXlvdSB3YW50IG1heGltdW0gY29tcGF0aWJpbGl0eSBiZXR3ZWVuIGNsaWVudHMgYW5kIHNlcnZlcnMsIGl0IGlzIHJlY29tbWVuZGVkCi10byB1c2UgOmNvbnN0OmBQUk9UT0NPTF9TU0x2MjNgIGFzIHRoZSBwcm90b2NvbCB2ZXJzaW9uIGFuZCB0aGVuIGRpc2FibGUKLVNTTHYyIGV4cGxpY2l0bHkgdXNpbmcgdGhlIDpkYXRhOmBTU0xDb250ZXh0Lm9wdGlvbnNgIGF0dHJpYnV0ZTo6CitTU0wgdmVyc2lvbnMgMiBhbmQgMyBhcmUgY29uc2lkZXJlZCBpbnNlY3VyZSBhbmQgYXJlIHRoZXJlZm9yZSBkYW5nZXJvdXMgdG8KK3VzZS4gIElmIHlvdSB3YW50IG1heGltdW0gY29tcGF0aWJpbGl0eSBiZXR3ZWVuIGNsaWVudHMgYW5kIHNlcnZlcnMsIGl0IGlzCityZWNvbW1lbmRlZCB0byB1c2UgOmNvbnN0OmBQUk9UT0NPTF9TU0x2MjNgIGFzIHRoZSBwcm90b2NvbCB2ZXJzaW9uIGFuZCB0aGVuCitkaXNhYmxlIFNTTHYyIGFuZCBTU0x2MyBleHBsaWNpdGx5IHVzaW5nIHRoZSA6ZGF0YTpgU1NMQ29udGV4dC5vcHRpb25zYAorYXR0cmlidXRlOjoKIAogICAgY29udGV4dCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9TU0x2MjMpCiAgICBjb250ZXh0Lm9wdGlvbnMgfD0gc3NsLk9QX05PX1NTTHYyCisgICBjb250ZXh0Lm9wdGlvbnMgfD0gc3NsLk9QX05PX1NTTHYzCiAKLVRoZSBTU0wgY29udGV4dCBjcmVhdGVkIGFib3ZlIHdpbGwgYWxsb3cgU1NMdjMgYW5kIFRMU3YxIGNvbm5lY3Rpb25zLCBidXQKLW5vdCBTU0x2Mi4KK1RoZSBTU0wgY29udGV4dCBjcmVhdGVkIGFib3ZlIHdpbGwgb25seSBhbGxvdyBUTFN2MSBhbmQgbGF0ZXIgKGlmCitzdXBwb3J0ZWQgYnkgeW91ciBzeXN0ZW0pIGNvbm5lY3Rpb25zLgogCiBDaXBoZXIgc2VsZWN0aW9uCi1eXl5eXl5eXl5eXl5eXl5eCisnJycnJycnJycnJycnJycnCiAKIElmIHlvdSBoYXZlIGFkdmFuY2VkIHNlY3VyaXR5IHJlcXVpcmVtZW50cywgZmluZS10dW5pbmcgb2YgdGhlIGNpcGhlcnMKIGVuYWJsZWQgd2hlbiBuZWdvdGlhdGluZyBhIFNTTCBzZXNzaW9uIGlzIHBvc3NpYmxlIHRocm91Z2ggdGhlCiA6bWV0aDpgU1NMQ29udGV4dC5zZXRfY2lwaGVyc2AgbWV0aG9kLiAgU3RhcnRpbmcgZnJvbSBQeXRob24gMy4yLjMsIHRoZQogc3NsIG1vZHVsZSBkaXNhYmxlcyBjZXJ0YWluIHdlYWsgY2lwaGVycyBieSBkZWZhdWx0LCBidXQgeW91IG1heSB3YW50Ci10byBmdXJ0aGVyIHJlc3RyaWN0IHRoZSBjaXBoZXIgY2hvaWNlLiAgRm9yIGV4YW1wbGU6OgotCi0gICBjb250ZXh0ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQotICAgY29udGV4dC5zZXRfY2lwaGVycygnSElHSDohYU5VTEw6IWVOVUxMJykKLQotVGhlIGBgIWFOVUxMOiFlTlVMTGBgIHBhcnQgb2YgdGhlIGNpcGhlciBzcGVjIGlzIG5lY2Vzc2FyeSB0byBkaXNhYmxlIGNpcGhlcnMKLXdoaWNoIGRvbid0IHByb3ZpZGUgYm90aCBlbmNyeXB0aW9uIGFuZCBhdXRoZW50aWNhdGlvbi4gIEJlIHN1cmUgdG8gcmVhZAotT3BlblNTTCdzIGRvY3VtZW50YXRpb24gYWJvdXQgdGhlIGBjaXBoZXIgbGlzdAotZm9ybWF0IDxodHRwOi8vd3d3Lm9wZW5zc2wub3JnL2RvY3MvYXBwcy9jaXBoZXJzLmh0bWwjQ0lQSEVSX0xJU1RfRk9STUFUPmBfLgotSWYgeW91IHdhbnQgdG8gY2hlY2sgd2hpY2ggY2lwaGVycyBhcmUgZW5hYmxlZCBieSBhIGdpdmVuIGNpcGhlciBsaXN0LAotdXNlIHRoZSBgYG9wZW5zc2wgY2lwaGVyc2BgIGNvbW1hbmQgb24geW91ciBzeXN0ZW0uCit0byBmdXJ0aGVyIHJlc3RyaWN0IHRoZSBjaXBoZXIgY2hvaWNlLiBCZSBzdXJlIHRvIHJlYWQgT3BlblNTTCdzIGRvY3VtZW50YXRpb24KK2Fib3V0IHRoZSBgY2lwaGVyIGxpc3QgZm9ybWF0IDxodHRwOi8vd3d3Lm9wZW5zc2wub3JnL2RvY3MvYXBwcy9jaXBoZXJzLmh0bWwjQ0lQSEVSX0xJU1RfRk9STUFUPmBfLgorSWYgeW91IHdhbnQgdG8gY2hlY2sgd2hpY2ggY2lwaGVycyBhcmUgZW5hYmxlZCBieSBhIGdpdmVuIGNpcGhlciBsaXN0LCB1c2UgdGhlCitgYG9wZW5zc2wgY2lwaGVyc2BgIGNvbW1hbmQgb24geW91ciBzeXN0ZW0uCiAKIE11bHRpLXByb2Nlc3NpbmcKIF5eXl5eXl5eXl5eXl5eXl4KQEAgLTEzNTAsMyArMTgwOCwxMiBAQAogCiAgICBgUkZDIDQzNjY6IFRyYW5zcG9ydCBMYXllciBTZWN1cml0eSAoVExTKSBFeHRlbnNpb25zIDxodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmM0MzY2PmBfCiAgICAgICAgQmxha2UtV2lsc29uIGV0LiBhbC4KKworICAgYFJGQyA1MjQ2OiBUaGUgVHJhbnNwb3J0IExheWVyIFNlY3VyaXR5IChUTFMpIFByb3RvY29sIFZlcnNpb24gMS4yIDxodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM1MjQ2PmBfCisgICAgICAgVC4gRGllcmtzIGV0LiBhbC4KKworICAgYFJGQyA2MDY2OiBUcmFuc3BvcnQgTGF5ZXIgU2VjdXJpdHkgKFRMUykgRXh0ZW5zaW9ucyA8aHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNjA2Nj5gXworICAgICAgIEQuIEVhc3RsYWtlCisKKyAgIGBJQU5BIFRMUzogVHJhbnNwb3J0IExheWVyIFNlY3VyaXR5IChUTFMpIFBhcmFtZXRlcnMgPGh0dHA6Ly93d3cuaWFuYS5vcmcvYXNzaWdubWVudHMvdGxzLXBhcmFtZXRlcnMvdGxzLXBhcmFtZXRlcnMueG1sPmBfCisgICAgICAgSUFOQQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvc3RhdC5yc3QgYi9Eb2MvbGlicmFyeS9zdGF0LnJzdAppbmRleCA2YzIwYWEyLi4yNDc2OWY2IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9zdGF0LnJzdAorKysgYi9Eb2MvbGlicmFyeS9zdGF0LnJzdApAQCAtNiw3ICs2LDggQEAKICAgICAgICAgICAgICAgb3MubHN0YXQoKSBhbmQgb3MuZnN0YXQoKS4KIC4uIHNlY3Rpb25hdXRob3I6OiBTa2lwIE1vbnRhbmFybyA8c2tpcEBhdXRvbWF0cml4LmNvbT4KIAotKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvc3RhdC5weWAKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTW9kdWxlcy9fc3RhdC5jYAorICAgICAgICAgICAgICAgICA6c291cmNlOmBMaWIvc3RhdC5weWAKIAogLS0tLS0tLS0tLS0tLS0KIApAQCAtMTUsNiArMTYsOSBAQAogZXhpc3QpLiAgRm9yIGNvbXBsZXRlIGRldGFpbHMgYWJvdXQgdGhlIDpjOmZ1bmM6YHN0YXRgLCA6YzpmdW5jOmBmc3RhdGAgYW5kCiA6YzpmdW5jOmBsc3RhdGAgY2FsbHMsIGNvbnN1bHQgdGhlIGRvY3VtZW50YXRpb24gZm9yIHlvdXIgc3lzdGVtLgogCisuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgVGhlIHN0YXQgbW9kdWxlIGlzIGJhY2tlZCBieSBhIEMgaW1wbGVtZW50YXRpb24uCisKIFRoZSA6bW9kOmBzdGF0YCBtb2R1bGUgZGVmaW5lcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyB0byB0ZXN0IGZvciBzcGVjaWZpYyBmaWxlCiB0eXBlczoKIApAQCAtNTMsNiArNTcsMjQgQEAKIAogICAgUmV0dXJuIG5vbi16ZXJvIGlmIHRoZSBtb2RlIGlzIGZyb20gYSBzb2NrZXQuCiAKKy4uIGZ1bmN0aW9uOjogU19JU0RPT1IobW9kZSkKKworICAgUmV0dXJuIG5vbi16ZXJvIGlmIHRoZSBtb2RlIGlzIGZyb20gYSBkb29yLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworLi4gZnVuY3Rpb246OiBTX0lTUE9SVChtb2RlKQorCisgICBSZXR1cm4gbm9uLXplcm8gaWYgdGhlIG1vZGUgaXMgZnJvbSBhbiBldmVudCBwb3J0LgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworLi4gZnVuY3Rpb246OiBTX0lTV0hUKG1vZGUpCisKKyAgIFJldHVybiBub24temVybyBpZiB0aGUgbW9kZSBpcyBmcm9tIGEgd2hpdGVvdXQuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiBUd28gYWRkaXRpb25hbCBmdW5jdGlvbnMgYXJlIGRlZmluZWQgZm9yIG1vcmUgZ2VuZXJhbCBtYW5pcHVsYXRpb24gb2YgdGhlIGZpbGUncwogbW9kZToKIApAQCAtMTEzLDYgKzEzNSwxMCBAQAogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSBmdW5jdGlvbiBzdXBwb3J0cyA6ZGF0YTpgU19JRkRPT1JgLCA6ZGF0YTpgU19JRlBPUlRgIGFuZAorICAgICAgOmRhdGE6YFNfSUZXSFRgLgorCiAKIEFsbCB0aGUgdmFyaWFibGVzIGJlbG93IGFyZSBzaW1wbHkgc3ltYm9saWMgaW5kZXhlcyBpbnRvIHRoZSAxMC10dXBsZSByZXR1cm5lZAogYnkgOmZ1bmM6YG9zLnN0YXRgLCA6ZnVuYzpgb3MuZnN0YXRgIG9yIDpmdW5jOmBvcy5sc3RhdGAuCkBAIC0yMTAsNiArMjM2LDI5IEBACiAKICAgIEZJRk8uCiAKKy4uIGRhdGE6OiBTX0lGRE9PUgorCisgICBEb29yLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworLi4gZGF0YTo6IFNfSUZQT1JUCisKKyAgIEV2ZW50IHBvcnQuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisuLiBkYXRhOjogU19JRldIVAorCisgICBXaGl0ZW91dC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKy4uIG5vdGU6OgorCisgICA6ZGF0YTpgU19JRkRPT1JgLCA6ZGF0YTpgU19JRlBPUlRgIG9yIDpkYXRhOmBTX0lGV0hUYCBhcmUgZGVmaW5lZCBhcworICAgMCB3aGVuIHRoZSBwbGF0Zm9ybSBkb2VzIG5vdCBoYXZlIHN1cHBvcnQgZm9yIHRoZSBmaWxlIHR5cGVzLgorCiBUaGUgZm9sbG93aW5nIGZsYWdzIGNhbiBhbHNvIGJlIHVzZWQgaW4gdGhlICptb2RlKiBhcmd1bWVudCBvZiA6ZnVuYzpgb3MuY2htb2RgOgogCiAuLiBkYXRhOjogU19JU1VJRApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvc3RhdGlzdGljcy5yc3QgYi9Eb2MvbGlicmFyeS9zdGF0aXN0aWNzLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzlkODhjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jL2xpYnJhcnkvc3RhdGlzdGljcy5yc3QKQEAgLTAsMCArMSw0MTggQEAKKzptb2Q6YHN0YXRpc3RpY3NgIC0tLSBNYXRoZW1hdGljYWwgc3RhdGlzdGljcyBmdW5jdGlvbnMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworLi4gbW9kdWxlOjogc3RhdGlzdGljcworICAgOnN5bm9wc2lzOiBtYXRoZW1hdGljYWwgc3RhdGlzdGljcyBmdW5jdGlvbnMKKy4uIG1vZHVsZWF1dGhvcjo6IFN0ZXZlbiBEJ0FwcmFubyA8c3RldmUrcHl0aG9uQHBlYXJ3b29kLmluZm8+CisuLiBzZWN0aW9uYXV0aG9yOjogU3RldmVuIEQnQXByYW5vIDxzdGV2ZStweXRob25AcGVhcndvb2QuaW5mbz4KKworLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKy4uIHRlc3RzZXR1cDo6ICoKKworICAgZnJvbSBzdGF0aXN0aWNzIGltcG9ydCAqCisgICBfX25hbWVfXyA9ICc8ZG9jdGVzdD4nCisKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL3N0YXRpc3RpY3MucHlgCisKKy0tLS0tLS0tLS0tLS0tCisKK1RoaXMgbW9kdWxlIHByb3ZpZGVzIGZ1bmN0aW9ucyBmb3IgY2FsY3VsYXRpbmcgbWF0aGVtYXRpY2FsIHN0YXRpc3RpY3Mgb2YKK251bWVyaWMgKDpjbGFzczpgUmVhbGAtdmFsdWVkKSBkYXRhLgorCisuLiBub3RlOjoKKworICAgVW5sZXNzIGV4cGxpY2l0bHkgbm90ZWQgb3RoZXJ3aXNlLCB0aGVzZSBmdW5jdGlvbnMgc3VwcG9ydCA6Y2xhc3M6YGludGAsCisgICA6Y2xhc3M6YGZsb2F0YCwgOmNsYXNzOmBkZWNpbWFsLkRlY2ltYWxgIGFuZCA6Y2xhc3M6YGZyYWN0aW9ucy5GcmFjdGlvbmAuCisgICBCZWhhdmlvdXIgd2l0aCBvdGhlciB0eXBlcyAod2hldGhlciBpbiB0aGUgbnVtZXJpYyB0b3dlciBvciBub3QpIGlzCisgICBjdXJyZW50bHkgdW5zdXBwb3J0ZWQuICBNaXhlZCB0eXBlcyBhcmUgYWxzbyB1bmRlZmluZWQgYW5kCisgICBpbXBsZW1lbnRhdGlvbi1kZXBlbmRlbnQuICBJZiB5b3VyIGlucHV0IGRhdGEgY29uc2lzdHMgb2YgbWl4ZWQgdHlwZXMsCisgICB5b3UgbWF5IGJlIGFibGUgdG8gdXNlIDpmdW5jOmBtYXBgIHRvIGVuc3VyZSBhIGNvbnNpc3RlbnQgcmVzdWx0LCBlLmcuCisgICBgYG1hcChmbG9hdCwgaW5wdXRfZGF0YSlgYC4KKworQXZlcmFnZXMgYW5kIG1lYXN1cmVzIG9mIGNlbnRyYWwgbG9jYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZXNlIGZ1bmN0aW9ucyBjYWxjdWxhdGUgYW4gYXZlcmFnZSBvciB0eXBpY2FsIHZhbHVlIGZyb20gYSBwb3B1bGF0aW9uCitvciBzYW1wbGUuCisKKz09PT09PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzpmdW5jOmBtZWFuYCAgICAgICAgICAgICBBcml0aG1ldGljIG1lYW4gKCJhdmVyYWdlIikgb2YgZGF0YS4KKzpmdW5jOmBtZWRpYW5gICAgICAgICAgICBNZWRpYW4gKG1pZGRsZSB2YWx1ZSkgb2YgZGF0YS4KKzpmdW5jOmBtZWRpYW5fbG93YCAgICAgICBMb3cgbWVkaWFuIG9mIGRhdGEuCis6ZnVuYzpgbWVkaWFuX2hpZ2hgICAgICAgSGlnaCBtZWRpYW4gb2YgZGF0YS4KKzpmdW5jOmBtZWRpYW5fZ3JvdXBlZGAgICBNZWRpYW4sIG9yIDUwdGggcGVyY2VudGlsZSwgb2YgZ3JvdXBlZCBkYXRhLgorOmZ1bmM6YG1vZGVgICAgICAgICAgICAgIE1vZGUgKG1vc3QgY29tbW9uIHZhbHVlKSBvZiBkaXNjcmV0ZSBkYXRhLgorPT09PT09PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitNZWFzdXJlcyBvZiBzcHJlYWQKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGVzZSBmdW5jdGlvbnMgY2FsY3VsYXRlIGEgbWVhc3VyZSBvZiBob3cgbXVjaCB0aGUgcG9wdWxhdGlvbiBvciBzYW1wbGUKK3RlbmRzIHRvIGRldmlhdGUgZnJvbSB0aGUgdHlwaWNhbCBvciBhdmVyYWdlIHZhbHVlcy4KKworPT09PT09PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorOmZ1bmM6YHBzdGRldmAgICAgICAgICAgIFBvcHVsYXRpb24gc3RhbmRhcmQgZGV2aWF0aW9uIG9mIGRhdGEuCis6ZnVuYzpgcHZhcmlhbmNlYCAgICAgICAgUG9wdWxhdGlvbiB2YXJpYW5jZSBvZiBkYXRhLgorOmZ1bmM6YHN0ZGV2YCAgICAgICAgICAgIFNhbXBsZSBzdGFuZGFyZCBkZXZpYXRpb24gb2YgZGF0YS4KKzpmdW5jOmB2YXJpYW5jZWAgICAgICAgICBTYW1wbGUgdmFyaWFuY2Ugb2YgZGF0YS4KKz09PT09PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCitGdW5jdGlvbiBkZXRhaWxzCistLS0tLS0tLS0tLS0tLS0tCisKK05vdGU6IFRoZSBmdW5jdGlvbnMgZG8gbm90IHJlcXVpcmUgdGhlIGRhdGEgZ2l2ZW4gdG8gdGhlbSB0byBiZSBzb3J0ZWQuCitIb3dldmVyLCBmb3IgcmVhZGluZyBjb252ZW5pZW5jZSwgbW9zdCBvZiB0aGUgZXhhbXBsZXMgc2hvdyBzb3J0ZWQgc2VxdWVuY2VzLgorCisuLiBmdW5jdGlvbjo6IG1lYW4oZGF0YSkKKworICAgUmV0dXJuIHRoZSBzYW1wbGUgYXJpdGhtZXRpYyBtZWFuIG9mICpkYXRhKiwgYSBzZXF1ZW5jZSBvciBpdGVyYXRvciBvZgorICAgcmVhbC12YWx1ZWQgbnVtYmVycy4KKworICAgVGhlIGFyaXRobWV0aWMgbWVhbiBpcyB0aGUgc3VtIG9mIHRoZSBkYXRhIGRpdmlkZWQgYnkgdGhlIG51bWJlciBvZiBkYXRhCisgICBwb2ludHMuICBJdCBpcyBjb21tb25seSBjYWxsZWQgInRoZSBhdmVyYWdlIiwgYWx0aG91Z2ggaXQgaXMgb25seSBvbmUgb2YgbWFueQorICAgZGlmZmVyZW50IG1hdGhlbWF0aWNhbCBhdmVyYWdlcy4gIEl0IGlzIGEgbWVhc3VyZSBvZiB0aGUgY2VudHJhbCBsb2NhdGlvbiBvZgorICAgdGhlIGRhdGEuCisKKyAgIElmICpkYXRhKiBpcyBlbXB0eSwgOmV4YzpgU3RhdGlzdGljc0Vycm9yYCB3aWxsIGJlIHJhaXNlZC4KKworICAgU29tZSBleGFtcGxlcyBvZiB1c2U6CisKKyAgIC4uIGRvY3Rlc3Q6OgorCisgICAgICA+Pj4gbWVhbihbMSwgMiwgMywgNCwgNF0pCisgICAgICAyLjgKKyAgICAgID4+PiBtZWFuKFstMS4wLCAyLjUsIDMuMjUsIDUuNzVdKQorICAgICAgMi42MjUKKworICAgICAgPj4+IGZyb20gZnJhY3Rpb25zIGltcG9ydCBGcmFjdGlvbiBhcyBGCisgICAgICA+Pj4gbWVhbihbRigzLCA3KSwgRigxLCAyMSksIEYoNSwgMyksIEYoMSwgMyldKQorICAgICAgRnJhY3Rpb24oMTMsIDIxKQorCisgICAgICA+Pj4gZnJvbSBkZWNpbWFsIGltcG9ydCBEZWNpbWFsIGFzIEQKKyAgICAgID4+PiBtZWFuKFtEKCIwLjUiKSwgRCgiMC43NSIpLCBEKCIwLjYyNSIpLCBEKCIwLjM3NSIpXSkKKyAgICAgIERlY2ltYWwoJzAuNTYyNScpCisKKyAgIC4uIG5vdGU6OgorCisgICAgICBUaGUgbWVhbiBpcyBzdHJvbmdseSBhZmZlY3RlZCBieSBvdXRsaWVycyBhbmQgaXMgbm90IGEgcm9idXN0IGVzdGltYXRvcgorICAgICAgZm9yIGNlbnRyYWwgbG9jYXRpb246IHRoZSBtZWFuIGlzIG5vdCBuZWNlc3NhcmlseSBhIHR5cGljYWwgZXhhbXBsZSBvZiB0aGUKKyAgICAgIGRhdGEgcG9pbnRzLiAgRm9yIG1vcmUgcm9idXN0LCBhbHRob3VnaCBsZXNzIGVmZmljaWVudCwgbWVhc3VyZXMgb2YKKyAgICAgIGNlbnRyYWwgbG9jYXRpb24sIHNlZSA6ZnVuYzpgbWVkaWFuYCBhbmQgOmZ1bmM6YG1vZGVgLiAgKEluIHRoaXMgY2FzZSwKKyAgICAgICJlZmZpY2llbnQiIHJlZmVycyB0byBzdGF0aXN0aWNhbCBlZmZpY2llbmN5IHJhdGhlciB0aGFuIGNvbXB1dGF0aW9uYWwKKyAgICAgIGVmZmljaWVuY3kuKQorCisgICAgICBUaGUgc2FtcGxlIG1lYW4gZ2l2ZXMgYW4gdW5iaWFzZWQgZXN0aW1hdGUgb2YgdGhlIHRydWUgcG9wdWxhdGlvbiBtZWFuLAorICAgICAgd2hpY2ggbWVhbnMgdGhhdCwgdGFrZW4gb24gYXZlcmFnZSBvdmVyIGFsbCB0aGUgcG9zc2libGUgc2FtcGxlcywKKyAgICAgIGBgbWVhbihzYW1wbGUpYGAgY29udmVyZ2VzIG9uIHRoZSB0cnVlIG1lYW4gb2YgdGhlIGVudGlyZSBwb3B1bGF0aW9uLiAgSWYKKyAgICAgICpkYXRhKiByZXByZXNlbnRzIHRoZSBlbnRpcmUgcG9wdWxhdGlvbiByYXRoZXIgdGhhbiBhIHNhbXBsZSwgdGhlbgorICAgICAgYGBtZWFuKGRhdGEpYGAgaXMgZXF1aXZhbGVudCB0byBjYWxjdWxhdGluZyB0aGUgdHJ1ZSBwb3B1bGF0aW9uIG1lYW4gzrwuCisKKworLi4gZnVuY3Rpb246OiBtZWRpYW4oZGF0YSkKKworICAgUmV0dXJuIHRoZSBtZWRpYW4gKG1pZGRsZSB2YWx1ZSkgb2YgbnVtZXJpYyBkYXRhLCB1c2luZyB0aGUgY29tbW9uICJtZWFuIG9mCisgICBtaWRkbGUgdHdvIiBtZXRob2QuICBJZiAqZGF0YSogaXMgZW1wdHksIDpleGM6YFN0YXRpc3RpY3NFcnJvcmAgaXMgcmFpc2VkLgorCisgICBUaGUgbWVkaWFuIGlzIGEgcm9idXN0IG1lYXN1cmUgb2YgY2VudHJhbCBsb2NhdGlvbiwgYW5kIGlzIGxlc3MgYWZmZWN0ZWQgYnkKKyAgIHRoZSBwcmVzZW5jZSBvZiBvdXRsaWVycyBpbiB5b3VyIGRhdGEuICBXaGVuIHRoZSBudW1iZXIgb2YgZGF0YSBwb2ludHMgaXMKKyAgIG9kZCwgdGhlIG1pZGRsZSBkYXRhIHBvaW50IGlzIHJldHVybmVkOgorCisgICAuLiBkb2N0ZXN0OjoKKworICAgICAgPj4+IG1lZGlhbihbMSwgMywgNV0pCisgICAgICAzCisKKyAgIFdoZW4gdGhlIG51bWJlciBvZiBkYXRhIHBvaW50cyBpcyBldmVuLCB0aGUgbWVkaWFuIGlzIGludGVycG9sYXRlZCBieSB0YWtpbmcKKyAgIHRoZSBhdmVyYWdlIG9mIHRoZSB0d28gbWlkZGxlIHZhbHVlczoKKworICAgLi4gZG9jdGVzdDo6CisKKyAgICAgID4+PiBtZWRpYW4oWzEsIDMsIDUsIDddKQorICAgICAgNC4wCisKKyAgIFRoaXMgaXMgc3VpdGVkIGZvciB3aGVuIHlvdXIgZGF0YSBpcyBkaXNjcmV0ZSwgYW5kIHlvdSBkb24ndCBtaW5kIHRoYXQgdGhlCisgICBtZWRpYW4gbWF5IG5vdCBiZSBhbiBhY3R1YWwgZGF0YSBwb2ludC4KKworICAgLi4gc2VlYWxzbzo6IDpmdW5jOmBtZWRpYW5fbG93YCwgOmZ1bmM6YG1lZGlhbl9oaWdoYCwgOmZ1bmM6YG1lZGlhbl9ncm91cGVkYAorCisKKy4uIGZ1bmN0aW9uOjogbWVkaWFuX2xvdyhkYXRhKQorCisgICBSZXR1cm4gdGhlIGxvdyBtZWRpYW4gb2YgbnVtZXJpYyBkYXRhLiAgSWYgKmRhdGEqIGlzIGVtcHR5LAorICAgOmV4YzpgU3RhdGlzdGljc0Vycm9yYCBpcyByYWlzZWQuCisKKyAgIFRoZSBsb3cgbWVkaWFuIGlzIGFsd2F5cyBhIG1lbWJlciBvZiB0aGUgZGF0YSBzZXQuICBXaGVuIHRoZSBudW1iZXIgb2YgZGF0YQorICAgcG9pbnRzIGlzIG9kZCwgdGhlIG1pZGRsZSB2YWx1ZSBpcyByZXR1cm5lZC4gIFdoZW4gaXQgaXMgZXZlbiwgdGhlIHNtYWxsZXIgb2YKKyAgIHRoZSB0d28gbWlkZGxlIHZhbHVlcyBpcyByZXR1cm5lZC4KKworICAgLi4gZG9jdGVzdDo6CisKKyAgICAgID4+PiBtZWRpYW5fbG93KFsxLCAzLCA1XSkKKyAgICAgIDMKKyAgICAgID4+PiBtZWRpYW5fbG93KFsxLCAzLCA1LCA3XSkKKyAgICAgIDMKKworICAgVXNlIHRoZSBsb3cgbWVkaWFuIHdoZW4geW91ciBkYXRhIGFyZSBkaXNjcmV0ZSBhbmQgeW91IHByZWZlciB0aGUgbWVkaWFuIHRvCisgICBiZSBhbiBhY3R1YWwgZGF0YSBwb2ludCByYXRoZXIgdGhhbiBpbnRlcnBvbGF0ZWQuCisKKworLi4gZnVuY3Rpb246OiBtZWRpYW5faGlnaChkYXRhKQorCisgICBSZXR1cm4gdGhlIGhpZ2ggbWVkaWFuIG9mIGRhdGEuICBJZiAqZGF0YSogaXMgZW1wdHksIDpleGM6YFN0YXRpc3RpY3NFcnJvcmAKKyAgIGlzIHJhaXNlZC4KKworICAgVGhlIGhpZ2ggbWVkaWFuIGlzIGFsd2F5cyBhIG1lbWJlciBvZiB0aGUgZGF0YSBzZXQuICBXaGVuIHRoZSBudW1iZXIgb2YgZGF0YQorICAgcG9pbnRzIGlzIG9kZCwgdGhlIG1pZGRsZSB2YWx1ZSBpcyByZXR1cm5lZC4gIFdoZW4gaXQgaXMgZXZlbiwgdGhlIGxhcmdlciBvZgorICAgdGhlIHR3byBtaWRkbGUgdmFsdWVzIGlzIHJldHVybmVkLgorCisgICAuLiBkb2N0ZXN0OjoKKworICAgICAgPj4+IG1lZGlhbl9oaWdoKFsxLCAzLCA1XSkKKyAgICAgIDMKKyAgICAgID4+PiBtZWRpYW5faGlnaChbMSwgMywgNSwgN10pCisgICAgICA1CisKKyAgIFVzZSB0aGUgaGlnaCBtZWRpYW4gd2hlbiB5b3VyIGRhdGEgYXJlIGRpc2NyZXRlIGFuZCB5b3UgcHJlZmVyIHRoZSBtZWRpYW4gdG8KKyAgIGJlIGFuIGFjdHVhbCBkYXRhIHBvaW50IHJhdGhlciB0aGFuIGludGVycG9sYXRlZC4KKworCisuLiBmdW5jdGlvbjo6IG1lZGlhbl9ncm91cGVkKGRhdGEsIGludGVydmFsPTEpCisKKyAgIFJldHVybiB0aGUgbWVkaWFuIG9mIGdyb3VwZWQgY29udGludW91cyBkYXRhLCBjYWxjdWxhdGVkIGFzIHRoZSA1MHRoCisgICBwZXJjZW50aWxlLCB1c2luZyBpbnRlcnBvbGF0aW9uLiAgSWYgKmRhdGEqIGlzIGVtcHR5LCA6ZXhjOmBTdGF0aXN0aWNzRXJyb3JgCisgICBpcyByYWlzZWQuCisKKyAgIC4uIGRvY3Rlc3Q6OgorCisgICAgICA+Pj4gbWVkaWFuX2dyb3VwZWQoWzUyLCA1MiwgNTMsIDU0XSkKKyAgICAgIDUyLjUKKworICAgSW4gdGhlIGZvbGxvd2luZyBleGFtcGxlLCB0aGUgZGF0YSBhcmUgcm91bmRlZCwgc28gdGhhdCBlYWNoIHZhbHVlIHJlcHJlc2VudHMKKyAgIHRoZSBtaWRwb2ludCBvZiBkYXRhIGNsYXNzZXMsIGUuZy4gMSBpcyB0aGUgbWlkcG9pbnQgb2YgdGhlIGNsYXNzIDAuNS0xLjUsIDIKKyAgIGlzIHRoZSBtaWRwb2ludCBvZiAxLjUtMi41LCAzIGlzIHRoZSBtaWRwb2ludCBvZiAyLjUtMy41LCBldGMuICBXaXRoIHRoZSBkYXRhCisgICBnaXZlbiwgdGhlIG1pZGRsZSB2YWx1ZSBmYWxscyBzb21ld2hlcmUgaW4gdGhlIGNsYXNzIDMuNS00LjUsIGFuZAorICAgaW50ZXJwb2xhdGlvbiBpcyB1c2VkIHRvIGVzdGltYXRlIGl0OgorCisgICAuLiBkb2N0ZXN0OjoKKworICAgICAgPj4+IG1lZGlhbl9ncm91cGVkKFsxLCAyLCAyLCAzLCA0LCA0LCA0LCA0LCA0LCA1XSkKKyAgICAgIDMuNworCisgICBPcHRpb25hbCBhcmd1bWVudCAqaW50ZXJ2YWwqIHJlcHJlc2VudHMgdGhlIGNsYXNzIGludGVydmFsLCBhbmQgZGVmYXVsdHMKKyAgIHRvIDEuICBDaGFuZ2luZyB0aGUgY2xhc3MgaW50ZXJ2YWwgbmF0dXJhbGx5IHdpbGwgY2hhbmdlIHRoZSBpbnRlcnBvbGF0aW9uOgorCisgICAuLiBkb2N0ZXN0OjoKKworICAgICAgPj4+IG1lZGlhbl9ncm91cGVkKFsxLCAzLCAzLCA1LCA3XSwgaW50ZXJ2YWw9MSkKKyAgICAgIDMuMjUKKyAgICAgID4+PiBtZWRpYW5fZ3JvdXBlZChbMSwgMywgMywgNSwgN10sIGludGVydmFsPTIpCisgICAgICAzLjUKKworICAgVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBjaGVjayB3aGV0aGVyIHRoZSBkYXRhIHBvaW50cyBhcmUgYXQgbGVhc3QKKyAgICppbnRlcnZhbCogYXBhcnQuCisKKyAgIC4uIGltcGwtZGV0YWlsOjoKKworICAgICAgVW5kZXIgc29tZSBjaXJjdW1zdGFuY2VzLCA6ZnVuYzpgbWVkaWFuX2dyb3VwZWRgIG1heSBjb2VyY2UgZGF0YSBwb2ludHMgdG8KKyAgICAgIGZsb2F0cy4gIFRoaXMgYmVoYXZpb3VyIGlzIGxpa2VseSB0byBjaGFuZ2UgaW4gdGhlIGZ1dHVyZS4KKworICAgLi4gc2VlYWxzbzo6CisKKyAgICAgICogIlN0YXRpc3RpY3MgZm9yIHRoZSBCZWhhdmlvcmFsIFNjaWVuY2VzIiwgRnJlZGVyaWNrIEogR3JhdmV0dGVyIGFuZAorICAgICAgICBMYXJyeSBCIFdhbGxuYXUgKDh0aCBFZGl0aW9uKS4KKworICAgICAgKiBDYWxjdWxhdGluZyB0aGUgYG1lZGlhbiA8aHR0cDovL3d3dy51YWxiZXJ0YS5jYS9+b3BzY2FuL21lZGlhbi5odG1sPmBfLgorCisgICAgICAqIFRoZSBgU1NNRURJQU4KKyAgICAgICAgPGh0dHBzOi8vaGVscC5nbm9tZS5vcmcvdXNlcnMvZ251bWVyaWMvc3RhYmxlL2dudW1lcmljLmh0bWwjZ251bWVyaWMtZnVuY3Rpb24tU1NNRURJQU4+YF8KKyAgICAgICAgZnVuY3Rpb24gaW4gdGhlIEdub21lIEdudW1lcmljIHNwcmVhZHNoZWV0LCBpbmNsdWRpbmcgYHRoaXMgZGlzY3Vzc2lvbgorICAgICAgICA8aHR0cHM6Ly9tYWlsLmdub21lLm9yZy9hcmNoaXZlcy9nbnVtZXJpYy1saXN0LzIwMTEtQXByaWwvbXNnMDAwMTguaHRtbD5gXy4KKworCisuLiBmdW5jdGlvbjo6IG1vZGUoZGF0YSkKKworICAgUmV0dXJuIHRoZSBtb3N0IGNvbW1vbiBkYXRhIHBvaW50IGZyb20gZGlzY3JldGUgb3Igbm9taW5hbCAqZGF0YSouICBUaGUgbW9kZQorICAgKHdoZW4gaXQgZXhpc3RzKSBpcyB0aGUgbW9zdCB0eXBpY2FsIHZhbHVlLCBhbmQgaXMgYSByb2J1c3QgbWVhc3VyZSBvZgorICAgY2VudHJhbCBsb2NhdGlvbi4KKworICAgSWYgKmRhdGEqIGlzIGVtcHR5LCBvciBpZiB0aGVyZSBpcyBub3QgZXhhY3RseSBvbmUgbW9zdCBjb21tb24gdmFsdWUsCisgICA6ZXhjOmBTdGF0aXN0aWNzRXJyb3JgIGlzIHJhaXNlZC4KKworICAgYGBtb2RlYGAgYXNzdW1lcyBkaXNjcmV0ZSBkYXRhLCBhbmQgcmV0dXJucyBhIHNpbmdsZSB2YWx1ZS4gVGhpcyBpcyB0aGUKKyAgIHN0YW5kYXJkIHRyZWF0bWVudCBvZiB0aGUgbW9kZSBhcyBjb21tb25seSB0YXVnaHQgaW4gc2Nob29sczoKKworICAgLi4gZG9jdGVzdDo6CisKKyAgICAgID4+PiBtb2RlKFsxLCAxLCAyLCAzLCAzLCAzLCAzLCA0XSkKKyAgICAgIDMKKworICAgVGhlIG1vZGUgaXMgdW5pcXVlIGluIHRoYXQgaXQgaXMgdGhlIG9ubHkgc3RhdGlzdGljIHdoaWNoIGFsc28gYXBwbGllcworICAgdG8gbm9taW5hbCAobm9uLW51bWVyaWMpIGRhdGE6CisKKyAgIC4uIGRvY3Rlc3Q6OgorCisgICAgICA+Pj4gbW9kZShbInJlZCIsICJibHVlIiwgImJsdWUiLCAicmVkIiwgImdyZWVuIiwgInJlZCIsICJyZWQiXSkKKyAgICAgICdyZWQnCisKKworLi4gZnVuY3Rpb246OiBwc3RkZXYoZGF0YSwgbXU9Tm9uZSkKKworICAgUmV0dXJuIHRoZSBwb3B1bGF0aW9uIHN0YW5kYXJkIGRldmlhdGlvbiAodGhlIHNxdWFyZSByb290IG9mIHRoZSBwb3B1bGF0aW9uCisgICB2YXJpYW5jZSkuICBTZWUgOmZ1bmM6YHB2YXJpYW5jZWAgZm9yIGFyZ3VtZW50cyBhbmQgb3RoZXIgZGV0YWlscy4KKworICAgLi4gZG9jdGVzdDo6CisKKyAgICAgID4+PiBwc3RkZXYoWzEuNSwgMi41LCAyLjUsIDIuNzUsIDMuMjUsIDQuNzVdKQorICAgICAgMC45ODY4OTMyNzM1MjcyNTEKKworCisuLiBmdW5jdGlvbjo6IHB2YXJpYW5jZShkYXRhLCBtdT1Ob25lKQorCisgICBSZXR1cm4gdGhlIHBvcHVsYXRpb24gdmFyaWFuY2Ugb2YgKmRhdGEqLCBhIG5vbi1lbXB0eSBpdGVyYWJsZSBvZiByZWFsLXZhbHVlZAorICAgbnVtYmVycy4gIFZhcmlhbmNlLCBvciBzZWNvbmQgbW9tZW50IGFib3V0IHRoZSBtZWFuLCBpcyBhIG1lYXN1cmUgb2YgdGhlCisgICB2YXJpYWJpbGl0eSAoc3ByZWFkIG9yIGRpc3BlcnNpb24pIG9mIGRhdGEuICBBIGxhcmdlIHZhcmlhbmNlIGluZGljYXRlcyB0aGF0CisgICB0aGUgZGF0YSBpcyBzcHJlYWQgb3V0OyBhIHNtYWxsIHZhcmlhbmNlIGluZGljYXRlcyBpdCBpcyBjbHVzdGVyZWQgY2xvc2VseQorICAgYXJvdW5kIHRoZSBtZWFuLgorCisgICBJZiB0aGUgb3B0aW9uYWwgc2Vjb25kIGFyZ3VtZW50ICptdSogaXMgZ2l2ZW4sIGl0IHNob3VsZCBiZSB0aGUgbWVhbiBvZgorICAgKmRhdGEqLiAgSWYgaXQgaXMgbWlzc2luZyBvciBgYE5vbmVgYCAodGhlIGRlZmF1bHQpLCB0aGUgbWVhbiBpcworICAgYXV0b21hdGljYWxseSBjYWxjdWxhdGVkLgorCisgICBVc2UgdGhpcyBmdW5jdGlvbiB0byBjYWxjdWxhdGUgdGhlIHZhcmlhbmNlIGZyb20gdGhlIGVudGlyZSBwb3B1bGF0aW9uLiAgVG8KKyAgIGVzdGltYXRlIHRoZSB2YXJpYW5jZSBmcm9tIGEgc2FtcGxlLCB0aGUgOmZ1bmM6YHZhcmlhbmNlYCBmdW5jdGlvbiBpcyB1c3VhbGx5CisgICBhIGJldHRlciBjaG9pY2UuCisKKyAgIFJhaXNlcyA6ZXhjOmBTdGF0aXN0aWNzRXJyb3JgIGlmICpkYXRhKiBpcyBlbXB0eS4KKworICAgRXhhbXBsZXM6CisKKyAgIC4uIGRvY3Rlc3Q6OgorCisgICAgICA+Pj4gZGF0YSA9IFswLjAsIDAuMjUsIDAuMjUsIDEuMjUsIDEuNSwgMS43NSwgMi43NSwgMy4yNV0KKyAgICAgID4+PiBwdmFyaWFuY2UoZGF0YSkKKyAgICAgIDEuMjUKKworICAgSWYgeW91IGhhdmUgYWxyZWFkeSBjYWxjdWxhdGVkIHRoZSBtZWFuIG9mIHlvdXIgZGF0YSwgeW91IGNhbiBwYXNzIGl0IGFzIHRoZQorICAgb3B0aW9uYWwgc2Vjb25kIGFyZ3VtZW50ICptdSogdG8gYXZvaWQgcmVjYWxjdWxhdGlvbjoKKworICAgLi4gZG9jdGVzdDo6CisKKyAgICAgID4+PiBtdSA9IG1lYW4oZGF0YSkKKyAgICAgID4+PiBwdmFyaWFuY2UoZGF0YSwgbXUpCisgICAgICAxLjI1CisKKyAgIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgYXR0ZW1wdCB0byB2ZXJpZnkgdGhhdCB5b3UgaGF2ZSBwYXNzZWQgdGhlIGFjdHVhbCBtZWFuCisgICBhcyAqbXUqLiAgVXNpbmcgYXJiaXRyYXJ5IHZhbHVlcyBmb3IgKm11KiBtYXkgbGVhZCB0byBpbnZhbGlkIG9yIGltcG9zc2libGUKKyAgIHJlc3VsdHMuCisKKyAgIERlY2ltYWxzIGFuZCBGcmFjdGlvbnMgYXJlIHN1cHBvcnRlZDoKKworICAgLi4gZG9jdGVzdDo6CisKKyAgICAgID4+PiBmcm9tIGRlY2ltYWwgaW1wb3J0IERlY2ltYWwgYXMgRAorICAgICAgPj4+IHB2YXJpYW5jZShbRCgiMjcuNSIpLCBEKCIzMC4yNSIpLCBEKCIzMC4yNSIpLCBEKCIzNC41IiksIEQoIjQxLjc1IildKQorICAgICAgRGVjaW1hbCgnMjQuODE1JykKKworICAgICAgPj4+IGZyb20gZnJhY3Rpb25zIGltcG9ydCBGcmFjdGlvbiBhcyBGCisgICAgICA+Pj4gcHZhcmlhbmNlKFtGKDEsIDQpLCBGKDUsIDQpLCBGKDEsIDIpXSkKKyAgICAgIEZyYWN0aW9uKDEzLCA3MikKKworICAgLi4gbm90ZTo6CisKKyAgICAgIFdoZW4gY2FsbGVkIHdpdGggdGhlIGVudGlyZSBwb3B1bGF0aW9uLCB0aGlzIGdpdmVzIHRoZSBwb3B1bGF0aW9uIHZhcmlhbmNlCisgICAgICDPg8KyLiAgV2hlbiBjYWxsZWQgb24gYSBzYW1wbGUgaW5zdGVhZCwgdGhpcyBpcyB0aGUgYmlhc2VkIHNhbXBsZSB2YXJpYW5jZQorICAgICAgc8KyLCBhbHNvIGtub3duIGFzIHZhcmlhbmNlIHdpdGggTiBkZWdyZWVzIG9mIGZyZWVkb20uCisKKyAgICAgIElmIHlvdSBzb21laG93IGtub3cgdGhlIHRydWUgcG9wdWxhdGlvbiBtZWFuIM68LCB5b3UgbWF5IHVzZSB0aGlzIGZ1bmN0aW9uCisgICAgICB0byBjYWxjdWxhdGUgdGhlIHZhcmlhbmNlIG9mIGEgc2FtcGxlLCBnaXZpbmcgdGhlIGtub3duIHBvcHVsYXRpb24gbWVhbiBhcworICAgICAgdGhlIHNlY29uZCBhcmd1bWVudC4gIFByb3ZpZGVkIHRoZSBkYXRhIHBvaW50cyBhcmUgcmVwcmVzZW50YXRpdmUKKyAgICAgIChlLmcuIGluZGVwZW5kZW50IGFuZCBpZGVudGljYWxseSBkaXN0cmlidXRlZCksIHRoZSByZXN1bHQgd2lsbCBiZSBhbgorICAgICAgdW5iaWFzZWQgZXN0aW1hdGUgb2YgdGhlIHBvcHVsYXRpb24gdmFyaWFuY2UuCisKKworLi4gZnVuY3Rpb246OiBzdGRldihkYXRhLCB4YmFyPU5vbmUpCisKKyAgIFJldHVybiB0aGUgc2FtcGxlIHN0YW5kYXJkIGRldmlhdGlvbiAodGhlIHNxdWFyZSByb290IG9mIHRoZSBzYW1wbGUKKyAgIHZhcmlhbmNlKS4gIFNlZSA6ZnVuYzpgdmFyaWFuY2VgIGZvciBhcmd1bWVudHMgYW5kIG90aGVyIGRldGFpbHMuCisKKyAgIC4uIGRvY3Rlc3Q6OgorCisgICAgICA+Pj4gc3RkZXYoWzEuNSwgMi41LCAyLjUsIDIuNzUsIDMuMjUsIDQuNzVdKQorICAgICAgMS4wODEwODc0MTU1MjE5ODI3CisKKworLi4gZnVuY3Rpb246OiB2YXJpYW5jZShkYXRhLCB4YmFyPU5vbmUpCisKKyAgIFJldHVybiB0aGUgc2FtcGxlIHZhcmlhbmNlIG9mICpkYXRhKiwgYW4gaXRlcmFibGUgb2YgYXQgbGVhc3QgdHdvIHJlYWwtdmFsdWVkCisgICBudW1iZXJzLiAgVmFyaWFuY2UsIG9yIHNlY29uZCBtb21lbnQgYWJvdXQgdGhlIG1lYW4sIGlzIGEgbWVhc3VyZSBvZiB0aGUKKyAgIHZhcmlhYmlsaXR5IChzcHJlYWQgb3IgZGlzcGVyc2lvbikgb2YgZGF0YS4gIEEgbGFyZ2UgdmFyaWFuY2UgaW5kaWNhdGVzIHRoYXQKKyAgIHRoZSBkYXRhIGlzIHNwcmVhZCBvdXQ7IGEgc21hbGwgdmFyaWFuY2UgaW5kaWNhdGVzIGl0IGlzIGNsdXN0ZXJlZCBjbG9zZWx5CisgICBhcm91bmQgdGhlIG1lYW4uCisKKyAgIElmIHRoZSBvcHRpb25hbCBzZWNvbmQgYXJndW1lbnQgKnhiYXIqIGlzIGdpdmVuLCBpdCBzaG91bGQgYmUgdGhlIG1lYW4gb2YKKyAgICpkYXRhKi4gIElmIGl0IGlzIG1pc3Npbmcgb3IgYGBOb25lYGAgKHRoZSBkZWZhdWx0KSwgdGhlIG1lYW4gaXMKKyAgIGF1dG9tYXRpY2FsbHkgY2FsY3VsYXRlZC4KKworICAgVXNlIHRoaXMgZnVuY3Rpb24gd2hlbiB5b3VyIGRhdGEgaXMgYSBzYW1wbGUgZnJvbSBhIHBvcHVsYXRpb24uIFRvIGNhbGN1bGF0ZQorICAgdGhlIHZhcmlhbmNlIGZyb20gdGhlIGVudGlyZSBwb3B1bGF0aW9uLCBzZWUgOmZ1bmM6YHB2YXJpYW5jZWAuCisKKyAgIFJhaXNlcyA6ZXhjOmBTdGF0aXN0aWNzRXJyb3JgIGlmICpkYXRhKiBoYXMgZmV3ZXIgdGhhbiB0d28gdmFsdWVzLgorCisgICBFeGFtcGxlczoKKworICAgLi4gZG9jdGVzdDo6CisKKyAgICAgID4+PiBkYXRhID0gWzIuNzUsIDEuNzUsIDEuMjUsIDAuMjUsIDAuNSwgMS4yNSwgMy41XQorICAgICAgPj4+IHZhcmlhbmNlKGRhdGEpCisgICAgICAxLjM3MjAyMzgwOTUyMzgwOTUKKworICAgSWYgeW91IGhhdmUgYWxyZWFkeSBjYWxjdWxhdGVkIHRoZSBtZWFuIG9mIHlvdXIgZGF0YSwgeW91IGNhbiBwYXNzIGl0IGFzIHRoZQorICAgb3B0aW9uYWwgc2Vjb25kIGFyZ3VtZW50ICp4YmFyKiB0byBhdm9pZCByZWNhbGN1bGF0aW9uOgorCisgICAuLiBkb2N0ZXN0OjoKKworICAgICAgPj4+IG0gPSBtZWFuKGRhdGEpCisgICAgICA+Pj4gdmFyaWFuY2UoZGF0YSwgbSkKKyAgICAgIDEuMzcyMDIzODA5NTIzODA5NQorCisgICBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IGF0dGVtcHQgdG8gdmVyaWZ5IHRoYXQgeW91IGhhdmUgcGFzc2VkIHRoZSBhY3R1YWwgbWVhbgorICAgYXMgKnhiYXIqLiAgVXNpbmcgYXJiaXRyYXJ5IHZhbHVlcyBmb3IgKnhiYXIqIGNhbiBsZWFkIHRvIGludmFsaWQgb3IKKyAgIGltcG9zc2libGUgcmVzdWx0cy4KKworICAgRGVjaW1hbCBhbmQgRnJhY3Rpb24gdmFsdWVzIGFyZSBzdXBwb3J0ZWQ6CisKKyAgIC4uIGRvY3Rlc3Q6OgorCisgICAgICA+Pj4gZnJvbSBkZWNpbWFsIGltcG9ydCBEZWNpbWFsIGFzIEQKKyAgICAgID4+PiB2YXJpYW5jZShbRCgiMjcuNSIpLCBEKCIzMC4yNSIpLCBEKCIzMC4yNSIpLCBEKCIzNC41IiksIEQoIjQxLjc1IildKQorICAgICAgRGVjaW1hbCgnMzEuMDE4NzUnKQorCisgICAgICA+Pj4gZnJvbSBmcmFjdGlvbnMgaW1wb3J0IEZyYWN0aW9uIGFzIEYKKyAgICAgID4+PiB2YXJpYW5jZShbRigxLCA2KSwgRigxLCAyKSwgRig1LCAzKV0pCisgICAgICBGcmFjdGlvbig2NywgMTA4KQorCisgICAuLiBub3RlOjoKKworICAgICAgVGhpcyBpcyB0aGUgc2FtcGxlIHZhcmlhbmNlIHPCsiB3aXRoIEJlc3NlbCdzIGNvcnJlY3Rpb24sIGFsc28ga25vd24gYXMKKyAgICAgIHZhcmlhbmNlIHdpdGggTi0xIGRlZ3JlZXMgb2YgZnJlZWRvbS4gIFByb3ZpZGVkIHRoYXQgdGhlIGRhdGEgcG9pbnRzIGFyZQorICAgICAgcmVwcmVzZW50YXRpdmUgKGUuZy4gaW5kZXBlbmRlbnQgYW5kIGlkZW50aWNhbGx5IGRpc3RyaWJ1dGVkKSwgdGhlIHJlc3VsdAorICAgICAgc2hvdWxkIGJlIGFuIHVuYmlhc2VkIGVzdGltYXRlIG9mIHRoZSB0cnVlIHBvcHVsYXRpb24gdmFyaWFuY2UuCisKKyAgICAgIElmIHlvdSBzb21laG93IGtub3cgdGhlIGFjdHVhbCBwb3B1bGF0aW9uIG1lYW4gzrwgeW91IHNob3VsZCBwYXNzIGl0IHRvIHRoZQorICAgICAgOmZ1bmM6YHB2YXJpYW5jZWAgZnVuY3Rpb24gYXMgdGhlICptdSogcGFyYW1ldGVyIHRvIGdldCB0aGUgdmFyaWFuY2Ugb2YgYQorICAgICAgc2FtcGxlLgorCitFeGNlcHRpb25zCistLS0tLS0tLS0tCisKK0Egc2luZ2xlIGV4Y2VwdGlvbiBpcyBkZWZpbmVkOgorCisuLiBleGNlcHRpb246OiBTdGF0aXN0aWNzRXJyb3IKKworICAgU3ViY2xhc3Mgb2YgOmV4YzpgVmFsdWVFcnJvcmAgZm9yIHN0YXRpc3RpY3MtcmVsYXRlZCBleGNlcHRpb25zLgorCisuLgorICAgIyBUaGlzIG1vZGVsaW5lcyBtdXN0IGFwcGVhciB3aXRoaW4gdGhlIGxhc3QgdGVuIGxpbmVzIG9mIHRoZSBmaWxlLgorICAga2F0ZTogaW5kZW50LXdpZHRoIDM7IHJlbW92ZS10cmFpbGluZy1zcGFjZSBvbjsgcmVwbGFjZS10YWJzIG9uOyBlbmNvZGluZyB1dGYtODsKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3N0ZHR5cGVzLnJzdCBiL0RvYy9saWJyYXJ5L3N0ZHR5cGVzLnJzdAppbmRleCBhYjc4Y2RjLi40ZTc1ZTFjIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9zdGR0eXBlcy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvc3RkdHlwZXMucnN0CkBAIC0yNjksOCArMjY5LDggQEAKIDpmdW5jOmBjb21wbGV4YCBjYW4gYmUgdXNlZCB0byBwcm9kdWNlIG51bWJlcnMgb2YgYSBzcGVjaWZpYyB0eXBlLgogCiBBbGwgbnVtZXJpYyB0eXBlcyAoZXhjZXB0IGNvbXBsZXgpIHN1cHBvcnQgdGhlIGZvbGxvd2luZyBvcGVyYXRpb25zLCBzb3J0ZWQgYnkKLWFzY2VuZGluZyBwcmlvcml0eSAob3BlcmF0aW9ucyBpbiB0aGUgc2FtZSBib3ggaGF2ZSB0aGUgc2FtZSBwcmlvcml0eTsgYWxsCi1udW1lcmljIG9wZXJhdGlvbnMgaGF2ZSBhIGhpZ2hlciBwcmlvcml0eSB0aGFuIGNvbXBhcmlzb24gb3BlcmF0aW9ucyk6Cithc2NlbmRpbmcgcHJpb3JpdHkgKGFsbCBudW1lcmljIG9wZXJhdGlvbnMgaGF2ZSBhIGhpZ2hlciBwcmlvcml0eSB0aGFuCitjb21wYXJpc29uIG9wZXJhdGlvbnMpOgogCiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiB8IE9wZXJhdGlvbiAgICAgICAgICAgfCBSZXN1bHQgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTm90ZXMgICB8IEZ1bGwgZG9jdW1lbnRhdGlvbiB8CkBAIC0zNTQsNyArMzU0LDcgQEAKICAgIFRoZSBudW1lcmljIGxpdGVyYWxzIGFjY2VwdGVkIGluY2x1ZGUgdGhlIGRpZ2l0cyBgYDBgYCB0byBgYDlgYCBvciBhbnkKICAgIFVuaWNvZGUgZXF1aXZhbGVudCAoY29kZSBwb2ludHMgd2l0aCB0aGUgYGBOZGBgIHByb3BlcnR5KS4KIAotICAgU2VlIGh0dHA6Ly93d3cudW5pY29kZS5vcmcvUHVibGljLzYuMC4wL3VjZC9leHRyYWN0ZWQvRGVyaXZlZE51bWVyaWNUeXBlLnR4dAorICAgU2VlIGh0dHA6Ly93d3cudW5pY29kZS5vcmcvUHVibGljLzYuMy4wL3VjZC9leHRyYWN0ZWQvRGVyaXZlZE51bWVyaWNUeXBlLnR4dAogICAgZm9yIGEgY29tcGxldGUgbGlzdCBvZiBjb2RlIHBvaW50cyB3aXRoIHRoZSBgYE5kYGAgcHJvcGVydHkuCiAKIApAQCAtNDA0LDggKzQwNCw3IEBACiBvcGVyYXRpb25zIGFuZCBoaWdoZXIgdGhhbiB0aGUgY29tcGFyaXNvbnM7IHRoZSB1bmFyeSBvcGVyYXRpb24gYGB+YGAgaGFzIHRoZQogc2FtZSBwcmlvcml0eSBhcyB0aGUgb3RoZXIgdW5hcnkgbnVtZXJpYyBvcGVyYXRpb25zIChgYCtgYCBhbmQgYGAtYGApLgogCi1UaGlzIHRhYmxlIGxpc3RzIHRoZSBiaXR3aXNlIG9wZXJhdGlvbnMgc29ydGVkIGluIGFzY2VuZGluZyBwcmlvcml0eQotKG9wZXJhdGlvbnMgaW4gdGhlIHNhbWUgYm94IGhhdmUgdGhlIHNhbWUgcHJpb3JpdHkpOgorVGhpcyB0YWJsZSBsaXN0cyB0aGUgYml0d2lzZSBvcGVyYXRpb25zIHNvcnRlZCBpbiBhc2NlbmRpbmcgcHJpb3JpdHk6CiAKICstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSsKIHwgT3BlcmF0aW9uICB8IFJlc3VsdCAgICAgICAgICAgICAgICAgICAgICAgICB8IE5vdGVzICAgIHwKQEAgLTQ0NCw3ICs0NDMsNyBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogVGhlIGludCB0eXBlIGltcGxlbWVudHMgdGhlIDpjbGFzczpgbnVtYmVycy5JbnRlZ3JhbGAgOnRlcm06YGFic3RyYWN0IGJhc2UKLWNsYXNzYC4gSW4gYWRkaXRpb24sIGl0IHByb3ZpZGVzIG9uZSBtb3JlIG1ldGhvZDoKK2NsYXNzYC4gSW4gYWRkaXRpb24sIGl0IHByb3ZpZGVzIGEgZmV3IG1vcmUgbWV0aG9kczoKIAogLi4gbWV0aG9kOjogaW50LmJpdF9sZW5ndGgoKQogCkBAIC04MjAsMTAgKzgxOSwxMCBAQAogcHJvdmlkZWQgdG8gbWFrZSBpdCBlYXNpZXIgdG8gY29ycmVjdGx5IGltcGxlbWVudCB0aGVzZSBvcGVyYXRpb25zIG9uCiBjdXN0b20gc2VxdWVuY2UgdHlwZXMuCiAKLVRoaXMgdGFibGUgbGlzdHMgdGhlIHNlcXVlbmNlIG9wZXJhdGlvbnMgc29ydGVkIGluIGFzY2VuZGluZyBwcmlvcml0eQotKG9wZXJhdGlvbnMgaW4gdGhlIHNhbWUgYm94IGhhdmUgdGhlIHNhbWUgcHJpb3JpdHkpLiAgSW4gdGhlIHRhYmxlLCAqcyogYW5kICp0KgotYXJlIHNlcXVlbmNlcyBvZiB0aGUgc2FtZSB0eXBlLCAqbiosICppKiwgKmoqIGFuZCAqayogYXJlIGludGVnZXJzIGFuZCAqeCogaXMKLWFuIGFyYml0cmFyeSBvYmplY3QgdGhhdCBtZWV0cyBhbnkgdHlwZSBhbmQgdmFsdWUgcmVzdHJpY3Rpb25zIGltcG9zZWQgYnkgKnMqLgorVGhpcyB0YWJsZSBsaXN0cyB0aGUgc2VxdWVuY2Ugb3BlcmF0aW9ucyBzb3J0ZWQgaW4gYXNjZW5kaW5nIHByaW9yaXR5LiAgSW4gdGhlCit0YWJsZSwgKnMqIGFuZCAqdCogYXJlIHNlcXVlbmNlcyBvZiB0aGUgc2FtZSB0eXBlLCAqbiosICppKiwgKmoqIGFuZCAqayogYXJlCitpbnRlZ2VycyBhbmQgKngqIGlzIGFuIGFyYml0cmFyeSBvYmplY3QgdGhhdCBtZWV0cyBhbnkgdHlwZSBhbmQgdmFsdWUKK3Jlc3RyaWN0aW9ucyBpbXBvc2VkIGJ5ICpzKi4KIAogVGhlIGBgaW5gYCBhbmQgYGBub3QgaW5gYCBvcGVyYXRpb25zIGhhdmUgdGhlIHNhbWUgcHJpb3JpdGllcyBhcyB0aGUKIGNvbXBhcmlzb24gb3BlcmF0aW9ucy4gVGhlIGBgK2BgIChjb25jYXRlbmF0aW9uKSBhbmQgYGAqYGAgKHJlcGV0aXRpb24pCkBAIC04NTUsOCArODU0LDggQEAKIHwgYGBzICsgdGBgICAgICAgICAgICAgICAgIHwgdGhlIGNvbmNhdGVuYXRpb24gb2YgKnMqIGFuZCAgIHwgKDYpKDcpICAgfAogfCAgICAgICAgICAgICAgICAgICAgICAgICAgfCAqdCogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICB8CiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSsKLXwgYGBzICogbmBgIG9yICAgICAgICAgICAgIHwgKm4qIHNoYWxsb3cgY29waWVzIG9mICpzKiAgICAgIHwgKDIpKDcpICAgfAotfCBgYG4gKiBzYGAgICAgICAgICAgICAgICAgfCBjb25jYXRlbmF0ZWQgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICB8Cit8IGBgcyAqIG5gYCBvciAgICAgICAgICAgICB8IGVxdWl2YWxlbnQgdG8gYWRkaW5nICpzKiB0byAgICB8ICgyKSg3KSAgIHwKK3wgYGBuICogc2BgICAgICAgICAgICAgICAgIHwgaXRzZWxmICpuKiB0aW1lcyAgICAgICAgICAgICAgIHwgICAgICAgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rCiB8IGBgc1tpXWBgICAgICAgICAgICAgICAgICB8ICppKlwgdGggaXRlbSBvZiAqcyosIG9yaWdpbiAwICB8IFwoMykgICAgIHwKICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKwpAQCAtODk4LDkgKzg5Nyw5IEBACiAKICgyKQogICAgVmFsdWVzIG9mICpuKiBsZXNzIHRoYW4gYGAwYGAgYXJlIHRyZWF0ZWQgYXMgYGAwYGAgKHdoaWNoIHlpZWxkcyBhbiBlbXB0eQotICAgc2VxdWVuY2Ugb2YgdGhlIHNhbWUgdHlwZSBhcyAqcyopLiAgTm90ZSBhbHNvIHRoYXQgdGhlIGNvcGllcyBhcmUgc2hhbGxvdzsKLSAgIG5lc3RlZCBzdHJ1Y3R1cmVzIGFyZSBub3QgY29waWVkLiAgVGhpcyBvZnRlbiBoYXVudHMgbmV3IFB5dGhvbiBwcm9ncmFtbWVyczsKLSAgIGNvbnNpZGVyOjoKKyAgIHNlcXVlbmNlIG9mIHRoZSBzYW1lIHR5cGUgYXMgKnMqKS4gIE5vdGUgdGhhdCBpdGVtcyBpbiB0aGUgc2VxdWVuY2UgKnMqCisgICBhcmUgbm90IGNvcGllZDsgdGhleSBhcmUgcmVmZXJlbmNlZCBtdWx0aXBsZSB0aW1lcy4gIFRoaXMgb2Z0ZW4gaGF1bnRzCisgICBuZXcgUHl0aG9uIHByb2dyYW1tZXJzOyBjb25zaWRlcjo6CiAKICAgICAgID4+PiBsaXN0cyA9IFtbXV0gKiAzCiAgICAgICA+Pj4gbGlzdHMKQEAgLTkxMCw3ICs5MDksNyBAQAogICAgICAgW1szXSwgWzNdLCBbM11dCiAKICAgIFdoYXQgaGFzIGhhcHBlbmVkIGlzIHRoYXQgYGBbW11dYGAgaXMgYSBvbmUtZWxlbWVudCBsaXN0IGNvbnRhaW5pbmcgYW4gZW1wdHkKLSAgIGxpc3QsIHNvIGFsbCB0aHJlZSBlbGVtZW50cyBvZiBgYFtbXV0gKiAzYGAgYXJlIChwb2ludGVycyB0bykgdGhpcyBzaW5nbGUgZW1wdHkKKyAgIGxpc3QsIHNvIGFsbCB0aHJlZSBlbGVtZW50cyBvZiBgYFtbXV0gKiAzYGAgYXJlIHJlZmVyZW5jZXMgdG8gdGhpcyBzaW5nbGUgZW1wdHkKICAgIGxpc3QuICBNb2RpZnlpbmcgYW55IG9mIHRoZSBlbGVtZW50cyBvZiBgYGxpc3RzYGAgbW9kaWZpZXMgdGhpcyBzaW5nbGUgbGlzdC4KICAgIFlvdSBjYW4gY3JlYXRlIGEgbGlzdCBvZiBkaWZmZXJlbnQgbGlzdHMgdGhpcyB3YXk6OgogCkBAIC05MjEsNiArOTIwLDkgQEAKICAgICAgID4+PiBsaXN0cwogICAgICAgW1szXSwgWzVdLCBbN11dCiAKKyAgIEZ1cnRoZXIgZXhwbGFuYXRpb24gaXMgYXZhaWxhYmxlIGluIHRoZSBGQVEgZW50cnkKKyAgIDpyZWY6YGZhcS1tdWx0aWRpbWVuc2lvbmFsLWxpc3RgLgorCiAoMykKICAgIElmICppKiBvciAqaiogaXMgbmVnYXRpdmUsIHRoZSBpbmRleCBpcyByZWxhdGl2ZSB0byB0aGUgZW5kIG9mIHRoZSBzdHJpbmc6CiAgICBgYGxlbihzKSArIGlgYCBvciBgYGxlbihzKSArIGpgYCBpcyBzdWJzdGl0dXRlZC4gIEJ1dCBub3RlIHRoYXQgYGAtMGBgIGlzCkBAIC05NDksNyArOTUxLDcgQEAKICAgIHJ1bnRpbWUgY29zdCwgeW91IG11c3Qgc3dpdGNoIHRvIG9uZSBvZiB0aGUgYWx0ZXJuYXRpdmVzIGJlbG93OgogCiAgICAqIGlmIGNvbmNhdGVuYXRpbmcgOmNsYXNzOmBzdHJgIG9iamVjdHMsIHlvdSBjYW4gYnVpbGQgYSBsaXN0IGFuZCB1c2UKLSAgICAgOm1ldGg6YHN0ci5qb2luYCBhdCB0aGUgZW5kIG9yIGVsc2Ugd3JpdGUgdG8gYSA6Y2xhc3M6YGlvLlN0cmluZ0lPYAorICAgICA6bWV0aDpgc3RyLmpvaW5gIGF0IHRoZSBlbmQgb3IgZWxzZSB3cml0ZSB0byBhbiA6Y2xhc3M6YGlvLlN0cmluZ0lPYAogICAgICBpbnN0YW5jZSBhbmQgcmV0cmlldmUgaXRzIHZhbHVlIHdoZW4gY29tcGxldGUKIAogICAgKiBpZiBjb25jYXRlbmF0aW5nIDpjbGFzczpgYnl0ZXNgIG9iamVjdHMsIHlvdSBjYW4gc2ltaWxhcmx5IHVzZQpAQCAtMTA2MSwxMCArMTA2MywxNCBAQAogfCBgYHMuY29weSgpYGAgICAgICAgICAgICAgICAgIHwgY3JlYXRlcyBhIHNoYWxsb3cgY29weSBvZiBgYHNgYHwgXCg1KSAgICAgICAgICAgICAgICB8CiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoc2FtZSBhcyBgYHNbOl1gYCkgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwKICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCBgYHMuZXh0ZW5kKHQpYGAgICAgICAgICAgICAgIHwgZXh0ZW5kcyAqcyogd2l0aCB0aGUgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjb250ZW50cyBvZiAqdCogKHNhbWUgYXMgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwKK3wgYGBzLmV4dGVuZCh0KWBgIG9yICAgICAgICAgICB8IGV4dGVuZHMgKnMqIHdpdGggdGhlICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfAorfCBgYHMgKz0gdGBgICAgICAgICAgICAgICAgICAgIHwgY29udGVudHMgb2YgKnQqIChmb3IgdGhlICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBtb3N0IHBhcnQgdGhlIHNhbWUgYXMgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwKIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGBgc1tsZW4ocyk6bGVuKHMpXSA9IHRgYCkgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IGBgcyAqPSBuYGAgICAgICAgICAgICAgICAgICAgfCB1cGRhdGVzICpzKiB3aXRoIGl0cyBjb250ZW50cyAgfCBcKDYpICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHJlcGVhdGVkICpuKiB0aW1lcyAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiB8IGBgcy5pbnNlcnQoaSwgeClgYCAgICAgICAgICAgfCBpbnNlcnRzICp4KiBpbnRvICpzKiBhdCB0aGUgICAgfCAgICAgICAgICAgICAgICAgICAgIHwKIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGluZGV4IGdpdmVuIGJ5ICppKiAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfAogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKHNhbWUgYXMgYGBzW2k6aV0gPSBbeF1gYCkgICAgIHwgICAgICAgICAgICAgICAgICAgICB8CkBAIC0xMTA1LDYgKzExMTEsMTIgQEAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMwogICAgICAgOm1ldGg6YGNsZWFyYCBhbmQgOm1ldGg6YCFjb3B5YCBtZXRob2RzLgogCisoNikKKyAgIFRoZSB2YWx1ZSAqbiogaXMgYW4gaW50ZWdlciwgb3IgYW4gb2JqZWN0IGltcGxlbWVudGluZworICAgOm1ldGg6YH5vYmplY3QuX19pbmRleF9fYC4gIFplcm8gYW5kIG5lZ2F0aXZlIHZhbHVlcyBvZiAqbiogY2xlYXIKKyAgIHRoZSBzZXF1ZW5jZS4gIEl0ZW1zIGluIHRoZSBzZXF1ZW5jZSBhcmUgbm90IGNvcGllZDsgdGhleSBhcmUgcmVmZXJlbmNlZAorICAgbXVsdGlwbGUgdGltZXMsIGFzIGV4cGxhaW5lZCBmb3IgYGBzICogbmBgIHVuZGVyIDpyZWY6YHR5cGVzc2VxLWNvbW1vbmAuCisKIAogLi4gX3R5cGVzc2VxLWxpc3Q6CiAKQEAgLTE0OTMsNyArMTUwNSw5IEBACiAuLiBtZXRob2Q6OiBzdHIuY2VudGVyKHdpZHRoWywgZmlsbGNoYXJdKQogCiAgICBSZXR1cm4gY2VudGVyZWQgaW4gYSBzdHJpbmcgb2YgbGVuZ3RoICp3aWR0aCouIFBhZGRpbmcgaXMgZG9uZSB1c2luZyB0aGUKLSAgIHNwZWNpZmllZCAqZmlsbGNoYXIqIChkZWZhdWx0IGlzIGEgc3BhY2UpLgorICAgc3BlY2lmaWVkICpmaWxsY2hhciogKGRlZmF1bHQgaXMgYW4gQVNDSUkgc3BhY2UpLiBUaGUgb3JpZ2luYWwgc3RyaW5nIGlzCisgICByZXR1cm5lZCBpZiAqd2lkdGgqIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byBgYGxlbihzKWBgLgorCiAKIAogLi4gbWV0aG9kOjogc3RyLmNvdW50KHN1YlssIHN0YXJ0WywgZW5kXV0pCkBAIC0xNTExLDcgKzE1MjUsNyBAQAogICAgYSA6ZXhjOmBVbmljb2RlRXJyb3JgLiBPdGhlciBwb3NzaWJsZQogICAgdmFsdWVzIGFyZSBgYCdpZ25vcmUnYGAsIGBgJ3JlcGxhY2UnYGAsIGBgJ3htbGNoYXJyZWZyZXBsYWNlJ2BgLAogICAgYGAnYmFja3NsYXNocmVwbGFjZSdgYCBhbmQgYW55IG90aGVyIG5hbWUgcmVnaXN0ZXJlZCB2aWEKLSAgIDpmdW5jOmBjb2RlY3MucmVnaXN0ZXJfZXJyb3JgLCBzZWUgc2VjdGlvbiA6cmVmOmBjb2RlYy1iYXNlLWNsYXNzZXNgLiBGb3IgYQorICAgOmZ1bmM6YGNvZGVjcy5yZWdpc3Rlcl9lcnJvcmAsIHNlZSBzZWN0aW9uIDpyZWY6YGVycm9yLWhhbmRsZXJzYC4gRm9yIGEKICAgIGxpc3Qgb2YgcG9zc2libGUgZW5jb2RpbmdzLCBzZWUgc2VjdGlvbiA6cmVmOmBzdGFuZGFyZC1lbmNvZGluZ3NgLgogCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMQpAQCAtMTUyNiw3ICsxNTQwLDcgQEAKICAgIGF0IHRoYXQgcG9zaXRpb24uCiAKIAotLi4gbWV0aG9kOjogc3RyLmV4cGFuZHRhYnMoW3RhYnNpemVdKQorLi4gbWV0aG9kOjogc3RyLmV4cGFuZHRhYnModGFic2l6ZT04KQogCiAgICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2hlcmUgYWxsIHRhYiBjaGFyYWN0ZXJzIGFyZSByZXBsYWNlZCBieSBvbmUgb3IKICAgIG1vcmUgc3BhY2VzLCBkZXBlbmRpbmcgb24gdGhlIGN1cnJlbnQgY29sdW1uIGFuZCB0aGUgZ2l2ZW4gdGFiIHNpemUuICBUYWIKQEAgLTE1OTgsNyArMTYxMiw4IEBACiAKIC4uIG1ldGhvZDo6IHN0ci5pbmRleChzdWJbLCBzdGFydFssIGVuZF1dKQogCi0gICBMaWtlIDptZXRoOmBmaW5kYCwgYnV0IHJhaXNlIDpleGM6YFZhbHVlRXJyb3JgIHdoZW4gdGhlIHN1YnN0cmluZyBpcyBub3QgZm91bmQuCisgICBMaWtlIDptZXRoOmB+c3RyLmZpbmRgLCBidXQgcmFpc2UgOmV4YzpgVmFsdWVFcnJvcmAgd2hlbiB0aGUgc3Vic3RyaW5nIGlzCisgICBub3QgZm91bmQuCiAKIAogLi4gbWV0aG9kOjogc3RyLmlzYWxudW0oKQpAQCAtMTcwMSw5ICsxNzE2LDkgQEAKIAogLi4gbWV0aG9kOjogc3RyLmxqdXN0KHdpZHRoWywgZmlsbGNoYXJdKQogCi0gICBSZXR1cm4gdGhlIHN0cmluZyBsZWZ0IGp1c3RpZmllZCBpbiBhIHN0cmluZyBvZiBsZW5ndGggKndpZHRoKi4gUGFkZGluZyBpcyBkb25lCi0gICB1c2luZyB0aGUgc3BlY2lmaWVkICpmaWxsY2hhciogKGRlZmF1bHQgaXMgYSBzcGFjZSkuICBUaGUgb3JpZ2luYWwgc3RyaW5nIGlzCi0gICByZXR1cm5lZCBpZiAqd2lkdGgqIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byBgYGxlbihzKWBgLgorICAgUmV0dXJuIHRoZSBzdHJpbmcgbGVmdCBqdXN0aWZpZWQgaW4gYSBzdHJpbmcgb2YgbGVuZ3RoICp3aWR0aCouIFBhZGRpbmcgaXMKKyAgIGRvbmUgdXNpbmcgdGhlIHNwZWNpZmllZCAqZmlsbGNoYXIqIChkZWZhdWx0IGlzIGFuIEFTQ0lJIHNwYWNlKS4gVGhlCisgICBvcmlnaW5hbCBzdHJpbmcgaXMgcmV0dXJuZWQgaWYgKndpZHRoKiBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYGBsZW4ocylgYC4KIAogCiAuLiBtZXRob2Q6OiBzdHIubG93ZXIoKQpAQCAtMTcyMCw3ICsxNzM1LDcgQEAKICAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyB3aXRoIGxlYWRpbmcgY2hhcmFjdGVycyByZW1vdmVkLiAgVGhlICpjaGFycyoKICAgIGFyZ3VtZW50IGlzIGEgc3RyaW5nIHNwZWNpZnlpbmcgdGhlIHNldCBvZiBjaGFyYWN0ZXJzIHRvIGJlIHJlbW92ZWQuICBJZiBvbWl0dGVkCiAgICBvciBgYE5vbmVgYCwgdGhlICpjaGFycyogYXJndW1lbnQgZGVmYXVsdHMgdG8gcmVtb3Zpbmcgd2hpdGVzcGFjZS4gIFRoZSAqY2hhcnMqCi0gICBhcmd1bWVudCBpcyBub3QgYSBwcmVmaXg7IHJhdGhlciwgYWxsIGNvbWJpbmF0aW9ucyBvZiBpdHMgdmFsdWVzIGFyZSBzdHJpcHBlZDoKKyAgIGFyZ3VtZW50IGlzIG5vdCBhIHByZWZpeDsgcmF0aGVyLCBhbGwgY29tYmluYXRpb25zIG9mIGl0cyB2YWx1ZXMgYXJlIHN0cmlwcGVkOjoKIAogICAgICAgPj4+ICcgICBzcGFjaW91cyAgICcubHN0cmlwKCkKICAgICAgICdzcGFjaW91cyAgICcKQEAgLTE3NzMsOSArMTc4OCw5IEBACiAKIC4uIG1ldGhvZDo6IHN0ci5yanVzdCh3aWR0aFssIGZpbGxjaGFyXSkKIAotICAgUmV0dXJuIHRoZSBzdHJpbmcgcmlnaHQganVzdGlmaWVkIGluIGEgc3RyaW5nIG9mIGxlbmd0aCAqd2lkdGgqLiBQYWRkaW5nIGlzIGRvbmUKLSAgIHVzaW5nIHRoZSBzcGVjaWZpZWQgKmZpbGxjaGFyKiAoZGVmYXVsdCBpcyBhIHNwYWNlKS4gVGhlIG9yaWdpbmFsIHN0cmluZyBpcwotICAgcmV0dXJuZWQgaWYgKndpZHRoKiBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYGBsZW4ocylgYC4KKyAgIFJldHVybiB0aGUgc3RyaW5nIHJpZ2h0IGp1c3RpZmllZCBpbiBhIHN0cmluZyBvZiBsZW5ndGggKndpZHRoKi4gUGFkZGluZyBpcworICAgZG9uZSB1c2luZyB0aGUgc3BlY2lmaWVkICpmaWxsY2hhciogKGRlZmF1bHQgaXMgYW4gQVNDSUkgc3BhY2UpLiBUaGUKKyAgIG9yaWdpbmFsIHN0cmluZyBpcyByZXR1cm5lZCBpZiAqd2lkdGgqIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byBgYGxlbihzKWBgLgogCiAKIC4uIG1ldGhvZDo6IHN0ci5ycGFydGl0aW9uKHNlcCkKQEAgLTE4MDAsNyArMTgxNSw3IEBACiAgICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2l0aCB0cmFpbGluZyBjaGFyYWN0ZXJzIHJlbW92ZWQuICBUaGUgKmNoYXJzKgogICAgYXJndW1lbnQgaXMgYSBzdHJpbmcgc3BlY2lmeWluZyB0aGUgc2V0IG9mIGNoYXJhY3RlcnMgdG8gYmUgcmVtb3ZlZC4gIElmIG9taXR0ZWQKICAgIG9yIGBgTm9uZWBgLCB0aGUgKmNoYXJzKiBhcmd1bWVudCBkZWZhdWx0cyB0byByZW1vdmluZyB3aGl0ZXNwYWNlLiAgVGhlICpjaGFycyoKLSAgIGFyZ3VtZW50IGlzIG5vdCBhIHN1ZmZpeDsgcmF0aGVyLCBhbGwgY29tYmluYXRpb25zIG9mIGl0cyB2YWx1ZXMgYXJlIHN0cmlwcGVkOgorICAgYXJndW1lbnQgaXMgbm90IGEgc3VmZml4OyByYXRoZXIsIGFsbCBjb21iaW5hdGlvbnMgb2YgaXRzIHZhbHVlcyBhcmUgc3RyaXBwZWQ6OgogCiAgICAgICA+Pj4gJyAgIHNwYWNpb3VzICAgJy5yc3RyaXAoKQogICAgICAgJyAgIHNwYWNpb3VzJwpAQCAtMTgyMiw2ICsxODM3LDE1IEBACiAgICAoZm9yIGV4YW1wbGUsIGBgJzE8PjI8PjMnLnNwbGl0KCc8PicpYGAgcmV0dXJucyBgYFsnMScsICcyJywgJzMnXWBgKS4KICAgIFNwbGl0dGluZyBhbiBlbXB0eSBzdHJpbmcgd2l0aCBhIHNwZWNpZmllZCBzZXBhcmF0b3IgcmV0dXJucyBgYFsnJ11gYC4KIAorICAgRm9yIGV4YW1wbGU6OgorCisgICAgICA+Pj4gJzEsMiwzJy5zcGxpdCgnLCcpCisgICAgICBbJzEnLCAnMicsICczJ10KKyAgICAgID4+PiAnMSwyLDMnLnNwbGl0KCcsJywgbWF4c3BsaXQ9MSkKKyAgICAgIFsnMScsICcyLDMnXQorICAgICAgPj4+ICcxLDIsLDMsJy5zcGxpdCgnLCcpCisgICAgICBbJzEnLCAnMicsICcnLCAnMycsICcnXQorCiAgICBJZiAqc2VwKiBpcyBub3Qgc3BlY2lmaWVkIG9yIGlzIGBgTm9uZWBgLCBhIGRpZmZlcmVudCBzcGxpdHRpbmcgYWxnb3JpdGhtIGlzCiAgICBhcHBsaWVkOiBydW5zIG9mIGNvbnNlY3V0aXZlIHdoaXRlc3BhY2UgYXJlIHJlZ2FyZGVkIGFzIGEgc2luZ2xlIHNlcGFyYXRvciwKICAgIGFuZCB0aGUgcmVzdWx0IHdpbGwgY29udGFpbiBubyBlbXB0eSBzdHJpbmdzIGF0IHRoZSBzdGFydCBvciBlbmQgaWYgdGhlCkBAIC0xODI5LDggKzE4NTMsMTQgQEAKICAgIHN0cmluZyBvciBhIHN0cmluZyBjb25zaXN0aW5nIG9mIGp1c3Qgd2hpdGVzcGFjZSB3aXRoIGEgYGBOb25lYGAgc2VwYXJhdG9yCiAgICByZXR1cm5zIGBgW11gYC4KIAotICAgRm9yIGV4YW1wbGUsIGBgJyAxICAyICAgMyAgJy5zcGxpdCgpYGAgcmV0dXJucyBgYFsnMScsICcyJywgJzMnXWBgLCBhbmQKLSAgIGBgJyAgMSAgMiAgIDMgICcuc3BsaXQoTm9uZSwgMSlgYCByZXR1cm5zIGBgWycxJywgJzIgICAzICAnXWBgLgorICAgRm9yIGV4YW1wbGU6OgorCisgICAgICA+Pj4gJzEgMiAzJy5zcGxpdCgpCisgICAgICBbJzEnLCAnMicsICczJ10KKyAgICAgID4+PiAnMSAyIDMnLnNwbGl0KG1heHNwbGl0PTEpCisgICAgICBbJzEnLCAnMiAzJ10KKyAgICAgID4+PiAnICAgMSAgIDIgICAzICAgJy5zcGxpdCgpCisgICAgICBbJzEnLCAnMicsICczJ10KIAogCiAuLiBpbmRleDo6CkBAIC0xODM4LDE4ICsxODY4LDY1IEBACiAKIC4uIG1ldGhvZDo6IHN0ci5zcGxpdGxpbmVzKFtrZWVwZW5kc10pCiAKLSAgIFJldHVybiBhIGxpc3Qgb2YgdGhlIGxpbmVzIGluIHRoZSBzdHJpbmcsIGJyZWFraW5nIGF0IGxpbmUgYm91bmRhcmllcy4KLSAgIFRoaXMgbWV0aG9kIHVzZXMgdGhlIDp0ZXJtOmB1bml2ZXJzYWwgbmV3bGluZXNgIGFwcHJvYWNoIHRvIHNwbGl0dGluZyBsaW5lcy4KLSAgIExpbmUgYnJlYWtzIGFyZSBub3QgaW5jbHVkZWQgaW4gdGhlIHJlc3VsdGluZyBsaXN0IHVubGVzcyAqa2VlcGVuZHMqIGlzCi0gICBnaXZlbiBhbmQgdHJ1ZS4KKyAgIFJldHVybiBhIGxpc3Qgb2YgdGhlIGxpbmVzIGluIHRoZSBzdHJpbmcsIGJyZWFraW5nIGF0IGxpbmUgYm91bmRhcmllcy4gIExpbmUKKyAgIGJyZWFrcyBhcmUgbm90IGluY2x1ZGVkIGluIHRoZSByZXN1bHRpbmcgbGlzdCB1bmxlc3MgKmtlZXBlbmRzKiBpcyBnaXZlbiBhbmQKKyAgIHRydWUuCiAKLSAgIEZvciBleGFtcGxlLCBgYCdhYiBjXG5cbmRlIGZnXHJrbFxyXG4nLnNwbGl0bGluZXMoKWBgIHJldHVybnMKLSAgIGBgWydhYiBjJywgJycsICdkZSBmZycsICdrbCddYGAsIHdoaWxlIHRoZSBzYW1lIGNhbGwgd2l0aCBgYHNwbGl0bGluZXMoVHJ1ZSlgYAotICAgcmV0dXJucyBgYFsnYWIgY1xuJywgJ1xuJywgJ2RlIGZnXHInLCAna2xcclxuJ11gYC4KKyAgIFRoaXMgbWV0aG9kIHNwbGl0cyBvbiB0aGUgZm9sbG93aW5nIGxpbmUgYm91bmRhcmllcy4gIEluIHBhcnRpY3VsYXIsIHRoZQorICAgYm91bmRhcmllcyBhcmUgYSBzdXBlcnNldCBvZiA6dGVybTpgdW5pdmVyc2FsIG5ld2xpbmVzYC4KKworICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCBSZXByZXNlbnRhdGlvbiAgICAgICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgfAorICAgKz09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09KworICAgfCBgYFxuYGAgICAgICAgICAgICAgICAgfCBMaW5lIEZlZWQgICAgICAgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCBgYFxyYGAgICAgICAgICAgICAgICAgfCBDYXJyaWFnZSBSZXR1cm4gICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCBgYFxyXG5gYCAgICAgICAgICAgICAgfCBDYXJyaWFnZSBSZXR1cm4gKyBMaW5lIEZlZWQgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCBgYFx2YGAgb3IgYGBceDBiYGAgICAgfCBMaW5lIFRhYnVsYXRpb24gICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCBgYFxmYGAgb3IgYGBceDBjYGAgICAgfCBGb3JtIEZlZWQgICAgICAgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCBgYFx4MWNgYCAgICAgICAgICAgICAgfCBGaWxlIFNlcGFyYXRvciAgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCBgYFx4MWRgYCAgICAgICAgICAgICAgfCBHcm91cCBTZXBhcmF0b3IgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCBgYFx4MWVgYCAgICAgICAgICAgICAgfCBSZWNvcmQgU2VwYXJhdG9yICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCBgYFx4ODVgYCAgICAgICAgICAgICAgfCBOZXh0IExpbmUgKEMxIENvbnRyb2wgQ29kZSkgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCBgYFx1MjAyOGBgICAgICAgICAgICAgfCBMaW5lIFNlcGFyYXRvciAgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCBgYFx1MjAyOWBgICAgICAgICAgICAgfCBQYXJhZ3JhcGggU2VwYXJhdG9yICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgorCisgICAgICBgYFx2YGAgYW5kIGBgXGZgYCBhZGRlZCB0byBsaXN0IG9mIGxpbmUgYm91bmRhcmllcy4KKworICAgRm9yIGV4YW1wbGU6OgorCisgICAgICA+Pj4gJ2FiIGNcblxuZGUgZmdccmtsXHJcbicuc3BsaXRsaW5lcygpCisgICAgICBbJ2FiIGMnLCAnJywgJ2RlIGZnJywgJ2tsJ10KKyAgICAgID4+PiAnYWIgY1xuXG5kZSBmZ1xya2xcclxuJy5zcGxpdGxpbmVzKGtlZXBlbmRzPVRydWUpCisgICAgICBbJ2FiIGNcbicsICdcbicsICdkZSBmZ1xyJywgJ2tsXHJcbiddCiAKICAgIFVubGlrZSA6bWV0aDpgfnN0ci5zcGxpdGAgd2hlbiBhIGRlbGltaXRlciBzdHJpbmcgKnNlcCogaXMgZ2l2ZW4sIHRoaXMKICAgIG1ldGhvZCByZXR1cm5zIGFuIGVtcHR5IGxpc3QgZm9yIHRoZSBlbXB0eSBzdHJpbmcsIGFuZCBhIHRlcm1pbmFsIGxpbmUKLSAgIGJyZWFrIGRvZXMgbm90IHJlc3VsdCBpbiBhbiBleHRyYSBsaW5lLgorICAgYnJlYWsgZG9lcyBub3QgcmVzdWx0IGluIGFuIGV4dHJhIGxpbmU6OgorCisgICAgICA+Pj4gIiIuc3BsaXRsaW5lcygpCisgICAgICBbXQorICAgICAgPj4+ICJPbmUgbGluZVxuIi5zcGxpdGxpbmVzKCkKKyAgICAgIFsnT25lIGxpbmUnXQorCisgICBGb3IgY29tcGFyaXNvbiwgYGBzcGxpdCgnXG4nKWBgIGdpdmVzOjoKKworICAgICAgPj4+ICcnLnNwbGl0KCdcbicpCisgICAgICBbJyddCisgICAgICA+Pj4gJ1R3byBsaW5lc1xuJy5zcGxpdCgnXG4nKQorICAgICAgWydUd28gbGluZXMnLCAnJ10KIAogCiAuLiBtZXRob2Q6OiBzdHIuc3RhcnRzd2l0aChwcmVmaXhbLCBzdGFydFssIGVuZF1dKQpAQCAtMTg2Niw3ICsxOTQzLDcgQEAKICAgIFRoZSAqY2hhcnMqIGFyZ3VtZW50IGlzIGEgc3RyaW5nIHNwZWNpZnlpbmcgdGhlIHNldCBvZiBjaGFyYWN0ZXJzIHRvIGJlIHJlbW92ZWQuCiAgICBJZiBvbWl0dGVkIG9yIGBgTm9uZWBgLCB0aGUgKmNoYXJzKiBhcmd1bWVudCBkZWZhdWx0cyB0byByZW1vdmluZyB3aGl0ZXNwYWNlLgogICAgVGhlICpjaGFycyogYXJndW1lbnQgaXMgbm90IGEgcHJlZml4IG9yIHN1ZmZpeDsgcmF0aGVyLCBhbGwgY29tYmluYXRpb25zIG9mIGl0cwotICAgdmFsdWVzIGFyZSBzdHJpcHBlZDoKKyAgIHZhbHVlcyBhcmUgc3RyaXBwZWQ6OgogCiAgICAgICA+Pj4gJyAgIHNwYWNpb3VzICAgJy5zdHJpcCgpCiAgICAgICAnc3BhY2lvdXMnCkBAIC0xODg2LDYgKzE5NjMsMTEgQEAKICAgIFJldHVybiBhIHRpdGxlY2FzZWQgdmVyc2lvbiBvZiB0aGUgc3RyaW5nIHdoZXJlIHdvcmRzIHN0YXJ0IHdpdGggYW4gdXBwZXJjYXNlCiAgICBjaGFyYWN0ZXIgYW5kIHRoZSByZW1haW5pbmcgY2hhcmFjdGVycyBhcmUgbG93ZXJjYXNlLgogCisgICBGb3IgZXhhbXBsZTo6CisKKyAgICAgID4+PiAnSGVsbG8gd29ybGQnLnRpdGxlKCkKKyAgICAgICdIZWxsbyBXb3JsZCcKKwogICAgVGhlIGFsZ29yaXRobSB1c2VzIGEgc2ltcGxlIGxhbmd1YWdlLWluZGVwZW5kZW50IGRlZmluaXRpb24gb2YgYSB3b3JkIGFzCiAgICBncm91cHMgb2YgY29uc2VjdXRpdmUgbGV0dGVycy4gIFRoZSBkZWZpbml0aW9uIHdvcmtzIGluIG1hbnkgY29udGV4dHMgYnV0CiAgICBpdCBtZWFucyB0aGF0IGFwb3N0cm9waGVzIGluIGNvbnRyYWN0aW9ucyBhbmQgcG9zc2Vzc2l2ZXMgZm9ybSB3b3JkCkBAIC0xOTA3LDIxICsxOTg5LDIyIEBACiAgICAgICAgICJUaGV5J3JlIEJpbGwncyBGcmllbmRzLiIKIAogCi0uLiBtZXRob2Q6OiBzdHIudHJhbnNsYXRlKG1hcCkKKy4uIG1ldGhvZDo6IHN0ci50cmFuc2xhdGUodGFibGUpCiAKLSAgIFJldHVybiBhIGNvcHkgb2YgdGhlICpzKiB3aGVyZSBhbGwgY2hhcmFjdGVycyBoYXZlIGJlZW4gbWFwcGVkIHRocm91Z2ggdGhlCi0gICAqbWFwKiB3aGljaCBtdXN0IGJlIGEgZGljdGlvbmFyeSBvZiBVbmljb2RlIG9yZGluYWxzIChpbnRlZ2VycykgdG8gVW5pY29kZQotICAgb3JkaW5hbHMsIHN0cmluZ3Mgb3IgYGBOb25lYGAuICBVbm1hcHBlZCBjaGFyYWN0ZXJzIGFyZSBsZWZ0IHVudG91Y2hlZC4KLSAgIENoYXJhY3RlcnMgbWFwcGVkIHRvIGBgTm9uZWBgIGFyZSBkZWxldGVkLgorICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIGluIHdoaWNoIGVhY2ggY2hhcmFjdGVyIGhhcyBiZWVuIG1hcHBlZCB0aHJvdWdoCisgICB0aGUgZ2l2ZW4gdHJhbnNsYXRpb24gdGFibGUuICBUaGUgdGFibGUgbXVzdCBiZSBhbiBvYmplY3QgdGhhdCBpbXBsZW1lbnRzCisgICBpbmRleGluZyB2aWEgOm1ldGg6YF9fZ2V0aXRlbV9fYCwgdHlwaWNhbGx5IGEgOnRlcm06YG1hcHBpbmdgIG9yCisgICA6dGVybTpgc2VxdWVuY2VgLiAgV2hlbiBpbmRleGVkIGJ5IGEgVW5pY29kZSBvcmRpbmFsIChhbiBpbnRlZ2VyKSwgdGhlCisgICB0YWJsZSBvYmplY3QgY2FuIGRvIGFueSBvZiB0aGUgZm9sbG93aW5nOiByZXR1cm4gYSBVbmljb2RlIG9yZGluYWwgb3IgYQorICAgc3RyaW5nLCB0byBtYXAgdGhlIGNoYXJhY3RlciB0byBvbmUgb3IgbW9yZSBvdGhlciBjaGFyYWN0ZXJzOyByZXR1cm4KKyAgIGBgTm9uZWBgLCB0byBkZWxldGUgdGhlIGNoYXJhY3RlciBmcm9tIHRoZSByZXR1cm4gc3RyaW5nOyBvciByYWlzZSBhCisgICA6ZXhjOmBMb29rdXBFcnJvcmAgZXhjZXB0aW9uLCB0byBtYXAgdGhlIGNoYXJhY3RlciB0byBpdHNlbGYuCiAKICAgIFlvdSBjYW4gdXNlIDptZXRoOmBzdHIubWFrZXRyYW5zYCB0byBjcmVhdGUgYSB0cmFuc2xhdGlvbiBtYXAgZnJvbQogICAgY2hhcmFjdGVyLXRvLWNoYXJhY3RlciBtYXBwaW5ncyBpbiBkaWZmZXJlbnQgZm9ybWF0cy4KIAotICAgLi4gbm90ZTo6Ci0KLSAgICAgIEFuIGV2ZW4gbW9yZSBmbGV4aWJsZSBhcHByb2FjaCBpcyB0byBjcmVhdGUgYSBjdXN0b20gY2hhcmFjdGVyIG1hcHBpbmcKLSAgICAgIGNvZGVjIHVzaW5nIHRoZSA6bW9kOmBjb2RlY3NgIG1vZHVsZSAoc2VlIDptb2Q6YGVuY29kaW5ncy5jcDEyNTFgIGZvciBhbgotICAgICAgZXhhbXBsZSkuCisgICBTZWUgYWxzbyB0aGUgOm1vZDpgY29kZWNzYCBtb2R1bGUgZm9yIGEgbW9yZSBmbGV4aWJsZSBhcHByb2FjaCB0byBjdXN0b20KKyAgIGNoYXJhY3RlciBtYXBwaW5ncy4KIAogCiAuLiBtZXRob2Q6OiBzdHIudXBwZXIoKQpAQCAtMTkzOCw5ICsyMDIxLDE4IEBACiAKIC4uIG1ldGhvZDo6IHN0ci56ZmlsbCh3aWR0aCkKIAotICAgUmV0dXJuIHRoZSBudW1lcmljIHN0cmluZyBsZWZ0IGZpbGxlZCB3aXRoIHplcm9zIGluIGEgc3RyaW5nIG9mIGxlbmd0aAotICAgKndpZHRoKi4gIEEgc2lnbiBwcmVmaXggaXMgaGFuZGxlZCBjb3JyZWN0bHkuICBUaGUgb3JpZ2luYWwgc3RyaW5nIGlzCi0gICByZXR1cm5lZCBpZiAqd2lkdGgqIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byBgYGxlbihzKWBgLgorICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIGxlZnQgZmlsbGVkIHdpdGggQVNDSUkgYGAnMCdgYCBkaWdpdHMgdG8KKyAgIG1ha2UgYSBzdHJpbmcgb2YgbGVuZ3RoICp3aWR0aCouIEEgbGVhZGluZyBzaWduIHByZWZpeCAoYGAnKydgYC9gYCctJ2BgKQorICAgaXMgaGFuZGxlZCBieSBpbnNlcnRpbmcgdGhlIHBhZGRpbmcgKmFmdGVyKiB0aGUgc2lnbiBjaGFyYWN0ZXIgcmF0aGVyCisgICB0aGFuIGJlZm9yZS4gVGhlIG9yaWdpbmFsIHN0cmluZyBpcyByZXR1cm5lZCBpZiAqd2lkdGgqIGlzIGxlc3MgdGhhbgorICAgb3IgZXF1YWwgdG8gYGBsZW4ocylgYC4KKworICAgRm9yIGV4YW1wbGU6OgorCisgICAgICA+Pj4gIjQyIi56ZmlsbCg1KQorICAgICAgJzAwMDQyJworICAgICAgPj4+ICItNDIiLnpmaWxsKDUpCisgICAgICAnLTAwNDInCiAKIAogCkBAIC0yMTk4LDE2ICsyMjkwLDI4IEBACiAKIEFsc28gc2VlIHRoZSA6cmVmOmBieXRlcyA8ZnVuYy1ieXRlcz5gIGJ1aWx0LWluLgogCi1TaW5jZSBieXRlcyBvYmplY3RzIGFyZSBzZXF1ZW5jZXMgb2YgaW50ZWdlcnMsIGZvciBhIGJ5dGVzIG9iamVjdCAqYiosCi1gYGJbMF1gYCB3aWxsIGJlIGFuIGludGVnZXIsIHdoaWxlIGBgYlswOjFdYGAgd2lsbCBiZSBhIGJ5dGVzIG9iamVjdCBvZgotbGVuZ3RoIDEuICAoVGhpcyBjb250cmFzdHMgd2l0aCB0ZXh0IHN0cmluZ3MsIHdoZXJlIGJvdGggaW5kZXhpbmcgYW5kCi1zbGljaW5nIHdpbGwgcHJvZHVjZSBhIHN0cmluZyBvZiBsZW5ndGggMSkKK1NpbmNlIDIgaGV4YWRlY2ltYWwgZGlnaXRzIGNvcnJlc3BvbmQgcHJlY2lzZWx5IHRvIGEgc2luZ2xlIGJ5dGUsIGhleGFkZWNpbWFsCitudW1iZXJzIGFyZSBhIGNvbW1vbmx5IHVzZWQgZm9ybWF0IGZvciBkZXNjcmliaW5nIGJpbmFyeSBkYXRhLiBBY2NvcmRpbmdseSwKK3RoZSBieXRlcyB0eXBlIGhhcyBhbiBhZGRpdGlvbmFsIGNsYXNzIG1ldGhvZCB0byByZWFkIGRhdGEgaW4gdGhhdCBmb3JtYXQ6CisKKy4uIGNsYXNzbWV0aG9kOjogYnl0ZXMuZnJvbWhleChzdHJpbmcpCisKKyAgIFRoaXMgOmNsYXNzOmBieXRlc2AgY2xhc3MgbWV0aG9kIHJldHVybnMgYSBieXRlcyBvYmplY3QsIGRlY29kaW5nIHRoZQorICAgZ2l2ZW4gc3RyaW5nIG9iamVjdC4gIFRoZSBzdHJpbmcgbXVzdCBjb250YWluIHR3byBoZXhhZGVjaW1hbCBkaWdpdHMgcGVyCisgICBieXRlLCB3aXRoIEFTQ0lJIHNwYWNlcyBiZWluZyBpZ25vcmVkLgorCisgICA+Pj4gYnl0ZXMuZnJvbWhleCgnMkVmMCBGMWYyICAnKQorICAgYicuXHhmMFx4ZjFceGYyJworCitTaW5jZSBieXRlcyBvYmplY3RzIGFyZSBzZXF1ZW5jZXMgb2YgaW50ZWdlcnMgKGFraW4gdG8gYSB0dXBsZSksIGZvciBhIGJ5dGVzCitvYmplY3QgKmIqLCBgYGJbMF1gYCB3aWxsIGJlIGFuIGludGVnZXIsIHdoaWxlIGBgYlswOjFdYGAgd2lsbCBiZSBhIGJ5dGVzCitvYmplY3Qgb2YgbGVuZ3RoIDEuICAoVGhpcyBjb250cmFzdHMgd2l0aCB0ZXh0IHN0cmluZ3MsIHdoZXJlIGJvdGggaW5kZXhpbmcKK2FuZCBzbGljaW5nIHdpbGwgcHJvZHVjZSBhIHN0cmluZyBvZiBsZW5ndGggMSkKIAogVGhlIHJlcHJlc2VudGF0aW9uIG9mIGJ5dGVzIG9iamVjdHMgdXNlcyB0aGUgbGl0ZXJhbCBmb3JtYXQgKGBgYicuLi4nYGApCiBzaW5jZSBpdCBpcyBvZnRlbiBtb3JlIHVzZWZ1bCB0aGFuIGUuZy4gYGBieXRlcyhbNDYsIDQ2LCA0Nl0pYGAuICBZb3UgY2FuCiBhbHdheXMgY29udmVydCBhIGJ5dGVzIG9iamVjdCBpbnRvIGEgbGlzdCBvZiBpbnRlZ2VycyB1c2luZyBgYGxpc3QoYilgYC4KIAotCiAuLiBub3RlOjoKICAgIEZvciBQeXRob24gMi54IHVzZXJzOiBJbiB0aGUgUHl0aG9uIDIueCBzZXJpZXMsIGEgdmFyaWV0eSBvZiBpbXBsaWNpdAogICAgY29udmVyc2lvbnMgYmV0d2VlbiA4LWJpdCBzdHJpbmdzICh0aGUgY2xvc2VzdCB0aGluZyAyLnggb2ZmZXJzIHRvIGEKQEAgLTIyNDEsNiArMjM0NSwyOSBAQAogCiBBbHNvIHNlZSB0aGUgOnJlZjpgYnl0ZWFycmF5IDxmdW5jLWJ5dGVhcnJheT5gIGJ1aWx0LWluLgogCitTaW5jZSAyIGhleGFkZWNpbWFsIGRpZ2l0cyBjb3JyZXNwb25kIHByZWNpc2VseSB0byBhIHNpbmdsZSBieXRlLCBoZXhhZGVjaW1hbAorbnVtYmVycyBhcmUgYSBjb21tb25seSB1c2VkIGZvcm1hdCBmb3IgZGVzY3JpYmluZyBiaW5hcnkgZGF0YS4gQWNjb3JkaW5nbHksCit0aGUgYnl0ZWFycmF5IHR5cGUgaGFzIGFuIGFkZGl0aW9uYWwgY2xhc3MgbWV0aG9kIHRvIHJlYWQgZGF0YSBpbiB0aGF0IGZvcm1hdDoKKworLi4gY2xhc3NtZXRob2Q6OiBieXRlYXJyYXkuZnJvbWhleChzdHJpbmcpCisKKyAgIFRoaXMgOmNsYXNzOmBieXRlYXJyYXlgIGNsYXNzIG1ldGhvZCByZXR1cm5zIGJ5dGVhcnJheSBvYmplY3QsIGRlY29kaW5nCisgICB0aGUgZ2l2ZW4gc3RyaW5nIG9iamVjdC4gIFRoZSBzdHJpbmcgbXVzdCBjb250YWluIHR3byBoZXhhZGVjaW1hbCBkaWdpdHMKKyAgIHBlciBieXRlLCB3aXRoIEFTQ0lJIHNwYWNlcyBiZWluZyBpZ25vcmVkLgorCisgICA+Pj4gYnl0ZWFycmF5LmZyb21oZXgoJzJFZjAgRjFmMiAgJykKKyAgIGJ5dGVhcnJheShiJy5ceGYwXHhmMVx4ZjInKQorCitTaW5jZSBieXRlYXJyYXkgb2JqZWN0cyBhcmUgc2VxdWVuY2VzIG9mIGludGVnZXJzIChha2luIHRvIGEgbGlzdCksIGZvciBhCitieXRlYXJyYXkgb2JqZWN0ICpiKiwgYGBiWzBdYGAgd2lsbCBiZSBhbiBpbnRlZ2VyLCB3aGlsZSBgYGJbMDoxXWBgIHdpbGwgYmUKK2EgYnl0ZWFycmF5IG9iamVjdCBvZiBsZW5ndGggMS4gIChUaGlzIGNvbnRyYXN0cyB3aXRoIHRleHQgc3RyaW5ncywgd2hlcmUKK2JvdGggaW5kZXhpbmcgYW5kIHNsaWNpbmcgd2lsbCBwcm9kdWNlIGEgc3RyaW5nIG9mIGxlbmd0aCAxKQorCitUaGUgcmVwcmVzZW50YXRpb24gb2YgYnl0ZWFycmF5IG9iamVjdHMgdXNlcyB0aGUgYnl0ZXMgbGl0ZXJhbCBmb3JtYXQKKyhgYGJ5dGVhcnJheShiJy4uLicpYGApIHNpbmNlIGl0IGlzIG9mdGVuIG1vcmUgdXNlZnVsIHRoYW4gZS5nLgorYGBieXRlYXJyYXkoWzQ2LCA0NiwgNDZdKWBgLiAgWW91IGNhbiBhbHdheXMgY29udmVydCBhIGJ5dGVhcnJheSBvYmplY3QgaW50bworYSBsaXN0IG9mIGludGVnZXJzIHVzaW5nIGBgbGlzdChiKWBgLgorCiAKIC4uIF9ieXRlcy1tZXRob2RzOgogCkBAIC0yMjUyLDI1ICsyMzc5LDEwIEBACiAKIEJvdGggYnl0ZXMgYW5kIGJ5dGVhcnJheSBvYmplY3RzIHN1cHBvcnQgdGhlIDpyZWY6YGNvbW1vbiA8dHlwZXNzZXEtY29tbW9uPmAKIHNlcXVlbmNlIG9wZXJhdGlvbnMuIFRoZXkgaW50ZXJvcGVyYXRlIG5vdCBqdXN0IHdpdGggb3BlcmFuZHMgb2YgdGhlIHNhbWUKLXR5cGUsIGJ1dCB3aXRoIGFueSBvYmplY3QgdGhhdCBzdXBwb3J0cyB0aGUKLTpyZWY6YGJ1ZmZlciBwcm90b2NvbCA8YnVmZmVyb2JqZWN0cz5gLiBEdWUgdG8gdGhpcyBmbGV4aWJpbGl0eSwgdGhleSBjYW4gYmUKK3R5cGUsIGJ1dCB3aXRoIGFueSA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgLiBEdWUgdG8gdGhpcyBmbGV4aWJpbGl0eSwgdGhleSBjYW4gYmUKIGZyZWVseSBtaXhlZCBpbiBvcGVyYXRpb25zIHdpdGhvdXQgY2F1c2luZyBlcnJvcnMuIEhvd2V2ZXIsIHRoZSByZXR1cm4gdHlwZQogb2YgdGhlIHJlc3VsdCBtYXkgZGVwZW5kIG9uIHRoZSBvcmRlciBvZiBvcGVyYW5kcy4KIAotRHVlIHRvIHRoZSBjb21tb24gdXNlIG9mIEFTQ0lJIHRleHQgYXMgdGhlIGJhc2lzIGZvciBiaW5hcnkgcHJvdG9jb2xzLCBieXRlcwotYW5kIGJ5dGVhcnJheSBvYmplY3RzIHByb3ZpZGUgYWxtb3N0IGFsbCBtZXRob2RzIGZvdW5kIG9uIHRleHQgc3RyaW5ncywgd2l0aAotdGhlIGV4Y2VwdGlvbnMgb2Y6Ci0KLSogOm1ldGg6YHN0ci5lbmNvZGVgICh3aGljaCBjb252ZXJ0cyB0ZXh0IHN0cmluZ3MgdG8gYnl0ZXMgb2JqZWN0cykKLSogOm1ldGg6YHN0ci5mb3JtYXRgIGFuZCA6bWV0aDpgc3RyLmZvcm1hdF9tYXBgICh3aGljaCBhcmUgdXNlZCB0byBmb3JtYXQKLSAgdGV4dCBmb3IgZGlzcGxheSB0byB1c2VycykKLSogOm1ldGg6YHN0ci5pc2lkZW50aWZpZXJgLCA6bWV0aDpgc3RyLmlzbnVtZXJpY2AsIDptZXRoOmBzdHIuaXNkZWNpbWFsYCwKLSAgOm1ldGg6YHN0ci5pc3ByaW50YWJsZWAgKHdoaWNoIGFyZSB1c2VkIHRvIGNoZWNrIHZhcmlvdXMgcHJvcGVydGllcyBvZgotICB0ZXh0IHN0cmluZ3Mgd2hpY2ggYXJlIG5vdCB0eXBpY2FsbHkgYXBwbGljYWJsZSB0byBiaW5hcnkgcHJvdG9jb2xzKS4KLQotQWxsIG90aGVyIHN0cmluZyBtZXRob2RzIGFyZSBzdXBwb3J0ZWQsIGFsdGhvdWdoIHNvbWV0aW1lcyB3aXRoIHNsaWdodAotZGlmZmVyZW5jZXMgaW4gZnVuY3Rpb25hbGl0eSBhbmQgc2VtYW50aWNzIChhcyBkZXNjcmliZWQgYmVsb3cpLgotCiAuLiBub3RlOjoKIAogICAgVGhlIG1ldGhvZHMgb24gYnl0ZXMgYW5kIGJ5dGVhcnJheSBvYmplY3RzIGRvbid0IGFjY2VwdCBzdHJpbmdzIGFzIHRoZWlyCkBAIC0yMjg1LDI1ICsyMzk3LDMwIEBACiAgICAgICBhID0gYiJhYmMiCiAgICAgICBiID0gYS5yZXBsYWNlKGIiYSIsIGIiZiIpCiAKLVdoZW5ldmVyIGEgYnl0ZXMgb3IgYnl0ZWFycmF5IG1ldGhvZCBuZWVkcyB0byBpbnRlcnByZXQgdGhlIGJ5dGVzIGFzCi1jaGFyYWN0ZXJzIChlLmcuIHRoZSA6bWV0aDpgaXMuLi5gIG1ldGhvZHMsIDptZXRoOmBzcGxpdGAsIDptZXRoOmBzdHJpcGApLAotdGhlIEFTQ0lJIGNoYXJhY3RlciBzZXQgaXMgYXNzdW1lZCAodGV4dCBzdHJpbmdzIHVzZSBVbmljb2RlIHNlbWFudGljcykuCitTb21lIGJ5dGVzIGFuZCBieXRlYXJyYXkgb3BlcmF0aW9ucyBhc3N1bWUgdGhlIHVzZSBvZiBBU0NJSSBjb21wYXRpYmxlCitiaW5hcnkgZm9ybWF0cywgYW5kIGhlbmNlIHNob3VsZCBiZSBhdm9pZGVkIHdoZW4gd29ya2luZyB3aXRoIGFyYml0cmFyeQorYmluYXJ5IGRhdGEuIFRoZXNlIHJlc3RyaWN0aW9ucyBhcmUgY292ZXJlZCBiZWxvdy4KIAogLi4gbm90ZTo6Ci0gICBVc2luZyB0aGVzZSBBU0NJSSBiYXNlZCBtZXRob2RzIHRvIG1hbmlwdWxhdGUgYmluYXJ5IGRhdGEgdGhhdCBpcyBub3QKKyAgIFVzaW5nIHRoZXNlIEFTQ0lJIGJhc2VkIG9wZXJhdGlvbnMgdG8gbWFuaXB1bGF0ZSBiaW5hcnkgZGF0YSB0aGF0IGlzIG5vdAogICAgc3RvcmVkIGluIGFuIEFTQ0lJIGJhc2VkIGZvcm1hdCBtYXkgbGVhZCB0byBkYXRhIGNvcnJ1cHRpb24uCiAKLVRoZSBzZWFyY2ggb3BlcmF0aW9ucyAoOmtleXdvcmQ6YGluYCwgOm1ldGg6YGNvdW50YCwgOm1ldGg6YGZpbmRgLAotOm1ldGg6YGluZGV4YCwgOm1ldGg6YHJmaW5kYCBhbmQgOm1ldGg6YHJpbmRleGApIGFsbCBhY2NlcHQgYm90aCBpbnRlZ2VycwotaW4gdGhlIHJhbmdlIDAgdG8gMjU1IChpbmNsdXNpdmUpIGFzIHdlbGwgYXMgYnl0ZXMgYW5kIGJ5dGUgYXJyYXkgc2VxdWVuY2VzLgorVGhlIGZvbGxvd2luZyBtZXRob2RzIG9uIGJ5dGVzIGFuZCBieXRlYXJyYXkgb2JqZWN0cyBjYW4gYmUgdXNlZCB3aXRoCithcmJpdHJhcnkgYmluYXJ5IGRhdGEuCiAKLS4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCi0gICBBbGwgb2YgdGhlIHNlYXJjaCBtZXRob2RzIGFsc28gYWNjZXB0IGFuIGludGVnZXIgaW4gdGhlIHJhbmdlIDAgdG8gMjU1Ci0gICAoaW5jbHVzaXZlKSBhcyB0aGVpciBmaXJzdCBhcmd1bWVudC4KKy4uIG1ldGhvZDo6IGJ5dGVzLmNvdW50KHN1YlssIHN0YXJ0WywgZW5kXV0pCisgICAgICAgICAgICBieXRlYXJyYXkuY291bnQoc3ViWywgc3RhcnRbLCBlbmRdXSkKIAorICAgUmV0dXJuIHRoZSBudW1iZXIgb2Ygbm9uLW92ZXJsYXBwaW5nIG9jY3VycmVuY2VzIG9mIHN1YnNlcXVlbmNlICpzdWIqIGluCisgICB0aGUgcmFuZ2UgWypzdGFydCosICplbmQqXS4gIE9wdGlvbmFsIGFyZ3VtZW50cyAqc3RhcnQqIGFuZCAqZW5kKiBhcmUKKyAgIGludGVycHJldGVkIGFzIGluIHNsaWNlIG5vdGF0aW9uLgogCi1FYWNoIGJ5dGVzIGFuZCBieXRlYXJyYXkgaW5zdGFuY2UgcHJvdmlkZXMgYSA6bWV0aDpgfmJ5dGVzLmRlY29kZWAgY29udmVuaWVuY2UKLW1ldGhvZCB0aGF0IGlzIHRoZSBpbnZlcnNlIG9mIDptZXRoOmBzdHIuZW5jb2RlYDoKKyAgIFRoZSBzdWJzZXF1ZW5jZSB0byBzZWFyY2ggZm9yIG1heSBiZSBhbnkgOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0YCBvciBhbgorICAgaW50ZWdlciBpbiB0aGUgcmFuZ2UgMCB0byAyNTUuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCisgICAgICBBbHNvIGFjY2VwdCBhbiBpbnRlZ2VyIGluIHRoZSByYW5nZSAwIHRvIDI1NSBhcyB0aGUgc3Vic2VxdWVuY2UuCisKIAogLi4gbWV0aG9kOjogYnl0ZXMuZGVjb2RlKGVuY29kaW5nPSJ1dGYtOCIsIGVycm9ycz0ic3RyaWN0IikKICAgICAgICAgICAgIGJ5dGVhcnJheS5kZWNvZGUoZW5jb2Rpbmc9InV0Zi04IiwgZXJyb3JzPSJzdHJpY3QiKQpAQCAtMjMxMyw0MCArMjQzMCwxNzggQEAKICAgIGVycm9yIGhhbmRsaW5nIHNjaGVtZS4gIFRoZSBkZWZhdWx0IGZvciAqZXJyb3JzKiBpcyBgYCdzdHJpY3QnYGAsIG1lYW5pbmcKICAgIHRoYXQgZW5jb2RpbmcgZXJyb3JzIHJhaXNlIGEgOmV4YzpgVW5pY29kZUVycm9yYC4gIE90aGVyIHBvc3NpYmxlIHZhbHVlcyBhcmUKICAgIGBgJ2lnbm9yZSdgYCwgYGAncmVwbGFjZSdgYCBhbmQgYW55IG90aGVyIG5hbWUgcmVnaXN0ZXJlZCB2aWEKLSAgIDpmdW5jOmBjb2RlY3MucmVnaXN0ZXJfZXJyb3JgLCBzZWUgc2VjdGlvbiA6cmVmOmBjb2RlYy1iYXNlLWNsYXNzZXNgLiBGb3IgYQorICAgOmZ1bmM6YGNvZGVjcy5yZWdpc3Rlcl9lcnJvcmAsIHNlZSBzZWN0aW9uIDpyZWY6YGVycm9yLWhhbmRsZXJzYC4gRm9yIGEKICAgIGxpc3Qgb2YgcG9zc2libGUgZW5jb2RpbmdzLCBzZWUgc2VjdGlvbiA6cmVmOmBzdGFuZGFyZC1lbmNvZGluZ3NgLgogCisgICAuLiBub3RlOjoKKworICAgICAgUGFzc2luZyB0aGUgKmVuY29kaW5nKiBhcmd1bWVudCB0byA6Y2xhc3M6YHN0cmAgYWxsb3dzIGRlY29kaW5nIGFueQorICAgICAgOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0YCBkaXJlY3RseSwgd2l0aG91dCBuZWVkaW5nIHRvIG1ha2UgYSB0ZW1wb3JhcnkKKyAgICAgIGJ5dGVzIG9yIGJ5dGVhcnJheSBvYmplY3QuCisKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4xCiAgICAgICBBZGRlZCBzdXBwb3J0IGZvciBrZXl3b3JkIGFyZ3VtZW50cy4KIAotU2luY2UgMiBoZXhhZGVjaW1hbCBkaWdpdHMgY29ycmVzcG9uZCBwcmVjaXNlbHkgdG8gYSBzaW5nbGUgYnl0ZSwgaGV4YWRlY2ltYWwKLW51bWJlcnMgYXJlIGEgY29tbW9ubHkgdXNlZCBmb3JtYXQgZm9yIGRlc2NyaWJpbmcgYmluYXJ5IGRhdGEuIEFjY29yZGluZ2x5LAotdGhlIGJ5dGVzIGFuZCBieXRlYXJyYXkgdHlwZXMgaGF2ZSBhbiBhZGRpdGlvbmFsIGNsYXNzIG1ldGhvZCB0byByZWFkIGRhdGEgaW4KLXRoYXQgZm9ybWF0OgogCi0uLiBjbGFzc21ldGhvZDo6IGJ5dGVzLmZyb21oZXgoc3RyaW5nKQotICAgICAgICAgICAgICAgICBieXRlYXJyYXkuZnJvbWhleChzdHJpbmcpCisuLiBtZXRob2Q6OiBieXRlcy5lbmRzd2l0aChzdWZmaXhbLCBzdGFydFssIGVuZF1dKQorICAgICAgICAgICAgYnl0ZWFycmF5LmVuZHN3aXRoKHN1ZmZpeFssIHN0YXJ0WywgZW5kXV0pCiAKLSAgIFRoaXMgOmNsYXNzOmBieXRlc2AgY2xhc3MgbWV0aG9kIHJldHVybnMgYSBieXRlcyBvciBieXRlYXJyYXkgb2JqZWN0LAotICAgZGVjb2RpbmcgdGhlIGdpdmVuIHN0cmluZyBvYmplY3QuICBUaGUgc3RyaW5nIG11c3QgY29udGFpbiB0d28gaGV4YWRlY2ltYWwKLSAgIGRpZ2l0cyBwZXIgYnl0ZSwgc3BhY2VzIGFyZSBpZ25vcmVkLgorICAgUmV0dXJuIGBgVHJ1ZWBgIGlmIHRoZSBiaW5hcnkgZGF0YSBlbmRzIHdpdGggdGhlIHNwZWNpZmllZCAqc3VmZml4KiwKKyAgIG90aGVyd2lzZSByZXR1cm4gYGBGYWxzZWBgLiAgKnN1ZmZpeCogY2FuIGFsc28gYmUgYSB0dXBsZSBvZiBzdWZmaXhlcyB0bworICAgbG9vayBmb3IuICBXaXRoIG9wdGlvbmFsICpzdGFydCosIHRlc3QgYmVnaW5uaW5nIGF0IHRoYXQgcG9zaXRpb24uICBXaXRoCisgICBvcHRpb25hbCAqZW5kKiwgc3RvcCBjb21wYXJpbmcgYXQgdGhhdCBwb3NpdGlvbi4KIAotICAgPj4+IGJ5dGVzLmZyb21oZXgoJzJFZjAgRjFmMiAgJykKLSAgIGInLlx4ZjBceGYxXHhmMicKKyAgIFRoZSBzdWZmaXgoZXMpIHRvIHNlYXJjaCBmb3IgbWF5IGJlIGFueSA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgLgogCiAKLVRoZSBtYWtldHJhbnMgYW5kIHRyYW5zbGF0ZSBtZXRob2RzIGRpZmZlciBpbiBzZW1hbnRpY3MgZnJvbSB0aGUgdmVyc2lvbnMKLWF2YWlsYWJsZSBvbiBzdHJpbmdzOgorLi4gbWV0aG9kOjogYnl0ZXMuZmluZChzdWJbLCBzdGFydFssIGVuZF1dKQorICAgICAgICAgICAgYnl0ZWFycmF5LmZpbmQoc3ViWywgc3RhcnRbLCBlbmRdXSkKKworICAgUmV0dXJuIHRoZSBsb3dlc3QgaW5kZXggaW4gdGhlIGRhdGEgd2hlcmUgdGhlIHN1YnNlcXVlbmNlICpzdWIqIGlzIGZvdW5kLAorICAgc3VjaCB0aGF0ICpzdWIqIGlzIGNvbnRhaW5lZCBpbiB0aGUgc2xpY2UgYGBzW3N0YXJ0OmVuZF1gYC4gIE9wdGlvbmFsCisgICBhcmd1bWVudHMgKnN0YXJ0KiBhbmQgKmVuZCogYXJlIGludGVycHJldGVkIGFzIGluIHNsaWNlIG5vdGF0aW9uLiAgUmV0dXJuCisgICBgYC0xYGAgaWYgKnN1YiogaXMgbm90IGZvdW5kLgorCisgICBUaGUgc3Vic2VxdWVuY2UgdG8gc2VhcmNoIGZvciBtYXkgYmUgYW55IDp0ZXJtOmBieXRlcy1saWtlIG9iamVjdGAgb3IgYW4KKyAgIGludGVnZXIgaW4gdGhlIHJhbmdlIDAgdG8gMjU1LgorCisgICAuLiBub3RlOjoKKworICAgICAgVGhlIDptZXRoOmB+Ynl0ZXMuZmluZGAgbWV0aG9kIHNob3VsZCBiZSB1c2VkIG9ubHkgaWYgeW91IG5lZWQgdG8ga25vdyB0aGUKKyAgICAgIHBvc2l0aW9uIG9mICpzdWIqLiAgVG8gY2hlY2sgaWYgKnN1YiogaXMgYSBzdWJzdHJpbmcgb3Igbm90LCB1c2UgdGhlCisgICAgICA6a2V5d29yZDpgaW5gIG9wZXJhdG9yOjoKKworICAgICAgICAgPj4+IGInUHknIGluIGInUHl0aG9uJworICAgICAgICAgVHJ1ZQorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMworICAgICAgQWxzbyBhY2NlcHQgYW4gaW50ZWdlciBpbiB0aGUgcmFuZ2UgMCB0byAyNTUgYXMgdGhlIHN1YnNlcXVlbmNlLgorCisKKy4uIG1ldGhvZDo6IGJ5dGVzLmluZGV4KHN1YlssIHN0YXJ0WywgZW5kXV0pCisgICAgICAgICAgICBieXRlYXJyYXkuaW5kZXgoc3ViWywgc3RhcnRbLCBlbmRdXSkKKworICAgTGlrZSA6bWV0aDpgfmJ5dGVzLmZpbmRgLCBidXQgcmFpc2UgOmV4YzpgVmFsdWVFcnJvcmAgd2hlbiB0aGUKKyAgIHN1YnNlcXVlbmNlIGlzIG5vdCBmb3VuZC4KKworICAgVGhlIHN1YnNlcXVlbmNlIHRvIHNlYXJjaCBmb3IgbWF5IGJlIGFueSA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgIG9yIGFuCisgICBpbnRlZ2VyIGluIHRoZSByYW5nZSAwIHRvIDI1NS4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKKyAgICAgIEFsc28gYWNjZXB0IGFuIGludGVnZXIgaW4gdGhlIHJhbmdlIDAgdG8gMjU1IGFzIHRoZSBzdWJzZXF1ZW5jZS4KKworCisuLiBtZXRob2Q6OiBieXRlcy5qb2luKGl0ZXJhYmxlKQorICAgICAgICAgICAgYnl0ZWFycmF5LmpvaW4oaXRlcmFibGUpCisKKyAgIFJldHVybiBhIGJ5dGVzIG9yIGJ5dGVhcnJheSBvYmplY3Qgd2hpY2ggaXMgdGhlIGNvbmNhdGVuYXRpb24gb2YgdGhlCisgICBiaW5hcnkgZGF0YSBzZXF1ZW5jZXMgaW4gdGhlIDp0ZXJtOmBpdGVyYWJsZWAgKml0ZXJhYmxlKi4gIEEKKyAgIDpleGM6YFR5cGVFcnJvcmAgd2lsbCBiZSByYWlzZWQgaWYgdGhlcmUgYXJlIGFueSB2YWx1ZXMgaW4gKml0ZXJhYmxlKgorICAgdGhhdCBhcmUgbm90IDp0ZXJtOmBieXRlcy1saWtlIG9iamVjdHMgPGJ5dGVzLWxpa2Ugb2JqZWN0PmAsIGluY2x1ZGluZworICAgOmNsYXNzOmBzdHJgIG9iamVjdHMuICBUaGUgc2VwYXJhdG9yIGJldHdlZW4gZWxlbWVudHMgaXMgdGhlIGNvbnRlbnRzCisgICBvZiB0aGUgYnl0ZXMgb3IgYnl0ZWFycmF5IG9iamVjdCBwcm92aWRpbmcgdGhpcyBtZXRob2QuCisKKworLi4gc3RhdGljbWV0aG9kOjogYnl0ZXMubWFrZXRyYW5zKGZyb20sIHRvKQorICAgICAgICAgICAgICAgICAgYnl0ZWFycmF5Lm1ha2V0cmFucyhmcm9tLCB0bykKKworICAgVGhpcyBzdGF0aWMgbWV0aG9kIHJldHVybnMgYSB0cmFuc2xhdGlvbiB0YWJsZSB1c2FibGUgZm9yCisgICA6bWV0aDpgYnl0ZXMudHJhbnNsYXRlYCB0aGF0IHdpbGwgbWFwIGVhY2ggY2hhcmFjdGVyIGluICpmcm9tKiBpbnRvIHRoZQorICAgY2hhcmFjdGVyIGF0IHRoZSBzYW1lIHBvc2l0aW9uIGluICp0byo7ICpmcm9tKiBhbmQgKnRvKiBtdXN0IGJvdGggYmUKKyAgIDp0ZXJtOmBieXRlcy1saWtlIG9iamVjdHMgPGJ5dGVzLWxpa2Ugb2JqZWN0PmAgYW5kIGhhdmUgdGhlIHNhbWUgbGVuZ3RoLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKKworCisuLiBtZXRob2Q6OiBieXRlcy5wYXJ0aXRpb24oc2VwKQorICAgICAgICAgICAgYnl0ZWFycmF5LnBhcnRpdGlvbihzZXApCisKKyAgIFNwbGl0IHRoZSBzZXF1ZW5jZSBhdCB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiAqc2VwKiwgYW5kIHJldHVybiBhIDMtdHVwbGUKKyAgIGNvbnRhaW5pbmcgdGhlIHBhcnQgYmVmb3JlIHRoZSBzZXBhcmF0b3IsIHRoZSBzZXBhcmF0b3IsIGFuZCB0aGUgcGFydAorICAgYWZ0ZXIgdGhlIHNlcGFyYXRvci4gIElmIHRoZSBzZXBhcmF0b3IgaXMgbm90IGZvdW5kLCByZXR1cm4gYSAzLXR1cGxlCisgICBjb250YWluaW5nIGEgY29weSBvZiB0aGUgb3JpZ2luYWwgc2VxdWVuY2UsIGZvbGxvd2VkIGJ5IHR3byBlbXB0eSBieXRlcyBvcgorICAgYnl0ZWFycmF5IG9iamVjdHMuCisKKyAgIFRoZSBzZXBhcmF0b3IgdG8gc2VhcmNoIGZvciBtYXkgYmUgYW55IDp0ZXJtOmBieXRlcy1saWtlIG9iamVjdGAuCisKKworLi4gbWV0aG9kOjogYnl0ZXMucmVwbGFjZShvbGQsIG5ld1ssIGNvdW50XSkKKyAgICAgICAgICAgIGJ5dGVhcnJheS5yZXBsYWNlKG9sZCwgbmV3WywgY291bnRdKQorCisgICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzZXF1ZW5jZSB3aXRoIGFsbCBvY2N1cnJlbmNlcyBvZiBzdWJzZXF1ZW5jZSAqb2xkKgorICAgcmVwbGFjZWQgYnkgKm5ldyouICBJZiB0aGUgb3B0aW9uYWwgYXJndW1lbnQgKmNvdW50KiBpcyBnaXZlbiwgb25seSB0aGUKKyAgIGZpcnN0ICpjb3VudCogb2NjdXJyZW5jZXMgYXJlIHJlcGxhY2VkLgorCisgICBUaGUgc3Vic2VxdWVuY2UgdG8gc2VhcmNoIGZvciBhbmQgaXRzIHJlcGxhY2VtZW50IG1heSBiZSBhbnkKKyAgIDp0ZXJtOmBieXRlcy1saWtlIG9iamVjdGAuCisKKyAgIC4uIG5vdGU6OgorCisgICAgICBUaGUgYnl0ZWFycmF5IHZlcnNpb24gb2YgdGhpcyBtZXRob2QgZG9lcyAqbm90KiBvcGVyYXRlIGluIHBsYWNlIC0gaXQKKyAgICAgIGFsd2F5cyBwcm9kdWNlcyBhIG5ldyBvYmplY3QsIGV2ZW4gaWYgbm8gY2hhbmdlcyB3ZXJlIG1hZGUuCisKKworLi4gbWV0aG9kOjogYnl0ZXMucmZpbmQoc3ViWywgc3RhcnRbLCBlbmRdXSkKKyAgICAgICAgICAgIGJ5dGVhcnJheS5yZmluZChzdWJbLCBzdGFydFssIGVuZF1dKQorCisgICBSZXR1cm4gdGhlIGhpZ2hlc3QgaW5kZXggaW4gdGhlIHNlcXVlbmNlIHdoZXJlIHRoZSBzdWJzZXF1ZW5jZSAqc3ViKiBpcworICAgZm91bmQsIHN1Y2ggdGhhdCAqc3ViKiBpcyBjb250YWluZWQgd2l0aGluIGBgc1tzdGFydDplbmRdYGAuICBPcHRpb25hbAorICAgYXJndW1lbnRzICpzdGFydCogYW5kICplbmQqIGFyZSBpbnRlcnByZXRlZCBhcyBpbiBzbGljZSBub3RhdGlvbi4gUmV0dXJuCisgICBgYC0xYGAgb24gZmFpbHVyZS4KKworICAgVGhlIHN1YnNlcXVlbmNlIHRvIHNlYXJjaCBmb3IgbWF5IGJlIGFueSA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgIG9yIGFuCisgICBpbnRlZ2VyIGluIHRoZSByYW5nZSAwIHRvIDI1NS4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKKyAgICAgIEFsc28gYWNjZXB0IGFuIGludGVnZXIgaW4gdGhlIHJhbmdlIDAgdG8gMjU1IGFzIHRoZSBzdWJzZXF1ZW5jZS4KKworCisuLiBtZXRob2Q6OiBieXRlcy5yaW5kZXgoc3ViWywgc3RhcnRbLCBlbmRdXSkKKyAgICAgICAgICAgIGJ5dGVhcnJheS5yaW5kZXgoc3ViWywgc3RhcnRbLCBlbmRdXSkKKworICAgTGlrZSA6bWV0aDpgfmJ5dGVzLnJmaW5kYCBidXQgcmFpc2VzIDpleGM6YFZhbHVlRXJyb3JgIHdoZW4gdGhlCisgICBzdWJzZXF1ZW5jZSAqc3ViKiBpcyBub3QgZm91bmQuCisKKyAgIFRoZSBzdWJzZXF1ZW5jZSB0byBzZWFyY2ggZm9yIG1heSBiZSBhbnkgOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0YCBvciBhbgorICAgaW50ZWdlciBpbiB0aGUgcmFuZ2UgMCB0byAyNTUuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCisgICAgICBBbHNvIGFjY2VwdCBhbiBpbnRlZ2VyIGluIHRoZSByYW5nZSAwIHRvIDI1NSBhcyB0aGUgc3Vic2VxdWVuY2UuCisKKworLi4gbWV0aG9kOjogYnl0ZXMucnBhcnRpdGlvbihzZXApCisgICAgICAgICAgICBieXRlYXJyYXkucnBhcnRpdGlvbihzZXApCisKKyAgIFNwbGl0IHRoZSBzZXF1ZW5jZSBhdCB0aGUgbGFzdCBvY2N1cnJlbmNlIG9mICpzZXAqLCBhbmQgcmV0dXJuIGEgMy10dXBsZQorICAgY29udGFpbmluZyB0aGUgcGFydCBiZWZvcmUgdGhlIHNlcGFyYXRvciwgdGhlIHNlcGFyYXRvciwgYW5kIHRoZSBwYXJ0CisgICBhZnRlciB0aGUgc2VwYXJhdG9yLiAgSWYgdGhlIHNlcGFyYXRvciBpcyBub3QgZm91bmQsIHJldHVybiBhIDMtdHVwbGUKKyAgIGNvbnRhaW5pbmcgYSBjb3B5IG9mIHRoZSBvcmlnaW5hbCBzZXF1ZW5jZSwgZm9sbG93ZWQgYnkgdHdvIGVtcHR5IGJ5dGVzIG9yCisgICBieXRlYXJyYXkgb2JqZWN0cy4KKworICAgVGhlIHNlcGFyYXRvciB0byBzZWFyY2ggZm9yIG1heSBiZSBhbnkgOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0YC4KKworCisuLiBtZXRob2Q6OiBieXRlcy5zdGFydHN3aXRoKHByZWZpeFssIHN0YXJ0WywgZW5kXV0pCisgICAgICAgICAgICBieXRlYXJyYXkuc3RhcnRzd2l0aChwcmVmaXhbLCBzdGFydFssIGVuZF1dKQorCisgICBSZXR1cm4gYGBUcnVlYGAgaWYgdGhlIGJpbmFyeSBkYXRhIHN0YXJ0cyB3aXRoIHRoZSBzcGVjaWZpZWQgKnByZWZpeCosCisgICBvdGhlcndpc2UgcmV0dXJuIGBgRmFsc2VgYC4gICpwcmVmaXgqIGNhbiBhbHNvIGJlIGEgdHVwbGUgb2YgcHJlZml4ZXMgdG8KKyAgIGxvb2sgZm9yLiAgV2l0aCBvcHRpb25hbCAqc3RhcnQqLCB0ZXN0IGJlZ2lubmluZyBhdCB0aGF0IHBvc2l0aW9uLiAgV2l0aAorICAgb3B0aW9uYWwgKmVuZCosIHN0b3AgY29tcGFyaW5nIGF0IHRoYXQgcG9zaXRpb24uCisKKyAgIFRoZSBwcmVmaXgoZXMpIHRvIHNlYXJjaCBmb3IgbWF5IGJlIGFueSA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgLgorCiAKIC4uIG1ldGhvZDo6IGJ5dGVzLnRyYW5zbGF0ZSh0YWJsZVssIGRlbGV0ZV0pCiAgICAgICAgICAgICBieXRlYXJyYXkudHJhbnNsYXRlKHRhYmxlWywgZGVsZXRlXSkKIAogICAgUmV0dXJuIGEgY29weSBvZiB0aGUgYnl0ZXMgb3IgYnl0ZWFycmF5IG9iamVjdCB3aGVyZSBhbGwgYnl0ZXMgb2NjdXJyaW5nIGluCi0gICB0aGUgb3B0aW9uYWwgYXJndW1lbnQgKmRlbGV0ZSogYXJlIHJlbW92ZWQsIGFuZCB0aGUgcmVtYWluaW5nIGJ5dGVzIGhhdmUgYmVlbgotICAgbWFwcGVkIHRocm91Z2ggdGhlIGdpdmVuIHRyYW5zbGF0aW9uIHRhYmxlLCB3aGljaCBtdXN0IGJlIGEgYnl0ZXMgb2JqZWN0IG9mCi0gICBsZW5ndGggMjU2LgorICAgdGhlIG9wdGlvbmFsIGFyZ3VtZW50ICpkZWxldGUqIGFyZSByZW1vdmVkLCBhbmQgdGhlIHJlbWFpbmluZyBieXRlcyBoYXZlCisgICBiZWVuIG1hcHBlZCB0aHJvdWdoIHRoZSBnaXZlbiB0cmFuc2xhdGlvbiB0YWJsZSwgd2hpY2ggbXVzdCBiZSBhIGJ5dGVzCisgICBvYmplY3Qgb2YgbGVuZ3RoIDI1Ni4KIAotICAgWW91IGNhbiB1c2UgdGhlIDpmdW5jOmBieXRlcy5tYWtldHJhbnNgIG1ldGhvZCB0byBjcmVhdGUgYSB0cmFuc2xhdGlvbiB0YWJsZS4KKyAgIFlvdSBjYW4gdXNlIHRoZSA6ZnVuYzpgYnl0ZXMubWFrZXRyYW5zYCBtZXRob2QgdG8gY3JlYXRlIGEgdHJhbnNsYXRpb24KKyAgIHRhYmxlLgogCiAgICBTZXQgdGhlICp0YWJsZSogYXJndW1lbnQgdG8gYGBOb25lYGAgZm9yIHRyYW5zbGF0aW9ucyB0aGF0IG9ubHkgZGVsZXRlCiAgICBjaGFyYWN0ZXJzOjoKQEAgLTIzNTUsMTUgKzI2MTAsNDk3IEBACiAgICAgICBiJ3JkIHRocyBzaHJ0IHR4dCcKIAogCi0uLiBzdGF0aWNtZXRob2Q6OiBieXRlcy5tYWtldHJhbnMoZnJvbSwgdG8pCi0gICAgICAgICAgICAgICAgICBieXRlYXJyYXkubWFrZXRyYW5zKGZyb20sIHRvKQorVGhlIGZvbGxvd2luZyBtZXRob2RzIG9uIGJ5dGVzIGFuZCBieXRlYXJyYXkgb2JqZWN0cyBoYXZlIGRlZmF1bHQgYmVoYXZpb3VycwordGhhdCBhc3N1bWUgdGhlIHVzZSBvZiBBU0NJSSBjb21wYXRpYmxlIGJpbmFyeSBmb3JtYXRzLCBidXQgY2FuIHN0aWxsIGJlIHVzZWQKK3dpdGggYXJiaXRyYXJ5IGJpbmFyeSBkYXRhIGJ5IHBhc3NpbmcgYXBwcm9wcmlhdGUgYXJndW1lbnRzLiBOb3RlIHRoYXQgYWxsIG9mCit0aGUgYnl0ZWFycmF5IG1ldGhvZHMgaW4gdGhpcyBzZWN0aW9uIGRvICpub3QqIG9wZXJhdGUgaW4gcGxhY2UsIGFuZCBpbnN0ZWFkCitwcm9kdWNlIG5ldyBvYmplY3RzLgogCi0gICBUaGlzIHN0YXRpYyBtZXRob2QgcmV0dXJucyBhIHRyYW5zbGF0aW9uIHRhYmxlIHVzYWJsZSBmb3IKLSAgIDptZXRoOmBieXRlcy50cmFuc2xhdGVgIHRoYXQgd2lsbCBtYXAgZWFjaCBjaGFyYWN0ZXIgaW4gKmZyb20qIGludG8gdGhlCi0gICBjaGFyYWN0ZXIgYXQgdGhlIHNhbWUgcG9zaXRpb24gaW4gKnRvKjsgKmZyb20qIGFuZCAqdG8qIG11c3QgYmUgYnl0ZXMgb2JqZWN0cwotICAgYW5kIGhhdmUgdGhlIHNhbWUgbGVuZ3RoLgorLi4gbWV0aG9kOjogYnl0ZXMuY2VudGVyKHdpZHRoWywgZmlsbGJ5dGVdKQorICAgICAgICAgICAgYnl0ZWFycmF5LmNlbnRlcih3aWR0aFssIGZpbGxieXRlXSkKIAotICAgLi4gdmVyc2lvbmFkZGVkOjogMy4xCisgICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBvYmplY3QgY2VudGVyZWQgaW4gYSBzZXF1ZW5jZSBvZiBsZW5ndGggKndpZHRoKi4KKyAgIFBhZGRpbmcgaXMgZG9uZSB1c2luZyB0aGUgc3BlY2lmaWVkICpmaWxsYnl0ZSogKGRlZmF1bHQgaXMgYW4gQVNDSUkKKyAgIHNwYWNlKS4gRm9yIDpjbGFzczpgYnl0ZXNgIG9iamVjdHMsIHRoZSBvcmlnaW5hbCBzZXF1ZW5jZSBpcyByZXR1cm5lZCBpZgorICAgKndpZHRoKiBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYGBsZW4ocylgYC4KKworICAgLi4gbm90ZTo6CisKKyAgICAgIFRoZSBieXRlYXJyYXkgdmVyc2lvbiBvZiB0aGlzIG1ldGhvZCBkb2VzICpub3QqIG9wZXJhdGUgaW4gcGxhY2UgLQorICAgICAgaXQgYWx3YXlzIHByb2R1Y2VzIGEgbmV3IG9iamVjdCwgZXZlbiBpZiBubyBjaGFuZ2VzIHdlcmUgbWFkZS4KKworCisuLiBtZXRob2Q6OiBieXRlcy5sanVzdCh3aWR0aFssIGZpbGxieXRlXSkKKyAgICAgICAgICAgIGJ5dGVhcnJheS5sanVzdCh3aWR0aFssIGZpbGxieXRlXSkKKworICAgUmV0dXJuIGEgY29weSBvZiB0aGUgb2JqZWN0IGxlZnQganVzdGlmaWVkIGluIGEgc2VxdWVuY2Ugb2YgbGVuZ3RoICp3aWR0aCouCisgICBQYWRkaW5nIGlzIGRvbmUgdXNpbmcgdGhlIHNwZWNpZmllZCAqZmlsbGJ5dGUqIChkZWZhdWx0IGlzIGFuIEFTQ0lJCisgICBzcGFjZSkuIEZvciA6Y2xhc3M6YGJ5dGVzYCBvYmplY3RzLCB0aGUgb3JpZ2luYWwgc2VxdWVuY2UgaXMgcmV0dXJuZWQgaWYKKyAgICp3aWR0aCogaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGBgbGVuKHMpYGAuCisKKyAgIC4uIG5vdGU6OgorCisgICAgICBUaGUgYnl0ZWFycmF5IHZlcnNpb24gb2YgdGhpcyBtZXRob2QgZG9lcyAqbm90KiBvcGVyYXRlIGluIHBsYWNlIC0KKyAgICAgIGl0IGFsd2F5cyBwcm9kdWNlcyBhIG5ldyBvYmplY3QsIGV2ZW4gaWYgbm8gY2hhbmdlcyB3ZXJlIG1hZGUuCisKKworLi4gbWV0aG9kOjogYnl0ZXMubHN0cmlwKFtjaGFyc10pCisgICAgICAgICAgICBieXRlYXJyYXkubHN0cmlwKFtjaGFyc10pCisKKyAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHNlcXVlbmNlIHdpdGggc3BlY2lmaWVkIGxlYWRpbmcgYnl0ZXMgcmVtb3ZlZC4gIFRoZQorICAgKmNoYXJzKiBhcmd1bWVudCBpcyBhIGJpbmFyeSBzZXF1ZW5jZSBzcGVjaWZ5aW5nIHRoZSBzZXQgb2YgYnl0ZSB2YWx1ZXMgdG8KKyAgIGJlIHJlbW92ZWQgLSB0aGUgbmFtZSByZWZlcnMgdG8gdGhlIGZhY3QgdGhpcyBtZXRob2QgaXMgdXN1YWxseSB1c2VkIHdpdGgKKyAgIEFTQ0lJIGNoYXJhY3RlcnMuICBJZiBvbWl0dGVkIG9yIGBgTm9uZWBgLCB0aGUgKmNoYXJzKiBhcmd1bWVudCBkZWZhdWx0cworICAgdG8gcmVtb3ZpbmcgQVNDSUkgd2hpdGVzcGFjZS4gIFRoZSAqY2hhcnMqIGFyZ3VtZW50IGlzIG5vdCBhIHByZWZpeDsKKyAgIHJhdGhlciwgYWxsIGNvbWJpbmF0aW9ucyBvZiBpdHMgdmFsdWVzIGFyZSBzdHJpcHBlZDo6CisKKyAgICAgID4+PiBiJyAgIHNwYWNpb3VzICAgJy5sc3RyaXAoKQorICAgICAgYidzcGFjaW91cyAgICcKKyAgICAgID4+PiBiJ3d3dy5leGFtcGxlLmNvbScubHN0cmlwKGInY21vd3ouJykKKyAgICAgIGInZXhhbXBsZS5jb20nCisKKyAgIFRoZSBiaW5hcnkgc2VxdWVuY2Ugb2YgYnl0ZSB2YWx1ZXMgdG8gcmVtb3ZlIG1heSBiZSBhbnkKKyAgIDp0ZXJtOmBieXRlcy1saWtlIG9iamVjdGAuCisKKyAgIC4uIG5vdGU6OgorCisgICAgICBUaGUgYnl0ZWFycmF5IHZlcnNpb24gb2YgdGhpcyBtZXRob2QgZG9lcyAqbm90KiBvcGVyYXRlIGluIHBsYWNlIC0KKyAgICAgIGl0IGFsd2F5cyBwcm9kdWNlcyBhIG5ldyBvYmplY3QsIGV2ZW4gaWYgbm8gY2hhbmdlcyB3ZXJlIG1hZGUuCisKKworLi4gbWV0aG9kOjogYnl0ZXMucmp1c3Qod2lkdGhbLCBmaWxsYnl0ZV0pCisgICAgICAgICAgICBieXRlYXJyYXkucmp1c3Qod2lkdGhbLCBmaWxsYnl0ZV0pCisKKyAgIFJldHVybiBhIGNvcHkgb2YgdGhlIG9iamVjdCByaWdodCBqdXN0aWZpZWQgaW4gYSBzZXF1ZW5jZSBvZiBsZW5ndGggKndpZHRoKi4KKyAgIFBhZGRpbmcgaXMgZG9uZSB1c2luZyB0aGUgc3BlY2lmaWVkICpmaWxsYnl0ZSogKGRlZmF1bHQgaXMgYW4gQVNDSUkKKyAgIHNwYWNlKS4gRm9yIDpjbGFzczpgYnl0ZXNgIG9iamVjdHMsIHRoZSBvcmlnaW5hbCBzZXF1ZW5jZSBpcyByZXR1cm5lZCBpZgorICAgKndpZHRoKiBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYGBsZW4ocylgYC4KKworICAgLi4gbm90ZTo6CisKKyAgICAgIFRoZSBieXRlYXJyYXkgdmVyc2lvbiBvZiB0aGlzIG1ldGhvZCBkb2VzICpub3QqIG9wZXJhdGUgaW4gcGxhY2UgLQorICAgICAgaXQgYWx3YXlzIHByb2R1Y2VzIGEgbmV3IG9iamVjdCwgZXZlbiBpZiBubyBjaGFuZ2VzIHdlcmUgbWFkZS4KKworCisuLiBtZXRob2Q6OiBieXRlcy5yc3BsaXQoc2VwPU5vbmUsIG1heHNwbGl0PS0xKQorICAgICAgICAgICAgYnl0ZWFycmF5LnJzcGxpdChzZXA9Tm9uZSwgbWF4c3BsaXQ9LTEpCisKKyAgIFNwbGl0IHRoZSBiaW5hcnkgc2VxdWVuY2UgaW50byBzdWJzZXF1ZW5jZXMgb2YgdGhlIHNhbWUgdHlwZSwgdXNpbmcgKnNlcCoKKyAgIGFzIHRoZSBkZWxpbWl0ZXIgc3RyaW5nLiBJZiAqbWF4c3BsaXQqIGlzIGdpdmVuLCBhdCBtb3N0ICptYXhzcGxpdCogc3BsaXRzCisgICBhcmUgZG9uZSwgdGhlICpyaWdodG1vc3QqIG9uZXMuICBJZiAqc2VwKiBpcyBub3Qgc3BlY2lmaWVkIG9yIGBgTm9uZWBgLAorICAgYW55IHN1YnNlcXVlbmNlIGNvbnNpc3Rpbmcgc29sZWx5IG9mIEFTQ0lJIHdoaXRlc3BhY2UgaXMgYSBzZXBhcmF0b3IuCisgICBFeGNlcHQgZm9yIHNwbGl0dGluZyBmcm9tIHRoZSByaWdodCwgOm1ldGg6YHJzcGxpdGAgYmVoYXZlcyBsaWtlCisgICA6bWV0aDpgc3BsaXRgIHdoaWNoIGlzIGRlc2NyaWJlZCBpbiBkZXRhaWwgYmVsb3cuCisKKworLi4gbWV0aG9kOjogYnl0ZXMucnN0cmlwKFtjaGFyc10pCisgICAgICAgICAgICBieXRlYXJyYXkucnN0cmlwKFtjaGFyc10pCisKKyAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHNlcXVlbmNlIHdpdGggc3BlY2lmaWVkIHRyYWlsaW5nIGJ5dGVzIHJlbW92ZWQuICBUaGUKKyAgICpjaGFycyogYXJndW1lbnQgaXMgYSBiaW5hcnkgc2VxdWVuY2Ugc3BlY2lmeWluZyB0aGUgc2V0IG9mIGJ5dGUgdmFsdWVzIHRvCisgICBiZSByZW1vdmVkIC0gdGhlIG5hbWUgcmVmZXJzIHRvIHRoZSBmYWN0IHRoaXMgbWV0aG9kIGlzIHVzdWFsbHkgdXNlZCB3aXRoCisgICBBU0NJSSBjaGFyYWN0ZXJzLiAgSWYgb21pdHRlZCBvciBgYE5vbmVgYCwgdGhlICpjaGFycyogYXJndW1lbnQgZGVmYXVsdHMgdG8KKyAgIHJlbW92aW5nIEFTQ0lJIHdoaXRlc3BhY2UuICBUaGUgKmNoYXJzKiBhcmd1bWVudCBpcyBub3QgYSBzdWZmaXg7IHJhdGhlciwKKyAgIGFsbCBjb21iaW5hdGlvbnMgb2YgaXRzIHZhbHVlcyBhcmUgc3RyaXBwZWQ6OgorCisgICAgICA+Pj4gYicgICBzcGFjaW91cyAgICcucnN0cmlwKCkKKyAgICAgIGInICAgc3BhY2lvdXMnCisgICAgICA+Pj4gYidtaXNzaXNzaXBwaScucnN0cmlwKGInaXB6JykKKyAgICAgIGInbWlzc2lzcycKKworICAgVGhlIGJpbmFyeSBzZXF1ZW5jZSBvZiBieXRlIHZhbHVlcyB0byByZW1vdmUgbWF5IGJlIGFueQorICAgOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0YC4KKworICAgLi4gbm90ZTo6CisKKyAgICAgIFRoZSBieXRlYXJyYXkgdmVyc2lvbiBvZiB0aGlzIG1ldGhvZCBkb2VzICpub3QqIG9wZXJhdGUgaW4gcGxhY2UgLQorICAgICAgaXQgYWx3YXlzIHByb2R1Y2VzIGEgbmV3IG9iamVjdCwgZXZlbiBpZiBubyBjaGFuZ2VzIHdlcmUgbWFkZS4KKworCisuLiBtZXRob2Q6OiBieXRlcy5zcGxpdChzZXA9Tm9uZSwgbWF4c3BsaXQ9LTEpCisgICAgICAgICAgICBieXRlYXJyYXkuc3BsaXQoc2VwPU5vbmUsIG1heHNwbGl0PS0xKQorCisgICBTcGxpdCB0aGUgYmluYXJ5IHNlcXVlbmNlIGludG8gc3Vic2VxdWVuY2VzIG9mIHRoZSBzYW1lIHR5cGUsIHVzaW5nICpzZXAqCisgICBhcyB0aGUgZGVsaW1pdGVyIHN0cmluZy4gSWYgKm1heHNwbGl0KiBpcyBnaXZlbiBhbmQgbm9uLW5lZ2F0aXZlLCBhdCBtb3N0CisgICAqbWF4c3BsaXQqIHNwbGl0cyBhcmUgZG9uZSAodGh1cywgdGhlIGxpc3Qgd2lsbCBoYXZlIGF0IG1vc3QgYGBtYXhzcGxpdCsxYGAKKyAgIGVsZW1lbnRzKS4gIElmICptYXhzcGxpdCogaXMgbm90IHNwZWNpZmllZCBvciBpcyBgYC0xYGAsIHRoZW4gdGhlcmUgaXMgbm8KKyAgIGxpbWl0IG9uIHRoZSBudW1iZXIgb2Ygc3BsaXRzIChhbGwgcG9zc2libGUgc3BsaXRzIGFyZSBtYWRlKS4KKworICAgSWYgKnNlcCogaXMgZ2l2ZW4sIGNvbnNlY3V0aXZlIGRlbGltaXRlcnMgYXJlIG5vdCBncm91cGVkIHRvZ2V0aGVyIGFuZCBhcmUKKyAgIGRlZW1lZCB0byBkZWxpbWl0IGVtcHR5IHN1YnNlcXVlbmNlcyAoZm9yIGV4YW1wbGUsIGBgYicxLCwyJy5zcGxpdChiJywnKWBgCisgICByZXR1cm5zIGBgW2InMScsIGInJywgYicyJ11gYCkuICBUaGUgKnNlcCogYXJndW1lbnQgbWF5IGNvbnNpc3Qgb2YgYQorICAgbXVsdGlieXRlIHNlcXVlbmNlIChmb3IgZXhhbXBsZSwgYGBiJzE8PjI8PjMnLnNwbGl0KGInPD4nKWBgIHJldHVybnMKKyAgIGBgW2InMScsIGInMicsIGInMyddYGApLiBTcGxpdHRpbmcgYW4gZW1wdHkgc2VxdWVuY2Ugd2l0aCBhIHNwZWNpZmllZAorICAgc2VwYXJhdG9yIHJldHVybnMgYGBbYicnXWBgIG9yIGBgW2J5dGVhcnJheShiJycpXWBgIGRlcGVuZGluZyBvbiB0aGUgdHlwZQorICAgb2Ygb2JqZWN0IGJlaW5nIHNwbGl0LiAgVGhlICpzZXAqIGFyZ3VtZW50IG1heSBiZSBhbnkKKyAgIDp0ZXJtOmBieXRlcy1saWtlIG9iamVjdGAuCisKKyAgIEZvciBleGFtcGxlOjoKKworICAgICAgPj4+IGInMSwyLDMnLnNwbGl0KGInLCcpCisgICAgICBbYicxJywgYicyJywgYiczJ10KKyAgICAgID4+PiBiJzEsMiwzJy5zcGxpdChiJywnLCBtYXhzcGxpdD0xKQorICAgICAgW2InMScsIGInMiwzJ10KKyAgICAgID4+PiBiJzEsMiwsMywnLnNwbGl0KGInLCcpCisgICAgICBbYicxJywgYicyJywgYicnLCBiJzMnLCBiJyddCisKKyAgIElmICpzZXAqIGlzIG5vdCBzcGVjaWZpZWQgb3IgaXMgYGBOb25lYGAsIGEgZGlmZmVyZW50IHNwbGl0dGluZyBhbGdvcml0aG0KKyAgIGlzIGFwcGxpZWQ6IHJ1bnMgb2YgY29uc2VjdXRpdmUgQVNDSUkgd2hpdGVzcGFjZSBhcmUgcmVnYXJkZWQgYXMgYSBzaW5nbGUKKyAgIHNlcGFyYXRvciwgYW5kIHRoZSByZXN1bHQgd2lsbCBjb250YWluIG5vIGVtcHR5IHN0cmluZ3MgYXQgdGhlIHN0YXJ0IG9yCisgICBlbmQgaWYgdGhlIHNlcXVlbmNlIGhhcyBsZWFkaW5nIG9yIHRyYWlsaW5nIHdoaXRlc3BhY2UuICBDb25zZXF1ZW50bHksCisgICBzcGxpdHRpbmcgYW4gZW1wdHkgc2VxdWVuY2Ugb3IgYSBzZXF1ZW5jZSBjb25zaXN0aW5nIHNvbGVseSBvZiBBU0NJSQorICAgd2hpdGVzcGFjZSB3aXRob3V0IGEgc3BlY2lmaWVkIHNlcGFyYXRvciByZXR1cm5zIGBgW11gYC4KKworICAgRm9yIGV4YW1wbGU6OgorCisKKyAgICAgID4+PiBiJzEgMiAzJy5zcGxpdCgpCisgICAgICBbYicxJywgYicyJywgYiczJ10KKyAgICAgID4+PiBiJzEgMiAzJy5zcGxpdChtYXhzcGxpdD0xKQorICAgICAgW2InMScsIGInMiAzJ10KKyAgICAgID4+PiBiJyAgIDEgICAyICAgMyAgICcuc3BsaXQoKQorICAgICAgW2InMScsIGInMicsIGInMyddCisKKworLi4gbWV0aG9kOjogYnl0ZXMuc3RyaXAoW2NoYXJzXSkKKyAgICAgICAgICAgIGJ5dGVhcnJheS5zdHJpcChbY2hhcnNdKQorCisgICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzZXF1ZW5jZSB3aXRoIHNwZWNpZmllZCBsZWFkaW5nIGFuZCB0cmFpbGluZyBieXRlcworICAgcmVtb3ZlZC4gVGhlICpjaGFycyogYXJndW1lbnQgaXMgYSBiaW5hcnkgc2VxdWVuY2Ugc3BlY2lmeWluZyB0aGUgc2V0IG9mCisgICBieXRlIHZhbHVlcyB0byBiZSByZW1vdmVkIC0gdGhlIG5hbWUgcmVmZXJzIHRvIHRoZSBmYWN0IHRoaXMgbWV0aG9kIGlzCisgICB1c3VhbGx5IHVzZWQgd2l0aCBBU0NJSSBjaGFyYWN0ZXJzLiAgSWYgb21pdHRlZCBvciBgYE5vbmVgYCwgdGhlICpjaGFycyoKKyAgIGFyZ3VtZW50IGRlZmF1bHRzIHRvIHJlbW92aW5nIEFTQ0lJIHdoaXRlc3BhY2UuIFRoZSAqY2hhcnMqIGFyZ3VtZW50IGlzCisgICBub3QgYSBwcmVmaXggb3Igc3VmZml4OyByYXRoZXIsIGFsbCBjb21iaW5hdGlvbnMgb2YgaXRzIHZhbHVlcyBhcmUKKyAgIHN0cmlwcGVkOjoKKworICAgICAgPj4+IGInICAgc3BhY2lvdXMgICAnLnN0cmlwKCkKKyAgICAgIGInc3BhY2lvdXMnCisgICAgICA+Pj4gYid3d3cuZXhhbXBsZS5jb20nLnN0cmlwKGInY21vd3ouJykKKyAgICAgIGInZXhhbXBsZScKKworICAgVGhlIGJpbmFyeSBzZXF1ZW5jZSBvZiBieXRlIHZhbHVlcyB0byByZW1vdmUgbWF5IGJlIGFueQorICAgOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0YC4KKworICAgLi4gbm90ZTo6CisKKyAgICAgIFRoZSBieXRlYXJyYXkgdmVyc2lvbiBvZiB0aGlzIG1ldGhvZCBkb2VzICpub3QqIG9wZXJhdGUgaW4gcGxhY2UgLQorICAgICAgaXQgYWx3YXlzIHByb2R1Y2VzIGEgbmV3IG9iamVjdCwgZXZlbiBpZiBubyBjaGFuZ2VzIHdlcmUgbWFkZS4KKworCitUaGUgZm9sbG93aW5nIG1ldGhvZHMgb24gYnl0ZXMgYW5kIGJ5dGVhcnJheSBvYmplY3RzIGFzc3VtZSB0aGUgdXNlIG9mIEFTQ0lJCitjb21wYXRpYmxlIGJpbmFyeSBmb3JtYXRzIGFuZCBzaG91bGQgbm90IGJlIGFwcGxpZWQgdG8gYXJiaXRyYXJ5IGJpbmFyeSBkYXRhLgorTm90ZSB0aGF0IGFsbCBvZiB0aGUgYnl0ZWFycmF5IG1ldGhvZHMgaW4gdGhpcyBzZWN0aW9uIGRvICpub3QqIG9wZXJhdGUgaW4KK3BsYWNlLCBhbmQgaW5zdGVhZCBwcm9kdWNlIG5ldyBvYmplY3RzLgorCisuLiBtZXRob2Q6OiBieXRlcy5jYXBpdGFsaXplKCkKKyAgICAgICAgICAgIGJ5dGVhcnJheS5jYXBpdGFsaXplKCkKKworICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc2VxdWVuY2Ugd2l0aCBlYWNoIGJ5dGUgaW50ZXJwcmV0ZWQgYXMgYW4gQVNDSUkKKyAgIGNoYXJhY3RlciwgYW5kIHRoZSBmaXJzdCBieXRlIGNhcGl0YWxpemVkIGFuZCB0aGUgcmVzdCBsb3dlcmNhc2VkLgorICAgTm9uLUFTQ0lJIGJ5dGUgdmFsdWVzIGFyZSBwYXNzZWQgdGhyb3VnaCB1bmNoYW5nZWQuCisKKyAgIC4uIG5vdGU6OgorCisgICAgICBUaGUgYnl0ZWFycmF5IHZlcnNpb24gb2YgdGhpcyBtZXRob2QgZG9lcyAqbm90KiBvcGVyYXRlIGluIHBsYWNlIC0gaXQKKyAgICAgIGFsd2F5cyBwcm9kdWNlcyBhIG5ldyBvYmplY3QsIGV2ZW4gaWYgbm8gY2hhbmdlcyB3ZXJlIG1hZGUuCisKKworLi4gbWV0aG9kOjogYnl0ZXMuZXhwYW5kdGFicyh0YWJzaXplPTgpCisgICAgICAgICAgICBieXRlYXJyYXkuZXhwYW5kdGFicyh0YWJzaXplPTgpCisKKyAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHNlcXVlbmNlIHdoZXJlIGFsbCBBU0NJSSB0YWIgY2hhcmFjdGVycyBhcmUgcmVwbGFjZWQKKyAgIGJ5IG9uZSBvciBtb3JlIEFTQ0lJIHNwYWNlcywgZGVwZW5kaW5nIG9uIHRoZSBjdXJyZW50IGNvbHVtbiBhbmQgdGhlIGdpdmVuCisgICB0YWIgc2l6ZS4gIFRhYiBwb3NpdGlvbnMgb2NjdXIgZXZlcnkgKnRhYnNpemUqIGJ5dGVzIChkZWZhdWx0IGlzIDgsCisgICBnaXZpbmcgdGFiIHBvc2l0aW9ucyBhdCBjb2x1bW5zIDAsIDgsIDE2IGFuZCBzbyBvbikuICBUbyBleHBhbmQgdGhlCisgICBzZXF1ZW5jZSwgdGhlIGN1cnJlbnQgY29sdW1uIGlzIHNldCB0byB6ZXJvIGFuZCB0aGUgc2VxdWVuY2UgaXMgZXhhbWluZWQKKyAgIGJ5dGUgYnkgYnl0ZS4gIElmIHRoZSBieXRlIGlzIGFuIEFTQ0lJIHRhYiBjaGFyYWN0ZXIgKGBgYidcdCdgYCksIG9uZSBvcgorICAgbW9yZSBzcGFjZSBjaGFyYWN0ZXJzIGFyZSBpbnNlcnRlZCBpbiB0aGUgcmVzdWx0IHVudGlsIHRoZSBjdXJyZW50IGNvbHVtbgorICAgaXMgZXF1YWwgdG8gdGhlIG5leHQgdGFiIHBvc2l0aW9uLiAoVGhlIHRhYiBjaGFyYWN0ZXIgaXRzZWxmIGlzIG5vdAorICAgY29waWVkLikgIElmIHRoZSBjdXJyZW50IGJ5dGUgaXMgYW4gQVNDSUkgbmV3bGluZSAoYGBiJ1xuJ2BgKSBvcgorICAgY2FycmlhZ2UgcmV0dXJuIChgYGInXHInYGApLCBpdCBpcyBjb3BpZWQgYW5kIHRoZSBjdXJyZW50IGNvbHVtbiBpcyByZXNldAorICAgdG8gemVyby4gIEFueSBvdGhlciBieXRlIHZhbHVlIGlzIGNvcGllZCB1bmNoYW5nZWQgYW5kIHRoZSBjdXJyZW50IGNvbHVtbgorICAgaXMgaW5jcmVtZW50ZWQgYnkgb25lIHJlZ2FyZGxlc3Mgb2YgaG93IHRoZSBieXRlIHZhbHVlIGlzIHJlcHJlc2VudGVkIHdoZW4KKyAgIHByaW50ZWQ6OgorCisgICAgICA+Pj4gYicwMVx0MDEyXHQwMTIzXHQwMTIzNCcuZXhwYW5kdGFicygpCisgICAgICBiJzAxICAgICAgMDEyICAgICAwMTIzICAgIDAxMjM0JworICAgICAgPj4+IGInMDFcdDAxMlx0MDEyM1x0MDEyMzQnLmV4cGFuZHRhYnMoNCkKKyAgICAgIGInMDEgIDAxMiAwMTIzICAgIDAxMjM0JworCisgICAuLiBub3RlOjoKKworICAgICAgVGhlIGJ5dGVhcnJheSB2ZXJzaW9uIG9mIHRoaXMgbWV0aG9kIGRvZXMgKm5vdCogb3BlcmF0ZSBpbiBwbGFjZSAtIGl0CisgICAgICBhbHdheXMgcHJvZHVjZXMgYSBuZXcgb2JqZWN0LCBldmVuIGlmIG5vIGNoYW5nZXMgd2VyZSBtYWRlLgorCisKKy4uIG1ldGhvZDo6IGJ5dGVzLmlzYWxudW0oKQorICAgICAgICAgICAgYnl0ZWFycmF5LmlzYWxudW0oKQorCisgICBSZXR1cm4gdHJ1ZSBpZiBhbGwgYnl0ZXMgaW4gdGhlIHNlcXVlbmNlIGFyZSBhbHBoYWJldGljYWwgQVNDSUkgY2hhcmFjdGVycworICAgb3IgQVNDSUkgZGVjaW1hbCBkaWdpdHMgYW5kIHRoZSBzZXF1ZW5jZSBpcyBub3QgZW1wdHksIGZhbHNlIG90aGVyd2lzZS4KKyAgIEFscGhhYmV0aWMgQVNDSUkgY2hhcmFjdGVycyBhcmUgdGhvc2UgYnl0ZSB2YWx1ZXMgaW4gdGhlIHNlcXVlbmNlCisgICBgYGInYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWidgYC4gQVNDSUkgZGVjaW1hbAorICAgZGlnaXRzIGFyZSB0aG9zZSBieXRlIHZhbHVlcyBpbiB0aGUgc2VxdWVuY2UgYGBiJzAxMjM0NTY3ODknYGAuCisKKyAgIEZvciBleGFtcGxlOjoKKworICAgICAgPj4+IGInQUJDYWJjMScuaXNhbG51bSgpCisgICAgICBUcnVlCisgICAgICA+Pj4gYidBQkMgYWJjMScuaXNhbG51bSgpCisgICAgICBGYWxzZQorCisKKy4uIG1ldGhvZDo6IGJ5dGVzLmlzYWxwaGEoKQorICAgICAgICAgICAgYnl0ZWFycmF5LmlzYWxwaGEoKQorCisgICBSZXR1cm4gdHJ1ZSBpZiBhbGwgYnl0ZXMgaW4gdGhlIHNlcXVlbmNlIGFyZSBhbHBoYWJldGljIEFTQ0lJIGNoYXJhY3RlcnMKKyAgIGFuZCB0aGUgc2VxdWVuY2UgaXMgbm90IGVtcHR5LCBmYWxzZSBvdGhlcndpc2UuICBBbHBoYWJldGljIEFTQ0lJCisgICBjaGFyYWN0ZXJzIGFyZSB0aG9zZSBieXRlIHZhbHVlcyBpbiB0aGUgc2VxdWVuY2UKKyAgIGBgYidhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJ2BgLgorCisgICBGb3IgZXhhbXBsZTo6CisKKyAgICAgID4+PiBiJ0FCQ2FiYycuaXNhbHBoYSgpCisgICAgICBUcnVlCisgICAgICA+Pj4gYidBQkNhYmMxJy5pc2FscGhhKCkKKyAgICAgIEZhbHNlCisKKworLi4gbWV0aG9kOjogYnl0ZXMuaXNkaWdpdCgpCisgICAgICAgICAgICBieXRlYXJyYXkuaXNkaWdpdCgpCisKKyAgIFJldHVybiB0cnVlIGlmIGFsbCBieXRlcyBpbiB0aGUgc2VxdWVuY2UgYXJlIEFTQ0lJIGRlY2ltYWwgZGlnaXRzCisgICBhbmQgdGhlIHNlcXVlbmNlIGlzIG5vdCBlbXB0eSwgZmFsc2Ugb3RoZXJ3aXNlLiBBU0NJSSBkZWNpbWFsIGRpZ2l0cyBhcmUKKyAgIHRob3NlIGJ5dGUgdmFsdWVzIGluIHRoZSBzZXF1ZW5jZSBgYGInMDEyMzQ1Njc4OSdgYC4KKworICAgRm9yIGV4YW1wbGU6OgorCisgICAgICA+Pj4gYicxMjM0Jy5pc2RpZ2l0KCkKKyAgICAgIFRydWUKKyAgICAgID4+PiBiJzEuMjMnLmlzZGlnaXQoKQorICAgICAgRmFsc2UKKworCisuLiBtZXRob2Q6OiBieXRlcy5pc2xvd2VyKCkKKyAgICAgICAgICAgIGJ5dGVhcnJheS5pc2xvd2VyKCkKKworICAgUmV0dXJuIHRydWUgaWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGxvd2VyY2FzZSBBU0NJSSBjaGFyYWN0ZXIKKyAgIGluIHRoZSBzZXF1ZW5jZSBhbmQgbm8gdXBwZXJjYXNlIEFTQ0lJIGNoYXJhY3RlcnMsIGZhbHNlIG90aGVyd2lzZS4KKworICAgRm9yIGV4YW1wbGU6OgorCisgICAgICA+Pj4gYidoZWxsbyB3b3JsZCcuaXNsb3dlcigpCisgICAgICBUcnVlCisgICAgICA+Pj4gYidIZWxsbyB3b3JsZCcuaXNsb3dlcigpCisgICAgICBGYWxzZQorCisgICBMb3dlcmNhc2UgQVNDSUkgY2hhcmFjdGVycyBhcmUgdGhvc2UgYnl0ZSB2YWx1ZXMgaW4gdGhlIHNlcXVlbmNlCisgICBgYGInYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonYGAuIFVwcGVyY2FzZSBBU0NJSSBjaGFyYWN0ZXJzCisgICBhcmUgdGhvc2UgYnl0ZSB2YWx1ZXMgaW4gdGhlIHNlcXVlbmNlIGBgYidBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWidgYC4KKworCisuLiBtZXRob2Q6OiBieXRlcy5pc3NwYWNlKCkKKyAgICAgICAgICAgIGJ5dGVhcnJheS5pc3NwYWNlKCkKKworICAgUmV0dXJuIHRydWUgaWYgYWxsIGJ5dGVzIGluIHRoZSBzZXF1ZW5jZSBhcmUgQVNDSUkgd2hpdGVzcGFjZSBhbmQgdGhlCisgICBzZXF1ZW5jZSBpcyBub3QgZW1wdHksIGZhbHNlIG90aGVyd2lzZS4gIEFTQ0lJIHdoaXRlc3BhY2UgY2hhcmFjdGVycyBhcmUKKyAgIHRob3NlIGJ5dGUgdmFsdWVzIGluIHRoZSBzZXF1ZW5jZSBgYGInIFx0XG5cclx4MGJcZidgYCAoc3BhY2UsIHRhYiwgbmV3bGluZSwKKyAgIGNhcnJpYWdlIHJldHVybiwgdmVydGljYWwgdGFiLCBmb3JtIGZlZWQpLgorCisKKy4uIG1ldGhvZDo6IGJ5dGVzLmlzdGl0bGUoKQorICAgICAgICAgICAgYnl0ZWFycmF5LmlzdGl0bGUoKQorCisgICBSZXR1cm4gdHJ1ZSBpZiB0aGUgc2VxdWVuY2UgaXMgQVNDSUkgdGl0bGVjYXNlIGFuZCB0aGUgc2VxdWVuY2UgaXMgbm90CisgICBlbXB0eSwgZmFsc2Ugb3RoZXJ3aXNlLiBTZWUgOm1ldGg6YGJ5dGVzLnRpdGxlYCBmb3IgbW9yZSBkZXRhaWxzIG9uIHRoZQorICAgZGVmaW5pdGlvbiBvZiAidGl0bGVjYXNlIi4KKworICAgRm9yIGV4YW1wbGU6OgorCisgICAgICA+Pj4gYidIZWxsbyBXb3JsZCcuaXN0aXRsZSgpCisgICAgICBUcnVlCisgICAgICA+Pj4gYidIZWxsbyB3b3JsZCcuaXN0aXRsZSgpCisgICAgICBGYWxzZQorCisKKy4uIG1ldGhvZDo6IGJ5dGVzLmlzdXBwZXIoKQorICAgICAgICAgICAgYnl0ZWFycmF5LmlzdXBwZXIoKQorCisgICBSZXR1cm4gdHJ1ZSBpZiB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgdXBwZXJjYXNlIGFscGhhYmV0aWMgQVNDSUkgY2hhcmFjdGVyCisgICBpbiB0aGUgc2VxdWVuY2UgYW5kIG5vIGxvd2VyY2FzZSBBU0NJSSBjaGFyYWN0ZXJzLCBmYWxzZSBvdGhlcndpc2UuCisKKyAgIEZvciBleGFtcGxlOjoKKworICAgICAgPj4+IGInSEVMTE8gV09STEQnLmlzdXBwZXIoKQorICAgICAgVHJ1ZQorICAgICAgPj4+IGInSGVsbG8gd29ybGQnLmlzdXBwZXIoKQorICAgICAgRmFsc2UKKworICAgTG93ZXJjYXNlIEFTQ0lJIGNoYXJhY3RlcnMgYXJlIHRob3NlIGJ5dGUgdmFsdWVzIGluIHRoZSBzZXF1ZW5jZQorICAgYGBiJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6J2BgLiBVcHBlcmNhc2UgQVNDSUkgY2hhcmFjdGVycworICAgYXJlIHRob3NlIGJ5dGUgdmFsdWVzIGluIHRoZSBzZXF1ZW5jZSBgYGInQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonYGAuCisKKworLi4gbWV0aG9kOjogYnl0ZXMubG93ZXIoKQorICAgICAgICAgICAgYnl0ZWFycmF5Lmxvd2VyKCkKKworICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc2VxdWVuY2Ugd2l0aCBhbGwgdGhlIHVwcGVyY2FzZSBBU0NJSSBjaGFyYWN0ZXJzCisgICBjb252ZXJ0ZWQgdG8gdGhlaXIgY29ycmVzcG9uZGluZyBsb3dlcmNhc2UgY291bnRlcnBhcnQuCisKKyAgIEZvciBleGFtcGxlOjoKKworICAgICAgPj4+IGInSGVsbG8gV29ybGQnLmxvd2VyKCkKKyAgICAgIGInaGVsbG8gd29ybGQnCisKKyAgIExvd2VyY2FzZSBBU0NJSSBjaGFyYWN0ZXJzIGFyZSB0aG9zZSBieXRlIHZhbHVlcyBpbiB0aGUgc2VxdWVuY2UKKyAgIGBgYidhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eidgYC4gVXBwZXJjYXNlIEFTQ0lJIGNoYXJhY3RlcnMKKyAgIGFyZSB0aG9zZSBieXRlIHZhbHVlcyBpbiB0aGUgc2VxdWVuY2UgYGBiJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJ2BgLgorCisgICAuLiBub3RlOjoKKworICAgICAgVGhlIGJ5dGVhcnJheSB2ZXJzaW9uIG9mIHRoaXMgbWV0aG9kIGRvZXMgKm5vdCogb3BlcmF0ZSBpbiBwbGFjZSAtIGl0CisgICAgICBhbHdheXMgcHJvZHVjZXMgYSBuZXcgb2JqZWN0LCBldmVuIGlmIG5vIGNoYW5nZXMgd2VyZSBtYWRlLgorCisKKy4uIGluZGV4OjoKKyAgIHNpbmdsZTogdW5pdmVyc2FsIG5ld2xpbmVzOyBieXRlcy5zcGxpdGxpbmVzIG1ldGhvZAorICAgc2luZ2xlOiB1bml2ZXJzYWwgbmV3bGluZXM7IGJ5dGVhcnJheS5zcGxpdGxpbmVzIG1ldGhvZAorCisuLiBtZXRob2Q6OiBieXRlcy5zcGxpdGxpbmVzKGtlZXBlbmRzPUZhbHNlKQorICAgICAgICAgICAgYnl0ZWFycmF5LnNwbGl0bGluZXMoa2VlcGVuZHM9RmFsc2UpCisKKyAgIFJldHVybiBhIGxpc3Qgb2YgdGhlIGxpbmVzIGluIHRoZSBiaW5hcnkgc2VxdWVuY2UsIGJyZWFraW5nIGF0IEFTQ0lJCisgICBsaW5lIGJvdW5kYXJpZXMuIFRoaXMgbWV0aG9kIHVzZXMgdGhlIDp0ZXJtOmB1bml2ZXJzYWwgbmV3bGluZXNgIGFwcHJvYWNoCisgICB0byBzcGxpdHRpbmcgbGluZXMuIExpbmUgYnJlYWtzIGFyZSBub3QgaW5jbHVkZWQgaW4gdGhlIHJlc3VsdGluZyBsaXN0CisgICB1bmxlc3MgKmtlZXBlbmRzKiBpcyBnaXZlbiBhbmQgdHJ1ZS4KKworICAgRm9yIGV4YW1wbGU6OgorCisgICAgICA+Pj4gYidhYiBjXG5cbmRlIGZnXHJrbFxyXG4nLnNwbGl0bGluZXMoKQorICAgICAgW2InYWIgYycsIGInJywgYidkZSBmZycsIGIna2wnXQorICAgICAgPj4+IGInYWIgY1xuXG5kZSBmZ1xya2xcclxuJy5zcGxpdGxpbmVzKGtlZXBlbmRzPVRydWUpCisgICAgICBbYidhYiBjXG4nLCBiJ1xuJywgYidkZSBmZ1xyJywgYidrbFxyXG4nXQorCisgICBVbmxpa2UgOm1ldGg6YH5ieXRlcy5zcGxpdGAgd2hlbiBhIGRlbGltaXRlciBzdHJpbmcgKnNlcCogaXMgZ2l2ZW4sIHRoaXMKKyAgIG1ldGhvZCByZXR1cm5zIGFuIGVtcHR5IGxpc3QgZm9yIHRoZSBlbXB0eSBzdHJpbmcsIGFuZCBhIHRlcm1pbmFsIGxpbmUKKyAgIGJyZWFrIGRvZXMgbm90IHJlc3VsdCBpbiBhbiBleHRyYSBsaW5lOjoKKworICAgICAgPj4+IGIiIi5zcGxpdChiJ1xuJyksIGIiVHdvIGxpbmVzXG4iLnNwbGl0KGInXG4nKQorICAgICAgKFtiJyddLCBbYidUd28gbGluZXMnLCBiJyddKQorICAgICAgPj4+IGIiIi5zcGxpdGxpbmVzKCksIGIiT25lIGxpbmVcbiIuc3BsaXRsaW5lcygpCisgICAgICAoW10sIFtiJ09uZSBsaW5lJ10pCisKKworLi4gbWV0aG9kOjogYnl0ZXMuc3dhcGNhc2UoKQorICAgICAgICAgICAgYnl0ZWFycmF5LnN3YXBjYXNlKCkKKworICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc2VxdWVuY2Ugd2l0aCBhbGwgdGhlIGxvd2VyY2FzZSBBU0NJSSBjaGFyYWN0ZXJzCisgICBjb252ZXJ0ZWQgdG8gdGhlaXIgY29ycmVzcG9uZGluZyB1cHBlcmNhc2UgY291bnRlcnBhcnQgYW5kIHZpY2UtdmVyc2EuCisKKyAgIEZvciBleGFtcGxlOjoKKworICAgICAgPj4+IGInSGVsbG8gV29ybGQnLnN3YXBjYXNlKCkKKyAgICAgIGInaEVMTE8gd09STEQnCisKKyAgIExvd2VyY2FzZSBBU0NJSSBjaGFyYWN0ZXJzIGFyZSB0aG9zZSBieXRlIHZhbHVlcyBpbiB0aGUgc2VxdWVuY2UKKyAgIGBgYidhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eidgYC4gVXBwZXJjYXNlIEFTQ0lJIGNoYXJhY3RlcnMKKyAgIGFyZSB0aG9zZSBieXRlIHZhbHVlcyBpbiB0aGUgc2VxdWVuY2UgYGBiJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJ2BgLgorCisgICBVbmxpa2UgOmZ1bmM6YHN0ci5zd2FwY2FzZSgpYCwgaXQgaXMgYWx3YXlzIHRoZSBjYXNlIHRoYXQKKyAgIGBgYmluLnN3YXBjYXNlKCkuc3dhcGNhc2UoKSA9PSBiaW5gYCBmb3IgdGhlIGJpbmFyeSB2ZXJzaW9ucy4gQ2FzZQorICAgY29udmVyc2lvbnMgYXJlIHN5bW1ldHJpY2FsIGluIEFTQ0lJLCBldmVuIHRob3VnaCB0aGF0IGlzIG5vdCBnZW5lcmFsbHkKKyAgIHRydWUgZm9yIGFyYml0cmFyeSBVbmljb2RlIGNvZGUgcG9pbnRzLgorCisgICAuLiBub3RlOjoKKworICAgICAgVGhlIGJ5dGVhcnJheSB2ZXJzaW9uIG9mIHRoaXMgbWV0aG9kIGRvZXMgKm5vdCogb3BlcmF0ZSBpbiBwbGFjZSAtIGl0CisgICAgICBhbHdheXMgcHJvZHVjZXMgYSBuZXcgb2JqZWN0LCBldmVuIGlmIG5vIGNoYW5nZXMgd2VyZSBtYWRlLgorCisKKy4uIG1ldGhvZDo6IGJ5dGVzLnRpdGxlKCkKKyAgICAgICAgICAgIGJ5dGVhcnJheS50aXRsZSgpCisKKyAgIFJldHVybiBhIHRpdGxlY2FzZWQgdmVyc2lvbiBvZiB0aGUgYmluYXJ5IHNlcXVlbmNlIHdoZXJlIHdvcmRzIHN0YXJ0IHdpdGgKKyAgIGFuIHVwcGVyY2FzZSBBU0NJSSBjaGFyYWN0ZXIgYW5kIHRoZSByZW1haW5pbmcgY2hhcmFjdGVycyBhcmUgbG93ZXJjYXNlLgorICAgVW5jYXNlZCBieXRlIHZhbHVlcyBhcmUgbGVmdCB1bm1vZGlmaWVkLgorCisgICBGb3IgZXhhbXBsZTo6CisKKyAgICAgID4+PiBiJ0hlbGxvIHdvcmxkJy50aXRsZSgpCisgICAgICBiJ0hlbGxvIFdvcmxkJworCisgICBMb3dlcmNhc2UgQVNDSUkgY2hhcmFjdGVycyBhcmUgdGhvc2UgYnl0ZSB2YWx1ZXMgaW4gdGhlIHNlcXVlbmNlCisgICBgYGInYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonYGAuIFVwcGVyY2FzZSBBU0NJSSBjaGFyYWN0ZXJzCisgICBhcmUgdGhvc2UgYnl0ZSB2YWx1ZXMgaW4gdGhlIHNlcXVlbmNlIGBgYidBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWidgYC4KKyAgIEFsbCBvdGhlciBieXRlIHZhbHVlcyBhcmUgdW5jYXNlZC4KKworICAgVGhlIGFsZ29yaXRobSB1c2VzIGEgc2ltcGxlIGxhbmd1YWdlLWluZGVwZW5kZW50IGRlZmluaXRpb24gb2YgYSB3b3JkIGFzCisgICBncm91cHMgb2YgY29uc2VjdXRpdmUgbGV0dGVycy4gIFRoZSBkZWZpbml0aW9uIHdvcmtzIGluIG1hbnkgY29udGV4dHMgYnV0CisgICBpdCBtZWFucyB0aGF0IGFwb3N0cm9waGVzIGluIGNvbnRyYWN0aW9ucyBhbmQgcG9zc2Vzc2l2ZXMgZm9ybSB3b3JkCisgICBib3VuZGFyaWVzLCB3aGljaCBtYXkgbm90IGJlIHRoZSBkZXNpcmVkIHJlc3VsdDo6CisKKyAgICAgICAgPj4+IGIidGhleSdyZSBiaWxsJ3MgZnJpZW5kcyBmcm9tIHRoZSBVSyIudGl0bGUoKQorICAgICAgICBiIlRoZXknUmUgQmlsbCdTIEZyaWVuZHMgRnJvbSBUaGUgVWsiCisKKyAgIEEgd29ya2Fyb3VuZCBmb3IgYXBvc3Ryb3BoZXMgY2FuIGJlIGNvbnN0cnVjdGVkIHVzaW5nIHJlZ3VsYXIgZXhwcmVzc2lvbnM6OgorCisgICAgICAgID4+PiBpbXBvcnQgcmUKKyAgICAgICAgPj4+IGRlZiB0aXRsZWNhc2Uocyk6CisgICAgICAgIC4uLiAgICAgcmV0dXJuIHJlLnN1YihyYiJbQS1aYS16XSsoJ1tBLVphLXpdKyk/IiwKKyAgICAgICAgLi4uICAgICAgICAgICAgICAgICAgIGxhbWJkYSBtbzogbW8uZ3JvdXAoMClbMDoxXS51cHBlcigpICsKKyAgICAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW8uZ3JvdXAoMClbMTpdLmxvd2VyKCksCisgICAgICAgIC4uLiAgICAgICAgICAgICAgICAgICBzKQorICAgICAgICAuLi4KKyAgICAgICAgPj4+IHRpdGxlY2FzZShiInRoZXkncmUgYmlsbCdzIGZyaWVuZHMuIikKKyAgICAgICAgYiJUaGV5J3JlIEJpbGwncyBGcmllbmRzLiIKKworICAgLi4gbm90ZTo6CisKKyAgICAgIFRoZSBieXRlYXJyYXkgdmVyc2lvbiBvZiB0aGlzIG1ldGhvZCBkb2VzICpub3QqIG9wZXJhdGUgaW4gcGxhY2UgLSBpdAorICAgICAgYWx3YXlzIHByb2R1Y2VzIGEgbmV3IG9iamVjdCwgZXZlbiBpZiBubyBjaGFuZ2VzIHdlcmUgbWFkZS4KKworCisuLiBtZXRob2Q6OiBieXRlcy51cHBlcigpCisgICAgICAgICAgICBieXRlYXJyYXkudXBwZXIoKQorCisgICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzZXF1ZW5jZSB3aXRoIGFsbCB0aGUgbG93ZXJjYXNlIEFTQ0lJIGNoYXJhY3RlcnMKKyAgIGNvbnZlcnRlZCB0byB0aGVpciBjb3JyZXNwb25kaW5nIHVwcGVyY2FzZSBjb3VudGVycGFydC4KKworICAgRm9yIGV4YW1wbGU6OgorCisgICAgICA+Pj4gYidIZWxsbyBXb3JsZCcudXBwZXIoKQorICAgICAgYidIRUxMTyBXT1JMRCcKKworICAgTG93ZXJjYXNlIEFTQ0lJIGNoYXJhY3RlcnMgYXJlIHRob3NlIGJ5dGUgdmFsdWVzIGluIHRoZSBzZXF1ZW5jZQorICAgYGBiJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6J2BgLiBVcHBlcmNhc2UgQVNDSUkgY2hhcmFjdGVycworICAgYXJlIHRob3NlIGJ5dGUgdmFsdWVzIGluIHRoZSBzZXF1ZW5jZSBgYGInQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonYGAuCisKKyAgIC4uIG5vdGU6OgorCisgICAgICBUaGUgYnl0ZWFycmF5IHZlcnNpb24gb2YgdGhpcyBtZXRob2QgZG9lcyAqbm90KiBvcGVyYXRlIGluIHBsYWNlIC0gaXQKKyAgICAgIGFsd2F5cyBwcm9kdWNlcyBhIG5ldyBvYmplY3QsIGV2ZW4gaWYgbm8gY2hhbmdlcyB3ZXJlIG1hZGUuCisKKworLi4gbWV0aG9kOjogYnl0ZXMuemZpbGwod2lkdGgpCisgICAgICAgICAgICBieXRlYXJyYXkuemZpbGwod2lkdGgpCisKKyAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHNlcXVlbmNlIGxlZnQgZmlsbGVkIHdpdGggQVNDSUkgYGBiJzAnYGAgZGlnaXRzIHRvCisgICBtYWtlIGEgc2VxdWVuY2Ugb2YgbGVuZ3RoICp3aWR0aCouIEEgbGVhZGluZyBzaWduIHByZWZpeCAoYGBiJysnYGAvCisgICBgYGInLSdgYCBpcyBoYW5kbGVkIGJ5IGluc2VydGluZyB0aGUgcGFkZGluZyAqYWZ0ZXIqIHRoZSBzaWduIGNoYXJhY3RlcgorICAgcmF0aGVyIHRoYW4gYmVmb3JlLiBGb3IgOmNsYXNzOmBieXRlc2Agb2JqZWN0cywgdGhlIG9yaWdpbmFsIHNlcXVlbmNlIGlzCisgICByZXR1cm5lZCBpZiAqd2lkdGgqIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byBgYGxlbihzZXEpYGAuCisKKyAgIEZvciBleGFtcGxlOjoKKworICAgICAgPj4+IGIiNDIiLnpmaWxsKDUpCisgICAgICBiJzAwMDQyJworICAgICAgPj4+IGIiLTQyIi56ZmlsbCg1KQorICAgICAgYictMDA0MicKKworICAgLi4gbm90ZTo6CisKKyAgICAgIFRoZSBieXRlYXJyYXkgdmVyc2lvbiBvZiB0aGlzIG1ldGhvZCBkb2VzICpub3QqIG9wZXJhdGUgaW4gcGxhY2UgLSBpdAorICAgICAgYWx3YXlzIHByb2R1Y2VzIGEgbmV3IG9iamVjdCwgZXZlbiBpZiBubyBjaGFuZ2VzIHdlcmUgbWFkZS4KIAogCiAuLiBfdHlwZW1lbW9yeXZpZXc6CkBAIC0yNDYyLDYgKzMxOTksMTAgQEAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCiAgICAgICBPbmUtZGltZW5zaW9uYWwgbWVtb3J5dmlld3Mgd2l0aCBmb3JtYXRzICdCJywgJ2InIG9yICdjJyBhcmUgbm93IGhhc2hhYmxlLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgbWVtb3J5dmlldyBpcyBub3cgcmVnaXN0ZXJlZCBhdXRvbWF0aWNhbGx5IHdpdGgKKyAgICAgIDpjbGFzczpgY29sbGVjdGlvbnMuYWJjLlNlcXVlbmNlYAorCiAgICA6Y2xhc3M6YG1lbW9yeXZpZXdgIGhhcyBzZXZlcmFsIG1ldGhvZHM6CiAKICAgIC4uIG1ldGhvZDo6IF9fZXFfXyhleHBvcnRlcikKQEAgLTMwMjcsOCArMzc2OCw4IEBACiAgICBJZiBubyBwb3NpdGlvbmFsIGFyZ3VtZW50IGlzIGdpdmVuLCBhbiBlbXB0eSBkaWN0aW9uYXJ5IGlzIGNyZWF0ZWQuCiAgICBJZiBhIHBvc2l0aW9uYWwgYXJndW1lbnQgaXMgZ2l2ZW4gYW5kIGl0IGlzIGEgbWFwcGluZyBvYmplY3QsIGEgZGljdGlvbmFyeQogICAgaXMgY3JlYXRlZCB3aXRoIHRoZSBzYW1lIGtleS12YWx1ZSBwYWlycyBhcyB0aGUgbWFwcGluZyBvYmplY3QuICBPdGhlcndpc2UsCi0gICB0aGUgcG9zaXRpb25hbCBhcmd1bWVudCBtdXN0IGJlIGFuIDp0ZXJtOmBpdGVyYXRvcmAgb2JqZWN0LiAgRWFjaCBpdGVtIGluCi0gICB0aGUgaXRlcmFibGUgbXVzdCBpdHNlbGYgYmUgYW4gaXRlcmF0b3Igd2l0aCBleGFjdGx5IHR3byBvYmplY3RzLiAgVGhlCisgICB0aGUgcG9zaXRpb25hbCBhcmd1bWVudCBtdXN0IGJlIGFuIDp0ZXJtOmBpdGVyYWJsZWAgb2JqZWN0LiAgRWFjaCBpdGVtIGluCisgICB0aGUgaXRlcmFibGUgbXVzdCBpdHNlbGYgYmUgYW4gaXRlcmFibGUgd2l0aCBleGFjdGx5IHR3byBvYmplY3RzLiAgVGhlCiAgICBmaXJzdCBvYmplY3Qgb2YgZWFjaCBpdGVtIGJlY29tZXMgYSBrZXkgaW4gdGhlIG5ldyBkaWN0aW9uYXJ5LCBhbmQgdGhlCiAgICBzZWNvbmQgb2JqZWN0IHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlLiAgSWYgYSBrZXkgb2NjdXJzIG1vcmUgdGhhbiBvbmNlLCB0aGUKICAgIGxhc3QgdmFsdWUgZm9yIHRoYXQga2V5IGJlY29tZXMgdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWUgaW4gdGhlIG5ldwpAQCAtMzA2NiwxMSArMzgwNywxMyBAQAogICAgICAgUmV0dXJuIHRoZSBpdGVtIG9mICpkKiB3aXRoIGtleSAqa2V5Ki4gIFJhaXNlcyBhIDpleGM6YEtleUVycm9yYCBpZiAqa2V5KiBpcwogICAgICAgbm90IGluIHRoZSBtYXAuCiAKLSAgICAgIElmIGEgc3ViY2xhc3Mgb2YgZGljdCBkZWZpbmVzIGEgbWV0aG9kIDptZXRoOmBfX21pc3NpbmdfX2AsIGlmIHRoZSBrZXkgKmtleSoKKyAgICAgIC4uIGluZGV4OjogX19taXNzaW5nX18oKQorCisgICAgICBJZiBhIHN1YmNsYXNzIG9mIGRpY3QgZGVmaW5lcyBhIG1ldGhvZCA6bWV0aDpgX19taXNzaW5nX19gIGFuZCAqa2V5KgogICAgICAgaXMgbm90IHByZXNlbnQsIHRoZSBgYGRba2V5XWBgIG9wZXJhdGlvbiBjYWxscyB0aGF0IG1ldGhvZCB3aXRoIHRoZSBrZXkgKmtleSoKICAgICAgIGFzIGFyZ3VtZW50LiAgVGhlIGBgZFtrZXldYGAgb3BlcmF0aW9uIHRoZW4gcmV0dXJucyBvciByYWlzZXMgd2hhdGV2ZXIgaXMKLSAgICAgIHJldHVybmVkIG9yIHJhaXNlZCBieSB0aGUgYGBfX21pc3NpbmdfXyhrZXkpYGAgY2FsbCBpZiB0aGUga2V5IGlzIG5vdAotICAgICAgcHJlc2VudC4gTm8gb3RoZXIgb3BlcmF0aW9ucyBvciBtZXRob2RzIGludm9rZSA6bWV0aDpgX19taXNzaW5nX19gLiBJZgorICAgICAgcmV0dXJuZWQgb3IgcmFpc2VkIGJ5IHRoZSBgYF9fbWlzc2luZ19fKGtleSlgYCBjYWxsLgorICAgICAgTm8gb3RoZXIgb3BlcmF0aW9ucyBvciBtZXRob2RzIGludm9rZSA6bWV0aDpgX19taXNzaW5nX19gLiBJZgogICAgICAgOm1ldGg6YF9fbWlzc2luZ19fYCBpcyBub3QgZGVmaW5lZCwgOmV4YzpgS2V5RXJyb3JgIGlzIHJhaXNlZC4KICAgICAgIDptZXRoOmBfX21pc3NpbmdfX2AgbXVzdCBiZSBhIG1ldGhvZDsgaXQgY2Fubm90IGJlIGFuIGluc3RhbmNlIHZhcmlhYmxlOjoKIApAQCAtMzA4NCw4ICszODI3LDkgQEAKICAgICAgICAgICA+Pj4gY1sncmVkJ10KICAgICAgICAgICAxCiAKLSAgICAgIFNlZSA6Y2xhc3M6YGNvbGxlY3Rpb25zLkNvdW50ZXJgIGZvciBhIGNvbXBsZXRlIGltcGxlbWVudGF0aW9uIGluY2x1ZGluZwotICAgICAgb3RoZXIgbWV0aG9kcyBoZWxwZnVsIGZvciBhY2N1bXVsYXRpbmcgYW5kIG1hbmFnaW5nIHRhbGxpZXMuCisgICAgICBUaGUgZXhhbXBsZSBhYm92ZSBzaG93cyBwYXJ0IG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBvZgorICAgICAgOmNsYXNzOmBjb2xsZWN0aW9ucy5Db3VudGVyYC4gIEEgZGlmZmVyZW50IGBgX19taXNzaW5nX19gYCBtZXRob2QgaXMgdXNlZAorICAgICAgYnkgOmNsYXNzOmBjb2xsZWN0aW9ucy5kZWZhdWx0ZGljdGAuCiAKICAgIC4uIGRlc2NyaWJlOjogZFtrZXldID0gdmFsdWUKIApAQCAtMzE3NSw2ICszOTE5LDEwIEBACiAgICAgICBSZXR1cm4gYSBuZXcgdmlldyBvZiB0aGUgZGljdGlvbmFyeSdzIHZhbHVlcy4gIFNlZSB0aGUKICAgICAgIDpyZWY6YGRvY3VtZW50YXRpb24gb2YgdmlldyBvYmplY3RzIDxkaWN0LXZpZXdzPmAuCiAKKyAgIERpY3Rpb25hcmllcyBjb21wYXJlIGVxdWFsIGlmIGFuZCBvbmx5IGlmIHRoZXkgaGF2ZSB0aGUgc2FtZSBgYChrZXksCisgICB2YWx1ZSlgYCBwYWlycy4gT3JkZXIgY29tcGFyaXNvbnMgKCc8JywgJzw9JywgJz49JywgJz4nKSByYWlzZQorICAgOmV4YzpgVHlwZUVycm9yYC4KKwogLi4gc2VlYWxzbzo6CiAgICA6Y2xhc3M6YHR5cGVzLk1hcHBpbmdQcm94eVR5cGVgIGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSBhIHJlYWQtb25seSB2aWV3CiAgICBvZiBhIDpjbGFzczpgZGljdGAuCkBAIC0zMzEwLDggKzQwNTgsOCBAQAogICAgVGhlIGV4Y2VwdGlvbiBwYXNzZWQgaW4gc2hvdWxkIG5ldmVyIGJlIHJlcmFpc2VkIGV4cGxpY2l0bHkgLSBpbnN0ZWFkLCB0aGlzCiAgICBtZXRob2Qgc2hvdWxkIHJldHVybiBhIGZhbHNlIHZhbHVlIHRvIGluZGljYXRlIHRoYXQgdGhlIG1ldGhvZCBjb21wbGV0ZWQKICAgIHN1Y2Nlc3NmdWxseSBhbmQgZG9lcyBub3Qgd2FudCB0byBzdXBwcmVzcyB0aGUgcmFpc2VkIGV4Y2VwdGlvbi4gVGhpcyBhbGxvd3MKLSAgIGNvbnRleHQgbWFuYWdlbWVudCBjb2RlIChzdWNoIGFzIGBgY29udGV4dGxpYi5uZXN0ZWRgYCkgdG8gZWFzaWx5IGRldGVjdCB3aGV0aGVyCi0gICBvciBub3QgYW4gOm1ldGg6YF9fZXhpdF9fYCBtZXRob2QgaGFzIGFjdHVhbGx5IGZhaWxlZC4KKyAgIGNvbnRleHQgbWFuYWdlbWVudCBjb2RlIHRvIGVhc2lseSBkZXRlY3Qgd2hldGhlciBvciBub3QgYW4gOm1ldGg6YF9fZXhpdF9fYAorICAgbWV0aG9kIGhhcyBhY3R1YWxseSBmYWlsZWQuCiAKIFB5dGhvbiBkZWZpbmVzIHNldmVyYWwgY29udGV4dCBtYW5hZ2VycyB0byBzdXBwb3J0IGVhc3kgdGhyZWFkIHN5bmNocm9uaXNhdGlvbiwKIHByb21wdCBjbG9zdXJlIG9mIGZpbGVzIG9yIG90aGVyIG9iamVjdHMsIGFuZCBzaW1wbGVyIG1hbmlwdWxhdGlvbiBvZiB0aGUgYWN0aXZlCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9zdHJpbmcucnN0IGIvRG9jL2xpYnJhcnkvc3RyaW5nLnJzdAppbmRleCBlNWJhYjY4Li4xOWJkYjIxIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9zdHJpbmcucnN0CisrKyBiL0RvYy9saWJyYXJ5L3N0cmluZy5yc3QKQEAgLTQ3OCwxMCArNDc4LDEyIEBACiAgICB8IGBgJyUnYGAgfCBQZXJjZW50YWdlLiBNdWx0aXBsaWVzIHRoZSBudW1iZXIgYnkgMTAwIGFuZCBkaXNwbGF5cyAgICB8CiAgICB8ICAgICAgICAgfCBpbiBmaXhlZCAoYGAnZidgYCkgZm9ybWF0LCBmb2xsb3dlZCBieSBhIHBlcmNlbnQgc2lnbi4gICB8CiAgICArLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gICB8IE5vbmUgICAgfCBTaW1pbGFyIHRvIGBgJ2cnYGAsIGV4Y2VwdCB3aXRoIGF0IGxlYXN0IG9uZSBkaWdpdCBwYXN0ICB8Ci0gICB8ICAgICAgICAgfCB0aGUgZGVjaW1hbCBwb2ludCBhbmQgYSBkZWZhdWx0IHByZWNpc2lvbiBvZiAxMi4gVGhpcyBpcyB8Ci0gICB8ICAgICAgICAgfCBpbnRlbmRlZCB0byBtYXRjaCA6ZnVuYzpgc3RyYCwgZXhjZXB0IHlvdSBjYW4gYWRkIHRoZSAgICB8Ci0gICB8ICAgICAgICAgfCBvdGhlciBmb3JtYXQgbW9kaWZpZXJzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICB8IE5vbmUgICAgfCBTaW1pbGFyIHRvIGBgJ2cnYGAsIGV4Y2VwdCB0aGF0IGZpeGVkLXBvaW50IG5vdGF0aW9uLCAgICB8CisgICB8ICAgICAgICAgfCB3aGVuIHVzZWQsIGhhcyBhdCBsZWFzdCBvbmUgZGlnaXQgcGFzdCB0aGUgZGVjaW1hbCBwb2ludC58CisgICB8ICAgICAgICAgfCBUaGUgZGVmYXVsdCBwcmVjaXNpb24gaXMgYXMgaGlnaCBhcyBuZWVkZWQgdG8gcmVwcmVzZW50ICB8CisgICB8ICAgICAgICAgfCB0aGUgcGFydGljdWxhciB2YWx1ZS4gVGhlIG92ZXJhbGwgZWZmZWN0IGlzIHRvIG1hdGNoIHRoZSB8CisgICB8ICAgICAgICAgfCBvdXRwdXQgb2YgOmZ1bmM6YHN0cmAgYXMgYWx0ZXJlZCBieSB0aGUgb3RoZXIgZm9ybWF0ICAgICB8CisgICB8ICAgICAgICAgfCBtb2RpZmllcnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgICArLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAKIApAQCAtNjM4LDEyICs2NDAsMTQgQEAKICogYGAkJGBgIGlzIGFuIGVzY2FwZTsgaXQgaXMgcmVwbGFjZWQgd2l0aCBhIHNpbmdsZSBgYCRgYC4KIAogKiBgYCRpZGVudGlmaWVyYGAgbmFtZXMgYSBzdWJzdGl0dXRpb24gcGxhY2Vob2xkZXIgbWF0Y2hpbmcgYSBtYXBwaW5nIGtleSBvZgotICBgYCJpZGVudGlmaWVyImBgLiAgQnkgZGVmYXVsdCwgYGAiaWRlbnRpZmllciJgYCBtdXN0IHNwZWxsIGEgUHl0aG9uCi0gIGlkZW50aWZpZXIuICBUaGUgZmlyc3Qgbm9uLWlkZW50aWZpZXIgY2hhcmFjdGVyIGFmdGVyIHRoZSBgYCRgYCBjaGFyYWN0ZXIKLSAgdGVybWluYXRlcyB0aGlzIHBsYWNlaG9sZGVyIHNwZWNpZmljYXRpb24uCisgIGBgImlkZW50aWZpZXIiYGAuICBCeSBkZWZhdWx0LCBgYCJpZGVudGlmaWVyImBgIGlzIHJlc3RyaWN0ZWQgdG8gYW55CisgIGNhc2UtaW5zZW5zaXRpdmUgQVNDSUkgYWxwaGFudW1lcmljIHN0cmluZyAoaW5jbHVkaW5nIHVuZGVyc2NvcmVzKSB0aGF0CisgIHN0YXJ0cyB3aXRoIGFuIHVuZGVyc2NvcmUgb3IgQVNDSUkgbGV0dGVyLiAgVGhlIGZpcnN0IG5vbi1pZGVudGlmaWVyCisgIGNoYXJhY3RlciBhZnRlciB0aGUgYGAkYGAgY2hhcmFjdGVyIHRlcm1pbmF0ZXMgdGhpcyBwbGFjZWhvbGRlcgorICBzcGVjaWZpY2F0aW9uLgogCi0qIGBgJHtpZGVudGlmaWVyfWBgIGlzIGVxdWl2YWxlbnQgdG8gYGAkaWRlbnRpZmllcmBgLiAgSXQgaXMgcmVxdWlyZWQgd2hlbiB2YWxpZAotICBpZGVudGlmaWVyIGNoYXJhY3RlcnMgZm9sbG93IHRoZSBwbGFjZWhvbGRlciBidXQgYXJlIG5vdCBwYXJ0IG9mIHRoZQorKiBgYCR7aWRlbnRpZmllcn1gYCBpcyBlcXVpdmFsZW50IHRvIGBgJGlkZW50aWZpZXJgYC4gIEl0IGlzIHJlcXVpcmVkIHdoZW4KKyAgdmFsaWQgaWRlbnRpZmllciBjaGFyYWN0ZXJzIGZvbGxvdyB0aGUgcGxhY2Vob2xkZXIgYnV0IGFyZSBub3QgcGFydCBvZiB0aGUKICAgcGxhY2Vob2xkZXIsIHN1Y2ggYXMgYGAiJHtub3VufWlmaWNhdGlvbiJgYC4KIAogQW55IG90aGVyIGFwcGVhcmFuY2Ugb2YgYGAkYGAgaW4gdGhlIHN0cmluZyB3aWxsIHJlc3VsdCBpbiBhIDpleGM6YFZhbHVlRXJyb3JgCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9zdHJ1Y3QucnN0IGIvRG9jL2xpYnJhcnkvc3RydWN0LnJzdAppbmRleCBkZGUzMmI5Li4xMmQ0ZmJjIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9zdHJ1Y3QucnN0CisrKyBiL0RvYy9saWJyYXJ5L3N0cnVjdC5yc3QKQEAgLTI0LDYgKzI0LDE0IEBACiAgICBvciBvbWl0IGltcGxpY2l0IHBhZCBieXRlcywgdXNlIGBgc3RhbmRhcmRgYCBzaXplIGFuZCBhbGlnbm1lbnQgaW5zdGVhZCBvZgogICAgYGBuYXRpdmVgYCBzaXplIGFuZCBhbGlnbm1lbnQ6IHNlZSA6cmVmOmBzdHJ1Y3QtYWxpZ25tZW50YCBmb3IgZGV0YWlscy4KIAorU2V2ZXJhbCA6bW9kOmBzdHJ1Y3RgIGZ1bmN0aW9ucyAoYW5kIG1ldGhvZHMgb2YgOmNsYXNzOmBTdHJ1Y3RgKSB0YWtlIGEgKmJ1ZmZlcioKK2FyZ3VtZW50LiAgVGhpcyByZWZlcnMgdG8gb2JqZWN0cyB0aGF0IGltcGxlbWVudCB0aGUgOnJlZjpgYnVmZmVyb2JqZWN0c2AgYW5kCitwcm92aWRlIGVpdGhlciBhIHJlYWRhYmxlIG9yIHJlYWQtd3JpdGFibGUgYnVmZmVyLiAgVGhlIG1vc3QgY29tbW9uIHR5cGVzIHVzZWQKK2ZvciB0aGF0IHB1cnBvc2UgYXJlIDpjbGFzczpgYnl0ZXNgIGFuZCA6Y2xhc3M6YGJ5dGVhcnJheWAsIGJ1dCBtYW55IG90aGVyIHR5cGVzCit0aGF0IGNhbiBiZSB2aWV3ZWQgYXMgYW4gYXJyYXkgb2YgYnl0ZXMgaW1wbGVtZW50IHRoZSBidWZmZXIgcHJvdG9jb2wsIHNvIHRoYXQKK3RoZXkgY2FuIGJlIHJlYWQvZmlsbGVkIHdpdGhvdXQgYWRkaXRpb25hbCBjb3B5aW5nIGZyb20gYSA6Y2xhc3M6YGJ5dGVzYCBvYmplY3QuCisKKwogRnVuY3Rpb25zIGFuZCBFeGNlcHRpb25zCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtNDcsNyArNTUsNyBAQAogCiAgICBQYWNrIHRoZSB2YWx1ZXMgKnYxKiwgKnYyKiwgLi4uIGFjY29yZGluZyB0byB0aGUgZm9ybWF0IHN0cmluZyAqZm10KiBhbmQKICAgIHdyaXRlIHRoZSBwYWNrZWQgYnl0ZXMgaW50byB0aGUgd3JpdGFibGUgYnVmZmVyICpidWZmZXIqIHN0YXJ0aW5nIGF0Ci0gICBwb3NpdGlvbiAqb2Zmc2V0Ki4gTm90ZSB0aGF0ICpvZmZzZXQqIGlzIGEgcmVxdWlyZWQgYXJndW1lbnQuCisgICBwb3NpdGlvbiAqb2Zmc2V0Ki4gIE5vdGUgdGhhdCAqb2Zmc2V0KiBpcyBhIHJlcXVpcmVkIGFyZ3VtZW50LgogCiAKIC4uIGZ1bmN0aW9uOjogdW5wYWNrKGZtdCwgYnVmZmVyKQpAQCAtNjYsNiArNzQsMTkgQEAKICAgIGZvcm1hdCAoYGBsZW4oYnVmZmVyW29mZnNldDpdKWBgIG11c3QgYmUgYXQgbGVhc3QgYGBjYWxjc2l6ZShmbXQpYGApLgogCiAKKy4uIGZ1bmN0aW9uOjogaXRlcl91bnBhY2soZm10LCBidWZmZXIpCisKKyAgIEl0ZXJhdGl2ZWx5IHVucGFjayBmcm9tIHRoZSBidWZmZXIgKmJ1ZmZlciogYWNjb3JkaW5nIHRvIHRoZSBmb3JtYXQKKyAgIHN0cmluZyAqZm10Ki4gIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhbiBpdGVyYXRvciB3aGljaCB3aWxsIHJlYWQKKyAgIGVxdWFsbHktc2l6ZWQgY2h1bmtzIGZyb20gdGhlIGJ1ZmZlciB1bnRpbCBhbGwgaXRzIGNvbnRlbnRzIGhhdmUgYmVlbgorICAgY29uc3VtZWQuICBUaGUgYnVmZmVyJ3Mgc2l6ZSBpbiBieXRlcyBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgdGhlIGFtb3VudAorICAgb2YgZGF0YSByZXF1aXJlZCBieSB0aGUgZm9ybWF0LCBhcyByZWZsZWN0ZWQgYnkgOmZ1bmM6YGNhbGNzaXplYC4KKworICAgRWFjaCBpdGVyYXRpb24geWllbGRzIGEgdHVwbGUgYXMgc3BlY2lmaWVkIGJ5IHRoZSBmb3JtYXQgc3RyaW5nLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiAuLiBmdW5jdGlvbjo6IGNhbGNzaXplKGZtdCkKIAogICAgUmV0dXJuIHRoZSBzaXplIG9mIHRoZSBzdHJ1Y3QgKGFuZCBoZW5jZSBvZiB0aGUgYnl0ZXMgb2JqZWN0IHByb2R1Y2VkIGJ5CkBAIC0zODgsNiArNDA5LDEzIEBACiAgICAgICAoYGBsZW4oYnVmZmVyW29mZnNldDpdKWBgIG11c3QgYmUgYXQgbGVhc3QgOmF0dHI6YHNlbGYuc2l6ZWApLgogCiAKKyAgIC4uIG1ldGhvZDo6IGl0ZXJfdW5wYWNrKGJ1ZmZlcikKKworICAgICAgSWRlbnRpY2FsIHRvIHRoZSA6ZnVuYzpgaXRlcl91bnBhY2tgIGZ1bmN0aW9uLCB1c2luZyB0aGUgY29tcGlsZWQgZm9ybWF0LgorICAgICAgKGBgbGVuKGJ1ZmZlcilgYCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgOmF0dHI6YHNlbGYuc2l6ZWApLgorCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogICAgLi4gYXR0cmlidXRlOjogZm9ybWF0CiAKICAgICAgIFRoZSBmb3JtYXQgc3RyaW5nIHVzZWQgdG8gY29uc3RydWN0IHRoaXMgU3RydWN0IG9iamVjdC4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3N1YnByb2Nlc3MucnN0IGIvRG9jL2xpYnJhcnkvc3VicHJvY2Vzcy5yc3QKaW5kZXggYTllZTk3MC4uOWFjODg4MiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvc3VicHJvY2Vzcy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvc3VicHJvY2Vzcy5yc3QKQEAgLTU0LDE4ICs1NCwxMiBAQAogICAgICAgPj4+IHN1YnByb2Nlc3MuY2FsbCgiZXhpdCAxIiwgc2hlbGw9VHJ1ZSkKICAgICAgIDEKIAotICAgLi4gd2FybmluZzo6Ci0KLSAgICAgIEludm9raW5nIHRoZSBzeXN0ZW0gc2hlbGwgd2l0aCBgYHNoZWxsPVRydWVgYCBjYW4gYmUgYSBzZWN1cml0eSBoYXphcmQKLSAgICAgIGlmIGNvbWJpbmVkIHdpdGggdW50cnVzdGVkIGlucHV0LiBTZWUgdGhlIHdhcm5pbmcgdW5kZXIKLSAgICAgIDpyZWY6YGZyZXF1ZW50bHktdXNlZC1hcmd1bWVudHNgIGZvciBkZXRhaWxzLgotCiAgICAuLiBub3RlOjoKIAotICAgICAgRG8gbm90IHVzZSBgYHN0ZG91dD1QSVBFYGAgb3IgYGBzdGRlcnI9UElQRWBgIHdpdGggdGhpcyBmdW5jdGlvbi4gQXMKLSAgICAgIHRoZSBwaXBlcyBhcmUgbm90IGJlaW5nIHJlYWQgaW4gdGhlIGN1cnJlbnQgcHJvY2VzcywgdGhlIGNoaWxkCi0gICAgICBwcm9jZXNzIG1heSBibG9jayBpZiBpdCBnZW5lcmF0ZXMgZW5vdWdoIG91dHB1dCB0byBhIHBpcGUgdG8gZmlsbCB1cAotICAgICAgdGhlIE9TIHBpcGUgYnVmZmVyLgorICAgICAgRG8gbm90IHVzZSBgYHN0ZG91dD1QSVBFYGAgb3IgYGBzdGRlcnI9UElQRWBgIHdpdGggdGhpcworICAgICAgZnVuY3Rpb24uICBUaGUgY2hpbGQgcHJvY2VzcyB3aWxsIGJsb2NrIGlmIGl0IGdlbmVyYXRlcyBlbm91Z2gKKyAgICAgIG91dHB1dCB0byBhIHBpcGUgdG8gZmlsbCB1cCB0aGUgT1MgcGlwZSBidWZmZXIgYXMgdGhlIHBpcGVzIGFyZQorICAgICAgbm90IGJlaW5nIHJlYWQgZnJvbS4KIAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKICAgICAgICp0aW1lb3V0KiB3YXMgYWRkZWQuCkBAIC05OSwyNCArOTMsMTggQEAKICAgICAgICAgIC4uLgogICAgICAgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3I6IENvbW1hbmQgJ2V4aXQgMScgcmV0dXJuZWQgbm9uLXplcm8gZXhpdCBzdGF0dXMgMQogCi0gICAuLiB3YXJuaW5nOjoKLQotICAgICAgSW52b2tpbmcgdGhlIHN5c3RlbSBzaGVsbCB3aXRoIGBgc2hlbGw9VHJ1ZWBgIGNhbiBiZSBhIHNlY3VyaXR5IGhhemFyZAotICAgICAgaWYgY29tYmluZWQgd2l0aCB1bnRydXN0ZWQgaW5wdXQuIFNlZSB0aGUgd2FybmluZyB1bmRlcgotICAgICAgOnJlZjpgZnJlcXVlbnRseS11c2VkLWFyZ3VtZW50c2AgZm9yIGRldGFpbHMuCi0KICAgIC4uIG5vdGU6OgogCi0gICAgICBEbyBub3QgdXNlIGBgc3Rkb3V0PVBJUEVgYCBvciBgYHN0ZGVycj1QSVBFYGAgd2l0aCB0aGlzIGZ1bmN0aW9uLiBBcwotICAgICAgdGhlIHBpcGVzIGFyZSBub3QgYmVpbmcgcmVhZCBpbiB0aGUgY3VycmVudCBwcm9jZXNzLCB0aGUgY2hpbGQKLSAgICAgIHByb2Nlc3MgbWF5IGJsb2NrIGlmIGl0IGdlbmVyYXRlcyBlbm91Z2ggb3V0cHV0IHRvIGEgcGlwZSB0byBmaWxsIHVwCi0gICAgICB0aGUgT1MgcGlwZSBidWZmZXIuCisgICAgICBEbyBub3QgdXNlIGBgc3Rkb3V0PVBJUEVgYCBvciBgYHN0ZGVycj1QSVBFYGAgd2l0aCB0aGlzCisgICAgICBmdW5jdGlvbi4gIFRoZSBjaGlsZCBwcm9jZXNzIHdpbGwgYmxvY2sgaWYgaXQgZ2VuZXJhdGVzIGVub3VnaAorICAgICAgb3V0cHV0IHRvIGEgcGlwZSB0byBmaWxsIHVwIHRoZSBPUyBwaXBlIGJ1ZmZlciBhcyB0aGUgcGlwZXMgYXJlCisgICAgICBub3QgYmVpbmcgcmVhZCBmcm9tLgogCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMwogICAgICAgKnRpbWVvdXQqIHdhcyBhZGRlZC4KIAogCi0uLiBmdW5jdGlvbjo6IGNoZWNrX291dHB1dChhcmdzLCAqLCBzdGRpbj1Ob25lLCBzdGRlcnI9Tm9uZSwgc2hlbGw9RmFsc2UsIHVuaXZlcnNhbF9uZXdsaW5lcz1GYWxzZSwgdGltZW91dD1Ob25lKQorLi4gZnVuY3Rpb246OiBjaGVja19vdXRwdXQoYXJncywgKiwgaW5wdXQ9Tm9uZSwgc3RkaW49Tm9uZSwgc3RkZXJyPU5vbmUsIHNoZWxsPUZhbHNlLCB1bml2ZXJzYWxfbmV3bGluZXM9RmFsc2UsIHRpbWVvdXQ9Tm9uZSkKIAogICAgUnVuIGNvbW1hbmQgd2l0aCBhcmd1bWVudHMgYW5kIHJldHVybiBpdHMgb3V0cHV0LgogCkBAIC0xMjksMTUgKzExNywyMSBAQAogICAgaW4gOnJlZjpgZnJlcXVlbnRseS11c2VkLWFyZ3VtZW50c2AgKGhlbmNlIHRoZSB1c2Ugb2Yga2V5d29yZC1vbmx5IG5vdGF0aW9uCiAgICBpbiB0aGUgYWJicmV2aWF0ZWQgc2lnbmF0dXJlKS4gVGhlIGZ1bGwgZnVuY3Rpb24gc2lnbmF0dXJlIGlzIGxhcmdlbHkgdGhlCiAgICBzYW1lIGFzIHRoYXQgb2YgdGhlIDpjbGFzczpgUG9wZW5gIGNvbnN0cnVjdG9yIC0gdGhpcyBmdW5jdGlvbnMgcGFzc2VzIGFsbAotICAgc3VwcGxpZWQgYXJndW1lbnRzIG90aGVyIHRoYW4gKnRpbWVvdXQqIGRpcmVjdGx5IHRocm91Z2ggdG8gdGhhdCBpbnRlcmZhY2UuCi0gICBJbiBhZGRpdGlvbiwgKnN0ZG91dCogaXMgbm90IHBlcm1pdHRlZCBhcyBhbiBhcmd1bWVudCwgYXMgaXQgaXMgdXNlZAotICAgaW50ZXJuYWxseSB0byBjb2xsZWN0IHRoZSBvdXRwdXQgZnJvbSB0aGUgc3VicHJvY2Vzcy4KKyAgIHN1cHBsaWVkIGFyZ3VtZW50cyBvdGhlciB0aGFuICppbnB1dCogYW5kICp0aW1lb3V0KiBkaXJlY3RseSB0aHJvdWdoIHRvCisgICB0aGF0IGludGVyZmFjZS4gIEluIGFkZGl0aW9uLCAqc3Rkb3V0KiBpcyBub3QgcGVybWl0dGVkIGFzIGFuIGFyZ3VtZW50LCBhcworICAgaXQgaXMgdXNlZCBpbnRlcm5hbGx5IHRvIGNvbGxlY3QgdGhlIG91dHB1dCBmcm9tIHRoZSBzdWJwcm9jZXNzLgogCiAgICBUaGUgKnRpbWVvdXQqIGFyZ3VtZW50IGlzIHBhc3NlZCB0byA6bWV0aDpgUG9wZW4ud2FpdGAuIElmIHRoZSB0aW1lb3V0CiAgICBleHBpcmVzLCB0aGUgY2hpbGQgcHJvY2VzcyB3aWxsIGJlIGtpbGxlZCBhbmQgdGhlbiB3YWl0ZWQgZm9yIGFnYWluLiAgVGhlCiAgICA6ZXhjOmBUaW1lb3V0RXhwaXJlZGAgZXhjZXB0aW9uIHdpbGwgYmUgcmUtcmFpc2VkIGFmdGVyIHRoZSBjaGlsZCBwcm9jZXNzCiAgICBoYXMgdGVybWluYXRlZC4KIAorICAgVGhlICppbnB1dCogYXJndW1lbnQgaXMgcGFzc2VkIHRvIDptZXRoOmBQb3Blbi5jb21tdW5pY2F0ZWAgYW5kIHRodXMgdG8gdGhlCisgICBzdWJwcm9jZXNzJ3Mgc3RkaW4uICBJZiB1c2VkIGl0IG11c3QgYmUgYSBieXRlIHNlcXVlbmNlLCBvciBhIHN0cmluZyBpZgorICAgYGB1bml2ZXJzYWxfbmV3bGluZXM9VHJ1ZWBgLiAgV2hlbiB1c2VkLCB0aGUgaW50ZXJuYWwgOmNsYXNzOmBQb3BlbmAgb2JqZWN0CisgICBpcyBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgd2l0aCBgYHN0ZGluPVBJUEVgYCwgYW5kIHRoZSAqc3RkaW4qIGFyZ3VtZW50IG1heQorICAgbm90IGJlIHVzZWQgYXMgd2VsbC4KKwogICAgRXhhbXBsZXM6OgogCiAgICAgICA+Pj4gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoWyJlY2hvIiwgIkhlbGxvIFdvcmxkISJdKQpAQCAtMTQ2LDYgKzE0MCwxMCBAQAogICAgICAgPj4+IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KFsiZWNobyIsICJIZWxsbyBXb3JsZCEiXSwgdW5pdmVyc2FsX25ld2xpbmVzPVRydWUpCiAgICAgICAnSGVsbG8gV29ybGQhXG4nCiAKKyAgICAgID4+PiBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChbInNlZCIsICItZSIsICJzL2Zvby9iYXIvIl0sCisgICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQ9YiJ3aGVuIGluIHRoZSBjb3Vyc2Ugb2YgZm9vbWFuIGV2ZW50c1xuIikKKyAgICAgIGInd2hlbiBpbiB0aGUgY291cnNlIG9mIGJhcm1hbiBldmVudHNcbicKKwogICAgICAgPj4+IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KCJleGl0IDEiLCBzaGVsbD1UcnVlKQogICAgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogICAgICAgICAgLi4uCkBAIC0xNjcsMjUgKzE2NSwyMCBAQAogICAgICAgLi4uICAgICBzaGVsbD1UcnVlKQogICAgICAgJ2xzOiBub25fZXhpc3RlbnRfZmlsZTogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeVxuJwogCi0gICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKLQotICAgLi4KLQotICAgLi4gd2FybmluZzo6Ci0KLSAgICAgIEludm9raW5nIHRoZSBzeXN0ZW0gc2hlbGwgd2l0aCBgYHNoZWxsPVRydWVgYCBjYW4gYmUgYSBzZWN1cml0eSBoYXphcmQKLSAgICAgIGlmIGNvbWJpbmVkIHdpdGggdW50cnVzdGVkIGlucHV0LiBTZWUgdGhlIHdhcm5pbmcgdW5kZXIKLSAgICAgIDpyZWY6YGZyZXF1ZW50bHktdXNlZC1hcmd1bWVudHNgIGZvciBkZXRhaWxzLgotCiAgICAuLiBub3RlOjoKIAotICAgICAgRG8gbm90IHVzZSBgYHN0ZGVycj1QSVBFYGAgd2l0aCB0aGlzIGZ1bmN0aW9uLiBBcyB0aGUgcGlwZSBpcyBub3QgYmVpbmcKLSAgICAgIHJlYWQgaW4gdGhlIGN1cnJlbnQgcHJvY2VzcywgdGhlIGNoaWxkIHByb2Nlc3MgbWF5IGJsb2NrIGlmIGl0Ci0gICAgICBnZW5lcmF0ZXMgZW5vdWdoIG91dHB1dCB0byB0aGUgcGlwZSB0byBmaWxsIHVwIHRoZSBPUyBwaXBlIGJ1ZmZlci4KKyAgICAgIERvIG5vdCB1c2UgYGBzdGRvdXQ9UElQRWBgIG9yIGBgc3RkZXJyPVBJUEVgYCB3aXRoIHRoaXMKKyAgICAgIGZ1bmN0aW9uLiAgVGhlIGNoaWxkIHByb2Nlc3Mgd2lsbCBibG9jayBpZiBpdCBnZW5lcmF0ZXMgZW5vdWdoCisgICAgICBvdXRwdXQgdG8gYSBwaXBlIHRvIGZpbGwgdXAgdGhlIE9TIHBpcGUgYnVmZmVyIGFzIHRoZSBwaXBlcyBhcmUKKyAgICAgIG5vdCBiZWluZyByZWFkIGZyb20uCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMQogCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMwogICAgICAgKnRpbWVvdXQqIHdhcyBhZGRlZC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgICppbnB1dCogd2FzIGFkZGVkLgogCiAuLiBkYXRhOjogREVWTlVMTAogCkBAIC0yMDAsNyArMTkzLDcgQEAKIAogICAgU3BlY2lhbCB2YWx1ZSB0aGF0IGNhbiBiZSB1c2VkIGFzIHRoZSAqc3RkaW4qLCAqc3Rkb3V0KiBvciAqc3RkZXJyKiBhcmd1bWVudAogICAgdG8gOmNsYXNzOmBQb3BlbmAgYW5kIGluZGljYXRlcyB0aGF0IGEgcGlwZSB0byB0aGUgc3RhbmRhcmQgc3RyZWFtIHNob3VsZCBiZQotICAgb3BlbmVkLgorICAgb3BlbmVkLiAgTW9zdCB1c2VmdWwgd2l0aCA6bWV0aDpgUG9wZW4uY29tbXVuaWNhdGVgLgogCiAKIC4uIGRhdGE6OiBTVERPVVQKQEAgLTMyNiwyOCArMzE5LDkgQEAKICAgICAgIGluc3RlYWQgb2YgYGBsb2NhbGUuZ2V0cHJlZmVycmVkZW5jb2RpbmcoKWBgLiAgU2VlIHRoZQogICAgICAgOmNsYXNzOmBpby5UZXh0SU9XcmFwcGVyYCBjbGFzcyBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGlzIGNoYW5nZS4KIAotICAgLi4gd2FybmluZzo6CisgICAuLiBub3RlOjoKIAotICAgICAgRXhlY3V0aW5nIHNoZWxsIGNvbW1hbmRzIHRoYXQgaW5jb3Jwb3JhdGUgdW5zYW5pdGl6ZWQgaW5wdXQgZnJvbSBhbgotICAgICAgdW50cnVzdGVkIHNvdXJjZSBtYWtlcyBhIHByb2dyYW0gdnVsbmVyYWJsZSB0byBgc2hlbGwgaW5qZWN0aW9uCi0gICAgICA8aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TaGVsbF9pbmplY3Rpb24jU2hlbGxfaW5qZWN0aW9uPmBfLAotICAgICAgYSBzZXJpb3VzIHNlY3VyaXR5IGZsYXcgd2hpY2ggY2FuIHJlc3VsdCBpbiBhcmJpdHJhcnkgY29tbWFuZCBleGVjdXRpb24uCi0gICAgICBGb3IgdGhpcyByZWFzb24sIHRoZSB1c2Ugb2YgYGBzaGVsbD1UcnVlYGAgaXMgKipzdHJvbmdseSBkaXNjb3VyYWdlZCoqCi0gICAgICBpbiBjYXNlcyB3aGVyZSB0aGUgY29tbWFuZCBzdHJpbmcgaXMgY29uc3RydWN0ZWQgZnJvbSBleHRlcm5hbCBpbnB1dDo6Ci0KLSAgICAgICAgID4+PiBmcm9tIHN1YnByb2Nlc3MgaW1wb3J0IGNhbGwKLSAgICAgICAgID4+PiBmaWxlbmFtZSA9IGlucHV0KCJXaGF0IGZpbGUgd291bGQgeW91IGxpa2UgdG8gZGlzcGxheT9cbiIpCi0gICAgICAgICBXaGF0IGZpbGUgd291bGQgeW91IGxpa2UgdG8gZGlzcGxheT8KLSAgICAgICAgIG5vbl9leGlzdGVudDsgcm0gLXJmIC8gIwotICAgICAgICAgPj4+IGNhbGwoImNhdCAiICsgZmlsZW5hbWUsIHNoZWxsPVRydWUpICMgVWgtb2guIFRoaXMgd2lsbCBlbmQgYmFkbHkuLi4KLQotICAgICAgYGBzaGVsbD1GYWxzZWBgIGRpc2FibGVzIGFsbCBzaGVsbCBiYXNlZCBmZWF0dXJlcywgYnV0IGRvZXMgbm90IHN1ZmZlcgotICAgICAgZnJvbSB0aGlzIHZ1bG5lcmFiaWxpdHk7IHNlZSB0aGUgTm90ZSBpbiB0aGUgOmNsYXNzOmBQb3BlbmAgY29uc3RydWN0b3IKLSAgICAgIGRvY3VtZW50YXRpb24gZm9yIGhlbHBmdWwgaGludHMgaW4gZ2V0dGluZyBgYHNoZWxsPUZhbHNlYGAgdG8gd29yay4KLQotICAgICAgV2hlbiB1c2luZyBgYHNoZWxsPVRydWVgYCwgOmZ1bmM6YHNobGV4LnF1b3RlYCBjYW4gYmUgdXNlZCB0byBwcm9wZXJseQotICAgICAgZXNjYXBlIHdoaXRlc3BhY2UgYW5kIHNoZWxsIG1ldGFjaGFyYWN0ZXJzIGluIHN0cmluZ3MgdGhhdCBhcmUgZ29pbmcgdG8KLSAgICAgIGJlIHVzZWQgdG8gY29uc3RydWN0IHNoZWxsIGNvbW1hbmRzLgorICAgICAgUmVhZCB0aGUgYFNlY3VyaXR5IENvbnNpZGVyYXRpb25zYF8gc2VjdGlvbiBiZWZvcmUgdXNpbmcgYGBzaGVsbD1UcnVlYGAuCiAKIFRoZXNlIG9wdGlvbnMsIGFsb25nIHdpdGggYWxsIG9mIHRoZSBvdGhlciBvcHRpb25zLCBhcmUgZGVzY3JpYmVkIGluIG1vcmUKIGRldGFpbCBpbiB0aGUgOmNsYXNzOmBQb3BlbmAgY29uc3RydWN0b3IgZG9jdW1lbnRhdGlvbi4KQEAgLTM2OCw3ICszNDIsNyBAQAogICAgICAgICAgICAgICAgICBzdGFydHVwaW5mbz1Ob25lLCBjcmVhdGlvbmZsYWdzPTAsIHJlc3RvcmVfc2lnbmFscz1UcnVlLCBcCiAgICAgICAgICAgICAgICAgIHN0YXJ0X25ld19zZXNzaW9uPUZhbHNlLCBwYXNzX2Zkcz0oKSkKIAotICAgRXhlY3V0ZSBhIGNoaWxkIHByb2dyYW0gaW4gYSBuZXcgcHJvY2Vzcy4gIE9uIFVuaXgsIHRoZSBjbGFzcyB1c2VzCisgICBFeGVjdXRlIGEgY2hpbGQgcHJvZ3JhbSBpbiBhIG5ldyBwcm9jZXNzLiAgT24gUE9TSVgsIHRoZSBjbGFzcyB1c2VzCiAgICA6bWV0aDpgb3MuZXhlY3ZwYC1saWtlIGJlaGF2aW9yIHRvIGV4ZWN1dGUgdGhlIGNoaWxkIHByb2dyYW0uICBPbiBXaW5kb3dzLAogICAgdGhlIGNsYXNzIHVzZXMgdGhlIFdpbmRvd3MgYGBDcmVhdGVQcm9jZXNzKClgYCBmdW5jdGlvbi4gIFRoZSBhcmd1bWVudHMgdG8KICAgIDpjbGFzczpgUG9wZW5gIGFyZSBhcyBmb2xsb3dzLgpAQCAtMzgwLDcgKzM1NCw3IEBACiAgICBhcmd1bWVudHMgZm9yIGFkZGl0aW9uYWwgZGlmZmVyZW5jZXMgZnJvbSB0aGUgZGVmYXVsdCBiZWhhdmlvci4gIFVubGVzcwogICAgb3RoZXJ3aXNlIHN0YXRlZCwgaXQgaXMgcmVjb21tZW5kZWQgdG8gcGFzcyAqYXJncyogYXMgYSBzZXF1ZW5jZS4KIAotICAgT24gVW5peCwgaWYgKmFyZ3MqIGlzIGEgc3RyaW5nLCB0aGUgc3RyaW5nIGlzIGludGVycHJldGVkIGFzIHRoZSBuYW1lIG9yCisgICBPbiBQT1NJWCwgaWYgKmFyZ3MqIGlzIGEgc3RyaW5nLCB0aGUgc3RyaW5nIGlzIGludGVycHJldGVkIGFzIHRoZSBuYW1lIG9yCiAgICBwYXRoIG9mIHRoZSBwcm9ncmFtIHRvIGV4ZWN1dGUuICBIb3dldmVyLCB0aGlzIGNhbiBvbmx5IGJlIGRvbmUgaWYgbm90CiAgICBwYXNzaW5nIGFyZ3VtZW50cyB0byB0aGUgcHJvZ3JhbS4KIApAQCAtNDExLDcgKzM4NSw3IEBACiAgICB0aGUgc2hlbGwgYXMgdGhlIHByb2dyYW0gdG8gZXhlY3V0ZS4gIElmICpzaGVsbCogaXMgKlRydWUqLCBpdCBpcwogICAgcmVjb21tZW5kZWQgdG8gcGFzcyAqYXJncyogYXMgYSBzdHJpbmcgcmF0aGVyIHRoYW4gYXMgYSBzZXF1ZW5jZS4KIAotICAgT24gVW5peCB3aXRoIGBgc2hlbGw9VHJ1ZWBgLCB0aGUgc2hlbGwgZGVmYXVsdHMgdG8gOmZpbGU6YC9iaW4vc2hgLiAgSWYKKyAgIE9uIFBPU0lYIHdpdGggYGBzaGVsbD1UcnVlYGAsIHRoZSBzaGVsbCBkZWZhdWx0cyB0byA6ZmlsZTpgL2Jpbi9zaGAuICBJZgogICAgKmFyZ3MqIGlzIGEgc3RyaW5nLCB0aGUgc3RyaW5nIHNwZWNpZmllcyB0aGUgY29tbWFuZAogICAgdG8gZXhlY3V0ZSB0aHJvdWdoIHRoZSBzaGVsbC4gIFRoaXMgbWVhbnMgdGhhdCB0aGUgc3RyaW5nIG11c3QgYmUKICAgIGZvcm1hdHRlZCBleGFjdGx5IGFzIGl0IHdvdWxkIGJlIHdoZW4gdHlwZWQgYXQgdGhlIHNoZWxsIHByb21wdC4gIFRoaXMKQEAgLTQyOCwxOCArNDAyLDIyIEBACiAgICBpbnRvIHRoZSBzaGVsbCAoZS5nLiA6Y29tbWFuZDpgZGlyYCBvciA6Y29tbWFuZDpgY29weWApLiAgWW91IGRvIG5vdCBuZWVkCiAgICBgYHNoZWxsPVRydWVgYCB0byBydW4gYSBiYXRjaCBmaWxlIG9yIGNvbnNvbGUtYmFzZWQgZXhlY3V0YWJsZS4KIAotICAgLi4gd2FybmluZzo6CisgICAuLiBub3RlOjoKIAotICAgICAgUGFzc2luZyBgYHNoZWxsPVRydWVgYCBjYW4gYmUgYSBzZWN1cml0eSBoYXphcmQgaWYgY29tYmluZWQgd2l0aAotICAgICAgdW50cnVzdGVkIGlucHV0LiAgU2VlIHRoZSB3YXJuaW5nIHVuZGVyIDpyZWY6YGZyZXF1ZW50bHktdXNlZC1hcmd1bWVudHNgCi0gICAgICBmb3IgZGV0YWlscy4KKyAgICAgIFJlYWQgdGhlIGBTZWN1cml0eSBDb25zaWRlcmF0aW9uc2BfIHNlY3Rpb24gYmVmb3JlIHVzaW5nIGBgc2hlbGw9VHJ1ZWBgLgogCi0gICAqYnVmc2l6ZSogd2lsbCBiZSBzdXBwbGllZCBhcyB0aGUgY29ycmVzcG9uZGluZyBhcmd1bWVudCB0byB0aGUgOmZ1bmM6YG9wZW5gCi0gICBmdW5jdGlvbiB3aGVuIGNyZWF0aW5nIHRoZSBzdGRpbi9zdGRvdXQvc3RkZXJyIHBpcGUgZmlsZSBvYmplY3RzOiA6Y29uc3Q6YDBgCi0gICBtZWFucyB1bmJ1ZmZlcmVkIChyZWFkIGFuZCB3cml0ZSBhcmUgb25lIHN5c3RlbSBjYWxsIGFuZCBjYW4gcmV0dXJuIHNob3J0KSwKLSAgIDpjb25zdDpgMWAgbWVhbnMgbGluZSBidWZmZXJlZCwgYW55IG90aGVyIHBvc2l0aXZlIHZhbHVlIG1lYW5zIHVzZSBhIGJ1ZmZlcgotICAgb2YgYXBwcm94aW1hdGVseSB0aGF0IHNpemUuICBBIG5lZ2F0aXZlIGJ1ZnNpemUgKHRoZSBkZWZhdWx0KSBtZWFucyB0aGUKLSAgIHN5c3RlbSBkZWZhdWx0IG9mIGlvLkRFRkFVTFRfQlVGRkVSX1NJWkUgd2lsbCBiZSB1c2VkLgorICAgKmJ1ZnNpemUqIHdpbGwgYmUgc3VwcGxpZWQgYXMgdGhlIGNvcnJlc3BvbmRpbmcgYXJndW1lbnQgdG8gdGhlCisgICA6ZnVuYzpgb3BlbmAgZnVuY3Rpb24gd2hlbiBjcmVhdGluZyB0aGUgc3RkaW4vc3Rkb3V0L3N0ZGVyciBwaXBlCisgICBmaWxlIG9iamVjdHM6CisKKyAgIC0gOmNvbnN0OmAwYCBtZWFucyB1bmJ1ZmZlcmVkIChyZWFkIGFuZCB3cml0ZSBhcmUgb25lCisgICAgIHN5c3RlbSBjYWxsIGFuZCBjYW4gcmV0dXJuIHNob3J0KQorICAgLSA6Y29uc3Q6YDFgIG1lYW5zIGxpbmUgYnVmZmVyZWQKKyAgICAgKG9ubHkgdXNhYmxlIGlmIGBgdW5pdmVyc2FsX25ld2xpbmVzPVRydWVgYCBpLmUuLCBpbiBhIHRleHQgbW9kZSkKKyAgIC0gYW55IG90aGVyIHBvc2l0aXZlIHZhbHVlIG1lYW5zIHVzZSBhIGJ1ZmZlciBvZiBhcHByb3hpbWF0ZWx5IHRoYXQKKyAgICAgc2l6ZQorICAgLSBuZWdhdGl2ZSBidWZzaXplICh0aGUgZGVmYXVsdCkgbWVhbnMgdGhlIHN5c3RlbSBkZWZhdWx0IG9mCisgICAgIGlvLkRFRkFVTFRfQlVGRkVSX1NJWkUgd2lsbCBiZSB1c2VkLgogCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMy4xCiAgICAgICAqYnVmc2l6ZSogbm93IGRlZmF1bHRzIHRvIC0xIHRvIGVuYWJsZSBidWZmZXJpbmcgYnkgZGVmYXVsdCB0byBtYXRjaCB0aGUKQEAgLTQ1Myw5ICs0MzEsOSBAQAogICAgcHJvZ3JhbSB0byBleGVjdXRlIHNwZWNpZmllZCBieSAqYXJncyouICBIb3dldmVyLCB0aGUgb3JpZ2luYWwgKmFyZ3MqIGlzCiAgICBzdGlsbCBwYXNzZWQgdG8gdGhlIHByb2dyYW0uICBNb3N0IHByb2dyYW1zIHRyZWF0IHRoZSBwcm9ncmFtIHNwZWNpZmllZAogICAgYnkgKmFyZ3MqIGFzIHRoZSBjb21tYW5kIG5hbWUsIHdoaWNoIGNhbiB0aGVuIGJlIGRpZmZlcmVudCBmcm9tIHRoZSBwcm9ncmFtCi0gICBhY3R1YWxseSBleGVjdXRlZC4gIE9uIFVuaXgsIHRoZSAqYXJncyogbmFtZQorICAgYWN0dWFsbHkgZXhlY3V0ZWQuICBPbiBQT1NJWCwgdGhlICphcmdzKiBuYW1lCiAgICBiZWNvbWVzIHRoZSBkaXNwbGF5IG5hbWUgZm9yIHRoZSBleGVjdXRhYmxlIGluIHV0aWxpdGllcyBzdWNoIGFzCi0gICA6cHJvZ3JhbTpgcHNgLiAgSWYgYGBzaGVsbD1UcnVlYGAsIG9uIFVuaXggdGhlICpleGVjdXRhYmxlKiBhcmd1bWVudAorICAgOnByb2dyYW06YHBzYC4gIElmIGBgc2hlbGw9VHJ1ZWBgLCBvbiBQT1NJWCB0aGUgKmV4ZWN1dGFibGUqIGFyZ3VtZW50CiAgICBzcGVjaWZpZXMgYSByZXBsYWNlbWVudCBzaGVsbCBmb3IgdGhlIGRlZmF1bHQgOmZpbGU6YC9iaW4vc2hgLgogCiAgICAqc3RkaW4qLCAqc3Rkb3V0KiBhbmQgKnN0ZGVyciogc3BlY2lmeSB0aGUgZXhlY3V0ZWQgcHJvZ3JhbSdzIHN0YW5kYXJkIGlucHV0LApAQCAtNDcxLDcgKzQ0OSw3IEBACiAKICAgIElmICpwcmVleGVjX2ZuKiBpcyBzZXQgdG8gYSBjYWxsYWJsZSBvYmplY3QsIHRoaXMgb2JqZWN0IHdpbGwgYmUgY2FsbGVkIGluIHRoZQogICAgY2hpbGQgcHJvY2VzcyBqdXN0IGJlZm9yZSB0aGUgY2hpbGQgaXMgZXhlY3V0ZWQuCi0gICAoVW5peCBvbmx5KQorICAgKFBPU0lYIG9ubHkpCiAKICAgIC4uIHdhcm5pbmc6OgogCkBAIC00ODksOCArNDY3LDggQEAKICAgICAgIGNvbW1vbiB1c2Ugb2YgKnByZWV4ZWNfZm4qIHRvIGNhbGwgb3Muc2V0c2lkKCkgaW4gdGhlIGNoaWxkLgogCiAgICBJZiAqY2xvc2VfZmRzKiBpcyB0cnVlLCBhbGwgZmlsZSBkZXNjcmlwdG9ycyBleGNlcHQgOmNvbnN0OmAwYCwgOmNvbnN0OmAxYCBhbmQKLSAgIDpjb25zdDpgMmAgd2lsbCBiZSBjbG9zZWQgYmVmb3JlIHRoZSBjaGlsZCBwcm9jZXNzIGlzIGV4ZWN1dGVkLiAoVW5peCBvbmx5KS4KLSAgIFRoZSBkZWZhdWx0IHZhcmllcyBieSBwbGF0Zm9ybTogIEFsd2F5cyB0cnVlIG9uIFVuaXguICBPbiBXaW5kb3dzIGl0IGlzCisgICA6Y29uc3Q6YDJgIHdpbGwgYmUgY2xvc2VkIGJlZm9yZSB0aGUgY2hpbGQgcHJvY2VzcyBpcyBleGVjdXRlZC4gKFBPU0lYIG9ubHkpLgorICAgVGhlIGRlZmF1bHQgdmFyaWVzIGJ5IHBsYXRmb3JtOiAgQWx3YXlzIHRydWUgb24gUE9TSVguICBPbiBXaW5kb3dzIGl0IGlzCiAgICB0cnVlIHdoZW4gKnN0ZGluKi8qc3Rkb3V0Ki8qc3RkZXJyKiBhcmUgOmNvbnN0OmBOb25lYCwgZmFsc2Ugb3RoZXJ3aXNlLgogICAgT24gV2luZG93cywgaWYgKmNsb3NlX2ZkcyogaXMgdHJ1ZSB0aGVuIG5vIGhhbmRsZXMgd2lsbCBiZSBpbmhlcml0ZWQgYnkgdGhlCiAgICBjaGlsZCBwcm9jZXNzLiAgTm90ZSB0aGF0IG9uIFdpbmRvd3MsIHlvdSBjYW5ub3Qgc2V0ICpjbG9zZV9mZHMqIHRvIHRydWUgYW5kCkBAIC01MDIsNyArNDgwLDcgQEAKIAogICAgKnBhc3NfZmRzKiBpcyBhbiBvcHRpb25hbCBzZXF1ZW5jZSBvZiBmaWxlIGRlc2NyaXB0b3JzIHRvIGtlZXAgb3BlbgogICAgYmV0d2VlbiB0aGUgcGFyZW50IGFuZCBjaGlsZC4gIFByb3ZpZGluZyBhbnkgKnBhc3NfZmRzKiBmb3JjZXMKLSAgICpjbG9zZV9mZHMqIHRvIGJlIDpjb25zdDpgVHJ1ZWAuICAoVW5peCBvbmx5KQorICAgKmNsb3NlX2ZkcyogdG8gYmUgOmNvbnN0OmBUcnVlYC4gIChQT1NJWCBvbmx5KQogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKICAgICAgIFRoZSAqcGFzc19mZHMqIHBhcmFtZXRlciB3YXMgYWRkZWQuCkBAIC01MTUsMTMgKzQ5MywxMyBAQAogICAgSWYgKnJlc3RvcmVfc2lnbmFscyogaXMgdHJ1ZSAodGhlIGRlZmF1bHQpIGFsbCBzaWduYWxzIHRoYXQgUHl0aG9uIGhhcyBzZXQgdG8KICAgIFNJR19JR04gYXJlIHJlc3RvcmVkIHRvIFNJR19ERkwgaW4gdGhlIGNoaWxkIHByb2Nlc3MgYmVmb3JlIHRoZSBleGVjLgogICAgQ3VycmVudGx5IHRoaXMgaW5jbHVkZXMgdGhlIFNJR1BJUEUsIFNJR1hGWiBhbmQgU0lHWEZTWiBzaWduYWxzLgotICAgKFVuaXggb25seSkKKyAgIChQT1NJWCBvbmx5KQogCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgogICAgICAgKnJlc3RvcmVfc2lnbmFscyogd2FzIGFkZGVkLgogCiAgICBJZiAqc3RhcnRfbmV3X3Nlc3Npb24qIGlzIHRydWUgdGhlIHNldHNpZCgpIHN5c3RlbSBjYWxsIHdpbGwgYmUgbWFkZSBpbiB0aGUKLSAgIGNoaWxkIHByb2Nlc3MgcHJpb3IgdG8gdGhlIGV4ZWN1dGlvbiBvZiB0aGUgc3VicHJvY2Vzcy4gIChVbml4IG9ubHkpCisgICBjaGlsZCBwcm9jZXNzIHByaW9yIHRvIHRoZSBleGVjdXRpb24gb2YgdGhlIHN1YnByb2Nlc3MuICAoUE9TSVggb25seSkKIAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKICAgICAgICpzdGFydF9uZXdfc2Vzc2lvbiogd2FzIGFkZGVkLgpAQCAtNTg4LDE0ICs1NjYsMjEgQEAKICAgICAgIFRoZSA6ZXhjOmBTdWJwcm9jZXNzRXJyb3JgIGJhc2UgY2xhc3Mgd2FzIGFkZGVkLgogCiAKLVNlY3VyaXR5Ci1eXl5eXl5eXgorU2VjdXJpdHkgQ29uc2lkZXJhdGlvbnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVVubGlrZSBzb21lIG90aGVyIHBvcGVuIGZ1bmN0aW9ucywgdGhpcyBpbXBsZW1lbnRhdGlvbiB3aWxsIG5ldmVyIGNhbGwgYQotc3lzdGVtIHNoZWxsIGltcGxpY2l0bHkuICBUaGlzIG1lYW5zIHRoYXQgYWxsIGNoYXJhY3RlcnMsIGluY2x1ZGluZyBzaGVsbAotbWV0YWNoYXJhY3RlcnMsIGNhbiBzYWZlbHkgYmUgcGFzc2VkIHRvIGNoaWxkIHByb2Nlc3Nlcy4gT2J2aW91c2x5LCBpZiB0aGUKLXNoZWxsIGlzIGludm9rZWQgZXhwbGljaXRseSwgdGhlbiBpdCBpcyB0aGUgYXBwbGljYXRpb24ncyByZXNwb25zaWJpbGl0eSB0bwotZW5zdXJlIHRoYXQgYWxsIHdoaXRlc3BhY2UgYW5kIG1ldGFjaGFyYWN0ZXJzIGFyZSBxdW90ZWQgYXBwcm9wcmlhdGVseS4KK1VubGlrZSBzb21lIG90aGVyIHBvcGVuIGZ1bmN0aW9ucywgdGhpcyBpbXBsZW1lbnRhdGlvbiB3aWxsIG5ldmVyCitpbXBsaWNpdGx5IGNhbGwgYSBzeXN0ZW0gc2hlbGwuICBUaGlzIG1lYW5zIHRoYXQgYWxsIGNoYXJhY3RlcnMsCitpbmNsdWRpbmcgc2hlbGwgbWV0YWNoYXJhY3RlcnMsIGNhbiBzYWZlbHkgYmUgcGFzc2VkIHRvIGNoaWxkIHByb2Nlc3Nlcy4KK0lmIHRoZSBzaGVsbCBpcyBpbnZva2VkIGV4cGxpY2l0bHksIHZpYSBgYHNoZWxsPVRydWVgYCwgaXQgaXMgdGhlIGFwcGxpY2F0aW9uJ3MKK3Jlc3BvbnNpYmlsaXR5IHRvIGVuc3VyZSB0aGF0IGFsbCB3aGl0ZXNwYWNlIGFuZCBtZXRhY2hhcmFjdGVycyBhcmUKK3F1b3RlZCBhcHByb3ByaWF0ZWx5IHRvIGF2b2lkCitgc2hlbGwgaW5qZWN0aW9uIDxodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1NoZWxsX2luamVjdGlvbiNTaGVsbF9pbmplY3Rpb24+YF8KK3Z1bG5lcmFiaWxpdGllcy4KKworV2hlbiB1c2luZyBgYHNoZWxsPVRydWVgYCwgdGhlIDpmdW5jOmBzaGxleC5xdW90ZWAgZnVuY3Rpb24gY2FuIGJlCit1c2VkIHRvIHByb3Blcmx5IGVzY2FwZSB3aGl0ZXNwYWNlIGFuZCBzaGVsbCBtZXRhY2hhcmFjdGVycyBpbiBzdHJpbmdzCit0aGF0IGFyZSBnb2luZyB0byBiZSB1c2VkIHRvIGNvbnN0cnVjdCBzaGVsbCBjb21tYW5kcy4KIAogCiBQb3BlbiBPYmplY3RzCkBAIC02MTksMTYgKzYwNCwyNyBAQAogICAgOmV4YzpgVGltZW91dEV4cGlyZWRgIGV4Y2VwdGlvbi4gIEl0IGlzIHNhZmUgdG8gY2F0Y2ggdGhpcyBleGNlcHRpb24gYW5kCiAgICByZXRyeSB0aGUgd2FpdC4KIAotICAgLi4gd2FybmluZzo6CisgICAuLiBub3RlOjoKIAotICAgICAgVGhpcyB3aWxsIGRlYWRsb2NrIHdoZW4gdXNpbmcgYGBzdGRvdXQ9UElQRWBgIGFuZC9vcgotICAgICAgYGBzdGRlcnI9UElQRWBgIGFuZCB0aGUgY2hpbGQgcHJvY2VzcyBnZW5lcmF0ZXMgZW5vdWdoIG91dHB1dCB0bwotICAgICAgYSBwaXBlIHN1Y2ggdGhhdCBpdCBibG9ja3Mgd2FpdGluZyBmb3IgdGhlIE9TIHBpcGUgYnVmZmVyIHRvCi0gICAgICBhY2NlcHQgbW9yZSBkYXRhLiAgVXNlIDptZXRoOmBjb21tdW5pY2F0ZWAgdG8gYXZvaWQgdGhhdC4KKyAgICAgIFRoaXMgd2lsbCBkZWFkbG9jayB3aGVuIHVzaW5nIGBgc3Rkb3V0PVBJUEVgYCBvciBgYHN0ZGVycj1QSVBFYGAKKyAgICAgIGFuZCB0aGUgY2hpbGQgcHJvY2VzcyBnZW5lcmF0ZXMgZW5vdWdoIG91dHB1dCB0byBhIHBpcGUgc3VjaCB0aGF0CisgICAgICBpdCBibG9ja3Mgd2FpdGluZyBmb3IgdGhlIE9TIHBpcGUgYnVmZmVyIHRvIGFjY2VwdCBtb3JlIGRhdGEuCisgICAgICBVc2UgOm1ldGg6YFBvcGVuLmNvbW11bmljYXRlYCB3aGVuIHVzaW5nIHBpcGVzIHRvIGF2b2lkIHRoYXQuCisKKyAgIC4uIG5vdGU6OgorCisgICAgICBUaGUgZnVuY3Rpb24gaXMgaW1wbGVtZW50ZWQgdXNpbmcgYSBidXN5IGxvb3AgKG5vbi1ibG9ja2luZyBjYWxsIGFuZAorICAgICAgc2hvcnQgc2xlZXBzKS4gVXNlIHRoZSA6bW9kOmBhc3luY2lvYCBtb2R1bGUgZm9yIGFuIGFzeW5jaHJvbm91cyB3YWl0OgorICAgICAgc2VlIDpjbGFzczpgYXN5bmNpby5jcmVhdGVfc3VicHJvY2Vzc19leGVjYC4KIAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKICAgICAgICp0aW1lb3V0KiB3YXMgYWRkZWQuCiAKKyAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjQKKworICAgICAgRG8gbm90IHVzZSB0aGUgKmVuZHRpbWUqIHBhcmFtZXRlci4gIEl0IGlzIHdhcyB1bmludGVudGlvbmFsbHkKKyAgICAgIGV4cG9zZWQgaW4gMy4zIGJ1dCB3YXMgbGVmdCB1bmRvY3VtZW50ZWQgYXMgaXQgd2FzIGludGVuZGVkIHRvIGJlCisgICAgICBwcml2YXRlIGZvciBpbnRlcm5hbCB1c2UuICBVc2UgKnRpbWVvdXQqIGluc3RlYWQuCiAKIC4uIG1ldGhvZDo6IFBvcGVuLmNvbW11bmljYXRlKGlucHV0PU5vbmUsIHRpbWVvdXQ9Tm9uZSkKIApAQCAtNjM4LDcgKzYzNCw3IEBACiAgICBgYE5vbmVgYCwgaWYgbm8gZGF0YSBzaG91bGQgYmUgc2VudCB0byB0aGUgY2hpbGQuICBUaGUgdHlwZSBvZiAqaW5wdXQqCiAgICBtdXN0IGJlIGJ5dGVzIG9yLCBpZiAqdW5pdmVyc2FsX25ld2xpbmVzKiB3YXMgYGBUcnVlYGAsIGEgc3RyaW5nLgogCi0gICA6bWV0aDpgY29tbXVuaWNhdGVgIHJldHVybnMgYSB0dXBsZSBgYChzdGRvdXRkYXRhLCBzdGRlcnJkYXRhKWBgLgorICAgOm1ldGg6YGNvbW11bmljYXRlYCByZXR1cm5zIGEgdHVwbGUgYGAoc3Rkb3V0X2RhdGEsIHN0ZGVycl9kYXRhKWBgLgogCiAgICBOb3RlIHRoYXQgaWYgeW91IHdhbnQgdG8gc2VuZCBkYXRhIHRvIHRoZSBwcm9jZXNzJ3Mgc3RkaW4sIHlvdSBuZWVkIHRvIGNyZWF0ZQogICAgdGhlIFBvcGVuIG9iamVjdCB3aXRoIGBgc3RkaW49UElQRWBgLiAgU2ltaWxhcmx5LCB0byBnZXQgYW55dGhpbmcgb3RoZXIgdGhhbgpAQCAtNjk1LDEzICs2OTEsNiBAQAogCiBUaGUgZm9sbG93aW5nIGF0dHJpYnV0ZXMgYXJlIGFsc28gYXZhaWxhYmxlOgogCi0uLiB3YXJuaW5nOjoKLQotICAgVXNlIDptZXRoOmB+UG9wZW4uY29tbXVuaWNhdGVgIHJhdGhlciB0aGFuIDphdHRyOmAuc3RkaW4ud3JpdGUgPFBvcGVuLnN0ZGluPmAsCi0gICA6YXR0cjpgLnN0ZG91dC5yZWFkIDxQb3Blbi5zdGRvdXQ+YCBvciA6YXR0cjpgLnN0ZGVyci5yZWFkIDxQb3Blbi5zdGRlcnI+YCB0byBhdm9pZAotICAgZGVhZGxvY2tzIGR1ZSB0byBhbnkgb2YgdGhlIG90aGVyIE9TIHBpcGUgYnVmZmVycyBmaWxsaW5nIHVwIGFuZCBibG9ja2luZyB0aGUKLSAgIGNoaWxkIHByb2Nlc3MuCi0KIC4uIGF0dHJpYnV0ZTo6IFBvcGVuLmFyZ3MKIAogICAgVGhlICphcmdzKiBhcmd1bWVudCBhcyBpdCB3YXMgcGFzc2VkIHRvIDpjbGFzczpgUG9wZW5gIC0tIGEKQEAgLTczNSw2ICs3MjQsMTMgQEAKICAgIGBgVHJ1ZWBgLCB0aGUgc3RyZWFtIGlzIGEgdGV4dCBzdHJlYW0sIG90aGVyd2lzZSBpdCBpcyBhIGJ5dGUgc3RyZWFtLiBJZiB0aGUKICAgICpzdGRlcnIqIGFyZ3VtZW50IHdhcyBub3QgOmRhdGE6YFBJUEVgLCB0aGlzIGF0dHJpYnV0ZSBpcyBgYE5vbmVgYC4KIAorLi4gd2FybmluZzo6CisKKyAgIFVzZSA6bWV0aDpgflBvcGVuLmNvbW11bmljYXRlYCByYXRoZXIgdGhhbiA6YXR0cjpgLnN0ZGluLndyaXRlIDxQb3Blbi5zdGRpbj5gLAorICAgOmF0dHI6YC5zdGRvdXQucmVhZCA8UG9wZW4uc3Rkb3V0PmAgb3IgOmF0dHI6YC5zdGRlcnIucmVhZCA8UG9wZW4uc3RkZXJyPmAgdG8gYXZvaWQKKyAgIGRlYWRsb2NrcyBkdWUgdG8gYW55IG9mIHRoZSBvdGhlciBPUyBwaXBlIGJ1ZmZlcnMgZmlsbGluZyB1cCBhbmQgYmxvY2tpbmcgdGhlCisgICBjaGlsZCBwcm9jZXNzLgorCiAKIC4uIGF0dHJpYnV0ZTo6IFBvcGVuLnBpZAogCkBAIC03NTEsNyArNzQ3LDcgQEAKICAgIGhhc24ndCB0ZXJtaW5hdGVkIHlldC4KIAogICAgQSBuZWdhdGl2ZSB2YWx1ZSBgYC1OYGAgaW5kaWNhdGVzIHRoYXQgdGhlIGNoaWxkIHdhcyB0ZXJtaW5hdGVkIGJ5IHNpZ25hbAotICAgYGBOYGAgKFVuaXggb25seSkuCisgICBgYE5gYCAoUE9TSVggb25seSkuCiAKIAogV2luZG93cyBQb3BlbiBIZWxwZXJzCkBAIC04NDcsOCArODQzLDYgQEAKICAgIFRoZSBuZXcgcHJvY2VzcyBoYXMgYSBuZXcgY29uc29sZSwgaW5zdGVhZCBvZiBpbmhlcml0aW5nIGl0cyBwYXJlbnQncwogICAgY29uc29sZSAodGhlIGRlZmF1bHQpLgogCi0gICBUaGlzIGZsYWcgaXMgYWx3YXlzIHNldCB3aGVuIDpjbGFzczpgUG9wZW5gIGlzIGNyZWF0ZWQgd2l0aCBgYHNoZWxsPVRydWVgYC4KLQogLi4gZGF0YTo6IENSRUFURV9ORVdfUFJPQ0VTU19HUk9VUAogCiAgICBBIDpjbGFzczpgUG9wZW5gIGBgY3JlYXRpb25mbGFnc2BgIHBhcmFtZXRlciB0byBzcGVjaWZ5IHRoYXQgYSBuZXcgcHJvY2VzcwpAQCAtMTAwNiw3ICsxMDAwLDcgQEAKICAgIGlmIHJjIGlzIG5vdCBOb25lIGFuZCByYyA+PiA4OgogICAgICAgIHByaW50KCJUaGVyZSB3ZXJlIHNvbWUgZXJyb3JzIikKICAgID09PgotICAgcHJvY2VzcyA9IFBvcGVuKGNtZCwgJ3cnLCBzdGRpbj1QSVBFKQorICAgcHJvY2VzcyA9IFBvcGVuKGNtZCwgc3RkaW49UElQRSkKICAgIC4uLgogICAgcHJvY2Vzcy5zdGRpbi5jbG9zZSgpCiAgICBpZiBwcm9jZXNzLndhaXQoKSAhPSAwOgpAQCAtMTAyNSw3ICsxMDE5LDcgQEAKIAogICAgKGNoaWxkX3N0ZG91dCwgY2hpbGRfc3RkaW4pID0gcG9wZW4yLnBvcGVuMigic29tZXN0cmluZyIsIGJ1ZnNpemUsIG1vZGUpCiAgICA9PT4KLSAgIHAgPSBQb3BlbihbInNvbWVzdHJpbmciXSwgc2hlbGw9VHJ1ZSwgYnVmc2l6ZT1idWZzaXplLAorICAgcCA9IFBvcGVuKCJzb21lc3RyaW5nIiwgc2hlbGw9VHJ1ZSwgYnVmc2l6ZT1idWZzaXplLAogICAgICAgICAgICAgIHN0ZGluPVBJUEUsIHN0ZG91dD1QSVBFLCBjbG9zZV9mZHM9VHJ1ZSkKICAgIChjaGlsZF9zdGRvdXQsIGNoaWxkX3N0ZGluKSA9IChwLnN0ZG91dCwgcC5zdGRpbikKIApAQCAtMTA2Myw5ICsxMDU3LDkgQEAKIAogICAgUmV0dXJuIGBgKHN0YXR1cywgb3V0cHV0KWBgIG9mIGV4ZWN1dGluZyAqY21kKiBpbiBhIHNoZWxsLgogCi0gICBFeGVjdXRlIHRoZSBzdHJpbmcgKmNtZCogaW4gYSBzaGVsbCB3aXRoIDpjbGFzczpgUG9wZW5gIGFuZCByZXR1cm4gYSAyLXR1cGxlCi0gICBgYChzdGF0dXMsIG91dHB1dClgYCB2aWEgOmZ1bmM6YFBvcGVuLmNvbW11bmljYXRlYC4gVW5pdmVyc2FsIG5ld2xpbmVzIG1vZGUKLSAgIGlzIHVzZWQ7IHNlZSB0aGUgbm90ZXMgb24gOnJlZjpgZnJlcXVlbnRseS11c2VkLWFyZ3VtZW50c2AgZm9yIG1vcmUgZGV0YWlscy4KKyAgIEV4ZWN1dGUgdGhlIHN0cmluZyAqY21kKiBpbiBhIHNoZWxsIHdpdGggOm1ldGg6YFBvcGVuLmNoZWNrX291dHB1dGAgYW5kCisgICByZXR1cm4gYSAyLXR1cGxlIGBgKHN0YXR1cywgb3V0cHV0KWBgLiBVbml2ZXJzYWwgbmV3bGluZXMgbW9kZSBpcyB1c2VkOworICAgc2VlIHRoZSBub3RlcyBvbiA6cmVmOmBmcmVxdWVudGx5LXVzZWQtYXJndW1lbnRzYCBmb3IgbW9yZSBkZXRhaWxzLgogCiAgICBBIHRyYWlsaW5nIG5ld2xpbmUgaXMgc3RyaXBwZWQgZnJvbSB0aGUgb3V0cHV0LgogICAgVGhlIGV4aXQgc3RhdHVzIGZvciB0aGUgY29tbWFuZCBjYW4gYmUgaW50ZXJwcmV0ZWQKQEAgLTEwNzgsNyArMTA3Miw3IEBACiAgICAgICA+Pj4gc3VicHJvY2Vzcy5nZXRzdGF0dXNvdXRwdXQoJy9iaW4vanVuaycpCiAgICAgICAoMjU2LCAnc2g6IC9iaW4vanVuazogbm90IGZvdW5kJykKIAotICAgQXZhaWxhYmlsaXR5OiBVbml4ICYgV2luZG93cworICAgQXZhaWxhYmlsaXR5OiBQT1NJWCAmIFdpbmRvd3MKIAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMuNAogICAgICAgV2luZG93cyBzdXBwb3J0IGFkZGVkCkBAIC0xMDk0LDcgKzEwODgsNyBAQAogICAgICAgPj4+IHN1YnByb2Nlc3MuZ2V0b3V0cHV0KCdscyAvYmluL2xzJykKICAgICAgICcvYmluL2xzJwogCi0gICBBdmFpbGFiaWxpdHk6IFVuaXggJiBXaW5kb3dzCisgICBBdmFpbGFiaWxpdHk6IFBPU0lYICYgV2luZG93cwogCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMy40CiAgICAgICBXaW5kb3dzIHN1cHBvcnQgYWRkZWQKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3N1bmF1LnJzdCBiL0RvYy9saWJyYXJ5L3N1bmF1LnJzdAppbmRleCA0YmRiOTliLi5iZDM3ZWUyIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9zdW5hdS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvc3VuYXUucnN0CkBAIC01NCw4ICs1NCw4IEBACiAKICAgIE5vdGUgdGhhdCBpdCBkb2VzIG5vdCBhbGxvdyByZWFkL3dyaXRlIGZpbGVzLgogCi0gICBBICptb2RlKiBvZiBgYCdyJ2BgIHJldHVybnMgYSA6Y2xhc3M6YEFVX3JlYWRgIG9iamVjdCwgd2hpbGUgYSAqbW9kZSogb2YgYGAndydgYAotICAgb3IgYGAnd2InYGAgcmV0dXJucyBhIDpjbGFzczpgQVVfd3JpdGVgIG9iamVjdC4KKyAgIEEgKm1vZGUqIG9mIGBgJ3InYGAgcmV0dXJucyBhbiA6Y2xhc3M6YEFVX3JlYWRgIG9iamVjdCwgd2hpbGUgYSAqbW9kZSogb2YgYGAndydgYAorICAgb3IgYGAnd2InYGAgcmV0dXJucyBhbiA6Y2xhc3M6YEFVX3dyaXRlYCBvYmplY3QuCiAKIAogLi4gZnVuY3Rpb246OiBvcGVuZnAoZmlsZSwgbW9kZSkKQEAgLTE1MCw4ICsxNTAsOSBAQAogCiAuLiBtZXRob2Q6OiBBVV9yZWFkLmdldHBhcmFtcygpCiAKLSAgIFJldHVybnMgYSB0dXBsZSBgYChuY2hhbm5lbHMsIHNhbXB3aWR0aCwgZnJhbWVyYXRlLCBuZnJhbWVzLCBjb21wdHlwZSwKLSAgIGNvbXBuYW1lKWBgLCBlcXVpdmFsZW50IHRvIG91dHB1dCBvZiB0aGUgOm1ldGg6YGdldFwqYCBtZXRob2RzLgorICAgUmV0dXJucyBhIDpmdW5jOmB+Y29sbGVjdGlvbnMubmFtZWR0dXBsZWAgYGAobmNoYW5uZWxzLCBzYW1wd2lkdGgsCisgICBmcmFtZXJhdGUsIG5mcmFtZXMsIGNvbXB0eXBlLCBjb21wbmFtZSlgYCwgZXF1aXZhbGVudCB0byBvdXRwdXQgb2YgdGhlCisgICA6bWV0aDpgZ2V0XCpgIG1ldGhvZHMuCiAKIAogLi4gbWV0aG9kOjogQVVfcmVhZC5yZWFkZnJhbWVzKG4pCkBAIC0yMTEsNiArMjEyLDkgQEAKIAogICAgU2V0IHRoZSBzYW1wbGUgd2lkdGggKGluIGJ5dGVzLikKIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIEFkZGVkIHN1cHBvcnQgZm9yIDI0LWJpdCBzYW1wbGVzLgorCiAKIC4uIG1ldGhvZDo6IEFVX3dyaXRlLnNldGZyYW1lcmF0ZShuKQogCkBAIC0yNDYsMTEgKzI1MCwxNyBAQAogCiAgICBXcml0ZSBhdWRpbyBmcmFtZXMsIHdpdGhvdXQgY29ycmVjdGluZyAqbmZyYW1lcyouCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBBbnkgOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0YCBpcyBub3cgYWNjZXB0ZWQuCisKIAogLi4gbWV0aG9kOjogQVVfd3JpdGUud3JpdGVmcmFtZXMoZGF0YSkKIAogICAgV3JpdGUgYXVkaW8gZnJhbWVzIGFuZCBtYWtlIHN1cmUgKm5mcmFtZXMqIGlzIGNvcnJlY3QuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBBbnkgOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0YCBpcyBub3cgYWNjZXB0ZWQuCisKIAogLi4gbWV0aG9kOjogQVVfd3JpdGUuY2xvc2UoKQogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9zdXBlcnNlZGVkLnJzdCBiL0RvYy9saWJyYXJ5L3N1cGVyc2VkZWQucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwYTU5ODMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2MvbGlicmFyeS9zdXBlcnNlZGVkLnJzdApAQCAtMCwwICsxLDE0IEBACisuLiBfc3VwZXJzZWRlZDoKKworKioqKioqKioqKioqKioqKioqCitTdXBlcnNlZGVkIE1vZHVsZXMKKyoqKioqKioqKioqKioqKioqKgorCitUaGUgbW9kdWxlcyBkZXNjcmliZWQgaW4gdGhpcyBjaGFwdGVyIGFyZSBkZXByZWNhdGVkIGFuZCBvbmx5IGtlcHQgZm9yCitiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4gVGhleSBoYXZlIGJlZW4gc3VwZXJzZWRlZCBieSBvdGhlciBtb2R1bGVzLgorCisKKy4uIHRvY3RyZWU6OgorCisgICBvcHRwYXJzZS5yc3QKKyAgIGltcC5yc3QKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3N5bXRhYmxlLnJzdCBiL0RvYy9saWJyYXJ5L3N5bXRhYmxlLnJzdAppbmRleCA0NzJhOWQ2Li4yNTAzZDMzIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9zeW10YWJsZS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvc3ltdGFibGUucnN0CkBAIC00LDYgKzQsMTAgQEAKIC4uIG1vZHVsZTo6IHN5bXRhYmxlCiAgICA6c3lub3BzaXM6IEludGVyZmFjZSB0byB0aGUgY29tcGlsZXIncyBpbnRlcm5hbCBzeW1ib2wgdGFibGVzLgogCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9zeW10YWJsZS5weWAKKworLS0tLS0tLS0tLS0tLS0KKwogLi4gbW9kdWxlYXV0aG9yOjogSmVyZW15IEh5bHRvbiA8amVyZW15QGFsdW0ubWl0LmVkdT4KIC4uIHNlY3Rpb25hdXRob3I6OiBCZW5qYW1pbiBQZXRlcnNvbiA8YmVuamFtaW5AcHl0aG9uLm9yZz4KIApAQCAtMTg1LDQgKzE4OSw0IEBACiAgICAuLiBtZXRob2Q6OiBnZXRfbmFtZXNwYWNlKCkKIAogICAgICAgUmV0dXJuIHRoZSBuYW1lc3BhY2UgYm91bmQgdG8gdGhpcyBuYW1lLiAgSWYgbW9yZSB0aGFuIG9uZSBuYW1lc3BhY2UgaXMKLSAgICAgIGJvdW5kLCBhIDpleGM6YFZhbHVlRXJyb3JgIGlzIHJhaXNlZC4KKyAgICAgIGJvdW5kLCA6ZXhjOmBWYWx1ZUVycm9yYCBpcyByYWlzZWQuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9zeXMucnN0IGIvRG9jL2xpYnJhcnkvc3lzLnJzdAppbmRleCAzNmM2MDhjLi5jMDM3OGUwIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9zeXMucnN0CisrKyBiL0RvYy9saWJyYXJ5L3N5cy5yc3QKQEAgLTEyLDExICsxMiwxMiBAQAogCiAuLiBkYXRhOjogYWJpZmxhZ3MKIAotICAgT24gUE9TSVggc3lzdGVtcyB3aGVyZSBQeXRob24gaXMgYnVpbGQgd2l0aCB0aGUgc3RhbmRhcmQgYGBjb25maWd1cmVgYAorICAgT24gUE9TSVggc3lzdGVtcyB3aGVyZSBQeXRob24gd2FzIGJ1aWx0IHdpdGggdGhlIHN0YW5kYXJkIGBgY29uZmlndXJlYGAKICAgIHNjcmlwdCwgdGhpcyBjb250YWlucyB0aGUgQUJJIGZsYWdzIGFzIHNwZWNpZmllZCBieSA6cGVwOmAzMTQ5YC4KIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCiAKKwogLi4gZGF0YTo6IGFyZ3YKIAogICAgVGhlIGxpc3Qgb2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyBwYXNzZWQgdG8gYSBQeXRob24gc2NyaXB0LiBgYGFyZ3ZbMF1gYCBpcyB0aGUKQEAgLTM4Miw2ICszODMsMjEgQEAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMQogCiAKKy4uIGZ1bmN0aW9uOjogZ2V0YWxsb2NhdGVkYmxvY2tzKCkKKworICAgUmV0dXJuIHRoZSBudW1iZXIgb2YgbWVtb3J5IGJsb2NrcyBjdXJyZW50bHkgYWxsb2NhdGVkIGJ5IHRoZSBpbnRlcnByZXRlciwKKyAgIHJlZ2FyZGxlc3Mgb2YgdGhlaXIgc2l6ZS4gIFRoaXMgZnVuY3Rpb24gaXMgbWFpbmx5IHVzZWZ1bCBmb3IgdHJhY2tpbmcKKyAgIGFuZCBkZWJ1Z2dpbmcgbWVtb3J5IGxlYWtzLiAgQmVjYXVzZSBvZiB0aGUgaW50ZXJwcmV0ZXIncyBpbnRlcm5hbAorICAgY2FjaGVzLCB0aGUgcmVzdWx0IGNhbiB2YXJ5IGZyb20gY2FsbCB0byBjYWxsOyB5b3UgbWF5IGhhdmUgdG8gY2FsbAorICAgOmZ1bmM6YF9jbGVhcl90eXBlX2NhY2hlKClgIGFuZCA6ZnVuYzpgZ2MuY29sbGVjdCgpYCB0byBnZXQgbW9yZQorICAgcHJlZGljdGFibGUgcmVzdWx0cy4KKworICAgSWYgYSBQeXRob24gYnVpbGQgb3IgaW1wbGVtZW50YXRpb24gY2Fubm90IHJlYXNvbmFibHkgY29tcHV0ZSB0aGlzCisgICBpbmZvcm1hdGlvbiwgOmZ1bmM6YGdldGFsbG9jYXRlZGJsb2NrcygpYCBpcyBhbGxvd2VkIHRvIHJldHVybiAwIGluc3RlYWQuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIC4uIGZ1bmN0aW9uOjogZ2V0Y2hlY2tpbnRlcnZhbCgpCiAKICAgIFJldHVybiB0aGUgaW50ZXJwcmV0ZXIncyAiY2hlY2sgaW50ZXJ2YWwiOyBzZWUgOmZ1bmM6YHNldGNoZWNraW50ZXJ2YWxgLgpAQCAtMzk4LDkgKzQxNCwxMCBAQAogCiAuLiBmdW5jdGlvbjo6IGdldGRsb3BlbmZsYWdzKCkKIAotICAgUmV0dXJuIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBmbGFncyB0aGF0IGFyZSB1c2VkIGZvciA6YzpmdW5jOmBkbG9wZW5gIGNhbGxzLgotICAgVGhlIGZsYWcgY29uc3RhbnRzIGFyZSBkZWZpbmVkIGluIHRoZSA6bW9kOmBjdHlwZXNgIGFuZCA6bW9kOmBETEZDTmAgbW9kdWxlcy4KLSAgIEF2YWlsYWJpbGl0eTogVW5peC4KKyAgIFJldHVybiB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZmxhZ3MgdGhhdCBhcmUgdXNlZCBmb3IKKyAgIDpjOmZ1bmM6YGRsb3BlbmAgY2FsbHMuICBTeW1ib2xpYyBuYW1lcyBmb3IgdGhlIGZsYWcgdmFsdWVzIGNhbiBiZQorICAgZm91bmQgaW4gdGhlIDptb2Q6YG9zYCBtb2R1bGUgKGBgUlRMRF94eHhgYCBjb25zdGFudHMsIGUuZy4KKyAgIDpkYXRhOmBvcy5SVExEX0xBWllgKS4gIEF2YWlsYWJpbGl0eTogVW5peC4KIAogCiAuLiBmdW5jdGlvbjo6IGdldGZpbGVzeXN0ZW1lbmNvZGluZygpCkBAIC01NzksOSArNTk2LDIwIEBACiAgICB8IDpjb25zdDpgaW1hZ2AgICAgICAgfCBtdWx0aXBsaWVyIHVzZWQgZm9yIHRoZSBpbWFnaW5hcnkgcGFydCBvZiBhICAgICAgfAogICAgfCAgICAgICAgICAgICAgICAgICAgIHwgY29tcGxleCBudW1iZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IDpjb25zdDpgYWxnb3JpdGhtYCAgfCBuYW1lIG9mIHRoZSBhbGdvcml0aG0gZm9yIGhhc2hpbmcgb2Ygc3RyLCBieXRlcywgfAorICAgfCAgICAgICAgICAgICAgICAgICAgIHwgYW5kIG1lbW9yeXZpZXcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IDpjb25zdDpgaGFzaF9iaXRzYCAgfCBpbnRlcm5hbCBvdXRwdXQgc2l6ZSBvZiB0aGUgaGFzaCBhbGdvcml0aG0gICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgOmNvbnN0OmBzZWVkX2JpdHNgICB8IHNpemUgb2YgdGhlIHNlZWQga2V5IG9mIHRoZSBoYXNoIGFsZ29yaXRobSAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgQWRkZWQgKmFsZ29yaXRobSosICpoYXNoX2JpdHMqIGFuZCAqc2VlZF9iaXRzKgorCiAKIC4uIGRhdGE6OiBoZXh2ZXJzaW9uCiAKQEAgLTYwMSw3ICs2MjksNyBAQAogICAgOnRlcm06YHN0cnVjdCBzZXF1ZW5jZWAgIDpkYXRhOmBzeXMudmVyc2lvbl9pbmZvYCBtYXkgYmUgdXNlZCBmb3IgYSBtb3JlCiAgICBodW1hbi1mcmllbmRseSBlbmNvZGluZyBvZiB0aGUgc2FtZSBpbmZvcm1hdGlvbi4KIAotICAgTW9yZSBkZXRhaWxzIG9mIGBgaGV4dmVyc2lvbmBgIGNhbiBiZSBmb3VuZCBhdCA6cmVmOmBhcGlhYml2ZXJzaW9uYAorICAgTW9yZSBkZXRhaWxzIG9mIGBgaGV4dmVyc2lvbmBgIGNhbiBiZSBmb3VuZCBhdCA6cmVmOmBhcGlhYml2ZXJzaW9uYC4KIAogCiAuLiBkYXRhOjogaW1wbGVtZW50YXRpb24KQEAgLTYzOSw3ICs2NjcsNyBAQAogICAgYW4gdW5kZXJzY29yZSwgYW5kIGFyZSBub3QgZGVzY3JpYmVkIGhlcmUuICBSZWdhcmRsZXNzIG9mIGl0cyBjb250ZW50cywKICAgIDpkYXRhOmBzeXMuaW1wbGVtZW50YXRpb25gIHdpbGwgbm90IGNoYW5nZSBkdXJpbmcgYSBydW4gb2YgdGhlIGludGVycHJldGVyLAogICAgbm9yIGJldHdlZW4gaW1wbGVtZW50YXRpb24gdmVyc2lvbnMuICAoSXQgbWF5IGNoYW5nZSBiZXR3ZWVuIFB5dGhvbgotICAgbGFuZ3VhZ2UgdmVyc2lvbnMsIGhvd2V2ZXIuKSAgU2VlIGBQRVAgNDIxYCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgIGxhbmd1YWdlIHZlcnNpb25zLCBob3dldmVyLikgIFNlZSA6cGVwOmA0MjFgIGZvciBtb3JlIGluZm9ybWF0aW9uLgogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKIApAQCAtNjY1LDYgKzY5MywxNyBAQAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4xCiAKIAorLi4gZGF0YTo6IF9faW50ZXJhY3RpdmVob29rX18KKworICAgV2hlbiB0aGlzIGF0dHJpYnV0ZSBleGlzdHMsIGl0cyB2YWx1ZSBpcyBhdXRvbWF0aWNhbGx5IGNhbGxlZCAod2l0aCBubworICAgYXJndW1lbnRzKSB3aGVuIHRoZSBpbnRlcnByZXRlciBpcyBsYXVuY2hlZCBpbiA6cmVmOmBpbnRlcmFjdGl2ZSBtb2RlCisgICA8dHV0LWludGVyYWN0aXZlPmAuICBUaGlzIGlzIGRvbmUgYWZ0ZXIgdGhlIDplbnZ2YXI6YFBZVEhPTlNUQVJUVVBgIGZpbGUgaXMKKyAgIHJlYWQsIHNvIHRoYXQgeW91IGNhbiBzZXQgdGhpcyBob29rIHRoZXJlLiAgVGhlIDptb2Q6YHNpdGVgIG1vZHVsZQorICAgOnJlZjpgc2V0cyB0aGlzIDxybGNvbXBsZXRlci1jb25maWc+YC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogLi4gZnVuY3Rpb246OiBpbnRlcm4oc3RyaW5nKQogCiAgICBFbnRlciAqc3RyaW5nKiBpbiB0aGUgdGFibGUgb2YgImludGVybmVkIiBzdHJpbmdzIGFuZCByZXR1cm4gdGhlIGludGVybmVkIHN0cmluZwpAQCAtODEyLDggKzg1MSw2IEBACiAgICBXaW5kb3dzICAgICAgICAgIGBgJ3dpbjMyJ2BgCiAgICBXaW5kb3dzL0N5Z3dpbiAgIGBgJ2N5Z3dpbidgYAogICAgTWFjIE9TIFggICAgICAgICBgYCdkYXJ3aW4nYGAKLSAgIE9TLzIgICAgICAgICAgICAgYGAnb3MyJ2BgCi0gICBPUy8yIEVNWCAgICAgICAgIGBgJ29zMmVteCdgYAogICAgPT09PT09PT09PT09PT09PSA9PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKQEAgLTg4NCw3ICs5MjEsNyBAQAogICAgdGhlIGludGVycHJldGVyIGxvYWRzIGV4dGVuc2lvbiBtb2R1bGVzLiAgQW1vbmcgb3RoZXIgdGhpbmdzLCB0aGlzIHdpbGwgZW5hYmxlIGEKICAgIGxhenkgcmVzb2x2aW5nIG9mIHN5bWJvbHMgd2hlbiBpbXBvcnRpbmcgYSBtb2R1bGUsIGlmIGNhbGxlZCBhcwogICAgYGBzeXMuc2V0ZGxvcGVuZmxhZ3MoMClgYC4gIFRvIHNoYXJlIHN5bWJvbHMgYWNyb3NzIGV4dGVuc2lvbiBtb2R1bGVzLCBjYWxsIGFzCi0gICBgYHN5cy5zZXRkbG9wZW5mbGFncyhvcy5SVExEX0dMT0JBTClgYC4gIFN5bWJvbGljIG5hbWVzIGZvciB0aGUgZmxhZyBtb2R1bGVzCisgICBgYHN5cy5zZXRkbG9wZW5mbGFncyhvcy5SVExEX0dMT0JBTClgYC4gIFN5bWJvbGljIG5hbWVzIGZvciB0aGUgZmxhZyB2YWx1ZXMKICAgIGNhbiBiZSBmb3VuZCBpbiB0aGUgOm1vZDpgb3NgIG1vZHVsZSAoYGBSVExEX3h4eGBgIGNvbnN0YW50cywgZS5nLgogICAgOmRhdGE6YG9zLlJUTERfTEFaWWApLgogCkBAIC0xMDI5LDggKzEwNjYsOSBAQAogICAgICBzdGF0ZW1lbnRzIGFuZCBmb3IgdGhlIHByb21wdHMgb2YgOmZ1bmM6YGlucHV0YDsKICAgICogVGhlIGludGVycHJldGVyJ3Mgb3duIHByb21wdHMgYW5kIGl0cyBlcnJvciBtZXNzYWdlcyBnbyB0byBgYHN0ZGVycmBgLgogCi0gICBCeSBkZWZhdWx0LCB0aGVzZSBzdHJlYW1zIGFyZSByZWd1bGFyIHRleHQgc3RyZWFtcyBhcyByZXR1cm5lZCBieSB0aGUKLSAgIDpmdW5jOmBvcGVuYCBmdW5jdGlvbi4gIFRoZWlyIHBhcmFtZXRlcnMgYXJlIGNob3NlbiBhcyBmb2xsb3dzOgorICAgVGhlc2Ugc3RyZWFtcyBhcmUgcmVndWxhciA6dGVybTpgdGV4dCBmaWxlcyA8dGV4dCBmaWxlPmAgbGlrZSB0aG9zZQorICAgcmV0dXJuZWQgYnkgdGhlIDpmdW5jOmBvcGVuYCBmdW5jdGlvbi4gIFRoZWlyIHBhcmFtZXRlcnMgYXJlIGNob3NlbiBhcworICAgZm9sbG93czoKIAogICAgKiBUaGUgY2hhcmFjdGVyIGVuY29kaW5nIGlzIHBsYXRmb3JtLWRlcGVuZGVudC4gIFVuZGVyIFdpbmRvd3MsIGlmIHRoZSBzdHJlYW0KICAgICAgaXMgaW50ZXJhY3RpdmUgKHRoYXQgaXMsIGlmIGl0cyA6bWV0aDpgaXNhdHR5YCBtZXRob2QgcmV0dXJucyBgYFRydWVgYCksIHRoZQpAQCAtMTAzOCwyNiArMTA3NiwyMiBAQAogICAgICBwbGF0Zm9ybXMsIHRoZSBsb2NhbGUgZW5jb2RpbmcgaXMgdXNlZCAoc2VlIDptZXRoOmBsb2NhbGUuZ2V0cHJlZmVycmVkZW5jb2RpbmdgKS4KIAogICAgICBVbmRlciBhbGwgcGxhdGZvcm1zIHRob3VnaCwgeW91IGNhbiBvdmVycmlkZSB0aGlzIHZhbHVlIGJ5IHNldHRpbmcgdGhlCi0gICAgIDplbnZ2YXI6YFBZVEhPTklPRU5DT0RJTkdgIGVudmlyb25tZW50IHZhcmlhYmxlLgorICAgICA6ZW52dmFyOmBQWVRIT05JT0VOQ09ESU5HYCBlbnZpcm9ubWVudCB2YXJpYWJsZSBiZWZvcmUgc3RhcnRpbmcgUHl0aG9uLgogCiAgICAqIFdoZW4gaW50ZXJhY3RpdmUsIHN0YW5kYXJkIHN0cmVhbXMgYXJlIGxpbmUtYnVmZmVyZWQuICBPdGhlcndpc2UsIHRoZXkKICAgICAgYXJlIGJsb2NrLWJ1ZmZlcmVkIGxpa2UgcmVndWxhciB0ZXh0IGZpbGVzLiAgWW91IGNhbiBvdmVycmlkZSB0aGlzCiAgICAgIHZhbHVlIHdpdGggdGhlIDpvcHRpb246YC11YCBjb21tYW5kLWxpbmUgb3B0aW9uLgogCi0gICBUbyB3cml0ZSBvciByZWFkIGJpbmFyeSBkYXRhIGZyb20vdG8gdGhlIHN0YW5kYXJkIHN0cmVhbXMsIHVzZSB0aGUKLSAgIHVuZGVybHlpbmcgYmluYXJ5IDpkYXRhOmB+aW8uVGV4dElPQmFzZS5idWZmZXJgLiAgRm9yIGV4YW1wbGUsIHRvIHdyaXRlCi0gICBieXRlcyB0byA6ZGF0YTpgc3Rkb3V0YCwgdXNlIGBgc3lzLnN0ZG91dC5idWZmZXIud3JpdGUoYidhYmMnKWBgLiAgVXNpbmcKLSAgIDptZXRoOmBpby5UZXh0SU9CYXNlLmRldGFjaGAsIHN0cmVhbXMgY2FuIGJlIG1hZGUgYmluYXJ5IGJ5IGRlZmF1bHQuICBUaGlzCi0gICBmdW5jdGlvbiBzZXRzIDpkYXRhOmBzdGRpbmAgYW5kIDpkYXRhOmBzdGRvdXRgIHRvIGJpbmFyeTo6CisgICAuLiBub3RlOjoKIAotICAgICAgZGVmIG1ha2Vfc3RyZWFtc19iaW5hcnkoKToKLSAgICAgICAgICBzeXMuc3RkaW4gPSBzeXMuc3RkaW4uZGV0YWNoKCkKLSAgICAgICAgICBzeXMuc3Rkb3V0ID0gc3lzLnN0ZG91dC5kZXRhY2goKQorICAgICAgVG8gd3JpdGUgb3IgcmVhZCBiaW5hcnkgZGF0YSBmcm9tL3RvIHRoZSBzdGFuZGFyZCBzdHJlYW1zLCB1c2UgdGhlCisgICAgICB1bmRlcmx5aW5nIGJpbmFyeSA6ZGF0YTpgfmlvLlRleHRJT0Jhc2UuYnVmZmVyYCBvYmplY3QuICBGb3IgZXhhbXBsZSwgdG8KKyAgICAgIHdyaXRlIGJ5dGVzIHRvIDpkYXRhOmBzdGRvdXRgLCB1c2UgYGBzeXMuc3Rkb3V0LmJ1ZmZlci53cml0ZShiJ2FiYycpYGAuCiAKLSAgIE5vdGUgdGhhdCB0aGUgc3RyZWFtcyBtYXkgYmUgcmVwbGFjZWQgd2l0aCBvYmplY3RzIChsaWtlIDpjbGFzczpgaW8uU3RyaW5nSU9gKQotICAgdGhhdCBkbyBub3Qgc3VwcG9ydCB0aGUgOmF0dHI6YH5pby5CdWZmZXJlZElPQmFzZS5idWZmZXJgIGF0dHJpYnV0ZSBvciB0aGUKLSAgIDptZXRoOmB+aW8uQnVmZmVyZWRJT0Jhc2UuZGV0YWNoYCBtZXRob2QgYW5kIGNhbiByYWlzZSA6ZXhjOmBBdHRyaWJ1dGVFcnJvcmAKLSAgIG9yIDpleGM6YGlvLlVuc3VwcG9ydGVkT3BlcmF0aW9uYC4KKyAgICAgIEhvd2V2ZXIsIGlmIHlvdSBhcmUgd3JpdGluZyBhIGxpYnJhcnkgKGFuZCBkbyBub3QgY29udHJvbCBpbiB3aGljaAorICAgICAgY29udGV4dCBpdHMgY29kZSB3aWxsIGJlIGV4ZWN1dGVkKSwgYmUgYXdhcmUgdGhhdCB0aGUgc3RhbmRhcmQgc3RyZWFtcworICAgICAgbWF5IGJlIHJlcGxhY2VkIHdpdGggZmlsZS1saWtlIG9iamVjdHMgbGlrZSA6Y2xhc3M6YGlvLlN0cmluZ0lPYCB3aGljaAorICAgICAgZG8gbm90IHN1cHBvcnQgdGhlIDphdHRyOmB+aW8uQnVmZmVyZWRJT0Jhc2UuYnVmZmVyYCBhdHRyaWJ1dGUuCiAKIAogLi4gZGF0YTo6IF9fc3RkaW5fXwpAQCAtMTA5NCw3ICsxMTI4LDYgQEAKICAgIHwgOmNvbnN0OmBuYW1lYCAgICB8IE5hbWUgb2YgdGhlIHRocmVhZCBpbXBsZW1lbnRhdGlvbjogICAgICAgICAgICAgICAgICAgICAgfAogICAgfCAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgICB8ICAgICAgICAgICAgICAgICAgfCAgKiBgYCdudCdgYDogV2luZG93cyB0aHJlYWRzICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgIHwgICAgICAgICAgICAgICAgICB8ICAqIGBgJ29zMidgYDogT1MvMiB0aHJlYWRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgfCAgICAgICAgICAgICAgICAgIHwgICogYGAncHRocmVhZCdgYDogUE9TSVggdGhyZWFkcyAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgICB8ICAgICAgICAgICAgICAgICAgfCAgKiBgYCdzb2xhcmlzJ2BgOiBTb2xhcmlzIHRocmVhZHMgICAgICAgICAgICAgICAgICAgICAgIHwKICAgICstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvc3lzY29uZmlnLnJzdCBiL0RvYy9saWJyYXJ5L3N5c2NvbmZpZy5yc3QKaW5kZXggYzQ3ZGNjZS4uNTM1YWM1NCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvc3lzY29uZmlnLnJzdAorKysgYi9Eb2MvbGlicmFyeS9zeXNjb25maWcucnN0CkBAIC04Myw4ICs4Myw2IEBACiAgIGxvY2F0ZWQgdW5kZXIgdGhlIHVzZXIgaG9tZSBkaXJlY3RvcnkuCiAtICpudCo6IHNjaGVtZSBmb3IgTlQgcGxhdGZvcm1zIGxpa2UgV2luZG93cy4KIC0gKm50X3VzZXIqOiBzY2hlbWUgZm9yIE5UIHBsYXRmb3Jtcywgd2hlbiB0aGUgKnVzZXIqIG9wdGlvbiBpcyB1c2VkLgotLSAqb3MyKjogc2NoZW1lIGZvciBPUy8yIHBsYXRmb3Jtcy4KLS0gKm9zMl9ob21lKjogc2NoZW1lIGZvciBPUy8yIHBhdGZvcm1zLCB3aGVuIHRoZSAqdXNlciogb3B0aW9uIGlzIHVzZWQuCiAKIEVhY2ggc2NoZW1lIGlzIGl0c2VsZiBjb21wb3NlZCBvZiBhIHNlcmllcyBvZiBwYXRocyBhbmQgZWFjaCBwYXRoIGhhcyBhIHVuaXF1ZQogaWRlbnRpZmllci4gIFB5dGhvbiBjdXJyZW50bHkgdXNlcyBlaWdodCBwYXRoczoKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3RhcmZpbGUucnN0IGIvRG9jL2xpYnJhcnkvdGFyZmlsZS5yc3QKaW5kZXggMWVhZDcxYy4uMDVmMjlhZCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvdGFyZmlsZS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvdGFyZmlsZS5yc3QKQEAgLTE5LDcgKzE5LDggQEAKIAogU29tZSBmYWN0cyBhbmQgZmlndXJlczoKIAotKiByZWFkcyBhbmQgd3JpdGVzIDptb2Q6YGd6aXBgLCA6bW9kOmBiejJgIGFuZCA6bW9kOmBsem1hYCBjb21wcmVzc2VkIGFyY2hpdmVzLgorKiByZWFkcyBhbmQgd3JpdGVzIDptb2Q6YGd6aXBgLCA6bW9kOmBiejJgIGFuZCA6bW9kOmBsem1hYCBjb21wcmVzc2VkIGFyY2hpdmVzCisgIGlmIHRoZSByZXNwZWN0aXZlIG1vZHVsZXMgYXJlIGF2YWlsYWJsZS4KIAogKiByZWFkL3dyaXRlIHN1cHBvcnQgZm9yIHRoZSBQT1NJWC4xLTE5ODggKHVzdGFyKSBmb3JtYXQuCiAKQEAgLTgxLDYgKzgyLDEwIEBACiAgICBJZiAqZmlsZW9iaiogaXMgc3BlY2lmaWVkLCBpdCBpcyB1c2VkIGFzIGFuIGFsdGVybmF0aXZlIHRvIGEgOnRlcm06YGZpbGUgb2JqZWN0YAogICAgb3BlbmVkIGluIGJpbmFyeSBtb2RlIGZvciAqbmFtZSouIEl0IGlzIHN1cHBvc2VkIHRvIGJlIGF0IHBvc2l0aW9uIDAuCiAKKyAgIEZvciBtb2RlcyBgYCd3Omd6J2BgLCBgYCdyOmd6J2BgLCBgYCd3OmJ6MidgYCwgYGAncjpiejInYGAsIDpmdW5jOmB0YXJmaWxlLm9wZW5gCisgICBhY2NlcHRzIHRoZSBrZXl3b3JkIGFyZ3VtZW50ICpjb21wcmVzc2xldmVsKiB0byBzcGVjaWZ5IHRoZSBjb21wcmVzc2lvbiBsZXZlbCBvZgorICAgdGhlIGZpbGUuCisKICAgIEZvciBzcGVjaWFsIHB1cnBvc2VzLCB0aGVyZSBpcyBhIHNlY29uZCBmb3JtYXQgZm9yICptb2RlKjoKICAgIGBgJ2ZpbGVtb2RlfFtjb21wcmVzc2lvbl0nYGAuICA6ZnVuYzpgdGFyZmlsZS5vcGVuYCB3aWxsIHJldHVybiBhIDpjbGFzczpgVGFyRmlsZWAKICAgIG9iamVjdCB0aGF0IHByb2Nlc3NlcyBpdHMgZGF0YSBhcyBhIHN0cmVhbSBvZiBibG9ja3MuICBObyByYW5kb20gc2Vla2luZyB3aWxsCkBAIC0xNzIsNiArMTc3LDEzIEBACiAgICBJcyByYWlzZWQgYnkgOm1ldGg6YFRhckluZm8uZnJvbWJ1ZmAgaWYgdGhlIGJ1ZmZlciBpdCBnZXRzIGlzIGludmFsaWQuCiAKIAorVGhlIGZvbGxvd2luZyBjb25zdGFudHMgYXJlIGF2YWlsYWJsZSBhdCB0aGUgbW9kdWxlIGxldmVsOgorCisuLiBkYXRhOjogRU5DT0RJTkcKKworICAgVGhlIGRlZmF1bHQgY2hhcmFjdGVyIGVuY29kaW5nOiBgYCd1dGYtOCdgYCBvbiBXaW5kb3dzLCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkKKyAgIDpmdW5jOmBzeXMuZ2V0ZmlsZXN5c3RlbWVuY29kaW5nYCBvdGhlcndpc2UuCisKIAogRWFjaCBvZiB0aGUgZm9sbG93aW5nIGNvbnN0YW50cyBkZWZpbmVzIGEgdGFyIGFyY2hpdmUgZm9ybWF0IHRoYXQgdGhlCiA6bW9kOmB0YXJmaWxlYCBtb2R1bGUgaXMgYWJsZSB0byBjcmVhdGUuIFNlZSBzZWN0aW9uIDpyZWY6YHRhci1mb3JtYXRzYCBmb3IKQEAgLTE5OCwyMCArMjEwLDE1IEBACiAgICBUaGUgZGVmYXVsdCBmb3JtYXQgZm9yIGNyZWF0aW5nIGFyY2hpdmVzLiBUaGlzIGlzIGN1cnJlbnRseSA6Y29uc3Q6YEdOVV9GT1JNQVRgLgogCiAKLVRoZSBmb2xsb3dpbmcgdmFyaWFibGVzIGFyZSBhdmFpbGFibGUgb24gbW9kdWxlIGxldmVsOgotCi0KLS4uIGRhdGE6OiBFTkNPRElORwotCi0gICBUaGUgZGVmYXVsdCBjaGFyYWN0ZXIgZW5jb2Rpbmc6IGBgJ3V0Zi04J2BgIG9uIFdpbmRvd3MsCi0gICA6ZnVuYzpgc3lzLmdldGZpbGVzeXN0ZW1lbmNvZGluZ2Agb3RoZXJ3aXNlLgotCi0KIC4uIHNlZWFsc286OgogCiAgICBNb2R1bGUgOm1vZDpgemlwZmlsZWAKICAgICAgIERvY3VtZW50YXRpb24gb2YgdGhlIDptb2Q6YHppcGZpbGVgIHN0YW5kYXJkIG1vZHVsZS4KIAorICAgOnJlZjpgYXJjaGl2aW5nLW9wZXJhdGlvbnNgCisgICAgICBEb2N1bWVudGF0aW9uIG9mIHRoZSBoaWdoZXItbGV2ZWwgYXJjaGl2aW5nIGZhY2lsaXRpZXMgcHJvdmlkZWQgYnkgdGhlCisgICAgICBzdGFuZGFyZCA6bW9kOmBzaHV0aWxgIG1vZHVsZS4KKwogICAgYEdOVSB0YXIgbWFudWFsLCBCYXNpYyBUYXIgRm9ybWF0IDxodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGFyL21hbnVhbC9odG1sX25vZGUvU3RhbmRhcmQuaHRtbD5gXwogICAgICAgRG9jdW1lbnRhdGlvbiBmb3IgdGFyIGFyY2hpdmUgZmlsZXMsIGluY2x1ZGluZyBHTlUgdGFyIGV4dGVuc2lvbnMuCiAKQEAgLTIzNCw3ICsyNDEsNyBAQAogOnJlZjpgdGFyLWV4YW1wbGVzYCBzZWN0aW9uIGZvciBhIHVzZSBjYXNlLgogCiAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKLSAgIEFkZGVkIHN1cHBvcnQgZm9yIHRoZSBjb250ZXh0IG1hbmFnZXIgcHJvdG9jb2wuCisgICBBZGRlZCBzdXBwb3J0IGZvciB0aGUgY29udGV4dCBtYW5hZ2VtZW50IHByb3RvY29sLgogCiAuLiBjbGFzczo6IFRhckZpbGUobmFtZT1Ob25lLCBtb2RlPSdyJywgZmlsZW9iaj1Ob25lLCBmb3JtYXQ9REVGQVVMVF9GT1JNQVQsIHRhcmluZm89VGFySW5mbywgZGVyZWZlcmVuY2U9RmFsc2UsIGlnbm9yZV96ZXJvcz1GYWxzZSwgZW5jb2Rpbmc9RU5DT0RJTkcsIGVycm9ycz0nc3Vycm9nYXRlZXNjYXBlJywgcGF4X2hlYWRlcnM9Tm9uZSwgZGVidWc9MCwgZXJyb3JsZXZlbD0wKQogCkBAIC0yOTIsNyArMjk5LDcgQEAKICAgIHdpbGwgYmUgYWRkZWQgYXMgYSBwYXggZ2xvYmFsIGhlYWRlciBpZiAqZm9ybWF0KiBpcyA6Y29uc3Q6YFBBWF9GT1JNQVRgLgogCiAKLS4uIG1ldGhvZDo6IFRhckZpbGUub3BlbiguLi4pCisuLiBjbGFzc21ldGhvZDo6IFRhckZpbGUub3BlbiguLi4pCiAKICAgIEFsdGVybmF0aXZlIGNvbnN0cnVjdG9yLiBUaGUgOmZ1bmM6YHRhcmZpbGUub3BlbmAgZnVuY3Rpb24gaXMgYWN0dWFsbHkgYQogICAgc2hvcnRjdXQgdG8gdGhpcyBjbGFzc21ldGhvZC4KQEAgLTQ1OCwxNCArNDY1LDE0IEBACiAgICBDcmVhdGUgYSA6Y2xhc3M6YFRhckluZm9gIG9iamVjdC4KIAogCi0uLiBtZXRob2Q6OiBUYXJJbmZvLmZyb21idWYoYnVmKQorLi4gY2xhc3NtZXRob2Q6OiBUYXJJbmZvLmZyb21idWYoYnVmLCBlbmNvZGluZywgZXJyb3JzKQogCiAgICBDcmVhdGUgYW5kIHJldHVybiBhIDpjbGFzczpgVGFySW5mb2Agb2JqZWN0IGZyb20gc3RyaW5nIGJ1ZmZlciAqYnVmKi4KIAotICAgUmFpc2VzIDpleGM6YEhlYWRlckVycm9yYCBpZiB0aGUgYnVmZmVyIGlzIGludmFsaWQuLgorICAgUmFpc2VzIDpleGM6YEhlYWRlckVycm9yYCBpZiB0aGUgYnVmZmVyIGlzIGludmFsaWQuCiAKIAotLi4gbWV0aG9kOjogVGFySW5mby5mcm9tdGFyZmlsZSh0YXJmaWxlKQorLi4gY2xhc3NtZXRob2Q6OiBUYXJJbmZvLmZyb210YXJmaWxlKHRhcmZpbGUpCiAKICAgIFJlYWQgdGhlIG5leHQgbWVtYmVyIGZyb20gdGhlIDpjbGFzczpgVGFyRmlsZWAgb2JqZWN0ICp0YXJmaWxlKiBhbmQgcmV0dXJuIGl0IGFzCiAgICBhIDpjbGFzczpgVGFySW5mb2Agb2JqZWN0LgpAQCAtNTA5LDcgKzUxNiw3IEBACiAgICA6Y29uc3Q6YEFSRUdUWVBFYCwgOmNvbnN0OmBMTktUWVBFYCwgOmNvbnN0OmBTWU1UWVBFYCwgOmNvbnN0OmBESVJUWVBFYCwKICAgIDpjb25zdDpgRklGT1RZUEVgLCA6Y29uc3Q6YENPTlRUWVBFYCwgOmNvbnN0OmBDSFJUWVBFYCwgOmNvbnN0OmBCTEtUWVBFYCwKICAgIDpjb25zdDpgR05VVFlQRV9TUEFSU0VgLiAgVG8gZGV0ZXJtaW5lIHRoZSB0eXBlIG9mIGEgOmNsYXNzOmBUYXJJbmZvYCBvYmplY3QKLSAgIG1vcmUgY29udmVuaWVudGx5LCB1c2UgdGhlIGBgaXNfKigpYGAgbWV0aG9kcyBiZWxvdy4KKyAgIG1vcmUgY29udmVuaWVudGx5LCB1c2UgdGhlIGBgaXMqKClgYCBtZXRob2RzIGJlbG93LgogCiAKIC4uIGF0dHJpYnV0ZTo6IFRhckluZm8ubGlua25hbWUKQEAgLTU5MSw2ICs1OTgsNjcgQEAKICAgIFJldHVybiA6Y29uc3Q6YFRydWVgIGlmIGl0IGlzIG9uZSBvZiBjaGFyYWN0ZXIgZGV2aWNlLCBibG9jayBkZXZpY2Ugb3IgRklGTy4KIAogCisuLiBfdGFyZmlsZS1jb21tYW5kbGluZToKKworQ29tbWFuZCBMaW5lIEludGVyZmFjZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworVGhlIDptb2Q6YHRhcmZpbGVgIG1vZHVsZSBwcm92aWRlcyBhIHNpbXBsZSBjb21tYW5kIGxpbmUgaW50ZXJmYWNlIHRvIGludGVyYWN0Cit3aXRoIHRhciBhcmNoaXZlcy4KKworSWYgeW91IHdhbnQgdG8gY3JlYXRlIGEgbmV3IHRhciBhcmNoaXZlLCBzcGVjaWZ5IGl0cyBuYW1lIGFmdGVyIHRoZSA6b3B0aW9uOmAtY2AKK29wdGlvbiBhbmQgdGhlbiBsaXN0IHRoZSBmaWxlbmFtZShzKSB0aGF0IHNob3VsZCBiZSBpbmNsdWRlZDo6CisKKyAgICAkIHB5dGhvbiAtbSB0YXJmaWxlIC1jIG1vbnR5LnRhciAgc3BhbS50eHQgZWdncy50eHQKKworUGFzc2luZyBhIGRpcmVjdG9yeSBpcyBhbHNvIGFjY2VwdGFibGU6OgorCisgICAgJCBweXRob24gLW0gdGFyZmlsZSAtYyBtb250eS50YXIgbGlmZS1vZi1icmlhbl8xOTc5LworCitJZiB5b3Ugd2FudCB0byBleHRyYWN0IGEgdGFyIGFyY2hpdmUgaW50byB0aGUgY3VycmVudCBkaXJlY3RvcnksIHVzZQordGhlIDpvcHRpb246YC1lYCBvcHRpb246OgorCisgICAgJCBweXRob24gLW0gdGFyZmlsZSAtZSBtb250eS50YXIKKworWW91IGNhbiBhbHNvIGV4dHJhY3QgYSB0YXIgYXJjaGl2ZSBpbnRvIGEgZGlmZmVyZW50IGRpcmVjdG9yeSBieSBwYXNzaW5nIHRoZQorZGlyZWN0b3J5J3MgbmFtZTo6CisKKyAgICAkIHB5dGhvbiAtbSB0YXJmaWxlIC1lIG1vbnR5LnRhciAgb3RoZXItZGlyLworCitGb3IgYSBsaXN0IG9mIHRoZSBmaWxlcyBpbiBhIHRhciBhcmNoaXZlLCB1c2UgdGhlIDpvcHRpb246YC1sYCBvcHRpb246OgorCisgICAgJCBweXRob24gLW0gdGFyZmlsZSAtbCBtb250eS50YXIKKworCitDb21tYW5kIGxpbmUgb3B0aW9ucworfn5+fn5+fn5+fn5+fn5+fn5+fn4KKworLi4gY21kb3B0aW9uOjogLWwgPHRhcmZpbGU+CisgICAgICAgICAgICAgICAtLWxpc3QgPHRhcmZpbGU+CisKKyAgIExpc3QgZmlsZXMgaW4gYSB0YXJmaWxlLgorCisuLiBjbWRvcHRpb246OiAtYyA8dGFyZmlsZT4gPHNvdXJjZTE+IDxzb3VyY2VOPgorICAgICAgICAgICAgICAgLS1jcmVhdGUgPHRhcmZpbGU+IDxzb3VyY2UxPiA8c291cmNlTj4KKworICAgQ3JlYXRlIHRhcmZpbGUgZnJvbSBzb3VyY2UgZmlsZXMuCisKKy4uIGNtZG9wdGlvbjo6IC1lIDx0YXJmaWxlPiBbPG91dHB1dF9kaXI+XQorICAgICAgICAgICAgICAgLS1leHRyYWN0IDx0YXJmaWxlPiBbPG91dHB1dF9kaXI+XQorCisgICBFeHRyYWN0IHRhcmZpbGUgaW50byB0aGUgY3VycmVudCBkaXJlY3RvcnkgaWYgKm91dHB1dF9kaXIqIGlzIG5vdCBzcGVjaWZpZWQuCisKKy4uIGNtZG9wdGlvbjo6IC10IDx0YXJmaWxlPgorICAgICAgICAgICAgICAgLS10ZXN0IDx0YXJmaWxlPgorCisgICBUZXN0IHdoZXRoZXIgdGhlIHRhcmZpbGUgaXMgdmFsaWQgb3Igbm90LgorCisuLiBjbWRvcHRpb246OiAtdiwgLS12ZXJib3NlCisKKyAgIFZlcmJvc2Ugb3V0cHV0CisKIC4uIF90YXItZXhhbXBsZXM6CiAKIEV4YW1wbGVzCkBAIC03MjYsNyArNzk0LDcgQEAKIGFwcHJvcHJpYXRlbHksIHRoaXMgY29udmVyc2lvbiBtYXkgZmFpbC4KIAogVGhlICplcnJvcnMqIGFyZ3VtZW50IGRlZmluZXMgaG93IGNoYXJhY3RlcnMgYXJlIHRyZWF0ZWQgdGhhdCBjYW5ub3QgYmUKLWNvbnZlcnRlZC4gUG9zc2libGUgdmFsdWVzIGFyZSBsaXN0ZWQgaW4gc2VjdGlvbiA6cmVmOmBjb2RlYy1iYXNlLWNsYXNzZXNgLgorY29udmVydGVkLiBQb3NzaWJsZSB2YWx1ZXMgYXJlIGxpc3RlZCBpbiBzZWN0aW9uIDpyZWY6YGVycm9yLWhhbmRsZXJzYC4KIFRoZSBkZWZhdWx0IHNjaGVtZSBpcyBgYCdzdXJyb2dhdGVlc2NhcGUnYGAgd2hpY2ggUHl0aG9uIGFsc28gdXNlcyBmb3IgaXRzCiBmaWxlIHN5c3RlbSBjYWxscywgc2VlIDpyZWY6YG9zLWZpbGVuYW1lc2AuCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3RlbG5ldGxpYi5yc3QgYi9Eb2MvbGlicmFyeS90ZWxuZXRsaWIucnN0CmluZGV4IDMxZTVkYmIuLjQwNDBmNzIgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3RlbG5ldGxpYi5yc3QKKysrIGIvRG9jL2xpYnJhcnkvdGVsbmV0bGliLnJzdApAQCAtMzEsNyArMzEsNyBAQAogICAgOmNsYXNzOmBUZWxuZXRgIHJlcHJlc2VudHMgYSBjb25uZWN0aW9uIHRvIGEgVGVsbmV0IHNlcnZlci4gVGhlIGluc3RhbmNlIGlzCiAgICBpbml0aWFsbHkgbm90IGNvbm5lY3RlZCBieSBkZWZhdWx0OyB0aGUgOm1ldGg6YG9wZW5gIG1ldGhvZCBtdXN0IGJlIHVzZWQgdG8KICAgIGVzdGFibGlzaCBhIGNvbm5lY3Rpb24uICBBbHRlcm5hdGl2ZWx5LCB0aGUgaG9zdCBuYW1lIGFuZCBvcHRpb25hbCBwb3J0Ci0gICBudW1iZXIgY2FuIGJlIHBhc3NlZCB0byB0aGUgY29uc3RydWN0b3IsIHRvLCBpbiB3aGljaCBjYXNlIHRoZSBjb25uZWN0aW9uIHRvCisgICBudW1iZXIgY2FuIGJlIHBhc3NlZCB0byB0aGUgY29uc3RydWN0b3IgdG9vLCBpbiB3aGljaCBjYXNlIHRoZSBjb25uZWN0aW9uIHRvCiAgICB0aGUgc2VydmVyIHdpbGwgYmUgZXN0YWJsaXNoZWQgYmVmb3JlIHRoZSBjb25zdHJ1Y3RvciByZXR1cm5zLiAgVGhlIG9wdGlvbmFsCiAgICAqdGltZW91dCogcGFyYW1ldGVyIHNwZWNpZmllcyBhIHRpbWVvdXQgaW4gc2Vjb25kcyBmb3IgYmxvY2tpbmcgb3BlcmF0aW9ucwogICAgbGlrZSB0aGUgY29ubmVjdGlvbiBhdHRlbXB0IChpZiBub3Qgc3BlY2lmaWVkLCB0aGUgZ2xvYmFsIGRlZmF1bHQgdGltZW91dApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvdGVtcGZpbGUucnN0IGIvRG9jL2xpYnJhcnkvdGVtcGZpbGUucnN0CmluZGV4IGQ3ODE1OWQuLjFlZmI1ZTYgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3RlbXBmaWxlLnJzdAorKysgYi9Eb2MvbGlicmFyeS90ZW1wZmlsZS5yc3QKQEAgLTgyLDcgKzgyLDcgQEAKICAgIGNhdXNlcyB0aGUgZmlsZSB0byByb2xsIG92ZXIgdG8gYW4gb24tZGlzayBmaWxlIHJlZ2FyZGxlc3Mgb2YgaXRzIHNpemUuCiAKICAgIFRoZSByZXR1cm5lZCBvYmplY3QgaXMgYSBmaWxlLWxpa2Ugb2JqZWN0IHdob3NlIDphdHRyOmBfZmlsZWAgYXR0cmlidXRlCi0gICBpcyBlaXRoZXIgYSA6Y2xhc3M6YGlvLkJ5dGVzSU9gIG9yIDpjbGFzczpgaW8uU3RyaW5nSU9gIG9iamVjdCAoZGVwZW5kaW5nIG9uCisgICBpcyBlaXRoZXIgYW4gOmNsYXNzOmBpby5CeXRlc0lPYCBvciA6Y2xhc3M6YGlvLlN0cmluZ0lPYCBvYmplY3QgKGRlcGVuZGluZyBvbgogICAgd2hldGhlciBiaW5hcnkgb3IgdGV4dCAqbW9kZSogd2FzIHNwZWNpZmllZCkgb3IgYSB0cnVlIGZpbGUKICAgIG9iamVjdCwgZGVwZW5kaW5nIG9uIHdoZXRoZXIgOmZ1bmM6YHJvbGxvdmVyYCBoYXMgYmVlbiBjYWxsZWQuICBUaGlzCiAgICBmaWxlLWxpa2Ugb2JqZWN0IGNhbiBiZSB1c2VkIGluIGEgOmtleXdvcmQ6YHdpdGhgIHN0YXRlbWVudCwganVzdCBsaWtlCkBAIC0xOTIsNyArMTkyLDcgQEAKICAgICAgICAgID4+PiBvcy5wYXRoLmV4aXN0cyhmLm5hbWUpCiAgICAgICAgICBGYWxzZQogCi1UaGUgbW9kdWxlIHVzZXMgdHdvIGdsb2JhbCB2YXJpYWJsZXMgdGhhdCB0ZWxsIGl0IGhvdyB0byBjb25zdHJ1Y3QgYQorVGhlIG1vZHVsZSB1c2VzIGEgZ2xvYmFsIHZhcmlhYmxlIHRoYXQgdGVsbCBpdCBob3cgdG8gY29uc3RydWN0IGEKIHRlbXBvcmFyeSBuYW1lLiAgVGhleSBhcmUgaW5pdGlhbGl6ZWQgYXQgdGhlIGZpcnN0IGNhbGwgdG8gYW55IG9mIHRoZQogZnVuY3Rpb25zIGFib3ZlLiAgVGhlIGNhbGxlciBtYXkgY2hhbmdlIHRoZW0sIGJ1dCB0aGlzIGlzIGRpc2NvdXJhZ2VkOyB1c2UKIHRoZSBhcHByb3ByaWF0ZSBmdW5jdGlvbiBhcmd1bWVudHMsIGluc3RlYWQuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS90ZXN0LnJzdCBiL0RvYy9saWJyYXJ5L3Rlc3QucnN0CmluZGV4IGMyODUzNmQuLjJmZGFmOGMgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3Rlc3QucnN0CisrKyBiL0RvYy9saWJyYXJ5L3Rlc3QucnN0CkBAIC04NSw3ICs4NSw3IEBACiAKIFRoaXMgY29kZSBwYXR0ZXJuIGFsbG93cyB0aGUgdGVzdGluZyBzdWl0ZSB0byBiZSBydW4gYnkgOm1vZDpgdGVzdC5yZWdydGVzdGAsCiBvbiBpdHMgb3duIGFzIGEgc2NyaXB0IHRoYXQgc3VwcG9ydHMgdGhlIDptb2Q6YHVuaXR0ZXN0YCBDTEksIG9yIHZpYSB0aGUKLWBweXRob24gLW0gdW5pdHRlc3RgIENMSS4KK2BgcHl0aG9uIC1tIHVuaXR0ZXN0YGAgQ0xJLgogCiBUaGUgZ29hbCBmb3IgcmVncmVzc2lvbiB0ZXN0aW5nIGlzIHRvIHRyeSB0byBicmVhayBjb2RlLiBUaGlzIGxlYWRzIHRvIGEgZmV3CiBndWlkZWxpbmVzIHRvIGJlIGZvbGxvd2VkOgpAQCAtMTQxLDkgKzE0MSw5IEBACiAgICAgICAgICBhcmcgPSAoMSwgMiwgMykKIAogICBXaGVuIHVzaW5nIHRoaXMgcGF0dGVybiwgcmVtZW1iZXIgdGhhdCBhbGwgY2xhc3NlcyB0aGF0IGluaGVyaXQgZnJvbQotICBgdW5pdHRlc3QuVGVzdENhc2VgIGFyZSBydW4gYXMgdGVzdHMuICBUaGUgYE1peGluYCBjbGFzcyBpbiB0aGUgZXhhbXBsZSBhYm92ZQorICA6Y2xhc3M6YHVuaXR0ZXN0LlRlc3RDYXNlYCBhcmUgcnVuIGFzIHRlc3RzLiAgVGhlIDpjbGFzczpgTWl4aW5gIGNsYXNzIGluIHRoZSBleGFtcGxlIGFib3ZlCiAgIGRvZXMgbm90IGhhdmUgYW55IGRhdGEgYW5kIHNvIGNhbid0IGJlIHJ1biBieSBpdHNlbGYsIHRodXMgaXQgZG9lcyBub3QKLSAgaW5oZXJpdCBmcm9tIGB1bml0dGVzdC5UZXN0Q2FzZWAuCisgIGluaGVyaXQgZnJvbSA6Y2xhc3M6YHVuaXR0ZXN0LlRlc3RDYXNlYC4KIAogCiAuLiBzZWVhbHNvOjoKQEAgLTE2MCw3ICsxNjAsNyBAQAogVGhlIDptb2Q6YHRlc3RgIHBhY2thZ2UgY2FuIGJlIHJ1biBhcyBhIHNjcmlwdCB0byBkcml2ZSBQeXRob24ncyByZWdyZXNzaW9uCiB0ZXN0IHN1aXRlLCB0aGFua3MgdG8gdGhlIDpvcHRpb246YC1tYCBvcHRpb246IDpwcm9ncmFtOmBweXRob24gLW0gdGVzdGAuIFVuZGVyCiB0aGUgaG9vZCwgaXQgdXNlcyA6bW9kOmB0ZXN0LnJlZ3J0ZXN0YDsgdGhlIGNhbGwgOnByb2dyYW06YHB5dGhvbiAtbQotdGVzdC5yZWdydGVzdGAgdXNlZCBpbiBwcmV2aW91cyBQeXRob24gdmVyc2lvbnMgc3RpbGwgd29ya3MpLiAgUnVubmluZyB0aGUKK3Rlc3QucmVncnRlc3RgIHVzZWQgaW4gcHJldmlvdXMgUHl0aG9uIHZlcnNpb25zIHN0aWxsIHdvcmtzLiAgUnVubmluZyB0aGUKIHNjcmlwdCBieSBpdHNlbGYgYXV0b21hdGljYWxseSBzdGFydHMgcnVubmluZyBhbGwgcmVncmVzc2lvbiB0ZXN0cyBpbiB0aGUKIDptb2Q6YHRlc3RgIHBhY2thZ2UuIEl0IGRvZXMgdGhpcyBieSBmaW5kaW5nIGFsbCBtb2R1bGVzIGluIHRoZSBwYWNrYWdlIHdob3NlCiBuYW1lIHN0YXJ0cyB3aXRoIGBgdGVzdF9gYCwgaW1wb3J0aW5nIHRoZW0sIGFuZCBleGVjdXRpbmcgdGhlIGZ1bmN0aW9uCkBAIC00NDMsMTMgKzQ0Myw2IEBACiAgICBBIGRlY29yYXRvciBmb3IgcnVubmluZyB0ZXN0cyB0aGF0IHJlcXVpcmUgc3VwcG9ydCBmb3Igc3ltYm9saWMgbGlua3MuCiAKIAotLi4gZnVuY3Rpb246OiBzdXBwcmVzc19jcmFzaF9wb3B1cCgpCi0KLSAgIEEgY29udGV4dCBtYW5hZ2VyIHRoYXQgZGlzYWJsZXMgV2luZG93cyBFcnJvciBSZXBvcnRpbmcgZGlhbG9ncyB1c2luZwotICAgYFNldEVycm9yTW9kZSA8aHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L3dpbmRvd3MvZGVza3RvcC9tczY4MDYyMSUyOHY9dnMuODUlMjkuYXNweD5gXy4KLSAgIE9uIG90aGVyIHBsYXRmb3JtcyBpdCdzIGEgbm8tb3AuCi0KLQogLi4gZGVjb3JhdG9yOjogYW50aWNpcGF0ZV9mYWlsdXJlKGNvbmRpdGlvbikKIAogICAgQSBkZWNvcmF0b3IgdG8gY29uZGl0aW9uYWxseSBtYXJrIHRlc3RzIHdpdGgKQEAgLTQ2OCw3ICs0NjEsNyBAQAogLi4gZnVuY3Rpb246OiBtYWtlX2JhZF9mZCgpCiAKICAgIENyZWF0ZSBhbiBpbnZhbGlkIGZpbGUgZGVzY3JpcHRvciBieSBvcGVuaW5nIGFuZCBjbG9zaW5nIGEgdGVtcG9yYXJ5IGZpbGUsCi0gICBhbmQgcmV0dXJuaW5nIGl0cyBkZXNjcmlwb3IuCisgICBhbmQgcmV0dXJuaW5nIGl0cyBkZXNjcmlwdG9yLgogCiAKIC4uIGZ1bmN0aW9uOjogaW1wb3J0X21vZHVsZShuYW1lLCBkZXByZWNhdGVkPUZhbHNlKQpAQCAtNTYxLDYgKzU1NCwyMSBAQAogICAgcnVuIHNpbXVsdGFuZW91c2x5LCB3aGljaCBpcyBhIHByb2JsZW0gZm9yIGJ1aWxkYm90cy4KIAogCisuLiBmdW5jdGlvbjo6IGxvYWRfcGFja2FnZV90ZXN0cyhwa2dfZGlyLCBsb2FkZXIsIHN0YW5kYXJkX3Rlc3RzLCBwYXR0ZXJuKQorCisgICBHZW5lcmljIGltcGxlbWVudGF0aW9uIG9mIHRoZSA6bW9kOmB1bml0dGVzdGAgYGBsb2FkX3Rlc3RzYGAgcHJvdG9jb2wgZm9yCisgICB1c2UgaW4gdGVzdCBwYWNrYWdlcy4gICpwa2dfZGlyKiBpcyB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhlIHBhY2thZ2U7CisgICAqbG9hZGVyKiwgKnN0YW5kYXJkX3Rlc3RzKiwgYW5kICpwYXR0ZXJuKiBhcmUgdGhlIGFyZ3VtZW50cyBleHBlY3RlZCBieQorICAgYGBsb2FkX3Rlc3RzYGAuICBJbiBzaW1wbGUgY2FzZXMsIHRoZSB0ZXN0IHBhY2thZ2UncyBgYF9faW5pdF9fLnB5YGAKKyAgIGNhbiBiZSB0aGUgZm9sbG93aW5nOjoKKworICAgICAgaW1wb3J0IG9zCisgICAgICBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgbG9hZF9wYWNrYWdlX3Rlc3RzCisKKyAgICAgIGRlZiBsb2FkX3Rlc3RzKCphcmdzKToKKyAgICAgICAgICByZXR1cm4gbG9hZF9wYWNrYWdlX3Rlc3RzKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICphcmdzKQorCisKIFRoZSA6bW9kOmB0ZXN0LnN1cHBvcnRgIG1vZHVsZSBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgY2xhc3NlczoKIAogLi4gY2xhc3M6OiBUcmFuc2llbnRSZXNvdXJjZShleGMsICoqa3dhcmdzKQpAQCAtNTk0LDYgKzYwMiwyMSBAQAogICAgVGVtcG9yYXJpbHkgdW5zZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIGBgZW52dmFyYGAuCiAKIAorLi4gY2xhc3M6OiBTdXBwcmVzc0NyYXNoUmVwb3J0KCkKKworICAgQSBjb250ZXh0IG1hbmFnZXIgdXNlZCB0byB0cnkgdG8gcHJldmVudCBjcmFzaCBkaWFsb2cgcG9wdXBzIG9uIHRlc3RzIHRoYXQKKyAgIGFyZSBleHBlY3RlZCB0byBjcmFzaCBhIHN1YnByb2Nlc3MuCisKKyAgIE9uIFdpbmRvd3MsIGl0IGRpc2FibGVzIFdpbmRvd3MgRXJyb3IgUmVwb3J0aW5nIGRpYWxvZ3MgdXNpbmcKKyAgIGBTZXRFcnJvck1vZGUgPGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS93aW5kb3dzL2Rlc2t0b3AvbXM2ODA2MjEuYXNweD5gXy4KKworICAgT24gVU5JWCwgOmZ1bmM6YHJlc291cmNlLnNldHJsaW1pdGAgaXMgdXNlZCB0byBzZXQKKyAgIDphdHRyOmByZXNvdXJjZS5STElNSVRfQ09SRWAncyBzb2Z0IGxpbWl0IHRvIDAgdG8gcHJldmVudCBjb3JlZHVtcCBmaWxlCisgICBjcmVhdGlvbi4KKworICAgT24gYm90aCBwbGF0Zm9ybXMsIHRoZSBvbGQgdmFsdWUgaXMgcmVzdG9yZWQgYnkgOm1ldGg6YF9fZXhpdF9fYC4KKworCiAuLiBjbGFzczo6IFdhcm5pbmdzUmVjb3JkZXIoKQogCiAgICBDbGFzcyB1c2VkIHRvIHJlY29yZCB3YXJuaW5ncyBmb3IgdW5pdCB0ZXN0cy4gU2VlIGRvY3VtZW50YXRpb24gb2YKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3RleHR3cmFwLnJzdCBiL0RvYy9saWJyYXJ5L3RleHR3cmFwLnJzdAppbmRleCBjNjI1MjU0Li45ZmU3YTM1IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS90ZXh0d3JhcC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvdGV4dHdyYXAucnN0CkBAIC0xMCwxMSArMTAsMTEgQEAKIAogLS0tLS0tLS0tLS0tLS0KIAotVGhlIDptb2Q6YHRleHR3cmFwYCBtb2R1bGUgcHJvdmlkZXMgdHdvIGNvbnZlbmllbmNlIGZ1bmN0aW9ucywgOmZ1bmM6YHdyYXBgIGFuZAotOmZ1bmM6YGZpbGxgLCBhcyB3ZWxsIGFzIDpjbGFzczpgVGV4dFdyYXBwZXJgLCB0aGUgY2xhc3MgdGhhdCBkb2VzIGFsbCB0aGUgd29yaywKLWFuZCB0d28gdXRpbGl0eSBmdW5jdGlvbnMsIDpmdW5jOmBkZWRlbnRgIGFuZCA6ZnVuYzpgaW5kZW50YC4gIElmIHlvdSdyZSBqdXN0IHdyYXBwaW5nIG9yIGZpbGxpbmcgb25lCi1vciB0d28gIHRleHQgc3RyaW5ncywgdGhlIGNvbnZlbmllbmNlIGZ1bmN0aW9ucyBzaG91bGQgYmUgZ29vZCBlbm91Z2g7Ci1vdGhlcndpc2UsICB5b3Ugc2hvdWxkIHVzZSBhbiBpbnN0YW5jZSBvZiA6Y2xhc3M6YFRleHRXcmFwcGVyYCBmb3IgZWZmaWNpZW5jeS4KK1RoZSA6bW9kOmB0ZXh0d3JhcGAgbW9kdWxlIHByb3ZpZGVzIHNvbWUgY29udmVuaWVuY2UgZnVuY3Rpb25zLAorYXMgd2VsbCBhcyA6Y2xhc3M6YFRleHRXcmFwcGVyYCwgdGhlIGNsYXNzIHRoYXQgZG9lcyBhbGwgdGhlIHdvcmsuCitJZiB5b3UncmUganVzdCB3cmFwcGluZyBvciBmaWxsaW5nIG9uZSBvciB0d28gdGV4dCBzdHJpbmdzLCB0aGUgY29udmVuaWVuY2UKK2Z1bmN0aW9ucyBzaG91bGQgYmUgZ29vZCBlbm91Z2g7IG90aGVyd2lzZSwgeW91IHNob3VsZCB1c2UgYW4gaW5zdGFuY2Ugb2YKKzpjbGFzczpgVGV4dFdyYXBwZXJgIGZvciBlZmZpY2llbmN5LgogCiAuLiBmdW5jdGlvbjo6IHdyYXAodGV4dCwgd2lkdGg9NzAsICoqa3dhcmdzKQogCkBAIC0zOSwxOSArMzksMzEgQEAKICAgIEluIHBhcnRpY3VsYXIsIDpmdW5jOmBmaWxsYCBhY2NlcHRzIGV4YWN0bHkgdGhlIHNhbWUga2V5d29yZCBhcmd1bWVudHMgYXMKICAgIDpmdW5jOmB3cmFwYC4KIAotQm90aCA6ZnVuYzpgd3JhcGAgYW5kIDpmdW5jOmBmaWxsYCB3b3JrIGJ5IGNyZWF0aW5nIGEgOmNsYXNzOmBUZXh0V3JhcHBlcmAKLWluc3RhbmNlIGFuZCBjYWxsaW5nIGEgc2luZ2xlIG1ldGhvZCBvbiBpdC4gIFRoYXQgaW5zdGFuY2UgaXMgbm90IHJldXNlZCwgc28gZm9yCi1hcHBsaWNhdGlvbnMgdGhhdCB3cmFwL2ZpbGwgbWFueSB0ZXh0IHN0cmluZ3MsIGl0IHdpbGwgYmUgbW9yZSBlZmZpY2llbnQgZm9yIHlvdQotdG8gY3JlYXRlIHlvdXIgb3duIDpjbGFzczpgVGV4dFdyYXBwZXJgIG9iamVjdC4KIAotVGV4dCBpcyBwcmVmZXJhYmx5IHdyYXBwZWQgb24gd2hpdGVzcGFjZXMgYW5kIHJpZ2h0IGFmdGVyIHRoZSBoeXBoZW5zIGluCi1oeXBoZW5hdGVkIHdvcmRzOyBvbmx5IHRoZW4gd2lsbCBsb25nIHdvcmRzIGJlIGJyb2tlbiBpZiBuZWNlc3NhcnksIHVubGVzcwotOmF0dHI6YFRleHRXcmFwcGVyLmJyZWFrX2xvbmdfd29yZHNgIGlzIHNldCB0byBmYWxzZS4KKy4uIGZ1bmN0aW9uOjogc2hvcnRlbih0ZXh0LCB3aWR0aCwgKiprd2FyZ3MpCiAKLVR3byBhZGRpdGlvbmFsIHV0aWxpdHkgZnVuY3Rpb24sIDpmdW5jOmBkZWRlbnRgIGFuZCA6ZnVuYzpgaW5kZW50YCwgYXJlCi1wcm92aWRlZCB0byByZW1vdmUgaW5kZW50YXRpb24gZnJvbSBzdHJpbmdzIHRoYXQgaGF2ZSB1bndhbnRlZCB3aGl0ZXNwYWNlCi10byB0aGUgbGVmdCBvZiB0aGUgdGV4dCBhbmQgdG8gYWRkIGFuIGFyYml0cmFyeSBwcmVmaXggdG8gc2VsZWN0ZWQgbGluZXMKLWluIGEgYmxvY2sgb2YgdGV4dC4KKyAgIENvbGxhcHNlIGFuZCB0cnVuY2F0ZSB0aGUgZ2l2ZW4gKnRleHQqIHRvIGZpdCBpbiB0aGUgZ2l2ZW4gKndpZHRoKi4KKworICAgRmlyc3QgdGhlIHdoaXRlc3BhY2UgaW4gKnRleHQqIGlzIGNvbGxhcHNlZCAoYWxsIHdoaXRlc3BhY2UgaXMgcmVwbGFjZWQgYnkKKyAgIHNpbmdsZSBzcGFjZXMpLiAgSWYgdGhlIHJlc3VsdCBmaXRzIGluIHRoZSAqd2lkdGgqLCBpdCBpcyByZXR1cm5lZC4KKyAgIE90aGVyd2lzZSwgZW5vdWdoIHdvcmRzIGFyZSBkcm9wcGVkIGZyb20gdGhlIGVuZCBzbyB0aGF0IHRoZSByZW1haW5pbmcgd29yZHMKKyAgIHBsdXMgdGhlIDphdHRyOmBwbGFjZWhvbGRlcmAgZml0IHdpdGhpbiA6YXR0cjpgd2lkdGhgOjoKKworICAgICAgPj4+IHRleHR3cmFwLnNob3J0ZW4oIkhlbGxvICB3b3JsZCEiLCB3aWR0aD0xMikKKyAgICAgICdIZWxsbyB3b3JsZCEnCisgICAgICA+Pj4gdGV4dHdyYXAuc2hvcnRlbigiSGVsbG8gIHdvcmxkISIsIHdpZHRoPTExKQorICAgICAgJ0hlbGxvIFsuLi5dJworICAgICAgPj4+IHRleHR3cmFwLnNob3J0ZW4oIkhlbGxvIHdvcmxkIiwgd2lkdGg9MTAsIHBsYWNlaG9sZGVyPSIuLi4iKQorICAgICAgJ0hlbGxvLi4uJworCisgICBPcHRpb25hbCBrZXl3b3JkIGFyZ3VtZW50cyBjb3JyZXNwb25kIHRvIHRoZSBpbnN0YW5jZSBhdHRyaWJ1dGVzIG9mCisgICA6Y2xhc3M6YFRleHRXcmFwcGVyYCwgZG9jdW1lbnRlZCBiZWxvdy4gIE5vdGUgdGhhdCB0aGUgd2hpdGVzcGFjZSBpcworICAgY29sbGFwc2VkIGJlZm9yZSB0aGUgdGV4dCBpcyBwYXNzZWQgdG8gdGhlIDpjbGFzczpgVGV4dFdyYXBwZXJgIDptZXRoOmBmaWxsYAorICAgZnVuY3Rpb24sIHNvIGNoYW5naW5nIHRoZSB2YWx1ZSBvZiA6YXR0cjpgLnRhYnNpemVgLCA6YXR0cjpgLmV4cGFuZF90YWJzYCwKKyAgIDphdHRyOmAuZHJvcF93aGl0ZXNwYWNlYCwgYW5kIDphdHRyOmAucmVwbGFjZV93aGl0ZXNwYWNlYCB3aWxsIGhhdmUgbm8gZWZmZWN0LgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogCiAuLiBmdW5jdGlvbjo6IGRlZGVudCh0ZXh0KQogCkBAIC0xMDEsNiArMTEzLDE4IEBACiAgICAgICArCiAgICAgICArIHdvcmxkCiAKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMworCisKKzpmdW5jOmB3cmFwYCwgOmZ1bmM6YGZpbGxgIGFuZCA6ZnVuYzpgc2hvcnRlbmAgd29yayBieSBjcmVhdGluZyBhCis6Y2xhc3M6YFRleHRXcmFwcGVyYCBpbnN0YW5jZSBhbmQgY2FsbGluZyBhIHNpbmdsZSBtZXRob2Qgb24gaXQuICBUaGF0CitpbnN0YW5jZSBpcyBub3QgcmV1c2VkLCBzbyBmb3IgYXBwbGljYXRpb25zIHRoYXQgcHJvY2VzcyBtYW55IHRleHQKK3N0cmluZ3MgdXNpbmcgOmZ1bmM6YHdyYXBgIGFuZC9vciA6ZnVuYzpgZmlsbGAsIGl0IG1heSBiZSBtb3JlIGVmZmljaWVudCB0bworY3JlYXRlIHlvdXIgb3duIDpjbGFzczpgVGV4dFdyYXBwZXJgIG9iamVjdC4KKworVGV4dCBpcyBwcmVmZXJhYmx5IHdyYXBwZWQgb24gd2hpdGVzcGFjZXMgYW5kIHJpZ2h0IGFmdGVyIHRoZSBoeXBoZW5zIGluCitoeXBoZW5hdGVkIHdvcmRzOyBvbmx5IHRoZW4gd2lsbCBsb25nIHdvcmRzIGJlIGJyb2tlbiBpZiBuZWNlc3NhcnksIHVubGVzcworOmF0dHI6YFRleHRXcmFwcGVyLmJyZWFrX2xvbmdfd29yZHNgIGlzIHNldCB0byBmYWxzZS4KIAogLi4gY2xhc3M6OiBUZXh0V3JhcHBlcigqKmt3YXJncykKIApAQCAtMjM1LDcgKzI1OSwyMyBAQAogICAgICAgd2FzIHRvIGFsd2F5cyBhbGxvdyBicmVha2luZyBoeXBoZW5hdGVkIHdvcmRzLgogCiAKLSAgIDpjbGFzczpgVGV4dFdyYXBwZXJgIGFsc28gcHJvdmlkZXMgdHdvIHB1YmxpYyBtZXRob2RzLCBhbmFsb2dvdXMgdG8gdGhlCisgICAuLiBhdHRyaWJ1dGU6OiBtYXhfbGluZXMKKworICAgICAgKGRlZmF1bHQ6IGBgTm9uZWBgKSBJZiBub3QgYGBOb25lYGAsIHRoZW4gdGhlIG91dHB1dCB3aWxsIGNvbnRhaW4gYXQgbW9zdAorICAgICAgKm1heF9saW5lcyogbGluZXMsIHdpdGggKnBsYWNlaG9sZGVyKiBhcHBlYXJpbmcgYXQgdGhlIGVuZCBvZiB0aGUgb3V0cHV0LgorCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCisgICAuLiBhdHRyaWJ1dGU6OiBwbGFjZWhvbGRlcgorCisgICAgICAoZGVmYXVsdDogYGAnIFsuLi5dJ2BgKSBTdHJpbmcgdGhhdCB3aWxsIGFwcGVhciBhdCB0aGUgZW5kIG9mIHRoZSBvdXRwdXQKKyAgICAgIHRleHQgaWYgaXQgaGFzIGJlZW4gdHJ1bmNhdGVkLgorCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCisgICA6Y2xhc3M6YFRleHRXcmFwcGVyYCBhbHNvIHByb3ZpZGVzIHNvbWUgcHVibGljIG1ldGhvZHMsIGFuYWxvZ291cyB0byB0aGUKICAgIG1vZHVsZS1sZXZlbCBjb252ZW5pZW5jZSBmdW5jdGlvbnM6CiAKICAgIC4uIG1ldGhvZDo6IHdyYXAodGV4dCkKQEAgLTI1MSw0ICsyOTEsMyBAQAogCiAgICAgICBXcmFwcyB0aGUgc2luZ2xlIHBhcmFncmFwaCBpbiAqdGV4dCosIGFuZCByZXR1cm5zIGEgc2luZ2xlIHN0cmluZwogICAgICAgY29udGFpbmluZyB0aGUgd3JhcHBlZCBwYXJhZ3JhcGguCi0KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3RocmVhZGluZy5yc3QgYi9Eb2MvbGlicmFyeS90aHJlYWRpbmcucnN0CmluZGV4IDdjMzI2ZDEuLmM1NmQ3MDcgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3RocmVhZGluZy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvdGhyZWFkaW5nLnJzdApAQCAtNTcsNiArNTcsMTUgQEAKICAgIGFuZCB0aHJlYWRzIHRoYXQgaGF2ZSBub3QgeWV0IGJlZW4gc3RhcnRlZC4KIAogCisuLiBmdW5jdGlvbjo6IG1haW5fdGhyZWFkKCkKKworICAgUmV0dXJuIHRoZSBtYWluIDpjbGFzczpgVGhyZWFkYCBvYmplY3QuICBJbiBub3JtYWwgY29uZGl0aW9ucywgdGhlCisgICBtYWluIHRocmVhZCBpcyB0aGUgdGhyZWFkIGZyb20gd2hpY2ggdGhlIFB5dGhvbiBpbnRlcnByZXRlciB3YXMKKyAgIHN0YXJ0ZWQuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIC4uIGZ1bmN0aW9uOjogc2V0dHJhY2UoZnVuYykKIAogICAgLi4gaW5kZXg6OiBzaW5nbGU6IHRyYWNlIGZ1bmN0aW9uCkBAIC04MCw3ICs4OSw4IEBACiAgICBSZXR1cm4gdGhlIHRocmVhZCBzdGFjayBzaXplIHVzZWQgd2hlbiBjcmVhdGluZyBuZXcgdGhyZWFkcy4gIFRoZSBvcHRpb25hbAogICAgKnNpemUqIGFyZ3VtZW50IHNwZWNpZmllcyB0aGUgc3RhY2sgc2l6ZSB0byBiZSB1c2VkIGZvciBzdWJzZXF1ZW50bHkgY3JlYXRlZAogICAgdGhyZWFkcywgYW5kIG11c3QgYmUgMCAodXNlIHBsYXRmb3JtIG9yIGNvbmZpZ3VyZWQgZGVmYXVsdCkgb3IgYSBwb3NpdGl2ZQotICAgaW50ZWdlciB2YWx1ZSBvZiBhdCBsZWFzdCAzMiw3NjggKDMyIEtpQikuIElmIGNoYW5naW5nIHRoZSB0aHJlYWQgc3RhY2sgc2l6ZSBpcworICAgaW50ZWdlciB2YWx1ZSBvZiBhdCBsZWFzdCAzMiw3NjggKDMyIEtpQikuIElmICpzaXplKiBpcyBub3Qgc3BlY2lmaWVkLAorICAgMCBpcyB1c2VkLiAgSWYgY2hhbmdpbmcgdGhlIHRocmVhZCBzdGFjayBzaXplIGlzCiAgICB1bnN1cHBvcnRlZCwgYSA6ZXhjOmBSdW50aW1lRXJyb3JgIGlzIHJhaXNlZC4gIElmIHRoZSBzcGVjaWZpZWQgc3RhY2sgc2l6ZSBpcwogICAgaW52YWxpZCwgYSA6ZXhjOmBWYWx1ZUVycm9yYCBpcyByYWlzZWQgYW5kIHRoZSBzdGFjayBzaXplIGlzIHVubW9kaWZpZWQuICAzMiBLaUIKICAgIGlzIGN1cnJlbnRseSB0aGUgbWluaW11bSBzdXBwb3J0ZWQgc3RhY2sgc2l6ZSB2YWx1ZSB0byBndWFyYW50ZWUgc3VmZmljaWVudApAQCAtMzQ1LDcgKzM1NSw3IEBACiBpbW1lZGlhdGVseS4gSWYgYW4gYXR0ZW1wdCBpcyBtYWRlIHRvIHJlbGVhc2UgYW4gdW5sb2NrZWQgbG9jaywgYQogOmV4YzpgUnVudGltZUVycm9yYCB3aWxsIGJlIHJhaXNlZC4KIAotTG9ja3MgYWxzbyBzdXBwb3J0IHRoZSA6cmVmOmBjb250ZXh0IG1hbmFnZXIgcHJvdG9jb2wgPHdpdGgtbG9ja3M+YC4KK0xvY2tzIGFsc28gc3VwcG9ydCB0aGUgOnJlZjpgY29udGV4dCBtYW5hZ2VtZW50IHByb3RvY29sIDx3aXRoLWxvY2tzPmAuCiAKIFdoZW4gbW9yZSB0aGFuIG9uZSB0aHJlYWQgaXMgYmxvY2tlZCBpbiA6bWV0aDpgfkxvY2suYWNxdWlyZWAgd2FpdGluZyBmb3IgdGhlCiBzdGF0ZSB0byB0dXJuIHRvIHVubG9ja2VkLCBvbmx5IG9uZSB0aHJlYWQgcHJvY2VlZHMgd2hlbiBhIDptZXRoOmB+TG9jay5yZWxlYXNlYApAQCAtNDI0LDcgKzQzNCw3IEBACiA6bWV0aDpgfkxvY2sucmVsZWFzZWAgb2YgdGhlIG91dGVybW9zdCBwYWlyKSByZXNldHMgdGhlIGxvY2sgdG8gdW5sb2NrZWQgYW5kCiBhbGxvd3MgYW5vdGhlciB0aHJlYWQgYmxvY2tlZCBpbiA6bWV0aDpgfkxvY2suYWNxdWlyZWAgdG8gcHJvY2VlZC4KIAotUmVlbnRyYW50IGxvY2tzIGFsc28gc3VwcG9ydCB0aGUgOnJlZjpgY29udGV4dCBtYW5hZ2VyIHByb3RvY29sIDx3aXRoLWxvY2tzPmAuCitSZWVudHJhbnQgbG9ja3MgYWxzbyBzdXBwb3J0IHRoZSA6cmVmOmBjb250ZXh0IG1hbmFnZW1lbnQgcHJvdG9jb2wgPHdpdGgtbG9ja3M+YC4KIAogCiAuLiBjbGFzczo6IFJMb2NrKCkKQEAgLTQ5Miw3ICs1MDIsNyBAQAogc2V2ZXJhbCBjb25kaXRpb24gdmFyaWFibGVzIG11c3Qgc2hhcmUgdGhlIHNhbWUgbG9jay4gIFRoZSBsb2NrIGlzIHBhcnQgb2YKIHRoZSBjb25kaXRpb24gb2JqZWN0OiB5b3UgZG9uJ3QgaGF2ZSB0byB0cmFjayBpdCBzZXBhcmF0ZWx5LgogCi1BIGNvbmRpdGlvbiB2YXJpYWJsZSBvYmV5cyB0aGUgOnJlZjpgY29udGV4dCBtYW5hZ2VyIHByb3RvY29sIDx3aXRoLWxvY2tzPmA6CitBIGNvbmRpdGlvbiB2YXJpYWJsZSBvYmV5cyB0aGUgOnJlZjpgY29udGV4dCBtYW5hZ2VtZW50IHByb3RvY29sIDx3aXRoLWxvY2tzPmA6CiB1c2luZyB0aGUgYGB3aXRoYGAgc3RhdGVtZW50IGFjcXVpcmVzIHRoZSBhc3NvY2lhdGVkIGxvY2sgZm9yIHRoZSBkdXJhdGlvbiBvZgogdGhlIGVuY2xvc2VkIGJsb2NrLiAgVGhlIDptZXRoOmB+Q29uZGl0aW9uLmFjcXVpcmVgIGFuZAogOm1ldGg6YH5Db25kaXRpb24ucmVsZWFzZWAgbWV0aG9kcyBhbHNvIGNhbGwgdGhlIGNvcnJlc3BvbmRpbmcgbWV0aG9kcyBvZgpAQCAtNjIxLDcgKzYzMSw3IEBACiAgICAgICAgICAgICBjdi53YWl0KCkKIAogICAgICAgVGhlcmVmb3JlLCB0aGUgc2FtZSBydWxlcyBhcHBseSBhcyB3aXRoIDptZXRoOmB3YWl0YDogVGhlIGxvY2sgbXVzdCBiZQotICAgICAgaGVsZCB3aGVuIGNhbGxlZCBhbmQgaXMgcmUtYXF1aXJlZCBvbiByZXR1cm4uICBUaGUgcHJlZGljYXRlIGlzIGV2YWx1YXRlZAorICAgICAgaGVsZCB3aGVuIGNhbGxlZCBhbmQgaXMgcmUtYWNxdWlyZWQgb24gcmV0dXJuLiAgVGhlIHByZWRpY2F0ZSBpcyBldmFsdWF0ZWQKICAgICAgIHdpdGggdGhlIGxvY2sgaGVsZC4KIAogICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCkBAIC02NjgsNyArNjc4LDcgQEAKIGZpbmRzIHRoYXQgaXQgaXMgemVybywgaXQgYmxvY2tzLCB3YWl0aW5nIHVudGlsIHNvbWUgb3RoZXIgdGhyZWFkIGNhbGxzCiA6bWV0aDpgflNlbWFwaG9yZS5yZWxlYXNlYC4KIAotU2VtYXBob3JlcyBhbHNvIHN1cHBvcnQgdGhlIDpyZWY6YGNvbnRleHQgbWFuYWdlciBwcm90b2NvbCA8d2l0aC1sb2Nrcz5gLgorU2VtYXBob3JlcyBhbHNvIHN1cHBvcnQgdGhlIDpyZWY6YGNvbnRleHQgbWFuYWdlbWVudCBwcm90b2NvbCA8d2l0aC1sb2Nrcz5gLgogCiAKIC4uIGNsYXNzOjogU2VtYXBob3JlKHZhbHVlPTEpCkBAIC04NjUsNyArODc1LDcgQEAKIG9mIHRocmVhZHMgdGhhdCBuZWVkIHRvIHdhaXQgZm9yIGVhY2ggb3RoZXIuICBFYWNoIG9mIHRoZSB0aHJlYWRzIHRyaWVzIHRvIHBhc3MKIHRoZSBiYXJyaWVyIGJ5IGNhbGxpbmcgdGhlIDptZXRoOmB+QmFycmllci53YWl0YCBtZXRob2QgYW5kIHdpbGwgYmxvY2sgdW50aWwKIGFsbCBvZiB0aGUgdGhyZWFkcyBoYXZlIG1hZGUgdGhlIGNhbGwuICBBdCB0aGlzIHBvaW50cywgdGhlIHRocmVhZHMgYXJlIHJlbGVhc2VkCi1zaW11bHRhbm91c2x5Lgorc2ltdWx0YW5lb3VzbHkuCiAKIFRoZSBiYXJyaWVyIGNhbiBiZSByZXVzZWQgYW55IG51bWJlciBvZiB0aW1lcyBmb3IgdGhlIHNhbWUgbnVtYmVyIG9mIHRocmVhZHMuCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3RpbWUucnN0IGIvRG9jL2xpYnJhcnkvdGltZS5yc3QKaW5kZXggNjRiNWUwNC4uOGQ4YjdkNCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvdGltZS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvdGltZS5yc3QKQEAgLTEzMyw4ICsxMzMsNyBAQAogCiAgICBPbiBVbml4LCByZXR1cm4gdGhlIGN1cnJlbnQgcHJvY2Vzc29yIHRpbWUgYXMgYSBmbG9hdGluZyBwb2ludCBudW1iZXIgZXhwcmVzc2VkCiAgICBpbiBzZWNvbmRzLiAgVGhlIHByZWNpc2lvbiwgYW5kIGluIGZhY3QgdGhlIHZlcnkgZGVmaW5pdGlvbiBvZiB0aGUgbWVhbmluZyBvZgotICAgInByb2Nlc3NvciB0aW1lIiwgZGVwZW5kcyBvbiB0aGF0IG9mIHRoZSBDIGZ1bmN0aW9uIG9mIHRoZSBzYW1lIG5hbWUsIGJ1dCBpbiBhbnkKLSAgIGNhc2UsIHRoaXMgaXMgdGhlIGZ1bmN0aW9uIHRvIHVzZSBmb3IgYmVuY2htYXJraW5nIFB5dGhvbiBvciB0aW1pbmcgYWxnb3JpdGhtcy4KKyAgICJwcm9jZXNzb3IgdGltZSIsIGRlcGVuZHMgb24gdGhhdCBvZiB0aGUgQyBmdW5jdGlvbiBvZiB0aGUgc2FtZSBuYW1lLgogCiAgICBPbiBXaW5kb3dzLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgd2FsbC1jbG9jayBzZWNvbmRzIGVsYXBzZWQgc2luY2UgdGhlIGZpcnN0CiAgICBjYWxsIHRvIHRoaXMgZnVuY3Rpb24sIGFzIGEgZmxvYXRpbmcgcG9pbnQgbnVtYmVyLCBiYXNlZCBvbiB0aGUgV2luMzIgZnVuY3Rpb24KQEAgLTM0MywxMiArMzQyLDEzIEBACiAKIC4uIGZ1bmN0aW9uOjogc2xlZXAoc2VjcykKIAotICAgU3VzcGVuZCBleGVjdXRpb24gZm9yIHRoZSBnaXZlbiBudW1iZXIgb2Ygc2Vjb25kcy4gIFRoZSBhcmd1bWVudCBtYXkgYmUgYQotICAgZmxvYXRpbmcgcG9pbnQgbnVtYmVyIHRvIGluZGljYXRlIGEgbW9yZSBwcmVjaXNlIHNsZWVwIHRpbWUuIFRoZSBhY3R1YWwKLSAgIHN1c3BlbnNpb24gdGltZSBtYXkgYmUgbGVzcyB0aGFuIHRoYXQgcmVxdWVzdGVkIGJlY2F1c2UgYW55IGNhdWdodCBzaWduYWwgd2lsbAotICAgdGVybWluYXRlIHRoZSA6ZnVuYzpgc2xlZXBgIGZvbGxvd2luZyBleGVjdXRpb24gb2YgdGhhdCBzaWduYWwncyBjYXRjaGluZwotICAgcm91dGluZS4gIEFsc28sIHRoZSBzdXNwZW5zaW9uIHRpbWUgbWF5IGJlIGxvbmdlciB0aGFuIHJlcXVlc3RlZCBieSBhbiBhcmJpdHJhcnkKLSAgIGFtb3VudCBiZWNhdXNlIG9mIHRoZSBzY2hlZHVsaW5nIG9mIG90aGVyIGFjdGl2aXR5IGluIHRoZSBzeXN0ZW0uCisgICBTdXNwZW5kIGV4ZWN1dGlvbiBvZiB0aGUgY2FsbGluZyB0aHJlYWQgZm9yIHRoZSBnaXZlbiBudW1iZXIgb2Ygc2Vjb25kcy4KKyAgIFRoZSBhcmd1bWVudCBtYXkgYmUgYSBmbG9hdGluZyBwb2ludCBudW1iZXIgdG8gaW5kaWNhdGUgYSBtb3JlIHByZWNpc2Ugc2xlZXAKKyAgIHRpbWUuIFRoZSBhY3R1YWwgc3VzcGVuc2lvbiB0aW1lIG1heSBiZSBsZXNzIHRoYW4gdGhhdCByZXF1ZXN0ZWQgYmVjYXVzZSBhbnkKKyAgIGNhdWdodCBzaWduYWwgd2lsbCB0ZXJtaW5hdGUgdGhlIDpmdW5jOmBzbGVlcGAgZm9sbG93aW5nIGV4ZWN1dGlvbiBvZiB0aGF0CisgICBzaWduYWwncyBjYXRjaGluZyByb3V0aW5lLiAgQWxzbywgdGhlIHN1c3BlbnNpb24gdGltZSBtYXkgYmUgbG9uZ2VyIHRoYW4KKyAgIHJlcXVlc3RlZCBieSBhbiBhcmJpdHJhcnkgYW1vdW50IGJlY2F1c2Ugb2YgdGhlIHNjaGVkdWxpbmcgb2Ygb3RoZXIgYWN0aXZpdHkKKyAgIGluIHRoZSBzeXN0ZW0uCiAKIAogLi4gZnVuY3Rpb246OiBzdHJmdGltZShmb3JtYXRbLCB0XSkKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3RpbWVpdC5yc3QgYi9Eb2MvbGlicmFyeS90aW1laXQucnN0CmluZGV4IGE0ODc5MTcuLjcwZGY0MDkgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3RpbWVpdC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvdGltZWl0LnJzdApAQCAtMjgsMjIgKzI4LDIzIEBACiAKIC4uIGNvZGUtYmxvY2s6OiBzaAogCi0gICAkIHB5dGhvbiAtbSB0aW1laXQgJyItIi5qb2luKHN0cihuKSBmb3IgbiBpbiByYW5nZSgxMDApKScKLSAgIDEwMDAwIGxvb3BzLCBiZXN0IG9mIDM6IDQwLjMgdXNlYyBwZXIgbG9vcAotICAgJCBweXRob24gLW0gdGltZWl0ICciLSIuam9pbihbc3RyKG4pIGZvciBuIGluIHJhbmdlKDEwMCldKScKLSAgIDEwMDAwIGxvb3BzLCBiZXN0IG9mIDM6IDMzLjQgdXNlYyBwZXIgbG9vcAotICAgJCBweXRob24gLW0gdGltZWl0ICciLSIuam9pbihtYXAoc3RyLCByYW5nZSgxMDApKSknCi0gICAxMDAwMCBsb29wcywgYmVzdCBvZiAzOiAyNS4yIHVzZWMgcGVyIGxvb3AKKyAgICQgcHl0aG9uMyAtbSB0aW1laXQgJyItIi5qb2luKHN0cihuKSBmb3IgbiBpbiByYW5nZSgxMDApKScKKyAgIDEwMDAwIGxvb3BzLCBiZXN0IG9mIDM6IDMwLjIgdXNlYyBwZXIgbG9vcAorICAgJCBweXRob24zIC1tIHRpbWVpdCAnIi0iLmpvaW4oW3N0cihuKSBmb3IgbiBpbiByYW5nZSgxMDApXSknCisgICAxMDAwMCBsb29wcywgYmVzdCBvZiAzOiAyNy41IHVzZWMgcGVyIGxvb3AKKyAgICQgcHl0aG9uMyAtbSB0aW1laXQgJyItIi5qb2luKG1hcChzdHIsIHJhbmdlKDEwMCkpKScKKyAgIDEwMDAwIGxvb3BzLCBiZXN0IG9mIDM6IDIzLjIgdXNlYyBwZXIgbG9vcAogCiBUaGlzIGNhbiBiZSBhY2hpZXZlZCBmcm9tIHRoZSA6cmVmOmBweXRob24taW50ZXJmYWNlYCB3aXRoOjoKIAogICAgPj4+IGltcG9ydCB0aW1laXQKICAgID4+PiB0aW1laXQudGltZWl0KCciLSIuam9pbihzdHIobikgZm9yIG4gaW4gcmFuZ2UoMTAwKSknLCBudW1iZXI9MTAwMDApCi0gICAwLjgxODcyNjA2Mjc3NDY1ODIKKyAgIDAuMzAxODYxMTg0ODgyMDAwMQogICAgPj4+IHRpbWVpdC50aW1laXQoJyItIi5qb2luKFtzdHIobikgZm9yIG4gaW4gcmFuZ2UoMTAwKV0pJywgbnVtYmVyPTEwMDAwKQotICAgMC43Mjg4MzA4MTQzNjE1NzIzCisgICAwLjI3MjczNjg3OTA2NTYzMjgKICAgID4+PiB0aW1laXQudGltZWl0KCciLSIuam9pbihtYXAoc3RyLCByYW5nZSgxMDApKSknLCBudW1iZXI9MTAwMDApCi0gICAwLjU4NTg5NTA2MTQ5MjkxOTkKKyAgIDAuMjM3MDI2Nzk4MDczMjAyMzcKKwogCiBOb3RlIGhvd2V2ZXIgdGhhdCA6bW9kOmB0aW1laXRgIHdpbGwgYXV0b21hdGljYWxseSBkZXRlcm1pbmUgdGhlIG51bWJlciBvZgogcmVwZXRpdGlvbnMgb25seSB3aGVuIHRoZSBjb21tYW5kLWxpbmUgaW50ZXJmYWNlIGlzIHVzZWQuICBJbiB0aGUKQEAgLTkzLDYgKzk0LDggQEAKICAgIG1ldGhvZC4gIFRoZSA6bWV0aDpgLnJlcGVhdGAgbWV0aG9kIGlzIGEgY29udmVuaWVuY2UgdG8gY2FsbCA6bWV0aDpgLnRpbWVpdGAKICAgIG11bHRpcGxlIHRpbWVzIGFuZCByZXR1cm4gYSBsaXN0IG9mIHJlc3VsdHMuCiAKKyAgIFRoZSBleGVjdXRpb24gdGltZSBvZiAqc2V0dXAqIGlzIGV4Y2x1ZGVkIGZyb20gdGhlIG92ZXJhbGwgdGltZWQgZXhlY3V0aW9uIHJ1bi4KKwogICAgVGhlICpzdG10KiBhbmQgKnNldHVwKiBwYXJhbWV0ZXJzIGNhbiBhbHNvIHRha2Ugb2JqZWN0cyB0aGF0IGFyZSBjYWxsYWJsZQogICAgd2l0aG91dCBhcmd1bWVudHMuICBUaGlzIHdpbGwgZW1iZWQgY2FsbHMgdG8gdGhlbSBpbiBhIHRpbWVyIGZ1bmN0aW9uIHRoYXQKICAgIHdpbGwgdGhlbiBiZSBleGVjdXRlZCBieSA6bWV0aDpgLnRpbWVpdGAuICBOb3RlIHRoYXQgdGhlIHRpbWluZyBvdmVyaGVhZCBpcyBhCkBAIC0xNTEsNyArMTU0LDcgQEAKICAgICAgICAgIHQgPSBUaW1lciguLi4pICAgICAgICMgb3V0c2lkZSB0aGUgdHJ5L2V4Y2VwdAogICAgICAgICAgdHJ5OgogICAgICAgICAgICAgIHQudGltZWl0KC4uLikgICAgIyBvciB0LnJlcGVhdCguLi4pCi0gICAgICAgICBleGNlcHQ6CisgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgICAgICAgIHQucHJpbnRfZXhjKCkKIAogICAgICAgVGhlIGFkdmFudGFnZSBvdmVyIHRoZSBzdGFuZGFyZCB0cmFjZWJhY2sgaXMgdGhhdCBzb3VyY2UgbGluZXMgaW4gdGhlCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS90a2ludGVyLnJzdCBiL0RvYy9saWJyYXJ5L3RraW50ZXIucnN0CmluZGV4IGVlYjFmODAuLjhiNzM4YzMgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3RraW50ZXIucnN0CisrKyBiL0RvYy9saWJyYXJ5L3RraW50ZXIucnN0CkBAIC0xNSwxNCArMTUsMTQgQEAKIAogLi4gc2VlYWxzbzo6CiAKLSAgIGBQeXRob24gVGtpbnRlciBSZXNvdXJjZXMgPGh0dHA6Ly93d3cucHl0aG9uLm9yZy90b3BpY3MvdGtpbnRlci8+YF8KKyAgIGBQeXRob24gVGtpbnRlciBSZXNvdXJjZXMgPGh0dHBzOi8vd2lraS5weXRob24ub3JnL21vaW4vVGtJbnRlcj5gXwogICAgICAgVGhlIFB5dGhvbiBUa2ludGVyIFRvcGljIEd1aWRlIHByb3ZpZGVzIGEgZ3JlYXQgZGVhbCBvZiBpbmZvcm1hdGlvbiBvbiB1c2luZyBUawogICAgICAgZnJvbSBQeXRob24gYW5kIGxpbmtzIHRvIG90aGVyIHNvdXJjZXMgb2YgaW5mb3JtYXRpb24gb24gVGsuCiAKICAgIGBUS0RvY3MgPGh0dHA6Ly93d3cudGtkb2NzLmNvbS8+YF8KICAgICAgIEV4dGVuc2l2ZSB0dXRvcmlhbCBwbHVzIGZyaWVuZGxpZXIgd2lkZ2V0IHBhZ2VzIGZvciBzb21lIG9mIHRoZSB3aWRnZXRzLgogCi0gICBgVGtpbnRlciByZWZlcmVuY2U6IGEgR1VJIGZvciBQeXRob24gPGh0dHA6Ly9pbmZvaG9zdC5ubXQuZWR1L3RjYy9oZWxwL3B1YnMvdGtpbnRlci8+YF8KKyAgIGBUa2ludGVyIHJlZmVyZW5jZTogYSBHVUkgZm9yIFB5dGhvbiA8aHR0cDovL2luZm9ob3N0Lm5tdC5lZHUvdGNjL2hlbHAvcHVicy90a2ludGVyL3dlYi9pbmRleC5odG1sPmBfCiAgICAgICBPbi1saW5lIHJlZmVyZW5jZSBtYXRlcmlhbC4KIAogICAgYFRraW50ZXIgZG9jcyBmcm9tIGVmZmJvdCA8aHR0cDovL2VmZmJvdC5vcmcvdGtpbnRlcmJvb2svPmBfCkBAIC0zMSwxMyArMzEsMTMgQEAKICAgIGBUY2wvVGsgbWFudWFsIDxodHRwOi8vd3d3LnRjbC50ay9tYW4vdGNsOC41Lz5gXwogICAgICAgT2ZmaWNpYWwgbWFudWFsIGZvciB0aGUgbGF0ZXN0IHRjbC90ayB2ZXJzaW9uLgogCi0gICBgUHJvZ3JhbW1pbmcgUHl0aG9uIDxodHRwOi8vd3d3LmFtYXpvbi5jb20vUHJvZ3JhbW1pbmctUHl0aG9uLU1hcmstTHV0ei9kcC8wNTk2MTU4MTA2Lz5gXworICAgYFByb2dyYW1taW5nIFB5dGhvbiA8aHR0cDovL3d3dy5ybWkubmV0L35sdXR6L2Fib3V0LXBwNGUuaHRtbD5gXwogICAgICAgQm9vayBieSBNYXJrIEx1dHosIGhhcyBleGNlbGxlbnQgY292ZXJhZ2Ugb2YgVGtpbnRlci4KIAogICAgYE1vZGVybiBUa2ludGVyIGZvciBCdXN5IFB5dGhvbiBEZXZlbG9wZXJzIDxodHRwOi8vd3d3LmFtYXpvbi5jb20vTW9kZXJuLVRraW50ZXItUHl0aG9uLURldmVsb3BlcnMtZWJvb2svZHAvQjAwNzFRRE5MTy8+YF8KICAgICAgIEJvb2sgYnkgTWFyayBSb3plcm1hbiBhYm91dCBidWlsZGluZyBhdHRyYWN0aXZlIGFuZCBtb2Rlcm4gZ3JhcGhpY2FsIHVzZXIgaW50ZXJmYWNlcyB3aXRoIFB5dGhvbiBhbmQgVGtpbnRlci4KIAotICAgYFB5dGhvbiBhbmQgVGtpbnRlciBQcm9ncmFtbWluZyA8aHR0cDovL3d3dy5hbWF6b24uY29tL2V4ZWMvb2JpZG9zL0FTSU4vMTg4NDc3NzgxMz5gXworICAgYFB5dGhvbiBhbmQgVGtpbnRlciBQcm9ncmFtbWluZyA8aHR0cDovL3d3dy5tYW5uaW5nLmNvbS9ncmF5c29uLz5gXwogICAgICAgVGhlIGJvb2sgYnkgSm9obiBHcmF5c29uIChJU0JOIDEtODg0Nzc3LTgxLTMpLgogCiAKQEAgLTE4Miw3ICsxODIsNyBAQAogICAgYFRjbCBhbmQgdGhlIFRrIFRvb2xraXQgPGh0dHA6Ly93d3cuYW1hem9uLmNvbS9leGVjL29iaWRvcy9BU0lOLzAyMDE2MzMzN1g+YF8KICAgICAgIFRoZSBib29rIGJ5IEpvaG4gT3VzdGVyaG91dCwgdGhlIGludmVudG9yIG9mIFRjbC4KIAotICAgYFByYWN0aWNhbCBQcm9ncmFtbWluZyBpbiBUY2wgYW5kIFRrIDxodHRwOi8vd3d3LmFtYXpvbi5jb20vZXhlYy9vYmlkb3MvQVNJTi8wMTMwMjIwMjgwPmBfCisgICBgUHJhY3RpY2FsIFByb2dyYW1taW5nIGluIFRjbCBhbmQgVGsgPGh0dHA6Ly93d3cuYmVlZHViLmNvbS9ib29rLz5gXwogICAgICAgQnJlbnQgV2VsY2gncyBlbmN5Y2xvcGVkaWMgYm9vay4KIAogCkBAIC03NDcsMzIgKzc0Nyw2IEBACiAgICBkaXNwbGF5ZWQuICBZb3UgY2FuIHVzZSB0aGVzZSA6bW9kOmB0a2ludGVyYCBmdW5jdGlvbnMgdG8gYWNjZXNzIHRoZXNlIHNwZWNpYWwKICAgIHBvaW50cyBpbiB0ZXh0IHdpZGdldHM6CiAKLS4uIGZ1bmN0aW9uOjogQXRFbmQoKQotICAgICAgcmVmZXJzIHRvIHRoZSBsYXN0IHBvc2l0aW9uIGluIHRoZSB0ZXh0Ci0KLSAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjMKLQotLi4gZnVuY3Rpb246OiBBdEluc2VydCgpCi0gICAgICByZWZlcnMgdG8gdGhlIHBvaW50IHdoZXJlIHRoZSB0ZXh0IGN1cnNvciBpcwotCi0gICAuLiBkZXByZWNhdGVkOjogMy4zCi0KLS4uIGZ1bmN0aW9uOjogQXRTZWxGaXJzdCgpCi0gICAgICBpbmRpY2F0ZXMgdGhlIGJlZ2lubmluZyBwb2ludCBvZiB0aGUgc2VsZWN0ZWQgdGV4dAotCi0gICAuLiBkZXByZWNhdGVkOjogMy4zCi0KLS4uIGZ1bmN0aW9uOjogQXRTZWxMYXN0KCkKLSAgICAgIGRlbm90ZXMgdGhlIGxhc3QgcG9pbnQgb2YgdGhlIHNlbGVjdGVkIHRleHQgYW5kIGZpbmFsbHkKLQotICAgLi4gZGVwcmVjYXRlZDo6IDMuMwotCi0uLiBmdW5jdGlvbjo6IEF0KHhbLCB5XSkKLSAgICAgIHJlZmVycyB0byB0aGUgY2hhcmFjdGVyIGF0IHBpeGVsIGxvY2F0aW9uICp4KiwgKnkqICh3aXRoICp5KiBub3QgdXNlZCBpbiB0aGUKLSAgICAgIGNhc2Ugb2YgYSB0ZXh0IGVudHJ5IHdpZGdldCwgd2hpY2ggY29udGFpbnMgYSBzaW5nbGUgbGluZSBvZiB0ZXh0KS4KLQotICAgLi4gZGVwcmVjYXRlZDo6IDMuMwotCiBUZXh0IHdpZGdldCBpbmRleGVzCiAgICBUaGUgaW5kZXggbm90YXRpb24gZm9yIFRleHQgd2lkZ2V0cyBpcyB2ZXJ5IHJpY2ggYW5kIGlzIGJlc3QgZGVzY3JpYmVkIGluIHRoZSBUawogICAgbWFuIHBhZ2VzLgpAQCAtODIwLDMgKzc5NCw1MyBAQAogcmVmZXJlbmNlIHRvIHRoZSBpbWFnZS4gV2hlbiB0aGUgbGFzdCBQeXRob24gcmVmZXJlbmNlIHRvIHRoZSBpbWFnZSBvYmplY3QgaXMKIGRlbGV0ZWQsIHRoZSBpbWFnZSBkYXRhIGlzIGRlbGV0ZWQgYXMgd2VsbCwgYW5kIFRrIHdpbGwgZGlzcGxheSBhbiBlbXB0eSBib3gKIHdoZXJldmVyIHRoZSBpbWFnZSB3YXMgdXNlZC4KKworCisuLiBfdGtpbnRlci1maWxlLWhhbmRsZXJzOgorCitGaWxlIEhhbmRsZXJzCistLS0tLS0tLS0tLS0tCisKK1RrIGFsbG93cyB5b3UgdG8gcmVnaXN0ZXIgYW5kIHVucmVnaXN0ZXIgYSBjYWxsYmFjayBmdW5jdGlvbiB3aGljaCB3aWxsIGJlCitjYWxsZWQgZnJvbSB0aGUgVGsgbWFpbmxvb3Agd2hlbiBJL08gaXMgcG9zc2libGUgb24gYSBmaWxlIGRlc2NyaXB0b3IuCitPbmx5IG9uZSBoYW5kbGVyIG1heSBiZSByZWdpc3RlcmVkIHBlciBmaWxlIGRlc2NyaXB0b3IuIEV4YW1wbGUgY29kZTo6CisKKyAgIGltcG9ydCB0a2ludGVyCisgICB3aWRnZXQgPSB0a2ludGVyLlRrKCkKKyAgIG1hc2sgPSB0a2ludGVyLlJFQURBQkxFIHwgdGtpbnRlci5XUklUQUJMRQorICAgd2lkZ2V0LnRrLmNyZWF0ZWZpbGVoYW5kbGVyKGZpbGUsIG1hc2ssIGNhbGxiYWNrKQorICAgLi4uCisgICB3aWRnZXQudGsuZGVsZXRlZmlsZWhhbmRsZXIoZmlsZSkKKworVGhpcyBmZWF0dXJlIGlzIG5vdCBhdmFpbGFibGUgb24gV2luZG93cy4KKworU2luY2UgeW91IGRvbid0IGtub3cgaG93IG1hbnkgYnl0ZXMgYXJlIGF2YWlsYWJsZSBmb3IgcmVhZGluZywgeW91IG1heSBub3QKK3dhbnQgdG8gdXNlIHRoZSA6Y2xhc3M6YH5pby5CdWZmZXJlZElPQmFzZWAgb3IgOmNsYXNzOmB+aW8uVGV4dElPQmFzZWAKKzptZXRoOmB+aW8uQnVmZmVyZWRJT0Jhc2UucmVhZGAgb3IgOm1ldGg6YH5pby5JT0Jhc2UucmVhZGxpbmVgIG1ldGhvZHMsCitzaW5jZSB0aGVzZSB3aWxsIGluc2lzdCBvbiByZWFkaW5nIGEgcHJlZGVmaW5lZCBudW1iZXIgb2YgYnl0ZXMuCitGb3Igc29ja2V0cywgdGhlIDptZXRoOmB+c29ja2V0LnNvY2tldC5yZWN2YCBvcgorOm1ldGg6YH5zb2NrZXQuc29ja2V0LnJlY3Zmcm9tYCBtZXRob2RzIHdpbGwgd29yayBmaW5lOyBmb3Igb3RoZXIgZmlsZXMsCit1c2UgcmF3IHJlYWRzIG9yIGBgb3MucmVhZChmaWxlLmZpbGVubygpLCBtYXhieXRlY291bnQpYGAuCisKKworLi4gbWV0aG9kOjogV2lkZ2V0LnRrLmNyZWF0ZWZpbGVoYW5kbGVyKGZpbGUsIG1hc2ssIGZ1bmMpCisKKyAgIFJlZ2lzdGVycyB0aGUgZmlsZSBoYW5kbGVyIGNhbGxiYWNrIGZ1bmN0aW9uICpmdW5jKi4gVGhlICpmaWxlKiBhcmd1bWVudAorICAgbWF5IGVpdGhlciBiZSBhbiBvYmplY3Qgd2l0aCBhIDptZXRoOmB+aW8uSU9CYXNlLmZpbGVub2AgbWV0aG9kIChzdWNoIGFzCisgICBhIGZpbGUgb3Igc29ja2V0IG9iamVjdCksIG9yIGFuIGludGVnZXIgZmlsZSBkZXNjcmlwdG9yLiBUaGUgKm1hc2sqCisgICBhcmd1bWVudCBpcyBhbiBPUmVkIGNvbWJpbmF0aW9uIG9mIGFueSBvZiB0aGUgdGhyZWUgY29uc3RhbnRzIGJlbG93LgorICAgVGhlIGNhbGxiYWNrIGlzIGNhbGxlZCBhcyBmb2xsb3dzOjoKKworICAgICAgY2FsbGJhY2soZmlsZSwgbWFzaykKKworCisuLiBtZXRob2Q6OiBXaWRnZXQudGsuZGVsZXRlZmlsZWhhbmRsZXIoZmlsZSkKKworICAgVW5yZWdpc3RlcnMgYSBmaWxlIGhhbmRsZXIuCisKKworLi4gZGF0YTo6IFJFQURBQkxFCisgICAgICAgICAgV1JJVEFCTEUKKyAgICAgICAgICBFWENFUFRJT04KKworICAgQ29uc3RhbnRzIHVzZWQgaW4gdGhlICptYXNrKiBhcmd1bWVudHMuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS90a2ludGVyLnR0ay5yc3QgYi9Eb2MvbGlicmFyeS90a2ludGVyLnR0ay5yc3QKaW5kZXggNmY4YmYxYy4uNDYwMTE3MSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvdGtpbnRlci50dGsucnN0CisrKyBiL0RvYy9saWJyYXJ5L3RraW50ZXIudHRrLnJzdApAQCAtMTEwLDggKzExMCw5IEBACiAgICB8IGNsYXNzICAgICB8IFNwZWNpZmllcyB0aGUgd2luZG93IGNsYXNzLiBUaGUgY2xhc3MgaXMgdXNlZCB3aGVuIHF1ZXJ5aW5nICB8CiAgICB8ICAgICAgICAgICB8IHRoZSBvcHRpb24gZGF0YWJhc2UgZm9yIHRoZSB3aW5kb3cncyBvdGhlciBvcHRpb25zLCB0byAgICAgICB8CiAgICB8ICAgICAgICAgICB8IGRldGVybWluZSB0aGUgZGVmYXVsdCBiaW5kdGFncyBmb3IgdGhlIHdpbmRvdywgYW5kIHRvIHNlbGVjdCB8Ci0gICB8ICAgICAgICAgICB8IHRoZSB3aWRnZXQncyBkZWZhdWx0IGxheW91dCBhbmQgc3R5bGUuIFRoaXMgaXMgYSByZWFkLW9ubHkgICB8Ci0gICB8ICAgICAgICAgICB8IHdoaWNoIG1heSBvbmx5IGJlIHNwZWNpZmllZCB3aGVuIHRoZSB3aW5kb3cgaXMgY3JlYXRlZCAgICAgICB8CisgICB8ICAgICAgICAgICB8IHRoZSB3aWRnZXQncyBkZWZhdWx0IGxheW91dCBhbmQgc3R5bGUuIFRoaXMgb3B0aW9uIGlzICAgICAgICB8CisgICB8ICAgICAgICAgICB8IHJlYWQtb25seSwgYW5kIG1heSBvbmx5IGJlIHNwZWNpZmllZCB3aGVuIHRoZSB3aW5kb3cgaXMgICAgICB8CisgICB8ICAgICAgICAgICB8IGNyZWF0ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAgICB8IGN1cnNvciAgICB8IFNwZWNpZmllcyB0aGUgbW91c2UgY3Vyc29yIHRvIGJlIHVzZWQgZm9yIHRoZSB3aWRnZXQuIElmIHNldCB8CiAgICB8ICAgICAgICAgICB8IHRvIHRoZSBlbXB0eSBzdHJpbmcgKHRoZSBkZWZhdWx0KSwgdGhlIGN1cnNvciBpcyBpbmhlcml0ZWQgICB8CkBAIC01NTQsOSArNTU1LDkgQEAKICAgICAgIFRoaXMgd2lsbCBleHRlbmQgdGhlIGJpbmRpbmdzIGZvciB0aGUgdG9wbGV2ZWwgd2luZG93IGNvbnRhaW5pbmcgdGhlCiAgICAgICBub3RlYm9vayBhcyBmb2xsb3dzOgogCi0gICAgICAqIENvbnRyb2wtVGFiOiBzZWxlY3RzIHRoZSB0YWIgZm9sbG93aW5nIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgb25lLgotICAgICAgKiBTaGlmdC1Db250cm9sLVRhYjogc2VsZWN0cyB0aGUgdGFiIHByZWNlZGluZyB0aGUgY3VycmVudGx5IHNlbGVjdGVkIG9uZS4KLSAgICAgICogQWx0LUs6IHdoZXJlIEsgaXMgdGhlIG1uZW1vbmljICh1bmRlcmxpbmVkKSBjaGFyYWN0ZXIgb2YgYW55IHRhYiwgd2lsbAorICAgICAgKiA6a2JkOmBDb250cm9sLVRhYmA6IHNlbGVjdHMgdGhlIHRhYiBmb2xsb3dpbmcgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBvbmUuCisgICAgICAqIDprYmQ6YFNoaWZ0LUNvbnRyb2wtVGFiYDogc2VsZWN0cyB0aGUgdGFiIHByZWNlZGluZyB0aGUgY3VycmVudGx5IHNlbGVjdGVkIG9uZS4KKyAgICAgICogOmtiZDpgQWx0LUtgOiB3aGVyZSAqSyogaXMgdGhlIG1uZW1vbmljICh1bmRlcmxpbmVkKSBjaGFyYWN0ZXIgb2YgYW55IHRhYiwgd2lsbAogICAgICAgICBzZWxlY3QgdGhhdCB0YWIuCiAKICAgICAgIE11bHRpcGxlIG5vdGVib29rcyBpbiBhIHNpbmdsZSB0b3BsZXZlbCBtYXkgYmUgZW5hYmxlZCBmb3IgdHJhdmVyc2FsLApAQCAtMTE2Nyw3ICsxMTY4LDcgQEAKIEVhY2ggd2lkZ2V0IGluIDptb2Q6YHR0a2AgaXMgYXNzaWduZWQgYSBzdHlsZSwgd2hpY2ggc3BlY2lmaWVzIHRoZSBzZXQgb2YKIGVsZW1lbnRzIG1ha2luZyB1cCB0aGUgd2lkZ2V0IGFuZCBob3cgdGhleSBhcmUgYXJyYW5nZWQsIGFsb25nIHdpdGggZHluYW1pYwogYW5kIGRlZmF1bHQgc2V0dGluZ3MgZm9yIGVsZW1lbnQgb3B0aW9ucy4gQnkgZGVmYXVsdCB0aGUgc3R5bGUgbmFtZSBpcyB0aGUKLXNhbWUgYXMgdGhlIHdpZGdldCdzIGNsYXNzIG5hbWUsIGJ1dCBpdCBtYXkgYmUgb3ZlcnJpZGVuIGJ5IHRoZSB3aWRnZXQncyBzdHlsZQorc2FtZSBhcyB0aGUgd2lkZ2V0J3MgY2xhc3MgbmFtZSwgYnV0IGl0IG1heSBiZSBvdmVycmlkZGVuIGJ5IHRoZSB3aWRnZXQncyBzdHlsZQogb3B0aW9uLiBJZiB5b3UgZG9uJ3Qga25vdyB0aGUgY2xhc3MgbmFtZSBvZiBhIHdpZGdldCwgdXNlIHRoZSBtZXRob2QKIDptZXRoOmBNaXNjLndpbmZvX2NsYXNzYCAoc29tZXdpZGdldC53aW5mb19jbGFzcygpKS4KIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvdG9rZW5pemUucnN0IGIvRG9jL2xpYnJhcnkvdG9rZW5pemUucnN0CmluZGV4IDM3ZDlmNDEuLmM5Y2I1MTggMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3Rva2VuaXplLnJzdAorKysgYi9Eb2MvbGlicmFyeS90b2tlbml6ZS5yc3QKQEAgLTQxLDcgKzQxLDcgQEAKICAgIHJldHVybmVkIGFzIGEgOnRlcm06YG5hbWVkIHR1cGxlYCB3aXRoIHRoZSBmaWVsZCBuYW1lczoKICAgIGBgdHlwZSBzdHJpbmcgc3RhcnQgZW5kIGxpbmVgYC4KIAotICAgVGhlIHJldHVybmVkIDp0ZXJtOmBuYW1lZCB0dXBsZWAgaGFzIGEgYWRkaXRpb25hbCBwcm9wZXJ0eSBuYW1lZAorICAgVGhlIHJldHVybmVkIDp0ZXJtOmBuYW1lZCB0dXBsZWAgaGFzIGFuIGFkZGl0aW9uYWwgcHJvcGVydHkgbmFtZWQKICAgIGBgZXhhY3RfdHlwZWBgIHRoYXQgY29udGFpbnMgdGhlIGV4YWN0IG9wZXJhdG9yIHR5cGUgZm9yCiAgICA6ZGF0YTpgdG9rZW4uT1BgIHRva2Vucy4gIEZvciBhbGwgb3RoZXIgdG9rZW4gdHlwZXMgYGBleGFjdF90eXBlYGAKICAgIGVxdWFscyB0aGUgbmFtZWQgdHVwbGUgYGB0eXBlYGAgZmllbGQuCkBAIC0xMzEsNiArMTMxLDI0IEBACiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgogCisuLiBleGNlcHRpb246OiBUb2tlbkVycm9yCisKKyAgIFJhaXNlZCB3aGVuIGVpdGhlciBhIGRvY3N0cmluZyBvciBleHByZXNzaW9uIHRoYXQgbWF5IGJlIHNwbGl0IG92ZXIgc2V2ZXJhbAorICAgbGluZXMgaXMgbm90IGNvbXBsZXRlZCBhbnl3aGVyZSBpbiB0aGUgZmlsZSwgZm9yIGV4YW1wbGU6OgorCisgICAgICAiIiJCZWdpbm5pbmcgb2YKKyAgICAgIGRvY3N0cmluZworCisgICBvcjo6CisKKyAgICAgIFsxLAorICAgICAgIDIsCisgICAgICAgMworCitOb3RlIHRoYXQgdW5jbG9zZWQgc2luZ2xlLXF1b3RlZCBzdHJpbmdzIGRvIG5vdCBjYXVzZSBhbiBlcnJvciB0byBiZQorcmFpc2VkLiBUaGV5IGFyZSB0b2tlbml6ZWQgYXMgYGBFUlJPUlRPS0VOYGAsIGZvbGxvd2VkIGJ5IHRoZSB0b2tlbml6YXRpb24gb2YKK3RoZWlyIGNvbnRlbnRzLgorCiAKIC4uIF90b2tlbml6ZS1jbGk6CiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3RyYWNlYmFjay5yc3QgYi9Eb2MvbGlicmFyeS90cmFjZWJhY2sucnN0CmluZGV4IDMyZTU3MzMuLjE1ZmJlZGMgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3RyYWNlYmFjay5yc3QKKysrIGIvRG9jL2xpYnJhcnkvdHJhY2ViYWNrLnJzdApAQCAtNzIsNyArNzIsNyBAQAogICAgUmV0dXJuIGEgbGlzdCBvZiB1cCB0byAqbGltaXQqICJwcmUtcHJvY2Vzc2VkIiBzdGFjayB0cmFjZSBlbnRyaWVzIGV4dHJhY3RlZAogICAgZnJvbSB0aGUgdHJhY2ViYWNrIG9iamVjdCAqdHJhY2ViYWNrKi4gIEl0IGlzIHVzZWZ1bCBmb3IgYWx0ZXJuYXRlIGZvcm1hdHRpbmcgb2YKICAgIHN0YWNrIHRyYWNlcy4gIElmICpsaW1pdCogaXMgb21pdHRlZCBvciBgYE5vbmVgYCwgYWxsIGVudHJpZXMgYXJlIGV4dHJhY3RlZC4gIEEKLSAgICJwcmUtcHJvY2Vzc2VkIiBzdGFjayB0cmFjZSBlbnRyeSBpcyBhIHF1YWRydXBsZSAoKmZpbGVuYW1lKiwgKmxpbmUgbnVtYmVyKiwKKyAgICJwcmUtcHJvY2Vzc2VkIiBzdGFjayB0cmFjZSBlbnRyeSBpcyBhIDQtdHVwbGUgKCpmaWxlbmFtZSosICpsaW5lIG51bWJlciosCiAgICAqZnVuY3Rpb24gbmFtZSosICp0ZXh0KikgcmVwcmVzZW50aW5nIHRoZSBpbmZvcm1hdGlvbiB0aGF0IGlzIHVzdWFsbHkgcHJpbnRlZAogICAgZm9yIGEgc3RhY2sgdHJhY2UuICBUaGUgKnRleHQqIGlzIGEgc3RyaW5nIHdpdGggbGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGVzcGFjZQogICAgc3RyaXBwZWQ7IGlmIHRoZSBzb3VyY2UgaXMgbm90IGF2YWlsYWJsZSBpdCBpcyBgYE5vbmVgYC4KQEAgLTEyOSw2ICsxMjksMTMgQEAKIAogICAgQSBzaG9ydGhhbmQgZm9yIGBgZm9ybWF0X2xpc3QoZXh0cmFjdF9zdGFjayhmLCBsaW1pdCkpYGAuCiAKKy4uIGZ1bmN0aW9uOjogY2xlYXJfZnJhbWVzKHRiKQorCisgICBDbGVhcnMgdGhlIGxvY2FsIHZhcmlhYmxlcyBvZiBhbGwgdGhlIHN0YWNrIGZyYW1lcyBpbiBhIHRyYWNlYmFjayAqdGIqCisgICBieSBjYWxsaW5nIHRoZSA6bWV0aDpgY2xlYXJgIG1ldGhvZCBvZiBlYWNoIGZyYW1lIG9iamVjdC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIAogLi4gX3RyYWNlYmFjay1leGFtcGxlOgogCkBAIC0xNDYsNyArMTUzLDcgQEAKICAgICAgICBzb3VyY2UgPSBpbnB1dCgiPj4+ICIpCiAgICAgICAgdHJ5OgogICAgICAgICAgICBleGVjKHNvdXJjZSwgZW52ZGlyKQotICAgICAgIGV4Y2VwdDoKKyAgICAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgICAgICBwcmludCgiRXhjZXB0aW9uIGluIHVzZXIgY29kZToiKQogICAgICAgICAgICBwcmludCgiLSIqNjApCiAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoZmlsZT1zeXMuc3Rkb3V0KQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvdHJhY2VtYWxsb2MucnN0IGIvRG9jL2xpYnJhcnkvdHJhY2VtYWxsb2MucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkNjJlNTUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2MvbGlicmFyeS90cmFjZW1hbGxvYy5yc3QKQEAgLTAsMCArMSw2MzQgQEAKKzptb2Q6YHRyYWNlbWFsbG9jYCAtLS0gVHJhY2UgbWVtb3J5IGFsbG9jYXRpb25zCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisuLiBtb2R1bGU6OiB0cmFjZW1hbGxvYworICAgOnN5bm9wc2lzOiBUcmFjZSBtZW1vcnkgYWxsb2NhdGlvbnMuCisKKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorCitUaGUgdHJhY2VtYWxsb2MgbW9kdWxlIGlzIGEgZGVidWcgdG9vbCB0byB0cmFjZSBtZW1vcnkgYmxvY2tzIGFsbG9jYXRlZCBieQorUHl0aG9uLiBJdCBwcm92aWRlcyB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOgorCisqIFRyYWNlYmFjayB3aGVyZSBhbiBvYmplY3Qgd2FzIGFsbG9jYXRlZAorKiBTdGF0aXN0aWNzIG9uIGFsbG9jYXRlZCBtZW1vcnkgYmxvY2tzIHBlciBmaWxlbmFtZSBhbmQgcGVyIGxpbmUgbnVtYmVyOgorICB0b3RhbCBzaXplLCBudW1iZXIgYW5kIGF2ZXJhZ2Ugc2l6ZSBvZiBhbGxvY2F0ZWQgbWVtb3J5IGJsb2NrcworKiBDb21wdXRlIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHR3byBzbmFwc2hvdHMgdG8gZGV0ZWN0IG1lbW9yeSBsZWFrcworCitUbyB0cmFjZSBtb3N0IG1lbW9yeSBibG9ja3MgYWxsb2NhdGVkIGJ5IFB5dGhvbiwgdGhlIG1vZHVsZSBzaG91bGQgYmUgc3RhcnRlZAorYXMgZWFybHkgYXMgcG9zc2libGUgYnkgc2V0dGluZyB0aGUgOmVudnZhcjpgUFlUSE9OVFJBQ0VNQUxMT0NgIGVudmlyb25tZW50Cit2YXJpYWJsZSB0byBgYDFgYCwgb3IgYnkgdXNpbmcgOm9wdGlvbjpgLVhgIGBgdHJhY2VtYWxsb2NgYCBjb21tYW5kIGxpbmUKK29wdGlvbi4gVGhlIDpmdW5jOmB0cmFjZW1hbGxvYy5zdGFydGAgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCBhdCBydW50aW1lIHRvCitzdGFydCB0cmFjaW5nIFB5dGhvbiBtZW1vcnkgYWxsb2NhdGlvbnMuCisKK0J5IGRlZmF1bHQsIGEgdHJhY2Ugb2YgYW4gYWxsb2NhdGVkIG1lbW9yeSBibG9jayBvbmx5IHN0b3JlcyB0aGUgbW9zdCByZWNlbnQKK2ZyYW1lICgxIGZyYW1lKS4gVG8gc3RvcmUgMjUgZnJhbWVzIGF0IHN0YXJ0dXA6IHNldCB0aGUKKzplbnZ2YXI6YFBZVEhPTlRSQUNFTUFMTE9DYCBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBgYDI1YGAsIG9yIHVzZSB0aGUKKzpvcHRpb246YC1YYCBgYHRyYWNlbWFsbG9jPTI1YGAgY29tbWFuZCBsaW5lIG9wdGlvbi4KKworCitFeGFtcGxlcworLS0tLS0tLS0KKworRGlzcGxheSB0aGUgdG9wIDEwCiteXl5eXl5eXl5eXl5eXl5eXl4KKworRGlzcGxheSB0aGUgMTAgZmlsZXMgYWxsb2NhdGluZyB0aGUgbW9zdCBtZW1vcnk6OgorCisgICAgaW1wb3J0IHRyYWNlbWFsbG9jCisKKyAgICB0cmFjZW1hbGxvYy5zdGFydCgpCisKKyAgICAjIC4uLiBydW4geW91ciBhcHBsaWNhdGlvbiAuLi4KKworICAgIHNuYXBzaG90ID0gdHJhY2VtYWxsb2MudGFrZV9zbmFwc2hvdCgpCisgICAgdG9wX3N0YXRzID0gc25hcHNob3Quc3RhdGlzdGljcygnbGluZW5vJykKKworICAgIHByaW50KCJbIFRvcCAxMCBdIikKKyAgICBmb3Igc3RhdCBpbiB0b3Bfc3RhdHNbOjEwXToKKyAgICAgICAgcHJpbnQoc3RhdCkKKworCitFeGFtcGxlIG9mIG91dHB1dCBvZiB0aGUgUHl0aG9uIHRlc3Qgc3VpdGU6OgorCisgICAgWyBUb3AgMTAgXQorICAgIDxmcm96ZW4gaW1wb3J0bGliLl9ib290c3RyYXA+OjcxNjogc2l6ZT00ODU1IEtpQiwgY291bnQ9MzkzMjgsIGF2ZXJhZ2U9MTI2IEIKKyAgICA8ZnJvemVuIGltcG9ydGxpYi5fYm9vdHN0cmFwPjoyODQ6IHNpemU9NTIxIEtpQiwgY291bnQ9MzE5OSwgYXZlcmFnZT0xNjcgQgorICAgIC91c3IvbGliL3B5dGhvbjMuNC9jb2xsZWN0aW9ucy9fX2luaXRfXy5weTozNjg6IHNpemU9MjQ0IEtpQiwgY291bnQ9MjMxNSwgYXZlcmFnZT0xMDggQgorICAgIC91c3IvbGliL3B5dGhvbjMuNC91bml0dGVzdC9jYXNlLnB5OjM4MTogc2l6ZT0xODUgS2lCLCBjb3VudD03NzksIGF2ZXJhZ2U9MjQzIEIKKyAgICAvdXNyL2xpYi9weXRob24zLjQvdW5pdHRlc3QvY2FzZS5weTo0MDI6IHNpemU9MTU0IEtpQiwgY291bnQ9Mzc4LCBhdmVyYWdlPTQxNiBCCisgICAgL3Vzci9saWIvcHl0aG9uMy40L2FiYy5weToxMzM6IHNpemU9ODguNyBLaUIsIGNvdW50PTM0NywgYXZlcmFnZT0yNjIgQgorICAgIDxmcm96ZW4gaW1wb3J0bGliLl9ib290c3RyYXA+OjE0NDY6IHNpemU9NzAuNCBLaUIsIGNvdW50PTkxMSwgYXZlcmFnZT03OSBCCisgICAgPGZyb3plbiBpbXBvcnRsaWIuX2Jvb3RzdHJhcD46MTQ1NDogc2l6ZT01Mi4wIEtpQiwgY291bnQ9MjUsIGF2ZXJhZ2U9MjEzMSBCCisgICAgPHN0cmluZz46NTogc2l6ZT00OS43IEtpQiwgY291bnQ9MTQ4LCBhdmVyYWdlPTM0NCBCCisgICAgL3Vzci9saWIvcHl0aG9uMy40L3N5c2NvbmZpZy5weTo0MTE6IHNpemU9NDguMCBLaUIsIGNvdW50PTEsIGF2ZXJhZ2U9NDguMCBLaUIKKworV2UgY2FuIHNlZSB0aGF0IFB5dGhvbiBsb2FkZWQgYGA0LjggTWlCYGAgZGF0YSAoYnl0ZWNvZGUgYW5kIGNvbnN0YW50cykgZnJvbQorbW9kdWxlcyBhbmQgdGhhdCB0aGUgOm1vZDpgY29sbGVjdGlvbnNgIG1vZHVsZSBhbGxvY2F0ZWQgYGAyNDQgS2lCYGAgdG8gYnVpbGQKKzpjbGFzczpgfmNvbGxlY3Rpb25zLm5hbWVkdHVwbGVgIHR5cGVzLgorCitTZWUgOm1ldGg6YFNuYXBzaG90LnN0YXRpc3RpY3NgIGZvciBtb3JlIG9wdGlvbnMuCisKKworQ29tcHV0ZSBkaWZmZXJlbmNlcworXl5eXl5eXl5eXl5eXl5eXl5eXgorCitUYWtlIHR3byBzbmFwc2hvdHMgYW5kIGRpc3BsYXkgdGhlIGRpZmZlcmVuY2VzOjoKKworICAgIGltcG9ydCB0cmFjZW1hbGxvYworICAgIHRyYWNlbWFsbG9jLnN0YXJ0KCkKKyAgICAjIC4uLiBzdGFydCB5b3VyIGFwcGxpY2F0aW9uIC4uLgorCisgICAgc25hcHNob3QxID0gdHJhY2VtYWxsb2MudGFrZV9zbmFwc2hvdCgpCisgICAgIyAuLi4gY2FsbCB0aGUgZnVuY3Rpb24gbGVha2luZyBtZW1vcnkgLi4uCisgICAgc25hcHNob3QyID0gdHJhY2VtYWxsb2MudGFrZV9zbmFwc2hvdCgpCisKKyAgICB0b3Bfc3RhdHMgPSBzbmFwc2hvdDIuY29tcGFyZV90byhzbmFwc2hvdDEsICdsaW5lbm8nKQorCisgICAgcHJpbnQoIlsgVG9wIDEwIGRpZmZlcmVuY2VzIF0iKQorICAgIGZvciBzdGF0IGluIHRvcF9zdGF0c1s6MTBdOgorICAgICAgICBwcmludChzdGF0KQorCitFeGFtcGxlIG9mIG91dHB1dCBiZWZvcmUvYWZ0ZXIgcnVubmluZyBzb21lIHRlc3RzIG9mIHRoZSBQeXRob24gdGVzdCBzdWl0ZTo6CisKKyAgICBbIFRvcCAxMCBkaWZmZXJlbmNlcyBdCisgICAgPGZyb3plbiBpbXBvcnRsaWIuX2Jvb3RzdHJhcD46NzE2OiBzaXplPTgxNzMgS2lCICgrNDQyOCBLaUIpLCBjb3VudD03MTMzMiAoKzM5MzY5KSwgYXZlcmFnZT0xMTcgQgorICAgIC91c3IvbGliL3B5dGhvbjMuNC9saW5lY2FjaGUucHk6MTI3OiBzaXplPTk0MCBLaUIgKCs5NDAgS2lCKSwgY291bnQ9ODEwNiAoKzgxMDYpLCBhdmVyYWdlPTExOSBCCisgICAgL3Vzci9saWIvcHl0aG9uMy40L3VuaXR0ZXN0L2Nhc2UucHk6NTcxOiBzaXplPTI5OCBLaUIgKCsyOTggS2lCKSwgY291bnQ9NTg5ICgrNTg5KSwgYXZlcmFnZT01MTkgQgorICAgIDxmcm96ZW4gaW1wb3J0bGliLl9ib290c3RyYXA+OjI4NDogc2l6ZT0xMDA1IEtpQiAoKzE2NiBLaUIpLCBjb3VudD03NDIzICgrMTUyNiksIGF2ZXJhZ2U9MTM5IEIKKyAgICAvdXNyL2xpYi9weXRob24zLjQvbWltZXR5cGVzLnB5OjIxNzogc2l6ZT0xMTIgS2lCICgrMTEyIEtpQiksIGNvdW50PTEzMzQgKCsxMzM0KSwgYXZlcmFnZT04NiBCCisgICAgL3Vzci9saWIvcHl0aG9uMy40L2h0dHAvc2VydmVyLnB5Ojg0ODogc2l6ZT05Ni4wIEtpQiAoKzk2LjAgS2lCKSwgY291bnQ9MSAoKzEpLCBhdmVyYWdlPTk2LjAgS2lCCisgICAgL3Vzci9saWIvcHl0aG9uMy40L2luc3BlY3QucHk6MTQ2NTogc2l6ZT04My41IEtpQiAoKzgzLjUgS2lCKSwgY291bnQ9MTA5ICgrMTA5KSwgYXZlcmFnZT03ODQgQgorICAgIC91c3IvbGliL3B5dGhvbjMuNC91bml0dGVzdC9tb2NrLnB5OjQ5MTogc2l6ZT03Ny43IEtpQiAoKzc3LjcgS2lCKSwgY291bnQ9MTQzICgrMTQzKSwgYXZlcmFnZT01NTcgQgorICAgIC91c3IvbGliL3B5dGhvbjMuNC91cmxsaWIvcGFyc2UucHk6NDc2OiBzaXplPTcxLjggS2lCICgrNzEuOCBLaUIpLCBjb3VudD05NjkgKCs5NjkpLCBhdmVyYWdlPTc2IEIKKyAgICAvdXNyL2xpYi9weXRob24zLjQvY29udGV4dGxpYi5weTozODogc2l6ZT02Ny4yIEtpQiAoKzY3LjIgS2lCKSwgY291bnQ9MTI2ICgrMTI2KSwgYXZlcmFnZT01NDYgQgorCitXZSBjYW4gc2VlIHRoYXQgUHl0aG9uIGhhcyBsb2FkZWQgYGA4LjIgTWlCYGAgb2YgbW9kdWxlIGRhdGEgKGJ5dGVjb2RlIGFuZAorY29uc3RhbnRzKSwgYW5kIHRoYXQgdGhpcyBpcyBgYDQuNCBNaUJgYCBtb3JlIHRoYW4gaGFkIGJlZW4gbG9hZGVkIGJlZm9yZSB0aGUKK3Rlc3RzLCB3aGVuIHRoZSBwcmV2aW91cyBzbmFwc2hvdCB3YXMgdGFrZW4uIFNpbWlsYXJseSwgdGhlIDptb2Q6YGxpbmVjYWNoZWAKK21vZHVsZSBoYXMgY2FjaGVkIGBgOTQwIEtpQmBgIG9mIFB5dGhvbiBzb3VyY2UgY29kZSB0byBmb3JtYXQgdHJhY2ViYWNrcywgYWxsCitvZiBpdCBzaW5jZSB0aGUgcHJldmlvdXMgc25hcHNob3QuCisKK0lmIHRoZSBzeXN0ZW0gaGFzIGxpdHRsZSBmcmVlIG1lbW9yeSwgc25hcHNob3RzIGNhbiBiZSB3cml0dGVuIG9uIGRpc2sgdXNpbmcKK3RoZSA6bWV0aDpgU25hcHNob3QuZHVtcGAgbWV0aG9kIHRvIGFuYWx5emUgdGhlIHNuYXBzaG90IG9mZmxpbmUuIFRoZW4gdXNlIHRoZQorOm1ldGg6YFNuYXBzaG90LmxvYWRgIG1ldGhvZCByZWxvYWQgdGhlIHNuYXBzaG90LgorCisKK0dldCB0aGUgdHJhY2ViYWNrIG9mIGEgbWVtb3J5IGJsb2NrCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorCitDb2RlIHRvIGRpc3BsYXkgdGhlIHRyYWNlYmFjayBvZiB0aGUgYmlnZ2VzdCBtZW1vcnkgYmxvY2s6OgorCisgICAgaW1wb3J0IHRyYWNlbWFsbG9jCisKKyAgICAjIFN0b3JlIDI1IGZyYW1lcworICAgIHRyYWNlbWFsbG9jLnN0YXJ0KDI1KQorCisgICAgIyAuLi4gcnVuIHlvdXIgYXBwbGljYXRpb24gLi4uCisKKyAgICBzbmFwc2hvdCA9IHRyYWNlbWFsbG9jLnRha2Vfc25hcHNob3QoKQorICAgIHRvcF9zdGF0cyA9IHNuYXBzaG90LnN0YXRpc3RpY3MoJ3RyYWNlYmFjaycpCisKKyAgICAjIHBpY2sgdGhlIGJpZ2dlc3QgbWVtb3J5IGJsb2NrCisgICAgc3RhdCA9IHRvcF9zdGF0c1swXQorICAgIHByaW50KCIlcyBtZW1vcnkgYmxvY2tzOiAlLjFmIEtpQiIgJSAoc3RhdC5jb3VudCwgc3RhdC5zaXplIC8gMTAyNCkpCisgICAgZm9yIGxpbmUgaW4gc3RhdC50cmFjZWJhY2suZm9ybWF0KCk6CisgICAgICAgIHByaW50KGxpbmUpCisKK0V4YW1wbGUgb2Ygb3V0cHV0IG9mIHRoZSBQeXRob24gdGVzdCBzdWl0ZSAodHJhY2ViYWNrIGxpbWl0ZWQgdG8gMjUgZnJhbWVzKTo6CisKKyAgICA5MDMgbWVtb3J5IGJsb2NrczogODcwLjEgS2lCCisgICAgICBGaWxlICI8ZnJvemVuIGltcG9ydGxpYi5fYm9vdHN0cmFwPiIsIGxpbmUgNzE2CisgICAgICBGaWxlICI8ZnJvemVuIGltcG9ydGxpYi5fYm9vdHN0cmFwPiIsIGxpbmUgMTAzNgorICAgICAgRmlsZSAiPGZyb3plbiBpbXBvcnRsaWIuX2Jvb3RzdHJhcD4iLCBsaW5lIDkzNAorICAgICAgRmlsZSAiPGZyb3plbiBpbXBvcnRsaWIuX2Jvb3RzdHJhcD4iLCBsaW5lIDEwNjgKKyAgICAgIEZpbGUgIjxmcm96ZW4gaW1wb3J0bGliLl9ib290c3RyYXA+IiwgbGluZSA2MTkKKyAgICAgIEZpbGUgIjxmcm96ZW4gaW1wb3J0bGliLl9ib290c3RyYXA+IiwgbGluZSAxNTgxCisgICAgICBGaWxlICI8ZnJvemVuIGltcG9ydGxpYi5fYm9vdHN0cmFwPiIsIGxpbmUgMTYxNAorICAgICAgRmlsZSAiL3Vzci9saWIvcHl0aG9uMy40L2RvY3Rlc3QucHkiLCBsaW5lIDEwMQorICAgICAgICBpbXBvcnQgcGRiCisgICAgICBGaWxlICI8ZnJvemVuIGltcG9ydGxpYi5fYm9vdHN0cmFwPiIsIGxpbmUgMjg0CisgICAgICBGaWxlICI8ZnJvemVuIGltcG9ydGxpYi5fYm9vdHN0cmFwPiIsIGxpbmUgOTM4CisgICAgICBGaWxlICI8ZnJvemVuIGltcG9ydGxpYi5fYm9vdHN0cmFwPiIsIGxpbmUgMTA2OAorICAgICAgRmlsZSAiPGZyb3plbiBpbXBvcnRsaWIuX2Jvb3RzdHJhcD4iLCBsaW5lIDYxOQorICAgICAgRmlsZSAiPGZyb3plbiBpbXBvcnRsaWIuX2Jvb3RzdHJhcD4iLCBsaW5lIDE1ODEKKyAgICAgIEZpbGUgIjxmcm96ZW4gaW1wb3J0bGliLl9ib290c3RyYXA+IiwgbGluZSAxNjE0CisgICAgICBGaWxlICIvdXNyL2xpYi9weXRob24zLjQvdGVzdC9zdXBwb3J0L19faW5pdF9fLnB5IiwgbGluZSAxNzI4CisgICAgICAgIGltcG9ydCBkb2N0ZXN0CisgICAgICBGaWxlICIvdXNyL2xpYi9weXRob24zLjQvdGVzdC90ZXN0X3BpY2tsZXRvb2xzLnB5IiwgbGluZSAyMQorICAgICAgICBzdXBwb3J0LnJ1bl9kb2N0ZXN0KHBpY2tsZXRvb2xzKQorICAgICAgRmlsZSAiL3Vzci9saWIvcHl0aG9uMy40L3Rlc3QvcmVncnRlc3QucHkiLCBsaW5lIDEyNzYKKyAgICAgICAgdGVzdF9ydW5uZXIoKQorICAgICAgRmlsZSAiL3Vzci9saWIvcHl0aG9uMy40L3Rlc3QvcmVncnRlc3QucHkiLCBsaW5lIDk3NgorICAgICAgICBkaXNwbGF5X2ZhaWx1cmU9bm90IHZlcmJvc2UpCisgICAgICBGaWxlICIvdXNyL2xpYi9weXRob24zLjQvdGVzdC9yZWdydGVzdC5weSIsIGxpbmUgNzYxCisgICAgICAgIG1hdGNoX3Rlc3RzPW5zLm1hdGNoX3Rlc3RzKQorICAgICAgRmlsZSAiL3Vzci9saWIvcHl0aG9uMy40L3Rlc3QvcmVncnRlc3QucHkiLCBsaW5lIDE1NjMKKyAgICAgICAgbWFpbigpCisgICAgICBGaWxlICIvdXNyL2xpYi9weXRob24zLjQvdGVzdC9fX21haW5fXy5weSIsIGxpbmUgMworICAgICAgICByZWdydGVzdC5tYWluX2luX3RlbXBfY3dkKCkKKyAgICAgIEZpbGUgIi91c3IvbGliL3B5dGhvbjMuNC9ydW5weS5weSIsIGxpbmUgNzMKKyAgICAgICAgZXhlYyhjb2RlLCBydW5fZ2xvYmFscykKKyAgICAgIEZpbGUgIi91c3IvbGliL3B5dGhvbjMuNC9ydW5weS5weSIsIGxpbmUgMTYwCisgICAgICAgICJfX21haW5fXyIsIGZuYW1lLCBsb2FkZXIsIHBrZ19uYW1lKQorCitXZSBjYW4gc2VlIHRoYXQgdGhlIG1vc3QgbWVtb3J5IHdhcyBhbGxvY2F0ZWQgaW4gdGhlIDptb2Q6YGltcG9ydGxpYmAgbW9kdWxlIHRvCitsb2FkIGRhdGEgKGJ5dGVjb2RlIGFuZCBjb25zdGFudHMpIGZyb20gbW9kdWxlczogYGA4NzAgS2lCYGAuIFRoZSB0cmFjZWJhY2sgaXMKK3doZXJlIHRoZSA6bW9kOmBpbXBvcnRsaWJgIGxvYWRlZCBkYXRhIG1vc3QgcmVjZW50bHk6IG9uIHRoZSBgYGltcG9ydCBwZGJgYAorbGluZSBvZiB0aGUgOm1vZDpgZG9jdGVzdGAgbW9kdWxlLiBUaGUgdHJhY2ViYWNrIG1heSBjaGFuZ2UgaWYgYSBuZXcgbW9kdWxlIGlzCitsb2FkZWQuCisKKworUHJldHR5IHRvcAorXl5eXl5eXl5eXgorCitDb2RlIHRvIGRpc3BsYXkgdGhlIDEwIGxpbmVzIGFsbG9jYXRpbmcgdGhlIG1vc3QgbWVtb3J5IHdpdGggYSBwcmV0dHkgb3V0cHV0LAoraWdub3JpbmcgYGA8ZnJvemVuIGltcG9ydGxpYi5fYm9vdHN0cmFwPmBgIGFuZCBgYDx1bmtub3duPmBgIGZpbGVzOjoKKworICAgIGltcG9ydCBsaW5lY2FjaGUKKyAgICBpbXBvcnQgb3MKKyAgICBpbXBvcnQgdHJhY2VtYWxsb2MKKworICAgIGRlZiBkaXNwbGF5X3RvcChzbmFwc2hvdCwgZ3JvdXBfYnk9J2xpbmVubycsIGxpbWl0PTEwKToKKyAgICAgICAgc25hcHNob3QgPSBzbmFwc2hvdC5maWx0ZXJfdHJhY2VzKCgKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLkZpbHRlcihGYWxzZSwgIjxmcm96ZW4gaW1wb3J0bGliLl9ib290c3RyYXA+IiksCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5GaWx0ZXIoRmFsc2UsICI8dW5rbm93bj4iKSwKKyAgICAgICAgKSkKKyAgICAgICAgdG9wX3N0YXRzID0gc25hcHNob3Quc3RhdGlzdGljcyhncm91cF9ieSkKKworICAgICAgICBwcmludCgiVG9wICVzIGxpbmVzIiAlIGxpbWl0KQorICAgICAgICBmb3IgaW5kZXgsIHN0YXQgaW4gZW51bWVyYXRlKHRvcF9zdGF0c1s6bGltaXRdLCAxKToKKyAgICAgICAgICAgIGZyYW1lID0gc3RhdC50cmFjZWJhY2tbMF0KKyAgICAgICAgICAgICMgcmVwbGFjZSAiL3BhdGgvdG8vbW9kdWxlL2ZpbGUucHkiIHdpdGggIm1vZHVsZS9maWxlLnB5IgorICAgICAgICAgICAgZmlsZW5hbWUgPSBvcy5zZXAuam9pbihmcmFtZS5maWxlbmFtZS5zcGxpdChvcy5zZXApWy0yOl0pCisgICAgICAgICAgICBwcmludCgiIyVzOiAlczolczogJS4xZiBLaUIiCisgICAgICAgICAgICAgICAgICAlIChpbmRleCwgZmlsZW5hbWUsIGZyYW1lLmxpbmVubywgc3RhdC5zaXplIC8gMTAyNCkpCisgICAgICAgICAgICBsaW5lID0gbGluZWNhY2hlLmdldGxpbmUoZnJhbWUuZmlsZW5hbWUsIGZyYW1lLmxpbmVubykuc3RyaXAoKQorICAgICAgICAgICAgaWYgbGluZToKKyAgICAgICAgICAgICAgICBwcmludCgnICAgICVzJyAlIGxpbmUpCisKKyAgICAgICAgb3RoZXIgPSB0b3Bfc3RhdHNbbGltaXQ6XQorICAgICAgICBpZiBvdGhlcjoKKyAgICAgICAgICAgIHNpemUgPSBzdW0oc3RhdC5zaXplIGZvciBzdGF0IGluIG90aGVyKQorICAgICAgICAgICAgcHJpbnQoIiVzIG90aGVyOiAlLjFmIEtpQiIgJSAobGVuKG90aGVyKSwgc2l6ZSAvIDEwMjQpKQorICAgICAgICB0b3RhbCA9IHN1bShzdGF0LnNpemUgZm9yIHN0YXQgaW4gdG9wX3N0YXRzKQorICAgICAgICBwcmludCgiVG90YWwgYWxsb2NhdGVkIHNpemU6ICUuMWYgS2lCIiAlICh0b3RhbCAvIDEwMjQpKQorCisgICAgdHJhY2VtYWxsb2Muc3RhcnQoKQorCisgICAgIyAuLi4gcnVuIHlvdXIgYXBwbGljYXRpb24gLi4uCisKKyAgICBzbmFwc2hvdCA9IHRyYWNlbWFsbG9jLnRha2Vfc25hcHNob3QoKQorICAgIGRpc3BsYXlfdG9wKHNuYXBzaG90KQorCitFeGFtcGxlIG9mIG91dHB1dCBvZiB0aGUgUHl0aG9uIHRlc3Qgc3VpdGU6OgorCisgICAgVG9wIDEwIGxpbmVzCisgICAgIzE6IExpYi9iYXNlNjQucHk6NDE0OiA0MTkuOCBLaUIKKyAgICAgICAgX2I4NWNoYXJzMiA9IFsoYSArIGIpIGZvciBhIGluIF9iODVjaGFycyBmb3IgYiBpbiBfYjg1Y2hhcnNdCisgICAgIzI6IExpYi9iYXNlNjQucHk6MzA2OiA0MTkuOCBLaUIKKyAgICAgICAgX2E4NWNoYXJzMiA9IFsoYSArIGIpIGZvciBhIGluIF9hODVjaGFycyBmb3IgYiBpbiBfYTg1Y2hhcnNdCisgICAgIzM6IGNvbGxlY3Rpb25zL19faW5pdF9fLnB5OjM2ODogMjkzLjYgS2lCCisgICAgICAgIGV4ZWMoY2xhc3NfZGVmaW5pdGlvbiwgbmFtZXNwYWNlKQorICAgICM0OiBMaWIvYWJjLnB5OjEzMzogMTE1LjIgS2lCCisgICAgICAgIGNscyA9IHN1cGVyKCkuX19uZXdfXyhtY2xzLCBuYW1lLCBiYXNlcywgbmFtZXNwYWNlKQorICAgICM1OiB1bml0dGVzdC9jYXNlLnB5OjU3NDogMTAzLjEgS2lCCisgICAgICAgIHRlc3RNZXRob2QoKQorICAgICM2OiBMaWIvbGluZWNhY2hlLnB5OjEyNzogOTUuNCBLaUIKKyAgICAgICAgbGluZXMgPSBmcC5yZWFkbGluZXMoKQorICAgICM3OiB1cmxsaWIvcGFyc2UucHk6NDc2OiA3MS44IEtpQgorICAgICAgICBmb3IgYSBpbiBfaGV4ZGlnIGZvciBiIGluIF9oZXhkaWd9CisgICAgIzg6IDxzdHJpbmc+OjU6IDYyLjAgS2lCCisgICAgIzk6IExpYi9fd2Vha3JlZnNldC5weTozNzogNjAuMCBLaUIKKyAgICAgICAgc2VsZi5kYXRhID0gc2V0KCkKKyAgICAjMTA6IExpYi9iYXNlNjQucHk6MTQyOiA1OS44IEtpQgorICAgICAgICBfYjMydGFiMiA9IFthICsgYiBmb3IgYSBpbiBfYjMydGFiIGZvciBiIGluIF9iMzJ0YWJdCisgICAgNjIyMCBvdGhlcjogMzYwMi44IEtpQgorICAgIFRvdGFsIGFsbG9jYXRlZCBzaXplOiA1MzAzLjEgS2lCCisKK1NlZSA6bWV0aDpgU25hcHNob3Quc3RhdGlzdGljc2AgZm9yIG1vcmUgb3B0aW9ucy4KKworCitBUEkKKy0tLQorCitGdW5jdGlvbnMKK15eXl5eXl5eXgorCisuLiBmdW5jdGlvbjo6IGNsZWFyX3RyYWNlcygpCisKKyAgIENsZWFyIHRyYWNlcyBvZiBtZW1vcnkgYmxvY2tzIGFsbG9jYXRlZCBieSBQeXRob24uCisKKyAgIFNlZSBhbHNvIDpmdW5jOmBzdG9wYC4KKworCisuLiBmdW5jdGlvbjo6IGdldF9vYmplY3RfdHJhY2ViYWNrKG9iaikKKworICAgR2V0IHRoZSB0cmFjZWJhY2sgd2hlcmUgdGhlIFB5dGhvbiBvYmplY3QgKm9iaiogd2FzIGFsbG9jYXRlZC4KKyAgIFJldHVybiBhIDpjbGFzczpgVHJhY2ViYWNrYCBpbnN0YW5jZSwgb3IgYGBOb25lYGAgaWYgdGhlIDptb2Q6YHRyYWNlbWFsbG9jYAorICAgbW9kdWxlIGlzIG5vdCB0cmFjaW5nIG1lbW9yeSBhbGxvY2F0aW9ucyBvciBkaWQgbm90IHRyYWNlIHRoZSBhbGxvY2F0aW9uIG9mCisgICB0aGUgb2JqZWN0LgorCisgICBTZWUgYWxzbyA6ZnVuYzpgZ2MuZ2V0X3JlZmVycmVyc2AgYW5kIDpmdW5jOmBzeXMuZ2V0c2l6ZW9mYCBmdW5jdGlvbnMuCisKKworLi4gZnVuY3Rpb246OiBnZXRfdHJhY2ViYWNrX2xpbWl0KCkKKworICAgR2V0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBmcmFtZXMgc3RvcmVkIGluIHRoZSB0cmFjZWJhY2sgb2YgYSB0cmFjZS4KKworICAgVGhlIDptb2Q6YHRyYWNlbWFsbG9jYCBtb2R1bGUgbXVzdCBiZSB0cmFjaW5nIG1lbW9yeSBhbGxvY2F0aW9ucyB0bworICAgZ2V0IHRoZSBsaW1pdCwgb3RoZXJ3aXNlIGFuIGV4Y2VwdGlvbiBpcyByYWlzZWQuCisKKyAgIFRoZSBsaW1pdCBpcyBzZXQgYnkgdGhlIDpmdW5jOmBzdGFydGAgZnVuY3Rpb24uCisKKworLi4gZnVuY3Rpb246OiBnZXRfdHJhY2VkX21lbW9yeSgpCisKKyAgIEdldCB0aGUgY3VycmVudCBzaXplIGFuZCBwZWFrIHNpemUgb2YgbWVtb3J5IGJsb2NrcyB0cmFjZWQgYnkgdGhlCisgICA6bW9kOmB0cmFjZW1hbGxvY2AgbW9kdWxlIGFzIGEgdHVwbGU6IGBgKGN1cnJlbnQ6IGludCwgcGVhazogaW50KWBgLgorCisKKy4uIGZ1bmN0aW9uOjogZ2V0X3RyYWNlbWFsbG9jX21lbW9yeSgpCisKKyAgIEdldCB0aGUgbWVtb3J5IHVzYWdlIGluIGJ5dGVzIG9mIHRoZSA6bW9kOmB0cmFjZW1hbGxvY2AgbW9kdWxlIHVzZWQgdG8gc3RvcmUKKyAgIHRyYWNlcyBvZiBtZW1vcnkgYmxvY2tzLgorICAgUmV0dXJuIGFuIDpjbGFzczpgaW50YC4KKworCisuLiBmdW5jdGlvbjo6IGlzX3RyYWNpbmcoKQorCisgICAgYGBUcnVlYGAgaWYgdGhlIDptb2Q6YHRyYWNlbWFsbG9jYCBtb2R1bGUgaXMgdHJhY2luZyBQeXRob24gbWVtb3J5CisgICAgYWxsb2NhdGlvbnMsIGBgRmFsc2VgYCBvdGhlcndpc2UuCisKKyAgICBTZWUgYWxzbyA6ZnVuYzpgc3RhcnRgIGFuZCA6ZnVuYzpgc3RvcGAgZnVuY3Rpb25zLgorCisKKy4uIGZ1bmN0aW9uOjogc3RhcnQobmZyYW1lOiBpbnQ9MSkKKworICAgU3RhcnQgdHJhY2luZyBQeXRob24gbWVtb3J5IGFsbG9jYXRpb25zOiBpbnN0YWxsIGhvb2tzIG9uIFB5dGhvbiBtZW1vcnkKKyAgIGFsbG9jYXRvcnMuIENvbGxlY3RlZCB0cmFjZWJhY2tzIG9mIHRyYWNlcyB3aWxsIGJlIGxpbWl0ZWQgdG8gKm5mcmFtZSoKKyAgIGZyYW1lcy4gQnkgZGVmYXVsdCwgYSB0cmFjZSBvZiBhIG1lbW9yeSBibG9jayBvbmx5IHN0b3JlcyB0aGUgbW9zdCByZWNlbnQKKyAgIGZyYW1lOiB0aGUgbGltaXQgaXMgYGAxYGAuICpuZnJhbWUqIG11c3QgYmUgZ3JlYXRlciBvciBlcXVhbCB0byBgYDFgYC4KKworICAgU3RvcmluZyBtb3JlIHRoYW4gYGAxYGAgZnJhbWUgaXMgb25seSB1c2VmdWwgdG8gY29tcHV0ZSBzdGF0aXN0aWNzIGdyb3VwZWQKKyAgIGJ5IGBgJ3RyYWNlYmFjaydgYCBvciB0byBjb21wdXRlIGN1bXVsYXRpdmUgc3RhdGlzdGljczogc2VlIHRoZQorICAgOm1ldGg6YFNuYXBzaG90LmNvbXBhcmVfdG9gIGFuZCA6bWV0aDpgU25hcHNob3Quc3RhdGlzdGljc2AgbWV0aG9kcy4KKworICAgU3RvcmluZyBtb3JlIGZyYW1lcyBpbmNyZWFzZXMgdGhlIG1lbW9yeSBhbmQgQ1BVIG92ZXJoZWFkIG9mIHRoZQorICAgOm1vZDpgdHJhY2VtYWxsb2NgIG1vZHVsZS4gVXNlIHRoZSA6ZnVuYzpgZ2V0X3RyYWNlbWFsbG9jX21lbW9yeWAgZnVuY3Rpb24KKyAgIHRvIG1lYXN1cmUgaG93IG11Y2ggbWVtb3J5IGlzIHVzZWQgYnkgdGhlIDptb2Q6YHRyYWNlbWFsbG9jYCBtb2R1bGUuCisKKyAgIFRoZSA6ZW52dmFyOmBQWVRIT05UUkFDRU1BTExPQ2AgZW52aXJvbm1lbnQgdmFyaWFibGUKKyAgIChgYFBZVEhPTlRSQUNFTUFMTE9DPU5GUkFNRWBgKSBhbmQgdGhlIDpvcHRpb246YC1YYCBgYHRyYWNlbWFsbG9jPU5GUkFNRWBgCisgICBjb21tYW5kIGxpbmUgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIHN0YXJ0IHRyYWNpbmcgYXQgc3RhcnR1cC4KKworICAgU2VlIGFsc28gOmZ1bmM6YHN0b3BgLCA6ZnVuYzpgaXNfdHJhY2luZ2AgYW5kIDpmdW5jOmBnZXRfdHJhY2ViYWNrX2xpbWl0YAorICAgZnVuY3Rpb25zLgorCisKKy4uIGZ1bmN0aW9uOjogc3RvcCgpCisKKyAgIFN0b3AgdHJhY2luZyBQeXRob24gbWVtb3J5IGFsbG9jYXRpb25zOiB1bmluc3RhbGwgaG9va3Mgb24gUHl0aG9uIG1lbW9yeQorICAgYWxsb2NhdG9ycy4gQWxzbyBjbGVhcnMgYWxsIHByZXZpb3VzbHkgY29sbGVjdGVkIHRyYWNlcyBvZiBtZW1vcnkgYmxvY2tzCisgICBhbGxvY2F0ZWQgYnkgUHl0aG9uLgorCisgICBDYWxsIDpmdW5jOmB0YWtlX3NuYXBzaG90YCBmdW5jdGlvbiB0byB0YWtlIGEgc25hcHNob3Qgb2YgdHJhY2VzIGJlZm9yZQorICAgY2xlYXJpbmcgdGhlbS4KKworICAgU2VlIGFsc28gOmZ1bmM6YHN0YXJ0YCwgOmZ1bmM6YGlzX3RyYWNpbmdgIGFuZCA6ZnVuYzpgY2xlYXJfdHJhY2VzYAorICAgZnVuY3Rpb25zLgorCisKKy4uIGZ1bmN0aW9uOjogdGFrZV9zbmFwc2hvdCgpCisKKyAgIFRha2UgYSBzbmFwc2hvdCBvZiB0cmFjZXMgb2YgbWVtb3J5IGJsb2NrcyBhbGxvY2F0ZWQgYnkgUHl0aG9uLiBSZXR1cm4gYSBuZXcKKyAgIDpjbGFzczpgU25hcHNob3RgIGluc3RhbmNlLgorCisgICBUaGUgc25hcHNob3QgZG9lcyBub3QgaW5jbHVkZSBtZW1vcnkgYmxvY2tzIGFsbG9jYXRlZCBiZWZvcmUgdGhlCisgICA6bW9kOmB0cmFjZW1hbGxvY2AgbW9kdWxlIHN0YXJ0ZWQgdG8gdHJhY2UgbWVtb3J5IGFsbG9jYXRpb25zLgorCisgICBUcmFjZWJhY2tzIG9mIHRyYWNlcyBhcmUgbGltaXRlZCB0byA6ZnVuYzpgZ2V0X3RyYWNlYmFja19saW1pdGAgZnJhbWVzLiBVc2UKKyAgIHRoZSAqbmZyYW1lKiBwYXJhbWV0ZXIgb2YgdGhlIDpmdW5jOmBzdGFydGAgZnVuY3Rpb24gdG8gc3RvcmUgbW9yZSBmcmFtZXMuCisKKyAgIFRoZSA6bW9kOmB0cmFjZW1hbGxvY2AgbW9kdWxlIG11c3QgYmUgdHJhY2luZyBtZW1vcnkgYWxsb2NhdGlvbnMgdG8gdGFrZSBhCisgICBzbmFwc2hvdCwgc2VlIHRoZSA6ZnVuYzpgc3RhcnRgIGZ1bmN0aW9uLgorCisgICBTZWUgYWxzbyB0aGUgOmZ1bmM6YGdldF9vYmplY3RfdHJhY2ViYWNrYCBmdW5jdGlvbi4KKworCitGaWx0ZXIKK15eXl5eXgorCisuLiBjbGFzczo6IEZpbHRlcihpbmNsdXNpdmU6IGJvb2wsIGZpbGVuYW1lX3BhdHRlcm46IHN0ciwgbGluZW5vOiBpbnQ9Tm9uZSwgYWxsX2ZyYW1lczogYm9vbD1GYWxzZSkKKworICAgRmlsdGVyIG9uIHRyYWNlcyBvZiBtZW1vcnkgYmxvY2tzLgorCisgICBTZWUgdGhlIDpmdW5jOmBmbm1hdGNoLmZubWF0Y2hgIGZ1bmN0aW9uIGZvciB0aGUgc3ludGF4IG9mCisgICAqZmlsZW5hbWVfcGF0dGVybiouIFRoZSBgYCcucHljJ2BgIGFuZCBgYCcucHlvJ2BgIGZpbGUgZXh0ZW5zaW9ucyBhcmUKKyAgIHJlcGxhY2VkIHdpdGggYGAnLnB5J2BgLgorCisgICBFeGFtcGxlczoKKworICAgKiBgYEZpbHRlcihUcnVlLCBzdWJwcm9jZXNzLl9fZmlsZV9fKWBgIG9ubHkgaW5jbHVkZXMgdHJhY2VzIG9mIHRoZQorICAgICA6bW9kOmBzdWJwcm9jZXNzYCBtb2R1bGUKKyAgICogYGBGaWx0ZXIoRmFsc2UsIHRyYWNlbWFsbG9jLl9fZmlsZV9fKWBgIGV4Y2x1ZGVzIHRyYWNlcyBvZiB0aGUKKyAgICAgOm1vZDpgdHJhY2VtYWxsb2NgIG1vZHVsZQorICAgKiBgYEZpbHRlcihGYWxzZSwgIjx1bmtub3duPiIpYGAgZXhjbHVkZXMgZW1wdHkgdHJhY2ViYWNrcworCisgICAuLiBhdHRyaWJ1dGU6OiBpbmNsdXNpdmUKKworICAgICAgSWYgKmluY2x1c2l2ZSogaXMgYGBUcnVlYGAgKGluY2x1ZGUpLCBvbmx5IHRyYWNlIG1lbW9yeSBibG9ja3MgYWxsb2NhdGVkCisgICAgICBpbiBhIGZpbGUgd2l0aCBhIG5hbWUgbWF0Y2hpbmcgOmF0dHI6YGZpbGVuYW1lX3BhdHRlcm5gIGF0IGxpbmUgbnVtYmVyCisgICAgICA6YXR0cjpgbGluZW5vYC4KKworICAgICAgSWYgKmluY2x1c2l2ZSogaXMgYGBGYWxzZWBgIChleGNsdWRlKSwgaWdub3JlIG1lbW9yeSBibG9ja3MgYWxsb2NhdGVkIGluCisgICAgICBhIGZpbGUgd2l0aCBhIG5hbWUgbWF0Y2hpbmcgOmF0dHI6YGZpbGVuYW1lX3BhdHRlcm5gIGF0IGxpbmUgbnVtYmVyCisgICAgICA6YXR0cjpgbGluZW5vYC4KKworICAgLi4gYXR0cmlidXRlOjogbGluZW5vCisKKyAgICAgIExpbmUgbnVtYmVyIChgYGludGBgKSBvZiB0aGUgZmlsdGVyLiBJZiAqbGluZW5vKiBpcyBgYE5vbmVgYCwgdGhlIGZpbHRlcgorICAgICAgbWF0Y2hlcyBhbnkgbGluZSBudW1iZXIuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IGZpbGVuYW1lX3BhdHRlcm4KKworICAgICAgRmlsZW5hbWUgcGF0dGVybiBvZiB0aGUgZmlsdGVyIChgYHN0cmBgKS4KKworICAgLi4gYXR0cmlidXRlOjogYWxsX2ZyYW1lcworCisgICAgICBJZiAqYWxsX2ZyYW1lcyogaXMgYGBUcnVlYGAsIGFsbCBmcmFtZXMgb2YgdGhlIHRyYWNlYmFjayBhcmUgY2hlY2tlZC4gSWYKKyAgICAgICphbGxfZnJhbWVzKiBpcyBgYEZhbHNlYGAsIG9ubHkgdGhlIG1vc3QgcmVjZW50IGZyYW1lIGlzIGNoZWNrZWQuCisKKyAgICAgIFRoaXMgYXR0cmlidXRlIGhhcyBubyBlZmZlY3QgaWYgdGhlIHRyYWNlYmFjayBsaW1pdCBpcyBgYDFgYC4gIFNlZSB0aGUKKyAgICAgIDpmdW5jOmBnZXRfdHJhY2ViYWNrX2xpbWl0YCBmdW5jdGlvbiBhbmQgOmF0dHI6YFNuYXBzaG90LnRyYWNlYmFja19saW1pdGAKKyAgICAgIGF0dHJpYnV0ZS4KKworCitGcmFtZQorXl5eXl4KKworLi4gY2xhc3M6OiBGcmFtZQorCisgICBGcmFtZSBvZiBhIHRyYWNlYmFjay4KKworICAgVGhlIDpjbGFzczpgVHJhY2ViYWNrYCBjbGFzcyBpcyBhIHNlcXVlbmNlIG9mIDpjbGFzczpgRnJhbWVgIGluc3RhbmNlcy4KKworICAgLi4gYXR0cmlidXRlOjogZmlsZW5hbWUKKworICAgICAgRmlsZW5hbWUgKGBgc3RyYGApLgorCisgICAuLiBhdHRyaWJ1dGU6OiBsaW5lbm8KKworICAgICAgTGluZSBudW1iZXIgKGBgaW50YGApLgorCisKK1NuYXBzaG90CiteXl5eXl5eXgorCisuLiBjbGFzczo6IFNuYXBzaG90CisKKyAgIFNuYXBzaG90IG9mIHRyYWNlcyBvZiBtZW1vcnkgYmxvY2tzIGFsbG9jYXRlZCBieSBQeXRob24uCisKKyAgIFRoZSA6ZnVuYzpgdGFrZV9zbmFwc2hvdGAgZnVuY3Rpb24gY3JlYXRlcyBhIHNuYXBzaG90IGluc3RhbmNlLgorCisgICAuLiBtZXRob2Q6OiBjb21wYXJlX3RvKG9sZF9zbmFwc2hvdDogU25hcHNob3QsIGdyb3VwX2J5OiBzdHIsIGN1bXVsYXRpdmU6IGJvb2w9RmFsc2UpCisKKyAgICAgIENvbXB1dGUgdGhlIGRpZmZlcmVuY2VzIHdpdGggYW4gb2xkIHNuYXBzaG90LiBHZXQgc3RhdGlzdGljcyBhcyBhIHNvcnRlZAorICAgICAgbGlzdCBvZiA6Y2xhc3M6YFN0YXRpc3RpY0RpZmZgIGluc3RhbmNlcyBncm91cGVkIGJ5ICpncm91cF9ieSouCisKKyAgICAgIFNlZSB0aGUgOm1ldGg6YFNuYXBzaG90LnN0YXRpc3RpY3NgIG1ldGhvZCBmb3IgKmdyb3VwX2J5KiBhbmQgKmN1bXVsYXRpdmUqCisgICAgICBwYXJhbWV0ZXJzLgorCisgICAgICBUaGUgcmVzdWx0IGlzIHNvcnRlZCBmcm9tIHRoZSBiaWdnZXN0IHRvIHRoZSBzbWFsbGVzdCBieTogYWJzb2x1dGUgdmFsdWUKKyAgICAgIG9mIDphdHRyOmBTdGF0aXN0aWNEaWZmLnNpemVfZGlmZmAsIDphdHRyOmBTdGF0aXN0aWNEaWZmLnNpemVgLCBhYnNvbHV0ZQorICAgICAgdmFsdWUgb2YgOmF0dHI6YFN0YXRpc3RpY0RpZmYuY291bnRfZGlmZmAsIDphdHRyOmBTdGF0aXN0aWMuY291bnRgIGFuZAorICAgICAgdGhlbiBieSA6YXR0cjpgU3RhdGlzdGljRGlmZi50cmFjZWJhY2tgLgorCisKKyAgIC4uIG1ldGhvZDo6IGR1bXAoZmlsZW5hbWUpCisKKyAgICAgIFdyaXRlIHRoZSBzbmFwc2hvdCBpbnRvIGEgZmlsZS4KKworICAgICAgVXNlIDptZXRoOmBsb2FkYCB0byByZWxvYWQgdGhlIHNuYXBzaG90LgorCisKKyAgIC4uIG1ldGhvZDo6IGZpbHRlcl90cmFjZXMoZmlsdGVycykKKworICAgICAgQ3JlYXRlIGEgbmV3IDpjbGFzczpgU25hcHNob3RgIGluc3RhbmNlIHdpdGggYSBmaWx0ZXJlZCA6YXR0cjpgdHJhY2VzYAorICAgICAgc2VxdWVuY2UsICpmaWx0ZXJzKiBpcyBhIGxpc3Qgb2YgOmNsYXNzOmBGaWx0ZXJgIGluc3RhbmNlcy4gIElmICpmaWx0ZXJzKgorICAgICAgaXMgYW4gZW1wdHkgbGlzdCwgcmV0dXJuIGEgbmV3IDpjbGFzczpgU25hcHNob3RgIGluc3RhbmNlIHdpdGggYSBjb3B5IG9mCisgICAgICB0aGUgdHJhY2VzLgorCisgICAgICBBbGwgaW5jbHVzaXZlIGZpbHRlcnMgYXJlIGFwcGxpZWQgYXQgb25jZSwgYSB0cmFjZSBpcyBpZ25vcmVkIGlmIG5vCisgICAgICBpbmNsdXNpdmUgZmlsdGVycyBtYXRjaCBpdC4gQSB0cmFjZSBpcyBpZ25vcmVkIGlmIGF0IGxlYXN0IG9uZSBleGNsdXNpdmUKKyAgICAgIGZpbHRlciBtYXRjaGVzIGl0LgorCisKKyAgIC4uIGNsYXNzbWV0aG9kOjogbG9hZChmaWxlbmFtZSkKKworICAgICAgTG9hZCBhIHNuYXBzaG90IGZyb20gYSBmaWxlLgorCisgICAgICBTZWUgYWxzbyA6bWV0aDpgZHVtcGAuCisKKworICAgLi4gbWV0aG9kOjogc3RhdGlzdGljcyhncm91cF9ieTogc3RyLCBjdW11bGF0aXZlOiBib29sPUZhbHNlKQorCisgICAgICBHZXQgc3RhdGlzdGljcyBhcyBhIHNvcnRlZCBsaXN0IG9mIDpjbGFzczpgU3RhdGlzdGljYCBpbnN0YW5jZXMgZ3JvdXBlZAorICAgICAgYnkgKmdyb3VwX2J5KjoKKworICAgICAgPT09PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICAgIGdyb3VwX2J5ICAgICAgICAgICAgICAgZGVzY3JpcHRpb24KKyAgICAgID09PT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09CisgICAgICBgYCdmaWxlbmFtZSdgYCAgICAgICAgIGZpbGVuYW1lCisgICAgICBgYCdsaW5lbm8nYGAgICAgICAgICAgIGZpbGVuYW1lIGFuZCBsaW5lIG51bWJlcgorICAgICAgYGAndHJhY2ViYWNrJ2BgICAgICAgICB0cmFjZWJhY2sKKyAgICAgID09PT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICAgIElmICpjdW11bGF0aXZlKiBpcyBgYFRydWVgYCwgY3VtdWxhdGUgc2l6ZSBhbmQgY291bnQgb2YgbWVtb3J5IGJsb2NrcyBvZgorICAgICAgYWxsIGZyYW1lcyBvZiB0aGUgdHJhY2ViYWNrIG9mIGEgdHJhY2UsIG5vdCBvbmx5IHRoZSBtb3N0IHJlY2VudCBmcmFtZS4KKyAgICAgIFRoZSBjdW11bGF0aXZlIG1vZGUgY2FuIG9ubHkgYmUgdXNlZCB3aXRoICpncm91cF9ieSogZXF1YWxzIHRvCisgICAgICBgYCdmaWxlbmFtZSdgYCBhbmQgYGAnbGluZW5vJ2BgLgorCisgICAgICBUaGUgcmVzdWx0IGlzIHNvcnRlZCBmcm9tIHRoZSBiaWdnZXN0IHRvIHRoZSBzbWFsbGVzdCBieToKKyAgICAgIDphdHRyOmBTdGF0aXN0aWMuc2l6ZWAsIDphdHRyOmBTdGF0aXN0aWMuY291bnRgIGFuZCB0aGVuIGJ5CisgICAgICA6YXR0cjpgU3RhdGlzdGljLnRyYWNlYmFja2AuCisKKworICAgLi4gYXR0cmlidXRlOjogdHJhY2ViYWNrX2xpbWl0CisKKyAgICAgIE1heGltdW0gbnVtYmVyIG9mIGZyYW1lcyBzdG9yZWQgaW4gdGhlIHRyYWNlYmFjayBvZiA6YXR0cjpgdHJhY2VzYDoKKyAgICAgIHJlc3VsdCBvZiB0aGUgOmZ1bmM6YGdldF90cmFjZWJhY2tfbGltaXRgIHdoZW4gdGhlIHNuYXBzaG90IHdhcyB0YWtlbi4KKworICAgLi4gYXR0cmlidXRlOjogdHJhY2VzCisKKyAgICAgIFRyYWNlcyBvZiBhbGwgbWVtb3J5IGJsb2NrcyBhbGxvY2F0ZWQgYnkgUHl0aG9uOiBzZXF1ZW5jZSBvZgorICAgICAgOmNsYXNzOmBUcmFjZWAgaW5zdGFuY2VzLgorCisgICAgICBUaGUgc2VxdWVuY2UgaGFzIGFuIHVuZGVmaW5lZCBvcmRlci4gVXNlIHRoZSA6bWV0aDpgU25hcHNob3Quc3RhdGlzdGljc2AKKyAgICAgIG1ldGhvZCB0byBnZXQgYSBzb3J0ZWQgbGlzdCBvZiBzdGF0aXN0aWNzLgorCisKK1N0YXRpc3RpYworXl5eXl5eXl5eCisKKy4uIGNsYXNzOjogU3RhdGlzdGljCisKKyAgIFN0YXRpc3RpYyBvbiBtZW1vcnkgYWxsb2NhdGlvbnMuCisKKyAgIDpmdW5jOmBTbmFwc2hvdC5zdGF0aXN0aWNzYCByZXR1cm5zIGEgbGlzdCBvZiA6Y2xhc3M6YFN0YXRpc3RpY2AgaW5zdGFuY2VzLgorCisgICBTZWUgYWxzbyB0aGUgOmNsYXNzOmBTdGF0aXN0aWNEaWZmYCBjbGFzcy4KKworICAgLi4gYXR0cmlidXRlOjogY291bnQKKworICAgICAgTnVtYmVyIG9mIG1lbW9yeSBibG9ja3MgKGBgaW50YGApLgorCisgICAuLiBhdHRyaWJ1dGU6OiBzaXplCisKKyAgICAgIFRvdGFsIHNpemUgb2YgbWVtb3J5IGJsb2NrcyBpbiBieXRlcyAoYGBpbnRgYCkuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IHRyYWNlYmFjaworCisgICAgICBUcmFjZWJhY2sgd2hlcmUgdGhlIG1lbW9yeSBibG9jayB3YXMgYWxsb2NhdGVkLCA6Y2xhc3M6YFRyYWNlYmFja2AKKyAgICAgIGluc3RhbmNlLgorCisKK1N0YXRpc3RpY0RpZmYKK15eXl5eXl5eXl5eXl4KKworLi4gY2xhc3M6OiBTdGF0aXN0aWNEaWZmCisKKyAgIFN0YXRpc3RpYyBkaWZmZXJlbmNlIG9uIG1lbW9yeSBhbGxvY2F0aW9ucyBiZXR3ZWVuIGFuIG9sZCBhbmQgYSBuZXcKKyAgIDpjbGFzczpgU25hcHNob3RgIGluc3RhbmNlLgorCisgICA6ZnVuYzpgU25hcHNob3QuY29tcGFyZV90b2AgcmV0dXJucyBhIGxpc3Qgb2YgOmNsYXNzOmBTdGF0aXN0aWNEaWZmYAorICAgaW5zdGFuY2VzLiBTZWUgYWxzbyB0aGUgOmNsYXNzOmBTdGF0aXN0aWNgIGNsYXNzLgorCisgICAuLiBhdHRyaWJ1dGU6OiBjb3VudAorCisgICAgICBOdW1iZXIgb2YgbWVtb3J5IGJsb2NrcyBpbiB0aGUgbmV3IHNuYXBzaG90IChgYGludGBgKTogYGAwYGAgaWYKKyAgICAgIHRoZSBtZW1vcnkgYmxvY2tzIGhhdmUgYmVlbiByZWxlYXNlZCBpbiB0aGUgbmV3IHNuYXBzaG90LgorCisgICAuLiBhdHRyaWJ1dGU6OiBjb3VudF9kaWZmCisKKyAgICAgIERpZmZlcmVuY2Ugb2YgbnVtYmVyIG9mIG1lbW9yeSBibG9ja3MgYmV0d2VlbiB0aGUgb2xkIGFuZCB0aGUgbmV3CisgICAgICBzbmFwc2hvdHMgKGBgaW50YGApOiBgYDBgYCBpZiB0aGUgbWVtb3J5IGJsb2NrcyBoYXZlIGJlZW4gYWxsb2NhdGVkIGluCisgICAgICB0aGUgbmV3IHNuYXBzaG90LgorCisgICAuLiBhdHRyaWJ1dGU6OiBzaXplCisKKyAgICAgIFRvdGFsIHNpemUgb2YgbWVtb3J5IGJsb2NrcyBpbiBieXRlcyBpbiB0aGUgbmV3IHNuYXBzaG90IChgYGludGBgKToKKyAgICAgIGBgMGBgIGlmIHRoZSBtZW1vcnkgYmxvY2tzIGhhdmUgYmVlbiByZWxlYXNlZCBpbiB0aGUgbmV3IHNuYXBzaG90LgorCisgICAuLiBhdHRyaWJ1dGU6OiBzaXplX2RpZmYKKworICAgICAgRGlmZmVyZW5jZSBvZiB0b3RhbCBzaXplIG9mIG1lbW9yeSBibG9ja3MgaW4gYnl0ZXMgYmV0d2VlbiB0aGUgb2xkIGFuZAorICAgICAgdGhlIG5ldyBzbmFwc2hvdHMgKGBgaW50YGApOiBgYDBgYCBpZiB0aGUgbWVtb3J5IGJsb2NrcyBoYXZlIGJlZW4KKyAgICAgIGFsbG9jYXRlZCBpbiB0aGUgbmV3IHNuYXBzaG90LgorCisgICAuLiBhdHRyaWJ1dGU6OiB0cmFjZWJhY2sKKworICAgICAgVHJhY2ViYWNrIHdoZXJlIHRoZSBtZW1vcnkgYmxvY2tzIHdlcmUgYWxsb2NhdGVkLCA6Y2xhc3M6YFRyYWNlYmFja2AKKyAgICAgIGluc3RhbmNlLgorCisKK1RyYWNlCiteXl5eXgorCisuLiBjbGFzczo6IFRyYWNlCisKKyAgIFRyYWNlIG9mIGEgbWVtb3J5IGJsb2NrLgorCisgICBUaGUgOmF0dHI6YFNuYXBzaG90LnRyYWNlc2AgYXR0cmlidXRlIGlzIGEgc2VxdWVuY2Ugb2YgOmNsYXNzOmBUcmFjZWAKKyAgIGluc3RhbmNlcy4KKworICAgLi4gYXR0cmlidXRlOjogc2l6ZQorCisgICAgICBTaXplIG9mIHRoZSBtZW1vcnkgYmxvY2sgaW4gYnl0ZXMgKGBgaW50YGApLgorCisgICAuLiBhdHRyaWJ1dGU6OiB0cmFjZWJhY2sKKworICAgICAgVHJhY2ViYWNrIHdoZXJlIHRoZSBtZW1vcnkgYmxvY2sgd2FzIGFsbG9jYXRlZCwgOmNsYXNzOmBUcmFjZWJhY2tgCisgICAgICBpbnN0YW5jZS4KKworCitUcmFjZWJhY2sKK15eXl5eXl5eXgorCisuLiBjbGFzczo6IFRyYWNlYmFjaworCisgICBTZXF1ZW5jZSBvZiA6Y2xhc3M6YEZyYW1lYCBpbnN0YW5jZXMgc29ydGVkIGZyb20gdGhlIG1vc3QgcmVjZW50IGZyYW1lIHRvCisgICB0aGUgb2xkZXN0IGZyYW1lLgorCisgICBBIHRyYWNlYmFjayBjb250YWlucyBhdCBsZWFzdCBgYDFgYCBmcmFtZS4gSWYgdGhlIGBgdHJhY2VtYWxsb2NgYCBtb2R1bGUKKyAgIGZhaWxlZCB0byBnZXQgYSBmcmFtZSwgdGhlIGZpbGVuYW1lIGBgIjx1bmtub3duPiJgYCBhdCBsaW5lIG51bWJlciBgYDBgYCBpcworICAgdXNlZC4KKworICAgV2hlbiBhIHNuYXBzaG90IGlzIHRha2VuLCB0cmFjZWJhY2tzIG9mIHRyYWNlcyBhcmUgbGltaXRlZCB0bworICAgOmZ1bmM6YGdldF90cmFjZWJhY2tfbGltaXRgIGZyYW1lcy4gU2VlIHRoZSA6ZnVuYzpgdGFrZV9zbmFwc2hvdGAgZnVuY3Rpb24uCisKKyAgIFRoZSA6YXR0cjpgVHJhY2UudHJhY2ViYWNrYCBhdHRyaWJ1dGUgaXMgYW4gaW5zdGFuY2Ugb2YgOmNsYXNzOmBUcmFjZWJhY2tgCisgICBpbnN0YW5jZS4KKworICAgLi4gbWV0aG9kOjogZm9ybWF0KGxpbWl0PU5vbmUpCisKKyAgICAgIEZvcm1hdCB0aGUgdHJhY2ViYWNrIGFzIGEgbGlzdCBvZiBsaW5lcyB3aXRoIG5ld2xpbmVzLiAgVXNlIHRoZQorICAgICAgOm1vZDpgbGluZWNhY2hlYCBtb2R1bGUgdG8gcmV0cmlldmUgbGluZXMgZnJvbSB0aGUgc291cmNlIGNvZGUuICBJZgorICAgICAgKmxpbWl0KiBpcyBzZXQsIG9ubHkgZm9ybWF0IHRoZSAqbGltaXQqIG1vc3QgcmVjZW50IGZyYW1lcy4KKworICAgICAgU2ltaWxhciB0byB0aGUgOmZ1bmM6YHRyYWNlYmFjay5mb3JtYXRfdGJgIGZ1bmN0aW9uLCBleGNlcHQgdGhhdAorICAgICAgOm1ldGg6YGZvcm1hdGAgZG9lcyBub3QgaW5jbHVkZSBuZXdsaW5lcy4KKworICAgICAgRXhhbXBsZTo6CisKKyAgICAgICAgICBwcmludCgiVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGZpcnN0KToiKQorICAgICAgICAgIGZvciBsaW5lIGluIHRyYWNlYmFjazoKKyAgICAgICAgICAgICAgcHJpbnQobGluZSkKKworICAgICAgT3V0cHV0OjoKKworICAgICAgICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBmaXJzdCk6CisgICAgICAgICAgICBGaWxlICJ0ZXN0LnB5IiwgbGluZSA5CisgICAgICAgICAgICAgIG9iaiA9IE9iamVjdCgpCisgICAgICAgICAgICBGaWxlICJ0ZXN0LnB5IiwgbGluZSAxMgorICAgICAgICAgICAgICB0YiA9IHRyYWNlbWFsbG9jLmdldF9vYmplY3RfdHJhY2ViYWNrKGYoKSkKKwpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvdHVsaXBfY29yby5kaWEgYi9Eb2MvbGlicmFyeS90dWxpcF9jb3JvLmRpYQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lY2NmNGZhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jL2xpYnJhcnkvdHVsaXBfY29yby5kaWEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvdHVsaXBfY29yby5wbmcgYi9Eb2MvbGlicmFyeS90dWxpcF9jb3JvLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NWI2OTUxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jL2xpYnJhcnkvdHVsaXBfY29yby5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvdHVydGxlLnJzdCBiL0RvYy9saWJyYXJ5L3R1cnRsZS5yc3QKaW5kZXggYjAxNTUzMC4uZWZlNWM1NCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvdHVydGxlLnJzdAorKysgYi9Eb2MvbGlicmFyeS90dXJ0bGUucnN0CkBAIC0xODA5LDcgKzE4MDksNyBAQAogCiAgICBQb3AgdXAgYSBkaWFsb2cgd2luZG93IGZvciBpbnB1dCBvZiBhIG51bWJlci4gdGl0bGUgaXMgdGhlIHRpdGxlIG9mIHRoZQogICAgZGlhbG9nIHdpbmRvdywgcHJvbXB0IGlzIGEgdGV4dCBtb3N0bHkgZGVzY3JpYmluZyB3aGF0IG51bWVyaWNhbCBpbmZvcm1hdGlvbgotICAgdG8gaW5wdXQuIGRlZmF1bHQ6IGRlZmF1bHQgdmFsdWUsIG1pbnZhbDogbWluaW11bSB2YWx1ZSBmb3IgaW1wdXQsCisgICB0byBpbnB1dC4gZGVmYXVsdDogZGVmYXVsdCB2YWx1ZSwgbWludmFsOiBtaW5pbXVtIHZhbHVlIGZvciBpbnB1dCwKICAgIG1heHZhbDogbWF4aW11bSB2YWx1ZSBmb3IgaW5wdXQKICAgIFRoZSBudW1iZXIgaW5wdXQgbXVzdCBiZSBpbiB0aGUgcmFuZ2UgbWludmFsIC4uIG1heHZhbCBpZiB0aGVzZSBhcmUKICAgIGdpdmVuLiBJZiBub3QsIGEgaGludCBpcyBpc3N1ZWQgYW5kIHRoZSBkaWFsb2cgcmVtYWlucyBvcGVuIGZvcgpAQCAtMTk4MSw3ICsxOTgxLDcgQEAKICAgIDpwYXJhbSBzdGFydHg6IGlmIHBvc2l0aXZlLCBzdGFydGluZyBwb3NpdGlvbiBpbiBwaXhlbHMgZnJvbSB0aGUgbGVmdAogICAgICAgICAgICAgICAgICAgZWRnZSBvZiB0aGUgc2NyZWVuLCBpZiBuZWdhdGl2ZSBmcm9tIHRoZSByaWdodCBlZGdlLCBpZiBOb25lLAogICAgICAgICAgICAgICAgICAgY2VudGVyIHdpbmRvdyBob3Jpem9udGFsbHkKLSAgIDpwYXJhbSBzdGFydHg6IGlmIHBvc2l0aXZlLCBzdGFydGluZyBwb3NpdGlvbiBpbiBwaXhlbHMgZnJvbSB0aGUgdG9wCisgICA6cGFyYW0gc3RhcnR5OiBpZiBwb3NpdGl2ZSwgc3RhcnRpbmcgcG9zaXRpb24gaW4gcGl4ZWxzIGZyb20gdGhlIHRvcAogICAgICAgICAgICAgICAgICAgZWRnZSBvZiB0aGUgc2NyZWVuLCBpZiBuZWdhdGl2ZSBmcm9tIHRoZSBib3R0b20gZWRnZSwgaWYgTm9uZSwKICAgICAgICAgICAgICAgICAgIGNlbnRlciB3aW5kb3cgdmVydGljYWxseQogCkBAIC0yMjc0LDEwICsyMjc0LDEzIEBACiBub3QgZnJvbSB3aXRoaW4gdGhlIGRlbW8tdmlld2VyKS4KIAogCi1EZW1vIHNjcmlwdHMKLT09PT09PT09PT09PQorOm1vZDpgdHVydGxlZGVtb2AgLS0tIERlbW8gc2NyaXB0cworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi1UaGVyZSBpcyBhIHNldCBvZiBkZW1vIHNjcmlwdHMgaW4gdGhlIDptb2Q6YHR1cnRsZWRlbW9gIHBhY2thZ2UuICBUaGVzZQorLi4gbW9kdWxlOjogdHVydGxlZGVtbworICAgOnN5bm9wc2lzOiBBIHZpZXdlciBmb3IgZXhhbXBsZSB0dXJ0bGUgc2NyaXB0cworCitUaGUgOm1vZDpgdHVydGxlZGVtb2AgcGFja2FnZSBpbmNsdWRlcyBhIHNldCBvZiBkZW1vIHNjcmlwdHMuICBUaGVzZQogc2NyaXB0cyBjYW4gYmUgcnVuIGFuZCB2aWV3ZWQgdXNpbmcgdGhlIHN1cHBsaWVkIGRlbW8gdmlld2VyIGFzIGZvbGxvd3M6OgogCiAgICBweXRob24gLW0gdHVydGxlZGVtbwpAQCAtMjI4OCwxNiArMjI5MSwxMyBAQAogCiBUaGUgOm1vZDpgdHVydGxlZGVtb2AgcGFja2FnZSBkaXJlY3RvcnkgY29udGFpbnM6CiAKLS0gYSBzZXQgb2YgMTUgZGVtbyBzY3JpcHRzIGRlbW9uc3RyYXRpbmcgZGlmZmVyZW50IGZlYXR1cmVzIG9mIHRoZSBuZXcgbW9kdWxlCi0gIDptb2Q6YHR1cnRsZWA7Ci0tIGEgZGVtbyB2aWV3ZXIgOmZpbGU6YF9fbWFpbl9fLnB5YCB3aGljaCBjYW4gYmUgdXNlZCB0byB2aWV3IHRoZSBzb3VyY2Vjb2RlCi0gIG9mIHRoZSBzY3JpcHRzIGFuZCBydW4gdGhlbSBhdCB0aGUgc2FtZSB0aW1lLiAxNCBvZiB0aGUgZXhhbXBsZXMgY2FuIGJlCi0gIGFjY2Vzc2VkIHZpYSB0aGUgRXhhbXBsZXMgbWVudTsgYWxsIG9mIHRoZW0gY2FuIGFsc28gYmUgcnVuIHN0YW5kYWxvbmUuCi0tIFRoZSBleGFtcGxlIDptb2Q6YHR1cnRsZWRlbW8udHdvX2NhbnZhc2VzYCBkZW1vbnN0cmF0ZXMgdGhlIHNpbXVsdGFuZW91cwotICB1c2Ugb2YgdHdvIGNhbnZhc2VzIHdpdGggdGhlIHR1cnRsZSBtb2R1bGUuICBUaGVyZWZvcmUgaXQgb25seSBjYW4gYmUgcnVuCi0gIHN0YW5kYWxvbmUuCi0tIFRoZXJlIGlzIGEgOmZpbGU6YHR1cnRsZS5jZmdgIGZpbGUgaW4gdGhpcyBkaXJlY3RvcnksIHdoaWNoIHNlcnZlcyBhcyBhbgotICBleGFtcGxlIGZvciBob3cgdG8gd3JpdGUgYW5kIHVzZSBzdWNoIGZpbGVzLgorLSBBIGRlbW8gdmlld2VyIDpmaWxlOmBfX21haW5fXy5weWAgd2hpY2ggY2FuIGJlIHVzZWQgdG8gdmlldyB0aGUgc291cmNlY29kZQorICBvZiB0aGUgc2NyaXB0cyBhbmQgcnVuIHRoZW0gYXQgdGhlIHNhbWUgdGltZS4KKy0gTXVsdGlwbGUgc2NyaXB0cyBkZW1vbnN0cmF0aW5nIGRpZmZlcmVudCBmZWF0dXJlcyBvZiB0aGUgOm1vZDpgdHVydGxlYAorICBtb2R1bGUuICBFeGFtcGxlcyBjYW4gYmUgYWNjZXNzZWQgdmlhIHRoZSBFeGFtcGxlcyBtZW51LiAgVGhleSBjYW4gYWxzbworICBiZSBydW4gc3RhbmRhbG9uZS4KKy0gQSA6ZmlsZTpgdHVydGxlLmNmZ2AgZmlsZSB3aGljaCBzZXJ2ZXMgYXMgYW4gZXhhbXBsZSBvZiBob3cgdG8gd3JpdGUKKyAgYW5kIHVzZSBzdWNoIGZpbGVzLgogCiBUaGUgZGVtbyBzY3JpcHRzIGFyZToKIApAQCAtMjMyMCw2ICsyMzIwLDggQEAKICstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIHwgY29sb3JtaXhlciAgICAgfCBleHBlcmltZW50IHdpdGggciwgZywgYiAgICAgIHwgOmZ1bmM6YG9uZHJhZ2AgICAgICAgIHwKICstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgZm9yZXN0ICAgICAgICAgfCAzIGJyZWFkdGgtZmlyc3QgdHJlZXMgICAgICAgIHwgcmFuZG9taXphdGlvbiAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIHwgZnJhY3RhbGN1cnZlcyAgfCBIaWxiZXJ0ICYgS29jaCBjdXJ2ZXMgICAgICAgIHwgcmVjdXJzaW9uICAgICAgICAgICAgIHwKICstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIHwgbGluZGVubWF5ZXIgICAgfCBldGhub21hdGhlbWF0aWNzICAgICAgICAgICAgIHwgTC1TeXN0ZW0gICAgICAgICAgICAgIHwKQEAgLTIzNTIsNiArMjM1NCw5IEBACiB8IHRyZWUgICAgICAgICAgIHwgYSAoZ3JhcGhpY2FsKSBicmVhZHRoICAgICAgICB8IDpmdW5jOmBjbG9uZWAgICAgICAgICB8CiB8ICAgICAgICAgICAgICAgIHwgZmlyc3QgdHJlZSAodXNpbmcgZ2VuZXJhdG9ycyl8ICAgICAgICAgICAgICAgICAgICAgICB8CiArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IHR3b19jYW52YXNlcyAgIHwgc2ltcGxlIGRlc2lnbiAgICAgICAgICAgICAgICB8IHR1cnRsZXMgb24gdHdvICAgICAgICB8Cit8ICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNhbnZhc2VzICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiB8IHdpa2lwZWRpYSAgICAgIHwgYSBwYXR0ZXJuIGZyb20gdGhlIHdpa2lwZWRpYSB8IDpmdW5jOmBjbG9uZWAsICAgICAgICB8CiB8ICAgICAgICAgICAgICAgIHwgYXJ0aWNsZSBvbiB0dXJ0bGUgZ3JhcGhpY3MgICB8IDpmdW5jOmB1bmRvYCAgICAgICAgICB8CiArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCkBAIC0yMzk3LDcgKzI0MDIsNyBAQAogICBBY2NvcmRpbmdseSB0aGUgbGF0dGVyIGhhcyBnb3QgYW4gYWxpYXM6IDptZXRoOmBTY3JlZW4ub25rZXlyZWxlYXNlYC4KIAogLSBUaGUgbWV0aG9kICA6bWV0aDpgU2NyZWVuLm1haW5sb29wYCBoYXMgYmVlbiBhZGRlZC4gU28gd2hlbiB3b3JraW5nIG9ubHkKLSAgd2l0aCBTY3JlZW4gYW5kIFR1cnRsZSBvYmplY3RzIG9uZSBtdXN0IG5vdCBhZGRpdG9uYWxseSBpbXBvcnQKKyAgd2l0aCBTY3JlZW4gYW5kIFR1cnRsZSBvYmplY3RzIG9uZSBtdXN0IG5vdCBhZGRpdGlvbmFsbHkgaW1wb3J0CiAgIDpmdW5jOmBtYWlubG9vcGAgYW55bW9yZS4KIAogLSBUd28gaW5wdXQgbWV0aG9kcyBoYXMgYmVlbiBhZGRlZCA6bWV0aDpgU2NyZWVuLnRleHRpbnB1dGAgYW5kCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS90eXBlcy5yc3QgYi9Eb2MvbGlicmFyeS90eXBlcy5yc3QKaW5kZXggNjk1NDgwZi4uYWJkYjkzOSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvdHlwZXMucnN0CisrKyBiL0RvYy9saWJyYXJ5L3R5cGVzLnJzdApAQCAtMTUsNiArMTUsOSBAQAogUHl0aG9uIGludGVycHJldGVyLCBidXQgbm90IGV4cG9zZWQgYXMgYnVpbHRpbnMgbGlrZSA6Y2xhc3M6YGludGAgb3IKIDpjbGFzczpgc3RyYCBhcmUuCiAKK0ZpbmFsbHksIGl0IHByb3ZpZGVzIHNvbWUgYWRkaXRpb25hbCB0eXBlLXJlbGF0ZWQgdXRpbGl0eSBjbGFzc2VzIGFuZCBmdW5jdGlvbnMKK3RoYXQgYXJlIG5vdCBmdW5kYW1lbnRhbCBlbm91Z2ggdG8gYmUgYnVpbHRpbnMuCisKIAogRHluYW1pYyBUeXBlIENyZWF0aW9uCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTEwNyw5ICsxMTAsMzUgQEAKICAgIEMiLikKIAogCi0uLiBkYXRhOjogTW9kdWxlVHlwZQorLi4gY2xhc3M6OiBNb2R1bGVUeXBlKG5hbWUsIGRvYz1Ob25lKQogCi0gICBUaGUgdHlwZSBvZiBtb2R1bGVzLgorICAgVGhlIHR5cGUgb2YgOnRlcm06YG1vZHVsZXMgPG1vZHVsZT5gLiBDb25zdHJ1Y3RvciB0YWtlcyB0aGUgbmFtZSBvZiB0aGUKKyAgIG1vZHVsZSB0byBiZSBjcmVhdGVkIGFuZCBvcHRpb25hbGx5IGl0cyA6dGVybTpgZG9jc3RyaW5nYC4KKworICAgLi4gYXR0cmlidXRlOjogX19kb2NfXworCisgICAgICBUaGUgOnRlcm06YGRvY3N0cmluZ2Agb2YgdGhlIG1vZHVsZS4gRGVmYXVsdHMgdG8gYGBOb25lYGAuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IF9fbG9hZGVyX18KKworICAgICAgVGhlIDp0ZXJtOmBsb2FkZXJgIHdoaWNoIGxvYWRlZCB0aGUgbW9kdWxlLiBEZWZhdWx0cyB0byBgYE5vbmVgYC4KKworICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgICAgIERlZmF1bHRzIHRvIGBgTm9uZWBgLiBQcmV2aW91c2x5IHRoZSBhdHRyaWJ1dGUgd2FzIG9wdGlvbmFsLgorCisgICAuLiBhdHRyaWJ1dGU6OiBfX25hbWVfXworCisgICAgICBUaGUgbmFtZSBvZiB0aGUgbW9kdWxlLgorCisgICAuLiBhdHRyaWJ1dGU6OiBfX3BhY2thZ2VfXworCisgICAgICBXaGljaCA6dGVybTpgcGFja2FnZWAgYSBtb2R1bGUgYmVsb25ncyB0by4gSWYgdGhlIG1vZHVsZSBpcyB0b3AtbGV2ZWwKKyAgICAgIChpLmUuIG5vdCBhIHBhcnQgb2YgYW55IHNwZWNpZmljIHBhY2thZ2UpIHRoZW4gdGhlIGF0dHJpYnV0ZSBzaG91bGQgYmUgc2V0CisgICAgICB0byBgYCcnYGAsIGVsc2UgaXQgc2hvdWxkIGJlIHNldCB0byB0aGUgbmFtZSBvZiB0aGUgcGFja2FnZSAod2hpY2ggY2FuIGJlCisgICAgICA6YXR0cjpgX19uYW1lX19gIGlmIHRoZSBtb2R1bGUgaXMgYSBwYWNrYWdlIGl0c2VsZikuIERlZmF1bHRzIHRvIGBgTm9uZWBgLgorCisgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgICAgRGVmYXVsdHMgdG8gYGBOb25lYGAuIFByZXZpb3VzbHkgdGhlIGF0dHJpYnV0ZSB3YXMgb3B0aW9uYWwuCiAKIAogLi4gZGF0YTo6IFRyYWNlYmFja1R5cGUKQEAgLTE5NCw2ICsyMjMsOSBAQAogICAgICAgUmV0dXJuIGEgbmV3IHZpZXcgb2YgdGhlIHVuZGVybHlpbmcgbWFwcGluZydzIHZhbHVlcy4KIAogCitBZGRpdGlvbmFsIFV0aWxpdHkgQ2xhc3NlcyBhbmQgRnVuY3Rpb25zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKIC4uIGNsYXNzOjogU2ltcGxlTmFtZXNwYWNlCiAKICAgIEEgc2ltcGxlIDpjbGFzczpgb2JqZWN0YCBzdWJjbGFzcyB0aGF0IHByb3ZpZGVzIGF0dHJpYnV0ZSBhY2Nlc3MgdG8gaXRzCkBAIC0yMTIsOSArMjQ0LDI2IEBACiAgICAgICAgICAgICAgICBrZXlzID0gc29ydGVkKHNlbGYuX19kaWN0X18pCiAgICAgICAgICAgICAgICBpdGVtcyA9ICgie309eyFyfSIuZm9ybWF0KGssIHNlbGYuX19kaWN0X19ba10pIGZvciBrIGluIGtleXMpCiAgICAgICAgICAgICAgICByZXR1cm4gInt9KHt9KSIuZm9ybWF0KHR5cGUoc2VsZikuX19uYW1lX18sICIsICIuam9pbihpdGVtcykpCisgICAgICAgICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX19kaWN0X18gPT0gb3RoZXIuX19kaWN0X18KIAogICAgYGBTaW1wbGVOYW1lc3BhY2VgYCBtYXkgYmUgdXNlZnVsIGFzIGEgcmVwbGFjZW1lbnQgZm9yIGBgY2xhc3MgTlM6IHBhc3NgYC4KICAgIEhvd2V2ZXIsIGZvciBhIHN0cnVjdHVyZWQgcmVjb3JkIHR5cGUgdXNlIDpmdW5jOmB+Y29sbGVjdGlvbnMubmFtZWR0dXBsZWAKICAgIGluc3RlYWQuCiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMworCisKKy4uIGZ1bmN0aW9uOjogRHluYW1pY0NsYXNzQXR0cmlidXRlKGZnZXQ9Tm9uZSwgZnNldD1Ob25lLCBmZGVsPU5vbmUsIGRvYz1Ob25lKQorCisgICBSb3V0ZSBhdHRyaWJ1dGUgYWNjZXNzIG9uIGEgY2xhc3MgdG8gX19nZXRhdHRyX18uCisKKyAgIFRoaXMgaXMgYSBkZXNjcmlwdG9yLCB1c2VkIHRvIGRlZmluZSBhdHRyaWJ1dGVzIHRoYXQgYWN0IGRpZmZlcmVudGx5IHdoZW4KKyAgIGFjY2Vzc2VkIHRocm91Z2ggYW4gaW5zdGFuY2UgYW5kIHRocm91Z2ggYSBjbGFzcy4gIEluc3RhbmNlIGFjY2VzcyByZW1haW5zCisgICBub3JtYWwsIGJ1dCBhY2Nlc3MgdG8gYW4gYXR0cmlidXRlIHRocm91Z2ggYSBjbGFzcyB3aWxsIGJlIHJvdXRlZCB0byB0aGUKKyAgIGNsYXNzJ3MgX19nZXRhdHRyX18gbWV0aG9kOyB0aGlzIGlzIGRvbmUgYnkgcmFpc2luZyBBdHRyaWJ1dGVFcnJvci4KKworICAgVGhpcyBhbGxvd3Mgb25lIHRvIGhhdmUgcHJvcGVydGllcyBhY3RpdmUgb24gYW4gaW5zdGFuY2UsIGFuZCBoYXZlIHZpcnR1YWwKKyAgIGF0dHJpYnV0ZXMgb24gdGhlIGNsYXNzIHdpdGggdGhlIHNhbWUgbmFtZSAoc2VlIEVudW0gZm9yIGFuIGV4YW1wbGUpLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3VuZG9jLnJzdCBiL0RvYy9saWJyYXJ5L3VuZG9jLnJzdAppbmRleCA4MDM4NmQyLi4yMDgzMGUyIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS91bmRvYy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvdW5kb2MucnN0CkBAIC0yMCw3ICsyMCw3IEBACiBkb2N1bWVudGVkIGJleW9uZCB0aGlzIG1lbnRpb24uICBUaGVyZSdzIGxpdHRsZSBuZWVkIHRvIGRvY3VtZW50IHRoZXNlLgogCiA6bW9kOmBudHBhdGhgCi0gICAtLS0gSW1wbGVtZW50YXRpb24gb2YgOm1vZDpgb3MucGF0aGAgb24gV2luMzIsIFdpbjY0LCBXaW5DRSwgYW5kIE9TLzIgcGxhdGZvcm1zLgorICAgLS0tIEltcGxlbWVudGF0aW9uIG9mIDptb2Q6YG9zLnBhdGhgIG9uIFdpbjMyLCBXaW42NCwgYW5kIFdpbkNFIHBsYXRmb3Jtcy4KIAogOm1vZDpgcG9zaXhwYXRoYAogICAgLS0tIEltcGxlbWVudGF0aW9uIG9mIDptb2Q6YG9zLnBhdGhgIG9uIFBPU0lYLgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvdW5pY29kZWRhdGEucnN0IGIvRG9jL2xpYnJhcnkvdW5pY29kZWRhdGEucnN0CmluZGV4IGFkNzBkZDkuLjNiM2QzYTAgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3VuaWNvZGVkYXRhLnJzdAorKysgYi9Eb2MvbGlicmFyeS91bmljb2RlZGF0YS5yc3QKQEAgLTE1LDggKzE1LDggQEAKIAogVGhpcyBtb2R1bGUgcHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBVbmljb2RlIENoYXJhY3RlciBEYXRhYmFzZSAoVUNEKSB3aGljaAogZGVmaW5lcyBjaGFyYWN0ZXIgcHJvcGVydGllcyBmb3IgYWxsIFVuaWNvZGUgY2hhcmFjdGVycy4gVGhlIGRhdGEgY29udGFpbmVkIGluCi10aGlzIGRhdGFiYXNlIGlzIGNvbXBpbGVkIGZyb20gdGhlIGBVQ0QgdmVyc2lvbiA2LjEuMAotPGh0dHA6Ly93d3cudW5pY29kZS5vcmcvUHVibGljLzYuMS4wL3VjZD5gXy4KK3RoaXMgZGF0YWJhc2UgaXMgY29tcGlsZWQgZnJvbSB0aGUgYFVDRCB2ZXJzaW9uIDYuMy4wCis8aHR0cDovL3d3dy51bmljb2RlLm9yZy9QdWJsaWMvNi4zLjAvdWNkPmBfLgogCiBUaGUgbW9kdWxlIHVzZXMgdGhlIHNhbWUgbmFtZXMgYW5kIHN5bWJvbHMgYXMgZGVmaW5lZCBieSBVbmljb2RlCiBTdGFuZGFyZCBBbm5leCAjNDQsIGAiVW5pY29kZSBDaGFyYWN0ZXIgRGF0YWJhc2UiCkBAIC0xNjYsNiArMTY2LDYgQEAKIAogLi4gcnVicmljOjogRm9vdG5vdGVzCiAKLS4uIFsjXSBodHRwOi8vd3d3LnVuaWNvZGUub3JnL1B1YmxpYy82LjEuMC91Y2QvTmFtZUFsaWFzZXMudHh0CisuLiBbI10gaHR0cDovL3d3dy51bmljb2RlLm9yZy9QdWJsaWMvNi4zLjAvdWNkL05hbWVBbGlhc2VzLnR4dAogCi0uLiBbI10gaHR0cDovL3d3dy51bmljb2RlLm9yZy9QdWJsaWMvNi4xLjAvdWNkL05hbWVkU2VxdWVuY2VzLnR4dAorLi4gWyNdIGh0dHA6Ly93d3cudW5pY29kZS5vcmcvUHVibGljLzYuMy4wL3VjZC9OYW1lZFNlcXVlbmNlcy50eHQKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3VuaXR0ZXN0Lm1vY2stZXhhbXBsZXMucnN0IGIvRG9jL2xpYnJhcnkvdW5pdHRlc3QubW9jay1leGFtcGxlcy5yc3QKaW5kZXggNTU0ZWYxMS4uMDU1YWJlMCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvdW5pdHRlc3QubW9jay1leGFtcGxlcy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvdW5pdHRlc3QubW9jay1leGFtcGxlcy5yc3QKQEAgLTI4LDIyICsyOCwyMiBAQAogICAgID4+PiByZWFsLm1ldGhvZCgzLCA0LCA1LCBrZXk9J3ZhbHVlJykKICAgICA8TWFnaWNNb2NrIG5hbWU9J21ldGhvZCgpJyBpZD0nLi4uJz4KIAotT25jZSBvdXIgbW9jayBoYXMgYmVlbiB1c2VkIChgcmVhbC5tZXRob2RgIGluIHRoaXMgZXhhbXBsZSkgaXQgaGFzIG1ldGhvZHMKK09uY2Ugb3VyIG1vY2sgaGFzIGJlZW4gdXNlZCAoYGByZWFsLm1ldGhvZGBgIGluIHRoaXMgZXhhbXBsZSkgaXQgaGFzIG1ldGhvZHMKIGFuZCBhdHRyaWJ1dGVzIHRoYXQgYWxsb3cgeW91IHRvIG1ha2UgYXNzZXJ0aW9ucyBhYm91dCBob3cgaXQgaGFzIGJlZW4gdXNlZC4KIAogLi4gbm90ZTo6CiAKICAgICBJbiBtb3N0IG9mIHRoZXNlIGV4YW1wbGVzIHRoZSA6Y2xhc3M6YE1vY2tgIGFuZCA6Y2xhc3M6YE1hZ2ljTW9ja2AgY2xhc3NlcwotICAgIGFyZSBpbnRlcmNoYW5nZWFibGUuIEFzIHRoZSBgTWFnaWNNb2NrYCBpcyB0aGUgbW9yZSBjYXBhYmxlIGNsYXNzIGl0IG1ha2VzCisgICAgYXJlIGludGVyY2hhbmdlYWJsZS4gQXMgdGhlIGBgTWFnaWNNb2NrYGAgaXMgdGhlIG1vcmUgY2FwYWJsZSBjbGFzcyBpdCBtYWtlcwogICAgIGEgc2Vuc2libGUgb25lIHRvIHVzZSBieSBkZWZhdWx0LgogCiBPbmNlIHRoZSBtb2NrIGhhcyBiZWVuIGNhbGxlZCBpdHMgOmF0dHI6YH5Nb2NrLmNhbGxlZGAgYXR0cmlidXRlIGlzIHNldCB0bwotYFRydWVgLiBNb3JlIGltcG9ydGFudGx5IHdlIGNhbiB1c2UgdGhlIDptZXRoOmB+TW9jay5hc3NlcnRfY2FsbGVkX3dpdGhgIG9yCitgYFRydWVgYC4gTW9yZSBpbXBvcnRhbnRseSB3ZSBjYW4gdXNlIHRoZSA6bWV0aDpgfk1vY2suYXNzZXJ0X2NhbGxlZF93aXRoYCBvcgogOm1ldGg6YH5Nb2NrLmFzc2VydF9jYWxsZWRfb25jZV93aXRoYCBtZXRob2QgdG8gY2hlY2sgdGhhdCBpdCB3YXMgY2FsbGVkIHdpdGgKIHRoZSBjb3JyZWN0IGFyZ3VtZW50cy4KIAotVGhpcyBleGFtcGxlIHRlc3RzIHRoYXQgY2FsbGluZyBgUHJvZHVjdGlvbkNsYXNzKCkubWV0aG9kYCByZXN1bHRzIGluIGEgY2FsbCB0bwotdGhlIGBzb21ldGhpbmdgIG1ldGhvZDoKK1RoaXMgZXhhbXBsZSB0ZXN0cyB0aGF0IGNhbGxpbmcgYGBQcm9kdWN0aW9uQ2xhc3MoKS5tZXRob2RgYCByZXN1bHRzIGluIGEgY2FsbCB0bwordGhlIGBgc29tZXRoaW5nYGAgbWV0aG9kOgogCiAgICAgPj4+IGNsYXNzIFByb2R1Y3Rpb25DbGFzczoKICAgICAuLi4gICAgIGRlZiBtZXRob2Qoc2VsZik6CkBAIC02NiwxNSArNjYsMTUgQEAKIG1ldGhvZCAob3Igc29tZSBwYXJ0IG9mIHRoZSBzeXN0ZW0gdW5kZXIgdGVzdCkgYW5kIHRoZW4gY2hlY2sgdGhhdCBpdCBpcyB1c2VkCiBpbiB0aGUgY29ycmVjdCB3YXkuCiAKLVRoZSBzaW1wbGUgYFByb2R1Y3Rpb25DbGFzc2AgYmVsb3cgaGFzIGEgYGNsb3NlcmAgbWV0aG9kLiBJZiBpdCBpcyBjYWxsZWQgd2l0aAotYW4gb2JqZWN0IHRoZW4gaXQgY2FsbHMgYGNsb3NlYCBvbiBpdC4KK1RoZSBzaW1wbGUgYGBQcm9kdWN0aW9uQ2xhc3NgYCBiZWxvdyBoYXMgYSBgYGNsb3NlcmBgIG1ldGhvZC4gSWYgaXQgaXMgY2FsbGVkIHdpdGgKK2FuIG9iamVjdCB0aGVuIGl0IGNhbGxzIGBgY2xvc2VgYCBvbiBpdC4KIAogICAgID4+PiBjbGFzcyBQcm9kdWN0aW9uQ2xhc3M6CiAgICAgLi4uICAgICBkZWYgY2xvc2VyKHNlbGYsIHNvbWV0aGluZyk6CiAgICAgLi4uICAgICAgICAgc29tZXRoaW5nLmNsb3NlKCkKICAgICAuLi4KIAotU28gdG8gdGVzdCBpdCB3ZSBuZWVkIHRvIHBhc3MgaW4gYW4gb2JqZWN0IHdpdGggYSBgY2xvc2VgIG1ldGhvZCBhbmQgY2hlY2sKK1NvIHRvIHRlc3QgaXQgd2UgbmVlZCB0byBwYXNzIGluIGFuIG9iamVjdCB3aXRoIGEgYGBjbG9zZWBgIG1ldGhvZCBhbmQgY2hlY2sKIHRoYXQgaXQgd2FzIGNhbGxlZCBjb3JyZWN0bHkuCiAKICAgICA+Pj4gcmVhbCA9IFByb2R1Y3Rpb25DbGFzcygpCkBAIC05Niw5ICs5Niw5IEBACiBhcmUgY3JlYXRlZCBieSAqY2FsbGluZyB0aGUgY2xhc3MqLiBUaGlzIG1lYW5zIHlvdSBhY2Nlc3MgdGhlICJtb2NrIGluc3RhbmNlIgogYnkgbG9va2luZyBhdCB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBtb2NrZWQgY2xhc3MuCiAKLUluIHRoZSBleGFtcGxlIGJlbG93IHdlIGhhdmUgYSBmdW5jdGlvbiBgc29tZV9mdW5jdGlvbmAgdGhhdCBpbnN0YW50aWF0ZXMgYEZvb2AKLWFuZCBjYWxscyBhIG1ldGhvZCBvbiBpdC4gVGhlIGNhbGwgdG8gYHBhdGNoYCByZXBsYWNlcyB0aGUgY2xhc3MgYEZvb2Agd2l0aCBhCi1tb2NrLiBUaGUgYEZvb2AgaW5zdGFuY2UgaXMgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBtb2NrLCBzbyBpdCBpcyBjb25maWd1cmVkCitJbiB0aGUgZXhhbXBsZSBiZWxvdyB3ZSBoYXZlIGEgZnVuY3Rpb24gYGBzb21lX2Z1bmN0aW9uYGAgdGhhdCBpbnN0YW50aWF0ZXMgYGBGb29gYAorYW5kIGNhbGxzIGEgbWV0aG9kIG9uIGl0LiBUaGUgY2FsbCB0byA6ZnVuYzpgcGF0Y2hgIHJlcGxhY2VzIHRoZSBjbGFzcyBgYEZvb2BgIHdpdGggYQorbW9jay4gVGhlIGBgRm9vYGAgaW5zdGFuY2UgaXMgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBtb2NrLCBzbyBpdCBpcyBjb25maWd1cmVkCiBieSBtb2RpZnlpbmcgdGhlIG1vY2sgOmF0dHI6YH5Nb2NrLnJldHVybl92YWx1ZWAuCiAKICAgICA+Pj4gZGVmIHNvbWVfZnVuY3Rpb24oKToKQEAgLTE0MSwxMyArMTQxLDEzIEBACiAgICAgPj4+IG1vY2subW9ja19jYWxscwogICAgIFtjYWxsLm1ldGhvZCgpLCBjYWxsLmF0dHJpYnV0ZS5tZXRob2QoMTAsIHg9NTMpXQogCi1JZiB5b3UgbWFrZSBhbiBhc3NlcnRpb24gYWJvdXQgYG1vY2tfY2FsbHNgIGFuZCBhbnkgdW5leHBlY3RlZCBtZXRob2RzCitJZiB5b3UgbWFrZSBhbiBhc3NlcnRpb24gYWJvdXQgYGBtb2NrX2NhbGxzYGAgYW5kIGFueSB1bmV4cGVjdGVkIG1ldGhvZHMKIGhhdmUgYmVlbiBjYWxsZWQsIHRoZW4gdGhlIGFzc2VydGlvbiB3aWxsIGZhaWwuIFRoaXMgaXMgdXNlZnVsIGJlY2F1c2UgYXMgd2VsbAogYXMgYXNzZXJ0aW5nIHRoYXQgdGhlIGNhbGxzIHlvdSBleHBlY3RlZCBoYXZlIGJlZW4gbWFkZSwgeW91IGFyZSBhbHNvIGNoZWNraW5nCiB0aGF0IHRoZXkgd2VyZSBtYWRlIGluIHRoZSByaWdodCBvcmRlciBhbmQgd2l0aCBubyBhZGRpdGlvbmFsIGNhbGxzOgogCiBZb3UgdXNlIHRoZSA6ZGF0YTpgY2FsbGAgb2JqZWN0IHRvIGNvbnN0cnVjdCBsaXN0cyBmb3IgY29tcGFyaW5nIHdpdGgKLWBtb2NrX2NhbGxzYDoKK2BgbW9ja19jYWxsc2BgOgogCiAgICAgPj4+IGV4cGVjdGVkID0gW2NhbGwubWV0aG9kKCksIGNhbGwuYXR0cmlidXRlLm1ldGhvZCgxMCwgeD01MyldCiAgICAgPj4+IG1vY2subW9ja19jYWxscyA9PSBleHBlY3RlZApAQCAtMTg1LDcgKzE4NSw3IEBACiAgICAgMwogCiBTb21ldGltZXMgeW91IHdhbnQgdG8gbW9jayB1cCBhIG1vcmUgY29tcGxleCBzaXR1YXRpb24sIGxpa2UgZm9yIGV4YW1wbGUKLWBtb2NrLmNvbm5lY3Rpb24uY3Vyc29yKCkuZXhlY3V0ZSgiU0VMRUNUIDEiKWAuIElmIHdlIHdhbnRlZCB0aGlzIGNhbGwgdG8KK2BgbW9jay5jb25uZWN0aW9uLmN1cnNvcigpLmV4ZWN1dGUoIlNFTEVDVCAxIilgYC4gSWYgd2Ugd2FudGVkIHRoaXMgY2FsbCB0bwogcmV0dXJuIGEgbGlzdCwgdGhlbiB3ZSBoYXZlIHRvIGNvbmZpZ3VyZSB0aGUgcmVzdWx0IG9mIHRoZSBuZXN0ZWQgY2FsbC4KIAogV2UgY2FuIHVzZSA6ZGF0YTpgY2FsbGAgdG8gY29uc3RydWN0IHRoZSBzZXQgb2YgY2FsbHMgaW4gYSAiY2hhaW5lZCBjYWxsIiBsaWtlCkBAIC0yMDIsNyArMjAyLDcgQEAKICAgICA+Pj4gbW9jay5tb2NrX2NhbGxzID09IGV4cGVjdGVkCiAgICAgVHJ1ZQogCi1JdCBpcyB0aGUgY2FsbCB0byBgLmNhbGxfbGlzdCgpYCB0aGF0IHR1cm5zIG91ciBjYWxsIG9iamVjdCBpbnRvIGEgbGlzdCBvZgorSXQgaXMgdGhlIGNhbGwgdG8gYGAuY2FsbF9saXN0KClgYCB0aGF0IHR1cm5zIG91ciBjYWxsIG9iamVjdCBpbnRvIGEgbGlzdCBvZgogY2FsbHMgcmVwcmVzZW50aW5nIHRoZSBjaGFpbmVkIGNhbGxzLgogCiAKQEAgLTIyMywxMCArMjIzLDEwIEBACiBTaWRlIGVmZmVjdCBmdW5jdGlvbnMgYW5kIGl0ZXJhYmxlcwogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KIAotYHNpZGVfZWZmZWN0YCBjYW4gYWxzbyBiZSBzZXQgdG8gYSBmdW5jdGlvbiBvciBhbiBpdGVyYWJsZS4gVGhlIHVzZSBjYXNlIGZvcgotYHNpZGVfZWZmZWN0YCBhcyBhbiBpdGVyYWJsZSBpcyB3aGVyZSB5b3VyIG1vY2sgaXMgZ29pbmcgdG8gYmUgY2FsbGVkIHNldmVyYWwKK2Bgc2lkZV9lZmZlY3RgYCBjYW4gYWxzbyBiZSBzZXQgdG8gYSBmdW5jdGlvbiBvciBhbiBpdGVyYWJsZS4gVGhlIHVzZSBjYXNlIGZvcgorYGBzaWRlX2VmZmVjdGBgIGFzIGFuIGl0ZXJhYmxlIGlzIHdoZXJlIHlvdXIgbW9jayBpcyBnb2luZyB0byBiZSBjYWxsZWQgc2V2ZXJhbAogdGltZXMsIGFuZCB5b3Ugd2FudCBlYWNoIGNhbGwgdG8gcmV0dXJuIGEgZGlmZmVyZW50IHZhbHVlLiBXaGVuIHlvdSBzZXQKLWBzaWRlX2VmZmVjdGAgdG8gYW4gaXRlcmFibGUgZXZlcnkgY2FsbCB0byB0aGUgbW9jayByZXR1cm5zIHRoZSBuZXh0IHZhbHVlCitgYHNpZGVfZWZmZWN0YGAgdG8gYW4gaXRlcmFibGUgZXZlcnkgY2FsbCB0byB0aGUgbW9jayByZXR1cm5zIHRoZSBuZXh0IHZhbHVlCiBmcm9tIHRoZSBpdGVyYWJsZToKIAogICAgID4+PiBtb2NrID0gTWFnaWNNb2NrKHNpZGVfZWZmZWN0PVs0LCA1LCA2XSkKQEAgLTIzOSw3ICsyMzksNyBAQAogCiAKIEZvciBtb3JlIGFkdmFuY2VkIHVzZSBjYXNlcywgbGlrZSBkeW5hbWljYWxseSB2YXJ5aW5nIHRoZSByZXR1cm4gdmFsdWVzCi1kZXBlbmRpbmcgb24gd2hhdCB0aGUgbW9jayBpcyBjYWxsZWQgd2l0aCwgYHNpZGVfZWZmZWN0YCBjYW4gYmUgYSBmdW5jdGlvbi4KK2RlcGVuZGluZyBvbiB3aGF0IHRoZSBtb2NrIGlzIGNhbGxlZCB3aXRoLCBgYHNpZGVfZWZmZWN0YGAgY2FuIGJlIGEgZnVuY3Rpb24uCiBUaGUgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGUgc2FtZSBhcmd1bWVudHMgYXMgdGhlIG1vY2suIFdoYXRldmVyIHRoZQogZnVuY3Rpb24gcmV0dXJucyBpcyB3aGF0IHRoZSBjYWxsIHJldHVybnM6CiAKQEAgLTI1OSwxMyArMjU5LDEzIEBACiAKIE9uZSBwcm9ibGVtIHdpdGggb3ZlciB1c2Ugb2YgbW9ja2luZyBpcyB0aGF0IGl0IGNvdXBsZXMgeW91ciB0ZXN0cyB0byB0aGUKIGltcGxlbWVudGF0aW9uIG9mIHlvdXIgbW9ja3MgcmF0aGVyIHRoYW4geW91ciByZWFsIGNvZGUuIFN1cHBvc2UgeW91IGhhdmUgYQotY2xhc3MgdGhhdCBpbXBsZW1lbnRzIGBzb21lX21ldGhvZGAuIEluIGEgdGVzdCBmb3IgYW5vdGhlciBjbGFzcywgeW91Ci1wcm92aWRlIGEgbW9jayBvZiB0aGlzIG9iamVjdCB0aGF0ICphbHNvKiBwcm92aWRlcyBgc29tZV9tZXRob2RgLiBJZiBsYXRlcgoteW91IHJlZmFjdG9yIHRoZSBmaXJzdCBjbGFzcywgc28gdGhhdCBpdCBubyBsb25nZXIgaGFzIGBzb21lX21ldGhvZGAgLSB0aGVuCitjbGFzcyB0aGF0IGltcGxlbWVudHMgYGBzb21lX21ldGhvZGBgLiBJbiBhIHRlc3QgZm9yIGFub3RoZXIgY2xhc3MsIHlvdQorcHJvdmlkZSBhIG1vY2sgb2YgdGhpcyBvYmplY3QgdGhhdCAqYWxzbyogcHJvdmlkZXMgYGBzb21lX21ldGhvZGBgLiBJZiBsYXRlcgoreW91IHJlZmFjdG9yIHRoZSBmaXJzdCBjbGFzcywgc28gdGhhdCBpdCBubyBsb25nZXIgaGFzIGBgc29tZV9tZXRob2RgYCAtIHRoZW4KIHlvdXIgdGVzdHMgd2lsbCBjb250aW51ZSB0byBwYXNzIGV2ZW4gdGhvdWdoIHlvdXIgY29kZSBpcyBub3cgYnJva2VuIQogCi1gTW9ja2AgYWxsb3dzIHlvdSB0byBwcm92aWRlIGFuIG9iamVjdCBhcyBhIHNwZWNpZmljYXRpb24gZm9yIHRoZSBtb2NrLAotdXNpbmcgdGhlIGBzcGVjYCBrZXl3b3JkIGFyZ3VtZW50LiBBY2Nlc3NpbmcgbWV0aG9kcyAvIGF0dHJpYnV0ZXMgb24gdGhlCis6Y2xhc3M6YE1vY2tgIGFsbG93cyB5b3UgdG8gcHJvdmlkZSBhbiBvYmplY3QgYXMgYSBzcGVjaWZpY2F0aW9uIGZvciB0aGUgbW9jaywKK3VzaW5nIHRoZSAqc3BlYyoga2V5d29yZCBhcmd1bWVudC4gQWNjZXNzaW5nIG1ldGhvZHMgLyBhdHRyaWJ1dGVzIG9uIHRoZQogbW9jayB0aGF0IGRvbid0IGV4aXN0IG9uIHlvdXIgc3BlY2lmaWNhdGlvbiBvYmplY3Qgd2lsbCBpbW1lZGlhdGVseSByYWlzZSBhbgogYXR0cmlidXRlIGVycm9yLiBJZiB5b3UgY2hhbmdlIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB5b3VyIHNwZWNpZmljYXRpb24sIHRoZW4KIHRlc3RzIHRoYXQgdXNlIHRoYXQgY2xhc3Mgd2lsbCBzdGFydCBmYWlsaW5nIGltbWVkaWF0ZWx5IHdpdGhvdXQgeW91IGhhdmluZyB0bwpAQCAtMjc3LDkgKzI3NywyMyBAQAogICAgICAgIC4uLgogICAgIEF0dHJpYnV0ZUVycm9yOiBvYmplY3QgaGFzIG5vIGF0dHJpYnV0ZSAnb2xkX21ldGhvZCcKIAorVXNpbmcgYSBzcGVjaWZpY2F0aW9uIGFsc28gZW5hYmxlcyBhIHNtYXJ0ZXIgbWF0Y2hpbmcgb2YgY2FsbHMgbWFkZSB0byB0aGUKK21vY2ssIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBzb21lIHBhcmFtZXRlcnMgd2VyZSBwYXNzZWQgYXMgcG9zaXRpb25hbCBvcgorbmFtZWQgYXJndW1lbnRzOjoKKworICAgPj4+IGRlZiBmKGEsIGIsIGMpOiBwYXNzCisgICAuLi4KKyAgID4+PiBtb2NrID0gTW9jayhzcGVjPWYpCisgICA+Pj4gbW9jaygxLCAyLCAzKQorICAgPE1vY2sgbmFtZT0nbW9jaygpJyBpZD0nMTQwMTYxNTgwNDU2NTc2Jz4KKyAgID4+PiBtb2NrLmFzc2VydF9jYWxsZWRfd2l0aChhPTEsIGI9MiwgYz0zKQorCitJZiB5b3Ugd2FudCB0aGlzIHNtYXJ0ZXIgbWF0Y2hpbmcgdG8gYWxzbyB3b3JrIHdpdGggbWV0aG9kIGNhbGxzIG9uIHRoZSBtb2NrLAoreW91IGNhbiB1c2UgOnJlZjpgYXV0by1zcGVjY2luZyA8YXV0by1zcGVjY2luZz5gLgorCiBJZiB5b3Ugd2FudCBhIHN0cm9uZ2VyIGZvcm0gb2Ygc3BlY2lmaWNhdGlvbiB0aGF0IHByZXZlbnRzIHRoZSBzZXR0aW5nCiBvZiBhcmJpdHJhcnkgYXR0cmlidXRlcyBhcyB3ZWxsIGFzIHRoZSBnZXR0aW5nIG9mIHRoZW0gdGhlbiB5b3UgY2FuIHVzZQotYHNwZWNfc2V0YCBpbnN0ZWFkIG9mIGBzcGVjYC4KKypzcGVjX3NldCogaW5zdGVhZCBvZiAqc3BlYyouCiAKIAogCkBAIC0yODgsOCArMzAyLDggQEAKIAogLi4gbm90ZTo6CiAKLSAgIFdpdGggYHBhdGNoYCBpdCBtYXR0ZXJzIHRoYXQgeW91IHBhdGNoIG9iamVjdHMgaW4gdGhlIG5hbWVzcGFjZSB3aGVyZSB0aGV5Ci0gICBhcmUgbG9va2VkIHVwLiBUaGlzIGlzIG5vcm1hbGx5IHN0cmFpZ2h0Zm9yd2FyZCwgYnV0IGZvciBhIHF1aWNrIGd1aWRlCisgICBXaXRoIDpmdW5jOmBwYXRjaGAgaXQgbWF0dGVycyB0aGF0IHlvdSBwYXRjaCBvYmplY3RzIGluIHRoZSBuYW1lc3BhY2Ugd2hlcmUKKyAgIHRoZXkgYXJlIGxvb2tlZCB1cC4gVGhpcyBpcyBub3JtYWxseSBzdHJhaWdodGZvcndhcmQsIGJ1dCBmb3IgYSBxdWljayBndWlkZQogICAgcmVhZCA6cmVmOmB3aGVyZSB0byBwYXRjaCA8d2hlcmUtdG8tcGF0Y2g+YC4KIAogCkBAIC0yOTksMTUgKzMxMywxNSBAQAogdGhlbSBoYXMgdG8gYmUgdW5kb25lIGFmdGVyIHRoZSB0ZXN0IG9yIHRoZSBwYXRjaCB3aWxsIHBlcnNpc3QgaW50byBvdGhlcgogdGVzdHMgYW5kIGNhdXNlIGhhcmQgdG8gZGlhZ25vc2UgcHJvYmxlbXMuCiAKLW1vY2sgcHJvdmlkZXMgdGhyZWUgY29udmVuaWVudCBkZWNvcmF0b3JzIGZvciB0aGlzOiBgcGF0Y2hgLCBgcGF0Y2gub2JqZWN0YCBhbmQKLWBwYXRjaC5kaWN0YC4gYHBhdGNoYCB0YWtlcyBhIHNpbmdsZSBzdHJpbmcsIG9mIHRoZSBmb3JtCi1gcGFja2FnZS5tb2R1bGUuQ2xhc3MuYXR0cmlidXRlYCB0byBzcGVjaWZ5IHRoZSBhdHRyaWJ1dGUgeW91IGFyZSBwYXRjaGluZy4gSXQKK21vY2sgcHJvdmlkZXMgdGhyZWUgY29udmVuaWVudCBkZWNvcmF0b3JzIGZvciB0aGlzOiA6ZnVuYzpgcGF0Y2hgLCA6ZnVuYzpgcGF0Y2gub2JqZWN0YCBhbmQKKzpmdW5jOmBwYXRjaC5kaWN0YC4gYGBwYXRjaGBgIHRha2VzIGEgc2luZ2xlIHN0cmluZywgb2YgdGhlIGZvcm0KK2BgcGFja2FnZS5tb2R1bGUuQ2xhc3MuYXR0cmlidXRlYGAgdG8gc3BlY2lmeSB0aGUgYXR0cmlidXRlIHlvdSBhcmUgcGF0Y2hpbmcuIEl0CiBhbHNvIG9wdGlvbmFsbHkgdGFrZXMgYSB2YWx1ZSB0aGF0IHlvdSB3YW50IHRoZSBhdHRyaWJ1dGUgKG9yIGNsYXNzIG9yCiB3aGF0ZXZlcikgdG8gYmUgcmVwbGFjZWQgd2l0aC4gJ3BhdGNoLm9iamVjdCcgdGFrZXMgYW4gb2JqZWN0IGFuZCB0aGUgbmFtZSBvZgogdGhlIGF0dHJpYnV0ZSB5b3Ugd291bGQgbGlrZSBwYXRjaGVkLCBwbHVzIG9wdGlvbmFsbHkgdGhlIHZhbHVlIHRvIHBhdGNoIGl0CiB3aXRoLgogCi1gcGF0Y2gub2JqZWN0YDoKK2BgcGF0Y2gub2JqZWN0YGA6CiAKICAgICA+Pj4gb3JpZ2luYWwgPSBTb21lQ2xhc3MuYXR0cmlidXRlCiAgICAgPj4+IEBwYXRjaC5vYmplY3QoU29tZUNsYXNzLCAnYXR0cmlidXRlJywgc2VudGluZWwuYXR0cmlidXRlKQpAQCAtMzI0LDggKzMzOCw4IEBACiAgICAgLi4uCiAgICAgPj4+IHRlc3QoKQogCi1JZiB5b3UgYXJlIHBhdGNoaW5nIGEgbW9kdWxlIChpbmNsdWRpbmcgOm1vZDpgYnVpbHRpbnNgKSB0aGVuIHVzZSBgcGF0Y2hgCi1pbnN0ZWFkIG9mIGBwYXRjaC5vYmplY3RgOgorSWYgeW91IGFyZSBwYXRjaGluZyBhIG1vZHVsZSAoaW5jbHVkaW5nIDptb2Q6YGJ1aWx0aW5zYCkgdGhlbiB1c2UgOmZ1bmM6YHBhdGNoYAoraW5zdGVhZCBvZiA6ZnVuYzpgcGF0Y2gub2JqZWN0YDoKIAogICAgID4+PiBtb2NrID0gTWFnaWNNb2NrKHJldHVybl92YWx1ZT1zZW50aW5lbC5maWxlX2hhbmRsZSkKICAgICA+Pj4gd2l0aCBwYXRjaCgnYnVpbHRpbnMub3BlbicsIG1vY2spOgpAQCAtMzM0LDcgKzM0OCw3IEBACiAgICAgPj4+IG1vY2suYXNzZXJ0X2NhbGxlZF93aXRoKCdmaWxlbmFtZScsICdyJykKICAgICA+Pj4gYXNzZXJ0IGhhbmRsZSA9PSBzZW50aW5lbC5maWxlX2hhbmRsZSwgImluY29ycmVjdCBmaWxlIGhhbmRsZSByZXR1cm5lZCIKIAotVGhlIG1vZHVsZSBuYW1lIGNhbiBiZSAnZG90dGVkJywgaW4gdGhlIGZvcm0gYHBhY2thZ2UubW9kdWxlYCBpZiBuZWVkZWQ6CitUaGUgbW9kdWxlIG5hbWUgY2FuIGJlICdkb3R0ZWQnLCBpbiB0aGUgZm9ybSBgYHBhY2thZ2UubW9kdWxlYGAgaWYgbmVlZGVkOgogCiAgICAgPj4+IEBwYXRjaCgncGFja2FnZS5tb2R1bGUuQ2xhc3NOYW1lLmF0dHJpYnV0ZScsIHNlbnRpbmVsLmF0dHJpYnV0ZSkKICAgICAuLi4gZGVmIHRlc3QoKToKQEAgLTM1NCw4ICszNjgsOCBAQAogICAgID4+PiBNeVRlc3QoJ3Rlc3Rfc29tZXRoaW5nJykudGVzdF9zb21ldGhpbmcoKQogICAgID4+PiBhc3NlcnQgU29tZUNsYXNzLmF0dHJpYnV0ZSA9PSBvcmlnaW5hbAogCi1JZiB5b3Ugd2FudCB0byBwYXRjaCB3aXRoIGEgTW9jaywgeW91IGNhbiB1c2UgYHBhdGNoYCB3aXRoIG9ubHkgb25lIGFyZ3VtZW50Ci0ob3IgYHBhdGNoLm9iamVjdGAgd2l0aCB0d28gYXJndW1lbnRzKS4gVGhlIG1vY2sgd2lsbCBiZSBjcmVhdGVkIGZvciB5b3UgYW5kCitJZiB5b3Ugd2FudCB0byBwYXRjaCB3aXRoIGEgTW9jaywgeW91IGNhbiB1c2UgOmZ1bmM6YHBhdGNoYCB3aXRoIG9ubHkgb25lIGFyZ3VtZW50Cisob3IgOmZ1bmM6YHBhdGNoLm9iamVjdGAgd2l0aCB0d28gYXJndW1lbnRzKS4gVGhlIG1vY2sgd2lsbCBiZSBjcmVhdGVkIGZvciB5b3UgYW5kCiBwYXNzZWQgaW50byB0aGUgdGVzdCBmdW5jdGlvbiAvIG1ldGhvZDoKIAogICAgID4+PiBjbGFzcyBNeVRlc3QodW5pdHRlc3QyLlRlc3RDYXNlKToKQEAgLTM4MCw3ICszOTQsNyBAQAogV2hlbiB5b3UgbmVzdCBwYXRjaCBkZWNvcmF0b3JzIHRoZSBtb2NrcyBhcmUgcGFzc2VkIGluIHRvIHRoZSBkZWNvcmF0ZWQKIGZ1bmN0aW9uIGluIHRoZSBzYW1lIG9yZGVyIHRoZXkgYXBwbGllZCAodGhlIG5vcm1hbCAqcHl0aG9uKiBvcmRlciB0aGF0CiBkZWNvcmF0b3JzIGFyZSBhcHBsaWVkKS4gVGhpcyBtZWFucyBmcm9tIHRoZSBib3R0b20gdXAsIHNvIGluIHRoZSBleGFtcGxlCi1hYm92ZSB0aGUgbW9jayBmb3IgYHRlc3RfbW9kdWxlLkNsYXNzTmFtZTJgIGlzIHBhc3NlZCBpbiBmaXJzdC4KK2Fib3ZlIHRoZSBtb2NrIGZvciBgYHRlc3RfbW9kdWxlLkNsYXNzTmFtZTJgYCBpcyBwYXNzZWQgaW4gZmlyc3QuCiAKIFRoZXJlIGlzIGFsc28gOmZ1bmM6YHBhdGNoLmRpY3RgIGZvciBzZXR0aW5nIHZhbHVlcyBpbiBhIGRpY3Rpb25hcnkganVzdAogZHVyaW5nIGEgc2NvcGUgYW5kIHJlc3RvcmluZyB0aGUgZGljdGlvbmFyeSB0byBpdHMgb3JpZ2luYWwgc3RhdGUgd2hlbiB0aGUgdGVzdApAQCAtMzkzLDkgKzQwNyw5IEBACiAgICAuLi4KICAgID4+PiBhc3NlcnQgZm9vID09IG9yaWdpbmFsCiAKLWBwYXRjaGAsIGBwYXRjaC5vYmplY3RgIGFuZCBgcGF0Y2guZGljdGAgY2FuIGFsbCBiZSB1c2VkIGFzIGNvbnRleHQgbWFuYWdlcnMuCitgYHBhdGNoYGAsIGBgcGF0Y2gub2JqZWN0YGAgYW5kIGBgcGF0Y2guZGljdGBgIGNhbiBhbGwgYmUgdXNlZCBhcyBjb250ZXh0IG1hbmFnZXJzLgogCi1XaGVyZSB5b3UgdXNlIGBwYXRjaGAgdG8gY3JlYXRlIGEgbW9jayBmb3IgeW91LCB5b3UgY2FuIGdldCBhIHJlZmVyZW5jZSB0byB0aGUKK1doZXJlIHlvdSB1c2UgOmZ1bmM6YHBhdGNoYCB0byBjcmVhdGUgYSBtb2NrIGZvciB5b3UsIHlvdSBjYW4gZ2V0IGEgcmVmZXJlbmNlIHRvIHRoZQogbW9jayB1c2luZyB0aGUgImFzIiBmb3JtIG9mIHRoZSB3aXRoIHN0YXRlbWVudDoKIAogICAgID4+PiBjbGFzcyBQcm9kdWN0aW9uQ2xhc3M6CkBAIC00MTAsNyArNDI0LDcgQEAKICAgICA+Pj4gbW9ja19tZXRob2QuYXNzZXJ0X2NhbGxlZF93aXRoKDEsIDIsIDMpCiAKIAotQXMgYW4gYWx0ZXJuYXRpdmUgYHBhdGNoYCwgYHBhdGNoLm9iamVjdGAgYW5kIGBwYXRjaC5kaWN0YCBjYW4gYmUgdXNlZCBhcworQXMgYW4gYWx0ZXJuYXRpdmUgYGBwYXRjaGBgLCBgYHBhdGNoLm9iamVjdGBgIGFuZCBgYHBhdGNoLmRpY3RgYCBjYW4gYmUgdXNlZCBhcwogY2xhc3MgZGVjb3JhdG9ycy4gV2hlbiB1c2VkIGluIHRoaXMgd2F5IGl0IGlzIHRoZSBzYW1lIGFzIGFwcGx5aW5nIHRoZQogZGVjb3JhdG9yIGluZGl2aWR1YWxseSB0byBldmVyeSBtZXRob2Qgd2hvc2UgbmFtZSBzdGFydHMgd2l0aCAidGVzdCIuCiAKQEAgLTQyOSwxMSArNDQzLDExIEBACiAKIE1vY2tpbmcgY2hhaW5lZCBjYWxscyBpcyBhY3R1YWxseSBzdHJhaWdodGZvcndhcmQgd2l0aCBtb2NrIG9uY2UgeW91CiB1bmRlcnN0YW5kIHRoZSA6YXR0cjpgfk1vY2sucmV0dXJuX3ZhbHVlYCBhdHRyaWJ1dGUuIFdoZW4gYSBtb2NrIGlzIGNhbGxlZCBmb3IKLXRoZSBmaXJzdCB0aW1lLCBvciB5b3UgZmV0Y2ggaXRzIGByZXR1cm5fdmFsdWVgIGJlZm9yZSBpdCBoYXMgYmVlbiBjYWxsZWQsIGEKLW5ldyBgTW9ja2AgaXMgY3JlYXRlZC4KK3RoZSBmaXJzdCB0aW1lLCBvciB5b3UgZmV0Y2ggaXRzIGBgcmV0dXJuX3ZhbHVlYGAgYmVmb3JlIGl0IGhhcyBiZWVuIGNhbGxlZCwgYQorbmV3IDpjbGFzczpgTW9ja2AgaXMgY3JlYXRlZC4KIAogVGhpcyBtZWFucyB0aGF0IHlvdSBjYW4gc2VlIGhvdyB0aGUgb2JqZWN0IHJldHVybmVkIGZyb20gYSBjYWxsIHRvIGEgbW9ja2VkCi1vYmplY3QgaGFzIGJlZW4gdXNlZCBieSBpbnRlcnJvZ2F0aW5nIHRoZSBgcmV0dXJuX3ZhbHVlYCBtb2NrOgorb2JqZWN0IGhhcyBiZWVuIHVzZWQgYnkgaW50ZXJyb2dhdGluZyB0aGUgYGByZXR1cm5fdmFsdWVgYCBtb2NrOgogCiAgICAgPj4+IG1vY2sgPSBNb2NrKCkKICAgICA+Pj4gbW9jaygpLmZvbyhhPTIsIGI9MykKQEAgLTQ1MywyMiArNDY3LDIyIEBACiAgICAgLi4uICAgICAgICAgcmVzcG9uc2UgPSBzZWxmLmJhY2tlbmQuZ2V0X2VuZHBvaW50KCdmb29iYXInKS5jcmVhdGVfY2FsbCgnc3BhbScsICdlZ2dzJykuc3RhcnRfY2FsbCgpCiAgICAgLi4uICAgICAgICAgIyBtb3JlIGNvZGUKIAotQXNzdW1pbmcgdGhhdCBgQmFja2VuZFByb3ZpZGVyYCBpcyBhbHJlYWR5IHdlbGwgdGVzdGVkLCBob3cgZG8gd2UgdGVzdAotYG1ldGhvZCgpYD8gU3BlY2lmaWNhbGx5LCB3ZSB3YW50IHRvIHRlc3QgdGhhdCB0aGUgY29kZSBzZWN0aW9uIGAjIG1vcmUKLWNvZGVgIHVzZXMgdGhlIHJlc3BvbnNlIG9iamVjdCBpbiB0aGUgY29ycmVjdCB3YXkuCitBc3N1bWluZyB0aGF0IGBgQmFja2VuZFByb3ZpZGVyYGAgaXMgYWxyZWFkeSB3ZWxsIHRlc3RlZCwgaG93IGRvIHdlIHRlc3QKK2BgbWV0aG9kKClgYD8gU3BlY2lmaWNhbGx5LCB3ZSB3YW50IHRvIHRlc3QgdGhhdCB0aGUgY29kZSBzZWN0aW9uIGBgIyBtb3JlCitjb2RlYGAgdXNlcyB0aGUgcmVzcG9uc2Ugb2JqZWN0IGluIHRoZSBjb3JyZWN0IHdheS4KIAogQXMgdGhpcyBjaGFpbiBvZiBjYWxscyBpcyBtYWRlIGZyb20gYW4gaW5zdGFuY2UgYXR0cmlidXRlIHdlIGNhbiBtb25rZXkgcGF0Y2gKLXRoZSBgYmFja2VuZGAgYXR0cmlidXRlIG9uIGEgYFNvbWV0aGluZ2AgaW5zdGFuY2UuIEluIHRoaXMgcGFydGljdWxhciBjYXNlCit0aGUgYGBiYWNrZW5kYGAgYXR0cmlidXRlIG9uIGEgYGBTb21ldGhpbmdgYCBpbnN0YW5jZS4gSW4gdGhpcyBwYXJ0aWN1bGFyIGNhc2UKIHdlIGFyZSBvbmx5IGludGVyZXN0ZWQgaW4gdGhlIHJldHVybiB2YWx1ZSBmcm9tIHRoZSBmaW5hbCBjYWxsIHRvCi1gc3RhcnRfY2FsbGAgc28gd2UgZG9uJ3QgaGF2ZSBtdWNoIGNvbmZpZ3VyYXRpb24gdG8gZG8uIExldCdzIGFzc3VtZSB0aGUKK2Bgc3RhcnRfY2FsbGBgIHNvIHdlIGRvbid0IGhhdmUgbXVjaCBjb25maWd1cmF0aW9uIHRvIGRvLiBMZXQncyBhc3N1bWUgdGhlCiBvYmplY3QgaXQgcmV0dXJucyBpcyAnZmlsZS1saWtlJywgc28gd2UnbGwgZW5zdXJlIHRoYXQgb3VyIHJlc3BvbnNlIG9iamVjdAotdXNlcyB0aGUgYnVpbHRpbiBgb3BlbmAgYXMgaXRzIGBzcGVjYC4KK3VzZXMgdGhlIGJ1aWx0aW4gOmZ1bmM6YG9wZW5gIGFzIGl0cyBgYHNwZWNgYC4KIAogVG8gZG8gdGhpcyB3ZSBjcmVhdGUgYSBtb2NrIGluc3RhbmNlIGFzIG91ciBtb2NrIGJhY2tlbmQgYW5kIGNyZWF0ZSBhIG1vY2sKIHJlc3BvbnNlIG9iamVjdCBmb3IgaXQuIFRvIHNldCB0aGUgcmVzcG9uc2UgYXMgdGhlIHJldHVybiB2YWx1ZSBmb3IgdGhhdCBmaW5hbAotYHN0YXJ0X2NhbGxgIHdlIGNvdWxkIGRvIHRoaXM6CitgYHN0YXJ0X2NhbGxgYCB3ZSBjb3VsZCBkbyB0aGlzOjoKIAotICAgIGBtb2NrX2JhY2tlbmQuZ2V0X2VuZHBvaW50LnJldHVybl92YWx1ZS5jcmVhdGVfY2FsbC5yZXR1cm5fdmFsdWUuc3RhcnRfY2FsbC5yZXR1cm5fdmFsdWUgPSBtb2NrX3Jlc3BvbnNlYC4KKyAgICBtb2NrX2JhY2tlbmQuZ2V0X2VuZHBvaW50LnJldHVybl92YWx1ZS5jcmVhdGVfY2FsbC5yZXR1cm5fdmFsdWUuc3RhcnRfY2FsbC5yZXR1cm5fdmFsdWUgPSBtb2NrX3Jlc3BvbnNlCiAKIFdlIGNhbiBkbyB0aGF0IGluIGEgc2xpZ2h0bHkgbmljZXIgd2F5IHVzaW5nIHRoZSA6bWV0aDpgfk1vY2suY29uZmlndXJlX21vY2tgCiBtZXRob2QgdG8gZGlyZWN0bHkgc2V0IHRoZSByZXR1cm4gdmFsdWUgZm9yIHVzOgpAQCAtNDg3LDcgKzUwMSw3IEBACiAKIFVzaW5nIDphdHRyOmB+TW9jay5tb2NrX2NhbGxzYCB3ZSBjYW4gY2hlY2sgdGhlIGNoYWluZWQgY2FsbCB3aXRoIGEgc2luZ2xlCiBhc3NlcnQuIEEgY2hhaW5lZCBjYWxsIGlzIHNldmVyYWwgY2FsbHMgaW4gb25lIGxpbmUgb2YgY29kZSwgc28gdGhlcmUgd2lsbCBiZQotc2V2ZXJhbCBlbnRyaWVzIGluIGBtb2NrX2NhbGxzYC4gV2UgY2FuIHVzZSA6bWV0aDpgY2FsbC5jYWxsX2xpc3RgIHRvIGNyZWF0ZQorc2V2ZXJhbCBlbnRyaWVzIGluIGBgbW9ja19jYWxsc2BgLiBXZSBjYW4gdXNlIDptZXRoOmBjYWxsLmNhbGxfbGlzdGAgdG8gY3JlYXRlCiB0aGlzIGxpc3Qgb2YgY2FsbHMgZm9yIHVzOgogCiAgICAgPj4+IGNoYWluZWQgPSBjYWxsLmdldF9lbmRwb2ludCgnZm9vYmFyJykuY3JlYXRlX2NhbGwoJ3NwYW0nLCAnZWdncycpLnN0YXJ0X2NhbGwoKQpAQCAtNDk4LDIxICs1MTIsMjAgQEAKIFBhcnRpYWwgbW9ja2luZwogfn5+fn5+fn5+fn5+fn5+CiAKLUluIHNvbWUgdGVzdHMgSSB3YW50ZWQgdG8gbW9jayBvdXQgYSBjYWxsIHRvIGBkYXRldGltZS5kYXRlLnRvZGF5KCkKLTxodHRwOi8vZG9jcy5weXRob24ub3JnL2xpYnJhcnkvZGF0ZXRpbWUuaHRtbCNkYXRldGltZS5kYXRlLnRvZGF5PmBfIHRvIHJldHVybgotYSBrbm93biBkYXRlLCBidXQgSSBkaWRuJ3Qgd2FudCB0byBwcmV2ZW50IHRoZSBjb2RlIHVuZGVyIHRlc3QgZnJvbQotY3JlYXRpbmcgbmV3IGRhdGUgb2JqZWN0cy4gVW5mb3J0dW5hdGVseSBgZGF0ZXRpbWUuZGF0ZWAgaXMgd3JpdHRlbiBpbiBDLCBhbmQKLXNvIEkgY291bGRuJ3QganVzdCBtb25rZXktcGF0Y2ggb3V0IHRoZSBzdGF0aWMgYGRhdGUudG9kYXlgIG1ldGhvZC4KK0luIHNvbWUgdGVzdHMgSSB3YW50ZWQgdG8gbW9jayBvdXQgYSBjYWxsIHRvIDptZXRoOmBkYXRldGltZS5kYXRlLnRvZGF5YAordG8gcmV0dXJuIGEga25vd24gZGF0ZSwgYnV0IEkgZGlkbid0IHdhbnQgdG8gcHJldmVudCB0aGUgY29kZSB1bmRlciB0ZXN0IGZyb20KK2NyZWF0aW5nIG5ldyBkYXRlIG9iamVjdHMuIFVuZm9ydHVuYXRlbHkgOmNsYXNzOmBkYXRldGltZS5kYXRlYCBpcyB3cml0dGVuIGluIEMsIGFuZAorc28gSSBjb3VsZG4ndCBqdXN0IG1vbmtleS1wYXRjaCBvdXQgdGhlIHN0YXRpYyA6bWV0aDpgZGF0ZS50b2RheWAgbWV0aG9kLgogCiBJIGZvdW5kIGEgc2ltcGxlIHdheSBvZiBkb2luZyB0aGlzIHRoYXQgaW52b2x2ZWQgZWZmZWN0aXZlbHkgd3JhcHBpbmcgdGhlIGRhdGUKIGNsYXNzIHdpdGggYSBtb2NrLCBidXQgcGFzc2luZyB0aHJvdWdoIGNhbGxzIHRvIHRoZSBjb25zdHJ1Y3RvciB0byB0aGUgcmVhbAogY2xhc3MgKGFuZCByZXR1cm5pbmcgcmVhbCBpbnN0YW5jZXMpLgogCiBUaGUgOmZ1bmM6YHBhdGNoIGRlY29yYXRvciA8cGF0Y2g+YCBpcyB1c2VkIGhlcmUgdG8KLW1vY2sgb3V0IHRoZSBgZGF0ZWAgY2xhc3MgaW4gdGhlIG1vZHVsZSB1bmRlciB0ZXN0LiBUaGUgOmF0dHI6YHNpZGVfZWZmZWN0YAorbW9jayBvdXQgdGhlIGBgZGF0ZWBgIGNsYXNzIGluIHRoZSBtb2R1bGUgdW5kZXIgdGVzdC4gVGhlIDphdHRyOmBzaWRlX2VmZmVjdGAKIGF0dHJpYnV0ZSBvbiB0aGUgbW9jayBkYXRlIGNsYXNzIGlzIHRoZW4gc2V0IHRvIGEgbGFtYmRhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucwogYSByZWFsIGRhdGUuIFdoZW4gdGhlIG1vY2sgZGF0ZSBjbGFzcyBpcyBjYWxsZWQgYSByZWFsIGRhdGUgd2lsbCBiZQotY29uc3RydWN0ZWQgYW5kIHJldHVybmVkIGJ5IGBzaWRlX2VmZmVjdGAuCitjb25zdHJ1Y3RlZCBhbmQgcmV0dXJuZWQgYnkgYGBzaWRlX2VmZmVjdGBgLgogCiAgICAgPj4+IGZyb20gZGF0ZXRpbWUgaW1wb3J0IGRhdGUKICAgICA+Pj4gd2l0aCBwYXRjaCgnbXltb2R1bGUuZGF0ZScpIGFzIG1vY2tfZGF0ZToKQEAgLTUyMywzNCArNTM2LDMyIEBACiAgICAgLi4uICAgICBhc3NlcnQgbXltb2R1bGUuZGF0ZSgyMDA5LCA2LCA4KSA9PSBkYXRlKDIwMDksIDYsIDgpCiAgICAgLi4uCiAKLU5vdGUgdGhhdCB3ZSBkb24ndCBwYXRjaCBgZGF0ZXRpbWUuZGF0ZWAgZ2xvYmFsbHksIHdlIHBhdGNoIGBkYXRlYCBpbiB0aGUKK05vdGUgdGhhdCB3ZSBkb24ndCBwYXRjaCA6Y2xhc3M6YGRhdGV0aW1lLmRhdGVgIGdsb2JhbGx5LCB3ZSBwYXRjaCBgYGRhdGVgYCBpbiB0aGUKIG1vZHVsZSB0aGF0ICp1c2VzKiBpdC4gU2VlIDpyZWY6YHdoZXJlIHRvIHBhdGNoIDx3aGVyZS10by1wYXRjaD5gLgogCi1XaGVuIGBkYXRlLnRvZGF5KClgIGlzIGNhbGxlZCBhIGtub3duIGRhdGUgaXMgcmV0dXJuZWQsIGJ1dCBjYWxscyB0byB0aGUKLWBkYXRlKC4uLilgIGNvbnN0cnVjdG9yIHN0aWxsIHJldHVybiBub3JtYWwgZGF0ZXMuIFdpdGhvdXQgdGhpcyB5b3UgY2FuIGZpbmQKK1doZW4gYGBkYXRlLnRvZGF5KClgYCBpcyBjYWxsZWQgYSBrbm93biBkYXRlIGlzIHJldHVybmVkLCBidXQgY2FsbHMgdG8gdGhlCitgYGRhdGUoLi4uKWBgIGNvbnN0cnVjdG9yIHN0aWxsIHJldHVybiBub3JtYWwgZGF0ZXMuIFdpdGhvdXQgdGhpcyB5b3UgY2FuIGZpbmQKIHlvdXJzZWxmIGhhdmluZyB0byBjYWxjdWxhdGUgYW4gZXhwZWN0ZWQgcmVzdWx0IHVzaW5nIGV4YWN0bHkgdGhlIHNhbWUKIGFsZ29yaXRobSBhcyB0aGUgY29kZSB1bmRlciB0ZXN0LCB3aGljaCBpcyBhIGNsYXNzaWMgdGVzdGluZyBhbnRpLXBhdHRlcm4uCiAKLUNhbGxzIHRvIHRoZSBkYXRlIGNvbnN0cnVjdG9yIGFyZSByZWNvcmRlZCBpbiB0aGUgYG1vY2tfZGF0ZWAgYXR0cmlidXRlcwotKGBjYWxsX2NvdW50YCBhbmQgZnJpZW5kcykgd2hpY2ggbWF5IGFsc28gYmUgdXNlZnVsIGZvciB5b3VyIHRlc3RzLgorQ2FsbHMgdG8gdGhlIGRhdGUgY29uc3RydWN0b3IgYXJlIHJlY29yZGVkIGluIHRoZSBgYG1vY2tfZGF0ZWBgIGF0dHJpYnV0ZXMKKyhgYGNhbGxfY291bnRgYCBhbmQgZnJpZW5kcykgd2hpY2ggbWF5IGFsc28gYmUgdXNlZnVsIGZvciB5b3VyIHRlc3RzLgogCiBBbiBhbHRlcm5hdGl2ZSB3YXkgb2YgZGVhbGluZyB3aXRoIG1vY2tpbmcgZGF0ZXMsIG9yIG90aGVyIGJ1aWx0aW4gY2xhc3NlcywKIGlzIGRpc2N1c3NlZCBpbiBgdGhpcyBibG9nIGVudHJ5Ci08aHR0cDovL3dpbGxpYW1qb2huYmVydC5jb20vMjAxMS8wNy9ob3ctdG8tdW5pdC10ZXN0aW5nLWluLWRqYW5nby13aXRoLW1vY2tpbmctYW5kLXBhdGNoaW5nLz5gXy4KKzxodHRwOi8vd3d3LndpbGxpYW1qb2huYmVydC5jb20vMjAxMS8wNy9ob3ctdG8tdW5pdC10ZXN0aW5nLWluLWRqYW5nby13aXRoLW1vY2tpbmctYW5kLXBhdGNoaW5nLz5gXy4KIAogCiBNb2NraW5nIGEgR2VuZXJhdG9yIE1ldGhvZAogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KIAotQSBQeXRob24gZ2VuZXJhdG9yIGlzIGEgZnVuY3Rpb24gb3IgbWV0aG9kIHRoYXQgdXNlcyB0aGUgYHlpZWxkIHN0YXRlbWVudAotPGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvcmVmZXJlbmNlL3NpbXBsZV9zdG10cy5odG1sI3RoZS15aWVsZC1zdGF0ZW1lbnQ+YF8gdG8KLXJldHVybiBhIHNlcmllcyBvZiB2YWx1ZXMgd2hlbiBpdGVyYXRlZCBvdmVyIFsjXV8uCitBIFB5dGhvbiBnZW5lcmF0b3IgaXMgYSBmdW5jdGlvbiBvciBtZXRob2QgdGhhdCB1c2VzIHRoZSA6a2V5d29yZDpgeWllbGRgIHN0YXRlbWVudAordG8gcmV0dXJuIGEgc2VyaWVzIG9mIHZhbHVlcyB3aGVuIGl0ZXJhdGVkIG92ZXIgWyNdXy4KIAogQSBnZW5lcmF0b3IgbWV0aG9kIC8gZnVuY3Rpb24gaXMgY2FsbGVkIHRvIHJldHVybiB0aGUgZ2VuZXJhdG9yIG9iamVjdC4gSXQgaXMKIHRoZSBnZW5lcmF0b3Igb2JqZWN0IHRoYXQgaXMgdGhlbiBpdGVyYXRlZCBvdmVyLiBUaGUgcHJvdG9jb2wgbWV0aG9kIGZvcgotaXRlcmF0aW9uIGlzIGBfX2l0ZXJfXwotPGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvbGlicmFyeS9zdGR0eXBlcy5odG1sI2NvbnRhaW5lci5fX2l0ZXJfXz5gXywgc28gd2UgY2FuCi1tb2NrIHRoaXMgdXNpbmcgYSBgTWFnaWNNb2NrYC4KK2l0ZXJhdGlvbiBpcyA6bWV0aDpgfmNvbnRhaW5lci5fX2l0ZXJfX2AsIHNvIHdlIGNhbgorbW9jayB0aGlzIHVzaW5nIGEgOmNsYXNzOmBNYWdpY01vY2tgLgogCiBIZXJlJ3MgYW4gZXhhbXBsZSBjbGFzcyB3aXRoIGFuICJpdGVyIiBtZXRob2QgaW1wbGVtZW50ZWQgYXMgYSBnZW5lcmF0b3I6CiAKQEAgLTU2Nyw3ICs1NzgsNyBAQAogSG93IHdvdWxkIHdlIG1vY2sgdGhpcyBjbGFzcywgYW5kIGluIHBhcnRpY3VsYXIgaXRzICJpdGVyIiBtZXRob2Q/CiAKIFRvIGNvbmZpZ3VyZSB0aGUgdmFsdWVzIHJldHVybmVkIGZyb20gdGhlIGl0ZXJhdGlvbiAoaW1wbGljaXQgaW4gdGhlIGNhbGwgdG8KLWBsaXN0YCksIHdlIG5lZWQgdG8gY29uZmlndXJlIHRoZSBvYmplY3QgcmV0dXJuZWQgYnkgdGhlIGNhbGwgdG8gYGZvby5pdGVyKClgLgorOmNsYXNzOmBsaXN0YCksIHdlIG5lZWQgdG8gY29uZmlndXJlIHRoZSBvYmplY3QgcmV0dXJuZWQgYnkgdGhlIGNhbGwgdG8gYGBmb28uaXRlcigpYGAuCiAKICAgICA+Pj4gbW9ja19mb28gPSBNYWdpY01vY2soKQogICAgID4+PiBtb2NrX2Zvby5pdGVyLnJldHVybl92YWx1ZSA9IGl0ZXIoWzEsIDIsIDNdKQpAQCAtNTg2LDEwICs1OTcsMTAgQEAKIAogSWYgeW91IHdhbnQgc2V2ZXJhbCBwYXRjaGVzIGluIHBsYWNlIGZvciBtdWx0aXBsZSB0ZXN0IG1ldGhvZHMgdGhlIG9idmlvdXMgd2F5CiBpcyB0byBhcHBseSB0aGUgcGF0Y2ggZGVjb3JhdG9ycyB0byBldmVyeSBtZXRob2QuIFRoaXMgY2FuIGZlZWwgbGlrZSB1bm5lY2Vzc2FyeQotcmVwZXRpdGlvbi4gRm9yIFB5dGhvbiAyLjYgb3IgbW9yZSByZWNlbnQgeW91IGNhbiB1c2UgYHBhdGNoYCAoaW4gYWxsIGl0cworcmVwZXRpdGlvbi4gRm9yIFB5dGhvbiAyLjYgb3IgbW9yZSByZWNlbnQgeW91IGNhbiB1c2UgOmZ1bmM6YHBhdGNoYCAoaW4gYWxsIGl0cwogdmFyaW91cyBmb3JtcykgYXMgYSBjbGFzcyBkZWNvcmF0b3IuIFRoaXMgYXBwbGllcyB0aGUgcGF0Y2hlcyB0byBhbGwgdGVzdAogbWV0aG9kcyBvbiB0aGUgY2xhc3MuIEEgdGVzdCBtZXRob2QgaXMgaWRlbnRpZmllZCBieSBtZXRob2RzIHdob3NlIG5hbWVzIHN0YXJ0Ci13aXRoIGB0ZXN0YDoKK3dpdGggYGB0ZXN0YGA6CiAKICAgICA+Pj4gQHBhdGNoKCdteW1vZHVsZS5Tb21lQ2xhc3MnKQogICAgIC4uLiBjbGFzcyBNeVRlc3QoVGVzdENhc2UpOgpAQCAtNjA5LDcgKzYyMCw3IEBACiAgICAgJ3NvbWV0aGluZycKIAogQW4gYWx0ZXJuYXRpdmUgd2F5IG9mIG1hbmFnaW5nIHBhdGNoZXMgaXMgdG8gdXNlIHRoZSA6cmVmOmBzdGFydC1hbmQtc3RvcGAuCi1UaGVzZSBhbGxvdyB5b3UgdG8gbW92ZSB0aGUgcGF0Y2hpbmcgaW50byB5b3VyIGBzZXRVcGAgYW5kIGB0ZWFyRG93bmAgbWV0aG9kcy4KK1RoZXNlIGFsbG93IHlvdSB0byBtb3ZlIHRoZSBwYXRjaGluZyBpbnRvIHlvdXIgYGBzZXRVcGBgIGFuZCBgYHRlYXJEb3duYGAgbWV0aG9kcy4KIAogICAgID4+PiBjbGFzcyBNeVRlc3QoVGVzdENhc2UpOgogICAgIC4uLiAgICAgZGVmIHNldFVwKHNlbGYpOgpAQCAtNjI1LDcgKzYzNiw3IEBACiAgICAgPj4+IE15VGVzdCgndGVzdF9mb28nKS5ydW4oKQogCiBJZiB5b3UgdXNlIHRoaXMgdGVjaG5pcXVlIHlvdSBtdXN0IGVuc3VyZSB0aGF0IHRoZSBwYXRjaGluZyBpcyAidW5kb25lIiBieQotY2FsbGluZyBgc3RvcGAuIFRoaXMgY2FuIGJlIGZpZGRsaWVyIHRoYW4geW91IG1pZ2h0IHRoaW5rLCBiZWNhdXNlIGlmIGFuCitjYWxsaW5nIGBgc3RvcGBgLiBUaGlzIGNhbiBiZSBmaWRkbGllciB0aGFuIHlvdSBtaWdodCB0aGluaywgYmVjYXVzZSBpZiBhbgogZXhjZXB0aW9uIGlzIHJhaXNlZCBpbiB0aGUgc2V0VXAgdGhlbiB0ZWFyRG93biBpcyBub3QgY2FsbGVkLgogOm1ldGg6YHVuaXR0ZXN0LlRlc3RDYXNlLmFkZENsZWFudXBgIG1ha2VzIHRoaXMgZWFzaWVyOgogCkBAIC02NTUsMTMgKzY2NiwxMyBAQAogcGF0Y2ggb3V0IG1ldGhvZHMgd2l0aCBhIG1vY2sgdGhhdCBoYXZpbmcgdG8gY3JlYXRlIGEgcmVhbCBmdW5jdGlvbiBiZWNvbWVzIGEKIG51aXNhbmNlLgogCi1JZiB5b3UgcGFzcyBgYXV0b3NwZWM9VHJ1ZWAgdG8gcGF0Y2ggdGhlbiBpdCBkb2VzIHRoZSBwYXRjaGluZyB3aXRoIGEKK0lmIHlvdSBwYXNzIGBgYXV0b3NwZWM9VHJ1ZWBgIHRvIHBhdGNoIHRoZW4gaXQgZG9lcyB0aGUgcGF0Y2hpbmcgd2l0aCBhCiAqcmVhbCogZnVuY3Rpb24gb2JqZWN0LiBUaGlzIGZ1bmN0aW9uIG9iamVjdCBoYXMgdGhlIHNhbWUgc2lnbmF0dXJlIGFzIHRoZSBvbmUKIGl0IGlzIHJlcGxhY2luZywgYnV0IGRlbGVnYXRlcyB0byBhIG1vY2sgdW5kZXIgdGhlIGhvb2QuIFlvdSBzdGlsbCBnZXQgeW91cgogbW9jayBhdXRvLWNyZWF0ZWQgaW4gZXhhY3RseSB0aGUgc2FtZSB3YXkgYXMgYmVmb3JlLiBXaGF0IGl0IG1lYW5zIHRob3VnaCwgaXMKIHRoYXQgaWYgeW91IHVzZSBpdCB0byBwYXRjaCBvdXQgYW4gdW5ib3VuZCBtZXRob2Qgb24gYSBjbGFzcyB0aGUgbW9ja2VkCiBmdW5jdGlvbiB3aWxsIGJlIHR1cm5lZCBpbnRvIGEgYm91bmQgbWV0aG9kIGlmIGl0IGlzIGZldGNoZWQgZnJvbSBhbiBpbnN0YW5jZS4KLUl0IHdpbGwgaGF2ZSBgc2VsZmAgcGFzc2VkIGluIGFzIHRoZSBmaXJzdCBhcmd1bWVudCwgd2hpY2ggaXMgZXhhY3RseSB3aGF0IEkKK0l0IHdpbGwgaGF2ZSBgYHNlbGZgYCBwYXNzZWQgaW4gYXMgdGhlIGZpcnN0IGFyZ3VtZW50LCB3aGljaCBpcyBleGFjdGx5IHdoYXQgSQogd2FudGVkOgogCiAgICAgPj4+IGNsYXNzIEZvbzoKQEAgLTY3Niw4ICs2ODcsOCBAQAogICAgICdmb28nCiAgICAgPj4+IG1vY2tfZm9vLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKGZvbykKIAotSWYgd2UgZG9uJ3QgdXNlIGBhdXRvc3BlYz1UcnVlYCB0aGVuIHRoZSB1bmJvdW5kIG1ldGhvZCBpcyBwYXRjaGVkIG91dAotd2l0aCBhIE1vY2sgaW5zdGFuY2UgaW5zdGVhZCwgYW5kIGlzbid0IGNhbGxlZCB3aXRoIGBzZWxmYC4KK0lmIHdlIGRvbid0IHVzZSBgYGF1dG9zcGVjPVRydWVgYCB0aGVuIHRoZSB1bmJvdW5kIG1ldGhvZCBpcyBwYXRjaGVkIG91dAord2l0aCBhIE1vY2sgaW5zdGFuY2UgaW5zdGVhZCwgYW5kIGlzbid0IGNhbGxlZCB3aXRoIGBgc2VsZmBgLgogCiAKIENoZWNraW5nIG11bHRpcGxlIGNhbGxzIHdpdGggbW9jawpAQCAtNzAxLDcgKzcxMiw3IEBACiAgICAgICAgIC4uLgogICAgIEFzc2VydGlvbkVycm9yOiBFeHBlY3RlZCB0byBiZSBjYWxsZWQgb25jZS4gQ2FsbGVkIDIgdGltZXMuCiAKLUJvdGggYGFzc2VydF9jYWxsZWRfd2l0aGAgYW5kIGBhc3NlcnRfY2FsbGVkX29uY2Vfd2l0aGAgbWFrZSBhc3NlcnRpb25zIGFib3V0CitCb3RoIGBgYXNzZXJ0X2NhbGxlZF93aXRoYGAgYW5kIGBgYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGhgYCBtYWtlIGFzc2VydGlvbnMgYWJvdXQKIHRoZSAqbW9zdCByZWNlbnQqIGNhbGwuIElmIHlvdXIgbW9jayBpcyBnb2luZyB0byBiZSBjYWxsZWQgc2V2ZXJhbCB0aW1lcywgYW5kCiB5b3Ugd2FudCB0byBtYWtlIGFzc2VydGlvbnMgYWJvdXQgKmFsbCogdGhvc2UgY2FsbHMgeW91IGNhbiB1c2UKIDphdHRyOmB+TW9jay5jYWxsX2FyZ3NfbGlzdGA6CkBAIC03MTQsOCArNzI1LDggQEAKICAgICBbY2FsbCgxLCAyLCAzKSwgY2FsbCg0LCA1LCA2KSwgY2FsbCgpXQogCiBUaGUgOmRhdGE6YGNhbGxgIGhlbHBlciBtYWtlcyBpdCBlYXN5IHRvIG1ha2UgYXNzZXJ0aW9ucyBhYm91dCB0aGVzZSBjYWxscy4gWW91Ci1jYW4gYnVpbGQgdXAgYSBsaXN0IG9mIGV4cGVjdGVkIGNhbGxzIGFuZCBjb21wYXJlIGl0IHRvIGBjYWxsX2FyZ3NfbGlzdGAuIFRoaXMKLWxvb2tzIHJlbWFya2FibHkgc2ltaWxhciB0byB0aGUgcmVwciBvZiB0aGUgYGNhbGxfYXJnc19saXN0YDoKK2NhbiBidWlsZCB1cCBhIGxpc3Qgb2YgZXhwZWN0ZWQgY2FsbHMgYW5kIGNvbXBhcmUgaXQgdG8gYGBjYWxsX2FyZ3NfbGlzdGBgLiBUaGlzCitsb29rcyByZW1hcmthYmx5IHNpbWlsYXIgdG8gdGhlIHJlcHIgb2YgdGhlIGBgY2FsbF9hcmdzX2xpc3RgYDoKIAogICAgID4+PiBleHBlY3RlZCA9IFtjYWxsKDEsIDIsIDMpLCBjYWxsKDQsIDUsIDYpLCBjYWxsKCldCiAgICAgPj4+IG1vY2suY2FsbF9hcmdzX2xpc3QgPT0gZXhwZWN0ZWQKQEAgLTcyNiw3ICs3MzcsNyBAQAogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KIAogQW5vdGhlciBzaXR1YXRpb24gaXMgcmFyZSwgYnV0IGNhbiBiaXRlIHlvdSwgaXMgd2hlbiB5b3VyIG1vY2sgaXMgY2FsbGVkIHdpdGgKLW11dGFibGUgYXJndW1lbnRzLiBgY2FsbF9hcmdzYCBhbmQgYGNhbGxfYXJnc19saXN0YCBzdG9yZSAqcmVmZXJlbmNlcyogdG8gdGhlCittdXRhYmxlIGFyZ3VtZW50cy4gYGBjYWxsX2FyZ3NgYCBhbmQgYGBjYWxsX2FyZ3NfbGlzdGBgIHN0b3JlICpyZWZlcmVuY2VzKiB0byB0aGUKIGFyZ3VtZW50cy4gSWYgdGhlIGFyZ3VtZW50cyBhcmUgbXV0YXRlZCBieSB0aGUgY29kZSB1bmRlciB0ZXN0IHRoZW4geW91IGNhbiBubwogbG9uZ2VyIG1ha2UgYXNzZXJ0aW9ucyBhYm91dCB3aGF0IHRoZSB2YWx1ZXMgd2VyZSB3aGVuIHRoZSBtb2NrIHdhcyBjYWxsZWQuCiAKQEAgLTc0MSwyOCArNzUyLDI4IEBACiAgICAgICAgIGZyb2IodmFsKQogICAgICAgICB2YWwuY2xlYXIoKQogCi1XaGVuIHdlIHRyeSB0byB0ZXN0IHRoYXQgYGdyb2JgIGNhbGxzIGBmcm9iYCB3aXRoIHRoZSBjb3JyZWN0IGFyZ3VtZW50IGxvb2sKK1doZW4gd2UgdHJ5IHRvIHRlc3QgdGhhdCBgYGdyb2JgYCBjYWxscyBgYGZyb2JgYCB3aXRoIHRoZSBjb3JyZWN0IGFyZ3VtZW50IGxvb2sKIHdoYXQgaGFwcGVuczoKIAogICAgID4+PiB3aXRoIHBhdGNoKCdteW1vZHVsZS5mcm9iJykgYXMgbW9ja19mcm9iOgotICAgIC4uLiAgICAgdmFsID0gc2V0KFs2XSkKKyAgICAuLi4gICAgIHZhbCA9IHs2fQogICAgIC4uLiAgICAgbXltb2R1bGUuZ3JvYih2YWwpCiAgICAgLi4uCiAgICAgPj4+IHZhbAotICAgIHNldChbXSkKLSAgICA+Pj4gbW9ja19mcm9iLmFzc2VydF9jYWxsZWRfd2l0aChzZXQoWzZdKSkKKyAgICBzZXQoKQorICAgID4+PiBtb2NrX2Zyb2IuYXNzZXJ0X2NhbGxlZF93aXRoKHs2fSkKICAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CiAgICAgICAgIC4uLgotICAgIEFzc2VydGlvbkVycm9yOiBFeHBlY3RlZDogKChzZXQoWzZdKSwpLCB7fSkKLSAgICBDYWxsZWQgd2l0aDogKChzZXQoW10pLCksIHt9KQorICAgIEFzc2VydGlvbkVycm9yOiBFeHBlY3RlZDogKCh7Nn0sKSwge30pCisgICAgQ2FsbGVkIHdpdGg6ICgoc2V0KCksKSwge30pCiAKIE9uZSBwb3NzaWJpbGl0eSB3b3VsZCBiZSBmb3IgbW9jayB0byBjb3B5IHRoZSBhcmd1bWVudHMgeW91IHBhc3MgaW4uIFRoaXMKIGNvdWxkIHRoZW4gY2F1c2UgcHJvYmxlbXMgaWYgeW91IGRvIGFzc2VydGlvbnMgdGhhdCByZWx5IG9uIG9iamVjdCBpZGVudGl0eQogZm9yIGVxdWFsaXR5LgogCiBIZXJlJ3Mgb25lIHNvbHV0aW9uIHRoYXQgdXNlcyB0aGUgOmF0dHI6YHNpZGVfZWZmZWN0YAotZnVuY3Rpb25hbGl0eS4gSWYgeW91IHByb3ZpZGUgYSBgc2lkZV9lZmZlY3RgIGZ1bmN0aW9uIGZvciBhIG1vY2sgdGhlbgotYHNpZGVfZWZmZWN0YCB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZSBzYW1lIGFyZ3MgYXMgdGhlIG1vY2suIFRoaXMgZ2l2ZXMgdXMgYW4KK2Z1bmN0aW9uYWxpdHkuIElmIHlvdSBwcm92aWRlIGEgYGBzaWRlX2VmZmVjdGBgIGZ1bmN0aW9uIGZvciBhIG1vY2sgdGhlbgorYGBzaWRlX2VmZmVjdGBgIHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlIHNhbWUgYXJncyBhcyB0aGUgbW9jay4gVGhpcyBnaXZlcyB1cyBhbgogb3Bwb3J0dW5pdHkgdG8gY29weSB0aGUgYXJndW1lbnRzIGFuZCBzdG9yZSB0aGVtIGZvciBsYXRlciBhc3NlcnRpb25zLiBJbiB0aGlzCiBleGFtcGxlIEknbSB1c2luZyAqYW5vdGhlciogbW9jayB0byBzdG9yZSB0aGUgYXJndW1lbnRzIHNvIHRoYXQgSSBjYW4gdXNlIHRoZQogbW9jayBtZXRob2RzIGZvciBkb2luZyB0aGUgYXNzZXJ0aW9uLiBBZ2FpbiBhIGhlbHBlciBmdW5jdGlvbiBzZXRzIHRoaXMgdXAgZm9yCkBAIC03ODIsMzUgKzc5MywzNSBAQAogICAgIC4uLgogICAgID4+PiB3aXRoIHBhdGNoKCdteW1vZHVsZS5mcm9iJykgYXMgbW9ja19mcm9iOgogICAgIC4uLiAgICAgbmV3X21vY2sgPSBjb3B5X2NhbGxfYXJncyhtb2NrX2Zyb2IpCi0gICAgLi4uICAgICB2YWwgPSBzZXQoWzZdKQorICAgIC4uLiAgICAgdmFsID0gezZ9CiAgICAgLi4uICAgICBteW1vZHVsZS5ncm9iKHZhbCkKICAgICAuLi4KLSAgICA+Pj4gbmV3X21vY2suYXNzZXJ0X2NhbGxlZF93aXRoKHNldChbNl0pKQorICAgID4+PiBuZXdfbW9jay5hc3NlcnRfY2FsbGVkX3dpdGgoezZ9KQogICAgID4+PiBuZXdfbW9jay5jYWxsX2FyZ3MKLSAgICBjYWxsKHNldChbNl0pKQorICAgIGNhbGwoezZ9KQogCi1gY29weV9jYWxsX2FyZ3NgIGlzIGNhbGxlZCB3aXRoIHRoZSBtb2NrIHRoYXQgd2lsbCBiZSBjYWxsZWQuIEl0IHJldHVybnMgYSBuZXcKLW1vY2sgdGhhdCB3ZSBkbyB0aGUgYXNzZXJ0aW9uIG9uLiBUaGUgYHNpZGVfZWZmZWN0YCBmdW5jdGlvbiBtYWtlcyBhIGNvcHkgb2YKLXRoZSBhcmdzIGFuZCBjYWxscyBvdXIgYG5ld19tb2NrYCB3aXRoIHRoZSBjb3B5LgorYGBjb3B5X2NhbGxfYXJnc2BgIGlzIGNhbGxlZCB3aXRoIHRoZSBtb2NrIHRoYXQgd2lsbCBiZSBjYWxsZWQuIEl0IHJldHVybnMgYSBuZXcKK21vY2sgdGhhdCB3ZSBkbyB0aGUgYXNzZXJ0aW9uIG9uLiBUaGUgYGBzaWRlX2VmZmVjdGBgIGZ1bmN0aW9uIG1ha2VzIGEgY29weSBvZgordGhlIGFyZ3MgYW5kIGNhbGxzIG91ciBgYG5ld19tb2NrYGAgd2l0aCB0aGUgY29weS4KIAogLi4gbm90ZTo6CiAKICAgICBJZiB5b3VyIG1vY2sgaXMgb25seSBnb2luZyB0byBiZSB1c2VkIG9uY2UgdGhlcmUgaXMgYW4gZWFzaWVyIHdheSBvZgogICAgIGNoZWNraW5nIGFyZ3VtZW50cyBhdCB0aGUgcG9pbnQgdGhleSBhcmUgY2FsbGVkLiBZb3UgY2FuIHNpbXBseSBkbyB0aGUKLSAgICBjaGVja2luZyBpbnNpZGUgYSBgc2lkZV9lZmZlY3RgIGZ1bmN0aW9uLgorICAgIGNoZWNraW5nIGluc2lkZSBhIGBgc2lkZV9lZmZlY3RgYCBmdW5jdGlvbi4KIAogICAgICAgICA+Pj4gZGVmIHNpZGVfZWZmZWN0KGFyZyk6Ci0gICAgICAgIC4uLiAgICAgYXNzZXJ0IGFyZyA9PSBzZXQoWzZdKQorICAgICAgICAuLi4gICAgIGFzc2VydCBhcmcgPT0gezZ9CiAgICAgICAgIC4uLgogICAgICAgICA+Pj4gbW9jayA9IE1vY2soc2lkZV9lZmZlY3Q9c2lkZV9lZmZlY3QpCi0gICAgICAgID4+PiBtb2NrKHNldChbNl0pKQorICAgICAgICA+Pj4gbW9jayh7Nn0pCiAgICAgICAgID4+PiBtb2NrKHNldCgpKQogICAgICAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CiAgICAgICAgICAgICAuLi4KICAgICAgICAgQXNzZXJ0aW9uRXJyb3IKIAotQW4gYWx0ZXJuYXRpdmUgYXBwcm9hY2ggaXMgdG8gY3JlYXRlIGEgc3ViY2xhc3Mgb2YgYE1vY2tgIG9yIGBNYWdpY01vY2tgIHRoYXQKLWNvcGllcyAodXNpbmcgOmZ1bmM6YGNvcHkuZGVlcGNvcHlgKSB0aGUgYXJndW1lbnRzLgorQW4gYWx0ZXJuYXRpdmUgYXBwcm9hY2ggaXMgdG8gY3JlYXRlIGEgc3ViY2xhc3Mgb2YgOmNsYXNzOmBNb2NrYCBvcgorOmNsYXNzOmBNYWdpY01vY2tgIHRoYXQgY29waWVzICh1c2luZyA6ZnVuYzpgY29weS5kZWVwY29weWApIHRoZSBhcmd1bWVudHMuCiBIZXJlJ3MgYW4gZXhhbXBsZSBpbXBsZW1lbnRhdGlvbjoKIAogICAgID4+PiBmcm9tIGNvcHkgaW1wb3J0IGRlZXBjb3B5CkBAIC04MjgsMTQgKzgzOSwxNCBAQAogICAgID4+PiBjLmFzc2VydF9jYWxsZWRfd2l0aChhcmcpCiAgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogICAgICAgICAuLi4KLSAgICBBc3NlcnRpb25FcnJvcjogRXhwZWN0ZWQgY2FsbDogbW9jayhzZXQoWzFdKSkKLSAgICBBY3R1YWwgY2FsbDogbW9jayhzZXQoW10pKQorICAgIEFzc2VydGlvbkVycm9yOiBFeHBlY3RlZCBjYWxsOiBtb2NrKHsxfSkKKyAgICBBY3R1YWwgY2FsbDogbW9jayhzZXQoKSkKICAgICA+Pj4gYy5mb28KICAgICA8Q29weWluZ01vY2sgbmFtZT0nbW9jay5mb28nIGlkPScuLi4nPgogCi1XaGVuIHlvdSBzdWJjbGFzcyBgTW9ja2Agb3IgYE1hZ2ljTW9ja2AgYWxsIGR5bmFtaWNhbGx5IGNyZWF0ZWQgYXR0cmlidXRlcywKLWFuZCB0aGUgYHJldHVybl92YWx1ZWAgd2lsbCB1c2UgeW91ciBzdWJjbGFzcyBhdXRvbWF0aWNhbGx5LiBUaGF0IG1lYW5zIGFsbAotY2hpbGRyZW4gb2YgYSBgQ29weWluZ01vY2tgIHdpbGwgYWxzbyBoYXZlIHRoZSB0eXBlIGBDb3B5aW5nTW9ja2AuCitXaGVuIHlvdSBzdWJjbGFzcyBgYE1vY2tgYCBvciBgYE1hZ2ljTW9ja2BgIGFsbCBkeW5hbWljYWxseSBjcmVhdGVkIGF0dHJpYnV0ZXMsCithbmQgdGhlIGBgcmV0dXJuX3ZhbHVlYGAgd2lsbCB1c2UgeW91ciBzdWJjbGFzcyBhdXRvbWF0aWNhbGx5LiBUaGF0IG1lYW5zIGFsbAorY2hpbGRyZW4gb2YgYSBgYENvcHlpbmdNb2NrYGAgd2lsbCBhbHNvIGhhdmUgdGhlIHR5cGUgYGBDb3B5aW5nTW9ja2BgLgogCiAKIE5lc3RpbmcgUGF0Y2hlcwpAQCAtODU5LDkgKzg3MCw5IEBACiAgICAgPj4+IE15VGVzdCgndGVzdF9mb28nKS50ZXN0X2ZvbygpCiAgICAgPj4+IGFzc2VydCBteW1vZHVsZS5Gb28gaXMgb3JpZ2luYWwKIAotV2l0aCB1bml0dGVzdCBgY2xlYW51cGAgZnVuY3Rpb25zIGFuZCB0aGUgOnJlZjpgc3RhcnQtYW5kLXN0b3BgIHdlIGNhbgorV2l0aCB1bml0dGVzdCBgYGNsZWFudXBgYCBmdW5jdGlvbnMgYW5kIHRoZSA6cmVmOmBzdGFydC1hbmQtc3RvcGAgd2UgY2FuCiBhY2hpZXZlIHRoZSBzYW1lIGVmZmVjdCB3aXRob3V0IHRoZSBuZXN0ZWQgaW5kZW50YXRpb24uIEEgc2ltcGxlIGhlbHBlcgotbWV0aG9kLCBgY3JlYXRlX3BhdGNoYCwgcHV0cyB0aGUgcGF0Y2ggaW4gcGxhY2UgYW5kIHJldHVybnMgdGhlIGNyZWF0ZWQgbW9jaworbWV0aG9kLCBgYGNyZWF0ZV9wYXRjaGBgLCBwdXRzIHRoZSBwYXRjaCBpbiBwbGFjZSBhbmQgcmV0dXJucyB0aGUgY3JlYXRlZCBtb2NrCiBmb3IgdXM6CiAKICAgICA+Pj4gY2xhc3MgTXlUZXN0KFRlc3RDYXNlKToKQEAgLTg5NiwxMSArOTA3LDExIEBACiBhbmQgdXNpbmcgOmRhdGE6YH5Nb2NrLnNpZGVfZWZmZWN0YCB0byBkZWxlZ2F0ZSBkaWN0aW9uYXJ5IGFjY2VzcyB0byBhIHJlYWwKIHVuZGVybHlpbmcgZGljdGlvbmFyeSB0aGF0IGlzIHVuZGVyIG91ciBjb250cm9sLgogCi1XaGVuIHRoZSBgX19nZXRpdGVtX19gIGFuZCBgX19zZXRpdGVtX19gIG1ldGhvZHMgb2Ygb3VyIGBNYWdpY01vY2tgIGFyZSBjYWxsZWQKLShub3JtYWwgZGljdGlvbmFyeSBhY2Nlc3MpIHRoZW4gYHNpZGVfZWZmZWN0YCBpcyBjYWxsZWQgd2l0aCB0aGUga2V5IChhbmQgaW4KLXRoZSBjYXNlIG9mIGBfX3NldGl0ZW1fX2AgdGhlIHZhbHVlIHRvbykuIFdlIGNhbiBhbHNvIGNvbnRyb2wgd2hhdCBpcyByZXR1cm5lZC4KK1doZW4gdGhlIDptZXRoOmBfX2dldGl0ZW1fX2AgYW5kIDptZXRoOmBfX3NldGl0ZW1fX2AgbWV0aG9kcyBvZiBvdXIgYGBNYWdpY01vY2tgYCBhcmUgY2FsbGVkCisobm9ybWFsIGRpY3Rpb25hcnkgYWNjZXNzKSB0aGVuIGBgc2lkZV9lZmZlY3RgYCBpcyBjYWxsZWQgd2l0aCB0aGUga2V5IChhbmQgaW4KK3RoZSBjYXNlIG9mIGBgX19zZXRpdGVtX19gYCB0aGUgdmFsdWUgdG9vKS4gV2UgY2FuIGFsc28gY29udHJvbCB3aGF0IGlzIHJldHVybmVkLgogCi1BZnRlciB0aGUgYE1hZ2ljTW9ja2AgaGFzIGJlZW4gdXNlZCB3ZSBjYW4gdXNlIGF0dHJpYnV0ZXMgbGlrZQorQWZ0ZXIgdGhlIGBgTWFnaWNNb2NrYGAgaGFzIGJlZW4gdXNlZCB3ZSBjYW4gdXNlIGF0dHJpYnV0ZXMgbGlrZQogOmRhdGE6YH5Nb2NrLmNhbGxfYXJnc19saXN0YCB0byBhc3NlcnQgYWJvdXQgaG93IHRoZSBkaWN0aW9uYXJ5IHdhcyB1c2VkOgogCiAgICAgPj4+IG15X2RpY3QgPSB7J2EnOiAxLCAnYic6IDIsICdjJzogM30KQEAgLTkxNiwyMyArOTI3LDIzIEBACiAKIC4uIG5vdGU6OgogCi0gICAgQW4gYWx0ZXJuYXRpdmUgdG8gdXNpbmcgYE1hZ2ljTW9ja2AgaXMgdG8gdXNlIGBNb2NrYCBhbmQgKm9ubHkqIHByb3ZpZGUKKyAgICBBbiBhbHRlcm5hdGl2ZSB0byB1c2luZyBgYE1hZ2ljTW9ja2BgIGlzIHRvIHVzZSBgYE1vY2tgYCBhbmQgKm9ubHkqIHByb3ZpZGUKICAgICB0aGUgbWFnaWMgbWV0aG9kcyB5b3Ugc3BlY2lmaWNhbGx5IHdhbnQ6CiAKICAgICAgICAgPj4+IG1vY2sgPSBNb2NrKCkKLSAgICAgICAgPj4+IG1vY2suX19zZXRpdGVtX18gPSBNb2NrKHNpZGVfZWZmZWN0PWdldGl0ZW0pCi0gICAgICAgID4+PiBtb2NrLl9fZ2V0aXRlbV9fID0gTW9jayhzaWRlX2VmZmVjdD1zZXRpdGVtKQorICAgICAgICA+Pj4gbW9jay5fX2dldGl0ZW1fXyA9IE1vY2soc2lkZV9lZmZlY3Q9Z2V0aXRlbSkKKyAgICAgICAgPj4+IG1vY2suX19zZXRpdGVtX18gPSBNb2NrKHNpZGVfZWZmZWN0PXNldGl0ZW0pCiAKLSAgICBBICp0aGlyZCogb3B0aW9uIGlzIHRvIHVzZSBgTWFnaWNNb2NrYCBidXQgcGFzc2luZyBpbiBgZGljdGAgYXMgdGhlIGBzcGVjYAotICAgIChvciBgc3BlY19zZXRgKSBhcmd1bWVudCBzbyB0aGF0IHRoZSBgTWFnaWNNb2NrYCBjcmVhdGVkIG9ubHkgaGFzCisgICAgQSAqdGhpcmQqIG9wdGlvbiBpcyB0byB1c2UgYGBNYWdpY01vY2tgYCBidXQgcGFzc2luZyBpbiBgYGRpY3RgYCBhcyB0aGUgKnNwZWMqCisgICAgKG9yICpzcGVjX3NldCopIGFyZ3VtZW50IHNvIHRoYXQgdGhlIGBgTWFnaWNNb2NrYGAgY3JlYXRlZCBvbmx5IGhhcwogICAgIGRpY3Rpb25hcnkgbWFnaWMgbWV0aG9kcyBhdmFpbGFibGU6CiAKICAgICAgICAgPj4+IG1vY2sgPSBNYWdpY01vY2soc3BlY19zZXQ9ZGljdCkKICAgICAgICAgPj4+IG1vY2suX19nZXRpdGVtX18uc2lkZV9lZmZlY3QgPSBnZXRpdGVtCiAgICAgICAgID4+PiBtb2NrLl9fc2V0aXRlbV9fLnNpZGVfZWZmZWN0ID0gc2V0aXRlbQogCi1XaXRoIHRoZXNlIHNpZGUgZWZmZWN0IGZ1bmN0aW9ucyBpbiBwbGFjZSwgdGhlIGBtb2NrYCB3aWxsIGJlaGF2ZSBsaWtlIGEgbm9ybWFsCi1kaWN0aW9uYXJ5IGJ1dCByZWNvcmRpbmcgdGhlIGFjY2Vzcy4gSXQgZXZlbiByYWlzZXMgYSBgS2V5RXJyb3JgIGlmIHlvdSB0cnkKK1dpdGggdGhlc2Ugc2lkZSBlZmZlY3QgZnVuY3Rpb25zIGluIHBsYWNlLCB0aGUgYGBtb2NrYGAgd2lsbCBiZWhhdmUgbGlrZSBhIG5vcm1hbAorZGljdGlvbmFyeSBidXQgcmVjb3JkaW5nIHRoZSBhY2Nlc3MuIEl0IGV2ZW4gcmFpc2VzIGEgOmV4YzpgS2V5RXJyb3JgIGlmIHlvdSB0cnkKIHRvIGFjY2VzcyBhIGtleSB0aGF0IGRvZXNuJ3QgZXhpc3QuCiAKICAgICA+Pj4gbW9ja1snYSddCkBAIC05NjQsOCArOTc1LDggQEAKIE1vY2sgc3ViY2xhc3NlcyBhbmQgdGhlaXIgYXR0cmlidXRlcwogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CiAKLVRoZXJlIGFyZSB2YXJpb3VzIHJlYXNvbnMgd2h5IHlvdSBtaWdodCB3YW50IHRvIHN1YmNsYXNzIGBNb2NrYC4gT25lIHJlYXNvbgotbWlnaHQgYmUgdG8gYWRkIGhlbHBlciBtZXRob2RzLiBIZXJlJ3MgYSBzaWxseSBleGFtcGxlOgorVGhlcmUgYXJlIHZhcmlvdXMgcmVhc29ucyB3aHkgeW91IG1pZ2h0IHdhbnQgdG8gc3ViY2xhc3MgOmNsYXNzOmBNb2NrYC4gT25lCityZWFzb24gbWlnaHQgYmUgdG8gYWRkIGhlbHBlciBtZXRob2RzLiBIZXJlJ3MgYSBzaWxseSBleGFtcGxlOgogCiAgICAgPj4+IGNsYXNzIE15TW9jayhNYWdpY01vY2spOgogICAgIC4uLiAgICAgZGVmIGhhc19iZWVuX2NhbGxlZChzZWxmKToKQEAgLTk4MCw5ICs5OTEsOSBAQAogICAgID4+PiBteW1vY2suaGFzX2JlZW5fY2FsbGVkKCkKICAgICBUcnVlCiAKLVRoZSBzdGFuZGFyZCBiZWhhdmlvdXIgZm9yIGBNb2NrYCBpbnN0YW5jZXMgaXMgdGhhdCBhdHRyaWJ1dGVzIGFuZCB0aGUgcmV0dXJuCitUaGUgc3RhbmRhcmQgYmVoYXZpb3VyIGZvciBgYE1vY2tgYCBpbnN0YW5jZXMgaXMgdGhhdCBhdHRyaWJ1dGVzIGFuZCB0aGUgcmV0dXJuCiB2YWx1ZSBtb2NrcyBhcmUgb2YgdGhlIHNhbWUgdHlwZSBhcyB0aGUgbW9jayB0aGV5IGFyZSBhY2Nlc3NlZCBvbi4gVGhpcyBlbnN1cmVzCi10aGF0IGBNb2NrYCBhdHRyaWJ1dGVzIGFyZSBgTW9ja3NgIGFuZCBgTWFnaWNNb2NrYCBhdHRyaWJ1dGVzIGFyZSBgTWFnaWNNb2Nrc2AKK3RoYXQgYGBNb2NrYGAgYXR0cmlidXRlcyBhcmUgYGBNb2Nrc2BgIGFuZCBgYE1hZ2ljTW9ja2BgIGF0dHJpYnV0ZXMgYXJlIGBgTWFnaWNNb2Nrc2BgCiBbI11fLiBTbyBpZiB5b3UncmUgc3ViY2xhc3NpbmcgdG8gYWRkIGhlbHBlciBtZXRob2RzIHRoZW4gdGhleSdsbCBhbHNvIGJlCiBhdmFpbGFibGUgb24gdGhlIGF0dHJpYnV0ZXMgYW5kIHJldHVybiB2YWx1ZSBtb2NrIG9mIGluc3RhbmNlcyBvZiB5b3VyCiBzdWJjbGFzcy4KQEAgLTEwMDIsMTAgKzEwMTMsMTAgQEAKIDxodHRwOi8vdHdpc3RlZG1hdHJpeC5jb20vZG9jdW1lbnRzLzExLjAuMC9hcGkvdHdpc3RlZC5weXRob24uY29tcG9uZW50cy5odG1sPmBfLgogSGF2aW5nIHRoaXMgYXBwbGllZCB0byBhdHRyaWJ1dGVzIHRvbyBhY3R1YWxseSBjYXVzZXMgZXJyb3JzLgogCi1gTW9ja2AgKGluIGFsbCBpdHMgZmxhdm91cnMpIHVzZXMgYSBtZXRob2QgY2FsbGVkIGBfZ2V0X2NoaWxkX21vY2tgIHRvIGNyZWF0ZQorYGBNb2NrYGAgKGluIGFsbCBpdHMgZmxhdm91cnMpIHVzZXMgYSBtZXRob2QgY2FsbGVkIGBgX2dldF9jaGlsZF9tb2NrYGAgdG8gY3JlYXRlCiB0aGVzZSAic3ViLW1vY2tzIiBmb3IgYXR0cmlidXRlcyBhbmQgcmV0dXJuIHZhbHVlcy4gWW91IGNhbiBwcmV2ZW50IHlvdXIKIHN1YmNsYXNzIGJlaW5nIHVzZWQgZm9yIGF0dHJpYnV0ZXMgYnkgb3ZlcnJpZGluZyB0aGlzIG1ldGhvZC4gVGhlIHNpZ25hdHVyZSBpcwotdGhhdCBpdCB0YWtlcyBhcmJpdHJhcnkga2V5d29yZCBhcmd1bWVudHMgKGAqKmt3YXJnc2ApIHdoaWNoIGFyZSB0aGVuIHBhc3NlZAordGhhdCBpdCB0YWtlcyBhcmJpdHJhcnkga2V5d29yZCBhcmd1bWVudHMgKGBgKiprd2FyZ3NgYCkgd2hpY2ggYXJlIHRoZW4gcGFzc2VkCiBvbnRvIHRoZSBtb2NrIGNvbnN0cnVjdG9yOgogCiAgICAgPj4+IGNsYXNzIFN1YmNsYXNzKE1hZ2ljTW9jayk6CkBAIC0xMDM4LDE3ICsxMDQ5LDE3IEBACiBpbXBvcnQgKHN0b3JlIHRoZSBtb2R1bGUgYXMgYSBjbGFzcyBvciBtb2R1bGUgYXR0cmlidXRlIGFuZCBvbmx5IGRvIHRoZSBpbXBvcnQKIG9uIGZpcnN0IHVzZSkuCiAKLVRoYXQgYXNpZGUgdGhlcmUgaXMgYSB3YXkgdG8gdXNlIGBtb2NrYCB0byBhZmZlY3QgdGhlIHJlc3VsdHMgb2YgYW4gaW1wb3J0LgotSW1wb3J0aW5nIGZldGNoZXMgYW4gKm9iamVjdCogZnJvbSB0aGUgYHN5cy5tb2R1bGVzYCBkaWN0aW9uYXJ5LiBOb3RlIHRoYXQgaXQKK1RoYXQgYXNpZGUgdGhlcmUgaXMgYSB3YXkgdG8gdXNlIGBgbW9ja2BgIHRvIGFmZmVjdCB0aGUgcmVzdWx0cyBvZiBhbiBpbXBvcnQuCitJbXBvcnRpbmcgZmV0Y2hlcyBhbiAqb2JqZWN0KiBmcm9tIHRoZSA6ZGF0YTpgc3lzLm1vZHVsZXNgIGRpY3Rpb25hcnkuIE5vdGUgdGhhdCBpdAogZmV0Y2hlcyBhbiAqb2JqZWN0Kiwgd2hpY2ggbmVlZCBub3QgYmUgYSBtb2R1bGUuIEltcG9ydGluZyBhIG1vZHVsZSBmb3IgdGhlCiBmaXJzdCB0aW1lIHJlc3VsdHMgaW4gYSBtb2R1bGUgb2JqZWN0IGJlaW5nIHB1dCBpbiBgc3lzLm1vZHVsZXNgLCBzbyB1c3VhbGx5CiB3aGVuIHlvdSBpbXBvcnQgc29tZXRoaW5nIHlvdSBnZXQgYSBtb2R1bGUgYmFjay4gVGhpcyBuZWVkIG5vdCBiZSB0aGUgY2FzZQogaG93ZXZlci4KIAogVGhpcyBtZWFucyB5b3UgY2FuIHVzZSA6ZnVuYzpgcGF0Y2guZGljdGAgdG8gKnRlbXBvcmFyaWx5KiBwdXQgYSBtb2NrIGluIHBsYWNlCi1pbiBgc3lzLm1vZHVsZXNgLiBBbnkgaW1wb3J0cyB3aGlsc3QgdGhpcyBwYXRjaCBpcyBhY3RpdmUgd2lsbCBmZXRjaCB0aGUgbW9jay4KK2luIDpkYXRhOmBzeXMubW9kdWxlc2AuIEFueSBpbXBvcnRzIHdoaWxzdCB0aGlzIHBhdGNoIGlzIGFjdGl2ZSB3aWxsIGZldGNoIHRoZSBtb2NrLgogV2hlbiB0aGUgcGF0Y2ggaXMgY29tcGxldGUgKHRoZSBkZWNvcmF0ZWQgZnVuY3Rpb24gZXhpdHMsIHRoZSB3aXRoIHN0YXRlbWVudAotYm9keSBpcyBjb21wbGV0ZSBvciBgcGF0Y2hlci5zdG9wKClgIGlzIGNhbGxlZCkgdGhlbiB3aGF0ZXZlciB3YXMgdGhlcmUKK2JvZHkgaXMgY29tcGxldGUgb3IgYGBwYXRjaGVyLnN0b3AoKWBgIGlzIGNhbGxlZCkgdGhlbiB3aGF0ZXZlciB3YXMgdGhlcmUKIHByZXZpb3VzbHkgd2lsbCBiZSByZXN0b3JlZCBzYWZlbHkuCiAKIEhlcmUncyBhbiBleGFtcGxlIHRoYXQgbW9ja3Mgb3V0IHRoZSAnZm9vYmxlJyBtb2R1bGUuCkBAIC0xMDYyLDEwICsxMDczLDEwIEBACiAgICAgPj4+IGFzc2VydCAnZm9vYmxlJyBub3QgaW4gc3lzLm1vZHVsZXMKICAgICA+Pj4gbW9jay5ibG9iLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKCkKIAotQXMgeW91IGNhbiBzZWUgdGhlIGBpbXBvcnQgZm9vYmxlYCBzdWNjZWVkcywgYnV0IG9uIGV4aXQgdGhlcmUgaXMgbm8gJ2Zvb2JsZScKLWxlZnQgaW4gYHN5cy5tb2R1bGVzYC4KK0FzIHlvdSBjYW4gc2VlIHRoZSBgYGltcG9ydCBmb29ibGVgYCBzdWNjZWVkcywgYnV0IG9uIGV4aXQgdGhlcmUgaXMgbm8gJ2Zvb2JsZScKK2xlZnQgaW4gOmRhdGE6YHN5cy5tb2R1bGVzYC4KIAotVGhpcyBhbHNvIHdvcmtzIGZvciB0aGUgYGZyb20gbW9kdWxlIGltcG9ydCBuYW1lYCBmb3JtOgorVGhpcyBhbHNvIHdvcmtzIGZvciB0aGUgYGBmcm9tIG1vZHVsZSBpbXBvcnQgbmFtZWBgIGZvcm06CiAKICAgICA+Pj4gbW9jayA9IE1vY2soKQogICAgID4+PiB3aXRoIHBhdGNoLmRpY3QoJ3N5cy5tb2R1bGVzJywgeydmb29ibGUnOiBtb2NrfSk6CkBAIC0xMDk1LDEwICsxMTA2LDEwIEBACiBkb2Vzbid0IGFsbG93IHlvdSB0byB0cmFjayB0aGUgb3JkZXIgb2YgY2FsbHMgYmV0d2VlbiBzZXBhcmF0ZSBtb2NrIG9iamVjdHMsCiBob3dldmVyIHdlIGNhbiB1c2UgOmF0dHI6YH5Nb2NrLm1vY2tfY2FsbHNgIHRvIGFjaGlldmUgdGhlIHNhbWUgZWZmZWN0LgogCi1CZWNhdXNlIG1vY2tzIHRyYWNrIGNhbGxzIHRvIGNoaWxkIG1vY2tzIGluIGBtb2NrX2NhbGxzYCwgYW5kIGFjY2Vzc2luZyBhbgorQmVjYXVzZSBtb2NrcyB0cmFjayBjYWxscyB0byBjaGlsZCBtb2NrcyBpbiBgYG1vY2tfY2FsbHNgYCwgYW5kIGFjY2Vzc2luZyBhbgogYXJiaXRyYXJ5IGF0dHJpYnV0ZSBvZiBhIG1vY2sgY3JlYXRlcyBhIGNoaWxkIG1vY2ssIHdlIGNhbiBjcmVhdGUgb3VyIHNlcGFyYXRlCiBtb2NrcyBmcm9tIGEgcGFyZW50IG9uZS4gQ2FsbHMgdG8gdGhvc2UgY2hpbGQgbW9jayB3aWxsIHRoZW4gYWxsIGJlIHJlY29yZGVkLAotaW4gb3JkZXIsIGluIHRoZSBgbW9ja19jYWxsc2Agb2YgdGhlIHBhcmVudDoKK2luIG9yZGVyLCBpbiB0aGUgYGBtb2NrX2NhbGxzYGAgb2YgdGhlIHBhcmVudDoKIAogICAgID4+PiBtYW5hZ2VyID0gTW9jaygpCiAgICAgPj4+IG1vY2tfZm9vID0gbWFuYWdlci5mb28KQEAgLTExMTMsMTUgKzExMjQsMTUgQEAKICAgICBbY2FsbC5mb28uc29tZXRoaW5nKCksIGNhbGwuYmFyLm90aGVyLnRoaW5nKCldCiAKIFdlIGNhbiB0aGVuIGFzc2VydCBhYm91dCB0aGUgY2FsbHMsIGluY2x1ZGluZyB0aGUgb3JkZXIsIGJ5IGNvbXBhcmluZyB3aXRoCi10aGUgYG1vY2tfY2FsbHNgIGF0dHJpYnV0ZSBvbiB0aGUgbWFuYWdlciBtb2NrOgordGhlIGBgbW9ja19jYWxsc2BgIGF0dHJpYnV0ZSBvbiB0aGUgbWFuYWdlciBtb2NrOgogCiAgICAgPj4+IGV4cGVjdGVkX2NhbGxzID0gW2NhbGwuZm9vLnNvbWV0aGluZygpLCBjYWxsLmJhci5vdGhlci50aGluZygpXQogICAgID4+PiBtYW5hZ2VyLm1vY2tfY2FsbHMgPT0gZXhwZWN0ZWRfY2FsbHMKICAgICBUcnVlCiAKLUlmIGBwYXRjaGAgaXMgY3JlYXRpbmcsIGFuZCBwdXR0aW5nIGluIHBsYWNlLCB5b3VyIG1vY2tzIHRoZW4geW91IGNhbiBhdHRhY2gKK0lmIGBgcGF0Y2hgYCBpcyBjcmVhdGluZywgYW5kIHB1dHRpbmcgaW4gcGxhY2UsIHlvdXIgbW9ja3MgdGhlbiB5b3UgY2FuIGF0dGFjaAogdGhlbSB0byBhIG1hbmFnZXIgbW9jayB1c2luZyB0aGUgOm1ldGg6YH5Nb2NrLmF0dGFjaF9tb2NrYCBtZXRob2QuIEFmdGVyCi1hdHRhY2hpbmcgY2FsbHMgd2lsbCBiZSByZWNvcmRlZCBpbiBgbW9ja19jYWxsc2Agb2YgdGhlIG1hbmFnZXIuCithdHRhY2hpbmcgY2FsbHMgd2lsbCBiZSByZWNvcmRlZCBpbiBgYG1vY2tfY2FsbHNgYCBvZiB0aGUgbWFuYWdlci4KIAogICAgID4+PiBtYW5hZ2VyID0gTWFnaWNNb2NrKCkKICAgICA+Pj4gd2l0aCBwYXRjaCgnbXltb2R1bGUuQ2xhc3MxJykgYXMgTW9ja0NsYXNzMToKQEAgLTExNTMsMTIgKzExNjQsMTIgQEAKICAgICA+Pj4gY2FsbHMgPSBjYWxsLm9uZSgpLnR3bygpLnRocmVlKCkuY2FsbF9saXN0KCkKICAgICA+Pj4gbS5hc3NlcnRfaGFzX2NhbGxzKGNhbGxzKQogCi1FdmVuIHRob3VnaCB0aGUgY2hhaW5lZCBjYWxsIGBtLm9uZSgpLnR3bygpLnRocmVlKClgIGFyZW4ndCB0aGUgb25seSBjYWxscyB0aGF0CitFdmVuIHRob3VnaCB0aGUgY2hhaW5lZCBjYWxsIGBgbS5vbmUoKS50d28oKS50aHJlZSgpYGAgYXJlbid0IHRoZSBvbmx5IGNhbGxzIHRoYXQKIGhhdmUgYmVlbiBtYWRlIHRvIHRoZSBtb2NrLCB0aGUgYXNzZXJ0IHN0aWxsIHN1Y2NlZWRzLgogCiBTb21ldGltZXMgYSBtb2NrIG1heSBoYXZlIHNldmVyYWwgY2FsbHMgbWFkZSB0byBpdCwgYW5kIHlvdSBhcmUgb25seSBpbnRlcmVzdGVkCiBpbiBhc3NlcnRpbmcgYWJvdXQgKnNvbWUqIG9mIHRob3NlIGNhbGxzLiBZb3UgbWF5IG5vdCBldmVuIGNhcmUgYWJvdXQgdGhlCi1vcmRlci4gSW4gdGhpcyBjYXNlIHlvdSBjYW4gcGFzcyBgYW55X29yZGVyPVRydWVgIHRvIGBhc3NlcnRfaGFzX2NhbGxzYDoKK29yZGVyLiBJbiB0aGlzIGNhc2UgeW91IGNhbiBwYXNzIGBgYW55X29yZGVyPVRydWVgYCB0byBgYGFzc2VydF9oYXNfY2FsbHNgYDoKIAogICAgID4+PiBtID0gTWFnaWNNb2NrKCkKICAgICA+Pj4gbSgxKSwgbS50d28oMiwgMyksIG0uc2V2ZW4oNyksIG0uZmlmdHkoJzUwJykKQEAgLTExODAsNyArMTE5MSw3IEBACiBvZiB0aGlzIG9iamVjdCB0aGVuIHdlIGNhbiBjcmVhdGUgYSBtYXRjaGVyIHRoYXQgd2lsbCBjaGVjayB0aGVzZSBhdHRyaWJ1dGVzCiBmb3IgdXMuCiAKLVlvdSBjYW4gc2VlIGluIHRoaXMgZXhhbXBsZSBob3cgYSAnc3RhbmRhcmQnIGNhbGwgdG8gYGFzc2VydF9jYWxsZWRfd2l0aGAgaXNuJ3QKK1lvdSBjYW4gc2VlIGluIHRoaXMgZXhhbXBsZSBob3cgYSAnc3RhbmRhcmQnIGNhbGwgdG8gYGBhc3NlcnRfY2FsbGVkX3dpdGhgYCBpc24ndAogc3VmZmljaWVudDoKIAogICAgID4+PiBjbGFzcyBGb286CkBAIC0xMTk1LDcgKzEyMDYsNyBAQAogICAgIEFzc2VydGlvbkVycm9yOiBFeHBlY3RlZDogY2FsbCg8X19tYWluX18uRm9vIG9iamVjdCBhdCAweC4uLj4pCiAgICAgQWN0dWFsIGNhbGw6IGNhbGwoPF9fbWFpbl9fLkZvbyBvYmplY3QgYXQgMHguLi4+KQogCi1BIGNvbXBhcmlzb24gZnVuY3Rpb24gZm9yIG91ciBgRm9vYCBjbGFzcyBtaWdodCBsb29rIHNvbWV0aGluZyBsaWtlIHRoaXM6CitBIGNvbXBhcmlzb24gZnVuY3Rpb24gZm9yIG91ciBgYEZvb2BgIGNsYXNzIG1pZ2h0IGxvb2sgc29tZXRoaW5nIGxpa2UgdGhpczoKIAogICAgID4+PiBkZWYgY29tcGFyZShzZWxmLCBvdGhlcik6CiAgICAgLi4uICAgICBpZiBub3QgdHlwZShzZWxmKSA9PSB0eXBlKG90aGVyKToKQEAgLTEyMjMsMTEgKzEyMzQsMTEgQEAKICAgICA+Pj4gbWF0Y2hfZm9vID0gTWF0Y2hlcihjb21wYXJlLCBGb28oMSwgMikpCiAgICAgPj4+IG1vY2suYXNzZXJ0X2NhbGxlZF93aXRoKG1hdGNoX2ZvbykKIAotVGhlIGBNYXRjaGVyYCBpcyBpbnN0YW50aWF0ZWQgd2l0aCBvdXIgY29tcGFyZSBmdW5jdGlvbiBhbmQgdGhlIGBGb29gIG9iamVjdAotd2Ugd2FudCB0byBjb21wYXJlIGFnYWluc3QuIEluIGBhc3NlcnRfY2FsbGVkX3dpdGhgIHRoZSBgTWF0Y2hlcmAgZXF1YWxpdHkKK1RoZSBgYE1hdGNoZXJgYCBpcyBpbnN0YW50aWF0ZWQgd2l0aCBvdXIgY29tcGFyZSBmdW5jdGlvbiBhbmQgdGhlIGBgRm9vYGAgb2JqZWN0Cit3ZSB3YW50IHRvIGNvbXBhcmUgYWdhaW5zdC4gSW4gYGBhc3NlcnRfY2FsbGVkX3dpdGhgYCB0aGUgYGBNYXRjaGVyYGAgZXF1YWxpdHkKIG1ldGhvZCB3aWxsIGJlIGNhbGxlZCwgd2hpY2ggY29tcGFyZXMgdGhlIG9iamVjdCB0aGUgbW9jayB3YXMgY2FsbGVkIHdpdGgKIGFnYWluc3QgdGhlIG9uZSB3ZSBjcmVhdGVkIG91ciBtYXRjaGVyIHdpdGguIElmIHRoZXkgbWF0Y2ggdGhlbgotYGFzc2VydF9jYWxsZWRfd2l0aGAgcGFzc2VzLCBhbmQgaWYgdGhleSBkb24ndCBhbiBgQXNzZXJ0aW9uRXJyb3JgIGlzIHJhaXNlZDoKK2BgYXNzZXJ0X2NhbGxlZF93aXRoYGAgcGFzc2VzLCBhbmQgaWYgdGhleSBkb24ndCBhbiA6ZXhjOmBBc3NlcnRpb25FcnJvcmAgaXMgcmFpc2VkOgogCiAgICAgPj4+IG1hdGNoX3dyb25nID0gTWF0Y2hlcihjb21wYXJlLCBGb28oMywgNCkpCiAgICAgPj4+IG1vY2suYXNzZXJ0X2NhbGxlZF93aXRoKG1hdGNoX3dyb25nKQpAQCAtMTIzNywxMCArMTI0OCwxMCBAQAogICAgIENhbGxlZCB3aXRoOiAoKDxGb28gb2JqZWN0IGF0IDB4Li4uPiwpLCB7fSkKIAogV2l0aCBhIGJpdCBvZiB0d2Vha2luZyB5b3UgY291bGQgaGF2ZSB0aGUgY29tcGFyaXNvbiBmdW5jdGlvbiByYWlzZSB0aGUKLWBBc3NlcnRpb25FcnJvcmAgZGlyZWN0bHkgYW5kIHByb3ZpZGUgYSBtb3JlIHVzZWZ1bCBmYWlsdXJlIG1lc3NhZ2UuCis6ZXhjOmBBc3NlcnRpb25FcnJvcmAgZGlyZWN0bHkgYW5kIHByb3ZpZGUgYSBtb3JlIHVzZWZ1bCBmYWlsdXJlIG1lc3NhZ2UuCiAKIEFzIG9mIHZlcnNpb24gMS41LCB0aGUgUHl0aG9uIHRlc3RpbmcgbGlicmFyeSBgUHlIYW1jcmVzdAotPGh0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9QeUhhbWNyZXN0PmBfIHByb3ZpZGVzIHNpbWlsYXIgZnVuY3Rpb25hbGl0eSwKKzxodHRwczovL3B5cGkucHl0aG9uLm9yZy9weXBpL1B5SGFtY3Jlc3Q+YF8gcHJvdmlkZXMgc2ltaWxhciBmdW5jdGlvbmFsaXR5LAogdGhhdCBtYXkgYmUgdXNlZnVsIGhlcmUsIGluIHRoZSBmb3JtIG9mIGl0cyBlcXVhbGl0eSBtYXRjaGVyCiAoYGhhbWNyZXN0LmxpYnJhcnkuaW50ZWdyYXRpb24ubWF0Y2hfZXF1YWxpdHkKLTxodHRwOi8vcGFja2FnZXMucHl0aG9uLm9yZy9QeUhhbWNyZXN0L2ludGVncmF0aW9uLmh0bWwjaGFtY3Jlc3QubGlicmFyeS5pbnRlZ3JhdGlvbi5tYXRjaF9lcXVhbGl0eT5gXykuCis8aHR0cDovL3B5dGhvbmhvc3RlZC5vcmcvUHlIYW1jcmVzdC9pbnRlZ3JhdGlvbi5odG1sI2hhbWNyZXN0LmxpYnJhcnkuaW50ZWdyYXRpb24ubWF0Y2hfZXF1YWxpdHkubWF0Y2hfZXF1YWxpdHk+YF8pLgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvdW5pdHRlc3QubW9jay5yc3QgYi9Eb2MvbGlicmFyeS91bml0dGVzdC5tb2NrLnJzdAppbmRleCBmODA1ZGYzLi5kN2Q3MzVjIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS91bml0dGVzdC5tb2NrLnJzdAorKysgYi9Eb2MvbGlicmFyeS91bml0dGVzdC5tb2NrLnJzdApAQCAtMTMsNyArMTMsNyBAQAogcmVwbGFjZSBwYXJ0cyBvZiB5b3VyIHN5c3RlbSB1bmRlciB0ZXN0IHdpdGggbW9jayBvYmplY3RzIGFuZCBtYWtlIGFzc2VydGlvbnMKIGFib3V0IGhvdyB0aGV5IGhhdmUgYmVlbiB1c2VkLgogCi1gdW5pdHRlc3QubW9ja2AgcHJvdmlkZXMgYSBjb3JlIDpjbGFzczpgTW9ja2AgY2xhc3MgcmVtb3ZpbmcgdGhlIG5lZWQgdG8KKzptb2Q6YHVuaXR0ZXN0Lm1vY2tgIHByb3ZpZGVzIGEgY29yZSA6Y2xhc3M6YE1vY2tgIGNsYXNzIHJlbW92aW5nIHRoZSBuZWVkIHRvCiBjcmVhdGUgYSBob3N0IG9mIHN0dWJzIHRocm91Z2hvdXQgeW91ciB0ZXN0IHN1aXRlLiBBZnRlciBwZXJmb3JtaW5nIGFuCiBhY3Rpb24sIHlvdSBjYW4gbWFrZSBhc3NlcnRpb25zIGFib3V0IHdoaWNoIG1ldGhvZHMgLyBhdHRyaWJ1dGVzIHdlcmUgdXNlZAogYW5kIGFyZ3VtZW50cyB0aGV5IHdlcmUgY2FsbGVkIHdpdGguIFlvdSBjYW4gYWxzbyBzcGVjaWZ5IHJldHVybiB2YWx1ZXMgYW5kCkBAIC0yNiwxMSArMjYsMTEgQEAKIDpmdW5jOmBwYXRjaGAuCiAKIE1vY2sgaXMgdmVyeSBlYXN5IHRvIHVzZSBhbmQgaXMgZGVzaWduZWQgZm9yIHVzZSB3aXRoIDptb2Q6YHVuaXR0ZXN0YC4gTW9jawotaXMgYmFzZWQgb24gdGhlICdhY3Rpb24gLT4gYXNzZXJ0aW9uJyBwYXR0ZXJuIGluc3RlYWQgb2YgYCdyZWNvcmQgLT4gcmVwbGF5J2AKK2lzIGJhc2VkIG9uIHRoZSAnYWN0aW9uIC0+IGFzc2VydGlvbicgcGF0dGVybiBpbnN0ZWFkIG9mICdyZWNvcmQgLT4gcmVwbGF5JwogdXNlZCBieSBtYW55IG1vY2tpbmcgZnJhbWV3b3Jrcy4KIAotVGhlcmUgaXMgYSBiYWNrcG9ydCBvZiBgdW5pdHRlc3QubW9ja2AgZm9yIGVhcmxpZXIgdmVyc2lvbnMgb2YgUHl0aG9uLAotYXZhaWxhYmxlIGFzIGBtb2NrIG9uIFB5UEkgPGh0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9tb2NrPmBfLgorVGhlcmUgaXMgYSBiYWNrcG9ydCBvZiA6bW9kOmB1bml0dGVzdC5tb2NrYCBmb3IgZWFybGllciB2ZXJzaW9ucyBvZiBQeXRob24sCithdmFpbGFibGUgYXMgYG1vY2sgb24gUHlQSSA8aHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9tb2NrPmBfLgogCiAqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi91bml0dGVzdC9tb2NrLnB5YAogCkBAIC03MSw5ICs3MSw5IEBACiAgICAoNSwgNCwgMykKIAogTW9jayBoYXMgbWFueSBvdGhlciB3YXlzIHlvdSBjYW4gY29uZmlndXJlIGl0IGFuZCBjb250cm9sIGl0cyBiZWhhdmlvdXIuIEZvcgotZXhhbXBsZSB0aGUgYHNwZWNgIGFyZ3VtZW50IGNvbmZpZ3VyZXMgdGhlIG1vY2sgdG8gdGFrZSBpdHMgc3BlY2lmaWNhdGlvbgorZXhhbXBsZSB0aGUgKnNwZWMqIGFyZ3VtZW50IGNvbmZpZ3VyZXMgdGhlIG1vY2sgdG8gdGFrZSBpdHMgc3BlY2lmaWNhdGlvbgogZnJvbSBhbm90aGVyIG9iamVjdC4gQXR0ZW1wdGluZyB0byBhY2Nlc3MgYXR0cmlidXRlcyBvciBtZXRob2RzIG9uIHRoZSBtb2NrCi10aGF0IGRvbid0IGV4aXN0IG9uIHRoZSBzcGVjIHdpbGwgZmFpbCB3aXRoIGFuIGBBdHRyaWJ1dGVFcnJvcmAuCit0aGF0IGRvbid0IGV4aXN0IG9uIHRoZSBzcGVjIHdpbGwgZmFpbCB3aXRoIGFuIDpleGM6YEF0dHJpYnV0ZUVycm9yYC4KIAogVGhlIDpmdW5jOmBwYXRjaGAgZGVjb3JhdG9yIC8gY29udGV4dCBtYW5hZ2VyIG1ha2VzIGl0IGVhc3kgdG8gbW9jayBjbGFzc2VzIG9yCiBvYmplY3RzIGluIGEgbW9kdWxlIHVuZGVyIHRlc3QuIFRoZSBvYmplY3QgeW91IHNwZWNpZnkgd2lsbCBiZSByZXBsYWNlZCB3aXRoIGEKQEAgLTk3LDEzICs5NywxMyBAQAogICAgV2hlbiB5b3UgbmVzdCBwYXRjaCBkZWNvcmF0b3JzIHRoZSBtb2NrcyBhcmUgcGFzc2VkIGluIHRvIHRoZSBkZWNvcmF0ZWQKICAgIGZ1bmN0aW9uIGluIHRoZSBzYW1lIG9yZGVyIHRoZXkgYXBwbGllZCAodGhlIG5vcm1hbCAqcHl0aG9uKiBvcmRlciB0aGF0CiAgICBkZWNvcmF0b3JzIGFyZSBhcHBsaWVkKS4gVGhpcyBtZWFucyBmcm9tIHRoZSBib3R0b20gdXAsIHNvIGluIHRoZSBleGFtcGxlCi0gICBhYm92ZSB0aGUgbW9jayBmb3IgYG1vZHVsZS5DbGFzc05hbWUxYCBpcyBwYXNzZWQgaW4gZmlyc3QuCisgICBhYm92ZSB0aGUgbW9jayBmb3IgYGBtb2R1bGUuQ2xhc3NOYW1lMWBgIGlzIHBhc3NlZCBpbiBmaXJzdC4KIAotICAgV2l0aCBgcGF0Y2hgIGl0IG1hdHRlcnMgdGhhdCB5b3UgcGF0Y2ggb2JqZWN0cyBpbiB0aGUgbmFtZXNwYWNlIHdoZXJlIHRoZXkKKyAgIFdpdGggOmZ1bmM6YHBhdGNoYCBpdCBtYXR0ZXJzIHRoYXQgeW91IHBhdGNoIG9iamVjdHMgaW4gdGhlIG5hbWVzcGFjZSB3aGVyZSB0aGV5CiAgICBhcmUgbG9va2VkIHVwLiBUaGlzIGlzIG5vcm1hbGx5IHN0cmFpZ2h0Zm9yd2FyZCwgYnV0IGZvciBhIHF1aWNrIGd1aWRlCiAgICByZWFkIDpyZWY6YHdoZXJlIHRvIHBhdGNoIDx3aGVyZS10by1wYXRjaD5gLgogCi1BcyB3ZWxsIGFzIGEgZGVjb3JhdG9yIGBwYXRjaGAgY2FuIGJlIHVzZWQgYXMgYSBjb250ZXh0IG1hbmFnZXIgaW4gYSB3aXRoCitBcyB3ZWxsIGFzIGEgZGVjb3JhdG9yIDpmdW5jOmBwYXRjaGAgY2FuIGJlIHVzZWQgYXMgYSBjb250ZXh0IG1hbmFnZXIgaW4gYSB3aXRoCiBzdGF0ZW1lbnQ6CiAKICAgICA+Pj4gd2l0aCBwYXRjaC5vYmplY3QoUHJvZHVjdGlvbkNsYXNzLCAnbWV0aG9kJywgcmV0dXJuX3ZhbHVlPU5vbmUpIGFzIG1vY2tfbWV0aG9kOgpAQCAtMTM1LDcgKzEzNSw3IEBACiAgICAgPj4+IG1vY2suX19zdHJfXy5hc3NlcnRfY2FsbGVkX3dpdGgoKQogCiBNb2NrIGFsbG93cyB5b3UgdG8gYXNzaWduIGZ1bmN0aW9ucyAob3Igb3RoZXIgTW9jayBpbnN0YW5jZXMpIHRvIG1hZ2ljIG1ldGhvZHMKLWFuZCB0aGV5IHdpbGwgYmUgY2FsbGVkIGFwcHJvcHJpYXRlbHkuIFRoZSBgTWFnaWNNb2NrYCBjbGFzcyBpcyBqdXN0IGEgTW9jaworYW5kIHRoZXkgd2lsbCBiZSBjYWxsZWQgYXBwcm9wcmlhdGVseS4gVGhlIDpjbGFzczpgTWFnaWNNb2NrYCBjbGFzcyBpcyBqdXN0IGEgTW9jawogdmFyaWFudCB0aGF0IGhhcyBhbGwgb2YgdGhlIG1hZ2ljIG1ldGhvZHMgcHJlLWNyZWF0ZWQgZm9yIHlvdSAod2VsbCwgYWxsIHRoZQogdXNlZnVsIG9uZXMgYW55d2F5KS4KIApAQCAtMTQ5LDcgKzE0OSw3IEBACiAKIEZvciBlbnN1cmluZyB0aGF0IHRoZSBtb2NrIG9iamVjdHMgaW4geW91ciB0ZXN0cyBoYXZlIHRoZSBzYW1lIGFwaSBhcyB0aGUKIG9iamVjdHMgdGhleSBhcmUgcmVwbGFjaW5nLCB5b3UgY2FuIHVzZSA6cmVmOmBhdXRvLXNwZWNjaW5nIDxhdXRvLXNwZWNjaW5nPmAuCi1BdXRvLXNwZWNjaW5nIGNhbiBiZSBkb25lIHRocm91Z2ggdGhlIGBhdXRvc3BlY2AgYXJndW1lbnQgdG8gcGF0Y2gsIG9yIHRoZQorQXV0by1zcGVjY2luZyBjYW4gYmUgZG9uZSB0aHJvdWdoIHRoZSAqYXV0b3NwZWMqIGFyZ3VtZW50IHRvIHBhdGNoLCBvciB0aGUKIDpmdW5jOmBjcmVhdGVfYXV0b3NwZWNgIGZ1bmN0aW9uLiBBdXRvLXNwZWNjaW5nIGNyZWF0ZXMgbW9jayBvYmplY3RzIHRoYXQKIGhhdmUgdGhlIHNhbWUgYXR0cmlidXRlcyBhbmQgbWV0aG9kcyBhcyB0aGUgb2JqZWN0cyB0aGV5IGFyZSByZXBsYWNpbmcsIGFuZAogYW55IGZ1bmN0aW9ucyBhbmQgbWV0aG9kcyAoaW5jbHVkaW5nIGNvbnN0cnVjdG9ycykgaGF2ZSB0aGUgc2FtZSBjYWxsCkBAIC0xNzEsOSArMTcxLDkgQEAKICAgICAuLi4KICAgIFR5cGVFcnJvcjogPGxhbWJkYT4oKSB0YWtlcyBleGFjdGx5IDMgYXJndW1lbnRzICgxIGdpdmVuKQogCi1gY3JlYXRlX2F1dG9zcGVjYCBjYW4gYWxzbyBiZSB1c2VkIG9uIGNsYXNzZXMsIHdoZXJlIGl0IGNvcGllcyB0aGUgc2lnbmF0dXJlIG9mCi10aGUgYF9faW5pdF9fYCBtZXRob2QsIGFuZCBvbiBjYWxsYWJsZSBvYmplY3RzIHdoZXJlIGl0IGNvcGllcyB0aGUgc2lnbmF0dXJlIG9mCi10aGUgYF9fY2FsbF9fYCBtZXRob2QuCis6ZnVuYzpgY3JlYXRlX2F1dG9zcGVjYCBjYW4gYWxzbyBiZSB1c2VkIG9uIGNsYXNzZXMsIHdoZXJlIGl0IGNvcGllcyB0aGUgc2lnbmF0dXJlIG9mCit0aGUgYGBfX2luaXRfX2BgIG1ldGhvZCwgYW5kIG9uIGNhbGxhYmxlIG9iamVjdHMgd2hlcmUgaXQgY29waWVzIHRoZSBzaWduYXR1cmUgb2YKK3RoZSBgYF9fY2FsbF9fYGAgbWV0aG9kLgogCiAKIApAQCAtMTgxLDcxICsxODEsNzEgQEAKIC0tLS0tLS0tLS0tLS0tCiAKIAotYE1vY2tgIGlzIGEgZmxleGlibGUgbW9jayBvYmplY3QgaW50ZW5kZWQgdG8gcmVwbGFjZSB0aGUgdXNlIG9mIHN0dWJzIGFuZAorOmNsYXNzOmBNb2NrYCBpcyBhIGZsZXhpYmxlIG1vY2sgb2JqZWN0IGludGVuZGVkIHRvIHJlcGxhY2UgdGhlIHVzZSBvZiBzdHVicyBhbmQKIHRlc3QgZG91YmxlcyB0aHJvdWdob3V0IHlvdXIgY29kZS4gTW9ja3MgYXJlIGNhbGxhYmxlIGFuZCBjcmVhdGUgYXR0cmlidXRlcyBhcwogbmV3IG1vY2tzIHdoZW4geW91IGFjY2VzcyB0aGVtIFsjXV8uIEFjY2Vzc2luZyB0aGUgc2FtZSBhdHRyaWJ1dGUgd2lsbCBhbHdheXMKIHJldHVybiB0aGUgc2FtZSBtb2NrLiBNb2NrcyByZWNvcmQgaG93IHlvdSB1c2UgdGhlbSwgYWxsb3dpbmcgeW91IHRvIG1ha2UKIGFzc2VydGlvbnMgYWJvdXQgd2hhdCB5b3VyIGNvZGUgaGFzIGRvbmUgdG8gdGhlbS4KIAotOmNsYXNzOmBNYWdpY01vY2tgIGlzIGEgc3ViY2xhc3Mgb2YgYE1vY2tgIHdpdGggYWxsIHRoZSBtYWdpYyBtZXRob2RzCis6Y2xhc3M6YE1hZ2ljTW9ja2AgaXMgYSBzdWJjbGFzcyBvZiA6Y2xhc3M6YE1vY2tgIHdpdGggYWxsIHRoZSBtYWdpYyBtZXRob2RzCiBwcmUtY3JlYXRlZCBhbmQgcmVhZHkgdG8gdXNlLiBUaGVyZSBhcmUgYWxzbyBub24tY2FsbGFibGUgdmFyaWFudHMsIHVzZWZ1bAogd2hlbiB5b3UgYXJlIG1vY2tpbmcgb3V0IG9iamVjdHMgdGhhdCBhcmVuJ3QgY2FsbGFibGU6CiA6Y2xhc3M6YE5vbkNhbGxhYmxlTW9ja2AgYW5kIDpjbGFzczpgTm9uQ2FsbGFibGVNYWdpY01vY2tgCiAKIFRoZSA6ZnVuYzpgcGF0Y2hgIGRlY29yYXRvcnMgbWFrZXMgaXQgZWFzeSB0byB0ZW1wb3JhcmlseSByZXBsYWNlIGNsYXNzZXMKLWluIGEgcGFydGljdWxhciBtb2R1bGUgd2l0aCBhIGBNb2NrYCBvYmplY3QuIEJ5IGRlZmF1bHQgYHBhdGNoYCB3aWxsIGNyZWF0ZQotYSBgTWFnaWNNb2NrYCBmb3IgeW91LiBZb3UgY2FuIHNwZWNpZnkgYW4gYWx0ZXJuYXRpdmUgY2xhc3Mgb2YgYE1vY2tgIHVzaW5nCi10aGUgYG5ld19jYWxsYWJsZWAgYXJndW1lbnQgdG8gYHBhdGNoYC4KK2luIGEgcGFydGljdWxhciBtb2R1bGUgd2l0aCBhIDpjbGFzczpgTW9ja2Agb2JqZWN0LiBCeSBkZWZhdWx0IDpmdW5jOmBwYXRjaGAgd2lsbCBjcmVhdGUKK2EgOmNsYXNzOmBNYWdpY01vY2tgIGZvciB5b3UuIFlvdSBjYW4gc3BlY2lmeSBhbiBhbHRlcm5hdGl2ZSBjbGFzcyBvZiA6Y2xhc3M6YE1vY2tgIHVzaW5nCit0aGUgKm5ld19jYWxsYWJsZSogYXJndW1lbnQgdG8gOmZ1bmM6YHBhdGNoYC4KIAogCiAuLiBjbGFzczo6IE1vY2soc3BlYz1Ob25lLCBzaWRlX2VmZmVjdD1Ob25lLCByZXR1cm5fdmFsdWU9REVGQVVMVCwgd3JhcHM9Tm9uZSwgbmFtZT1Ob25lLCBzcGVjX3NldD1Ob25lLCAqKmt3YXJncykKIAotICAgIENyZWF0ZSBhIG5ldyBgTW9ja2Agb2JqZWN0LiBgTW9ja2AgdGFrZXMgc2V2ZXJhbCBvcHRpb25hbCBhcmd1bWVudHMKKyAgICBDcmVhdGUgYSBuZXcgOmNsYXNzOmBNb2NrYCBvYmplY3QuIDpjbGFzczpgTW9ja2AgdGFrZXMgc2V2ZXJhbCBvcHRpb25hbCBhcmd1bWVudHMKICAgICB0aGF0IHNwZWNpZnkgdGhlIGJlaGF2aW91ciBvZiB0aGUgTW9jayBvYmplY3Q6CiAKLSAgICAqIGBzcGVjYDogVGhpcyBjYW4gYmUgZWl0aGVyIGEgbGlzdCBvZiBzdHJpbmdzIG9yIGFuIGV4aXN0aW5nIG9iamVjdCAoYQorICAgICogKnNwZWMqOiBUaGlzIGNhbiBiZSBlaXRoZXIgYSBsaXN0IG9mIHN0cmluZ3Mgb3IgYW4gZXhpc3Rpbmcgb2JqZWN0IChhCiAgICAgICBjbGFzcyBvciBpbnN0YW5jZSkgdGhhdCBhY3RzIGFzIHRoZSBzcGVjaWZpY2F0aW9uIGZvciB0aGUgbW9jayBvYmplY3QuIElmCiAgICAgICB5b3UgcGFzcyBpbiBhbiBvYmplY3QgdGhlbiBhIGxpc3Qgb2Ygc3RyaW5ncyBpcyBmb3JtZWQgYnkgY2FsbGluZyBkaXIgb24KICAgICAgIHRoZSBvYmplY3QgKGV4Y2x1ZGluZyB1bnN1cHBvcnRlZCBtYWdpYyBhdHRyaWJ1dGVzIGFuZCBtZXRob2RzKS4KLSAgICAgIEFjY2Vzc2luZyBhbnkgYXR0cmlidXRlIG5vdCBpbiB0aGlzIGxpc3Qgd2lsbCByYWlzZSBhbiBgQXR0cmlidXRlRXJyb3JgLgorICAgICAgQWNjZXNzaW5nIGFueSBhdHRyaWJ1dGUgbm90IGluIHRoaXMgbGlzdCB3aWxsIHJhaXNlIGFuIDpleGM6YEF0dHJpYnV0ZUVycm9yYC4KIAotICAgICAgSWYgYHNwZWNgIGlzIGFuIG9iamVjdCAocmF0aGVyIHRoYW4gYSBsaXN0IG9mIHN0cmluZ3MpIHRoZW4KKyAgICAgIElmICpzcGVjKiBpcyBhbiBvYmplY3QgKHJhdGhlciB0aGFuIGEgbGlzdCBvZiBzdHJpbmdzKSB0aGVuCiAgICAgICA6YXR0cjpgfmluc3RhbmNlLl9fY2xhc3NfX2AgcmV0dXJucyB0aGUgY2xhc3Mgb2YgdGhlIHNwZWMgb2JqZWN0LiBUaGlzCi0gICAgICBhbGxvd3MgbW9ja3MgdG8gcGFzcyBgaXNpbnN0YW5jZWAgdGVzdHMuCisgICAgICBhbGxvd3MgbW9ja3MgdG8gcGFzcyA6ZnVuYzpgaXNpbnN0YW5jZWAgdGVzdHMuCiAKLSAgICAqIGBzcGVjX3NldGA6IEEgc3RyaWN0ZXIgdmFyaWFudCBvZiBgc3BlY2AuIElmIHVzZWQsIGF0dGVtcHRpbmcgdG8gKnNldCoKKyAgICAqICpzcGVjX3NldCo6IEEgc3RyaWN0ZXIgdmFyaWFudCBvZiAqc3BlYyouIElmIHVzZWQsIGF0dGVtcHRpbmcgdG8gKnNldCoKICAgICAgIG9yIGdldCBhbiBhdHRyaWJ1dGUgb24gdGhlIG1vY2sgdGhhdCBpc24ndCBvbiB0aGUgb2JqZWN0IHBhc3NlZCBhcwotICAgICAgYHNwZWNfc2V0YCB3aWxsIHJhaXNlIGFuIGBBdHRyaWJ1dGVFcnJvcmAuCisgICAgICAqc3BlY19zZXQqIHdpbGwgcmFpc2UgYW4gOmV4YzpgQXR0cmlidXRlRXJyb3JgLgogCi0gICAgKiBgc2lkZV9lZmZlY3RgOiBBIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuZXZlciB0aGUgTW9jayBpcyBjYWxsZWQuIFNlZQorICAgICogKnNpZGVfZWZmZWN0KjogQSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbmV2ZXIgdGhlIE1vY2sgaXMgY2FsbGVkLiBTZWUKICAgICAgIHRoZSA6YXR0cjpgfk1vY2suc2lkZV9lZmZlY3RgIGF0dHJpYnV0ZS4gVXNlZnVsIGZvciByYWlzaW5nIGV4Y2VwdGlvbnMgb3IKICAgICAgIGR5bmFtaWNhbGx5IGNoYW5naW5nIHJldHVybiB2YWx1ZXMuIFRoZSBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCB0aGUgc2FtZQogICAgICAgYXJndW1lbnRzIGFzIHRoZSBtb2NrLCBhbmQgdW5sZXNzIGl0IHJldHVybnMgOmRhdGE6YERFRkFVTFRgLCB0aGUgcmV0dXJuCiAgICAgICB2YWx1ZSBvZiB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgYXMgdGhlIHJldHVybiB2YWx1ZS4KIAotICAgICAgQWx0ZXJuYXRpdmVseSBgc2lkZV9lZmZlY3RgIGNhbiBiZSBhbiBleGNlcHRpb24gY2xhc3Mgb3IgaW5zdGFuY2UuIEluCisgICAgICBBbHRlcm5hdGl2ZWx5ICpzaWRlX2VmZmVjdCogY2FuIGJlIGFuIGV4Y2VwdGlvbiBjbGFzcyBvciBpbnN0YW5jZS4gSW4KICAgICAgIHRoaXMgY2FzZSB0aGUgZXhjZXB0aW9uIHdpbGwgYmUgcmFpc2VkIHdoZW4gdGhlIG1vY2sgaXMgY2FsbGVkLgogCi0gICAgICBJZiBgc2lkZV9lZmZlY3RgIGlzIGFuIGl0ZXJhYmxlIHRoZW4gZWFjaCBjYWxsIHRvIHRoZSBtb2NrIHdpbGwgcmV0dXJuCisgICAgICBJZiAqc2lkZV9lZmZlY3QqIGlzIGFuIGl0ZXJhYmxlIHRoZW4gZWFjaCBjYWxsIHRvIHRoZSBtb2NrIHdpbGwgcmV0dXJuCiAgICAgICB0aGUgbmV4dCB2YWx1ZSBmcm9tIHRoZSBpdGVyYWJsZS4KIAotICAgICAgQSBgc2lkZV9lZmZlY3RgIGNhbiBiZSBjbGVhcmVkIGJ5IHNldHRpbmcgaXQgdG8gYE5vbmVgLgorICAgICAgQSAqc2lkZV9lZmZlY3QqIGNhbiBiZSBjbGVhcmVkIGJ5IHNldHRpbmcgaXQgdG8gYGBOb25lYGAuCiAKLSAgICAqIGByZXR1cm5fdmFsdWVgOiBUaGUgdmFsdWUgcmV0dXJuZWQgd2hlbiB0aGUgbW9jayBpcyBjYWxsZWQuIEJ5IGRlZmF1bHQKKyAgICAqICpyZXR1cm5fdmFsdWUqOiBUaGUgdmFsdWUgcmV0dXJuZWQgd2hlbiB0aGUgbW9jayBpcyBjYWxsZWQuIEJ5IGRlZmF1bHQKICAgICAgIHRoaXMgaXMgYSBuZXcgTW9jayAoY3JlYXRlZCBvbiBmaXJzdCBhY2Nlc3MpLiBTZWUgdGhlCiAgICAgICA6YXR0cjpgcmV0dXJuX3ZhbHVlYCBhdHRyaWJ1dGUuCiAKLSAgICAqIGB3cmFwc2A6IEl0ZW0gZm9yIHRoZSBtb2NrIG9iamVjdCB0byB3cmFwLiBJZiBgd3JhcHNgIGlzIG5vdCBOb25lIHRoZW4KKyAgICAqICp3cmFwcyo6IEl0ZW0gZm9yIHRoZSBtb2NrIG9iamVjdCB0byB3cmFwLiBJZiAqd3JhcHMqIGlzIG5vdCBOb25lIHRoZW4KICAgICAgIGNhbGxpbmcgdGhlIE1vY2sgd2lsbCBwYXNzIHRoZSBjYWxsIHRocm91Z2ggdG8gdGhlIHdyYXBwZWQgb2JqZWN0CiAgICAgICAocmV0dXJuaW5nIHRoZSByZWFsIHJlc3VsdCkuIEF0dHJpYnV0ZSBhY2Nlc3Mgb24gdGhlIG1vY2sgd2lsbCByZXR1cm4gYQogICAgICAgTW9jayBvYmplY3QgdGhhdCB3cmFwcyB0aGUgY29ycmVzcG9uZGluZyBhdHRyaWJ1dGUgb2YgdGhlIHdyYXBwZWQKICAgICAgIG9iamVjdCAoc28gYXR0ZW1wdGluZyB0byBhY2Nlc3MgYW4gYXR0cmlidXRlIHRoYXQgZG9lc24ndCBleGlzdCB3aWxsCi0gICAgICByYWlzZSBhbiBgQXR0cmlidXRlRXJyb3JgKS4KKyAgICAgIHJhaXNlIGFuIDpleGM6YEF0dHJpYnV0ZUVycm9yYCkuCiAKLSAgICAgIElmIHRoZSBtb2NrIGhhcyBhbiBleHBsaWNpdCBgcmV0dXJuX3ZhbHVlYCBzZXQgdGhlbiBjYWxscyBhcmUgbm90IHBhc3NlZAotICAgICAgdG8gdGhlIHdyYXBwZWQgb2JqZWN0IGFuZCB0aGUgYHJldHVybl92YWx1ZWAgaXMgcmV0dXJuZWQgaW5zdGVhZC4KKyAgICAgIElmIHRoZSBtb2NrIGhhcyBhbiBleHBsaWNpdCAqcmV0dXJuX3ZhbHVlKiBzZXQgdGhlbiBjYWxscyBhcmUgbm90IHBhc3NlZAorICAgICAgdG8gdGhlIHdyYXBwZWQgb2JqZWN0IGFuZCB0aGUgKnJldHVybl92YWx1ZSogaXMgcmV0dXJuZWQgaW5zdGVhZC4KIAotICAgICogYG5hbWVgOiBJZiB0aGUgbW9jayBoYXMgYSBuYW1lIHRoZW4gaXQgd2lsbCBiZSB1c2VkIGluIHRoZSByZXByIG9mIHRoZQorICAgICogKm5hbWUqOiBJZiB0aGUgbW9jayBoYXMgYSBuYW1lIHRoZW4gaXQgd2lsbCBiZSB1c2VkIGluIHRoZSByZXByIG9mIHRoZQogICAgICAgbW9jay4gVGhpcyBjYW4gYmUgdXNlZnVsIGZvciBkZWJ1Z2dpbmcuIFRoZSBuYW1lIGlzIHByb3BhZ2F0ZWQgdG8gY2hpbGQKICAgICAgIG1vY2tzLgogCkBAIC0yNjQsNyArMjY0LDYgQEAKICAgICAgICAgICAgIDxNb2NrIG5hbWU9J21vY2subWV0aG9kKCknIGlkPScuLi4nPgogICAgICAgICAgICAgPj4+IG1vY2subWV0aG9kLmFzc2VydF9jYWxsZWRfd2l0aCgxLCAyLCAzLCB0ZXN0PSd3b3cnKQogCi0KICAgICAuLiBtZXRob2Q6OiBhc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgqYXJncywgKiprd2FyZ3MpCiAKICAgICAgICBBc3NlcnQgdGhhdCB0aGUgbW9jayB3YXMgY2FsbGVkIGV4YWN0bHkgb25jZSBhbmQgd2l0aCB0aGUgc3BlY2lmaWVkCkBAIC0yOTcsMTMgKzI5NiwxMyBAQAogICAgIC4uIG1ldGhvZDo6IGFzc2VydF9oYXNfY2FsbHMoY2FsbHMsIGFueV9vcmRlcj1GYWxzZSkKIAogICAgICAgICBhc3NlcnQgdGhlIG1vY2sgaGFzIGJlZW4gY2FsbGVkIHdpdGggdGhlIHNwZWNpZmllZCBjYWxscy4KLSAgICAgICAgVGhlIGBtb2NrX2NhbGxzYCBsaXN0IGlzIGNoZWNrZWQgZm9yIHRoZSBjYWxscy4KKyAgICAgICAgVGhlIDphdHRyOmBtb2NrX2NhbGxzYCBsaXN0IGlzIGNoZWNrZWQgZm9yIHRoZSBjYWxscy4KIAotICAgICAgICBJZiBgYW55X29yZGVyYCBpcyBmYWxzZSAodGhlIGRlZmF1bHQpIHRoZW4gdGhlIGNhbGxzIG11c3QgYmUKKyAgICAgICAgSWYgKmFueV9vcmRlciogaXMgZmFsc2UgKHRoZSBkZWZhdWx0KSB0aGVuIHRoZSBjYWxscyBtdXN0IGJlCiAgICAgICAgIHNlcXVlbnRpYWwuIFRoZXJlIGNhbiBiZSBleHRyYSBjYWxscyBiZWZvcmUgb3IgYWZ0ZXIgdGhlCiAgICAgICAgIHNwZWNpZmllZCBjYWxscy4KIAotICAgICAgICBJZiBgYW55X29yZGVyYCBpcyB0cnVlIHRoZW4gdGhlIGNhbGxzIGNhbiBiZSBpbiBhbnkgb3JkZXIsIGJ1dAorICAgICAgICBJZiAqYW55X29yZGVyKiBpcyB0cnVlIHRoZW4gdGhlIGNhbGxzIGNhbiBiZSBpbiBhbnkgb3JkZXIsIGJ1dAogICAgICAgICB0aGV5IG11c3QgYWxsIGFwcGVhciBpbiA6YXR0cjpgbW9ja19jYWxsc2AuCiAKICAgICAgICAgICAgID4+PiBtb2NrID0gTW9jayhyZXR1cm5fdmFsdWU9Tm9uZSkKQEAgLTMzMCw3ICszMjksNyBAQAogICAgICAgICAgICAgRmFsc2UKIAogICAgICAgICBUaGlzIGNhbiBiZSB1c2VmdWwgd2hlcmUgeW91IHdhbnQgdG8gbWFrZSBhIHNlcmllcyBvZiBhc3NlcnRpb25zIHRoYXQKLSAgICAgICAgcmV1c2UgdGhlIHNhbWUgb2JqZWN0LiBOb3RlIHRoYXQgYHJlc2V0X21vY2tgICpkb2Vzbid0KiBjbGVhciB0aGUKKyAgICAgICAgcmV1c2UgdGhlIHNhbWUgb2JqZWN0LiBOb3RlIHRoYXQgOm1ldGg6YHJlc2V0X21vY2tgICpkb2Vzbid0KiBjbGVhciB0aGUKICAgICAgICAgcmV0dXJuIHZhbHVlLCA6YXR0cjpgc2lkZV9lZmZlY3RgIG9yIGFueSBjaGlsZCBhdHRyaWJ1dGVzIHlvdSBoYXZlCiAgICAgICAgIHNldCB1c2luZyBub3JtYWwgYXNzaWdubWVudC4gQ2hpbGQgbW9ja3MgYW5kIHRoZSByZXR1cm4gdmFsdWUgbW9jawogICAgICAgICAoaWYgYW55KSBhcmUgcmVzZXQgYXMgd2VsbC4KQEAgLTMzOCwxMSArMzM3LDExIEBACiAKICAgICAuLiBtZXRob2Q6OiBtb2NrX2FkZF9zcGVjKHNwZWMsIHNwZWNfc2V0PUZhbHNlKQogCi0gICAgICAgIEFkZCBhIHNwZWMgdG8gYSBtb2NrLiBgc3BlY2AgY2FuIGVpdGhlciBiZSBhbiBvYmplY3Qgb3IgYQotICAgICAgICBsaXN0IG9mIHN0cmluZ3MuIE9ubHkgYXR0cmlidXRlcyBvbiB0aGUgYHNwZWNgIGNhbiBiZSBmZXRjaGVkIGFzCisgICAgICAgIEFkZCBhIHNwZWMgdG8gYSBtb2NrLiAqc3BlYyogY2FuIGVpdGhlciBiZSBhbiBvYmplY3Qgb3IgYQorICAgICAgICBsaXN0IG9mIHN0cmluZ3MuIE9ubHkgYXR0cmlidXRlcyBvbiB0aGUgKnNwZWMqIGNhbiBiZSBmZXRjaGVkIGFzCiAgICAgICAgIGF0dHJpYnV0ZXMgZnJvbSB0aGUgbW9jay4KIAotICAgICAgICBJZiBgc3BlY19zZXRgIGlzIGBUcnVlYCB0aGVuIG9ubHkgYXR0cmlidXRlcyBvbiB0aGUgc3BlYyBjYW4gYmUgc2V0LgorICAgICAgICBJZiAqc3BlY19zZXQqIGlzIHRydWUgdGhlbiBvbmx5IGF0dHJpYnV0ZXMgb24gdGhlIHNwZWMgY2FuIGJlIHNldC4KIAogCiAgICAgLi4gbWV0aG9kOjogYXR0YWNoX21vY2sobW9jaywgYXR0cmlidXRlKQpAQCAtMzgzLDE0ICszODIsMTQgQEAKICAgICAgICAgICAgICAgLi4uCiAgICAgICAgICAgICBLZXlFcnJvcgogCi0gICAgICAgIGBjb25maWd1cmVfbW9ja2AgZXhpc3RzIHRvIG1ha2UgaXQgZWFzaWVyIHRvIGRvIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgOm1ldGg6YGNvbmZpZ3VyZV9tb2NrYCBleGlzdHMgdG8gbWFrZSBpdCBlYXNpZXIgdG8gZG8gY29uZmlndXJhdGlvbgogICAgICAgICBhZnRlciB0aGUgbW9jayBoYXMgYmVlbiBjcmVhdGVkLgogCiAKICAgICAuLiBtZXRob2Q6OiBfX2Rpcl9fKCkKIAotICAgICAgICBgTW9ja2Agb2JqZWN0cyBsaW1pdCB0aGUgcmVzdWx0cyBvZiBgZGlyKHNvbWVfbW9jaylgIHRvIHVzZWZ1bCByZXN1bHRzLgotICAgICAgICBGb3IgbW9ja3Mgd2l0aCBhIGBzcGVjYCB0aGlzIGluY2x1ZGVzIGFsbCB0aGUgcGVybWl0dGVkIGF0dHJpYnV0ZXMKKyAgICAgICAgOmNsYXNzOmBNb2NrYCBvYmplY3RzIGxpbWl0IHRoZSByZXN1bHRzIG9mIGBgZGlyKHNvbWVfbW9jaylgYCB0byB1c2VmdWwgcmVzdWx0cy4KKyAgICAgICAgRm9yIG1vY2tzIHdpdGggYSAqc3BlYyogdGhpcyBpbmNsdWRlcyBhbGwgdGhlIHBlcm1pdHRlZCBhdHRyaWJ1dGVzCiAgICAgICAgIGZvciB0aGUgbW9jay4KIAogICAgICAgICBTZWUgOmRhdGE6YEZJTFRFUl9ESVJgIGZvciB3aGF0IHRoaXMgZmlsdGVyaW5nIGRvZXMsIGFuZCBob3cgdG8KQEAgLTQ1MCw3ICs0NDksNyBAQAogICAgICAgICAgICAgPE1vY2sgbmFtZT0nbW9jaygpKCknIGlkPScuLi4nPgogICAgICAgICAgICAgPj4+IG1vY2sucmV0dXJuX3ZhbHVlLmFzc2VydF9jYWxsZWRfd2l0aCgpCiAKLSAgICAgICAgYHJldHVybl92YWx1ZWAgY2FuIGFsc28gYmUgc2V0IGluIHRoZSBjb25zdHJ1Y3RvcjoKKyAgICAgICAgOmF0dHI6YHJldHVybl92YWx1ZWAgY2FuIGFsc28gYmUgc2V0IGluIHRoZSBjb25zdHJ1Y3RvcjoKIAogICAgICAgICAgICAgPj4+IG1vY2sgPSBNb2NrKHJldHVybl92YWx1ZT0zKQogICAgICAgICAgICAgPj4+IG1vY2sucmV0dXJuX3ZhbHVlCkBAIC00NjIsNyArNDYxLDcgQEAKICAgICAuLiBhdHRyaWJ1dGU6OiBzaWRlX2VmZmVjdAogCiAgICAgICAgIFRoaXMgY2FuIGVpdGhlciBiZSBhIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBtb2NrIGlzIGNhbGxlZCwKLSAgICAgICAgb3IgYW4gZXhjZXB0aW9uIChjbGFzcyBvciBpbnN0YW5jZSkgdG8gYmUgcmFpc2VkLgorICAgICAgICBhbiBpdGVyYWJsZSBvciBhbiBleGNlcHRpb24gKGNsYXNzIG9yIGluc3RhbmNlKSB0byBiZSByYWlzZWQuCiAKICAgICAgICAgSWYgeW91IHBhc3MgaW4gYSBmdW5jdGlvbiBpdCB3aWxsIGJlIGNhbGxlZCB3aXRoIHNhbWUgYXJndW1lbnRzIGFzIHRoZQogICAgICAgICBtb2NrIGFuZCB1bmxlc3MgdGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIDpkYXRhOmBERUZBVUxUYCBzaW5nbGV0b24gdGhlCkBAIC00NzAsNiArNDY5LDExIEBACiAgICAgICAgIGZ1bmN0aW9uIHJldHVybnMgOmRhdGE6YERFRkFVTFRgIHRoZW4gdGhlIG1vY2sgd2lsbCByZXR1cm4gaXRzIG5vcm1hbAogICAgICAgICB2YWx1ZSAoZnJvbSB0aGUgOmF0dHI6YHJldHVybl92YWx1ZWApLgogCisgICAgICAgIElmIHlvdSBwYXNzIGluIGFuIGl0ZXJhYmxlLCBpdCBpcyB1c2VkIHRvIHJldHJpZXZlIGFuIGl0ZXJhdG9yIHdoaWNoCisgICAgICAgIG11c3QgeWllbGQgYSB2YWx1ZSBvbiBldmVyeSBjYWxsLiAgVGhpcyB2YWx1ZSBjYW4gZWl0aGVyIGJlIGFuIGV4Y2VwdGlvbgorICAgICAgICBpbnN0YW5jZSB0byBiZSByYWlzZWQsIG9yIGEgdmFsdWUgdG8gYmUgcmV0dXJuZWQgZnJvbSB0aGUgY2FsbCB0byB0aGUKKyAgICAgICAgbW9jayAoOmRhdGE6YERFRkFVTFRgIGhhbmRsaW5nIGlzIGlkZW50aWNhbCB0byB0aGUgZnVuY3Rpb24gY2FzZSkuCisKICAgICAgICAgQW4gZXhhbXBsZSBvZiBhIG1vY2sgdGhhdCByYWlzZXMgYW4gZXhjZXB0aW9uICh0byB0ZXN0IGV4Y2VwdGlvbgogICAgICAgICBoYW5kbGluZyBvZiBhbiBBUEkpOgogCkBAIC00ODAsMTggKzQ4NCwxNCBAQAogICAgICAgICAgICAgICAuLi4KICAgICAgICAgICAgIEV4Y2VwdGlvbjogQm9vbSEKIAotICAgICAgICBVc2luZyBgc2lkZV9lZmZlY3RgIHRvIHJldHVybiBhIHNlcXVlbmNlIG9mIHZhbHVlczoKKyAgICAgICAgVXNpbmcgOmF0dHI6YHNpZGVfZWZmZWN0YCB0byByZXR1cm4gYSBzZXF1ZW5jZSBvZiB2YWx1ZXM6CiAKICAgICAgICAgICAgID4+PiBtb2NrID0gTW9jaygpCiAgICAgICAgICAgICA+Pj4gbW9jay5zaWRlX2VmZmVjdCA9IFszLCAyLCAxXQogICAgICAgICAgICAgPj4+IG1vY2soKSwgbW9jaygpLCBtb2NrKCkKICAgICAgICAgICAgICgzLCAyLCAxKQogCi0gICAgICAgIFRoZSBgc2lkZV9lZmZlY3RgIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIHRoZSBzYW1lIGFyZ3VtZW50cyBhcyB0aGUKLSAgICAgICAgbW9jayAoc28gaXQgaXMgd2lzZSBmb3IgaXQgdG8gdGFrZSBhcmJpdHJhcnkgYXJncyBhbmQga2V5d29yZAotICAgICAgICBhcmd1bWVudHMpIGFuZCB3aGF0ZXZlciBpdCByZXR1cm5zIGlzIHVzZWQgYXMgdGhlIHJldHVybiB2YWx1ZSBmb3IKLSAgICAgICAgdGhlIGNhbGwuIFRoZSBleGNlcHRpb24gaXMgaWYgYHNpZGVfZWZmZWN0YCByZXR1cm5zIDpkYXRhOmBERUZBVUxUYCwKLSAgICAgICAgaW4gd2hpY2ggY2FzZSB0aGUgbm9ybWFsIDphdHRyOmByZXR1cm5fdmFsdWVgIGlzIHVzZWQuCisgICAgICAgIFVzaW5nIGEgY2FsbGFibGU6CiAKICAgICAgICAgICAgID4+PiBtb2NrID0gTW9jayhyZXR1cm5fdmFsdWU9MykKICAgICAgICAgICAgID4+PiBkZWYgc2lkZV9lZmZlY3QoKmFyZ3MsICoqa3dhcmdzKToKQEAgLTUwMSw3ICs1MDEsNyBAQAogICAgICAgICAgICAgPj4+IG1vY2soKQogICAgICAgICAgICAgMwogCi0gICAgICAgIGBzaWRlX2VmZmVjdGAgY2FuIGJlIHNldCBpbiB0aGUgY29uc3RydWN0b3IuIEhlcmUncyBhbiBleGFtcGxlIHRoYXQKKyAgICAgICAgOmF0dHI6YHNpZGVfZWZmZWN0YCBjYW4gYmUgc2V0IGluIHRoZSBjb25zdHJ1Y3Rvci4gSGVyZSdzIGFuIGV4YW1wbGUgdGhhdAogICAgICAgICBhZGRzIG9uZSB0byB0aGUgdmFsdWUgdGhlIG1vY2sgaXMgY2FsbGVkIHdpdGggYW5kIHJldHVybnMgaXQ6CiAKICAgICAgICAgICAgID4+PiBzaWRlX2VmZmVjdCA9IGxhbWJkYSB2YWx1ZTogdmFsdWUgKyAxCkBAIC01MTEsNyArNTExLDcgQEAKICAgICAgICAgICAgID4+PiBtb2NrKC04KQogICAgICAgICAgICAgLTcKIAotICAgICAgICBTZXR0aW5nIGBzaWRlX2VmZmVjdGAgdG8gYE5vbmVgIGNsZWFycyBpdDoKKyAgICAgICAgU2V0dGluZyA6YXR0cjpgc2lkZV9lZmZlY3RgIHRvIGBgTm9uZWBgIGNsZWFycyBpdDoKIAogICAgICAgICAgICAgPj4+IG0gPSBNb2NrKHNpZGVfZWZmZWN0PUtleUVycm9yLCByZXR1cm5fdmFsdWU9MykKICAgICAgICAgICAgID4+PiBtKCkKQEAgLTUyNSwxNCArNTI1LDE0IEBACiAKICAgICAuLiBhdHRyaWJ1dGU6OiBjYWxsX2FyZ3MKIAotICAgICAgICBUaGlzIGlzIGVpdGhlciBgTm9uZWAgKGlmIHRoZSBtb2NrIGhhc24ndCBiZWVuIGNhbGxlZCksIG9yIHRoZQorICAgICAgICBUaGlzIGlzIGVpdGhlciBgYE5vbmVgYCAoaWYgdGhlIG1vY2sgaGFzbid0IGJlZW4gY2FsbGVkKSwgb3IgdGhlCiAgICAgICAgIGFyZ3VtZW50cyB0aGF0IHRoZSBtb2NrIHdhcyBsYXN0IGNhbGxlZCB3aXRoLiBUaGlzIHdpbGwgYmUgaW4gdGhlCiAgICAgICAgIGZvcm0gb2YgYSB0dXBsZTogdGhlIGZpcnN0IG1lbWJlciBpcyBhbnkgb3JkZXJlZCBhcmd1bWVudHMgdGhlIG1vY2sKICAgICAgICAgd2FzIGNhbGxlZCB3aXRoIChvciBhbiBlbXB0eSB0dXBsZSkgYW5kIHRoZSBzZWNvbmQgbWVtYmVyIGlzIGFueQogICAgICAgICBrZXl3b3JkIGFyZ3VtZW50cyAob3IgYW4gZW1wdHkgZGljdGlvbmFyeSkuCiAKICAgICAgICAgICAgID4+PiBtb2NrID0gTW9jayhyZXR1cm5fdmFsdWU9Tm9uZSkKLSAgICAgICAgICAgID4+PiBwcmludCBtb2NrLmNhbGxfYXJncworICAgICAgICAgICAgPj4+IHByaW50KG1vY2suY2FsbF9hcmdzKQogICAgICAgICAgICAgTm9uZQogICAgICAgICAgICAgPj4+IG1vY2soKQogICAgICAgICAgICAgPj4+IG1vY2suY2FsbF9hcmdzCkBAIC01NDgsNyArNTQ4LDcgQEAKICAgICAgICAgICAgID4+PiBtb2NrLmNhbGxfYXJncwogICAgICAgICAgICAgY2FsbCgzLCA0LCA1LCBrZXk9J2Zpc2gnLCBuZXh0PSd3MDB0IScpCiAKLSAgICAgICAgYGNhbGxfYXJnc2AsIGFsb25nIHdpdGggbWVtYmVycyBvZiB0aGUgbGlzdHMgOmF0dHI6YGNhbGxfYXJnc19saXN0YCwKKyAgICAgICAgOmF0dHI6YGNhbGxfYXJnc2AsIGFsb25nIHdpdGggbWVtYmVycyBvZiB0aGUgbGlzdHMgOmF0dHI6YGNhbGxfYXJnc19saXN0YCwKICAgICAgICAgOmF0dHI6YG1ldGhvZF9jYWxsc2AgYW5kIDphdHRyOmBtb2NrX2NhbGxzYCBhcmUgOmRhdGE6YGNhbGxgIG9iamVjdHMuCiAgICAgICAgIFRoZXNlIGFyZSB0dXBsZXMsIHNvIHRoZXkgY2FuIGJlIHVucGFja2VkIHRvIGdldCBhdCB0aGUgaW5kaXZpZHVhbAogICAgICAgICBhcmd1bWVudHMgYW5kIG1ha2UgbW9yZSBjb21wbGV4IGFzc2VydGlvbnMuIFNlZQpAQCAtNTYxLDcgKzU2MSw3IEBACiAgICAgICAgIChzbyB0aGUgbGVuZ3RoIG9mIHRoZSBsaXN0IGlzIHRoZSBudW1iZXIgb2YgdGltZXMgaXQgaGFzIGJlZW4KICAgICAgICAgY2FsbGVkKS4gQmVmb3JlIGFueSBjYWxscyBoYXZlIGJlZW4gbWFkZSBpdCBpcyBhbiBlbXB0eSBsaXN0LiBUaGUKICAgICAgICAgOmRhdGE6YGNhbGxgIG9iamVjdCBjYW4gYmUgdXNlZCBmb3IgY29udmVuaWVudGx5IGNvbnN0cnVjdGluZyBsaXN0cyBvZgotICAgICAgICBjYWxscyB0byBjb21wYXJlIHdpdGggYGNhbGxfYXJnc19saXN0YC4KKyAgICAgICAgY2FsbHMgdG8gY29tcGFyZSB3aXRoIDphdHRyOmBjYWxsX2FyZ3NfbGlzdGAuCiAKICAgICAgICAgICAgID4+PiBtb2NrID0gTW9jayhyZXR1cm5fdmFsdWU9Tm9uZSkKICAgICAgICAgICAgID4+PiBtb2NrKCkKQEAgLTU3Myw3ICs1NzMsNyBAQAogICAgICAgICAgICAgPj4+IG1vY2suY2FsbF9hcmdzX2xpc3QgPT0gZXhwZWN0ZWQKICAgICAgICAgICAgIFRydWUKIAotICAgICAgICBNZW1iZXJzIG9mIGBjYWxsX2FyZ3NfbGlzdGAgYXJlIDpkYXRhOmBjYWxsYCBvYmplY3RzLiBUaGVzZSBjYW4gYmUKKyAgICAgICAgTWVtYmVycyBvZiA6YXR0cjpgY2FsbF9hcmdzX2xpc3RgIGFyZSA6ZGF0YTpgY2FsbGAgb2JqZWN0cy4gVGhlc2UgY2FuIGJlCiAgICAgICAgIHVucGFja2VkIGFzIHR1cGxlcyB0byBnZXQgYXQgdGhlIGluZGl2aWR1YWwgYXJndW1lbnRzLiBTZWUKICAgICAgICAgOnJlZjpgY2FsbHMgYXMgdHVwbGVzIDxjYWxscy1hcy10dXBsZXM+YC4KIApAQCAtNTkxLDE1ICs1OTEsMTUgQEAKICAgICAgICAgICAgID4+PiBtb2NrLm1ldGhvZF9jYWxscwogICAgICAgICAgICAgW2NhbGwubWV0aG9kKCksIGNhbGwucHJvcGVydHkubWV0aG9kLmF0dHJpYnV0ZSgpXQogCi0gICAgICAgIE1lbWJlcnMgb2YgYG1ldGhvZF9jYWxsc2AgYXJlIDpkYXRhOmBjYWxsYCBvYmplY3RzLiBUaGVzZSBjYW4gYmUKKyAgICAgICAgTWVtYmVycyBvZiA6YXR0cjpgbWV0aG9kX2NhbGxzYCBhcmUgOmRhdGE6YGNhbGxgIG9iamVjdHMuIFRoZXNlIGNhbiBiZQogICAgICAgICB1bnBhY2tlZCBhcyB0dXBsZXMgdG8gZ2V0IGF0IHRoZSBpbmRpdmlkdWFsIGFyZ3VtZW50cy4gU2VlCiAgICAgICAgIDpyZWY6YGNhbGxzIGFzIHR1cGxlcyA8Y2FsbHMtYXMtdHVwbGVzPmAuCiAKIAogICAgIC4uIGF0dHJpYnV0ZTo6IG1vY2tfY2FsbHMKIAotICAgICAgICBgbW9ja19jYWxsc2AgcmVjb3JkcyAqYWxsKiBjYWxscyB0byB0aGUgbW9jayBvYmplY3QsIGl0cyBtZXRob2RzLCBtYWdpYwotICAgICAgICBtZXRob2RzICphbmQqIHJldHVybiB2YWx1ZSBtb2Nrcy4KKyAgICAgICAgOmF0dHI6YG1vY2tfY2FsbHNgIHJlY29yZHMgKmFsbCogY2FsbHMgdG8gdGhlIG1vY2sgb2JqZWN0LCBpdHMgbWV0aG9kcywKKyAgICAgICAgbWFnaWMgbWV0aG9kcyAqYW5kKiByZXR1cm4gdmFsdWUgbW9ja3MuCiAKICAgICAgICAgICAgID4+PiBtb2NrID0gTWFnaWNNb2NrKCkKICAgICAgICAgICAgID4+PiByZXN1bHQgPSBtb2NrKDEsIDIsIDMpCkBAIC02MTYsMjQgKzYxNiwyNCBAQAogICAgICAgICAgICAgPj4+IG1vY2subW9ja19jYWxscyA9PSBleHBlY3RlZAogICAgICAgICAgICAgVHJ1ZQogCi0gICAgICAgIE1lbWJlcnMgb2YgYG1vY2tfY2FsbHNgIGFyZSA6ZGF0YTpgY2FsbGAgb2JqZWN0cy4gVGhlc2UgY2FuIGJlCisgICAgICAgIE1lbWJlcnMgb2YgOmF0dHI6YG1vY2tfY2FsbHNgIGFyZSA6ZGF0YTpgY2FsbGAgb2JqZWN0cy4gVGhlc2UgY2FuIGJlCiAgICAgICAgIHVucGFja2VkIGFzIHR1cGxlcyB0byBnZXQgYXQgdGhlIGluZGl2aWR1YWwgYXJndW1lbnRzLiBTZWUKICAgICAgICAgOnJlZjpgY2FsbHMgYXMgdHVwbGVzIDxjYWxscy1hcy10dXBsZXM+YC4KIAogCiAgICAgLi4gYXR0cmlidXRlOjogX19jbGFzc19fCiAKLSAgICAgICAgTm9ybWFsbHkgdGhlIGBfX2NsYXNzX19gIGF0dHJpYnV0ZSBvZiBhbiBvYmplY3Qgd2lsbCByZXR1cm4gaXRzIHR5cGUuCi0gICAgICAgIEZvciBhIG1vY2sgb2JqZWN0IHdpdGggYSBgc3BlY2AgYF9fY2xhc3NfX2AgcmV0dXJucyB0aGUgc3BlYyBjbGFzcwotICAgICAgICBpbnN0ZWFkLiBUaGlzIGFsbG93cyBtb2NrIG9iamVjdHMgdG8gcGFzcyBgaXNpbnN0YW5jZWAgdGVzdHMgZm9yIHRoZQorICAgICAgICBOb3JtYWxseSB0aGUgOmF0dHI6YF9fY2xhc3NfX2AgYXR0cmlidXRlIG9mIGFuIG9iamVjdCB3aWxsIHJldHVybiBpdHMgdHlwZS4KKyAgICAgICAgRm9yIGEgbW9jayBvYmplY3Qgd2l0aCBhIDphdHRyOmBzcGVjYCwgYGBfX2NsYXNzX19gYCByZXR1cm5zIHRoZSBzcGVjIGNsYXNzCisgICAgICAgIGluc3RlYWQuIFRoaXMgYWxsb3dzIG1vY2sgb2JqZWN0cyB0byBwYXNzIDpmdW5jOmBpc2luc3RhbmNlYCB0ZXN0cyBmb3IgdGhlCiAgICAgICAgIG9iamVjdCB0aGV5IGFyZSByZXBsYWNpbmcgLyBtYXNxdWVyYWRpbmcgYXM6CiAKICAgICAgICAgICAgID4+PiBtb2NrID0gTW9jayhzcGVjPTMpCiAgICAgICAgICAgICA+Pj4gaXNpbnN0YW5jZShtb2NrLCBpbnQpCiAgICAgICAgICAgICBUcnVlCiAKLSAgICAgICAgYF9fY2xhc3NfX2AgaXMgYXNzaWduYWJsZSB0bywgdGhpcyBhbGxvd3MgYSBtb2NrIHRvIHBhc3MgYW4KLSAgICAgICAgYGlzaW5zdGFuY2VgIGNoZWNrIHdpdGhvdXQgZm9yY2luZyB5b3UgdG8gdXNlIGEgc3BlYzoKKyAgICAgICAgOmF0dHI6YF9fY2xhc3NfX2AgaXMgYXNzaWduYWJsZSB0bywgdGhpcyBhbGxvd3MgYSBtb2NrIHRvIHBhc3MgYW4KKyAgICAgICAgOmZ1bmM6YGlzaW5zdGFuY2VgIGNoZWNrIHdpdGhvdXQgZm9yY2luZyB5b3UgdG8gdXNlIGEgc3BlYzoKIAogICAgICAgICAgICAgPj4+IG1vY2sgPSBNb2NrKCkKICAgICAgICAgICAgID4+PiBtb2NrLl9fY2xhc3NfXyA9IGRpY3QKQEAgLTY0MiwxMiArNjQyLDEyIEBACiAKIC4uIGNsYXNzOjogTm9uQ2FsbGFibGVNb2NrKHNwZWM9Tm9uZSwgd3JhcHM9Tm9uZSwgbmFtZT1Ob25lLCBzcGVjX3NldD1Ob25lLCAqKmt3YXJncykKIAotICAgIEEgbm9uLWNhbGxhYmxlIHZlcnNpb24gb2YgYE1vY2tgLiBUaGUgY29uc3RydWN0b3IgcGFyYW1ldGVycyBoYXZlIHRoZSBzYW1lCi0gICAgbWVhbmluZyBvZiBgTW9ja2AsIHdpdGggdGhlIGV4Y2VwdGlvbiBvZiBgcmV0dXJuX3ZhbHVlYCBhbmQgYHNpZGVfZWZmZWN0YAorICAgIEEgbm9uLWNhbGxhYmxlIHZlcnNpb24gb2YgOmNsYXNzOmBNb2NrYC4gVGhlIGNvbnN0cnVjdG9yIHBhcmFtZXRlcnMgaGF2ZSB0aGUgc2FtZQorICAgIG1lYW5pbmcgb2YgOmNsYXNzOmBNb2NrYCwgd2l0aCB0aGUgZXhjZXB0aW9uIG9mICpyZXR1cm5fdmFsdWUqIGFuZCAqc2lkZV9lZmZlY3QqCiAgICAgd2hpY2ggaGF2ZSBubyBtZWFuaW5nIG9uIGEgbm9uLWNhbGxhYmxlIG1vY2suCiAKLU1vY2sgb2JqZWN0cyB0aGF0IHVzZSBhIGNsYXNzIG9yIGFuIGluc3RhbmNlIGFzIGEgYHNwZWNgIG9yIGBzcGVjX3NldGAgYXJlIGFibGUKLXRvIHBhc3MgYGlzaW5zdGFuY2VgIHRlc3RzOgorTW9jayBvYmplY3RzIHRoYXQgdXNlIGEgY2xhc3Mgb3IgYW4gaW5zdGFuY2UgYXMgYSA6YXR0cjpgc3BlY2Agb3IKKzphdHRyOmBzcGVjX3NldGAgYXJlIGFibGUgdG8gcGFzcyA6ZnVuYzpgaXNpbnN0YW5jZWAgdGVzdHM6CiAKICAgICA+Pj4gbW9jayA9IE1vY2soc3BlYz1Tb21lQ2xhc3MpCiAgICAgPj4+IGlzaW5zdGFuY2UobW9jaywgU29tZUNsYXNzKQpAQCAtNjU2LDExICs2NTYsMTEgQEAKICAgICA+Pj4gaXNpbnN0YW5jZShtb2NrLCBTb21lQ2xhc3MpCiAgICAgVHJ1ZQogCi1UaGUgYE1vY2tgIGNsYXNzZXMgaGF2ZSBzdXBwb3J0IGZvciBtb2NraW5nIG1hZ2ljIG1ldGhvZHMuIFNlZSA6cmVmOmBtYWdpYworVGhlIDpjbGFzczpgTW9ja2AgY2xhc3NlcyBoYXZlIHN1cHBvcnQgZm9yIG1vY2tpbmcgbWFnaWMgbWV0aG9kcy4gU2VlIDpyZWY6YG1hZ2ljCiBtZXRob2RzIDxtYWdpYy1tZXRob2RzPmAgZm9yIHRoZSBmdWxsIGRldGFpbHMuCiAKIFRoZSBtb2NrIGNsYXNzZXMgYW5kIHRoZSA6ZnVuYzpgcGF0Y2hgIGRlY29yYXRvcnMgYWxsIHRha2UgYXJiaXRyYXJ5IGtleXdvcmQKLWFyZ3VtZW50cyBmb3IgY29uZmlndXJhdGlvbi4gRm9yIHRoZSBgcGF0Y2hgIGRlY29yYXRvcnMgdGhlIGtleXdvcmRzIGFyZQorYXJndW1lbnRzIGZvciBjb25maWd1cmF0aW9uLiBGb3IgdGhlIDpmdW5jOmBwYXRjaGAgZGVjb3JhdG9ycyB0aGUga2V5d29yZHMgYXJlCiBwYXNzZWQgdG8gdGhlIGNvbnN0cnVjdG9yIG9mIHRoZSBtb2NrIGJlaW5nIGNyZWF0ZWQuIFRoZSBrZXl3b3JkIGFyZ3VtZW50cwogYXJlIGZvciBjb25maWd1cmluZyBhdHRyaWJ1dGVzIG9mIHRoZSBtb2NrOgogCkBAIC02NzIsNyArNjcyLDcgQEAKIAogVGhlIHJldHVybiB2YWx1ZSBhbmQgc2lkZSBlZmZlY3Qgb2YgY2hpbGQgbW9ja3MgY2FuIGJlIHNldCBpbiB0aGUgc2FtZSB3YXksCiB1c2luZyBkb3R0ZWQgbm90YXRpb24uIEFzIHlvdSBjYW4ndCB1c2UgZG90dGVkIG5hbWVzIGRpcmVjdGx5IGluIGEgY2FsbCB5b3UKLWhhdmUgdG8gY3JlYXRlIGEgZGljdGlvbmFyeSBhbmQgdW5wYWNrIGl0IHVzaW5nIGAqKmA6CitoYXZlIHRvIGNyZWF0ZSBhIGRpY3Rpb25hcnkgYW5kIHVucGFjayBpdCB1c2luZyBgYCoqYGA6CiAKICAgICA+Pj4gYXR0cnMgPSB7J21ldGhvZC5yZXR1cm5fdmFsdWUnOiAzLCAnb3RoZXIuc2lkZV9lZmZlY3QnOiBLZXlFcnJvcn0KICAgICA+Pj4gbW9jayA9IE1vY2soc29tZV9hdHRyaWJ1dGU9J2VnZ3MnLCAqKmF0dHJzKQpAQCAtNjg1LDE0ICs2ODUsMzUgQEAKICAgICAgIC4uLgogICAgIEtleUVycm9yCiAKK0EgY2FsbGFibGUgbW9jayB3aGljaCB3YXMgY3JlYXRlZCB3aXRoIGEgKnNwZWMqIChvciBhICpzcGVjX3NldCopIHdpbGwKK2ludHJvc3BlY3QgdGhlIHNwZWNpZmljYXRpb24gb2JqZWN0J3Mgc2lnbmF0dXJlIHdoZW4gbWF0Y2hpbmcgY2FsbHMgdG8KK3RoZSBtb2NrLiAgVGhlcmVmb3JlLCBpdCBjYW4gbWF0Y2ggdGhlIGFjdHVhbCBjYWxsJ3MgYXJndW1lbnRzIHJlZ2FyZGxlc3MKK29mIHdoZXRoZXIgdGhleSB3ZXJlIHBhc3NlZCBwb3NpdGlvbmFsbHkgb3IgYnkgbmFtZTo6CisKKyAgID4+PiBkZWYgZihhLCBiLCBjKTogcGFzcworICAgLi4uCisgICA+Pj4gbW9jayA9IE1vY2soc3BlYz1mKQorICAgPj4+IG1vY2soMSwgMiwgYz0zKQorICAgPE1vY2sgbmFtZT0nbW9jaygpJyBpZD0nMTQwMTYxNTgwNDU2NTc2Jz4KKyAgID4+PiBtb2NrLmFzc2VydF9jYWxsZWRfd2l0aCgxLCAyLCAzKQorICAgPj4+IG1vY2suYXNzZXJ0X2NhbGxlZF93aXRoKGE9MSwgYj0yLCBjPTMpCisKK1RoaXMgYXBwbGllcyB0byA6bWV0aDpgfk1vY2suYXNzZXJ0X2NhbGxlZF93aXRoYCwKKzptZXRoOmB+TW9jay5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aGAsIDptZXRoOmB+TW9jay5hc3NlcnRfaGFzX2NhbGxzYCBhbmQKKzptZXRoOmB+TW9jay5hc3NlcnRfYW55X2NhbGxgLiAgV2hlbiA6cmVmOmBhdXRvLXNwZWNjaW5nYCwgaXQgd2lsbCBhbHNvCithcHBseSB0byBtZXRob2QgY2FsbHMgb24gdGhlIG1vY2sgb2JqZWN0LgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgQWRkZWQgc2lnbmF0dXJlIGludHJvc3BlY3Rpb24gb24gc3BlY2NlZCBhbmQgYXV0b3NwZWNjZWQgbW9jayBvYmplY3RzLgorCiAKIC4uIGNsYXNzOjogUHJvcGVydHlNb2NrKCphcmdzLCAqKmt3YXJncykKIAogICAgQSBtb2NrIGludGVuZGVkIHRvIGJlIHVzZWQgYXMgYSBwcm9wZXJ0eSwgb3Igb3RoZXIgZGVzY3JpcHRvciwgb24gYSBjbGFzcy4KLSAgIGBQcm9wZXJ0eU1vY2tgIHByb3ZpZGVzIGBfX2dldF9fYCBhbmQgYF9fc2V0X19gIG1ldGhvZHMgc28geW91IGNhbiBzcGVjaWZ5Ci0gICBhIHJldHVybiB2YWx1ZSB3aGVuIGl0IGlzIGZldGNoZWQuCisgICA6Y2xhc3M6YFByb3BlcnR5TW9ja2AgcHJvdmlkZXMgOm1ldGg6YF9fZ2V0X19gIGFuZCA6bWV0aDpgX19zZXRfX2AgbWV0aG9kcworICAgc28geW91IGNhbiBzcGVjaWZ5IGEgcmV0dXJuIHZhbHVlIHdoZW4gaXQgaXMgZmV0Y2hlZC4KIAotICAgRmV0Y2hpbmcgYSBgUHJvcGVydHlNb2NrYCBpbnN0YW5jZSBmcm9tIGFuIG9iamVjdCBjYWxscyB0aGUgbW9jaywgd2l0aAorICAgRmV0Y2hpbmcgYSA6Y2xhc3M6YFByb3BlcnR5TW9ja2AgaW5zdGFuY2UgZnJvbSBhbiBvYmplY3QgY2FsbHMgdGhlIG1vY2ssIHdpdGgKICAgIG5vIGFyZ3MuIFNldHRpbmcgaXQgY2FsbHMgdGhlIG1vY2sgd2l0aCB0aGUgdmFsdWUgYmVpbmcgc2V0LgogCiAgICAgICAgID4+PiBjbGFzcyBGb286CkBAIC03MDYsNyArNzI3LDcgQEAKICAgICAgICAgPj4+IHdpdGggcGF0Y2goJ19fbWFpbl9fLkZvby5mb28nLCBuZXdfY2FsbGFibGU9UHJvcGVydHlNb2NrKSBhcyBtb2NrX2ZvbzoKICAgICAgICAgLi4uICAgICBtb2NrX2Zvby5yZXR1cm5fdmFsdWUgPSAnbW9ja2l0eS1tb2NrJwogICAgICAgICAuLi4gICAgIHRoaXNfZm9vID0gRm9vKCkKLSAgICAgICAgLi4uICAgICBwcmludCB0aGlzX2Zvby5mb28KKyAgICAgICAgLi4uICAgICBwcmludCh0aGlzX2Zvby5mb28pCiAgICAgICAgIC4uLiAgICAgdGhpc19mb28uZm9vID0gNgogICAgICAgICAuLi4KICAgICAgICAgbW9ja2l0eS1tb2NrCkBAIC03MTQsNyArNzM1LDcgQEAKICAgICAgICAgW2NhbGwoKSwgY2FsbCg2KV0KIAogQmVjYXVzZSBvZiB0aGUgd2F5IG1vY2sgYXR0cmlidXRlcyBhcmUgc3RvcmVkIHlvdSBjYW4ndCBkaXJlY3RseSBhdHRhY2ggYQotYFByb3BlcnR5TW9ja2AgdG8gYSBtb2NrIG9iamVjdC4gSW5zdGVhZCB5b3UgY2FuIGF0dGFjaCBpdCB0byB0aGUgbW9jayB0eXBlCis6Y2xhc3M6YFByb3BlcnR5TW9ja2AgdG8gYSBtb2NrIG9iamVjdC4gSW5zdGVhZCB5b3UgY2FuIGF0dGFjaCBpdCB0byB0aGUgbW9jayB0eXBlCiBvYmplY3Q6OgogCiAgICAgPj4+IG0gPSBNYWdpY01vY2soKQpAQCAtNzM4LDcgKzc1OSw3IEBACiBsaWtlIDphdHRyOmB+TW9jay5jYWxsX2FyZ3NgIGFuZCA6YXR0cjpgfk1vY2suY2FsbF9hcmdzX2xpc3RgLgogCiBJZiA6YXR0cjpgfk1vY2suc2lkZV9lZmZlY3RgIGlzIHNldCB0aGVuIGl0IHdpbGwgYmUgY2FsbGVkIGFmdGVyIHRoZSBjYWxsIGhhcwotYmVlbiByZWNvcmRlZCwgc28gaWYgYHNpZGVfZWZmZWN0YCByYWlzZXMgYW4gZXhjZXB0aW9uIHRoZSBjYWxsIGlzIHN0aWxsCitiZWVuIHJlY29yZGVkLCBzbyBpZiA6YXR0cjpgc2lkZV9lZmZlY3RgIHJhaXNlcyBhbiBleGNlcHRpb24gdGhlIGNhbGwgaXMgc3RpbGwKIHJlY29yZGVkLgogCiBUaGUgc2ltcGxlc3Qgd2F5IHRvIG1ha2UgYSBtb2NrIHJhaXNlIGFuIGV4Y2VwdGlvbiB3aGVuIGNhbGxlZCBpcyB0byBtYWtlCkBAIC03NTksOCArNzgwLDggQEAKICAgICAgICAgPj4+IG0ubW9ja19jYWxscwogICAgICAgICBbY2FsbCgxLCAyLCAzKSwgY2FsbCgndHdvJywgJ3RocmVlJywgJ2ZvdXInKV0KIAotSWYgYHNpZGVfZWZmZWN0YCBpcyBhIGZ1bmN0aW9uIHRoZW4gd2hhdGV2ZXIgdGhhdCBmdW5jdGlvbiByZXR1cm5zIGlzIHdoYXQKLWNhbGxzIHRvIHRoZSBtb2NrIHJldHVybi4gVGhlIGBzaWRlX2VmZmVjdGAgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggdGhlCitJZiA6YXR0cjpgc2lkZV9lZmZlY3RgIGlzIGEgZnVuY3Rpb24gdGhlbiB3aGF0ZXZlciB0aGF0IGZ1bmN0aW9uIHJldHVybnMgaXMgd2hhdAorY2FsbHMgdG8gdGhlIG1vY2sgcmV0dXJuLiBUaGUgOmF0dHI6YHNpZGVfZWZmZWN0YCBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCB0aGUKIHNhbWUgYXJndW1lbnRzIGFzIHRoZSBtb2NrLiBUaGlzIGFsbG93cyB5b3UgdG8gdmFyeSB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZQogY2FsbCBkeW5hbWljYWxseSwgYmFzZWQgb24gdGhlIGlucHV0OgogCkBAIC03NzcsNyArNzk4LDcgQEAKIAogSWYgeW91IHdhbnQgdGhlIG1vY2sgdG8gc3RpbGwgcmV0dXJuIHRoZSBkZWZhdWx0IHJldHVybiB2YWx1ZSAoYSBuZXcgbW9jayksIG9yCiBhbnkgc2V0IHJldHVybiB2YWx1ZSwgdGhlbiB0aGVyZSBhcmUgdHdvIHdheXMgb2YgZG9pbmcgdGhpcy4gRWl0aGVyIHJldHVybgotYG1vY2sucmV0dXJuX3ZhbHVlYCBmcm9tIGluc2lkZSBgc2lkZV9lZmZlY3RgLCBvciByZXR1cm4gOmRhdGE6YERFRkFVTFRgOgorOmF0dHI6YG1vY2sucmV0dXJuX3ZhbHVlYCBmcm9tIGluc2lkZSA6YXR0cjpgc2lkZV9lZmZlY3RgLCBvciByZXR1cm4gOmRhdGE6YERFRkFVTFRgOgogCiAgICAgICAgID4+PiBtID0gTWFnaWNNb2NrKCkKICAgICAgICAgPj4+IGRlZiBzaWRlX2VmZmVjdCgqYXJncywgKiprd2FyZ3MpOgpAQCAtNzk0LDggKzgxNSw4IEBACiAgICAgICAgID4+PiBtKCkKICAgICAgICAgMwogCi1UbyByZW1vdmUgYSBgc2lkZV9lZmZlY3RgLCBhbmQgcmV0dXJuIHRvIHRoZSBkZWZhdWx0IGJlaGF2aW91ciwgc2V0IHRoZQotYHNpZGVfZWZmZWN0YCB0byBgTm9uZWA6CitUbyByZW1vdmUgYSA6YXR0cjpgc2lkZV9lZmZlY3RgLCBhbmQgcmV0dXJuIHRvIHRoZSBkZWZhdWx0IGJlaGF2aW91ciwgc2V0IHRoZQorOmF0dHI6YHNpZGVfZWZmZWN0YCB0byBgYE5vbmVgYDoKIAogICAgICAgICA+Pj4gbSA9IE1hZ2ljTW9jayhyZXR1cm5fdmFsdWU9NikKICAgICAgICAgPj4+IGRlZiBzaWRlX2VmZmVjdCgqYXJncywgKiprd2FyZ3MpOgpAQCAtODA4LDkgKzgyOSw5IEBACiAgICAgICAgID4+PiBtKCkKICAgICAgICAgNgogCi1UaGUgYHNpZGVfZWZmZWN0YCBjYW4gYWxzbyBiZSBhbnkgaXRlcmFibGUgb2JqZWN0LiBSZXBlYXRlZCBjYWxscyB0byB0aGUgbW9jaworVGhlIDphdHRyOmBzaWRlX2VmZmVjdGAgY2FuIGFsc28gYmUgYW55IGl0ZXJhYmxlIG9iamVjdC4gUmVwZWF0ZWQgY2FsbHMgdG8gdGhlIG1vY2sKIHdpbGwgcmV0dXJuIHZhbHVlcyBmcm9tIHRoZSBpdGVyYWJsZSAodW50aWwgdGhlIGl0ZXJhYmxlIGlzIGV4aGF1c3RlZCBhbmQKLWEgYFN0b3BJdGVyYXRpb25gIGlzIHJhaXNlZCk6CithIDpleGM6YFN0b3BJdGVyYXRpb25gIGlzIHJhaXNlZCk6CiAKICAgICAgICAgPj4+IG0gPSBNYWdpY01vY2soc2lkZV9lZmZlY3Q9WzEsIDIsIDNdKQogICAgICAgICA+Pj4gbSgpCkBAIC04NDcsMTIgKzg2OCwxMiBAQAogTW9jayBvYmplY3RzIGNyZWF0ZSBhdHRyaWJ1dGVzIG9uIGRlbWFuZC4gVGhpcyBhbGxvd3MgdGhlbSB0byBwcmV0ZW5kIHRvIGJlCiBvYmplY3RzIG9mIGFueSB0eXBlLgogCi1Zb3UgbWF5IHdhbnQgYSBtb2NrIG9iamVjdCB0byByZXR1cm4gYEZhbHNlYCB0byBhIGBoYXNhdHRyYCBjYWxsLCBvciByYWlzZSBhbgotYEF0dHJpYnV0ZUVycm9yYCB3aGVuIGFuIGF0dHJpYnV0ZSBpcyBmZXRjaGVkLiBZb3UgY2FuIGRvIHRoaXMgYnkgcHJvdmlkaW5nCi1hbiBvYmplY3QgYXMgYSBgc3BlY2AgZm9yIGEgbW9jaywgYnV0IHRoYXQgaXNuJ3QgYWx3YXlzIGNvbnZlbmllbnQuCitZb3UgbWF5IHdhbnQgYSBtb2NrIG9iamVjdCB0byByZXR1cm4gYGBGYWxzZWBgIHRvIGEgOmZ1bmM6YGhhc2F0dHJgIGNhbGwsIG9yIHJhaXNlIGFuCis6ZXhjOmBBdHRyaWJ1dGVFcnJvcmAgd2hlbiBhbiBhdHRyaWJ1dGUgaXMgZmV0Y2hlZC4gWW91IGNhbiBkbyB0aGlzIGJ5IHByb3ZpZGluZworYW4gb2JqZWN0IGFzIGEgOmF0dHI6YHNwZWNgIGZvciBhIG1vY2ssIGJ1dCB0aGF0IGlzbid0IGFsd2F5cyBjb252ZW5pZW50LgogCiBZb3UgImJsb2NrIiBhdHRyaWJ1dGVzIGJ5IGRlbGV0aW5nIHRoZW0uIE9uY2UgZGVsZXRlZCwgYWNjZXNzaW5nIGFuIGF0dHJpYnV0ZQotd2lsbCByYWlzZSBhbiBgQXR0cmlidXRlRXJyb3JgLgord2lsbCByYWlzZSBhbiA6ZXhjOmBBdHRyaWJ1dGVFcnJvcmAuCiAKICAgICA+Pj4gbW9jayA9IE1hZ2ljTW9jaygpCiAgICAgPj4+IGhhc2F0dHIobW9jaywgJ20nKQpAQCAtOTM4LDcgKzk1OSw3IEBACiAKIC4uIFsjXSBUaGUgb25seSBleGNlcHRpb25zIGFyZSBtYWdpYyBtZXRob2RzIGFuZCBhdHRyaWJ1dGVzICh0aG9zZSB0aGF0IGhhdmUKICAgICAgICBsZWFkaW5nIGFuZCB0cmFpbGluZyBkb3VibGUgdW5kZXJzY29yZXMpLiBNb2NrIGRvZXNuJ3QgY3JlYXRlIHRoZXNlIGJ1dAotICAgICAgIGluc3RlYWQgcmFpc2VzIGFuIGBgQXR0cmlidXRlRXJyb3JgYC4gVGhpcyBpcyBiZWNhdXNlIHRoZSBpbnRlcnByZXRlcgorICAgICAgIGluc3RlYWQgcmFpc2VzIGFuIDpleGM6YEF0dHJpYnV0ZUVycm9yYC4gVGhpcyBpcyBiZWNhdXNlIHRoZSBpbnRlcnByZXRlcgogICAgICAgIHdpbGwgb2Z0ZW4gaW1wbGljaXRseSByZXF1ZXN0IHRoZXNlIG1ldGhvZHMsIGFuZCBnZXRzICp2ZXJ5KiBjb25mdXNlZCB0bwogICAgICAgIGdldCBhIG5ldyBNb2NrIG9iamVjdCB3aGVuIGl0IGV4cGVjdHMgYSBtYWdpYyBtZXRob2QuIElmIHlvdSBuZWVkIG1hZ2ljCiAgICAgICAgbWV0aG9kIHN1cHBvcnQgc2VlIDpyZWY6YG1hZ2ljIG1ldGhvZHMgPG1hZ2ljLW1ldGhvZHM+YC4KQEAgLTk1OCw3OCArOTc5LDc4IEBACiAKIC4uIG5vdGU6OgogCi0gICAgYHBhdGNoYCBpcyBzdHJhaWdodGZvcndhcmQgdG8gdXNlLiBUaGUga2V5IGlzIHRvIGRvIHRoZSBwYXRjaGluZyBpbiB0aGUKKyAgICA6ZnVuYzpgcGF0Y2hgIGlzIHN0cmFpZ2h0Zm9yd2FyZCB0byB1c2UuIFRoZSBrZXkgaXMgdG8gZG8gdGhlIHBhdGNoaW5nIGluIHRoZQogICAgIHJpZ2h0IG5hbWVzcGFjZS4gU2VlIHRoZSBzZWN0aW9uIGB3aGVyZSB0byBwYXRjaGBfLgogCiAuLiBmdW5jdGlvbjo6IHBhdGNoKHRhcmdldCwgbmV3PURFRkFVTFQsIHNwZWM9Tm9uZSwgY3JlYXRlPUZhbHNlLCBzcGVjX3NldD1Ob25lLCBhdXRvc3BlYz1Ob25lLCBuZXdfY2FsbGFibGU9Tm9uZSwgKiprd2FyZ3MpCiAKLSAgICBgcGF0Y2hgIGFjdHMgYXMgYSBmdW5jdGlvbiBkZWNvcmF0b3IsIGNsYXNzIGRlY29yYXRvciBvciBhIGNvbnRleHQKLSAgICBtYW5hZ2VyLiBJbnNpZGUgdGhlIGJvZHkgb2YgdGhlIGZ1bmN0aW9uIG9yIHdpdGggc3RhdGVtZW50LCB0aGUgYHRhcmdldGAKLSAgICBpcyBwYXRjaGVkIHdpdGggYSBgbmV3YCBvYmplY3QuIFdoZW4gdGhlIGZ1bmN0aW9uL3dpdGggc3RhdGVtZW50IGV4aXRzCisgICAgOmZ1bmM6YHBhdGNoYCBhY3RzIGFzIGEgZnVuY3Rpb24gZGVjb3JhdG9yLCBjbGFzcyBkZWNvcmF0b3Igb3IgYSBjb250ZXh0CisgICAgbWFuYWdlci4gSW5zaWRlIHRoZSBib2R5IG9mIHRoZSBmdW5jdGlvbiBvciB3aXRoIHN0YXRlbWVudCwgdGhlICp0YXJnZXQqCisgICAgaXMgcGF0Y2hlZCB3aXRoIGEgKm5ldyogb2JqZWN0LiBXaGVuIHRoZSBmdW5jdGlvbi93aXRoIHN0YXRlbWVudCBleGl0cwogICAgIHRoZSBwYXRjaCBpcyB1bmRvbmUuCiAKLSAgICBJZiBgbmV3YCBpcyBvbWl0dGVkLCB0aGVuIHRoZSB0YXJnZXQgaXMgcmVwbGFjZWQgd2l0aCBhCi0gICAgOmNsYXNzOmBNYWdpY01vY2tgLiBJZiBgcGF0Y2hgIGlzIHVzZWQgYXMgYSBkZWNvcmF0b3IgYW5kIGBuZXdgIGlzCisgICAgSWYgKm5ldyogaXMgb21pdHRlZCwgdGhlbiB0aGUgdGFyZ2V0IGlzIHJlcGxhY2VkIHdpdGggYQorICAgIDpjbGFzczpgTWFnaWNNb2NrYC4gSWYgOmZ1bmM6YHBhdGNoYCBpcyB1c2VkIGFzIGEgZGVjb3JhdG9yIGFuZCAqbmV3KiBpcwogICAgIG9taXR0ZWQsIHRoZSBjcmVhdGVkIG1vY2sgaXMgcGFzc2VkIGluIGFzIGFuIGV4dHJhIGFyZ3VtZW50IHRvIHRoZQotICAgIGRlY29yYXRlZCBmdW5jdGlvbi4gSWYgYHBhdGNoYCBpcyB1c2VkIGFzIGEgY29udGV4dCBtYW5hZ2VyIHRoZSBjcmVhdGVkCisgICAgZGVjb3JhdGVkIGZ1bmN0aW9uLiBJZiA6ZnVuYzpgcGF0Y2hgIGlzIHVzZWQgYXMgYSBjb250ZXh0IG1hbmFnZXIgdGhlIGNyZWF0ZWQKICAgICBtb2NrIGlzIHJldHVybmVkIGJ5IHRoZSBjb250ZXh0IG1hbmFnZXIuCiAKLSAgICBgdGFyZ2V0YCBzaG91bGQgYmUgYSBzdHJpbmcgaW4gdGhlIGZvcm0gYCdwYWNrYWdlLm1vZHVsZS5DbGFzc05hbWUnYC4gVGhlCi0gICAgYHRhcmdldGAgaXMgaW1wb3J0ZWQgYW5kIHRoZSBzcGVjaWZpZWQgb2JqZWN0IHJlcGxhY2VkIHdpdGggdGhlIGBuZXdgCi0gICAgb2JqZWN0LCBzbyB0aGUgYHRhcmdldGAgbXVzdCBiZSBpbXBvcnRhYmxlIGZyb20gdGhlIGVudmlyb25tZW50IHlvdSBhcmUKLSAgICBjYWxsaW5nIGBwYXRjaGAgZnJvbS4gVGhlIHRhcmdldCBpcyBpbXBvcnRlZCB3aGVuIHRoZSBkZWNvcmF0ZWQgZnVuY3Rpb24KKyAgICAqdGFyZ2V0KiBzaG91bGQgYmUgYSBzdHJpbmcgaW4gdGhlIGZvcm0gYGAncGFja2FnZS5tb2R1bGUuQ2xhc3NOYW1lJ2BgLiBUaGUKKyAgICAqdGFyZ2V0KiBpcyBpbXBvcnRlZCBhbmQgdGhlIHNwZWNpZmllZCBvYmplY3QgcmVwbGFjZWQgd2l0aCB0aGUgKm5ldyoKKyAgICBvYmplY3QsIHNvIHRoZSAqdGFyZ2V0KiBtdXN0IGJlIGltcG9ydGFibGUgZnJvbSB0aGUgZW52aXJvbm1lbnQgeW91IGFyZQorICAgIGNhbGxpbmcgOmZ1bmM6YHBhdGNoYCBmcm9tLiBUaGUgdGFyZ2V0IGlzIGltcG9ydGVkIHdoZW4gdGhlIGRlY29yYXRlZCBmdW5jdGlvbgogICAgIGlzIGV4ZWN1dGVkLCBub3QgYXQgZGVjb3JhdGlvbiB0aW1lLgogCi0gICAgVGhlIGBzcGVjYCBhbmQgYHNwZWNfc2V0YCBrZXl3b3JkIGFyZ3VtZW50cyBhcmUgcGFzc2VkIHRvIHRoZSBgTWFnaWNNb2NrYAorICAgIFRoZSAqc3BlYyogYW5kICpzcGVjX3NldCoga2V5d29yZCBhcmd1bWVudHMgYXJlIHBhc3NlZCB0byB0aGUgOmNsYXNzOmBNYWdpY01vY2tgCiAgICAgaWYgcGF0Y2ggaXMgY3JlYXRpbmcgb25lIGZvciB5b3UuCiAKLSAgICBJbiBhZGRpdGlvbiB5b3UgY2FuIHBhc3MgYHNwZWM9VHJ1ZWAgb3IgYHNwZWNfc2V0PVRydWVgLCB3aGljaCBjYXVzZXMKKyAgICBJbiBhZGRpdGlvbiB5b3UgY2FuIHBhc3MgYGBzcGVjPVRydWVgYCBvciBgYHNwZWNfc2V0PVRydWVgYCwgd2hpY2ggY2F1c2VzCiAgICAgcGF0Y2ggdG8gcGFzcyBpbiB0aGUgb2JqZWN0IGJlaW5nIG1vY2tlZCBhcyB0aGUgc3BlYy9zcGVjX3NldCBvYmplY3QuCiAKLSAgICBgbmV3X2NhbGxhYmxlYCBhbGxvd3MgeW91IHRvIHNwZWNpZnkgYSBkaWZmZXJlbnQgY2xhc3MsIG9yIGNhbGxhYmxlIG9iamVjdCwKLSAgICB0aGF0IHdpbGwgYmUgY2FsbGVkIHRvIGNyZWF0ZSB0aGUgYG5ld2Agb2JqZWN0LiBCeSBkZWZhdWx0IGBNYWdpY01vY2tgIGlzCisgICAgKm5ld19jYWxsYWJsZSogYWxsb3dzIHlvdSB0byBzcGVjaWZ5IGEgZGlmZmVyZW50IGNsYXNzLCBvciBjYWxsYWJsZSBvYmplY3QsCisgICAgdGhhdCB3aWxsIGJlIGNhbGxlZCB0byBjcmVhdGUgdGhlICpuZXcqIG9iamVjdC4gQnkgZGVmYXVsdCA6Y2xhc3M6YE1hZ2ljTW9ja2AgaXMKICAgICB1c2VkLgogCi0gICAgQSBtb3JlIHBvd2VyZnVsIGZvcm0gb2YgYHNwZWNgIGlzIGBhdXRvc3BlY2AuIElmIHlvdSBzZXQgYGF1dG9zcGVjPVRydWVgCi0gICAgdGhlbiB0aGUgbW9jayB3aXRoIGJlIGNyZWF0ZWQgd2l0aCBhIHNwZWMgZnJvbSB0aGUgb2JqZWN0IGJlaW5nIHJlcGxhY2VkLgorICAgIEEgbW9yZSBwb3dlcmZ1bCBmb3JtIG9mICpzcGVjKiBpcyAqYXV0b3NwZWMqLiBJZiB5b3Ugc2V0IGBgYXV0b3NwZWM9VHJ1ZWBgCisgICAgdGhlbiB0aGUgbW9jayB3aWxsIGJlIGNyZWF0ZWQgd2l0aCBhIHNwZWMgZnJvbSB0aGUgb2JqZWN0IGJlaW5nIHJlcGxhY2VkLgogICAgIEFsbCBhdHRyaWJ1dGVzIG9mIHRoZSBtb2NrIHdpbGwgYWxzbyBoYXZlIHRoZSBzcGVjIG9mIHRoZSBjb3JyZXNwb25kaW5nCiAgICAgYXR0cmlidXRlIG9mIHRoZSBvYmplY3QgYmVpbmcgcmVwbGFjZWQuIE1ldGhvZHMgYW5kIGZ1bmN0aW9ucyBiZWluZyBtb2NrZWQKLSAgICB3aWxsIGhhdmUgdGhlaXIgYXJndW1lbnRzIGNoZWNrZWQgYW5kIHdpbGwgcmFpc2UgYSBgVHlwZUVycm9yYCBpZiB0aGV5IGFyZQorICAgIHdpbGwgaGF2ZSB0aGVpciBhcmd1bWVudHMgY2hlY2tlZCBhbmQgd2lsbCByYWlzZSBhIDpleGM6YFR5cGVFcnJvcmAgaWYgdGhleSBhcmUKICAgICBjYWxsZWQgd2l0aCB0aGUgd3Jvbmcgc2lnbmF0dXJlLiBGb3IgbW9ja3MKICAgICByZXBsYWNpbmcgYSBjbGFzcywgdGhlaXIgcmV0dXJuIHZhbHVlICh0aGUgJ2luc3RhbmNlJykgd2lsbCBoYXZlIHRoZSBzYW1lCiAgICAgc3BlYyBhcyB0aGUgY2xhc3MuIFNlZSB0aGUgOmZ1bmM6YGNyZWF0ZV9hdXRvc3BlY2AgZnVuY3Rpb24gYW5kCiAgICAgOnJlZjpgYXV0by1zcGVjY2luZ2AuCiAKLSAgICBJbnN0ZWFkIG9mIGBhdXRvc3BlYz1UcnVlYCB5b3UgY2FuIHBhc3MgYGF1dG9zcGVjPXNvbWVfb2JqZWN0YCB0byB1c2UgYW4KKyAgICBJbnN0ZWFkIG9mIGBgYXV0b3NwZWM9VHJ1ZWBgIHlvdSBjYW4gcGFzcyBgYGF1dG9zcGVjPXNvbWVfb2JqZWN0YGAgdG8gdXNlIGFuCiAgICAgYXJiaXRyYXJ5IG9iamVjdCBhcyB0aGUgc3BlYyBpbnN0ZWFkIG9mIHRoZSBvbmUgYmVpbmcgcmVwbGFjZWQuCiAKLSAgICBCeSBkZWZhdWx0IGBwYXRjaGAgd2lsbCBmYWlsIHRvIHJlcGxhY2UgYXR0cmlidXRlcyB0aGF0IGRvbid0IGV4aXN0LiBJZgotICAgIHlvdSBwYXNzIGluIGBjcmVhdGU9VHJ1ZWAsIGFuZCB0aGUgYXR0cmlidXRlIGRvZXNuJ3QgZXhpc3QsIHBhdGNoIHdpbGwKKyAgICBCeSBkZWZhdWx0IDpmdW5jOmBwYXRjaGAgd2lsbCBmYWlsIHRvIHJlcGxhY2UgYXR0cmlidXRlcyB0aGF0IGRvbid0IGV4aXN0LiBJZgorICAgIHlvdSBwYXNzIGluIGBgY3JlYXRlPVRydWVgYCwgYW5kIHRoZSBhdHRyaWJ1dGUgZG9lc24ndCBleGlzdCwgcGF0Y2ggd2lsbAogICAgIGNyZWF0ZSB0aGUgYXR0cmlidXRlIGZvciB5b3Ugd2hlbiB0aGUgcGF0Y2hlZCBmdW5jdGlvbiBpcyBjYWxsZWQsIGFuZAogICAgIGRlbGV0ZSBpdCBhZ2FpbiBhZnRlcndhcmRzLiBUaGlzIGlzIHVzZWZ1bCBmb3Igd3JpdGluZyB0ZXN0cyBhZ2FpbnN0CiAgICAgYXR0cmlidXRlcyB0aGF0IHlvdXIgcHJvZHVjdGlvbiBjb2RlIGNyZWF0ZXMgYXQgcnVudGltZS4gSXQgaXMgb2ZmIGJ5CiAgICAgZGVmYXVsdCBiZWNhdXNlIGl0IGNhbiBiZSBkYW5nZXJvdXMuIFdpdGggaXQgc3dpdGNoZWQgb24geW91IGNhbiB3cml0ZQogICAgIHBhc3NpbmcgdGVzdHMgYWdhaW5zdCBBUElzIHRoYXQgZG9uJ3QgYWN0dWFsbHkgZXhpc3QhCiAKLSAgICBQYXRjaCBjYW4gYmUgdXNlZCBhcyBhIGBUZXN0Q2FzZWAgY2xhc3MgZGVjb3JhdG9yLiBJdCB3b3JrcyBieQorICAgIFBhdGNoIGNhbiBiZSB1c2VkIGFzIGEgOmNsYXNzOmBUZXN0Q2FzZWAgY2xhc3MgZGVjb3JhdG9yLiBJdCB3b3JrcyBieQogICAgIGRlY29yYXRpbmcgZWFjaCB0ZXN0IG1ldGhvZCBpbiB0aGUgY2xhc3MuIFRoaXMgcmVkdWNlcyB0aGUgYm9pbGVycGxhdGUKLSAgICBjb2RlIHdoZW4geW91ciB0ZXN0IG1ldGhvZHMgc2hhcmUgYSBjb21tb24gcGF0Y2hpbmdzIHNldC4gYHBhdGNoYCBmaW5kcwotICAgIHRlc3RzIGJ5IGxvb2tpbmcgZm9yIG1ldGhvZCBuYW1lcyB0aGF0IHN0YXJ0IHdpdGggYHBhdGNoLlRFU1RfUFJFRklYYC4KLSAgICBCeSBkZWZhdWx0IHRoaXMgaXMgYHRlc3RgLCB3aGljaCBtYXRjaGVzIHRoZSB3YXkgYHVuaXR0ZXN0YCBmaW5kcyB0ZXN0cy4KLSAgICBZb3UgY2FuIHNwZWNpZnkgYW4gYWx0ZXJuYXRpdmUgcHJlZml4IGJ5IHNldHRpbmcgYHBhdGNoLlRFU1RfUFJFRklYYC4KKyAgICBjb2RlIHdoZW4geW91ciB0ZXN0IG1ldGhvZHMgc2hhcmUgYSBjb21tb24gcGF0Y2hpbmdzIHNldC4gOmZ1bmM6YHBhdGNoYCBmaW5kcworICAgIHRlc3RzIGJ5IGxvb2tpbmcgZm9yIG1ldGhvZCBuYW1lcyB0aGF0IHN0YXJ0IHdpdGggYGBwYXRjaC5URVNUX1BSRUZJWGBgLgorICAgIEJ5IGRlZmF1bHQgdGhpcyBpcyBgYCd0ZXN0J2BgLCB3aGljaCBtYXRjaGVzIHRoZSB3YXkgOm1vZDpgdW5pdHRlc3RgIGZpbmRzIHRlc3RzLgorICAgIFlvdSBjYW4gc3BlY2lmeSBhbiBhbHRlcm5hdGl2ZSBwcmVmaXggYnkgc2V0dGluZyBgYHBhdGNoLlRFU1RfUFJFRklYYGAuCiAKICAgICBQYXRjaCBjYW4gYmUgdXNlZCBhcyBhIGNvbnRleHQgbWFuYWdlciwgd2l0aCB0aGUgd2l0aCBzdGF0ZW1lbnQuIEhlcmUgdGhlCiAgICAgcGF0Y2hpbmcgYXBwbGllcyB0byB0aGUgaW5kZW50ZWQgYmxvY2sgYWZ0ZXIgdGhlIHdpdGggc3RhdGVtZW50LiBJZiB5b3UKICAgICB1c2UgImFzIiB0aGVuIHRoZSBwYXRjaGVkIG9iamVjdCB3aWxsIGJlIGJvdW5kIHRvIHRoZSBuYW1lIGFmdGVyIHRoZQotICAgICJhcyI7IHZlcnkgdXNlZnVsIGlmIGBwYXRjaGAgaXMgY3JlYXRpbmcgYSBtb2NrIG9iamVjdCBmb3IgeW91LgorICAgICJhcyI7IHZlcnkgdXNlZnVsIGlmIDpmdW5jOmBwYXRjaGAgaXMgY3JlYXRpbmcgYSBtb2NrIG9iamVjdCBmb3IgeW91LgogCi0gICAgYHBhdGNoYCB0YWtlcyBhcmJpdHJhcnkga2V5d29yZCBhcmd1bWVudHMuIFRoZXNlIHdpbGwgYmUgcGFzc2VkIHRvCi0gICAgdGhlIGBNb2NrYCAob3IgYG5ld19jYWxsYWJsZWApIG9uIGNvbnN0cnVjdGlvbi4KKyAgICA6ZnVuYzpgcGF0Y2hgIHRha2VzIGFyYml0cmFyeSBrZXl3b3JkIGFyZ3VtZW50cy4gVGhlc2Ugd2lsbCBiZSBwYXNzZWQgdG8KKyAgICB0aGUgOmNsYXNzOmBNb2NrYCAob3IgKm5ld19jYWxsYWJsZSopIG9uIGNvbnN0cnVjdGlvbi4KIAotICAgIGBwYXRjaC5kaWN0KC4uLilgLCBgcGF0Y2gubXVsdGlwbGUoLi4uKWAgYW5kIGBwYXRjaC5vYmplY3QoLi4uKWAgYXJlCisgICAgYGBwYXRjaC5kaWN0KC4uLilgYCwgYGBwYXRjaC5tdWx0aXBsZSguLi4pYGAgYW5kIGBgcGF0Y2gub2JqZWN0KC4uLilgYCBhcmUKICAgICBhdmFpbGFibGUgZm9yIGFsdGVybmF0ZSB1c2UtY2FzZXMuCiAKLWBwYXRjaGAgYXMgZnVuY3Rpb24gZGVjb3JhdG9yLCBjcmVhdGluZyB0aGUgbW9jayBmb3IgeW91IGFuZCBwYXNzaW5nIGl0IGludG8KKzpmdW5jOmBwYXRjaGAgYXMgZnVuY3Rpb24gZGVjb3JhdG9yLCBjcmVhdGluZyB0aGUgbW9jayBmb3IgeW91IGFuZCBwYXNzaW5nIGl0IGludG8KIHRoZSBkZWNvcmF0ZWQgZnVuY3Rpb246CiAKICAgICA+Pj4gQHBhdGNoKCdfX21haW5fXy5Tb21lQ2xhc3MnKQpAQCAtMTAzOSwxNiArMTA2MCwxNiBAQAogICAgID4+PiBmdW5jdGlvbihOb25lKQogICAgIFRydWUKIAotUGF0Y2hpbmcgYSBjbGFzcyByZXBsYWNlcyB0aGUgY2xhc3Mgd2l0aCBhIGBNYWdpY01vY2tgICppbnN0YW5jZSouIElmIHRoZQorUGF0Y2hpbmcgYSBjbGFzcyByZXBsYWNlcyB0aGUgY2xhc3Mgd2l0aCBhIDpjbGFzczpgTWFnaWNNb2NrYCAqaW5zdGFuY2UqLiBJZiB0aGUKIGNsYXNzIGlzIGluc3RhbnRpYXRlZCBpbiB0aGUgY29kZSB1bmRlciB0ZXN0IHRoZW4gaXQgd2lsbCBiZSB0aGUKIDphdHRyOmB+TW9jay5yZXR1cm5fdmFsdWVgIG9mIHRoZSBtb2NrIHRoYXQgd2lsbCBiZSB1c2VkLgogCiBJZiB0aGUgY2xhc3MgaXMgaW5zdGFudGlhdGVkIG11bHRpcGxlIHRpbWVzIHlvdSBjb3VsZCB1c2UKIDphdHRyOmB+TW9jay5zaWRlX2VmZmVjdGAgdG8gcmV0dXJuIGEgbmV3IG1vY2sgZWFjaCB0aW1lLiBBbHRlcm5hdGl2ZWx5IHlvdQotY2FuIHNldCB0aGUgYHJldHVybl92YWx1ZWAgdG8gYmUgYW55dGhpbmcgeW91IHdhbnQuCitjYW4gc2V0IHRoZSAqcmV0dXJuX3ZhbHVlKiB0byBiZSBhbnl0aGluZyB5b3Ugd2FudC4KIAogVG8gY29uZmlndXJlIHJldHVybiB2YWx1ZXMgb24gbWV0aG9kcyBvZiAqaW5zdGFuY2VzKiBvbiB0aGUgcGF0Y2hlZCBjbGFzcwoteW91IG11c3QgZG8gdGhpcyBvbiB0aGUgYHJldHVybl92YWx1ZWAuIEZvciBleGFtcGxlOgoreW91IG11c3QgZG8gdGhpcyBvbiB0aGUgOmF0dHI6YHJldHVybl92YWx1ZWAuIEZvciBleGFtcGxlOgogCiAgICAgPj4+IGNsYXNzIENsYXNzOgogICAgIC4uLiAgICAgZGVmIG1ldGhvZChzZWxmKToKQEAgLTEwNjEsNyArMTA4Miw3IEBACiAgICAgLi4uICAgICBhc3NlcnQgQ2xhc3MoKS5tZXRob2QoKSA9PSAnZm9vJwogICAgIC4uLgogCi1JZiB5b3UgdXNlIGBzcGVjYCBvciBgc3BlY19zZXRgIGFuZCBgcGF0Y2hgIGlzIHJlcGxhY2luZyBhICpjbGFzcyosIHRoZW4gdGhlCitJZiB5b3UgdXNlICpzcGVjKiBvciAqc3BlY19zZXQqIGFuZCA6ZnVuYzpgcGF0Y2hgIGlzIHJlcGxhY2luZyBhICpjbGFzcyosIHRoZW4gdGhlCiByZXR1cm4gdmFsdWUgb2YgdGhlIGNyZWF0ZWQgbW9jayB3aWxsIGhhdmUgdGhlIHNhbWUgc3BlYy4KIAogICAgID4+PiBPcmlnaW5hbCA9IENsYXNzCkBAIC0xMDcxLDcgKzEwOTIsNyBAQAogICAgID4+PiBhc3NlcnQgaXNpbnN0YW5jZShpbnN0YW5jZSwgT3JpZ2luYWwpCiAgICAgPj4+IHBhdGNoZXIuc3RvcCgpCiAKLVRoZSBgbmV3X2NhbGxhYmxlYCBhcmd1bWVudCBpcyB1c2VmdWwgd2hlcmUgeW91IHdhbnQgdG8gdXNlIGFuIGFsdGVybmF0aXZlCitUaGUgKm5ld19jYWxsYWJsZSogYXJndW1lbnQgaXMgdXNlZnVsIHdoZXJlIHlvdSB3YW50IHRvIHVzZSBhbiBhbHRlcm5hdGl2ZQogY2xhc3MgdG8gdGhlIGRlZmF1bHQgOmNsYXNzOmBNYWdpY01vY2tgIGZvciB0aGUgY3JlYXRlZCBtb2NrLiBGb3IgZXhhbXBsZSwgaWYKIHlvdSB3YW50ZWQgYSA6Y2xhc3M6YE5vbkNhbGxhYmxlTW9ja2AgdG8gYmUgdXNlZDoKIApAQCAtMTA4NCwxMSArMTEwNSwxMSBAQAogICAgICAgLi4uCiAgICAgVHlwZUVycm9yOiAnTm9uQ2FsbGFibGVNb2NrJyBvYmplY3QgaXMgbm90IGNhbGxhYmxlCiAKLUFub3RoZXIgdXNlIGNhc2UgbWlnaHQgYmUgdG8gcmVwbGFjZSBhbiBvYmplY3Qgd2l0aCBhIGBpby5TdHJpbmdJT2AgaW5zdGFuY2U6CitBbm90aGVyIHVzZSBjYXNlIG1pZ2h0IGJlIHRvIHJlcGxhY2UgYW4gb2JqZWN0IHdpdGggYW4gOmNsYXNzOmBpby5TdHJpbmdJT2AgaW5zdGFuY2U6CiAKICAgICA+Pj4gZnJvbSBpbyBpbXBvcnQgU3RyaW5nSU8KICAgICA+Pj4gZGVmIGZvbygpOgotICAgIC4uLiAgICAgcHJpbnQgJ1NvbWV0aGluZycKKyAgICAuLi4gICAgIHByaW50KCdTb21ldGhpbmcnKQogICAgIC4uLgogICAgID4+PiBAcGF0Y2goJ3N5cy5zdGRvdXQnLCBuZXdfY2FsbGFibGU9U3RyaW5nSU8pCiAgICAgLi4uIGRlZiB0ZXN0KG1vY2tfc3Rkb3V0KToKQEAgLTEwOTcsNyArMTExOCw3IEBACiAgICAgLi4uCiAgICAgPj4+IHRlc3QoKQogCi1XaGVuIGBwYXRjaGAgaXMgY3JlYXRpbmcgYSBtb2NrIGZvciB5b3UsIGl0IGlzIGNvbW1vbiB0aGF0IHRoZSBmaXJzdCB0aGluZworV2hlbiA6ZnVuYzpgcGF0Y2hgIGlzIGNyZWF0aW5nIGEgbW9jayBmb3IgeW91LCBpdCBpcyBjb21tb24gdGhhdCB0aGUgZmlyc3QgdGhpbmcKIHlvdSBuZWVkIHRvIGRvIGlzIHRvIGNvbmZpZ3VyZSB0aGUgbW9jay4gU29tZSBvZiB0aGF0IGNvbmZpZ3VyYXRpb24gY2FuIGJlIGRvbmUKIGluIHRoZSBjYWxsIHRvIHBhdGNoLiBBbnkgYXJiaXRyYXJ5IGtleXdvcmRzIHlvdSBwYXNzIGludG8gdGhlIGNhbGwgd2lsbCBiZQogdXNlZCB0byBzZXQgYXR0cmlidXRlcyBvbiB0aGUgY3JlYXRlZCBtb2NrOgpAQCAtMTExMyw3ICsxMTM0LDcgQEAKIDphdHRyOmB+TW9jay5yZXR1cm5fdmFsdWVgIGFuZCA6YXR0cjpgfk1vY2suc2lkZV9lZmZlY3RgLCBvZiBjaGlsZCBtb2NrcyBjYW4KIGFsc28gYmUgY29uZmlndXJlZC4gVGhlc2UgYXJlbid0IHN5bnRhY3RpY2FsbHkgdmFsaWQgdG8gcGFzcyBpbiBkaXJlY3RseSBhcwoga2V5d29yZCBhcmd1bWVudHMsIGJ1dCBhIGRpY3Rpb25hcnkgd2l0aCB0aGVzZSBhcyBrZXlzIGNhbiBzdGlsbCBiZSBleHBhbmRlZAotaW50byBhIGBwYXRjaGAgY2FsbCB1c2luZyBgKipgOgoraW50byBhIDpmdW5jOmBwYXRjaGAgY2FsbCB1c2luZyBgYCoqYGA6CiAKICAgICA+Pj4gY29uZmlnID0geydtZXRob2QucmV0dXJuX3ZhbHVlJzogMywgJ290aGVyLnNpZGVfZWZmZWN0JzogS2V5RXJyb3J9CiAgICAgPj4+IHBhdGNoZXIgPSBwYXRjaCgnX19tYWluX18udGhpbmcnLCAqKmNvbmZpZykKQEAgLTExMzEsMTkgKzExNTIsMTkgQEAKIAogLi4gZnVuY3Rpb246OiBwYXRjaC5vYmplY3QodGFyZ2V0LCBhdHRyaWJ1dGUsIG5ldz1ERUZBVUxULCBzcGVjPU5vbmUsIGNyZWF0ZT1GYWxzZSwgc3BlY19zZXQ9Tm9uZSwgYXV0b3NwZWM9Tm9uZSwgbmV3X2NhbGxhYmxlPU5vbmUsICoqa3dhcmdzKQogCi0gICAgcGF0Y2ggdGhlIG5hbWVkIG1lbWJlciAoYGF0dHJpYnV0ZWApIG9uIGFuIG9iamVjdCAoYHRhcmdldGApIHdpdGggYSBtb2NrCisgICAgcGF0Y2ggdGhlIG5hbWVkIG1lbWJlciAoKmF0dHJpYnV0ZSopIG9uIGFuIG9iamVjdCAoKnRhcmdldCopIHdpdGggYSBtb2NrCiAgICAgb2JqZWN0LgogCi0gICAgYHBhdGNoLm9iamVjdGAgY2FuIGJlIHVzZWQgYXMgYSBkZWNvcmF0b3IsIGNsYXNzIGRlY29yYXRvciBvciBhIGNvbnRleHQKLSAgICBtYW5hZ2VyLiBBcmd1bWVudHMgYG5ld2AsIGBzcGVjYCwgYGNyZWF0ZWAsIGBzcGVjX3NldGAsIGBhdXRvc3BlY2AgYW5kCi0gICAgYG5ld19jYWxsYWJsZWAgaGF2ZSB0aGUgc2FtZSBtZWFuaW5nIGFzIGZvciBgcGF0Y2hgLiBMaWtlIGBwYXRjaGAsCi0gICAgYHBhdGNoLm9iamVjdGAgdGFrZXMgYXJiaXRyYXJ5IGtleXdvcmQgYXJndW1lbnRzIGZvciBjb25maWd1cmluZyB0aGUgbW9jaworICAgIDpmdW5jOmBwYXRjaC5vYmplY3RgIGNhbiBiZSB1c2VkIGFzIGEgZGVjb3JhdG9yLCBjbGFzcyBkZWNvcmF0b3Igb3IgYSBjb250ZXh0CisgICAgbWFuYWdlci4gQXJndW1lbnRzICpuZXcqLCAqc3BlYyosICpjcmVhdGUqLCAqc3BlY19zZXQqLCAqYXV0b3NwZWMqIGFuZAorICAgICpuZXdfY2FsbGFibGUqIGhhdmUgdGhlIHNhbWUgbWVhbmluZyBhcyBmb3IgOmZ1bmM6YHBhdGNoYC4gTGlrZSA6ZnVuYzpgcGF0Y2hgLAorICAgIDpmdW5jOmBwYXRjaC5vYmplY3RgIHRha2VzIGFyYml0cmFyeSBrZXl3b3JkIGFyZ3VtZW50cyBmb3IgY29uZmlndXJpbmcgdGhlIG1vY2sKICAgICBvYmplY3QgaXQgY3JlYXRlcy4KIAotICAgIFdoZW4gdXNlZCBhcyBhIGNsYXNzIGRlY29yYXRvciBgcGF0Y2gub2JqZWN0YCBob25vdXJzIGBwYXRjaC5URVNUX1BSRUZJWGAKKyAgICBXaGVuIHVzZWQgYXMgYSBjbGFzcyBkZWNvcmF0b3IgOmZ1bmM6YHBhdGNoLm9iamVjdGAgaG9ub3VycyBgYHBhdGNoLlRFU1RfUFJFRklYYGAKICAgICBmb3IgY2hvb3Npbmcgd2hpY2ggbWV0aG9kcyB0byB3cmFwLgogCi1Zb3UgY2FuIGVpdGhlciBjYWxsIGBwYXRjaC5vYmplY3RgIHdpdGggdGhyZWUgYXJndW1lbnRzIG9yIHR3byBhcmd1bWVudHMuIFRoZQorWW91IGNhbiBlaXRoZXIgY2FsbCA6ZnVuYzpgcGF0Y2gub2JqZWN0YCB3aXRoIHRocmVlIGFyZ3VtZW50cyBvciB0d28gYXJndW1lbnRzLiBUaGUKIHRocmVlIGFyZ3VtZW50IGZvcm0gdGFrZXMgdGhlIG9iamVjdCB0byBiZSBwYXRjaGVkLCB0aGUgYXR0cmlidXRlIG5hbWUgYW5kIHRoZQogb2JqZWN0IHRvIHJlcGxhY2UgdGhlIGF0dHJpYnV0ZSB3aXRoLgogCkBAIC0xMTU4LDggKzExNzksOCBAQAogICAgIC4uLgogICAgID4+PiB0ZXN0KCkKIAotYHNwZWNgLCBgY3JlYXRlYCBhbmQgdGhlIG90aGVyIGFyZ3VtZW50cyB0byBgcGF0Y2gub2JqZWN0YCBoYXZlIHRoZSBzYW1lCi1tZWFuaW5nIGFzIHRoZXkgZG8gZm9yIGBwYXRjaGAuCisqc3BlYyosICpjcmVhdGUqIGFuZCB0aGUgb3RoZXIgYXJndW1lbnRzIHRvIDpmdW5jOmBwYXRjaC5vYmplY3RgIGhhdmUgdGhlIHNhbWUKK21lYW5pbmcgYXMgdGhleSBkbyBmb3IgOmZ1bmM6YHBhdGNoYC4KIAogCiBwYXRjaC5kaWN0CkBAIC0xMTcwLDI3ICsxMTkxLDI3IEBACiAgICAgUGF0Y2ggYSBkaWN0aW9uYXJ5LCBvciBkaWN0aW9uYXJ5IGxpa2Ugb2JqZWN0LCBhbmQgcmVzdG9yZSB0aGUgZGljdGlvbmFyeQogICAgIHRvIGl0cyBvcmlnaW5hbCBzdGF0ZSBhZnRlciB0aGUgdGVzdC4KIAotICAgIGBpbl9kaWN0YCBjYW4gYmUgYSBkaWN0aW9uYXJ5IG9yIGEgbWFwcGluZyBsaWtlIGNvbnRhaW5lci4gSWYgaXQgaXMgYQorICAgICppbl9kaWN0KiBjYW4gYmUgYSBkaWN0aW9uYXJ5IG9yIGEgbWFwcGluZyBsaWtlIGNvbnRhaW5lci4gSWYgaXQgaXMgYQogICAgIG1hcHBpbmcgdGhlbiBpdCBtdXN0IGF0IGxlYXN0IHN1cHBvcnQgZ2V0dGluZywgc2V0dGluZyBhbmQgZGVsZXRpbmcgaXRlbXMKICAgICBwbHVzIGl0ZXJhdGluZyBvdmVyIGtleXMuCiAKLSAgICBgaW5fZGljdGAgY2FuIGFsc28gYmUgYSBzdHJpbmcgc3BlY2lmeWluZyB0aGUgbmFtZSBvZiB0aGUgZGljdGlvbmFyeSwgd2hpY2gKKyAgICAqaW5fZGljdCogY2FuIGFsc28gYmUgYSBzdHJpbmcgc3BlY2lmeWluZyB0aGUgbmFtZSBvZiB0aGUgZGljdGlvbmFyeSwgd2hpY2gKICAgICB3aWxsIHRoZW4gYmUgZmV0Y2hlZCBieSBpbXBvcnRpbmcgaXQuCiAKLSAgICBgdmFsdWVzYCBjYW4gYmUgYSBkaWN0aW9uYXJ5IG9mIHZhbHVlcyB0byBzZXQgaW4gdGhlIGRpY3Rpb25hcnkuIGB2YWx1ZXNgCi0gICAgY2FuIGFsc28gYmUgYW4gaXRlcmFibGUgb2YgYChrZXksIHZhbHVlKWAgcGFpcnMuCisgICAgKnZhbHVlcyogY2FuIGJlIGEgZGljdGlvbmFyeSBvZiB2YWx1ZXMgdG8gc2V0IGluIHRoZSBkaWN0aW9uYXJ5LiAqdmFsdWVzKgorICAgIGNhbiBhbHNvIGJlIGFuIGl0ZXJhYmxlIG9mIGBgKGtleSwgdmFsdWUpYGAgcGFpcnMuCiAKLSAgICBJZiBgY2xlYXJgIGlzIHRydWUgdGhlbiB0aGUgZGljdGlvbmFyeSB3aWxsIGJlIGNsZWFyZWQgYmVmb3JlIHRoZSBuZXcKKyAgICBJZiAqY2xlYXIqIGlzIHRydWUgdGhlbiB0aGUgZGljdGlvbmFyeSB3aWxsIGJlIGNsZWFyZWQgYmVmb3JlIHRoZSBuZXcKICAgICB2YWx1ZXMgYXJlIHNldC4KIAotICAgIGBwYXRjaC5kaWN0YCBjYW4gYWxzbyBiZSBjYWxsZWQgd2l0aCBhcmJpdHJhcnkga2V5d29yZCBhcmd1bWVudHMgdG8gc2V0CisgICAgOmZ1bmM6YHBhdGNoLmRpY3RgIGNhbiBhbHNvIGJlIGNhbGxlZCB3aXRoIGFyYml0cmFyeSBrZXl3b3JkIGFyZ3VtZW50cyB0byBzZXQKICAgICB2YWx1ZXMgaW4gdGhlIGRpY3Rpb25hcnkuCiAKLSAgICBgcGF0Y2guZGljdGAgY2FuIGJlIHVzZWQgYXMgYSBjb250ZXh0IG1hbmFnZXIsIGRlY29yYXRvciBvciBjbGFzcwotICAgIGRlY29yYXRvci4gV2hlbiB1c2VkIGFzIGEgY2xhc3MgZGVjb3JhdG9yIGBwYXRjaC5kaWN0YCBob25vdXJzCi0gICAgYHBhdGNoLlRFU1RfUFJFRklYYCBmb3IgY2hvb3Npbmcgd2hpY2ggbWV0aG9kcyB0byB3cmFwLgorICAgIDpmdW5jOmBwYXRjaC5kaWN0YCBjYW4gYmUgdXNlZCBhcyBhIGNvbnRleHQgbWFuYWdlciwgZGVjb3JhdG9yIG9yIGNsYXNzCisgICAgZGVjb3JhdG9yLiBXaGVuIHVzZWQgYXMgYSBjbGFzcyBkZWNvcmF0b3IgOmZ1bmM6YHBhdGNoLmRpY3RgIGhvbm91cnMKKyAgICBgYHBhdGNoLlRFU1RfUFJFRklYYGAgZm9yIGNob29zaW5nIHdoaWNoIG1ldGhvZHMgdG8gd3JhcC4KIAotYHBhdGNoLmRpY3RgIGNhbiBiZSB1c2VkIHRvIGFkZCBtZW1iZXJzIHRvIGEgZGljdGlvbmFyeSwgb3Igc2ltcGx5IGxldCBhIHRlc3QKKzpmdW5jOmBwYXRjaC5kaWN0YCBjYW4gYmUgdXNlZCB0byBhZGQgbWVtYmVycyB0byBhIGRpY3Rpb25hcnksIG9yIHNpbXBseSBsZXQgYSB0ZXN0CiBjaGFuZ2UgYSBkaWN0aW9uYXJ5LCBhbmQgZW5zdXJlIHRoZSBkaWN0aW9uYXJ5IGlzIHJlc3RvcmVkIHdoZW4gdGhlIHRlc3QKIGVuZHMuCiAKQEAgLTEyMDIsMTIgKzEyMjMsMTIgQEAKIAogICAgID4+PiBpbXBvcnQgb3MKICAgICA+Pj4gd2l0aCBwYXRjaC5kaWN0KCdvcy5lbnZpcm9uJywgeyduZXdrZXknOiAnbmV3dmFsdWUnfSk6Ci0gICAgLi4uICAgICBwcmludCBvcy5lbnZpcm9uWyduZXdrZXknXQorICAgIC4uLiAgICAgcHJpbnQob3MuZW52aXJvblsnbmV3a2V5J10pCiAgICAgLi4uCiAgICAgbmV3dmFsdWUKICAgICA+Pj4gYXNzZXJ0ICduZXdrZXknIG5vdCBpbiBvcy5lbnZpcm9uCiAKLUtleXdvcmRzIGNhbiBiZSB1c2VkIGluIHRoZSBgcGF0Y2guZGljdGAgY2FsbCB0byBzZXQgdmFsdWVzIGluIHRoZSBkaWN0aW9uYXJ5OgorS2V5d29yZHMgY2FuIGJlIHVzZWQgaW4gdGhlIDpmdW5jOmBwYXRjaC5kaWN0YCBjYWxsIHRvIHNldCB2YWx1ZXMgaW4gdGhlIGRpY3Rpb25hcnk6CiAKICAgICA+Pj4gbXltb2R1bGUgPSBNYWdpY01vY2soKQogICAgID4+PiBteW1vZHVsZS5mdW5jdGlvbi5yZXR1cm5fdmFsdWUgPSAnZmlzaCcKQEAgLTEyMTcsMTEgKzEyMzgsMTEgQEAKICAgICAuLi4KICAgICAnZmlzaCcKIAotYHBhdGNoLmRpY3RgIGNhbiBiZSB1c2VkIHdpdGggZGljdGlvbmFyeSBsaWtlIG9iamVjdHMgdGhhdCBhcmVuJ3QgYWN0dWFsbHkKKzpmdW5jOmBwYXRjaC5kaWN0YCBjYW4gYmUgdXNlZCB3aXRoIGRpY3Rpb25hcnkgbGlrZSBvYmplY3RzIHRoYXQgYXJlbid0IGFjdHVhbGx5CiBkaWN0aW9uYXJpZXMuIEF0IHRoZSB2ZXJ5IG1pbmltdW0gdGhleSBtdXN0IHN1cHBvcnQgaXRlbSBnZXR0aW5nLCBzZXR0aW5nLAogZGVsZXRpbmcgYW5kIGVpdGhlciBpdGVyYXRpb24gb3IgbWVtYmVyc2hpcCB0ZXN0LiBUaGlzIGNvcnJlc3BvbmRzIHRvIHRoZQotbWFnaWMgbWV0aG9kcyBgX19nZXRpdGVtX19gLCBgX19zZXRpdGVtX19gLCBgX19kZWxpdGVtX19gIGFuZCBlaXRoZXIKLWBfX2l0ZXJfX2Agb3IgYF9fY29udGFpbnNfX2AuCittYWdpYyBtZXRob2RzIDptZXRoOmBfX2dldGl0ZW1fX2AsIDptZXRoOmBfX3NldGl0ZW1fX2AsIDptZXRoOmBfX2RlbGl0ZW1fX2AgYW5kIGVpdGhlcgorOm1ldGg6YF9faXRlcl9fYCBvciA6bWV0aDpgX19jb250YWluc19fYC4KIAogICAgID4+PiBjbGFzcyBDb250YWluZXI6CiAgICAgLi4uICAgICBkZWYgX19pbml0X18oc2VsZik6CkBAIC0xMjU3LDIxICsxMjc4LDIxIEBACiAgICAgICAgIHdpdGggcGF0Y2gubXVsdGlwbGUoc2V0dGluZ3MsIEZJUlNUX1BBVENIPSdvbmUnLCBTRUNPTkRfUEFUQ0g9J3R3bycpOgogICAgICAgICAgICAgLi4uCiAKLSAgICBVc2UgOmRhdGE6YERFRkFVTFRgIGFzIHRoZSB2YWx1ZSBpZiB5b3Ugd2FudCBgcGF0Y2gubXVsdGlwbGVgIHRvIGNyZWF0ZQorICAgIFVzZSA6ZGF0YTpgREVGQVVMVGAgYXMgdGhlIHZhbHVlIGlmIHlvdSB3YW50IDpmdW5jOmBwYXRjaC5tdWx0aXBsZWAgdG8gY3JlYXRlCiAgICAgbW9ja3MgZm9yIHlvdS4gSW4gdGhpcyBjYXNlIHRoZSBjcmVhdGVkIG1vY2tzIGFyZSBwYXNzZWQgaW50byBhIGRlY29yYXRlZAotICAgIGZ1bmN0aW9uIGJ5IGtleXdvcmQsIGFuZCBhIGRpY3Rpb25hcnkgaXMgcmV0dXJuZWQgd2hlbiBgcGF0Y2gubXVsdGlwbGVgIGlzCisgICAgZnVuY3Rpb24gYnkga2V5d29yZCwgYW5kIGEgZGljdGlvbmFyeSBpcyByZXR1cm5lZCB3aGVuIDpmdW5jOmBwYXRjaC5tdWx0aXBsZWAgaXMKICAgICB1c2VkIGFzIGEgY29udGV4dCBtYW5hZ2VyLgogCi0gICAgYHBhdGNoLm11bHRpcGxlYCBjYW4gYmUgdXNlZCBhcyBhIGRlY29yYXRvciwgY2xhc3MgZGVjb3JhdG9yIG9yIGEgY29udGV4dAotICAgIG1hbmFnZXIuIFRoZSBhcmd1bWVudHMgYHNwZWNgLCBgc3BlY19zZXRgLCBgY3JlYXRlYCwgYGF1dG9zcGVjYCBhbmQKLSAgICBgbmV3X2NhbGxhYmxlYCBoYXZlIHRoZSBzYW1lIG1lYW5pbmcgYXMgZm9yIGBwYXRjaGAuIFRoZXNlIGFyZ3VtZW50cyB3aWxsCi0gICAgYmUgYXBwbGllZCB0byAqYWxsKiBwYXRjaGVzIGRvbmUgYnkgYHBhdGNoLm11bHRpcGxlYC4KKyAgICA6ZnVuYzpgcGF0Y2gubXVsdGlwbGVgIGNhbiBiZSB1c2VkIGFzIGEgZGVjb3JhdG9yLCBjbGFzcyBkZWNvcmF0b3Igb3IgYSBjb250ZXh0CisgICAgbWFuYWdlci4gVGhlIGFyZ3VtZW50cyAqc3BlYyosICpzcGVjX3NldCosICpjcmVhdGUqLCAqYXV0b3NwZWMqIGFuZAorICAgICpuZXdfY2FsbGFibGUqIGhhdmUgdGhlIHNhbWUgbWVhbmluZyBhcyBmb3IgOmZ1bmM6YHBhdGNoYC4gVGhlc2UgYXJndW1lbnRzIHdpbGwKKyAgICBiZSBhcHBsaWVkIHRvICphbGwqIHBhdGNoZXMgZG9uZSBieSA6ZnVuYzpgcGF0Y2gubXVsdGlwbGVgLgogCi0gICAgV2hlbiB1c2VkIGFzIGEgY2xhc3MgZGVjb3JhdG9yIGBwYXRjaC5tdWx0aXBsZWAgaG9ub3VycyBgcGF0Y2guVEVTVF9QUkVGSVhgCisgICAgV2hlbiB1c2VkIGFzIGEgY2xhc3MgZGVjb3JhdG9yIDpmdW5jOmBwYXRjaC5tdWx0aXBsZWAgaG9ub3VycyBgYHBhdGNoLlRFU1RfUFJFRklYYGAKICAgICBmb3IgY2hvb3Npbmcgd2hpY2ggbWV0aG9kcyB0byB3cmFwLgogCi1JZiB5b3Ugd2FudCBgcGF0Y2gubXVsdGlwbGVgIHRvIGNyZWF0ZSBtb2NrcyBmb3IgeW91LCB0aGVuIHlvdSBjYW4gdXNlCi06ZGF0YTpgREVGQVVMVGAgYXMgdGhlIHZhbHVlLiBJZiB5b3UgdXNlIGBwYXRjaC5tdWx0aXBsZWAgYXMgYSBkZWNvcmF0b3IKK0lmIHlvdSB3YW50IDpmdW5jOmBwYXRjaC5tdWx0aXBsZWAgdG8gY3JlYXRlIG1vY2tzIGZvciB5b3UsIHRoZW4geW91IGNhbiB1c2UKKzpkYXRhOmBERUZBVUxUYCBhcyB0aGUgdmFsdWUuIElmIHlvdSB1c2UgOmZ1bmM6YHBhdGNoLm11bHRpcGxlYCBhcyBhIGRlY29yYXRvcgogdGhlbiB0aGUgY3JlYXRlZCBtb2NrcyBhcmUgcGFzc2VkIGludG8gdGhlIGRlY29yYXRlZCBmdW5jdGlvbiBieSBrZXl3b3JkLgogCiAgICAgPj4+IHRoaW5nID0gb2JqZWN0KCkKQEAgLTEyODQsOCArMTMwNSw4IEBACiAgICAgLi4uCiAgICAgPj4+IHRlc3RfZnVuY3Rpb24oKQogCi1gcGF0Y2gubXVsdGlwbGVgIGNhbiBiZSBuZXN0ZWQgd2l0aCBvdGhlciBgcGF0Y2hgIGRlY29yYXRvcnMsIGJ1dCBwdXQgYXJndW1lbnRzCi1wYXNzZWQgYnkga2V5d29yZCAqYWZ0ZXIqIGFueSBvZiB0aGUgc3RhbmRhcmQgYXJndW1lbnRzIGNyZWF0ZWQgYnkgYHBhdGNoYDoKKzpmdW5jOmBwYXRjaC5tdWx0aXBsZWAgY2FuIGJlIG5lc3RlZCB3aXRoIG90aGVyIGBgcGF0Y2hgYCBkZWNvcmF0b3JzLCBidXQgcHV0IGFyZ3VtZW50cworcGFzc2VkIGJ5IGtleXdvcmQgKmFmdGVyKiBhbnkgb2YgdGhlIHN0YW5kYXJkIGFyZ3VtZW50cyBjcmVhdGVkIGJ5IDpmdW5jOmBwYXRjaGA6CiAKICAgICA+Pj4gQHBhdGNoKCdzeXMuZXhpdCcpCiAgICAgLi4uIEBwYXRjaC5tdWx0aXBsZSgnX19tYWluX18nLCB0aGluZz1ERUZBVUxULCBvdGhlcj1ERUZBVUxUKQpAQCAtMTI5Niw3ICsxMzE3LDcgQEAKICAgICAuLi4KICAgICA+Pj4gdGVzdF9mdW5jdGlvbigpCiAKLUlmIGBwYXRjaC5tdWx0aXBsZWAgaXMgdXNlZCBhcyBhIGNvbnRleHQgbWFuYWdlciwgdGhlIHZhbHVlIHJldHVybmVkIGJ5IHRoZQorSWYgOmZ1bmM6YHBhdGNoLm11bHRpcGxlYCBpcyB1c2VkIGFzIGEgY29udGV4dCBtYW5hZ2VyLCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgdGhlCiBjb250ZXh0IG1hbmdlciBpcyBhIGRpY3Rpb25hcnkgd2hlcmUgY3JlYXRlZCBtb2NrcyBhcmUga2V5ZWQgYnkgbmFtZToKIAogICAgID4+PiB3aXRoIHBhdGNoLm11bHRpcGxlKCdfX21haW5fXycsIHRoaW5nPURFRkFVTFQsIG90aGVyPURFRkFVTFQpIGFzIHZhbHVlczoKQEAgLTEzMTIsMTYgKzEzMzMsMTYgQEAKIHBhdGNoIG1ldGhvZHM6IHN0YXJ0IGFuZCBzdG9wCiB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgogCi1BbGwgdGhlIHBhdGNoZXJzIGhhdmUgYHN0YXJ0YCBhbmQgYHN0b3BgIG1ldGhvZHMuIFRoZXNlIG1ha2UgaXQgc2ltcGxlciB0byBkbwotcGF0Y2hpbmcgaW4gYHNldFVwYCBtZXRob2RzIG9yIHdoZXJlIHlvdSB3YW50IHRvIGRvIG11bHRpcGxlIHBhdGNoZXMgd2l0aG91dAorQWxsIHRoZSBwYXRjaGVycyBoYXZlIDptZXRoOmBzdGFydGAgYW5kIDptZXRoOmBzdG9wYCBtZXRob2RzLiBUaGVzZSBtYWtlIGl0IHNpbXBsZXIgdG8gZG8KK3BhdGNoaW5nIGluIGBgc2V0VXBgYCBtZXRob2RzIG9yIHdoZXJlIHlvdSB3YW50IHRvIGRvIG11bHRpcGxlIHBhdGNoZXMgd2l0aG91dAogbmVzdGluZyBkZWNvcmF0b3JzIG9yIHdpdGggc3RhdGVtZW50cy4KIAotVG8gdXNlIHRoZW0gY2FsbCBgcGF0Y2hgLCBgcGF0Y2gub2JqZWN0YCBvciBgcGF0Y2guZGljdGAgYXMgbm9ybWFsIGFuZCBrZWVwIGEKLXJlZmVyZW5jZSB0byB0aGUgcmV0dXJuZWQgYHBhdGNoZXJgIG9iamVjdC4gWW91IGNhbiB0aGVuIGNhbGwgYHN0YXJ0YCB0byBwdXQKLXRoZSBwYXRjaCBpbiBwbGFjZSBhbmQgYHN0b3BgIHRvIHVuZG8gaXQuCitUbyB1c2UgdGhlbSBjYWxsIDpmdW5jOmBwYXRjaGAsIDpmdW5jOmBwYXRjaC5vYmplY3RgIG9yIDpmdW5jOmBwYXRjaC5kaWN0YCBhcworbm9ybWFsIGFuZCBrZWVwIGEgcmVmZXJlbmNlIHRvIHRoZSByZXR1cm5lZCBgYHBhdGNoZXJgYCBvYmplY3QuIFlvdSBjYW4gdGhlbgorY2FsbCA6bWV0aDpgc3RhcnRgIHRvIHB1dCB0aGUgcGF0Y2ggaW4gcGxhY2UgYW5kIDptZXRoOmBzdG9wYCB0byB1bmRvIGl0LgogCi1JZiB5b3UgYXJlIHVzaW5nIGBwYXRjaGAgdG8gY3JlYXRlIGEgbW9jayBmb3IgeW91IHRoZW4gaXQgd2lsbCBiZSByZXR1cm5lZCBieQotdGhlIGNhbGwgdG8gYHBhdGNoZXIuc3RhcnRgLgorSWYgeW91IGFyZSB1c2luZyA6ZnVuYzpgcGF0Y2hgIHRvIGNyZWF0ZSBhIG1vY2sgZm9yIHlvdSB0aGVuIGl0IHdpbGwgYmUgcmV0dXJuZWQgYnkKK3RoZSBjYWxsIHRvIGBgcGF0Y2hlci5zdGFydGBgLgogCiAgICAgPj4+IHBhdGNoZXIgPSBwYXRjaCgncGFja2FnZS5tb2R1bGUuQ2xhc3NOYW1lJykKICAgICA+Pj4gZnJvbSBwYWNrYWdlIGltcG9ydCBtb2R1bGUKQEAgLTEzMzQsOCArMTM1NSw4IEBACiAgICAgPj4+IGFzc2VydCBtb2R1bGUuQ2xhc3NOYW1lIGlzIG5vdCBuZXdfbW9jawogCiAKLUEgdHlwaWNhbCB1c2UgY2FzZSBmb3IgdGhpcyBtaWdodCBiZSBmb3IgZG9pbmcgbXVsdGlwbGUgcGF0Y2hlcyBpbiB0aGUgYHNldFVwYAotbWV0aG9kIG9mIGEgYFRlc3RDYXNlYDoKK0EgdHlwaWNhbCB1c2UgY2FzZSBmb3IgdGhpcyBtaWdodCBiZSBmb3IgZG9pbmcgbXVsdGlwbGUgcGF0Y2hlcyBpbiB0aGUgYGBzZXRVcGBgCittZXRob2Qgb2YgYSA6Y2xhc3M6YFRlc3RDYXNlYDoKIAogICAgID4+PiBjbGFzcyBNeVRlc3QoVGVzdENhc2UpOgogICAgIC4uLiAgICAgZGVmIHNldFVwKHNlbGYpOgpAQCAtMTM1Nyw3ICsxMzc4LDcgQEAKIC4uIGNhdXRpb246OgogCiAgICAgSWYgeW91IHVzZSB0aGlzIHRlY2huaXF1ZSB5b3UgbXVzdCBlbnN1cmUgdGhhdCB0aGUgcGF0Y2hpbmcgaXMgInVuZG9uZSIgYnkKLSAgICBjYWxsaW5nIGBzdG9wYC4gVGhpcyBjYW4gYmUgZmlkZGxpZXIgdGhhbiB5b3UgbWlnaHQgdGhpbmssIGJlY2F1c2UgaWYgYW4KKyAgICBjYWxsaW5nIGBgc3RvcGBgLiBUaGlzIGNhbiBiZSBmaWRkbGllciB0aGFuIHlvdSBtaWdodCB0aGluaywgYmVjYXVzZSBpZiBhbgogICAgIGV4Y2VwdGlvbiBpcyByYWlzZWQgaW4gdGhlIGBgc2V0VXBgYCB0aGVuIGBgdGVhckRvd25gYCBpcyBub3QgY2FsbGVkLgogICAgIDptZXRoOmB1bml0dGVzdC5UZXN0Q2FzZS5hZGRDbGVhbnVwYCBtYWtlcyB0aGlzIGVhc2llcjoKIApAQCAtMTM3MSwxNSArMTM5MiwxNSBAQAogICAgICAgICAuLi4gICAgICAgICBhc3NlcnQgcGFja2FnZS5tb2R1bGUuQ2xhc3MgaXMgc2VsZi5Nb2NrQ2xhc3MKICAgICAgICAgLi4uCiAKLSAgICBBcyBhbiBhZGRlZCBib251cyB5b3Ugbm8gbG9uZ2VyIG5lZWQgdG8ga2VlcCBhIHJlZmVyZW5jZSB0byB0aGUgYHBhdGNoZXJgCisgICAgQXMgYW4gYWRkZWQgYm9udXMgeW91IG5vIGxvbmdlciBuZWVkIHRvIGtlZXAgYSByZWZlcmVuY2UgdG8gdGhlIGBgcGF0Y2hlcmBgCiAgICAgb2JqZWN0LgogCiBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIHN0b3AgYWxsIHBhdGNoZXMgd2hpY2ggaGF2ZSBiZWVuIHN0YXJ0ZWQgYnkgdXNpbmcKLWBwYXRjaC5zdG9wYWxsYC4KKzpmdW5jOmBwYXRjaC5zdG9wYWxsYC4KIAogLi4gZnVuY3Rpb246OiBwYXRjaC5zdG9wYWxsCiAKLSAgICBTdG9wIGFsbCBhY3RpdmUgcGF0Y2hlcy4gT25seSBzdG9wcyBwYXRjaGVzIHN0YXJ0ZWQgd2l0aCBgc3RhcnRgLgorICAgIFN0b3AgYWxsIGFjdGl2ZSBwYXRjaGVzLiBPbmx5IHN0b3BzIHBhdGNoZXMgc3RhcnRlZCB3aXRoIGBgc3RhcnRgYC4KIAogCiBURVNUX1BSRUZJWApAQCAtMTM4NywxMSArMTQwOCwxMSBAQAogCiBBbGwgb2YgdGhlIHBhdGNoZXJzIGNhbiBiZSB1c2VkIGFzIGNsYXNzIGRlY29yYXRvcnMuIFdoZW4gdXNlZCBpbiB0aGlzIHdheQogdGhleSB3cmFwIGV2ZXJ5IHRlc3QgbWV0aG9kIG9uIHRoZSBjbGFzcy4gVGhlIHBhdGNoZXJzIHJlY29nbmlzZSBtZXRob2RzIHRoYXQKLXN0YXJ0IHdpdGggYHRlc3RgIGFzIGJlaW5nIHRlc3QgbWV0aG9kcy4gVGhpcyBpcyB0aGUgc2FtZSB3YXkgdGhhdCB0aGUKK3N0YXJ0IHdpdGggYGAndGVzdCdgYCBhcyBiZWluZyB0ZXN0IG1ldGhvZHMuIFRoaXMgaXMgdGhlIHNhbWUgd2F5IHRoYXQgdGhlCiA6Y2xhc3M6YHVuaXR0ZXN0LlRlc3RMb2FkZXJgIGZpbmRzIHRlc3QgbWV0aG9kcyBieSBkZWZhdWx0LgogCiBJdCBpcyBwb3NzaWJsZSB0aGF0IHlvdSB3YW50IHRvIHVzZSBhIGRpZmZlcmVudCBwcmVmaXggZm9yIHlvdXIgdGVzdHMuIFlvdSBjYW4KLWluZm9ybSB0aGUgcGF0Y2hlcnMgb2YgdGhlIGRpZmZlcmVudCBwcmVmaXggYnkgc2V0dGluZyBgcGF0Y2guVEVTVF9QUkVGSVhgOgoraW5mb3JtIHRoZSBwYXRjaGVycyBvZiB0aGUgZGlmZmVyZW50IHByZWZpeCBieSBzZXR0aW5nIGBgcGF0Y2guVEVTVF9QUkVGSVhgYDoKIAogICAgID4+PiBwYXRjaC5URVNUX1BSRUZJWCA9ICdmb28nCiAgICAgPj4+IHZhbHVlID0gMwpAQCAtMTM5OSw5ICsxNDIwLDkgQEAKICAgICA+Pj4gQHBhdGNoKCdfX21haW5fXy52YWx1ZScsICdub3QgdGhyZWUnKQogICAgIC4uLiBjbGFzcyBUaGluZzoKICAgICAuLi4gICAgIGRlZiBmb29fb25lKHNlbGYpOgotICAgIC4uLiAgICAgICAgIHByaW50IHZhbHVlCisgICAgLi4uICAgICAgICAgcHJpbnQodmFsdWUpCiAgICAgLi4uICAgICBkZWYgZm9vX3R3byhzZWxmKToKLSAgICAuLi4gICAgICAgICBwcmludCB2YWx1ZQorICAgIC4uLiAgICAgICAgIHByaW50KHZhbHVlKQogICAgIC4uLgogICAgID4+PgogICAgID4+PiBUaGluZygpLmZvb19vbmUoKQpAQCAtMTQ0NCw3ICsxNDY1LDcgQEAKIFdoZXJlIHRvIHBhdGNoCiB+fn5+fn5+fn5+fn5+fgogCi1gcGF0Y2hgIHdvcmtzIGJ5ICh0ZW1wb3JhcmlseSkgY2hhbmdpbmcgdGhlIG9iamVjdCB0aGF0IGEgKm5hbWUqIHBvaW50cyB0byB3aXRoCis6ZnVuYzpgcGF0Y2hgIHdvcmtzIGJ5ICh0ZW1wb3JhcmlseSkgY2hhbmdpbmcgdGhlIG9iamVjdCB0aGF0IGEgKm5hbWUqIHBvaW50cyB0byB3aXRoCiBhbm90aGVyIG9uZS4gVGhlcmUgY2FuIGJlIG1hbnkgbmFtZXMgcG9pbnRpbmcgdG8gYW55IGluZGl2aWR1YWwgb2JqZWN0LCBzbwogZm9yIHBhdGNoaW5nIHRvIHdvcmsgeW91IG11c3QgZW5zdXJlIHRoYXQgeW91IHBhdGNoIHRoZSBuYW1lIHVzZWQgYnkgdGhlIHN5c3RlbQogdW5kZXIgdGVzdC4KQEAgLTE0NjIsMjMgKzE0ODMsMjMgQEAKICAgICAgICAgLT4gZnJvbSBhIGltcG9ydCBTb21lQ2xhc3MKICAgICAgICAgLT4gc29tZV9mdW5jdGlvbiBpbnN0YW50aWF0ZXMgU29tZUNsYXNzCiAKLU5vdyB3ZSB3YW50IHRvIHRlc3QgYHNvbWVfZnVuY3Rpb25gIGJ1dCB3ZSB3YW50IHRvIG1vY2sgb3V0IGBTb21lQ2xhc3NgIHVzaW5nCi1gcGF0Y2hgLiBUaGUgcHJvYmxlbSBpcyB0aGF0IHdoZW4gd2UgaW1wb3J0IG1vZHVsZSBiLCB3aGljaCB3ZSB3aWxsIGhhdmUgdG8KLWRvIHRoZW4gaXQgaW1wb3J0cyBgU29tZUNsYXNzYCBmcm9tIG1vZHVsZSBhLiBJZiB3ZSB1c2UgYHBhdGNoYCB0byBtb2NrIG91dAotYGEuU29tZUNsYXNzYCB0aGVuIGl0IHdpbGwgaGF2ZSBubyBlZmZlY3Qgb24gb3VyIHRlc3Q7IG1vZHVsZSBiIGFscmVhZHkgaGFzIGEKLXJlZmVyZW5jZSB0byB0aGUgKnJlYWwqIGBTb21lQ2xhc3NgIGFuZCBpdCBsb29rcyBsaWtlIG91ciBwYXRjaGluZyBoYWQgbm8KK05vdyB3ZSB3YW50IHRvIHRlc3QgYGBzb21lX2Z1bmN0aW9uYGAgYnV0IHdlIHdhbnQgdG8gbW9jayBvdXQgYGBTb21lQ2xhc3NgYCB1c2luZworOmZ1bmM6YHBhdGNoYC4gVGhlIHByb2JsZW0gaXMgdGhhdCB3aGVuIHdlIGltcG9ydCBtb2R1bGUgYiwgd2hpY2ggd2Ugd2lsbCBoYXZlIHRvCitkbyB0aGVuIGl0IGltcG9ydHMgYGBTb21lQ2xhc3NgYCBmcm9tIG1vZHVsZSBhLiBJZiB3ZSB1c2UgOmZ1bmM6YHBhdGNoYCB0byBtb2NrIG91dAorYGBhLlNvbWVDbGFzc2BgIHRoZW4gaXQgd2lsbCBoYXZlIG5vIGVmZmVjdCBvbiBvdXIgdGVzdDsgbW9kdWxlIGIgYWxyZWFkeSBoYXMgYQorcmVmZXJlbmNlIHRvIHRoZSAqcmVhbCogYGBTb21lQ2xhc3NgYCBhbmQgaXQgbG9va3MgbGlrZSBvdXIgcGF0Y2hpbmcgaGFkIG5vCiBlZmZlY3QuCiAKLVRoZSBrZXkgaXMgdG8gcGF0Y2ggb3V0IGBTb21lQ2xhc3NgIHdoZXJlIGl0IGlzIHVzZWQgKG9yIHdoZXJlIGl0IGlzIGxvb2tlZCB1cAotKS4gSW4gdGhpcyBjYXNlIGBzb21lX2Z1bmN0aW9uYCB3aWxsIGFjdHVhbGx5IGxvb2sgdXAgYFNvbWVDbGFzc2AgaW4gbW9kdWxlIGIsCitUaGUga2V5IGlzIHRvIHBhdGNoIG91dCBgYFNvbWVDbGFzc2BgIHdoZXJlIGl0IGlzIHVzZWQgKG9yIHdoZXJlIGl0IGlzIGxvb2tlZCB1cAorKS4gSW4gdGhpcyBjYXNlIGBgc29tZV9mdW5jdGlvbmBgIHdpbGwgYWN0dWFsbHkgbG9vayB1cCBgYFNvbWVDbGFzc2BgIGluIG1vZHVsZSBiLAogd2hlcmUgd2UgaGF2ZSBpbXBvcnRlZCBpdC4gVGhlIHBhdGNoaW5nIHNob3VsZCBsb29rIGxpa2U6OgogCiAgICAgQHBhdGNoKCdiLlNvbWVDbGFzcycpCiAKLUhvd2V2ZXIsIGNvbnNpZGVyIHRoZSBhbHRlcm5hdGl2ZSBzY2VuYXJpbyB3aGVyZSBpbnN0ZWFkIG9mIGBmcm9tIGEgaW1wb3J0Ci1Tb21lQ2xhc3NgIG1vZHVsZSBiIGRvZXMgYGltcG9ydCBhYCBhbmQgYHNvbWVfZnVuY3Rpb25gIHVzZXMgYGEuU29tZUNsYXNzYC4gQm90aAorSG93ZXZlciwgY29uc2lkZXIgdGhlIGFsdGVybmF0aXZlIHNjZW5hcmlvIHdoZXJlIGluc3RlYWQgb2YgYGBmcm9tIGEgaW1wb3J0CitTb21lQ2xhc3NgYCBtb2R1bGUgYiBkb2VzIGBgaW1wb3J0IGFgYCBhbmQgYGBzb21lX2Z1bmN0aW9uYGAgdXNlcyBgYGEuU29tZUNsYXNzYGAuIEJvdGgKIG9mIHRoZXNlIGltcG9ydCBmb3JtcyBhcmUgY29tbW9uLiBJbiB0aGlzIGNhc2UgdGhlIGNsYXNzIHdlIHdhbnQgdG8gcGF0Y2ggaXMKLWJlaW5nIGxvb2tlZCB1cCBvbiB0aGUgYSBtb2R1bGUgYW5kIHNvIHdlIGhhdmUgdG8gcGF0Y2ggYGEuU29tZUNsYXNzYCBpbnN0ZWFkOjoKK2JlaW5nIGxvb2tlZCB1cCBpbiB0aGUgbW9kdWxlIGFuZCBzbyB3ZSBoYXZlIHRvIHBhdGNoIGBgYS5Tb21lQ2xhc3NgYCBpbnN0ZWFkOjoKIAogICAgIEBwYXRjaCgnYS5Tb21lQ2xhc3MnKQogCkBAIC0xNTM0LDcgKzE1NTUsNyBAQAogICAgW10KIAogT25lIHVzZSBjYXNlIGZvciB0aGlzIGlzIGZvciBtb2NraW5nIG9iamVjdHMgdXNlZCBhcyBjb250ZXh0IG1hbmFnZXJzIGluIGEKLWB3aXRoYCBzdGF0ZW1lbnQ6Cis6a2V5d29yZDpgd2l0aGAgc3RhdGVtZW50OgogCiAgICA+Pj4gbW9jayA9IE1vY2soKQogICAgPj4+IG1vY2suX19lbnRlcl9fID0gTW9jayhyZXR1cm5fdmFsdWU9J2ZvbycpCkBAIC0xNTUwLDI3ICsxNTcxLDI3IEBACiAKIC4uIG5vdGU6OgogCi0gICBJZiB5b3UgdXNlIHRoZSBgc3BlY2Aga2V5d29yZCBhcmd1bWVudCB0byBjcmVhdGUgYSBtb2NrIHRoZW4gYXR0ZW1wdGluZyB0bwotICAgc2V0IGEgbWFnaWMgbWV0aG9kIHRoYXQgaXNuJ3QgaW4gdGhlIHNwZWMgd2lsbCByYWlzZSBhbiBgQXR0cmlidXRlRXJyb3JgLgorICAgSWYgeW91IHVzZSB0aGUgKnNwZWMqIGtleXdvcmQgYXJndW1lbnQgdG8gY3JlYXRlIGEgbW9jayB0aGVuIGF0dGVtcHRpbmcgdG8KKyAgIHNldCBhIG1hZ2ljIG1ldGhvZCB0aGF0IGlzbid0IGluIHRoZSBzcGVjIHdpbGwgcmFpc2UgYW4gOmV4YzpgQXR0cmlidXRlRXJyb3JgLgogCiBUaGUgZnVsbCBsaXN0IG9mIHN1cHBvcnRlZCBtYWdpYyBtZXRob2RzIGlzOgogCiAqIGBgX19oYXNoX19gYCwgYGBfX3NpemVvZl9fYGAsIGBgX19yZXByX19gYCBhbmQgYGBfX3N0cl9fYGAKICogYGBfX2Rpcl9fYGAsIGBgX19mb3JtYXRfX2BgIGFuZCBgYF9fc3ViY2xhc3Nlc19fYGAKICogYGBfX2Zsb29yX19gYCwgYGBfX3RydW5jX19gYCBhbmQgYGBfX2NlaWxfX2BgCi0qIENvbXBhcmlzb25zOiBgYF9fY21wX19gYCwgYGBfX2x0X19gYCwgYGBfX2d0X19gYCwgYGBfX2xlX19gYCwgYGBfX2dlX19gYCwKKyogQ29tcGFyaXNvbnM6IGBgX19sdF9fYGAsIGBgX19ndF9fYGAsIGBgX19sZV9fYGAsIGBgX19nZV9fYGAsCiAgIGBgX19lcV9fYGAgYW5kIGBgX19uZV9fYGAKICogQ29udGFpbmVyIG1ldGhvZHM6IGBgX19nZXRpdGVtX19gYCwgYGBfX3NldGl0ZW1fX2BgLCBgYF9fZGVsaXRlbV9fYGAsCi0gIGBgX19jb250YWluc19fYGAsIGBgX19sZW5fX2BgLCBgYF9faXRlcl9fYGAsIGBgX19nZXRzbGljZV9fYGAsCi0gIGBgX19zZXRzbGljZV9fYGAsIGBgX19yZXZlcnNlZF9fYGAgYW5kIGBgX19taXNzaW5nX19gYAorICBgYF9fY29udGFpbnNfX2BgLCBgYF9fbGVuX19gYCwgYGBfX2l0ZXJfX2BgLCBgYF9fcmV2ZXJzZWRfX2BgCisgIGFuZCBgYF9fbWlzc2luZ19fYGAKICogQ29udGV4dCBtYW5hZ2VyOiBgYF9fZW50ZXJfX2BgIGFuZCBgYF9fZXhpdF9fYGAKICogVW5hcnkgbnVtZXJpYyBtZXRob2RzOiBgYF9fbmVnX19gYCwgYGBfX3Bvc19fYGAgYW5kIGBgX19pbnZlcnRfX2BgCiAqIFRoZSBudW1lcmljIG1ldGhvZHMgKGluY2x1ZGluZyByaWdodCBoYW5kIGFuZCBpbi1wbGFjZSB2YXJpYW50cyk6Ci0gIGBgX19hZGRfX2BgLCBgYF9fc3ViX19gYCwgYGBfX211bF9fYGAsIGBgX19kaXZfX2BgLAorICBgYF9fYWRkX19gYCwgYGBfX3N1Yl9fYGAsIGBgX19tdWxfX2BgLCBgYF9fZGl2X19gYCwgYGBfX3RydWVkaXZfX2BgLAogICBgYF9fZmxvb3JkaXZfX2BgLCBgYF9fbW9kX19gYCwgYGBfX2Rpdm1vZF9fYGAsIGBgX19sc2hpZnRfX2BgLAogICBgYF9fcnNoaWZ0X19gYCwgYGBfX2FuZF9fYGAsIGBgX194b3JfX2BgLCBgYF9fb3JfX2BgLCBhbmQgYGBfX3Bvd19fYGAKLSogTnVtZXJpYyBjb252ZXJzaW9uIG1ldGhvZHM6IGBgX19jb21wbGV4X19gYCwgYGBfX2ludF9fYGAsIGBgX19mbG9hdF9fYGAsCi0gIGBgX19pbmRleF9fYGAgYW5kIGBgX19jb2VyY2VfX2BgCisqIE51bWVyaWMgY29udmVyc2lvbiBtZXRob2RzOiBgYF9fY29tcGxleF9fYGAsIGBgX19pbnRfX2BgLCBgYF9fZmxvYXRfX2BgCisgIGFuZCBgYF9faW5kZXhfX2BgCiAqIERlc2NyaXB0b3IgbWV0aG9kczogYGBfX2dldF9fYGAsIGBgX19zZXRfX2BgIGFuZCBgYF9fZGVsZXRlX19gYAogKiBQaWNrbGluZzogYGBfX3JlZHVjZV9fYGAsIGBgX19yZWR1Y2VfZXhfX2BgLCBgYF9fZ2V0aW5pdGFyZ3NfX2BgLAogICBgYF9fZ2V0bmV3YXJnc19fYGAsIGBgX19nZXRzdGF0ZV9fYGAgYW5kIGBgX19zZXRzdGF0ZV9fYGAKQEAgLTE1ODcsNyArMTYwOCw3IEBACiBNYWdpYyBNb2NrCiB+fn5+fn5+fn5+CiAKLVRoZXJlIGFyZSB0d28gYE1hZ2ljTW9ja2AgdmFyaWFudHM6IGBNYWdpY01vY2tgIGFuZCBgTm9uQ2FsbGFibGVNYWdpY01vY2tgLgorVGhlcmUgYXJlIHR3byBgYE1hZ2ljTW9ja2BgIHZhcmlhbnRzOiA6Y2xhc3M6YE1hZ2ljTW9ja2AgYW5kIDpjbGFzczpgTm9uQ2FsbGFibGVNYWdpY01vY2tgLgogCiAKIC4uIGNsYXNzOjogTWFnaWNNb2NrKCphcmdzLCAqKmt3KQpAQCAtMTU5OCwxOSArMTYxOSwxOSBAQAogCiAgICBUaGUgY29uc3RydWN0b3IgcGFyYW1ldGVycyBoYXZlIHRoZSBzYW1lIG1lYW5pbmcgYXMgZm9yIDpjbGFzczpgTW9ja2AuCiAKLSAgIElmIHlvdSB1c2UgdGhlIGBzcGVjYCBvciBgc3BlY19zZXRgIGFyZ3VtZW50cyB0aGVuICpvbmx5KiBtYWdpYyBtZXRob2RzCisgICBJZiB5b3UgdXNlIHRoZSAqc3BlYyogb3IgKnNwZWNfc2V0KiBhcmd1bWVudHMgdGhlbiAqb25seSogbWFnaWMgbWV0aG9kcwogICAgdGhhdCBleGlzdCBpbiB0aGUgc3BlYyB3aWxsIGJlIGNyZWF0ZWQuCiAKIAogLi4gY2xhc3M6OiBOb25DYWxsYWJsZU1hZ2ljTW9jaygqYXJncywgKiprdykKIAotICAgIEEgbm9uLWNhbGxhYmxlIHZlcnNpb24gb2YgYE1hZ2ljTW9ja2AuCisgICAgQSBub24tY2FsbGFibGUgdmVyc2lvbiBvZiA6Y2xhc3M6YE1hZ2ljTW9ja2AuCiAKICAgICBUaGUgY29uc3RydWN0b3IgcGFyYW1ldGVycyBoYXZlIHRoZSBzYW1lIG1lYW5pbmcgYXMgZm9yCi0gICAgOmNsYXNzOmBNYWdpY01vY2tgLCB3aXRoIHRoZSBleGNlcHRpb24gb2YgYHJldHVybl92YWx1ZWAgYW5kCi0gICAgYHNpZGVfZWZmZWN0YCB3aGljaCBoYXZlIG5vIG1lYW5pbmcgb24gYSBub24tY2FsbGFibGUgbW9jay4KKyAgICA6Y2xhc3M6YE1hZ2ljTW9ja2AsIHdpdGggdGhlIGV4Y2VwdGlvbiBvZiAqcmV0dXJuX3ZhbHVlKiBhbmQKKyAgICAqc2lkZV9lZmZlY3QqIHdoaWNoIGhhdmUgbm8gbWVhbmluZyBvbiBhIG5vbi1jYWxsYWJsZSBtb2NrLgogCi1UaGUgbWFnaWMgbWV0aG9kcyBhcmUgc2V0dXAgd2l0aCBgTWFnaWNNb2NrYCBvYmplY3RzLCBzbyB5b3UgY2FuIGNvbmZpZ3VyZSB0aGVtCitUaGUgbWFnaWMgbWV0aG9kcyBhcmUgc2V0dXAgd2l0aCA6Y2xhc3M6YE1hZ2ljTW9ja2Agb2JqZWN0cywgc28geW91IGNhbiBjb25maWd1cmUgdGhlbQogYW5kIHVzZSB0aGVtIGluIHRoZSB1c3VhbCB3YXk6CiAKICAgID4+PiBtb2NrID0gTWFnaWNNb2NrKCkKQEAgLTE2NTcsOSArMTY3OCwxMCBAQAogICAgPj4+IG9iamVjdCgpIGluIG1vY2sKICAgIEZhbHNlCiAKLVRoZSB0d28gZXF1YWxpdHkgbWV0aG9kLCBgX19lcV9fYCBhbmQgYF9fbmVfX2AsIGFyZSBzcGVjaWFsLgotVGhleSBkbyB0aGUgZGVmYXVsdCBlcXVhbGl0eSBjb21wYXJpc29uIG9uIGlkZW50aXR5LCB1c2luZyBhIHNpZGUKLWVmZmVjdCwgdW5sZXNzIHlvdSBjaGFuZ2UgdGhlaXIgcmV0dXJuIHZhbHVlIHRvIHJldHVybiBzb21ldGhpbmcgZWxzZToKK1RoZSB0d28gZXF1YWxpdHkgbWV0aG9kcywgOm1ldGg6YF9fZXFfX2AgYW5kIDptZXRoOmBfX25lX19gLCBhcmUgc3BlY2lhbC4KK1RoZXkgZG8gdGhlIGRlZmF1bHQgZXF1YWxpdHkgY29tcGFyaXNvbiBvbiBpZGVudGl0eSwgdXNpbmcgdGhlCis6YXR0cjpgfk1vY2suc2lkZV9lZmZlY3RgIGF0dHJpYnV0ZSwgdW5sZXNzIHlvdSBjaGFuZ2UgdGhlaXIgcmV0dXJuIHZhbHVlIHRvCityZXR1cm4gc29tZXRoaW5nIGVsc2U6OgogCiAgICA+Pj4gTWFnaWNNb2NrKCkgPT0gMwogICAgRmFsc2UKQEAgLTE2NzAsNyArMTY5Miw3IEBACiAgICA+Pj4gbW9jayA9PSAzCiAgICBUcnVlCiAKLVRoZSByZXR1cm4gdmFsdWUgb2YgYE1hZ2ljTW9jay5fX2l0ZXJfX2AgY2FuIGJlIGFueSBpdGVyYWJsZSBvYmplY3QgYW5kIGlzbid0CitUaGUgcmV0dXJuIHZhbHVlIG9mIDptZXRoOmBNYWdpY01vY2suX19pdGVyX19gIGNhbiBiZSBhbnkgaXRlcmFibGUgb2JqZWN0IGFuZCBpc24ndAogcmVxdWlyZWQgdG8gYmUgYW4gaXRlcmF0b3I6CiAKICAgID4+PiBtb2NrID0gTWFnaWNNb2NrKCkKQEAgLTE3MzAsMTAgKzE3NTIsMTAgQEAKIAogU29tZXRpbWVzIHdoZW4gdGVzdGluZyB5b3UgbmVlZCB0byB0ZXN0IHRoYXQgYSBzcGVjaWZpYyBvYmplY3QgaXMgcGFzc2VkIGFzIGFuCiBhcmd1bWVudCB0byBhbm90aGVyIG1ldGhvZCwgb3IgcmV0dXJuZWQuIEl0IGNhbiBiZSBjb21tb24gdG8gY3JlYXRlIG5hbWVkCi1zZW50aW5lbCBvYmplY3RzIHRvIHRlc3QgdGhpcy4gYHNlbnRpbmVsYCBwcm92aWRlcyBhIGNvbnZlbmllbnQgd2F5IG9mCitzZW50aW5lbCBvYmplY3RzIHRvIHRlc3QgdGhpcy4gOmRhdGE6YHNlbnRpbmVsYCBwcm92aWRlcyBhIGNvbnZlbmllbnQgd2F5IG9mCiBjcmVhdGluZyBhbmQgdGVzdGluZyB0aGUgaWRlbnRpdHkgb2Ygb2JqZWN0cyBsaWtlIHRoaXMuCiAKLUluIHRoaXMgZXhhbXBsZSB3ZSBtb25rZXkgcGF0Y2ggYG1ldGhvZGAgdG8gcmV0dXJuIGBzZW50aW5lbC5zb21lX29iamVjdGA6CitJbiB0aGlzIGV4YW1wbGUgd2UgbW9ua2V5IHBhdGNoIGBgbWV0aG9kYGAgdG8gcmV0dXJuIGBgc2VudGluZWwuc29tZV9vYmplY3RgYDoKIAogICAgID4+PiByZWFsID0gUHJvZHVjdGlvbkNsYXNzKCkKICAgICA+Pj4gcmVhbC5tZXRob2QgPSBNb2NrKG5hbWU9Im1ldGhvZCIpCkBAIC0xNzUwLDggKzE3NzIsOCBAQAogCiAuLiBkYXRhOjogREVGQVVMVAogCi0gICAgVGhlIGBERUZBVUxUYCBvYmplY3QgaXMgYSBwcmUtY3JlYXRlZCBzZW50aW5lbCAoYWN0dWFsbHkKLSAgICBgc2VudGluZWwuREVGQVVMVGApLiBJdCBjYW4gYmUgdXNlZCBieSA6YXR0cjpgfk1vY2suc2lkZV9lZmZlY3RgCisgICAgVGhlIDpkYXRhOmBERUZBVUxUYCBvYmplY3QgaXMgYSBwcmUtY3JlYXRlZCBzZW50aW5lbCAoYWN0dWFsbHkKKyAgICBgYHNlbnRpbmVsLkRFRkFVTFRgYCkuIEl0IGNhbiBiZSB1c2VkIGJ5IDphdHRyOmB+TW9jay5zaWRlX2VmZmVjdGAKICAgICBmdW5jdGlvbnMgdG8gaW5kaWNhdGUgdGhhdCB0aGUgbm9ybWFsIHJldHVybiB2YWx1ZSBzaG91bGQgYmUgdXNlZC4KIAogCkBAIC0xNzYwLDkgKzE3ODIsOSBAQAogCiAuLiBmdW5jdGlvbjo6IGNhbGwoKmFyZ3MsICoqa3dhcmdzKQogCi0gICAgYGNhbGxgIGlzIGEgaGVscGVyIG9iamVjdCBmb3IgbWFraW5nIHNpbXBsZXIgYXNzZXJ0aW9ucywgZm9yIGNvbXBhcmluZyB3aXRoCisgICAgOmZ1bmM6YGNhbGxgIGlzIGEgaGVscGVyIG9iamVjdCBmb3IgbWFraW5nIHNpbXBsZXIgYXNzZXJ0aW9ucywgZm9yIGNvbXBhcmluZyB3aXRoCiAgICAgOmF0dHI6YH5Nb2NrLmNhbGxfYXJnc2AsIDphdHRyOmB+TW9jay5jYWxsX2FyZ3NfbGlzdGAsCi0gICAgOmF0dHI6YH5Nb2NrLm1vY2tfY2FsbHNgIGFuZCA6YXR0cjpgfk1vY2subWV0aG9kX2NhbGxzYC4gYGNhbGxgIGNhbiBhbHNvIGJlCisgICAgOmF0dHI6YH5Nb2NrLm1vY2tfY2FsbHNgIGFuZCA6YXR0cjpgfk1vY2subWV0aG9kX2NhbGxzYC4gOmZ1bmM6YGNhbGxgIGNhbiBhbHNvIGJlCiAgICAgdXNlZCB3aXRoIDptZXRoOmB+TW9jay5hc3NlcnRfaGFzX2NhbGxzYC4KIAogICAgICAgICA+Pj4gbSA9IE1hZ2ljTW9jayhyZXR1cm5fdmFsdWU9Tm9uZSkKQEAgLTE3NzMsMTEgKzE3OTUsMTEgQEAKIAogLi4gbWV0aG9kOjogY2FsbC5jYWxsX2xpc3QoKQogCi0gICAgRm9yIGEgY2FsbCBvYmplY3QgdGhhdCByZXByZXNlbnRzIG11bHRpcGxlIGNhbGxzLCBgY2FsbF9saXN0YAorICAgIEZvciBhIGNhbGwgb2JqZWN0IHRoYXQgcmVwcmVzZW50cyBtdWx0aXBsZSBjYWxscywgOm1ldGg6YGNhbGxfbGlzdGAKICAgICByZXR1cm5zIGEgbGlzdCBvZiBhbGwgdGhlIGludGVybWVkaWF0ZSBjYWxscyBhcyB3ZWxsIGFzIHRoZQogICAgIGZpbmFsIGNhbGwuCiAKLWBjYWxsX2xpc3RgIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgZm9yIG1ha2luZyBhc3NlcnRpb25zIG9uICJjaGFpbmVkIGNhbGxzIi4gQQorYGBjYWxsX2xpc3RgYCBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIGZvciBtYWtpbmcgYXNzZXJ0aW9ucyBvbiAiY2hhaW5lZCBjYWxscyIuIEEKIGNoYWluZWQgY2FsbCBpcyBtdWx0aXBsZSBjYWxscyBvbiBhIHNpbmdsZSBsaW5lIG9mIGNvZGUuIFRoaXMgcmVzdWx0cyBpbgogbXVsdGlwbGUgZW50cmllcyBpbiA6YXR0cjpgfk1vY2subW9ja19jYWxsc2Agb24gYSBtb2NrLiBNYW51YWxseSBjb25zdHJ1Y3RpbmcKIHRoZSBzZXF1ZW5jZSBvZiBjYWxscyBjYW4gYmUgdGVkaW91cy4KQEAgLTE3OTksMTUgKzE4MjEsMTUgQEAKIAogLi4gX2NhbGxzLWFzLXR1cGxlczoKIAotQSBgY2FsbGAgb2JqZWN0IGlzIGVpdGhlciBhIHR1cGxlIG9mIChwb3NpdGlvbmFsIGFyZ3MsIGtleXdvcmQgYXJncykgb3IKK0EgYGBjYWxsYGAgb2JqZWN0IGlzIGVpdGhlciBhIHR1cGxlIG9mIChwb3NpdGlvbmFsIGFyZ3MsIGtleXdvcmQgYXJncykgb3IKIChuYW1lLCBwb3NpdGlvbmFsIGFyZ3MsIGtleXdvcmQgYXJncykgZGVwZW5kaW5nIG9uIGhvdyBpdCB3YXMgY29uc3RydWN0ZWQuIFdoZW4KLXlvdSBjb25zdHJ1Y3QgdGhlbSB5b3Vyc2VsZiB0aGlzIGlzbid0IHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZywgYnV0IHRoZSBgY2FsbGAKK3lvdSBjb25zdHJ1Y3QgdGhlbSB5b3Vyc2VsZiB0aGlzIGlzbid0IHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZywgYnV0IHRoZSBgYGNhbGxgYAogb2JqZWN0cyB0aGF0IGFyZSBpbiB0aGUgOmF0dHI6YE1vY2suY2FsbF9hcmdzYCwgOmF0dHI6YE1vY2suY2FsbF9hcmdzX2xpc3RgIGFuZAogOmF0dHI6YE1vY2subW9ja19jYWxsc2AgYXR0cmlidXRlcyBjYW4gYmUgaW50cm9zcGVjdGVkIHRvIGdldCBhdCB0aGUgaW5kaXZpZHVhbAogYXJndW1lbnRzIHRoZXkgY29udGFpbi4KIAotVGhlIGBjYWxsYCBvYmplY3RzIGluIDphdHRyOmBNb2NrLmNhbGxfYXJnc2AgYW5kIDphdHRyOmBNb2NrLmNhbGxfYXJnc19saXN0YAotYXJlIHR3by10dXBsZXMgb2YgKHBvc2l0aW9uYWwgYXJncywga2V5d29yZCBhcmdzKSB3aGVyZWFzIHRoZSBgY2FsbGAgb2JqZWN0cworVGhlIGBgY2FsbGBgIG9iamVjdHMgaW4gOmF0dHI6YE1vY2suY2FsbF9hcmdzYCBhbmQgOmF0dHI6YE1vY2suY2FsbF9hcmdzX2xpc3RgCithcmUgdHdvLXR1cGxlcyBvZiAocG9zaXRpb25hbCBhcmdzLCBrZXl3b3JkIGFyZ3MpIHdoZXJlYXMgdGhlIGBgY2FsbGBgIG9iamVjdHMKIGluIDphdHRyOmBNb2NrLm1vY2tfY2FsbHNgLCBhbG9uZyB3aXRoIG9uZXMgeW91IGNvbnN0cnVjdCB5b3Vyc2VsZiwgYXJlCiB0aHJlZS10dXBsZXMgb2YgKG5hbWUsIHBvc2l0aW9uYWwgYXJncywga2V5d29yZCBhcmdzKS4KIApAQCAtMTg1MCwyNSArMTg3MiwyNSBAQAogLi4gZnVuY3Rpb246OiBjcmVhdGVfYXV0b3NwZWMoc3BlYywgc3BlY19zZXQ9RmFsc2UsIGluc3RhbmNlPUZhbHNlLCAqKmt3YXJncykKIAogICAgIENyZWF0ZSBhIG1vY2sgb2JqZWN0IHVzaW5nIGFub3RoZXIgb2JqZWN0IGFzIGEgc3BlYy4gQXR0cmlidXRlcyBvbiB0aGUKLSAgICBtb2NrIHdpbGwgdXNlIHRoZSBjb3JyZXNwb25kaW5nIGF0dHJpYnV0ZSBvbiB0aGUgYHNwZWNgIG9iamVjdCBhcyB0aGVpcgorICAgIG1vY2sgd2lsbCB1c2UgdGhlIGNvcnJlc3BvbmRpbmcgYXR0cmlidXRlIG9uIHRoZSAqc3BlYyogb2JqZWN0IGFzIHRoZWlyCiAgICAgc3BlYy4KIAogICAgIEZ1bmN0aW9ucyBvciBtZXRob2RzIGJlaW5nIG1vY2tlZCB3aWxsIGhhdmUgdGhlaXIgYXJndW1lbnRzIGNoZWNrZWQgdG8KICAgICBlbnN1cmUgdGhhdCB0aGV5IGFyZSBjYWxsZWQgd2l0aCB0aGUgY29ycmVjdCBzaWduYXR1cmUuCiAKLSAgICBJZiBgc3BlY19zZXRgIGlzIGBUcnVlYCB0aGVuIGF0dGVtcHRpbmcgdG8gc2V0IGF0dHJpYnV0ZXMgdGhhdCBkb24ndCBleGlzdAotICAgIG9uIHRoZSBzcGVjIG9iamVjdCB3aWxsIHJhaXNlIGFuIGBBdHRyaWJ1dGVFcnJvcmAuCisgICAgSWYgKnNwZWNfc2V0KiBpcyBgYFRydWVgYCB0aGVuIGF0dGVtcHRpbmcgdG8gc2V0IGF0dHJpYnV0ZXMgdGhhdCBkb24ndCBleGlzdAorICAgIG9uIHRoZSBzcGVjIG9iamVjdCB3aWxsIHJhaXNlIGFuIDpleGM6YEF0dHJpYnV0ZUVycm9yYC4KIAogICAgIElmIGEgY2xhc3MgaXMgdXNlZCBhcyBhIHNwZWMgdGhlbiB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBtb2NrICh0aGUKICAgICBpbnN0YW5jZSBvZiB0aGUgY2xhc3MpIHdpbGwgaGF2ZSB0aGUgc2FtZSBzcGVjLiBZb3UgY2FuIHVzZSBhIGNsYXNzIGFzIHRoZQotICAgIHNwZWMgZm9yIGFuIGluc3RhbmNlIG9iamVjdCBieSBwYXNzaW5nIGBpbnN0YW5jZT1UcnVlYC4gVGhlIHJldHVybmVkIG1vY2sKKyAgICBzcGVjIGZvciBhbiBpbnN0YW5jZSBvYmplY3QgYnkgcGFzc2luZyBgYGluc3RhbmNlPVRydWVgYC4gVGhlIHJldHVybmVkIG1vY2sKICAgICB3aWxsIG9ubHkgYmUgY2FsbGFibGUgaWYgaW5zdGFuY2VzIG9mIHRoZSBtb2NrIGFyZSBjYWxsYWJsZS4KIAotICAgIGBjcmVhdGVfYXV0b3NwZWNgIGFsc28gdGFrZXMgYXJiaXRyYXJ5IGtleXdvcmQgYXJndW1lbnRzIHRoYXQgYXJlIHBhc3NlZCB0bworICAgIDpmdW5jOmBjcmVhdGVfYXV0b3NwZWNgIGFsc28gdGFrZXMgYXJiaXRyYXJ5IGtleXdvcmQgYXJndW1lbnRzIHRoYXQgYXJlIHBhc3NlZCB0bwogICAgIHRoZSBjb25zdHJ1Y3RvciBvZiB0aGUgY3JlYXRlZCBtb2NrLgogCiBTZWUgOnJlZjpgYXV0by1zcGVjY2luZ2AgZm9yIGV4YW1wbGVzIG9mIGhvdyB0byB1c2UgYXV0by1zcGVjY2luZyB3aXRoCi1gY3JlYXRlX2F1dG9zcGVjYCBhbmQgdGhlIGBhdXRvc3BlY2AgYXJndW1lbnQgdG8gOmZ1bmM6YHBhdGNoYC4KKzpmdW5jOmBjcmVhdGVfYXV0b3NwZWNgIGFuZCB0aGUgKmF1dG9zcGVjKiBhcmd1bWVudCB0byA6ZnVuYzpgcGF0Y2hgLgogCiAKIEFOWQpAQCAtMTg5MCw3ICsxOTEyLDcgQEAKICAgICA+Pj4gbW9jaygnZm9vJywgYmFyPW9iamVjdCgpKQogICAgID4+PiBtb2NrLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKCdmb28nLCBiYXI9QU5ZKQogCi1gQU5ZYCBjYW4gYWxzbyBiZSB1c2VkIGluIGNvbXBhcmlzb25zIHdpdGggY2FsbCBsaXN0cyBsaWtlCis6ZGF0YTpgQU5ZYCBjYW4gYWxzbyBiZSB1c2VkIGluIGNvbXBhcmlzb25zIHdpdGggY2FsbCBsaXN0cyBsaWtlCiA6YXR0cjpgfk1vY2subW9ja19jYWxsc2A6CiAKICAgICA+Pj4gbSA9IE1hZ2ljTW9jayhyZXR1cm5fdmFsdWU9Tm9uZSkKQEAgLTE5MDcsMTUgKzE5MjksMTUgQEAKIAogLi4gZGF0YTo6IEZJTFRFUl9ESVIKIAotYEZJTFRFUl9ESVJgIGlzIGEgbW9kdWxlIGxldmVsIHZhcmlhYmxlIHRoYXQgY29udHJvbHMgdGhlIHdheSBtb2NrIG9iamVjdHMKLXJlc3BvbmQgdG8gYGRpcmAgKG9ubHkgZm9yIFB5dGhvbiAyLjYgb3IgbW9yZSByZWNlbnQpLiBUaGUgZGVmYXVsdCBpcyBgVHJ1ZWAsCis6ZGF0YTpgRklMVEVSX0RJUmAgaXMgYSBtb2R1bGUgbGV2ZWwgdmFyaWFibGUgdGhhdCBjb250cm9scyB0aGUgd2F5IG1vY2sgb2JqZWN0cworcmVzcG9uZCB0byA6ZnVuYzpgZGlyYCAob25seSBmb3IgUHl0aG9uIDIuNiBvciBtb3JlIHJlY2VudCkuIFRoZSBkZWZhdWx0IGlzIGBgVHJ1ZWBgLAogd2hpY2ggdXNlcyB0aGUgZmlsdGVyaW5nIGRlc2NyaWJlZCBiZWxvdywgdG8gb25seSBzaG93IHVzZWZ1bCBtZW1iZXJzLiBJZiB5b3UKIGRpc2xpa2UgdGhpcyBmaWx0ZXJpbmcsIG9yIG5lZWQgdG8gc3dpdGNoIGl0IG9mZiBmb3IgZGlhZ25vc3RpYyBwdXJwb3NlcywgdGhlbgotc2V0IGBtb2NrLkZJTFRFUl9ESVIgPSBGYWxzZWAuCitzZXQgYGBtb2NrLkZJTFRFUl9ESVIgPSBGYWxzZWBgLgogCi1XaXRoIGZpbHRlcmluZyBvbiwgYGRpcihzb21lX21vY2spYCBzaG93cyBvbmx5IHVzZWZ1bCBhdHRyaWJ1dGVzIGFuZCB3aWxsCitXaXRoIGZpbHRlcmluZyBvbiwgYGBkaXIoc29tZV9tb2NrKWBgIHNob3dzIG9ubHkgdXNlZnVsIGF0dHJpYnV0ZXMgYW5kIHdpbGwKIGluY2x1ZGUgYW55IGR5bmFtaWNhbGx5IGNyZWF0ZWQgYXR0cmlidXRlcyB0aGF0IHdvdWxkbid0IG5vcm1hbGx5IGJlIHNob3duLgotSWYgdGhlIG1vY2sgd2FzIGNyZWF0ZWQgd2l0aCBhIGBzcGVjYCAob3IgYGF1dG9zcGVjYCBvZiBjb3Vyc2UpIHRoZW4gYWxsIHRoZQorSWYgdGhlIG1vY2sgd2FzIGNyZWF0ZWQgd2l0aCBhICpzcGVjKiAob3IgKmF1dG9zcGVjKiBvZiBjb3Vyc2UpIHRoZW4gYWxsIHRoZQogYXR0cmlidXRlcyBmcm9tIHRoZSBvcmlnaW5hbCBhcmUgc2hvd24sIGV2ZW4gaWYgdGhleSBoYXZlbid0IGJlZW4gYWNjZXNzZWQKIHlldDoKIApAQCAtMTkzNCwxMSArMTk1NiwxMSBAQAogICAgICAnQmFzZUhhbmRsZXInLAogICAgICAuLi4KIAotTWFueSBvZiB0aGUgbm90LXZlcnktdXNlZnVsIChwcml2YXRlIHRvIGBNb2NrYCByYXRoZXIgdGhhbiB0aGUgdGhpbmcgYmVpbmcKK01hbnkgb2YgdGhlIG5vdC12ZXJ5LXVzZWZ1bCAocHJpdmF0ZSB0byA6Y2xhc3M6YE1vY2tgIHJhdGhlciB0aGFuIHRoZSB0aGluZyBiZWluZwogbW9ja2VkKSB1bmRlcnNjb3JlIGFuZCBkb3VibGUgdW5kZXJzY29yZSBwcmVmaXhlZCBhdHRyaWJ1dGVzIGhhdmUgYmVlbgotZmlsdGVyZWQgZnJvbSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgYGRpcmAgb24gYSBgTW9ja2AuIElmIHlvdSBkaXNsaWtlIHRoaXMKK2ZpbHRlcmVkIGZyb20gdGhlIHJlc3VsdCBvZiBjYWxsaW5nIDpmdW5jOmBkaXJgIG9uIGEgOmNsYXNzOmBNb2NrYC4gSWYgeW91IGRpc2xpa2UgdGhpcwogYmVoYXZpb3VyIHlvdSBjYW4gc3dpdGNoIGl0IG9mZiBieSBzZXR0aW5nIHRoZSBtb2R1bGUgbGV2ZWwgc3dpdGNoCi1gRklMVEVSX0RJUmA6Cis6ZGF0YTpgRklMVEVSX0RJUmA6CiAKICAgICA+Pj4gZnJvbSB1bml0dGVzdCBpbXBvcnQgbW9jawogICAgID4+PiBtb2NrLkZJTFRFUl9ESVIgPSBGYWxzZQpAQCAtMTk1Miw5ICsxOTc0LDkgQEAKICAgICAgJ19fY2xhc3NfXycsCiAgICAgIC4uLgogCi1BbHRlcm5hdGl2ZWx5IHlvdSBjYW4ganVzdCB1c2UgYHZhcnMobXlfbW9jaylgIChpbnN0YW5jZSBtZW1iZXJzKSBhbmQKLWBkaXIodHlwZShteV9tb2NrKSlgICh0eXBlIG1lbWJlcnMpIHRvIGJ5cGFzcyB0aGUgZmlsdGVyaW5nIGlycmVzcGVjdGl2ZSBvZgotYG1vY2suRklMVEVSX0RJUmAuCitBbHRlcm5hdGl2ZWx5IHlvdSBjYW4ganVzdCB1c2UgYGB2YXJzKG15X21vY2spYGAgKGluc3RhbmNlIG1lbWJlcnMpIGFuZAorYGBkaXIodHlwZShteV9tb2NrKSlgYCAodHlwZSBtZW1iZXJzKSB0byBieXBhc3MgdGhlIGZpbHRlcmluZyBpcnJlc3BlY3RpdmUgb2YKKzpkYXRhOmBtb2NrLkZJTFRFUl9ESVJgLgogCiAKIG1vY2tfb3BlbgpAQCAtMTk2MiwyNSArMTk4NCw0MCBAQAogCiAuLiBmdW5jdGlvbjo6IG1vY2tfb3Blbihtb2NrPU5vbmUsIHJlYWRfZGF0YT1Ob25lKQogCi0gICAgQSBoZWxwZXIgZnVuY3Rpb24gdG8gY3JlYXRlIGEgbW9jayB0byByZXBsYWNlIHRoZSB1c2Ugb2YgYG9wZW5gLiBJdCB3b3JrcwotICAgIGZvciBgb3BlbmAgY2FsbGVkIGRpcmVjdGx5IG9yIHVzZWQgYXMgYSBjb250ZXh0IG1hbmFnZXIuCisgICAgQSBoZWxwZXIgZnVuY3Rpb24gdG8gY3JlYXRlIGEgbW9jayB0byByZXBsYWNlIHRoZSB1c2Ugb2YgOmZ1bmM6YG9wZW5gLiBJdCB3b3JrcworICAgIGZvciA6ZnVuYzpgb3BlbmAgY2FsbGVkIGRpcmVjdGx5IG9yIHVzZWQgYXMgYSBjb250ZXh0IG1hbmFnZXIuCiAKLSAgICBUaGUgYG1vY2tgIGFyZ3VtZW50IGlzIHRoZSBtb2NrIG9iamVjdCB0byBjb25maWd1cmUuIElmIGBOb25lYCAodGhlCi0gICAgZGVmYXVsdCkgdGhlbiBhIGBNYWdpY01vY2tgIHdpbGwgYmUgY3JlYXRlZCBmb3IgeW91LCB3aXRoIHRoZSBBUEkgbGltaXRlZAorICAgIFRoZSAqbW9jayogYXJndW1lbnQgaXMgdGhlIG1vY2sgb2JqZWN0IHRvIGNvbmZpZ3VyZS4gSWYgYGBOb25lYGAgKHRoZQorICAgIGRlZmF1bHQpIHRoZW4gYSA6Y2xhc3M6YE1hZ2ljTW9ja2Agd2lsbCBiZSBjcmVhdGVkIGZvciB5b3UsIHdpdGggdGhlIEFQSSBsaW1pdGVkCiAgICAgdG8gbWV0aG9kcyBvciBhdHRyaWJ1dGVzIGF2YWlsYWJsZSBvbiBzdGFuZGFyZCBmaWxlIGhhbmRsZXMuCiAKLSAgICBgcmVhZF9kYXRhYCBpcyBhIHN0cmluZyBmb3IgdGhlIGB+aW8uSU9CYXNlLnJlYWRgIG1ldGhvZCBvZiB0aGUgZmlsZSBoYW5kbGUKLSAgICB0byByZXR1cm4uICBUaGlzIGlzIGFuIGVtcHR5IHN0cmluZyBieSBkZWZhdWx0LgorICAgICpyZWFkX2RhdGEqIGlzIGEgc3RyaW5nIGZvciB0aGUgOm1ldGg6YH5pby5JT0Jhc2UucmVhZGAsCisgICAgOm1ldGg6YH5pby5JT0Jhc2UucmVhZGxpbmVgLCBhbmQgOm1ldGg6YH5pby5JT0Jhc2UucmVhZGxpbmVzYCBtZXRob2RzCisgICAgb2YgdGhlIGZpbGUgaGFuZGxlIHRvIHJldHVybi4gIENhbGxzIHRvIHRob3NlIG1ldGhvZHMgd2lsbCB0YWtlIGRhdGEgZnJvbQorICAgICpyZWFkX2RhdGEqIHVudGlsIGl0IGlzIGRlcGxldGVkLiAgVGhlIG1vY2sgb2YgdGhlc2UgbWV0aG9kcyBpcyBwcmV0dHkKKyAgICBzaW1wbGlzdGljOiBldmVyeSB0aW1lIHRoZSAqbW9jayogaXMgY2FsbGVkLCB0aGUgKnJlYWRfZGF0YSogaXMgcmV3b3VuZCB0bworICAgIHRoZSBzdGFydC4gIElmIHlvdSBuZWVkIG1vcmUgY29udHJvbCBvdmVyIHRoZSBkYXRhIHRoYXQgeW91IGFyZSBmZWVkaW5nIHRvCisgICAgdGhlIHRlc3RlZCBjb2RlIHlvdSB3aWxsIG5lZWQgdG8gY3VzdG9taXplIHRoaXMgbW9jayBmb3IgeW91cnNlbGYuICBXaGVuIHRoYXQKKyAgICBpcyBpbnN1ZmZpY2llbnQsIG9uZSBvZiB0aGUgaW4tbWVtb3J5IGZpbGVzeXN0ZW0gcGFja2FnZXMgb24gYFB5UEkKKyAgICA8aHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaT5gXyBjYW4gb2ZmZXIgYSByZWFsaXN0aWMgZmlsZXN5c3RlbSBmb3IgdGVzdGluZy4KIAotVXNpbmcgYG9wZW5gIGFzIGEgY29udGV4dCBtYW5hZ2VyIGlzIGEgZ3JlYXQgd2F5IHRvIGVuc3VyZSB5b3VyIGZpbGUgaGFuZGxlcworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIEFkZGVkIDptZXRoOmB+aW8uSU9CYXNlLnJlYWRsaW5lYCBhbmQgOm1ldGg6YH5pby5JT0Jhc2UucmVhZGxpbmVzYCBzdXBwb3J0LgorICAgICAgVGhlIG1vY2sgb2YgOm1ldGg6YH5pby5JT0Jhc2UucmVhZGAgY2hhbmdlZCB0byBjb25zdW1lICpyZWFkX2RhdGEqIHJhdGhlcgorICAgICAgdGhhbiByZXR1cm5pbmcgaXQgb24gZWFjaCBjYWxsLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNC40CisgICAgICAqcmVhZF9kYXRhKiBpcyBub3cgcmVzZXQgb24gZWFjaCBjYWxsIHRvIHRoZSAqbW9jayouCisKK1VzaW5nIDpmdW5jOmBvcGVuYCBhcyBhIGNvbnRleHQgbWFuYWdlciBpcyBhIGdyZWF0IHdheSB0byBlbnN1cmUgeW91ciBmaWxlIGhhbmRsZXMKIGFyZSBjbG9zZWQgcHJvcGVybHkgYW5kIGlzIGJlY29taW5nIGNvbW1vbjo6CiAKICAgICB3aXRoIG9wZW4oJy9zb21lL3BhdGgnLCAndycpIGFzIGY6CiAgICAgICAgIGYud3JpdGUoJ3NvbWV0aGluZycpCiAKLVRoZSBpc3N1ZSBpcyB0aGF0IGV2ZW4gaWYgeW91IG1vY2sgb3V0IHRoZSBjYWxsIHRvIGBvcGVuYCBpdCBpcyB0aGUKLSpyZXR1cm5lZCBvYmplY3QqIHRoYXQgaXMgdXNlZCBhcyBhIGNvbnRleHQgbWFuYWdlciAoYW5kIGhhcyBgX19lbnRlcl9fYCBhbmQKLWBfX2V4aXRfX2AgY2FsbGVkKS4KK1RoZSBpc3N1ZSBpcyB0aGF0IGV2ZW4gaWYgeW91IG1vY2sgb3V0IHRoZSBjYWxsIHRvIDpmdW5jOmBvcGVuYCBpdCBpcyB0aGUKKypyZXR1cm5lZCBvYmplY3QqIHRoYXQgaXMgdXNlZCBhcyBhIGNvbnRleHQgbWFuYWdlciAoYW5kIGhhcyA6bWV0aDpgX19lbnRlcl9fYCBhbmQKKzptZXRoOmBfX2V4aXRfX2AgY2FsbGVkKS4KIAogTW9ja2luZyBjb250ZXh0IG1hbmFnZXJzIHdpdGggYSA6Y2xhc3M6YE1hZ2ljTW9ja2AgaXMgY29tbW9uIGVub3VnaCBhbmQgZmlkZGx5CiBlbm91Z2ggdGhhdCBhIGhlbHBlciBmdW5jdGlvbiBpcyB1c2VmdWwuCkBAIC0yMDE0LDIxICsyMDUxLDIxIEBACiBBdXRvc3BlY2NpbmcKIH5+fn5+fn5+fn5+fgogCi1BdXRvc3BlY2NpbmcgaXMgYmFzZWQgb24gdGhlIGV4aXN0aW5nIGBzcGVjYCBmZWF0dXJlIG9mIG1vY2suIEl0IGxpbWl0cyB0aGUKK0F1dG9zcGVjY2luZyBpcyBiYXNlZCBvbiB0aGUgZXhpc3RpbmcgOmF0dHI6YHNwZWNgIGZlYXR1cmUgb2YgbW9jay4gSXQgbGltaXRzIHRoZQogYXBpIG9mIG1vY2tzIHRvIHRoZSBhcGkgb2YgYW4gb3JpZ2luYWwgb2JqZWN0ICh0aGUgc3BlYyksIGJ1dCBpdCBpcyByZWN1cnNpdmUKIChpbXBsZW1lbnRlZCBsYXppbHkpIHNvIHRoYXQgYXR0cmlidXRlcyBvZiBtb2NrcyBvbmx5IGhhdmUgdGhlIHNhbWUgYXBpIGFzCiB0aGUgYXR0cmlidXRlcyBvZiB0aGUgc3BlYy4gSW4gYWRkaXRpb24gbW9ja2VkIGZ1bmN0aW9ucyAvIG1ldGhvZHMgaGF2ZSB0aGUKLXNhbWUgY2FsbCBzaWduYXR1cmUgYXMgdGhlIG9yaWdpbmFsIHNvIHRoZXkgcmFpc2UgYSBgVHlwZUVycm9yYCBpZiB0aGV5IGFyZQorc2FtZSBjYWxsIHNpZ25hdHVyZSBhcyB0aGUgb3JpZ2luYWwgc28gdGhleSByYWlzZSBhIDpleGM6YFR5cGVFcnJvcmAgaWYgdGhleSBhcmUKIGNhbGxlZCBpbmNvcnJlY3RseS4KIAogQmVmb3JlIEkgZXhwbGFpbiBob3cgYXV0by1zcGVjY2luZyB3b3JrcywgaGVyZSdzIHdoeSBpdCBpcyBuZWVkZWQuCiAKLWBNb2NrYCBpcyBhIHZlcnkgcG93ZXJmdWwgYW5kIGZsZXhpYmxlIG9iamVjdCwgYnV0IGl0IHN1ZmZlcnMgZnJvbSB0d28gZmxhd3MKKzpjbGFzczpgTW9ja2AgaXMgYSB2ZXJ5IHBvd2VyZnVsIGFuZCBmbGV4aWJsZSBvYmplY3QsIGJ1dCBpdCBzdWZmZXJzIGZyb20gdHdvIGZsYXdzCiB3aGVuIHVzZWQgdG8gbW9jayBvdXQgb2JqZWN0cyBmcm9tIGEgc3lzdGVtIHVuZGVyIHRlc3QuIE9uZSBvZiB0aGVzZSBmbGF3cyBpcwotc3BlY2lmaWMgdG8gdGhlIGBNb2NrYCBhcGkgYW5kIHRoZSBvdGhlciBpcyBhIG1vcmUgZ2VuZXJhbCBwcm9ibGVtIHdpdGggdXNpbmcKK3NwZWNpZmljIHRvIHRoZSA6Y2xhc3M6YE1vY2tgIGFwaSBhbmQgdGhlIG90aGVyIGlzIGEgbW9yZSBnZW5lcmFsIHByb2JsZW0gd2l0aCB1c2luZwogbW9jayBvYmplY3RzLgogCi1GaXJzdCB0aGUgcHJvYmxlbSBzcGVjaWZpYyB0byBgTW9ja2AuIGBNb2NrYCBoYXMgdHdvIGFzc2VydCBtZXRob2RzIHRoYXQgYXJlCitGaXJzdCB0aGUgcHJvYmxlbSBzcGVjaWZpYyB0byA6Y2xhc3M6YE1vY2tgLiA6Y2xhc3M6YE1vY2tgIGhhcyB0d28gYXNzZXJ0IG1ldGhvZHMgdGhhdCBhcmUKIGV4dHJlbWVseSBoYW5keTogOm1ldGg6YH5Nb2NrLmFzc2VydF9jYWxsZWRfd2l0aGAgYW5kCiA6bWV0aDpgfk1vY2suYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGhgLgogCkBAIC0yMDYzLDggKzIxMDAsOCBAQAogZG9uJ3QgdGVzdCBob3cgeW91ciB1bml0cyBhcmUgIndpcmVkIHRvZ2V0aGVyIiB0aGVyZSBpcyBzdGlsbCBsb3RzIG9mIHJvb20KIGZvciBidWdzIHRoYXQgdGVzdHMgbWlnaHQgaGF2ZSBjYXVnaHQuCiAKLWBtb2NrYCBhbHJlYWR5IHByb3ZpZGVzIGEgZmVhdHVyZSB0byBoZWxwIHdpdGggdGhpcywgY2FsbGVkIHNwZWNjaW5nLiBJZiB5b3UKLXVzZSBhIGNsYXNzIG9yIGluc3RhbmNlIGFzIHRoZSBgc3BlY2AgZm9yIGEgbW9jayB0aGVuIHlvdSBjYW4gb25seSBhY2Nlc3MKKzptb2Q6YG1vY2tgIGFscmVhZHkgcHJvdmlkZXMgYSBmZWF0dXJlIHRvIGhlbHAgd2l0aCB0aGlzLCBjYWxsZWQgc3BlY2NpbmcuIElmIHlvdQordXNlIGEgY2xhc3Mgb3IgaW5zdGFuY2UgYXMgdGhlIDphdHRyOmBzcGVjYCBmb3IgYSBtb2NrIHRoZW4geW91IGNhbiBvbmx5IGFjY2VzcwogYXR0cmlidXRlcyBvbiB0aGUgbW9jayB0aGF0IGV4aXN0IG9uIHRoZSByZWFsIGNsYXNzOgogCiAgICAgPj4+IGZyb20gdXJsbGliIGltcG9ydCByZXF1ZXN0CkBAIC0yMDgzLDkgKzIxMjAsOSBAQAogICAgIDxtb2NrLk1vY2sgb2JqZWN0IGF0IDB4Li4uPgogICAgID4+PiBtb2NrLmhhc19kYXRhLmFzc3JldF9jYWxsZWRfd2l0aCgpCiAKLUF1dG8tc3BlY2Npbmcgc29sdmVzIHRoaXMgcHJvYmxlbS4gWW91IGNhbiBlaXRoZXIgcGFzcyBgYXV0b3NwZWM9VHJ1ZWAgdG8KLWBwYXRjaGAgLyBgcGF0Y2gub2JqZWN0YCBvciB1c2UgdGhlIGBjcmVhdGVfYXV0b3NwZWNgIGZ1bmN0aW9uIHRvIGNyZWF0ZSBhCi1tb2NrIHdpdGggYSBzcGVjLiBJZiB5b3UgdXNlIHRoZSBgYXV0b3NwZWM9VHJ1ZWAgYXJndW1lbnQgdG8gYHBhdGNoYCB0aGVuIHRoZQorQXV0by1zcGVjY2luZyBzb2x2ZXMgdGhpcyBwcm9ibGVtLiBZb3UgY2FuIGVpdGhlciBwYXNzIGBgYXV0b3NwZWM9VHJ1ZWBgIHRvCis6ZnVuYzpgcGF0Y2hgIC8gOmZ1bmM6YHBhdGNoLm9iamVjdGAgb3IgdXNlIHRoZSA6ZnVuYzpgY3JlYXRlX2F1dG9zcGVjYCBmdW5jdGlvbiB0byBjcmVhdGUgYQorbW9jayB3aXRoIGEgc3BlYy4gSWYgeW91IHVzZSB0aGUgYGBhdXRvc3BlYz1UcnVlYGAgYXJndW1lbnQgdG8gOmZ1bmM6YHBhdGNoYCB0aGVuIHRoZQogb2JqZWN0IHRoYXQgaXMgYmVpbmcgcmVwbGFjZWQgd2lsbCBiZSB1c2VkIGFzIHRoZSBzcGVjIG9iamVjdC4gQmVjYXVzZSB0aGUKIHNwZWNjaW5nIGlzIGRvbmUgImxhemlseSIgKHRoZSBzcGVjIGlzIGNyZWF0ZWQgYXMgYXR0cmlidXRlcyBvbiB0aGUgbW9jayBhcmUKIGFjY2Vzc2VkKSB5b3UgY2FuIHVzZSBpdCB3aXRoIHZlcnkgY29tcGxleCBvciBkZWVwbHkgbmVzdGVkIG9iamVjdHMgKGxpa2UKQEAgLTIxMDIsOCArMjEzOSw4IEBACiAgICAgPj4+IG1vY2tfcmVxdWVzdC5SZXF1ZXN0CiAgICAgPE1hZ2ljTW9jayBuYW1lPSdyZXF1ZXN0LlJlcXVlc3QnIHNwZWM9J1JlcXVlc3QnIGlkPScuLi4nPgogCi1Zb3UgY2FuIHNlZSB0aGF0IGByZXF1ZXN0LlJlcXVlc3RgIGhhcyBhIHNwZWMuIGByZXF1ZXN0LlJlcXVlc3RgIHRha2VzIHR3bwotYXJndW1lbnRzIGluIHRoZSBjb25zdHJ1Y3RvciAob25lIG9mIHdoaWNoIGlzIGBzZWxmYCkuIEhlcmUncyB3aGF0IGhhcHBlbnMgaWYKK1lvdSBjYW4gc2VlIHRoYXQgOmNsYXNzOmByZXF1ZXN0LlJlcXVlc3RgIGhhcyBhIHNwZWMuIDpjbGFzczpgcmVxdWVzdC5SZXF1ZXN0YCB0YWtlcyB0d28KK2FyZ3VtZW50cyBpbiB0aGUgY29uc3RydWN0b3IgKG9uZSBvZiB3aGljaCBpcyAqc2VsZiopLiBIZXJlJ3Mgd2hhdCBoYXBwZW5zIGlmCiB3ZSB0cnkgdG8gY2FsbCBpdCBpbmNvcnJlY3RseToKIAogICAgID4+PiByZXEgPSByZXF1ZXN0LlJlcXVlc3QoKQpAQCAtMjExOCw4ICsyMTU1LDggQEAKICAgICA+Pj4gcmVxCiAgICAgPE5vbkNhbGxhYmxlTWFnaWNNb2NrIG5hbWU9J3JlcXVlc3QuUmVxdWVzdCgpJyBzcGVjPSdSZXF1ZXN0JyBpZD0nLi4uJz4KIAotYFJlcXVlc3RgIG9iamVjdHMgYXJlIG5vdCBjYWxsYWJsZSwgc28gdGhlIHJldHVybiB2YWx1ZSBvZiBpbnN0YW50aWF0aW5nIG91cgotbW9ja2VkIG91dCBgcmVxdWVzdC5SZXF1ZXN0YCBpcyBhIG5vbi1jYWxsYWJsZSBtb2NrLiBXaXRoIHRoZSBzcGVjIGluIHBsYWNlCis6Y2xhc3M6YFJlcXVlc3RgIG9iamVjdHMgYXJlIG5vdCBjYWxsYWJsZSwgc28gdGhlIHJldHVybiB2YWx1ZSBvZiBpbnN0YW50aWF0aW5nIG91cgorbW9ja2VkIG91dCA6Y2xhc3M6YHJlcXVlc3QuUmVxdWVzdGAgaXMgYSBub24tY2FsbGFibGUgbW9jay4gV2l0aCB0aGUgc3BlYyBpbiBwbGFjZQogYW55IHR5cG9zIGluIG91ciBhc3NlcnRzIHdpbGwgcmFpc2UgdGhlIGNvcnJlY3QgZXJyb3I6CiAKICAgICA+Pj4gcmVxLmFkZF9oZWFkZXIoJ3NwYW0nLCAnZWdncycpCkBAIC0yMTMwLDExICsyMTY3LDExIEBACiAgICAgQXR0cmlidXRlRXJyb3I6IE1vY2sgb2JqZWN0IGhhcyBubyBhdHRyaWJ1dGUgJ2Fzc3JldF9jYWxsZWRfd2l0aCcKICAgICA+Pj4gcmVxLmFkZF9oZWFkZXIuYXNzZXJ0X2NhbGxlZF93aXRoKCdzcGFtJywgJ2VnZ3MnKQogCi1JbiBtYW55IGNhc2VzIHlvdSB3aWxsIGp1c3QgYmUgYWJsZSB0byBhZGQgYGF1dG9zcGVjPVRydWVgIHRvIHlvdXIgZXhpc3RpbmcKLWBwYXRjaGAgY2FsbHMgYW5kIHRoZW4gYmUgcHJvdGVjdGVkIGFnYWluc3QgYnVncyBkdWUgdG8gdHlwb3MgYW5kIGFwaQorSW4gbWFueSBjYXNlcyB5b3Ugd2lsbCBqdXN0IGJlIGFibGUgdG8gYWRkIGBgYXV0b3NwZWM9VHJ1ZWBgIHRvIHlvdXIgZXhpc3RpbmcKKzpmdW5jOmBwYXRjaGAgY2FsbHMgYW5kIHRoZW4gYmUgcHJvdGVjdGVkIGFnYWluc3QgYnVncyBkdWUgdG8gdHlwb3MgYW5kIGFwaQogY2hhbmdlcy4KIAotQXMgd2VsbCBhcyB1c2luZyBgYXV0b3NwZWNgIHRocm91Z2ggYHBhdGNoYCB0aGVyZSBpcyBhCitBcyB3ZWxsIGFzIHVzaW5nICphdXRvc3BlYyogdGhyb3VnaCA6ZnVuYzpgcGF0Y2hgIHRoZXJlIGlzIGEKIDpmdW5jOmBjcmVhdGVfYXV0b3NwZWNgIGZvciBjcmVhdGluZyBhdXRvc3BlY2NlZCBtb2NrcyBkaXJlY3RseToKIAogICAgID4+PiBmcm9tIHVybGxpYiBpbXBvcnQgcmVxdWVzdApAQCAtMjE1Miw4ICsyMTg5LDggQEAKIG9iamVjdHMgc28gdGhhdCBpbnRyb3NwZWN0aW9uIGlzIHNhZmUgWyNdXy4KIAogQSBtb3JlIHNlcmlvdXMgcHJvYmxlbSBpcyB0aGF0IGl0IGlzIGNvbW1vbiBmb3IgaW5zdGFuY2UgYXR0cmlidXRlcyB0byBiZQotY3JlYXRlZCBpbiB0aGUgYF9faW5pdF9fYCBtZXRob2QgYW5kIG5vdCB0byBleGlzdCBvbiB0aGUgY2xhc3MgYXQgYWxsLgotYGF1dG9zcGVjYCBjYW4ndCBrbm93IGFib3V0IGFueSBkeW5hbWljYWxseSBjcmVhdGVkIGF0dHJpYnV0ZXMgYW5kIHJlc3RyaWN0cworY3JlYXRlZCBpbiB0aGUgOm1ldGg6YF9faW5pdF9fYCBtZXRob2QgYW5kIG5vdCB0byBleGlzdCBvbiB0aGUgY2xhc3MgYXQgYWxsLgorKmF1dG9zcGVjKiBjYW4ndCBrbm93IGFib3V0IGFueSBkeW5hbWljYWxseSBjcmVhdGVkIGF0dHJpYnV0ZXMgYW5kIHJlc3RyaWN0cwogdGhlIGFwaSB0byB2aXNpYmxlIGF0dHJpYnV0ZXMuCiAKICAgICA+Pj4gY2xhc3MgU29tZXRoaW5nOgpAQCAtMjE3MCw3ICsyMjA3LDcgQEAKIAogVGhlcmUgYXJlIGEgZmV3IGRpZmZlcmVudCB3YXlzIG9mIHJlc29sdmluZyB0aGlzIHByb2JsZW0uIFRoZSBlYXNpZXN0LCBidXQKIG5vdCBuZWNlc3NhcmlseSB0aGUgbGVhc3QgYW5ub3lpbmcsIHdheSBpcyB0byBzaW1wbHkgc2V0IHRoZSByZXF1aXJlZAotYXR0cmlidXRlcyBvbiB0aGUgbW9jayBhZnRlciBjcmVhdGlvbi4gSnVzdCBiZWNhdXNlIGBhdXRvc3BlY2AgZG9lc24ndCBhbGxvdworYXR0cmlidXRlcyBvbiB0aGUgbW9jayBhZnRlciBjcmVhdGlvbi4gSnVzdCBiZWNhdXNlICphdXRvc3BlYyogZG9lc24ndCBhbGxvdwogeW91IHRvIGZldGNoIGF0dHJpYnV0ZXMgdGhhdCBkb24ndCBleGlzdCBvbiB0aGUgc3BlYyBpdCBkb2Vzbid0IHByZXZlbnQgeW91CiBzZXR0aW5nIHRoZW06CiAKQEAgLTIxNzksNyArMjIxNiw3IEBACiAgICAgLi4uICAgdGhpbmcuYSA9IDMzCiAgICAgLi4uCiAKLVRoZXJlIGlzIGEgbW9yZSBhZ2dyZXNzaXZlIHZlcnNpb24gb2YgYm90aCBgc3BlY2AgYW5kIGBhdXRvc3BlY2AgdGhhdCAqZG9lcyoKK1RoZXJlIGlzIGEgbW9yZSBhZ2dyZXNzaXZlIHZlcnNpb24gb2YgYm90aCAqc3BlYyogYW5kICphdXRvc3BlYyogdGhhdCAqZG9lcyoKIHByZXZlbnQgeW91IHNldHRpbmcgbm9uLWV4aXN0ZW50IGF0dHJpYnV0ZXMuIFRoaXMgaXMgdXNlZnVsIGlmIHlvdSB3YW50IHRvCiBlbnN1cmUgeW91ciBjb2RlIG9ubHkgKnNldHMqIHZhbGlkIGF0dHJpYnV0ZXMgdG9vLCBidXQgb2J2aW91c2x5IGl0IHByZXZlbnRzCiB0aGlzIHBhcnRpY3VsYXIgc2NlbmFyaW86CkBAIC0yMTkzLDggKzIyMzAsOCBAQAogICAgIEF0dHJpYnV0ZUVycm9yOiBNb2NrIG9iamVjdCBoYXMgbm8gYXR0cmlidXRlICdhJwogCiBQcm9iYWJseSB0aGUgYmVzdCB3YXkgb2Ygc29sdmluZyB0aGUgcHJvYmxlbSBpcyB0byBhZGQgY2xhc3MgYXR0cmlidXRlcyBhcwotZGVmYXVsdCB2YWx1ZXMgZm9yIGluc3RhbmNlIG1lbWJlcnMgaW5pdGlhbGlzZWQgaW4gYF9faW5pdF9fYC4gTm90ZSB0aGF0IGlmCi15b3UgYXJlIG9ubHkgc2V0dGluZyBkZWZhdWx0IGF0dHJpYnV0ZXMgaW4gYF9faW5pdF9fYCB0aGVuIHByb3ZpZGluZyB0aGVtIHZpYQorZGVmYXVsdCB2YWx1ZXMgZm9yIGluc3RhbmNlIG1lbWJlcnMgaW5pdGlhbGlzZWQgaW4gOm1ldGg6YF9faW5pdF9fYC4gTm90ZSB0aGF0IGlmCit5b3UgYXJlIG9ubHkgc2V0dGluZyBkZWZhdWx0IGF0dHJpYnV0ZXMgaW4gOm1ldGg6YF9faW5pdF9fYCB0aGVuIHByb3ZpZGluZyB0aGVtIHZpYQogY2xhc3MgYXR0cmlidXRlcyAoc2hhcmVkIGJldHdlZW4gaW5zdGFuY2VzIG9mIGNvdXJzZSkgaXMgZmFzdGVyIHRvby4gZS5nLgogCiAuLiBjb2RlLWJsb2NrOjogcHl0aG9uCkBAIC0yMjAzLDEyICsyMjQwLDEyIEBACiAgICAgICAgIGEgPSAzMwogCiBUaGlzIGJyaW5ncyB1cCBhbm90aGVyIGlzc3VlLiBJdCBpcyByZWxhdGl2ZWx5IGNvbW1vbiB0byBwcm92aWRlIGEgZGVmYXVsdAotdmFsdWUgb2YgYE5vbmVgIGZvciBtZW1iZXJzIHRoYXQgd2lsbCBsYXRlciBiZSBhbiBvYmplY3Qgb2YgYSBkaWZmZXJlbnQgdHlwZS4KLWBOb25lYCB3b3VsZCBiZSB1c2VsZXNzIGFzIGEgc3BlYyBiZWNhdXNlIGl0IHdvdWxkbid0IGxldCB5b3UgYWNjZXNzICphbnkqCi1hdHRyaWJ1dGVzIG9yIG1ldGhvZHMgb24gaXQuIEFzIGBOb25lYCBpcyAqbmV2ZXIqIGdvaW5nIHRvIGJlIHVzZWZ1bCBhcyBhCit2YWx1ZSBvZiBgYE5vbmVgYCBmb3IgbWVtYmVycyB0aGF0IHdpbGwgbGF0ZXIgYmUgYW4gb2JqZWN0IG9mIGEgZGlmZmVyZW50IHR5cGUuCitgYE5vbmVgYCB3b3VsZCBiZSB1c2VsZXNzIGFzIGEgc3BlYyBiZWNhdXNlIGl0IHdvdWxkbid0IGxldCB5b3UgYWNjZXNzICphbnkqCithdHRyaWJ1dGVzIG9yIG1ldGhvZHMgb24gaXQuIEFzIGBgTm9uZWBgIGlzICpuZXZlciogZ29pbmcgdG8gYmUgdXNlZnVsIGFzIGEKIHNwZWMsIGFuZCBwcm9iYWJseSBpbmRpY2F0ZXMgYSBtZW1iZXIgdGhhdCB3aWxsIG5vcm1hbGx5IG9mIHNvbWUgb3RoZXIgdHlwZSwKLWBhdXRvc3BlY2AgZG9lc24ndCB1c2UgYSBzcGVjIGZvciBtZW1iZXJzIHRoYXQgYXJlIHNldCB0byBgTm9uZWAuIFRoZXNlIHdpbGwKLWp1c3QgYmUgb3JkaW5hcnkgbW9ja3MgKHdlbGwgLSBgTWFnaWNNb2Nrc2ApOgorYXV0b3NwZWMgZG9lc24ndCB1c2UgYSBzcGVjIGZvciBtZW1iZXJzIHRoYXQgYXJlIHNldCB0byBgYE5vbmVgYC4gVGhlc2Ugd2lsbAoranVzdCBiZSBvcmRpbmFyeSBtb2NrcyAod2VsbCAtIE1hZ2ljTW9ja3MpOgogCiAgICAgPj4+IGNsYXNzIFNvbWV0aGluZzoKICAgICAuLi4gICAgIG1lbWJlciA9IE5vbmUKQEAgLTIyMjIsOCArMjI1OSw4IEBACiBzcGVjIHJhdGhlciB0aGFuIHRoZSBjbGFzcy4gVGhlIG90aGVyIGlzIHRvIGNyZWF0ZSBhIHN1YmNsYXNzIG9mIHRoZQogcHJvZHVjdGlvbiBjbGFzcyBhbmQgYWRkIHRoZSBkZWZhdWx0cyB0byB0aGUgc3ViY2xhc3Mgd2l0aG91dCBhZmZlY3RpbmcgdGhlCiBwcm9kdWN0aW9uIGNsYXNzLiBCb3RoIG9mIHRoZXNlIHJlcXVpcmUgeW91IHRvIHVzZSBhbiBhbHRlcm5hdGl2ZSBvYmplY3QgYXMKLXRoZSBzcGVjLiBUaGFua2Z1bGx5IGBwYXRjaGAgc3VwcG9ydHMgdGhpcyAtIHlvdSBjYW4gc2ltcGx5IHBhc3MgdGhlCi1hbHRlcm5hdGl2ZSBvYmplY3QgYXMgdGhlIGBhdXRvc3BlY2AgYXJndW1lbnQ6Cit0aGUgc3BlYy4gVGhhbmtmdWxseSA6ZnVuYzpgcGF0Y2hgIHN1cHBvcnRzIHRoaXMgLSB5b3UgY2FuIHNpbXBseSBwYXNzIHRoZQorYWx0ZXJuYXRpdmUgb2JqZWN0IGFzIHRoZSAqYXV0b3NwZWMqIGFyZ3VtZW50OgogCiAgICAgPj4+IGNsYXNzIFNvbWV0aGluZzoKICAgICAuLi4gICBkZWYgX19pbml0X18oc2VsZik6CkBAIC0yMjQwLDUgKzIyNzcsNSBAQAogCiAuLiBbI10gVGhpcyBvbmx5IGFwcGxpZXMgdG8gY2xhc3NlcyBvciBhbHJlYWR5IGluc3RhbnRpYXRlZCBvYmplY3RzLiBDYWxsaW5nCiAgICBhIG1vY2tlZCBjbGFzcyB0byBjcmVhdGUgYSBtb2NrIGluc3RhbmNlICpkb2VzIG5vdCogY3JlYXRlIGEgcmVhbCBpbnN0YW5jZS4KLSAgIEl0IGlzIG9ubHkgYXR0cmlidXRlIGxvb2t1cHMgLSBhbG9uZyB3aXRoIGNhbGxzIHRvIGBkaXJgIC0gdGhhdCBhcmUgZG9uZS4KKyAgIEl0IGlzIG9ubHkgYXR0cmlidXRlIGxvb2t1cHMgLSBhbG9uZyB3aXRoIGNhbGxzIHRvIDpmdW5jOmBkaXJgIC0gdGhhdCBhcmUgZG9uZS4KIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvdW5pdHRlc3QucnN0IGIvRG9jL2xpYnJhcnkvdW5pdHRlc3QucnN0CmluZGV4IGZkYzk0MDkuLmE4ZDlmNTMgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3VuaXR0ZXN0LnJzdAorKysgYi9Eb2MvbGlicmFyeS91bml0dGVzdC5yc3QKQEAgLTQ3LDE1ICs0NywxNSBAQAogICAgTW9kdWxlIDptb2Q6YGRvY3Rlc3RgCiAgICAgICBBbm90aGVyIHRlc3Qtc3VwcG9ydCBtb2R1bGUgd2l0aCBhIHZlcnkgZGlmZmVyZW50IGZsYXZvci4KIAotICAgYFNpbXBsZSBTbWFsbHRhbGsgVGVzdGluZzogV2l0aCBQYXR0ZXJucyA8aHR0cDovL3d3dy5YUHJvZ3JhbW1pbmcuY29tL3Rlc3RmcmFtLmh0bT5gXworICAgYFNpbXBsZSBTbWFsbHRhbGsgVGVzdGluZzogV2l0aCBQYXR0ZXJucyA8aHR0cHM6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLzIwMTUwMzE1MDczODE3L2h0dHA6Ly93d3cueHByb2dyYW1taW5nLmNvbS90ZXN0ZnJhbS5odG0+YF8KICAgICAgIEtlbnQgQmVjaydzIG9yaWdpbmFsIHBhcGVyIG9uIHRlc3RpbmcgZnJhbWV3b3JrcyB1c2luZyB0aGUgcGF0dGVybiBzaGFyZWQKICAgICAgIGJ5IDptb2Q6YHVuaXR0ZXN0YC4KIAotICAgYE5vc2UgPGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9weXRob24tbm9zZS8+YF8gYW5kIGBweS50ZXN0IDxodHRwOi8vcHl0ZXN0Lm9yZz5gXworICAgYE5vc2UgPGh0dHBzOi8vbm9zZS5yZWFkdGhlZG9jcy5vcmcvZW4vbGF0ZXN0Lz5gXyBhbmQgYHB5LnRlc3QgPGh0dHA6Ly9weXRlc3Qub3JnPmBfCiAgICAgICBUaGlyZC1wYXJ0eSB1bml0dGVzdCBmcmFtZXdvcmtzIHdpdGggYSBsaWdodGVyLXdlaWdodCBzeW50YXggZm9yIHdyaXRpbmcKICAgICAgIHRlc3RzLiAgRm9yIGV4YW1wbGUsIGBgYXNzZXJ0IGZ1bmMoMTApID09IDQyYGAuCiAKLSAgIGBUaGUgUHl0aG9uIFRlc3RpbmcgVG9vbHMgVGF4b25vbXkgPGh0dHA6Ly93aWtpLnB5dGhvbi5vcmcvbW9pbi9QeXRob25UZXN0aW5nVG9vbHNUYXhvbm9teT5gXworICAgYFRoZSBQeXRob24gVGVzdGluZyBUb29scyBUYXhvbm9teSA8aHR0cHM6Ly93aWtpLnB5dGhvbi5vcmcvbW9pbi9QeXRob25UZXN0aW5nVG9vbHNUYXhvbm9teT5gXwogICAgICAgQW4gZXh0ZW5zaXZlIGxpc3Qgb2YgUHl0aG9uIHRlc3RpbmcgdG9vbHMgaW5jbHVkaW5nIGZ1bmN0aW9uYWwgdGVzdGluZwogICAgICAgZnJhbWV3b3JrcyBhbmQgbW9jayBvYmplY3QgbGlicmFyaWVzLgogCkBAIC02Nyw3ICs2Nyw3IEBACiAgICBhIEdVSSB0b29sIGZvciB0ZXN0IGRpc2NvdmVyeSBhbmQgZXhlY3V0aW9uLiAgVGhpcyBpcyBpbnRlbmRlZCBsYXJnZWx5IGZvciBlYXNlIG9mIHVzZQogICAgZm9yIHRob3NlIG5ldyB0byB1bml0IHRlc3RpbmcuICBGb3IgcHJvZHVjdGlvbiBlbnZpcm9ubWVudHMgaXQgaXMKICAgIHJlY29tbWVuZGVkIHRoYXQgdGVzdHMgYmUgZHJpdmVuIGJ5IGEgY29udGludW91cyBpbnRlZ3JhdGlvbiBzeXN0ZW0gc3VjaCBhcwotICAgYEJ1aWxkYm90IDxodHRwOi8vYnVpbGRib3QubmV0L3RyYWM+YF8sIGBKZW5raW5zIDxodHRwOi8vamVua2lucy1jaS5vcmc+YF8KKyAgIGBCdWlsZGJvdCA8aHR0cDovL2J1aWxkYm90Lm5ldC8+YF8sIGBKZW5raW5zIDxodHRwOi8vamVua2lucy1jaS5vcmcvPmBfCiAgICBvciAgYEh1ZHNvbiA8aHR0cDovL2h1ZHNvbi1jaS5vcmcvPmBfLgogCiAKQEAgLTgwLDM3ICs4MCwyOSBAQAogcnVubmluZyB0ZXN0cy4gIFRoaXMgc2VjdGlvbiBkZW1vbnN0cmF0ZXMgdGhhdCBhIHNtYWxsIHN1YnNldCBvZiB0aGUgdG9vbHMKIHN1ZmZpY2UgdG8gbWVldCB0aGUgbmVlZHMgb2YgbW9zdCB1c2Vycy4KIAotSGVyZSBpcyBhIHNob3J0IHNjcmlwdCB0byB0ZXN0IHRocmVlIGZ1bmN0aW9ucyBmcm9tIHRoZSA6bW9kOmByYW5kb21gIG1vZHVsZTo6CitIZXJlIGlzIGEgc2hvcnQgc2NyaXB0IHRvIHRlc3QgdGhyZWUgc3RyaW5nIG1ldGhvZHM6OgogCi0gICBpbXBvcnQgcmFuZG9tCi0gICBpbXBvcnQgdW5pdHRlc3QKKyAgaW1wb3J0IHVuaXR0ZXN0CiAKLSAgIGNsYXNzIFRlc3RTZXF1ZW5jZUZ1bmN0aW9ucyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgIGNsYXNzIFRlc3RTdHJpbmdNZXRob2RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAotICAgICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgICAgc2VsZi5zZXEgPSBsaXN0KHJhbmdlKDEwKSkKKyAgICBkZWYgdGVzdF91cHBlcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnZm9vJy51cHBlcigpLCAnRk9PJykKIAotICAgICAgIGRlZiB0ZXN0X3NodWZmbGUoc2VsZik6Ci0gICAgICAgICAgICMgbWFrZSBzdXJlIHRoZSBzaHVmZmxlZCBzZXF1ZW5jZSBkb2VzIG5vdCBsb3NlIGFueSBlbGVtZW50cwotICAgICAgICAgICByYW5kb20uc2h1ZmZsZShzZWxmLnNlcSkKLSAgICAgICAgICAgc2VsZi5zZXEuc29ydCgpCi0gICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXEsIGxpc3QocmFuZ2UoMTApKSkKKyAgICBkZWYgdGVzdF9pc3VwcGVyKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ0ZPTycuaXN1cHBlcigpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKCdGb28nLmlzdXBwZXIoKSkKIAotICAgICAgICAgICAjIHNob3VsZCByYWlzZSBhbiBleGNlcHRpb24gZm9yIGFuIGltbXV0YWJsZSBzZXF1ZW5jZQotICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHJhbmRvbS5zaHVmZmxlLCAoMSwyLDMpKQorICAgIGRlZiB0ZXN0X3NwbGl0KHNlbGYpOgorICAgICAgICBzID0gJ2hlbGxvIHdvcmxkJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuc3BsaXQoKSwgWydoZWxsbycsICd3b3JsZCddKQorICAgICAgICAjIGNoZWNrIHRoYXQgcy5zcGxpdCBmYWlscyB3aGVuIHRoZSBzZXBhcmF0b3IgaXMgbm90IGEgc3RyaW5nCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHMuc3BsaXQoMikKIAotICAgICAgIGRlZiB0ZXN0X2Nob2ljZShzZWxmKToKLSAgICAgICAgICAgZWxlbWVudCA9IHJhbmRvbS5jaG9pY2Uoc2VsZi5zZXEpCi0gICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlbGVtZW50IGluIHNlbGYuc2VxKQorICBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgICAgdW5pdHRlc3QubWFpbigpCiAKLSAgICAgICBkZWYgdGVzdF9zYW1wbGUoc2VsZik6Ci0gICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6Ci0gICAgICAgICAgICAgICByYW5kb20uc2FtcGxlKHNlbGYuc2VxLCAyMCkKLSAgICAgICAgICAgZm9yIGVsZW1lbnQgaW4gcmFuZG9tLnNhbXBsZShzZWxmLnNlcSwgNSk6Ci0gICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZWxlbWVudCBpbiBzZWxmLnNlcSkKLQotICAgaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICAgICB1bml0dGVzdC5tYWluKCkKIAogQSB0ZXN0Y2FzZSBpcyBjcmVhdGVkIGJ5IHN1YmNsYXNzaW5nIDpjbGFzczpgdW5pdHRlc3QuVGVzdENhc2VgLiAgVGhlIHRocmVlCiBpbmRpdmlkdWFsIHRlc3RzIGFyZSBkZWZpbmVkIHdpdGggbWV0aG9kcyB3aG9zZSBuYW1lcyBzdGFydCB3aXRoIHRoZSBsZXR0ZXJzCkBAIC0xMTgsMTYgKzExMCwxNSBAQAogcmVwcmVzZW50IHRlc3RzLgogCiBUaGUgY3J1eCBvZiBlYWNoIHRlc3QgaXMgYSBjYWxsIHRvIDptZXRoOmB+VGVzdENhc2UuYXNzZXJ0RXF1YWxgIHRvIGNoZWNrIGZvciBhbgotZXhwZWN0ZWQgcmVzdWx0OyA6bWV0aDpgflRlc3RDYXNlLmFzc2VydFRydWVgIHRvIHZlcmlmeSBhIGNvbmRpdGlvbjsgb3IKLTptZXRoOmB+VGVzdENhc2UuYXNzZXJ0UmFpc2VzYCB0byB2ZXJpZnkgdGhhdCBhbiBleHBlY3RlZCBleGNlcHRpb24gZ2V0cyByYWlzZWQuCi1UaGVzZSBtZXRob2RzIGFyZSB1c2VkIGluc3RlYWQgb2YgdGhlIDprZXl3b3JkOmBhc3NlcnRgIHN0YXRlbWVudCBzbyB0aGUgdGVzdAotcnVubmVyIGNhbiBhY2N1bXVsYXRlIGFsbCB0ZXN0IHJlc3VsdHMgYW5kIHByb2R1Y2UgYSByZXBvcnQuCitleHBlY3RlZCByZXN1bHQ7IDptZXRoOmB+VGVzdENhc2UuYXNzZXJ0VHJ1ZWAgb3IgOm1ldGg6YH5UZXN0Q2FzZS5hc3NlcnRGYWxzZWAKK3RvIHZlcmlmeSBhIGNvbmRpdGlvbjsgb3IgOm1ldGg6YH5UZXN0Q2FzZS5hc3NlcnRSYWlzZXNgIHRvIHZlcmlmeSB0aGF0IGEKK3NwZWNpZmljIGV4Y2VwdGlvbiBnZXRzIHJhaXNlZC4gIFRoZXNlIG1ldGhvZHMgYXJlIHVzZWQgaW5zdGVhZCBvZiB0aGUKKzprZXl3b3JkOmBhc3NlcnRgIHN0YXRlbWVudCBzbyB0aGUgdGVzdCBydW5uZXIgY2FuIGFjY3VtdWxhdGUgYWxsIHRlc3QgcmVzdWx0cworYW5kIHByb2R1Y2UgYSByZXBvcnQuCiAKLVdoZW4gYSA6bWV0aDpgflRlc3RDYXNlLnNldFVwYCBtZXRob2QgaXMgZGVmaW5lZCwgdGhlIHRlc3QgcnVubmVyIHdpbGwgcnVuIHRoYXQKLW1ldGhvZCBwcmlvciB0byBlYWNoIHRlc3QuICBMaWtld2lzZSwgaWYgYSA6bWV0aDpgflRlc3RDYXNlLnRlYXJEb3duYCBtZXRob2QgaXMKLWRlZmluZWQsIHRoZSB0ZXN0IHJ1bm5lciB3aWxsIGludm9rZSB0aGF0IG1ldGhvZCBhZnRlciBlYWNoIHRlc3QuICBJbiB0aGUKLWV4YW1wbGUsIDptZXRoOmB+VGVzdENhc2Uuc2V0VXBgIHdhcyB1c2VkIHRvIGNyZWF0ZSBhIGZyZXNoIHNlcXVlbmNlIGZvciBlYWNoCi10ZXN0LgorVGhlIDptZXRoOmB+VGVzdENhc2Uuc2V0VXBgIGFuZCA6bWV0aDpgflRlc3RDYXNlLnRlYXJEb3duYCBtZXRob2RzIGFsbG93IHlvdQordG8gZGVmaW5lIGluc3RydWN0aW9ucyB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgYmVmb3JlIGFuZCBhZnRlciBlYWNoIHRlc3QgbWV0aG9kLgorVGhleSBhcmUgY292ZXJlZCBpbiBtb3JlIGRldGFpbHMgaW4gdGhlIHNlY3Rpb24gOnJlZjpgb3JnYW5pemluZy10ZXN0c2AuCiAKIFRoZSBmaW5hbCBibG9jayBzaG93cyBhIHNpbXBsZSB3YXkgdG8gcnVuIHRoZSB0ZXN0cy4gOmZ1bmM6YHVuaXR0ZXN0Lm1haW5gCiBwcm92aWRlcyBhIGNvbW1hbmQtbGluZSBpbnRlcmZhY2UgdG8gdGhlIHRlc3Qgc2NyaXB0LiAgV2hlbiBydW4gZnJvbSB0aGUgY29tbWFuZApAQCAtMTQyLDEyICsxMzMsMTIgQEAKIFBhc3NpbmcgdGhlIGBgLXZgYCBvcHRpb24gdG8geW91ciB0ZXN0IHNjcmlwdCB3aWxsIGluc3RydWN0IDpmdW5jOmB1bml0dGVzdC5tYWluYAogdG8gZW5hYmxlIGEgaGlnaGVyIGxldmVsIG9mIHZlcmJvc2l0eSwgYW5kIHByb2R1Y2UgdGhlIGZvbGxvd2luZyBvdXRwdXQ6OgogCi0gICB0ZXN0X2Nob2ljZSAoX19tYWluX18uVGVzdFNlcXVlbmNlRnVuY3Rpb25zKSAuLi4gb2sKLSAgIHRlc3Rfc2FtcGxlIChfX21haW5fXy5UZXN0U2VxdWVuY2VGdW5jdGlvbnMpIC4uLiBvawotICAgdGVzdF9zaHVmZmxlIChfX21haW5fXy5UZXN0U2VxdWVuY2VGdW5jdGlvbnMpIC4uLiBvaworICAgdGVzdF9pc3VwcGVyIChfX21haW5fXy5UZXN0U3RyaW5nTWV0aG9kcykgLi4uIG9rCisgICB0ZXN0X3NwbGl0IChfX21haW5fXy5UZXN0U3RyaW5nTWV0aG9kcykgLi4uIG9rCisgICB0ZXN0X3VwcGVyIChfX21haW5fXy5UZXN0U3RyaW5nTWV0aG9kcykgLi4uIG9rCiAKICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgIFJhbiAzIHRlc3RzIGluIDAuMTEwcworICAgUmFuIDMgdGVzdHMgaW4gMC4wMDFzCiAKICAgIE9LCiAKQEAgLTIxMyw4ICsyMDQsOCBAQAogCiAuLiBjbWRvcHRpb246OiAtYywgLS1jYXRjaAogCi0gICBDb250cm9sLUMgZHVyaW5nIHRoZSB0ZXN0IHJ1biB3YWl0cyBmb3IgdGhlIGN1cnJlbnQgdGVzdCB0byBlbmQgYW5kIHRoZW4KLSAgIHJlcG9ydHMgYWxsIHRoZSByZXN1bHRzIHNvIGZhci4gQSBzZWNvbmQgY29udHJvbC1DIHJhaXNlcyB0aGUgbm9ybWFsCisgICA6a2JkOmBDb250cm9sLUNgIGR1cmluZyB0aGUgdGVzdCBydW4gd2FpdHMgZm9yIHRoZSBjdXJyZW50IHRlc3QgdG8gZW5kIGFuZCB0aGVuCisgICByZXBvcnRzIGFsbCB0aGUgcmVzdWx0cyBzbyBmYXIuIEEgc2Vjb25kIDprYmQ6YENvbnRyb2wtQ2AgcmFpc2VzIHRoZSBub3JtYWwKICAgIDpleGM6YEtleWJvYXJkSW50ZXJydXB0YCBleGNlcHRpb24uCiAKICAgIFNlZSBgU2lnbmFsIEhhbmRsaW5nYF8gZm9yIHRoZSBmdW5jdGlvbnMgdGhhdCBwcm92aWRlIHRoaXMgZnVuY3Rpb25hbGl0eS4KQEAgLTIzOSw5ICsyMzAsMTAgQEAKIAogVW5pdHRlc3Qgc3VwcG9ydHMgc2ltcGxlIHRlc3QgZGlzY292ZXJ5LiBJbiBvcmRlciB0byBiZSBjb21wYXRpYmxlIHdpdGggdGVzdAogZGlzY292ZXJ5LCBhbGwgb2YgdGhlIHRlc3QgZmlsZXMgbXVzdCBiZSA6cmVmOmBtb2R1bGVzIDx0dXQtbW9kdWxlcz5gIG9yCi06cmVmOmBwYWNrYWdlcyA8dHV0LXBhY2thZ2VzPmAgaW1wb3J0YWJsZSBmcm9tIHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5IG9mCi10aGUgcHJvamVjdCAodGhpcyBtZWFucyB0aGF0IHRoZWlyIGZpbGVuYW1lcyBtdXN0IGJlIHZhbGlkCi06cmVmOmBpZGVudGlmaWVycyA8aWRlbnRpZmllcnM+YCkuCis6cmVmOmBwYWNrYWdlcyA8dHV0LXBhY2thZ2VzPmAgKGluY2x1ZGluZyA6dGVybTpgbmFtZXNwYWNlIHBhY2thZ2VzCis8bmFtZXNwYWNlIHBhY2thZ2U+YCkgaW1wb3J0YWJsZSBmcm9tIHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5IG9mCit0aGUgcHJvamVjdCAodGhpcyBtZWFucyB0aGF0IHRoZWlyIGZpbGVuYW1lcyBtdXN0IGJlIHZhbGlkIDpyZWY6YGlkZW50aWZpZXJzCis8aWRlbnRpZmllcnM+YCkuCiAKIFRlc3QgZGlzY292ZXJ5IGlzIGltcGxlbWVudGVkIGluIDptZXRoOmBUZXN0TG9hZGVyLmRpc2NvdmVyYCwgYnV0IGNhbiBhbHNvIGJlCiB1c2VkIGZyb20gdGhlIGNvbW1hbmQgbGluZS4gVGhlIGJhc2ljIGNvbW1hbmQtbGluZSB1c2FnZSBpczo6CkBAIC0yNzksOCArMjcxLDggQEAKIGFzIHBvc2l0aW9uYWwgYXJndW1lbnRzIGluIHRoYXQgb3JkZXIuIFRoZSBmb2xsb3dpbmcgdHdvIGNvbW1hbmQgbGluZXMKIGFyZSBlcXVpdmFsZW50OjoKIAotICAgcHl0aG9uIC1tIHVuaXR0ZXN0IGRpc2NvdmVyIC1zIHByb2plY3RfZGlyZWN0b3J5IC1wICcqX3Rlc3QucHknCi0gICBweXRob24gLW0gdW5pdHRlc3QgZGlzY292ZXIgcHJvamVjdF9kaXJlY3RvcnkgJypfdGVzdC5weScKKyAgIHB5dGhvbiAtbSB1bml0dGVzdCBkaXNjb3ZlciAtcyBwcm9qZWN0X2RpcmVjdG9yeSAtcCAiKl90ZXN0LnB5IgorICAgcHl0aG9uIC1tIHVuaXR0ZXN0IGRpc2NvdmVyIHByb2plY3RfZGlyZWN0b3J5ICIqX3Rlc3QucHkiCiAKIEFzIHdlbGwgYXMgYmVpbmcgYSBwYXRoIGl0IGlzIHBvc3NpYmxlIHRvIHBhc3MgYSBwYWNrYWdlIG5hbWUsIGZvciBleGFtcGxlCiBgYG15cHJvamVjdC5zdWJwYWNrYWdlLnRlc3RgYCwgYXMgdGhlIHN0YXJ0IGRpcmVjdG9yeS4gVGhlIHBhY2thZ2UgbmFtZSB5b3UKQEAgLTMwNiw2ICsyOTgsOSBAQAogVGVzdCBtb2R1bGVzIGFuZCBwYWNrYWdlcyBjYW4gY3VzdG9taXplIHRlc3QgbG9hZGluZyBhbmQgZGlzY292ZXJ5IGJ5IHRocm91Z2gKIHRoZSBgbG9hZF90ZXN0cyBwcm90b2NvbGBfLgogCisuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgVGVzdCBkaXNjb3Zlcnkgc3VwcG9ydHMgOnRlcm06YG5hbWVzcGFjZSBwYWNrYWdlcyA8bmFtZXNwYWNlIHBhY2thZ2U+YC4KKwogCiAuLiBfb3JnYW5pemluZy10ZXN0czoKIApAQCAtNDY5LDcgKzQ2NCw3IEBACiAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKIAogVW5pdHRlc3Qgc3VwcG9ydHMgc2tpcHBpbmcgaW5kaXZpZHVhbCB0ZXN0IG1ldGhvZHMgYW5kIGV2ZW4gd2hvbGUgY2xhc3NlcyBvZgotdGVzdHMuICBJbiBhZGRpdGlvbiwgaXQgc3VwcG9ydHMgbWFya2luZyBhIHRlc3QgYXMgYSAiZXhwZWN0ZWQgZmFpbHVyZSwiIGEgdGVzdAordGVzdHMuICBJbiBhZGRpdGlvbiwgaXQgc3VwcG9ydHMgbWFya2luZyBhIHRlc3QgYXMgYW4gImV4cGVjdGVkIGZhaWx1cmUsIiBhIHRlc3QKIHRoYXQgaXMgYnJva2VuIGFuZCB3aWxsIGZhaWwsIGJ1dCBzaG91bGRuJ3QgYmUgY291bnRlZCBhcyBhIGZhaWx1cmUgb24gYQogOmNsYXNzOmBUZXN0UmVzdWx0YC4KIApAQCAtNTU5LDggKzU1NCw3MSBAQAogICAgVXN1YWxseSB5b3UgY2FuIHVzZSA6bWV0aDpgVGVzdENhc2Uuc2tpcFRlc3RgIG9yIG9uZSBvZiB0aGUgc2tpcHBpbmcKICAgIGRlY29yYXRvcnMgaW5zdGVhZCBvZiByYWlzaW5nIHRoaXMgZGlyZWN0bHkuCiAKLVNraXBwZWQgdGVzdHMgd2lsbCBub3QgaGF2ZSA6bWV0aDpgc2V0VXBgIG9yIDptZXRoOmB0ZWFyRG93bmAgcnVuIGFyb3VuZCB0aGVtLgotU2tpcHBlZCBjbGFzc2VzIHdpbGwgbm90IGhhdmUgOm1ldGg6YHNldFVwQ2xhc3NgIG9yIDptZXRoOmB0ZWFyRG93bkNsYXNzYCBydW4uCitTa2lwcGVkIHRlc3RzIHdpbGwgbm90IGhhdmUgOm1ldGg6YH5UZXN0Q2FzZS5zZXRVcGAgb3IgOm1ldGg6YH5UZXN0Q2FzZS50ZWFyRG93bmAgcnVuIGFyb3VuZCB0aGVtLgorU2tpcHBlZCBjbGFzc2VzIHdpbGwgbm90IGhhdmUgOm1ldGg6YH5UZXN0Q2FzZS5zZXRVcENsYXNzYCBvciA6bWV0aDpgflRlc3RDYXNlLnRlYXJEb3duQ2xhc3NgIHJ1bi4KK1NraXBwZWQgbW9kdWxlcyB3aWxsIG5vdCBoYXZlIDpmdW5jOmBzZXRVcE1vZHVsZWAgb3IgOmZ1bmM6YHRlYXJEb3duTW9kdWxlYCBydW4uCisKKworLi4gX3N1YnRlc3RzOgorCitEaXN0aW5ndWlzaGluZyB0ZXN0IGl0ZXJhdGlvbnMgdXNpbmcgc3VidGVzdHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworV2hlbiBzb21lIG9mIHlvdXIgdGVzdHMgZGlmZmVyIG9ubHkgYnkgYSBzb21lIHZlcnkgc21hbGwgZGlmZmVyZW5jZXMsIGZvcgoraW5zdGFuY2Ugc29tZSBwYXJhbWV0ZXJzLCB1bml0dGVzdCBhbGxvd3MgeW91IHRvIGRpc3Rpbmd1aXNoIHRoZW0gaW5zaWRlCit0aGUgYm9keSBvZiBhIHRlc3QgbWV0aG9kIHVzaW5nIHRoZSA6bWV0aDpgflRlc3RDYXNlLnN1YlRlc3RgIGNvbnRleHQgbWFuYWdlci4KKworRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgdGVzdDo6CisKKyAgIGNsYXNzIE51bWJlcnNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgICAgIGRlZiB0ZXN0X2V2ZW4oc2VsZik6CisgICAgICAgICAgICIiIgorICAgICAgICAgICBUZXN0IHRoYXQgbnVtYmVycyBiZXR3ZWVuIDAgYW5kIDUgYXJlIGFsbCBldmVuLgorICAgICAgICAgICAiIiIKKyAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgNik6CisgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChpPWkpOgorICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaSAlIDIsIDApCisKK3dpbGwgcHJvZHVjZSB0aGUgZm9sbG93aW5nIG91dHB1dDo6CisKKyAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgIEZBSUw6IHRlc3RfZXZlbiAoX19tYWluX18uTnVtYmVyc1Rlc3QpIChpPTEpCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgIEZpbGUgInN1YnRlc3RzLnB5IiwgbGluZSAzMiwgaW4gdGVzdF9ldmVuCisgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpICUgMiwgMCkKKyAgIEFzc2VydGlvbkVycm9yOiAxICE9IDAKKworICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgRkFJTDogdGVzdF9ldmVuIChfX21haW5fXy5OdW1iZXJzVGVzdCkgKGk9MykKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgRmlsZSAic3VidGVzdHMucHkiLCBsaW5lIDMyLCBpbiB0ZXN0X2V2ZW4KKyAgICAgICBzZWxmLmFzc2VydEVxdWFsKGkgJSAyLCAwKQorICAgQXNzZXJ0aW9uRXJyb3I6IDEgIT0gMAorCisgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICBGQUlMOiB0ZXN0X2V2ZW4gKF9fbWFpbl9fLk51bWJlcnNUZXN0KSAoaT01KQorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICBGaWxlICJzdWJ0ZXN0cy5weSIsIGxpbmUgMzIsIGluIHRlc3RfZXZlbgorICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaSAlIDIsIDApCisgICBBc3NlcnRpb25FcnJvcjogMSAhPSAwCisKK1dpdGhvdXQgdXNpbmcgYSBzdWJ0ZXN0LCBleGVjdXRpb24gd291bGQgc3RvcCBhZnRlciB0aGUgZmlyc3QgZmFpbHVyZSwKK2FuZCB0aGUgZXJyb3Igd291bGQgYmUgbGVzcyBlYXN5IHRvIGRpYWdub3NlIGJlY2F1c2UgdGhlIHZhbHVlIG9mIGBgaWBgCit3b3VsZG4ndCBiZSBkaXNwbGF5ZWQ6OgorCisgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICBGQUlMOiB0ZXN0X2V2ZW4gKF9fbWFpbl9fLk51bWJlcnNUZXN0KQorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICBGaWxlICJzdWJ0ZXN0cy5weSIsIGxpbmUgMzIsIGluIHRlc3RfZXZlbgorICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaSAlIDIsIDApCisgICBBc3NlcnRpb25FcnJvcjogMSAhPSAwCiAKIAogLi4gX3VuaXR0ZXN0LWNvbnRlbnRzOgpAQCAtNTg2LDEwICs2NDQsOCBAQAogICAga2luZHMgb2YgZmFpbHVyZS4KIAogICAgRWFjaCBpbnN0YW5jZSBvZiA6Y2xhc3M6YFRlc3RDYXNlYCB3aWxsIHJ1biBhIHNpbmdsZSBiYXNlIG1ldGhvZDogdGhlIG1ldGhvZAotICAgbmFtZWQgKm1ldGhvZE5hbWUqLiAgSG93ZXZlciwgdGhlIHN0YW5kYXJkIGltcGxlbWVudGF0aW9uIG9mIHRoZSBkZWZhdWx0Ci0gICAqbWV0aG9kTmFtZSosIGBgcnVuVGVzdCgpYGAsIHdpbGwgcnVuIGV2ZXJ5IG1ldGhvZCBzdGFydGluZyB3aXRoIGBgdGVzdGBgCi0gICBhcyBhbiBpbmRpdmlkdWFsIHRlc3QsIGFuZCBjb3VudCBzdWNjZXNzZXMgYW5kIGZhaWx1cmVzIGFjY29yZGluZ2x5LgotICAgVGhlcmVmb3JlLCBpbiBtb3N0IHVzZXMgb2YgOmNsYXNzOmBUZXN0Q2FzZWAsIHlvdSB3aWxsIG5laXRoZXIgY2hhbmdlCisgICBuYW1lZCAqbWV0aG9kTmFtZSouCisgICBJbiBtb3N0IHVzZXMgb2YgOmNsYXNzOmBUZXN0Q2FzZWAsIHlvdSB3aWxsIG5laXRoZXIgY2hhbmdlCiAgICB0aGUgKm1ldGhvZE5hbWUqIG5vciByZWltcGxlbWVudCB0aGUgZGVmYXVsdCBgYHJ1blRlc3QoKWBgIG1ldGhvZC4KIAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKQEAgLTYwNyw5ICs2NjMsOSBAQAogICAgLi4gbWV0aG9kOjogc2V0VXAoKQogCiAgICAgICBNZXRob2QgY2FsbGVkIHRvIHByZXBhcmUgdGhlIHRlc3QgZml4dHVyZS4gIFRoaXMgaXMgY2FsbGVkIGltbWVkaWF0ZWx5Ci0gICAgICBiZWZvcmUgY2FsbGluZyB0aGUgdGVzdCBtZXRob2Q7IGFueSBleGNlcHRpb24gcmFpc2VkIGJ5IHRoaXMgbWV0aG9kIHdpbGwKLSAgICAgIGJlIGNvbnNpZGVyZWQgYW4gZXJyb3IgcmF0aGVyIHRoYW4gYSB0ZXN0IGZhaWx1cmUuIFRoZSBkZWZhdWx0Ci0gICAgICBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdGhpbmcuCisgICAgICBiZWZvcmUgY2FsbGluZyB0aGUgdGVzdCBtZXRob2Q7IG90aGVyIHRoYW4gOmV4YzpgQXNzZXJ0aW9uRXJyb3JgIG9yIDpleGM6YFNraXBUZXN0YCwKKyAgICAgIGFueSBleGNlcHRpb24gcmFpc2VkIGJ5IHRoaXMgbWV0aG9kIHdpbGwgYmUgY29uc2lkZXJlZCBhbiBlcnJvciByYXRoZXIgdGhhbgorICAgICAgYSB0ZXN0IGZhaWx1cmUuIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGRvZXMgbm90aGluZy4KIAogCiAgICAuLiBtZXRob2Q6OiB0ZWFyRG93bigpCkBAIC02MTcsMTAgKzY3MywxMCBAQAogICAgICAgTWV0aG9kIGNhbGxlZCBpbW1lZGlhdGVseSBhZnRlciB0aGUgdGVzdCBtZXRob2QgaGFzIGJlZW4gY2FsbGVkIGFuZCB0aGUKICAgICAgIHJlc3VsdCByZWNvcmRlZC4gIFRoaXMgaXMgY2FsbGVkIGV2ZW4gaWYgdGhlIHRlc3QgbWV0aG9kIHJhaXNlZCBhbgogICAgICAgZXhjZXB0aW9uLCBzbyB0aGUgaW1wbGVtZW50YXRpb24gaW4gc3ViY2xhc3NlcyBtYXkgbmVlZCB0byBiZSBwYXJ0aWN1bGFybHkKLSAgICAgIGNhcmVmdWwgYWJvdXQgY2hlY2tpbmcgaW50ZXJuYWwgc3RhdGUuICBBbnkgZXhjZXB0aW9uIHJhaXNlZCBieSB0aGlzCi0gICAgICBtZXRob2Qgd2lsbCBiZSBjb25zaWRlcmVkIGFuIGVycm9yIHJhdGhlciB0aGFuIGEgdGVzdCBmYWlsdXJlLiAgVGhpcwotICAgICAgbWV0aG9kIHdpbGwgb25seSBiZSBjYWxsZWQgaWYgdGhlIDptZXRoOmBzZXRVcGAgc3VjY2VlZHMsIHJlZ2FyZGxlc3Mgb2YKLSAgICAgIHRoZSBvdXRjb21lIG9mIHRoZSB0ZXN0IG1ldGhvZC4gVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZG9lcyBub3RoaW5nLgorICAgICAgY2FyZWZ1bCBhYm91dCBjaGVja2luZyBpbnRlcm5hbCBzdGF0ZS4gIEFueSBleGNlcHRpb24sIG90aGVyIHRoYW4gOmV4YzpgQXNzZXJ0aW9uRXJyb3JgCisgICAgICBvciA6ZXhjOmBTa2lwVGVzdGAsIHJhaXNlZCBieSB0aGlzIG1ldGhvZCB3aWxsIGJlIGNvbnNpZGVyZWQgYW4gZXJyb3IgcmF0aGVyIHRoYW4gYQorICAgICAgdGVzdCBmYWlsdXJlLiAgVGhpcyBtZXRob2Qgd2lsbCBvbmx5IGJlIGNhbGxlZCBpZiB0aGUgOm1ldGg6YHNldFVwYCBzdWNjZWVkcywKKyAgICAgIHJlZ2FyZGxlc3Mgb2YgdGhlIG91dGNvbWUgb2YgdGhlIHRlc3QgbWV0aG9kLiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdGhpbmcuCiAKIAogICAgLi4gbWV0aG9kOjogc2V0VXBDbGFzcygpCkBAIC02NzYsNiArNzMyLDIxIEBACiAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKIAogCisgICAuLiBtZXRob2Q6OiBzdWJUZXN0KG1zZz1Ob25lLCAqKnBhcmFtcykKKworICAgICAgUmV0dXJuIGEgY29udGV4dCBtYW5hZ2VyIHdoaWNoIGV4ZWN1dGVzIHRoZSBlbmNsb3NlZCBjb2RlIGJsb2NrIGFzIGEKKyAgICAgIHN1YnRlc3QuICAqbXNnKiBhbmQgKnBhcmFtcyogYXJlIG9wdGlvbmFsLCBhcmJpdHJhcnkgdmFsdWVzIHdoaWNoIGFyZQorICAgICAgZGlzcGxheWVkIHdoZW5ldmVyIGEgc3VidGVzdCBmYWlscywgYWxsb3dpbmcgeW91IHRvIGlkZW50aWZ5IHRoZW0KKyAgICAgIGNsZWFybHkuCisKKyAgICAgIEEgdGVzdCBjYXNlIGNhbiBjb250YWluIGFueSBudW1iZXIgb2Ygc3VidGVzdCBkZWNsYXJhdGlvbnMsIGFuZAorICAgICAgdGhleSBjYW4gYmUgYXJiaXRyYXJpbHkgbmVzdGVkLgorCisgICAgICBTZWUgOnJlZjpgc3VidGVzdHNgIGZvciBtb3JlIGluZm9ybWF0aW9uLgorCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiAgICAuLiBtZXRob2Q6OiBkZWJ1ZygpCiAKICAgICAgIFJ1biB0aGUgdGVzdCB3aXRob3V0IGNvbGxlY3RpbmcgdGhlIHJlc3VsdC4gIFRoaXMgYWxsb3dzIGV4Y2VwdGlvbnMgcmFpc2VkCkBAIC04MDYsOCArODc3LDggQEAKIAogCiAKLSAgIEl0IGlzIGFsc28gcG9zc2libGUgdG8gY2hlY2sgdGhhdCBleGNlcHRpb25zIGFuZCB3YXJuaW5ncyBhcmUgcmFpc2VkIHVzaW5nCi0gICB0aGUgZm9sbG93aW5nIG1ldGhvZHM6CisgICBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIGNoZWNrIHRoZSBwcm9kdWN0aW9uIG9mIGV4Y2VwdGlvbnMsIHdhcm5pbmdzIGFuZAorICAgbG9nIG1lc3NhZ2VzIHVzaW5nIHRoZSBmb2xsb3dpbmcgbWV0aG9kczoKIAogICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rCiAgICB8IE1ldGhvZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDaGVja3MgdGhhdCAgICAgICAgICAgICAgICAgICAgICAgICAgfCBOZXcgaW4gICAgIHwKQEAgLTgyNCw2ICs4OTUsOSBAQAogICAgfCA6bWV0aDpgYXNzZXJ0V2FybnNSZWdleCh3YXJuLCByLCBmdW4sICphcmdzLCAqKmt3ZHMpICAgIHwgYGBmdW4oKmFyZ3MsICoqa3dkcylgYCByYWlzZXMgKndhcm4qIHwgMy4yICAgICAgICB8CiAgICB8IDxUZXN0Q2FzZS5hc3NlcnRXYXJuc1JlZ2V4PmAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhbmQgdGhlIG1lc3NhZ2UgbWF0Y2hlcyByZWdleCAqciogICAgfCAgICAgICAgICAgIHwKICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKworICAgfCA6bWV0aDpgYXNzZXJ0TG9ncyhsb2dnZXIsIGxldmVsKSAgICAgICAgICAgICAgICAgICAgICAgIHwgVGhlIGBgd2l0aGBgIGJsb2NrIGxvZ3Mgb24gKmxvZ2dlciogIHwgMy40ICAgICAgICB8CisgICB8IDxUZXN0Q2FzZS5hc3NlcnRMb2dzPmAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB3aXRoIG1pbmltdW0gKmxldmVsKiAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKwogCiAgICAuLiBtZXRob2Q6OiBhc3NlcnRSYWlzZXMoZXhjZXB0aW9uLCBjYWxsYWJsZSwgKmFyZ3MsICoqa3dkcykKICAgICAgICAgICAgICAgIGFzc2VydFJhaXNlcyhleGNlcHRpb24sIG1zZz1Ob25lKQpAQCAtOTU0LDYgKzEwMjgsNDcgQEAKICAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCiAgICAgICAgICBBZGRlZCB0aGUgKm1zZyoga2V5d29yZCBhcmd1bWVudCB3aGVuIHVzZWQgYXMgYSBjb250ZXh0IG1hbmFnZXIuCiAKKyAgIC4uIG1ldGhvZDo6IGFzc2VydExvZ3MobG9nZ2VyPU5vbmUsIGxldmVsPU5vbmUpCisKKyAgICAgIEEgY29udGV4dCBtYW5hZ2VyIHRvIHRlc3QgdGhhdCBhdCBsZWFzdCBvbmUgbWVzc2FnZSBpcyBsb2dnZWQgb24KKyAgICAgIHRoZSAqbG9nZ2VyKiBvciBvbmUgb2YgaXRzIGNoaWxkcmVuLCB3aXRoIGF0IGxlYXN0IHRoZSBnaXZlbgorICAgICAgKmxldmVsKi4KKworICAgICAgSWYgZ2l2ZW4sICpsb2dnZXIqIHNob3VsZCBiZSBhIDpjbGFzczpgbG9nZ2luZy5Mb2dnZXJgIG9iamVjdCBvciBhCisgICAgICA6Y2xhc3M6YHN0cmAgZ2l2aW5nIHRoZSBuYW1lIG9mIGEgbG9nZ2VyLiAgVGhlIGRlZmF1bHQgaXMgdGhlIHJvb3QKKyAgICAgIGxvZ2dlciwgd2hpY2ggd2lsbCBjYXRjaCBhbGwgbWVzc2FnZXMuCisKKyAgICAgIElmIGdpdmVuLCAqbGV2ZWwqIHNob3VsZCBiZSBlaXRoZXIgYSBudW1lcmljIGxvZ2dpbmcgbGV2ZWwgb3IKKyAgICAgIGl0cyBzdHJpbmcgZXF1aXZhbGVudCAoZm9yIGV4YW1wbGUgZWl0aGVyIGBgIkVSUk9SImBgIG9yCisgICAgICA6YXR0cjpgbG9nZ2luZy5FUlJPUmApLiAgVGhlIGRlZmF1bHQgaXMgOmF0dHI6YGxvZ2dpbmcuSU5GT2AuCisKKyAgICAgIFRoZSB0ZXN0IHBhc3NlcyBpZiBhdCBsZWFzdCBvbmUgbWVzc2FnZSBlbWl0dGVkIGluc2lkZSB0aGUgYGB3aXRoYGAKKyAgICAgIGJsb2NrIG1hdGNoZXMgdGhlICpsb2dnZXIqIGFuZCAqbGV2ZWwqIGNvbmRpdGlvbnMsIG90aGVyd2lzZSBpdCBmYWlscy4KKworICAgICAgVGhlIG9iamVjdCByZXR1cm5lZCBieSB0aGUgY29udGV4dCBtYW5hZ2VyIGlzIGEgcmVjb3JkaW5nIGhlbHBlcgorICAgICAgd2hpY2gga2VlcHMgdHJhY2tzIG9mIHRoZSBtYXRjaGluZyBsb2cgbWVzc2FnZXMuICBJdCBoYXMgdHdvCisgICAgICBhdHRyaWJ1dGVzOgorCisgICAgICAuLiBhdHRyaWJ1dGU6OiByZWNvcmRzCisKKyAgICAgICAgIEEgbGlzdCBvZiA6Y2xhc3M6YGxvZ2dpbmcuTG9nUmVjb3JkYCBvYmplY3RzIG9mIHRoZSBtYXRjaGluZworICAgICAgICAgbG9nIG1lc3NhZ2VzLgorCisgICAgICAuLiBhdHRyaWJ1dGU6OiBvdXRwdXQKKworICAgICAgICAgQSBsaXN0IG9mIDpjbGFzczpgc3RyYCBvYmplY3RzIHdpdGggdGhlIGZvcm1hdHRlZCBvdXRwdXQgb2YKKyAgICAgICAgIG1hdGNoaW5nIG1lc3NhZ2VzLgorCisgICAgICBFeGFtcGxlOjoKKworICAgICAgICAgd2l0aCBzZWxmLmFzc2VydExvZ3MoJ2ZvbycsIGxldmVsPSdJTkZPJykgYXMgY206CisgICAgICAgICAgICBsb2dnaW5nLmdldExvZ2dlcignZm9vJykuaW5mbygnZmlyc3QgbWVzc2FnZScpCisgICAgICAgICAgICBsb2dnaW5nLmdldExvZ2dlcignZm9vLmJhcicpLmVycm9yKCdzZWNvbmQgbWVzc2FnZScpCisgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLm91dHB1dCwgWydJTkZPOmZvbzpmaXJzdCBtZXNzYWdlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0VSUk9SOmZvby5iYXI6c2Vjb25kIG1lc3NhZ2UnXSkKKworICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIAogICAgVGhlcmUgYXJlIGFsc28gb3RoZXIgbWV0aG9kcyB1c2VkIHRvIHBlcmZvcm0gbW9yZSBzcGVjaWZpYyBjaGVja3MsIHN1Y2ggYXM6CiAKQEAgLTEzOTMsMTUgKzE1MDgsMjQgQEAKIAogICAgICAgVGVzdHMgZ3JvdXBlZCBieSBhIDpjbGFzczpgVGVzdFN1aXRlYCBhcmUgYWx3YXlzIGFjY2Vzc2VkIGJ5IGl0ZXJhdGlvbi4KICAgICAgIFN1YmNsYXNzZXMgY2FuIGxhemlseSBwcm92aWRlIHRlc3RzIGJ5IG92ZXJyaWRpbmcgOm1ldGg6YF9faXRlcl9fYC4gTm90ZQotICAgICAgdGhhdCB0aGlzIG1ldGhvZCBtYXliZSBjYWxsZWQgc2V2ZXJhbCB0aW1lcyBvbiBhIHNpbmdsZSBzdWl0ZQotICAgICAgKGZvciBleGFtcGxlIHdoZW4gY291bnRpbmcgdGVzdHMgb3IgY29tcGFyaW5nIGZvciBlcXVhbGl0eSkKLSAgICAgIHNvIHRoZSB0ZXN0cyByZXR1cm5lZCBtdXN0IGJlIHRoZSBzYW1lIGZvciByZXBlYXRlZCBpdGVyYXRpb25zLgorICAgICAgdGhhdCB0aGlzIG1ldGhvZCBtYXkgYmUgY2FsbGVkIHNldmVyYWwgdGltZXMgb24gYSBzaW5nbGUgc3VpdGUgKGZvcgorICAgICAgZXhhbXBsZSB3aGVuIGNvdW50aW5nIHRlc3RzIG9yIGNvbXBhcmluZyBmb3IgZXF1YWxpdHkpIHNvIHRoZSB0ZXN0cworICAgICAgcmV0dXJuZWQgYnkgcmVwZWF0ZWQgaXRlcmF0aW9ucyBiZWZvcmUgOm1ldGg6YFRlc3RTdWl0ZS5ydW5gIG11c3QgYmUgdGhlCisgICAgICBzYW1lIGZvciBlYWNoIGNhbGwgaXRlcmF0aW9uLiBBZnRlciA6bWV0aDpgVGVzdFN1aXRlLnJ1bmAsIGNhbGxlcnMgc2hvdWxkCisgICAgICBub3QgcmVseSBvbiB0aGUgdGVzdHMgcmV0dXJuZWQgYnkgdGhpcyBtZXRob2QgdW5sZXNzIHRoZSBjYWxsZXIgdXNlcyBhCisgICAgICBzdWJjbGFzcyB0aGF0IG92ZXJyaWRlcyA6bWV0aDpgVGVzdFN1aXRlLl9yZW1vdmVUZXN0QXRJbmRleGAgdG8gcHJlc2VydmUKKyAgICAgIHRlc3QgcmVmZXJlbmNlcy4KIAogICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKICAgICAgICAgIEluIGVhcmxpZXIgdmVyc2lvbnMgdGhlIDpjbGFzczpgVGVzdFN1aXRlYCBhY2Nlc3NlZCB0ZXN0cyBkaXJlY3RseSByYXRoZXIKICAgICAgICAgIHRoYW4gdGhyb3VnaCBpdGVyYXRpb24sIHNvIG92ZXJyaWRpbmcgOm1ldGg6YF9faXRlcl9fYCB3YXNuJ3Qgc3VmZmljaWVudAogICAgICAgICAgZm9yIHByb3ZpZGluZyB0ZXN0cy4KIAorICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgICAgIEluIGVhcmxpZXIgdmVyc2lvbnMgdGhlIDpjbGFzczpgVGVzdFN1aXRlYCBoZWxkIHJlZmVyZW5jZXMgdG8gZWFjaAorICAgICAgICAgOmNsYXNzOmBUZXN0Q2FzZWAgYWZ0ZXIgOm1ldGg6YFRlc3RTdWl0ZS5ydW5gLiBTdWJjbGFzc2VzIGNhbiByZXN0b3JlCisgICAgICAgICB0aGF0IGJlaGF2aW9yIGJ5IG92ZXJyaWRpbmcgOm1ldGg6YFRlc3RTdWl0ZS5fcmVtb3ZlVGVzdEF0SW5kZXhgLgorCiAgICBJbiB0aGUgdHlwaWNhbCB1c2FnZSBvZiBhIDpjbGFzczpgVGVzdFN1aXRlYCBvYmplY3QsIHRoZSA6bWV0aDpgcnVuYCBtZXRob2QKICAgIGlzIGludm9rZWQgYnkgYSA6Y2xhc3M6YFRlc3RSdW5uZXJgIHJhdGhlciB0aGFuIGJ5IHRoZSBlbmQtdXNlciB0ZXN0IGhhcm5lc3MuCiAKQEAgLTE0MjUsNiArMTU0OSwxMiBAQAogICAgICAgUmV0dXJuIGEgc3VpdGUgb2YgYWxsIHRlc3RzIGNhc2VzIGNvbnRhaW5lZCBpbiB0aGUgOmNsYXNzOmBUZXN0Q2FzZWBcIC1kZXJpdmVkCiAgICAgICA6Y2xhc3M6YHRlc3RDYXNlQ2xhc3NgLgogCisgICAgICBBIHRlc3QgY2FzZSBpbnN0YW5jZSBpcyBjcmVhdGVkIGZvciBlYWNoIG1ldGhvZCBuYW1lZCBieQorICAgICAgOm1ldGg6YGdldFRlc3RDYXNlTmFtZXNgLiBCeSBkZWZhdWx0IHRoZXNlIGFyZSB0aGUgbWV0aG9kIG5hbWVzCisgICAgICBiZWdpbm5pbmcgd2l0aCBgYHRlc3RgYC4gSWYgOm1ldGg6YGdldFRlc3RDYXNlTmFtZXNgIHJldHVybnMgbm8KKyAgICAgIG1ldGhvZHMsIGJ1dCB0aGUgOm1ldGg6YHJ1blRlc3RgIG1ldGhvZCBpcyBpbXBsZW1lbnRlZCwgYSBzaW5nbGUgdGVzdAorICAgICAgY2FzZSBpcyBjcmVhdGVkIGZvciB0aGF0IG1ldGhvZCBpbnN0ZWFkLgorCiAKICAgIC4uIG1ldGhvZDo6IGxvYWRUZXN0c0Zyb21Nb2R1bGUobW9kdWxlKQogCkBAIC0xNTAwLDE0ICsxNjMwLDE2IEBACiAgICAgICBkaXJlY3RvcnkgbXVzdCBiZSBzcGVjaWZpZWQgc2VwYXJhdGVseS4KIAogICAgICAgSWYgaW1wb3J0aW5nIGEgbW9kdWxlIGZhaWxzLCBmb3IgZXhhbXBsZSBkdWUgdG8gYSBzeW50YXggZXJyb3IsIHRoZW4gdGhpcwotICAgICAgd2lsbCBiZSByZWNvcmRlZCBhcyBhIHNpbmdsZSBlcnJvciBhbmQgZGlzY292ZXJ5IHdpbGwgY29udGludWUuCisgICAgICB3aWxsIGJlIHJlY29yZGVkIGFzIGEgc2luZ2xlIGVycm9yIGFuZCBkaXNjb3Zlcnkgd2lsbCBjb250aW51ZS4gIElmIHRoZQorICAgICAgaW1wb3J0IGZhaWx1cmUgaXMgZHVlIHRvIDpleGM6YFNraXBUZXN0YCBiZWluZyByYWlzZWQsIGl0IHdpbGwgYmUgcmVjb3JkZWQKKyAgICAgIGFzIGEgc2tpcCBpbnN0ZWFkIG9mIGFuIGVycm9yLgogCiAgICAgICBJZiBhIHRlc3QgcGFja2FnZSBuYW1lIChkaXJlY3Rvcnkgd2l0aCA6ZmlsZTpgX19pbml0X18ucHlgKSBtYXRjaGVzIHRoZQogICAgICAgcGF0dGVybiB0aGVuIHRoZSBwYWNrYWdlIHdpbGwgYmUgY2hlY2tlZCBmb3IgYSBgYGxvYWRfdGVzdHNgYAogICAgICAgZnVuY3Rpb24uIElmIHRoaXMgZXhpc3RzIHRoZW4gaXQgd2lsbCBiZSBjYWxsZWQgd2l0aCAqbG9hZGVyKiwgKnRlc3RzKiwKICAgICAgICpwYXR0ZXJuKi4KIAotICAgICAgSWYgbG9hZF90ZXN0cyBleGlzdHMgdGhlbiBkaXNjb3ZlcnkgZG9lcyAqbm90KiByZWN1cnNlIGludG8gdGhlIHBhY2thZ2UsCisgICAgICBJZiBgYGxvYWRfdGVzdHNgYCBleGlzdHMgdGhlbiBkaXNjb3ZlcnkgZG9lcyAqbm90KiByZWN1cnNlIGludG8gdGhlIHBhY2thZ2UsCiAgICAgICBgYGxvYWRfdGVzdHNgYCBpcyByZXNwb25zaWJsZSBmb3IgbG9hZGluZyBhbGwgdGVzdHMgaW4gdGhlIHBhY2thZ2UuCiAKICAgICAgIFRoZSBwYXR0ZXJuIGlzIGRlbGliZXJhdGVseSBub3Qgc3RvcmVkIGFzIGEgbG9hZGVyIGF0dHJpYnV0ZSBzbyB0aGF0CkBAIC0xNTE5LDYgKzE2NTEsMTQgQEAKIAogICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCiAKKyAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICAgICBNb2R1bGVzIHRoYXQgcmFpc2UgOmV4YzpgU2tpcFRlc3RgIG9uIGltcG9ydCBhcmUgcmVjb3JkZWQgYXMgc2tpcHMsCisgICAgICAgICAgIG5vdCBlcnJvcnMuCisgICAgICAgICBEaXNjb3Zlcnkgd29ya3MgZm9yIDp0ZXJtOmBuYW1lc3BhY2UgcGFja2FnZXMgPG5hbWVzcGFjZSBwYWNrYWdlPmAuCisgICAgICAgICBQYXRocyBhcmUgc29ydGVkIGJlZm9yZSBiZWluZyBpbXBvcnRlZCBzbyB0aGF0IGV4ZWN1dGlvbiBvcmRlciBpcworICAgICAgICAgICB0aGUgc2FtZSBldmVuIGlmIHRoZSB1bmRlcmx5aW5nIGZpbGUgc3lzdGVtJ3Mgb3JkZXJpbmcgaXMgbm90CisgICAgICAgICAgIGRlcGVuZGVudCBvbiBmaWxlIG5hbWUuCisKIAogICAgVGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzIG9mIGEgOmNsYXNzOmBUZXN0TG9hZGVyYCBjYW4gYmUgY29uZmlndXJlZCBlaXRoZXIgYnkKICAgIHN1YmNsYXNzaW5nIG9yIGFzc2lnbm1lbnQgb24gYW4gaW5zdGFuY2U6CkBAIC0xNjMwLDYgKzE3NzAsMTAgQEAKICAgICAgIFJldHVybiBgYFRydWVgYCBpZiBhbGwgdGVzdHMgcnVuIHNvIGZhciBoYXZlIHBhc3NlZCwgb3RoZXJ3aXNlIHJldHVybnMKICAgICAgIGBgRmFsc2VgYC4KIAorICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgICAgIFJldHVybnMgYGBGYWxzZWBgIGlmIHRoZXJlIHdlcmUgYW55IDphdHRyOmB1bmV4cGVjdGVkU3VjY2Vzc2VzYAorICAgICAgICAgZnJvbSB0ZXN0cyBtYXJrZWQgd2l0aCB0aGUgOmZ1bmM6YGV4cGVjdGVkRmFpbHVyZWAgZGVjb3JhdG9yLgorCiAKICAgIC4uIG1ldGhvZDo6IHN0b3AoKQogCkBAIC0xNjU4LDE0ICsxODAyLDE0IEBACiAgICAgICBDYWxsZWQgYWZ0ZXIgdGhlIHRlc3QgY2FzZSAqdGVzdCogaGFzIGJlZW4gZXhlY3V0ZWQsIHJlZ2FyZGxlc3Mgb2YgdGhlCiAgICAgICBvdXRjb21lLgogCi0gICAuLiBtZXRob2Q6OiBzdGFydFRlc3RSdW4odGVzdCkKKyAgIC4uIG1ldGhvZDo6IHN0YXJ0VGVzdFJ1bigpCiAKICAgICAgIENhbGxlZCBvbmNlIGJlZm9yZSBhbnkgdGVzdHMgYXJlIGV4ZWN1dGVkLgogCiAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKIAogCi0gICAuLiBtZXRob2Q6OiBzdG9wVGVzdFJ1bih0ZXN0KQorICAgLi4gbWV0aG9kOjogc3RvcFRlc3RSdW4oKQogCiAgICAgICBDYWxsZWQgb25jZSBhZnRlciBhbGwgdGVzdHMgYXJlIGV4ZWN1dGVkLgogCkBAIC0xNzI4LDYgKzE4NzIsMjIgQEAKICAgICAgIDphdHRyOmB1bmV4cGVjdGVkU3VjY2Vzc2VzYCBhdHRyaWJ1dGUuCiAKIAorICAgLi4gbWV0aG9kOjogYWRkU3ViVGVzdCh0ZXN0LCBzdWJ0ZXN0LCBvdXRjb21lKQorCisgICAgICBDYWxsZWQgd2hlbiBhIHN1YnRlc3QgZmluaXNoZXMuICAqdGVzdCogaXMgdGhlIHRlc3QgY2FzZQorICAgICAgY29ycmVzcG9uZGluZyB0byB0aGUgdGVzdCBtZXRob2QuICAqc3VidGVzdCogaXMgYSBjdXN0b20KKyAgICAgIDpjbGFzczpgVGVzdENhc2VgIGluc3RhbmNlIGRlc2NyaWJpbmcgdGhlIHN1YnRlc3QuCisKKyAgICAgIElmICpvdXRjb21lKiBpcyA6Y29uc3Q6YE5vbmVgLCB0aGUgc3VidGVzdCBzdWNjZWVkZWQuICBPdGhlcndpc2UsCisgICAgICBpdCBmYWlsZWQgd2l0aCBhbiBleGNlcHRpb24gd2hlcmUgKm91dGNvbWUqIGlzIGEgdHVwbGUgb2YgdGhlIGZvcm0KKyAgICAgIHJldHVybmVkIGJ5IDpmdW5jOmBzeXMuZXhjX2luZm9gOiBgYCh0eXBlLCB2YWx1ZSwgdHJhY2ViYWNrKWBgLgorCisgICAgICBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdGhpbmcgd2hlbiB0aGUgb3V0Y29tZSBpcyBhCisgICAgICBzdWNjZXNzLCBhbmQgcmVjb3JkcyBzdWJ0ZXN0IGZhaWx1cmVzIGFzIG5vcm1hbCBmYWlsdXJlcy4KKworICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogLi4gY2xhc3M6OiBUZXh0VGVzdFJlc3VsdChzdHJlYW0sIGRlc2NyaXB0aW9ucywgdmVyYm9zaXR5KQogCiAgICBBIGNvbmNyZXRlIGltcGxlbWVudGF0aW9uIG9mIDpjbGFzczpgVGVzdFJlc3VsdGAgdXNlZCBieSB0aGUKQEAgLTE3ODMsNiArMTk0MywxNCBAQAogCiAgICAgICAgIHN0cmVhbSwgZGVzY3JpcHRpb25zLCB2ZXJib3NpdHkKIAorICAgLi4gbWV0aG9kOjogcnVuKHRlc3QpCisKKyAgICAgIFRoaXMgbWV0aG9kIGlzIHRoZSBtYWluIHB1YmxpYyBpbnRlcmZhY2UgdG8gdGhlIGBUZXh0VGVzdFJ1bm5lcmAuIFRoaXMKKyAgICAgIG1ldGhvZCB0YWtlcyBhIDpjbGFzczpgVGVzdFN1aXRlYCBvciA6Y2xhc3M6YFRlc3RDYXNlYCBpbnN0YW5jZS4gQQorICAgICAgOmNsYXNzOmBUZXN0UmVzdWx0YCBpcyBjcmVhdGVkIGJ5IGNhbGxpbmcKKyAgICAgIDpmdW5jOmBfbWFrZVJlc3VsdGAgYW5kIHRoZSB0ZXN0KHMpIGFyZSBydW4gYW5kIHRoZQorICAgICAgcmVzdWx0cyBwcmludGVkIHRvIHN0ZG91dC4KKwogCiAuLiBmdW5jdGlvbjo6IG1haW4obW9kdWxlPSdfX21haW5fXycsIGRlZmF1bHRUZXN0PU5vbmUsIGFyZ3Y9Tm9uZSwgdGVzdFJ1bm5lcj1Ob25lLCBcCiAgICAgICAgICAgICAgICAgICAgdGVzdExvYWRlcj11bml0dGVzdC5kZWZhdWx0VGVzdExvYWRlciwgZXhpdD1UcnVlLCB2ZXJib3NpdHk9MSwgXApAQCAtMTgwMiw5ICsxOTcwLDEwIEBACiAgICAgICBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgICAgICAgIHVuaXR0ZXN0Lm1haW4odmVyYm9zaXR5PTIpCiAKLSAgIFRoZSAqZGVmYXVsdFRlc3QqIGFyZ3VtZW50IGlzIHRoZSBuYW1lIG9mIHRoZSB0ZXN0IHRvIHJ1biBpZiBubyB0ZXN0IG5hbWVzCi0gICBhcmUgc3BlY2lmaWVkIHZpYSAqYXJndiouICBJZiBub3Qgc3BlY2lmaWVkIG9yIGBgTm9uZWBgIGFuZCBubyB0ZXN0IG5hbWVzIGFyZQotICAgcHJvdmlkZWQgdmlhICphcmd2KiwgYWxsIHRlc3RzIGZvdW5kIGluICptb2R1bGUqIGFyZSBydW4uCisgICBUaGUgKmRlZmF1bHRUZXN0KiBhcmd1bWVudCBpcyBlaXRoZXIgdGhlIG5hbWUgb2YgYSBzaW5nbGUgdGVzdCBvciBhbgorICAgaXRlcmFibGUgb2YgdGVzdCBuYW1lcyB0byBydW4gaWYgbm8gdGVzdCBuYW1lcyBhcmUgc3BlY2lmaWVkIHZpYSAqYXJndiouICBJZgorICAgbm90IHNwZWNpZmllZCBvciBgYE5vbmVgYCBhbmQgbm8gdGVzdCBuYW1lcyBhcmUgcHJvdmlkZWQgdmlhICphcmd2KiwgYWxsCisgICB0ZXN0cyBmb3VuZCBpbiAqbW9kdWxlKiBhcmUgcnVuLgogCiAgICBUaGUgKmFyZ3YqIGFyZ3VtZW50IGNhbiBiZSBhIGxpc3Qgb2Ygb3B0aW9ucyBwYXNzZWQgdG8gdGhlIHByb2dyYW0sIHdpdGggdGhlCiAgICBmaXJzdCBlbGVtZW50IGJlaW5nIHRoZSBwcm9ncmFtIG5hbWUuICBJZiBub3Qgc3BlY2lmaWVkIG9yIGBgTm9uZWBgLApAQCAtMTg0Miw2ICsyMDExLDEwIEBACiAgICAgICBUaGUgKnZlcmJvc2l0eSosICpmYWlsZmFzdCosICpjYXRjaGJyZWFrKiwgKmJ1ZmZlcioKICAgICAgIGFuZCAqd2FybmluZ3MqIHBhcmFtZXRlcnMgd2VyZSBhZGRlZC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSAqZGVmYXVsdFRlc3QqIHBhcmFtZXRlciB3YXMgY2hhbmdlZCB0byBhbHNvIGFjY2VwdCBhbiBpdGVyYWJsZSBvZgorICAgICAgdGVzdCBuYW1lcy4KKwogCiBsb2FkX3Rlc3RzIFByb3RvY29sCiAjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS91cmxsaWIuZXJyb3IucnN0IGIvRG9jL2xpYnJhcnkvdXJsbGliLmVycm9yLnJzdAppbmRleCAyNWMxM2JkLi5mN2YwYzk3IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS91cmxsaWIuZXJyb3IucnN0CisrKyBiL0RvYy9saWJyYXJ5L3VybGxpYi5lcnJvci5yc3QKQEAgLTQ2LDYgKzQ2LDEzIEBACiAKICAgICAgIFRoaXMgaXMgdXN1YWxseSBhIHN0cmluZyBleHBsYWluaW5nIHRoZSByZWFzb24gZm9yIHRoaXMgZXJyb3IuCiAKKyAgIC4uIGF0dHJpYnV0ZTo6IGhlYWRlcnMKKworICAgICAgVGhlIEhUVFAgcmVzcG9uc2UgaGVhZGVycyBmb3IgdGhlIEhUVFAgcmVxdWVzdCB0aGF0IGNhdXNlZCB0aGUKKyAgICAgIDpleGM6YEhUVFBFcnJvcmAuCisKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiAuLiBleGNlcHRpb246OiBDb250ZW50VG9vU2hvcnRFcnJvcihtc2csIGNvbnRlbnQpCiAKICAgIFRoaXMgZXhjZXB0aW9uIGlzIHJhaXNlZCB3aGVuIHRoZSA6ZnVuYzpgfnVybGxpYi5yZXF1ZXN0LnVybHJldHJpZXZlYApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvdXJsbGliLnBhcnNlLnJzdCBiL0RvYy9saWJyYXJ5L3VybGxpYi5wYXJzZS5yc3QKaW5kZXggYjk1MTQyMC4uYWMwNGY5OSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvdXJsbGliLnBhcnNlLnJzdAorKysgYi9Eb2MvbGlicmFyeS91cmxsaWIucGFyc2UucnN0CkBAIC03NiwxMiArNzYsMTUgQEAKICAgICAgICBQYXJzZVJlc3VsdChzY2hlbWU9JycsIG5ldGxvYz0nJywgcGF0aD0naGVscC9QeXRob24uaHRtbCcsIHBhcmFtcz0nJywKICAgICAgICAgICAgICAgICAgIHF1ZXJ5PScnLCBmcmFnbWVudD0nJykKIAotICAgSWYgdGhlICpzY2hlbWUqIGFyZ3VtZW50IGlzIHNwZWNpZmllZCwgaXQgZ2l2ZXMgdGhlIGRlZmF1bHQgYWRkcmVzc2luZwotICAgc2NoZW1lLCB0byBiZSB1c2VkIG9ubHkgaWYgdGhlIFVSTCBkb2VzIG5vdCBzcGVjaWZ5IG9uZS4gIFRoZSBkZWZhdWx0IHZhbHVlIGZvcgotICAgdGhpcyBhcmd1bWVudCBpcyB0aGUgZW1wdHkgc3RyaW5nLgorICAgVGhlICpzY2hlbWUqIGFyZ3VtZW50IGdpdmVzIHRoZSBkZWZhdWx0IGFkZHJlc3Npbmcgc2NoZW1lLCB0byBiZQorICAgdXNlZCBvbmx5IGlmIHRoZSBVUkwgZG9lcyBub3Qgc3BlY2lmeSBvbmUuICBJdCBzaG91bGQgYmUgdGhlIHNhbWUgdHlwZQorICAgKHRleHQgb3IgYnl0ZXMpIGFzICp1cmxzdHJpbmcqLCBleGNlcHQgdGhhdCB0aGUgZGVmYXVsdCB2YWx1ZSBgYCcnYGAgaXMKKyAgIGFsd2F5cyBhbGxvd2VkLCBhbmQgaXMgYXV0b21hdGljYWxseSBjb252ZXJ0ZWQgdG8gYGBiJydgYCBpZiBhcHByb3ByaWF0ZS4KIAogICAgSWYgdGhlICphbGxvd19mcmFnbWVudHMqIGFyZ3VtZW50IGlzIGZhbHNlLCBmcmFnbWVudCBpZGVudGlmaWVycyBhcmUgbm90Ci0gICBhbGxvd2VkLiAgVGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoaXMgYXJndW1lbnQgaXMgOmNvbnN0OmBUcnVlYC4KKyAgIHJlY29nbml6ZWQuICBJbnN0ZWFkLCB0aGV5IGFyZSBwYXJzZWQgYXMgcGFydCBvZiB0aGUgcGF0aCwgcGFyYW1ldGVycworICAgb3IgcXVlcnkgY29tcG9uZW50LCBhbmQgOmF0dHI6YGZyYWdtZW50YCBpcyBzZXQgdG8gdGhlIGVtcHR5IHN0cmluZyBpbgorICAgdGhlIHJldHVybiB2YWx1ZS4KIAogICAgVGhlIHJldHVybiB2YWx1ZSBpcyBhY3R1YWxseSBhbiBpbnN0YW5jZSBvZiBhIHN1YmNsYXNzIG9mIDpjbGFzczpgdHVwbGVgLiAgVGhpcwogICAgY2xhc3MgaGFzIHRoZSBmb2xsb3dpbmcgYWRkaXRpb25hbCByZWFkLW9ubHkgY29udmVuaWVuY2UgYXR0cmlidXRlczoKQEAgLTg5LDcgKzkyLDcgQEAKICAgICstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogICAgfCBBdHRyaWJ1dGUgICAgICAgIHwgSW5kZXggfCBWYWx1ZSAgICAgICAgICAgICAgICAgICAgfCBWYWx1ZSBpZiBub3QgcHJlc2VudCB8CiAgICArPT09PT09PT09PT09PT09PT09Kz09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PSsKLSAgIHwgOmF0dHI6YHNjaGVtZWAgICB8IDAgICAgIHwgVVJMIHNjaGVtZSBzcGVjaWZpZXIgICAgIHwgZW1wdHkgc3RyaW5nICAgICAgICAgfAorICAgfCA6YXR0cjpgc2NoZW1lYCAgIHwgMCAgICAgfCBVUkwgc2NoZW1lIHNwZWNpZmllciAgICAgfCAqc2NoZW1lKiBwYXJhbWV0ZXIgICB8CiAgICArLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKICAgIHwgOmF0dHI6YG5ldGxvY2AgICB8IDEgICAgIHwgTmV0d29yayBsb2NhdGlvbiBwYXJ0ICAgIHwgZW1wdHkgc3RyaW5nICAgICAgICAgfAogICAgKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCkBAIC0yMDUsNyArMjA4LDcgQEAKICAgICstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAgICB8IEF0dHJpYnV0ZSAgICAgICAgfCBJbmRleCB8IFZhbHVlICAgICAgICAgICAgICAgICAgIHwgVmFsdWUgaWYgbm90IHByZXNlbnQgfAogICAgKz09PT09PT09PT09PT09PT09PSs9PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PSsKLSAgIHwgOmF0dHI6YHNjaGVtZWAgICB8IDAgICAgIHwgVVJMIHNjaGVtZSBzcGVjaWZpZXIgICAgfCBlbXB0eSBzdHJpbmcgICAgICAgICB8CisgICB8IDphdHRyOmBzY2hlbWVgICAgfCAwICAgICB8IFVSTCBzY2hlbWUgc3BlY2lmaWVyICAgIHwgKnNjaGVtZSogcGFyYW1ldGVyICAgfAogICAgKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKICAgIHwgOmF0dHI6YG5ldGxvY2AgICB8IDEgICAgIHwgTmV0d29yayBsb2NhdGlvbiBwYXJ0ICAgfCBlbXB0eSBzdHJpbmcgICAgICAgICB8CiAgICArLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwpAQCAtNTE2LDEwICs1MTksMTEgQEAKIC4uIGZ1bmN0aW9uOjogdXJsZW5jb2RlKHF1ZXJ5LCBkb3NlcT1GYWxzZSwgc2FmZT0nJywgZW5jb2Rpbmc9Tm9uZSwgZXJyb3JzPU5vbmUpCiAKICAgIENvbnZlcnQgYSBtYXBwaW5nIG9iamVjdCBvciBhIHNlcXVlbmNlIG9mIHR3by1lbGVtZW50IHR1cGxlcywgd2hpY2ggbWF5Ci0gICBlaXRoZXIgYmUgYSA6Y2xhc3M6YHN0cmAgb3IgYSA6Y2xhc3M6YGJ5dGVzYCwgIHRvIGEgInBlcmNlbnQtZW5jb2RlZCIKLSAgIHN0cmluZy4gIElmIHRoZSByZXN1bHRhbnQgc3RyaW5nIGlzIHRvIGJlIHVzZWQgYXMgYSAqZGF0YSogZm9yIFBPU1QKLSAgIG9wZXJhdGlvbiB3aXRoIDpmdW5jOmB+dXJsbGliLnJlcXVlc3QudXJsb3BlbmAgZnVuY3Rpb24sIHRoZW4gaXQgc2hvdWxkIGJlCi0gICBwcm9wZXJseSBlbmNvZGVkIHRvIGJ5dGVzLCBvdGhlcndpc2UgaXQgd291bGQgcmVzdWx0IGluIGEgOmV4YzpgVHlwZUVycm9yYC4KKyAgIGNvbnRhaW4gOmNsYXNzOmBzdHJgIG9yIDpjbGFzczpgYnl0ZXNgIG9iamVjdHMsIHRvIGEgcGVyY2VudC1lbmNvZGVkIEFTQ0lJCisgICB0ZXh0IHN0cmluZy4gIElmIHRoZSByZXN1bHRhbnQgc3RyaW5nIGlzIHRvIGJlIHVzZWQgYXMgYSAqZGF0YSogZm9yIFBPU1QKKyAgIG9wZXJhdGlvbiB3aXRoIHRoZSA6ZnVuYzpgfnVybGxpYi5yZXF1ZXN0LnVybG9wZW5gIGZ1bmN0aW9uLCB0aGVuCisgICBpdCBzaG91bGQgYmUgZW5jb2RlZCB0byBieXRlcywgb3RoZXJ3aXNlIGl0IHdvdWxkIHJlc3VsdCBpbiBhCisgICA6ZXhjOmBUeXBlRXJyb3JgLgogCiAgICBUaGUgcmVzdWx0aW5nIHN0cmluZyBpcyBhIHNlcmllcyBvZiBgYGtleT12YWx1ZWBgIHBhaXJzIHNlcGFyYXRlZCBieSBgYCcmJ2BgCiAgICBjaGFyYWN0ZXJzLCB3aGVyZSBib3RoICprZXkqIGFuZCAqdmFsdWUqIGFyZSBxdW90ZWQgdXNpbmcgOmZ1bmM6YHF1b3RlX3BsdXNgCkBAIC01MzEsOCArNTM1LDkgQEAKICAgIHRoZSB2YWx1ZSBzZXF1ZW5jZSBmb3IgdGhlIGtleS4gIFRoZSBvcmRlciBvZiBwYXJhbWV0ZXJzIGluIHRoZSBlbmNvZGVkCiAgICBzdHJpbmcgd2lsbCBtYXRjaCB0aGUgb3JkZXIgb2YgcGFyYW1ldGVyIHR1cGxlcyBpbiB0aGUgc2VxdWVuY2UuCiAKLSAgIFdoZW4gKnF1ZXJ5KiBwYXJhbWV0ZXIgaXMgYSA6Y2xhc3M6YHN0cmAsIHRoZSAqc2FmZSosICplbmNvZGluZyogYW5kICplcnJvcioKLSAgIHBhcmFtZXRlcnMgYXJlIHBhc3NlZCBkb3duIHRvIDpmdW5jOmBxdW90ZV9wbHVzYCBmb3IgZW5jb2RpbmcuCisgICBUaGUgKnNhZmUqLCAqZW5jb2RpbmcqLCBhbmQgKmVycm9ycyogcGFyYW1ldGVycyBhcmUgcGFzc2VkIGRvd24gdG8KKyAgIDpmdW5jOmBxdW90ZV9wbHVzYCAodGhlICplbmNvZGluZyogYW5kICplcnJvcnMqIHBhcmFtZXRlcnMgYXJlIG9ubHkgcGFzc2VkCisgICB3aGVuIGEgcXVlcnkgZWxlbWVudCBpcyBhIDpjbGFzczpgc3RyYCkuCiAKICAgIFRvIHJldmVyc2UgdGhpcyBlbmNvZGluZyBwcm9jZXNzLCA6ZnVuYzpgcGFyc2VfcXNgIGFuZCA6ZnVuYzpgcGFyc2VfcXNsYCBhcmUKICAgIHByb3ZpZGVkIGluIHRoaXMgbW9kdWxlIHRvIHBhcnNlIHF1ZXJ5IHN0cmluZ3MgaW50byBQeXRob24gZGF0YSBzdHJ1Y3R1cmVzLgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvdXJsbGliLnJlcXVlc3QucnN0IGIvRG9jL2xpYnJhcnkvdXJsbGliLnJlcXVlc3QucnN0CmluZGV4IDY0OTNhMjkuLjRlNTk1ZGUgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3VybGxpYi5yZXF1ZXN0LnJzdAorKysgYi9Eb2MvbGlicmFyeS91cmxsaWIucmVxdWVzdC5yc3QKQEAgLTEyLDExICsxMiwxNiBAQAogb3BlbmluZyBVUkxzIChtb3N0bHkgSFRUUCkgaW4gYSBjb21wbGV4IHdvcmxkIC0tLSBiYXNpYyBhbmQgZGlnZXN0CiBhdXRoZW50aWNhdGlvbiwgcmVkaXJlY3Rpb25zLCBjb29raWVzIGFuZCBtb3JlLgogCisuLiBzZWVhbHNvOjoKKworICAgIFRoZSBgUmVxdWVzdHMgcGFja2FnZSA8aHR0cDovL3JlcXVlc3RzLnJlYWR0aGVkb2NzLm9yZy8+YF8KKyAgICBpcyByZWNvbW1lbmRlZCBmb3IgYSBoaWdoZXItbGV2ZWwgaHR0cCBjbGllbnQgaW50ZXJmYWNlLgorCiAKIFRoZSA6bW9kOmB1cmxsaWIucmVxdWVzdGAgbW9kdWxlIGRlZmluZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6CiAKIAotLi4gZnVuY3Rpb246OiB1cmxvcGVuKHVybCwgZGF0YT1Ob25lWywgdGltZW91dF0sICosIGNhZmlsZT1Ob25lLCBjYXBhdGg9Tm9uZSwgY2FkZWZhdWx0PUZhbHNlKQorLi4gZnVuY3Rpb246OiB1cmxvcGVuKHVybCwgZGF0YT1Ob25lWywgdGltZW91dF0sICosIGNhZmlsZT1Ob25lLCBjYXBhdGg9Tm9uZSwgY2FkZWZhdWx0PUZhbHNlLCBjb250ZXh0PU5vbmUpCiAKICAgIE9wZW4gdGhlIFVSTCAqdXJsKiwgd2hpY2ggY2FuIGJlIGVpdGhlciBhIHN0cmluZyBvciBhCiAgICA6Y2xhc3M6YFJlcXVlc3RgIG9iamVjdC4KQEAgLTMxLDEzICszNiw4IEBACiAgICAqZGF0YSogc2hvdWxkIGJlIGEgYnVmZmVyIGluIHRoZSBzdGFuZGFyZAogICAgOm1pbWV0eXBlOmBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRgIGZvcm1hdC4gIFRoZQogICAgOmZ1bmM6YHVybGxpYi5wYXJzZS51cmxlbmNvZGVgIGZ1bmN0aW9uIHRha2VzIGEgbWFwcGluZyBvciBzZXF1ZW5jZSBvZgotICAgMi10dXBsZXMgYW5kIHJldHVybnMgYSBzdHJpbmcgaW4gdGhpcyBmb3JtYXQuIEl0IHNob3VsZCBiZSBlbmNvZGVkIHRvIGJ5dGVzCi0gICBiZWZvcmUgYmVpbmcgdXNlZCBhcyB0aGUgKmRhdGEqIHBhcmFtZXRlci4gVGhlIGNoYXJzZXQgcGFyYW1ldGVyIGluCi0gICBgYENvbnRlbnQtVHlwZWBgIGhlYWRlciBtYXkgYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSBlbmNvZGluZy4gSWYgY2hhcnNldAotICAgcGFyYW1ldGVyIGlzIG5vdCBzZW50IHdpdGggdGhlIENvbnRlbnQtVHlwZSBoZWFkZXIsIHRoZSBzZXJ2ZXIgZm9sbG93aW5nIHRoZQotICAgSFRUUCAxLjEgcmVjb21tZW5kYXRpb24gbWF5IGFzc3VtZSB0aGF0IHRoZSBkYXRhIGlzIGVuY29kZWQgaW4gSVNPLTg4NTktMQotICAgZW5jb2RpbmcuIEl0IGlzIGFkdmlzYWJsZSB0byB1c2UgY2hhcnNldCBwYXJhbWV0ZXIgd2l0aCBlbmNvZGluZyB1c2VkIGluCi0gICBgYENvbnRlbnQtVHlwZWBgIGhlYWRlciB3aXRoIHRoZSA6Y2xhc3M6YFJlcXVlc3RgLgorICAgMi10dXBsZXMgYW5kIHJldHVybnMgYW4gQVNDSUkgdGV4dCBzdHJpbmcgaW4gdGhpcyBmb3JtYXQuIEl0IHNob3VsZAorICAgYmUgZW5jb2RlZCB0byBieXRlcyBiZWZvcmUgYmVpbmcgdXNlZCBhcyB0aGUgKmRhdGEqIHBhcmFtZXRlci4KIAogICAgdXJsbGliLnJlcXVlc3QgbW9kdWxlIHVzZXMgSFRUUC8xLjEgYW5kIGluY2x1ZGVzIGBgQ29ubmVjdGlvbjpjbG9zZWBgIGhlYWRlcgogICAgaW4gaXRzIEhUVFAgcmVxdWVzdHMuCkBAIC00NywyOSArNDcsMTkgQEAKICAgIHRoZSBnbG9iYWwgZGVmYXVsdCB0aW1lb3V0IHNldHRpbmcgd2lsbCBiZSB1c2VkKS4gIFRoaXMgYWN0dWFsbHkKICAgIG9ubHkgd29ya3MgZm9yIEhUVFAsIEhUVFBTIGFuZCBGVFAgY29ubmVjdGlvbnMuCiAKKyAgIElmICpjb250ZXh0KiBpcyBzcGVjaWZpZWQsIGl0IG11c3QgYmUgYSA6Y2xhc3M6YHNzbC5TU0xDb250ZXh0YCBpbnN0YW5jZQorICAgZGVzY3JpYmluZyB0aGUgdmFyaW91cyBTU0wgb3B0aW9ucy4gU2VlIDpjbGFzczpgfmh0dHAuY2xpZW50LkhUVFBTQ29ubmVjdGlvbmAKKyAgIGZvciBtb3JlIGRldGFpbHMuCisKICAgIFRoZSBvcHRpb25hbCAqY2FmaWxlKiBhbmQgKmNhcGF0aCogcGFyYW1ldGVycyBzcGVjaWZ5IGEgc2V0IG9mIHRydXN0ZWQKICAgIENBIGNlcnRpZmljYXRlcyBmb3IgSFRUUFMgcmVxdWVzdHMuICAqY2FmaWxlKiBzaG91bGQgcG9pbnQgdG8gYSBzaW5nbGUKICAgIGZpbGUgY29udGFpbmluZyBhIGJ1bmRsZSBvZiBDQSBjZXJ0aWZpY2F0ZXMsIHdoZXJlYXMgKmNhcGF0aCogc2hvdWxkCiAgICBwb2ludCB0byBhIGRpcmVjdG9yeSBvZiBoYXNoZWQgY2VydGlmaWNhdGUgZmlsZXMuICBNb3JlIGluZm9ybWF0aW9uIGNhbgogICAgYmUgZm91bmQgaW4gOm1ldGg6YHNzbC5TU0xDb250ZXh0LmxvYWRfdmVyaWZ5X2xvY2F0aW9uc2AuCiAKLSAgIFRoZSAqY2FkZWZhdWx0KiBwYXJhbWV0ZXIgc3BlY2lmaWVzIHdoZXRoZXIgdG8gZmFsbCBiYWNrIHRvIGxvYWRpbmcgYQotICAgZGVmYXVsdCBjZXJ0aWZpY2F0ZSBzdG9yZSBkZWZpbmVkIGJ5IHRoZSB1bmRlcmx5aW5nIE9wZW5TU0wgbGlicmFyeSBpZiB0aGUKLSAgICpjYWZpbGUqIGFuZCAqY2FwYXRoKiBwYXJhbWV0ZXJzIGFyZSBvbWl0dGVkLiAgVGhpcyB3aWxsIG9ubHkgd29yayBvbgotICAgc29tZSBub24tV2luZG93cyBwbGF0Zm9ybXMuCisgICBUaGUgKmNhZGVmYXVsdCogcGFyYW1ldGVyIGlzIGlnbm9yZWQuCiAKLSAgIC4uIHdhcm5pbmc6OgotICAgICAgSWYgbmVpdGhlciAqY2FmaWxlKiBub3IgKmNhcGF0aCogaXMgc3BlY2lmaWVkLCBhbmQgKmNhZGVmYXVsdCogaXMgYGBGYWxzZWBgLAotICAgICAgYW4gSFRUUFMgcmVxdWVzdCB3aWxsIG5vdCBkbyBhbnkgdmVyaWZpY2F0aW9uIG9mIHRoZSBzZXJ2ZXIncwotICAgICAgY2VydGlmaWNhdGUuCi0KLSAgIEZvciBodHRwIGFuZCBodHRwcyB1cmxzLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgYQotICAgOmNsYXNzOmBodHRwLmNsaWVudC5IVFRQUmVzcG9uc2VgIG9iamVjdCB3aGljaCBoYXMgdGhlIGZvbGxvd2luZwotICAgOnJlZjpgaHR0cHJlc3BvbnNlLW9iamVjdHNgIG1ldGhvZHMuCi0KLSAgIEZvciBmdHAsIGZpbGUsIGFuZCBkYXRhIHVybHMgYW5kIHJlcXVlc3RzIGV4cGxpY2l0eSBoYW5kbGVkIGJ5IGxlZ2FjeQotICAgOmNsYXNzOmBVUkxvcGVuZXJgIGFuZCA6Y2xhc3M6YEZhbmN5VVJMb3BlbmVyYCBjbGFzc2VzLCB0aGlzIGZ1bmN0aW9uCi0gICByZXR1cm5zIGEgOmNsYXNzOmB1cmxsaWIucmVzcG9uc2UuYWRkaW5mb3VybGAgb2JqZWN0IHdoaWNoIGNhbiB3b3JrIGFzCisgICBUaGlzIGZ1bmN0aW9uIGFsd2F5cyByZXR1cm5zIGFuIG9iamVjdCB3aGljaCBjYW4gd29yayBhcwogICAgOnRlcm06YGNvbnRleHQgbWFuYWdlcmAgYW5kIGhhcyBtZXRob2RzIHN1Y2ggYXMKIAogICAgKiA6bWV0aDpgfnVybGxpYi5yZXNwb25zZS5hZGRpbmZvdXJsLmdldHVybGAgLS0tIHJldHVybiB0aGUgVVJMIG9mIHRoZSByZXNvdXJjZSByZXRyaWV2ZWQsCkBAIC04MSw2ICs3MSwxOCBAQAogCiAgICAqIDptZXRoOmB+dXJsbGliLnJlc3BvbnNlLmFkZGluZm91cmwuZ2V0Y29kZWAgLS0gcmV0dXJuIHRoZSBIVFRQIHN0YXR1cyBjb2RlIG9mIHRoZSByZXNwb25zZS4KIAorICAgRm9yIGh0dHAgYW5kIGh0dHBzIHVybHMsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBhCisgICA6Y2xhc3M6YGh0dHAuY2xpZW50LkhUVFBSZXNwb25zZWAgb2JqZWN0IHNsaWdodGx5IG1vZGlmaWVkLiBJbiBhZGRpdGlvbgorICAgdG8gdGhlIHRocmVlIG5ldyBtZXRob2RzIGFib3ZlLCB0aGUgbXNnIGF0dHJpYnV0ZSBjb250YWlucyB0aGUKKyAgIHNhbWUgaW5mb3JtYXRpb24gYXMgdGhlIDphdHRyOmB+aHR0cC5jbGllbnQuSFRUUFJlc3BvbnNlLnJlYXNvbmAKKyAgIGF0dHJpYnV0ZSAtLS0gdGhlIHJlYXNvbiBwaHJhc2UgcmV0dXJuZWQgYnkgc2VydmVyIC0tLSBpbnN0ZWFkIG9mCisgICB0aGUgcmVzcG9uc2UgaGVhZGVycyBhcyBpdCBpcyBzcGVjaWZpZWQgaW4gdGhlIGRvY3VtZW50YXRpb24gZm9yCisgICA6Y2xhc3M6YH5odHRwLmNsaWVudC5IVFRQUmVzcG9uc2VgLgorCisgICBGb3IgZnRwLCBmaWxlLCBhbmQgZGF0YSB1cmxzIGFuZCByZXF1ZXN0cyBleHBsaWNpdGx5IGhhbmRsZWQgYnkgbGVnYWN5CisgICA6Y2xhc3M6YFVSTG9wZW5lcmAgYW5kIDpjbGFzczpgRmFuY3lVUkxvcGVuZXJgIGNsYXNzZXMsIHRoaXMgZnVuY3Rpb24KKyAgIHJldHVybnMgYSA6Y2xhc3M6YHVybGxpYi5yZXNwb25zZS5hZGRpbmZvdXJsYCBvYmplY3QuCisKICAgIFJhaXNlcyA6ZXhjOmB+dXJsbGliLmVycm9yLlVSTEVycm9yYCBvbiBlcnJvcnMuCiAKICAgIE5vdGUgdGhhdCBgYE5vbmVgYCBtYXkgYmUgcmV0dXJuZWQgaWYgbm8gaGFuZGxlciBoYW5kbGVzIHRoZSByZXF1ZXN0ICh0aG91Z2gKQEAgLTExMSw2ICsxMTMsOSBAQAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKICAgICAgICpjYWRlZmF1bHQqIHdhcyBhZGRlZC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQuMworICAgICAgKmNvbnRleHQqIHdhcyBhZGRlZC4KKwogLi4gZnVuY3Rpb246OiBpbnN0YWxsX29wZW5lcihvcGVuZXIpCiAKICAgIEluc3RhbGwgYW4gOmNsYXNzOmBPcGVuZXJEaXJlY3RvcmAgaW5zdGFuY2UgYXMgdGhlIGRlZmF1bHQgZ2xvYmFsIG9wZW5lci4KQEAgLTE3NSwxNiArMTgwLDkgQEAKICAgIHRoZSBvbmx5IG9uZXMgdGhhdCB1c2UgKmRhdGEqOyB0aGUgSFRUUCByZXF1ZXN0IHdpbGwgYmUgYSBQT1NUIGluc3RlYWQgb2YgYQogICAgR0VUIHdoZW4gdGhlICpkYXRhKiBwYXJhbWV0ZXIgaXMgcHJvdmlkZWQuICAqZGF0YSogc2hvdWxkIGJlIGEgYnVmZmVyIGluIHRoZQogICAgc3RhbmRhcmQgOm1pbWV0eXBlOmBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRgIGZvcm1hdC4KLQogICAgVGhlIDpmdW5jOmB1cmxsaWIucGFyc2UudXJsZW5jb2RlYCBmdW5jdGlvbiB0YWtlcyBhIG1hcHBpbmcgb3Igc2VxdWVuY2Ugb2YKLSAgIDItdHVwbGVzIGFuZCByZXR1cm5zIGEgc3RyaW5nIGluIHRoaXMgZm9ybWF0LiBJdCBzaG91bGQgYmUgZW5jb2RlZCB0byBieXRlcwotICAgYmVmb3JlIGJlaW5nIHVzZWQgYXMgdGhlICpkYXRhKiBwYXJhbWV0ZXIuIFRoZSBjaGFyc2V0IHBhcmFtZXRlciBpbgotICAgYGBDb250ZW50LVR5cGVgYCBoZWFkZXIgbWF5IGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgZW5jb2RpbmcuIElmIGNoYXJzZXQKLSAgIHBhcmFtZXRlciBpcyBub3Qgc2VudCB3aXRoIHRoZSBDb250ZW50LVR5cGUgaGVhZGVyLCB0aGUgc2VydmVyIGZvbGxvd2luZyB0aGUKLSAgIEhUVFAgMS4xIHJlY29tbWVuZGF0aW9uIG1heSBhc3N1bWUgdGhhdCB0aGUgZGF0YSBpcyBlbmNvZGVkIGluIElTTy04ODU5LTEKLSAgIGVuY29kaW5nLiBJdCBpcyBhZHZpc2FibGUgdG8gdXNlIGNoYXJzZXQgcGFyYW1ldGVyIHdpdGggZW5jb2RpbmcgdXNlZCBpbgotICAgYGBDb250ZW50LVR5cGVgYCBoZWFkZXIgd2l0aCB0aGUgOmNsYXNzOmBSZXF1ZXN0YC4KLQorICAgMi10dXBsZXMgYW5kIHJldHVybnMgYW4gQVNDSUkgc3RyaW5nIGluIHRoaXMgZm9ybWF0LiBJdCBzaG91bGQgYmUKKyAgIGVuY29kZWQgdG8gYnl0ZXMgYmVmb3JlIGJlaW5nIHVzZWQgYXMgdGhlICpkYXRhKiBwYXJhbWV0ZXIuCiAKICAgICpoZWFkZXJzKiBzaG91bGQgYmUgYSBkaWN0aW9uYXJ5LCBhbmQgd2lsbCBiZSB0cmVhdGVkIGFzIGlmCiAgICA6bWV0aDpgYWRkX2hlYWRlcmAgd2FzIGNhbGxlZCB3aXRoIGVhY2gga2V5IGFuZCB2YWx1ZSBhcyBhcmd1bWVudHMuCkBAIC0xOTcsNyArMTk1LDcgQEAKICAgIGBgIlB5dGhvbi11cmxsaWIvMi42ImBgIChvbiBQeXRob24gMi42KS4KIAogICAgQW4gZXhhbXBsZSBvZiB1c2luZyBgYENvbnRlbnQtVHlwZWBgIGhlYWRlciB3aXRoICpkYXRhKiBhcmd1bWVudCB3b3VsZCBiZQotICAgc2VuZGluZyBhIGRpY3Rpb25hcnkgbGlrZSBgYHsiQ29udGVudC1UeXBlIjoiIGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04In1gYAorICAgc2VuZGluZyBhIGRpY3Rpb25hcnkgbGlrZSBgYHsiQ29udGVudC1UeXBlIjogImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCJ9YGAuCiAKICAgIFRoZSBmaW5hbCB0d28gYXJndW1lbnRzIGFyZSBvbmx5IG9mIGludGVyZXN0IGZvciBjb3JyZWN0IGhhbmRsaW5nCiAgICBvZiB0aGlyZC1wYXJ0eSBIVFRQIGNvb2tpZXM6CkBAIC0yMTgsMTIgKzIxNiwxNyBAQAogICAgZmV0Y2hpbmcgb2YgdGhlIGltYWdlLCB0aGlzIHNob3VsZCBiZSB0cnVlLgogCiAgICAqbWV0aG9kKiBzaG91bGQgYmUgYSBzdHJpbmcgdGhhdCBpbmRpY2F0ZXMgdGhlIEhUVFAgcmVxdWVzdCBtZXRob2QgdGhhdAotICAgd2lsbCBiZSB1c2VkIChlLmcuIGBgJ0hFQUQnYGApLiAgSXRzIHZhbHVlIGlzIHN0b3JlZCBpbiB0aGUKKyAgIHdpbGwgYmUgdXNlZCAoZS5nLiBgYCdIRUFEJ2BgKS4gIElmIHByb3ZpZGVkLCBpdHMgdmFsdWUgaXMgc3RvcmVkIGluIHRoZQogICAgOmF0dHI6YH5SZXF1ZXN0Lm1ldGhvZGAgYXR0cmlidXRlIGFuZCBpcyB1c2VkIGJ5IDptZXRoOmBnZXRfbWV0aG9kKClgLgorICAgU3ViY2xhc3NlcyBtYXkgaW5kaWNhdGUgYSBkZWZhdWx0IG1ldGhvZCBieSBzZXR0aW5nIHRoZQorICAgOmF0dHI6YH5SZXF1ZXN0Lm1ldGhvZGAgYXR0cmlidXRlIGluIHRoZSBjbGFzcyBpdHNlbGYuCiAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCiAgICAgICA6YXR0cjpgUmVxdWVzdC5tZXRob2RgIGFyZ3VtZW50IGlzIGFkZGVkIHRvIHRoZSBSZXF1ZXN0IGNsYXNzLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgRGVmYXVsdCA6YXR0cjpgUmVxdWVzdC5tZXRob2RgIG1heSBiZSBpbmRpY2F0ZWQgYXQgdGhlIGNsYXNzIGxldmVsLgorCiAKIC4uIGNsYXNzOjogT3BlbmVyRGlyZWN0b3IoKQogCkBAIC0zNTYsNiArMzU5LDExIEBACiAKICAgIE9wZW4gbG9jYWwgZmlsZXMuCiAKKy4uIGNsYXNzOjogRGF0YUhhbmRsZXIoKQorCisgICBPcGVuIGRhdGEgVVJMcy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CiAKIC4uIGNsYXNzOjogRlRQSGFuZGxlcigpCiAKQEAgLTM5MSw2ICszOTksMTIgQEAKIAogICAgVGhlIG9yaWdpbmFsIFVSTCBwYXNzZWQgdG8gdGhlIGNvbnN0cnVjdG9yLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorCisgICBSZXF1ZXN0LmZ1bGxfdXJsIGlzIGEgcHJvcGVydHkgd2l0aCBzZXR0ZXIsIGdldHRlciBhbmQgYSBkZWxldGVyLiBHZXR0aW5nCisgICA6YXR0cjpgflJlcXVlc3QuZnVsbF91cmxgIHJldHVybnMgdGhlIG9yaWdpbmFsIHJlcXVlc3QgVVJMIHdpdGggdGhlCisgICBmcmFnbWVudCwgaWYgaXQgd2FzIHByZXNlbnQuCisKIC4uIGF0dHJpYnV0ZTo6IFJlcXVlc3QudHlwZQogCiAgICBUaGUgVVJJIHNjaGVtZS4KQEAgLTQxMyw2ICs0MjcsMTAgQEAKIAogICAgVGhlIGVudGl0eSBib2R5IGZvciB0aGUgcmVxdWVzdCwgb3IgTm9uZSBpZiBub3Qgc3BlY2lmaWVkLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgQ2hhbmdpbmcgdmFsdWUgb2YgOmF0dHI6YFJlcXVlc3QuZGF0YWAgbm93IGRlbGV0ZXMgIkNvbnRlbnQtTGVuZ3RoIgorICAgICAgaGVhZGVyIGlmIGl0IHdhcyBwcmV2aW91c2x5IHNldCBvciBjYWxjdWxhdGVkLgorCiAuLiBhdHRyaWJ1dGU6OiBSZXF1ZXN0LnVudmVyaWZpYWJsZQogCiAgICBib29sZWFuLCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgcmVxdWVzdCBpcyB1bnZlcmlmaWFibGUgYXMgZGVmaW5lZApAQCAtNDIwLDEzICs0MzgsMjAgQEAKIAogLi4gYXR0cmlidXRlOjogUmVxdWVzdC5tZXRob2QKIAotICAgVGhlIEhUVFAgcmVxdWVzdCBtZXRob2QgdG8gdXNlLiAgVGhpcyB2YWx1ZSBpcyB1c2VkIGJ5Ci0gICA6bWV0aDpgflJlcXVlc3QuZ2V0X21ldGhvZGAgdG8gb3ZlcnJpZGUgdGhlIGNvbXB1dGVkIEhUVFAgcmVxdWVzdAotICAgbWV0aG9kIHRoYXQgd291bGQgb3RoZXJ3aXNlIGJlIHJldHVybmVkLiAgVGhpcyBhdHRyaWJ1dGUgaXMgaW5pdGlhbGl6ZWQgd2l0aAotICAgdGhlIHZhbHVlIG9mIHRoZSAqbWV0aG9kKiBhcmd1bWVudCBwYXNzZWQgdG8gdGhlIGNvbnN0cnVjdG9yLgorICAgVGhlIEhUVFAgcmVxdWVzdCBtZXRob2QgdG8gdXNlLiAgQnkgZGVmYXVsdCBpdHMgdmFsdWUgaXMgOmNvbnN0OmBOb25lYCwKKyAgIHdoaWNoIG1lYW5zIHRoYXQgOm1ldGg6YH5SZXF1ZXN0LmdldF9tZXRob2RgIHdpbGwgZG8gaXRzIG5vcm1hbCBjb21wdXRhdGlvbgorICAgb2YgdGhlIG1ldGhvZCB0byBiZSB1c2VkLiAgSXRzIHZhbHVlIGNhbiBiZSBzZXQgKHRodXMgb3ZlcnJpZGluZyB0aGUgZGVmYXVsdAorICAgY29tcHV0YXRpb24gaW4gOm1ldGg6YH5SZXF1ZXN0LmdldF9tZXRob2RgKSBlaXRoZXIgYnkgcHJvdmlkaW5nIGEgZGVmYXVsdAorICAgdmFsdWUgYnkgc2V0dGluZyBpdCBhdCB0aGUgY2xhc3MgbGV2ZWwgaW4gYSA6Y2xhc3M6YFJlcXVlc3RgIHN1YmNsYXNzLCBvciBieQorICAgcGFzc2luZyBhIHZhbHVlIGluIHRvIHRoZSA6Y2xhc3M6YFJlcXVlc3RgIGNvbnN0cnVjdG9yIHZpYSB0aGUgKm1ldGhvZCoKKyAgIGFyZ3VtZW50LgogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIEEgZGVmYXVsdCB2YWx1ZSBjYW4gbm93IGJlIHNldCBpbiBzdWJjbGFzc2VzOyBwcmV2aW91c2x5IGl0IGNvdWxkIG9ubHkKKyAgICAgIGJlIHNldCB2aWEgdGhlIGNvbnN0cnVjdG9yIGFyZ3VtZW50LgorCiAKIC4uIG1ldGhvZDo6IFJlcXVlc3QuZ2V0X21ldGhvZCgpCiAKQEAgLTQ2MSwxMCArNDg2LDIyIEBACiAgICB1bnJlZGlyZWN0ZWQpLgogCiAKKy4uIG1ldGhvZDo6IFJlcXVlc3QucmVtb3ZlX2hlYWRlcihoZWFkZXIpCisKKyAgIFJlbW92ZSBuYW1lZCBoZWFkZXIgZnJvbSB0aGUgcmVxdWVzdCBpbnN0YW5jZSAoYm90aCBmcm9tIHJlZ3VsYXIgYW5kCisgICB1bnJlZGlyZWN0ZWQgaGVhZGVycykuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIC4uIG1ldGhvZDo6IFJlcXVlc3QuZ2V0X2Z1bGxfdXJsKCkKIAogICAgUmV0dXJuIHRoZSBVUkwgZ2l2ZW4gaW4gdGhlIGNvbnN0cnVjdG9yLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorCisgICBSZXR1cm5zIDphdHRyOmBSZXF1ZXN0LmZ1bGxfdXJsYAorCiAKIC4uIG1ldGhvZDo6IFJlcXVlc3Quc2V0X3Byb3h5KGhvc3QsIHR5cGUpCiAKQEAgLTQ3Myw1NCArNTEwLDYgQEAKICAgIFVSTCBnaXZlbiBpbiB0aGUgY29uc3RydWN0b3IuCiAKIAotLi4gbWV0aG9kOjogUmVxdWVzdC5hZGRfZGF0YShkYXRhKQotCi0gICBTZXQgdGhlIDpjbGFzczpgUmVxdWVzdGAgZGF0YSB0byAqZGF0YSouICBUaGlzIGlzIGlnbm9yZWQgYnkgYWxsIGhhbmRsZXJzIGV4Y2VwdAotICAgSFRUUCBoYW5kbGVycyAtLS0gYW5kIHRoZXJlIGl0IHNob3VsZCBiZSBhIGJ5dGUgc3RyaW5nLCBhbmQgd2lsbCBjaGFuZ2UgdGhlCi0gICByZXF1ZXN0IHRvIGJlIGBgUE9TVGBgIHJhdGhlciB0aGFuIGBgR0VUYGAuICBEZXByZWNhdGVkIGluIDMuMywgdXNlCi0gICA6YXR0cjpgUmVxdWVzdC5kYXRhYC4KLQotICAgLi4gZGVwcmVjYXRlZC1yZW1vdmVkOjogMy4zIDMuNAotCi0KLS4uIG1ldGhvZDo6IFJlcXVlc3QuaGFzX2RhdGEoKQotCi0gICBSZXR1cm4gd2hldGhlciB0aGUgaW5zdGFuY2UgaGFzIGEgbm9uLVwgYGBOb25lYGAgZGF0YS4gRGVwcmVjYXRlZCBpbiAzLjMsCi0gICB1c2UgOmF0dHI6YFJlcXVlc3QuZGF0YWAuCi0KLSAgIC4uIGRlcHJlY2F0ZWQtcmVtb3ZlZDo6IDMuMyAzLjQKLQotCi0uLiBtZXRob2Q6OiBSZXF1ZXN0LmdldF9kYXRhKCkKLQotICAgUmV0dXJuIHRoZSBpbnN0YW5jZSdzIGRhdGEuICBEZXByZWNhdGVkIGluIDMuMywgdXNlIDphdHRyOmBSZXF1ZXN0LmRhdGFgLgotCi0gICAuLiBkZXByZWNhdGVkLXJlbW92ZWQ6OiAzLjMgMy40Ci0KLQotLi4gbWV0aG9kOjogUmVxdWVzdC5nZXRfdHlwZSgpCi0KLSAgIFJldHVybiB0aGUgdHlwZSBvZiB0aGUgVVJMIC0tLSBhbHNvIGtub3duIGFzIHRoZSBzY2hlbWUuICBEZXByZWNhdGVkIGluIDMuMywKLSAgIHVzZSA6YXR0cjpgUmVxdWVzdC50eXBlYC4KLQotICAgLi4gZGVwcmVjYXRlZC1yZW1vdmVkOjogMy4zIDMuNAotCi0KLS4uIG1ldGhvZDo6IFJlcXVlc3QuZ2V0X2hvc3QoKQotCi0gICBSZXR1cm4gdGhlIGhvc3QgdG8gd2hpY2ggYSBjb25uZWN0aW9uIHdpbGwgYmUgbWFkZS4gRGVwcmVjYXRlZCBpbiAzLjMsIHVzZQotICAgOmF0dHI6YFJlcXVlc3QuaG9zdGAuCi0KLSAgIC4uIGRlcHJlY2F0ZWQtcmVtb3ZlZDo6IDMuMyAzLjQKLQotCi0uLiBtZXRob2Q6OiBSZXF1ZXN0LmdldF9zZWxlY3RvcigpCi0KLSAgIFJldHVybiB0aGUgc2VsZWN0b3IgLS0tIHRoZSBwYXJ0IG9mIHRoZSBVUkwgdGhhdCBpcyBzZW50IHRvIHRoZSBzZXJ2ZXIuCi0gICBEZXByZWNhdGVkIGluIDMuMywgdXNlIDphdHRyOmBSZXF1ZXN0LnNlbGVjdG9yYC4KLQotICAgLi4gZGVwcmVjYXRlZC1yZW1vdmVkOjogMy4zIDMuNAotCiAuLiBtZXRob2Q6OiBSZXF1ZXN0LmdldF9oZWFkZXIoaGVhZGVyX25hbWUsIGRlZmF1bHQ9Tm9uZSkKIAogICAgUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgZ2l2ZW4gaGVhZGVyLiBJZiB0aGUgaGVhZGVyIGlzIG5vdCBwcmVzZW50LCByZXR1cm4KQEAgLTUzMSwyNSArNTIwLDEwIEBACiAKICAgIFJldHVybiBhIGxpc3Qgb2YgdHVwbGVzIChoZWFkZXJfbmFtZSwgaGVhZGVyX3ZhbHVlKSBvZiB0aGUgUmVxdWVzdCBoZWFkZXJzLgogCi0KLS4uIG1ldGhvZDo6IFJlcXVlc3Quc2V0X3Byb3h5KGhvc3QsIHR5cGUpCi0KLS4uIG1ldGhvZDo6IFJlcXVlc3QuZ2V0X29yaWdpbl9yZXFfaG9zdCgpCi0KLSAgIFJldHVybiB0aGUgcmVxdWVzdC1ob3N0IG9mIHRoZSBvcmlnaW4gdHJhbnNhY3Rpb24sIGFzIGRlZmluZWQgYnkKLSAgIDpyZmM6YDI5NjVgLiAgU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgOmNsYXNzOmBSZXF1ZXN0YCBjb25zdHJ1Y3Rvci4KLSAgIERlcHJlY2F0ZWQgaW4gMy4zLCB1c2UgOmF0dHI6YFJlcXVlc3Qub3JpZ2luX3JlcV9ob3N0YC4KLQotICAgLi4gZGVwcmVjYXRlZC1yZW1vdmVkOjogMy4zIDMuNAotCi0KLS4uIG1ldGhvZDo6IFJlcXVlc3QuaXNfdW52ZXJpZmlhYmxlKCkKLQotICAgUmV0dXJuIHdoZXRoZXIgdGhlIHJlcXVlc3QgaXMgdW52ZXJpZmlhYmxlLCBhcyBkZWZpbmVkIGJ5IFJGQyAyOTY1LiBTZWUgdGhlCi0gICBkb2N1bWVudGF0aW9uIGZvciB0aGUgOmNsYXNzOmBSZXF1ZXN0YCBjb25zdHJ1Y3Rvci4gIERlcHJlY2F0ZWQgaW4gMy4zLCB1c2UKLSAgIDphdHRyOmBSZXF1ZXN0LnVudmVyaWZpYWJsZWAuCi0KLSAgIC4uIGRlcHJlY2F0ZWQtcmVtb3ZlZDo6IDMuMyAzLjQKKy4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICBUaGUgcmVxdWVzdCBtZXRob2RzIGFkZF9kYXRhLCBoYXNfZGF0YSwgZ2V0X2RhdGEsIGdldF90eXBlLCBnZXRfaG9zdCwKKyAgIGdldF9zZWxlY3RvciwgZ2V0X29yaWdpbl9yZXFfaG9zdCBhbmQgaXNfdW52ZXJpZmlhYmxlIHRoYXQgd2VyZSBkZXByZWNhdGVkCisgICBzaW5jZSAzLjMgaGF2ZSBiZWVuIHJlbW92ZWQuCiAKIAogLi4gX29wZW5lci1kaXJlY3Rvci1vYmplY3RzOgpAQCAtOTgzLDYgKzk1NywyMSBAQAogICAgICAgaG9zdG5hbWUgaXMgZ2l2ZW4sIGFuIDpleGM6YH51cmxsaWIuZXJyb3IuVVJMRXJyb3JgIGlzIHJhaXNlZC4KIAogCisuLiBfZGF0YS1oYW5kbGVyLW9iamVjdHM6CisKK0RhdGFIYW5kbGVyIE9iamVjdHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworLi4gbWV0aG9kOjogRGF0YUhhbmRsZXIuZGF0YV9vcGVuKHJlcSkKKworICAgUmVhZCBhIGRhdGEgVVJMLiBUaGlzIGtpbmQgb2YgVVJMIGNvbnRhaW5zIHRoZSBjb250ZW50IGVuY29kZWQgaW4gdGhlIFVSTAorICAgaXRzZWxmLiBUaGUgZGF0YSBVUkwgc3ludGF4IGlzIHNwZWNpZmllZCBpbiA6cmZjOmAyMzk3YC4gVGhpcyBpbXBsZW1lbnRhdGlvbgorICAgaWdub3JlcyB3aGl0ZSBzcGFjZXMgaW4gYmFzZTY0IGVuY29kZWQgZGF0YSBVUkxzIHNvIHRoZSBVUkwgbWF5IGJlIHdyYXBwZWQKKyAgIGluIHdoYXRldmVyIHNvdXJjZSBmaWxlIGl0IGNvbWVzIGZyb20uIEJ1dCBldmVuIHRob3VnaCBzb21lIGJyb3dzZXJzIGRvbid0CisgICBtaW5kIGFib3V0IGEgbWlzc2luZyBwYWRkaW5nIGF0IHRoZSBlbmQgb2YgYSBiYXNlNjQgZW5jb2RlZCBkYXRhIFVSTCwgdGhpcworICAgaW1wbGVtZW50YXRpb24gd2lsbCByYWlzZSBhbiA6ZXhjOmBWYWx1ZUVycm9yYCBpbiB0aGF0IGNhc2UuCisKKwogLi4gX2Z0cC1oYW5kbGVyLW9iamVjdHM6CiAKIEZUUEhhbmRsZXIgT2JqZWN0cwpAQCAtMTA1OCw4ICsxMDQ3LDkgQEAKIGl0LiA6OgogCiAgICA+Pj4gaW1wb3J0IHVybGxpYi5yZXF1ZXN0Ci0gICA+Pj4gZiA9IHVybGxpYi5yZXF1ZXN0LnVybG9wZW4oJ2h0dHA6Ly93d3cucHl0aG9uLm9yZy8nKQotICAgPj4+IHByaW50KGYucmVhZCgzMDApKQorICAgPj4+IHdpdGggdXJsbGliLnJlcXVlc3QudXJsb3BlbignaHR0cDovL3d3dy5weXRob24ub3JnLycpIGFzIGY6CisgICAuLi4gICAgIHByaW50KGYucmVhZCgzMDApKQorICAgLi4uCiAgICBiJzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iCiAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+XG5cblxuPGh0bWwKICAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWw6bGFuZz0iZW4iIGxhbmc9ImVuIj5cblxuPGhlYWQ+XG4KQEAgLTEwNzYsNyArMTA2Niw3IEBACiB0aGUgdmFyaW91cyB3YXlzIGluIHdoaWNoIGEgKFgpSFRNTCBvciBhIFhNTCBkb2N1bWVudCBjb3VsZCBoYXZlIHNwZWNpZmllZCBpdHMKIGVuY29kaW5nIGluZm9ybWF0aW9uLgogCi1BcyB0aGUgcHl0aG9uLm9yZyB3ZWJzaXRlIHVzZXMgKnV0Zi04KiBlbmNvZGluZyBhcyBzcGVjaWZpZWQgaW4gaXQncyBtZXRhIHRhZywgd2UKK0FzIHRoZSBweXRob24ub3JnIHdlYnNpdGUgdXNlcyAqdXRmLTgqIGVuY29kaW5nIGFzIHNwZWNpZmllZCBpbiBpdHMgbWV0YSB0YWcsIHdlCiB3aWxsIHVzZSB0aGUgc2FtZSBmb3IgZGVjb2RpbmcgdGhlIGJ5dGVzIG9iamVjdC4gOjoKIAogICAgPj4+IHdpdGggdXJsbGliLnJlcXVlc3QudXJsb3BlbignaHR0cDovL3d3dy5weXRob24ub3JnLycpIGFzIGY6CkBAIC0xMTAxLDggKzEwOTEsOSBAQAogICAgPj4+IGltcG9ydCB1cmxsaWIucmVxdWVzdAogICAgPj4+IHJlcSA9IHVybGxpYi5yZXF1ZXN0LlJlcXVlc3QodXJsPSdodHRwczovL2xvY2FsaG9zdC9jZ2ktYmluL3Rlc3QuY2dpJywKICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgZGF0YT1iJ1RoaXMgZGF0YSBpcyBwYXNzZWQgdG8gc3RkaW4gb2YgdGhlIENHSScpCi0gICA+Pj4gZiA9IHVybGxpYi5yZXF1ZXN0LnVybG9wZW4ocmVxKQotICAgPj4+IHByaW50KGYucmVhZCgpLmRlY29kZSgndXRmLTgnKSkKKyAgID4+PiB3aXRoIHVybGxpYi5yZXF1ZXN0LnVybG9wZW4ocmVxKSBhcyBmOgorICAgLi4uICAgICBwcmludChmLnJlYWQoKS5kZWNvZGUoJ3V0Zi04JykpCisgICAuLi4KICAgIEdvdCBEYXRhOiAiVGhpcyBkYXRhIGlzIHBhc3NlZCB0byBzdGRpbiBvZiB0aGUgQ0dJIgogCiBUaGUgY29kZSBmb3IgdGhlIHNhbXBsZSBDR0kgdXNlZCBpbiB0aGUgYWJvdmUgZXhhbXBsZSBpczo6CkBAIC0xMTEwLDE0ICsxMTAxLDE1IEBACiAgICAjIS91c3IvYmluL2VudiBweXRob24KICAgIGltcG9ydCBzeXMKICAgIGRhdGEgPSBzeXMuc3RkaW4ucmVhZCgpCi0gICBwcmludCgnQ29udGVudC10eXBlOiB0ZXh0LXBsYWluXG5cbkdvdCBEYXRhOiAiJXMiJyAlIGRhdGEpCisgICBwcmludCgnQ29udGVudC10eXBlOiB0ZXh0L3BsYWluXG5cbkdvdCBEYXRhOiAiJXMiJyAlIGRhdGEpCiAKIEhlcmUgaXMgYW4gZXhhbXBsZSBvZiBkb2luZyBhIGBgUFVUYGAgcmVxdWVzdCB1c2luZyA6Y2xhc3M6YFJlcXVlc3RgOjoKIAogICAgIGltcG9ydCB1cmxsaWIucmVxdWVzdAogICAgIERBVEE9Yidzb21lIGRhdGEnCiAgICAgcmVxID0gdXJsbGliLnJlcXVlc3QuUmVxdWVzdCh1cmw9J2h0dHA6Ly9sb2NhbGhvc3Q6ODA4MCcsIGRhdGE9REFUQSxtZXRob2Q9J1BVVCcpCi0gICAgZiA9IHVybGxpYi5yZXF1ZXN0LnVybG9wZW4ocmVxKQorICAgIHdpdGggdXJsbGliLnJlcXVlc3QudXJsb3BlbihyZXEpIGFzIGY6CisgICAgICAgIHBhc3MKICAgICBwcmludChmLnN0YXR1cykKICAgICBwcmludChmLnJlYXNvbikKIApAQCAtMTE3MSw3ICsxMTYzLDcgQEAKICAgIG9wZW5lci5vcGVuKCdodHRwOi8vd3d3LmV4YW1wbGUuY29tLycpCiAKIEFsc28sIHJlbWVtYmVyIHRoYXQgYSBmZXcgc3RhbmRhcmQgaGVhZGVycyAoOm1haWxoZWFkZXI6YENvbnRlbnQtTGVuZ3RoYCwKLTptYWlsaGVhZGVyOmBDb250ZW50LVR5cGVgIHdpdGhvdXQgY2hhcnNldCBwYXJhbWV0ZXIgYW5kIDptYWlsaGVhZGVyOmBIb3N0YCkKKzptYWlsaGVhZGVyOmBDb250ZW50LVR5cGVgIGFuZCA6bWFpbGhlYWRlcjpgSG9zdGApCiBhcmUgYWRkZWQgd2hlbiB0aGUgOmNsYXNzOmBSZXF1ZXN0YCBpcyBwYXNzZWQgdG8gOmZ1bmM6YHVybG9wZW5gIChvcgogOm1ldGg6YE9wZW5lckRpcmVjdG9yLm9wZW5gKS4KIApAQCAtMTE4Myw4ICsxMTc1LDEwIEBACiAgICA+Pj4gaW1wb3J0IHVybGxpYi5yZXF1ZXN0CiAgICA+Pj4gaW1wb3J0IHVybGxpYi5wYXJzZQogICAgPj4+IHBhcmFtcyA9IHVybGxpYi5wYXJzZS51cmxlbmNvZGUoeydzcGFtJzogMSwgJ2VnZ3MnOiAyLCAnYmFjb24nOiAwfSkKLSAgID4+PiBmID0gdXJsbGliLnJlcXVlc3QudXJsb3BlbigiaHR0cDovL3d3dy5tdXNpLWNhbC5jb20vY2dpLWJpbi9xdWVyeT8lcyIgJSBwYXJhbXMpCi0gICA+Pj4gcHJpbnQoZi5yZWFkKCkuZGVjb2RlKCd1dGYtOCcpKQorICAgPj4+IHVybCA9ICJodHRwOi8vd3d3Lm11c2ktY2FsLmNvbS9jZ2ktYmluL3F1ZXJ5PyVzIiAlIHBhcmFtcworICAgPj4+IHdpdGggdXJsbGliLnJlcXVlc3QudXJsb3Blbih1cmwpIGFzIGY6CisgICAuLi4gICAgIHByaW50KGYucmVhZCgpLmRlY29kZSgndXRmLTgnKSkKKyAgIC4uLgogCiBUaGUgZm9sbG93aW5nIGV4YW1wbGUgdXNlcyB0aGUgYGBQT1NUYGAgbWV0aG9kIGluc3RlYWQuIE5vdGUgdGhhdCBwYXJhbXMgb3V0cHV0CiBmcm9tIHVybGVuY29kZSBpcyBlbmNvZGVkIHRvIGJ5dGVzIGJlZm9yZSBpdCBpcyBzZW50IHRvIHVybG9wZW4gYXMgZGF0YTo6CkBAIC0xMTkyLDEyICsxMTg2LDEwIEBACiAgICA+Pj4gaW1wb3J0IHVybGxpYi5yZXF1ZXN0CiAgICA+Pj4gaW1wb3J0IHVybGxpYi5wYXJzZQogICAgPj4+IGRhdGEgPSB1cmxsaWIucGFyc2UudXJsZW5jb2RlKHsnc3BhbSc6IDEsICdlZ2dzJzogMiwgJ2JhY29uJzogMH0pCi0gICA+Pj4gZGF0YSA9IGRhdGEuZW5jb2RlKCd1dGYtOCcpCi0gICA+Pj4gcmVxdWVzdCA9IHVybGxpYi5yZXF1ZXN0LlJlcXVlc3QoImh0dHA6Ly9yZXF1ZXN0Yi5pbi94cmJsODJ4ciIpCi0gICA+Pj4gIyBhZGRpbmcgY2hhcnNldCBwYXJhbWV0ZXIgdG8gdGhlIENvbnRlbnQtVHlwZSBoZWFkZXIuCi0gICA+Pj4gcmVxdWVzdC5hZGRfaGVhZGVyKCJDb250ZW50LVR5cGUiLCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCIpCi0gICA+Pj4gZiA9IHVybGxpYi5yZXF1ZXN0LnVybG9wZW4ocmVxdWVzdCwgZGF0YSkKLSAgID4+PiBwcmludChmLnJlYWQoKS5kZWNvZGUoJ3V0Zi04JykpCisgICA+Pj4gZGF0YSA9IGRhdGEuZW5jb2RlKCdhc2NpaScpCisgICA+Pj4gd2l0aCB1cmxsaWIucmVxdWVzdC51cmxvcGVuKCJodHRwOi8vcmVxdWVzdGIuaW4veHJibDgyeHIiLCBkYXRhKSBhcyBmOgorICAgLi4uICAgICBwcmludChmLnJlYWQoKS5kZWNvZGUoJ3V0Zi04JykpCisgICAuLi4KIAogVGhlIGZvbGxvd2luZyBleGFtcGxlIHVzZXMgYW4gZXhwbGljaXRseSBzcGVjaWZpZWQgSFRUUCBwcm94eSwgb3ZlcnJpZGluZwogZW52aXJvbm1lbnQgc2V0dGluZ3M6OgpAQCAtMTIwNSwxNSArMTE5NywxNyBAQAogICAgPj4+IGltcG9ydCB1cmxsaWIucmVxdWVzdAogICAgPj4+IHByb3hpZXMgPSB7J2h0dHAnOiAnaHR0cDovL3Byb3h5LmV4YW1wbGUuY29tOjgwODAvJ30KICAgID4+PiBvcGVuZXIgPSB1cmxsaWIucmVxdWVzdC5GYW5jeVVSTG9wZW5lcihwcm94aWVzKQotICAgPj4+IGYgPSBvcGVuZXIub3BlbigiaHR0cDovL3d3dy5weXRob24ub3JnIikKLSAgID4+PiBmLnJlYWQoKS5kZWNvZGUoJ3V0Zi04JykKKyAgID4+PiB3aXRoIG9wZW5lci5vcGVuKCJodHRwOi8vd3d3LnB5dGhvbi5vcmciKSBhcyBmOgorICAgLi4uICAgICBmLnJlYWQoKS5kZWNvZGUoJ3V0Zi04JykKKyAgIC4uLgogCiBUaGUgZm9sbG93aW5nIGV4YW1wbGUgdXNlcyBubyBwcm94aWVzIGF0IGFsbCwgb3ZlcnJpZGluZyBlbnZpcm9ubWVudCBzZXR0aW5nczo6CiAKICAgID4+PiBpbXBvcnQgdXJsbGliLnJlcXVlc3QKICAgID4+PiBvcGVuZXIgPSB1cmxsaWIucmVxdWVzdC5GYW5jeVVSTG9wZW5lcih7fSkKLSAgID4+PiBmID0gb3BlbmVyLm9wZW4oImh0dHA6Ly93d3cucHl0aG9uLm9yZy8iKQotICAgPj4+IGYucmVhZCgpLmRlY29kZSgndXRmLTgnKQorICAgPj4+IHdpdGggb3BlbmVyLm9wZW4oImh0dHA6Ly93d3cucHl0aG9uLm9yZy8iKSBhcyBmOgorICAgLi4uICAgICBmLnJlYWQoKS5kZWNvZGUoJ3V0Zi04JykKKyAgIC4uLgogCiAKIExlZ2FjeSBpbnRlcmZhY2UKQEAgLTEzMTksNyArMTMxMyw3IEBACiAgICAgLi4gbWV0aG9kOjogcmV0cmlldmUodXJsLCBmaWxlbmFtZT1Ob25lLCByZXBvcnRob29rPU5vbmUsIGRhdGE9Tm9uZSkKIAogICAgICAgIFJldHJpZXZlcyB0aGUgY29udGVudHMgb2YgKnVybCogYW5kIHBsYWNlcyBpdCBpbiAqZmlsZW5hbWUqLiAgVGhlIHJldHVybiB2YWx1ZQotICAgICAgIGlzIGEgdHVwbGUgY29uc2lzdGluZyBvZiBhIGxvY2FsIGZpbGVuYW1lIGFuZCBlaXRoZXIgYQorICAgICAgIGlzIGEgdHVwbGUgY29uc2lzdGluZyBvZiBhIGxvY2FsIGZpbGVuYW1lIGFuZCBlaXRoZXIgYW4KICAgICAgICA6Y2xhc3M6YGVtYWlsLm1lc3NhZ2UuTWVzc2FnZWAgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHJlc3BvbnNlIGhlYWRlcnMgKGZvciByZW1vdGUKICAgICAgICBVUkxzKSBvciBgYE5vbmVgYCAoZm9yIGxvY2FsIFVSTHMpLiAgVGhlIGNhbGxlciBtdXN0IHRoZW4gb3BlbiBhbmQgcmVhZCB0aGUKICAgICAgICBjb250ZW50cyBvZiAqZmlsZW5hbWUqLiAgSWYgKmZpbGVuYW1lKiBpcyBub3QgZ2l2ZW4gYW5kIHRoZSBVUkwgcmVmZXJzIHRvIGEKQEAgLTEzOTgsNyArMTM5Miw5IEBACiAgICAgIHBhaXI6IEZUUDsgcHJvdG9jb2wKIAogKiBDdXJyZW50bHksIG9ubHkgdGhlIGZvbGxvd2luZyBwcm90b2NvbHMgYXJlIHN1cHBvcnRlZDogSFRUUCAodmVyc2lvbnMgMC45IGFuZAotICAxLjApLCBGVFAsIGFuZCBsb2NhbCBmaWxlcy4KKyAgMS4wKSwgRlRQLCBsb2NhbCBmaWxlcywgYW5kIGRhdGEgVVJMcy4KKworICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNCBBZGRlZCBzdXBwb3J0IGZvciBkYXRhIFVSTHMuCiAKICogVGhlIGNhY2hpbmcgZmVhdHVyZSBvZiA6ZnVuYzpgdXJscmV0cmlldmVgIGhhcyBiZWVuIGRpc2FibGVkIHVudGlsIHNvbWVvbmUKICAgZmluZHMgdGhlIHRpbWUgdG8gaGFjayBwcm9wZXIgcHJvY2Vzc2luZyBvZiBFeHBpcmF0aW9uIHRpbWUgaGVhZGVycy4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3ZlbnYucnN0IGIvRG9jL2xpYnJhcnkvdmVudi5yc3QKaW5kZXggYmUwY2FkNC4uZTllZGU4YiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvdmVudi5yc3QKKysrIGIvRG9jL2xpYnJhcnkvdmVudi5yc3QKQEAgLTc2LDYgKzc2LDggQEAKICAgIHdpdGhvdXQgdGhlcmUgbmVlZGluZyB0byBiZSBhbnkgcmVmZXJlbmNlIHRvIGl0cyB2ZW52IGluIGBgUEFUSGBgLgogCiAKKy4uIF92ZW52LWFwaToKKwogQVBJCiAtLS0KIApAQCAtODUsNyArODcsOCBAQAogbWVjaGFuaXNtcyBmb3IgdGhpcmQtcGFydHkgdmlydHVhbCBlbnZpcm9ubWVudCBjcmVhdG9ycyB0byBjdXN0b21pemUgZW52aXJvbm1lbnQKIGNyZWF0aW9uIGFjY29yZGluZyB0byB0aGVpciBuZWVkcywgdGhlIDpjbGFzczpgRW52QnVpbGRlcmAgY2xhc3MuCiAKLS4uIGNsYXNzOjogRW52QnVpbGRlcihzeXN0ZW1fc2l0ZV9wYWNrYWdlcz1GYWxzZSwgY2xlYXI9RmFsc2UsIHN5bWxpbmtzPUZhbHNlLCB1cGdyYWRlPUZhbHNlKQorLi4gY2xhc3M6OiBFbnZCdWlsZGVyKHN5c3RlbV9zaXRlX3BhY2thZ2VzPUZhbHNlLCBjbGVhcj1GYWxzZSwgXAorICAgICAgICAgICAgICAgICAgICAgIHN5bWxpbmtzPUZhbHNlLCB1cGdyYWRlPUZhbHNlLCB3aXRoX3BpcD1GYWxzZSkKIAogICAgIFRoZSA6Y2xhc3M6YEVudkJ1aWxkZXJgIGNsYXNzIGFjY2VwdHMgdGhlIGZvbGxvd2luZyBrZXl3b3JkIGFyZ3VtZW50cyBvbgogICAgIGluc3RhbnRpYXRpb246CkBAIC05Myw4ICs5Niw4IEBACiAgICAgKiBgYHN5c3RlbV9zaXRlX3BhY2thZ2VzYGAgLS0gYSBCb29sZWFuIHZhbHVlIGluZGljYXRpbmcgdGhhdCB0aGUgc3lzdGVtIFB5dGhvbgogICAgICAgc2l0ZS1wYWNrYWdlcyBzaG91bGQgYmUgYXZhaWxhYmxlIHRvIHRoZSBlbnZpcm9ubWVudCAoZGVmYXVsdHMgdG8gYGBGYWxzZWBgKS4KIAotICAgICogYGBjbGVhcmBgIC0tIGEgQm9vbGVhbiB2YWx1ZSB3aGljaCwgaWYgdHJ1ZSwgd2lsbCBkZWxldGUgYW55IGV4aXN0aW5nIHRhcmdldAotICAgICAgZGlyZWN0b3J5IGluc3RlYWQgb2YgcmFpc2luZyBhbiBleGNlcHRpb24gKGRlZmF1bHRzIHRvIGBgRmFsc2VgYCkuCisgICAgKiBgYGNsZWFyYGAgLS0gYSBCb29sZWFuIHZhbHVlIHdoaWNoLCBpZiB0cnVlLCB3aWxsIGRlbGV0ZSB0aGUgY29udGVudHMgb2YKKyAgICAgIGFueSBleGlzdGluZyB0YXJnZXQgZGlyZWN0b3J5LCBiZWZvcmUgY3JlYXRpbmcgdGhlIGVudmlyb25tZW50LgogCiAgICAgKiBgYHN5bWxpbmtzYGAgLS0gYSBCb29sZWFuIHZhbHVlIGluZGljYXRpbmcgd2hldGhlciB0byBhdHRlbXB0IHRvIHN5bWxpbmsgdGhlCiAgICAgICBQeXRob24gYmluYXJ5IChhbmQgYW55IG5lY2Vzc2FyeSBETExzIG9yIG90aGVyIGJpbmFyaWVzLApAQCAtMTA1LDYgKzEwOCwxMiBAQAogICAgICAgZW52aXJvbm1lbnQgd2l0aCB0aGUgcnVubmluZyBQeXRob24gLSBmb3IgdXNlIHdoZW4gdGhhdCBQeXRob24gaGFzIGJlZW4KICAgICAgIHVwZ3JhZGVkIGluLXBsYWNlIChkZWZhdWx0cyB0byBgYEZhbHNlYGApLgogCisgICAgKiBgYHdpdGhfcGlwYGAgLS0gYSBCb29sZWFuIHZhbHVlIHdoaWNoLCBpZiB0cnVlLCBlbnN1cmVzIHBpcCBpcworICAgICAgaW5zdGFsbGVkIGluIHRoZSB2aXJ0dWFsIGVudmlyb25tZW50LiBUaGlzIHVzZXMgOm1vZDpgZW5zdXJlcGlwYCB3aXRoCisgICAgICB0aGUgYGAtLWRlZmF1bHQtcGlwYGAgb3B0aW9uLgorCisgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgICBBZGRlZCB0aGUgYGB3aXRoX3BpcGBgIHBhcmFtZXRlcgogCiAKICAgICBDcmVhdG9ycyBvZiB0aGlyZC1wYXJ0eSB2aXJ0dWFsIGVudmlyb25tZW50IHRvb2xzIHdpbGwgYmUgZnJlZSB0byB1c2UgdGhlCkBAIC0xODgsNiArMTk3LDkgQEAKICAgICAgICAgKiBgYF9fVkVOVl9OQU1FX19gYCBpcyByZXBsYWNlZCB3aXRoIHRoZSBlbnZpcm9ubWVudCBuYW1lIChmaW5hbCBwYXRoCiAgICAgICAgICAgc2VnbWVudCBvZiBlbnZpcm9ubWVudCBkaXJlY3RvcnkpLgogCisgICAgICAgICogYGBfX1ZFTlZfUFJPTVBUX19gYCBpcyByZXBsYWNlZCB3aXRoIHRoZSBwcm9tcHQgKHRoZSBlbnZpcm9ubWVudAorICAgICAgICAgIG5hbWUgc3Vycm91bmRlZCBieSBwYXJlbnRoZXNlcyBhbmQgd2l0aCBhIGZvbGxvd2luZyBzcGFjZSkKKwogICAgICAgICAqIGBgX19WRU5WX0JJTl9OQU1FX19gYCBpcyByZXBsYWNlZCB3aXRoIHRoZSBuYW1lIG9mIHRoZSBiaW4gZGlyZWN0b3J5CiAgICAgICAgICAgKGVpdGhlciBgYGJpbmBgIG9yIGBgU2NyaXB0c2BgKS4KIApAQCAtMTk5LDExICsyMTEsMTUgQEAKIAogVGhlcmUgaXMgYWxzbyBhIG1vZHVsZS1sZXZlbCBjb252ZW5pZW5jZSBmdW5jdGlvbjoKIAotLi4gZnVuY3Rpb246OiBjcmVhdGUoZW52X2Rpciwgc3lzdGVtX3NpdGVfcGFja2FnZXM9RmFsc2UsIGNsZWFyPUZhbHNlLCBzeW1saW5rcz1GYWxzZSkKKy4uIGZ1bmN0aW9uOjogY3JlYXRlKGVudl9kaXIsIHN5c3RlbV9zaXRlX3BhY2thZ2VzPUZhbHNlLCBjbGVhcj1GYWxzZSwgXAorICAgICAgICAgICAgICAgICAgICAgc3ltbGlua3M9RmFsc2UsIHdpdGhfcGlwPUZhbHNlKQogCiAgICAgQ3JlYXRlIGFuIDpjbGFzczpgRW52QnVpbGRlcmAgd2l0aCB0aGUgZ2l2ZW4ga2V5d29yZCBhcmd1bWVudHMsIGFuZCBjYWxsIGl0cwogICAgIDptZXRoOmB+RW52QnVpbGRlci5jcmVhdGVgIG1ldGhvZCB3aXRoIHRoZSAqZW52X2RpciogYXJndW1lbnQuCiAKKyAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgIEFkZGVkIHRoZSBgYHdpdGhfcGlwYGAgcGFyYW1ldGVyCisKIEFuIGV4YW1wbGUgb2YgZXh0ZW5kaW5nIGBgRW52QnVpbGRlcmBgCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS93YXZlLnJzdCBiL0RvYy9saWJyYXJ5L3dhdmUucnN0CmluZGV4IGFmYWZiNDUuLmFiNjQ5NzggMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3dhdmUucnN0CisrKyBiL0RvYy9saWJyYXJ5L3dhdmUucnN0CkBAIC0xOSwyNiArMTksMzIgQEAKIC4uIGZ1bmN0aW9uOjogb3BlbihmaWxlLCBtb2RlPU5vbmUpCiAKICAgIElmICpmaWxlKiBpcyBhIHN0cmluZywgb3BlbiB0aGUgZmlsZSBieSB0aGF0IG5hbWUsIG90aGVyd2lzZSB0cmVhdCBpdCBhcyBhCi0gICBzZWVrYWJsZSBmaWxlLWxpa2Ugb2JqZWN0LiAgKm1vZGUqIGNhbiBiZSBhbnkgb2YKKyAgIGZpbGUtbGlrZSBvYmplY3QuICAqbW9kZSogY2FuIGJlOgogCi0gICBgYCdyJ2BgLCBgYCdyYidgYAorICAgYGAncmInYGAKICAgICAgIFJlYWQgb25seSBtb2RlLgogCi0gICBgYCd3J2BgLCBgYCd3YidgYAorICAgYGAnd2InYGAKICAgICAgIFdyaXRlIG9ubHkgbW9kZS4KIAogICAgTm90ZSB0aGF0IGl0IGRvZXMgbm90IGFsbG93IHJlYWQvd3JpdGUgV0FWIGZpbGVzLgogCi0gICBBICptb2RlKiBvZiBgYCdyJ2BgIG9yIGBgJ3JiJ2BgIHJldHVybnMgYSA6Y2xhc3M6YFdhdmVfcmVhZGAgb2JqZWN0LCB3aGlsZSBhCi0gICAqbW9kZSogb2YgYGAndydgYCBvciBgYCd3YidgYCByZXR1cm5zIGEgOmNsYXNzOmBXYXZlX3dyaXRlYCBvYmplY3QuICBJZgotICAgKm1vZGUqIGlzIG9taXR0ZWQgYW5kIGEgZmlsZS1saWtlIG9iamVjdCBpcyBwYXNzZWQgYXMgKmZpbGUqLCBgYGZpbGUubW9kZWBgCi0gICBpcyB1c2VkIGFzIHRoZSBkZWZhdWx0IHZhbHVlIGZvciAqbW9kZSogKHRoZSBgYCdiJ2BgIGZsYWcgaXMgc3RpbGwgYWRkZWQgaWYKLSAgIG5lY2Vzc2FyeSkuCisgICBBICptb2RlKiBvZiBgYCdyYidgYCByZXR1cm5zIGEgOmNsYXNzOmBXYXZlX3JlYWRgIG9iamVjdCwgd2hpbGUgYSAqbW9kZSogb2YKKyAgIGBgJ3diJ2BgIHJldHVybnMgYSA6Y2xhc3M6YFdhdmVfd3JpdGVgIG9iamVjdC4gIElmICptb2RlKiBpcyBvbWl0dGVkIGFuZCBhCisgICBmaWxlLWxpa2Ugb2JqZWN0IGlzIHBhc3NlZCBhcyAqZmlsZSosIGBgZmlsZS5tb2RlYGAgaXMgdXNlZCBhcyB0aGUgZGVmYXVsdAorICAgdmFsdWUgZm9yICptb2RlKi4KIAogICAgSWYgeW91IHBhc3MgaW4gYSBmaWxlLWxpa2Ugb2JqZWN0LCB0aGUgd2F2ZSBvYmplY3Qgd2lsbCBub3QgY2xvc2UgaXQgd2hlbiBpdHMKICAgIDptZXRoOmBjbG9zZWAgbWV0aG9kIGlzIGNhbGxlZDsgaXQgaXMgdGhlIGNhbGxlcidzIHJlc3BvbnNpYmlsaXR5IHRvIGNsb3NlCiAgICB0aGUgZmlsZSBvYmplY3QuCiAKKyAgIFRoZSA6ZnVuYzpgLm9wZW5gIGZ1bmN0aW9uIG1heSBiZSB1c2VkIGluIGEgOmtleXdvcmQ6YHdpdGhgIHN0YXRlbWVudC4gIFdoZW4KKyAgIHRoZSA6a2V5d29yZDpgd2l0aGAgYmxvY2sgY29tcGxldGVzLCB0aGUgOm1ldGg6YFdhdmVfcmVhZC5jbG9zZSgpCisgICA8d2F2ZS5XYXZlX3JlYWQuY2xvc2U+YCBvciA6bWV0aDpgV2F2ZV93cml0ZS5jbG9zZSgpCisgICA8d2F2ZS5XYXZlX3dyaXRlLmNsb3NlKCk+YCBtZXRob2QgaXMgY2FsbGVkLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgQWRkZWQgc3VwcG9ydCBmb3IgdW5zZWVrYWJsZSBmaWxlcy4KIAogLi4gZnVuY3Rpb246OiBvcGVuZnAoZmlsZSwgbW9kZSkKIApAQCAtOTgsOCArMTA0LDkgQEAKIAogLi4gbWV0aG9kOjogV2F2ZV9yZWFkLmdldHBhcmFtcygpCiAKLSAgIFJldHVybnMgYSB0dXBsZSBgYChuY2hhbm5lbHMsIHNhbXB3aWR0aCwgZnJhbWVyYXRlLCBuZnJhbWVzLCBjb21wdHlwZSwKLSAgIGNvbXBuYW1lKWBgLCBlcXVpdmFsZW50IHRvIG91dHB1dCBvZiB0aGUgOm1ldGg6YGdldFwqYCBtZXRob2RzLgorICAgUmV0dXJucyBhIDpmdW5jOmB+Y29sbGVjdGlvbnMubmFtZWR0dXBsZWAgYGAobmNoYW5uZWxzLCBzYW1wd2lkdGgsCisgICBmcmFtZXJhdGUsIG5mcmFtZXMsIGNvbXB0eXBlLCBjb21wbmFtZSlgYCwgZXF1aXZhbGVudCB0byBvdXRwdXQgb2YgdGhlCisgICA6bWV0aDpgZ2V0XCpgIG1ldGhvZHMuCiAKIAogLi4gbWV0aG9kOjogV2F2ZV9yZWFkLnJlYWRmcmFtZXMobikKQEAgLTE0MywxMyArMTUwLDMwIEBACiBXYXZlX3dyaXRlIE9iamVjdHMKIC0tLS0tLS0tLS0tLS0tLS0tLQogCitGb3Igc2Vla2FibGUgb3V0cHV0IHN0cmVhbXMsIHRoZSBgYHdhdmVgYCBoZWFkZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIHVwZGF0ZWQKK3RvIHJlZmxlY3QgdGhlIG51bWJlciBvZiBmcmFtZXMgYWN0dWFsbHkgd3JpdHRlbi4gIEZvciB1bnNlZWthYmxlIHN0cmVhbXMsIHRoZQorKm5mcmFtZXMqIHZhbHVlIG11c3QgYmUgYWNjdXJhdGUgd2hlbiB0aGUgZmlyc3QgZnJhbWUgZGF0YSBpcyB3cml0dGVuLiAgQW4KK2FjY3VyYXRlICpuZnJhbWVzKiB2YWx1ZSBjYW4gYmUgYWNoaWV2ZWQgZWl0aGVyIGJ5IGNhbGxpbmcKKzptZXRoOmB+V2F2ZV93cml0ZS5zZXRuZnJhbWVzYCBvciA6bWV0aDpgfldhdmVfd3JpdGUuc2V0cGFyYW1zYCB3aXRoIHRoZSBudW1iZXIKK29mIGZyYW1lcyB0aGF0IHdpbGwgYmUgd3JpdHRlbiBiZWZvcmUgOm1ldGg6YH5XYXZlX3dyaXRlLmNsb3NlYCBpcyBjYWxsZWQgYW5kCit0aGVuIHVzaW5nIDptZXRoOmB+V2F2ZV93cml0ZS53cml0ZWZyYW1lc3Jhd2AgdG8gd3JpdGUgdGhlIGZyYW1lIGRhdGEsIG9yIGJ5CitjYWxsaW5nIDptZXRoOmB+V2F2ZV93cml0ZS53cml0ZWZyYW1lc2Agd2l0aCBhbGwgb2YgdGhlIGZyYW1lIGRhdGEgdG8gYmUKK3dyaXR0ZW4uICBJbiB0aGUgbGF0dGVyIGNhc2UgOm1ldGg6YH5XYXZlX3dyaXRlLndyaXRlZnJhbWVzYCB3aWxsIGNhbGN1bGF0ZQordGhlIG51bWJlciBvZiBmcmFtZXMgaW4gdGhlIGRhdGEgYW5kIHNldCAqbmZyYW1lcyogYWNjb3JkaW5nbHkgYmVmb3JlIHdyaXRpbmcKK3RoZSBmcmFtZSBkYXRhLgorCiBXYXZlX3dyaXRlIG9iamVjdHMsIGFzIHJldHVybmVkIGJ5IDpmdW5jOmAub3BlbmAsIGhhdmUgdGhlIGZvbGxvd2luZyBtZXRob2RzOgogCisuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgQWRkZWQgc3VwcG9ydCBmb3IgdW5zZWVrYWJsZSBmaWxlcy4KKwogCiAuLiBtZXRob2Q6OiBXYXZlX3dyaXRlLmNsb3NlKCkKIAogICAgTWFrZSBzdXJlICpuZnJhbWVzKiBpcyBjb3JyZWN0LCBhbmQgY2xvc2UgdGhlIGZpbGUgaWYgaXQgd2FzIG9wZW5lZCBieQotICAgOm1vZDpgd2F2ZWAuICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdXBvbiBvYmplY3QgY29sbGVjdGlvbi4KKyAgIDptb2Q6YHdhdmVgLiAgVGhpcyBtZXRob2QgaXMgY2FsbGVkIHVwb24gb2JqZWN0IGNvbGxlY3Rpb24uICBJdCB3aWxsIHJhaXNlCisgICBhbiBleGNlcHRpb24gaWYgdGhlIG91dHB1dCBzdHJlYW0gaXMgbm90IHNlZWthYmxlIGFuZCAqbmZyYW1lcyogZG9lcyBub3QKKyAgIG1hdGNoIHRoZSBudW1iZXIgb2YgZnJhbWVzIGFjdHVhbGx5IHdyaXR0ZW4uCiAKIAogLi4gbWV0aG9kOjogV2F2ZV93cml0ZS5zZXRuY2hhbm5lbHMobikKQEAgLTE3Myw4ICsxOTcsOSBAQAogCiAuLiBtZXRob2Q6OiBXYXZlX3dyaXRlLnNldG5mcmFtZXMobikKIAotICAgU2V0IHRoZSBudW1iZXIgb2YgZnJhbWVzIHRvICpuKi4gVGhpcyB3aWxsIGJlIGNoYW5nZWQgbGF0ZXIgaWYgbW9yZSBmcmFtZXMgYXJlCi0gICB3cml0dGVuLgorICAgU2V0IHRoZSBudW1iZXIgb2YgZnJhbWVzIHRvICpuKi4gIFRoaXMgd2lsbCBiZSBjaGFuZ2VkIGxhdGVyIGlmIHRoZSBudW1iZXIKKyAgIG9mIGZyYW1lcyBhY3R1YWxseSB3cml0dGVuIGlzIGRpZmZlcmVudCAodGhpcyB1cGRhdGUgYXR0ZW1wdCB3aWxsCisgICByYWlzZSBhbiBlcnJvciBpZiB0aGUgb3V0cHV0IHN0cmVhbSBpcyBub3Qgc2Vla2FibGUpLgogCiAKIC4uIG1ldGhvZDo6IFdhdmVfd3JpdGUuc2V0Y29tcHR5cGUodHlwZSwgbmFtZSkKQEAgLTIwMCwxMCArMjI1LDE5IEBACiAKICAgIFdyaXRlIGF1ZGlvIGZyYW1lcywgd2l0aG91dCBjb3JyZWN0aW5nICpuZnJhbWVzKi4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIEFueSA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgIGlzIG5vdyBhY2NlcHRlZC4KKwogCiAuLiBtZXRob2Q6OiBXYXZlX3dyaXRlLndyaXRlZnJhbWVzKGRhdGEpCiAKLSAgIFdyaXRlIGF1ZGlvIGZyYW1lcyBhbmQgbWFrZSBzdXJlICpuZnJhbWVzKiBpcyBjb3JyZWN0LgorICAgV3JpdGUgYXVkaW8gZnJhbWVzIGFuZCBtYWtlIHN1cmUgKm5mcmFtZXMqIGlzIGNvcnJlY3QuICBJdCB3aWxsIHJhaXNlIGFuCisgICBlcnJvciBpZiB0aGUgb3V0cHV0IHN0cmVhbSBpcyBub3Qgc2Vla2FibGUgYW5kIHRoZSB0b3RhbCBudW1iZXIgb2YgZnJhbWVzCisgICB0aGF0IGhhdmUgYmVlbiB3cml0dGVuIGFmdGVyICpkYXRhKiBoYXMgYmVlbiB3cml0dGVuIGRvZXMgbm90IG1hdGNoIHRoZQorICAgcHJldmlvdXNseSBzZXQgdmFsdWUgZm9yICpuZnJhbWVzKi4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIEFueSA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgIGlzIG5vdyBhY2NlcHRlZC4KIAogCiBOb3RlIHRoYXQgaXQgaXMgaW52YWxpZCB0byBzZXQgYW55IHBhcmFtZXRlcnMgYWZ0ZXIgY2FsbGluZyA6bWV0aDpgd3JpdGVmcmFtZXNgCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS93ZWFrcmVmLnJzdCBiL0RvYy9saWJyYXJ5L3dlYWtyZWYucnN0CmluZGV4IDIyNGY0NDIuLmNjODgzYjEgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3dlYWtyZWYucnN0CisrKyBiL0RvYy9saWJyYXJ5L3dlYWtyZWYucnN0CkBAIC01MSwxMCArNTEsMTYgQEAKIGJ1dCBrZWVwcyB3ZWFrIHJlZmVyZW5jZXMgdG8gaXRzIGVsZW1lbnRzLCBqdXN0IGxpa2UgYQogOmNsYXNzOmBXZWFrS2V5RGljdGlvbmFyeWAgZG9lcy4KIAotTW9zdCBwcm9ncmFtcyBzaG91bGQgZmluZCB0aGF0IHVzaW5nIG9uZSBvZiB0aGVzZSB3ZWFrIGNvbnRhaW5lciB0eXBlcyBpcyBhbGwKLXRoZXkgbmVlZCAtLSBpdCdzIG5vdCB1c3VhbGx5IG5lY2Vzc2FyeSB0byBjcmVhdGUgeW91ciBvd24gd2VhayByZWZlcmVuY2VzCi1kaXJlY3RseS4gIFRoZSBsb3ctbGV2ZWwgbWFjaGluZXJ5IHVzZWQgYnkgdGhlIHdlYWsgZGljdGlvbmFyeSBpbXBsZW1lbnRhdGlvbnMKLWlzIGV4cG9zZWQgYnkgdGhlIDptb2Q6YHdlYWtyZWZgIG1vZHVsZSBmb3IgdGhlIGJlbmVmaXQgb2YgYWR2YW5jZWQgdXNlcy4KKzpjbGFzczpgZmluYWxpemVgIHByb3ZpZGVzIGEgc3RyYWlnaHQgZm9yd2FyZCB3YXkgdG8gcmVnaXN0ZXIgYQorY2xlYW51cCBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiBhbiBvYmplY3QgaXMgZ2FyYmFnZSBjb2xsZWN0ZWQuCitUaGlzIGlzIHNpbXBsZXIgdG8gdXNlIHRoYW4gc2V0dGluZyB1cCBhIGNhbGxiYWNrIGZ1bmN0aW9uIG9uIGEgcmF3Cit3ZWFrIHJlZmVyZW5jZSwgc2luY2UgdGhlIG1vZHVsZSBhdXRvbWF0aWNhbGx5IGVuc3VyZXMgdGhhdCB0aGUgZmluYWxpemVyCityZW1haW5zIGFsaXZlIHVudGlsIHRoZSBvYmplY3QgaXMgY29sbGVjdGVkLgorCitNb3N0IHByb2dyYW1zIHNob3VsZCBmaW5kIHRoYXQgdXNpbmcgb25lIG9mIHRoZXNlIHdlYWsgY29udGFpbmVyIHR5cGVzCitvciA6Y2xhc3M6YGZpbmFsaXplYCBpcyBhbGwgdGhleSBuZWVkIC0tIGl0J3Mgbm90IHVzdWFsbHkgbmVjZXNzYXJ5IHRvCitjcmVhdGUgeW91ciBvd24gd2VhayByZWZlcmVuY2VzIGRpcmVjdGx5LiAgVGhlIGxvdy1sZXZlbCBtYWNoaW5lcnkgaXMKK2V4cG9zZWQgYnkgdGhlIDptb2Q6YHdlYWtyZWZgIG1vZHVsZSBmb3IgdGhlIGJlbmVmaXQgb2YgYWR2YW5jZWQgdXNlcy4KIAogTm90IGFsbCBvYmplY3RzIGNhbiBiZSB3ZWFrbHkgcmVmZXJlbmNlZDsgdGhvc2Ugb2JqZWN0cyB3aGljaCBjYW4gaW5jbHVkZSBjbGFzcwogaW5zdGFuY2VzLCBmdW5jdGlvbnMgd3JpdHRlbiBpbiBQeXRob24gKGJ1dCBub3QgaW4gQyksIGluc3RhbmNlIG1ldGhvZHMsIHNldHMsCkBAIC0xMTEsNiArMTE3LDE1IEBACiAKICAgIFRoaXMgaXMgYSBzdWJjbGFzc2FibGUgdHlwZSByYXRoZXIgdGhhbiBhIGZhY3RvcnkgZnVuY3Rpb24uCiAKKyAgIC4uIGF0dHJpYnV0ZTo6IF9fY2FsbGJhY2tfXworCisgICAgICBUaGlzIHJlYWQtb25seSBhdHRyaWJ1dGUgcmV0dXJucyB0aGUgY2FsbGJhY2sgY3VycmVudGx5IGFzc29jaWF0ZWQgdG8gdGhlCisgICAgICB3ZWFrcmVmLiAgSWYgdGhlcmUgaXMgbm8gY2FsbGJhY2sgb3IgaWYgdGhlIHJlZmVyZW50IG9mIHRoZSB3ZWFrcmVmIGlzCisgICAgICBubyBsb25nZXIgYWxpdmUgdGhlbiB0aGlzIGF0dHJpYnV0ZSB3aWxsIGhhdmUgdmFsdWUgYGBOb25lYGAuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBBZGRlZCB0aGUgOmF0dHI6YF9fY2FsbGJhY2tfX2AgYXR0cmlidXRlLgorCiAKIC4uIGZ1bmN0aW9uOjogcHJveHkob2JqZWN0WywgY2FsbGJhY2tdKQogCkBAIC0xOTIsNiArMjA3LDk4IEBACiAgICBkaXNjYXJkZWQgd2hlbiBubyBzdHJvbmcgcmVmZXJlbmNlIHRvIGl0IGV4aXN0cyBhbnkgbW9yZS4KIAogCisuLiBjbGFzczo6IFdlYWtNZXRob2QobWV0aG9kKQorCisgICBBIGN1c3RvbSA6Y2xhc3M6YHJlZmAgc3ViY2xhc3Mgd2hpY2ggc2ltdWxhdGVzIGEgd2VhayByZWZlcmVuY2UgdG8gYSBib3VuZAorICAgbWV0aG9kIChpLmUuLCBhIG1ldGhvZCBkZWZpbmVkIG9uIGEgY2xhc3MgYW5kIGxvb2tlZCB1cCBvbiBhbiBpbnN0YW5jZSkuCisgICBTaW5jZSBhIGJvdW5kIG1ldGhvZCBpcyBlcGhlbWVyYWwsIGEgc3RhbmRhcmQgd2VhayByZWZlcmVuY2UgY2Fubm90IGtlZXAKKyAgIGhvbGQgb2YgaXQuICA6Y2xhc3M6YFdlYWtNZXRob2RgIGhhcyBzcGVjaWFsIGNvZGUgdG8gcmVjcmVhdGUgdGhlIGJvdW5kCisgICBtZXRob2QgdW50aWwgZWl0aGVyIHRoZSBvYmplY3Qgb3IgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uIGRpZXM6OgorCisgICAgICA+Pj4gY2xhc3MgQzoKKyAgICAgIC4uLiAgICAgZGVmIG1ldGhvZChzZWxmKToKKyAgICAgIC4uLiAgICAgICAgIHByaW50KCJtZXRob2QgY2FsbGVkISIpCisgICAgICAuLi4KKyAgICAgID4+PiBjID0gQygpCisgICAgICA+Pj4gciA9IHdlYWtyZWYucmVmKGMubWV0aG9kKQorICAgICAgPj4+IHIoKQorICAgICAgPj4+IHIgPSB3ZWFrcmVmLldlYWtNZXRob2QoYy5tZXRob2QpCisgICAgICA+Pj4gcigpCisgICAgICA8Ym91bmQgbWV0aG9kIEMubWV0aG9kIG9mIDxfX21haW5fXy5DIG9iamVjdCBhdCAweDdmYzg1OTgzMDIyMD4+CisgICAgICA+Pj4gcigpKCkKKyAgICAgIG1ldGhvZCBjYWxsZWQhCisgICAgICA+Pj4gZGVsIGMKKyAgICAgID4+PiBnYy5jb2xsZWN0KCkKKyAgICAgIDAKKyAgICAgID4+PiByKCkKKyAgICAgID4+PgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworLi4gY2xhc3M6OiBmaW5hbGl6ZShvYmosIGZ1bmMsICphcmdzLCAqKmt3YXJncykKKworICAgUmV0dXJuIGEgY2FsbGFibGUgZmluYWxpemVyIG9iamVjdCB3aGljaCB3aWxsIGJlIGNhbGxlZCB3aGVuICpvYmoqCisgICBpcyBnYXJiYWdlIGNvbGxlY3RlZC4gVW5saWtlIGFuIG9yZGluYXJ5IHdlYWsgcmVmZXJlbmNlLCBhIGZpbmFsaXplcgorICAgd2lsbCBhbHdheXMgc3Vydml2ZSB1bnRpbCB0aGUgcmVmZXJlbmNlIG9iamVjdCBpcyBjb2xsZWN0ZWQsIGdyZWF0bHkKKyAgIHNpbXBsaWZ5aW5nIGxpZmVjeWNsZSBtYW5hZ2VtZW50LgorCisgICBBIGZpbmFsaXplciBpcyBjb25zaWRlcmVkICphbGl2ZSogdW50aWwgaXQgaXMgY2FsbGVkIChlaXRoZXIgZXhwbGljaXRseQorICAgb3IgYXQgZ2FyYmFnZSBjb2xsZWN0aW9uKSwgYW5kIGFmdGVyIHRoYXQgaXQgaXMgKmRlYWQqLiAgQ2FsbGluZyBhIGxpdmUKKyAgIGZpbmFsaXplciByZXR1cm5zIHRoZSByZXN1bHQgb2YgZXZhbHVhdGluZyBgYGZ1bmMoKmFyZywgKiprd2FyZ3MpYGAsCisgICB3aGVyZWFzIGNhbGxpbmcgYSBkZWFkIGZpbmFsaXplciByZXR1cm5zIDpjb25zdDpgTm9uZWAuCisKKyAgIEV4Y2VwdGlvbnMgcmFpc2VkIGJ5IGZpbmFsaXplciBjYWxsYmFja3MgZHVyaW5nIGdhcmJhZ2UgY29sbGVjdGlvbgorICAgd2lsbCBiZSBzaG93biBvbiB0aGUgc3RhbmRhcmQgZXJyb3Igb3V0cHV0LCBidXQgY2Fubm90IGJlCisgICBwcm9wYWdhdGVkLiAgVGhleSBhcmUgaGFuZGxlZCBpbiB0aGUgc2FtZSB3YXkgYXMgZXhjZXB0aW9ucyByYWlzZWQKKyAgIGZyb20gYW4gb2JqZWN0J3MgOm1ldGg6YF9fZGVsX19gIG1ldGhvZCBvciBhIHdlYWsgcmVmZXJlbmNlJ3MKKyAgIGNhbGxiYWNrLgorCisgICBXaGVuIHRoZSBwcm9ncmFtIGV4aXRzLCBlYWNoIHJlbWFpbmluZyBsaXZlIGZpbmFsaXplciBpcyBjYWxsZWQKKyAgIHVubGVzcyBpdHMgOmF0dHI6YGF0ZXhpdGAgYXR0cmlidXRlIGhhcyBiZWVuIHNldCB0byBmYWxzZS4gIFRoZXkKKyAgIGFyZSBjYWxsZWQgaW4gcmV2ZXJzZSBvcmRlciBvZiBjcmVhdGlvbi4KKworICAgQSBmaW5hbGl6ZXIgd2lsbCBuZXZlciBpbnZva2UgaXRzIGNhbGxiYWNrIGR1cmluZyB0aGUgbGF0ZXIgcGFydCBvZgorICAgdGhlIGludGVycHJldGVyIHNodXRkb3duIHdoZW4gbW9kdWxlIGdsb2JhbHMgYXJlIGxpYWJsZSB0byBoYXZlCisgICBiZWVuIHJlcGxhY2VkIGJ5IDpjb25zdDpgTm9uZWAuCisKKyAgIC4uIG1ldGhvZDo6IF9fY2FsbF9fKCkKKworICAgICAgSWYgKnNlbGYqIGlzIGFsaXZlIHRoZW4gbWFyayBpdCBhcyBkZWFkIGFuZCByZXR1cm4gdGhlIHJlc3VsdCBvZgorICAgICAgY2FsbGluZyBgYGZ1bmMoKmFyZ3MsICoqa3dhcmdzKWBgLiAgSWYgKnNlbGYqIGlzIGRlYWQgdGhlbiByZXR1cm4KKyAgICAgIDpjb25zdDpgTm9uZWAuCisKKyAgIC4uIG1ldGhvZDo6IGRldGFjaCgpCisKKyAgICAgIElmICpzZWxmKiBpcyBhbGl2ZSB0aGVuIG1hcmsgaXQgYXMgZGVhZCBhbmQgcmV0dXJuIHRoZSB0dXBsZQorICAgICAgYGAob2JqLCBmdW5jLCBhcmdzLCBrd2FyZ3MpYGAuICBJZiAqc2VsZiogaXMgZGVhZCB0aGVuIHJldHVybgorICAgICAgOmNvbnN0OmBOb25lYC4KKworICAgLi4gbWV0aG9kOjogcGVlaygpCisKKyAgICAgIElmICpzZWxmKiBpcyBhbGl2ZSB0aGVuIHJldHVybiB0aGUgdHVwbGUgYGAob2JqLCBmdW5jLCBhcmdzLAorICAgICAga3dhcmdzKWBgLiAgSWYgKnNlbGYqIGlzIGRlYWQgdGhlbiByZXR1cm4gOmNvbnN0OmBOb25lYC4KKworICAgLi4gYXR0cmlidXRlOjogYWxpdmUKKworICAgICAgUHJvcGVydHkgd2hpY2ggaXMgdHJ1ZSBpZiB0aGUgZmluYWxpemVyIGlzIGFsaXZlLCBmYWxzZSBvdGhlcndpc2UuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IGF0ZXhpdAorCisgICAgICBBIHdyaXRhYmxlIGJvb2xlYW4gcHJvcGVydHkgd2hpY2ggYnkgZGVmYXVsdCBpcyB0cnVlLiAgV2hlbiB0aGUKKyAgICAgIHByb2dyYW0gZXhpdHMsIGl0IGNhbGxzIGFsbCByZW1haW5pbmcgbGl2ZSBmaW5hbGl6ZXJzIGZvciB3aGljaAorICAgICAgOmF0dHI6YC5hdGV4aXRgIGlzIHRydWUuICBUaGV5IGFyZSBjYWxsZWQgaW4gcmV2ZXJzZSBvcmRlciBvZgorICAgICAgY3JlYXRpb24uCisKKyAgIC4uIG5vdGU6OgorCisgICAgICBJdCBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIHRoYXQgKmZ1bmMqLCAqYXJncyogYW5kICprd2FyZ3MqIGRvCisgICAgICBub3Qgb3duIGFueSByZWZlcmVuY2VzIHRvICpvYmoqLCBlaXRoZXIgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwKKyAgICAgIHNpbmNlIG90aGVyd2lzZSAqb2JqKiB3aWxsIG5ldmVyIGJlIGdhcmJhZ2UgY29sbGVjdGVkLiAgSW4KKyAgICAgIHBhcnRpY3VsYXIsICpmdW5jKiBzaG91bGQgbm90IGJlIGEgYm91bmQgbWV0aG9kIG9mICpvYmoqLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiAuLiBkYXRhOjogUmVmZXJlbmNlVHlwZQogCiAgICBUaGUgdHlwZSBvYmplY3QgZm9yIHdlYWsgcmVmZXJlbmNlcyBvYmplY3RzLgpAQCAtMjMyLDggKzMzOSw5IEBACiBXZWFrIFJlZmVyZW5jZSBPYmplY3RzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVdlYWsgcmVmZXJlbmNlIG9iamVjdHMgaGF2ZSBubyBhdHRyaWJ1dGVzIG9yIG1ldGhvZHMsIGJ1dCBkbyBhbGxvdyB0aGUgcmVmZXJlbnQKLXRvIGJlIG9idGFpbmVkLCBpZiBpdCBzdGlsbCBleGlzdHMsIGJ5IGNhbGxpbmcgaXQ6CitXZWFrIHJlZmVyZW5jZSBvYmplY3RzIGhhdmUgbm8gbWV0aG9kcyBhbmQgbm8gYXR0cmlidXRlcyBiZXNpZGVzCis6YXR0cjpgcmVmLl9fY2FsbGJhY2tfX2AuIEEgd2VhayByZWZlcmVuY2Ugb2JqZWN0IGFsbG93cyB0aGUgcmVmZXJlbnQgdG8gYmUKK29idGFpbmVkLCBpZiBpdCBzdGlsbCBleGlzdHMsIGJ5IGNhbGxpbmcgaXQ6CiAKICAgID4+PiBpbXBvcnQgd2Vha3JlZgogICAgPj4+IGNsYXNzIE9iamVjdDoKQEAgLTMyNiwzICs0MzQsMTQwIEBACiAgICBkZWYgaWQyb2JqKG9pZCk6CiAgICAgICAgcmV0dXJuIF9pZDJvYmpfZGljdFtvaWRdCiAKKworLi4gX2ZpbmFsaXplLWV4YW1wbGVzOgorCitGaW5hbGl6ZXIgT2JqZWN0cworLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIG1haW4gYmVuZWZpdCBvZiB1c2luZyA6Y2xhc3M6YGZpbmFsaXplYCBpcyB0aGF0IGl0IG1ha2VzIGl0IHNpbXBsZQordG8gcmVnaXN0ZXIgYSBjYWxsYmFjayB3aXRob3V0IG5lZWRpbmcgdG8gcHJlc2VydmUgdGhlIHJldHVybmVkIGZpbmFsaXplcgorb2JqZWN0LiAgRm9yIGluc3RhbmNlCisKKyAgICA+Pj4gaW1wb3J0IHdlYWtyZWYKKyAgICA+Pj4gY2xhc3MgT2JqZWN0OgorICAgIC4uLiAgICAgcGFzcworICAgIC4uLgorICAgID4+PiBrZW5ueSA9IE9iamVjdCgpCisgICAgPj4+IHdlYWtyZWYuZmluYWxpemUoa2VubnksIHByaW50LCAiWW91IGtpbGxlZCBLZW5ueSEiKSAgI2RvY3Rlc3Q6K0VMTElQU0lTCisgICAgPGZpbmFsaXplIG9iamVjdCBhdCAuLi47IGZvciAnT2JqZWN0JyBhdCAuLi4+CisgICAgPj4+IGRlbCBrZW5ueQorICAgIFlvdSBraWxsZWQgS2VubnkhCisKK1RoZSBmaW5hbGl6ZXIgY2FuIGJlIGNhbGxlZCBkaXJlY3RseSBhcyB3ZWxsLiAgSG93ZXZlciB0aGUgZmluYWxpemVyCit3aWxsIGludm9rZSB0aGUgY2FsbGJhY2sgYXQgbW9zdCBvbmNlLgorCisgICAgPj4+IGRlZiBjYWxsYmFjayh4LCB5LCB6KToKKyAgICAuLi4gICAgIHByaW50KCJDQUxMQkFDSyIpCisgICAgLi4uICAgICByZXR1cm4geCArIHkgKyB6CisgICAgLi4uCisgICAgPj4+IG9iaiA9IE9iamVjdCgpCisgICAgPj4+IGYgPSB3ZWFrcmVmLmZpbmFsaXplKG9iaiwgY2FsbGJhY2ssIDEsIDIsIHo9MykKKyAgICA+Pj4gYXNzZXJ0IGYuYWxpdmUKKyAgICA+Pj4gYXNzZXJ0IGYoKSA9PSA2CisgICAgQ0FMTEJBQ0sKKyAgICA+Pj4gYXNzZXJ0IG5vdCBmLmFsaXZlCisgICAgPj4+IGYoKSAgICAgICAgICAgICAgICAgICAgICMgY2FsbGJhY2sgbm90IGNhbGxlZCBiZWNhdXNlIGZpbmFsaXplciBkZWFkCisgICAgPj4+IGRlbCBvYmogICAgICAgICAgICAgICAgICMgY2FsbGJhY2sgbm90IGNhbGxlZCBiZWNhdXNlIGZpbmFsaXplciBkZWFkCisKK1lvdSBjYW4gdW5yZWdpc3RlciBhIGZpbmFsaXplciB1c2luZyBpdHMgOm1ldGg6YH5maW5hbGl6ZS5kZXRhY2hgCittZXRob2QuICBUaGlzIGtpbGxzIHRoZSBmaW5hbGl6ZXIgYW5kIHJldHVybnMgdGhlIGFyZ3VtZW50cyBwYXNzZWQgdG8KK3RoZSBjb25zdHJ1Y3RvciB3aGVuIGl0IHdhcyBjcmVhdGVkLgorCisgICAgPj4+IG9iaiA9IE9iamVjdCgpCisgICAgPj4+IGYgPSB3ZWFrcmVmLmZpbmFsaXplKG9iaiwgY2FsbGJhY2ssIDEsIDIsIHo9MykKKyAgICA+Pj4gZi5kZXRhY2goKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjZG9jdGVzdDorRUxMSVBTSVMKKyAgICAoPF9fbWFpbl9fLk9iamVjdCBvYmplY3QgLi4uPiwgPGZ1bmN0aW9uIGNhbGxiYWNrIC4uLj4sICgxLCAyKSwgeyd6JzogM30pCisgICAgPj4+IG5ld29iaiwgZnVuYywgYXJncywga3dhcmdzID0gXworICAgID4+PiBhc3NlcnQgbm90IGYuYWxpdmUKKyAgICA+Pj4gYXNzZXJ0IG5ld29iaiBpcyBvYmoKKyAgICA+Pj4gYXNzZXJ0IGZ1bmMoKmFyZ3MsICoqa3dhcmdzKSA9PSA2CisgICAgQ0FMTEJBQ0sKKworVW5sZXNzIHlvdSBzZXQgdGhlIDphdHRyOmB+ZmluYWxpemUuYXRleGl0YCBhdHRyaWJ1dGUgdG8KKzpjb25zdDpgRmFsc2VgLCBhIGZpbmFsaXplciB3aWxsIGJlIGNhbGxlZCB3aGVuIHRoZSBwcm9ncmFtIGV4aXRzIGlmIGl0CitpcyBzdGlsbCBhbGl2ZS4gIEZvciBpbnN0YW5jZQorCisgICAgPj4+IG9iaiA9IE9iamVjdCgpCisgICAgPj4+IHdlYWtyZWYuZmluYWxpemUob2JqLCBwcmludCwgIm9iaiBkZWFkIG9yIGV4aXRpbmciKSAgI2RvY3Rlc3Q6K0VMTElQU0lTCisgICAgPGZpbmFsaXplIG9iamVjdCBhdCAuLi47IGZvciAnT2JqZWN0JyBhdCAuLi4+CisgICAgPj4+IGV4aXQoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2RvY3Rlc3Q6K1NLSVAKKyAgICBvYmogZGVhZCBvciBleGl0aW5nCisKKworQ29tcGFyaW5nIGZpbmFsaXplcnMgd2l0aCA6bWV0aDpgX19kZWxfX2AgbWV0aG9kcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTdXBwb3NlIHdlIHdhbnQgdG8gY3JlYXRlIGEgY2xhc3Mgd2hvc2UgaW5zdGFuY2VzIHJlcHJlc2VudCB0ZW1wb3JhcnkKK2RpcmVjdG9yaWVzLiAgVGhlIGRpcmVjdG9yaWVzIHNob3VsZCBiZSBkZWxldGVkIHdpdGggdGhlaXIgY29udGVudHMKK3doZW4gdGhlIGZpcnN0IG9mIHRoZSBmb2xsb3dpbmcgZXZlbnRzIG9jY3VyczoKKworKiB0aGUgb2JqZWN0IGlzIGdhcmJhZ2UgY29sbGVjdGVkLAorKiB0aGUgb2JqZWN0J3MgOm1ldGg6YHJlbW92ZWAgbWV0aG9kIGlzIGNhbGxlZCwgb3IKKyogdGhlIHByb2dyYW0gZXhpdHMuCisKK1dlIG1pZ2h0IHRyeSB0byBpbXBsZW1lbnQgdGhlIGNsYXNzIHVzaW5nIGEgOm1ldGg6YF9fZGVsX19gIG1ldGhvZCBhcworZm9sbG93czo6CisKKyAgICBjbGFzcyBUZW1wRGlyOgorICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICAgICBzZWxmLm5hbWUgPSB0ZW1wZmlsZS5ta2R0ZW1wKCkKKworICAgICAgICBkZWYgcmVtb3ZlKHNlbGYpOgorICAgICAgICAgICAgaWYgc2VsZi5uYW1lIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoc2VsZi5uYW1lKQorICAgICAgICAgICAgICAgIHNlbGYubmFtZSA9IE5vbmUKKworICAgICAgICBAcHJvcGVydHkKKyAgICAgICAgZGVmIHJlbW92ZWQoc2VsZik6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5uYW1lIGlzIE5vbmUKKworICAgICAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgICAgIHNlbGYucmVtb3ZlKCkKKworU3RhcnRpbmcgd2l0aCBQeXRob24gMy40LCA6bWV0aDpgX19kZWxfX2AgbWV0aG9kcyBubyBsb25nZXIgcHJldmVudAorcmVmZXJlbmNlIGN5Y2xlcyBmcm9tIGJlaW5nIGdhcmJhZ2UgY29sbGVjdGVkLCBhbmQgbW9kdWxlIGdsb2JhbHMgYXJlCitubyBsb25nZXIgZm9yY2VkIHRvIDpjb25zdDpgTm9uZWAgZHVyaW5nIGludGVycHJldGVyIHNodXRkb3duLiBTbyB0aGlzCitjb2RlIHNob3VsZCB3b3JrIHdpdGhvdXQgYW55IGlzc3VlcyBvbiBDUHl0aG9uLgorCitIb3dldmVyLCBoYW5kbGluZyBvZiA6bWV0aDpgX19kZWxfX2AgbWV0aG9kcyBpcyBub3RvcmlvdXNseSBpbXBsZW1lbnRhdGlvbgorc3BlY2lmaWMsIHNpbmNlIGl0IGRlcGVuZHMgb24gaW50ZXJuYWwgZGV0YWlscyBvZiB0aGUgaW50ZXJwcmV0ZXIncyBnYXJiYWdlCitjb2xsZWN0b3IgaW1wbGVtZW50YXRpb24uCisKK0EgbW9yZSByb2J1c3QgYWx0ZXJuYXRpdmUgY2FuIGJlIHRvIGRlZmluZSBhIGZpbmFsaXplciB3aGljaCBvbmx5IHJlZmVyZW5jZXMKK3RoZSBzcGVjaWZpYyBmdW5jdGlvbnMgYW5kIG9iamVjdHMgdGhhdCBpdCBuZWVkcywgcmF0aGVyIHRoYW4gaGF2aW5nIGFjY2VzcwordG8gdGhlIGZ1bGwgc3RhdGUgb2YgdGhlIG9iamVjdDo6CisKKyAgICBjbGFzcyBUZW1wRGlyOgorICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICAgICBzZWxmLm5hbWUgPSB0ZW1wZmlsZS5ta2R0ZW1wKCkKKyAgICAgICAgICAgIHNlbGYuX2ZpbmFsaXplciA9IHdlYWtyZWYuZmluYWxpemUoc2VsZiwgc2h1dGlsLnJtdHJlZSwgc2VsZi5uYW1lKQorCisgICAgICAgIGRlZiByZW1vdmUoc2VsZik6CisgICAgICAgICAgICBzZWxmLl9maW5hbGl6ZXIoKQorCisgICAgICAgIEBwcm9wZXJ0eQorICAgICAgICBkZWYgcmVtb3ZlZChzZWxmKToKKyAgICAgICAgICAgIHJldHVybiBub3Qgc2VsZi5fZmluYWxpemVyLmFsaXZlCisKK0RlZmluZWQgbGlrZSB0aGlzLCBvdXIgZmluYWxpemVyIG9ubHkgcmVjZWl2ZXMgYSByZWZlcmVuY2UgdG8gdGhlIGRldGFpbHMKK2l0IG5lZWRzIHRvIGNsZWFuIHVwIHRoZSBkaXJlY3RvcnkgYXBwcm9wcmlhdGVseS4gSWYgdGhlIG9iamVjdCBuZXZlciBnZXRzCitnYXJiYWdlIGNvbGxlY3RlZCB0aGUgZmluYWxpemVyIHdpbGwgc3RpbGwgYmUgY2FsbGVkIGF0IGV4aXQuCisKK1RoZSBvdGhlciBhZHZhbnRhZ2Ugb2Ygd2Vha3JlZiBiYXNlZCBmaW5hbGl6ZXJzIGlzIHRoYXQgdGhleSBjYW4gYmUgdXNlZCB0bworcmVnaXN0ZXIgZmluYWxpemVycyBmb3IgY2xhc3NlcyB3aGVyZSB0aGUgZGVmaW5pdGlvbiBpcyBjb250cm9sbGVkIGJ5IGEKK3RoaXJkIHBhcnR5LCBzdWNoIGFzIHJ1bm5pbmcgY29kZSB3aGVuIGEgbW9kdWxlIGlzIHVubG9hZGVkOjoKKworICAgIGltcG9ydCB3ZWFrcmVmLCBzeXMKKyAgICBkZWYgdW5sb2FkaW5nX21vZHVsZSgpOgorICAgICAgICAjIGltcGxpY2l0IHJlZmVyZW5jZSB0byB0aGUgbW9kdWxlIGdsb2JhbHMgZnJvbSB0aGUgZnVuY3Rpb24gYm9keQorICAgIHdlYWtyZWYuZmluYWxpemUoc3lzLm1vZHVsZXNbX19uYW1lX19dLCB1bmxvYWRpbmdfbW9kdWxlKQorCisKKy4uIG5vdGU6OgorCisgICBJZiB5b3UgY3JlYXRlIGEgZmluYWxpemVyIG9iamVjdCBpbiBhIGRhZW1vbmljIHRocmVhZCBqdXN0IGFzIHRoZSBwcm9ncmFtCisgICBleGl0cyB0aGVuIHRoZXJlIGlzIHRoZSBwb3NzaWJpbGl0eSB0aGF0IHRoZSBmaW5hbGl6ZXIKKyAgIGRvZXMgbm90IGdldCBjYWxsZWQgYXQgZXhpdC4gIEhvd2V2ZXIsIGluIGEgZGFlbW9uaWMgdGhyZWFkCisgICA6ZnVuYzpgYXRleGl0LnJlZ2lzdGVyYCwgYGB0cnk6IC4uLiBmaW5hbGx5OiAuLi5gYCBhbmQgYGB3aXRoOiAuLi5gYAorICAgZG8gbm90IGd1YXJhbnRlZSB0aGF0IGNsZWFudXAgb2NjdXJzIGVpdGhlci4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3dlYmJyb3dzZXIucnN0IGIvRG9jL2xpYnJhcnkvd2ViYnJvd3Nlci5yc3QKaW5kZXggOWMyYjNhYi4uYWE1ZTRhZCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvd2ViYnJvd3Nlci5yc3QKKysrIGIvRG9jL2xpYnJhcnkvd2ViYnJvd3Nlci5yc3QKQEAgLTE5LDEyICsxOSwxMiBAQAogYXZhaWxhYmxlLiAgSWYgdGV4dC1tb2RlIGJyb3dzZXJzIGFyZSB1c2VkLCB0aGUgY2FsbGluZyBwcm9jZXNzIHdpbGwgYmxvY2sgdW50aWwKIHRoZSB1c2VyIGV4aXRzIHRoZSBicm93c2VyLgogCi1JZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgOmVudnZhcjpgQlJPV1NFUmAgZXhpc3RzLCBpdCBpcyBpbnRlcnByZXRlZCB0bwotb3ZlcnJpZGUgdGhlIHBsYXRmb3JtIGRlZmF1bHQgbGlzdCBvZiBicm93c2VycywgYXMgYSA6ZGF0YTpgb3MucGF0aHNlcGAtc2VwYXJhdGVkCi1saXN0IG9mIGJyb3dzZXJzIHRvIHRyeSBpbiBvcmRlci4gIFdoZW4gdGhlIHZhbHVlIG9mIGEgbGlzdCBwYXJ0IGNvbnRhaW5zIHRoZQotc3RyaW5nIGBgJXNgYCwgdGhlbiBpdCBpcyAgaW50ZXJwcmV0ZWQgYXMgYSBsaXRlcmFsIGJyb3dzZXIgY29tbWFuZCBsaW5lIHRvIGJlCi11c2VkIHdpdGggdGhlIGFyZ3VtZW50IFVSTCBzdWJzdGl0dXRlZCBmb3IgYGAlc2BgOyBpZiB0aGUgcGFydCBkb2VzIG5vdCBjb250YWluCi1gYCVzYGAsIGl0IGlzIHNpbXBseSBpbnRlcnByZXRlZCBhcyB0aGUgbmFtZSBvZiB0aGUgYnJvd3NlciB0byBsYXVuY2guIFsxXV8KK0lmIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSA6ZW52dmFyOmBCUk9XU0VSYCBleGlzdHMsIGl0IGlzIGludGVycHJldGVkIGFzIHRoZQorOmRhdGE6YG9zLnBhdGhzZXBgLXNlcGFyYXRlZCBsaXN0IG9mIGJyb3dzZXJzIHRvIHRyeSBhaGVhZCBvZiB0aGUgcGxhdGZvcm0KK2RlZmF1bHRzLiAgV2hlbiB0aGUgdmFsdWUgb2YgYSBsaXN0IHBhcnQgY29udGFpbnMgdGhlIHN0cmluZyBgYCVzYGAsIHRoZW4gaXQgaXMKK2ludGVycHJldGVkIGFzIGEgbGl0ZXJhbCBicm93c2VyIGNvbW1hbmQgbGluZSB0byBiZSB1c2VkIHdpdGggdGhlIGFyZ3VtZW50IFVSTAorc3Vic3RpdHV0ZWQgZm9yIGBgJXNgYDsgaWYgdGhlIHBhcnQgZG9lcyBub3QgY29udGFpbiBgYCVzYGAsIGl0IGlzIHNpbXBseQoraW50ZXJwcmV0ZWQgYXMgdGhlIG5hbWUgb2YgdGhlIGJyb3dzZXIgdG8gbGF1bmNoLiBbMV1fCiAKIEZvciBub24tVW5peCBwbGF0Zm9ybXMsIG9yIHdoZW4gYSByZW1vdGUgYnJvd3NlciBpcyBhdmFpbGFibGUgb24gVW5peCwgdGhlCiBjb250cm9sbGluZyBwcm9jZXNzIHdpbGwgbm90IHdhaXQgZm9yIHRoZSB1c2VyIHRvIGZpbmlzaCB3aXRoIHRoZSBicm93c2VyLCBidXQKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3dpbnJlZy5yc3QgYi9Eb2MvbGlicmFyeS93aW5yZWcucnN0CmluZGV4IDA2YmNiODYuLjZjOTIwYjQgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3dpbnJlZy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvd2lucmVnLnJzdApAQCAtMzIyLDcgKzMyMiw3IEBACiAgICArLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAgICB8IGBgMmBgIHwgQW4gaW50ZWdlciBnaXZpbmcgd2hlbiB0aGUga2V5IHdhcyBsYXN0ICAgICB8CiAgICB8ICAgICAgIHwgbW9kaWZpZWQgKGlmIGF2YWlsYWJsZSkgYXMgMTAwJ3Mgb2YgICAgICAgICB8Ci0gICB8ICAgICAgIHwgbmFub3NlY29uZHMgc2luY2UgSmFuIDEsIDE2MDAuICAgICAgICAgICAgICB8CisgICB8ICAgICAgIHwgbmFub3NlY29uZHMgc2luY2UgSmFuIDEsIDE2MDEuICAgICAgICAgICAgICB8CiAgICArLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvd3NnaXJlZi5yc3QgYi9Eb2MvbGlicmFyeS93c2dpcmVmLnJzdAppbmRleCAxY2VmMmU5Li40ZWQ5NDU0IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS93c2dpcmVmLnJzdAorKysgYi9Eb2MvbGlicmFyeS93c2dpcmVmLnJzdApAQCAtNTAxLDcgKzUwMSw3IEBACiAKICAgIFNpbWlsYXIgdG8gOmNsYXNzOmBCYXNlQ0dJSGFuZGxlcmAsIGJ1dCBkZXNpZ25lZCBmb3IgdXNlIHdpdGggSFRUUCBvcmlnaW4KICAgIHNlcnZlcnMuICBJZiB5b3UgYXJlIHdyaXRpbmcgYW4gSFRUUCBzZXJ2ZXIgaW1wbGVtZW50YXRpb24sIHlvdSB3aWxsIHByb2JhYmx5Ci0gICB3YW50IHRvIHN1YmNsYXNzIHRoaXMgaW5zdGVhZCBvZiA6Y2xhc3M6YEJhc2VDR0lIYW5kbGVyYAorICAgd2FudCB0byBzdWJjbGFzcyB0aGlzIGluc3RlYWQgb2YgOmNsYXNzOmBCYXNlQ0dJSGFuZGxlcmAuCiAKICAgIFRoaXMgY2xhc3MgaXMgYSBzdWJjbGFzcyBvZiA6Y2xhc3M6YEJhc2VIYW5kbGVyYC4gIEl0IG92ZXJyaWRlcyB0aGUKICAgIDptZXRoOmBfX2luaXRfX2AsIDptZXRoOmBnZXRfc3RkaW5gLCA6bWV0aDpgZ2V0X3N0ZGVycmAsIDptZXRoOmBhZGRfY2dpX3ZhcnNgLApAQCAtNzU0LDcgKzc1NCw3IEBACiAgICAjIG9iamVjdCB0aGF0IGFjY2VwdHMgdHdvIGFyZ3VtZW50cy4gRm9yIHRoYXQgcHVycG9zZSwgd2UncmUgZ29pbmcgdG8KICAgICMgdXNlIGEgZnVuY3Rpb24gKG5vdGUgdGhhdCB5b3UncmUgbm90IGxpbWl0ZWQgdG8gYSBmdW5jdGlvbiwgeW91IGNhbgogICAgIyB1c2UgYSBjbGFzcyBmb3IgZXhhbXBsZSkuIFRoZSBmaXJzdCBhcmd1bWVudCBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uCi0gICAjIGlzIGEgZGljdGlvbmFyeSBjb250YWluaW5nIENHSS1zdHlsZSBlbnZyaXJvbm1lbnQgdmFyaWFibGVzIGFuZCB0aGUKKyAgICMgaXMgYSBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcgQ0dJLXN0eWxlIGVudmlyb25tZW50IHZhcmlhYmxlcyBhbmQgdGhlCiAgICAjIHNlY29uZCB2YXJpYWJsZSBpcyB0aGUgY2FsbGFibGUgb2JqZWN0IChzZWUgUEVQIDMzMykuCiAgICBkZWYgaGVsbG9fd29ybGRfYXBwKGVudmlyb24sIHN0YXJ0X3Jlc3BvbnNlKToKICAgICAgICBzdGF0dXMgPSAnMjAwIE9LJyAjIEhUVFAgU3RhdHVzCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS94bWwuZG9tLm1pbmlkb20ucnN0IGIvRG9jL2xpYnJhcnkveG1sLmRvbS5taW5pZG9tLnJzdAppbmRleCA4OWM2NjBhLi42NzYyZTkxIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS94bWwuZG9tLm1pbmlkb20ucnN0CisrKyBiL0RvYy9saWJyYXJ5L3htbC5kb20ubWluaWRvbS5yc3QKQEAgLTE1LDcgKzE1LDcgQEAKIE1vZGVsIGludGVyZmFjZSwgd2l0aCBhbiBBUEkgc2ltaWxhciB0byB0aGF0IGluIG90aGVyIGxhbmd1YWdlcy4gIEl0IGlzIGludGVuZGVkCiB0byBiZSBzaW1wbGVyIHRoYW4gdGhlIGZ1bGwgRE9NIGFuZCBhbHNvIHNpZ25pZmljYW50bHkgc21hbGxlci4gIFVzZXJzIHdobyBhcmUKIG5vdCBhbHJlYWR5IHByb2ZpY2llbnQgd2l0aCB0aGUgRE9NIHNob3VsZCBjb25zaWRlciB1c2luZyB0aGUKLTptb2Q6YHhtbC5ldHJlZS5FbGVtZW50VHJlZWAgbW9kdWxlIGZvciB0aGVpciBYTUwgcHJvY2Vzc2luZyBpbnN0ZWFkCis6bW9kOmB4bWwuZXRyZWUuRWxlbWVudFRyZWVgIG1vZHVsZSBmb3IgdGhlaXIgWE1MIHByb2Nlc3NpbmcgaW5zdGVhZC4KIAogCiAuLiB3YXJuaW5nOjoKQEAgLTU0LDcgKzU0LDcgQEAKIAogLi4gZnVuY3Rpb246OiBwYXJzZVN0cmluZyhzdHJpbmcsIHBhcnNlcj1Ob25lKQogCi0gICBSZXR1cm4gYSA6Y2xhc3M6YERvY3VtZW50YCB0aGF0IHJlcHJlc2VudHMgdGhlICpzdHJpbmcqLiBUaGlzIG1ldGhvZCBjcmVhdGVzIGEKKyAgIFJldHVybiBhIDpjbGFzczpgRG9jdW1lbnRgIHRoYXQgcmVwcmVzZW50cyB0aGUgKnN0cmluZyouIFRoaXMgbWV0aG9kIGNyZWF0ZXMgYW4KICAgIDpjbGFzczpgaW8uU3RyaW5nSU9gIG9iamVjdCBmb3IgdGhlIHN0cmluZyBhbmQgcGFzc2VzIHRoYXQgb24gdG8gOmZ1bmM6YHBhcnNlYC4KIAogQm90aCBmdW5jdGlvbnMgcmV0dXJuIGEgOmNsYXNzOmBEb2N1bWVudGAgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgY29udGVudCBvZiB0aGUKQEAgLTI1Miw0ICsyNTIsNCBAQAogICAgIlVURjgiIGlzIG5vdCB2YWxpZCBpbiBhbiBYTUwgZG9jdW1lbnQncyBkZWNsYXJhdGlvbiwgZXZlbiB0aG91Z2gKICAgIFB5dGhvbiBhY2NlcHRzIGl0IGFzIGFuIGVuY29kaW5nIG5hbWUuCiAgICBTZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwNi9SRUMteG1sMTEtMjAwNjA4MTYvI05ULUVuY29kaW5nRGVjbAotICAgYW5kIGh0dHA6Ly93d3cuaWFuYS5vcmcvYXNzaWdubWVudHMvY2hhcmFjdGVyLXNldHNcIC4KKyAgIGFuZCBodHRwOi8vd3d3LmlhbmEub3JnL2Fzc2lnbm1lbnRzL2NoYXJhY3Rlci1zZXRzL2NoYXJhY3Rlci1zZXRzLnhodG1sLgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkveG1sLmRvbS5wdWxsZG9tLnJzdCBiL0RvYy9saWJyYXJ5L3htbC5kb20ucHVsbGRvbS5yc3QKaW5kZXggYTljOWY2Ny4uYTNiOGJjMSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkveG1sLmRvbS5wdWxsZG9tLnJzdAorKysgYi9Eb2MvbGlicmFyeS94bWwuZG9tLnB1bGxkb20ucnN0CkBAIC00Nyw3ICs0Nyw3IEBACiAqIDpkYXRhOmBQUk9DRVNTSU5HX0lOU1RSVUNUSU9OYAogKiA6ZGF0YTpgSUdOT1JBQkxFX1dISVRFU1BBQ0VgCiAKLWBgbm9kZWBgIGlzIGEgb2JqZWN0IG9mIHR5cGUgOmNsYXNzOmB4bWwuZG9tLm1pbmlkb20uRG9jdW1lbnRgLAorYGBub2RlYGAgaXMgYW4gb2JqZWN0IG9mIHR5cGUgOmNsYXNzOmB4bWwuZG9tLm1pbmlkb20uRG9jdW1lbnRgLAogOmNsYXNzOmB4bWwuZG9tLm1pbmlkb20uRWxlbWVudGAgb3IgOmNsYXNzOmB4bWwuZG9tLm1pbmlkb20uVGV4dGAuCiAKIFNpbmNlIHRoZSBkb2N1bWVudCBpcyB0cmVhdGVkIGFzIGEgImZsYXQiIHN0cmVhbSBvZiBldmVudHMsIHRoZSBkb2N1bWVudCAidHJlZSIKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3htbC5kb20ucnN0IGIvRG9jL2xpYnJhcnkveG1sLmRvbS5yc3QKaW5kZXggMTk1MTJlZC4uYTQzMjIwMiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkveG1sLmRvbS5yc3QKKysrIGIvRG9jL2xpYnJhcnkveG1sLmRvbS5yc3QKQEAgLTMwNCw3ICszMDQsNyBAQAogLi4gYXR0cmlidXRlOjogTm9kZS5wcmVmaXgKIAogICAgVGhlIHBhcnQgb2YgdGhlIDphdHRyOmB0YWdOYW1lYCBwcmVjZWRpbmcgdGhlIGNvbG9uIGlmIHRoZXJlIGlzIG9uZSwgZWxzZSB0aGUKLSAgIGVtcHR5IHN0cmluZy4gIFRoZSB2YWx1ZSBpcyBhIHN0cmluZywgb3IgYGBOb25lYGAKKyAgIGVtcHR5IHN0cmluZy4gIFRoZSB2YWx1ZSBpcyBhIHN0cmluZywgb3IgYGBOb25lYGAuCiAKIAogLi4gYXR0cmlidXRlOjogTm9kZS5uYW1lc3BhY2VVUkkKQEAgLTQxMiw3ICs0MTIsNyBAQAogLi4gbWV0aG9kOjogTm9kZUxpc3QuaXRlbShpKQogCiAgICBSZXR1cm4gdGhlICppKid0aCBpdGVtIGZyb20gdGhlIHNlcXVlbmNlLCBpZiB0aGVyZSBpcyBvbmUsIG9yIGBgTm9uZWBgLiAgVGhlCi0gICBpbmRleCAqaSogaXMgbm90IGFsbG93ZWQgdG8gYmUgbGVzcyB0aGVuIHplcm8gb3IgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZQorICAgaW5kZXggKmkqIGlzIG5vdCBhbGxvd2VkIHRvIGJlIGxlc3MgdGhhbiB6ZXJvIG9yIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUKICAgIGxlbmd0aCBvZiB0aGUgc2VxdWVuY2UuCiAKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLnJzdCBiL0RvYy9saWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZS5yc3QKaW5kZXggM2YyZGNiYi4uZGMwMjc0ZSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLnJzdAorKysgYi9Eb2MvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUucnN0CkBAIC0xMDUsNiArMTA1LDU5IEBACiAgICA+Pj4gcm9vdFswXVsxXS50ZXh0CiAgICAnMjAwOCcKIAorCisuLiBub3RlOjoKKworICAgTm90IGFsbCBlbGVtZW50cyBvZiB0aGUgWE1MIGlucHV0IHdpbGwgZW5kIHVwIGFzIGVsZW1lbnRzIG9mIHRoZQorICAgcGFyc2VkIHRyZWUuIEN1cnJlbnRseSwgdGhpcyBtb2R1bGUgc2tpcHMgb3ZlciBhbnkgWE1MIGNvbW1lbnRzLAorICAgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbnMsIGFuZCBkb2N1bWVudCB0eXBlIGRlY2xhcmF0aW9ucyBpbiB0aGUKKyAgIGlucHV0LiBOZXZlcnRoZWxlc3MsIHRyZWVzIGJ1aWx0IHVzaW5nIHRoaXMgbW9kdWxlJ3MgQVBJIHJhdGhlcgorICAgdGhhbiBwYXJzaW5nIGZyb20gWE1MIHRleHQgY2FuIGhhdmUgY29tbWVudHMgYW5kIHByb2Nlc3NpbmcKKyAgIGluc3RydWN0aW9ucyBpbiB0aGVtOyB0aGV5IHdpbGwgYmUgaW5jbHVkZWQgd2hlbiBnZW5lcmF0aW5nIFhNTAorICAgb3V0cHV0LiBBIGRvY3VtZW50IHR5cGUgZGVjbGFyYXRpb24gbWF5IGJlIGFjY2Vzc2VkIGJ5IHBhc3NpbmcgYQorICAgY3VzdG9tIDpjbGFzczpgVHJlZUJ1aWxkZXJgIGluc3RhbmNlIHRvIHRoZSA6Y2xhc3M6YFhNTFBhcnNlcmAKKyAgIGNvbnN0cnVjdG9yLgorCisKKy4uIF9lbGVtZW50dHJlZS1wdWxsLXBhcnNpbmc6CisKK1B1bGwgQVBJIGZvciBub24tYmxvY2tpbmcgcGFyc2luZworXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKK01vc3QgcGFyc2luZyBmdW5jdGlvbnMgcHJvdmlkZWQgYnkgdGhpcyBtb2R1bGUgcmVxdWlyZSB0aGUgd2hvbGUgZG9jdW1lbnQKK3RvIGJlIHJlYWQgYXQgb25jZSBiZWZvcmUgcmV0dXJuaW5nIGFueSByZXN1bHQuICBJdCBpcyBwb3NzaWJsZSB0byB1c2UgYW4KKzpjbGFzczpgWE1MUGFyc2VyYCBhbmQgZmVlZCBkYXRhIGludG8gaXQgaW5jcmVtZW50YWxseSwgYnV0IGl0IGlzIGEgcHVzaCBBUEkgdGhhdAorY2FsbHMgbWV0aG9kcyBvbiBhIGNhbGxiYWNrIHRhcmdldCwgd2hpY2ggaXMgdG9vIGxvdy1sZXZlbCBhbmQgaW5jb252ZW5pZW50IGZvcgorbW9zdCBuZWVkcy4gIFNvbWV0aW1lcyB3aGF0IHRoZSB1c2VyIHJlYWxseSB3YW50cyBpcyB0byBiZSBhYmxlIHRvIHBhcnNlIFhNTAoraW5jcmVtZW50YWxseSwgd2l0aG91dCBibG9ja2luZyBvcGVyYXRpb25zLCB3aGlsZSBlbmpveWluZyB0aGUgY29udmVuaWVuY2Ugb2YKK2Z1bGx5IGNvbnN0cnVjdGVkIDpjbGFzczpgRWxlbWVudGAgb2JqZWN0cy4KKworVGhlIG1vc3QgcG93ZXJmdWwgdG9vbCBmb3IgZG9pbmcgdGhpcyBpcyA6Y2xhc3M6YFhNTFB1bGxQYXJzZXJgLiAgSXQgZG9lcyBub3QKK3JlcXVpcmUgYSBibG9ja2luZyByZWFkIHRvIG9idGFpbiB0aGUgWE1MIGRhdGEsIGFuZCBpcyBpbnN0ZWFkIGZlZCB3aXRoIGRhdGEKK2luY3JlbWVudGFsbHkgd2l0aCA6bWV0aDpgWE1MUHVsbFBhcnNlci5mZWVkYCBjYWxscy4gIFRvIGdldCB0aGUgcGFyc2VkIFhNTAorZWxlbWVudHMsIGNhbGwgOm1ldGg6YFhNTFB1bGxQYXJzZXIucmVhZF9ldmVudHNgLiAgSGVyZSBpcyBhbiBleGFtcGxlOjoKKworICAgPj4+IHBhcnNlciA9IEVULlhNTFB1bGxQYXJzZXIoWydzdGFydCcsICdlbmQnXSkKKyAgID4+PiBwYXJzZXIuZmVlZCgnPG15dGFnPnNvbWV0ZXh0JykKKyAgID4+PiBsaXN0KHBhcnNlci5yZWFkX2V2ZW50cygpKQorICAgWygnc3RhcnQnLCA8RWxlbWVudCAnbXl0YWcnIGF0IDB4N2ZhNjZkYjJiZTU4PildCisgICA+Pj4gcGFyc2VyLmZlZWQoJyBtb3JlIHRleHQ8L215dGFnPicpCisgICA+Pj4gZm9yIGV2ZW50LCBlbGVtIGluIHBhcnNlci5yZWFkX2V2ZW50cygpOgorICAgLi4uICAgcHJpbnQoZXZlbnQpCisgICAuLi4gICBwcmludChlbGVtLnRhZywgJ3RleHQ9JywgZWxlbS50ZXh0KQorICAgLi4uCisgICBlbmQKKworVGhlIG9idmlvdXMgdXNlIGNhc2UgaXMgYXBwbGljYXRpb25zIHRoYXQgb3BlcmF0ZSBpbiBhIG5vbi1ibG9ja2luZyBmYXNoaW9uCit3aGVyZSB0aGUgWE1MIGRhdGEgaXMgYmVpbmcgcmVjZWl2ZWQgZnJvbSBhIHNvY2tldCBvciByZWFkIGluY3JlbWVudGFsbHkgZnJvbQorc29tZSBzdG9yYWdlIGRldmljZS4gIEluIHN1Y2ggY2FzZXMsIGJsb2NraW5nIHJlYWRzIGFyZSB1bmFjY2VwdGFibGUuCisKK0JlY2F1c2UgaXQncyBzbyBmbGV4aWJsZSwgOmNsYXNzOmBYTUxQdWxsUGFyc2VyYCBjYW4gYmUgaW5jb252ZW5pZW50IHRvIHVzZSBmb3IKK3NpbXBsZXIgdXNlLWNhc2VzLiAgSWYgeW91IGRvbid0IG1pbmQgeW91ciBhcHBsaWNhdGlvbiBibG9ja2luZyBvbiByZWFkaW5nIFhNTAorZGF0YSBidXQgd291bGQgc3RpbGwgbGlrZSB0byBoYXZlIGluY3JlbWVudGFsIHBhcnNpbmcgY2FwYWJpbGl0aWVzLCB0YWtlIGEgbG9vaworYXQgOmZ1bmM6YGl0ZXJwYXJzZWAuICBJdCBjYW4gYmUgdXNlZnVsIHdoZW4geW91J3JlIHJlYWRpbmcgYSBsYXJnZSBYTUwgZG9jdW1lbnQKK2FuZCBkb24ndCB3YW50IHRvIGhvbGQgaXQgd2hvbGx5IGluIG1lbW9yeS4KKwogRmluZGluZyBpbnRlcmVzdGluZyBlbGVtZW50cwogXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgogCkBAIC0yMzEsNiArMjg0LDcyIEBACiAgICA+Pj4gRVQuZHVtcChhKQogICAgPGE+PGIgLz48Yz48ZCAvPjwvYz48L2E+CiAKK1BhcnNpbmcgWE1MIHdpdGggTmFtZXNwYWNlcworXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKK0lmIHRoZSBYTUwgaW5wdXQgaGFzIGBuYW1lc3BhY2VzCis8aHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvWE1MX25hbWVzcGFjZT5gX18sIHRhZ3MgYW5kIGF0dHJpYnV0ZXMKK3dpdGggcHJlZml4ZXMgaW4gdGhlIGZvcm0gYGBwcmVmaXg6c29tZXRhZ2BgIGdldCBleHBhbmRlZCB0bworYGB7dXJpfXNvbWV0YWdgYCB3aGVyZSB0aGUgKnByZWZpeCogaXMgcmVwbGFjZWQgYnkgdGhlIGZ1bGwgKlVSSSouCitBbHNvLCBpZiB0aGVyZSBpcyBhIGBkZWZhdWx0IG5hbWVzcGFjZQorPGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDYvUkVDLXhtbC1uYW1lcy0yMDA2MDgxNi8jZGVmYXVsdGluZz5gX18sCit0aGF0IGZ1bGwgVVJJIGdldHMgcHJlcGVuZGVkIHRvIGFsbCBvZiB0aGUgbm9uLXByZWZpeGVkIHRhZ3MuCisKK0hlcmUgaXMgYW4gWE1MIGV4YW1wbGUgdGhhdCBpbmNvcnBvcmF0ZXMgdHdvIG5hbWVzcGFjZXMsIG9uZSB3aXRoIHRoZQorcHJlZml4ICJmaWN0aW9uYWwiIGFuZCB0aGUgb3RoZXIgc2VydmluZyBhcyB0aGUgZGVmYXVsdCBuYW1lc3BhY2U6CisKKy4uIGNvZGUtYmxvY2s6OiB4bWwKKworICAgIDw/eG1sIHZlcnNpb249IjEuMCI/PgorICAgIDxhY3RvcnMgeG1sbnM6ZmljdGlvbmFsPSJodHRwOi8vY2hhcmFjdGVycy5leGFtcGxlLmNvbSIKKyAgICAgICAgICAgIHhtbG5zPSJodHRwOi8vcGVvcGxlLmV4YW1wbGUuY29tIj4KKyAgICAgICAgPGFjdG9yPgorICAgICAgICAgICAgPG5hbWU+Sm9obiBDbGVlc2U8L25hbWU+CisgICAgICAgICAgICA8ZmljdGlvbmFsOmNoYXJhY3Rlcj5MYW5jZWxvdDwvZmljdGlvbmFsOmNoYXJhY3Rlcj4KKyAgICAgICAgICAgIDxmaWN0aW9uYWw6Y2hhcmFjdGVyPkFyY2hpZSBMZWFjaDwvZmljdGlvbmFsOmNoYXJhY3Rlcj4KKyAgICAgICAgPC9hY3Rvcj4KKyAgICAgICAgPGFjdG9yPgorICAgICAgICAgICAgPG5hbWU+RXJpYyBJZGxlPC9uYW1lPgorICAgICAgICAgICAgPGZpY3Rpb25hbDpjaGFyYWN0ZXI+U2lyIFJvYmluPC9maWN0aW9uYWw6Y2hhcmFjdGVyPgorICAgICAgICAgICAgPGZpY3Rpb25hbDpjaGFyYWN0ZXI+R3VudGhlcjwvZmljdGlvbmFsOmNoYXJhY3Rlcj4KKyAgICAgICAgICAgIDxmaWN0aW9uYWw6Y2hhcmFjdGVyPkNvbW1hbmRlciBDbGVtZW50PC9maWN0aW9uYWw6Y2hhcmFjdGVyPgorICAgICAgICA8L2FjdG9yPgorICAgIDwvYWN0b3JzPgorCitPbmUgd2F5IHRvIHNlYXJjaCBhbmQgZXhwbG9yZSB0aGlzIFhNTCBleGFtcGxlIGlzIHRvIG1hbnVhbGx5IGFkZCB0aGUKK1VSSSB0byBldmVyeSB0YWcgb3IgYXR0cmlidXRlIGluIHRoZSB4cGF0aCBvZiBhCis6bWV0aDpgfkVsZW1lbnQuZmluZGAgb3IgOm1ldGg6YH5FbGVtZW50LmZpbmRhbGxgOjoKKworICAgIHJvb3QgPSBmcm9tc3RyaW5nKHhtbF90ZXh0KQorICAgIGZvciBhY3RvciBpbiByb290LmZpbmRhbGwoJ3todHRwOi8vcGVvcGxlLmV4YW1wbGUuY29tfWFjdG9yJyk6CisgICAgICAgIG5hbWUgPSBhY3Rvci5maW5kKCd7aHR0cDovL3Blb3BsZS5leGFtcGxlLmNvbX1uYW1lJykKKyAgICAgICAgcHJpbnQobmFtZS50ZXh0KQorICAgICAgICBmb3IgY2hhciBpbiBhY3Rvci5maW5kYWxsKCd7aHR0cDovL2NoYXJhY3RlcnMuZXhhbXBsZS5jb219Y2hhcmFjdGVyJyk6CisgICAgICAgICAgICBwcmludCgnIHwtLT4nLCBjaGFyLnRleHQpCisKK0EgYmV0dGVyIHdheSB0byBzZWFyY2ggdGhlIG5hbWVzcGFjZWQgWE1MIGV4YW1wbGUgaXMgdG8gY3JlYXRlIGEKK2RpY3Rpb25hcnkgd2l0aCB5b3VyIG93biBwcmVmaXhlcyBhbmQgdXNlIHRob3NlIGluIHRoZSBzZWFyY2ggZnVuY3Rpb25zOjoKKworICAgIG5zID0geydyZWFsX3BlcnNvbic6ICdodHRwOi8vcGVvcGxlLmV4YW1wbGUuY29tJywKKyAgICAgICAgICAncm9sZSc6ICdodHRwOi8vY2hhcmFjdGVycy5leGFtcGxlLmNvbSd9CisKKyAgICBmb3IgYWN0b3IgaW4gcm9vdC5maW5kYWxsKCdyZWFsX3BlcnNvbjphY3RvcicsIG5zKToKKyAgICAgICAgbmFtZSA9IGFjdG9yLmZpbmQoJ3JlYWxfcGVyc29uOm5hbWUnLCBucykKKyAgICAgICAgcHJpbnQobmFtZS50ZXh0KQorICAgICAgICBmb3IgY2hhciBpbiBhY3Rvci5maW5kYWxsKCdyb2xlOmNoYXJhY3RlcicsIG5zKToKKyAgICAgICAgICAgIHByaW50KCcgfC0tPicsIGNoYXIudGV4dCkKKworVGhlc2UgdHdvIGFwcHJvYWNoZXMgYm90aCBvdXRwdXQ6OgorCisgICAgSm9obiBDbGVlc2UKKyAgICAgfC0tPiBMYW5jZWxvdAorICAgICB8LS0+IEFyY2hpZSBMZWFjaAorICAgIEVyaWMgSWRsZQorICAgICB8LS0+IFNpciBSb2JpbgorICAgICB8LS0+IEd1bnRoZXIKKyAgICAgfC0tPiBDb21tYW5kZXIgQ2xlbWVudAorCisKIEFkZGl0aW9uYWwgcmVzb3VyY2VzCiBeXl5eXl5eXl5eXl5eXl5eXl5eXgogCkBAIC0yODUsNyArNDA0LDcgQEAKICs9PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCiB8IGBgdGFnYGAgICAgICAgICAgICAgICB8IFNlbGVjdHMgYWxsIGNoaWxkIGVsZW1lbnRzIHdpdGggdGhlIGdpdmVuIHRhZy4gICAgICAgfAogfCAgICAgICAgICAgICAgICAgICAgICAgfCBGb3IgZXhhbXBsZSwgYGBzcGFtYGAgc2VsZWN0cyBhbGwgY2hpbGQgZWxlbWVudHMgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgIHwgbmFtZWQgYGBzcGFtYGAsIGBgc3BhbS9lZ2dgYCBzZWxlY3RzIGFsbCAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICB8IG5hbWVkIGBgc3BhbWBgLCBhbmQgYGBzcGFtL2VnZ2BgIHNlbGVjdHMgYWxsICAgICAgICAgfAogfCAgICAgICAgICAgICAgICAgICAgICAgfCBncmFuZGNoaWxkcmVuIG5hbWVkIGBgZWdnYGAgaW4gYWxsIGNoaWxkcmVuIG5hbWVkICAgIHwKIHwgICAgICAgICAgICAgICAgICAgICAgIHwgYGBzcGFtYGAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwpAQCAtMzEzLDYgKzQzMiwxMCBAQAogfCBgYFt0YWddYGAgICAgICAgICAgICAgfCBTZWxlY3RzIGFsbCBlbGVtZW50cyB0aGF0IGhhdmUgYSBjaGlsZCBuYW1lZCAgICAgICAgIHwKIHwgICAgICAgICAgICAgICAgICAgICAgIHwgYGB0YWdgYC4gIE9ubHkgaW1tZWRpYXRlIGNoaWxkcmVuIGFyZSBzdXBwb3J0ZWQuICAgICB8CiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBgYFt0YWc9J3RleHQnXWBgICAgICAgfCBTZWxlY3RzIGFsbCBlbGVtZW50cyB0aGF0IGhhdmUgYSBjaGlsZCBuYW1lZCAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgIHwgYGB0YWdgYCB3aG9zZSBjb21wbGV0ZSB0ZXh0IGNvbnRlbnQsIGluY2x1ZGluZyAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICB8IGRlc2NlbmRhbnRzLCBlcXVhbHMgdGhlIGdpdmVuIGBgdGV4dGBgLiAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIHwgYGBbcG9zaXRpb25dYGAgICAgICAgIHwgU2VsZWN0cyBhbGwgZWxlbWVudHMgdGhhdCBhcmUgbG9jYXRlZCBhdCB0aGUgZ2l2ZW4gICB8CiB8ICAgICAgICAgICAgICAgICAgICAgICB8IHBvc2l0aW9uLiAgVGhlIHBvc2l0aW9uIGNhbiBiZSBlaXRoZXIgYW4gaW50ZWdlciAgICAgfAogfCAgICAgICAgICAgICAgICAgICAgICAgfCAoMSBpcyB0aGUgZmlyc3QgcG9zaXRpb24pLCB0aGUgZXhwcmVzc2lvbiBgYGxhc3QoKWBgIHwKQEAgLTM0MSw2ICs0NjQsMTAgQEAKICAgIHN0cmluZyBjb250YWluaW5nIHRoZSBjb21tZW50IHN0cmluZy4gIFJldHVybnMgYW4gZWxlbWVudCBpbnN0YW5jZQogICAgcmVwcmVzZW50aW5nIGEgY29tbWVudC4KIAorICAgTm90ZSB0aGF0IDpjbGFzczpgWE1MUGFyc2VyYCBza2lwcyBvdmVyIGNvbW1lbnRzIGluIHRoZSBpbnB1dAorICAgaW5zdGVhZCBvZiBjcmVhdGluZyBjb21tZW50IG9iamVjdHMgZm9yIHRoZW0uIEFuIDpjbGFzczpgRWxlbWVudFRyZWVgIHdpbGwKKyAgIG9ubHkgY29udGFpbiBjb21tZW50IG5vZGVzIGlmIHRoZXkgaGF2ZSBiZWVuIGluc2VydGVkIGludG8gdG8KKyAgIHRoZSB0cmVlIHVzaW5nIG9uZSBvZiB0aGUgOmNsYXNzOmBFbGVtZW50YCBtZXRob2RzLgogCiAuLiBmdW5jdGlvbjo6IGR1bXAoZWxlbSkKIApAQCAtMzc5LDI1ICs1MDYsMzIgQEAKIAogICAgUGFyc2VzIGFuIFhNTCBzZWN0aW9uIGludG8gYW4gZWxlbWVudCB0cmVlIGluY3JlbWVudGFsbHksIGFuZCByZXBvcnRzIHdoYXQncwogICAgZ29pbmcgb24gdG8gdGhlIHVzZXIuICAqc291cmNlKiBpcyBhIGZpbGVuYW1lIG9yIDp0ZXJtOmBmaWxlIG9iamVjdGAKLSAgIGNvbnRhaW5pbmcgWE1MIGRhdGEuICAqZXZlbnRzKiBpcyBhIHR1cGxlIG9mIGV2ZW50cyB0byByZXBvcnQgYmFjay4gIFRoZQotICAgc3VwcG9ydGVkIGV2ZW50cyBhcmUgdGhlIHN0cmluZ3MgYGAic3RhcnQiYGAsIGBgImVuZCJgYCwgYGAic3RhcnQtbnMiYGAKLSAgIGFuZCBgYCJlbmQtbnMiYGAgKHRoZSAibnMiIGV2ZW50cyBhcmUgdXNlZCB0byBnZXQgZGV0YWlsZWQgbmFtZXNwYWNlCisgICBjb250YWluaW5nIFhNTCBkYXRhLiAgKmV2ZW50cyogaXMgYSBzZXF1ZW5jZSBvZiBldmVudHMgdG8gcmVwb3J0IGJhY2suICBUaGUKKyAgIHN1cHBvcnRlZCBldmVudHMgYXJlIHRoZSBzdHJpbmdzIGBgInN0YXJ0ImBgLCBgYCJlbmQiYGAsIGBgInN0YXJ0LW5zImBgIGFuZAorICAgYGAiZW5kLW5zImBgICh0aGUgIm5zIiBldmVudHMgYXJlIHVzZWQgdG8gZ2V0IGRldGFpbGVkIG5hbWVzcGFjZQogICAgaW5mb3JtYXRpb24pLiAgSWYgKmV2ZW50cyogaXMgb21pdHRlZCwgb25seSBgYCJlbmQiYGAgZXZlbnRzIGFyZSByZXBvcnRlZC4KICAgICpwYXJzZXIqIGlzIGFuIG9wdGlvbmFsIHBhcnNlciBpbnN0YW5jZS4gIElmIG5vdCBnaXZlbiwgdGhlIHN0YW5kYXJkCi0gICA6Y2xhc3M6YFhNTFBhcnNlcmAgcGFyc2VyIGlzIHVzZWQuICAqcGFyc2VyKiBjYW4gb25seSB1c2UgdGhlIGRlZmF1bHQKLSAgIDpjbGFzczpgVHJlZUJ1aWxkZXJgIGFzIGEgdGFyZ2V0LiAgUmV0dXJucyBhbiA6dGVybTpgaXRlcmF0b3JgIHByb3ZpZGluZwotICAgYGAoZXZlbnQsIGVsZW0pYGAgcGFpcnMuCisgICA6Y2xhc3M6YFhNTFBhcnNlcmAgcGFyc2VyIGlzIHVzZWQuICAqcGFyc2VyKiBtdXN0IGJlIGEgc3ViY2xhc3Mgb2YKKyAgIDpjbGFzczpgWE1MUGFyc2VyYCBhbmQgY2FuIG9ubHkgdXNlIHRoZSBkZWZhdWx0IDpjbGFzczpgVHJlZUJ1aWxkZXJgIGFzIGEKKyAgIHRhcmdldC4gIFJldHVybnMgYW4gOnRlcm06YGl0ZXJhdG9yYCBwcm92aWRpbmcgYGAoZXZlbnQsIGVsZW0pYGAgcGFpcnMuCisKKyAgIE5vdGUgdGhhdCB3aGlsZSA6ZnVuYzpgaXRlcnBhcnNlYCBidWlsZHMgdGhlIHRyZWUgaW5jcmVtZW50YWxseSwgaXQgaXNzdWVzCisgICBibG9ja2luZyByZWFkcyBvbiAqc291cmNlKiAob3IgdGhlIGZpbGUgaXQgbmFtZXMpLiAgQXMgc3VjaCwgaXQncyB1bnN1aXRhYmxlCisgICBmb3IgYXBwbGljYXRpb25zIHdoZXJlIGJsb2NraW5nIHJlYWRzIGNhbid0IGJlIG1hZGUuICBGb3IgZnVsbHkgbm9uLWJsb2NraW5nCisgICBwYXJzaW5nLCBzZWUgOmNsYXNzOmBYTUxQdWxsUGFyc2VyYC4KIAogICAgLi4gbm90ZTo6CiAKLSAgICAgIDpmdW5jOmBpdGVycGFyc2VgIG9ubHkgZ3VhcmFudGVlcyB0aGF0IGl0IGhhcyBzZWVuIHRoZSAiPiIKLSAgICAgIGNoYXJhY3RlciBvZiBhIHN0YXJ0aW5nIHRhZyB3aGVuIGl0IGVtaXRzIGEgInN0YXJ0IiBldmVudCwgc28gdGhlCi0gICAgICBhdHRyaWJ1dGVzIGFyZSBkZWZpbmVkLCBidXQgdGhlIGNvbnRlbnRzIG9mIHRoZSB0ZXh0IGFuZCB0YWlsIGF0dHJpYnV0ZXMKLSAgICAgIGFyZSB1bmRlZmluZWQgYXQgdGhhdCBwb2ludC4gIFRoZSBzYW1lIGFwcGxpZXMgdG8gdGhlIGVsZW1lbnQgY2hpbGRyZW47Ci0gICAgICB0aGV5IG1heSBvciBtYXkgbm90IGJlIHByZXNlbnQuCisgICAgICA6ZnVuYzpgaXRlcnBhcnNlYCBvbmx5IGd1YXJhbnRlZXMgdGhhdCBpdCBoYXMgc2VlbiB0aGUgIj4iIGNoYXJhY3RlciBvZiBhCisgICAgICBzdGFydGluZyB0YWcgd2hlbiBpdCBlbWl0cyBhICJzdGFydCIgZXZlbnQsIHNvIHRoZSBhdHRyaWJ1dGVzIGFyZSBkZWZpbmVkLAorICAgICAgYnV0IHRoZSBjb250ZW50cyBvZiB0aGUgdGV4dCBhbmQgdGFpbCBhdHRyaWJ1dGVzIGFyZSB1bmRlZmluZWQgYXQgdGhhdAorICAgICAgcG9pbnQuICBUaGUgc2FtZSBhcHBsaWVzIHRvIHRoZSBlbGVtZW50IGNoaWxkcmVuOyB0aGV5IG1heSBvciBtYXkgbm90IGJlCisgICAgICBwcmVzZW50LgogCiAgICAgICBJZiB5b3UgbmVlZCBhIGZ1bGx5IHBvcHVsYXRlZCBlbGVtZW50LCBsb29rIGZvciAiZW5kIiBldmVudHMgaW5zdGVhZC4KIAorICAgLi4gZGVwcmVjYXRlZDo6IDMuNAorICAgICAgVGhlICpwYXJzZXIqIGFyZ3VtZW50LgogCiAuLiBmdW5jdGlvbjo6IHBhcnNlKHNvdXJjZSwgcGFyc2VyPU5vbmUpCiAKQEAgLTQxNCw2ICs1NDgsMTEgQEAKICAgIGNvbnRhaW5pbmcgdGhlIFBJIHRhcmdldC4gICp0ZXh0KiBpcyBhIHN0cmluZyBjb250YWluaW5nIHRoZSBQSSBjb250ZW50cywgaWYKICAgIGdpdmVuLiAgUmV0dXJucyBhbiBlbGVtZW50IGluc3RhbmNlLCByZXByZXNlbnRpbmcgYSBwcm9jZXNzaW5nIGluc3RydWN0aW9uLgogCisgICBOb3RlIHRoYXQgOmNsYXNzOmBYTUxQYXJzZXJgIHNraXBzIG92ZXIgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbnMKKyAgIGluIHRoZSBpbnB1dCBpbnN0ZWFkIG9mIGNyZWF0aW5nIGNvbW1lbnQgb2JqZWN0cyBmb3IgdGhlbS4gQW4KKyAgIDpjbGFzczpgRWxlbWVudFRyZWVgIHdpbGwgb25seSBjb250YWluIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24gbm9kZXMgaWYKKyAgIHRoZXkgaGF2ZSBiZWVuIGluc2VydGVkIGludG8gdG8gdGhlIHRyZWUgdXNpbmcgb25lIG9mIHRoZQorICAgOmNsYXNzOmBFbGVtZW50YCBtZXRob2RzLgogCiAuLiBmdW5jdGlvbjo6IHJlZ2lzdGVyX25hbWVzcGFjZShwcmVmaXgsIHVyaSkKIApAQCAtNDM4LDI5ICs1NzcsMzkgQEAKICAgIGFyZ3VtZW50cy4gIFJldHVybnMgYW4gZWxlbWVudCBpbnN0YW5jZS4KIAogCi0uLiBmdW5jdGlvbjo6IHRvc3RyaW5nKGVsZW1lbnQsIGVuY29kaW5nPSJ1cy1hc2NpaSIsIG1ldGhvZD0ieG1sIikKKy4uIGZ1bmN0aW9uOjogdG9zdHJpbmcoZWxlbWVudCwgZW5jb2Rpbmc9InVzLWFzY2lpIiwgbWV0aG9kPSJ4bWwiLCAqLCBcCisgICAgICAgICAgICAgICAgICAgICAgIHNob3J0X2VtcHR5X2VsZW1lbnRzPVRydWUpCiAKICAgIEdlbmVyYXRlcyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhbiBYTUwgZWxlbWVudCwgaW5jbHVkaW5nIGFsbAogICAgc3ViZWxlbWVudHMuICAqZWxlbWVudCogaXMgYW4gOmNsYXNzOmBFbGVtZW50YCBpbnN0YW5jZS4gICplbmNvZGluZyogWzFdXyBpcwogICAgdGhlIG91dHB1dCBlbmNvZGluZyAoZGVmYXVsdCBpcyBVUy1BU0NJSSkuICBVc2UgYGBlbmNvZGluZz0idW5pY29kZSJgYCB0bwogICAgZ2VuZXJhdGUgYSBVbmljb2RlIHN0cmluZyAob3RoZXJ3aXNlLCBhIGJ5dGVzdHJpbmcgaXMgZ2VuZXJhdGVkKS4gICptZXRob2QqCiAgICBpcyBlaXRoZXIgYGAieG1sImBgLCBgYCJodG1sImBgIG9yIGBgInRleHQiYGAgKGRlZmF1bHQgaXMgYGAieG1sImBgKS4KKyAgICpzaG9ydF9lbXB0eV9lbGVtZW50cyogaGFzIHRoZSBzYW1lIG1lYW5pbmcgYXMgaW4gOm1ldGg6YEVsZW1lbnRUcmVlLndyaXRlYC4KICAgIFJldHVybnMgYW4gKG9wdGlvbmFsbHkpIGVuY29kZWQgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFhNTCBkYXRhLgogCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKyAgICAgIFRoZSAqc2hvcnRfZW1wdHlfZWxlbWVudHMqIHBhcmFtZXRlci4KIAotLi4gZnVuY3Rpb246OiB0b3N0cmluZ2xpc3QoZWxlbWVudCwgZW5jb2Rpbmc9InVzLWFzY2lpIiwgbWV0aG9kPSJ4bWwiKQorCisuLiBmdW5jdGlvbjo6IHRvc3RyaW5nbGlzdChlbGVtZW50LCBlbmNvZGluZz0idXMtYXNjaWkiLCBtZXRob2Q9InhtbCIsICosIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0X2VtcHR5X2VsZW1lbnRzPVRydWUpCiAKICAgIEdlbmVyYXRlcyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhbiBYTUwgZWxlbWVudCwgaW5jbHVkaW5nIGFsbAogICAgc3ViZWxlbWVudHMuICAqZWxlbWVudCogaXMgYW4gOmNsYXNzOmBFbGVtZW50YCBpbnN0YW5jZS4gICplbmNvZGluZyogWzFdXyBpcwogICAgdGhlIG91dHB1dCBlbmNvZGluZyAoZGVmYXVsdCBpcyBVUy1BU0NJSSkuICBVc2UgYGBlbmNvZGluZz0idW5pY29kZSJgYCB0bwogICAgZ2VuZXJhdGUgYSBVbmljb2RlIHN0cmluZyAob3RoZXJ3aXNlLCBhIGJ5dGVzdHJpbmcgaXMgZ2VuZXJhdGVkKS4gICptZXRob2QqCiAgICBpcyBlaXRoZXIgYGAieG1sImBgLCBgYCJodG1sImBgIG9yIGBgInRleHQiYGAgKGRlZmF1bHQgaXMgYGAieG1sImBgKS4KKyAgICpzaG9ydF9lbXB0eV9lbGVtZW50cyogaGFzIHRoZSBzYW1lIG1lYW5pbmcgYXMgaW4gOm1ldGg6YEVsZW1lbnRUcmVlLndyaXRlYC4KICAgIFJldHVybnMgYSBsaXN0IG9mIChvcHRpb25hbGx5KSBlbmNvZGVkIHN0cmluZ3MgY29udGFpbmluZyB0aGUgWE1MIGRhdGEuCiAgICBJdCBkb2VzIG5vdCBndWFyYW50ZWUgYW55IHNwZWNpZmljIHNlcXVlbmNlLCBleGNlcHQgdGhhdAogICAgYGBiIiIuam9pbih0b3N0cmluZ2xpc3QoZWxlbWVudCkpID09IHRvc3RyaW5nKGVsZW1lbnQpYGAuCiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgogCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKyAgICAgIFRoZSAqc2hvcnRfZW1wdHlfZWxlbWVudHMqIHBhcmFtZXRlci4KKwogCiAuLiBmdW5jdGlvbjo6IFhNTCh0ZXh0LCBwYXJzZXI9Tm9uZSkKIApAQCAtNTAyLDIxICs2NTEsMjkgQEAKIAogCiAgICAuLiBhdHRyaWJ1dGU6OiB0ZXh0CisgICAgICAgICAgICAgICAgICB0YWlsCiAKLSAgICAgIFRoZSAqdGV4dCogYXR0cmlidXRlIGNhbiBiZSB1c2VkIHRvIGhvbGQgYWRkaXRpb25hbCBkYXRhIGFzc29jaWF0ZWQgd2l0aAotICAgICAgdGhlIGVsZW1lbnQuICBBcyB0aGUgbmFtZSBpbXBsaWVzIHRoaXMgYXR0cmlidXRlIGlzIHVzdWFsbHkgYSBzdHJpbmcgYnV0Ci0gICAgICBtYXkgYmUgYW55IGFwcGxpY2F0aW9uLXNwZWNpZmljIG9iamVjdC4gIElmIHRoZSBlbGVtZW50IGlzIGNyZWF0ZWQgZnJvbQotICAgICAgYW4gWE1MIGZpbGUgdGhlIGF0dHJpYnV0ZSB3aWxsIGNvbnRhaW4gYW55IHRleHQgZm91bmQgYmV0d2VlbiB0aGUgZWxlbWVudAotICAgICAgdGFncy4KKyAgICAgIFRoZXNlIGF0dHJpYnV0ZXMgY2FuIGJlIHVzZWQgdG8gaG9sZCBhZGRpdGlvbmFsIGRhdGEgYXNzb2NpYXRlZCB3aXRoCisgICAgICB0aGUgZWxlbWVudC4gIFRoZWlyIHZhbHVlcyBhcmUgdXN1YWxseSBzdHJpbmdzIGJ1dCBtYXkgYmUgYW55CisgICAgICBhcHBsaWNhdGlvbi1zcGVjaWZpYyBvYmplY3QuICBJZiB0aGUgZWxlbWVudCBpcyBjcmVhdGVkIGZyb20KKyAgICAgIGFuIFhNTCBmaWxlLCB0aGUgKnRleHQqIGF0dHJpYnV0ZSBob2xkcyBlaXRoZXIgdGhlIHRleHQgYmV0d2VlbgorICAgICAgdGhlIGVsZW1lbnQncyBzdGFydCB0YWcgYW5kIGl0cyBmaXJzdCBjaGlsZCBvciBlbmQgdGFnLCBvciBgYE5vbmVgYCwgYW5kCisgICAgICB0aGUgKnRhaWwqIGF0dHJpYnV0ZSBob2xkcyBlaXRoZXIgdGhlIHRleHQgYmV0d2VlbiB0aGUgZWxlbWVudCdzCisgICAgICBlbmQgdGFnIGFuZCB0aGUgbmV4dCB0YWcsIG9yIGBgTm9uZWBgLiAgRm9yIHRoZSBYTUwgZGF0YQogCisgICAgICAuLiBjb2RlLWJsb2NrOjogeG1sCiAKLSAgIC4uIGF0dHJpYnV0ZTo6IHRhaWwKKyAgICAgICAgIDxhPjxiPjE8Yz4yPGQvPjM8L2M+PC9iPjQ8L2E+CiAKLSAgICAgIFRoZSAqdGFpbCogYXR0cmlidXRlIGNhbiBiZSB1c2VkIHRvIGhvbGQgYWRkaXRpb25hbCBkYXRhIGFzc29jaWF0ZWQgd2l0aAotICAgICAgdGhlIGVsZW1lbnQuICBUaGlzIGF0dHJpYnV0ZSBpcyB1c3VhbGx5IGEgc3RyaW5nIGJ1dCBtYXkgYmUgYW55Ci0gICAgICBhcHBsaWNhdGlvbi1zcGVjaWZpYyBvYmplY3QuICBJZiB0aGUgZWxlbWVudCBpcyBjcmVhdGVkIGZyb20gYW4gWE1MIGZpbGUKLSAgICAgIHRoZSBhdHRyaWJ1dGUgd2lsbCBjb250YWluIGFueSB0ZXh0IGZvdW5kIGFmdGVyIHRoZSBlbGVtZW50J3MgZW5kIHRhZyBhbmQKLSAgICAgIGJlZm9yZSB0aGUgbmV4dCB0YWcuCisgICAgICB0aGUgKmEqIGVsZW1lbnQgaGFzIGBgTm9uZWBgIGZvciBib3RoICp0ZXh0KiBhbmQgKnRhaWwqIGF0dHJpYnV0ZXMsCisgICAgICB0aGUgKmIqIGVsZW1lbnQgaGFzICp0ZXh0KiBgYCIxImBgIGFuZCAqdGFpbCogYGAiNCJgYCwKKyAgICAgIHRoZSAqYyogZWxlbWVudCBoYXMgKnRleHQqIGBgIjIiYGAgYW5kICp0YWlsKiBgYE5vbmVgYCwKKyAgICAgIGFuZCB0aGUgKmQqIGVsZW1lbnQgaGFzICp0ZXh0KiBgYE5vbmVgYCBhbmQgKnRhaWwqIGBgIjMiYGAuCisKKyAgICAgIFRvIGNvbGxlY3QgdGhlIGlubmVyIHRleHQgb2YgYW4gZWxlbWVudCwgc2VlIDptZXRoOmBpdGVydGV4dGAsIGZvcgorICAgICAgZXhhbXBsZSBgYCIiLmpvaW4oZWxlbWVudC5pdGVydGV4dCgpKWBgLgorCisgICAgICBBcHBsaWNhdGlvbnMgbWF5IHN0b3JlIGFyYml0cmFyeSBvYmplY3RzIGluIHRoZXNlIGF0dHJpYnV0ZXMuCiAKIAogICAgLi4gYXR0cmlidXRlOjogYXR0cmliCkBAIC03MzQsNyArODkxLDcgQEAKIAogICAgICAgQ3JlYXRlcyBhbmQgcmV0dXJucyBhIHRyZWUgaXRlcmF0b3IgZm9yIHRoZSByb290IGVsZW1lbnQuICBUaGUgaXRlcmF0b3IKICAgICAgIGxvb3BzIG92ZXIgYWxsIGVsZW1lbnRzIGluIHRoaXMgdHJlZSwgaW4gc2VjdGlvbiBvcmRlci4gICp0YWcqIGlzIHRoZSB0YWcKLSAgICAgIHRvIGxvb2sgZm9yIChkZWZhdWx0IGlzIHRvIHJldHVybiBhbGwgZWxlbWVudHMpCisgICAgICB0byBsb29rIGZvciAoZGVmYXVsdCBpcyB0byByZXR1cm4gYWxsIGVsZW1lbnRzKS4KIAogCiAgICAuLiBtZXRob2Q6OiBpdGVyZmluZChtYXRjaCwgbmFtZXNwYWNlcz1Ob25lKQpAQCAtNzUzLDcgKzkxMCw4IEBACiAKIAogICAgLi4gbWV0aG9kOjogd3JpdGUoZmlsZSwgZW5jb2Rpbmc9InVzLWFzY2lpIiwgeG1sX2RlY2xhcmF0aW9uPU5vbmUsIFwKLSAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRfbmFtZXNwYWNlPU5vbmUsIG1ldGhvZD0ieG1sIikKKyAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRfbmFtZXNwYWNlPU5vbmUsIG1ldGhvZD0ieG1sIiwgKiwgXAorICAgICAgICAgICAgICAgICAgICAgc2hvcnRfZW1wdHlfZWxlbWVudHM9VHJ1ZSkKIAogICAgICAgV3JpdGVzIHRoZSBlbGVtZW50IHRyZWUgdG8gYSBmaWxlLCBhcyBYTUwuICAqZmlsZSogaXMgYSBmaWxlIG5hbWUsIG9yIGEKICAgICAgIDp0ZXJtOmBmaWxlIG9iamVjdGAgb3BlbmVkIGZvciB3cml0aW5nLiAgKmVuY29kaW5nKiBbMV1fIGlzIHRoZSBvdXRwdXQKQEAgLTc2NCw2ICs5MjIsMTAgQEAKICAgICAgICpkZWZhdWx0X25hbWVzcGFjZSogc2V0cyB0aGUgZGVmYXVsdCBYTUwgbmFtZXNwYWNlIChmb3IgInhtbG5zIikuCiAgICAgICAqbWV0aG9kKiBpcyBlaXRoZXIgYGAieG1sImBgLCBgYCJodG1sImBgIG9yIGBgInRleHQiYGAgKGRlZmF1bHQgaXMKICAgICAgIGBgInhtbCJgYCkuCisgICAgICBUaGUga2V5d29yZC1vbmx5ICpzaG9ydF9lbXB0eV9lbGVtZW50cyogcGFyYW1ldGVyIGNvbnRyb2xzIHRoZSBmb3JtYXR0aW5nCisgICAgICBvZiBlbGVtZW50cyB0aGF0IGNvbnRhaW4gbm8gY29udGVudC4gIElmICpUcnVlKiAodGhlIGRlZmF1bHQpLCB0aGV5IGFyZQorICAgICAgZW1pdHRlZCBhcyBhIHNpbmdsZSBzZWxmLWNsb3NlZCB0YWcsIG90aGVyd2lzZSB0aGV5IGFyZSBlbWl0dGVkIGFzIGEgcGFpcgorICAgICAgb2Ygc3RhcnQvZW5kIHRhZ3MuCiAKICAgICAgIFRoZSBvdXRwdXQgaXMgZWl0aGVyIGEgc3RyaW5nICg6Y2xhc3M6YHN0cmApIG9yIGJpbmFyeSAoOmNsYXNzOmBieXRlc2ApLgogICAgICAgVGhpcyBpcyBjb250cm9sbGVkIGJ5IHRoZSAqZW5jb2RpbmcqIGFyZ3VtZW50LiAgSWYgKmVuY29kaW5nKiBpcwpAQCAtNzcyLDYgKzkzNCw5IEBACiAgICAgICA6dGVybTpgZmlsZSBvYmplY3RgOyBtYWtlIHN1cmUgeW91IGRvIG5vdCB0cnkgdG8gd3JpdGUgYSBzdHJpbmcgdG8gYQogICAgICAgYmluYXJ5IHN0cmVhbSBhbmQgdmljZSB2ZXJzYS4KIAorICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisgICAgICAgICBUaGUgKnNob3J0X2VtcHR5X2VsZW1lbnRzKiBwYXJhbWV0ZXIuCisKIAogVGhpcyBpcyB0aGUgWE1MIGZpbGUgdGhhdCBpcyBnb2luZyB0byBiZSBtYW5pcHVsYXRlZDo6CiAKQEAgLTgxNyw2ICs5ODIsNyBAQAogICAgOmNsYXNzOmBRTmFtZWAgaW5zdGFuY2VzIGFyZSBvcGFxdWUuCiAKIAorCiAuLiBfZWxlbWVudHRyZWUtdHJlZWJ1aWxkZXItb2JqZWN0czoKIAogVHJlZUJ1aWxkZXIgT2JqZWN0cwpAQCAtODc2LDEzICsxMDQyLDE4IEBACiAKIC4uIGNsYXNzOjogWE1MUGFyc2VyKGh0bWw9MCwgdGFyZ2V0PU5vbmUsIGVuY29kaW5nPU5vbmUpCiAKLSAgIDpjbGFzczpgRWxlbWVudGAgc3RydWN0dXJlIGJ1aWxkZXIgZm9yIFhNTCBzb3VyY2UgZGF0YSwgYmFzZWQgb24gdGhlIGV4cGF0Ci0gICBwYXJzZXIuICAqaHRtbCogYXJlIHByZWRlZmluZWQgSFRNTCBlbnRpdGllcy4gIFRoaXMgZmxhZyBpcyBub3Qgc3VwcG9ydGVkIGJ5Ci0gICB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbi4gICp0YXJnZXQqIGlzIHRoZSB0YXJnZXQgb2JqZWN0LiAgSWYgb21pdHRlZCwgdGhlCi0gICBidWlsZGVyIHVzZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIHN0YW5kYXJkIDpjbGFzczpgVHJlZUJ1aWxkZXJgIGNsYXNzLgotICAgKmVuY29kaW5nKiBbMV1fIGlzIG9wdGlvbmFsLiAgSWYgZ2l2ZW4sIHRoZSB2YWx1ZSBvdmVycmlkZXMgdGhlIGVuY29kaW5nCisgICBUaGlzIGNsYXNzIGlzIHRoZSBsb3ctbGV2ZWwgYnVpbGRpbmcgYmxvY2sgb2YgdGhlIG1vZHVsZS4gIEl0IHVzZXMKKyAgIDptb2Q6YHhtbC5wYXJzZXJzLmV4cGF0YCBmb3IgZWZmaWNpZW50LCBldmVudC1iYXNlZCBwYXJzaW5nIG9mIFhNTC4gIEl0IGNhbgorICAgYmUgZmVkIFhNTCBkYXRhIGluY3JlbWVudGFsbCB3aXRoIHRoZSA6bWV0aDpgZmVlZGAgbWV0aG9kLCBhbmQgcGFyc2luZyBldmVudHMKKyAgIGFyZSB0cmFuc2xhdGVkIHRvIGEgcHVzaCBBUEkgLSBieSBpbnZva2luZyBjYWxsYmFja3Mgb24gdGhlICp0YXJnZXQqIG9iamVjdC4KKyAgIElmICp0YXJnZXQqIGlzIG9taXR0ZWQsIHRoZSBzdGFuZGFyZCA6Y2xhc3M6YFRyZWVCdWlsZGVyYCBpcyB1c2VkLiAgVGhlCisgICAqaHRtbCogYXJndW1lbnQgd2FzIGhpc3RvcmljYWxseSB1c2VkIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBhbmQgaXMgbm93CisgICBkZXByZWNhdGVkLiAgSWYgKmVuY29kaW5nKiBbMV1fIGlzIGdpdmVuLCB0aGUgdmFsdWUgb3ZlcnJpZGVzIHRoZSBlbmNvZGluZwogICAgc3BlY2lmaWVkIGluIHRoZSBYTUwgZmlsZS4KIAorICAgLi4gZGVwcmVjYXRlZDo6IDMuNAorICAgICAgVGhlICpodG1sKiBhcmd1bWVudC4gIFRoZSByZW1haW5pbmcgYXJndW1lbnRzIHNob3VsZCBiZSBwYXNzZWQgdmlhCisgICAgICBrZXl3d29yZCB0byBwcmVwYXJlIGZvciB0aGUgcmVtb3ZhbCBvZiB0aGUgKmh0bWwqIGFyZ3VtZW50LgogCiAgICAuLiBtZXRob2Q6OiBjbG9zZSgpCiAKQEAgLTkwMiwxMiArMTA3MywxMiBAQAogCiAgICAgICBGZWVkcyBkYXRhIHRvIHRoZSBwYXJzZXIuICAqZGF0YSogaXMgZW5jb2RlZCBkYXRhLgogCi0gICA6bWV0aDpgWE1MUGFyc2VyLmZlZWRgIGNhbGxzICp0YXJnZXQqXCdzIGBgc3RhcnQoKWBgIG1ldGhvZAotICAgZm9yIGVhY2ggb3BlbmluZyB0YWcsIGl0cyBgYGVuZCgpYGAgbWV0aG9kIGZvciBlYWNoIGNsb3NpbmcgdGFnLAotICAgYW5kIGRhdGEgaXMgcHJvY2Vzc2VkIGJ5IG1ldGhvZCBgYGRhdGEoKWBgLiAgOm1ldGg6YFhNTFBhcnNlci5jbG9zZWAKLSAgIGNhbGxzICp0YXJnZXQqXCdzIG1ldGhvZCBgYGNsb3NlKClgYC4KLSAgIDpjbGFzczpgWE1MUGFyc2VyYCBjYW4gYmUgdXNlZCBub3Qgb25seSBmb3IgYnVpbGRpbmcgYSB0cmVlIHN0cnVjdHVyZS4KLSAgIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBjb3VudGluZyB0aGUgbWF4aW11bSBkZXB0aCBvZiBhbiBYTUwgZmlsZTo6CisgICA6bWV0aDpgWE1MUGFyc2VyLmZlZWRgIGNhbGxzICp0YXJnZXQqXCdzIGBgc3RhcnQodGFnLCBhdHRyc19kaWN0KWBgIG1ldGhvZAorICAgZm9yIGVhY2ggb3BlbmluZyB0YWcsIGl0cyBgYGVuZCh0YWcpYGAgbWV0aG9kIGZvciBlYWNoIGNsb3NpbmcgdGFnLCBhbmQgZGF0YQorICAgaXMgcHJvY2Vzc2VkIGJ5IG1ldGhvZCBgYGRhdGEoZGF0YSlgYC4gIDptZXRoOmBYTUxQYXJzZXIuY2xvc2VgIGNhbGxzCisgICAqdGFyZ2V0KlwncyBtZXRob2QgYGBjbG9zZSgpYGAuIDpjbGFzczpgWE1MUGFyc2VyYCBjYW4gYmUgdXNlZCBub3Qgb25seSBmb3IKKyAgIGJ1aWxkaW5nIGEgdHJlZSBzdHJ1Y3R1cmUuIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBjb3VudGluZyB0aGUgbWF4aW11bSBkZXB0aAorICAgb2YgYW4gWE1MIGZpbGU6OgogCiAgICAgPj4+IGZyb20geG1sLmV0cmVlLkVsZW1lbnRUcmVlIGltcG9ydCBYTUxQYXJzZXIKICAgICA+Pj4gY2xhc3MgTWF4RGVwdGg6ICAgICAgICAgICAgICAgICAgICAgIyBUaGUgdGFyZ2V0IG9iamVjdCBvZiB0aGUgcGFyc2VyCkBAIC05NDEsNiArMTExMiw2MCBAQAogICAgID4+PiBwYXJzZXIuY2xvc2UoKQogICAgIDQKIAorCisuLiBfZWxlbWVudHRyZWUteG1scHVsbHBhcnNlci1vYmplY3RzOgorCitYTUxQdWxsUGFyc2VyIE9iamVjdHMKK15eXl5eXl5eXl5eXl5eXl5eXl5eXgorCisuLiBjbGFzczo6IFhNTFB1bGxQYXJzZXIoZXZlbnRzPU5vbmUpCisKKyAgIEEgcHVsbCBwYXJzZXIgc3VpdGFibGUgZm9yIG5vbi1ibG9ja2luZyBhcHBsaWNhdGlvbnMuICBJdHMgaW5wdXQtc2lkZSBBUEkgaXMKKyAgIHNpbWlsYXIgdG8gdGhhdCBvZiA6Y2xhc3M6YFhNTFBhcnNlcmAsIGJ1dCBpbnN0ZWFkIG9mIHB1c2hpbmcgY2FsbHMgdG8gYQorICAgY2FsbGJhY2sgdGFyZ2V0LCA6Y2xhc3M6YFhNTFB1bGxQYXJzZXJgIGNvbGxlY3RzIGFuIGludGVybmFsIGxpc3Qgb2YgcGFyc2luZworICAgZXZlbnRzIGFuZCBsZXRzIHRoZSB1c2VyIHJlYWQgZnJvbSBpdC4gKmV2ZW50cyogaXMgYSBzZXF1ZW5jZSBvZiBldmVudHMgdG8KKyAgIHJlcG9ydCBiYWNrLiAgVGhlIHN1cHBvcnRlZCBldmVudHMgYXJlIHRoZSBzdHJpbmdzIGBgInN0YXJ0ImBgLCBgYCJlbmQiYGAsCisgICBgYCJzdGFydC1ucyJgYCBhbmQgYGAiZW5kLW5zImBgICh0aGUgIm5zIiBldmVudHMgYXJlIHVzZWQgdG8gZ2V0IGRldGFpbGVkCisgICBuYW1lc3BhY2UgaW5mb3JtYXRpb24pLiAgSWYgKmV2ZW50cyogaXMgb21pdHRlZCwgb25seSBgYCJlbmQiYGAgZXZlbnRzIGFyZQorICAgcmVwb3J0ZWQuCisKKyAgIC4uIG1ldGhvZDo6IGZlZWQoZGF0YSkKKworICAgICAgRmVlZCB0aGUgZ2l2ZW4gYnl0ZXMgZGF0YSB0byB0aGUgcGFyc2VyLgorCisgICAuLiBtZXRob2Q6OiBjbG9zZSgpCisKKyAgICAgIFNpZ25hbCB0aGUgcGFyc2VyIHRoYXQgdGhlIGRhdGEgc3RyZWFtIGlzIHRlcm1pbmF0ZWQuIFVubGlrZQorICAgICAgOm1ldGg6YFhNTFBhcnNlci5jbG9zZWAsIHRoaXMgbWV0aG9kIGFsd2F5cyByZXR1cm5zIDpjb25zdDpgTm9uZWAuCisgICAgICBBbnkgZXZlbnRzIG5vdCB5ZXQgcmV0cmlldmVkIHdoZW4gdGhlIHBhcnNlciBpcyBjbG9zZWQgY2FuIHN0aWxsIGJlCisgICAgICByZWFkIHdpdGggOm1ldGg6YHJlYWRfZXZlbnRzYC4KKworICAgLi4gbWV0aG9kOjogcmVhZF9ldmVudHMoKQorCisgICAgICBSZXR1cm4gYW4gaXRlcmF0b3Igb3ZlciB0aGUgZXZlbnRzIHdoaWNoIGhhdmUgYmVlbiBlbmNvdW50ZXJlZCBpbiB0aGUKKyAgICAgIGRhdGEgZmVkIHRvIHRoZQorICAgICAgcGFyc2VyLiAgVGhlIGl0ZXJhdG9yIHlpZWxkcyBgYChldmVudCwgZWxlbSlgYCBwYWlycywgd2hlcmUgKmV2ZW50KiBpcyBhCisgICAgICBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSB0eXBlIG9mIGV2ZW50IChlLmcuIGBgImVuZCJgYCkgYW5kICplbGVtKiBpcyB0aGUKKyAgICAgIGVuY291bnRlcmVkIDpjbGFzczpgRWxlbWVudGAgb2JqZWN0LgorCisgICAgICBFdmVudHMgcHJvdmlkZWQgaW4gYSBwcmV2aW91cyBjYWxsIHRvIDptZXRoOmByZWFkX2V2ZW50c2Agd2lsbCBub3QgYmUKKyAgICAgIHlpZWxkZWQgYWdhaW4uICBFdmVudHMgYXJlIGNvbnN1bWVkIGZyb20gdGhlIGludGVybmFsIHF1ZXVlIG9ubHkgd2hlbgorICAgICAgdGhleSBhcmUgcmV0cmlldmVkIGZyb20gdGhlIGl0ZXJhdG9yLCBzbyBtdWx0aXBsZSByZWFkZXJzIGl0ZXJhdGluZyBpbgorICAgICAgcGFyYWxsZWwgb3ZlciBpdGVyYXRvcnMgb2J0YWluZWQgZnJvbSA6bWV0aDpgcmVhZF9ldmVudHNgIHdpbGwgaGF2ZQorICAgICAgdW5wcmVkaWN0YWJsZSByZXN1bHRzLgorCisgICAuLiBub3RlOjoKKworICAgICAgOmNsYXNzOmBYTUxQdWxsUGFyc2VyYCBvbmx5IGd1YXJhbnRlZXMgdGhhdCBpdCBoYXMgc2VlbiB0aGUgIj4iCisgICAgICBjaGFyYWN0ZXIgb2YgYSBzdGFydGluZyB0YWcgd2hlbiBpdCBlbWl0cyBhICJzdGFydCIgZXZlbnQsIHNvIHRoZQorICAgICAgYXR0cmlidXRlcyBhcmUgZGVmaW5lZCwgYnV0IHRoZSBjb250ZW50cyBvZiB0aGUgdGV4dCBhbmQgdGFpbCBhdHRyaWJ1dGVzCisgICAgICBhcmUgdW5kZWZpbmVkIGF0IHRoYXQgcG9pbnQuICBUaGUgc2FtZSBhcHBsaWVzIHRvIHRoZSBlbGVtZW50IGNoaWxkcmVuOworICAgICAgdGhleSBtYXkgb3IgbWF5IG5vdCBiZSBwcmVzZW50LgorCisgICAgICBJZiB5b3UgbmVlZCBhIGZ1bGx5IHBvcHVsYXRlZCBlbGVtZW50LCBsb29rIGZvciAiZW5kIiBldmVudHMgaW5zdGVhZC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIEV4Y2VwdGlvbnMKIF5eXl5eXl5eXl4KIApAQCAtOTY1LDQgKzExOTAsNCBAQAogLi4gWyNdIFRoZSBlbmNvZGluZyBzdHJpbmcgaW5jbHVkZWQgaW4gWE1MIG91dHB1dCBzaG91bGQgY29uZm9ybSB0byB0aGUKICAgIGFwcHJvcHJpYXRlIHN0YW5kYXJkcy4gIEZvciBleGFtcGxlLCAiVVRGLTgiIGlzIHZhbGlkLCBidXQgIlVURjgiIGlzCiAgICBub3QuICBTZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwNi9SRUMteG1sMTEtMjAwNjA4MTYvI05ULUVuY29kaW5nRGVjbAotICAgYW5kIGh0dHA6Ly93d3cuaWFuYS5vcmcvYXNzaWdubWVudHMvY2hhcmFjdGVyLXNldHMuCisgICBhbmQgaHR0cDovL3d3dy5pYW5hLm9yZy9hc3NpZ25tZW50cy9jaGFyYWN0ZXItc2V0cy9jaGFyYWN0ZXItc2V0cy54aHRtbC4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3htbHJwYy5jbGllbnQucnN0IGIvRG9jL2xpYnJhcnkveG1scnBjLmNsaWVudC5yc3QKaW5kZXggZDYzNjBkZi4uY2M1ZTgzYSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkveG1scnBjLmNsaWVudC5yc3QKKysrIGIvRG9jL2xpYnJhcnkveG1scnBjLmNsaWVudC5yc3QKQEAgLTI3LDE1ICsyNywxNCBAQAogICAgY29uc3RydWN0ZWQgZGF0YS4gIElmIHlvdSBuZWVkIHRvIHBhcnNlIHVudHJ1c3RlZCBvciB1bmF1dGhlbnRpY2F0ZWQgZGF0YSBzZWUKICAgIDpyZWY6YHhtbC12dWxuZXJhYmlsaXRpZXNgLgogCi0uLiB3YXJuaW5nOjoKKy4uIHZlcnNpb25jaGFuZ2VkOjogMy40LjMKIAotICAgSW4gdGhlIGNhc2Ugb2YgaHR0cHMgVVJJcywgOm1vZDpgeG1scnBjLmNsaWVudGAgZG9lcyBub3QgZG8gYW55IHZlcmlmaWNhdGlvbgotICAgb2YgdGhlIHNlcnZlcidzIGNlcnRpZmljYXRlLgotCisgICBGb3IgaHR0cHMgVVJJcywgOm1vZDpgeG1scnBjLmNsaWVudGAgbm93IHBlcmZvcm1zIGFsbCB0aGUgbmVjZXNzYXJ5CisgICBjZXJ0aWZpY2F0ZSBhbmQgaG9zdG5hbWUgY2hlY2tzIGJ5IGRlZmF1bHQKIAogLi4gY2xhc3M6OiBTZXJ2ZXJQcm94eSh1cmksIHRyYW5zcG9ydD1Ob25lLCBlbmNvZGluZz1Ob25lLCB2ZXJib3NlPUZhbHNlLCBcCiAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93X25vbmU9RmFsc2UsIHVzZV9kYXRldGltZT1GYWxzZSwgXAotICAgICAgICAgICAgICAgICAgICAgICB1c2VfYnVpbHRpbl90eXBlcz1GYWxzZSkKKyAgICAgICAgICAgICAgICAgICAgICAgdXNlX2J1aWx0aW5fdHlwZXM9RmFsc2UsICosIGNvbnRleHQ9Tm9uZSkKIAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKICAgICAgIFRoZSAqdXNlX2J1aWx0aW5fdHlwZXMqIGZsYWcgd2FzIGFkZGVkLgpAQCAtNjQsNyArNjMsOSBAQAogICAgcG9ydGlvbiB3aWxsIGJlIGJhc2U2NC1lbmNvZGVkIGFzIGFuIEhUVFAgJ0F1dGhvcml6YXRpb24nIGhlYWRlciwgYW5kIHNlbnQgdG8KICAgIHRoZSByZW1vdGUgc2VydmVyIGFzIHBhcnQgb2YgdGhlIGNvbm5lY3Rpb24gcHJvY2VzcyB3aGVuIGludm9raW5nIGFuIFhNTC1SUEMKICAgIG1ldGhvZC4gIFlvdSBvbmx5IG5lZWQgdG8gdXNlIHRoaXMgaWYgdGhlIHJlbW90ZSBzZXJ2ZXIgcmVxdWlyZXMgYSBCYXNpYwotICAgQXV0aGVudGljYXRpb24gdXNlciBhbmQgcGFzc3dvcmQuCisgICBBdXRoZW50aWNhdGlvbiB1c2VyIGFuZCBwYXNzd29yZC4gSWYgYW4gSFRUUFMgdXJsIGlzIHByb3ZpZGVkLCAqY29udGV4dCogbWF5CisgICBiZSA6Y2xhc3M6YHNzbC5TU0xDb250ZXh0YCBhbmQgY29uZmlndXJlcyB0aGUgU1NMIHNldHRpbmdzIG9mIHRoZSB1bmRlcmx5aW5nCisgICBIVFRQUyBjb25uZWN0aW9uLgogCiAgICBUaGUgcmV0dXJuZWQgaW5zdGFuY2UgaXMgYSBwcm94eSBvYmplY3Qgd2l0aCBtZXRob2RzIHRoYXQgY2FuIGJlIHVzZWQgdG8gaW52b2tlCiAgICBjb3JyZXNwb25kaW5nIFJQQyBjYWxscyBvbiB0aGUgcmVtb3RlIHNlcnZlci4gIElmIHRoZSByZW1vdGUgc2VydmVyIHN1cHBvcnRzIHRoZQpAQCAtMTI4LDYgKzEyOSw5IEBACiAgICA6Y2xhc3M6YFNlcnZlcmAgaXMgcmV0YWluZWQgYXMgYW4gYWxpYXMgZm9yIDpjbGFzczpgU2VydmVyUHJveHlgIGZvciBiYWNrd2FyZHMKICAgIGNvbXBhdGliaWxpdHkuICBOZXcgY29kZSBzaG91bGQgdXNlIDpjbGFzczpgU2VydmVyUHJveHlgLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNC4zCisgICAgICBBZGRlZCB0aGUgKmNvbnRleHQqIGFyZ3VtZW50LgorCiAKIC4uIHNlZWFsc286OgogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS94bWxycGMuc2VydmVyLnJzdCBiL0RvYy9saWJyYXJ5L3htbHJwYy5zZXJ2ZXIucnN0CmluZGV4IGFjYTRmMzYuLjM3ZDEzOTMgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3htbHJwYy5zZXJ2ZXIucnN0CisrKyBiL0RvYy9saWJyYXJ5L3htbHJwYy5zZXJ2ZXIucnN0CkBAIC0xODQsOCArMTg0LDggQEAKICAgICMgUHJpbnQgbGlzdCBvZiBhdmFpbGFibGUgbWV0aG9kcwogICAgcHJpbnQocy5zeXN0ZW0ubGlzdE1ldGhvZHMoKSkKIAotVGhlIGZvbGxvd2luZyBleGFtcGxlIGluY2x1ZGVkIGluIGBMaWIveG1scnBjL3NlcnZlci5weWAgbW9kdWxlIHNob3dzIGEgc2VydmVyCi1hbGxvd2luZyBkb3R0ZWQgbmFtZXMgYW5kIHJlZ2lzdGVyaW5nIGEgbXVsdGljYWxsIGZ1bmN0aW9uLgorVGhlIGZvbGxvd2luZyBleGFtcGxlIGluY2x1ZGVkIGluIHRoZSA6ZmlsZTpgTGliL3htbHJwYy9zZXJ2ZXIucHlgIG1vZHVsZSBzaG93cworYSBzZXJ2ZXIgYWxsb3dpbmcgZG90dGVkIG5hbWVzIGFuZCByZWdpc3RlcmluZyBhIG11bHRpY2FsbCBmdW5jdGlvbi4KIAogLi4gd2FybmluZzo6CiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3ppcGZpbGUucnN0IGIvRG9jL2xpYnJhcnkvemlwZmlsZS5yc3QKaW5kZXggN2E2NDgyYi4uMTBhMDk0ZiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvemlwZmlsZS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvemlwZmlsZS5yc3QKQEAgLTEzMCw3ICsxMzAsNyBAQAogLS0tLS0tLS0tLS0tLS0tCiAKIAotLi4gY2xhc3M6OiBaaXBGaWxlKGZpbGUsIG1vZGU9J3InLCBjb21wcmVzc2lvbj1aSVBfU1RPUkVELCBhbGxvd1ppcDY0PUZhbHNlKQorLi4gY2xhc3M6OiBaaXBGaWxlKGZpbGUsIG1vZGU9J3InLCBjb21wcmVzc2lvbj1aSVBfU1RPUkVELCBhbGxvd1ppcDY0PVRydWUpCiAKICAgIE9wZW4gYSBaSVAgZmlsZSwgd2hlcmUgKmZpbGUqIGNhbiBiZSBlaXRoZXIgYSBwYXRoIHRvIGEgZmlsZSAoYSBzdHJpbmcpIG9yIGEKICAgIGZpbGUtbGlrZSBvYmplY3QuICBUaGUgKm1vZGUqIHBhcmFtZXRlciBzaG91bGQgYmUgYGAncidgYCB0byByZWFkIGFuIGV4aXN0aW5nCkBAIC0xNDQsMTUgKzE0NCwxMiBAQAogICAgYW5kIHNob3VsZCBiZSA6Y29uc3Q6YFpJUF9TVE9SRURgLCA6Y29uc3Q6YFpJUF9ERUZMQVRFRGAsCiAgICA6Y29uc3Q6YFpJUF9CWklQMmAgb3IgOmNvbnN0OmBaSVBfTFpNQWA7IHVucmVjb2duaXplZAogICAgdmFsdWVzIHdpbGwgY2F1c2UgOmV4YzpgUnVudGltZUVycm9yYCB0byBiZSByYWlzZWQuICBJZiA6Y29uc3Q6YFpJUF9ERUZMQVRFRGAsCi0gICA6Y29uc3Q6YFpJUF9CWklQMmAgb3IgOmNvbnN0OmBaSVBfTFpNQWAgaXMgc3BlY2lmaWVkIGJ1dCB0aGUgY29ycmVzcG9uZGVkIG1vZHVsZQorICAgOmNvbnN0OmBaSVBfQlpJUDJgIG9yIDpjb25zdDpgWklQX0xaTUFgIGlzIHNwZWNpZmllZCBidXQgdGhlIGNvcnJlc3BvbmRpbmcgbW9kdWxlCiAgICAoOm1vZDpgemxpYmAsIDptb2Q6YGJ6MmAgb3IgOm1vZDpgbHptYWApIGlzIG5vdCBhdmFpbGFibGUsIDpleGM6YFJ1bnRpbWVFcnJvcmAKICAgIGlzIGFsc28gcmFpc2VkLiBUaGUgZGVmYXVsdCBpcyA6Y29uc3Q6YFpJUF9TVE9SRURgLiAgSWYgKmFsbG93WmlwNjQqIGlzCi0gICBgYFRydWVgYCB6aXBmaWxlIHdpbGwgY3JlYXRlIFpJUCBmaWxlcyB0aGF0IHVzZSB0aGUgWklQNjQgZXh0ZW5zaW9ucyB3aGVuCi0gICB0aGUgemlwZmlsZSBpcyBsYXJnZXIgdGhhbiAyIEdpQi4gSWYgaXQgaXMgIGZhbHNlICh0aGUgZGVmYXVsdCkgOm1vZDpgemlwZmlsZWAKKyAgIGBgVHJ1ZWBgICh0aGUgZGVmYXVsdCkgemlwZmlsZSB3aWxsIGNyZWF0ZSBaSVAgZmlsZXMgdGhhdCB1c2UgdGhlIFpJUDY0CisgICBleHRlbnNpb25zIHdoZW4gdGhlIHppcGZpbGUgaXMgbGFyZ2VyIHRoYW4gMiBHaUIuIElmIGl0IGlzICBmYWxzZSA6bW9kOmB6aXBmaWxlYAogICAgd2lsbCByYWlzZSBhbiBleGNlcHRpb24gd2hlbiB0aGUgWklQIGZpbGUgd291bGQgcmVxdWlyZSBaSVA2NCBleHRlbnNpb25zLgotICAgWklQNjQgZXh0ZW5zaW9ucyBhcmUgZGlzYWJsZWQgYnkgZGVmYXVsdCBiZWNhdXNlIHRoZSBkZWZhdWx0IDpwcm9ncmFtOmB6aXBgCi0gICBhbmQgOnByb2dyYW06YHVuemlwYCBjb21tYW5kcyBvbiBVbml4ICh0aGUgSW5mb1pJUCB1dGlsaXRpZXMpIGRvbid0IHN1cHBvcnQKLSAgIHRoZXNlIGV4dGVuc2lvbnMuCiAKICAgIElmIHRoZSBmaWxlIGlzIGNyZWF0ZWQgd2l0aCBtb2RlIGBgJ2EnYGAgb3IgYGAndydgYCBhbmQgdGhlbgogICAgOm1ldGg6YGNsb3NlZCA8Y2xvc2U+YCB3aXRob3V0IGFkZGluZyBhbnkgZmlsZXMgdG8gdGhlIGFyY2hpdmUsIHRoZSBhcHByb3ByaWF0ZQpAQCAtMTcxLDYgKzE2OCw5IEBACiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMwogICAgICAgQWRkZWQgc3VwcG9ydCBmb3IgOm1vZDpgYnppcDIgPGJ6Mj5gIGFuZCA6bW9kOmBsem1hYCBjb21wcmVzc2lvbi4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFpJUDY0IGV4dGVuc2lvbnMgYXJlIGVuYWJsZWQgYnkgZGVmYXVsdC4KKwogCiAuLiBtZXRob2Q6OiBaaXBGaWxlLmNsb3NlKCkKIApAQCAtMjEwLDYgKzIxMCwxMyBAQAogICAgcGFzc3dvcmQgdXNlZCBmb3IgZW5jcnlwdGVkIGZpbGVzLiAgQ2FsbGluZyAgOm1ldGg6YC5vcGVuYCBvbiBhIGNsb3NlZAogICAgWmlwRmlsZSB3aWxsIHJhaXNlIGEgIDpleGM6YFJ1bnRpbWVFcnJvcmAuCiAKKyAgIDptZXRoOmB+WmlwRmlsZS5vcGVuYCBpcyBhbHNvIGEgY29udGV4dCBtYW5hZ2VyIGFuZCB0aGVyZWZvcmUgc3VwcG9ydHMgdGhlCisgICA6a2V5d29yZDpgd2l0aGAgc3RhdGVtZW50OjoKKworICAgICAgd2l0aCBaaXBGaWxlKCdzcGFtLnppcCcpIGFzIG15emlwOgorICAgICAgICAgIHdpdGggbXl6aXAub3BlbignZWdncy50eHQnKSBhcyBteWZpbGU6CisgICAgICAgICAgICAgIHByaW50KG15ZmlsZS5yZWFkKCkpCisKICAgIC4uIG5vdGU6OgogCiAgICAgICBUaGUgZmlsZS1saWtlIG9iamVjdCBpcyByZWFkLW9ubHkgYW5kIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgbWV0aG9kczoKQEAgLTIzNCw2ICsyNDEsOSBAQAogICAgICAgb3IgYSA6Y2xhc3M6YFppcEluZm9gIG9iamVjdC4gIFlvdSB3aWxsIGFwcHJlY2lhdGUgdGhpcyB3aGVuIHRyeWluZyB0byByZWFkIGEKICAgICAgIFpJUCBmaWxlIHRoYXQgY29udGFpbnMgbWVtYmVycyB3aXRoIGR1cGxpY2F0ZSBuYW1lcy4KIAorICAgLi4gZGVwcmVjYXRlZC1yZW1vdmVkOjogMy40IDMuNgorICAgICAgVGhlIGBgJ1UnYGAgb3IgIGBgJ3JVJ2BgIG1vZGUuICBVc2UgOmNsYXNzOmBpby5UZXh0SU9XcmFwcGVyYCBmb3IgcmVhZGluZworICAgICAgY29tcHJlc3NlZCB0ZXh0IGZpbGVzIGluIDp0ZXJtOmB1bml2ZXJzYWwgbmV3bGluZXNgIG1vZGUuCiAKIC4uIG1ldGhvZDo6IFppcEZpbGUuZXh0cmFjdChtZW1iZXIsIHBhdGg9Tm9uZSwgcHdkPU5vbmUpCiAKQEAgLTI0Myw2ICsyNTMsOCBAQAogICAgdG8gZXh0cmFjdCB0by4gICptZW1iZXIqIGNhbiBiZSBhIGZpbGVuYW1lIG9yIGEgOmNsYXNzOmBaaXBJbmZvYCBvYmplY3QuCiAgICAqcHdkKiBpcyB0aGUgcGFzc3dvcmQgdXNlZCBmb3IgZW5jcnlwdGVkIGZpbGVzLgogCisgICBSZXR1cm5zIHRoZSBub3JtYWxpemVkIHBhdGggY3JlYXRlZCAoYSBkaXJlY3Rvcnkgb3IgbmV3IGZpbGUpLgorCiAgICAuLiBub3RlOjoKIAogICAgICAgSWYgYSBtZW1iZXIgZmlsZW5hbWUgaXMgYW4gYWJzb2x1dGUgcGF0aCwgYSBkcml2ZS9VTkMgc2hhcmVwb2ludCBhbmQKQEAgLTI2NiwxMCArMjc4LDggQEAKICAgICAgIE5ldmVyIGV4dHJhY3QgYXJjaGl2ZXMgZnJvbSB1bnRydXN0ZWQgc291cmNlcyB3aXRob3V0IHByaW9yIGluc3BlY3Rpb24uCiAgICAgICBJdCBpcyBwb3NzaWJsZSB0aGF0IGZpbGVzIGFyZSBjcmVhdGVkIG91dHNpZGUgb2YgKnBhdGgqLCBlLmcuIG1lbWJlcnMKICAgICAgIHRoYXQgaGF2ZSBhYnNvbHV0ZSBmaWxlbmFtZXMgc3RhcnRpbmcgd2l0aCBgYCIvImBgIG9yIGZpbGVuYW1lcyB3aXRoIHR3bwotICAgICAgZG90cyBgYCIuLiJgYC4KLQotICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMuMQotICAgICAgVGhlIHppcGZpbGUgbW9kdWxlIGF0dGVtcHRzIHRvIHByZXZlbnQgdGhhdC4gIFNlZSA6bWV0aDpgZXh0cmFjdGAgbm90ZS4KKyAgICAgIGRvdHMgYGAiLi4iYGAuICBUaGlzIG1vZHVsZSBhdHRlbXB0cyB0byBwcmV2ZW50IHRoYXQuCisgICAgICBTZWUgOm1ldGg6YGV4dHJhY3RgIG5vdGUuCiAKIAogLi4gbWV0aG9kOjogWmlwRmlsZS5wcmludGRpcigpCkBAIC0yODgsNyArMjk4LDExIEBACiAgICBmaWxlIGluIHRoZSBhcmNoaXZlLCBvciBhIDpjbGFzczpgWmlwSW5mb2Agb2JqZWN0LiAgVGhlIGFyY2hpdmUgbXVzdCBiZSBvcGVuIGZvcgogICAgcmVhZCBvciBhcHBlbmQuICpwd2QqIGlzIHRoZSBwYXNzd29yZCB1c2VkIGZvciBlbmNyeXB0ZWQgIGZpbGVzIGFuZCwgaWYgc3BlY2lmaWVkLAogICAgaXQgd2lsbCBvdmVycmlkZSB0aGUgZGVmYXVsdCBwYXNzd29yZCBzZXQgd2l0aCA6bWV0aDpgc2V0cGFzc3dvcmRgLiAgQ2FsbGluZwotICAgOm1ldGg6YHJlYWRgIG9uIGEgY2xvc2VkIFppcEZpbGUgIHdpbGwgcmFpc2UgYSA6ZXhjOmBSdW50aW1lRXJyb3JgLgorICAgOm1ldGg6YHJlYWRgIG9uIGEgY2xvc2VkIFppcEZpbGUgIHdpbGwgcmFpc2UgYSA6ZXhjOmBSdW50aW1lRXJyb3JgLiBDYWxsaW5nCisgICA6bWV0aDpgcmVhZGAgb24gYSBaaXBGaWxlIHRoYXQgdXNlcyBhIGNvbXByZXNzaW9uIG1ldGhvZCBvdGhlciB0aGFuCisgICA6Y29uc3Q6YFpJUF9TVE9SRURgLCA6Y29uc3Q6YFpJUF9ERUZMQVRFRGAsIDpjb25zdDpgWklQX0JaSVAyYCBvcgorICAgOmNvbnN0OmBaSVBfTFpNQWAgd2lsbCByYWlzZSBhIDpleGM6YE5vdEltcGxlbWVudGVkRXJyb3JgLiBBbiBlcnJvciB3aWxsIGFsc28KKyAgIGJlIHJhaXNlZCBpZiB0aGUgY29ycmVzcG9uZGluZyBjb21wcmVzc2lvbiBtb2R1bGUgaXMgbm90IGF2YWlsYWJsZS4KIAogCiAuLiBtZXRob2Q6OiBaaXBGaWxlLnRlc3R6aXAoKQpAQCAtMzc2LDE1ICszOTAsMTggQEAKIFRoZSA6Y2xhc3M6YFB5WmlwRmlsZWAgY29uc3RydWN0b3IgdGFrZXMgdGhlIHNhbWUgcGFyYW1ldGVycyBhcyB0aGUKIDpjbGFzczpgWmlwRmlsZWAgY29uc3RydWN0b3IsIGFuZCBvbmUgYWRkaXRpb25hbCBwYXJhbWV0ZXIsICpvcHRpbWl6ZSouCiAKLS4uIGNsYXNzOjogUHlaaXBGaWxlKGZpbGUsIG1vZGU9J3InLCBjb21wcmVzc2lvbj1aSVBfU1RPUkVELCBhbGxvd1ppcDY0PUZhbHNlLCBcCisuLiBjbGFzczo6IFB5WmlwRmlsZShmaWxlLCBtb2RlPSdyJywgY29tcHJlc3Npb249WklQX1NUT1JFRCwgYWxsb3daaXA2ND1UcnVlLCBcCiAgICAgICAgICAgICAgICAgICAgICBvcHRpbWl6ZT0tMSkKIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCiAgICAgICBUaGUgKm9wdGltaXplKiBwYXJhbWV0ZXIuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBaSVA2NCBleHRlbnNpb25zIGFyZSBlbmFibGVkIGJ5IGRlZmF1bHQuCisKICAgIEluc3RhbmNlcyBoYXZlIG9uZSBtZXRob2QgaW4gYWRkaXRpb24gdG8gdGhvc2Ugb2YgOmNsYXNzOmBaaXBGaWxlYCBvYmplY3RzOgogCi0gICAuLiBtZXRob2Q6OiBQeVppcEZpbGUud3JpdGVweShwYXRobmFtZSwgYmFzZW5hbWU9JycpCisgICAuLiBtZXRob2Q6OiBQeVppcEZpbGUud3JpdGVweShwYXRobmFtZSwgYmFzZW5hbWU9JycsIGZpbHRlcmZ1bmM9Tm9uZSkKIAogICAgICAgU2VhcmNoIGZvciBmaWxlcyA6ZmlsZTpgXCoucHlgIGFuZCBhZGQgdGhlIGNvcnJlc3BvbmRpbmcgZmlsZSB0byB0aGUKICAgICAgIGFyY2hpdmUuCkBAIC0zOTcsMTYgKzQxNCwzMyBAQAogICAgICAgYGAyYGAsIG9ubHkgZmlsZXMgd2l0aCB0aGF0IG9wdGltaXphdGlvbiBsZXZlbCAoc2VlIDpmdW5jOmBjb21waWxlYCkgYXJlCiAgICAgICBhZGRlZCB0byB0aGUgYXJjaGl2ZSwgY29tcGlsaW5nIGlmIG5lY2Vzc2FyeS4KIAotICAgICAgSWYgdGhlIHBhdGhuYW1lIGlzIGEgZmlsZSwgdGhlIGZpbGVuYW1lIG11c3QgZW5kIHdpdGggOmZpbGU6YC5weWAsIGFuZAorICAgICAgSWYgKnBhdGhuYW1lKiBpcyBhIGZpbGUsIHRoZSBmaWxlbmFtZSBtdXN0IGVuZCB3aXRoIDpmaWxlOmAucHlgLCBhbmQKICAgICAgIGp1c3QgdGhlIChjb3JyZXNwb25kaW5nIDpmaWxlOmBcKi5weVtjb11gKSBmaWxlIGlzIGFkZGVkIGF0IHRoZSB0b3AgbGV2ZWwKLSAgICAgIChubyBwYXRoIGluZm9ybWF0aW9uKS4gIElmIHRoZSBwYXRobmFtZSBpcyBhIGZpbGUgdGhhdCBkb2VzIG5vdCBlbmQgd2l0aAorICAgICAgKG5vIHBhdGggaW5mb3JtYXRpb24pLiAgSWYgKnBhdGhuYW1lKiBpcyBhIGZpbGUgdGhhdCBkb2VzIG5vdCBlbmQgd2l0aAogICAgICAgOmZpbGU6YC5weWAsIGEgOmV4YzpgUnVudGltZUVycm9yYCB3aWxsIGJlIHJhaXNlZC4gIElmIGl0IGlzIGEgZGlyZWN0b3J5LAogICAgICAgYW5kIHRoZSBkaXJlY3RvcnkgaXMgbm90IGEgcGFja2FnZSBkaXJlY3RvcnksIHRoZW4gYWxsIHRoZSBmaWxlcwogICAgICAgOmZpbGU6YFwqLnB5W2NvXWAgYXJlIGFkZGVkIGF0IHRoZSB0b3AgbGV2ZWwuICBJZiB0aGUgZGlyZWN0b3J5IGlzIGEKICAgICAgIHBhY2thZ2UgZGlyZWN0b3J5LCB0aGVuIGFsbCA6ZmlsZTpgXCoucHlbY29dYCBhcmUgYWRkZWQgdW5kZXIgdGhlIHBhY2thZ2UKICAgICAgIG5hbWUgYXMgYSBmaWxlIHBhdGgsIGFuZCBpZiBhbnkgc3ViZGlyZWN0b3JpZXMgYXJlIHBhY2thZ2UgZGlyZWN0b3JpZXMsCi0gICAgICBhbGwgb2YgdGhlc2UgYXJlIGFkZGVkIHJlY3Vyc2l2ZWx5LiAgKmJhc2VuYW1lKiBpcyBpbnRlbmRlZCBmb3IgaW50ZXJuYWwKLSAgICAgIHVzZSBvbmx5LiAgVGhlIDptZXRoOmB3cml0ZXB5YCBtZXRob2QgbWFrZXMgYXJjaGl2ZXMgd2l0aCBmaWxlIG5hbWVzIGxpa2UKKyAgICAgIGFsbCBvZiB0aGVzZSBhcmUgYWRkZWQgcmVjdXJzaXZlbHkuCisKKyAgICAgICpiYXNlbmFtZSogaXMgaW50ZW5kZWQgZm9yIGludGVybmFsIHVzZSBvbmx5LgorCisgICAgICAqZmlsdGVyZnVuYyosIGlmIGdpdmVuLCBtdXN0IGJlIGEgZnVuY3Rpb24gdGFraW5nIGEgc2luZ2xlIHN0cmluZworICAgICAgYXJndW1lbnQuICBJdCB3aWxsIGJlIHBhc3NlZCBlYWNoIHBhdGggKGluY2x1ZGluZyBlYWNoIGluZGl2aWR1YWwgZnVsbAorICAgICAgZmlsZSBwYXRoKSBiZWZvcmUgaXQgaXMgYWRkZWQgdG8gdGhlIGFyY2hpdmUuICBJZiAqZmlsdGVyZnVuYyogcmV0dXJucyBhCisgICAgICBmYWxzZSB2YWx1ZSwgdGhlIHBhdGggd2lsbCBub3QgYmUgYWRkZWQsIGFuZCBpZiBpdCBpcyBhIGRpcmVjdG9yeSBpdHMKKyAgICAgIGNvbnRlbnRzIHdpbGwgYmUgaWdub3JlZC4gIEZvciBleGFtcGxlLCBpZiBvdXIgdGVzdCBmaWxlcyBhcmUgYWxsIGVpdGhlcgorICAgICAgaW4gYGB0ZXN0YGAgZGlyZWN0b3JpZXMgb3Igc3RhcnQgd2l0aCB0aGUgc3RyaW5nIGBgdGVzdF9gYCwgd2UgY2FuIHVzZSBhCisgICAgICAqZmlsdGVyZnVuYyogdG8gZXhjbHVkZSB0aGVtOjoKKworICAgICAgICAgID4+PiB6ZiA9IFB5WmlwRmlsZSgnbXlwcm9nLnppcCcpCisgICAgICAgICAgPj4+IGRlZiBub3Rlc3RzKHMpOgorICAgICAgICAgIC4uLiAgICAgZm4gPSBvcy5wYXRoLmJhc2VuYW1lKHMpCisgICAgICAgICAgLi4uICAgICByZXR1cm4gKG5vdCAoZm4gPT0gJ3Rlc3QnIG9yIGZuLnN0YXJ0c3dpdGgoJ3Rlc3RfJykpKQorICAgICAgICAgID4+PiB6Zi53cml0ZXB5KCdteXByb2cnLCBmaWx0ZXJmdW5jPW5vdGVzdHMpCisKKyAgICAgIFRoZSA6bWV0aDpgd3JpdGVweWAgbWV0aG9kIG1ha2VzIGFyY2hpdmVzIHdpdGggZmlsZSBuYW1lcyBsaWtlCiAgICAgICB0aGlzOjoKIAogICAgICAgICAgc3RyaW5nLnB5YyAgICAgICAgICAgICAgICAgICAjIFRvcCBsZXZlbCBuYW1lCkBAIC00MTUsNiArNDQ5LDkgQEAKICAgICAgICAgIHRlc3QvYm9ndXMvX19pbml0X18ucHljICAgICAgIyBTdWJwYWNrYWdlIGRpcmVjdG9yeQogICAgICAgICAgdGVzdC9ib2d1cy9teWZpbGUucHljICAgICAgICAjIFN1Ym1vZHVsZSB0ZXN0LmJvZ3VzLm15ZmlsZQogCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKyAgICAgICAgIFRoZSAqZmlsdGVyZnVuYyogcGFyYW1ldGVyLgorCiAKIC4uIF96aXBpbmZvLW9iamVjdHM6CiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3psaWIucnN0IGIvRG9jL2xpYnJhcnkvemxpYi5yc3QKaW5kZXggYjE3OGZlMS4uNThmYzMxYjAgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3psaWIucnN0CisrKyBiL0RvYy9saWJyYXJ5L3psaWIucnN0CkBAIC0zMCw3ICszMCw3IEBACiAKIC4uIGZ1bmN0aW9uOjogYWRsZXIzMihkYXRhWywgdmFsdWVdKQogCi0gICBDb21wdXRlcyBhIEFkbGVyLTMyIGNoZWNrc3VtIG9mICpkYXRhKi4gIChBbiBBZGxlci0zMiBjaGVja3N1bSBpcyBhbG1vc3QgYXMKKyAgIENvbXB1dGVzIGFuIEFkbGVyLTMyIGNoZWNrc3VtIG9mICpkYXRhKi4gIChBbiBBZGxlci0zMiBjaGVja3N1bSBpcyBhbG1vc3QgYXMKICAgIHJlbGlhYmxlIGFzIGEgQ1JDMzIgYnV0IGNhbiBiZSBjb21wdXRlZCBtdWNoIG1vcmUgcXVpY2tseS4pICBJZiAqdmFsdWUqIGlzCiAgICBwcmVzZW50LCBpdCBpcyB1c2VkIGFzIHRoZSBzdGFydGluZyB2YWx1ZSBvZiB0aGUgY2hlY2tzdW07IG90aGVyd2lzZSwgYSBmaXhlZAogICAgZGVmYXVsdCB2YWx1ZSBpcyB1c2VkLiAgVGhpcyBhbGxvd3MgY29tcHV0aW5nIGEgcnVubmluZyBjaGVja3N1bSBvdmVyIHRoZQpAQCAtNTgsNyArNTgsNyBAQAogICAgUmFpc2VzIHRoZSA6ZXhjOmBlcnJvcmAgZXhjZXB0aW9uIGlmIGFueSBlcnJvciBvY2N1cnMuCiAKIAotLi4gZnVuY3Rpb246OiBjb21wcmVzc29iaihsZXZlbD0tMSwgbWV0aG9kPURFRkxBVEVELCB3Yml0cz0xNSwgbWVtbGV2ZWw9OCwgc3RyYXRlZ3k9Wl9ERUZBVUxUX1NUUkFURUdZWywgemRpY3RdKQorLi4gZnVuY3Rpb246OiBjb21wcmVzc29iaihsZXZlbD0tMSwgbWV0aG9kPURFRkxBVEVELCB3Yml0cz0xNSwgbWVtTGV2ZWw9OCwgc3RyYXRlZ3k9Wl9ERUZBVUxUX1NUUkFURUdZWywgemRpY3RdKQogCiAgICBSZXR1cm5zIGEgY29tcHJlc3Npb24gb2JqZWN0LCB0byBiZSB1c2VkIGZvciBjb21wcmVzc2luZyBkYXRhIHN0cmVhbXMgdGhhdCB3b24ndAogICAgZml0IGludG8gbWVtb3J5IGF0IG9uY2UuCkBAIC03NSw5ICs3NSw5IEBACiAgICBzaG91bGQgYmUgYW4gaW50ZWdlciBmcm9tIGBgOGBgIHRvIGBgMTVgYC4gSGlnaGVyIHZhbHVlcyBnaXZlIGJldHRlcgogICAgY29tcHJlc3Npb24sIGJ1dCB1c2UgbW9yZSBtZW1vcnkuCiAKLSAgICptZW1sZXZlbCogY29udHJvbHMgdGhlIGFtb3VudCBvZiBtZW1vcnkgdXNlZCBmb3IgaW50ZXJuYWwgY29tcHJlc3Npb24gc3RhdGUuCi0gICBWYWxpZCB2YWx1ZXMgcmFuZ2UgZnJvbSBgYDFgYCB0byBgYDlgYC4gSGlnaGVyIHZhbHVlcyB1c2luZyBtb3JlIG1lbW9yeSwKLSAgIGJ1dCBhcmUgZmFzdGVyIGFuZCBwcm9kdWNlIHNtYWxsZXIgb3V0cHV0LgorICAgVGhlICptZW1MZXZlbCogYXJndW1lbnQgY29udHJvbHMgdGhlIGFtb3VudCBvZiBtZW1vcnkgdXNlZCBmb3IgdGhlCisgICBpbnRlcm5hbCBjb21wcmVzc2lvbiBzdGF0ZS4gVmFsaWQgdmFsdWVzIHJhbmdlIGZyb20gYGAxYGAgdG8gYGA5YGAuCisgICBIaWdoZXIgdmFsdWVzIHVzZSBtb3JlIG1lbW9yeSwgYnV0IGFyZSBmYXN0ZXIgYW5kIHByb2R1Y2Ugc21hbGxlciBvdXRwdXQuCiAKICAgICpzdHJhdGVneSogaXMgdXNlZCB0byB0dW5lIHRoZSBjb21wcmVzc2lvbiBhbGdvcml0aG0uIFBvc3NpYmxlIHZhbHVlcyBhcmUKICAgIGBgWl9ERUZBVUxUX1NUUkFURUdZYGAsIGBgWl9GSUxURVJFRGBgLCBhbmQgYGBaX0hVRkZNQU5fT05MWWBgLgpAQCAtMjMwLDcgKzIzMCw3IEBACiAgICA6bWV0aDpgZGVjb21wcmVzc2AgbWV0aG9kLiAgU29tZSBvZiB0aGUgaW5wdXQgZGF0YSBtYXkgYmUgcHJlc2VydmVkIGluIGludGVybmFsCiAgICBidWZmZXJzIGZvciBsYXRlciBwcm9jZXNzaW5nLgogCi0gICBJZiB0aGUgb3B0aW9uYWwgcGFyYW1ldGVyICptYXhfbGVuZ3RoKiBpcyBzdXBwbGllZCB0aGVuIHRoZSByZXR1cm4gdmFsdWUgd2lsbCBiZQorICAgSWYgdGhlIG9wdGlvbmFsIHBhcmFtZXRlciAqbWF4X2xlbmd0aCogaXMgbm9uLXplcm8gdGhlbiB0aGUgcmV0dXJuIHZhbHVlIHdpbGwgYmUKICAgIG5vIGxvbmdlciB0aGFuICptYXhfbGVuZ3RoKi4gVGhpcyBtYXkgbWVhbiB0aGF0IG5vdCBhbGwgb2YgdGhlIGNvbXByZXNzZWQgaW5wdXQKICAgIGNhbiBiZSBwcm9jZXNzZWQ7IGFuZCB1bmNvbnN1bWVkIGRhdGEgd2lsbCBiZSBzdG9yZWQgaW4gdGhlIGF0dHJpYnV0ZQogICAgOmF0dHI6YHVuY29uc3VtZWRfdGFpbGAuIFRoaXMgYnl0ZXN0cmluZyBtdXN0IGJlIHBhc3NlZCB0byBhIHN1YnNlcXVlbnQgY2FsbCB0bwpkaWZmIC0tZ2l0IGEvRG9jL2xpY2Vuc2UucnN0IGIvRG9jL2xpY2Vuc2UucnN0CmluZGV4IGUxYWMzNzMuLjhhNjEzYjIgMTAwNjQ0Ci0tLSBhL0RvYy9saWNlbnNlLnJzdAorKysgYi9Eb2MvbGljZW5zZS5yc3QKQEAgLTIzLDExICsyMywxMSBAQAogZm9ybSB0aGUgQmVPcGVuIFB5dGhvbkxhYnMgdGVhbS4gIEluIE9jdG9iZXIgb2YgdGhlIHNhbWUgeWVhciwgdGhlIFB5dGhvbkxhYnMKIHRlYW0gbW92ZWQgdG8gRGlnaXRhbCBDcmVhdGlvbnMgKG5vdyBab3BlIENvcnBvcmF0aW9uOyBzZWUKIGh0dHA6Ly93d3cuem9wZS5jb20vKS4gIEluIDIwMDEsIHRoZSBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiAoUFNGLCBzZWUKLWh0dHA6Ly93d3cucHl0aG9uLm9yZy9wc2YvKSB3YXMgZm9ybWVkLCBhIG5vbi1wcm9maXQgb3JnYW5pemF0aW9uIGNyZWF0ZWQKK2h0dHBzOi8vd3d3LnB5dGhvbi5vcmcvcHNmLykgd2FzIGZvcm1lZCwgYSBub24tcHJvZml0IG9yZ2FuaXphdGlvbiBjcmVhdGVkCiBzcGVjaWZpY2FsbHkgdG8gb3duIFB5dGhvbi1yZWxhdGVkIEludGVsbGVjdHVhbCBQcm9wZXJ0eS4gIFpvcGUgQ29ycG9yYXRpb24gaXMgYQogc3BvbnNvcmluZyBtZW1iZXIgb2YgdGhlIFBTRi4KIAotQWxsIFB5dGhvbiByZWxlYXNlcyBhcmUgT3BlbiBTb3VyY2UgKHNlZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnLyBmb3IgdGhlIE9wZW4KK0FsbCBQeXRob24gcmVsZWFzZXMgYXJlIE9wZW4gU291cmNlIChzZWUgaHR0cDovL29wZW5zb3VyY2Uub3JnLyBmb3IgdGhlIE9wZW4KIFNvdXJjZSBEZWZpbml0aW9uKS4gSGlzdG9yaWNhbGx5LCBtb3N0LCBidXQgbm90IGFsbCwgUHl0aG9uIHJlbGVhc2VzIGhhdmUgYWxzbwogYmVlbiBHUEwtY29tcGF0aWJsZTsgdGhlIHRhYmxlIGJlbG93IHN1bW1hcml6ZXMgdGhlIHZhcmlvdXMgcmVsZWFzZXMuCiAKQEAgLTU5MCw2ICs1OTAsMzUgQEAKICAgU1VDSCBEQU1BR0UuCiAKIAorU2lwSGFzaDI0CistLS0tLS0tLS0KKworVGhlIGZpbGUgOmZpbGU6YFB5dGhvbi9weWhhc2guY2AgY29udGFpbnMgTWFyZWsgTWFqa293c2tpJyBpbXBsZW1lbnRhdGlvbiBvZgorRGFuIEJlcm5zdGVpbidzIFNpcEhhc2gyNCBhbGdvcml0aG0uIFRoZSBjb250YWlucyB0aGUgZm9sbG93aW5nIG5vdGU6OgorCisgIDxNSVQgTGljZW5zZT4KKyAgQ29weXJpZ2h0IChjKSAyMDEzICBNYXJlayBNYWprb3dza2kgPG1hcmVrQHBvcGNvdW50Lm9yZz4KKworICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAgPC9NSVQgTGljZW5zZT4KKworICBPcmlnaW5hbCBsb2NhdGlvbjoKKyAgICAgaHR0cHM6Ly9naXRodWIuY29tL21hamVrL2NzaXBoYXNoLworCisgIFNvbHV0aW9uIGluc3BpcmVkIGJ5IGNvZGUgZnJvbToKKyAgICAgU2FtdWVsIE5ldmVzIChzdXBlcmNvcC9jcnlwdG9fYXV0aC9zaXBoYXNoMjQvbGl0dGxlKQorICAgICBkamIgKHN1cGVyY29wL2NyeXB0b19hdXRoL3NpcGhhc2gyNC9saXR0bGUyKQorICAgICBKZWFuLVBoaWxpcHBlIEF1bWFzc29uIChodHRwczovLzEzMTAwMi5uZXQvc2lwaGFzaC9zaXBoYXNoMjQuYykKKworCiBzdHJ0b2QgYW5kIGR0b2EKIC0tLS0tLS0tLS0tLS0tLQogCkBAIC02MjUsOSArNjU0LDkgQEAKIAogVGhlIG1vZHVsZXMgOm1vZDpgaGFzaGxpYmAsIDptb2Q6YHBvc2l4YCwgOm1vZDpgc3NsYCwgOm1vZDpgY3J5cHRgIHVzZQogdGhlIE9wZW5TU0wgbGlicmFyeSBmb3IgYWRkZWQgcGVyZm9ybWFuY2UgaWYgbWFkZSBhdmFpbGFibGUgYnkgdGhlCi1vcGVyYXRpbmcgc3lzdGVtLiBBZGRpdGlvbmFsbHksIHRoZSBXaW5kb3dzIGluc3RhbGxlcnMgZm9yIFB5dGhvbgotaW5jbHVkZSBhIGNvcHkgb2YgdGhlIE9wZW5TU0wgbGlicmFyaWVzLCBzbyB3ZSBpbmNsdWRlIGEgY29weSBvZiB0aGUKLU9wZW5TU0wgbGljZW5zZSBoZXJlOjoKK29wZXJhdGluZyBzeXN0ZW0uIEFkZGl0aW9uYWxseSwgdGhlIFdpbmRvd3MgYW5kIE1hYyBPUyBYIGluc3RhbGxlcnMgZm9yCitQeXRob24gbWF5IGluY2x1ZGUgYSBjb3B5IG9mIHRoZSBPcGVuU1NMIGxpYnJhcmllcywgc28gd2UgaW5jbHVkZSBhIGNvcHkKK29mIHRoZSBPcGVuU1NMIGxpY2Vuc2UgaGVyZTo6CiAKIAogICBMSUNFTlNFIElTU1VFUwpAQCAtODQ2LDYgKzg3NSw0NyBAQAogICBqbG91cEBnemlwLm9yZyAgICAgICAgICBtYWRsZXJAYWx1bW5pLmNhbHRlY2guZWR1CiAKIAorY2Z1aGFzaAorLS0tLS0tLQorCitUaGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIGhhc2ggdGFibGUgdXNlZCBieSB0aGUgOm1vZDpgdHJhY2VtYWxsb2NgIGlzIGJhc2VkCitvbiB0aGUgY2Z1aGFzaCBwcm9qZWN0OjoKKworICAgQ29weXJpZ2h0IChjKSAyMDA1IERvbiBPd2VucworICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworICAgVGhpcyBjb2RlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBCU0QgbGljZW5zZToKKworICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAgIGFyZSBtZXQ6CisKKyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKworICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICAgICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGF1dGhvciBub3IgdGhlIG5hbWVzIG9mIGl0cworICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICAgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAgIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgICBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICAgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICAgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAgIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICAgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgICBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgICBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgICBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKwogbGlibXBkZWMKIC0tLS0tLS0tCiAKZGlmZiAtLWdpdCBhL0RvYy9tYWtlLmJhdCBiL0RvYy9tYWtlLmJhdAppbmRleCBkNmY3MDc0Li4yNTFmODIyIDEwMDY0NAotLS0gYS9Eb2MvbWFrZS5iYXQKKysrIGIvRG9jL21ha2UuYmF0CkBAIC0xLDU5ICsxLDEyNCBAQAotQEBlY2hvIG9mZgotc2V0bG9jYWwKLQotc2V0IFNWTlJPT1Q9aHR0cDovL3N2bi5weXRob24ub3JnL3Byb2plY3RzCi1pZiAiJVBZVEhPTiUiIEVRVSAiIiBzZXQgUFlUSE9OPXB5IC0yCi1pZiAiJUhUTUxIRUxQJSIgRVFVICIiIHNldCBIVE1MSEVMUD0lUHJvZ3JhbUZpbGVzJVxIVE1MIEhlbHAgV29ya3Nob3BcaGhjLmV4ZQotaWYgIiVESVNUVkVSU0lPTiUiIEVRVSAiIiBmb3IgL2YgInVzZWJhY2txIiAlJXYgaW4gKGAlUFlUSE9OJSB0b29scy9zcGhpbnhleHQvcGF0Y2hsZXZlbC5weWApIGRvIHNldCBESVNUVkVSU0lPTj0lJXYKLQotaWYgIiUxIiBFUVUgIiIgZ290byBoZWxwCi1pZiAiJTEiIEVRVSAiaHRtbCIgZ290byBidWlsZAotaWYgIiUxIiBFUVUgImh0bWxoZWxwIiBnb3RvIGJ1aWxkCi1pZiAiJTEiIEVRVSAibGF0ZXgiIGdvdG8gYnVpbGQKLWlmICIlMSIgRVFVICJ0ZXh0IiBnb3RvIGJ1aWxkCi1pZiAiJTEiIEVRVSAic3VzcGljaW91cyIgZ290byBidWlsZAotaWYgIiUxIiBFUVUgImxpbmtjaGVjayIgZ290byBidWlsZAotaWYgIiUxIiBFUVUgImNoYW5nZXMiIGdvdG8gYnVpbGQKLWlmICIlMSIgRVFVICJjaGVja291dCIgZ290byBjaGVja291dAotaWYgIiUxIiBFUVUgInVwZGF0ZSIgZ290byB1cGRhdGUKLQotOmhlbHAKLXNldCB0aGlzPSV+bjAKLWVjaG8gSEVMUAotZWNoby4KLWVjaG8gJXRoaXMlIGNoZWNrb3V0Ci1lY2hvICV0aGlzJSB1cGRhdGUKLWVjaG8gJXRoaXMlIGh0bWwKLWVjaG8gJXRoaXMlIGh0bWxoZWxwCi1lY2hvICV0aGlzJSBsYXRleAotZWNobyAldGhpcyUgdGV4dAotZWNobyAldGhpcyUgc3VzcGljaW91cwotZWNobyAldGhpcyUgbGlua2NoZWNrCi1lY2hvICV0aGlzJSBjaGFuZ2VzCi1lY2hvLgotZ290byBlbmQKLQotOmNoZWNrb3V0Ci1zdm4gY28gJVNWTlJPT1QlL2V4dGVybmFsL1NwaGlueC0xLjIvc3BoaW54IHRvb2xzL3NwaGlueAotc3ZuIGNvICVTVk5ST09UJS9leHRlcm5hbC9kb2N1dGlscy0wLjExL2RvY3V0aWxzIHRvb2xzL2RvY3V0aWxzCi1zdm4gY28gJVNWTlJPT1QlL2V4dGVybmFsL0ppbmphLTIuMy4xL2ppbmphMiB0b29scy9qaW5qYTIKLXN2biBjbyAlU1ZOUk9PVCUvZXh0ZXJuYWwvUHlnbWVudHMtMS42L3B5Z21lbnRzIHRvb2xzL3B5Z21lbnRzCi1nb3RvIGVuZAotCi06dXBkYXRlCi1zdm4gdXBkYXRlIHRvb2xzL3NwaGlueAotc3ZuIHVwZGF0ZSB0b29scy9kb2N1dGlscwotc3ZuIHVwZGF0ZSB0b29scy9qaW5qYTIKLXN2biB1cGRhdGUgdG9vbHMvcHlnbWVudHMKLWdvdG8gZW5kCi0KLTpidWlsZAotaWYgbm90IGV4aXN0IGJ1aWxkIG1rZGlyIGJ1aWxkCi1pZiBub3QgZXhpc3QgYnVpbGRcJTEgbWtkaXIgYnVpbGRcJTEKLWlmIG5vdCBleGlzdCBidWlsZFxkb2N0cmVlcyBta2RpciBidWlsZFxkb2N0cmVlcwotY21kIC9DICVQWVRIT04lIC0tdmVyc2lvbgotY21kIC9DICVQWVRIT04lIHRvb2xzXHNwaGlueC1idWlsZC5weSAtYiUxIC1kYnVpbGRcZG9jdHJlZXMgLiBidWlsZFwlKgotaWYgIiUxIiBFUVUgImh0bWxoZWxwIiAiJUhUTUxIRUxQJSIgYnVpbGRcaHRtbGhlbHBccHl0aG9uJURJU1RWRVJTSU9OOi49JS5oaHAKLWdvdG8gZW5kCi0KLTplbmQKK0BlY2hvIG9mZg0KK3NldGxvY2FsDQorDQorcHVzaGQgJX5kcDANCisNCitzZXQgdGhpcz0lfm4wDQorDQoraWYgIiVTUEhJTlhCVUlMRCUiIEVRVSAiIiBzZXQgU1BISU5YQlVJTEQ9c3BoaW54LWJ1aWxkDQoraWYgIiVQWVRIT04lIiBFUVUgIiIgc2V0IFBZVEhPTj1weQ0KKw0KK2lmIERFRklORUQgUHJvZ3JhbUZpbGVzKHg4Nikgc2V0IF9QUkdNRkxTPSVQcm9ncmFtRmlsZXMoeDg2KSUNCitpZiBOT1QgREVGSU5FRCBQcm9ncmFtRmlsZXMoeDg2KSBzZXQgX1BSR01GTFM9JVByb2dyYW1GaWxlcyUNCitpZiAiJUhUTUxIRUxQJSIgRVFVICIiIHNldCBIVE1MSEVMUD0lX1BSR01GTFMlXEhUTUwgSGVscCBXb3Jrc2hvcFxoaGMuZXhlDQorDQoraWYgIiVESVNUVkVSU0lPTiUiIEVRVSAiIiBmb3IgL2YgInVzZWJhY2txIiAlJXYgaW4gKGAlUFlUSE9OJSB0b29scy9leHRlbnNpb25zL3BhdGNobGV2ZWwucHlgKSBkbyBzZXQgRElTVFZFUlNJT049JSV2DQorDQoraWYgIiVCVUlMRERJUiUiIEVRVSAiIiBzZXQgQlVJTERESVI9YnVpbGQNCisNCityZW0gVGFyZ2V0cyB0aGF0IGRvbid0IHJlcXVpcmUgc3BoaW54LWJ1aWxkDQoraWYgIiUxIiBFUVUgIiIgZ290byBoZWxwDQoraWYgIiUxIiBFUVUgImhlbHAiIGdvdG8gaGVscA0KK2lmICIlMSIgRVFVICJjaGVjayIgZ290byBjaGVjaw0KK2lmICIlMSIgRVFVICJzZXJ2ZSIgZ290byBzZXJ2ZQ0KK2lmICIlMSIgPT0gImNsZWFuIiAoDQorICAgIHJtZGlyIC9xIC9zICVCVUlMRERJUiUNCisgICAgZ290byBlbmQNCispDQorDQorJVNQSElOWEJVSUxEJSAyPiBudWwNCitpZiBlcnJvcmxldmVsIDkwMDkgKA0KKyAgICBlY2hvLg0KKyAgICBlY2hvLlRoZSAnc3BoaW54LWJ1aWxkJyBjb21tYW5kIHdhcyBub3QgZm91bmQuIE1ha2Ugc3VyZSB5b3UgaGF2ZSBTcGhpbngNCisgICAgZWNoby5pbnN0YWxsZWQsIHRoZW4gc2V0IHRoZSBTUEhJTlhCVUlMRCBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBwb2ludA0KKyAgICBlY2hvLnRvIHRoZSBmdWxsIHBhdGggb2YgdGhlICdzcGhpbngtYnVpbGQnIGV4ZWN1dGFibGUuIEFsdGVybmF0aXZlbHkgeW91DQorICAgIGVjaG8ubWF5IGFkZCB0aGUgU3BoaW54IGRpcmVjdG9yeSB0byBQQVRILg0KKyAgICBlY2hvLg0KKyAgICBlY2hvLklmIHlvdSBkb24ndCBoYXZlIFNwaGlueCBpbnN0YWxsZWQsIGdyYWIgaXQgZnJvbQ0KKyAgICBlY2hvLmh0dHA6Ly9zcGhpbngtZG9jLm9yZy8NCisgICAgZ290byBlbmQNCispDQorDQorcmVtIFRhcmdldHMgdGhhdCBkbyByZXF1aXJlIHNwaGlueC1idWlsZCBhbmQgaGF2ZSB0aGVpciBvd24gbGFiZWwNCitpZiAiJTEiIEVRVSAiaHRtbHZpZXciIGdvdG8gaHRtbHZpZXcNCisNCityZW0gRXZlcnl0aGluZyBlbHNlDQorZ290byBidWlsZA0KKw0KKzpoZWxwDQorZWNoby51c2FnZTogJXRoaXMlIEJVSUxERVIgW2ZpbGVuYW1lIC4uLl0NCitlY2hvLg0KK2VjaG8uQ2FsbCAldGhpcyUgd2l0aCB0aGUgZGVzaXJlZCBTcGhpbnggYnVpbGRlciBhcyB0aGUgZmlyc3QgYXJndW1lbnQsIGUuZy4NCitlY2hvLmBgJXRoaXMlIGh0bWxgYCBvciBgYCV0aGlzJSBkb2N0ZXN0YGAuICBJbnRlcmVzdGluZyB0YXJnZXRzIHRoYXQgYXJlDQorZWNoby5hbHdheXMgYXZhaWxhYmxlIGluY2x1ZGU6DQorZWNoby4NCitlY2hvLiAgIFByb3ZpZGVkIGJ5IFNwaGlueDoNCitlY2hvLiAgICAgIGh0bWwsIGh0bWxoZWxwLCBsYXRleCwgdGV4dA0KK2VjaG8uICAgICAgc3VzcGljaW91cywgbGlua2NoZWNrLCBjaGFuZ2VzLCBkb2N0ZXN0DQorZWNoby4gICBQcm92aWRlZCBieSB0aGlzIHNjcmlwdDoNCitlY2hvLiAgICAgIGNsZWFuLCBjaGVjaywgc2VydmUsIGh0bWx2aWV3DQorZWNoby4NCitlY2hvLkFsbCBhcmd1bWVudHMgcGFzdCB0aGUgZmlyc3Qgb25lIGFyZSBwYXNzZWQgdGhyb3VnaCB0byBzcGhpbngtYnVpbGQgYXMNCitlY2hvLmZpbGVuYW1lcyB0byBidWlsZCBvciBhcmUgaWdub3JlZC4gIFNlZSBSRUFETUUudHh0IGluIHRoaXMgZGlyZWN0b3J5IG9yDQorZWNoby50aGUgZG9jdW1lbnRhdGlvbiBmb3IgeW91ciB2ZXJzaW9uIG9mIFNwaGlueCBmb3IgbW9yZSBleGhhdXN0aXZlIGxpc3RzDQorZWNoby5vZiBhdmFpbGFibGUgdGFyZ2V0cyBhbmQgZGVzY3JpcHRpb25zIG9mIGVhY2guDQorZWNoby4NCitlY2hvLlRoaXMgc2NyaXB0IGFzc3VtZXMgdGhhdCB0aGUgU1BISU5YQlVJTEQgZW52aXJvbm1lbnQgdmFyaWFibGUgY29udGFpbnMNCitlY2hvLmEgbGVnaXRpbWF0ZSBjb21tYW5kIGZvciBjYWxsaW5nIHNwaGlueC1idWlsZCwgb3IgdGhhdCBzcGhpbngtYnVpbGQgaXMNCitlY2hvLm9uIHlvdXIgUEFUSCBpZiBTUEhJTlhCVUlMRCBpcyBub3Qgc2V0LiAgT3B0aW9ucyBmb3Igc3BoaW54LWJ1aWxkIGNhbg0KK2VjaG8uYmUgcGFzc2VkIGJ5IHNldHRpbmcgdGhlIFNQSElOWE9QVFMgZW52aXJvbm1lbnQgdmFyaWFibGUuDQorZ290byBlbmQNCisNCis6YnVpbGQNCitpZiBOT1QgIiVQQVBFUiUiID09ICIiICgNCisgICAgc2V0IFNQSElOWE9QVFM9LUQgbGF0ZXhfcGFwZXJfc2l6ZT0lUEFQRVIlICVTUEhJTlhPUFRTJQ0KKykNCitjbWQgL0MgJVNQSElOWEJVSUxEJSAlU1BISU5YT1BUUyUgLWIlMSAtZGJ1aWxkXGRvY3RyZWVzIC4gJUJVSUxERElSJVwlKg0KKw0KK2lmICIlMSIgRVFVICJodG1saGVscCIgKA0KKyAgICBpZiAgbm90IGV4aXN0ICIlSFRNTEhFTFAlIiAoDQorICAgICAgICBlY2hvLg0KKyAgICAgICAgZWNoby5UaGUgSFRNTCBIZWxwIFdvcmtzaG9wIHdhcyBub3QgZm91bmQuICBTZXQgdGhlIEhUTUxIRUxQIHZhcmlhYmxlDQorICAgICAgICBlY2hvLnRvIHRoZSBwYXRoIHRvIGhoYy5leGUgb3IgZG93bmxvYWQgYW5kIGluc3RhbGwgaXQgZnJvbQ0KKyAgICAgICAgZWNoby5odHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvbXM2Njk5ODUNCisgICAgICAgIHJlbSBTZXQgZXJyb3JsZXZlbCB0byAxIGFuZCBleGl0DQorICAgICAgICBjbWQgL0MgZXhpdCAvYiAxDQorICAgICAgICBnb3RvIGVuZA0KKyAgICApDQorICAgIGNtZCAvQyAiJUhUTUxIRUxQJSIgYnVpbGRcaHRtbGhlbHBccHl0aG9uJURJU1RWRVJTSU9OOi49JS5oaHANCisgICAgcmVtIGhoYy5leGUgc2VlbXMgdG8gYWx3YXlzIGV4aXQgd2l0aCBjb2RlIDEsIHJlc2V0IHRvIDAgZm9yIGxlc3MgdGhhbiAyDQorICAgIGlmIG5vdCBlcnJvcmxldmVsIDIgY21kIC9DIGV4aXQgL2IgMA0KKykNCisNCitlY2hvLg0KK2lmIGVycm9ybGV2ZWwgMSAoDQorICAgIGVjaG8uQnVpbGQgZmFpbGVkIChleGl0IGNvZGUgJUVSUk9STEVWRUwlXiksIGNoZWNrIGZvciBlcnJvciBtZXNzYWdlcw0KKyAgICBlY2hvLmFib3ZlLiAgQW55IG91dHB1dCB3aWxsIGJlIGZvdW5kIGluICVCVUlMRERJUiVcJTENCispIGVsc2UgKA0KKyAgICBlY2hvLkJ1aWxkIHN1Y2NlZWRlZC4gQWxsIG91dHB1dCBzaG91bGQgYmUgaW4gJUJVSUxERElSJVwlMQ0KKykNCitnb3RvIGVuZA0KKw0KKzpodG1sdmlldw0KK2lmIE5PVCAiJTIiIEVRVSAiIiAoDQorICAgIGVjaG8uQ2FuJ3Qgc3BlY2lmeSBmaWxlbmFtZXMgdG8gYnVpbGQgd2l0aCBodG1sdmlldyB0YXJnZXQsIGlnbm9yaW5nLg0KKykNCitjbWQgL0MgJXRoaXMlIGh0bWwNCisNCitpZiBFWElTVCAlQlVJTERESVIlXGh0bWxcaW5kZXguaHRtbCAoDQorICAgIGVjaG8uT3BlbmluZyAlQlVJTERESVIlXGh0bWxcaW5kZXguaHRtbCBpbiB0aGUgZGVmYXVsdCB3ZWIgYnJvd3Nlci4uLg0KKyAgICBzdGFydCAlQlVJTERESVIlXGh0bWxcaW5kZXguaHRtbA0KKykNCisNCitnb3RvIGVuZA0KKw0KKzpjaGVjaw0KK2NtZCAvQyAlUFlUSE9OJSB0b29sc1xyc3RsaW50LnB5IC1pIHRvb2xzDQorZ290byBlbmQNCisNCis6c2VydmUNCitjbWQgL0MgJVBZVEhPTiUgLi5cVG9vbHNcc2NyaXB0c1xzZXJ2ZS5weSAlQlVJTERESVIlXGh0bWwNCitnb3RvIGVuZA0KKw0KKzplbmQNCitwb3BkDQpkaWZmIC0tZ2l0IGEvRG9jL3JlZmVyZW5jZS9jb21wb3VuZF9zdG10cy5yc3QgYi9Eb2MvcmVmZXJlbmNlL2NvbXBvdW5kX3N0bXRzLnJzdAppbmRleCA4YWZjNjllLi41ZGQxN2ViIDEwMDY0NAotLS0gYS9Eb2MvcmVmZXJlbmNlL2NvbXBvdW5kX3N0bXRzLnJzdAorKysgYi9Eb2MvcmVmZXJlbmNlL2NvbXBvdW5kX3N0bXRzLnJzdApAQCAtMjIsMTQgKzIyLDE0IEBACiAgICBzaW5nbGU6IGNsYXVzZQogICAgc2luZ2xlOiBzdWl0ZQogCi1Db21wb3VuZCBzdGF0ZW1lbnRzIGNvbnNpc3Qgb2Ygb25lIG9yIG1vcmUgJ2NsYXVzZXMuJyAgQSBjbGF1c2UgY29uc2lzdHMgb2YgYQorQSBjb21wb3VuZCBzdGF0ZW1lbnQgY29uc2lzdHMgb2Ygb25lIG9yIG1vcmUgJ2NsYXVzZXMuJyAgQSBjbGF1c2UgY29uc2lzdHMgb2YgYQogaGVhZGVyIGFuZCBhICdzdWl0ZS4nICBUaGUgY2xhdXNlIGhlYWRlcnMgb2YgYSBwYXJ0aWN1bGFyIGNvbXBvdW5kIHN0YXRlbWVudCBhcmUKIGFsbCBhdCB0aGUgc2FtZSBpbmRlbnRhdGlvbiBsZXZlbC4gRWFjaCBjbGF1c2UgaGVhZGVyIGJlZ2lucyB3aXRoIGEgdW5pcXVlbHkKIGlkZW50aWZ5aW5nIGtleXdvcmQgYW5kIGVuZHMgd2l0aCBhIGNvbG9uLiAgQSBzdWl0ZSBpcyBhIGdyb3VwIG9mIHN0YXRlbWVudHMKIGNvbnRyb2xsZWQgYnkgYSBjbGF1c2UuICBBIHN1aXRlIGNhbiBiZSBvbmUgb3IgbW9yZSBzZW1pY29sb24tc2VwYXJhdGVkIHNpbXBsZQogc3RhdGVtZW50cyBvbiB0aGUgc2FtZSBsaW5lIGFzIHRoZSBoZWFkZXIsIGZvbGxvd2luZyB0aGUgaGVhZGVyJ3MgY29sb24sIG9yIGl0CiBjYW4gYmUgb25lIG9yIG1vcmUgaW5kZW50ZWQgc3RhdGVtZW50cyBvbiBzdWJzZXF1ZW50IGxpbmVzLiAgT25seSB0aGUgbGF0dGVyCi1mb3JtIG9mIHN1aXRlIGNhbiBjb250YWluIG5lc3RlZCBjb21wb3VuZCBzdGF0ZW1lbnRzOyB0aGUgZm9sbG93aW5nIGlzIGlsbGVnYWwsCitmb3JtIG9mIGEgc3VpdGUgY2FuIGNvbnRhaW4gbmVzdGVkIGNvbXBvdW5kIHN0YXRlbWVudHM7IHRoZSBmb2xsb3dpbmcgaXMgaWxsZWdhbCwKIG1vc3RseSBiZWNhdXNlIGl0IHdvdWxkbid0IGJlIGNsZWFyIHRvIHdoaWNoIDprZXl3b3JkOmBpZmAgY2xhdXNlIGEgZm9sbG93aW5nCiA6a2V5d29yZDpgZWxzZWAgY2xhdXNlIHdvdWxkIGJlbG9uZzo6CiAKQEAgLTE1Niw4ICsxNTYsOCBAQAogCiBUaGUgZXhwcmVzc2lvbiBsaXN0IGlzIGV2YWx1YXRlZCBvbmNlOyBpdCBzaG91bGQgeWllbGQgYW4gaXRlcmFibGUgb2JqZWN0LiAgQW4KIGl0ZXJhdG9yIGlzIGNyZWF0ZWQgZm9yIHRoZSByZXN1bHQgb2YgdGhlIGBgZXhwcmVzc2lvbl9saXN0YGAuICBUaGUgc3VpdGUgaXMKLXRoZW4gZXhlY3V0ZWQgb25jZSBmb3IgZWFjaCBpdGVtIHByb3ZpZGVkIGJ5IHRoZSBpdGVyYXRvciwgaW4gdGhlIG9yZGVyIG9mCi1hc2NlbmRpbmcgaW5kaWNlcy4gIEVhY2ggaXRlbSBpbiB0dXJuIGlzIGFzc2lnbmVkIHRvIHRoZSB0YXJnZXQgbGlzdCB1c2luZyB0aGUKK3RoZW4gZXhlY3V0ZWQgb25jZSBmb3IgZWFjaCBpdGVtIHByb3ZpZGVkIGJ5IHRoZSBpdGVyYXRvciwgaW4gdGhlIG9yZGVyIHJldHVybmVkCitieSB0aGUgaXRlcmF0b3IuICBFYWNoIGl0ZW0gaW4gdHVybiBpcyBhc3NpZ25lZCB0byB0aGUgdGFyZ2V0IGxpc3QgdXNpbmcgdGhlCiBzdGFuZGFyZCBydWxlcyBmb3IgYXNzaWdubWVudHMgKHNlZSA6cmVmOmBhc3NpZ25tZW50YCksIGFuZCB0aGVuIHRoZSBzdWl0ZSBpcwogZXhlY3V0ZWQuICBXaGVuIHRoZSBpdGVtcyBhcmUgZXhoYXVzdGVkICh3aGljaCBpcyBpbW1lZGlhdGVseSB3aGVuIHRoZSBzZXF1ZW5jZQogaXMgZW1wdHkgb3IgYW4gaXRlcmF0b3IgcmFpc2VzIGEgOmV4YzpgU3RvcEl0ZXJhdGlvbmAgZXhjZXB0aW9uKSwgdGhlIHN1aXRlIGluCkBAIC0xNzAsMTcgKzE3MCwyNSBAQAogQSA6a2V5d29yZDpgYnJlYWtgIHN0YXRlbWVudCBleGVjdXRlZCBpbiB0aGUgZmlyc3Qgc3VpdGUgdGVybWluYXRlcyB0aGUgbG9vcAogd2l0aG91dCBleGVjdXRpbmcgdGhlIDprZXl3b3JkOmBlbHNlYCBjbGF1c2UncyBzdWl0ZS4gIEEgOmtleXdvcmQ6YGNvbnRpbnVlYAogc3RhdGVtZW50IGV4ZWN1dGVkIGluIHRoZSBmaXJzdCBzdWl0ZSBza2lwcyB0aGUgcmVzdCBvZiB0aGUgc3VpdGUgYW5kIGNvbnRpbnVlcwotd2l0aCB0aGUgbmV4dCBpdGVtLCBvciB3aXRoIHRoZSA6a2V5d29yZDpgZWxzZWAgY2xhdXNlIGlmIHRoZXJlIHdhcyBubyBuZXh0Cit3aXRoIHRoZSBuZXh0IGl0ZW0sIG9yIHdpdGggdGhlIDprZXl3b3JkOmBlbHNlYCBjbGF1c2UgaWYgdGhlcmUgaXMgbm8gbmV4dAogaXRlbS4KIAotVGhlIHN1aXRlIG1heSBhc3NpZ24gdG8gdGhlIHZhcmlhYmxlKHMpIGluIHRoZSB0YXJnZXQgbGlzdDsgdGhpcyBkb2VzIG5vdCBhZmZlY3QKLXRoZSBuZXh0IGl0ZW0gYXNzaWduZWQgdG8gaXQuCitUaGUgZm9yLWxvb3AgbWFrZXMgYXNzaWdubWVudHMgdG8gdGhlIHZhcmlhYmxlcyhzKSBpbiB0aGUgdGFyZ2V0IGxpc3QuCitUaGlzIG92ZXJ3cml0ZXMgYWxsIHByZXZpb3VzIGFzc2lnbm1lbnRzIHRvIHRob3NlIHZhcmlhYmxlcyBpbmNsdWRpbmcKK3Rob3NlIG1hZGUgaW4gdGhlIHN1aXRlIG9mIHRoZSBmb3ItbG9vcDo6CisKKyAgIGZvciBpIGluIHJhbmdlKDEwKToKKyAgICAgICBwcmludChpKQorICAgICAgIGkgPSA1ICAgICAgICAgICAgICMgdGhpcyB3aWxsIG5vdCBhZmZlY3QgdGhlIGZvci1sb29wCisgICAgICAgICAgICAgICAgICAgICAgICAgIyBiZWNhdXNlIGkgd2lsbCBiZSBvdmVyd3JpdHRlbiB3aXRoIHRoZSBuZXh0CisgICAgICAgICAgICAgICAgICAgICAgICAgIyBpbmRleCBpbiB0aGUgcmFuZ2UKKwogCiAuLiBpbmRleDo6CiAgICBidWlsdGluOiByYW5nZQogCiBOYW1lcyBpbiB0aGUgdGFyZ2V0IGxpc3QgYXJlIG5vdCBkZWxldGVkIHdoZW4gdGhlIGxvb3AgaXMgZmluaXNoZWQsIGJ1dCBpZiB0aGUKLXNlcXVlbmNlIGlzIGVtcHR5LCBpdCB3aWxsIG5vdCBoYXZlIGJlZW4gYXNzaWduZWQgdG8gYXQgYWxsIGJ5IHRoZSBsb29wLiAgSGludDoKK3NlcXVlbmNlIGlzIGVtcHR5LCB0aGV5IHdpbGwgbm90IGhhdmUgYmVlbiBhc3NpZ25lZCB0byBhdCBhbGwgYnkgdGhlIGxvb3AuICBIaW50OgogdGhlIGJ1aWx0LWluIGZ1bmN0aW9uIDpmdW5jOmByYW5nZWAgcmV0dXJucyBhbiBpdGVyYXRvciBvZiBpbnRlZ2VycyBzdWl0YWJsZSB0bwogZW11bGF0ZSB0aGUgZWZmZWN0IG9mIFBhc2NhbCdzIGBgZm9yIGkgOj0gYSB0byBiIGRvYGA7IGUuZy4sIGBgbGlzdChyYW5nZSgzKSlgYAogcmV0dXJucyB0aGUgbGlzdCBgYFswLCAxLCAyXWBgLgpAQCAtMjI2LDcgKzIzNCw3IEBACiAuLiBwcm9kdWN0aW9ubGlzdDo6CiAgICB0cnlfc3RtdDogdHJ5MV9zdG10IHwgdHJ5Ml9zdG10CiAgICB0cnkxX3N0bXQ6ICJ0cnkiICI6IiBgc3VpdGVgCi0gICAgICAgICAgICA6ICgiZXhjZXB0IiBbYGV4cHJlc3Npb25gIFsiYXMiIGB0YXJnZXRgXV0gIjoiIGBzdWl0ZWApKworICAgICAgICAgICAgOiAoImV4Y2VwdCIgW2BleHByZXNzaW9uYCBbImFzIiBgaWRlbnRpZmllcmBdXSAiOiIgYHN1aXRlYCkrCiAgICAgICAgICAgICA6IFsiZWxzZSIgIjoiIGBzdWl0ZWBdCiAgICAgICAgICAgICA6IFsiZmluYWxseSIgIjoiIGBzdWl0ZWBdCiAgICB0cnkyX3N0bXQ6ICJ0cnkiICI6IiBgc3VpdGVgCkBAIC0yODQsNyArMjkyLDcgQEAKICAgIG9iamVjdDogdHJhY2ViYWNrCiAKIEJlZm9yZSBhbiBleGNlcHQgY2xhdXNlJ3Mgc3VpdGUgaXMgZXhlY3V0ZWQsIGRldGFpbHMgYWJvdXQgdGhlIGV4Y2VwdGlvbiBhcmUKLXN0b3JlZCBpbiB0aGUgOm1vZDpgc3lzYCBtb2R1bGUgYW5kIGNhbiBiZSBhY2Nlc3MgdmlhIDpmdW5jOmBzeXMuZXhjX2luZm9gLgorc3RvcmVkIGluIHRoZSA6bW9kOmBzeXNgIG1vZHVsZSBhbmQgY2FuIGJlIGFjY2Vzc2VkIHZpYSA6ZnVuYzpgc3lzLmV4Y19pbmZvYC4KIDpmdW5jOmBzeXMuZXhjX2luZm9gIHJldHVybnMgYSAzLXR1cGxlIGNvbnNpc3Rpbmcgb2YgdGhlIGV4Y2VwdGlvbiBjbGFzcywgdGhlCiBleGNlcHRpb24gaW5zdGFuY2UgYW5kIGEgdHJhY2ViYWNrIG9iamVjdCAoc2VlIHNlY3Rpb24gOnJlZjpgdHlwZXNgKSBpZGVudGlmeWluZwogdGhlIHBvaW50IGluIHRoZSBwcm9ncmFtIHdoZXJlIHRoZSBleGNlcHRpb24gb2NjdXJyZWQuICA6ZnVuYzpgc3lzLmV4Y19pbmZvYApAQCAtMzEzLDE0ICszMjEsMTQgQEAKIElmIHRoZSA6a2V5d29yZDpgZmluYWxseWAgY2xhdXNlIGV4ZWN1dGVzIGEgOmtleXdvcmQ6YHJldHVybmAgb3IgOmtleXdvcmQ6YGJyZWFrYAogc3RhdGVtZW50LCB0aGUgc2F2ZWQgZXhjZXB0aW9uIGlzIGRpc2NhcmRlZDo6CiAKLSAgICBkZWYgZigpOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICAxLzAKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIHJldHVybiA0MgotCi0gICAgPj4+IGYoKQotICAgIDQyCisgICA+Pj4gZGVmIGYoKToKKyAgIC4uLiAgICAgdHJ5OgorICAgLi4uICAgICAgICAgMS8wCisgICAuLi4gICAgIGZpbmFsbHk6CisgICAuLi4gICAgICAgICByZXR1cm4gNDIKKyAgIC4uLgorICAgPj4+IGYoKQorICAgNDIKIAogVGhlIGV4Y2VwdGlvbiBpbmZvcm1hdGlvbiBpcyBub3QgYXZhaWxhYmxlIHRvIHRoZSBwcm9ncmFtIGR1cmluZyBleGVjdXRpb24gb2YKIHRoZSA6a2V5d29yZDpgZmluYWxseWAgY2xhdXNlLgpAQCAtMzM3LDYgKzM0NSwyMCBAQAogcmVhc29uIGlzIGEgcHJvYmxlbSB3aXRoIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIC0tLSB0aGlzIHJlc3RyaWN0aW9uIG1heSBiZQogbGlmdGVkIGluIHRoZSBmdXR1cmUpLgogCitUaGUgcmV0dXJuIHZhbHVlIG9mIGEgZnVuY3Rpb24gaXMgZGV0ZXJtaW5lZCBieSB0aGUgbGFzdCA6a2V5d29yZDpgcmV0dXJuYAorc3RhdGVtZW50IGV4ZWN1dGVkLiAgU2luY2UgdGhlIDprZXl3b3JkOmBmaW5hbGx5YCBjbGF1c2UgYWx3YXlzIGV4ZWN1dGVzLCBhCis6a2V5d29yZDpgcmV0dXJuYCBzdGF0ZW1lbnQgZXhlY3V0ZWQgaW4gdGhlIDprZXl3b3JkOmBmaW5hbGx5YCBjbGF1c2Ugd2lsbAorYWx3YXlzIGJlIHRoZSBsYXN0IG9uZSBleGVjdXRlZDo6CisKKyAgID4+PiBkZWYgZm9vKCk6CisgICAuLi4gICAgIHRyeToKKyAgIC4uLiAgICAgICAgIHJldHVybiAndHJ5JworICAgLi4uICAgICBmaW5hbGx5OgorICAgLi4uICAgICAgICAgcmV0dXJuICdmaW5hbGx5JworICAgLi4uCisgICA+Pj4gZm9vKCkKKyAgICdmaW5hbGx5JworCiBBZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9uIGV4Y2VwdGlvbnMgY2FuIGJlIGZvdW5kIGluIHNlY3Rpb24gOnJlZjpgZXhjZXB0aW9uc2AsCiBhbmQgaW5mb3JtYXRpb24gb24gdXNpbmcgdGhlIDprZXl3b3JkOmByYWlzZWAgc3RhdGVtZW50IHRvIGdlbmVyYXRlIGV4Y2VwdGlvbnMKIG1heSBiZSBmb3VuZCBpbiBzZWN0aW9uIDpyZWY6YHJhaXNlYC4KQEAgLTM0OCw3ICszNzAsOSBAQAogVGhlIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKLS4uIGluZGV4Ojogc3RhdGVtZW50OiB3aXRoCisuLiBpbmRleDo6CisgICAgc3RhdGVtZW50OiB3aXRoCisgICAgc2luZ2xlOiBhczsgd2l0aCBzdGF0ZW1lbnQKIAogVGhlIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQgaXMgdXNlZCB0byB3cmFwIHRoZSBleGVjdXRpb24gb2YgYSBibG9jayB3aXRoCiBtZXRob2RzIGRlZmluZWQgYnkgYSBjb250ZXh0IG1hbmFnZXIgKHNlZSBzZWN0aW9uIDpyZWY6YGNvbnRleHQtbWFuYWdlcnNgKS4KQEAgLTQ0NSw3ICs0NjksNyBAQAogICAgZGVjb3JhdG9yOiAiQCIgYGRvdHRlZF9uYW1lYCBbIigiIFtgcGFyYW1ldGVyX2xpc3RgIFsiLCJdXSAiKSJdIE5FV0xJTkUKICAgIGRvdHRlZF9uYW1lOiBgaWRlbnRpZmllcmAgKCIuIiBgaWRlbnRpZmllcmApKgogICAgcGFyYW1ldGVyX2xpc3Q6IChgZGVmcGFyYW1ldGVyYCAiLCIpKgotICAgICAgICAgICAgICAgICA6ICggIioiIFtgcGFyYW1ldGVyYF0gKCIsIiBgZGVmcGFyYW1ldGVyYCkqIFsiLCIgIioqIiBgcGFyYW1ldGVyYF0KKyAgICAgICAgICAgICAgICAgOiB8ICIqIiBbYHBhcmFtZXRlcmBdICgiLCIgYGRlZnBhcmFtZXRlcmApKiBbIiwiICIqKiIgYHBhcmFtZXRlcmBdCiAgICAgICAgICAgICAgICAgIDogfCAiKioiIGBwYXJhbWV0ZXJgCiAgICAgICAgICAgICAgICAgIDogfCBgZGVmcGFyYW1ldGVyYCBbIiwiXSApCiAgICBwYXJhbWV0ZXI6IGBpZGVudGlmaWVyYCBbIjoiIGBleHByZXNzaW9uYF0KQEAgLTQ5MywxNCArNTE3LDE1IEBACiB2YWx1ZSwgYWxsIGZvbGxvd2luZyBwYXJhbWV0ZXJzIHVwIHVudGlsIHRoZSAiYGAqYGAiIG11c3QgYWxzbyBoYXZlIGEgZGVmYXVsdAogdmFsdWUgLS0tIHRoaXMgaXMgYSBzeW50YWN0aWMgcmVzdHJpY3Rpb24gdGhhdCBpcyBub3QgZXhwcmVzc2VkIGJ5IHRoZSBncmFtbWFyLgogCi0qKkRlZmF1bHQgcGFyYW1ldGVyIHZhbHVlcyBhcmUgZXZhbHVhdGVkIHdoZW4gdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24gaXMKLWV4ZWN1dGVkLioqIFRoaXMgbWVhbnMgdGhhdCB0aGUgZXhwcmVzc2lvbiBpcyBldmFsdWF0ZWQgb25jZSwgd2hlbiB0aGUgZnVuY3Rpb24KLWlzIGRlZmluZWQsIGFuZCB0aGF0IHRoZSBzYW1lICJwcmUtY29tcHV0ZWQiIHZhbHVlIGlzIHVzZWQgZm9yIGVhY2ggY2FsbC4gIFRoaXMKLWlzIGVzcGVjaWFsbHkgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgd2hlbiBhIGRlZmF1bHQgcGFyYW1ldGVyIGlzIGEgbXV0YWJsZQotb2JqZWN0LCBzdWNoIGFzIGEgbGlzdCBvciBhIGRpY3Rpb25hcnk6IGlmIHRoZSBmdW5jdGlvbiBtb2RpZmllcyB0aGUgb2JqZWN0Ci0oZS5nLiBieSBhcHBlbmRpbmcgYW4gaXRlbSB0byBhIGxpc3QpLCB0aGUgZGVmYXVsdCB2YWx1ZSBpcyBpbiBlZmZlY3QgbW9kaWZpZWQuCi1UaGlzIGlzIGdlbmVyYWxseSBub3Qgd2hhdCB3YXMgaW50ZW5kZWQuICBBIHdheSBhcm91bmQgdGhpcyBpcyB0byB1c2UgYGBOb25lYGAKLWFzIHRoZSBkZWZhdWx0LCBhbmQgZXhwbGljaXRseSB0ZXN0IGZvciBpdCBpbiB0aGUgYm9keSBvZiB0aGUgZnVuY3Rpb24sIGUuZy46OgorKipEZWZhdWx0IHBhcmFtZXRlciB2YWx1ZXMgYXJlIGV2YWx1YXRlZCBmcm9tIGxlZnQgdG8gcmlnaHQgd2hlbiB0aGUgZnVuY3Rpb24KK2RlZmluaXRpb24gaXMgZXhlY3V0ZWQuKiogVGhpcyBtZWFucyB0aGF0IHRoZSBleHByZXNzaW9uIGlzIGV2YWx1YXRlZCBvbmNlLCB3aGVuCit0aGUgZnVuY3Rpb24gaXMgZGVmaW5lZCwgYW5kIHRoYXQgdGhlIHNhbWUgInByZS1jb21wdXRlZCIgdmFsdWUgaXMgdXNlZCBmb3IgZWFjaAorY2FsbC4gIFRoaXMgaXMgZXNwZWNpYWxseSBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB3aGVuIGEgZGVmYXVsdCBwYXJhbWV0ZXIgaXMgYQorbXV0YWJsZSBvYmplY3QsIHN1Y2ggYXMgYSBsaXN0IG9yIGEgZGljdGlvbmFyeTogaWYgdGhlIGZ1bmN0aW9uIG1vZGlmaWVzIHRoZQorb2JqZWN0IChlLmcuIGJ5IGFwcGVuZGluZyBhbiBpdGVtIHRvIGEgbGlzdCksIHRoZSBkZWZhdWx0IHZhbHVlIGlzIGluIGVmZmVjdAorbW9kaWZpZWQuICBUaGlzIGlzIGdlbmVyYWxseSBub3Qgd2hhdCB3YXMgaW50ZW5kZWQuICBBIHdheSBhcm91bmQgdGhpcyBpcyB0byB1c2UKK2BgTm9uZWBgIGFzIHRoZSBkZWZhdWx0LCBhbmQgZXhwbGljaXRseSB0ZXN0IGZvciBpdCBpbiB0aGUgYm9keSBvZiB0aGUgZnVuY3Rpb24sCitlLmcuOjoKIAogICAgZGVmIHdoYXRzX29uX3RoZV90ZWxseShwZW5ndWluPU5vbmUpOgogICAgICAgIGlmIHBlbmd1aW4gaXMgTm9uZToKZGlmZiAtLWdpdCBhL0RvYy9yZWZlcmVuY2UvZGF0YW1vZGVsLnJzdCBiL0RvYy9yZWZlcmVuY2UvZGF0YW1vZGVsLnJzdAppbmRleCBlNWU1M2MxLi4xNTYwYWQwIDEwMDY0NAotLS0gYS9Eb2MvcmVmZXJlbmNlL2RhdGFtb2RlbC5yc3QKKysrIGIvRG9jL3JlZmVyZW5jZS9kYXRhbW9kZWwucnN0CkBAIC03Nyw3ICs3Nyw3IEBACiAgICBtb2R1bGUgZm9yIGluZm9ybWF0aW9uIG9uIGNvbnRyb2xsaW5nIHRoZSBjb2xsZWN0aW9uIG9mIGN5Y2xpYyBnYXJiYWdlLgogICAgT3RoZXIgaW1wbGVtZW50YXRpb25zIGFjdCBkaWZmZXJlbnRseSBhbmQgQ1B5dGhvbiBtYXkgY2hhbmdlLgogICAgRG8gbm90IGRlcGVuZCBvbiBpbW1lZGlhdGUgZmluYWxpemF0aW9uIG9mIG9iamVjdHMgd2hlbiB0aGV5IGJlY29tZQotICAgdW5yZWFjaGFibGUgKGV4OiBhbHdheXMgY2xvc2UgZmlsZXMpLgorICAgdW5yZWFjaGFibGUgKHNvIHlvdSBzaG91bGQgYWx3YXlzIGNsb3NlIGZpbGVzIGV4cGxpY2l0bHkpLgogCiBOb3RlIHRoYXQgdGhlIHVzZSBvZiB0aGUgaW1wbGVtZW50YXRpb24ncyB0cmFjaW5nIG9yIGRlYnVnZ2luZyBmYWNpbGl0aWVzIG1heQoga2VlcCBvYmplY3RzIGFsaXZlIHRoYXQgd291bGQgbm9ybWFsbHkgYmUgY29sbGVjdGFibGUuIEFsc28gbm90ZSB0aGF0IGNhdGNoaW5nCkBAIC0xNTQsMTEgKzE1NCwxNiBAQAogCiAgICBUaGlzIHR5cGUgaGFzIGEgc2luZ2xlIHZhbHVlLiAgVGhlcmUgaXMgYSBzaW5nbGUgb2JqZWN0IHdpdGggdGhpcyB2YWx1ZS4gVGhpcwogICAgb2JqZWN0IGlzIGFjY2Vzc2VkIHRocm91Z2ggdGhlIGJ1aWx0LWluIG5hbWUgYGBOb3RJbXBsZW1lbnRlZGBgLiBOdW1lcmljIG1ldGhvZHMKLSAgIGFuZCByaWNoIGNvbXBhcmlzb24gbWV0aG9kcyBtYXkgcmV0dXJuIHRoaXMgdmFsdWUgaWYgdGhleSBkbyBub3QgaW1wbGVtZW50IHRoZQorICAgYW5kIHJpY2ggY29tcGFyaXNvbiBtZXRob2RzIHNob3VsZCByZXR1cm4gdGhpcyB2YWx1ZSBpZiB0aGV5IGRvIG5vdCBpbXBsZW1lbnQgdGhlCiAgICBvcGVyYXRpb24gZm9yIHRoZSBvcGVyYW5kcyBwcm92aWRlZC4gIChUaGUgaW50ZXJwcmV0ZXIgd2lsbCB0aGVuIHRyeSB0aGUKICAgIHJlZmxlY3RlZCBvcGVyYXRpb24sIG9yIHNvbWUgb3RoZXIgZmFsbGJhY2ssIGRlcGVuZGluZyBvbiB0aGUgb3BlcmF0b3IuKSAgSXRzCiAgICB0cnV0aCB2YWx1ZSBpcyB0cnVlLgogCisgICBTZWUKKyAgIDpyZWY6YGltcGxlbWVudGluZy10aGUtYXJpdGhtZXRpYy1vcGVyYXRpb25zYAorICAgZm9yIG1vcmUgZGV0YWlscy4KKworCiBFbGxpcHNpcwogICAgLi4gaW5kZXg6OiBvYmplY3Q6IEVsbGlwc2lzCiAKQEAgLTIyMiw3ICsyMjcsNyBAQAogICAgICAgYXQgdGhlIG1lcmN5IG9mIHRoZSB1bmRlcmx5aW5nIG1hY2hpbmUgYXJjaGl0ZWN0dXJlIChhbmQgQyBvciBKYXZhCiAgICAgICBpbXBsZW1lbnRhdGlvbikgZm9yIHRoZSBhY2NlcHRlZCByYW5nZSBhbmQgaGFuZGxpbmcgb2Ygb3ZlcmZsb3cuIFB5dGhvbiBkb2VzIG5vdAogICAgICAgc3VwcG9ydCBzaW5nbGUtcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50IG51bWJlcnM7IHRoZSBzYXZpbmdzIGluIHByb2Nlc3NvciBhbmQKLSAgICAgIG1lbW9yeSB1c2FnZSB0aGF0IGFyZSB1c3VhbGx5IHRoZSByZWFzb24gZm9yIHVzaW5nIHRoZXNlIGlzIGR3YXJmZWQgYnkgdGhlCisgICAgICBtZW1vcnkgdXNhZ2UgdGhhdCBhcmUgdXN1YWxseSB0aGUgcmVhc29uIGZvciB1c2luZyB0aGVzZSBhcmUgZHdhcmZlZCBieSB0aGUKICAgICAgIG92ZXJoZWFkIG9mIHVzaW5nIG9iamVjdHMgaW4gUHl0aG9uLCBzbyB0aGVyZSBpcyBubyByZWFzb24gdG8gY29tcGxpY2F0ZSB0aGUKICAgICAgIGxhbmd1YWdlIHdpdGggdHdvIGtpbmRzIG9mIGZsb2F0aW5nIHBvaW50IG51bWJlcnMuCiAKQEAgLTI4NSwxNiArMjkwLDE3IEBACiAgICAgICAgICAgICBzaW5nbGU6IGludGVnZXIKICAgICAgICAgICAgIHNpbmdsZTogVW5pY29kZQogCi0gICAgICAgICBBIHN0cmluZyBpcyBhIHNlcXVlbmNlIG9mIHZhbHVlcyB0aGF0IHJlcHJlc2VudCBVbmljb2RlIGNvZGVwb2ludHMuCi0gICAgICAgICBBbGwgdGhlIGNvZGVwb2ludHMgaW4gcmFuZ2UgYGBVKzAwMDAgLSBVKzEwRkZGRmBgIGNhbiBiZSByZXByZXNlbnRlZAotICAgICAgICAgaW4gYSBzdHJpbmcuICBQeXRob24gZG9lc24ndCBoYXZlIGEgOmM6dHlwZTpgY2hyYCB0eXBlLCBhbmQKLSAgICAgICAgIGV2ZXJ5IGNoYXJhY3RlciBpbiB0aGUgc3RyaW5nIGlzIHJlcHJlc2VudGVkIGFzIGEgc3RyaW5nIG9iamVjdAotICAgICAgICAgd2l0aCBsZW5ndGggYGAxYGAuICBUaGUgYnVpbHQtaW4gZnVuY3Rpb24gOmZ1bmM6YG9yZGAgY29udmVydHMgYQotICAgICAgICAgY2hhcmFjdGVyIHRvIGl0cyBjb2RlcG9pbnQgKGFzIGFuIGludGVnZXIpOyA6ZnVuYzpgY2hyYCBjb252ZXJ0cwotICAgICAgICAgYW4gaW50ZWdlciBpbiByYW5nZSBgYDAgLSAxMEZGRkZgYCB0byB0aGUgY29ycmVzcG9uZGluZyBjaGFyYWN0ZXIuCisgICAgICAgICBBIHN0cmluZyBpcyBhIHNlcXVlbmNlIG9mIHZhbHVlcyB0aGF0IHJlcHJlc2VudCBVbmljb2RlIGNvZGUgcG9pbnRzLgorICAgICAgICAgQWxsIHRoZSBjb2RlIHBvaW50cyBpbiB0aGUgcmFuZ2UgYGBVKzAwMDAgLSBVKzEwRkZGRmBgIGNhbiBiZQorICAgICAgICAgcmVwcmVzZW50ZWQgaW4gYSBzdHJpbmcuICBQeXRob24gZG9lc24ndCBoYXZlIGEgOmM6dHlwZTpgY2hhcmAgdHlwZTsKKyAgICAgICAgIGluc3RlYWQsIGV2ZXJ5IGNvZGUgcG9pbnQgaW4gdGhlIHN0cmluZyBpcyByZXByZXNlbnRlZCBhcyBhIHN0cmluZworICAgICAgICAgb2JqZWN0IHdpdGggbGVuZ3RoIGBgMWBgLiAgVGhlIGJ1aWx0LWluIGZ1bmN0aW9uIDpmdW5jOmBvcmRgCisgICAgICAgICBjb252ZXJ0cyBhIGNvZGUgcG9pbnQgZnJvbSBpdHMgc3RyaW5nIGZvcm0gdG8gYW4gaW50ZWdlciBpbiB0aGUKKyAgICAgICAgIHJhbmdlIGBgMCAtIDEwRkZGRmBgOyA6ZnVuYzpgY2hyYCBjb252ZXJ0cyBhbiBpbnRlZ2VyIGluIHRoZSByYW5nZQorICAgICAgICAgYGAwIC0gMTBGRkZGYGAgdG8gdGhlIGNvcnJlc3BvbmRpbmcgbGVuZ3RoIGBgMWBgIHN0cmluZyBvYmplY3QuCiAgICAgICAgICA6bWV0aDpgc3RyLmVuY29kZWAgY2FuIGJlIHVzZWQgdG8gY29udmVydCBhIDpjbGFzczpgc3RyYCB0bwotICAgICAgICAgOmNsYXNzOmBieXRlc2AgdXNpbmcgdGhlIGdpdmVuIGVuY29kaW5nLCBhbmQgOm1ldGg6YGJ5dGVzLmRlY29kZWAgY2FuCi0gICAgICAgICBiZSB1c2VkIHRvIGFjaGlldmUgdGhlIG9wcG9zaXRlLgorICAgICAgICAgOmNsYXNzOmBieXRlc2AgdXNpbmcgdGhlIGdpdmVuIHRleHQgZW5jb2RpbmcsIGFuZAorICAgICAgICAgOm1ldGg6YGJ5dGVzLmRlY29kZWAgY2FuIGJlIHVzZWQgdG8gYWNoaWV2ZSB0aGUgb3Bwb3NpdGUuCiAKICAgICAgIFR1cGxlcwogICAgICAgICAgLi4gaW5kZXg6OgpAQCAtMzIzLDggKzMyOSw2IEBACiAgICAgICAgICBvYmplY3Q6IG11dGFibGUgc2VxdWVuY2UKICAgICAgICAgIG9iamVjdDogbXV0YWJsZQogICAgICAgICAgcGFpcjogYXNzaWdubWVudDsgc3RhdGVtZW50Ci0gICAgICAgICBzaW5nbGU6IGRlbGV0ZQotICAgICAgICAgc3RhdGVtZW50OiBkZWwKICAgICAgICAgIHNpbmdsZTogc3Vic2NyaXB0aW9uCiAgICAgICAgICBzaW5nbGU6IHNsaWNpbmcKIApAQCAtNDU1LDcgKzQ1OSw4IEBACiAgICAgICArPT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09KwogICAgICAgfCA6YXR0cjpgX19kb2NfX2AgICAgICAgICB8IFRoZSBmdW5jdGlvbidzIGRvY3VtZW50YXRpb24gIHwgV3JpdGFibGUgIHwKICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCBzdHJpbmcsIG9yIGBgTm9uZWBgIGlmICAgICAgICB8ICAgICAgICAgICB8Ci0gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgdW5hdmFpbGFibGUgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfAorICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8IHVuYXZhaWxhYmxlOyBub3QgaW5oZXJpdGVkIGJ5IHwgICAgICAgICAgIHwKKyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCBzdWJjbGFzc2VzICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8CiAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKwogICAgICAgfCA6YXR0cjpgX19uYW1lX19gICAgICAgICB8IFRoZSBmdW5jdGlvbidzIG5hbWUgICAgICAgICAgIHwgV3JpdGFibGUgIHwKICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rCkBAIC03MDksNyArNzE0LDcgQEAKICAgIHdoZXJlIHRoZXJlIGFyZSBtdWx0aXBsZSBpbmhlcml0YW5jZSBwYXRocyBsZWFkaW5nIGJhY2sgdG8gYSBjb21tb24gYW5jZXN0b3IuCiAgICBBZGRpdGlvbmFsIGRldGFpbHMgb24gdGhlIEMzIE1STyB1c2VkIGJ5IFB5dGhvbiBjYW4gYmUgZm91bmQgaW4gdGhlCiAgICBkb2N1bWVudGF0aW9uIGFjY29tcGFueWluZyB0aGUgMi4zIHJlbGVhc2UgYXQKLSAgIGh0dHA6Ly93d3cucHl0aG9uLm9yZy9kb3dubG9hZC9yZWxlYXNlcy8yLjMvbXJvLy4KKyAgIGh0dHBzOi8vd3d3LnB5dGhvbi5vcmcvZG93bmxvYWQvcmVsZWFzZXMvMi4zL21yby8uCiAKICAgIC4uIFhYWDogQ291bGQgd2UgYWRkIHRoYXQgTVJPIGRvYyBhcyBhbiBhcHBlbmRpeCB0byB0aGUgbGFuZ3VhZ2UgcmVmPwogCkBAIC05MzQsNiArOTM5LDIwIEBACiAgICAgICBmcmFtZSkuICBBIGRlYnVnZ2VyIGNhbiBpbXBsZW1lbnQgYSBKdW1wIGNvbW1hbmQgKGFrYSBTZXQgTmV4dCBTdGF0ZW1lbnQpCiAgICAgICBieSB3cml0aW5nIHRvIGZfbGluZW5vLgogCisgICAgICBGcmFtZSBvYmplY3RzIHN1cHBvcnQgb25lIG1ldGhvZDoKKworICAgICAgLi4gbWV0aG9kOjogZnJhbWUuY2xlYXIoKQorCisgICAgICAgICBUaGlzIG1ldGhvZCBjbGVhcnMgYWxsIHJlZmVyZW5jZXMgdG8gbG9jYWwgdmFyaWFibGVzIGhlbGQgYnkgdGhlCisgICAgICAgICBmcmFtZS4gIEFsc28sIGlmIHRoZSBmcmFtZSBiZWxvbmdlZCB0byBhIGdlbmVyYXRvciwgdGhlIGdlbmVyYXRvcgorICAgICAgICAgaXMgZmluYWxpemVkLiAgVGhpcyBoZWxwcyBicmVhayByZWZlcmVuY2UgY3ljbGVzIGludm9sdmluZyBmcmFtZQorICAgICAgICAgb2JqZWN0cyAoZm9yIGV4YW1wbGUgd2hlbiBjYXRjaGluZyBhbiBleGNlcHRpb24gYW5kIHN0b3JpbmcgaXRzCisgICAgICAgICB0cmFjZWJhY2sgZm9yIGxhdGVyIHVzZSkuCisKKyAgICAgICAgIDpleGM6YFJ1bnRpbWVFcnJvcmAgaXMgcmFpc2VkIGlmIHRoZSBmcmFtZSBpcyBjdXJyZW50bHkgZXhlY3V0aW5nLgorCisgICAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogICAgVHJhY2ViYWNrIG9iamVjdHMKICAgICAgIC4uIGluZGV4OjoKICAgICAgICAgIG9iamVjdDogdHJhY2ViYWNrCkBAIC0xMTIzLDE0ICsxMTQyLDE0IEBACiAgICAgICByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBvbiB0aGUgc3RhY2sgZnJhbWUgdGhhdCByYWlzZWQgYW4gdW5oYW5kbGVkCiAgICAgICBleGNlcHRpb24gaW4gaW50ZXJhY3RpdmUgbW9kZSAodGhlIHRyYWNlYmFjayBzdG9yZWQgaW4KICAgICAgIGBgc3lzLmxhc3RfdHJhY2ViYWNrYGAga2VlcHMgdGhlIHN0YWNrIGZyYW1lIGFsaXZlKS4gIFRoZSBmaXJzdCBzaXR1YXRpb24KLSAgICAgIGNhbiBvbmx5IGJlIHJlbWVkaWVkIGJ5IGV4cGxpY2l0bHkgYnJlYWtpbmcgdGhlIGN5Y2xlczsgdGhlIGxhdHRlciB0d28KLSAgICAgIHNpdHVhdGlvbnMgY2FuIGJlIHJlc29sdmVkIGJ5IHN0b3JpbmcgYGBOb25lYGAgaW4gYGBzeXMubGFzdF90cmFjZWJhY2tgYC4KLSAgICAgIENpcmN1bGFyIHJlZmVyZW5jZXMgd2hpY2ggYXJlIGdhcmJhZ2UgYXJlIGRldGVjdGVkIHdoZW4gdGhlIG9wdGlvbiBjeWNsZQotICAgICAgZGV0ZWN0b3IgaXMgZW5hYmxlZCAoaXQncyBvbiBieSBkZWZhdWx0KSwgYnV0IGNhbiBvbmx5IGJlIGNsZWFuZWQgdXAgaWYKLSAgICAgIHRoZXJlIGFyZSBubyBQeXRob24tIGxldmVsIDptZXRoOmBfX2RlbF9fYCBtZXRob2RzIGludm9sdmVkLiBSZWZlciB0byB0aGUKLSAgICAgIGRvY3VtZW50YXRpb24gZm9yIHRoZSA6bW9kOmBnY2AgbW9kdWxlIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGhvdwotICAgICAgOm1ldGg6YF9fZGVsX19gIG1ldGhvZHMgYXJlIGhhbmRsZWQgYnkgdGhlIGN5Y2xlIGRldGVjdG9yLCBwYXJ0aWN1bGFybHkKLSAgICAgIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgYGBnYXJiYWdlYGAgdmFsdWUuCisgICAgICBjYW4gb25seSBiZSByZW1lZGllZCBieSBleHBsaWNpdGx5IGJyZWFraW5nIHRoZSBjeWNsZXM7IHRoZSBzZWNvbmQgY2FuIGJlCisgICAgICByZXNvbHZlZCBieSBmcmVlaW5nIHRoZSByZWZlcmVuY2UgdG8gdGhlIHRyYWNlYmFjayBvYmplY3Qgd2hlbiBpdCBpcyBubworICAgICAgbG9uZ2VyIHVzZWZ1bCwgYW5kIHRoZSB0aGlyZCBjYW4gYmUgcmVzb2x2ZWQgYnkgc3RvcmluZyBgYE5vbmVgYCBpbgorICAgICAgYGBzeXMubGFzdF90cmFjZWJhY2tgYC4KKyAgICAgIENpcmN1bGFyIHJlZmVyZW5jZXMgd2hpY2ggYXJlIGdhcmJhZ2UgYXJlIGRldGVjdGVkIGFuZCBjbGVhbmVkIHVwIHdoZW4KKyAgICAgIHRoZSBjeWNsaWMgZ2FyYmFnZSBjb2xsZWN0b3IgaXMgZW5hYmxlZCAoaXQncyBvbiBieSBkZWZhdWx0KS4gUmVmZXIgdG8gdGhlCisgICAgICBkb2N1bWVudGF0aW9uIGZvciB0aGUgOm1vZDpgZ2NgIG1vZHVsZSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGlzCisgICAgICB0b3BpYy4KIAogICAgLi4gd2FybmluZzo6CiAKQEAgLTEyMTgsNiArMTIzNywxMCBAQAogCiAgICBUaGUgcmV0dXJuIHZhbHVlIG11c3QgYmUgYSBzdHJpbmcgb2JqZWN0LgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVGhlIF9fZm9ybWF0X18gbWV0aG9kIG9mIGBgb2JqZWN0YGAgaXRzZWxmIHJhaXNlcyBhIDpleGM6YFR5cGVFcnJvcmAKKyAgICAgIGlmIHBhc3NlZCBhbnkgbm9uLWVtcHR5IHN0cmluZy4KKwogCiAuLiBfcmljaGNtcGZ1bmNzOgogLi4gbWV0aG9kOjogb2JqZWN0Ll9fbHRfXyhzZWxmLCBvdGhlcikKQEAgLTEyNDMsMTAgKzEyNjYsMTQgQEAKICAgIGNvbnRleHQgKGUuZy4sIGluIHRoZSBjb25kaXRpb24gb2YgYW4gYGBpZmBgIHN0YXRlbWVudCksIFB5dGhvbiB3aWxsIGNhbGwKICAgIDpmdW5jOmBib29sYCBvbiB0aGUgdmFsdWUgdG8gZGV0ZXJtaW5lIGlmIHRoZSByZXN1bHQgaXMgdHJ1ZSBvciBmYWxzZS4KIAotICAgVGhlcmUgYXJlIG5vIGltcGxpZWQgcmVsYXRpb25zaGlwcyBhbW9uZyB0aGUgY29tcGFyaXNvbiBvcGVyYXRvcnMuIFRoZSB0cnV0aAotICAgb2YgYGB4PT15YGAgZG9lcyBub3QgaW1wbHkgdGhhdCBgYHghPXlgYCBpcyBmYWxzZS4gIEFjY29yZGluZ2x5LCB3aGVuCi0gICBkZWZpbmluZyA6bWV0aDpgX19lcV9fYCwgb25lIHNob3VsZCBhbHNvIGRlZmluZSA6bWV0aDpgX19uZV9fYCBzbyB0aGF0IHRoZQotICAgb3BlcmF0b3JzIHdpbGwgYmVoYXZlIGFzIGV4cGVjdGVkLiAgU2VlIHRoZSBwYXJhZ3JhcGggb24gOm1ldGg6YF9faGFzaF9fYCBmb3IKKyAgIEJ5IGRlZmF1bHQsIDptZXRoOmBfX25lX19gIGRlbGVnYXRlcyB0byA6bWV0aDpgX19lcV9fYCBhbmQKKyAgIGludmVydHMgdGhlIHJlc3VsdCB1bmxlc3MgaXQgaXMgYGBOb3RJbXBsZW1lbnRlZGBgLiAgVGhlcmUgYXJlIG5vIG90aGVyCisgICBpbXBsaWVkIHJlbGF0aW9uc2hpcHMgYW1vbmcgdGhlIGNvbXBhcmlzb24gb3BlcmF0b3JzLCBmb3IgZXhhbXBsZSwKKyAgIHRoZSB0cnV0aCBvZiBgYCh4PHkgb3IgeD09eSlgYCBkb2VzIG5vdCBpbXBseSBgYHg8PXlgYC4KKyAgIFRvIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGUgb3JkZXJpbmcgb3BlcmF0aW9ucyBmcm9tIGEgc2luZ2xlIHJvb3Qgb3BlcmF0aW9uLAorICAgc2VlIDpmdW5jOmBmdW5jdG9vbHMudG90YWxfb3JkZXJpbmdgLgorCisgICBTZWUgdGhlIHBhcmFncmFwaCBvbiA6bWV0aDpgX19oYXNoX19gIGZvcgogICAgc29tZSBpbXBvcnRhbnQgbm90ZXMgb24gY3JlYXRpbmcgOnRlcm06YGhhc2hhYmxlYCBvYmplY3RzIHdoaWNoIHN1cHBvcnQKICAgIGN1c3RvbSBjb21wYXJpc29uIG9wZXJhdGlvbnMgYW5kIGFyZSB1c2FibGUgYXMgZGljdGlvbmFyeSBrZXlzLgogCkBAIC0xMjU1LDExICsxMjgyLDExIEBACiAgICByYXRoZXIsIDptZXRoOmBfX2x0X19gIGFuZCA6bWV0aDpgX19ndF9fYCBhcmUgZWFjaCBvdGhlcidzIHJlZmxlY3Rpb24sCiAgICA6bWV0aDpgX19sZV9fYCBhbmQgOm1ldGg6YF9fZ2VfX2AgYXJlIGVhY2ggb3RoZXIncyByZWZsZWN0aW9uLCBhbmQKICAgIDptZXRoOmBfX2VxX19gIGFuZCA6bWV0aDpgX19uZV9fYCBhcmUgdGhlaXIgb3duIHJlZmxlY3Rpb24uCi0KLSAgIEFyZ3VtZW50cyB0byByaWNoIGNvbXBhcmlzb24gbWV0aG9kcyBhcmUgbmV2ZXIgY29lcmNlZC4KLQotICAgVG8gYXV0b21hdGljYWxseSBnZW5lcmF0ZSBvcmRlcmluZyBvcGVyYXRpb25zIGZyb20gYSBzaW5nbGUgcm9vdCBvcGVyYXRpb24sCi0gICBzZWUgOmZ1bmM6YGZ1bmN0b29scy50b3RhbF9vcmRlcmluZ2AuCisgICBJZiB0aGUgb3BlcmFuZHMgYXJlIG9mIGRpZmZlcmVudCB0eXBlcywgYW5kIHJpZ2h0IG9wZXJhbmQncyB0eXBlIGlzCisgICBhIGRpcmVjdCBvciBpbmRpcmVjdCBzdWJjbGFzcyBvZiB0aGUgbGVmdCBvcGVyYW5kJ3MgdHlwZSwKKyAgIHRoZSByZWZsZWN0ZWQgbWV0aG9kIG9mIHRoZSByaWdodCBvcGVyYW5kIGhhcyBwcmlvcml0eSwgb3RoZXJ3aXNlCisgICB0aGUgbGVmdCBvcGVyYW5kJ3MgbWV0aG9kIGhhcyBwcmlvcml0eS4gIFZpcnR1YWwgc3ViY2xhc3NpbmcgaXMKKyAgIG5vdCBjb25zaWRlcmVkLgogCiAuLiBtZXRob2Q6OiBvYmplY3QuX19oYXNoX18oc2VsZikKIApAQCAtMTI4Myw3ICsxMzEwLDcgQEAKICAgICAgb2JqZWN0J3MgICA6bWV0aDpgX19oYXNoX19gIG11c3QgaW50ZXJvcGVyYXRlIG9uIGJ1aWxkcyBvZiBkaWZmZXJlbnQgYml0CiAgICAgIHNpemVzLCBiZSBzdXJlIHRvIGNoZWNrIHRoZSB3aWR0aCBvbiBhbGwgc3VwcG9ydGVkIGJ1aWxkcy4gIEFuIGVhc3kgd2F5CiAgICAgIHRvIGRvIHRoaXMgaXMgd2l0aAotICAgICBgYHB5dGhvbiAtYyAiaW1wb3J0IHN5czsgcHJpbnQoc3lzLmhhc2hfaW5mby53aWR0aCkiYGAKKyAgICAgYGBweXRob24gLWMgImltcG9ydCBzeXM7IHByaW50KHN5cy5oYXNoX2luZm8ud2lkdGgpImBgLgogCiAgICBJZiBhIGNsYXNzIGRvZXMgbm90IGRlZmluZSBhbiA6bWV0aDpgX19lcV9fYCBtZXRob2QgaXQgc2hvdWxkIG5vdCBkZWZpbmUgYQogICAgOm1ldGg6YF9faGFzaF9fYCBvcGVyYXRpb24gZWl0aGVyOyBpZiBpdCBkZWZpbmVzIDptZXRoOmBfX2VxX19gIGJ1dCBub3QKQEAgLTEzMDQsNyArMTMzMSw3IEBACiAgICA6bWV0aDpgX19oYXNoX19gIG1ldGhvZCBvZiBhIGNsYXNzIGlzIGBgTm9uZWBgLCBpbnN0YW5jZXMgb2YgdGhlIGNsYXNzIHdpbGwKICAgIHJhaXNlIGFuIGFwcHJvcHJpYXRlIDpleGM6YFR5cGVFcnJvcmAgd2hlbiBhIHByb2dyYW0gYXR0ZW1wdHMgdG8gcmV0cmlldmUKICAgIHRoZWlyIGhhc2ggdmFsdWUsIGFuZCB3aWxsIGFsc28gYmUgY29ycmVjdGx5IGlkZW50aWZpZWQgYXMgdW5oYXNoYWJsZSB3aGVuCi0gICBjaGVja2luZyBgYGlzaW5zdGFuY2Uob2JqLCBjb2xsZWN0aW9ucy5IYXNoYWJsZWBgKS4KKyAgIGNoZWNraW5nIGBgaXNpbnN0YW5jZShvYmosIGNvbGxlY3Rpb25zLkhhc2hhYmxlKWBgLgogCiAgICBJZiBhIGNsYXNzIHRoYXQgb3ZlcnJpZGVzIDptZXRoOmBfX2VxX19gIG5lZWRzIHRvIHJldGFpbiB0aGUgaW1wbGVtZW50YXRpb24KICAgIG9mIDptZXRoOmBfX2hhc2hfX2AgZnJvbSBhIHBhcmVudCBjbGFzcywgdGhlIGludGVycHJldGVyIG11c3QgYmUgdG9sZCB0aGlzCkBAIC0xNDU1LDYgKzE0ODIsMTQgQEAKICAgIENhbGxlZCB0byBkZWxldGUgdGhlIGF0dHJpYnV0ZSBvbiBhbiBpbnN0YW5jZSAqaW5zdGFuY2UqIG9mIHRoZSBvd25lciBjbGFzcy4KIAogCitUaGUgYXR0cmlidXRlIDphdHRyOmBfX29iamNsYXNzX19gIGlzIGludGVycHJldGVkIGJ5IHRoZSA6bW9kOmBpbnNwZWN0YCBtb2R1bGUKK2FzIHNwZWNpZnlpbmcgdGhlIGNsYXNzIHdoZXJlIHRoaXMgb2JqZWN0IHdhcyBkZWZpbmVkIChzZXR0aW5nIHRoaXMKK2FwcHJvcHJpYXRlbHkgY2FuIGFzc2lzdCBpbiBydW50aW1lIGludHJvc3BlY3Rpb24gb2YgZHluYW1pYyBjbGFzcyBhdHRyaWJ1dGVzKS4KK0ZvciBjYWxsYWJsZXMsIGl0IG1heSBpbmRpY2F0ZSB0aGF0IGFuIGluc3RhbmNlIG9mIHRoZSBnaXZlbiB0eXBlIChvciBhCitzdWJjbGFzcykgaXMgZXhwZWN0ZWQgb3IgcmVxdWlyZWQgYXMgdGhlIGZpcnN0IHBvc2l0aW9uYWwgYXJndW1lbnQgKGZvciBleGFtcGxlLAorQ1B5dGhvbiBzZXRzIHRoaXMgYXR0cmlidXRlIGZvciB1bmJvdW5kIG1ldGhvZHMgdGhhdCBhcmUgaW1wbGVtZW50ZWQgaW4gQykuCisKKwogLi4gX2Rlc2NyaXB0b3ItaW52b2NhdGlvbjoKIAogSW52b2tpbmcgRGVzY3JpcHRvcnMKQEAgLTE1MzYsOSArMTU3MSw5IEBACiAuLiBkYXRhOjogb2JqZWN0Ll9fc2xvdHNfXwogCiAgICBUaGlzIGNsYXNzIHZhcmlhYmxlIGNhbiBiZSBhc3NpZ25lZCBhIHN0cmluZywgaXRlcmFibGUsIG9yIHNlcXVlbmNlIG9mCi0gICBzdHJpbmdzIHdpdGggdmFyaWFibGUgbmFtZXMgdXNlZCBieSBpbnN0YW5jZXMuICBJZiBkZWZpbmVkIGluIGEKLSAgIGNsYXNzLCAqX19zbG90c19fKiByZXNlcnZlcyBzcGFjZSBmb3IgdGhlIGRlY2xhcmVkIHZhcmlhYmxlcyBhbmQgcHJldmVudHMgdGhlCi0gICBhdXRvbWF0aWMgY3JlYXRpb24gb2YgKl9fZGljdF9fKiBhbmQgKl9fd2Vha3JlZl9fKiBmb3IgZWFjaCBpbnN0YW5jZS4KKyAgIHN0cmluZ3Mgd2l0aCB2YXJpYWJsZSBuYW1lcyB1c2VkIGJ5IGluc3RhbmNlcy4gICpfX3Nsb3RzX18qIHJlc2VydmVzIHNwYWNlCisgICBmb3IgdGhlIGRlY2xhcmVkIHZhcmlhYmxlcyBhbmQgcHJldmVudHMgdGhlIGF1dG9tYXRpYyBjcmVhdGlvbiBvZiAqX19kaWN0X18qCisgICBhbmQgKl9fd2Vha3JlZl9fKiBmb3IgZWFjaCBpbnN0YW5jZS4KIAogCiBOb3RlcyBvbiB1c2luZyAqX19zbG90c19fKgpAQCAtMTYzNSw2ICsxNjcwLDggQEAKIHRoYXQgY3JpdGVyaW9uLCB0aGVuIHRoZSBjbGFzcyBkZWZpbml0aW9uIHdpbGwgZmFpbCB3aXRoIGBgVHlwZUVycm9yYGAuCiAKIAorLi4gX3ByZXBhcmU6CisKIFByZXBhcmluZyB0aGUgY2xhc3MgbmFtZXNwYWNlCiBeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgogCkBAIC0xNzAyLDcgKzE3MzksNyBAQAogbG9ja2luZy9zeW5jaHJvbml6YXRpb24uCiAKIEhlcmUgaXMgYW4gZXhhbXBsZSBvZiBhIG1ldGFjbGFzcyB0aGF0IHVzZXMgYW4gOmNsYXNzOmBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdGAKLXRvIHJlbWVtYmVyIHRoZSBvcmRlciB0aGF0IGNsYXNzIG1lbWJlcnMgd2VyZSBkZWZpbmVkOjoKK3RvIHJlbWVtYmVyIHRoZSBvcmRlciB0aGF0IGNsYXNzIHZhcmlhYmxlcyBhcmUgZGVmaW5lZDo6CiAKICAgICBjbGFzcyBPcmRlcmVkQ2xhc3ModHlwZSk6CiAKQEAgLTE4MzQsNiArMTg3MSwxNSBAQAogICAgY29uc2lkZXJlZCB0byBiZSBmYWxzZSBpbiBhIEJvb2xlYW4gY29udGV4dC4KIAogCisuLiBtZXRob2Q6OiBvYmplY3QuX19sZW5ndGhfaGludF9fKHNlbGYpCisKKyAgIENhbGxlZCB0byBpbXBsZW1lbnQgOmZ1bmM6YG9wZXJhdG9yLmxlbmd0aF9oaW50YC4gU2hvdWxkIHJldHVybiBhbiBlc3RpbWF0ZWQKKyAgIGxlbmd0aCBmb3IgdGhlIG9iamVjdCAod2hpY2ggbWF5IGJlIGdyZWF0ZXIgb3IgbGVzcyB0aGFuIHRoZSBhY3R1YWwgbGVuZ3RoKS4KKyAgIFRoZSBsZW5ndGggbXVzdCBiZSBhbiBpbnRlZ2VyIGBgPj1gYCAwLiBUaGlzIG1ldGhvZCBpcyBwdXJlbHkgYW4KKyAgIG9wdGltaXphdGlvbiBhbmQgaXMgbmV2ZXIgcmVxdWlyZWQgZm9yIGNvcnJlY3RuZXNzLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogLi4gbm90ZTo6CiAKICAgIFNsaWNpbmcgaXMgZG9uZSBleGNsdXNpdmVseSB3aXRoIHRoZSBmb2xsb3dpbmcgdGhyZWUgbWV0aG9kcy4gIEEgY2FsbCBsaWtlIDo6CkBAIC0xODY2LDYgKzE5MTIsMTIgQEAKICAgICAgIGluZGV4ZXMgdG8gYWxsb3cgcHJvcGVyIGRldGVjdGlvbiBvZiB0aGUgZW5kIG9mIHRoZSBzZXF1ZW5jZS4KIAogCisuLiBtZXRob2Q6OiBvYmplY3QuX19taXNzaW5nX18oc2VsZiwga2V5KQorCisgICBDYWxsZWQgYnkgOmNsYXNzOmBkaWN0YFwgLlwgOm1ldGg6YF9fZ2V0aXRlbV9fYCB0byBpbXBsZW1lbnQgYGBzZWxmW2tleV1gYCBmb3IgZGljdCBzdWJjbGFzc2VzCisgICB3aGVuIGtleSBpcyBub3QgaW4gdGhlIGRpY3Rpb25hcnkuCisKKwogLi4gbWV0aG9kOjogb2JqZWN0Ll9fc2V0aXRlbV9fKHNlbGYsIGtleSwgdmFsdWUpCiAKICAgIENhbGxlZCB0byBpbXBsZW1lbnQgYXNzaWdubWVudCB0byBgYHNlbGZba2V5XWBgLiAgU2FtZSBub3RlIGFzIGZvcgpAQCAtMTg4OCw4ICsxOTQwLDcgQEAKIAogICAgVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gYW4gaXRlcmF0b3IgaXMgcmVxdWlyZWQgZm9yIGEgY29udGFpbmVyLiBUaGlzIG1ldGhvZAogICAgc2hvdWxkIHJldHVybiBhIG5ldyBpdGVyYXRvciBvYmplY3QgdGhhdCBjYW4gaXRlcmF0ZSBvdmVyIGFsbCB0aGUgb2JqZWN0cyBpbiB0aGUKLSAgIGNvbnRhaW5lci4gIEZvciBtYXBwaW5ncywgaXQgc2hvdWxkIGl0ZXJhdGUgb3ZlciB0aGUga2V5cyBvZiB0aGUgY29udGFpbmVyLCBhbmQKLSAgIHNob3VsZCBhbHNvIGJlIG1hZGUgYXZhaWxhYmxlIGFzIHRoZSBtZXRob2QgOm1ldGg6YGtleXNgLgorICAgY29udGFpbmVyLiAgRm9yIG1hcHBpbmdzLCBpdCBzaG91bGQgaXRlcmF0ZSBvdmVyIHRoZSBrZXlzIG9mIHRoZSBjb250YWluZXIuCiAKICAgIEl0ZXJhdG9yIG9iamVjdHMgYWxzbyBuZWVkIHRvIGltcGxlbWVudCB0aGlzIG1ldGhvZDsgdGhleSBhcmUgcmVxdWlyZWQgdG8gcmV0dXJuCiAgICB0aGVtc2VsdmVzLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaXRlcmF0b3Igb2JqZWN0cywgc2VlIDpyZWY6YHR5cGVpdGVyYC4KQEAgLTIwNjUsOSArMjExNiwxNyBAQAogCiAuLiBtZXRob2Q6OiBvYmplY3QuX19pbmRleF9fKHNlbGYpCiAKLSAgIENhbGxlZCB0byBpbXBsZW1lbnQgOmZ1bmM6YG9wZXJhdG9yLmluZGV4YC4gIEFsc28gY2FsbGVkIHdoZW5ldmVyIFB5dGhvbiBuZWVkcwotICAgYW4gaW50ZWdlciBvYmplY3QgKHN1Y2ggYXMgaW4gc2xpY2luZywgb3IgaW4gdGhlIGJ1aWx0LWluIDpmdW5jOmBiaW5gLAotICAgOmZ1bmM6YGhleGAgYW5kIDpmdW5jOmBvY3RgIGZ1bmN0aW9ucykuIE11c3QgcmV0dXJuIGFuIGludGVnZXIuCisgICBDYWxsZWQgdG8gaW1wbGVtZW50IDpmdW5jOmBvcGVyYXRvci5pbmRleGAsIGFuZCB3aGVuZXZlciBQeXRob24gbmVlZHMgdG8KKyAgIGxvc3NsZXNzbHkgY29udmVydCB0aGUgbnVtZXJpYyBvYmplY3QgdG8gYW4gaW50ZWdlciBvYmplY3QgKHN1Y2ggYXMgaW4KKyAgIHNsaWNpbmcsIG9yIGluIHRoZSBidWlsdC1pbiA6ZnVuYzpgYmluYCwgOmZ1bmM6YGhleGAgYW5kIDpmdW5jOmBvY3RgCisgICBmdW5jdGlvbnMpLiBQcmVzZW5jZSBvZiB0aGlzIG1ldGhvZCBpbmRpY2F0ZXMgdGhhdCB0aGUgbnVtZXJpYyBvYmplY3QgaXMKKyAgIGFuIGludGVnZXIgdHlwZS4gIE11c3QgcmV0dXJuIGFuIGludGVnZXIuCisKKyAgIC4uIG5vdGU6OgorCisgICAgICBJbiBvcmRlciB0byBoYXZlIGEgY29oZXJlbnQgaW50ZWdlciB0eXBlIGNsYXNzLCB3aGVuIDptZXRoOmBfX2luZGV4X19gIGlzCisgICAgICBkZWZpbmVkIDptZXRoOmBfX2ludF9fYCBzaG91bGQgYWxzbyBiZSBkZWZpbmVkLCBhbmQgYm90aCBzaG91bGQgcmV0dXJuCisgICAgICB0aGUgc2FtZSB2YWx1ZS4KIAogCiAuLiBfY29udGV4dC1tYW5hZ2VyczoKQEAgLTIxNjcsOSArMjIyNiw5IEBACiA6bWV0aDpgX19nZXRhdHRyaWJ1dGVfX2AgbWV0aG9kIGV2ZW4gb2YgdGhlIG9iamVjdCdzIG1ldGFjbGFzczo6CiAKICAgID4+PiBjbGFzcyBNZXRhKHR5cGUpOgotICAgLi4uICAgIGRlZiBfX2dldGF0dHJpYnV0ZV9fKCphcmdzKToKLSAgIC4uLiAgICAgICBwcmludCgiTWV0YWNsYXNzIGdldGF0dHJpYnV0ZSBpbnZva2VkIikKLSAgIC4uLiAgICAgICByZXR1cm4gdHlwZS5fX2dldGF0dHJpYnV0ZV9fKCphcmdzKQorICAgLi4uICAgICBkZWYgX19nZXRhdHRyaWJ1dGVfXygqYXJncyk6CisgICAuLi4gICAgICAgICBwcmludCgiTWV0YWNsYXNzIGdldGF0dHJpYnV0ZSBpbnZva2VkIikKKyAgIC4uLiAgICAgICAgIHJldHVybiB0eXBlLl9fZ2V0YXR0cmlidXRlX18oKmFyZ3MpCiAgICAuLi4KICAgID4+PiBjbGFzcyBDKG9iamVjdCwgbWV0YWNsYXNzPU1ldGEpOgogICAgLi4uICAgICBkZWYgX19sZW5fXyhzZWxmKToKZGlmZiAtLWdpdCBhL0RvYy9yZWZlcmVuY2UvZXhlY3V0aW9ubW9kZWwucnN0IGIvRG9jL3JlZmVyZW5jZS9leGVjdXRpb25tb2RlbC5yc3QKaW5kZXggODJlMzdhMi4uNWYxZWE5MiAxMDA2NDQKLS0tIGEvRG9jL3JlZmVyZW5jZS9leGVjdXRpb25tb2RlbC5yc3QKKysrIGIvRG9jL3JlZmVyZW5jZS9leGVjdXRpb25tb2RlbC5yc3QKQEAgLTUsMzcgKzUsMjYgQEAKIEV4ZWN1dGlvbiBtb2RlbAogKioqKioqKioqKioqKioqCiAKLS4uIGluZGV4Ojogc2luZ2xlOiBleGVjdXRpb24gbW9kZWwKLQotCi0uLiBfbmFtaW5nOgotCi1OYW1pbmcgYW5kIGJpbmRpbmcKLT09PT09PT09PT09PT09PT09PQotCiAuLiBpbmRleDo6CisgICBzaW5nbGU6IGV4ZWN1dGlvbiBtb2RlbAogICAgcGFpcjogY29kZTsgYmxvY2sKLSAgIHNpbmdsZTogbmFtZXNwYWNlCi0gICBzaW5nbGU6IHNjb3BlCiAKLS4uIGluZGV4OjoKLSAgIHNpbmdsZTogbmFtZQotICAgcGFpcjogYmluZGluZzsgbmFtZQorLi4gX3Byb2dfc3RydWN0dXJlOgogCi06ZGZuOmBOYW1lc2AgcmVmZXIgdG8gb2JqZWN0cy4gIE5hbWVzIGFyZSBpbnRyb2R1Y2VkIGJ5IG5hbWUgYmluZGluZyBvcGVyYXRpb25zLgotRWFjaCBvY2N1cnJlbmNlIG9mIGEgbmFtZSBpbiB0aGUgcHJvZ3JhbSB0ZXh0IHJlZmVycyB0byB0aGUgOmRmbjpgYmluZGluZ2Agb2YKLXRoYXQgbmFtZSBlc3RhYmxpc2hlZCBpbiB0aGUgaW5uZXJtb3N0IGZ1bmN0aW9uIGJsb2NrIGNvbnRhaW5pbmcgdGhlIHVzZS4KK1N0cnVjdHVyZSBvZiBhIHByb2dyYW0KKz09PT09PT09PT09PT09PT09PT09PT0KIAogLi4gaW5kZXg6OiBibG9jawogCitBIFB5dGhvbiBwcm9ncmFtIGlzIGNvbnN0cnVjdGVkIGZyb20gY29kZSBibG9ja3MuCiBBIDpkZm46YGJsb2NrYCBpcyBhIHBpZWNlIG9mIFB5dGhvbiBwcm9ncmFtIHRleHQgdGhhdCBpcyBleGVjdXRlZCBhcyBhIHVuaXQuCiBUaGUgZm9sbG93aW5nIGFyZSBibG9ja3M6IGEgbW9kdWxlLCBhIGZ1bmN0aW9uIGJvZHksIGFuZCBhIGNsYXNzIGRlZmluaXRpb24uCiBFYWNoIGNvbW1hbmQgdHlwZWQgaW50ZXJhY3RpdmVseSBpcyBhIGJsb2NrLiAgQSBzY3JpcHQgZmlsZSAoYSBmaWxlIGdpdmVuIGFzCi1zdGFuZGFyZCBpbnB1dCB0byB0aGUgaW50ZXJwcmV0ZXIgb3Igc3BlY2lmaWVkIG9uIHRoZSBpbnRlcnByZXRlciBjb21tYW5kIGxpbmUKLXRoZSBmaXJzdCBhcmd1bWVudCkgaXMgYSBjb2RlIGJsb2NrLiAgQSBzY3JpcHQgY29tbWFuZCAoYSBjb21tYW5kIHNwZWNpZmllZCBvbgotdGhlIGludGVycHJldGVyIGNvbW1hbmQgbGluZSB3aXRoIHRoZSAnKiotYyoqJyBvcHRpb24pIGlzIGEgY29kZSBibG9jay4gIFRoZQotc3RyaW5nIGFyZ3VtZW50IHBhc3NlZCB0byB0aGUgYnVpbHQtaW4gZnVuY3Rpb25zIDpmdW5jOmBldmFsYCBhbmQgOmZ1bmM6YGV4ZWNgCi1pcyBhIGNvZGUgYmxvY2suCitzdGFuZGFyZCBpbnB1dCB0byB0aGUgaW50ZXJwcmV0ZXIgb3Igc3BlY2lmaWVkIGFzIGEgY29tbWFuZCBsaW5lIGFyZ3VtZW50IHRvIHRoZQoraW50ZXJwcmV0ZXIpIGlzIGEgY29kZSBibG9jay4gIEEgc2NyaXB0IGNvbW1hbmQgKGEgY29tbWFuZCBzcGVjaWZpZWQgb24gdGhlCitpbnRlcnByZXRlciBjb21tYW5kIGxpbmUgd2l0aCB0aGUgJyoqLWMqKicgb3B0aW9uKSBpcyBhIGNvZGUgYmxvY2suICBUaGUgc3RyaW5nCithcmd1bWVudCBwYXNzZWQgdG8gdGhlIGJ1aWx0LWluIGZ1bmN0aW9ucyA6ZnVuYzpgZXZhbGAgYW5kIDpmdW5jOmBleGVjYCBpcyBhCitjb2RlIGJsb2NrLgogCiAuLiBpbmRleDo6IHBhaXI6IGV4ZWN1dGlvbjsgZnJhbWUKIApAQCAtNDMsNDMgKzMyLDI1IEBACiBhZG1pbmlzdHJhdGl2ZSBpbmZvcm1hdGlvbiAodXNlZCBmb3IgZGVidWdnaW5nKSBhbmQgZGV0ZXJtaW5lcyB3aGVyZSBhbmQgaG93CiBleGVjdXRpb24gY29udGludWVzIGFmdGVyIHRoZSBjb2RlIGJsb2NrJ3MgZXhlY3V0aW9uIGhhcyBjb21wbGV0ZWQuCiAKLS4uIGluZGV4Ojogc2NvcGUKKy4uIF9uYW1pbmc6CiAKLUEgOmRmbjpgc2NvcGVgIGRlZmluZXMgdGhlIHZpc2liaWxpdHkgb2YgYSBuYW1lIHdpdGhpbiBhIGJsb2NrLiAgSWYgYSBsb2NhbAotdmFyaWFibGUgaXMgZGVmaW5lZCBpbiBhIGJsb2NrLCBpdHMgc2NvcGUgaW5jbHVkZXMgdGhhdCBibG9jay4gIElmIHRoZQotZGVmaW5pdGlvbiBvY2N1cnMgaW4gYSBmdW5jdGlvbiBibG9jaywgdGhlIHNjb3BlIGV4dGVuZHMgdG8gYW55IGJsb2NrcyBjb250YWluZWQKLXdpdGhpbiB0aGUgZGVmaW5pbmcgb25lLCB1bmxlc3MgYSBjb250YWluZWQgYmxvY2sgaW50cm9kdWNlcyBhIGRpZmZlcmVudCBiaW5kaW5nCi1mb3IgdGhlIG5hbWUuICBUaGUgc2NvcGUgb2YgbmFtZXMgZGVmaW5lZCBpbiBhIGNsYXNzIGJsb2NrIGlzIGxpbWl0ZWQgdG8gdGhlCi1jbGFzcyBibG9jazsgaXQgZG9lcyBub3QgZXh0ZW5kIHRvIHRoZSBjb2RlIGJsb2NrcyBvZiBtZXRob2RzIC0tIHRoaXMgaW5jbHVkZXMKLWNvbXByZWhlbnNpb25zIGFuZCBnZW5lcmF0b3IgZXhwcmVzc2lvbnMgc2luY2UgdGhleSBhcmUgaW1wbGVtZW50ZWQgdXNpbmcgYQotZnVuY3Rpb24gc2NvcGUuICBUaGlzIG1lYW5zIHRoYXQgdGhlIGZvbGxvd2luZyB3aWxsIGZhaWw6OgotCi0gICBjbGFzcyBBOgotICAgICAgIGEgPSA0MgotICAgICAgIGIgPSBsaXN0KGEgKyBpIGZvciBpIGluIHJhbmdlKDEwKSkKLQotLi4gaW5kZXg6OiBzaW5nbGU6IGVudmlyb25tZW50Ci0KLVdoZW4gYSBuYW1lIGlzIHVzZWQgaW4gYSBjb2RlIGJsb2NrLCBpdCBpcyByZXNvbHZlZCB1c2luZyB0aGUgbmVhcmVzdCBlbmNsb3NpbmcKLXNjb3BlLiAgVGhlIHNldCBvZiBhbGwgc3VjaCBzY29wZXMgdmlzaWJsZSB0byBhIGNvZGUgYmxvY2sgaXMgY2FsbGVkIHRoZSBibG9jaydzCi06ZGZuOmBlbnZpcm9ubWVudGAuCi0KLS4uIGluZGV4OjogcGFpcjogZnJlZTsgdmFyaWFibGUKLQotSWYgYSBuYW1lIGlzIGJvdW5kIGluIGEgYmxvY2ssIGl0IGlzIGEgbG9jYWwgdmFyaWFibGUgb2YgdGhhdCBibG9jaywgdW5sZXNzCi1kZWNsYXJlZCBhcyA6a2V5d29yZDpgbm9ubG9jYWxgLiAgSWYgYSBuYW1lIGlzIGJvdW5kIGF0IHRoZSBtb2R1bGUgbGV2ZWwsIGl0IGlzCi1hIGdsb2JhbCB2YXJpYWJsZS4gIChUaGUgdmFyaWFibGVzIG9mIHRoZSBtb2R1bGUgY29kZSBibG9jayBhcmUgbG9jYWwgYW5kCi1nbG9iYWwuKSAgSWYgYSB2YXJpYWJsZSBpcyB1c2VkIGluIGEgY29kZSBibG9jayBidXQgbm90IGRlZmluZWQgdGhlcmUsIGl0IGlzIGEKLTpkZm46YGZyZWUgdmFyaWFibGVgLgorTmFtaW5nIGFuZCBiaW5kaW5nCis9PT09PT09PT09PT09PT09PT0KIAogLi4gaW5kZXg6OgotICAgc2luZ2xlOiBOYW1lRXJyb3IgKGJ1aWx0LWluIGV4Y2VwdGlvbikKLSAgIHNpbmdsZTogVW5ib3VuZExvY2FsRXJyb3IKKyAgIHNpbmdsZTogbmFtZXNwYWNlCisgICBzaW5nbGU6IHNjb3BlCiAKLVdoZW4gYSBuYW1lIGlzIG5vdCBmb3VuZCBhdCBhbGwsIGEgOmV4YzpgTmFtZUVycm9yYCBleGNlcHRpb24gaXMgcmFpc2VkLiAgSWYgdGhlCi1uYW1lIHJlZmVycyB0byBhIGxvY2FsIHZhcmlhYmxlIHRoYXQgaGFzIG5vdCBiZWVuIGJvdW5kLCBhCi06ZXhjOmBVbmJvdW5kTG9jYWxFcnJvcmAgZXhjZXB0aW9uIGlzIHJhaXNlZC4gIDpleGM6YFVuYm91bmRMb2NhbEVycm9yYCBpcyBhCi1zdWJjbGFzcyBvZiA6ZXhjOmBOYW1lRXJyb3JgLgorLi4gX2JpbmRfbmFtZXM6CisKK0JpbmRpbmcgb2YgbmFtZXMKKy0tLS0tLS0tLS0tLS0tLS0KKworLi4gaW5kZXg6OgorICAgc2luZ2xlOiBuYW1lCisgICBwYWlyOiBiaW5kaW5nOyBuYW1lCisKKzpkZm46YE5hbWVzYCByZWZlciB0byBvYmplY3RzLiAgTmFtZXMgYXJlIGludHJvZHVjZWQgYnkgbmFtZSBiaW5kaW5nIG9wZXJhdGlvbnMuCiAKIC4uIGluZGV4Ojogc3RhdGVtZW50OiBmcm9tCiAKQEAgLTk5LDYgKzcwLDQ2IEBACiBFYWNoIGFzc2lnbm1lbnQgb3IgaW1wb3J0IHN0YXRlbWVudCBvY2N1cnMgd2l0aGluIGEgYmxvY2sgZGVmaW5lZCBieSBhIGNsYXNzIG9yCiBmdW5jdGlvbiBkZWZpbml0aW9uIG9yIGF0IHRoZSBtb2R1bGUgbGV2ZWwgKHRoZSB0b3AtbGV2ZWwgY29kZSBibG9jaykuCiAKKy4uIGluZGV4OjogcGFpcjogZnJlZTsgdmFyaWFibGUKKworSWYgYSBuYW1lIGlzIGJvdW5kIGluIGEgYmxvY2ssIGl0IGlzIGEgbG9jYWwgdmFyaWFibGUgb2YgdGhhdCBibG9jaywgdW5sZXNzCitkZWNsYXJlZCBhcyA6a2V5d29yZDpgbm9ubG9jYWxgIG9yIDprZXl3b3JkOmBnbG9iYWxgLiAgSWYgYSBuYW1lIGlzIGJvdW5kIGF0Cit0aGUgbW9kdWxlIGxldmVsLCBpdCBpcyBhIGdsb2JhbCB2YXJpYWJsZS4gIChUaGUgdmFyaWFibGVzIG9mIHRoZSBtb2R1bGUgY29kZQorYmxvY2sgYXJlIGxvY2FsIGFuZCBnbG9iYWwuKSAgSWYgYSB2YXJpYWJsZSBpcyB1c2VkIGluIGEgY29kZSBibG9jayBidXQgbm90CitkZWZpbmVkIHRoZXJlLCBpdCBpcyBhIDpkZm46YGZyZWUgdmFyaWFibGVgLgorCitFYWNoIG9jY3VycmVuY2Ugb2YgYSBuYW1lIGluIHRoZSBwcm9ncmFtIHRleHQgcmVmZXJzIHRvIHRoZSA6ZGZuOmBiaW5kaW5nYCBvZgordGhhdCBuYW1lIGVzdGFibGlzaGVkIGJ5IHRoZSBmb2xsb3dpbmcgbmFtZSByZXNvbHV0aW9uIHJ1bGVzLgorCisuLiBfcmVzb2x2ZV9uYW1lczoKKworUmVzb2x1dGlvbiBvZiBuYW1lcworLS0tLS0tLS0tLS0tLS0tLS0tLQorCisuLiBpbmRleDo6IHNjb3BlCisKK0EgOmRmbjpgc2NvcGVgIGRlZmluZXMgdGhlIHZpc2liaWxpdHkgb2YgYSBuYW1lIHdpdGhpbiBhIGJsb2NrLiAgSWYgYSBsb2NhbAordmFyaWFibGUgaXMgZGVmaW5lZCBpbiBhIGJsb2NrLCBpdHMgc2NvcGUgaW5jbHVkZXMgdGhhdCBibG9jay4gIElmIHRoZQorZGVmaW5pdGlvbiBvY2N1cnMgaW4gYSBmdW5jdGlvbiBibG9jaywgdGhlIHNjb3BlIGV4dGVuZHMgdG8gYW55IGJsb2NrcyBjb250YWluZWQKK3dpdGhpbiB0aGUgZGVmaW5pbmcgb25lLCB1bmxlc3MgYSBjb250YWluZWQgYmxvY2sgaW50cm9kdWNlcyBhIGRpZmZlcmVudCBiaW5kaW5nCitmb3IgdGhlIG5hbWUuCisKKy4uIGluZGV4Ojogc2luZ2xlOiBlbnZpcm9ubWVudAorCitXaGVuIGEgbmFtZSBpcyB1c2VkIGluIGEgY29kZSBibG9jaywgaXQgaXMgcmVzb2x2ZWQgdXNpbmcgdGhlIG5lYXJlc3QgZW5jbG9zaW5nCitzY29wZS4gIFRoZSBzZXQgb2YgYWxsIHN1Y2ggc2NvcGVzIHZpc2libGUgdG8gYSBjb2RlIGJsb2NrIGlzIGNhbGxlZCB0aGUgYmxvY2sncworOmRmbjpgZW52aXJvbm1lbnRgLgorCisuLiBpbmRleDo6CisgICBzaW5nbGU6IE5hbWVFcnJvciAoYnVpbHQtaW4gZXhjZXB0aW9uKQorICAgc2luZ2xlOiBVbmJvdW5kTG9jYWxFcnJvcgorCitXaGVuIGEgbmFtZSBpcyBub3QgZm91bmQgYXQgYWxsLCBhIDpleGM6YE5hbWVFcnJvcmAgZXhjZXB0aW9uIGlzIHJhaXNlZC4KK0lmIHRoZSBjdXJyZW50IHNjb3BlIGlzIGEgZnVuY3Rpb24gc2NvcGUsIGFuZCB0aGUgbmFtZSByZWZlcnMgdG8gYSBsb2NhbAordmFyaWFibGUgdGhhdCBoYXMgbm90IHlldCBiZWVuIGJvdW5kIHRvIGEgdmFsdWUgYXQgdGhlIHBvaW50IHdoZXJlIHRoZSBuYW1lIGlzCit1c2VkLCBhbiA6ZXhjOmBVbmJvdW5kTG9jYWxFcnJvcmAgZXhjZXB0aW9uIGlzIHJhaXNlZC4KKzpleGM6YFVuYm91bmRMb2NhbEVycm9yYCBpcyBhIHN1YmNsYXNzIG9mIDpleGM6YE5hbWVFcnJvcmAuCisKIElmIGEgbmFtZSBiaW5kaW5nIG9wZXJhdGlvbiBvY2N1cnMgYW55d2hlcmUgd2l0aGluIGEgY29kZSBibG9jaywgYWxsIHVzZXMgb2YgdGhlCiBuYW1lIHdpdGhpbiB0aGUgYmxvY2sgYXJlIHRyZWF0ZWQgYXMgcmVmZXJlbmNlcyB0byB0aGUgY3VycmVudCBibG9jay4gIFRoaXMgY2FuCiBsZWFkIHRvIGVycm9ycyB3aGVuIGEgbmFtZSBpcyB1c2VkIHdpdGhpbiBhIGJsb2NrIGJlZm9yZSBpdCBpcyBib3VuZC4gIFRoaXMgcnVsZQpAQCAtMTExLDEwICsxMjIsNDUgQEAKIG5hbWVzcGFjZS4gIE5hbWVzIGFyZSByZXNvbHZlZCBpbiB0aGUgdG9wLWxldmVsIG5hbWVzcGFjZSBieSBzZWFyY2hpbmcgdGhlCiBnbG9iYWwgbmFtZXNwYWNlLCBpLmUuIHRoZSBuYW1lc3BhY2Ugb2YgdGhlIG1vZHVsZSBjb250YWluaW5nIHRoZSBjb2RlIGJsb2NrLAogYW5kIHRoZSBidWlsdGlucyBuYW1lc3BhY2UsIHRoZSBuYW1lc3BhY2Ugb2YgdGhlIG1vZHVsZSA6bW9kOmBidWlsdGluc2AuICBUaGUKLWdsb2JhbCBuYW1lc3BhY2UgaXMgc2VhcmNoZWQgZmlyc3QuICBJZiB0aGUgbmFtZSBpcyBub3QgZm91bmQgdGhlcmUsIHRoZSBidWlsdGlucwotbmFtZXNwYWNlIGlzIHNlYXJjaGVkLiAgVGhlIGdsb2JhbCBzdGF0ZW1lbnQgbXVzdCBwcmVjZWRlIGFsbCB1c2VzIG9mIHRoZSBuYW1lLgorZ2xvYmFsIG5hbWVzcGFjZSBpcyBzZWFyY2hlZCBmaXJzdC4gIElmIHRoZSBuYW1lIGlzIG5vdCBmb3VuZCB0aGVyZSwgdGhlCitidWlsdGlucyBuYW1lc3BhY2UgaXMgc2VhcmNoZWQuICBUaGUgOmtleXdvcmQ6YGdsb2JhbGAgc3RhdGVtZW50IG11c3QgcHJlY2VkZQorYWxsIHVzZXMgb2YgdGhlIG5hbWUuCiAKLS4uIFhYWCBkb2N1bWVudCAibm9ubG9jYWwiIHNlbWFudGljcyBoZXJlCitUaGUgOmtleXdvcmQ6YGdsb2JhbGAgc3RhdGVtZW50IGhhcyB0aGUgc2FtZSBzY29wZSBhcyBhIG5hbWUgYmluZGluZyBvcGVyYXRpb24KK2luIHRoZSBzYW1lIGJsb2NrLiAgSWYgdGhlIG5lYXJlc3QgZW5jbG9zaW5nIHNjb3BlIGZvciBhIGZyZWUgdmFyaWFibGUgY29udGFpbnMKK2EgZ2xvYmFsIHN0YXRlbWVudCwgdGhlIGZyZWUgdmFyaWFibGUgaXMgdHJlYXRlZCBhcyBhIGdsb2JhbC4KKworLi4gWFhYIHNheSBtb3JlIGFib3V0ICJub25sb2NhbCIgc2VtYW50aWNzIGhlcmUKKworVGhlIDprZXl3b3JkOmBub25sb2NhbGAgc3RhdGVtZW50IGNhdXNlcyBjb3JyZXNwb25kaW5nIG5hbWVzIHRvIHJlZmVyCit0byBwcmV2aW91c2x5IGJvdW5kIHZhcmlhYmxlcyBpbiB0aGUgbmVhcmVzdCBlbmNsb3NpbmcgZnVuY3Rpb24gc2NvcGUuCis6ZXhjOmBTeW50YXhFcnJvcmAgaXMgcmFpc2VkIGF0IGNvbXBpbGUgdGltZSBpZiB0aGUgZ2l2ZW4gbmFtZSBkb2VzIG5vdAorZXhpc3QgaW4gYW55IGVuY2xvc2luZyBmdW5jdGlvbiBzY29wZS4KKworLi4gaW5kZXg6OiBtb2R1bGU6IF9fbWFpbl9fCisKK1RoZSBuYW1lc3BhY2UgZm9yIGEgbW9kdWxlIGlzIGF1dG9tYXRpY2FsbHkgY3JlYXRlZCB0aGUgZmlyc3QgdGltZSBhIG1vZHVsZSBpcworaW1wb3J0ZWQuICBUaGUgbWFpbiBtb2R1bGUgZm9yIGEgc2NyaXB0IGlzIGFsd2F5cyBjYWxsZWQgOm1vZDpgX19tYWluX19gLgorCitDbGFzcyBkZWZpbml0aW9uIGJsb2NrcyBhbmQgYXJndW1lbnRzIHRvIDpmdW5jOmBleGVjYCBhbmQgOmZ1bmM6YGV2YWxgIGFyZQorc3BlY2lhbCBpbiB0aGUgY29udGV4dCBvZiBuYW1lIHJlc29sdXRpb24uCitBIGNsYXNzIGRlZmluaXRpb24gaXMgYW4gZXhlY3V0YWJsZSBzdGF0ZW1lbnQgdGhhdCBtYXkgdXNlIGFuZCBkZWZpbmUgbmFtZXMuCitUaGVzZSByZWZlcmVuY2VzIGZvbGxvdyB0aGUgbm9ybWFsIHJ1bGVzIGZvciBuYW1lIHJlc29sdXRpb24gd2l0aCBhbiBleGNlcHRpb24KK3RoYXQgdW5ib3VuZCBsb2NhbCB2YXJpYWJsZXMgYXJlIGxvb2tlZCB1cCBpbiB0aGUgZ2xvYmFsIG5hbWVzcGFjZS4KK1RoZSBuYW1lc3BhY2Ugb2YgdGhlIGNsYXNzIGRlZmluaXRpb24gYmVjb21lcyB0aGUgYXR0cmlidXRlIGRpY3Rpb25hcnkgb2YKK3RoZSBjbGFzcy4gVGhlIHNjb3BlIG9mIG5hbWVzIGRlZmluZWQgaW4gYSBjbGFzcyBibG9jayBpcyBsaW1pdGVkIHRvIHRoZQorY2xhc3MgYmxvY2s7IGl0IGRvZXMgbm90IGV4dGVuZCB0byB0aGUgY29kZSBibG9ja3Mgb2YgbWV0aG9kcyAtLSB0aGlzIGluY2x1ZGVzCitjb21wcmVoZW5zaW9ucyBhbmQgZ2VuZXJhdG9yIGV4cHJlc3Npb25zIHNpbmNlIHRoZXkgYXJlIGltcGxlbWVudGVkIHVzaW5nIGEKK2Z1bmN0aW9uIHNjb3BlLiAgVGhpcyBtZWFucyB0aGF0IHRoZSBmb2xsb3dpbmcgd2lsbCBmYWlsOjoKKworICAgY2xhc3MgQToKKyAgICAgICBhID0gNDIKKyAgICAgICBiID0gbGlzdChhICsgaSBmb3IgaSBpbiByYW5nZSgxMCkpCisKKy4uIF9yZXN0cmljdF9leGVjOgorCitCdWlsdGlucyBhbmQgcmVzdHJpY3RlZCBleGVjdXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAuLiBpbmRleDo6IHBhaXI6IHJlc3RyaWN0ZWQ7IGV4ZWN1dGlvbgogCkBAIC0xMzQsMzYgKzE4MCwyNiBAQAogICAgOmtleXdvcmQ6YGltcG9ydGAgdGhlIDptb2Q6YGJ1aWx0aW5zYCBtb2R1bGUgYW5kIG1vZGlmeSBpdHMKICAgIGF0dHJpYnV0ZXMgYXBwcm9wcmlhdGVseS4KIAotLi4gaW5kZXg6OiBtb2R1bGU6IF9fbWFpbl9fCi0KLVRoZSBuYW1lc3BhY2UgZm9yIGEgbW9kdWxlIGlzIGF1dG9tYXRpY2FsbHkgY3JlYXRlZCB0aGUgZmlyc3QgdGltZSBhIG1vZHVsZSBpcwotaW1wb3J0ZWQuICBUaGUgbWFpbiBtb2R1bGUgZm9yIGEgc2NyaXB0IGlzIGFsd2F5cyBjYWxsZWQgOm1vZDpgX19tYWluX19gLgotCi1UaGUgOmtleXdvcmQ6YGdsb2JhbGAgc3RhdGVtZW50IGhhcyB0aGUgc2FtZSBzY29wZSBhcyBhIG5hbWUgYmluZGluZyBvcGVyYXRpb24KLWluIHRoZSBzYW1lIGJsb2NrLiAgSWYgdGhlIG5lYXJlc3QgZW5jbG9zaW5nIHNjb3BlIGZvciBhIGZyZWUgdmFyaWFibGUgY29udGFpbnMKLWEgZ2xvYmFsIHN0YXRlbWVudCwgdGhlIGZyZWUgdmFyaWFibGUgaXMgdHJlYXRlZCBhcyBhIGdsb2JhbC4KLQotQSBjbGFzcyBkZWZpbml0aW9uIGlzIGFuIGV4ZWN1dGFibGUgc3RhdGVtZW50IHRoYXQgbWF5IHVzZSBhbmQgZGVmaW5lIG5hbWVzLgotVGhlc2UgcmVmZXJlbmNlcyBmb2xsb3cgdGhlIG5vcm1hbCBydWxlcyBmb3IgbmFtZSByZXNvbHV0aW9uLiAgVGhlIG5hbWVzcGFjZSBvZgotdGhlIGNsYXNzIGRlZmluaXRpb24gYmVjb21lcyB0aGUgYXR0cmlidXRlIGRpY3Rpb25hcnkgb2YgdGhlIGNsYXNzLiAgTmFtZXMKLWRlZmluZWQgYXQgdGhlIGNsYXNzIHNjb3BlIGFyZSBub3QgdmlzaWJsZSBpbiBtZXRob2RzLgotCi0KIC4uIF9keW5hbWljLWZlYXR1cmVzOgogCiBJbnRlcmFjdGlvbiB3aXRoIGR5bmFtaWMgZmVhdHVyZXMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCitOYW1lIHJlc29sdXRpb24gb2YgZnJlZSB2YXJpYWJsZXMgb2NjdXJzIGF0IHJ1bnRpbWUsIG5vdCBhdCBjb21waWxlIHRpbWUuCitUaGlzIG1lYW5zIHRoYXQgdGhlIGZvbGxvd2luZyBjb2RlIHdpbGwgcHJpbnQgNDI6OgorCisgICBpID0gMTAKKyAgIGRlZiBmKCk6CisgICAgICAgcHJpbnQoaSkKKyAgIGkgPSA0MgorICAgZigpCisKIFRoZXJlIGFyZSBzZXZlcmFsIGNhc2VzIHdoZXJlIFB5dGhvbiBzdGF0ZW1lbnRzIGFyZSBpbGxlZ2FsIHdoZW4gdXNlZCBpbgogY29uanVuY3Rpb24gd2l0aCBuZXN0ZWQgc2NvcGVzIHRoYXQgY29udGFpbiBmcmVlIHZhcmlhYmxlcy4KIAogSWYgYSB2YXJpYWJsZSBpcyByZWZlcmVuY2VkIGluIGFuIGVuY2xvc2luZyBzY29wZSwgaXQgaXMgaWxsZWdhbCB0byBkZWxldGUgdGhlCiBuYW1lLiAgQW4gZXJyb3Igd2lsbCBiZSByZXBvcnRlZCBhdCBjb21waWxlIHRpbWUuCiAKLUlmIHRoZSB3aWxkIGNhcmQgZm9ybSBvZiBpbXBvcnQgLS0tIGBgaW1wb3J0ICpgYCAtLS0gaXMgdXNlZCBpbiBhIGZ1bmN0aW9uIGFuZAotdGhlIGZ1bmN0aW9uIGNvbnRhaW5zIG9yIGlzIGEgbmVzdGVkIGJsb2NrIHdpdGggZnJlZSB2YXJpYWJsZXMsIHRoZSBjb21waWxlcgotd2lsbCByYWlzZSBhIDpleGM6YFN5bnRheEVycm9yYC4KLQogLi4gWFhYIGZyb20gKiBhbHNvIGludmFsaWQgd2l0aCByZWxhdGl2ZSBpbXBvcnRzIChhdCBsZWFzdCBjdXJyZW50bHkpCiAKIFRoZSA6ZnVuYzpgZXZhbGAgYW5kIDpmdW5jOmBleGVjYCBmdW5jdGlvbnMgZG8gbm90IGhhdmUgYWNjZXNzIHRvIHRoZSBmdWxsCkBAIC0yMzQsNCArMjcwLDMgQEAKIAogLi4gWyNdIFRoaXMgbGltaXRhdGlvbiBvY2N1cnMgYmVjYXVzZSB0aGUgY29kZSB0aGF0IGlzIGV4ZWN1dGVkIGJ5IHRoZXNlIG9wZXJhdGlvbnMKICAgICAgICBpcyBub3QgYXZhaWxhYmxlIGF0IHRoZSB0aW1lIHRoZSBtb2R1bGUgaXMgY29tcGlsZWQuCi0KZGlmZiAtLWdpdCBhL0RvYy9yZWZlcmVuY2UvZXhwcmVzc2lvbnMucnN0IGIvRG9jL3JlZmVyZW5jZS9leHByZXNzaW9ucy5yc3QKaW5kZXggMDZiYWJhMC4uYjZiMmIwMCAxMDA2NDQKLS0tIGEvRG9jL3JlZmVyZW5jZS9leHByZXNzaW9ucy5yc3QKKysrIGIvRG9jL3JlZmVyZW5jZS9leHByZXNzaW9ucy5yc3QKQEAgLTI5LDcgKzI5LDcgQEAKIAogV2hlbiBhIGRlc2NyaXB0aW9uIG9mIGFuIGFyaXRobWV0aWMgb3BlcmF0b3IgYmVsb3cgdXNlcyB0aGUgcGhyYXNlICJ0aGUgbnVtZXJpYwogYXJndW1lbnRzIGFyZSBjb252ZXJ0ZWQgdG8gYSBjb21tb24gdHlwZSwiIHRoaXMgbWVhbnMgdGhhdCB0aGUgb3BlcmF0b3IKLWltcGxlbWVudGF0aW9uIGZvciBidWlsdC1pbiB0eXBlcyB3b3JrcyB0aGF0IHdheToKK2ltcGxlbWVudGF0aW9uIGZvciBidWlsdC1pbiB0eXBlcyB3b3JrcyBhcyBmb2xsb3dzOgogCiAqIElmIGVpdGhlciBhcmd1bWVudCBpcyBhIGNvbXBsZXggbnVtYmVyLCB0aGUgb3RoZXIgaXMgY29udmVydGVkIHRvIGNvbXBsZXg7CiAKQEAgLTM4LDggKzM4LDkgQEAKIAogKiBvdGhlcndpc2UsIGJvdGggbXVzdCBiZSBpbnRlZ2VycyBhbmQgbm8gY29udmVyc2lvbiBpcyBuZWNlc3NhcnkuCiAKLVNvbWUgYWRkaXRpb25hbCBydWxlcyBhcHBseSBmb3IgY2VydGFpbiBvcGVyYXRvcnMgKGUuZy4sIGEgc3RyaW5nIGxlZnQgYXJndW1lbnQKLXRvIHRoZSAnJScgb3BlcmF0b3IpLiAgRXh0ZW5zaW9ucyBtdXN0IGRlZmluZSB0aGVpciBvd24gY29udmVyc2lvbiBiZWhhdmlvci4KK1NvbWUgYWRkaXRpb25hbCBydWxlcyBhcHBseSBmb3IgY2VydGFpbiBvcGVyYXRvcnMgKGUuZy4sIGEgc3RyaW5nIGFzIGEgbGVmdAorYXJndW1lbnQgdG8gdGhlICclJyBvcGVyYXRvcikuICBFeHRlbnNpb25zIG11c3QgZGVmaW5lIHRoZWlyIG93biBjb252ZXJzaW9uCitiZWhhdmlvci4KIAogCiAuLiBfYXRvbXM6CkBAIC0xODMsNyArMTg0LDcgQEAKIGVhY2ggdGltZSB0aGUgaW5uZXJtb3N0IGJsb2NrIGlzIHJlYWNoZWQuCiAKIE5vdGUgdGhhdCB0aGUgY29tcHJlaGVuc2lvbiBpcyBleGVjdXRlZCBpbiBhIHNlcGFyYXRlIHNjb3BlLCBzbyBuYW1lcyBhc3NpZ25lZAotdG8gaW4gdGhlIHRhcmdldCBsaXN0IGRvbid0ICJsZWFrIiBpbiB0aGUgZW5jbG9zaW5nIHNjb3BlLgordG8gaW4gdGhlIHRhcmdldCBsaXN0IGRvbid0ICJsZWFrIiBpbnRvIHRoZSBlbmNsb3Npbmcgc2NvcGUuCiAKIAogLi4gX2xpc3RzOgpAQCAtMjkzLDcgKzI5NCw3IEBACiBicmFja2V0cyBvciBjdXJseSBicmFjZXMuCiAKIFZhcmlhYmxlcyB1c2VkIGluIHRoZSBnZW5lcmF0b3IgZXhwcmVzc2lvbiBhcmUgZXZhbHVhdGVkIGxhemlseSB3aGVuIHRoZQotOm1ldGg6YH5nZW5lcmF0b3IuX19uZXh0X19gIG1ldGhvZCBpcyBjYWxsZWQgZm9yIGdlbmVyYXRvciBvYmplY3QgKGluIHRoZSBzYW1lCis6bWV0aDpgfmdlbmVyYXRvci5fX25leHRfX2AgbWV0aG9kIGlzIGNhbGxlZCBmb3IgdGhlIGdlbmVyYXRvciBvYmplY3QgKGluIHRoZSBzYW1lCiBmYXNoaW9uIGFzIG5vcm1hbCBnZW5lcmF0b3JzKS4gIEhvd2V2ZXIsIHRoZSBsZWZ0bW9zdCA6a2V5d29yZDpgZm9yYCBjbGF1c2UgaXMKIGltbWVkaWF0ZWx5IGV2YWx1YXRlZCwgc28gdGhhdCBhbiBlcnJvciBwcm9kdWNlZCBieSBpdCBjYW4gYmUgc2VlbiBiZWZvcmUgYW55CiBvdGhlciBwb3NzaWJsZSBlcnJvciBpbiB0aGUgY29kZSB0aGF0IGhhbmRsZXMgdGhlIGdlbmVyYXRvciBleHByZXNzaW9uLgpAQCAtMzAyLDcgKzMwMyw3IEBACiByYW5nZSgxMCkgZm9yIHkgaW4gYmFyKHgpKWBgLgogCiBUaGUgcGFyZW50aGVzZXMgY2FuIGJlIG9taXR0ZWQgb24gY2FsbHMgd2l0aCBvbmx5IG9uZSBhcmd1bWVudC4gIFNlZSBzZWN0aW9uCi06cmVmOmBjYWxsc2AgZm9yIHRoZSBkZXRhaWwuCis6cmVmOmBjYWxsc2AgZm9yIGRldGFpbHMuCiAKIAogLi4gX3lpZWxkZXhwcjoKQEAgLTMyNCwxNSArMzI1LDE2IEBACiBleHByZXNzaW9uIGluIGEgZnVuY3Rpb24ncyBib2R5IGNhdXNlcyB0aGF0IGZ1bmN0aW9uIHRvIGJlIGEgZ2VuZXJhdG9yLgogCiBXaGVuIGEgZ2VuZXJhdG9yIGZ1bmN0aW9uIGlzIGNhbGxlZCwgaXQgcmV0dXJucyBhbiBpdGVyYXRvciBrbm93biBhcyBhCi1nZW5lcmF0b3IuICBUaGF0IGdlbmVyYXRvciB0aGVuIGNvbnRyb2xzIHRoZSBleGVjdXRpb24gb2YgYSBnZW5lcmF0b3IgZnVuY3Rpb24uCitnZW5lcmF0b3IuICBUaGF0IGdlbmVyYXRvciB0aGVuIGNvbnRyb2xzIHRoZSBleGVjdXRpb24gb2YgdGhlIGdlbmVyYXRvciBmdW5jdGlvbi4KIFRoZSBleGVjdXRpb24gc3RhcnRzIHdoZW4gb25lIG9mIHRoZSBnZW5lcmF0b3IncyBtZXRob2RzIGlzIGNhbGxlZC4gIEF0IHRoYXQKIHRpbWUsIHRoZSBleGVjdXRpb24gcHJvY2VlZHMgdG8gdGhlIGZpcnN0IHlpZWxkIGV4cHJlc3Npb24sIHdoZXJlIGl0IGlzCi1zdXNwZW5kZWQgYWdhaW4sIHJldHVybmluZyB0aGUgdmFsdWUgb2YgOnRva2VuOmBleHByZXNzaW9uX2xpc3RgIHRvIGdlbmVyYXRvcidzCitzdXNwZW5kZWQgYWdhaW4sIHJldHVybmluZyB0aGUgdmFsdWUgb2YgOnRva2VuOmBleHByZXNzaW9uX2xpc3RgIHRvIHRoZSBnZW5lcmF0b3IncwogY2FsbGVyLiAgQnkgc3VzcGVuZGVkLCB3ZSBtZWFuIHRoYXQgYWxsIGxvY2FsIHN0YXRlIGlzIHJldGFpbmVkLCBpbmNsdWRpbmcgdGhlCi1jdXJyZW50IGJpbmRpbmdzIG9mIGxvY2FsIHZhcmlhYmxlcywgdGhlIGluc3RydWN0aW9uIHBvaW50ZXIsIGFuZCB0aGUgaW50ZXJuYWwKLWV2YWx1YXRpb24gc3RhY2suICBXaGVuIHRoZSBleGVjdXRpb24gaXMgcmVzdW1lZCBieSBjYWxsaW5nIG9uZSBvZiB0aGUKK2N1cnJlbnQgYmluZGluZ3Mgb2YgbG9jYWwgdmFyaWFibGVzLCB0aGUgaW5zdHJ1Y3Rpb24gcG9pbnRlciwgdGhlIGludGVybmFsCitldmFsdWF0aW9uIHN0YWNrLCBhbmQgdGhlIHN0YXRlIG9mIGFueSBleGNlcHRpb24gaGFuZGxpbmcuICBXaGVuIHRoZSBleGVjdXRpb24KK2lzIHJlc3VtZWQgYnkgY2FsbGluZyBvbmUgb2YgdGhlCiBnZW5lcmF0b3IncyBtZXRob2RzLCB0aGUgZnVuY3Rpb24gY2FuIHByb2NlZWQgZXhhY3RseSBhcyBpZiB0aGUgeWllbGQgZXhwcmVzc2lvbgotd2FzIGp1c3QgYW5vdGhlciBleHRlcm5hbCBjYWxsLiAgVGhlIHZhbHVlIG9mIHRoZSB5aWVsZCBleHByZXNzaW9uIGFmdGVyCit3ZXJlIGp1c3QgYW5vdGhlciBleHRlcm5hbCBjYWxsLiAgVGhlIHZhbHVlIG9mIHRoZSB5aWVsZCBleHByZXNzaW9uIGFmdGVyCiByZXN1bWluZyBkZXBlbmRzIG9uIHRoZSBtZXRob2Qgd2hpY2ggcmVzdW1lZCB0aGUgZXhlY3V0aW9uLiAgSWYKIDptZXRoOmB+Z2VuZXJhdG9yLl9fbmV4dF9fYCBpcyB1c2VkICh0eXBpY2FsbHkgdmlhIGVpdGhlciBhIDprZXl3b3JkOmBmb3JgIG9yCiB0aGUgOmZ1bmM6YG5leHRgIGJ1aWx0aW4pIHRoZW4gdGhlIHJlc3VsdCBpcyA6Y29uc3Q6YE5vbmVgLiAgT3RoZXJ3aXNlLCBpZgpAQCAtMzQ0LDExICszNDYsMTEgQEAKIEFsbCBvZiB0aGlzIG1ha2VzIGdlbmVyYXRvciBmdW5jdGlvbnMgcXVpdGUgc2ltaWxhciB0byBjb3JvdXRpbmVzOyB0aGV5IHlpZWxkCiBtdWx0aXBsZSB0aW1lcywgdGhleSBoYXZlIG1vcmUgdGhhbiBvbmUgZW50cnkgcG9pbnQgYW5kIHRoZWlyIGV4ZWN1dGlvbiBjYW4gYmUKIHN1c3BlbmRlZC4gIFRoZSBvbmx5IGRpZmZlcmVuY2UgaXMgdGhhdCBhIGdlbmVyYXRvciBmdW5jdGlvbiBjYW5ub3QgY29udHJvbAotd2hlcmUgc2hvdWxkIHRoZSBleGVjdXRpb24gY29udGludWUgYWZ0ZXIgaXQgeWllbGRzOyB0aGUgY29udHJvbCBpcyBhbHdheXMKK3doZXJlIHRoZSBleGVjdXRpb24gc2hvdWxkIGNvbnRpbnVlIGFmdGVyIGl0IHlpZWxkczsgdGhlIGNvbnRyb2wgaXMgYWx3YXlzCiB0cmFuc2ZlcnJlZCB0byB0aGUgZ2VuZXJhdG9yJ3MgY2FsbGVyLgogCi15aWVsZCBleHByZXNzaW9ucyBhcmUgYWxsb3dlZCBpbiB0aGUgOmtleXdvcmQ6YHRyeWAgY2xhdXNlIG9mIGEgOmtleXdvcmQ6YHRyeWAKLS4uLiAgOmtleXdvcmQ6YGZpbmFsbHlgIGNvbnN0cnVjdC4gIElmIHRoZSBnZW5lcmF0b3IgaXMgbm90IHJlc3VtZWQgYmVmb3JlIGl0IGlzCitZaWVsZCBleHByZXNzaW9ucyBhcmUgYWxsb3dlZCBhbnl3aGVyZSBpbiBhIDprZXl3b3JkOmB0cnlgIGNvbnN0cnVjdC4gIElmIHRoZQorZ2VuZXJhdG9yIGlzIG5vdCByZXN1bWVkIGJlZm9yZSBpdCBpcwogZmluYWxpemVkIChieSByZWFjaGluZyBhIHplcm8gcmVmZXJlbmNlIGNvdW50IG9yIGJ5IGJlaW5nIGdhcmJhZ2UgY29sbGVjdGVkKSwKIHRoZSBnZW5lcmF0b3ItaXRlcmF0b3IncyA6bWV0aDpgfmdlbmVyYXRvci5jbG9zZWAgbWV0aG9kIHdpbGwgYmUgY2FsbGVkLAogYWxsb3dpbmcgYW55IHBlbmRpbmcgOmtleXdvcmQ6YGZpbmFsbHlgIGNsYXVzZXMgdG8gZXhlY3V0ZS4KQEAgLTM2OSw3ICszNzEsNyBAQAogKGJ5IHJldHVybmluZyBhIHZhbHVlIGZyb20gdGhlIHN1Yi1nZW5lcmF0b3IpLgogCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMwotICAgICAgQWRkZWQgYGB5aWVsZCBmcm9tIDxleHByPmBgIHRvIGRlbGVnYXRlIGNvbnRyb2wgZmxvdyB0byBhIHN1Yml0ZXJhdG9yCisgICAgICBBZGRlZCBgYHlpZWxkIGZyb20gPGV4cHI+YGAgdG8gZGVsZWdhdGUgY29udHJvbCBmbG93IHRvIGEgc3ViaXRlcmF0b3IuCiAKIFRoZSBwYXJlbnRoZXNlcyBtYXkgYmUgb21pdHRlZCB3aGVuIHRoZSB5aWVsZCBleHByZXNzaW9uIGlzIHRoZSBzb2xlIGV4cHJlc3Npb24KIG9uIHRoZSByaWdodCBoYW5kIHNpZGUgb2YgYW4gYXNzaWdubWVudCBzdGF0ZW1lbnQuCkBAIC0zOTksNyArNDAxLDYgQEAKIGlzIGFscmVhZHkgZXhlY3V0aW5nIHJhaXNlcyBhIDpleGM6YFZhbHVlRXJyb3JgIGV4Y2VwdGlvbi4KIAogLi4gaW5kZXg6OiBleGNlcHRpb246IFN0b3BJdGVyYXRpb24KLS4uIGNsYXNzOjogZ2VuZXJhdG9yCiAKIAogLi4gbWV0aG9kOjogZ2VuZXJhdG9yLl9fbmV4dF9fKCkKQEAgLTQwOSw3ICs0MTAsNyBAQAogICAgOm1ldGg6YH5nZW5lcmF0b3IuX19uZXh0X19gIG1ldGhvZCwgdGhlIGN1cnJlbnQgeWllbGQgZXhwcmVzc2lvbiBhbHdheXMKICAgIGV2YWx1YXRlcyB0byA6Y29uc3Q6YE5vbmVgLiAgVGhlIGV4ZWN1dGlvbiB0aGVuIGNvbnRpbnVlcyB0byB0aGUgbmV4dCB5aWVsZAogICAgZXhwcmVzc2lvbiwgd2hlcmUgdGhlIGdlbmVyYXRvciBpcyBzdXNwZW5kZWQgYWdhaW4sIGFuZCB0aGUgdmFsdWUgb2YgdGhlCi0gICA6dG9rZW46YGV4cHJlc3Npb25fbGlzdGAgaXMgcmV0dXJuZWQgdG8gOm1ldGg6YG5leHRgJ3MgY2FsbGVyLiAgSWYgdGhlCisgICA6dG9rZW46YGV4cHJlc3Npb25fbGlzdGAgaXMgcmV0dXJuZWQgdG8gOm1ldGg6YF9fbmV4dF9fYCdzIGNhbGxlci4gIElmIHRoZQogICAgZ2VuZXJhdG9yIGV4aXRzIHdpdGhvdXQgeWllbGRpbmcgYW5vdGhlciB2YWx1ZSwgYSA6ZXhjOmBTdG9wSXRlcmF0aW9uYAogICAgZXhjZXB0aW9uIGlzIHJhaXNlZC4KIApAQCAtNDMwLDcgKzQzMSw3IEBACiAKIC4uIG1ldGhvZDo6IGdlbmVyYXRvci50aHJvdyh0eXBlWywgdmFsdWVbLCB0cmFjZWJhY2tdXSkKIAotICAgUmFpc2VzIGFuIGV4Y2VwdGlvbiBvZiB0eXBlIGBgdHlwZWBgIGF0IHRoZSBwb2ludCB3aGVyZSBnZW5lcmF0b3Igd2FzIHBhdXNlZCwKKyAgIFJhaXNlcyBhbiBleGNlcHRpb24gb2YgdHlwZSBgYHR5cGVgYCBhdCB0aGUgcG9pbnQgd2hlcmUgdGhlIGdlbmVyYXRvciB3YXMgcGF1c2VkLAogICAgYW5kIHJldHVybnMgdGhlIG5leHQgdmFsdWUgeWllbGRlZCBieSB0aGUgZ2VuZXJhdG9yIGZ1bmN0aW9uLiAgSWYgdGhlIGdlbmVyYXRvcgogICAgZXhpdHMgd2l0aG91dCB5aWVsZGluZyBhbm90aGVyIHZhbHVlLCBhIDpleGM6YFN0b3BJdGVyYXRpb25gIGV4Y2VwdGlvbiBpcwogICAgcmFpc2VkLiAgSWYgdGhlIGdlbmVyYXRvciBmdW5jdGlvbiBkb2VzIG5vdCBjYXRjaCB0aGUgcGFzc2VkLWluIGV4Y2VwdGlvbiwgb3IKQEAgLTQ0OSw4ICs0NTAsNiBAQAogICAgb3RoZXIgZXhjZXB0aW9uLCBpdCBpcyBwcm9wYWdhdGVkIHRvIHRoZSBjYWxsZXIuICA6bWV0aDpgY2xvc2VgIGRvZXMgbm90aGluZwogICAgaWYgdGhlIGdlbmVyYXRvciBoYXMgYWxyZWFkeSBleGl0ZWQgZHVlIHRvIGFuIGV4Y2VwdGlvbiBvciBub3JtYWwgZXhpdC4KIAotLi4gY2xhc3M6OiAuCi0KIC4uIGluZGV4Ojogc2luZ2xlOiB5aWVsZDsgZXhhbXBsZXMKIAogRXhhbXBsZXMKQEAgLTUyMCwxMSArNTE5LDExIEBACiAKIFRoZSBwcmltYXJ5IG11c3QgZXZhbHVhdGUgdG8gYW4gb2JqZWN0IG9mIGEgdHlwZSB0aGF0IHN1cHBvcnRzIGF0dHJpYnV0ZQogcmVmZXJlbmNlcywgd2hpY2ggbW9zdCBvYmplY3RzIGRvLiAgVGhpcyBvYmplY3QgaXMgdGhlbiBhc2tlZCB0byBwcm9kdWNlIHRoZQotYXR0cmlidXRlIHdob3NlIG5hbWUgaXMgdGhlIGlkZW50aWZpZXIgKHdoaWNoIGNhbiBiZSBjdXN0b21pemVkIGJ5IG92ZXJyaWRpbmcKLXRoZSA6bWV0aDpgX19nZXRhdHRyX19gIG1ldGhvZCkuICBJZiB0aGlzIGF0dHJpYnV0ZSBpcyBub3QgYXZhaWxhYmxlLCB0aGUKLWV4Y2VwdGlvbiA6ZXhjOmBBdHRyaWJ1dGVFcnJvcmAgaXMgcmFpc2VkLiAgT3RoZXJ3aXNlLCB0aGUgdHlwZSBhbmQgdmFsdWUgb2YgdGhlCi1vYmplY3QgcHJvZHVjZWQgaXMgZGV0ZXJtaW5lZCBieSB0aGUgb2JqZWN0LiAgTXVsdGlwbGUgZXZhbHVhdGlvbnMgb2YgdGhlIHNhbWUKLWF0dHJpYnV0ZSByZWZlcmVuY2UgbWF5IHlpZWxkIGRpZmZlcmVudCBvYmplY3RzLgorYXR0cmlidXRlIHdob3NlIG5hbWUgaXMgdGhlIGlkZW50aWZpZXIuICBUaGlzIHByb2R1Y3Rpb24gY2FuIGJlIGN1c3RvbWl6ZWQgYnkKK292ZXJyaWRpbmcgdGhlIDptZXRoOmBfX2dldGF0dHJfX2AgbWV0aG9kLiAgSWYgdGhpcyBhdHRyaWJ1dGUgaXMgbm90IGF2YWlsYWJsZSwKK3RoZSBleGNlcHRpb24gOmV4YzpgQXR0cmlidXRlRXJyb3JgIGlzIHJhaXNlZC4gIE90aGVyd2lzZSwgdGhlIHR5cGUgYW5kIHZhbHVlIG9mCit0aGUgb2JqZWN0IHByb2R1Y2VkIGlzIGRldGVybWluZWQgYnkgdGhlIG9iamVjdC4gIE11bHRpcGxlIGV2YWx1YXRpb25zIG9mIHRoZQorc2FtZSBhdHRyaWJ1dGUgcmVmZXJlbmNlIG1heSB5aWVsZCBkaWZmZXJlbnQgb2JqZWN0cy4KIAogCiAuLiBfc3Vic2NyaXB0aW9uczoKQEAgLTU0OSw5ICs1NDgsOSBAQAogLi4gcHJvZHVjdGlvbmxpc3Q6OgogICAgc3Vic2NyaXB0aW9uOiBgcHJpbWFyeWAgIlsiIGBleHByZXNzaW9uX2xpc3RgICJdIgogCi1UaGUgcHJpbWFyeSBtdXN0IGV2YWx1YXRlIHRvIGFuIG9iamVjdCB0aGF0IHN1cHBvcnRzIHN1YnNjcmlwdGlvbiwgZS5nLiBhIGxpc3QKLW9yIGRpY3Rpb25hcnkuICBVc2VyLWRlZmluZWQgb2JqZWN0cyBjYW4gc3VwcG9ydCBzdWJzY3JpcHRpb24gYnkgZGVmaW5pbmcgYQotOm1ldGg6YF9fZ2V0aXRlbV9fYCBtZXRob2QuCitUaGUgcHJpbWFyeSBtdXN0IGV2YWx1YXRlIHRvIGFuIG9iamVjdCB0aGF0IHN1cHBvcnRzIHN1YnNjcmlwdGlvbiAobGlzdHMgb3IKK2RpY3Rpb25hcmllcyBmb3IgZXhhbXBsZSkuICBVc2VyLWRlZmluZWQgb2JqZWN0cyBjYW4gc3VwcG9ydCBzdWJzY3JpcHRpb24gYnkKK2RlZmluaW5nIGEgOm1ldGg6YF9fZ2V0aXRlbV9fYCBtZXRob2QuCiAKIEZvciBidWlsdC1pbiBvYmplY3RzLCB0aGVyZSBhcmUgdHdvIHR5cGVzIG9mIG9iamVjdHMgdGhhdCBzdXBwb3J0IHN1YnNjcmlwdGlvbjoKIApAQCAtNjIxLDggKzYyMCw4IEBACiAgICBzaW5nbGU6IHN0b3AgKHNsaWNlIG9iamVjdCBhdHRyaWJ1dGUpCiAgICBzaW5nbGU6IHN0ZXAgKHNsaWNlIG9iamVjdCBhdHRyaWJ1dGUpCiAKLVRoZSBzZW1hbnRpY3MgZm9yIGEgc2xpY2luZyBhcmUgYXMgZm9sbG93cy4gIFRoZSBwcmltYXJ5IG11c3QgZXZhbHVhdGUgdG8gYQotbWFwcGluZyBvYmplY3QsIGFuZCBpdCBpcyBpbmRleGVkICh1c2luZyB0aGUgc2FtZSA6bWV0aDpgX19nZXRpdGVtX19gIG1ldGhvZCBhcworVGhlIHNlbWFudGljcyBmb3IgYSBzbGljaW5nIGFyZSBhcyBmb2xsb3dzLiAgVGhlIHByaW1hcnkgaXMgaW5kZXhlZCAodXNpbmcgdGhlCitzYW1lIDptZXRoOmBfX2dldGl0ZW1fX2AgbWV0aG9kIGFzCiBub3JtYWwgc3Vic2NyaXB0aW9uKSB3aXRoIGEga2V5IHRoYXQgaXMgY29uc3RydWN0ZWQgZnJvbSB0aGUgc2xpY2UgbGlzdCwgYXMKIGZvbGxvd3MuICBJZiB0aGUgc2xpY2UgbGlzdCBjb250YWlucyBhdCBsZWFzdCBvbmUgY29tbWEsIHRoZSBrZXkgaXMgYSB0dXBsZQogY29udGFpbmluZyB0aGUgY29udmVyc2lvbiBvZiB0aGUgc2xpY2UgaXRlbXM7IG90aGVyd2lzZSwgdGhlIGNvbnZlcnNpb24gb2YgdGhlCkBAIC02NjAsOCArNjU5LDggQEAKICAgIGtleXdvcmRfYXJndW1lbnRzOiBga2V5d29yZF9pdGVtYCAoIiwiIGBrZXl3b3JkX2l0ZW1gKSoKICAgIGtleXdvcmRfaXRlbTogYGlkZW50aWZpZXJgICI9IiBgZXhwcmVzc2lvbmAKIAotQSB0cmFpbGluZyBjb21tYSBtYXkgYmUgcHJlc2VudCBhZnRlciB0aGUgcG9zaXRpb25hbCBhbmQga2V5d29yZCBhcmd1bWVudHMgYnV0Ci1kb2VzIG5vdCBhZmZlY3QgdGhlIHNlbWFudGljcy4KK0FuIG9wdGlvbmFsIHRyYWlsaW5nIGNvbW1hIG1heSBiZSBwcmVzZW50IGFmdGVyIHRoZSBwb3NpdGlvbmFsIGFuZCBrZXl3b3JkIGFyZ3VtZW50cworYnV0IGRvZXMgbm90IGFmZmVjdCB0aGUgc2VtYW50aWNzLgogCiAuLiBpbmRleDo6CiAgICBzaW5nbGU6IHBhcmFtZXRlcjsgY2FsbCBzZW1hbnRpY3MKQEAgLTk0Myw5ICs5NDIsOSBAQAogLi4gaW5kZXg6OiBzaW5nbGU6IGFkZGl0aW9uCiAKIFRoZSBgYCtgYCAoYWRkaXRpb24pIG9wZXJhdG9yIHlpZWxkcyB0aGUgc3VtIG9mIGl0cyBhcmd1bWVudHMuICBUaGUgYXJndW1lbnRzCi1tdXN0IGVpdGhlciBib3RoIGJlIG51bWJlcnMgb3IgYm90aCBzZXF1ZW5jZXMgb2YgdGhlIHNhbWUgdHlwZS4gIEluIHRoZSBmb3JtZXIKLWNhc2UsIHRoZSBudW1iZXJzIGFyZSBjb252ZXJ0ZWQgdG8gYSBjb21tb24gdHlwZSBhbmQgdGhlbiBhZGRlZCB0b2dldGhlci4gIEluCi10aGUgbGF0dGVyIGNhc2UsIHRoZSBzZXF1ZW5jZXMgYXJlIGNvbmNhdGVuYXRlZC4KK211c3QgZWl0aGVyIGJvdGggYmUgbnVtYmVycyBvciBib3RoIGJlIHNlcXVlbmNlcyBvZiB0aGUgc2FtZSB0eXBlLiAgSW4gdGhlCitmb3JtZXIgY2FzZSwgdGhlIG51bWJlcnMgYXJlIGNvbnZlcnRlZCB0byBhIGNvbW1vbiB0eXBlIGFuZCB0aGVuIGFkZGVkIHRvZ2V0aGVyLgorSW4gdGhlIGxhdHRlciBjYXNlLCB0aGUgc2VxdWVuY2VzIGFyZSBjb25jYXRlbmF0ZWQuCiAKIC4uIGluZGV4Ojogc2luZ2xlOiBzdWJ0cmFjdGlvbgogCkBAIC0xMDE0LDEwICsxMDEzLDYgQEAKIAogCiAuLiBfY29tcGFyaXNvbnM6Ci0uLiBfaXM6Ci0uLiBfaXMgbm90OgotLi4gX2luOgotLi4gX25vdCBpbjoKIAogQ29tcGFyaXNvbnMKID09PT09PT09PT09CkBAIC0xMDUzLDcwICsxMDQ4LDE4NyBAQAogKmMqLCBzbyB0aGF0LCBlLmcuLCBgYHggPCB5ID4gemBgIGlzIHBlcmZlY3RseSBsZWdhbCAodGhvdWdoIHBlcmhhcHMgbm90CiBwcmV0dHkpLgogCitWYWx1ZSBjb21wYXJpc29ucworLS0tLS0tLS0tLS0tLS0tLS0KKwogVGhlIG9wZXJhdG9ycyBgYDxgYCwgYGA+YGAsIGBgPT1gYCwgYGA+PWBgLCBgYDw9YGAsIGFuZCBgYCE9YGAgY29tcGFyZSB0aGUKLXZhbHVlcyBvZiB0d28gb2JqZWN0cy4gIFRoZSBvYmplY3RzIG5lZWQgbm90IGhhdmUgdGhlIHNhbWUgdHlwZS4gSWYgYm90aCBhcmUKLW51bWJlcnMsIHRoZXkgYXJlIGNvbnZlcnRlZCB0byBhIGNvbW1vbiB0eXBlLiAgT3RoZXJ3aXNlLCB0aGUgYGA9PWBgIGFuZCBgYCE9YGAKLW9wZXJhdG9ycyAqYWx3YXlzKiBjb25zaWRlciBvYmplY3RzIG9mIGRpZmZlcmVudCB0eXBlcyB0byBiZSB1bmVxdWFsLCB3aGlsZSB0aGUKLWBgPGBgLCBgYD5gYCwgYGA+PWBgIGFuZCBgYDw9YGAgb3BlcmF0b3JzIHJhaXNlIGEgOmV4YzpgVHlwZUVycm9yYCB3aGVuCi1jb21wYXJpbmcgb2JqZWN0cyBvZiBkaWZmZXJlbnQgdHlwZXMgdGhhdCBkbyBub3QgaW1wbGVtZW50IHRoZXNlIG9wZXJhdG9ycyBmb3IKLXRoZSBnaXZlbiBwYWlyIG9mIHR5cGVzLiAgWW91IGNhbiBjb250cm9sIGNvbXBhcmlzb24gYmVoYXZpb3Igb2Ygb2JqZWN0cyBvZgotbm9uLWJ1aWx0LWluIHR5cGVzIGJ5IGRlZmluaW5nIHJpY2ggY29tcGFyaXNvbiBtZXRob2RzIGxpa2UgOm1ldGg6YF9fZ3RfX2AsCi1kZXNjcmliZWQgaW4gc2VjdGlvbiA6cmVmOmBjdXN0b21pemF0aW9uYC4KK3ZhbHVlcyBvZiB0d28gb2JqZWN0cy4gIFRoZSBvYmplY3RzIGRvIG5vdCBuZWVkIHRvIGhhdmUgdGhlIHNhbWUgdHlwZS4KIAotQ29tcGFyaXNvbiBvZiBvYmplY3RzIG9mIHRoZSBzYW1lIHR5cGUgZGVwZW5kcyBvbiB0aGUgdHlwZToKK0NoYXB0ZXIgOnJlZjpgb2JqZWN0c2Agc3RhdGVzIHRoYXQgb2JqZWN0cyBoYXZlIGEgdmFsdWUgKGluIGFkZGl0aW9uIHRvIHR5cGUKK2FuZCBpZGVudGl0eSkuICBUaGUgdmFsdWUgb2YgYW4gb2JqZWN0IGlzIGEgcmF0aGVyIGFic3RyYWN0IG5vdGlvbiBpbiBQeXRob246CitGb3IgZXhhbXBsZSwgdGhlcmUgaXMgbm8gY2Fub25pY2FsIGFjY2VzcyBtZXRob2QgZm9yIGFuIG9iamVjdCdzIHZhbHVlLiAgQWxzbywKK3RoZXJlIGlzIG5vIHJlcXVpcmVtZW50IHRoYXQgdGhlIHZhbHVlIG9mIGFuIG9iamVjdCBzaG91bGQgYmUgY29uc3RydWN0ZWQgaW4gYQorcGFydGljdWxhciB3YXksIGUuZy4gY29tcHJpc2VkIG9mIGFsbCBpdHMgZGF0YSBhdHRyaWJ1dGVzLiBDb21wYXJpc29uIG9wZXJhdG9ycworaW1wbGVtZW50IGEgcGFydGljdWxhciBub3Rpb24gb2Ygd2hhdCB0aGUgdmFsdWUgb2YgYW4gb2JqZWN0IGlzLiAgT25lIGNhbiB0aGluaworb2YgdGhlbSBhcyBkZWZpbmluZyB0aGUgdmFsdWUgb2YgYW4gb2JqZWN0IGluZGlyZWN0bHksIGJ5IG1lYW5zIG9mIHRoZWlyCitjb21wYXJpc29uIGltcGxlbWVudGF0aW9uLgogCi0qIE51bWJlcnMgYXJlIGNvbXBhcmVkIGFyaXRobWV0aWNhbGx5LgorQmVjYXVzZSBhbGwgdHlwZXMgYXJlIChkaXJlY3Qgb3IgaW5kaXJlY3QpIHN1YnR5cGVzIG9mIDpjbGFzczpgb2JqZWN0YCwgdGhleQoraW5oZXJpdCB0aGUgZGVmYXVsdCBjb21wYXJpc29uIGJlaGF2aW9yIGZyb20gOmNsYXNzOmBvYmplY3RgLiAgVHlwZXMgY2FuCitjdXN0b21pemUgdGhlaXIgY29tcGFyaXNvbiBiZWhhdmlvciBieSBpbXBsZW1lbnRpbmcKKzpkZm46YHJpY2ggY29tcGFyaXNvbiBtZXRob2RzYCBsaWtlIDptZXRoOmBfX2x0X19gLCBkZXNjcmliZWQgaW4KKzpyZWY6YGN1c3RvbWl6YXRpb25gLgogCi0qIFRoZSB2YWx1ZXMgOmNvbnN0OmBmbG9hdCgnTmFOJylgIGFuZCA6Y29uc3Q6YERlY2ltYWwoJ05hTicpYCBhcmUgc3BlY2lhbC4KLSAgVGhlIGFyZSBpZGVudGljYWwgdG8gdGhlbXNlbHZlcywgYGB4IGlzIHhgYCBidXQgYXJlIG5vdCBlcXVhbCB0byB0aGVtc2VsdmVzLAotICBgYHggIT0geGBgLiAgQWRkaXRpb25hbGx5LCBjb21wYXJpbmcgYW55IHZhbHVlIHRvIGEgbm90LWEtbnVtYmVyIHZhbHVlCitUaGUgZGVmYXVsdCBiZWhhdmlvciBmb3IgZXF1YWxpdHkgY29tcGFyaXNvbiAoYGA9PWBgIGFuZCBgYCE9YGApIGlzIGJhc2VkIG9uCit0aGUgaWRlbnRpdHkgb2YgdGhlIG9iamVjdHMuICBIZW5jZSwgZXF1YWxpdHkgY29tcGFyaXNvbiBvZiBpbnN0YW5jZXMgd2l0aCB0aGUKK3NhbWUgaWRlbnRpdHkgcmVzdWx0cyBpbiBlcXVhbGl0eSwgYW5kIGVxdWFsaXR5IGNvbXBhcmlzb24gb2YgaW5zdGFuY2VzIHdpdGgKK2RpZmZlcmVudCBpZGVudGl0aWVzIHJlc3VsdHMgaW4gaW5lcXVhbGl0eS4gIEEgbW90aXZhdGlvbiBmb3IgdGhpcyBkZWZhdWx0CitiZWhhdmlvciBpcyB0aGUgZGVzaXJlIHRoYXQgYWxsIG9iamVjdHMgc2hvdWxkIGJlIHJlZmxleGl2ZSAoaS5lLiBgYHggaXMgeWBgCitpbXBsaWVzIGBgeCA9PSB5YGApLgorCitBIGRlZmF1bHQgb3JkZXIgY29tcGFyaXNvbiAoYGA8YGAsIGBgPmBgLCBgYDw9YGAsIGFuZCBgYD49YGApIGlzIG5vdCBwcm92aWRlZDsKK2FuIGF0dGVtcHQgcmFpc2VzIDpleGM6YFR5cGVFcnJvcmAuICBBIG1vdGl2YXRpb24gZm9yIHRoaXMgZGVmYXVsdCBiZWhhdmlvciBpcwordGhlIGxhY2sgb2YgYSBzaW1pbGFyIGludmFyaWFudCBhcyBmb3IgZXF1YWxpdHkuCisKK1RoZSBiZWhhdmlvciBvZiB0aGUgZGVmYXVsdCBlcXVhbGl0eSBjb21wYXJpc29uLCB0aGF0IGluc3RhbmNlcyB3aXRoIGRpZmZlcmVudAoraWRlbnRpdGllcyBhcmUgYWx3YXlzIHVuZXF1YWwsIG1heSBiZSBpbiBjb250cmFzdCB0byB3aGF0IHR5cGVzIHdpbGwgbmVlZCB0aGF0CitoYXZlIGEgc2Vuc2libGUgZGVmaW5pdGlvbiBvZiBvYmplY3QgdmFsdWUgYW5kIHZhbHVlLWJhc2VkIGVxdWFsaXR5LiAgU3VjaAordHlwZXMgd2lsbCBuZWVkIHRvIGN1c3RvbWl6ZSB0aGVpciBjb21wYXJpc29uIGJlaGF2aW9yLCBhbmQgaW4gZmFjdCwgYSBudW1iZXIKK29mIGJ1aWx0LWluIHR5cGVzIGhhdmUgZG9uZSB0aGF0LgorCitUaGUgZm9sbG93aW5nIGxpc3QgZGVzY3JpYmVzIHRoZSBjb21wYXJpc29uIGJlaGF2aW9yIG9mIHRoZSBtb3N0IGltcG9ydGFudAorYnVpbHQtaW4gdHlwZXMuCisKKyogTnVtYmVycyBvZiBidWlsdC1pbiBudW1lcmljIHR5cGVzICg6cmVmOmB0eXBlc251bWVyaWNgKSBhbmQgb2YgdGhlIHN0YW5kYXJkCisgIGxpYnJhcnkgdHlwZXMgOmNsYXNzOmBmcmFjdGlvbnMuRnJhY3Rpb25gIGFuZCA6Y2xhc3M6YGRlY2ltYWwuRGVjaW1hbGAgY2FuIGJlCisgIGNvbXBhcmVkIHdpdGhpbiBhbmQgYWNyb3NzIHRoZWlyIHR5cGVzLCB3aXRoIHRoZSByZXN0cmljdGlvbiB0aGF0IGNvbXBsZXgKKyAgbnVtYmVycyBkbyBub3Qgc3VwcG9ydCBvcmRlciBjb21wYXJpc29uLiAgV2l0aGluIHRoZSBsaW1pdHMgb2YgdGhlIHR5cGVzCisgIGludm9sdmVkLCB0aGV5IGNvbXBhcmUgbWF0aGVtYXRpY2FsbHkgKGFsZ29yaXRobWljYWxseSkgY29ycmVjdCB3aXRob3V0IGxvc3MKKyAgb2YgcHJlY2lzaW9uLgorCisgIFRoZSBub3QtYS1udW1iZXIgdmFsdWVzIDpjb25zdDpgZmxvYXQoJ05hTicpYCBhbmQgOmNvbnN0OmBEZWNpbWFsKCdOYU4nKWAKKyAgYXJlIHNwZWNpYWwuICBUaGV5IGFyZSBpZGVudGljYWwgdG8gdGhlbXNlbHZlcyAoYGB4IGlzIHhgYCBpcyB0cnVlKSBidXQKKyAgYXJlIG5vdCBlcXVhbCB0byB0aGVtc2VsdmVzIChgYHggPT0geGBgIGlzIGZhbHNlKS4gIEFkZGl0aW9uYWxseSwKKyAgY29tcGFyaW5nIGFueSBudW1iZXIgdG8gYSBub3QtYS1udW1iZXIgdmFsdWUKICAgd2lsbCByZXR1cm4gYGBGYWxzZWBgLiAgRm9yIGV4YW1wbGUsIGJvdGggYGAzIDwgZmxvYXQoJ05hTicpYGAgYW5kCiAgIGBgZmxvYXQoJ05hTicpIDwgM2BgIHdpbGwgcmV0dXJuIGBgRmFsc2VgYC4KIAotKiBCeXRlcyBvYmplY3RzIGFyZSBjb21wYXJlZCBsZXhpY29ncmFwaGljYWxseSB1c2luZyB0aGUgbnVtZXJpYyB2YWx1ZXMgb2YgdGhlaXIKLSAgZWxlbWVudHMuCisqIEJpbmFyeSBzZXF1ZW5jZXMgKGluc3RhbmNlcyBvZiA6Y2xhc3M6YGJ5dGVzYCBvciA6Y2xhc3M6YGJ5dGVhcnJheWApIGNhbiBiZQorICBjb21wYXJlZCB3aXRoaW4gYW5kIGFjcm9zcyB0aGVpciB0eXBlcy4gIFRoZXkgY29tcGFyZSBsZXhpY29ncmFwaGljYWxseSB1c2luZworICB0aGUgbnVtZXJpYyB2YWx1ZXMgb2YgdGhlaXIgZWxlbWVudHMuCiAKLSogU3RyaW5ncyBhcmUgY29tcGFyZWQgbGV4aWNvZ3JhcGhpY2FsbHkgdXNpbmcgdGhlIG51bWVyaWMgZXF1aXZhbGVudHMgKHRoZQotICByZXN1bHQgb2YgdGhlIGJ1aWx0LWluIGZ1bmN0aW9uIDpmdW5jOmBvcmRgKSBvZiB0aGVpciBjaGFyYWN0ZXJzLiBbI11fIFN0cmluZwotICBhbmQgYnl0ZXMgb2JqZWN0IGNhbid0IGJlIGNvbXBhcmVkIQorKiBTdHJpbmdzIChpbnN0YW5jZXMgb2YgOmNsYXNzOmBzdHJgKSBjb21wYXJlIGxleGljb2dyYXBoaWNhbGx5IHVzaW5nIHRoZQorICBudW1lcmljYWwgVW5pY29kZSBjb2RlIHBvaW50cyAodGhlIHJlc3VsdCBvZiB0aGUgYnVpbHQtaW4gZnVuY3Rpb24KKyAgOmZ1bmM6YG9yZGApIG9mIHRoZWlyIGNoYXJhY3RlcnMuIFsjXV8KIAotKiBUdXBsZXMgYW5kIGxpc3RzIGFyZSBjb21wYXJlZCBsZXhpY29ncmFwaGljYWxseSB1c2luZyBjb21wYXJpc29uIG9mCi0gIGNvcnJlc3BvbmRpbmcgZWxlbWVudHMuICBUaGlzIG1lYW5zIHRoYXQgdG8gY29tcGFyZSBlcXVhbCwgZWFjaCBlbGVtZW50IG11c3QKLSAgY29tcGFyZSBlcXVhbCBhbmQgdGhlIHR3byBzZXF1ZW5jZXMgbXVzdCBiZSBvZiB0aGUgc2FtZSB0eXBlIGFuZCBoYXZlIHRoZSBzYW1lCi0gIGxlbmd0aC4KKyAgU3RyaW5ncyBhbmQgYmluYXJ5IHNlcXVlbmNlcyBjYW5ub3QgYmUgZGlyZWN0bHkgY29tcGFyZWQuCiAKLSAgSWYgbm90IGVxdWFsLCB0aGUgc2VxdWVuY2VzIGFyZSBvcmRlcmVkIHRoZSBzYW1lIGFzIHRoZWlyIGZpcnN0IGRpZmZlcmluZwotICBlbGVtZW50cy4gIEZvciBleGFtcGxlLCBgYFsxLDIseF0gPD0gWzEsMix5XWBgIGhhcyB0aGUgc2FtZSB2YWx1ZSBhcwotICBgYHggPD0geWBgLiAgSWYgdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudCBkb2VzIG5vdCBleGlzdCwgdGhlIHNob3J0ZXIKLSAgc2VxdWVuY2UgaXMgb3JkZXJlZCBmaXJzdCAoZm9yIGV4YW1wbGUsIGBgWzEsMl0gPCBbMSwyLDNdYGApLgorKiBTZXF1ZW5jZXMgKGluc3RhbmNlcyBvZiA6Y2xhc3M6YHR1cGxlYCwgOmNsYXNzOmBsaXN0YCwgb3IgOmNsYXNzOmByYW5nZWApIGNhbgorICBiZSBjb21wYXJlZCBvbmx5IHdpdGhpbiBlYWNoIG9mIHRoZWlyIHR5cGVzLCB3aXRoIHRoZSByZXN0cmljdGlvbiB0aGF0IHJhbmdlcworICBkbyBub3Qgc3VwcG9ydCBvcmRlciBjb21wYXJpc29uLiAgRXF1YWxpdHkgY29tcGFyaXNvbiBhY3Jvc3MgdGhlc2UgdHlwZXMKKyAgcmVzdWx0cyBpbiB1bmVxdWFsaXR5LCBhbmQgb3JkZXJpbmcgY29tcGFyaXNvbiBhY3Jvc3MgdGhlc2UgdHlwZXMgcmFpc2VzCisgIDpleGM6YFR5cGVFcnJvcmAuCiAKLSogTWFwcGluZ3MgKGRpY3Rpb25hcmllcykgY29tcGFyZSBlcXVhbCBpZiBhbmQgb25seSBpZiB0aGV5IGhhdmUgdGhlIHNhbWUKLSAgYGAoa2V5LCB2YWx1ZSlgYCBwYWlycy4gT3JkZXIgY29tcGFyaXNvbnMgYGAoJzwnLCAnPD0nLCAnPj0nLCAnPicpYGAKLSAgcmFpc2UgOmV4YzpgVHlwZUVycm9yYC4KKyAgU2VxdWVuY2VzIGNvbXBhcmUgbGV4aWNvZ3JhcGhpY2FsbHkgdXNpbmcgY29tcGFyaXNvbiBvZiBjb3JyZXNwb25kaW5nCisgIGVsZW1lbnRzLCB3aGVyZWJ5IHJlZmxleGl2aXR5IG9mIHRoZSBlbGVtZW50cyBpcyBlbmZvcmNlZC4KIAotKiBTZXRzIGFuZCBmcm96ZW5zZXRzIGRlZmluZSBjb21wYXJpc29uIG9wZXJhdG9ycyB0byBtZWFuIHN1YnNldCBhbmQgc3VwZXJzZXQKLSAgdGVzdHMuICBUaG9zZSByZWxhdGlvbnMgZG8gbm90IGRlZmluZSB0b3RhbCBvcmRlcmluZ3MgKHRoZSB0d28gc2V0cyBgYHsxLDJ9YGAKLSAgYW5kIHsyLDN9IGFyZSBub3QgZXF1YWwsIG5vciBzdWJzZXRzIG9mIG9uZSBhbm90aGVyLCBub3Igc3VwZXJzZXRzIG9mIG9uZQorICBJbiBlbmZvcmNpbmcgcmVmbGV4aXZpdHkgb2YgZWxlbWVudHMsIHRoZSBjb21wYXJpc29uIG9mIGNvbGxlY3Rpb25zIGFzc3VtZXMKKyAgdGhhdCBmb3IgYSBjb2xsZWN0aW9uIGVsZW1lbnQgYGB4YGAsIGBgeCA9PSB4YGAgaXMgYWx3YXlzIHRydWUuICBCYXNlZCBvbgorICB0aGF0IGFzc3VtcHRpb24sIGVsZW1lbnQgaWRlbnRpdHkgaXMgY29tcGFyZWQgZmlyc3QsIGFuZCBlbGVtZW50IGNvbXBhcmlzb24KKyAgaXMgcGVyZm9ybWVkIG9ubHkgZm9yIGRpc3RpbmN0IGVsZW1lbnRzLiAgVGhpcyBhcHByb2FjaCB5aWVsZHMgdGhlIHNhbWUKKyAgcmVzdWx0IGFzIGEgc3RyaWN0IGVsZW1lbnQgY29tcGFyaXNvbiB3b3VsZCwgaWYgdGhlIGNvbXBhcmVkIGVsZW1lbnRzIGFyZQorICByZWZsZXhpdmUuICBGb3Igbm9uLXJlZmxleGl2ZSBlbGVtZW50cywgdGhlIHJlc3VsdCBpcyBkaWZmZXJlbnQgdGhhbiBmb3IKKyAgc3RyaWN0IGVsZW1lbnQgY29tcGFyaXNvbiwgYW5kIG1heSBiZSBzdXJwcmlzaW5nOiAgVGhlIG5vbi1yZWZsZXhpdmUKKyAgbm90LWEtbnVtYmVyIHZhbHVlcyBmb3IgZXhhbXBsZSByZXN1bHQgaW4gdGhlIGZvbGxvd2luZyBjb21wYXJpc29uIGJlaGF2aW9yCisgIHdoZW4gdXNlZCBpbiBhIGxpc3Q6OgorCisgICAgPj4+IG5hbiA9IGZsb2F0KCdOYU4nKQorICAgID4+PiBuYW4gaXMgbmFuCisgICAgVHJ1ZQorICAgID4+PiBuYW4gPT0gbmFuCisgICAgRmFsc2UgICAgICAgICAgICAgICAgIDwtLSB0aGUgZGVmaW5lZCBub24tcmVmbGV4aXZlIGJlaGF2aW9yIG9mIE5hTgorICAgID4+PiBbbmFuXSA9PSBbbmFuXQorICAgIFRydWUgICAgICAgICAgICAgICAgICA8LS0gbGlzdCBlbmZvcmNlcyByZWZsZXhpdml0eSBhbmQgdGVzdHMgaWRlbnRpdHkgZmlyc3QKKworICBMZXhpY29ncmFwaGljYWwgY29tcGFyaXNvbiBiZXR3ZWVuIGJ1aWx0LWluIGNvbGxlY3Rpb25zIHdvcmtzIGFzIGZvbGxvd3M6CisKKyAgLSBGb3IgdHdvIGNvbGxlY3Rpb25zIHRvIGNvbXBhcmUgZXF1YWwsIHRoZXkgbXVzdCBiZSBvZiB0aGUgc2FtZSB0eXBlLCBoYXZlCisgICAgdGhlIHNhbWUgbGVuZ3RoLCBhbmQgZWFjaCBwYWlyIG9mIGNvcnJlc3BvbmRpbmcgZWxlbWVudHMgbXVzdCBjb21wYXJlCisgICAgZXF1YWwgKGZvciBleGFtcGxlLCBgYFsxLDJdID09ICgxLDIpYGAgaXMgZmFsc2UgYmVjYXVzZSB0aGUgdHlwZSBpcyBub3QgdGhlCisgICAgc2FtZSkuCisKKyAgLSBDb2xsZWN0aW9ucyB0aGF0IHN1cHBvcnQgb3JkZXIgY29tcGFyaXNvbiBhcmUgb3JkZXJlZCB0aGUgc2FtZSBhcyB0aGVpcgorICAgIGZpcnN0IHVuZXF1YWwgZWxlbWVudHMgKGZvciBleGFtcGxlLCBgYFsxLDIseF0gPD0gWzEsMix5XWBgIGhhcyB0aGUgc2FtZQorICAgIHZhbHVlIGFzIGBgeCA8PSB5YGApLiAgSWYgYSBjb3JyZXNwb25kaW5nIGVsZW1lbnQgZG9lcyBub3QgZXhpc3QsIHRoZQorICAgIHNob3J0ZXIgY29sbGVjdGlvbiBpcyBvcmRlcmVkIGZpcnN0IChmb3IgZXhhbXBsZSwgYGBbMSwyXSA8IFsxLDIsM11gYCBpcworICAgIHRydWUpLgorCisqIE1hcHBpbmdzIChpbnN0YW5jZXMgb2YgOmNsYXNzOmBkaWN0YCkgY29tcGFyZSBlcXVhbCBpZiBhbmQgb25seSBpZiB0aGV5IGhhdmUKKyAgZXF1YWwgYChrZXksIHZhbHVlKWAgcGFpcnMuIEVxdWFsaXR5IGNvbXBhcmlzb24gb2YgdGhlIGtleXMgYW5kIGVsZW1lbnRzCisgIGVuZm9yY2VzIHJlZmxleGl2aXR5LgorCisgIE9yZGVyIGNvbXBhcmlzb25zIChgYDxgYCwgYGA+YGAsIGBgPD1gYCwgYW5kIGBgPj1gYCkgcmFpc2UgOmV4YzpgVHlwZUVycm9yYC4KKworKiBTZXRzIChpbnN0YW5jZXMgb2YgOmNsYXNzOmBzZXRgIG9yIDpjbGFzczpgZnJvemVuc2V0YCkgY2FuIGJlIGNvbXBhcmVkIHdpdGhpbgorICBhbmQgYWNyb3NzIHRoZWlyIHR5cGVzLgorCisgIFRoZXkgZGVmaW5lIG9yZGVyCisgIGNvbXBhcmlzb24gb3BlcmF0b3JzIHRvIG1lYW4gc3Vic2V0IGFuZCBzdXBlcnNldCB0ZXN0cy4gIFRob3NlIHJlbGF0aW9ucyBkbworICBub3QgZGVmaW5lIHRvdGFsIG9yZGVyaW5ncyAoZm9yIGV4YW1wbGUsIHRoZSB0d28gc2V0cyBgYHsxLDJ9YGAgYW5kIGBgezIsM31gYAorICBhcmUgbm90IGVxdWFsLCBub3Igc3Vic2V0cyBvZiBvbmUgYW5vdGhlciwgbm9yIHN1cGVyc2V0cyBvZiBvbmUKICAgYW5vdGhlcikuICBBY2NvcmRpbmdseSwgc2V0cyBhcmUgbm90IGFwcHJvcHJpYXRlIGFyZ3VtZW50cyBmb3IgZnVuY3Rpb25zCi0gIHdoaWNoIGRlcGVuZCBvbiB0b3RhbCBvcmRlcmluZy4gIEZvciBleGFtcGxlLCA6ZnVuYzpgbWluYCwgOmZ1bmM6YG1heGAsIGFuZAotICA6ZnVuYzpgc29ydGVkYCBwcm9kdWNlIHVuZGVmaW5lZCByZXN1bHRzIGdpdmVuIGEgbGlzdCBvZiBzZXRzIGFzIGlucHV0cy4KKyAgd2hpY2ggZGVwZW5kIG9uIHRvdGFsIG9yZGVyaW5nIChmb3IgZXhhbXBsZSwgOmZ1bmM6YG1pbmAsIDpmdW5jOmBtYXhgLCBhbmQKKyAgOmZ1bmM6YHNvcnRlZGAgcHJvZHVjZSB1bmRlZmluZWQgcmVzdWx0cyBnaXZlbiBhIGxpc3Qgb2Ygc2V0cyBhcyBpbnB1dHMpLgogCi0qIE1vc3Qgb3RoZXIgb2JqZWN0cyBvZiBidWlsdC1pbiB0eXBlcyBjb21wYXJlIHVuZXF1YWwgdW5sZXNzIHRoZXkgYXJlIHRoZSBzYW1lCi0gIG9iamVjdDsgdGhlIGNob2ljZSB3aGV0aGVyIG9uZSBvYmplY3QgaXMgY29uc2lkZXJlZCBzbWFsbGVyIG9yIGxhcmdlciB0aGFuCi0gIGFub3RoZXIgb25lIGlzIG1hZGUgYXJiaXRyYXJpbHkgYnV0IGNvbnNpc3RlbnRseSB3aXRoaW4gb25lIGV4ZWN1dGlvbiBvZiBhCi0gIHByb2dyYW0uCisgIENvbXBhcmlzb24gb2Ygc2V0cyBlbmZvcmNlcyByZWZsZXhpdml0eSBvZiBpdHMgZWxlbWVudHMuCiAKLUNvbXBhcmlzb24gb2Ygb2JqZWN0cyBvZiB0aGUgZGlmZmVyaW5nIHR5cGVzIGRlcGVuZHMgb24gd2hldGhlciBlaXRoZXIgb2YgdGhlCi10eXBlcyBwcm92aWRlIGV4cGxpY2l0IHN1cHBvcnQgZm9yIHRoZSBjb21wYXJpc29uLiAgTW9zdCBudW1lcmljIHR5cGVzIGNhbiBiZQotY29tcGFyZWQgd2l0aCBvbmUgYW5vdGhlci4gIFdoZW4gY3Jvc3MtdHlwZSBjb21wYXJpc29uIGlzIG5vdCBzdXBwb3J0ZWQsIHRoZQotY29tcGFyaXNvbiBtZXRob2QgcmV0dXJucyBgYE5vdEltcGxlbWVudGVkYGAuCisqIE1vc3Qgb3RoZXIgYnVpbHQtaW4gdHlwZXMgaGF2ZSBubyBjb21wYXJpc29uIG1ldGhvZHMgaW1wbGVtZW50ZWQsIHNvIHRoZXkKKyAgaW5oZXJpdCB0aGUgZGVmYXVsdCBjb21wYXJpc29uIGJlaGF2aW9yLgogCitVc2VyLWRlZmluZWQgY2xhc3NlcyB0aGF0IGN1c3RvbWl6ZSB0aGVpciBjb21wYXJpc29uIGJlaGF2aW9yIHNob3VsZCBmb2xsb3cKK3NvbWUgY29uc2lzdGVuY3kgcnVsZXMsIGlmIHBvc3NpYmxlOgorCisqIEVxdWFsaXR5IGNvbXBhcmlzb24gc2hvdWxkIGJlIHJlZmxleGl2ZS4KKyAgSW4gb3RoZXIgd29yZHMsIGlkZW50aWNhbCBvYmplY3RzIHNob3VsZCBjb21wYXJlIGVxdWFsOgorCisgICAgYGB4IGlzIHlgYCBpbXBsaWVzIGBgeCA9PSB5YGAKKworKiBDb21wYXJpc29uIHNob3VsZCBiZSBzeW1tZXRyaWMuCisgIEluIG90aGVyIHdvcmRzLCB0aGUgZm9sbG93aW5nIGV4cHJlc3Npb25zIHNob3VsZCBoYXZlIHRoZSBzYW1lIHJlc3VsdDoKKworICAgIGBgeCA9PSB5YGAgYW5kIGBgeSA9PSB4YGAKKworICAgIGBgeCAhPSB5YGAgYW5kIGBgeSAhPSB4YGAKKworICAgIGBgeCA8IHlgYCBhbmQgYGB5ID4geGBgCisKKyAgICBgYHggPD0geWBgIGFuZCBgYHkgPj0geGBgCisKKyogQ29tcGFyaXNvbiBzaG91bGQgYmUgdHJhbnNpdGl2ZS4KKyAgVGhlIGZvbGxvd2luZyAobm9uLWV4aGF1c3RpdmUpIGV4YW1wbGVzIGlsbHVzdHJhdGUgdGhhdDoKKworICAgIGBgeCA+IHkgYW5kIHkgPiB6YGAgaW1wbGllcyBgYHggPiB6YGAKKworICAgIGBgeCA8IHkgYW5kIHkgPD0gemBgIGltcGxpZXMgYGB4IDwgemBgCisKKyogSW52ZXJzZSBjb21wYXJpc29uIHNob3VsZCByZXN1bHQgaW4gdGhlIGJvb2xlYW4gbmVnYXRpb24uCisgIEluIG90aGVyIHdvcmRzLCB0aGUgZm9sbG93aW5nIGV4cHJlc3Npb25zIHNob3VsZCBoYXZlIHRoZSBzYW1lIHJlc3VsdDoKKworICAgIGBgeCA9PSB5YGAgYW5kIGBgbm90IHggIT0geWBgCisKKyAgICBgYHggPCB5YGAgYW5kIGBgbm90IHggPj0geWBgIChmb3IgdG90YWwgb3JkZXJpbmcpCisKKyAgICBgYHggPiB5YGAgYW5kIGBgbm90IHggPD0geWBgIChmb3IgdG90YWwgb3JkZXJpbmcpCisKKyAgVGhlIGxhc3QgdHdvIGV4cHJlc3Npb25zIGFwcGx5IHRvIHRvdGFsbHkgb3JkZXJlZCBjb2xsZWN0aW9ucyAoZS5nLiB0bworICBzZXF1ZW5jZXMsIGJ1dCBub3QgdG8gc2V0cyBvciBtYXBwaW5ncykuIFNlZSBhbHNvIHRoZQorICA6ZnVuYzpgfmZ1bmN0b29scy50b3RhbF9vcmRlcmluZ2AgZGVjb3JhdG9yLgorCitQeXRob24gZG9lcyBub3QgZW5mb3JjZSB0aGVzZSBjb25zaXN0ZW5jeSBydWxlcy4gSW4gZmFjdCwgdGhlIG5vdC1hLW51bWJlcgordmFsdWVzIGFyZSBhbiBleGFtcGxlIGZvciBub3QgZm9sbG93aW5nIHRoZXNlIHJ1bGVzLgorCisKKy4uIF9pbjoKKy4uIF9ub3QgaW46CiAuLiBfbWVtYmVyc2hpcC10ZXN0LWRldGFpbHM6CiAKK01lbWJlcnNoaXAgdGVzdCBvcGVyYXRpb25zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCiBUaGUgb3BlcmF0b3JzIDprZXl3b3JkOmBpbmAgYW5kIDprZXl3b3JkOmBub3QgaW5gIHRlc3QgZm9yIG1lbWJlcnNoaXAuICBgYHggaW4KIHNgYCBldmFsdWF0ZXMgdG8gdHJ1ZSBpZiAqeCogaXMgYSBtZW1iZXIgb2YgKnMqLCBhbmQgZmFsc2Ugb3RoZXJ3aXNlLiAgYGB4IG5vdAogaW4gc2BgIHJldHVybnMgdGhlIG5lZ2F0aW9uIG9mIGBgeCBpbiBzYGAuICBBbGwgYnVpbHQtaW4gc2VxdWVuY2VzIGFuZCBzZXQgdHlwZXMKLXN1cHBvcnQgdGhpcyBhcyB3ZWxsIGFzIGRpY3Rpb25hcnksIGZvciB3aGljaCA6a2V5d29yZDpgaW5gIHRlc3RzIHdoZXRoZXIgYSB0aGUKK3N1cHBvcnQgdGhpcyBhcyB3ZWxsIGFzIGRpY3Rpb25hcnksIGZvciB3aGljaCA6a2V5d29yZDpgaW5gIHRlc3RzIHdoZXRoZXIgdGhlCiBkaWN0aW9uYXJ5IGhhcyBhIGdpdmVuIGtleS4gRm9yIGNvbnRhaW5lciB0eXBlcyBzdWNoIGFzIGxpc3QsIHR1cGxlLCBzZXQsCiBmcm96ZW5zZXQsIGRpY3QsIG9yIGNvbGxlY3Rpb25zLmRlcXVlLCB0aGUgZXhwcmVzc2lvbiBgYHggaW4geWBgIGlzIGVxdWl2YWxlbnQKIHRvIGBgYW55KHggaXMgZSBvciB4ID09IGUgZm9yIGUgaW4geSlgYC4KQEAgLTExNTQsNiArMTI2NiwxMyBAQAogICAgb3BlcmF0b3I6IGlzIG5vdAogICAgcGFpcjogaWRlbnRpdHk7IHRlc3QKIAorCisuLiBfaXM6CisuLiBfaXMgbm90OgorCitJZGVudGl0eSBjb21wYXJpc29ucworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwogVGhlIG9wZXJhdG9ycyA6a2V5d29yZDpgaXNgIGFuZCA6a2V5d29yZDpgaXMgbm90YCB0ZXN0IGZvciBvYmplY3QgaWRlbnRpdHk6IGBgeAogaXMgeWBgIGlzIHRydWUgaWYgYW5kIG9ubHkgaWYgKngqIGFuZCAqeSogYXJlIHRoZSBzYW1lIG9iamVjdC4gIGBgeCBpcyBub3QgeWBgCiB5aWVsZHMgdGhlIGludmVyc2UgdHJ1dGggdmFsdWUuIFsjXV8KQEAgLTEyMDIsOSArMTMyMSw5IEBACiB0aGV5IHJldHVybiB0byBgYEZhbHNlYGAgYW5kIGBgVHJ1ZWBgLCBidXQgcmF0aGVyIHJldHVybiB0aGUgbGFzdCBldmFsdWF0ZWQKIGFyZ3VtZW50LiAgVGhpcyBpcyBzb21ldGltZXMgdXNlZnVsLCBlLmcuLCBpZiBgYHNgYCBpcyBhIHN0cmluZyB0aGF0IHNob3VsZCBiZQogcmVwbGFjZWQgYnkgYSBkZWZhdWx0IHZhbHVlIGlmIGl0IGlzIGVtcHR5LCB0aGUgZXhwcmVzc2lvbiBgYHMgb3IgJ2ZvbydgYCB5aWVsZHMKLXRoZSBkZXNpcmVkIHZhbHVlLiAgQmVjYXVzZSA6a2V5d29yZDpgbm90YCBoYXMgdG8gaW52ZW50IGEgdmFsdWUgYW55d2F5LCBpdCBkb2VzCi1ub3QgYm90aGVyIHRvIHJldHVybiBhIHZhbHVlIG9mIHRoZSBzYW1lIHR5cGUgYXMgaXRzIGFyZ3VtZW50LCBzbyBlLmcuLCBgYG5vdAotJ2ZvbydgYCB5aWVsZHMgYGBGYWxzZWBgLCBub3QgYGAnJ2BgLikKK3RoZSBkZXNpcmVkIHZhbHVlLiAgQmVjYXVzZSA6a2V5d29yZDpgbm90YCBoYXMgdG8gY3JlYXRlIGEgbmV3IHZhbHVlLCBpdAorcmV0dXJucyBhIGJvb2xlYW4gdmFsdWUgcmVnYXJkbGVzcyBvZiB0aGUgdHlwZSBvZiBpdHMgYXJndW1lbnQKKyhmb3IgZXhhbXBsZSwgYGBub3QgJ2ZvbydgYCBwcm9kdWNlcyBgYEZhbHNlYGAgcmF0aGVyIHRoYW4gYGAnJ2BgLikKIAogCiBDb25kaXRpb25hbCBleHByZXNzaW9ucwpAQCAtMTIyMiw4ICsxMzQxLDggQEAKIENvbmRpdGlvbmFsIGV4cHJlc3Npb25zIChzb21ldGltZXMgY2FsbGVkIGEgInRlcm5hcnkgb3BlcmF0b3IiKSBoYXZlIHRoZSBsb3dlc3QKIHByaW9yaXR5IG9mIGFsbCBQeXRob24gb3BlcmF0aW9ucy4KIAotVGhlIGV4cHJlc3Npb24gYGB4IGlmIEMgZWxzZSB5YGAgZmlyc3QgZXZhbHVhdGVzIHRoZSBjb25kaXRpb24sICpDKiAoKm5vdCogKngqKTsKLWlmICpDKiBpcyB0cnVlLCAqeCogaXMgZXZhbHVhdGVkIGFuZCBpdHMgdmFsdWUgaXMgcmV0dXJuZWQ7IG90aGVyd2lzZSwgKnkqIGlzCitUaGUgZXhwcmVzc2lvbiBgYHggaWYgQyBlbHNlIHlgYCBmaXJzdCBldmFsdWF0ZXMgdGhlIGNvbmRpdGlvbiwgKkMqIHJhdGhlciB0aGFuICp4Ki4KK0lmICpDKiBpcyB0cnVlLCAqeCogaXMgZXZhbHVhdGVkIGFuZCBpdHMgdmFsdWUgaXMgcmV0dXJuZWQ7IG90aGVyd2lzZSwgKnkqIGlzCiBldmFsdWF0ZWQgYW5kIGl0cyB2YWx1ZSBpcyByZXR1cm5lZC4KIAogU2VlIDpwZXA6YDMwOGAgZm9yIG1vcmUgZGV0YWlscyBhYm91dCBjb25kaXRpb25hbCBleHByZXNzaW9ucy4KQEAgLTEyNDQsMTAgKzEzNjMsOSBAQAogICAgbGFtYmRhX2V4cHI6ICJsYW1iZGEiIFtgcGFyYW1ldGVyX2xpc3RgXTogYGV4cHJlc3Npb25gCiAgICBsYW1iZGFfZXhwcl9ub2NvbmQ6ICJsYW1iZGEiIFtgcGFyYW1ldGVyX2xpc3RgXTogYGV4cHJlc3Npb25fbm9jb25kYAogCi1MYW1iZGEgZXhwcmVzc2lvbnMgKHNvbWV0aW1lcyBjYWxsZWQgbGFtYmRhIGZvcm1zKSBoYXZlIHRoZSBzYW1lIHN5bnRhY3RpYyBwb3NpdGlvbiBhcwotZXhwcmVzc2lvbnMuICBUaGV5IGFyZSBhIHNob3J0aGFuZCB0byBjcmVhdGUgYW5vbnltb3VzIGZ1bmN0aW9uczsgdGhlIGV4cHJlc3Npb24KLWBgbGFtYmRhIGFyZ3VtZW50czogZXhwcmVzc2lvbmBgIHlpZWxkcyBhIGZ1bmN0aW9uIG9iamVjdC4gIFRoZSB1bm5hbWVkIG9iamVjdAotYmVoYXZlcyBsaWtlIGEgZnVuY3Rpb24gb2JqZWN0IGRlZmluZWQgd2l0aCA6OgorTGFtYmRhIGV4cHJlc3Npb25zIChzb21ldGltZXMgY2FsbGVkIGxhbWJkYSBmb3JtcykgYXJlIHVzZWQgdG8gY3JlYXRlIGFub255bW91cworZnVuY3Rpb25zLiBUaGUgZXhwcmVzc2lvbiBgYGxhbWJkYSBhcmd1bWVudHM6IGV4cHJlc3Npb25gYCB5aWVsZHMgYSBmdW5jdGlvbgorb2JqZWN0LiAgVGhlIHVubmFtZWQgb2JqZWN0IGJlaGF2ZXMgbGlrZSBhIGZ1bmN0aW9uIG9iamVjdCBkZWZpbmVkIHdpdGggOjoKIAogICAgZGVmIDxsYW1iZGE+KGFyZ3VtZW50cyk6CiAgICAgICAgcmV0dXJuIGV4cHJlc3Npb24KQEAgLTEzMTAsMTMgKzE0MjgsMTUgQEAKIAogLi4gaW5kZXg6OiBwYWlyOiBvcGVyYXRvcjsgcHJlY2VkZW5jZQogCi1UaGUgZm9sbG93aW5nIHRhYmxlIHN1bW1hcml6ZXMgdGhlIG9wZXJhdG9yIHByZWNlZGVuY2VzIGluIFB5dGhvbiwgZnJvbSBsb3dlc3QKK1RoZSBmb2xsb3dpbmcgdGFibGUgc3VtbWFyaXplcyB0aGUgb3BlcmF0b3IgcHJlY2VkZW5jZSBpbiBQeXRob24sIGZyb20gbG93ZXN0CiBwcmVjZWRlbmNlIChsZWFzdCBiaW5kaW5nKSB0byBoaWdoZXN0IHByZWNlZGVuY2UgKG1vc3QgYmluZGluZykuICBPcGVyYXRvcnMgaW4KIHRoZSBzYW1lIGJveCBoYXZlIHRoZSBzYW1lIHByZWNlZGVuY2UuICBVbmxlc3MgdGhlIHN5bnRheCBpcyBleHBsaWNpdGx5IGdpdmVuLAogb3BlcmF0b3JzIGFyZSBiaW5hcnkuICBPcGVyYXRvcnMgaW4gdGhlIHNhbWUgYm94IGdyb3VwIGxlZnQgdG8gcmlnaHQgKGV4Y2VwdCBmb3IKLWNvbXBhcmlzb25zLCBpbmNsdWRpbmcgdGVzdHMsIHdoaWNoIGFsbCBoYXZlIHRoZSBzYW1lIHByZWNlZGVuY2UgYW5kIGNoYWluIGZyb20KLWxlZnQgdG8gcmlnaHQgLS0tIHNlZSBzZWN0aW9uIDpyZWY6YGNvbXBhcmlzb25zYCAtLS0gYW5kIGV4cG9uZW50aWF0aW9uLCB3aGljaAotZ3JvdXBzIGZyb20gcmlnaHQgdG8gbGVmdCkuCitleHBvbmVudGlhdGlvbiwgd2hpY2ggZ3JvdXBzIGZyb20gcmlnaHQgdG8gbGVmdCkuCisKK05vdGUgdGhhdCBjb21wYXJpc29ucywgbWVtYmVyc2hpcCB0ZXN0cywgYW5kIGlkZW50aXR5IHRlc3RzLCBhbGwgaGF2ZSB0aGUgc2FtZQorcHJlY2VkZW5jZSBhbmQgaGF2ZSBhIGxlZnQtdG8tcmlnaHQgY2hhaW5pbmcgZmVhdHVyZSBhcyBkZXNjcmliZWQgaW4gdGhlCis6cmVmOmBjb21wYXJpc29uc2Agc2VjdGlvbi4KIAogCiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKQEAgLTEzNzksMTIgKzE0OTksMjQgQEAKICAgIGNhc2VzLCBQeXRob24gcmV0dXJucyB0aGUgbGF0dGVyIHJlc3VsdCwgaW4gb3JkZXIgdG8gcHJlc2VydmUgdGhhdAogICAgYGBkaXZtb2QoeCx5KVswXSAqIHkgKyB4ICUgeWBgIGJlIHZlcnkgY2xvc2UgdG8gYGB4YGAuCiAKLS4uIFsjXSBXaGlsZSBjb21wYXJpc29ucyBiZXR3ZWVuIHN0cmluZ3MgbWFrZSBzZW5zZSBhdCB0aGUgYnl0ZSBsZXZlbCwgdGhleSBtYXkKLSAgIGJlIGNvdW50ZXItaW50dWl0aXZlIHRvIHVzZXJzLiAgRm9yIGV4YW1wbGUsIHRoZSBzdHJpbmdzIGBgIlx1MDBDNyJgYCBhbmQKLSAgIGBgIlx1MDMyN1x1MDA0MyJgYCBjb21wYXJlIGRpZmZlcmVudGx5LCBldmVuIHRob3VnaCB0aGV5IGJvdGggcmVwcmVzZW50IHRoZQotICAgc2FtZSB1bmljb2RlIGNoYXJhY3RlciAoTEFUSU4gQ0FQSVRBTCBMRVRURVIgQyBXSVRIIENFRElMTEEpLiAgVG8gY29tcGFyZQotICAgc3RyaW5ncyBpbiBhIGh1bWFuIHJlY29nbml6YWJsZSB3YXksIGNvbXBhcmUgdXNpbmcKLSAgIDpmdW5jOmB1bmljb2RlZGF0YS5ub3JtYWxpemVgLgorLi4gWyNdIFRoZSBVbmljb2RlIHN0YW5kYXJkIGRpc3Rpbmd1aXNoZXMgYmV0d2VlbiA6ZGZuOmBjb2RlIHBvaW50c2AKKyAgIChlLmcuIFUrMDA0MSkgYW5kIDpkZm46YGFic3RyYWN0IGNoYXJhY3RlcnNgIChlLmcuICJMQVRJTiBDQVBJVEFMIExFVFRFUiBBIikuCisgICBXaGlsZSBtb3N0IGFic3RyYWN0IGNoYXJhY3RlcnMgaW4gVW5pY29kZSBhcmUgb25seSByZXByZXNlbnRlZCB1c2luZyBvbmUKKyAgIGNvZGUgcG9pbnQsIHRoZXJlIGlzIGEgbnVtYmVyIG9mIGFic3RyYWN0IGNoYXJhY3RlcnMgdGhhdCBjYW4gaW4gYWRkaXRpb24gYmUKKyAgIHJlcHJlc2VudGVkIHVzaW5nIGEgc2VxdWVuY2Ugb2YgbW9yZSB0aGFuIG9uZSBjb2RlIHBvaW50LiAgRm9yIGV4YW1wbGUsIHRoZQorICAgYWJzdHJhY3QgY2hhcmFjdGVyICJMQVRJTiBDQVBJVEFMIExFVFRFUiBDIFdJVEggQ0VESUxMQSIgY2FuIGJlIHJlcHJlc2VudGVkCisgICBhcyBhIHNpbmdsZSA6ZGZuOmBwcmVjb21wb3NlZCBjaGFyYWN0ZXJgIGF0IGNvZGUgcG9zaXRpb24gVSswMEM3LCBvciBhcyBhCisgICBzZXF1ZW5jZSBvZiBhIDpkZm46YGJhc2UgY2hhcmFjdGVyYCBhdCBjb2RlIHBvc2l0aW9uIFUrMDA0MyAoTEFUSU4gQ0FQSVRBTAorICAgTEVUVEVSIEMpLCBmb2xsb3dlZCBieSBhIDpkZm46YGNvbWJpbmluZyBjaGFyYWN0ZXJgIGF0IGNvZGUgcG9zaXRpb24gVSswMzI3CisgICAoQ09NQklOSU5HIENFRElMTEEpLgorCisgICBUaGUgY29tcGFyaXNvbiBvcGVyYXRvcnMgb24gc3RyaW5ncyBjb21wYXJlIGF0IHRoZSBsZXZlbCBvZiBVbmljb2RlIGNvZGUKKyAgIHBvaW50cy4gVGhpcyBtYXkgYmUgY291bnRlci1pbnR1aXRpdmUgdG8gaHVtYW5zLiAgRm9yIGV4YW1wbGUsCisgICBgYCJcdTAwQzciID09ICJcdTAwNDNcdTAzMjciYGAgaXMgYGBGYWxzZWBgLCBldmVuIHRob3VnaCBib3RoIHN0cmluZ3MKKyAgIHJlcHJlc2VudCB0aGUgc2FtZSBhYnN0cmFjdCBjaGFyYWN0ZXIgIkxBVElOIENBUElUQUwgTEVUVEVSIEMgV0lUSCBDRURJTExBIi4KKworICAgVG8gY29tcGFyZSBzdHJpbmdzIGF0IHRoZSBsZXZlbCBvZiBhYnN0cmFjdCBjaGFyYWN0ZXJzICh0aGF0IGlzLCBpbiBhIHdheQorICAgaW50dWl0aXZlIHRvIGh1bWFucyksIHVzZSA6ZnVuYzpgdW5pY29kZWRhdGEubm9ybWFsaXplYC4KIAogLi4gWyNdIER1ZSB0byBhdXRvbWF0aWMgZ2FyYmFnZS1jb2xsZWN0aW9uLCBmcmVlIGxpc3RzLCBhbmQgdGhlIGR5bmFtaWMgbmF0dXJlIG9mCiAgICBkZXNjcmlwdG9ycywgeW91IG1heSBub3RpY2Ugc2VlbWluZ2x5IHVudXN1YWwgYmVoYXZpb3VyIGluIGNlcnRhaW4gdXNlcyBvZgpkaWZmIC0tZ2l0IGEvRG9jL3JlZmVyZW5jZS9pbXBvcnQucnN0IGIvRG9jL3JlZmVyZW5jZS9pbXBvcnQucnN0CmluZGV4IGViNDk3YTEuLjE2ZDI4ZDggMTAwNjQ0Ci0tLSBhL0RvYy9yZWZlcmVuY2UvaW1wb3J0LnJzdAorKysgYi9Eb2MvcmVmZXJlbmNlL2ltcG9ydC5yc3QKQEAgLTIwMCw3ICsyMDAsNyBAQAogQmV3YXJlIHRob3VnaCwgYXMgaWYgeW91IGtlZXAgYSByZWZlcmVuY2UgdG8gdGhlIG1vZHVsZSBvYmplY3QsCiBpbnZhbGlkYXRlIGl0cyBjYWNoZSBlbnRyeSBpbiA6ZGF0YTpgc3lzLm1vZHVsZXNgLCBhbmQgdGhlbiByZS1pbXBvcnQgdGhlCiBuYW1lZCBtb2R1bGUsIHRoZSB0d28gbW9kdWxlIG9iamVjdHMgd2lsbCAqbm90KiBiZSB0aGUgc2FtZS4gQnkgY29udHJhc3QsCi06ZnVuYzpgaW1wLnJlbG9hZGAgd2lsbCByZXVzZSB0aGUgKnNhbWUqIG1vZHVsZSBvYmplY3QsIGFuZCBzaW1wbHkKKzpmdW5jOmBpbXBvcnRsaWIucmVsb2FkYCB3aWxsIHJldXNlIHRoZSAqc2FtZSogbW9kdWxlIG9iamVjdCwgYW5kIHNpbXBseQogcmVpbml0aWFsaXNlIHRoZSBtb2R1bGUgY29udGVudHMgYnkgcmVydW5uaW5nIHRoZSBtb2R1bGUncyBjb2RlLgogCiAKQEAgLTIxMCw2ICsyMTAsNyBAQAogLi4gaW5kZXg6OgogICAgIHNpbmdsZTogZmluZGVyCiAgICAgc2luZ2xlOiBsb2FkZXIKKyAgICBzaW5nbGU6IG1vZHVsZSBzcGVjCiAKIElmIHRoZSBuYW1lZCBtb2R1bGUgaXMgbm90IGZvdW5kIGluIDpkYXRhOmBzeXMubW9kdWxlc2AsIHRoZW4gUHl0aG9uJ3MgaW1wb3J0CiBwcm90b2NvbCBpcyBpbnZva2VkIHRvIGZpbmQgYW5kIGxvYWQgdGhlIG1vZHVsZS4gIFRoaXMgcHJvdG9jb2wgY29uc2lzdHMgb2YKQEAgLTIzMCwxMyArMjMxLDE3IEBACiByYW5nZSBhbmQgc2NvcGUgb2YgbW9kdWxlIHNlYXJjaGluZy4KIAogRmluZGVycyBkbyBub3QgYWN0dWFsbHkgbG9hZCBtb2R1bGVzLiAgSWYgdGhleSBjYW4gZmluZCB0aGUgbmFtZWQgbW9kdWxlLCB0aGV5Ci1yZXR1cm4gYSA6dGVybTpgbG9hZGVyYCwgd2hpY2ggdGhlIGltcG9ydCBtYWNoaW5lcnkgdGhlbiBpbnZva2VzIHRvIGxvYWQgdGhlCi1tb2R1bGUgYW5kIGNyZWF0ZSB0aGUgY29ycmVzcG9uZGluZyBtb2R1bGUgb2JqZWN0LgorcmV0dXJuIGEgOmRmbjpgbW9kdWxlIHNwZWNgLCBhbiBlbmNhcHN1bGF0aW9uIG9mIHRoZSBtb2R1bGUncyBpbXBvcnQtcmVsYXRlZAoraW5mb3JtYXRpb24sIHdoaWNoIHRoZSBpbXBvcnQgbWFjaGluZXJ5IHRoZW4gdXNlcyB3aGVuIGxvYWRpbmcgdGhlIG1vZHVsZS4KIAogVGhlIGZvbGxvd2luZyBzZWN0aW9ucyBkZXNjcmliZSB0aGUgcHJvdG9jb2wgZm9yIGZpbmRlcnMgYW5kIGxvYWRlcnMgaW4gbW9yZQogZGV0YWlsLCBpbmNsdWRpbmcgaG93IHlvdSBjYW4gY3JlYXRlIGFuZCByZWdpc3RlciBuZXcgb25lcyB0byBleHRlbmQgdGhlCiBpbXBvcnQgbWFjaGluZXJ5LgogCisuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgSW4gcHJldmlvdXMgdmVyc2lvbnMgb2YgUHl0aG9uLCBmaW5kZXJzIHJldHVybmVkIDp0ZXJtOmBsb2FkZXJzIDxsb2FkZXI+YAorICAgZGlyZWN0bHksIHdoZXJlYXMgbm93IHRoZXkgcmV0dXJuIG1vZHVsZSBzcGVjcyB3aGljaCAqY29udGFpbiogbG9hZGVycy4KKyAgIExvYWRlcnMgYXJlIHN0aWxsIHVzZWQgZHVyaW5nIGltcG9ydCBidXQgaGF2ZSBmZXdlciByZXNwb25zaWJpbGl0aWVzLgogCiBJbXBvcnQgaG9va3MKIC0tLS0tLS0tLS0tLQpAQCAtMjcwLDQxICsyNzUsNDMgQEAKIAogLi4gaW5kZXg6OgogICAgIHNpbmdsZTogc3lzLm1ldGFfcGF0aAotICAgIHBhaXI6IGZpbmRlcjsgZmluZF9tb2R1bGUKLSAgICBwYWlyOiBmaW5kZXI7IGZpbmRfbG9hZGVyCisgICAgcGFpcjogZmluZGVyOyBmaW5kX3NwZWMKIAogV2hlbiB0aGUgbmFtZWQgbW9kdWxlIGlzIG5vdCBmb3VuZCBpbiA6ZGF0YTpgc3lzLm1vZHVsZXNgLCBQeXRob24gbmV4dAogc2VhcmNoZXMgOmRhdGE6YHN5cy5tZXRhX3BhdGhgLCB3aGljaCBjb250YWlucyBhIGxpc3Qgb2YgbWV0YSBwYXRoIGZpbmRlcgogb2JqZWN0cy4gIFRoZXNlIGZpbmRlcnMgYXJlIHF1ZXJpZWQgaW4gb3JkZXIgdG8gc2VlIGlmIHRoZXkga25vdyBob3cgdG8gaGFuZGxlCiB0aGUgbmFtZWQgbW9kdWxlLiAgTWV0YSBwYXRoIGZpbmRlcnMgbXVzdCBpbXBsZW1lbnQgYSBtZXRob2QgY2FsbGVkCi06bWV0aDpgZmluZF9tb2R1bGUoKWAgd2hpY2ggdGFrZXMgdHdvIGFyZ3VtZW50cywgYSBuYW1lIGFuZCBhbiBpbXBvcnQgcGF0aC4KLVRoZSBtZXRhIHBhdGggZmluZGVyIGNhbiB1c2UgYW55IHN0cmF0ZWd5IGl0IHdhbnRzIHRvIGRldGVybWluZSB3aGV0aGVyIGl0IGNhbgotaGFuZGxlIHRoZSBuYW1lZCBtb2R1bGUgb3Igbm90LgorOm1ldGg6YH5pbXBvcnRsaWIuYWJjLk1ldGFQYXRoRmluZGVyLmZpbmRfc3BlYygpYCB3aGljaCB0YWtlcyB0aHJlZSBhcmd1bWVudHM6CithIG5hbWUsIGFuIGltcG9ydCBwYXRoLCBhbmQgKG9wdGlvbmFsbHkpIGEgdGFyZ2V0IG1vZHVsZS4gIFRoZSBtZXRhIHBhdGgKK2ZpbmRlciBjYW4gdXNlIGFueSBzdHJhdGVneSBpdCB3YW50cyB0byBkZXRlcm1pbmUgd2hldGhlciBpdCBjYW4gaGFuZGxlCit0aGUgbmFtZWQgbW9kdWxlIG9yIG5vdC4KIAogSWYgdGhlIG1ldGEgcGF0aCBmaW5kZXIga25vd3MgaG93IHRvIGhhbmRsZSB0aGUgbmFtZWQgbW9kdWxlLCBpdCByZXR1cm5zIGEKLWxvYWRlciBvYmplY3QuICBJZiBpdCBjYW5ub3QgaGFuZGxlIHRoZSBuYW1lZCBtb2R1bGUsIGl0IHJldHVybnMgYGBOb25lYGAuICBJZgorc3BlYyBvYmplY3QuICBJZiBpdCBjYW5ub3QgaGFuZGxlIHRoZSBuYW1lZCBtb2R1bGUsIGl0IHJldHVybnMgYGBOb25lYGAuICBJZgogOmRhdGE6YHN5cy5tZXRhX3BhdGhgIHByb2Nlc3NpbmcgcmVhY2hlcyB0aGUgZW5kIG9mIGl0cyBsaXN0IHdpdGhvdXQgcmV0dXJuaW5nCi1hIGxvYWRlciwgdGhlbiBhbiA6ZXhjOmBJbXBvcnRFcnJvcmAgaXMgcmFpc2VkLiAgQW55IG90aGVyIGV4Y2VwdGlvbnMgcmFpc2VkCithIHNwZWMsIHRoZW4gYW4gOmV4YzpgSW1wb3J0RXJyb3JgIGlzIHJhaXNlZC4gIEFueSBvdGhlciBleGNlcHRpb25zIHJhaXNlZAogYXJlIHNpbXBseSBwcm9wYWdhdGVkIHVwLCBhYm9ydGluZyB0aGUgaW1wb3J0IHByb2Nlc3MuCiAKLVRoZSA6bWV0aDpgZmluZF9tb2R1bGUoKWAgbWV0aG9kIG9mIG1ldGEgcGF0aCBmaW5kZXJzIGlzIGNhbGxlZCB3aXRoIHR3bwotYXJndW1lbnRzLiAgVGhlIGZpcnN0IGlzIHRoZSBmdWxseSBxdWFsaWZpZWQgbmFtZSBvZiB0aGUgbW9kdWxlIGJlaW5nCi1pbXBvcnRlZCwgZm9yIGV4YW1wbGUgYGBmb28uYmFyLmJhemBgLiAgVGhlIHNlY29uZCBhcmd1bWVudCBpcyB0aGUgcGF0aAotZW50cmllcyB0byB1c2UgZm9yIHRoZSBtb2R1bGUgc2VhcmNoLiAgRm9yIHRvcC1sZXZlbCBtb2R1bGVzLCB0aGUgc2Vjb25kCi1hcmd1bWVudCBpcyBgYE5vbmVgYCwgYnV0IGZvciBzdWJtb2R1bGVzIG9yIHN1YnBhY2thZ2VzLCB0aGUgc2Vjb25kCi1hcmd1bWVudCBpcyB0aGUgdmFsdWUgb2YgdGhlIHBhcmVudCBwYWNrYWdlJ3MgYGBfX3BhdGhfX2BgIGF0dHJpYnV0ZS4gSWYKLXRoZSBhcHByb3ByaWF0ZSBgYF9fcGF0aF9fYGAgYXR0cmlidXRlIGNhbm5vdCBiZSBhY2Nlc3NlZCwgYW4KLTpleGM6YEltcG9ydEVycm9yYCBpcyByYWlzZWQuCitUaGUgOm1ldGg6YH5pbXBvcnRsaWIuYWJjLk1ldGFQYXRoRmluZGVyLmZpbmRfc3BlYygpYCBtZXRob2Qgb2YgbWV0YSBwYXRoCitmaW5kZXJzIGlzIGNhbGxlZCB3aXRoIHR3byBvciB0aHJlZSBhcmd1bWVudHMuICBUaGUgZmlyc3QgaXMgdGhlIGZ1bGx5CitxdWFsaWZpZWQgbmFtZSBvZiB0aGUgbW9kdWxlIGJlaW5nIGltcG9ydGVkLCBmb3IgZXhhbXBsZSBgYGZvby5iYXIuYmF6YGAuCitUaGUgc2Vjb25kIGFyZ3VtZW50IGlzIHRoZSBwYXRoIGVudHJpZXMgdG8gdXNlIGZvciB0aGUgbW9kdWxlIHNlYXJjaC4gIEZvcgordG9wLWxldmVsIG1vZHVsZXMsIHRoZSBzZWNvbmQgYXJndW1lbnQgaXMgYGBOb25lYGAsIGJ1dCBmb3Igc3VibW9kdWxlcyBvcgorc3VicGFja2FnZXMsIHRoZSBzZWNvbmQgYXJndW1lbnQgaXMgdGhlIHZhbHVlIG9mIHRoZSBwYXJlbnQgcGFja2FnZSdzCitgYF9fcGF0aF9fYGAgYXR0cmlidXRlLiBJZiB0aGUgYXBwcm9wcmlhdGUgYGBfX3BhdGhfX2BgIGF0dHJpYnV0ZSBjYW5ub3QKK2JlIGFjY2Vzc2VkLCBhbiA6ZXhjOmBJbXBvcnRFcnJvcmAgaXMgcmFpc2VkLiAgVGhlIHRoaXJkIGFyZ3VtZW50IGlzIGFuCitleGlzdGluZyBtb2R1bGUgb2JqZWN0IHRoYXQgd2lsbCBiZSB0aGUgdGFyZ2V0IG9mIGxvYWRpbmcgbGF0ZXIuICBUaGUKK2ltcG9ydCBzeXN0ZW0gcGFzc2VzIGluIGEgdGFyZ2V0IG1vZHVsZSBvbmx5IGR1cmluZyByZWxvYWQuCiAKIFRoZSBtZXRhIHBhdGggbWF5IGJlIHRyYXZlcnNlZCBtdWx0aXBsZSB0aW1lcyBmb3IgYSBzaW5nbGUgaW1wb3J0IHJlcXVlc3QuCiBGb3IgZXhhbXBsZSwgYXNzdW1pbmcgbm9uZSBvZiB0aGUgbW9kdWxlcyBpbnZvbHZlZCBoYXMgYWxyZWFkeSBiZWVuIGNhY2hlZCwKIGltcG9ydGluZyBgYGZvby5iYXIuYmF6YGAgd2lsbCBmaXJzdCBwZXJmb3JtIGEgdG9wIGxldmVsIGltcG9ydCwgY2FsbGluZwotYGBtcGYuZmluZF9tb2R1bGUoImZvbyIsIE5vbmUpYGAgb24gZWFjaCBtZXRhIHBhdGggZmluZGVyIChgYG1wZmBgKS4gQWZ0ZXIKK2BgbXBmLmZpbmRfc3BlYygiZm9vIiwgTm9uZSwgTm9uZSlgYCBvbiBlYWNoIG1ldGEgcGF0aCBmaW5kZXIgKGBgbXBmYGApLiBBZnRlcgogYGBmb29gYCBoYXMgYmVlbiBpbXBvcnRlZCwgYGBmb28uYmFyYGAgd2lsbCBiZSBpbXBvcnRlZCBieSB0cmF2ZXJzaW5nIHRoZQogbWV0YSBwYXRoIGEgc2Vjb25kIHRpbWUsIGNhbGxpbmcKLWBgbXBmLmZpbmRfbW9kdWxlKCJmb28uYmFyIiwgZm9vLl9fcGF0aF9fKWBgLiBPbmNlIGBgZm9vLmJhcmBgIGhhcyBiZWVuCitgYG1wZi5maW5kX3NwZWMoImZvby5iYXIiLCBmb28uX19wYXRoX18sIE5vbmUpYGAuIE9uY2UgYGBmb28uYmFyYGAgaGFzIGJlZW4KIGltcG9ydGVkLCB0aGUgZmluYWwgdHJhdmVyc2FsIHdpbGwgY2FsbAotYGBtcGYuZmluZF9tb2R1bGUoImZvby5iYXIuYmF6IiwgZm9vLmJhci5fX3BhdGhfXylgYC4KK2BgbXBmLmZpbmRfc3BlYygiZm9vLmJhci5iYXoiLCBmb28uYmFyLl9fcGF0aF9fLCBOb25lKWBgLgogCiBTb21lIG1ldGEgcGF0aCBmaW5kZXJzIG9ubHkgc3VwcG9ydCB0b3AgbGV2ZWwgaW1wb3J0cy4gVGhlc2UgaW1wb3J0ZXJzIHdpbGwKIGFsd2F5cyByZXR1cm4gYGBOb25lYGAgd2hlbiBhbnl0aGluZyBvdGhlciB0aGFuIGBgTm9uZWBgIGlzIHBhc3NlZCBhcyB0aGUKQEAgLTMxNSwxMjkgKzMyMiwyNzQgQEAKIG1vZHVsZXMsIGFuZCBvbmUgdGhhdCBrbm93cyBob3cgdG8gaW1wb3J0IG1vZHVsZXMgZnJvbSBhbiA6dGVybTpgaW1wb3J0IHBhdGhgCiAoaS5lLiB0aGUgOnRlcm06YHBhdGggYmFzZWQgZmluZGVyYCkuCiAKKy4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICBUaGUgOm1ldGg6YH5pbXBvcnRsaWIuYWJjLk1ldGFQYXRoRmluZGVyLmZpbmRfc3BlY2AgbWV0aG9kIG9mIG1ldGEgcGF0aAorICAgZmluZGVycyByZXBsYWNlZCA6bWV0aDpgfmltcG9ydGxpYi5hYmMuTWV0YVBhdGhGaW5kZXIuZmluZF9tb2R1bGVgLCB3aGljaAorICAgaXMgbm93IGRlcHJlY2F0ZWQuICBXaGlsZSBpdCB3aWxsIGNvbnRpbnVlIHRvIHdvcmsgd2l0aG91dCBjaGFuZ2UsIHRoZQorICAgaW1wb3J0IG1hY2hpbmVyeSB3aWxsIHRyeSBpdCBvbmx5IGlmIHRoZSBmaW5kZXIgZG9lcyBub3QgaW1wbGVtZW50CisgICBgYGZpbmRfc3BlYygpYGAuCiAKLUxvYWRlcnMKKworTG9hZGluZwogPT09PT09PQogCi1JZiBhbmQgd2hlbiBhIG1vZHVsZSBsb2FkZXIgaXMgZm91bmQgaXRzCi06bWV0aDpgfmltcG9ydGxpYi5hYmMuTG9hZGVyLmxvYWRfbW9kdWxlYCBtZXRob2QgaXMgY2FsbGVkLCB3aXRoIGEgc2luZ2xlCi1hcmd1bWVudCwgdGhlIGZ1bGx5IHF1YWxpZmllZCBuYW1lIG9mIHRoZSBtb2R1bGUgYmVpbmcgaW1wb3J0ZWQuICBUaGlzIG1ldGhvZAotaGFzIHNldmVyYWwgcmVzcG9uc2liaWxpdGllcywgYW5kIHNob3VsZCByZXR1cm4gdGhlIG1vZHVsZSBvYmplY3QgaXQgaGFzCi1sb2FkZWQgWyNmbmxvXV8uICBJZiBpdCBjYW5ub3QgbG9hZCB0aGUgbW9kdWxlLCBpdCBzaG91bGQgcmFpc2UgYW4KLTpleGM6YEltcG9ydEVycm9yYCwgYWx0aG91Z2ggYW55IG90aGVyIGV4Y2VwdGlvbiByYWlzZWQgZHVyaW5nCi06bWV0aDpgbG9hZF9tb2R1bGUoKWAgd2lsbCBiZSBwcm9wYWdhdGVkLgorSWYgYW5kIHdoZW4gYSBtb2R1bGUgc3BlYyBpcyBmb3VuZCwgdGhlIGltcG9ydCBtYWNoaW5lcnkgd2lsbCB1c2UgaXQgKGFuZAordGhlIGxvYWRlciBpdCBjb250YWlucykgd2hlbiBsb2FkaW5nIHRoZSBtb2R1bGUuICBIZXJlIGlzIGFuIGFwcHJveGltYXRpb24KK29mIHdoYXQgaGFwcGVucyBkdXJpbmcgdGhlIGxvYWRpbmcgcG9ydGlvbiBvZiBpbXBvcnQ6OgogCi1JbiBtYW55IGNhc2VzLCB0aGUgZmluZGVyIGFuZCBsb2FkZXIgY2FuIGJlIHRoZSBzYW1lIG9iamVjdDsgaW4gc3VjaCBjYXNlcyB0aGUKLTptZXRoOmBmaW5kZXIuZmluZF9tb2R1bGUoKWAgd291bGQganVzdCByZXR1cm4gYGBzZWxmYGAuCisgICAgbW9kdWxlID0gTm9uZQorICAgIGlmIHNwZWMubG9hZGVyIGlzIG5vdCBOb25lIGFuZCBoYXNhdHRyKHNwZWMubG9hZGVyLCAnY3JlYXRlX21vZHVsZScpOgorICAgICAgICBtb2R1bGUgPSBzcGVjLmxvYWRlci5jcmVhdGVfbW9kdWxlKHNwZWMpCisgICAgaWYgbW9kdWxlIGlzIE5vbmU6CisgICAgICAgIG1vZHVsZSA9IE1vZHVsZVR5cGUoc3BlYy5uYW1lKQorICAgICMgVGhlIGltcG9ydC1yZWxhdGVkIG1vZHVsZSBhdHRyaWJ1dGVzIGdldCBzZXQgaGVyZToKKyAgICBfaW5pdF9tb2R1bGVfYXR0cnMoc3BlYywgbW9kdWxlKQogCi1Mb2FkZXJzIG11c3Qgc2F0aXNmeSB0aGUgZm9sbG93aW5nIHJlcXVpcmVtZW50czoKKyAgICBpZiBzcGVjLmxvYWRlciBpcyBOb25lOgorICAgICAgICBpZiBzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgIyBuYW1lc3BhY2UgcGFja2FnZQorICAgICAgICAgICAgc3lzLm1vZHVsZXNbc3BlYy5uYW1lXSA9IG1vZHVsZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyB1bnN1cHBvcnRlZAorICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IKKyAgICBlbGlmIG5vdCBoYXNhdHRyKHNwZWMubG9hZGVyLCAnZXhlY19tb2R1bGUnKToKKyAgICAgICAgbW9kdWxlID0gc3BlYy5sb2FkZXIubG9hZF9tb2R1bGUoc3BlYy5uYW1lKQorICAgICAgICAjIFNldCBfX2xvYWRlcl9fIGFuZCBfX3BhY2thZ2VfXyBpZiBtaXNzaW5nLgorICAgIGVsc2U6CisgICAgICAgIHN5cy5tb2R1bGVzW3NwZWMubmFtZV0gPSBtb2R1bGUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3BlYy5sb2FkZXIuZXhlY19tb2R1bGUobW9kdWxlKQorICAgICAgICBleGNlcHQgQmFzZUV4Y2VwdGlvbjoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBkZWwgc3lzLm1vZHVsZXNbc3BlYy5uYW1lXQorICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIHJhaXNlCisgICAgcmV0dXJuIHN5cy5tb2R1bGVzW3NwZWMubmFtZV0KKworTm90ZSB0aGUgZm9sbG93aW5nIGRldGFpbHM6CiAKICAqIElmIHRoZXJlIGlzIGFuIGV4aXN0aW5nIG1vZHVsZSBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBpbgotICAgOmRhdGE6YHN5cy5tb2R1bGVzYCwgdGhlIGxvYWRlciBtdXN0IHVzZSB0aGF0IGV4aXN0aW5nIG1vZHVsZS4gIChPdGhlcndpc2UsCi0gICA6ZnVuYzpgaW1wLnJlbG9hZGAgd2lsbCBub3Qgd29yayBjb3JyZWN0bHkuKSAgSWYgdGhlIG5hbWVkIG1vZHVsZSBkb2VzCi0gICBub3QgZXhpc3QgaW4gOmRhdGE6YHN5cy5tb2R1bGVzYCwgdGhlIGxvYWRlciBtdXN0IGNyZWF0ZSBhIG5ldyBtb2R1bGUKLSAgIG9iamVjdCBhbmQgYWRkIGl0IHRvIDpkYXRhOmBzeXMubW9kdWxlc2AuCisgICA6ZGF0YTpgc3lzLm1vZHVsZXNgLCBpbXBvcnQgd2lsbCBoYXZlIGFscmVhZHkgcmV0dXJuZWQgaXQuCiAKLSAgIE5vdGUgdGhhdCB0aGUgbW9kdWxlICptdXN0KiBleGlzdCBpbiA6ZGF0YTpgc3lzLm1vZHVsZXNgIGJlZm9yZSB0aGUgbG9hZGVyCisgKiBUaGUgbW9kdWxlIHdpbGwgZXhpc3QgaW4gOmRhdGE6YHN5cy5tb2R1bGVzYCBiZWZvcmUgdGhlIGxvYWRlcgogICAgZXhlY3V0ZXMgdGhlIG1vZHVsZSBjb2RlLiAgVGhpcyBpcyBjcnVjaWFsIGJlY2F1c2UgdGhlIG1vZHVsZSBjb2RlIG1heQogICAgKGRpcmVjdGx5IG9yIGluZGlyZWN0bHkpIGltcG9ydCBpdHNlbGY7IGFkZGluZyBpdCB0byA6ZGF0YTpgc3lzLm1vZHVsZXNgCiAgICBiZWZvcmVoYW5kIHByZXZlbnRzIHVuYm91bmRlZCByZWN1cnNpb24gaW4gdGhlIHdvcnN0IGNhc2UgYW5kIG11bHRpcGxlCiAgICBsb2FkaW5nIGluIHRoZSBiZXN0LgogCi0gICBJZiBsb2FkaW5nIGZhaWxzLCB0aGUgbG9hZGVyIG11c3QgcmVtb3ZlIGFueSBtb2R1bGVzIGl0IGhhcyBpbnNlcnRlZCBpbnRvCi0gICA6ZGF0YTpgc3lzLm1vZHVsZXNgLCBidXQgaXQgbXVzdCByZW1vdmUgKipvbmx5KiogdGhlIGZhaWxpbmcgbW9kdWxlLCBhbmQKLSAgIG9ubHkgaWYgdGhlIGxvYWRlciBpdHNlbGYgaGFzIGxvYWRlZCBpdCBleHBsaWNpdGx5LiAgQW55IG1vZHVsZSBhbHJlYWR5IGluCi0gICB0aGUgOmRhdGE6YHN5cy5tb2R1bGVzYCBjYWNoZSwgYW5kIGFueSBtb2R1bGUgdGhhdCB3YXMgc3VjY2Vzc2Z1bGx5IGxvYWRlZAotICAgYXMgYSBzaWRlLWVmZmVjdCwgbXVzdCByZW1haW4gaW4gdGhlIGNhY2hlLgorICogSWYgbG9hZGluZyBmYWlscywgdGhlIGZhaWxpbmcgbW9kdWxlIC0tIGFuZCBvbmx5IHRoZSBmYWlsaW5nIG1vZHVsZSAtLQorICAgZ2V0cyByZW1vdmVkIGZyb20gOmRhdGE6YHN5cy5tb2R1bGVzYC4gIEFueSBtb2R1bGUgYWxyZWFkeSBpbiB0aGUKKyAgIDpkYXRhOmBzeXMubW9kdWxlc2AgY2FjaGUsIGFuZCBhbnkgbW9kdWxlIHRoYXQgd2FzIHN1Y2Nlc3NmdWxseSBsb2FkZWQKKyAgIGFzIGEgc2lkZS1lZmZlY3QsIG11c3QgcmVtYWluIGluIHRoZSBjYWNoZS4gIFRoaXMgY29udHJhc3RzIHdpdGgKKyAgIHJlbG9hZGluZyB3aGVyZSBldmVuIHRoZSBmYWlsaW5nIG1vZHVsZSBpcyBsZWZ0IGluIDpkYXRhOmBzeXMubW9kdWxlc2AuCiAKLSAqIFRoZSBsb2FkZXIgbWF5IHNldCB0aGUgYGBfX2ZpbGVfX2BgIGF0dHJpYnV0ZSBvZiB0aGUgbW9kdWxlLiAgSWYgc2V0LCB0aGlzCi0gICBhdHRyaWJ1dGUncyB2YWx1ZSBtdXN0IGJlIGEgc3RyaW5nLiAgVGhlIGxvYWRlciBtYXkgb3B0IHRvIGxlYXZlCi0gICBgYF9fZmlsZV9fYGAgdW5zZXQgaWYgaXQgaGFzIG5vIHNlbWFudGljIG1lYW5pbmcgKGUuZy4gYSBtb2R1bGUgbG9hZGVkIGZyb20KLSAgIGEgZGF0YWJhc2UpLiBJZiBgYF9fZmlsZV9fYGAgaXMgc2V0LCBpdCBtYXkgYWxzbyBiZSBhcHByb3ByaWF0ZSB0byBzZXQgdGhlCi0gICBgYF9fY2FjaGVkX19gYCBhdHRyaWJ1dGUgd2hpY2ggaXMgdGhlIHBhdGggdG8gYW55IGNvbXBpbGVkIHZlcnNpb24gb2YgdGhlCi0gICBjb2RlIChlLmcuIGJ5dGUtY29tcGlsZWQgZmlsZSkuIFRoZSBmaWxlIGRvZXMgbm90IG5lZWQgdG8gZXhpc3QgdG8gc2V0IHRoaXMKLSAgIGF0dHJpYnV0ZTsgdGhlIHBhdGggY2FuIHNpbXBseSBwb2ludCB0byB3aGV0aGVyIHRoZSBjb21waWxlZCBmaWxlIHdvdWxkCi0gICBleGlzdCAoc2VlIDpwZXA6YDMxNDdgKS4KKyAqIEFmdGVyIHRoZSBtb2R1bGUgaXMgY3JlYXRlZCBidXQgYmVmb3JlIGV4ZWN1dGlvbiwgdGhlIGltcG9ydCBtYWNoaW5lcnkKKyAgIHNldHMgdGhlIGltcG9ydC1yZWxhdGVkIG1vZHVsZSBhdHRyaWJ1dGVzICgiX2luaXRfbW9kdWxlX2F0dHJzIiBpbgorICAgdGhlIHBzZXVkby1jb2RlIGV4YW1wbGUgYWJvdmUpLCBhcyBzdW1tYXJpemVkIGluIGEKKyAgIDpyZWY6YGxhdGVyIHNlY3Rpb24gPGltcG9ydC1tb2QtYXR0cnM+YC4KIAotICogVGhlIGxvYWRlciBtYXkgc2V0IHRoZSBgYF9fbmFtZV9fYGAgYXR0cmlidXRlIG9mIHRoZSBtb2R1bGUuICBXaGlsZSBub3QKLSAgIHJlcXVpcmVkLCBzZXR0aW5nIHRoaXMgYXR0cmlidXRlIGlzIGhpZ2hseSByZWNvbW1lbmRlZCBzbyB0aGF0IHRoZQotICAgOm1ldGg6YHJlcHIoKWAgb2YgdGhlIG1vZHVsZSBpcyBtb3JlIGluZm9ybWF0aXZlLgorICogTW9kdWxlIGV4ZWN1dGlvbiBpcyB0aGUga2V5IG1vbWVudCBvZiBsb2FkaW5nIGluIHdoaWNoIHRoZSBtb2R1bGUncworICAgbmFtZXNwYWNlIGdldHMgcG9wdWxhdGVkLiAgRXhlY3V0aW9uIGlzIGVudGlyZWx5IGRlbGVnYXRlZCB0byB0aGUKKyAgIGxvYWRlciwgd2hpY2ggZ2V0cyB0byBkZWNpZGUgd2hhdCBnZXRzIHBvcHVsYXRlZCBhbmQgaG93LgogCi0gKiBJZiB0aGUgbW9kdWxlIGlzIGEgcGFja2FnZSAoZWl0aGVyIHJlZ3VsYXIgb3IgbmFtZXNwYWNlKSwgdGhlIGxvYWRlciBtdXN0Ci0gICBzZXQgdGhlIG1vZHVsZSBvYmplY3QncyBgYF9fcGF0aF9fYGAgYXR0cmlidXRlLiAgVGhlIHZhbHVlIG11c3QgYmUKLSAgIGl0ZXJhYmxlLCBidXQgbWF5IGJlIGVtcHR5IGlmIGBgX19wYXRoX19gYCBoYXMgbm8gZnVydGhlciBzaWduaWZpY2FuY2UKLSAgIHRvIHRoZSBsb2FkZXIuIElmIGBgX19wYXRoX19gYCBpcyBub3QgZW1wdHksIGl0IG11c3QgcHJvZHVjZSBzdHJpbmdzCi0gICB3aGVuIGl0ZXJhdGVkIG92ZXIuIE1vcmUgZGV0YWlscyBvbiB0aGUgc2VtYW50aWNzIG9mIGBgX19wYXRoX19gYCBhcmUKLSAgIGdpdmVuIDpyZWY6YGJlbG93IDxwYWNrYWdlLXBhdGgtcnVsZXM+YC4KKyAqIFRoZSBtb2R1bGUgY3JlYXRlZCBkdXJpbmcgbG9hZGluZyBhbmQgcGFzc2VkIHRvIGV4ZWNfbW9kdWxlKCkgbWF5CisgICBub3QgYmUgdGhlIG9uZSByZXR1cm5lZCBhdCB0aGUgZW5kIG9mIGltcG9ydCBbI2ZubG9dXy4KIAotICogVGhlIGBgX19sb2FkZXJfX2BgIGF0dHJpYnV0ZSBtdXN0IGJlIHNldCB0byB0aGUgbG9hZGVyIG9iamVjdCB0aGF0IGxvYWRlZAotICAgdGhlIG1vZHVsZS4gIFRoaXMgaXMgbW9zdGx5IGZvciBpbnRyb3NwZWN0aW9uIGFuZCByZWxvYWRpbmcsIGJ1dCBjYW4gYmUKLSAgIHVzZWQgZm9yIGFkZGl0aW9uYWwgbG9hZGVyLXNwZWNpZmljIGZ1bmN0aW9uYWxpdHksIGZvciBleGFtcGxlIGdldHRpbmcKLSAgIGRhdGEgYXNzb2NpYXRlZCB3aXRoIGEgbG9hZGVyLgorLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgIFRoZSBpbXBvcnQgc3lzdGVtIGhhcyB0YWtlbiBvdmVyIHRoZSBib2lsZXJwbGF0ZSByZXNwb25zaWJpbGl0aWVzIG9mCisgICBsb2FkZXJzLiAgVGhlc2Ugd2VyZSBwcmV2aW91c2x5IHBlcmZvcm1lZCBieSB0aGUKKyAgIDptZXRoOmBpbXBvcnRsaWIuYWJjLkxvYWRlci5sb2FkX21vZHVsZWAgbWV0aG9kLgogCi0gKiBUaGUgbW9kdWxlJ3MgYGBfX3BhY2thZ2VfX2BgIGF0dHJpYnV0ZSBzaG91bGQgYmUgc2V0LiAgSXRzIHZhbHVlIG11c3QgYmUgYQotICAgc3RyaW5nLCBidXQgaXQgY2FuIGJlIHRoZSBzYW1lIHZhbHVlIGFzIGl0cyBgYF9fbmFtZV9fYGAuICBJZiB0aGUgYXR0cmlidXRlCi0gICBpcyBzZXQgdG8gYGBOb25lYGAgb3IgaXMgbWlzc2luZywgdGhlIGltcG9ydCBzeXN0ZW0gd2lsbCBmaWxsIGl0IGluIHdpdGggYQotICAgbW9yZSBhcHByb3ByaWF0ZSB2YWx1ZS4gIFdoZW4gdGhlIG1vZHVsZSBpcyBhIHBhY2thZ2UsIGl0cyBgYF9fcGFja2FnZV9fYGAKLSAgIHZhbHVlIHNob3VsZCBiZSBzZXQgdG8gaXRzIGBgX19uYW1lX19gYC4gIFdoZW4gdGhlIG1vZHVsZSBpcyBub3QgYSBwYWNrYWdlLAotICAgYGBfX3BhY2thZ2VfX2BgIHNob3VsZCBiZSBzZXQgdG8gdGhlIGVtcHR5IHN0cmluZyBmb3IgdG9wLWxldmVsIG1vZHVsZXMsIG9yCi0gICBmb3Igc3VibW9kdWxlcywgdG8gdGhlIHBhcmVudCBwYWNrYWdlJ3MgbmFtZS4gIFNlZSA6cGVwOmAzNjZgIGZvciBmdXJ0aGVyCi0gICBkZXRhaWxzLgorTG9hZGVycworLS0tLS0tLQogCi0gICBUaGlzIGF0dHJpYnV0ZSBpcyB1c2VkIGluc3RlYWQgb2YgYGBfX25hbWVfX2BgIHRvIGNhbGN1bGF0ZSBleHBsaWNpdAotICAgcmVsYXRpdmUgaW1wb3J0cyBmb3IgbWFpbiBtb2R1bGVzLCBhcyBkZWZpbmVkIGluIDpwZXA6YDM2NmAuCitNb2R1bGUgbG9hZGVycyBwcm92aWRlIHRoZSBjcml0aWNhbCBmdW5jdGlvbiBvZiBsb2FkaW5nOiBtb2R1bGUgZXhlY3V0aW9uLgorVGhlIGltcG9ydCBtYWNoaW5lcnkgY2FsbHMgdGhlIDptZXRoOmBpbXBvcnRsaWIuYWJjLkxvYWRlci5leGVjX21vZHVsZWAKK21ldGhvZCB3aXRoIGEgc2luZ2xlIGFyZ3VtZW50LCB0aGUgbW9kdWxlIG9iamVjdCB0byBleGVjdXRlLiAgQW55IHZhbHVlCityZXR1cm5lZCBmcm9tIDptZXRoOmB+aW1wb3J0bGliLmFiYy5Mb2FkZXIuZXhlY19tb2R1bGVgIGlzIGlnbm9yZWQuCisKK0xvYWRlcnMgbXVzdCBzYXRpc2Z5IHRoZSBmb2xsb3dpbmcgcmVxdWlyZW1lbnRzOgogCiAgKiBJZiB0aGUgbW9kdWxlIGlzIGEgUHl0aG9uIG1vZHVsZSAoYXMgb3Bwb3NlZCB0byBhIGJ1aWx0LWluIG1vZHVsZSBvciBhCiAgICBkeW5hbWljYWxseSBsb2FkZWQgZXh0ZW5zaW9uKSwgdGhlIGxvYWRlciBzaG91bGQgZXhlY3V0ZSB0aGUgbW9kdWxlJ3MgY29kZQogICAgaW4gdGhlIG1vZHVsZSdzIGdsb2JhbCBuYW1lIHNwYWNlIChgYG1vZHVsZS5fX2RpY3RfX2BgKS4KIAorICogSWYgdGhlIGxvYWRlciBjYW5ub3QgZXhlY3V0ZSB0aGUgbW9kdWxlLCBpdCBzaG91bGQgcmFpc2UgYW4KKyAgIDpleGM6YEltcG9ydEVycm9yYCwgYWx0aG91Z2ggYW55IG90aGVyIGV4Y2VwdGlvbiByYWlzZWQgZHVyaW5nCisgICA6bWV0aDpgfmltcG9ydGxpYi5hYmMuTG9hZGVyLmV4ZWNfbW9kdWxlYCB3aWxsIGJlIHByb3BhZ2F0ZWQuCiAKLU1vZHVsZSByZXBycwotLS0tLS0tLS0tLS0tCitJbiBtYW55IGNhc2VzLCB0aGUgZmluZGVyIGFuZCBsb2FkZXIgY2FuIGJlIHRoZSBzYW1lIG9iamVjdDsgaW4gc3VjaCBjYXNlcyB0aGUKKzptZXRoOmB+aW1wb3J0bGliLmFiYy5NZXRhUGF0aEZpbmRlci5maW5kX3NwZWNgIG1ldGhvZCB3b3VsZCBqdXN0IHJldHVybiBhCitzcGVjIHdpdGggdGhlIGxvYWRlciBzZXQgdG8gYGBzZWxmYGAuCiAKLUJ5IGRlZmF1bHQsIGFsbCBtb2R1bGVzIGhhdmUgYSB1c2FibGUgcmVwciwgaG93ZXZlciBkZXBlbmRpbmcgb24gdGhlCi1hdHRyaWJ1dGVzIHNldCBhYm92ZSwgYW5kIGhvb2tzIGluIHRoZSBsb2FkZXIsIHlvdSBjYW4gbW9yZSBleHBsaWNpdGx5IGNvbnRyb2wKLXRoZSByZXByIG9mIG1vZHVsZSBvYmplY3RzLgorTW9kdWxlIGxvYWRlcnMgbWF5IG9wdCBpbiB0byBjcmVhdGluZyB0aGUgbW9kdWxlIG9iamVjdCBkdXJpbmcgbG9hZGluZworYnkgaW1wbGVtZW50aW5nIGEgOm1ldGg6YH5pbXBvcnRsaWIuYWJjLkxvYWRlci5jcmVhdGVfbW9kdWxlYCBtZXRob2QuCitJdCB0YWtlcyBvbmUgYXJndW1lbnQsIHRoZSBtb2R1bGUgc3BlYywgYW5kIHJldHVybnMgdGhlIG5ldyBtb2R1bGUgb2JqZWN0Cit0byB1c2UgZHVyaW5nIGxvYWRpbmcuICBgYGNyZWF0ZV9tb2R1bGUoKWBgIGRvZXMgbm90IG5lZWQgdG8gc2V0IGFueSBhdHRyaWJ1dGVzCitvbiB0aGUgbW9kdWxlIG9iamVjdC4gIElmIHRoZSBsb2FkZXIgZG9lcyBub3QgZGVmaW5lIGBgY3JlYXRlX21vZHVsZSgpYGAsIHRoZQoraW1wb3J0IG1hY2hpbmVyeSB3aWxsIGNyZWF0ZSB0aGUgbmV3IG1vZHVsZSBpdHNlbGYuCiAKLUxvYWRlcnMgbWF5IGltcGxlbWVudCBhIDptZXRoOmBtb2R1bGVfcmVwcigpYCBtZXRob2Qgd2hpY2ggdGFrZXMgYSBzaW5nbGUKLWFyZ3VtZW50LCB0aGUgbW9kdWxlIG9iamVjdC4gIFdoZW4gYGByZXByKG1vZHVsZSlgYCBpcyBjYWxsZWQgZm9yIGEgbW9kdWxlCi13aXRoIGEgbG9hZGVyIHN1cHBvcnRpbmcgdGhpcyBwcm90b2NvbCwgd2hhdGV2ZXIgaXMgcmV0dXJuZWQgZnJvbQotYGBtb2R1bGUuX19sb2FkZXJfXy5tb2R1bGVfcmVwcihtb2R1bGUpYGAgaXMgcmV0dXJuZWQgYXMgdGhlIG1vZHVsZSdzIHJlcHIKLXdpdGhvdXQgZnVydGhlciBwcm9jZXNzaW5nLiAgVGhpcyByZXR1cm4gdmFsdWUgbXVzdCBiZSBhIHN0cmluZy4KKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorICAgVGhlIGNyZWF0ZV9tb2R1bGUoKSBtZXRob2Qgb2YgbG9hZGVycy4KIAotSWYgdGhlIG1vZHVsZSBoYXMgbm8gYGBfX2xvYWRlcl9fYGAgYXR0cmlidXRlLCBvciB0aGUgbG9hZGVyIGhhcyBubwotOm1ldGg6YG1vZHVsZV9yZXByKClgIG1ldGhvZCwgdGhlbiB0aGUgbW9kdWxlIG9iamVjdCBpbXBsZW1lbnRhdGlvbiBpdHNlbGYKLXdpbGwgY3JhZnQgYSBkZWZhdWx0IHJlcHIgdXNpbmcgd2hhdGV2ZXIgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlLiAgSXQgd2lsbAotdHJ5IHRvIHVzZSB0aGUgYGBtb2R1bGUuX19uYW1lX19gYCwgYGBtb2R1bGUuX19maWxlX19gYCwgYW5kCi1gYG1vZHVsZS5fX2xvYWRlcl9fYGAgYXMgaW5wdXQgaW50byB0aGUgcmVwciwgd2l0aCBkZWZhdWx0cyBmb3Igd2hhdGV2ZXIKLWluZm9ybWF0aW9uIGlzIG1pc3NpbmcuCisuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgVGhlIDptZXRoOmB+aW1wb3J0bGliLmFiYy5Mb2FkZXIubG9hZF9tb2R1bGVgIG1ldGhvZCB3YXMgcmVwbGFjZWQgYnkKKyAgIDptZXRoOmB+aW1wb3J0bGliLmFiYy5Mb2FkZXIuZXhlY19tb2R1bGVgIGFuZCB0aGUgaW1wb3J0CisgICBtYWNoaW5lcnkgYXNzdW1lZCBhbGwgdGhlIGJvaWxlcnBsYXRlIHJlc3BvbnNpYmlsaXRpZXMgb2YgbG9hZGluZy4KIAotSGVyZSBhcmUgdGhlIGV4YWN0IHJ1bGVzIHVzZWQ6CisgICBGb3IgY29tcGF0aWJpbGl0eSB3aXRoIGV4aXN0aW5nIGxvYWRlcnMsIHRoZSBpbXBvcnQgbWFjaGluZXJ5IHdpbGwgdXNlCisgICB0aGUgYGBsb2FkX21vZHVsZSgpYGAgbWV0aG9kIG9mIGxvYWRlcnMgaWYgaXQgZXhpc3RzIGFuZCB0aGUgbG9hZGVyIGRvZXMKKyAgIG5vdCBhbHNvIGltcGxlbWVudCBgYGV4ZWNfbW9kdWxlKClgYC4gIEhvd2V2ZXIsIGBgbG9hZF9tb2R1bGUoKWBgIGhhcyBiZWVuCisgICBkZXByZWNhdGVkIGFuZCBsb2FkZXJzIHNob3VsZCBpbXBsZW1lbnQgYGBleGVjX21vZHVsZSgpYGAgaW5zdGVhZC4KIAotICogSWYgdGhlIG1vZHVsZSBoYXMgYSBgYF9fbG9hZGVyX19gYCBhbmQgdGhhdCBsb2FkZXIgaGFzIGEKLSAgIDptZXRoOmBtb2R1bGVfcmVwcigpYCBtZXRob2QsIGNhbGwgaXQgd2l0aCBhIHNpbmdsZSBhcmd1bWVudCwgd2hpY2ggaXMgdGhlCi0gICBtb2R1bGUgb2JqZWN0LiAgVGhlIHZhbHVlIHJldHVybmVkIGlzIHVzZWQgYXMgdGhlIG1vZHVsZSdzIHJlcHIuCisgICBUaGUgYGBsb2FkX21vZHVsZSgpYGAgbWV0aG9kIG11c3QgaW1wbGVtZW50IGFsbCB0aGUgYm9pbGVycGxhdGUgbG9hZGluZworICAgZnVuY3Rpb25hbGl0eSBkZXNjcmliZWQgYWJvdmUgaW4gYWRkaXRpb24gdG8gZXhlY3V0aW5nIHRoZSBtb2R1bGUuICBBbGwKKyAgIHRoZSBzYW1lIGNvbnN0cmFpbnRzIGFwcGx5LCB3aXRoIHNvbWUgYWRkaXRpb25hbCBjbGFyaWZpY2F0aW9uOgogCi0gKiBJZiBhbiBleGNlcHRpb24gb2NjdXJzIGluIDptZXRoOmBtb2R1bGVfcmVwcigpYCwgdGhlIGV4Y2VwdGlvbiBpcyBjYXVnaHQKLSAgIGFuZCBkaXNjYXJkZWQsIGFuZCB0aGUgY2FsY3VsYXRpb24gb2YgdGhlIG1vZHVsZSdzIHJlcHIgY29udGludWVzIGFzIGlmCi0gICA6bWV0aDpgbW9kdWxlX3JlcHIoKWAgZGlkIG5vdCBleGlzdC4KKyAgICAqIElmIHRoZXJlIGlzIGFuIGV4aXN0aW5nIG1vZHVsZSBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBpbgorICAgICAgOmRhdGE6YHN5cy5tb2R1bGVzYCwgdGhlIGxvYWRlciBtdXN0IHVzZSB0aGF0IGV4aXN0aW5nIG1vZHVsZS4KKyAgICAgIChPdGhlcndpc2UsIDpmdW5jOmBpbXBvcnRsaWIucmVsb2FkYCB3aWxsIG5vdCB3b3JrIGNvcnJlY3RseS4pICBJZiB0aGUKKyAgICAgIG5hbWVkIG1vZHVsZSBkb2VzIG5vdCBleGlzdCBpbiA6ZGF0YTpgc3lzLm1vZHVsZXNgLCB0aGUgbG9hZGVyCisgICAgICBtdXN0IGNyZWF0ZSBhIG5ldyBtb2R1bGUgb2JqZWN0IGFuZCBhZGQgaXQgdG8gOmRhdGE6YHN5cy5tb2R1bGVzYC4KIAotICogSWYgdGhlIG1vZHVsZSBoYXMgYSBgYF9fZmlsZV9fYGAgYXR0cmlidXRlLCB0aGlzIGlzIHVzZWQgYXMgcGFydCBvZiB0aGUKLSAgIG1vZHVsZSdzIHJlcHIuCisgICAgKiBUaGUgbW9kdWxlICptdXN0KiBleGlzdCBpbiA6ZGF0YTpgc3lzLm1vZHVsZXNgIGJlZm9yZSB0aGUgbG9hZGVyCisgICAgICBleGVjdXRlcyB0aGUgbW9kdWxlIGNvZGUsIHRvIHByZXZlbnQgdW5ib3VuZGVkIHJlY3Vyc2lvbiBvciBtdWx0aXBsZQorICAgICAgbG9hZGluZy4KIAotICogSWYgdGhlIG1vZHVsZSBoYXMgbm8gYGBfX2ZpbGVfX2BgIGJ1dCBkb2VzIGhhdmUgYSBgYF9fbG9hZGVyX19gYCwgdGhlbiB0aGUKLSAgIGxvYWRlcidzIHJlcHIgaXMgdXNlZCBhcyBwYXJ0IG9mIHRoZSBtb2R1bGUncyByZXByLgorICAgICogSWYgbG9hZGluZyBmYWlscywgdGhlIGxvYWRlciBtdXN0IHJlbW92ZSBhbnkgbW9kdWxlcyBpdCBoYXMgaW5zZXJ0ZWQKKyAgICAgIGludG8gOmRhdGE6YHN5cy5tb2R1bGVzYCwgYnV0IGl0IG11c3QgcmVtb3ZlICoqb25seSoqIHRoZSBmYWlsaW5nCisgICAgICBtb2R1bGUsIGFuZCBvbmx5IGlmIHRoZSBsb2FkZXIgaXRzZWxmIGhhcyBsb2FkZWQgaXQgZXhwbGljaXRseS4KIAotICogT3RoZXJ3aXNlLCBqdXN0IHVzZSB0aGUgbW9kdWxlJ3MgYGBfX25hbWVfX2BgIGluIHRoZSByZXByLgorU3VibW9kdWxlcworLS0tLS0tLS0tLQogCi1UaGlzIGV4YW1wbGUsIGZyb20gOnBlcDpgNDIwYCBzaG93cyBob3cgYSBsb2FkZXIgY2FuIGNyYWZ0IGl0cyBvd24gbW9kdWxlCi1yZXByOjoKK1doZW4gYSBzdWJtb2R1bGUgaXMgbG9hZGVkIHVzaW5nIGFueSBtZWNoYW5pc20gKGUuZy4gYGBpbXBvcnRsaWJgYCBBUElzLCB0aGUKK2BgaW1wb3J0YGAgb3IgYGBpbXBvcnQtZnJvbWBgIHN0YXRlbWVudHMsIG9yIGJ1aWx0LWluIGBgX19pbXBvcnRfXygpYGApIGEKK2JpbmRpbmcgaXMgcGxhY2VkIGluIHRoZSBwYXJlbnQgbW9kdWxlJ3MgbmFtZXNwYWNlIHRvIHRoZSBzdWJtb2R1bGUgb2JqZWN0LgorRm9yIGV4YW1wbGUsIGlmIHBhY2thZ2UgYGBzcGFtYGAgaGFzIGEgc3VibW9kdWxlIGBgZm9vYGAsIGFmdGVyIGltcG9ydGluZworYGBzcGFtLmZvb2BgLCBgYHNwYW1gYCB3aWxsIGhhdmUgYW4gYXR0cmlidXRlIGBgZm9vYGAgd2hpY2ggaXMgYm91bmQgdG8gdGhlCitzdWJtb2R1bGUuICBMZXQncyBzYXkgeW91IGhhdmUgdGhlIGZvbGxvd2luZyBkaXJlY3Rvcnkgc3RydWN0dXJlOjoKIAotICAgIGNsYXNzIE5hbWVzcGFjZUxvYWRlcjoKLSAgICAgICAgQGNsYXNzbWV0aG9kCi0gICAgICAgIGRlZiBtb2R1bGVfcmVwcihjbHMsIG1vZHVsZSk6Ci0gICAgICAgICAgICByZXR1cm4gIjxtb2R1bGUgJ3t9JyAobmFtZXNwYWNlKT4iLmZvcm1hdChtb2R1bGUuX19uYW1lX18pCisgICAgc3BhbS8KKyAgICAgICAgX19pbml0X18ucHkKKyAgICAgICAgZm9vLnB5CisgICAgICAgIGJhci5weQogCithbmQgYGBzcGFtL19faW5pdF9fLnB5YGAgaGFzIHRoZSBmb2xsb3dpbmcgbGluZXMgaW4gaXQ6OgorCisgICAgZnJvbSAuZm9vIGltcG9ydCBGb28KKyAgICBmcm9tIC5iYXIgaW1wb3J0IEJhcgorCit0aGVuIGV4ZWN1dGluZyB0aGUgZm9sbG93aW5nIHB1dHMgYSBuYW1lIGJpbmRpbmcgdG8gYGBmb29gYCBhbmQgYGBiYXJgYCBpbiB0aGUKK2Bgc3BhbWBgIG1vZHVsZTo6CisKKyAgICA+Pj4gaW1wb3J0IHNwYW0KKyAgICA+Pj4gc3BhbS5mb28KKyAgICA8bW9kdWxlICdzcGFtLmZvbycgZnJvbSAnL3RtcC9pbXBvcnRzL3NwYW0vZm9vLnB5Jz4KKyAgICA+Pj4gc3BhbS5iYXIKKyAgICA8bW9kdWxlICdzcGFtLmJhcicgZnJvbSAnL3RtcC9pbXBvcnRzL3NwYW0vYmFyLnB5Jz4KKworR2l2ZW4gUHl0aG9uJ3MgZmFtaWxpYXIgbmFtZSBiaW5kaW5nIHJ1bGVzIHRoaXMgbWlnaHQgc2VlbSBzdXJwcmlzaW5nLCBidXQKK2l0J3MgYWN0dWFsbHkgYSBmdW5kYW1lbnRhbCBmZWF0dXJlIG9mIHRoZSBpbXBvcnQgc3lzdGVtLiAgVGhlIGludmFyaWFudAoraG9sZGluZyBpcyB0aGF0IGlmIHlvdSBoYXZlIGBgc3lzLm1vZHVsZXNbJ3NwYW0nXWBgIGFuZAorYGBzeXMubW9kdWxlc1snc3BhbS5mb28nXWBgIChhcyB5b3Ugd291bGQgYWZ0ZXIgdGhlIGFib3ZlIGltcG9ydCksIHRoZSBsYXR0ZXIKK211c3QgYXBwZWFyIGFzIHRoZSBgYGZvb2BgIGF0dHJpYnV0ZSBvZiB0aGUgZm9ybWVyLgorCitNb2R1bGUgc3BlYworLS0tLS0tLS0tLS0KKworVGhlIGltcG9ydCBtYWNoaW5lcnkgdXNlcyBhIHZhcmlldHkgb2YgaW5mb3JtYXRpb24gYWJvdXQgZWFjaCBtb2R1bGUKK2R1cmluZyBpbXBvcnQsIGVzcGVjaWFsbHkgYmVmb3JlIGxvYWRpbmcuICBNb3N0IG9mIHRoZSBpbmZvcm1hdGlvbiBpcworY29tbW9uIHRvIGFsbCBtb2R1bGVzLiAgVGhlIHB1cnBvc2Ugb2YgYSBtb2R1bGUncyBzcGVjIGlzIHRvIGVuY2Fwc3VsYXRlCit0aGlzIGltcG9ydC1yZWxhdGVkIGluZm9ybWF0aW9uIG9uIGEgcGVyLW1vZHVsZSBiYXNpcy4KKworVXNpbmcgYSBzcGVjIGR1cmluZyBpbXBvcnQgYWxsb3dzIHN0YXRlIHRvIGJlIHRyYW5zZmVycmVkIGJldHdlZW4gaW1wb3J0CitzeXN0ZW0gY29tcG9uZW50cywgZS5nLiBiZXR3ZWVuIHRoZSBmaW5kZXIgdGhhdCBjcmVhdGVzIHRoZSBtb2R1bGUgc3BlYworYW5kIHRoZSBsb2FkZXIgdGhhdCBleGVjdXRlcyBpdC4gIE1vc3QgaW1wb3J0YW50bHksIGl0IGFsbG93cyB0aGUKK2ltcG9ydCBtYWNoaW5lcnkgdG8gcGVyZm9ybSB0aGUgYm9pbGVycGxhdGUgb3BlcmF0aW9ucyBvZiBsb2FkaW5nLAord2hlcmVhcyB3aXRob3V0IGEgbW9kdWxlIHNwZWMgdGhlIGxvYWRlciBoYWQgdGhhdCByZXNwb25zaWJpbGl0eS4KKworU2VlIDpjbGFzczpgfmltcG9ydGxpYi5tYWNoaW5lcnkuTW9kdWxlU3BlY2AgZm9yIG1vcmUgc3BlY2lmaWNzIG9uIHdoYXQKK2luZm9ybWF0aW9uIGEgbW9kdWxlJ3Mgc3BlYyBtYXkgaG9sZC4KKworLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKy4uIF9pbXBvcnQtbW9kLWF0dHJzOgorCitJbXBvcnQtcmVsYXRlZCBtb2R1bGUgYXR0cmlidXRlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGltcG9ydCBtYWNoaW5lcnkgZmlsbHMgaW4gdGhlc2UgYXR0cmlidXRlcyBvbiBlYWNoIG1vZHVsZSBvYmplY3QKK2R1cmluZyBsb2FkaW5nLCBiYXNlZCBvbiB0aGUgbW9kdWxlJ3Mgc3BlYywgYmVmb3JlIHRoZSBsb2FkZXIgZXhlY3V0ZXMKK3RoZSBtb2R1bGUuCisKKy4uIGF0dHJpYnV0ZTo6IF9fbmFtZV9fCisKKyAgIFRoZSBgYF9fbmFtZV9fYGAgYXR0cmlidXRlIG11c3QgYmUgc2V0IHRvIHRoZSBmdWxseS1xdWFsaWZpZWQgbmFtZSBvZgorICAgdGhlIG1vZHVsZS4gIFRoaXMgbmFtZSBpcyB1c2VkIHRvIHVuaXF1ZWx5IGlkZW50aWZ5IHRoZSBtb2R1bGUgaW4KKyAgIHRoZSBpbXBvcnQgc3lzdGVtLgorCisuLiBhdHRyaWJ1dGU6OiBfX2xvYWRlcl9fCisKKyAgIFRoZSBgYF9fbG9hZGVyX19gYCBhdHRyaWJ1dGUgbXVzdCBiZSBzZXQgdG8gdGhlIGxvYWRlciBvYmplY3QgdGhhdAorICAgdGhlIGltcG9ydCBtYWNoaW5lcnkgdXNlZCB3aGVuIGxvYWRpbmcgdGhlIG1vZHVsZS4gIFRoaXMgaXMgbW9zdGx5CisgICBmb3IgaW50cm9zcGVjdGlvbiwgYnV0IGNhbiBiZSB1c2VkIGZvciBhZGRpdGlvbmFsIGxvYWRlci1zcGVjaWZpYworICAgZnVuY3Rpb25hbGl0eSwgZm9yIGV4YW1wbGUgZ2V0dGluZyBkYXRhIGFzc29jaWF0ZWQgd2l0aCBhIGxvYWRlci4KKworLi4gYXR0cmlidXRlOjogX19wYWNrYWdlX18KKworICAgVGhlIG1vZHVsZSdzIGBgX19wYWNrYWdlX19gYCBhdHRyaWJ1dGUgbXVzdCBiZSBzZXQuICBJdHMgdmFsdWUgbXVzdAorICAgYmUgYSBzdHJpbmcsIGJ1dCBpdCBjYW4gYmUgdGhlIHNhbWUgdmFsdWUgYXMgaXRzIGBgX19uYW1lX19gYC4gIFdoZW4KKyAgIHRoZSBtb2R1bGUgaXMgYSBwYWNrYWdlLCBpdHMgYGBfX3BhY2thZ2VfX2BgIHZhbHVlIHNob3VsZCBiZSBzZXQgdG8KKyAgIGl0cyBgYF9fbmFtZV9fYGAuICBXaGVuIHRoZSBtb2R1bGUgaXMgbm90IGEgcGFja2FnZSwgYGBfX3BhY2thZ2VfX2BgCisgICBzaG91bGQgYmUgc2V0IHRvIHRoZSBlbXB0eSBzdHJpbmcgZm9yIHRvcC1sZXZlbCBtb2R1bGVzLCBvciBmb3IKKyAgIHN1Ym1vZHVsZXMsIHRvIHRoZSBwYXJlbnQgcGFja2FnZSdzIG5hbWUuICBTZWUgOnBlcDpgMzY2YCBmb3IgZnVydGhlcgorICAgZGV0YWlscy4KKworICAgVGhpcyBhdHRyaWJ1dGUgaXMgdXNlZCBpbnN0ZWFkIG9mIGBgX19uYW1lX19gYCB0byBjYWxjdWxhdGUgZXhwbGljaXQKKyAgIHJlbGF0aXZlIGltcG9ydHMgZm9yIG1haW4gbW9kdWxlcywgYXMgZGVmaW5lZCBpbiA6cGVwOmAzNjZgLgorCisuLiBhdHRyaWJ1dGU6OiBfX3NwZWNfXworCisgICBUaGUgYGBfX3NwZWNfX2BgIGF0dHJpYnV0ZSBtdXN0IGJlIHNldCB0byB0aGUgbW9kdWxlIHNwZWMgdGhhdCB3YXMKKyAgIHVzZWQgd2hlbiBpbXBvcnRpbmcgdGhlIG1vZHVsZS4gIFRoaXMgaXMgdXNlZCBwcmltYXJpbHkgZm9yCisgICBpbnRyb3NwZWN0aW9uIGFuZCBkdXJpbmcgcmVsb2FkaW5nLiAgU2V0dGluZyBgYF9fc3BlY19fYGAKKyAgIGFwcHJvcHJpYXRlbHkgYXBwbGllcyBlcXVhbGx5IHRvIDpyZWY6YG1vZHVsZXMgaW5pdGlhbGl6ZWQgZHVyaW5nCisgICBpbnRlcnByZXRlciBzdGFydHVwIDxwcm9ncmFtcz5gLiAgVGhlIG9uZSBleGNlcHRpb24gaXMgYGBfX21haW5fX2BgLAorICAgd2hlcmUgYGBfX3NwZWNfX2BgIGlzIDpyZWY6YHNldCB0byBOb25lIGluIHNvbWUgY2FzZXMgPG1haW5fc3BlYz5gLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworLi4gYXR0cmlidXRlOjogX19wYXRoX18KKworICAgSWYgdGhlIG1vZHVsZSBpcyBhIHBhY2thZ2UgKGVpdGhlciByZWd1bGFyIG9yIG5hbWVzcGFjZSksIHRoZSBtb2R1bGUKKyAgIG9iamVjdCdzIGBgX19wYXRoX19gYCBhdHRyaWJ1dGUgbXVzdCBiZSBzZXQuICBUaGUgdmFsdWUgbXVzdCBiZQorICAgaXRlcmFibGUsIGJ1dCBtYXkgYmUgZW1wdHkgaWYgYGBfX3BhdGhfX2BgIGhhcyBubyBmdXJ0aGVyIHNpZ25pZmljYW5jZS4KKyAgIElmIGBgX19wYXRoX19gYCBpcyBub3QgZW1wdHksIGl0IG11c3QgcHJvZHVjZSBzdHJpbmdzIHdoZW4gaXRlcmF0ZWQKKyAgIG92ZXIuIE1vcmUgZGV0YWlscyBvbiB0aGUgc2VtYW50aWNzIG9mIGBgX19wYXRoX19gYCBhcmUgZ2l2ZW4KKyAgIDpyZWY6YGJlbG93IDxwYWNrYWdlLXBhdGgtcnVsZXM+YC4KKworICAgTm9uLXBhY2thZ2UgbW9kdWxlcyBzaG91bGQgbm90IGhhdmUgYSBgYF9fcGF0aF9fYGAgYXR0cmlidXRlLgorCisuLiBhdHRyaWJ1dGU6OiBfX2ZpbGVfXworLi4gYXR0cmlidXRlOjogX19jYWNoZWRfXworCisgICBgYF9fZmlsZV9fYGAgaXMgb3B0aW9uYWwuIElmIHNldCwgdGhpcyBhdHRyaWJ1dGUncyB2YWx1ZSBtdXN0IGJlIGEKKyAgIHN0cmluZy4gIFRoZSBpbXBvcnQgc3lzdGVtIG1heSBvcHQgdG8gbGVhdmUgYGBfX2ZpbGVfX2BgIHVuc2V0IGlmIGl0CisgICBoYXMgbm8gc2VtYW50aWMgbWVhbmluZyAoZS5nLiBhIG1vZHVsZSBsb2FkZWQgZnJvbSBhIGRhdGFiYXNlKS4KKworICAgSWYgYGBfX2ZpbGVfX2BgIGlzIHNldCwgaXQgbWF5IGFsc28gYmUgYXBwcm9wcmlhdGUgdG8gc2V0IHRoZQorICAgYGBfX2NhY2hlZF9fYGAgYXR0cmlidXRlIHdoaWNoIGlzIHRoZSBwYXRoIHRvIGFueSBjb21waWxlZCB2ZXJzaW9uIG9mCisgICB0aGUgY29kZSAoZS5nLiBieXRlLWNvbXBpbGVkIGZpbGUpLiBUaGUgZmlsZSBkb2VzIG5vdCBuZWVkIHRvIGV4aXN0CisgICB0byBzZXQgdGhpcyBhdHRyaWJ1dGU7IHRoZSBwYXRoIGNhbiBzaW1wbHkgcG9pbnQgdG8gd2hlcmUgdGhlCisgICBjb21waWxlZCBmaWxlIHdvdWxkIGV4aXN0IChzZWUgOnBlcDpgMzE0N2ApLgorCisgICBJdCBpcyBhbHNvIGFwcHJvcHJpYXRlIHRvIHNldCBgYF9fY2FjaGVkX19gYCB3aGVuIGBgX19maWxlX19gYCBpcyBub3QKKyAgIHNldC4gIEhvd2V2ZXIsIHRoYXQgc2NlbmFyaW8gaXMgcXVpdGUgYXR5cGljYWwuICBVbHRpbWF0ZWx5LCB0aGUKKyAgIGxvYWRlciBpcyB3aGF0IG1ha2VzIHVzZSBvZiBgYF9fZmlsZV9fYGAgYW5kL29yIGBgX19jYWNoZWRfX2BgLiAgU28KKyAgIGlmIGEgbG9hZGVyIGNhbiBsb2FkIGZyb20gYSBjYWNoZWQgbW9kdWxlIGJ1dCBvdGhlcndpc2UgZG9lcyBub3QgbG9hZAorICAgZnJvbSBhIGZpbGUsIHRoYXQgYXR5cGljYWwgc2NlbmFyaW8gbWF5IGJlIGFwcHJvcHJpYXRlLgogCiAuLiBfcGFja2FnZS1wYXRoLXJ1bGVzOgogCkBAIC00NjIsOSArNjE0LDQ3IEBACiBhdHRyaWJ1dGUsIGFuZCB0aGlzIHdhcyB0eXBpY2FsbHkgdGhlIHdheSBuYW1lc3BhY2UgcGFja2FnZXMgd2VyZSBpbXBsZW1lbnRlZAogcHJpb3IgdG8gOnBlcDpgNDIwYC4gIFdpdGggdGhlIGFkb3B0aW9uIG9mIDpwZXA6YDQyMGAsIG5hbWVzcGFjZSBwYWNrYWdlcyBubwogbG9uZ2VyIG5lZWQgdG8gc3VwcGx5IGBgX19pbml0X18ucHlgYCBmaWxlcyBjb250YWluaW5nIG9ubHkgYGBfX3BhdGhfX2BgCi1tYW5pcHVsYXRpb24gY29kZTsgdGhlIG5hbWVzcGFjZSBsb2FkZXIgYXV0b21hdGljYWxseSBzZXRzIGBgX19wYXRoX19gYAorbWFuaXB1bGF0aW9uIGNvZGU7IHRoZSBpbXBvcnQgbWFjaGluZXJ5IGF1dG9tYXRpY2FsbHkgc2V0cyBgYF9fcGF0aF9fYGAKIGNvcnJlY3RseSBmb3IgdGhlIG5hbWVzcGFjZSBwYWNrYWdlLgogCitNb2R1bGUgcmVwcnMKKy0tLS0tLS0tLS0tLQorCitCeSBkZWZhdWx0LCBhbGwgbW9kdWxlcyBoYXZlIGEgdXNhYmxlIHJlcHIsIGhvd2V2ZXIgZGVwZW5kaW5nIG9uIHRoZQorYXR0cmlidXRlcyBzZXQgYWJvdmUsIGFuZCBpbiB0aGUgbW9kdWxlJ3Mgc3BlYywgeW91IGNhbiBtb3JlIGV4cGxpY2l0bHkKK2NvbnRyb2wgdGhlIHJlcHIgb2YgbW9kdWxlIG9iamVjdHMuCisKK0lmIHRoZSBtb2R1bGUgaGFzIGEgc3BlYyAoYGBfX3NwZWNfX2BgKSwgdGhlIGltcG9ydCBtYWNoaW5lcnkgd2lsbCB0cnkKK3RvIGdlbmVyYXRlIGEgcmVwciBmcm9tIGl0LiAgSWYgdGhhdCBmYWlscyBvciB0aGVyZSBpcyBubyBzcGVjLCB0aGUgaW1wb3J0CitzeXN0ZW0gd2lsbCBjcmFmdCBhIGRlZmF1bHQgcmVwciB1c2luZyB3aGF0ZXZlciBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUKK29uIHRoZSBtb2R1bGUuICBJdCB3aWxsIHRyeSB0byB1c2UgdGhlIGBgbW9kdWxlLl9fbmFtZV9fYGAsCitgYG1vZHVsZS5fX2ZpbGVfX2BgLCBhbmQgYGBtb2R1bGUuX19sb2FkZXJfX2BgIGFzIGlucHV0IGludG8gdGhlIHJlcHIsCit3aXRoIGRlZmF1bHRzIGZvciB3aGF0ZXZlciBpbmZvcm1hdGlvbiBpcyBtaXNzaW5nLgorCitIZXJlIGFyZSB0aGUgZXhhY3QgcnVsZXMgdXNlZDoKKworICogSWYgdGhlIG1vZHVsZSBoYXMgYSBgYF9fc3BlY19fYGAgYXR0cmlidXRlLCB0aGUgaW5mb3JtYXRpb24gaW4gdGhlIHNwZWMKKyAgIGlzIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHJlcHIuICBUaGUgIm5hbWUiLCAibG9hZGVyIiwgIm9yaWdpbiIsIGFuZAorICAgImhhc19sb2NhdGlvbiIgYXR0cmlidXRlcyBhcmUgY29uc3VsdGVkLgorCisgKiBJZiB0aGUgbW9kdWxlIGhhcyBhIGBgX19maWxlX19gYCBhdHRyaWJ1dGUsIHRoaXMgaXMgdXNlZCBhcyBwYXJ0IG9mIHRoZQorICAgbW9kdWxlJ3MgcmVwci4KKworICogSWYgdGhlIG1vZHVsZSBoYXMgbm8gYGBfX2ZpbGVfX2BgIGJ1dCBkb2VzIGhhdmUgYSBgYF9fbG9hZGVyX19gYCB0aGF0IGlzIG5vdAorICAgYGBOb25lYGAsIHRoZW4gdGhlIGxvYWRlcidzIHJlcHIgaXMgdXNlZCBhcyBwYXJ0IG9mIHRoZSBtb2R1bGUncyByZXByLgorCisgKiBPdGhlcndpc2UsIGp1c3QgdXNlIHRoZSBtb2R1bGUncyBgYF9fbmFtZV9fYGAgaW4gdGhlIHJlcHIuCisKKy4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICBVc2Ugb2YgOm1ldGg6YGxvYWRlci5tb2R1bGVfcmVwcigpIDxpbXBvcnRsaWIuYWJjLkxvYWRlci5tb2R1bGVfcmVwcj5gCisgICBoYXMgYmVlbiBkZXByZWNhdGVkIGFuZCB0aGUgbW9kdWxlIHNwZWMgaXMgbm93IHVzZWQgYnkgdGhlIGltcG9ydAorICAgbWFjaGluZXJ5IHRvIGdlbmVyYXRlIGEgbW9kdWxlIHJlcHIuCisKKyAgIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGggUHl0aG9uIDMuMywgdGhlIG1vZHVsZSByZXByIHdpbGwgYmUKKyAgIGdlbmVyYXRlZCBieSBjYWxsaW5nIHRoZSBsb2FkZXIncworICAgOm1ldGg6YH5pbXBvcnRsaWIuYWJjLkxvYWRlci5tb2R1bGVfcmVwcmAgbWV0aG9kLCBpZiBkZWZpbmVkLCBiZWZvcmUKKyAgIHRyeWluZyBlaXRoZXIgYXBwcm9hY2ggZGVzY3JpYmVkIGFib3ZlLiAgSG93ZXZlciwgdGhlIG1ldGhvZCBpcyBkZXByZWNhdGVkLgorCiAKIFRoZSBQYXRoIEJhc2VkIEZpbmRlcgogPT09PT09PT09PT09PT09PT09PT09CkBAIC00NzMsOCArNjYzLDkgQEAKICAgICBzaW5nbGU6IHBhdGggYmFzZWQgZmluZGVyCiAKIEFzIG1lbnRpb25lZCBwcmV2aW91c2x5LCBQeXRob24gY29tZXMgd2l0aCBzZXZlcmFsIGRlZmF1bHQgbWV0YSBwYXRoIGZpbmRlcnMuCi1PbmUgb2YgdGhlc2UsIGNhbGxlZCB0aGUgOnRlcm06YHBhdGggYmFzZWQgZmluZGVyYCwgc2VhcmNoZXMgYW4gOnRlcm06YGltcG9ydAotcGF0aGAsIHdoaWNoIGNvbnRhaW5zIGEgbGlzdCBvZiA6dGVybTpgcGF0aCBlbnRyaWVzIDxwYXRoIGVudHJ5PmAuICBFYWNoIHBhdGgKK09uZSBvZiB0aGVzZSwgY2FsbGVkIHRoZSA6dGVybTpgcGF0aCBiYXNlZCBmaW5kZXJgCisoOmNsYXNzOmB+aW1wb3J0bGliLm1hY2hpbmVyeS5QYXRoRmluZGVyYCksIHNlYXJjaGVzIGFuIDp0ZXJtOmBpbXBvcnQgcGF0aGAsCit3aGljaCBjb250YWlucyBhIGxpc3Qgb2YgOnRlcm06YHBhdGggZW50cmllcyA8cGF0aCBlbnRyeT5gLiAgRWFjaCBwYXRoCiBlbnRyeSBuYW1lcyBhIGxvY2F0aW9uIHRvIHNlYXJjaCBmb3IgbW9kdWxlcy4KIAogVGhlIHBhdGggYmFzZWQgZmluZGVyIGl0c2VsZiBkb2Vzbid0IGtub3cgaG93IHRvIGltcG9ydCBhbnl0aGluZy4gSW5zdGVhZCwgaXQKQEAgLTUyMywxNSArNzE0LDE1IEBACiAgICAgc2luZ2xlOiBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZQogICAgIHNpbmdsZTogUFlUSE9OUEFUSAogCi1UaGUgOnRlcm06YHBhdGggYmFzZWQgZmluZGVyYCBpcyByZXNwb25zaWJsZSBmb3IgZmluZGluZyBhbmQgbG9hZGluZyBQeXRob24KLW1vZHVsZXMgYW5kIHBhY2thZ2VzIHdob3NlIGxvY2F0aW9uIGlzIHNwZWNpZmllZCB3aXRoIGEgc3RyaW5nIDp0ZXJtOmBwYXRoCi1lbnRyeWAuICBNb3N0IHBhdGggZW50cmllcyBuYW1lIGxvY2F0aW9ucyBpbiB0aGUgZmlsZSBzeXN0ZW0sIGJ1dCB0aGV5IG5lZWQKLW5vdCBiZSBsaW1pdGVkIHRvIHRoaXMuCitUaGUgOnRlcm06YHBhdGggYmFzZWQgZmluZGVyYCBpcyByZXNwb25zaWJsZSBmb3IgZmluZGluZyBhbmQgbG9hZGluZworUHl0aG9uIG1vZHVsZXMgYW5kIHBhY2thZ2VzIHdob3NlIGxvY2F0aW9uIGlzIHNwZWNpZmllZCB3aXRoIGEgc3RyaW5nCis6dGVybTpgcGF0aCBlbnRyeWAuICBNb3N0IHBhdGggZW50cmllcyBuYW1lIGxvY2F0aW9ucyBpbiB0aGUgZmlsZSBzeXN0ZW0sCitidXQgdGhleSBuZWVkIG5vdCBiZSBsaW1pdGVkIHRvIHRoaXMuCiAKIEFzIGEgbWV0YSBwYXRoIGZpbmRlciwgdGhlIDp0ZXJtOmBwYXRoIGJhc2VkIGZpbmRlcmAgaW1wbGVtZW50cyB0aGUKLTptZXRoOmBmaW5kX21vZHVsZSgpYCBwcm90b2NvbCBwcmV2aW91c2x5IGRlc2NyaWJlZCwgaG93ZXZlciBpdCBleHBvc2VzCi1hZGRpdGlvbmFsIGhvb2tzIHRoYXQgY2FuIGJlIHVzZWQgdG8gY3VzdG9taXplIGhvdyBtb2R1bGVzIGFyZSBmb3VuZCBhbmQKLWxvYWRlZCBmcm9tIHRoZSA6dGVybTpgaW1wb3J0IHBhdGhgLgorOm1ldGg6YH5pbXBvcnRsaWIuYWJjLk1ldGFQYXRoRmluZGVyLmZpbmRfc3BlY2AgcHJvdG9jb2wgcHJldmlvdXNseQorZGVzY3JpYmVkLCBob3dldmVyIGl0IGV4cG9zZXMgYWRkaXRpb25hbCBob29rcyB0aGF0IGNhbiBiZSB1c2VkIHRvCitjdXN0b21pemUgaG93IG1vZHVsZXMgYXJlIGZvdW5kIGFuZCBsb2FkZWQgZnJvbSB0aGUgOnRlcm06YGltcG9ydCBwYXRoYC4KIAogVGhyZWUgdmFyaWFibGVzIGFyZSB1c2VkIGJ5IHRoZSA6dGVybTpgcGF0aCBiYXNlZCBmaW5kZXJgLCA6ZGF0YTpgc3lzLnBhdGhgLAogOmRhdGE6YHN5cy5wYXRoX2hvb2tzYCBhbmQgOmRhdGE6YHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlYC4gIFRoZSBgYF9fcGF0aF9fYGAKQEAgLTU1MSwxNCArNzQyLDE2IEBACiAKIFRoZSA6dGVybTpgcGF0aCBiYXNlZCBmaW5kZXJgIGlzIGEgOnRlcm06YG1ldGEgcGF0aCBmaW5kZXJgLCBzbyB0aGUgaW1wb3J0CiBtYWNoaW5lcnkgYmVnaW5zIHRoZSA6dGVybTpgaW1wb3J0IHBhdGhgIHNlYXJjaCBieSBjYWxsaW5nIHRoZSBwYXRoCi1iYXNlZCBmaW5kZXIncyA6bWV0aDpgZmluZF9tb2R1bGUoKWAgbWV0aG9kIGFzIGRlc2NyaWJlZCBwcmV2aW91c2x5LiAgV2hlbgotdGhlIGBgcGF0aGBgIGFyZ3VtZW50IHRvIDptZXRoOmBmaW5kX21vZHVsZSgpYCBpcyBnaXZlbiwgaXQgd2lsbCBiZSBhCitiYXNlZCBmaW5kZXIncyA6bWV0aDpgfmltcG9ydGxpYi5tYWNoaW5lcnkuUGF0aEZpbmRlci5maW5kX3NwZWNgIG1ldGhvZCBhcworZGVzY3JpYmVkIHByZXZpb3VzbHkuICBXaGVuIHRoZSBgYHBhdGhgYCBhcmd1bWVudCB0bworOm1ldGg6YH5pbXBvcnRsaWIubWFjaGluZXJ5LlBhdGhGaW5kZXIuZmluZF9zcGVjYCBpcyBnaXZlbiwgaXQgd2lsbCBiZSBhCiBsaXN0IG9mIHN0cmluZyBwYXRocyB0byB0cmF2ZXJzZSAtIHR5cGljYWxseSBhIHBhY2thZ2UncyBgYF9fcGF0aF9fYGAKLWF0dHJpYnV0ZSBmb3IgYW4gaW1wb3J0IHdpdGhpbiB0aGF0IHBhY2thZ2UuICBJZiB0aGUgYGBwYXRoYGAgYXJndW1lbnQKLWlzIGBgTm9uZWBgLCB0aGlzIGluZGljYXRlcyBhIHRvcCBsZXZlbCBpbXBvcnQgYW5kIDpkYXRhOmBzeXMucGF0aGAgaXMgdXNlZC4KK2F0dHJpYnV0ZSBmb3IgYW4gaW1wb3J0IHdpdGhpbiB0aGF0IHBhY2thZ2UuICBJZiB0aGUgYGBwYXRoYGAgYXJndW1lbnQgaXMKK2BgTm9uZWBgLCB0aGlzIGluZGljYXRlcyBhIHRvcCBsZXZlbCBpbXBvcnQgYW5kIDpkYXRhOmBzeXMucGF0aGAgaXMgdXNlZC4KIAogVGhlIHBhdGggYmFzZWQgZmluZGVyIGl0ZXJhdGVzIG92ZXIgZXZlcnkgZW50cnkgaW4gdGhlIHNlYXJjaCBwYXRoLCBhbmQKLWZvciBlYWNoIG9mIHRoZXNlLCBsb29rcyBmb3IgYW4gYXBwcm9wcmlhdGUgOnRlcm06YHBhdGggZW50cnkgZmluZGVyYCBmb3IgdGhlCitmb3IgZWFjaCBvZiB0aGVzZSwgbG9va3MgZm9yIGFuIGFwcHJvcHJpYXRlIDp0ZXJtOmBwYXRoIGVudHJ5IGZpbmRlcmAKKyg6Y2xhc3M6YH5pbXBvcnRsaWIuYWJjLlBhdGhFbnRyeUZpbmRlcmApIGZvciB0aGUKIHBhdGggZW50cnkuICBCZWNhdXNlIHRoaXMgY2FuIGJlIGFuIGV4cGVuc2l2ZSBvcGVyYXRpb24gKGUuZy4gdGhlcmUgbWF5IGJlCiBgc3RhdCgpYCBjYWxsIG92ZXJoZWFkcyBmb3IgdGhpcyBzZWFyY2gpLCB0aGUgcGF0aCBiYXNlZCBmaW5kZXIgbWFpbnRhaW5zCiBhIGNhY2hlIG1hcHBpbmcgcGF0aCBlbnRyaWVzIHRvIHBhdGggZW50cnkgZmluZGVycy4gIFRoaXMgY2FjaGUgaXMgbWFpbnRhaW5lZApAQCAtNTc1LDU5ICs3NjgsODIgQEAKIHBhdGggZW50cnkgdG8gYmUgc2VhcmNoZWQuICBUaGlzIGNhbGxhYmxlIG1heSBlaXRoZXIgcmV0dXJuIGEgOnRlcm06YHBhdGgKIGVudHJ5IGZpbmRlcmAgdGhhdCBjYW4gaGFuZGxlIHRoZSBwYXRoIGVudHJ5LCBvciBpdCBtYXkgcmFpc2UKIDpleGM6YEltcG9ydEVycm9yYC4gIEFuIDpleGM6YEltcG9ydEVycm9yYCBpcyB1c2VkIGJ5IHRoZSBwYXRoIGJhc2VkIGZpbmRlciB0bwotc2lnbmFsIHRoYXQgdGhlIGhvb2sgY2Fubm90IGZpbmQgYSA6dGVybTpgcGF0aCBlbnRyeSBmaW5kZXJgIGZvciB0aGF0Ci06dGVybTpgcGF0aCBlbnRyeWAuICBUaGUgZXhjZXB0aW9uIGlzIGlnbm9yZWQgYW5kIDp0ZXJtOmBpbXBvcnQgcGF0aGAKLWl0ZXJhdGlvbiBjb250aW51ZXMuICBUaGUgaG9vayBzaG91bGQgZXhwZWN0IGVpdGhlciBhIHN0cmluZyBvciBieXRlcyBvYmplY3Q7Ci10aGUgZW5jb2Rpbmcgb2YgYnl0ZXMgb2JqZWN0cyBpcyB1cCB0byB0aGUgaG9vayAoZS5nLiBpdCBtYXkgYmUgYSBmaWxlIHN5c3RlbQotZW5jb2RpbmcsIFVURi04LCBvciBzb21ldGhpbmcgZWxzZSksIGFuZCBpZiB0aGUgaG9vayBjYW5ub3QgZGVjb2RlIHRoZQotYXJndW1lbnQsIGl0IHNob3VsZCByYWlzZSA6ZXhjOmBJbXBvcnRFcnJvcmAuCitzaWduYWwgdGhhdCB0aGUgaG9vayBjYW5ub3QgZmluZCBhIDp0ZXJtOmBwYXRoIGVudHJ5IGZpbmRlcmAuCitmb3IgdGhhdCA6dGVybTpgcGF0aCBlbnRyeWAuICBUaGUKK2V4Y2VwdGlvbiBpcyBpZ25vcmVkIGFuZCA6dGVybTpgaW1wb3J0IHBhdGhgIGl0ZXJhdGlvbiBjb250aW51ZXMuICBUaGUgaG9vaworc2hvdWxkIGV4cGVjdCBlaXRoZXIgYSBzdHJpbmcgb3IgYnl0ZXMgb2JqZWN0OyB0aGUgZW5jb2Rpbmcgb2YgYnl0ZXMgb2JqZWN0cworaXMgdXAgdG8gdGhlIGhvb2sgKGUuZy4gaXQgbWF5IGJlIGEgZmlsZSBzeXN0ZW0gZW5jb2RpbmcsIFVURi04LCBvciBzb21ldGhpbmcKK2Vsc2UpLCBhbmQgaWYgdGhlIGhvb2sgY2Fubm90IGRlY29kZSB0aGUgYXJndW1lbnQsIGl0IHNob3VsZCByYWlzZQorOmV4YzpgSW1wb3J0RXJyb3JgLgogCiBJZiA6ZGF0YTpgc3lzLnBhdGhfaG9va3NgIGl0ZXJhdGlvbiBlbmRzIHdpdGggbm8gOnRlcm06YHBhdGggZW50cnkgZmluZGVyYAotYmVpbmcgcmV0dXJuZWQsIHRoZW4gdGhlIHBhdGggYmFzZWQgZmluZGVyJ3MgOm1ldGg6YGZpbmRfbW9kdWxlKClgIG1ldGhvZAotd2lsbCBzdG9yZSBgYE5vbmVgYCBpbiA6ZGF0YTpgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGVgICh0byBpbmRpY2F0ZSB0aGF0Ci10aGVyZSBpcyBubyBmaW5kZXIgZm9yIHRoaXMgcGF0aCBlbnRyeSkgYW5kIHJldHVybiBgYE5vbmVgYCwgaW5kaWNhdGluZyB0aGF0Ci10aGlzIDp0ZXJtOmBtZXRhIHBhdGggZmluZGVyYCBjb3VsZCBub3QgZmluZCB0aGUgbW9kdWxlLgorYmVpbmcgcmV0dXJuZWQsIHRoZW4gdGhlIHBhdGggYmFzZWQgZmluZGVyJ3MKKzptZXRoOmB+aW1wb3J0bGliLm1hY2hpbmVyeS5QYXRoRmluZGVyLmZpbmRfc3BlY2AgbWV0aG9kIHdpbGwgc3RvcmUgYGBOb25lYGAKK2luIDpkYXRhOmBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZWAgKHRvIGluZGljYXRlIHRoYXQgdGhlcmUgaXMgbm8gZmluZGVyIGZvcgordGhpcyBwYXRoIGVudHJ5KSBhbmQgcmV0dXJuIGBgTm9uZWBgLCBpbmRpY2F0aW5nIHRoYXQgdGhpcworOnRlcm06YG1ldGEgcGF0aCBmaW5kZXJgIGNvdWxkIG5vdCBmaW5kIHRoZSBtb2R1bGUuCiAKIElmIGEgOnRlcm06YHBhdGggZW50cnkgZmluZGVyYCAqaXMqIHJldHVybmVkIGJ5IG9uZSBvZiB0aGUgOnRlcm06YHBhdGggZW50cnkKIGhvb2tgIGNhbGxhYmxlcyBvbiA6ZGF0YTpgc3lzLnBhdGhfaG9va3NgLCB0aGVuIHRoZSBmb2xsb3dpbmcgcHJvdG9jb2wgaXMgdXNlZAotdG8gYXNrIHRoZSBmaW5kZXIgZm9yIGEgbW9kdWxlIGxvYWRlciwgd2hpY2ggaXMgdGhlbiB1c2VkIHRvIGxvYWQgdGhlIG1vZHVsZS4KLQordG8gYXNrIHRoZSBmaW5kZXIgZm9yIGEgbW9kdWxlIHNwZWMsIHdoaWNoIGlzIHRoZW4gdXNlZCB3aGVuIGxvYWRpbmcgdGhlCittb2R1bGUuCiAKIFBhdGggZW50cnkgZmluZGVyIHByb3RvY29sCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBJbiBvcmRlciB0byBzdXBwb3J0IGltcG9ydHMgb2YgbW9kdWxlcyBhbmQgaW5pdGlhbGl6ZWQgcGFja2FnZXMgYW5kIGFsc28gdG8KIGNvbnRyaWJ1dGUgcG9ydGlvbnMgdG8gbmFtZXNwYWNlIHBhY2thZ2VzLCBwYXRoIGVudHJ5IGZpbmRlcnMgbXVzdCBpbXBsZW1lbnQKLXRoZSA6bWV0aDpgZmluZF9sb2FkZXIoKWAgbWV0aG9kLgordGhlIDptZXRoOmB+aW1wb3J0bGliLmFiYy5QYXRoRW50cnlGaW5kZXIuZmluZF9zcGVjYCBtZXRob2QuCiAKLTptZXRoOmBmaW5kX2xvYWRlcigpYCB0YWtlcyBvbmUgYXJndW1lbnQsIHRoZSBmdWxseSBxdWFsaWZpZWQgbmFtZSBvZiB0aGUKLW1vZHVsZSBiZWluZyBpbXBvcnRlZC4gIDptZXRoOmBmaW5kX2xvYWRlcigpYCByZXR1cm5zIGEgMi10dXBsZSB3aGVyZSB0aGUKLWZpcnN0IGl0ZW0gaXMgdGhlIGxvYWRlciBhbmQgdGhlIHNlY29uZCBpdGVtIGlzIGEgbmFtZXNwYWNlIDp0ZXJtOmBwb3J0aW9uYC4KLVdoZW4gdGhlIGZpcnN0IGl0ZW0gKGkuZS4gdGhlIGxvYWRlcikgaXMgYGBOb25lYGAsIHRoaXMgbWVhbnMgdGhhdCB3aGlsZSB0aGUKLXBhdGggZW50cnkgZmluZGVyIGRvZXMgbm90IGhhdmUgYSBsb2FkZXIgZm9yIHRoZSBuYW1lZCBtb2R1bGUsIGl0IGtub3dzIHRoYXQgdGhlCi1wYXRoIGVudHJ5IGNvbnRyaWJ1dGVzIHRvIGEgbmFtZXNwYWNlIHBvcnRpb24gZm9yIHRoZSBuYW1lZCBtb2R1bGUuICBUaGlzIHdpbGwKLWFsbW9zdCBhbHdheXMgYmUgdGhlIGNhc2Ugd2hlcmUgUHl0aG9uIGlzIGFza2VkIHRvIGltcG9ydCBhIG5hbWVzcGFjZSBwYWNrYWdlCi10aGF0IGhhcyBubyBwaHlzaWNhbCBwcmVzZW5jZSBvbiB0aGUgZmlsZSBzeXN0ZW0uICBXaGVuIGEgcGF0aCBlbnRyeSBmaW5kZXIKLXJldHVybnMgYGBOb25lYGAgZm9yIHRoZSBsb2FkZXIsIHRoZSBzZWNvbmQgaXRlbSBvZiB0aGUgMi10dXBsZSByZXR1cm4gdmFsdWUKLW11c3QgYmUgYSBzZXF1ZW5jZSwgYWx0aG91Z2ggaXQgY2FuIGJlIGVtcHR5LgorOm1ldGg6YH5pbXBvcnRsaWIuYWJjLlBhdGhFbnRyeUZpbmRlci5maW5kX3NwZWNgIHRha2VzIHR3byBhcmd1bWVudCwgdGhlCitmdWxseSBxdWFsaWZpZWQgbmFtZSBvZiB0aGUgbW9kdWxlIGJlaW5nIGltcG9ydGVkLCBhbmQgdGhlIChvcHRpb25hbCkgdGFyZ2V0Cittb2R1bGUuICBgYGZpbmRfc3BlYygpYGAgcmV0dXJucyBhIGZ1bGx5IHBvcHVsYXRlZCBzcGVjIGZvciB0aGUgbW9kdWxlLgorVGhpcyBzcGVjIHdpbGwgYWx3YXlzIGhhdmUgImxvYWRlciIgc2V0ICh3aXRoIG9uZSBleGNlcHRpb24pLgogCi1JZiA6bWV0aDpgZmluZF9sb2FkZXIoKWAgcmV0dXJucyBhIG5vbi1gYE5vbmVgYCBsb2FkZXIgdmFsdWUsIHRoZSBwb3J0aW9uIGlzCi1pZ25vcmVkIGFuZCB0aGUgbG9hZGVyIGlzIHJldHVybmVkIGZyb20gdGhlIHBhdGggYmFzZWQgZmluZGVyLCB0ZXJtaW5hdGluZwotdGhlIHNlYXJjaCB0aHJvdWdoIHRoZSBwYXRoIGVudHJpZXMuCitUbyBpbmRpY2F0ZSB0byB0aGUgaW1wb3J0IG1hY2hpbmVyeSB0aGF0IHRoZSBzcGVjIHJlcHJlc2VudHMgYSBuYW1lc3BhY2UKKzp0ZXJtOmBwb3J0aW9uYC4gdGhlIHBhdGggZW50cnkgZmluZGVyIHNldHMgImxvYWRlciIgb24gdGhlIHNwZWMgdG8KK2BgTm9uZWBgIGFuZCAic3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMiIHRvIGEgbGlzdCBjb250YWluaW5nIHRoZQorcG9ydGlvbi4KIAotRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggb3RoZXIgaW1wbGVtZW50YXRpb25zIG9mIHRoZSBpbXBvcnQKLXByb3RvY29sLCBtYW55IHBhdGggZW50cnkgZmluZGVycyBhbHNvIHN1cHBvcnQgdGhlIHNhbWUsCi10cmFkaXRpb25hbCA6bWV0aDpgZmluZF9tb2R1bGUoKWAgbWV0aG9kIHRoYXQgbWV0YSBwYXRoIGZpbmRlcnMgc3VwcG9ydC4KLUhvd2V2ZXIgcGF0aCBlbnRyeSBmaW5kZXIgOm1ldGg6YGZpbmRfbW9kdWxlKClgIG1ldGhvZHMgYXJlIG5ldmVyIGNhbGxlZAotd2l0aCBhIGBgcGF0aGBgIGFyZ3VtZW50ICh0aGV5IGFyZSBleHBlY3RlZCB0byByZWNvcmQgdGhlIGFwcHJvcHJpYXRlCi1wYXRoIGluZm9ybWF0aW9uIGZyb20gdGhlIGluaXRpYWwgY2FsbCB0byB0aGUgcGF0aCBob29rKS4KKy4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICA6bWV0aDpgfmltcG9ydGxpYi5hYmMuUGF0aEVudHJ5RmluZGVyLmZpbmRfc3BlY2AgcmVwbGFjZWQKKyAgIDptZXRoOmB+aW1wb3J0bGliLmFiYy5QYXRoRW50cnlGaW5kZXIuZmluZF9sb2FkZXJgIGFuZAorICAgOm1ldGg6YH5pbXBvcnRsaWIuYWJjLlBhdGhFbnRyeUZpbmRlci5maW5kX21vZHVsZWAsIGJvdGggb2Ygd2hpY2gKKyAgIGFyZSBub3cgZGVwcmVjYXRlZCwgYnV0IHdpbGwgYmUgdXNlZCBpZiBgYGZpbmRfc3BlYygpYGAgaXMgbm90IGRlZmluZWQuCiAKLVRoZSA6bWV0aDpgZmluZF9tb2R1bGUoKWAgbWV0aG9kIG9uIHBhdGggZW50cnkgZmluZGVycyBpcyBkZXByZWNhdGVkLAotYXMgaXQgZG9lcyBub3QgYWxsb3cgdGhlIHBhdGggZW50cnkgZmluZGVyIHRvIGNvbnRyaWJ1dGUgcG9ydGlvbnMgdG8KLW5hbWVzcGFjZSBwYWNrYWdlcy4gSW5zdGVhZCBwYXRoIGVudHJ5IGZpbmRlcnMgc2hvdWxkIGltcGxlbWVudCB0aGUKLTptZXRoOmBmaW5kX2xvYWRlcigpYCBtZXRob2QgYXMgZGVzY3JpYmVkIGFib3ZlLiBJZiBpdCBleGlzdHMgb24gdGhlIHBhdGgKLWVudHJ5IGZpbmRlciwgdGhlIGltcG9ydCBzeXN0ZW0gd2lsbCBhbHdheXMgY2FsbCA6bWV0aDpgZmluZF9sb2FkZXIoKWAKLWluIHByZWZlcmVuY2UgdG8gOm1ldGg6YGZpbmRfbW9kdWxlKClgLgorICAgT2xkZXIgcGF0aCBlbnRyeSBmaW5kZXJzIG1heSBpbXBsZW1lbnQgb25lIG9mIHRoZXNlIHR3byBkZXByZWNhdGVkIG1ldGhvZHMKKyAgIGluc3RlYWQgb2YgYGBmaW5kX3NwZWMoKWBgLiAgVGhlIG1ldGhvZHMgYXJlIHN0aWxsIHJlc3BlY3RlZCBmb3IgdGhlCisgICBzYWtlIG9mIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuICBIb3dldmV2ZXIsIGlmIGBgZmluZF9zcGVjKClgYCBpcworICAgaW1wbGVtZW50ZWQgb24gdGhlIHBhdGggZW50cnkgZmluZGVyLCB0aGUgbGVnYWN5IG1ldGhvZHMgYXJlIGlnbm9yZWQuCisKKyAgIDptZXRoOmB+aW1wb3J0bGliLmFiYy5QYXRoRW50cnlGaW5kZXIuZmluZF9sb2FkZXJgIHRha2VzIG9uZSBhcmd1bWVudCwgdGhlCisgICBmdWxseSBxdWFsaWZpZWQgbmFtZSBvZiB0aGUgbW9kdWxlIGJlaW5nIGltcG9ydGVkLiAgYGBmaW5kX2xvYWRlcigpYGAKKyAgIHJldHVybnMgYSAyLXR1cGxlIHdoZXJlIHRoZSBmaXJzdCBpdGVtIGlzIHRoZSBsb2FkZXIgYW5kIHRoZSBzZWNvbmQgaXRlbQorICAgaXMgYSBuYW1lc3BhY2UgOnRlcm06YHBvcnRpb25gLiAgV2hlbiB0aGUgZmlyc3QgaXRlbSAoaS5lLiB0aGUgbG9hZGVyKSBpcworICAgYGBOb25lYGAsIHRoaXMgbWVhbnMgdGhhdCB3aGlsZSB0aGUgcGF0aCBlbnRyeSBmaW5kZXIgZG9lcyBub3QgaGF2ZSBhCisgICBsb2FkZXIgZm9yIHRoZSBuYW1lZCBtb2R1bGUsIGl0IGtub3dzIHRoYXQgdGhlIHBhdGggZW50cnkgY29udHJpYnV0ZXMgdG8KKyAgIGEgbmFtZXNwYWNlIHBvcnRpb24gZm9yIHRoZSBuYW1lZCBtb2R1bGUuICBUaGlzIHdpbGwgYWxtb3N0IGFsd2F5cyBiZSB0aGUKKyAgIGNhc2Ugd2hlcmUgUHl0aG9uIGlzIGFza2VkIHRvIGltcG9ydCBhIG5hbWVzcGFjZSBwYWNrYWdlIHRoYXQgaGFzIG5vCisgICBwaHlzaWNhbCBwcmVzZW5jZSBvbiB0aGUgZmlsZSBzeXN0ZW0uICBXaGVuIGEgcGF0aCBlbnRyeSBmaW5kZXIgcmV0dXJucworICAgYGBOb25lYGAgZm9yIHRoZSBsb2FkZXIsIHRoZSBzZWNvbmQgaXRlbSBvZiB0aGUgMi10dXBsZSByZXR1cm4gdmFsdWUgbXVzdAorICAgYmUgYSBzZXF1ZW5jZSwgYWx0aG91Z2ggaXQgY2FuIGJlIGVtcHR5LgorCisgICBJZiBgYGZpbmRfbG9hZGVyKClgYCByZXR1cm5zIGEgbm9uLWBgTm9uZWBgIGxvYWRlciB2YWx1ZSwgdGhlIHBvcnRpb24gaXMKKyAgIGlnbm9yZWQgYW5kIHRoZSBsb2FkZXIgaXMgcmV0dXJuZWQgZnJvbSB0aGUgcGF0aCBiYXNlZCBmaW5kZXIsIHRlcm1pbmF0aW5nCisgICB0aGUgc2VhcmNoIHRocm91Z2ggdGhlIHBhdGggZW50cmllcy4KKworICAgRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggb3RoZXIgaW1wbGVtZW50YXRpb25zIG9mIHRoZSBpbXBvcnQKKyAgIHByb3RvY29sLCBtYW55IHBhdGggZW50cnkgZmluZGVycyBhbHNvIHN1cHBvcnQgdGhlIHNhbWUsCisgICB0cmFkaXRpb25hbCBgYGZpbmRfbW9kdWxlKClgYCBtZXRob2QgdGhhdCBtZXRhIHBhdGggZmluZGVycyBzdXBwb3J0LgorICAgSG93ZXZlciBwYXRoIGVudHJ5IGZpbmRlciBgYGZpbmRfbW9kdWxlKClgYCBtZXRob2RzIGFyZSBuZXZlciBjYWxsZWQKKyAgIHdpdGggYSBgYHBhdGhgYCBhcmd1bWVudCAodGhleSBhcmUgZXhwZWN0ZWQgdG8gcmVjb3JkIHRoZSBhcHByb3ByaWF0ZQorICAgcGF0aCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBpbml0aWFsIGNhbGwgdG8gdGhlIHBhdGggaG9vaykuCisKKyAgIFRoZSBgYGZpbmRfbW9kdWxlKClgYCBtZXRob2Qgb24gcGF0aCBlbnRyeSBmaW5kZXJzIGlzIGRlcHJlY2F0ZWQsCisgICBhcyBpdCBkb2VzIG5vdCBhbGxvdyB0aGUgcGF0aCBlbnRyeSBmaW5kZXIgdG8gY29udHJpYnV0ZSBwb3J0aW9ucyB0bworICAgbmFtZXNwYWNlIHBhY2thZ2VzLiAgSWYgYm90aCBgYGZpbmRfbG9hZGVyKClgYCBhbmQgYGBmaW5kX21vZHVsZSgpYGAKKyAgIGV4aXN0IG9uIGEgcGF0aCBlbnRyeSBmaW5kZXIsIHRoZSBpbXBvcnQgc3lzdGVtIHdpbGwgYWx3YXlzIGNhbGwKKyAgIGBgZmluZF9sb2FkZXIoKWBgIGluIHByZWZlcmVuY2UgdG8gYGBmaW5kX21vZHVsZSgpYGAuCiAKIAogUmVwbGFjaW5nIHRoZSBzdGFuZGFyZCBpbXBvcnQgc3lzdGVtCkBAIC02NDYsOSArODYyLDU0IEBACiBUbyBzZWxlY3RpdmVseSBwcmV2ZW50IGltcG9ydCBvZiBzb21lIG1vZHVsZXMgZnJvbSBhIGhvb2sgZWFybHkgb24gdGhlCiBtZXRhIHBhdGggKHJhdGhlciB0aGFuIGRpc2FibGluZyB0aGUgc3RhbmRhcmQgaW1wb3J0IHN5c3RlbSBlbnRpcmVseSksCiBpdCBpcyBzdWZmaWNpZW50IHRvIHJhaXNlIDpleGM6YEltcG9ydEVycm9yYCBkaXJlY3RseSBmcm9tCi06bWV0aDpgZmluZF9tb2R1bGVgIGluc3RlYWQgb2YgcmV0dXJuaW5nIGBgTm9uZWBgLiBUaGUgbGF0dGVyIGluZGljYXRlcwotdGhhdCB0aGUgbWV0YSBwYXRoIHNlYXJjaCBzaG91bGQgY29udGludWUuIHdoaWxlIHJhaXNpbmcgYW4gZXhjZXB0aW9uCi10ZXJtaW5hdGVzIGl0IGltbWVkaWF0ZWx5LgorOm1ldGg6YH5pbXBvcnRsaWIuYWJjLk1ldGFQYXRoRmluZGVyLmZpbmRfc3BlY2AgaW5zdGVhZCBvZiByZXR1cm5pbmcKK2BgTm9uZWBgLiBUaGUgbGF0dGVyIGluZGljYXRlcyB0aGF0IHRoZSBtZXRhIHBhdGggc2VhcmNoIHNob3VsZCBjb250aW51ZSwKK3doaWxlIHJhaXNpbmcgYW4gZXhjZXB0aW9uIHRlcm1pbmF0ZXMgaXQgaW1tZWRpYXRlbHkuCisKKworU3BlY2lhbCBjb25zaWRlcmF0aW9ucyBmb3IgX19tYWluX18KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSA6bW9kOmBfX21haW5fX2AgbW9kdWxlIGlzIGEgc3BlY2lhbCBjYXNlIHJlbGF0aXZlIHRvIFB5dGhvbidzIGltcG9ydAorc3lzdGVtLiAgQXMgbm90ZWQgOnJlZjpgZWxzZXdoZXJlIDxwcm9ncmFtcz5gLCB0aGUgYGBfX21haW5fX2BgIG1vZHVsZQoraXMgZGlyZWN0bHkgaW5pdGlhbGl6ZWQgYXQgaW50ZXJwcmV0ZXIgc3RhcnR1cCwgbXVjaCBsaWtlIDptb2Q6YHN5c2AgYW5kCis6bW9kOmBidWlsdGluc2AuICBIb3dldmVyLCB1bmxpa2UgdGhvc2UgdHdvLCBpdCBkb2Vzbid0IHN0cmljdGx5CitxdWFsaWZ5IGFzIGEgYnVpbHQtaW4gbW9kdWxlLiAgVGhpcyBpcyBiZWNhdXNlIHRoZSBtYW5uZXIgaW4gd2hpY2gKK2BgX19tYWluX19gYCBpcyBpbml0aWFsaXplZCBkZXBlbmRzIG9uIHRoZSBmbGFncyBhbmQgb3RoZXIgb3B0aW9ucyB3aXRoCit3aGljaCB0aGUgaW50ZXJwcmV0ZXIgaXMgaW52b2tlZC4KKworLi4gX21haW5fc3BlYzoKKworX19tYWluX18uX19zcGVjX18KKy0tLS0tLS0tLS0tLS0tLS0tCisKK0RlcGVuZGluZyBvbiBob3cgOm1vZDpgX19tYWluX19gIGlzIGluaXRpYWxpemVkLCBgYF9fbWFpbl9fLl9fc3BlY19fYGAKK2dldHMgc2V0IGFwcHJvcHJpYXRlbHkgb3IgdG8gYGBOb25lYGAuCisKK1doZW4gUHl0aG9uIGlzIHN0YXJ0ZWQgd2l0aCB0aGUgOm9wdGlvbjpgLW1gIG9wdGlvbiwgYGBfX3NwZWNfX2BgIGlzIHNldAordG8gdGhlIG1vZHVsZSBzcGVjIG9mIHRoZSBjb3JyZXNwb25kaW5nIG1vZHVsZSBvciBwYWNrYWdlLiBgYF9fc3BlY19fYGAgaXMKK2Fsc28gcG9wdWxhdGVkIHdoZW4gdGhlIGBgX19tYWluX19gYCBtb2R1bGUgaXMgbG9hZGVkIGFzIHBhcnQgb2YgZXhlY3V0aW5nIGEKK2RpcmVjdG9yeSwgemlwZmlsZSBvciBvdGhlciA6ZGF0YTpgc3lzLnBhdGhgIGVudHJ5LgorCitJbiA6cmVmOmB0aGUgcmVtYWluaW5nIGNhc2VzIDx1c2luZy1vbi1pbnRlcmZhY2Utb3B0aW9ucz5gCitgYF9fbWFpbl9fLl9fc3BlY19fYGAgaXMgc2V0IHRvIGBgTm9uZWBgLCBhcyB0aGUgY29kZSB1c2VkIHRvIHBvcHVsYXRlIHRoZQorOm1vZDpgX19tYWluX19gIGRvZXMgbm90IGNvcnJlc3BvbmQgZGlyZWN0bHkgd2l0aCBhbiBpbXBvcnRhYmxlIG1vZHVsZToKKworLSBpbnRlcmFjdGl2ZSBwcm9tcHQKKy0gLWMgc3dpdGNoCistIHJ1bm5pbmcgZnJvbSBzdGRpbgorLSBydW5uaW5nIGRpcmVjdGx5IGZyb20gYSBzb3VyY2Ugb3IgYnl0ZWNvZGUgZmlsZQorCitOb3RlIHRoYXQgYGBfX21haW5fXy5fX3NwZWNfX2BgIGlzIGFsd2F5cyBgYE5vbmVgYCBpbiB0aGUgbGFzdCBjYXNlLAorKmV2ZW4gaWYqIHRoZSBmaWxlIGNvdWxkIHRlY2huaWNhbGx5IGJlIGltcG9ydGVkIGRpcmVjdGx5IGFzIGEgbW9kdWxlCitpbnN0ZWFkLiBVc2UgdGhlIDpvcHRpb246YC1tYCBzd2l0Y2ggaWYgdmFsaWQgbW9kdWxlIG1ldGFkYXRhIGlzIGRlc2lyZWQKK2luIDptb2Q6YF9fbWFpbl9fYC4KKworTm90ZSBhbHNvIHRoYXQgZXZlbiB3aGVuIGBgX19tYWluX19gYCBjb3JyZXNwb25kcyB3aXRoIGFuIGltcG9ydGFibGUgbW9kdWxlCithbmQgYGBfX21haW5fXy5fX3NwZWNfX2BgIGlzIHNldCBhY2NvcmRpbmdseSwgdGhleSdyZSBzdGlsbCBjb25zaWRlcmVkCisqZGlzdGluY3QqIG1vZHVsZXMuIFRoaXMgaXMgZHVlIHRvIHRoZSBmYWN0IHRoYXQgYmxvY2tzIGd1YXJkZWQgYnkKK2BgaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjpgYCBjaGVja3Mgb25seSBleGVjdXRlIHdoZW4gdGhlIG1vZHVsZSBpcyB1c2VkCit0byBwb3B1bGF0ZSB0aGUgYGBfX21haW5fX2BgIG5hbWVzcGFjZSwgYW5kIG5vdCBkdXJpbmcgbm9ybWFsIGltcG9ydC4KIAogCiBPcGVuIGlzc3VlcwpAQCAtNjYzLDEzICs5MjQsMTkgQEAKIFhYWCBydW5weSwgcGtndXRpbCwgZXQgYWwgaW4gdGhlIGxpYnJhcnkgbWFudWFsIHNob3VsZCBhbGwgZ2V0ICJTZWUgQWxzbyIKIGxpbmtzIGF0IHRoZSB0b3AgcG9pbnRpbmcgdG8gdGhlIG5ldyBpbXBvcnQgc3lzdGVtIHNlY3Rpb24uCiAKK1hYWCBBZGQgbW9yZSBleHBsYW5hdGlvbiByZWdhcmRpbmcgdGhlIGRpZmZlcmVudCB3YXlzIGluIHdoaWNoCitgYF9fbWFpbl9fYGAgaXMgaW5pdGlhbGl6ZWQ/CisKK1hYWCBBZGQgbW9yZSBpbmZvIG9uIGBgX19tYWluX19gYCBxdWlya3MvcGl0ZmFsbHMgKGkuZS4gY29weSBmcm9tCis6cGVwOmAzOTVgKS4KKwogCiBSZWZlcmVuY2VzCiA9PT09PT09PT09CiAKIFRoZSBpbXBvcnQgbWFjaGluZXJ5IGhhcyBldm9sdmVkIGNvbnNpZGVyYWJseSBzaW5jZSBQeXRob24ncyBlYXJseSBkYXlzLiAgVGhlCiBvcmlnaW5hbCBgc3BlY2lmaWNhdGlvbiBmb3IgcGFja2FnZXMKLTxodHRwOi8vd3d3LnB5dGhvbi5vcmcvZG9jL2Vzc2F5cy9wYWNrYWdlcy5odG1sPmBfIGlzIHN0aWxsIGF2YWlsYWJsZSB0byByZWFkLAorPGh0dHA6Ly9sZWdhY3kucHl0aG9uLm9yZy9kb2MvZXNzYXlzL3BhY2thZ2VzLmh0bWw+YF8gaXMgc3RpbGwgYXZhaWxhYmxlIHRvIHJlYWQsCiBhbHRob3VnaCBzb21lIGRldGFpbHMgaGF2ZSBjaGFuZ2VkIHNpbmNlIHRoZSB3cml0aW5nIG9mIHRoYXQgZG9jdW1lbnQuCiAKIFRoZSBvcmlnaW5hbCBzcGVjaWZpY2F0aW9uIGZvciA6ZGF0YTpgc3lzLm1ldGFfcGF0aGAgd2FzIDpwZXA6YDMwMmAsIHdpdGgKQEAgLTY4OCw2ICs5NTUsMTEgQEAKIAogOnBlcDpgMzM4YCBkZWZpbmVzIGV4ZWN1dGluZyBtb2R1bGVzIGFzIHNjcmlwdHMuCiAKKzpwZXA6YDQ1MWAgYWRkcyB0aGUgZW5jYXBzdWxhdGlvbiBvZiBwZXItbW9kdWxlIGltcG9ydCBzdGF0ZSBpbiBzcGVjCitvYmplY3RzLiAgSXQgYWxzbyBvZmYtbG9hZHMgbW9zdCBvZiB0aGUgYm9pbGVycGxhdGUgcmVzcG9uc2liaWxpdGllcyBvZgorbG9hZGVycyBiYWNrIG9udG8gdGhlIGltcG9ydCBtYWNoaW5lcnkuICBUaGVzZSBjaGFuZ2VzIGFsbG93IHRoZQorZGVwcmVjYXRpb24gb2Ygc2V2ZXJhbCBBUElzIGluIHRoZSBpbXBvcnQgc3lzdGVtIGFuZCBhbHNvIGFkZGl0aW9uIG9mIG5ldworbWV0aG9kcyB0byBmaW5kZXJzIGFuZCBsb2FkZXJzLgogCiAuLiBydWJyaWM6OiBGb290bm90ZXMKIApkaWZmIC0tZ2l0IGEvRG9jL3JlZmVyZW5jZS9pbnRyb2R1Y3Rpb24ucnN0IGIvRG9jL3JlZmVyZW5jZS9pbnRyb2R1Y3Rpb24ucnN0CmluZGV4IDBhYzU3OTQuLjU2MzNhZTMgMTAwNjQ0Ci0tLSBhL0RvYy9yZWZlcmVuY2UvaW50cm9kdWN0aW9uLnJzdAorKysgYi9Eb2MvcmVmZXJlbmNlL2ludHJvZHVjdGlvbi5yc3QKQEAgLTY2LDcgKzY2LDcgQEAKICAgIEFuIGFsdGVybmF0ZSBQeXRob24gZm9yIC5ORVQuICBVbmxpa2UgUHl0aG9uLk5FVCwgdGhpcyBpcyBhIGNvbXBsZXRlIFB5dGhvbgogICAgaW1wbGVtZW50YXRpb24gdGhhdCBnZW5lcmF0ZXMgSUwsIGFuZCBjb21waWxlcyBQeXRob24gY29kZSBkaXJlY3RseSB0byAuTkVUCiAgICBhc3NlbWJsaWVzLiAgSXQgd2FzIGNyZWF0ZWQgYnkgSmltIEh1Z3VuaW4sIHRoZSBvcmlnaW5hbCBjcmVhdG9yIG9mIEp5dGhvbi4gIEZvcgotICAgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIGB0aGUgSXJvblB5dGhvbiB3ZWJzaXRlIDxodHRwOi8vd3d3Lmlyb25weXRob24ubmV0Lz5gXy4KKyAgIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBgdGhlIElyb25QeXRob24gd2Vic2l0ZSA8aHR0cDovL2lyb25weXRob24ubmV0Lz5gXy4KIAogUHlQeQogICAgQW4gaW1wbGVtZW50YXRpb24gb2YgUHl0aG9uIHdyaXR0ZW4gY29tcGxldGVseSBpbiBQeXRob24uIEl0IHN1cHBvcnRzIHNldmVyYWwKZGlmZiAtLWdpdCBhL0RvYy9yZWZlcmVuY2UvbGV4aWNhbF9hbmFseXNpcy5yc3QgYi9Eb2MvcmVmZXJlbmNlL2xleGljYWxfYW5hbHlzaXMucnN0CmluZGV4IDBlZDNkM2IuLmExMjY1Y2YgMTAwNjQ0Ci0tLSBhL0RvYy9yZWZlcmVuY2UvbGV4aWNhbF9hbmFseXNpcy5yc3QKKysrIGIvRG9jL3JlZmVyZW5jZS9sZXhpY2FsX2FuYWx5c2lzLnJzdApAQCAtNzYsMTIgKzc2LDE0IEBACiBFbmNvZGluZyBkZWNsYXJhdGlvbnMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0uLiBpbmRleDo6IHNvdXJjZSBjaGFyYWN0ZXIgc2V0LCBlbmNvZGluZ3MKKy4uIGluZGV4Ojogc291cmNlIGNoYXJhY3RlciBzZXQsIGVuY29kaW5nIGRlY2xhcmF0aW9ucyAoc291cmNlIGZpbGUpCiAKIElmIGEgY29tbWVudCBpbiB0aGUgZmlyc3Qgb3Igc2Vjb25kIGxpbmUgb2YgdGhlIFB5dGhvbiBzY3JpcHQgbWF0Y2hlcyB0aGUKIHJlZ3VsYXIgZXhwcmVzc2lvbiBgYGNvZGluZ1s9Ol1ccyooWy1cdy5dKylgYCwgdGhpcyBjb21tZW50IGlzIHByb2Nlc3NlZCBhcyBhbgogZW5jb2RpbmcgZGVjbGFyYXRpb247IHRoZSBmaXJzdCBncm91cCBvZiB0aGlzIGV4cHJlc3Npb24gbmFtZXMgdGhlIGVuY29kaW5nIG9mCi10aGUgc291cmNlIGNvZGUgZmlsZS4gVGhlIHJlY29tbWVuZGVkIGZvcm1zIG9mIHRoaXMgZXhwcmVzc2lvbiBhcmUgOjoKK3RoZSBzb3VyY2UgY29kZSBmaWxlLiBUaGUgZW5jb2RpbmcgZGVjbGFyYXRpb24gbXVzdCBhcHBlYXIgb24gYSBsaW5lIG9mIGl0cworb3duLiBJZiBpdCBpcyB0aGUgc2Vjb25kIGxpbmUsIHRoZSBmaXJzdCBsaW5lIG11c3QgYWxzbyBiZSBhIGNvbW1lbnQtb25seSBsaW5lLgorVGhlIHJlY29tbWVuZGVkIGZvcm1zIG9mIGFuIGVuY29kaW5nIGV4cHJlc3Npb24gYXJlIDo6CiAKICAgICMgLSotIGNvZGluZzogPGVuY29kaW5nLW5hbWU+IC0qLQogCkBAIC05OCw3ICsxMDAsNyBAQAogCiBJZiBhbiBlbmNvZGluZyBpcyBkZWNsYXJlZCwgdGhlIGVuY29kaW5nIG5hbWUgbXVzdCBiZSByZWNvZ25pemVkIGJ5IFB5dGhvbi4gVGhlCiBlbmNvZGluZyBpcyB1c2VkIGZvciBhbGwgbGV4aWNhbCBhbmFseXNpcywgaW5jbHVkaW5nIHN0cmluZyBsaXRlcmFscywgY29tbWVudHMKLWFuZCBpZGVudGlmaWVycy4gVGhlIGVuY29kaW5nIGRlY2xhcmF0aW9uIG11c3QgYXBwZWFyIG9uIGEgbGluZSBvZiBpdHMgb3duLgorYW5kIGlkZW50aWZpZXJzLgogCiAuLiBYWFggdGhlcmUgc2hvdWxkIGJlIGEgbGlzdCBvZiBzdXBwb3J0ZWQgZW5jb2RpbmdzLgogCkBAIC0zMTAsNyArMzEyLDkgQEAKICogKk1jKiAtIHNwYWNpbmcgY29tYmluaW5nIG1hcmtzCiAqICpOZCogLSBkZWNpbWFsIG51bWJlcnMKICogKlBjKiAtIGNvbm5lY3RvciBwdW5jdHVhdGlvbnMKLSogKk90aGVyX0lEX1N0YXJ0KiAtIGV4cGxpY2l0IGxpc3Qgb2YgY2hhcmFjdGVycyBpbiBgUHJvcExpc3QudHh0IDxodHRwOi8vdW5pY29kZS5vcmcvUHVibGljL1VOSURBVEEvUHJvcExpc3QudHh0PmBfIHRvIHN1cHBvcnQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkKKyogKk90aGVyX0lEX1N0YXJ0KiAtIGV4cGxpY2l0IGxpc3Qgb2YgY2hhcmFjdGVycyBpbiBgUHJvcExpc3QudHh0CisgIDxodHRwOi8vd3d3LnVuaWNvZGUub3JnL1B1YmxpYy82LjMuMC91Y2QvUHJvcExpc3QudHh0PmBfIHRvIHN1cHBvcnQgYmFja3dhcmRzCisgIGNvbXBhdGliaWxpdHkKICogKk90aGVyX0lEX0NvbnRpbnVlKiAtIGxpa2V3aXNlCiAKIEFsbCBpZGVudGlmaWVycyBhcmUgY29udmVydGVkIGludG8gdGhlIG5vcm1hbCBmb3JtIE5GS0Mgd2hpbGUgcGFyc2luZzsgY29tcGFyaXNvbgpAQCAtNDQxLDcgKzQ0NSw3IEBACiBtYXkgb25seSBjb250YWluIEFTQ0lJIGNoYXJhY3RlcnM7IGJ5dGVzIHdpdGggYSBudW1lcmljIHZhbHVlIG9mIDEyOCBvciBncmVhdGVyCiBtdXN0IGJlIGV4cHJlc3NlZCB3aXRoIGVzY2FwZXMuCiAKLUFzIG9mIFB5dGhvbiAzLjMgaXQgaXMgcG9zc2libGUgYWdhaW4gdG8gcHJlZml4IHVuaWNvZGUgc3RyaW5ncyB3aXRoIGEKK0FzIG9mIFB5dGhvbiAzLjMgaXQgaXMgcG9zc2libGUgYWdhaW4gdG8gcHJlZml4IHN0cmluZyBsaXRlcmFscyB3aXRoIGEKIGBgdWBgIHByZWZpeCB0byBzaW1wbGlmeSBtYWludGVuYW5jZSBvZiBkdWFsIDIueCBhbmQgMy54IGNvZGViYXNlcy4KIAogQm90aCBzdHJpbmcgYW5kIGJ5dGVzIGxpdGVyYWxzIG1heSBvcHRpb25hbGx5IGJlIHByZWZpeGVkIHdpdGggYSBsZXR0ZXIgYGAncidgYApAQCAtNDUxLDI0ICs0NTUsMjQgQEAKIHVuaWNvZGUgbGl0ZXJhbHMgYmVoYXZlIGRpZmZlcmVudGx5IHRoYW4gUHl0aG9uIDMueCdzIHRoZSBgYCd1cidgYCBzeW50YXgKIGlzIG5vdCBzdXBwb3J0ZWQuCiAKLSAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMwotICAgICAgVGhlIGBgJ3JiJ2BgIHByZWZpeCBvZiByYXcgYnl0ZXMgbGl0ZXJhbHMgaGFzIGJlZW4gYWRkZWQgYXMgYSBzeW5vbnltCi0gICAgICBvZiBgYCdicidgYC4KKy4uIHZlcnNpb25hZGRlZDo6IDMuMworICAgVGhlIGBgJ3JiJ2BgIHByZWZpeCBvZiByYXcgYnl0ZXMgbGl0ZXJhbHMgaGFzIGJlZW4gYWRkZWQgYXMgYSBzeW5vbnltCisgICBvZiBgYCdicidgYC4KIAotICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCi0gICAgICBTdXBwb3J0IGZvciB0aGUgdW5pY29kZSBsZWdhY3kgbGl0ZXJhbCAoYGB1J3ZhbHVlJ2BgKSB3YXMgcmVpbnRyb2R1Y2VkCi0gICAgICB0byBzaW1wbGlmeSB0aGUgbWFpbnRlbmFuY2Ugb2YgZHVhbCBQeXRob24gMi54IGFuZCAzLnggY29kZWJhc2VzLgotICAgICAgU2VlIDpwZXA6YDQxNGAgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKKyAgIFN1cHBvcnQgZm9yIHRoZSB1bmljb2RlIGxlZ2FjeSBsaXRlcmFsIChgYHUndmFsdWUnYGApIHdhcyByZWludHJvZHVjZWQKKyAgIHRvIHNpbXBsaWZ5IHRoZSBtYWludGVuYW5jZSBvZiBkdWFsIFB5dGhvbiAyLnggYW5kIDMueCBjb2RlYmFzZXMuCisgICBTZWUgOnBlcDpgNDE0YCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KIAotSW4gdHJpcGxlLXF1b3RlZCBzdHJpbmdzLCB1bmVzY2FwZWQgbmV3bGluZXMgYW5kIHF1b3RlcyBhcmUgYWxsb3dlZCAoYW5kIGFyZQotcmV0YWluZWQpLCBleGNlcHQgdGhhdCB0aHJlZSB1bmVzY2FwZWQgcXVvdGVzIGluIGEgcm93IHRlcm1pbmF0ZSB0aGUgc3RyaW5nLiAgKEEKLSJxdW90ZSIgaXMgdGhlIGNoYXJhY3RlciB1c2VkIHRvIG9wZW4gdGhlIHN0cmluZywgaS5lLiBlaXRoZXIgYGAnYGAgb3IgYGAiYGAuKQorSW4gdHJpcGxlLXF1b3RlZCBsaXRlcmFscywgdW5lc2NhcGVkIG5ld2xpbmVzIGFuZCBxdW90ZXMgYXJlIGFsbG93ZWQgKGFuZCBhcmUKK3JldGFpbmVkKSwgZXhjZXB0IHRoYXQgdGhyZWUgdW5lc2NhcGVkIHF1b3RlcyBpbiBhIHJvdyB0ZXJtaW5hdGUgdGhlIGxpdGVyYWwuICAoQQorInF1b3RlIiBpcyB0aGUgY2hhcmFjdGVyIHVzZWQgdG8gb3BlbiB0aGUgbGl0ZXJhbCwgaS5lLiBlaXRoZXIgYGAnYGAgb3IgYGAiYGAuKQogCiAuLiBpbmRleDo6IHBoeXNpY2FsIGxpbmUsIGVzY2FwZSBzZXF1ZW5jZSwgU3RhbmRhcmQgQywgQwogCi1Vbmxlc3MgYW4gYGAncidgYCBvciBgYCdSJ2BgIHByZWZpeCBpcyBwcmVzZW50LCBlc2NhcGUgc2VxdWVuY2VzIGluIHN0cmluZ3MgYXJlCi1pbnRlcnByZXRlZCBhY2NvcmRpbmcgdG8gcnVsZXMgc2ltaWxhciB0byB0aG9zZSB1c2VkIGJ5IFN0YW5kYXJkIEMuICBUaGUKLXJlY29nbml6ZWQgZXNjYXBlIHNlcXVlbmNlcyBhcmU6CitVbmxlc3MgYW4gYGAncidgYCBvciBgYCdSJ2BgIHByZWZpeCBpcyBwcmVzZW50LCBlc2NhcGUgc2VxdWVuY2VzIGluIHN0cmluZyBhbmQKK2J5dGVzIGxpdGVyYWxzIGFyZSBpbnRlcnByZXRlZCBhY2NvcmRpbmcgdG8gcnVsZXMgc2ltaWxhciB0byB0aG9zZSB1c2VkIGJ5CitTdGFuZGFyZCBDLiAgVGhlIHJlY29nbml6ZWQgZXNjYXBlIHNlcXVlbmNlcyBhcmU6CiAKICstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLSsKIHwgRXNjYXBlIFNlcXVlbmNlIHwgTWVhbmluZyAgICAgICAgICAgICAgICAgICAgICAgICB8IE5vdGVzIHwKQEAgLTU0NSwyMCArNTQ5LDIwIEBACiAuLiBpbmRleDo6IHVucmVjb2duaXplZCBlc2NhcGUgc2VxdWVuY2UKIAogVW5saWtlIFN0YW5kYXJkIEMsIGFsbCB1bnJlY29nbml6ZWQgZXNjYXBlIHNlcXVlbmNlcyBhcmUgbGVmdCBpbiB0aGUgc3RyaW5nCi11bmNoYW5nZWQsIGkuZS4sICp0aGUgYmFja3NsYXNoIGlzIGxlZnQgaW4gdGhlIHN0cmluZyouICAoVGhpcyBiZWhhdmlvciBpcwordW5jaGFuZ2VkLCBpLmUuLCAqdGhlIGJhY2tzbGFzaCBpcyBsZWZ0IGluIHRoZSByZXN1bHQqLiAgKFRoaXMgYmVoYXZpb3IgaXMKIHVzZWZ1bCB3aGVuIGRlYnVnZ2luZzogaWYgYW4gZXNjYXBlIHNlcXVlbmNlIGlzIG1pc3R5cGVkLCB0aGUgcmVzdWx0aW5nIG91dHB1dAogaXMgbW9yZSBlYXNpbHkgcmVjb2duaXplZCBhcyBicm9rZW4uKSAgSXQgaXMgYWxzbyBpbXBvcnRhbnQgdG8gbm90ZSB0aGF0IHRoZQogZXNjYXBlIHNlcXVlbmNlcyBvbmx5IHJlY29nbml6ZWQgaW4gc3RyaW5nIGxpdGVyYWxzIGZhbGwgaW50byB0aGUgY2F0ZWdvcnkgb2YKIHVucmVjb2duaXplZCBlc2NhcGVzIGZvciBieXRlcyBsaXRlcmFscy4KIAotRXZlbiBpbiBhIHJhdyBzdHJpbmcsIHN0cmluZyBxdW90ZXMgY2FuIGJlIGVzY2FwZWQgd2l0aCBhIGJhY2tzbGFzaCwgYnV0IHRoZQotYmFja3NsYXNoIHJlbWFpbnMgaW4gdGhlIHN0cmluZzsgZm9yIGV4YW1wbGUsIGBgciJcIiJgYCBpcyBhIHZhbGlkIHN0cmluZworRXZlbiBpbiBhIHJhdyBsaXRlcmFsLCBxdW90ZXMgY2FuIGJlIGVzY2FwZWQgd2l0aCBhIGJhY2tzbGFzaCwgYnV0IHRoZQorYmFja3NsYXNoIHJlbWFpbnMgaW4gdGhlIHJlc3VsdDsgZm9yIGV4YW1wbGUsIGBgciJcIiJgYCBpcyBhIHZhbGlkIHN0cmluZwogbGl0ZXJhbCBjb25zaXN0aW5nIG9mIHR3byBjaGFyYWN0ZXJzOiBhIGJhY2tzbGFzaCBhbmQgYSBkb3VibGUgcXVvdGU7IGBgciJcImBgCiBpcyBub3QgYSB2YWxpZCBzdHJpbmcgbGl0ZXJhbCAoZXZlbiBhIHJhdyBzdHJpbmcgY2Fubm90IGVuZCBpbiBhbiBvZGQgbnVtYmVyIG9mCi1iYWNrc2xhc2hlcykuICBTcGVjaWZpY2FsbHksICphIHJhdyBzdHJpbmcgY2Fubm90IGVuZCBpbiBhIHNpbmdsZSBiYWNrc2xhc2gqCitiYWNrc2xhc2hlcykuICBTcGVjaWZpY2FsbHksICphIHJhdyBsaXRlcmFsIGNhbm5vdCBlbmQgaW4gYSBzaW5nbGUgYmFja3NsYXNoKgogKHNpbmNlIHRoZSBiYWNrc2xhc2ggd291bGQgZXNjYXBlIHRoZSBmb2xsb3dpbmcgcXVvdGUgY2hhcmFjdGVyKS4gIE5vdGUgYWxzbwogdGhhdCBhIHNpbmdsZSBiYWNrc2xhc2ggZm9sbG93ZWQgYnkgYSBuZXdsaW5lIGlzIGludGVycHJldGVkIGFzIHRob3NlIHR3bwotY2hhcmFjdGVycyBhcyBwYXJ0IG9mIHRoZSBzdHJpbmcsICpub3QqIGFzIGEgbGluZSBjb250aW51YXRpb24uCitjaGFyYWN0ZXJzIGFzIHBhcnQgb2YgdGhlIGxpdGVyYWwsICpub3QqIGFzIGEgbGluZSBjb250aW51YXRpb24uCiAKIAogLi4gX3N0cmluZy1jYXRlbmF0aW9uOgpAQCAtNjMwLDggKzYzNCw3IEBACiBTb21lIGV4YW1wbGVzIG9mIGludGVnZXIgbGl0ZXJhbHM6OgogCiAgICA3ICAgICAyMTQ3NDgzNjQ3ICAgICAgICAgICAgICAgICAgICAgICAgMG8xNzcgICAgMGIxMDAxMTAxMTEKLSAgIDMgICAgIDc5MjI4MTYyNTE0MjY0MzM3NTkzNTQzOTUwMzM2ICAgICAwbzM3NyAgICAweDEwMDAwMDAwMAotICAgICAgICAgNzkyMjgxNjI1MTQyNjQzMzc1OTM1NDM5NTAzMzYgICAgICAgICAgICAgIDB4ZGVhZGJlZWYKKyAgIDMgICAgIDc5MjI4MTYyNTE0MjY0MzM3NTkzNTQzOTUwMzM2ICAgICAwbzM3NyAgICAweGRlYWRiZWVmCiAKIAogLi4gX2Zsb2F0aW5nOgpAQCAtNzI2LDQgKzcyOSw0IEBACiAKIC4uIHJ1YnJpYzo6IEZvb3Rub3RlcwogCi0uLiBbI10gaHR0cDovL3d3dy51bmljb2RlLm9yZy9QdWJsaWMvNi4xLjAvdWNkL05hbWVBbGlhc2VzLnR4dAorLi4gWyNdIGh0dHA6Ly93d3cudW5pY29kZS5vcmcvUHVibGljLzYuMy4wL3VjZC9OYW1lQWxpYXNlcy50eHQKZGlmZiAtLWdpdCBhL0RvYy9yZWZlcmVuY2Uvc2ltcGxlX3N0bXRzLnJzdCBiL0RvYy9yZWZlcmVuY2Uvc2ltcGxlX3N0bXRzLnJzdAppbmRleCA0MGJiYzM5Li44OTQ2YjRmIDEwMDY0NAotLS0gYS9Eb2MvcmVmZXJlbmNlL3NpbXBsZV9zdG10cy5yc3QKKysrIGIvRG9jL3JlZmVyZW5jZS9zaW1wbGVfc3RtdHMucnN0CkBAIC03LDcgKzcsNyBAQAogCiAuLiBpbmRleDo6IHBhaXI6IHNpbXBsZTsgc3RhdGVtZW50CiAKLVNpbXBsZSBzdGF0ZW1lbnRzIGFyZSBjb21wcmlzZWQgd2l0aGluIGEgc2luZ2xlIGxvZ2ljYWwgbGluZS4gU2V2ZXJhbCBzaW1wbGUKK0Egc2ltcGxlIHN0YXRlbWVudCBpcyBjb21wcmlzZWQgd2l0aGluIGEgc2luZ2xlIGxvZ2ljYWwgbGluZS4gU2V2ZXJhbCBzaW1wbGUKIHN0YXRlbWVudHMgbWF5IG9jY3VyIG9uIGEgc2luZ2xlIGxpbmUgc2VwYXJhdGVkIGJ5IHNlbWljb2xvbnMuICBUaGUgc3ludGF4IGZvcgogc2ltcGxlIHN0YXRlbWVudHMgaXM6CiAKQEAgLTcwLDYgKzcwLDcgQEAKID09PT09PT09PT09PT09PT09PT09PQogCiAuLiBpbmRleDo6CisgICBzaW5nbGU6ID07IGFzc2lnbm1lbnQgc3RhdGVtZW50CiAgICBwYWlyOiBhc3NpZ25tZW50OyBzdGF0ZW1lbnQKICAgIHBhaXI6IGJpbmRpbmc7IG5hbWUKICAgIHBhaXI6IHJlYmluZGluZzsgbmFtZQpAQCAtOTAsOCArOTEsOCBAQAogICAgICAgICAgOiB8IGBzbGljaW5nYAogICAgICAgICAgOiB8ICIqIiBgdGFyZ2V0YAogCi0oU2VlIHNlY3Rpb24gOnJlZjpgcHJpbWFyaWVzYCBmb3IgdGhlIHN5bnRheCBkZWZpbml0aW9ucyBmb3IgdGhlIGxhc3QgdGhyZWUKLXN5bWJvbHMuKQorKFNlZSBzZWN0aW9uIDpyZWY6YHByaW1hcmllc2AgZm9yIHRoZSBzeW50YXggZGVmaW5pdGlvbnMgZm9yICphdHRyaWJ1dGVyZWYqLAorKnN1YnNjcmlwdGlvbiosIGFuZCAqc2xpY2luZyouKQogCiBBbiBhc3NpZ25tZW50IHN0YXRlbWVudCBldmFsdWF0ZXMgdGhlIGV4cHJlc3Npb24gbGlzdCAocmVtZW1iZXIgdGhhdCB0aGlzIGNhbiBiZQogYSBzaW5nbGUgZXhwcmVzc2lvbiBvciBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0LCB0aGUgbGF0dGVyIHlpZWxkaW5nIGEgdHVwbGUpIGFuZApAQCAtMjI3LDcgKzIyOCw3IEBACiAgIGluY2x1c2l2ZS4gIEZpbmFsbHksIHRoZSBzZXF1ZW5jZSBvYmplY3QgaXMgYXNrZWQgdG8gcmVwbGFjZSB0aGUgc2xpY2Ugd2l0aAogICB0aGUgaXRlbXMgb2YgdGhlIGFzc2lnbmVkIHNlcXVlbmNlLiAgVGhlIGxlbmd0aCBvZiB0aGUgc2xpY2UgbWF5IGJlIGRpZmZlcmVudAogICBmcm9tIHRoZSBsZW5ndGggb2YgdGhlIGFzc2lnbmVkIHNlcXVlbmNlLCB0aHVzIGNoYW5naW5nIHRoZSBsZW5ndGggb2YgdGhlCi0gIHRhcmdldCBzZXF1ZW5jZSwgaWYgdGhlIG9iamVjdCBhbGxvd3MgaXQuCisgIHRhcmdldCBzZXF1ZW5jZSwgaWYgdGhlIHRhcmdldCBzZXF1ZW5jZSBhbGxvd3MgaXQuCiAKIC4uIGltcGwtZGV0YWlsOjoKIApAQCAtMjM1LDE0ICsyMzYsMTUgQEAKICAgIGFzIGZvciBleHByZXNzaW9ucywgYW5kIGludmFsaWQgc3ludGF4IGlzIHJlamVjdGVkIGR1cmluZyB0aGUgY29kZSBnZW5lcmF0aW9uCiAgICBwaGFzZSwgY2F1c2luZyBsZXNzIGRldGFpbGVkIGVycm9yIG1lc3NhZ2VzLgogCi1XQVJOSU5HOiBBbHRob3VnaCB0aGUgZGVmaW5pdGlvbiBvZiBhc3NpZ25tZW50IGltcGxpZXMgdGhhdCBvdmVybGFwcyBiZXR3ZWVuIHRoZQotbGVmdC1oYW5kIHNpZGUgYW5kIHRoZSByaWdodC1oYW5kIHNpZGUgYXJlICdzYWZlJyAoZm9yIGV4YW1wbGUgYGBhLCBiID0gYiwgYWBgCi1zd2FwcyB0d28gdmFyaWFibGVzKSwgb3ZlcmxhcHMgKndpdGhpbiogdGhlIGNvbGxlY3Rpb24gb2YgYXNzaWduZWQtdG8gdmFyaWFibGVzCi1hcmUgbm90IHNhZmUhICBGb3IgaW5zdGFuY2UsIHRoZSBmb2xsb3dpbmcgcHJvZ3JhbSBwcmludHMgYGBbMCwgMl1gYDo6CitBbHRob3VnaCB0aGUgZGVmaW5pdGlvbiBvZiBhc3NpZ25tZW50IGltcGxpZXMgdGhhdCBvdmVybGFwcyBiZXR3ZWVuIHRoZQorbGVmdC1oYW5kIHNpZGUgYW5kIHRoZSByaWdodC1oYW5kIHNpZGUgYXJlICdzaW11bHRhbmVub3VzJyAoZm9yIGV4YW1wbGUgYGBhLCBiID0KK2IsIGFgYCBzd2FwcyB0d28gdmFyaWFibGVzKSwgb3ZlcmxhcHMgKndpdGhpbiogdGhlIGNvbGxlY3Rpb24gb2YgYXNzaWduZWQtdG8KK3ZhcmlhYmxlcyBvY2N1ciBsZWZ0LXRvLXJpZ2h0LCBzb21ldGltZXMgcmVzdWx0aW5nIGluIGNvbmZ1c2lvbi4gIEZvciBpbnN0YW5jZSwKK3RoZSBmb2xsb3dpbmcgcHJvZ3JhbSBwcmludHMgYGBbMCwgMl1gYDo6CiAKICAgIHggPSBbMCwgMV0KICAgIGkgPSAwCi0gICBpLCB4W2ldID0gMSwgMgorICAgaSwgeFtpXSA9IDEsIDIgICAgICAgICAjIGkgaXMgdXBkYXRlZCwgdGhlbiB4W2ldIGlzIHVwZGF0ZWQKICAgIHByaW50KHgpCiAKIApAQCAtMjYwLDYgKzI2MiwxOCBAQAogLi4gaW5kZXg6OgogICAgcGFpcjogYXVnbWVudGVkOyBhc3NpZ25tZW50CiAgICBzaW5nbGU6IHN0YXRlbWVudDsgYXNzaWdubWVudCwgYXVnbWVudGVkCisgICBzaW5nbGU6ICs9OyBhdWdtZW50ZWQgYXNzaWdubWVudAorICAgc2luZ2xlOiAtPTsgYXVnbWVudGVkIGFzc2lnbm1lbnQKKyAgIHNpbmdsZTogKj07IGF1Z21lbnRlZCBhc3NpZ25tZW50CisgICBzaW5nbGU6IC89OyBhdWdtZW50ZWQgYXNzaWdubWVudAorICAgc2luZ2xlOiAlPTsgYXVnbWVudGVkIGFzc2lnbm1lbnQKKyAgIHNpbmdsZTogJj07IGF1Z21lbnRlZCBhc3NpZ25tZW50CisgICBzaW5nbGU6IF49OyBhdWdtZW50ZWQgYXNzaWdubWVudAorICAgc2luZ2xlOiB8PTsgYXVnbWVudGVkIGFzc2lnbm1lbnQKKyAgIHNpbmdsZTogKio9OyBhdWdtZW50ZWQgYXNzaWdubWVudAorICAgc2luZ2xlOiAvLz07IGF1Z21lbnRlZCBhc3NpZ25tZW50CisgICBzaW5nbGU6ID4+PTsgYXVnbWVudGVkIGFzc2lnbm1lbnQKKyAgIHNpbmdsZTogPDw9OyBhdWdtZW50ZWQgYXNzaWdubWVudAogCiBBdWdtZW50ZWQgYXNzaWdubWVudCBpcyB0aGUgY29tYmluYXRpb24sIGluIGEgc2luZ2xlIHN0YXRlbWVudCwgb2YgYSBiaW5hcnkKIG9wZXJhdGlvbiBhbmQgYW4gYXNzaWdubWVudCBzdGF0ZW1lbnQ6CkBAIC0yNzAsNyArMjg0LDcgQEAKICAgIGF1Z29wOiAiKz0iIHwgIi09IiB8ICIqPSIgfCAiLz0iIHwgIi8vPSIgfCAiJT0iIHwgIioqPSIKICAgICAgICAgOiB8ICI+Pj0iIHwgIjw8PSIgfCAiJj0iIHwgIl49IiB8ICJ8PSIKIAotKFNlZSBzZWN0aW9uIDpyZWY6YHByaW1hcmllc2AgZm9yIHRoZSBzeW50YXggZGVmaW5pdGlvbnMgZm9yIHRoZSBsYXN0IHRocmVlCisoU2VlIHNlY3Rpb24gOnJlZjpgcHJpbWFyaWVzYCBmb3IgdGhlIHN5bnRheCBkZWZpbml0aW9ucyBvZiB0aGUgbGFzdCB0aHJlZQogc3ltYm9scy4pCiAKIEFuIGF1Z21lbnRlZCBhc3NpZ25tZW50IGV2YWx1YXRlcyB0aGUgdGFyZ2V0ICh3aGljaCwgdW5saWtlIG5vcm1hbCBhc3NpZ25tZW50CkBAIC0yODQsNiArMjk4LDExIEBACiBpcyBwZXJmb3JtZWQgKmluLXBsYWNlKiwgbWVhbmluZyB0aGF0IHJhdGhlciB0aGFuIGNyZWF0aW5nIGEgbmV3IG9iamVjdCBhbmQKIGFzc2lnbmluZyB0aGF0IHRvIHRoZSB0YXJnZXQsIHRoZSBvbGQgb2JqZWN0IGlzIG1vZGlmaWVkIGluc3RlYWQuCiAKK1VubGlrZSBub3JtYWwgYXNzaWdubWVudHMsIGF1Z21lbnRlZCBhc3NpZ25tZW50cyBldmFsdWF0ZSB0aGUgbGVmdC1oYW5kIHNpZGUKKypiZWZvcmUqIGV2YWx1YXRpbmcgdGhlIHJpZ2h0LWhhbmQgc2lkZS4gIEZvciBleGFtcGxlLCBgYGFbaV0gKz0gZih4KWBgIGZpcnN0Citsb29rcy11cCBgYGFbaV1gYCwgdGhlbiBpdCBldmFsdWF0ZXMgYGBmKHgpYGAgYW5kIHBlcmZvcm1zIHRoZSBhZGRpdGlvbiwgYW5kCitsYXN0bHksIGl0IHdyaXRlcyB0aGUgcmVzdWx0IGJhY2sgdG8gYGBhW2ldYGAuCisKIFdpdGggdGhlIGV4Y2VwdGlvbiBvZiBhc3NpZ25pbmcgdG8gdHVwbGVzIGFuZCBtdWx0aXBsZSB0YXJnZXRzIGluIGEgc2luZ2xlCiBzdGF0ZW1lbnQsIHRoZSBhc3NpZ25tZW50IGRvbmUgYnkgYXVnbWVudGVkIGFzc2lnbm1lbnQgc3RhdGVtZW50cyBpcyBoYW5kbGVkIHRoZQogc2FtZSB3YXkgYXMgbm9ybWFsIGFzc2lnbm1lbnRzLiBTaW1pbGFybHksIHdpdGggdGhlIGV4Y2VwdGlvbiBvZiB0aGUgcG9zc2libGUKQEAgLTUyOSw4ICs1NDgsOCBAQAogICAgUnVudGltZUVycm9yOiBTb21ldGhpbmcgYmFkIGhhcHBlbmVkCiAKIEEgc2ltaWxhciBtZWNoYW5pc20gd29ya3MgaW1wbGljaXRseSBpZiBhbiBleGNlcHRpb24gaXMgcmFpc2VkIGluc2lkZSBhbgotZXhjZXB0aW9uIGhhbmRsZXI6IHRoZSBwcmV2aW91cyBleGNlcHRpb24gaXMgdGhlbiBhdHRhY2hlZCBhcyB0aGUgbmV3Ci1leGNlcHRpb24ncyA6YXR0cjpgX19jb250ZXh0X19gIGF0dHJpYnV0ZTo6CitleGNlcHRpb24gaGFuZGxlciBvciBhIDprZXl3b3JkOmBmaW5hbGx5YCBjbGF1c2U6IHRoZSBwcmV2aW91cyBleGNlcHRpb24gaXMgdGhlbgorYXR0YWNoZWQgYXMgdGhlIG5ldyBleGNlcHRpb24ncyA6YXR0cjpgX19jb250ZXh0X19gIGF0dHJpYnV0ZTo6CiAKICAgID4+PiB0cnk6CiAgICAuLi4gICAgIHByaW50KDEgLyAwKQpAQCAtNjQ1LDcgKzY2NCw3IEBACiBhcyB0aG91Z2ggdGhlIGNsYXVzZXMgaGFkIGJlZW4gc2VwYXJhdGVkIG91dCBpbnRvIGluZGl2aWRpdWFsIGltcG9ydAogc3RhdGVtZW50cy4KIAotVGhlIGRldGFpbHMgb2YgdGhlIGZpcnN0IHN0ZXAsIGZpbmRpbmcgYW5kIGxvYWRpbmcgbW9kdWxlcyBpcyBkZXNjcmliZWQgaW4KK1RoZSBkZXRhaWxzIG9mIHRoZSBmaXJzdCBzdGVwLCBmaW5kaW5nIGFuZCBsb2FkaW5nIG1vZHVsZXMgYXJlIGRlc2NyaWJlZCBpbgogZ3JlYXRlciBkZXRhaWwgaW4gdGhlIHNlY3Rpb24gb24gdGhlIDpyZWY6YGltcG9ydCBzeXN0ZW0gPGltcG9ydHN5c3RlbT5gLAogd2hpY2ggYWxzbyBkZXNjcmliZXMgdGhlIHZhcmlvdXMgdHlwZXMgb2YgcGFja2FnZXMgYW5kIG1vZHVsZXMgdGhhdCBjYW4KIGJlIGltcG9ydGVkLCBhcyB3ZWxsIGFzIGFsbCB0aGUgaG9va3MgdGhhdCBjYW4gYmUgdXNlZCB0byBjdXN0b21pemUKQEAgLTY1Niw2ICs2NzUsOCBAQAogSWYgdGhlIHJlcXVlc3RlZCBtb2R1bGUgaXMgcmV0cmlldmVkIHN1Y2Nlc3NmdWxseSwgaXQgd2lsbCBiZSBtYWRlCiBhdmFpbGFibGUgaW4gdGhlIGxvY2FsIG5hbWVzcGFjZSBpbiBvbmUgb2YgdGhyZWUgd2F5czoKIAorLi4gaW5kZXg6OiBzaW5nbGU6IGFzOyBpbXBvcnQgc3RhdGVtZW50CisKICogSWYgdGhlIG1vZHVsZSBuYW1lIGlzIGZvbGxvd2VkIGJ5IDprZXl3b3JkOmBhc2AsIHRoZW4gdGhlIG5hbWUKICAgZm9sbG93aW5nIDprZXl3b3JkOmBhc2AgaXMgYm91bmQgZGlyZWN0bHkgdG8gdGhlIGltcG9ydGVkIG1vZHVsZS4KICogSWYgbm8gb3RoZXIgbmFtZSBpcyBzcGVjaWZpZWQsIGFuZCB0aGUgbW9kdWxlIGJlaW5nIGltcG9ydGVkIGlzIGEgdG9wCkBAIC02NzQsNyArNjk1LDcgQEAKIAogVGhlIDprZXl3b3JkOmBmcm9tYCBmb3JtIHVzZXMgYSBzbGlnaHRseSBtb3JlIGNvbXBsZXggcHJvY2VzczoKIAotIy4gZmluZCB0aGUgbW9kdWxlIHNwZWNpZmllZCBpbiB0aGUgOmtleXdvcmQ6YGZyb21gIGNsYXVzZSBsb2FkaW5nIGFuZAorIy4gZmluZCB0aGUgbW9kdWxlIHNwZWNpZmllZCBpbiB0aGUgOmtleXdvcmQ6YGZyb21gIGNsYXVzZSwgbG9hZGluZyBhbmQKICAgIGluaXRpYWxpemluZyBpdCBpZiBuZWNlc3Nhcnk7CiAjLiBmb3IgZWFjaCBvZiB0aGUgaWRlbnRpZmllcnMgc3BlY2lmaWVkIGluIHRoZSA6a2V5d29yZDpgaW1wb3J0YCBjbGF1c2VzOgogCkBAIC02ODIsNyArNzAzLDcgQEAKICAgICMuIGlmIG5vdCwgYXR0ZW1wdCB0byBpbXBvcnQgYSBzdWJtb2R1bGUgd2l0aCB0aGF0IG5hbWUgYW5kIHRoZW4KICAgICAgIGNoZWNrIHRoZSBpbXBvcnRlZCBtb2R1bGUgYWdhaW4gZm9yIHRoYXQgYXR0cmlidXRlCiAgICAjLiBpZiB0aGUgYXR0cmlidXRlIGlzIG5vdCBmb3VuZCwgOmV4YzpgSW1wb3J0RXJyb3JgIGlzIHJhaXNlZC4KLSAgICMuIG90aGVyd2lzZSwgYSByZWZlcmVuY2UgdG8gdGhhdCB2YWx1ZSBpcyBib3VuZCBpbiB0aGUgbG9jYWwgbmFtZXNwYWNlLAorICAgIy4gb3RoZXJ3aXNlLCBhIHJlZmVyZW5jZSB0byB0aGF0IHZhbHVlIGlzIHN0b3JlZCBpbiB0aGUgbG9jYWwgbmFtZXNwYWNlLAogICAgICAgdXNpbmcgdGhlIG5hbWUgaW4gdGhlIDprZXl3b3JkOmBhc2AgY2xhdXNlIGlmIGl0IGlzIHByZXNlbnQsCiAgICAgICBvdGhlcndpc2UgdXNpbmcgdGhlIGF0dHJpYnV0ZSBuYW1lCiAKQEAgLTcxMCwxMCArNzMxLDkgQEAKIHRvIGF2b2lkIGFjY2lkZW50YWxseSBleHBvcnRpbmcgaXRlbXMgdGhhdCBhcmUgbm90IHBhcnQgb2YgdGhlIEFQSSAoc3VjaCBhcwogbGlicmFyeSBtb2R1bGVzIHdoaWNoIHdlcmUgaW1wb3J0ZWQgYW5kIHVzZWQgd2l0aGluIHRoZSBtb2R1bGUpLgogCi1UaGUgOmtleXdvcmQ6YGZyb21gIGZvcm0gd2l0aCBgYCpgYCBtYXkgb25seSBvY2N1ciBpbiBhIG1vZHVsZSBzY29wZS4gIFRoZSB3aWxkCi1jYXJkIGZvcm0gb2YgaW1wb3J0IC0tLSBgYGltcG9ydCAqYGAgLS0tIGlzIG9ubHkgYWxsb3dlZCBhdCB0aGUgbW9kdWxlIGxldmVsLgotQXR0ZW1wdGluZyB0byB1c2UgaXQgaW4gY2xhc3Mgb3IgZnVuY3Rpb24gZGVmaW5pdGlvbnMgd2lsbCByYWlzZSBhCi06ZXhjOmBTeW50YXhFcnJvcmAuCitUaGUgd2lsZCBjYXJkIGZvcm0gb2YgaW1wb3J0IC0tLSBgYGZyb20gbW9kdWxlIGltcG9ydCAqYGAgLS0tIGlzIG9ubHkgYWxsb3dlZCBhdAordGhlIG1vZHVsZSBsZXZlbC4gIEF0dGVtcHRpbmcgdG8gdXNlIGl0IGluIGNsYXNzIG9yIGZ1bmN0aW9uIGRlZmluaXRpb25zIHdpbGwKK3JhaXNlIGEgOmV4YzpgU3ludGF4RXJyb3JgLgogCiAuLiBpbmRleDo6CiAgICAgc2luZ2xlOiByZWxhdGl2ZTsgaW1wb3J0CkBAIC03MzIsNyArNzUyLDcgQEAKIFRoZSBzcGVjaWZpY2F0aW9uIGZvciByZWxhdGl2ZSBpbXBvcnRzIGlzIGNvbnRhaW5lZCB3aXRoaW4gOnBlcDpgMzI4YC4KIAogOmZ1bmM6YGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlYCBpcyBwcm92aWRlZCB0byBzdXBwb3J0IGFwcGxpY2F0aW9ucyB0aGF0Ci1kZXRlcm1pbmUgd2hpY2ggbW9kdWxlcyBuZWVkIHRvIGJlIGxvYWRlZCBkeW5hbWljYWxseS4KK2RldGVybWluZSBkeW5hbWljYWxseSB0aGUgbW9kdWxlcyB0byBiZSBsb2FkZWQuCiAKIAogLi4gX2Z1dHVyZToKQEAgLTc0NCwxMCArNzY0LDEyIEBACiAKIEEgOmRmbjpgZnV0dXJlIHN0YXRlbWVudGAgaXMgYSBkaXJlY3RpdmUgdG8gdGhlIGNvbXBpbGVyIHRoYXQgYSBwYXJ0aWN1bGFyCiBtb2R1bGUgc2hvdWxkIGJlIGNvbXBpbGVkIHVzaW5nIHN5bnRheCBvciBzZW1hbnRpY3MgdGhhdCB3aWxsIGJlIGF2YWlsYWJsZSBpbiBhCi1zcGVjaWZpZWQgZnV0dXJlIHJlbGVhc2Ugb2YgUHl0aG9uLiAgVGhlIGZ1dHVyZSBzdGF0ZW1lbnQgaXMgaW50ZW5kZWQgdG8gZWFzZQotbWlncmF0aW9uIHRvIGZ1dHVyZSB2ZXJzaW9ucyBvZiBQeXRob24gdGhhdCBpbnRyb2R1Y2UgaW5jb21wYXRpYmxlIGNoYW5nZXMgdG8KLXRoZSBsYW5ndWFnZS4gIEl0IGFsbG93cyB1c2Ugb2YgdGhlIG5ldyBmZWF0dXJlcyBvbiBhIHBlci1tb2R1bGUgYmFzaXMgYmVmb3JlCi10aGUgcmVsZWFzZSBpbiB3aGljaCB0aGUgZmVhdHVyZSBiZWNvbWVzIHN0YW5kYXJkLgorc3BlY2lmaWVkIGZ1dHVyZSByZWxlYXNlIG9mIFB5dGhvbiB3aGVyZSB0aGUgZmVhdHVyZSBiZWNvbWVzIHN0YW5kYXJkLgorCitUaGUgZnV0dXJlIHN0YXRlbWVudCBpcyBpbnRlbmRlZCB0byBlYXNlIG1pZ3JhdGlvbiB0byBmdXR1cmUgdmVyc2lvbnMgb2YgUHl0aG9uCit0aGF0IGludHJvZHVjZSBpbmNvbXBhdGlibGUgY2hhbmdlcyB0byB0aGUgbGFuZ3VhZ2UuICBJdCBhbGxvd3MgdXNlIG9mIHRoZSBuZXcKK2ZlYXR1cmVzIG9uIGEgcGVyLW1vZHVsZSBiYXNpcyBiZWZvcmUgdGhlIHJlbGVhc2UgaW4gd2hpY2ggdGhlIGZlYXR1cmUgYmVjb21lcworc3RhbmRhcmQuCiAKIC4uIHByb2R1Y3Rpb25saXN0OjogKgogICAgZnV0dXJlX3N0YXRlbWVudDogImZyb20iICJfX2Z1dHVyZV9fIiAiaW1wb3J0IiBmZWF0dXJlIFsiYXMiIG5hbWVdCkBAIC04NDIsNyArODY0LDcgQEAKIAogLi4gaW1wbC1kZXRhaWw6OgogCi0gICBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCBlbmZvcmNlIHRoZSBsYXR0ZXIgdHdvIHJlc3RyaWN0aW9ucywgYnV0CisgICBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCBlbmZvcmNlIHRoZSB0d28gcmVzdHJpY3Rpb25zLCBidXQKICAgIHByb2dyYW1zIHNob3VsZCBub3QgYWJ1c2UgdGhpcyBmcmVlZG9tLCBhcyBmdXR1cmUgaW1wbGVtZW50YXRpb25zIG1heSBlbmZvcmNlCiAgICB0aGVtIG9yIHNpbGVudGx5IGNoYW5nZSB0aGUgbWVhbmluZyBvZiB0aGUgcHJvZ3JhbS4KIApAQCAtODc1LDE2ICs4OTcsMTYgQEAKICAgICAgICAgICAgICAgICA6IHwgIm5vbmxvY2FsIiBpZGVudGlmaWVyIGF1Z29wIGV4cHJlc3Npb25fbGlzdAogCiBUaGUgOmtleXdvcmQ6YG5vbmxvY2FsYCBzdGF0ZW1lbnQgY2F1c2VzIHRoZSBsaXN0ZWQgaWRlbnRpZmllcnMgdG8gcmVmZXIgdG8KLXByZXZpb3VzbHkgYm91bmQgdmFyaWFibGVzIGluIHRoZSBuZWFyZXN0IGVuY2xvc2luZyBzY29wZS4gIFRoaXMgaXMgaW1wb3J0YW50Ci1iZWNhdXNlIHRoZSBkZWZhdWx0IGJlaGF2aW9yIGZvciBiaW5kaW5nIGlzIHRvIHNlYXJjaCB0aGUgbG9jYWwgbmFtZXNwYWNlCi1maXJzdC4gIFRoZSBzdGF0ZW1lbnQgYWxsb3dzIGVuY2Fwc3VsYXRlZCBjb2RlIHRvIHJlYmluZCB2YXJpYWJsZXMgb3V0c2lkZSBvZgotdGhlIGxvY2FsIHNjb3BlIGJlc2lkZXMgdGhlIGdsb2JhbCAobW9kdWxlKSBzY29wZS4KK3ByZXZpb3VzbHkgYm91bmQgdmFyaWFibGVzIGluIHRoZSBuZWFyZXN0IGVuY2xvc2luZyBzY29wZSBleGNsdWRpbmcgZ2xvYmFscy4KK1RoaXMgaXMgaW1wb3J0YW50IGJlY2F1c2UgdGhlIGRlZmF1bHQgYmVoYXZpb3IgZm9yIGJpbmRpbmcgaXMgdG8gc2VhcmNoIHRoZQorbG9jYWwgbmFtZXNwYWNlIGZpcnN0LiAgVGhlIHN0YXRlbWVudCBhbGxvd3MgZW5jYXBzdWxhdGVkIGNvZGUgdG8gcmViaW5kCit2YXJpYWJsZXMgb3V0c2lkZSBvZiB0aGUgbG9jYWwgc2NvcGUgYmVzaWRlcyB0aGUgZ2xvYmFsIChtb2R1bGUpIHNjb3BlLgogCiAuLiBYWFggbm90IGltcGxlbWVudGVkCiAgICBUaGUgOmtleXdvcmQ6YG5vbmxvY2FsYCBzdGF0ZW1lbnQgbWF5IHByZXBlbmQgYW4gYXNzaWdubWVudCBvciBhdWdtZW50ZWQKICAgIGFzc2lnbm1lbnQsIGJ1dCBub3QgYW4gZXhwcmVzc2lvbi4KIAotTmFtZXMgbGlzdGVkIGluIGEgOmtleXdvcmQ6YG5vbmxvY2FsYCBzdGF0ZW1lbnQsIHVubGlrZSB0byB0aG9zZSBsaXN0ZWQgaW4gYQorTmFtZXMgbGlzdGVkIGluIGEgOmtleXdvcmQ6YG5vbmxvY2FsYCBzdGF0ZW1lbnQsIHVubGlrZSB0aG9zZSBsaXN0ZWQgaW4gYQogOmtleXdvcmQ6YGdsb2JhbGAgc3RhdGVtZW50LCBtdXN0IHJlZmVyIHRvIHByZS1leGlzdGluZyBiaW5kaW5ncyBpbiBhbgogZW5jbG9zaW5nIHNjb3BlICh0aGUgc2NvcGUgaW4gd2hpY2ggYSBuZXcgYmluZGluZyBzaG91bGQgYmUgY3JlYXRlZCBjYW5ub3QKIGJlIGRldGVybWluZWQgdW5hbWJpZ3VvdXNseSkuCmRpZmYgLS1naXQgYS9Eb2MvcmVmZXJlbmNlL3RvcGxldmVsX2NvbXBvbmVudHMucnN0IGIvRG9jL3JlZmVyZW5jZS90b3BsZXZlbF9jb21wb25lbnRzLnJzdAppbmRleCBmNGJjNzFmLi5lMTY4N2ZmIDEwMDY0NAotLS0gYS9Eb2MvcmVmZXJlbmNlL3RvcGxldmVsX2NvbXBvbmVudHMucnN0CisrKyBiL0RvYy9yZWZlcmVuY2UvdG9wbGV2ZWxfY29tcG9uZW50cy5yc3QKQEAgLTk3LDIwICs5NywxMCBAQAogPT09PT09PT09PT09PT09PQogCiAuLiBpbmRleDo6IHNpbmdsZTogaW5wdXQKLQogLi4gaW5kZXg6OiBidWlsdGluOiBldmFsCiAKLVRoZXJlIGFyZSB0d28gZm9ybXMgb2YgZXhwcmVzc2lvbiBpbnB1dC4gIEJvdGggaWdub3JlIGxlYWRpbmcgd2hpdGVzcGFjZS4gVGhlCis6ZnVuYzpgZXZhbGAgaXMgdXNlZCBmb3IgZXhwcmVzc2lvbiBpbnB1dC4gIEl0IGlnbm9yZXMgbGVhZGluZyB3aGl0ZXNwYWNlLiBUaGUKIHN0cmluZyBhcmd1bWVudCB0byA6ZnVuYzpgZXZhbGAgbXVzdCBoYXZlIHRoZSBmb2xsb3dpbmcgZm9ybToKIAogLi4gcHJvZHVjdGlvbmxpc3Q6OgogICAgZXZhbF9pbnB1dDogYGV4cHJlc3Npb25fbGlzdGAgTkVXTElORSoKLQotLi4gaW5kZXg6OgotICAgb2JqZWN0OiBmaWxlCi0gICBzaW5nbGU6IGlucHV0OyByYXcKLSAgIHNpbmdsZTogcmVhZGxpbmUoKSAoZmlsZSBtZXRob2QpCi0KLU5vdGU6IHRvIHJlYWQgJ3JhdycgaW5wdXQgbGluZSB3aXRob3V0IGludGVycHJldGF0aW9uLCB5b3UgY2FuIHVzZSB0aGUKLTptZXRoOmByZWFkbGluZWAgbWV0aG9kIG9mIGZpbGUgb2JqZWN0cywgaW5jbHVkaW5nIGBgc3lzLnN0ZGluYGAuCi0KZGlmZiAtLWdpdCBhL0RvYy90b29scy9zcGhpbnhleHQvY19hbm5vdGF0aW9ucy5weSBiL0RvYy90b29scy9leHRlbnNpb25zL2NfYW5ub3RhdGlvbnMucHkKc2ltaWxhcml0eSBpbmRleCA5MyUKcmVuYW1lIGZyb20gRG9jL3Rvb2xzL3NwaGlueGV4dC9jX2Fubm90YXRpb25zLnB5CnJlbmFtZSB0byBEb2MvdG9vbHMvZXh0ZW5zaW9ucy9jX2Fubm90YXRpb25zLnB5CmluZGV4IDhiNTE2N2EuLmJhYTM5ZjMgMTAwNjQ0Ci0tLSBhL0RvYy90b29scy9zcGhpbnhleHQvY19hbm5vdGF0aW9ucy5weQorKysgYi9Eb2MvdG9vbHMvZXh0ZW5zaW9ucy9jX2Fubm90YXRpb25zLnB5CkBAIC0xMyw3ICsxMyw3IEBACiAgICAgVXNhZ2U6IFNldCB0aGUgYHJlZmNvdW50X2ZpbGVgIGNvbmZpZyB2YWx1ZSB0byB0aGUgcGF0aCB0byB0aGUgcmVmZXJlbmNlCiAgICAgY291bnQgZGF0YSBmaWxlLgogCi0gICAgOmNvcHlyaWdodDogQ29weXJpZ2h0IDIwMDctMjAxMyBieSBHZW9yZyBCcmFuZGwuCisgICAgOmNvcHlyaWdodDogQ29weXJpZ2h0IDIwMDctMjAxNCBieSBHZW9yZyBCcmFuZGwuCiAgICAgOmxpY2Vuc2U6IFB5dGhvbiBsaWNlbnNlLgogIiIiCiAKQEAgLTgxLDcgKzgxLDEwIEBACiAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgIGlmIG5vdCBwYXJbMF0uaGFzX2tleSgnbmFtZXMnKSBvciBub3QgcGFyWzBdWyduYW1lcyddOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBlbnRyeSA9IHNlbGYuZ2V0KHBhclswXVsnbmFtZXMnXVswXSkKKyAgICAgICAgICAgIG5hbWUgPSBwYXJbMF1bJ25hbWVzJ11bMF0KKyAgICAgICAgICAgIGlmIG5hbWUuc3RhcnRzd2l0aCgiYy4iKToKKyAgICAgICAgICAgICAgICBuYW1lID0gbmFtZVsyOl0KKyAgICAgICAgICAgIGVudHJ5ID0gc2VsZi5nZXQobmFtZSkKICAgICAgICAgICAgIGlmIG5vdCBlbnRyeToKICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgZWxpZiBlbnRyeS5yZXN1bHRfdHlwZSBub3QgaW4gKCJQeU9iamVjdCoiLCAiUHlWYXJPYmplY3QqIik6CkBAIC0xMTUsMyArMTE4LDQgQEAKICAgICAgICAgc2lnbm9kZS5wYXJlbnRbJ3N0YWJsZWFiaSddID0gJ3N0YWJsZWFiaScgaW4gc2VsZi5vcHRpb25zCiAgICAgICAgIHJldHVybiBvbGRfaGFuZGxlX3NpZ25hdHVyZShzZWxmLCBzaWcsIHNpZ25vZGUpCiAgICAgQ09iamVjdC5oYW5kbGVfc2lnbmF0dXJlID0gbmV3X2hhbmRsZV9zaWduYXR1cmUKKyAgICByZXR1cm4geyd2ZXJzaW9uJzogJzEuMCcsICdwYXJhbGxlbF9yZWFkX3NhZmUnOiBUcnVlfQpkaWZmIC0tZ2l0IGEvRG9jL3Rvb2xzL3NwaGlueGV4dC9wYXRjaGxldmVsLnB5IGIvRG9jL3Rvb2xzL2V4dGVuc2lvbnMvcGF0Y2hsZXZlbC5weQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jL3Rvb2xzL3NwaGlueGV4dC9wYXRjaGxldmVsLnB5CnJlbmFtZSB0byBEb2MvdG9vbHMvZXh0ZW5zaW9ucy9wYXRjaGxldmVsLnB5CmRpZmYgLS1naXQgYS9Eb2MvdG9vbHMvc3BoaW54ZXh0L3B5c3BlY2lmaWMucHkgYi9Eb2MvdG9vbHMvZXh0ZW5zaW9ucy9weXNwZWNpZmljLnB5CnNpbWlsYXJpdHkgaW5kZXggODclCnJlbmFtZSBmcm9tIERvYy90b29scy9zcGhpbnhleHQvcHlzcGVjaWZpYy5weQpyZW5hbWUgdG8gRG9jL3Rvb2xzL2V4dGVuc2lvbnMvcHlzcGVjaWZpYy5weQppbmRleCBmMmQzY2ExLi42NGE1NjY1IDEwMDY0NAotLS0gYS9Eb2MvdG9vbHMvc3BoaW54ZXh0L3B5c3BlY2lmaWMucHkKKysrIGIvRG9jL3Rvb2xzL2V4dGVuc2lvbnMvcHlzcGVjaWZpYy5weQpAQCAtOSwxNyArOSwzMiBAQAogICAgIDpsaWNlbnNlOiBQeXRob24gbGljZW5zZS4KICIiIgogCi1JU1NVRV9VUkkgPSAnaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZSVzJwotU09VUkNFX1VSSSA9ICdodHRwOi8vaGcucHl0aG9uLm9yZy9jcHl0aG9uL2ZpbGUvMy4zLyVzJworaW1wb3J0IHJlCitpbXBvcnQgY29kZWNzCitmcm9tIG9zIGltcG9ydCBwYXRoCitmcm9tIHRpbWUgaW1wb3J0IGFzY3RpbWUKK2Zyb20gcHByaW50IGltcG9ydCBwZm9ybWF0Citmcm9tIGRvY3V0aWxzLmlvIGltcG9ydCBTdHJpbmdPdXRwdXQKK2Zyb20gZG9jdXRpbHMudXRpbHMgaW1wb3J0IG5ld19kb2N1bWVudAogCiBmcm9tIGRvY3V0aWxzIGltcG9ydCBub2RlcywgdXRpbHMKIAotaW1wb3J0IHNwaGlueAorZnJvbSBzcGhpbnggaW1wb3J0IGFkZG5vZGVzCitmcm9tIHNwaGlueC5idWlsZGVycyBpbXBvcnQgQnVpbGRlcgogZnJvbSBzcGhpbngudXRpbC5ub2RlcyBpbXBvcnQgc3BsaXRfZXhwbGljaXRfdGl0bGUKIGZyb20gc3BoaW54LnV0aWwuY29tcGF0IGltcG9ydCBEaXJlY3RpdmUKIGZyb20gc3BoaW54LndyaXRlcnMuaHRtbCBpbXBvcnQgSFRNTFRyYW5zbGF0b3IKK2Zyb20gc3BoaW54LndyaXRlcnMudGV4dCBpbXBvcnQgVGV4dFdyaXRlcgogZnJvbSBzcGhpbngud3JpdGVycy5sYXRleCBpbXBvcnQgTGFUZVhUcmFuc2xhdG9yCi1mcm9tIHNwaGlueC5sb2NhbGUgaW1wb3J0IHZlcnNpb25sYWJlbHMKK2Zyb20gc3BoaW54LmRvbWFpbnMucHl0aG9uIGltcG9ydCBQeU1vZHVsZWxldmVsLCBQeUNsYXNzbWVtYmVyCisKKyMgU3VwcG9ydCBmb3IgY2hlY2tpbmcgZm9yIHN1c3BpY2lvdXMgbWFya3VwCisKK2ltcG9ydCBzdXNwaWNpb3VzCisKKworSVNTVUVfVVJJID0gJ2h0dHBzOi8vYnVncy5weXRob24ub3JnL2lzc3VlJXMnCitTT1VSQ0VfVVJJID0gJ2h0dHBzOi8vaGcucHl0aG9uLm9yZy9jcHl0aG9uL2ZpbGUvMy40LyVzJwogCiAjIG1vbmtleS1wYXRjaCByZVNUIHBhcnNlciB0byBkaXNhYmxlIGFscGhhYmV0aWMgYW5kIHJvbWFuIGVudW1lcmF0ZWQgbGlzdHMKIGZyb20gZG9jdXRpbHMucGFyc2Vycy5yc3Quc3RhdGVzIGltcG9ydCBCb2R5CkBAIC0yOCwyMyArNDMsMTIgQEAKICAgICBCb2R5LmVudW0uY29udmVydGVyc1snbG93ZXJyb21hbiddID0gXAogICAgIEJvZHkuZW51bS5jb252ZXJ0ZXJzWyd1cHBlcnJvbWFuJ10gPSBsYW1iZGEgeDogTm9uZQogCi1TUEhJTlgxMSA9IHNwaGlueC5fX3ZlcnNpb25fX1s6M10gPCAnMS4yJwotCi1pZiBTUEhJTlgxMToKLSAgICAjIG1vbmtleS1wYXRjaCBIVE1MIHRyYW5zbGF0b3IgdG8gZ2l2ZSB2ZXJzaW9ubW9kaWZpZWQgcGFyYWdyYXBocyBhIGNsYXNzCi0gICAgZGVmIG5ld192aXNpdF92ZXJzaW9ubW9kaWZpZWQoc2VsZiwgbm9kZSk6Ci0gICAgICAgIHNlbGYuYm9keS5hcHBlbmQoc2VsZi5zdGFydHRhZyhub2RlLCAncCcsIENMQVNTPW5vZGVbJ3R5cGUnXSkpCi0gICAgICAgIHRleHQgPSB2ZXJzaW9ubGFiZWxzW25vZGVbJ3R5cGUnXV0gJSBub2RlWyd2ZXJzaW9uJ10KLSAgICAgICAgaWYgbGVuKG5vZGUpOgotICAgICAgICAgICAgdGV4dCArPSAnOicKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHRleHQgKz0gJy4nCi0gICAgICAgIHNlbGYuYm9keS5hcHBlbmQoJzxzcGFuIGNsYXNzPSJ2ZXJzaW9ubW9kaWZpZWQiPiVzPC9zcGFuPiAnICUgdGV4dCkKLSAgICBIVE1MVHJhbnNsYXRvci52aXNpdF92ZXJzaW9ubW9kaWZpZWQgPSBuZXdfdmlzaXRfdmVyc2lvbm1vZGlmaWVkCi0KICMgbW9ua2V5LXBhdGNoIEhUTUwgYW5kIExhVGVYIHRyYW5zbGF0b3JzIHRvIGtlZXAgZG9jdGVzdCBibG9ja3MgaW4gdGhlCiAjIGRvY3Rlc3QgZG9jcyB0aGVtc2VsdmVzCiBvcmlnX3Zpc2l0X2xpdGVyYWxfYmxvY2sgPSBIVE1MVHJhbnNsYXRvci52aXNpdF9saXRlcmFsX2Jsb2NrCitvcmlnX2RlcGFydF9saXRlcmFsX2Jsb2NrID0gTGFUZVhUcmFuc2xhdG9yLmRlcGFydF9saXRlcmFsX2Jsb2NrCisKKwogZGVmIG5ld192aXNpdF9saXRlcmFsX2Jsb2NrKHNlbGYsIG5vZGUpOgogICAgIG1ldGEgPSBzZWxmLmJ1aWxkZXIuZW52Lm1ldGFkYXRhW3NlbGYuYnVpbGRlci5jdXJyZW50X2RvY25hbWVdCiAgICAgb2xkX3RyaW1fZG9jdGVzdF9mbGFncyA9IHNlbGYuaGlnaGxpZ2h0ZXIudHJpbV9kb2N0ZXN0X2ZsYWdzCkBAIC01NSw5ICs1OSw3IEBACiAgICAgZmluYWxseToKICAgICAgICAgc2VsZi5oaWdobGlnaHRlci50cmltX2RvY3Rlc3RfZmxhZ3MgPSBvbGRfdHJpbV9kb2N0ZXN0X2ZsYWdzCiAKLUhUTUxUcmFuc2xhdG9yLnZpc2l0X2xpdGVyYWxfYmxvY2sgPSBuZXdfdmlzaXRfbGl0ZXJhbF9ibG9jawogCi1vcmlnX2RlcGFydF9saXRlcmFsX2Jsb2NrID0gTGFUZVhUcmFuc2xhdG9yLmRlcGFydF9saXRlcmFsX2Jsb2NrCiBkZWYgbmV3X2RlcGFydF9saXRlcmFsX2Jsb2NrKHNlbGYsIG5vZGUpOgogICAgIG1ldGEgPSBzZWxmLmJ1aWxkZXIuZW52Lm1ldGFkYXRhW3NlbGYuY3VyZmlsZXN0YWNrWy0xXV0KICAgICBvbGRfdHJpbV9kb2N0ZXN0X2ZsYWdzID0gc2VsZi5oaWdobGlnaHRlci50cmltX2RvY3Rlc3RfZmxhZ3MKQEAgLTY4LDggKzcwLDExIEBACiAgICAgZmluYWxseToKICAgICAgICAgc2VsZi5oaWdobGlnaHRlci50cmltX2RvY3Rlc3RfZmxhZ3MgPSBvbGRfdHJpbV9kb2N0ZXN0X2ZsYWdzCiAKKworSFRNTFRyYW5zbGF0b3IudmlzaXRfbGl0ZXJhbF9ibG9jayA9IG5ld192aXNpdF9saXRlcmFsX2Jsb2NrCiBMYVRlWFRyYW5zbGF0b3IuZGVwYXJ0X2xpdGVyYWxfYmxvY2sgPSBuZXdfZGVwYXJ0X2xpdGVyYWxfYmxvY2sKIAorCiAjIFN1cHBvcnQgZm9yIG1hcmtpbmcgdXAgYW5kIGxpbmtpbmcgdG8gYnVncy5weXRob24ub3JnIGlzc3VlcwogCiBkZWYgaXNzdWVfcm9sZSh0eXAsIHJhd3RleHQsIHRleHQsIGxpbmVubywgaW5saW5lciwgb3B0aW9ucz17fSwgY29udGVudD1bXSk6CkBAIC0xMTcsOSArMTIyLDYgQEAKIAogIyBTdXBwb3J0IGZvciBkb2N1bWVudGluZyBkZWNvcmF0b3JzCiAKLWZyb20gc3BoaW54IGltcG9ydCBhZGRub2RlcwotZnJvbSBzcGhpbnguZG9tYWlucy5weXRob24gaW1wb3J0IFB5TW9kdWxlbGV2ZWwsIFB5Q2xhc3NtZW1iZXIKLQogY2xhc3MgUHlEZWNvcmF0b3JNaXhpbihvYmplY3QpOgogICAgIGRlZiBoYW5kbGVfc2lnbmF0dXJlKHNlbGYsIHNpZywgc2lnbm9kZSk6CiAgICAgICAgIHJldCA9IHN1cGVyKFB5RGVjb3JhdG9yTWl4aW4sIHNlbGYpLmhhbmRsZV9zaWduYXR1cmUoc2lnLCBzaWdub2RlKQpAQCAtMTI5LDE4ICsxMzEsMzkgQEAKICAgICBkZWYgbmVlZHNfYXJnbGlzdChzZWxmKToKICAgICAgICAgcmV0dXJuIEZhbHNlCiAKKwogY2xhc3MgUHlEZWNvcmF0b3JGdW5jdGlvbihQeURlY29yYXRvck1peGluLCBQeU1vZHVsZWxldmVsKToKICAgICBkZWYgcnVuKHNlbGYpOgogICAgICAgICAjIGEgZGVjb3JhdG9yIGZ1bmN0aW9uIGlzIGEgZnVuY3Rpb24gYWZ0ZXIgYWxsCiAgICAgICAgIHNlbGYubmFtZSA9ICdweTpmdW5jdGlvbicKICAgICAgICAgcmV0dXJuIFB5TW9kdWxlbGV2ZWwucnVuKHNlbGYpCiAKKwogY2xhc3MgUHlEZWNvcmF0b3JNZXRob2QoUHlEZWNvcmF0b3JNaXhpbiwgUHlDbGFzc21lbWJlcik6CiAgICAgZGVmIHJ1bihzZWxmKToKICAgICAgICAgc2VsZi5uYW1lID0gJ3B5Om1ldGhvZCcKICAgICAgICAgcmV0dXJuIFB5Q2xhc3NtZW1iZXIucnVuKHNlbGYpCiAKIAorY2xhc3MgUHlDb3JvdXRpbmVNaXhpbihvYmplY3QpOgorICAgIGRlZiBoYW5kbGVfc2lnbmF0dXJlKHNlbGYsIHNpZywgc2lnbm9kZSk6CisgICAgICAgIHJldCA9IHN1cGVyKFB5Q29yb3V0aW5lTWl4aW4sIHNlbGYpLmhhbmRsZV9zaWduYXR1cmUoc2lnLCBzaWdub2RlKQorICAgICAgICBzaWdub2RlLmluc2VydCgwLCBhZGRub2Rlcy5kZXNjX2Fubm90YXRpb24oJ2Nvcm91dGluZSAnLCAnY29yb3V0aW5lICcpKQorICAgICAgICByZXR1cm4gcmV0CisKKworY2xhc3MgUHlDb3JvdXRpbmVGdW5jdGlvbihQeUNvcm91dGluZU1peGluLCBQeU1vZHVsZWxldmVsKToKKyAgICBkZWYgcnVuKHNlbGYpOgorICAgICAgICBzZWxmLm5hbWUgPSAncHk6ZnVuY3Rpb24nCisgICAgICAgIHJldHVybiBQeU1vZHVsZWxldmVsLnJ1bihzZWxmKQorCisKK2NsYXNzIFB5Q29yb3V0aW5lTWV0aG9kKFB5Q29yb3V0aW5lTWl4aW4sIFB5Q2xhc3NtZW1iZXIpOgorICAgIGRlZiBydW4oc2VsZik6CisgICAgICAgIHNlbGYubmFtZSA9ICdweTptZXRob2QnCisgICAgICAgIHJldHVybiBQeUNsYXNzbWVtYmVyLnJ1bihzZWxmKQorCisKICMgU3VwcG9ydCBmb3IgZG9jdW1lbnRpbmcgdmVyc2lvbiBvZiByZW1vdmFsIGluIGRlcHJlY2F0aW9ucwogCiBjbGFzcyBEZXByZWNhdGVkUmVtb3ZlZChEaXJlY3RpdmUpOgpAQCAtMTY4LDM1ICsxOTEsMzEgQEAKICAgICAgICAgICAgIG1lc3NhZ2VzID0gW10KICAgICAgICAgaWYgc2VsZi5jb250ZW50OgogICAgICAgICAgICAgc2VsZi5zdGF0ZS5uZXN0ZWRfcGFyc2Uoc2VsZi5jb250ZW50LCBzZWxmLmNvbnRlbnRfb2Zmc2V0LCBub2RlKQorICAgICAgICBpZiBsZW4obm9kZSk6CiAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG5vZGVbMF0sIG5vZGVzLnBhcmFncmFwaCkgYW5kIG5vZGVbMF0ucmF3c291cmNlOgogICAgICAgICAgICAgICAgIGNvbnRlbnQgPSBub2Rlcy5pbmxpbmUobm9kZVswXS5yYXdzb3VyY2UsIHRyYW5zbGF0YWJsZT1UcnVlKQogICAgICAgICAgICAgICAgIGNvbnRlbnQuc291cmNlID0gbm9kZVswXS5zb3VyY2UKICAgICAgICAgICAgICAgICBjb250ZW50LmxpbmUgPSBub2RlWzBdLmxpbmUKICAgICAgICAgICAgICAgICBjb250ZW50ICs9IG5vZGVbMF0uY2hpbGRyZW4KICAgICAgICAgICAgICAgICBub2RlWzBdLnJlcGxhY2Vfc2VsZihub2Rlcy5wYXJhZ3JhcGgoJycsICcnLCBjb250ZW50KSkKLSAgICAgICAgICAgIGlmIG5vdCBTUEhJTlgxMToKLSAgICAgICAgICAgICAgICBub2RlWzBdLmluc2VydCgwLCBub2Rlcy5pbmxpbmUoJycsICclczogJyAlIHRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzZXM9Wyd2ZXJzaW9ubW9kaWZpZWQnXSkpCi0gICAgICAgIGVsaWYgbm90IFNQSElOWDExOgorICAgICAgICAgICAgbm9kZVswXS5pbnNlcnQoMCwgbm9kZXMuaW5saW5lKCcnLCAnJXM6ICcgJSB0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzZXM9Wyd2ZXJzaW9ubW9kaWZpZWQnXSkpCisgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBwYXJhID0gbm9kZXMucGFyYWdyYXBoKCcnLCAnJywKLSAgICAgICAgICAgICAgICBub2Rlcy5pbmxpbmUoJycsICclcy4nICUgdGV4dCwgY2xhc3Nlcz1bJ3ZlcnNpb25tb2RpZmllZCddKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZXMuaW5saW5lKCcnLCAnJXMuJyAlIHRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc2VzPVsndmVyc2lvbm1vZGlmaWVkJ10pKQogICAgICAgICAgICAgbm9kZS5hcHBlbmQocGFyYSkKICAgICAgICAgZW52ID0gc2VsZi5zdGF0ZS5kb2N1bWVudC5zZXR0aW5ncy5lbnYKICAgICAgICAgZW52Lm5vdGVfdmVyc2lvbmNoYW5nZSgnZGVwcmVjYXRlZCcsIHZlcnNpb25bMF0sIG5vZGUsIHNlbGYubGluZW5vKQogICAgICAgICByZXR1cm4gW25vZGVdICsgbWVzc2FnZXMKIAotIyBmb3IgU3BoaW54IDwgMS4yCi12ZXJzaW9ubGFiZWxzWydkZXByZWNhdGVkLXJlbW92ZWQnXSA9IERlcHJlY2F0ZWRSZW1vdmVkLl9sYWJlbAotCiAKICMgU3VwcG9ydCBmb3IgaW5jbHVkaW5nIE1pc2MvTkVXUwogCi1pbXBvcnQgcmUKLWltcG9ydCBjb2RlY3MKLQogaXNzdWVfcmUgPSByZS5jb21waWxlKCcoW0lpXSlzc3VlICMoWzAtOV0rKScpCiB3aGF0c25ld19yZSA9IHJlLmNvbXBpbGUociIoP2ltKV53aGF0J3MgbmV3IGluICguKj8pXD8/JCIpCiAKKwogY2xhc3MgTWlzY05ld3MoRGlyZWN0aXZlKToKICAgICBoYXNfY29udGVudCA9IEZhbHNlCiAgICAgcmVxdWlyZWRfYXJndW1lbnRzID0gMQpAQCAtMjIxLDcgKzI0MCw3IEBACiAgICAgICAgICAgICB0ZXh0ID0gJ1RoZSBORVdTIGZpbGUgaXMgbm90IGF2YWlsYWJsZS4nCiAgICAgICAgICAgICBub2RlID0gbm9kZXMuc3Ryb25nKHRleHQsIHRleHQpCiAgICAgICAgICAgICByZXR1cm4gW25vZGVdCi0gICAgICAgIGNvbnRlbnQgPSBpc3N1ZV9yZS5zdWIocidgXDFzc3VlICNcMiA8aHR0cDovL2J1Z3MucHl0aG9uLm9yZy9cMj5gX18nLAorICAgICAgICBjb250ZW50ID0gaXNzdWVfcmUuc3ViKHInYFwxc3N1ZSAjXDIgPGh0dHBzOi8vYnVncy5weXRob24ub3JnL1wyPmBfXycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudCkKICAgICAgICAgY29udGVudCA9IHdoYXRzbmV3X3JlLnN1YihyJ1wxJywgY29udGVudCkKICAgICAgICAgIyByZW1vdmUgZmlyc3QgMyBsaW5lcyBhcyB0aGV5IGFyZSB0aGUgbWFpbiBoZWFkaW5nCkBAIC0yNTAsMTUgKzI2OSw2IEBACiAgICAgJ3R5cGVzc2VxJywgJ3R5cGVzc2VxLW11dGFibGUnLCAndW5hcnknLCAnd2hpbGUnLCAnd2l0aCcsICd5aWVsZCcKIF0KIAotZnJvbSBvcyBpbXBvcnQgcGF0aAotZnJvbSB0aW1lIGltcG9ydCBhc2N0aW1lCi1mcm9tIHBwcmludCBpbXBvcnQgcGZvcm1hdAotZnJvbSBkb2N1dGlscy5pbyBpbXBvcnQgU3RyaW5nT3V0cHV0Ci1mcm9tIGRvY3V0aWxzLnV0aWxzIGltcG9ydCBuZXdfZG9jdW1lbnQKLQotZnJvbSBzcGhpbnguYnVpbGRlcnMgaW1wb3J0IEJ1aWxkZXIKLWZyb20gc3BoaW54LndyaXRlcnMudGV4dCBpbXBvcnQgVGV4dFdyaXRlcgotCiAKIGNsYXNzIFB5ZG9jVG9waWNzQnVpbGRlcihCdWlsZGVyKToKICAgICBuYW1lID0gJ3B5ZG9jLXRvcGljcycKQEAgLTI4NiwyOSArMjk2LDIzIEBACiAgICAgICAgICAgICBkb2N1bWVudC5hcHBlbmQoZG9jdHJlZS5pZHNbbGFiZWxpZF0pCiAgICAgICAgICAgICBkZXN0aW5hdGlvbiA9IFN0cmluZ091dHB1dChlbmNvZGluZz0ndXRmLTgnKQogICAgICAgICAgICAgd3JpdGVyLndyaXRlKGRvY3VtZW50LCBkZXN0aW5hdGlvbikKLSAgICAgICAgICAgIHNlbGYudG9waWNzW2xhYmVsXSA9IHdyaXRlci5vdXRwdXQuZW5jb2RlKCd1dGYtOCcpCisgICAgICAgICAgICBzZWxmLnRvcGljc1tsYWJlbF0gPSB3cml0ZXIub3V0cHV0CiAKICAgICBkZWYgZmluaXNoKHNlbGYpOgotICAgICAgICBmID0gb3BlbihwYXRoLmpvaW4oc2VsZi5vdXRkaXIsICd0b3BpY3MucHknKSwgJ3cnKQorICAgICAgICBmID0gb3BlbihwYXRoLmpvaW4oc2VsZi5vdXRkaXIsICd0b3BpY3MucHknKSwgJ3diJykKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgZi53cml0ZSgnIyAtKi0gY29kaW5nOiB1dGYtOCAtKi1cbicpCi0gICAgICAgICAgICBmLndyaXRlKCcjIEF1dG9nZW5lcmF0ZWQgYnkgU3BoaW54IG9uICVzXG4nICUgYXNjdGltZSgpKQotICAgICAgICAgICAgZi53cml0ZSgndG9waWNzID0gJyArIHBmb3JtYXQoc2VsZi50b3BpY3MpICsgJ1xuJykKKyAgICAgICAgICAgIGYud3JpdGUoJyMgLSotIGNvZGluZzogdXRmLTggLSotXG4nLmVuY29kZSgndXRmLTgnKSkKKyAgICAgICAgICAgIGYud3JpdGUoKCcjIEF1dG9nZW5lcmF0ZWQgYnkgU3BoaW54IG9uICVzXG4nICUgYXNjdGltZSgpKS5lbmNvZGUoJ3V0Zi04JykpCisgICAgICAgICAgICBmLndyaXRlKCgndG9waWNzID0gJyArIHBmb3JtYXQoc2VsZi50b3BpY3MpICsgJ1xuJykuZW5jb2RlKCd1dGYtOCcpKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgZi5jbG9zZSgpCiAKIAotIyBTdXBwb3J0IGZvciBjaGVja2luZyBmb3Igc3VzcGljaW91cyBtYXJrdXAKLQotaW1wb3J0IHN1c3BpY2lvdXMKLQotCiAjIFN1cHBvcnQgZm9yIGRvY3VtZW50aW5nIE9wY29kZXMKIAotaW1wb3J0IHJlCi0KIG9wY29kZV9zaWdfcmUgPSByZS5jb21waWxlKHInKFx3Kyg/OlwrXGQpPykoPzpccypcKCguKilcKSk/JykKIAorCiBkZWYgcGFyc2Vfb3Bjb2RlX3NpZ25hdHVyZShlbnYsIHNpZywgc2lnbm9kZSk6CiAgICAgIiIiVHJhbnNmb3JtIGFuIG9wY29kZSBzaWduYXR1cmUgaW50byBSU1Qgbm9kZXMuIiIiCiAgICAgbSA9IG9wY29kZV9zaWdfcmUubWF0Y2goc2lnKQpAQCAtMzI4LDEyICszMzIsMTMgQEAKIHBkYmNtZF9zaWdfcmUgPSByZS5jb21waWxlKHInKFthLXooKSFdKylccyooLiopJykKIAogIyBsYXRlci4uLgotI3BkYmFyZ3NfdG9rZW5zX3JlID0gcmUuY29tcGlsZShyJycnW2EtekEtWl0rICB8ICAjIGlkZW50aWZpZXJzCisjIHBkYmFyZ3NfdG9rZW5zX3JlID0gcmUuY29tcGlsZShyJycnW2EtekEtWl0rICB8ICAjIGlkZW50aWZpZXJzCiAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbLiw6XSsgICAgIHwgICMgcHVuY3R1YXRpb24KICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtcW1xdKCldICAgfCAgIyBwYXJlbnMKICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxzKyAgICAgICAgICAgIyB3aGl0ZXNwYWNlCiAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJycsIHJlLlgpCiAKKwogZGVmIHBhcnNlX3BkYl9jb21tYW5kKGVudiwgc2lnLCBzaWdub2RlKToKICAgICAiIiJUcmFuc2Zvcm0gYSBwZGIgY29tbWFuZCBzaWduYXR1cmUgaW50byBSU1Qgbm9kZXMuIiIiCiAgICAgbSA9IHBkYmNtZF9zaWdfcmUubWF0Y2goc2lnKQpAQCAtMzYxLDQgKzM2Niw3IEBACiAgICAgYXBwLmFkZF9kZXNjcmlwdGlvbl91bml0KCcydG8zZml4ZXInLCAnMnRvM2ZpeGVyJywgJyVzICgydG8zIGZpeGVyKScpCiAgICAgYXBwLmFkZF9kaXJlY3RpdmVfdG9fZG9tYWluKCdweScsICdkZWNvcmF0b3InLCBQeURlY29yYXRvckZ1bmN0aW9uKQogICAgIGFwcC5hZGRfZGlyZWN0aXZlX3RvX2RvbWFpbigncHknLCAnZGVjb3JhdG9ybWV0aG9kJywgUHlEZWNvcmF0b3JNZXRob2QpCisgICAgYXBwLmFkZF9kaXJlY3RpdmVfdG9fZG9tYWluKCdweScsICdjb3JvdXRpbmVmdW5jdGlvbicsIFB5Q29yb3V0aW5lRnVuY3Rpb24pCisgICAgYXBwLmFkZF9kaXJlY3RpdmVfdG9fZG9tYWluKCdweScsICdjb3JvdXRpbmVtZXRob2QnLCBQeUNvcm91dGluZU1ldGhvZCkKICAgICBhcHAuYWRkX2RpcmVjdGl2ZSgnbWlzY25ld3MnLCBNaXNjTmV3cykKKyAgICByZXR1cm4geyd2ZXJzaW9uJzogJzEuMCcsICdwYXJhbGxlbF9yZWFkX3NhZmUnOiBUcnVlfQpkaWZmIC0tZ2l0IGEvRG9jL3Rvb2xzL3NwaGlueGV4dC9zdXNwaWNpb3VzLnB5IGIvRG9jL3Rvb2xzL2V4dGVuc2lvbnMvc3VzcGljaW91cy5weQpzaW1pbGFyaXR5IGluZGV4IDk4JQpyZW5hbWUgZnJvbSBEb2MvdG9vbHMvc3BoaW54ZXh0L3N1c3BpY2lvdXMucHkKcmVuYW1lIHRvIERvYy90b29scy9leHRlbnNpb25zL3N1c3BpY2lvdXMucHkKaW5kZXggZWU4NzczMy4uZDNlZDg0OSAxMDA2NDQKLS0tIGEvRG9jL3Rvb2xzL3NwaGlueGV4dC9zdXNwaWNpb3VzLnB5CisrKyBiL0RvYy90b29scy9leHRlbnNpb25zL3N1c3BpY2lvdXMucHkKQEAgLTkxLDcgKzkxLDcgQEAKICAgICAgICAgc2VsZi5sb2dfZmlsZV9uYW1lID0gb3MucGF0aC5qb2luKHNlbGYub3V0ZGlyLCAnc3VzcGljaW91cy5jc3YnKQogICAgICAgICBvcGVuKHNlbGYubG9nX2ZpbGVfbmFtZSwgJ3cnKS5jbG9zZSgpCiAgICAgICAgICMgbG9hZCBkYXRhYmFzZSBvZiBwcmV2aW91c2x5IGlnbm9yZWQgaXNzdWVzCi0gICAgICAgIHNlbGYubG9hZF9ydWxlcyhvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwKKyAgICAgICAgc2VsZi5sb2FkX3J1bGVzKG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAnLi4nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzdXNwLWlnbm9yZWQuY3N2JykpCiAKICAgICBkZWYgZ2V0X291dGRhdGVkX2RvY3Moc2VsZik6CmRpZmYgLS1naXQgYS9Eb2MvdG9vbHMvc3BoaW54ZXh0L3B5ZG9jdGhlbWUvc3RhdGljL3B5ZG9jdGhlbWUuY3NzIGIvRG9jL3Rvb2xzL3B5ZG9jdGhlbWUvc3RhdGljL3B5ZG9jdGhlbWUuY3NzCnNpbWlsYXJpdHkgaW5kZXggOTIlCnJlbmFtZSBmcm9tIERvYy90b29scy9zcGhpbnhleHQvcHlkb2N0aGVtZS9zdGF0aWMvcHlkb2N0aGVtZS5jc3MKcmVuYW1lIHRvIERvYy90b29scy9weWRvY3RoZW1lL3N0YXRpYy9weWRvY3RoZW1lLmNzcwppbmRleCAzZDk5NWQ4Li41MDgzNWJiIDEwMDY0NAotLS0gYS9Eb2MvdG9vbHMvc3BoaW54ZXh0L3B5ZG9jdGhlbWUvc3RhdGljL3B5ZG9jdGhlbWUuY3NzCisrKyBiL0RvYy90b29scy9weWRvY3RoZW1lL3N0YXRpYy9weWRvY3RoZW1lLmNzcwpAQCAtOTQsMzEgKzk0LDMxIEBACiB9CiAKIGRpdi5ib2R5IGEgewotICAgIGNvbG9yOiAjMDA2MDhmOworICAgIGNvbG9yOiAjMDA3MmFhOwogfQogCiBkaXYuYm9keSBhOnZpc2l0ZWQgewotICAgIGNvbG9yOiAjMzAzMDZmOworICAgIGNvbG9yOiAjNjM2M2JiOwogfQogCiBkaXYuYm9keSBhOmhvdmVyIHsKICAgICBjb2xvcjogIzAwQjBFNDsKIH0KIAotdHQsIHByZSB7Cit0dCwgY29kZSwgcHJlIHsKICAgICBmb250LWZhbWlseTogbW9ub3NwYWNlLCBzYW5zLXNlcmlmOwogICAgIGZvbnQtc2l6ZTogOTYuNSU7CiB9CiAKLWRpdi5ib2R5IHR0IHsKK2Rpdi5ib2R5IHR0LCBkaXYuYm9keSBjb2RlIHsKICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiB9CiAKLWRpdi5ib2R5IHR0LmRlc2NuYW1lIHsKK2Rpdi5ib2R5IHR0LmRlc2NuYW1lLCBkaXYuYm9keSBjb2RlLmRlc2NuYW1lIHsKICAgICBmb250LXNpemU6IDEyMCU7CiB9CiAKLWRpdi5ib2R5IHR0LnhyZWYsIGRpdi5ib2R5IGEgdHQgeworZGl2LmJvZHkgdHQueHJlZiwgZGl2LmJvZHkgYSB0dCwgZGl2LmJvZHkgY29kZS54cmVmLCBkaXYuYm9keSBhIGNvZGUgewogICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiB9CiAKZGlmZiAtLWdpdCBhL0RvYy90b29scy9zcGhpbnhleHQvcHlkb2N0aGVtZS90aGVtZS5jb25mIGIvRG9jL3Rvb2xzL3B5ZG9jdGhlbWUvdGhlbWUuY29uZgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jL3Rvb2xzL3NwaGlueGV4dC9weWRvY3RoZW1lL3RoZW1lLmNvbmYKcmVuYW1lIHRvIERvYy90b29scy9weWRvY3RoZW1lL3RoZW1lLmNvbmYKZGlmZiAtLWdpdCBhL0RvYy90b29scy9yb21hbi5weSBiL0RvYy90b29scy9yb21hbi5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODllZjYxNy4uMDAwMDAwMAotLS0gYS9Eb2MvdG9vbHMvcm9tYW4ucHkKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi0iIiJDb252ZXJ0IHRvIGFuZCBmcm9tIFJvbWFuIG51bWVyYWxzIiIiCi0KLV9fYXV0aG9yX18gPSAiTWFyayBQaWxncmltIChmOGR5QGRpdmVpbnRvcHl0aG9uLm9yZykiCi1fX3ZlcnNpb25fXyA9ICIxLjQiCi1fX2RhdGVfXyA9ICI4IEF1Z3VzdCAyMDAxIgotX19jb3B5cmlnaHRfXyA9ICIiIkNvcHlyaWdodCAoYykgMjAwMSBNYXJrIFBpbGdyaW0KLQotVGhpcyBwcm9ncmFtIGlzIHBhcnQgb2YgIkRpdmUgSW50byBQeXRob24iLCBhIGZyZWUgUHl0aG9uIHR1dG9yaWFsIGZvcgotZXhwZXJpZW5jZWQgcHJvZ3JhbW1lcnMuICBWaXNpdCBodHRwOi8vZGl2ZWludG9weXRob24ub3JnLyBmb3IgdGhlCi1sYXRlc3QgdmVyc2lvbi4KLQotVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgUHl0aG9uIDIuMS4xIGxpY2Vuc2UsIGF2YWlsYWJsZSBhdAotaHR0cDovL3d3dy5weXRob24ub3JnLzIuMS4xL2xpY2Vuc2UuaHRtbAotIiIiCi0KLWltcG9ydCByZQotCi0jRGVmaW5lIGV4Y2VwdGlvbnMKLWNsYXNzIFJvbWFuRXJyb3IoRXhjZXB0aW9uKTogcGFzcwotY2xhc3MgT3V0T2ZSYW5nZUVycm9yKFJvbWFuRXJyb3IpOiBwYXNzCi1jbGFzcyBOb3RJbnRlZ2VyRXJyb3IoUm9tYW5FcnJvcik6IHBhc3MKLWNsYXNzIEludmFsaWRSb21hbk51bWVyYWxFcnJvcihSb21hbkVycm9yKTogcGFzcwotCi0jRGVmaW5lIGRpZ2l0IG1hcHBpbmcKLXJvbWFuTnVtZXJhbE1hcCA9ICgoJ00nLCAgMTAwMCksCi0gICAgICAgICAgICAgICAgICAgKCdDTScsIDkwMCksCi0gICAgICAgICAgICAgICAgICAgKCdEJywgIDUwMCksCi0gICAgICAgICAgICAgICAgICAgKCdDRCcsIDQwMCksCi0gICAgICAgICAgICAgICAgICAgKCdDJywgIDEwMCksCi0gICAgICAgICAgICAgICAgICAgKCdYQycsIDkwKSwKLSAgICAgICAgICAgICAgICAgICAoJ0wnLCAgNTApLAotICAgICAgICAgICAgICAgICAgICgnWEwnLCA0MCksCi0gICAgICAgICAgICAgICAgICAgKCdYJywgIDEwKSwKLSAgICAgICAgICAgICAgICAgICAoJ0lYJywgOSksCi0gICAgICAgICAgICAgICAgICAgKCdWJywgIDUpLAotICAgICAgICAgICAgICAgICAgICgnSVYnLCA0KSwKLSAgICAgICAgICAgICAgICAgICAoJ0knLCAgMSkpCi0KLWRlZiB0b1JvbWFuKG4pOgotICAgICIiImNvbnZlcnQgaW50ZWdlciB0byBSb21hbiBudW1lcmFsIiIiCi0gICAgaWYgbm90ICgwIDwgbiA8IDUwMDApOgotICAgICAgICByYWlzZSBPdXRPZlJhbmdlRXJyb3IoIm51bWJlciBvdXQgb2YgcmFuZ2UgKG11c3QgYmUgMS4uNDk5OSkiKQotICAgIGlmIGludChuKSAhPSBuOgotICAgICAgICByYWlzZSBOb3RJbnRlZ2VyRXJyb3IoImRlY2ltYWxzIGNhbiBub3QgYmUgY29udmVydGVkIikKLQotICAgIHJlc3VsdCA9ICIiCi0gICAgZm9yIG51bWVyYWwsIGludGVnZXIgaW4gcm9tYW5OdW1lcmFsTWFwOgotICAgICAgICB3aGlsZSBuID49IGludGVnZXI6Ci0gICAgICAgICAgICByZXN1bHQgKz0gbnVtZXJhbAotICAgICAgICAgICAgbiAtPSBpbnRlZ2VyCi0gICAgcmV0dXJuIHJlc3VsdAotCi0jRGVmaW5lIHBhdHRlcm4gdG8gZGV0ZWN0IHZhbGlkIFJvbWFuIG51bWVyYWxzCi1yb21hbk51bWVyYWxQYXR0ZXJuID0gcmUuY29tcGlsZSgiIiIKLSAgICBeICAgICAgICAgICAgICAgICAgICMgYmVnaW5uaW5nIG9mIHN0cmluZwotICAgIE17MCw0fSAgICAgICAgICAgICAgIyB0aG91c2FuZHMgLSAwIHRvIDQgTSdzCi0gICAgKENNfENEfEQ/Q3swLDN9KSAgICAjIGh1bmRyZWRzIC0gOTAwIChDTSksIDQwMCAoQ0QpLCAwLTMwMCAoMCB0byAzIEMncyksCi0gICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgb3IgNTAwLTgwMCAoRCwgZm9sbG93ZWQgYnkgMCB0byAzIEMncykKLSAgICAoWEN8WEx8TD9YezAsM30pICAgICMgdGVucyAtIDkwIChYQyksIDQwIChYTCksIDAtMzAgKDAgdG8gMyBYJ3MpLAotICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgb3IgNTAtODAgKEwsIGZvbGxvd2VkIGJ5IDAgdG8gMyBYJ3MpCi0gICAgKElYfElWfFY/SXswLDN9KSAgICAjIG9uZXMgLSA5IChJWCksIDQgKElWKSwgMC0zICgwIHRvIDMgSSdzKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgIG9yIDUtOCAoViwgZm9sbG93ZWQgYnkgMCB0byAzIEkncykKLSAgICAkICAgICAgICAgICAgICAgICAgICMgZW5kIG9mIHN0cmluZwotICAgICIiIiAscmUuVkVSQk9TRSkKLQotZGVmIGZyb21Sb21hbihzKToKLSAgICAiIiJjb252ZXJ0IFJvbWFuIG51bWVyYWwgdG8gaW50ZWdlciIiIgotICAgIGlmIG5vdCBzOgotICAgICAgICByYWlzZSBJbnZhbGlkUm9tYW5OdW1lcmFsRXJyb3IoJ0lucHV0IGNhbiBub3QgYmUgYmxhbmsnKQotICAgIGlmIG5vdCByb21hbk51bWVyYWxQYXR0ZXJuLnNlYXJjaChzKToKLSAgICAgICAgcmFpc2UgSW52YWxpZFJvbWFuTnVtZXJhbEVycm9yKCdJbnZhbGlkIFJvbWFuIG51bWVyYWw6ICVzJyAlIHMpCi0KLSAgICByZXN1bHQgPSAwCi0gICAgaW5kZXggPSAwCi0gICAgZm9yIG51bWVyYWwsIGludGVnZXIgaW4gcm9tYW5OdW1lcmFsTWFwOgotICAgICAgICB3aGlsZSBzW2luZGV4OmluZGV4K2xlbihudW1lcmFsKV0gPT0gbnVtZXJhbDoKLSAgICAgICAgICAgIHJlc3VsdCArPSBpbnRlZ2VyCi0gICAgICAgICAgICBpbmRleCArPSBsZW4obnVtZXJhbCkKLSAgICByZXR1cm4gcmVzdWx0CmRpZmYgLS1naXQgYS9Eb2MvdG9vbHMvcnN0bGludC5weSBiL0RvYy90b29scy9yc3RsaW50LnB5CmluZGV4IDJjYzNkMTIuLjdkY2NmNzIgMTAwNzU1Ci0tLSBhL0RvYy90b29scy9yc3RsaW50LnB5CisrKyBiL0RvYy90b29scy9yc3RsaW50LnB5CkBAIC0xNSw3ICsxNSw2IEBACiBpbXBvcnQgcmUKIGltcG9ydCBzeXMKIGltcG9ydCBnZXRvcHQKLWltcG9ydCBzdWJwcm9jZXNzCiBmcm9tIG9zLnBhdGggaW1wb3J0IGpvaW4sIHNwbGl0ZXh0LCBhYnNwYXRoLCBleGlzdHMKIGZyb20gY29sbGVjdGlvbnMgaW1wb3J0IGRlZmF1bHRkaWN0CiAKQEAgLTI4LDE0ICsyNywxNiBAQAogICAgICdwYXJzZWQtbGl0ZXJhbCcsICdwdWxsLXF1b3RlJywgJ3JhdycsICdyZXBsYWNlJywKICAgICAncmVzdHJ1Y3R1cmVkdGV4dC10ZXN0LWRpcmVjdGl2ZScsICdyb2xlJywgJ3J1YnJpYycsICdzZWN0bnVtJywgJ3NpZGViYXInLAogICAgICd0YWJsZScsICd0YXJnZXQtbm90ZXMnLCAndGlwJywgJ3RpdGxlJywgJ3RvcGljJywgJ3VuaWNvZGUnLCAnd2FybmluZycsCi0gICAgIyBTcGhpbnggY3VzdG9tIG9uZXMKKyAgICAjIFNwaGlueCBhbmQgUHl0aG9uIGRvY3MgY3VzdG9tIG9uZXMKICAgICAnYWNrcycsICdhdHRyaWJ1dGUnLCAnYXV0b2F0dHJpYnV0ZScsICdhdXRvY2xhc3MnLCAnYXV0b2RhdGEnLAogICAgICdhdXRvZXhjZXB0aW9uJywgJ2F1dG9mdW5jdGlvbicsICdhdXRvbWV0aG9kJywgJ2F1dG9tb2R1bGUnLCAnY2VudGVyZWQnLAogICAgICdjZnVuY3Rpb24nLCAnY2xhc3MnLCAnY2xhc3NtZXRob2QnLCAnY21hY3JvJywgJ2NtZG9wdGlvbicsICdjbWVtYmVyJywKICAgICAnY29kZS1ibG9jaycsICdjb25mdmFsJywgJ2Nzc2NsYXNzJywgJ2N0eXBlJywgJ2N1cnJlbnRtb2R1bGUnLCAnY3ZhcicsCi0gICAgJ2RhdGEnLCAnZGVwcmVjYXRlZCcsICdkZXNjcmliZScsICdkaXJlY3RpdmUnLCAnZG9jdGVzdCcsICdlbnZ2YXInLCAnZXZlbnQnLAotICAgICdleGNlcHRpb24nLCAnZnVuY3Rpb24nLCAnZ2xvc3NhcnknLCAnaGlnaGxpZ2h0JywgJ2hpZ2hsaWdodGxhbmcnLCAnaW5kZXgnLAotICAgICdsaXRlcmFsaW5jbHVkZScsICdtZXRob2QnLCAnbW9kdWxlJywgJ21vZHVsZWF1dGhvcicsICdwcm9kdWN0aW9ubGlzdCcsCisgICAgJ2RhdGEnLCAnZGVjb3JhdG9yJywgJ2RlY29yYXRvcm1ldGhvZCcsICdkZXByZWNhdGVkLXJlbW92ZWQnLAorICAgICdkZXByZWNhdGVkKD8hLXJlbW92ZWQpJywgJ2Rlc2NyaWJlJywgJ2RpcmVjdGl2ZScsICdkb2N0ZXN0JywgJ2VudnZhcicsCisgICAgJ2V2ZW50JywgJ2V4Y2VwdGlvbicsICdmdW5jdGlvbicsICdnbG9zc2FyeScsICdoaWdobGlnaHQnLCAnaGlnaGxpZ2h0bGFuZycsCisgICAgJ2ltcGwtZGV0YWlsJywgJ2luZGV4JywgJ2xpdGVyYWxpbmNsdWRlJywgJ21ldGhvZCcsICdtaXNjbmV3cycsICdtb2R1bGUnLAorICAgICdtb2R1bGVhdXRob3InLCAnb3Bjb2RlJywgJ3BkYmNvbW1hbmQnLCAncHJvZHVjdGlvbmxpc3QnLAogICAgICdwcm9ncmFtJywgJ3JvbGUnLCAnc2VjdGlvbmF1dGhvcicsICdzZWVhbHNvJywgJ3NvdXJjZWNvZGUnLCAnc3RhdGljbWV0aG9kJywKICAgICAndGFidWxhcmNvbHVtbnMnLCAndGVzdGNvZGUnLCAndGVzdG91dHB1dCcsICd0ZXN0c2V0dXAnLCAndG9jdHJlZScsICd0b2RvJywKICAgICAndG9kb2xpc3QnLCAndmVyc2lvbmFkZGVkJywgJ3ZlcnNpb25jaGFuZ2VkJwpAQCAtNDQsMTMgKzQ1LDE0IEBACiBhbGxfZGlyZWN0aXZlcyA9ICcoJyArICd8Jy5qb2luKGRpcmVjdGl2ZXMpICsgJyknCiBzZWVtc19kaXJlY3RpdmVfcmUgPSByZS5jb21waWxlKHInXC5cLiAlcyhbXmEtejpdfDooPyE6KSknICUgYWxsX2RpcmVjdGl2ZXMpCiBkZWZhdWx0X3JvbGVfcmUgPSByZS5jb21waWxlKHInKF58IClgXHcoW15gXSo/XHcpP2AoJHwgKScpCi1sZWFrZWRfbWFya3VwX3JlID0gcmUuY29tcGlsZShyJ1thLXpdOjpbXj1dfDpbYS16XSs6fGB8XC5cLlxzKlx3KzonKQorbGVha2VkX21hcmt1cF9yZSA9IHJlLmNvbXBpbGUocidbYS16XTo6XHN8YHxcLlwuXHMqXHcrOicpCiAKIAogY2hlY2tlcnMgPSB7fQogCiBjaGVja2VyX3Byb3BzID0geydzZXZlcml0eSc6IDEsICdmYWxzZXBvc2l0aXZlcyc6IEZhbHNlfQogCisKIGRlZiBjaGVja2VyKCpzdWZmaXhlcywgKiprd2RzKToKICAgICAiIiJEZWNvcmF0b3IgdG8gcmVnaXN0ZXIgYSBmdW5jdGlvbiBhcyBhIGNoZWNrZXIuIiIiCiAgICAgZGVmIGRlY28oZnVuYyk6CkBAIC0xNzEsMTAgKzE3Myw2IEBACiAgICAgY291bnQgPSBkZWZhdWx0ZGljdChpbnQpCiAKICAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhwYXRoKToKLSAgICAgICAgIyBpZ25vcmUgc3ViZGlycyBjb250cm9sbGVkIGJ5IHN2bgotICAgICAgICBpZiAnLnN2bicgaW4gZGlyczoKLSAgICAgICAgICAgIGRpcnMucmVtb3ZlKCcuc3ZuJykKLQogICAgICAgICAjIGlnbm9yZSBzdWJkaXJzIGluIGlnbm9yZSBsaXN0CiAgICAgICAgIGlmIGFic3BhdGgocm9vdCkgaW4gaWdub3JlOgogICAgICAgICAgICAgZGVsIGRpcnNbOl0KQEAgLTE5OCw3ICsxOTYsNyBAQAogICAgICAgICAgICAgICAgIHByaW50KCdDaGVja2luZyAlcy4uLicgJSBmbikKIAogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHdpdGggb3BlbihmbiwgJ3InKSBhcyBmOgorICAgICAgICAgICAgICAgIHdpdGggb3BlbihmbiwgJ3InLCBlbmNvZGluZz0ndXRmLTgnKSBhcyBmOgogICAgICAgICAgICAgICAgICAgICBsaW5lcyA9IGxpc3QoZikKICAgICAgICAgICAgIGV4Y2VwdCAoSU9FcnJvciwgT1NFcnJvcikgYXMgZXJyOgogICAgICAgICAgICAgICAgIHByaW50KCclczogY2Fubm90IG9wZW46ICVzJyAlIChmbiwgZXJyKSkKZGlmZiAtLWdpdCBhL0RvYy90b29scy9zcGhpbngtYnVpbGQucHkgYi9Eb2MvdG9vbHMvc3BoaW54LWJ1aWxkLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkM2ZlNzAyLi4wMDAwMDAwCi0tLSBhL0RvYy90b29scy9zcGhpbngtYnVpbGQucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0jIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQotIiIiCi0gICAgU3BoaW54IC0gUHl0aG9uIGRvY3VtZW50YXRpb24gdG9vbGNoYWluCi0gICAgfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+Ci0KLSAgICA6Y29weXJpZ2h0OiAyMDA3LTIwMTAgYnkgR2VvcmcgQnJhbmRsLgotICAgIDpsaWNlbnNlOiBQeXRob24gbGljZW5zZS4KLSIiIgotCi1pbXBvcnQgc3lzCi1pbXBvcnQgd2FybmluZ3MKLQotIyBHZXQgcmlkIG9mIFVzZXJXYXJuaW5ncyByZXBvcnRlZCBieSBwa2dfcmVzb3VyY2VzLgotd2FybmluZ3MuZmlsdGVyd2FybmluZ3MoJ2lnbm9yZScsIGNhdGVnb3J5PVVzZXJXYXJuaW5nLCBtb2R1bGU9J2ppbmphMicpCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0KLSAgICBpZiBzeXMudmVyc2lvbl9pbmZvWzozXSA8ICgyLCA0LCAwKSBvciBzeXMudmVyc2lvbl9pbmZvWzozXSA+ICgzLCAwLCAwKToKLSAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiIiJcCi1FcnJvcjogU3BoaW54IG5lZWRzIHRvIGJlIGV4ZWN1dGVkIHdpdGggUHl0aG9uIDIuNCBvciBuZXdlciAobm90IDMueCB0aG91Z2gpLgotKElmIHlvdSBydW4gdGhpcyBmcm9tIHRoZSBNYWtlZmlsZSwgeW91IGNhbiBzZXQgdGhlIFBZVEhPTiB2YXJpYWJsZQotdG8gdGhlIHBhdGggb2YgYW4gYWx0ZXJuYXRpdmUgaW50ZXJwcmV0ZXIgZXhlY3V0YWJsZSwgZS5nLiwKLWBgbWFrZSBodG1sIFBZVEhPTj1weXRob24yLjVgYCkuCi0iIiIpCi0gICAgICAgIHN5cy5leGl0KDEpCi0KLSAgICBmcm9tIHNwaGlueCBpbXBvcnQgbWFpbgotICAgIHN5cy5leGl0KG1haW4oc3lzLmFyZ3YpKQpkaWZmIC0tZ2l0IGEvRG9jL3Rvb2xzL3NwaGlueGV4dC9pbmRleHNpZGViYXIuaHRtbCBiL0RvYy90b29scy9zcGhpbnhleHQvaW5kZXhzaWRlYmFyLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwZWMzMmYuLjAwMDAwMDAKLS0tIGEvRG9jL3Rvb2xzL3NwaGlueGV4dC9pbmRleHNpZGViYXIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLSAgICAgICAgICAgIDxoMz5Eb3dubG9hZDwvaDM+Ci0gICAgICAgICAgICA8cD48YSBocmVmPSJ7eyBwYXRodG8oJ2Rvd25sb2FkJykgfX0iPkRvd25sb2FkIHRoZXNlIGRvY3VtZW50czwvYT48L3A+Ci0JICAgIDxoMz5Eb2NzIGZvciBvdGhlciB2ZXJzaW9uczwvaDM+Ci0JICAgIDx1bD4KLQkgICAgICA8bGk+PGEgaHJlZj0iaHR0cDovL2RvY3MucHl0aG9uLm9yZy8yLjcvIj5QeXRob24gMi43IChzdGFibGUpPC9hPjwvbGk+Ci0JICAgICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvMy40LyI+UHl0aG9uIDMuNCAoaW4gZGV2ZWxvcG1lbnQpPC9hPjwvbGk+Ci0gICAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwOi8vd3d3LnB5dGhvbi5vcmcvZG9jL3ZlcnNpb25zLyI+T2xkIHZlcnNpb25zPC9hPjwvbGk+Ci0gICAgICAgICAgICA8L3VsPgotCi0gICAgICAgICAgICA8aDM+T3RoZXIgcmVzb3VyY2VzPC9oMz4KLSAgICAgICAgICAgIDx1bD4KLSAgICAgICAgICAgICAgeyMgWFhYOiBtYW55IG9mIHRoZXNlIHNob3VsZCBwcm9iYWJseSBiZSBtZXJnZWQgaW4gdGhlIG1haW4gZG9jcyAjfQotICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5weXRob24ub3JnL2Rldi9wZXBzLyI+UEVQIEluZGV4PC9hPjwvbGk+Ci0gICAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwOi8vd2lraS5weXRob24ub3JnL21vaW4vQmVnaW5uZXJzR3VpZGUiPkJlZ2lubmVyJ3MgR3VpZGU8L2E+PC9saT4KLSAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly93aWtpLnB5dGhvbi5vcmcvbW9pbi9QeXRob25Cb29rcyI+Qm9vayBMaXN0PC9hPjwvbGk+Ci0gICAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwOi8vd3d3LnB5dGhvbi5vcmcvZG9jL2F2LyI+QXVkaW8vVmlzdWFsIFRhbGtzPC9hPjwvbGk+Ci0gICAgICAgICAgICA8L3VsPgpkaWZmIC0tZ2l0IGEvRG9jL3Rvb2xzL3NwaGlueGV4dC9vcGVuc2VhcmNoLnhtbCBiL0RvYy90b29scy9zcGhpbnhleHQvb3BlbnNlYXJjaC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5Y2VjODAuLjAwMDAwMDAKLS0tIGEvRG9jL3Rvb2xzL3NwaGlueGV4dC9vcGVuc2VhcmNoLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAoteyUgZXh0ZW5kcyAiIW9wZW5zZWFyY2gueG1sIiAlfQoteyUgYmxvY2sgZXh0cmEgLSV9Ci08SW1hZ2UgaGVpZ2h0PSIxNiIgd2lkdGg9IjE2IiB0eXBlPSJpbWFnZS94LWljb24iPmh0dHA6Ly93d3cucHl0aG9uLm9yZy9pbWFnZXMvZmF2aWNvbjE2eDE2LmljbzwvSW1hZ2U+Ci17JS0gZW5kYmxvY2sgJX0KZGlmZiAtLWdpdCBhL0RvYy90b29scy9zcGhpbnhleHQvc3RhdGljL2Jhc2ljLmNzcyBiL0RvYy90b29scy9zcGhpbnhleHQvc3RhdGljL2Jhc2ljLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzI0MmE4MS4uMDAwMDAwMAotLS0gYS9Eb2MvdG9vbHMvc3BoaW54ZXh0L3N0YXRpYy9iYXNpYy5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw0NDUgKzAsMCBAQAotLyoqCi0gKiBTcGhpbnggc3R5bGVzaGVldCAtLSBiYXNpYyB0aGVtZQotICogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KLSAqLwotCi0vKiAtLSBtYWluIGxheW91dCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi1kaXYuY2xlYXJlciB7Ci0gICAgY2xlYXI6IGJvdGg7Ci19Ci0KLS8qIC0tIHJlbGJhciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLWRpdi5yZWxhdGVkIHsKLSAgICB3aWR0aDogMTAwJTsKLSAgICBmb250LXNpemU6IDkwJTsKLX0KLQotZGl2LnJlbGF0ZWQgaDMgewotICAgIGRpc3BsYXk6IG5vbmU7Ci19Ci0KLWRpdi5yZWxhdGVkIHVsIHsKLSAgICBtYXJnaW46IDA7Ci0gICAgcGFkZGluZzogMCAwIDAgMTBweDsKLSAgICBsaXN0LXN0eWxlOiBub25lOwotfQotCi1kaXYucmVsYXRlZCBsaSB7Ci0gICAgZGlzcGxheTogaW5saW5lOwotfQotCi1kaXYucmVsYXRlZCBsaS5yaWdodCB7Ci0gICAgZmxvYXQ6IHJpZ2h0OwotICAgIG1hcmdpbi1yaWdodDogNXB4OwotfQotCi0vKiAtLSBzaWRlYmFyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi1kaXYuc3BoaW54c2lkZWJhcndyYXBwZXIgewotICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKLSAgICB0b3A6IDA7Ci0gICAgcGFkZGluZzogMTBweCA1cHggMCAxMHB4OwotICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKLX0KLQotZGl2LnNwaGlueHNpZGViYXIgewotICAgIGZsb2F0OiBsZWZ0OwotICAgIHdpZHRoOiAyMzBweDsKLSAgICBtYXJnaW4tbGVmdDogLTEwMCU7Ci0gICAgZm9udC1zaXplOiA5MCU7Ci19Ci0KLWRpdi5zcGhpbnhzaWRlYmFyIHVsIHsKLSAgICBsaXN0LXN0eWxlOiBub25lOwotfQotCi1kaXYuc3BoaW54c2lkZWJhciB1bCB1bCwKLWRpdi5zcGhpbnhzaWRlYmFyIHVsLndhbnQtcG9pbnRzIHsKLSAgICBtYXJnaW4tbGVmdDogMjBweDsKLSAgICBsaXN0LXN0eWxlOiBzcXVhcmU7Ci19Ci0KLWRpdi5zcGhpbnhzaWRlYmFyIHVsIHVsIHsKLSAgICBtYXJnaW4tdG9wOiAwOwotICAgIG1hcmdpbi1ib3R0b206IDA7Ci19Ci0KLWRpdi5zcGhpbnhzaWRlYmFyIGZvcm0gewotICAgIG1hcmdpbi10b3A6IDEwcHg7Ci19Ci0KLWRpdi5zcGhpbnhzaWRlYmFyIGlucHV0IHsKLSAgICBib3JkZXI6IDFweCBzb2xpZCAjOThkYmNjOwotICAgIGZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmOwotICAgIGZvbnQtc2l6ZTogMWVtOwotfQotCi1pbWcgewotICAgIGJvcmRlcjogMDsKLX0KLQotLyogLS0gc2VhcmNoIHBhZ2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotdWwuc2VhcmNoIHsKLSAgICBtYXJnaW46IDEwcHggMCAwIDIwcHg7Ci0gICAgcGFkZGluZzogMDsKLX0KLQotdWwuc2VhcmNoIGxpIHsKLSAgICBwYWRkaW5nOiA1cHggMCA1cHggMjBweDsKLSAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoZmlsZS5wbmcpOwotICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7Ci0gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCA3cHg7Ci19Ci0KLXVsLnNlYXJjaCBsaSBhIHsKLSAgICBmb250LXdlaWdodDogYm9sZDsKLX0KLQotdWwuc2VhcmNoIGxpIGRpdi5jb250ZXh0IHsKLSAgICBjb2xvcjogIzg4ODsKLSAgICBtYXJnaW46IDJweCAwIDAgMzBweDsKLSAgICB0ZXh0LWFsaWduOiBsZWZ0OwotfQotCi11bC5rZXl3b3JkbWF0Y2hlcyBsaS5nb29kbWF0Y2ggYSB7Ci0gICAgZm9udC13ZWlnaHQ6IGJvbGQ7Ci19Ci0KLS8qIC0tIGluZGV4IHBhZ2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXRhYmxlLmNvbnRlbnRzdGFibGUgewotICAgIHdpZHRoOiA5MCU7Ci19Ci0KLXRhYmxlLmNvbnRlbnRzdGFibGUgcC5iaWdsaW5rIHsKLSAgICBsaW5lLWhlaWdodDogMTUwJTsKLX0KLQotYS5iaWdsaW5rIHsKLSAgICBmb250LXNpemU6IDEuM2VtOwotfQotCi1zcGFuLmxpbmtkZXNjciB7Ci0gICAgZm9udC1zdHlsZTogaXRhbGljOwotICAgIHBhZGRpbmctdG9wOiA1cHg7Ci0gICAgZm9udC1zaXplOiA5MCU7Ci19Ci0KLS8qIC0tIGdlbmVyYWwgaW5kZXggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXRhYmxlLmluZGV4dGFibGUgdGQgewotICAgIHRleHQtYWxpZ246IGxlZnQ7Ci0gICAgdmVydGljYWwtYWxpZ246IHRvcDsKLX0KLQotdGFibGUuaW5kZXh0YWJsZSBkbCwgdGFibGUuaW5kZXh0YWJsZSBkZCB7Ci0gICAgbWFyZ2luLXRvcDogMDsKLSAgICBtYXJnaW4tYm90dG9tOiAwOwotfQotCi10YWJsZS5pbmRleHRhYmxlIHRyLnBjYXAgewotICAgIGhlaWdodDogMTBweDsKLX0KLQotdGFibGUuaW5kZXh0YWJsZSB0ci5jYXAgewotICAgIG1hcmdpbi10b3A6IDEwcHg7Ci0gICAgYmFja2dyb3VuZC1jb2xvcjogI2YyZjJmMjsKLX0KLQotaW1nLnRvZ2dsZXIgewotICAgIG1hcmdpbi1yaWdodDogM3B4OwotICAgIG1hcmdpbi10b3A6IDNweDsKLSAgICBjdXJzb3I6IHBvaW50ZXI7Ci19Ci0KLS8qIC0tIGdlbmVyYWwgYm9keSBzdHlsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLWEuaGVhZGVybGluayB7Ci0gICAgdmlzaWJpbGl0eTogaGlkZGVuOwotfQotCi1oMTpob3ZlciA+IGEuaGVhZGVybGluaywKLWgyOmhvdmVyID4gYS5oZWFkZXJsaW5rLAotaDM6aG92ZXIgPiBhLmhlYWRlcmxpbmssCi1oNDpob3ZlciA+IGEuaGVhZGVybGluaywKLWg1OmhvdmVyID4gYS5oZWFkZXJsaW5rLAotaDY6aG92ZXIgPiBhLmhlYWRlcmxpbmssCi1kdDpob3ZlciA+IGEuaGVhZGVybGluayB7Ci0gICAgdmlzaWJpbGl0eTogdmlzaWJsZTsKLX0KLQotZGl2LmJvZHkgcC5jYXB0aW9uIHsKLSAgICB0ZXh0LWFsaWduOiBpbmhlcml0OwotfQotCi1kaXYuYm9keSB0ZCB7Ci0gICAgdGV4dC1hbGlnbjogbGVmdDsKLX0KLQotLmZpZWxkLWxpc3QgdWwgewotICAgIHBhZGRpbmctbGVmdDogMWVtOwotfQotCi0uZmlyc3QgewotICAgIG1hcmdpbi10b3A6IDAgIWltcG9ydGFudDsKLX0KLQotcC5ydWJyaWMgewotICAgIG1hcmdpbi10b3A6IDMwcHg7Ci0gICAgZm9udC13ZWlnaHQ6IGJvbGQ7Ci19Ci0KLS8qIC0tIHNpZGViYXJzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLWRpdi5zaWRlYmFyIHsKLSAgICBtYXJnaW46IDAgMCAwLjVlbSAxZW07Ci0gICAgYm9yZGVyOiAxcHggc29saWQgI2RkYjsKLSAgICBwYWRkaW5nOiA3cHggN3B4IDAgN3B4OwotICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmU7Ci0gICAgd2lkdGg6IDQwJTsKLSAgICBmbG9hdDogcmlnaHQ7Ci19Ci0KLXAuc2lkZWJhci10aXRsZSB7Ci0gICAgZm9udC13ZWlnaHQ6IGJvbGQ7Ci19Ci0KLS8qIC0tIHRvcGljcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLWRpdi50b3BpYyB7Ci0gICAgYm9yZGVyOiAxcHggc29saWQgI2NjYzsKLSAgICBwYWRkaW5nOiA3cHggN3B4IDAgN3B4OwotICAgIG1hcmdpbjogMTBweCAwIDEwcHggMDsKLX0KLQotcC50b3BpYy10aXRsZSB7Ci0gICAgZm9udC1zaXplOiAxLjFlbTsKLSAgICBmb250LXdlaWdodDogYm9sZDsKLSAgICBtYXJnaW4tdG9wOiAxMHB4OwotfQotCi0vKiAtLSBhZG1vbml0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi1kaXYuYWRtb25pdGlvbiB7Ci0gICAgbWFyZ2luLXRvcDogMTBweDsKLSAgICBtYXJnaW4tYm90dG9tOiAxMHB4OwotICAgIHBhZGRpbmc6IDdweDsKLX0KLQotZGl2LmFkbW9uaXRpb24gZHQgewotICAgIGZvbnQtd2VpZ2h0OiBib2xkOwotfQotCi1kaXYuYWRtb25pdGlvbiBkbCB7Ci0gICAgbWFyZ2luLWJvdHRvbTogMDsKLX0KLQotcC5hZG1vbml0aW9uLXRpdGxlIHsKLSAgICBtYXJnaW46IDBweCAxMHB4IDVweCAwcHg7Ci0gICAgZm9udC13ZWlnaHQ6IGJvbGQ7Ci19Ci0KLWRpdi5ib2R5IHAuY2VudGVyZWQgewotICAgIHRleHQtYWxpZ246IGNlbnRlcjsKLSAgICBtYXJnaW4tdG9wOiAyNXB4OwotfQotCi0vKiAtLSB0YWJsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi10YWJsZS5kb2N1dGlscyB7Ci0gICAgYm9yZGVyOiAwIHNvbGlkICNkY2U7Ci0gICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsKLX0KLQotdGFibGUuZG9jdXRpbHMgdGQsIHRhYmxlLmRvY3V0aWxzIHRoIHsKLSAgICBwYWRkaW5nOiAycHggNXB4IDJweCA1cHg7Ci0gICAgYm9yZGVyLWxlZnQ6IDA7Ci0gICAgYmFja2dyb3VuZC1jb2xvcjogI2VlZjsKLX0KLQotdGFibGUuZG9jdXRpbHMgdGQgcC5sYXN0LCB0YWJsZS5kb2N1dGlscyB0aCBwLmxhc3QgewotICAgIG1hcmdpbi1ib3R0b206IDA7Ci19Ci0KLXRhYmxlLmZpZWxkLWxpc3QgdGQsIHRhYmxlLmZpZWxkLWxpc3QgdGggewotICAgIGJvcmRlcjogMCAhaW1wb3J0YW50OwotfQotCi10YWJsZS5mb290bm90ZSB0ZCwgdGFibGUuZm9vdG5vdGUgdGggewotICAgIGJvcmRlcjogMCAhaW1wb3J0YW50OwotfQotCi10YWJsZS5kb2N1dGlscyB0aCB7Ci0gICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNjYWM7Ci0gICAgYmFja2dyb3VuZC1jb2xvcjogI2VkZTsKLX0KLQotdGggewotICAgIHRleHQtYWxpZ246IGxlZnQ7Ci0gICAgcGFkZGluZy1yaWdodDogNXB4OwotfQotCi10aC5oZWFkIHsKLSAgICB0ZXh0LWFsaWduOiBjZW50ZXI7Ci19Ci0KLS8qIC0tIG90aGVyIGJvZHkgc3R5bGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLWRsIHsKLSAgICBtYXJnaW4tYm90dG9tOiAxNXB4OwotfQotCi1kZCBwIHsKLSAgICBtYXJnaW4tdG9wOiAwcHg7Ci19Ci0KLWRkIHVsLCBkZCB0YWJsZSB7Ci0gICAgbWFyZ2luLWJvdHRvbTogMTBweDsKLX0KLQotZGQgewotICAgIG1hcmdpbi10b3A6IDNweDsKLSAgICBtYXJnaW4tYm90dG9tOiAxMHB4OwotICAgIG1hcmdpbi1sZWZ0OiAzMHB4OwotfQotCi1kdDp0YXJnZXQsIC5oaWdobGlnaHQgewotICAgIGJhY2tncm91bmQtY29sb3I6ICNmYmU1NGU7Ci19Ci0KLWRsLmdsb3NzYXJ5IGR0IHsKLSAgICBmb250LXdlaWdodDogYm9sZDsKLSAgICBmb250LXNpemU6IDEuMWVtOwotfQotCi0uZmllbGQtbGlzdCB1bCB7Ci0gICAgbWFyZ2luOiAwOwotICAgIHBhZGRpbmctbGVmdDogMWVtOwotfQotCi0uZmllbGQtbGlzdCBwIHsKLSAgICBtYXJnaW46IDA7Ci19Ci0KLS5yZWZjb3VudCB7Ci0gICAgY29sb3I6ICMwNjA7Ci19Ci0KLS5vcHRpb25hbCB7Ci0gICAgZm9udC1zaXplOiAxLjNlbTsKLX0KLQotLnZlcnNpb25tb2RpZmllZCB7Ci0gICAgZm9udC1zdHlsZTogaXRhbGljOwotfQotCi0uZGVwcmVjYXRlZCwgLmRlcHJlY2F0ZWQtcmVtb3ZlZCB7Ci0gICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZTRlNDsKLSAgICBib3JkZXI6IDFweCBzb2xpZCAjZjY2OwotICAgIHBhZGRpbmc6IDdweDsKLX0KLQotZGl2LmRlcHJlY2F0ZWQgcCwgZGl2LmRlcHJlY2F0ZWQtcmVtb3ZlZCBwIHsKLSAgICBtYXJnaW4tYm90dG9tOiAwOwotfQotCi0uc3lzdGVtLW1lc3NhZ2UgewotICAgIGJhY2tncm91bmQtY29sb3I6ICNmZGE7Ci0gICAgcGFkZGluZzogNXB4OwotICAgIGJvcmRlcjogM3B4IHNvbGlkIHJlZDsKLX0KLQotLmZvb3Rub3RlOnRhcmdldCAgewotICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmE7Ci19Ci0KLS5pbXBsLWRldGFpbCB7Ci0gICAgbWFyZ2luLXRvcDogMTBweDsKLSAgICBtYXJnaW4tYm90dG9tOiAxMHB4OwotICAgIHBhZGRpbmc6IDdweDsKLSAgICBib3JkZXI6IDFweCBzb2xpZCAjY2NjOwotfQotCi0uaW1wbC1kZXRhaWwgLmNvbXBvdW5kLWZpcnN0IHsKLSAgICBtYXJnaW4tdG9wOiAwOwotfQotCi0uaW1wbC1kZXRhaWwgLmNvbXBvdW5kLWxhc3QgewotICAgIG1hcmdpbi1ib3R0b206IDA7Ci19Ci0KLS8qIC0tIGNvZGUgZGlzcGxheXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXByZSB7Ci0gICAgb3ZlcmZsb3c6IGF1dG87Ci0gICAgb3ZlcmZsb3cteTogaGlkZGVuOwotfQotCi10ZC5saW5lbm9zIHByZSB7Ci0gICAgcGFkZGluZzogNXB4IDBweDsKLSAgICBib3JkZXI6IDA7Ci0gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7Ci0gICAgY29sb3I6ICNhYWE7Ci19Ci0KLXRhYmxlLmhpZ2hsaWdodHRhYmxlIHsKLSAgICBtYXJnaW4tbGVmdDogMC41ZW07Ci19Ci0KLXRhYmxlLmhpZ2hsaWdodHRhYmxlIHRkIHsKLSAgICBwYWRkaW5nOiAwIDAuNWVtIDAgMC41ZW07Ci19Ci0KLXR0LmRlc2NuYW1lIHsKLSAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKLSAgICBmb250LXdlaWdodDogYm9sZDsKLSAgICBmb250LXNpemU6IDEuMmVtOwotfQotCi10dC5kZXNjY2xhc3NuYW1lIHsKLSAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKLX0KLQotdHQueHJlZiwgYSB0dCB7Ci0gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7Ci0gICAgZm9udC13ZWlnaHQ6IGJvbGQ7Ci19Ci0KLWgxIHR0LCBoMiB0dCwgaDMgdHQsIGg0IHR0LCBoNSB0dCwgaDYgdHQgewotICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OwotfQotCi0vKiAtLSBtYXRoIGRpc3BsYXkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi1pbWcubWF0aCB7Ci0gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKLX0KLQotZGl2LmJvZHkgZGl2Lm1hdGggcCB7Ci0gICAgdGV4dC1hbGlnbjogY2VudGVyOwotfQotCi1zcGFuLmVxbm8gewotICAgIGZsb2F0OiByaWdodDsKLX0KLQotLyogLS0gcHJpbnRvdXQgc3R5bGVzaGVldCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotQG1lZGlhIHByaW50IHsKLSAgICBkaXYuZG9jdW1lbnQsCi0gICAgZGl2LmRvY3VtZW50d3JhcHBlciwKLSAgICBkaXYuYm9keXdyYXBwZXIgewotICAgICAgICBtYXJnaW46IDAgIWltcG9ydGFudDsKLSAgICAgICAgd2lkdGg6IDEwMCU7Ci0gICAgfQotCi0gICAgZGl2LnNwaGlueHNpZGViYXIsCi0gICAgZGl2LnJlbGF0ZWQsCi0gICAgZGl2LmZvb3RlciwKLSAgICAjdG9wLWxpbmsgewotICAgICAgICBkaXNwbGF5OiBub25lOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL0RvYy90b29scy9zcGhpbnhleHQvc3RhdGljL2NvcHlidXR0b24uanMgYi9Eb2MvdG9vbHMvc3RhdGljL2NvcHlidXR0b24uanMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvYy90b29scy9zcGhpbnhleHQvc3RhdGljL2NvcHlidXR0b24uanMKcmVuYW1lIHRvIERvYy90b29scy9zdGF0aWMvY29weWJ1dHRvbi5qcwpkaWZmIC0tZ2l0IGEvRG9jL3Rvb2xzL3NwaGlueGV4dC9zdGF0aWMvcHkucG5nIGIvRG9jL3Rvb2xzL3N0YXRpYy9weS5wbmcKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvYy90b29scy9zcGhpbnhleHQvc3RhdGljL3B5LnBuZwpyZW5hbWUgdG8gRG9jL3Rvb2xzL3N0YXRpYy9weS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvRG9jL3Rvb2xzL3NwaGlueGV4dC9zdGF0aWMvc2lkZWJhci5qcyBiL0RvYy90b29scy9zdGF0aWMvc2lkZWJhci5qcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jL3Rvb2xzL3NwaGlueGV4dC9zdGF0aWMvc2lkZWJhci5qcwpyZW5hbWUgdG8gRG9jL3Rvb2xzL3N0YXRpYy9zaWRlYmFyLmpzCmRpZmYgLS1naXQgYS9Eb2MvdG9vbHMvc3BoaW54ZXh0L3N0YXRpYy92ZXJzaW9uX3N3aXRjaC5qcyBiL0RvYy90b29scy9zdGF0aWMvdmVyc2lvbl9zd2l0Y2guanMKc2ltaWxhcml0eSBpbmRleCA5MyUKcmVuYW1lIGZyb20gRG9jL3Rvb2xzL3NwaGlueGV4dC9zdGF0aWMvdmVyc2lvbl9zd2l0Y2guanMKcmVuYW1lIHRvIERvYy90b29scy9zdGF0aWMvdmVyc2lvbl9zd2l0Y2guanMKaW5kZXggZTU1MjhlYi4uNzI4OWE0ZCAxMDA2NDQKLS0tIGEvRG9jL3Rvb2xzL3NwaGlueGV4dC9zdGF0aWMvdmVyc2lvbl9zd2l0Y2guanMKKysrIGIvRG9jL3Rvb2xzL3N0YXRpYy92ZXJzaW9uX3N3aXRjaC5qcwpAQCAtMiw3ICsyLDggQEAKICAgJ3VzZSBzdHJpY3QnOwogCiAgIHZhciBhbGxfdmVyc2lvbnMgPSB7Ci0gICAgJzMuNSc6ICdkZXYgKDMuNSknLAorICAgICczLjYnOiAnZGV2ICgzLjYpJywKKyAgICAnMy41JzogJzMuNScsCiAgICAgJzMuNCc6ICczLjQnLAogICAgICczLjMnOiAnMy4zJywKICAgICAnMy4yJzogJzMuMicsCkBAIC01MCw3ICs1MSw3IEBACiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gbmV3X3VybDsKICAgICAgICAgfSwKICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICdodHRwOi8vZG9jcy5weXRob24ub3JnLycgKyBzZWxlY3RlZDsKKyAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSAnaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvJyArIHNlbGVjdGVkOwogICAgICAgICB9CiAgICAgICB9KTsKICAgICB9CmRpZmYgLS1naXQgYS9Eb2MvdG9vbHMvc3BoaW54ZXh0L3N1c3AtaWdub3JlZC5jc3YgYi9Eb2MvdG9vbHMvc3VzcC1pZ25vcmVkLmNzdgpzaW1pbGFyaXR5IGluZGV4IDg1JQpyZW5hbWUgZnJvbSBEb2MvdG9vbHMvc3BoaW54ZXh0L3N1c3AtaWdub3JlZC5jc3YKcmVuYW1lIHRvIERvYy90b29scy9zdXNwLWlnbm9yZWQuY3N2CmluZGV4IGFiYzNjYTguLjAzMjUzMWQgMTAwNjQ0Ci0tLSBhL0RvYy90b29scy9zcGhpbnhleHQvc3VzcC1pZ25vcmVkLmNzdgorKysgYi9Eb2MvdG9vbHMvc3VzcC1pZ25vcmVkLmNzdgpAQCAtMTAsNyArMTAsNiBAQAogZXh0ZW5kaW5nL2V4dGVuZGluZywsOm15ZnVuY3Rpb24sIlB5QXJnX1BhcnNlVHVwbGUoYXJncywgIiJEOm15ZnVuY3Rpb24iIiwgJmMpOyIKIGV4dGVuZGluZy9leHRlbmRpbmcsLDpzZXQsImlmIChQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICIiTzpzZXRfY2FsbGJhY2siIiwgJnRlbXApKSB7IgogZXh0ZW5kaW5nL25ld3R5cGVzLCw6Y2FsbCwiaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICIic3NzOmNhbGwiIiwgJmFyZzEsICZhcmcyLCAmYXJnMykpIHsiCi1leHRlbmRpbmcvd2luZG93cywsOmluaXRzcGFtLC9leHBvcnQ6aW5pdHNwYW0KIGZhcS9wcm9ncmFtbWluZywsOmNociwiPj00LjApIG9yIDErZih4Yyx5Yyx4KngteSp5K3hjLDIuMCp4KnkreWMsay0xLGYpOmYoeGMseWMseCx5LGssZik6Y2hyKCIKIGZhcS9wcm9ncmFtbWluZywsOjosZm9yIHggaW4gc2VxdWVuY2VbOjotMV06CiBmYXEvcHJvZ3JhbW1pbmcsLDpyZWR1Y2UsInByaW50KChsYW1iZGEgUnUsUm8sSXUsSW8sSU0sU3gsU3k6cmVkdWNlKGxhbWJkYSB4LHk6eCt5LG1hcChsYW1iZGEgeSwiCkBAIC03OSw5ICs3OCw4IEBACiBob3d0by9sb2dnaW5nLCw6VGhpcyxERUJVRzpyb290OlRoaXMgbWVzc2FnZSBzaG91bGQgZ28gdG8gdGhlIGxvZyBmaWxlCiBob3d0by9sb2dnaW5nLCw6VGhpcyxERUJVRzpUaGlzIG1lc3NhZ2Ugc2hvdWxkIGFwcGVhciBvbiB0aGUgY29uc29sZQogaG93dG8vbG9nZ2luZywsOldhdGNoLFdBUk5JTkc6cm9vdDpXYXRjaCBvdXQhCi1ob3d0by9weXBvcnRpbmcsNzUsOjosIyBtYWtlIHN1cmUgdG8gdXNlIDo6IFB5dGhvbiAqYW5kKiA6OiBQeXRob24gOjogMyBzbwotaG93dG8vcHlwb3J0aW5nLDc1LDo6LCInUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uJywiCi1ob3d0by9weXBvcnRpbmcsNzUsOjosJ1Byb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6OiAzJworaG93dG8vcHlwb3J0aW5nLCw6OixQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMgoraG93dG8vcHlwb3J0aW5nLCw6OixQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMwogaG93dG8vcmVnZXgsLDo6LAogaG93dG8vcmVnZXgsLDpmb28sKD86Zm9vKQogaG93dG8vdXJsbGliMiwsOmV4YW1wbGUsImZvciBleGFtcGxlICIiam9lQHBhc3N3b3JkOmV4YW1wbGUuY29tIiIiCkBAIC0xMzcsMTkgKzEzNSwxMSBAQAogbGlicmFyeS9pcGFkZHJlc3MsLDo6LDIwMDE6ZGIwMDo6MC9mZmZmOmZmMDA6OgogbGlicmFyeS9pdGVydG9vbHMsLDpzdGVwLGVsZW1lbnRzIGZyb20gc2VxW3N0YXJ0OnN0b3A6c3RlcF0KIGxpYnJhcnkvaXRlcnRvb2xzLCw6c3RvcCxlbGVtZW50cyBmcm9tIHNlcVtzdGFydDpzdG9wOnN0ZXBdCi1saWJyYXJ5L2xpbmVjYWNoZSwsOnN5cywic3lzOng6MzozOnN5czovZGV2Oi9iaW4vc2giCiBsaWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMsLDpwb3J0LGhvc3Q6cG9ydAogbGlicmFyeS9tbWFwLCw6aTIsb2JqW2kxOmkyXQogbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcsLGAsIyBBZGQgbW9yZSB0YXNrcyB1c2luZyBgcHV0KClgCi1saWJyYXJ5L211bHRpcHJvY2Vzc2luZywsYCwjIEEgdGVzdCBmaWxlIGZvciB0aGUgYG11bHRpcHJvY2Vzc2luZ2AgcGFja2FnZQotbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcsLGAsIyBBIHRlc3Qgb2YgYG11bHRpcHJvY2Vzc2luZy5Qb29sYCBjbGFzcwotbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcsLGAsIyBgQmFzZU1hbmFnZXJgLgotbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcsLGAsIyBpbiB0aGUgb3JpZ2luYWwgb3JkZXIgdGhlbiBjb25zaWRlciB1c2luZyBgUG9vbC5tYXAoKWAgb3IKIGxpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLCxgLCI+Pj4gbC5fY2FsbG1ldGhvZCgnX19nZXRpdGVtX18nLCAoMjAsKSkgICAgICMgZXF1aXYgdG8gYGxbMjBdYCIKLWxpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLCxgLCI+Pj4gbC5fY2FsbG1ldGhvZCgnX19nZXRzbGljZV9fJywgKDIsIDcpKSAgICMgZXF1aXYgdG8gYGxbMjo3XWAiCi1saWJyYXJ5L211bHRpcHJvY2Vzc2luZywsYCwjIE5vdCBzdXJlIGlmIHdlIHNob3VsZCBzeW5jaHJvbml6ZSBhY2Nlc3MgdG8gYHNvY2tldC5hY2NlcHQoKWAgbWV0aG9kIGJ5Ci1saWJyYXJ5L211bHRpcHJvY2Vzc2luZywsYCwjIG9iamVjdC4gIChXZSBpbXBvcnQgYG11bHRpcHJvY2Vzc2luZy5yZWR1Y3Rpb25gIHRvIGVuYWJsZSB0aGlzIHBpY2tsaW5nLikKLWxpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLCxgLCMgYFBvb2wuaW1hcCgpYCAod2hpY2ggd2lsbCBzYXZlIG9uIHRoZSBhbW91bnQgb2YgY29kZSBuZWVkZWQgYW55d2F5KS4KK2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLCxgLCI+Pj4gbC5fY2FsbG1ldGhvZCgnX19nZXRpdGVtX18nLCAoc2xpY2UoMiwgNyksKSkgICMgZXF1aXYgdG8gYGxbMjo3XWAiCiBsaWJyYXJ5L211bHRpcHJvY2Vzc2luZywsOnF1ZXVlLCI+Pj4gUXVldWVNYW5hZ2VyLnJlZ2lzdGVyKCdnZXRfcXVldWUnLCBjYWxsYWJsZT1sYW1iZGE6cXVldWUpIgogbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcsLGAsIyByZWdpc3RlciB0aGUgRm9vIGNsYXNzOyBtYWtlIGBmKClgIGFuZCBgZygpYCBhY2Nlc3NpYmxlIHZpYSBwcm94eQogbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcsLGAsIyByZWdpc3RlciB0aGUgRm9vIGNsYXNzOyBtYWtlIGBnKClgIGFuZCBgX2goKWAgYWNjZXNzaWJsZSB2aWEgcHJveHkKQEAgLTE1OCwzMSArMTQ4LDI3IEBACiBsaWJyYXJ5L25udHBsaWIsLDpsaW5lcyw6bGluZXMKIGxpYnJhcnkvb3B0cGFyc2UsLDpsZW4sImRlbCBwYXJzZXIucmFyZ3NbOmxlbih2YWx1ZSldIgogbGlicmFyeS9vcy5wYXRoLCw6Zm9vLGM6Zm9vCitsaWJyYXJ5L3BhdGhsaWIsLDpiYXIsIj4+PiBQdXJlV2luZG93c1BhdGgoJ2M6L1dpbmRvd3MnLCAnZDpiYXInKSIKK2xpYnJhcnkvcGF0aGxpYiwsOmJhcixQdXJlV2luZG93c1BhdGgoJ2Q6YmFyJykKK2xpYnJhcnkvcGF0aGxpYiwsOlByb2dyYW0sPj4+IFB1cmVXaW5kb3dzUGF0aCgnYzpQcm9ncmFtIEZpbGVzLycpLnJvb3QKK2xpYnJhcnkvcGF0aGxpYiwsOlByb2dyYW0sPj4+IFB1cmVXaW5kb3dzUGF0aCgnYzpQcm9ncmFtIEZpbGVzLycpLmFuY2hvcgogbGlicmFyeS9wZGIsLDpsaW5lbm8sZmlsZW5hbWU6bGluZW5vCiBsaWJyYXJ5L3BpY2tsZSwsOm1lbW9yeSwiY29ubiA9IHNxbGl0ZTMuY29ubmVjdCgiIjptZW1vcnk6IiIpIgogbGlicmFyeS9wb3NpeCwsYCwiQ0ZMQUdTPSIiYGdldGNvbmYgTEZTX0NGTEFHU2AiIiBPUFQ9IiItZyAtTzIgJENGTEFHUyIiIgotbGlicmFyeS9wcHJpbnQsMjA5LDo6LCInY2xhc3NpZmllcnMnOiBbJ0RldmVsb3BtZW50IFN0YXR1cyA6OiA0IC0gQmV0YScsIgotbGlicmFyeS9wcHJpbnQsMjA5LDo6LCInSW50ZW5kZWQgQXVkaWVuY2UgOjogRGV2ZWxvcGVycycsIgotbGlicmFyeS9wcHJpbnQsMjA5LDo6LCInTGljZW5zZSA6OiBPU0kgQXBwcm92ZWQgOjogTUlUIExpY2Vuc2UnLCIKLWxpYnJhcnkvcHByaW50LDIwOSw6OiwiJ05hdHVyYWwgTGFuZ3VhZ2UgOjogRW5nbGlzaCcsIgotbGlicmFyeS9wcHJpbnQsMjA5LDo6LCInT3BlcmF0aW5nIFN5c3RlbSA6OiBPUyBJbmRlcGVuZGVudCcsIgotbGlicmFyeS9wcHJpbnQsMjA5LDo6LCInUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uJywiCi1saWJyYXJ5L3BwcmludCwyMDksOjosIidQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMicsIgotbGlicmFyeS9wcHJpbnQsMjA5LDo6LCInUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uIDo6IDIuNicsIgotbGlicmFyeS9wcHJpbnQsMjA5LDo6LCInUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uIDo6IDIuNycsIgotbGlicmFyeS9wcHJpbnQsMjA5LDo6LCInVG9waWMgOjogU29mdHdhcmUgRGV2ZWxvcG1lbnQgOjogTGlicmFyaWVzJywiCi1saWJyYXJ5L3BwcmludCwyMDksOjosIidUb3BpYyA6OiBTb2Z0d2FyZSBEZXZlbG9wbWVudCA6OiBMaWJyYXJpZXMgOjogUHl0aG9uIE1vZHVsZXMnXSwiCitsaWJyYXJ5L3BwcmludCwsOjosIidQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMiA6OiBPbmx5J10sIgorbGlicmFyeS9wcHJpbnQsLDo6LCInUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uIDo6IDIuNicsIgorbGlicmFyeS9wcHJpbnQsLDo6LCInUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uIDo6IDIuNycsIgogbGlicmFyeS9wcm9maWxlLCw6bGluZW5vLGZpbGVuYW1lOmxpbmVubyhmdW5jdGlvbikKIGxpYnJhcnkvcHlleHBhdCwsOmVsZW0xLDxweTplbGVtMSAvPgogbGlicmFyeS9weWV4cGF0LCw6cHksInhtbG5zOnB5ID0gIiJodHRwOi8vd3d3LnB5dGhvbi5vcmcvbnMvIiI+IgogbGlicmFyeS9zbXRwbGliLCw6cG9ydCxtZXRob2QgbXVzdCBzdXBwb3J0IHRoYXQgYXMgd2VsbCBhcyBhIHJlZ3VsYXIgaG9zdDpwb3J0Ci1saWJyYXJ5L3NvY2tldCwsOjosIigxMCwgMSwgNiwgJycsICgnMjAwMTo4ODg6MjAwMDpkOjphMicsIDgwLCAwLCAwKSldIgogbGlicmFyeS9zb2NrZXQsLDo6LCc1YWVmOjJiOjo4JwogbGlicmFyeS9zb2NrZXQsLDpjYW4sInJldHVybiAoY2FuX2lkLCBjYW5fZGxjLCBkYXRhWzpjYW5fZGxjXSkiCiBsaWJyYXJ5L3NvY2tldCwsOmxlbixmZHMuZnJvbXN0cmluZyhjbXNnX2RhdGFbOmxlbihjbXNnX2RhdGEpIC0gKGxlbihjbXNnX2RhdGEpICUgZmRzLml0ZW1zaXplKV0pCiBsaWJyYXJ5L3NxbGl0ZTMsLDphZ2UsImN1ci5leGVjdXRlKCIic2VsZWN0ICogZnJvbSBwZW9wbGUgd2hlcmUgbmFtZV9sYXN0PTp3aG8gYW5kIGFnZT06YWdlIiIsIHsiIndobyIiOiB3aG8sICIiYWdlIiI6IGFnZX0pIgogbGlicmFyeS9zcWxpdGUzLCw6bWVtb3J5LAogbGlicmFyeS9zcWxpdGUzLCw6d2hvLCJjdXIuZXhlY3V0ZSgiInNlbGVjdCAqIGZyb20gcGVvcGxlIHdoZXJlIG5hbWVfbGFzdD06d2hvIGFuZCBhZ2U9OmFnZSIiLCB7IiJ3aG8iIjogd2hvLCAiImFnZSIiOiBhZ2V9KSIKK2xpYnJhcnkvc3FsaXRlMywsOnBhdGgsImRiID0gc3FsaXRlMy5jb25uZWN0KCdmaWxlOnBhdGgvdG8vZGF0YWJhc2U/bW9kZT1ybycsIHVyaT1UcnVlKSIKIGxpYnJhcnkvc3NsLCw6TXksIk9yZ2FuaXphdGlvbmFsIFVuaXQgTmFtZSAoZWcsIHNlY3Rpb24pIFtdOk15IEdyb3VwIgogbGlicmFyeS9zc2wsLDpNeSwiT3JnYW5pemF0aW9uIE5hbWUgKGVnLCBjb21wYW55KSBbSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkXTpNeSBPcmdhbml6YXRpb24sIEluYy4iCiBsaWJyYXJ5L3NzbCwsOm15c2VydmVyLCJDb21tb24gTmFtZSAoZWcsIFlPVVIgbmFtZSkgW106bXlzZXJ2ZXIubXlncm91cC5teW9yZ2FuaXphdGlvbi5jb20iCkBAIC0yMDcsNyArMTkzLDEyIEBACiBsaWJyYXJ5L3RhcmZpbGUsLDp4eiwndzp4eicKIGxpYnJhcnkvdGltZSwsOm1tLAogbGlicmFyeS90aW1lLCw6c3MsCitsaWJyYXJ5L3RyYWNlbWFsbG9jLCw6bGltaXQsImZvciBpbmRleCwgc3RhdCBpbiBlbnVtZXJhdGUodG9wX3N0YXRzWzpsaW1pdF0sIDEpOiIKIGxpYnJhcnkvdHVydGxlLCw6OixFeGFtcGxlOjoKK2xpYnJhcnkvdW5pdHRlc3QsLDpmb28sInNlbGYuYXNzZXJ0RXF1YWwoY20ub3V0cHV0LCBbJ0lORk86Zm9vOmZpcnN0IG1lc3NhZ2UnLCIKK2xpYnJhcnkvdW5pdHRlc3QsLDpmaXJzdCwic2VsZi5hc3NlcnRFcXVhbChjbS5vdXRwdXQsIFsnSU5GTzpmb286Zmlyc3QgbWVzc2FnZScsIgorbGlicmFyeS91bml0dGVzdCwsOmZvbywnRVJST1I6Zm9vLmJhcjpzZWNvbmQgbWVzc2FnZSddKQorbGlicmFyeS91bml0dGVzdCwsOnNlY29uZCwnRVJST1I6Zm9vLmJhcjpzZWNvbmQgbWVzc2FnZSddKQogbGlicmFyeS91cmxsaWIucmVxdWVzdCwsOmNsb3NlLENvbm5lY3Rpb246Y2xvc2UKIGxpYnJhcnkvdXJsbGliLnJlcXVlc3QsLDpsYW5nLCJ4bWxucz0iImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIiB4bWw6bGFuZz0iImVuIiIgbGFuZz0iImVuIiI+XG5cbjxoZWFkPlxuIgogbGlicmFyeS91cmxsaWIucmVxdWVzdCwsOnBhc3N3b3JkLCIiImpvZTpwYXNzd29yZEBweXRob24ub3JnIiIiCkBAIC0yMTYsNiArMjA3LDE2IEBACiBsaWJyYXJ5L3ZlbnYsLDpwYXJhbSwiOnBhcmFtIHByb2dyZXNzOiBJZiBzZXR1cHRvb2xzIG9yIHBpcCBhcmUgaW5zdGFsbGVkLCB0aGUgcHJvZ3Jlc3Mgb2YgdGhlIgogbGlicmFyeS92ZW52LCw6cGFyYW0sIjpwYXJhbSBub3BpcDogSWYgVHJ1ZSwgcGlwIGlzIG5vdCBpbnN0YWxsZWQgaW50byB0aGUgY3JlYXRlZCIKIGxpYnJhcnkvdmVudiwsOnBhcmFtLDpwYXJhbSBjb250ZXh0OiBUaGUgaW5mb3JtYXRpb24gZm9yIHRoZSBlbnZpcm9ubWVudCBjcmVhdGlvbiByZXF1ZXN0CitsaWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZSwsOnNvbWV0YWcscHJlZml4OnNvbWV0YWcKK2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLCw6ZmljdGlvbmFsLCI8YWN0b3JzIHhtbG5zOmZpY3Rpb25hbD0iImh0dHA6Ly9jaGFyYWN0ZXJzLmV4YW1wbGUuY29tIiIiCitsaWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZSwsOmNoYXJhY3Rlciw8ZmljdGlvbmFsOmNoYXJhY3Rlcj5MYW5jZWxvdDwvZmljdGlvbmFsOmNoYXJhY3Rlcj4KK2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLCw6Y2hhcmFjdGVyLDxmaWN0aW9uYWw6Y2hhcmFjdGVyPkFyY2hpZSBMZWFjaDwvZmljdGlvbmFsOmNoYXJhY3Rlcj4KK2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLCw6Y2hhcmFjdGVyLDxmaWN0aW9uYWw6Y2hhcmFjdGVyPlNpciBSb2JpbjwvZmljdGlvbmFsOmNoYXJhY3Rlcj4KK2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLCw6Y2hhcmFjdGVyLDxmaWN0aW9uYWw6Y2hhcmFjdGVyPkd1bnRoZXI8L2ZpY3Rpb25hbDpjaGFyYWN0ZXI+CitsaWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZSwsOmNoYXJhY3Rlciw8ZmljdGlvbmFsOmNoYXJhY3Rlcj5Db21tYW5kZXIgQ2xlbWVudDwvZmljdGlvbmFsOmNoYXJhY3Rlcj4KK2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLCw6YWN0b3IsImZvciBhY3RvciBpbiByb290LmZpbmRhbGwoJ3JlYWxfcGVyc29uOmFjdG9yJywgbnMpOiIKK2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLCw6bmFtZSwibmFtZSA9IGFjdG9yLmZpbmQoJ3JlYWxfcGVyc29uOm5hbWUnLCBucykiCitsaWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZSwsOmNoYXJhY3RlciwiZm9yIGNoYXIgaW4gYWN0b3IuZmluZGFsbCgncm9sZTpjaGFyYWN0ZXInLCBucyk6IgogbGlicmFyeS94bWxycGMuY2xpZW50LCw6cGFzcyxodHRwOi8vdXNlcjpwYXNzQGhvc3Q6cG9ydC9wYXRoCiBsaWJyYXJ5L3htbHJwYy5jbGllbnQsLDpwYXNzLHVzZXI6cGFzcwogbGlicmFyeS94bWxycGMuY2xpZW50LCw6cG9ydCxodHRwOi8vdXNlcjpwYXNzQGhvc3Q6cG9ydC9wYXRoCkBAIC0yNDIsNiArMjQzLDcgQEAKIHR1dG9yaWFsL3N0ZGxpYjIsLDpzdGFydCwiZmllbGRzID0gc3RydWN0LnVucGFjaygnPElJSUhIJywgZGF0YVtzdGFydDpzdGFydCsxNl0pIgogdHV0b3JpYWwvc3RkbGliMiwsOnN0YXJ0LGZpbGVuYW1lID0gZGF0YVtzdGFydDpzdGFydCtmaWxlbmFtZXNpemVdCiB0dXRvcmlhbC9zdGRsaWIyLCw6V2FybmluZyxXQVJOSU5HOnJvb3Q6V2FybmluZzpjb25maWcgZmlsZSBzZXJ2ZXIuY29uZiBub3QgZm91bmQKK3R1dG9yaWFsL3ZlbnYsLDpjN2I5NjQ1YTZmMzUsIlB5dGhvbiAzLjQuMysgKDMuNDpjN2I5NjQ1YTZmMzUrLCBNYXkgMjIgMjAxNSwgMDk6MzE6MjUpIgogdXNpbmcvY21kbGluZSwsOmNhdGVnb3J5LGFjdGlvbjptZXNzYWdlOmNhdGVnb3J5Om1vZHVsZTpsaW5lCiB1c2luZy9jbWRsaW5lLCw6ZXJyb3JoYW5kbGVyLDplcnJvcmhhbmRsZXIKIHVzaW5nL2NtZGxpbmUsLDpsaW5lLGFjdGlvbjptZXNzYWdlOmNhdGVnb3J5Om1vZHVsZTpsaW5lCkBAIC0yNjIsMTEgKzI2NCw2IEBACiB3aGF0c25ldy8yLjUsLDptZW1vcnksOm1lbW9yeToKIHdoYXRzbmV3LzIuNSwsOnN0ZXAsW3N0YXJ0OnN0b3A6c3RlcF0KIHdoYXRzbmV3LzIuNSwsOnN0b3AsW3N0YXJ0OnN0b3A6c3RlcF0KLXdoYXRzbmV3LzIuNywxNjE5LDo6LCJQYXJzZVJlc3VsdChzY2hlbWU9J2h0dHAnLCBuZXRsb2M9J1sxMDgwOjo4OjgwMDoyMDBDOjQxN0FdJywiCi13aGF0c25ldy8yLjcsMTYxOSw6Oiw+Pj4gdXJscGFyc2UudXJscGFyc2UoJ2h0dHA6Ly9bMTA4MDo6ODo4MDA6MjAwQzo0MTdBXS9mb28nKQotd2hhdHNuZXcvMi43LDczNSw6U3VuZGF5LCcyMDA5OjQ6U3VuZGF5Jwotd2hhdHNuZXcvMi43LDg2Miw6Q29va2llLCJleHBvcnQgUFlUSE9OV0FSTklOR1M9YWxsLGVycm9yOjo6Q29va2llOjAiCi13aGF0c25ldy8yLjcsODYyLDo6LCJleHBvcnQgUFlUSE9OV0FSTklOR1M9YWxsLGVycm9yOjo6Q29va2llOjAiCiB3aGF0c25ldy8zLjIsLDphZmZlLCJuZXRsb2M9J1tkZWFkOmJlZWY6Y2FmZTo1NDE3OmFmZmU6OEZBMzpkZWFmOmZlZWRdJywiCiB3aGF0c25ldy8zLjIsLDphZmZlLD4+PiB1cmxsaWIucGFyc2UudXJscGFyc2UoJ2h0dHA6Ly9bZGVhZDpiZWVmOmNhZmU6NTQxNzphZmZlOjhGQTM6ZGVhZjpmZWVkXS9mb28vJykKIHdoYXRzbmV3LzMuMiwsOmJlZWYsIm5ldGxvYz0nW2RlYWQ6YmVlZjpjYWZlOjU0MTc6YWZmZTo4RkEzOmRlYWY6ZmVlZF0nLCIKQEAgLTI4Myw4ICsyODAsMTMgQEAKIHdoYXRzbmV3LzMuMiwsOmxvY2F0aW9uLHpvcGU5LWxvY2F0aW9uID0gJHt6b3BlOTpsb2NhdGlvbn0KIHdoYXRzbmV3LzMuMiwsOnByZWZpeCx6b3BlLWNvbmYgPSAke2N1c3RvbTpwcmVmaXh9L2V0Yy96b3BlLmNvbmYKIHdoYXRzbmV3L2NoYW5nZWxvZywsOnBsYXRmb3JtLDpwbGF0Zm9ybToKK3doYXRzbmV3L2NoYW5nZWxvZywsOmd6LCI6IFRhckZpbGUgb3BlbmVkIHdpdGggZXh0ZXJuYWwgZmlsZW9iaiBhbmQgIiJ3Omd6IiIgbW9kZSBkaWRuJ3QiCiB3aGF0c25ldy9jaGFuZ2Vsb2csLDpQeXRob25DbWQsIldpdGggVGsgPCA4LjUgX3RraW50ZXIuYzpQeXRob25DbWQoKSByYWlzZWQgVW5pY29kZURlY29kZUVycm9yLCBjYXVzZWQiCiB3aGF0c25ldy9jaGFuZ2Vsb2csLDo6LCI6IEZpeCBGVFAgdGVzdHMgZm9yIElQdjYsIGJpbmQgdG8gIiI6OjEiIiBpbnN0ZWFkIG9mICIibG9jYWxob3N0IiIuIgogd2hhdHNuZXcvY2hhbmdlbG9nLCw6OiwiOiBVc2UgIiIxMjcuMC4wLjEiIiBvciAiIjo6MSIiIGluc3RlYWQgb2YgIiJsb2NhbGhvc3QiIiBhcyBtdWNoIGFzIgogd2hhdHNuZXcvY2hhbmdlbG9nLCw6cGFzc3dvcmQsdXNlcjpwYXNzd29yZAotd2hhdHNuZXcvY2hhbmdlbG9nLCw6Z3osdzpnegord2hhdHNuZXcvMi43LDc4MCw6U3VuZGF5LCcyMDA5OjQ6U3VuZGF5Jword2hhdHNuZXcvMi43LDkwNyw6OiwiZXhwb3J0IFBZVEhPTldBUk5JTkdTPWFsbCxlcnJvcjo6OkNvb2tpZTowIgord2hhdHNuZXcvMi43LDkwNyw6Q29va2llLCJleHBvcnQgUFlUSE9OV0FSTklOR1M9YWxsLGVycm9yOjo6Q29va2llOjAiCit3aGF0c25ldy8yLjcsMTY1Nyw6Oiw+Pj4gdXJscGFyc2UudXJscGFyc2UoJ2h0dHA6Ly9bMTA4MDo6ODo4MDA6MjAwQzo0MTdBXS9mb28nKQord2hhdHNuZXcvMi43LDE2NTcsOjosIlBhcnNlUmVzdWx0KHNjaGVtZT0naHR0cCcsIG5ldGxvYz0nWzEwODA6Ojg6ODAwOjIwMEM6NDE3QV0nLCIKZGlmZiAtLWdpdCBhL0RvYy90b29scy9zcGhpbnhleHQvZG93bmxvYWQuaHRtbCBiL0RvYy90b29scy90ZW1wbGF0ZXMvZG93bmxvYWQuaHRtbApzaW1pbGFyaXR5IGluZGV4IDg3JQpyZW5hbWUgZnJvbSBEb2MvdG9vbHMvc3BoaW54ZXh0L2Rvd25sb2FkLmh0bWwKcmVuYW1lIHRvIERvYy90b29scy90ZW1wbGF0ZXMvZG93bmxvYWQuaHRtbAppbmRleCAzMWE1M2NmLi5kZTg0YWUzIDEwMDY0NAotLS0gYS9Eb2MvdG9vbHMvc3BoaW54ZXh0L2Rvd25sb2FkLmh0bWwKKysrIGIvRG9jL3Rvb2xzL3RlbXBsYXRlcy9kb3dubG9hZC5odG1sCkBAIC0zLDcgKzMsNyBAQAogeyUgaWYgZGFpbHkgaXMgZGVmaW5lZCAlfQogICB7JSBzZXQgZGxiYXNlID0gcGF0aHRvKCdhcmNoaXZlcycsIDEpICV9CiB7JSBlbHNlICV9Ci0gIHslIHNldCBkbGJhc2UgPSAnaHR0cDovL2RvY3MucHl0aG9uLm9yZy9mdHAvcHl0aG9uL2RvYy8nICsgcmVsZWFzZSAlfQorICB7JSBzZXQgZGxiYXNlID0gJ2h0dHBzOi8vZG9jcy5weXRob24ub3JnL2Z0cC9weXRob24vZG9jLycgKyByZWxlYXNlICV9CiB7JSBlbmRpZiAlfQogCiB7JSBibG9jayBib2R5ICV9CkBAIC0zNCwxNSArMzQsMTUgQEAKICAgICA8dGQ+PGEgaHJlZj0ie3sgZGxiYXNlIH19L3B5dGhvbi17eyByZWxlYXNlIH19LWRvY3MtdGV4dC50YXIuYnoyIj5Eb3dubG9hZDwvYT4gKGNhLiAxLjUgTUIpPC90ZD4KICAgPC90cj4KICA8dHI+PHRkPkVQVUI8L3RkPgotICAgIDx0ZD48YSBocmVmPSJ7eyBkbGJhc2UgfX0vcHl0aG9uLXt7IHJlbGVhc2UgfX0tZG9jcy1lcHViLnppcCI+RG93bmxvYWQ8L2E+IChjYS4gMy41IE1CKTwvdGQ+Ci0gICAgPHRkPjxhIGhyZWY9Int7IGRsYmFzZSB9fS9weXRob24te3sgcmVsZWFzZSB9fS1kb2NzLWVwdWIudGFyLmJ6MiI+RG93bmxvYWQ8L2E+IChjYS4gMy41IE1CKTwvdGQ+CisgICAgPHRkPjxhIGhyZWY9Int7IGRsYmFzZSB9fS9weXRob24te3sgcmVsZWFzZSB9fS1kb2NzLmVwdWIiPkRvd25sb2FkPC9hPiAoY2EuIDQuNSBNQik8L3RkPgorICAgIDx0ZD48L3RkPgogICA8L3RyPgogPC90YWJsZT4KIAogPHA+VGhlc2UgYXJjaGl2ZXMgY29udGFpbiBhbGwgdGhlIGNvbnRlbnQgaW4gdGhlIGRvY3VtZW50YXRpb24uPC9wPgogCiA8cD5IVE1MIEhlbHAgKDx0dD4uY2htPC90dD4pIGZpbGVzIGFyZSBtYWRlIGF2YWlsYWJsZSBpbiB0aGUgIldpbmRvd3MiIHNlY3Rpb24KLW9uIHRoZSA8YSBocmVmPSJodHRwOi8vcHl0aG9uLm9yZy9kb3dubG9hZC9yZWxlYXNlcy97eyByZWxlYXNlWzo1XSB9fS8iPlB5dGhvbgorb24gdGhlIDxhIGhyZWY9Imh0dHBzOi8vd3d3LnB5dGhvbi5vcmcvZG93bmxvYWQvcmVsZWFzZXMve3sgcmVsZWFzZVs6NV0gfX0vIj5QeXRob24KIGRvd25sb2FkIHBhZ2U8L2E+LjwvcD4KIAogCmRpZmYgLS1naXQgYS9Eb2MvdG9vbHMvc3BoaW54ZXh0L2luZGV4Y29udGVudC5odG1sIGIvRG9jL3Rvb2xzL3RlbXBsYXRlcy9pbmRleGNvbnRlbnQuaHRtbApzaW1pbGFyaXR5IGluZGV4IDkyJQpyZW5hbWUgZnJvbSBEb2MvdG9vbHMvc3BoaW54ZXh0L2luZGV4Y29udGVudC5odG1sCnJlbmFtZSB0byBEb2MvdG9vbHMvdGVtcGxhdGVzL2luZGV4Y29udGVudC5odG1sCmluZGV4IDdmODU0NzAuLjk2OTA5OWEgMTAwNjQ0Ci0tLSBhL0RvYy90b29scy9zcGhpbnhleHQvaW5kZXhjb250ZW50Lmh0bWwKKysrIGIvRG9jL3Rvb2xzL3RlbXBsYXRlcy9pbmRleGNvbnRlbnQuaHRtbApAQCAtMTYsMTQgKzE2LDE0IEBACiAgICAgICA8cCBjbGFzcz0iYmlnbGluayI+PGEgY2xhc3M9ImJpZ2xpbmsiIGhyZWY9Int7IHBhdGh0bygiaG93dG8vaW5kZXgiKSB9fSI+UHl0aG9uIEhPV1RPczwvYT48YnIvPgogICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmtkZXNjciI+aW4tZGVwdGggZG9jdW1lbnRzIG9uIHNwZWNpZmljIHRvcGljczwvc3Bhbj48L3A+CiAgICAgPC90ZD48dGQgd2lkdGg9IjUwJSI+CisgICAgICA8cCBjbGFzcz0iYmlnbGluayI+PGEgY2xhc3M9ImJpZ2xpbmsiIGhyZWY9Int7IHBhdGh0bygiaW5zdGFsbGluZy9pbmRleCIpIH19Ij5JbnN0YWxsaW5nIFB5dGhvbiBNb2R1bGVzPC9hPjxici8+CisgICAgICAgICA8c3BhbiBjbGFzcz0ibGlua2Rlc2NyIj5pbnN0YWxsaW5nIGZyb20gdGhlIFB5dGhvbiBQYWNrYWdlIEluZGV4ICZhbXA7IG90aGVyIHNvdXJjZXM8L3NwYW4+PC9wPgorICAgICAgPHAgY2xhc3M9ImJpZ2xpbmsiPjxhIGNsYXNzPSJiaWdsaW5rIiBocmVmPSJ7eyBwYXRodG8oImRpc3RyaWJ1dGluZy9pbmRleCIpIH19Ij5EaXN0cmlidXRpbmcgUHl0aG9uIE1vZHVsZXM8L2E+PGJyLz4KKyAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5rZGVzY3IiPnB1Ymxpc2hpbmcgbW9kdWxlcyBmb3IgaW5zdGFsbGF0aW9uIGJ5IG90aGVyczwvc3Bhbj48L3A+CiAgICAgICA8cCBjbGFzcz0iYmlnbGluayI+PGEgY2xhc3M9ImJpZ2xpbmsiIGhyZWY9Int7IHBhdGh0bygiZXh0ZW5kaW5nL2luZGV4IikgfX0iPkV4dGVuZGluZyBhbmQgRW1iZWRkaW5nPC9hPjxici8+CiAgICAgICAgICA8c3BhbiBjbGFzcz0ibGlua2Rlc2NyIj50dXRvcmlhbCBmb3IgQy9DKysgcHJvZ3JhbW1lcnM8L3NwYW4+PC9wPgogICAgICAgPHAgY2xhc3M9ImJpZ2xpbmsiPjxhIGNsYXNzPSJiaWdsaW5rIiBocmVmPSJ7eyBwYXRodG8oImMtYXBpL2luZGV4IikgfX0iPlB5dGhvbi9DIEFQSTwvYT48YnIvPgogICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmtkZXNjciI+cmVmZXJlbmNlIGZvciBDL0MrKyBwcm9ncmFtbWVyczwvc3Bhbj48L3A+Ci0gICAgICA8cCBjbGFzcz0iYmlnbGluayI+PGEgY2xhc3M9ImJpZ2xpbmsiIGhyZWY9Int7IHBhdGh0bygiaW5zdGFsbC9pbmRleCIpIH19Ij5JbnN0YWxsaW5nIFB5dGhvbiBNb2R1bGVzPC9hPjxici8+Ci0gICAgICAgICA8c3BhbiBjbGFzcz0ibGlua2Rlc2NyIj5pbmZvcm1hdGlvbiBmb3IgaW5zdGFsbGVycyAmYW1wOyBzeXMtYWRtaW5zPC9zcGFuPjwvcD4KLSAgICAgIDxwIGNsYXNzPSJiaWdsaW5rIj48YSBjbGFzcz0iYmlnbGluayIgaHJlZj0ie3sgcGF0aHRvKCJkaXN0dXRpbHMvaW5kZXgiKSB9fSI+RGlzdHJpYnV0aW5nIFB5dGhvbiBNb2R1bGVzPC9hPjxici8+Ci0gICAgICAgICA8c3BhbiBjbGFzcz0ibGlua2Rlc2NyIj5zaGFyaW5nIG1vZHVsZXMgd2l0aCBvdGhlcnM8L3NwYW4+PC9wPgogICAgICAgPHAgY2xhc3M9ImJpZ2xpbmsiPjxhIGNsYXNzPSJiaWdsaW5rIiBocmVmPSJ7eyBwYXRodG8oImZhcS9pbmRleCIpIH19Ij5GQVFzPC9hPjxici8+CiAgICAgICAgICA8c3BhbiBjbGFzcz0ibGlua2Rlc2NyIj5mcmVxdWVudGx5IGFza2VkIHF1ZXN0aW9ucyAod2l0aCBhbnN3ZXJzISk8L3NwYW4+PC9wPgogICAgIDwvdGQ+PC90cj4KZGlmZiAtLWdpdCBhL0RvYy90b29scy90ZW1wbGF0ZXMvaW5kZXhzaWRlYmFyLmh0bWwgYi9Eb2MvdG9vbHMvdGVtcGxhdGVzL2luZGV4c2lkZWJhci5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiZGYwNzAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2MvdG9vbHMvdGVtcGxhdGVzL2luZGV4c2lkZWJhci5odG1sCkBAIC0wLDAgKzEsMTggQEAKKzxoMz5Eb3dubG9hZDwvaDM+Cis8cD48YSBocmVmPSJ7eyBwYXRodG8oJ2Rvd25sb2FkJykgfX0iPkRvd25sb2FkIHRoZXNlIGRvY3VtZW50czwvYT48L3A+Cis8aDM+RG9jcyBmb3Igb3RoZXIgdmVyc2lvbnM8L2gzPgorPHVsPgorICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi43LyI+UHl0aG9uIDIuNyAoc3RhYmxlKTwvYT48L2xpPgorICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy4zLyI+UHl0aG9uIDMuMyAoc3RhYmxlKTwvYT48L2xpPgorICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy41LyI+UHl0aG9uIDMuNSAoaW4gZGV2ZWxvcG1lbnQpPC9hPjwvbGk+CisgIDxsaT48YSBocmVmPSJodHRwczovL3d3dy5weXRob24ub3JnL2RvYy92ZXJzaW9ucy8iPk9sZCB2ZXJzaW9uczwvYT48L2xpPgorPC91bD4KKworPGgzPk90aGVyIHJlc291cmNlczwvaDM+Cis8dWw+CisgIHsjIFhYWDogbWFueSBvZiB0aGVzZSBzaG91bGQgcHJvYmFibHkgYmUgbWVyZ2VkIGluIHRoZSBtYWluIGRvY3MgI30KKyAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vd3d3LnB5dGhvbi5vcmcvZGV2L3BlcHMvIj5QRVAgSW5kZXg8L2E+PC9saT4KKyAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vd2lraS5weXRob24ub3JnL21vaW4vQmVnaW5uZXJzR3VpZGUiPkJlZ2lubmVyJ3MgR3VpZGU8L2E+PC9saT4KKyAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vd2lraS5weXRob24ub3JnL21vaW4vUHl0aG9uQm9va3MiPkJvb2sgTGlzdDwvYT48L2xpPgorICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly93d3cucHl0aG9uLm9yZy9kb2MvYXYvIj5BdWRpby9WaXN1YWwgVGFsa3M8L2E+PC9saT4KKzwvdWw+CmRpZmYgLS1naXQgYS9Eb2MvdG9vbHMvc3BoaW54ZXh0L2xheW91dC5odG1sIGIvRG9jL3Rvb2xzL3RlbXBsYXRlcy9sYXlvdXQuaHRtbApzaW1pbGFyaXR5IGluZGV4IDkyJQpyZW5hbWUgZnJvbSBEb2MvdG9vbHMvc3BoaW54ZXh0L2xheW91dC5odG1sCnJlbmFtZSB0byBEb2MvdG9vbHMvdGVtcGxhdGVzL2xheW91dC5odG1sCmluZGV4IDE2YTkyMTIuLjVhYmZmMWIgMTAwNjQ0Ci0tLSBhL0RvYy90b29scy9zcGhpbnhleHQvbGF5b3V0Lmh0bWwKKysrIGIvRG9jL3Rvb2xzL3RlbXBsYXRlcy9sYXlvdXQuaHRtbApAQCAtMiw3ICsyLDcgQEAKIHslIGJsb2NrIHJvb3RyZWxsaW5rICV9CiAgICAgICAgIDxsaT48aW1nIHNyYz0ie3sgcGF0aHRvKCdfc3RhdGljL3B5LnBuZycsIDEpIH19IiBhbHQ9IiIKICAgICAgICAgICAgICAgICAgc3R5bGU9InZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IG1hcmdpbi10b3A6IC0xcHgiLz48L2xpPgotICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5weXRob24ub3JnLyI+UHl0aG9uPC9hPnt7IHJlbGRlbGltMSB9fTwvbGk+CisgICAgICAgIDxsaT48YSBocmVmPSJodHRwczovL3d3dy5weXRob24ub3JnLyI+UHl0aG9uPC9hPnt7IHJlbGRlbGltMSB9fTwvbGk+CiAgICAgICAgIDxsaT4KICAgICAgICAgICB7JS0gaWYgdmVyc2lvbnN3aXRjaGVyIGlzIGRlZmluZWQgJX0KICAgICAgICAgICA8c3BhbiBjbGFzcz0idmVyc2lvbl9zd2l0Y2hlcl9wbGFjZWhvbGRlciI+e3sgcmVsZWFzZSB9fTwvc3Bhbj4KQEAgLTEyLDYgKzEyLDggQEAKICAgICAgICAgICB7JS0gZW5kaWYgJX0KICAgICAgICAgPC9saT4KIHslIGVuZGJsb2NrICV9Cit7JSBibG9jayByZWxiYXIxICV9IHslIGlmIGJ1aWxkZXIgIT0gJ3F0aGVscCcgJX0ge3sgcmVsYmFyKCkgfX0geyUgZW5kaWYgJX0geyUgZW5kYmxvY2sgJX0KK3slIGJsb2NrIHJlbGJhcjIgJX0geyUgaWYgYnVpbGRlciAhPSAncXRoZWxwJyAlfSB7eyByZWxiYXIoKSB9fSB7JSBlbmRpZiAlfSB7JSBlbmRibG9jayAlfQogeyUgYmxvY2sgZXh0cmFoZWFkICV9CiAgICAgPGxpbmsgcmVsPSJzaG9ydGN1dCBpY29uIiB0eXBlPSJpbWFnZS9wbmciIGhyZWY9Int7IHBhdGh0bygnX3N0YXRpYy9weS5wbmcnLCAxKSB9fSIgLz4KICAgICB7JSBpZiBub3QgZW1iZWRkZWQgJX08c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJ7eyBwYXRodG8oJ19zdGF0aWMvY29weWJ1dHRvbi5qcycsIDEpIH19Ij48L3NjcmlwdD57JSBlbmRpZiAlfQpAQCAtODAsNyArODIsNyBAQAogICAgICZjb3B5OyA8YSBocmVmPSJ7eyBwYXRodG8oJ2NvcHlyaWdodCcpIH19Ij5Db3B5cmlnaHQ8L2E+IHt7IGNvcHlyaWdodHxlIH19LgogICAgIDxiciAvPgogICAgIFRoZSBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiBpcyBhIG5vbi1wcm9maXQgY29ycG9yYXRpb24uCi0gICAgPGEgaHJlZj0iaHR0cDovL3d3dy5weXRob24ub3JnL3BzZi9kb25hdGlvbnMvIj5QbGVhc2UgZG9uYXRlLjwvYT4KKyAgICA8YSBocmVmPSJodHRwczovL3d3dy5weXRob24ub3JnL3BzZi9kb25hdGlvbnMvIj5QbGVhc2UgZG9uYXRlLjwvYT4KICAgICA8YnIgLz4KICAgICBMYXN0IHVwZGF0ZWQgb24ge3sgbGFzdF91cGRhdGVkfGUgfX0uCiAgICAgPGEgaHJlZj0ie3sgcGF0aHRvKCdidWdzJykgfX0iPkZvdW5kIGEgYnVnPC9hPj8KZGlmZiAtLWdpdCBhL0RvYy90b29scy90ZW1wbGF0ZXMvb3BlbnNlYXJjaC54bWwgYi9Eb2MvdG9vbHMvdGVtcGxhdGVzL29wZW5zZWFyY2gueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhNWNkZGQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2MvdG9vbHMvdGVtcGxhdGVzL29wZW5zZWFyY2gueG1sCkBAIC0wLDAgKzEsNCBAQAoreyUgZXh0ZW5kcyAiIW9wZW5zZWFyY2gueG1sIiAlfQoreyUgYmxvY2sgZXh0cmEgLSV9Cis8SW1hZ2UgaGVpZ2h0PSIxNiIgd2lkdGg9IjE2IiB0eXBlPSJpbWFnZS94LWljb24iPmh0dHBzOi8vd3d3LnB5dGhvbi5vcmcvaW1hZ2VzL2Zhdmljb24xNngxNi5pY288L0ltYWdlPgoreyUtIGVuZGJsb2NrICV9CmRpZmYgLS1naXQgYS9Eb2MvdHV0b3JpYWwvYXBwZW5kaXgucnN0IGIvRG9jL3R1dG9yaWFsL2FwcGVuZGl4LnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTUwYzFlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jL3R1dG9yaWFsL2FwcGVuZGl4LnJzdApAQCAtMCwwICsxLDEyNCBAQAorLi4gX3R1dC1hcHBlbmRpeDoKKworKioqKioqKioKK0FwcGVuZGl4CisqKioqKioqKgorCisKKy4uIF90dXQtaW50ZXJhYzoKKworSW50ZXJhY3RpdmUgTW9kZQorPT09PT09PT09PT09PT09PQorCisuLiBfdHV0LWVycm9yOgorCitFcnJvciBIYW5kbGluZworLS0tLS0tLS0tLS0tLS0KKworV2hlbiBhbiBlcnJvciBvY2N1cnMsIHRoZSBpbnRlcnByZXRlciBwcmludHMgYW4gZXJyb3IgbWVzc2FnZSBhbmQgYSBzdGFjayB0cmFjZS4KK0luIGludGVyYWN0aXZlIG1vZGUsIGl0IHRoZW4gcmV0dXJucyB0byB0aGUgcHJpbWFyeSBwcm9tcHQ7IHdoZW4gaW5wdXQgY2FtZSBmcm9tCithIGZpbGUsIGl0IGV4aXRzIHdpdGggYSBub256ZXJvIGV4aXQgc3RhdHVzIGFmdGVyIHByaW50aW5nIHRoZSBzdGFjayB0cmFjZS4KKyhFeGNlcHRpb25zIGhhbmRsZWQgYnkgYW4gOmtleXdvcmQ6YGV4Y2VwdGAgY2xhdXNlIGluIGEgOmtleXdvcmQ6YHRyeWAgc3RhdGVtZW50CithcmUgbm90IGVycm9ycyBpbiB0aGlzIGNvbnRleHQuKSAgU29tZSBlcnJvcnMgYXJlIHVuY29uZGl0aW9uYWxseSBmYXRhbCBhbmQKK2NhdXNlIGFuIGV4aXQgd2l0aCBhIG5vbnplcm8gZXhpdDsgdGhpcyBhcHBsaWVzIHRvIGludGVybmFsIGluY29uc2lzdGVuY2llcyBhbmQKK3NvbWUgY2FzZXMgb2YgcnVubmluZyBvdXQgb2YgbWVtb3J5LiAgQWxsIGVycm9yIG1lc3NhZ2VzIGFyZSB3cml0dGVuIHRvIHRoZQorc3RhbmRhcmQgZXJyb3Igc3RyZWFtOyBub3JtYWwgb3V0cHV0IGZyb20gZXhlY3V0ZWQgY29tbWFuZHMgaXMgd3JpdHRlbiB0bworc3RhbmRhcmQgb3V0cHV0LgorCitUeXBpbmcgdGhlIGludGVycnVwdCBjaGFyYWN0ZXIgKHVzdWFsbHkgOmtiZDpgQ29udHJvbC1DYCBvciA6a2JkOmBEZWxldGVgKSB0byB0aGUgcHJpbWFyeSBvcgorc2Vjb25kYXJ5IHByb21wdCBjYW5jZWxzIHRoZSBpbnB1dCBhbmQgcmV0dXJucyB0byB0aGUgcHJpbWFyeSBwcm9tcHQuIFsjXV8KK1R5cGluZyBhbiBpbnRlcnJ1cHQgd2hpbGUgYSBjb21tYW5kIGlzIGV4ZWN1dGluZyByYWlzZXMgdGhlCis6ZXhjOmBLZXlib2FyZEludGVycnVwdGAgZXhjZXB0aW9uLCB3aGljaCBtYXkgYmUgaGFuZGxlZCBieSBhIDprZXl3b3JkOmB0cnlgCitzdGF0ZW1lbnQuCisKKworLi4gX3R1dC1zY3JpcHRzOgorCitFeGVjdXRhYmxlIFB5dGhvbiBTY3JpcHRzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK09uIEJTRCdpc2ggVW5peCBzeXN0ZW1zLCBQeXRob24gc2NyaXB0cyBjYW4gYmUgbWFkZSBkaXJlY3RseSBleGVjdXRhYmxlLCBsaWtlCitzaGVsbCBzY3JpcHRzLCBieSBwdXR0aW5nIHRoZSBsaW5lIDo6CisKKyAgICMhL3Vzci9iaW4vZW52IHB5dGhvbjMuNAorCisoYXNzdW1pbmcgdGhhdCB0aGUgaW50ZXJwcmV0ZXIgaXMgb24gdGhlIHVzZXIncyA6ZW52dmFyOmBQQVRIYCkgYXQgdGhlIGJlZ2lubmluZworb2YgdGhlIHNjcmlwdCBhbmQgZ2l2aW5nIHRoZSBmaWxlIGFuIGV4ZWN1dGFibGUgbW9kZS4gIFRoZSBgYCMhYGAgbXVzdCBiZSB0aGUKK2ZpcnN0IHR3byBjaGFyYWN0ZXJzIG9mIHRoZSBmaWxlLiAgT24gc29tZSBwbGF0Zm9ybXMsIHRoaXMgZmlyc3QgbGluZSBtdXN0IGVuZAord2l0aCBhIFVuaXgtc3R5bGUgbGluZSBlbmRpbmcgKGBgJ1xuJ2BgKSwgbm90IGEgV2luZG93cyAoYGAnXHJcbidgYCkgbGluZQorZW5kaW5nLiAgTm90ZSB0aGF0IHRoZSBoYXNoLCBvciBwb3VuZCwgY2hhcmFjdGVyLCBgYCcjJ2BgLCBpcyB1c2VkIHRvIHN0YXJ0IGEKK2NvbW1lbnQgaW4gUHl0aG9uLgorCitUaGUgc2NyaXB0IGNhbiBiZSBnaXZlbiBhbiBleGVjdXRhYmxlIG1vZGUsIG9yIHBlcm1pc3Npb24sIHVzaW5nIHRoZQorOnByb2dyYW06YGNobW9kYCBjb21tYW5kLgorCisuLiBjb2RlLWJsb2NrOjogYmFzaAorCisgICAkIGNobW9kICt4IG15c2NyaXB0LnB5CisKK09uIFdpbmRvd3Mgc3lzdGVtcywgdGhlcmUgaXMgbm8gbm90aW9uIG9mIGFuICJleGVjdXRhYmxlIG1vZGUiLiAgVGhlIFB5dGhvbgoraW5zdGFsbGVyIGF1dG9tYXRpY2FsbHkgYXNzb2NpYXRlcyBgYC5weWBgIGZpbGVzIHdpdGggYGBweXRob24uZXhlYGAgc28gdGhhdAorYSBkb3VibGUtY2xpY2sgb24gYSBQeXRob24gZmlsZSB3aWxsIHJ1biBpdCBhcyBhIHNjcmlwdC4gIFRoZSBleHRlbnNpb24gY2FuCithbHNvIGJlIGBgLnB5d2BgLCBpbiB0aGF0IGNhc2UsIHRoZSBjb25zb2xlIHdpbmRvdyB0aGF0IG5vcm1hbGx5IGFwcGVhcnMgaXMKK3N1cHByZXNzZWQuCisKKworLi4gX3R1dC1zdGFydHVwOgorCitUaGUgSW50ZXJhY3RpdmUgU3RhcnR1cCBGaWxlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doZW4geW91IHVzZSBQeXRob24gaW50ZXJhY3RpdmVseSwgaXQgaXMgZnJlcXVlbnRseSBoYW5keSB0byBoYXZlIHNvbWUgc3RhbmRhcmQKK2NvbW1hbmRzIGV4ZWN1dGVkIGV2ZXJ5IHRpbWUgdGhlIGludGVycHJldGVyIGlzIHN0YXJ0ZWQuICBZb3UgY2FuIGRvIHRoaXMgYnkKK3NldHRpbmcgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgbmFtZWQgOmVudnZhcjpgUFlUSE9OU1RBUlRVUGAgdG8gdGhlIG5hbWUgb2YgYQorZmlsZSBjb250YWluaW5nIHlvdXIgc3RhcnQtdXAgY29tbWFuZHMuICBUaGlzIGlzIHNpbWlsYXIgdG8gdGhlIDpmaWxlOmAucHJvZmlsZWAKK2ZlYXR1cmUgb2YgdGhlIFVuaXggc2hlbGxzLgorCitUaGlzIGZpbGUgaXMgb25seSByZWFkIGluIGludGVyYWN0aXZlIHNlc3Npb25zLCBub3Qgd2hlbiBQeXRob24gcmVhZHMgY29tbWFuZHMKK2Zyb20gYSBzY3JpcHQsIGFuZCBub3Qgd2hlbiA6ZmlsZTpgL2Rldi90dHlgIGlzIGdpdmVuIGFzIHRoZSBleHBsaWNpdCBzb3VyY2Ugb2YKK2NvbW1hbmRzICh3aGljaCBvdGhlcndpc2UgYmVoYXZlcyBsaWtlIGFuIGludGVyYWN0aXZlIHNlc3Npb24pLiAgSXQgaXMgZXhlY3V0ZWQKK2luIHRoZSBzYW1lIG5hbWVzcGFjZSB3aGVyZSBpbnRlcmFjdGl2ZSBjb21tYW5kcyBhcmUgZXhlY3V0ZWQsIHNvIHRoYXQgb2JqZWN0cwordGhhdCBpdCBkZWZpbmVzIG9yIGltcG9ydHMgY2FuIGJlIHVzZWQgd2l0aG91dCBxdWFsaWZpY2F0aW9uIGluIHRoZSBpbnRlcmFjdGl2ZQorc2Vzc2lvbi4gWW91IGNhbiBhbHNvIGNoYW5nZSB0aGUgcHJvbXB0cyBgYHN5cy5wczFgYCBhbmQgYGBzeXMucHMyYGAgaW4gdGhpcworZmlsZS4KKworSWYgeW91IHdhbnQgdG8gcmVhZCBhbiBhZGRpdGlvbmFsIHN0YXJ0LXVwIGZpbGUgZnJvbSB0aGUgY3VycmVudCBkaXJlY3RvcnksIHlvdQorY2FuIHByb2dyYW0gdGhpcyBpbiB0aGUgZ2xvYmFsIHN0YXJ0LXVwIGZpbGUgdXNpbmcgY29kZSBsaWtlIGBgaWYKK29zLnBhdGguaXNmaWxlKCcucHl0aG9ucmMucHknKTogZXhlYyhvcGVuKCcucHl0aG9ucmMucHknKS5yZWFkKCkpYGAuCitJZiB5b3Ugd2FudCB0byB1c2UgdGhlIHN0YXJ0dXAgZmlsZSBpbiBhIHNjcmlwdCwgeW91IG11c3QgZG8gdGhpcyBleHBsaWNpdGx5CitpbiB0aGUgc2NyaXB0OjoKKworICAgaW1wb3J0IG9zCisgICBmaWxlbmFtZSA9IG9zLmVudmlyb24uZ2V0KCdQWVRIT05TVEFSVFVQJykKKyAgIGlmIGZpbGVuYW1lIGFuZCBvcy5wYXRoLmlzZmlsZShmaWxlbmFtZSk6CisgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lKSBhcyBmb2JqOgorICAgICAgICAgIHN0YXJ0dXBfZmlsZSA9IGZvYmoucmVhZCgpCisgICAgICAgZXhlYyhzdGFydHVwX2ZpbGUpCisKKworLi4gX3R1dC1jdXN0b21pemU6CisKK1RoZSBDdXN0b21pemF0aW9uIE1vZHVsZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUHl0aG9uIHByb3ZpZGVzIHR3byBob29rcyB0byBsZXQgeW91IGN1c3RvbWl6ZSBpdDogOm1vZDpgc2l0ZWN1c3RvbWl6ZWAgYW5kCis6bW9kOmB1c2VyY3VzdG9taXplYC4gIFRvIHNlZSBob3cgaXQgd29ya3MsIHlvdSBuZWVkIGZpcnN0IHRvIGZpbmQgdGhlIGxvY2F0aW9uCitvZiB5b3VyIHVzZXIgc2l0ZS1wYWNrYWdlcyBkaXJlY3RvcnkuICBTdGFydCBQeXRob24gYW5kIHJ1biB0aGlzIGNvZGU6OgorCisgICA+Pj4gaW1wb3J0IHNpdGUKKyAgID4+PiBzaXRlLmdldHVzZXJzaXRlcGFja2FnZXMoKQorICAgJy9ob21lL3VzZXIvLmxvY2FsL2xpYi9weXRob24zLjQvc2l0ZS1wYWNrYWdlcycKKworTm93IHlvdSBjYW4gY3JlYXRlIGEgZmlsZSBuYW1lZCA6ZmlsZTpgdXNlcmN1c3RvbWl6ZS5weWAgaW4gdGhhdCBkaXJlY3RvcnkgYW5kCitwdXQgYW55dGhpbmcgeW91IHdhbnQgaW4gaXQuICBJdCB3aWxsIGFmZmVjdCBldmVyeSBpbnZvY2F0aW9uIG9mIFB5dGhvbiwgdW5sZXNzCitpdCBpcyBzdGFydGVkIHdpdGggdGhlIDpvcHRpb246YC1zYCBvcHRpb24gdG8gZGlzYWJsZSB0aGUgYXV0b21hdGljIGltcG9ydC4KKworOm1vZDpgc2l0ZWN1c3RvbWl6ZWAgd29ya3MgaW4gdGhlIHNhbWUgd2F5LCBidXQgaXMgdHlwaWNhbGx5IGNyZWF0ZWQgYnkgYW4KK2FkbWluaXN0cmF0b3Igb2YgdGhlIGNvbXB1dGVyIGluIHRoZSBnbG9iYWwgc2l0ZS1wYWNrYWdlcyBkaXJlY3RvcnksIGFuZCBpcworaW1wb3J0ZWQgYmVmb3JlIDptb2Q6YHVzZXJjdXN0b21pemVgLiAgU2VlIHRoZSBkb2N1bWVudGF0aW9uIG9mIHRoZSA6bW9kOmBzaXRlYAorbW9kdWxlIGZvciBtb3JlIGRldGFpbHMuCisKKworLi4gcnVicmljOjogRm9vdG5vdGVzCisKKy4uIFsjXSBBIHByb2JsZW0gd2l0aCB0aGUgR05VIFJlYWRsaW5lIHBhY2thZ2UgbWF5IHByZXZlbnQgdGhpcy4KZGlmZiAtLWdpdCBhL0RvYy90dXRvcmlhbC9jbGFzc2VzLnJzdCBiL0RvYy90dXRvcmlhbC9jbGFzc2VzLnJzdAppbmRleCAwODA3MmEzLi43ZTAxNGVmIDEwMDY0NAotLS0gYS9Eb2MvdHV0b3JpYWwvY2xhc3Nlcy5yc3QKKysrIGIvRG9jL3R1dG9yaWFsL2NsYXNzZXMucnN0CkBAIC0zODcsNiArMzg3LDc3IEBACiBhcmd1bWVudCBsaXN0LgogCiAKKy4uIF90dXQtY2xhc3MtYW5kLWluc3RhbmNlLXZhcmlhYmxlczoKKworQ2xhc3MgYW5kIEluc3RhbmNlIFZhcmlhYmxlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitHZW5lcmFsbHkgc3BlYWtpbmcsIGluc3RhbmNlIHZhcmlhYmxlcyBhcmUgZm9yIGRhdGEgdW5pcXVlIHRvIGVhY2ggaW5zdGFuY2UKK2FuZCBjbGFzcyB2YXJpYWJsZXMgYXJlIGZvciBhdHRyaWJ1dGVzIGFuZCBtZXRob2RzIHNoYXJlZCBieSBhbGwgaW5zdGFuY2VzCitvZiB0aGUgY2xhc3M6OgorCisgICAgY2xhc3MgRG9nOgorCisgICAgICAgIGtpbmQgPSAnY2FuaW5lJyAgICAgICAgICMgY2xhc3MgdmFyaWFibGUgc2hhcmVkIGJ5IGFsbCBpbnN0YW5jZXMKKworICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSk6CisgICAgICAgICAgICBzZWxmLm5hbWUgPSBuYW1lICAgICMgaW5zdGFuY2UgdmFyaWFibGUgdW5pcXVlIHRvIGVhY2ggaW5zdGFuY2UKKworICAgID4+PiBkID0gRG9nKCdGaWRvJykKKyAgICA+Pj4gZSA9IERvZygnQnVkZHknKQorICAgID4+PiBkLmtpbmQgICAgICAgICAgICAgICAgICAjIHNoYXJlZCBieSBhbGwgZG9ncworICAgICdjYW5pbmUnCisgICAgPj4+IGUua2luZCAgICAgICAgICAgICAgICAgICMgc2hhcmVkIGJ5IGFsbCBkb2dzCisgICAgJ2NhbmluZScKKyAgICA+Pj4gZC5uYW1lICAgICAgICAgICAgICAgICAgIyB1bmlxdWUgdG8gZAorICAgICdGaWRvJworICAgID4+PiBlLm5hbWUgICAgICAgICAgICAgICAgICAjIHVuaXF1ZSB0byBlCisgICAgJ0J1ZGR5JworCitBcyBkaXNjdXNzZWQgaW4gOnJlZjpgdHV0LW9iamVjdGAsIHNoYXJlZCBkYXRhIGNhbiBoYXZlIHBvc3NpYmx5IHN1cnByaXNpbmcKK2VmZmVjdHMgd2l0aCBpbnZvbHZpbmcgOnRlcm06YG11dGFibGVgIG9iamVjdHMgc3VjaCBhcyBsaXN0cyBhbmQgZGljdGlvbmFyaWVzLgorRm9yIGV4YW1wbGUsIHRoZSAqdHJpY2tzKiBsaXN0IGluIHRoZSBmb2xsb3dpbmcgY29kZSBzaG91bGQgbm90IGJlIHVzZWQgYXMgYQorY2xhc3MgdmFyaWFibGUgYmVjYXVzZSBqdXN0IGEgc2luZ2xlIGxpc3Qgd291bGQgYmUgc2hhcmVkIGJ5IGFsbCAqRG9nKgoraW5zdGFuY2VzOjoKKworICAgIGNsYXNzIERvZzoKKworICAgICAgICB0cmlja3MgPSBbXSAgICAgICAgICAgICAjIG1pc3Rha2VuIHVzZSBvZiBhIGNsYXNzIHZhcmlhYmxlCisKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUpOgorICAgICAgICAgICAgc2VsZi5uYW1lID0gbmFtZQorCisgICAgICAgIGRlZiBhZGRfdHJpY2soc2VsZiwgdHJpY2spOgorICAgICAgICAgICAgc2VsZi50cmlja3MuYXBwZW5kKHRyaWNrKQorCisgICAgPj4+IGQgPSBEb2coJ0ZpZG8nKQorICAgID4+PiBlID0gRG9nKCdCdWRkeScpCisgICAgPj4+IGQuYWRkX3RyaWNrKCdyb2xsIG92ZXInKQorICAgID4+PiBlLmFkZF90cmljaygncGxheSBkZWFkJykKKyAgICA+Pj4gZC50cmlja3MgICAgICAgICAgICAgICAgIyB1bmV4cGVjdGVkbHkgc2hhcmVkIGJ5IGFsbCBkb2dzCisgICAgWydyb2xsIG92ZXInLCAncGxheSBkZWFkJ10KKworQ29ycmVjdCBkZXNpZ24gb2YgdGhlIGNsYXNzIHNob3VsZCB1c2UgYW4gaW5zdGFuY2UgdmFyaWFibGUgaW5zdGVhZDo6CisKKyAgICBjbGFzcyBEb2c6CisKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUpOgorICAgICAgICAgICAgc2VsZi5uYW1lID0gbmFtZQorICAgICAgICAgICAgc2VsZi50cmlja3MgPSBbXSAgICAjIGNyZWF0ZXMgYSBuZXcgZW1wdHkgbGlzdCBmb3IgZWFjaCBkb2cKKworICAgICAgICBkZWYgYWRkX3RyaWNrKHNlbGYsIHRyaWNrKToKKyAgICAgICAgICAgIHNlbGYudHJpY2tzLmFwcGVuZCh0cmljaykKKworICAgID4+PiBkID0gRG9nKCdGaWRvJykKKyAgICA+Pj4gZSA9IERvZygnQnVkZHknKQorICAgID4+PiBkLmFkZF90cmljaygncm9sbCBvdmVyJykKKyAgICA+Pj4gZS5hZGRfdHJpY2soJ3BsYXkgZGVhZCcpCisgICAgPj4+IGQudHJpY2tzCisgICAgWydyb2xsIG92ZXInXQorICAgID4+PiBlLnRyaWNrcworICAgIFsncGxheSBkZWFkJ10KKworCiAuLiBfdHV0LXJlbWFya3M6CiAKIFJhbmRvbSBSZW1hcmtzCkBAIC01NzIsNyArNjQzLDcgQEAKIGNsYXNzIGNhbiBiZSBzdWJjbGFzc2VkIHdpdGhvdXQgYWZmZWN0aW5nIHRoZSBwcmVjZWRlbmNlIG9yZGVyIG9mIGl0cyBwYXJlbnRzKS4KIFRha2VuIHRvZ2V0aGVyLCB0aGVzZSBwcm9wZXJ0aWVzIG1ha2UgaXQgcG9zc2libGUgdG8gZGVzaWduIHJlbGlhYmxlIGFuZAogZXh0ZW5zaWJsZSBjbGFzc2VzIHdpdGggbXVsdGlwbGUgaW5oZXJpdGFuY2UuICBGb3IgbW9yZSBkZXRhaWwsIHNlZQotaHR0cDovL3d3dy5weXRob24ub3JnL2Rvd25sb2FkL3JlbGVhc2VzLzIuMy9tcm8vLgoraHR0cHM6Ly93d3cucHl0aG9uLm9yZy9kb3dubG9hZC9yZWxlYXNlcy8yLjMvbXJvLy4KIAogCiAuLiBfdHV0LXByaXZhdGU6CkBAIC03MzEsNyArODAyLDcgQEAKICAgIGZvciBjaGFyIGluICIxMjMiOgogICAgICAgIHByaW50KGNoYXIpCiAgICBmb3IgbGluZSBpbiBvcGVuKCJteWZpbGUudHh0Iik6Ci0gICAgICAgcHJpbnQobGluZSkKKyAgICAgICBwcmludChsaW5lLCBlbmQ9JycpCiAKIFRoaXMgc3R5bGUgb2YgYWNjZXNzIGlzIGNsZWFyLCBjb25jaXNlLCBhbmQgY29udmVuaWVudC4gIFRoZSB1c2Ugb2YgaXRlcmF0b3JzCiBwZXJ2YWRlcyBhbmQgdW5pZmllcyBQeXRob24uICBCZWhpbmQgdGhlIHNjZW5lcywgdGhlIDprZXl3b3JkOmBmb3JgIHN0YXRlbWVudApAQCAtNzk4LDcgKzg2OSw3IEBACiA6dGVybTpgR2VuZXJhdG9yYFxzIGFyZSBhIHNpbXBsZSBhbmQgcG93ZXJmdWwgdG9vbCBmb3IgY3JlYXRpbmcgaXRlcmF0b3JzLiAgVGhleQogYXJlIHdyaXR0ZW4gbGlrZSByZWd1bGFyIGZ1bmN0aW9ucyBidXQgdXNlIHRoZSA6a2V5d29yZDpgeWllbGRgIHN0YXRlbWVudAogd2hlbmV2ZXIgdGhleSB3YW50IHRvIHJldHVybiBkYXRhLiAgRWFjaCB0aW1lIDpmdW5jOmBuZXh0YCBpcyBjYWxsZWQgb24gaXQsIHRoZQotZ2VuZXJhdG9yIHJlc3VtZXMgd2hlcmUgaXQgbGVmdC1vZmYgKGl0IHJlbWVtYmVycyBhbGwgdGhlIGRhdGEgdmFsdWVzIGFuZCB3aGljaAorZ2VuZXJhdG9yIHJlc3VtZXMgd2hlcmUgaXQgbGVmdCBvZmYgKGl0IHJlbWVtYmVycyBhbGwgdGhlIGRhdGEgdmFsdWVzIGFuZCB3aGljaAogc3RhdGVtZW50IHdhcyBsYXN0IGV4ZWN1dGVkKS4gIEFuIGV4YW1wbGUgc2hvd3MgdGhhdCBnZW5lcmF0b3JzIGNhbiBiZSB0cml2aWFsbHkKIGVhc3kgdG8gY3JlYXRlOjoKIApAQCAtODE2LDcgKzg4Nyw3IEBACiAgICBvCiAgICBnCiAKLUFueXRoaW5nIHRoYXQgY2FuIGJlIGRvbmUgd2l0aCBnZW5lcmF0b3JzIGNhbiBhbHNvIGJlIGRvbmUgd2l0aCBjbGFzcyBiYXNlZAorQW55dGhpbmcgdGhhdCBjYW4gYmUgZG9uZSB3aXRoIGdlbmVyYXRvcnMgY2FuIGFsc28gYmUgZG9uZSB3aXRoIGNsYXNzLWJhc2VkCiBpdGVyYXRvcnMgYXMgZGVzY3JpYmVkIGluIHRoZSBwcmV2aW91cyBzZWN0aW9uLiAgV2hhdCBtYWtlcyBnZW5lcmF0b3JzIHNvCiBjb21wYWN0IGlzIHRoYXQgdGhlIDptZXRoOmBfX2l0ZXJfX2AgYW5kIDptZXRoOmB+Z2VuZXJhdG9yLl9fbmV4dF9fYCBtZXRob2RzCiBhcmUgY3JlYXRlZCBhdXRvbWF0aWNhbGx5LgpkaWZmIC0tZ2l0IGEvRG9jL3R1dG9yaWFsL2NvbnRyb2xmbG93LnJzdCBiL0RvYy90dXRvcmlhbC9jb250cm9sZmxvdy5yc3QKaW5kZXggOTdhZWE0Zi4uODEzYzgyOCAxMDA2NDQKLS0tIGEvRG9jL3R1dG9yaWFsL2NvbnRyb2xmbG93LnJzdAorKysgYi9Eb2MvdHV0b3JpYWwvY29udHJvbGZsb3cucnN0CkBAIC0zNzAsNyArMzcwLDcgQEAKICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICAgICByZXRyaWVzID0gcmV0cmllcyAtIDEKICAgICAgICAgICAgaWYgcmV0cmllcyA8IDA6Ci0gICAgICAgICAgICAgICByYWlzZSBJT0Vycm9yKCd1bmNvb3BlcmF0aXZlIHVzZXInKQorICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigndW5jb29wZXJhdGl2ZSB1c2VyJykKICAgICAgICAgICAgcHJpbnQoY29tcGxhaW50KQogCiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgaW4gc2V2ZXJhbCB3YXlzOgpAQCAtNjczLDExICs2NzMsOSBAQAogICAgcGFpcjogZnVuY3Rpb247IGFubm90YXRpb25zCiAgICBzaW5nbGU6IC0+IChyZXR1cm4gYW5ub3RhdGlvbiBhc3NpZ25tZW50KQogCi06cmVmOmBGdW5jdGlvbiBhbm5vdGF0aW9ucyA8ZnVuY3Rpb24+YCBhcmUgY29tcGxldGVseSBvcHRpb25hbCwKLWFyYml0cmFyeSBtZXRhZGF0YSBpbmZvcm1hdGlvbiBhYm91dCB1c2VyLWRlZmluZWQgZnVuY3Rpb25zLiAgTmVpdGhlciBQeXRob24KLWl0c2VsZiBub3IgdGhlIHN0YW5kYXJkIGxpYnJhcnkgdXNlIGZ1bmN0aW9uIGFubm90YXRpb25zIGluIGFueSB3YXk7IHRoaXMKLXNlY3Rpb24ganVzdCBzaG93cyB0aGUgc3ludGF4LiBUaGlyZC1wYXJ0eSBwcm9qZWN0cyBhcmUgZnJlZSB0byB1c2UgZnVuY3Rpb24KLWFubm90YXRpb25zIGZvciBkb2N1bWVudGF0aW9uLCB0eXBlIGNoZWNraW5nLCBhbmQgb3RoZXIgdXNlcy4KKzpyZWY6YEZ1bmN0aW9uIGFubm90YXRpb25zIDxmdW5jdGlvbj5gIGFyZSBjb21wbGV0ZWx5IG9wdGlvbmFsIG1ldGFkYXRhCitpbmZvcm1hdGlvbiBhYm91dCB0aGUgdHlwZXMgdXNlZCBieSB1c2VyLWRlZmluZWQgZnVuY3Rpb25zIChzZWUgOnBlcDpgNDg0YAorZm9yIG1vcmUgaW5mb3JtYXRpb24pLgogCiBBbm5vdGF0aW9ucyBhcmUgc3RvcmVkIGluIHRoZSA6YXR0cjpgX19hbm5vdGF0aW9uc19fYCBhdHRyaWJ1dGUgb2YgdGhlIGZ1bmN0aW9uCiBhcyBhIGRpY3Rpb25hcnkgYW5kIGhhdmUgbm8gZWZmZWN0IG9uIGFueSBvdGhlciBwYXJ0IG9mIHRoZSBmdW5jdGlvbi4gIFBhcmFtZXRlcgpAQCAtNjg2LDE2ICs2ODQsMTcgQEAKIGRlZmluZWQgYnkgYSBsaXRlcmFsIGBgLT5gYCwgZm9sbG93ZWQgYnkgYW4gZXhwcmVzc2lvbiwgYmV0d2VlbiB0aGUgcGFyYW1ldGVyCiBsaXN0IGFuZCB0aGUgY29sb24gZGVub3RpbmcgdGhlIGVuZCBvZiB0aGUgOmtleXdvcmQ6YGRlZmAgc3RhdGVtZW50LiAgVGhlCiBmb2xsb3dpbmcgZXhhbXBsZSBoYXMgYSBwb3NpdGlvbmFsIGFyZ3VtZW50LCBhIGtleXdvcmQgYXJndW1lbnQsIGFuZCB0aGUgcmV0dXJuCi12YWx1ZSBhbm5vdGF0ZWQgd2l0aCBub25zZW5zZTo6Cit2YWx1ZSBhbm5vdGF0ZWQ6OgogCi0gICA+Pj4gZGVmIGYoaGFtOiA0MiwgZWdnczogaW50ID0gJ3NwYW0nKSAtPiAiTm90aGluZyB0byBzZWUgaGVyZSI6CisgICA+Pj4gZGVmIGYoaGFtOiBzdHIsIGVnZ3M6IHN0ciA9ICdlZ2dzJykgLT4gc3RyOgogICAgLi4uICAgICBwcmludCgiQW5ub3RhdGlvbnM6IiwgZi5fX2Fubm90YXRpb25zX18pCiAgICAuLi4gICAgIHByaW50KCJBcmd1bWVudHM6IiwgaGFtLCBlZ2dzKQorICAgLi4uICAgICByZXR1cm4gaGFtICsgJyBhbmQgJyArIGVnZ3MKICAgIC4uLgotICAgPj4+IGYoJ3dvbmRlcmZ1bCcpCi0gICBBbm5vdGF0aW9uczogeydlZ2dzJzogPGNsYXNzICdpbnQnPiwgJ3JldHVybic6ICdOb3RoaW5nIHRvIHNlZSBoZXJlJywgJ2hhbSc6IDQyfQotICAgQXJndW1lbnRzOiB3b25kZXJmdWwgc3BhbQotCisgICA+Pj4gZignc3BhbScpCisgICBBbm5vdGF0aW9uczogeydoYW0nOiA8Y2xhc3MgJ3N0cic+LCAncmV0dXJuJzogPGNsYXNzICdzdHInPiwgJ2VnZ3MnOiA8Y2xhc3MgJ3N0cic+fQorICAgQXJndW1lbnRzOiBzcGFtIGVnZ3MKKyAgICdzcGFtIGFuZCBlZ2dzJwogCiAuLiBfdHV0LWNvZGluZ3N0eWxlOgogCmRpZmYgLS1naXQgYS9Eb2MvdHV0b3JpYWwvZGF0YXN0cnVjdHVyZXMucnN0IGIvRG9jL3R1dG9yaWFsL2RhdGFzdHJ1Y3R1cmVzLnJzdAppbmRleCAyNGQyZDJlLi4xZWEyOTlmIDEwMDY0NAotLS0gYS9Eb2MvdHV0b3JpYWwvZGF0YXN0cnVjdHVyZXMucnN0CisrKyBiL0RvYy90dXRvcmlhbC9kYXRhc3RydWN0dXJlcy5yc3QKQEAgLTExMSwxMCArMTExLDE1IEBACiAgICA+Pj4gYS5zb3J0KCkKICAgID4+PiBhCiAgICBbLTEsIDEsIDY2LjI1LCAzMzMsIDMzMywgMTIzNC41XQorICAgPj4+IGEucG9wKCkKKyAgIDEyMzQuNQorICAgPj4+IGEKKyAgIFstMSwgMSwgNjYuMjUsIDMzMywgMzMzXQogCiBZb3UgbWlnaHQgaGF2ZSBub3RpY2VkIHRoYXQgbWV0aG9kcyBsaWtlIGBgaW5zZXJ0YGAsIGBgcmVtb3ZlYGAgb3IgYGBzb3J0YGAgdGhhdAotbW9kaWZ5IHRoZSBsaXN0IGhhdmUgbm8gcmV0dXJuIHZhbHVlIHByaW50ZWQgLS0gdGhleSByZXR1cm4gYGBOb25lYGAuIFsxXV8gIFRoaXMKLWlzIGEgZGVzaWduIHByaW5jaXBsZSBmb3IgYWxsIG11dGFibGUgZGF0YSBzdHJ1Y3R1cmVzIGluIFB5dGhvbi4KK29ubHkgbW9kaWZ5IHRoZSBsaXN0IGhhdmUgbm8gcmV0dXJuIHZhbHVlIHByaW50ZWQgLS0gdGhleSByZXR1cm4gdGhlIGRlZmF1bHQKK2BgTm9uZWBgLiBbMV1fICBUaGlzIGlzIGEgZGVzaWduIHByaW5jaXBsZSBmb3IgYWxsIG11dGFibGUgZGF0YSBzdHJ1Y3R1cmVzIGluCitQeXRob24uCiAKIAogLi4gX3R1dC1saXN0cy1hcy1zdGFja3M6CkBAIC0xOTQsMTIgKzE5OSwxNyBAQAogICAgPj4+IHNxdWFyZXMKICAgIFswLCAxLCA0LCA5LCAxNiwgMjUsIDM2LCA0OSwgNjQsIDgxXQogCi1XZSBjYW4gb2J0YWluIHRoZSBzYW1lIHJlc3VsdCB3aXRoOjoKK05vdGUgdGhhdCB0aGlzIGNyZWF0ZXMgKG9yIG92ZXJ3cml0ZXMpIGEgdmFyaWFibGUgbmFtZWQgYGB4YGAgdGhhdCBzdGlsbCBleGlzdHMKK2FmdGVyIHRoZSBsb29wIGNvbXBsZXRlcy4gIFdlIGNhbiBjYWxjdWxhdGUgdGhlIGxpc3Qgb2Ygc3F1YXJlcyB3aXRob3V0IGFueQorc2lkZSBlZmZlY3RzIHVzaW5nOjoKKworICAgc3F1YXJlcyA9IGxpc3QobWFwKGxhbWJkYSB4OiB4KioyLCByYW5nZSgxMCkpKQorCitvciwgZXF1aXZhbGVudGx5OjoKIAogICAgc3F1YXJlcyA9IFt4KioyIGZvciB4IGluIHJhbmdlKDEwKV0KIAotVGhpcyBpcyBhbHNvIGVxdWl2YWxlbnQgdG8gYGBzcXVhcmVzID0gbGlzdChtYXAobGFtYmRhIHg6IHgqKjIsIHJhbmdlKDEwKSkpYGAsCi1idXQgaXQncyBtb3JlIGNvbmNpc2UgYW5kIHJlYWRhYmxlLgord2hpY2ggaXMgbW9yZSBjb25jaXNlIGFuZCByZWFkYWJsZS4KIAogQSBsaXN0IGNvbXByZWhlbnNpb24gY29uc2lzdHMgb2YgYnJhY2tldHMgY29udGFpbmluZyBhbiBleHByZXNzaW9uIGZvbGxvd2VkCiBieSBhIDprZXl3b3JkOmBmb3JgIGNsYXVzZSwgdGhlbiB6ZXJvIG9yIG1vcmUgOmtleXdvcmQ6YGZvcmAgb3IgOmtleXdvcmQ6YGlmYApAQCAtNjc0LDcgKzY4NCw3IEBACiBhbGwgaXRlbXMgb2YgdHdvIHNlcXVlbmNlcyBjb21wYXJlIGVxdWFsLCB0aGUgc2VxdWVuY2VzIGFyZSBjb25zaWRlcmVkIGVxdWFsLgogSWYgb25lIHNlcXVlbmNlIGlzIGFuIGluaXRpYWwgc3ViLXNlcXVlbmNlIG9mIHRoZSBvdGhlciwgdGhlIHNob3J0ZXIgc2VxdWVuY2UgaXMKIHRoZSBzbWFsbGVyIChsZXNzZXIpIG9uZS4gIExleGljb2dyYXBoaWNhbCBvcmRlcmluZyBmb3Igc3RyaW5ncyB1c2VzIHRoZSBVbmljb2RlCi1jb2RlcG9pbnQgbnVtYmVyIHRvIG9yZGVyIGluZGl2aWR1YWwgY2hhcmFjdGVycy4gIFNvbWUgZXhhbXBsZXMgb2YgY29tcGFyaXNvbnMKK2NvZGUgcG9pbnQgbnVtYmVyIHRvIG9yZGVyIGluZGl2aWR1YWwgY2hhcmFjdGVycy4gIFNvbWUgZXhhbXBsZXMgb2YgY29tcGFyaXNvbnMKIGJldHdlZW4gc2VxdWVuY2VzIG9mIHRoZSBzYW1lIHR5cGU6OgogCiAgICAoMSwgMiwgMykgICAgICAgICAgICAgIDwgKDEsIDIsIDQpCmRpZmYgLS1naXQgYS9Eb2MvdHV0b3JpYWwvZXJyb3JzLnJzdCBiL0RvYy90dXRvcmlhbC9lcnJvcnMucnN0CmluZGV4IDQyODIxNTEuLjM1MWVlNTIgMTAwNjQ0Ci0tLSBhL0RvYy90dXRvcmlhbC9lcnJvcnMucnN0CisrKyBiL0RvYy90dXRvcmlhbC9lcnJvcnMucnN0CkBAIC0xMzEsOCArMTMxLDggQEAKICAgICAgICBmID0gb3BlbignbXlmaWxlLnR4dCcpCiAgICAgICAgcyA9IGYucmVhZGxpbmUoKQogICAgICAgIGkgPSBpbnQocy5zdHJpcCgpKQotICAgZXhjZXB0IElPRXJyb3IgYXMgZXJyOgotICAgICAgIHByaW50KCJJL08gZXJyb3I6IHswfSIuZm9ybWF0KGVycikpCisgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CisgICAgICAgcHJpbnQoIk9TIGVycm9yOiB7MH0iLmZvcm1hdChlcnIpKQogICAgZXhjZXB0IFZhbHVlRXJyb3I6CiAgICAgICAgcHJpbnQoIkNvdWxkIG5vdCBjb252ZXJ0IGRhdGEgdG8gYW4gaW50ZWdlci4iKQogICAgZXhjZXB0OgpAQCAtMzM2LDcgKzMzNiw3IEBACiBBICpmaW5hbGx5IGNsYXVzZSogaXMgYWx3YXlzIGV4ZWN1dGVkIGJlZm9yZSBsZWF2aW5nIHRoZSA6a2V5d29yZDpgdHJ5YAogc3RhdGVtZW50LCB3aGV0aGVyIGFuIGV4Y2VwdGlvbiBoYXMgb2NjdXJyZWQgb3Igbm90LiBXaGVuIGFuIGV4Y2VwdGlvbiBoYXMKIG9jY3VycmVkIGluIHRoZSA6a2V5d29yZDpgdHJ5YCBjbGF1c2UgYW5kIGhhcyBub3QgYmVlbiBoYW5kbGVkIGJ5IGFuCi06a2V5d29yZDpgZXhjZXB0YCBjbGF1c2UgKG9yIGl0IGhhcyBvY2N1cnJlZCBpbiBhIDprZXl3b3JkOmBleGNlcHRgIG9yCis6a2V5d29yZDpgZXhjZXB0YCBjbGF1c2UgKG9yIGl0IGhhcyBvY2N1cnJlZCBpbiBhbiA6a2V5d29yZDpgZXhjZXB0YCBvcgogOmtleXdvcmQ6YGVsc2VgIGNsYXVzZSksIGl0IGlzIHJlLXJhaXNlZCBhZnRlciB0aGUgOmtleXdvcmQ6YGZpbmFsbHlgIGNsYXVzZSBoYXMKIGJlZW4gZXhlY3V0ZWQuICBUaGUgOmtleXdvcmQ6YGZpbmFsbHlgIGNsYXVzZSBpcyBhbHNvIGV4ZWN1dGVkICJvbiB0aGUgd2F5IG91dCIKIHdoZW4gYW55IG90aGVyIGNsYXVzZSBvZiB0aGUgOmtleXdvcmQ6YHRyeWAgc3RhdGVtZW50IGlzIGxlZnQgdmlhIGEKZGlmZiAtLWdpdCBhL0RvYy90dXRvcmlhbC9pbmRleC5yc3QgYi9Eb2MvdHV0b3JpYWwvaW5kZXgucnN0CmluZGV4IDYwNGNmZjguLjhlZTAxMWUgMTAwNjQ0Ci0tLSBhL0RvYy90dXRvcmlhbC9pbmRleC5yc3QKKysrIGIvRG9jL3R1dG9yaWFsL2luZGV4LnJzdApAQCAtMTIsNyArMTIsNyBAQAogCiBUaGUgUHl0aG9uIGludGVycHJldGVyIGFuZCB0aGUgZXh0ZW5zaXZlIHN0YW5kYXJkIGxpYnJhcnkgYXJlIGZyZWVseSBhdmFpbGFibGUKIGluIHNvdXJjZSBvciBiaW5hcnkgZm9ybSBmb3IgYWxsIG1ham9yIHBsYXRmb3JtcyBmcm9tIHRoZSBQeXRob24gV2ViIHNpdGUsCi1odHRwOi8vd3d3LnB5dGhvbi5vcmcvLCBhbmQgbWF5IGJlIGZyZWVseSBkaXN0cmlidXRlZC4gVGhlIHNhbWUgc2l0ZSBhbHNvCitodHRwczovL3d3dy5weXRob24ub3JnLywgYW5kIG1heSBiZSBmcmVlbHkgZGlzdHJpYnV0ZWQuIFRoZSBzYW1lIHNpdGUgYWxzbwogY29udGFpbnMgZGlzdHJpYnV0aW9ucyBvZiBhbmQgcG9pbnRlcnMgdG8gbWFueSBmcmVlIHRoaXJkIHBhcnR5IFB5dGhvbiBtb2R1bGVzLAogcHJvZ3JhbXMgYW5kIHRvb2xzLCBhbmQgYWRkaXRpb25hbCBkb2N1bWVudGF0aW9uLgogCkBAIC01Myw2ICs1Myw4IEBACiAgICBjbGFzc2VzLnJzdAogICAgc3RkbGliLnJzdAogICAgc3RkbGliMi5yc3QKKyAgIHZlbnYucnN0CiAgICB3aGF0bm93LnJzdAogICAgaW50ZXJhY3RpdmUucnN0CiAgICBmbG9hdGluZ3BvaW50LnJzdAorICAgYXBwZW5kaXgucnN0CmRpZmYgLS1naXQgYS9Eb2MvdHV0b3JpYWwvaW5wdXRvdXRwdXQucnN0IGIvRG9jL3R1dG9yaWFsL2lucHV0b3V0cHV0LnJzdAppbmRleCBiM2JmMGVmLi5jMTU3ZjIyIDEwMDY0NAotLS0gYS9Eb2MvdHV0b3JpYWwvaW5wdXRvdXRwdXQucnN0CisrKyBiL0RvYy90dXRvcmlhbC9pbnB1dG91dHB1dC5yc3QKQEAgLTI0Nyw4ICsyNDcsOSBAQAogb21pdHRlZC4KIAogTm9ybWFsbHksIGZpbGVzIGFyZSBvcGVuZWQgaW4gOmRmbjpgdGV4dCBtb2RlYCwgdGhhdCBtZWFucywgeW91IHJlYWQgYW5kIHdyaXRlCi1zdHJpbmdzIGZyb20gYW5kIHRvIHRoZSBmaWxlLCB3aGljaCBhcmUgZW5jb2RlZCBpbiBhIHNwZWNpZmljIGVuY29kaW5nICh0aGUKLWRlZmF1bHQgYmVpbmcgVVRGLTgpLiAgYGAnYidgYCBhcHBlbmRlZCB0byB0aGUgbW9kZSBvcGVucyB0aGUgZmlsZSBpbgorc3RyaW5ncyBmcm9tIGFuZCB0byB0aGUgZmlsZSwgd2hpY2ggYXJlIGVuY29kZWQgaW4gYSBzcGVjaWZpYyBlbmNvZGluZy4gSWYKK2VuY29kaW5nIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBkZWZhdWx0IGlzIHBsYXRmb3JtIGRlcGVuZGVudCAoc2VlCis6ZnVuYzpgb3BlbmApLiBgYCdiJ2BgIGFwcGVuZGVkIHRvIHRoZSBtb2RlIG9wZW5zIHRoZSBmaWxlIGluCiA6ZGZuOmBiaW5hcnkgbW9kZWA6IG5vdyB0aGUgZGF0YSBpcyByZWFkIGFuZCB3cml0dGVuIGluIHRoZSBmb3JtIG9mIGJ5dGVzCiBvYmplY3RzLiAgVGhpcyBtb2RlIHNob3VsZCBiZSB1c2VkIGZvciBhbGwgZmlsZXMgdGhhdCBkb24ndCBjb250YWluIHRleHQuCiAKQEAgLTMyMyw4ICszMjQsOCBAQAogICAgMTgKIAogYGBmLnRlbGwoKWBgIHJldHVybnMgYW4gaW50ZWdlciBnaXZpbmcgdGhlIGZpbGUgb2JqZWN0J3MgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgZmlsZQotcmVwcmVzZW50ZWQgYXMgbnVtYmVyIG9mIGJ5dGVzIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZSB3aGVuIGluIGBiaW5hcnkgbW9kZWAgYW5kCi1hbiBvcGFxdWUgbnVtYmVyIHdoZW4gaW4gYHRleHQgbW9kZWAuCityZXByZXNlbnRlZCBhcyBudW1iZXIgb2YgYnl0ZXMgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlIHdoZW4gaW4gYmluYXJ5IG1vZGUgYW5kCithbiBvcGFxdWUgbnVtYmVyIHdoZW4gaW4gdGV4dCBtb2RlLgogCiBUbyBjaGFuZ2UgdGhlIGZpbGUgb2JqZWN0J3MgcG9zaXRpb24sIHVzZSBgYGYuc2VlayhvZmZzZXQsIGZyb21fd2hhdClgYC4gIFRoZSBwb3NpdGlvbiBpcyBjb21wdXRlZAogZnJvbSBhZGRpbmcgKm9mZnNldCogdG8gYSByZWZlcmVuY2UgcG9pbnQ7IHRoZSByZWZlcmVuY2UgcG9pbnQgaXMgc2VsZWN0ZWQgYnkKQEAgLTQzNyw0ICs0MzgsMyBAQAogICAgd3JpdHRlbiBpbiBvdGhlciBsYW5ndWFnZXMuICBJdCBpcyBhbHNvIGluc2VjdXJlIGJ5IGRlZmF1bHQ6CiAgICBkZXNlcmlhbGl6aW5nIHBpY2tsZSBkYXRhIGNvbWluZyBmcm9tIGFuIHVudHJ1c3RlZCBzb3VyY2UgY2FuIGV4ZWN1dGUKICAgIGFyYml0cmFyeSBjb2RlLCBpZiB0aGUgZGF0YSB3YXMgY3JhZnRlZCBieSBhIHNraWxsZWQgYXR0YWNrZXIuCi0KZGlmZiAtLWdpdCBhL0RvYy90dXRvcmlhbC9pbnRlcmFjdGl2ZS5yc3QgYi9Eb2MvdHV0b3JpYWwvaW50ZXJhY3RpdmUucnN0CmluZGV4IDM2YWNiMDYuLmFiZjMwZjAgMTAwNjQ0Ci0tLSBhL0RvYy90dXRvcmlhbC9pbnRlcmFjdGl2ZS5yc3QKKysrIGIvRG9jL3R1dG9yaWFsL2ludGVyYWN0aXZlLnJzdApAQCAtNywxNDAgKzcsMjcgQEAKIFNvbWUgdmVyc2lvbnMgb2YgdGhlIFB5dGhvbiBpbnRlcnByZXRlciBzdXBwb3J0IGVkaXRpbmcgb2YgdGhlIGN1cnJlbnQgaW5wdXQKIGxpbmUgYW5kIGhpc3Rvcnkgc3Vic3RpdHV0aW9uLCBzaW1pbGFyIHRvIGZhY2lsaXRpZXMgZm91bmQgaW4gdGhlIEtvcm4gc2hlbGwgYW5kCiB0aGUgR05VIEJhc2ggc2hlbGwuICBUaGlzIGlzIGltcGxlbWVudGVkIHVzaW5nIHRoZSBgR05VIFJlYWRsaW5lYF8gbGlicmFyeSwKLXdoaWNoIHN1cHBvcnRzIEVtYWNzLXN0eWxlIGFuZCB2aS1zdHlsZSBlZGl0aW5nLiAgVGhpcyBsaWJyYXJ5IGhhcyBpdHMgb3duCi1kb2N1bWVudGF0aW9uIHdoaWNoIEkgd29uJ3QgZHVwbGljYXRlIGhlcmU7IGhvd2V2ZXIsIHRoZSBiYXNpY3MgYXJlIGVhc2lseQotZXhwbGFpbmVkLiAgVGhlIGludGVyYWN0aXZlIGVkaXRpbmcgYW5kIGhpc3RvcnkgZGVzY3JpYmVkIGhlcmUgYXJlIG9wdGlvbmFsbHkKLWF2YWlsYWJsZSBpbiB0aGUgVW5peCBhbmQgQ3lnd2luIHZlcnNpb25zIG9mIHRoZSBpbnRlcnByZXRlci4KLQotVGhpcyBjaGFwdGVyIGRvZXMgKm5vdCogZG9jdW1lbnQgdGhlIGVkaXRpbmcgZmFjaWxpdGllcyBvZiBNYXJrIEhhbW1vbmQncwotUHl0aG9uV2luIHBhY2thZ2Ugb3IgdGhlIFRrLWJhc2VkIGVudmlyb25tZW50LCBJRExFLCBkaXN0cmlidXRlZCB3aXRoIFB5dGhvbi4KLVRoZSBjb21tYW5kIGxpbmUgaGlzdG9yeSByZWNhbGwgd2hpY2ggb3BlcmF0ZXMgd2l0aGluIERPUyBib3hlcyBvbiBOVCBhbmQgc29tZQotb3RoZXIgRE9TIGFuZCBXaW5kb3dzIGZsYXZvcnMgIGlzIHlldCBhbm90aGVyIGJlYXN0LgotCi0KLS4uIF90dXQtbGluZWVkaXRpbmc6Ci0KLUxpbmUgRWRpdGluZwotPT09PT09PT09PT09Ci0KLUlmIHN1cHBvcnRlZCwgaW5wdXQgbGluZSBlZGl0aW5nIGlzIGFjdGl2ZSB3aGVuZXZlciB0aGUgaW50ZXJwcmV0ZXIgcHJpbnRzIGEKLXByaW1hcnkgb3Igc2Vjb25kYXJ5IHByb21wdC4gIFRoZSBjdXJyZW50IGxpbmUgY2FuIGJlIGVkaXRlZCB1c2luZyB0aGUKLWNvbnZlbnRpb25hbCBFbWFjcyBjb250cm9sIGNoYXJhY3RlcnMuICBUaGUgbW9zdCBpbXBvcnRhbnQgb2YgdGhlc2UgYXJlOgotOmtiZDpgQy1BYCAoQ29udHJvbC1BKSBtb3ZlcyB0aGUgY3Vyc29yIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpbmUsIDprYmQ6YEMtRWAKLXRvIHRoZSBlbmQsIDprYmQ6YEMtQmAgbW92ZXMgaXQgb25lIHBvc2l0aW9uIHRvIHRoZSBsZWZ0LCA6a2JkOmBDLUZgIHRvIHRoZQotcmlnaHQuICBCYWNrc3BhY2UgZXJhc2VzIHRoZSBjaGFyYWN0ZXIgdG8gdGhlIGxlZnQgb2YgdGhlIGN1cnNvciwgOmtiZDpgQy1EYCB0aGUKLWNoYXJhY3RlciB0byBpdHMgcmlnaHQuIDprYmQ6YEMtS2Aga2lsbHMgKGVyYXNlcykgdGhlIHJlc3Qgb2YgdGhlIGxpbmUgdG8gdGhlCi1yaWdodCBvZiB0aGUgY3Vyc29yLCA6a2JkOmBDLVlgIHlhbmtzIGJhY2sgdGhlIGxhc3Qga2lsbGVkIHN0cmluZy4KLTprYmQ6YEMtdW5kZXJzY29yZWAgdW5kb2VzIHRoZSBsYXN0IGNoYW5nZSB5b3UgbWFkZTsgaXQgY2FuIGJlIHJlcGVhdGVkIGZvcgotY3VtdWxhdGl2ZSBlZmZlY3QuCi0KLQotLi4gX3R1dC1oaXN0b3J5OgotCi1IaXN0b3J5IFN1YnN0aXR1dGlvbgotPT09PT09PT09PT09PT09PT09PT0KLQotSGlzdG9yeSBzdWJzdGl0dXRpb24gd29ya3MgYXMgZm9sbG93cy4gIEFsbCBub24tZW1wdHkgaW5wdXQgbGluZXMgaXNzdWVkIGFyZQotc2F2ZWQgaW4gYSBoaXN0b3J5IGJ1ZmZlciwgYW5kIHdoZW4gYSBuZXcgcHJvbXB0IGlzIGdpdmVuIHlvdSBhcmUgcG9zaXRpb25lZCBvbgotYSBuZXcgbGluZSBhdCB0aGUgYm90dG9tIG9mIHRoaXMgYnVmZmVyLiA6a2JkOmBDLVBgIG1vdmVzIG9uZSBsaW5lIHVwIChiYWNrKSBpbgotdGhlIGhpc3RvcnkgYnVmZmVyLCA6a2JkOmBDLU5gIG1vdmVzIG9uZSBkb3duLiAgQW55IGxpbmUgaW4gdGhlIGhpc3RvcnkgYnVmZmVyCi1jYW4gYmUgZWRpdGVkOyBhbiBhc3RlcmlzayBhcHBlYXJzIGluIGZyb250IG9mIHRoZSBwcm9tcHQgdG8gbWFyayBhIGxpbmUgYXMKLW1vZGlmaWVkLiAgUHJlc3NpbmcgdGhlIDprYmQ6YFJldHVybmAga2V5IHBhc3NlcyB0aGUgY3VycmVudCBsaW5lIHRvIHRoZQotaW50ZXJwcmV0ZXIuICA6a2JkOmBDLVJgIHN0YXJ0cyBhbiBpbmNyZW1lbnRhbCByZXZlcnNlIHNlYXJjaDsgOmtiZDpgQy1TYCBzdGFydHMKLWEgZm9yd2FyZCBzZWFyY2guCit3aGljaCBzdXBwb3J0cyB2YXJpb3VzIHN0eWxlcyBvZiBlZGl0aW5nLiAgVGhpcyBsaWJyYXJ5IGhhcyBpdHMgb3duCitkb2N1bWVudGF0aW9uIHdoaWNoIHdlIHdvbid0IGR1cGxpY2F0ZSBoZXJlLgogCiAKIC4uIF90dXQta2V5YmluZGluZ3M6CiAKLUtleSBCaW5kaW5ncwotPT09PT09PT09PT09CitUYWIgQ29tcGxldGlvbiBhbmQgSGlzdG9yeSBFZGl0aW5nCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKLVRoZSBrZXkgYmluZGluZ3MgYW5kIHNvbWUgb3RoZXIgcGFyYW1ldGVycyBvZiB0aGUgUmVhZGxpbmUgbGlicmFyeSBjYW4gYmUKLWN1c3RvbWl6ZWQgYnkgcGxhY2luZyBjb21tYW5kcyBpbiBhbiBpbml0aWFsaXphdGlvbiBmaWxlIGNhbGxlZAotOmZpbGU6YH4vLmlucHV0cmNgLiAgS2V5IGJpbmRpbmdzIGhhdmUgdGhlIGZvcm0gOjoKLQotICAga2V5LW5hbWU6IGZ1bmN0aW9uLW5hbWUKLQotb3IgOjoKLQotICAgInN0cmluZyI6IGZ1bmN0aW9uLW5hbWUKLQotYW5kIG9wdGlvbnMgY2FuIGJlIHNldCB3aXRoIDo6Ci0KLSAgIHNldCBvcHRpb24tbmFtZSB2YWx1ZQotCi1Gb3IgZXhhbXBsZTo6Ci0KLSAgICMgSSBwcmVmZXIgdmktc3R5bGUgZWRpdGluZzoKLSAgIHNldCBlZGl0aW5nLW1vZGUgdmkKLQotICAgIyBFZGl0IHVzaW5nIGEgc2luZ2xlIGxpbmU6Ci0gICBzZXQgaG9yaXpvbnRhbC1zY3JvbGwtbW9kZSBPbgotCi0gICAjIFJlYmluZCBzb21lIGtleXM6Ci0gICBNZXRhLWg6IGJhY2t3YXJkLWtpbGwtd29yZAotICAgIlxDLXUiOiB1bml2ZXJzYWwtYXJndW1lbnQKLSAgICJcQy14XEMtciI6IHJlLXJlYWQtaW5pdC1maWxlCi0KLU5vdGUgdGhhdCB0aGUgZGVmYXVsdCBiaW5kaW5nIGZvciA6a2JkOmBUYWJgIGluIFB5dGhvbiBpcyB0byBpbnNlcnQgYSA6a2JkOmBUYWJgCi1jaGFyYWN0ZXIgaW5zdGVhZCBvZiBSZWFkbGluZSdzIGRlZmF1bHQgZmlsZW5hbWUgY29tcGxldGlvbiBmdW5jdGlvbi4gIElmIHlvdQotaW5zaXN0LCB5b3UgY2FuIG92ZXJyaWRlIHRoaXMgYnkgcHV0dGluZyA6OgotCi0gICBUYWI6IGNvbXBsZXRlCi0KLWluIHlvdXIgOmZpbGU6YH4vLmlucHV0cmNgLiAgKE9mIGNvdXJzZSwgdGhpcyBtYWtlcyBpdCBoYXJkZXIgdG8gdHlwZSBpbmRlbnRlZAotY29udGludWF0aW9uIGxpbmVzIGlmIHlvdSdyZSBhY2N1c3RvbWVkIHRvIHVzaW5nIDprYmQ6YFRhYmAgZm9yIHRoYXQgcHVycG9zZS4pCi0KLS4uIGluZGV4OjoKLSAgIG1vZHVsZTogcmxjb21wbGV0ZXIKLSAgIG1vZHVsZTogcmVhZGxpbmUKLQotQXV0b21hdGljIGNvbXBsZXRpb24gb2YgdmFyaWFibGUgYW5kIG1vZHVsZSBuYW1lcyBpcyBvcHRpb25hbGx5IGF2YWlsYWJsZS4gIFRvCi1lbmFibGUgaXQgaW4gdGhlIGludGVycHJldGVyJ3MgaW50ZXJhY3RpdmUgbW9kZSwgYWRkIHRoZSBmb2xsb3dpbmcgdG8geW91cgotc3RhcnR1cCBmaWxlOiBbI11fICA6OgotCi0gICBpbXBvcnQgcmxjb21wbGV0ZXIsIHJlYWRsaW5lCi0gICByZWFkbGluZS5wYXJzZV9hbmRfYmluZCgndGFiOiBjb21wbGV0ZScpCi0KLVRoaXMgYmluZHMgdGhlIDprYmQ6YFRhYmAga2V5IHRvIHRoZSBjb21wbGV0aW9uIGZ1bmN0aW9uLCBzbyBoaXR0aW5nIHRoZQotOmtiZDpgVGFiYCBrZXkgdHdpY2Ugc3VnZ2VzdHMgY29tcGxldGlvbnM7IGl0IGxvb2tzIGF0IFB5dGhvbiBzdGF0ZW1lbnQgbmFtZXMsCi10aGUgY3VycmVudCBsb2NhbCB2YXJpYWJsZXMsIGFuZCB0aGUgYXZhaWxhYmxlIG1vZHVsZSBuYW1lcy4gIEZvciBkb3R0ZWQKLWV4cHJlc3Npb25zIHN1Y2ggYXMgYGBzdHJpbmcuYWBgLCBpdCB3aWxsIGV2YWx1YXRlIHRoZSBleHByZXNzaW9uIHVwIHRvIHRoZQotZmluYWwgYGAnLidgYCBhbmQgdGhlbiBzdWdnZXN0IGNvbXBsZXRpb25zIGZyb20gdGhlIGF0dHJpYnV0ZXMgb2YgdGhlIHJlc3VsdGluZwotb2JqZWN0LiAgTm90ZSB0aGF0IHRoaXMgbWF5IGV4ZWN1dGUgYXBwbGljYXRpb24tZGVmaW5lZCBjb2RlIGlmIGFuIG9iamVjdCB3aXRoIGEKLTptZXRoOmBfX2dldGF0dHJfX2AgbWV0aG9kIGlzIHBhcnQgb2YgdGhlIGV4cHJlc3Npb24uCi0KLUEgbW9yZSBjYXBhYmxlIHN0YXJ0dXAgZmlsZSBtaWdodCBsb29rIGxpa2UgdGhpcyBleGFtcGxlLiAgTm90ZSB0aGF0IHRoaXMKLWRlbGV0ZXMgdGhlIG5hbWVzIGl0IGNyZWF0ZXMgb25jZSB0aGV5IGFyZSBubyBsb25nZXIgbmVlZGVkOyB0aGlzIGlzIGRvbmUgc2luY2UKLXRoZSBzdGFydHVwIGZpbGUgaXMgZXhlY3V0ZWQgaW4gdGhlIHNhbWUgbmFtZXNwYWNlIGFzIHRoZSBpbnRlcmFjdGl2ZSBjb21tYW5kcywKLWFuZCByZW1vdmluZyB0aGUgbmFtZXMgYXZvaWRzIGNyZWF0aW5nIHNpZGUgZWZmZWN0cyBpbiB0aGUgaW50ZXJhY3RpdmUKLWVudmlyb25tZW50LiAgWW91IG1heSBmaW5kIGl0IGNvbnZlbmllbnQgdG8ga2VlcCBzb21lIG9mIHRoZSBpbXBvcnRlZCBtb2R1bGVzLAotc3VjaCBhcyA6bW9kOmBvc2AsIHdoaWNoIHR1cm4gb3V0IHRvIGJlIG5lZWRlZCBpbiBtb3N0IHNlc3Npb25zIHdpdGggdGhlCi1pbnRlcnByZXRlci4gOjoKLQotICAgIyBBZGQgYXV0by1jb21wbGV0aW9uIGFuZCBhIHN0b3JlZCBoaXN0b3J5IGZpbGUgb2YgY29tbWFuZHMgdG8geW91ciBQeXRob24KLSAgICMgaW50ZXJhY3RpdmUgaW50ZXJwcmV0ZXIuIFJlcXVpcmVzIFB5dGhvbiAyLjArLCByZWFkbGluZS4gQXV0b2NvbXBsZXRlIGlzCi0gICAjIGJvdW5kIHRvIHRoZSBFc2Mga2V5IGJ5IGRlZmF1bHQgKHlvdSBjYW4gY2hhbmdlIGl0IC0gc2VlIHJlYWRsaW5lIGRvY3MpLgotICAgIwotICAgIyBTdG9yZSB0aGUgZmlsZSBpbiB+Ly5weXN0YXJ0dXAsIGFuZCBzZXQgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gcG9pbnQKLSAgICMgdG8gaXQ6ICAiZXhwb3J0IFBZVEhPTlNUQVJUVVA9fi8ucHlzdGFydHVwIiBpbiBiYXNoLgotCi0gICBpbXBvcnQgYXRleGl0Ci0gICBpbXBvcnQgb3MKLSAgIGltcG9ydCByZWFkbGluZQotICAgaW1wb3J0IHJsY29tcGxldGVyCi0KLSAgIGhpc3RvcnlQYXRoID0gb3MucGF0aC5leHBhbmR1c2VyKCJ+Ly5weWhpc3RvcnkiKQotCi0gICBkZWYgc2F2ZV9oaXN0b3J5KGhpc3RvcnlQYXRoPWhpc3RvcnlQYXRoKToKLSAgICAgICBpbXBvcnQgcmVhZGxpbmUKLSAgICAgICByZWFkbGluZS53cml0ZV9oaXN0b3J5X2ZpbGUoaGlzdG9yeVBhdGgpCi0KLSAgIGlmIG9zLnBhdGguZXhpc3RzKGhpc3RvcnlQYXRoKToKLSAgICAgICByZWFkbGluZS5yZWFkX2hpc3RvcnlfZmlsZShoaXN0b3J5UGF0aCkKLQotICAgYXRleGl0LnJlZ2lzdGVyKHNhdmVfaGlzdG9yeSkKLSAgIGRlbCBvcywgYXRleGl0LCByZWFkbGluZSwgcmxjb21wbGV0ZXIsIHNhdmVfaGlzdG9yeSwgaGlzdG9yeVBhdGgKK0NvbXBsZXRpb24gb2YgdmFyaWFibGUgYW5kIG1vZHVsZSBuYW1lcyBpcworOnJlZjpgYXV0b21hdGljYWxseSBlbmFibGVkIDxybGNvbXBsZXRlci1jb25maWc+YCBhdCBpbnRlcnByZXRlciBzdGFydHVwIHNvCit0aGF0IHRoZSA6a2JkOmBUYWJgIGtleSBpbnZva2VzIHRoZSBjb21wbGV0aW9uIGZ1bmN0aW9uOyBpdCBsb29rcyBhdAorUHl0aG9uIHN0YXRlbWVudCBuYW1lcywgdGhlIGN1cnJlbnQgbG9jYWwgdmFyaWFibGVzLCBhbmQgdGhlIGF2YWlsYWJsZQorbW9kdWxlIG5hbWVzLiAgRm9yIGRvdHRlZCBleHByZXNzaW9ucyBzdWNoIGFzIGBgc3RyaW5nLmFgYCwgaXQgd2lsbCBldmFsdWF0ZQordGhlIGV4cHJlc3Npb24gdXAgdG8gdGhlIGZpbmFsIGBgJy4nYGAgYW5kIHRoZW4gc3VnZ2VzdCBjb21wbGV0aW9ucyBmcm9tCit0aGUgYXR0cmlidXRlcyBvZiB0aGUgcmVzdWx0aW5nIG9iamVjdC4gIE5vdGUgdGhhdCB0aGlzIG1heSBleGVjdXRlCithcHBsaWNhdGlvbi1kZWZpbmVkIGNvZGUgaWYgYW4gb2JqZWN0IHdpdGggYSA6bWV0aDpgX19nZXRhdHRyX19gIG1ldGhvZAoraXMgcGFydCBvZiB0aGUgZXhwcmVzc2lvbi4gIFRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gYWxzbyBzYXZlcyB5b3VyCitoaXN0b3J5IGludG8gYSBmaWxlIG5hbWVkIDpmaWxlOmAucHl0aG9uX2hpc3RvcnlgIGluIHlvdXIgdXNlciBkaXJlY3RvcnkuCitUaGUgaGlzdG9yeSB3aWxsIGJlIGF2YWlsYWJsZSBhZ2FpbiBkdXJpbmcgdGhlIG5leHQgaW50ZXJhY3RpdmUgaW50ZXJwcmV0ZXIKK3Nlc3Npb24uCiAKIAogLi4gX3R1dC1jb21tZW50YXJ5OgpAQCAtMTYyLDE0ICs0OSw2IEBACiBicHl0aG9uXy4KIAogCi0uLiBydWJyaWM6OiBGb290bm90ZXMKLQotLi4gWyNdIFB5dGhvbiB3aWxsIGV4ZWN1dGUgdGhlIGNvbnRlbnRzIG9mIGEgZmlsZSBpZGVudGlmaWVkIGJ5IHRoZQotICAgOmVudnZhcjpgUFlUSE9OU1RBUlRVUGAgZW52aXJvbm1lbnQgdmFyaWFibGUgd2hlbiB5b3Ugc3RhcnQgYW4gaW50ZXJhY3RpdmUKLSAgIGludGVycHJldGVyLiAgVG8gY3VzdG9taXplIFB5dGhvbiBldmVuIGZvciBub24taW50ZXJhY3RpdmUgbW9kZSwgc2VlCi0gICA6cmVmOmB0dXQtY3VzdG9taXplYC4KLQotCiAuLiBfR05VIFJlYWRsaW5lOiBodHRwOi8vdGlzd3d3LmNhc2UuZWR1L3BocC9jaGV0L3JlYWRsaW5lL3JsdG9wLmh0bWwKIC4uIF9JUHl0aG9uOiBodHRwOi8vaXB5dGhvbi5zY2lweS5vcmcvCiAuLiBfYnB5dGhvbjogaHR0cDovL3d3dy5icHl0aG9uLWludGVycHJldGVyLm9yZy8KZGlmZiAtLWdpdCBhL0RvYy90dXRvcmlhbC9pbnRlcnByZXRlci5yc3QgYi9Eb2MvdHV0b3JpYWwvaW50ZXJwcmV0ZXIucnN0CmluZGV4IGNkYzJiZjIuLmRkNmIxYTkgMTAwNjQ0Ci0tLSBhL0RvYy90dXRvcmlhbC9pbnRlcnByZXRlci5yc3QKKysrIGIvRG9jL3R1dG9yaWFsL2ludGVycHJldGVyLnJzdApAQCAtMTAsMTMgKzEwLDEzIEBACiBJbnZva2luZyB0aGUgSW50ZXJwcmV0ZXIKID09PT09PT09PT09PT09PT09PT09PT09PQogCi1UaGUgUHl0aG9uIGludGVycHJldGVyIGlzIHVzdWFsbHkgaW5zdGFsbGVkIGFzIDpmaWxlOmAvdXNyL2xvY2FsL2Jpbi9weXRob24zLjNgCitUaGUgUHl0aG9uIGludGVycHJldGVyIGlzIHVzdWFsbHkgaW5zdGFsbGVkIGFzIDpmaWxlOmAvdXNyL2xvY2FsL2Jpbi9weXRob24zLjRgCiBvbiB0aG9zZSBtYWNoaW5lcyB3aGVyZSBpdCBpcyBhdmFpbGFibGU7IHB1dHRpbmcgOmZpbGU6YC91c3IvbG9jYWwvYmluYCBpbiB5b3VyCiBVbml4IHNoZWxsJ3Mgc2VhcmNoIHBhdGggbWFrZXMgaXQgcG9zc2libGUgdG8gc3RhcnQgaXQgYnkgdHlwaW5nIHRoZSBjb21tYW5kOgogCiAuLiBjb2RlLWJsb2NrOjogdGV4dAogCi0gICBweXRob24zLjMKKyAgIHB5dGhvbjMuNAogCiB0byB0aGUgc2hlbGwuIFsjXV8gU2luY2UgdGhlIGNob2ljZSBvZiB0aGUgZGlyZWN0b3J5IHdoZXJlIHRoZSBpbnRlcnByZXRlciBsaXZlcwogaXMgYW4gaW5zdGFsbGF0aW9uIG9wdGlvbiwgb3RoZXIgcGxhY2VzIGFyZSBwb3NzaWJsZTsgY2hlY2sgd2l0aCB5b3VyIGxvY2FsCkBAIC0yNCwyNiArMjQsMjUgQEAKIHBvcHVsYXIgYWx0ZXJuYXRpdmUgbG9jYXRpb24uKQogCiBPbiBXaW5kb3dzIG1hY2hpbmVzLCB0aGUgUHl0aG9uIGluc3RhbGxhdGlvbiBpcyB1c3VhbGx5IHBsYWNlZCBpbgotOmZpbGU6YEM6XFxQeXRob24zM2AsIHRob3VnaCB5b3UgY2FuIGNoYW5nZSB0aGlzIHdoZW4geW91J3JlIHJ1bm5pbmcgdGhlCis6ZmlsZTpgQzpcXFB5dGhvbjM0YCwgdGhvdWdoIHlvdSBjYW4gY2hhbmdlIHRoaXMgd2hlbiB5b3UncmUgcnVubmluZyB0aGUKIGluc3RhbGxlci4gIFRvIGFkZCB0aGlzIGRpcmVjdG9yeSB0byB5b3VyIHBhdGgsICB5b3UgY2FuIHR5cGUgdGhlIGZvbGxvd2luZwogY29tbWFuZCBpbnRvIHRoZSBjb21tYW5kIHByb21wdCBpbiBhIERPUyBib3g6OgogCi0gICBzZXQgcGF0aD0lcGF0aCU7QzpccHl0aG9uMzMKKyAgIHNldCBwYXRoPSVwYXRoJTtDOlxweXRob24zNAogCiBUeXBpbmcgYW4gZW5kLW9mLWZpbGUgY2hhcmFjdGVyICg6a2JkOmBDb250cm9sLURgIG9uIFVuaXgsIDprYmQ6YENvbnRyb2wtWmAgb24KIFdpbmRvd3MpIGF0IHRoZSBwcmltYXJ5IHByb21wdCBjYXVzZXMgdGhlIGludGVycHJldGVyIHRvIGV4aXQgd2l0aCBhIHplcm8gZXhpdAogc3RhdHVzLiAgSWYgdGhhdCBkb2Vzbid0IHdvcmssIHlvdSBjYW4gZXhpdCB0aGUgaW50ZXJwcmV0ZXIgYnkgdHlwaW5nIHRoZQogZm9sbG93aW5nIGNvbW1hbmQ6IGBgcXVpdCgpYGAuCiAKLVRoZSBpbnRlcnByZXRlcidzIGxpbmUtZWRpdGluZyBmZWF0dXJlcyB1c3VhbGx5IGFyZW4ndCB2ZXJ5IHNvcGhpc3RpY2F0ZWQuICBPbgotVW5peCwgd2hvZXZlciBpbnN0YWxsZWQgdGhlIGludGVycHJldGVyIG1heSBoYXZlIGVuYWJsZWQgc3VwcG9ydCBmb3IgdGhlIEdOVQotcmVhZGxpbmUgbGlicmFyeSwgd2hpY2ggYWRkcyBtb3JlIGVsYWJvcmF0ZSBpbnRlcmFjdGl2ZSBlZGl0aW5nIGFuZCBoaXN0b3J5Ci1mZWF0dXJlcy4gUGVyaGFwcyB0aGUgcXVpY2tlc3QgY2hlY2sgdG8gc2VlIHdoZXRoZXIgY29tbWFuZCBsaW5lIGVkaXRpbmcgaXMKLXN1cHBvcnRlZCBpcyB0eXBpbmcgQ29udHJvbC1QIHRvIHRoZSBmaXJzdCBQeXRob24gcHJvbXB0IHlvdSBnZXQuICBJZiBpdCBiZWVwcywKLXlvdSBoYXZlIGNvbW1hbmQgbGluZSBlZGl0aW5nOyBzZWUgQXBwZW5kaXggOnJlZjpgdHV0LWludGVyYWN0aW5nYCBmb3IgYW4KLWludHJvZHVjdGlvbiB0byB0aGUga2V5cy4gIElmIG5vdGhpbmcgYXBwZWFycyB0byBoYXBwZW4sIG9yIGlmIGBgXlBgYCBpcyBlY2hvZWQsCi1jb21tYW5kIGxpbmUgZWRpdGluZyBpc24ndCBhdmFpbGFibGU7IHlvdSdsbCBvbmx5IGJlIGFibGUgdG8gdXNlIGJhY2tzcGFjZSB0bwotcmVtb3ZlIGNoYXJhY3RlcnMgZnJvbSB0aGUgY3VycmVudCBsaW5lLgorVGhlIGludGVycHJldGVyJ3MgbGluZS1lZGl0aW5nIGZlYXR1cmVzIGluY2x1ZGUgaW50ZXJhY3RpdmUgZWRpdGluZywgaGlzdG9yeQorc3Vic3RpdHV0aW9uIGFuZCBjb2RlIGNvbXBsZXRpb24gb24gc3lzdGVtcyB0aGF0IHN1cHBvcnQgcmVhZGxpbmUuICBQZXJoYXBzIHRoZQorcXVpY2tlc3QgY2hlY2sgdG8gc2VlIHdoZXRoZXIgY29tbWFuZCBsaW5lIGVkaXRpbmcgaXMgc3VwcG9ydGVkIGlzIHR5cGluZworOmtiZDpgQ29udHJvbC1QYCB0byB0aGUgZmlyc3QgUHl0aG9uIHByb21wdCB5b3UgZ2V0LiAgSWYgaXQgYmVlcHMsIHlvdSBoYXZlIGNvbW1hbmQKK2xpbmUgZWRpdGluZzsgc2VlIEFwcGVuZGl4IDpyZWY6YHR1dC1pbnRlcmFjdGluZ2AgZm9yIGFuIGludHJvZHVjdGlvbiB0byB0aGUKK2tleXMuICBJZiBub3RoaW5nIGFwcGVhcnMgdG8gaGFwcGVuLCBvciBpZiBgYF5QYGAgaXMgZWNob2VkLCBjb21tYW5kIGxpbmUKK2VkaXRpbmcgaXNuJ3QgYXZhaWxhYmxlOyB5b3UnbGwgb25seSBiZSBhYmxlIHRvIHVzZSBiYWNrc3BhY2UgdG8gcmVtb3ZlCitjaGFyYWN0ZXJzIGZyb20gdGhlIGN1cnJlbnQgbGluZS4KIAogVGhlIGludGVycHJldGVyIG9wZXJhdGVzIHNvbWV3aGF0IGxpa2UgdGhlIFVuaXggc2hlbGw6IHdoZW4gY2FsbGVkIHdpdGggc3RhbmRhcmQKIGlucHV0IGNvbm5lY3RlZCB0byBhIHR0eSBkZXZpY2UsIGl0IHJlYWRzIGFuZCBleGVjdXRlcyBjb21tYW5kcyBpbnRlcmFjdGl2ZWx5OwpAQCAtNjQsNiArNjMsOCBAQAogYW5kIGVudGVyIGludGVyYWN0aXZlIG1vZGUgYWZ0ZXJ3YXJkcy4gIFRoaXMgY2FuIGJlIGRvbmUgYnkgcGFzc2luZyA6b3B0aW9uOmAtaWAKIGJlZm9yZSB0aGUgc2NyaXB0LgogCitBbGwgY29tbWFuZCBsaW5lIG9wdGlvbnMgYXJlIGRlc2NyaWJlZCBpbiA6cmVmOmB1c2luZy1vbi1nZW5lcmFsYC4KKwogCiAuLiBfdHV0LWFyZ3Bhc3Npbmc6CiAKQEAgLTk1LDkgKzk2LDkgQEAKIHByaW50cyBhIHdlbGNvbWUgbWVzc2FnZSBzdGF0aW5nIGl0cyB2ZXJzaW9uIG51bWJlciBhbmQgYSBjb3B5cmlnaHQgbm90aWNlCiBiZWZvcmUgcHJpbnRpbmcgdGhlIGZpcnN0IHByb21wdDo6CiAKLSAgICQgcHl0aG9uMy4zCi0gICBQeXRob24gMy4zIChkZWZhdWx0LCBTZXAgMjQgMjAxMiwgMDk6MjU6MDQpCi0gICBbR0NDIDQuNi4zXSBvbiBsaW51eDIKKyAgICQgcHl0aG9uMy40CisgICBQeXRob24gMy40IChkZWZhdWx0LCBNYXIgMTYgMjAxNCwgMDk6MjU6MDQpCisgICBbR0NDIDQuOC4yXSBvbiBsaW51eAogICAgVHlwZSAiaGVscCIsICJjb3B5cmlnaHQiLCAiY3JlZGl0cyIgb3IgImxpY2Vuc2UiIGZvciBtb3JlIGluZm9ybWF0aW9uLgogICAgPj4+CiAKQEAgLTEwNiw3MCArMTA3LDIyIEBACiBDb250aW51YXRpb24gbGluZXMgYXJlIG5lZWRlZCB3aGVuIGVudGVyaW5nIGEgbXVsdGktbGluZSBjb25zdHJ1Y3QuIEFzIGFuCiBleGFtcGxlLCB0YWtlIGEgbG9vayBhdCB0aGlzIDprZXl3b3JkOmBpZmAgc3RhdGVtZW50OjoKIAotICAgPj4+IHRoZV93b3JsZF9pc19mbGF0ID0gMQorICAgPj4+IHRoZV93b3JsZF9pc19mbGF0ID0gVHJ1ZQogICAgPj4+IGlmIHRoZV93b3JsZF9pc19mbGF0OgogICAgLi4uICAgICBwcmludCgiQmUgY2FyZWZ1bCBub3QgdG8gZmFsbCBvZmYhIikKICAgIC4uLgogICAgQmUgY2FyZWZ1bCBub3QgdG8gZmFsbCBvZmYhCiAKIAorRm9yIG1vcmUgb24gaW50ZXJhY3RpdmUgbW9kZSwgc2VlIDpyZWY6YHR1dC1pbnRlcmFjYC4KKworCiAuLiBfdHV0LWludGVycDoKIAogVGhlIEludGVycHJldGVyIGFuZCBJdHMgRW52aXJvbm1lbnQKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKIAotLi4gX3R1dC1lcnJvcjoKLQotRXJyb3IgSGFuZGxpbmcKLS0tLS0tLS0tLS0tLS0tCi0KLVdoZW4gYW4gZXJyb3Igb2NjdXJzLCB0aGUgaW50ZXJwcmV0ZXIgcHJpbnRzIGFuIGVycm9yIG1lc3NhZ2UgYW5kIGEgc3RhY2sgdHJhY2UuCi1JbiBpbnRlcmFjdGl2ZSBtb2RlLCBpdCB0aGVuIHJldHVybnMgdG8gdGhlIHByaW1hcnkgcHJvbXB0OyB3aGVuIGlucHV0IGNhbWUgZnJvbQotYSBmaWxlLCBpdCBleGl0cyB3aXRoIGEgbm9uemVybyBleGl0IHN0YXR1cyBhZnRlciBwcmludGluZyB0aGUgc3RhY2sgdHJhY2UuCi0oRXhjZXB0aW9ucyBoYW5kbGVkIGJ5IGFuIDprZXl3b3JkOmBleGNlcHRgIGNsYXVzZSBpbiBhIDprZXl3b3JkOmB0cnlgIHN0YXRlbWVudAotYXJlIG5vdCBlcnJvcnMgaW4gdGhpcyBjb250ZXh0LikgIFNvbWUgZXJyb3JzIGFyZSB1bmNvbmRpdGlvbmFsbHkgZmF0YWwgYW5kCi1jYXVzZSBhbiBleGl0IHdpdGggYSBub256ZXJvIGV4aXQ7IHRoaXMgYXBwbGllcyB0byBpbnRlcm5hbCBpbmNvbnNpc3RlbmNpZXMgYW5kCi1zb21lIGNhc2VzIG9mIHJ1bm5pbmcgb3V0IG9mIG1lbW9yeS4gIEFsbCBlcnJvciBtZXNzYWdlcyBhcmUgd3JpdHRlbiB0byB0aGUKLXN0YW5kYXJkIGVycm9yIHN0cmVhbTsgbm9ybWFsIG91dHB1dCBmcm9tIGV4ZWN1dGVkIGNvbW1hbmRzIGlzIHdyaXR0ZW4gdG8KLXN0YW5kYXJkIG91dHB1dC4KLQotVHlwaW5nIHRoZSBpbnRlcnJ1cHQgY2hhcmFjdGVyICh1c3VhbGx5IENvbnRyb2wtQyBvciBERUwpIHRvIHRoZSBwcmltYXJ5IG9yCi1zZWNvbmRhcnkgcHJvbXB0IGNhbmNlbHMgdGhlIGlucHV0IGFuZCByZXR1cm5zIHRvIHRoZSBwcmltYXJ5IHByb21wdC4gWyNdXwotVHlwaW5nIGFuIGludGVycnVwdCB3aGlsZSBhIGNvbW1hbmQgaXMgZXhlY3V0aW5nIHJhaXNlcyB0aGUKLTpleGM6YEtleWJvYXJkSW50ZXJydXB0YCBleGNlcHRpb24sIHdoaWNoIG1heSBiZSBoYW5kbGVkIGJ5IGEgOmtleXdvcmQ6YHRyeWAKLXN0YXRlbWVudC4KLQotCi0uLiBfdHV0LXNjcmlwdHM6Ci0KLUV4ZWN1dGFibGUgUHl0aG9uIFNjcmlwdHMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotT24gQlNEJ2lzaCBVbml4IHN5c3RlbXMsIFB5dGhvbiBzY3JpcHRzIGNhbiBiZSBtYWRlIGRpcmVjdGx5IGV4ZWN1dGFibGUsIGxpa2UKLXNoZWxsIHNjcmlwdHMsIGJ5IHB1dHRpbmcgdGhlIGxpbmUgOjoKLQotICAgIyEgL3Vzci9iaW4vZW52IHB5dGhvbjMuMwotCi0oYXNzdW1pbmcgdGhhdCB0aGUgaW50ZXJwcmV0ZXIgaXMgb24gdGhlIHVzZXIncyA6ZW52dmFyOmBQQVRIYCkgYXQgdGhlIGJlZ2lubmluZwotb2YgdGhlIHNjcmlwdCBhbmQgZ2l2aW5nIHRoZSBmaWxlIGFuIGV4ZWN1dGFibGUgbW9kZS4gIFRoZSBgYCMhYGAgbXVzdCBiZSB0aGUKLWZpcnN0IHR3byBjaGFyYWN0ZXJzIG9mIHRoZSBmaWxlLiAgT24gc29tZSBwbGF0Zm9ybXMsIHRoaXMgZmlyc3QgbGluZSBtdXN0IGVuZAotd2l0aCBhIFVuaXgtc3R5bGUgbGluZSBlbmRpbmcgKGBgJ1xuJ2BgKSwgbm90IGEgV2luZG93cyAoYGAnXHJcbidgYCkgbGluZQotZW5kaW5nLiAgTm90ZSB0aGF0IHRoZSBoYXNoLCBvciBwb3VuZCwgY2hhcmFjdGVyLCBgYCcjJ2BgLCBpcyB1c2VkIHRvIHN0YXJ0IGEKLWNvbW1lbnQgaW4gUHl0aG9uLgotCi1UaGUgc2NyaXB0IGNhbiBiZSBnaXZlbiBhbiBleGVjdXRhYmxlIG1vZGUsIG9yIHBlcm1pc3Npb24sIHVzaW5nIHRoZQotOnByb2dyYW06YGNobW9kYCBjb21tYW5kOjoKLQotICAgJCBjaG1vZCAreCBteXNjcmlwdC5weQotCi1PbiBXaW5kb3dzIHN5c3RlbXMsIHRoZXJlIGlzIG5vIG5vdGlvbiBvZiBhbiAiZXhlY3V0YWJsZSBtb2RlIi4gIFRoZSBQeXRob24KLWluc3RhbGxlciBhdXRvbWF0aWNhbGx5IGFzc29jaWF0ZXMgYGAucHlgYCBmaWxlcyB3aXRoIGBgcHl0aG9uLmV4ZWBgIHNvIHRoYXQKLWEgZG91YmxlLWNsaWNrIG9uIGEgUHl0aG9uIGZpbGUgd2lsbCBydW4gaXQgYXMgYSBzY3JpcHQuICBUaGUgZXh0ZW5zaW9uIGNhbgotYWxzbyBiZSBgYC5weXdgYCwgaW4gdGhhdCBjYXNlLCB0aGUgY29uc29sZSB3aW5kb3cgdGhhdCBub3JtYWxseSBhcHBlYXJzIGlzCi1zdXBwcmVzc2VkLgotCi0KIC4uIF90dXQtc291cmNlLWVuY29kaW5nOgogCiBTb3VyY2UgQ29kZSBFbmNvZGluZwpAQCAtMjAzLDY3ICsxNTYsOCBAQAogd2l0aGluIHRoZSBmaWxlLgogCiAKLS4uIF90dXQtc3RhcnR1cDoKLQotVGhlIEludGVyYWN0aXZlIFN0YXJ0dXAgRmlsZQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1XaGVuIHlvdSB1c2UgUHl0aG9uIGludGVyYWN0aXZlbHksIGl0IGlzIGZyZXF1ZW50bHkgaGFuZHkgdG8gaGF2ZSBzb21lIHN0YW5kYXJkCi1jb21tYW5kcyBleGVjdXRlZCBldmVyeSB0aW1lIHRoZSBpbnRlcnByZXRlciBpcyBzdGFydGVkLiAgWW91IGNhbiBkbyB0aGlzIGJ5Ci1zZXR0aW5nIGFuIGVudmlyb25tZW50IHZhcmlhYmxlIG5hbWVkIDplbnZ2YXI6YFBZVEhPTlNUQVJUVVBgIHRvIHRoZSBuYW1lIG9mIGEKLWZpbGUgY29udGFpbmluZyB5b3VyIHN0YXJ0LXVwIGNvbW1hbmRzLiAgVGhpcyBpcyBzaW1pbGFyIHRvIHRoZSA6ZmlsZTpgLnByb2ZpbGVgCi1mZWF0dXJlIG9mIHRoZSBVbml4IHNoZWxscy4KLQotLi4gWFhYIFRoaXMgc2hvdWxkIHByb2JhYmx5IGJlIGR1bXBlZCBpbiBhbiBhcHBlbmRpeCwgc2luY2UgbW9zdCBwZW9wbGUKLSAgIGRvbid0IHVzZSBQeXRob24gaW50ZXJhY3RpdmVseSBpbiBub24tdHJpdmlhbCB3YXlzLgotCi1UaGlzIGZpbGUgaXMgb25seSByZWFkIGluIGludGVyYWN0aXZlIHNlc3Npb25zLCBub3Qgd2hlbiBQeXRob24gcmVhZHMgY29tbWFuZHMKLWZyb20gYSBzY3JpcHQsIGFuZCBub3Qgd2hlbiA6ZmlsZTpgL2Rldi90dHlgIGlzIGdpdmVuIGFzIHRoZSBleHBsaWNpdCBzb3VyY2Ugb2YKLWNvbW1hbmRzICh3aGljaCBvdGhlcndpc2UgYmVoYXZlcyBsaWtlIGFuIGludGVyYWN0aXZlIHNlc3Npb24pLiAgSXQgaXMgZXhlY3V0ZWQKLWluIHRoZSBzYW1lIG5hbWVzcGFjZSB3aGVyZSBpbnRlcmFjdGl2ZSBjb21tYW5kcyBhcmUgZXhlY3V0ZWQsIHNvIHRoYXQgb2JqZWN0cwotdGhhdCBpdCBkZWZpbmVzIG9yIGltcG9ydHMgY2FuIGJlIHVzZWQgd2l0aG91dCBxdWFsaWZpY2F0aW9uIGluIHRoZSBpbnRlcmFjdGl2ZQotc2Vzc2lvbi4gWW91IGNhbiBhbHNvIGNoYW5nZSB0aGUgcHJvbXB0cyBgYHN5cy5wczFgYCBhbmQgYGBzeXMucHMyYGAgaW4gdGhpcwotZmlsZS4KLQotSWYgeW91IHdhbnQgdG8gcmVhZCBhbiBhZGRpdGlvbmFsIHN0YXJ0LXVwIGZpbGUgZnJvbSB0aGUgY3VycmVudCBkaXJlY3RvcnksIHlvdQotY2FuIHByb2dyYW0gdGhpcyBpbiB0aGUgZ2xvYmFsIHN0YXJ0LXVwIGZpbGUgdXNpbmcgY29kZSBsaWtlIGBgaWYKLW9zLnBhdGguaXNmaWxlKCcucHl0aG9ucmMucHknKTogZXhlYyhvcGVuKCcucHl0aG9ucmMucHknKS5yZWFkKCkpYGAuCi1JZiB5b3Ugd2FudCB0byB1c2UgdGhlIHN0YXJ0dXAgZmlsZSBpbiBhIHNjcmlwdCwgeW91IG11c3QgZG8gdGhpcyBleHBsaWNpdGx5Ci1pbiB0aGUgc2NyaXB0OjoKLQotICAgaW1wb3J0IG9zCi0gICBmaWxlbmFtZSA9IG9zLmVudmlyb24uZ2V0KCdQWVRIT05TVEFSVFVQJykKLSAgIGlmIGZpbGVuYW1lIGFuZCBvcy5wYXRoLmlzZmlsZShmaWxlbmFtZSk6Ci0gICAgICAgZXhlYyhvcGVuKGZpbGVuYW1lKS5yZWFkKCkpCi0KLQotLi4gX3R1dC1jdXN0b21pemU6Ci0KLVRoZSBDdXN0b21pemF0aW9uIE1vZHVsZXMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotUHl0aG9uIHByb3ZpZGVzIHR3byBob29rcyB0byBsZXQgeW91IGN1c3RvbWl6ZSBpdDogOm1vZDpgc2l0ZWN1c3RvbWl6ZWAgYW5kCi06bW9kOmB1c2VyY3VzdG9taXplYC4gIFRvIHNlZSBob3cgaXQgd29ya3MsIHlvdSBuZWVkIGZpcnN0IHRvIGZpbmQgdGhlIGxvY2F0aW9uCi1vZiB5b3VyIHVzZXIgc2l0ZS1wYWNrYWdlcyBkaXJlY3RvcnkuICBTdGFydCBQeXRob24gYW5kIHJ1biB0aGlzIGNvZGU6Ci0KLSAgID4+PiBpbXBvcnQgc2l0ZQotICAgPj4+IHNpdGUuZ2V0dXNlcnNpdGVwYWNrYWdlcygpCi0gICAnL2hvbWUvdXNlci8ubG9jYWwvbGliL3B5dGhvbjMuMi9zaXRlLXBhY2thZ2VzJwotCi1Ob3cgeW91IGNhbiBjcmVhdGUgYSBmaWxlIG5hbWVkIDpmaWxlOmB1c2VyY3VzdG9taXplLnB5YCBpbiB0aGF0IGRpcmVjdG9yeSBhbmQKLXB1dCBhbnl0aGluZyB5b3Ugd2FudCBpbiBpdC4gIEl0IHdpbGwgYWZmZWN0IGV2ZXJ5IGludm9jYXRpb24gb2YgUHl0aG9uLCB1bmxlc3MKLWl0IGlzIHN0YXJ0ZWQgd2l0aCB0aGUgOm9wdGlvbjpgLXNgIG9wdGlvbiB0byBkaXNhYmxlIHRoZSBhdXRvbWF0aWMgaW1wb3J0LgotCi06bW9kOmBzaXRlY3VzdG9taXplYCB3b3JrcyBpbiB0aGUgc2FtZSB3YXksIGJ1dCBpcyB0eXBpY2FsbHkgY3JlYXRlZCBieSBhbgotYWRtaW5pc3RyYXRvciBvZiB0aGUgY29tcHV0ZXIgaW4gdGhlIGdsb2JhbCBzaXRlLXBhY2thZ2VzIGRpcmVjdG9yeSwgYW5kIGlzCi1pbXBvcnRlZCBiZWZvcmUgOm1vZDpgdXNlcmN1c3RvbWl6ZWAuICBTZWUgdGhlIGRvY3VtZW50YXRpb24gb2YgdGhlIDptb2Q6YHNpdGVgCi1tb2R1bGUgZm9yIG1vcmUgZGV0YWlscy4KLQotCiAuLiBydWJyaWM6OiBGb290bm90ZXMKIAogLi4gWyNdIE9uIFVuaXgsIHRoZSBQeXRob24gMy54IGludGVycHJldGVyIGlzIGJ5IGRlZmF1bHQgbm90IGluc3RhbGxlZCB3aXRoIHRoZQogICAgZXhlY3V0YWJsZSBuYW1lZCBgYHB5dGhvbmBgLCBzbyB0aGF0IGl0IGRvZXMgbm90IGNvbmZsaWN0IHdpdGggYQogICAgc2ltdWx0YW5lb3VzbHkgaW5zdGFsbGVkIFB5dGhvbiAyLnggZXhlY3V0YWJsZS4KLQotLi4gWyNdIEEgcHJvYmxlbSB3aXRoIHRoZSBHTlUgUmVhZGxpbmUgcGFja2FnZSBtYXkgcHJldmVudCB0aGlzLgpkaWZmIC0tZ2l0IGEvRG9jL3R1dG9yaWFsL2ludHJvZHVjdGlvbi5yc3QgYi9Eb2MvdHV0b3JpYWwvaW50cm9kdWN0aW9uLnJzdAppbmRleCA5ZWZkMWFjLi5jNWMxMzQzIDEwMDY0NAotLS0gYS9Eb2MvdHV0b3JpYWwvaW50cm9kdWN0aW9uLnJzdAorKysgYi9Eb2MvdHV0b3JpYWwvaW50cm9kdWN0aW9uLnJzdApAQCAtMSw0ICsxLDQgQEAKLe+7vy4uIF90dXQtaW5mb3JtYWw6CisuLiBfdHV0LWluZm9ybWFsOgogCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiBBbiBJbmZvcm1hbCBJbnRyb2R1Y3Rpb24gdG8gUHl0aG9uCkBAIC0zMDMsOSArMzAzLDkgQEAKIGluZGljZXMsIGlmIGJvdGggYXJlIHdpdGhpbiBib3VuZHMuICBGb3IgZXhhbXBsZSwgdGhlIGxlbmd0aCBvZiBgYHdvcmRbMTozXWBgIGlzCiAyLgogCi1BdHRlbXB0aW5nIHRvIHVzZSBhIGluZGV4IHRoYXQgaXMgdG9vIGxhcmdlIHdpbGwgcmVzdWx0IGluIGFuIGVycm9yOjoKK0F0dGVtcHRpbmcgdG8gdXNlIGFuIGluZGV4IHRoYXQgaXMgdG9vIGxhcmdlIHdpbGwgcmVzdWx0IGluIGFuIGVycm9yOjoKIAotICAgPj4+IHdvcmRbNDJdICAjIHRoZSB3b3JkIG9ubHkgaGFzIDcgY2hhcmFjdGVycworICAgPj4+IHdvcmRbNDJdICAjIHRoZSB3b3JkIG9ubHkgaGFzIDYgY2hhcmFjdGVycwogICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA8bW9kdWxlPgogICAgSW5kZXhFcnJvcjogc3RyaW5nIGluZGV4IG91dCBvZiByYW5nZQpAQCAtMzkxLDcgKzM5MSw3IEBACiAgICA+Pj4gc3F1YXJlc1s6XQogICAgWzEsIDQsIDksIDE2LCAyNV0KIAotTGlzdHMgYWxzbyBzdXBwb3J0cyBvcGVyYXRpb25zIGxpa2UgY29uY2F0ZW5hdGlvbjo6CitMaXN0cyBhbHNvIHN1cHBvcnQgb3BlcmF0aW9ucyBsaWtlIGNvbmNhdGVuYXRpb246OgogCiAgICA+Pj4gc3F1YXJlcyArIFszNiwgNDksIDY0LCA4MSwgMTAwXQogICAgWzEsIDQsIDksIDE2LCAyNSwgMzYsIDQ5LCA2NCwgODEsIDEwMF0KZGlmZiAtLWdpdCBhL0RvYy90dXRvcmlhbC9tb2R1bGVzLnJzdCBiL0RvYy90dXRvcmlhbC9tb2R1bGVzLnJzdAppbmRleCAxOTAyOTY0Li5mZDM2MWFlIDEwMDY0NAotLS0gYS9Eb2MvdHV0b3JpYWwvbW9kdWxlcy5yc3QKKysrIGIvRG9jL3R1dG9yaWFsL21vZHVsZXMucnN0CkBAIC0xNjUsMTAgKzE2NSwxNiBAQAogbmFtZWQgOmZpbGU6YHNwYW0ucHlgIGluIGEgbGlzdCBvZiBkaXJlY3RvcmllcyBnaXZlbiBieSB0aGUgdmFyaWFibGUKIDpkYXRhOmBzeXMucGF0aGAuICA6ZGF0YTpgc3lzLnBhdGhgIGlzIGluaXRpYWxpemVkIGZyb20gdGhlc2UgbG9jYXRpb25zOgogCi0qIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgaW5wdXQgc2NyaXB0IChvciB0aGUgY3VycmVudCBkaXJlY3RvcnkpLgorKiBUaGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIGlucHV0IHNjcmlwdCAob3IgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IHdoZW4gbm8KKyAgZmlsZSBpcyBzcGVjaWZpZWQpLgogKiA6ZW52dmFyOmBQWVRIT05QQVRIYCAoYSBsaXN0IG9mIGRpcmVjdG9yeSBuYW1lcywgd2l0aCB0aGUgc2FtZSBzeW50YXggYXMgdGhlCiAgIHNoZWxsIHZhcmlhYmxlIDplbnZ2YXI6YFBBVEhgKS4KLSogdGhlIGluc3RhbGxhdGlvbi1kZXBlbmRlbnQgZGVmYXVsdC4KKyogVGhlIGluc3RhbGxhdGlvbi1kZXBlbmRlbnQgZGVmYXVsdC4KKworLi4gbm90ZTo6CisgICBPbiBmaWxlIHN5c3RlbXMgd2hpY2ggc3VwcG9ydCBzeW1saW5rcywgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBpbnB1dAorICAgc2NyaXB0IGlzIGNhbGN1bGF0ZWQgYWZ0ZXIgdGhlIHN5bWxpbmsgaXMgZm9sbG93ZWQuIEluIG90aGVyIHdvcmRzIHRoZQorICAgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIHN5bWxpbmsgaXMgKipub3QqKiBhZGRlZCB0byB0aGUgbW9kdWxlIHNlYXJjaCBwYXRoLgogCiBBZnRlciBpbml0aWFsaXphdGlvbiwgUHl0aG9uIHByb2dyYW1zIGNhbiBtb2RpZnkgOmRhdGE6YHN5cy5wYXRoYC4gIFRoZQogZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIHNjcmlwdCBiZWluZyBydW4gaXMgcGxhY2VkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlCkBAIC0yNzgsMjQgKzI4NCwyMyBAQAogICAgPj4+IGRpcihmaWJvKQogICAgWydfX25hbWVfXycsICdmaWInLCAnZmliMiddCiAgICA+Pj4gZGlyKHN5cykgICMgZG9jdGVzdDogK05PUk1BTElaRV9XSElURVNQQUNFCi0gICBbJ19fZGlzcGxheWhvb2tfXycsICdfX2RvY19fJywgJ19fZWdnaW5zZXJ0JywgJ19fZXhjZXB0aG9va19fJywKLSAgICAnX19sb2FkZXJfXycsICdfX25hbWVfXycsICdfX3BhY2thZ2VfXycsICdfX3BsZW4nLCAnX19zdGRlcnJfXycsCi0gICAgJ19fc3RkaW5fXycsICdfX3N0ZG91dF9fJywgJ19jbGVhcl90eXBlX2NhY2hlJywgJ19jdXJyZW50X2ZyYW1lcycsCi0gICAgJ19kZWJ1Z21hbGxvY3N0YXRzJywgJ19nZXRmcmFtZScsICdfaG9tZScsICdfbWVyY3VyaWFsJywgJ194b3B0aW9ucycsCi0gICAgJ2FiaWZsYWdzJywgJ2FwaV92ZXJzaW9uJywgJ2FyZ3YnLCAnYmFzZV9leGVjX3ByZWZpeCcsICdiYXNlX3ByZWZpeCcsCi0gICAgJ2J1aWx0aW5fbW9kdWxlX25hbWVzJywgJ2J5dGVvcmRlcicsICdjYWxsX3RyYWNpbmcnLCAnY2FsbHN0YXRzJywKLSAgICAnY29weXJpZ2h0JywgJ2Rpc3BsYXlob29rJywgJ2RvbnRfd3JpdGVfYnl0ZWNvZGUnLCAnZXhjX2luZm8nLAotICAgICdleGNlcHRob29rJywgJ2V4ZWNfcHJlZml4JywgJ2V4ZWN1dGFibGUnLCAnZXhpdCcsICdmbGFncycsICdmbG9hdF9pbmZvJywKLSAgICAnZmxvYXRfcmVwcl9zdHlsZScsICdnZXRjaGVja2ludGVydmFsJywgJ2dldGRlZmF1bHRlbmNvZGluZycsCi0gICAgJ2dldGRsb3BlbmZsYWdzJywgJ2dldGZpbGVzeXN0ZW1lbmNvZGluZycsICdnZXRvYmplY3RzJywgJ2dldHByb2ZpbGUnLAotICAgICdnZXRyZWN1cnNpb25saW1pdCcsICdnZXRyZWZjb3VudCcsICdnZXRzaXplb2YnLCAnZ2V0c3dpdGNoaW50ZXJ2YWwnLAotICAgICdnZXR0b3RhbHJlZmNvdW50JywgJ2dldHRyYWNlJywgJ2hhc2hfaW5mbycsICdoZXh2ZXJzaW9uJywKLSAgICAnaW1wbGVtZW50YXRpb24nLCAnaW50X2luZm8nLCAnaW50ZXJuJywgJ21heHNpemUnLCAnbWF4dW5pY29kZScsCi0gICAgJ21ldGFfcGF0aCcsICdtb2R1bGVzJywgJ3BhdGgnLCAncGF0aF9ob29rcycsICdwYXRoX2ltcG9ydGVyX2NhY2hlJywKLSAgICAncGxhdGZvcm0nLCAncHJlZml4JywgJ3BzMScsICdzZXRjaGVja2ludGVydmFsJywgJ3NldGRsb3BlbmZsYWdzJywKLSAgICAnc2V0cHJvZmlsZScsICdzZXRyZWN1cnNpb25saW1pdCcsICdzZXRzd2l0Y2hpbnRlcnZhbCcsICdzZXR0cmFjZScsCi0gICAgJ3N0ZGVycicsICdzdGRpbicsICdzdGRvdXQnLCAndGhyZWFkX2luZm8nLCAndmVyc2lvbicsICd2ZXJzaW9uX2luZm8nLAotICAgICd3YXJub3B0aW9ucyddCisgICBbJ19fZGlzcGxheWhvb2tfXycsICdfX2RvY19fJywgJ19fZXhjZXB0aG9va19fJywgJ19fbG9hZGVyX18nLCAnX19uYW1lX18nLAorICAgICdfX3BhY2thZ2VfXycsICdfX3N0ZGVycl9fJywgJ19fc3RkaW5fXycsICdfX3N0ZG91dF9fJywKKyAgICAnX2NsZWFyX3R5cGVfY2FjaGUnLCAnX2N1cnJlbnRfZnJhbWVzJywgJ19kZWJ1Z21hbGxvY3N0YXRzJywgJ19nZXRmcmFtZScsCisgICAgJ19ob21lJywgJ19tZXJjdXJpYWwnLCAnX3hvcHRpb25zJywgJ2FiaWZsYWdzJywgJ2FwaV92ZXJzaW9uJywgJ2FyZ3YnLAorICAgICdiYXNlX2V4ZWNfcHJlZml4JywgJ2Jhc2VfcHJlZml4JywgJ2J1aWx0aW5fbW9kdWxlX25hbWVzJywgJ2J5dGVvcmRlcicsCisgICAgJ2NhbGxfdHJhY2luZycsICdjYWxsc3RhdHMnLCAnY29weXJpZ2h0JywgJ2Rpc3BsYXlob29rJywKKyAgICAnZG9udF93cml0ZV9ieXRlY29kZScsICdleGNfaW5mbycsICdleGNlcHRob29rJywgJ2V4ZWNfcHJlZml4JywKKyAgICAnZXhlY3V0YWJsZScsICdleGl0JywgJ2ZsYWdzJywgJ2Zsb2F0X2luZm8nLCAnZmxvYXRfcmVwcl9zdHlsZScsCisgICAgJ2dldGNoZWNraW50ZXJ2YWwnLCAnZ2V0ZGVmYXVsdGVuY29kaW5nJywgJ2dldGRsb3BlbmZsYWdzJywKKyAgICAnZ2V0ZmlsZXN5c3RlbWVuY29kaW5nJywgJ2dldG9iamVjdHMnLCAnZ2V0cHJvZmlsZScsICdnZXRyZWN1cnNpb25saW1pdCcsCisgICAgJ2dldHJlZmNvdW50JywgJ2dldHNpemVvZicsICdnZXRzd2l0Y2hpbnRlcnZhbCcsICdnZXR0b3RhbHJlZmNvdW50JywKKyAgICAnZ2V0dHJhY2UnLCAnaGFzaF9pbmZvJywgJ2hleHZlcnNpb24nLCAnaW1wbGVtZW50YXRpb24nLCAnaW50X2luZm8nLAorICAgICdpbnRlcm4nLCAnbWF4c2l6ZScsICdtYXh1bmljb2RlJywgJ21ldGFfcGF0aCcsICdtb2R1bGVzJywgJ3BhdGgnLAorICAgICdwYXRoX2hvb2tzJywgJ3BhdGhfaW1wb3J0ZXJfY2FjaGUnLCAncGxhdGZvcm0nLCAncHJlZml4JywgJ3BzMScsCisgICAgJ3NldGNoZWNraW50ZXJ2YWwnLCAnc2V0ZGxvcGVuZmxhZ3MnLCAnc2V0cHJvZmlsZScsICdzZXRyZWN1cnNpb25saW1pdCcsCisgICAgJ3NldHN3aXRjaGludGVydmFsJywgJ3NldHRyYWNlJywgJ3N0ZGVycicsICdzdGRpbicsICdzdGRvdXQnLAorICAgICd0aHJlYWRfaW5mbycsICd2ZXJzaW9uJywgJ3ZlcnNpb25faW5mbycsICd3YXJub3B0aW9ucyddCiAKIFdpdGhvdXQgYXJndW1lbnRzLCA6ZnVuYzpgZGlyYCBsaXN0cyB0aGUgbmFtZXMgeW91IGhhdmUgZGVmaW5lZCBjdXJyZW50bHk6OgogCmRpZmYgLS1naXQgYS9Eb2MvdHV0b3JpYWwvc3RkbGliLnJzdCBiL0RvYy90dXRvcmlhbC9zdGRsaWIucnN0CmluZGV4IDdlN2ExNTQuLjcyZDUxZGUgMTAwNjQ0Ci0tLSBhL0RvYy90dXRvcmlhbC9zdGRsaWIucnN0CisrKyBiL0RvYy90dXRvcmlhbC9zdGRsaWIucnN0CkBAIC0xNSw3ICsxNSw3IEBACiAKICAgID4+PiBpbXBvcnQgb3MKICAgID4+PiBvcy5nZXRjd2QoKSAgICAgICMgUmV0dXJuIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5Ci0gICAnQzpcXFB5dGhvbjMzJworICAgJ0M6XFxQeXRob24zNCcKICAgID4+PiBvcy5jaGRpcignL3NlcnZlci9hY2Nlc3Nsb2dzJykgICAjIENoYW5nZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5CiAgICA+Pj4gb3Muc3lzdGVtKCdta2RpciB0b2RheScpICAgIyBSdW4gdGhlIGNvbW1hbmQgbWtkaXIgaW4gdGhlIHN5c3RlbSBzaGVsbAogICAgMApAQCAtNDAsNyArNDAsOSBAQAogCiAgICA+Pj4gaW1wb3J0IHNodXRpbAogICAgPj4+IHNodXRpbC5jb3B5ZmlsZSgnZGF0YS5kYicsICdhcmNoaXZlLmRiJykKKyAgICdhcmNoaXZlLmRiJwogICAgPj4+IHNodXRpbC5tb3ZlKCcvYnVpbGQvZXhlY3V0YWJsZXMnLCAnaW5zdGFsbGRpcicpCisgICAnaW5zdGFsbGRpcicKIAogCiAuLiBfdHV0LWZpbGUtd2lsZGNhcmRzOgpAQCAtMTM4LDYgKzE0MCwxOCBAQAogICAgPj4+IHJhbmRvbS5yYW5kcmFuZ2UoNikgICAgIyByYW5kb20gaW50ZWdlciBjaG9zZW4gZnJvbSByYW5nZSg2KQogICAgNAogCitUaGUgOm1vZDpgc3RhdGlzdGljc2AgbW9kdWxlIGNhbGN1bGF0ZXMgYmFzaWMgc3RhdGlzdGljYWwgcHJvcGVydGllcworKHRoZSBtZWFuLCBtZWRpYW4sIHZhcmlhbmNlLCBldGMuKSBvZiBudW1lcmljIGRhdGE6OgorCisgICAgPj4+IGltcG9ydCBzdGF0aXN0aWNzCisgICAgPj4+IGRhdGEgPSBbMi43NSwgMS43NSwgMS4yNSwgMC4yNSwgMC41LCAxLjI1LCAzLjVdCisgICAgPj4+IHN0YXRpc3RpY3MubWVhbihkYXRhKQorICAgIDEuNjA3MTQyODU3MTQyODU3MgorICAgID4+PiBzdGF0aXN0aWNzLm1lZGlhbihkYXRhKQorICAgIDEuMjUKKyAgICA+Pj4gc3RhdGlzdGljcy52YXJpYW5jZShkYXRhKQorICAgIDEuMzcyMDIzODA5NTIzODA5NQorCiBUaGUgU2NpUHkgcHJvamVjdCA8aHR0cDovL3NjaXB5Lm9yZz4gaGFzIG1hbnkgb3RoZXIgbW9kdWxlcyBmb3IgbnVtZXJpY2FsCiBjb21wdXRhdGlvbnMuCiAKQEAgLTE1MSwxMCArMTY1LDExIEBACiBmcm9tIFVSTHMgYW5kIDptb2Q6YHNtdHBsaWJgIGZvciBzZW5kaW5nIG1haWw6OgogCiAgICA+Pj4gZnJvbSB1cmxsaWIucmVxdWVzdCBpbXBvcnQgdXJsb3BlbgotICAgPj4+IGZvciBsaW5lIGluIHVybG9wZW4oJ2h0dHA6Ly90eWNoby51c25vLm5hdnkubWlsL2NnaS1iaW4vdGltZXIucGwnKToKLSAgIC4uLiAgICAgbGluZSA9IGxpbmUuZGVjb2RlKCd1dGYtOCcpICAjIERlY29kaW5nIHRoZSBiaW5hcnkgZGF0YSB0byB0ZXh0LgotICAgLi4uICAgICBpZiAnRVNUJyBpbiBsaW5lIG9yICdFRFQnIGluIGxpbmU6ICAjIGxvb2sgZm9yIEVhc3Rlcm4gVGltZQotICAgLi4uICAgICAgICAgcHJpbnQobGluZSkKKyAgID4+PiB3aXRoIHVybG9wZW4oJ2h0dHA6Ly90eWNoby51c25vLm5hdnkubWlsL2NnaS1iaW4vdGltZXIucGwnKSBhcyByZXNwb25zZToKKyAgIC4uLiAgICAgZm9yIGxpbmUgaW4gcmVzcG9uc2U6CisgICAuLi4gICAgICAgICBsaW5lID0gbGluZS5kZWNvZGUoJ3V0Zi04JykgICMgRGVjb2RpbmcgdGhlIGJpbmFyeSBkYXRhIHRvIHRleHQuCisgICAuLi4gICAgICAgICBpZiAnRVNUJyBpbiBsaW5lIG9yICdFRFQnIGluIGxpbmU6ICAjIGxvb2sgZm9yIEVhc3Rlcm4gVGltZQorICAgLi4uICAgICAgICAgICAgIHByaW50KGxpbmUpCiAKICAgIDxCUj5Ob3YuIDI1LCAwOTo0MzozMiBQTSBFU1QKIApAQCAtMzA4LDEzICszMjMsMTggQEAKICAgKGluY2x1ZGluZyBhdHRhY2htZW50cykgYW5kIGZvciBpbXBsZW1lbnRpbmcgaW50ZXJuZXQgZW5jb2RpbmcgYW5kIGhlYWRlcgogICBwcm90b2NvbHMuCiAKLSogVGhlIDptb2Q6YHhtbC5kb21gIGFuZCA6bW9kOmB4bWwuc2F4YCBwYWNrYWdlcyBwcm92aWRlIHJvYnVzdCBzdXBwb3J0IGZvcgotICBwYXJzaW5nIHRoaXMgcG9wdWxhciBkYXRhIGludGVyY2hhbmdlIGZvcm1hdC4gTGlrZXdpc2UsIHRoZSA6bW9kOmBjc3ZgIG1vZHVsZQotICBzdXBwb3J0cyBkaXJlY3QgcmVhZHMgYW5kIHdyaXRlcyBpbiBhIGNvbW1vbiBkYXRhYmFzZSBmb3JtYXQuIFRvZ2V0aGVyLCB0aGVzZQotICBtb2R1bGVzIGFuZCBwYWNrYWdlcyBncmVhdGx5IHNpbXBsaWZ5IGRhdGEgaW50ZXJjaGFuZ2UgYmV0d2VlbiBQeXRob24KLSAgYXBwbGljYXRpb25zIGFuZCBvdGhlciB0b29scy4KKyogVGhlIDptb2Q6YGpzb25gIHBhY2thZ2UgcHJvdmlkZXMgcm9idXN0IHN1cHBvcnQgZm9yIHBhcnNpbmcgdGhpcworICBwb3B1bGFyIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0LiAgVGhlIDptb2Q6YGNzdmAgbW9kdWxlIHN1cHBvcnRzCisgIGRpcmVjdCByZWFkaW5nIGFuZCB3cml0aW5nIG9mIGZpbGVzIGluIENvbW1hLVNlcGFyYXRlZCBWYWx1ZSBmb3JtYXQsCisgIGNvbW1vbmx5IHN1cHBvcnRlZCBieSBkYXRhYmFzZXMgYW5kIHNwcmVhZHNoZWV0cy4gIFhNTCBwcm9jZXNzaW5nIGlzCisgIHN1cHBvcnRlZCBieSB0aGUgOm1vZDpgeG1sLmV0cmVlLkVsZW1lbnRUcmVlYCwgOm1vZDpgeG1sLmRvbWAgYW5kCisgIDptb2Q6YHhtbC5zYXhgIHBhY2thZ2VzLiBUb2dldGhlciwgdGhlc2UgbW9kdWxlcyBhbmQgcGFja2FnZXMKKyAgZ3JlYXRseSBzaW1wbGlmeSBkYXRhIGludGVyY2hhbmdlIGJldHdlZW4gUHl0aG9uIGFwcGxpY2F0aW9ucyBhbmQKKyAgb3RoZXIgdG9vbHMuCisKKyogVGhlIDptb2Q6YHNxbGl0ZTNgIG1vZHVsZSBpcyBhIHdyYXBwZXIgZm9yIHRoZSBTUUxpdGUgZGF0YWJhc2UKKyAgbGlicmFyeSwgcHJvdmlkaW5nIGEgcGVyc2lzdGVudCBkYXRhYmFzZSB0aGF0IGNhbiBiZSB1cGRhdGVkIGFuZAorICBhY2Nlc3NlZCB1c2luZyBzbGlnaHRseSBub25zdGFuZGFyZCBTUUwgc3ludGF4LgogCiAqIEludGVybmF0aW9uYWxpemF0aW9uIGlzIHN1cHBvcnRlZCBieSBhIG51bWJlciBvZiBtb2R1bGVzIGluY2x1ZGluZwogICA6bW9kOmBnZXR0ZXh0YCwgOm1vZDpgbG9jYWxlYCwgYW5kIHRoZSA6bW9kOmBjb2RlY3NgIHBhY2thZ2UuCi0KLQpkaWZmIC0tZ2l0IGEvRG9jL3R1dG9yaWFsL3N0ZGxpYjIucnN0IGIvRG9jL3R1dG9yaWFsL3N0ZGxpYjIucnN0CmluZGV4IGMxZGQ2OWEuLmMwMTk3ZWEgMTAwNjQ0Ci0tLSBhL0RvYy90dXRvcmlhbC9zdGRsaWIyLnJzdAorKysgYi9Eb2MvdHV0b3JpYWwvc3RkbGliMi5yc3QKQEAgLTI3Nyw3ICsyNzcsNyBAQAogICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA8bW9kdWxlPgogICAgICAgIGRbJ3ByaW1hcnknXSAgICAgICAgICAgICAgICAjIGVudHJ5IHdhcyBhdXRvbWF0aWNhbGx5IHJlbW92ZWQKLSAgICAgRmlsZSAiQzovcHl0aG9uMzMvbGliL3dlYWtyZWYucHkiLCBsaW5lIDQ2LCBpbiBfX2dldGl0ZW1fXworICAgICBGaWxlICJDOi9weXRob24zNC9saWIvd2Vha3JlZi5weSIsIGxpbmUgNDYsIGluIF9fZ2V0aXRlbV9fCiAgICAgICAgbyA9IHNlbGYuZGF0YVtrZXldKCkKICAgIEtleUVycm9yOiAncHJpbWFyeScKIApkaWZmIC0tZ2l0IGEvRG9jL3R1dG9yaWFsL3ZlbnYucnN0IGIvRG9jL3R1dG9yaWFsL3ZlbnYucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiMmVlMmUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2MvdHV0b3JpYWwvdmVudi5yc3QKQEAgLTAsMCArMSwxOTcgQEAKKworLi4gX3R1dC12ZW52OgorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK1ZpcnR1YWwgRW52aXJvbm1lbnRzIGFuZCBQYWNrYWdlcworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK0ludHJvZHVjdGlvbgorPT09PT09PT09PT09CisKK1B5dGhvbiBhcHBsaWNhdGlvbnMgd2lsbCBvZnRlbiB1c2UgcGFja2FnZXMgYW5kIG1vZHVsZXMgdGhhdCBkb24ndAorY29tZSBhcyBwYXJ0IG9mIHRoZSBzdGFuZGFyZCBsaWJyYXJ5LiAgQXBwbGljYXRpb25zIHdpbGwgc29tZXRpbWVzCituZWVkIGEgc3BlY2lmaWMgdmVyc2lvbiBvZiBhIGxpYnJhcnksIGJlY2F1c2UgdGhlIGFwcGxpY2F0aW9uIG1heQorcmVxdWlyZSB0aGF0IGEgcGFydGljdWxhciBidWcgaGFzIGJlZW4gZml4ZWQgb3IgdGhlIGFwcGxpY2F0aW9uIG1heSBiZQord3JpdHRlbiB1c2luZyBhbiBvYnNvbGV0ZSB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5J3MgaW50ZXJmYWNlLgorCitUaGlzIG1lYW5zIGl0IG1heSBub3QgYmUgcG9zc2libGUgZm9yIG9uZSBQeXRob24gaW5zdGFsbGF0aW9uIHRvIG1lZXQKK3RoZSByZXF1aXJlbWVudHMgb2YgZXZlcnkgYXBwbGljYXRpb24uICBJZiBhcHBsaWNhdGlvbiBBIG5lZWRzIHZlcnNpb24KKzEuMCBvZiBhIHBhcnRpY3VsYXIgbW9kdWxlIGJ1dCBhcHBsaWNhdGlvbiBCIG5lZWRzIHZlcnNpb24gMi4wLCB0aGVuCit0aGUgcmVxdWlyZW1lbnRzIGFyZSBpbiBjb25mbGljdCBhbmQgaW5zdGFsbGluZyBlaXRoZXIgdmVyc2lvbiAxLjAgb3IgMi4wCit3aWxsIGxlYXZlIG9uZSBhcHBsaWNhdGlvbiB1bmFibGUgdG8gcnVuLgorCitUaGUgc29sdXRpb24gZm9yIHRoaXMgcHJvYmxlbSBpcyB0byBjcmVhdGUgYSA6dGVybTpgdmlydHVhbAorZW52aXJvbm1lbnRgIChvZnRlbiBzaG9ydGVuZWQgdG8gInZpcnR1YWxlbnYiKSwgYSBzZWxmLWNvbnRhaW5lZAorZGlyZWN0b3J5IHRyZWUgdGhhdCBjb250YWlucyBhIFB5dGhvbiBpbnN0YWxsYXRpb24gZm9yIGEgcGFydGljdWxhcgordmVyc2lvbiBvZiBQeXRob24sIHBsdXMgYSBudW1iZXIgb2YgYWRkaXRpb25hbCBwYWNrYWdlcy4KKworRGlmZmVyZW50IGFwcGxpY2F0aW9ucyBjYW4gdGhlbiB1c2UgZGlmZmVyZW50IHZpcnR1YWwgZW52aXJvbm1lbnRzLgorVG8gcmVzb2x2ZSB0aGUgZWFybGllciBleGFtcGxlIG9mIGNvbmZsaWN0aW5nIHJlcXVpcmVtZW50cywKK2FwcGxpY2F0aW9uIEEgY2FuIGhhdmUgaXRzIG93biB2aXJ0dWFsIGVudmlyb25tZW50IHdpdGggdmVyc2lvbiAxLjAKK2luc3RhbGxlZCB3aGlsZSBhcHBsaWNhdGlvbiBCIGhhcyBhbm90aGVyIHZpcnR1YWxlbnYgd2l0aCB2ZXJzaW9uIDIuMC4KK0lmIGFwcGxpY2F0aW9uIEIgcmVxdWlyZXMgYSBsaWJyYXJ5IGJlIHVwZ3JhZGVkIHRvIHZlcnNpb24gMy4wLCB0aGlzIHdpbGwKK25vdCBhZmZlY3QgYXBwbGljYXRpb24gQSdzIGVudmlyb25tZW50LgorCisKK0NyZWF0aW5nIFZpcnR1YWwgRW52aXJvbm1lbnRzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgc2NyaXB0IHVzZWQgdG8gY3JlYXRlIGFuZCBtYW5hZ2UgdmlydHVhbCBlbnZpcm9ubWVudHMgaXMgY2FsbGVkCis6cHJvZ3JhbTpgcHl2ZW52YC4gIDpwcm9ncmFtOmBweXZlbnZgIHdpbGwgdXN1YWxseSBpbnN0YWxsIHRoZSBtb3N0CityZWNlbnQgdmVyc2lvbiBvZiBQeXRob24gdGhhdCB5b3UgaGF2ZSBhdmFpbGFibGU7IHRoZSBzY3JpcHQgaXMgYWxzbworaW5zdGFsbGVkIHdpdGggYSB2ZXJzaW9uIG51bWJlciwgc28gaWYgeW91IGhhdmUgbXVsdGlwbGUgdmVyc2lvbnMgb2YKK1B5dGhvbiBvbiB5b3VyIHN5c3RlbSB5b3UgY2FuIHNlbGVjdCBhIHNwZWNpZmljIFB5dGhvbiB2ZXJzaW9uIGJ5CitydW5uaW5nIGBgcHl2ZW52LTMuNGBgIG9yIHdoaWNoZXZlciB2ZXJzaW9uIHlvdSB3YW50LgorCitUbyBjcmVhdGUgYSB2aXJ0dWFsZW52LCBkZWNpZGUgdXBvbiBhIGRpcmVjdG9yeQord2hlcmUgeW91IHdhbnQgdG8gcGxhY2UgaXQgYW5kIHJ1biA6cHJvZ3JhbTpgcHl2ZW52YCB3aXRoIHRoZQorZGlyZWN0b3J5IHBhdGg6OgorCisgICBweXZlbnYgdHV0b3JpYWwtZW52CisKK1RoaXMgd2lsbCBjcmVhdGUgdGhlIGBgdHV0b3JpYWwtZW52YGAgZGlyZWN0b3J5IGlmIGl0IGRvZXNuJ3QgZXhpc3QsCithbmQgYWxzbyBjcmVhdGUgZGlyZWN0b3JpZXMgaW5zaWRlIGl0IGNvbnRhaW5pbmcgYSBjb3B5IG9mIHRoZSBQeXRob24KK2ludGVycHJldGVyLCB0aGUgc3RhbmRhcmQgbGlicmFyeSwgYW5kIHZhcmlvdXMgc3VwcG9ydGluZyBmaWxlcy4KKworT25jZSB5b3UndmUgY3JlYXRlZCBhIHZpcnR1YWwgZW52aXJvbm1lbnQsIHlvdSBuZWVkIHRvCithY3RpdmF0ZSBpdC4KKworT24gV2luZG93cywgcnVuOjoKKworICB0dXRvcmlhbC1lbnYvU2NyaXB0cy9hY3RpdmF0ZQorCitPbiBVbml4IG9yIE1hY09TLCBydW46OgorCisgIHNvdXJjZSB0dXRvcmlhbC1lbnYvYmluL2FjdGl2YXRlCisKKyhUaGlzIHNjcmlwdCBpcyB3cml0dGVuIGZvciB0aGUgYmFzaCBzaGVsbC4gIElmIHlvdSB1c2UgdGhlCis6cHJvZ3JhbTpgY3NoYCBvciA6cHJvZ3JhbTpgZmlzaGAgc2hlbGxzLCB0aGVyZSBhcmUgYWx0ZXJuYXRlCitgYGFjdGl2YXRlLmNzaGBgIGFuZCBgYGFjdGl2YXRlLmZpc2hgYCBzY3JpcHRzIHlvdSBzaG91bGQgdXNlCitpbnN0ZWFkLikKKworQWN0aXZhdGluZyB0aGUgdmlydHVhbGVudiB3aWxsIGNoYW5nZSB5b3VyIHNoZWxsJ3MgcHJvbXB0IHRvIHNob3cgd2hhdAordmlydHVhbGVudiB5b3UncmUgdXNpbmcsIGFuZCBtb2RpZnkgdGhlIGVudmlyb25tZW50IHNvIHRoYXQgcnVubmluZworYGBweXRob25gYCB3aWxsIGdldCB5b3UgdGhhdCBwYXJ0aWN1bGFyIHZlcnNpb24gYW5kIGluc3RhbGxhdGlvbiBvZgorUHl0aG9uLiAgRm9yIGV4YW1wbGU6OgorCisgIC0+IHNvdXJjZSB+L2VudnMvdHV0b3JpYWwtZW52L2Jpbi9hY3RpdmF0ZQorICAodHV0b3JpYWwtZW52KSAtPiBweXRob24KKyAgUHl0aG9uIDMuNC4zKyAoMy40OmM3Yjk2NDVhNmYzNSssIE1heSAyMiAyMDE1LCAwOTozMToyNSkKKyAgICAuLi4KKyAgPj4+IGltcG9ydCBzeXMKKyAgPj4+IHN5cy5wYXRoCisgIFsnJywgJy91c3IvbG9jYWwvbGliL3B5dGhvbjM0LnppcCcsIC4uLiwKKyAgJ34vZW52cy90dXRvcmlhbC1lbnYvbGliL3B5dGhvbjMuNC9zaXRlLXBhY2thZ2VzJ10KKyAgPj4+CisKKworTWFuYWdpbmcgUGFja2FnZXMgd2l0aCBwaXAKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK09uY2UgeW91J3ZlIGFjdGl2YXRlZCBhIHZpcnR1YWwgZW52aXJvbm1lbnQsIHlvdSBjYW4gaW5zdGFsbCwgdXBncmFkZSwKK2FuZCByZW1vdmUgcGFja2FnZXMgdXNpbmcgYSBwcm9ncmFtIGNhbGxlZCA6cHJvZ3JhbTpgcGlwYC4gIEJ5IGRlZmF1bHQKK2BgcGlwYGAgd2lsbCBpbnN0YWxsIHBhY2thZ2VzIGZyb20gdGhlIFB5dGhvbiBQYWNrYWdlIEluZGV4LAorPGh0dHBzOi8vcHlwaS5weXRob24ub3JnL3B5cGk+LiAgWW91IGNhbiBicm93c2UgdGhlIFB5dGhvbiBQYWNrYWdlIEluZGV4CitieSBnb2luZyB0byBpdCBpbiB5b3VyIHdlYiBicm93c2VyLCBvciB5b3UgY2FuIHVzZSBgYHBpcGBgJ3MKK2xpbWl0ZWQgc2VhcmNoIGZlYXR1cmU6OgorCisgICh0dXRvcmlhbC1lbnYpIC0+IHBpcCBzZWFyY2ggYXN0cm9ub215CisgIHNreWZpZWxkICAgICAgICAgICAgICAgLSBFbGVnYW50IGFzdHJvbm9teSBmb3IgUHl0aG9uCisgIGdhcnkgICAgICAgICAgICAgICAgICAgLSBHYWxhY3RpYyBhc3Ryb25vbXkgYW5kIGdyYXZpdGF0aW9uYWwgZHluYW1pY3MuCisgIG5vdmFzICAgICAgICAgICAgICAgICAgLSBUaGUgVW5pdGVkIFN0YXRlcyBOYXZhbCBPYnNlcnZhdG9yeSBOT1ZBUyBhc3Ryb25vbXkgbGlicmFyeQorICBhc3Ryb29icyAgICAgICAgICAgICAgIC0gUHJvdmlkZXMgYXN0cm9ub215IGVwaGVtZXJpcyB0byBwbGFuIHRlbGVzY29wZSBvYnNlcnZhdGlvbnMKKyAgUHlBc3Ryb25vbXkgICAgICAgICAgICAtIEEgY29sbGVjdGlvbiBvZiBhc3Ryb25vbXkgcmVsYXRlZCB0b29scyBmb3IgUHl0aG9uLgorICAuLi4KKworYGBwaXBgYCBoYXMgYSBudW1iZXIgb2Ygc3ViY29tbWFuZHM6ICJzZWFyY2giLCAiaW5zdGFsbCIsICJ1bmluc3RhbGwiLAorImZyZWV6ZSIsIGV0Yy4gIChDb25zdWx0IHRoZSA6cmVmOmBpbnN0YWxsaW5nLWluZGV4YCBndWlkZSBmb3IKK2NvbXBsZXRlIGRvY3VtZW50YXRpb24gZm9yIGBgcGlwYGAuKQorCitZb3UgY2FuIGluc3RhbGwgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIGEgcGFja2FnZSBieSBzcGVjaWZ5aW5nIGEgcGFja2FnZSdzIG5hbWU6OgorCisgIC0+IHBpcCBpbnN0YWxsIG5vdmFzCisgIENvbGxlY3Rpbmcgbm92YXMKKyAgICBEb3dubG9hZGluZyBub3Zhcy0zLjEuMS4zLnRhci5neiAoMTM2a0IpCisgIEluc3RhbGxpbmcgY29sbGVjdGVkIHBhY2thZ2VzOiBub3ZhcworICAgIFJ1bm5pbmcgc2V0dXAucHkgaW5zdGFsbCBmb3Igbm92YXMKKyAgU3VjY2Vzc2Z1bGx5IGluc3RhbGxlZCBub3Zhcy0zLjEuMS4zCisKK1lvdSBjYW4gYWxzbyBpbnN0YWxsIGEgc3BlY2lmaWMgdmVyc2lvbiBvZiBhIHBhY2thZ2UgYnkgZ2l2aW5nIHRoZQorcGFja2FnZSBuYW1lICBmb2xsb3dlZCBieSBgYD09YGAgYW5kIHRoZSB2ZXJzaW9uIG51bWJlcjo6CisKKyAgLT4gcGlwIGluc3RhbGwgcmVxdWVzdHM9PTIuNi4wCisgIENvbGxlY3RpbmcgcmVxdWVzdHM9PTIuNi4wCisgICAgVXNpbmcgY2FjaGVkIHJlcXVlc3RzLTIuNi4wLXB5Mi5weTMtbm9uZS1hbnkud2hsCisgIEluc3RhbGxpbmcgY29sbGVjdGVkIHBhY2thZ2VzOiByZXF1ZXN0cworICBTdWNjZXNzZnVsbHkgaW5zdGFsbGVkIHJlcXVlc3RzLTIuNi4wCisKK0lmIHlvdSByZS1ydW4gdGhpcyBjb21tYW5kLCBgYHBpcGBgIHdpbGwgbm90aWNlIHRoYXQgdGhlIHJlcXVlc3RlZAordmVyc2lvbiBpcyBhbHJlYWR5IGluc3RhbGxlZCBhbmQgZG8gbm90aGluZy4gIFlvdSBjYW4gc3VwcGx5IGEKK2RpZmZlcmVudCB2ZXJzaW9uIG51bWJlciB0byBnZXQgdGhhdCB2ZXJzaW9uLCBvciB5b3UgY2FuIHJ1biBgYHBpcAoraW5zdGFsbCAtLXVwZ3JhZGVgYCB0byB1cGdyYWRlIHRoZSBwYWNrYWdlIHRvIHRoZSBsYXRlc3QgdmVyc2lvbjo6CisKKyAgLT4gcGlwIGluc3RhbGwgLS11cGdyYWRlIHJlcXVlc3RzCisgIENvbGxlY3RpbmcgcmVxdWVzdHMKKyAgSW5zdGFsbGluZyBjb2xsZWN0ZWQgcGFja2FnZXM6IHJlcXVlc3RzCisgICAgRm91bmQgZXhpc3RpbmcgaW5zdGFsbGF0aW9uOiByZXF1ZXN0cyAyLjYuMAorICAgICAgVW5pbnN0YWxsaW5nIHJlcXVlc3RzLTIuNi4wOgorICAgICAgICBTdWNjZXNzZnVsbHkgdW5pbnN0YWxsZWQgcmVxdWVzdHMtMi42LjAKKyAgU3VjY2Vzc2Z1bGx5IGluc3RhbGxlZCByZXF1ZXN0cy0yLjcuMAorCitgYHBpcCB1bmluc3RhbGxgYCBmb2xsb3dlZCBieSBvbmUgb3IgbW9yZSBwYWNrYWdlIG5hbWVzIHdpbGwgcmVtb3ZlIHRoZQorcGFja2FnZXMgZnJvbSB0aGUgdmlydHVhbCBlbnZpcm9ubWVudC4KKworYGBwaXAgc2hvd2BgIHdpbGwgZGlzcGxheSBpbmZvcm1hdGlvbiBhYm91dCBhIHBhcnRpY3VsYXIgcGFja2FnZTo6CisKKyAgKHR1dG9yaWFsLWVudikgLT4gcGlwIHNob3cgcmVxdWVzdHMKKyAgLS0tCisgIE1ldGFkYXRhLVZlcnNpb246IDIuMAorICBOYW1lOiByZXF1ZXN0cworICBWZXJzaW9uOiAyLjcuMAorICBTdW1tYXJ5OiBQeXRob24gSFRUUCBmb3IgSHVtYW5zLgorICBIb21lLXBhZ2U6IGh0dHA6Ly9weXRob24tcmVxdWVzdHMub3JnCisgIEF1dGhvcjogS2VubmV0aCBSZWl0egorICBBdXRob3ItZW1haWw6IG1lQGtlbm5ldGhyZWl0ei5jb20KKyAgTGljZW5zZTogQXBhY2hlIDIuMAorICBMb2NhdGlvbjogL1VzZXJzL2FrdWNobGluZy9lbnZzL3R1dG9yaWFsLWVudi9saWIvcHl0aG9uMy40L3NpdGUtcGFja2FnZXMKKyAgUmVxdWlyZXM6CisKK2BgcGlwIGxpc3RgYCB3aWxsIGRpc3BsYXkgYWxsIG9mIHRoZSBwYWNrYWdlcyBpbnN0YWxsZWQgaW4gdGhlIHZpcnR1YWwKK2Vudmlyb25tZW50OjoKKworICAodHV0b3JpYWwtZW52KSAtPiBwaXAgbGlzdAorICBub3ZhcyAoMy4xLjEuMykKKyAgbnVtcHkgKDEuOS4yKQorICBwaXAgKDcuMC4zKQorICByZXF1ZXN0cyAoMi43LjApCisgIHNldHVwdG9vbHMgKDE2LjApCisKK2BgcGlwIGZyZWV6ZWBgIHdpbGwgcHJvZHVjZSBhIHNpbWlsYXIgbGlzdCBvZiB0aGUgaW5zdGFsbGVkIHBhY2thZ2VzLAorYnV0IHRoZSBvdXRwdXQgdXNlcyB0aGUgZm9ybWF0IHRoYXQgYGBwaXAgaW5zdGFsbGBgIGV4cGVjdHMuCitBIGNvbW1vbiBjb252ZW50aW9uIGlzIHRvIHB1dCB0aGlzIGxpc3QgaW4gYSBgYHJlcXVpcmVtZW50cy50eHRgYCBmaWxlOjoKKworICAodHV0b3JpYWwtZW52KSAtPiBwaXAgZnJlZXplID4gcmVxdWlyZW1lbnRzLnR4dAorICAodHV0b3JpYWwtZW52KSAtPiBjYXQgcmVxdWlyZW1lbnRzLnR4dAorICBub3Zhcz09My4xLjEuMworICBudW1weT09MS45LjIKKyAgcmVxdWVzdHM9PTIuNy4wCisKK1RoZSBgYHJlcXVpcmVtZW50cy50eHRgYCBjYW4gdGhlbiBiZSBjb21taXR0ZWQgdG8gdmVyc2lvbiBjb250cm9sIGFuZAorc2hpcHBlZCBhcyBwYXJ0IG9mIGFuIGFwcGxpY2F0aW9uLiAgVXNlcnMgY2FuIHRoZW4gaW5zdGFsbCBhbGwgdGhlCituZWNlc3NhcnkgcGFja2FnZXMgd2l0aCBgYGluc3RhbGwgLXJgYDo6CisKKyAgLT4gcGlwIGluc3RhbGwgLXIgcmVxdWlyZW1lbnRzLnR4dAorICBDb2xsZWN0aW5nIG5vdmFzPT0zLjEuMS4zIChmcm9tIC1yIHJlcXVpcmVtZW50cy50eHQgKGxpbmUgMSkpCisgICAgLi4uCisgIENvbGxlY3RpbmcgbnVtcHk9PTEuOS4yIChmcm9tIC1yIHJlcXVpcmVtZW50cy50eHQgKGxpbmUgMikpCisgICAgLi4uCisgIENvbGxlY3RpbmcgcmVxdWVzdHM9PTIuNy4wIChmcm9tIC1yIHJlcXVpcmVtZW50cy50eHQgKGxpbmUgMykpCisgICAgLi4uCisgIEluc3RhbGxpbmcgY29sbGVjdGVkIHBhY2thZ2VzOiBub3ZhcywgbnVtcHksIHJlcXVlc3RzCisgICAgUnVubmluZyBzZXR1cC5weSBpbnN0YWxsIGZvciBub3ZhcworICBTdWNjZXNzZnVsbHkgaW5zdGFsbGVkIG5vdmFzLTMuMS4xLjMgbnVtcHktMS45LjIgcmVxdWVzdHMtMi43LjAKKworYGBwaXBgYCBoYXMgbWFueSBtb3JlIG9wdGlvbnMuICBDb25zdWx0IHRoZSA6cmVmOmBpbnN0YWxsaW5nLWluZGV4YAorZ3VpZGUgZm9yIGNvbXBsZXRlIGRvY3VtZW50YXRpb24gZm9yIGBgcGlwYGAuICBXaGVuIHlvdSd2ZSB3cml0dGVuCithIHBhY2thZ2UgYW5kIHdhbnQgdG8gbWFrZSBpdCBhdmFpbGFibGUgb24gdGhlIFB5dGhvbiBQYWNrYWdlIEluZGV4LAorY29uc3VsdCB0aGUgOnJlZjpgZGlzdHJpYnV0aW5nLWluZGV4YCBndWlkZS4KZGlmZiAtLWdpdCBhL0RvYy90dXRvcmlhbC93aGF0bm93LnJzdCBiL0RvYy90dXRvcmlhbC93aGF0bm93LnJzdAppbmRleCA3ZmNiZGMzZi4uNDc5NTQyYyAxMDA2NDQKLS0tIGEvRG9jL3R1dG9yaWFsL3doYXRub3cucnN0CisrKyBiL0RvYy90dXRvcmlhbC93aGF0bm93LnJzdApAQCAtMjEsOCArMjEsOCBAQAogICBhbmQgbWFueSBvdGhlciB0YXNrcy4gU2tpbW1pbmcgdGhyb3VnaCB0aGUgTGlicmFyeSBSZWZlcmVuY2Ugd2lsbCBnaXZlIHlvdSBhbgogICBpZGVhIG9mIHdoYXQncyBhdmFpbGFibGUuCiAKLSogOnJlZjpgaW5zdGFsbC1pbmRleGAgZXhwbGFpbnMgaG93IHRvIGluc3RhbGwgZXh0ZXJuYWwgbW9kdWxlcyB3cml0dGVuIGJ5IG90aGVyCi0gIFB5dGhvbiB1c2Vycy4KKyogOnJlZjpgaW5zdGFsbGluZy1pbmRleGAgZXhwbGFpbnMgaG93IHRvIGluc3RhbGwgYWRkaXRpb25hbCBtb2R1bGVzIHdyaXR0ZW4KKyAgYnkgb3RoZXIgUHl0aG9uIHVzZXJzLgogCiAqIDpyZWY6YHJlZmVyZW5jZS1pbmRleGA6IEEgZGV0YWlsZWQgZXhwbGFuYXRpb24gb2YgUHl0aG9uJ3Mgc3ludGF4IGFuZAogICBzZW1hbnRpY3MuICBJdCdzIGhlYXZ5IHJlYWRpbmcsIGJ1dCBpcyB1c2VmdWwgYXMgYSBjb21wbGV0ZSBndWlkZSB0byB0aGUKQEAgLTMwLDI0ICszMCwyNyBAQAogCiBNb3JlIFB5dGhvbiByZXNvdXJjZXM6CiAKLSogaHR0cDovL3d3dy5weXRob24ub3JnOiAgVGhlIG1ham9yIFB5dGhvbiBXZWIgc2l0ZS4gIEl0IGNvbnRhaW5zIGNvZGUsCisqIGh0dHBzOi8vd3d3LnB5dGhvbi5vcmc6ICBUaGUgbWFqb3IgUHl0aG9uIFdlYiBzaXRlLiAgSXQgY29udGFpbnMgY29kZSwKICAgZG9jdW1lbnRhdGlvbiwgYW5kIHBvaW50ZXJzIHRvIFB5dGhvbi1yZWxhdGVkIHBhZ2VzIGFyb3VuZCB0aGUgV2ViLiAgVGhpcyBXZWIKICAgc2l0ZSBpcyBtaXJyb3JlZCBpbiB2YXJpb3VzIHBsYWNlcyBhcm91bmQgdGhlIHdvcmxkLCBzdWNoIGFzIEV1cm9wZSwgSmFwYW4sIGFuZAogICBBdXN0cmFsaWE7IGEgbWlycm9yIG1heSBiZSBmYXN0ZXIgdGhhbiB0aGUgbWFpbiBzaXRlLCBkZXBlbmRpbmcgb24geW91cgogICBnZW9ncmFwaGljYWwgbG9jYXRpb24uCiAKLSogaHR0cDovL2RvY3MucHl0aG9uLm9yZzogIEZhc3QgYWNjZXNzIHRvIFB5dGhvbidzICBkb2N1bWVudGF0aW9uLgorKiBodHRwczovL2RvY3MucHl0aG9uLm9yZzogIEZhc3QgYWNjZXNzIHRvIFB5dGhvbidzICBkb2N1bWVudGF0aW9uLgogCi0qIGh0dHA6Ly9weXBpLnB5dGhvbi5vcmc6IFRoZSBQeXRob24gUGFja2FnZSBJbmRleCwgcHJldmlvdXNseSBhbHNvIG5pY2tuYW1lZAorKiBodHRwczovL3B5cGkucHl0aG9uLm9yZy9weXBpOiBUaGUgUHl0aG9uIFBhY2thZ2UgSW5kZXgsIHByZXZpb3VzbHkgYWxzbyBuaWNrbmFtZWQKICAgdGhlIENoZWVzZSBTaG9wLCBpcyBhbiBpbmRleCBvZiB1c2VyLWNyZWF0ZWQgUHl0aG9uIG1vZHVsZXMgdGhhdCBhcmUgYXZhaWxhYmxlCiAgIGZvciBkb3dubG9hZC4gIE9uY2UgeW91IGJlZ2luIHJlbGVhc2luZyBjb2RlLCB5b3UgY2FuIHJlZ2lzdGVyIGl0IGhlcmUgc28gdGhhdAogICBvdGhlcnMgY2FuIGZpbmQgaXQuCiAKLSogaHR0cDovL2FzcG4uYWN0aXZlc3RhdGUuY29tL0FTUE4vUHl0aG9uL0Nvb2tib29rLzogVGhlIFB5dGhvbiBDb29rYm9vayBpcyBhCisqIGh0dHA6Ly9jb2RlLmFjdGl2ZXN0YXRlLmNvbS9yZWNpcGVzL2xhbmdzL3B5dGhvbi86IFRoZSBQeXRob24gQ29va2Jvb2sgaXMgYQogICBzaXphYmxlIGNvbGxlY3Rpb24gb2YgY29kZSBleGFtcGxlcywgbGFyZ2VyIG1vZHVsZXMsIGFuZCB1c2VmdWwgc2NyaXB0cy4KICAgUGFydGljdWxhcmx5IG5vdGFibGUgY29udHJpYnV0aW9ucyBhcmUgY29sbGVjdGVkIGluIGEgYm9vayBhbHNvIHRpdGxlZCBQeXRob24KICAgQ29va2Jvb2sgKE8nUmVpbGx5ICYgQXNzb2NpYXRlcywgSVNCTiAwLTU5Ni0wMDc5Ny0zLikKIAorKiBodHRwOi8vd3d3LnB5dmlkZW8ub3JnIGNvbGxlY3RzIGxpbmtzIHRvIFB5dGhvbi1yZWxhdGVkIHZpZGVvcyBmcm9tCisgIGNvbmZlcmVuY2VzIGFuZCB1c2VyLWdyb3VwIG1lZXRpbmdzLgorCiAqIGh0dHA6Ly9zY2lweS5vcmc6IFRoZSBTY2llbnRpZmljIFB5dGhvbiBwcm9qZWN0IGluY2x1ZGVzIG1vZHVsZXMgZm9yIGZhc3QKICAgYXJyYXkgY29tcHV0YXRpb25zIGFuZCBtYW5pcHVsYXRpb25zIHBsdXMgYSBob3N0IG9mIHBhY2thZ2VzIGZvciBzdWNoCiAgIHRoaW5ncyBhcyBsaW5lYXIgYWxnZWJyYSwgRm91cmllciB0cmFuc2Zvcm1zLCBub24tbGluZWFyIHNvbHZlcnMsCkBAIC01NywxNCArNjAsMTEgQEAKIDpuZXdzZ3JvdXA6YGNvbXAubGFuZy5weXRob25gLCBvciBzZW5kIHRoZW0gdG8gdGhlIG1haWxpbmcgbGlzdCBhdAogcHl0aG9uLWxpc3RAcHl0aG9uLm9yZy4gIFRoZSBuZXdzZ3JvdXAgYW5kIG1haWxpbmcgbGlzdCBhcmUgZ2F0ZXdheWVkLCBzbwogbWVzc2FnZXMgcG9zdGVkIHRvIG9uZSB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgZm9yd2FyZGVkIHRvIHRoZSBvdGhlci4gIFRoZXJlIGFyZQotYXJvdW5kIDEyMCBwb3N0aW5ncyBhIGRheSAod2l0aCBwZWFrcyB1cCB0byBzZXZlcmFsIGh1bmRyZWQpLCBhc2tpbmcgKGFuZAoraHVuZHJlZHMgb2YgcG9zdGluZ3MgYSBkYXksIGFza2luZyAoYW5kCiBhbnN3ZXJpbmcpIHF1ZXN0aW9ucywgc3VnZ2VzdGluZyBuZXcgZmVhdHVyZXMsIGFuZCBhbm5vdW5jaW5nIG5ldyBtb2R1bGVzLgotQmVmb3JlIHBvc3RpbmcsIGJlIHN1cmUgdG8gY2hlY2sgdGhlIGxpc3Qgb2YgOnJlZjpgRnJlcXVlbnRseSBBc2tlZCBRdWVzdGlvbnMKLTxmYXEtaW5kZXg+YCAoYWxzbyBjYWxsZWQgdGhlIEZBUSkuCi1NYWlsaW5nIGxpc3QgYXJjaGl2ZXMgYXJlIGF2YWlsYWJsZSBhdCBodHRwOi8vbWFpbC5weXRob24ub3JnL3BpcGVybWFpbC8uCi1UaGUgRkFRIGFuc3dlcnMgbWFueSBvZiB0aGUgcXVlc3Rpb25zIHRoYXQgY29tZSB1cCBhZ2FpbiBhbmQgYWdhaW4sCi1hbmQgbWF5IGFscmVhZHkgY29udGFpbiB0aGUgc29sdXRpb24gZm9yIHlvdXIgcHJvYmxlbS4KK01haWxpbmcgbGlzdCBhcmNoaXZlcyBhcmUgYXZhaWxhYmxlIGF0IGh0dHBzOi8vbWFpbC5weXRob24ub3JnL3BpcGVybWFpbC8uCiAKLS4uIFBvc3RpbmdzIGZpZ3VyZSBiYXNlZCBvbiBhdmVyYWdlIG9mIGxhc3Qgc2l4IG1vbnRocyBhY3Rpdml0eSBhcwotICAgcmVwb3J0ZWQgYnkgd3d3LmVncm91cHMuY29tOyBKYW4uIDIwMDAgLSBKdW5lIDIwMDA6IDIxMjcyIG1zZ3MgLyAxODIKLSAgIGRheXMgPSAxMTYuOSBtc2dzIC8gZGF5IGFuZCBzdGVhZGlseSBpbmNyZWFzaW5nLiAoWFhYIHVwIHRvIGRhdGUgZmlndXJlcz8pCitCZWZvcmUgcG9zdGluZywgYmUgc3VyZSB0byBjaGVjayB0aGUgbGlzdCBvZgorOnJlZjpgRnJlcXVlbnRseSBBc2tlZCBRdWVzdGlvbnMgPGZhcS1pbmRleD5gIChhbHNvIGNhbGxlZCB0aGUgRkFRKS4gIFRoZQorRkFRIGFuc3dlcnMgbWFueSBvZiB0aGUgcXVlc3Rpb25zIHRoYXQgY29tZSB1cCBhZ2FpbiBhbmQgYWdhaW4sIGFuZCBtYXkKK2FscmVhZHkgY29udGFpbiB0aGUgc29sdXRpb24gZm9yIHlvdXIgcHJvYmxlbS4KZGlmZiAtLWdpdCBhL0RvYy91c2luZy9jbWRsaW5lLnJzdCBiL0RvYy91c2luZy9jbWRsaW5lLnJzdAppbmRleCA0ZTcxNjhmLi5hNDYzNDliIDEwMDY0NAotLS0gYS9Eb2MvdXNpbmcvY21kbGluZS5yc3QKKysrIGIvRG9jL3VzaW5nL2NtZGxpbmUucnN0CkBAIC0xLDcgKzEsNyBAQAotLi4gaGlnaGxpZ2h0bGFuZzo6IG5vbmUKKy4uIGhpZ2hsaWdodGxhbmc6OiBzaAogCiAuLiBBVFRFTlRJT046IFlvdSBwcm9iYWJseSBzaG91bGQgdXBkYXRlIE1pc2MvcHl0aG9uLm1hbiwgdG9vLCBpZiB5b3UgbW9kaWZ5Ci0uLiB0aGlzIGZpbGUuCisgICB0aGlzIGZpbGUuCiAKIC4uIF91c2luZy1vbi1nZW5lcmFsOgogCkBAIC0yNCw3ICsyNCw3IEBACiAKIFdoZW4gaW52b2tpbmcgUHl0aG9uLCB5b3UgbWF5IHNwZWNpZnkgYW55IG9mIHRoZXNlIG9wdGlvbnM6OgogCi0gICAgcHl0aG9uIFstYkJkRWhpT3FzU3V2Vld4P10gWy1jIGNvbW1hbmQgfCAtbSBtb2R1bGUtbmFtZSB8IHNjcmlwdCB8IC0gXSBbYXJnc10KKyAgICBweXRob24gWy1iQmRFaGlJT3FzU3V2Vld4P10gWy1jIGNvbW1hbmQgfCAtbSBtb2R1bGUtbmFtZSB8IHNjcmlwdCB8IC0gXSBbYXJnc10KIAogVGhlIG1vc3QgY29tbW9uIHVzZSBjYXNlIGlzLCBvZiBjb3Vyc2UsIGEgc2ltcGxlIGludm9jYXRpb24gb2YgYSBzY3JpcHQ6OgogCkBAIC00MSw3ICs0MSw3IEBACiAKICogV2hlbiBjYWxsZWQgd2l0aCBzdGFuZGFyZCBpbnB1dCBjb25uZWN0ZWQgdG8gYSB0dHkgZGV2aWNlLCBpdCBwcm9tcHRzIGZvcgogICBjb21tYW5kcyBhbmQgZXhlY3V0ZXMgdGhlbSB1bnRpbCBhbiBFT0YgKGFuIGVuZC1vZi1maWxlIGNoYXJhY3RlciwgeW91IGNhbgotICBwcm9kdWNlIHRoYXQgd2l0aCAqQ3RybC1EKiBvbiBVTklYIG9yICpDdHJsLVosIEVudGVyKiBvbiBXaW5kb3dzKSBpcyByZWFkLgorICBwcm9kdWNlIHRoYXQgd2l0aCA6a2JkOmBDdHJsLURgIG9uIFVOSVggb3IgOmtiZDpgQ3RybC1aLCBFbnRlcmAgb24gV2luZG93cykgaXMgcmVhZC4KICogV2hlbiBjYWxsZWQgd2l0aCBhIGZpbGUgbmFtZSBhcmd1bWVudCBvciB3aXRoIGEgZmlsZSBhcyBzdGFuZGFyZCBpbnB1dCwgaXQKICAgcmVhZHMgYW5kIGV4ZWN1dGVzIGEgc2NyaXB0IGZyb20gdGhhdCBmaWxlLgogKiBXaGVuIGNhbGxlZCB3aXRoIGEgZGlyZWN0b3J5IG5hbWUgYXJndW1lbnQsIGl0IHJlYWRzIGFuZCBleGVjdXRlcyBhbgpAQCAtODEsNyArODEsOCBAQAogICAgdGhlIGltcGxlbWVudGF0aW9uIG1heSBub3QgYWx3YXlzIGVuZm9yY2UgdGhpcyAoZS5nLiBpdCBtYXkgYWxsb3cgeW91IHRvCiAgICB1c2UgYSBuYW1lIHRoYXQgaW5jbHVkZXMgYSBoeXBoZW4pLgogCi0gICBQYWNrYWdlIG5hbWVzIGFyZSBhbHNvIHBlcm1pdHRlZC4gV2hlbiBhIHBhY2thZ2UgbmFtZSBpcyBzdXBwbGllZCBpbnN0ZWFkCisgICBQYWNrYWdlIG5hbWVzIChpbmNsdWRpbmcgbmFtZXNwYWNlIHBhY2thZ2VzKSBhcmUgYWxzbyBwZXJtaXR0ZWQuIFdoZW4gYQorICAgcGFja2FnZSBuYW1lIGlzIHN1cHBsaWVkIGluc3RlYWQKICAgIG9mIGEgbm9ybWFsIG1vZHVsZSwgdGhlIGludGVycHJldGVyIHdpbGwgZXhlY3V0ZSBgYDxwa2c+Ll9fbWFpbl9fYGAgYXMKICAgIHRoZSBtYWluIG1vZHVsZS4gVGhpcyBiZWhhdmlvdXIgaXMgZGVsaWJlcmF0ZWx5IHNpbWlsYXIgdG8gdGhlIGhhbmRsaW5nCiAgICBvZiBkaXJlY3RvcmllcyBhbmQgemlwZmlsZXMgdGhhdCBhcmUgcGFzc2VkIHRvIHRoZSBpbnRlcnByZXRlciBhcyB0aGUKQEAgLTExNSw2ICsxMTYsOSBAQAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjEKICAgICAgIFN1cHBseSB0aGUgcGFja2FnZSBuYW1lIHRvIHJ1biBhIGBgX19tYWluX19gYCBzdWJtb2R1bGUuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBuYW1lc3BhY2UgcGFja2FnZXMgYXJlIGFsc28gc3VwcG9ydGVkCisKIAogLi4gZGVzY3JpYmU6OiAtCiAKQEAgLTE0NCwxMyArMTQ4LDIyIEBACiAgICBhZGRlZCB0byB0aGUgc3RhcnQgb2YgOmRhdGE6YHN5cy5wYXRoYCBhbmQgdGhlIGBgX19tYWluX18ucHlgYCBmaWxlIGluCiAgICB0aGF0IGxvY2F0aW9uIGlzIGV4ZWN1dGVkIGFzIHRoZSA6bW9kOmBfX21haW5fX2AgbW9kdWxlLgogCisgICAuLiBzZWVhbHNvOjoKKyAgICAgIDpmdW5jOmBydW5weS5ydW5fcGF0aGAKKyAgICAgICAgIEVxdWl2YWxlbnQgZnVuY3Rpb25hbGl0eSBkaXJlY3RseSBhdmFpbGFibGUgdG8gUHl0aG9uIGNvZGUKKwogCiBJZiBubyBpbnRlcmZhY2Ugb3B0aW9uIGlzIGdpdmVuLCA6b3B0aW9uOmAtaWAgaXMgaW1wbGllZCwgYGBzeXMuYXJndlswXWBgIGlzCiBhbiBlbXB0eSBzdHJpbmcgKGBgIiJgYCkgYW5kIHRoZSBjdXJyZW50IGRpcmVjdG9yeSB3aWxsIGJlIGFkZGVkIHRvIHRoZQotc3RhcnQgb2YgOmRhdGE6YHN5cy5wYXRoYC4KK3N0YXJ0IG9mIDpkYXRhOmBzeXMucGF0aGAuICBBbHNvLCB0YWItY29tcGxldGlvbiBhbmQgaGlzdG9yeSBlZGl0aW5nIGlzCithdXRvbWF0aWNhbGx5IGVuYWJsZWQsIGlmIGF2YWlsYWJsZSBvbiB5b3VyIHBsYXRmb3JtIChzZWUKKzpyZWY6YHJsY29tcGxldGVyLWNvbmZpZ2ApLgogCiAuLiBzZWVhbHNvOjogIDpyZWY6YHR1dC1pbnZva2luZ2AKIAorLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgIEF1dG9tYXRpYyBlbmFibGluZyBvZiB0YWItY29tcGxldGlvbiBhbmQgaGlzdG9yeSBlZGl0aW5nLgorCiAKIEdlbmVyaWMgb3B0aW9ucwogfn5+fn5+fn5+fn5+fn5+CkBAIC0xNzAsNiArMTgzLDggQEAKICAgICAgICBQeXRob24gMy4wCiAKIAorLi4gX3VzaW5nLW9uLW1pc2Mtb3B0aW9uczoKKwogTWlzY2VsbGFuZW91cyBvcHRpb25zCiB+fn5+fn5+fn5+fn5+fn5+fn5+fn4KIApAQCAtMjA4LDYgKzIyMywxNyBAQAogICAgcmFpc2VzIGFuIGV4Y2VwdGlvbi4gIFNlZSBhbHNvIDplbnZ2YXI6YFBZVEhPTklOU1BFQ1RgLgogCiAKKy4uIGNtZG9wdGlvbjo6IC1JCisKKyAgIFJ1biBQeXRob24gaW4gaXNvbGF0ZWQgbW9kZS4gVGhpcyBhbHNvIGltcGxpZXMgLUUgYW5kIC1zLgorICAgSW4gaXNvbGF0ZWQgbW9kZSA6ZGF0YTpgc3lzLnBhdGhgIGNvbnRhaW5zIG5laXRoZXIgdGhlIHNjcmlwdCdzIGRpcmVjdG9yeSBub3IKKyAgIHRoZSB1c2VyJ3Mgc2l0ZS1wYWNrYWdlcyBkaXJlY3RvcnkuIEFsbCA6ZW52dmFyOmBQWVRIT04qYCBlbnZpcm9ubWVudAorICAgdmFyaWFibGVzIGFyZSBpZ25vcmVkLCB0b28uIEZ1cnRoZXIgcmVzdHJpY3Rpb25zIG1heSBiZSBpbXBvc2VkIHRvIHByZXZlbnQKKyAgIHRoZSB1c2VyIGZyb20gaW5qZWN0aW5nIG1hbGljaW91cyBjb2RlLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiAuLiBjbWRvcHRpb246OiAtTwogCiAgICBUdXJuIG9uIGJhc2ljIG9wdGltaXphdGlvbnMuICBUaGlzIGNoYW5nZXMgdGhlIGZpbGVuYW1lIGV4dGVuc2lvbiBmb3IKQEAgLTM1OCw5ICszODQsMTkgQEAKIC4uIGNtZG9wdGlvbjo6IC1YCiAKICAgIFJlc2VydmVkIGZvciB2YXJpb3VzIGltcGxlbWVudGF0aW9uLXNwZWNpZmljIG9wdGlvbnMuICBDUHl0aG9uIGN1cnJlbnRseQotICAgZGVmaW5lcyBqdXN0IG9uZSwgeW91IGNhbiB1c2UgYGAtWCBmYXVsdGhhbmRsZXJgYCB0byBlbmFibGUKLSAgIDptb2Q6YGZhdWx0aGFuZGxlcmAuIEl0IGFsc28gYWxsb3dzIHRvIHBhc3MgYXJiaXRyYXJ5IHZhbHVlcyBhbmQgcmV0cmlldmUKLSAgIHRoZW0gdGhyb3VnaCB0aGUgOmRhdGE6YHN5cy5feG9wdGlvbnNgIGRpY3Rpb25hcnkuCisgICBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgcG9zc2libGUgdmFsdWVzOgorCisgICAqIGBgLVggZmF1bHRoYW5kbGVyYGAgdG8gZW5hYmxlIDptb2Q6YGZhdWx0aGFuZGxlcmA7CisgICAqIGBgLVggc2hvd3JlZmNvdW50YGAgdG8gZW5hYmxlIHRoZSBvdXRwdXQgb2YgdGhlIHRvdGFsIHJlZmVyZW5jZSBjb3VudAorICAgICBhbmQgbWVtb3J5IGJsb2NrcyAob25seSB3b3JrcyBvbiBkZWJ1ZyBidWlsZHMpOworICAgKiBgYC1YIHRyYWNlbWFsbG9jYGAgdG8gc3RhcnQgdHJhY2luZyBQeXRob24gbWVtb3J5IGFsbG9jYXRpb25zIHVzaW5nIHRoZQorICAgICA6bW9kOmB0cmFjZW1hbGxvY2AgbW9kdWxlLiBCeSBkZWZhdWx0LCBvbmx5IHRoZSBtb3N0IHJlY2VudCBmcmFtZSBpcworICAgICBzdG9yZWQgaW4gYSB0cmFjZWJhY2sgb2YgYSB0cmFjZS4gVXNlIGBgLVggdHJhY2VtYWxsb2M9TkZSQU1FYGAgdG8gc3RhcnQKKyAgICAgdHJhY2luZyB3aXRoIGEgdHJhY2ViYWNrIGxpbWl0IG9mICpORlJBTUUqIGZyYW1lcy4gU2VlIHRoZQorICAgICA6ZnVuYzpgdHJhY2VtYWxsb2Muc3RhcnRgIGZvciBtb3JlIGluZm9ybWF0aW9uLgorCisgICBJdCBhbHNvIGFsbG93cyB0byBwYXNzIGFyYml0cmFyeSB2YWx1ZXMgYW5kIHJldHJpZXZlIHRoZW0gdGhyb3VnaCB0aGUKKyAgIDpkYXRhOmBzeXMuX3hvcHRpb25zYCBkaWN0aW9uYXJ5LgogCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgogICAgICAgSXQgaXMgbm93IGFsbG93ZWQgdG8gcGFzcyA6b3B0aW9uOmAtWGAgd2l0aCBDUHl0aG9uLgpAQCAtMzY4LDYgKzQwNCw5IEBACiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKICAgICAgIFRoZSBgYC1YIGZhdWx0aGFuZGxlcmBgIG9wdGlvbi4KIAorICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisgICAgICBUaGUgYGAtWCBzaG93cmVmY291bnRgYCBhbmQgYGAtWCB0cmFjZW1hbGxvY2BgIG9wdGlvbnMuCisKIAogT3B0aW9ucyB5b3Ugc2hvdWxkbid0IHVzZQogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgpAQCAtMzc2LDcgKzQxNSw3IEBACiAKICAgIFJlc2VydmVkIGZvciB1c2UgYnkgSnl0aG9uXy4KIAotLi4gX0p5dGhvbjogaHR0cDovL2p5dGhvbi5vcmcKKy4uIF9KeXRob246IGh0dHA6Ly93d3cuanl0aG9uLm9yZy8KIAogCiAuLiBfdXNpbmctb24tZW52dmFyczoKQEAgLTM4NSw3ICs0MjQsNyBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFRoZXNlIGVudmlyb25tZW50IHZhcmlhYmxlcyBpbmZsdWVuY2UgUHl0aG9uJ3MgYmVoYXZpb3IsIHRoZXkgYXJlIHByb2Nlc3NlZAotYmVmb3JlIHRoZSBjb21tYW5kLWxpbmUgc3dpdGNoZXMgb3RoZXIgdGhhbiAtRS4gIEl0IGlzIGN1c3RvbWFyeSB0aGF0CitiZWZvcmUgdGhlIGNvbW1hbmQtbGluZSBzd2l0Y2hlcyBvdGhlciB0aGFuIC1FIG9yIC1JLiAgSXQgaXMgY3VzdG9tYXJ5IHRoYXQKIGNvbW1hbmQtbGluZSBzd2l0Y2hlcyBvdmVycmlkZSBlbnZpcm9ubWVudGFsIHZhcmlhYmxlcyB3aGVyZSB0aGVyZSBpcyBhCiBjb25mbGljdC4KIApAQCAtNDMwLDE1ICs0NjksNyBAQAogICAgaXMgZXhlY3V0ZWQgaW4gdGhlIHNhbWUgbmFtZXNwYWNlIHdoZXJlIGludGVyYWN0aXZlIGNvbW1hbmRzIGFyZSBleGVjdXRlZCBzbwogICAgdGhhdCBvYmplY3RzIGRlZmluZWQgb3IgaW1wb3J0ZWQgaW4gaXQgY2FuIGJlIHVzZWQgd2l0aG91dCBxdWFsaWZpY2F0aW9uIGluCiAgICB0aGUgaW50ZXJhY3RpdmUgc2Vzc2lvbi4gIFlvdSBjYW4gYWxzbyBjaGFuZ2UgdGhlIHByb21wdHMgOmRhdGE6YHN5cy5wczFgIGFuZAotICAgOmRhdGE6YHN5cy5wczJgIGluIHRoaXMgZmlsZS4KLQotCi0uLiBlbnZ2YXI6OiBQWVRIT05ZMksKLQotICAgU2V0IHRoaXMgdG8gYSBub24tZW1wdHkgc3RyaW5nIHRvIGNhdXNlIHRoZSA6bW9kOmB0aW1lYCBtb2R1bGUgdG8gcmVxdWlyZQotICAgZGF0ZXMgc3BlY2lmaWVkIGFzIHN0cmluZ3MgdG8gaW5jbHVkZSA0LWRpZ2l0IHllYXJzLCBvdGhlcndpc2UgMi1kaWdpdCB5ZWFycwotICAgYXJlIGNvbnZlcnRlZCBiYXNlZCBvbiBydWxlcyBkZXNjcmliZWQgaW4gdGhlIDptb2Q6YHRpbWVgIG1vZHVsZQotICAgZG9jdW1lbnRhdGlvbi4KKyAgIDpkYXRhOmBzeXMucHMyYCBhbmQgdGhlIGhvb2sgOmRhdGE6YHN5cy5fX2ludGVyYWN0aXZlaG9va19fYCBpbiB0aGlzIGZpbGUuCiAKIAogLi4gZW52dmFyOjogUFlUSE9OT1BUSU1JWkUKQEAgLTQ4NSw5ICs1MTYsOSBAQAogCiAuLiBlbnZ2YXI6OiBQWVRIT05ET05UV1JJVEVCWVRFQ09ERQogCi0gICBJZiB0aGlzIGlzIHNldCwgUHl0aG9uIHdvbid0IHRyeSB0byB3cml0ZSBgYC5weWNgYCBvciBgYC5weW9gYCBmaWxlcyBvbiB0aGUKLSAgIGltcG9ydCBvZiBzb3VyY2UgbW9kdWxlcy4gIFRoaXMgaXMgZXF1aXZhbGVudCB0byBzcGVjaWZ5aW5nIHRoZSA6b3B0aW9uOmAtQmAKLSAgIG9wdGlvbi4KKyAgIElmIHRoaXMgaXMgc2V0IHRvIGEgbm9uLWVtcHR5IHN0cmluZywgUHl0aG9uIHdvbid0IHRyeSB0byB3cml0ZSBgYC5weWNgYCBvcgorICAgYGAucHlvYGAgZmlsZXMgb24gdGhlIGltcG9ydCBvZiBzb3VyY2UgbW9kdWxlcy4gIFRoaXMgaXMgZXF1aXZhbGVudCB0bworICAgc3BlY2lmeWluZyB0aGUgOm9wdGlvbjpgLUJgIG9wdGlvbi4KIAogCiAuLiBlbnZ2YXI6OiBQWVRIT05IQVNIU0VFRApAQCAtNTEyLDEzICs1NDMsMTYgQEAKIC4uIGVudnZhcjo6IFBZVEhPTklPRU5DT0RJTkcKIAogICAgSWYgdGhpcyBpcyBzZXQgYmVmb3JlIHJ1bm5pbmcgdGhlIGludGVycHJldGVyLCBpdCBvdmVycmlkZXMgdGhlIGVuY29kaW5nIHVzZWQKLSAgIGZvciBzdGRpbi9zdGRvdXQvc3RkZXJyLCBpbiB0aGUgc3ludGF4IGBgZW5jb2RpbmduYW1lOmVycm9yaGFuZGxlcmBgLiBUaGUKLSAgIGBgOmVycm9yaGFuZGxlcmBgIHBhcnQgaXMgb3B0aW9uYWwgYW5kIGhhcyB0aGUgc2FtZSBtZWFuaW5nIGFzIGluCi0gICA6ZnVuYzpgc3RyLmVuY29kZWAuCisgICBmb3Igc3RkaW4vc3Rkb3V0L3N0ZGVyciwgaW4gdGhlIHN5bnRheCBgYGVuY29kaW5nbmFtZTplcnJvcmhhbmRsZXJgYC4gIEJvdGgKKyAgIHRoZSBgYGVuY29kaW5nbmFtZWBgIGFuZCB0aGUgYGA6ZXJyb3JoYW5kbGVyYGAgcGFydHMgYXJlIG9wdGlvbmFsIGFuZCBoYXZlCisgICB0aGUgc2FtZSBtZWFuaW5nIGFzIGluIDpmdW5jOmBzdHIuZW5jb2RlYC4KIAogICAgRm9yIHN0ZGVyciwgdGhlIGBgOmVycm9yaGFuZGxlcmBgIHBhcnQgaXMgaWdub3JlZDsgdGhlIGhhbmRsZXIgd2lsbCBhbHdheXMgYmUKICAgIGBgJ2JhY2tzbGFzaHJlcGxhY2UnYGAuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgYGBlbmNvZGluZ25hbWVgYCBwYXJ0IGlzIG5vdyBvcHRpb25hbC4KKwogCiAuLiBlbnZ2YXI6OiBQWVRIT05OT1VTRVJTSVRFCiAKQEAgLTU1NiwxNSArNTkwLDM0IEBACiAKIC4uIGVudnZhcjo6IFBZVEhPTkZBVUxUSEFORExFUgogCi0gICBJZiB0aGlzIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHNldCwgOmZ1bmM6YGZhdWx0aGFuZGxlci5lbmFibGVgIGlzIGNhbGxlZAotICAgYXQgc3RhcnR1cDogaW5zdGFsbCBhIGhhbmRsZXIgZm9yIDpjb25zdDpgU0lHU0VHVmAsIDpjb25zdDpgU0lHRlBFYCwKLSAgIDpjb25zdDpgU0lHQUJSVGAsIDpjb25zdDpgU0lHQlVTYCBhbmQgOmNvbnN0OmBTSUdJTExgIHNpZ25hbHMgdG8gZHVtcCB0aGUKLSAgIFB5dGhvbiB0cmFjZWJhY2suICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gOm9wdGlvbjpgLVhgIGBgZmF1bHRoYW5kbGVyYGAKLSAgIG9wdGlvbi4KKyAgIElmIHRoaXMgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgc2V0IHRvIGEgbm9uLWVtcHR5IHN0cmluZywKKyAgIDpmdW5jOmBmYXVsdGhhbmRsZXIuZW5hYmxlYCBpcyBjYWxsZWQgYXQgc3RhcnR1cDogaW5zdGFsbCBhIGhhbmRsZXIgZm9yCisgICA6Y29uc3Q6YFNJR1NFR1ZgLCA6Y29uc3Q6YFNJR0ZQRWAsIDpjb25zdDpgU0lHQUJSVGAsIDpjb25zdDpgU0lHQlVTYCBhbmQKKyAgIDpjb25zdDpgU0lHSUxMYCBzaWduYWxzIHRvIGR1bXAgdGhlIFB5dGhvbiB0cmFjZWJhY2suICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8KKyAgIDpvcHRpb246YC1YYCBgYGZhdWx0aGFuZGxlcmBgIG9wdGlvbi4KIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKIAorLi4gZW52dmFyOjogUFlUSE9OVFJBQ0VNQUxMT0MKKworICAgSWYgdGhpcyBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBzZXQgdG8gYSBub24tZW1wdHkgc3RyaW5nLCBzdGFydCB0cmFjaW5nCisgICBQeXRob24gbWVtb3J5IGFsbG9jYXRpb25zIHVzaW5nIHRoZSA6bW9kOmB0cmFjZW1hbGxvY2AgbW9kdWxlLiBUaGUgdmFsdWUgb2YKKyAgIHRoZSB2YXJpYWJsZSBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgZnJhbWVzIHN0b3JlZCBpbiBhIHRyYWNlYmFjayBvZiBhCisgICB0cmFjZS4gRm9yIGV4YW1wbGUsIGBgUFlUSE9OVFJBQ0VNQUxMT0M9MWBgIHN0b3JlcyBvbmx5IHRoZSBtb3N0IHJlY2VudAorICAgZnJhbWUuIFNlZSB0aGUgOmZ1bmM6YHRyYWNlbWFsbG9jLnN0YXJ0YCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKworLi4gZW52dmFyOjogUFlUSE9OQVNZTkNJT0RFQlVHCisKKyAgIElmIHRoaXMgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgc2V0IHRvIGEgbm9uLWVtcHR5IHN0cmluZywgZW5hYmxlIHRoZQorICAgOnJlZjpgZGVidWcgbW9kZSA8YXN5bmNpby1kZWJ1Zy1tb2RlPmAgb2YgdGhlIDptb2Q6YGFzeW5jaW9gIG1vZHVsZS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogRGVidWctbW9kZSB2YXJpYWJsZXMKIH5+fn5+fn5+fn5+fn5+fn5+fn5+CiAKZGlmZiAtLWdpdCBhL0RvYy91c2luZy9tYWMucnN0IGIvRG9jL3VzaW5nL21hYy5yc3QKaW5kZXggM2UxYjc0ZC4uZWYwOTFlNSAxMDA2NDQKLS0tIGEvRG9jL3VzaW5nL21hYy5yc3QKKysrIGIvRG9jL3VzaW5nL21hYy5yc3QKQEAgLTE5LDEzICsxOSwxMyBAQAogCiBNYWMgT1MgWCAxMC44IGNvbWVzIHdpdGggUHl0aG9uIDIuNyBwcmUtaW5zdGFsbGVkIGJ5IEFwcGxlLiAgSWYgeW91IHdpc2gsIHlvdQogYXJlIGludml0ZWQgdG8gaW5zdGFsbCB0aGUgbW9zdCByZWNlbnQgdmVyc2lvbiBvZiBQeXRob24gMyBmcm9tIHRoZSBQeXRob24KLXdlYnNpdGUgKGh0dHA6Ly93d3cucHl0aG9uLm9yZykuICBBIGN1cnJlbnQgInVuaXZlcnNhbCBiaW5hcnkiIGJ1aWxkIG9mIFB5dGhvbiwKK3dlYnNpdGUgKGh0dHBzOi8vd3d3LnB5dGhvbi5vcmcpLiAgQSBjdXJyZW50ICJ1bml2ZXJzYWwgYmluYXJ5IiBidWlsZCBvZiBQeXRob24sCiB3aGljaCBydW5zIG5hdGl2ZWx5IG9uIHRoZSBNYWMncyBuZXcgSW50ZWwgYW5kIGxlZ2FjeSBQUEMgQ1BVJ3MsIGlzIGF2YWlsYWJsZQogdGhlcmUuCiAKIFdoYXQgeW91IGdldCBhZnRlciBpbnN0YWxsaW5nIGlzIGEgbnVtYmVyIG9mIHRoaW5nczoKIAotKiBBIDpmaWxlOmBNYWNQeXRob24gMy4zYCBmb2xkZXIgaW4geW91ciA6ZmlsZTpgQXBwbGljYXRpb25zYCBmb2xkZXIuIEluIGhlcmUKKyogQSA6ZmlsZTpgTWFjUHl0aG9uIDMuNGAgZm9sZGVyIGluIHlvdXIgOmZpbGU6YEFwcGxpY2F0aW9uc2AgZm9sZGVyLiBJbiBoZXJlCiAgIHlvdSBmaW5kIElETEUsIHRoZSBkZXZlbG9wbWVudCBlbnZpcm9ubWVudCB0aGF0IGlzIGEgc3RhbmRhcmQgcGFydCBvZiBvZmZpY2lhbAogICBQeXRob24gZGlzdHJpYnV0aW9uczsgUHl0aG9uTGF1bmNoZXIsIHdoaWNoIGhhbmRsZXMgZG91YmxlLWNsaWNraW5nIFB5dGhvbgogICBzY3JpcHRzIGZyb20gdGhlIEZpbmRlcjsgYW5kIHRoZSAiQnVpbGQgQXBwbGV0IiB0b29sLCB3aGljaCBhbGxvd3MgeW91IHRvCkBAIC02NCw3ICs2NCw3IEBACiBudW1iZXIgb2Ygc3RhbmRhcmQgVW5peCBjb21tYW5kIGxpbmUgZWRpdG9ycywgOnByb2dyYW06YHZpbWAgYW5kCiA6cHJvZ3JhbTpgZW1hY3NgIGFtb25nIHRoZW0uIElmIHlvdSB3YW50IGEgbW9yZSBNYWMtbGlrZSBlZGl0b3IsCiA6cHJvZ3JhbTpgQkJFZGl0YCBvciA6cHJvZ3JhbTpgVGV4dFdyYW5nbGVyYCBmcm9tIEJhcmUgQm9uZXMgU29mdHdhcmUgKHNlZQotaHR0cDovL3d3dy5iYXJlYm9uZXMuY29tL3Byb2R1Y3RzL2JiZWRpdC9pbmRleC5zaHRtbCkgYXJlIGdvb2QgY2hvaWNlcywgYXMgaXMKK2h0dHA6Ly93d3cuYmFyZWJvbmVzLmNvbS9wcm9kdWN0cy9iYmVkaXQvaW5kZXguaHRtbCkgYXJlIGdvb2QgY2hvaWNlcywgYXMgaXMKIDpwcm9ncmFtOmBUZXh0TWF0ZWAgKHNlZSBodHRwOi8vbWFjcm9tYXRlcy5jb20vKS4gT3RoZXIgZWRpdG9ycyBpbmNsdWRlCiA6cHJvZ3JhbTpgR3ZpbWAgKGh0dHA6Ly9tYWN2aW0ub3JnKSBhbmQgOnByb2dyYW06YEFxdWFtYWNzYAogKGh0dHA6Ly9hcXVhbWFjcy5vcmcvKS4KQEAgLTkzLDcgKzkzLDcgQEAKIGFueXRoaW5nIHRoYXQgaGFzIGEgR1VJKSBuZWVkIHRvIGJlIHJ1biBpbiBhIHNwZWNpYWwgd2F5LiBVc2UgOnByb2dyYW06YHB5dGhvbndgCiBpbnN0ZWFkIG9mIDpwcm9ncmFtOmBweXRob25gIHRvIHN0YXJ0IHN1Y2ggc2NyaXB0cy4KIAotV2l0aCBQeXRob24gMy4zLCB5b3UgY2FuIHVzZSBlaXRoZXIgOnByb2dyYW06YHB5dGhvbmAgb3IgOnByb2dyYW06YHB5dGhvbndgLgorV2l0aCBQeXRob24gMy40LCB5b3UgY2FuIHVzZSBlaXRoZXIgOnByb2dyYW06YHB5dGhvbmAgb3IgOnByb2dyYW06YHB5dGhvbndgLgogCiAKIENvbmZpZ3VyYXRpb24KQEAgLTEwMiw4ICsxMDIsOSBAQAogUHl0aG9uIG9uIE9TIFggaG9ub3JzIGFsbCBzdGFuZGFyZCBVbml4IGVudmlyb25tZW50IHZhcmlhYmxlcyBzdWNoIGFzCiA6ZW52dmFyOmBQWVRIT05QQVRIYCwgYnV0IHNldHRpbmcgdGhlc2UgdmFyaWFibGVzIGZvciBwcm9ncmFtcyBzdGFydGVkIGZyb20gdGhlCiBGaW5kZXIgaXMgbm9uLXN0YW5kYXJkIGFzIHRoZSBGaW5kZXIgZG9lcyBub3QgcmVhZCB5b3VyIDpmaWxlOmAucHJvZmlsZWAgb3IKLTpmaWxlOmAuY3NocmNgIGF0IHN0YXJ0dXAuIFlvdSBuZWVkIHRvIGNyZWF0ZSBhIGZpbGUgOmZpbGU6YH4KLS8uTWFjT1NYL2Vudmlyb25tZW50LnBsaXN0YC4gU2VlIEFwcGxlJ3MgVGVjaG5pY2FsIERvY3VtZW50IFFBMTA2NyBmb3IgZGV0YWlscy4KKzpmaWxlOmAuY3NocmNgIGF0IHN0YXJ0dXAuIFlvdSBuZWVkIHRvIGNyZWF0ZSBhIGZpbGUKKzpmaWxlOmB+Ly5NYWNPU1gvZW52aXJvbm1lbnQucGxpc3RgLiBTZWUgQXBwbGUncyBUZWNobmljYWwgRG9jdW1lbnQgUUExMDY3IGZvcgorZGV0YWlscy4KIAogRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaW5zdGFsbGF0aW9uIFB5dGhvbiBwYWNrYWdlcyBpbiBNYWNQeXRob24sIHNlZSBzZWN0aW9uCiA6cmVmOmBtYWMtcGFja2FnZS1tYW5hZ2VyYC4KQEAgLTExNiw3ICsxMTcsNyBAQAogCiBNYWNQeXRob24gc2hpcHMgd2l0aCB0aGUgc3RhbmRhcmQgSURMRSBkZXZlbG9wbWVudCBlbnZpcm9ubWVudC4gQSBnb29kCiBpbnRyb2R1Y3Rpb24gdG8gdXNpbmcgSURMRSBjYW4gYmUgZm91bmQgYXQKLWh0dHA6Ly9oa24uZWVjcy5iZXJrZWxleS5lZHUvfmR5b28vcHl0aG9uL2lkbGVfaW50cm8vaW5kZXguaHRtbC4KK2h0dHBzOi8vaGtuLmVlY3MuYmVya2VsZXkuZWR1L35keW9vL3B5dGhvbi9pZGxlX2ludHJvL2luZGV4Lmh0bWwuCiAKIAogLi4gX21hYy1wYWNrYWdlLW1hbmFnZXI6CkBAIC0xMzAsNyArMTMxLDcgQEAKICAgc2V0dXAucHkgaW5zdGFsbGBgKS4KIAogKiBNYW55IHBhY2thZ2VzIGNhbiBhbHNvIGJlIGluc3RhbGxlZCB2aWEgdGhlIDpwcm9ncmFtOmBzZXR1cHRvb2xzYCBleHRlbnNpb24KLSAgb3IgOnByb2dyYW06YHBpcGAgd3JhcHBlciwgc2VlIGh0dHA6Ly93d3cucGlwLWluc3RhbGxlci5vcmcvLgorICBvciA6cHJvZ3JhbTpgcGlwYCB3cmFwcGVyLCBzZWUgaHR0cHM6Ly9waXAucHlwYS5pby8uCiAKIAogR1VJIFByb2dyYW1taW5nIG9uIHRoZSBNYWMKQEAgLTE0MCw3ICsxNDEsNyBAQAogCiAqUHlPYmpDKiBpcyBhIFB5dGhvbiBiaW5kaW5nIHRvIEFwcGxlJ3MgT2JqZWN0aXZlLUMvQ29jb2EgZnJhbWV3b3JrLCB3aGljaCBpcwogdGhlIGZvdW5kYXRpb24gb2YgbW9zdCBtb2Rlcm4gTWFjIGRldmVsb3BtZW50LiBJbmZvcm1hdGlvbiBvbiBQeU9iakMgaXMKLWF2YWlsYWJsZSBmcm9tIGh0dHA6Ly9weW9iamMuc291cmNlZm9yZ2UubmV0LgorYXZhaWxhYmxlIGZyb20gaHR0cHM6Ly9weXRob25ob3N0ZWQub3JnL3B5b2JqYy8uCiAKIFRoZSBzdGFuZGFyZCBQeXRob24gR1VJIHRvb2xraXQgaXMgOm1vZDpgdGtpbnRlcmAsIGJhc2VkIG9uIHRoZSBjcm9zcy1wbGF0Zm9ybQogVGsgdG9vbGtpdCAoaHR0cDovL3d3dy50Y2wudGspLiBBbiBBcXVhLW5hdGl2ZSB2ZXJzaW9uIG9mIFRrIGlzIGJ1bmRsZWQgd2l0aCBPUwpAQCAtMTU4LDcgKzE1OSw3IEBACiBEaXN0cmlidXRpbmcgUHl0aG9uIEFwcGxpY2F0aW9ucyBvbiB0aGUgTWFjCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKLVRoZSAiQnVpbGQgQXBwbGV0IiB0b29sIHRoYXQgaXMgcGxhY2VkIGluIHRoZSBNYWNQeXRob24gMy4zIGZvbGRlciBpcyBmaW5lIGZvcgorVGhlICJCdWlsZCBBcHBsZXQiIHRvb2wgdGhhdCBpcyBwbGFjZWQgaW4gdGhlIE1hY1B5dGhvbiAzLjQgZm9sZGVyIGlzIGZpbmUgZm9yCiBwYWNrYWdpbmcgc21hbGwgUHl0aG9uIHNjcmlwdHMgb24geW91ciBvd24gbWFjaGluZSB0byBydW4gYXMgYSBzdGFuZGFyZCBNYWMKIGFwcGxpY2F0aW9uLiBUaGlzIHRvb2wsIGhvd2V2ZXIsIGlzIG5vdCByb2J1c3QgZW5vdWdoIHRvIGRpc3RyaWJ1dGUgUHl0aG9uCiBhcHBsaWNhdGlvbnMgdG8gb3RoZXIgdXNlcnMuCkBAIC0xNzQsOSArMTc1LDkgQEAKIFRoZSBNYWNQeXRob24gbWFpbGluZyBsaXN0IGlzIGFuIGV4Y2VsbGVudCBzdXBwb3J0IHJlc291cmNlIGZvciBQeXRob24gdXNlcnMgYW5kCiBkZXZlbG9wZXJzIG9uIHRoZSBNYWM6CiAKLWh0dHA6Ly93d3cucHl0aG9uLm9yZy9jb21tdW5pdHkvc2lncy9jdXJyZW50L3B5dGhvbm1hYy1zaWcvCitodHRwczovL3d3dy5weXRob24ub3JnL2NvbW11bml0eS9zaWdzL2N1cnJlbnQvcHl0aG9ubWFjLXNpZy8KIAogQW5vdGhlciB1c2VmdWwgcmVzb3VyY2UgaXMgdGhlIE1hY1B5dGhvbiB3aWtpOgogCi1odHRwOi8vd2lraS5weXRob24ub3JnL21vaW4vTWFjUHl0aG9uCitodHRwczovL3dpa2kucHl0aG9uLm9yZy9tb2luL01hY1B5dGhvbgogCmRpZmYgLS1naXQgYS9Eb2MvdXNpbmcvdW5peC5yc3QgYi9Eb2MvdXNpbmcvdW5peC5yc3QKaW5kZXggNDA2MzVjNi4uNWRhMWYyMyAxMDA2NDQKLS0tIGEvRG9jL3VzaW5nL3VuaXgucnN0CisrKyBiL0RvYy91c2luZy91bml4LnJzdApAQCAtNTUsMTggKzU1LDE5IEBACiBPbiBPcGVuU29sYXJpcwogLS0tLS0tLS0tLS0tLS0KIAotVG8gaW5zdGFsbCB0aGUgbmV3ZXN0IFB5dGhvbiB2ZXJzaW9ucyBvbiBPcGVuU29sYXJpcywgaW5zdGFsbCBgYmxhc3R3YXZlCi08aHR0cDovL3d3dy5ibGFzdHdhdmUub3JnL2hvd3RvLmh0bWw+YF8gYW5kIHR5cGUgYGBwa2dfZ2V0IC1pIHB5dGhvbmBgIGF0IHRoZQotcHJvbXB0LgorWW91IGNhbiBnZXQgUHl0aG9uIGZyb20gYE9wZW5DU1cgPGh0dHA6Ly93d3cub3BlbmNzdy5vcmcvPmBfLiAgVmFyaW91cyB2ZXJzaW9ucworb2YgUHl0aG9uIGFyZSBhdmFpbGFibGUgYW5kIGNhbiBiZSBpbnN0YWxsZWQgd2l0aCBlLmcuIGBgcGtndXRpbCAtaSBweXRob24yN2BgLgogCiAKKy4uIF9idWlsZGluZy1weXRob24tb24tdW5peDoKKwogQnVpbGRpbmcgUHl0aG9uCiA9PT09PT09PT09PT09PT0KIAogSWYgeW91IHdhbnQgdG8gY29tcGlsZSBDUHl0aG9uIHlvdXJzZWxmLCBmaXJzdCB0aGluZyB5b3Ugc2hvdWxkIGRvIGlzIGdldCB0aGUKLWBzb3VyY2UgPGh0dHA6Ly9weXRob24ub3JnL2Rvd25sb2FkL3NvdXJjZS8+YF8uIFlvdSBjYW4gZG93bmxvYWQgZWl0aGVyIHRoZQorYHNvdXJjZSA8aHR0cHM6Ly93d3cucHl0aG9uLm9yZy9kb3dubG9hZC9zb3VyY2UvPmBfLiBZb3UgY2FuIGRvd25sb2FkIGVpdGhlciB0aGUKIGxhdGVzdCByZWxlYXNlJ3Mgc291cmNlIG9yIGp1c3QgZ3JhYiBhIGZyZXNoIGBjbG9uZQotPGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvZGV2Z3VpZGUvc2V0dXAjZ2V0dGluZy10aGUtc291cmNlLWNvZGU+YF8uICAoSWYgeW91IHdhbnQKKzxodHRwczovL2RvY3MucHl0aG9uLm9yZy9kZXZndWlkZS9zZXR1cC5odG1sI2dldHRpbmctdGhlLXNvdXJjZS1jb2RlPmBfLiAgKElmIHlvdSB3YW50CiB0byBjb250cmlidXRlIHBhdGNoZXMsIHlvdSB3aWxsIG5lZWQgYSBjbG9uZS4pCiAKIFRoZSBidWlsZCBwcm9jZXNzIGNvbnNpc3RzIGluIHRoZSB1c3VhbCA6OgpAQCAtMTQ0LDUgKzE0NSw0IEBACiBpbmZvcm1hdGlvbiwgcmVhZDogaHR0cDovL3d3dy5nZWFueS5vcmcvCiAKIEtvbW9kbyBlZGl0IGlzIGFub3RoZXIgZXh0cmVtZWx5IGdvb2QgSURFLiAgSXQgYWxzbyBoYXMgc3VwcG9ydCBmb3IgYSBsb3Qgb2YKLWxhbmd1YWdlcy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJlYWQ6Ci1odHRwOi8vd3d3LmFjdGl2ZXN0YXRlLmNvbS9zdG9yZS9wcm9kdWN0ZGV0YWlsLmFzcHg/cHJkR3VpZD0yMGY0ZWQxNS02Njg0LTQxMTgtYTc4Yi1kMzdmZjQwNThjNWYKK2xhbmd1YWdlcy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJlYWQgaHR0cDovL2tvbW9kb2lkZS5jb20vLgpkaWZmIC0tZ2l0IGEvRG9jL3VzaW5nL3ZlbnYtY3JlYXRlLmluYyBiL0RvYy91c2luZy92ZW52LWNyZWF0ZS5pbmMKaW5kZXggNWZkYmM5Yi4uNDViZGQ1YSAxMDA2NDQKLS0tIGEvRG9jL3VzaW5nL3ZlbnYtY3JlYXRlLmluYworKysgYi9Eb2MvdXNpbmcvdmVudi1jcmVhdGUuaW5jCkBAIC0xMSwyMSArMTEsMjYgQEAKIFdpbmRvd3MpLiAgSXQgYWxzbyBjcmVhdGVzIGFuIChpbml0aWFsbHkgZW1wdHkpIGBgbGliL3B5dGhvblguWS9zaXRlLXBhY2thZ2VzYGAKIHN1YmRpcmVjdG9yeSAob24gV2luZG93cywgdGhpcyBpcyBgYExpYlxzaXRlLXBhY2thZ2VzYGApLgogCisuLiBzZWVhbHNvOjoKKworICAgYFB5dGhvbiBQYWNrYWdpbmcgVXNlciBHdWlkZTogQ3JlYXRpbmcgYW5kIHVzaW5nIHZpcnR1YWwgZW52aXJvbm1lbnRzCisgICA8aHR0cHM6Ly9wYWNrYWdpbmcucHl0aG9uLm9yZy9lbi9sYXRlc3QvaW5zdGFsbGluZy5odG1sI3ZpcnR1YWwtZW52aXJvbm1lbnRzPmBfXworCiAuLiBoaWdobGlnaHQ6OiBub25lCiAKIE9uIFdpbmRvd3MsIHlvdSBtYXkgaGF2ZSB0byBpbnZva2UgdGhlIGBgcHl2ZW52YGAgc2NyaXB0IGFzIGZvbGxvd3MsIGlmIHlvdQogZG9uJ3QgaGF2ZSB0aGUgcmVsZXZhbnQgUEFUSCBhbmQgUEFUSEVYVCBzZXR0aW5nczo6CiAKLSAgICBjOlxUZW1wPmM6XFB5dGhvbjMzXHB5dGhvbiBjOlxQeXRob24zM1xUb29sc1xTY3JpcHRzXHB5dmVudi5weSBteWVudgorICAgIGM6XFRlbXA+YzpcUHl0aG9uMzRccHl0aG9uIGM6XFB5dGhvbjM0XFRvb2xzXFNjcmlwdHNccHl2ZW52LnB5IG15ZW52CiAKIG9yIGVxdWl2YWxlbnRseTo6CiAKLSAgICBjOlxUZW1wPmM6XFB5dGhvbjMzXHB5dGhvbiAtbSB2ZW52IG15ZW52CisgICAgYzpcVGVtcD5jOlxQeXRob24zNFxweXRob24gLW0gdmVudiBteWVudgogCiBUaGUgY29tbWFuZCwgaWYgcnVuIHdpdGggYGAtaGBgLCB3aWxsIHNob3cgdGhlIGF2YWlsYWJsZSBvcHRpb25zOjoKIAotICAgIHVzYWdlOiBweXZlbnYgWy1oXSBbLS1zeXN0ZW0tc2l0ZS1wYWNrYWdlc10gWy0tc3ltbGlua3NdIFstLWNsZWFyXQotICAgICAgICAgICAgICAgICAgWy0tdXBncmFkZV0gRU5WX0RJUiBbRU5WX0RJUiAuLi5dCisgICAgdXNhZ2U6IHZlbnYgWy1oXSBbLS1zeXN0ZW0tc2l0ZS1wYWNrYWdlc10gWy0tc3ltbGlua3NdIFstLWNsZWFyXQorICAgICAgICAgICAgICAgIFstLXVwZ3JhZGVdIFstLXdpdGhvdXQtcGlwXSBFTlZfRElSIFtFTlZfRElSIC4uLl0KIAogICAgIENyZWF0ZXMgdmlydHVhbCBQeXRob24gZW52aXJvbm1lbnRzIGluIG9uZSBvciBtb3JlIHRhcmdldCBkaXJlY3Rvcmllcy4KIApAQCAtMzgsMzggKzQzLDU2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpcnR1YWwgZW52aXJvbm1lbnQuCiAgICAgICAtLXN5bWxpbmtzICAgICAgICAgICAgIFRyeSB0byB1c2Ugc3ltbGlua3MgcmF0aGVyIHRoYW4gY29waWVzLCB3aGVuIHN5bWxpbmtzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZSBub3QgdGhlIGRlZmF1bHQgZm9yIHRoZSBwbGF0Zm9ybS4KKyAgICAgIC0tY29waWVzICAgICAgICAgICAgICAgVHJ5IHRvIHVzZSBjb3BpZXMgcmF0aGVyIHRoYW4gc3ltbGlua3MsIGV2ZW4gd2hlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1saW5rcyBhcmUgdGhlIGRlZmF1bHQgZm9yIHRoZSBwbGF0Zm9ybS4KICAgICAgIC0tY2xlYXIgICAgICAgICAgICAgICAgRGVsZXRlIHRoZSBlbnZpcm9ubWVudCBkaXJlY3RvcnkgaWYgaXQgYWxyZWFkeSBleGlzdHMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIG5vdCBzcGVjaWZpZWQgYW5kIHRoZSBkaXJlY3RvcnkgZXhpc3RzLCBhbiBlcnJvciBpcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZWQuCiAgICAgICAtLXVwZ3JhZGUgICAgICAgICAgICAgIFVwZ3JhZGUgdGhlIGVudmlyb25tZW50IGRpcmVjdG9yeSB0byB1c2UgdGhpcyB2ZXJzaW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIFB5dGhvbiwgYXNzdW1pbmcgUHl0aG9uIGhhcyBiZWVuIHVwZ3JhZGVkIGluLXBsYWNlLgorICAgICAgLS13aXRob3V0LXBpcCAgICAgICAgICBTa2lwcyBpbnN0YWxsaW5nIG9yIHVwZ3JhZGluZyBwaXAgaW4gdGhlIHZpcnR1YWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQgKHBpcCBpcyBib290c3RyYXBwZWQgYnkgZGVmYXVsdCkKIAotSWYgdGhlIHRhcmdldCBkaXJlY3RvcnkgYWxyZWFkeSBleGlzdHMgYW4gZXJyb3Igd2lsbCBiZSByYWlzZWQsIHVubGVzcwotdGhlIGBgLS1jbGVhcmBgIG9yIGBgLS11cGdyYWRlYGAgb3B0aW9uIHdhcyBwcm92aWRlZC4KK0RlcGVuZGluZyBvbiBob3cgdGhlIGBgdmVudmBgIGZ1bmN0aW9uYWxpdHkgaGFzIGJlZW4gaW52b2tlZCwgdGhlIHVzYWdlIG1lc3NhZ2UKK21heSB2YXJ5IHNsaWdodGx5LCBlLmcuIHJlZmVyZW5jaW5nIGBgcHl2ZW52YGAgcmF0aGVyIHRoYW4gYGB2ZW52YGAuCisKKy4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICBJbnN0YWxscyBwaXAgYnkgZGVmYXVsdCwgYWRkZWQgdGhlIGBgLS13aXRob3V0LXBpcGBgICBhbmQgYGAtLWNvcGllc2BgCisgICBvcHRpb25zCisKKy4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICBJbiBlYXJsaWVyIHZlcnNpb25zLCBpZiB0aGUgdGFyZ2V0IGRpcmVjdG9yeSBhbHJlYWR5IGV4aXN0ZWQsIGFuIGVycm9yIHdhcworICAgcmFpc2VkLCB1bmxlc3MgdGhlIGBgLS1jbGVhcmBgIG9yIGBgLS11cGdyYWRlYGAgb3B0aW9uIHdhcyBwcm92aWRlZC4gTm93LAorICAgaWYgYW4gZXhpc3RpbmcgZGlyZWN0b3J5IGlzIHNwZWNpZmllZCwgaXRzIGNvbnRlbnRzIGFyZSByZW1vdmVkIGFuZAorICAgdGhlIGRpcmVjdG9yeSBpcyBwcm9jZXNzZWQgYXMgaWYgaXQgaGFkIGJlZW4gbmV3bHkgY3JlYXRlZC4KIAogVGhlIGNyZWF0ZWQgYGBweXZlbnYuY2ZnYGAgZmlsZSBhbHNvIGluY2x1ZGVzIHRoZQogYGBpbmNsdWRlLXN5c3RlbS1zaXRlLXBhY2thZ2VzYGAga2V5LCBzZXQgdG8gYGB0cnVlYGAgaWYgYGB2ZW52YGAgaXMKIHJ1biB3aXRoIHRoZSBgYC0tc3lzdGVtLXNpdGUtcGFja2FnZXNgYCBvcHRpb24sIGBgZmFsc2VgYCBvdGhlcndpc2UuCiAKK1VubGVzcyB0aGUgYGAtLXdpdGhvdXQtcGlwYGAgb3B0aW9uIGlzIGdpdmVuLCA6bW9kOmBlbnN1cmVwaXBgIHdpbGwgYmUKK2ludm9rZWQgdG8gYm9vdHN0cmFwIGBgcGlwYGAgaW50byB0aGUgdmlydHVhbCBlbnZpcm9ubWVudC4KKwogTXVsdGlwbGUgcGF0aHMgY2FuIGJlIGdpdmVuIHRvIGBgcHl2ZW52YGAsIGluIHdoaWNoIGNhc2UgYW4gaWRlbnRpY2FsCiB2aXJ0dWFsZW52IHdpbGwgYmUgY3JlYXRlZCwgYWNjb3JkaW5nIHRvIHRoZSBnaXZlbiBvcHRpb25zLCBhdCBlYWNoCiBwcm92aWRlZCBwYXRoLgogCiBPbmNlIGEgdmVudiBoYXMgYmVlbiBjcmVhdGVkLCBpdCBjYW4gYmUgImFjdGl2YXRlZCIgdXNpbmcgYSBzY3JpcHQgaW4gdGhlCi12ZW52J3MgYmluYXJ5IGRpcmVjdG9yeS4gVGhlIGludm9jYXRpb24gb2YgdGhlIHNjcmlwdCBpcyBwbGF0Zm9ybS1zcGVjaWZpYzogb24KLWEgUG9zaXggcGxhdGZvcm0sIHlvdSB3b3VsZCB0eXBpY2FsbHkgZG86OgordmVudidzIGJpbmFyeSBkaXJlY3RvcnkuIFRoZSBpbnZvY2F0aW9uIG9mIHRoZSBzY3JpcHQgaXMgcGxhdGZvcm0tc3BlY2lmaWM6CiAKLSAgICAkIHNvdXJjZSA8dmVudj4vYmluL2FjdGl2YXRlCi0KLXdoZXJlYXMgb24gV2luZG93cywgeW91IG1pZ2h0IGRvOjoKLQotICAgIEM6XD4gPHZlbnY+L1NjcmlwdHMvYWN0aXZhdGUKLQotaWYgeW91IGFyZSB1c2luZyB0aGUgYGBjbWQuZXhlYGAgc2hlbGwsIG9yIHBlcmhhcHM6OgotCi0gICAgUFMgQzpcPiA8dmVudj4vU2NyaXB0cy9BY3RpdmF0ZS5wczEKLQotaWYgeW91IHVzZSBQb3dlclNoZWxsLgorKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFBsYXRmb3JtICAgIHwgU2hlbGwgICAgICAgICAgIHwgQ29tbWFuZCB0byBhY3RpdmF0ZSB2aXJ0dWFsIGVudmlyb25tZW50IHwKKys9PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KworfCBQb3NpeCAgICAgICB8IGJhc2gvenNoICAgICAgICB8ICQgc291cmNlIDx2ZW52Pi9iaW4vYWN0aXZhdGUgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgICAgICAgICAgICAgfCBmaXNoICAgICAgICAgICAgfCAkIC4gPHZlbnY+L2Jpbi9hY3RpdmF0ZS5maXNoICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8ICAgICAgICAgICAgIHwgY3NoL3Rjc2ggICAgICAgIHwgJCBzb3VyY2UgPHZlbnY+L2Jpbi9hY3RpdmF0ZS5jc2ggICAgICAgIHwKKystLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBXaW5kb3dzICAgICB8IGNtZC5leGUgICAgICAgICB8IEM6XD4gPHZlbnY+L1NjcmlwdHMvYWN0aXZhdGUuYmF0ICAgICAgICB8CisrLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgICAgICAgICAgICAgfCBQb3dlclNoZWxsICAgICAgfCBQUyBDOlw+IDx2ZW52Pi9TY3JpcHRzL0FjdGl2YXRlLnBzMSAgICAgfAorKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAKIFlvdSBkb24ndCBzcGVjaWZpY2FsbHkgKm5lZWQqIHRvIGFjdGl2YXRlIGFuIGVudmlyb25tZW50OyBhY3RpdmF0aW9uIGp1c3QKIHByZXBlbmRzIHRoZSB2ZW52J3MgYmluYXJ5IGRpcmVjdG9yeSB0byB5b3VyIHBhdGgsIHNvIHRoYXQgInB5dGhvbiIgaW52b2tlcyB0aGUKQEAgLTgzLDMgKzEwNiw1IEBACiBgYGRlYWN0aXZhdGUuYmF0YGAgYW5kIGBgRGVhY3RpdmF0ZS5wczFgYCB3aGljaCBhcmUgaW5zdGFsbGVkIHdoZW4gdGhlIHZlbnYgaXMKIGNyZWF0ZWQuCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorICAgYGBmaXNoYGAgYW5kIGBgY3NoYGAgYWN0aXZhdGlvbiBzY3JpcHRzLgpkaWZmIC0tZ2l0IGEvRG9jL3VzaW5nL3dpbmRvd3MucnN0IGIvRG9jL3VzaW5nL3dpbmRvd3MucnN0CmluZGV4IDZjNGQxNmUuLmMwNWY3MmEgMTAwNjQ0Ci0tLSBhL0RvYy91c2luZy93aW5kb3dzLnJzdAorKysgYi9Eb2MvdXNpbmcvd2luZG93cy5yc3QKQEAgLTExLDYgKzExLDEwIEBACiBUaGlzIGRvY3VtZW50IGFpbXMgdG8gZ2l2ZSBhbiBvdmVydmlldyBvZiBXaW5kb3dzLXNwZWNpZmljIGJlaGF2aW91ciB5b3Ugc2hvdWxkCiBrbm93IGFib3V0IHdoZW4gdXNpbmcgUHl0aG9uIG9uIE1pY3Jvc29mdCBXaW5kb3dzLgogCisuLiBYWFggKG5jb2dobGFuKQorCisgICBUaGlzIGxvb2tzIHJhdGhlciBzdGFsZSB0byBtZS4uLgorCiAKIEluc3RhbGxpbmcgUHl0aG9uCiA9PT09PT09PT09PT09PT09PQpAQCAtMTgsMjEgKzIyLDIwIEBACiBVbmxpa2UgbW9zdCBVbml4IHN5c3RlbXMgYW5kIHNlcnZpY2VzLCBXaW5kb3dzIGRvZXMgbm90IHJlcXVpcmUgUHl0aG9uIG5hdGl2ZWx5CiBhbmQgdGh1cyBkb2VzIG5vdCBwcmUtaW5zdGFsbCBhIHZlcnNpb24gb2YgUHl0aG9uLiAgSG93ZXZlciwgdGhlIENQeXRob24gdGVhbQogaGFzIGNvbXBpbGVkIFdpbmRvd3MgaW5zdGFsbGVycyAoTVNJIHBhY2thZ2VzKSB3aXRoIGV2ZXJ5IGByZWxlYXNlCi08aHR0cDovL3d3dy5weXRob24ub3JnL2Rvd25sb2FkL3JlbGVhc2VzLz5gXyBmb3IgbWFueSB5ZWFycy4KKzxodHRwczovL3d3dy5weXRob24ub3JnL2Rvd25sb2FkL3JlbGVhc2VzLz5gXyBmb3IgbWFueSB5ZWFycy4KIAogV2l0aCBvbmdvaW5nIGRldmVsb3BtZW50IG9mIFB5dGhvbiwgc29tZSBwbGF0Zm9ybXMgdGhhdCB1c2VkIHRvIGJlIHN1cHBvcnRlZAogZWFybGllciBhcmUgbm8gbG9uZ2VyIHN1cHBvcnRlZCAoZHVlIHRvIHRoZSBsYWNrIG9mIHVzZXJzIG9yIGRldmVsb3BlcnMpLgogQ2hlY2sgOnBlcDpgMTFgIGZvciBkZXRhaWxzIG9uIGFsbCB1bnN1cHBvcnRlZCBwbGF0Zm9ybXMuCiAKICogYFdpbmRvd3MgQ0UgPGh0dHA6Ly9weXRob25jZS5zb3VyY2Vmb3JnZS5uZXQvPmBfIGlzIHN0aWxsIHN1cHBvcnRlZC4KLSogVGhlIGBDeWd3aW4gPGh0dHA6Ly9jeWd3aW4uY29tLz5gXyBpbnN0YWxsZXIgb2ZmZXJzIHRvIGluc3RhbGwgdGhlIGBQeXRob24KLSAgaW50ZXJwcmV0ZXIgPGh0dHA6Ly9jeWd3aW4uY29tL3BhY2thZ2VzL3B5dGhvbj5gXyBhcyB3ZWxsOyBpdCBpcyBsb2NhdGVkIHVuZGVyCi0gICJJbnRlcnByZXRlcnMuIiAoY2YuIGBDeWd3aW4gcGFja2FnZSBzb3VyY2UKKyogVGhlIGBDeWd3aW4gPGh0dHA6Ly9jeWd3aW4uY29tLz5gXyBpbnN0YWxsZXIgb2ZmZXJzIHRvIGluc3RhbGwgdGhlIFB5dGhvbgorICBpbnRlcnByZXRlciBhcyB3ZWxsIChjZi4gYEN5Z3dpbiBwYWNrYWdlIHNvdXJjZQogICA8ZnRwOi8vZnRwLnVuaS1lcmxhbmdlbi5kZS9wdWIvcGMvZ251d2luMzIvY3lnd2luL21pcnJvcnMvY3lnbnVzLwogICByZWxlYXNlL3B5dGhvbj5gXywgYE1haW50YWluZXIgcmVsZWFzZXMKICAgPGh0dHA6Ly93d3cudGlzaGxlci5uZXQvamFzb24vc29mdHdhcmUvcHl0aG9uLz5gXykKIAotU2VlIGBQeXRob24gZm9yIFdpbmRvd3MgPGh0dHA6Ly93d3cucHl0aG9uLm9yZy9kb3dubG9hZC93aW5kb3dzLz5gXworU2VlIGBQeXRob24gZm9yIFdpbmRvd3MgPGh0dHBzOi8vd3d3LnB5dGhvbi5vcmcvZG93bmxvYWQvd2luZG93cy8+YF8KIGZvciBkZXRhaWxlZCBpbmZvcm1hdGlvbiBhYm91dCBwbGF0Zm9ybXMgd2l0aCBwcmUtY29tcGlsZWQgaW5zdGFsbGVycy4KIAogLi4gc2VlYWxzbzo6CkBAIC00MSwxNSArNDQsMTUgQEAKICAgICAgICI3IE1pbnV0ZXMgdG8gIkhlbGxvIFdvcmxkISIiCiAgICAgICBieSBSaWNoYXJkIERvb2xpbmcsIDIwMDYKIAotICAgYEluc3RhbGxpbmcgb24gV2luZG93cyA8aHR0cDovL2RpdmVpbnRvcHl0aG9uLm5ldC9pbnN0YWxsaW5nX3B5dGhvbi93aW5kb3dzLmh0bWw+YF8KKyAgIGBJbnN0YWxsaW5nIG9uIFdpbmRvd3MgPGh0dHA6Ly93d3cuZGl2ZWludG9weXRob24ubmV0L2luc3RhbGxpbmdfcHl0aG9uL3dpbmRvd3MuaHRtbD5gXwogICAgICAgaW4gImBEaXZlIGludG8gUHl0aG9uOiBQeXRob24gZnJvbSBub3ZpY2UgdG8gcHJvCi0gICAgICA8aHR0cDovL2RpdmVpbnRvcHl0aG9uLm5ldC9pbmRleC5odG1sPmBfIgorICAgICAgPGh0dHA6Ly93d3cuZGl2ZWludG9weXRob24ubmV0Lz5gXyIKICAgICAgIGJ5IE1hcmsgUGlsZ3JpbSwgMjAwNCwKICAgICAgIElTQk4gMS01OTA1OS0zNTYtMQogCi0gICBgRm9yIFdpbmRvd3MgdXNlcnMgPGh0dHA6Ly9zd2Fyb29wY2guY29tL3RleHQvQnl0ZV9vZl9QeXRob246SW5zdGFsbGluZ19QeXRob24jRm9yX1dpbmRvd3NfdXNlcnM+YF8KKyAgIGBGb3IgV2luZG93cyB1c2VycyA8aHR0cDovL3d3dy5zd2Fyb29wY2guY29tL25vdGVzL3B5dGhvbi8jaW5zdGFsbF93aW5kb3dzPmBfCiAgICAgICBpbiAiSW5zdGFsbGluZyBQeXRob24iCi0gICAgICBpbiAiYEEgQnl0ZSBvZiBQeXRob24gPGh0dHA6Ly93d3cuYnl0ZW9mcHl0aG9uLmluZm8+YF8iCisgICAgICBpbiAiYEEgQnl0ZSBvZiBQeXRob24gPGh0dHA6Ly93d3cuc3dhcm9vcGNoLmNvbS9ub3Rlcy9weXRob24vPmBfIgogICAgICAgYnkgU3dhcm9vcCBDIEgsIDIwMDMKIAogCkBAIC02Myw3ICs2Niw3IEBACiBgQWN0aXZlUHl0aG9uIDxodHRwOi8vd3d3LmFjdGl2ZXN0YXRlLmNvbS9hY3RpdmVweXRob24vPmBfCiAgICAgSW5zdGFsbGVyIHdpdGggbXVsdGktcGxhdGZvcm0gY29tcGF0aWJpbGl0eSwgZG9jdW1lbnRhdGlvbiwgUHlXaW4zMgogCi1gRW50aG91Z2h0IFB5dGhvbiBEaXN0cmlidXRpb24gPGh0dHA6Ly93d3cuZW50aG91Z2h0LmNvbS9wcm9kdWN0cy9lcGQucGhwPmBfCitgRW50aG91Z2h0IFB5dGhvbiBEaXN0cmlidXRpb24gPGh0dHBzOi8vd3d3LmVudGhvdWdodC5jb20vcHJvZHVjdHMvZXBkLz5gXwogICAgIFBvcHVsYXIgbW9kdWxlcyAoc3VjaCBhcyBQeVdpbjMyKSB3aXRoIHRoZWlyIHJlc3BlY3RpdmUgZG9jdW1lbnRhdGlvbiwgdG9vbAogICAgIHN1aXRlIGZvciBidWlsZGluZyBleHRlbnNpYmxlIFB5dGhvbiBhcHBsaWNhdGlvbnMKIApAQCAtNTExLDcgKzUxNCw3IEBACiAgIHVzZXIgaW50ZXJmYWNlcwogCiBgUHl0aG9uV2luIDxodHRwOi8vd2ViLmFyY2hpdmUub3JnL3dlYi8yMDA2MDUyNDA0MjQyMi8KLWh0dHA6Ly93d3cucHl0aG9uLm9yZy93aW5kb3dzL3B5dGhvbndpbi8+YF8gaXMgYSBzYW1wbGUgTUZDIGFwcGxpY2F0aW9uCitodHRwczovL3d3dy5weXRob24ub3JnL3dpbmRvd3MvcHl0aG9ud2luLz5gXyBpcyBhIHNhbXBsZSBNRkMgYXBwbGljYXRpb24KIHNoaXBwZWQgd2l0aCBQeVdpbjMyLiAgSXQgaXMgYW4gZW1iZWRkYWJsZSBJREUgd2l0aCBhIGJ1aWx0LWluIGRlYnVnZ2VyLgogCiAuLiBzZWVhbHNvOjoKQEAgLTU0OSw5ICs1NTIsOSBAQAogPT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKIElmIHlvdSB3YW50IHRvIGNvbXBpbGUgQ1B5dGhvbiB5b3Vyc2VsZiwgZmlyc3QgdGhpbmcgeW91IHNob3VsZCBkbyBpcyBnZXQgdGhlCi1gc291cmNlIDxodHRwOi8vcHl0aG9uLm9yZy9kb3dubG9hZC9zb3VyY2UvPmBfLiBZb3UgY2FuIGRvd25sb2FkIGVpdGhlciB0aGUKK2Bzb3VyY2UgPGh0dHBzOi8vd3d3LnB5dGhvbi5vcmcvZG93bmxvYWQvc291cmNlLz5gXy4gWW91IGNhbiBkb3dubG9hZCBlaXRoZXIgdGhlCiBsYXRlc3QgcmVsZWFzZSdzIHNvdXJjZSBvciBqdXN0IGdyYWIgYSBmcmVzaCBgY2hlY2tvdXQKLTxodHRwOi8vZG9jcy5weXRob24ub3JnL2Rldmd1aWRlL3NldHVwI2NoZWNraW5nLW91dC10aGUtY29kZT5gXy4KKzxodHRwczovL2RvY3MucHl0aG9uLm9yZy9kZXZndWlkZS9zZXR1cC5odG1sI2dldHRpbmctdGhlLXNvdXJjZS1jb2RlPmBfLgogCiBUaGUgc291cmNlIHRyZWUgY29udGFpbnMgYSBidWlsZCBzb2x1dGlvbiBhbmQgcHJvamVjdCBmaWxlcyBmb3IgTWljcm9zb2Z0CiBWaXN1YWwgQysrLCB3aGljaCBpcyB0aGUgY29tcGlsZXIgdXNlZCB0byBidWlsZCB0aGUgb2ZmaWNpYWwgUHl0aG9uIHJlbGVhc2VzLgpAQCAtNTYwLDEyICs1NjMsNiBAQAogKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogfCBEaXJlY3RvcnkgICAgICAgICAgfCBNU1ZDIHZlcnNpb24gfCBWaXN1YWwgU3R1ZGlvIHZlcnNpb24gfAogKz09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09KwotfCA6ZmlsZTpgUEMvVkM2L2AgICAgfCA2LjAgICAgICAgICAgfCA5NyAgICAgICAgICAgICAgICAgICAgfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCA6ZmlsZTpgUEMvVlM3LjEvYCAgfCA3LjEgICAgICAgICAgfCAyMDAzICAgICAgICAgICAgICAgICAgfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCA6ZmlsZTpgUEMvVlM4LjAvYCAgfCA4LjAgICAgICAgICAgfCAyMDA1ICAgICAgICAgICAgICAgICAgfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogfCA6ZmlsZTpgUEMvVlM5LjAvYCAgfCA5LjAgICAgICAgICAgfCAyMDA4ICAgICAgICAgICAgICAgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogfCA6ZmlsZTpgUENidWlsZC9gICAgfCAxMC4wICAgICAgICAgfCAyMDEwICAgICAgICAgICAgICAgICAgfApAQCAtNTk2LDcgKzU5Myw3IEBACiAKIC4uIHNlZWFsc286OgogCi0gICBgUHl0aG9uIFByb2dyYW1taW5nIE9uIFdpbjMyIDxodHRwOi8vd3d3Lm9yZWlsbHkuY29tL2NhdGFsb2cvcHl0aG9ud2luMzIvPmBfCisgICBgUHl0aG9uIFByb2dyYW1taW5nIE9uIFdpbjMyIDxodHRwOi8vc2hvcC5vcmVpbGx5LmNvbS9wcm9kdWN0Lzk3ODE1NjU5MjYyMTkuZG8+YF8KICAgICAgICJIZWxwIGZvciBXaW5kb3dzIFByb2dyYW1tZXJzIgogICAgICAgYnkgTWFyayBIYW1tb25kIGFuZCBBbmR5IFJvYmluc29uLCBPJ1JlaWxseSBNZWRpYSwgMjAwMCwKICAgICAgIElTQk4gMS01NjU5Mi02MjEtOApkaWZmIC0tZ2l0IGEvRG9jL3doYXRzbmV3LzIuMC5yc3QgYi9Eb2Mvd2hhdHNuZXcvMi4wLnJzdAppbmRleCA2NGI5MDhiLi4xMGJiMjllIDEwMDY0NAotLS0gYS9Eb2Mvd2hhdHNuZXcvMi4wLnJzdAorKysgYi9Eb2Mvd2hhdHNuZXcvMi4wLnJzdApAQCAtMTMwLDcgKzEzMCw3IEBACiBSZWFkIHRoZSByZXN0IG9mIFBFUCAxIGZvciB0aGUgZGV0YWlscyBvZiB0aGUgUEVQIGVkaXRvcmlhbCBwcm9jZXNzLCBzdHlsZSwgYW5kCiBmb3JtYXQuICBQRVBzIGFyZSBrZXB0IGluIHRoZSBQeXRob24gQ1ZTIHRyZWUgb24gU291cmNlRm9yZ2UsIHRob3VnaCB0aGV5J3JlIG5vdAogcGFydCBvZiB0aGUgUHl0aG9uIDIuMCBkaXN0cmlidXRpb24sIGFuZCBhcmUgYWxzbyBhdmFpbGFibGUgaW4gSFRNTCBmb3JtIGZyb20KLWh0dHA6Ly93d3cucHl0aG9uLm9yZy9wZXBzLy4gIEFzIG9mIFNlcHRlbWJlciAyMDAwLCB0aGVyZSBhcmUgMjUgUEVQUywgcmFuZ2luZworaHR0cHM6Ly93d3cucHl0aG9uLm9yZy9wZXBzLy4gIEFzIG9mIFNlcHRlbWJlciAyMDAwLCB0aGVyZSBhcmUgMjUgUEVQUywgcmFuZ2luZwogZnJvbSBQRVAgMjAxLCAiTG9ja3N0ZXAgSXRlcmF0aW9uIiwgdG8gUEVQIDIyNSwgIkVsZW1lbnR3aXNlL09iamVjdHdpc2UKIE9wZXJhdG9ycyIuCiAKQEAgLTU2Niw3ICs1NjYsNyBAQAogc2ltcGx5IGJlIHNpbGVudGx5IHN3YWxsb3dlZC4KIAogLi4gU3RhcnRpbmcgVVJMOgotLi4gaHR0cDovL3d3dy5weXRob24ub3JnL3BpcGVybWFpbC9weXRob24tZGV2LzIwMDAtQXByaWwvMDA0ODM0Lmh0bWwKKy4uIGh0dHBzOi8vd3d3LnB5dGhvbi5vcmcvcGlwZXJtYWlsL3B5dGhvbi1kZXYvMjAwMC1BcHJpbC8wMDQ4MzQuaHRtbAogCiBXb3JrIGhhcyBiZWVuIGRvbmUgb24gcG9ydGluZyBQeXRob24gdG8gNjQtYml0IFdpbmRvd3Mgb24gdGhlIEl0YW5pdW0gcHJvY2Vzc29yLAogbW9zdGx5IGJ5IFRyZW50IE1pY2sgb2YgQWN0aXZlU3RhdGUuICAoQ29uZnVzaW5nbHksIGBgc3lzLnBsYXRmb3JtYGAgaXMgc3RpbGwKQEAgLTEwMDMsNyArMTAwMyw3IEBACiAKIFRoZSBYTUwgU3BlY2lhbCBJbnRlcmVzdCBHcm91cCBoYXMgYmVlbiB3b3JraW5nIG9uIFhNTC1yZWxhdGVkIFB5dGhvbiBjb2RlIGZvciBhCiB3aGlsZS4gIEl0cyBjb2RlIGRpc3RyaWJ1dGlvbiwgY2FsbGVkIFB5WE1MLCBpcyBhdmFpbGFibGUgZnJvbSB0aGUgU0lHJ3MgV2ViCi1wYWdlcyBhdCBodHRwOi8vd3d3LnB5dGhvbi5vcmcvc2lncy94bWwtc2lnLy4gVGhlIFB5WE1MIGRpc3RyaWJ1dGlvbiBhbHNvIHVzZWQKK3BhZ2VzIGF0IGh0dHBzOi8vd3d3LnB5dGhvbi5vcmcvY29tbXVuaXR5L3NpZ3MvY3VycmVudC94bWwtc2lnLiBUaGUgUHlYTUwgZGlzdHJpYnV0aW9uIGFsc28gdXNlZAogdGhlIHBhY2thZ2UgbmFtZSBgYHhtbGBgLiAgSWYgeW91J3ZlIHdyaXR0ZW4gcHJvZ3JhbXMgdGhhdCB1c2VkIFB5WE1MLCB5b3UncmUKIHByb2JhYmx5IHdvbmRlcmluZyBhYm91dCBpdHMgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSAyLjAgOm1vZDpgeG1sYCBwYWNrYWdlLgogCkBAIC0xMTc0LDggKzExNzQsOCBAQAogCiAqIEluIHRoZSBlZGl0b3Igd2luZG93LCB0aGVyZSBpcyBub3cgYSBsaW5lL2NvbHVtbiBiYXIgYXQgdGhlIGJvdHRvbS4KIAotKiBUaHJlZSBuZXcga2V5c3Ryb2tlIGNvbW1hbmRzOiBDaGVjayBtb2R1bGUgKEFsdC1GNSksIEltcG9ydCBtb2R1bGUgKEY1KSBhbmQKLSAgUnVuIHNjcmlwdCAoQ3RybC1GNSkuCisqIFRocmVlIG5ldyBrZXlzdHJva2UgY29tbWFuZHM6IENoZWNrIG1vZHVsZSAoOmtiZDpgQWx0LUY1YCksIEltcG9ydCBtb2R1bGUgKDprYmQ6YEY1YCkgYW5kCisgIFJ1biBzY3JpcHQgKDprYmQ6YEN0cmwtRjVgKS4KIAogLi4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCmRpZmYgLS1naXQgYS9Eb2Mvd2hhdHNuZXcvMi4xLnJzdCBiL0RvYy93aGF0c25ldy8yLjEucnN0CmluZGV4IGIxYWI0OGUuLjZkZTViZjUgMTAwNjQ0Ci0tLSBhL0RvYy93aGF0c25ldy8yLjEucnN0CisrKyBiL0RvYy93aGF0c25ldy8yLjEucnN0CkBAIC0yMTksNyArMjE5LDcgQEAKIAogLi4gc2VlYWxzbzo6CiAKLSAgIDpwZXA6YDIwN2AgLSBSaWNoIENvbXBhcmlzaW9ucworICAgOnBlcDpgMjA3YCAtIFJpY2ggQ29tcGFyaXNvbnMKICAgICAgIFdyaXR0ZW4gYnkgR3VpZG8gdmFuIFJvc3N1bSwgaGVhdmlseSBiYXNlZCBvbiBlYXJsaWVyIHdvcmsgYnkgRGF2aWQgQXNjaGVyLCBhbmQKICAgICAgIGltcGxlbWVudGVkIGJ5IEd1aWRvIHZhbiBSb3NzdW0uCiAKQEAgLTU1NSwxNCArNTU1LDE0IEBACiBhbmQgZXhwZXJpbWVudCB3aXRoIHRoZW0uICBXaXRoIHRoZSByZXN1bHQgZXhwZXJpZW5jZSwgcGVyaGFwcyBpdCdsbCBiZSBwb3NzaWJsZQogdG8gZGVzaWduIGEgcmVhbGx5IGdvb2QgY2F0YWxvZyBhbmQgdGhlbiBidWlsZCBzdXBwb3J0IGZvciBpdCBpbnRvIFB5dGhvbiAyLjIuCiBGb3IgZXhhbXBsZSwgdGhlIERpc3R1dGlscyA6Y29tbWFuZDpgc2Rpc3RgIGFuZCA6Y29tbWFuZDpgYmRpc3RfXCpgIGNvbW1hbmRzCi1jb3VsZCBzdXBwb3J0IGEgOm9wdGlvbjpgdXBsb2FkYCBvcHRpb24gdGhhdCB3b3VsZCBhdXRvbWF0aWNhbGx5IHVwbG9hZCB5b3VyCitjb3VsZCBzdXBwb3J0IGFuIGBgdXBsb2FkYGAgb3B0aW9uIHRoYXQgd291bGQgYXV0b21hdGljYWxseSB1cGxvYWQgeW91cgogcGFja2FnZSB0byBhIGNhdGFsb2cgc2VydmVyLgogCiBZb3UgY2FuIHN0YXJ0IGNyZWF0aW5nIHBhY2thZ2VzIGNvbnRhaW5pbmcgOmZpbGU6YFBLRy1JTkZPYCBldmVuIGlmIHlvdSdyZSBub3QKIHVzaW5nIFB5dGhvbiAyLjEsIHNpbmNlIGEgbmV3IHJlbGVhc2Ugb2YgdGhlIERpc3R1dGlscyB3aWxsIGJlIG1hZGUgZm9yIHVzZXJzIG9mCiBlYXJsaWVyIFB5dGhvbiB2ZXJzaW9ucy4gIFZlcnNpb24gMS4wLjIgb2YgdGhlIERpc3R1dGlscyBpbmNsdWRlcyB0aGUgY2hhbmdlcwogZGVzY3JpYmVkIGluIFBFUCAyNDEsIGFzIHdlbGwgYXMgdmFyaW91cyBidWdmaXhlcyBhbmQgZW5oYW5jZW1lbnRzLiAgSXQgd2lsbCBiZQotYXZhaWxhYmxlIGZyb20gIHRoZSBEaXN0dXRpbHMgU0lHIGF0IGh0dHA6Ly93d3cucHl0aG9uLm9yZy9zaWdzL2Rpc3R1dGlscy1zaWcvLgorYXZhaWxhYmxlIGZyb20gIHRoZSBEaXN0dXRpbHMgU0lHIGF0IGh0dHBzOi8vd3d3LnB5dGhvbi5vcmcvc2lncy9kaXN0dXRpbHMtc2lnLy4KIAogCiAuLiBzZWVhbHNvOjoKQEAgLTczMSw3ICs3MzEsNyBAQAogICAgICAgICAgLi4uCiAKICAgRm9yIGEgZnVsbGVyIGRpc2N1c3Npb24gb2YgdGhlIGxpbmUgSS9PIGNoYW5nZXMsIHNlZSB0aGUgcHl0aG9uLWRldiBzdW1tYXJ5IGZvcgotICBKYW51YXJ5IDEtMTUsIDIwMDEgYXQgaHR0cDovL3d3dy5weXRob24ub3JnL2Rldi9zdW1tYXJ5LzIwMDEtMDEtMS8uCisgIEphbnVhcnkgMS0xNSwgMjAwMSBhdCBodHRwczovL3d3dy5weXRob24ub3JnL2Rldi9zdW1tYXJ5LzIwMDEtMDEtMS8uCiAKICogQSBuZXcgbWV0aG9kLCA6bWV0aDpgcG9waXRlbWAsIHdhcyBhZGRlZCB0byBkaWN0aW9uYXJpZXMgdG8gZW5hYmxlCiAgIGRlc3RydWN0aXZlbHkgaXRlcmF0aW5nIHRocm91Z2ggdGhlIGNvbnRlbnRzIG9mIGEgZGljdGlvbmFyeTsgdGhpcyBjYW4gYmUgZmFzdGVyCmRpZmYgLS1naXQgYS9Eb2Mvd2hhdHNuZXcvMi4yLnJzdCBiL0RvYy93aGF0c25ldy8yLjIucnN0CmluZGV4IDMxYjZkZjQuLmYzYzRhOTEgMTAwNjQ0Ci0tLSBhL0RvYy93aGF0c25ldy8yLjIucnN0CisrKyBiL0RvYy93aGF0c25ldy8yLjIucnN0CkBAIC0yNCw4ICsyNCw4IEBACiBUaGlzIGFydGljbGUgZG9lc24ndCBhdHRlbXB0IHRvIHByb3ZpZGUgYSBjb21wbGV0ZSBzcGVjaWZpY2F0aW9uIG9mIHRoZSBuZXcKIGZlYXR1cmVzLCBidXQgaW5zdGVhZCBwcm92aWRlcyBhIGNvbnZlbmllbnQgb3ZlcnZpZXcuICBGb3IgZnVsbCBkZXRhaWxzLCB5b3UKIHNob3VsZCByZWZlciB0byB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgUHl0aG9uIDIuMiwgc3VjaCBhcyB0aGUgYFB5dGhvbiBMaWJyYXJ5Ci1SZWZlcmVuY2UgPGh0dHA6Ly93d3cucHl0aG9uLm9yZy9kb2MvMi4yL2xpYi9saWIuaHRtbD5gXyBhbmQgdGhlIGBQeXRob24KLVJlZmVyZW5jZSBNYW51YWwgPGh0dHA6Ly93d3cucHl0aG9uLm9yZy9kb2MvMi4yL3JlZi9yZWYuaHRtbD5gXy4gIElmIHlvdSB3YW50IHRvCitSZWZlcmVuY2UgPGh0dHBzOi8vd3d3LnB5dGhvbi5vcmcvZG9jLzIuMi9saWIvbGliLmh0bWw+YF8gYW5kIHRoZSBgUHl0aG9uCitSZWZlcmVuY2UgTWFudWFsIDxodHRwczovL3d3dy5weXRob24ub3JnL2RvYy8yLjIvcmVmL3JlZi5odG1sPmBfLiAgSWYgeW91IHdhbnQgdG8KIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIGltcGxlbWVudGF0aW9uIGFuZCBkZXNpZ24gcmF0aW9uYWxlIGZvciBhIGNoYW5nZSwgcmVmZXIKIHRvIHRoZSBQRVAgZm9yIGEgcGFydGljdWxhciBuZXcgZmVhdHVyZS4KIApAQCAtMzk1LDcgKzM5NSw3IEBACiBvZiBhbiBleHBsYW5hdGlvbiB0byBzdGFydCB5b3UgcHJvZ3JhbW1pbmcsIGJ1dCBtYW55IGRldGFpbHMgaGF2ZSBiZWVuCiBzaW1wbGlmaWVkIG9yIGlnbm9yZWQuICBXaGVyZSBzaG91bGQgeW91IGdvIHRvIGdldCBhIG1vcmUgY29tcGxldGUgcGljdHVyZT8KIAotaHR0cDovL3d3dy5weXRob24ub3JnLzIuMi9kZXNjcmludHJvLmh0bWwgaXMgYSBsZW5ndGh5IHR1dG9yaWFsIGludHJvZHVjdGlvbiB0bworaHR0cHM6Ly93d3cucHl0aG9uLm9yZy8yLjIvZGVzY3JpbnRyby5odG1sIGlzIGEgbGVuZ3RoeSB0dXRvcmlhbCBpbnRyb2R1Y3Rpb24gdG8KIHRoZSBkZXNjcmlwdG9yIGZlYXR1cmVzLCB3cml0dGVuIGJ5IEd1aWRvIHZhbiBSb3NzdW0uIElmIG15IGRlc2NyaXB0aW9uIGhhcwogd2hldHRlZCB5b3VyIGFwcGV0aXRlLCBnbyByZWFkIHRoaXMgdHV0b3JpYWwgbmV4dCwgYmVjYXVzZSBpdCBnb2VzIGludG8gbXVjaAogbW9yZSBkZXRhaWwgYWJvdXQgdGhlIG5ldyBmZWF0dXJlcyB3aGlsZSBzdGlsbCByZW1haW5pbmcgcXVpdGUgZWFzeSB0byByZWFkLgpkaWZmIC0tZ2l0IGEvRG9jL3doYXRzbmV3LzIuMy5yc3QgYi9Eb2Mvd2hhdHNuZXcvMi4zLnJzdAppbmRleCBmMGU0OGQ5Li45ZDk5MDc0IDEwMDY0NAotLS0gYS9Eb2Mvd2hhdHNuZXcvMi4zLnJzdAorKysgYi9Eb2Mvd2hhdHNuZXcvMi4zLnJzdApAQCAtNDExLDcgKzQxMSw3IEBACiAKIEEgbmV3IGJ1aWx0LWluIGZ1bmN0aW9uLCA6ZnVuYzpgZW51bWVyYXRlYCwgd2lsbCBtYWtlIGNlcnRhaW4gbG9vcHMgYSBiaXQKIGNsZWFyZXIuICBgYGVudW1lcmF0ZSh0aGluZylgYCwgd2hlcmUgKnRoaW5nKiBpcyBlaXRoZXIgYW4gaXRlcmF0b3Igb3IgYQotc2VxdWVuY2UsIHJldHVybnMgYSBpdGVyYXRvciB0aGF0IHdpbGwgcmV0dXJuIGBgKDAsIHRoaW5nWzBdKWBgLCBgYCgxLAorc2VxdWVuY2UsIHJldHVybnMgYW4gaXRlcmF0b3IgdGhhdCB3aWxsIHJldHVybiBgYCgwLCB0aGluZ1swXSlgYCwgYGAoMSwKIHRoaW5nWzFdKWBgLCBgYCgyLCB0aGluZ1syXSlgYCwgYW5kIHNvIGZvcnRoLgogCiBBIGNvbW1vbiBpZGlvbSB0byBjaGFuZ2UgZXZlcnkgZWxlbWVudCBvZiBhIGxpc3QgbG9va3MgbGlrZSB0aGlzOjoKQEAgLTY1Nyw3ICs2NTcsNyBAQAogUnVubmluZyBgYHB5dGhvbiBzZXR1cC5weSByZWdpc3RlcmBgIHdpbGwgY29sbGVjdCB0aGUgbWV0YWRhdGEgZGVzY3JpYmluZyBhCiBwYWNrYWdlLCBzdWNoIGFzIGl0cyBuYW1lLCB2ZXJzaW9uLCBtYWludGFpbmVyLCBkZXNjcmlwdGlvbiwgJmMuLCBhbmQgc2VuZCBpdCB0bwogYSBjZW50cmFsIGNhdGFsb2cgc2VydmVyLiAgVGhlIHJlc3VsdGluZyBjYXRhbG9nIGlzIGF2YWlsYWJsZSBmcm9tCi1odHRwOi8vd3d3LnB5dGhvbi5vcmcvcHlwaS4KK2h0dHBzOi8vcHlwaS5weXRob24ub3JnL3B5cGkuCiAKIFRvIG1ha2UgdGhlIGNhdGFsb2cgYSBiaXQgbW9yZSB1c2VmdWwsIGEgbmV3IG9wdGlvbmFsICpjbGFzc2lmaWVycyoga2V5d29yZAogYXJndW1lbnQgaGFzIGJlZW4gYWRkZWQgdG8gdGhlIERpc3R1dGlscyA6ZnVuYzpgc2V0dXBgIGZ1bmN0aW9uLiAgQSBsaXN0IG9mCkBAIC0xMDgyLDkgKzEwODIsOSBAQAogICBDMyBhbGdvcml0aG0gYXMgZGVzY3JpYmVkIGluIHRoZSBwYXBlciBgIkEgTW9ub3RvbmljIFN1cGVyY2xhc3MgTGluZWFyaXphdGlvbgogICBmb3IgRHlsYW4iIDxodHRwOi8vd3d3LndlYmNvbS5jb20vaGFhaHIvZHlsYW4vbGluZWFyaXphdGlvbi1vb3BzbGE5Ni5odG1sPmBfLiBUbwogICB1bmRlcnN0YW5kIHRoZSBtb3RpdmF0aW9uIGZvciB0aGlzIGNoYW5nZSwgIHJlYWQgTWljaGVsZSBTaW1pb25hdG8ncyBhcnRpY2xlCi0gIGAiUHl0aG9uIDIuMyBNZXRob2QgUmVzb2x1dGlvbiBPcmRlciIgPGh0dHA6Ly93d3cucHl0aG9uLm9yZy8yLjMvbXJvLmh0bWw+YF8sIG9yCisgIGAiUHl0aG9uIDIuMyBNZXRob2QgUmVzb2x1dGlvbiBPcmRlciIgPGh0dHBzOi8vd3d3LnB5dGhvbi5vcmcvMi4zL21yby5odG1sPmBfLCBvcgogICByZWFkIHRoZSB0aHJlYWQgb24gcHl0aG9uLWRldiBzdGFydGluZyB3aXRoIHRoZSBtZXNzYWdlIGF0Ci0gIGh0dHA6Ly9tYWlsLnB5dGhvbi5vcmcvcGlwZXJtYWlsL3B5dGhvbi1kZXYvMjAwMi1PY3RvYmVyLzAyOTAzNS5odG1sLiBTYW11ZWxlCisgIGh0dHBzOi8vbWFpbC5weXRob24ub3JnL3BpcGVybWFpbC9weXRob24tZGV2LzIwMDItT2N0b2Jlci8wMjkwMzUuaHRtbC4gU2FtdWVsZQogICBQZWRyb25pIGZpcnN0IHBvaW50ZWQgb3V0IHRoZSBwcm9ibGVtIGFuZCBhbHNvIGltcGxlbWVudGVkIHRoZSBmaXggYnkgY29kaW5nIHRoZQogICBDMyBhbGdvcml0aG0uCiAKQEAgLTEzMzAsNyArMTMzMCw3IEBACiAgIChDb250cmlidXRlZCBieSBLZXZpbiBPJ0Nvbm5vci4pCiAKICogVGhlIElETEUgaW50ZWdyYXRlZCBkZXZlbG9wbWVudCBlbnZpcm9ubWVudCBoYXMgYmVlbiB1cGRhdGVkIHVzaW5nIHRoZSBjb2RlCi0gIGZyb20gdGhlIElETEVmb3JrIHByb2plY3QgKGh0dHA6Ly9pZGxlZm9yay5zZi5uZXQpLiAgVGhlIG1vc3Qgbm90YWJsZSBmZWF0dXJlIGlzCisgIGZyb20gdGhlIElETEVmb3JrIHByb2plY3QgKGh0dHA6Ly9pZGxlZm9yay5zb3VyY2Vmb3JnZS5uZXQpLiAgVGhlIG1vc3Qgbm90YWJsZSBmZWF0dXJlIGlzCiAgIHRoYXQgdGhlIGNvZGUgYmVpbmcgZGV2ZWxvcGVkIGlzIG5vdyBleGVjdXRlZCBpbiBhIHN1YnByb2Nlc3MsIG1lYW5pbmcgdGhhdAogICB0aGVyZSdzIG5vIGxvbmdlciBhbnkgbmVlZCBmb3IgbWFudWFsIGBgcmVsb2FkKClgYCBvcGVyYXRpb25zLiBJRExFJ3MgY29yZSBjb2RlCiAgIGhhcyBiZWVuIGluY29ycG9yYXRlZCBpbnRvIHRoZSBzdGFuZGFyZCBsaWJyYXJ5IGFzIHRoZSA6bW9kOmBpZGxlbGliYCBwYWNrYWdlLgpAQCAtMTU2NCw3ICsxNTY0LDcgQEAKICAgdG8gdGhlIGNvcnJlY3QgdGhyZWFkLCBhbmQgd2FpdGluZyBmb3IgdGhlIHJlc3VsdHMuICBPdGhlciBpbnRlcmZhY2VzIGNhbid0IGJlCiAgIGhhbmRsZWQgYXV0b21hdGljYWxseSBidXQgOm1vZDpgVGtpbnRlcmAgd2lsbCBub3cgcmFpc2UgYW4gZXhjZXB0aW9uIG9uIHN1Y2ggYW4KICAgYWNjZXNzIHNvIHRoYXQgeW91IGNhbiBhdCBsZWFzdCBmaW5kIG91dCBhYm91dCB0aGUgcHJvYmxlbS4gIFNlZQotICBodHRwOi8vbWFpbC5weXRob24ub3JnL3BpcGVybWFpbC9weXRob24tZGV2LzIwMDItRGVjZW1iZXIvMDMxMTA3Lmh0bWwgZm9yIGEgbW9yZQorICBodHRwczovL21haWwucHl0aG9uLm9yZy9waXBlcm1haWwvcHl0aG9uLWRldi8yMDAyLURlY2VtYmVyLzAzMTEwNy5odG1sIGZvciBhIG1vcmUKICAgZGV0YWlsZWQgZXhwbGFuYXRpb24gb2YgdGhpcyBjaGFuZ2UuICAoSW1wbGVtZW50ZWQgYnkgTWFydGluIHZvbiBMw7Z3aXMuKQogCiAqIENhbGxpbmcgVGNsIG1ldGhvZHMgdGhyb3VnaCA6bW9kOmBfdGtpbnRlcmAgbm8gbG9uZ2VyICByZXR1cm5zIG9ubHkgc3RyaW5ncy4KQEAgLTE4NTgsNyArMTg1OCw3IEBACiAKIC4uIHNlZWFsc286OgogCi0gICBodHRwOi8vc3ZuLnB5dGhvbi5vcmcvdmlldy9weXRob24vdHJ1bmsvT2JqZWN0cy9vYm1hbGxvYy5jCisgICBodHRwczovL3N2bi5weXRob24ub3JnL3ZpZXcvcHl0aG9uL3RydW5rL09iamVjdHMvb2JtYWxsb2MuYwogICAgICAgRm9yIHRoZSBmdWxsIGRldGFpbHMgb2YgdGhlIHB5bWFsbG9jIGltcGxlbWVudGF0aW9uLCBzZWUgdGhlIGNvbW1lbnRzIGF0CiAgICAgICB0aGUgdG9wIG9mIHRoZSBmaWxlIDpmaWxlOmBPYmplY3RzL29ibWFsbG9jLmNgIGluIHRoZSBQeXRob24gc291cmNlIGNvZGUuCiAgICAgICBUaGUgYWJvdmUgbGluayBwb2ludHMgdG8gdGhlIGZpbGUgd2l0aGluIHRoZSBweXRob24ub3JnIFNWTiBicm93c2VyLgpkaWZmIC0tZ2l0IGEvRG9jL3doYXRzbmV3LzIuNC5yc3QgYi9Eb2Mvd2hhdHNuZXcvMi40LnJzdAppbmRleCA1OTczZjNiLi41NjllNWU5IDEwMDY0NAotLS0gYS9Eb2Mvd2hhdHNuZXcvMi40LnJzdAorKysgYi9Eb2Mvd2hhdHNuZXcvMi40LnJzdApAQCAtMzM3LDcgKzMzNyw3IEBACiAgICAgICB3cm90ZSBwYXRjaGVzIGltcGxlbWVudGluZyBmdW5jdGlvbiBkZWNvcmF0b3JzLCBidXQgdGhlIG9uZSB0aGF0IHdhcyBhY3R1YWxseQogICAgICAgY2hlY2tlZCBpbiB3YXMgcGF0Y2ggIzk3OTcyOCwgd3JpdHRlbiBieSBNYXJrIFJ1c3NlbGwuCiAKLSAgIGh0dHA6Ly93d3cucHl0aG9uLm9yZy9tb2luL1B5dGhvbkRlY29yYXRvckxpYnJhcnkKKyAgIGh0dHBzOi8vd3d3LnB5dGhvbi5vcmcvbW9pbi9QeXRob25EZWNvcmF0b3JMaWJyYXJ5CiAgICAgICBUaGlzIFdpa2kgcGFnZSBjb250YWlucyBzZXZlcmFsIGV4YW1wbGVzIG9mIGRlY29yYXRvcnMuCiAKIC4uID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL0RvYy93aGF0c25ldy8yLjUucnN0IGIvRG9jL3doYXRzbmV3LzIuNS5yc3QKaW5kZXggNjgzNjMwYS4uY2I5MmUwOCAxMDA2NDQKLS0tIGEvRG9jL3doYXRzbmV3LzIuNS5yc3QKKysrIGIvRG9jL3doYXRzbmV3LzIuNS5yc3QKQEAgLTM5LDcgKzM5LDcgQEAKIFRoaXMgYXJ0aWNsZSBkb2Vzbid0IHRyeSB0byBiZSBhIGNvbXBsZXRlIHNwZWNpZmljYXRpb24gb2YgdGhlIG5ldyBmZWF0dXJlczsKIGluc3RlYWQgY2hhbmdlcyBhcmUgYnJpZWZseSBpbnRyb2R1Y2VkIHVzaW5nIGhlbHBmdWwgZXhhbXBsZXMuICBGb3IgZnVsbAogZGV0YWlscywgeW91IHNob3VsZCBhbHdheXMgcmVmZXIgdG8gdGhlIGRvY3VtZW50YXRpb24gZm9yIFB5dGhvbiAyLjUgYXQKLWh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcuIElmIHlvdSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIGltcGxlbWVudGF0aW9uCitodHRwczovL2RvY3MucHl0aG9uLm9yZy4gSWYgeW91IHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgY29tcGxldGUgaW1wbGVtZW50YXRpb24KIGFuZCBkZXNpZ24gcmF0aW9uYWxlLCByZWZlciB0byB0aGUgUEVQIGZvciBhIHBhcnRpY3VsYXIgbmV3IGZlYXR1cmUuCiAKIENvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGVycm9yIHJlcG9ydHMgZm9yIHRoaXMgZG9jdW1lbnQgYXJlIHdlbGNvbWU7IHBsZWFzZQpAQCAtMjI5LDcgKzIyOSw3IEBACiAgICAgICAgICkKIAogQW5vdGhlciBuZXcgZW5oYW5jZW1lbnQgdG8gdGhlIFB5dGhvbiBwYWNrYWdlIGluZGV4IGF0Ci1odHRwOi8vY2hlZXNlc2hvcC5weXRob24ub3JnIGlzIHN0b3Jpbmcgc291cmNlIGFuZCBiaW5hcnkgYXJjaGl2ZXMgZm9yIGEKK2h0dHBzOi8vcHlwaS5weXRob24ub3JnIGlzIHN0b3Jpbmcgc291cmNlIGFuZCBiaW5hcnkgYXJjaGl2ZXMgZm9yIGEKIHBhY2thZ2UuICBUaGUgbmV3IDpjb21tYW5kOmB1cGxvYWRgIERpc3R1dGlscyBjb21tYW5kIHdpbGwgdXBsb2FkIGEgcGFja2FnZSB0bwogdGhlIHJlcG9zaXRvcnkuCiAKQEAgLTgyNyw3ICs4MjcsNyBAQAogVGhpcyByZWFycmFuZ2VtZW50IHdhcyBkb25lIGJlY2F1c2UgcGVvcGxlIG9mdGVuIHdhbnQgdG8gY2F0Y2ggYWxsIGV4Y2VwdGlvbnMKIHRoYXQgaW5kaWNhdGUgcHJvZ3JhbSBlcnJvcnMuICA6ZXhjOmBLZXlib2FyZEludGVycnVwdGAgYW5kIDpleGM6YFN5c3RlbUV4aXRgCiBhcmVuJ3QgZXJyb3JzLCB0aG91Z2gsIGFuZCB1c3VhbGx5IHJlcHJlc2VudCBhbiBleHBsaWNpdCBhY3Rpb24gc3VjaCBhcyB0aGUgdXNlcgotaGl0dGluZyBDb250cm9sLUMgb3IgY29kZSBjYWxsaW5nIDpmdW5jOmBzeXMuZXhpdGAuICBBIGJhcmUgYGBleGNlcHQ6YGAgd2lsbAoraGl0dGluZyA6a2JkOmBDb250cm9sLUNgIG9yIGNvZGUgY2FsbGluZyA6ZnVuYzpgc3lzLmV4aXRgLiAgQSBiYXJlIGBgZXhjZXB0OmBgIHdpbGwKIGNhdGNoIGFsbCBleGNlcHRpb25zLCBzbyB5b3UgY29tbW9ubHkgbmVlZCB0byBsaXN0IDpleGM6YEtleWJvYXJkSW50ZXJydXB0YCBhbmQKIDpleGM6YFN5c3RlbUV4aXRgIGluIG9yZGVyIHRvIHJlLXJhaXNlIHRoZW0uICBUaGUgdXN1YWwgcGF0dGVybiBpczo6CiAKQEAgLTIxMzAsNyArMjEzMCw3IEBACiAgIHN1Y2ggYXMgUHlDb24uCiAKICAgLi4gTGlzdCBvZiBuYW1lcyB0YWtlbiBmcm9tIEplcmVteSdzIHB5dGhvbi1kZXYgcG9zdCBhdAotICAuLiBodHRwOi8vbWFpbC5weXRob24ub3JnL3BpcGVybWFpbC9weXRob24tZGV2LzIwMDUtT2N0b2Jlci8wNTc1MDAuaHRtbAorICAuLiBodHRwczovL21haWwucHl0aG9uLm9yZy9waXBlcm1haWwvcHl0aG9uLWRldi8yMDA1LU9jdG9iZXIvMDU3NTAwLmh0bWwKIAogKiBFdmFuIEpvbmVzJ3MgcGF0Y2ggdG8gb2JtYWxsb2MsIGZpcnN0IGRlc2NyaWJlZCBpbiBhIHRhbGsgYXQgUHlDb24gREMgMjAwNSwKICAgd2FzIGFwcGxpZWQuICBQeXRob24gMi40IGFsbG9jYXRlZCBzbWFsbCBvYmplY3RzIGluIDI1Nkstc2l6ZWQgYXJlbmFzLCBidXQgbmV2ZXIKZGlmZiAtLWdpdCBhL0RvYy93aGF0c25ldy8yLjYucnN0IGIvRG9jL3doYXRzbmV3LzIuNi5yc3QKaW5kZXggM2FlNmM3Ny4uZTc2MzI2NSAxMDA2NDQKLS0tIGEvRG9jL3doYXRzbmV3LzIuNi5yc3QKKysrIGIvRG9jL3doYXRzbmV3LzIuNi5yc3QKQEAgLTE2NCw3ICsxNjQsNyBAQAogdG8gYWRtaW5pc3RlciBpdCBhbmQgYSBzZXJ2ZXIgdG8gaG9zdCBpdC4KIAogQWZ0ZXIgcG9zdGluZyBhIGNhbGwgZm9yIHZvbHVudGVlcnMsIGEgbmV3IFJvdW5kdXAgaW5zdGFsbGF0aW9uIHdhcwotc2V0IHVwIGF0IGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcuICBPbmUgaW5zdGFsbGF0aW9uIG9mIFJvdW5kdXAgY2FuCitzZXQgdXAgYXQgaHR0cHM6Ly9idWdzLnB5dGhvbi5vcmcuICBPbmUgaW5zdGFsbGF0aW9uIG9mIFJvdW5kdXAgY2FuCiBob3N0IG11bHRpcGxlIHRyYWNrZXJzLCBhbmQgdGhpcyBzZXJ2ZXIgbm93IGFsc28gaG9zdHMgaXNzdWUgdHJhY2tlcnMKIGZvciBKeXRob24gYW5kIGZvciB0aGUgUHl0aG9uIHdlYiBzaXRlLiAgSXQgd2lsbCBzdXJlbHkgZmluZAogb3RoZXIgdXNlcyBpbiB0aGUgZnV0dXJlLiAgV2hlcmUgcG9zc2libGUsCkBAIC0xODEsNyArMTgxLDcgQEAKIAogLi4gc2VlYWxzbzo6CiAKLSAgaHR0cDovL2J1Z3MucHl0aG9uLm9yZworICBodHRwczovL2J1Z3MucHl0aG9uLm9yZwogICAgIFRoZSBQeXRob24gYnVnIHRyYWNrZXIuCiAKICAgaHR0cDovL2J1Z3Muanl0aG9uLm9yZzoKQEAgLTIyNywxOCArMjI3LDE4IEBACiAKIFNwaGlueCBpcyBhIHN0YW5kYWxvbmUgcGFja2FnZSB0aGF0IGNhbiBiZSB1c2VkIGZvciB3cml0aW5nLCBhbmQKIGFsbW9zdCB0d28gZG96ZW4gb3RoZXIgcHJvamVjdHMKLShgbGlzdGVkIG9uIHRoZSBTcGhpbnggd2ViIHNpdGUgPGh0dHA6Ly9zcGhpbngucG9jb28ub3JnL2V4YW1wbGVzLmh0bWw+YF9fKQorKGBsaXN0ZWQgb24gdGhlIFNwaGlueCB3ZWIgc2l0ZSA8aHR0cDovL3NwaGlueC1kb2Mub3JnL2V4YW1wbGVzLmh0bWw+YF9fKQogaGF2ZSBhZG9wdGVkIFNwaGlueCBhcyB0aGVpciBkb2N1bWVudGF0aW9uIHRvb2wuCiAKIC4uIHNlZWFsc286OgogCi0gICBgRG9jdW1lbnRpbmcgUHl0aG9uIDxodHRwOi8vZG9jcy5weXRob24ub3JnL2Rldmd1aWRlL2RvY3VtZW50aW5nLmh0bWw+YF9fCisgICBgRG9jdW1lbnRpbmcgUHl0aG9uIDxodHRwczovL2RvY3MucHl0aG9uLm9yZy9kZXZndWlkZS9kb2N1bWVudGluZy5odG1sPmBfXwogICAgICAgIERlc2NyaWJlcyBob3cgdG8gd3JpdGUgZm9yIFB5dGhvbidzIGRvY3VtZW50YXRpb24uCiAKLSAgIGBTcGhpbnggPGh0dHA6Ly9zcGhpbngucG9jb28ub3JnLz5gX18KKyAgIGBTcGhpbnggPGh0dHA6Ly9zcGhpbngtZG9jLm9yZy8+YF9fCiAgICAgIERvY3VtZW50YXRpb24gYW5kIGNvZGUgZm9yIHRoZSBTcGhpbnggdG9vbGNoYWluLgogCi0gICBgRG9jdXRpbHMgPGh0dHA6Ly9kb2N1dGlscy5zZi5uZXQ+YF9fCisgICBgRG9jdXRpbHMgPGh0dHA6Ly9kb2N1dGlscy5zb3VyY2Vmb3JnZS5uZXQ+YF9fCiAgICAgIFRoZSB1bmRlcmx5aW5nIHJlU3RydWN0dXJlZFRleHQgcGFyc2VyIGFuZCB0b29sc2V0LgogCiAKQEAgLTIzNjMsNyArMjM2Myw3IEBACiAgIG5lZ290aWF0aW9uIGl0c2VsZi4gIChQYXRjaCBjb250cmlidXRlZCBieSBCaWxsIEZlbm5lcjsKICAgOmlzc3VlOmA4Mjk5NTFgLikKIAotKiBUaGUgOm1vZDpgc29ja2V0YCBtb2R1bGUgbm93IHN1cHBvcnRzIFRJUEMgKGh0dHA6Ly90aXBjLnNmLm5ldCksCisqIFRoZSA6bW9kOmBzb2NrZXRgIG1vZHVsZSBub3cgc3VwcG9ydHMgVElQQyAoaHR0cDovL3RpcGMuc291cmNlZm9yZ2UubmV0LyksCiAgIGEgaGlnaC1wZXJmb3JtYW5jZSBub24tSVAtYmFzZWQgcHJvdG9jb2wgZGVzaWduZWQgZm9yIHVzZSBpbiBjbHVzdGVyZWQKICAgZW52aXJvbm1lbnRzLiAgVElQQyBhZGRyZXNzZXMgYXJlIDQtIG9yIDUtdHVwbGVzLgogICAoQ29udHJpYnV0ZWQgYnkgQWxiZXJ0byBCZXJ0b2dsaTsgOmlzc3VlOmAxNjQ2YC4pCmRpZmYgLS1naXQgYS9Eb2Mvd2hhdHNuZXcvMi43LnJzdCBiL0RvYy93aGF0c25ldy8yLjcucnN0CmluZGV4IGIyNmM5YjIuLjM5NjZjYjQgMTAwNjQ0Ci0tLSBhL0RvYy93aGF0c25ldy8yLjcucnN0CisrKyBiL0RvYy93aGF0c25ldy8yLjcucnN0CkBAIC03LDcgKzcsNiBAQAogLi4gIGh5cGVybGluayBhbGwgdGhlIG1ldGhvZHMgJiBmdW5jdGlvbnMuCiAKIC4uIFRfU1RSSU5HX0lOUExBQ0Ugbm90IGRlc2NyaWJlZCBpbiBtYWluIGRvY3MKLS4uICJGb3JtYXQgU3RyaW5nIFN5bnRheCIgaW4gc3RyaW5nLnJzdCBjb3VsZCB1c2UgbWFueSBtb3JlIGV4YW1wbGVzLgogCiAuLiAkSWQkCiAgICBSdWxlcyBmb3IgbWFpbnRlbmFuY2U6CkBAIC01MCwxNyArNDksMTYgQEAKICAgIFRoaXMgc2F2ZXMgdGhlIG1haW50YWluZXIgc29tZSBlZmZvcnQgZ29pbmcgdGhyb3VnaCB0aGUgU1ZOIGxvZ3MKICAgIHdoZW4gcmVzZWFyY2hpbmcgYSBjaGFuZ2UuCiAKLVRoaXMgYXJ0aWNsZSBleHBsYWlucyB0aGUgbmV3IGZlYXR1cmVzIGluIFB5dGhvbiAyLjcuICBUaGUgZmluYWwKLXJlbGVhc2Ugb2YgMi43IGlzIGN1cnJlbnRseSBzY2hlZHVsZWQgZm9yIEp1bHkgMjAxMDsgdGhlIGRldGFpbGVkCi1zY2hlZHVsZSBpcyBkZXNjcmliZWQgaW4gOnBlcDpgMzczYC4KK1RoaXMgYXJ0aWNsZSBleHBsYWlucyB0aGUgbmV3IGZlYXR1cmVzIGluIFB5dGhvbiAyLjcuICBQeXRob24gMi43IHdhcyByZWxlYXNlZAorb24gSnVseSAzLCAyMDEwLgogCiBOdW1lcmljIGhhbmRsaW5nIGhhcyBiZWVuIGltcHJvdmVkIGluIG1hbnkgd2F5cywgZm9yIGJvdGgKLWZsb2F0aW5nLXBvaW50IG51bWJlcnMgYW5kIGZvciB0aGUgOmNsYXNzOmBEZWNpbWFsYCBjbGFzcy4gIFRoZXJlIGFyZQotc29tZSB1c2VmdWwgYWRkaXRpb25zIHRvIHRoZSBzdGFuZGFyZCBsaWJyYXJ5LCBzdWNoIGFzIGEgZ3JlYXRseQotZW5oYW5jZWQgOm1vZDpgdW5pdHRlc3RgIG1vZHVsZSwgdGhlIDptb2Q6YGFyZ3BhcnNlYCBtb2R1bGUgZm9yCi1wYXJzaW5nIGNvbW1hbmQtbGluZSBvcHRpb25zLCBjb252ZW5pZW50IG9yZGVyZWQtZGljdGlvbmFyeSBhbmQKLTpjbGFzczpgQ291bnRlcmAgY2xhc3NlcyBpbiB0aGUgOm1vZDpgY29sbGVjdGlvbnNgIG1vZHVsZSwgYW5kIG1hbnkKLW90aGVyIGltcHJvdmVtZW50cy4KK2Zsb2F0aW5nLXBvaW50IG51bWJlcnMgYW5kIGZvciB0aGUgOmNsYXNzOmB+ZGVjaW1hbC5EZWNpbWFsYCBjbGFzcy4KK1RoZXJlIGFyZSBzb21lIHVzZWZ1bCBhZGRpdGlvbnMgdG8gdGhlIHN0YW5kYXJkIGxpYnJhcnksIHN1Y2ggYXMgYQorZ3JlYXRseSBlbmhhbmNlZCA6bW9kOmB1bml0dGVzdGAgbW9kdWxlLCB0aGUgOm1vZDpgYXJncGFyc2VgIG1vZHVsZQorZm9yIHBhcnNpbmcgY29tbWFuZC1saW5lIG9wdGlvbnMsIGNvbnZlbmllbnQgOmNsYXNzOmB+Y29sbGVjdGlvbnMuT3JkZXJlZERpY3RgCithbmQgOmNsYXNzOmB+Y29sbGVjdGlvbnMuQ291bnRlcmAgY2xhc3NlcyBpbiB0aGUgOm1vZDpgY29sbGVjdGlvbnNgIG1vZHVsZSwKK2FuZCBtYW55IG90aGVyIGltcHJvdmVtZW50cy4KIAogUHl0aG9uIDIuNyBpcyBwbGFubmVkIHRvIGJlIHRoZSBsYXN0IG9mIHRoZSAyLnggcmVsZWFzZXMsIHNvIHdlIHdvcmtlZAogb24gbWFraW5nIGl0IGEgZ29vZCByZWxlYXNlIGZvciB0aGUgbG9uZyB0ZXJtLiAgVG8gaGVscCB3aXRoIHBvcnRpbmcKQEAgLTcwLDkgKzY4LDkgQEAKIFRoaXMgYXJ0aWNsZSBkb2Vzbid0IGF0dGVtcHQgdG8gcHJvdmlkZSBhIGNvbXBsZXRlIHNwZWNpZmljYXRpb24gb2YKIHRoZSBuZXcgZmVhdHVyZXMsIGJ1dCBpbnN0ZWFkIHByb3ZpZGVzIGEgY29udmVuaWVudCBvdmVydmlldy4gIEZvcgogZnVsbCBkZXRhaWxzLCB5b3Ugc2hvdWxkIHJlZmVyIHRvIHRoZSBkb2N1bWVudGF0aW9uIGZvciBQeXRob24gMi43IGF0Ci1odHRwOi8vZG9jcy5weXRob24ub3JnLiBJZiB5b3Ugd2FudCB0byB1bmRlcnN0YW5kIHRoZSByYXRpb25hbGUgZm9yCitodHRwczovL2RvY3MucHl0aG9uLm9yZy4gSWYgeW91IHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgcmF0aW9uYWxlIGZvcgogdGhlIGRlc2lnbiBhbmQgaW1wbGVtZW50YXRpb24sIHJlZmVyIHRvIHRoZSBQRVAgZm9yIGEgcGFydGljdWxhciBuZXcKLWZlYXR1cmUgb3IgdGhlIGlzc3VlIG9uIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcgaW4gd2hpY2ggYSBjaGFuZ2Ugd2FzCitmZWF0dXJlIG9yIHRoZSBpc3N1ZSBvbiBodHRwczovL2J1Z3MucHl0aG9uLm9yZyBpbiB3aGljaCBhIGNoYW5nZSB3YXMKIGRpc2N1c3NlZC4gIFdoZW5ldmVyIHBvc3NpYmxlLCAiV2hhdCdzIE5ldyBpbiBQeXRob24iIGxpbmtzIHRvIHRoZQogYnVnL3BhdGNoIGl0ZW0gZm9yIGVhY2ggY2hhbmdlLgogCkBAIC04MSw0NSArNzksOTEgQEAKIFRoZSBGdXR1cmUgZm9yIFB5dGhvbiAyLngKID09PT09PT09PT09PT09PT09PT09PT09PT0KIAotUHl0aG9uIDIuNyBpcyBpbnRlbmRlZCB0byBiZSB0aGUgbGFzdCBtYWpvciByZWxlYXNlIGluIHRoZSAyLnggc2VyaWVzLgotVGhlIFB5dGhvbiBtYWludGFpbmVycyBhcmUgcGxhbm5pbmcgdG8gZm9jdXMgdGhlaXIgZnV0dXJlIGVmZm9ydHMgb24KLXRoZSBQeXRob24gMy54IHNlcmllcy4KK1B5dGhvbiAyLjcgaXMgdGhlIGxhc3QgbWFqb3IgcmVsZWFzZSBpbiB0aGUgMi54IHNlcmllcywgYXMgdGhlIFB5dGhvbgorbWFpbnRhaW5lcnMgaGF2ZSBzaGlmdGVkIHRoZSBmb2N1cyBvZiB0aGVpciBuZXcgZmVhdHVyZSBkZXZlbG9wbWVudCBlZmZvcnRzCit0byB0aGUgUHl0aG9uIDMueCBzZXJpZXMuIFRoaXMgbWVhbnMgdGhhdCB3aGlsZSBQeXRob24gMiBjb250aW51ZXMgdG8KK3JlY2VpdmUgYnVnIGZpeGVzLCBhbmQgdG8gYmUgdXBkYXRlZCB0byBidWlsZCBjb3JyZWN0bHkgb24gbmV3IGhhcmR3YXJlIGFuZAordmVyc2lvbnMgb2Ygc3VwcG9ydGVkIG9wZXJhdGVkIHN5c3RlbXMsIHRoZXJlIHdpbGwgYmUgbm8gbmV3IGZ1bGwgZmVhdHVyZQorcmVsZWFzZXMgZm9yIHRoZSBsYW5ndWFnZSBvciBzdGFuZGFyZCBsaWJyYXJ5LgogCi1UaGlzIG1lYW5zIHRoYXQgMi43IHdpbGwgcmVtYWluIGluIHBsYWNlIGZvciBhIGxvbmcgdGltZSwgcnVubmluZwotcHJvZHVjdGlvbiBzeXN0ZW1zIHRoYXQgaGF2ZSBub3QgYmVlbiBwb3J0ZWQgdG8gUHl0aG9uIDMueC4KLVR3byBjb25zZXF1ZW5jZXMgb2YgdGhlIGxvbmctdGVybSBzaWduaWZpY2FuY2Ugb2YgMi43IGFyZToKK0hvd2V2ZXIsIHdoaWxlIHRoZXJlIGlzIGEgbGFyZ2UgY29tbW9uIHN1YnNldCBiZXR3ZWVuIFB5dGhvbiAyLjcgYW5kIFB5dGhvbgorMywgYW5kIG1hbnkgb2YgdGhlIGNoYW5nZXMgaW52b2x2ZWQgaW4gbWlncmF0aW5nIHRvIHRoYXQgY29tbW9uIHN1YnNldCwgb3IKK2RpcmVjdGx5IHRvIFB5dGhvbiAzLCBjYW4gYmUgc2FmZWx5IGF1dG9tYXRlZCwgc29tZSBvdGhlciBjaGFuZ2VzIChub3RhYmx5Cit0aG9zZSBhc3NvY2lhdGVkIHdpdGggVW5pY29kZSBoYW5kbGluZykgbWF5IHJlcXVpcmUgY2FyZWZ1bCBjb25zaWRlcmF0aW9uLAorYW5kIHByZWZlcmFibHkgcm9idXN0IGF1dG9tYXRlZCByZWdyZXNzaW9uIHRlc3Qgc3VpdGVzLCB0byBtaWdyYXRlCitlZmZlY3RpdmVseS4KIAotKiBJdCdzIHZlcnkgbGlrZWx5IHRoZSAyLjcgcmVsZWFzZSB3aWxsIGhhdmUgYSBsb25nZXIgcGVyaW9kIG9mCi0gIG1haW50ZW5hbmNlIGNvbXBhcmVkIHRvIGVhcmxpZXIgMi54IHZlcnNpb25zLiAgUHl0aG9uIDIuNyB3aWxsCi0gIGNvbnRpbnVlIHRvIGJlIG1haW50YWluZWQgd2hpbGUgdGhlIHRyYW5zaXRpb24gdG8gMy54IGNvbnRpbnVlcywgYW5kCi0gIHRoZSBkZXZlbG9wZXJzIGFyZSBwbGFubmluZyB0byBzdXBwb3J0IFB5dGhvbiAyLjcgd2l0aCBidWctZml4Ci0gIHJlbGVhc2VzIGJleW9uZCB0aGUgdHlwaWNhbCB0d28geWVhcnMuCitUaGlzIG1lYW5zIHRoYXQgUHl0aG9uIDIuNyB3aWxsIHJlbWFpbiBpbiBwbGFjZSBmb3IgYSBsb25nIHRpbWUsIHByb3ZpZGluZyBhCitzdGFibGUgYW5kIHN1cHBvcnRlZCBiYXNlIHBsYXRmb3JtIGZvciBwcm9kdWN0aW9uIHN5c3RlbXMgdGhhdCBoYXZlIG5vdCB5ZXQKK2JlZW4gcG9ydGVkIHRvIFB5dGhvbiAzLiBUaGUgZnVsbCBleHBlY3RlZCBsaWZlY3ljbGUgb2YgdGhlIFB5dGhvbiAyLjcKK3NlcmllcyBpcyBkZXRhaWxlZCBpbiA6cGVwOmAzNzNgLgogCi0qIEEgcG9saWN5IGRlY2lzaW9uIHdhcyBtYWRlIHRvIHNpbGVuY2Ugd2FybmluZ3Mgb25seSBvZiBpbnRlcmVzdCB0bwotICBkZXZlbG9wZXJzLiAgOmV4YzpgRGVwcmVjYXRpb25XYXJuaW5nYCBhbmQgaXRzCi0gIGRlc2NlbmRhbnRzIGFyZSBub3cgaWdub3JlZCB1bmxlc3Mgb3RoZXJ3aXNlIHJlcXVlc3RlZCwgcHJldmVudGluZwotICB1c2VycyBmcm9tIHNlZWluZyB3YXJuaW5ncyB0cmlnZ2VyZWQgYnkgYW4gYXBwbGljYXRpb24uICBUaGlzIGNoYW5nZQotICB3YXMgYWxzbyBtYWRlIGluIHRoZSBicmFuY2ggdGhhdCB3aWxsIGJlY29tZSBQeXRob24gMy4yLiAoRGlzY3Vzc2VkCi0gIG9uIHN0ZGxpYi1zaWcgYW5kIGNhcnJpZWQgb3V0IGluIDppc3N1ZTpgNzMxOWAuKQorU29tZSBrZXkgY29uc2VxdWVuY2VzIG9mIHRoZSBsb25nLXRlcm0gc2lnbmlmaWNhbmNlIG9mIDIuNyBhcmU6CiAKLSAgSW4gcHJldmlvdXMgcmVsZWFzZXMsIDpleGM6YERlcHJlY2F0aW9uV2FybmluZ2AgbWVzc2FnZXMgd2VyZQotICBlbmFibGVkIGJ5IGRlZmF1bHQsIHByb3ZpZGluZyBQeXRob24gZGV2ZWxvcGVycyB3aXRoIGEgY2xlYXIKLSAgaW5kaWNhdGlvbiBvZiB3aGVyZSB0aGVpciBjb2RlIG1heSBicmVhayBpbiBhIGZ1dHVyZSBtYWpvciB2ZXJzaW9uCi0gIG9mIFB5dGhvbi4KKyogQXMgbm90ZWQgYWJvdmUsIHRoZSAyLjcgcmVsZWFzZSBoYXMgYSBtdWNoIGxvbmdlciBwZXJpb2Qgb2YgbWFpbnRlbmFuY2UKKyAgd2hlbiBjb21wYXJlZCB0byBlYXJsaWVyIDIueCB2ZXJzaW9ucy4gUHl0aG9uIDIuNyBpcyBjdXJyZW50bHkgZXhwZWN0ZWQgdG8KKyAgcmVtYWluIHN1cHBvcnRlZCBieSB0aGUgY29yZSBkZXZlbG9wbWVudCB0ZWFtIChyZWNlaXZpbmcgc2VjdXJpdHkgdXBkYXRlcworICBhbmQgb3RoZXIgYnVnIGZpeGVzKSB1bnRpbCBhdCBsZWFzdCAyMDIwICgxMCB5ZWFycyBhZnRlciBpdHMgaW5pdGlhbAorICByZWxlYXNlLCBjb21wYXJlZCB0byB0aGUgbW9yZSB0eXBpY2FsIHN1cHBvcnQgcGVyaW9kIG9mIDE4LTI0IG1vbnRocykuCiAKLSAgSG93ZXZlciwgdGhlcmUgYXJlIGluY3JlYXNpbmdseSBtYW55IHVzZXJzIG9mIFB5dGhvbi1iYXNlZAotICBhcHBsaWNhdGlvbnMgd2hvIGFyZSBub3QgZGlyZWN0bHkgaW52b2x2ZWQgaW4gdGhlIGRldmVsb3BtZW50IG9mCi0gIHRob3NlIGFwcGxpY2F0aW9ucy4gIDpleGM6YERlcHJlY2F0aW9uV2FybmluZ2AgbWVzc2FnZXMgYXJlCi0gIGlycmVsZXZhbnQgdG8gc3VjaCB1c2VycywgbWFraW5nIHRoZW0gd29ycnkgYWJvdXQgYW4gYXBwbGljYXRpb24KLSAgdGhhdCdzIGFjdHVhbGx5IHdvcmtpbmcgY29ycmVjdGx5IGFuZCBidXJkZW5pbmcgYXBwbGljYXRpb24gZGV2ZWxvcGVycwotICB3aXRoIHJlc3BvbmRpbmcgdG8gdGhlc2UgY29uY2VybnMuCisqIEFzIHRoZSBQeXRob24gMi43IHN0YW5kYXJkIGxpYnJhcnkgYWdlcywgbWFraW5nIGVmZmVjdGl2ZSB1c2Ugb2YgdGhlCisgIFB5dGhvbiBQYWNrYWdlIEluZGV4IChlaXRoZXIgZGlyZWN0bHkgb3IgdmlhIGEgcmVkaXN0cmlidXRvcikgYmVjb21lcworICBtb3JlIGltcG9ydGFudCBmb3IgUHl0aG9uIDIgdXNlcnMuIEluIGFkZGl0aW9uIHRvIGEgd2lkZSB2YXJpZXR5IG9mIHRoaXJkCisgIHBhcnR5IHBhY2thZ2VzIGZvciB2YXJpb3VzIHRhc2tzLCB0aGUgYXZhaWxhYmxlIHBhY2thZ2VzIGluY2x1ZGUgYmFja3BvcnRzCisgIG9mIG5ldyBtb2R1bGVzIGFuZCBmZWF0dXJlcyBmcm9tIHRoZSBQeXRob24gMyBzdGFuZGFyZCBsaWJyYXJ5IHRoYXQgYXJlCisgIGNvbXBhdGlibGUgd2l0aCBQeXRob24gMiwgYXMgd2VsbCBhcyB2YXJpb3VzIHRvb2xzIGFuZCBsaWJyYXJpZXMgdGhhdCBjYW4KKyAgbWFrZSBpdCBlYXNpZXIgdG8gbWlncmF0ZSB0byBQeXRob24gMy4gVGhlIGBQeXRob24gUGFja2FnaW5nIFVzZXIgR3VpZGUKKyAgPGh0dHBzOi8vcGFja2FnaW5nLnB5dGhvbi5vcmc+YF9fIHByb3ZpZGVzIGd1aWRhbmNlIG9uIGRvd25sb2FkaW5nIGFuZAorICBpbnN0YWxsaW5nIHNvZnR3YXJlIGZyb20gdGhlIFB5dGhvbiBQYWNrYWdlIEluZGV4LgogCi0gIFlvdSBjYW4gcmUtZW5hYmxlIGRpc3BsYXkgb2YgOmV4YzpgRGVwcmVjYXRpb25XYXJuaW5nYCBtZXNzYWdlcyBieQotICBydW5uaW5nIFB5dGhvbiB3aXRoIHRoZSA6b3B0aW9uOmAtV2RlZmF1bHRgIChzaG9ydCBmb3JtOgotICA6b3B0aW9uOmAtV2RgKSBzd2l0Y2gsIG9yIGJ5IHNldHRpbmcgdGhlIDplbnZ2YXI6YFBZVEhPTldBUk5JTkdTYAotICBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBgYCJkZWZhdWx0ImBgIChvciBgYCJkImBgKSBiZWZvcmUgcnVubmluZwotICBQeXRob24uICBQeXRob24gY29kZSBjYW4gYWxzbyByZS1lbmFibGUgdGhlbQotICBieSBjYWxsaW5nIGBgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdkZWZhdWx0JylgYC4KKyogV2hpbGUgdGhlIHByZWZlcnJlZCBhcHByb2FjaCB0byBlbmhhbmNpbmcgUHl0aG9uIDIgaXMgbm93IHRoZSBwdWJsaWNhdGlvbgorICBvZiBuZXcgcGFja2FnZXMgb24gdGhlIFB5dGhvbiBQYWNrYWdlIEluZGV4LCB0aGlzIGFwcHJvYWNoIGRvZXNuJ3QKKyAgbmVjZXNzYXJpbHkgd29yayBpbiBhbGwgY2FzZXMsIGVzcGVjaWFsbHkgdGhvc2UgcmVsYXRlZCB0byBuZXR3b3JrCisgIHNlY3VyaXR5LiBJbiBleGNlcHRpb25hbCBjYXNlcyB0aGF0IGNhbm5vdCBiZSBoYW5kbGVkIGFkZXF1YXRlbHkgYnkKKyAgcHVibGlzaGluZyBuZXcgb3IgdXBkYXRlZCBwYWNrYWdlcyBvbiBQeVBJLCB0aGUgUHl0aG9uIEVuaGFuY2VtZW50CisgIFByb3Bvc2FsIHByb2Nlc3MgbWF5IGJlIHVzZWQgdG8gbWFrZSB0aGUgY2FzZSBmb3IgYWRkaW5nIG5ldyBmZWF0dXJlcworICBkaXJlY3RseSB0byB0aGUgUHl0aG9uIDIgc3RhbmRhcmQgbGlicmFyeS4gQW55IHN1Y2ggYWRkaXRpb25zLCBhbmQgdGhlCisgIG1haW50ZW5hbmNlIHJlbGVhc2VzIHdoZXJlIHRoZXkgd2VyZSBhZGRlZCwgd2lsbCBiZSBub3RlZCBpbiB0aGUKKyAgOnJlZjpgcHkyNy1tYWludGVuYW5jZS1lbmhhbmNlbWVudHNgIHNlY3Rpb24gYmVsb3cuCisKK0ZvciBwcm9qZWN0cyB3aXNoaW5nIHRvIG1pZ3JhdGUgZnJvbSBQeXRob24gMiB0byBQeXRob24gMywgb3IgZm9yIGxpYnJhcnkKK2FuZCBmcmFtZXdvcmsgZGV2ZWxvcGVycyB3aXNoaW5nIHRvIHN1cHBvcnQgdXNlcnMgb24gYm90aCBQeXRob24gMiBhbmQKK1B5dGhvbiAzLCB0aGVyZSBhcmUgYSB2YXJpZXR5IG9mIHRvb2xzIGFuZCBndWlkZXMgYXZhaWxhYmxlIHRvIGhlbHAgZGVjaWRlCitvbiBhIHN1aXRhYmxlIGFwcHJvYWNoIGFuZCBtYW5hZ2Ugc29tZSBvZiB0aGUgdGVjaG5pY2FsIGRldGFpbHMgaW52b2x2ZWQuCitUaGUgcmVjb21tZW5kZWQgc3RhcnRpbmcgcG9pbnQgaXMgdGhlIDpyZWY6YHB5cG9ydGluZy1ob3d0b2AgSE9XVE8gZ3VpZGUuCisKKworQ2hhbmdlcyB0byB0aGUgSGFuZGxpbmcgb2YgRGVwcmVjYXRpb24gV2FybmluZ3MKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZvciBQeXRob24gMi43LCBhIHBvbGljeSBkZWNpc2lvbiB3YXMgbWFkZSB0byBzaWxlbmNlIHdhcm5pbmdzIG9ubHkgb2YKK2ludGVyZXN0IHRvIGRldmVsb3BlcnMgYnkgZGVmYXVsdC4gIDpleGM6YERlcHJlY2F0aW9uV2FybmluZ2AgYW5kIGl0cworZGVzY2VuZGFudHMgYXJlIG5vdyBpZ25vcmVkIHVubGVzcyBvdGhlcndpc2UgcmVxdWVzdGVkLCBwcmV2ZW50aW5nCit1c2VycyBmcm9tIHNlZWluZyB3YXJuaW5ncyB0cmlnZ2VyZWQgYnkgYW4gYXBwbGljYXRpb24uICBUaGlzIGNoYW5nZQord2FzIGFsc28gbWFkZSBpbiB0aGUgYnJhbmNoIHRoYXQgYmVjYW1lIFB5dGhvbiAzLjIuIChEaXNjdXNzZWQKK29uIHN0ZGxpYi1zaWcgYW5kIGNhcnJpZWQgb3V0IGluIDppc3N1ZTpgNzMxOWAuKQorCitJbiBwcmV2aW91cyByZWxlYXNlcywgOmV4YzpgRGVwcmVjYXRpb25XYXJuaW5nYCBtZXNzYWdlcyB3ZXJlCitlbmFibGVkIGJ5IGRlZmF1bHQsIHByb3ZpZGluZyBQeXRob24gZGV2ZWxvcGVycyB3aXRoIGEgY2xlYXIKK2luZGljYXRpb24gb2Ygd2hlcmUgdGhlaXIgY29kZSBtYXkgYnJlYWsgaW4gYSBmdXR1cmUgbWFqb3IgdmVyc2lvbgorb2YgUHl0aG9uLgorCitIb3dldmVyLCB0aGVyZSBhcmUgaW5jcmVhc2luZ2x5IG1hbnkgdXNlcnMgb2YgUHl0aG9uLWJhc2VkCithcHBsaWNhdGlvbnMgd2hvIGFyZSBub3QgZGlyZWN0bHkgaW52b2x2ZWQgaW4gdGhlIGRldmVsb3BtZW50IG9mCit0aG9zZSBhcHBsaWNhdGlvbnMuICA6ZXhjOmBEZXByZWNhdGlvbldhcm5pbmdgIG1lc3NhZ2VzIGFyZQoraXJyZWxldmFudCB0byBzdWNoIHVzZXJzLCBtYWtpbmcgdGhlbSB3b3JyeSBhYm91dCBhbiBhcHBsaWNhdGlvbgordGhhdCdzIGFjdHVhbGx5IHdvcmtpbmcgY29ycmVjdGx5IGFuZCBidXJkZW5pbmcgYXBwbGljYXRpb24gZGV2ZWxvcGVycword2l0aCByZXNwb25kaW5nIHRvIHRoZXNlIGNvbmNlcm5zLgorCitZb3UgY2FuIHJlLWVuYWJsZSBkaXNwbGF5IG9mIDpleGM6YERlcHJlY2F0aW9uV2FybmluZ2AgbWVzc2FnZXMgYnkKK3J1bm5pbmcgUHl0aG9uIHdpdGggdGhlIDpvcHRpb246YC1XZGVmYXVsdCA8LVc+YCAoc2hvcnQgZm9ybToKKzpvcHRpb246YC1XZCA8LVc+YCkgc3dpdGNoLCBvciBieSBzZXR0aW5nIHRoZSA6ZW52dmFyOmBQWVRIT05XQVJOSU5HU2AKK2Vudmlyb25tZW50IHZhcmlhYmxlIHRvIGBgImRlZmF1bHQiYGAgKG9yIGBgImQiYGApIGJlZm9yZSBydW5uaW5nCitQeXRob24uICBQeXRob24gY29kZSBjYW4gYWxzbyByZS1lbmFibGUgdGhlbQorYnkgY2FsbGluZyBgYHdhcm5pbmdzLnNpbXBsZWZpbHRlcignZGVmYXVsdCcpYGAuCisKK1RoZSBgYHVuaXR0ZXN0YGAgbW9kdWxlIGFsc28gYXV0b21hdGljYWxseSByZWVuYWJsZXMgZGVwcmVjYXRpb24gd2FybmluZ3MKK3doZW4gcnVubmluZyB0ZXN0cy4KIAogCiBQeXRob24gMy4xIEZlYXR1cmVzCkBAIC0xMzMsNyArMTc3LDcgQEAKIEEgcGFydGlhbCBsaXN0IG9mIDMuMSBmZWF0dXJlcyB0aGF0IHdlcmUgYmFja3BvcnRlZCB0byAyLjc6CiAKICogVGhlIHN5bnRheCBmb3Igc2V0IGxpdGVyYWxzIChgYHsxLDIsM31gYCBpcyBhIG11dGFibGUgc2V0KS4KLSogRGljdGlvbmFyeSBhbmQgc2V0IGNvbXByZWhlbnNpb25zIChgYHsgaTogaSoyIGZvciBpIGluIHJhbmdlKDMpfWBgKS4KKyogRGljdGlvbmFyeSBhbmQgc2V0IGNvbXByZWhlbnNpb25zIChgYHtpOiBpKjIgZm9yIGkgaW4gcmFuZ2UoMyl9YGApLgogKiBNdWx0aXBsZSBjb250ZXh0IG1hbmFnZXJzIGluIGEgc2luZ2xlIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQuCiAqIEEgbmV3IHZlcnNpb24gb2YgdGhlIDptb2Q6YGlvYCBsaWJyYXJ5LCByZXdyaXR0ZW4gaW4gQyBmb3IgcGVyZm9ybWFuY2UuCiAqIFRoZSBvcmRlcmVkLWRpY3Rpb25hcnkgdHlwZSBkZXNjcmliZWQgaW4gOnJlZjpgcGVwLTAzNzJgLgpAQCAtMTU1LDcgKzE5OSw3IEBACiAqIDpmdW5jOmBvcGVyYXRvci5pc0NhbGxhYmxlYCBhbmQgOmZ1bmM6YG9wZXJhdG9yLnNlcXVlbmNlSW5jbHVkZXNgLAogICB3aGljaCBhcmUgbm90IHN1cHBvcnRlZCBpbiAzLngsIG5vdyB0cmlnZ2VyIHdhcm5pbmdzLgogKiBUaGUgOm9wdGlvbjpgLTNgIHN3aXRjaCBub3cgYXV0b21hdGljYWxseQotICBlbmFibGVzIHRoZSA6b3B0aW9uOmAtUXdhcm5gIHN3aXRjaCB0aGF0IGNhdXNlcyB3YXJuaW5ncworICBlbmFibGVzIHRoZSA6b3B0aW9uOmAtUXdhcm4gPC1RPmAgc3dpdGNoIHRoYXQgY2F1c2VzIHdhcm5pbmdzCiAgIGFib3V0IHVzaW5nIGNsYXNzaWMgZGl2aXNpb24gd2l0aCBpbnRlZ2VycyBhbmQgbG9uZyBpbnRlZ2Vycy4KIAogCkBAIC0zOTAsOSArNDM0LDEwIEBACiAKIC4uIHNlZWFsc286OgogCi0gICBgYXJncGFyc2UgbW9kdWxlIGRvY3VtZW50YXRpb24gPGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvZGV2L2xpYnJhcnkvYXJncGFyc2UuaHRtbD5gX18KKyAgIDptb2Q6YGFyZ3BhcnNlYCBkb2N1bWVudGF0aW9uCisgICAgIFRoZSBkb2N1bWVudGF0aW9uIHBhZ2Ugb2YgdGhlIGFyZ3BhcnNlIG1vZHVsZS4KIAotICAgYFVwZ3JhZGluZyBvcHRwYXJzZSBjb2RlIHRvIHVzZSBhcmdwYXJzZSA8aHR0cDovL2RvY3MucHl0aG9uLm9yZy9kZXYvbGlicmFyeS9hcmdwYXJzZS5odG1sI3VwZ3JhZGluZy1vcHRwYXJzZS1jb2RlPmBfXworICAgOnJlZjpgdXBncmFkaW5nLW9wdHBhcnNlLWNvZGVgCiAgICAgIFBhcnQgb2YgdGhlIFB5dGhvbiBkb2N1bWVudGF0aW9uLCBkZXNjcmliaW5nIGhvdyB0byBjb252ZXJ0CiAgICAgIGNvZGUgdGhhdCB1c2VzIDptb2Q6YG9wdHBhcnNlYC4KIApAQCAtNDAyLDggKzQ0Nyw2IEBACiBQRVAgMzkxOiBEaWN0aW9uYXJ5LUJhc2VkIENvbmZpZ3VyYXRpb24gRm9yIExvZ2dpbmcKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAotLi4gWFhYIG5vdCBkb2N1bWVudGVkIGluIGxpYnJhcnkgcmVmZXJlbmNlIHlldDsgYWRkIGxpbmsgaGVyZSBvbmNlIGl0J3MgYWRkZWQuCi0KIFRoZSA6bW9kOmBsb2dnaW5nYCBtb2R1bGUgaXMgdmVyeSBmbGV4aWJsZTsgYXBwbGljYXRpb25zIGNhbiBkZWZpbmUKIGEgdHJlZSBvZiBsb2dnaW5nIHN1YnN5c3RlbXMsIGFuZCBlYWNoIGxvZ2dlciBpbiB0aGlzIHRyZWUgY2FuIGZpbHRlcgogb3V0IGNlcnRhaW4gbWVzc2FnZXMsIGZvcm1hdCB0aGVtIGRpZmZlcmVudGx5LCBhbmQgZGlyZWN0IG1lc3NhZ2VzIHRvCkBAIC00MTIsMjEgKzQ1NSwyMSBAQAogQWxsIHRoaXMgZmxleGliaWxpdHkgY2FuIHJlcXVpcmUgYSBsb3Qgb2YgY29uZmlndXJhdGlvbi4gIFlvdSBjYW4KIHdyaXRlIFB5dGhvbiBzdGF0ZW1lbnRzIHRvIGNyZWF0ZSBvYmplY3RzIGFuZCBzZXQgdGhlaXIgcHJvcGVydGllcywKIGJ1dCBhIGNvbXBsZXggc2V0LXVwIHJlcXVpcmVzIHZlcmJvc2UgYnV0IGJvcmluZyBjb2RlLgotOm1vZDpgbG9nZ2luZ2AgYWxzbyBzdXBwb3J0cyBhIDpmdW5jOmB+bG9nZ2luZy5jb25maWcuZmlsZUNvbmZpZ2AKKzptb2Q6YGxvZ2dpbmdgIGFsc28gc3VwcG9ydHMgYSA6ZnVuYzpgfmxvZ2dpbmcuZmlsZUNvbmZpZ2AKIGZ1bmN0aW9uIHRoYXQgcGFyc2VzIGEgZmlsZSwgYnV0IHRoZSBmaWxlIGZvcm1hdCBkb2Vzbid0IHN1cHBvcnQKIGNvbmZpZ3VyaW5nIGZpbHRlcnMsIGFuZCBpdCdzIG1lc3NpZXIgdG8gZ2VuZXJhdGUgcHJvZ3JhbW1hdGljYWxseS4KIAotUHl0aG9uIDIuNyBhZGRzIGEgOmZ1bmM6YH5sb2dnaW5nLmNvbmZpZy5kaWN0Q29uZmlnYCBmdW5jdGlvbiB0aGF0CitQeXRob24gMi43IGFkZHMgYSA6ZnVuYzpgfmxvZ2dpbmcuZGljdENvbmZpZ2AgZnVuY3Rpb24gdGhhdAogdXNlcyBhIGRpY3Rpb25hcnkgdG8gY29uZmlndXJlIGxvZ2dpbmcuICBUaGVyZSBhcmUgbWFueSB3YXlzIHRvCiBwcm9kdWNlIGEgZGljdGlvbmFyeSBmcm9tIGRpZmZlcmVudCBzb3VyY2VzOiBjb25zdHJ1Y3Qgb25lIHdpdGggY29kZTsKIHBhcnNlIGEgZmlsZSBjb250YWluaW5nIEpTT047IG9yIHVzZSBhIFlBTUwgcGFyc2luZyBsaWJyYXJ5IGlmIG9uZSBpcwotaW5zdGFsbGVkLgoraW5zdGFsbGVkLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlIDpyZWY6YGxvZ2dpbmctY29uZmlnLWFwaWAuCiAKIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSBjb25maWd1cmVzIHR3byBsb2dnZXJzLCB0aGUgcm9vdCBsb2dnZXIgYW5kIGEKLWxvZ2dlciBuYW1lZCAibmV0d29yayIuICAgTWVzc2FnZXMgc2VudCB0byB0aGUgcm9vdCBsb2dnZXIgd2lsbCBiZQorbG9nZ2VyIG5hbWVkICJuZXR3b3JrIi4gIE1lc3NhZ2VzIHNlbnQgdG8gdGhlIHJvb3QgbG9nZ2VyIHdpbGwgYmUKIHNlbnQgdG8gdGhlIHN5c3RlbSBsb2cgdXNpbmcgdGhlIHN5c2xvZyBwcm90b2NvbCwgYW5kIG1lc3NhZ2VzCiB0byB0aGUgIm5ldHdvcmsiIGxvZ2dlciB3aWxsIGJlIHdyaXR0ZW4gdG8gYSA6ZmlsZTpgbmV0d29yay5sb2dgIGZpbGUKLXRoYXQgd2lsbCBiZSByb3RhdGVkIG9uY2UgdGhlIGxvZyByZWFjaGVzIDFNYi4KK3RoYXQgd2lsbCBiZSByb3RhdGVkIG9uY2UgdGhlIGxvZyByZWFjaGVzIDFNQi4KIAogOjoKIApAQCAtNDQ1LDcgKzQ4OCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpbGVuYW1lJzogJy9sb2dzL25ldHdvcmsubG9nJywKICAgICAgICAgICAgICAgICAgICAgICAgICAnZm9ybWF0dGVyJzogJ3N0YW5kYXJkJywKICAgICAgICAgICAgICAgICAgICAgICAgICAnbGV2ZWwnOiAnSU5GTycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ21heEJ5dGVzJzogMTAyNCoxMDI0fSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnbWF4Qnl0ZXMnOiAxMDAwMDAwfSwKICAgICAgICAgICAgICAgICAgICdzeXNsb2cnOiB7J2NsYXNzJzogJ2xvZ2dpbmcuaGFuZGxlcnMuU3lzTG9nSGFuZGxlcicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmb3JtYXR0ZXInOiAnc3RhbmRhcmQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbGV2ZWwnOiAnRVJST1InfX0sCkBAIC00ODMsMTYgKzUyNiwxOSBAQAogICBmb3IgVURQIG9yIDpjb25zdDpgc29ja2V0LlNPQ0tfU1RSRUFNYCBmb3IgVENQLiAgVGhlIGRlZmF1bHQKICAgcHJvdG9jb2wgcmVtYWlucyBVRFAuCiAKLSogOmNsYXNzOmBMb2dnZXJgIGluc3RhbmNlcyBnYWluZWQgYSA6bWV0aDpgZ2V0Q2hpbGRgIG1ldGhvZCB0aGF0IHJldHJpZXZlcyBhCi0gIGRlc2NlbmRhbnQgbG9nZ2VyIHVzaW5nIGEgcmVsYXRpdmUgcGF0aC4gIEZvciBleGFtcGxlLAotICBvbmNlIHlvdSByZXRyaWV2ZSBhIGxvZ2dlciBieSBkb2luZyBgYGxvZyA9IGdldExvZ2dlcignYXBwJylgYCwKKyogOmNsYXNzOmB+bG9nZ2luZy5Mb2dnZXJgIGluc3RhbmNlcyBnYWluZWQgYSA6bWV0aDpgfmxvZ2dpbmcuTG9nZ2VyLmdldENoaWxkYAorICBtZXRob2QgdGhhdCByZXRyaWV2ZXMgYSBkZXNjZW5kYW50IGxvZ2dlciB1c2luZyBhIHJlbGF0aXZlIHBhdGguCisgIEZvciBleGFtcGxlLCBvbmNlIHlvdSByZXRyaWV2ZSBhIGxvZ2dlciBieSBkb2luZyBgYGxvZyA9IGdldExvZ2dlcignYXBwJylgYCwKICAgY2FsbGluZyBgYGxvZy5nZXRDaGlsZCgnbmV0d29yay5saXN0ZW4nKWBgIGlzIGVxdWl2YWxlbnQgdG8KICAgYGBnZXRMb2dnZXIoJ2FwcC5uZXR3b3JrLmxpc3RlbicpYGAuCiAKLSogVGhlIDpjbGFzczpgTG9nZ2VyQWRhcHRlcmAgY2xhc3MgZ2FpbmVkIGEgOm1ldGg6YGlzRW5hYmxlZEZvcmAgbWV0aG9kCi0gIHRoYXQgdGFrZXMgYSAqbGV2ZWwqIGFuZCByZXR1cm5zIHdoZXRoZXIgdGhlIHVuZGVybHlpbmcgbG9nZ2VyIHdvdWxkCisqIFRoZSA6Y2xhc3M6YH5sb2dnaW5nLkxvZ2dlckFkYXB0ZXJgIGNsYXNzIGdhaW5lZCBhCisgIDptZXRoOmB+bG9nZ2luZy5Mb2dnZXJBZGFwdGVyLmlzRW5hYmxlZEZvcmAgbWV0aG9kIHRoYXQgdGFrZXMgYQorICAqbGV2ZWwqIGFuZCByZXR1cm5zIHdoZXRoZXIgdGhlIHVuZGVybHlpbmcgbG9nZ2VyIHdvdWxkCiAgIHByb2Nlc3MgYSBtZXNzYWdlIG9mIHRoYXQgbGV2ZWwgb2YgaW1wb3J0YW5jZS4KIAorLi4gWFhYOiBMb2dnZXIgb2JqZWN0cyBkb24ndCBoYXZlIGEgY2xhc3MgZGVjbGFyYXRpb24gc28gdGhlIGxpbmsgZG9uJ3Qgd29yaworCiAuLiBzZWVhbHNvOjoKIAogICAgOnBlcDpgMzkxYCAtIERpY3Rpb25hcnktQmFzZWQgQ29uZmlndXJhdGlvbiBGb3IgTG9nZ2luZwpAQCAtNTAxLDE0ICs1NDcsMTUgQEAKIFBFUCAzMTA2OiBEaWN0aW9uYXJ5IFZpZXdzCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKLVRoZSBkaWN0aW9uYXJ5IG1ldGhvZHMgOm1ldGg6YGtleXNgLCA6bWV0aDpgdmFsdWVzYCwgYW5kIDptZXRoOmBpdGVtc2AKLWFyZSBkaWZmZXJlbnQgaW4gUHl0aG9uIDMueC4gIFRoZXkgcmV0dXJuIGFuIG9iamVjdCBjYWxsZWQgYSA6ZGZuOmB2aWV3YAotaW5zdGVhZCBvZiBhIGZ1bGx5IG1hdGVyaWFsaXplZCBsaXN0LgorVGhlIGRpY3Rpb25hcnkgbWV0aG9kcyA6bWV0aDpgfmRpY3Qua2V5c2AsIDptZXRoOmB+ZGljdC52YWx1ZXNgLCBhbmQKKzptZXRoOmB+ZGljdC5pdGVtc2AgYXJlIGRpZmZlcmVudCBpbiBQeXRob24gMy54LiAgVGhleSByZXR1cm4gYW4gb2JqZWN0CitjYWxsZWQgYSA6ZGZuOmB2aWV3YCBpbnN0ZWFkIG9mIGEgZnVsbHkgbWF0ZXJpYWxpemVkIGxpc3QuCiAKLUl0J3Mgbm90IHBvc3NpYmxlIHRvIGNoYW5nZSB0aGUgcmV0dXJuIHZhbHVlcyBvZiA6bWV0aDpga2V5c2AsCi06bWV0aDpgdmFsdWVzYCwgYW5kIDptZXRoOmBpdGVtc2AgaW4gUHl0aG9uIDIuNyBiZWNhdXNlIHRvbyBtdWNoIGNvZGUKLXdvdWxkIGJyZWFrLiAgSW5zdGVhZCB0aGUgMy54IHZlcnNpb25zIHdlcmUgYWRkZWQgdW5kZXIgdGhlIG5ldyBuYW1lcwotOm1ldGg6YHZpZXdrZXlzYCwgOm1ldGg6YHZpZXd2YWx1ZXNgLCBhbmQgOm1ldGg6YHZpZXdpdGVtc2AuCitJdCdzIG5vdCBwb3NzaWJsZSB0byBjaGFuZ2UgdGhlIHJldHVybiB2YWx1ZXMgb2YgOm1ldGg6YH5kaWN0LmtleXNgLAorOm1ldGg6YH5kaWN0LnZhbHVlc2AsIGFuZCA6bWV0aDpgfmRpY3QuaXRlbXNgIGluIFB5dGhvbiAyLjcgYmVjYXVzZQordG9vIG11Y2ggY29kZSB3b3VsZCBicmVhay4gIEluc3RlYWQgdGhlIDMueCB2ZXJzaW9ucyB3ZXJlIGFkZGVkCit1bmRlciB0aGUgbmV3IG5hbWVzIDptZXRoOmB+ZGljdC52aWV3a2V5c2AsIDptZXRoOmB+ZGljdC52aWV3dmFsdWVzYCwKK2FuZCA6bWV0aDpgfmRpY3Qudmlld2l0ZW1zYC4KIAogOjoKIApAQCAtNTUwLDggKzU5Nyw4IEBACiAgICAgUnVudGltZUVycm9yOiBkaWN0aW9uYXJ5IGNoYW5nZWQgc2l6ZSBkdXJpbmcgaXRlcmF0aW9uCiAKIFlvdSBjYW4gdXNlIHRoZSB2aWV3IG1ldGhvZHMgaW4gUHl0aG9uIDIueCBjb2RlLCBhbmQgdGhlIDJ0bzMKLWNvbnZlcnRlciB3aWxsIGNoYW5nZSB0aGVtIHRvIHRoZSBzdGFuZGFyZCA6bWV0aDpga2V5c2AsCi06bWV0aDpgdmFsdWVzYCwgYW5kIDptZXRoOmBpdGVtc2AgbWV0aG9kcy4KK2NvbnZlcnRlciB3aWxsIGNoYW5nZSB0aGVtIHRvIHRoZSBzdGFuZGFyZCA6bWV0aDpgfmRpY3Qua2V5c2AsCis6bWV0aDpgfmRpY3QudmFsdWVzYCwgYW5kIDptZXRoOmB+ZGljdC5pdGVtc2AgbWV0aG9kcy4KIAogLi4gc2VlYWxzbzo6CiAKQEAgLTYyNCw3ICs2NzEsNyBAQAogICBgYHt9YGAgY29udGludWVzIHRvIHJlcHJlc2VudCBhbiBlbXB0eSBkaWN0aW9uYXJ5OyB1c2UKICAgYGBzZXQoKWBgIGZvciBhbiBlbXB0eSBzZXQuCiAKLSAgICA+Pj4gezEsMiwzLDQsNX0KKyAgICA+Pj4gezEsIDIsIDMsIDQsIDV9CiAgICAgc2V0KFsxLCAyLCAzLCA0LCA1XSkKICAgICA+Pj4gc2V0KCkgIyBlbXB0eSBzZXQKICAgICBzZXQoW10pCkBAIC02NjEsNyArNzA4LDcgQEAKICAgVGhlIDpmdW5jOmBjb250ZXh0bGliLm5lc3RlZGAgZnVuY3Rpb24gcHJvdmlkZXMgYSB2ZXJ5IHNpbWlsYXIKICAgZnVuY3Rpb24sIHNvIGl0J3Mgbm8gbG9uZ2VyIG5lY2Vzc2FyeSBhbmQgaGFzIGJlZW4gZGVwcmVjYXRlZC4KIAotICAoUHJvcG9zZWQgaW4gaHR0cDovL2NvZGVyZXZpZXcuYXBwc3BvdC5jb20vNTMwOTQ7IGltcGxlbWVudGVkIGJ5CisgIChQcm9wb3NlZCBpbiBodHRwczovL2NvZGVyZXZpZXcuYXBwc3BvdC5jb20vNTMwOTQ7IGltcGxlbWVudGVkIGJ5CiAgIEdlb3JnIEJyYW5kbC4pCiAKICogQ29udmVyc2lvbnMgYmV0d2VlbiBmbG9hdGluZy1wb2ludCBudW1iZXJzIGFuZCBzdHJpbmdzIGFyZQpAQCAtNzk0LDcgKzg0MSw3IEBACiAgIGBgTm9uZWBgIGFzIGl0cyBmaXJzdCBhcmd1bWVudC4gIChGaXhlZCBieSBHZW9yZyBCcmFuZGw7CiAgIDppc3N1ZTpgNDc1OWAuKQogCi0gIC4uIGJ5dGVhcnJheSBkb2Vzbid0IHNlZW0gdG8gYmUgZG9jdW1lbnRlZAorICAuLiBYWFggYnl0ZWFycmF5IGRvZXNuJ3Qgc2VlbSB0byBiZSBkb2N1bWVudGVkCiAKICogV2hlbiB1c2luZyBgYEBjbGFzc21ldGhvZGBgIGFuZCBgYEBzdGF0aWNtZXRob2RgYCB0byB3cmFwCiAgIG1ldGhvZHMgYXMgY2xhc3Mgb3Igc3RhdGljIG1ldGhvZHMsIHRoZSB3cmFwcGVyIG9iamVjdCBub3cKQEAgLTg2NywxMiArOTE0LDYgQEAKIAogU2V2ZXJhbCBwZXJmb3JtYW5jZSBlbmhhbmNlbWVudHMgaGF2ZSBiZWVuIGFkZGVkOgogCi0uLiAqIEEgbmV3IDpwcm9ncmFtOmBjb25maWd1cmVgIG9wdGlvbiwgOm9wdGlvbjpgLS13aXRoLWNvbXB1dGVkLWdvdG9zYCwKLSAgIGNvbXBpbGVzIHRoZSBtYWluIGJ5dGVjb2RlIGludGVycHJldGVyIGxvb3AgdXNpbmcgYSBuZXcgZGlzcGF0Y2gKLSAgIG1lY2hhbmlzbSB0aGF0IGdpdmVzIHNwZWVkdXBzIG9mIHVwIHRvIDIwJSwgZGVwZW5kaW5nIG9uIHRoZSBzeXN0ZW0KLSAgIGFuZCBiZW5jaG1hcmsuICBUaGUgbmV3IG1lY2hhbmlzbSBpcyBvbmx5IHN1cHBvcnRlZCBvbiBjZXJ0YWluCi0gICBjb21waWxlcnMsIHN1Y2ggYXMgZ2NjLCBTdW5Qcm8sIGFuZCBpY2MuCi0KICogQSBuZXcgb3Bjb2RlIHdhcyBhZGRlZCB0byBwZXJmb3JtIHRoZSBpbml0aWFsIHNldHVwIGZvcgogICA6a2V5d29yZDpgd2l0aGAgc3RhdGVtZW50cywgbG9va2luZyB1cCB0aGUgOm1ldGg6YF9fZW50ZXJfX2AgYW5kCiAgIDptZXRoOmBfX2V4aXRfX2AgbWV0aG9kcy4gIChDb250cmlidXRlZCBieSBCZW5qYW1pbiBQZXRlcnNvbi4pCkBAIC0xMDU0LDcgKzEwOTUsNyBAQAogICA6bWV0aDpgfmNvbGxlY3Rpb25zLmRlcXVlLmNvdW50YCBtZXRob2QgdGhhdCByZXR1cm5zIHRoZSBudW1iZXIgb2YKICAgY29udGFpbmVkIGVsZW1lbnRzIGVxdWFsIHRvIHRoZSBzdXBwbGllZCBhcmd1bWVudCAqeCosIGFuZCBhCiAgIDptZXRoOmB+Y29sbGVjdGlvbnMuZGVxdWUucmV2ZXJzZWAgbWV0aG9kIHRoYXQgcmV2ZXJzZXMgdGhlIGVsZW1lbnRzCi0gIG9mIHRoZSBkZXF1ZSBpbi1wbGFjZS4gIDpjbGFzczpgZGVxdWVgIGFsc28gZXhwb3NlcyBpdHMgbWF4aW11bQorICBvZiB0aGUgZGVxdWUgaW4tcGxhY2UuICA6Y2xhc3M6YH5jb2xsZWN0aW9ucy5kZXF1ZWAgYWxzbyBleHBvc2VzIGl0cyBtYXhpbXVtCiAgIGxlbmd0aCBhcyB0aGUgcmVhZC1vbmx5IDphdHRyOmB+Y29sbGVjdGlvbnMuZGVxdWUubWF4bGVuYCBhdHRyaWJ1dGUuCiAgIChCb3RoIGZlYXR1cmVzIGFkZGVkIGJ5IFJheW1vbmQgSGV0dGluZ2VyLikKIApAQCAtMTA3Nyw3ICsxMTE4LDcgQEAKICAgKEZpeGVkIGJ5IERhbmllbCBTdHV0emJhY2g7IDppc3N1ZTpgODcyOWAuKQogCiAqIENvbnN0cnVjdG9ycyBmb3IgdGhlIHBhcnNpbmcgY2xhc3NlcyBpbiB0aGUgOm1vZDpgQ29uZmlnUGFyc2VyYCBtb2R1bGUgbm93Ci0gIHRha2UgYSAqYWxsb3dfbm9fdmFsdWUqIHBhcmFtZXRlciwgZGVmYXVsdGluZyB0byBmYWxzZTsgaWYgdHJ1ZSwKKyAgdGFrZSBhbiAqYWxsb3dfbm9fdmFsdWUqIHBhcmFtZXRlciwgZGVmYXVsdGluZyB0byBmYWxzZTsgaWYgdHJ1ZSwKICAgb3B0aW9ucyB3aXRob3V0IHZhbHVlcyB3aWxsIGJlIGFsbG93ZWQuICBGb3IgZXhhbXBsZTo6CiAKICAgICA+Pj4gaW1wb3J0IENvbmZpZ1BhcnNlciwgU3RyaW5nSU8KQEAgLTExMzUsMTUgKzExNzYsMTQgQEAKICAgYGBEZWNpbWFsKCcwLjEwMDAwMDAwMDAwMDAwMDAwNTU1MTExNTEyMzEyNTc4MjcwMjExODE1ODM0MDQ1NDEwMTU2MjUnKWBgLgogICAoSW1wbGVtZW50ZWQgYnkgUmF5bW9uZCBIZXR0aW5nZXI7IDppc3N1ZTpgNDc5NmAuKQogCi0gIENvbXBhcmluZyBpbnN0YW5jZXMgb2YgOmNsYXNzOmBEZWNpbWFsYCB3aXRoIGZsb2F0aW5nLXBvaW50CisgIENvbXBhcmluZyBpbnN0YW5jZXMgb2YgOmNsYXNzOmB+ZGVjaW1hbC5EZWNpbWFsYCB3aXRoIGZsb2F0aW5nLXBvaW50CiAgIG51bWJlcnMgbm93IHByb2R1Y2VzIHNlbnNpYmxlIHJlc3VsdHMgYmFzZWQgb24gdGhlIG51bWVyaWMgdmFsdWVzCiAgIG9mIHRoZSBvcGVyYW5kcy4gIFByZXZpb3VzbHkgc3VjaCBjb21wYXJpc29ucyB3b3VsZCBmYWxsIGJhY2sgdG8KICAgUHl0aG9uJ3MgZGVmYXVsdCBydWxlcyBmb3IgY29tcGFyaW5nIG9iamVjdHMsIHdoaWNoIHByb2R1Y2VkIGFyYml0cmFyeQogICByZXN1bHRzIGJhc2VkIG9uIHRoZWlyIHR5cGUuICBOb3RlIHRoYXQgeW91IHN0aWxsIGNhbm5vdCBjb21iaW5lCiAgIDpjbGFzczpgRGVjaW1hbGAgYW5kIGZsb2F0aW5nLXBvaW50IGluIG90aGVyIG9wZXJhdGlvbnMgc3VjaCBhcyBhZGRpdGlvbiwKICAgc2luY2UgeW91IHNob3VsZCBiZSBleHBsaWNpdGx5IGNob29zaW5nIGhvdyB0byBjb252ZXJ0IGJldHdlZW4gZmxvYXQgYW5kCi0gIDpjbGFzczpgRGVjaW1hbGAuCi0gIChGaXhlZCBieSBNYXJrIERpY2tpbnNvbjsgOmlzc3VlOmAyNTMxYC4pCisgIDpjbGFzczpgfmRlY2ltYWwuRGVjaW1hbGAuICAoRml4ZWQgYnkgTWFyayBEaWNraW5zb247IDppc3N1ZTpgMjUzMWAuKQogCiAgIFRoZSBjb25zdHJ1Y3RvciBmb3IgOmNsYXNzOmB+ZGVjaW1hbC5EZWNpbWFsYCBub3cgYWNjZXB0cwogICBmbG9hdGluZy1wb2ludCBudW1iZXJzIChhZGRlZCBieSBSYXltb25kIEhldHRpbmdlcjsgOmlzc3VlOmA4MjU3YCkKQEAgLTExOTUsOCArMTIzNSw4IEBACiAKICAgT3JkZXJpbmcgY29tcGFyaXNvbnMgKGBgPGBgLCBgYDw9YGAsIGBgPmBgLCBgYD49YGApIGJldHdlZW4KICAgZnJhY3Rpb25zIGFuZCBjb21wbGV4IG51bWJlcnMgbm93IHJhaXNlIGEgOmV4YzpgVHlwZUVycm9yYC4KLSAgVGhpcyBmaXhlcyBhbiBvdmVyc2lnaHQsIG1ha2luZyB0aGUgOmNsYXNzOmBGcmFjdGlvbmAgbWF0Y2ggdGhlIG90aGVyCi0gIG51bWVyaWMgdHlwZXMuCisgIFRoaXMgZml4ZXMgYW4gb3ZlcnNpZ2h0LCBtYWtpbmcgdGhlIDpjbGFzczpgfmZyYWN0aW9ucy5GcmFjdGlvbmAKKyAgbWF0Y2ggdGhlIG90aGVyIG51bWVyaWMgdHlwZXMuCiAKICAgLi4gcmV2aXNpb24gNzk0NTUKIApAQCAtMTIxMCw3ICsxMjUwLDcgQEAKICAgdXBsb2FkcyB0aGFua3MgdG8gYW4gYWRkZWQgKnJlc3QqIHBhcmFtZXRlciAocGF0Y2ggYnkgUGFibG8gTW91em87CiAgIDppc3N1ZTpgNjg0NWAuKQogCi0qIE5ldyBjbGFzcyBkZWNvcmF0b3I6IDpmdW5jOmB0b3RhbF9vcmRlcmluZ2AgaW4gdGhlIDptb2Q6YGZ1bmN0b29sc2AKKyogTmV3IGNsYXNzIGRlY29yYXRvcjogOmZ1bmM6YH5mdW5jdG9vbHMudG90YWxfb3JkZXJpbmdgIGluIHRoZSA6bW9kOmBmdW5jdG9vbHNgCiAgIG1vZHVsZSB0YWtlcyBhIGNsYXNzIHRoYXQgZGVmaW5lcyBhbiA6bWV0aDpgX19lcV9fYCBtZXRob2QgYW5kIG9uZSBvZgogICA6bWV0aDpgX19sdF9fYCwgOm1ldGg6YF9fbGVfX2AsIDptZXRoOmBfX2d0X19gLCBvciA6bWV0aDpgX19nZV9fYCwKICAgYW5kIGdlbmVyYXRlcyB0aGUgbWlzc2luZyBjb21wYXJpc29uIG1ldGhvZHMuICBTaW5jZSB0aGUKQEAgLTEyMTgsNyArMTI1OCw3IEBACiAgIHRoaXMgZGVjb3JhdG9yIG1ha2VzIGl0IGVhc2llciB0byBkZWZpbmUgb3JkZXJlZCBjbGFzc2VzLgogICAoQWRkZWQgYnkgUmF5bW9uZCBIZXR0aW5nZXI7IDppc3N1ZTpgNTQ3OWAuKQogCi0gIE5ldyBmdW5jdGlvbjogOmZ1bmM6YGNtcF90b19rZXlgIHdpbGwgdGFrZSBhbiBvbGQtc3R5bGUgY29tcGFyaXNvbgorICBOZXcgZnVuY3Rpb246IDpmdW5jOmB+ZnVuY3Rvb2xzLmNtcF90b19rZXlgIHdpbGwgdGFrZSBhbiBvbGQtc3R5bGUgY29tcGFyaXNvbgogICBmdW5jdGlvbiB0aGF0IGV4cGVjdHMgdHdvIGFyZ3VtZW50cyBhbmQgcmV0dXJuIGEgbmV3IGNhbGxhYmxlIHRoYXQKICAgY2FuIGJlIHVzZWQgYXMgdGhlICprZXkqIHBhcmFtZXRlciB0byBmdW5jdGlvbnMgc3VjaCBhcwogICA6ZnVuYzpgc29ydGVkYCwgOmZ1bmM6YG1pbmAgYW5kIDpmdW5jOmBtYXhgLCBldGMuICBUaGUgcHJpbWFyeQpAQCAtMTM0NSw3ICsxMzg1LDcgQEAKICAgd2l0aCBhbnkgb2JqZWN0IGxpdGVyYWwgdGhhdCBkZWNvZGVzIHRvIGEgbGlzdCBvZiBwYWlycy4KICAgKENvbnRyaWJ1dGVkIGJ5IFJheW1vbmQgSGV0dGluZ2VyOyA6aXNzdWU6YDUzODFgLikKIAotKiBUaGUgOm1vZDpgbWFpbGJveGAgbW9kdWxlJ3MgOmNsYXNzOmBNYWlsZGlyYCBjbGFzcyBub3cgcmVjb3JkcyB0aGUKKyogVGhlIDptb2Q6YG1haWxib3hgIG1vZHVsZSdzIDpjbGFzczpgfm1haWxib3guTWFpbGRpcmAgY2xhc3Mgbm93IHJlY29yZHMgdGhlCiAgIHRpbWVzdGFtcCBvbiB0aGUgZGlyZWN0b3JpZXMgaXQgcmVhZHMsIGFuZCBvbmx5IHJlLXJlYWRzIHRoZW0gaWYgdGhlCiAgIG1vZGlmaWNhdGlvbiB0aW1lIGhhcyBzdWJzZXF1ZW50bHkgY2hhbmdlZC4gIFRoaXMgaW1wcm92ZXMKICAgcGVyZm9ybWFuY2UgYnkgYXZvaWRpbmcgdW5uZWVkZWQgZGlyZWN0b3J5IHNjYW5zLiAgKEZpeGVkIGJ5CkBAIC0xNDMyLDcgKzE0NzIsNyBAQAogKiBUaGUgOm1vZDpgc2lnbmFsYCBtb2R1bGUgbm8gbG9uZ2VyIHJlLWluc3RhbGxzIHRoZSBzaWduYWwgaGFuZGxlcgogICB1bmxlc3MgdGhpcyBpcyB0cnVseSBuZWNlc3NhcnksIHdoaWNoIGZpeGVzIGEgYnVnIHRoYXQgY291bGQgbWFrZSBpdAogICBpbXBvc3NpYmxlIHRvIGNhdGNoIHRoZSBFSU5UUiBzaWduYWwgcm9idXN0bHkuICAoRml4ZWQgYnkKLSAgQ2hhcmxlcy1GcmFuw6dvaXMgTmF0YWxpOyA6aXNzdWU6YDgzNTRgLikKKyAgQ2hhcmxlcy1GcmFuY29pcyBOYXRhbGk7IDppc3N1ZTpgODM1NGAuKQogCiAqIE5ldyBmdW5jdGlvbnM6IGluIHRoZSA6bW9kOmBzaXRlYCBtb2R1bGUsIHRocmVlIG5ldyBmdW5jdGlvbnMKICAgcmV0dXJuIHZhcmlvdXMgc2l0ZS0gYW5kIHVzZXItc3BlY2lmaWMgcGF0aHMuCkBAIC0xNDY2LDEwICsxNTA2LDEwIEBACiAgIGRlZmF1bHRzIHRvIEZhbHNlOyBpZiBvdmVycmlkZGVuIHRvIGJlIFRydWUsCiAgIG5ldyByZXF1ZXN0IGNvbm5lY3Rpb25zIHdpbGwgaGF2ZSB0aGUgVENQX05PREVMQVkgb3B0aW9uIHNldCB0bwogICBwcmV2ZW50IGJ1ZmZlcmluZyBtYW55IHNtYWxsIHNlbmRzIGludG8gYSBzaW5nbGUgVENQIHBhY2tldC4KLSAgVGhlIDphdHRyOmB+U29ja2V0U2VydmVyLlRDUFNlcnZlci50aW1lb3V0YCBjbGFzcyBhdHRyaWJ1dGUgY2FuIGhvbGQKKyAgVGhlIDphdHRyOmB+U29ja2V0U2VydmVyLkJhc2VTZXJ2ZXIudGltZW91dGAgY2xhc3MgYXR0cmlidXRlIGNhbiBob2xkCiAgIGEgdGltZW91dCBpbiBzZWNvbmRzIHRoYXQgd2lsbCBiZSBhcHBsaWVkIHRvIHRoZSByZXF1ZXN0IHNvY2tldDsgaWYKLSAgbm8gcmVxdWVzdCBpcyByZWNlaXZlZCB3aXRoaW4gdGhhdCB0aW1lLCA6bWV0aDpgaGFuZGxlX3RpbWVvdXRgCi0gIHdpbGwgYmUgY2FsbGVkIGFuZCA6bWV0aDpgaGFuZGxlX3JlcXVlc3RgIHdpbGwgcmV0dXJuLgorICBubyByZXF1ZXN0IGlzIHJlY2VpdmVkIHdpdGhpbiB0aGF0IHRpbWUsIDptZXRoOmB+U29ja2V0U2VydmVyLkJhc2VTZXJ2ZXIuaGFuZGxlX3RpbWVvdXRgCisgIHdpbGwgYmUgY2FsbGVkIGFuZCA6bWV0aDpgflNvY2tldFNlcnZlci5CYXNlU2VydmVyLmhhbmRsZV9yZXF1ZXN0YCB3aWxsIHJldHVybi4KICAgKENvbnRyaWJ1dGVkIGJ5IEtyaXN0asOhbiBWYWx1ciBKw7Nuc3NvbjsgOmlzc3VlOmA2MTkyYCBhbmQgOmlzc3VlOmA2MjY3YC4pCiAKICogVXBkYXRlZCBtb2R1bGU6IHRoZSA6bW9kOmBzcWxpdGUzYCBtb2R1bGUgaGFzIGJlZW4gdXBkYXRlZCB0bwpAQCAtMTQ3OSw3ICsxNTE5LDcgQEAKICAgYW5kIHRoZW4gY2FsbCA6bWV0aDpgfnNxbGl0ZTMuQ29ubmVjdGlvbi5sb2FkX2V4dGVuc2lvbmAgdG8gbG9hZCBhIHBhcnRpY3VsYXIgc2hhcmVkIGxpYnJhcnkuCiAgIChVcGRhdGVkIGJ5IEdlcmhhcmQgSMOkcmluZy4pCiAKLSogVGhlIDptb2Q6YHNzbGAgbW9kdWxlJ3MgOmNsYXNzOmBzc2wuU1NMU29ja2V0YCBvYmplY3RzIG5vdyBzdXBwb3J0IHRoZQorKiBUaGUgOm1vZDpgc3NsYCBtb2R1bGUncyA6Y2xhc3M6YH5zc2wuU1NMU29ja2V0YCBvYmplY3RzIG5vdyBzdXBwb3J0IHRoZQogICBidWZmZXIgQVBJLCB3aGljaCBmaXhlZCBhIHRlc3Qgc3VpdGUgZmFpbHVyZSAoZml4IGJ5IEFudG9pbmUgUGl0cm91OwogICA6aXNzdWU6YDcxMzNgKSBhbmQgYXV0b21hdGljYWxseSBzZXQKICAgT3BlblNTTCdzIDpjOm1hY3JvOmBTU0xfTU9ERV9BVVRPX1JFVFJZYCwgd2hpY2ggd2lsbCBwcmV2ZW50IGFuIGVycm9yCkBAIC0xNTM1LDcgKzE1NzUsNyBAQAogICBvbiByZWNlaXZpbmcgYW4gOmNvbnN0OmBFSU5UUmAgc2lnbmFsLiAgKFJlcG9ydGVkIGJ5IHNldmVyYWwgcGVvcGxlOyBmaW5hbAogICBwYXRjaCBieSBHcmVnb3J5IFAuIFNtaXRoIGluIDppc3N1ZTpgMTA2ODI2OGAuKQogCi0qIE5ldyBmdW5jdGlvbjogOmZ1bmM6YH5zeW10YWJsZS5pc19kZWNsYXJlZF9nbG9iYWxgIGluIHRoZSA6bW9kOmBzeW10YWJsZWAgbW9kdWxlCisqIE5ldyBmdW5jdGlvbjogOmZ1bmM6YH5zeW10YWJsZS5TeW1ib2wuaXNfZGVjbGFyZWRfZ2xvYmFsYCBpbiB0aGUgOm1vZDpgc3ltdGFibGVgIG1vZHVsZQogICByZXR1cm5zIHRydWUgZm9yIHZhcmlhYmxlcyB0aGF0IGFyZSBleHBsaWNpdGx5IGRlY2xhcmVkIHRvIGJlIGdsb2JhbCwKICAgZmFsc2UgZm9yIG9uZXMgdGhhdCBhcmUgaW1wbGljaXRseSBnbG9iYWwuCiAgIChDb250cmlidXRlZCBieSBKZXJlbXkgSHlsdG9uLikKQEAgLTE1NzIsNyArMTYxMiw3IEBACiAgIHJlc3VsdGluZyBhcmNoaXZlLiAgVGhpcyBpcyBtb3JlIHBvd2VyZnVsIHRoYW4gdGhlIGV4aXN0aW5nCiAgICpleGNsdWRlKiBhcmd1bWVudCwgd2hpY2ggaGFzIHRoZXJlZm9yZSBiZWVuIGRlcHJlY2F0ZWQuCiAgIChBZGRlZCBieSBMYXJzIEd1c3TDpGJlbDsgOmlzc3VlOmA2ODU2YC4pCi0gIFRoZSA6Y2xhc3M6YH50YXJmaWxlLlRhckZpbGVgIGNsYXNzIGFsc28gbm93IHN1cHBvcnRzIHRoZSBjb250ZXh0IG1hbmFnZXIgcHJvdG9jb2wuCisgIFRoZSA6Y2xhc3M6YH50YXJmaWxlLlRhckZpbGVgIGNsYXNzIGFsc28gbm93IHN1cHBvcnRzIHRoZSBjb250ZXh0IG1hbmFnZW1lbnQgcHJvdG9jb2wuCiAgIChBZGRlZCBieSBMYXJzIEd1c3TDpGJlbDsgOmlzc3VlOmA3MjMyYC4pCiAKICogVGhlIDptZXRoOmB+dGhyZWFkaW5nLkV2ZW50LndhaXRgIG1ldGhvZCBvZiB0aGUgOmNsYXNzOmB0aHJlYWRpbmcuRXZlbnRgIGNsYXNzCkBAIC0xNzE2LDcgKzE3NTYsNyBAQAogICBNYWtlZmlsZSBhbmQgdGhlIDpmaWxlOmBweWNvbmZpZy5oYCBmaWxlLgogKiA6ZnVuYzpgfnN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcnNgIHJldHVybnMgYSBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcKICAgYWxsIG9mIHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcy4KLSogOmZ1bmM6YH5zeXNjb25maWcuZ2V0cGF0aGAgcmV0dXJucyB0aGUgY29uZmlndXJlZCBwYXRoIGZvcgorKiA6ZnVuYzpgfnN5c2NvbmZpZy5nZXRfcGF0aGAgcmV0dXJucyB0aGUgY29uZmlndXJlZCBwYXRoIGZvcgogICBhIHBhcnRpY3VsYXIgdHlwZSBvZiBtb2R1bGU6IHRoZSBzdGFuZGFyZCBsaWJyYXJ5LAogICBzaXRlLXNwZWNpZmljIG1vZHVsZXMsIHBsYXRmb3JtLXNwZWNpZmljIG1vZHVsZXMsIGV0Yy4KICogOmZ1bmM6YH5zeXNjb25maWcuaXNfcHl0aG9uX2J1aWxkYCByZXR1cm5zIHRydWUgaWYgeW91J3JlIHJ1bm5pbmcgYQpAQCAtMTcyNyw3ICsxNzY3LDcgQEAKIAogVGhlIERpc3R1dGlscyBwYWNrYWdlIGFuZCA6bW9kOmBzeXNjb25maWdgIGFyZSBub3cgbWFpbnRhaW5lZCBieSBUYXJlawogWmlhZMOpLCB3aG8gaGFzIGFsc28gc3RhcnRlZCBhIERpc3R1dGlsczIgcGFja2FnZSAoc291cmNlIHJlcG9zaXRvcnkgYXQKLWh0dHA6Ly9oZy5weXRob24ub3JnL2Rpc3R1dGlsczIvKSBmb3IgZGV2ZWxvcGluZyBhIG5leHQtZ2VuZXJhdGlvbgoraHR0cHM6Ly9oZy5weXRob24ub3JnL2Rpc3R1dGlsczIvKSBmb3IgZGV2ZWxvcGluZyBhIG5leHQtZ2VuZXJhdGlvbgogdmVyc2lvbiBvZiBEaXN0dXRpbHMuCiAKIApAQCAtMTc2NCw3ICsxODA0LDcgQEAKIGJ5IE1pY2hhZWwgRm9vcmQsIHVubGVzcyBvdGhlcndpc2Ugbm90ZWQuICBUaGUgZW5oYW5jZWQgdmVyc2lvbiBvZgogdGhlIG1vZHVsZSBpcyBkb3dubG9hZGFibGUgc2VwYXJhdGVseSBmb3IgdXNlIHdpdGggUHl0aG9uIHZlcnNpb25zIDIuNCB0byAyLjYsCiBwYWNrYWdlZCBhcyB0aGUgOm1vZDpgdW5pdHRlc3QyYCBwYWNrYWdlLCBmcm9tCi1odHRwOi8vcHlwaS5weXRob24ub3JnL3B5cGkvdW5pdHRlc3QyLgoraHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS91bml0dGVzdDIuCiAKIFdoZW4gdXNlZCBmcm9tIHRoZSBjb21tYW5kIGxpbmUsIHRoZSBtb2R1bGUgY2FuIGF1dG9tYXRpY2FsbHkgZGlzY292ZXIKIHRlc3RzLiAgSXQncyBub3QgYXMgZmFuY3kgYXMgYHB5LnRlc3QgPGh0dHA6Ly9weXRlc3Qub3JnPmBfXyBvcgpAQCAtMTc3OCw3ICsxODE4LDcgQEAKIENvbnN1bHQgdGhlIDptb2Q6YHVuaXR0ZXN0YCBtb2R1bGUgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBkZXRhaWxzLgogKERldmVsb3BlZCBpbiA6aXNzdWU6YDYwMDFgLikKIAotVGhlIDpmdW5jOmBtYWluYCBmdW5jdGlvbiBzdXBwb3J0cyBzb21lIG90aGVyIG5ldyBvcHRpb25zOgorVGhlIDpmdW5jOmB+dW5pdHRlc3QubWFpbmAgZnVuY3Rpb24gc3VwcG9ydHMgc29tZSBvdGhlciBuZXcgb3B0aW9uczoKIAogKiA6b3B0aW9uOmAtYmAgb3IgOm9wdGlvbjpgLS1idWZmZXJgIHdpbGwgYnVmZmVyIHRoZSBzdGFuZGFyZCBvdXRwdXQKICAgYW5kIHN0YW5kYXJkIGVycm9yIHN0cmVhbXMgZHVyaW5nIGVhY2ggdGVzdC4gIElmIHRoZSB0ZXN0IHBhc3NlcywKQEAgLTE3OTYsNyArMTgzNiw3IEBACiAgIGJlaW5nIHRlc3RlZCBvciB0aGUgdGVzdHMgYmVpbmcgcnVuIGhhdmUgZGVmaW5lZCBhIHNpZ25hbCBoYW5kbGVyIG9mCiAgIHRoZWlyIG93biwgYnkgbm90aWNpbmcgdGhhdCBhIHNpZ25hbCBoYW5kbGVyIHdhcyBhbHJlYWR5IHNldCBhbmQKICAgY2FsbGluZyBpdC4gIElmIHRoaXMgZG9lc24ndCB3b3JrIGZvciB5b3UsIHRoZXJlJ3MgYQotICA6ZnVuYzpgcmVtb3ZlSGFuZGxlcmAgZGVjb3JhdG9yIHRoYXQgY2FuIGJlIHVzZWQgdG8gbWFyayB0ZXN0cyB0aGF0CisgIDpmdW5jOmB+dW5pdHRlc3QucmVtb3ZlSGFuZGxlcmAgZGVjb3JhdG9yIHRoYXQgY2FuIGJlIHVzZWQgdG8gbWFyayB0ZXN0cyB0aGF0CiAgIHNob3VsZCBoYXZlIHRoZSBjb250cm9sLUMgaGFuZGxpbmcgZGlzYWJsZWQuCiAKICogOm9wdGlvbjpgLWZgIG9yIDpvcHRpb246YC0tZmFpbGZhc3RgIG1ha2VzCkBAIC0xOTIzLDcgKzE5NjMsNyBAQAogCiA6ZnVuYzpgdW5pdHRlc3QubWFpbmAgbm93IHRha2VzIGFuIG9wdGlvbmFsIGBgZXhpdGBgIGFyZ3VtZW50LiAgSWYKIEZhbHNlLCA6ZnVuYzpgfnVuaXR0ZXN0Lm1haW5gIGRvZXNuJ3QgY2FsbCA6ZnVuYzpgc3lzLmV4aXRgLCBhbGxvd2luZwotOmZ1bmM6YG1haW5gIHRvIGJlIHVzZWQgZnJvbSB0aGUgaW50ZXJhY3RpdmUgaW50ZXJwcmV0ZXIuCis6ZnVuYzpgfnVuaXR0ZXN0Lm1haW5gIHRvIGJlIHVzZWQgZnJvbSB0aGUgaW50ZXJhY3RpdmUgaW50ZXJwcmV0ZXIuCiAoQ29udHJpYnV0ZWQgYnkgSi4gUGFibG8gRmVybsOhbmRlejsgOmlzc3VlOmAzMzc5YC4pCiAKIDpjbGFzczpgfnVuaXR0ZXN0LlRlc3RSZXN1bHRgIGhhcyBuZXcgOm1ldGg6YH51bml0dGVzdC5UZXN0UmVzdWx0LnN0YXJ0VGVzdFJ1bmAgYW5kCkBAIC0yMTIwLDcgKzIxNjAsNyBAQAogICA6YzptYWNybzpgUHlfSVNTUEFDRWAsCiAgIDpjOm1hY3JvOmBQeV9JU1VQUEVSYCwKICAgOmM6bWFjcm86YFB5X0lTWERJR0lUYCwKLSAgYW5kIDpjOm1hY3JvOmBQeV9UT0xPV0VSYCwgOmM6bWFjcm86YFB5X1RPVVBQRVJgLgorICA6YzptYWNybzpgUHlfVE9MT1dFUmAsIGFuZCA6YzptYWNybzpgUHlfVE9VUFBFUmAuCiAgIEFsbCBvZiB0aGVzZSBmdW5jdGlvbnMgYXJlIGFuYWxvZ291cyB0byB0aGUgQwogICBzdGFuZGFyZCBtYWNyb3MgZm9yIGNsYXNzaWZ5aW5nIGNoYXJhY3RlcnMsIGJ1dCBpZ25vcmUgdGhlIGN1cnJlbnQKICAgbG9jYWxlIHNldHRpbmcsIGJlY2F1c2UgaW4KQEAgLTIyNjYsMTEgKzIzMDYsMTEgQEAKICAgKENvbnRyaWJ1dGVkIGJ5IERhdmlkIENvdXJuYXBlYXU7IDppc3N1ZTpgNDM2NWAuKQogCiAqIFRoZSA6bW9kOmBfd2lucmVnYCBtb2R1bGUgZm9yIGFjY2Vzc2luZyB0aGUgcmVnaXN0cnkgbm93IGltcGxlbWVudHMKLSAgdGhlIDpmdW5jOmBDcmVhdGVLZXlFeGAgYW5kIDpmdW5jOmBEZWxldGVLZXlFeGAgZnVuY3Rpb25zLCBleHRlbmRlZAotICB2ZXJzaW9ucyBvZiBwcmV2aW91c2x5LXN1cHBvcnRlZCBmdW5jdGlvbnMgdGhhdCB0YWtlIHNldmVyYWwgZXh0cmEKLSAgYXJndW1lbnRzLiAgVGhlIDpmdW5jOmBEaXNhYmxlUmVmbGVjdGlvbktleWAsCi0gIDpmdW5jOmBFbmFibGVSZWZsZWN0aW9uS2V5YCwgYW5kIDpmdW5jOmBRdWVyeVJlZmxlY3Rpb25LZXlgIHdlcmUgYWxzbwotICB0ZXN0ZWQgYW5kIGRvY3VtZW50ZWQuCisgIHRoZSA6ZnVuYzpgfl93aW5yZWcuQ3JlYXRlS2V5RXhgIGFuZCA6ZnVuYzpgfl93aW5yZWcuRGVsZXRlS2V5RXhgCisgIGZ1bmN0aW9ucywgZXh0ZW5kZWQgdmVyc2lvbnMgb2YgcHJldmlvdXNseS1zdXBwb3J0ZWQgZnVuY3Rpb25zIHRoYXQKKyAgdGFrZSBzZXZlcmFsIGV4dHJhIGFyZ3VtZW50cy4gIFRoZSA6ZnVuYzpgfl93aW5yZWcuRGlzYWJsZVJlZmxlY3Rpb25LZXlgLAorICA6ZnVuYzpgfl93aW5yZWcuRW5hYmxlUmVmbGVjdGlvbktleWAsIGFuZCA6ZnVuYzpgfl93aW5yZWcuUXVlcnlSZWZsZWN0aW9uS2V5YAorICB3ZXJlIGFsc28gdGVzdGVkIGFuZCBkb2N1bWVudGVkLgogICAoSW1wbGVtZW50ZWQgYnkgQnJpYW4gQ3VydGluOiA6aXNzdWU6YDczNDdgLikKIAogKiBUaGUgbmV3IDpjOmZ1bmM6YF9iZWdpbnRocmVhZGV4YCBBUEkgaXMgdXNlZCB0byBzdGFydCB0aHJlYWRzLCBhbmQKQEAgLTIyODAsNyArMjMyMCw3IEBACiAqIFRoZSA6ZnVuYzpgb3Mua2lsbGAgZnVuY3Rpb24gbm93IHdvcmtzIG9uIFdpbmRvd3MuICBUaGUgc2lnbmFsIHZhbHVlCiAgIGNhbiBiZSB0aGUgY29uc3RhbnRzIDpjb25zdDpgQ1RSTF9DX0VWRU5UYCwKICAgOmNvbnN0OmBDVFJMX0JSRUFLX0VWRU5UYCwgb3IgYW55IGludGVnZXIuICBUaGUgZmlyc3QgdHdvIGNvbnN0YW50cwotICB3aWxsIHNlbmQgQ29udHJvbC1DIGFuZCBDb250cm9sLUJyZWFrIGtleXN0cm9rZSBldmVudHMgdG8KKyAgd2lsbCBzZW5kIDprYmQ6YENvbnRyb2wtQ2AgYW5kIDprYmQ6YENvbnRyb2wtQnJlYWtgIGtleXN0cm9rZSBldmVudHMgdG8KICAgc3VicHJvY2Vzc2VzOyBhbnkgb3RoZXIgdmFsdWUgd2lsbCB1c2UgdGhlIDpjOmZ1bmM6YFRlcm1pbmF0ZVByb2Nlc3NgCiAgIEFQSS4gIChDb250cmlidXRlZCBieSBNaWtpIFRlYmVrYTsgOmlzc3VlOmAxMjIwMjEyYC4pCiAKQEAgLTIzMjksNyArMjM2OSw3IEBACiAgIGF0dHJpYnV0ZXMgb2YgdGhlIHJlc3VsdGluZyBjb2RlIG9iamVjdHMgYXJlIG92ZXJ3cml0dGVuIHdoZW4gdGhlCiAgIG9yaWdpbmFsIGZpbGVuYW1lIGlzIG9ic29sZXRlLiAgVGhpcyBjYW4gaGFwcGVuIGlmIHRoZSBmaWxlIGhhcyBiZWVuCiAgIHJlbmFtZWQsIG1vdmVkLCBvciBpcyBhY2Nlc3NlZCB0aHJvdWdoIGRpZmZlcmVudCBwYXRocy4gIChQYXRjaCBieQotICDFvWlnYSBTZWlsbmFjaHQgYW5kIEplYW4tUGF1bCBDYWxkZXJvbmU7IDppc3N1ZTpgMTE4MDE5M2AuKQorICBaaWdhIFNlaWxuYWNodCBhbmQgSmVhbi1QYXVsIENhbGRlcm9uZTsgOmlzc3VlOmAxMTgwMTkzYC4pCiAKICogVGhlIDpmaWxlOmByZWdydGVzdC5weWAgc2NyaXB0IG5vdyB0YWtlcyBhIDpvcHRpb246YC0tcmFuZHNlZWQ9YAogICBzd2l0Y2ggdGhhdCB0YWtlcyBhbiBpbnRlZ2VyIHRoYXQgd2lsbCBiZSB1c2VkIGFzIHRoZSByYW5kb20gc2VlZApAQCAtMjM4NywyMCArMjQyNywyMCBAQAogCiBJbiB0aGUgc3RhbmRhcmQgbGlicmFyeToKIAotKiBPcGVyYXRpb25zIHdpdGggOmNsYXNzOmBkYXRldGltZWAgaW5zdGFuY2VzIHRoYXQgcmVzdWx0ZWQgaW4gYSB5ZWFyCisqIE9wZXJhdGlvbnMgd2l0aCA6Y2xhc3M6YH5kYXRldGltZS5kYXRldGltZWAgaW5zdGFuY2VzIHRoYXQgcmVzdWx0ZWQgaW4gYSB5ZWFyCiAgIGZhbGxpbmcgb3V0c2lkZSB0aGUgc3VwcG9ydGVkIHJhbmdlIGRpZG4ndCBhbHdheXMgcmFpc2UKICAgOmV4YzpgT3ZlcmZsb3dFcnJvcmAuICBTdWNoIGVycm9ycyBhcmUgbm93IGNoZWNrZWQgbW9yZSBjYXJlZnVsbHkKICAgYW5kIHdpbGwgbm93IHJhaXNlIHRoZSBleGNlcHRpb24uIChSZXBvcnRlZCBieSBNYXJrIExlYW5kZXIsIHBhdGNoCiAgIGJ5IEFuYW5kIEIuIFBpbGxhaSBhbmQgQWxleGFuZGVyIEJlbG9wb2xza3k7IDppc3N1ZTpgNzE1MGAuKQogCi0qIFdoZW4gdXNpbmcgOmNsYXNzOmBEZWNpbWFsYCBpbnN0YW5jZXMgd2l0aCBhIHN0cmluZydzCisqIFdoZW4gdXNpbmcgOmNsYXNzOmB+ZGVjaW1hbC5EZWNpbWFsYCBpbnN0YW5jZXMgd2l0aCBhIHN0cmluZydzCiAgIDptZXRoOmBmb3JtYXRgIG1ldGhvZCwgdGhlIGRlZmF1bHQgYWxpZ25tZW50IHdhcyBwcmV2aW91c2x5CiAgIGxlZnQtYWxpZ25tZW50LiAgVGhpcyBoYXMgYmVlbiBjaGFuZ2VkIHRvIHJpZ2h0LWFsaWdubWVudCwgd2hpY2ggbWlnaHQKICAgY2hhbmdlIHRoZSBvdXRwdXQgb2YgeW91ciBwcm9ncmFtcy4KICAgKENoYW5nZWQgYnkgTWFyayBEaWNraW5zb247IDppc3N1ZTpgNjg1N2AuKQogCiAgIENvbXBhcmlzb25zIGludm9sdmluZyBhIHNpZ25hbGluZyBOYU4gdmFsdWUgKG9yIGBgc05BTmBgKSBub3cgc2lnbmFsCi0gIDpjb25zdDpgSW52YWxpZE9wZXJhdGlvbmAgaW5zdGVhZCBvZiBzaWxlbnRseSByZXR1cm5pbmcgYSB0cnVlIG9yCisgIDpjb25zdDpgfmRlY2ltYWwuSW52YWxpZE9wZXJhdGlvbmAgaW5zdGVhZCBvZiBzaWxlbnRseSByZXR1cm5pbmcgYSB0cnVlIG9yCiAgIGZhbHNlIHZhbHVlIGRlcGVuZGluZyBvbiB0aGUgY29tcGFyaXNvbiBvcGVyYXRvci4gIFF1aWV0IE5hTiB2YWx1ZXMKICAgKG9yIGBgTmFOYGApIGFyZSBub3cgaGFzaGFibGUuICAoRml4ZWQgYnkgTWFyayBEaWNraW5zb247CiAgIDppc3N1ZTpgNzI3OWAuKQpAQCAtMjQxMSw3ICsyNDUxLDcgQEAKICAgb3IgY29tbWVudCAod2hpY2ggbG9va3MgbGlrZSBgPCEtLSBjb21tZW50IC0tPmApLgogICAoUGF0Y2ggYnkgTmVpbCBNdWxsZXI7IDppc3N1ZTpgMjc0NmAuKQogCi0qIFRoZSA6bWV0aDpgcmVhZGxpbmVgIG1ldGhvZCBvZiA6Y2xhc3M6YFN0cmluZ0lPYCBvYmplY3RzIG5vdyBkb2VzCisqIFRoZSA6bWV0aDpgflN0cmluZ0lPLlN0cmluZ0lPLnJlYWRsaW5lYCBtZXRob2Qgb2YgOmNsYXNzOmB+U3RyaW5nSU8uU3RyaW5nSU9gIG9iamVjdHMgbm93IGRvZXMKICAgbm90aGluZyB3aGVuIGEgbmVnYXRpdmUgbGVuZ3RoIGlzIHJlcXVlc3RlZCwgYXMgb3RoZXIgZmlsZS1saWtlCiAgIG9iamVjdHMgZG8uICAoOmlzc3VlOmA3MzQ4YCkuCiAKQEAgLTI0NzAsNiArMjUxMCw3MyBAQAogLi4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiAKKy4uIF9weTI3LW1haW50ZW5hbmNlLWVuaGFuY2VtZW50czoKKworTmV3IEZlYXR1cmVzIEFkZGVkIHRvIFB5dGhvbiAyLjcgTWFpbnRlbmFuY2UgUmVsZWFzZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK05ldyBmZWF0dXJlcyBtYXkgYmUgYWRkZWQgdG8gUHl0aG9uIDIuNyBtYWludGVuYW5jZSByZWxlYXNlcyB3aGVuIHRoZQorc2l0dWF0aW9uIGdlbnVpbmVseSBjYWxscyBmb3IgaXQuIEFueSBzdWNoIGFkZGl0aW9ucyBtdXN0IGdvIHRocm91Z2gKK3RoZSBQeXRob24gRW5oYW5jZW1lbnQgUHJvcG9zYWwgcHJvY2VzcywgYW5kIG1ha2UgYSBjb21wZWxsaW5nIGNhc2UgZm9yIHdoeQordGhleSBjYW4ndCBiZSBhZGVxdWF0ZWx5IGFkZHJlc3NlZCBieSBlaXRoZXIgYWRkaW5nIHRoZSBuZXcgZmVhdHVyZSBzb2xlbHkgdG8KK1B5dGhvbiAzLCBvciBlbHNlIGJ5IHB1Ymxpc2hpbmcgaXQgb24gdGhlIFB5dGhvbiBQYWNrYWdlIEluZGV4LgorCitJbiBhZGRpdGlvbiB0byB0aGUgc3BlY2lmaWMgcHJvcG9zYWxzIGxpc3RlZCBiZWxvdywgdGhlcmUgaXMgYSBnZW5lcmFsCitleGVtcHRpb24gYWxsb3dpbmcgbmV3IGBgLTNgYCB3YXJuaW5ncyB0byBiZSBhZGRlZCBpbiBhbnkgUHl0aG9uIDIuNworbWFpbnRlbmFuY2UgcmVsZWFzZS4KKworCitQRVAgNDM0OiBJRExFIEVuaGFuY2VtZW50IEV4Y2VwdGlvbiBmb3IgQWxsIEJyYW5jaGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKzpwZXA6YDQzNGAgZGVzY3JpYmVzIGEgZ2VuZXJhbCBleGVtcHRpb24gZm9yIGNoYW5nZXMgbWFkZSB0byB0aGUgSURMRQorZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQgc2hpcHBlZCBhbG9uZyB3aXRoIFB5dGhvbi4gVGhpcyBleGVtcHRpb24gbWFrZXMgaXQKK3Bvc3NpYmxlIGZvciB0aGUgSURMRSBkZXZlbG9wZXJzIHRvIHByb3ZpZGUgYSBtb3JlIGNvbnNpc3RlbnQgdXNlcgorZXhwZXJpZW5jZSBhY3Jvc3MgYWxsIHN1cHBvcnRlZCB2ZXJzaW9ucyBvZiBQeXRob24gMiBhbmQgMy4KKworRm9yIGRldGFpbHMgb2YgYW55IElETEUgY2hhbmdlcywgcmVmZXIgdG8gdGhlIE5FV1MgZmlsZSBmb3IgdGhlIHNwZWNpZmljCityZWxlYXNlLgorCisKK1BFUCA0NjY6IE5ldHdvcmsgU2VjdXJpdHkgRW5oYW5jZW1lbnRzIGZvciBQeXRob24gMi43CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCis6cGVwOmA0NjZgIGRlc2NyaWJlcyBhIG51bWJlciBvZiBuZXR3b3JrIHNlY3VyaXR5IGVuaGFuY2VtZW50IHByb3Bvc2FscwordGhhdCBoYXZlIGJlZW4gYXBwcm92ZWQgZm9yIGluY2x1c2lvbiBpbiBQeXRob24gMi43IG1haW50ZW5hbmNlIHJlbGVhc2VzLAord2l0aCB0aGUgZmlyc3Qgb2YgdGhvc2UgY2hhbmdlcyBhcHBlYXJpbmcgaW4gdGhlIFB5dGhvbiAyLjcuNyByZWxlYXNlLgorCis6cGVwOmA0NjZgIHJlbGF0ZWQgZmVhdHVyZXMgYWRkZWQgaW4gUHl0aG9uIDIuNy43OgorCisqIDpmdW5jOmBobWFjLmNvbXBhcmVfZGlnZXN0YCB3YXMgYmFja3BvcnRlZCBmcm9tIFB5dGhvbiAzIHRvIG1ha2UgYSB0aW1pbmcKKyAgYXR0YWNrIHJlc2lzdGFudCBjb21wYXJpc29uIG9wZXJhdGlvbiBhdmFpbGFibGUgdG8gUHl0aG9uIDIgYXBwbGljYXRpb25zLgorICAoQ29udHJpYnV0ZWQgYnkgQWxleCBHYXlub3I7IDppc3N1ZTpgMjEzMDZgLikKKworKiBPcGVuU1NMIDEuMC4xZyB3YXMgdXBncmFkZWQgaW4gdGhlIG9mZmljaWFsIFdpbmRvd3MgaW5zdGFsbGVycyBwdWJsaXNoZWQgb24KKyAgcHl0aG9uLm9yZy4gKENvbnRyaWJ1dGVkIGJ5IFphY2hhcnkgV2FyZTsgOmlzc3VlOmAyMTQ2MmAuKQorCis6cGVwOmA0NjZgIHJlbGF0ZWQgZmVhdHVyZXMgYWRkZWQgaW4gUHl0aG9uIDIuNy44OgorCisqIDpmdW5jOmBoYXNobGliLnBia2RmMl9obWFjYCB3YXMgYmFja3BvcnRlZCBmcm9tIFB5dGhvbiAzIHRvIG1ha2UgYSBoYXNoaW5nCisgIGFsZ29yaXRobSBzdWl0YWJsZSBmb3Igc2VjdXJlIHBhc3N3b3JkIHN0b3JhZ2UgYnJvYWRseSBhdmFpbGFibGUgdG8gUHl0aG9uCisgIDIgYXBwbGljYXRpb25zLiAoQ29udHJpYnV0ZWQgYnkgQWxleCBHYXlub3I7IDppc3N1ZTpgMjEzMDRgLikKKworKiBPcGVuU1NMIDEuMC4xaCB3YXMgdXBncmFkZWQgZm9yIHRoZSBvZmZpY2lhbCBXaW5kb3dzIGluc3RhbGxlcnMgcHVibGlzaGVkIG9uCisgIHB5dGhvbi5vcmcuIChjb250cmlidXRlZCBieSBaYWNoYXJ5IFdhcmUgaW4gOmlzc3VlOmAyMTY3MWAgZm9yIENWRS0yMDE0LTAyMjQpCisKKzpwZXA6YDQ2NmAgcmVsYXRlZCBmZWF0dXJlcyBhZGRlZCBpbiBQeXRob24gMi43Ljk6CisKKyogTW9zdCBvZiBQeXRob24gMy40J3MgOm1vZDpgc3NsYCBtb2R1bGUgd2FzIGJhY2twb3J0ZWQuIFRoaXMgbWVhbnMgOm1vZDpgc3NsYAorICBub3cgc3VwcG9ydHMgU2VydmVyIE5hbWUgSW5kaWNhdGlvbiwgVExTMS54IHNldHRpbmdzLCBhY2Nlc3MgdG8gdGhlIHBsYXRmb3JtCisgIGNlcnRpZmljYXRlIHN0b3JlLCB0aGUgOmNsYXNzOmB+c3NsLlNTTENvbnRleHRgIGNsYXNzLCBhbmQgb3RoZXIKKyAgZmVhdHVyZXMuIChDb250cmlidXRlZCBieSBBbGV4IEdheW5vciBhbmQgRGF2aWQgUmVpZDsgOmlzc3VlOmAyMTMwOGAuKQorCisqIDpmdW5jOmBvcy51cmFuZG9tYCB3YXMgY2hhbmdlZCB0byBjYWNoZSBhIGZpbGUgZGVzY3JpcHRvciB0byBgYC9kZXYvdXJhbmRvbWBgCisgIGluc3RlYWQgb2YgcmVvcGVuaW5nIGBgL2Rldi91cmFuZG9tYGAgb24gZXZlcnkgY2FsbC4gKENvbnRyaWJ1dGVkIGJ5IEFsZXgKKyAgR2F5bm9yOyA6aXNzdWU6YDIxMzA1YC4pCisKKworLi4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCiAuLiBfYWNrczI3OgogCiBBY2tub3dsZWRnZW1lbnRzCmRpZmYgLS1naXQgYS9Eb2Mvd2hhdHNuZXcvMy4wLnJzdCBiL0RvYy93aGF0c25ldy8zLjAucnN0CmluZGV4IDcxYjg3YjguLjk5NDExMzAgMTAwNjQ0Ci0tLSBhL0RvYy93aGF0c25ldy8zLjAucnN0CisrKyBiL0RvYy93aGF0c25ldy8zLjAucnN0CkBAIC0xNjQsNyArMTY0LDcgQEAKIAogICBJZiB0aGUgaW5wdXQgc2VxdWVuY2VzIGFyZSBub3Qgb2YgZXF1YWwgbGVuZ3RoLCA6ZnVuYzpgbWFwYCB3aWxsCiAgIHN0b3AgYXQgdGhlIHRlcm1pbmF0aW9uIG9mIHRoZSBzaG9ydGVzdCBvZiB0aGUgc2VxdWVuY2VzLiBGb3IgZnVsbAotICBjb21wYXRpYmlsaXR5IHdpdGggYG1hcGAgZnJvbSBQeXRob24gMi54LCBhbHNvIHdyYXAgdGhlIHNlcXVlbmNlcyBpbgorICBjb21wYXRpYmlsaXR5IHdpdGggOmZ1bmM6YG1hcGAgZnJvbSBQeXRob24gMi54LCBhbHNvIHdyYXAgdGhlIHNlcXVlbmNlcyBpbgogICA6ZnVuYzpgaXRlcnRvb2xzLnppcF9sb25nZXN0YCwgZS5nLiBgYG1hcChmdW5jLCAqc2VxdWVuY2VzKWBgIGJlY29tZXMKICAgYGBsaXN0KG1hcChmdW5jLCBpdGVydG9vbHMuemlwX2xvbmdlc3QoKnNlcXVlbmNlcykpKWBgLgogCmRpZmYgLS1naXQgYS9Eb2Mvd2hhdHNuZXcvMy4xLnJzdCBiL0RvYy93aGF0c25ldy8zLjEucnN0CmluZGV4IGFiMzI3ZjUuLmMxYTE2ODcgMTAwNjQ0Ci0tLSBhL0RvYy93aGF0c25ldy8zLjEucnN0CisrKyBiL0RvYy93aGF0c25ldy8zLjEucnN0CkBAIC0xNzIsNyArMTcyLDcgQEAKICAgbmVlZGVkIGFuZCBpcyBub3cgZGVwcmVjYXRlZC4KIAogICAoQ29udHJpYnV0ZWQgYnkgR2VvcmcgQnJhbmRsIGFuZCBNYXR0aWFzIEJyw6RuZHN0csO2bTsKLSAgYGFwcHNwb3QgaXNzdWUgNTMwOTQgPGh0dHA6Ly9jb2RlcmV2aWV3LmFwcHNwb3QuY29tLzUzMDk0PmBfLikKKyAgYGFwcHNwb3QgaXNzdWUgNTMwOTQgPGh0dHBzOi8vY29kZXJldmlldy5hcHBzcG90LmNvbS81MzA5ND5gXy4pCiAKICogYGByb3VuZCh4LCBuKWBgIG5vdyByZXR1cm5zIGFuIGludGVnZXIgaWYgKngqIGlzIGFuIGludGVnZXIuCiAgIFByZXZpb3VzbHkgaXQgcmV0dXJuZWQgYSBmbG9hdDo6CkBAIC0yMzgsNyArMjM4LDcgQEAKICAgKENvbnRyaWJ1dGVkIGJ5IEd1aWxoZXJtZSBQb2xvOyA6aXNzdWU6YDI5ODNgLikKIAogKiBUaGUgOmNsYXNzOmBnemlwLkd6aXBGaWxlYCBhbmQgOmNsYXNzOmBiejIuQloyRmlsZWAgY2xhc3NlcyBub3cgc3VwcG9ydAotICB0aGUgY29udGV4dCBtYW5hZ2VyIHByb3RvY29sOjoKKyAgdGhlIGNvbnRleHQgbWFuYWdlbWVudCBwcm90b2NvbDo6CiAKICAgICAgICAgPj4+ICMgQXV0b21hdGljYWxseSBjbG9zZSBmaWxlIGFmdGVyIHdyaXRpbmcKICAgICAgICAgPj4+IHdpdGggZ3ppcC5HemlwRmlsZShmaWxlbmFtZSwgIndiIikgYXMgZjoKQEAgLTMzNiw3ICszMzYsNyBAQAogICAoQ29udHJpYnV0ZWQgYnkgRGF2aWQgTGFiYW47IDppc3N1ZTpgNDczOWAuKQogCiAqIFRoZSA6bW9kOmB1bml0dGVzdGAgbW9kdWxlIG5vdyBzdXBwb3J0cyBza2lwcGluZyBpbmRpdmlkdWFsIHRlc3RzIG9yIGNsYXNzZXMKLSAgb2YgdGVzdHMuIEFuZCBpdCBzdXBwb3J0cyBtYXJraW5nIGEgdGVzdCBhcyBhIGV4cGVjdGVkIGZhaWx1cmUsIGEgdGVzdCB0aGF0CisgIG9mIHRlc3RzLiBBbmQgaXQgc3VwcG9ydHMgbWFya2luZyBhIHRlc3QgYXMgYW4gZXhwZWN0ZWQgZmFpbHVyZSwgYSB0ZXN0IHRoYXQKICAgaXMga25vd24gdG8gYmUgYnJva2VuLCBidXQgc2hvdWxkbid0IGJlIGNvdW50ZWQgYXMgYSBmYWlsdXJlIG9uIGEKICAgVGVzdFJlc3VsdDo6CiAKZGlmZiAtLWdpdCBhL0RvYy93aGF0c25ldy8zLjIucnN0IGIvRG9jL3doYXRzbmV3LzMuMi5yc3QKaW5kZXggYWE2OWRmMi4uNTgyMjUwNCAxMDA2NDQKLS0tIGEvRG9jL3doYXRzbmV3LzMuMi5yc3QKKysrIGIvRG9jL3doYXRzbmV3LzMuMi5yc3QKQEAgLTUwLDcgKzUwLDcgQEAKIAogVGhpcyBhcnRpY2xlIGV4cGxhaW5zIHRoZSBuZXcgZmVhdHVyZXMgaW4gUHl0aG9uIDMuMiBhcyBjb21wYXJlZCB0byAzLjEuICBJdAogZm9jdXNlcyBvbiBhIGZldyBoaWdobGlnaHRzIGFuZCBnaXZlcyBhIGZldyBleGFtcGxlcy4gIEZvciBmdWxsIGRldGFpbHMsIHNlZSB0aGUKLWBNaXNjL05FV1MgPGh0dHA6Ly9oZy5weXRob24ub3JnL2NweXRob24vZmlsZS8zLjIvTWlzYy9ORVdTPmBfIGZpbGUuCitgTWlzYy9ORVdTIDxodHRwczovL2hnLnB5dGhvbi5vcmcvY3B5dGhvbi9maWxlLzMuMi9NaXNjL05FV1M+YF8gZmlsZS4KIAogLi4gc2VlYWxzbzo6CiAKQEAgLTUyMiw3ICs1MjIsNyBAQAogICAoUHJvcG9zZWQgYW5kIGltcGxlbWVudGVkIGJ5IE1hcmsgRGlja2luc29uOyA6aXNzdWU6YDkzMzdgLikKIAogKiA6Y2xhc3M6YG1lbW9yeXZpZXdgIG9iamVjdHMgbm93IGhhdmUgYSA6bWV0aDpgfm1lbW9yeXZpZXcucmVsZWFzZSgpYCBtZXRob2QKLSAgYW5kIHRoZXkgYWxzbyBub3cgc3VwcG9ydCB0aGUgY29udGV4dCBtYW5hZ2VyIHByb3RvY29sLiAgVGhpcyBhbGxvd3MgdGltZWx5CisgIGFuZCB0aGV5IGFsc28gbm93IHN1cHBvcnQgdGhlIGNvbnRleHQgbWFuYWdlbWVudCBwcm90b2NvbC4gIFRoaXMgYWxsb3dzIHRpbWVseQogICByZWxlYXNlIG9mIGFueSByZXNvdXJjZXMgdGhhdCB3ZXJlIGFjcXVpcmVkIHdoZW4gcmVxdWVzdGluZyBhIGJ1ZmZlciBmcm9tIHRoZQogICBvcmlnaW5hbCBvYmplY3QuCiAKQEAgLTc4OCw3ICs3ODgsNyBAQAogICA6aXNzdWU6YDg4MTRgLikKIAogKiBUbyBoZWxwIHdyaXRlIGNsYXNzZXMgd2l0aCByaWNoIGNvbXBhcmlzb24gbWV0aG9kcywgYSBuZXcgZGVjb3JhdG9yCi0gIDpmdW5jOmBmdW5jdG9vbHMudG90YWxfb3JkZXJpbmdgIHdpbGwgdXNlIGEgZXhpc3RpbmcgZXF1YWxpdHkgYW5kIGluZXF1YWxpdHkKKyAgOmZ1bmM6YGZ1bmN0b29scy50b3RhbF9vcmRlcmluZ2Agd2lsbCB1c2UgZXhpc3RpbmcgZXF1YWxpdHkgYW5kIGluZXF1YWxpdHkKICAgbWV0aG9kcyB0byBmaWxsIGluIHRoZSByZW1haW5pbmcgbWV0aG9kcy4KIAogICBGb3IgZXhhbXBsZSwgc3VwcGx5aW5nICpfX2VxX18qIGFuZCAqX19sdF9fKiB3aWxsIGVuYWJsZQpAQCAtODE2LDcgKzgxNiw3IEBACiAgID4+PiBzb3J0ZWQoaXRlcmFibGUsIGtleT1jbXBfdG9fa2V5KGxvY2FsZS5zdHJjb2xsKSkKIAogICBGb3Igc29ydGluZyBleGFtcGxlcyBhbmQgYSBicmllZiBzb3J0aW5nIHR1dG9yaWFsLCBzZWUgdGhlIGBTb3J0aW5nIEhvd1RvCi0gIDxodHRwOi8vd2lraS5weXRob24ub3JnL21vaW4vSG93VG8vU29ydGluZy8+YF8gdHV0b3JpYWwuCisgIDxodHRwczovL3dpa2kucHl0aG9uLm9yZy9tb2luL0hvd1RvL1NvcnRpbmcvPmBfIHR1dG9yaWFsLgogCiAgIChDb250cmlidXRlZCBieSBSYXltb25kIEhldHRpbmdlci4pCiAKQEAgLTEwMjAsNyArMTAyMCw3IEBACiA6aXNzdWU6YDUwOTRgLCA6aXNzdWU6YDY2NDFgLCA6aXNzdWU6YDI3MDZgLCA6aXNzdWU6YDE3Nzc0MTJgLCA6aXNzdWU6YDgwMTNgLAogYW5kIDppc3N1ZTpgMTA4MjdgLikKIAotLi4gWFhYIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWU/JTQwc2VhcmNoX3RleHQ9ZGF0ZXRpbWUmJTQwc29ydD0tYWN0aXZpdHkKKy4uIFhYWCBodHRwczovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZT8lNDBzZWFyY2hfdGV4dD1kYXRldGltZSYlNDBzb3J0PS1hY3Rpdml0eQogCiBtYXRoCiAtLS0tCkBAIC0xMzE1LDcgKzEzMTUsNyBAQAogZnRwCiAtLS0KIAotVGhlIDpjbGFzczpgZnRwbGliLkZUUGAgY2xhc3Mgbm93IHN1cHBvcnRzIHRoZSBjb250ZXh0IG1hbmFnZXIgcHJvdG9jb2wgdG8KK1RoZSA6Y2xhc3M6YGZ0cGxpYi5GVFBgIGNsYXNzIG5vdyBzdXBwb3J0cyB0aGUgY29udGV4dCBtYW5hZ2VtZW50IHByb3RvY29sIHRvCiB1bmNvbmRpdGlvbmFsbHkgY29uc3VtZSA6ZXhjOmBzb2NrZXQuZXJyb3JgIGV4Y2VwdGlvbnMgYW5kIHRvIGNsb3NlIHRoZSBGVFAKIGNvbm5lY3Rpb24gd2hlbiBkb25lOjoKIApAQCAtMTM5OSw3ICsxMzk5LDcgQEAKIAogQWxzbywgdGhlIDpjbGFzczpgemlwZmlsZS5aaXBFeHRGaWxlYCBjbGFzcyB3YXMgcmV3b3JrZWQgaW50ZXJuYWxseSB0byByZXByZXNlbnQKIGZpbGVzIHN0b3JlZCBpbnNpZGUgYW4gYXJjaGl2ZS4gIFRoZSBuZXcgaW1wbGVtZW50YXRpb24gaXMgc2lnbmlmaWNhbnRseSBmYXN0ZXIKLWFuZCBjYW4gYmUgd3JhcHBlZCBpbiBhIDpjbGFzczpgaW8uQnVmZmVyZWRSZWFkZXJgIG9iamVjdCBmb3IgbW9yZSBzcGVlZHVwcy4gIEl0CithbmQgY2FuIGJlIHdyYXBwZWQgaW4gYW4gOmNsYXNzOmBpby5CdWZmZXJlZFJlYWRlcmAgb2JqZWN0IGZvciBtb3JlIHNwZWVkdXBzLiAgSXQKIGFsc28gc29sdmVzIGFuIGlzc3VlIHdoZXJlIGludGVybGVhdmVkIGNhbGxzIHRvICpyZWFkKiBhbmQgKnJlYWRsaW5lKiBnYXZlIHRoZQogd3JvbmcgcmVzdWx0cy4KIApAQCAtMTU5NSw3ICsxNTk1LDcgQEAKICAgZGVzY3JpcHRvci4gIFRoZSBsYXR0ZXIgY2FuIHRoZW4gYmUgcmV1c2VkIGZvciBvdGhlciBwdXJwb3Nlcy4KICAgKEFkZGVkIGJ5IEFudG9pbmUgUGl0cm91OyA6aXNzdWU6YDg1MjRgLikKIAotKiA6ZnVuYzpgc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uYCBub3cgc3VwcG9ydHMgdGhlIGNvbnRleHQgbWFuYWdlciBwcm90b2NvbAorKiA6ZnVuYzpgc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uYCBub3cgc3VwcG9ydHMgdGhlIGNvbnRleHQgbWFuYWdlbWVudCBwcm90b2NvbAogICB0byB1bmNvbmRpdGlvbmFsbHkgY29uc3VtZSA6ZXhjOmBzb2NrZXQuZXJyb3JgIGV4Y2VwdGlvbnMgYW5kIHRvIGNsb3NlIHRoZQogICBzb2NrZXQgd2hlbiBkb25lLgogICAoQ29udHJpYnV0ZWQgYnkgR2lhbXBhb2xvIFJvZG9sw6A7IDppc3N1ZTpgOTc5NGAuKQpAQCAtMjI4Myw3ICsyMjgzLDcgQEAKIAogICBBZGRpdGlvbmFsIGRldGFpbHMgYWJvdXQgdGhlIGltcGxlbWVudGF0aW9uIGNhbiBiZSByZWFkIGZyb20gYSBgcHl0aG9uLWRldgogICBtYWlsaW5nLWxpc3QgbWVzc2FnZQotICA8aHR0cDovL21haWwucHl0aG9uLm9yZy9waXBlcm1haWwvcHl0aG9uLWRldi8yMDA5LU9jdG9iZXIvMDkzMzIxLmh0bWw+YF8KKyAgPGh0dHBzOi8vbWFpbC5weXRob24ub3JnL3BpcGVybWFpbC9weXRob24tZGV2LzIwMDktT2N0b2Jlci8wOTMzMjEuaHRtbD5gXwogICAoaG93ZXZlciwgInByaW9yaXR5IHJlcXVlc3RzIiBhcyBleHBvc2VkIGluIHRoaXMgbWVzc2FnZSBoYXZlIG5vdCBiZWVuIGtlcHQKICAgZm9yIGluY2x1c2lvbikuCiAKQEAgLTI0NjksNyArMjQ2OSw3IEBACiAKIEluIGFkZGl0aW9uIHRvIHRoZSBleGlzdGluZyBTdWJ2ZXJzaW9uIGNvZGUgcmVwb3NpdG9yeSBhdCBodHRwOi8vc3ZuLnB5dGhvbi5vcmcKIHRoZXJlIGlzIG5vdyBhIGBNZXJjdXJpYWwgPGh0dHA6Ly9tZXJjdXJpYWwuc2VsZW5pYy5jb20vPmBfIHJlcG9zaXRvcnkgYXQKLWh0dHA6Ly9oZy5weXRob24ub3JnL1wgLgoraHR0cHM6Ly9oZy5weXRob24ub3JnL1wgLgogCiBBZnRlciB0aGUgMy4yIHJlbGVhc2UsIHRoZXJlIGFyZSBwbGFucyB0byBzd2l0Y2ggdG8gTWVyY3VyaWFsIGFzIHRoZSBwcmltYXJ5CiByZXBvc2l0b3J5LiAgVGhpcyBkaXN0cmlidXRlZCB2ZXJzaW9uIGNvbnRyb2wgc3lzdGVtIHNob3VsZCBtYWtlIGl0IGVhc2llciBmb3IKQEAgLTI0NzgsNyArMjQ3OCw3IEBACiAKIFRvIGxlYXJuIHRvIHVzZSB0aGUgbmV3IHZlcnNpb24gY29udHJvbCBzeXN0ZW0sIHNlZSB0aGUgYHR1dG9yaWFsIGJ5IEpvZWwKIFNwb2xza3kgPGh0dHA6Ly9oZ2luaXQuY29tPmBfIG9yIHRoZSBgR3VpZGUgdG8gTWVyY3VyaWFsIFdvcmtmbG93cwotPGh0dHA6Ly9tZXJjdXJpYWwuc2VsZW5pYy5jb20vZ3VpZGUvPmBfLgorPGh0dHA6Ly9tZXJjdXJpYWwuc2VsZW5pYy5jb20vZ3VpZGU+YF8uCiAKIAogQnVpbGQgYW5kIEMgQVBJIENoYW5nZXMKQEAgLTI1NjAsNyArMjU2MCw3IEBACiBidWlsZCwgdGhlcmUgaXMgYSBrbm93biBwcm9ibGVtIHdpdGggdGhlIGRlZmF1bHQgVGNsL1RrIG9uIE1hYyBPUyBYIDEwLjYuCiBBY2NvcmRpbmdseSwgd2UgcmVjb21tZW5kIGluc3RhbGxpbmcgYW4gdXBkYXRlZCBhbHRlcm5hdGl2ZSBzdWNoIGFzCiBgQWN0aXZlU3RhdGUgVGNsL1RrIDguNS45IDxodHRwOi8vd3d3LmFjdGl2ZXN0YXRlLmNvbS9hY3RpdmV0Y2wvZG93bmxvYWRzPmBfXC4KLVNlZSBodHRwOi8vd3d3LnB5dGhvbi5vcmcvZG93bmxvYWQvbWFjL3RjbHRrLyBmb3IgYWRkaXRpb25hbCBkZXRhaWxzLgorU2VlIGh0dHBzOi8vd3d3LnB5dGhvbi5vcmcvZG93bmxvYWQvbWFjL3RjbHRrLyBmb3IgYWRkaXRpb25hbCBkZXRhaWxzLgogCiBQb3J0aW5nIHRvIFB5dGhvbiAzLjIKID09PT09PT09PT09PT09PT09PT09PQpAQCAtMjY0OSw3ICsyNjQ5LDcgQEAKICAgICAgICAgICAgICAgICBvdXRmaWxlLndyaXRlKGxpbmUpCiAKICAgKENvbnRyaWJ1dGVkIGJ5IEdlb3JnIEJyYW5kbCBhbmQgTWF0dGlhcyBCcsOkbmRzdHLDtm07Ci0gIGBhcHBzcG90IGlzc3VlIDUzMDk0IDxodHRwOi8vY29kZXJldmlldy5hcHBzcG90LmNvbS81MzA5ND5gXy4pCisgIGBhcHBzcG90IGlzc3VlIDUzMDk0IDxodHRwczovL2NvZGVyZXZpZXcuYXBwc3BvdC5jb20vNTMwOTQ+YF8uKQogCiAqIDpmdW5jOmBzdHJ1Y3QucGFja2Agbm93IG9ubHkgYWxsb3dzIGJ5dGVzIGZvciB0aGUgYGBzYGAgc3RyaW5nIHBhY2sgY29kZS4KICAgRm9ybWVybHksIGl0IHdvdWxkIGFjY2VwdCB0ZXh0IGFyZ3VtZW50cyBhbmQgaW1wbGljaXRseSBlbmNvZGUgdGhlbSB0byBieXRlcwpkaWZmIC0tZ2l0IGEvRG9jL3doYXRzbmV3LzMuMy5yc3QgYi9Eb2Mvd2hhdHNuZXcvMy4zLnJzdAppbmRleCBjZGE2M2U0Li4wOTRlZmY4IDEwMDY0NAotLS0gYS9Eb2Mvd2hhdHNuZXcvMy4zLnJzdAorKysgYi9Eb2Mvd2hhdHNuZXcvMy4zLnJzdApAQCAtNDQsNyArNDQsNyBAQAogCiBUaGlzIGFydGljbGUgZXhwbGFpbnMgdGhlIG5ldyBmZWF0dXJlcyBpbiBQeXRob24gMy4zLCBjb21wYXJlZCB0byAzLjIuCiBQeXRob24gMy4zIHdhcyByZWxlYXNlZCBvbiBTZXB0ZW1iZXIgMjksIDIwMTIuICBGb3IgZnVsbCBkZXRhaWxzLAotc2VlIHRoZSBgY2hhbmdlbG9nIDxodHRwOi8vZG9jcy5weXRob24ub3JnLzMuMy93aGF0c25ldy9jaGFuZ2Vsb2cuaHRtbD5gXy4KK3NlZSB0aGUgYGNoYW5nZWxvZyA8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy4zL3doYXRzbmV3L2NoYW5nZWxvZy5odG1sPmBfLgogCiAuLiBzZWVhbHNvOjoKIApAQCAtMTcxLDcgKzE3MSw3IEBACiAqIE11bHRpLWRpbWVuc2lvbmFsIGNvbXBhcmlzb25zIGFyZSBzdXBwb3J0ZWQgZm9yIGFueSBhcnJheSB0eXBlLgogCiAqIE9uZS1kaW1lbnNpb25hbCBtZW1vcnl2aWV3cyBvZiBoYXNoYWJsZSAocmVhZC1vbmx5KSB0eXBlcyB3aXRoIGZvcm1hdHMgQiwKLSAgYiBvciBjIGFyZSBub3cgaGFzaGFibGUuIChDb250cmlidXRlZCBieSBBbnRvaW5lIFBpdHJvdSBpbiA6aXNzdWU6YDEzNDExYCkKKyAgYiBvciBjIGFyZSBub3cgaGFzaGFibGUuICAoQ29udHJpYnV0ZWQgYnkgQW50b2luZSBQaXRyb3UgaW4gOmlzc3VlOmAxMzQxMWAuKQogCiAqIEFyYml0cmFyeSBzbGljaW5nIG9mIGFueSAxLUQgYXJyYXlzIHR5cGUgaXMgc3VwcG9ydGVkLiBGb3IgZXhhbXBsZSwgaXQKICAgaXMgbm93IHBvc3NpYmxlIHRvIHJldmVyc2UgYSBtZW1vcnl2aWV3IGluIE8oMSkgYnkgdXNpbmcgYSBuZWdhdGl2ZSBzdGVwLgpAQCAtMTk2LDcgKzE5Niw3IEBACiAKICogRm9yIGZ1cnRoZXIgY2hhbmdlcyBzZWUgYEJ1aWxkIGFuZCBDIEFQSSBDaGFuZ2VzYF8gYW5kIGBQb3J0aW5nIEMgY29kZWBfLgogCi0oQ29udHJpYnV0ZWQgYnkgU3RlZmFuIEtyYWggaW4gOmlzc3VlOmAxMDE4MWApCisoQ29udHJpYnV0ZWQgYnkgU3RlZmFuIEtyYWggaW4gOmlzc3VlOmAxMDE4MWAuKQogCiAuLiBzZWVhbHNvOjoKIApAQCAtMjI4LDcgKzIyOCw3IEBACiAKIENoYW5nZXMgaW50cm9kdWNlZCBieSA6cGVwOmAzOTNgIGFyZSB0aGUgZm9sbG93aW5nOgogCi0qIFB5dGhvbiBub3cgYWx3YXlzIHN1cHBvcnRzIHRoZSBmdWxsIHJhbmdlIG9mIFVuaWNvZGUgY29kZXBvaW50cywgaW5jbHVkaW5nCisqIFB5dGhvbiBub3cgYWx3YXlzIHN1cHBvcnRzIHRoZSBmdWxsIHJhbmdlIG9mIFVuaWNvZGUgY29kZSBwb2ludHMsIGluY2x1ZGluZwogICBub24tQk1QIG9uZXMgKGkuZS4gZnJvbSBgYFUrMDAwMGBgIHRvIGBgVSsxMEZGRkZgYCkuICBUaGUgZGlzdGluY3Rpb24gYmV0d2VlbgogICBuYXJyb3cgYW5kIHdpZGUgYnVpbGRzIG5vIGxvbmdlciBleGlzdHMgYW5kIFB5dGhvbiBub3cgYmVoYXZlcyBsaWtlIGEgd2lkZQogICBidWlsZCwgZXZlbiB1bmRlciBXaW5kb3dzLgpAQCAtMjQ2LDcgKzI0Niw3IEBACiAgICAgc28gYGAnXFUwMDEwRkZGRidbMF1gYCBub3cgcmV0dXJucyBgYCdcVTAwMTBGRkZGJ2BgIGFuZCBub3QgYGAnXHVEQkZGJ2BgOwogCiAgICogYWxsIG90aGVyIGZ1bmN0aW9ucyBpbiB0aGUgc3RhbmRhcmQgbGlicmFyeSBub3cgY29ycmVjdGx5IGhhbmRsZQotICAgIG5vbi1CTVAgY29kZXBvaW50cy4KKyAgICBub24tQk1QIGNvZGUgcG9pbnRzLgogCiAqIFRoZSB2YWx1ZSBvZiA6ZGF0YTpgc3lzLm1heHVuaWNvZGVgIGlzIG5vdyBhbHdheXMgYGAxMTE0MTExYGAgKGBgMHgxMEZGRkZgYAogICBpbiBoZXhhZGVjaW1hbCkuICBUaGUgOmM6ZnVuYzpgUHlVbmljb2RlX0dldE1heGAgZnVuY3Rpb24gc3RpbGwgcmV0dXJucwpAQCAtMjU4LDEzICsyNTgsMTMgQEAKIFBlcmZvcm1hbmNlIGFuZCByZXNvdXJjZSB1c2FnZQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVRoZSBzdG9yYWdlIG9mIFVuaWNvZGUgc3RyaW5ncyBub3cgZGVwZW5kcyBvbiB0aGUgaGlnaGVzdCBjb2RlcG9pbnQgaW4gdGhlIHN0cmluZzoKK1RoZSBzdG9yYWdlIG9mIFVuaWNvZGUgc3RyaW5ncyBub3cgZGVwZW5kcyBvbiB0aGUgaGlnaGVzdCBjb2RlIHBvaW50IGluIHRoZSBzdHJpbmc6CiAKLSogcHVyZSBBU0NJSSBhbmQgTGF0aW4xIHN0cmluZ3MgKGBgVSswMDAwLVUrMDBGRmBgKSB1c2UgMSBieXRlIHBlciBjb2RlcG9pbnQ7CisqIHB1cmUgQVNDSUkgYW5kIExhdGluMSBzdHJpbmdzIChgYFUrMDAwMC1VKzAwRkZgYCkgdXNlIDEgYnl0ZSBwZXIgY29kZSBwb2ludDsKIAotKiBCTVAgc3RyaW5ncyAoYGBVKzAwMDAtVStGRkZGYGApIHVzZSAyIGJ5dGVzIHBlciBjb2RlcG9pbnQ7CisqIEJNUCBzdHJpbmdzIChgYFUrMDAwMC1VK0ZGRkZgYCkgdXNlIDIgYnl0ZXMgcGVyIGNvZGUgcG9pbnQ7CiAKLSogbm9uLUJNUCBzdHJpbmdzIChgYFUrMTAwMDAtVSsxMEZGRkZgYCkgdXNlIDQgYnl0ZXMgcGVyIGNvZGVwb2ludC4KKyogbm9uLUJNUCBzdHJpbmdzIChgYFUrMTAwMDAtVSsxMEZGRkZgYCkgdXNlIDQgYnl0ZXMgcGVyIGNvZGUgcG9pbnQuCiAKIFRoZSBuZXQgZWZmZWN0IGlzIHRoYXQgZm9yIG1vc3QgYXBwbGljYXRpb25zLCBtZW1vcnkgdXNhZ2Ugb2Ygc3RyaW5nCiBzdG9yYWdlIHNob3VsZCBkZWNyZWFzZSBzaWduaWZpY2FudGx5IC0gZXNwZWNpYWxseSBjb21wYXJlZCB0byBmb3JtZXIKQEAgLTMwNyw4ICszMDcsOCBAQAogUHl0aG9uIHZlcnNpb24gd2hlbiBhIG1vcmUgcmVjZW50IHZlcnNpb24gaXMgaW5zdGFsbGVkKS4KIAogSW4gYWRkaXRpb24gdG8gdGhlIGxhdW5jaGVyLCB0aGUgV2luZG93cyBpbnN0YWxsZXIgbm93IGluY2x1ZGVzIGFuCi1vcHRpb24gdG8gYWRkIHRoZSBuZXdseSBpbnN0YWxsZWQgUHl0aG9uIHRvIHRoZSBzeXN0ZW0gUEFUSCAoY29udHJpYnV0ZWQKLWJ5IEJyaWFuIEN1cnRpbiBpbiA6aXNzdWU6YDM1NjFgKS4KK29wdGlvbiB0byBhZGQgdGhlIG5ld2x5IGluc3RhbGxlZCBQeXRob24gdG8gdGhlIHN5c3RlbSBQQVRILiAgKENvbnRyaWJ1dGVkCitieSBCcmlhbiBDdXJ0aW4gaW4gOmlzc3VlOmAzNTYxYC4pCiAKIC4uIHNlZWFsc286OgogCkBAIC03ODEsNyArNzgxLDcgQEAKICAgQm90aCA6ZnVuYzpgdW5pY29kZWRhdGEubG9va3VwKClgIGFuZCBgYCdcTnsuLi59J2BgIG5vdyByZXNvbHZlIG5hbWUgYWxpYXNlcywKICAgYW5kIDpmdW5jOmB1bmljb2RlZGF0YS5sb29rdXAoKWAgcmVzb2x2ZXMgbmFtZWQgc2VxdWVuY2VzIHRvby4KIAotICAoQ29udHJpYnV0ZWQgYnkgRXppbyBNZWxvdHRpIGluIDppc3N1ZTpgMTI3NTNgKQorICAoQ29udHJpYnV0ZWQgYnkgRXppbyBNZWxvdHRpIGluIDppc3N1ZTpgMTI3NTNgLikKIAogKiBVbmljb2RlIGRhdGFiYXNlIHVwZGF0ZWQgdG8gVUNEIHZlcnNpb24gNi4xLjAKIApAQCAtNzkzLDcgKzc5Myw3IEBACiAgIG1ldGhvZHMgb2YgOmNsYXNzOmBieXRlc2AgYW5kIDpjbGFzczpgYnl0ZWFycmF5YCBvYmplY3RzIG5vdyBhY2NlcHQgYW4KICAgaW50ZWdlciBiZXR3ZWVuIDAgYW5kIDI1NSBhcyB0aGVpciBmaXJzdCBhcmd1bWVudC4KIAotICAoQ29udHJpYnV0ZWQgYnkgUGV0cmkgTGVodGluZW4gaW4gOmlzc3VlOmAxMjE3MGApCisgIChDb250cmlidXRlZCBieSBQZXRyaSBMZWh0aW5lbiBpbiA6aXNzdWU6YDEyMTcwYC4pCiAKICogVGhlIGBgcmp1c3QoKWBgLCBgYGxqdXN0KClgYCwgYW5kIGBgY2VudGVyKClgYCBtZXRob2RzIG9mIDpjbGFzczpgYnl0ZXNgCiAgIGFuZCA6Y2xhc3M6YGJ5dGVhcnJheWAgbm93IGFjY2VwdCBhIDpjbGFzczpgYnl0ZWFycmF5YCBmb3IgdGhlIGBgZmlsbGBgCkBAIC04NTQsNyArODU0LDcgQEAKICogVGhlIHNlcXVlbmNlIGRvY3VtZW50YXRpb24gaGFzIGJlZW4gc3Vic3RhbnRpYWxseSByZXdyaXR0ZW4gdG8gYmV0dGVyCiAgIGV4cGxhaW4gdGhlIGJpbmFyeS90ZXh0IHNlcXVlbmNlIGRpc3RpbmN0aW9uIGFuZCB0byBwcm92aWRlIHNwZWNpZmljCiAgIGRvY3VtZW50YXRpb24gc2VjdGlvbnMgZm9yIHRoZSBpbmRpdmlkdWFsIGJ1aWx0aW4gc2VxdWVuY2UgdHlwZXMKLSAgKDppc3N1ZTpgNDk2NmApCisgICg6aXNzdWU6YDQ5NjZgKS4KIAogCiBOZXcgTW9kdWxlcwpAQCAtODkxLDcgKzg5MSw3IEBACiBvYmplY3RzIHJlcHJlc2VudGluZyBJUHY0IGFuZCBJUHY2IGFkZHJlc3NlcywgbmV0d29ya3MgYW5kIGludGVyZmFjZXMgKGkuZS4KIGFuIElQIGFkZHJlc3MgYXNzb2NpYXRlZCB3aXRoIGEgc3BlY2lmaWMgSVAgc3VibmV0KS4KIAotKENvbnRyaWJ1dGVkIGJ5IEdvb2dsZSBhbmQgUGV0ZXIgTW9vZHkgaW4gOnBlcDpgMzE0NGApCisoQ29udHJpYnV0ZWQgYnkgR29vZ2xlIGFuZCBQZXRlciBNb29keSBpbiA6cGVwOmAzMTQ0YC4pCiAKIGx6bWEKIC0tLS0KQEAgLTkwMCw3ICs5MDAsNyBAQAogdXNpbmcgdGhlIExaTUEgYWxnb3JpdGhtLCBpbmNsdWRpbmcgc3VwcG9ydCBmb3IgdGhlIGBgLnh6YGAgYW5kIGBgLmx6bWFgYAogZmlsZSBmb3JtYXRzLgogCi0oQ29udHJpYnV0ZWQgYnkgTmFkZWVtIFZhd2RhIGFuZCBQZXIgw5h5dmluZCBLYXJsc2VuIGluIDppc3N1ZTpgNjcxNWApCisoQ29udHJpYnV0ZWQgYnkgTmFkZWVtIFZhd2RhIGFuZCBQZXIgw5h5dmluZCBLYXJsc2VuIGluIDppc3N1ZTpgNjcxNWAuKQogCiAKIEltcHJvdmVkIE1vZHVsZXMKQEAgLTkyMSw3ICs5MjEsNyBAQAogICAqIDpjbGFzczpgYWJjLmFic3RyYWN0c3RhdGljbWV0aG9kYCBoYXMgYmVlbiBkZXByZWNhdGVkLCB1c2UKICAgICA6Y2xhc3M6YHN0YXRpY21ldGhvZGAgd2l0aCA6ZnVuYzpgYWJjLmFic3RyYWN0bWV0aG9kYCBpbnN0ZWFkLgogCi0oQ29udHJpYnV0ZWQgYnkgRGFycmVuIERhbGUgaW4gOmlzc3VlOmAxMTYxMGApCisoQ29udHJpYnV0ZWQgYnkgRGFycmVuIERhbGUgaW4gOmlzc3VlOmAxMTYxMGAuKQogCiA6bWV0aDpgYWJjLkFCQ01ldGEucmVnaXN0ZXJgIG5vdyByZXR1cm5zIHRoZSByZWdpc3RlcmVkIHN1YmNsYXNzLCB3aGljaCBtZWFucwogaXQgY2FuIG5vdyBiZSB1c2VkIGFzIGEgY2xhc3MgZGVjb3JhdG9yICg6aXNzdWU6YDEwODY4YCkuCkBAIC05MzMsNyArOTMzLDcgQEAKIFRoZSA6bW9kOmBhcnJheWAgbW9kdWxlIHN1cHBvcnRzIHRoZSA6Yzp0eXBlOmBsb25nIGxvbmdgIHR5cGUgdXNpbmcgYGBxYGAgYW5kCiBgYFFgYCB0eXBlIGNvZGVzLgogCi0oQ29udHJpYnV0ZWQgYnkgT3JlbiBUaXJvc2ggYW5kIEhpcm9rYXp1IFlhbWFtb3RvIGluIDppc3N1ZTpgMTE3MjcxMWApCisoQ29udHJpYnV0ZWQgYnkgT3JlbiBUaXJvc2ggYW5kIEhpcm9rYXp1IFlhbWFtb3RvIGluIDppc3N1ZTpgMTE3MjcxMWAuKQogCiAKIGJhc2U2NApAQCAtOTY0LDE0ICs5NjQsMTQgQEAKICogOmNsYXNzOmBiejIuQloyRmlsZWAgY2FuIG5vdyByZWFkIGZyb20gYW5kIHdyaXRlIHRvIGFyYml0cmFyeSBmaWxlLWxpa2UKICAgb2JqZWN0cywgYnkgbWVhbnMgb2YgaXRzIGNvbnN0cnVjdG9yJ3MgKmZpbGVvYmoqIGFyZ3VtZW50LgogCi0gIChDb250cmlidXRlZCBieSBOYWRlZW0gVmF3ZGEgaW4gOmlzc3VlOmA1ODYzYCkKKyAgKENvbnRyaWJ1dGVkIGJ5IE5hZGVlbSBWYXdkYSBpbiA6aXNzdWU6YDU4NjNgLikKIAogKiA6Y2xhc3M6YGJ6Mi5CWjJGaWxlYCBhbmQgOmZ1bmM6YGJ6Mi5kZWNvbXByZXNzYCBjYW4gbm93IGRlY29tcHJlc3MKICAgbXVsdGktc3RyZWFtIGlucHV0cyAoc3VjaCBhcyB0aG9zZSBwcm9kdWNlZCBieSB0aGUgOnByb2dyYW06YHBiemlwMmAgdG9vbCkuCiAgIDpjbGFzczpgYnoyLkJaMkZpbGVgIGNhbiBub3cgYWxzbyBiZSB1c2VkIHRvIGNyZWF0ZSB0aGlzIHR5cGUgb2YgZmlsZSwgdXNpbmcKICAgdGhlIGBgJ2EnYGAgKGFwcGVuZCkgbW9kZS4KIAotICAoQ29udHJpYnV0ZWQgYnkgTmlyIEFpZGVzIGluIDppc3N1ZTpgMTYyNWApCisgIChDb250cmlidXRlZCBieSBOaXIgQWlkZXMgaW4gOmlzc3VlOmAxNjI1YC4pCiAKICogOmNsYXNzOmBiejIuQloyRmlsZWAgbm93IGltcGxlbWVudHMgYWxsIG9mIHRoZSA6Y2xhc3M6YGlvLkJ1ZmZlcmVkSU9CYXNlYCBBUEksCiAgIGV4Y2VwdCBmb3IgdGhlIDptZXRoOmBkZXRhY2hgIGFuZCA6bWV0aDpgdHJ1bmNhdGVgIG1ldGhvZHMuCkBAIC0xMDE4LDcgKzEwMTgsNyBAQAogCiBBZGRpdGlvbiBvZiBhIG5ldyA6Y2xhc3M6YH5jb2xsZWN0aW9ucy5DaGFpbk1hcGAgY2xhc3MgdG8gYWxsb3cgdHJlYXRpbmcgYQogbnVtYmVyIG9mIG1hcHBpbmdzIGFzIGEgc2luZ2xlIHVuaXQuICAoV3JpdHRlbiBieSBSYXltb25kIEhldHRpbmdlciBmb3IKLTppc3N1ZTpgMTEwODlgLCBtYWRlIHB1YmxpYyBpbiA6aXNzdWU6YDExMjk3YCkKKzppc3N1ZTpgMTEwODlgLCBtYWRlIHB1YmxpYyBpbiA6aXNzdWU6YDExMjk3YC4pCiAKIFRoZSBhYnN0cmFjdCBiYXNlIGNsYXNzZXMgaGF2ZSBiZWVuIG1vdmVkIGluIGEgbmV3IDptb2Q6YGNvbGxlY3Rpb25zLmFiY2AKIG1vZHVsZSwgdG8gYmV0dGVyIGRpZmZlcmVudGlhdGUgYmV0d2VlbiB0aGUgYWJzdHJhY3QgYW5kIHRoZSBjb25jcmV0ZQpAQCAtMTA2OSw3ICsxMDY5LDcgQEAKICAgIHB1c2ggYSB3aWRlIGNoYXJhY3RlciBzbyB0aGUgbmV4dCA6bWV0aDpgfmN1cnNlcy53aW5kb3cuZ2V0X3djaGAgd2lsbCByZXR1cm4KICAgIGl0CiAKLShDb250cmlidXRlZCBieSBJw7FpZ28gU2VybmEgaW4gOmlzc3VlOmA2NzU1YCkKKyhDb250cmlidXRlZCBieSBJw7FpZ28gU2VybmEgaW4gOmlzc3VlOmA2NzU1YC4pCiAKIGRhdGV0aW1lCiAtLS0tLS0tLQpAQCAtMTM3NiwxMSArMTM3NiwxMSBAQAogICA6ZnVuYzpgfmZ0cGxpYi5GVFBfVExTLmNjY2AgZnVuY3Rpb24gdG8gcmV2ZXJ0IGNvbnRyb2wgY2hhbm5lbCBiYWNrIHRvCiAgIHBsYWludGV4dC4gIFRoaXMgY2FuIGJlIHVzZWZ1bCB0byB0YWtlIGFkdmFudGFnZSBvZiBmaXJld2FsbHMgdGhhdCBrbm93IGhvdwogICB0byBoYW5kbGUgTkFUIHdpdGggbm9uLXNlY3VyZSBGVFAgd2l0aG91dCBvcGVuaW5nIGZpeGVkIHBvcnRzLiAgKENvbnRyaWJ1dGVkCi0gIGJ5IEdpYW1wYW9sbyBSb2RvbMOgIGluIDppc3N1ZTpgMTIxMzlgKQorICBieSBHaWFtcGFvbG8gUm9kb2zDoCBpbiA6aXNzdWU6YDEyMTM5YC4pCiAKICogQWRkZWQgOm1ldGg6YGZ0cGxpYi5GVFAubWxzZGAgbWV0aG9kIHdoaWNoIHByb3ZpZGVzIGEgcGFyc2FibGUgZGlyZWN0b3J5CiAgIGxpc3RpbmcgZm9ybWF0IGFuZCBkZXByZWNhdGVzIDptZXRoOmBmdHBsaWIuRlRQLm5sc3RgIGFuZAotICA6bWV0aDpgZnRwbGliLkZUUC5kaXJgLiAgKENvbnRyaWJ1dGVkIGJ5IEdpYW1wYW9sbyBSb2RvbMOgIGluIDppc3N1ZTpgMTEwNzJgKQorICA6bWV0aDpgZnRwbGliLkZUUC5kaXJgLiAgKENvbnRyaWJ1dGVkIGJ5IEdpYW1wYW9sbyBSb2RvbMOgIGluIDppc3N1ZTpgMTEwNzJgLikKIAogCiBmdW5jdG9vbHMKQEAgLTE0MDQsNyArMTQwNCw3IEBACiAKIEEgbmV3IDpmdW5jOmB+aG1hYy5jb21wYXJlX2RpZ2VzdGAgZnVuY3Rpb24gaGFzIGJlZW4gYWRkZWQgdG8gcHJldmVudCBzaWRlCiBjaGFubmVsIGF0dGFja3Mgb24gZGlnZXN0cyB0aHJvdWdoIHRpbWluZyBhbmFseXNpcy4gIChDb250cmlidXRlZCBieSBOaWNrCi1Db2dobGFuIGFuZCBDaHJpc3RpYW4gSGVpbWVzIGluIDppc3N1ZTpgMTUwNjFgKQorQ29naGxhbiBhbmQgQ2hyaXN0aWFuIEhlaW1lcyBpbiA6aXNzdWU6YDE1MDYxYC4pCiAKIAogaHR0cApAQCAtMTQyMSw3ICsxNDIxLDcgQEAKIAogOmNsYXNzOmBodHRwLmNsaWVudC5IVFRQUmVzcG9uc2VgIG5vdyBoYXMgYQogOm1ldGg6YH5odHRwLmNsaWVudC5IVFRQUmVzcG9uc2UucmVhZGludG9gIG1ldGhvZCwgd2hpY2ggbWVhbnMgaXQgY2FuIGJlIHVzZWQKLWFzIGEgOmNsYXNzOmBpby5SYXdJT0Jhc2VgIGNsYXNzLiAgKENvbnRyaWJ1dGVkIGJ5IEpvaG4gS3VobiBpbgorYXMgYW4gOmNsYXNzOmBpby5SYXdJT0Jhc2VgIGNsYXNzLiAgKENvbnRyaWJ1dGVkIGJ5IEpvaG4gS3VobiBpbgogOmlzc3VlOmAxMzQ2NGAuKQogCiAKQEAgLTE0MzYsMTMgKzE0MzYsMTMgQEAKIChDb250cmlidXRlZCBieSBFemlvIE1lbG90dGkgaW4gOmlzc3VlOmAxNTExNGAsIGFuZCA6aXNzdWU6YDE0NTM4YCwKIDppc3N1ZTpgMTM5OTNgLCA6aXNzdWU6YDEzOTYwYCwgOmlzc3VlOmAxMzM1OGAsIDppc3N1ZTpgMTc0NTc2MWAsCiA6aXNzdWU6YDc1NTY3MGAsIDppc3N1ZTpgMTMzNTdgLCA6aXNzdWU6YDEyNjI5YCwgOmlzc3VlOmAxMjAwMzEzYCwKLTppc3N1ZTpgNjcwNjY0YCwgOmlzc3VlOmAxMzI3M2AsIDppc3N1ZTpgMTI4ODhgLCA6aXNzdWU6YDczMTFgKQorOmlzc3VlOmA2NzA2NjRgLCA6aXNzdWU6YDEzMjczYCwgOmlzc3VlOmAxMjg4OGAsIDppc3N1ZTpgNzMxMWAuKQogCiBBIG5ldyA6ZGF0YTpgfmh0bWwuZW50aXRpZXMuaHRtbDVgIGRpY3Rpb25hcnkgdGhhdCBtYXBzIEhUTUw1IG5hbWVkIGNoYXJhY3RlcgogcmVmZXJlbmNlcyB0byB0aGUgZXF1aXZhbGVudCBVbmljb2RlIGNoYXJhY3RlcihzKSAoZS5nLiBgYGh0bWw1WydndDsnXSA9PQogJz4nYGApIGhhcyBiZWVuIGFkZGVkIHRvIHRoZSA6bW9kOmBodG1sLmVudGl0aWVzYCBtb2R1bGUuICBUaGUgZGljdGlvbmFyeSBpcwogbm93IGFsc28gdXNlZCBieSA6Y2xhc3M6YH5odG1sLnBhcnNlci5IVE1MUGFyc2VyYC4gIChDb250cmlidXRlZCBieSBFemlvCi1NZWxvdHRpIGluIDppc3N1ZTpgMTExMTNgIGFuZCA6aXNzdWU6YDE1MTU2YCkKK01lbG90dGkgaW4gOmlzc3VlOmAxMTExM2AgYW5kIDppc3N1ZTpgMTUxNTZgLikKIAogCiBpbWFwbGliCkBAIC0xNDUxLDcgKzE0NTEsNyBAQAogVGhlIDpjbGFzczpgfmltYXBsaWIuSU1BUDRfU1NMYCBjb25zdHJ1Y3RvciBub3cgYWNjZXB0cyBhbiBTU0xDb250ZXh0CiBwYXJhbWV0ZXIgdG8gY29udHJvbCBwYXJhbWV0ZXJzIG9mIHRoZSBzZWN1cmUgY2hhbm5lbC4KIAotKENvbnRyaWJ1dGVkIGJ5IFNpamluIEpvc2VwaCBpbiA6aXNzdWU6YDg4MDhgKQorKENvbnRyaWJ1dGVkIGJ5IFNpamluIEpvc2VwaCBpbiA6aXNzdWU6YDg4MDhgLikKIAogCiBpbnNwZWN0CkBAIC0xNDYyLDE0ICsxNDYyLDE0IEBACiB3aGVyZSB0aG9zZSBuYW1lcyB3ZXJlIHJlc29sdmVkLCBtYWtpbmcgaXQgZWFzaWVyIHRvIHZlcmlmeSBjb3JyZWN0IGludGVybmFsCiBzdGF0ZSB3aGVuIHRlc3RpbmcgY29kZSB0aGF0IHJlbGllcyBvbiBzdGF0ZWZ1bCBjbG9zdXJlcy4KIAotKENvbnRyaWJ1dGVkIGJ5IE1lYWRvciBJbmdlIGFuZCBOaWNrIENvZ2hsYW4gaW4gOmlzc3VlOmAxMzA2MmApCisoQ29udHJpYnV0ZWQgYnkgTWVhZG9yIEluZ2UgYW5kIE5pY2sgQ29naGxhbiBpbiA6aXNzdWU6YDEzMDYyYC4pCiAKIEEgbmV3IDpmdW5jOmB+aW5zcGVjdC5nZXRnZW5lcmF0b3Jsb2NhbHNgIGZ1bmN0aW9uIGhhcyBiZWVuIGFkZGVkLiBUaGlzCiBmdW5jdGlvbiByZXBvcnRzIHRoZSBjdXJyZW50IGJpbmRpbmcgb2YgbG9jYWwgdmFyaWFibGVzIGluIHRoZSBnZW5lcmF0b3Incwogc3RhY2sgZnJhbWUsIG1ha2luZyBpdCBlYXNpZXIgdG8gdmVyaWZ5IGNvcnJlY3QgaW50ZXJuYWwgc3RhdGUgd2hlbiB0ZXN0aW5nCiBnZW5lcmF0b3JzLgogCi0oQ29udHJpYnV0ZWQgYnkgTWVhZG9yIEluZ2UgaW4gOmlzc3VlOmAxNTE1M2ApCisoQ29udHJpYnV0ZWQgYnkgTWVhZG9yIEluZ2UgaW4gOmlzc3VlOmAxNTE1M2AuKQogCiBpbwogLS0KQEAgLTE0NzgsNyArMTQ3OCw3IEBACiBleGNsdXNpdmVseSBjcmVhdGUgYSBuZXcgZmlsZSwgYW5kIHJhaXNlIGEgOmV4YzpgRmlsZUV4aXN0c0Vycm9yYCBpZiB0aGUgZmlsZQogYWxyZWFkeSBleGlzdHMuIEl0IGlzIGJhc2VkIG9uIHRoZSBDMTEgJ3gnIG1vZGUgdG8gZm9wZW4oKS4KIAotKENvbnRyaWJ1dGVkIGJ5IERhdmlkIFRvd25zaGVuZCBpbiA6aXNzdWU6YDEyNzYwYCkKKyhDb250cmlidXRlZCBieSBEYXZpZCBUb3duc2hlbmQgaW4gOmlzc3VlOmAxMjc2MGAuKQogCiBUaGUgY29uc3RydWN0b3Igb2YgdGhlIDpjbGFzczpgfmlvLlRleHRJT1dyYXBwZXJgIGNsYXNzIGhhcyBhIG5ldwogKndyaXRlX3Rocm91Z2gqIG9wdGlvbmFsIGFyZ3VtZW50LiBJZiAqd3JpdGVfdGhyb3VnaCogaXMgYGBUcnVlYGAsIGNhbGxzIHRvCkBAIC0xNTEzLDcgKzE1MTMsNyBAQAogVGhlIDptb2Q6YG1hdGhgIG1vZHVsZSBoYXMgYSBuZXcgZnVuY3Rpb24sIDpmdW5jOmB+bWF0aC5sb2cyYCwgIHdoaWNoIHJldHVybnMKIHRoZSBiYXNlLTIgbG9nYXJpdGhtIG9mICp4Ki4KIAotKFdyaXR0ZW4gYnkgTWFyayBEaWNraW5zb24gaW4gOmlzc3VlOmAxMTg4OGApLgorKFdyaXR0ZW4gYnkgTWFyayBEaWNraW5zb24gaW4gOmlzc3VlOmAxMTg4OGAuKQogCiAKIG1tYXAKQEAgLTE1NDAsNyArMTU0MCw3IEBACiB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBiZWhhdmlvciBvZiBpbmhlcml0aW5nIHRoZSBgYGRhZW1vbmBgIGZsYWcgZnJvbQogdGhlIHBhcmVudCBwcm9jZXNzICg6aXNzdWU6YDYwNjRgKS4KIAotTmV3IGF0dHJpYnV0ZSBhdHRyaWJ1dGUgOmRhdGE6YG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzLnNlbnRpbmVsYCBhbGxvd3MgYQorTmV3IGF0dHJpYnV0ZSA6ZGF0YTpgbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3Muc2VudGluZWxgIGFsbG93cyBhCiBwcm9ncmFtIHRvIHdhaXQgb24gbXVsdGlwbGUgOmNsYXNzOmB+bXVsdGlwcm9jZXNzaW5nLlByb2Nlc3NgIG9iamVjdHMgYXQgb25lCiB0aW1lIHVzaW5nIHRoZSBhcHByb3ByaWF0ZSBPUyBwcmltaXRpdmVzIChmb3IgZXhhbXBsZSwgOm1vZDpgc2VsZWN0YCBvbgogcG9zaXggc3lzdGVtcykuCkBAIC0xNTU2LDcgKzE1NTYsNyBAQAogbm50cGxpYgogLS0tLS0tLQogCi1UaGUgOmNsYXNzOmBubnRwbGliLk5OVFBgIGNsYXNzIG5vdyBzdXBwb3J0cyB0aGUgY29udGV4dCBtYW5hZ2VyIHByb3RvY29sIHRvCitUaGUgOmNsYXNzOmBubnRwbGliLk5OVFBgIGNsYXNzIG5vdyBzdXBwb3J0cyB0aGUgY29udGV4dCBtYW5hZ2VtZW50IHByb3RvY29sIHRvCiB1bmNvbmRpdGlvbmFsbHkgY29uc3VtZSA6ZXhjOmBzb2NrZXQuZXJyb3JgIGV4Y2VwdGlvbnMgYW5kIHRvIGNsb3NlIHRoZSBOTlRQCiBjb25uZWN0aW9uIHdoZW4gZG9uZTo6CiAKQEAgLTE1NjcsNyArMTU2Nyw3IEBACiAgICgnMjExIDE3NTUgMSAxNzU1IGdtYW5lLmNvbXAucHl0aG9uLmNvbW1pdHRlcnMnLCAxNzU1LCAxLCAxNzU1LCAnZ21hbmUuY29tcC5weXRob24uY29tbWl0dGVycycpCiAgID4+PgogCi0oQ29udHJpYnV0ZWQgYnkgR2lhbXBhb2xvIFJvZG9sw6AgaW4gOmlzc3VlOmA5Nzk1YCkKKyhDb250cmlidXRlZCBieSBHaWFtcGFvbG8gUm9kb2zDoCBpbiA6aXNzdWU6YDk3OTVgLikKIAogCiBvcwpAQCAtMTU3OSw3ICsxNTc5LDcgQEAKICAgYXZvaWQgcmFjZSBjb25kaXRpb25zIGluIG11bHRpLXRocmVhZGVkIHByb2dyYW1zLgogCiAqIFRoZSA6bW9kOmBvc2AgbW9kdWxlIGhhcyBhIG5ldyA6ZnVuYzpgfm9zLnNlbmRmaWxlYCBmdW5jdGlvbiB3aGljaCBwcm92aWRlcwotICBhbiBlZmZpY2VudCAiemVyby1jb3B5IiB3YXkgZm9yIGNvcHlpbmcgZGF0YSBmcm9tIG9uZSBmaWxlIChvciBzb2NrZXQpCisgIGFuIGVmZmljaWVudCAiemVyby1jb3B5IiB3YXkgZm9yIGNvcHlpbmcgZGF0YSBmcm9tIG9uZSBmaWxlIChvciBzb2NrZXQpCiAgIGRlc2NyaXB0b3IgdG8gYW5vdGhlci4gVGhlIHBocmFzZSAiemVyby1jb3B5IiByZWZlcnMgdG8gdGhlIGZhY3QgdGhhdCBhbGwgb2YKICAgdGhlIGNvcHlpbmcgb2YgZGF0YSBiZXR3ZWVuIHRoZSB0d28gZGVzY3JpcHRvcnMgaXMgZG9uZSBlbnRpcmVseSBieSB0aGUKICAga2VybmVsLCB3aXRoIG5vIGNvcHlpbmcgb2YgZGF0YSBpbnRvIHVzZXJzcGFjZSBidWZmZXJzLiA6ZnVuYzpgfm9zLnNlbmRmaWxlYApAQCAtMTc0NCwyNCArMTc0NCwyNCBAQAogICBzZXQgdG8gRmFsc2UgbWFrZXMgdGhlIG1ldGhvZCBleGVjdXRlIHRoZSBzY2hlZHVsZWQgZXZlbnRzIGR1ZSB0byBleHBpcmUKICAgc29vbmVzdCAoaWYgYW55KSBhbmQgdGhlbiByZXR1cm4gaW1tZWRpYXRlbHkuCiAgIFRoaXMgaXMgdXNlZnVsIGluIGNhc2UgeW91IHdhbnQgdG8gdXNlIHRoZSA6Y2xhc3M6YH5zY2hlZC5zY2hlZHVsZXJgIGluCi0gIG5vbi1ibG9ja2luZyBhcHBsaWNhdGlvbnMuICAoQ29udHJpYnV0ZWQgYnkgR2lhbXBhb2xvIFJvZG9sw6AgaW4gOmlzc3VlOmAxMzQ0OWApCisgIG5vbi1ibG9ja2luZyBhcHBsaWNhdGlvbnMuICAoQ29udHJpYnV0ZWQgYnkgR2lhbXBhb2xvIFJvZG9sw6AgaW4gOmlzc3VlOmAxMzQ0OWAuKQogCiAqIDpjbGFzczpgfnNjaGVkLnNjaGVkdWxlcmAgY2xhc3MgY2FuIG5vdyBiZSBzYWZlbHkgdXNlZCBpbiBtdWx0aS10aHJlYWRlZAogICBlbnZpcm9ubWVudHMuICAoQ29udHJpYnV0ZWQgYnkgSm9zaWFoIENhcmxzb24gYW5kIEdpYW1wYW9sbyBSb2RvbMOgIGluCi0gIDppc3N1ZTpgODY4NGApCisgIDppc3N1ZTpgODY4NGAuKQogCiAqICp0aW1lZnVuYyogYW5kICpkZWxheWZ1bmN0KiBwYXJhbWV0ZXJzIG9mIDpjbGFzczpgfnNjaGVkLnNjaGVkdWxlcmAgY2xhc3MKICAgY29uc3RydWN0b3IgYXJlIG5vdyBvcHRpb25hbCBhbmQgZGVmYXVsdHMgdG8gOmZ1bmM6YHRpbWUudGltZWAgYW5kCiAgIDpmdW5jOmB0aW1lLnNsZWVwYCByZXNwZWN0aXZlbHkuICAoQ29udHJpYnV0ZWQgYnkgQ2hyaXMgQ2xhcmsgaW4KLSAgOmlzc3VlOmAxMzI0NWApCisgIDppc3N1ZTpgMTMyNDVgLikKIAogKiA6bWV0aDpgfnNjaGVkLnNjaGVkdWxlci5lbnRlcmAgYW5kIDptZXRoOmB+c2NoZWQuc2NoZWR1bGVyLmVudGVyYWJzYAogICAqYXJndW1lbnQqIHBhcmFtZXRlciBpcyBub3cgb3B0aW9uYWwuICAoQ29udHJpYnV0ZWQgYnkgQ2hyaXMgQ2xhcmsgaW4KLSAgOmlzc3VlOmAxMzI0NWApCisgIDppc3N1ZTpgMTMyNDVgLikKIAogKiA6bWV0aDpgfnNjaGVkLnNjaGVkdWxlci5lbnRlcmAgYW5kIDptZXRoOmB+c2NoZWQuc2NoZWR1bGVyLmVudGVyYWJzYAogICBub3cgYWNjZXB0IGEgKmt3YXJncyogcGFyYW1ldGVyLiAgKENvbnRyaWJ1dGVkIGJ5IENocmlzIENsYXJrIGluCi0gIDppc3N1ZTpgMTMyNDVgKQorICA6aXNzdWU6YDEzMjQ1YC4pCiAKIAogc2VsZWN0CkBAIC0xNzg3LDEwICsxNzg3LDEwIEBACiAqIE5ldyBmdW5jdGlvbnM6CiAKICAgKiA6ZnVuYzpgfnNodXRpbC5kaXNrX3VzYWdlYDogcHJvdmlkZXMgdG90YWwsIHVzZWQgYW5kIGZyZWUgZGlzayBzcGFjZQotICAgIHN0YXRpc3RpY3MuIChDb250cmlidXRlZCBieSBHaWFtcGFvbG8gUm9kb2zDoCBpbiA6aXNzdWU6YDEyNDQyYCkKKyAgICBzdGF0aXN0aWNzLiAgKENvbnRyaWJ1dGVkIGJ5IEdpYW1wYW9sbyBSb2RvbMOgIGluIDppc3N1ZTpgMTI0NDJgLikKICAgKiA6ZnVuYzpgfnNodXRpbC5jaG93bmA6IGFsbG93cyBvbmUgdG8gY2hhbmdlIHVzZXIgYW5kL29yIGdyb3VwIG9mIHRoZSBnaXZlbgogICAgIHBhdGggYWxzbyBzcGVjaWZ5aW5nIHRoZSB1c2VyL2dyb3VwIG5hbWVzIGFuZCBub3Qgb25seSB0aGVpciBudW1lcmljCi0gICAgaWRzLiAoQ29udHJpYnV0ZWQgYnkgU2FuZHJvIFRvc2kgaW4gOmlzc3VlOmAxMjE5MWApCisgICAgaWRzLiAgKENvbnRyaWJ1dGVkIGJ5IFNhbmRybyBUb3NpIGluIDppc3N1ZTpgMTIxOTFgLikKICAgKiA6ZnVuYzpgc2h1dGlsLmdldF90ZXJtaW5hbF9zaXplYDogcmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgdGVybWluYWwgd2luZG93CiAgICAgdG8gd2hpY2ggdGhlIGludGVycHJldGVyIGlzIGF0dGFjaGVkLiAgKENvbnRyaWJ1dGVkIGJ5IFpiaWduaWV3CiAgICAgSsSZZHJ6ZWpld3NraS1Tem1layBpbiA6aXNzdWU6YDEzNjA5YC4pCkBAIC0xODEzLDcgKzE4MTMsNyBAQAogCiAqIDpmdW5jOmB+c2h1dGlsLnJtdHJlZWAgaXMgbm93IHJlc2lzdGFudCB0byBzeW1saW5rIGF0dGFja3Mgb24gcGxhdGZvcm1zCiAgIHdoaWNoIHN1cHBvcnQgdGhlIG5ldyBgYGRpcl9mZGBgIHBhcmFtZXRlciBpbiA6ZnVuYzpgb3Mub3BlbmAgYW5kCi0gIDpmdW5jOmBvcy51bmxpbmtgLiAoQ29udHJpYnV0ZWQgYnkgTWFydGluIHZvbiBMw7Z3aXMgYW5kIEh5bmVrIFNjaGxhd2FjaworICA6ZnVuYzpgb3MudW5saW5rYC4gIChDb250cmlidXRlZCBieSBNYXJ0aW4gdm9uIEzDtndpcyBhbmQgSHluZWsgU2NobGF3YWNrCiAgIGluIDppc3N1ZTpgNDQ4OWAuKQogCiAKQEAgLTE4NjEsMTMgKzE4NjEsMTMgQEAKIHdoZW4gY3JlYXRpbmcgdGhlIG91dGdvaW5nIHNvY2tldC4gIChDb250cmlidXRlZCBieSBQYXVsbyBTY2FyZGluZSBpbgogOmlzc3VlOmAxMTI4MWAuKQogCi06Y2xhc3M6YH5zbXRwbGliLlNNVFBgIG5vdyBzdXBwb3J0cyB0aGUgY29udGV4dCBtYW5hZ2VyIHByb3RvY29sLCBhbGxvd2luZyBhbgorOmNsYXNzOmB+c210cGxpYi5TTVRQYCBub3cgc3VwcG9ydHMgdGhlIGNvbnRleHQgbWFuYWdlbWVudCBwcm90b2NvbCwgYWxsb3dpbmcgYW4KIGBgU01UUGBgIGluc3RhbmNlIHRvIGJlIHVzZWQgaW4gYSBgYHdpdGhgYCBzdGF0ZW1lbnQuICAoQ29udHJpYnV0ZWQKIGJ5IEdpYW1wYW9sbyBSb2RvbMOgIGluIDppc3N1ZTpgMTEyODlgLikKIAogVGhlIDpjbGFzczpgfnNtdHBsaWIuU01UUF9TU0xgIGNvbnN0cnVjdG9yIGFuZCB0aGUgOm1ldGg6YH5zbXRwbGliLlNNVFAuc3RhcnR0bHNgCiBtZXRob2Qgbm93IGFjY2VwdCBhbiBTU0xDb250ZXh0IHBhcmFtZXRlciB0byBjb250cm9sIHBhcmFtZXRlcnMgb2YgdGhlIHNlY3VyZQotY2hhbm5lbC4gIChDb250cmlidXRlZCBieSBLYXN1biBIZXJhdGggaW4gOmlzc3VlOmA4ODA5YCkKK2NoYW5uZWwuICAoQ29udHJpYnV0ZWQgYnkgS2FzdW4gSGVyYXRoIGluIDppc3N1ZTpgODgwOWAuKQogCiAKIHNvY2tldApAQCAtMTg4NywxMSArMTg4NywxMSBAQAogICAoaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Tb2NrZXRjYW4pLCBvbiBMaW51eAogICAoaHR0cDovL2x3bi5uZXQvQXJ0aWNsZXMvMjUzNDI1KS4KIAotICAoQ29udHJpYnV0ZWQgYnkgTWF0dGhpYXMgRnVjaHMsIHVwZGF0ZWQgYnkgVGlhZ28gR29uw6dhbHZlcyBpbiA6aXNzdWU6YDEwMTQxYCkKKyAgKENvbnRyaWJ1dGVkIGJ5IE1hdHRoaWFzIEZ1Y2hzLCB1cGRhdGVkIGJ5IFRpYWdvIEdvbsOnYWx2ZXMgaW4gOmlzc3VlOmAxMDE0MWAuKQogCiAqIFRoZSA6Y2xhc3M6YH5zb2NrZXQuc29ja2V0YCBjbGFzcyBub3cgc3VwcG9ydHMgdGhlIFBGX1JEUyBwcm90b2NvbCBmYW1pbHkKICAgKGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUmVsaWFibGVfRGF0YWdyYW1fU29ja2V0cyBhbmQKLSAgaHR0cDovL29zcy5vcmFjbGUuY29tL3Byb2plY3RzL3Jkcy8pLgorICBodHRwczovL29zcy5vcmFjbGUuY29tL3Byb2plY3RzL3Jkcy8pLgogCiAqIFRoZSA6Y2xhc3M6YH5zb2NrZXQuc29ja2V0YCBjbGFzcyBub3cgc3VwcG9ydHMgdGhlIGBgUEZfU1lTVEVNYGAgcHJvdG9jb2wKICAgZmFtaWx5IG9uIE9TIFguICAoQ29udHJpYnV0ZWQgYnkgTWljaGFlbCBHb2RlcmJhdWVyIGluIDppc3N1ZTpgMTM3NzdgLikKQEAgLTE5MDgsNyArMTkwOCw3IEBACiA6bWV0aDpgfnNvY2tldHNlcnZlci5CYXNlU2VydmVyLnNlcnZpY2VfYWN0aW9uc2AgdGhhdCBpcyBjYWxsZWQgYnkgdGhlCiA6bWV0aDpgfnNvY2tldHNlcnZlci5CYXNlU2VydmVyLnNlcnZlX2ZvcmV2ZXJgIG1ldGhvZCBpbiB0aGUgc2VydmljZSBsb29wLgogOmNsYXNzOmB+c29ja2V0c2VydmVyLkZvcmtpbmdNaXhJbmAgbm93IHVzZXMgdGhpcyB0byBjbGVhbiB1cCB6b21iaWUKLWNoaWxkIHByb2Nlc2VzLiAgKENvbnRyaWJ1dGVkIGJ5IEp1c3RpbiBXYXJrZW50aW4gaW4gOmlzc3VlOmAxMTEwOWAuKQorY2hpbGQgcHJvY2Vzc2VzLiAgKENvbnRyaWJ1dGVkIGJ5IEp1c3RpbiBXYXJrZW50aW4gaW4gOmlzc3VlOmAxMTEwOWAuKQogCiAKIHNxbGl0ZTMKQEAgLTE5MjksMzcgKzE5MjksMzcgQEAKICAgICBwc2V1ZG8tcmFuZG9tIGJ5dGVzLgogICAqIDpmdW5jOmB+c3NsLlJBTkRfcHNldWRvX2J5dGVzYDogZ2VuZXJhdGUgcHNldWRvLXJhbmRvbSBieXRlcy4KIAotICAoQ29udHJpYnV0ZWQgYnkgVmljdG9yIFN0aW5uZXIgaW4gOmlzc3VlOmAxMjA0OWApCisgIChDb250cmlidXRlZCBieSBWaWN0b3IgU3Rpbm5lciBpbiA6aXNzdWU6YDEyMDQ5YC4pCiAKICogVGhlIDptb2Q6YHNzbGAgbW9kdWxlIG5vdyBleHBvc2VzIGEgZmluZXItZ3JhaW5lZCBleGNlcHRpb24gaGllcmFyY2h5CiAgIGluIG9yZGVyIHRvIG1ha2UgaXQgZWFzaWVyIHRvIGluc3BlY3QgdGhlIHZhcmlvdXMga2luZHMgb2YgZXJyb3JzLgotICAoQ29udHJpYnV0ZWQgYnkgQW50b2luZSBQaXRyb3UgaW4gOmlzc3VlOmAxMTE4M2ApCisgIChDb250cmlidXRlZCBieSBBbnRvaW5lIFBpdHJvdSBpbiA6aXNzdWU6YDExMTgzYC4pCiAKICogOm1ldGg6YH5zc2wuU1NMQ29udGV4dC5sb2FkX2NlcnRfY2hhaW5gIG5vdyBhY2NlcHRzIGEgKnBhc3N3b3JkKiBhcmd1bWVudAogICB0byBiZSB1c2VkIGlmIHRoZSBwcml2YXRlIGtleSBpcyBlbmNyeXB0ZWQuCi0gIChDb250cmlidXRlZCBieSBBZGFtIFNpbXBraW5zIGluIDppc3N1ZTpgMTI4MDNgKQorICAoQ29udHJpYnV0ZWQgYnkgQWRhbSBTaW1wa2lucyBpbiA6aXNzdWU6YDEyODAzYC4pCiAKICogRGlmZmllLUhlbGxtYW4ga2V5IGV4Y2hhbmdlLCBib3RoIHJlZ3VsYXIgYW5kIEVsbGlwdGljIEN1cnZlLWJhc2VkLCBpcwogICBub3cgc3VwcG9ydGVkIHRocm91Z2ggdGhlIDptZXRoOmB+c3NsLlNTTENvbnRleHQubG9hZF9kaF9wYXJhbXNgIGFuZAogICA6bWV0aDpgfnNzbC5TU0xDb250ZXh0LnNldF9lY2RoX2N1cnZlYCBtZXRob2RzLgotICAoQ29udHJpYnV0ZWQgYnkgQW50b2luZSBQaXRyb3UgaW4gOmlzc3VlOmAxMzYyNmAgYW5kIDppc3N1ZTpgMTM2MjdgKQorICAoQ29udHJpYnV0ZWQgYnkgQW50b2luZSBQaXRyb3UgaW4gOmlzc3VlOmAxMzYyNmAgYW5kIDppc3N1ZTpgMTM2MjdgLikKIAogKiBTU0wgc29ja2V0cyBoYXZlIGEgbmV3IDptZXRoOmB+c3NsLlNTTFNvY2tldC5nZXRfY2hhbm5lbF9iaW5kaW5nYCBtZXRob2QKICAgYWxsb3dpbmcgdGhlIGltcGxlbWVudGF0aW9uIG9mIGNlcnRhaW4gYXV0aGVudGljYXRpb24gbWVjaGFuaXNtcyBzdWNoIGFzCi0gIFNDUkFNLVNIQS0xLVBMVVMuICAoQ29udHJpYnV0ZWQgYnkgSmFjZWsgS29uaWVjem55IGluIDppc3N1ZTpgMTI1NTFgKQorICBTQ1JBTS1TSEEtMS1QTFVTLiAgKENvbnRyaWJ1dGVkIGJ5IEphY2VrIEtvbmllY3pueSBpbiA6aXNzdWU6YDEyNTUxYC4pCiAKICogWW91IGNhbiBxdWVyeSB0aGUgU1NMIGNvbXByZXNzaW9uIGFsZ29yaXRobSB1c2VkIGJ5IGFuIFNTTCBzb2NrZXQsIHRoYW5rcwogICB0byBpdHMgbmV3IDptZXRoOmB+c3NsLlNTTFNvY2tldC5jb21wcmVzc2lvbmAgbWV0aG9kLiAgVGhlIG5ldyBhdHRyaWJ1dGUKICAgOmF0dHI6YH5zc2wuT1BfTk9fQ09NUFJFU1NJT05gIGNhbiBiZSB1c2VkIHRvIGRpc2FibGUgY29tcHJlc3Npb24uCi0gIChDb250cmlidXRlZCBieSBBbnRvaW5lIFBpdHJvdSBpbiA6aXNzdWU6YDEzNjM0YCkKKyAgKENvbnRyaWJ1dGVkIGJ5IEFudG9pbmUgUGl0cm91IGluIDppc3N1ZTpgMTM2MzRgLikKIAogKiBTdXBwb3J0IGhhcyBiZWVuIGFkZGVkIGZvciB0aGUgTmV4dCBQcm9jb3RvbCBOZWdvdGlhdGlvbiBleHRlbnNpb24gdXNpbmcKICAgdGhlIDptZXRoOmBzc2wuU1NMQ29udGV4dC5zZXRfbnBuX3Byb3RvY29sc2AgbWV0aG9kLgotICAoQ29udHJpYnV0ZWQgYnkgQ29saW4gTWFyYyBpbiA6aXNzdWU6YDE0MjA0YCkKKyAgKENvbnRyaWJ1dGVkIGJ5IENvbGluIE1hcmMgaW4gOmlzc3VlOmAxNDIwNGAuKQogCiAqIFNTTCBlcnJvcnMgY2FuIG5vdyBiZSBpbnRyb3NwZWN0ZWQgbW9yZSBlYXNpbHkgdGhhbmtzIHRvCiAgIDphdHRyOmB+c3NsLlNTTEVycm9yLmxpYnJhcnlgIGFuZCA6YXR0cjpgfnNzbC5TU0xFcnJvci5yZWFzb25gIGF0dHJpYnV0ZXMuCi0gIChDb250cmlidXRlZCBieSBBbnRvaW5lIFBpdHJvdSBpbiA6aXNzdWU6YDE0ODM3YCkKKyAgKENvbnRyaWJ1dGVkIGJ5IEFudG9pbmUgUGl0cm91IGluIDppc3N1ZTpgMTQ4MzdgLikKIAogKiBUaGUgOmZ1bmM6YH5zc2wuZ2V0X3NlcnZlcl9jZXJ0aWZpY2F0ZWAgZnVuY3Rpb24gbm93IHN1cHBvcnRzIElQdjYuCiAgIChDb250cmlidXRlZCBieSBDaGFybGVzLUZyYW7Dp29pcyBOYXRhbGkgaW4gOmlzc3VlOmAxMTgxMWAuKQpAQCAtMTk3Niw3ICsxOTc2LDcgQEAKIDpmdW5jOmBzdGF0LmZpbGVtb2RlYC4gSXQgY2FuIGJlIHVzZWQgdG8gY29udmVydCBhIGZpbGUncyBtb2RlIHRvIGEgc3RyaW5nIG9mCiB0aGUgZm9ybSAnLXJ3eHJ3eHJ3eCcuCiAKLShDb250cmlidXRlZCBieSBHaWFtcGFvbG8gUm9kb2zDoCBpbiA6aXNzdWU6YDE0ODA3YCkKKyhDb250cmlidXRlZCBieSBHaWFtcGFvbG8gUm9kb2zDoCBpbiA6aXNzdWU6YDE0ODA3YC4pCiAKIAogc3RydWN0CkBAIC0yMDM1LDggKzIwMzUsOCBAQAogOmNsYXNzOmB0aHJlYWRpbmcuQ29uZGl0aW9uYCwgOmNsYXNzOmB0aHJlYWRpbmcuU2VtYXBob3JlYCwKIDpjbGFzczpgdGhyZWFkaW5nLkJvdW5kZWRTZW1hcGhvcmVgLCA6Y2xhc3M6YHRocmVhZGluZy5FdmVudGAsIGFuZAogOmNsYXNzOmB0aHJlYWRpbmcuVGltZXJgLCBhbGwgb2Ygd2hpY2ggdXNlZCB0byBiZSBmYWN0b3J5IGZ1bmN0aW9ucyByZXR1cm5pbmcgYQotY2xhc3MgaW5zdGFuY2UsIGFyZSBub3cgY2xhc3NlcyBhbmQgbWF5IGJlIHN1YmNsYXNzZWQuIChDb250cmlidXRlZCBieSDDiXJpYwotQXJhdWpvIGluIDppc3N1ZTpgMTA5NjhgKS4KK2NsYXNzIGluc3RhbmNlLCBhcmUgbm93IGNsYXNzZXMgYW5kIG1heSBiZSBzdWJjbGFzc2VkLiAgKENvbnRyaWJ1dGVkIGJ5IMOJcmljCitBcmF1am8gaW4gOmlzc3VlOmAxMDk2OGAuKQogCiBUaGUgOmNsYXNzOmB0aHJlYWRpbmcuVGhyZWFkYCBjb25zdHJ1Y3RvciBub3cgYWNjZXB0cyBhIGBgZGFlbW9uYGAga2V5d29yZAogYXJndW1lbnQgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgYmVoYXZpb3Igb2YgaW5oZXJpdGluZyB0aGUgYGBkZWFtb25gYCBmbGFnCkBAIC0yMDY2LDcgKzIwNjYsNyBAQAogCiAqIDpmdW5jOmB+dGltZS5jbG9ja19nZXRyZXNgLCA6ZnVuYzpgfnRpbWUuY2xvY2tfZ2V0dGltZWAgYW5kCiAgIDpmdW5jOmB+dGltZS5jbG9ja19zZXR0aW1lYCBmdW5jdGlvbnMgd2l0aCBgYENMT0NLX3h4eGBgIGNvbnN0YW50cy4KLSAgKENvbnRyaWJ1dGVkIGJ5IFZpY3RvciBTdGlubmVyIGluIDppc3N1ZTpgMTAyNzhgKQorICAoQ29udHJpYnV0ZWQgYnkgVmljdG9yIFN0aW5uZXIgaW4gOmlzc3VlOmAxMDI3OGAuKQogCiBUbyBpbXByb3ZlIGNyb3NzIHBsYXRmb3JtIGNvbnNpc3RlbmN5LCA6ZnVuYzpgfnRpbWUuc2xlZXBgIG5vdyByYWlzZXMgYQogOmV4YzpgVmFsdWVFcnJvcmAgd2hlbiBwYXNzZWQgYSBuZWdhdGl2ZSBzbGVlcCB2YWx1ZS4gIFByZXZpb3VzbHkgdGhpcyB3YXMgYW4KQEAgLTIwODAsNyArMjA4MCw3IEBACiAoOmlzc3VlOmAxNDM4NmApCiAKIAotVGhlIG5ldyBmdW5jdGlvbnMgYHR5cGVzLm5ld19jbGFzc2AgYW5kIGB0eXBlcy5wcmVwYXJlX2NsYXNzYCBwcm92aWRlIHN1cHBvcnQKK1RoZSBuZXcgZnVuY3Rpb25zIDpmdW5jOmB0eXBlcy5uZXdfY2xhc3NgIGFuZCA6ZnVuYzpgdHlwZXMucHJlcGFyZV9jbGFzc2AgcHJvdmlkZSBzdXBwb3J0CiBmb3IgUEVQIDMxMTUgY29tcGxpYW50IGR5bmFtaWMgdHlwZSBjcmVhdGlvbi4gKDppc3N1ZTpgMTQ1ODhgKQogCiAKQEAgLTIwOTAsNyArMjA5MCw3IEBACiA6bWV0aDpgLmFzc2VydFJhaXNlc2AsIDptZXRoOmAuYXNzZXJ0UmFpc2VzUmVnZXhgLCA6bWV0aDpgLmFzc2VydFdhcm5zYCwgYW5kCiA6bWV0aDpgLmFzc2VydFdhcm5zUmVnZXhgIG5vdyBhY2NlcHQgYSBrZXl3b3JkIGFyZ3VtZW50ICptc2cqIHdoZW4gdXNlZCBhcwogY29udGV4dCBtYW5hZ2Vycy4gIChDb250cmlidXRlZCBieSBFemlvIE1lbG90dGkgYW5kIFdpbnN0b24gRXdlcnQgaW4KLTppc3N1ZTpgMTA3NzVgKQorOmlzc3VlOmAxMDc3NWAuKQogCiA6bWV0aDpgdW5pdHRlc3QuVGVzdENhc2UucnVuYCBub3cgcmV0dXJucyB0aGUgOmNsYXNzOmB+dW5pdHRlc3QuVGVzdFJlc3VsdGAKIG9iamVjdC4KQEAgLTIxMDMsNyArMjEwMyw3IEBACiB1c2VkIGJ5IDptZXRoOmB+dXJsbGliLnJlcXVlc3QuUmVxdWVzdC5nZXRfbWV0aG9kYCB0byBkZXRlcm1pbmUgd2hhdCBIVFRQIG1ldGhvZAogc2hvdWxkIGJlIHVzZWQuICBGb3IgZXhhbXBsZSwgdGhpcyB3aWxsIHNlbmQgYSBgYCdIRUFEJ2BgIHJlcXVlc3Q6OgogCi0gICA+Pj4gdXJsb3BlbihSZXF1ZXN0KCdodHRwOi8vd3d3LnB5dGhvbi5vcmcnLCBtZXRob2Q9J0hFQUQnKSkKKyAgID4+PiB1cmxvcGVuKFJlcXVlc3QoJ2h0dHBzOi8vd3d3LnB5dGhvbi5vcmcnLCBtZXRob2Q9J0hFQUQnKSkKIAogKDppc3N1ZTpgMTY3MzAwN2ApCiAKQEAgLTIxMTcsNyArMjExNyw3IEBACiBhbmQgdGhlIGdlbmVyaWMgbGF1bmNoZXJzIDpwcm9ncmFtOmB4ZGctb3BlbmAsIGZyb20gdGhlIEZyZWVEZXNrdG9wLm9yZwogcHJvamVjdCwgYW5kIDpwcm9ncmFtOmBndmZzLW9wZW5gLCB3aGljaCBpcyB0aGUgZGVmYXVsdCBVUkkgaGFuZGxlciBmb3IgR05PTUUKIDMuICAoVGhlIGZvcm1lciBjb250cmlidXRlZCBieSBBcm5hdWQgQ2FsbWV0dGVzIGluIDppc3N1ZTpgMTM2MjBgLCB0aGUgbGF0dGVyCi1ieSBNYXR0aGlhcyBLbG9zZSBpbiA6aXNzdWU6YDE0NDkzYCkKK2J5IE1hdHRoaWFzIEtsb3NlIGluIDppc3N1ZTpgMTQ0OTNgLikKIAogCiB4bWwuZXRyZWUuRWxlbWVudFRyZWUKQEAgLTIxNTUsMTIgKzIxNTUsMTIgQEAKICAgKiBlbmNvZGUgYW4gQVNDSUkgc3RyaW5nIHRvIFVURi04IGRvZXNuJ3QgbmVlZCB0byBlbmNvZGUgY2hhcmFjdGVycyBhbnltb3JlLAogICAgIHRoZSBVVEYtOCByZXByZXNlbnRhdGlvbiBpcyBzaGFyZWQgd2l0aCB0aGUgQVNDSUkgcmVwcmVzZW50YXRpb24KICAgKiB0aGUgVVRGLTggZW5jb2RlciBoYXMgYmVlbiBvcHRpbWl6ZWQKLSAgKiByZXBlYXRpbmcgYSBzaW5nbGUgQVNDSUkgbGV0dGVyIGFuZCBnZXR0aW5nIGEgc3Vic3RyaW5nIG9mIGEgQVNDSUkgc3RyaW5ncworICAqIHJlcGVhdGluZyBhIHNpbmdsZSBBU0NJSSBsZXR0ZXIgYW5kIGdldHRpbmcgYSBzdWJzdHJpbmcgb2YgYW4gQVNDSUkgc3RyaW5nCiAgICAgaXMgNCB0aW1lcyBmYXN0ZXIKIAogKiBVVEYtOCBpcyBub3cgMnggdG8gNHggZmFzdGVyLiAgVVRGLTE2IGVuY29kaW5nIGlzIG5vdyB1cCB0byAxMHggZmFzdGVyLgogCi0gIChjb250cmlidXRlZCBieSBTZXJoaXkgU3RvcmNoYWthLCA6aXNzdWU6YDE0NjI0YCwgOmlzc3VlOmAxNDczOGAgYW5kCisgIChDb250cmlidXRlZCBieSBTZXJoaXkgU3RvcmNoYWthLCA6aXNzdWU6YDE0NjI0YCwgOmlzc3VlOmAxNDczOGAgYW5kCiAgIDppc3N1ZTpgMTUwMjZgLikKIAogCkBAIC0yMzYwLDcgKzIzNjAsNyBAQAogICBieXRlY29kZSBmaWxlLCBtYWtlIHN1cmUgdG8gY2FsbCA6ZnVuYzpgaW1wb3J0bGliLmludmFsaWRhdGVfY2FjaGVzYCB0byBjbGVhcgogICBvdXQgdGhlIGNhY2hlIGZvciB0aGUgZmluZGVycyB0byBub3RpY2UgdGhlIG5ldyBmaWxlLgogCi0qIDpleGM6YEltcG9ydEVycm9yYCBub3cgdXNlcyB0aGUgZnVsbCBuYW1lIG9mIHRoZSBtb2R1bGUgdGhhdCB3YXMgYXR0ZW1wZWQgdG8KKyogOmV4YzpgSW1wb3J0RXJyb3JgIG5vdyB1c2VzIHRoZSBmdWxsIG5hbWUgb2YgdGhlIG1vZHVsZSB0aGF0IHdhcyBhdHRlbXB0ZWQgdG8KICAgYmUgaW1wb3J0ZWQuIERvY3Rlc3RzIHRoYXQgY2hlY2sgSW1wb3J0RXJyb3JzJyBtZXNzYWdlIHdpbGwgbmVlZCB0byBiZQogICB1cGRhdGVkIHRvIHVzZSB0aGUgZnVsbCBuYW1lIG9mIHRoZSBtb2R1bGUgaW5zdGVhZCBvZiBqdXN0IHRoZSB0YWlsIG9mIHRoZQogICBuYW1lLgpkaWZmIC0tZ2l0IGEvRG9jL3doYXRzbmV3LzMuNC5yc3QgYi9Eb2Mvd2hhdHNuZXcvMy40LnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDliYzBkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jL3doYXRzbmV3LzMuNC5yc3QKQEAgLTAsMCArMSwyNTQ1IEBACisqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgIFdoYXQncyBOZXcgSW4gUHl0aG9uIDMuNAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCis6QXV0aG9yOiBSLiBEYXZpZCBNdXJyYXkgPHJkbXVycmF5QGJpdGRhbmNlLmNvbT4gKEVkaXRvcikKKworLi4gUnVsZXMgZm9yIG1haW50ZW5hbmNlOgorCisgICAqIEFueW9uZSBjYW4gYWRkIHRleHQgdG8gdGhpcyBkb2N1bWVudCwgYnV0IHRoZSBtYWludGFpbmVyIHJlc2VydmVzIHRoZQorICAgcmlnaHQgdG8gcmV3cml0ZSBhbnkgYWRkaXRpb25zLiBJbiBwYXJ0aWN1bGFyLCBmb3Igb2JzY3VyZSBvciBlc290ZXJpYworICAgZmVhdHVyZXMsIHRoZSBtYWludGFpbmVyIG1heSByZWR1Y2UgYW55IGFkZGl0aW9uIHRvIGEgc2ltcGxlIHJlZmVyZW5jZSB0bworICAgdGhlIG5ldyBkb2N1bWVudGF0aW9uIHJhdGhlciB0aGFuIGV4cGxhaW5pbmcgdGhlIGZlYXR1cmUgaW5saW5lLgorCisgICAqIFdoaWxlIHRoZSBtYWludGFpbmVyIHdpbGwgcGVyaW9kaWNhbGx5IGdvIHRocm91Z2ggTWlzYy9ORVdTCisgICBhbmQgYWRkIGNoYW5nZXMsIGl0J3MgYmVzdCBub3QgdG8gcmVseSBvbiB0aGlzLiBXZSBrbm93IGZyb20gZXhwZXJpZW5jZQorICAgdGhhdCBhbnkgY2hhbmdlcyB0aGF0IGFyZW4ndCBpbiB0aGUgV2hhdCdzIE5ldyBkb2N1bWVudGF0aW9uIGFyb3VuZCB0aGUKKyAgIHRpbWUgb2YgdGhlIG9yaWdpbmFsIHJlbGVhc2Ugd2lsbCByZW1haW4gbGFyZ2VseSB1bmtub3duIHRvIHRoZSBjb21tdW5pdHkKKyAgIGZvciB5ZWFycywgZXZlbiBpZiB0aGV5J3JlIGFkZGVkIGxhdGVyLiBXZSBhbHNvIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQKKyAgIG90aGVyIHByaW9yaXRpZXMgY2FuIGFyaXNlLCBhbmQgdGhlIG1haW50YWluZXIgd2lsbCBydW4gb3V0IG9mIHRpbWUgdG8gZG8KKyAgIHVwZGF0ZXMgLS0gaW4gc3VjaCBjYXNlcywgZW5kIHVzZXJzIHdpbGwgYmUgbXVjaCBiZXR0ZXIgc2VydmVkIGJ5IHBhcnRpYWwKKyAgIG5vdGlmaWNhdGlvbnMgdGhhdCBhdCBsZWFzdCBnaXZlIGEgaGludCBhYm91dCBuZXcgZmVhdHVyZXMgdG8KKyAgIGludmVzdGlnYXRlLgorCisgICAqIFRoaXMgaXMgbm90IGEgY29tcGxldGUgbGlzdCBvZiBldmVyeSBzaW5nbGUgY2hhbmdlOyBjb21wbGV0ZW5lc3MKKyAgIGlzIHRoZSBwdXJwb3NlIG9mIE1pc2MvTkVXUy4gVGhlIFdoYXQncyBOZXcgc2hvdWxkIGZvY3VzIG9uIGNoYW5nZXMgdGhhdAorICAgYXJlIHZpc2libGUgdG8gUHl0aG9uICp1c2VycyogYW5kIHRoYXQgKnJlcXVpcmUqIGEgZmVhdHVyZSByZWxlYXNlIChpLmUuCisgICBtb3N0IGJ1ZyBmaXhlcyBzaG91bGQgb25seSBiZSByZWNvcmRlZCBpbiBNaXNjL05FV1MpCisKKyAgICogUEVQcyBzaG91bGQgbm90IGJlIG1hcmtlZCBGaW5hbCB1bnRpbCB0aGV5IGhhdmUgYW4gZW50cnkgaW4gV2hhdCdzIE5ldy4KKyAgIEEgcGxhY2Vob2xkZXIgZW50cnkgdGhhdCBpcyBqdXN0IGEgc2VjdGlvbiBoZWFkZXIgYW5kIGEgbGluayB0byB0aGUgUEVQCisgICAoZS5nICI6cGVwOmAzOTdgIGhhcyBiZWVuIGltcGxlbWVudGVkIikgaXMgYWNjZXB0YWJsZS4gSWYgYSBQRVAgaGFzIGJlZW4KKyAgIGltcGxlbWVudGVkIGFuZCBub3RlZCBpbiBXaGF0J3MgTmV3LCBkb24ndCBmb3JnZXQgdG8gbWFyayBpdCBhcyBGaW5hbCEKKworICAgKiBJZiB5b3Ugd2FudCB0byBkcmF3IHlvdXIgbmV3IHRleHQgdG8gdGhlIGF0dGVudGlvbiBvZiB0aGUKKyAgIG1haW50YWluZXIsIGFkZCAnWFhYJyB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBwYXJhZ3JhcGggb3IKKyAgIHNlY3Rpb24uCisKKyAgICogSXQncyBPSyB0byBhZGQganVzdCBhIHZlcnkgYnJpZWYgbm90ZSBhYm91dCBhIGNoYW5nZS4gIEZvcgorICAgZXhhbXBsZTogIlRoZSA6cmVmOmB+c29ja2V0LnRyYW5zbW9ncmlmeSgpYCBmdW5jdGlvbiB3YXMgYWRkZWQgdG8gdGhlCisgICA6bW9kOmBzb2NrZXRgIG1vZHVsZS4iICBUaGUgbWFpbnRhaW5lciB3aWxsIHJlc2VhcmNoIHRoZSBjaGFuZ2UgYW5kCisgICB3cml0ZSB0aGUgbmVjZXNzYXJ5IHRleHQgKGlmIGFwcHJvcHJpYXRlKS4gVGhlIGFkdmFudGFnZSBvZiBkb2luZyB0aGlzCisgICBpcyB0aGF0IGV2ZW4gaWYgbm8gbW9yZSBkZXNjcmlwdGl2ZSB0ZXh0IGlzIGV2ZXIgYWRkZWQsIHJlYWRlcnMgd2lsbCBhdAorICAgbGVhc3QgaGF2ZSBhIG5vdGlmaWNhdGlvbiB0aGF0IHRoZSBuZXcgZmVhdHVyZSBleGlzdHMgYW5kIGEgbGluayB0byB0aGUKKyAgIHJlbGV2YW50IGRvY3VtZW50YXRpb24uCisKKyAgICogWW91IGNhbiBjb21tZW50IG91dCB5b3VyIGFkZGl0aW9ucyBpZiB5b3UgbGlrZSwgYnV0IGl0J3Mgbm90CisgICBuZWNlc3NhcnkgKGVzcGVjaWFsbHkgd2hlbiBhIGZpbmFsIHJlbGVhc2UgaXMgc29tZSBtb250aHMgYXdheSkuCisKKyAgICogQ3JlZGl0IHRoZSBhdXRob3Igb2YgYSBwYXRjaCBvciBidWdmaXguICAgSnVzdCB0aGUgbmFtZSBpcworICAgc3VmZmljaWVudDsgdGhlIGUtbWFpbCBhZGRyZXNzIGlzbid0IG5lY2Vzc2FyeS4KKworICAgKiBJdCdzIGhlbHBmdWwgdG8gYWRkIHRoZSBidWcvcGF0Y2ggbnVtYmVyIGFzIGEgY29tbWVudDoKKworICAgVGhlIDpyZWY6YH5zb2NrZXQudHJhbnNtb2dyaWZ5KClgIGZ1bmN0aW9uIHdhcyBhZGRlZCB0byB0aGUKKyAgIDptb2Q6YHNvY2tldGAgbW9kdWxlLiAgKENvbnRyaWJ1dGVkIGJ5IFAuWS4gRGV2ZWxvcGVyIGluIDppc3N1ZTpgMTIzNDVgLikKKworICAgVGhpcyBzYXZlcyB0aGUgbWFpbnRhaW5lciB0aGUgZWZmb3J0IG9mIGdvaW5nIHRocm91Z2ggdGhlIE1lcmN1cmlhbCBsb2cKKyAgIHdoZW4gcmVzZWFyY2hpbmcgYSBjaGFuZ2UuCisKKyAgICogQ3Jvc3MgcmVmZXJlbmNpbmcgdGlwOiA6cmVmOmBtb2QuYXR0cmAgd2lsbCBkaXNwbGF5IGFzIGBgbW9kLmF0dHJgYCwKKyAgIHdoaWxlIDpyZWY6YH5tb2QuYXR0cmAgd2lsbCBkaXNwbGF5IGFzIGBgYXR0cmBgLgorCitUaGlzIGFydGljbGUgZXhwbGFpbnMgdGhlIG5ldyBmZWF0dXJlcyBpbiBQeXRob24gMy40LCBjb21wYXJlZCB0byAzLjMuCitQeXRob24gMy40IHdhcyByZWxlYXNlZCBvbiBNYXJjaCAxNiwgMjAxNC4gIEZvciBmdWxsIGRldGFpbHMsIHNlZSB0aGUKK2BjaGFuZ2Vsb2cgPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMuNC93aGF0c25ldy9jaGFuZ2Vsb2cuaHRtbD5gXy4KKworCisuLiBzZWVhbHNvOjoKKworICAgOnBlcDpgNDI5YCAtLSBQeXRob24gMy40IFJlbGVhc2UgU2NoZWR1bGUKKworCisKK1N1bW1hcnkgLS0gUmVsZWFzZSBIaWdobGlnaHRzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisuLiBUaGlzIHNlY3Rpb24gc2luZ2xlcyBvdXQgdGhlIG1vc3QgaW1wb3J0YW50IGNoYW5nZXMgaW4gUHl0aG9uIDMuNC4KKyAgIEJyZXZpdHkgaXMga2V5LgorCitOZXcgc3ludGF4IGZlYXR1cmVzOgorCisqIE5vIG5ldyBzeW50YXggZmVhdHVyZXMgd2VyZSBhZGRlZCBpbiBQeXRob24gMy40LgorCitPdGhlciBuZXcgZmVhdHVyZXM6CisKKyogOnJlZjpgcGlwIHNob3VsZCBhbHdheXMgYmUgYXZhaWxhYmxlIDx3aGF0c25ldy1wZXAtNDUzPmAgKDpwZXA6YDQ1M2ApLgorKiA6cmVmOmBOZXdseSBjcmVhdGVkIGZpbGUgZGVzY3JpcHRvcnMgYXJlIG5vbi1pbmhlcml0YWJsZSA8d2hhdHNuZXctcGVwLTQ0Nj5gCisgICg6cGVwOmA0NDZgKS4KKyogY29tbWFuZCBsaW5lIG9wdGlvbiBmb3IgOnJlZjpgaXNvbGF0ZWQgbW9kZSA8d2hhdHNuZXctaXNvbGF0ZWQtbW9kZT5gCisgICg6aXNzdWU6YDE2NDk5YCkuCisqIDpyZWY6YGltcHJvdmVtZW50cyBpbiB0aGUgaGFuZGxpbmcgb2YgY29kZWNzIDxjb2RlYy1oYW5kbGluZy1pbXByb3ZlbWVudHM+YAorICB0aGF0IGFyZSBub3QgdGV4dCBlbmNvZGluZ3MgKG11bHRpcGxlIGlzc3VlcykuCisqIDpyZWY6YEEgTW9kdWxlU3BlYyBUeXBlIDx3aGF0c25ldy1wZXAtNDUxPmAgZm9yIHRoZSBJbXBvcnQgU3lzdGVtCisgICg6cGVwOmA0NTFgKS4gIChBZmZlY3RzIGltcG9ydGVyIGF1dGhvcnMuKQorKiBUaGUgOm1vZDpgbWFyc2hhbGAgZm9ybWF0IGhhcyBiZWVuIG1hZGUgOnJlZjpgbW9yZSBjb21wYWN0IGFuZCBlZmZpY2llbnQKKyAgPHdoYXRzbmV3LW1hcnNoYWwtMz5gICg6aXNzdWU6YDE2NDc1YCkuCisKK05ldyBsaWJyYXJ5IG1vZHVsZXM6CisKKyogOm1vZDpgYXN5bmNpb2A6IDpyZWY6YE5ldyBwcm92aXNpb25hbCBBUEkgZm9yIGFzeW5jaHJvbm91cyBJTworICA8d2hhdHNuZXctYXN5bmNpbz5gICg6cGVwOmAzMTU2YCkuCisqIDptb2Q6YGVuc3VyZXBpcGA6IDpyZWY6YEJvb3RzdHJhcHBpbmcgdGhlIHBpcCBpbnN0YWxsZXIgPHdoYXRzbmV3LWVuc3VyZXBpcD5gCisgICg6cGVwOmA0NTNgKS4KKyogOm1vZDpgZW51bWA6IDpyZWY6YFN1cHBvcnQgZm9yIGVudW1lcmF0aW9uIHR5cGVzIDx3aGF0c25ldy1lbnVtPmAKKyAgKDpwZXA6YDQzNWApLgorKiA6bW9kOmBwYXRobGliYDogOnJlZjpgT2JqZWN0LW9yaWVudGVkIGZpbGVzeXN0ZW0gcGF0aHMgPHdoYXRzbmV3LXBhdGhsaWI+YAorICAoOnBlcDpgNDI4YCkuCisqIDptb2Q6YHNlbGVjdG9yc2A6IDpyZWY6YEhpZ2gtbGV2ZWwgYW5kIGVmZmljaWVudCBJL08gbXVsdGlwbGV4aW5nCisgIDx3aGF0c25ldy1zZWxlY3RvcnM+YCwgYnVpbHQgdXBvbiB0aGUgOm1vZDpgc2VsZWN0YCBtb2R1bGUgcHJpbWl0aXZlcyAocGFydAorICBvZiA6cGVwOmAzMTU2YCkuCisqIDptb2Q6YHN0YXRpc3RpY3NgOiBBIGJhc2ljIDpyZWY6YG51bWVyaWNhbGx5IHN0YWJsZSBzdGF0aXN0aWNzIGxpYnJhcnkKKyAgPHdoYXRzbmV3LXN0YXRpc3RpY3M+YCAoOnBlcDpgNDUwYCkuCisqIDptb2Q6YHRyYWNlbWFsbG9jYDogOnJlZjpgVHJhY2UgUHl0aG9uIG1lbW9yeSBhbGxvY2F0aW9ucworICA8d2hhdHNuZXctdHJhY2VtYWxsb2M+YCAoOnBlcDpgNDU0YCkuCisKK1NpZ25pZmljYW50bHkgaW1wcm92ZWQgbGlicmFyeSBtb2R1bGVzOgorCisqIDpyZWY6YFNpbmdsZS1kaXNwYXRjaCBnZW5lcmljIGZ1bmN0aW9ucyA8d2hhdHNuZXctc2luZ2xlZGlzcGF0Y2g+YCBpbgorICA6bW9kOmBmdW5jdG9vbHNgICg6cGVwOmA0NDNgKS4KKyogTmV3IDptb2Q6YHBpY2tsZWAgOnJlZjpgcHJvdG9jb2wgNCA8d2hhdHNuZXctcHJvdG9jb2wtND5gICg6cGVwOmAzMTU0YCkuCisqIDptb2Q6YG11bHRpcHJvY2Vzc2luZ2Agbm93IGhhcyA6cmVmOmBhbiBvcHRpb24gdG8gYXZvaWQgdXNpbmcgb3MuZm9yaworICBvbiBVbml4IDx3aGF0c25ldy1tdWx0aXByb2Nlc3Npbmctbm8tZm9yaz5gICg6aXNzdWU6YDg3MTNgKS4KKyogOm1vZDpgZW1haWxgIGhhcyBhIG5ldyBzdWJtb2R1bGUsIDptb2Q6YH5lbWFpbC5jb250ZW50bWFuYWdlcmAsIGFuZAorICBhIG5ldyA6bW9kOmB+ZW1haWwubWVzc2FnZS5NZXNzYWdlYCBzdWJjbGFzcworICAoOmNsYXNzOmB+ZW1haWwuY29udGVudG1hbmFnZXIuRW1haWxNZXNzYWdlYCkgdGhhdCA6cmVmOmBzaW1wbGlmeSBNSU1FCisgIGhhbmRsaW5nIDx3aGF0c25ld19lbWFpbF9jb250ZW50bWFuYWdlcj5gICg6aXNzdWU6YDE4ODkxYCkuCisqIFRoZSA6bW9kOmBpbnNwZWN0YCBhbmQgOm1vZDpgcHlkb2NgIG1vZHVsZXMgYXJlIG5vdyBjYXBhYmxlIG9mCisgIGNvcnJlY3QgaW50cm9zcGVjdGlvbiBvZiBhIG11Y2ggd2lkZXIgdmFyaWV0eSBvZiBjYWxsYWJsZSBvYmplY3RzLAorICB3aGljaCBpbXByb3ZlcyB0aGUgb3V0cHV0IG9mIHRoZSBQeXRob24gOmZ1bmM6YGhlbHBgIHN5c3RlbS4KKyogVGhlIDptb2Q6YGlwYWRkcmVzc2AgbW9kdWxlIEFQSSBoYXMgYmVlbiBkZWNsYXJlZCBzdGFibGUKKworU2VjdXJpdHkgaW1wcm92ZW1lbnRzOgorCisqIDpyZWY6YFNlY3VyZSBhbmQgaW50ZXJjaGFuZ2VhYmxlIGhhc2ggYWxnb3JpdGhtIDx3aGF0c25ldy1wZXAtNDU2PmAKKyAgKDpwZXA6YDQ1NmApLgorKiA6cmVmOmBNYWtlIG5ld2x5IGNyZWF0ZWQgZmlsZSBkZXNjcmlwdG9ycyBub24taW5oZXJpdGFibGUgPHdoYXRzbmV3LXBlcC00NDY+YAorICAoOnBlcDpgNDQ2YCkgdG8gYXZvaWQgbGVha2luZyBmaWxlIGRlc2NyaXB0b3JzIHRvIGNoaWxkIHByb2Nlc3Nlcy4KKyogTmV3IGNvbW1hbmQgbGluZSBvcHRpb24gZm9yIDpyZWY6YGlzb2xhdGVkIG1vZGUgPHdoYXRzbmV3LWlzb2xhdGVkLW1vZGU+YCwKKyAgKDppc3N1ZTpgMTY0OTlgKS4KKyogOm1vZDpgbXVsdGlwcm9jZXNzaW5nYCBub3cgaGFzIDpyZWY6YGFuIG9wdGlvbiB0byBhdm9pZCB1c2luZyBvcy5mb3JrCisgIG9uIFVuaXggPHdoYXRzbmV3LW11bHRpcHJvY2Vzc2luZy1uby1mb3JrPmAuICAqc3Bhd24qIGFuZCAqZm9ya3NlcnZlciogYXJlCisgIG1vcmUgc2VjdXJlIGJlY2F1c2UgdGhleSBhdm9pZCBzaGFyaW5nIGRhdGEgd2l0aCBjaGlsZCBwcm9jZXNzZXMuCisqIDptb2Q6YG11bHRpcHJvY2Vzc2luZ2AgY2hpbGQgcHJvY2Vzc2VzIG9uIFdpbmRvd3Mgbm8gbG9uZ2VyIGluaGVyaXQKKyAgYWxsIG9mIHRoZSBwYXJlbnQncyBpbmhlcml0YWJsZSBoYW5kbGVzLCBvbmx5IHRoZSBuZWNlc3Nhcnkgb25lcy4KKyogQSBuZXcgOmZ1bmM6YGhhc2hsaWIucGJrZGYyX2htYWNgIGZ1bmN0aW9uIHByb3ZpZGVzCisgIHRoZSBgUEtDUyM1IHBhc3N3b3JkLWJhc2VkIGtleSBkZXJpdmF0aW9uIGZ1bmN0aW9uIDIKKyAgPGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUEJLREYyPmBfLgorKiA6cmVmOmBUTFN2MS4xIGFuZCBUTFN2MS4yIHN1cHBvcnQgPHdoYXRzbmV3LXRscy0xMS0xMj5gIGZvciA6bW9kOmBzc2xgLgorKiA6cmVmOmBSZXRyaWV2aW5nIGNlcnRpZmljYXRlcyBmcm9tIHRoZSBXaW5kb3dzIHN5c3RlbSBjZXJ0IHN0b3JlIHN1cHBvcnQKKyAgPHdoYXRzbmV3MzQtd2luLWNlcnQtc3RvcmU+YCBmb3IgOm1vZDpgc3NsYC4KKyogOnJlZjpgU2VydmVyLXNpZGUgU05JIChTZXJ2ZXIgTmFtZSBJbmRpY2F0aW9uKSBzdXBwb3J0CisgIDx3aGF0c25ldzM0LXNuaT5gIGZvciA6bW9kOmBzc2xgLgorKiBUaGUgOmNsYXNzOmBzc2wuU1NMQ29udGV4dGAgY2xhc3MgaGFzIGEgOnJlZjpgbG90IG9mIGltcHJvdmVtZW50cworICA8d2hhdHNuZXczNC1zc2xjb250ZXh0PmAuCisqIEFsbCBtb2R1bGVzIGluIHRoZSBzdGFuZGFyZCBsaWJyYXJ5IHRoYXQgc3VwcG9ydCBTU0wgbm93IHN1cHBvcnQgc2VydmVyCisgIGNlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiwgaW5jbHVkaW5nIGhvc3RuYW1lIG1hdGNoaW5nCisgICg6ZnVuYzpgc3NsLm1hdGNoX2hvc3RuYW1lYCkgYW5kIENSTHMgKENlcnRpZmljYXRlIFJldm9jYXRpb24gbGlzdHMsIHNlZQorICA6ZnVuYzpgc3NsLlNTTENvbnRleHQubG9hZF92ZXJpZnlfbG9jYXRpb25zYCkuCisKK0NQeXRob24gaW1wbGVtZW50YXRpb24gaW1wcm92ZW1lbnRzOgorCisqIDpyZWY6YFNhZmUgb2JqZWN0IGZpbmFsaXphdGlvbiA8d2hhdHNuZXctcGVwLTQ0Mj5gICg6cGVwOmA0NDJgKS4KKyogTGV2ZXJhZ2luZyA6cGVwOmA0NDJgLCBpbiBtb3N0IGNhc2VzIDpyZWY6YG1vZHVsZSBnbG9iYWxzIGFyZSBubyBsb25nZXIgc2V0CisgIHRvIE5vbmUgZHVyaW5nIGZpbmFsaXphdGlvbiA8d2hhdHNuZXctcGVwLTQ0Mj5gICg6aXNzdWU6YDE4MjE0YCkuCisqIDpyZWY6YENvbmZpZ3VyYWJsZSBtZW1vcnkgYWxsb2NhdG9ycyA8d2hhdHNuZXctcGVwLTQ0NT5gICg6cGVwOmA0NDVgKS4KKyogOnJlZjpgQXJndW1lbnQgQ2xpbmljIDx3aGF0c25ldy1wZXAtNDM2PmAgKDpwZXA6YDQzNmApLgorCitQbGVhc2UgcmVhZCBvbiBmb3IgYSBjb21wcmVoZW5zaXZlIGxpc3Qgb2YgdXNlci1mYWNpbmcgY2hhbmdlcywgaW5jbHVkaW5nIG1hbnkKK290aGVyIHNtYWxsZXIgaW1wcm92ZW1lbnRzLCBDUHl0aG9uIG9wdGltaXphdGlvbnMsIGRlcHJlY2F0aW9ucywgYW5kIHBvdGVudGlhbAorcG9ydGluZyBpc3N1ZXMuCisKKworCitOZXcgRmVhdHVyZXMKKz09PT09PT09PT09PQorCisuLiBfd2hhdHNuZXctcGVwLTQ1MzoKKworUEVQIDQ1MzogRXhwbGljaXQgQm9vdHN0cmFwcGluZyBvZiBQSVAgaW4gUHl0aG9uIEluc3RhbGxhdGlvbnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0Jvb3RzdHJhcHBpbmcgcGlwIEJ5IERlZmF1bHQKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworVGhlIG5ldyA6bW9kOmBlbnN1cmVwaXBgIG1vZHVsZSAoZGVmaW5lZCBpbiA6cGVwOmA0NTNgKSBwcm92aWRlcyBhIHN0YW5kYXJkCitjcm9zcy1wbGF0Zm9ybSBtZWNoYW5pc20gdG8gYm9vdHN0cmFwIHRoZSBwaXAgaW5zdGFsbGVyIGludG8gUHl0aG9uCitpbnN0YWxsYXRpb25zIGFuZCB2aXJ0dWFsIGVudmlyb25tZW50cy4gVGhlIHZlcnNpb24gb2YgYGBwaXBgYCBpbmNsdWRlZAord2l0aCBQeXRob24gMy40LjAgaXMgYGBwaXBgYCAxLjUuNCwgYW5kIGZ1dHVyZSAzLjQueCBtYWludGVuYW5jZSByZWxlYXNlcword2lsbCB1cGRhdGUgdGhlIGJ1bmRsZWQgdmVyc2lvbiB0byB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgYGBwaXBgYCB0aGF0IGlzCithdmFpbGFibGUgYXQgdGhlIHRpbWUgb2YgY3JlYXRpbmcgdGhlIHJlbGVhc2UgY2FuZGlkYXRlLgorCitCeSBkZWZhdWx0LCB0aGUgY29tbWFuZHMgYGBwaXBYYGAgYW5kIGBgcGlwWC5ZYGAgd2lsbCBiZSBpbnN0YWxsZWQgb24gYWxsCitwbGF0Zm9ybXMgKHdoZXJlIFguWSBzdGFuZHMgZm9yIHRoZSB2ZXJzaW9uIG9mIHRoZSBQeXRob24gaW5zdGFsbGF0aW9uKSwKK2Fsb25nIHdpdGggdGhlIGBgcGlwYGAgUHl0aG9uIHBhY2thZ2UgYW5kIGl0cyBkZXBlbmRlbmNpZXMuIE9uIFdpbmRvd3MgYW5kCitpbiB2aXJ0dWFsIGVudmlyb25tZW50cyBvbiBhbGwgcGxhdGZvcm1zLCB0aGUgdW52ZXJzaW9uZWQgYGBwaXBgYCBjb21tYW5kCit3aWxsIGFsc28gYmUgaW5zdGFsbGVkLiBPbiBvdGhlciBwbGF0Zm9ybXMsIHRoZSBzeXN0ZW0gd2lkZSB1bnZlcnNpb25lZAorYGBwaXBgYCBjb21tYW5kIHR5cGljYWxseSByZWZlcnMgdG8gdGhlIHNlcGFyYXRlbHkgaW5zdGFsbGVkIFB5dGhvbiAyCit2ZXJzaW9uLgorCitUaGUgOnJlZjpgcHl2ZW52IDxzY3JpcHRzLXB5dmVudj5gIGNvbW1hbmQgbGluZSB1dGlsaXR5IGFuZCB0aGUgOm1vZDpgdmVudmAKK21vZHVsZSBtYWtlIHVzZSBvZiB0aGUgOm1vZDpgZW5zdXJlcGlwYCBtb2R1bGUgdG8gbWFrZSBgYHBpcGBgIHJlYWRpbHkKK2F2YWlsYWJsZSBpbiB2aXJ0dWFsIGVudmlyb25tZW50cy4gV2hlbiB1c2luZyB0aGUgY29tbWFuZCBsaW5lIHV0aWxpdHksCitgYHBpcGBgIGlzIGluc3RhbGxlZCBieSBkZWZhdWx0LCB3aGlsZSB3aGVuIHVzaW5nIHRoZSA6bW9kOmB2ZW52YCBtb2R1bGUKKzpyZWY6YHZlbnYtYXBpYCBpbnN0YWxsYXRpb24gb2YgYGBwaXBgYCBtdXN0IGJlIHJlcXVlc3RlZCBleHBsaWNpdGx5LgorCitGb3IgQ1B5dGhvbiA6cmVmOmBzb3VyY2UgYnVpbGRzIG9uIFBPU0lYIHN5c3RlbXMgPGJ1aWxkaW5nLXB5dGhvbi1vbi11bml4PmAsCit0aGUgYGBtYWtlIGluc3RhbGxgYCBhbmQgYGBtYWtlIGFsdGluc3RhbGxgYCBjb21tYW5kcyBib290c3RyYXAgYGBwaXBgYCBieQorZGVmYXVsdC4gIFRoaXMgYmVoYXZpb3VyIGNhbiBiZSBjb250cm9sbGVkIHRocm91Z2ggY29uZmlndXJlIG9wdGlvbnMsIGFuZAorb3ZlcnJpZGRlbiB0aHJvdWdoIE1ha2VmaWxlIG9wdGlvbnMuCisKK09uIFdpbmRvd3MgYW5kIE1hYyBPUyBYLCB0aGUgQ1B5dGhvbiBpbnN0YWxsZXJzIG5vdyBkZWZhdWx0IHRvIGluc3RhbGxpbmcKK2BgcGlwYGAgYWxvbmcgd2l0aCBDUHl0aG9uIGl0c2VsZiAodXNlcnMgbWF5IG9wdCBvdXQgb2YgaW5zdGFsbGluZyBpdAorZHVyaW5nIHRoZSBpbnN0YWxsYXRpb24gcHJvY2VzcykuIFdpbmRvdyB1c2VycyB3aWxsIG5lZWQgdG8gb3B0IGluIHRvIHRoZQorYXV0b21hdGljIGBgUEFUSGBgIG1vZGlmaWNhdGlvbnMgdG8gaGF2ZSBgYHBpcGBgIGF2YWlsYWJsZSBmcm9tIHRoZSBjb21tYW5kCitsaW5lIGJ5IGRlZmF1bHQsIG90aGVyd2lzZSBpdCBjYW4gc3RpbGwgYmUgYWNjZXNzZWQgdGhyb3VnaCB0aGUgUHl0aG9uCitsYXVuY2hlciBmb3IgV2luZG93cyBhcyBgYHB5IC1tIHBpcGBgLgorCitBcyBgZGlzY3Vzc2VkIGluIHRoZSBQRVBgX18sIHBsYXRmb3JtIHBhY2thZ2VycyBtYXkgY2hvb3NlIG5vdCB0byBpbnN0YWxsCit0aGVzZSBjb21tYW5kcyBieSBkZWZhdWx0LCBhcyBsb25nIGFzLCB3aGVuIGludm9rZWQsIHRoZXkgcHJvdmlkZSBjbGVhciBhbmQKK3NpbXBsZSBkaXJlY3Rpb25zIG9uIGhvdyB0byBpbnN0YWxsIHRoZW0gb24gdGhhdCBwbGF0Zm9ybSAodXN1YWxseSB1c2luZwordGhlIHN5c3RlbSBwYWNrYWdlIG1hbmFnZXIpLgorCitfXyBodHRwczovL3d3dy5weXRob24ub3JnL2Rldi9wZXBzL3BlcC0wNDUzLyNyZWNvbW1lbmRhdGlvbnMtZm9yLWRvd25zdHJlYW0tZGlzdHJpYnV0b3JzCisKKy4uIG5vdGU6OgorCisgICBUbyBhdm9pZCBjb25mbGljdHMgYmV0d2VlbiBwYXJhbGxlbCBQeXRob24gMiBhbmQgUHl0aG9uIDMgaW5zdGFsbGF0aW9ucywKKyAgIG9ubHkgdGhlIHZlcnNpb25lZCBgYHBpcDNgYCBhbmQgYGBwaXAzLjRgYCBjb21tYW5kcyBhcmUgYm9vdHN0cmFwcGVkIGJ5CisgICBkZWZhdWx0IHdoZW4gYGBlbnN1cmVwaXBgYCBpcyBpbnZva2VkIGRpcmVjdGx5IC0gdGhlIGBgLS1kZWZhdWx0LXBpcGBgCisgICBvcHRpb24gaXMgbmVlZGVkIHRvIGFsc28gcmVxdWVzdCB0aGUgdW52ZXJzaW9uZWQgYGBwaXBgYCBjb21tYW5kLgorICAgYGBweXZlbnZgYCBhbmQgdGhlIFdpbmRvd3MgaW5zdGFsbGVyIGVuc3VyZSB0aGF0IHRoZSB1bnF1YWxpZmllZCBgYHBpcGBgCisgICBjb21tYW5kIGlzIG1hZGUgYXZhaWxhYmxlIGluIHRob3NlIGVudmlyb25tZW50cywgYW5kIGBgcGlwYGAgY2FuIGFsd2F5cyBiZQorICAgaW52b2tlZCB2aWEgdGhlIGBgLW1gYCBzd2l0Y2ggcmF0aGVyIHRoYW4gZGlyZWN0bHkgdG8gYXZvaWQgYW1iaWd1aXR5IG9uCisgICBzeXN0ZW1zIHdpdGggbXVsdGlwbGUgUHl0aG9uIGluc3RhbGxhdGlvbnMuCisKKworRG9jdW1lbnRhdGlvbiBDaGFuZ2VzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworQXMgcGFydCBvZiB0aGlzIGNoYW5nZSwgdGhlIDpyZWY6YGluc3RhbGxpbmctaW5kZXhgIGFuZAorOnJlZjpgZGlzdHJpYnV0aW5nLWluZGV4YCBzZWN0aW9ucyBvZiB0aGUgZG9jdW1lbnRhdGlvbiBoYXZlIGJlZW4KK2NvbXBsZXRlbHkgcmVkZXNpZ25lZCBhcyBzaG9ydCBnZXR0aW5nIHN0YXJ0ZWQgYW5kIEZBUSBkb2N1bWVudHMuIE1vc3QKK3BhY2thZ2luZyBkb2N1bWVudGF0aW9uIGhhcyBub3cgYmVlbiBtb3ZlZCBvdXQgdG8gdGhlIFB5dGhvbiBQYWNrYWdpbmcKK0F1dGhvcml0eSBtYWludGFpbmVkIGBQeXRob24gUGFja2FnaW5nIFVzZXIgR3VpZGUKKzxodHRwczovL3BhY2thZ2luZy5weXRob24ub3JnPmBfXyBhbmQgdGhlIGRvY3VtZW50YXRpb24gb2YgdGhlIGluZGl2aWR1YWwKK3Byb2plY3RzLgorCitIb3dldmVyLCBhcyB0aGlzIG1pZ3JhdGlvbiBpcyBjdXJyZW50bHkgc3RpbGwgaW5jb21wbGV0ZSwgdGhlIGxlZ2FjeQordmVyc2lvbnMgb2YgdGhvc2UgZ3VpZGVzIHJlbWFpbmluZyBhdmFpbGFibGUgYXMgOnJlZjpgaW5zdGFsbC1pbmRleGAKK2FuZCA6cmVmOmBkaXN0dXRpbHMtaW5kZXhgLgorCisuLiBzZWVhbHNvOjoKKworICAgOnBlcDpgNDUzYCAtLSBFeHBsaWNpdCBib290c3RyYXBwaW5nIG9mIHBpcCBpbiBQeXRob24gaW5zdGFsbGF0aW9ucworICAgICAgUEVQIHdyaXR0ZW4gYnkgRG9uYWxkIFN0dWZmdCBhbmQgTmljayBDb2dobGFuLCBpbXBsZW1lbnRlZCBieQorICAgICAgRG9uYWxkIFN0dWZmdCwgTmljayBDb2dobGFuLCBNYXJ0aW4gdm9uIEzDtndpcyBhbmQgTmVkIERlaWx5LgorCisKKy4uIF93aGF0c25ldy1wZXAtNDQ2OgorCitQRVAgNDQ2OiBOZXdseSBDcmVhdGVkIEZpbGUgRGVzY3JpcHRvcnMgQXJlIE5vbi1Jbmhlcml0YWJsZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworOnBlcDpgNDQ2YCBtYWtlcyBuZXdseSBjcmVhdGVkIGZpbGUgZGVzY3JpcHRvcnMgOnJlZjpgbm9uLWluaGVyaXRhYmxlCis8ZmRfaW5oZXJpdGFuY2U+YC4gIEluIGdlbmVyYWwsIHRoaXMgaXMgdGhlIGJlaGF2aW9yIGFuIGFwcGxpY2F0aW9uIHdpbGwKK3dhbnQ6IHdoZW4gbGF1bmNoaW5nIGEgbmV3IHByb2Nlc3MsIGhhdmluZyBjdXJyZW50bHkgb3BlbiBmaWxlcyBhbHNvCitvcGVuIGluIHRoZSBuZXcgcHJvY2VzcyBjYW4gbGVhZCB0byBhbGwgc29ydHMgb2YgaGFyZCB0byBmaW5kIGJ1Z3MsCithbmQgcG90ZW50aWFsbHkgdG8gc2VjdXJpdHkgaXNzdWVzLgorCitIb3dldmVyLCB0aGVyZSBhcmUgb2NjYXNpb25zIHdoZW4gaW5oZXJpdGFuY2UgaXMgZGVzaXJlZC4gIFRvIHN1cHBvcnQKK3RoZXNlIGNhc2VzLCB0aGUgZm9sbG93aW5nIG5ldyBmdW5jdGlvbnMgYW5kIG1ldGhvZHMgYXJlIGF2YWlsYWJsZToKKworKiA6ZnVuYzpgb3MuZ2V0X2luaGVyaXRhYmxlYCwgOmZ1bmM6YG9zLnNldF9pbmhlcml0YWJsZWAKKyogOmZ1bmM6YG9zLmdldF9oYW5kbGVfaW5oZXJpdGFibGVgLCA6ZnVuYzpgb3Muc2V0X2hhbmRsZV9pbmhlcml0YWJsZWAKKyogOm1ldGg6YHNvY2tldC5zb2NrZXQuZ2V0X2luaGVyaXRhYmxlYCwgOm1ldGg6YHNvY2tldC5zb2NrZXQuc2V0X2luaGVyaXRhYmxlYAorCisuLiBzZWVhbHNvOjoKKworICAgOnBlcDpgNDQ2YCAtLSBNYWtlIG5ld2x5IGNyZWF0ZWQgZmlsZSBkZXNjcmlwdG9ycyBub24taW5oZXJpdGFibGUKKyAgICAgIFBFUCB3cml0dGVuIGFuZCBpbXBsZW1lbnRlZCBieSBWaWN0b3IgU3Rpbm5lci4KKworCisuLiBfY29kZWMtaGFuZGxpbmctaW1wcm92ZW1lbnRzOgorCitJbXByb3ZlbWVudHMgdG8gQ29kZWMgSGFuZGxpbmcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTaW5jZSBpdCB3YXMgZmlyc3QgaW50cm9kdWNlZCwgdGhlIDptb2Q6YGNvZGVjc2AgbW9kdWxlIGhhcyBhbHdheXMgYmVlbgoraW50ZW5kZWQgdG8gb3BlcmF0ZSBhcyBhIHR5cGUtbmV1dHJhbCBkeW5hbWljIGVuY29kaW5nIGFuZCBkZWNvZGluZworc3lzdGVtLiBIb3dldmVyLCBpdHMgY2xvc2UgY291cGxpbmcgd2l0aCB0aGUgUHl0aG9uIHRleHQgbW9kZWwsIGVzcGVjaWFsbHkKK3RoZSB0eXBlIHJlc3RyaWN0ZWQgY29udmVuaWVuY2UgbWV0aG9kcyBvbiB0aGUgYnVpbHRpbiA6Y2xhc3M6YHN0cmAsCis6Y2xhc3M6YGJ5dGVzYCBhbmQgOmNsYXNzOmBieXRlYXJyYXlgIHR5cGVzLCBoYXMgaGlzdG9yaWNhbGx5IG9ic2N1cmVkIHRoYXQKK2ZhY3QuCisKK0FzIGEga2V5IHN0ZXAgaW4gY2xhcmlmeWluZyB0aGUgc2l0dWF0aW9uLCB0aGUgOm1ldGg6YGNvZGVjcy5lbmNvZGVgIGFuZAorOm1ldGg6YGNvZGVjcy5kZWNvZGVgIGNvbnZlbmllbmNlIGZ1bmN0aW9ucyBhcmUgbm93IHByb3Blcmx5IGRvY3VtZW50ZWQgaW4KK1B5dGhvbiAyLjcsIDMuMyBhbmQgMy40LiBUaGVzZSBmdW5jdGlvbnMgaGF2ZSBleGlzdGVkIGluIHRoZSA6bW9kOmBjb2RlY3NgCittb2R1bGUgKGFuZCBoYXZlIGJlZW4gY292ZXJlZCBieSB0aGUgcmVncmVzc2lvbiB0ZXN0IHN1aXRlKSBzaW5jZSBQeXRob24gMi40LAorYnV0IHdlcmUgcHJldmlvdXNseSBvbmx5IGRpc2NvdmVyYWJsZSB0aHJvdWdoIHJ1bnRpbWUgaW50cm9zcGVjdGlvbi4KKworVW5saWtlIHRoZSBjb252ZW5pZW5jZSBtZXRob2RzIG9uIDpjbGFzczpgc3RyYCwgOmNsYXNzOmBieXRlc2AgYW5kCis6Y2xhc3M6YGJ5dGVhcnJheWAsIHRoZSA6bW9kOmBjb2RlY3NgIGNvbnZlbmllbmNlIGZ1bmN0aW9ucyBzdXBwb3J0IGFyYml0cmFyeQorY29kZWNzIGluIGJvdGggUHl0aG9uIDIgYW5kIFB5dGhvbiAzLCByYXRoZXIgdGhhbiBiZWluZyBsaW1pdGVkIHRvIFVuaWNvZGUgdGV4dAorZW5jb2RpbmdzIChpbiBQeXRob24gMykgb3IgYGBiYXNlc3RyaW5nYGAgPC0+IGBgYmFzZXN0cmluZ2BgIGNvbnZlcnNpb25zIChpbgorUHl0aG9uIDIpLgorCitJbiBQeXRob24gMy40LCB0aGUgaW50ZXJwcmV0ZXIgaXMgYWJsZSB0byBpZGVudGlmeSB0aGUga25vd24gbm9uLXRleHQKK2VuY29kaW5ncyBwcm92aWRlZCBpbiB0aGUgc3RhbmRhcmQgbGlicmFyeSBhbmQgZGlyZWN0IHVzZXJzIHRvd2FyZHMgdGhlc2UKK2dlbmVyYWwgcHVycG9zZSBjb252ZW5pZW5jZSBmdW5jdGlvbnMgd2hlbiBhcHByb3ByaWF0ZTo6CisKKyAgICA+Pj4gYiJhYmNkZWYiLmRlY29kZSgiaGV4IikKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA8bW9kdWxlPgorICAgIExvb2t1cEVycm9yOiAnaGV4JyBpcyBub3QgYSB0ZXh0IGVuY29kaW5nOyB1c2UgY29kZWNzLmRlY29kZSgpIHRvIGhhbmRsZSBhcmJpdHJhcnkgY29kZWNzCisKKyAgICA+Pj4gImhlbGxvIi5lbmNvZGUoInJvdDEzIikKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA8bW9kdWxlPgorICAgIExvb2t1cEVycm9yOiAncm90MTMnIGlzIG5vdCBhIHRleHQgZW5jb2Rpbmc7IHVzZSBjb2RlY3MuZW5jb2RlKCkgdG8gaGFuZGxlIGFyYml0cmFyeSBjb2RlY3MKKworICAgID4+PiBvcGVuKCJmb28udHh0IiwgZW5jb2Rpbmc9ImhleCIpCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgMSwgaW4gPG1vZHVsZT4KKyAgICBMb29rdXBFcnJvcjogJ2hleCcgaXMgbm90IGEgdGV4dCBlbmNvZGluZzsgdXNlIGNvZGVjcy5vcGVuKCkgdG8gaGFuZGxlIGFyYml0cmFyeSBjb2RlY3MKKworSW4gYSByZWxhdGVkIGNoYW5nZSwgd2hlbmV2ZXIgaXQgaXMgZmVhc2libGUgd2l0aG91dCBicmVha2luZyBiYWNrd2FyZHMKK2NvbXBhdGliaWxpdHksIGV4Y2VwdGlvbnMgcmFpc2VkIGR1cmluZyBlbmNvZGluZyBhbmQgZGVjb2Rpbmcgb3BlcmF0aW9ucworYXJlIHdyYXBwZWQgaW4gYSBjaGFpbmVkIGV4Y2VwdGlvbiBvZiB0aGUgc2FtZSB0eXBlIHRoYXQgbWVudGlvbnMgdGhlCituYW1lIG9mIHRoZSBjb2RlYyByZXNwb25zaWJsZSBmb3IgcHJvZHVjaW5nIHRoZSBlcnJvcjo6CisKKyAgICA+Pj4gaW1wb3J0IGNvZGVjcworCisgICAgPj4+IGNvZGVjcy5kZWNvZGUoYiJhYmNkZWZnaCIsICJoZXgiKQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgIEZpbGUgIi91c3IvbGliL3B5dGhvbjMuNC9lbmNvZGluZ3MvaGV4X2NvZGVjLnB5IiwgbGluZSAyMCwgaW4gaGV4X2RlY29kZQorICAgICAgICByZXR1cm4gKGJpbmFzY2lpLmEyYl9oZXgoaW5wdXQpLCBsZW4oaW5wdXQpKQorICAgIGJpbmFzY2lpLkVycm9yOiBOb24taGV4YWRlY2ltYWwgZGlnaXQgZm91bmQKKworICAgIFRoZSBhYm92ZSBleGNlcHRpb24gd2FzIHRoZSBkaXJlY3QgY2F1c2Ugb2YgdGhlIGZvbGxvd2luZyBleGNlcHRpb246CisKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA8bW9kdWxlPgorICAgIGJpbmFzY2lpLkVycm9yOiBkZWNvZGluZyB3aXRoICdoZXgnIGNvZGVjIGZhaWxlZCAoRXJyb3I6IE5vbi1oZXhhZGVjaW1hbCBkaWdpdCBmb3VuZCkKKworICAgID4+PiBjb2RlY3MuZW5jb2RlKCJoZWxsbyIsICJiejIiKQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgIEZpbGUgIi91c3IvbGliL3B5dGhvbjMuNC9lbmNvZGluZ3MvYnoyX2NvZGVjLnB5IiwgbGluZSAxNywgaW4gYnoyX2VuY29kZQorICAgICAgICByZXR1cm4gKGJ6Mi5jb21wcmVzcyhpbnB1dCksIGxlbihpbnB1dCkpCisgICAgICBGaWxlICIvdXNyL2xpYi9weXRob24zLjQvYnoyLnB5IiwgbGluZSA0OTgsIGluIGNvbXByZXNzCisgICAgICAgIHJldHVybiBjb21wLmNvbXByZXNzKGRhdGEpICsgY29tcC5mbHVzaCgpCisgICAgVHlwZUVycm9yOiAnc3RyJyBkb2VzIG5vdCBzdXBwb3J0IHRoZSBidWZmZXIgaW50ZXJmYWNlCisKKyAgICBUaGUgYWJvdmUgZXhjZXB0aW9uIHdhcyB0aGUgZGlyZWN0IGNhdXNlIG9mIHRoZSBmb2xsb3dpbmcgZXhjZXB0aW9uOgorCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgMSwgaW4gPG1vZHVsZT4KKyAgICBUeXBlRXJyb3I6IGVuY29kaW5nIHdpdGggJ2J6MicgY29kZWMgZmFpbGVkIChUeXBlRXJyb3I6ICdzdHInIGRvZXMgbm90IHN1cHBvcnQgdGhlIGJ1ZmZlciBpbnRlcmZhY2UpCisKK0ZpbmFsbHksIGFzIHRoZSBleGFtcGxlcyBhYm92ZSBzaG93LCB0aGVzZSBpbXByb3ZlbWVudHMgaGF2ZSBwZXJtaXR0ZWQKK3RoZSByZXN0b3JhdGlvbiBvZiB0aGUgY29udmVuaWVuY2UgYWxpYXNlcyBmb3IgdGhlIG5vbi1Vbmljb2RlIGNvZGVjcyB0aGF0Cit3ZXJlIHRoZW1zZWx2ZXMgcmVzdG9yZWQgaW4gUHl0aG9uIDMuMi4gVGhpcyBtZWFucyB0aGF0IGVuY29kaW5nIGJpbmFyeSBkYXRhCit0byBhbmQgZnJvbSBpdHMgaGV4YWRlY2ltYWwgcmVwcmVzZW50YXRpb24gKGZvciBleGFtcGxlKSBjYW4gbm93IGJlIHdyaXR0ZW4KK2FzOjoKKworICAgID4+PiBmcm9tIGNvZGVjcyBpbXBvcnQgZW5jb2RlLCBkZWNvZGUKKyAgICA+Pj4gZW5jb2RlKGIiaGVsbG8iLCAiaGV4IikKKyAgICBiJzY4NjU2YzZjNmYnCisgICAgPj4+IGRlY29kZShiIjY4NjU2YzZjNmYiLCAiaGV4IikKKyAgICBiJ2hlbGxvJworCitUaGUgYmluYXJ5IGFuZCB0ZXh0IHRyYW5zZm9ybXMgcHJvdmlkZWQgaW4gdGhlIHN0YW5kYXJkIGxpYnJhcnkgYXJlIGRldGFpbGVkCitpbiA6cmVmOmBiaW5hcnktdHJhbnNmb3Jtc2AgYW5kIDpyZWY6YHRleHQtdHJhbnNmb3Jtc2AuCisKKyhDb250cmlidXRlZCBieSBOaWNrIENvZ2hsYW4gaW4gOmlzc3VlOmA3NDc1YCwgOmlzc3VlOmAxNzgyN2AsCis6aXNzdWU6YDE3ODI4YCBhbmQgOmlzc3VlOmAxOTYxOWAuKQorCisKKy4uIF93aGF0c25ldy1wZXAtNDUxOgorCitQRVAgNDUxOiBBIE1vZHVsZVNwZWMgVHlwZSBmb3IgdGhlIEltcG9ydCBTeXN0ZW0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCis6cGVwOmA0NTFgIHByb3ZpZGVzIGFuIGVuY2Fwc3VsYXRpb24gb2YgdGhlIGluZm9ybWF0aW9uIGFib3V0IGEgbW9kdWxlIHRoYXQgdGhlCitpbXBvcnQgbWFjaGluZXJ5IHdpbGwgdXNlIHRvIGxvYWQgaXQgKHRoYXQgaXMsIGEgbW9kdWxlIHNwZWNpZmljYXRpb24pLiAgVGhpcworaGVscHMgc2ltcGxpZnkgYm90aCB0aGUgaW1wb3J0IGltcGxlbWVudGF0aW9uIGFuZCBzZXZlcmFsIGltcG9ydC1yZWxhdGVkIEFQSXMuCitUaGUgY2hhbmdlIGlzIGFsc28gYSBzdGVwcGluZyBzdG9uZSBmb3IgYHNldmVyYWwgZnV0dXJlIGltcG9ydC1yZWxhdGVkCitpbXByb3ZlbWVudHNgX18uCisKK19fIGh0dHBzOi8vbWFpbC5weXRob24ub3JnL3BpcGVybWFpbC9weXRob24tZGV2LzIwMTMtTm92ZW1iZXIvMTMwMTExLmh0bWwKKworVGhlIHB1YmxpYy1mYWNpbmcgY2hhbmdlcyBmcm9tIHRoZSBQRVAgYXJlIGVudGlyZWx5IGJhY2t3YXJkLWNvbXBhdGlibGUuCitGdXJ0aGVybW9yZSwgdGhleSBzaG91bGQgYmUgdHJhbnNwYXJlbnQgdG8gZXZlcnlvbmUgYnV0IGltcG9ydGVyIGF1dGhvcnMuICBLZXkKK2ZpbmRlciBhbmQgbG9hZGVyIG1ldGhvZHMgaGF2ZSBiZWVuIGRlcHJlY2F0ZWQsIGJ1dCB0aGV5IHdpbGwgY29udGludWUgd29ya2luZy4KK05ldyBpbXBvcnRlcnMgc2hvdWxkIHVzZSB0aGUgbmV3IG1ldGhvZHMgZGVzY3JpYmVkIGluIHRoZSBQRVAuICBFeGlzdGluZworaW1wb3J0ZXJzIHNob3VsZCBiZSB1cGRhdGVkIHRvIGltcGxlbWVudCB0aGUgbmV3IG1ldGhvZHMuICBTZWUgdGhlCis6cmVmOmBkZXByZWNhdGVkLTMuNGAgc2VjdGlvbiBmb3IgYSBsaXN0IG9mIG1ldGhvZHMgdGhhdCBzaG91bGQgYmUgcmVwbGFjZWQgYW5kCit0aGVpciByZXBsYWNlbWVudHMuCisKKworT3RoZXIgTGFuZ3VhZ2UgQ2hhbmdlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTb21lIHNtYWxsZXIgY2hhbmdlcyBtYWRlIHRvIHRoZSBjb3JlIFB5dGhvbiBsYW5ndWFnZSBhcmU6CisKKyogVW5pY29kZSBkYXRhYmFzZSB1cGRhdGVkIHRvIFVDRCB2ZXJzaW9uIDYuMy4KKworKiA6ZnVuYzpgbWluYCBhbmQgOmZ1bmM6YG1heGAgbm93IGFjY2VwdCBhICpkZWZhdWx0KiBrZXl3b3JkLW9ubHkgYXJndW1lbnQgdGhhdAorICBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSB2YWx1ZSB0aGV5IHJldHVybiBpZiB0aGUgaXRlcmFibGUgdGhleSBhcmUKKyAgZXZhbHVhdGluZyBoYXMgbm8gZWxlbWVudHMuICAoQ29udHJpYnV0ZWQgYnkgSnVsaWFuIEJlcm1hbiBpbgorICA6aXNzdWU6YDE4MTExYC4pCisKKyogTW9kdWxlIG9iamVjdHMgYXJlIG5vdyA6bW9kOmB3ZWFrcmVmYCdhYmxlLgorCisqIE1vZHVsZSBgYF9fZmlsZV9fYGAgYXR0cmlidXRlcyAoYW5kIHJlbGF0ZWQgdmFsdWVzKSBzaG91bGQgbm93IGFsd2F5cworICBjb250YWluIGFic29sdXRlIHBhdGhzIGJ5IGRlZmF1bHQsIHdpdGggdGhlIHNvbGUgZXhjZXB0aW9uIG9mCisgIGBgX19tYWluX18uX19maWxlX19gYCB3aGVuIGEgc2NyaXB0IGhhcyBiZWVuIGV4ZWN1dGVkIGRpcmVjdGx5IHVzaW5nCisgIGEgcmVsYXRpdmUgcGF0aC4gIChDb250cmlidXRlZCBieSBCcmV0dCBDYW5ub24gaW4gOmlzc3VlOmAxODQxNmAuKQorCisqIEFsbCB0aGUgVVRGLVwqIGNvZGVjcyAoZXhjZXB0IFVURi03KSBub3cgcmVqZWN0IHN1cnJvZ2F0ZXMgZHVyaW5nIGJvdGgKKyAgZW5jb2RpbmcgYW5kIGRlY29kaW5nIHVubGVzcyB0aGUgYGBzdXJyb2dhdGVwYXNzYGAgZXJyb3IgaGFuZGxlciBpcyB1c2VkLAorICB3aXRoIHRoZSBleGNlcHRpb24gb2YgdGhlIFVURi0xNiBkZWNvZGVyICh3aGljaCBhY2NlcHRzIHZhbGlkIHN1cnJvZ2F0ZSBwYWlycykKKyAgYW5kIHRoZSBVVEYtMTYgZW5jb2RlciAod2hpY2ggcHJvZHVjZXMgdGhlbSB3aGlsZSBlbmNvZGluZyBub24tQk1QIGNoYXJhY3RlcnMpLgorICAoQ29udHJpYnV0ZWQgYnkgVmljdG9yIFN0aW5uZXIsIEthbmctSGFvIChLZW5ueSkgTHUgYW5kIFNlcmhpeSBTdG9yY2hha2EgaW4KKyAgOmlzc3VlOmAxMjg5MmAuKQorCisqIE5ldyBHZXJtYW4gRUJDRElDIDpyZWY6YGNvZGVjIDxzdGFuZGFyZC1lbmNvZGluZ3M+YCBgYGNwMjczYGAuICAoQ29udHJpYnV0ZWQKKyAgYnkgTWljaGFlbCBCaWVyZW5mZWxkIGFuZCBBbmRyZXcgS3VjaGxpbmcgaW4gOmlzc3VlOmAxMDk3Nzk3YC4pCisKKyogTmV3IFVrcmFpbmlhbiA6cmVmOmBjb2RlYyA8c3RhbmRhcmQtZW5jb2RpbmdzPmAgYGBjcDExMjVgYC4gIChDb250cmlidXRlZCBieQorICBTZXJoaXkgU3RvcmNoYWthIGluIDppc3N1ZTpgMTk2NjhgLikKKworKiA6Y2xhc3M6YGJ5dGVzYC5qb2luKCkgYW5kIDpjbGFzczpgYnl0ZWFycmF5YC5qb2luKCkgbm93IGFjY2VwdCBhcmJpdHJhcnkKKyAgYnVmZmVyIG9iamVjdHMgYXMgYXJndW1lbnRzLiAgKENvbnRyaWJ1dGVkIGJ5IEFudG9pbmUgUGl0cm91IGluCisgIDppc3N1ZTpgMTU5NThgLikKKworKiBUaGUgOmNsYXNzOmBpbnRgIGNvbnN0cnVjdG9yIG5vdyBhY2NlcHRzIGFueSBvYmplY3QgdGhhdCBoYXMgYW4gYGBfX2luZGV4X19gYAorICBtZXRob2QgZm9yIGl0cyAqYmFzZSogYXJndW1lbnQuICAoQ29udHJpYnV0ZWQgYnkgTWFyayBEaWNraW5zb24gaW4KKyAgOmlzc3VlOmAxNjc3MmAuKQorCisqIEZyYW1lIG9iamVjdHMgbm93IGhhdmUgYSA6ZnVuYzpgfmZyYW1lLmNsZWFyYCBtZXRob2QgdGhhdCBjbGVhcnMgYWxsCisgIHJlZmVyZW5jZXMgdG8gbG9jYWwgdmFyaWFibGVzIGZyb20gdGhlIGZyYW1lLiAgKENvbnRyaWJ1dGVkIGJ5IEFudG9pbmUgUGl0cm91CisgIGluIDppc3N1ZTpgMTc5MzRgLikKKworKiA6Y2xhc3M6YG1lbW9yeXZpZXdgIGlzIG5vdyByZWdpc3RlcmVkIGFzIGEgOmNsYXNzOmBTZXF1ZW5jZSA8Y29sbGVjdGlvbnMuYWJjPmAsCisgIGFuZCBzdXBwb3J0cyB0aGUgOmZ1bmM6YHJldmVyc2VkYCBidWlsdGluLiAgKENvbnRyaWJ1dGVkIGJ5IE5pY2sgQ29naGxhbgorICBhbmQgQ2xhdWRpdSBQb3BhIGluIDppc3N1ZTpgMTg2OTBgIGFuZCA6aXNzdWU6YDE5MDc4YC4pCisKKyogU2lnbmF0dXJlcyByZXBvcnRlZCBieSA6ZnVuYzpgaGVscGAgaGF2ZSBiZWVuIG1vZGlmaWVkIGFuZCBpbXByb3ZlZCBpbgorICBzZXZlcmFsIGNhc2VzIGFzIGEgcmVzdWx0IG9mIHRoZSBpbnRyb2R1Y3Rpb24gb2YgQXJndW1lbnQgQ2xpbmljIGFuZCBvdGhlcgorICBjaGFuZ2VzIHRvIHRoZSA6bW9kOmBpbnNwZWN0YCBhbmQgOm1vZDpgcHlkb2NgIG1vZHVsZXMuCisKKyogOm1ldGg6YH5vYmplY3QuX19sZW5ndGhfaGludF9fYCBpcyBub3cgcGFydCBvZiB0aGUgZm9ybWFsIGxhbmd1YWdlCisgIHNwZWNpZmljYXRpb24gKHNlZSA6cGVwOmA0MjRgKS4gIChDb250cmlidXRlZCBieSBBcm1pbiBSb25hY2hlciBpbgorICA6aXNzdWU6YDE2MTQ4YC4pCisKKworTmV3IE1vZHVsZXMKKz09PT09PT09PT09CisKKworLi4gX3doYXRzbmV3LWFzeW5jaW86CisKK2FzeW5jaW8KKy0tLS0tLS0KKworVGhlIG5ldyA6bW9kOmBhc3luY2lvYCBtb2R1bGUgKGRlZmluZWQgaW4gOnBlcDpgMzE1NmApIHByb3ZpZGVzIGEgc3RhbmRhcmQKK3BsdWdnYWJsZSBldmVudCBsb29wIG1vZGVsIGZvciBQeXRob24sIHByb3ZpZGluZyBzb2xpZCBhc3luY2hyb25vdXMgSU8KK3N1cHBvcnQgaW4gdGhlIHN0YW5kYXJkIGxpYnJhcnksIGFuZCBtYWtpbmcgaXQgZWFzaWVyIGZvciBvdGhlciBldmVudCBsb29wCitpbXBsZW1lbnRhdGlvbnMgdG8gaW50ZXJvcGVyYXRlIHdpdGggdGhlIHN0YW5kYXJkIGxpYnJhcnkgYW5kIGVhY2ggb3RoZXIuCisKK0ZvciBQeXRob24gMy40LCB0aGlzIG1vZHVsZSBpcyBjb25zaWRlcmVkIGEgOnRlcm06YHByb3Zpc2lvbmFsIEFQSWAuCisKKy4uIHNlZWFsc286OgorCisgICA6cGVwOmAzMTU2YCAtLSBBc3luY2hyb25vdXMgSU8gU3VwcG9ydCBSZWJvb3RlZDogdGhlICJhc3luY2lvIiBNb2R1bGUKKyAgICAgIFBFUCB3cml0dGVuIGFuZCBpbXBsZW1lbnRhdGlvbiBsZWQgYnkgR3VpZG8gdmFuIFJvc3N1bS4KKworCisuLiBfd2hhdHNuZXctZW5zdXJlcGlwOgorCitlbnN1cmVwaXAKKy0tLS0tLS0tLQorCitUaGUgbmV3IDptb2Q6YGVuc3VyZXBpcGAgbW9kdWxlIGlzIHRoZSBwcmltYXJ5IGluZnJhc3RydWN0dXJlIGZvciB0aGUKKzpwZXA6YDQ1M2AgaW1wbGVtZW50YXRpb24uICBJbiB0aGUgbm9ybWFsIGNvdXJzZSBvZiBldmVudHMgZW5kIHVzZXJzIHdpbGwgbm90CituZWVkIHRvIGludGVyYWN0IHdpdGggdGhpcyBtb2R1bGUsIGJ1dCBpdCBjYW4gYmUgdXNlZCB0byBtYW51YWxseSBib290c3RyYXAKK2BgcGlwYGAgaWYgdGhlIGF1dG9tYXRlZCBib290c3RyYXBwaW5nIGludG8gYW4gaW5zdGFsbGF0aW9uIG9yIHZpcnR1YWwKK2Vudmlyb25tZW50IHdhcyBkZWNsaW5lZC4KKworOm1vZDpgZW5zdXJlcGlwYCBpbmNsdWRlcyBhIGJ1bmRsZWQgY29weSBvZiBgYHBpcGBgLCB1cC10by1kYXRlIGFzIG9mIHRoZSBmaXJzdAorcmVsZWFzZSBjYW5kaWRhdGUgb2YgdGhlIHJlbGVhc2Ugb2YgQ1B5dGhvbiB3aXRoIHdoaWNoIGl0IHNoaXBzICh0aGlzIGFwcGxpZXMKK3RvIGJvdGggbWFpbnRlbmFuY2UgcmVsZWFzZXMgYW5kIGZlYXR1cmUgcmVsZWFzZXMpLiAgYGBlbnN1cmVwaXBgYCBkb2VzIG5vdAorYWNjZXNzIHRoZSBpbnRlcm5ldC4gIElmIHRoZSBpbnN0YWxsYXRpb24gaGFzIEludGVybmV0IGFjY2VzcywgYWZ0ZXIKK2BgZW5zdXJlcGlwYGAgaXMgcnVuIHRoZSBidW5kbGVkIGBgcGlwYGAgY2FuIGJlIHVzZWQgdG8gdXBncmFkZSBgYHBpcGBgIHRvIGEKK21vcmUgcmVjZW50IHJlbGVhc2UgdGhhbiB0aGUgYnVuZGxlZCBvbmUuICAoTm90ZSB0aGF0IHN1Y2ggYW4gdXBncmFkZWQgdmVyc2lvbgorb2YgYGBwaXBgYCBpcyBjb25zaWRlcmVkIHRvIGJlIGEgc2VwYXJhdGVseSBpbnN0YWxsZWQgcGFja2FnZSBhbmQgd2lsbCBub3QgYmUKK3JlbW92ZWQgaWYgUHl0aG9uIGlzIHVuaW5zdGFsbGVkLikKKworVGhlIG1vZHVsZSBpcyBuYW1lZCAqZW5zdXJlKlwgcGlwIGJlY2F1c2UgaWYgY2FsbGVkIHdoZW4gYGBwaXBgYCBpcyBhbHJlYWR5CitpbnN0YWxsZWQsIGl0IGRvZXMgbm90aGluZy4gIEl0IGFsc28gaGFzIGFuIGBgLS11cGdyYWRlYGAgb3B0aW9uIHRoYXQgd2lsbAorY2F1c2UgaXQgdG8gaW5zdGFsbCB0aGUgYnVuZGxlZCBjb3B5IG9mIGBgcGlwYGAgaWYgdGhlIGV4aXN0aW5nIGluc3RhbGxlZAordmVyc2lvbiBvZiBgYHBpcGBgIGlzIG9sZGVyIHRoYW4gdGhlIGJ1bmRsZWQgY29weS4KKworCisuLiBfd2hhdHNuZXctZW51bToKKworZW51bQorLS0tLQorCitUaGUgbmV3IDptb2Q6YGVudW1gIG1vZHVsZSAoZGVmaW5lZCBpbiA6cGVwOmA0MzVgKSBwcm92aWRlcyBhIHN0YW5kYXJkCitpbXBsZW1lbnRhdGlvbiBvZiBlbnVtZXJhdGlvbiB0eXBlcywgYWxsb3dpbmcgb3RoZXIgbW9kdWxlcyAoc3VjaCBhcworOm1vZDpgc29ja2V0YCkgdG8gcHJvdmlkZSBtb3JlIGluZm9ybWF0aXZlIGVycm9yIG1lc3NhZ2VzIGFuZCBiZXR0ZXIKK2RlYnVnZ2luZyBzdXBwb3J0IGJ5IHJlcGxhY2luZyBvcGFxdWUgaW50ZWdlciBjb25zdGFudHMgd2l0aCBiYWNrd2FyZHMKK2NvbXBhdGlibGUgZW51bWVyYXRpb24gdmFsdWVzLgorCisuLiBzZWVhbHNvOjoKKworICAgOnBlcDpgNDM1YCAtLSBBZGRpbmcgYW4gRW51bSB0eXBlIHRvIHRoZSBQeXRob24gc3RhbmRhcmQgbGlicmFyeQorICAgICAgUEVQIHdyaXR0ZW4gYnkgQmFycnkgV2Fyc2F3LCBFbGkgQmVuZGVyc2t5IGFuZCBFdGhhbiBGdXJtYW4sCisgICAgICBpbXBsZW1lbnRlZCBieSBFdGhhbiBGdXJtYW4uCisKKworLi4gX3doYXRzbmV3LXBhdGhsaWI6CisKK3BhdGhsaWIKKy0tLS0tLS0KKworVGhlIG5ldyA6bW9kOmBwYXRobGliYCBtb2R1bGUgb2ZmZXJzIGNsYXNzZXMgcmVwcmVzZW50aW5nIGZpbGVzeXN0ZW0gcGF0aHMKK3dpdGggc2VtYW50aWNzIGFwcHJvcHJpYXRlIGZvciBkaWZmZXJlbnQgb3BlcmF0aW5nIHN5c3RlbXMuICBQYXRoIGNsYXNzZXMgYXJlCitkaXZpZGVkIGJldHdlZW4gKnB1cmUgcGF0aHMqLCB3aGljaCBwcm92aWRlIHB1cmVseSBjb21wdXRhdGlvbmFsIG9wZXJhdGlvbnMKK3dpdGhvdXQgSS9PLCBhbmQgKmNvbmNyZXRlIHBhdGhzKiwgd2hpY2ggaW5oZXJpdCBmcm9tIHB1cmUgcGF0aHMgYnV0IGFsc28KK3Byb3ZpZGUgSS9PIG9wZXJhdGlvbnMuCisKK0ZvciBQeXRob24gMy40LCB0aGlzIG1vZHVsZSBpcyBjb25zaWRlcmVkIGEgOnRlcm06YHByb3Zpc2lvbmFsIEFQSWAuCisKKy4uIHNlZWFsc286OgorCisgICA6cGVwOmA0MjhgIC0tIFRoZSBwYXRobGliIG1vZHVsZSAtLSBvYmplY3Qtb3JpZW50ZWQgZmlsZXN5c3RlbSBwYXRocworICAgICAgUEVQIHdyaXR0ZW4gYW5kIGltcGxlbWVudGVkIGJ5IEFudG9pbmUgUGl0cm91LgorCisKKy4uIF93aGF0c25ldy1zZWxlY3RvcnM6CisKK3NlbGVjdG9ycworLS0tLS0tLS0tCisKK1RoZSBuZXcgOm1vZDpgc2VsZWN0b3JzYCBtb2R1bGUgKGNyZWF0ZWQgYXMgcGFydCBvZiBpbXBsZW1lbnRpbmcgOnBlcDpgMzE1NmApCithbGxvd3MgaGlnaC1sZXZlbCBhbmQgZWZmaWNpZW50IEkvTyBtdWx0aXBsZXhpbmcsIGJ1aWx0IHVwb24gdGhlCis6bW9kOmBzZWxlY3RgIG1vZHVsZSBwcmltaXRpdmVzLgorCisKKy4uIF93aGF0c25ldy1zdGF0aXN0aWNzOgorCitzdGF0aXN0aWNzCistLS0tLS0tLS0tCisKK1RoZSBuZXcgOm1vZDpgc3RhdGlzdGljc2AgbW9kdWxlIChkZWZpbmVkIGluIDpwZXA6YDQ1MGApIG9mZmVycyBzb21lIGNvcmUKK3N0YXRpc3RpY3MgZnVuY3Rpb25hbGl0eSBkaXJlY3RseSBpbiB0aGUgc3RhbmRhcmQgbGlicmFyeS4gVGhpcyBtb2R1bGUKK3N1cHBvcnRzIGNhbGN1bGF0aW9uIG9mIHRoZSBtZWFuLCBtZWRpYW4sIG1vZGUsIHZhcmlhbmNlIGFuZCBzdGFuZGFyZAorZGV2aWF0aW9uIG9mIGEgZGF0YSBzZXJpZXMuCisKKy4uIHNlZWFsc286OgorCisgICA6cGVwOmA0NTBgIC0tIEFkZGluZyBBIFN0YXRpc3RpY3MgTW9kdWxlIFRvIFRoZSBTdGFuZGFyZCBMaWJyYXJ5CisgICAgICBQRVAgd3JpdHRlbiBhbmQgaW1wbGVtZW50ZWQgYnkgU3RldmVuIEQnQXByYW5vCisKKy4uIF93aGF0c25ldy10cmFjZW1hbGxvYzoKKworCit0cmFjZW1hbGxvYworLS0tLS0tLS0tLS0KKworVGhlIG5ldyA6bW9kOmB0cmFjZW1hbGxvY2AgbW9kdWxlIChkZWZpbmVkIGluIDpwZXA6YDQ1NGApIGlzIGEgZGVidWcgdG9vbCB0bwordHJhY2UgbWVtb3J5IGJsb2NrcyBhbGxvY2F0ZWQgYnkgUHl0aG9uLiBJdCBwcm92aWRlcyB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOgorCisqIFRyYWNlIHdoZXJlIGFuIG9iamVjdCB3YXMgYWxsb2NhdGVkCisqIFN0YXRpc3RpY3Mgb24gYWxsb2NhdGVkIG1lbW9yeSBibG9ja3MgcGVyIGZpbGVuYW1lIGFuZCBwZXIgbGluZSBudW1iZXI6CisgIHRvdGFsIHNpemUsIG51bWJlciBhbmQgYXZlcmFnZSBzaXplIG9mIGFsbG9jYXRlZCBtZW1vcnkgYmxvY2tzCisqIENvbXB1dGUgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gdHdvIHNuYXBzaG90cyB0byBkZXRlY3QgbWVtb3J5IGxlYWtzCisKKy4uIHNlZWFsc286OgorCisgICA6cGVwOmA0NTRgIC0tIEFkZCBhIG5ldyB0cmFjZW1hbGxvYyBtb2R1bGUgdG8gdHJhY2UgUHl0aG9uIG1lbW9yeSBhbGxvY2F0aW9ucworICAgICAgUEVQIHdyaXR0ZW4gYW5kIGltcGxlbWVudGVkIGJ5IFZpY3RvciBTdGlubmVyCisKKworCitJbXByb3ZlZCBNb2R1bGVzCis9PT09PT09PT09PT09PT09CisKKworYWJjCistLS0KKworTmV3IGZ1bmN0aW9uIDpmdW5jOmBhYmMuZ2V0X2NhY2hlX3Rva2VuYCBjYW4gYmUgdXNlZCB0byBrbm93IHdoZW4gdG8gaW52YWxpZGF0ZQorY2FjaGVzIHRoYXQgYXJlIGFmZmVjdGVkIGJ5IGNoYW5nZXMgaW4gdGhlIG9iamVjdCBncmFwaC4gIChDb250cmlidXRlZAorYnkgxYF1a2FzeiBMYW5nYSBpbiA6aXNzdWU6YDE2ODMyYC4pCisKK05ldyBjbGFzcyA6Y2xhc3M6YH5hYmMuQUJDYCBoYXMgOmNsYXNzOmB+YWJjLkFCQ01ldGFgIGFzIGl0cyBtZXRhIGNsYXNzLgorVXNpbmcgYGBBQkNgYCBhcyBhIGJhc2UgY2xhc3MgaGFzIGVzc2VudGlhbGx5IHRoZSBzYW1lIGVmZmVjdCBhcyBzcGVjaWZ5aW5nCitgYG1ldGFjbGFzcz1hYmMuQUJDTWV0YWBgLCBidXQgaXMgc2ltcGxlciB0byB0eXBlIGFuZCBlYXNpZXIgdG8gcmVhZC4KKyhDb250cmlidXRlZCBieSBCcnVubyBEdXB1aXMgaW4gOmlzc3VlOmAxNjA0OWAuKQorCisKK2FpZmMKKy0tLS0KKworVGhlIDptZXRoOmB+YWlmYy5haWZjLmdldHBhcmFtc2AgbWV0aG9kIG5vdyByZXR1cm5zIGEgbmFtZWR0dXBsZSByYXRoZXIgdGhhbiBhCitwbGFpbiB0dXBsZS4gIChDb250cmlidXRlZCBieSBDbGF1ZGl1IFBvcGEgaW4gOmlzc3VlOmAxNzgxOGAuKQorCis6ZnVuYzpgYWlmYy5vcGVuYCBub3cgc3VwcG9ydHMgdGhlIGNvbnRleHQgbWFuYWdlbWVudCBwcm90b2NvbDogd2hlbiB1c2VkIGluIGEKKzprZXl3b3JkOmB3aXRoYCBibG9jaywgdGhlIDptZXRoOmB+YWlmYy5haWZjLmNsb3NlYCBtZXRob2Qgb2YgdGhlIHJldHVybmVkCitvYmplY3Qgd2lsbCBiZSBjYWxsZWQgYXV0b21hdGljYWxseSBhdCB0aGUgZW5kIG9mIHRoZSBibG9jay4gIChDb250cmlidXRlZCBieQorU2VyaGl5IFN0b3JjaGFjaGEgaW4gOmlzc3VlOmAxNjQ4NmAuKQorCitUaGUgOm1ldGg6YH5haWZjLmFpZmMud3JpdGVmcmFtZXNyYXdgIGFuZCA6bWV0aDpgfmFpZmMuYWlmYy53cml0ZWZyYW1lc2AKK21ldGhvZHMgbm93IGFjY2VwdCBhbnkgOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0YC4gIChDb250cmlidXRlZCBieSBTZXJoaXkKK1N0b3JjaGFrYSBpbiA6aXNzdWU6YDgzMTFgLikKKworCithcmdwYXJzZQorLS0tLS0tLS0KKworVGhlIDpjbGFzczpgfmFyZ3BhcnNlLkZpbGVUeXBlYCBjbGFzcyBub3cgYWNjZXB0cyAqZW5jb2RpbmcqIGFuZAorKmVycm9ycyogYXJndW1lbnRzLCB3aGljaCBhcmUgcGFzc2VkIHRocm91Z2ggdG8gOmZ1bmM6YG9wZW5gLiAgKENvbnRyaWJ1dGVkCitieSBMdWNhcyBNYXlzdHJlIGluIDppc3N1ZTpgMTExNzVgLikKKworCithdWRpb29wCistLS0tLS0tCisKKzptb2Q6YGF1ZGlvb3BgIG5vdyBzdXBwb3J0cyAyNC1iaXQgc2FtcGxlcy4gIChDb250cmlidXRlZCBieSBTZXJoaXkgU3RvcmNoYWthCitpbiA6aXNzdWU6YDEyODY2YC4pCisKK05ldyA6ZnVuYzpgfmF1ZGlvb3AuYnl0ZXN3YXBgIGZ1bmN0aW9uIGNvbnZlcnRzIGJpZy1lbmRpYW4gc2FtcGxlcyB0bworbGl0dGxlLWVuZGlhbiBhbmQgdmljZSB2ZXJzYS4gIChDb250cmlidXRlZCBieSBTZXJoaXkgU3RvcmNoYWthIGluCis6aXNzdWU6YDE5NjQxYC4pCisKK0FsbCA6bW9kOmBhdWRpb29wYCBmdW5jdGlvbnMgbm93IGFjY2VwdCBhbnkgOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0YC4gIFN0cmluZ3MKK2FyZSBub3QgYWNjZXB0ZWQ6IHRoZXkgZGlkbid0IHdvcmsgYmVmb3JlLCBub3cgdGhleSByYWlzZSBhbiBlcnJvciByaWdodCBhd2F5LgorKENvbnRyaWJ1dGVkIGJ5IFNlcmhpeSBTdG9yY2hha2EgaW4gOmlzc3VlOmAxNjY4NWAuKQorCisKK2Jhc2U2NAorLS0tLS0tCisKK1RoZSBlbmNvZGluZyBhbmQgZGVjb2RpbmcgZnVuY3Rpb25zIGluIDptb2Q6YGJhc2U2NGAgbm93IGFjY2VwdCBhbnkKKzp0ZXJtOmBieXRlcy1saWtlIG9iamVjdGAgaW4gY2FzZXMgd2hlcmUgaXQgcHJldmlvdXNseSByZXF1aXJlZCBhCis6Y2xhc3M6YGJ5dGVzYCBvciA6Y2xhc3M6YGJ5dGVhcnJheWAgaW5zdGFuY2UuICAoQ29udHJpYnV0ZWQgYnkgTmljayBDb2dobGFuIGluCis6aXNzdWU6YDE3ODM5YC4pCisKK05ldyBmdW5jdGlvbnMgOmZ1bmM6YH5iYXNlNjQuYTg1ZW5jb2RlYCwgOmZ1bmM6YH5iYXNlNjQuYTg1ZGVjb2RlYCwKKzpmdW5jOmB+YmFzZTY0LmI4NWVuY29kZWAsIGFuZCA6ZnVuYzpgfmJhc2U2NC5iODVkZWNvZGVgIHByb3ZpZGUgdGhlIGFiaWxpdHkgdG8KK2VuY29kZSBhbmQgZGVjb2RlIGJpbmFyeSBkYXRhIGZyb20gYW5kIHRvIGBgQXNjaWk4NWBgIGFuZCB0aGUgZ2l0L21lcmN1cmlhbAorYGBCYXNlODVgYCBmb3JtYXRzLCByZXNwZWN0aXZlbHkuICBUaGUgYGBhODVgYCBmdW5jdGlvbnMgaGF2ZSBvcHRpb25zIHRoYXQgY2FuCitiZSB1c2VkIHRvIG1ha2UgdGhlbSBjb21wYXRpYmxlIHdpdGggdGhlIHZhcmlhbnRzIG9mIHRoZSBgYEFzY2lpODVgYCBlbmNvZGluZywKK2luY2x1ZGluZyB0aGUgQWRvYmUgdmFyaWFudC4gIChDb250cmlidXRlZCBieSBNYXJ0aW4gTW9ycmlzb24sIHRoZSBNZXJjdXJpYWwKK3Byb2plY3QsIFNlcmhpeSBTdG9yY2hha2EsIGFuZCBBbnRvaW5lIFBpdHJvdSBpbiA6aXNzdWU6YDE3NjE4YC4pCisKKworY29sbGVjdGlvbnMKKy0tLS0tLS0tLS0tCisKK1RoZSA6bWV0aDpgLkNoYWluTWFwLm5ld19jaGlsZGAgbWV0aG9kIG5vdyBhY2NlcHRzIGFuICptKiBhcmd1bWVudCBzcGVjaWZ5aW5nCit0aGUgY2hpbGQgbWFwIHRvIGFkZCB0byB0aGUgY2hhaW4uICBUaGlzIGFsbG93cyBhbiBleGlzdGluZyBtYXBwaW5nIGFuZC9vciBhCitjdXN0b20gbWFwcGluZyB0eXBlIHRvIGJlIHVzZWQgZm9yIHRoZSBjaGlsZC4gIChDb250cmlidXRlZCBieSBWaW5heSBTYWppcCBpbgorOmlzc3VlOmAxNjYxM2AuKQorCisKK2NvbG9yc3lzCistLS0tLS0tLQorCitUaGUgbnVtYmVyIG9mIGRpZ2l0cyBpbiB0aGUgY29lZmZpY2llbnRzIGZvciB0aGUgUkdCIC0tLSBZSVEgY29udmVyc2lvbnMgaGF2ZQorYmVlbiBleHBhbmRlZCBzbyB0aGF0IHRoZXkgbWF0Y2ggdGhlIEZDQyBOVFNDIHZlcnNpb25zLiAgVGhlIGNoYW5nZSBpbgorcmVzdWx0cyBzaG91bGQgYmUgbGVzcyB0aGFuIDElIGFuZCBtYXkgYmV0dGVyIG1hdGNoIHJlc3VsdHMgZm91bmQgZWxzZXdoZXJlLgorKENvbnRyaWJ1dGVkIGJ5IEJyaWFuIExhbmRlcnMgYW5kIFNlcmhpeSBTdG9yY2hha2EgaW4gOmlzc3VlOmAxNDMyM2AuKQorCisKK2NvbnRleHRsaWIKKy0tLS0tLS0tLS0KKworVGhlIG5ldyA6Y2xhc3M6YGNvbnRleHRsaWIuc3VwcHJlc3NgIGNvbnRleHQgbWFuYWdlciBoZWxwcyB0byBjbGFyaWZ5IHRoZQoraW50ZW50IG9mIGNvZGUgdGhhdCBkZWxpYmVyYXRlbHkgc3VwcHJlc3NlcyBleGNlcHRpb25zIGZyb20gYSBzaW5nbGUKK3N0YXRlbWVudC4gIChDb250cmlidXRlZCBieSBSYXltb25kIEhldHRpbmdlciBpbiA6aXNzdWU6YDE1ODA2YCBhbmQKK1plcm8gUGlyYWV1cyBpbiA6aXNzdWU6YDE5MjY2YC4pCisKK1RoZSBuZXcgOmZ1bmM6YGNvbnRleHRsaWIucmVkaXJlY3Rfc3Rkb3V0YCBjb250ZXh0IG1hbmFnZXIgbWFrZXMgaXQgZWFzaWVyCitmb3IgdXRpbGl0eSBzY3JpcHRzIHRvIGhhbmRsZSBpbmZsZXhpYmxlIEFQSXMgdGhhdCB3cml0ZSB0aGVpciBvdXRwdXQgdG8KKzpkYXRhOmBzeXMuc3Rkb3V0YCBhbmQgZG9uJ3QgcHJvdmlkZSBhbnkgb3B0aW9ucyB0byByZWRpcmVjdCBpdC4gIFVzaW5nIHRoZQorY29udGV4dCBtYW5hZ2VyLCB0aGUgOmRhdGE6YHN5cy5zdGRvdXRgIG91dHB1dCBjYW4gYmUgcmVkaXJlY3RlZCB0byBhbnkKK290aGVyIHN0cmVhbSBvciwgaW4gY29uanVuY3Rpb24gd2l0aCA6Y2xhc3M6YGlvLlN0cmluZ0lPYCwgdG8gYSBzdHJpbmcuCitUaGUgbGF0dGVyIGNhbiBiZSBlc3BlY2lhbGx5IHVzZWZ1bCwgZm9yIGV4YW1wbGUsIHRvIGNhcHR1cmUgb3V0cHV0Citmcm9tIGEgZnVuY3Rpb24gdGhhdCB3YXMgd3JpdHRlbiB0byBpbXBsZW1lbnQgYSBjb21tYW5kIGxpbmUgaW50ZXJmYWNlLgorSXQgaXMgcmVjb21tZW5kZWQgb25seSBmb3IgdXRpbGl0eSBzY3JpcHRzIGJlY2F1c2UgaXQgYWZmZWN0cyB0aGUKK2dsb2JhbCBzdGF0ZSBvZiA6ZGF0YTpgc3lzLnN0ZG91dGAuICAoQ29udHJpYnV0ZWQgYnkgUmF5bW9uZCBIZXR0aW5nZXIKK2luIDppc3N1ZTpgMTU4MDVgLikKKworVGhlIDptb2Q6YGNvbnRleHRsaWJgIGRvY3VtZW50YXRpb24gaGFzIGFsc28gYmVlbiB1cGRhdGVkIHRvIGluY2x1ZGUgYQorOnJlZjpgZGlzY3Vzc2lvbiA8c2luZ2xlLXVzZS1yZXVzYWJsZS1hbmQtcmVlbnRyYW50LWNtcz5gIG9mIHRoZQorZGlmZmVyZW5jZXMgYmV0d2VlbiBzaW5nbGUgdXNlLCByZXVzYWJsZSBhbmQgcmVlbnRyYW50IGNvbnRleHQgbWFuYWdlcnMuCisKKworZGJtCistLS0KKworOmZ1bmM6YGRibS5vcGVuYCBvYmplY3RzIG5vdyBzdXBwb3J0IHRoZSBjb250ZXh0IG1hbmFnZW1lbnQgcHJvdG9jb2wuICBXaGVuCit1c2VkIGluIGEgOmtleXdvcmQ6YHdpdGhgIHN0YXRlbWVudCwgdGhlIGBgY2xvc2VgYCBtZXRob2Qgb2YgdGhlIGRhdGFiYXNlCitvYmplY3Qgd2lsbCBiZSBjYWxsZWQgYXV0b21hdGljYWxseSBhdCB0aGUgZW5kIG9mIHRoZSBibG9jay4gIChDb250cmlidXRlZCBieQorQ2xhdWRpdSBQb3BhIGFuZCBOaWNrIENvZ2hsYW4gaW4gOmlzc3VlOmAxOTI4MmAuKQorCisKK2RpcworLS0tCisKK0Z1bmN0aW9ucyA6ZnVuYzpgfmRpcy5zaG93X2NvZGVgLCA6ZnVuYzpgfmRpcy5kaXNgLCA6ZnVuYzpgfmRpcy5kaXN0YmAsIGFuZAorOmZ1bmM6YH5kaXMuZGlzYXNzZW1ibGVgIG5vdyBhY2NlcHQgYSBrZXl3b3JkLW9ubHkgKmZpbGUqIGFyZ3VtZW50IHRoYXQKK2NvbnRyb2xzIHdoZXJlIHRoZXkgd3JpdGUgdGhlaXIgb3V0cHV0LgorCitUaGUgOm1vZDpgZGlzYCBtb2R1bGUgaXMgbm93IGJ1aWx0IGFyb3VuZCBhbiA6Y2xhc3M6YH5kaXMuSW5zdHJ1Y3Rpb25gIGNsYXNzCit0aGF0IHByb3ZpZGVzIG9iamVjdCBvcmllbnRlZCBhY2Nlc3MgdG8gdGhlIGRldGFpbHMgb2YgZWFjaCBpbmRpdmlkdWFsIGJ5dGVjb2RlCitvcGVyYXRpb24uCisKK0EgbmV3IG1ldGhvZCwgOmZ1bmM6YH5kaXMuZ2V0X2luc3RydWN0aW9uc2AsIHByb3ZpZGVzIGFuIGl0ZXJhdG9yIHRoYXQgZW1pdHMKK3RoZSBJbnN0cnVjdGlvbiBzdHJlYW0gZm9yIGEgZ2l2ZW4gcGllY2Ugb2YgUHl0aG9uIGNvZGUuICBUaHVzIGl0IGlzIG5vdworcG9zc2libGUgdG8gd3JpdGUgYSBwcm9ncmFtIHRoYXQgaW5zcGVjdHMgYW5kIG1hbmlwdWxhdGVzIGEgYnl0ZWNvZGUKK29iamVjdCBpbiB3YXlzIGRpZmZlcmVudCBmcm9tIHRob3NlIHByb3ZpZGVkIGJ5IHRoZSA6bW9kOmB+ZGlzYCBtb2R1bGUKK2l0c2VsZi4gIEZvciBleGFtcGxlOjoKKworICAgID4+PiBpbXBvcnQgZGlzCisgICAgPj4+IGZvciBpbnN0ciBpbiBkaXMuZ2V0X2luc3RydWN0aW9ucyhsYW1iZGEgeDogeCArIDEpOgorICAgIC4uLiAgICAgcHJpbnQoaW5zdHIub3BuYW1lKQorICAgIExPQURfRkFTVAorICAgIExPQURfQ09OU1QKKyAgICBCSU5BUllfQURECisgICAgUkVUVVJOX1ZBTFVFCisKK1RoZSB2YXJpb3VzIGRpc3BsYXkgdG9vbHMgaW4gdGhlIDptb2Q6YGRpc2AgbW9kdWxlIGhhdmUgYmVlbiByZXdyaXR0ZW4gdG8gdXNlCit0aGVzZSBuZXcgY29tcG9uZW50cy4KKworSW4gYWRkaXRpb24sIGEgbmV3IGFwcGxpY2F0aW9uLWZyaWVuZGx5IGNsYXNzIDpjbGFzczpgfmRpcy5CeXRlY29kZWAgcHJvdmlkZXMKK2FuIG9iamVjdC1vcmllbnRlZCBBUEkgZm9yIGluc3BlY3RpbmcgYnl0ZWNvZGUgaW4gYm90aCBpbiBodW1hbi1yZWFkYWJsZSBmb3JtCithbmQgZm9yIGl0ZXJhdGluZyBvdmVyIGluc3RydWN0aW9ucy4gIFRoZSA6Y2xhc3M6YH5kaXMuQnl0ZWNvZGVgIGNvbnN0cnVjdG9yCit0YWtlcyB0aGUgc2FtZSBhcmd1bWVudHMgdGhhdCA6ZnVuYzpgfmRpcy5nZXRfaW5zdHJ1Y3Rpb25gIGRvZXMgKHBsdXMgYW4KK29wdGlvbmFsICpjdXJyZW50X29mZnNldCopLCBhbmQgdGhlIHJlc3VsdGluZyBvYmplY3QgY2FuIGJlIGl0ZXJhdGVkIHRvIHByb2R1Y2UKKzpjbGFzczpgfmRpcy5JbnN0cnVjdGlvbmAgb2JqZWN0cy4gIEJ1dCBpdCBhbHNvIGhhcyBhIDptb2Q6YH5kaXMuQnl0ZWNvZGUuZGlzYAorbWV0aG9kLCBlcXVpdmFsZW50IHRvIGNhbGxpbmcgOm1vZDpgfmRpcy5kaXNgIG9uIHRoZSBjb25zdHJ1Y3RvciBhcmd1bWVudCwgYnV0CityZXR1cm5lZCBhcyBhIG11bHRpLWxpbmUgc3RyaW5nOjoKKworICAgID4+PiBieXRlY29kZSA9IGRpcy5CeXRlY29kZShsYW1iZGEgeDogeCArMSwgY3VycmVudF9vZmZzZXQ9MykKKyAgICA+Pj4gZm9yIGluc3RyIGluIGJ5dGVjb2RlOgorICAgIC4uLiAgICAgcHJpbnQoJ3t9ICh7fSknLmZvcm1hdChpbnN0ci5vcG5hbWUsIGluc3RyLm9wY29kZSkpCisgICAgTE9BRF9GQVNUICgxMjQpCisgICAgTE9BRF9DT05TVCAoMTAwKQorICAgIEJJTkFSWV9BREQgKDIzKQorICAgIFJFVFVSTl9WQUxVRSAoODMpCisgICAgPj4+IGJ5dGVjb2RlLmRpcygpLnNwbGl0bGluZXMoKSAgICAgICAjIGRvY3Rlc3Q6ICtOT1JNQUxJWkVfV0hJVEVTUEFDRQorICAgIFsnICAxICAgICAgICAgICAwIExPQURfRkFTVCAgICAgICAgICAgICAgICAwICh4KScsCisgICAgICcgICAgICAtLT4gICAgIDMgTE9BRF9DT05TVCAgICAgICAgICAgICAgIDEgKDEpJywKKyAgICAgJyAgICAgICAgICAgICAgNiBCSU5BUllfQUREJywKKyAgICAgJyAgICAgICAgICAgICAgNyBSRVRVUk5fVkFMVUUnXQorCis6Y2xhc3M6YH5kaXMuQnl0ZWNvZGVgIGFsc28gaGFzIGEgY2xhc3MgbWV0aG9kLAorOm1ldGg6YH5kaXMuQnl0ZWNvZGUuZnJvbV90cmFjZWJhY2tgLCB0aGF0IHByb3ZpZGVzIHRoZSBhYmlsaXR5IHRvIG1hbmlwdWxhdGUgYQordHJhY2ViYWNrICh0aGF0IGlzLCBgYHByaW50KEJ5dGVjb2RlLmZyb21fdHJhY2ViYWNrKHRiKS5kaXMoKSlgYCBpcyBlcXVpdmFsZW50Cit0byBgYGRpc3RiKHRiKWBgKS4KKworKENvbnRyaWJ1dGVkIGJ5IE5pY2sgQ29naGxhbiwgUnlhbiBLZWxseSBhbmQgVGhvbWFzIEtsdXl2ZXIgaW4gOmlzc3VlOmAxMTgxNmAKK2FuZCBDbGF1ZGl1IFBvcGEgaW4gOmlzc3VlOmAxNzkxNmAuKQorCitOZXcgZnVuY3Rpb24gOmZ1bmM6YH5kaXMuc3RhY2tfZWZmZWN0YCBjb21wdXRlcyB0aGUgZWZmZWN0IG9uIHRoZSBQeXRob24gc3RhY2sKK29mIGEgZ2l2ZW4gb3Bjb2RlIGFuZCBhcmd1bWVudCwgaW5mb3JtYXRpb24gdGhhdCBpcyBub3Qgb3RoZXJ3aXNlIGF2YWlsYWJsZS4KKyhDb250cmlidXRlZCBieSBMYXJyeSBIYXN0aW5ncyBpbiA6aXNzdWU6YDE5NzIyYC4pCisKKworZG9jdGVzdAorLS0tLS0tLQorCitBIG5ldyA6cmVmOmBvcHRpb24gZmxhZyA8ZG9jdGVzdC1vcHRpb25zPmAsIDpkYXRhOmB+ZG9jdGVzdC5GQUlMX0ZBU1RgLCBoYWx0cwordGVzdCBydW5uaW5nIGFzIHNvb24gYXMgdGhlIGZpcnN0IGZhaWx1cmUgaXMgZGV0ZWN0ZWQuICAoQ29udHJpYnV0ZWQgYnkgUi4KK0RhdmlkIE11cnJheSBhbmQgRGFuaWVsIFVyYmFuIGluIDppc3N1ZTpgMTY1MjJgLikKKworVGhlIDptb2Q6YGRvY3Rlc3RgIGNvbW1hbmQgbGluZSBpbnRlcmZhY2Ugbm93IHVzZXMgOm1vZDpgYXJncGFyc2VgLCBhbmQgaGFzIHR3bworbmV3IG9wdGlvbnMsIGBgLW9gYCBhbmQgYGAtZmBgLiAgYGAtb2BgIGFsbG93cyA6cmVmOmBkb2N0ZXN0IG9wdGlvbnMKKzxkb2N0ZXN0LW9wdGlvbnM+YCB0byBiZSBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZSwgYW5kIGBgLWZgYCBpcyBhCitzaG9ydGhhbmQgZm9yIGBgLW8gRkFJTF9GQVNUYGAgKHRvIHBhcmFsbGVsIHRoZSBzaW1pbGFyIG9wdGlvbiBzdXBwb3J0ZWQgYnkgdGhlCis6bW9kOmB1bml0dGVzdGAgQ0xJKS4gIChDb250cmlidXRlZCBieSBSLiBEYXZpZCBNdXJyYXkgaW4gOmlzc3VlOmAxMTM5MGAuKQorCis6bW9kOmBkb2N0ZXN0YCB3aWxsIG5vdyBmaW5kIGRvY3Rlc3RzIGluIGV4dGVuc2lvbiBtb2R1bGUgYGBfX2RvY19fYGAgc3RyaW5ncy4KKyhDb250cmlidXRlZCBieSBaYWNoYXJ5IFdhcmUgaW4gOmlzc3VlOmAzMTU4YC4pCisKKworZW1haWwKKy0tLS0tCisKKzptZXRoOmB+ZW1haWwubWVzc2FnZS5NZXNzYWdlLmFzX3N0cmluZ2Agbm93IGFjY2VwdHMgYSAqcG9saWN5KiBhcmd1bWVudCB0bworb3ZlcnJpZGUgdGhlIGRlZmF1bHQgcG9saWN5IG9mIHRoZSBtZXNzYWdlIHdoZW4gZ2VuZXJhdGluZyBhIHN0cmluZworcmVwcmVzZW50YXRpb24gb2YgaXQuICBUaGlzIG1lYW5zIHRoYXQgYGBhc19zdHJpbmdgYCBjYW4gbm93IGJlIHVzZWQgaW4gbW9yZQorY2lyY3Vtc3RhbmNlcywgaW5zdGVhZCBvZiBoYXZpbmcgdG8gY3JlYXRlIGFuZCB1c2UgYSA6bW9kOmB+ZW1haWwuZ2VuZXJhdG9yYCBpbgorb3JkZXIgdG8gcGFzcyBmb3JtYXR0aW5nIHBhcmFtZXRlcnMgdG8gaXRzIGBgZmxhdHRlbmBgIG1ldGhvZC4gIChDb250cmlidXRlZCBieQorUi4gRGF2aWQgTXVycmF5IGluIDppc3N1ZTpgMTg2MDBgLikKKworTmV3IG1ldGhvZCA6bWV0aDpgfmVtYWlsLm1lc3NhZ2UuTWVzc2FnZS5hc19ieXRlc2AgYWRkZWQgdG8gcHJvZHVjZSBhIGJ5dGVzCityZXByZXNlbnRhdGlvbiBvZiB0aGUgbWVzc2FnZSBpbiBhIGZhc2hpb24gc2ltaWxhciB0byBob3cgYGBhc19zdHJpbmdgYAorcHJvZHVjZXMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24uICBJdCBkb2VzIG5vdCBhY2NlcHQgdGhlICptYXhoZWFkZXJsZW4qCithcmd1bWVudCwgYnV0IGRvZXMgYWNjZXB0IHRoZSAqdW5peGZyb20qIGFuZCAqcG9saWN5KiBhcmd1bWVudHMuIFRoZQorOmNsYXNzOmB+ZW1haWwubWVzc2FnZS5NZXNzYWdlYCA6bWV0aDpgfmVtYWlsLm1lc3NhZ2UuTWVzc2FnZS5fX2J5dGVzX19gIG1ldGhvZAorY2FsbHMgaXQsIG1lYW5pbmcgdGhhdCBgYGJ5dGVzKG15bXNnKWBgIHdpbGwgbm93IHByb2R1Y2UgdGhlIGludHVpdGl2ZQorcmVzdWx0OiAgYSBieXRlcyBvYmplY3QgY29udGFpbmluZyB0aGUgZnVsbHkgZm9ybWF0dGVkIG1lc3NhZ2UuICAoQ29udHJpYnV0ZWQKK2J5IFIuIERhdmlkIE11cnJheSBpbiA6aXNzdWU6YDE4NjAwYC4pCisKK1RoZSA6bWV0aDpgLk1lc3NhZ2Uuc2V0X3BhcmFtYCBtZXNzYWdlIG5vdyBhY2NlcHRzIGEgKnJlcGxhY2UqIGtleXdvcmQgYXJndW1lbnQuCitXaGVuIHNwZWNpZmllZCwgdGhlIGFzc29jaWF0ZWQgaGVhZGVyIHdpbGwgYmUgdXBkYXRlZCB3aXRob3V0IGNoYW5naW5nCitpdHMgbG9jYXRpb24gaW4gdGhlIGxpc3Qgb2YgaGVhZGVycy4gIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCB0aGUgZGVmYXVsdAoraXMgYGBGYWxzZWBgLiAgKENvbnRyaWJ1dGVkIGJ5IFIuIERhdmlkIE11cnJheSBpbiA6aXNzdWU6YDE4ODkxYC4pCisKKworLi4gX3doYXRzbmV3X2VtYWlsX2NvbnRlbnRtYW5hZ2VyOgorCitBIHBhaXIgb2YgbmV3IHN1YmNsYXNzZXMgb2YgOmNsYXNzOmB+ZW1haWwubWVzc2FnZS5NZXNzYWdlYCBoYXZlIGJlZW4gYWRkZWQKKyg6Y2xhc3M6YC5FbWFpbE1lc3NhZ2VgIGFuZCA6Y2xhc3M6YC5NSU1FUGFydGApLCBhbG9uZyB3aXRoIGEgbmV3IHN1Yi1tb2R1bGUsCis6bW9kOmB+ZW1haWwuY29udGVudG1hbmFnZXJgIGFuZCBhIG5ldyA6bW9kOmB+ZW1haWwucG9saWN5YCBhdHRyaWJ1dGUKKzphdHRyOmB+ZW1haWwucG9saWN5LkVtYWlsUG9saWN5LmNvbnRlbnRfbWFuYWdlcmAuICBBbGwgZG9jdW1lbnRhdGlvbiBpcworY3VycmVudGx5IGluIHRoZSBuZXcgbW9kdWxlLCB3aGljaCBpcyBiZWluZyBhZGRlZCBhcyBwYXJ0IG9mIGVtYWlsJ3MgbmV3Cis6dGVybTpgcHJvdmlzaW9uYWwgQVBJYC4gIFRoZXNlIGNsYXNzZXMgcHJvdmlkZSBhIG51bWJlciBvZiBuZXcgbWV0aG9kcyB0aGF0CittYWtlIGV4dHJhY3RpbmcgY29udGVudCBmcm9tIGFuZCBpbnNlcnRpbmcgY29udGVudCBpbnRvIGVtYWlsIG1lc3NhZ2VzIG11Y2gKK2Vhc2llci4gIEZvciBkZXRhaWxzLCBzZWUgdGhlIDptb2Q6YH5lbWFpbC5jb250ZW50bWFuYWdlcmAgZG9jdW1lbnRhdGlvbiBhbmQKK3RoZSA6cmVmOmBlbWFpbC1jb250ZW50bWFuYWdlci1hcGktZXhhbXBsZXNgLiAgVGhlc2UgQVBJIGFkZGl0aW9ucyBjb21wbGV0ZSB0aGUKK2J1bGsgb2YgdGhlIHdvcmsgdGhhdCB3YXMgcGxhbm5lZCBhcyBwYXJ0IG9mIHRoZSBlbWFpbDYgcHJvamVjdC4gIFRoZSBjdXJyZW50bHkKK3Byb3Zpc2lvbmFsIEFQSSBpcyBzY2hlZHVsZWQgdG8gYmVjb21lIGZpbmFsIGluIFB5dGhvbiAzLjUgKHBvc3NpYmx5IHdpdGggYSBmZXcKK21pbm9yIGFkZGl0aW9ucyBpbiB0aGUgYXJlYSBvZiBlcnJvciBoYW5kbGluZykuICAoQ29udHJpYnV0ZWQgYnkgUi4gRGF2aWQKK011cnJheSBpbiA6aXNzdWU6YDE4ODkxYC4pCisKKworZmlsZWNtcAorLS0tLS0tLQorCitBIG5ldyA6ZnVuYzpgfmZpbGVjbXAuY2xlYXJfY2FjaGVgIGZ1bmN0aW9uIHByb3ZpZGVzIHRoZSBhYmlsaXR5IHRvIGNsZWFyIHRoZQorOm1vZDpgZmlsZWNtcGAgY29tcGFyaXNvbiBjYWNoZSwgd2hpY2ggdXNlcyA6ZnVuYzpgb3Muc3RhdGAgaW5mb3JtYXRpb24gdG8KK2RldGVybWluZSBpZiB0aGUgZmlsZSBoYXMgY2hhbmdlZCBzaW5jZSB0aGUgbGFzdCBjb21wYXJlLiAgVGhpcyBjYW4gYmUgdXNlZCwKK2ZvciBleGFtcGxlLCBpZiB0aGUgZmlsZSBtaWdodCBoYXZlIGJlZW4gY2hhbmdlZCBhbmQgcmUtY2hlY2tlZCBpbiBsZXNzIHRpbWUKK3RoYW4gdGhlIHJlc29sdXRpb24gb2YgYSBwYXJ0aWN1bGFyIGZpbGVzeXN0ZW0ncyBmaWxlIG1vZGlmaWNhdGlvbiB0aW1lIGZpZWxkLgorKENvbnRyaWJ1dGVkIGJ5IE1hcmsgTGV2aXR0IGluIDppc3N1ZTpgMTgxNDlgLikKKworTmV3IG1vZHVsZSBhdHRyaWJ1dGUgOmRhdGE6YH5maWxlY21wLkRFRkFVTFRfSUdOT1JFU2AgcHJvdmlkZXMgdGhlIGxpc3Qgb2YKK2RpcmVjdG9yaWVzIHRoYXQgYXJlIHVzZWQgYXMgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoZSAqaWdub3JlKiBwYXJhbWV0ZXIgb2YKK3RoZSA6ZnVuYzpgfmZpbGVjbXAuZGlyY21wYCBmdW5jdGlvbi4gIChDb250cmlidXRlZCBieSBFbGkgQmVuZGVyc2t5IGluCis6aXNzdWU6YDE1NDQyYC4pCisKKworZnVuY3Rvb2xzCistLS0tLS0tLS0KKworVGhlIG5ldyA6ZnVuYzpgfmZ1bmN0b29scy5wYXJ0aWFsbWV0aG9kYCBkZXNjcmlwdG9yIGJyaW5ncyBwYXJ0aWFsIGFyZ3VtZW50CithcHBsaWNhdGlvbiB0byBkZXNjcmlwdG9ycywganVzdCBhcyA6ZnVuYzpgfmZ1bmN0b29scy5wYXJ0aWFsYCBwcm92aWRlcworZm9yIG5vcm1hbCBjYWxsYWJsZXMuIFRoZSBuZXcgZGVzY3JpcHRvciBhbHNvIG1ha2VzIGl0IGVhc2llciB0byBnZXQKK2FyYml0cmFyeSBjYWxsYWJsZXMgKGluY2x1ZGluZyA6ZnVuYzpgfmZ1bmN0b29scy5wYXJ0aWFsYCBpbnN0YW5jZXMpCit0byBiZWhhdmUgbGlrZSBub3JtYWwgaW5zdGFuY2UgbWV0aG9kcyB3aGVuIGluY2x1ZGVkIGluIGEgY2xhc3MgZGVmaW5pdGlvbi4KKyhDb250cmlidXRlZCBieSBBbG9uIEhvcmV2IGFuZCBOaWNrIENvZ2hsYW4gaW4gOmlzc3VlOmA0MzMxYC4pCisKKy4uIF93aGF0c25ldy1zaW5nbGVkaXNwYXRjaDoKKworVGhlIG5ldyA6ZnVuYzpgfmZ1bmN0b29scy5zaW5nbGVkaXNwYXRjaGAgZGVjb3JhdG9yIGJyaW5ncyBzdXBwb3J0IGZvcgorc2luZ2xlLWRpc3BhdGNoIGdlbmVyaWMgZnVuY3Rpb25zIHRvIHRoZSBQeXRob24gc3RhbmRhcmQgbGlicmFyeS4gV2hlcmUKK29iamVjdCBvcmllbnRlZCBwcm9ncmFtbWluZyBmb2N1c2VzIG9uIGdyb3VwaW5nIG11bHRpcGxlIG9wZXJhdGlvbnMgb24gYQorY29tbW9uIHNldCBvZiBkYXRhIGludG8gYSBjbGFzcywgYSBnZW5lcmljIGZ1bmN0aW9uIGZvY3VzZXMgb24gZ3JvdXBpbmcKK211bHRpcGxlIGltcGxlbWVudGF0aW9ucyBvZiBhbiBvcGVyYXRpb24gdGhhdCBhbGxvd3MgaXQgdG8gd29yayB3aXRoCisqZGlmZmVyZW50KiBraW5kcyBvZiBkYXRhLgorCisuLiBzZWVhbHNvOjoKKworICAgOnBlcDpgNDQzYCAtLSBTaW5nbGUtZGlzcGF0Y2ggZ2VuZXJpYyBmdW5jdGlvbnMKKyAgICAgIFBFUCB3cml0dGVuIGFuZCBpbXBsZW1lbnRlZCBieSDFgXVrYXN6IExhbmdhLgorCis6ZnVuYzpgfmZ1bmN0b29scy50b3RhbF9vcmRlcmluZ2Agbm93IHN1cHBvcnRzIGEgcmV0dXJuIHZhbHVlIG9mCis6Y29uc3Q6YE5vdEltcGxlbWVudGVkYCBmcm9tIHRoZSB1bmRlcmx5aW5nIGNvbXBhcmlzb24gZnVuY3Rpb24uICAoQ29udHJpYnV0ZWQKK2J5IEthdGllIE1pbGxlciBpbiA6aXNzdWU6YDEwMDQyYC4pCisKK0EgcHVyZS1weXRob24gdmVyc2lvbiBvZiB0aGUgOmZ1bmM6YH5mdW5jdG9vbHMucGFydGlhbGAgZnVuY3Rpb24gaXMgbm93IGluIHRoZQorc3RkbGliOyBpbiBDUHl0aG9uIGl0IGlzIG92ZXJyaWRkZW4gYnkgdGhlIEMgYWNjZWxlcmF0ZWQgdmVyc2lvbiwgYnV0IGl0IGlzCithdmFpbGFibGUgZm9yIG90aGVyIGltcGxlbWVudGF0aW9ucyB0byB1c2UuICAoQ29udHJpYnV0ZWQgYnkgQnJpYW4gVGhvcm5lIGluCis6aXNzdWU6YDEyNDI4YC4pCisKKworZ2MKKy0tCisKK05ldyBmdW5jdGlvbiA6ZnVuYzpgfmdjLmdldF9zdGF0c2AgcmV0dXJucyBhIGxpc3Qgb2YgdGhyZWUgcGVyLWdlbmVyYXRpb24KK2RpY3Rpb25hcmllcyBjb250YWluaW5nIHRoZSBjb2xsZWN0aW9ucyBzdGF0aXN0aWNzIHNpbmNlIGludGVycHJldGVyIHN0YXJ0dXAuCisoQ29udHJpYnV0ZWQgYnkgQW50b2luZSBQaXRyb3UgaW4gOmlzc3VlOmAxNjM1MWAuKQorCisKK2dsb2IKKy0tLS0KKworQSBuZXcgZnVuY3Rpb24gOmZ1bmM6YH5nbG9iLmVzY2FwZWAgcHJvdmlkZXMgYSB3YXkgdG8gZXNjYXBlIHNwZWNpYWwgY2hhcmFjdGVycworaW4gYSBmaWxlbmFtZSBzbyB0aGF0IHRoZXkgZG8gbm90IGJlY29tZSBwYXJ0IG9mIHRoZSBnbG9iYmluZyBleHBhbnNpb24gYnV0IGFyZQoraW5zdGVhZCBtYXRjaGVkIGxpdGVyYWxseS4gIChDb250cmlidXRlZCBieSBTZXJoaXkgU3RvcmNoYWthIGluIDppc3N1ZTpgODQwMmAuKQorCisKK2hhc2hsaWIKKy0tLS0tLS0KKworQSBuZXcgOmZ1bmM6YGhhc2hsaWIucGJrZGYyX2htYWNgIGZ1bmN0aW9uIHByb3ZpZGVzCit0aGUgYFBLQ1MjNSBwYXNzd29yZC1iYXNlZCBrZXkgZGVyaXZhdGlvbiBmdW5jdGlvbiAyCis8aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9QQktERjI+YF8uICAoQ29udHJpYnV0ZWQgYnkgQ2hyaXN0aWFuCitIZWltZXMgaW4gOmlzc3VlOmAxODU4MmAuKQorCitUaGUgOmF0dHI6YH5oYXNobGliLmhhc2gubmFtZWAgYXR0cmlidXRlIG9mIDptb2Q6YGhhc2hsaWJgIGhhc2ggb2JqZWN0cyBpcyBub3cKK2EgZm9ybWFsbHkgc3VwcG9ydGVkIGludGVyZmFjZS4gIEl0IGhhcyBhbHdheXMgZXhpc3RlZCBpbiBDUHl0aG9uJ3MKKzptb2Q6YGhhc2hsaWJgIChhbHRob3VnaCBpdCBkaWQgbm90IHJldHVybiBsb3dlciBjYXNlIG5hbWVzIGZvciBhbGwgc3VwcG9ydGVkCitoYXNoZXMpLCBidXQgaXQgd2FzIG5vdCBhIHB1YmxpYyBpbnRlcmZhY2UgYW5kIHNvIHNvbWUgb3RoZXIgUHl0aG9uCitpbXBsZW1lbnRhdGlvbnMgaGF2ZSBub3QgcHJldmlvdXNseSBzdXBwb3J0ZWQgaXQuICAoQ29udHJpYnV0ZWQgYnkgSmFzb24gUi4KK0Nvb21icyBpbiA6aXNzdWU6YDE4NTMyYC4pCisKKworaG1hYworLS0tLQorCis6bW9kOmBobWFjYCBub3cgYWNjZXB0cyBgYGJ5dGVhcnJheWBgIGFzIHdlbGwgYXMgYGBieXRlc2BgIGZvciB0aGUgKmtleSoKK2FyZ3VtZW50IHRvIHRoZSA6ZnVuYzpgfmhtYWMubmV3YCBmdW5jdGlvbiwgYW5kIHRoZSAqbXNnKiBwYXJhbWV0ZXIgdG8gYm90aCB0aGUKKzpmdW5jOmB+aG1hYy5uZXdgIGZ1bmN0aW9uIGFuZCB0aGUgOm1ldGg6YH5obWFjLkhNQUMudXBkYXRlYCBtZXRob2Qgbm93CithY2NlcHRzIGFueSB0eXBlIHN1cHBvcnRlZCBieSB0aGUgOm1vZDpgaGFzaGxpYmAgbW9kdWxlLiAgKENvbnRyaWJ1dGVkCitieSBKb25hcyBCb3Jnc3Ryw7ZtIGluIDppc3N1ZTpgMTgyNDBgLikKKworVGhlICpkaWdlc3Rtb2QqIGFyZ3VtZW50IHRvIHRoZSA6ZnVuYzpgaG1hYy5uZXdgIGZ1bmN0aW9uIG1heSBub3cgYmUgYW55IGhhc2gKK2RpZ2VzdCBuYW1lIHJlY29nbml6ZWQgYnkgOm1vZDpgaGFzaGxpYmAuICBJbiBhZGRpdGlvbiwgdGhlIGN1cnJlbnQgYmVoYXZpb3IgaW4KK3doaWNoIHRoZSB2YWx1ZSBvZiAqZGlnZXN0bW9kKiBkZWZhdWx0cyB0byBgYE1ENWBgIGlzIGRlcHJlY2F0ZWQ6IGluIGEKK2Z1dHVyZSB2ZXJzaW9uIG9mIFB5dGhvbiB0aGVyZSB3aWxsIGJlIG5vIGRlZmF1bHQgdmFsdWUuICAoQ29udHJpYnV0ZWQgYnkKK0NocmlzdGlhbiBIZWltZXMgaW4gOmlzc3VlOmAxNzI3NmAuKQorCitXaXRoIHRoZSBhZGRpdGlvbiBvZiA6YXR0cjpgfmhtYWMuSE1BQy5ibG9ja19zaXplYCBhbmQgOmF0dHI6YH5obWFjLkhNQUMubmFtZWAKK2F0dHJpYnV0ZXMgKGFuZCB0aGUgZm9ybWFsIGRvY3VtZW50YXRpb24gb2YgdGhlIDphdHRyOmB+aG1hYy5ITUFDLmRpZ2VzdF9zaXplYAorYXR0cmlidXRlKSwgdGhlIDptb2Q6YGhtYWNgIG1vZHVsZSBub3cgY29uZm9ybXMgZnVsbHkgdG8gdGhlIDpwZXA6YDI0N2AgQVBJLgorKENvbnRyaWJ1dGVkIGJ5IENocmlzdGlhbiBIZWltZXMgaW4gOmlzc3VlOmAxODc3NWAuKQorCisKK2h0bWwKKy0tLS0KKworTmV3IGZ1bmN0aW9uIDpmdW5jOmB+aHRtbC51bmVzY2FwZWAgZnVuY3Rpb24gY29udmVydHMgSFRNTDUgY2hhcmFjdGVyIHJlZmVyZW5jZXMgdG8KK3RoZSBjb3JyZXNwb25kaW5nIFVuaWNvZGUgY2hhcmFjdGVycy4gIChDb250cmlidXRlZCBieSBFemlvIE1lbG90dGkgaW4KKzppc3N1ZTpgMjkyN2AuKQorCis6Y2xhc3M6YH5odG1sLnBhcnNlci5IVE1MUGFyc2VyYCBhY2NlcHRzIGEgbmV3IGtleXdvcmQgYXJndW1lbnQKKypjb252ZXJ0X2NoYXJyZWZzKiB0aGF0LCB3aGVuIGBgVHJ1ZWBgLCBhdXRvbWF0aWNhbGx5IGNvbnZlcnRzIGFsbCBjaGFyYWN0ZXIKK3JlZmVyZW5jZXMuICBGb3IgYmFja3dhcmQtY29tcGF0aWJpbGl0eSwgaXRzIHZhbHVlIGRlZmF1bHRzIHRvIGBgRmFsc2VgYCwgYnV0CitpdCB3aWxsIGNoYW5nZSB0byBgYFRydWVgYCBpbiBhIGZ1dHVyZSB2ZXJzaW9uIG9mIFB5dGhvbiwgc28geW91IGFyZSBpbnZpdGVkIHRvCitzZXQgaXQgZXhwbGljaXRseSBhbmQgdXBkYXRlIHlvdXIgY29kZSB0byB1c2UgdGhpcyBuZXcgZmVhdHVyZS4gIChDb250cmlidXRlZAorYnkgRXppbyBNZWxvdHRpIGluIDppc3N1ZTpgMTM2MzNgLikKKworVGhlICpzdHJpY3QqIGFyZ3VtZW50IG9mIDpjbGFzczpgfmh0bWwucGFyc2VyLkhUTUxQYXJzZXJgIGlzIG5vdyBkZXByZWNhdGVkLgorKENvbnRyaWJ1dGVkIGJ5IEV6aW8gTWVsb3R0aSBpbiA6aXNzdWU6YDE1MTE0YC4pCisKKworaHR0cAorLS0tLQorCis6bWV0aDpgfmh0dHAuc2VydmVyLkJhc2VIVFRQUmVxdWVzdEhhbmRsZXIuc2VuZF9lcnJvcmAgbm93IGFjY2VwdHMgYW4KK29wdGlvbmFsIGFkZGl0aW9uYWwgKmV4cGxhaW4qIHBhcmFtZXRlciB3aGljaCBjYW4gYmUgdXNlZCB0byBwcm92aWRlIGFuCitleHRlbmRlZCBlcnJvciBkZXNjcmlwdGlvbiwgb3ZlcnJpZGluZyB0aGUgaGFyZGNvZGVkIGRlZmF1bHQgaWYgdGhlcmUgaXMgb25lLgorVGhpcyBleHRlbmRlZCBlcnJvciBkZXNjcmlwdGlvbiB3aWxsIGJlIGZvcm1hdHRlZCB1c2luZyB0aGUKKzphdHRyOmB+aHR0cC5zZXJ2ZXIuSFRUUC5lcnJvcl9tZXNzYWdlX2Zvcm1hdGAgYXR0cmlidXRlIGFuZCBzZW50IGFzIHRoZSBib2R5CitvZiB0aGUgZXJyb3IgcmVzcG9uc2UuICAoQ29udHJpYnV0ZWQgYnkgS2FybCBDb3cgaW4gOmlzc3VlOmAxMjkyMWAuKQorCitUaGUgOm1vZDpgaHR0cC5zZXJ2ZXJgIDpyZWY6YGNvbW1hbmQgbGluZSBpbnRlcmZhY2UgPGh0dHAtc2VydmVyLWNsaT5gIG5vdyBoYXMKK2EgYGAtYi8tLWJpbmRgYCBvcHRpb24gdGhhdCBjYXVzZXMgdGhlIHNlcnZlciB0byBsaXN0ZW4gb24gYSBzcGVjaWZpYyBhZGRyZXNzLgorKENvbnRyaWJ1dGVkIGJ5IE1hbHRlIFN3YXJ0IGluIDppc3N1ZTpgMTc3NjRgLikKKworCitpZGxlbGliIGFuZCBJRExFCistLS0tLS0tLS0tLS0tLS0tCisKK1NpbmNlIGlkbGVsaWIgaW1wbGVtZW50cyB0aGUgSURMRSBzaGVsbCBhbmQgZWRpdG9yIGFuZCBpcyBub3QgaW50ZW5kZWQgZm9yCitpbXBvcnQgYnkgb3RoZXIgcHJvZ3JhbXMsIGl0IGdldHMgaW1wcm92ZW1lbnRzIHdpdGggZXZlcnkgcmVsZWFzZS4gU2VlCis6ZmlsZTpgTGliL2lkbGVsaWIvTkVXUy50eHRgIGZvciBhIGN1bXVsYXRpdmUgbGlzdCBvZiBjaGFuZ2VzIHNpbmNlIDMuMy4wLAorYXMgd2VsbCBhcyBjaGFuZ2VzIG1hZGUgaW4gZnV0dXJlIDMuNC54IHJlbGVhc2VzLiBUaGlzIGZpbGUgaXMgYWxzbyBhdmFpbGFibGUKK2Zyb20gdGhlIElETEUgOm1lbnVzZWxlY3Rpb246YEhlbHAgLS0+IEFib3V0IElETEVgIGRpYWxvZy4KKworCitpbXBvcnRsaWIKKy0tLS0tLS0tLQorCitUaGUgOmNsYXNzOmB+aW1wb3J0bGliLmFiYy5JbnNwZWN0TG9hZGVyYCBBQkMgZGVmaW5lcyBhIG5ldyBtZXRob2QsCis6bWV0aDpgfmltcG9ydGxpYi5hYmMuSW5zcGVjdExvYWRlci5zb3VyY2VfdG9fY29kZWAgdGhhdCBhY2NlcHRzIHNvdXJjZQorZGF0YSBhbmQgYSBwYXRoIGFuZCByZXR1cm5zIGEgY29kZSBvYmplY3QuICBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbgoraXMgZXF1aXZhbGVudCB0byBgYGNvbXBpbGUoZGF0YSwgcGF0aCwgJ2V4ZWMnLCBkb250X2luaGVyaXQ9VHJ1ZSlgYC4KKyhDb250cmlidXRlZCBieSBFcmljIFNub3cgYW5kIEJyZXR0IENhbm5vbiBpbiA6aXNzdWU6YDE1NjI3YC4pCisKKzpjbGFzczpgfmltcG9ydGxpYi5hYmMuSW5zcGVjdExvYWRlcmAgYWxzbyBub3cgaGFzIGEgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbgorZm9yIHRoZSA6bWV0aDpgfmltcG9ydGxpYi5hYmMuSW5zcGVjdExvYWRlci5nZXRfY29kZWAgbWV0aG9kLiAgSG93ZXZlciwKK2l0IHdpbGwgbm9ybWFsbHkgYmUgZGVzaXJhYmxlIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uCitmb3IgcGVyZm9ybWFuY2UgcmVhc29ucy4gIChDb250cmlidXRlZCBieSBCcmV0dCBDYW5ub24gaW4gOmlzc3VlOmAxODA3MmAuKQorCitUaGUgOmZ1bmM6YH5pbXBvcnRsaWIucmVsb2FkYCBmdW5jdGlvbiBoYXMgYmVlbiBtb3ZlZCBmcm9tIDptb2Q6YGltcGAgdG8KKzptb2Q6YGltcG9ydGxpYmAgYXMgcGFydCBvZiB0aGUgOm1vZDpgaW1wYCBtb2R1bGUgZGVwcmVjYXRpb24uICAoQ29udHJpYnV0ZWQgYnkKK0JlcmtlciBQZWtzYWcgaW4gOmlzc3VlOmAxODE5M2AuKQorCis6bW9kOmBpbXBvcnRsaWIudXRpbGAgbm93IGhhcyBhIDpkYXRhOmB+aW1wb3J0bGliLnV0aWwuTUFHSUNfTlVNQkVSYCBhdHRyaWJ1dGUKK3Byb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGJ5dGVjb2RlIHZlcnNpb24gbnVtYmVyLiAgVGhpcyByZXBsYWNlcyB0aGUKKzpmdW5jOmB+aW1wLmdldF9tYWdpY2AgZnVuY3Rpb24gaW4gdGhlIGRlcHJlY2F0ZWQgOm1vZDpgaW1wYCBtb2R1bGUuCisoQ29udHJpYnV0ZWQgYnkgQnJldHQgQ2Fubm9uIGluIDppc3N1ZTpgMTgxOTJgLikKKworTmV3IDptb2Q6YGltcG9ydGxpYi51dGlsYCBmdW5jdGlvbnMgOmZ1bmM6YH5pbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZWAKK2FuZCA6ZnVuYzpgfmltcG9ydGxpYi51dGlsLnNvdXJjZV9mcm9tX2NhY2hlYCByZXBsYWNlIHRoZSBzYW1lLW5hbWVkIGZ1bmN0aW9ucworaW4gdGhlIGRlcHJlY2F0ZWQgOm1vZDpgaW1wYCBtb2R1bGUuICAoQ29udHJpYnV0ZWQgYnkgQnJldHQgQ2Fubm9uIGluCis6aXNzdWU6YDE4MTk0YC4pCisKK1RoZSA6bW9kOmBpbXBvcnRsaWJgIGJvb3RzdHJhcCA6Y2xhc3M6YC5OYW1lc3BhY2VMb2FkZXJgIG5vdyBjb25mb3JtcyB0bwordGhlIDpjbGFzczpgLkluc3BlY3RMb2FkZXJgIEFCQywgd2hpY2ggbWVhbnMgdGhhdCBgYHJ1bnB5YGAgYW5kCitgYHB5dGhvbiAtbWBgIGNhbiBub3cgYmUgdXNlZCB3aXRoIG5hbWVzcGFjZSBwYWNrYWdlcy4gIChDb250cmlidXRlZAorYnkgQnJldHQgQ2Fubm9uIGluIDppc3N1ZTpgMTgwNThgLikKKworOm1vZDpgaW1wb3J0bGliLnV0aWxgIGhhcyBhIG5ldyBmdW5jdGlvbiA6ZnVuYzpgfmltcG9ydGxpYi51dGlsLmRlY29kZV9zb3VyY2VgCit0aGF0IGRlY29kZXMgc291cmNlIGZyb20gYnl0ZXMgdXNpbmcgdW5pdmVyc2FsIG5ld2xpbmUgcHJvY2Vzc2luZy4gIFRoaXMgaXMKK3VzZWZ1bCBmb3IgaW1wbGVtZW50aW5nIDptZXRoOmAuSW5zcGVjdExvYWRlci5nZXRfc291cmNlYCBtZXRob2RzLgorCis6Y2xhc3M6YGltcG9ydGxpYi5tYWNoaW5lcnkuRXh0ZW5zaW9uRmlsZUxvYWRlcmAgbm93IGhhcyBhCis6bWV0aDpgfmltcG9ydGxpYi5tYWNoaW5lcnkuRXh0ZW5zaW9uRmlsZUxvYWRlci5nZXRfZmlsZW5hbWVgIG1ldGhvZC4gIFRoaXMgd2FzCitpbmFkdmVydGVudGx5IG9taXR0ZWQgaW4gdGhlIG9yaWdpbmFsIGltcGxlbWVudGF0aW9uLiAgKENvbnRyaWJ1dGVkIGJ5IEVyaWMKK1Nub3cgaW4gOmlzc3VlOmAxOTE1MmAuKQorCisKK2luc3BlY3QKKy0tLS0tLS0KKworVGhlIDptb2Q6YGluc3BlY3RgIG1vZHVsZSBub3cgb2ZmZXJzIGEgYmFzaWMgOnJlZjpgY29tbWFuZCBsaW5lIGludGVyZmFjZQorPGluc3BlY3QtbW9kdWxlLWNsaT5gIHRvIHF1aWNrbHkgZGlzcGxheSBzb3VyY2UgY29kZSBhbmQgb3RoZXIKK2luZm9ybWF0aW9uIGZvciBtb2R1bGVzLCBjbGFzc2VzIGFuZCBmdW5jdGlvbnMuICAoQ29udHJpYnV0ZWQgYnkgQ2xhdWRpdSBQb3BhCithbmQgTmljayBDb2dobGFuIGluIDppc3N1ZTpgMTg2MjZgLikKKworOmZ1bmM6YH5pbnNwZWN0LnVud3JhcGAgbWFrZXMgaXQgZWFzeSB0byB1bnJhdmVsIHdyYXBwZXIgZnVuY3Rpb24gY2hhaW5zCitjcmVhdGVkIGJ5IDpmdW5jOmBmdW5jdG9vbHMud3JhcHNgIChhbmQgYW55IG90aGVyIEFQSSB0aGF0IHNldHMgdGhlCitgYF9fd3JhcHBlZF9fYGAgYXR0cmlidXRlIG9uIGEgd3JhcHBlciBmdW5jdGlvbikuICAoQ29udHJpYnV0ZWQgYnkKK0RhbmllbCBVcmJhbiwgQWFyb24gSWxlcyBhbmQgTmljayBDb2dobGFuIGluIDppc3N1ZTpgMTMyNjZgLikKKworQXMgcGFydCBvZiB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIG5ldyA6bW9kOmBlbnVtYCBtb2R1bGUsIHRoZQorOm1vZDpgaW5zcGVjdGAgbW9kdWxlIG5vdyBoYXMgc3Vic3RhbnRpYWxseSBiZXR0ZXIgc3VwcG9ydCBmb3IgY3VzdG9tCitgYF9fZGlyX19gYCBtZXRob2RzIGFuZCBkeW5hbWljIGNsYXNzIGF0dHJpYnV0ZXMgcHJvdmlkZWQgdGhyb3VnaAorbWV0YWNsYXNzZXMuICAoQ29udHJpYnV0ZWQgYnkgRXRoYW4gRnVybWFuIGluIDppc3N1ZTpgMTg5MjlgIGFuZAorOmlzc3VlOmAxOTAzMGAuKQorCis6ZnVuYzpgfmluc3BlY3QuZ2V0ZnVsbGFyZ3NwZWNgIGFuZCA6ZnVuYzpgfmluc3BlY3QuZ2V0YXJnc3BlY2AKK25vdyB1c2UgdGhlIDpmdW5jOmB+aW5zcGVjdC5zaWduYXR1cmVgIEFQSS4gVGhpcyBhbGxvd3MgdGhlbSB0bworc3VwcG9ydCBhIG11Y2ggYnJvYWRlciByYW5nZSBvZiBjYWxsYWJsZXMsIGluY2x1ZGluZyB0aG9zZSB3aXRoCitgYF9fc2lnbmF0dXJlX19gYCBhdHRyaWJ1dGVzLCB0aG9zZSB3aXRoIG1ldGFkYXRhIHByb3ZpZGVkIGJ5IGFyZ3VtZW50CitjbGluaWMsIDpmdW5jOmBmdW5jdG9vbHMucGFydGlhbGAgb2JqZWN0cyBhbmQgbW9yZS4gTm90ZSB0aGF0LCB1bmxpa2UKKzpmdW5jOmB+aW5zcGVjdC5zaWduYXR1cmVgLCB0aGVzZSBmdW5jdGlvbnMgc3RpbGwgaWdub3JlIGBgX193cmFwcGVkX19gYAorYXR0cmlidXRlcywgYW5kIHJlcG9ydCB0aGUgYWxyZWFkeSBib3VuZCBmaXJzdCBhcmd1bWVudCBmb3IgYm91bmQgbWV0aG9kcywKK3NvIGl0IGlzIHN0aWxsIG5lY2Vzc2FyeSB0byB1cGRhdGUgeW91ciBjb2RlIHRvIHVzZQorOmZ1bmM6YH5pbnNwZWN0LnNpZ25hdHVyZWAgZGlyZWN0bHkgaWYgdGhvc2UgZmVhdHVyZXMgYXJlIGRlc2lyZWQuCisoQ29udHJpYnV0ZWQgYnkgWXVyeSBTZWxpdmFub3YgaW4gOmlzc3VlOmAxNzQ4MWAuKQorCis6ZnVuYzpgfmluc3BlY3Quc2lnbmF0dXJlYCBub3cgc3VwcG9ydHMgZHVjayB0eXBlcyBvZiBDUHl0aG9uIGZ1bmN0aW9ucywKK3doaWNoIGFkZHMgc3VwcG9ydCBmb3IgZnVuY3Rpb25zIGNvbXBpbGVkIHdpdGggQ3l0aG9uLiAgKENvbnRyaWJ1dGVkCitieSBTdGVmYW4gQmVobmVsIGFuZCBZdXJ5IFNlbGl2YW5vdiBpbiA6aXNzdWU6YDE3MTU5YC4pCisKKworaXBhZGRyZXNzCistLS0tLS0tLS0KKworOm1vZDpgaXBhZGRyZXNzYCB3YXMgYWRkZWQgdG8gdGhlIHN0YW5kYXJkIGxpYnJhcnkgaW4gUHl0aG9uIDMuMyBhcyBhCis6dGVybTpgcHJvdmlzaW9uYWwgQVBJYC4gV2l0aCB0aGUgcmVsZWFzZSBvZiBQeXRob24gMy40LCB0aGlzIHF1YWxpZmljYXRpb24KK2hhcyBiZWVuIHJlbW92ZWQ6IDptb2Q6YGlwYWRkcmVzc2AgaXMgbm93IGNvbnNpZGVyZWQgYSBzdGFibGUgQVBJLCBjb3ZlcmVkCitieSB0aGUgbm9ybWFsIHN0YW5kYXJkIGxpYnJhcnkgcmVxdWlyZW1lbnRzIHRvIG1haW50YWluIGJhY2t3YXJkcworY29tcGF0aWJpbGl0eS4KKworQSBuZXcgOmF0dHI6YH5pcGFkZHJlc3MuSVB2NEFkZHJlc3MuaXNfZ2xvYmFsYCBwcm9wZXJ0eSBpcyBgYFRydWVgYCBpZgorYW4gYWRkcmVzcyBpcyBnbG9iYWxseSByb3V0ZWFibGUuICAoQ29udHJpYnV0ZWQgYnkgUGV0ZXIgTW9vZHkgaW4KKzppc3N1ZTpgMTc0MDBgLikKKworCitsb2dnaW5nCistLS0tLS0tCisKK1RoZSA6Y2xhc3M6YH5sb2dnaW5nLmhhbmRsZXJzLlRpbWVkUm90YXRpbmdGaWxlSGFuZGxlcmAgaGFzIGEgbmV3ICphdFRpbWUqCitwYXJhbWV0ZXIgdGhhdCBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSB0aW1lIG9mIGRheSB3aGVuIHJvbGxvdmVyIHNob3VsZAoraGFwcGVuLiAgKENvbnRyaWJ1dGVkIGJ5IFJvbmFsZCBPdXNzb3JlbiBpbiA6aXNzdWU6YDk1NTZgLikKKworOmNsYXNzOmB+bG9nZ2luZy5oYW5kbGVycy5Tb2NrZXRIYW5kbGVyYCBhbmQKKzpjbGFzczpgfmxvZ2dpbmcuaGFuZGxlcnMuRGF0YWdyYW1IYW5kbGVyYCBub3cgc3VwcG9ydCBVbml4IGRvbWFpbiBzb2NrZXRzIChieQorc2V0dGluZyAqcG9ydCogdG8gYGBOb25lYGApLiAgKENvbnRyaWJ1dGVkIGJ5IFZpbmF5IFNhamlwIGluIGNvbW1pdAorY2U0NjE5NWI1NmE5LikKKworOmZ1bmM6YH5sb2dnaW5nLmNvbmZpZy5maWxlQ29uZmlnYCBub3cgYWNjZXB0cyBhCis6Y2xhc3M6YGNvbmZpZ3BhcnNlci5SYXdDb25maWdQYXJzZXJgIHN1YmNsYXNzIGluc3RhbmNlIGZvciB0aGUgKmZuYW1lKgorcGFyYW1ldGVyLiAgVGhpcyBmYWNpbGl0YXRlcyB1c2luZyBhIGNvbmZpZ3VyYXRpb24gZmlsZSB3aGVuIGxvZ2dpbmcKK2NvbmZpZ3VyYXRpb24gaXMganVzdCBhIHBhcnQgb2YgdGhlIG92ZXJhbGwgYXBwbGljYXRpb24gY29uZmlndXJhdGlvbiwgb3Igd2hlcmUKK3RoZSBhcHBsaWNhdGlvbiBtb2RpZmllcyB0aGUgY29uZmlndXJhdGlvbiBiZWZvcmUgcGFzc2luZyBpdCB0bworOmZ1bmM6YH5sb2dnaW5nLmNvbmZpZy5maWxlQ29uZmlnYC4gIChDb250cmlidXRlZCBieSBWaW5heSBTYWppcCBpbgorOmlzc3VlOmAxNjExMGAuKQorCitMb2dnaW5nIGNvbmZpZ3VyYXRpb24gZGF0YSByZWNlaXZlZCBmcm9tIGEgc29ja2V0IHZpYSB0aGUKKzpmdW5jOmBsb2dnaW5nLmNvbmZpZy5saXN0ZW5gIGZ1bmN0aW9uIGNhbiBub3cgYmUgdmFsaWRhdGVkIGJlZm9yZSBiZWluZworcHJvY2Vzc2VkIGJ5IHN1cHBseWluZyBhIHZlcmlmaWNhdGlvbiBmdW5jdGlvbiBhcyB0aGUgYXJndW1lbnQgdG8gdGhlIG5ldworKnZlcmlmeSoga2V5d29yZCBhcmd1bWVudC4gIChDb250cmlidXRlZCBieSBWaW5heSBTYWppcCBpbiA6aXNzdWU6YDE1NDUyYC4pCisKKworLi4gX3doYXRzbmV3LW1hcnNoYWwtMzoKKworbWFyc2hhbAorLS0tLS0tLQorCitUaGUgZGVmYXVsdCA6bW9kOmBtYXJzaGFsYCB2ZXJzaW9uIGhhcyBiZWVuIGJ1bXBlZCB0byAzLiAgVGhlIGNvZGUgaW1wbGVtZW50aW5nCit0aGUgbmV3IHZlcnNpb24gcmVzdG9yZXMgdGhlIFB5dGhvbjIgYmVoYXZpb3Igb2YgcmVjb3JkaW5nIG9ubHkgb25lIGNvcHkgb2YKK2ludGVybmVkIHN0cmluZ3MgYW5kIHByZXNlcnZpbmcgdGhlIGludGVybmluZyBvbiBkZXNlcmlhbGl6YXRpb24sIGFuZCBleHRlbmRzCit0aGlzICJvbmUgY29weSIgYWJpbGl0eSB0byBhbnkgb2JqZWN0IHR5cGUgKGluY2x1ZGluZyBoYW5kbGluZyByZWN1cnNpdmUKK3JlZmVyZW5jZXMpLiAgVGhpcyByZWR1Y2VzIGJvdGggdGhlIHNpemUgb2YgYGAucHljYGAgZmlsZXMgYW5kIHRoZSBhbW91bnQgb2YKK21lbW9yeSBhIG1vZHVsZSBvY2N1cGllcyBpbiBtZW1vcnkgd2hlbiBpdCBpcyBsb2FkZWQgZnJvbSBhIGBgLnB5Y2BgIChvcgorYGAucHlvYGApIGZpbGUuICAoQ29udHJpYnV0ZWQgYnkgS3Jpc3Rqw6FuIFZhbHVyIErDs25zc29uIGluIDppc3N1ZTpgMTY0NzVgLAord2l0aCBhZGRpdGlvbmFsIHNwZWVkdXBzIGJ5IEFudG9pbmUgUGl0cm91IGluIDppc3N1ZTpgMTkyMTlgLikKKworCittbWFwCistLS0tCisKK21tYXAgb2JqZWN0cyBjYW4gbm93IGJlIDptb2Q6YHdlYWtyZWZgXCBlZC4gIChDb250cmlidXRlZCBieSBWYWxlcmllIExhbWJlcnQgaW4KKzppc3N1ZTpgNDg4NWAuKQorCisKK211bHRpcHJvY2Vzc2luZworLS0tLS0tLS0tLS0tLS0tCisKKy4uIF93aGF0c25ldy1tdWx0aXByb2Nlc3Npbmctbm8tZm9yazoKKworT24gVW5peCB0d28gbmV3IDpyZWY6YHN0YXJ0IG1ldGhvZHMgPG11bHRpcHJvY2Vzc2luZy1zdGFydC1tZXRob2RzPmAsCitgYHNwYXduYGAgYW5kIGBgZm9ya3NlcnZlcmBgLCBoYXZlIGJlZW4gYWRkZWQgZm9yIHN0YXJ0aW5nIHByb2Nlc3NlcyB1c2luZworOm1vZDpgbXVsdGlwcm9jZXNzaW5nYC4gIFRoZXNlIG1ha2UgdGhlIG1peGluZyBvZiBwcm9jZXNzZXMgd2l0aCB0aHJlYWRzIG1vcmUKK3JvYnVzdCwgYW5kIHRoZSBgYHNwYXduYGAgbWV0aG9kIG1hdGNoZXMgdGhlIHNlbWFudGljcyB0aGF0IG11bHRpcHJvY2Vzc2luZyBoYXMKK2Fsd2F5cyB1c2VkIG9uIFdpbmRvd3MuICBOZXcgZnVuY3Rpb24KKzpmdW5jOmB+bXVsdGlwcm9jZXNzaW5nLmdldF9hbGxfc3RhcnRfbWV0aG9kc2AgcmVwb3J0cyBhbGwgc3RhcnQgbWV0aG9kcworYXZhaWxhYmxlIG9uIHRoZSBwbGF0Zm9ybSwgOmZ1bmM6YH5tdWx0aXByb2Nlc3NpbmcuZ2V0X3N0YXJ0X21ldGhvZGAgcmVwb3J0cwordGhlIGN1cnJlbnQgc3RhcnQgbWV0aG9kLCBhbmQgOmZ1bmM6YH5tdWx0aXByb2Nlc3Npbmcuc2V0X3N0YXJ0X21ldGhvZGAgc2V0cwordGhlIHN0YXJ0IG1ldGhvZC4gIChDb250cmlidXRlZCBieSBSaWNoYXJkIE91ZGtlcmsgaW4gOmlzc3VlOmA4NzEzYC4pCisKKzptb2Q6YG11bHRpcHJvY2Vzc2luZ2AgYWxzbyBub3cgaGFzIHRoZSBjb25jZXB0IG9mIGEgYGBjb250ZXh0YGAsIHdoaWNoCitkZXRlcm1pbmVzIGhvdyBjaGlsZCBwcm9jZXNzZXMgYXJlIGNyZWF0ZWQuICBOZXcgZnVuY3Rpb24KKzpmdW5jOmB+bXVsdGlwcm9jZXNzaW5nLmdldF9jb250ZXh0YCByZXR1cm5zIGEgY29udGV4dCB0aGF0IHVzZXMgYSBzcGVjaWZpZWQKK3N0YXJ0IG1ldGhvZC4gIEl0IGhhcyB0aGUgc2FtZSBBUEkgYXMgdGhlIDptb2Q6YG11bHRpcHJvY2Vzc2luZ2AgbW9kdWxlIGl0c2VsZiwKK3NvIHlvdSBjYW4gdXNlIGl0IHRvIGNyZWF0ZSA6Y2xhc3M6YH5tdWx0aXByb2Nlc3NpbmcucG9vbC5Qb29sYFwgcyBhbmQgb3RoZXIKK29iamVjdHMgdGhhdCB3aWxsIG9wZXJhdGUgd2l0aGluIHRoYXQgY29udGV4dC4gIFRoaXMgYWxsb3dzIGEgZnJhbWV3b3JrIGFuZCBhbgorYXBwbGljYXRpb24gb3IgZGlmZmVyZW50IHBhcnRzIG9mIHRoZSBzYW1lIGFwcGxpY2F0aW9uIHRvIHVzZSBtdWx0aXByb2Nlc3NpbmcKK3dpdGhvdXQgaW50ZXJmZXJpbmcgd2l0aCBlYWNoIG90aGVyLiAgKENvbnRyaWJ1dGVkIGJ5IFJpY2hhcmQgT3Vka2VyayBpbgorOmlzc3VlOmAxODk5OWAuKQorCitFeGNlcHQgd2hlbiB1c2luZyB0aGUgb2xkICpmb3JrKiBzdGFydCBtZXRob2QsIGNoaWxkIHByb2Nlc3NlcyBubyBsb25nZXIKK2luaGVyaXQgdW5uZWVkZWQgaGFuZGxlcy9maWxlIGRlc2NyaXB0b3JzIGZyb20gdGhlaXIgcGFyZW50cyAocGFydCBvZgorOmlzc3VlOmA4NzEzYCkuCisKKzptb2Q6YG11bHRpcHJvY2Vzc2luZ2Agbm93IHJlbGllcyBvbiA6bW9kOmBydW5weWAgKHdoaWNoIGltcGxlbWVudHMgdGhlCitgYC1tYGAgc3dpdGNoKSB0byBpbml0aWFsaXNlIGBgX19tYWluX19gYCBhcHByb3ByaWF0ZWx5IGluIGNoaWxkIHByb2Nlc3Nlcword2hlbiB1c2luZyB0aGUgYGBzcGF3bmBgIG9yIGBgZm9ya3NlcnZlcmBgIHN0YXJ0IG1ldGhvZHMuIFRoaXMgcmVzb2x2ZXMgc29tZQorZWRnZSBjYXNlcyB3aGVyZSBjb21iaW5pbmcgbXVsdGlwcm9jZXNzaW5nLCB0aGUgYGAtbWBgIGNvbW1hbmQgbGluZSBzd2l0Y2gsCithbmQgZXhwbGljaXQgcmVsYXRpdmUgaW1wb3J0cyBjb3VsZCBjYXVzZSBvYnNjdXJlIGZhaWx1cmVzIGluIGNoaWxkCitwcm9jZXNzZXMuICAoQ29udHJpYnV0ZWQgYnkgTmljayBDb2dobGFuIGluIDppc3N1ZTpgMTk5NDZgLikKKworCitvcGVyYXRvcgorLS0tLS0tLS0KKworTmV3IGZ1bmN0aW9uIDpmdW5jOmB+b3BlcmF0b3IubGVuZ3RoX2hpbnRgIHByb3ZpZGVzIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoZQorc3BlY2lmaWNhdGlvbiBmb3IgaG93IHRoZSA6bWV0aDpgfm9iamVjdC5fX2xlbmd0aF9oaW50X19gIHNwZWNpYWwgbWV0aG9kIHNob3VsZAorYmUgdXNlZCwgYXMgcGFydCBvZiB0aGUgOnBlcDpgNDI0YCBmb3JtYWwgc3BlY2lmaWNhdGlvbiBvZiB0aGlzIGxhbmd1YWdlCitmZWF0dXJlLiAgKENvbnRyaWJ1dGVkIGJ5IEFybWluIFJvbmFjaGVyIGluIDppc3N1ZTpgMTYxNDhgLikKKworVGhlcmUgaXMgbm93IGEgcHVyZS1weXRob24gdmVyc2lvbiBvZiB0aGUgOm1vZDpgb3BlcmF0b3JgIG1vZHVsZSBhdmFpbGFibGUgZm9yCityZWZlcmVuY2UgYW5kIGZvciB1c2UgYnkgYWx0ZXJuYXRlIGltcGxlbWVudGF0aW9ucyBvZiBQeXRob24uICAoQ29udHJpYnV0ZWQgYnkKK1phY2hhcnkgV2FyZSBpbiA6aXNzdWU6YDE2Njk0YC4pCisKKworb3MKKy0tCisKK1RoZXJlIGFyZSBuZXcgZnVuY3Rpb25zIHRvIGdldCBhbmQgc2V0IHRoZSA6cmVmOmBpbmhlcml0YWJsZSBmbGFnCis8ZmRfaW5oZXJpdGFuY2U+YCBvZiBhIGZpbGUgZGVzY3JpcHRvciAoOmZ1bmM6YG9zLmdldF9pbmhlcml0YWJsZWAsCis6ZnVuYzpgb3Muc2V0X2luaGVyaXRhYmxlYCkgb3IgYSBXaW5kb3dzIGhhbmRsZQorKDpmdW5jOmBvcy5nZXRfaGFuZGxlX2luaGVyaXRhYmxlYCwgOmZ1bmM6YG9zLnNldF9oYW5kbGVfaW5oZXJpdGFibGVgKS4KKworTmV3IGZ1bmN0aW9uIDpmdW5jOmB+b3MuY3B1X2NvdW50YCByZXBvcnRzIHRoZSBudW1iZXIgb2YgQ1BVcyBhdmFpbGFibGUgb24gdGhlCitwbGF0Zm9ybSBvbiB3aGljaCBQeXRob24gaXMgcnVubmluZyAob3IgYGBOb25lYGAgaWYgdGhlIGNvdW50IGNhbid0IGJlCitkZXRlcm1pbmVkKS4gIFRoZSA6ZnVuYzpgbXVsdGlwcm9jZXNzaW5nLmNwdV9jb3VudGAgZnVuY3Rpb24gaXMgbm93IGltcGxlbWVudGVkCitpbiB0ZXJtcyBvZiB0aGlzIGZ1bmN0aW9uKS4gIChDb250cmlidXRlZCBieSBUcmVudCBOZWxzb24sIFlvZ2VzaCBDaGF1ZGhhcmksCitWaWN0b3IgU3Rpbm5lciwgYW5kIENoYXJsZXMtRnJhbsOnb2lzIE5hdGFsaSBpbiA6aXNzdWU6YDE3OTE0YC4pCisKKzpmdW5jOmBvcy5wYXRoLnNhbWVzdGF0YCBpcyBub3cgYXZhaWxhYmxlIG9uIHRoZSBXaW5kb3dzIHBsYXRmb3JtIChhbmQgdGhlCis6ZnVuYzpgb3MucGF0aC5zYW1lZmlsZWAgaW1wbGVtZW50YXRpb24gaXMgbm93IHNoYXJlZCBiZXR3ZWVuIFVuaXggYW5kCitXaW5kb3dzKS4gIChDb250cmlidXRlZCBieSBCcmlhbiBDdXJ0aW4gaW4gOmlzc3VlOmAxMTkzOWAuKQorCis6ZnVuYzpgb3MucGF0aC5pc21vdW50YCBub3cgcmVjb2duaXplcyB2b2x1bWVzIG1vdW50ZWQgYmVsb3cgYSBkcml2ZQorcm9vdCBvbiBXaW5kb3dzLiAgKENvbnRyaWJ1dGVkIGJ5IFRpbSBHb2xkZW4gaW4gOmlzc3VlOmA5MDM1YC4pCisKKzpmdW5jOmBvcy5vcGVuYCBzdXBwb3J0cyB0d28gbmV3IGZsYWdzIG9uIHBsYXRmb3JtcyB0aGF0IHByb3ZpZGUgdGhlbSwKKzpkYXRhOmB+b3MuT19QQVRIYCAodW4tb3BlbmVkIGZpbGUgZGVzY3JpcHRvciksIGFuZCA6ZGF0YTpgfm9zLk9fVE1QRklMRWAKKyh1bm5hbWVkIHRlbXBvcmFyeSBmaWxlOyBhcyBvZiAzLjQuMCByZWxlYXNlIGF2YWlsYWJsZSBvbmx5IG9uIExpbnV4IHN5c3RlbXMKK3dpdGggYSBrZXJuZWwgdmVyc2lvbiBvZiAzLjExIG9yIG5ld2VyIHRoYXQgaGF2ZSB1YXBpIGhlYWRlcnMpLiAgKENvbnRyaWJ1dGVkCitieSBDaHJpc3RpYW4gSGVpbWVzIGluIDppc3N1ZTpgMTg2NzNgIGFuZCBCZW5qYW1pbiBQZXRlcnNvbiwgcmVzcGVjdGl2ZWx5LikKKworCitwZGIKKy0tLQorCis6bW9kOmBwZGJgIGhhcyBiZWVuIGVuaGFuY2VkIHRvIGhhbmRsZSBnZW5lcmF0b3JzLCA6a2V5d29yZDpgeWllbGRgLCBhbmQKK2BgeWllbGQgZnJvbWBgIGluIGEgbW9yZSB1c2VmdWwgZmFzaGlvbi4gIFRoaXMgaXMgZXNwZWNpYWxseSBoZWxwZnVsIHdoZW4KK2RlYnVnZ2luZyA6bW9kOmBhc3luY2lvYCBiYXNlZCBwcm9ncmFtcy4gIChDb250cmlidXRlZCBieSBBbmRyZXcgU3ZldGxvdiBhbmQKK1hhdmllciBkZSBHYXllIGluIDppc3N1ZTpgMTY1OTZgLikKKworVGhlIGBgcHJpbnRgYCBjb21tYW5kIGhhcyBiZWVuIHJlbW92ZWQgZnJvbSA6bW9kOmBwZGJgLCByZXN0b3JpbmcgYWNjZXNzIHRvIHRoZQorUHl0aG9uIDpmdW5jOmBwcmludGAgZnVuY3Rpb24gZnJvbSB0aGUgcGRiIGNvbW1hbmQgbGluZS4gIFB5dGhvbjIncyBgYHBkYmBgIGRpZAorbm90IGhhdmUgYSBgYHByaW50YGAgY29tbWFuZDsgaW5zdGVhZCwgZW50ZXJpbmcgYGBwcmludGBgIGV4ZWN1dGVkIHRoZQorYGBwcmludGBgIHN0YXRlbWVudC4gIEluIFB5dGhvbjMgYGBwcmludGBgIHdhcyBtaXN0YWtlbmx5IG1hZGUgYW4gYWxpYXMgZm9yIHRoZQorcGRiIDpwZGJjbWQ6YHBgIGNvbW1hbmQuICBgYHBgYCwgaG93ZXZlciwgcHJpbnRzIHRoZSBgYHJlcHJgYCBvZiBpdHMgYXJndW1lbnQsCitub3QgdGhlIGBgc3RyYGAgbGlrZSB0aGUgUHl0aG9uMiBgYHByaW50YGAgY29tbWFuZCBkaWQuICBXb3JzZSwgdGhlIFB5dGhvbjMKK2BgcGRiIHByaW50YGAgY29tbWFuZCBzaGFkb3dlZCB0aGUgUHl0aG9uMyBgYHByaW50YGAgZnVuY3Rpb24sIG1ha2luZyBpdAoraW5hY2Nlc3NpYmxlIGF0IHRoZSBgYHBkYmBgIHByb21wdC4gIChDb250cmlidXRlZCBieSBDb25ub3IgT3Nib3JuIGluCis6aXNzdWU6YDE4NzY0YC4pCisKKworLi4gX3doYXRzbmV3LXByb3RvY29sLTQ6CisKK3BpY2tsZQorLS0tLS0tCisKKzptb2Q6YHBpY2tsZWAgbm93IHN1cHBvcnRzIChidXQgZG9lcyBub3QgdXNlIGJ5IGRlZmF1bHQpIGEgbmV3IHBpY2tsZSBwcm90b2NvbCwKK3Byb3RvY29sIDQuICBUaGlzIG5ldyBwcm90b2NvbCBhZGRyZXNzZXMgYSBudW1iZXIgb2YgaXNzdWVzIHRoYXQgd2VyZSBwcmVzZW50CitpbiBwcmV2aW91cyBwcm90b2NvbHMsIHN1Y2ggYXMgdGhlIHNlcmlhbGl6YXRpb24gb2YgbmVzdGVkIGNsYXNzZXMsIHZlcnkgbGFyZ2UKK3N0cmluZ3MgYW5kIGNvbnRhaW5lcnMsIGFuZCBjbGFzc2VzIHdob3NlIDptZXRoOmBfX25ld19fYCBtZXRob2QgdGFrZXMKK2tleXdvcmQtb25seSBhcmd1bWVudHMuICBJdCBhbHNvIHByb3ZpZGVzIHNvbWUgZWZmaWNpZW5jeSBpbXByb3ZlbWVudHMuCisKKy4uIHNlZWFsc286OgorCisgICA6cGVwOmAzMTU0YCAtLSBQaWNrbGUgcHJvdG9jb2wgNAorICAgICAgUEVQIHdyaXR0ZW4gYnkgQW50b2luZSBQaXRyb3UgYW5kIGltcGxlbWVudGVkIGJ5IEFsZXhhbmRyZSBWYXNzYWxvdHRpLgorCisKK3BsaXN0bGliCistLS0tLS0tLQorCis6bW9kOmBwbGlzdGxpYmAgbm93IGhhcyBhbiBBUEkgdGhhdCBpcyBzaW1pbGFyIHRvIHRoZSBzdGFuZGFyZCBwYXR0ZXJuIGZvcgorc3RkbGliIHNlcmlhbGl6YXRpb24gcHJvdG9jb2xzLCB3aXRoIG5ldyA6ZnVuYzpgfnBsaXN0bGliLmxvYWRgLAorOmZ1bmM6YH5wbGlzdGxpYi5kdW1wYCwgOmZ1bmM6YH5wbGlzdGxpYi5sb2Fkc2AsIGFuZCA6ZnVuYzpgfnBsaXN0bGliLmR1bXBzYAorZnVuY3Rpb25zLiAgKFRoZSBvbGRlciBBUEkgaXMgbm93IGRlcHJlY2F0ZWQuKSAgSW4gYWRkaXRpb24gdG8gdGhlIGFscmVhZHkKK3N1cHBvcnRlZCBYTUwgcGxpc3QgZm9ybWF0ICg6ZGF0YTpgfnBsaXN0bGliLkZNVF9YTUxgKSwgaXQgYWxzbyBub3cgc3VwcG9ydHMKK3RoZSBiaW5hcnkgcGxpc3QgZm9ybWF0ICg6ZGF0YTpgfnBsaXN0bGliLkZNVF9CSU5BUllgKS4gIChDb250cmlidXRlZCBieSBSb25hbGQKK091c3NvcmVuIGFuZCBvdGhlcnMgaW4gOmlzc3VlOmAxNDQ1NWAuKQorCisKK3BvcGxpYgorLS0tLS0tCisKK1R3byBuZXcgbWV0aG9kcyBoYXZlIGJlZW4gYWRkZWQgdG8gOm1vZDpgcG9wbGliYDogOm1ldGg6YH5wb3BsaWIuUE9QMy5jYXBhYCwKK3doaWNoIHJldHVybnMgdGhlIGxpc3Qgb2YgY2FwYWJpbGl0aWVzIGFkdmVydGlzZWQgYnkgdGhlIFBPUCBzZXJ2ZXIsIGFuZAorOm1ldGg6YH5wb3BsaWIuUE9QMy5zdGxzYCwgd2hpY2ggc3dpdGNoZXMgYSBjbGVhci10ZXh0IFBPUDMgc2Vzc2lvbiBpbnRvIGFuCitlbmNyeXB0ZWQgUE9QMyBzZXNzaW9uIGlmIHRoZSBQT1Agc2VydmVyIHN1cHBvcnRzIGl0LiAgKENvbnRyaWJ1dGVkIGJ5IExvcmVuem8KK0NhdHVjY2kgaW4gOmlzc3VlOmA0NDczYC4pCisKKworcHByaW50CistLS0tLS0KKworVGhlIDptb2Q6YHBwcmludGAgbW9kdWxlJ3MgOmNsYXNzOmB+cHByaW50LlByZXR0eVByaW50ZXJgIGNsYXNzIGFuZCBpdHMKKzpmdW5jOmB+cHByaW50LnBmb3JtYXRgLCBhbmQgOmZ1bmM6YH5wcHJpbnQucHByaW50YCBmdW5jdGlvbnMgaGF2ZSBhIG5ldworb3B0aW9uLCAqY29tcGFjdCosIHRoYXQgY29udHJvbHMgaG93IHRoZSBvdXRwdXQgaXMgZm9ybWF0dGVkLiAgQ3VycmVudGx5CitzZXR0aW5nICpjb21wYWN0KiB0byBgYFRydWVgYCBtZWFucyB0aGF0IHNlcXVlbmNlcyB3aWxsIGJlIHByaW50ZWQgd2l0aCBhcyBtYW55CitzZXF1ZW5jZSBlbGVtZW50cyBhcyB3aWxsIGZpdCB3aXRoaW4gKndpZHRoKiBvbiBlYWNoIChpbmRlbnRlZCkgbGluZS4KKyhDb250cmlidXRlZCBieSBTZXJoaXkgU3RvcmNoYWthIGluIDppc3N1ZTpgMTkxMzJgLikKKworTG9uZyBzdHJpbmdzIGFyZSBub3cgd3JhcHBlZCB1c2luZyBQeXRob24ncyBub3JtYWwgbGluZSBjb250aW51YXRpb24KK3N5bnRheC4gIChDb250cmlidXRlZCBieSBBbnRvaW5lIFBpdHJvdSBpbiA6aXNzdWU6YDE3MTUwYC4pCisKKworcHR5CistLS0KKworOmZ1bmM6YHB0eS5zcGF3bmAgbm93IHJldHVybnMgdGhlIHN0YXR1cyB2YWx1ZSBmcm9tIDpmdW5jOmBvcy53YWl0cGlkYCBvbgordGhlIGNoaWxkIHByb2Nlc3MsIGluc3RlYWQgb2YgYGBOb25lYGAuICAoQ29udHJpYnV0ZWQgYnkgR3JlZ29yeSBQLiBTbWl0aC4pCisKKworcHlkb2MKKy0tLS0tCisKK1RoZSA6bW9kOmBweWRvY2AgbW9kdWxlIGlzIG5vdyBiYXNlZCBkaXJlY3RseSBvbiB0aGUgOmZ1bmM6YGluc3BlY3Quc2lnbmF0dXJlYAoraW50cm9zcGVjdGlvbiBBUEksIGFsbG93aW5nIGl0IHRvIHByb3ZpZGUgc2lnbmF0dXJlIGluZm9ybWF0aW9uIGZvciBhIHdpZGVyCit2YXJpZXR5IG9mIGNhbGxhYmxlIG9iamVjdHMuIFRoaXMgY2hhbmdlIGFsc28gbWVhbnMgdGhhdCBgYF9fd3JhcHBlZF9fYGAKK2F0dHJpYnV0ZXMgYXJlIG5vdyB0YWtlbiBpbnRvIGFjY291bnQgd2hlbiBkaXNwbGF5aW5nIGhlbHAgaW5mb3JtYXRpb24uCisoQ29udHJpYnV0ZWQgYnkgTGFycnkgSGFzdGluZ3MgaW4gOmlzc3VlOmAxOTY3NGAuKQorCitUaGUgOm1vZDpgcHlkb2NgIG1vZHVsZSBubyBsb25nZXIgZGlzcGxheXMgdGhlIGBgc2VsZmBgIHBhcmFtZXRlciBmb3IKK2FscmVhZHkgYm91bmQgbWV0aG9kcy4gSW5zdGVhZCwgaXQgYWltcyB0byBhbHdheXMgZGlzcGxheSB0aGUgZXhhY3QgY3VycmVudAorc2lnbmF0dXJlIG9mIHRoZSBzdXBwbGllZCBjYWxsYWJsZS4gIChDb250cmlidXRlZCBieSBMYXJyeSBIYXN0aW5ncyBpbgorOmlzc3VlOmAyMDcxMGAuKQorCitJbiBhZGRpdGlvbiB0byB0aGUgY2hhbmdlcyB0aGF0IGhhdmUgYmVlbiBtYWRlIHRvIDptb2Q6YHB5ZG9jYCBkaXJlY3RseSwKK2l0cyBoYW5kbGluZyBvZiBjdXN0b20gYGBfX2Rpcl9fYGAgbWV0aG9kcyBhbmQgdmFyaW91cyBkZXNjcmlwdG9yCitiZWhhdmlvdXJzIGhhcyBhbHNvIGJlZW4gaW1wcm92ZWQgc3Vic3RhbnRpYWxseSBieSB0aGUgdW5kZXJseWluZyBjaGFuZ2VzIGluCit0aGUgOm1vZDpgaW5zcGVjdGAgbW9kdWxlLgorCitBcyB0aGUgOmZ1bmM6YGhlbHBgIGJ1aWx0aW4gaXMgYmFzZWQgb24gOm1vZDpgcHlkb2NgLCB0aGUgYWJvdmUgY2hhbmdlcyBhbHNvCithZmZlY3QgdGhlIGJlaGF2aW91ciBvZiA6ZnVuYzpgaGVscGAuCisKKworcmUKKy0tCisKK05ldyA6ZnVuYzpgfnJlLmZ1bGxtYXRjaGAgZnVuY3Rpb24gYW5kIDptZXRoOmAucmVnZXguZnVsbG1hdGNoYCBtZXRob2QgYW5jaG9yCit0aGUgcGF0dGVybiBhdCBib3RoIGVuZHMgb2YgdGhlIHN0cmluZyB0byBtYXRjaC4gIFRoaXMgcHJvdmlkZXMgYSB3YXkgdG8gYmUKK2V4cGxpY2l0IGFib3V0IHRoZSBnb2FsIG9mIHRoZSBtYXRjaCwgd2hpY2ggYXZvaWRzIGEgY2xhc3Mgb2Ygc3VidGxlIGJ1Z3Mgd2hlcmUKK2BgJGBgIGNoYXJhY3RlcnMgZ2V0IGxvc3QgZHVyaW5nIGNvZGUgY2hhbmdlcyBvciB0aGUgYWRkaXRpb24gb2YgYWx0ZXJuYXRpdmVzCit0byBhbiBleGlzdGluZyByZWd1bGFyIGV4cHJlc3Npb24uICAoQ29udHJpYnV0ZWQgYnkgTWF0dGhldyBCYXJuZXR0IGluCis6aXNzdWU6YDE2MjAzYC4pCisKK1RoZSByZXByIG9mIDpyZWY6YHJlZ2V4IG9iamVjdHMgPHJlLW9iamVjdHM+YCBub3cgaW5jbHVkZXMgdGhlIHBhdHRlcm4KK2FuZCB0aGUgZmxhZ3M7IHRoZSByZXByIG9mIDpyZWY6YG1hdGNoIG9iamVjdHMgPG1hdGNoLW9iamVjdHM+YCBub3cKK2luY2x1ZGVzIHRoZSBzdGFydCwgZW5kLCBhbmQgdGhlIHBhcnQgb2YgdGhlIHN0cmluZyB0aGF0IG1hdGNoZWQuICAoQ29udHJpYnV0ZWQKK2J5IEh1Z28gTG9wZXMgVGF2YXJlcyBhbmQgU2VyaGl5IFN0b3JjaGFrYSBpbiA6aXNzdWU6YDEzNTkyYCBhbmQKKzppc3N1ZTpgMTcwODdgLikKKworCityZXNvdXJjZQorLS0tLS0tLS0KKworTmV3IDpmdW5jOmB+cmVzb3VyY2UucHJsaW1pdGAgZnVuY3Rpb24sIGF2YWlsYWJsZSBvbiBMaW51eCBwbGF0Zm9ybXMgd2l0aCBhCitrZXJuZWwgdmVyc2lvbiBvZiAyLjYuMzYgb3IgbGF0ZXIgYW5kIGdsaWJjIG9mIDIuMTMgb3IgbGF0ZXIsIHByb3ZpZGVzIHRoZQorYWJpbGl0eSB0byBxdWVyeSBvciBzZXQgdGhlIHJlc291cmNlIGxpbWl0cyBmb3IgcHJvY2Vzc2VzIG90aGVyIHRoYW4gdGhlIG9uZQorbWFraW5nIHRoZSBjYWxsLiAgKENvbnRyaWJ1dGVkIGJ5IENocmlzdGlhbiBIZWltZXMgaW4gOmlzc3VlOmAxNjU5NWAuKQorCitPbiBMaW51eCBrZXJuZWwgdmVyc2lvbiAyLjYuMzYgb3IgbGF0ZXIsIHRoZXJlIGFyZSB0aGVyZSBhcmUgYWxzbyBzb21lIG5ldworTGludXggc3BlY2lmaWMgY29uc3RhbnRzOiA6YXR0cjpgfnJlc291cmNlLlJMSU1JVF9NU0dRVUVVRWAsCis6YXR0cjpgfnJlc291cmNlLlJMSU1JVF9OSUNFYCwgOmF0dHI6YH5yZXNvdXJjZS5STElNSVRfUlRQUklPYCwKKzphdHRyOmB+cmVzb3VyY2UuUkxJTUlUX1JUVElNRWAsIGFuZCA6YXR0cjpgfnJlc291cmNlLlJMSU1JVF9TSUdQRU5ESU5HYC4KKyhDb250cmlidXRlZCBieSBDaHJpc3RpYW4gSGVpbWVzIGluIDppc3N1ZTpgMTkzMjRgLikKKworT24gRnJlZUJTRCB2ZXJzaW9uIDkgYW5kIGxhdGVyLCB0aGVyZSBzb21lIG5ldyBGcmVlQlNEIHNwZWNpZmljIGNvbnN0YW50czoKKzphdHRyOmB+cmVzb3VyY2UuUkxJTUlUX1NCU0laRWAsIDphdHRyOmB+cmVzb3VyY2UuUkxJTUlUX1NXQVBgLCBhbmQKKzphdHRyOmB+cmVzb3VyY2UuUkxJTUlUX05QVFNgLiAgKENvbnRyaWJ1dGVkIGJ5IENsYXVkaXUgUG9wYSBpbgorOmlzc3VlOmAxOTM0M2AuKQorCisKK3NlbGVjdAorLS0tLS0tCisKKzpjbGFzczpgfnNlbGVjdC5lcG9sbGAgb2JqZWN0cyBub3cgc3VwcG9ydCB0aGUgY29udGV4dCBtYW5hZ2VtZW50IHByb3RvY29sLgorV2hlbiB1c2VkIGluIGEgOmtleXdvcmQ6YHdpdGhgIHN0YXRlbWVudCwgdGhlIDptZXRoOmB+c2VsZWN0LmVwb2xsLmNsb3NlYAorbWV0aG9kIHdpbGwgYmUgY2FsbGVkIGF1dG9tYXRpY2FsbHkgYXQgdGhlIGVuZCBvZiB0aGUgYmxvY2suICAoQ29udHJpYnV0ZWQKK2J5IFNlcmhpeSBTdG9yY2hha2EgaW4gOmlzc3VlOmAxNjQ4OGAuKQorCis6Y2xhc3M6YH5zZWxlY3QuZGV2cG9sbGAgb2JqZWN0cyBub3cgaGF2ZSA6bWV0aDpgfnNlbGVjdC5kZXZwb2xsLmZpbGVub2AgYW5kCis6bWV0aDpgfnNlbGVjdC5kZXZwb2xsLmNsb3NlYCBtZXRob2RzLCBhcyB3ZWxsIGFzIGEgbmV3IGF0dHJpYnV0ZQorOmF0dHI6YH5zZWxlY3QuZGV2cG9sbC5jbG9zZWRgLiAgKENvbnRyaWJ1dGVkIGJ5IFZpY3RvciBTdGlubmVyIGluCis6aXNzdWU6YDE4Nzk0YC4pCisKKworc2hlbHZlCistLS0tLS0KKworOmNsYXNzOmB+c2hlbHZlLlNoZWxmYCBpbnN0YW5jZXMgbWF5IG5vdyBiZSB1c2VkIGluIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnRzLAorYW5kIHdpbGwgYmUgYXV0b21hdGljYWxseSBjbG9zZWQgYXQgdGhlIGVuZCBvZiB0aGUgOmtleXdvcmQ6YHdpdGhgIGJsb2NrLgorKENvbnRyaWJ1dGVkIGJ5IEZpbGlwIEdydXN6Y3p5xYRza2kgaW4gOmlzc3VlOmAxMzg5NmAuKQorCisKK3NodXRpbAorLS0tLS0tCisKKzpmdW5jOmB+c2h1dGlsLmNvcHlmaWxlYCBub3cgcmFpc2VzIGEgc3BlY2lmaWMgOmV4YzpgfnNodXRpbC5FcnJvcmAgc3ViY2xhc3MsCis6ZXhjOmB+c2h1dGlsLlNhbWVGaWxlRXJyb3JgLCB3aGVuIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFyZSB0aGUgc2FtZQorZmlsZSwgd2hpY2ggYWxsb3dzIGFuIGFwcGxpY2F0aW9uIHRvIHRha2UgYXBwcm9wcmlhdGUgYWN0aW9uIG9uIHRoaXMgc3BlY2lmaWMKK2Vycm9yLiAgKENvbnRyaWJ1dGVkIGJ5IEF0c3VvIElzaGltb3RvIGFuZCBIeW5layBTY2hsYXdhY2sgaW4KKzppc3N1ZTpgMTQ5MjcwNGAuKQorCisKK3NtdHBkCistLS0tLQorCitUaGUgOmNsYXNzOmB+c210cGQuU01UUFNlcnZlcmAgYW5kIDpjbGFzczpgfnNtdHBkLlNNVFBDaGFubmVsYCBjbGFzc2VzIG5vdworYWNjZXB0IGEgKm1hcCoga2V5d29yZCBhcmd1bWVudCB3aGljaCwgaWYgc3BlY2lmaWVkLCBpcyBwYXNzZWQgaW4gdG8KKzpjbGFzczpgYXN5bmNoYXQuYXN5bmNfY2hhdGAgYXMgaXRzICptYXAqIGFyZ3VtZW50LiAgVGhpcyBhbGxvd3MgYW4gYXBwbGljYXRpb24KK3RvIGF2b2lkIGFmZmVjdGluZyB0aGUgZ2xvYmFsIHNvY2tldCBtYXAuICAoQ29udHJpYnV0ZWQgYnkgVmluYXkgU2FqaXAgaW4KKzppc3N1ZTpgMTE5NTlgLikKKworCitzbXRwbGliCistLS0tLS0tCisKKzpleGM6YH5zbXRwbGliLlNNVFBFeGNlcHRpb25gIGlzIG5vdyBhIHN1YmNsYXNzIG9mIDpleGM6YE9TRXJyb3JgLCB3aGljaCBhbGxvd3MKK2JvdGggc29ja2V0IGxldmVsIGVycm9ycyBhbmQgU01UUCBwcm90b2NvbCBsZXZlbCBlcnJvcnMgdG8gYmUgY2F1Z2h0IGluIG9uZQordHJ5L2V4Y2VwdCBzdGF0ZW1lbnQgYnkgY29kZSB0aGF0IG9ubHkgY2FyZXMgd2hldGhlciBvciBub3QgYW4gZXJyb3Igb2NjdXJyZWQuCisoQ29udHJpYnV0ZWQgYnkgTmVkIEphY2tzb24gTG92ZWx5IGluIDppc3N1ZTpgMjExOGAuKQorCisKK3NvY2tldAorLS0tLS0tCisKK1RoZSBzb2NrZXQgbW9kdWxlIG5vdyBzdXBwb3J0cyB0aGUgOmRhdGE6YH5zb2NrZXQuQ0FOX0JDTWAgcHJvdG9jb2wgb24KK3BsYXRmb3JtcyB0aGF0IHN1cHBvcnQgaXQuICAoQ29udHJpYnV0ZWQgYnkgQnJpYW4gVGhvcm5lIGluIDppc3N1ZTpgMTUzNTlgLikKKworU29ja2V0IG9iamVjdHMgaGF2ZSBuZXcgbWV0aG9kcyB0byBnZXQgb3Igc2V0IHRoZWlyIDpyZWY6YGluaGVyaXRhYmxlIGZsYWcKKzxmZF9pbmhlcml0YW5jZT5gLCA6bWV0aDpgfnNvY2tldC5zb2NrZXQuZ2V0X2luaGVyaXRhYmxlYCBhbmQKKzptZXRoOmB+c29ja2V0LnNvY2tldC5zZXRfaW5oZXJpdGFibGVgLgorCitUaGUgYGBzb2NrZXQuQUZfKmBgIGFuZCBgYHNvY2tldC5TT0NLXypgYCBjb25zdGFudHMgYXJlIG5vdyBlbnVtZXJhdGlvbiB2YWx1ZXMKK3VzaW5nIHRoZSBuZXcgOm1vZDpgZW51bWAgbW9kdWxlLiAgVGhpcyBhbGxvd3MgbWVhbmluZ2Z1bCBuYW1lcyB0byBiZSBwcmludGVkCitkdXJpbmcgZGVidWdnaW5nLCBpbnN0ZWFkIG9mIGludGVnZXIgIm1hZ2ljIG51bWJlcnMiLgorCitUaGUgOmRhdGE6YH5zb2NrZXQuQUZfTElOS2AgY29uc3RhbnQgaXMgbm93IGF2YWlsYWJsZSBvbiBCU0QgYW5kIE9TWC4KKworOmZ1bmM6YH5zb2NrZXQuaW5ldF9wdG9uYCBhbmQgOmZ1bmM6YH5zb2NrZXQuaW5ldF9udG9wYCBhcmUgbm93IHN1cHBvcnRlZAorb24gV2luZG93cy4gIChDb250cmlidXRlZCBieSBBdHN1byBJc2hpbW90byBpbiA6aXNzdWU6YDcxNzFgLikKKworCitzcWxpdGUzCistLS0tLS0tCisKK0EgbmV3IGJvb2xlYW4gcGFyYW1ldGVyIHRvIHRoZSA6ZnVuYzpgfnNxbGl0ZTMuY29ubmVjdGAgZnVuY3Rpb24sICp1cmkqLCBjYW4gYmUKK3VzZWQgdG8gaW5kaWNhdGUgdGhhdCB0aGUgKmRhdGFiYXNlKiBwYXJhbWV0ZXIgaXMgYSBgYHVyaWBgIChzZWUgdGhlIGBTUUxpdGUKK1VSSSBkb2N1bWVudGF0aW9uIDxodHRwOi8vd3d3LnNxbGl0ZS5vcmcvdXJpLmh0bWw+YF8pLiAgKENvbnRyaWJ1dGVkIGJ5IHBvcSBpbgorOmlzc3VlOmAxMzc3M2AuKQorCisKK3NzbAorLS0tCisKKy4uIF93aGF0c25ldy10bHMtMTEtMTI6CisKKzpkYXRhOmB+c3NsLlBST1RPQ09MX1RMU3YxXzFgIGFuZCA6ZGF0YTpgfnNzbC5QUk9UT0NPTF9UTFN2MV8yYCAoVExTdjEuMSBhbmQKK1RMU3YxLjIgc3VwcG9ydCkgaGF2ZSBiZWVuIGFkZGVkOyBzdXBwb3J0IGZvciB0aGVzZSBwcm90b2NvbHMgaXMgb25seSBhdmFpbGFibGUgaWYKK1B5dGhvbiBpcyBsaW5rZWQgd2l0aCBPcGVuU1NMIDEuMC4xIG9yIGxhdGVyLiAgKENvbnRyaWJ1dGVkIGJ5IE1pY2hlbGUgT3Jyw7kgYW5kCitBbnRvaW5lIFBpdHJvdSBpbiA6aXNzdWU6YDE2NjkyYC4pCisKKy4uIF93aGF0c25ldzM0LXNzbGNvbnRleHQ6CisKK05ldyBmdW5jdGlvbiA6ZnVuYzpgfnNzbC5jcmVhdGVfZGVmYXVsdF9jb250ZXh0YCBwcm92aWRlcyBhIHN0YW5kYXJkIHdheSB0bworb2J0YWluIGFuIDpjbGFzczpgfnNzbC5TU0xDb250ZXh0YCB3aG9zZSBzZXR0aW5ncyBhcmUgaW50ZW5kZWQgdG8gYmUgYQorcmVhc29uYWJsZSBiYWxhbmNlIGJldHdlZW4gY29tcGF0aWJpbGl0eSBhbmQgc2VjdXJpdHkuICBUaGVzZSBzZXR0aW5ncyBhcmUKK21vcmUgc3RyaW5nZW50IHRoYW4gdGhlIGRlZmF1bHRzIHByb3ZpZGVkIGJ5IHRoZSA6Y2xhc3M6YH5zc2wuU1NMQ29udGV4dGAKK2NvbnN0cnVjdG9yLCBhbmQgbWF5IGJlIGFkanVzdGVkIGluIHRoZSBmdXR1cmUsIHdpdGhvdXQgcHJpb3IgZGVwcmVjYXRpb24sIGlmCitiZXN0LXByYWN0aWNlIHNlY3VyaXR5IHJlcXVpcmVtZW50cyBjaGFuZ2UuICBUaGUgbmV3IHJlY29tbWVuZGVkIGJlc3QKK3ByYWN0aWNlIGZvciB1c2luZyBzdGRsaWIgbGlicmFyaWVzIHRoYXQgc3VwcG9ydCBTU0wgaXMgdG8gdXNlCis6ZnVuYzpgfnNzbC5jcmVhdGVfZGVmYXVsdF9jb250ZXh0YCB0byBvYnRhaW4gYW4gOmNsYXNzOmB+c3NsLlNTTENvbnRleHRgCitvYmplY3QsIG1vZGlmeSBpdCBpZiBuZWVkZWQsIGFuZCB0aGVuIHBhc3MgaXQgYXMgdGhlICpjb250ZXh0KiBhcmd1bWVudAorb2YgdGhlIGFwcHJvcHJpYXRlIHN0ZGxpYiBBUEkuICAoQ29udHJpYnV0ZWQgYnkgQ2hyaXN0aWFuIEhlaW1lcworaW4gOmlzc3VlOmAxOTY4OWAuKQorCis6Y2xhc3M6YH5zc2wuU1NMQ29udGV4dGAgbWV0aG9kIDptZXRoOmB+c3NsLlNTTENvbnRleHQubG9hZF92ZXJpZnlfbG9jYXRpb25zYAorYWNjZXB0cyBhIG5ldyBvcHRpb25hbCBhcmd1bWVudCAqY2FkYXRhKiwgd2hpY2ggY2FuIGJlIHVzZWQgdG8gcHJvdmlkZSBQRU0gb3IKK0RFUiBlbmNvZGVkIGNlcnRpZmljYXRlcyBkaXJlY3RseSB2aWEgc3RyaW5ncyBvciBieXRlcywgcmVzcGVjdGl2ZWx5LgorKENvbnRyaWJ1dGVkIGJ5IENocmlzdGlhbiBIZWltZXMgaW4gOmlzc3VlOmAxODEzOGAuKQorCitOZXcgZnVuY3Rpb24gOmZ1bmM6YH5zc2wuZ2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzYCByZXR1cm5zCithIG5hbWVkIHR1cGxlIG9mIHRoZSBwYXRocyBhbmQgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRoYXQgdGhlCis6bWV0aDpgfnNzbC5TU0xDb250ZXh0LnNldF9kZWZhdWx0X3ZlcmlmeV9wYXRoc2AgbWV0aG9kIHVzZXMgdG8gc2V0CitPcGVuU1NMJ3MgZGVmYXVsdCBgYGNhZmlsZWBgIGFuZCBgYGNhcGF0aGBgLiAgVGhpcyBjYW4gYmUgYW4gYWlkIGluCitkZWJ1Z2dpbmcgZGVmYXVsdCB2ZXJpZmljYXRpb24gaXNzdWVzLiAgKENvbnRyaWJ1dGVkIGJ5IENocmlzdGlhbiBIZWltZXMKK2luIDppc3N1ZTpgMTgxNDNgLikKKworOmNsYXNzOmB+c3NsLlNTTENvbnRleHRgIGhhcyBhIG5ldyBtZXRob2QsCis6bWV0aDpgfnNzbC5TU0xDb250ZXh0LmNlcnRfc3RvcmVfc3RhdHNgLCB0aGF0IHJlcG9ydHMgdGhlIG51bWJlciBvZiBsb2FkZWQKK2BgWC41MDlgYCBjZXJ0cywgYGBYLjUwOSBDQWBgIGNlcnRzLCBhbmQgY2VydGlmaWNhdGUgcmV2b2NhdGlvbiBsaXN0cyAoYGBjcmxgYFwKK3MpLCBhcyB3ZWxsIGFzIGEgOm1ldGg6YH5zc2wuU1NMQ29udGV4dC5nZXRfY2FfY2VydHNgIG1ldGhvZCB0aGF0IHJldHVybnMgYQorbGlzdCBvZiB0aGUgbG9hZGVkIGBgQ0FgYCBjZXJ0aWZpY2F0ZXMuICAoQ29udHJpYnV0ZWQgYnkgQ2hyaXN0aWFuIEhlaW1lcyBpbgorOmlzc3VlOmAxODE0N2AuKQorCitJZiBPcGVuU1NMIDAuOS44IG9yIGxhdGVyIGlzIGF2YWlsYWJsZSwgOmNsYXNzOmB+c3NsLlNTTENvbnRleHRgIGhhcyBhbiBuZXcKK2F0dHJpYnV0ZSA6YXR0cjpgfnNzbC5TU0xDb250ZXh0LnZlcmlmeV9mbGFnc2AgdGhhdCBjYW4gYmUgdXNlZCB0byBjb250cm9sIHRoZQorY2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uIHByb2Nlc3MgYnkgc2V0dGluZyBpdCB0byBzb21lIGNvbWJpbmF0aW9uIG9mIHRoZSBuZXcKK2NvbnN0YW50cyA6ZGF0YTpgfnNzbC5WRVJJRllfREVGQVVMVGAsIDpkYXRhOmB+c3NsLlZFUklGWV9DUkxfQ0hFQ0tfTEVBRmAsCis6ZGF0YTpgfnNzbC5WRVJJRllfQ1JMX0NIRUNLX0NIQUlOYCwgb3IgOmRhdGE6YH5zc2wuVkVSSUZZX1g1MDlfU1RSSUNUYC4KK09wZW5TU0wgZG9lcyBub3QgZG8gYW55IENSTCB2ZXJpZmljYXRpb24gYnkgZGVmYXVsdC4gIChDb250cmlidXRlZCBieQorQ2hyaXN0aWVuIEhlaW1lcyBpbiA6aXNzdWU6YDg4MTNgLikKKworTmV3IDpjbGFzczpgfnNzbC5TU0xDb250ZXh0YCBtZXRob2QgOm1ldGg6YH5zc2wuU1NMQ29udGV4dC5sb2FkX2RlZmF1bHRfY2VydHNgCitsb2FkcyBhIHNldCBvZiBkZWZhdWx0ICJjZXJ0aWZpY2F0ZSBhdXRob3JpdHkiIChDQSkgY2VydGlmaWNhdGVzIGZyb20gZGVmYXVsdAorbG9jYXRpb25zLCB3aGljaCB2YXJ5IGFjY29yZGluZyB0byB0aGUgcGxhdGZvcm0uICBJdCBjYW4gYmUgdXNlZCB0byBsb2FkIGJvdGgKK1RMUyB3ZWIgc2VydmVyIGF1dGhlbnRpY2F0aW9uIGNlcnRpZmljYXRlcworKGBgcHVycG9zZT1gYDpkYXRhOmB+c3NsLlB1cnBvc2UuU0VSVkVSX0FVVEhgKSBmb3IgYSBjbGllbnQgdG8gdXNlIHRvIHZlcmlmeSBhCitzZXJ2ZXIsIGFuZCBjZXJ0aWZpY2F0ZXMgZm9yIGEgc2VydmVyIHRvIHVzZSBpbiB2ZXJpZnlpbmcgY2xpZW50IGNlcnRpZmljYXRlcworKGBgcHVycG9zZT1gYDpkYXRhOmB+c3NsLlB1cnBvc2UuQ0xJRU5UX0FVVEhgKS4gIChDb250cmlidXRlZCBieSBDaHJpc3RpYW4KK0hlaW1lcyBpbiA6aXNzdWU6YDE5MjkyYC4pCisKKy4uIF93aGF0c25ldzM0LXdpbi1jZXJ0LXN0b3JlOgorCitUd28gbmV3IHdpbmRvd3Mtb25seSBmdW5jdGlvbnMsIDpmdW5jOmB+c3NsLmVudW1fY2VydGlmaWNhdGVzYCBhbmQKKzpmdW5jOmB+c3NsLmVudW1fY3Jsc2AgcHJvdmlkZSB0aGUgYWJpbGl0eSB0byByZXRyaWV2ZSBjZXJ0aWZpY2F0ZXMsCitjZXJ0aWZpY2F0ZSBpbmZvcm1hdGlvbiwgYW5kIENSTHMgZnJvbSB0aGUgV2luZG93cyBjZXJ0IHN0b3JlLiAgKENvbnRyaWJ1dGVkCitieSBDaHJpc3RpYW4gSGVpbWVzIGluIDppc3N1ZTpgMTcxMzRgLikKKworLi4gX3doYXRzbmV3MzQtc25pOgorCitTdXBwb3J0IGZvciBzZXJ2ZXItc2lkZSBTTkkgKFNlcnZlciBOYW1lIEluZGljYXRpb24pIHVzaW5nIHRoZSBuZXcKKzptZXRoOmBzc2wuU1NMQ29udGV4dC5zZXRfc2VydmVybmFtZV9jYWxsYmFja2AgbWV0aG9kLgorKENvbnRyaWJ1dGVkIGJ5IERhbmllbCBCbGFjayBpbiA6aXNzdWU6YDgxMDlgLikKKworVGhlIGRpY3Rpb25hcnkgcmV0dXJuZWQgYnkgOm1ldGg6YC5TU0xTb2NrZXQuZ2V0cGVlcmNlcnRgIGNvbnRhaW5zIGFkZGl0aW9uYWwKK2BgWDUwOXYzYGAgZXh0ZW5zaW9uIGl0ZW1zOiBgYGNybERpc3RyaWJ1dGlvblBvaW50c2BgLCBgYGNhbElzc3VlcnNgYCwgYW5kCitgYE9DU1BgYCBVUklzLiAgKENvbnRyaWJ1dGVkIGJ5IENocmlzdGlhbiBIZWltZXMgaW4gOmlzc3VlOmAxODM3OWAuKQorCisKK3N0YXQKKy0tLS0KKworVGhlIDptb2Q6YHN0YXRgIG1vZHVsZSBpcyBub3cgYmFja2VkIGJ5IGEgQyBpbXBsZW1lbnRhdGlvbiBpbiA6bW9kOmBfc3RhdGAuIEEgQworaW1wbGVtZW50YXRpb24gaXMgcmVxdWlyZWQgYXMgbW9zdCBvZiB0aGUgdmFsdWVzIGFyZW4ndCBzdGFuZGFyZGl6ZWQgYW5kCithcmUgcGxhdGZvcm0tZGVwZW5kZW50LiAgKENvbnRyaWJ1dGVkIGJ5IENocmlzdGlhbiBIZWltZXMgaW4gOmlzc3VlOmAxMTAxNmAuKQorCitUaGUgbW9kdWxlIHN1cHBvcnRzIG5ldyA6bW9kOmB+c3RhdC5TVF9NT0RFYCBmbGFncywgOm1vZDpgfnN0YXQuU19JRkRPT1JgLAorOmF0dHI6YH5zdGF0LlNfSUZQT1JUYCwgYW5kIDphdHRyOmB+c3RhdC5TX0lGV0hUYC4gIChDb250cmlidXRlZCBieQorQ2hyaXN0aWFuIEhpZW1lcyBpbiA6aXNzdWU6YDExMDE2YC4pCisKKworc3RydWN0CistLS0tLS0KKworTmV3IGZ1bmN0aW9uIDptb2Q6YH5zdHJ1Y3QuaXRlcl91bnBhY2tgIGFuZCBhIG5ldworOm1ldGg6YHN0cnVjdC5TdHJ1Y3QuaXRlcl91bnBhY2tgIG1ldGhvZCBvbiBjb21waWxlZCBmb3JtYXRzIHByb3ZpZGUgc3RyZWFtZWQKK3VucGFja2luZyBvZiBhIGJ1ZmZlciBjb250YWluaW5nIHJlcGVhdGVkIGluc3RhbmNlcyBvZiBhIGdpdmVuIGZvcm1hdCBvZiBkYXRhLgorKENvbnRyaWJ1dGVkIGJ5IEFudG9pbmUgUGl0cm91IGluIDppc3N1ZTpgMTc4MDRgLikKKworCitzdWJwcm9jZXNzCistLS0tLS0tLS0tCisKKzpmdW5jOmB+c3VicHJvY2Vzcy5jaGVja19vdXRwdXRgIG5vdyBhY2NlcHRzIGFuICppbnB1dCogYXJndW1lbnQgdGhhdCBjYW4KK2JlIHVzZWQgdG8gcHJvdmlkZSB0aGUgY29udGVudHMgb2YgYGBzdGRpbmBgIGZvciB0aGUgY29tbWFuZCB0aGF0IGlzIHJ1bi4KKyhDb250cmlidXRlZCBieSBaYWNrIFdlaW5iZXJnIGluIDppc3N1ZTpgMTY2MjRgLikKKworOmZ1bmM6YH5zdWJwcm9jZXNzLmdldHN0YXR1c2AgYW5kIDpmdW5jOmB+c3VicHJvY2Vzcy5nZXRzdGF0dXNvdXRwdXRgIG5vdword29yayBvbiBXaW5kb3dzLiAgVGhpcyBjaGFuZ2Ugd2FzIGFjdHVhbGx5IGluYWR2ZXJ0ZW50bHkgbWFkZSBpbiAzLjMuNC4KKyhDb250cmlidXRlZCBieSBUaW0gR29sZGVuIGluIDppc3N1ZTpgMTAxOTdgLikKKworCitzdW5hdQorLS0tLS0KKworVGhlIDptZXRoOmB+c3VuYXUuZ2V0cGFyYW1zYCBtZXRob2Qgbm93IHJldHVybnMgYSBuYW1lZHR1cGxlIHJhdGhlciB0aGFuIGEKK3BsYWluIHR1cGxlLiAgKENvbnRyaWJ1dGVkIGJ5IENsYXVkaXUgUG9wYSBpbiA6aXNzdWU6YDE4OTAxYC4pCisKKzptZXRoOmBzdW5hdS5vcGVuYCBub3cgc3VwcG9ydHMgdGhlIGNvbnRleHQgbWFuYWdlbWVudCBwcm90b2NvbDogd2hlbiB1c2VkIGluIGEKKzprZXl3b3JkOmB3aXRoYCBibG9jaywgdGhlIGBgY2xvc2VgYCBtZXRob2Qgb2YgdGhlIHJldHVybmVkIG9iamVjdCB3aWxsIGJlCitjYWxsZWQgYXV0b21hdGljYWxseSBhdCB0aGUgZW5kIG9mIHRoZSBibG9jay4gIChDb250cmlidXRlZCBieSBTZXJoaXkgU3RvcmNoYWthCitpbiA6aXNzdWU6YDE4ODc4YC4pCisKKzptZXRoOmAuQVVfd3JpdGUuc2V0c2FtcHdpZHRoYCBub3cgc3VwcG9ydHMgMjQgYml0IHNhbXBsZXMsIHRodXMgYWRkaW5nCitzdXBwb3J0IGZvciB3cml0aW5nIDI0IHNhbXBsZSB1c2luZyB0aGUgbW9kdWxlLiAgKENvbnRyaWJ1dGVkIGJ5CitTZXJoaXkgU3RvcmNoYWthIGluIDppc3N1ZTpgMTkyNjFgLikKKworVGhlIDptZXRoOmB+c3VuYXUuQVVfd3JpdGUud3JpdGVmcmFtZXNyYXdgIGFuZAorOm1ldGg6YH5zdW5hdS5BVV93cml0ZS53cml0ZWZyYW1lc2AgbWV0aG9kcyBub3cgYWNjZXB0IGFueSA6dGVybTpgYnl0ZXMtbGlrZQorb2JqZWN0YC4gIChDb250cmlidXRlZCBieSBTZXJoaXkgU3RvcmNoYWthIGluIDppc3N1ZTpgODMxMWAuKQorCisKK3N5cworLS0tCisKK05ldyBmdW5jdGlvbiA6ZnVuYzpgc3lzLmdldGFsbG9jYXRlZGJsb2Nrc2AgcmV0dXJucyB0aGUgY3VycmVudCBudW1iZXIgb2YKK2Jsb2NrcyBhbGxvY2F0ZWQgYnkgdGhlIGludGVycHJldGVyLiAgKEluIENQeXRob24gd2l0aCB0aGUgZGVmYXVsdAorYGAtLXdpdGgtcHltYWxsb2NgYCBzZXR0aW5nLCB0aGlzIGlzIGFsbG9jYXRpb25zIG1hZGUgdGhyb3VnaCB0aGUKKzpjOmZ1bmM6YFB5T2JqZWN0X01hbGxvY2AgQVBJLikgIFRoaXMgY2FuIGJlIHVzZWZ1bCBmb3IgdHJhY2tpbmcgbWVtb3J5IGxlYWtzLAorZXNwZWNpYWxseSBpZiBhdXRvbWF0ZWQgdmlhIGEgdGVzdCBzdWl0ZS4gIChDb250cmlidXRlZCBieSBBbnRvaW5lIFBpdHJvdQoraW4gOmlzc3VlOmAxMzM5MGAuKQorCitXaGVuIHRoZSBQeXRob24gaW50ZXJwcmV0ZXIgc3RhcnRzIGluIDpyZWY6YGludGVyYWN0aXZlIG1vZGUKKzx0dXQtaW50ZXJhY3RpdmU+YCwgaXQgY2hlY2tzIGZvciBhbiA6ZGF0YTpgfnN5cy5fX2ludGVyYWN0aXZlaG9va19fYCBhdHRyaWJ1dGUKK29uIHRoZSA6bW9kOmBzeXNgIG1vZHVsZS4gIElmIHRoZSBhdHRyaWJ1dGUgZXhpc3RzLCBpdHMgdmFsdWUgaXMgY2FsbGVkIHdpdGggbm8KK2FyZ3VtZW50cyBqdXN0IGJlZm9yZSBpbnRlcmFjdGl2ZSBtb2RlIGlzIHN0YXJ0ZWQuICBUaGUgY2hlY2sgaXMgbWFkZSBhZnRlciB0aGUKKzplbnZ2YXI6YFBZVEhPTlNUQVJUVVBgIGZpbGUgaXMgcmVhZCwgc28gaXQgY2FuIGJlIHNldCB0aGVyZS4gIFRoZSA6bW9kOmBzaXRlYAorbW9kdWxlIDpyZWY6YHNldHMgaXQgPHJsY29tcGxldGVyLWNvbmZpZz5gIHRvIGEgZnVuY3Rpb24gdGhhdCBlbmFibGVzIHRhYgorY29tcGxldGlvbiBhbmQgaGlzdG9yeSBzYXZpbmcgKGluIDpmaWxlOmB+Ly5weXRob24taGlzdG9yeWApIGlmIHRoZSBwbGF0Zm9ybQorc3VwcG9ydHMgOm1vZDpgcmVhZGxpbmVgLiAgSWYgeW91IGRvIG5vdCB3YW50IHRoaXMgKG5ldykgYmVoYXZpb3IsIHlvdSBjYW4KK292ZXJyaWRlIGl0IGluIDplbnZ2YXI6YFBZVEhPTlNUQVJUVVBgLCA6bW9kOmBzaXRlY3VzdG9taXplYCwgb3IKKzptb2Q6YHVzZXJjdXN0b21pemVgIGJ5IGRlbGV0aW5nIHRoaXMgYXR0cmlidXRlIGZyb20gOm1vZDpgc3lzYCAob3Igc2V0dGluZyBpdAordG8gc29tZSBvdGhlciBjYWxsYWJsZSkuICAoQ29udHJpYnV0ZWQgYnkgw4lyaWMgQXJhdWpvIGFuZCBBbnRvaW5lIFBpdHJvdSBpbgorOmlzc3VlOmA1ODQ1YC4pCisKKwordGFyZmlsZQorLS0tLS0tLQorCitUaGUgOm1vZDpgdGFyZmlsZWAgbW9kdWxlIG5vdyBzdXBwb3J0cyBhIHNpbXBsZSA6cmVmOmB0YXJmaWxlLWNvbW1hbmRsaW5lYCB3aGVuCitjYWxsZWQgYXMgYSBzY3JpcHQgZGlyZWN0bHkgb3IgdmlhIGBgLW1gYC4gIFRoaXMgY2FuIGJlIHVzZWQgdG8gY3JlYXRlIGFuZAorZXh0cmFjdCB0YXJmaWxlIGFyY2hpdmVzLiAgKENvbnRyaWJ1dGVkIGJ5IEJlcmtlciBQZWtzYWcgaW4gOmlzc3VlOmAxMzQ3N2AuKQorCisKK3RleHR3cmFwCistLS0tLS0tLQorCitUaGUgOmNsYXNzOmB+dGV4dHdyYXAuVGV4dFdyYXBwZXJgIGNsYXNzIGhhcyB0d28gbmV3IGF0dHJpYnV0ZXMvY29uc3RydWN0b3IKK2FyZ3VtZW50czogOmF0dHI6YH50ZXh0d3JhcC5UZXh0V3JhcHBlci5tYXhfbGluZXNgLCB3aGljaCBsaW1pdHMgdGhlIG51bWJlciBvZgorbGluZXMgaW4gdGhlIG91dHB1dCwgYW5kIDphdHRyOmB+dGV4dHdyYXAuVGV4dFdyYXBwZXIucGxhY2Vob2xkZXJgLCB3aGljaCBpcyBhCitzdHJpbmcgdGhhdCB3aWxsIGFwcGVhciBhdCB0aGUgZW5kIG9mIHRoZSBvdXRwdXQgaWYgaXQgaGFzIGJlZW4gdHJ1bmNhdGVkCitiZWNhdXNlIG9mICptYXhfbGluZXMqLiAgQnVpbGRpbmcgb24gdGhlc2UgY2FwYWJpbGl0aWVzLCBhIG5ldyBjb252ZW5pZW5jZQorZnVuY3Rpb24gOmZ1bmM6YH50ZXh0d3JhcC5zaG9ydGVuYCBjb2xsYXBzZXMgYWxsIG9mIHRoZSB3aGl0ZXNwYWNlIGluIHRoZSBpbnB1dAordG8gc2luZ2xlIHNwYWNlcyBhbmQgcHJvZHVjZXMgYSBzaW5nbGUgbGluZSBvZiBhIGdpdmVuICp3aWR0aCogdGhhdCBlbmRzIHdpdGgKK3RoZSAqcGxhY2Vob2xkZXIqIChieSBkZWZhdWx0LCBgYFsuLi5dYGApLiAgKENvbnRyaWJ1dGVkIGJ5IEFudG9pbmUgUGl0cm91IGFuZAorU2VyaGl5IFN0b3JjaGFrYSBpbiA6aXNzdWU6YDE4NTg1YCBhbmQgOmlzc3VlOmAxODcyNWAuKQorCisKK3RocmVhZGluZworLS0tLS0tLS0tCisKK1RoZSA6Y2xhc3M6YH50aHJlYWRpbmcuVGhyZWFkYCBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBtYWluIHRocmVhZCBjYW4gYmUKK29idGFpbmVkIGZyb20gdGhlIG5ldyA6ZnVuYzpgfnRocmVhZGluZy5tYWluX3RocmVhZGAgZnVuY3Rpb24uICBJbiBub3JtYWwKK2NvbmRpdGlvbnMgdGhpcyB3aWxsIGJlIHRoZSB0aHJlYWQgZnJvbSB3aGljaCB0aGUgUHl0aG9uIGludGVycHJldGVyIHdhcworc3RhcnRlZC4gIChDb250cmlidXRlZCBieSBBbmRyZXcgU3ZldGxvdiBpbiA6aXNzdWU6YDE4ODgyYC4pCisKKwordHJhY2ViYWNrCistLS0tLS0tLS0KKworQSBuZXcgOmZ1bmM6YHRyYWNlYmFjay5jbGVhcl9mcmFtZXNgIGZ1bmN0aW9uIHRha2VzIGEgdHJhY2ViYWNrIG9iamVjdAorYW5kIGNsZWFycyB0aGUgbG9jYWwgdmFyaWFibGVzIGluIGFsbCBvZiB0aGUgZnJhbWVzIGl0IHJlZmVyZW5jZXMsCityZWR1Y2luZyB0aGUgYW1vdW50IG9mIG1lbW9yeSBjb25zdW1lZC4gIChDb250cmlidXRlZCBieSBBbmRyZXcgS3VjaGxpbmcgaW4KKzppc3N1ZTpgMTU2NTUyNWAuKQorCisKK3R5cGVzCistLS0tLQorCitBIG5ldyA6ZnVuYzpgfnR5cGVzLkR5bmFtaWNDbGFzc0F0dHJpYnV0ZWAgZGVzY3JpcHRvciBwcm92aWRlcyBhIHdheSB0byBkZWZpbmUKK2FuIGF0dHJpYnV0ZSB0aGF0IGFjdHMgbm9ybWFsbHkgd2hlbiBsb29rZWQgdXAgdGhyb3VnaCBhbiBpbnN0YW5jZSBvYmplY3QsIGJ1dAord2hpY2ggaXMgcm91dGVkIHRvIHRoZSAqY2xhc3MqIGBgX19nZXRhdHRyX19gYCB3aGVuIGxvb2tlZCB1cCB0aHJvdWdoIHRoZQorY2xhc3MuICBUaGlzIGFsbG93cyBvbmUgdG8gaGF2ZSBwcm9wZXJ0aWVzIGFjdGl2ZSBvbiBhIGNsYXNzLCBhbmQgaGF2ZSB2aXJ0dWFsCithdHRyaWJ1dGVzIG9uIHRoZSBjbGFzcyB3aXRoIHRoZSBzYW1lIG5hbWUgKHNlZSA6bW9kOmBFbnVtYCBmb3IgYW4gZXhhbXBsZSkuCisoQ29udHJpYnV0ZWQgYnkgRXRoYW4gRnVybWFuIGluIDppc3N1ZTpgMTkwMzBgLikKKworCit1cmxsaWIKKy0tLS0tLQorCis6bW9kOmB1cmxsaWIucmVxdWVzdGAgbm93IHN1cHBvcnRzIGBgZGF0YTpgYCBVUkxzIHZpYSB0aGUKKzpjbGFzczpgfnVybGxpYi5yZXF1ZXN0LkRhdGFIYW5kbGVyYCBjbGFzcy4gIChDb250cmlidXRlZCBieSBNYXRoaWFzIFBhbnplbmLDtmNrCitpbiA6aXNzdWU6YDE2NDIzYC4pCisKK1RoZSBodHRwIG1ldGhvZCB0aGF0IHdpbGwgYmUgdXNlZCBieSBhIDpjbGFzczpgfnVybGxpYi5yZXF1ZXN0LlJlcXVlc3RgIGNsYXNzCitjYW4gbm93IGJlIHNwZWNpZmllZCBieSBzZXR0aW5nIGEgOmNsYXNzOmB+dXJsbGliLnJlcXVlc3QuUmVxdWVzdC5tZXRob2RgCitjbGFzcyBhdHRyaWJ1dGUgb24gdGhlIHN1YmNsYXNzLiAgKENvbnRyaWJ1dGVkIGJ5IEphc29uIFIgQ29vbWJzIGluCis6aXNzdWU6YDE4OTc4YC4pCisKKzpjbGFzczpgfnVybGxpYi5yZXF1ZXN0LlJlcXVlc3RgIG9iamVjdHMgYXJlIG5vdyByZXVzYWJsZTogaWYgdGhlCis6YXR0cjpgfnVybGxpYi5yZXF1ZXN0LlJlcXVlc3QuZnVsbF91cmxgIG9yIDphdHRyOmB+dXJsbGliLnJlcXVlc3QuUmVxdWVzdC5kYXRhYAorYXR0cmlidXRlcyBhcmUgbW9kaWZpZWQsIGFsbCByZWxldmFudCBpbnRlcm5hbCBwcm9wZXJ0aWVzIGFyZSB1cGRhdGVkLiAgVGhpcworbWVhbnMsIGZvciBleGFtcGxlLCB0aGF0IGl0IGlzIG5vdyBwb3NzaWJsZSB0byB1c2UgdGhlIHNhbWUKKzpjbGFzczpgfnVybGxpYi5yZXF1ZXN0LlJlcXVlc3RgIG9iamVjdCBpbiBtb3JlIHRoYW4gb25lCis6bWV0aDpgLk9wZW5lckRpcmVjdG9yLm9wZW5gIGNhbGwgd2l0aCBkaWZmZXJlbnQgKmRhdGEqIGFyZ3VtZW50cywgb3IgdG8KK21vZGlmeSBhIDpjbGFzczpgfnVybGxpYi5yZXF1ZXN0LlJlcXVlc3RgXCAncyBgYHVybGBgIHJhdGhlciB0aGFuIHJlY29tcHV0aW5nIGl0Citmcm9tIHNjcmF0Y2guICBUaGVyZSBpcyBhbHNvIGEgbmV3Cis6bWV0aDpgfnVybGxpYi5yZXF1ZXN0LlJlcXVlc3QucmVtb3ZlX2hlYWRlcmAgbWV0aG9kIHRoYXQgY2FuIGJlIHVzZWQgdG8gcmVtb3ZlCitoZWFkZXJzIGZyb20gYSA6Y2xhc3M6YH51cmxsaWIucmVxdWVzdC5SZXF1ZXN0YC4gIChDb250cmlidXRlZCBieSBBbGV4ZXkKK0thY2hheWV2IGluIDppc3N1ZTpgMTY0NjRgLCBEYW5pZWwgV296bmlhayBpbiA6aXNzdWU6YDE3NDg1YCwgYW5kIERhbWllbiBCcmVjaHQKK2FuZCBTZW50aGlsIEt1bWFyYW4gaW4gOmlzc3VlOmAxNzI3MmAuKQorCis6Y2xhc3M6YH51cmxsaWIuZXJyb3IuSFRUUEVycm9yYCBvYmplY3RzIG5vdyBoYXZlIGEKKzphdHRyOmB+dXJsbGliLmVycm9yLkhUVFBFcnJvci5oZWFkZXJzYCBhdHRyaWJ1dGUgdGhhdCBwcm92aWRlcyBhY2Nlc3MgdG8gdGhlCitIVFRQIHJlc3BvbnNlIGhlYWRlcnMgYXNzb2NpYXRlZCB3aXRoIHRoZSBlcnJvci4gIChDb250cmlidXRlZCBieQorQmVya2VyIFBla3NhZyBpbiA6aXNzdWU6YDE1NzAxYC4pCisKKwordW5pdHRlc3QKKy0tLS0tLS0tCisKK1RoZSA6Y2xhc3M6YH51bml0dGVzdC5UZXN0Q2FzZWAgY2xhc3MgaGFzIGEgbmV3IG1ldGhvZCwKKzptZXRoOmB+dW5pdHRlc3QuVGVzdENhc2Uuc3ViVGVzdGAsIHRoYXQgcHJvZHVjZXMgYSBjb250ZXh0IG1hbmFnZXIgd2hvc2UKKzprZXl3b3JkOmB3aXRoYCBibG9jayBiZWNvbWVzIGEgInN1Yi10ZXN0Ii4gIFRoaXMgY29udGV4dCBtYW5hZ2VyIGFsbG93cyBhIHRlc3QKK21ldGhvZCB0byBkeW5hbWljYWxseSBnZW5lcmF0ZSBzdWJ0ZXN0cyAgYnksIHNheSwgY2FsbGluZyB0aGUgYGBzdWJUZXN0YGAKK2NvbnRleHQgbWFuYWdlciBpbnNpZGUgYSBsb29wLiAgQSBzaW5nbGUgdGVzdCBtZXRob2QgY2FuIHRoZXJlYnkgcHJvZHVjZSBhbgoraW5kZWZpbml0ZSBudW1iZXIgb2Ygc2VwYXJhdGVseS1pZGVudGlmaWVkIGFuZCBzZXBhcmF0ZWx5LWNvdW50ZWQgdGVzdHMsIGFsbCBvZgord2hpY2ggd2lsbCBydW4gZXZlbiBpZiBvbmUgb3IgbW9yZSBvZiB0aGVtIGZhaWwuICBGb3IgZXhhbXBsZTo6CisKKyAgICBjbGFzcyBOdW1iZXJzVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgIGRlZiB0ZXN0X2V2ZW4oc2VsZik6CisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSg2KToKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChpPWkpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGkgJSAyLCAwKQorCit3aWxsIHJlc3VsdCBpbiBzaXggc3VidGVzdHMsIGVhY2ggaWRlbnRpZmllZCBpbiB0aGUgdW5pdHRlc3QgdmVyYm9zZSBvdXRwdXQKK3dpdGggYSBsYWJlbCBjb25zaXN0aW5nIG9mIHRoZSB2YXJpYWJsZSBuYW1lIGBgaWBgIGFuZCBhIHBhcnRpY3VsYXIgdmFsdWUgZm9yCit0aGF0IHZhcmlhYmxlIChgYGk9MGBgLCBgYGk9MWBgLCBldGMpLiAgU2VlIDpyZWY6YHN1YnRlc3RzYCBmb3IgdGhlIGZ1bGwKK3ZlcnNpb24gb2YgdGhpcyBleGFtcGxlLiAgKENvbnRyaWJ1dGVkIGJ5IEFudG9pbmUgUGl0cm91IGluIDppc3N1ZTpgMTY5OTdgLikKKworOmZ1bmM6YHVuaXR0ZXN0Lm1haW5gIG5vdyBhY2NlcHRzIGFuIGl0ZXJhYmxlIG9mIHRlc3QgbmFtZXMgZm9yCisqZGVmYXVsdFRlc3QqLCB3aGVyZSBwcmV2aW91c2x5IGl0IG9ubHkgYWNjZXB0ZWQgYSBzaW5nbGUgdGVzdCBuYW1lIGFzIGEKK3N0cmluZy4gIChDb250cmlidXRlZCBieSBKeXJraSBQdWxsaWFpbmVuIGluIDppc3N1ZTpgMTUxMzJgLikKKworSWYgOmNsYXNzOmB+dW5pdHRlc3QuU2tpcFRlc3RgIGlzIHJhaXNlZCBkdXJpbmcgdGVzdCBkaXNjb3ZlcnkgKHRoYXQgaXMsIGF0IHRoZQorbW9kdWxlIGxldmVsIGluIHRoZSB0ZXN0IGZpbGUpLCBpdCBpcyBub3cgcmVwb3J0ZWQgYXMgYSBza2lwIGluc3RlYWQgb2YgYW4KK2Vycm9yLiAgKENvbnRyaWJ1dGVkIGJ5IFphY2ggV2FyZSBpbiA6aXNzdWU6YDE2OTM1YC4pCisKKzptZXRoOmB+dW5pdHRlc3QuVGVzdExvYWRlci5kaXNjb3ZlcmAgbm93IHNvcnRzIHRoZSBkaXNjb3ZlcmVkIGZpbGVzIHRvIHByb3ZpZGUKK2NvbnNpc3RlbnQgdGVzdCBvcmRlcmluZy4gIChDb250cmlidXRlZCBieSBNYXJ0aW4gTWVsaW4gYW5kIEplZmYgUmFtbmFuaSBpbgorOmlzc3VlOmAxNjcwOWAuKQorCis6Y2xhc3M6YH51bml0dGVzdC5UZXN0U3VpdGVgIG5vdyBkcm9wcyByZWZlcmVuY2VzIHRvIHRlc3RzIGFzIHNvb24gYXMgdGhlIHRlc3QKK2hhcyBiZWVuIHJ1biwgaWYgdGhlIHRlc3QgaXMgc3VjY2Vzc2Z1bC4gIE9uIFB5dGhvbiBpbnRlcnByZXRlcnMgdGhhdCBkbworZ2FyYmFnZSBjb2xsZWN0aW9uLCB0aGlzIGFsbG93cyB0aGUgdGVzdHMgdG8gYmUgZ2FyYmFnZSBjb2xsZWN0ZWQgaWYgbm90aGluZworZWxzZSBpcyBob2xkaW5nIGEgcmVmZXJlbmNlIHRvIHRoZSB0ZXN0LiAgSXQgaXMgcG9zc2libGUgdG8gb3ZlcnJpZGUgdGhpcworYmVoYXZpb3IgYnkgY3JlYXRpbmcgYSA6Y2xhc3M6YH51bml0dGVzdC5UZXN0U3VpdGVgIHN1YmNsYXNzIHRoYXQgZGVmaW5lcyBhCitjdXN0b20gYGBfcmVtb3ZlVGVzdEF0SW5kZXhgYCBtZXRob2QuICAoQ29udHJpYnV0ZWQgYnkgVG9tIFdhcmRpbGwsIE1hdHQKK01jQ2x1cmUsIGFuZCBBbmRyZXcgU3ZldGxvdiBpbiA6aXNzdWU6YDExNzk4YC4pCisKK0EgbmV3IHRlc3QgYXNzZXJ0aW9uIGNvbnRleHQtbWFuYWdlciwgOm1ldGg6YH51bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRMb2dzYCwKK3dpbGwgZW5zdXJlIHRoYXQgYSBnaXZlbiBibG9jayBvZiBjb2RlIGVtaXRzIGEgbG9nIG1lc3NhZ2UgdXNpbmcgdGhlCis6bW9kOmBsb2dnaW5nYCBtb2R1bGUuICBCeSBkZWZhdWx0IHRoZSBtZXNzYWdlIGNhbiBjb21lIGZyb20gYW55IGxvZ2dlciBhbmQKK2hhdmUgYSBwcmlvcml0eSBvZiBgYElORk9gYCBvciBoaWdoZXIsIGJ1dCBib3RoIHRoZSBsb2dnZXIgbmFtZSBhbmQgYW4KK2FsdGVybmF0aXZlIG1pbmltdW0gbG9nZ2luZyBsZXZlbCBtYXkgYmUgc3BlY2lmaWVkLiAgVGhlIG9iamVjdCByZXR1cm5lZCBieSB0aGUKK2NvbnRleHQgbWFuYWdlciBjYW4gYmUgcXVlcmllZCBmb3IgdGhlIDpjbGFzczpgfmxvZ2dpbmcuTG9nUmVjb3JkYFwgcyBhbmQvb3IKK2Zvcm1hdHRlZCBtZXNzYWdlcyB0aGF0IHdlcmUgbG9nZ2VkLiAgKENvbnRyaWJ1dGVkIGJ5IEFudG9pbmUgUGl0cm91IGluCis6aXNzdWU6YDE4OTM3YC4pCisKK1Rlc3QgZGlzY292ZXJ5IG5vdyB3b3JrcyB3aXRoIG5hbWVzcGFjZSBwYWNrYWdlcyAoQ29udHJpYnV0ZWQgYnkgQ2xhdWRpdSBQb3BhCitpbiA6aXNzdWU6YDE3NDU3YC4pCisKKzptb2Q6YHVuaXR0ZXN0Lm1vY2tgIG9iamVjdHMgbm93IGluc3BlY3QgdGhlaXIgc3BlY2lmaWNhdGlvbiBzaWduYXR1cmVzIHdoZW4KK21hdGNoaW5nIGNhbGxzLCB3aGljaCBtZWFucyBhbiBhcmd1bWVudCBjYW4gbm93IGJlIG1hdGNoZWQgYnkgZWl0aGVyIHBvc2l0aW9uCitvciBuYW1lLCBpbnN0ZWFkIG9mIG9ubHkgYnkgcG9zaXRpb24uICAoQ29udHJpYnV0ZWQgYnkgQW50b2luZSBQaXRyb3UgaW4KKzppc3N1ZTpgMTcwMTVgLikKKworOmZ1bmM6YH5tb2NrLm1vY2tfb3BlbmAgb2JqZWN0cyBub3cgaGF2ZSBgYHJlYWRsaW5lYGAgYW5kIGBgcmVhZGxpbmVzYGAKK21ldGhvZHMuICAoQ29udHJpYnV0ZWQgYnkgVG9zaGlvIEt1cmF0b21pIGluIDppc3N1ZTpgMTc0NjdgLikKKworCit2ZW52CistLS0tCisKKzptb2Q6YHZlbnZgIG5vdyBpbmNsdWRlcyBhY3RpdmF0aW9uIHNjcmlwdHMgZm9yIHRoZSBgYGNzaGBgIGFuZCBgYGZpc2hgYAorc2hlbGxzLiAgKENvbnRyaWJ1dGVkIGJ5IEFuZHJldyBTdmV0bG92IGluIDppc3N1ZTpgMTU0MTdgLikKKworOmNsYXNzOmB+dmVudi5FbnZCdWlsZGVyYCBhbmQgdGhlIDpmdW5jOmB+dmVudi5jcmVhdGVgIGNvbnZlbmllbmNlIGZ1bmN0aW9uCit0YWtlIGEgbmV3IGtleXdvcmQgYXJndW1lbnQgKndpdGhfcGlwKiwgd2hpY2ggZGVmYXVsdHMgdG8gYGBGYWxzZWBgLCB0aGF0Citjb250cm9scyB3aGV0aGVyIG9yIG5vdCA6Y2xhc3M6YH52ZW52LkVudkJ1aWxkZXJgIGVuc3VyZXMgdGhhdCBgYHBpcGBgIGlzCitpbnN0YWxsZWQgaW4gdGhlIHZpcnR1YWwgZW52aXJvbm1lbnQuICAoQ29udHJpYnV0ZWQgYnkgTmljayBDb2dobGFuIGluCis6aXNzdWU6YDE5NTUyYCBhcyBwYXJ0IG9mIHRoZSA6cGVwOmA0NTNgIGltcGxlbWVudGF0aW9uLikKKworCit3YXZlCistLS0tCisKK1RoZSA6bWV0aDpgfndhdmUuZ2V0cGFyYW1zYCBtZXRob2Qgbm93IHJldHVybnMgYSBuYW1lZHR1cGxlIHJhdGhlciB0aGFuIGEKK3BsYWluIHR1cGxlLiAgKENvbnRyaWJ1dGVkIGJ5IENsYXVkaXUgUG9wYSBpbiA6aXNzdWU6YDE3NDg3YC4pCisKKzptZXRoOmB3YXZlLm9wZW5gIG5vdyBzdXBwb3J0cyB0aGUgY29udGV4dCBtYW5hZ2VtZW50IHByb3RvY29sLiAgKENvbnRyaWJ1dGVkCitieSBDbGF1ZGl1IFBvcGEgaW4gOmlzc3VlOmAxNzYxNmAuKQorCis6bW9kOmB3YXZlYCBjYW4gbm93IDpyZWY6YHdyaXRlIG91dHB1dCB0byB1bnNlZWthYmxlIGZpbGVzCis8d2F2ZS13cml0ZS1vYmplY3RzPmAuICAoQ29udHJpYnV0ZWQgYnkgRGF2aWQgSm9uZXMsIEd1aWxoZXJtZSBQb2xvLCBhbmQgU2VyaGl5CitTdG9yY2hha2EgaW4gOmlzc3VlOmA1MjAyYC4pCisKK1RoZSA6bWV0aDpgfndhdmUuV2F2ZV93cml0ZS53cml0ZWZyYW1lc3Jhd2AgYW5kCis6bWV0aDpgfndhdmUuV2F2ZV93cml0ZS53cml0ZWZyYW1lc2AgbWV0aG9kcyBub3cgYWNjZXB0IGFueSA6dGVybTpgYnl0ZXMtbGlrZQorb2JqZWN0YC4gIChDb250cmlidXRlZCBieSBTZXJoaXkgU3RvcmNoYWthIGluIDppc3N1ZTpgODMxMWAuKQorCisKK3dlYWtyZWYKKy0tLS0tLS0KKworTmV3IDpjbGFzczpgfndlYWtyZWYuV2Vha01ldGhvZGAgY2xhc3Mgc2ltdWxhdGVzIHdlYWsgcmVmZXJlbmNlcyB0byBib3VuZAorbWV0aG9kcy4gIChDb250cmlidXRlZCBieSBBbnRvaW5lIFBpdHJvdSBpbiA6aXNzdWU6YDE0NjMxYC4pCisKK05ldyA6Y2xhc3M6YH53ZWFrcmVmLmZpbmFsaXplYCBjbGFzcyBtYWtlcyBpdCBwb3NzaWJsZSB0byByZWdpc3RlciBhIGNhbGxiYWNrCit0byBiZSBpbnZva2VkIHdoZW4gYW4gb2JqZWN0IGlzIGdhcmJhZ2UgY29sbGVjdGVkLCB3aXRob3V0IG5lZWRpbmcgdG8KK2NhcmVmdWxseSBtYW5hZ2UgdGhlIGxpZmVjeWNsZSBvZiB0aGUgd2VhayByZWZlcmVuY2UgaXRzZWxmLiAgKENvbnRyaWJ1dGVkIGJ5CitSaWNoYXJkIE91ZGtlcmsgaW4gOmlzc3VlOmAxNTUyOGAuKQorCitUaGUgY2FsbGJhY2ssIGlmIGFueSwgYXNzb2NpYXRlZCB3aXRoIGEgOmNsYXNzOmB+d2Vha3JlZi5yZWZgIGlzIG5vdworZXhwb3NlZCB2aWEgdGhlIDphdHRyOmB+d2Vha3JlZi5yZWYuX19jYWxsYmFja19fYCBhdHRyaWJ1dGUuICAoQ29udHJpYnV0ZWQKK2J5IE1hcmsgRGlja2luc29uIGluIDppc3N1ZTpgMTc2NDNgLikKKworCit4bWwuZXRyZWUKKy0tLS0tLS0tLQorCitBIG5ldyBwYXJzZXIsIDpjbGFzczpgfnhtbC5ldHJlZS5FbGVtZW50VHJlZS5YTUxQdWxsUGFyc2VyYCwgYWxsb3dzIGEKK25vbi1ibG9ja2luZyBhcHBsaWNhdGlvbnMgdG8gcGFyc2UgWE1MIGRvY3VtZW50cy4gIEFuIGV4YW1wbGUgY2FuIGJlCitzZWVuIGF0IDpyZWY6YGVsZW1lbnR0cmVlLXB1bGwtcGFyc2luZ2AuICAoQ29udHJpYnV0ZWQgYnkgQW50b2luZQorUGl0cm91IGluIDppc3N1ZTpgMTc3NDFgLikKKworVGhlIDptb2Q6YHhtbC5ldHJlZS5FbGVtZW50VHJlZWAgOmZ1bmM6YH54bWwuZXRyZWUuRWxlbWVudFRyZWUudG9zdHJpbmdgIGFuZAorOmZ1bmM6YH54bWwuZXRyZWUuRWxlbWVudFRyZWUudG9zdHJpbmdsaXN0YCBmdW5jdGlvbnMsIGFuZCB0aGUKKzpjbGFzczpgfnhtbC5ldHJlZS5FbGVtZW50VHJlZS5FbGVtZW50VHJlZWAKKzptZXRoOmB+eG1sLmV0cmVlLkVsZW1lbnRUcmVlLkVsZW1lbnRUcmVlLndyaXRlYCBtZXRob2QsIG5vdyBoYXZlIGEKKypzaG9ydF9lbXB0eV9lbGVtZW50cyogOnJlZjpga2V5d29yZC1vbmx5IHBhcmFtZXRlciA8a2V5d29yZC1vbmx5X3BhcmFtZXRlcj5gCitwcm92aWRpbmcgY29udHJvbCBvdmVyIHdoZXRoZXIgZWxlbWVudHMgd2l0aCBubyBjb250ZW50IGFyZSB3cml0dGVuIGluCithYmJyZXZpYXRlZCAoYGA8dGFnIC8+YGApIG9yIGV4cGFuZGVkIChgYDx0YWc+PC90YWc+YGApIGZvcm0uICAoQ29udHJpYnV0ZWQgYnkKK0FyaWVsIFBvbGlhayBhbmQgU2VyaGl5IFN0b3JjaGFrYSBpbiA6aXNzdWU6YDE0Mzc3YC4pCisKKworemlwZmlsZQorLS0tLS0tLQorCitUaGUgOm1ldGg6YH56aXBmaWxlLlB5WmlwRmlsZS53cml0ZXB5YCBtZXRob2Qgb2YgdGhlCis6Y2xhc3M6YH56aXBmaWxlLlB5WmlwRmlsZWAgY2xhc3MgaGFzIGEgbmV3ICpmaWx0ZXJmdW5jKiBvcHRpb24gdGhhdCBjYW4gYmUKK3VzZWQgdG8gY29udHJvbCB3aGljaCBkaXJlY3RvcmllcyBhbmQgZmlsZXMgYXJlIGFkZGVkIHRvIHRoZSBhcmNoaXZlLiAgRm9yCitleGFtcGxlLCB0aGlzIGNvdWxkIGJlIHVzZWQgdG8gZXhjbHVkZSB0ZXN0IGZpbGVzIGZyb20gdGhlIGFyY2hpdmUuCisoQ29udHJpYnV0ZWQgYnkgQ2hyaXN0aWFuIFRpc21lciBpbiA6aXNzdWU6YDE5Mjc0YC4pCisKK1RoZSAqYWxsb3daaXA2NCogcGFyYW1ldGVyIHRvIDpjbGFzczpgfnppcGZpbGUuWmlwRmlsZWAgYW5kCis6Y2xhc3M6YH56aXBmaWxlLlB5WmlwZmlsZWAgaXMgbm93IGBgVHJ1ZWBgIGJ5IGRlZmF1bHQuICAoQ29udHJpYnV0ZWQgYnkKK1dpbGxpYW0gTWFsbGFyZCBpbiA6aXNzdWU6YDE3MjAxYC4pCisKKworCitDUHl0aG9uIEltcGxlbWVudGF0aW9uIENoYW5nZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisKKy4uIF93aGF0c25ldy1wZXAtNDQ1OgorCitQRVAgNDQ1OiBDdXN0b21pemF0aW9uIG9mIENQeXRob24gTWVtb3J5IEFsbG9jYXRvcnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCis6cGVwOmA0NDVgIGFkZHMgbmV3IEMgbGV2ZWwgaW50ZXJmYWNlcyB0byBjdXN0b21pemUgbWVtb3J5IGFsbG9jYXRpb24gaW4KK3RoZSBDUHl0aG9uIGludGVycHJldGVyLgorCisuLiBzZWVhbHNvOjoKKworICAgOnBlcDpgNDQ1YCAtLSBBZGQgbmV3IEFQSXMgdG8gY3VzdG9taXplIFB5dGhvbiBtZW1vcnkgYWxsb2NhdG9ycworICAgICAgUEVQIHdyaXR0ZW4gYW5kIGltcGxlbWVudGVkIGJ5IFZpY3RvciBTdGlubmVyLgorCisKKy4uIF93aGF0c25ldy1wZXAtNDQyOgorCitQRVAgNDQyOiBTYWZlIE9iamVjdCBGaW5hbGl6YXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCis6cGVwOmA0NDJgIHJlbW92ZXMgdGhlIGN1cnJlbnQgbGltaXRhdGlvbnMgYW5kIHF1aXJrcyBvZiBvYmplY3QgZmluYWxpemF0aW9uCitpbiBDUHl0aG9uLiBXaXRoIGl0LCBvYmplY3RzIHdpdGggOm1ldGg6YF9fZGVsX19gIG1ldGhvZHMsIGFzIHdlbGwgYXMKK2dlbmVyYXRvcnMgd2l0aCA6a2V5d29yZDpgZmluYWxseWAgY2xhdXNlcywgY2FuIGJlIGZpbmFsaXplZCB3aGVuIHRoZXkgYXJlCitwYXJ0IG9mIGEgcmVmZXJlbmNlIGN5Y2xlLgorCitBcyBwYXJ0IG9mIHRoaXMgY2hhbmdlLCBtb2R1bGUgZ2xvYmFscyBhcmUgbm8gbG9uZ2VyIGZvcmNpYmx5IHNldCB0bworOmNvbnN0OmBOb25lYCBkdXJpbmcgaW50ZXJwcmV0ZXIgc2h1dGRvd24gaW4gbW9zdCBjYXNlcywgaW5zdGVhZCByZWx5aW5nCitvbiB0aGUgbm9ybWFsIG9wZXJhdGlvbiBvZiB0aGUgY3ljbGljIGdhcmJhZ2UgY29sbGVjdG9yLiAgVGhpcyBhdm9pZHMgYQord2hvbGUgY2xhc3Mgb2YgaW50ZXJwcmV0ZXItc2h1dGRvd24tdGltZSBlcnJvcnMsIHVzdWFsbHkgaW52b2x2aW5nCitgYF9fZGVsX19gYCBtZXRob2RzLCB0aGF0IGhhdmUgcGxhZ3VlZCBQeXRob24gc2luY2UgdGhlIGN5Y2xpYyBHQword2FzIGZpcnN0IGludHJvZHVjZWQuCisKKy4uIHNlZWFsc286OgorCisgICA6cGVwOmA0NDJgIC0tIFNhZmUgb2JqZWN0IGZpbmFsaXphdGlvbgorICAgICAgUEVQIHdyaXR0ZW4gYW5kIGltcGxlbWVudGVkIGJ5IEFudG9pbmUgUGl0cm91LgorCisKKy4uIF93aGF0c25ldy1wZXAtNDU2OgorCitQRVAgNDU2OiBTZWN1cmUgYW5kIEludGVyY2hhbmdlYWJsZSBIYXNoIEFsZ29yaXRobQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworOnBlcDpgNDU2YCBmb2xsb3dzIHVwIG9uIGVhcmxpZXIgc2VjdXJpdHkgZml4IHdvcmsgZG9uZSBvbiBQeXRob24ncyBoYXNoCithbGdvcml0aG0gdG8gYWRkcmVzcyBjZXJ0YWluIERPUyBhdHRhY2tzIHRvIHdoaWNoIHB1YmxpYyBmYWNpbmcgQVBJcyBiYWNrZWQgYnkKK2RpY3Rpb25hcnkgbG9va3VwcyBtYXkgYmUgc3ViamVjdC4gIChTZWUgOmlzc3VlOmAxNDYyMWAgZm9yIHRoZSBzdGFydCBvZiB0aGUKK2N1cnJlbnQgcm91bmQgb2YgaW1wcm92ZW1lbnRzLikgIFRoZSBQRVAgdW5pZmllcyBDUHl0aG9uJ3MgaGFzaCBjb2RlIHRvIG1ha2UgaXQKK2Vhc2llciBmb3IgYSBwYWNrYWdlciB0byBzdWJzdGl0dXRlIGEgZGlmZmVyZW50IGhhc2ggYWxnb3JpdGhtLCBhbmQgc3dpdGNoZXMKK1B5dGhvbidzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gdG8gYSBTaXBIYXNoIGltcGxlbWVudGF0aW9uIG9uIHBsYXRmb3JtcyB0aGF0CitoYXZlIGEgNjQgYml0IGRhdGEgdHlwZS4gIEFueSBwZXJmb3JtYW5jZSBkaWZmZXJlbmNlcyBpbiBjb21wYXJpc29uIHdpdGggdGhlCitvbGRlciBGTlYgYWxnb3JpdGhtIGFyZSB0cml2aWFsLgorCitUaGUgUEVQIGFkZHMgYWRkaXRpb25hbCBmaWVsZHMgdG8gdGhlIDphdHRyOmBzeXMuaGFzaF9pbmZvYCBzdHJ1Y3Qgc2VxdWVuY2UgdG8KK2Rlc2NyaWJlIHRoZSBoYXNoIGFsZ29yaXRobSBpbiB1c2UgYnkgdGhlIGN1cnJlbnRseSBleGVjdXRpbmcgYmluYXJ5LiAgT3RoZXJ3aXNlLAordGhlIFBFUCBkb2VzIG5vdCBhbHRlciBhbnkgZXhpc3RpbmcgQ1B5dGhvbiBBUElzLgorCisKKy4uIF93aGF0c25ldy1wZXAtNDM2OgorCitQRVAgNDM2OiBBcmd1bWVudCBDbGluaWMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisiQXJndW1lbnQgQ2xpbmljIiAoOnBlcDpgNDM2YCkgaXMgbm93IHBhcnQgb2YgdGhlIENQeXRob24gYnVpbGQgcHJvY2VzcworYW5kIGNhbiBiZSB1c2VkIHRvIHNpbXBsaWZ5IHRoZSBwcm9jZXNzIG9mIGRlZmluaW5nIGFuZCBtYWludGFpbmluZworYWNjdXJhdGUgc2lnbmF0dXJlcyBmb3IgYnVpbHRpbnMgYW5kIHN0YW5kYXJkIGxpYnJhcnkgZXh0ZW5zaW9uIG1vZHVsZXMKK2ltcGxlbWVudGVkIGluIEMuCisKK1NvbWUgc3RhbmRhcmQgbGlicmFyeSBleHRlbnNpb24gbW9kdWxlcyBoYXZlIGJlZW4gY29udmVydGVkIHRvIHVzZSBBcmd1bWVudAorQ2xpbmljIGluIFB5dGhvbiAzLjQsIGFuZCA6bW9kOmBweWRvY2AgYW5kIDptb2Q6YGluc3BlY3RgIGhhdmUgYmVlbiB1cGRhdGVkCithY2NvcmRpbmdseS4KKworSXQgaXMgZXhwZWN0ZWQgdGhhdCBzaWduYXR1cmUgbWV0YWRhdGEgZm9yIHByb2dyYW1tYXRpYyBpbnRyb3NwZWN0aW9uIHdpbGwKK2JlIGFkZGVkIHRvIGFkZGl0aW9uYWwgY2FsbGFibGVzIGltcGxlbWVudGVkIGluIEMgYXMgcGFydCBvZiBQeXRob24gMy40CittYWludGVuYW5jZSByZWxlYXNlcy4KKworLi4gbm90ZTo6CisgICBUaGUgQXJndW1lbnQgQ2xpbmljIFBFUCBpcyBub3QgZnVsbHkgdXAgdG8gZGF0ZSB3aXRoIHRoZSBzdGF0ZSBvZiB0aGUKKyAgIGltcGxlbWVudGF0aW9uLiBUaGlzIGhhcyBiZWVuIGRlZW1lZCBhY2NlcHRhYmxlIGJ5IHRoZSByZWxlYXNlIG1hbmFnZXIKKyAgIGFuZCBjb3JlIGRldmVsb3BtZW50IHRlYW0gaW4gdGhpcyBjYXNlLCBhcyBBcmd1bWVudCBDbGluaWMgd2lsbCBub3QKKyAgIGJlIG1hZGUgYXZhaWxhYmxlIGFzIGEgcHVibGljIEFQSSBmb3IgdGhpcmQgcGFydHkgdXNlIGluIFB5dGhvbiAzLjQuCisKKy4uIHNlZWFsc286OgorCisgICA6cGVwOmA0MzZgIC0tIFRoZSBBcmd1bWVudCBDbGluaWMgRFNMCisgICAgICAgUEVQIHdyaXR0ZW4gYW5kIGltcGxlbWVudGVkIGJ5IExhcnJ5IEhhc3RpbmdzLgorCisKK090aGVyIEJ1aWxkIGFuZCBDIEFQSSBDaGFuZ2VzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqIFRoZSBuZXcgOmM6ZnVuYzpgUHlUeXBlX0dldFNsb3RgIGZ1bmN0aW9uIGhhcyBiZWVuIGFkZGVkIHRvIHRoZSBzdGFibGUgQUJJLAorICBhbGxvd2luZyByZXRyaWV2YWwgb2YgZnVuY3Rpb24gcG9pbnRlcnMgZnJvbSBuYW1lZCB0eXBlIHNsb3RzIHdoZW4gdXNpbmcKKyAgdGhlIGxpbWl0ZWQgQVBJLiAgKENvbnRyaWJ1dGVkIGJ5IE1hcnRpbiB2b24gTMO2d2lzIGluIDppc3N1ZTpgMTcxNjJgLikKKworKiBUaGUgbmV3IDpjOmZ1bmM6YFB5X1NldFN0YW5kYXJkU3RyZWFtRW5jb2RpbmdgIHByZS1pbml0aWFsaXphdGlvbiBBUEkKKyAgYWxsb3dzIGFwcGxpY2F0aW9ucyBlbWJlZGRpbmcgdGhlIENQeXRob24gaW50ZXJwcmV0ZXIgdG8gcmVsaWFibHkgZm9yY2UKKyAgYSBwYXJ0aWN1bGFyIGVuY29kaW5nIGFuZCBlcnJvciBoYW5kbGVyIGZvciB0aGUgc3RhbmRhcmQgc3RyZWFtcy4KKyAgKENvbnRyaWJ1dGVkIGJ5IEJhc3RpZW4gTW9udGFnbmUgYW5kIE5pY2sgQ29naGxhbiBpbiA6aXNzdWU6YDE2MTI5YC4pCisKKyogTW9zdCBQeXRob24gQyBBUElzIHRoYXQgZG9uJ3QgbXV0YXRlIHN0cmluZyBhcmd1bWVudHMgYXJlIG5vdyBjb3JyZWN0bHkKKyAgbWFya2VkIGFzIGFjY2VwdGluZyBgYGNvbnN0IGNoYXIgKmBgIHJhdGhlciB0aGFuIGBgY2hhciAqYGAuICAoQ29udHJpYnV0ZWQKKyAgYnkgU2VyaGl5IFN0b3JjaGFrYSBpbiA6aXNzdWU6YDE3NzI2NzNgLikKKworKiBBIG5ldyBzaGVsbCB2ZXJzaW9uIG9mIGBgcHl0aG9uLWNvbmZpZ2BgIGNhbiBiZSB1c2VkIGV2ZW4gd2hlbiBhIHB5dGhvbgorICBpbnRlcnByZXRlciBpcyBub3QgYXZhaWxhYmxlIChmb3IgZXhhbXBsZSwgaW4gY3Jvc3MgY29tcGlsYXRpb24gc2NlbmFyaW9zKS4KKworKiA6YzpmdW5jOmBQeVVuaWNvZGVfRnJvbUZvcm1hdGAgbm93IHN1cHBvcnRzIHdpZHRoIGFuZCBwcmVjaXNpb24KKyAgc3BlY2lmaWNhdGlvbnMgZm9yIGBgJXNgYCwgYGAlQWBgLCBgYCVVYGAsIGBgJVZgYCwgYGAlU2BgLCBhbmQgYGAlUmBgLgorICAoQ29udHJpYnV0ZWQgYnkgWXNqIFJheSBhbmQgVmljdG9yIFN0aW5uZXIgaW4gOmlzc3VlOmA3MzMwYC4pCisKKyogTmV3IGZ1bmN0aW9uIDpjOmZ1bmM6YFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUyYCBzdXBwbGVtZW50cyB0aGUKKyAgZXhpc3RpbmcgOmM6ZnVuYzpgUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZWAgZnVuY3Rpb24uICBUaGUgZGlmZmVyZW5jZQorICBpcyB0aGF0IGl0IHJldHVybnMgYGAwYGAgb24gc3VjY2VzcyBhbmQgYGAtMWBgIG9uIGZhaWx1cmUuCisKKyogVGhlIENQeXRob24gc291cmNlIGNhbiBub3cgYmUgY29tcGlsZWQgdXNpbmcgdGhlIGFkZHJlc3Mgc2FuaXR5IGNoZWNraW5nCisgIGZlYXR1cmVzIG9mIHJlY2VudCB2ZXJzaW9ucyBvZiBHQ0MgYW5kIGNsYW5nOiAgdGhlIGZhbHNlIGFsYXJtcyBpbiB0aGUgc21hbGwKKyAgb2JqZWN0IGFsbG9jYXRvciBoYXZlIGJlZW4gc2lsZW5jZWQuICAoQ29udHJpYnV0ZWQgYnkgRGhpcnUgS2hvbGlhIGluCisgIDppc3N1ZTpgMTg1OTZgLikKKworKiBUaGUgV2luZG93cyBidWlsZCBub3cgdXNlcyBgQWRkcmVzcyBTcGFjZSBMYXlvdXQgUmFuZG9taXphdGlvbgorICA8aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9BU0xSPmBfIGFuZCBgRGF0YSBFeGVjdXRpb24gUHJldmVudGlvbgorICA8aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9EYXRhX0V4ZWN1dGlvbl9QcmV2ZW50aW9uPmBfLiAgKENvbnRyaWJ1dGVkIGJ5CisgIENocmlzdGlhbiBIZWltZXMgaW4gOmlzc3VlOmAxNjYzMmAuKQorCisqIE5ldyBmdW5jdGlvbiA6YzpmdW5jOmBQeU9iamVjdF9MZW5ndGhIaW50YCBpcyB0aGUgQyBBUEkgZXF1aXZhbGVudAorICBvZiA6ZnVuYzpgb3BlcmF0b3IubGVuZ3RoX2hpbnRgLiAgKENvbnRyaWJ1dGVkIGJ5IEFybWluIFJvbmFjaGVyIGluCisgIDppc3N1ZTpgMTYxNDhgLikKKworCisuLiBfb3RoZXItaW1wcm92ZW1lbnRzLTMuNDoKKworT3RoZXIgSW1wcm92ZW1lbnRzCistLS0tLS0tLS0tLS0tLS0tLS0KKworLi4gX3doYXRzbmV3LWlzb2xhdGVkLW1vZGU6CisKKyogVGhlIDpyZWY6YHB5dGhvbiA8dXNpbmctb24tY21kbGluZT5gIGNvbW1hbmQgaGFzIGEgbmV3IDpyZWY6YG9wdGlvbgorICA8dXNpbmctb24tbWlzYy1vcHRpb25zPmAsIGBgLUlgYCwgd2hpY2ggY2F1c2VzIGl0IHRvIHJ1biBpbiAiaXNvbGF0ZWQgbW9kZSIsCisgIHdoaWNoIG1lYW5zIHRoYXQgOmRhdGE6YHN5cy5wYXRoYCBjb250YWlucyBuZWl0aGVyIHRoZSBzY3JpcHQncyBkaXJlY3Rvcnkgbm9yCisgIHRoZSB1c2VyJ3MgYGBzaXRlLXBhY2thZ2VzYGAgZGlyZWN0b3J5LCBhbmQgYWxsIDplbnZ2YXI6YFBZVEhPTipgIGVudmlyb25tZW50CisgIHZhcmlhYmxlcyBhcmUgaWdub3JlZCAoaXQgaW1wbGllcyBib3RoIGBgLXNgYCBhbmQgYGAtRWBgKS4gIE90aGVyCisgIHJlc3RyaWN0aW9ucyBtYXkgYWxzbyBiZSBhcHBsaWVkIGluIHRoZSBmdXR1cmUsIHdpdGggdGhlIGdvYWwgYmVpbmcgdG8KKyAgaXNvbGF0ZSB0aGUgZXhlY3V0aW9uIG9mIGEgc2NyaXB0IGZyb20gdGhlIHVzZXIncyBlbnZpcm9ubWVudC4gIFRoaXMgaXMKKyAgYXBwcm9wcmlhdGUsIGZvciBleGFtcGxlLCB3aGVuIFB5dGhvbiBpcyB1c2VkIHRvIHJ1biBhIHN5c3RlbSBzY3JpcHQuICBPbgorICBtb3N0IFBPU0lYIHN5c3RlbXMgaXQgY2FuIGFuZCBzaG91bGQgYmUgdXNlZCBpbiB0aGUgYGAjIWBgIGxpbmUgb2Ygc3lzdGVtCisgIHNjcmlwdHMuICAoQ29udHJpYnV0ZWQgYnkgQ2hyaXN0aWFuIEhlaW1lcyBpbiA6aXNzdWU6YDE2NDk5YC4pCisKKyogVGFiLWNvbXBsZXRpb24gaXMgbm93IGVuYWJsZWQgYnkgZGVmYXVsdCBpbiB0aGUgaW50ZXJhY3RpdmUgaW50ZXJwcmV0ZXIKKyAgb24gc3lzdGVtcyB0aGF0IHN1cHBvcnQgOm1vZDpgcmVhZGxpbmVgLiAgSGlzdG9yeSBpcyBhbHNvIGVuYWJsZWQgYnkgZGVmYXVsdCwKKyAgYW5kIGlzIHdyaXR0ZW4gdG8gKGFuZCByZWFkIGZyb20pIHRoZSBmaWxlIDpmaWxlOmB+Ly5weXRob24taGlzdG9yeWAuCisgIChDb250cmlidXRlZCBieSBBbnRvaW5lIFBpdHJvdSBhbmQgw4lyaWMgQXJhdWpvIGluIDppc3N1ZTpgNTg0NWAuKQorCisqIEludm9raW5nIHRoZSBQeXRob24gaW50ZXJwcmV0ZXIgd2l0aCBgYC0tdmVyc2lvbmBgIG5vdyBvdXRwdXRzIHRoZSB2ZXJzaW9uIHRvCisgIHN0YW5kYXJkIG91dHB1dCBpbnN0ZWFkIG9mIHN0YW5kYXJkIGVycm9yICg6aXNzdWU6YDE4MzM4YCkuIFNpbWlsYXIgY2hhbmdlcworICB3ZXJlIG1hZGUgdG8gOm1vZDpgYXJncGFyc2VgICg6aXNzdWU6YDE4OTIwYCkgYW5kIG90aGVyIG1vZHVsZXMgdGhhdCBoYXZlCisgIHNjcmlwdC1saWtlIGludm9jYXRpb24gY2FwYWJpbGl0aWVzICg6aXNzdWU6YDE4OTIyYCkuCisKKyogVGhlIENQeXRob24gV2luZG93cyBpbnN0YWxsZXIgbm93IGFkZHMgYGAucHlgYCB0byB0aGUgOmVudnZhcjpgUEFUSEVYVGAKKyAgdmFyaWFibGUgd2hlbiBleHRlbnNpb25zIGFyZSByZWdpc3RlcmVkLCBhbGxvd2luZyB1c2VycyB0byBydW4gYSBweXRob24KKyAgc2NyaXB0IGF0IHRoZSB3aW5kb3dzIGNvbW1hbmQgcHJvbXB0IGJ5IGp1c3QgdHlwaW5nIGl0cyBuYW1lIHdpdGhvdXQgdGhlCisgIGBgLnB5YGAgZXh0ZW5zaW9uLiAgKENvbnRyaWJ1dGVkIGJ5IFBhdWwgTW9vcmUgaW4gOmlzc3VlOmAxODU2OWAuKQorCisqIEEgbmV3IGBgbWFrZWBgIHRhcmdldCBgY292ZXJhZ2UtcmVwb3J0CisgIDxodHRwczovL2RvY3MucHl0aG9uLm9yZy9kZXZndWlkZS9jb3ZlcmFnZS5odG1sI21lYXN1cmluZy1jb3ZlcmFnZS1vZi1jLWNvZGUtd2l0aC1nY292LWFuZC1sY292PmBfCisgIHdpbGwgYnVpbGQgcHl0aG9uLCBydW4gdGhlIHRlc3Qgc3VpdGUsIGFuZCBnZW5lcmF0ZSBhbiBIVE1MIGNvdmVyYWdlIHJlcG9ydAorICBmb3IgdGhlIEMgY29kZWJhc2UgdXNpbmcgYGBnY292YGAgYW5kIGBsY292CisgIDxodHRwOi8vbHRwLnNvdXJjZWZvcmdlLm5ldC9jb3ZlcmFnZS9sY292LnBocD5gXy4KKworKiBUaGUgYGAtUmBgIG9wdGlvbiB0byB0aGUgOnJlZjpgcHl0aG9uIHJlZ3Jlc3Npb24gdGVzdCBzdWl0ZSA8cmVncnRlc3Q+YCBub3cKKyAgYWxzbyBjaGVja3MgZm9yIG1lbW9yeSBhbGxvY2F0aW9uIGxlYWtzLCB1c2luZworICA6ZnVuYzpgc3lzLmdldGFsbG9jYXRlZGJsb2NrcygpYC4gIChDb250cmlidXRlZCBieSBBbnRvaW5lIFBpdHJvdSBpbgorICA6aXNzdWU6YDEzMzkwYC4pCisKKyogYGBweXRob24gLW1gYCBub3cgd29ya3Mgd2l0aCBuYW1lc3BhY2UgcGFja2FnZXMuCisKKyogVGhlIDptb2Q6YHN0YXRgIG1vZHVsZSBpcyBub3cgaW1wbGVtZW50ZWQgaW4gQywgd2hpY2ggbWVhbnMgaXQgZ2V0cyB0aGUKKyAgdmFsdWVzIGZvciBpdHMgY29uc3RhbnRzIGZyb20gdGhlIEMgaGVhZGVyIGZpbGVzLCBpbnN0ZWFkIG9mIGhhdmluZyB0aGUKKyAgdmFsdWVzIGhhcmQtY29kZWQgaW4gdGhlIHB5dGhvbiBtb2R1bGUgYXMgd2FzIHByZXZpb3VzbHkgdGhlIGNhc2UuCisKKyogTG9hZGluZyBtdWx0aXBsZSBweXRob24gbW9kdWxlcyBmcm9tIGEgc2luZ2xlIE9TIG1vZHVsZSAoYGAuc29gYCwgYGAuZGxsYGApCisgIG5vdyB3b3JrcyBjb3JyZWN0bHkgKHByZXZpb3VzbHkgaXQgc2lsZW50bHkgcmV0dXJuZWQgdGhlIGZpcnN0IHB5dGhvbgorICBtb2R1bGUgaW4gdGhlIGZpbGUpLiAgKENvbnRyaWJ1dGVkIGJ5IFbDoWNsYXYgxaBtaWxhdWVyIGluIDppc3N1ZTpgMTY0MjFgLikKKworKiBBIG5ldyBvcGNvZGUsIDpvcGNvZGU6YExPQURfQ0xBU1NERVJFRmAsIGhhcyBiZWVuIGFkZGVkIHRvIGZpeCBhIGJ1ZyBpbiB0aGUKKyAgbG9hZGluZyBvZiBmcmVlIHZhcmlhYmxlcyBpbiBjbGFzcyBib2RpZXMgdGhhdCBjb3VsZCBiZSB0cmlnZ2VyZWQgYnkgY2VydGFpbgorICB1c2VzIG9mIDpyZWY6YF9fcHJlcGFyZV9fIDxwcmVwYXJlPmAuICAoQ29udHJpYnV0ZWQgYnkgQmVuamFtaW4gUGV0ZXJzb24gaW4KKyAgOmlzc3VlOmAxNzg1M2AuKQorCisqIEEgbnVtYmVyIG9mIE1lbW9yeUVycm9yLXJlbGF0ZWQgY3Jhc2hlcyB3ZXJlIGlkZW50aWZpZWQgYW5kIGZpeGVkIGJ5IFZpY3RvcgorICBTdGlubmVyIHVzaW5nIGhpcyA6cGVwOmA0NDVgLWJhc2VkIGBgcHlmYWlsbWFsbG9jYGAgdG9vbCAoOmlzc3VlOmAxODQwOGAsCisgIDppc3N1ZTpgMTg1MjBgKS4KKworKiBUaGUgOnJlZjpgcHl2ZW52IDxzY3JpcHRzLXB5dmVudj5gIGNvbW1hbmQgbm93IGFjY2VwdHMgYSBgYC0tY29waWVzYGAgb3B0aW9uCisgIHRvIHVzZSBjb3BpZXMgcmF0aGVyIHRoYW4gc3ltbGlua3MgZXZlbiBvbiBzeXN0ZW1zIHdoZXJlIHN5bWxpbmtzIGFyZSB0aGUKKyAgZGVmYXVsdC4gIChDb250cmlidXRlZCBieSBWaW5heSBTYWppcCBpbiA6aXNzdWU6YDE4ODA3YC4pCisKKyogVGhlIDpyZWY6YHB5dmVudiA8c2NyaXB0cy1weXZlbnY+YCBjb21tYW5kIGFsc28gYWNjZXB0cyBhIGBgLS13aXRob3V0LXBpcGBgCisgIG9wdGlvbiB0byBzdXBwcmVzcyB0aGUgb3RoZXJ3aXNlLWF1dG9tYXRpYyBib290c3RyYXBwaW5nIG9mIHBpcCBpbnRvCisgIHRoZSB2aXJ0dWFsIGVudmlyb25tZW50LiAgKENvbnRyaWJ1dGVkIGJ5IE5pY2sgQ29naGxhbiBpbiA6aXNzdWU6YDE5NTUyYAorICBhcyBwYXJ0IG9mIHRoZSA6cGVwOmA0NTNgIGltcGxlbWVudGF0aW9uLikKKworKiBUaGUgZW5jb2RpbmcgbmFtZSBpcyBub3cgb3B0aW9uYWwgaW4gdGhlIHZhbHVlIHNldCBmb3IgdGhlCisgIDplbnZ2YXI6YFBZVEhPTklPRU5DT0RJTkdgIGVudmlyb25tZW50IHZhcmlhYmxlLiAgVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0bworICBzZXQganVzdCB0aGUgZXJyb3IgaGFuZGxlciwgd2l0aG91dCBjaGFuZ2luZyB0aGUgZGVmYXVsdCBlbmNvZGluZy4KKyAgKENvbnRyaWJ1dGVkIGJ5IFNlcmhpeSBTdG9yY2hha2EgaW4gOmlzc3VlOmAxODgxOGAuKQorCisqIFRoZSA6bW9kOmBiejJgLCA6bW9kOmBsem1hYCwgYW5kIDptb2Q6YGd6aXBgIG1vZHVsZSBgYG9wZW5gYCBmdW5jdGlvbnMgbm93CisgIHN1cHBvcnQgYGB4YGAgKGV4Y2x1c2l2ZSBjcmVhdGlvbikgbW9kZS4gIChDb250cmlidXRlZCBieSBUaW0gSGVhbmV5IGFuZAorICBWYWpyYXNreSBLb2sgaW4gOmlzc3VlOmAxOTIwMWAsIDppc3N1ZTpgMTkyMjJgLCBhbmQgOmlzc3VlOmAxOTIyM2AuKQorCisKK1NpZ25pZmljYW50IE9wdGltaXphdGlvbnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiBUaGUgVVRGLTMyIGRlY29kZXIgaXMgbm93IDN4IHRvIDR4IGZhc3Rlci4gIChDb250cmlidXRlZCBieSBTZXJoaXkgU3RvcmNoYWthCisgIGluIDppc3N1ZTpgMTQ2MjVgLikKKworKiBUaGUgY29zdCBvZiBoYXNoIGNvbGxpc2lvbnMgZm9yIHNldHMgaXMgbm93IHJlZHVjZWQuICBFYWNoIGhhc2ggdGFibGUKKyAgcHJvYmUgbm93IGNoZWNrcyBhIHNlcmllcyBvZiBjb25zZWN1dGl2ZSwgYWRqYWNlbnQga2V5L2hhc2ggcGFpcnMgYmVmb3JlCisgIGNvbnRpbnVpbmcgdG8gbWFrZSByYW5kb20gcHJvYmVzIHRocm91Z2ggdGhlIGhhc2ggdGFibGUuICBUaGlzIGV4cGxvaXRzCisgIGNhY2hlIGxvY2FsaXR5IHRvIG1ha2UgY29sbGlzaW9uIHJlc29sdXRpb24gbGVzcyBleHBlbnNpdmUuCisgIFRoZSBjb2xsaXNpb24gcmVzb2x1dGlvbiBzY2hlbWUgY2FuIGJlIGRlc2NyaWJlZCBhcyBhIGh5YnJpZCBvZiBsaW5lYXIKKyAgcHJvYmluZyBhbmQgb3BlbiBhZGRyZXNzaW5nLiAgVGhlIG51bWJlciBvZiBhZGRpdGlvbmFsIGxpbmVhciBwcm9iZXMKKyAgZGVmYXVsdHMgdG8gbmluZS4gIFRoaXMgY2FuIGJlIGNoYW5nZWQgYXQgY29tcGlsZS10aW1lIGJ5IGRlZmluaW5nCisgIExJTkVBUl9QUk9CRVMgdG8gYmUgYW55IHZhbHVlLiAgU2V0IExJTkVBUl9QUk9CRVM9MCB0byB0dXJuLW9mZgorICBsaW5lYXIgcHJvYmluZyBlbnRpcmVseS4gIChDb250cmlidXRlZCBieSBSYXltb25kIEhldHRpbmdlciBpbgorICA6aXNzdWU6YDE4NzcxYC4pCisKKyogVGhlIGludGVycHJldGVyIHN0YXJ0cyBhYm91dCAzMCUgZmFzdGVyLiBBIGNvdXBsZSBvZiBtZWFzdXJlcyBsZWFkIHRvIHRoZQorICBzcGVlZHVwLiBUaGUgaW50ZXJwcmV0ZXIgbG9hZHMgZmV3ZXIgbW9kdWxlcyBvbiBzdGFydHVwLCBlLmcuIHRoZSA6bW9kOmByZWAsCisgIDptb2Q6YGNvbGxlY3Rpb25zYCBhbmQgOm1vZDpgbG9jYWxlYCBtb2R1bGVzIGFuZCB0aGVpciBkZXBlbmRlbmNpZXMgYXJlIG5vCisgIGxvbmdlciBpbXBvcnRlZCBieSBkZWZhdWx0LiBUaGUgbWFyc2hhbCBtb2R1bGUgaGFzIGJlZW4gaW1wcm92ZWQgdG8gbG9hZAorICBjb21waWxlZCBQeXRob24gY29kZSBmYXN0ZXIuICAoQ29udHJpYnV0ZWQgYnkgQW50b2luZSBQaXRyb3UsIENocmlzdGlhbgorICBIZWltZXMgYW5kIFZpY3RvciBTdGlubmVyIGluIDppc3N1ZTpgMTkyMTlgLCA6aXNzdWU6YDE5MjE4YCwgOmlzc3VlOmAxOTIwOWAsCisgIDppc3N1ZTpgMTkyMDVgIGFuZCA6aXNzdWU6YDk1NDhgLikKKworKiA6Y2xhc3M6YGJ6Mi5CWjJGaWxlYCBpcyBub3cgYXMgZmFzdCBvciBmYXN0ZXIgdGhhbiB0aGUgUHl0aG9uMiB2ZXJzaW9uIGZvcgorICBtb3N0IGNhc2VzLiAgOmNsYXNzOmBsem1hLkxaTUFGaWxlYCBoYXMgYWxzbyBiZWVuIG9wdGltaXplZC4gIChDb250cmlidXRlZCBieQorICBTZXJoaXkgU3RvcmNoYWthIGFuZCBOYWRlZW0gVmF3ZGEgaW4gOmlzc3VlOmAxNjAzNGAuKQorCisqIDpmdW5jOmByYW5kb20uZ2V0cmFuZGJpdHNgIGlzIDIwJS00MCUgZmFzdGVyIGZvciBzbWFsbCBpbnRlZ2VycyAodGhlIG1vc3QKKyAgY29tbW9uIHVzZSBjYXNlKS4gIChDb250cmlidXRlZCBieSBTZXJoaXkgU3RvcmNoYWthIGluIDppc3N1ZTpgMTY2NzRgLikKKworKiBCeSB0YWtpbmcgYWR2YW50YWdlIG9mIHRoZSBuZXcgc3RvcmFnZSBmb3JtYXQgZm9yIHN0cmluZ3MsIHBpY2tsaW5nIG9mCisgIHN0cmluZ3MgaXMgbm93IHNpZ25pZmljYW50bHkgZmFzdGVyLiAgKENvbnRyaWJ1dGVkIGJ5IFZpY3RvciBTdGlubmVyIGFuZAorICBBbnRvaW5lIFBpdHJvdSBpbiA6aXNzdWU6YDE1NTk2YC4pCisKKyogQSBwZXJmb3JtYW5jZSBpc3N1ZSBpbiA6bWV0aDpgaW8uRmlsZUlPLnJlYWRhbGxgIGhhcyBiZWVuIHNvbHZlZC4gIFRoaXMKKyAgcGFydGljdWxhcmx5IGFmZmVjdHMgV2luZG93cywgYW5kIHNpZ25pZmljYW50bHkgc3BlZWRzIHVwIHRoZSBjYXNlIG9mIHBpcGluZworICBzaWduaWZpY2FudCBhbW91bnRzIG9mIGRhdGEgdGhyb3VnaCA6bW9kOmBzdWJwcm9jZXNzYC4gIChDb250cmlidXRlZAorICBieSBSaWNoYXJkIE91ZGtlcmsgaW4gOmlzc3VlOmAxNTc1OGAuKQorCisqIDpmdW5jOmBodG1sLmVzY2FwZWAgaXMgbm93IDEweCBmYXN0ZXIuICAoQ29udHJpYnV0ZWQgYnkgTWF0dCBCcnlhbnQgaW4KKyAgOmlzc3VlOmAxODAyMGAuKQorCisqIE9uIFdpbmRvd3MsIHRoZSBuYXRpdmUgYGBWaXJ0dWFsQWxsb2NgYCBpcyBub3cgdXNlZCBpbnN0ZWFkIG9mIHRoZSBDUlQKKyAgYGBtYWxsb2NgYCBpbiBgYG9ibWFsbG9jYGAuICBBcnRpZmljaWFsIGJlbmNobWFya3Mgc2hvdyBhYm91dCBhIDMlIG1lbW9yeQorICBzYXZpbmdzLgorCisqIDpmdW5jOmBvcy51cmFuZG9tYCBub3cgdXNlcyBhIGxhemlseS1vcGVuZWQgcGVyc2lzdGVudCBmaWxlIGRlc2NyaXB0b3IKKyAgc28gYXMgdG8gYXZvaWQgdXNpbmcgbWFueSBmaWxlIGRlc2NyaXB0b3JzIHdoZW4gcnVuIGluIHBhcmFsbGVsIGZyb20KKyAgbXVsdGlwbGUgdGhyZWFkcy4gIChDb250cmlidXRlZCBieSBBbnRvaW5lIFBpdHJvdSBpbiA6aXNzdWU6YDE4NzU2YC4pCisKKworLi4gX2RlcHJlY2F0ZWQtMy40OgorCitEZXByZWNhdGVkCis9PT09PT09PT09CisKK1RoaXMgc2VjdGlvbiBjb3ZlcnMgdmFyaW91cyBBUElzIGFuZCBvdGhlciBmZWF0dXJlcyB0aGF0IGhhdmUgYmVlbiBkZXByZWNhdGVkCitpbiBQeXRob24gMy40LCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIFB5dGhvbiAzLjUgb3IgbGF0ZXIuICBJbiBtb3N0IChidXQgbm90CithbGwpIGNhc2VzLCB1c2luZyB0aGUgZGVwcmVjYXRlZCBBUElzIHdpbGwgcHJvZHVjZSBhIDpleGM6YERlcHJlY2F0aW9uV2FybmluZ2AKK3doZW4gdGhlIGludGVycHJldGVyIGlzIHJ1biB3aXRoIGRlcHJlY2F0aW9uIHdhcm5pbmdzIGVuYWJsZWQgKGZvciBleGFtcGxlLCBieQordXNpbmcgYGAtV2RgYCkuCisKKworRGVwcmVjYXRpb25zIGluIHRoZSBQeXRob24gQVBJCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiBBcyBtZW50aW9uZWQgaW4gOnJlZjpgd2hhdHNuZXctcGVwLTQ1MWAsIGEgbnVtYmVyIG9mIDptb2Q6YGltcG9ydGxpYmAKKyAgbWV0aG9kcyBhbmQgZnVuY3Rpb25zIGFyZSBkZXByZWNhdGVkOiA6bWV0aDpgaW1wb3J0bGliLmZpbmRfbG9hZGVyYCBpcworICByZXBsYWNlZCBieSA6ZnVuYzpgaW1wb3J0bGliLnV0aWwuZmluZF9zcGVjYDsKKyAgOm1ldGg6YGltcG9ydGxpYi5tYWNoaW5lcnkuUGF0aEZpbmRlci5maW5kX21vZHVsZWAgaXMgcmVwbGFjZWQgYnkKKyAgOm1ldGg6YGltcG9ydGxpYi5tYWNoaW5lcnkuUGF0aEZpbmRlci5maW5kX3NwZWNgOworICA6bWV0aDpgaW1wb3J0bGliLmFiYy5NZXRhUGF0aEZpbmRlci5maW5kX21vZHVsZWAgaXMgcmVwbGFjZWQgYnkKKyAgOm1ldGg6YGltcG9ydGxpYi5hYmMuTWV0YVBhdGhGaW5kZXIuZmluZF9zcGVjYDsKKyAgOm1ldGg6YGltcG9ydGxpYi5hYmMuUGF0aEVudHJ5RmluZGVyLmZpbmRfbG9hZGVyYCBhbmQKKyAgOm1ldGg6YH5pbXBvcnRsaWIuYWJjLlBhdGhFbnRyeUZpbmRlci5maW5kX21vZHVsZWAgYXJlIHJlcGxhY2VkIGJ5CisgIDptZXRoOmBpbXBvcnRsaWIuYWJjLlBhdGhFbnRyeUZpbmRlci5maW5kX3NwZWNgOyBhbGwgb2YgdGhlIGBgeHh4TG9hZGVyYGAgQUJDCisgIGBgbG9hZF9tb2R1bGVgYCBtZXRob2RzICg6bWV0aDpgaW1wb3J0bGliLmFiYy5Mb2FkZXIubG9hZF9tb2R1bGVgLAorICA6bWV0aDpgaW1wb3J0bGliLmFiYy5JbnNwZWN0TG9hZGVyLmxvYWRfbW9kdWxlYCwKKyAgOm1ldGg6YGltcG9ydGxpYi5hYmMuRmlsZUxvYWRlci5sb2FkX21vZHVsZWAsCisgIDptZXRoOmBpbXBvcnRsaWIuYWJjLlNvdXJjZUxvYWRlci5sb2FkX21vZHVsZWApIHNob3VsZCBubyBsb25nZXIgYmUKKyAgaW1wbGVtZW50ZWQsIGluc3RlYWQgbG9hZGVycyBzaG91bGQgaW1wbGVtZW50IGFuCisgIGBgZXhlY19tb2R1bGVgYCBtZXRob2QKKyAgKDptZXRoOmBpbXBvcnRsaWIuYWJjLkxvYWRlci5leGVjX21vZHVsZWAsCisgIDptZXRoOmBpbXBvcnRsaWIuYWJjLkluc3BlY3RMb2FkZXIuZXhlY19tb2R1bGVgCisgIDptZXRoOmBpbXBvcnRsaWIuYWJjLlNvdXJjZUxvYWRlci5leGVjX21vZHVsZWApIGFuZCBsZXQgdGhlIGltcG9ydCBzeXN0ZW0KKyAgdGFrZSBjYXJlIG9mIHRoZSByZXN0OyBhbmQKKyAgOm1ldGg6YGltcG9ydGxpYi5hYmMuTG9hZGVyLm1vZHVsZV9yZXByYCwKKyAgOm1ldGg6YGltcG9ydGxpYi51dGlsLm1vZHVsZV9mb3JfbG9hZGVyYCwgOm1ldGg6YGltcG9ydGxpYi51dGlsLnNldF9sb2FkZXJgLAorICBhbmQgOm1ldGg6YGltcG9ydGxpYi51dGlsLnNldF9wYWNrYWdlYCBhcmUgbm8gbG9uZ2VyIG5lZWRlZCBiZWNhdXNlIHRoZWlyCisgIGZ1bmN0aW9ucyBhcmUgbm93IGhhbmRsZWQgYXV0b21hdGljYWxseSBieSB0aGUgaW1wb3J0IHN5c3RlbS4KKworKiBUaGUgOm1vZDpgaW1wYCBtb2R1bGUgaXMgcGVuZGluZyBkZXByZWNhdGlvbi4gVG8ga2VlcCBjb21wYXRpYmlsaXR5IHdpdGgKKyAgUHl0aG9uIDIvMyBjb2RlIGJhc2VzLCB0aGUgbW9kdWxlJ3MgcmVtb3ZhbCBpcyBjdXJyZW50bHkgbm90IHNjaGVkdWxlZC4KKworKiBUaGUgOm1vZDpgZm9ybWF0dGVyYCBtb2R1bGUgaXMgcGVuZGluZyBkZXByZWNhdGlvbiBhbmQgaXMgc2xhdGVkIGZvciByZW1vdmFsCisgIGluIFB5dGhvbiAzLjYuCisKKyogYGBNRDVgYCBhcyB0aGUgZGVmYXVsdCAqZGlnZXN0bW9kKiBmb3IgdGhlIDpmdW5jOmBobWFjLm5ld2AgZnVuY3Rpb24gaXMKKyAgZGVwcmVjYXRlZC4gIFB5dGhvbiAzLjYgd2lsbCByZXF1aXJlIGFuIGV4cGxpY2l0IGRpZ2VzdCBuYW1lIG9yIGNvbnN0cnVjdG9yIGFzCisgICpkaWdlc3Rtb2QqIGFyZ3VtZW50LgorCisqIFRoZSBpbnRlcm5hbCBgYE5ldHJjYGAgY2xhc3MgaW4gdGhlIDptb2Q6YGZ0cGxpYmAgbW9kdWxlIGhhcyBiZWVuIGRvY3VtZW50ZWQKKyAgYXMgZGVwcmVjYXRlZCBpbiBpdHMgZG9jc3RyaW5nIGZvciBxdWl0ZSBzb21lIHRpbWUuICBJdCBub3cgZW1pdHMgYQorICA6ZXhjOmBEZXByZWNhdGlvbldhcm5pbmdgIGFuZCB3aWxsIGJlIHJlbW92ZWQgY29tcGxldGVseSBpbiBQeXRob24gMy41LgorCisqIFRoZSB1bmRvY3VtZW50ZWQgKmVuZHRpbWUqIGFyZ3VtZW50IHRvIDptZXRoOmBzdWJwcm9jZXNzLlBvcGVuLndhaXRgIHNob3VsZAorICBub3QgaGF2ZSBiZWVuIGV4cG9zZWQgYW5kIGlzIGhvcGVmdWxseSBub3QgaW4gdXNlOyBpdCBpcyBkZXByZWNhdGVkIGFuZAorICB3aWxsIG1vc3RseSBsaWtlbHkgYmUgcmVtb3ZlZCBpbiBQeXRob24gMy41LgorCisqIFRoZSAqc3RyaWN0KiBhcmd1bWVudCBvZiA6Y2xhc3M6YH5odG1sLnBhcnNlci5IVE1MUGFyc2VyYCBpcyBkZXByZWNhdGVkLgorCisqIFRoZSA6bW9kOmBwbGlzdGxpYmAgOmZ1bmM6YH5wbGlzdGxpYi5yZWFkUGxpc3RgLAorICA6ZnVuYzpgfnBsaXN0bGliLndyaXRlUGxpc3RgLCA6ZnVuYzpgfnBsaXN0bGliLnJlYWRQbGlzdEZyb21CeXRlc2AsIGFuZAorICA6ZnVuYzpgfnBsaXN0bGliLndyaXRlUGxpc3RUb0J5dGVzYCBmdW5jdGlvbnMgYXJlIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgdGhlCisgIGNvcnJlc3BvbmRpbmcgbmV3IGZ1bmN0aW9ucyA6ZnVuYzpgfnBsaXN0bGliLmxvYWRgLCA6ZnVuYzpgfnBsaXN0bGliLmR1bXBgLAorICA6ZnVuYzpgfnBsaXN0bGliLmxvYWRzYCwgYW5kIDpmdW5jOmB+cGxpc3RsaWIuZHVtcHNgLiAgOmZ1bmM6YH5wbGlzdGxpYi5EYXRhYAorICBpcyBkZXByZWNhdGVkIGluIGZhdm9yIG9mIGp1c3QgdXNpbmcgdGhlIDpjbGFzczpgYnl0ZXNgIGNvbnN0cnVjdG9yLgorCisqIFRoZSA6bW9kOmBzeXNjb25maWdgIGtleSBgYFNPYGAgaXMgZGVwcmVjYXRlZCwgaXQgaGFzIGJlZW4gcmVwbGFjZWQgYnkKKyAgYGBFWFRfU1VGRklYYGAuCisKKyogVGhlIGBgVWBgIG1vZGUgYWNjZXB0ZWQgYnkgdmFyaW91cyBgYG9wZW5gYCBmdW5jdGlvbnMgaXMgZGVwcmVjYXRlZC4KKyAgSW4gUHl0aG9uMyBpdCBkb2VzIG5vdCBkbyBhbnl0aGluZyB1c2VmdWwsIGFuZCBzaG91bGQgYmUgcmVwbGFjZWQgYnkKKyAgYXBwcm9wcmlhdGUgdXNlcyBvZiA6Y2xhc3M6YGlvLlRleHRJT1dyYXBwZXJgIChpZiBuZWVkZWQpIGFuZCBpdHMgKm5ld2xpbmUqCisgIGFyZ3VtZW50LgorCisqIFRoZSAqcGFyc2VyKiBhcmd1bWVudCBvZiA6ZnVuYzpgeG1sLmV0cmVlLkVsZW1lbnRUcmVlLml0ZXJwYXJzZWAgaGFzCisgIGJlZW4gZGVwcmVjYXRlZCwgYXMgaGFzIHRoZSAqaHRtbCogYXJndW1lbnQgb2YKKyAgOmZ1bmM6YH54bWwuZXRyZWUuRWxlbWVudFRyZWUuWE1MUGFyc2VyYC4gIFRvIHByZXBhcmUgZm9yIHRoZSByZW1vdmFsIG9mIHRoZQorICBsYXR0ZXIsIGFsbCBhcmd1bWVudHMgdG8gYGBYTUxQYXJzZXJgYCBzaG91bGQgYmUgcGFzc2VkIGJ5IGtleXdvcmQuCisKKworRGVwcmVjYXRlZCBGZWF0dXJlcworLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqIFJ1bm5pbmcgOnJlZjpgaWRsZWAgd2l0aCB0aGUgYGAtbmBgIGZsYWcgKG5vIHN1YnByb2Nlc3MpIGlzIGRlcHJlY2F0ZWQuCisgIEhvd2V2ZXIsIHRoZSBmZWF0dXJlIHdpbGwgbm90IGJlIHJlbW92ZWQgdW50aWwgOmlzc3VlOmAxODgyM2AgaXMgcmVzb2x2ZWQuCisKKyogVGhlIHNpdGUgbW9kdWxlIGFkZGluZyBhICJzaXRlLXB5dGhvbiIgZGlyZWN0b3J5IHRvIHN5cy5wYXRoLCBpZiBpdAorICBleGlzdHMsIGlzIGRlcHJlY2F0ZWQgKDppc3N1ZTpgMTkzNzVgKS4KKworCisKK1JlbW92ZWQKKz09PT09PT0KKworCitPcGVyYXRpbmcgU3lzdGVtcyBObyBMb25nZXIgU3VwcG9ydGVkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1N1cHBvcnQgZm9yIHRoZSBmb2xsb3dpbmcgb3BlcmF0aW5nIHN5c3RlbXMgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBzb3VyY2UKK2FuZCBidWlsZCB0b29sczoKKworKiBPUy8yICg6aXNzdWU6YDE2MTM1YCkuCisqIFdpbmRvd3MgMjAwMCAoY2hhbmdlc2V0IGU1MmRmMDViNDk2YSkuCisqIFdpbmRvd3Mgc3lzdGVtcyB3aGVyZSBgYENPTVNQRUNgYCBwb2ludHMgdG8gYGBjb21tYW5kLmNvbWBgICg6aXNzdWU6YDE0NDcwYCkuCisqIFZNUyAoOmlzc3VlOmAxNjEzNmApLgorCisKK0FQSSBhbmQgRmVhdHVyZSBSZW1vdmFscworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBmb2xsb3dpbmcgb2Jzb2xldGUgYW5kIHByZXZpb3VzbHkgZGVwcmVjYXRlZCBBUElzIGFuZCBmZWF0dXJlcyBoYXZlIGJlZW4KK3JlbW92ZWQ6CisKKyogVGhlIHVubWFpbnRhaW5lZCBgYE1pc2MvVGV4dE1hdGVgYCBhbmQgYGBNaXNjL3ZpbWBgIGRpcmVjdG9yaWVzIGhhdmUgYmVlbgorICByZW1vdmVkIChzZWUgdGhlIGBkZXZndWlkZSA8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvZGV2Z3VpZGU+YF8KKyAgZm9yIHN1Z2dlc3Rpb25zIG9uIHdoYXQgdG8gdXNlIGluc3RlYWQpLgorCisqIFRoZSBgYFNPYGAgbWFrZWZpbGUgbWFjcm8gaXMgcmVtb3ZlZCAoaXQgd2FzIHJlcGxhY2VkIGJ5IHRoZQorICBgYFNITElCX1NVRkZJWGBgIGFuZCBgYEVYVF9TVUZGSVhgYCBtYWNyb3MpICg6aXNzdWU6YDE2NzU0YCkuCisKKyogVGhlIGBgUHlUaHJlYWRTdGF0ZS50aWNrX2NvdW50ZXJgYCBmaWVsZCBoYXMgYmVlbiByZW1vdmVkOyBpdHMgdmFsdWUgaGFzCisgIGJlZW4gbWVhbmluZ2xlc3Mgc2luY2UgUHl0aG9uIDMuMiwgd2hlbiB0aGUgIm5ldyBHSUwiIHdhcyBpbnRyb2R1Y2VkCisgICg6aXNzdWU6YDE5MTk5YCkuCisKKyogYGBQeUxvYWRlcmBgIGFuZCBgYFB5UHljTG9hZGVyYGAgaGF2ZSBiZWVuIHJlbW92ZWQgZnJvbSA6bW9kOmBpbXBvcnRsaWJgLgorICAoQ29udHJpYnV0ZWQgYnkgVGFyYXMgTHlhcHVuIGluIDppc3N1ZTpgMTU2NDFgLikKKworKiBUaGUgKnN0cmljdCogYXJndW1lbnQgdG8gOmNsYXNzOmB+aHR0cC5jbGllbnQuSFRUUENvbm5lY3Rpb25gIGFuZAorICA6Y2xhc3M6YH5odHRwLmNsaWVudC5IVFRQU0Nvbm5lY3Rpb25gIGhhcyBiZWVuIHJlbW92ZWQuICBIVFRQIDAuOS1zdHlsZQorICAiU2ltcGxlIFJlc3BvbnNlcyIgYXJlIG5vIGxvbmdlciBzdXBwb3J0ZWQuCisKKyogVGhlIGRlcHJlY2F0ZWQgOm1vZDpgdXJsbGliLnJlcXVlc3QuUmVxdWVzdGAgZ2V0dGVyIGFuZCBzZXR0ZXIgbWV0aG9kcworICBgYGFkZF9kYXRhYGAsIGBgaGFzX2RhdGFgYCwgYGBnZXRfZGF0YWBgLCBgYGdldF90eXBlYGAsIGBgZ2V0X2hvc3RgYCwKKyAgYGBnZXRfc2VsZWN0b3JgYCwgYGBzZXRfcHJveHlgYCwgYGBnZXRfb3JpZ2luX3JlcV9ob3N0YGAsIGFuZAorICBgYGlzX3VudmVyaWZpYWJsZWBgIGhhdmUgYmVlbiByZW1vdmVkICh1c2UgZGlyZWN0IGF0dHJpYnV0ZSBhY2Nlc3MgaW5zdGVhZCkuCisKKyogU3VwcG9ydCBmb3IgbG9hZGluZyB0aGUgZGVwcmVjYXRlZCBgYFRZUEVfSU5UNjRgYCBoYXMgYmVlbiByZW1vdmVkIGZyb20KKyAgOm1vZDpgbWFyc2hhbGAuICAoQ29udHJpYnV0ZWQgYnkgRGFuIFJpdGkgaW4gOmlzc3VlOmAxNTQ4MGAuKQorCisqIDpjbGFzczpgaW5zcGVjdC5TaWduYXR1cmVgOiBwb3NpdGlvbmFsLW9ubHkgcGFyYW1ldGVycyBhcmUgbm93IHJlcXVpcmVkCisgIHRvIGhhdmUgYSB2YWxpZCBuYW1lLgorCisqIDptZXRoOmBvYmplY3QuX19mb3JtYXRfX2Agbm8gbG9uZ2VyIGFjY2VwdHMgbm9uLWVtcHR5IGZvcm1hdCBzdHJpbmdzLCBpdCBub3cKKyAgcmFpc2VzIGEgOmV4YzpgVHlwZUVycm9yYCBpbnN0ZWFkLiAgVXNpbmcgYSBub24tZW1wdHkgc3RyaW5nIGhhcyBiZWVuCisgIGRlcHJlY2F0ZWQgc2luY2UgUHl0aG9uIDMuMi4gIFRoaXMgY2hhbmdlIGhhcyBiZWVuIG1hZGUgdG8gcHJldmVudCBhCisgIHNpdHVhdGlvbiB3aGVyZSBwcmV2aW91c2x5IHdvcmtpbmcgKGJ1dCBpbmNvcnJlY3QpIGNvZGUgd291bGQgc3RhcnQgZmFpbGluZworICBpZiBhbiBvYmplY3QgZ2FpbmVkIGEgX19mb3JtYXRfXyBtZXRob2QsIHdoaWNoIG1lYW5zIHRoYXQgeW91ciBjb2RlIG1heSBub3cKKyAgcmFpc2UgYSA6ZXhjOmBUeXBlRXJyb3JgIGlmIHlvdSBhcmUgdXNpbmcgYW4gYGAncydgYCBmb3JtYXQgY29kZSB3aXRoIG9iamVjdHMKKyAgdGhhdCBkbyBub3QgaGF2ZSBhIF9fZm9ybWF0X18gbWV0aG9kIHRoYXQgaGFuZGxlcyBpdC4gIFNlZSA6aXNzdWU6YDc5OTRgIGZvcgorICBiYWNrZ3JvdW5kLgorCisqIDptZXRoOmBkaWZmbGliLlNlcXVlbmNlTWF0Y2hlci5pc2JqdW5rYCBhbmQKKyAgOm1ldGg6YGRpZmZsaWIuU2VxdWVuY2VNYXRjaGVyLmlzYnBvcHVsYXJgIHdlcmUgZGVwcmVjYXRlZCBpbiAzLjIsIGFuZCBoYXZlCisgIG5vdyBiZWVuIHJlbW92ZWQ6IHVzZSBgYHggaW4gc20uYmp1bmtgYCBhbmQKKyAgYGB4IGluIHNtLmJwb3B1bGFyYGAsIHdoZXJlICpzbSogaXMgYSA6Y2xhc3M6YH5kaWZmbGliLlNlcXVlbmNlTWF0Y2hlcmAgb2JqZWN0CisgICg6aXNzdWU6YDEzMjQ4YCkuCisKKworQ29kZSBDbGVhbnVwcworLS0tLS0tLS0tLS0tLQorCisqIFRoZSB1bnVzZWQgYW5kIHVuZG9jdW1lbnRlZCBpbnRlcm5hbCBgYFNjYW5uZXJgYCBjbGFzcyBoYXMgYmVlbiByZW1vdmVkIGZyb20KKyAgdGhlIDptb2Q6YHB5ZG9jYCBtb2R1bGUuCisKKyogVGhlIHByaXZhdGUgYW5kIGVmZmVjdGl2ZWx5IHVudXNlZCBgYF9nZXN0YWx0YGAgbW9kdWxlIGhhcyBiZWVuIHJlbW92ZWQsCisgIGFsb25nIHdpdGggdGhlIHByaXZhdGUgOm1vZDpgcGxhdGZvcm1gIGZ1bmN0aW9ucyBgYF9tYWNfdmVyX2xvb2t1cGBgLAorICBgYF9tYWNfdmVyX2dzdGFsdGBgLCBhbmQgYGBfYmNkMnN0cmBgLCB3aGljaCB3b3VsZCBvbmx5IGhhdmUgZXZlciBiZWVuIGNhbGxlZAorICBvbiBiYWRseSBicm9rZW4gT1NYIHN5c3RlbXMgKHNlZSA6aXNzdWU6YDE4MzkzYCkuCisKKyogVGhlIGhhcmRjb2RlZCBjb3BpZXMgb2YgY2VydGFpbiA6bW9kOmBzdGF0YCBjb25zdGFudHMgdGhhdCB3ZXJlIGluY2x1ZGVkIGluCisgIHRoZSA6bW9kOmB0YXJmaWxlYCBtb2R1bGUgbmFtZXNwYWNlIGhhdmUgYmVlbiByZW1vdmVkLgorCisKKworUG9ydGluZyB0byBQeXRob24gMy40Cis9PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBzZWN0aW9uIGxpc3RzIHByZXZpb3VzbHkgZGVzY3JpYmVkIGNoYW5nZXMgYW5kIG90aGVyIGJ1Z2ZpeGVzCit0aGF0IG1heSByZXF1aXJlIGNoYW5nZXMgdG8geW91ciBjb2RlLgorCisKK0NoYW5nZXMgaW4gJ3B5dGhvbicgQ29tbWFuZCBCZWhhdmlvcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogSW4gYSBwb3NpeCBzaGVsbCwgc2V0dGluZyB0aGUgOmVudnZhcjpgUEFUSGAgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8KKyAgYW4gZW1wdHkgdmFsdWUgaXMgZXF1aXZhbGVudCB0byBub3Qgc2V0dGluZyBpdCBhdCBhbGwuICBIb3dldmVyLCBzZXR0aW5nCisgIDplbnZ2YXI6YFBZVEhPTlBBVEhgIHRvIGFuIGVtcHR5IHZhbHVlIHdhcyAqbm90KiBlcXVpdmFsZW50IHRvIG5vdCBzZXR0aW5nIGl0CisgIGF0IGFsbDogc2V0dGluZyA6ZW52dmFyOmBQWVRIT05QQVRIYCB0byBhbiBlbXB0eSB2YWx1ZSB3YXMgZXF1aXZhbGVudCB0bworICBzZXR0aW5nIGl0IHRvIGBgLmBgLCB3aGljaCBsZWFkcyB0byBjb25mdXNpb24gd2hlbiByZWFzb25pbmcgYnkgYW5hbG9neSB0bworICBob3cgOmVudnZhcjpgUEFUSGAgd29ya3MuICBUaGUgYmVoYXZpb3Igbm93IGNvbmZvcm1zIHRvIHRoZSBwb3NpeCBjb252ZW50aW9uCisgIGZvciA6ZW52dmFyOmBQQVRIYC4KKworKiBUaGUgW1ggcmVmcywgWSBibG9ja3NdIG91dHB1dCBvZiBhIGRlYnVnIChgYC0td2l0aC1weWRlYnVnYGApIGJ1aWxkIG9mIHRoZQorICBDUHl0aG9uIGludGVycHJldGVyIGlzIG5vdyBvZmYgYnkgZGVmYXVsdC4gIEl0IGNhbiBiZSByZS1lbmFibGVkIHVzaW5nIHRoZQorICBgYC1YIHNob3dyZWZjb3VudGBgIG9wdGlvbi4gIChDb250cmlidXRlZCBieSBFemlvIE1lbG90dGkgaW4gOmlzc3VlOmAxNzMyM2AuKQorCisqIFRoZSBweXRob24gY29tbWFuZCBhbmQgbW9zdCBzdGRsaWIgc2NyaXB0cyAoYXMgd2VsbCBhcyA6bW9kOmBhcmdwYXJzZWApIG5vdworICBvdXRwdXQgYGAtLXZlcnNpb25gYCBpbmZvcm1hdGlvbiB0byBgYHN0ZG91dGBgIGluc3RlYWQgb2YgYGBzdGRlcnJgYCAoZm9yCisgIGlzc3VlIGxpc3Qgc2VlIDpyZWY6YG90aGVyLWltcHJvdmVtZW50cy0zLjRgIGFib3ZlKS4KKworCitDaGFuZ2VzIGluIHRoZSBQeXRob24gQVBJCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogVGhlIEFCQ3MgZGVmaW5lZCBpbiA6bW9kOmBpbXBvcnRsaWIuYWJjYCBub3cgZWl0aGVyIHJhaXNlIHRoZSBhcHByb3ByaWF0ZQorICBleGNlcHRpb24gb3IgcmV0dXJuIGEgZGVmYXVsdCB2YWx1ZSBpbnN0ZWFkIG9mIHJhaXNpbmcKKyAgOmV4YzpgTm90SW1wbGVtZW50ZWRFcnJvcmAgYmxpbmRseS4gVGhpcyB3aWxsIG9ubHkgYWZmZWN0IGNvZGUgY2FsbGluZworICA6ZnVuYzpgc3VwZXJgIGFuZCBmYWxsaW5nIHRocm91Z2ggYWxsIHRoZSB3YXkgdG8gdGhlIEFCQ3MuIEZvciBjb21wYXRpYmlsaXR5LAorICBjYXRjaCBib3RoIDpleGM6YE5vdEltcGxlbWVudGVkRXJyb3JgIG9yIHRoZSBhcHByb3ByaWF0ZSBleGNlcHRpb24gYXMgbmVlZGVkLgorCisqIFRoZSBtb2R1bGUgdHlwZSBub3cgaW5pdGlhbGl6ZXMgdGhlIDphdHRyOmBfX3BhY2thZ2VfX2AgYW5kIDphdHRyOmBfX2xvYWRlcl9fYAorICBhdHRyaWJ1dGVzIHRvIGBgTm9uZWBgIGJ5IGRlZmF1bHQuIFRvIGRldGVybWluZSBpZiB0aGVzZSBhdHRyaWJ1dGVzIHdlcmUgc2V0CisgIGluIGEgYmFja3dhcmRzLWNvbXBhdGlibGUgZmFzaGlvbiwgdXNlIGUuZy4KKyAgYGBnZXRhdHRyKG1vZHVsZSwgJ19fbG9hZGVyX18nLCBOb25lKSBpcyBub3QgTm9uZWBgLiAgKDppc3N1ZTpgMTcxMTVgLikKKworKiA6bWV0aDpgaW1wb3J0bGliLnV0aWwubW9kdWxlX2Zvcl9sb2FkZXJgIG5vdyBzZXRzIGBgX19sb2FkZXJfX2BgIGFuZAorICBgYF9fcGFja2FnZV9fYGAgdW5jb25kaXRpb25hbGx5IHRvIHByb3Blcmx5IHN1cHBvcnQgcmVsb2FkaW5nLiBJZiB0aGlzIGlzIG5vdAorICBkZXNpcmVkIHRoZW4geW91IHdpbGwgbmVlZCB0byBzZXQgdGhlc2UgYXR0cmlidXRlcyBtYW51YWxseS4gWW91IGNhbiB1c2UKKyAgOmZ1bmM6YGltcG9ydGxpYi51dGlsLm1vZHVsZV90b19sb2FkYCBmb3IgbW9kdWxlIG1hbmFnZW1lbnQuCisKKyogSW1wb3J0IG5vdyByZXNldHMgcmVsZXZhbnQgYXR0cmlidXRlcyAoZS5nLiBgYF9fbmFtZV9fYGAsIGBgX19sb2FkZXJfX2BgLAorICBgYF9fcGFja2FnZV9fYGAsIGBgX19maWxlX19gYCwgYGBfX2NhY2hlZF9fYGApIHVuY29uZGl0aW9uYWxseSB3aGVuIHJlbG9hZGluZy4KKyAgTm90ZSB0aGF0IHRoaXMgcmVzdG9yZXMgYSBwcmUtMy4zIGJlaGF2aW9yIGluIHRoYXQgaXQgbWVhbnMgYSBtb2R1bGUgaXMKKyAgcmUtZm91bmQgd2hlbiByZS1sb2FkZWQgKDppc3N1ZTpgMTk0MTNgKS4KKworKiBGcm96ZW4gcGFja2FnZXMgbm8gbG9uZ2VyIHNldCBgYF9fcGF0aF9fYGAgdG8gYSBsaXN0IGNvbnRhaW5pbmcgdGhlIHBhY2thZ2UKKyAgbmFtZSwgdGhleSBub3cgc2V0IGl0IHRvIGFuIGVtcHR5IGxpc3QuICBUaGUgcHJldmlvdXMgYmVoYXZpb3IgY291bGQgY2F1c2UKKyAgdGhlIGltcG9ydCBzeXN0ZW0gdG8gZG8gdGhlIHdyb25nIHRoaW5nIG9uIHN1Ym1vZHVsZSBpbXBvcnRzIGlmIHRoZXJlIHdhcworICBhbHNvIGEgZGlyZWN0b3J5IHdpdGggdGhlIHNhbWUgbmFtZSBhcyB0aGUgZnJvemVuIHBhY2thZ2UuICBUaGUgY29ycmVjdCB3YXkKKyAgdG8gZGV0ZXJtaW5lIGlmIGEgbW9kdWxlIGlzIGEgcGFja2FnZSBvciBub3QgaXMgdG8gdXNlIGBgaGFzYXR0cihtb2R1bGUsCisgICdfX3BhdGhfXycpYGAgKDppc3N1ZTpgMTgwNjVgKS4KKworKiBGcm96ZW4gbW9kdWxlcyBubyBsb25nZXIgZGVmaW5lIGEgYGBfX2ZpbGVfX2BgIGF0dHJpYnV0ZS4gSXQncyBzZW1hbnRpY2FsbHkKKyAgaW5jb3JyZWN0IGZvciBmcm96ZW4gbW9kdWxlcyB0byBzZXQgdGhlIGF0dHJpYnV0ZSBhcyB0aGV5IGFyZSBub3QgbG9hZGVkIGZyb20KKyAgYW55IGV4cGxpY2l0IGxvY2F0aW9uLiBJZiB5b3UgbXVzdCBrbm93IHRoYXQgYSBtb2R1bGUgY29tZXMgZnJvbSBmcm96ZW4gY29kZQorICB0aGVuIHlvdSBjYW4gc2VlIGlmIHRoZSBtb2R1bGUncyBgYF9fc3BlY19fLmxvY2F0aW9uYGAgaXMgc2V0IHRvIGBgJ2Zyb3plbidgYCwKKyAgY2hlY2sgaWYgdGhlIGxvYWRlciBpcyBhIHN1YmNsYXNzIG9mCisgIDpjbGFzczpgaW1wb3J0bGliLm1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlcmAsCisgIG9yIGlmIFB5dGhvbiAyIGNvbXBhdGliaWxpdHkgaXMgbmVjZXNzYXJ5IHlvdSBjYW4gdXNlIDpmdW5jOmBpbXAuaXNfZnJvemVuYC4KKworKiA6ZnVuYzpgcHlfY29tcGlsZS5jb21waWxlYCBub3cgcmFpc2VzIDpleGM6YEZpbGVFeGlzdHNFcnJvcmAgaWYgdGhlIGZpbGUgcGF0aAorICBpdCB3b3VsZCB3cml0ZSB0byBpcyBhIHN5bWxpbmsgb3IgYSBub24tcmVndWxhciBmaWxlLiBUaGlzIGlzIHRvIGFjdCBhcyBhCisgIHdhcm5pbmcgdGhhdCBpbXBvcnQgd2lsbCBvdmVyd3JpdGUgdGhvc2UgZmlsZXMgd2l0aCBhIHJlZ3VsYXIgZmlsZSByZWdhcmRsZXNzCisgIG9mIHdoYXQgdHlwZSBvZiBmaWxlIHBhdGggdGhleSB3ZXJlIG9yaWdpbmFsbHkuCisKKyogOm1ldGg6YGltcG9ydGxpYi5hYmMuU291cmNlTG9hZGVyLmdldF9zb3VyY2VgIG5vIGxvbmdlciByYWlzZXMKKyAgOmV4YzpgSW1wb3J0RXJyb3JgIHdoZW4gdGhlIHNvdXJjZSBjb2RlIGJlaW5nIGxvYWRlZCB0cmlnZ2VycyBhCisgIDpleGM6YFN5bnRheEVycm9yYCBvciA6ZXhjOmBVbmljb2RlRGVjb2RlRXJyb3JgLiBBcyA6ZXhjOmBJbXBvcnRFcnJvcmAgaXMKKyAgbWVhbnQgdG8gYmUgcmFpc2VkIG9ubHkgd2hlbiBzb3VyY2UgY29kZSBjYW5ub3QgYmUgZm91bmQgYnV0IGl0IHNob3VsZCwgaXQgd2FzCisgIGZlbHQgdG8gYmUgb3Zlci1yZWFjaGluZy9vdmVybG9hZGluZyBvZiB0aGF0IG1lYW5pbmcgd2hlbiB0aGUgc291cmNlIGNvZGUgaXMKKyAgZm91bmQgYnV0IGltcHJvcGVybHkgc3RydWN0dXJlZC4gSWYgeW91IHdlcmUgY2F0Y2hpbmcgSW1wb3J0RXJyb3IgYmVmb3JlIGFuZAorICB3aXNoIHRvIGNvbnRpbnVlIHRvIGlnbm9yZSBzeW50YXggb3IgZGVjb2RpbmcgaXNzdWVzLCBjYXRjaCBhbGwgdGhyZWUKKyAgZXhjZXB0aW9ucyBub3cuCisKKyogOmZ1bmM6YGZ1bmN0b29scy51cGRhdGVfd3JhcHBlcmAgYW5kIDpmdW5jOmBmdW5jdG9vbHMud3JhcHNgIG5vdyBjb3JyZWN0bHkKKyAgc2V0IHRoZSBgYF9fd3JhcHBlZF9fYGAgYXR0cmlidXRlIHRvIHRoZSBmdW5jdGlvbiBiZWluZyB3cmFwcGVkLCBldmVuIGlmCisgIHRoYXQgZnVuY3Rpb24gYWxzbyBoYWQgaXRzIGBgX193cmFwcGVkX19gYCBhdHRyaWJ1dGUgc2V0LiBUaGlzIG1lYW5zCisgIGBgX193cmFwcGVkX19gYCBhdHRyaWJ1dGVzIG5vdyBjb3JyZWN0bHkgbGluayBhIHN0YWNrIG9mIGRlY29yYXRlZAorICBmdW5jdGlvbnMgcmF0aGVyIHRoYW4gZXZlcnkgYGBfX3dyYXBwZWRfX2BgIGF0dHJpYnV0ZSBpbiB0aGUgY2hhaW4KKyAgcmVmZXJyaW5nIHRvIHRoZSBpbm5lcm1vc3QgZnVuY3Rpb24uIEludHJvc3BlY3Rpb24gbGlicmFyaWVzIHRoYXQKKyAgYXNzdW1lZCB0aGUgcHJldmlvdXMgYmVoYXZpb3VyIHdhcyBpbnRlbnRpb25hbCBjYW4gdXNlCisgIDpmdW5jOmBpbnNwZWN0LnVud3JhcGAgdG8gYWNjZXNzIHRoZSBmaXJzdCBmdW5jdGlvbiBpbiB0aGUgY2hhaW4gdGhhdCBoYXMKKyAgbm8gYGBfX3dyYXBwZWRfX2BgIGF0dHJpYnV0ZS4KKworKiA6ZnVuYzpgaW5zcGVjdC5nZXRmdWxsYXJnc3BlY2AgaGFzIGJlZW4gcmVpbXBsZW1lbnRlZCBvbiB0b3Agb2YKKyAgOmZ1bmM6YGluc3BlY3Quc2lnbmF0dXJlYCBhbmQgaGVuY2UgaGFuZGxlcyBhIG11Y2ggd2lkZXIgdmFyaWV0eSBvZiBjYWxsYWJsZQorICBvYmplY3RzIHRoYW4gaXQgZGlkIGluIHRoZSBwYXN0LiBJdCBpcyBleHBlY3RlZCB0aGF0IGFkZGl0aW9uYWwgYnVpbHRpbiBhbmQKKyAgZXh0ZW5zaW9uIG1vZHVsZSBjYWxsYWJsZXMgd2lsbCBnYWluIHNpZ25hdHVyZSBtZXRhZGF0YSBvdmVyIHRoZSBjb3Vyc2Ugb2YKKyAgdGhlIFB5dGhvbiAzLjQgc2VyaWVzLiBDb2RlIHRoYXQgYXNzdW1lcyB0aGF0CisgIDpmdW5jOmBpbnNwZWN0LmdldGZ1bGxhcmdzcGVjYCB3aWxsIGZhaWwgb24gbm9uLVB5dGhvbiBjYWxsYWJsZXMgbWF5IG5lZWQKKyAgdG8gYmUgYWRqdXN0ZWQgYWNjb3JkaW5nbHkuCisKKyogOmNsYXNzOmBpbXBvcnRsaWIubWFjaGluZXJ5LlBhdGhGaW5kZXJgIG5vdyBwYXNzZXMgb24gdGhlIGN1cnJlbnQgd29ya2luZworICBkaXJlY3RvcnkgdG8gb2JqZWN0cyBpbiA6ZGF0YTpgc3lzLnBhdGhfaG9va3NgIGZvciB0aGUgZW1wdHkgc3RyaW5nLiBUaGlzCisgIHJlc3VsdHMgaW4gOmRhdGE6YHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlYCBuZXZlciBjb250YWluaW5nIGBgJydgYCwgdGh1cworICBpdGVyYXRpbmcgdGhyb3VnaCA6ZGF0YTpgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGVgIGJhc2VkIG9uIDpkYXRhOmBzeXMucGF0aGAKKyAgd2lsbCBub3QgZmluZCBhbGwga2V5cy4gQSBtb2R1bGUncyBgYF9fZmlsZV9fYGAgd2hlbiBpbXBvcnRlZCBpbiB0aGUgY3VycmVudAorICB3b3JraW5nIGRpcmVjdG9yeSB3aWxsIGFsc28gbm93IGhhdmUgYW4gYWJzb2x1dGUgcGF0aCwgaW5jbHVkaW5nIHdoZW4gdXNpbmcKKyAgYGAtbWBgIHdpdGggdGhlIGludGVycHJldGVyIChleGNlcHQgZm9yIGBgX19tYWluX18uX19maWxlX19gYCB3aGVuIGEgc2NyaXB0CisgIGhhcyBiZWVuIGV4ZWN1dGVkIGRpcmVjdGx5IHVzaW5nIGEgcmVsYXRpdmUgcGF0aCkgKENvbnRyaWJ1dGVkIGJ5IEJyZXR0CisgIENhbm5vbiBpbiA6aXNzdWU6YDE4NDE2YCkuICBpcyBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQtbGluZSkKKyAgKDppc3N1ZTpgMTg0MTZgKS4KKworKiBUaGUgcmVtb3ZhbCBvZiB0aGUgKnN0cmljdCogYXJndW1lbnQgdG8gOmNsYXNzOmB+aHR0cC5jbGllbnQuSFRUUENvbm5lY3Rpb25gCisgIGFuZCA6Y2xhc3M6YH5odHRwLmNsaWVudC5IVFRQU0Nvbm5lY3Rpb25gIGNoYW5nZXMgdGhlIG1lYW5pbmcgb2YgdGhlCisgIHJlbWFpbmluZyBhcmd1bWVudHMgaWYgeW91IGFyZSBzcGVjaWZ5aW5nIHRoZW0gcG9zaXRpb25hbGx5IHJhdGhlciB0aGFuIGJ5CisgIGtleXdvcmQuICBJZiB5b3UndmUgYmVlbiBwYXlpbmcgYXR0ZW50aW9uIHRvIGRlcHJlY2F0aW9uIHdhcm5pbmdzIHlvdXIgY29kZQorICBzaG91bGQgYWxyZWFkeSBiZSBzcGVjaWZ5aW5nIGFueSBhZGRpdGlvbmFsIGFyZ3VtZW50cyB2aWEga2V5d29yZHMuCisKKyogU3RyaW5ncyBiZXR3ZWVuIGBgZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCAuLi5gYCBzdGF0ZW1lbnRzIG5vdyAqYWx3YXlzKiByYWlzZQorICBhIDpleGM6YFN5bnRheEVycm9yYC4gIFByZXZpb3VzbHkgaWYgdGhlcmUgd2FzIG5vIGxlYWRpbmcgZG9jc3RyaW5nLCBhbgorICBpbnRlcnN0aXRpYWwgc3RyaW5nIHdvdWxkIHNvbWV0aW1lcyBiZSBpZ25vcmVkLiAgVGhpcyBicmluZ3MgQ1B5dGhvbiBpbnRvCisgIGNvbXBsaWFuY2Ugd2l0aCB0aGUgbGFuZ3VhZ2Ugc3BlYzsgSnl0aG9uIGFuZCBQeVB5IGFscmVhZHkgd2VyZS4KKyAgKDppc3N1ZTpgMTc0MzRgKS4KKworKiA6bWV0aDpgc3NsLlNTTFNvY2tldC5nZXRwZWVyY2VydGAgYW5kIDptZXRoOmBzc2wuU1NMU29ja2V0LmRvX2hhbmRzaGFrZWAKKyAgbm93IHJhaXNlIGFuIDpleGM6YE9TRXJyb3JgIHdpdGggYGBFTk9UQ09OTmBgIHdoZW4gdGhlIGBgU1NMU29ja2V0YGAgaXMgbm90CisgIGNvbm5lY3RlZCwgaW5zdGVhZCBvZiB0aGUgcHJldmlvdXMgYmVoYXZpb3Igb2YgcmFpc2luZyBhbgorICA6ZXhjOmBBdHRyaWJ1dGVFcnJvcmAuICBJbiBhZGRpdGlvbiwgOm1ldGg6YH5zc2wuU1NMU29ja2V0LmdldHBlZXJjZXJ0YAorICB3aWxsIHJhaXNlIGEgOmV4YzpgVmFsdWVFcnJvcmAgaWYgdGhlIGhhbmRzaGFrZSBoYXMgbm90IHlldCBiZWVuIGRvbmUuCisKKyogOmZ1bmM6YGJhc2U2NC5iMzJkZWNvZGVgIG5vdyByYWlzZXMgYSA6ZXhjOmBiaW5hc2NpaS5FcnJvcmAgd2hlbiB0aGUKKyAgaW5wdXQgc3RyaW5nIGNvbnRhaW5zIG5vbi1iMzItYWxwaGFiZXQgY2hhcmFjdGVycywgaW5zdGVhZCBvZiBhCisgIDpleGM6YFR5cGVFcnJvcmAuICBUaGlzIHBhcnRpY3VsYXIgOmV4YzpgVHlwZUVycm9yYCB3YXMgbWlzc2VkIHdoZW4gdGhlIG90aGVyCisgIDpleGM6YFR5cGVFcnJvcmBcIHMgd2VyZSBjb252ZXJ0ZWQuICAoQ29udHJpYnV0ZWQgYnkgU2VyaGl5IFN0b3JjaGFrYSBpbgorICA6aXNzdWU6YDE4MDExYC4pICBOb3RlOiB0aGlzIGNoYW5nZSB3YXMgYWxzbyBpbmFkdmVydGVudGx5IGFwcGxpZWQgaW4gUHl0aG9uCisgIDMuMy4zLgorCisqIFRoZSA6YXR0cjpgfmNnaS5GaWVsZFN0b3JhZ2UuZmlsZWAgYXR0cmlidXRlIGlzIG5vdyBhdXRvbWF0aWNhbGx5IGNsb3NlZCB3aGVuCisgIHRoZSBjcmVhdGluZyA6Y2xhc3M6YGNnaS5GaWVsZFN0b3JhZ2VgIGluc3RhbmNlIGlzIGdhcmJhZ2UgY29sbGVjdGVkLiBJZiB5b3UKKyAgd2VyZSBwdWxsaW5nIHRoZSBmaWxlIG9iamVjdCBvdXQgc2VwYXJhdGVseSBmcm9tIHRoZSA6Y2xhc3M6YGNnaS5GaWVsZFN0b3JhZ2VgCisgIGluc3RhbmNlIGFuZCBub3Qga2VlcGluZyB0aGUgaW5zdGFuY2UgYWxpdmUsIHRoZW4geW91IHNob3VsZCBlaXRoZXIgc3RvcmUgdGhlCisgIGVudGlyZSA6Y2xhc3M6YGNnaS5GaWVsZFN0b3JhZ2VgIGluc3RhbmNlIG9yIHJlYWQgdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlCisgIGJlZm9yZSB0aGUgOmNsYXNzOmBjZ2kuRmllbGRTdG9yYWdlYCBpbnN0YW5jZSBpcyBnYXJiYWdlIGNvbGxlY3RlZC4KKworKiBDYWxsaW5nIGBgcmVhZGBgIG9yIGBgd3JpdGVgYCBvbiBhIGNsb3NlZCBTU0wgc29ja2V0IG5vdyByYWlzZXMgYW4KKyAgaW5mb3JtYXRpdmUgOmV4YzpgVmFsdWVFcnJvcmAgcmF0aGVyIHRoYW4gdGhlIHByZXZpb3VzIG1vcmUgbXlzdGVyaW91cworICA6ZXhjOmBBdHRyaWJ1dGVFcnJvcmAgKDppc3N1ZTpgOTE3N2ApLgorCisqIDptZXRoOmBzbGljZS5pbmRpY2VzYCBubyBsb25nZXIgcHJvZHVjZXMgYW4gOmV4YzpgT3ZlcmZsb3dFcnJvcmAgZm9yIGh1Z2UKKyAgdmFsdWVzLiAgQXMgYSBjb25zZXF1ZW5jZSBvZiB0aGlzIGZpeCwgOm1ldGg6YHNsaWNlLmluZGljZXNgIG5vdyByYWlzZXMgYQorICA6ZXhjOmBWYWx1ZUVycm9yYCBpZiBnaXZlbiBhIG5lZ2F0aXZlIGxlbmd0aDsgcHJldmlvdXNseSBpdCByZXR1cm5lZCBub25zZW5zZQorICB2YWx1ZXMgKDppc3N1ZTpgMTQ3OTRgKS4KKworKiBUaGUgOmNsYXNzOmBjb21wbGV4YCBjb25zdHJ1Y3RvciwgdW5saWtlIHRoZSA6bW9kOmBjbWF0aGAgZnVuY3Rpb25zLCB3YXMKKyAgaW5jb3JyZWN0bHkgYWNjZXB0aW5nIDpjbGFzczpgZmxvYXRgIHZhbHVlcyBpZiBhbiBvYmplY3QncyBgYF9fY29tcGxleF9fYGAKKyAgc3BlY2lhbCBtZXRob2QgcmV0dXJuZWQgb25lLiAgVGhpcyBub3cgcmFpc2VzIGEgOmV4YzpgVHlwZUVycm9yYC4KKyAgKDppc3N1ZTpgMTYyOTBgLikKKworKiBUaGUgOmNsYXNzOmBpbnRgIGNvbnN0cnVjdG9yIGluIDMuMiBhbmQgMy4zIGVycm9uZW91c2x5IGFjY2VwdHMgOmNsYXNzOmBmbG9hdGAKKyAgdmFsdWVzIGZvciB0aGUgKmJhc2UqIHBhcmFtZXRlci4gIEl0IGlzIHVubGlrZWx5IGFueW9uZSB3YXMgZG9pbmcgdGhpcywgYnV0CisgIGlmIHNvLCBpdCB3aWxsIG5vdyByYWlzZSBhIDpleGM6YFR5cGVFcnJvcmAgKDppc3N1ZTpgMTY3NzJgKS4KKworKiBEZWZhdWx0cyBmb3Iga2V5d29yZC1vbmx5IGFyZ3VtZW50cyBhcmUgbm93IGV2YWx1YXRlZCAqYWZ0ZXIqIGRlZmF1bHRzIGZvcgorICByZWd1bGFyIGtleXdvcmQgYXJndW1lbnRzLCBpbnN0ZWFkIG9mIGJlZm9yZS4gIEhvcGVmdWxseSBubyBvbmUgd3JvdGUgYW55CisgIGNvZGUgdGhhdCBkZXBlbmRzIG9uIHRoZSBwcmV2aW91cyBidWdneSBiZWhhdmlvciAoOmlzc3VlOmAxNjk2N2ApLgorCisqIFN0YWxlIHRocmVhZCBzdGF0ZXMgYXJlIG5vdyBjbGVhcmVkIGFmdGVyIDpmdW5jOmB+b3MuZm9ya2AuICBUaGlzIG1heSBjYXVzZQorICBzb21lIHN5c3RlbSByZXNvdXJjZXMgdG8gYmUgcmVsZWFzZWQgdGhhdCBwcmV2aW91c2x5IHdlcmUgaW5jb3JyZWN0bHkga2VwdAorICBwZXJwZXR1YWxseSBhbGl2ZSAoZm9yIGV4YW1wbGUsIGRhdGFiYXNlIGNvbm5lY3Rpb25zIGtlcHQgaW4gdGhyZWFkLWxvY2FsCisgIHN0b3JhZ2UpLiAgKDppc3N1ZTpgMTcwOTRgLikKKworKiBQYXJhbWV0ZXIgbmFtZXMgaW4gYGBfX2Fubm90YXRpb25zX19gYCBkaWN0cyBhcmUgbm93IG1hbmdsZWQgcHJvcGVybHksCisgIHNpbWlsYXJseSB0byBgYF9fa3dkZWZhdWx0c19fYGAuICAoQ29udHJpYnV0ZWQgYnkgWXVyeSBTZWxpdmFub3YgaW4KKyAgOmlzc3VlOmAyMDYyNWAuKQorCisqIDphdHRyOmBoYXNobGliLmhhc2gubmFtZWAgbm93IGFsd2F5cyByZXR1cm5zIHRoZSBpZGVudGlmaWVyIGluIGxvd2VyIGNhc2UuCisgIFByZXZpb3VzbHkgc29tZSBidWlsdGluIGhhc2hlcyBoYWQgdXBwZXJjYXNlIG5hbWVzLCBidXQgbm93IHRoYXQgaXQgaXMgYQorICBmb3JtYWwgcHVibGljIGludGVyZmFjZSB0aGUgbmFtaW5nIGhhcyBiZWVuIG1hZGUgY29uc2lzdGVudCAoOmlzc3VlOmAxODUzMmApLgorCisqIEJlY2F1c2UgOm1vZDpgdW5pdHRlc3QuVGVzdFN1aXRlYCBub3cgZHJvcHMgcmVmZXJlbmNlcyB0byB0ZXN0cyBhZnRlciB0aGV5CisgIGFyZSBydW4sIHRlc3QgaGFybmVzc2VzIHRoYXQgcmUtdXNlIGEgOmNsYXNzOmB+dW5pdHRlc3QuVGVzdFN1aXRlYCB0byByZS1ydW4KKyAgYSBzZXQgb2YgdGVzdHMgbWF5IGZhaWwuICAgVGVzdCBzdWl0ZXMgc2hvdWxkIG5vdCBiZSByZS11c2VkIGluIHRoaXMgZmFzaGlvbgorICBzaW5jZSBpdCBtZWFucyBzdGF0ZSBpcyByZXRhaW5lZCBiZXR3ZWVuIHRlc3QgcnVucywgYnJlYWtpbmcgdGhlIHRlc3QKKyAgaXNvbGF0aW9uIHRoYXQgOm1vZDpgdW5pdHRlc3RgIGlzIGRlc2lnbmVkIHRvIHByb3ZpZGUuICBIb3dldmVyLCBpZiB0aGUgbGFjaworICBvZiBpc29sYXRpb24gaXMgY29uc2lkZXJlZCBhY2NlcHRhYmxlLCB0aGUgb2xkIGJlaGF2aW9yIGNhbiBiZSByZXN0b3JlZCBieQorICBjcmVhdGluZyBhIDptb2Q6YH51bml0dGVzdC5UZXN0U3VpdGVgIHN1YmNsYXNzIHRoYXQgZGVmaW5lcyBhCisgIGBgX3JlbW92ZVRlc3RBdEluZGV4YGAgbWV0aG9kIHRoYXQgZG9lcyBub3RoaW5nIChzZWUKKyAgOm1ldGg6YC5UZXN0U3VpdGUuX19pdGVyX19gKSAoOmlzc3VlOmAxMTc5OGApLgorCisqIDptb2Q6YHVuaXR0ZXN0YCBub3cgdXNlcyA6bW9kOmBhcmdwYXJzZWAgZm9yIGNvbW1hbmQgbGluZSBwYXJzaW5nLiAgVGhlcmUgYXJlCisgIGNlcnRhaW4gaW52YWxpZCBjb21tYW5kIGZvcm1zIHRoYXQgdXNlZCB0byB3b3JrIHRoYXQgYXJlIG5vIGxvbmdlciBhbGxvd2VkOworICBpbiB0aGVvcnkgdGhpcyBzaG91bGQgbm90IGNhdXNlIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgaXNzdWVzIHNpbmNlIHRoZQorICBkaXNhbGxvd2VkIGNvbW1hbmQgZm9ybXMgZGlkbid0IG1ha2UgYW55IHNlbnNlIGFuZCBhcmUgdW5saWtlbHkgdG8gYmUgaW4gdXNlLgorCisqIFRoZSA6ZnVuYzpgcmUuc3BsaXRgLCA6ZnVuYzpgcmUuZmluZGFsbGAsIGFuZCA6ZnVuYzpgcmUuc3ViYCBmdW5jdGlvbnMsIGFuZAorICB0aGUgOm1ldGg6YH5yZS5tYXRjaC5ncm91cGAgYW5kIDptZXRoOmB+cmUubWF0Y2guZ3JvdXBzYCBtZXRob2RzIG9mCisgIGBgbWF0Y2hgYCBvYmplY3RzIG5vdyBhbHdheXMgcmV0dXJuIGEgKmJ5dGVzKiBvYmplY3Qgd2hlbiB0aGUgc3RyaW5nCisgIHRvIGJlIG1hdGNoZWQgaXMgYSA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgLiAgUHJldmlvdXNseSB0aGUgcmV0dXJuIHR5cGUKKyAgbWF0Y2hlZCB0aGUgaW5wdXQgdHlwZSwgc28gaWYgeW91ciBjb2RlIHdhcyBkZXBlbmRpbmcgb24gdGhlIHJldHVybiB2YWx1ZQorICBiZWluZywgc2F5LCBhIGBgYnl0ZWFycmF5YGAsIHlvdSB3aWxsIG5lZWQgdG8gY2hhbmdlIHlvdXIgY29kZS4KKworKiA6bW9kOmBhdWRpb29wYCBmdW5jdGlvbnMgbm93IHJhaXNlIGFuIGVycm9yIGltbWVkaWF0ZWx5IGlmIHBhc3NlZCBzdHJpbmcKKyAgaW5wdXQsIGluc3RlYWQgb2YgZmFpbGluZyByYW5kb21seSBsYXRlciBvbiAoOmlzc3VlOmAxNjY4NWApLgorCisqIFRoZSBuZXcgKmNvbnZlcnRfY2hhcnJlZnMqIGFyZ3VtZW50IHRvIDpjbGFzczpgfmh0bWwucGFyc2VyLkhUTUxQYXJzZXJgCisgIGN1cnJlbnRseSBkZWZhdWx0cyB0byBgYEZhbHNlYGAgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIGJ1dCB3aWxsCisgIGV2ZW50dWFsbHkgYmUgY2hhbmdlZCB0byBkZWZhdWx0IHRvIGBgVHJ1ZWBgLiAgSXQgaXMgcmVjb21tZW5kZWQgdGhhdCB5b3UgYWRkCisgIHRoaXMga2V5d29yZCwgd2l0aCB0aGUgYXBwcm9wcmlhdGUgdmFsdWUsIHRvIGFueQorICA6Y2xhc3M6YH5odG1sLnBhcnNlci5IVE1MUGFyc2VyYCBjYWxscyBpbiB5b3VyIGNvZGUgKDppc3N1ZTpgMTM2MzNgKS4KKworKiBTaW5jZSB0aGUgKmRpZ2VzdG1vZCogYXJndW1lbnQgdG8gdGhlIDpmdW5jOmBobWFjLm5ld2AgZnVuY3Rpb24gd2lsbCBpbiB0aGUKKyAgZnV0dXJlIGhhdmUgbm8gZGVmYXVsdCwgYWxsIGNhbGxzIHRvIDpmdW5jOmBobWFjLm5ld2Agc2hvdWxkIGJlIGNoYW5nZWQgdG8KKyAgZXhwbGljaXRseSBzcGVjaWZ5IGEgKmRpZ2VzdG1vZCogKDppc3N1ZTpgMTcyNzZgKS4KKworKiBDYWxsaW5nIDpmdW5jOmBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXJgIHdpdGggdGhlIGBgU09gYCBrZXksIG9yIGxvb2tpbmcKKyAgYGBTT2BgIHVwIGluIHRoZSByZXN1bHRzIG9mIGEgY2FsbCB0byA6ZnVuYzpgc3lzY29uZmlnLmdldF9jb25maWdfdmFyc2AKKyAgaXMgZGVwcmVjYXRlZC4gIFRoaXMga2V5IHNob3VsZCBiZSByZXBsYWNlZCBieSBgYEVYVF9TVUZGSVhgYCBvcgorICBgYFNITElCX1NVRkZJWGBgLCBkZXBlbmRpbmcgb24gdGhlIGNvbnRleHQgKDppc3N1ZTpgMTk1NTVgKS4KKworKiBBbnkgY2FsbHMgdG8gYGBvcGVuYGAgZnVuY3Rpb25zIHRoYXQgc3BlY2lmeSBgYFVgYCBzaG91bGQgYmUgbW9kaWZpZWQuCisgIGBgVWBgIGlzIGluZWZmZWN0aXZlIGluIFB5dGhvbjMgYW5kIHdpbGwgZXZlbnR1YWxseSByYWlzZSBhbiBlcnJvciBpZiB1c2VkLgorICBEZXBlbmRpbmcgb24gdGhlIGZ1bmN0aW9uLCB0aGUgZXF1aXZhbGVudCBvZiBpdHMgb2xkIFB5dGhvbjIgYmVoYXZpb3IgY2FuIGJlCisgIGFjaGlldmVkIHVzaW5nIGVpdGhlciBhICpuZXdsaW5lKiBhcmd1bWVudCwgb3IgaWYgbmVjZXNzYXJ5IGJ5IHdyYXBwaW5nIHRoZQorICBzdHJlYW0gaW4gOm1vZDpgfmlvLlRleHRJT1dyYXBwZXJgIHRvIHVzZSBpdHMgKm5ld2xpbmUqIGFyZ3VtZW50CisgICg6aXNzdWU6YDE1MjA0YCkuCisKKyogSWYgeW91IHVzZSA6cmVmOmBweXZlbnYgPHNjcmlwdHMtcHl2ZW52PmAgaW4gYSBzY3JpcHQgYW5kIGRlc2lyZSB0aGF0IHBpcAorICAqbm90KiBiZSBpbnN0YWxsZWQsIHlvdSBtdXN0IGFkZCBgYC0td2l0aG91dC1waXBgYCB0byB5b3VyIGNvbW1hbmQKKyAgaW52b2NhdGlvbi4KKworKiBUaGUgZGVmYXVsdCBiZWhhdmlvciBvZiA6ZnVuYzpganNvbi5kdW1wYCBhbmQgOmZ1bmM6YGpzb24uZHVtcHNgIHdoZW4KKyAgYW4gaW5kZW50IGlzIHNwZWNpZmllZCBoYXMgY2hhbmdlZDogaXQgbm8gbG9uZ2VyIHByb2R1Y2VzIHRyYWlsaW5nCisgIHNwYWNlcyBhZnRlciB0aGUgaXRlbSBzZXBhcmF0aW5nIGNvbW1hcyBhdCB0aGUgZW5kcyBvZiBsaW5lcy4gIFRoaXMKKyAgd2lsbCBtYXR0ZXIgb25seSBpZiB5b3UgaGF2ZSB0ZXN0cyB0aGF0IGFyZSBkb2luZyB3aGl0ZS1zcGFjZS1zZW5zaXRpdmUKKyAgY29tcGFyaXNvbnMgb2Ygc3VjaCBvdXRwdXQgKDppc3N1ZTpgMTYzMzNgKS4KKworKiA6bW9kOmBkb2N0ZXN0YCBub3cgbG9va3MgZm9yIGRvY3Rlc3RzIGluIGV4dGVuc2lvbiBtb2R1bGUgYGBfX2RvY19fYGAKKyAgc3RyaW5ncywgc28gaWYgeW91ciBkb2N0ZXN0IHRlc3QgZGlzY292ZXJ5IGluY2x1ZGVzIGV4dGVuc2lvbiBtb2R1bGVzIHRoYXQKKyAgaGF2ZSB0aGluZ3MgdGhhdCBsb29rIGxpa2UgZG9jdGVzdHMgaW4gdGhlbSB5b3UgbWF5IHNlZSB0ZXN0IGZhaWx1cmVzIHlvdSd2ZQorICBuZXZlciBzZWVuIGJlZm9yZSB3aGVuIHJ1bm5pbmcgeW91ciB0ZXN0cyAoOmlzc3VlOmAzMTU4YCkuCisKKyogVGhlIDptb2Q6YGNvbGxlY3Rpb25zLmFiY2AgbW9kdWxlIGhhcyBiZWVuIHNsaWdodGx5IHJlZmFjdG9yZWQgYXMKKyAgcGFydCBvZiB0aGUgUHl0aG9uIHN0YXJ0dXAgaW1wcm92ZW1lbnRzLiAgQXMgYSBjb25zZXF1ZW5jZSBvZiB0aGlzLCBpdCBpcyBubworICBsb25nZXIgdGhlIGNhc2UgdGhhdCBpbXBvcnRpbmcgOm1vZDpgY29sbGVjdGlvbnNgIGF1dG9tYXRpY2FsbHkgaW1wb3J0cworICA6bW9kOmBjb2xsZWN0aW9ucy5hYmNgLiAgSWYgeW91ciBwcm9ncmFtIGRlcGVuZGVkIG9uIHRoZSAodW5kb2N1bWVudGVkKQorICBpbXBsaWNpdCBpbXBvcnQsIHlvdSB3aWxsIG5lZWQgdG8gYWRkIGFuIGV4cGxpY2l0IGBgaW1wb3J0IGNvbGxlY3Rpb25zLmFiY2BgCisgICg6aXNzdWU6YDIwNzg0YCkuCisKKworQ2hhbmdlcyBpbiB0aGUgQyBBUEkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogOmM6ZnVuYzpgUHlFdmFsX0V2YWxGcmFtZUV4YCwgOmM6ZnVuYzpgUHlPYmplY3RfUmVwcmAsIGFuZAorICA6YzpmdW5jOmBQeU9iamVjdF9TdHJgLCBhbG9uZyB3aXRoIHNvbWUgb3RoZXIgaW50ZXJuYWwgQyBBUElzLCBub3cgaW5jbHVkZQorICBhIGRlYnVnZ2luZyBhc3NlcnRpb24gdGhhdCBlbnN1cmVzIHRoZXkgYXJlIG5vdCB1c2VkIGluIHNpdHVhdGlvbnMgd2hlcmUKKyAgdGhleSBtYXkgc2lsZW50bHkgZGlzY2FyZCBhIGN1cnJlbnRseSBhY3RpdmUgZXhjZXB0aW9uLiBJbiBjYXNlcyB3aGVyZQorICBkaXNjYXJkaW5nIHRoZSBhY3RpdmUgZXhjZXB0aW9uIGlzIGV4cGVjdGVkIGFuZCBkZXNpcmVkIChmb3IgZXhhbXBsZSwKKyAgYmVjYXVzZSBpdCBoYXMgYWxyZWFkeSBiZWVuIHNhdmVkIGxvY2FsbHkgd2l0aCA6YzpmdW5jOmBQeUVycl9GZXRjaGAgb3IKKyAgaXMgYmVpbmcgZGVsaWJlcmF0ZWx5IHJlcGxhY2VkIHdpdGggYSBkaWZmZXJlbnQgZXhjZXB0aW9uKSwgYW4gZXhwbGljaXQKKyAgOmM6ZnVuYzpgUHlFcnJfQ2xlYXJgIGNhbGwgd2lsbCBiZSBuZWVkZWQgdG8gYXZvaWQgdHJpZ2dlcmluZyB0aGUKKyAgYXNzZXJ0aW9uIHdoZW4gaW52b2tpbmcgdGhlc2Ugb3BlcmF0aW9ucyAoZGlyZWN0bHkgb3IgaW5kaXJlY3RseSkgYW5kCisgIHJ1bm5pbmcgYWdhaW5zdCBhIHZlcnNpb24gb2YgUHl0aG9uIHRoYXQgaXMgY29tcGlsZWQgd2l0aCBhc3NlcnRpb25zCisgIGVuYWJsZWQuCisKKyogOmM6ZnVuYzpgUHlFcnJfU2V0SW1wb3J0RXJyb3JgIG5vdyBzZXRzIDpleGM6YFR5cGVFcnJvcmAgd2hlbiBpdHMgKiptc2cqKgorICBhcmd1bWVudCBpcyBub3Qgc2V0LiBQcmV2aW91c2x5IG9ubHkgYGBOVUxMYGAgd2FzIHJldHVybmVkIHdpdGggbm8gZXhjZXB0aW9uCisgIHNldC4KKworKiBUaGUgcmVzdWx0IG9mIHRoZSA6YzpkYXRhOmBQeU9TX1JlYWRsaW5lRnVuY3Rpb25Qb2ludGVyYCBjYWxsYmFjayBtdXN0CisgIG5vdyBiZSBhIHN0cmluZyBhbGxvY2F0ZWQgYnkgOmM6ZnVuYzpgUHlNZW1fUmF3TWFsbG9jYCBvcgorICA6YzpmdW5jOmBQeU1lbV9SYXdSZWFsbG9jYCwgb3IgKk5VTEwqIGlmIGFuIGVycm9yIG9jY3VycmVkLCBpbnN0ZWFkIG9mIGEKKyAgc3RyaW5nIGFsbG9jYXRlZCBieSA6YzpmdW5jOmBQeU1lbV9NYWxsb2NgIG9yIDpjOmZ1bmM6YFB5TWVtX1JlYWxsb2NgCisgICg6aXNzdWU6YDE2NzQyYCkKKworKiA6YzpmdW5jOmBQeVRocmVhZF9zZXRfa2V5X3ZhbHVlYCBub3cgYWx3YXlzIHNldCB0aGUgdmFsdWUuIEluIFB5dGhvbgorICAzLjMsIHRoZSBmdW5jdGlvbiBkaWQgbm90aGluZyBpZiB0aGUga2V5IGFscmVhZHkgZXhpc3RzIChpZiB0aGUgY3VycmVudAorICB2YWx1ZSBpcyBhIG5vbi1OVUxMIHBvaW50ZXIpLgorCisqIFRoZSBgYGZfdHN0YXRlYGAgKHRocmVhZCBzdGF0ZSkgZmllbGQgb2YgdGhlIDpjOnR5cGU6YFB5RnJhbWVPYmplY3RgCisgIHN0cnVjdHVyZSBoYXMgYmVlbiByZW1vdmVkIHRvIGZpeCBhIGJ1Zzogc2VlIDppc3N1ZTpgMTQ0MzJgIGZvciB0aGUKKyAgcmF0aW9uYWxlLgorCitDaGFuZ2VkIGluIDMuNC4zCis9PT09PT09PT09PT09PT09CisKKy4uIF9wZXAtNDc2OgorCitQRVAgNDc2OiBFbmFibGluZyBjZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gYnkgZGVmYXVsdCBmb3Igc3RkbGliIGh0dHAgY2xpZW50cworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworOm1vZDpgaHR0cC5jbGllbnRgIGFuZCBtb2R1bGVzIHdoaWNoIHVzZSBpdCwgc3VjaCBhcyA6bW9kOmB1cmxsaWIucmVxdWVzdGAgYW5kCis6bW9kOmB4bWxycGMuY2xpZW50YCwgd2lsbCBub3cgdmVyaWZ5IHRoYXQgdGhlIHNlcnZlciBwcmVzZW50cyBhIGNlcnRpZmljYXRlCit3aGljaCBpcyBzaWduZWQgYnkgYSBDQSBpbiB0aGUgcGxhdGZvcm0gdHJ1c3Qgc3RvcmUgYW5kIHdob3NlIGhvc3RuYW1lIG1hdGNoZXMKK3RoZSBob3N0bmFtZSBiZWluZyByZXF1ZXN0ZWQgYnkgZGVmYXVsdCwgc2lnbmlmaWNhbnRseSBpbXByb3Zpbmcgc2VjdXJpdHkgZm9yCittYW55IGFwcGxpY2F0aW9ucy4KKworRm9yIGFwcGxpY2F0aW9ucyB3aGljaCByZXF1aXJlIHRoZSBvbGQgcHJldmlvdXMgYmVoYXZpb3IsIHRoZXkgY2FuIHBhc3MgYW4KK2FsdGVybmF0ZSBjb250ZXh0OjoKKworICAgIGltcG9ydCB1cmxsaWIucmVxdWVzdAorICAgIGltcG9ydCBzc2wKKworICAgICMgVGhpcyBkaXNhYmxlcyBhbGwgdmVyaWZpY2F0aW9uCisgICAgY29udGV4dCA9IHNzbC5fY3JlYXRlX3VudmVyaWZpZWRfY29udGV4dCgpCisKKyAgICAjIFRoaXMgYWxsb3dzIHVzaW5nIGEgc3BlY2lmaWMgY2VydGlmaWNhdGUgZm9yIHRoZSBob3N0LCB3aGljaCBkb2Vzbid0IG5lZWQKKyAgICAjIHRvIGJlIGluIHRoZSB0cnVzdCBzdG9yZQorICAgIGNvbnRleHQgPSBzc2wuY3JlYXRlX2RlZmF1bHRfY29udGV4dChjYWZpbGU9Ii9wYXRoL3RvL2ZpbGUuY3J0IikKKworICAgIHVybGxpYi5yZXF1ZXN0LnVybG9wZW4oImh0dHBzOi8vaW52YWxpZC1jZXJ0IiwgY29udGV4dD1jb250ZXh0KQpkaWZmIC0tZ2l0IGEvRG9jL3doYXRzbmV3L2NoYW5nZWxvZy5yc3QgYi9Eb2Mvd2hhdHNuZXcvY2hhbmdlbG9nLnJzdAppbmRleCA1N2UyZGFiLi4wN2Y5MDk0IDEwMDY0NAotLS0gYS9Eb2Mvd2hhdHNuZXcvY2hhbmdlbG9nLnJzdAorKysgYi9Eb2Mvd2hhdHNuZXcvY2hhbmdlbG9nLnJzdApAQCAtMyw0ICszLDMgQEAKICsrKysrKysrKwogCiAuLiBtaXNjbmV3czo6IC4uLy4uL01pc2MvTkVXUwotCmRpZmYgLS1naXQgYS9Eb2Mvd2hhdHNuZXcvaW5kZXgucnN0IGIvRG9jL3doYXRzbmV3L2luZGV4LnJzdAppbmRleCBiYzEyMDZiLi4yOTkwMmU0IDEwMDY0NAotLS0gYS9Eb2Mvd2hhdHNuZXcvaW5kZXgucnN0CisrKyBiL0RvYy93aGF0c25ldy9pbmRleC5yc3QKQEAgLTExLDYgKzExLDcgQEAKIC4uIHRvY3RyZWU6OgogICAgOm1heGRlcHRoOiAyCiAKKyAgIDMuNC5yc3QKICAgIDMuMy5yc3QKICAgIDMuMi5yc3QKICAgIDMuMS5yc3QKZGlmZiAtLWdpdCBhL0dyYW1tYXIvR3JhbW1hciBiL0dyYW1tYXIvR3JhbW1hcgppbmRleCBkN2FhZmZkLi4wNWMzMTgxIDEwMDY0NAotLS0gYS9HcmFtbWFyL0dyYW1tYXIKKysrIGIvR3JhbW1hci9HcmFtbWFyCkBAIC03LDggKzcsOCBAQAogIyAgICAgICAgd2l0aCBzb21lb25lIHdobyBjYW47IGFzayBhcm91bmQgb24gcHl0aG9uLWRldiBmb3IgaGVscC4gIEZyZWQKICMgICAgICAgIERyYWtlIDxmZHJha2VAYWNtLm9yZz4gd2lsbCBwcm9iYWJseSBiZSBsaXN0ZW5pbmcgdGhlcmUuCiAKLSMgTk9URSBXRUxMOiBZb3Ugc2hvdWxkIGFsc28gZm9sbG93IGFsbCB0aGUgc3RlcHMgbGlzdGVkIGluIFBFUCAzMDYsCi0jICJIb3cgdG8gQ2hhbmdlIFB5dGhvbidzIEdyYW1tYXIiCisjIE5PVEUgV0VMTDogWW91IHNob3VsZCBhbHNvIGZvbGxvdyBhbGwgdGhlIHN0ZXBzIGxpc3RlZCBhdAorIyBodHRwczovL2RvY3MucHl0aG9uLm9yZy9kZXZndWlkZS9ncmFtbWFyLmh0bWwKIAogIyBTdGFydCBzeW1ib2xzIGZvciB0aGUgZ3JhbW1hcjoKICMgICAgICAgc2luZ2xlX2lucHV0IGlzIGEgc2luZ2xlIGludGVyYWN0aXZlIHN0YXRlbWVudDsKZGlmZiAtLWdpdCBhL0luY2x1ZGUvUHl0aG9uLWFzdC5oIGIvSW5jbHVkZS9QeXRob24tYXN0LmgKaW5kZXggMDBlOTJkMC4uNjdkNjc3YiAxMDA2NDQKLS0tIGEvSW5jbHVkZS9QeXRob24tYXN0LmgKKysrIGIvSW5jbHVkZS9QeXRob24tYXN0LmgKQEAgLTE4Miw4ICsxODIsOSBAQAogICAgICAgICAgICAgICAgICAgU2V0Q29tcF9raW5kPTksIERpY3RDb21wX2tpbmQ9MTAsIEdlbmVyYXRvckV4cF9raW5kPTExLAogICAgICAgICAgICAgICAgICAgWWllbGRfa2luZD0xMiwgWWllbGRGcm9tX2tpbmQ9MTMsIENvbXBhcmVfa2luZD0xNCwKICAgICAgICAgICAgICAgICAgIENhbGxfa2luZD0xNSwgTnVtX2tpbmQ9MTYsIFN0cl9raW5kPTE3LCBCeXRlc19raW5kPTE4LAotICAgICAgICAgICAgICAgICAgRWxsaXBzaXNfa2luZD0xOSwgQXR0cmlidXRlX2tpbmQ9MjAsIFN1YnNjcmlwdF9raW5kPTIxLAotICAgICAgICAgICAgICAgICAgU3RhcnJlZF9raW5kPTIyLCBOYW1lX2tpbmQ9MjMsIExpc3Rfa2luZD0yNCwgVHVwbGVfa2luZD0yNX07CisgICAgICAgICAgICAgICAgICBOYW1lQ29uc3RhbnRfa2luZD0xOSwgRWxsaXBzaXNfa2luZD0yMCwgQXR0cmlidXRlX2tpbmQ9MjEsCisgICAgICAgICAgICAgICAgICBTdWJzY3JpcHRfa2luZD0yMiwgU3RhcnJlZF9raW5kPTIzLCBOYW1lX2tpbmQ9MjQsCisgICAgICAgICAgICAgICAgICBMaXN0X2tpbmQ9MjUsIFR1cGxlX2tpbmQ9MjZ9Owogc3RydWN0IF9leHByIHsKICAgICBlbnVtIF9leHByX2tpbmQga2luZDsKICAgICB1bmlvbiB7CkBAIC0yNzksNiArMjgwLDEwIEBACiAgICAgICAgIH0gQnl0ZXM7CiAgICAgICAgIAogICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgc2luZ2xldG9uIHZhbHVlOworICAgICAgICB9IE5hbWVDb25zdGFudDsKKyAgICAgICAgCisgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICBleHByX3R5IHZhbHVlOwogICAgICAgICAgICAgaWRlbnRpZmllciBhdHRyOwogICAgICAgICAgICAgZXhwcl9jb250ZXh0X3R5IGN0eDsKQEAgLTM1OSwxOCArMzY0LDE4IEBACiAKIHN0cnVjdCBfYXJndW1lbnRzIHsKICAgICBhc2RsX3NlcSAqYXJnczsKLSAgICBpZGVudGlmaWVyIHZhcmFyZzsKLSAgICBleHByX3R5IHZhcmFyZ2Fubm90YXRpb247CisgICAgYXJnX3R5IHZhcmFyZzsKICAgICBhc2RsX3NlcSAqa3dvbmx5YXJnczsKLSAgICBpZGVudGlmaWVyIGt3YXJnOwotICAgIGV4cHJfdHkga3dhcmdhbm5vdGF0aW9uOwotICAgIGFzZGxfc2VxICpkZWZhdWx0czsKICAgICBhc2RsX3NlcSAqa3dfZGVmYXVsdHM7CisgICAgYXJnX3R5IGt3YXJnOworICAgIGFzZGxfc2VxICpkZWZhdWx0czsKIH07CiAKIHN0cnVjdCBfYXJnIHsKICAgICBpZGVudGlmaWVyIGFyZzsKICAgICBleHByX3R5IGFubm90YXRpb247CisgICAgaW50IGxpbmVubzsKKyAgICBpbnQgY29sX29mZnNldDsKIH07CiAKIHN0cnVjdCBfa2V5d29yZCB7CkBAIC01MDksNiArNTE0LDkgQEAKIGV4cHJfdHkgX1B5X1N0cihzdHJpbmcgcywgaW50IGxpbmVubywgaW50IGNvbF9vZmZzZXQsIFB5QXJlbmEgKmFyZW5hKTsKICNkZWZpbmUgQnl0ZXMoYTAsIGExLCBhMiwgYTMpIF9QeV9CeXRlcyhhMCwgYTEsIGEyLCBhMykKIGV4cHJfdHkgX1B5X0J5dGVzKGJ5dGVzIHMsIGludCBsaW5lbm8sIGludCBjb2xfb2Zmc2V0LCBQeUFyZW5hICphcmVuYSk7CisjZGVmaW5lIE5hbWVDb25zdGFudChhMCwgYTEsIGEyLCBhMykgX1B5X05hbWVDb25zdGFudChhMCwgYTEsIGEyLCBhMykKK2V4cHJfdHkgX1B5X05hbWVDb25zdGFudChzaW5nbGV0b24gdmFsdWUsIGludCBsaW5lbm8sIGludCBjb2xfb2Zmc2V0LCBQeUFyZW5hCisgICAgICAgICAgICAgICAgICAgICAgICAgKmFyZW5hKTsKICNkZWZpbmUgRWxsaXBzaXMoYTAsIGExLCBhMikgX1B5X0VsbGlwc2lzKGEwLCBhMSwgYTIpCiBleHByX3R5IF9QeV9FbGxpcHNpcyhpbnQgbGluZW5vLCBpbnQgY29sX29mZnNldCwgUHlBcmVuYSAqYXJlbmEpOwogI2RlZmluZSBBdHRyaWJ1dGUoYTAsIGExLCBhMiwgYTMsIGE0LCBhNSkgX1B5X0F0dHJpYnV0ZShhMCwgYTEsIGEyLCBhMywgYTQsIGE1KQpAQCAtNTQyLDExICs1NTAsMTAgQEAKIGV4Y2VwdGhhbmRsZXJfdHkgX1B5X0V4Y2VwdEhhbmRsZXIoZXhwcl90eSB0eXBlLCBpZGVudGlmaWVyIG5hbWUsIGFzZGxfc2VxICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9keSwgaW50IGxpbmVubywgaW50IGNvbF9vZmZzZXQsIFB5QXJlbmEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmFyZW5hKTsKLSNkZWZpbmUgYXJndW1lbnRzKGEwLCBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNywgYTgpIF9QeV9hcmd1bWVudHMoYTAsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCkKLWFyZ3VtZW50c190eSBfUHlfYXJndW1lbnRzKGFzZGxfc2VxICogYXJncywgaWRlbnRpZmllciB2YXJhcmcsIGV4cHJfdHkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmFyZ2Fubm90YXRpb24sIGFzZGxfc2VxICoga3dvbmx5YXJncywgaWRlbnRpZmllcgotICAgICAgICAgICAgICAgICAgICAgICAgICAga3dhcmcsIGV4cHJfdHkga3dhcmdhbm5vdGF0aW9uLCBhc2RsX3NlcSAqIGRlZmF1bHRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNkbF9zZXEgKiBrd19kZWZhdWx0cywgUHlBcmVuYSAqYXJlbmEpOworI2RlZmluZSBhcmd1bWVudHMoYTAsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYpIF9QeV9hcmd1bWVudHMoYTAsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYpCithcmd1bWVudHNfdHkgX1B5X2FyZ3VtZW50cyhhc2RsX3NlcSAqIGFyZ3MsIGFyZ190eSB2YXJhcmcsIGFzZGxfc2VxICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGt3b25seWFyZ3MsIGFzZGxfc2VxICoga3dfZGVmYXVsdHMsIGFyZ190eSBrd2FyZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzZGxfc2VxICogZGVmYXVsdHMsIFB5QXJlbmEgKmFyZW5hKTsKICNkZWZpbmUgYXJnKGEwLCBhMSwgYTIpIF9QeV9hcmcoYTAsIGExLCBhMikKIGFyZ190eSBfUHlfYXJnKGlkZW50aWZpZXIgYXJnLCBleHByX3R5IGFubm90YXRpb24sIFB5QXJlbmEgKmFyZW5hKTsKICNkZWZpbmUga2V5d29yZChhMCwgYTEsIGEyKSBfUHlfa2V5d29yZChhMCwgYTEsIGEyKQpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9QeXRob24uaCBiL0luY2x1ZGUvUHl0aG9uLmgKaW5kZXggYTc4YTcyMS4uMmRkODI5MCAxMDA2NDQKLS0tIGEvSW5jbHVkZS9QeXRob24uaAorKysgYi9JbmNsdWRlL1B5dGhvbi5oCkBAIC02OCw2ICs2OCw3IEBACiAjaW5jbHVkZSAib2JqZWN0LmgiCiAjaW5jbHVkZSAib2JqaW1wbC5oIgogI2luY2x1ZGUgInR5cGVzbG90cy5oIgorI2luY2x1ZGUgInB5aGFzaC5oIgogCiAjaW5jbHVkZSAicHlkZWJ1Zy5oIgogCmRpZmYgLS1naXQgYS9JbmNsdWRlL2Fic3RyYWN0LmggYi9JbmNsdWRlL2Fic3RyYWN0LmgKaW5kZXggYzk2MjRmMy4uYmJlZGFmZCAxMDA2NDQKLS0tIGEvSW5jbHVkZS9hYnN0cmFjdC5oCisrKyBiL0luY2x1ZGUvYWJzdHJhY3QuaApAQCAtOTUsNyArOTUsNyBAQAogICBudW1lcmljLCBzZXF1ZW5jZSwgYW5kIG1hcHBpbmcuICBFYWNoIHByb3RvY29sIGNvbnNpc3RzIG9mIGEKICAgY29sbGVjdGlvbiBvZiByZWxhdGVkIG9wZXJhdGlvbnMuICBJZiBhbiBvcGVyYXRpb24gdGhhdCBpcyBub3QKICAgcHJvdmlkZWQgYnkgYSBwYXJ0aWN1bGFyIHR5cGUgaXMgaW52b2tlZCwgdGhlbiBhIHN0YW5kYXJkIGV4Y2VwdGlvbiwKLSAgTm90SW1wbGVtZW50ZWRFcnJvciBpcyByYWlzZWQgd2l0aCBhIG9wZXJhdGlvbiBuYW1lIGFzIGFuIGFyZ3VtZW50LgorICBOb3RJbXBsZW1lbnRlZEVycm9yIGlzIHJhaXNlZCB3aXRoIGFuIG9wZXJhdGlvbiBuYW1lIGFzIGFuIGFyZ3VtZW50LgogICBJbiBhZGRpdGlvbiwgZm9yIGNvbnZlbmllbmNlIHRoaXMgaW50ZXJmYWNlIGRlZmluZXMgYSBzZXQgb2YKICAgY29uc3RydWN0b3JzIGZvciBidWlsZGluZyBvYmplY3RzIG9mIGJ1aWx0LWluIHR5cGVzLiAgVGhpcyBpcyBuZWVkZWQKICAgc28gbmV3IG9iamVjdHMgY2FuIGJlIHJldHVybmVkIGZyb20gQyBmdW5jdGlvbnMgdGhhdCBvdGhlcndpc2UgdHJlYXQKQEAgLTE0NCw3ICsxNDQsNyBAQAogCiAgICAgIC8qIEltcGxlbWVudGVkIGVsc2V3aGVyZToKIAotICAgICBpbnQgUHlPYmplY3RfSGFzQXR0clN0cmluZyhQeU9iamVjdCAqbywgY2hhciAqYXR0cl9uYW1lKTsKKyAgICAgaW50IFB5T2JqZWN0X0hhc0F0dHJTdHJpbmcoUHlPYmplY3QgKm8sIGNvbnN0IGNoYXIgKmF0dHJfbmFtZSk7CiAKICAgICAgUmV0dXJucyAxIGlmIG8gaGFzIHRoZSBhdHRyaWJ1dGUgYXR0cl9uYW1lLCBhbmQgMCBvdGhlcndpc2UuCiAgICAgIFRoaXMgaXMgZXF1aXZhbGVudCB0byB0aGUgUHl0aG9uIGV4cHJlc3Npb246CkBAIC0xNTYsNyArMTU2LDcgQEAKIAogICAgICAvKiBJbXBsZW1lbnRlZCBlbHNld2hlcmU6CiAKLSAgICAgUHlPYmplY3QqIFB5T2JqZWN0X0dldEF0dHJTdHJpbmcoUHlPYmplY3QgKm8sIGNoYXIgKmF0dHJfbmFtZSk7CisgICAgIFB5T2JqZWN0KiBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKFB5T2JqZWN0ICpvLCBjb25zdCBjaGFyICphdHRyX25hbWUpOwogCiAgICAgIFJldHJpZXZlIGFuIGF0dHJpYnV0ZWQgbmFtZWQgYXR0cl9uYW1lIGZvcm0gb2JqZWN0IG8uCiAgICAgIFJldHVybnMgdGhlIGF0dHJpYnV0ZSB2YWx1ZSBvbiBzdWNjZXNzLCBvciBOVUxMIG9uIGZhaWx1cmUuCkBAIC0xODksNyArMTg5LDcgQEAKIAogICAgICAvKiBJbXBsZW1lbnRlZCBlbHNld2hlcmU6CiAKLSAgICAgaW50IFB5T2JqZWN0X1NldEF0dHJTdHJpbmcoUHlPYmplY3QgKm8sIGNoYXIgKmF0dHJfbmFtZSwgUHlPYmplY3QgKnYpOworICAgICBpbnQgUHlPYmplY3RfU2V0QXR0clN0cmluZyhQeU9iamVjdCAqbywgY29uc3QgY2hhciAqYXR0cl9uYW1lLCBQeU9iamVjdCAqdik7CiAKICAgICAgU2V0IHRoZSB2YWx1ZSBvZiB0aGUgYXR0cmlidXRlIG5hbWVkIGF0dHJfbmFtZSwgZm9yIG9iamVjdCBvLAogICAgICB0byB0aGUgdmFsdWUsIHYuIFJldHVybnMgLTEgb24gZmFpbHVyZS4gIFRoaXMgaXMKQEAgLTIwOSw3ICsyMDksNyBAQAogCiAgICAgIC8qIGltcGxlbWVudGVkIGFzIGEgbWFjcm86CiAKLSAgICAgaW50IFB5T2JqZWN0X0RlbEF0dHJTdHJpbmcoUHlPYmplY3QgKm8sIGNoYXIgKmF0dHJfbmFtZSk7CisgICAgIGludCBQeU9iamVjdF9EZWxBdHRyU3RyaW5nKFB5T2JqZWN0ICpvLCBjb25zdCBjaGFyICphdHRyX25hbWUpOwogCiAgICAgIERlbGV0ZSBhdHRyaWJ1dGUgbmFtZWQgYXR0cl9uYW1lLCBmb3Igb2JqZWN0IG8uIFJldHVybnMKICAgICAgLTEgb24gZmFpbHVyZS4gIFRoaXMgaXMgdGhlIGVxdWl2YWxlbnQgb2YgdGhlIFB5dGhvbgpAQCAtMjg0LDcgKzI4NCw3IEBACiAgICAgICAgKi8KIAogICAgICBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5T2JqZWN0X0NhbGxGdW5jdGlvbihQeU9iamVjdCAqY2FsbGFibGVfb2JqZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpmb3JtYXQsIC4uLik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKTsKIAogICAgICAgIC8qCiAgICAgIENhbGwgYSBjYWxsYWJsZSBQeXRob24gb2JqZWN0LCBjYWxsYWJsZV9vYmplY3QsIHdpdGggYQpAQCAtMjk2LDggKzI5Niw5IEBACiAgICAgICAgKi8KIAogCi0gICAgIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlPYmplY3RfQ2FsbE1ldGhvZChQeU9iamVjdCAqbywgY2hhciAqbWV0aG9kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqZm9ybWF0LCAuLi4pOworICAgICBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5T2JqZWN0X0NhbGxNZXRob2QoUHlPYmplY3QgKm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICptZXRob2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmb3JtYXQsIC4uLik7CiAKICAgICAgICAvKgogICAgICBDYWxsIHRoZSBtZXRob2QgbmFtZWQgbSBvZiBvYmplY3QgbyB3aXRoIGEgdmFyaWFibGUgbnVtYmVyIG9mCkBAIC0zMDgsOCArMzA5LDkgQEAKICAgICAgUHl0aG9uIGV4cHJlc3Npb246IG8ubWV0aG9kKGFyZ3MpLgogICAgICAgICovCiAKLSAgICAgUHlBUElfRlVOQyhQeU9iamVjdCAqKSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKFB5T2JqZWN0ICpvLCBfUHlfSWRlbnRpZmllciAqbWV0aG9kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpmb3JtYXQsIC4uLik7CisgICAgIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgX1B5T2JqZWN0X0NhbGxNZXRob2RJZChQeU9iamVjdCAqbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QeV9JZGVudGlmaWVyICptZXRob2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmb3JtYXQsIC4uLik7CiAKICAgICAgICAvKgogICAgICAgICAgTGlrZSBQeU9iamVjdF9DYWxsTWV0aG9kLCBidXQgZXhwZWN0IGEgX1B5X0lkZW50aWZpZXIqIGFzIHRoZQpAQCAtMzE3LDEzICszMTksMTYgQEAKICAgICAgICAqLwogCiAgICAgIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgX1B5T2JqZWN0X0NhbGxGdW5jdGlvbl9TaXplVChQeU9iamVjdCAqY2FsbGFibGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpmb3JtYXQsIC4uLik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pOwogICAgICBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIF9QeU9iamVjdF9DYWxsTWV0aG9kX1NpemVUKFB5T2JqZWN0ICpvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqZm9ybWF0LCAuLi4pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLik7CiAgICAgIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgX1B5T2JqZWN0X0NhbGxNZXRob2RJZF9TaXplVChQeU9iamVjdCAqbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUHlfSWRlbnRpZmllciAqbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpmb3JtYXQsIC4uLik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLik7CiAKICAgICAgUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKFB5T2JqZWN0ICpjYWxsYWJsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLik7CkBAIC0zMzksMTEgKzM0NCwxMCBAQAogCiAgICAgIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlPYmplY3RfQ2FsbE1ldGhvZE9iakFyZ3MoUHlPYmplY3QgKm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKm1ldGhvZCwgLi4uKTsKLSAgICAgUHlBUElfRlVOQyhQeU9iamVjdCAqKSBfUHlPYmplY3RfQ2FsbE1ldGhvZE9iaklkQXJncyhQeU9iamVjdCAqbywKKyAgICAgUHlBUElfRlVOQyhQeU9iamVjdCAqKSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkT2JqQXJncyhQeU9iamVjdCAqbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IF9QeV9JZGVudGlmaWVyICptZXRob2QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLik7CiAKLQogICAgICAgIC8qCiAgICAgIENhbGwgdGhlIG1ldGhvZCBuYW1lZCBtIG9mIG9iamVjdCBvIHdpdGggYSB2YXJpYWJsZSBudW1iZXIgb2YKICAgICAgQyBhcmd1bWVudHMuICBUaGUgQyBhcmd1bWVudHMgYXJlIHByb3ZpZGVkIGFzIFB5T2JqZWN0ICoKQEAgLTQwNCw3ICs0MDgsOCBAQAogI2RlZmluZSBQeU9iamVjdF9MZW5ndGggUHlPYmplY3RfU2l6ZQogCiAjaWZuZGVmIFB5X0xJTUlURURfQVBJCi0gICAgIFB5QVBJX0ZVTkMoUHlfc3NpemVfdCkgX1B5T2JqZWN0X0xlbmd0aEhpbnQoUHlPYmplY3QgKm8sIFB5X3NzaXplX3QpOworICAgICBQeUFQSV9GVU5DKGludCkgX1B5T2JqZWN0X0hhc0xlbihQeU9iamVjdCAqbyk7CisgICAgIFB5QVBJX0ZVTkMoUHlfc3NpemVfdCkgUHlPYmplY3RfTGVuZ3RoSGludChQeU9iamVjdCAqbywgUHlfc3NpemVfdCk7CiAjZW5kaWYKIAogICAgICAgIC8qCkBAIC00MjksNyArNDM0LDcgQEAKICAgICAgc3RhdGVtZW50OiBvW2tleV09di4KICAgICAgICAqLwogCi0gICAgIFB5QVBJX0ZVTkMoaW50KSBQeU9iamVjdF9EZWxJdGVtU3RyaW5nKFB5T2JqZWN0ICpvLCBjaGFyICprZXkpOworICAgICBQeUFQSV9GVU5DKGludCkgUHlPYmplY3RfRGVsSXRlbVN0cmluZyhQeU9iamVjdCAqbywgY29uc3QgY2hhciAqa2V5KTsKIAogICAgICAgIC8qCiAgICAgIFJlbW92ZSB0aGUgbWFwcGluZyBmb3Igb2JqZWN0LCBrZXksIGZyb20gdGhlIG9iamVjdCAqby4KQEAgLTEwMTYsNyArMTAyMSw3IEBACiAKICAgICAgUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeVNlcXVlbmNlX0Zhc3QoUHlPYmplY3QgKm8sIGNvbnN0IGNoYXIqIG0pOwogICAgICAgIC8qCi0gICAgIFJldHVybnMgdGhlIHNlcXVlbmNlLCBvLCBhcyBhIGxpc3QsIHVubGVzcyBpdCdzIGFscmVhZHkgYQorICAgICBSZXR1cm4gdGhlIHNlcXVlbmNlLCBvLCBhcyBhIGxpc3QsIHVubGVzcyBpdCdzIGFscmVhZHkgYQogICAgICB0dXBsZSBvciBsaXN0LiAgVXNlIFB5U2VxdWVuY2VfRmFzdF9HRVRfSVRFTSB0byBhY2Nlc3MgdGhlCiAgICAgIG1lbWJlcnMgb2YgdGhpcyBsaXN0LCBhbmQgUHlTZXF1ZW5jZV9GYXN0X0dFVF9TSVpFIHRvIGdldCBpdHMgbGVuZ3RoLgogCkBAIC0xMTUxLDcgKzExNTYsNyBAQAogCiAgICAgIC8qIGltcGxlbWVudGVkIGFzIGEgbWFjcm86CiAKLSAgICAgaW50IFB5TWFwcGluZ19EZWxJdGVtU3RyaW5nKFB5T2JqZWN0ICpvLCBjaGFyICprZXkpOworICAgICBpbnQgUHlNYXBwaW5nX0RlbEl0ZW1TdHJpbmcoUHlPYmplY3QgKm8sIGNvbnN0IGNoYXIgKmtleSk7CiAKICAgICAgUmVtb3ZlIHRoZSBtYXBwaW5nIGZvciBvYmplY3QsIGtleSwgZnJvbSB0aGUgb2JqZWN0ICpvLgogICAgICBSZXR1cm5zIC0xIG9uIGZhaWx1cmUuICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8KQEAgLTExNjksNyArMTE3NCw3IEBACiAgICAgICAgKi8KICNkZWZpbmUgUHlNYXBwaW5nX0RlbEl0ZW0oTyxLKSBQeU9iamVjdF9EZWxJdGVtKChPKSwoSykpCiAKLSAgICAgUHlBUElfRlVOQyhpbnQpIFB5TWFwcGluZ19IYXNLZXlTdHJpbmcoUHlPYmplY3QgKm8sIGNoYXIgKmtleSk7CisgICAgIFB5QVBJX0ZVTkMoaW50KSBQeU1hcHBpbmdfSGFzS2V5U3RyaW5nKFB5T2JqZWN0ICpvLCBjb25zdCBjaGFyICprZXkpOwogCiAgICAgICAgLyoKICAgICAgT24gc3VjY2VzcywgcmV0dXJuIDEgaWYgdGhlIG1hcHBpbmcgb2JqZWN0IGhhcyB0aGUga2V5LCBrZXksCkBAIC0xMjEzLDcgKzEyMTgsOCBAQAogCiAgICAgICAgKi8KIAotICAgICBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5TWFwcGluZ19HZXRJdGVtU3RyaW5nKFB5T2JqZWN0ICpvLCBjaGFyICprZXkpOworICAgICBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5TWFwcGluZ19HZXRJdGVtU3RyaW5nKFB5T2JqZWN0ICpvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmtleSk7CiAKICAgICAgICAvKgogICAgICBSZXR1cm4gZWxlbWVudCBvZiBvIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG9iamVjdCwga2V5LCBvciBOVUxMCkBAIC0xMjIxLDcgKzEyMjcsNyBAQAogICAgICBvW2tleV0uCiAgICAgICAgKi8KIAotICAgICBQeUFQSV9GVU5DKGludCkgUHlNYXBwaW5nX1NldEl0ZW1TdHJpbmcoUHlPYmplY3QgKm8sIGNoYXIgKmtleSwKKyAgICAgUHlBUElfRlVOQyhpbnQpIFB5TWFwcGluZ19TZXRJdGVtU3RyaW5nKFB5T2JqZWN0ICpvLCBjb25zdCBjaGFyICprZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICp2YWx1ZSk7CiAKICAgICAgICAvKgpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9hc2RsLmggYi9JbmNsdWRlL2FzZGwuaAppbmRleCA2YmY2MThmLi40OTUxNTNjIDEwMDY0NAotLS0gYS9JbmNsdWRlL2FzZGwuaAorKysgYi9JbmNsdWRlL2FzZGwuaApAQCAtNSw2ICs1LDcgQEAKIHR5cGVkZWYgUHlPYmplY3QgKiBzdHJpbmc7CiB0eXBlZGVmIFB5T2JqZWN0ICogYnl0ZXM7CiB0eXBlZGVmIFB5T2JqZWN0ICogb2JqZWN0OwordHlwZWRlZiBQeU9iamVjdCAqIHNpbmdsZXRvbjsKIAogLyogSXQgd291bGQgYmUgbmljZSBpZiB0aGUgY29kZSBnZW5lcmF0ZWQgYnkgYXNkbF9jLnB5IHdhcyBjb21wbGV0ZWx5CiAgICBpbmRlcGVuZGVudCBvZiBQeXRob24sIGJ1dCBpdCBpcyBhIGdvYWwgdGhlIHJlcXVpcmVzIHRvbyBtdWNoIHdvcmsKQEAgLTI0LDE3ICsyNSwxOSBAQAogICAgIGludCBlbGVtZW50c1sxXTsKIH0gYXNkbF9pbnRfc2VxOwogCi1hc2RsX3NlcSAqYXNkbF9zZXFfbmV3KFB5X3NzaXplX3Qgc2l6ZSwgUHlBcmVuYSAqYXJlbmEpOwotYXNkbF9pbnRfc2VxICphc2RsX2ludF9zZXFfbmV3KFB5X3NzaXplX3Qgc2l6ZSwgUHlBcmVuYSAqYXJlbmEpOworYXNkbF9zZXEgKl9QeV9hc2RsX3NlcV9uZXcoUHlfc3NpemVfdCBzaXplLCBQeUFyZW5hICphcmVuYSk7Cithc2RsX2ludF9zZXEgKl9QeV9hc2RsX2ludF9zZXFfbmV3KFB5X3NzaXplX3Qgc2l6ZSwgUHlBcmVuYSAqYXJlbmEpOwogCiAjZGVmaW5lIGFzZGxfc2VxX0dFVChTLCBJKSAoUyktPmVsZW1lbnRzWyhJKV0KICNkZWZpbmUgYXNkbF9zZXFfTEVOKFMpICgoUykgPT0gTlVMTCA/IDAgOiAoUyktPnNpemUpCiAjaWZkZWYgUHlfREVCVUcKLSNkZWZpbmUgYXNkbF9zZXFfU0VUKFMsIEksIFYpIHsgXAotICAgICAgICBpbnQgX2FzZGxfaSA9IChJKTsgXAotICAgICAgICBhc3NlcnQoKFMpICYmIF9hc2RsX2kgPCAoUyktPnNpemUpOyBcCisjZGVmaW5lIGFzZGxfc2VxX1NFVChTLCBJLCBWKSBcCisgICAgZG8geyBcCisgICAgICAgIFB5X3NzaXplX3QgX2FzZGxfaSA9IChJKTsgXAorICAgICAgICBhc3NlcnQoKFMpICE9IE5VTEwpOyBcCisgICAgICAgIGFzc2VydChfYXNkbF9pIDwgKFMpLT5zaXplKTsgXAogICAgICAgICAoUyktPmVsZW1lbnRzW19hc2RsX2ldID0gKFYpOyBcCi19CisgICAgfSB3aGlsZSAoMCkKICNlbHNlCiAjZGVmaW5lIGFzZGxfc2VxX1NFVChTLCBJLCBWKSAoUyktPmVsZW1lbnRzW0ldID0gKFYpCiAjZW5kaWYKZGlmZiAtLWdpdCBhL0luY2x1ZGUvYXN0LmggYi9JbmNsdWRlL2FzdC5oCmluZGV4IDA1NWU4ZGMuLjZhOGM4MTYgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvYXN0LmgKKysrIGIvSW5jbHVkZS9hc3QuaApAQCAtMTAsNiArMTAsMTEgQEAKICAgICBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzLAogICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCAgICAgICAvKiBkZWNvZGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0gZW5jb2RpbmcgKi8KICAgICBQeUFyZW5hICphcmVuYSk7CitQeUFQSV9GVU5DKG1vZF90eSkgUHlBU1RfRnJvbU5vZGVPYmplY3QoCisgICAgY29uc3Qgbm9kZSAqbiwKKyAgICBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzLAorICAgIFB5T2JqZWN0ICpmaWxlbmFtZSwKKyAgICBQeUFyZW5hICphcmVuYSk7CiAKICNpZmRlZiBfX2NwbHVzcGx1cwogfQpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9ieXRlYXJyYXlvYmplY3QuaCBiL0luY2x1ZGUvYnl0ZWFycmF5b2JqZWN0LmgKaW5kZXggZWNjZDQ0Yy4uYTc1N2I4OCAxMDA2NDQKLS0tIGEvSW5jbHVkZS9ieXRlYXJyYXlvYmplY3QuaAorKysgYi9JbmNsdWRlL2J5dGVhcnJheW9iamVjdC5oCkBAIC0yMiwxMCArMjIsMTEgQEAKICNpZm5kZWYgUHlfTElNSVRFRF9BUEkKIHR5cGVkZWYgc3RydWN0IHsKICAgICBQeU9iamVjdF9WQVJfSEVBRAorICAgIFB5X3NzaXplX3Qgb2JfYWxsb2M7IC8qIEhvdyBtYW55IGJ5dGVzIGFsbG9jYXRlZCBpbiBvYl9ieXRlcyAqLworICAgIGNoYXIgKm9iX2J5dGVzOyAgICAgIC8qIFBoeXNpY2FsIGJhY2tpbmcgYnVmZmVyICovCisgICAgY2hhciAqb2Jfc3RhcnQ7ICAgICAgLyogTG9naWNhbCBzdGFydCBpbnNpZGUgb2JfYnl0ZXMgKi8KICAgICAvKiBYWFgobm5vcndpdHopOiBzaG91bGQgb2JfZXhwb3J0cyBiZSBQeV9zc2l6ZV90PyAqLwotICAgIGludCBvYl9leHBvcnRzOyAvKiBob3cgbWFueSBidWZmZXIgZXhwb3J0cyAqLwotICAgIFB5X3NzaXplX3Qgb2JfYWxsb2M7IC8qIEhvdyBtYW55IGJ5dGVzIGFsbG9jYXRlZCAqLwotICAgIGNoYXIgKm9iX2J5dGVzOworICAgIGludCBvYl9leHBvcnRzOyAgICAgIC8qIEhvdyBtYW55IGJ1ZmZlciBleHBvcnRzICovCiB9IFB5Qnl0ZUFycmF5T2JqZWN0OwogI2VuZGlmCiAKQEAgLTQ5LDggKzUwLDggQEAKICNpZm5kZWYgUHlfTElNSVRFRF9BUEkKICNkZWZpbmUgUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHNlbGYpIFwKICAgICAoYXNzZXJ0KFB5Qnl0ZUFycmF5X0NoZWNrKHNlbGYpKSwgXAotICAgICBQeV9TSVpFKHNlbGYpID8gKChQeUJ5dGVBcnJheU9iamVjdCAqKShzZWxmKSktPm9iX2J5dGVzIDogX1B5Qnl0ZUFycmF5X2VtcHR5X3N0cmluZykKLSNkZWZpbmUgUHlCeXRlQXJyYXlfR0VUX1NJWkUoc2VsZikgIChhc3NlcnQoUHlCeXRlQXJyYXlfQ2hlY2soc2VsZikpLFB5X1NJWkUoc2VsZikpCisgICAgIFB5X1NJWkUoc2VsZikgPyAoKFB5Qnl0ZUFycmF5T2JqZWN0ICopKHNlbGYpKS0+b2Jfc3RhcnQgOiBfUHlCeXRlQXJyYXlfZW1wdHlfc3RyaW5nKQorI2RlZmluZSBQeUJ5dGVBcnJheV9HRVRfU0laRShzZWxmKSAoYXNzZXJ0KFB5Qnl0ZUFycmF5X0NoZWNrKHNlbGYpKSwgUHlfU0laRShzZWxmKSkKIAogUHlBUElfREFUQShjaGFyKSBfUHlCeXRlQXJyYXlfZW1wdHlfc3RyaW5nW107CiAjZW5kaWYKZGlmZiAtLWdpdCBhL0luY2x1ZGUvYnl0ZXNvYmplY3QuaCBiL0luY2x1ZGUvYnl0ZXNvYmplY3QuaAppbmRleCBkN2M3ZmZkLi4wZWU4ZDM2IDEwMDY0NAotLS0gYS9JbmNsdWRlL2J5dGVzb2JqZWN0LmgKKysrIGIvSW5jbHVkZS9ieXRlc29iamVjdC5oCkBAIC04NiwxMSArODYsMTEgQEAKICAgIDAtdGVybWluYXRlZCAocGFzc2luZyBhIHN0cmluZyB3aXRoIGVtYmVkZGVkIE5VTEwgY2hhcmFjdGVycyB3aWxsCiAgICBjYXVzZSBhbiBleGNlcHRpb24pLiAgKi8KIFB5QVBJX0ZVTkMoaW50KSBQeUJ5dGVzX0FzU3RyaW5nQW5kU2l6ZSgKLSAgICByZWdpc3RlciBQeU9iamVjdCAqb2JqLAkvKiBzdHJpbmcgb3IgVW5pY29kZSBvYmplY3QgKi8KLSAgICByZWdpc3RlciBjaGFyICoqcywJCS8qIHBvaW50ZXIgdG8gYnVmZmVyIHZhcmlhYmxlICovCi0gICAgcmVnaXN0ZXIgUHlfc3NpemVfdCAqbGVuCS8qIHBvaW50ZXIgdG8gbGVuZ3RoIHZhcmlhYmxlIG9yIE5VTEwKLQkJCQkgICAob25seSBwb3NzaWJsZSBmb3IgMC10ZXJtaW5hdGVkCi0JCQkJICAgc3RyaW5ncykgKi8KKyAgICBQeU9iamVjdCAqb2JqLCAgICAgIC8qIHN0cmluZyBvciBVbmljb2RlIG9iamVjdCAqLworICAgIGNoYXIgKipzLCAgICAgICAgICAgLyogcG9pbnRlciB0byBidWZmZXIgdmFyaWFibGUgKi8KKyAgICBQeV9zc2l6ZV90ICpsZW4gICAgIC8qIHBvaW50ZXIgdG8gbGVuZ3RoIHZhcmlhYmxlIG9yIE5VTEwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChvbmx5IHBvc3NpYmxlIGZvciAwLXRlcm1pbmF0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ3MpICovCiAgICAgKTsKIAogLyogVXNpbmcgdGhlIGN1cnJlbnQgbG9jYWxlLCBpbnNlcnQgdGhlIHRob3VzYW5kcyBncm91cGluZwpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9jZXZhbC5oIGIvSW5jbHVkZS9jZXZhbC5oCmluZGV4IDY4MTEzNjcuLjQ5MzdmMmMgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvY2V2YWwuaAorKysgYi9JbmNsdWRlL2NldmFsLmgKQEAgLTc3LDcgKzc3LDcgQEAKICAgICBkb3sgaWYoX1B5X01ha2VFbmRSZWNDaGVjayhQeVRocmVhZFN0YXRlX0dFVCgpLT5yZWN1cnNpb25fZGVwdGgpKSAgXAogICAgICAgUHlUaHJlYWRTdGF0ZV9HRVQoKS0+b3ZlcmZsb3dlZCA9IDA7ICBcCiAgICAgfSB3aGlsZSgwKQotUHlBUElfRlVOQyhpbnQpIF9QeV9DaGVja1JlY3Vyc2l2ZUNhbGwoY2hhciAqd2hlcmUpOworUHlBUElfRlVOQyhpbnQpIF9QeV9DaGVja1JlY3Vyc2l2ZUNhbGwoY29uc3QgY2hhciAqd2hlcmUpOwogUHlBUElfREFUQShpbnQpIF9QeV9DaGVja1JlY3Vyc2lvbkxpbWl0OwogCiAjaWZkZWYgVVNFX1NUQUNLQ0hFQ0sKZGlmZiAtLWdpdCBhL0luY2x1ZGUvY29kZWNzLmggYi9JbmNsdWRlL2NvZGVjcy5oCmluZGV4IDYxMTk2NGMuLmRmY2ZhOWMgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvY29kZWNzLmgKKysrIGIvSW5jbHVkZS9jb2RlY3MuaApAQCAtNDksNiArNDksMTAgQEAKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgX1B5Q29kZWNfTG9va3VwKAogICAgICAgIGNvbnN0IGNoYXIgKmVuY29kaW5nCiAgICAgICAgKTsKKworUHlBUElfRlVOQyhpbnQpIF9QeUNvZGVjX0ZvcmdldCgKKyAgICAgICBjb25zdCBjaGFyICplbmNvZGluZworICAgICAgICk7CiAjZW5kaWYKIAogLyogQ29kZWMgcmVnaXN0cnkgZW5jb2RpbmcgY2hlY2sgQVBJLgpAQCAtMTYxLDE0ICsxNjUsMTQgQEAKICAgICAgICBjb25zdCBjaGFyICplbmNvZGluZwogICAgICAgICk7CiAKLS8qIEdldCBhIEluY3JlbWVudGFsRW5jb2RlciBvYmplY3QgZm9yIHRoZSBnaXZlbiBlbmNvZGluZy4gKi8KKy8qIEdldCBhbiBJbmNyZW1lbnRhbEVuY29kZXIgb2JqZWN0IGZvciB0aGUgZ2l2ZW4gZW5jb2RpbmcuICovCiAKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlDb2RlY19JbmNyZW1lbnRhbEVuY29kZXIoCiAgICAgICAgY29uc3QgY2hhciAqZW5jb2RpbmcsCiAgICAgICAgY29uc3QgY2hhciAqZXJyb3JzCiAgICAgICAgKTsKIAotLyogR2V0IGEgSW5jcmVtZW50YWxEZWNvZGVyIG9iamVjdCBmdW5jdGlvbiBmb3IgdGhlIGdpdmVuIGVuY29kaW5nLiAqLworLyogR2V0IGFuIEluY3JlbWVudGFsRGVjb2RlciBvYmplY3QgZnVuY3Rpb24gZm9yIHRoZSBnaXZlbiBlbmNvZGluZy4gKi8KIAogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUNvZGVjX0luY3JlbWVudGFsRGVjb2RlcigKICAgICAgICBjb25zdCBjaGFyICplbmNvZGluZywKZGlmZiAtLWdpdCBhL0luY2x1ZGUvY29tcGlsZS5oIGIvSW5jbHVkZS9jb21waWxlLmgKaW5kZXggYWMyNjM2ZC4uYzY2NTBkNyAxMDA2NDQKLS0tIGEvSW5jbHVkZS9jb21waWxlLmgKKysrIGIvSW5jbHVkZS9jb21waWxlLmgKQEAgLTM2LDExICszNiwyNyBAQAogICAgIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MsCiAgICAgaW50IG9wdGltaXplLAogICAgIFB5QXJlbmEgKmFyZW5hKTsKLVB5QVBJX0ZVTkMoUHlGdXR1cmVGZWF0dXJlcyAqKSBQeUZ1dHVyZV9Gcm9tQVNUKHN0cnVjdCBfbW9kICosIGNvbnN0IGNoYXIgKik7CitQeUFQSV9GVU5DKFB5Q29kZU9iamVjdCAqKSBQeUFTVF9Db21waWxlT2JqZWN0KAorICAgIHN0cnVjdCBfbW9kICptb2QsCisgICAgUHlPYmplY3QgKmZpbGVuYW1lLAorICAgIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MsCisgICAgaW50IG9wdGltaXplLAorICAgIFB5QXJlbmEgKmFyZW5hKTsKK1B5QVBJX0ZVTkMoUHlGdXR1cmVGZWF0dXJlcyAqKSBQeUZ1dHVyZV9Gcm9tQVNUKAorICAgIHN0cnVjdCBfbW9kICogbW9kLAorICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lICAgICAgICAvKiBkZWNvZGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0gZW5jb2RpbmcgKi8KKyAgICApOworUHlBUElfRlVOQyhQeUZ1dHVyZUZlYXR1cmVzICopIFB5RnV0dXJlX0Zyb21BU1RPYmplY3QoCisgICAgc3RydWN0IF9tb2QgKiBtb2QsCisgICAgUHlPYmplY3QgKmZpbGVuYW1lCisgICAgKTsKIAogLyogX1B5X01hbmdsZSBpcyBkZWZpbmVkIGluIGNvbXBpbGUuYyAqLwogUHlBUElfRlVOQyhQeU9iamVjdCopIF9QeV9NYW5nbGUoUHlPYmplY3QgKnAsIFB5T2JqZWN0ICpuYW1lKTsKIAorI2RlZmluZSBQWV9JTlZBTElEX1NUQUNLX0VGRkVDVCBJTlRfTUFYCitQeUFQSV9GVU5DKGludCkgUHlDb21waWxlX09wY29kZVN0YWNrRWZmZWN0KGludCBvcGNvZGUsIGludCBvcGFyZyk7CisKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9JbmNsdWRlL2RpY3RvYmplY3QuaCBiL0luY2x1ZGUvZGljdG9iamVjdC5oCmluZGV4IGQ4OWFhYzguLmVmMTIyYmQgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvZGljdG9iamVjdC5oCisrKyBiL0luY2x1ZGUvZGljdG9iamVjdC5oCkBAIC01Myw2ICs1MywxMCBAQAogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeURpY3RfR2V0SXRlbVdpdGhFcnJvcihQeU9iamVjdCAqbXAsIFB5T2JqZWN0ICprZXkpOwogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBfUHlEaWN0X0dldEl0ZW1JZFdpdGhFcnJvcihQeU9iamVjdCAqZHAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBfUHlfSWRlbnRpZmllciAqa2V5KTsKKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKK1B5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlEaWN0X1NldERlZmF1bHQoCisgICAgUHlPYmplY3QgKm1wLCBQeU9iamVjdCAqa2V5LCBQeU9iamVjdCAqZGVmYXVsdG9iaik7CisjZW5kaWYKIFB5QVBJX0ZVTkMoaW50KSBQeURpY3RfU2V0SXRlbShQeU9iamVjdCAqbXAsIFB5T2JqZWN0ICprZXksIFB5T2JqZWN0ICppdGVtKTsKIFB5QVBJX0ZVTkMoaW50KSBQeURpY3RfRGVsSXRlbShQeU9iamVjdCAqbXAsIFB5T2JqZWN0ICprZXkpOwogUHlBUElfRlVOQyh2b2lkKSBQeURpY3RfQ2xlYXIoUHlPYmplY3QgKm1wKTsKQEAgLTEwOSw5ICsxMTMsMTEgQEAKIFB5QVBJX0ZVTkMoaW50KSBQeURpY3RfRGVsSXRlbVN0cmluZyhQeU9iamVjdCAqZHAsIGNvbnN0IGNoYXIgKmtleSk7CiAKICNpZm5kZWYgUHlfTElNSVRFRF9BUEkKK1B5QVBJX0ZVTkMoaW50KSBfUHlEaWN0X0RlbEl0ZW1JZChQeU9iamVjdCAqbXAsIHN0cnVjdCBfUHlfSWRlbnRpZmllciAqa2V5KTsKK1B5QVBJX0ZVTkModm9pZCkgX1B5RGljdF9EZWJ1Z01hbGxvY1N0YXRzKEZJTEUgKm91dCk7CisKIGludCBfUHlPYmplY3REaWN0X1NldEl0ZW0oUHlUeXBlT2JqZWN0ICp0cCwgUHlPYmplY3QgKipkaWN0cHRyLCBQeU9iamVjdCAqbmFtZSwgUHlPYmplY3QgKnZhbHVlKTsKIFB5T2JqZWN0ICpfUHlEaWN0X0xvYWRHbG9iYWwoUHlEaWN0T2JqZWN0ICosIFB5RGljdE9iamVjdCAqLCBQeU9iamVjdCAqKTsKLVB5QVBJX0ZVTkModm9pZCkgX1B5RGljdF9EZWJ1Z01hbGxvY1N0YXRzKEZJTEUgKm91dCk7CiAjZW5kaWYKIAogI2lmZGVmIF9fY3BsdXNwbHVzCmRpZmYgLS1naXQgYS9JbmNsdWRlL2R5bmFtaWNfYW5ub3RhdGlvbnMuaCBiL0luY2x1ZGUvZHluYW1pY19hbm5vdGF0aW9ucy5oCmluZGV4IGQ2M2M1ZGIuLjBiZDFhODMgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvZHluYW1pY19hbm5vdGF0aW9ucy5oCisrKyBiL0luY2x1ZGUvZHluYW1pY19hbm5vdGF0aW9ucy5oCkBAIC0xNTAsNyArMTUwLDcgQEAKIAogICAvKiBSZXBvcnQgdGhhdCBhIG5ldyBtZW1vcnkgYXQgImFkZHJlc3MiIG9mIHNpemUgInNpemUiIGhhcyBiZWVuIGFsbG9jYXRlZC4KICAgICAgVGhpcyBtaWdodCBiZSB1c2VkIHdoZW4gdGhlIG1lbW9yeSBoYXMgYmVlbiByZXRyaWV2ZWQgZnJvbSBhIGZyZWUgbGlzdCBhbmQKLSAgICAgaXMgYWJvdXQgdG8gYmUgcmV1c2VkLCBvciB3aGVuIGEgdGhlIGxvY2tpbmcgZGlzY2lwbGluZSBmb3IgYSB2YXJpYWJsZQorICAgICBpcyBhYm91dCB0byBiZSByZXVzZWQsIG9yIHdoZW4gdGhlIGxvY2tpbmcgZGlzY2lwbGluZSBmb3IgYSB2YXJpYWJsZQogICAgICBjaGFuZ2VzLiAqLwogI2RlZmluZSBfUHlfQU5OT1RBVEVfTkVXX01FTU9SWShhZGRyZXNzLCBzaXplKSBcCiAgICAgQW5ub3RhdGVOZXdNZW1vcnkoX19GSUxFX18sIF9fTElORV9fLCBhZGRyZXNzLCBzaXplKQpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9maWxlb2JqZWN0LmggYi9JbmNsdWRlL2ZpbGVvYmplY3QuaAppbmRleCBhOTljOTRkLi4wOTM5NzQ0IDEwMDY0NAotLS0gYS9JbmNsdWRlL2ZpbGVvYmplY3QuaAorKysgYi9JbmNsdWRlL2ZpbGVvYmplY3QuaApAQCAtOCw4ICs4LDkgQEAKIAogI2RlZmluZSBQWV9TVERJT1RFWFRNT0RFICJiIgogCi1QeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5RmlsZV9Gcm9tRmQoaW50LCBjaGFyICosIGNoYXIgKiwgaW50LCBjaGFyICosIGNoYXIgKiwKLQkJCQkgICAgIGNoYXIgKiwgaW50KTsKK1B5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlGaWxlX0Zyb21GZChpbnQsIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBpbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqLCBpbnQpOwogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUZpbGVfR2V0TGluZShQeU9iamVjdCAqLCBpbnQpOwogUHlBUElfRlVOQyhpbnQpIFB5RmlsZV9Xcml0ZU9iamVjdChQeU9iamVjdCAqLCBQeU9iamVjdCAqLCBpbnQpOwogUHlBUElfRlVOQyhpbnQpIFB5RmlsZV9Xcml0ZVN0cmluZyhjb25zdCBjaGFyICosIFB5T2JqZWN0ICopOwpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9maWxldXRpbHMuaCBiL0luY2x1ZGUvZmlsZXV0aWxzLmgKaW5kZXggN2MxOGNmMi4uZTliYWQ4MCAxMDA2NDQKLS0tIGEvSW5jbHVkZS9maWxldXRpbHMuaAorKysgYi9JbmNsdWRlL2ZpbGV1dGlscy5oCkBAIC0yNywxMSArMjcsMjEgQEAKICAgICBzdHJ1Y3Qgc3RhdCAqc3RhdGJ1Zik7CiAjZW5kaWYKIAorI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQorUHlBUElfRlVOQyhpbnQpIF9QeV9vcGVuKAorICAgIGNvbnN0IGNoYXIgKnBhdGhuYW1lLAorICAgIGludCBmbGFncyk7CisjZW5kaWYKKwogUHlBUElfRlVOQyhGSUxFICopIF9QeV93Zm9wZW4oCiAgICAgY29uc3Qgd2NoYXJfdCAqcGF0aCwKICAgICBjb25zdCB3Y2hhcl90ICptb2RlKTsKIAogUHlBUElfRlVOQyhGSUxFKikgX1B5X2ZvcGVuKAorICAgIGNvbnN0IGNoYXIgKnBhdGhuYW1lLAorICAgIGNvbnN0IGNoYXIgKm1vZGUpOworCitQeUFQSV9GVU5DKEZJTEUqKSBfUHlfZm9wZW5fb2JqKAogICAgIFB5T2JqZWN0ICpwYXRoLAogICAgIGNvbnN0IGNoYXIgKm1vZGUpOwogCkBAIC01Myw2ICs2MywxNSBAQAogICAgIHdjaGFyX3QgKmJ1ZiwKICAgICBzaXplX3Qgc2l6ZSk7CiAKKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKK1B5QVBJX0ZVTkMoaW50KSBfUHlfZ2V0X2luaGVyaXRhYmxlKGludCBmZCk7CisKK1B5QVBJX0ZVTkMoaW50KSBfUHlfc2V0X2luaGVyaXRhYmxlKGludCBmZCwgaW50IGluaGVyaXRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICphdG9taWNfZmxhZ193b3Jrcyk7CisKK1B5QVBJX0ZVTkMoaW50KSBfUHlfZHVwKGludCBmZCk7CisjZW5kaWYKKwogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL0luY2x1ZGUvZnJhbWVvYmplY3QuaCBiL0luY2x1ZGUvZnJhbWVvYmplY3QuaAppbmRleCAzM2Y3M2FmLi45NjZmZjFmIDEwMDY0NAotLS0gYS9JbmNsdWRlL2ZyYW1lb2JqZWN0LmgKKysrIGIvSW5jbHVkZS9mcmFtZW9iamVjdC5oCkBAIC0zNiw4ICszNiw5IEBACiAgICAgICAgICAgIG5vbi1nZW5lcmF0b3IgZnJhbWVzLiBTZWUgdGhlIHNhdmVfZXhjX3N0YXRlIGFuZCBzd2FwX2V4Y19zdGF0ZQogICAgICAgICAgICBmdW5jdGlvbnMgaW4gY2V2YWwuYyBmb3IgZGV0YWlscyBvZiB0aGVpciB1c2UuICovCiAgICAgUHlPYmplY3QgKmZfZXhjX3R5cGUsICpmX2V4Y192YWx1ZSwgKmZfZXhjX3RyYWNlYmFjazsKKyAgICAvKiBCb3Jyb3dlZCByZWZlcmVuY2UgdG8gYSBnZW5lcmF0b3IsIG9yIE5VTEwgKi8KKyAgICBQeU9iamVjdCAqZl9nZW47CiAKLSAgICBQeVRocmVhZFN0YXRlICpmX3RzdGF0ZTsKICAgICBpbnQgZl9sYXN0aTsgICAgICAgICAgICAgICAgLyogTGFzdCBpbnN0cnVjdGlvbiBpZiBjYWxsZWQgKi8KICAgICAvKiBDYWxsIFB5RnJhbWVfR2V0TGluZU51bWJlcigpIGluc3RlYWQgb2YgcmVhZGluZyB0aGlzIGZpZWxkCiAgICAgICAgZGlyZWN0bHkuICBBcyBvZiAyLjMgZl9saW5lbm8gaXMgb25seSB2YWxpZCB3aGVuIHRyYWNpbmcgaXMKQEAgLTQ2LDYgKzQ3LDcgQEAKICAgICAgICBieXRlY29kZSBpbmRleC4gKi8KICAgICBpbnQgZl9saW5lbm87ICAgICAgICAgICAgICAgLyogQ3VycmVudCBsaW5lIG51bWJlciAqLwogICAgIGludCBmX2libG9jazsgICAgICAgICAgICAgICAvKiBpbmRleCBpbiBmX2Jsb2Nrc3RhY2sgKi8KKyAgICBjaGFyIGZfZXhlY3V0aW5nOyAgICAgICAgICAgLyogd2hldGhlciB0aGUgZnJhbWUgaXMgc3RpbGwgZXhlY3V0aW5nICovCiAgICAgUHlUcnlCbG9jayBmX2Jsb2Nrc3RhY2tbQ09fTUFYQkxPQ0tTXTsgLyogZm9yIHRyeSBhbmQgbG9vcCBibG9ja3MgKi8KICAgICBQeU9iamVjdCAqZl9sb2NhbHNwbHVzWzFdOyAgLyogbG9jYWxzK3N0YWNrLCBkeW5hbWljYWxseSBzaXplZCAqLwogfSBQeUZyYW1lT2JqZWN0OwpAQCAtNzUsNiArNzcsOCBAQAogLyogQ29udmVyc2lvbnMgYmV0d2VlbiAiZmFzdCBsb2NhbHMiIGFuZCBsb2NhbHMgaW4gZGljdGlvbmFyeSAqLwogCiBQeUFQSV9GVU5DKHZvaWQpIFB5RnJhbWVfTG9jYWxzVG9GYXN0KFB5RnJhbWVPYmplY3QgKiwgaW50KTsKKworUHlBUElfRlVOQyhpbnQpIFB5RnJhbWVfRmFzdFRvTG9jYWxzV2l0aEVycm9yKFB5RnJhbWVPYmplY3QgKmYpOwogUHlBUElfRlVOQyh2b2lkKSBQeUZyYW1lX0Zhc3RUb0xvY2FscyhQeUZyYW1lT2JqZWN0ICopOwogCiBQeUFQSV9GVU5DKGludCkgUHlGcmFtZV9DbGVhckZyZWVMaXN0KHZvaWQpOwpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9nZW5vYmplY3QuaCBiL0luY2x1ZGUvZ2Vub2JqZWN0LmgKaW5kZXggZWQ0NTFiYS4uNjVmMWVjZiAxMDA2NDQKLS0tIGEvSW5jbHVkZS9nZW5vYmplY3QuaAorKysgYi9JbmNsdWRlL2dlbm9iamVjdC5oCkBAIC0zNiw2ICszNiw4IEBACiBQeUFQSV9GVU5DKGludCkgUHlHZW5fTmVlZHNGaW5hbGl6aW5nKFB5R2VuT2JqZWN0ICopOwogUHlBUElfRlVOQyhpbnQpIF9QeUdlbl9GZXRjaFN0b3BJdGVyYXRpb25WYWx1ZShQeU9iamVjdCAqKik7CiBQeU9iamVjdCAqX1B5R2VuX1NlbmQoUHlHZW5PYmplY3QgKiwgUHlPYmplY3QgKik7CitQeUFQSV9GVU5DKHZvaWQpIF9QeUdlbl9GaW5hbGl6ZShQeU9iamVjdCAqc2VsZik7CisKIAogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CmRpZmYgLS1naXQgYS9JbmNsdWRlL2dyYW1tYXIuaCBiL0luY2x1ZGUvZ3JhbW1hci5oCmluZGV4IDg0MjZkYTMuLmJhN2QxOWQgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvZ3JhbW1hci5oCisrKyBiL0luY2x1ZGUvZ3JhbW1hci5oCkBAIC02OSwxNCArNjksMTQgQEAKIC8qIEZVTkNUSU9OUyAqLwogCiBncmFtbWFyICpuZXdncmFtbWFyKGludCBzdGFydCk7Ci1kZmEgKmFkZGRmYShncmFtbWFyICpnLCBpbnQgdHlwZSwgY2hhciAqbmFtZSk7CitkZmEgKmFkZGRmYShncmFtbWFyICpnLCBpbnQgdHlwZSwgY29uc3QgY2hhciAqbmFtZSk7CiBpbnQgYWRkc3RhdGUoZGZhICpkKTsKIHZvaWQgYWRkYXJjKGRmYSAqZCwgaW50IGZyb20sIGludCB0bywgaW50IGxibCk7CiBkZmEgKlB5R3JhbW1hcl9GaW5kREZBKGdyYW1tYXIgKmcsIGludCB0eXBlKTsKIAotaW50IGFkZGxhYmVsKGxhYmVsbGlzdCAqbGwsIGludCB0eXBlLCBjaGFyICpzdHIpOwotaW50IGZpbmRsYWJlbChsYWJlbGxpc3QgKmxsLCBpbnQgdHlwZSwgY2hhciAqc3RyKTsKLWNoYXIgKlB5R3JhbW1hcl9MYWJlbFJlcHIobGFiZWwgKmxiKTsKK2ludCBhZGRsYWJlbChsYWJlbGxpc3QgKmxsLCBpbnQgdHlwZSwgY29uc3QgY2hhciAqc3RyKTsKK2ludCBmaW5kbGFiZWwobGFiZWxsaXN0ICpsbCwgaW50IHR5cGUsIGNvbnN0IGNoYXIgKnN0cik7Citjb25zdCBjaGFyICpQeUdyYW1tYXJfTGFiZWxSZXByKGxhYmVsICpsYik7CiB2b2lkIHRyYW5zbGF0ZWxhYmVscyhncmFtbWFyICpnKTsKIAogdm9pZCBhZGRmaXJzdHNldHMoZ3JhbW1hciAqZyk7CmRpZmYgLS1naXQgYS9JbmNsdWRlL2ltcG9ydC5oIGIvSW5jbHVkZS9pbXBvcnQuaAppbmRleCA3M2M4NmVlLi5hZmRmYWMyIDEwMDY0NAotLS0gYS9JbmNsdWRlL2ltcG9ydC5oCisrKyBiL0luY2x1ZGUvaW1wb3J0LmgKQEAgLTEzLDE5ICsxMywxOSBAQAogUHlBUElfRlVOQyhsb25nKSBQeUltcG9ydF9HZXRNYWdpY051bWJlcih2b2lkKTsKIFB5QVBJX0ZVTkMoY29uc3QgY2hhciAqKSBQeUltcG9ydF9HZXRNYWdpY1RhZyh2b2lkKTsKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGUoCi0gICAgY2hhciAqbmFtZSwgICAgICAgICAgICAgICAgIC8qIFVURi04IGVuY29kZWQgc3RyaW5nICovCisgICAgY29uc3QgY2hhciAqbmFtZSwgICAgICAgICAgIC8qIFVURi04IGVuY29kZWQgc3RyaW5nICovCiAgICAgUHlPYmplY3QgKmNvCiAgICAgKTsKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVFeCgKLSAgICBjaGFyICpuYW1lLCAgICAgICAgICAgICAgICAgLyogVVRGLTggZW5jb2RlZCBzdHJpbmcgKi8KKyAgICBjb25zdCBjaGFyICpuYW1lLCAgICAgICAgICAgLyogVVRGLTggZW5jb2RlZCBzdHJpbmcgKi8KICAgICBQeU9iamVjdCAqY28sCi0gICAgY2hhciAqcGF0aG5hbWUgICAgICAgICAgICAgIC8qIGRlY29kZWQgZnJvbSB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZyAqLworICAgIGNvbnN0IGNoYXIgKnBhdGhuYW1lICAgICAgICAvKiBkZWNvZGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0gZW5jb2RpbmcgKi8KICAgICApOwogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZVdpdGhQYXRobmFtZXMoCi0gICAgY2hhciAqbmFtZSwgICAgICAgICAgICAgICAgIC8qIFVURi04IGVuY29kZWQgc3RyaW5nICovCisgICAgY29uc3QgY2hhciAqbmFtZSwgICAgICAgICAgIC8qIFVURi04IGVuY29kZWQgc3RyaW5nICovCiAgICAgUHlPYmplY3QgKmNvLAotICAgIGNoYXIgKnBhdGhuYW1lLCAgICAgICAgICAgICAvKiBkZWNvZGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0gZW5jb2RpbmcgKi8KLSAgICBjaGFyICpjcGF0aG5hbWUgICAgICAgICAgICAgLyogZGVjb2RlZCBmcm9tIHRoZSBmaWxlc3lzdGVtIGVuY29kaW5nICovCisgICAgY29uc3QgY2hhciAqcGF0aG5hbWUsICAgICAgIC8qIGRlY29kZWQgZnJvbSB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZyAqLworICAgIGNvbnN0IGNoYXIgKmNwYXRobmFtZSAgICAgICAvKiBkZWNvZGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0gZW5jb2RpbmcgKi8KICAgICApOwogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZU9iamVjdCgKICAgICBQeU9iamVjdCAqbmFtZSwKQEAgLTcyLDcgKzcyLDcgQEAKICAgICBQeU9iamVjdCAqbmFtZQogICAgICk7CiBQeUFQSV9GVU5DKGludCkgUHlJbXBvcnRfSW1wb3J0RnJvemVuTW9kdWxlKAotICAgIGNoYXIgKm5hbWUgICAgICAgICAgICAgICAgICAvKiBVVEYtOCBlbmNvZGVkIHN0cmluZyAqLworICAgIGNvbnN0IGNoYXIgKm5hbWUgICAgICAgICAgICAvKiBVVEYtOCBlbmNvZGVkIHN0cmluZyAqLwogICAgICk7CiAKICNpZm5kZWYgUHlfTElNSVRFRF9BUEkKQEAgLTkyLDEyICs5MiwxMiBAQAogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBfUHlJbXBvcnRfRmluZEV4dGVuc2lvbk9iamVjdChQeU9iamVjdCAqLCBQeU9iamVjdCAqKTsKIFB5QVBJX0ZVTkMoaW50KSBfUHlJbXBvcnRfRml4dXBCdWlsdGluKAogICAgIFB5T2JqZWN0ICptb2QsCi0gICAgY2hhciAqbmFtZSAgICAgICAgICAgICAgICAgIC8qIFVURi04IGVuY29kZWQgc3RyaW5nICovCisgICAgY29uc3QgY2hhciAqbmFtZSAgICAgICAgICAgIC8qIFVURi04IGVuY29kZWQgc3RyaW5nICovCiAgICAgKTsKIFB5QVBJX0ZVTkMoaW50KSBfUHlJbXBvcnRfRml4dXBFeHRlbnNpb25PYmplY3QoUHlPYmplY3QqLCBQeU9iamVjdCAqLCBQeU9iamVjdCAqKTsKIAogc3RydWN0IF9pbml0dGFiIHsKLSAgICBjaGFyICpuYW1lOyAgICAgICAgICAgICAgICAgLyogQVNDSUkgZW5jb2RlZCBzdHJpbmcgKi8KKyAgICBjb25zdCBjaGFyICpuYW1lOyAgICAgICAgICAgLyogQVNDSUkgZW5jb2RlZCBzdHJpbmcgKi8KICAgICBQeU9iamVjdCogKCppbml0ZnVuYykodm9pZCk7CiB9OwogUHlBUElfREFUQShzdHJ1Y3QgX2luaXR0YWIgKikgUHlJbXBvcnRfSW5pdHRhYjsKQEAgLTExMywxNSArMTEzLDE1IEBACiAKICNpZm5kZWYgUHlfTElNSVRFRF9BUEkKIHN0cnVjdCBfZnJvemVuIHsKLSAgICBjaGFyICpuYW1lOyAgICAgICAgICAgICAgICAgLyogQVNDSUkgZW5jb2RlZCBzdHJpbmcgKi8KLSAgICB1bnNpZ25lZCBjaGFyICpjb2RlOworICAgIGNvbnN0IGNoYXIgKm5hbWU7ICAgICAgICAgICAgICAgICAvKiBBU0NJSSBlbmNvZGVkIHN0cmluZyAqLworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNvZGU7CiAgICAgaW50IHNpemU7CiB9OwogCiAvKiBFbWJlZGRpbmcgYXBwcyBtYXkgY2hhbmdlIHRoaXMgcG9pbnRlciB0byBwb2ludCB0byB0aGVpciBmYXZvcml0ZQogICAgY29sbGVjdGlvbiBvZiBmcm96ZW4gbW9kdWxlczogKi8KIAotUHlBUElfREFUQShzdHJ1Y3QgX2Zyb3plbiAqKSBQeUltcG9ydF9Gcm96ZW5Nb2R1bGVzOworUHlBUElfREFUQShjb25zdCBzdHJ1Y3QgX2Zyb3plbiAqKSBQeUltcG9ydF9Gcm96ZW5Nb2R1bGVzOwogI2VuZGlmCiAKICNpZmRlZiBfX2NwbHVzcGx1cwpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9saXN0b2JqZWN0LmggYi9JbmNsdWRlL2xpc3RvYmplY3QuaAppbmRleCBkYzYyYWVlLi43NGNmNDZmIDEwMDY0NAotLS0gYS9JbmNsdWRlL2xpc3RvYmplY3QuaAorKysgYi9JbmNsdWRlL2xpc3RvYmplY3QuaApAQCAtNDYsNyArNDYsNyBAQAogUHlBUElfREFUQShQeVR5cGVPYmplY3QpIFB5U29ydFdyYXBwZXJfVHlwZTsKIAogI2RlZmluZSBQeUxpc3RfQ2hlY2sob3ApIFwKLQkJUHlUeXBlX0Zhc3RTdWJjbGFzcyhQeV9UWVBFKG9wKSwgUHlfVFBGTEFHU19MSVNUX1NVQkNMQVNTKQorICAgIFB5VHlwZV9GYXN0U3ViY2xhc3MoUHlfVFlQRShvcCksIFB5X1RQRkxBR1NfTElTVF9TVUJDTEFTUykKICNkZWZpbmUgUHlMaXN0X0NoZWNrRXhhY3Qob3ApIChQeV9UWVBFKG9wKSA9PSAmUHlMaXN0X1R5cGUpCiAKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlMaXN0X05ldyhQeV9zc2l6ZV90IHNpemUpOwpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9sb25nb2JqZWN0LmggYi9JbmNsdWRlL2xvbmdvYmplY3QuaAppbmRleCAxYzFjNWRlLi5mZjQzMzA5IDEwMDY0NAotLS0gYS9JbmNsdWRlL2xvbmdvYmplY3QuaAorKysgYi9JbmNsdWRlL2xvbmdvYmplY3QuaApAQCAtNTIsNiArNTIsMTkgQEAKICNlcnJvciAic2l6ZW9mKHBpZF90KSBpcyBuZWl0aGVyIHNpemVvZihpbnQpLCBzaXplb2YobG9uZykgb3Igc2l6ZW9mKGxvbmcgbG9uZykiCiAjZW5kaWYgLyogU0laRU9GX1BJRF9UICovCiAKKyNpZiBTSVpFT0ZfVk9JRF9QID09IFNJWkVPRl9JTlQKKyMgIGRlZmluZSBfUHlfUEFSU0VfSU5UUFRSICJpIgorIyAgZGVmaW5lIF9QeV9QQVJTRV9VSU5UUFRSICJJIgorI2VsaWYgU0laRU9GX1ZPSURfUCA9PSBTSVpFT0ZfTE9ORworIyAgZGVmaW5lIF9QeV9QQVJTRV9JTlRQVFIgImwiCisjICBkZWZpbmUgX1B5X1BBUlNFX1VJTlRQVFIgImsiCisjZWxpZiBkZWZpbmVkKFNJWkVPRl9MT05HX0xPTkcpICYmIFNJWkVPRl9WT0lEX1AgPT0gU0laRU9GX0xPTkdfTE9ORworIyAgZGVmaW5lIF9QeV9QQVJTRV9JTlRQVFIgIkwiCisjICBkZWZpbmUgX1B5X1BBUlNFX1VJTlRQVFIgIksiCisjZWxzZQorIyAgZXJyb3IgInZvaWQqIGRpZmZlcmVudCBpbiBzaXplIGZyb20gaW50LCBsb25nIGFuZCBsb25nIGxvbmciCisjZW5kaWYgLyogU0laRU9GX1ZPSURfUCAqLworCiAvKiBVc2VkIGJ5IFB5dGhvbi9teXN0cnRvdWwuYy4gKi8KICNpZm5kZWYgUHlfTElNSVRFRF9BUEkKIFB5QVBJX0RBVEEodW5zaWduZWQgY2hhcikgX1B5TG9uZ19EaWdpdFZhbHVlWzI1Nl07CkBAIC04MCw3ICs5Myw3IEBACiBQeUFQSV9GVU5DKFBZX0xPTkdfTE9ORykgUHlMb25nX0FzTG9uZ0xvbmdBbmRPdmVyZmxvdyhQeU9iamVjdCAqLCBpbnQgKik7CiAjZW5kaWYgLyogSEFWRV9MT05HX0xPTkcgKi8KIAotUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUxvbmdfRnJvbVN0cmluZyhjaGFyICosIGNoYXIgKiosIGludCk7CitQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5TG9uZ19Gcm9tU3RyaW5nKGNvbnN0IGNoYXIgKiwgY2hhciAqKiwgaW50KTsKICNpZm5kZWYgUHlfTElNSVRFRF9BUEkKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlMb25nX0Zyb21Vbmljb2RlKFB5X1VOSUNPREUqLCBQeV9zc2l6ZV90LCBpbnQpOwogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUxvbmdfRnJvbVVuaWNvZGVPYmplY3QoUHlPYmplY3QgKnUsIGludCBiYXNlKTsKQEAgLTE4Miw4ICsxOTUsOCBAQAogLyogVGhlc2UgYXJlbid0IHJlYWxseSBwYXJ0IG9mIHRoZSBpbnQgb2JqZWN0LCBidXQgdGhleSdyZSBoYW5keS4gVGhlCiAgICBmdW5jdGlvbnMgYXJlIGluIFB5dGhvbi9teXN0cnRvdWwuYy4KICAqLwotUHlBUElfRlVOQyh1bnNpZ25lZCBsb25nKSBQeU9TX3N0cnRvdWwoY2hhciAqLCBjaGFyICoqLCBpbnQpOwotUHlBUElfRlVOQyhsb25nKSBQeU9TX3N0cnRvbChjaGFyICosIGNoYXIgKiosIGludCk7CitQeUFQSV9GVU5DKHVuc2lnbmVkIGxvbmcpIFB5T1Nfc3RydG91bChjb25zdCBjaGFyICosIGNoYXIgKiosIGludCk7CitQeUFQSV9GVU5DKGxvbmcpIFB5T1Nfc3RydG9sKGNvbnN0IGNoYXIgKiwgY2hhciAqKiwgaW50KTsKIAogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CmRpZmYgLS1naXQgYS9JbmNsdWRlL21hcnNoYWwuaCBiL0luY2x1ZGUvbWFyc2hhbC5oCmluZGV4IGU5NmQwNjIuLjA5ZDkzMzcgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvbWFyc2hhbC5oCisrKyBiL0luY2x1ZGUvbWFyc2hhbC5oCkBAIC03LDcgKzcsNyBAQAogZXh0ZXJuICJDIiB7CiAjZW5kaWYKIAotI2RlZmluZSBQeV9NQVJTSEFMX1ZFUlNJT04gMgorI2RlZmluZSBQeV9NQVJTSEFMX1ZFUlNJT04gNAogCiBQeUFQSV9GVU5DKHZvaWQpIFB5TWFyc2hhbF9Xcml0ZUxvbmdUb0ZpbGUobG9uZywgRklMRSAqLCBpbnQpOwogUHlBUElfRlVOQyh2b2lkKSBQeU1hcnNoYWxfV3JpdGVPYmplY3RUb0ZpbGUoUHlPYmplY3QgKiwgRklMRSAqLCBpbnQpOwpAQCAtMTksNyArMTksOCBAQAogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeU1hcnNoYWxfUmVhZE9iamVjdEZyb21GaWxlKEZJTEUgKik7CiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5TWFyc2hhbF9SZWFkTGFzdE9iamVjdEZyb21GaWxlKEZJTEUgKik7CiAjZW5kaWYKLVB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlNYXJzaGFsX1JlYWRPYmplY3RGcm9tU3RyaW5nKGNoYXIgKiwgUHlfc3NpemVfdCk7CitQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5TWFyc2hhbF9SZWFkT2JqZWN0RnJvbVN0cmluZyhjb25zdCBjaGFyICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90KTsKIAogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CmRpZmYgLS1naXQgYS9JbmNsdWRlL21lbW9yeW9iamVjdC5oIGIvSW5jbHVkZS9tZW1vcnlvYmplY3QuaAppbmRleCBjMmUxMTk0Li4zODJjYTkyIDEwMDY0NAotLS0gYS9JbmNsdWRlL21lbW9yeW9iamVjdC5oCisrKyBiL0luY2x1ZGUvbWVtb3J5b2JqZWN0LmgKQEAgLTQ1LDcgKzQ1LDcgQEAKIH0gX1B5TWFuYWdlZEJ1ZmZlck9iamVjdDsKIAogCi0vKiBzdGF0aWMgc3RvcmFnZSB1c2VkIGZvciBjYXN0aW5nIGJldHdlZW4gZm9ybWF0cyAqLworLyogZGVwcmVjYXRlZCwgcmVtb3ZlZCBpbiAzLjUgKi8KICNkZWZpbmUgX1B5X01FTU9SWVZJRVdfTUFYX0ZPUk1BVCAzIC8qIG11c3QgYmUgPj0gMyAqLwogCiAvKiBtZW1vcnl2aWV3IHN0YXRlIGZsYWdzICovCkBAIC02Miw3ICs2Miw3IEBACiAgICAgaW50IGZsYWdzOyAgICAgICAgICAgICAgICAgICAgLyogc3RhdGUgZmxhZ3MgKi8KICAgICBQeV9zc2l6ZV90IGV4cG9ydHM7ICAgICAgICAgICAvKiBudW1iZXIgb2YgYnVmZmVyIHJlLWV4cG9ydHMgKi8KICAgICBQeV9idWZmZXIgdmlldzsgICAgICAgICAgICAgICAvKiBwcml2YXRlIGNvcHkgb2YgdGhlIGV4cG9ydGVyJ3MgdmlldyAqLwotICAgIGNoYXIgZm9ybWF0W19QeV9NRU1PUllWSUVXX01BWF9GT1JNQVRdOyAvKiB1c2VkIGZvciBjYXN0aW5nICovCisgICAgY2hhciBmb3JtYXRbX1B5X01FTU9SWVZJRVdfTUFYX0ZPUk1BVF07IC8qIGRlcHJlY2F0ZWQsIHJlbW92ZWQgaW4gMy41ICovCiAgICAgUHlPYmplY3QgKndlYWtyZWZsaXN0OwogICAgIFB5X3NzaXplX3Qgb2JfYXJyYXlbMV07ICAgICAgIC8qIHNoYXBlLCBzdHJpZGVzLCBzdWJvZmZzZXRzICovCiB9IFB5TWVtb3J5Vmlld09iamVjdDsKZGlmZiAtLWdpdCBhL0luY2x1ZGUvbW9kc3VwcG9ydC5oIGIvSW5jbHVkZS9tb2RzdXBwb3J0LmgKaW5kZXggZWNmMWRjYy4uNWRlMDQ1OCAxMDA2NDQKLS0tIGEvSW5jbHVkZS9tb2RzdXBwb3J0LmgKKysrIGIvSW5jbHVkZS9tb2RzdXBwb3J0LmgKQEAgLTI2LDcgKzI2LDcgQEAKIC8qIER1ZSB0byBhIGdsaXRjaCBpbiAzLjIsIHRoZSBfU2l6ZVQgdmVyc2lvbnMgd2VyZW4ndCBleHBvcnRlZCBmcm9tIHRoZSBETEwuICovCiAjaWYgIWRlZmluZWQoUFlfU1NJWkVfVF9DTEVBTikgfHwgIWRlZmluZWQoUHlfTElNSVRFRF9BUEkpIHx8IFB5X0xJTUlURURfQVBJKzAgPj0gMHgwMzAzMDAwMAogUHlBUElfRlVOQyhpbnQpIFB5QXJnX1BhcnNlKFB5T2JqZWN0ICosIGNvbnN0IGNoYXIgKiwgLi4uKTsKLVB5QVBJX0ZVTkMoaW50KSBQeUFyZ19QYXJzZVR1cGxlKFB5T2JqZWN0ICosIGNvbnN0IGNoYXIgKiwgLi4uKSBQeV9GT1JNQVRfUEFSU0VUVVBMRShQeUFyZ19QYXJzZVR1cGxlLCAyLCAzKTsKK1B5QVBJX0ZVTkMoaW50KSBQeUFyZ19QYXJzZVR1cGxlKFB5T2JqZWN0ICosIGNvbnN0IGNoYXIgKiwgLi4uKTsKIFB5QVBJX0ZVTkMoaW50KSBQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoUHlPYmplY3QgKiwgUHlPYmplY3QgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqLCBjaGFyICoqLCAuLi4pOwogUHlBUElfRlVOQyhpbnQpIFB5QXJnX1ZhbGlkYXRlS2V5d29yZEFyZ3VtZW50cyhQeU9iamVjdCAqKTsKQEAgLTM2LDYgKzM2LDcgQEAKICNlbmRpZgogI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQogUHlBUElfRlVOQyhpbnQpIF9QeUFyZ19Ob0tleXdvcmRzKGNvbnN0IGNoYXIgKmZ1bmNuYW1lLCBQeU9iamVjdCAqa3cpOworUHlBUElfRlVOQyhpbnQpIF9QeUFyZ19Ob1Bvc2l0aW9uYWwoY29uc3QgY2hhciAqZnVuY25hbWUsIFB5T2JqZWN0ICphcmdzKTsKIAogUHlBUElfRlVOQyhpbnQpIFB5QXJnX1ZhUGFyc2UoUHlPYmplY3QgKiwgY29uc3QgY2hhciAqLCB2YV9saXN0KTsKIFB5QVBJX0ZVTkMoaW50KSBQeUFyZ19WYVBhcnNlVHVwbGVBbmRLZXl3b3JkcyhQeU9iamVjdCAqLCBQeU9iamVjdCAqLApkaWZmIC0tZ2l0IGEvSW5jbHVkZS9tb2R1bGVvYmplY3QuaCBiL0luY2x1ZGUvbW9kdWxlb2JqZWN0LmgKaW5kZXggODAxM2RkOS4uZjExOTM2NCAxMDA2NDQKLS0tIGEvSW5jbHVkZS9tb2R1bGVvYmplY3QuaAorKysgYi9JbmNsdWRlL21vZHVsZW9iamVjdC5oCkBAIC0yNSw2ICsyNSw3IEBACiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5TW9kdWxlX0dldEZpbGVuYW1lT2JqZWN0KFB5T2JqZWN0ICopOwogI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQogUHlBUElfRlVOQyh2b2lkKSBfUHlNb2R1bGVfQ2xlYXIoUHlPYmplY3QgKik7CitQeUFQSV9GVU5DKHZvaWQpIF9QeU1vZHVsZV9DbGVhckRpY3QoUHlPYmplY3QgKik7CiAjZW5kaWYKIFB5QVBJX0ZVTkMoc3RydWN0IFB5TW9kdWxlRGVmKikgUHlNb2R1bGVfR2V0RGVmKFB5T2JqZWN0Kik7CiBQeUFQSV9GVU5DKHZvaWQqKSBQeU1vZHVsZV9HZXRTdGF0ZShQeU9iamVjdCopOwpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9ub2RlLmggYi9JbmNsdWRlL25vZGUuaAppbmRleCA5OWMxM2Y3Li4yZTRlMmJhIDEwMDY0NAotLS0gYS9JbmNsdWRlL25vZGUuaAorKysgYi9JbmNsdWRlL25vZGUuaApAQCAtMjEsNyArMjEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpzdHIsIGludCBsaW5lbm8sIGludCBjb2xfb2Zmc2V0KTsKIFB5QVBJX0ZVTkModm9pZCkgUHlOb2RlX0ZyZWUobm9kZSAqbik7CiAjaWZuZGVmIFB5X0xJTUlURURfQVBJCi1QeV9zc2l6ZV90IF9QeU5vZGVfU2l6ZU9mKG5vZGUgKm4pOworUHlBUElfRlVOQyhQeV9zc2l6ZV90KSBfUHlOb2RlX1NpemVPZihub2RlICpuKTsKICNlbmRpZgogCiAvKiBOb2RlIGFjY2VzcyBmdW5jdGlvbnMgKi8KZGlmZiAtLWdpdCBhL0luY2x1ZGUvb2JqZWN0LmggYi9JbmNsdWRlL29iamVjdC5oCmluZGV4IGNkZWIwNmMuLjVmODYyYWIgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvb2JqZWN0LmgKKysrIGIvSW5jbHVkZS9vYmplY3QuaApAQCAtMTQzLDcgKzE0Myw4IEBACiAgICAgUHlPYmplY3QgKm9iamVjdDsKIH0gX1B5X0lkZW50aWZpZXI7CiAKLSNkZWZpbmUgX1B5X3N0YXRpY19zdHJpbmcodmFybmFtZSwgdmFsdWUpICBzdGF0aWMgX1B5X0lkZW50aWZpZXIgdmFybmFtZSA9IHsgMCwgdmFsdWUsIDAgfQorI2RlZmluZSBfUHlfc3RhdGljX3N0cmluZ19pbml0KHZhbHVlKSB7IDAsIHZhbHVlLCAwIH0KKyNkZWZpbmUgX1B5X3N0YXRpY19zdHJpbmcodmFybmFtZSwgdmFsdWUpICBzdGF0aWMgX1B5X0lkZW50aWZpZXIgdmFybmFtZSA9IF9QeV9zdGF0aWNfc3RyaW5nX2luaXQodmFsdWUpCiAjZGVmaW5lIF9QeV9JREVOVElGSUVSKHZhcm5hbWUpIF9QeV9zdGF0aWNfc3RyaW5nKFB5SWRfIyN2YXJuYW1lLCAjdmFybmFtZSkKIAogLyoKQEAgLTM2Miw3ICszNjMsNyBAQAogICAgIFB5QnVmZmVyUHJvY3MgKnRwX2FzX2J1ZmZlcjsKIAogICAgIC8qIEZsYWdzIHRvIGRlZmluZSBwcmVzZW5jZSBvZiBvcHRpb25hbC9leHBhbmRlZCBmZWF0dXJlcyAqLwotICAgIGxvbmcgdHBfZmxhZ3M7CisgICAgdW5zaWduZWQgbG9uZyB0cF9mbGFnczsKIAogICAgIGNvbnN0IGNoYXIgKnRwX2RvYzsgLyogRG9jdW1lbnRhdGlvbiBzdHJpbmcgKi8KIApAQCAtNDA4LDYgKzQwOSw4IEBACiAgICAgLyogVHlwZSBhdHRyaWJ1dGUgY2FjaGUgdmVyc2lvbiB0YWcuIEFkZGVkIGluIHZlcnNpb24gMi42ICovCiAgICAgdW5zaWduZWQgaW50IHRwX3ZlcnNpb25fdGFnOwogCisgICAgZGVzdHJ1Y3RvciB0cF9maW5hbGl6ZTsKKwogI2lmZGVmIENPVU5UX0FMTE9DUwogICAgIC8qIHRoZXNlIG11c3QgYmUgbGFzdCBhbmQgbmV2ZXIgZXhwbGljaXRseSBpbml0aWFsaXplZCAqLwogICAgIFB5X3NzaXplX3QgdHBfYWxsb2NzOwpAQCAtNDI4LDcgKzQzMSw3IEBACiAgICAgY29uc3QgY2hhciogbmFtZTsKICAgICBpbnQgYmFzaWNzaXplOwogICAgIGludCBpdGVtc2l6ZTsKLSAgICBpbnQgZmxhZ3M7CisgICAgdW5zaWduZWQgaW50IGZsYWdzOwogICAgIFB5VHlwZV9TbG90ICpzbG90czsgLyogdGVybWluYXRlZCBieSBzbG90PT0wLiAqLwogfSBQeVR5cGVfU3BlYzsKIApAQCAtNDM2LDYgKzQzOSw5IEBACiAjaWYgIWRlZmluZWQoUHlfTElNSVRFRF9BUEkpIHx8IFB5X0xJTUlURURfQVBJKzAgPj0gMHgwMzAzMDAwMAogUHlBUElfRlVOQyhQeU9iamVjdCopIFB5VHlwZV9Gcm9tU3BlY1dpdGhCYXNlcyhQeVR5cGVfU3BlYyosIFB5T2JqZWN0Kik7CiAjZW5kaWYKKyNpZiAhZGVmaW5lZChQeV9MSU1JVEVEX0FQSSkgfHwgUHlfTElNSVRFRF9BUEkrMCA+PSAweDAzMDQwMDAwCitQeUFQSV9GVU5DKHZvaWQqKSBQeVR5cGVfR2V0U2xvdChQeVR5cGVPYmplY3QqLCBpbnQpOworI2VuZGlmCiAKICNpZm5kZWYgUHlfTElNSVRFRF9BUEkKIC8qIFRoZSAqcmVhbCogbGF5b3V0IG9mIGEgdHlwZSBvYmplY3Qgd2hlbiBhbGxvY2F0ZWQgb24gdGhlIGhlYXAgKi8KQEAgLTQ3MCw3ICs0NzYsNyBAQAogUHlBUElfREFUQShQeVR5cGVPYmplY3QpIFB5QmFzZU9iamVjdF9UeXBlOyAvKiBidWlsdC1pbiAnb2JqZWN0JyAqLwogUHlBUElfREFUQShQeVR5cGVPYmplY3QpIFB5U3VwZXJfVHlwZTsgLyogYnVpbHQtaW4gJ3N1cGVyJyAqLwogCi1QeUFQSV9GVU5DKGxvbmcpIFB5VHlwZV9HZXRGbGFncyhQeVR5cGVPYmplY3QqKTsKK1B5QVBJX0ZVTkModW5zaWduZWQgbG9uZykgUHlUeXBlX0dldEZsYWdzKFB5VHlwZU9iamVjdCopOwogCiAjZGVmaW5lIFB5VHlwZV9DaGVjayhvcCkgXAogICAgIFB5VHlwZV9GYXN0U3ViY2xhc3MoUHlfVFlQRShvcCksIFB5X1RQRkxBR1NfVFlQRV9TVUJDTEFTUykKQEAgLTQ4OSw2ICs0OTUsMTEgQEAKIFB5QVBJX0ZVTkModW5zaWduZWQgaW50KSBQeVR5cGVfQ2xlYXJDYWNoZSh2b2lkKTsKIFB5QVBJX0ZVTkModm9pZCkgUHlUeXBlX01vZGlmaWVkKFB5VHlwZU9iamVjdCAqKTsKIAorI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQorUHlBUElfRlVOQyhQeU9iamVjdCAqKSBfUHlUeXBlX0dldERvY0Zyb21JbnRlcm5hbERvYyhjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CitQeUFQSV9GVU5DKFB5T2JqZWN0ICopIF9QeVR5cGVfR2V0VGV4dFNpZ25hdHVyZUZyb21JbnRlcm5hbERvYyhjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CisjZW5kaWYKKwogLyogR2VuZXJpYyBvcGVyYXRpb25zIG9uIG9iamVjdHMgKi8KIHN0cnVjdCBfUHlfSWRlbnRpZmllcjsKICNpZm5kZWYgUHlfTElNSVRFRF9BUEkKQEAgLTUzMCw2ICs1NDEsMTAgQEAKIFB5QVBJX0ZVTkMoaW50KSBQeUNhbGxhYmxlX0NoZWNrKFB5T2JqZWN0ICopOwogCiBQeUFQSV9GVU5DKHZvaWQpIFB5T2JqZWN0X0NsZWFyV2Vha1JlZnMoUHlPYmplY3QgKik7CisjaWZuZGVmIFB5X0xJTUlURURfQVBJCitQeUFQSV9GVU5DKHZvaWQpIFB5T2JqZWN0X0NhbGxGaW5hbGl6ZXIoUHlPYmplY3QgKik7CitQeUFQSV9GVU5DKGludCkgUHlPYmplY3RfQ2FsbEZpbmFsaXplckZyb21EZWFsbG9jKFB5T2JqZWN0ICopOworI2VuZGlmCiAKIC8qIFNhbWUgYXMgUHlPYmplY3RfR2VuZXJpY3tHZXQsU2V0fUF0dHIsIGJ1dCBwYXNzaW5nIHRoZSBhdHRyaWJ1dGVzCiAgICBkaWN0IGFzIHRoZSBsYXN0IHBhcmFtZXRlci4gKi8KQEAgLTU1NywyNiArNTcyLDEzIEBACiBQeUFQSV9GVU5DKGludCkgUHlfUmVwckVudGVyKFB5T2JqZWN0ICopOwogUHlBUElfRlVOQyh2b2lkKSBQeV9SZXByTGVhdmUoUHlPYmplY3QgKik7CiAKLS8qIEhlbHBlcnMgZm9yIGhhc2ggZnVuY3Rpb25zICovCiAjaWZuZGVmIFB5X0xJTUlURURfQVBJCi1QeUFQSV9GVU5DKFB5X2hhc2hfdCkgX1B5X0hhc2hEb3VibGUoZG91YmxlKTsKLVB5QVBJX0ZVTkMoUHlfaGFzaF90KSBfUHlfSGFzaFBvaW50ZXIodm9pZCopOwotUHlBUElfRlVOQyhQeV9oYXNoX3QpIF9QeV9IYXNoQnl0ZXModW5zaWduZWQgY2hhciosIFB5X3NzaXplX3QpOworLyogSGVscGVyIGZvciBwYXNzaW5nIG9iamVjdHMgdG8gcHJpbnRmIGFuZCB0aGUgbGlrZS4KKyAgIExlYWtzIHJlZmNvdW50cy4gIERvbid0IHVzZSBpdCEKKyovCisjZGVmaW5lIFB5T2JqZWN0X1JFUFIob2JqKSBQeVVuaWNvZGVfQXNVVEY4KFB5T2JqZWN0X1JlcHIob2JqKSkKICNlbmRpZgogCi10eXBlZGVmIHN0cnVjdCB7Ci0gICAgUHlfaGFzaF90IHByZWZpeDsKLSAgICBQeV9oYXNoX3Qgc3VmZml4OwotfSBfUHlfSGFzaFNlY3JldF90OwotUHlBUElfREFUQShfUHlfSGFzaFNlY3JldF90KSBfUHlfSGFzaFNlY3JldDsKLQotI2lmZGVmIFB5X0RFQlVHCi1QeUFQSV9EQVRBKGludCkgX1B5X0hhc2hTZWNyZXRfSW5pdGlhbGl6ZWQ7Ci0jZW5kaWYKLQotLyogSGVscGVyIGZvciBwYXNzaW5nIG9iamVjdHMgdG8gcHJpbnRmIGFuZCB0aGUgbGlrZSAqLwotI2RlZmluZSBQeU9iamVjdF9SRVBSKG9iaikgX1B5VW5pY29kZV9Bc1N0cmluZyhQeU9iamVjdF9SZXByKG9iaikpCi0KIC8qIEZsYWcgYml0cyBmb3IgcHJpbnRpbmc6ICovCiAjZGVmaW5lIFB5X1BSSU5UX1JBVyAgICAxICAgICAgIC8qIE5vIHN0cmluZyBxdW90ZXMgZXRjLiAqLwogCkBAIC02MDQsNTAgKzYwNiw1NSBAQAogKi8KIAogLyogU2V0IGlmIHRoZSB0eXBlIG9iamVjdCBpcyBkeW5hbWljYWxseSBhbGxvY2F0ZWQgKi8KLSNkZWZpbmUgUHlfVFBGTEFHU19IRUFQVFlQRSAoMUw8PDkpCisjZGVmaW5lIFB5X1RQRkxBR1NfSEVBUFRZUEUgKDFVTCA8PCA5KQogCiAvKiBTZXQgaWYgdGhlIHR5cGUgYWxsb3dzIHN1YmNsYXNzaW5nICovCi0jZGVmaW5lIFB5X1RQRkxBR1NfQkFTRVRZUEUgKDFMPDwxMCkKKyNkZWZpbmUgUHlfVFBGTEFHU19CQVNFVFlQRSAoMVVMIDw8IDEwKQogCiAvKiBTZXQgaWYgdGhlIHR5cGUgaXMgJ3JlYWR5JyAtLSBmdWxseSBpbml0aWFsaXplZCAqLwotI2RlZmluZSBQeV9UUEZMQUdTX1JFQURZICgxTDw8MTIpCisjZGVmaW5lIFB5X1RQRkxBR1NfUkVBRFkgKDFVTCA8PCAxMikKIAogLyogU2V0IHdoaWxlIHRoZSB0eXBlIGlzIGJlaW5nICdyZWFkaWVkJywgdG8gcHJldmVudCByZWN1cnNpdmUgcmVhZHkgY2FsbHMgKi8KLSNkZWZpbmUgUHlfVFBGTEFHU19SRUFEWUlORyAoMUw8PDEzKQorI2RlZmluZSBQeV9UUEZMQUdTX1JFQURZSU5HICgxVUwgPDwgMTMpCiAKIC8qIE9iamVjdHMgc3VwcG9ydCBnYXJiYWdlIGNvbGxlY3Rpb24gKHNlZSBvYmppbXAuaCkgKi8KLSNkZWZpbmUgUHlfVFBGTEFHU19IQVZFX0dDICgxTDw8MTQpCisjZGVmaW5lIFB5X1RQRkxBR1NfSEFWRV9HQyAoMVVMIDw8IDE0KQogCiAvKiBUaGVzZSB0d28gYml0cyBhcmUgcHJlc2VydmVkIGZvciBTdGFja2xlc3MgUHl0aG9uLCBuZXh0IGFmdGVyIHRoaXMgaXMgMTcgKi8KICNpZmRlZiBTVEFDS0xFU1MKLSNkZWZpbmUgUHlfVFBGTEFHU19IQVZFX1NUQUNLTEVTU19FWFRFTlNJT04gKDNMPDwxNSkKKyNkZWZpbmUgUHlfVFBGTEFHU19IQVZFX1NUQUNLTEVTU19FWFRFTlNJT04gKDNVTCA8PCAxNSkKICNlbHNlCiAjZGVmaW5lIFB5X1RQRkxBR1NfSEFWRV9TVEFDS0xFU1NfRVhURU5TSU9OIDAKICNlbmRpZgogCiAvKiBPYmplY3RzIHN1cHBvcnQgdHlwZSBhdHRyaWJ1dGUgY2FjaGUgKi8KLSNkZWZpbmUgUHlfVFBGTEFHU19IQVZFX1ZFUlNJT05fVEFHICAgKDFMPDwxOCkKLSNkZWZpbmUgUHlfVFBGTEFHU19WQUxJRF9WRVJTSU9OX1RBRyAgKDFMPDwxOSkKKyNkZWZpbmUgUHlfVFBGTEFHU19IQVZFX1ZFUlNJT05fVEFHICAgKDFVTCA8PCAxOCkKKyNkZWZpbmUgUHlfVFBGTEFHU19WQUxJRF9WRVJTSU9OX1RBRyAgKDFVTCA8PCAxOSkKIAogLyogVHlwZSBpcyBhYnN0cmFjdCBhbmQgY2Fubm90IGJlIGluc3RhbnRpYXRlZCAqLwotI2RlZmluZSBQeV9UUEZMQUdTX0lTX0FCU1RSQUNUICgxTDw8MjApCisjZGVmaW5lIFB5X1RQRkxBR1NfSVNfQUJTVFJBQ1QgKDFVTCA8PCAyMCkKIAogLyogVGhlc2UgZmxhZ3MgYXJlIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIGEgdHlwZSBpcyBhIHN1YmNsYXNzLiAqLwotI2RlZmluZSBQeV9UUEZMQUdTX0lOVF9TVUJDTEFTUyAgICAgICAgICgxTDw8MjMpCi0jZGVmaW5lIFB5X1RQRkxBR1NfTE9OR19TVUJDTEFTUyAgICAgICAgKDFMPDwyNCkKLSNkZWZpbmUgUHlfVFBGTEFHU19MSVNUX1NVQkNMQVNTICAgICAgICAoMUw8PDI1KQotI2RlZmluZSBQeV9UUEZMQUdTX1RVUExFX1NVQkNMQVNTICAgICAgICgxTDw8MjYpCi0jZGVmaW5lIFB5X1RQRkxBR1NfQllURVNfU1VCQ0xBU1MgICAgICAgKDFMPDwyNykKLSNkZWZpbmUgUHlfVFBGTEFHU19VTklDT0RFX1NVQkNMQVNTICAgICAoMUw8PDI4KQotI2RlZmluZSBQeV9UUEZMQUdTX0RJQ1RfU1VCQ0xBU1MgICAgICAgICgxTDw8MjkpCi0jZGVmaW5lIFB5X1RQRkxBR1NfQkFTRV9FWENfU1VCQ0xBU1MgICAgKDFMPDwzMCkKLSNkZWZpbmUgUHlfVFBGTEFHU19UWVBFX1NVQkNMQVNTICAgICAgICAoMUw8PDMxKQorI2RlZmluZSBQeV9UUEZMQUdTX0xPTkdfU1VCQ0xBU1MgICAgICAgICgxVUwgPDwgMjQpCisjZGVmaW5lIFB5X1RQRkxBR1NfTElTVF9TVUJDTEFTUyAgICAgICAgKDFVTCA8PCAyNSkKKyNkZWZpbmUgUHlfVFBGTEFHU19UVVBMRV9TVUJDTEFTUyAgICAgICAoMVVMIDw8IDI2KQorI2RlZmluZSBQeV9UUEZMQUdTX0JZVEVTX1NVQkNMQVNTICAgICAgICgxVUwgPDwgMjcpCisjZGVmaW5lIFB5X1RQRkxBR1NfVU5JQ09ERV9TVUJDTEFTUyAgICAgKDFVTCA8PCAyOCkKKyNkZWZpbmUgUHlfVFBGTEFHU19ESUNUX1NVQkNMQVNTICAgICAgICAoMVVMIDw8IDI5KQorI2RlZmluZSBQeV9UUEZMQUdTX0JBU0VfRVhDX1NVQkNMQVNTICAgICgxVUwgPDwgMzApCisjZGVmaW5lIFB5X1RQRkxBR1NfVFlQRV9TVUJDTEFTUyAgICAgICAgKDFVTCA8PCAzMSkKIAogI2RlZmluZSBQeV9UUEZMQUdTX0RFRkFVTFQgICggXAogICAgICAgICAgICAgICAgICBQeV9UUEZMQUdTX0hBVkVfU1RBQ0tMRVNTX0VYVEVOU0lPTiB8IFwKICAgICAgICAgICAgICAgICAgUHlfVFBGTEFHU19IQVZFX1ZFUlNJT05fVEFHIHwgXAogICAgICAgICAgICAgICAgIDApCiAKKy8qIE5PVEU6IFRoZSBmb2xsb3dpbmcgZmxhZ3MgcmV1c2UgbG93ZXIgYml0cyAocmVtb3ZlZCBhcyBwYXJ0IG9mIHRoZQorICogUHl0aG9uIDMuMCB0cmFuc2l0aW9uKS4gKi8KKworLyogVHlwZSBzdHJ1Y3R1cmUgaGFzIHRwX2ZpbmFsaXplIG1lbWJlciAoMy40KSAqLworI2RlZmluZSBQeV9UUEZMQUdTX0hBVkVfRklOQUxJWkUgKDFVTCA8PCAwKQorCiAjaWZkZWYgUHlfTElNSVRFRF9BUEkKICNkZWZpbmUgUHlUeXBlX0hhc0ZlYXR1cmUodCxmKSAgKChQeVR5cGVfR2V0RmxhZ3ModCkgJiAoZikpICE9IDApCiAjZWxzZQpAQCAtNjgyLDEyICs2ODksNiBAQAogY29tcGxpY2F0aW9ucyBpbiB0aGUgZGVhbGxvY2F0aW9uIGZ1bmN0aW9uLiAgKFRoaXMgaXMgYWN0dWFsbHkgYQogZGVjaXNpb24gdGhhdCdzIHVwIHRvIHRoZSBpbXBsZW1lbnRlciBvZiBlYWNoIG5ldyB0eXBlIHNvIGlmIHlvdSB3YW50LAogeW91IGNhbiBjb3VudCBzdWNoIHJlZmVyZW5jZXMgdG8gdGhlIHR5cGUgb2JqZWN0LikKLQotKioqIFdBUk5JTkcqKiogVGhlIFB5X0RFQ1JFRiBtYWNybyBtdXN0IGhhdmUgYSBzaWRlLWVmZmVjdC1mcmVlIGFyZ3VtZW50Ci1zaW5jZSBpdCBtYXkgZXZhbHVhdGUgaXRzIGFyZ3VtZW50IG11bHRpcGxlIHRpbWVzLiAgKFRoZSBhbHRlcm5hdGl2ZQotd291bGQgYmUgdG8gbWFjZSBpdCBhIHByb3BlciBmdW5jdGlvbiBvciBhc3NpZ24gaXQgdG8gYSBnbG9iYWwgdGVtcG9yYXJ5Ci12YXJpYWJsZSBmaXJzdCwgYm90aCBvZiB3aGljaCBhcmUgc2xvd2VyOyBhbmQgaW4gYSBtdWx0aS10aHJlYWRlZAotZW52aXJvbm1lbnQgdGhlIGdsb2JhbCB2YXJpYWJsZSB0cmljayBpcyBub3Qgc2FmZS4pCiAqLwogCiAvKiBGaXJzdCBkZWZpbmUgYSBwaWxlIG9mIHNpbXBsZSBoZWxwZXIgbWFjcm9zLCBvbmUgc2V0IHBlciBzcGVjaWFsCkBAIC03MDQsNyArNzA1LDYgQEAKIFB5QVBJX0ZVTkModm9pZCkgX1B5X05lZ2F0aXZlUmVmY291bnQoY29uc3QgY2hhciAqZm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsaW5lbm8sIFB5T2JqZWN0ICpvcCk7CiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIF9QeURpY3RfRHVtbXkodm9pZCk7Ci1QeUFQSV9GVU5DKFB5T2JqZWN0ICopIF9QeVNldF9EdW1teSh2b2lkKTsKIFB5QVBJX0ZVTkMoUHlfc3NpemVfdCkgX1B5X0dldFJlZlRvdGFsKHZvaWQpOwogI2RlZmluZSBfUHlfSU5DX1JFRlRPVEFMICAgICAgICBfUHlfUmVmVG90YWwrKwogI2RlZmluZSBfUHlfREVDX1JFRlRPVEFMICAgICAgICBfUHlfUmVmVG90YWwtLQpAQCAtNzY2LDE5ICs3NjYsMjAgQEAKIAogI2RlZmluZSBQeV9JTkNSRUYob3ApICggICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIF9QeV9JTkNfUkVGVE9UQUwgIF9QeV9SRUZfREVCVUdfQ09NTUEgICAgICAgXAotICAgICgoUHlPYmplY3QqKShvcCkpLT5vYl9yZWZjbnQrKykKKyAgICAoKFB5T2JqZWN0ICopKG9wKSktPm9iX3JlZmNudCsrKQogCiAjZGVmaW5lIFB5X0RFQ1JFRihvcCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBQeU9iamVjdCAqX3B5X2RlY3JlZl90bXAgPSAoUHlPYmplY3QgKikob3ApOyAgICBcCiAgICAgICAgIGlmIChfUHlfREVDX1JFRlRPVEFMICBfUHlfUkVGX0RFQlVHX0NPTU1BICAgICAgIFwKLSAgICAgICAgLS0oKFB5T2JqZWN0Kikob3ApKS0+b2JfcmVmY250ICE9IDApICAgICAgICAgICAgXAotICAgICAgICAgICAgX1B5X0NIRUNLX1JFRkNOVChvcCkgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIC0tKF9weV9kZWNyZWZfdG1wKS0+b2JfcmVmY250ICE9IDApICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIF9QeV9DSEVDS19SRUZDTlQoX3B5X2RlY3JlZl90bXApICAgICAgICAgICAgXAogICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIF9QeV9EZWFsbG9jKChQeU9iamVjdCAqKShvcCkpOyAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgX1B5X0RlYWxsb2MoX3B5X2RlY3JlZl90bXApOyAgICAgICAgICAgICAgICAgICAgXAogICAgIH0gd2hpbGUgKDApCiAKIC8qIFNhZmVseSBkZWNyZWYgYG9wYCBhbmQgc2V0IGBvcGAgdG8gTlVMTCwgZXNwZWNpYWxseSB1c2VmdWwgaW4gdHBfY2xlYXIKLSAqIGFuZCB0cF9kZWFsbG9jIGltcGxlbWVudGF0b25zLgorICogYW5kIHRwX2RlYWxsb2MgaW1wbGVtZW50YXRpb25zLgogICoKICAqIE5vdGUgdGhhdCAidGhlIG9idmlvdXMiIGNvZGUgY2FuIGJlIGRlYWRseToKICAqCkBAIC04MTMsMTYgKzgxNCwyNyBAQAogICovCiAjZGVmaW5lIFB5X0NMRUFSKG9wKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGlmIChvcCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBQeU9iamVjdCAqX3B5X3RtcCA9IChQeU9iamVjdCAqKShvcCk7ICAgICAgICAgICAgICAgXAorICAgICAgICBQeU9iamVjdCAqX3B5X3RtcCA9IChQeU9iamVjdCAqKShvcCk7ICAgXAorICAgICAgICBpZiAoX3B5X3RtcCAhPSBOVUxMKSB7ICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgKG9wKSA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgUHlfREVDUkVGKF9weV90bXApOyAgICAgICAgICAgICAgICAgXAogICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIH0gd2hpbGUgKDApCiAKIC8qIE1hY3JvcyB0byB1c2UgaW4gY2FzZSB0aGUgb2JqZWN0IHBvaW50ZXIgbWF5IGJlIE5VTEw6ICovCi0jZGVmaW5lIFB5X1hJTkNSRUYob3ApIGRvIHsgaWYgKChvcCkgPT0gTlVMTCkgOyBlbHNlIFB5X0lOQ1JFRihvcCk7IH0gd2hpbGUgKDApCi0jZGVmaW5lIFB5X1hERUNSRUYob3ApIGRvIHsgaWYgKChvcCkgPT0gTlVMTCkgOyBlbHNlIFB5X0RFQ1JFRihvcCk7IH0gd2hpbGUgKDApCisjZGVmaW5lIFB5X1hJTkNSRUYob3ApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIFB5T2JqZWN0ICpfcHlfeGluY3JlZl90bXAgPSAoUHlPYmplY3QgKikob3ApOyBcCisgICAgICAgIGlmIChfcHlfeGluY3JlZl90bXAgIT0gTlVMTCkgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBQeV9JTkNSRUYoX3B5X3hpbmNyZWZfdG1wKTsgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBQeV9YREVDUkVGKG9wKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBQeU9iamVjdCAqX3B5X3hkZWNyZWZfdG1wID0gKFB5T2JqZWN0ICopKG9wKTsgXAorICAgICAgICBpZiAoX3B5X3hkZWNyZWZfdG1wICE9IE5VTEwpICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgUHlfREVDUkVGKF9weV94ZGVjcmVmX3RtcCk7ICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKDApCiAKIC8qCiBUaGVzZSBhcmUgcHJvdmlkZWQgYXMgY29udmVuaWVuY2VzIHRvIFB5dGhvbiBydW50aW1lIGVtYmVkZGVycywgc28gdGhhdApkaWZmIC0tZ2l0IGEvSW5jbHVkZS9vYmppbXBsLmggYi9JbmNsdWRlL29iamltcGwuaAppbmRleCBjNmI3ZGY0Li4zZjIxYjcwIDEwMDY0NAotLS0gYS9JbmNsdWRlL29iamltcGwuaAorKysgYi9JbmNsdWRlL29iamltcGwuaApAQCAtOTQsNTEgKzk0LDI3IEBACiAgICB0aGUgb2JqZWN0IGdldHMgaW5pdGlhbGl6ZWQgdmlhIFB5T2JqZWN0X3tJbml0LCBJbml0VmFyfSBhZnRlciBvYnRhaW5pbmcKICAgIHRoZSByYXcgbWVtb3J5LgogKi8KLVB5QVBJX0ZVTkModm9pZCAqKSBQeU9iamVjdF9NYWxsb2Moc2l6ZV90KTsKLVB5QVBJX0ZVTkModm9pZCAqKSBQeU9iamVjdF9SZWFsbG9jKHZvaWQgKiwgc2l6ZV90KTsKLVB5QVBJX0ZVTkModm9pZCkgUHlPYmplY3RfRnJlZSh2b2lkICopOworUHlBUElfRlVOQyh2b2lkICopIFB5T2JqZWN0X01hbGxvYyhzaXplX3Qgc2l6ZSk7CitQeUFQSV9GVU5DKHZvaWQgKikgUHlPYmplY3RfUmVhbGxvYyh2b2lkICpwdHIsIHNpemVfdCBuZXdfc2l6ZSk7CitQeUFQSV9GVU5DKHZvaWQpIFB5T2JqZWN0X0ZyZWUodm9pZCAqcHRyKTsKIAorLyogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBudW1iZXIgb2YgYWxsb2NhdGVkIG1lbW9yeSBibG9ja3MsIHJlZ2FyZGxlc3Mgb2Ygc2l6ZSAqLworUHlBUElfRlVOQyhQeV9zc2l6ZV90KSBfUHlfR2V0QWxsb2NhdGVkQmxvY2tzKHZvaWQpOwogCiAvKiBNYWNyb3MgKi8KICNpZmRlZiBXSVRIX1BZTUFMTE9DCiAjaWZuZGVmIFB5X0xJTUlURURfQVBJCiBQeUFQSV9GVU5DKHZvaWQpIF9QeU9iamVjdF9EZWJ1Z01hbGxvY1N0YXRzKEZJTEUgKm91dCk7CiAjZW5kaWYgLyogI2lmbmRlZiBQeV9MSU1JVEVEX0FQSSAqLwotI2lmZGVmIFBZTUFMTE9DX0RFQlVHICAgLyogV0lUSF9QWU1BTExPQyAmJiBQWU1BTExPQ19ERUJVRyAqLwotUHlBUElfRlVOQyh2b2lkICopIF9QeU9iamVjdF9EZWJ1Z01hbGxvYyhzaXplX3QgbmJ5dGVzKTsKLVB5QVBJX0ZVTkModm9pZCAqKSBfUHlPYmplY3RfRGVidWdSZWFsbG9jKHZvaWQgKnAsIHNpemVfdCBuYnl0ZXMpOwotUHlBUElfRlVOQyh2b2lkKSBfUHlPYmplY3RfRGVidWdGcmVlKHZvaWQgKnApOwotUHlBUElfRlVOQyh2b2lkKSBfUHlPYmplY3RfRGVidWdEdW1wQWRkcmVzcyhjb25zdCB2b2lkICpwKTsKLVB5QVBJX0ZVTkModm9pZCkgX1B5T2JqZWN0X0RlYnVnQ2hlY2tBZGRyZXNzKGNvbnN0IHZvaWQgKnApOwotUHlBUElfRlVOQyh2b2lkICopIF9QeU9iamVjdF9EZWJ1Z01hbGxvY0FwaShjaGFyIGFwaSwgc2l6ZV90IG5ieXRlcyk7Ci1QeUFQSV9GVU5DKHZvaWQgKikgX1B5T2JqZWN0X0RlYnVnUmVhbGxvY0FwaShjaGFyIGFwaSwgdm9pZCAqcCwgc2l6ZV90IG5ieXRlcyk7Ci1QeUFQSV9GVU5DKHZvaWQpIF9QeU9iamVjdF9EZWJ1Z0ZyZWVBcGkoY2hhciBhcGksIHZvaWQgKnApOwotUHlBUElfRlVOQyh2b2lkKSBfUHlPYmplY3RfRGVidWdDaGVja0FkZHJlc3NBcGkoY2hhciBhcGksIGNvbnN0IHZvaWQgKnApOwotUHlBUElfRlVOQyh2b2lkICopIF9QeU1lbV9EZWJ1Z01hbGxvYyhzaXplX3QgbmJ5dGVzKTsKLVB5QVBJX0ZVTkModm9pZCAqKSBfUHlNZW1fRGVidWdSZWFsbG9jKHZvaWQgKnAsIHNpemVfdCBuYnl0ZXMpOwotUHlBUElfRlVOQyh2b2lkKSBfUHlNZW1fRGVidWdGcmVlKHZvaWQgKnApOwotI2RlZmluZSBQeU9iamVjdF9NQUxMT0MgICAgICAgICBfUHlPYmplY3RfRGVidWdNYWxsb2MKLSNkZWZpbmUgUHlPYmplY3RfTWFsbG9jICAgICAgICAgX1B5T2JqZWN0X0RlYnVnTWFsbG9jCi0jZGVmaW5lIFB5T2JqZWN0X1JFQUxMT0MgICAgICAgIF9QeU9iamVjdF9EZWJ1Z1JlYWxsb2MKLSNkZWZpbmUgUHlPYmplY3RfUmVhbGxvYyAgICAgICAgX1B5T2JqZWN0X0RlYnVnUmVhbGxvYwotI2RlZmluZSBQeU9iamVjdF9GUkVFICAgICAgICAgICBfUHlPYmplY3RfRGVidWdGcmVlCi0jZGVmaW5lIFB5T2JqZWN0X0ZyZWUgICAgICAgICAgIF9QeU9iamVjdF9EZWJ1Z0ZyZWUKKyNlbmRpZgogCi0jZWxzZSAgIC8qIFdJVEhfUFlNQUxMT0MgJiYgISBQWU1BTExPQ19ERUJVRyAqLworLyogTWFjcm9zICovCiAjZGVmaW5lIFB5T2JqZWN0X01BTExPQyAgICAgICAgIFB5T2JqZWN0X01hbGxvYwogI2RlZmluZSBQeU9iamVjdF9SRUFMTE9DICAgICAgICBQeU9iamVjdF9SZWFsbG9jCiAjZGVmaW5lIFB5T2JqZWN0X0ZSRUUgICAgICAgICAgIFB5T2JqZWN0X0ZyZWUKLSNlbmRpZgotCi0jZWxzZSAgIC8qICEgV0lUSF9QWU1BTExPQyAqLwotI2RlZmluZSBQeU9iamVjdF9NQUxMT0MgICAgICAgICBQeU1lbV9NQUxMT0MKLSNkZWZpbmUgUHlPYmplY3RfUkVBTExPQyAgICAgICAgUHlNZW1fUkVBTExPQwotI2RlZmluZSBQeU9iamVjdF9GUkVFICAgICAgICAgICBQeU1lbV9GUkVFCi0KLSNlbmRpZiAgLyogV0lUSF9QWU1BTExPQyAqLwotCiAjZGVmaW5lIFB5T2JqZWN0X0RlbCAgICAgICAgICAgIFB5T2JqZWN0X0ZyZWUKLSNkZWZpbmUgUHlPYmplY3RfREVMICAgICAgICAgICAgUHlPYmplY3RfRlJFRQorI2RlZmluZSBQeU9iamVjdF9ERUwgICAgICAgICAgICBQeU9iamVjdF9GcmVlCisKIAogLyoKICAqIEdlbmVyaWMgb2JqZWN0IGFsbG9jYXRvciBpbnRlcmZhY2UKQEAgLTIyMiw2ICsxOTgsMjYgQEAKICAgIGNvbnN0cnVjdG9yIHlvdSB3b3VsZCBzdGFydCBkaXJlY3RseSB3aXRoIFB5T2JqZWN0X0luaXQvSW5pdFZhcgogKi8KIAorI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQordHlwZWRlZiBzdHJ1Y3QgeworICAgIC8qIHVzZXIgY29udGV4dCBwYXNzZWQgYXMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSAyIGZ1bmN0aW9ucyAqLworICAgIHZvaWQgKmN0eDsKKworICAgIC8qIGFsbG9jYXRlIGFuIGFyZW5hIG9mIHNpemUgYnl0ZXMgKi8KKyAgICB2b2lkKiAoKmFsbG9jKSAodm9pZCAqY3R4LCBzaXplX3Qgc2l6ZSk7CisKKyAgICAvKiBmcmVlIGFuIGFyZW5hICovCisgICAgdm9pZCAoKmZyZWUpICh2b2lkICpjdHgsIHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpOworfSBQeU9iamVjdEFyZW5hQWxsb2NhdG9yOworCisvKiBHZXQgdGhlIGFyZW5hIGFsbG9jYXRvci4gKi8KK1B5QVBJX0ZVTkModm9pZCkgUHlPYmplY3RfR2V0QXJlbmFBbGxvY2F0b3IoUHlPYmplY3RBcmVuYUFsbG9jYXRvciAqYWxsb2NhdG9yKTsKKworLyogU2V0IHRoZSBhcmVuYSBhbGxvY2F0b3IuICovCitQeUFQSV9GVU5DKHZvaWQpIFB5T2JqZWN0X1NldEFyZW5hQWxsb2NhdG9yKFB5T2JqZWN0QXJlbmFBbGxvY2F0b3IgKmFsbG9jYXRvcik7CisjZW5kaWYKKworCiAvKgogICogR2FyYmFnZSBDb2xsZWN0aW9uIFN1cHBvcnQKICAqID09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0yMzAsNiArMjI2LDEwIEBACiAvKiBDIGVxdWl2YWxlbnQgb2YgZ2MuY29sbGVjdCgpLiAqLwogUHlBUElfRlVOQyhQeV9zc2l6ZV90KSBQeUdDX0NvbGxlY3Qodm9pZCk7CiAKKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKK1B5QVBJX0ZVTkMoUHlfc3NpemVfdCkgX1B5R0NfQ29sbGVjdE5vRmFpbCh2b2lkKTsKKyNlbmRpZgorCiAvKiBUZXN0IGlmIGEgdHlwZSBoYXMgYSBHQyBoZWFkICovCiAjZGVmaW5lIFB5VHlwZV9JU19HQyh0KSBQeVR5cGVfSGFzRmVhdHVyZSgodCksIFB5X1RQRkxBR1NfSEFWRV9HQykKIApAQCAtMjQ5LDEzICsyNDksMzcgQEAKICAgICAgICAgdW5pb24gX2djX2hlYWQgKmdjX3ByZXY7CiAgICAgICAgIFB5X3NzaXplX3QgZ2NfcmVmczsKICAgICB9IGdjOwotICAgIGxvbmcgZG91YmxlIGR1bW15OyAgLyogZm9yY2Ugd29yc3QtY2FzZSBhbGlnbm1lbnQgKi8KKyAgICBkb3VibGUgZHVtbXk7ICAvKiBmb3JjZSB3b3JzdC1jYXNlIGFsaWdubWVudCAqLwogfSBQeUdDX0hlYWQ7CiAKIGV4dGVybiBQeUdDX0hlYWQgKl9QeUdDX2dlbmVyYXRpb24wOwogCiAjZGVmaW5lIF9QeV9BU19HQyhvKSAoKFB5R0NfSGVhZCAqKShvKS0xKQogCisvKiBCaXQgMCBpcyBzZXQgd2hlbiB0cF9maW5hbGl6ZSBpcyBjYWxsZWQgKi8KKyNkZWZpbmUgX1B5R0NfUkVGU19NQVNLX0ZJTkFMSVpFRCAgKDEgPDwgMCkKKy8qIFRoZSAoTi0xKSBtb3N0IHNpZ25pZmljYW50IGJpdHMgY29udGFpbiB0aGUgZ2Mgc3RhdGUgLyByZWZjb3VudCAqLworI2RlZmluZSBfUHlHQ19SRUZTX1NISUZUICAgICAgICAgICAoMSkKKyNkZWZpbmUgX1B5R0NfUkVGU19NQVNLICAgICAgICAgICAgKCgoc2l6ZV90KSAtMSkgPDwgX1B5R0NfUkVGU19TSElGVCkKKworI2RlZmluZSBfUHlHQ0hlYWRfUkVGUyhnKSAoKGcpLT5nYy5nY19yZWZzID4+IF9QeUdDX1JFRlNfU0hJRlQpCisjZGVmaW5lIF9QeUdDSGVhZF9TRVRfUkVGUyhnLCB2KSBkbyB7IFwKKyAgICAoZyktPmdjLmdjX3JlZnMgPSAoKGcpLT5nYy5nY19yZWZzICYgfl9QeUdDX1JFRlNfTUFTSykgXAorICAgICAgICB8ICgoKHNpemVfdCkodikpIDw8IF9QeUdDX1JFRlNfU0hJRlQpOyAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoMCkKKyNkZWZpbmUgX1B5R0NIZWFkX0RFQ1JFRihnKSAoKGcpLT5nYy5nY19yZWZzIC09IDEgPDwgX1B5R0NfUkVGU19TSElGVCkKKworI2RlZmluZSBfUHlHQ0hlYWRfRklOQUxJWkVEKGcpICgoKGcpLT5nYy5nY19yZWZzICYgX1B5R0NfUkVGU19NQVNLX0ZJTkFMSVpFRCkgIT0gMCkKKyNkZWZpbmUgX1B5R0NIZWFkX1NFVF9GSU5BTElaRUQoZywgdikgZG8geyAgXAorICAgIChnKS0+Z2MuZ2NfcmVmcyA9ICgoZyktPmdjLmdjX3JlZnMgJiB+X1B5R0NfUkVGU19NQVNLX0ZJTkFMSVpFRCkgXAorICAgICAgICB8ICh2ICE9IDApOyBcCisgICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBfUHlHQ19GSU5BTElaRUQobykgX1B5R0NIZWFkX0ZJTkFMSVpFRChfUHlfQVNfR0MobykpCisjZGVmaW5lIF9QeUdDX1NFVF9GSU5BTElaRUQobywgdikgX1B5R0NIZWFkX1NFVF9GSU5BTElaRUQoX1B5X0FTX0dDKG8pLCB2KQorCisjZGVmaW5lIF9QeUdDX1JFRlMobykgX1B5R0NIZWFkX1JFRlMoX1B5X0FTX0dDKG8pKQorCiAjZGVmaW5lIF9QeUdDX1JFRlNfVU5UUkFDS0VEICAgICAgICAgICAgICAgICAgICAoLTIpCiAjZGVmaW5lIF9QeUdDX1JFRlNfUkVBQ0hBQkxFICAgICAgICAgICAgICAgICAgICAoLTMpCiAjZGVmaW5lIF9QeUdDX1JFRlNfVEVOVEFUSVZFTFlfVU5SRUFDSEFCTEUgICAgICAoLTQpCkBAIC0yNjQsOSArMjg4LDkgQEAKICAqIGNvbGxlY3RvciBpdCBtdXN0IGJlIHNhZmUgdG8gY2FsbCB0aGUgb2JfdHJhdmVyc2UgbWV0aG9kLiAqLwogI2RlZmluZSBfUHlPYmplY3RfR0NfVFJBQ0sobykgZG8geyBcCiAgICAgUHlHQ19IZWFkICpnID0gX1B5X0FTX0dDKG8pOyBcCi0gICAgaWYgKGctPmdjLmdjX3JlZnMgIT0gX1B5R0NfUkVGU19VTlRSQUNLRUQpIFwKKyAgICBpZiAoX1B5R0NIZWFkX1JFRlMoZykgIT0gX1B5R0NfUkVGU19VTlRSQUNLRUQpIFwKICAgICAgICAgUHlfRmF0YWxFcnJvcigiR0Mgb2JqZWN0IGFscmVhZHkgdHJhY2tlZCIpOyBcCi0gICAgZy0+Z2MuZ2NfcmVmcyA9IF9QeUdDX1JFRlNfUkVBQ0hBQkxFOyBcCisgICAgX1B5R0NIZWFkX1NFVF9SRUZTKGcsIF9QeUdDX1JFRlNfUkVBQ0hBQkxFKTsgXAogICAgIGctPmdjLmdjX25leHQgPSBfUHlHQ19nZW5lcmF0aW9uMDsgXAogICAgIGctPmdjLmdjX3ByZXYgPSBfUHlHQ19nZW5lcmF0aW9uMC0+Z2MuZ2NfcHJldjsgXAogICAgIGctPmdjLmdjX3ByZXYtPmdjLmdjX25leHQgPSBnOyBcCkBAIC0yNzksOCArMzAzLDggQEAKICAqLwogI2RlZmluZSBfUHlPYmplY3RfR0NfVU5UUkFDSyhvKSBkbyB7IFwKICAgICBQeUdDX0hlYWQgKmcgPSBfUHlfQVNfR0Mobyk7IFwKLSAgICBhc3NlcnQoZy0+Z2MuZ2NfcmVmcyAhPSBfUHlHQ19SRUZTX1VOVFJBQ0tFRCk7IFwKLSAgICBnLT5nYy5nY19yZWZzID0gX1B5R0NfUkVGU19VTlRSQUNLRUQ7IFwKKyAgICBhc3NlcnQoX1B5R0NIZWFkX1JFRlMoZykgIT0gX1B5R0NfUkVGU19VTlRSQUNLRUQpOyBcCisgICAgX1B5R0NIZWFkX1NFVF9SRUZTKGcsIF9QeUdDX1JFRlNfVU5UUkFDS0VEKTsgXAogICAgIGctPmdjLmdjX3ByZXYtPmdjLmdjX25leHQgPSBnLT5nYy5nY19uZXh0OyBcCiAgICAgZy0+Z2MuZ2NfbmV4dC0+Z2MuZ2NfcHJldiA9IGctPmdjLmdjX3ByZXY7IFwKICAgICBnLT5nYy5nY19uZXh0ID0gTlVMTDsgXApAQCAtMjg4LDcgKzMxMiw3IEBACiAKIC8qIFRydWUgaWYgdGhlIG9iamVjdCBpcyBjdXJyZW50bHkgdHJhY2tlZCBieSB0aGUgR0MuICovCiAjZGVmaW5lIF9QeU9iamVjdF9HQ19JU19UUkFDS0VEKG8pIFwKLSAgICAoKF9QeV9BU19HQyhvKSktPmdjLmdjX3JlZnMgIT0gX1B5R0NfUkVGU19VTlRSQUNLRUQpCisgICAgKF9QeUdDX1JFRlMobykgIT0gX1B5R0NfUkVGU19VTlRSQUNLRUQpCiAKIC8qIFRydWUgaWYgdGhlIG9iamVjdCBtYXkgYmUgdHJhY2tlZCBieSB0aGUgR0MgaW4gdGhlIGZ1dHVyZSwgb3IgYWxyZWFkeSBpcy4KICAgIFRoaXMgY2FuIGJlIHVzZWZ1bCB0byBpbXBsZW1lbnQgc29tZSBvcHRpbWl6YXRpb25zLiAqLwpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9vcGNvZGUuaCBiL0luY2x1ZGUvb3Bjb2RlLmgKaW5kZXggYTkwMTg0ZC4uMDkzNmYyZCAxMDA2NDQKLS0tIGEvSW5jbHVkZS9vcGNvZGUuaAorKysgYi9JbmNsdWRlL29wY29kZS5oCkBAIC00OSw3ICs0OSw2IEBACiAjZGVmaW5lIEJJTkFSWV9PUiAgICAgICA2NgogI2RlZmluZSBJTlBMQUNFX1BPV0VSICAgNjcKICNkZWZpbmUgR0VUX0lURVIgICAgICAgIDY4Ci0jZGVmaW5lIFNUT1JFX0xPQ0FMUyAgICA2OQogI2RlZmluZSBQUklOVF9FWFBSICAgICAgNzAKICNkZWZpbmUgTE9BRF9CVUlMRF9DTEFTUyA3MQogI2RlZmluZSBZSUVMRF9GUk9NICAgICAgNzIKQEAgLTE0MCw2ICsxMzksNyBAQAogI2RlZmluZSBTRVRfQUREICAgICAgICAgMTQ2CiAjZGVmaW5lIE1BUF9BREQgICAgICAgICAxNDcKIAorI2RlZmluZSBMT0FEX0NMQVNTREVSRUYgICAxNDgKIAogLyogRVhDRVBUX0hBTkRMRVIgaXMgYSBzcGVjaWFsLCBpbXBsaWNpdCBibG9jayB0eXBlIHdoaWNoIGlzIGNyZWF0ZWQgd2hlbgogICAgZW50ZXJpbmcgYW4gZXhjZXB0IGhhbmRsZXIuIEl0IGlzIG5vdCBhbiBvcGNvZGUgYnV0IHdlIGRlZmluZSBpdCBoZXJlCmRpZmYgLS1naXQgYS9JbmNsdWRlL29zZGVmcy5oIGIvSW5jbHVkZS9vc2RlZnMuaAppbmRleCAwNWMwYzhlLi4wYzJlMzRiIDEwMDY0NAotLS0gYS9JbmNsdWRlL29zZGVmcy5oCisrKyBiL0luY2x1ZGUvb3NkZWZzLmgKQEAgLTksMTYgKzksMTAgQEAKIAogLyogTW9kIGJ5IGNocmlzaDogUU5YIGhhcyBXQVRDT00sIGJ1dCBpc24ndCBET1MgKi8KICNpZiAhZGVmaW5lZChfX1FOWF9fKQotI2lmIGRlZmluZWQoTVNfV0lORE9XUykgfHwgZGVmaW5lZChfX0JPUkxBTkRDX18pIHx8IGRlZmluZWQoX19XQVRDT01DX18pIHx8IGRlZmluZWQoX19ESkdQUF9fKSB8fCBkZWZpbmVkKFBZT1NfT1MyKQotI2lmIGRlZmluZWQoUFlPU19PUzIpICYmIGRlZmluZWQoUFlDQ19HQ0MpCi0jZGVmaW5lIE1BWFBBVEhMRU4gMjYwCi0jZGVmaW5lIFNFUCBMJy8nCi0jZGVmaW5lIEFMVFNFUCBMJ1xcJwotI2Vsc2UKKyNpZiBkZWZpbmVkKE1TX1dJTkRPV1MpIHx8IGRlZmluZWQoX19CT1JMQU5EQ19fKSB8fCBkZWZpbmVkKF9fV0FUQ09NQ19fKSB8fCBkZWZpbmVkKF9fREpHUFBfXykKICNkZWZpbmUgU0VQIEwnXFwnCiAjZGVmaW5lIEFMVFNFUCBMJy8nCiAjZGVmaW5lIE1BWFBBVEhMRU4gMjU2Ci0jZW5kaWYKICNkZWZpbmUgREVMSU0gTCc7JwogI2VuZGlmCiAjZW5kaWYKZGlmZiAtLWdpdCBhL0luY2x1ZGUvcGFyc2V0b2suaCBiL0luY2x1ZGUvcGFyc2V0b2suaAppbmRleCA5MTFkZmMxLi4yYWNiODU0IDEwMDY0NAotLS0gYS9JbmNsdWRlL3BhcnNldG9rLmgKKysrIGIvSW5jbHVkZS9wYXJzZXRvay5oCkBAIC0zOCwyOSArMzgsNDkgQEAKIFB5QVBJX0ZVTkMobm9kZSAqKSBQeVBhcnNlcl9QYXJzZVN0cmluZyhjb25zdCBjaGFyICosIGdyYW1tYXIgKiwgaW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcnJkZXRhaWwgKik7CiBQeUFQSV9GVU5DKG5vZGUgKikgUHlQYXJzZXJfUGFyc2VGaWxlIChGSUxFICosIGNvbnN0IGNoYXIgKiwgZ3JhbW1hciAqLCBpbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICosIGNoYXIgKiwgcGVycmRldGFpbCAqKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVycmRldGFpbCAqKTsKIAogUHlBUElfRlVOQyhub2RlICopIFB5UGFyc2VyX1BhcnNlU3RyaW5nRmxhZ3MoY29uc3QgY2hhciAqLCBncmFtbWFyICosIGludCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJyZGV0YWlsICosIGludCk7Ci1QeUFQSV9GVU5DKG5vZGUgKikgUHlQYXJzZXJfUGFyc2VGaWxlRmxhZ3MoRklMRSAqLCBjb25zdCBjaGFyICosCi0JCQkJCSAgIGNvbnN0IGNoYXIqLCBncmFtbWFyICosCi0JCQkJCQkgaW50LCBjaGFyICosIGNoYXIgKiwKLQkJCQkJCSBwZXJyZGV0YWlsICosIGludCk7CitQeUFQSV9GVU5DKG5vZGUgKikgUHlQYXJzZXJfUGFyc2VGaWxlRmxhZ3MoCisgICAgRklMRSAqZnAsCisgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsICAgICAgIC8qIGRlY29kZWQgZnJvbSB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZyAqLworICAgIGNvbnN0IGNoYXIgKmVuYywKKyAgICBncmFtbWFyICpnLAorICAgIGludCBzdGFydCwKKyAgICBjb25zdCBjaGFyICpwczEsCisgICAgY29uc3QgY2hhciAqcHMyLAorICAgIHBlcnJkZXRhaWwgKmVycl9yZXQsCisgICAgaW50IGZsYWdzKTsKIFB5QVBJX0ZVTkMobm9kZSAqKSBQeVBhcnNlcl9QYXJzZUZpbGVGbGFnc0V4KAogICAgIEZJTEUgKmZwLAogICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCAgICAgICAvKiBkZWNvZGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0gZW5jb2RpbmcgKi8KICAgICBjb25zdCBjaGFyICplbmMsCiAgICAgZ3JhbW1hciAqZywKICAgICBpbnQgc3RhcnQsCi0gICAgY2hhciAqcHMxLAotICAgIGNoYXIgKnBzMiwKKyAgICBjb25zdCBjaGFyICpwczEsCisgICAgY29uc3QgY2hhciAqcHMyLAorICAgIHBlcnJkZXRhaWwgKmVycl9yZXQsCisgICAgaW50ICpmbGFncyk7CitQeUFQSV9GVU5DKG5vZGUgKikgUHlQYXJzZXJfUGFyc2VGaWxlT2JqZWN0KAorICAgIEZJTEUgKmZwLAorICAgIFB5T2JqZWN0ICpmaWxlbmFtZSwKKyAgICBjb25zdCBjaGFyICplbmMsCisgICAgZ3JhbW1hciAqZywKKyAgICBpbnQgc3RhcnQsCisgICAgY29uc3QgY2hhciAqcHMxLAorICAgIGNvbnN0IGNoYXIgKnBzMiwKICAgICBwZXJyZGV0YWlsICplcnJfcmV0LAogICAgIGludCAqZmxhZ3MpOwogCi1QeUFQSV9GVU5DKG5vZGUgKikgUHlQYXJzZXJfUGFyc2VTdHJpbmdGbGFnc0ZpbGVuYW1lKGNvbnN0IGNoYXIgKiwKLQkJCQkJICAgICAgY29uc3QgY2hhciAqLAotCQkJCQkgICAgICBncmFtbWFyICosIGludCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJyZGV0YWlsICosIGludCk7CitQeUFQSV9GVU5DKG5vZGUgKikgUHlQYXJzZXJfUGFyc2VTdHJpbmdGbGFnc0ZpbGVuYW1lKAorICAgIGNvbnN0IGNoYXIgKnMsCisgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsICAgICAgIC8qIGRlY29kZWQgZnJvbSB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZyAqLworICAgIGdyYW1tYXIgKmcsCisgICAgaW50IHN0YXJ0LAorICAgIHBlcnJkZXRhaWwgKmVycl9yZXQsCisgICAgaW50IGZsYWdzKTsKIFB5QVBJX0ZVTkMobm9kZSAqKSBQeVBhcnNlcl9QYXJzZVN0cmluZ0ZsYWdzRmlsZW5hbWVFeCgKICAgICBjb25zdCBjaGFyICpzLAogICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCAgICAgICAvKiBkZWNvZGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0gZW5jb2RpbmcgKi8KQEAgLTY4LDYgKzg4LDEzIEBACiAgICAgaW50IHN0YXJ0LAogICAgIHBlcnJkZXRhaWwgKmVycl9yZXQsCiAgICAgaW50ICpmbGFncyk7CitQeUFQSV9GVU5DKG5vZGUgKikgUHlQYXJzZXJfUGFyc2VTdHJpbmdPYmplY3QoCisgICAgY29uc3QgY2hhciAqcywKKyAgICBQeU9iamVjdCAqZmlsZW5hbWUsCisgICAgZ3JhbW1hciAqZywKKyAgICBpbnQgc3RhcnQsCisgICAgcGVycmRldGFpbCAqZXJyX3JldCwKKyAgICBpbnQgKmZsYWdzKTsKIAogLyogTm90ZSB0aGF0IHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSBkZWZpbmVkIGluIHB5dGhvbnJ1bi5jLAogICAgbm90IGluIHBhcnNldG9rLmMgKi8KZGlmZiAtLWdpdCBhL0luY2x1ZGUvcGF0Y2hsZXZlbC5oIGIvSW5jbHVkZS9wYXRjaGxldmVsLmgKaW5kZXggNzIxNjY2Yy4uZTFhMTQ3YiAxMDA2NDQKLS0tIGEvSW5jbHVkZS9wYXRjaGxldmVsLmgKKysrIGIvSW5jbHVkZS9wYXRjaGxldmVsLmgKQEAgLTE3LDEzICsxNywxMyBAQAogLyogVmVyc2lvbiBwYXJzZWQgb3V0IGludG8gbnVtZXJpYyB2YWx1ZXMgKi8KIC8qLS1zdGFydCBjb25zdGFudHMtLSovCiAjZGVmaW5lIFBZX01BSk9SX1ZFUlNJT04JMwotI2RlZmluZSBQWV9NSU5PUl9WRVJTSU9OCTMKLSNkZWZpbmUgUFlfTUlDUk9fVkVSU0lPTgk2CisjZGVmaW5lIFBZX01JTk9SX1ZFUlNJT04JNAorI2RlZmluZSBQWV9NSUNST19WRVJTSU9OCTQKICNkZWZpbmUgUFlfUkVMRUFTRV9MRVZFTAlQWV9SRUxFQVNFX0xFVkVMX0ZJTkFMCiAjZGVmaW5lIFBZX1JFTEVBU0VfU0VSSUFMCTAKIAogLyogVmVyc2lvbiBhcyBhIHN0cmluZyAqLwotI2RlZmluZSBQWV9WRVJTSU9OICAgICAgCSIzLjMuNiIKKyNkZWZpbmUgUFlfVkVSU0lPTiAgICAgIAkiMy40LjQrIgogLyotLWVuZCBjb25zdGFudHMtLSovCiAKIC8qIFZlcnNpb24gYXMgYSBzaW5nbGUgNC1ieXRlIGhleCBudW1iZXIsIGUuZy4gMHgwMTA1MDJCMiA9PSAxLjUuMmIyLgpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9weWRlYnVnLmggYi9JbmNsdWRlL3B5ZGVidWcuaAppbmRleCA5N2MyZjhjLi44ZmU5ODE4IDEwMDY0NAotLS0gYS9JbmNsdWRlL3B5ZGVidWcuaAorKysgYi9JbmNsdWRlL3B5ZGVidWcuaApAQCAtMjAsNiArMjAsNyBAQAogUHlBUElfREFUQShpbnQpIFB5X05vVXNlclNpdGVEaXJlY3Rvcnk7CiBQeUFQSV9EQVRBKGludCkgUHlfVW5idWZmZXJlZFN0ZGlvRmxhZzsKIFB5QVBJX0RBVEEoaW50KSBQeV9IYXNoUmFuZG9taXphdGlvbkZsYWc7CitQeUFQSV9EQVRBKGludCkgUHlfSXNvbGF0ZWRGbGFnOwogCiAvKiB0aGlzIGlzIGEgd3JhcHBlciBhcm91bmQgZ2V0ZW52KCkgdGhhdCBwYXlzIGF0dGVudGlvbiB0bwogICAgUHlfSWdub3JlRW52aXJvbm1lbnRGbGFnLiAgSXQgc2hvdWxkIGJlIHVzZWQgZm9yIGdldHRpbmcgdmFyaWFibGVzIGxpa2UKZGlmZiAtLWdpdCBhL0luY2x1ZGUvcHllcnJvcnMuaCBiL0luY2x1ZGUvcHllcnJvcnMuaAppbmRleCBlMzg1MTIzLi4wMmY2NWQ2IDEwMDY0NAotLS0gYS9JbmNsdWRlL3B5ZXJyb3JzLmgKKysrIGIvSW5jbHVkZS9weWVycm9ycy5oCkBAIC01Myw2ICs1Myw3IEBACiAgICAgUHlPYmplY3QgKm15ZXJybm87CiAgICAgUHlPYmplY3QgKnN0cmVycm9yOwogICAgIFB5T2JqZWN0ICpmaWxlbmFtZTsKKyAgICBQeU9iamVjdCAqZmlsZW5hbWUyOwogI2lmZGVmIE1TX1dJTkRPV1MKICAgICBQeU9iamVjdCAqd2luZXJyb3I7CiAjZW5kaWYKQEAgLTc1LDYgKzc2LDkgQEAKIAogUHlBUElfRlVOQyh2b2lkKSBQeUVycl9TZXROb25lKFB5T2JqZWN0ICopOwogUHlBUElfRlVOQyh2b2lkKSBQeUVycl9TZXRPYmplY3QoUHlPYmplY3QgKiwgUHlPYmplY3QgKik7CisjaWZuZGVmIFB5X0xJTUlURURfQVBJCitQeUFQSV9GVU5DKHZvaWQpIF9QeUVycl9TZXRLZXlFcnJvcihQeU9iamVjdCAqKTsKKyNlbmRpZgogUHlBUElfRlVOQyh2b2lkKSBQeUVycl9TZXRTdHJpbmcoCiAgICAgUHlPYmplY3QgKmV4Y2VwdGlvbiwKICAgICBjb25zdCBjaGFyICpzdHJpbmcgICAvKiBkZWNvZGVkIGZyb20gdXRmLTggKi8KQEAgLTExOSw3ICsxMjMsOSBAQAogLyogQ29udGV4dCBtYW5pcHVsYXRpb24gKFBFUCAzMTM0KSAqLwogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUV4Y2VwdGlvbl9HZXRDb250ZXh0KFB5T2JqZWN0ICopOwogUHlBUElfRlVOQyh2b2lkKSBQeUV4Y2VwdGlvbl9TZXRDb250ZXh0KFB5T2JqZWN0ICosIFB5T2JqZWN0ICopOwotCisjaWZuZGVmIFB5X0xJTUlURURfQVBJCitQeUFQSV9GVU5DKHZvaWQpIF9QeUVycl9DaGFpbkV4Y2VwdGlvbnMoUHlPYmplY3QgKiwgUHlPYmplY3QgKiwgUHlPYmplY3QgKik7CisjZW5kaWYKIAogLyogKi8KIApAQCAtMTk4LDkgKzIwNCw2IEBACiAjaWZkZWYgTVNfV0lORE9XUwogUHlBUElfREFUQShQeU9iamVjdCAqKSBQeUV4Y19XaW5kb3dzRXJyb3I7CiAjZW5kaWYKLSNpZmRlZiBfX1ZNUwotUHlBUElfREFUQShQeU9iamVjdCAqKSBQeUV4Y19WTVNFcnJvcjsKLSNlbmRpZgogCiBQeUFQSV9EQVRBKFB5T2JqZWN0ICopIFB5RXhjX1JlY3Vyc2lvbkVycm9ySW5zdDsKIApAQCAtMjI1LDYgKzIyOCw4IEBACiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5RXJyX1NldEZyb21FcnJubyhQeU9iamVjdCAqKTsKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lT2JqZWN0KAogICAgIFB5T2JqZWN0ICosIFB5T2JqZWN0ICopOworUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWVPYmplY3RzKAorICAgIFB5T2JqZWN0ICosIFB5T2JqZWN0ICosIFB5T2JqZWN0ICopOwogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWUoCiAgICAgUHlPYmplY3QgKmV4YywKICAgICBjb25zdCBjaGFyICpmaWxlbmFtZSAgIC8qIGRlY29kZWQgZnJvbSB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZyAqLwpAQCAtMjUzLDYgKzI1OCw4IEBACiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKGludCk7CiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5RXJyX1NldEV4Y0Zyb21XaW5kb3dzRXJyV2l0aEZpbGVuYW1lT2JqZWN0KAogICAgIFB5T2JqZWN0ICosaW50LCBQeU9iamVjdCAqKTsKK1B5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlFcnJfU2V0RXhjRnJvbVdpbmRvd3NFcnJXaXRoRmlsZW5hbWVPYmplY3RzKAorICAgIFB5T2JqZWN0ICosaW50LCBQeU9iamVjdCAqLCBQeU9iamVjdCAqKTsKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlFcnJfU2V0RXhjRnJvbVdpbmRvd3NFcnJXaXRoRmlsZW5hbWUoCiAgICAgUHlPYmplY3QgKmV4YywKICAgICBpbnQgaWVyciwKQEAgLTI4NCw2ICsyOTEsMjggQEAKICAgICBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpkb2MsIFB5T2JqZWN0ICpiYXNlLCBQeU9iamVjdCAqZGljdCk7CiBQeUFQSV9GVU5DKHZvaWQpIFB5RXJyX1dyaXRlVW5yYWlzYWJsZShQeU9iamVjdCAqKTsKIAorLyogSW4gZXhjZXB0aW9ucy5jICovCisjaWZuZGVmIFB5X0xJTUlURURfQVBJCisvKiBIZWxwZXIgdGhhdCBhdHRlbXB0cyB0byByZXBsYWNlIHRoZSBjdXJyZW50IGV4Y2VwdGlvbiB3aXRoIG9uZSBvZiB0aGUKKyAqIHNhbWUgdHlwZSBidXQgd2l0aCBhIHByZWZpeCBhZGRlZCB0byB0aGUgZXhjZXB0aW9uIHRleHQuIFRoZSByZXN1bHRpbmcKKyAqIGV4Y2VwdGlvbiBkZXNjcmlwdGlvbiBsb29rcyBsaWtlOgorICoKKyAqICAgICBwcmVmaXggKGV4Y190eXBlOiBvcmlnaW5hbF9leGNfc3RyKQorICoKKyAqIE9ubHkgc29tZSBleGNlcHRpb25zIGNhbiBiZSBzYWZlbHkgcmVwbGFjZWQuIElmIHRoZSBmdW5jdGlvbiBkZXRlcm1pbmVzCisgKiBpdCBpc24ndCBzYWZlIHRvIHBlcmZvcm0gdGhlIHJlcGxhY2VtZW50LCBpdCB3aWxsIGxlYXZlIHRoZSBvcmlnaW5hbAorICogdW5tb2RpZmllZCBleGNlcHRpb24gaW4gcGxhY2UuCisgKgorICogUmV0dXJucyBhIGJvcnJvd2VkIHJlZmVyZW5jZSB0byB0aGUgbmV3IGV4Y2VwdGlvbiAoaWYgYW55KSwgTlVMTCBpZiB0aGUKKyAqIGV4aXN0aW5nIGV4Y2VwdGlvbiB3YXMgbGVmdCBpbiBwbGFjZS4KKyAqLworUHlBUElfRlVOQyhQeU9iamVjdCAqKSBfUHlFcnJfVHJ5U2V0RnJvbUNhdXNlKAorICAgIGNvbnN0IGNoYXIgKnByZWZpeF9mb3JtYXQsICAgLyogQVNDSUktZW5jb2RlZCBzdHJpbmcgICovCisgICAgLi4uCisgICAgKTsKKyNlbmRpZgorCisKIC8qIEluIHNpZ2NoZWNrLmMgb3Igc2lnbmFsbW9kdWxlLmMgKi8KIFB5QVBJX0ZVTkMoaW50KSBQeUVycl9DaGVja1NpZ25hbHModm9pZCk7CiBQeUFQSV9GVU5DKHZvaWQpIFB5RXJyX1NldEludGVycnVwdCh2b2lkKTsKQEAgLTMwMSw5ICszMzAsMjAgQEAKICAgICBjb25zdCBjaGFyICpmaWxlbmFtZSwgICAgICAgLyogZGVjb2RlZCBmcm9tIHRoZSBmaWxlc3lzdGVtIGVuY29kaW5nICovCiAgICAgaW50IGxpbmVubywKICAgICBpbnQgY29sX29mZnNldCk7CisjaWZuZGVmIFB5X0xJTUlURURfQVBJCitQeUFQSV9GVU5DKHZvaWQpIFB5RXJyX1N5bnRheExvY2F0aW9uT2JqZWN0KAorICAgIFB5T2JqZWN0ICpmaWxlbmFtZSwKKyAgICBpbnQgbGluZW5vLAorICAgIGludCBjb2xfb2Zmc2V0KTsKKyNlbmRpZgogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUVycl9Qcm9ncmFtVGV4dCgKICAgICBjb25zdCBjaGFyICpmaWxlbmFtZSwgICAgICAgLyogZGVjb2RlZCBmcm9tIHRoZSBmaWxlc3lzdGVtIGVuY29kaW5nICovCiAgICAgaW50IGxpbmVubyk7CisjaWZuZGVmIFB5X0xJTUlURURfQVBJCitQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5RXJyX1Byb2dyYW1UZXh0T2JqZWN0KAorICAgIFB5T2JqZWN0ICpmaWxlbmFtZSwKKyAgICBpbnQgbGluZW5vKTsKKyNlbmRpZgogCiAvKiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUgdXNlZCB0byBjcmVhdGUgYW5kIG1vZGlmeSB1bmljb2RlCiAgICBleGNlcHRpb25zIGZyb20gQyAqLwpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9weWhhc2guaCBiL0luY2x1ZGUvcHloYXNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdjYTkzNwotLS0gL2Rldi9udWxsCisrKyBiL0luY2x1ZGUvcHloYXNoLmgKQEAgLTAsMCArMSwxNDkgQEAKKyNpZm5kZWYgUHlfSEFTSF9ICisKKyNkZWZpbmUgUHlfSEFTSF9ICisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qIEhlbHBlcnMgZm9yIGhhc2ggZnVuY3Rpb25zICovCisjaWZuZGVmIFB5X0xJTUlURURfQVBJCitQeUFQSV9GVU5DKFB5X2hhc2hfdCkgX1B5X0hhc2hEb3VibGUoZG91YmxlKTsKK1B5QVBJX0ZVTkMoUHlfaGFzaF90KSBfUHlfSGFzaFBvaW50ZXIodm9pZCopOworUHlBUElfRlVOQyhQeV9oYXNoX3QpIF9QeV9IYXNoQnl0ZXMoY29uc3Qgdm9pZCosIFB5X3NzaXplX3QpOworI2VuZGlmCisKKy8qIFByaW1lIG11bHRpcGxpZXIgdXNlZCBpbiBzdHJpbmcgYW5kIHZhcmlvdXMgb3RoZXIgaGFzaGVzLiAqLworI2RlZmluZSBfUHlIQVNIX01VTFRJUExJRVIgMTAwMDAwM1VMICAvKiAweGY0MjQzICovCisKKy8qIFBhcmFtZXRlcnMgdXNlZCBmb3IgdGhlIG51bWVyaWMgaGFzaCBpbXBsZW1lbnRhdGlvbi4gIFNlZSBub3RlcyBmb3IKKyAgIF9QeV9IYXNoRG91YmxlIGluIE9iamVjdHMvb2JqZWN0LmMuICBOdW1lcmljIGhhc2hlcyBhcmUgYmFzZWQgb24KKyAgIHJlZHVjdGlvbiBtb2R1bG8gdGhlIHByaW1lIDIqKl9QeUhBU0hfQklUUyAtIDEuICovCisKKyNpZiBTSVpFT0ZfVk9JRF9QID49IDgKKyMgIGRlZmluZSBfUHlIQVNIX0JJVFMgNjEKKyNlbHNlCisjICBkZWZpbmUgX1B5SEFTSF9CSVRTIDMxCisjZW5kaWYKKworI2RlZmluZSBfUHlIQVNIX01PRFVMVVMgKCgoc2l6ZV90KTEgPDwgX1B5SEFTSF9CSVRTKSAtIDEpCisjZGVmaW5lIF9QeUhBU0hfSU5GIDMxNDE1OQorI2RlZmluZSBfUHlIQVNIX05BTiAwCisjZGVmaW5lIF9QeUhBU0hfSU1BRyBfUHlIQVNIX01VTFRJUExJRVIKKworCisvKiBoYXNoIHNlY3JldAorICoKKyAqIG1lbW9yeSBsYXlvdXQgb24gNjQgYml0IHN5c3RlbXMKKyAqICAgY2NjY2NjY2MgY2NjY2NjY2MgY2NjY2NjY2MgIHVjIC0tIHVuc2lnbmVkIGNoYXJbMjRdCisgKiAgIHBwcHBwcHBwIHNzc3Nzc3NzIC4uLi4uLi4uICBmbnYgLS0gdHdvIFB5X2hhc2hfdAorICogICBrMGswazBrMCBrMWsxazFrMSAuLi4uLi4uLiAgc2lwaGFzaCAtLSB0d28gUFlfVUlOVDY0X1QKKyAqICAgLi4uLi4uLi4gLi4uLi4uLi4gc3Nzc3Nzc3MgIGRqYngzM2EgLS0gMTYgYnl0ZXMgcGFkZGluZyArIG9uZSBQeV9oYXNoX3QKKyAqICAgLi4uLi4uLi4gLi4uLi4uLi4gZWVlZWVlZWUgIHB5ZXhwYXQgWE1MIGhhc2ggc2FsdAorICoKKyAqIG1lbW9yeSBsYXlvdXQgb24gMzIgYml0IHN5c3RlbXMKKyAqICAgY2NjY2NjY2MgY2NjY2NjY2MgY2NjY2NjY2MgIHVjCisgKiAgIHBwcHBzc3NzIC4uLi4uLi4uIC4uLi4uLi4uICBmbnYgLS0gdHdvIFB5X2hhc2hfdAorICogICBrMGswazBrMCBrMWsxazFrMSAuLi4uLi4uLiAgc2lwaGFzaCAtLSB0d28gUFlfVUlOVDY0X1QgKCopCisgKiAgIC4uLi4uLi4uIC4uLi4uLi4uIHNzc3MuLi4uICBkamJ4MzNhIC0tIDE2IGJ5dGVzIHBhZGRpbmcgKyBvbmUgUHlfaGFzaF90CisgKiAgIC4uLi4uLi4uIC4uLi4uLi4uIGVlZWUuLi4uICBweWV4cGF0IFhNTCBoYXNoIHNhbHQKKyAqCisgKiAoKikgVGhlIHNpcGhhc2ggbWVtYmVyIG1heSBub3QgYmUgYXZhaWxhYmxlIG9uIDMyIGJpdCBwbGF0Zm9ybXMgd2l0aG91dAorICogICAgIGFuIHVuc2lnbmVkIGludDY0IGRhdGEgdHlwZS4KKyAqLworI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQordHlwZWRlZiB1bmlvbiB7CisgICAgLyogZW5zdXJlIDI0IGJ5dGVzICovCisgICAgdW5zaWduZWQgY2hhciB1Y1syNF07CisgICAgLyogdHdvIFB5X2hhc2hfdCBmb3IgRk5WICovCisgICAgc3RydWN0IHsKKyAgICAgICAgUHlfaGFzaF90IHByZWZpeDsKKyAgICAgICAgUHlfaGFzaF90IHN1ZmZpeDsKKyAgICB9IGZudjsKKyNpZmRlZiBQWV9VSU5UNjRfVAorICAgIC8qIHR3byB1aW50NjQgZm9yIFNpcEhhc2gyNCAqLworICAgIHN0cnVjdCB7CisgICAgICAgIFBZX1VJTlQ2NF9UIGswOworICAgICAgICBQWV9VSU5UNjRfVCBrMTsKKyAgICB9IHNpcGhhc2g7CisjZW5kaWYKKyAgICAvKiBhIGRpZmZlcmVudCAoISkgUHlfaGFzaF90IGZvciBzbWFsbCBzdHJpbmcgb3B0aW1pemF0aW9uICovCisgICAgc3RydWN0IHsKKyAgICAgICAgdW5zaWduZWQgY2hhciBwYWRkaW5nWzE2XTsKKyAgICAgICAgUHlfaGFzaF90IHN1ZmZpeDsKKyAgICB9IGRqYngzM2E7CisgICAgc3RydWN0IHsKKyAgICAgICAgdW5zaWduZWQgY2hhciBwYWRkaW5nWzE2XTsKKyAgICAgICAgUHlfaGFzaF90IGhhc2hzYWx0OworICAgIH0gZXhwYXQ7Cit9IF9QeV9IYXNoU2VjcmV0X3Q7CitQeUFQSV9EQVRBKF9QeV9IYXNoU2VjcmV0X3QpIF9QeV9IYXNoU2VjcmV0OworI2VuZGlmCisKKyNpZmRlZiBQeV9ERUJVRworUHlBUElfREFUQShpbnQpIF9QeV9IYXNoU2VjcmV0X0luaXRpYWxpemVkOworI2VuZGlmCisKKworLyogaGFzaCBmdW5jdGlvbiBkZWZpbml0aW9uICovCisjaWZuZGVmIFB5X0xJTUlURURfQVBJCit0eXBlZGVmIHN0cnVjdCB7CisgICAgUHlfaGFzaF90ICgqY29uc3QgaGFzaCkoY29uc3Qgdm9pZCAqLCBQeV9zc2l6ZV90KTsKKyAgICBjb25zdCBjaGFyICpuYW1lOworICAgIGNvbnN0IGludCBoYXNoX2JpdHM7CisgICAgY29uc3QgaW50IHNlZWRfYml0czsKK30gUHlIYXNoX0Z1bmNEZWY7CisKK1B5QVBJX0ZVTkMoUHlIYXNoX0Z1bmNEZWYqKSBQeUhhc2hfR2V0RnVuY0RlZih2b2lkKTsKKyNlbmRpZgorCisKKy8qIGN1dG9mZiBmb3Igc21hbGwgc3RyaW5nIERKQlgzM0Egb3B0aW1pemF0aW9uIGluIHJhbmdlIFsxLCBjdXRvZmYpLgorICoKKyAqIEFib3V0IDUwJSBvZiB0aGUgc3RyaW5ncyBpbiBhIHR5cGljYWwgUHl0aG9uIGFwcGxpY2F0aW9uIGFyZSBzbWFsbGVyIHRoYW4KKyAqIDYgdG8gNyBjaGFycy4gSG93ZXZlciBESkJYMzNBIGlzIHZ1bG5lcmFibGUgdG8gaGFzaCBjb2xsaXNpb24gYXR0YWNrcy4KKyAqIE5FVkVSIHVzZSBESkJYMzNBIGZvciBsb25nIHN0cmluZ3MhCisgKgorICogQSBQeV9IQVNIX0NVVE9GRiBvZiAwIGRpc2FibGVzIHNtYWxsIHN0cmluZyBvcHRpbWl6YXRpb24uIDMyIGJpdCBwbGF0Zm9ybXMKKyAqIHNob3VsZCB1c2UgYSBzbWFsbGVyIGN1dG9mZiBiZWNhdXNlIGl0IGlzIGVhc2llciB0byBjcmVhdGUgY29sbGlkaW5nCisgKiBzdHJpbmdzLiBBIGN1dG9mZiBvZiA3IG9uIDY0Yml0IHBsYXRmb3JtcyBhbmQgNSBvbiAzMmJpdCBwbGF0Zm9ybXMgc2hvdWxkCisgKiBwcm92aWRlIGEgZGVjZW50IHNhZmV0eSBtYXJnaW4uCisgKi8KKyNpZm5kZWYgUHlfSEFTSF9DVVRPRkYKKyMgIGRlZmluZSBQeV9IQVNIX0NVVE9GRiAwCisjZWxpZiAoUHlfSEFTSF9DVVRPRkYgPiA3IHx8IFB5X0hBU0hfQ1VUT0ZGIDwgMCkKKyMgIGVycm9yIFB5X0hBU0hfQ1VUT0ZGIG11c3QgaW4gcmFuZ2UgMC4uLjcuCisjZW5kaWYgLyogUHlfSEFTSF9DVVRPRkYgKi8KKworCisvKiBoYXNoIGFsZ29yaXRobSBzZWxlY3Rpb24KKyAqCisgKiBUaGUgdmFsdWVzIGZvciBQeV9IQVNIX1NJUEhBU0gyNCBhbmQgUHlfSEFTSF9GTlYgYXJlIGhhcmQtY29kZWQgaW4gdGhlCisgKiBjb25maWd1cmUgc2NyaXB0LgorICoKKyAqIC0gRk5WIGlzIGF2YWlsYWJsZSBvbiBhbGwgcGxhdGZvcm1zIGFuZCBhcmNoaXRlY3R1cmVzLgorICogLSBTSVBIQVNIMjQgb25seSB3b3JrcyBvbiBwbGFmb3JtcyB0aGF0IHByb3ZpZGUgUFlfVUlOVDY0X1QgYW5kIGRvZXNuJ3QKKyAqICAgcmVxdWlyZSBhbGlnbmVkIG1lbW9yeSBmb3IgaW50ZWdlcnMuCisgKiAtIFdpdGggRVhURVJOQUwgZW1iZWRkZXJzIGNhbiBwcm92aWRlIGFuIGFsdGVybmF0aXZlIGltcGxlbWVudGF0aW9uIHdpdGg6OgorICoKKyAqICAgICBQeUhhc2hfRnVuY0RlZiBQeUhhc2hfRnVuYyA9IHsuLi59OworICoKKyAqIFhYWDogRmlndXJlIG91dCBfX2RlY2xzcGVjKCkgZm9yIGV4dGVybiBQeUhhc2hfRnVuY0RlZi4KKyAqLworI2RlZmluZSBQeV9IQVNIX0VYVEVSTkFMIDAKKyNkZWZpbmUgUHlfSEFTSF9TSVBIQVNIMjQgMQorI2RlZmluZSBQeV9IQVNIX0ZOViAyCisKKyNpZm5kZWYgUHlfSEFTSF9BTEdPUklUSE0KKyMgIGlmIChkZWZpbmVkKFBZX1VJTlQ2NF9UKSAmJiBkZWZpbmVkKFBZX1VJTlQzMl9UKSBcCisgICAgICAgJiYgIWRlZmluZWQoSEFWRV9BTElHTkVEX1JFUVVJUkVEKSkKKyMgICAgZGVmaW5lIFB5X0hBU0hfQUxHT1JJVEhNIFB5X0hBU0hfU0lQSEFTSDI0CisjICBlbHNlCisjICAgIGRlZmluZSBQeV9IQVNIX0FMR09SSVRITSBQeV9IQVNIX0ZOVgorIyAgZW5kaWYgLyogdWludDY0X3QgJiYgdWludDMyX3QgJiYgYWxpZ25lZCAqLworI2VuZGlmIC8qIFB5X0hBU0hfQUxHT1JJVEhNICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiAhUHlfSEFTSF9IICovCmRpZmYgLS1naXQgYS9JbmNsdWRlL3B5bWFjcm8uaCBiL0luY2x1ZGUvcHltYWNyby5oCmluZGV4IDc5M2Y2N2QuLjc5OTdjNTUgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvcHltYWNyby5oCisrKyBiL0luY2x1ZGUvcHltYWNyby5oCkBAIC02OSw0ICs2OSwxMCBAQAogLyogQ2hlY2sgaWYgcG9pbnRlciAicCIgaXMgYWxpZ25lZCB0byAiYSItYnl0ZXMgYm91bmRhcnkuICovCiAjZGVmaW5lIF9QeV9JU19BTElHTkVEKHAsIGEpICghKChQeV91aW50cHRyX3QpKHApICYgKFB5X3VpbnRwdHJfdCkoKGEpIC0gMSkpKQogCisjaWZkZWYgX19HTlVDX18KKyNkZWZpbmUgUHlfVU5VU0VEKG5hbWUpIF91bnVzZWRfICMjIG5hbWUgX19hdHRyaWJ1dGVfXygodW51c2VkKSkKKyNlbHNlCisjZGVmaW5lIFB5X1VOVVNFRChuYW1lKSBfdW51c2VkXyAjIyBuYW1lCisjZW5kaWYKKwogI2VuZGlmIC8qIFB5X1BZTUFDUk9fSCAqLwpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9weW1hdGguaCBiL0luY2x1ZGUvcHltYXRoLmgKaW5kZXggNjJhNmM0Mi4uMWVhOWFjMSAxMDA2NDQKLS0tIGEvSW5jbHVkZS9weW1hdGguaAorKysgYi9JbmNsdWRlL3B5bWF0aC5oCkBAIC0xNTAsNyArMTUwLDI5IEBACiAgKiBkb2Vzbid0IHN1cHBvcnQgTmFOcy4KICAqLwogI2lmICFkZWZpbmVkKFB5X05BTikgJiYgIWRlZmluZWQoUHlfTk9fTkFOKQotI2RlZmluZSBQeV9OQU4gKFB5X0hVR0VfVkFMICogMC4pCisjaWYgIWRlZmluZWQoX19JTlRFTF9DT01QSUxFUikKKyAgICAjZGVmaW5lIFB5X05BTiAoUHlfSFVHRV9WQUwgKiAwLikKKyNlbHNlIC8qIF9fSU5URUxfQ09NUElMRVIgKi8KKyAgICAjaWYgZGVmaW5lZChJQ0NfTkFOX1NUUklDVCkKKyAgICAgICAgI3ByYWdtYSBmbG9hdF9jb250cm9sKHB1c2gpCisgICAgICAgICNwcmFnbWEgZmxvYXRfY29udHJvbChwcmVjaXNlLCBvbikKKyAgICAgICAgI3ByYWdtYSBmbG9hdF9jb250cm9sKGV4Y2VwdCwgIG9uKQorICAgICAgICAjaWYgZGVmaW5lZChfTVNDX1ZFUikKKyAgICAgICAgICAgIF9fZGVjbHNwZWMobm9pbmxpbmUpCisgICAgICAgICNlbHNlIC8qIExpbnV4ICovCisgICAgICAgICAgICBfX2F0dHJpYnV0ZV9fKChub2lubGluZSkpCisgICAgICAgICNlbmRpZiAvKiBfTVNDX1ZFUiAqLworICAgICAgICBzdGF0aWMgZG91YmxlIF9faWNjX25hbigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBzcXJ0KC0xLjApOworICAgICAgICB9CisgICAgICAgICNwcmFnbWEgZmxvYXRfY29udHJvbCAocG9wKQorICAgICAgICAjZGVmaW5lIFB5X05BTiBfX2ljY19uYW4oKQorICAgICNlbHNlIC8qIElDQ19OQU5fUkVMQVhFRCBhcyBkZWZhdWx0IGZvciBJbnRlbCBDb21waWxlciAqLworICAgICAgICBzdGF0aWMgdW5pb24geyB1bnNpZ25lZCBjaGFyIGJ1Zls4XTsgZG91YmxlIF9faWNjX25hbjsgfSBfX25hbl9zdG9yZSA9IHswLDAsMCwwLDAsMCwweGY4LDB4N2Z9OworICAgICAgICAjZGVmaW5lIFB5X05BTiAoX19uYW5fc3RvcmUuX19pY2NfbmFuKQorICAgICNlbmRpZiAvKiBJQ0NfTkFOX1NUUklDVCAqLworI2VuZGlmIC8qIF9fSU5URUxfQ09NUElMRVIgKi8KICNlbmRpZgogCiAvKiBQeV9PVkVSRkxPV0VEKFgpCmRpZmYgLS1naXQgYS9JbmNsdWRlL3B5bWVtLmggYi9JbmNsdWRlL3B5bWVtLmgKaW5kZXggMTBiNWJlYS4uMjM3MmI4NiAxMDA2NDQKLS0tIGEvSW5jbHVkZS9weW1lbS5oCisrKyBiL0luY2x1ZGUvcHltZW0uaApAQCAtMTEsNiArMTEsMTMgQEAKIGV4dGVybiAiQyIgewogI2VuZGlmCiAKKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKK1B5QVBJX0ZVTkModm9pZCAqKSBQeU1lbV9SYXdNYWxsb2Moc2l6ZV90IHNpemUpOworUHlBUElfRlVOQyh2b2lkICopIFB5TWVtX1Jhd1JlYWxsb2Modm9pZCAqcHRyLCBzaXplX3QgbmV3X3NpemUpOworUHlBUElfRlVOQyh2b2lkKSBQeU1lbV9SYXdGcmVlKHZvaWQgKnB0cik7CisjZW5kaWYKKworCiAvKiBCRVdBUkU6CiAKICAgIEVhY2ggaW50ZXJmYWNlIGV4cG9ydHMgYm90aCBmdW5jdGlvbnMgYW5kIG1hY3Jvcy4gIEV4dGVuc2lvbiBtb2R1bGVzIHNob3VsZApAQCAtNDksMjEgKzU2LDE2IEBACiAgICBwZXJmb3JtZWQgb24gZmFpbHVyZSAobm8gZXhjZXB0aW9uIGlzIHNldCwgbm8gd2FybmluZyBpcyBwcmludGVkLCBldGMpLgogKi8KIAotUHlBUElfRlVOQyh2b2lkICopIFB5TWVtX01hbGxvYyhzaXplX3QpOwotUHlBUElfRlVOQyh2b2lkICopIFB5TWVtX1JlYWxsb2Modm9pZCAqLCBzaXplX3QpOwotUHlBUElfRlVOQyh2b2lkKSBQeU1lbV9GcmVlKHZvaWQgKik7CitQeUFQSV9GVU5DKHZvaWQgKikgUHlNZW1fTWFsbG9jKHNpemVfdCBzaXplKTsKK1B5QVBJX0ZVTkModm9pZCAqKSBQeU1lbV9SZWFsbG9jKHZvaWQgKnB0ciwgc2l6ZV90IG5ld19zaXplKTsKK1B5QVBJX0ZVTkModm9pZCkgUHlNZW1fRnJlZSh2b2lkICpwdHIpOwogCi0vKiBTdGFydGluZyBmcm9tIFB5dGhvbiAxLjYsIHRoZSB3cmFwcGVycyBQeV97TWFsbG9jLFJlYWxsb2MsRnJlZX0gYXJlCi0gICBubyBsb25nZXIgc3VwcG9ydGVkLiBUaGV5IHVzZWQgdG8gY2FsbCBQeUVycl9Ob01lbW9yeSgpIG9uIGZhaWx1cmUuICovCisjaWZuZGVmIFB5X0xJTUlURURfQVBJCitQeUFQSV9GVU5DKGNoYXIgKikgX1B5TWVtX1Jhd1N0cmR1cChjb25zdCBjaGFyICpzdHIpOworUHlBUElfRlVOQyhjaGFyICopIF9QeU1lbV9TdHJkdXAoY29uc3QgY2hhciAqc3RyKTsKKyNlbmRpZgogCiAvKiBNYWNyb3MuICovCi0jaWZkZWYgUFlNQUxMT0NfREVCVUcKLS8qIFJlZGlyZWN0IGFsbCBtZW1vcnkgb3BlcmF0aW9ucyB0byBQeXRob24ncyBkZWJ1Z2dpbmcgYWxsb2NhdG9yLiAqLwotI2RlZmluZSBQeU1lbV9NQUxMT0MJCV9QeU1lbV9EZWJ1Z01hbGxvYwotI2RlZmluZSBQeU1lbV9SRUFMTE9DCQlfUHlNZW1fRGVidWdSZWFsbG9jCi0jZGVmaW5lIFB5TWVtX0ZSRUUJCV9QeU1lbV9EZWJ1Z0ZyZWUKLQotI2Vsc2UJLyogISBQWU1BTExPQ19ERUJVRyAqLwogCiAvKiBQeU1lbV9NQUxMT0MoMCkgbWVhbnMgbWFsbG9jKDEpLiBTb21lIHN5c3RlbXMgd291bGQgcmV0dXJuIE5VTEwKICAgIGZvciBtYWxsb2MoMCksIHdoaWNoIHdvdWxkIGJlIHRyZWF0ZWQgYXMgYW4gZXJyb3IuIFNvbWUgcGxhdGZvcm1zCkBAIC03MSwxMyArNzMsOSBAQAogICAgcHltYWxsb2MuIFRvIHNvbHZlIHRoZXNlIHByb2JsZW1zLCBhbGxvY2F0ZSBhbiBleHRyYSBieXRlLiAqLwogLyogUmV0dXJucyBOVUxMIHRvIGluZGljYXRlIGVycm9yIGlmIGEgbmVnYXRpdmUgc2l6ZSBvciBzaXplIGxhcmdlciB0aGFuCiAgICBQeV9zc2l6ZV90IGNhbiByZXByZXNlbnQgaXMgc3VwcGxpZWQuICBIZWxwcyBwcmV2ZW50cyBzZWN1cml0eSBob2xlcy4gKi8KLSNkZWZpbmUgUHlNZW1fTUFMTE9DKG4pCQkoKHNpemVfdCkobikgPiAoc2l6ZV90KVBZX1NTSVpFX1RfTUFYID8gTlVMTCBcCi0JCQkJOiBtYWxsb2MoKG4pID8gKG4pIDogMSkpCi0jZGVmaW5lIFB5TWVtX1JFQUxMT0MocCwgbikJKChzaXplX3QpKG4pID4gKHNpemVfdClQWV9TU0laRV9UX01BWCAgPyBOVUxMIFwKLQkJCQk6IHJlYWxsb2MoKHApLCAobikgPyAobikgOiAxKSkKLSNkZWZpbmUgUHlNZW1fRlJFRQkJZnJlZQotCi0jZW5kaWYJLyogUFlNQUxMT0NfREVCVUcgKi8KKyNkZWZpbmUgUHlNZW1fTUFMTE9DKG4pICAgICAgICAgUHlNZW1fTWFsbG9jKG4pCisjZGVmaW5lIFB5TWVtX1JFQUxMT0MocCwgbikgICAgIFB5TWVtX1JlYWxsb2MocCwgbikKKyNkZWZpbmUgUHlNZW1fRlJFRShwKSAgICAgICAgICAgUHlNZW1fRnJlZShwKQogCiAvKgogICogVHlwZS1vcmllbnRlZCBtZW1vcnkgaW50ZXJmYWNlCkBAIC0xMTUsNiArMTEzLDY5IEBACiAjZGVmaW5lIFB5TWVtX0RlbAkJUHlNZW1fRnJlZQogI2RlZmluZSBQeU1lbV9ERUwJCVB5TWVtX0ZSRUUKIAorI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQordHlwZWRlZiBlbnVtIHsKKyAgICAvKiBQeU1lbV9SYXdNYWxsb2MoKSwgUHlNZW1fUmF3UmVhbGxvYygpIGFuZCBQeU1lbV9SYXdGcmVlKCkgKi8KKyAgICBQWU1FTV9ET01BSU5fUkFXLAorCisgICAgLyogUHlNZW1fTWFsbG9jKCksIFB5TWVtX1JlYWxsb2MoKSBhbmQgUHlNZW1fRnJlZSgpICovCisgICAgUFlNRU1fRE9NQUlOX01FTSwKKworICAgIC8qIFB5T2JqZWN0X01hbGxvYygpLCBQeU9iamVjdF9SZWFsbG9jKCkgYW5kIFB5T2JqZWN0X0ZyZWUoKSAqLworICAgIFBZTUVNX0RPTUFJTl9PQkoKK30gUHlNZW1BbGxvY2F0b3JEb21haW47CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICAvKiB1c2VyIGNvbnRleHQgcGFzc2VkIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgMyBmdW5jdGlvbnMgKi8KKyAgICB2b2lkICpjdHg7CisKKyAgICAvKiBhbGxvY2F0ZSBhIG1lbW9yeSBibG9jayAqLworICAgIHZvaWQqICgqbWFsbG9jKSAodm9pZCAqY3R4LCBzaXplX3Qgc2l6ZSk7CisKKyAgICAvKiBhbGxvY2F0ZSBvciByZXNpemUgYSBtZW1vcnkgYmxvY2sgKi8KKyAgICB2b2lkKiAoKnJlYWxsb2MpICh2b2lkICpjdHgsIHZvaWQgKnB0ciwgc2l6ZV90IG5ld19zaXplKTsKKworICAgIC8qIHJlbGVhc2UgYSBtZW1vcnkgYmxvY2sgKi8KKyAgICB2b2lkICgqZnJlZSkgKHZvaWQgKmN0eCwgdm9pZCAqcHRyKTsKK30gUHlNZW1BbGxvY2F0b3I7CisKKy8qIEdldCB0aGUgbWVtb3J5IGJsb2NrIGFsbG9jYXRvciBvZiB0aGUgc3BlY2lmaWVkIGRvbWFpbi4gKi8KK1B5QVBJX0ZVTkModm9pZCkgUHlNZW1fR2V0QWxsb2NhdG9yKFB5TWVtQWxsb2NhdG9yRG9tYWluIGRvbWFpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5TWVtQWxsb2NhdG9yICphbGxvY2F0b3IpOworCisvKiBTZXQgdGhlIG1lbW9yeSBibG9jayBhbGxvY2F0b3Igb2YgdGhlIHNwZWNpZmllZCBkb21haW4uCisKKyAgIFRoZSBuZXcgYWxsb2NhdG9yIG11c3QgcmV0dXJuIGEgZGlzdGluY3Qgbm9uLU5VTEwgcG9pbnRlciB3aGVuIHJlcXVlc3RpbmcKKyAgIHplcm8gYnl0ZXMuCisKKyAgIEZvciB0aGUgUFlNRU1fRE9NQUlOX1JBVyBkb21haW4sIHRoZSBhbGxvY2F0b3IgbXVzdCBiZSB0aHJlYWQtc2FmZTogdGhlIEdJTAorICAgaXMgbm90IGhlbGQgd2hlbiB0aGUgYWxsb2NhdG9yIGlzIGNhbGxlZC4KKworICAgSWYgdGhlIG5ldyBhbGxvY2F0b3IgaXMgbm90IGEgaG9vayAoZG9uJ3QgY2FsbCB0aGUgcHJldmlvdXMgYWxsb2NhdG9yKSwgdGhlCisgICBQeU1lbV9TZXR1cERlYnVnSG9va3MoKSBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB0byByZWluc3RhbGwgdGhlIGRlYnVnIGhvb2tzCisgICBvbiB0b3Agb24gdGhlIG5ldyBhbGxvY2F0b3IuICovCitQeUFQSV9GVU5DKHZvaWQpIFB5TWVtX1NldEFsbG9jYXRvcihQeU1lbUFsbG9jYXRvckRvbWFpbiBkb21haW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU1lbUFsbG9jYXRvciAqYWxsb2NhdG9yKTsKKworLyogU2V0dXAgaG9va3MgdG8gZGV0ZWN0IGJ1Z3MgaW4gdGhlIGZvbGxvd2luZyBQeXRob24gbWVtb3J5IGFsbG9jYXRvcgorICAgZnVuY3Rpb25zOgorCisgICAtIFB5TWVtX1Jhd01hbGxvYygpLCBQeU1lbV9SYXdSZWFsbG9jKCksIFB5TWVtX1Jhd0ZyZWUoKQorICAgLSBQeU1lbV9NYWxsb2MoKSwgUHlNZW1fUmVhbGxvYygpLCBQeU1lbV9GcmVlKCkKKyAgIC0gUHlPYmplY3RfTWFsbG9jKCksIFB5T2JqZWN0X1JlYWxsb2MoKSBhbmQgUHlPYmplY3RfRnJlZSgpCisKKyAgIE5ld2x5IGFsbG9jYXRlZCBtZW1vcnkgaXMgZmlsbGVkIHdpdGggdGhlIGJ5dGUgMHhDQiwgZnJlZWQgbWVtb3J5IGlzIGZpbGxlZAorICAgd2l0aCB0aGUgYnl0ZSAweERCLiBBZGRpdGlvbm5hbCBjaGVja3M6CisKKyAgIC0gZGV0ZWN0IEFQSSB2aW9sYXRpb25zLCBleDogUHlPYmplY3RfRnJlZSgpIGNhbGxlZCBvbiBhIGJ1ZmZlciBhbGxvY2F0ZWQKKyAgICAgYnkgUHlNZW1fTWFsbG9jKCkKKyAgIC0gZGV0ZWN0IHdyaXRlIGJlZm9yZSB0aGUgc3RhcnQgb2YgdGhlIGJ1ZmZlciAoYnVmZmVyIHVuZGVyZmxvdykKKyAgIC0gZGV0ZWN0IHdyaXRlIGFmdGVyIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciAoYnVmZmVyIG92ZXJmbG93KQorCisgICBUaGUgZnVuY3Rpb24gZG9lcyBub3RoaW5nIGlmIFB5dGhvbiBpcyBub3QgY29tcGlsZWQgaXMgZGVidWcgbW9kZS4gKi8KK1B5QVBJX0ZVTkModm9pZCkgUHlNZW1fU2V0dXBEZWJ1Z0hvb2tzKHZvaWQpOworI2VuZGlmCisKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9JbmNsdWRlL3B5cG9ydC5oIGIvSW5jbHVkZS9weXBvcnQuaAppbmRleCBhNWVkZWE5Li5iMjlmOWJkIDEwMDY0NAotLS0gYS9JbmNsdWRlL3B5cG9ydC5oCisrKyBiL0luY2x1ZGUvcHlwb3J0LmgKQEAgLTE0NCwyMyArMTQ0LDYgQEAKICNlbmRpZgogI2VuZGlmCiAKLS8qIFByaW1lIG11bHRpcGxpZXIgdXNlZCBpbiBzdHJpbmcgYW5kIHZhcmlvdXMgb3RoZXIgaGFzaGVzLiAqLwotI2RlZmluZSBfUHlIQVNIX01VTFRJUExJRVIgMTAwMDAwM1VMICAvKiAweGY0MjQzICovCi0KLS8qIFBhcmFtZXRlcnMgdXNlZCBmb3IgdGhlIG51bWVyaWMgaGFzaCBpbXBsZW1lbnRhdGlvbi4gIFNlZSBub3RlcyBmb3IKLSAgIF9QeV9IYXNoRG91YmxlIGluIE9iamVjdHMvb2JqZWN0LmMuICBOdW1lcmljIGhhc2hlcyBhcmUgYmFzZWQgb24KLSAgIHJlZHVjdGlvbiBtb2R1bG8gdGhlIHByaW1lIDIqKl9QeUhBU0hfQklUUyAtIDEuICovCi0KLSNpZiBTSVpFT0ZfVk9JRF9QID49IDgKLSNkZWZpbmUgX1B5SEFTSF9CSVRTIDYxCi0jZWxzZQotI2RlZmluZSBfUHlIQVNIX0JJVFMgMzEKLSNlbmRpZgotI2RlZmluZSBfUHlIQVNIX01PRFVMVVMgKCgoc2l6ZV90KTEgPDwgX1B5SEFTSF9CSVRTKSAtIDEpCi0jZGVmaW5lIF9QeUhBU0hfSU5GIDMxNDE1OQotI2RlZmluZSBfUHlIQVNIX05BTiAwCi0jZGVmaW5lIF9QeUhBU0hfSU1BRyBfUHlIQVNIX01VTFRJUExJRVIKLQogLyogdWludHB0cl90IGlzIHRoZSBDOVggbmFtZSBmb3IgYW4gdW5zaWduZWQgaW50ZWdyYWwgdHlwZSBzdWNoIHRoYXQgYQogICogbGVnaXRpbWF0ZSB2b2lkKiBjYW4gYmUgY2FzdCB0byB1aW50cHRyX3QgYW5kIHRoZW4gYmFjayB0byB2b2lkKiBhZ2FpbgogICogd2l0aG91dCBsb3NzIG9mIGluZm9ybWF0aW9uLiAgU2ltaWxhcmx5IGZvciBpbnRwdHJfdCwgd3J0IGEgc2lnbmVkCkBAIC0xOTksMTAgKzE4MiwxOSBAQAogI2VuZGlmCiAKIC8qIFB5X2hhc2hfdCBpcyB0aGUgc2FtZSBzaXplIGFzIGEgcG9pbnRlci4gKi8KKyNkZWZpbmUgU0laRU9GX1BZX0hBU0hfVCBTSVpFT0ZfU0laRV9UCiB0eXBlZGVmIFB5X3NzaXplX3QgUHlfaGFzaF90OwogLyogUHlfdWhhc2hfdCBpcyB0aGUgdW5zaWduZWQgZXF1aXZhbGVudCBuZWVkZWQgdG8gY2FsY3VsYXRlIG51bWVyaWMgaGFzaC4gKi8KKyNkZWZpbmUgU0laRU9GX1BZX1VIQVNIX1QgU0laRU9GX1NJWkVfVAogdHlwZWRlZiBzaXplX3QgUHlfdWhhc2hfdDsKIAorLyogT25seSB1c2VkIGZvciBjb21wYXRpYmlsaXR5IHdpdGggY29kZSB0aGF0IG1heSBub3QgYmUgUFlfU1NJWkVfVF9DTEVBTi4gKi8KKyNpZmRlZiBQWV9TU0laRV9UX0NMRUFOCit0eXBlZGVmIFB5X3NzaXplX3QgUHlfc3NpemVfY2xlYW5fdDsKKyNlbHNlCit0eXBlZGVmIGludCBQeV9zc2l6ZV9jbGVhbl90OworI2VuZGlmCisKIC8qIExhcmdlc3QgcG9zc2libGUgdmFsdWUgb2Ygc2l6ZV90LgogICAgU0laRV9NQVggaXMgcGFydCBvZiBDOTksIHNvIGl0IG1pZ2h0IGJlIGRlZmluZWQgb24gc29tZQogICAgcGxhdGZvcm1zLiBJZiBpdCBpcyBub3QgZGVmaW5lZCwgKHNpemVfdCktMSBpcyBhIHBvcnRhYmxlCkBAIC0yMTksMTAgKzIxMSw2IEBACiAvKiBTbWFsbGVzdCBuZWdhdGl2ZSB2YWx1ZSBvZiB0eXBlIFB5X3NzaXplX3QuICovCiAjZGVmaW5lIFBZX1NTSVpFX1RfTUlOICgtUFlfU1NJWkVfVF9NQVgtMSkKIAotI2lmIFNJWkVPRl9QSURfVCA+IFNJWkVPRl9MT05HCi0jICAgZXJyb3IgIlB5dGhvbiBkb2Vzbid0IHN1cHBvcnQgc2l6ZW9mKHBpZF90KSA+IHNpemVvZihsb25nKSIKLSNlbmRpZgotCiAvKiBQWV9GT1JNQVRfU0laRV9UIGlzIGEgcGxhdGZvcm0tc3BlY2lmaWMgbW9kaWZpZXIgZm9yIHVzZSBpbiBhIHByaW50ZgogICogZm9ybWF0IHRvIGNvbnZlcnQgYW4gYXJndW1lbnQgd2l0aCB0aGUgd2lkdGggb2YgYSBzaXplX3Qgb3IgUHlfc3NpemVfdC4KICAqIEM5OSBpbnRyb2R1Y2VkICJ6IiBmb3IgdGhpcyBwdXJwb3NlLCBidXQgbm90IGFsbCBwbGF0Zm9ybXMgc3VwcG9ydCB0aGF0OwpAQCAtMjY3LDcgKzI1NSw3IEBACiAgKi8KICNpZmRlZiBIQVZFX0xPTkdfTE9ORwogIyAgIGlmbmRlZiBQWV9GT1JNQVRfTE9OR19MT05HCi0jICAgICAgIGlmIGRlZmluZWQoTVNfV0lONjQpIHx8IGRlZmluZWQoTVNfV0lORE9XUykKKyMgICAgICAgaWZkZWYgTVNfV0lORE9XUwogIyAgICAgICAgICAgZGVmaW5lIFBZX0ZPUk1BVF9MT05HX0xPTkcgIkk2NCIKICMgICAgICAgZWxzZQogIyAgICAgICAgICAgZXJyb3IgIlRoaXMgcGxhdGZvcm0ncyBweWNvbmZpZy5oIG5lZWRzIHRvIGRlZmluZSBQWV9GT1JNQVRfTE9OR19MT05HIgpAQCAtMjgyLDcgKzI3MCw3IEBACiAgKiBmb3IgcGxhdGZvcm1zIHRoYXQgc3VwcG9ydCB0aGF0LgogICoKICAqIElmIFBZX0xPQ0FMX0FHR1JFU1NJVkUgaXMgZGVmaW5lZCBiZWZvcmUgcHl0aG9uLmggaXMgaW5jbHVkZWQsIG1vcmUKLSAqICJhZ2dyZXNzaXZlIiBpbmxpbmluZy9vcHRpbWl6YWlvbiBpcyBlbmFibGVkIGZvciB0aGUgZW50aXJlIG1vZHVsZS4gIFRoaXMKKyAqICJhZ2dyZXNzaXZlIiBpbmxpbmluZy9vcHRpbWl6YXRpb24gaXMgZW5hYmxlZCBmb3IgdGhlIGVudGlyZSBtb2R1bGUuICBUaGlzCiAgKiBtYXkgbGVhZCB0byBjb2RlIGJsb2F0LCBhbmQgbWF5IHNsb3cgdGhpbmdzIGRvd24gZm9yIHRob3NlIHJlYXNvbnMuICBJdCBtYXkKICAqIGFsc28gbGVhZCB0byBlcnJvcnMsIGlmIHRoZSBjb2RlIHJlbGllcyBvbiBwb2ludGVyIGFsaWFzaW5nLiAgVXNlIHdpdGgKICAqIGNhcmUuCkBAIC0zOTIsMTcgKzM4MCwyMCBAQAogI2VuZGlmCiAKICNpZmRlZiBIQVZFX1NZU19TVEFUX0gKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKSAmJiBkZWZpbmVkKFBZQ0NfR0NDKQotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2VuZGlmCiAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KICNlbGlmIGRlZmluZWQoSEFWRV9TVEFUX0gpCiAjaW5jbHVkZSA8c3RhdC5oPgogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKFBZQ0NfVkFDUFApCisjaWZuZGVmIFNfSUZNVAogLyogVmlzdWFsQWdlIEMvQysrIEZhaWxlZCB0byBEZWZpbmUgTW91bnRUeXBlIEZpZWxkIGluIHN5cy9zdGF0LmggKi8KLSNkZWZpbmUgU19JRk1UIChTX0lGRElSfFNfSUZDSFJ8U19JRlJFRykKKyNkZWZpbmUgU19JRk1UIDAxNzAwMDAKKyNlbmRpZgorCisjaWZuZGVmIFNfSUZMTksKKy8qIFdpbmRvd3MgZG9lc24ndCBkZWZpbmUgU19JRkxOSyBidXQgcG9zaXhtb2R1bGUuYyBtYXBzCisgKiBJT19SRVBBUlNFX1RBR19TWU1MSU5LIHRvIFNfSUZMTksgKi8KKyMgIGRlZmluZSBTX0lGTE5LIDAxMjAwMDAKICNlbmRpZgogCiAjaWZuZGVmIFNfSVNSRUcKQEAgLTQxMyw2ICs0MDQsOSBAQAogI2RlZmluZSBTX0lTRElSKHgpICgoKHgpICYgU19JRk1UKSA9PSBTX0lGRElSKQogI2VuZGlmCiAKKyNpZm5kZWYgU19JU0NIUgorI2RlZmluZSBTX0lTQ0hSKHgpICgoKHgpICYgU19JRk1UKSA9PSBTX0lGQ0hSKQorI2VuZGlmCiAKICNpZmRlZiBfX2NwbHVzcGx1cwogLyogTW92ZSB0aGlzIGRvd24gaGVyZSBzaW5jZSBzb21lIEMrKyAjaW5jbHVkZSdzIGRvbid0IGxpa2UgdG8gYmUgaW5jbHVkZWQKQEAgLTgzNSwxNSArODI5LDYgQEAKICNlbmRpZgogCiAvKgotICogQWRkIFB5QXJnX1BhcnNlVHVwbGUgZm9ybWF0IHdoZXJlIGF2YWlsYWJsZS4KLSAqLwotI2lmZGVmIEhBVkVfQVRUUklCVVRFX0ZPUk1BVF9QQVJTRVRVUExFCi0jZGVmaW5lIFB5X0ZPUk1BVF9QQVJTRVRVUExFKGZ1bmMscDEscDIpIF9fYXR0cmlidXRlX18oKGZvcm1hdChmdW5jLHAxLHAyKSkpCi0jZWxzZQotI2RlZmluZSBQeV9GT1JNQVRfUEFSU0VUVVBMRShmdW5jLHAxLHAyKQotI2VuZGlmCi0KLS8qCiAgKiBTcGVjaWZ5IGFsaWdubWVudCBvbiBjb21waWxlcnMgdGhhdCBzdXBwb3J0IGl0LgogICovCiAjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgX19HTlVDX18gPj0gMwpAQCAtODgxLDQgKzg2NiwxOCBAQAogI2VuZGlmCiAjZW5kaWYKIAorLyoKKyAqIENvbnZlbmllbnQgbWFjcm9zIHRvIGRlYWwgd2l0aCBlbmRpYW5uZXNzIG9mIHRoZSBwbGF0Zm9ybS4gV09SRFNfQklHRU5ESUFOIGlzCisgKiBkZXRlY3RlZCBieSBjb25maWd1cmUgYW5kIGRlZmluZWQgaW4gcHljb25maWcuaC4gVGhlIGNvZGUgaW4gcHljb25maWcuaAorICogYWxzbyB0YWtlcyBjYXJlIG9mIEFwcGxlJ3MgdW5pdmVyc2FsIGJ1aWxkcy4KKyAqLworCisjaWZkZWYgV09SRFNfQklHRU5ESUFOCisjZGVmaW5lIFBZX0JJR19FTkRJQU4gMQorI2RlZmluZSBQWV9MSVRUTEVfRU5ESUFOIDAKKyNlbHNlCisjZGVmaW5lIFBZX0JJR19FTkRJQU4gMAorI2RlZmluZSBQWV9MSVRUTEVfRU5ESUFOIDEKKyNlbmRpZgorCiAjZW5kaWYgLyogUHlfUFlQT1JUX0ggKi8KZGlmZiAtLWdpdCBhL0luY2x1ZGUvcHlzdGF0ZS5oIGIvSW5jbHVkZS9weXN0YXRlLmgKaW5kZXggMjAxN2IwMi4uNDk5MmMyMiAxMDA2NDQKLS0tIGEvSW5jbHVkZS9weXN0YXRlLmgKKysrIGIvSW5jbHVkZS9weXN0YXRlLmgKQEAgLTMzLDcgKzMzLDYgQEAKICAgICBpbnQgY29kZWNzX2luaXRpYWxpemVkOwogICAgIGludCBmc2NvZGVjX2luaXRpYWxpemVkOwogCi0KICNpZmRlZiBIQVZFX0RMT1BFTgogICAgIGludCBkbG9wZW5mbGFnczsKICNlbmRpZgpAQCAtNDEsNiArNDAsNyBAQAogICAgIGludCB0c2NkdW1wOwogI2VuZGlmCiAKKyAgICBQeU9iamVjdCAqYnVpbHRpbnNfY29weTsKIH0gUHlJbnRlcnByZXRlclN0YXRlOwogI2VuZGlmCiAKQEAgLTY5LDYgKzY5LDcgQEAKIHR5cGVkZWYgc3RydWN0IF90cyB7CiAgICAgLyogU2VlIFB5dGhvbi9jZXZhbC5jIGZvciBjb21tZW50cyBleHBsYWluaW5nIG1vc3QgZmllbGRzICovCiAKKyAgICBzdHJ1Y3QgX3RzICpwcmV2OwogICAgIHN0cnVjdCBfdHMgKm5leHQ7CiAgICAgUHlJbnRlcnByZXRlclN0YXRlICppbnRlcnA7CiAKQEAgLTk5LDE2ICsxMDAsNiBAQAogCiAgICAgUHlPYmplY3QgKmRpY3Q7ICAvKiBTdG9yZXMgcGVyLXRocmVhZCBzdGF0ZSAqLwogCi0gICAgLyogWFhYIGRvZXNuJ3QgbWVhbiBhbnl0aGluZyBhbnltb3JlICh0aGUgY29tbWVudCBiZWxvdyBpcyBvYnNvbGV0ZSkKLSAgICAgICA9PiBkZXByZWNhdGUgb3IgcmVtb3ZlPyAqLwotICAgIC8qIHRpY2tfY291bnRlciBpcyBpbmNyZW1lbnRlZCB3aGVuZXZlciB0aGUgY2hlY2tfaW50ZXJ2YWwgdGlja2VyCi0gICAgICogcmVhY2hlcyB6ZXJvLiBUaGUgcHVycG9zZSBpcyB0byBnaXZlIGEgdXNlZnVsIG1lYXN1cmUgb2YgdGhlIG51bWJlcgotICAgICAqIG9mIGludGVycHJldGVkIGJ5dGVjb2RlIGluc3RydWN0aW9ucyBpbiBhIGdpdmVuIHRocmVhZC4gIFRoaXMKLSAgICAgKiBleHRyZW1lbHkgbGlnaHR3ZWlnaHQgc3RhdGlzdGljIGNvbGxlY3RvciBtYXkgYmUgb2YgaW50ZXJlc3QgdG8KLSAgICAgKiBwcm9maWxlcnMgKGxpa2UgcHN5Y28uaml0KCkpLCBhbHRob3VnaCBub3RoaW5nIGluIHRoZSBjb3JlIHVzZXMgaXQuCi0gICAgICovCi0gICAgaW50IHRpY2tfY291bnRlcjsKLQogICAgIGludCBnaWxzdGF0ZV9jb3VudGVyOwogCiAgICAgUHlPYmplY3QgKmFzeW5jX2V4YzsgLyogQXN5bmNocm9ub3VzIGV4Y2VwdGlvbiB0byByYWlzZSAqLwpAQCAtMTE3LDYgKzEwOCwzMiBAQAogICAgIGludCB0cmFzaF9kZWxldGVfbmVzdGluZzsKICAgICBQeU9iamVjdCAqdHJhc2hfZGVsZXRlX2xhdGVyOwogCisgICAgLyogQ2FsbGVkIHdoZW4gYSB0aHJlYWQgc3RhdGUgaXMgZGVsZXRlZCBub3JtYWxseSwgYnV0IG5vdCB3aGVuIGl0CisgICAgICogaXMgZGVzdHJveWVkIGFmdGVyIGZvcmsoKS4KKyAgICAgKiBQYWluOiAgdG8gcHJldmVudCByYXJlIGJ1dCBmYXRhbCBzaHV0ZG93biBlcnJvcnMgKGlzc3VlIDE4ODA4KSwKKyAgICAgKiBUaHJlYWQuam9pbigpIG11c3Qgd2FpdCBmb3IgdGhlIGpvaW4nZWQgdGhyZWFkJ3MgdHN0YXRlIHRvIGJlIHVubGlua2VkCisgICAgICogZnJvbSB0aGUgdHN0YXRlIGNoYWluLiAgVGhhdCBoYXBwZW5zIGF0IHRoZSBlbmQgb2YgYSB0aHJlYWQncyBsaWZlLAorICAgICAqIGluIHB5c3RhdGUuYy4KKyAgICAgKiBUaGUgb2J2aW91cyB3YXkgZG9lc24ndCBxdWl0ZSB3b3JrOiAgY3JlYXRlIGEgbG9jayB3aGljaCB0aGUgdHN0YXRlCisgICAgICogdW5saW5raW5nIGNvZGUgcmVsZWFzZXMsIGFuZCBoYXZlIFRocmVhZC5qb2luKCkgd2FpdCB0byBhY3F1aXJlIHRoYXQKKyAgICAgKiBsb2NrLiAgVGhlIHByb2JsZW0gaXMgdGhhdCB3ZSBfYXJlXyBhdCB0aGUgZW5kIG9mIHRoZSB0aHJlYWQncyBsaWZlOgorICAgICAqIGlmIHRoZSB0aHJlYWQgaG9sZHMgdGhlIGxhc3QgcmVmZXJlbmNlIHRvIHRoZSBsb2NrLCBkZWNyZWYnaW5nIHRoZQorICAgICAqIGxvY2sgd2lsbCBkZWxldGUgdGhlIGxvY2ssIGFuZCB0aGF0IG1heSB0cmlnZ2VyIGFyYml0cmFyeSBQeXRob24gY29kZQorICAgICAqIGlmIHRoZXJlJ3MgYSB3ZWFrcmVmLCB3aXRoIGEgY2FsbGJhY2ssIHRvIHRoZSBsb2NrLiAgQnV0IGJ5IHRoaXMgdGltZQorICAgICAqIF9QeVRocmVhZFN0YXRlX0N1cnJlbnQgaXMgYWxyZWFkeSBOVUxMLCBzbyBvbmx5IHRoZSBzaW1wbGVzdCBvZiBDIGNvZGUKKyAgICAgKiBjYW4gYmUgYWxsb3dlZCB0byBydW4gKGluIHBhcnRpY3VsYXIgaXQgbXVzdCBub3QgYmUgcG9zc2libGUgdG8KKyAgICAgKiByZWxlYXNlIHRoZSBHSUwpLgorICAgICAqIFNvIGluc3RlYWQgb2YgaG9sZGluZyB0aGUgbG9jayBkaXJlY3RseSwgdGhlIHRzdGF0ZSBob2xkcyBhIHdlYWtyZWYgdG8KKyAgICAgKiB0aGUgbG9jazogIHRoYXQncyB0aGUgdmFsdWUgb2Ygb25fZGVsZXRlX2RhdGEgYmVsb3cuICBEZWNyZWYnaW5nIGEKKyAgICAgKiB3ZWFrcmVmIGlzIGhhcm1sZXNzLgorICAgICAqIG9uX2RlbGV0ZSBwb2ludHMgdG8gX3RocmVhZG1vZHVsZS5jJ3Mgc3RhdGljIHJlbGVhc2Vfc2VudGluZWwoKSBmdW5jdGlvbi4KKyAgICAgKiBBZnRlciB0aGUgdHN0YXRlIGlzIHVubGlua2VkLCByZWxlYXNlX3NlbnRpbmVsIGlzIGNhbGxlZCB3aXRoIHRoZQorICAgICAqIHdlYWtyZWYtdG8tbG9jayAob25fZGVsZXRlX2RhdGEpIGFyZ3VtZW50LCBhbmQgcmVsZWFzZV9zZW50aW5lbCByZWxlYXNlcworICAgICAqIHRoZSBpbmRpcmVjdGx5IGhlbGQgbG9jay4KKyAgICAgKi8KKyAgICB2b2lkICgqb25fZGVsZXRlKSh2b2lkICopOworICAgIHZvaWQgKm9uX2RlbGV0ZV9kYXRhOworCiAgICAgLyogWFhYIHNpZ25hbCBoYW5kbGVycyBzaG91bGQgYWxzbyBiZSBoZXJlICovCiAKIH0gUHlUaHJlYWRTdGF0ZTsKQEAgLTEzMywxMiArMTUwLDE2IEBACiBQeUFQSV9GVU5DKGludCkgUHlTdGF0ZV9SZW1vdmVNb2R1bGUoc3RydWN0IFB5TW9kdWxlRGVmKik7CiAjZW5kaWYKIFB5QVBJX0ZVTkMoUHlPYmplY3QqKSBQeVN0YXRlX0ZpbmRNb2R1bGUoc3RydWN0IFB5TW9kdWxlRGVmKik7CisjaWZuZGVmIFB5X0xJTUlURURfQVBJCitQeUFQSV9GVU5DKHZvaWQpIF9QeVN0YXRlX0NsZWFyTW9kdWxlcyh2b2lkKTsKKyNlbmRpZgogCiBQeUFQSV9GVU5DKFB5VGhyZWFkU3RhdGUgKikgUHlUaHJlYWRTdGF0ZV9OZXcoUHlJbnRlcnByZXRlclN0YXRlICopOwogUHlBUElfRlVOQyhQeVRocmVhZFN0YXRlICopIF9QeVRocmVhZFN0YXRlX1ByZWFsbG9jKFB5SW50ZXJwcmV0ZXJTdGF0ZSAqKTsKIFB5QVBJX0ZVTkModm9pZCkgX1B5VGhyZWFkU3RhdGVfSW5pdChQeVRocmVhZFN0YXRlICopOwogUHlBUElfRlVOQyh2b2lkKSBQeVRocmVhZFN0YXRlX0NsZWFyKFB5VGhyZWFkU3RhdGUgKik7CiBQeUFQSV9GVU5DKHZvaWQpIFB5VGhyZWFkU3RhdGVfRGVsZXRlKFB5VGhyZWFkU3RhdGUgKik7CitQeUFQSV9GVU5DKHZvaWQpIF9QeVRocmVhZFN0YXRlX0RlbGV0ZUV4Y2VwdChQeVRocmVhZFN0YXRlICp0c3RhdGUpOwogI2lmZGVmIFdJVEhfVEhSRUFECiBQeUFQSV9GVU5DKHZvaWQpIFB5VGhyZWFkU3RhdGVfRGVsZXRlQ3VycmVudCh2b2lkKTsKIFB5QVBJX0ZVTkModm9pZCkgX1B5R0lMU3RhdGVfUmVpbml0KHZvaWQpOwpAQCAtMjEyLDYgKzIzMywxMyBAQAogKi8KIFB5QVBJX0ZVTkMoUHlUaHJlYWRTdGF0ZSAqKSBQeUdJTFN0YXRlX0dldFRoaXNUaHJlYWRTdGF0ZSh2b2lkKTsKIAorLyogSGVscGVyL2RpYWdub3N0aWMgZnVuY3Rpb24gLSByZXR1cm4gMSBpZiB0aGUgY3VycmVudCB0aHJlYWQKKyAqIGN1cnJlbnRseSBob2xkcyB0aGUgR0lMLCAwIG90aGVyd2lzZQorICovCisjaWZuZGVmIFB5X0xJTUlURURfQVBJCitQeUFQSV9GVU5DKGludCkgUHlHSUxTdGF0ZV9DaGVjayh2b2lkKTsKKyNlbmRpZgorCiAjZW5kaWYgICAvKiAjaWZkZWYgV0lUSF9USFJFQUQgKi8KIAogLyogVGhlIGltcGxlbWVudGF0aW9uIG9mIHN5cy5fY3VycmVudF9mcmFtZXMoKSAgUmV0dXJucyBhIGRpY3QgbWFwcGluZwpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9weXRob25ydW4uaCBiL0luY2x1ZGUvcHl0aG9ucnVuLmgKaW5kZXggZThhNTgyZC4uMmZjNTU3OCAxMDA2NDQKLS0tIGEvSW5jbHVkZS9weXRob25ydW4uaAorKysgYi9JbmNsdWRlL3B5dGhvbnJ1bi5oCkBAIC0yOCw2ICsyOCwxNCBAQAogUHlBUElfRlVOQyh2b2lkKSBQeV9TZXRQeXRob25Ib21lKHdjaGFyX3QgKik7CiBQeUFQSV9GVU5DKHdjaGFyX3QgKikgUHlfR2V0UHl0aG9uSG9tZSh2b2lkKTsKIAorI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQorLyogT25seSB1c2VkIGJ5IGFwcGxpY2F0aW9ucyB0aGF0IGVtYmVkIHRoZSBpbnRlcnByZXRlciBhbmQgbmVlZCB0bworICogb3ZlcnJpZGUgdGhlIHN0YW5kYXJkIGVuY29kaW5nIGRldGVybWluYXRpb24gbWVjaGFuaXNtCisgKi8KK1B5QVBJX0ZVTkMoaW50KSBQeV9TZXRTdGFuZGFyZFN0cmVhbUVuY29kaW5nKGNvbnN0IGNoYXIgKmVuY29kaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZXJyb3JzKTsKKyNlbmRpZgorCiBQeUFQSV9GVU5DKHZvaWQpIFB5X0luaXRpYWxpemUodm9pZCk7CiBQeUFQSV9GVU5DKHZvaWQpIFB5X0luaXRpYWxpemVFeChpbnQpOwogI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQpAQCAtNTUsNiArNjMsMTAgQEAKICAgICBGSUxFICpmcCwKICAgICBjb25zdCBjaGFyICpmaWxlbmFtZSwgICAgICAgLyogZGVjb2RlZCBmcm9tIHRoZSBmaWxlc3lzdGVtIGVuY29kaW5nICovCiAgICAgUHlDb21waWxlckZsYWdzICpmbGFncyk7CitQeUFQSV9GVU5DKGludCkgUHlSdW5fSW50ZXJhY3RpdmVPbmVPYmplY3QoCisgICAgRklMRSAqZnAsCisgICAgUHlPYmplY3QgKmZpbGVuYW1lLAorICAgIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MpOwogUHlBUElfRlVOQyhpbnQpIFB5UnVuX0ludGVyYWN0aXZlTG9vcEZsYWdzKAogICAgIEZJTEUgKmZwLAogICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCAgICAgICAvKiBkZWNvZGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0gZW5jb2RpbmcgKi8KQEAgLTY2LDYgKzc4LDEyIEBACiAgICAgaW50IHN0YXJ0LAogICAgIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MsCiAgICAgUHlBcmVuYSAqYXJlbmEpOworUHlBUElfRlVOQyhzdHJ1Y3QgX21vZCAqKSBQeVBhcnNlcl9BU1RGcm9tU3RyaW5nT2JqZWN0KAorICAgIGNvbnN0IGNoYXIgKnMsCisgICAgUHlPYmplY3QgKmZpbGVuYW1lLAorICAgIGludCBzdGFydCwKKyAgICBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzLAorICAgIFB5QXJlbmEgKmFyZW5hKTsKIFB5QVBJX0ZVTkMoc3RydWN0IF9tb2QgKikgUHlQYXJzZXJfQVNURnJvbUZpbGUoCiAgICAgRklMRSAqZnAsCiAgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsICAgICAgIC8qIGRlY29kZWQgZnJvbSB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZyAqLwpAQCAtNzYsNiArOTQsMTYgQEAKICAgICBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzLAogICAgIGludCAqZXJyY29kZSwKICAgICBQeUFyZW5hICphcmVuYSk7CitQeUFQSV9GVU5DKHN0cnVjdCBfbW9kICopIFB5UGFyc2VyX0FTVEZyb21GaWxlT2JqZWN0KAorICAgIEZJTEUgKmZwLAorICAgIFB5T2JqZWN0ICpmaWxlbmFtZSwKKyAgICBjb25zdCBjaGFyKiBlbmMsCisgICAgaW50IHN0YXJ0LAorICAgIGNoYXIgKnBzMSwKKyAgICBjaGFyICpwczIsCisgICAgUHlDb21waWxlckZsYWdzICpmbGFncywKKyAgICBpbnQgKmVycmNvZGUsCisgICAgUHlBcmVuYSAqYXJlbmEpOwogI2VuZGlmCiAKICNpZm5kZWYgUHlQYXJzZXJfU2ltcGxlUGFyc2VTdHJpbmcKQEAgLTExNywxMSArMTQ1LDIyIEBACiAgICAgaW50IHN0YXJ0LAogICAgIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MsCiAgICAgaW50IG9wdGltaXplKTsKK1B5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlfQ29tcGlsZVN0cmluZ09iamVjdCgKKyAgICBjb25zdCBjaGFyICpzdHIsCisgICAgUHlPYmplY3QgKmZpbGVuYW1lLCBpbnQgc3RhcnQsCisgICAgUHlDb21waWxlckZsYWdzICpmbGFncywKKyAgICBpbnQgb3B0aW1pemUpOwogI2VuZGlmCiBQeUFQSV9GVU5DKHN0cnVjdCBzeW10YWJsZSAqKSBQeV9TeW10YWJsZVN0cmluZygKICAgICBjb25zdCBjaGFyICpzdHIsCiAgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsICAgICAgIC8qIGRlY29kZWQgZnJvbSB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZyAqLwogICAgIGludCBzdGFydCk7CisjaWZuZGVmIFB5X0xJTUlURURfQVBJCitQeUFQSV9GVU5DKHN0cnVjdCBzeW10YWJsZSAqKSBQeV9TeW10YWJsZVN0cmluZ09iamVjdCgKKyAgICBjb25zdCBjaGFyICpzdHIsCisgICAgUHlPYmplY3QgKmZpbGVuYW1lLAorICAgIGludCBzdGFydCk7CisjZW5kaWYKIAogUHlBUElfRlVOQyh2b2lkKSBQeUVycl9QcmludCh2b2lkKTsKIFB5QVBJX0ZVTkModm9pZCkgUHlFcnJfUHJpbnRFeChpbnQpOwpAQCAtMTk3LDcgKzIzNiw3IEBACiBQeUFQSV9GVU5DKHZvaWQpIF9QeUV4Y19Jbml0KFB5T2JqZWN0ICogYmx0aW5tb2QpOwogUHlBUElfRlVOQyh2b2lkKSBfUHlJbXBvcnRIb29rc19Jbml0KHZvaWQpOwogUHlBUElfRlVOQyhpbnQpIF9QeUZyYW1lX0luaXQodm9pZCk7Ci1QeUFQSV9GVU5DKHZvaWQpIF9QeUZsb2F0X0luaXQodm9pZCk7CitQeUFQSV9GVU5DKGludCkgX1B5RmxvYXRfSW5pdCh2b2lkKTsKIFB5QVBJX0ZVTkMoaW50KSBQeUJ5dGVBcnJheV9Jbml0KHZvaWQpOwogUHlBUElfRlVOQyh2b2lkKSBfUHlSYW5kb21fSW5pdCh2b2lkKTsKICNlbmRpZgpAQCAtMjE3LDE5ICsyNTYsMjEgQEAKIFB5QVBJX0ZVTkModm9pZCkgUHlCeXRlQXJyYXlfRmluaSh2b2lkKTsKIFB5QVBJX0ZVTkModm9pZCkgUHlGbG9hdF9GaW5pKHZvaWQpOwogUHlBUElfRlVOQyh2b2lkKSBQeU9TX0ZpbmlJbnRlcnJ1cHRzKHZvaWQpOworUHlBUElfRlVOQyh2b2lkKSBfUHlHQ19EdW1wU2h1dGRvd25TdGF0cyh2b2lkKTsKIFB5QVBJX0ZVTkModm9pZCkgX1B5R0NfRmluaSh2b2lkKTsKIFB5QVBJX0ZVTkModm9pZCkgUHlTbGljZV9GaW5pKHZvaWQpOwogUHlBUElfRlVOQyh2b2lkKSBfUHlUeXBlX0Zpbmkodm9pZCk7CitQeUFQSV9GVU5DKHZvaWQpIF9QeVJhbmRvbV9GaW5pKHZvaWQpOwogCiBQeUFQSV9EQVRBKFB5VGhyZWFkU3RhdGUgKikgX1B5X0ZpbmFsaXppbmc7CiAjZW5kaWYKIAogLyogU3R1ZmYgd2l0aCBubyBwcm9wZXIgaG9tZSAoeWV0KSAqLwogI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQotUHlBUElfRlVOQyhjaGFyICopIFB5T1NfUmVhZGxpbmUoRklMRSAqLCBGSUxFICosIGNoYXIgKik7CitQeUFQSV9GVU5DKGNoYXIgKikgUHlPU19SZWFkbGluZShGSUxFICosIEZJTEUgKiwgY29uc3QgY2hhciAqKTsKICNlbmRpZgogUHlBUElfREFUQShpbnQpICgqUHlPU19JbnB1dEhvb2spKHZvaWQpOwotUHlBUElfREFUQShjaGFyKSAqKCpQeU9TX1JlYWRsaW5lRnVuY3Rpb25Qb2ludGVyKShGSUxFICosIEZJTEUgKiwgY2hhciAqKTsKK1B5QVBJX0RBVEEoY2hhcikgKigqUHlPU19SZWFkbGluZUZ1bmN0aW9uUG9pbnRlcikoRklMRSAqLCBGSUxFICosIGNvbnN0IGNoYXIgKik7CiAjaWZuZGVmIFB5X0xJTUlURURfQVBJCiBQeUFQSV9EQVRBKFB5VGhyZWFkU3RhdGUqKSBfUHlPU19SZWFkbGluZVRTdGF0ZTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9weXRpbWUuaCBiL0luY2x1ZGUvcHl0aW1lLmgKaW5kZXggNTI5MDJmNS4uYjBmYzZkMCAxMDA2NDQKLS0tIGEvSW5jbHVkZS9weXRpbWUuaAorKysgYi9JbmNsdWRlL3B5dGltZS5oCkBAIC01MywxMCArNTMsMTkgQEAKICAgICAgKHR2X2VuZC50dl91c2VjIC0gdHZfc3RhcnQudHZfdXNlYykgKiAwLjAwMDAwMSkKIAogI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQorCit0eXBlZGVmIGVudW0geworICAgIC8qIFJvdW5kIHRvd2FyZHMgemVyby4gKi8KKyAgICBfUHlUaW1lX1JPVU5EX0RPV049MCwKKyAgICAvKiBSb3VuZCBhd2F5IGZyb20gemVyby4gKi8KKyAgICBfUHlUaW1lX1JPVU5EX1VQCit9IF9QeVRpbWVfcm91bmRfdDsKKwogLyogQ29udmVydCBhIG51bWJlciBvZiBzZWNvbmRzLCBpbnQgb3IgZmxvYXQsIHRvIHRpbWVfdC4gKi8KIFB5QVBJX0ZVTkMoaW50KSBfUHlUaW1lX09iamVjdFRvVGltZV90KAogICAgIFB5T2JqZWN0ICpvYmosCi0gICAgdGltZV90ICpzZWMpOworICAgIHRpbWVfdCAqc2VjLAorICAgIF9QeVRpbWVfcm91bmRfdCk7CiAKIC8qIENvbnZlcnQgYSB0aW1lX3QgdG8gYSBQeUxvbmcuICovCiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIF9QeUxvbmdfRnJvbVRpbWVfdCgKQEAgLTcyLDcgKzgxLDggQEAKIFB5QVBJX0ZVTkMoaW50KSBfUHlUaW1lX09iamVjdFRvVGltZXZhbCgKICAgICBQeU9iamVjdCAqb2JqLAogICAgIHRpbWVfdCAqc2VjLAotICAgIGxvbmcgKnVzZWMpOworICAgIGxvbmcgKnVzZWMsCisgICAgX1B5VGltZV9yb3VuZF90KTsKIAogLyogQ29udmVydCBhIG51bWJlciBvZiBzZWNvbmRzLCBpbnQgb3IgZmxvYXQsIHRvIGEgdGltZXNwZWMgc3RydWN0dXJlLgogICAgbnNlYyBpcyBpbiB0aGUgcmFuZ2UgWzA7IDk5OTk5OTk5OV0gYW5kIHJvdW5kZWQgdG93YXJkcyB6ZXJvLgpAQCAtODAsNyArOTAsOCBAQAogUHlBUElfRlVOQyhpbnQpIF9QeVRpbWVfT2JqZWN0VG9UaW1lc3BlYygKICAgICBQeU9iamVjdCAqb2JqLAogICAgIHRpbWVfdCAqc2VjLAotICAgIGxvbmcgKm5zZWMpOworICAgIGxvbmcgKm5zZWMsCisgICAgX1B5VGltZV9yb3VuZF90KTsKICNlbmRpZgogCiAvKiBEdW1teSB0byBmb3JjZSBsaW5raW5nLiAqLwpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9zZXRvYmplY3QuaCBiL0luY2x1ZGUvc2V0b2JqZWN0LmgKaW5kZXggYTE0ODc0Yi4uYWUzZjU1NiAxMDA2NDQKLS0tIGEvSW5jbHVkZS9zZXRvYmplY3QuaAorKysgYi9JbmNsdWRlL3NldG9iamVjdC5oCkBAIC0yMyw4ICsyMyw4IEBACiAKIHR5cGVkZWYgc3RydWN0IHsKICAgICAvKiBDYWNoZWQgaGFzaCBjb2RlIG9mIHRoZSBrZXkuICovCi0gICAgUHlfaGFzaF90IGhhc2g7CiAgICAgUHlPYmplY3QgKmtleTsKKyAgICBQeV9oYXNoX3QgaGFzaDsKIH0gc2V0ZW50cnk7CiAKIApAQCAtNTEsOSArNTEsOSBAQAogICAgICAqLwogICAgIHNldGVudHJ5ICp0YWJsZTsKICAgICBzZXRlbnRyeSAqKCpsb29rdXApKFB5U2V0T2JqZWN0ICpzbywgUHlPYmplY3QgKmtleSwgUHlfaGFzaF90IGhhc2gpOworICAgIFB5X2hhc2hfdCBoYXNoOyAgICAgICAgICAgICAvKiBvbmx5IHVzZWQgYnkgZnJvemVuc2V0IG9iamVjdHMgKi8KICAgICBzZXRlbnRyeSBzbWFsbHRhYmxlW1B5U2V0X01JTlNJWkVdOwogCi0gICAgUHlfaGFzaF90IGhhc2g7ICAgICAgICAgICAgICAgICAgLyogb25seSB1c2VkIGJ5IGZyb3plbnNldCBvYmplY3RzICovCiAgICAgUHlPYmplY3QgKndlYWtyZWZsaXN0OyAgICAgIC8qIExpc3Qgb2Ygd2VhayByZWZlcmVuY2VzICovCiB9OwogI2VuZGlmIC8qIFB5X0xJTUlURURfQVBJICovCkBAIC02MSw2ICs2MSwxMCBAQAogUHlBUElfREFUQShQeVR5cGVPYmplY3QpIFB5U2V0X1R5cGU7CiBQeUFQSV9EQVRBKFB5VHlwZU9iamVjdCkgUHlGcm96ZW5TZXRfVHlwZTsKIFB5QVBJX0RBVEEoUHlUeXBlT2JqZWN0KSBQeVNldEl0ZXJfVHlwZTsKKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKK1B5QVBJX0RBVEEoUHlPYmplY3QgKikgX1B5U2V0X0R1bW15OworI2VuZGlmCisKIAogLyogSW52YXJpYW50cyBmb3IgZnJvemVuc2V0czoKICAqICAgICBkYXRhIGlzIGltbXV0YWJsZS4KQEAgLTEwMSw3ICsxMDUsNiBAQAogUHlBUElfRlVOQyhpbnQpIF9QeVNldF9VcGRhdGUoUHlPYmplY3QgKnNldCwgUHlPYmplY3QgKml0ZXJhYmxlKTsKIAogUHlBUElfRlVOQyhpbnQpIFB5U2V0X0NsZWFyRnJlZUxpc3Qodm9pZCk7Ci1QeUFQSV9GVU5DKHZvaWQpIF9QeVNldF9EZWJ1Z01hbGxvY1N0YXRzKEZJTEUgKm91dCk7CiAjZW5kaWYKIAogI2lmZGVmIF9fY3BsdXNwbHVzCmRpZmYgLS1naXQgYS9JbmNsdWRlL3NsaWNlb2JqZWN0LmggYi9JbmNsdWRlL3NsaWNlb2JqZWN0LmgKaW5kZXggOGJlYzE3OS4uZjdlZTkwYyAxMDA2NDQKLS0tIGEvSW5jbHVkZS9zbGljZW9iamVjdC5oCisrKyBiL0luY2x1ZGUvc2xpY2VvYmplY3QuaApAQCAtMzQsNiArMzQsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0KiBzdGVwKTsKICNpZm5kZWYgUHlfTElNSVRFRF9BUEkKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgX1B5U2xpY2VfRnJvbUluZGljZXMoUHlfc3NpemVfdCBzdGFydCwgUHlfc3NpemVfdCBzdG9wKTsKK1B5QVBJX0ZVTkMoaW50KSBfUHlTbGljZV9HZXRMb25nSW5kaWNlcyhQeVNsaWNlT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKipzdGFydF9wdHIsIFB5T2JqZWN0ICoqc3RvcF9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqKnN0ZXBfcHRyKTsKICNlbmRpZgogUHlBUElfRlVOQyhpbnQpIFB5U2xpY2VfR2V0SW5kaWNlcyhQeU9iamVjdCAqciwgUHlfc3NpemVfdCBsZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCAqc3RhcnQsIFB5X3NzaXplX3QgKnN0b3AsIFB5X3NzaXplX3QgKnN0ZXApOwpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9zdHJ1Y3RzZXEuaCBiL0luY2x1ZGUvc3RydWN0c2VxLmgKaW5kZXggMzBjNTJhYy4uYWYyMjcxNiAxMDA2NDQKLS0tIGEvSW5jbHVkZS9zdHJ1Y3RzZXEuaAorKysgYi9JbmNsdWRlL3N0cnVjdHNlcS5oCkBAIC0yNCw2ICsyNCw4IEBACiAjaWZuZGVmIFB5X0xJTUlURURfQVBJCiBQeUFQSV9GVU5DKHZvaWQpIFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUoUHlUeXBlT2JqZWN0ICp0eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5U3RydWN0U2VxdWVuY2VfRGVzYyAqZGVzYyk7CitQeUFQSV9GVU5DKGludCkgUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZTIoUHlUeXBlT2JqZWN0ICp0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5U3RydWN0U2VxdWVuY2VfRGVzYyAqZGVzYyk7CiAjZW5kaWYKIFB5QVBJX0ZVTkMoUHlUeXBlT2JqZWN0KikgUHlTdHJ1Y3RTZXF1ZW5jZV9OZXdUeXBlKFB5U3RydWN0U2VxdWVuY2VfRGVzYyAqZGVzYyk7CiAKZGlmZiAtLWdpdCBhL0luY2x1ZGUvc3ltdGFibGUuaCBiL0luY2x1ZGUvc3ltdGFibGUuaAppbmRleCA2ZWQzYTJiLi4xY2ZkODg0IDEwMDY0NAotLS0gYS9JbmNsdWRlL3N5bXRhYmxlLmgKKysrIGIvSW5jbHVkZS9zeW10YWJsZS5oCkBAIC0xNiw3ICsxNiw3IEBACiBzdHJ1Y3QgX3N5bXRhYmxlX2VudHJ5OwogCiBzdHJ1Y3Qgc3ltdGFibGUgewotICAgIGNvbnN0IGNoYXIgKnN0X2ZpbGVuYW1lOyAgICAgICAgLyogbmFtZSBvZiBmaWxlIGJlaW5nIGNvbXBpbGVkLAorICAgIFB5T2JqZWN0ICpzdF9maWxlbmFtZTsgICAgICAgICAgLyogbmFtZSBvZiBmaWxlIGJlaW5nIGNvbXBpbGVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2RlZCBmcm9tIHRoZSBmaWxlc3lzdGVtIGVuY29kaW5nICovCiAgICAgc3RydWN0IF9zeW10YWJsZV9lbnRyeSAqc3RfY3VyOyAvKiBjdXJyZW50IHN5bWJvbCB0YWJsZSBlbnRyeSAqLwogICAgIHN0cnVjdCBfc3ltdGFibGVfZW50cnkgKnN0X3RvcDsgLyogc3ltYm9sIHRhYmxlIGVudHJ5IGZvciBtb2R1bGUgKi8KQEAgLTQxLDYgKzQxLDcgQEAKICAgICBQeU9iamVjdCAqc3RlX25hbWU7ICAgICAgLyogc3RyaW5nOiBuYW1lIG9mIGN1cnJlbnQgYmxvY2sgKi8KICAgICBQeU9iamVjdCAqc3RlX3Zhcm5hbWVzOyAgLyogbGlzdCBvZiBmdW5jdGlvbiBwYXJhbWV0ZXJzICovCiAgICAgUHlPYmplY3QgKnN0ZV9jaGlsZHJlbjsgIC8qIGxpc3Qgb2YgY2hpbGQgYmxvY2tzICovCisgICAgUHlPYmplY3QgKnN0ZV9kaXJlY3RpdmVzOy8qIGxvY2F0aW9ucyBvZiBnbG9iYWwgYW5kIG5vbmxvY2FsIHN0YXRlbWVudHMgKi8KICAgICBfUHlfYmxvY2tfdHkgc3RlX3R5cGU7ICAgLyogbW9kdWxlLCBjbGFzcywgb3IgZnVuY3Rpb24gKi8KICAgICBpbnQgc3RlX3Vub3B0aW1pemVkOyAgICAgLyogZmFsc2UgaWYgbmFtZXNwYWNlIGlzIG9wdGltaXplZCAqLwogICAgIGludCBzdGVfbmVzdGVkOyAgICAgIC8qIHRydWUgaWYgYmxvY2sgaXMgbmVzdGVkICovCkBAIC01Miw2ICs1Myw5IEBACiAgICAgdW5zaWduZWQgc3RlX3ZhcmtleXdvcmRzIDogMTsgLyogdHJ1ZSBpZiBibG9jayBoYXMgdmFya2V5d29yZHMgKi8KICAgICB1bnNpZ25lZCBzdGVfcmV0dXJuc192YWx1ZSA6IDE7ICAvKiB0cnVlIGlmIG5hbWVzcGFjZSB1c2VzIHJldHVybiB3aXRoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW4gYXJndW1lbnQgKi8KKyAgICB1bnNpZ25lZCBzdGVfbmVlZHNfY2xhc3NfY2xvc3VyZSA6IDE7IC8qIGZvciBjbGFzcyBzY29wZXMsIHRydWUgaWYgYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvc3VyZSBvdmVyIF9fY2xhc3NfXworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvdWxkIGJlIGNyZWF0ZWQgKi8KICAgICBpbnQgc3RlX2xpbmVubzsgICAgICAgICAgLyogZmlyc3QgbGluZSBvZiBibG9jayAqLwogICAgIGludCBzdGVfY29sX29mZnNldDsgICAgICAvKiBvZmZzZXQgb2YgZmlyc3QgbGluZSBvZiBibG9jayAqLwogICAgIGludCBzdGVfb3B0X2xpbmVubzsgICAgICAvKiBsaW5lbm8gb2YgbGFzdCBleGVjIG9yIGltcG9ydCAqICovCkBAIC03MCw2ICs3NCwxMCBAQAogICAgIG1vZF90eSBtb2QsCiAgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsICAgICAgIC8qIGRlY29kZWQgZnJvbSB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZyAqLwogICAgIFB5RnV0dXJlRmVhdHVyZXMgKmZ1dHVyZSk7CitQeUFQSV9GVU5DKHN0cnVjdCBzeW10YWJsZSAqKSBQeVN5bXRhYmxlX0J1aWxkT2JqZWN0KAorICAgIG1vZF90eSBtb2QsCisgICAgUHlPYmplY3QgKmZpbGVuYW1lLAorICAgIFB5RnV0dXJlRmVhdHVyZXMgKmZ1dHVyZSk7CiBQeUFQSV9GVU5DKFB5U1RFbnRyeU9iamVjdCAqKSBQeVN5bXRhYmxlX0xvb2t1cChzdHJ1Y3Qgc3ltdGFibGUgKiwgdm9pZCAqKTsKIAogUHlBUElfRlVOQyh2b2lkKSBQeVN5bXRhYmxlX0ZyZWUoc3RydWN0IHN5bXRhYmxlICopOwpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9zeXNtb2R1bGUuaCBiL0luY2x1ZGUvc3lzbW9kdWxlLmgKaW5kZXggMGNhYmY2Zi4uY2RlMTBhYyAxMDA2NDQKLS0tIGEvSW5jbHVkZS9zeXNtb2R1bGUuaAorKysgYi9JbmNsdWRlL3N5c21vZHVsZS5oCkBAIC04LDcgKzgsMTIgQEAKICNlbmRpZgogCiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5U3lzX0dldE9iamVjdChjb25zdCBjaGFyICopOworI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQorUHlBUElfRlVOQyhQeU9iamVjdCAqKSBfUHlTeXNfR2V0T2JqZWN0SWQoX1B5X0lkZW50aWZpZXIgKmtleSk7CisjZW5kaWYKIFB5QVBJX0ZVTkMoaW50KSBQeVN5c19TZXRPYmplY3QoY29uc3QgY2hhciAqLCBQeU9iamVjdCAqKTsKK1B5QVBJX0ZVTkMoaW50KSBfUHlTeXNfU2V0T2JqZWN0SWQoX1B5X0lkZW50aWZpZXIgKmtleSwgUHlPYmplY3QgKik7CisKIFB5QVBJX0ZVTkModm9pZCkgUHlTeXNfU2V0QXJndihpbnQsIHdjaGFyX3QgKiopOwogUHlBUElfRlVOQyh2b2lkKSBQeVN5c19TZXRBcmd2RXgoaW50LCB3Y2hhcl90ICoqLCBpbnQpOwogUHlBUElfRlVOQyh2b2lkKSBQeVN5c19TZXRQYXRoKGNvbnN0IHdjaGFyX3QgKik7CkBAIC0yOCw2ICszMywxMCBAQAogUHlBUElfRlVOQyh2b2lkKSBQeVN5c19BZGRYT3B0aW9uKGNvbnN0IHdjaGFyX3QgKik7CiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5U3lzX0dldFhPcHRpb25zKHZvaWQpOwogCisjaWZuZGVmIFB5X0xJTUlURURfQVBJCitQeUFQSV9GVU5DKHNpemVfdCkgX1B5U3lzX0dldFNpemVPZihQeU9iamVjdCAqKTsKKyNlbmRpZgorCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvSW5jbHVkZS90b2tlbi5oIGIvSW5jbHVkZS90b2tlbi5oCmluZGV4IGY3ZjY1MDQuLjkwNTAyMmIgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvdG9rZW4uaAorKysgYi9JbmNsdWRlL3Rva2VuLmgKQEAgLTc1LDcgKzc1LDcgQEAKICNkZWZpbmUgSVNFT0YoeCkJCSgoeCkgPT0gRU5ETUFSS0VSKQogCiAKLVB5QVBJX0RBVEEoY2hhciAqKSBfUHlQYXJzZXJfVG9rZW5OYW1lc1tdOyAvKiBUb2tlbiBuYW1lcyAqLworUHlBUElfREFUQShjb25zdCBjaGFyICopIF9QeVBhcnNlcl9Ub2tlbk5hbWVzW107IC8qIFRva2VuIG5hbWVzICovCiBQeUFQSV9GVU5DKGludCkgUHlUb2tlbl9PbmVDaGFyKGludCk7CiBQeUFQSV9GVU5DKGludCkgUHlUb2tlbl9Ud29DaGFycyhpbnQsIGludCk7CiBQeUFQSV9GVU5DKGludCkgUHlUb2tlbl9UaHJlZUNoYXJzKGludCwgaW50LCBpbnQpOwpkaWZmIC0tZ2l0IGEvSW5jbHVkZS90cmFjZWJhY2suaCBiL0luY2x1ZGUvdHJhY2ViYWNrLmgKaW5kZXggNzczNDcwNy4uODkxMDAwYyAxMDA2NDQKLS0tIGEvSW5jbHVkZS90cmFjZWJhY2suaAorKysgYi9JbmNsdWRlL3RyYWNlYmFjay5oCkBAIC0yNCw2ICsyNCw3IEBACiBQeUFQSV9GVU5DKGludCkgUHlUcmFjZUJhY2tfUHJpbnQoUHlPYmplY3QgKiwgUHlPYmplY3QgKik7CiAjaWZuZGVmIFB5X0xJTUlURURfQVBJCiBQeUFQSV9GVU5DKGludCkgX1B5X0Rpc3BsYXlTb3VyY2VMaW5lKFB5T2JqZWN0ICosIFB5T2JqZWN0ICosIGludCwgaW50KTsKK1B5QVBJX0ZVTkModm9pZCkgX1B5VHJhY2ViYWNrX0FkZChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgaW50KTsKICNlbmRpZgogCiAvKiBSZXZlYWwgdHJhY2ViYWNrIHR5cGUgc28gd2UgY2FuIHR5cGVjaGVjayB0cmFjZWJhY2sgb2JqZWN0cyAqLwpkaWZmIC0tZ2l0IGEvSW5jbHVkZS91bmljb2Rlb2JqZWN0LmggYi9JbmNsdWRlL3VuaWNvZGVvYmplY3QuaAppbmRleCBhOGY1YjVkLi5mMTlkOWJmIDEwMDY0NAotLS0gYS9JbmNsdWRlL3VuaWNvZGVvYmplY3QuaAorKysgYi9JbmNsdWRlL3VuaWNvZGVvYmplY3QuaApAQCAtMTgwLDkgKzE4MCw5IEBACiAgICAgfSB3aGlsZSAoMCkKIAogLyogbWFjcm9zIHRvIHdvcmsgd2l0aCBzdXJyb2dhdGVzICovCi0jZGVmaW5lIFB5X1VOSUNPREVfSVNfU1VSUk9HQVRFKGNoKSAoMHhEODAwIDw9IGNoICYmIGNoIDw9IDB4REZGRikKLSNkZWZpbmUgUHlfVU5JQ09ERV9JU19ISUdIX1NVUlJPR0FURShjaCkgKDB4RDgwMCA8PSBjaCAmJiBjaCA8PSAweERCRkYpCi0jZGVmaW5lIFB5X1VOSUNPREVfSVNfTE9XX1NVUlJPR0FURShjaCkgKDB4REMwMCA8PSBjaCAmJiBjaCA8PSAweERGRkYpCisjZGVmaW5lIFB5X1VOSUNPREVfSVNfU1VSUk9HQVRFKGNoKSAoMHhEODAwIDw9IChjaCkgJiYgKGNoKSA8PSAweERGRkYpCisjZGVmaW5lIFB5X1VOSUNPREVfSVNfSElHSF9TVVJST0dBVEUoY2gpICgweEQ4MDAgPD0gKGNoKSAmJiAoY2gpIDw9IDB4REJGRikKKyNkZWZpbmUgUHlfVU5JQ09ERV9JU19MT1dfU1VSUk9HQVRFKGNoKSAoMHhEQzAwIDw9IChjaCkgJiYgKGNoKSA8PSAweERGRkYpCiAvKiBKb2luIHR3byBzdXJyb2dhdGUgY2hhcmFjdGVycyBhbmQgcmV0dXJuIGEgc2luZ2xlIFB5X1VDUzQgdmFsdWUuICovCiAjZGVmaW5lIFB5X1VOSUNPREVfSk9JTl9TVVJST0dBVEVTKGhpZ2gsIGxvdykgIFwKICAgICAoKCgoKFB5X1VDUzQpKGhpZ2gpICYgMHgwM0ZGKSA8PCAxMCkgfCAgICAgIFwKQEAgLTM0Myw2ICszNDMsOSBAQAogICAgICAgICAgICB0aGUgZGF0YSBwb2ludGVyIGlzIGZpbGxlZCBvdXQuIFRoZSBiaXQgaXMgcmVkdW5kYW50LCBhbmQgaGVscHMKICAgICAgICAgICAgdG8gbWluaW1pemUgdGhlIHRlc3QgaW4gUHlVbmljb2RlX0lTX1JFQURZKCkuICovCiAgICAgICAgIHVuc2lnbmVkIGludCByZWFkeToxOworICAgICAgICAvKiBQYWRkaW5nIHRvIGVuc3VyZSB0aGF0IFB5VW5pY29kZV9EQVRBKCkgaXMgYWx3YXlzIGFsaWduZWQgdG8KKyAgICAgICAgICAgNCBieXRlcyAoc2VlIGlzc3VlICMxOTUzNyBvbiBtNjhrKS4gKi8KKyAgICAgICAgdW5zaWduZWQgaW50IDoyNDsKICAgICB9IHN0YXRlOwogICAgIHdjaGFyX3QgKndzdHI7ICAgICAgICAgICAgICAvKiB3Y2hhcl90IHJlcHJlc2VudGF0aW9uIChudWxsLXRlcm1pbmF0ZWQpICovCiB9IFB5QVNDSUlPYmplY3Q7CkBAIC02MDIsNyArNjA1LDcgQEAKICAgICApOwogI2VuZGlmCiAKLS8qIEluaXRpYWxpemVzIHRoZSBjYW5vbmljYWwgc3RyaW5nIHJlcHJlc2VudGF0aW9uIGZyb20gYSB0aGUgZGVwcmVjYXRlZAorLyogSW5pdGlhbGl6ZXMgdGhlIGNhbm9uaWNhbCBzdHJpbmcgcmVwcmVzZW50YXRpb24gZnJvbSB0aGUgZGVwcmVjYXRlZAogICAgd3N0ci9QeV9VTklDT0RFIHJlcHJlc2VudGF0aW9uLiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gY29udmVydCBVbmljb2RlCiAgICBvYmplY3RzIHdoaWNoIHdlcmUgY3JlYXRlZCB1c2luZyB0aGUgb2xkIEFQSSB0byB0aGUgbmV3IGZsZXhpYmxlIGZvcm1hdAogICAgaW50cm9kdWNlZCB3aXRoIFBFUCAzOTMuCkBAIC04NDYsNyArODQ5LDcgQEAKIAogICAgQ29lcmNpb24gaXMgZG9uZSBpbiB0aGUgZm9sbG93aW5nIHdheToKIAotICAgMS4gYnl0ZXMsIGJ5dGVhcnJheSBhbmQgb3RoZXIgY2hhciBidWZmZXIgY29tcGF0aWJsZSBvYmplY3RzIGFyZSBkZWNvZGVkCisgICAxLiBieXRlcywgYnl0ZWFycmF5IGFuZCBvdGhlciBieXRlcy1saWtlIG9iamVjdHMgYXJlIGRlY29kZWQKICAgICAgIHVuZGVyIHRoZSBhc3N1bXB0aW9ucyB0aGF0IHRoZXkgY29udGFpbiBkYXRhIHVzaW5nIHRoZSBVVEYtOAogICAgICAgZW5jb2RpbmcuIERlY29kaW5nIGlzIGRvbmUgaW4gInN0cmljdCIgbW9kZS4KIApAQCAtODU5LDcgKzg2Miw3IEBACiAqLwogCiBQeUFQSV9GVU5DKFB5T2JqZWN0KikgUHlVbmljb2RlX0Zyb21FbmNvZGVkT2JqZWN0KAotICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICpvYmosICAgICAvKiBPYmplY3QgKi8KKyAgICBQeU9iamVjdCAqb2JqLCAgICAgICAgICAgICAgLyogT2JqZWN0ICovCiAgICAgY29uc3QgY2hhciAqZW5jb2RpbmcsICAgICAgIC8qIGVuY29kaW5nICovCiAgICAgY29uc3QgY2hhciAqZXJyb3JzICAgICAgICAgIC8qIGVycm9yIGhhbmRsaW5nICovCiAgICAgKTsKQEAgLTg3OCw3ICs4ODEsNyBAQAogKi8KIAogUHlBUElfRlVOQyhQeU9iamVjdCopIFB5VW5pY29kZV9Gcm9tT2JqZWN0KAotICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICpvYmogICAgICAvKiBPYmplY3QgKi8KKyAgICBQeU9iamVjdCAqb2JqICAgICAgLyogT2JqZWN0ICovCiAgICAgKTsKIAogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeVVuaWNvZGVfRnJvbUZvcm1hdFYoCkBAIC04OTgsMjIgKzkwMSwyOCBAQAogICAgIFB5X1VDUzQgbWF4Y2hhcjsKICAgICBQeV9zc2l6ZV90IHNpemU7CiAgICAgUHlfc3NpemVfdCBwb3M7Ci0gICAgLyogbWluaW11bSBsZW5ndGggb2YgdGhlIGJ1ZmZlciB3aGVuIG92ZXJhbGxvY2F0aW9uIGlzIGVuYWJsZWQsCi0gICAgICAgc2VlIF9QeVVuaWNvZGVXcml0ZXJfSW5pdCgpICovCisKKyAgICAvKiBtaW5pbXVtIG51bWJlciBvZiBhbGxvY2F0ZWQgY2hhcmFjdGVycyAoZGVmYXVsdDogMCkgKi8KICAgICBQeV9zc2l6ZV90IG1pbl9sZW5ndGg7CisKKyAgICAvKiBtaW5pbXVtIGNoYXJhY3RlciAoZGVmYXVsdDogMTI3LCBBU0NJSSkgKi8KKyAgICBQeV9VQ1M0IG1pbl9jaGFyOworCisgICAgLyogSWYgbm9uLXplcm8sIG92ZXJhbGxvY2F0ZSB0aGUgYnVmZmVyIGJ5IDI1JSAoZGVmYXVsdDogMCkuICovCiAgICAgdW5zaWduZWQgY2hhciBvdmVyYWxsb2NhdGU7CisKICAgICAvKiBJZiByZWFkb25seSBpcyAxLCBidWZmZXIgaXMgYSBzaGFyZWQgc3RyaW5nIChjYW5ub3QgYmUgbW9kaWZpZWQpCiAgICAgICAgYW5kIHNpemUgaXMgc2V0IHRvIDAuICovCiAgICAgdW5zaWduZWQgY2hhciByZWFkb25seTsKIH0gX1B5VW5pY29kZVdyaXRlciA7CiAKIC8qIEluaXRpYWxpemUgYSBVbmljb2RlIHdyaXRlci4KLQotICAgSWYgbWluX2xlbmd0aCBpcyBncmVhdGVyIHRoYW4gemVybywgX1B5VW5pY29kZVdyaXRlcl9QcmVwYXJlKCkKLSAgIG92ZXJhbGxvY2F0ZXMgdGhlIGJ1ZmZlciBhbmQgbWluX2xlbmd0aCBpcyB0aGUgbWluaW11bSBsZW5ndGggaW4gY2hhcmFjdGVycwotICAgb2YgdGhlIGJ1ZmZlci4gKi8KKyAqCisgKiBCeSBkZWZhdWx0LCB0aGUgbWluaW11bSBidWZmZXIgc2l6ZSBpcyAwIGNoYXJhY3RlciBhbmQgb3ZlcmFsbG9jYXRpb24gaXMKKyAqIGRpc2FibGVkLiBTZXQgbWluX2xlbmd0aCwgbWluX2NoYXIgYW5kIG92ZXJhbGxvY2F0ZSBhdHRyaWJ1dGVzIHRvIGNvbnRyb2wKKyAqIHRoZSBhbGxvY2F0aW9uIG9mIHRoZSBidWZmZXIuICovCiBQeUFQSV9GVU5DKHZvaWQpCi1fUHlVbmljb2RlV3JpdGVyX0luaXQoX1B5VW5pY29kZVdyaXRlciAqd3JpdGVyLCBQeV9zc2l6ZV90IG1pbl9sZW5ndGgpOworX1B5VW5pY29kZVdyaXRlcl9Jbml0KF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlcik7CiAKIC8qIFByZXBhcmUgdGhlIGJ1ZmZlciB0byB3cml0ZSAnbGVuZ3RoJyBjaGFyYWN0ZXJzCiAgICB3aXRoIHRoZSBzcGVjaWZpZWQgbWF4aW11bSBjaGFyYWN0ZXIuCkBAIC05MzMsMTIgKzk0Miw1MiBAQAogX1B5VW5pY29kZVdyaXRlcl9QcmVwYXJlSW50ZXJuYWwoX1B5VW5pY29kZVdyaXRlciAqd3JpdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBsZW5ndGgsIFB5X1VDUzQgbWF4Y2hhcik7CiAKKy8qIEFwcGVuZCBhIFVuaWNvZGUgY2hhcmFjdGVyLgorICAgUmV0dXJuIDAgb24gc3VjY2VzcywgcmFpc2UgYW4gZXhjZXB0aW9uIGFuZCByZXR1cm4gLTEgb24gZXJyb3IuICovCiBQeUFQSV9GVU5DKGludCkKLV9QeVVuaWNvZGVXcml0ZXJfV3JpdGVTdHIoX1B5VW5pY29kZVdyaXRlciAqd3JpdGVyLCBQeU9iamVjdCAqc3RyKTsKK19QeVVuaWNvZGVXcml0ZXJfV3JpdGVDaGFyKF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlciwKKyAgICBQeV9VQ1M0IGNoCisgICAgKTsKIAorLyogQXBwZW5kIGEgVW5pY29kZSBzdHJpbmcuCisgICBSZXR1cm4gMCBvbiBzdWNjZXNzLCByYWlzZSBhbiBleGNlcHRpb24gYW5kIHJldHVybiAtMSBvbiBlcnJvci4gKi8KK1B5QVBJX0ZVTkMoaW50KQorX1B5VW5pY29kZVdyaXRlcl9Xcml0ZVN0cihfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIsCisgICAgUHlPYmplY3QgKnN0ciAgICAgICAgICAgICAgIC8qIFVuaWNvZGUgc3RyaW5nICovCisgICAgKTsKKworLyogQXBwZW5kIGEgc3Vic3RyaW5nIG9mIGEgVW5pY29kZSBzdHJpbmcuCisgICBSZXR1cm4gMCBvbiBzdWNjZXNzLCByYWlzZSBhbiBleGNlcHRpb24gYW5kIHJldHVybiAtMSBvbiBlcnJvci4gKi8KK1B5QVBJX0ZVTkMoaW50KQorX1B5VW5pY29kZVdyaXRlcl9Xcml0ZVN1YnN0cmluZyhfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIsCisgICAgUHlPYmplY3QgKnN0ciwgICAgICAgICAgICAgIC8qIFVuaWNvZGUgc3RyaW5nICovCisgICAgUHlfc3NpemVfdCBzdGFydCwKKyAgICBQeV9zc2l6ZV90IGVuZAorICAgICk7CisKKy8qIEFwcGVuZCBhbiBBU0NJSS1lbmNvZGVkIGJ5dGUgc3RyaW5nLgorICAgUmV0dXJuIDAgb24gc3VjY2VzcywgcmFpc2UgYW4gZXhjZXB0aW9uIGFuZCByZXR1cm4gLTEgb24gZXJyb3IuICovCitQeUFQSV9GVU5DKGludCkKK19QeVVuaWNvZGVXcml0ZXJfV3JpdGVBU0NJSVN0cmluZyhfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIsCisgICAgY29uc3QgY2hhciAqc3RyLCAgICAgICAgICAgLyogQVNDSUktZW5jb2RlZCBieXRlIHN0cmluZyAqLworICAgIFB5X3NzaXplX3QgbGVuICAgICAgICAgICAgIC8qIG51bWJlciBvZiBieXRlcywgb3IgLTEgaWYgdW5rbm93biAqLworICAgICk7CisKKy8qIEFwcGVuZCBhIGxhdGluMS1lbmNvZGVkIGJ5dGUgc3RyaW5nLgorICAgUmV0dXJuIDAgb24gc3VjY2VzcywgcmFpc2UgYW4gZXhjZXB0aW9uIGFuZCByZXR1cm4gLTEgb24gZXJyb3IuICovCitQeUFQSV9GVU5DKGludCkKK19QeVVuaWNvZGVXcml0ZXJfV3JpdGVMYXRpbjFTdHJpbmcoX1B5VW5pY29kZVdyaXRlciAqd3JpdGVyLAorICAgIGNvbnN0IGNoYXIgKnN0ciwgICAgICAgICAgIC8qIGxhdGluMS1lbmNvZGVkIGJ5dGUgc3RyaW5nICovCisgICAgUHlfc3NpemVfdCBsZW4gICAgICAgICAgICAgLyogbGVuZ3RoIGluIGJ5dGVzICovCisgICAgKTsKKworLyogR2V0IHRoZSB2YWx1ZSBvZiB0aGUgd3JpdGVyIGFzIGFuIFVuaWNvZGUgc3RyaW5nLiBDbGVhciB0aGUKKyAgIGJ1ZmZlciBvZiB0aGUgd3JpdGVyLiBSYWlzZSBhbiBleGNlcHRpb24gYW5kIHJldHVybiBOVUxMCisgICBvbiBlcnJvci4gKi8KIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikKIF9QeVVuaWNvZGVXcml0ZXJfRmluaXNoKF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlcik7CiAKKy8qIERlYWxsb2NhdGUgbWVtb3J5IG9mIGEgd3JpdGVyIChjbGVhciBpdHMgaW50ZXJuYWwgYnVmZmVyKS4gKi8KIFB5QVBJX0ZVTkModm9pZCkKIF9QeVVuaWNvZGVXcml0ZXJfRGVhbGxvYyhfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIpOwogI2VuZGlmCkBAIC05NzcsNyArMTAyNiw3IEBACiAgICBUaGUgYnVmZmVyIGlzIGNvcGllZCBpbnRvIHRoZSBuZXcgb2JqZWN0LiAqLwogCiBQeUFQSV9GVU5DKFB5T2JqZWN0KikgUHlVbmljb2RlX0Zyb21XaWRlQ2hhcigKLSAgICByZWdpc3RlciBjb25zdCB3Y2hhcl90ICp3LCAgLyogd2NoYXJfdCBidWZmZXIgKi8KKyAgICBjb25zdCB3Y2hhcl90ICp3LCAgICAgICAgICAgLyogd2NoYXJfdCBidWZmZXIgKi8KICAgICBQeV9zc2l6ZV90IHNpemUgICAgICAgICAgICAgLyogc2l6ZSBvZiBidWZmZXIgKi8KICAgICApOwogCkBAIC05OTUsNyArMTA0NCw3IEBACiAKIFB5QVBJX0ZVTkMoUHlfc3NpemVfdCkgUHlVbmljb2RlX0FzV2lkZUNoYXIoCiAgICAgUHlPYmplY3QgKnVuaWNvZGUsICAgICAgICAgIC8qIFVuaWNvZGUgb2JqZWN0ICovCi0gICAgcmVnaXN0ZXIgd2NoYXJfdCAqdywgICAgICAgIC8qIHdjaGFyX3QgYnVmZmVyICovCisgICAgd2NoYXJfdCAqdywgICAgICAgICAgICAgICAgIC8qIHdjaGFyX3QgYnVmZmVyICovCiAgICAgUHlfc3NpemVfdCBzaXplICAgICAgICAgICAgIC8qIHNpemUgb2YgYnVmZmVyICovCiAgICAgKTsKIApAQCAtMTAwMyw3ICsxMDUyLDcgQEAKICAgIGFsd2F5cyBlbmRzIHdpdGggYSBudWwgY2hhcmFjdGVyLiBJZiBzaXplIGlzIG5vdCBOVUxMLCB3cml0ZSB0aGUgbnVtYmVyIG9mCiAgICB3aWRlIGNoYXJhY3RlcnMgKGV4Y2x1ZGluZyB0aGUgbnVsbCBjaGFyYWN0ZXIpIGludG8gKnNpemUuCiAKLSAgIFJldHVybnMgYSBidWZmZXIgYWxsb2NhdGVkIGJ5IFB5TWVtX0FsbG9jKCkgKHVzZSBQeU1lbV9GcmVlKCkgdG8gZnJlZSBpdCkKKyAgIFJldHVybnMgYSBidWZmZXIgYWxsb2NhdGVkIGJ5IFB5TWVtX01hbGxvYygpICh1c2UgUHlNZW1fRnJlZSgpIHRvIGZyZWUgaXQpCiAgICBvbiBzdWNjZXNzLiBPbiBlcnJvciwgcmV0dXJucyBOVUxMLCAqc2l6ZSBpcyB1bmRlZmluZWQgYW5kIHJhaXNlcyBhCiAgICBNZW1vcnlFcnJvci4gKi8KIApAQCAtMTcyNiw3ICsxNzc1LDcgQEAKIC8qIEVuY29kZSBhIFVuaWNvZGUgb2JqZWN0IHRvIHRoZSBjdXJyZW50IGxvY2FsZSBlbmNvZGluZy4gVGhlIGVuY29kZXIgaXMKICAgIHN0cmljdCBpcyAqc3Vycm9nYXRlZXNjYXBlKiBpcyBlcXVhbCB0byB6ZXJvLCBvdGhlcndpc2UgdGhlCiAgICAic3Vycm9nYXRlZXNjYXBlIiBlcnJvciBoYW5kbGVyIGlzIHVzZWQuIFJldHVybiBhIGJ5dGVzIG9iamVjdC4gVGhlIHN0cmluZwotICAgY2Fubm90IGNvbnRhaW4gZW1iZWRkZWQgbnVsbCBjaGFyYWN0ZXJzLi4gKi8KKyAgIGNhbm5vdCBjb250YWluIGVtYmVkZGVkIG51bGwgY2hhcmFjdGVycy4gKi8KIAogUHlBUElfRlVOQyhQeU9iamVjdCopIFB5VW5pY29kZV9FbmNvZGVMb2NhbGUoCiAgICAgUHlPYmplY3QgKnVuaWNvZGUsCkBAIC0xOTUwLDEzICsxOTk5LDIxIEBACiAgICAgKTsKIAogLyogQ29tcGFyZSB0d28gc3RyaW5ncyBhbmQgcmV0dXJuIC0xLCAwLCAxIGZvciBsZXNzIHRoYW4sIGVxdWFsLAotICAgZ3JlYXRlciB0aGFuIHJlc3AuICovCisgICBncmVhdGVyIHRoYW4gcmVzcC4KKyAgIFJhaXNlIGFuIGV4Y2VwdGlvbiBhbmQgcmV0dXJuIC0xIG9uIGVycm9yLiAqLwogCiBQeUFQSV9GVU5DKGludCkgUHlVbmljb2RlX0NvbXBhcmUoCiAgICAgUHlPYmplY3QgKmxlZnQsICAgICAgICAgICAgIC8qIExlZnQgc3RyaW5nICovCiAgICAgUHlPYmplY3QgKnJpZ2h0ICAgICAgICAgICAgIC8qIFJpZ2h0IHN0cmluZyAqLwogICAgICk7CiAKKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKK1B5QVBJX0ZVTkMoaW50KSBfUHlVbmljb2RlX0NvbXBhcmVXaXRoSWQoCisgICAgUHlPYmplY3QgKmxlZnQsICAgICAgICAgICAgIC8qIExlZnQgc3RyaW5nICovCisgICAgX1B5X0lkZW50aWZpZXIgKnJpZ2h0ICAgICAgIC8qIFJpZ2h0IGlkZW50aWZpZXIgKi8KKyAgICApOworI2VuZGlmCisKIFB5QVBJX0ZVTkMoaW50KSBQeVVuaWNvZGVfQ29tcGFyZVdpdGhBU0NJSVN0cmluZygKICAgICBQeU9iamVjdCAqbGVmdCwKICAgICBjb25zdCBjaGFyICpyaWdodCAgICAgICAgICAgLyogQVNDSUktZW5jb2RlZCBzdHJpbmcgKi8KQEAgLTE5ODQsNyArMjA0MSw3IEBACiAgICAgaW50IG9wICAgICAgICAgICAgICAgICAgICAgIC8qIE9wZXJhdGlvbjogUHlfRVEsIFB5X05FLCBQeV9HVCwgZXRjLiAqLwogICAgICk7CiAKLS8qIEFwcGx5IGEgYXJndW1lbnQgdHVwbGUgb3IgZGljdGlvbmFyeSB0byBhIGZvcm1hdCBzdHJpbmcgYW5kIHJldHVybgorLyogQXBwbHkgYW4gYXJndW1lbnQgdHVwbGUgb3IgZGljdGlvbmFyeSB0byBhIGZvcm1hdCBzdHJpbmcgYW5kIHJldHVybgogICAgdGhlIHJlc3VsdGluZyBVbmljb2RlIHN0cmluZy4gKi8KIAogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeVVuaWNvZGVfRm9ybWF0KApkaWZmIC0tZ2l0IGEvSW5jbHVkZS93YXJuaW5ncy5oIGIvSW5jbHVkZS93YXJuaW5ncy5oCmluZGV4IGI3ZGI2ODEuLmVmZmI5ZmFkIDEwMDY0NAotLS0gYS9JbmNsdWRlL3dhcm5pbmdzLmgKKysrIGIvSW5jbHVkZS93YXJuaW5ncy5oCkBAIC0xNyw2ICsxNywxNSBAQAogICAgIFB5X3NzaXplX3Qgc3RhY2tfbGV2ZWwsCiAgICAgY29uc3QgY2hhciAqZm9ybWF0LCAgICAgICAgIC8qIEFTQ0lJLWVuY29kZWQgc3RyaW5nICAqLwogICAgIC4uLik7CisjaWZuZGVmIFB5X0xJTUlURURfQVBJCitQeUFQSV9GVU5DKGludCkgUHlFcnJfV2FybkV4cGxpY2l0T2JqZWN0KAorICAgIFB5T2JqZWN0ICpjYXRlZ29yeSwKKyAgICBQeU9iamVjdCAqbWVzc2FnZSwKKyAgICBQeU9iamVjdCAqZmlsZW5hbWUsCisgICAgaW50IGxpbmVubywKKyAgICBQeU9iamVjdCAqbW9kdWxlLAorICAgIFB5T2JqZWN0ICpyZWdpc3RyeSk7CisjZW5kaWYKIFB5QVBJX0ZVTkMoaW50KSBQeUVycl9XYXJuRXhwbGljaXQoCiAgICAgUHlPYmplY3QgKmNhdGVnb3J5LAogICAgIGNvbnN0IGNoYXIgKm1lc3NhZ2UsICAgICAgICAvKiBVVEYtOCBlbmNvZGVkIHN0cmluZyAqLwpAQCAtMjUsNiArMzQsMTQgQEAKICAgICBjb25zdCBjaGFyICptb2R1bGUsICAgICAgICAgLyogVVRGLTggZW5jb2RlZCBzdHJpbmcgKi8KICAgICBQeU9iamVjdCAqcmVnaXN0cnkpOwogCisjaWZuZGVmIFB5X0xJTUlURURfQVBJCitQeUFQSV9GVU5DKGludCkKK1B5RXJyX1dhcm5FeHBsaWNpdEZvcm1hdChQeU9iamVjdCAqY2F0ZWdvcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBsaW5lbm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbW9kdWxlLCBQeU9iamVjdCAqcmVnaXN0cnksCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pOworI2VuZGlmCisKIC8qIERFUFJFQ0FURUQ6IFVzZSBQeUVycl9XYXJuRXgoKSBpbnN0ZWFkLiAqLwogI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQogI2RlZmluZSBQeUVycl9XYXJuKGNhdGVnb3J5LCBtc2cpIFB5RXJyX1dhcm5FeChjYXRlZ29yeSwgbXNnLCAxKQpkaWZmIC0tZ2l0IGEvTGliL19ib290bG9jYWxlLnB5IGIvTGliL19ib290bG9jYWxlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiY2NhYzEKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvX2Jvb3Rsb2NhbGUucHkKQEAgLTAsMCArMSwzNCBAQAorIiIiQSBtaW5pbWFsIHN1YnNldCBvZiB0aGUgbG9jYWxlIG1vZHVsZSB1c2VkIGF0IGludGVycHJldGVyIHN0YXJ0dXAKKyhpbXBvcnRlZCBieSB0aGUgX2lvIG1vZHVsZSksIGluIG9yZGVyIHRvIHJlZHVjZSBzdGFydHVwIHRpbWUuCisKK0Rvbid0IGltcG9ydCBkaXJlY3RseSBmcm9tIHRoaXJkLXBhcnR5IGNvZGU7IHVzZSB0aGUgYGxvY2FsZWAgbW9kdWxlIGluc3RlYWQhCisiIiIKKworaW1wb3J0IHN5cworaW1wb3J0IF9sb2NhbGUKKworaWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoIndpbiIpOgorICAgIGRlZiBnZXRwcmVmZXJyZWRlbmNvZGluZyhkb19zZXRsb2NhbGU9VHJ1ZSk6CisgICAgICAgIHJldHVybiBfbG9jYWxlLl9nZXRkZWZhdWx0bG9jYWxlKClbMV0KK2Vsc2U6CisgICAgdHJ5OgorICAgICAgICBfbG9jYWxlLkNPREVTRVQKKyAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgIGRlZiBnZXRwcmVmZXJyZWRlbmNvZGluZyhkb19zZXRsb2NhbGU9VHJ1ZSk6CisgICAgICAgICAgICAjIFRoaXMgcGF0aCBmb3IgbGVnYWN5IHN5c3RlbXMgbmVlZHMgdGhlIG1vcmUgY29tcGxleAorICAgICAgICAgICAgIyBnZXRkZWZhdWx0bG9jYWxlKCkgZnVuY3Rpb24sIGltcG9ydCB0aGUgZnVsbCBsb2NhbGUgbW9kdWxlLgorICAgICAgICAgICAgaW1wb3J0IGxvY2FsZQorICAgICAgICAgICAgcmV0dXJuIGxvY2FsZS5nZXRwcmVmZXJyZWRlbmNvZGluZyhkb19zZXRsb2NhbGUpCisgICAgZWxzZToKKyAgICAgICAgZGVmIGdldHByZWZlcnJlZGVuY29kaW5nKGRvX3NldGxvY2FsZT1UcnVlKToKKyAgICAgICAgICAgIGFzc2VydCBub3QgZG9fc2V0bG9jYWxlCisgICAgICAgICAgICByZXN1bHQgPSBfbG9jYWxlLm5sX2xhbmdpbmZvKF9sb2NhbGUuQ09ERVNFVCkKKyAgICAgICAgICAgIGlmIG5vdCByZXN1bHQgYW5kIHN5cy5wbGF0Zm9ybSA9PSAnZGFyd2luJzoKKyAgICAgICAgICAgICAgICAjIG5sX2xhbmdpbmZvIGNhbiByZXR1cm4gYW4gZW1wdHkgc3RyaW5nCisgICAgICAgICAgICAgICAgIyB3aGVuIHRoZSBzZXR0aW5nIGhhcyBhbiBpbnZhbGlkIHZhbHVlLgorICAgICAgICAgICAgICAgICMgRGVmYXVsdCB0byBVVEYtOCBpbiB0aGF0IGNhc2UgYmVjYXVzZQorICAgICAgICAgICAgICAgICMgVVRGLTggaXMgdGhlIGRlZmF1bHQgY2hhcnNldCBvbiBPU1ggYW5kCisgICAgICAgICAgICAgICAgIyByZXR1cm5pbmcgbm90aGluZyB3aWxsIGNyYXNoIHRoZQorICAgICAgICAgICAgICAgICMgaW50ZXJwcmV0ZXIuCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gJ1VURi04JworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdApkaWZmIC0tZ2l0IGEvTGliL19jb2xsZWN0aW9uc19hYmMucHkgYi9MaWIvX2NvbGxlY3Rpb25zX2FiYy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2I1OWFiCi0tLSAvZGV2L251bGwKKysrIGIvTGliL19jb2xsZWN0aW9uc19hYmMucHkKQEAgLTAsMCArMSw3NDggQEAKKyMgQ29weXJpZ2h0IDIwMDcgR29vZ2xlLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjIExpY2Vuc2VkIHRvIFBTRiB1bmRlciBhIENvbnRyaWJ1dG9yIEFncmVlbWVudC4KKworIiIiQWJzdHJhY3QgQmFzZSBDbGFzc2VzIChBQkNzKSBmb3IgY29sbGVjdGlvbnMsIGFjY29yZGluZyB0byBQRVAgMzExOS4KKworVW5pdCB0ZXN0cyBhcmUgaW4gdGVzdF9jb2xsZWN0aW9ucy4KKyIiIgorCitmcm9tIGFiYyBpbXBvcnQgQUJDTWV0YSwgYWJzdHJhY3RtZXRob2QKK2ltcG9ydCBzeXMKKworX19hbGxfXyA9IFsiSGFzaGFibGUiLCAiSXRlcmFibGUiLCAiSXRlcmF0b3IiLAorICAgICAgICAgICAiU2l6ZWQiLCAiQ29udGFpbmVyIiwgIkNhbGxhYmxlIiwKKyAgICAgICAgICAgIlNldCIsICJNdXRhYmxlU2V0IiwKKyAgICAgICAgICAgIk1hcHBpbmciLCAiTXV0YWJsZU1hcHBpbmciLAorICAgICAgICAgICAiTWFwcGluZ1ZpZXciLCAiS2V5c1ZpZXciLCAiSXRlbXNWaWV3IiwgIlZhbHVlc1ZpZXciLAorICAgICAgICAgICAiU2VxdWVuY2UiLCAiTXV0YWJsZVNlcXVlbmNlIiwKKyAgICAgICAgICAgIkJ5dGVTdHJpbmciLAorICAgICAgICAgICBdCisKKyMgVGhpcyBtb2R1bGUgaGFzIGJlZW4gcmVuYW1lZCBmcm9tIGNvbGxlY3Rpb25zLmFiYyB0byBfY29sbGVjdGlvbnNfYWJjIHRvCisjIHNwZWVkIHVwIGludGVycHJldGVyIHN0YXJ0dXAuIFNvbWUgb2YgdGhlIHR5cGVzIHN1Y2ggYXMgTXV0YWJsZU1hcHBpbmcgYXJlCisjIHJlcXVpcmVkIGVhcmx5IGJ1dCBjb2xsZWN0aW9ucyBtb2R1bGUgaW1wb3J0cyBhIGxvdCBvZiBvdGhlciBtb2R1bGVzLgorIyBTZWUgaXNzdWUgIzE5MjE4CitfX25hbWVfXyA9ICJjb2xsZWN0aW9ucy5hYmMiCisKKyMgUHJpdmF0ZSBsaXN0IG9mIHR5cGVzIHRoYXQgd2Ugd2FudCB0byByZWdpc3RlciB3aXRoIHRoZSB2YXJpb3VzIEFCQ3MKKyMgc28gdGhhdCB0aGV5IHdpbGwgcGFzcyB0ZXN0cyBsaWtlOgorIyAgICAgICBpdCA9IGl0ZXIoc29tZWJ5dGVhcnJheSkKKyMgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoaXQsIEl0ZXJhYmxlKQorIyBOb3RlOiAgaW4gb3RoZXIgaW1wbGVtZW50YXRpb25zLCB0aGVzZSB0eXBlcyBtYW55IG5vdCBiZSBkaXN0aW5jdAorIyBhbmQgdGhleSBtYWtlIGhhdmUgdGhlaXIgb3duIGltcGxlbWVudGF0aW9uIHNwZWNpZmljIHR5cGVzIHRoYXQKKyMgYXJlIG5vdCBpbmNsdWRlZCBvbiB0aGlzIGxpc3QuCitieXRlc19pdGVyYXRvciA9IHR5cGUoaXRlcihiJycpKQorYnl0ZWFycmF5X2l0ZXJhdG9yID0gdHlwZShpdGVyKGJ5dGVhcnJheSgpKSkKKyNjYWxsYWJsZV9pdGVyYXRvciA9ID8/PworZGljdF9rZXlpdGVyYXRvciA9IHR5cGUoaXRlcih7fS5rZXlzKCkpKQorZGljdF92YWx1ZWl0ZXJhdG9yID0gdHlwZShpdGVyKHt9LnZhbHVlcygpKSkKK2RpY3RfaXRlbWl0ZXJhdG9yID0gdHlwZShpdGVyKHt9Lml0ZW1zKCkpKQorbGlzdF9pdGVyYXRvciA9IHR5cGUoaXRlcihbXSkpCitsaXN0X3JldmVyc2VpdGVyYXRvciA9IHR5cGUoaXRlcihyZXZlcnNlZChbXSkpKQorcmFuZ2VfaXRlcmF0b3IgPSB0eXBlKGl0ZXIocmFuZ2UoMCkpKQorc2V0X2l0ZXJhdG9yID0gdHlwZShpdGVyKHNldCgpKSkKK3N0cl9pdGVyYXRvciA9IHR5cGUoaXRlcigiIikpCit0dXBsZV9pdGVyYXRvciA9IHR5cGUoaXRlcigoKSkpCit6aXBfaXRlcmF0b3IgPSB0eXBlKGl0ZXIoemlwKCkpKQorIyMgdmlld3MgIyMKK2RpY3Rfa2V5cyA9IHR5cGUoe30ua2V5cygpKQorZGljdF92YWx1ZXMgPSB0eXBlKHt9LnZhbHVlcygpKQorZGljdF9pdGVtcyA9IHR5cGUoe30uaXRlbXMoKSkKKyMjIG1pc2MgIyMKK21hcHBpbmdwcm94eSA9IHR5cGUodHlwZS5fX2RpY3RfXykKKworCisjIyMgT05FLVRSSUNLIFBPTklFUyAjIyMKKworY2xhc3MgSGFzaGFibGUobWV0YWNsYXNzPUFCQ01ldGEpOgorCisgICAgX19zbG90c19fID0gKCkKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIDAKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfX3N1YmNsYXNzaG9va19fKGNscywgQyk6CisgICAgICAgIGlmIGNscyBpcyBIYXNoYWJsZToKKyAgICAgICAgICAgIGZvciBCIGluIEMuX19tcm9fXzoKKyAgICAgICAgICAgICAgICBpZiAiX19oYXNoX18iIGluIEIuX19kaWN0X186CisgICAgICAgICAgICAgICAgICAgIGlmIEIuX19kaWN0X19bIl9faGFzaF9fIl06CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKworCitjbGFzcyBJdGVyYWJsZShtZXRhY2xhc3M9QUJDTWV0YSk6CisKKyAgICBfX3Nsb3RzX18gPSAoKQorCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICB3aGlsZSBGYWxzZToKKyAgICAgICAgICAgIHlpZWxkIE5vbmUKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfX3N1YmNsYXNzaG9va19fKGNscywgQyk6CisgICAgICAgIGlmIGNscyBpcyBJdGVyYWJsZToKKyAgICAgICAgICAgIGlmIGFueSgiX19pdGVyX18iIGluIEIuX19kaWN0X18gZm9yIEIgaW4gQy5fX21yb19fKToKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKworCitjbGFzcyBJdGVyYXRvcihJdGVyYWJsZSk6CisKKyAgICBfX3Nsb3RzX18gPSAoKQorCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIF9fbmV4dF9fKHNlbGYpOgorICAgICAgICAnUmV0dXJuIHRoZSBuZXh0IGl0ZW0gZnJvbSB0aGUgaXRlcmF0b3IuIFdoZW4gZXhoYXVzdGVkLCByYWlzZSBTdG9wSXRlcmF0aW9uJworICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uCisKKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX19zdWJjbGFzc2hvb2tfXyhjbHMsIEMpOgorICAgICAgICBpZiBjbHMgaXMgSXRlcmF0b3I6CisgICAgICAgICAgICBpZiAoYW55KCJfX25leHRfXyIgaW4gQi5fX2RpY3RfXyBmb3IgQiBpbiBDLl9fbXJvX18pIGFuZAorICAgICAgICAgICAgICAgIGFueSgiX19pdGVyX18iIGluIEIuX19kaWN0X18gZm9yIEIgaW4gQy5fX21yb19fKSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisKK0l0ZXJhdG9yLnJlZ2lzdGVyKGJ5dGVzX2l0ZXJhdG9yKQorSXRlcmF0b3IucmVnaXN0ZXIoYnl0ZWFycmF5X2l0ZXJhdG9yKQorI0l0ZXJhdG9yLnJlZ2lzdGVyKGNhbGxhYmxlX2l0ZXJhdG9yKQorSXRlcmF0b3IucmVnaXN0ZXIoZGljdF9rZXlpdGVyYXRvcikKK0l0ZXJhdG9yLnJlZ2lzdGVyKGRpY3RfdmFsdWVpdGVyYXRvcikKK0l0ZXJhdG9yLnJlZ2lzdGVyKGRpY3RfaXRlbWl0ZXJhdG9yKQorSXRlcmF0b3IucmVnaXN0ZXIobGlzdF9pdGVyYXRvcikKK0l0ZXJhdG9yLnJlZ2lzdGVyKGxpc3RfcmV2ZXJzZWl0ZXJhdG9yKQorSXRlcmF0b3IucmVnaXN0ZXIocmFuZ2VfaXRlcmF0b3IpCitJdGVyYXRvci5yZWdpc3RlcihzZXRfaXRlcmF0b3IpCitJdGVyYXRvci5yZWdpc3RlcihzdHJfaXRlcmF0b3IpCitJdGVyYXRvci5yZWdpc3Rlcih0dXBsZV9pdGVyYXRvcikKK0l0ZXJhdG9yLnJlZ2lzdGVyKHppcF9pdGVyYXRvcikKKworY2xhc3MgU2l6ZWQobWV0YWNsYXNzPUFCQ01ldGEpOgorCisgICAgX19zbG90c19fID0gKCkKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gMAorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9fc3ViY2xhc3Nob29rX18oY2xzLCBDKToKKyAgICAgICAgaWYgY2xzIGlzIFNpemVkOgorICAgICAgICAgICAgaWYgYW55KCJfX2xlbl9fIiBpbiBCLl9fZGljdF9fIGZvciBCIGluIEMuX19tcm9fXyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisKKworY2xhc3MgQ29udGFpbmVyKG1ldGFjbGFzcz1BQkNNZXRhKToKKworICAgIF9fc2xvdHNfXyA9ICgpCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgX19jb250YWluc19fKHNlbGYsIHgpOgorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfX3N1YmNsYXNzaG9va19fKGNscywgQyk6CisgICAgICAgIGlmIGNscyBpcyBDb250YWluZXI6CisgICAgICAgICAgICBpZiBhbnkoIl9fY29udGFpbnNfXyIgaW4gQi5fX2RpY3RfXyBmb3IgQiBpbiBDLl9fbXJvX18pOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorCisKK2NsYXNzIENhbGxhYmxlKG1ldGFjbGFzcz1BQkNNZXRhKToKKworICAgIF9fc2xvdHNfXyA9ICgpCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgKmFyZ3MsICoqa3dkcyk6CisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9fc3ViY2xhc3Nob29rX18oY2xzLCBDKToKKyAgICAgICAgaWYgY2xzIGlzIENhbGxhYmxlOgorICAgICAgICAgICAgaWYgYW55KCJfX2NhbGxfXyIgaW4gQi5fX2RpY3RfXyBmb3IgQiBpbiBDLl9fbXJvX18pOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorCisKKyMjIyBTRVRTICMjIworCisKK2NsYXNzIFNldChTaXplZCwgSXRlcmFibGUsIENvbnRhaW5lcik6CisKKyAgICAiIiJBIHNldCBpcyBhIGZpbml0ZSwgaXRlcmFibGUgY29udGFpbmVyLgorCisgICAgVGhpcyBjbGFzcyBwcm92aWRlcyBjb25jcmV0ZSBnZW5lcmljIGltcGxlbWVudGF0aW9ucyBvZiBhbGwKKyAgICBtZXRob2RzIGV4Y2VwdCBmb3IgX19jb250YWluc19fLCBfX2l0ZXJfXyBhbmQgX19sZW5fXy4KKworICAgIFRvIG92ZXJyaWRlIHRoZSBjb21wYXJpc29ucyAocHJlc3VtYWJseSBmb3Igc3BlZWQsIGFzIHRoZQorICAgIHNlbWFudGljcyBhcmUgZml4ZWQpLCByZWRlZmluZSBfX2xlX18gYW5kIF9fZ2VfXywKKyAgICB0aGVuIHRoZSBvdGhlciBvcGVyYXRpb25zIHdpbGwgYXV0b21hdGljYWxseSBmb2xsb3cgc3VpdC4KKyAgICAiIiIKKworICAgIF9fc2xvdHNfXyA9ICgpCisKKyAgICBkZWYgX19sZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIFNldCk6CisgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICAgICAgaWYgbGVuKHNlbGYpID4gbGVuKG90aGVyKToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBmb3IgZWxlbSBpbiBzZWxmOgorICAgICAgICAgICAgaWYgZWxlbSBub3QgaW4gb3RoZXI6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgX19sdF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIFNldCk6CisgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICAgICAgcmV0dXJuIGxlbihzZWxmKSA8IGxlbihvdGhlcikgYW5kIHNlbGYuX19sZV9fKG90aGVyKQorCisgICAgZGVmIF9fZ3RfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBTZXQpOgorICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgICAgIHJldHVybiBsZW4oc2VsZikgPiBsZW4ob3RoZXIpIGFuZCBzZWxmLl9fZ2VfXyhvdGhlcikKKworICAgIGRlZiBfX2dlX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgU2V0KToKKyAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgICAgICBpZiBsZW4oc2VsZikgPCBsZW4ob3RoZXIpOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGZvciBlbGVtIGluIG90aGVyOgorICAgICAgICAgICAgaWYgZWxlbSBub3QgaW4gc2VsZjoKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgU2V0KToKKyAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgICAgICByZXR1cm4gbGVuKHNlbGYpID09IGxlbihvdGhlcikgYW5kIHNlbGYuX19sZV9fKG90aGVyKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9mcm9tX2l0ZXJhYmxlKGNscywgaXQpOgorICAgICAgICAnJydDb25zdHJ1Y3QgYW4gaW5zdGFuY2Ugb2YgdGhlIGNsYXNzIGZyb20gYW55IGl0ZXJhYmxlIGlucHV0LgorCisgICAgICAgIE11c3Qgb3ZlcnJpZGUgdGhpcyBtZXRob2QgaWYgdGhlIGNsYXNzIGNvbnN0cnVjdG9yIHNpZ25hdHVyZQorICAgICAgICBkb2VzIG5vdCBhY2NlcHQgYW4gaXRlcmFibGUgZm9yIGFuIGlucHV0LgorICAgICAgICAnJycKKyAgICAgICAgcmV0dXJuIGNscyhpdCkKKworICAgIGRlZiBfX2FuZF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIEl0ZXJhYmxlKToKKyAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgICAgICByZXR1cm4gc2VsZi5fZnJvbV9pdGVyYWJsZSh2YWx1ZSBmb3IgdmFsdWUgaW4gb3RoZXIgaWYgdmFsdWUgaW4gc2VsZikKKworICAgIF9fcmFuZF9fID0gX19hbmRfXworCisgICAgZGVmIGlzZGlzam9pbnQoc2VsZiwgb3RoZXIpOgorICAgICAgICAnUmV0dXJuIFRydWUgaWYgdHdvIHNldHMgaGF2ZSBhIG51bGwgaW50ZXJzZWN0aW9uLicKKyAgICAgICAgZm9yIHZhbHVlIGluIG90aGVyOgorICAgICAgICAgICAgaWYgdmFsdWUgaW4gc2VsZjoKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBfX29yX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgSXRlcmFibGUpOgorICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgICAgIGNoYWluID0gKGUgZm9yIHMgaW4gKHNlbGYsIG90aGVyKSBmb3IgZSBpbiBzKQorICAgICAgICByZXR1cm4gc2VsZi5fZnJvbV9pdGVyYWJsZShjaGFpbikKKworICAgIF9fcm9yX18gPSBfX29yX18KKworICAgIGRlZiBfX3N1Yl9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIFNldCk6CisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgSXRlcmFibGUpOgorICAgICAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgICAgICAgICAgb3RoZXIgPSBzZWxmLl9mcm9tX2l0ZXJhYmxlKG90aGVyKQorICAgICAgICByZXR1cm4gc2VsZi5fZnJvbV9pdGVyYWJsZSh2YWx1ZSBmb3IgdmFsdWUgaW4gc2VsZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB2YWx1ZSBub3QgaW4gb3RoZXIpCisKKyAgICBkZWYgX19yc3ViX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgU2V0KToKKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBJdGVyYWJsZSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgICAgICAgICBvdGhlciA9IHNlbGYuX2Zyb21faXRlcmFibGUob3RoZXIpCisgICAgICAgIHJldHVybiBzZWxmLl9mcm9tX2l0ZXJhYmxlKHZhbHVlIGZvciB2YWx1ZSBpbiBvdGhlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB2YWx1ZSBub3QgaW4gc2VsZikKKworICAgIGRlZiBfX3hvcl9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIFNldCk6CisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgSXRlcmFibGUpOgorICAgICAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgICAgICAgICAgb3RoZXIgPSBzZWxmLl9mcm9tX2l0ZXJhYmxlKG90aGVyKQorICAgICAgICByZXR1cm4gKHNlbGYgLSBvdGhlcikgfCAob3RoZXIgLSBzZWxmKQorCisgICAgX19yeG9yX18gPSBfX3hvcl9fCisKKyAgICBkZWYgX2hhc2goc2VsZik6CisgICAgICAgICIiIkNvbXB1dGUgdGhlIGhhc2ggdmFsdWUgb2YgYSBzZXQuCisKKyAgICAgICAgTm90ZSB0aGF0IHdlIGRvbid0IGRlZmluZSBfX2hhc2hfXzogbm90IGFsbCBzZXRzIGFyZSBoYXNoYWJsZS4KKyAgICAgICAgQnV0IGlmIHlvdSBkZWZpbmUgYSBoYXNoYWJsZSBzZXQgdHlwZSwgaXRzIF9faGFzaF9fIHNob3VsZAorICAgICAgICBjYWxsIHRoaXMgZnVuY3Rpb24uCisKKyAgICAgICAgVGhpcyBtdXN0IGJlIGNvbXBhdGlibGUgX19lcV9fLgorCisgICAgICAgIEFsbCBzZXRzIG91Z2h0IHRvIGNvbXBhcmUgZXF1YWwgaWYgdGhleSBjb250YWluIHRoZSBzYW1lCisgICAgICAgIGVsZW1lbnRzLCByZWdhcmRsZXNzIG9mIGhvdyB0aGV5IGFyZSBpbXBsZW1lbnRlZCwgYW5kCisgICAgICAgIHJlZ2FyZGxlc3Mgb2YgdGhlIG9yZGVyIG9mIHRoZSBlbGVtZW50czsgc28gdGhlcmUncyBub3QgbXVjaAorICAgICAgICBmcmVlZG9tIGZvciBfX2VxX18gb3IgX19oYXNoX18uICBXZSBtYXRjaCB0aGUgYWxnb3JpdGhtIHVzZWQKKyAgICAgICAgYnkgdGhlIGJ1aWx0LWluIGZyb3plbnNldCB0eXBlLgorICAgICAgICAiIiIKKyAgICAgICAgTUFYID0gc3lzLm1heHNpemUKKyAgICAgICAgTUFTSyA9IDIgKiBNQVggKyAxCisgICAgICAgIG4gPSBsZW4oc2VsZikKKyAgICAgICAgaCA9IDE5Mjc4NjgyMzcgKiAobiArIDEpCisgICAgICAgIGggJj0gTUFTSworICAgICAgICBmb3IgeCBpbiBzZWxmOgorICAgICAgICAgICAgaHggPSBoYXNoKHgpCisgICAgICAgICAgICBoIF49IChoeCBeIChoeCA8PCAxNikgXiA4OTg2OTc0NykgICogMzY0NDc5ODE2NworICAgICAgICAgICAgaCAmPSBNQVNLCisgICAgICAgIGggPSBoICogNjkwNjkgKyA5MDcxMzM5MjMKKyAgICAgICAgaCAmPSBNQVNLCisgICAgICAgIGlmIGggPiBNQVg6CisgICAgICAgICAgICBoIC09IE1BU0sgKyAxCisgICAgICAgIGlmIGggPT0gLTE6CisgICAgICAgICAgICBoID0gNTkwOTIzNzEzCisgICAgICAgIHJldHVybiBoCisKK1NldC5yZWdpc3Rlcihmcm96ZW5zZXQpCisKKworY2xhc3MgTXV0YWJsZVNldChTZXQpOgorICAgICIiIkEgbXV0YWJsZSBzZXQgaXMgYSBmaW5pdGUsIGl0ZXJhYmxlIGNvbnRhaW5lci4KKworICAgIFRoaXMgY2xhc3MgcHJvdmlkZXMgY29uY3JldGUgZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbnMgb2YgYWxsCisgICAgbWV0aG9kcyBleGNlcHQgZm9yIF9fY29udGFpbnNfXywgX19pdGVyX18sIF9fbGVuX18sCisgICAgYWRkKCksIGFuZCBkaXNjYXJkKCkuCisKKyAgICBUbyBvdmVycmlkZSB0aGUgY29tcGFyaXNvbnMgKHByZXN1bWFibHkgZm9yIHNwZWVkLCBhcyB0aGUKKyAgICBzZW1hbnRpY3MgYXJlIGZpeGVkKSwgYWxsIHlvdSBoYXZlIHRvIGRvIGlzIHJlZGVmaW5lIF9fbGVfXyBhbmQKKyAgICB0aGVuIHRoZSBvdGhlciBvcGVyYXRpb25zIHdpbGwgYXV0b21hdGljYWxseSBmb2xsb3cgc3VpdC4KKyAgICAiIiIKKworICAgIF9fc2xvdHNfXyA9ICgpCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgYWRkKHNlbGYsIHZhbHVlKToKKyAgICAgICAgIiIiQWRkIGFuIGVsZW1lbnQuIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBkaXNjYXJkKHNlbGYsIHZhbHVlKToKKyAgICAgICAgIiIiUmVtb3ZlIGFuIGVsZW1lbnQuICBEbyBub3QgcmFpc2UgYW4gZXhjZXB0aW9uIGlmIGFic2VudC4iIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIHJlbW92ZShzZWxmLCB2YWx1ZSk6CisgICAgICAgICIiIlJlbW92ZSBhbiBlbGVtZW50LiBJZiBub3QgYSBtZW1iZXIsIHJhaXNlIGEgS2V5RXJyb3IuIiIiCisgICAgICAgIGlmIHZhbHVlIG5vdCBpbiBzZWxmOgorICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IodmFsdWUpCisgICAgICAgIHNlbGYuZGlzY2FyZCh2YWx1ZSkKKworICAgIGRlZiBwb3Aoc2VsZik6CisgICAgICAgICIiIlJldHVybiB0aGUgcG9wcGVkIHZhbHVlLiAgUmFpc2UgS2V5RXJyb3IgaWYgZW1wdHkuIiIiCisgICAgICAgIGl0ID0gaXRlcihzZWxmKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB2YWx1ZSA9IG5leHQoaXQpCisgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgorICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IKKyAgICAgICAgc2VsZi5kaXNjYXJkKHZhbHVlKQorICAgICAgICByZXR1cm4gdmFsdWUKKworICAgIGRlZiBjbGVhcihzZWxmKToKKyAgICAgICAgIiIiVGhpcyBpcyBzbG93IChjcmVhdGVzIE4gbmV3IGl0ZXJhdG9ycyEpIGJ1dCBlZmZlY3RpdmUuIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgc2VsZi5wb3AoKQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgX19pb3JfXyhzZWxmLCBpdCk6CisgICAgICAgIGZvciB2YWx1ZSBpbiBpdDoKKyAgICAgICAgICAgIHNlbGYuYWRkKHZhbHVlKQorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9faWFuZF9fKHNlbGYsIGl0KToKKyAgICAgICAgZm9yIHZhbHVlIGluIChzZWxmIC0gaXQpOgorICAgICAgICAgICAgc2VsZi5kaXNjYXJkKHZhbHVlKQorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9faXhvcl9fKHNlbGYsIGl0KToKKyAgICAgICAgaWYgaXQgaXMgc2VsZjoKKyAgICAgICAgICAgIHNlbGYuY2xlYXIoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoaXQsIFNldCk6CisgICAgICAgICAgICAgICAgaXQgPSBzZWxmLl9mcm9tX2l0ZXJhYmxlKGl0KQorICAgICAgICAgICAgZm9yIHZhbHVlIGluIGl0OgorICAgICAgICAgICAgICAgIGlmIHZhbHVlIGluIHNlbGY6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZGlzY2FyZCh2YWx1ZSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFkZCh2YWx1ZSkKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfX2lzdWJfXyhzZWxmLCBpdCk6CisgICAgICAgIGlmIGl0IGlzIHNlbGY6CisgICAgICAgICAgICBzZWxmLmNsZWFyKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZvciB2YWx1ZSBpbiBpdDoKKyAgICAgICAgICAgICAgICBzZWxmLmRpc2NhcmQodmFsdWUpCisgICAgICAgIHJldHVybiBzZWxmCisKK011dGFibGVTZXQucmVnaXN0ZXIoc2V0KQorCisKKyMjIyBNQVBQSU5HUyAjIyMKKworCitjbGFzcyBNYXBwaW5nKFNpemVkLCBJdGVyYWJsZSwgQ29udGFpbmVyKToKKworICAgIF9fc2xvdHNfXyA9ICgpCisKKyAgICAiIiJBIE1hcHBpbmcgaXMgYSBnZW5lcmljIGNvbnRhaW5lciBmb3IgYXNzb2NpYXRpbmcga2V5L3ZhbHVlCisgICAgcGFpcnMuCisKKyAgICBUaGlzIGNsYXNzIHByb3ZpZGVzIGNvbmNyZXRlIGdlbmVyaWMgaW1wbGVtZW50YXRpb25zIG9mIGFsbAorICAgIG1ldGhvZHMgZXhjZXB0IGZvciBfX2dldGl0ZW1fXywgX19pdGVyX18sIGFuZCBfX2xlbl9fLgorCisgICAgIiIiCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwga2V5KToKKyAgICAgICAgcmFpc2UgS2V5RXJyb3IKKworICAgIGRlZiBnZXQoc2VsZiwga2V5LCBkZWZhdWx0PU5vbmUpOgorICAgICAgICAnRC5nZXQoa1ssZF0pIC0+IERba10gaWYgayBpbiBELCBlbHNlIGQuICBkIGRlZmF1bHRzIHRvIE5vbmUuJworICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gc2VsZltrZXldCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBkZWZhdWx0CisKKyAgICBkZWYgX19jb250YWluc19fKHNlbGYsIGtleSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGZba2V5XQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYga2V5cyhzZWxmKToKKyAgICAgICAgIkQua2V5cygpIC0+IGEgc2V0LWxpa2Ugb2JqZWN0IHByb3ZpZGluZyBhIHZpZXcgb24gRCdzIGtleXMiCisgICAgICAgIHJldHVybiBLZXlzVmlldyhzZWxmKQorCisgICAgZGVmIGl0ZW1zKHNlbGYpOgorICAgICAgICAiRC5pdGVtcygpIC0+IGEgc2V0LWxpa2Ugb2JqZWN0IHByb3ZpZGluZyBhIHZpZXcgb24gRCdzIGl0ZW1zIgorICAgICAgICByZXR1cm4gSXRlbXNWaWV3KHNlbGYpCisKKyAgICBkZWYgdmFsdWVzKHNlbGYpOgorICAgICAgICAiRC52YWx1ZXMoKSAtPiBhbiBvYmplY3QgcHJvdmlkaW5nIGEgdmlldyBvbiBEJ3MgdmFsdWVzIgorICAgICAgICByZXR1cm4gVmFsdWVzVmlldyhzZWxmKQorCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBNYXBwaW5nKToKKyAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgICAgICByZXR1cm4gZGljdChzZWxmLml0ZW1zKCkpID09IGRpY3Qob3RoZXIuaXRlbXMoKSkKKworTWFwcGluZy5yZWdpc3RlcihtYXBwaW5ncHJveHkpCisKKworY2xhc3MgTWFwcGluZ1ZpZXcoU2l6ZWQpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hcHBpbmcpOgorICAgICAgICBzZWxmLl9tYXBwaW5nID0gbWFwcGluZworCisgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgIHJldHVybiBsZW4oc2VsZi5fbWFwcGluZykKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICd7MC5fX2NsYXNzX18uX19uYW1lX199KHswLl9tYXBwaW5nIXJ9KScuZm9ybWF0KHNlbGYpCisKKworY2xhc3MgS2V5c1ZpZXcoTWFwcGluZ1ZpZXcsIFNldCk6CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX2Zyb21faXRlcmFibGUoc2VsZiwgaXQpOgorICAgICAgICByZXR1cm4gc2V0KGl0KQorCisgICAgZGVmIF9fY29udGFpbnNfXyhzZWxmLCBrZXkpOgorICAgICAgICByZXR1cm4ga2V5IGluIHNlbGYuX21hcHBpbmcKKworICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgeWllbGQgZnJvbSBzZWxmLl9tYXBwaW5nCisKK0tleXNWaWV3LnJlZ2lzdGVyKGRpY3Rfa2V5cykKKworCitjbGFzcyBJdGVtc1ZpZXcoTWFwcGluZ1ZpZXcsIFNldCk6CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX2Zyb21faXRlcmFibGUoc2VsZiwgaXQpOgorICAgICAgICByZXR1cm4gc2V0KGl0KQorCisgICAgZGVmIF9fY29udGFpbnNfXyhzZWxmLCBpdGVtKToKKyAgICAgICAga2V5LCB2YWx1ZSA9IGl0ZW0KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdiA9IHNlbGYuX21hcHBpbmdba2V5XQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiB2ID09IHZhbHVlCisKKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgIGZvciBrZXkgaW4gc2VsZi5fbWFwcGluZzoKKyAgICAgICAgICAgIHlpZWxkIChrZXksIHNlbGYuX21hcHBpbmdba2V5XSkKKworSXRlbXNWaWV3LnJlZ2lzdGVyKGRpY3RfaXRlbXMpCisKKworY2xhc3MgVmFsdWVzVmlldyhNYXBwaW5nVmlldyk6CisKKyAgICBkZWYgX19jb250YWluc19fKHNlbGYsIHZhbHVlKToKKyAgICAgICAgZm9yIGtleSBpbiBzZWxmLl9tYXBwaW5nOgorICAgICAgICAgICAgaWYgdmFsdWUgPT0gc2VsZi5fbWFwcGluZ1trZXldOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICBmb3Iga2V5IGluIHNlbGYuX21hcHBpbmc6CisgICAgICAgICAgICB5aWVsZCBzZWxmLl9tYXBwaW5nW2tleV0KKworVmFsdWVzVmlldy5yZWdpc3RlcihkaWN0X3ZhbHVlcykKKworCitjbGFzcyBNdXRhYmxlTWFwcGluZyhNYXBwaW5nKToKKworICAgIF9fc2xvdHNfXyA9ICgpCisKKyAgICAiIiJBIE11dGFibGVNYXBwaW5nIGlzIGEgZ2VuZXJpYyBjb250YWluZXIgZm9yIGFzc29jaWF0aW5nCisgICAga2V5L3ZhbHVlIHBhaXJzLgorCisgICAgVGhpcyBjbGFzcyBwcm92aWRlcyBjb25jcmV0ZSBnZW5lcmljIGltcGxlbWVudGF0aW9ucyBvZiBhbGwKKyAgICBtZXRob2RzIGV4Y2VwdCBmb3IgX19nZXRpdGVtX18sIF9fc2V0aXRlbV9fLCBfX2RlbGl0ZW1fXywKKyAgICBfX2l0ZXJfXywgYW5kIF9fbGVuX18uCisKKyAgICAiIiIKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBfX3NldGl0ZW1fXyhzZWxmLCBrZXksIHZhbHVlKToKKyAgICAgICAgcmFpc2UgS2V5RXJyb3IKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBfX2RlbGl0ZW1fXyhzZWxmLCBrZXkpOgorICAgICAgICByYWlzZSBLZXlFcnJvcgorCisgICAgX19tYXJrZXIgPSBvYmplY3QoKQorCisgICAgZGVmIHBvcChzZWxmLCBrZXksIGRlZmF1bHQ9X19tYXJrZXIpOgorICAgICAgICAnJydELnBvcChrWyxkXSkgLT4gdiwgcmVtb3ZlIHNwZWNpZmllZCBrZXkgYW5kIHJldHVybiB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZS4KKyAgICAgICAgICBJZiBrZXkgaXMgbm90IGZvdW5kLCBkIGlzIHJldHVybmVkIGlmIGdpdmVuLCBvdGhlcndpc2UgS2V5RXJyb3IgaXMgcmFpc2VkLgorICAgICAgICAnJycKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdmFsdWUgPSBzZWxmW2tleV0KKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgaWYgZGVmYXVsdCBpcyBzZWxmLl9fbWFya2VyOgorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICByZXR1cm4gZGVmYXVsdAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZGVsIHNlbGZba2V5XQorICAgICAgICAgICAgcmV0dXJuIHZhbHVlCisKKyAgICBkZWYgcG9waXRlbShzZWxmKToKKyAgICAgICAgJycnRC5wb3BpdGVtKCkgLT4gKGssIHYpLCByZW1vdmUgYW5kIHJldHVybiBzb21lIChrZXksIHZhbHVlKSBwYWlyCisgICAgICAgICAgIGFzIGEgMi10dXBsZTsgYnV0IHJhaXNlIEtleUVycm9yIGlmIEQgaXMgZW1wdHkuCisgICAgICAgICcnJworICAgICAgICB0cnk6CisgICAgICAgICAgICBrZXkgPSBuZXh0KGl0ZXIoc2VsZikpCisgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgorICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IKKyAgICAgICAgdmFsdWUgPSBzZWxmW2tleV0KKyAgICAgICAgZGVsIHNlbGZba2V5XQorICAgICAgICByZXR1cm4ga2V5LCB2YWx1ZQorCisgICAgZGVmIGNsZWFyKHNlbGYpOgorICAgICAgICAnRC5jbGVhcigpIC0+IE5vbmUuICBSZW1vdmUgYWxsIGl0ZW1zIGZyb20gRC4nCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgc2VsZi5wb3BpdGVtKCkKKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcGFzcworCisgICAgZGVmIHVwZGF0ZSgqYXJncywgKiprd2RzKToKKyAgICAgICAgJycnIEQudXBkYXRlKFtFLCBdKipGKSAtPiBOb25lLiAgVXBkYXRlIEQgZnJvbSBtYXBwaW5nL2l0ZXJhYmxlIEUgYW5kIEYuCisgICAgICAgICAgICBJZiBFIHByZXNlbnQgYW5kIGhhcyBhIC5rZXlzKCkgbWV0aG9kLCBkb2VzOiAgICAgZm9yIGsgaW4gRTogRFtrXSA9IEVba10KKyAgICAgICAgICAgIElmIEUgcHJlc2VudCBhbmQgbGFja3MgLmtleXMoKSBtZXRob2QsIGRvZXM6ICAgICBmb3IgKGssIHYpIGluIEU6IERba10gPSB2CisgICAgICAgICAgICBJbiBlaXRoZXIgY2FzZSwgdGhpcyBpcyBmb2xsb3dlZCBieTogZm9yIGssIHYgaW4gRi5pdGVtcygpOiBEW2tdID0gdgorICAgICAgICAnJycKKyAgICAgICAgaWYgbm90IGFyZ3M6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoImRlc2NyaXB0b3IgJ3VwZGF0ZScgb2YgJ011dGFibGVNYXBwaW5nJyBvYmplY3QgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuZWVkcyBhbiBhcmd1bWVudCIpCisgICAgICAgIHNlbGYsICphcmdzID0gYXJncworICAgICAgICBpZiBsZW4oYXJncykgPiAxOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCd1cGRhdGUgZXhwZWN0ZWQgYXQgbW9zdCAxIGFyZ3VtZW50cywgZ290ICVkJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuKGFyZ3MpKQorICAgICAgICBpZiBhcmdzOgorICAgICAgICAgICAgb3RoZXIgPSBhcmdzWzBdCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBNYXBwaW5nKToKKyAgICAgICAgICAgICAgICBmb3Iga2V5IGluIG90aGVyOgorICAgICAgICAgICAgICAgICAgICBzZWxmW2tleV0gPSBvdGhlcltrZXldCisgICAgICAgICAgICBlbGlmIGhhc2F0dHIob3RoZXIsICJrZXlzIik6CisgICAgICAgICAgICAgICAgZm9yIGtleSBpbiBvdGhlci5rZXlzKCk6CisgICAgICAgICAgICAgICAgICAgIHNlbGZba2V5XSA9IG90aGVyW2tleV0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gb3RoZXI6CisgICAgICAgICAgICAgICAgICAgIHNlbGZba2V5XSA9IHZhbHVlCisgICAgICAgIGZvciBrZXksIHZhbHVlIGluIGt3ZHMuaXRlbXMoKToKKyAgICAgICAgICAgIHNlbGZba2V5XSA9IHZhbHVlCisKKyAgICBkZWYgc2V0ZGVmYXVsdChzZWxmLCBrZXksIGRlZmF1bHQ9Tm9uZSk6CisgICAgICAgICdELnNldGRlZmF1bHQoa1ssZF0pIC0+IEQuZ2V0KGssZCksIGFsc28gc2V0IERba109ZCBpZiBrIG5vdCBpbiBEJworICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gc2VsZltrZXldCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHNlbGZba2V5XSA9IGRlZmF1bHQKKyAgICAgICAgcmV0dXJuIGRlZmF1bHQKKworTXV0YWJsZU1hcHBpbmcucmVnaXN0ZXIoZGljdCkKKworCisjIyMgU0VRVUVOQ0VTICMjIworCisKK2NsYXNzIFNlcXVlbmNlKFNpemVkLCBJdGVyYWJsZSwgQ29udGFpbmVyKToKKworICAgICIiIkFsbCB0aGUgb3BlcmF0aW9ucyBvbiBhIHJlYWQtb25seSBzZXF1ZW5jZS4KKworICAgIENvbmNyZXRlIHN1YmNsYXNzZXMgbXVzdCBvdmVycmlkZSBfX25ld19fIG9yIF9faW5pdF9fLAorICAgIF9fZ2V0aXRlbV9fLCBhbmQgX19sZW5fXy4KKyAgICAiIiIKKworICAgIF9fc2xvdHNfXyA9ICgpCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaW5kZXgpOgorICAgICAgICByYWlzZSBJbmRleEVycm9yCisKKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgIGkgPSAwCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgdiA9IHNlbGZbaV0KKyAgICAgICAgICAgICAgICB5aWVsZCB2CisgICAgICAgICAgICAgICAgaSArPSAxCisgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICBkZWYgX19jb250YWluc19fKHNlbGYsIHZhbHVlKToKKyAgICAgICAgZm9yIHYgaW4gc2VsZjoKKyAgICAgICAgICAgIGlmIHYgPT0gdmFsdWU6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgX19yZXZlcnNlZF9fKHNlbGYpOgorICAgICAgICBmb3IgaSBpbiByZXZlcnNlZChyYW5nZShsZW4oc2VsZikpKToKKyAgICAgICAgICAgIHlpZWxkIHNlbGZbaV0KKworICAgIGRlZiBpbmRleChzZWxmLCB2YWx1ZSk6CisgICAgICAgICcnJ1MuaW5kZXgodmFsdWUpIC0+IGludGVnZXIgLS0gcmV0dXJuIGZpcnN0IGluZGV4IG9mIHZhbHVlLgorICAgICAgICAgICBSYWlzZXMgVmFsdWVFcnJvciBpZiB0aGUgdmFsdWUgaXMgbm90IHByZXNlbnQuCisgICAgICAgICcnJworICAgICAgICBmb3IgaSwgdiBpbiBlbnVtZXJhdGUoc2VsZik6CisgICAgICAgICAgICBpZiB2ID09IHZhbHVlOgorICAgICAgICAgICAgICAgIHJldHVybiBpCisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IKKworICAgIGRlZiBjb3VudChzZWxmLCB2YWx1ZSk6CisgICAgICAgICdTLmNvdW50KHZhbHVlKSAtPiBpbnRlZ2VyIC0tIHJldHVybiBudW1iZXIgb2Ygb2NjdXJyZW5jZXMgb2YgdmFsdWUnCisgICAgICAgIHJldHVybiBzdW0oMSBmb3IgdiBpbiBzZWxmIGlmIHYgPT0gdmFsdWUpCisKK1NlcXVlbmNlLnJlZ2lzdGVyKHR1cGxlKQorU2VxdWVuY2UucmVnaXN0ZXIoc3RyKQorU2VxdWVuY2UucmVnaXN0ZXIocmFuZ2UpCitTZXF1ZW5jZS5yZWdpc3RlcihtZW1vcnl2aWV3KQorCisKK2NsYXNzIEJ5dGVTdHJpbmcoU2VxdWVuY2UpOgorCisgICAgIiIiVGhpcyB1bmlmaWVzIGJ5dGVzIGFuZCBieXRlYXJyYXkuCisKKyAgICBYWFggU2hvdWxkIGFkZCBhbGwgdGhlaXIgbWV0aG9kcy4KKyAgICAiIiIKKworICAgIF9fc2xvdHNfXyA9ICgpCisKK0J5dGVTdHJpbmcucmVnaXN0ZXIoYnl0ZXMpCitCeXRlU3RyaW5nLnJlZ2lzdGVyKGJ5dGVhcnJheSkKKworCitjbGFzcyBNdXRhYmxlU2VxdWVuY2UoU2VxdWVuY2UpOgorCisgICAgX19zbG90c19fID0gKCkKKworICAgICIiIkFsbCB0aGUgb3BlcmF0aW9ucyBvbiBhIHJlYWQtd3JpdGUgc2VxdWVuY2UuCisKKyAgICBDb25jcmV0ZSBzdWJjbGFzc2VzIG11c3QgcHJvdmlkZSBfX25ld19fIG9yIF9faW5pdF9fLAorICAgIF9fZ2V0aXRlbV9fLCBfX3NldGl0ZW1fXywgX19kZWxpdGVtX18sIF9fbGVuX18sIGFuZCBpbnNlcnQoKS4KKworICAgICIiIgorCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIF9fc2V0aXRlbV9fKHNlbGYsIGluZGV4LCB2YWx1ZSk6CisgICAgICAgIHJhaXNlIEluZGV4RXJyb3IKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBfX2RlbGl0ZW1fXyhzZWxmLCBpbmRleCk6CisgICAgICAgIHJhaXNlIEluZGV4RXJyb3IKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBpbnNlcnQoc2VsZiwgaW5kZXgsIHZhbHVlKToKKyAgICAgICAgJ1MuaW5zZXJ0KGluZGV4LCB2YWx1ZSkgLS0gaW5zZXJ0IHZhbHVlIGJlZm9yZSBpbmRleCcKKyAgICAgICAgcmFpc2UgSW5kZXhFcnJvcgorCisgICAgZGVmIGFwcGVuZChzZWxmLCB2YWx1ZSk6CisgICAgICAgICdTLmFwcGVuZCh2YWx1ZSkgLS0gYXBwZW5kIHZhbHVlIHRvIHRoZSBlbmQgb2YgdGhlIHNlcXVlbmNlJworICAgICAgICBzZWxmLmluc2VydChsZW4oc2VsZiksIHZhbHVlKQorCisgICAgZGVmIGNsZWFyKHNlbGYpOgorICAgICAgICAnUy5jbGVhcigpIC0+IE5vbmUgLS0gcmVtb3ZlIGFsbCBpdGVtcyBmcm9tIFMnCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgc2VsZi5wb3AoKQorICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiByZXZlcnNlKHNlbGYpOgorICAgICAgICAnUy5yZXZlcnNlKCkgLS0gcmV2ZXJzZSAqSU4gUExBQ0UqJworICAgICAgICBuID0gbGVuKHNlbGYpCisgICAgICAgIGZvciBpIGluIHJhbmdlKG4vLzIpOgorICAgICAgICAgICAgc2VsZltpXSwgc2VsZltuLWktMV0gPSBzZWxmW24taS0xXSwgc2VsZltpXQorCisgICAgZGVmIGV4dGVuZChzZWxmLCB2YWx1ZXMpOgorICAgICAgICAnUy5leHRlbmQoaXRlcmFibGUpIC0tIGV4dGVuZCBzZXF1ZW5jZSBieSBhcHBlbmRpbmcgZWxlbWVudHMgZnJvbSB0aGUgaXRlcmFibGUnCisgICAgICAgIGZvciB2IGluIHZhbHVlczoKKyAgICAgICAgICAgIHNlbGYuYXBwZW5kKHYpCisKKyAgICBkZWYgcG9wKHNlbGYsIGluZGV4PS0xKToKKyAgICAgICAgJycnUy5wb3AoW2luZGV4XSkgLT4gaXRlbSAtLSByZW1vdmUgYW5kIHJldHVybiBpdGVtIGF0IGluZGV4IChkZWZhdWx0IGxhc3QpLgorICAgICAgICAgICBSYWlzZSBJbmRleEVycm9yIGlmIGxpc3QgaXMgZW1wdHkgb3IgaW5kZXggaXMgb3V0IG9mIHJhbmdlLgorICAgICAgICAnJycKKyAgICAgICAgdiA9IHNlbGZbaW5kZXhdCisgICAgICAgIGRlbCBzZWxmW2luZGV4XQorICAgICAgICByZXR1cm4gdgorCisgICAgZGVmIHJlbW92ZShzZWxmLCB2YWx1ZSk6CisgICAgICAgICcnJ1MucmVtb3ZlKHZhbHVlKSAtLSByZW1vdmUgZmlyc3Qgb2NjdXJyZW5jZSBvZiB2YWx1ZS4KKyAgICAgICAgICAgUmFpc2UgVmFsdWVFcnJvciBpZiB0aGUgdmFsdWUgaXMgbm90IHByZXNlbnQuCisgICAgICAgICcnJworICAgICAgICBkZWwgc2VsZltzZWxmLmluZGV4KHZhbHVlKV0KKworICAgIGRlZiBfX2lhZGRfXyhzZWxmLCB2YWx1ZXMpOgorICAgICAgICBzZWxmLmV4dGVuZCh2YWx1ZXMpCisgICAgICAgIHJldHVybiBzZWxmCisKK011dGFibGVTZXF1ZW5jZS5yZWdpc3RlcihsaXN0KQorTXV0YWJsZVNlcXVlbmNlLnJlZ2lzdGVyKGJ5dGVhcnJheSkgICMgTXVsdGlwbHkgaW5oZXJpdGluZywgc2VlIEJ5dGVTdHJpbmcKZGlmZiAtLWdpdCBhL0xpYi9fY29tcGF0X3BpY2tsZS5weSBiL0xpYi9fY29tcGF0X3BpY2tsZS5weQppbmRleCA5NzhjMDFlLi42ZTM5ZDRhIDEwMDY0NAotLS0gYS9MaWIvX2NvbXBhdF9waWNrbGUucHkKKysrIGIvTGliL19jb21wYXRfcGlja2xlLnB5CkBAIC02LDE4ICs2LDEzIEBACiAjIGxpYjJ0bzMgYW5kIHVzZSB0aGUgbWFwcGluZyBkZWZpbmVkIHRoZXJlLCBiZWNhdXNlIGxpYjJ0bzMgdXNlcyBwaWNrbGUuCiAjIFRodXMsIHRoaXMgY291bGQgY2F1c2UgdGhlIG1vZHVsZSB0byBiZSBpbXBvcnRlZCByZWN1cnNpdmVseS4KIElNUE9SVF9NQVBQSU5HID0gewotICAgICdTdHJpbmdJTyc6ICAnaW8nLAotICAgICdjU3RyaW5nSU8nOiAnaW8nLAotICAgICdjUGlja2xlJzogJ3BpY2tsZScsCiAgICAgJ19fYnVpbHRpbl9fJyA6ICdidWlsdGlucycsCiAgICAgJ2NvcHlfcmVnJzogJ2NvcHlyZWcnLAogICAgICdRdWV1ZSc6ICdxdWV1ZScsCiAgICAgJ1NvY2tldFNlcnZlcic6ICdzb2NrZXRzZXJ2ZXInLAogICAgICdDb25maWdQYXJzZXInOiAnY29uZmlncGFyc2VyJywKICAgICAncmVwcic6ICdyZXBybGliJywKLSAgICAnRmlsZURpYWxvZyc6ICd0a2ludGVyLmZpbGVkaWFsb2cnLAogICAgICd0a0ZpbGVEaWFsb2cnOiAndGtpbnRlci5maWxlZGlhbG9nJywKLSAgICAnU2ltcGxlRGlhbG9nJzogJ3RraW50ZXIuc2ltcGxlZGlhbG9nJywKICAgICAndGtTaW1wbGVEaWFsb2cnOiAndGtpbnRlci5zaW1wbGVkaWFsb2cnLAogICAgICd0a0NvbG9yQ2hvb3Nlcic6ICd0a2ludGVyLmNvbG9yY2hvb3NlcicsCiAgICAgJ3RrQ29tbW9uRGlhbG9nJzogJ3RraW50ZXIuY29tbW9uZGlhbG9nJywKQEAgLTM5LDcgKzM0LDYgQEAKICAgICAnZGJtJzogJ2RibS5uZGJtJywKICAgICAnZ2RibSc6ICdkYm0uZ251JywKICAgICAneG1scnBjbGliJzogJ3htbHJwYy5jbGllbnQnLAotICAgICdEb2NYTUxSUENTZXJ2ZXInOiAneG1scnBjLnNlcnZlcicsCiAgICAgJ1NpbXBsZVhNTFJQQ1NlcnZlcic6ICd4bWxycGMuc2VydmVyJywKICAgICAnaHR0cGxpYic6ICdodHRwLmNsaWVudCcsCiAgICAgJ2h0bWxlbnRpdHlkZWZzJyA6ICdodG1sLmVudGl0aWVzJywKQEAgLTQ3LDE2ICs0MSwxMyBAQAogICAgICdDb29raWUnOiAnaHR0cC5jb29raWVzJywKICAgICAnY29va2llbGliJzogJ2h0dHAuY29va2llamFyJywKICAgICAnQmFzZUhUVFBTZXJ2ZXInOiAnaHR0cC5zZXJ2ZXInLAotICAgICdTaW1wbGVIVFRQU2VydmVyJzogJ2h0dHAuc2VydmVyJywKLSAgICAnQ0dJSFRUUFNlcnZlcic6ICdodHRwLnNlcnZlcicsCiAgICAgJ3Rlc3QudGVzdF9zdXBwb3J0JzogJ3Rlc3Quc3VwcG9ydCcsCiAgICAgJ2NvbW1hbmRzJzogJ3N1YnByb2Nlc3MnLAotICAgICdVc2VyU3RyaW5nJyA6ICdjb2xsZWN0aW9ucycsCi0gICAgJ1VzZXJMaXN0JyA6ICdjb2xsZWN0aW9ucycsCiAgICAgJ3VybHBhcnNlJyA6ICd1cmxsaWIucGFyc2UnLAogICAgICdyb2JvdHBhcnNlcicgOiAndXJsbGliLnJvYm90cGFyc2VyJywKLSAgICAnd2hpY2hkYic6ICdkYm0nLAotICAgICdhbnlkYm0nOiAnZGJtJworICAgICd1cmxsaWIyJzogJ3VybGxpYi5yZXF1ZXN0JywKKyAgICAnYW55ZGJtJzogJ2RibScsCisgICAgJ19hYmNvbGwnIDogJ2NvbGxlY3Rpb25zLmFiYycsCiB9CiAKIApAQCAtNjgsMTIgKzU5LDM1IEBACiAgICAgKCdfX2J1aWx0aW5fXycsICdyZWR1Y2UnKTogICAgICgnZnVuY3Rvb2xzJywgJ3JlZHVjZScpLAogICAgICgnX19idWlsdGluX18nLCAnaW50ZXJuJyk6ICAgICAoJ3N5cycsICdpbnRlcm4nKSwKICAgICAoJ19fYnVpbHRpbl9fJywgJ3VuaWNocicpOiAgICAgKCdidWlsdGlucycsICdjaHInKSwKLSAgICAoJ19fYnVpbHRpbl9fJywgJ2Jhc2VzdHJpbmcnKTogKCdidWlsdGlucycsICdzdHInKSwKKyAgICAoJ19fYnVpbHRpbl9fJywgJ3VuaWNvZGUnKTogICAgKCdidWlsdGlucycsICdzdHInKSwKICAgICAoJ19fYnVpbHRpbl9fJywgJ2xvbmcnKTogICAgICAgKCdidWlsdGlucycsICdpbnQnKSwKICAgICAoJ2l0ZXJ0b29scycsICdpemlwJyk6ICAgICAgICAgKCdidWlsdGlucycsICd6aXAnKSwKICAgICAoJ2l0ZXJ0b29scycsICdpbWFwJyk6ICAgICAgICAgKCdidWlsdGlucycsICdtYXAnKSwKICAgICAoJ2l0ZXJ0b29scycsICdpZmlsdGVyJyk6ICAgICAgKCdidWlsdGlucycsICdmaWx0ZXInKSwKICAgICAoJ2l0ZXJ0b29scycsICdpZmlsdGVyZmFsc2UnKTogKCdpdGVydG9vbHMnLCAnZmlsdGVyZmFsc2UnKSwKKyAgICAoJ2l0ZXJ0b29scycsICdpemlwX2xvbmdlc3QnKTogKCdpdGVydG9vbHMnLCAnemlwX2xvbmdlc3QnKSwKKyAgICAoJ1VzZXJEaWN0JywgJ0l0ZXJhYmxlVXNlckRpY3QnKTogKCdjb2xsZWN0aW9ucycsICdVc2VyRGljdCcpLAorICAgICgnVXNlckxpc3QnLCAnVXNlckxpc3QnKTogKCdjb2xsZWN0aW9ucycsICdVc2VyTGlzdCcpLAorICAgICgnVXNlclN0cmluZycsICdVc2VyU3RyaW5nJyk6ICgnY29sbGVjdGlvbnMnLCAnVXNlclN0cmluZycpLAorICAgICgnd2hpY2hkYicsICd3aGljaGRiJyk6ICgnZGJtJywgJ3doaWNoZGInKSwKKyAgICAoJ19zb2NrZXQnLCAnZnJvbWZkJyk6ICgnc29ja2V0JywgJ2Zyb21mZCcpLAorICAgICgnX211bHRpcHJvY2Vzc2luZycsICdDb25uZWN0aW9uJyk6ICgnbXVsdGlwcm9jZXNzaW5nLmNvbm5lY3Rpb24nLCAnQ29ubmVjdGlvbicpLAorICAgICgnbXVsdGlwcm9jZXNzaW5nLnByb2Nlc3MnLCAnUHJvY2VzcycpOiAoJ211bHRpcHJvY2Vzc2luZy5jb250ZXh0JywgJ1Byb2Nlc3MnKSwKKyAgICAoJ211bHRpcHJvY2Vzc2luZy5mb3JraW5nJywgJ1BvcGVuJyk6ICgnbXVsdGlwcm9jZXNzaW5nLnBvcGVuX2ZvcmsnLCAnUG9wZW4nKSwKKyAgICAoJ3VybGxpYicsICdDb250ZW50VG9vU2hvcnRFcnJvcicpOiAoJ3VybGxpYi5lcnJvcicsICdDb250ZW50VG9vU2hvcnRFcnJvcicpLAorICAgICgndXJsbGliJywgJ2dldHByb3hpZXMnKTogKCd1cmxsaWIucmVxdWVzdCcsICdnZXRwcm94aWVzJyksCisgICAgKCd1cmxsaWInLCAncGF0aG5hbWUydXJsJyk6ICgndXJsbGliLnJlcXVlc3QnLCAncGF0aG5hbWUydXJsJyksCisgICAgKCd1cmxsaWInLCAncXVvdGVfcGx1cycpOiAoJ3VybGxpYi5wYXJzZScsICdxdW90ZV9wbHVzJyksCisgICAgKCd1cmxsaWInLCAncXVvdGUnKTogKCd1cmxsaWIucGFyc2UnLCAncXVvdGUnKSwKKyAgICAoJ3VybGxpYicsICd1bnF1b3RlX3BsdXMnKTogKCd1cmxsaWIucGFyc2UnLCAndW5xdW90ZV9wbHVzJyksCisgICAgKCd1cmxsaWInLCAndW5xdW90ZScpOiAoJ3VybGxpYi5wYXJzZScsICd1bnF1b3RlJyksCisgICAgKCd1cmxsaWInLCAndXJsMnBhdGhuYW1lJyk6ICgndXJsbGliLnJlcXVlc3QnLCAndXJsMnBhdGhuYW1lJyksCisgICAgKCd1cmxsaWInLCAndXJsY2xlYW51cCcpOiAoJ3VybGxpYi5yZXF1ZXN0JywgJ3VybGNsZWFudXAnKSwKKyAgICAoJ3VybGxpYicsICd1cmxlbmNvZGUnKTogKCd1cmxsaWIucGFyc2UnLCAndXJsZW5jb2RlJyksCisgICAgKCd1cmxsaWInLCAndXJsb3BlbicpOiAoJ3VybGxpYi5yZXF1ZXN0JywgJ3VybG9wZW4nKSwKKyAgICAoJ3VybGxpYicsICd1cmxyZXRyaWV2ZScpOiAoJ3VybGxpYi5yZXF1ZXN0JywgJ3VybHJldHJpZXZlJyksCisgICAgKCd1cmxsaWIyJywgJ0hUVFBFcnJvcicpOiAoJ3VybGxpYi5lcnJvcicsICdIVFRQRXJyb3InKSwKKyAgICAoJ3VybGxpYjInLCAnVVJMRXJyb3InKTogKCd1cmxsaWIuZXJyb3InLCAnVVJMRXJyb3InKSwKIH0KIAogUFlUSE9OMl9FWENFUFRJT05TID0gKApAQCAtMTI3LDExICsxNDEsOTcgQEAKICAgICAiWmVyb0RpdmlzaW9uRXJyb3IiLAogKQogCit0cnk6CisgICAgV2luZG93c0Vycm9yCitleGNlcHQgTmFtZUVycm9yOgorICAgIHBhc3MKK2Vsc2U6CisgICAgUFlUSE9OMl9FWENFUFRJT05TICs9ICgiV2luZG93c0Vycm9yIiwpCisKIGZvciBleGNuYW1lIGluIFBZVEhPTjJfRVhDRVBUSU9OUzoKICAgICBOQU1FX01BUFBJTkdbKCJleGNlcHRpb25zIiwgZXhjbmFtZSldID0gKCJidWlsdGlucyIsIGV4Y25hbWUpCiAKLU5BTUVfTUFQUElOR1soImV4Y2VwdGlvbnMiLCAiU3RhbmRhcmRFcnJvciIpXSA9ICgiYnVpbHRpbnMiLCAiRXhjZXB0aW9uIikKK01VTFRJUFJPQ0VTU0lOR19FWENFUFRJT05TID0gKAorICAgICdBdXRoZW50aWNhdGlvbkVycm9yJywKKyAgICAnQnVmZmVyVG9vU2hvcnQnLAorICAgICdQcm9jZXNzRXJyb3InLAorICAgICdUaW1lb3V0RXJyb3InLAorKQorCitmb3IgZXhjbmFtZSBpbiBNVUxUSVBST0NFU1NJTkdfRVhDRVBUSU9OUzoKKyAgICBOQU1FX01BUFBJTkdbKCJtdWx0aXByb2Nlc3NpbmciLCBleGNuYW1lKV0gPSAoIm11bHRpcHJvY2Vzc2luZy5jb250ZXh0IiwgZXhjbmFtZSkKIAogIyBTYW1lLCBidXQgZm9yIDMueCB0byAyLngKIFJFVkVSU0VfSU1QT1JUX01BUFBJTkcgPSBkaWN0KCh2LCBrKSBmb3IgKGssIHYpIGluIElNUE9SVF9NQVBQSU5HLml0ZW1zKCkpCithc3NlcnQgbGVuKFJFVkVSU0VfSU1QT1JUX01BUFBJTkcpID09IGxlbihJTVBPUlRfTUFQUElORykKIFJFVkVSU0VfTkFNRV9NQVBQSU5HID0gZGljdCgodiwgaykgZm9yIChrLCB2KSBpbiBOQU1FX01BUFBJTkcuaXRlbXMoKSkKK2Fzc2VydCBsZW4oUkVWRVJTRV9OQU1FX01BUFBJTkcpID09IGxlbihOQU1FX01BUFBJTkcpCisKKyMgTm9uLW11dHVhbCBtYXBwaW5ncy4KKworSU1QT1JUX01BUFBJTkcudXBkYXRlKHsKKyAgICAnY1BpY2tsZSc6ICdwaWNrbGUnLAorICAgICdfZWxlbWVudHRyZWUnOiAneG1sLmV0cmVlLkVsZW1lbnRUcmVlJywKKyAgICAnRmlsZURpYWxvZyc6ICd0a2ludGVyLmZpbGVkaWFsb2cnLAorICAgICdTaW1wbGVEaWFsb2cnOiAndGtpbnRlci5zaW1wbGVkaWFsb2cnLAorICAgICdEb2NYTUxSUENTZXJ2ZXInOiAneG1scnBjLnNlcnZlcicsCisgICAgJ1NpbXBsZUhUVFBTZXJ2ZXInOiAnaHR0cC5zZXJ2ZXInLAorICAgICdDR0lIVFRQU2VydmVyJzogJ2h0dHAuc2VydmVyJywKK30pCisKK1JFVkVSU0VfSU1QT1JUX01BUFBJTkcudXBkYXRlKHsKKyAgICAnX2J6Mic6ICdiejInLAorICAgICdfZGJtJzogJ2RibScsCisgICAgJ19mdW5jdG9vbHMnOiAnZnVuY3Rvb2xzJywKKyAgICAnX2dkYm0nOiAnZ2RibScsCisgICAgJ19waWNrbGUnOiAncGlja2xlJywKK30pCisKK05BTUVfTUFQUElORy51cGRhdGUoeworICAgICgnX19idWlsdGluX18nLCAnYmFzZXN0cmluZycpOiAoJ2J1aWx0aW5zJywgJ3N0cicpLAorICAgICgnZXhjZXB0aW9ucycsICdTdGFuZGFyZEVycm9yJyk6ICgnYnVpbHRpbnMnLCAnRXhjZXB0aW9uJyksCisgICAgKCdVc2VyRGljdCcsICdVc2VyRGljdCcpOiAoJ2NvbGxlY3Rpb25zJywgJ1VzZXJEaWN0JyksCisgICAgKCdzb2NrZXQnLCAnX3NvY2tldG9iamVjdCcpOiAoJ3NvY2tldCcsICdTb2NrZXRUeXBlJyksCit9KQorCitSRVZFUlNFX05BTUVfTUFQUElORy51cGRhdGUoeworICAgICgnX2Z1bmN0b29scycsICdyZWR1Y2UnKTogKCdfX2J1aWx0aW5fXycsICdyZWR1Y2UnKSwKKyAgICAoJ3RraW50ZXIuZmlsZWRpYWxvZycsICdGaWxlRGlhbG9nJyk6ICgnRmlsZURpYWxvZycsICdGaWxlRGlhbG9nJyksCisgICAgKCd0a2ludGVyLmZpbGVkaWFsb2cnLCAnTG9hZEZpbGVEaWFsb2cnKTogKCdGaWxlRGlhbG9nJywgJ0xvYWRGaWxlRGlhbG9nJyksCisgICAgKCd0a2ludGVyLmZpbGVkaWFsb2cnLCAnU2F2ZUZpbGVEaWFsb2cnKTogKCdGaWxlRGlhbG9nJywgJ1NhdmVGaWxlRGlhbG9nJyksCisgICAgKCd0a2ludGVyLnNpbXBsZWRpYWxvZycsICdTaW1wbGVEaWFsb2cnKTogKCdTaW1wbGVEaWFsb2cnLCAnU2ltcGxlRGlhbG9nJyksCisgICAgKCd4bWxycGMuc2VydmVyJywgJ1NlcnZlckhUTUxEb2MnKTogKCdEb2NYTUxSUENTZXJ2ZXInLCAnU2VydmVySFRNTERvYycpLAorICAgICgneG1scnBjLnNlcnZlcicsICdYTUxSUENEb2NHZW5lcmF0b3InKToKKyAgICAgICAgKCdEb2NYTUxSUENTZXJ2ZXInLCAnWE1MUlBDRG9jR2VuZXJhdG9yJyksCisgICAgKCd4bWxycGMuc2VydmVyJywgJ0RvY1hNTFJQQ1JlcXVlc3RIYW5kbGVyJyk6CisgICAgICAgICgnRG9jWE1MUlBDU2VydmVyJywgJ0RvY1hNTFJQQ1JlcXVlc3RIYW5kbGVyJyksCisgICAgKCd4bWxycGMuc2VydmVyJywgJ0RvY1hNTFJQQ1NlcnZlcicpOgorICAgICAgICAoJ0RvY1hNTFJQQ1NlcnZlcicsICdEb2NYTUxSUENTZXJ2ZXInKSwKKyAgICAoJ3htbHJwYy5zZXJ2ZXInLCAnRG9jQ0dJWE1MUlBDUmVxdWVzdEhhbmRsZXInKToKKyAgICAgICAgKCdEb2NYTUxSUENTZXJ2ZXInLCAnRG9jQ0dJWE1MUlBDUmVxdWVzdEhhbmRsZXInKSwKKyAgICAoJ2h0dHAuc2VydmVyJywgJ1NpbXBsZUhUVFBSZXF1ZXN0SGFuZGxlcicpOgorICAgICAgICAoJ1NpbXBsZUhUVFBTZXJ2ZXInLCAnU2ltcGxlSFRUUFJlcXVlc3RIYW5kbGVyJyksCisgICAgKCdodHRwLnNlcnZlcicsICdDR0lIVFRQUmVxdWVzdEhhbmRsZXInKToKKyAgICAgICAgKCdDR0lIVFRQU2VydmVyJywgJ0NHSUhUVFBSZXF1ZXN0SGFuZGxlcicpLAorICAgICgnX3NvY2tldCcsICdzb2NrZXQnKTogKCdzb2NrZXQnLCAnX3NvY2tldG9iamVjdCcpLAorfSkKKworUFlUSE9OM19PU0VSUk9SX0VYQ0VQVElPTlMgPSAoCisgICAgJ0Jyb2tlblBpcGVFcnJvcicsCisgICAgJ0NoaWxkUHJvY2Vzc0Vycm9yJywKKyAgICAnQ29ubmVjdGlvbkFib3J0ZWRFcnJvcicsCisgICAgJ0Nvbm5lY3Rpb25FcnJvcicsCisgICAgJ0Nvbm5lY3Rpb25SZWZ1c2VkRXJyb3InLAorICAgICdDb25uZWN0aW9uUmVzZXRFcnJvcicsCisgICAgJ0ZpbGVFeGlzdHNFcnJvcicsCisgICAgJ0ZpbGVOb3RGb3VuZEVycm9yJywKKyAgICAnSW50ZXJydXB0ZWRFcnJvcicsCisgICAgJ0lzQURpcmVjdG9yeUVycm9yJywKKyAgICAnTm90QURpcmVjdG9yeUVycm9yJywKKyAgICAnUGVybWlzc2lvbkVycm9yJywKKyAgICAnUHJvY2Vzc0xvb2t1cEVycm9yJywKKyAgICAnVGltZW91dEVycm9yJywKKykKKworZm9yIGV4Y25hbWUgaW4gUFlUSE9OM19PU0VSUk9SX0VYQ0VQVElPTlM6CisgICAgUkVWRVJTRV9OQU1FX01BUFBJTkdbKCdidWlsdGlucycsIGV4Y25hbWUpXSA9ICgnZXhjZXB0aW9ucycsICdPU0Vycm9yJykKZGlmZiAtLWdpdCBhL0xpYi9fZHVtbXlfdGhyZWFkLnB5IGIvTGliL19kdW1teV90aHJlYWQucHkKaW5kZXggMTNiMWYyNi4uYjY3Y2ZiOSAxMDA2NDQKLS0tIGEvTGliL19kdW1teV90aHJlYWQucHkKKysrIGIvTGliL19kdW1teV90aHJlYWQucHkKQEAgLTgxLDYgKzgxLDEwIEBACiAgICAgICAgIHJhaXNlIGVycm9yKCJzZXR0aW5nIHRocmVhZCBzdGFjayBzaXplIG5vdCBzdXBwb3J0ZWQiKQogICAgIHJldHVybiAwCiAKK2RlZiBfc2V0X3NlbnRpbmVsKCk6CisgICAgIiIiRHVtbXkgaW1wbGVtZW50YXRpb24gb2YgX3RocmVhZC5fc2V0X3NlbnRpbmVsKCkuIiIiCisgICAgcmV0dXJuIExvY2tUeXBlKCkKKwogY2xhc3MgTG9ja1R5cGUob2JqZWN0KToKICAgICAiIiJDbGFzcyBpbXBsZW1lbnRpbmcgZHVtbXkgaW1wbGVtZW50YXRpb24gb2YgX3RocmVhZC5Mb2NrVHlwZS4KIApkaWZmIC0tZ2l0IGEvTGliL19vc3hfc3VwcG9ydC5weSBiL0xpYi9fb3N4X3N1cHBvcnQucHkKaW5kZXggNTBiMmQxNy4uYjA3ZTc1ZCAxMDA2NDQKLS0tIGEvTGliL19vc3hfc3VwcG9ydC5weQorKysgYi9MaWIvX29zeF9zdXBwb3J0LnB5CkBAIC0zOCw3ICszOCw3IEBACiAgICAgcGF0aHMgPSBwYXRoLnNwbGl0KG9zLnBhdGhzZXApCiAgICAgYmFzZSwgZXh0ID0gb3MucGF0aC5zcGxpdGV4dChleGVjdXRhYmxlKQogCi0gICAgaWYgKHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInIG9yIG9zLm5hbWUgPT0gJ29zMicpIGFuZCAoZXh0ICE9ICcuZXhlJyk6CisgICAgaWYgKHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInKSBhbmQgKGV4dCAhPSAnLmV4ZScpOgogICAgICAgICBleGVjdXRhYmxlID0gZXhlY3V0YWJsZSArICcuZXhlJwogCiAgICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKGV4ZWN1dGFibGUpOgpAQCAtOTQsNyArOTQsNyBAQAogICAgICAgICBfU1lTVEVNX1ZFUlNJT04gPSAnJwogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmID0gb3BlbignL1N5c3RlbS9MaWJyYXJ5L0NvcmVTZXJ2aWNlcy9TeXN0ZW1WZXJzaW9uLnBsaXN0JykKLSAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgIyBXZSdyZSBvbiBhIHBsYWluIGRhcndpbiBib3gsIGZhbGwgYmFjayB0byB0aGUgZGVmYXVsdAogICAgICAgICAgICAgIyBiZWhhdmlvdXIuCiAgICAgICAgICAgICBwYXNzCkBAIC0xODIsNyArMTgyLDcgQEAKICAgICAgICAgIyBDb21waWxlciBpcyBHQ0MsIGNoZWNrIGlmIGl0IGlzIExMVk0tR0NDCiAgICAgICAgIGRhdGEgPSBfcmVhZF9vdXRwdXQoIiclcycgLS12ZXJzaW9uIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChjYy5yZXBsYWNlKCInIiwgIidcIidcIiciKSwpKQotICAgICAgICBpZiAnbGx2bS1nY2MnIGluIGRhdGE6CisgICAgICAgIGlmIGRhdGEgYW5kICdsbHZtLWdjYycgaW4gZGF0YToKICAgICAgICAgICAgICMgRm91bmQgTExWTS1HQ0MsIGZhbGwgYmFjayB0byBjbGFuZwogICAgICAgICAgICAgY2MgPSBfZmluZF9idWlsZF90b29sKCdjbGFuZycpCiAKQEAgLTQ1MCw4ICs0NTAsMTYgQEAKICAgICAgICAgIyBjYXNlIGFuZCBkaXNhbGxvdyBpbnN0YWxscy4KICAgICAgICAgY2ZsYWdzID0gX2NvbmZpZ192YXJzLmdldChfSU5JVFBSRSsnQ0ZMQUdTJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jb25maWdfdmFycy5nZXQoJ0NGTEFHUycsICcnKSkKLSAgICAgICAgaWYgKChtYWNyZWxlYXNlICsgJy4nKSA+PSAnMTAuNC4nIGFuZAotICAgICAgICAgICAgJy1hcmNoJyBpbiBjZmxhZ3Muc3RyaXAoKSk6CisgICAgICAgIGlmIG1hY3JlbGVhc2U6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbWFjcmVsZWFzZSA9IHR1cGxlKGludChpKSBmb3IgaSBpbiBtYWNyZWxlYXNlLnNwbGl0KCcuJylbMDoyXSkKKyAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgIG1hY3JlbGVhc2UgPSAoMTAsIDApCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIGFzc3VtZSBubyB1bml2ZXJzYWwgc3VwcG9ydAorICAgICAgICAgICAgbWFjcmVsZWFzZSA9ICgxMCwgMCkKKworICAgICAgICBpZiAobWFjcmVsZWFzZSA+PSAoMTAsIDQpKSBhbmQgJy1hcmNoJyBpbiBjZmxhZ3Muc3RyaXAoKToKICAgICAgICAgICAgICMgVGhlIHVuaXZlcnNhbCBidWlsZCB3aWxsIGJ1aWxkIGZhdCBiaW5hcmllcywgYnV0IG5vdCBvbgogICAgICAgICAgICAgIyBzeXN0ZW1zIGJlZm9yZSAxMC40CiAKZGlmZiAtLWdpdCBhL0xpYi9fcHlpby5weSBiL0xpYi9fcHlpby5weQppbmRleCBhMGM0YjI1Li5mMWUzYTc5IDEwMDY0NAotLS0gYS9MaWIvX3B5aW8ucHkKKysrIGIvTGliL19weWlvLnB5CkBAIC0yNCw4ICsyNCw4IEBACiBERUZBVUxUX0JVRkZFUl9TSVpFID0gOCAqIDEwMjQgICMgYnl0ZXMKIAogIyBOT1RFOiBCYXNlIGNsYXNzZXMgZGVmaW5lZCBoZXJlIGFyZSByZWdpc3RlcmVkIHdpdGggdGhlICJvZmZpY2lhbCIgQUJDcwotIyBkZWZpbmVkIGluIGlvLnB5LiBXZSBkb24ndCB1c2UgcmVhbCBpbmhlcml0YW5jZSB0aG91Z2gsIGJlY2F1c2Ugd2UgZG9uJ3QKLSMgd2FudCB0byBpbmhlcml0IHRoZSBDIGltcGxlbWVudGF0aW9ucy4KKyMgZGVmaW5lZCBpbiBpby5weS4gV2UgZG9uJ3QgdXNlIHJlYWwgaW5oZXJpdGFuY2UgdGhvdWdoLCBiZWNhdXNlIHdlIGRvbid0IHdhbnQKKyMgdG8gaW5oZXJpdCB0aGUgQyBpbXBsZW1lbnRhdGlvbnMuCiAKICMgUmViaW5kIGZvciBjb21wYXRpYmlsaXR5CiBCbG9ja2luZ0lPRXJyb3IgPSBCbG9ja2luZ0lPRXJyb3IKQEAgLTM0LDcgKzM0LDcgQEAKIGRlZiBvcGVuKGZpbGUsIG1vZGU9InIiLCBidWZmZXJpbmc9LTEsIGVuY29kaW5nPU5vbmUsIGVycm9ycz1Ob25lLAogICAgICAgICAgbmV3bGluZT1Ob25lLCBjbG9zZWZkPVRydWUsIG9wZW5lcj1Ob25lKToKIAotICAgIHIiIiJPcGVuIGZpbGUgYW5kIHJldHVybiBhIHN0cmVhbS4gIFJhaXNlIElPRXJyb3IgdXBvbiBmYWlsdXJlLgorICAgIHIiIiJPcGVuIGZpbGUgYW5kIHJldHVybiBhIHN0cmVhbS4gIFJhaXNlIE9TRXJyb3IgdXBvbiBmYWlsdXJlLgogCiAgICAgZmlsZSBpcyBlaXRoZXIgYSB0ZXh0IG9yIGJ5dGUgc3RyaW5nIGdpdmluZyB0aGUgbmFtZSAoYW5kIHRoZSBwYXRoCiAgICAgaWYgdGhlIGZpbGUgaXNuJ3QgaW4gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkpIG9mIHRoZSBmaWxlIHRvCkBAIC02Miw4ICs2Miw3IEBACiAgICAgJ2InICAgICAgIGJpbmFyeSBtb2RlCiAgICAgJ3QnICAgICAgIHRleHQgbW9kZSAoZGVmYXVsdCkKICAgICAnKycgICAgICAgb3BlbiBhIGRpc2sgZmlsZSBmb3IgdXBkYXRpbmcgKHJlYWRpbmcgYW5kIHdyaXRpbmcpCi0gICAgJ1UnICAgICAgIHVuaXZlcnNhbCBuZXdsaW5lIG1vZGUgKGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eTsgdW5uZWVkZWQKLSAgICAgICAgICAgICAgZm9yIG5ldyBjb2RlKQorICAgICdVJyAgICAgICB1bml2ZXJzYWwgbmV3bGluZSBtb2RlIChkZXByZWNhdGVkKQogICAgID09PT09PT09PSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogICAgIFRoZSBkZWZhdWx0IG1vZGUgaXMgJ3J0JyAob3BlbiBmb3IgcmVhZGluZyB0ZXh0KS4gRm9yIGJpbmFyeSByYW5kb20KQEAgLTc5LDYgKzc4LDEwIEBACiAgICAgcmV0dXJuZWQgYXMgc3RyaW5ncywgdGhlIGJ5dGVzIGhhdmluZyBiZWVuIGZpcnN0IGRlY29kZWQgdXNpbmcgYQogICAgIHBsYXRmb3JtLWRlcGVuZGVudCBlbmNvZGluZyBvciB1c2luZyB0aGUgc3BlY2lmaWVkIGVuY29kaW5nIGlmIGdpdmVuLgogCisgICAgJ1UnIG1vZGUgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCByYWlzZSBhbiBleGNlcHRpb24gaW4gZnV0dXJlIHZlcnNpb25zCisgICAgb2YgUHl0aG9uLiAgSXQgaGFzIG5vIGVmZmVjdCBpbiBQeXRob24gMy4gIFVzZSBuZXdsaW5lIHRvIGNvbnRyb2wKKyAgICB1bml2ZXJzYWwgbmV3bGluZXMgbW9kZS4KKwogICAgIGJ1ZmZlcmluZyBpcyBhbiBvcHRpb25hbCBpbnRlZ2VyIHVzZWQgdG8gc2V0IHRoZSBidWZmZXJpbmcgcG9saWN5LgogICAgIFBhc3MgMCB0byBzd2l0Y2ggYnVmZmVyaW5nIG9mZiAob25seSBhbGxvd2VkIGluIGJpbmFyeSBtb2RlKSwgMSB0byBzZWxlY3QKICAgICBsaW5lIGJ1ZmZlcmluZyAob25seSB1c2FibGUgaW4gdGV4dCBtb2RlKSwgYW5kIGFuIGludGVnZXIgPiAxIHRvIGluZGljYXRlCkBAIC0xMjksNiArMTMyLDggQEAKICAgICBiZSBrZXB0IG9wZW4gd2hlbiB0aGUgZmlsZSBpcyBjbG9zZWQuIFRoaXMgZG9lcyBub3Qgd29yayB3aGVuIGEgZmlsZSBuYW1lIGlzCiAgICAgZ2l2ZW4gYW5kIG11c3QgYmUgVHJ1ZSBpbiB0aGF0IGNhc2UuCiAKKyAgICBUaGUgbmV3bHkgY3JlYXRlZCBmaWxlIGlzIG5vbi1pbmhlcml0YWJsZS4KKwogICAgIEEgY3VzdG9tIG9wZW5lciBjYW4gYmUgdXNlZCBieSBwYXNzaW5nIGEgY2FsbGFibGUgYXMgKm9wZW5lciouIFRoZQogICAgIHVuZGVybHlpbmcgZmlsZSBkZXNjcmlwdG9yIGZvciB0aGUgZmlsZSBvYmplY3QgaXMgdGhlbiBvYnRhaW5lZCBieSBjYWxsaW5nCiAgICAgKm9wZW5lciogd2l0aCAoKmZpbGUqLCAqZmxhZ3MqKS4gKm9wZW5lciogbXVzdCByZXR1cm4gYW4gb3BlbiBmaWxlCkBAIC0xNzIsNiArMTc3LDkgQEAKICAgICBpZiAiVSIgaW4gbW9kZXM6CiAgICAgICAgIGlmIGNyZWF0aW5nIG9yIHdyaXRpbmcgb3IgYXBwZW5kaW5nOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiY2FuJ3QgdXNlIFUgYW5kIHdyaXRpbmcgbW9kZSBhdCBvbmNlIikKKyAgICAgICAgaW1wb3J0IHdhcm5pbmdzCisgICAgICAgIHdhcm5pbmdzLndhcm4oIidVJyBtb2RlIGlzIGRlcHJlY2F0ZWQiLAorICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgMikKICAgICAgICAgcmVhZGluZyA9IFRydWUKICAgICBpZiB0ZXh0IGFuZCBiaW5hcnk6CiAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImNhbid0IGhhdmUgdGV4dCBhbmQgYmluYXJ5IG1vZGUgYXQgb25jZSIpCkBAIC0xOTIsMzggKzIwMCw0NSBAQAogICAgICAgICAgICAgICAgICAoYXBwZW5kaW5nIGFuZCAiYSIgb3IgIiIpICsKICAgICAgICAgICAgICAgICAgKHVwZGF0aW5nIGFuZCAiKyIgb3IgIiIpLAogICAgICAgICAgICAgICAgICBjbG9zZWZkLCBvcGVuZXI9b3BlbmVyKQotICAgIGxpbmVfYnVmZmVyaW5nID0gRmFsc2UKLSAgICBpZiBidWZmZXJpbmcgPT0gMSBvciBidWZmZXJpbmcgPCAwIGFuZCByYXcuaXNhdHR5KCk6Ci0gICAgICAgIGJ1ZmZlcmluZyA9IC0xCi0gICAgICAgIGxpbmVfYnVmZmVyaW5nID0gVHJ1ZQotICAgIGlmIGJ1ZmZlcmluZyA8IDA6Ci0gICAgICAgIGJ1ZmZlcmluZyA9IERFRkFVTFRfQlVGRkVSX1NJWkUKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgYnMgPSBvcy5mc3RhdChyYXcuZmlsZW5vKCkpLnN0X2Jsa3NpemUKLSAgICAgICAgZXhjZXB0IChvcy5lcnJvciwgQXR0cmlidXRlRXJyb3IpOgotICAgICAgICAgICAgcGFzcworICAgIHJlc3VsdCA9IHJhdworICAgIHRyeToKKyAgICAgICAgbGluZV9idWZmZXJpbmcgPSBGYWxzZQorICAgICAgICBpZiBidWZmZXJpbmcgPT0gMSBvciBidWZmZXJpbmcgPCAwIGFuZCByYXcuaXNhdHR5KCk6CisgICAgICAgICAgICBidWZmZXJpbmcgPSAtMQorICAgICAgICAgICAgbGluZV9idWZmZXJpbmcgPSBUcnVlCisgICAgICAgIGlmIGJ1ZmZlcmluZyA8IDA6CisgICAgICAgICAgICBidWZmZXJpbmcgPSBERUZBVUxUX0JVRkZFUl9TSVpFCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgYnMgPSBvcy5mc3RhdChyYXcuZmlsZW5vKCkpLnN0X2Jsa3NpemUKKyAgICAgICAgICAgIGV4Y2VwdCAoT1NFcnJvciwgQXR0cmlidXRlRXJyb3IpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgYnMgPiAxOgorICAgICAgICAgICAgICAgICAgICBidWZmZXJpbmcgPSBicworICAgICAgICBpZiBidWZmZXJpbmcgPCAwOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiaW52YWxpZCBidWZmZXJpbmcgc2l6ZSIpCisgICAgICAgIGlmIGJ1ZmZlcmluZyA9PSAwOgorICAgICAgICAgICAgaWYgYmluYXJ5OgorICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImNhbid0IGhhdmUgdW5idWZmZXJlZCB0ZXh0IEkvTyIpCisgICAgICAgIGlmIHVwZGF0aW5nOgorICAgICAgICAgICAgYnVmZmVyID0gQnVmZmVyZWRSYW5kb20ocmF3LCBidWZmZXJpbmcpCisgICAgICAgIGVsaWYgY3JlYXRpbmcgb3Igd3JpdGluZyBvciBhcHBlbmRpbmc6CisgICAgICAgICAgICBidWZmZXIgPSBCdWZmZXJlZFdyaXRlcihyYXcsIGJ1ZmZlcmluZykKKyAgICAgICAgZWxpZiByZWFkaW5nOgorICAgICAgICAgICAgYnVmZmVyID0gQnVmZmVyZWRSZWFkZXIocmF3LCBidWZmZXJpbmcpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBpZiBicyA+IDE6Ci0gICAgICAgICAgICAgICAgYnVmZmVyaW5nID0gYnMKLSAgICBpZiBidWZmZXJpbmcgPCAwOgotICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJpbnZhbGlkIGJ1ZmZlcmluZyBzaXplIikKLSAgICBpZiBidWZmZXJpbmcgPT0gMDoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInVua25vd24gbW9kZTogJXIiICUgbW9kZSkKKyAgICAgICAgcmVzdWx0ID0gYnVmZmVyCiAgICAgICAgIGlmIGJpbmFyeToKLSAgICAgICAgICAgIHJldHVybiByYXcKLSAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiY2FuJ3QgaGF2ZSB1bmJ1ZmZlcmVkIHRleHQgSS9PIikKLSAgICBpZiB1cGRhdGluZzoKLSAgICAgICAgYnVmZmVyID0gQnVmZmVyZWRSYW5kb20ocmF3LCBidWZmZXJpbmcpCi0gICAgZWxpZiBjcmVhdGluZyBvciB3cml0aW5nIG9yIGFwcGVuZGluZzoKLSAgICAgICAgYnVmZmVyID0gQnVmZmVyZWRXcml0ZXIocmF3LCBidWZmZXJpbmcpCi0gICAgZWxpZiByZWFkaW5nOgotICAgICAgICBidWZmZXIgPSBCdWZmZXJlZFJlYWRlcihyYXcsIGJ1ZmZlcmluZykKLSAgICBlbHNlOgotICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ1bmtub3duIG1vZGU6ICVyIiAlIG1vZGUpCi0gICAgaWYgYmluYXJ5OgotICAgICAgICByZXR1cm4gYnVmZmVyCi0gICAgdGV4dCA9IFRleHRJT1dyYXBwZXIoYnVmZmVyLCBlbmNvZGluZywgZXJyb3JzLCBuZXdsaW5lLCBsaW5lX2J1ZmZlcmluZykKLSAgICB0ZXh0Lm1vZGUgPSBtb2RlCi0gICAgcmV0dXJuIHRleHQKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQKKyAgICAgICAgdGV4dCA9IFRleHRJT1dyYXBwZXIoYnVmZmVyLCBlbmNvZGluZywgZXJyb3JzLCBuZXdsaW5lLCBsaW5lX2J1ZmZlcmluZykKKyAgICAgICAgcmVzdWx0ID0gdGV4dAorICAgICAgICB0ZXh0Lm1vZGUgPSBtb2RlCisgICAgICAgIHJldHVybiByZXN1bHQKKyAgICBleGNlcHQ6CisgICAgICAgIHJlc3VsdC5jbG9zZSgpCisgICAgICAgIHJhaXNlCiAKIAogY2xhc3MgRG9jRGVzY3JpcHRvcjoKQEAgLTI1NCw3ICsyNjksNyBAQAogdHJ5OgogICAgIFVuc3VwcG9ydGVkT3BlcmF0aW9uID0gaW8uVW5zdXBwb3J0ZWRPcGVyYXRpb24KIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICBjbGFzcyBVbnN1cHBvcnRlZE9wZXJhdGlvbihWYWx1ZUVycm9yLCBJT0Vycm9yKToKKyAgICBjbGFzcyBVbnN1cHBvcnRlZE9wZXJhdGlvbihWYWx1ZUVycm9yLCBPU0Vycm9yKToKICAgICAgICAgcGFzcwogCiAKQEAgLTI3OCw3ICsyOTMsNyBAQAogICAgIHJlYWRpbnRvKSBuZWVkZWQuIFRleHQgSS9PIGNsYXNzZXMgd29yayB3aXRoIHN0ciBkYXRhLgogCiAgICAgTm90ZSB0aGF0IGNhbGxpbmcgYW55IG1ldGhvZCAoZXZlbiBpbnF1aXJpZXMpIG9uIGEgY2xvc2VkIHN0cmVhbSBpcwotICAgIHVuZGVmaW5lZC4gSW1wbGVtZW50YXRpb25zIG1heSByYWlzZSBJT0Vycm9yIGluIHRoaXMgY2FzZS4KKyAgICB1bmRlZmluZWQuIEltcGxlbWVudGF0aW9ucyBtYXkgcmFpc2UgT1NFcnJvciBpbiB0aGlzIGNhc2UuCiAKICAgICBJT0Jhc2UgKGFuZCBpdHMgc3ViY2xhc3Nlcykgc3VwcG9ydCB0aGUgaXRlcmF0b3IgcHJvdG9jb2wsIG1lYW5pbmcKICAgICB0aGF0IGFuIElPQmFzZSBvYmplY3QgY2FuIGJlIGl0ZXJhdGVkIG92ZXIgeWllbGRpbmcgdGhlIGxpbmVzIGluIGEKQEAgLTI5NCw3ICszMDksNyBAQAogICAgICMjIyBJbnRlcm5hbCAjIyMKIAogICAgIGRlZiBfdW5zdXBwb3J0ZWQoc2VsZiwgbmFtZSk6Ci0gICAgICAgICIiIkludGVybmFsOiByYWlzZSBhbiBJT0Vycm9yIGV4Y2VwdGlvbiBmb3IgdW5zdXBwb3J0ZWQgb3BlcmF0aW9ucy4iIiIKKyAgICAgICAgIiIiSW50ZXJuYWw6IHJhaXNlIGFuIE9TRXJyb3IgZXhjZXB0aW9uIGZvciB1bnN1cHBvcnRlZCBvcGVyYXRpb25zLiIiIgogICAgICAgICByYWlzZSBVbnN1cHBvcnRlZE9wZXJhdGlvbigiJXMuJXMoKSBub3Qgc3VwcG9ydGVkIiAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgbmFtZSkpCiAKQEAgLTQ0MSw3ICs0NTYsNyBAQAogICAgIGRlZiBmaWxlbm8oc2VsZik6CiAgICAgICAgICIiIlJldHVybnMgdW5kZXJseWluZyBmaWxlIGRlc2NyaXB0b3IgKGFuIGludCkgaWYgb25lIGV4aXN0cy4KIAotICAgICAgICBBbiBJT0Vycm9yIGlzIHJhaXNlZCBpZiB0aGUgSU8gb2JqZWN0IGRvZXMgbm90IHVzZSBhIGZpbGUgZGVzY3JpcHRvci4KKyAgICAgICAgQW4gT1NFcnJvciBpcyByYWlzZWQgaWYgdGhlIElPIG9iamVjdCBkb2VzIG5vdCB1c2UgYSBmaWxlIGRlc2NyaXB0b3IuCiAgICAgICAgICIiIgogICAgICAgICBzZWxmLl91bnN1cHBvcnRlZCgiZmlsZW5vIikKIApAQCAtNDU1LDExICs0NzAsMTEgQEAKIAogICAgICMjIyBSZWFkbGluZVtzXSBhbmQgd3JpdGVsaW5lcyAjIyMKIAotICAgIGRlZiByZWFkbGluZShzZWxmLCBsaW1pdD0tMSk6CisgICAgZGVmIHJlYWRsaW5lKHNlbGYsIHNpemU9LTEpOgogICAgICAgICByIiIiUmVhZCBhbmQgcmV0dXJuIGEgbGluZSBvZiBieXRlcyBmcm9tIHRoZSBzdHJlYW0uCiAKLSAgICAgICAgSWYgbGltaXQgaXMgc3BlY2lmaWVkLCBhdCBtb3N0IGxpbWl0IGJ5dGVzIHdpbGwgYmUgcmVhZC4KLSAgICAgICAgTGltaXQgc2hvdWxkIGJlIGFuIGludC4KKyAgICAgICAgSWYgc2l6ZSBpcyBzcGVjaWZpZWQsIGF0IG1vc3Qgc2l6ZSBieXRlcyB3aWxsIGJlIHJlYWQuCisgICAgICAgIFNpemUgc2hvdWxkIGJlIGFuIGludC4KIAogICAgICAgICBUaGUgbGluZSB0ZXJtaW5hdG9yIGlzIGFsd2F5cyBiJ1xuJyBmb3IgYmluYXJ5IGZpbGVzOyBmb3IgdGV4dAogICAgICAgICBmaWxlcywgdGhlIG5ld2xpbmVzIGFyZ3VtZW50IHRvIG9wZW4gY2FuIGJlIHVzZWQgdG8gc2VsZWN0IHRoZSBsaW5lCkBAIC00NzIsMTggKzQ4NywxOCBAQAogICAgICAgICAgICAgICAgIGlmIG5vdCByZWFkYWhlYWQ6CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxCiAgICAgICAgICAgICAgICAgbiA9IChyZWFkYWhlYWQuZmluZChiIlxuIikgKyAxKSBvciBsZW4ocmVhZGFoZWFkKQotICAgICAgICAgICAgICAgIGlmIGxpbWl0ID49IDA6Ci0gICAgICAgICAgICAgICAgICAgIG4gPSBtaW4obiwgbGltaXQpCisgICAgICAgICAgICAgICAgaWYgc2l6ZSA+PSAwOgorICAgICAgICAgICAgICAgICAgICBuID0gbWluKG4sIHNpemUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG4KICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGRlZiBucmVhZGFoZWFkKCk6CiAgICAgICAgICAgICAgICAgcmV0dXJuIDEKLSAgICAgICAgaWYgbGltaXQgaXMgTm9uZToKLSAgICAgICAgICAgIGxpbWl0ID0gLTEKLSAgICAgICAgZWxpZiBub3QgaXNpbnN0YW5jZShsaW1pdCwgaW50KToKLSAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigibGltaXQgbXVzdCBiZSBhbiBpbnRlZ2VyIikKKyAgICAgICAgaWYgc2l6ZSBpcyBOb25lOgorICAgICAgICAgICAgc2l6ZSA9IC0xCisgICAgICAgIGVsaWYgbm90IGlzaW5zdGFuY2Uoc2l6ZSwgaW50KToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigic2l6ZSBtdXN0IGJlIGFuIGludGVnZXIiKQogICAgICAgICByZXMgPSBieXRlYXJyYXkoKQotICAgICAgICB3aGlsZSBsaW1pdCA8IDAgb3IgbGVuKHJlcykgPCBsaW1pdDoKKyAgICAgICAgd2hpbGUgc2l6ZSA8IDAgb3IgbGVuKHJlcykgPCBzaXplOgogICAgICAgICAgICAgYiA9IHNlbGYucmVhZChucmVhZGFoZWFkKCkpCiAgICAgICAgICAgICBpZiBub3QgYjoKICAgICAgICAgICAgICAgICBicmVhawpAQCAtNTQyLDE3ICs1NTcsMTcgQEAKICAgICAjIHByaW1pdGl2ZSBvcGVyYXRpb24sIGJ1dCB0aGF0IHdvdWxkIGxlYWQgdG8gbmFzdHkgcmVjdXJzaW9uIGluIGNhc2UKICAgICAjIGEgc3ViY2xhc3MgZG9lc24ndCBpbXBsZW1lbnQgZWl0aGVyLikKIAotICAgIGRlZiByZWFkKHNlbGYsIG49LTEpOgotICAgICAgICAiIiJSZWFkIGFuZCByZXR1cm4gdXAgdG8gbiBieXRlcywgd2hlcmUgbiBpcyBhbiBpbnQuCisgICAgZGVmIHJlYWQoc2VsZiwgc2l6ZT0tMSk6CisgICAgICAgICIiIlJlYWQgYW5kIHJldHVybiB1cCB0byBzaXplIGJ5dGVzLCB3aGVyZSBzaXplIGlzIGFuIGludC4KIAogICAgICAgICBSZXR1cm5zIGFuIGVtcHR5IGJ5dGVzIG9iamVjdCBvbiBFT0YsIG9yIE5vbmUgaWYgdGhlIG9iamVjdCBpcwogICAgICAgICBzZXQgbm90IHRvIGJsb2NrIGFuZCBoYXMgbm8gZGF0YSB0byByZWFkLgogICAgICAgICAiIiIKLSAgICAgICAgaWYgbiBpcyBOb25lOgotICAgICAgICAgICAgbiA9IC0xCi0gICAgICAgIGlmIG4gPCAwOgorICAgICAgICBpZiBzaXplIGlzIE5vbmU6CisgICAgICAgICAgICBzaXplID0gLTEKKyAgICAgICAgaWYgc2l6ZSA8IDA6CiAgICAgICAgICAgICByZXR1cm4gc2VsZi5yZWFkYWxsKCkKLSAgICAgICAgYiA9IGJ5dGVhcnJheShuLl9faW5kZXhfXygpKQorICAgICAgICBiID0gYnl0ZWFycmF5KHNpemUuX19pbmRleF9fKCkpCiAgICAgICAgIG4gPSBzZWxmLnJlYWRpbnRvKGIpCiAgICAgICAgIGlmIG4gaXMgTm9uZToKICAgICAgICAgICAgIHJldHVybiBOb25lCkBAIC02MTAsOCArNjI1LDggQEAKICAgICBpbXBsZW1lbnRhdGlvbiwgYnV0IHdyYXAgb25lLgogICAgICIiIgogCi0gICAgZGVmIHJlYWQoc2VsZiwgbj1Ob25lKToKLSAgICAgICAgIiIiUmVhZCBhbmQgcmV0dXJuIHVwIHRvIG4gYnl0ZXMsIHdoZXJlIG4gaXMgYW4gaW50LgorICAgIGRlZiByZWFkKHNlbGYsIHNpemU9Tm9uZSk6CisgICAgICAgICIiIlJlYWQgYW5kIHJldHVybiB1cCB0byBzaXplIGJ5dGVzLCB3aGVyZSBzaXplIGlzIGFuIGludC4KIAogICAgICAgICBJZiB0aGUgYXJndW1lbnQgaXMgb21pdHRlZCwgTm9uZSwgb3IgbmVnYXRpdmUsIHJlYWRzIGFuZAogICAgICAgICByZXR1cm5zIGFsbCBkYXRhIHVudGlsIEVPRi4KQEAgLTYzMCw5ICs2NDUsOSBAQAogICAgICAgICAiIiIKICAgICAgICAgc2VsZi5fdW5zdXBwb3J0ZWQoInJlYWQiKQogCi0gICAgZGVmIHJlYWQxKHNlbGYsIG49Tm9uZSk6Ci0gICAgICAgICIiIlJlYWQgdXAgdG8gbiBieXRlcyB3aXRoIGF0IG1vc3Qgb25lIHJlYWQoKSBzeXN0ZW0gY2FsbCwKLSAgICAgICAgd2hlcmUgbiBpcyBhbiBpbnQuCisgICAgZGVmIHJlYWQxKHNlbGYsIHNpemU9Tm9uZSk6CisgICAgICAgICIiIlJlYWQgdXAgdG8gc2l6ZSBieXRlcyB3aXRoIGF0IG1vc3Qgb25lIHJlYWQoKSBzeXN0ZW0gY2FsbCwKKyAgICAgICAgd2hlcmUgc2l6ZSBpcyBhbiBpbnQuCiAgICAgICAgICIiIgogICAgICAgICBzZWxmLl91bnN1cHBvcnRlZCgicmVhZDEiKQogCkBAIC02OTksMTMgKzcxNCwxMyBAQAogICAgIGRlZiBzZWVrKHNlbGYsIHBvcywgd2hlbmNlPTApOgogICAgICAgICBuZXdfcG9zaXRpb24gPSBzZWxmLnJhdy5zZWVrKHBvcywgd2hlbmNlKQogICAgICAgICBpZiBuZXdfcG9zaXRpb24gPCAwOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigic2VlaygpIHJldHVybmVkIGFuIGludmFsaWQgcG9zaXRpb24iKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigic2VlaygpIHJldHVybmVkIGFuIGludmFsaWQgcG9zaXRpb24iKQogICAgICAgICByZXR1cm4gbmV3X3Bvc2l0aW9uCiAKICAgICBkZWYgdGVsbChzZWxmKToKICAgICAgICAgcG9zID0gc2VsZi5yYXcudGVsbCgpCiAgICAgICAgIGlmIHBvcyA8IDA6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCJ0ZWxsKCkgcmV0dXJuZWQgYW4gaW52YWxpZCBwb3NpdGlvbiIpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJ0ZWxsKCkgcmV0dXJuZWQgYW4gaW52YWxpZCBwb3NpdGlvbiIpCiAgICAgICAgIHJldHVybiBwb3MKIAogICAgIGRlZiB0cnVuY2F0ZShzZWxmLCBwb3M9Tm9uZSk6CkBAIC03NzgsNyArNzkzLDcgQEAKICAgICAgICAgY2xzbmFtZSA9IHNlbGYuX19jbGFzc19fLl9fbmFtZV9fCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG5hbWUgPSBzZWxmLm5hbWUKLSAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgICAgICAgcmV0dXJuICI8X3B5aW8uezB9PiIuZm9ybWF0KGNsc25hbWUpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICByZXR1cm4gIjxfcHlpby57MH0gbmFtZT17MSFyfT4iLmZvcm1hdChjbHNuYW1lLCBuYW1lKQpAQCAtODE4LDI2ICs4MzMsMzIgQEAKICAgICBkZWYgZ2V0YnVmZmVyKHNlbGYpOgogICAgICAgICAiIiJSZXR1cm4gYSByZWFkYWJsZSBhbmQgd3JpdGFibGUgdmlldyBvZiB0aGUgYnVmZmVyLgogICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5jbG9zZWQ6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJnZXRidWZmZXIgb24gY2xvc2VkIGZpbGUiKQogICAgICAgICByZXR1cm4gbWVtb3J5dmlldyhzZWxmLl9idWZmZXIpCiAKLSAgICBkZWYgcmVhZChzZWxmLCBuPU5vbmUpOgorICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgc2VsZi5fYnVmZmVyLmNsZWFyKCkKKyAgICAgICAgc3VwZXIoKS5jbG9zZSgpCisKKyAgICBkZWYgcmVhZChzZWxmLCBzaXplPU5vbmUpOgogICAgICAgICBpZiBzZWxmLmNsb3NlZDoKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInJlYWQgZnJvbSBjbG9zZWQgZmlsZSIpCi0gICAgICAgIGlmIG4gaXMgTm9uZToKLSAgICAgICAgICAgIG4gPSAtMQotICAgICAgICBpZiBuIDwgMDoKLSAgICAgICAgICAgIG4gPSBsZW4oc2VsZi5fYnVmZmVyKQorICAgICAgICBpZiBzaXplIGlzIE5vbmU6CisgICAgICAgICAgICBzaXplID0gLTEKKyAgICAgICAgaWYgc2l6ZSA8IDA6CisgICAgICAgICAgICBzaXplID0gbGVuKHNlbGYuX2J1ZmZlcikKICAgICAgICAgaWYgbGVuKHNlbGYuX2J1ZmZlcikgPD0gc2VsZi5fcG9zOgogICAgICAgICAgICAgcmV0dXJuIGIiIgotICAgICAgICBuZXdwb3MgPSBtaW4obGVuKHNlbGYuX2J1ZmZlciksIHNlbGYuX3BvcyArIG4pCisgICAgICAgIG5ld3BvcyA9IG1pbihsZW4oc2VsZi5fYnVmZmVyKSwgc2VsZi5fcG9zICsgc2l6ZSkKICAgICAgICAgYiA9IHNlbGYuX2J1ZmZlcltzZWxmLl9wb3MgOiBuZXdwb3NdCiAgICAgICAgIHNlbGYuX3BvcyA9IG5ld3BvcwogICAgICAgICByZXR1cm4gYnl0ZXMoYikKIAotICAgIGRlZiByZWFkMShzZWxmLCBuKToKKyAgICBkZWYgcmVhZDEoc2VsZiwgc2l6ZSk6CiAgICAgICAgICIiIlRoaXMgaXMgdGhlIHNhbWUgYXMgcmVhZC4KICAgICAgICAgIiIiCi0gICAgICAgIHJldHVybiBzZWxmLnJlYWQobikKKyAgICAgICAgcmV0dXJuIHNlbGYucmVhZChzaXplKQogCiAgICAgZGVmIHdyaXRlKHNlbGYsIGIpOgogICAgICAgICBpZiBzZWxmLmNsb3NlZDoKQEAgLTkyNyw3ICs5NDgsNyBAQAogICAgICAgICAiIiJDcmVhdGUgYSBuZXcgYnVmZmVyZWQgcmVhZGVyIHVzaW5nIHRoZSBnaXZlbiByZWFkYWJsZSByYXcgSU8gb2JqZWN0LgogICAgICAgICAiIiIKICAgICAgICAgaWYgbm90IHJhdy5yZWFkYWJsZSgpOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcignInJhdyIgYXJndW1lbnQgbXVzdCBiZSByZWFkYWJsZS4nKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcignInJhdyIgYXJndW1lbnQgbXVzdCBiZSByZWFkYWJsZS4nKQogCiAgICAgICAgIF9CdWZmZXJlZElPTWl4aW4uX19pbml0X18oc2VsZiwgcmF3KQogICAgICAgICBpZiBidWZmZXJfc2l6ZSA8PSAwOgpAQCAtOTQwLDE4ICs5NjEsMTggQEAKICAgICAgICAgc2VsZi5fcmVhZF9idWYgPSBiIiIKICAgICAgICAgc2VsZi5fcmVhZF9wb3MgPSAwCiAKLSAgICBkZWYgcmVhZChzZWxmLCBuPU5vbmUpOgotICAgICAgICAiIiJSZWFkIG4gYnl0ZXMuCisgICAgZGVmIHJlYWQoc2VsZiwgc2l6ZT1Ob25lKToKKyAgICAgICAgIiIiUmVhZCBzaXplIGJ5dGVzLgogCi0gICAgICAgIFJldHVybnMgZXhhY3RseSBuIGJ5dGVzIG9mIGRhdGEgdW5sZXNzIHRoZSB1bmRlcmx5aW5nIHJhdyBJTworICAgICAgICBSZXR1cm5zIGV4YWN0bHkgc2l6ZSBieXRlcyBvZiBkYXRhIHVubGVzcyB0aGUgdW5kZXJseWluZyByYXcgSU8KICAgICAgICAgc3RyZWFtIHJlYWNoZXMgRU9GIG9yIGlmIHRoZSBjYWxsIHdvdWxkIGJsb2NrIGluIG5vbi1ibG9ja2luZwotICAgICAgICBtb2RlLiBJZiBuIGlzIG5lZ2F0aXZlLCByZWFkIHVudGlsIEVPRiBvciB1bnRpbCByZWFkKCkgd291bGQKKyAgICAgICAgbW9kZS4gSWYgc2l6ZSBpcyBuZWdhdGl2ZSwgcmVhZCB1bnRpbCBFT0Ygb3IgdW50aWwgcmVhZCgpIHdvdWxkCiAgICAgICAgIGJsb2NrLgogICAgICAgICAiIiIKLSAgICAgICAgaWYgbiBpcyBub3QgTm9uZSBhbmQgbiA8IC0xOgorICAgICAgICBpZiBzaXplIGlzIG5vdCBOb25lIGFuZCBzaXplIDwgLTE6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJpbnZhbGlkIG51bWJlciBvZiBieXRlcyB0byByZWFkIikKICAgICAgICAgd2l0aCBzZWxmLl9yZWFkX2xvY2s6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5fcmVhZF91bmxvY2tlZChuKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3JlYWRfdW5sb2NrZWQoc2l6ZSkKIAogICAgIGRlZiBfcmVhZF91bmxvY2tlZChzZWxmLCBuPU5vbmUpOgogICAgICAgICBub2RhdGFfdmFsID0gYiIiCkBAIC0xMDExLDcgKzEwMzIsNyBAQAogICAgICAgICBzZWxmLl9yZWFkX3BvcyA9IDAKICAgICAgICAgcmV0dXJuIG91dFs6bl0gaWYgb3V0IGVsc2Ugbm9kYXRhX3ZhbAogCi0gICAgZGVmIHBlZWsoc2VsZiwgbj0wKToKKyAgICBkZWYgcGVlayhzZWxmLCBzaXplPTApOgogICAgICAgICAiIiJSZXR1cm5zIGJ1ZmZlcmVkIGJ5dGVzIHdpdGhvdXQgYWR2YW5jaW5nIHRoZSBwb3NpdGlvbi4KIAogICAgICAgICBUaGUgYXJndW1lbnQgaW5kaWNhdGVzIGEgZGVzaXJlZCBtaW5pbWFsIG51bWJlciBvZiBieXRlczsgd2UKQEAgLTEwMTksNyArMTA0MCw3IEBACiAgICAgICAgIHRoYW4gc2VsZi5idWZmZXJfc2l6ZS4KICAgICAgICAgIiIiCiAgICAgICAgIHdpdGggc2VsZi5fcmVhZF9sb2NrOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3BlZWtfdW5sb2NrZWQobikKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9wZWVrX3VubG9ja2VkKHNpemUpCiAKICAgICBkZWYgX3BlZWtfdW5sb2NrZWQoc2VsZiwgbj0wKToKICAgICAgICAgd2FudCA9IG1pbihuLCBzZWxmLmJ1ZmZlcl9zaXplKQpAQCAtMTAzNywxOCArMTA1OCwxOCBAQAogICAgICAgICAgICAgICAgIHNlbGYuX3JlYWRfcG9zID0gMAogICAgICAgICByZXR1cm4gc2VsZi5fcmVhZF9idWZbc2VsZi5fcmVhZF9wb3M6XQogCi0gICAgZGVmIHJlYWQxKHNlbGYsIG4pOgotICAgICAgICAiIiJSZWFkcyB1cCB0byBuIGJ5dGVzLCB3aXRoIGF0IG1vc3Qgb25lIHJlYWQoKSBzeXN0ZW0gY2FsbC4iIiIKLSAgICAgICAgIyBSZXR1cm5zIHVwIHRvIG4gYnl0ZXMuICBJZiBhdCBsZWFzdCBvbmUgYnl0ZSBpcyBidWZmZXJlZCwgd2UKKyAgICBkZWYgcmVhZDEoc2VsZiwgc2l6ZSk6CisgICAgICAgICIiIlJlYWRzIHVwIHRvIHNpemUgYnl0ZXMsIHdpdGggYXQgbW9zdCBvbmUgcmVhZCgpIHN5c3RlbSBjYWxsLiIiIgorICAgICAgICAjIFJldHVybnMgdXAgdG8gc2l6ZSBieXRlcy4gIElmIGF0IGxlYXN0IG9uZSBieXRlIGlzIGJ1ZmZlcmVkLCB3ZQogICAgICAgICAjIG9ubHkgcmV0dXJuIGJ1ZmZlcmVkIGJ5dGVzLiAgT3RoZXJ3aXNlLCB3ZSBkbyBvbmUgcmF3IHJlYWQuCi0gICAgICAgIGlmIG4gPCAwOgorICAgICAgICBpZiBzaXplIDwgMDoKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIm51bWJlciBvZiBieXRlcyB0byByZWFkIG11c3QgYmUgcG9zaXRpdmUiKQotICAgICAgICBpZiBuID09IDA6CisgICAgICAgIGlmIHNpemUgPT0gMDoKICAgICAgICAgICAgIHJldHVybiBiIiIKICAgICAgICAgd2l0aCBzZWxmLl9yZWFkX2xvY2s6CiAgICAgICAgICAgICBzZWxmLl9wZWVrX3VubG9ja2VkKDEpCiAgICAgICAgICAgICByZXR1cm4gc2VsZi5fcmVhZF91bmxvY2tlZCgKLSAgICAgICAgICAgICAgICBtaW4obiwgbGVuKHNlbGYuX3JlYWRfYnVmKSAtIHNlbGYuX3JlYWRfcG9zKSkKKyAgICAgICAgICAgICAgICBtaW4oc2l6ZSwgbGVuKHNlbGYuX3JlYWRfYnVmKSAtIHNlbGYuX3JlYWRfcG9zKSkKIAogICAgIGRlZiB0ZWxsKHNlbGYpOgogICAgICAgICByZXR1cm4gX0J1ZmZlcmVkSU9NaXhpbi50ZWxsKHNlbGYpIC0gbGVuKHNlbGYuX3JlYWRfYnVmKSArIHNlbGYuX3JlYWRfcG9zCkBAIC0xMDc0LDcgKzEwOTUsNyBAQAogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJhdywgYnVmZmVyX3NpemU9REVGQVVMVF9CVUZGRVJfU0laRSk6CiAgICAgICAgIGlmIG5vdCByYXcud3JpdGFibGUoKToKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoJyJyYXciIGFyZ3VtZW50IG11c3QgYmUgd3JpdGFibGUuJykKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoJyJyYXciIGFyZ3VtZW50IG11c3QgYmUgd3JpdGFibGUuJykKIAogICAgICAgICBfQnVmZmVyZWRJT01peGluLl9faW5pdF9fKHNlbGYsIHJhdykKICAgICAgICAgaWYgYnVmZmVyX3NpemUgPD0gMDoKQEAgLTExMzgsNyArMTE1OSw3IEBACiAgICAgICAgICAgICAgICAgICAgIGVycm5vLkVBR0FJTiwKICAgICAgICAgICAgICAgICAgICAgIndyaXRlIGNvdWxkIG5vdCBjb21wbGV0ZSB3aXRob3V0IGJsb2NraW5nIiwgMCkKICAgICAgICAgICAgIGlmIG4gPiBsZW4oc2VsZi5fd3JpdGVfYnVmKSBvciBuIDwgMDoKLSAgICAgICAgICAgICAgICByYWlzZSBJT0Vycm9yKCJ3cml0ZSgpIHJldHVybmVkIGluY29ycmVjdCBudW1iZXIgb2YgYnl0ZXMiKQorICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoIndyaXRlKCkgcmV0dXJuZWQgaW5jb3JyZWN0IG51bWJlciBvZiBieXRlcyIpCiAgICAgICAgICAgICBkZWwgc2VsZi5fd3JpdGVfYnVmWzpuXQogCiAgICAgZGVmIHRlbGwoc2VsZik6CkBAIC0xMTc0LDE4ICsxMTk1LDE4IEBACiAgICAgICAgIFRoZSBhcmd1bWVudHMgYXJlIHR3byBSYXdJTyBpbnN0YW5jZXMuCiAgICAgICAgICIiIgogICAgICAgICBpZiBub3QgcmVhZGVyLnJlYWRhYmxlKCk6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCcicmVhZGVyIiBhcmd1bWVudCBtdXN0IGJlIHJlYWRhYmxlLicpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCcicmVhZGVyIiBhcmd1bWVudCBtdXN0IGJlIHJlYWRhYmxlLicpCiAKICAgICAgICAgaWYgbm90IHdyaXRlci53cml0YWJsZSgpOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcignIndyaXRlciIgYXJndW1lbnQgbXVzdCBiZSB3cml0YWJsZS4nKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcignIndyaXRlciIgYXJndW1lbnQgbXVzdCBiZSB3cml0YWJsZS4nKQogCiAgICAgICAgIHNlbGYucmVhZGVyID0gQnVmZmVyZWRSZWFkZXIocmVhZGVyLCBidWZmZXJfc2l6ZSkKICAgICAgICAgc2VsZi53cml0ZXIgPSBCdWZmZXJlZFdyaXRlcih3cml0ZXIsIGJ1ZmZlcl9zaXplKQogCi0gICAgZGVmIHJlYWQoc2VsZiwgbj1Ob25lKToKLSAgICAgICAgaWYgbiBpcyBOb25lOgotICAgICAgICAgICAgbiA9IC0xCi0gICAgICAgIHJldHVybiBzZWxmLnJlYWRlci5yZWFkKG4pCisgICAgZGVmIHJlYWQoc2VsZiwgc2l6ZT1Ob25lKToKKyAgICAgICAgaWYgc2l6ZSBpcyBOb25lOgorICAgICAgICAgICAgc2l6ZSA9IC0xCisgICAgICAgIHJldHVybiBzZWxmLnJlYWRlci5yZWFkKHNpemUpCiAKICAgICBkZWYgcmVhZGludG8oc2VsZiwgYik6CiAgICAgICAgIHJldHVybiBzZWxmLnJlYWRlci5yZWFkaW50byhiKQpAQCAtMTE5MywxMSArMTIxNCwxMSBAQAogICAgIGRlZiB3cml0ZShzZWxmLCBiKToKICAgICAgICAgcmV0dXJuIHNlbGYud3JpdGVyLndyaXRlKGIpCiAKLSAgICBkZWYgcGVlayhzZWxmLCBuPTApOgotICAgICAgICByZXR1cm4gc2VsZi5yZWFkZXIucGVlayhuKQorICAgIGRlZiBwZWVrKHNlbGYsIHNpemU9MCk6CisgICAgICAgIHJldHVybiBzZWxmLnJlYWRlci5wZWVrKHNpemUpCiAKLSAgICBkZWYgcmVhZDEoc2VsZiwgbik6Ci0gICAgICAgIHJldHVybiBzZWxmLnJlYWRlci5yZWFkMShuKQorICAgIGRlZiByZWFkMShzZWxmLCBzaXplKToKKyAgICAgICAgcmV0dXJuIHNlbGYucmVhZGVyLnJlYWQxKHNpemUpCiAKICAgICBkZWYgcmVhZGFibGUoc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLnJlYWRlci5yZWFkYWJsZSgpCkBAIC0xMjA5LDggKzEyMzAsMTAgQEAKICAgICAgICAgcmV0dXJuIHNlbGYud3JpdGVyLmZsdXNoKCkKIAogICAgIGRlZiBjbG9zZShzZWxmKToKLSAgICAgICAgc2VsZi53cml0ZXIuY2xvc2UoKQotICAgICAgICBzZWxmLnJlYWRlci5jbG9zZSgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYud3JpdGVyLmNsb3NlKCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYucmVhZGVyLmNsb3NlKCkKIAogICAgIGRlZiBpc2F0dHkoc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLnJlYWRlci5pc2F0dHkoKSBvciBzZWxmLndyaXRlci5pc2F0dHkoKQpAQCAtMTI0OCw3ICsxMjcxLDcgQEAKICAgICAgICAgd2l0aCBzZWxmLl9yZWFkX2xvY2s6CiAgICAgICAgICAgICBzZWxmLl9yZXNldF9yZWFkX2J1ZigpCiAgICAgICAgIGlmIHBvcyA8IDA6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCJzZWVrKCkgcmV0dXJuZWQgaW52YWxpZCBwb3NpdGlvbiIpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJzZWVrKCkgcmV0dXJuZWQgaW52YWxpZCBwb3NpdGlvbiIpCiAgICAgICAgIHJldHVybiBwb3MKIAogICAgIGRlZiB0ZWxsKHNlbGYpOgpAQCAtMTI2MywyMyArMTI4NiwyMyBAQAogICAgICAgICAjIFVzZSBzZWVrIHRvIGZsdXNoIHRoZSByZWFkIGJ1ZmZlci4KICAgICAgICAgcmV0dXJuIEJ1ZmZlcmVkV3JpdGVyLnRydW5jYXRlKHNlbGYsIHBvcykKIAotICAgIGRlZiByZWFkKHNlbGYsIG49Tm9uZSk6Ci0gICAgICAgIGlmIG4gaXMgTm9uZToKLSAgICAgICAgICAgIG4gPSAtMQorICAgIGRlZiByZWFkKHNlbGYsIHNpemU9Tm9uZSk6CisgICAgICAgIGlmIHNpemUgaXMgTm9uZToKKyAgICAgICAgICAgIHNpemUgPSAtMQogICAgICAgICBzZWxmLmZsdXNoKCkKLSAgICAgICAgcmV0dXJuIEJ1ZmZlcmVkUmVhZGVyLnJlYWQoc2VsZiwgbikKKyAgICAgICAgcmV0dXJuIEJ1ZmZlcmVkUmVhZGVyLnJlYWQoc2VsZiwgc2l6ZSkKIAogICAgIGRlZiByZWFkaW50byhzZWxmLCBiKToKICAgICAgICAgc2VsZi5mbHVzaCgpCiAgICAgICAgIHJldHVybiBCdWZmZXJlZFJlYWRlci5yZWFkaW50byhzZWxmLCBiKQogCi0gICAgZGVmIHBlZWsoc2VsZiwgbj0wKToKKyAgICBkZWYgcGVlayhzZWxmLCBzaXplPTApOgogICAgICAgICBzZWxmLmZsdXNoKCkKLSAgICAgICAgcmV0dXJuIEJ1ZmZlcmVkUmVhZGVyLnBlZWsoc2VsZiwgbikKKyAgICAgICAgcmV0dXJuIEJ1ZmZlcmVkUmVhZGVyLnBlZWsoc2VsZiwgc2l6ZSkKIAotICAgIGRlZiByZWFkMShzZWxmLCBuKToKKyAgICBkZWYgcmVhZDEoc2VsZiwgc2l6ZSk6CiAgICAgICAgIHNlbGYuZmx1c2goKQotICAgICAgICByZXR1cm4gQnVmZmVyZWRSZWFkZXIucmVhZDEoc2VsZiwgbikKKyAgICAgICAgcmV0dXJuIEJ1ZmZlcmVkUmVhZGVyLnJlYWQxKHNlbGYsIHNpemUpCiAKICAgICBkZWYgd3JpdGUoc2VsZiwgYik6CiAgICAgICAgIGlmIHNlbGYuX3JlYWRfYnVmOgpAQCAtMTI5OSwxMSArMTMyMiwxMSBAQAogICAgIGFyZSBpbW11dGFibGUuIFRoZXJlIGlzIG5vIHB1YmxpYyBjb25zdHJ1Y3Rvci4KICAgICAiIiIKIAotICAgIGRlZiByZWFkKHNlbGYsIG49LTEpOgotICAgICAgICAiIiJSZWFkIGF0IG1vc3QgbiBjaGFyYWN0ZXJzIGZyb20gc3RyZWFtLCB3aGVyZSBuIGlzIGFuIGludC4KKyAgICBkZWYgcmVhZChzZWxmLCBzaXplPS0xKToKKyAgICAgICAgIiIiUmVhZCBhdCBtb3N0IHNpemUgY2hhcmFjdGVycyBmcm9tIHN0cmVhbSwgd2hlcmUgc2l6ZSBpcyBhbiBpbnQuCiAKLSAgICAgICAgUmVhZCBmcm9tIHVuZGVybHlpbmcgYnVmZmVyIHVudGlsIHdlIGhhdmUgbiBjaGFyYWN0ZXJzIG9yIHdlIGhpdCBFT0YuCi0gICAgICAgIElmIG4gaXMgbmVnYXRpdmUgb3Igb21pdHRlZCwgcmVhZCB1bnRpbCBFT0YuCisgICAgICAgIFJlYWQgZnJvbSB1bmRlcmx5aW5nIGJ1ZmZlciB1bnRpbCB3ZSBoYXZlIHNpemUgY2hhcmFjdGVycyBvciB3ZSBoaXQgRU9GLgorICAgICAgICBJZiBzaXplIGlzIG5lZ2F0aXZlIG9yIG9taXR0ZWQsIHJlYWQgdW50aWwgRU9GLgogCiAgICAgICAgIFJldHVybnMgYSBzdHJpbmcuCiAgICAgICAgICIiIgpAQCAtMTU0NiwxMyArMTU2OSwxMyBAQAogICAgICAgICByZXN1bHQgPSAiPF9weWlvLlRleHRJT1dyYXBwZXIiCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG5hbWUgPSBzZWxmLm5hbWUKLSAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgICAgICAgcGFzcwogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmVzdWx0ICs9ICIgbmFtZT17MCFyfSIuZm9ybWF0KG5hbWUpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG1vZGUgPSBzZWxmLm1vZGUKLSAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgICAgICAgcGFzcwogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmVzdWx0ICs9ICIgbW9kZT17MCFyfSIuZm9ybWF0KG1vZGUpCkBAIC0xNzMyLDcgKzE3NTUsNyBAQAogICAgICAgICBpZiBub3Qgc2VsZi5fc2Vla2FibGU6CiAgICAgICAgICAgICByYWlzZSBVbnN1cHBvcnRlZE9wZXJhdGlvbigidW5kZXJseWluZyBzdHJlYW0gaXMgbm90IHNlZWthYmxlIikKICAgICAgICAgaWYgbm90IHNlbGYuX3RlbGxpbmc6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCJ0ZWxsaW5nIHBvc2l0aW9uIGRpc2FibGVkIGJ5IG5leHQoKSBjYWxsIikKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoInRlbGxpbmcgcG9zaXRpb24gZGlzYWJsZWQgYnkgbmV4dCgpIGNhbGwiKQogICAgICAgICBzZWxmLmZsdXNoKCkKICAgICAgICAgcG9zaXRpb24gPSBzZWxmLmJ1ZmZlci50ZWxsKCkKICAgICAgICAgZGVjb2RlciA9IHNlbGYuX2RlY29kZXIKQEAgLTE4MTksNyArMTg0Miw3IEBACiAgICAgICAgICAgICAgICAgY2hhcnNfZGVjb2RlZCArPSBsZW4oZGVjb2Rlci5kZWNvZGUoYicnLCBmaW5hbD1UcnVlKSkKICAgICAgICAgICAgICAgICBuZWVkX2VvZiA9IDEKICAgICAgICAgICAgICAgICBpZiBjaGFyc19kZWNvZGVkIDwgY2hhcnNfdG9fc2tpcDoKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigiY2FuJ3QgcmVjb25zdHJ1Y3QgbG9naWNhbCBmaWxlIHBvc2l0aW9uIikKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigiY2FuJ3QgcmVjb25zdHJ1Y3QgbG9naWNhbCBmaWxlIHBvc2l0aW9uIikKIAogICAgICAgICAgICAgIyBUaGUgcmV0dXJuZWQgY29va2llIGNvcnJlc3BvbmRzIHRvIHRoZSBsYXN0IHNhZmUgc3RhcnQgcG9pbnQuCiAgICAgICAgICAgICByZXR1cm4gc2VsZi5fcGFja19jb29raWUoCkBAIC0xODQyLDYgKzE4NjUsMTkgQEAKICAgICAgICAgcmV0dXJuIGJ1ZmZlcgogCiAgICAgZGVmIHNlZWsoc2VsZiwgY29va2llLCB3aGVuY2U9MCk6CisgICAgICAgIGRlZiBfcmVzZXRfZW5jb2Rlcihwb3NpdGlvbik6CisgICAgICAgICAgICAiIiJSZXNldCB0aGUgZW5jb2RlciAobWVyZWx5IHVzZWZ1bCBmb3IgcHJvcGVyIEJPTSBoYW5kbGluZykiIiIKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBlbmNvZGVyID0gc2VsZi5fZW5jb2RlciBvciBzZWxmLl9nZXRfZW5jb2RlcigpCisgICAgICAgICAgICBleGNlcHQgTG9va3VwRXJyb3I6CisgICAgICAgICAgICAgICAgIyBTb21ldGltZXMgdGhlIGVuY29kZXIgZG9lc24ndCBleGlzdAorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgcG9zaXRpb24gIT0gMDoKKyAgICAgICAgICAgICAgICAgICAgZW5jb2Rlci5zZXRzdGF0ZSgwKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGVuY29kZXIucmVzZXQoKQorCiAgICAgICAgIGlmIHNlbGYuY2xvc2VkOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigidGVsbCBvbiBjbG9zZWQgZmlsZSIpCiAgICAgICAgIGlmIG5vdCBzZWxmLl9zZWVrYWJsZToKQEAgLTE4NjIsNiArMTg5OCw3IEBACiAgICAgICAgICAgICBzZWxmLl9zbmFwc2hvdCA9IE5vbmUKICAgICAgICAgICAgIGlmIHNlbGYuX2RlY29kZXI6CiAgICAgICAgICAgICAgICAgc2VsZi5fZGVjb2Rlci5yZXNldCgpCisgICAgICAgICAgICBfcmVzZXRfZW5jb2Rlcihwb3NpdGlvbikKICAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbgogICAgICAgICBpZiB3aGVuY2UgIT0gMDoKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInVuc3VwcG9ydGVkIHdoZW5jZSAoJXIpIiAlICh3aGVuY2UsKSkKQEAgLTE4OTYsMzIgKzE5MzMsMjIgQEAKIAogICAgICAgICAgICAgIyBTa2lwIGNoYXJzX3RvX3NraXAgb2YgdGhlIGRlY29kZWQgY2hhcmFjdGVycy4KICAgICAgICAgICAgIGlmIGxlbihzZWxmLl9kZWNvZGVkX2NoYXJzKSA8IGNoYXJzX3RvX3NraXA6Ci0gICAgICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigiY2FuJ3QgcmVzdG9yZSBsb2dpY2FsIGZpbGUgcG9zaXRpb24iKQorICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoImNhbid0IHJlc3RvcmUgbG9naWNhbCBmaWxlIHBvc2l0aW9uIikKICAgICAgICAgICAgIHNlbGYuX2RlY29kZWRfY2hhcnNfdXNlZCA9IGNoYXJzX3RvX3NraXAKIAotICAgICAgICAjIEZpbmFsbHksIHJlc2V0IHRoZSBlbmNvZGVyIChtZXJlbHkgdXNlZnVsIGZvciBwcm9wZXIgQk9NIGhhbmRsaW5nKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBlbmNvZGVyID0gc2VsZi5fZW5jb2RlciBvciBzZWxmLl9nZXRfZW5jb2RlcigpCi0gICAgICAgIGV4Y2VwdCBMb29rdXBFcnJvcjoKLSAgICAgICAgICAgICMgU29tZXRpbWVzIHRoZSBlbmNvZGVyIGRvZXNuJ3QgZXhpc3QKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGlmIGNvb2tpZSAhPSAwOgotICAgICAgICAgICAgICAgIGVuY29kZXIuc2V0c3RhdGUoMCkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgZW5jb2Rlci5yZXNldCgpCisgICAgICAgIF9yZXNldF9lbmNvZGVyKGNvb2tpZSkKICAgICAgICAgcmV0dXJuIGNvb2tpZQogCi0gICAgZGVmIHJlYWQoc2VsZiwgbj1Ob25lKToKKyAgICBkZWYgcmVhZChzZWxmLCBzaXplPU5vbmUpOgogICAgICAgICBzZWxmLl9jaGVja1JlYWRhYmxlKCkKLSAgICAgICAgaWYgbiBpcyBOb25lOgotICAgICAgICAgICAgbiA9IC0xCisgICAgICAgIGlmIHNpemUgaXMgTm9uZToKKyAgICAgICAgICAgIHNpemUgPSAtMQogICAgICAgICBkZWNvZGVyID0gc2VsZi5fZGVjb2RlciBvciBzZWxmLl9nZXRfZGVjb2RlcigpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIG4uX19pbmRleF9fCisgICAgICAgICAgICBzaXplLl9faW5kZXhfXwogICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3IgYXMgZXJyOgogICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJhbiBpbnRlZ2VyIGlzIHJlcXVpcmVkIikgZnJvbSBlcnIKLSAgICAgICAgaWYgbiA8IDA6CisgICAgICAgIGlmIHNpemUgPCAwOgogICAgICAgICAgICAgIyBSZWFkIGV2ZXJ5dGhpbmcuCiAgICAgICAgICAgICByZXN1bHQgPSAoc2VsZi5fZ2V0X2RlY29kZWRfY2hhcnMoKSArCiAgICAgICAgICAgICAgICAgICAgICAgZGVjb2Rlci5kZWNvZGUoc2VsZi5idWZmZXIucmVhZCgpLCBmaW5hbD1UcnVlKSkKQEAgLTE5MjksMTIgKzE5NTYsMTIgQEAKICAgICAgICAgICAgIHNlbGYuX3NuYXBzaG90ID0gTm9uZQogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAogICAgICAgICBlbHNlOgotICAgICAgICAgICAgIyBLZWVwIHJlYWRpbmcgY2h1bmtzIHVudGlsIHdlIGhhdmUgbiBjaGFyYWN0ZXJzIHRvIHJldHVybi4KKyAgICAgICAgICAgICMgS2VlcCByZWFkaW5nIGNodW5rcyB1bnRpbCB3ZSBoYXZlIHNpemUgY2hhcmFjdGVycyB0byByZXR1cm4uCiAgICAgICAgICAgICBlb2YgPSBGYWxzZQotICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5fZ2V0X2RlY29kZWRfY2hhcnMobikKLSAgICAgICAgICAgIHdoaWxlIGxlbihyZXN1bHQpIDwgbiBhbmQgbm90IGVvZjoKKyAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuX2dldF9kZWNvZGVkX2NoYXJzKHNpemUpCisgICAgICAgICAgICB3aGlsZSBsZW4ocmVzdWx0KSA8IHNpemUgYW5kIG5vdCBlb2Y6CiAgICAgICAgICAgICAgICAgZW9mID0gbm90IHNlbGYuX3JlYWRfY2h1bmsoKQotICAgICAgICAgICAgICAgIHJlc3VsdCArPSBzZWxmLl9nZXRfZGVjb2RlZF9jaGFycyhuIC0gbGVuKHJlc3VsdCkpCisgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHNlbGYuX2dldF9kZWNvZGVkX2NoYXJzKHNpemUgLSBsZW4ocmVzdWx0KSkKICAgICAgICAgICAgIHJldHVybiByZXN1bHQKIAogICAgIGRlZiBfX25leHRfXyhzZWxmKToKQEAgLTE5NDYsMTMgKzE5NzMsMTMgQEAKICAgICAgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24KICAgICAgICAgcmV0dXJuIGxpbmUKIAotICAgIGRlZiByZWFkbGluZShzZWxmLCBsaW1pdD1Ob25lKToKKyAgICBkZWYgcmVhZGxpbmUoc2VsZiwgc2l6ZT1Ob25lKToKICAgICAgICAgaWYgc2VsZi5jbG9zZWQ6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJyZWFkIGZyb20gY2xvc2VkIGZpbGUiKQotICAgICAgICBpZiBsaW1pdCBpcyBOb25lOgotICAgICAgICAgICAgbGltaXQgPSAtMQotICAgICAgICBlbGlmIG5vdCBpc2luc3RhbmNlKGxpbWl0LCBpbnQpOgotICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJsaW1pdCBtdXN0IGJlIGFuIGludGVnZXIiKQorICAgICAgICBpZiBzaXplIGlzIE5vbmU6CisgICAgICAgICAgICBzaXplID0gLTEKKyAgICAgICAgZWxpZiBub3QgaXNpbnN0YW5jZShzaXplLCBpbnQpOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJzaXplIG11c3QgYmUgYW4gaW50ZWdlciIpCiAKICAgICAgICAgIyBHcmFiIGFsbCB0aGUgZGVjb2RlZCB0ZXh0ICh3ZSB3aWxsIHJld2luZCBhbnkgZXh0cmEgYml0cyBsYXRlcikuCiAgICAgICAgIGxpbmUgPSBzZWxmLl9nZXRfZGVjb2RlZF9jaGFycygpCkBAIC0yMDExLDggKzIwMzgsOCBAQAogICAgICAgICAgICAgICAgICAgICBlbmRwb3MgPSBwb3MgKyBsZW4oc2VsZi5fcmVhZG5sKQogICAgICAgICAgICAgICAgICAgICBicmVhawogCi0gICAgICAgICAgICBpZiBsaW1pdCA+PSAwIGFuZCBsZW4obGluZSkgPj0gbGltaXQ6Ci0gICAgICAgICAgICAgICAgZW5kcG9zID0gbGltaXQgICMgcmVhY2hlZCBsZW5ndGggbGltaXQKKyAgICAgICAgICAgIGlmIHNpemUgPj0gMCBhbmQgbGVuKGxpbmUpID49IHNpemU6CisgICAgICAgICAgICAgICAgZW5kcG9zID0gc2l6ZSAgIyByZWFjaGVkIGxlbmd0aCBzaXplCiAgICAgICAgICAgICAgICAgYnJlYWsKIAogICAgICAgICAgICAgIyBObyBsaW5lIGVuZGluZyBzZWVuIHlldCAtIGdldCBtb3JlIGRhdGEnCkBAIC0yMDI3LDggKzIwNTQsOCBAQAogICAgICAgICAgICAgICAgIHNlbGYuX3NuYXBzaG90ID0gTm9uZQogICAgICAgICAgICAgICAgIHJldHVybiBsaW5lCiAKLSAgICAgICAgaWYgbGltaXQgPj0gMCBhbmQgZW5kcG9zID4gbGltaXQ6Ci0gICAgICAgICAgICBlbmRwb3MgPSBsaW1pdCAgIyBkb24ndCBleGNlZWQgbGltaXQKKyAgICAgICAgaWYgc2l6ZSA+PSAwIGFuZCBlbmRwb3MgPiBzaXplOgorICAgICAgICAgICAgZW5kcG9zID0gc2l6ZSAgIyBkb24ndCBleGNlZWQgc2l6ZQogCiAgICAgICAgICMgUmV3aW5kIF9kZWNvZGVkX2NoYXJzIHRvIGp1c3QgYWZ0ZXIgdGhlIGxpbmUgZW5kaW5nIHdlIGZvdW5kLgogICAgICAgICBzZWxmLl9yZXdpbmRfZGVjb2RlZF9jaGFycyhsZW4obGluZSkgLSBlbmRwb3MpCkBAIC0yMDU5LDcgKzIwODYsNiBAQAogICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoaW5pdGlhbF92YWx1ZSwgc3RyKToKICAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoImluaXRpYWxfdmFsdWUgbXVzdCBiZSBzdHIgb3IgTm9uZSwgbm90IHswfSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1hdCh0eXBlKGluaXRpYWxfdmFsdWUpLl9fbmFtZV9fKSkKLSAgICAgICAgICAgICAgICBpbml0aWFsX3ZhbHVlID0gc3RyKGluaXRpYWxfdmFsdWUpCiAgICAgICAgICAgICBzZWxmLndyaXRlKGluaXRpYWxfdmFsdWUpCiAgICAgICAgICAgICBzZWxmLnNlZWsoMCkKIApAQCAtMjA3NSw3ICsyMTAxLDcgQEAKIAogICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgICAgICAgIyBUZXh0SU9XcmFwcGVyIHRlbGxzIHRoZSBlbmNvZGluZyBpbiBpdHMgcmVwci4gSW4gU3RyaW5nSU8sCi0gICAgICAgICMgdGhhdCdzIGEgaW1wbGVtZW50YXRpb24gZGV0YWlsLgorICAgICAgICAjIHRoYXQncyBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwuCiAgICAgICAgIHJldHVybiBvYmplY3QuX19yZXByX18oc2VsZikKIAogICAgIEBwcm9wZXJ0eQpkaWZmIC0tZ2l0IGEvTGliL19zaXRlYnVpbHRpbnMucHkgYi9MaWIvX3NpdGVidWlsdGlucy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjljZjRiCi0tLSAvZGV2L251bGwKKysrIGIvTGliL19zaXRlYnVpbHRpbnMucHkKQEAgLTAsMCArMSwxMDMgQEAKKyIiIgorVGhlIG9iamVjdHMgdXNlZCBieSB0aGUgc2l0ZSBtb2R1bGUgdG8gYWRkIGN1c3RvbSBidWlsdGlucy4KKyIiIgorCisjIFRob3NlIG9iamVjdHMgYXJlIGFsbW9zdCBpbW1vcnRhbCBhbmQgdGhleSBrZWVwIGEgcmVmZXJlbmNlIHRvIHRoZWlyIG1vZHVsZQorIyBnbG9iYWxzLiAgRGVmaW5pbmcgdGhlbSBpbiB0aGUgc2l0ZSBtb2R1bGUgd291bGQga2VlcCB0b28gbWFueSByZWZlcmVuY2VzCisjIGFsaXZlLgorIyBOb3RlIHRoaXMgbWVhbnMgdGhpcyBtb2R1bGUgc2hvdWxkIGFsc28gYXZvaWQga2VlcCB0aGluZ3MgYWxpdmUgaW4gaXRzCisjIGdsb2JhbHMuCisKK2ltcG9ydCBzeXMKKworY2xhc3MgUXVpdHRlcihvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBlb2YpOgorICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCisgICAgICAgIHNlbGYuZW9mID0gZW9mCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gJ1VzZSAlcygpIG9yICVzIHRvIGV4aXQnICUgKHNlbGYubmFtZSwgc2VsZi5lb2YpCisgICAgZGVmIF9fY2FsbF9fKHNlbGYsIGNvZGU9Tm9uZSk6CisgICAgICAgICMgU2hlbGxzIGxpa2UgSURMRSBjYXRjaCB0aGUgU3lzdGVtRXhpdCwgYnV0IGxpc3RlbiB3aGVuIHRoZWlyCisgICAgICAgICMgc3RkaW4gd3JhcHBlciBpcyBjbG9zZWQuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN5cy5zdGRpbi5jbG9zZSgpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgcmFpc2UgU3lzdGVtRXhpdChjb2RlKQorCisKK2NsYXNzIF9QcmludGVyKG9iamVjdCk6CisgICAgIiIiaW50ZXJhY3RpdmUgcHJvbXB0IG9iamVjdHMgZm9yIHByaW50aW5nIHRoZSBsaWNlbnNlIHRleHQsIGEgbGlzdCBvZgorICAgIGNvbnRyaWJ1dG9ycyBhbmQgdGhlIGNvcHlyaWdodCBub3RpY2UuIiIiCisKKyAgICBNQVhMSU5FUyA9IDIzCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgZGF0YSwgZmlsZXM9KCksIGRpcnM9KCkpOgorICAgICAgICBpbXBvcnQgb3MKKyAgICAgICAgc2VsZi5fX25hbWUgPSBuYW1lCisgICAgICAgIHNlbGYuX19kYXRhID0gZGF0YQorICAgICAgICBzZWxmLl9fbGluZXMgPSBOb25lCisgICAgICAgIHNlbGYuX19maWxlbmFtZXMgPSBbb3MucGF0aC5qb2luKGRpciwgZmlsZW5hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGRpciBpbiBkaXJzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGZpbGVuYW1lIGluIGZpbGVzXQorCisgICAgZGVmIF9fc2V0dXAoc2VsZik6CisgICAgICAgIGlmIHNlbGYuX19saW5lczoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBkYXRhID0gTm9uZQorICAgICAgICBmb3IgZmlsZW5hbWUgaW4gc2VsZi5fX2ZpbGVuYW1lczoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICJyIikgYXMgZnA6CisgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBmcC5yZWFkKCkKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBpZiBub3QgZGF0YToKKyAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9fZGF0YQorICAgICAgICBzZWxmLl9fbGluZXMgPSBkYXRhLnNwbGl0KCdcbicpCisgICAgICAgIHNlbGYuX19saW5lY250ID0gbGVuKHNlbGYuX19saW5lcykKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgc2VsZi5fX3NldHVwKCkKKyAgICAgICAgaWYgbGVuKHNlbGYuX19saW5lcykgPD0gc2VsZi5NQVhMSU5FUzoKKyAgICAgICAgICAgIHJldHVybiAiXG4iLmpvaW4oc2VsZi5fX2xpbmVzKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuICJUeXBlICVzKCkgdG8gc2VlIHRoZSBmdWxsICVzIHRleHQiICUgKChzZWxmLl9fbmFtZSwpKjIpCisKKyAgICBkZWYgX19jYWxsX18oc2VsZik6CisgICAgICAgIHNlbGYuX19zZXR1cCgpCisgICAgICAgIHByb21wdCA9ICdIaXQgUmV0dXJuIGZvciBtb3JlLCBvciBxIChhbmQgUmV0dXJuKSB0byBxdWl0OiAnCisgICAgICAgIGxpbmVubyA9IDAKKyAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShsaW5lbm8sIGxpbmVubyArIHNlbGYuTUFYTElORVMpOgorICAgICAgICAgICAgICAgICAgICBwcmludChzZWxmLl9fbGluZXNbaV0pCisgICAgICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBsaW5lbm8gKz0gc2VsZi5NQVhMSU5FUworICAgICAgICAgICAgICAgIGtleSA9IE5vbmUKKyAgICAgICAgICAgICAgICB3aGlsZSBrZXkgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAga2V5ID0gaW5wdXQocHJvbXB0KQorICAgICAgICAgICAgICAgICAgICBpZiBrZXkgbm90IGluICgnJywgJ3EnKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9IE5vbmUKKyAgICAgICAgICAgICAgICBpZiBrZXkgPT0gJ3EnOgorICAgICAgICAgICAgICAgICAgICBicmVhaworCisKK2NsYXNzIF9IZWxwZXIob2JqZWN0KToKKyAgICAiIiJEZWZpbmUgdGhlIGJ1aWx0aW4gJ2hlbHAnLgorCisgICAgVGhpcyBpcyBhIHdyYXBwZXIgYXJvdW5kIHB5ZG9jLmhlbHAgdGhhdCBwcm92aWRlcyBhIGhlbHBmdWwgbWVzc2FnZQorICAgIHdoZW4gJ2hlbHAnIGlzIHR5cGVkIGF0IHRoZSBQeXRob24gaW50ZXJhY3RpdmUgcHJvbXB0LgorCisgICAgQ2FsbGluZyBoZWxwKCkgYXQgdGhlIFB5dGhvbiBwcm9tcHQgc3RhcnRzIGFuIGludGVyYWN0aXZlIGhlbHAgc2Vzc2lvbi4KKyAgICBDYWxsaW5nIGhlbHAodGhpbmcpIHByaW50cyBoZWxwIGZvciB0aGUgcHl0aG9uIG9iamVjdCAndGhpbmcnLgorICAgICIiIgorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIlR5cGUgaGVscCgpIGZvciBpbnRlcmFjdGl2ZSBoZWxwLCAiIFwKKyAgICAgICAgICAgICAgICJvciBoZWxwKG9iamVjdCkgZm9yIGhlbHAgYWJvdXQgb2JqZWN0LiIKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgKmFyZ3MsICoqa3dkcyk6CisgICAgICAgIGltcG9ydCBweWRvYworICAgICAgICByZXR1cm4gcHlkb2MuaGVscCgqYXJncywgKiprd2RzKQpkaWZmIC0tZ2l0IGEvTGliL19zdHJwdGltZS5weSBiL0xpYi9fc3RycHRpbWUucHkKaW5kZXggOTA1OGE2OS4uNmQ2NDg1NiAxMDA2NDQKLS0tIGEvTGliL19zdHJwdGltZS5weQorKysgYi9MaWIvX3N0cnB0aW1lLnB5CkBAIC0xNCwxNCArMTQsMTQgQEAKIGltcG9ydCBsb2NhbGUKIGltcG9ydCBjYWxlbmRhcgogZnJvbSByZSBpbXBvcnQgY29tcGlsZSBhcyByZV9jb21waWxlCi1mcm9tIHJlIGltcG9ydCBJR05PUkVDQVNFLCBBU0NJSQorZnJvbSByZSBpbXBvcnQgSUdOT1JFQ0FTRQogZnJvbSByZSBpbXBvcnQgZXNjYXBlIGFzIHJlX2VzY2FwZQogZnJvbSBkYXRldGltZSBpbXBvcnQgKGRhdGUgYXMgZGF0ZXRpbWVfZGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICB0aW1lZGVsdGEgYXMgZGF0ZXRpbWVfdGltZWRlbHRhLAogICAgICAgICAgICAgICAgICAgICAgIHRpbWV6b25lIGFzIGRhdGV0aW1lX3RpbWV6b25lKQogdHJ5OgogICAgIGZyb20gX3RocmVhZCBpbXBvcnQgYWxsb2NhdGVfbG9jayBhcyBfdGhyZWFkX2FsbG9jYXRlX2xvY2sKLWV4Y2VwdDoKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICBmcm9tIF9kdW1teV90aHJlYWQgaW1wb3J0IGFsbG9jYXRlX2xvY2sgYXMgX3RocmVhZF9hbGxvY2F0ZV9sb2NrCiAKIF9fYWxsX18gPSBbXQpAQCAtNzcsNiArNzcsOCBAQAogICAgICAgICBzZWxmLl9fY2FsY19kYXRlX3RpbWUoKQogICAgICAgICBpZiBfZ2V0bGFuZygpICE9IHNlbGYubGFuZzoKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImxvY2FsZSBjaGFuZ2VkIGR1cmluZyBpbml0aWFsaXphdGlvbiIpCisgICAgICAgIGlmIHRpbWUudHpuYW1lICE9IHNlbGYudHpuYW1lIG9yIHRpbWUuZGF5bGlnaHQgIT0gc2VsZi5kYXlsaWdodDoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInRpbWV6b25lIGNoYW5nZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uIikKIAogICAgIGRlZiBfX3BhZChzZWxmLCBzZXEsIGZyb250KToKICAgICAgICAgIyBBZGQgJycgdG8gc2VxIHRvIGVpdGhlciB0aGUgZnJvbnQgKGlzIFRydWUpLCBlbHNlIHRoZSBiYWNrLgpAQCAtMTYxLDE1ICsxNjMsMTcgQEAKIAogICAgIGRlZiBfX2NhbGNfdGltZXpvbmUoc2VsZik6CiAgICAgICAgICMgU2V0IHNlbGYudGltZXpvbmUgYnkgdXNpbmcgdGltZS50em5hbWUuCi0gICAgICAgICMgRG8gbm90IHdvcnJ5IGFib3V0IHBvc3NpYmlsaXR5IG9mIHRpbWUudHpuYW1lWzBdID09IHRpbWV0em5hbWVbMV0KLSAgICAgICAgIyBhbmQgdGltZS5kYXlsaWdodDsgaGFuZGxlIHRoYXQgaW4gc3RycHRpbWUgLgorICAgICAgICAjIERvIG5vdCB3b3JyeSBhYm91dCBwb3NzaWJpbGl0eSBvZiB0aW1lLnR6bmFtZVswXSA9PSB0aW1lLnR6bmFtZVsxXQorICAgICAgICAjIGFuZCB0aW1lLmRheWxpZ2h0OyBoYW5kbGUgdGhhdCBpbiBzdHJwdGltZS4KICAgICAgICAgdHJ5OgogICAgICAgICAgICAgdGltZS50enNldCgpCiAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgbm9fc2F2aW5nID0gZnJvemVuc2V0KFsidXRjIiwgImdtdCIsIHRpbWUudHpuYW1lWzBdLmxvd2VyKCldKQotICAgICAgICBpZiB0aW1lLmRheWxpZ2h0OgotICAgICAgICAgICAgaGFzX3NhdmluZyA9IGZyb3plbnNldChbdGltZS50em5hbWVbMV0ubG93ZXIoKV0pCisgICAgICAgIHNlbGYudHpuYW1lID0gdGltZS50em5hbWUKKyAgICAgICAgc2VsZi5kYXlsaWdodCA9IHRpbWUuZGF5bGlnaHQKKyAgICAgICAgbm9fc2F2aW5nID0gZnJvemVuc2V0KFsidXRjIiwgImdtdCIsIHNlbGYudHpuYW1lWzBdLmxvd2VyKCldKQorICAgICAgICBpZiBzZWxmLmRheWxpZ2h0OgorICAgICAgICAgICAgaGFzX3NhdmluZyA9IGZyb3plbnNldChbc2VsZi50em5hbWVbMV0ubG93ZXIoKV0pCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBoYXNfc2F2aW5nID0gZnJvemVuc2V0KCkKICAgICAgICAgc2VsZi50aW1lem9uZSA9IChub19zYXZpbmcsIGhhc19zYXZpbmcpCkBAIC0zMDgsMTIgKzMxMiwxNSBAQAogICAgIGdsb2JhbCBfVGltZVJFX2NhY2hlLCBfcmVnZXhfY2FjaGUKICAgICB3aXRoIF9jYWNoZV9sb2NrOgogCi0gICAgICAgIGlmIF9nZXRsYW5nKCkgIT0gX1RpbWVSRV9jYWNoZS5sb2NhbGVfdGltZS5sYW5nOgorICAgICAgICBsb2NhbGVfdGltZSA9IF9UaW1lUkVfY2FjaGUubG9jYWxlX3RpbWUKKyAgICAgICAgaWYgKF9nZXRsYW5nKCkgIT0gbG9jYWxlX3RpbWUubGFuZyBvcgorICAgICAgICAgICAgdGltZS50em5hbWUgIT0gbG9jYWxlX3RpbWUudHpuYW1lIG9yCisgICAgICAgICAgICB0aW1lLmRheWxpZ2h0ICE9IGxvY2FsZV90aW1lLmRheWxpZ2h0KToKICAgICAgICAgICAgIF9UaW1lUkVfY2FjaGUgPSBUaW1lUkUoKQogICAgICAgICAgICAgX3JlZ2V4X2NhY2hlLmNsZWFyKCkKKyAgICAgICAgICAgIGxvY2FsZV90aW1lID0gX1RpbWVSRV9jYWNoZS5sb2NhbGVfdGltZQogICAgICAgICBpZiBsZW4oX3JlZ2V4X2NhY2hlKSA+IF9DQUNIRV9NQVhfU0laRToKICAgICAgICAgICAgIF9yZWdleF9jYWNoZS5jbGVhcigpCi0gICAgICAgIGxvY2FsZV90aW1lID0gX1RpbWVSRV9jYWNoZS5sb2NhbGVfdGltZQogICAgICAgICBmb3JtYXRfcmVnZXggPSBfcmVnZXhfY2FjaGUuZ2V0KGZvcm1hdCkKICAgICAgICAgaWYgbm90IGZvcm1hdF9yZWdleDoKICAgICAgICAgICAgIHRyeToKQEAgLTM0OCw5ICszNTUsOSBAQAogICAgICMgdGhvdWdoCiAgICAgd2Vla19vZl95ZWFyID0gLTEKICAgICB3ZWVrX29mX3llYXJfc3RhcnQgPSAtMQotICAgICMgd2Vla2RheSBhbmQganVsaWFuIGRlZmF1bHRlZCB0byAtMSBzbyBhcyB0byBzaWduYWwgbmVlZCB0byBjYWxjdWxhdGUKKyAgICAjIHdlZWtkYXkgYW5kIGp1bGlhbiBkZWZhdWx0ZWQgdG8gTm9uZSBzbyBhcyB0byBzaWduYWwgbmVlZCB0byBjYWxjdWxhdGUKICAgICAjIHZhbHVlcwotICAgIHdlZWtkYXkgPSBqdWxpYW4gPSAtMQorICAgIHdlZWtkYXkgPSBqdWxpYW4gPSBOb25lCiAgICAgZm91bmRfZGljdCA9IGZvdW5kLmdyb3VwZGljdCgpCiAgICAgZm9yIGdyb3VwX2tleSBpbiBmb3VuZF9kaWN0LmtleXMoKToKICAgICAgICAgIyBEaXJlY3RpdmVzIG5vdCBleHBsaWNpdGx5IGhhbmRsZWQgYmVsb3c6CkBAIC00NTIsMTQgKzQ1OSwxNCBAQAogICAgICAgICB5ZWFyID0gMTkwMAogICAgICMgSWYgd2Uga25vdyB0aGUgd2VlayBvZiB0aGUgeWVhciBhbmQgd2hhdCBkYXkgb2YgdGhhdCB3ZWVrLCB3ZSBjYW4gZmlndXJlCiAgICAgIyBvdXQgdGhlIEp1bGlhbiBkYXkgb2YgdGhlIHllYXIuCi0gICAgaWYganVsaWFuID09IC0xIGFuZCB3ZWVrX29mX3llYXIgIT0gLTEgYW5kIHdlZWtkYXkgIT0gLTE6CisgICAgaWYganVsaWFuIGlzIE5vbmUgYW5kIHdlZWtfb2ZfeWVhciAhPSAtMSBhbmQgd2Vla2RheSBpcyBub3QgTm9uZToKICAgICAgICAgd2Vla19zdGFydHNfTW9uID0gVHJ1ZSBpZiB3ZWVrX29mX3llYXJfc3RhcnQgPT0gMCBlbHNlIEZhbHNlCiAgICAgICAgIGp1bGlhbiA9IF9jYWxjX2p1bGlhbl9mcm9tX1Vfb3JfVyh5ZWFyLCB3ZWVrX29mX3llYXIsIHdlZWtkYXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdlZWtfc3RhcnRzX01vbikKICAgICAjIENhbm5vdCBwcmUtY2FsY3VsYXRlIGRhdGV0aW1lX2RhdGUoKSBzaW5jZSBjYW4gY2hhbmdlIGluIEp1bGlhbgogICAgICMgY2FsY3VsYXRpb24gYW5kIHRodXMgY291bGQgaGF2ZSBkaWZmZXJlbnQgdmFsdWUgZm9yIHRoZSBkYXkgb2YgdGhlIHdlZWsKICAgICAjIGNhbGN1bGF0aW9uLgotICAgIGlmIGp1bGlhbiA9PSAtMToKKyAgICBpZiBqdWxpYW4gaXMgTm9uZToKICAgICAgICAgIyBOZWVkIHRvIGFkZCAxIHRvIHJlc3VsdCBzaW5jZSBmaXJzdCBkYXkgb2YgdGhlIHllYXIgaXMgMSwgbm90IDAuCiAgICAgICAgIGp1bGlhbiA9IGRhdGV0aW1lX2RhdGUoeWVhciwgbW9udGgsIGRheSkudG9vcmRpbmFsKCkgLSBcCiAgICAgICAgICAgICAgICAgICBkYXRldGltZV9kYXRlKHllYXIsIDEsIDEpLnRvb3JkaW5hbCgpICsgMQpAQCAtNDY5LDcgKzQ3Niw3IEBACiAgICAgICAgIHllYXIgPSBkYXRldGltZV9yZXN1bHQueWVhcgogICAgICAgICBtb250aCA9IGRhdGV0aW1lX3Jlc3VsdC5tb250aAogICAgICAgICBkYXkgPSBkYXRldGltZV9yZXN1bHQuZGF5Ci0gICAgaWYgd2Vla2RheSA9PSAtMToKKyAgICBpZiB3ZWVrZGF5IGlzIE5vbmU6CiAgICAgICAgIHdlZWtkYXkgPSBkYXRldGltZV9kYXRlKHllYXIsIG1vbnRoLCBkYXkpLndlZWtkYXkoKQogICAgICMgQWRkIHRpbWV6b25lIGluZm8KICAgICB0em5hbWUgPSBmb3VuZF9kaWN0LmdldCgiWiIpCmRpZmYgLS1naXQgYS9MaWIvYWJjLnB5IGIvTGliL2FiYy5weQppbmRleCAwOTc3OGU4Li4wMzU4YTQ2IDEwMDY0NAotLS0gYS9MaWIvYWJjLnB5CisrKyBiL0xpYi9hYmMucHkKQEAgLTUsNiArNSw3IEBACiAKIGZyb20gX3dlYWtyZWZzZXQgaW1wb3J0IFdlYWtTZXQKIAorCiBkZWYgYWJzdHJhY3RtZXRob2QoZnVuY29iaik6CiAgICAgIiIiQSBkZWNvcmF0b3IgaW5kaWNhdGluZyBhYnN0cmFjdCBtZXRob2RzLgogCkBAIC0xMjQsNiArMTI1LDggQEAKICAgICAjIEEgZ2xvYmFsIGNvdW50ZXIgdGhhdCBpcyBpbmNyZW1lbnRlZCBlYWNoIHRpbWUgYSBjbGFzcyBpcwogICAgICMgcmVnaXN0ZXJlZCBhcyBhIHZpcnR1YWwgc3ViY2xhc3Mgb2YgYW55dGhpbmcuICBJdCBmb3JjZXMgdGhlCiAgICAgIyBuZWdhdGl2ZSBjYWNoZSB0byBiZSBjbGVhcmVkIGJlZm9yZSBpdHMgbmV4dCB1c2UuCisgICAgIyBOb3RlOiB0aGlzIGNvdW50ZXIgaXMgcHJpdmF0ZS4gVXNlIGBhYmMuZ2V0X2NhY2hlX3Rva2VuKClgIGZvcgorICAgICMgICAgICAgZXh0ZXJuYWwgY29kZS4KICAgICBfYWJjX2ludmFsaWRhdGlvbl9jb3VudGVyID0gMAogCiAgICAgZGVmIF9fbmV3X18obWNscywgbmFtZSwgYmFzZXMsIG5hbWVzcGFjZSk6CkBAIC0yMjYsMyArMjI5LDIwIEBACiAgICAgICAgICMgTm8gZGljZTsgdXBkYXRlIG5lZ2F0aXZlIGNhY2hlCiAgICAgICAgIGNscy5fYWJjX25lZ2F0aXZlX2NhY2hlLmFkZChzdWJjbGFzcykKICAgICAgICAgcmV0dXJuIEZhbHNlCisKKworY2xhc3MgQUJDKG1ldGFjbGFzcz1BQkNNZXRhKToKKyAgICAiIiJIZWxwZXIgY2xhc3MgdGhhdCBwcm92aWRlcyBhIHN0YW5kYXJkIHdheSB0byBjcmVhdGUgYW4gQUJDIHVzaW5nCisgICAgaW5oZXJpdGFuY2UuCisgICAgIiIiCisgICAgcGFzcworCisKK2RlZiBnZXRfY2FjaGVfdG9rZW4oKToKKyAgICAiIiJSZXR1cm5zIHRoZSBjdXJyZW50IEFCQyBjYWNoZSB0b2tlbi4KKworICAgIFRoZSB0b2tlbiBpcyBhbiBvcGFxdWUgb2JqZWN0IChzdXBwb3J0aW5nIGVxdWFsaXR5IHRlc3RpbmcpIGlkZW50aWZ5aW5nIHRoZQorICAgIGN1cnJlbnQgdmVyc2lvbiBvZiB0aGUgQUJDIGNhY2hlIGZvciB2aXJ0dWFsIHN1YmNsYXNzZXMuIFRoZSB0b2tlbiBjaGFuZ2VzCisgICAgd2l0aCBldmVyeSBjYWxsIHRvIGBgcmVnaXN0ZXIoKWBgIG9uIGFueSBBQkMuCisgICAgIiIiCisgICAgcmV0dXJuIEFCQ01ldGEuX2FiY19pbnZhbGlkYXRpb25fY291bnRlcgpkaWZmIC0tZ2l0IGEvTGliL2FpZmMucHkgYi9MaWIvYWlmYy5weQppbmRleCBkYjA5MjRhLi43ZWJkYmViIDEwMDY0NAotLS0gYS9MaWIvYWlmYy5weQorKysgYi9MaWIvYWlmYy5weQpAQCAtNjksNyArNjksNyBAQAogICBnZXRjb21wdHlwZSgpICAgLS0gcmV0dXJucyBjb21wcmVzc2lvbiB0eXBlICgnTk9ORScgZm9yIEFJRkYgZmlsZXMpCiAgIGdldGNvbXBuYW1lKCkgICAtLSByZXR1cm5zIGh1bWFuLXJlYWRhYmxlIHZlcnNpb24gb2YKICAgICAgICAgICAgICBjb21wcmVzc2lvbiB0eXBlICgnbm90IGNvbXByZXNzZWQnIGZvciBBSUZGIGZpbGVzKQotICBnZXRwYXJhbXMoKSAtLSByZXR1cm5zIGEgdHVwbGUgY29uc2lzdGluZyBvZiBhbGwgb2YgdGhlCisgIGdldHBhcmFtcygpIC0tIHJldHVybnMgYSBuYW1lZHR1cGxlIGNvbnNpc3Rpbmcgb2YgYWxsIG9mIHRoZQogICAgICAgICAgICAgIGFib3ZlIGluIHRoZSBhYm92ZSBvcmRlcgogICBnZXRtYXJrZXJzKCkgICAgLS0gZ2V0IHRoZSBsaXN0IG9mIG1hcmtzIGluIHRoZSBhdWRpbyBmaWxlIG9yIE5vbmUKICAgICAgICAgICAgICBpZiB0aGVyZSBhcmUgbm8gbWFya3MKQEAgLTEyMSw3ICsxMjEsNyBAQAogYmUgcGF0Y2hlZCB1cC4KIEl0IGlzIGJlc3QgdG8gZmlyc3Qgc2V0IGFsbCBwYXJhbWV0ZXJzLCBwZXJoYXBzIHBvc3NpYmx5IHRoZQogY29tcHJlc3Npb24gdHlwZSwgYW5kIHRoZW4gd3JpdGUgYXVkaW8gZnJhbWVzIHVzaW5nIHdyaXRlZnJhbWVzcmF3LgotV2hlbiBhbGwgZnJhbWVzIGhhdmUgYmVlbiB3cml0dGVuLCBlaXRoZXIgY2FsbCB3cml0ZWZyYW1lcygnJykgb3IKK1doZW4gYWxsIGZyYW1lcyBoYXZlIGJlZW4gd3JpdHRlbiwgZWl0aGVyIGNhbGwgd3JpdGVmcmFtZXMoYicnKSBvcgogY2xvc2UoKSB0byBwYXRjaCB1cCB0aGUgc2l6ZXMgaW4gdGhlIGhlYWRlci4KIE1hcmtzIGNhbiBiZSBhZGRlZCBhbnl0aW1lLiAgSWYgdGhlcmUgYXJlIGFueSBtYXJrcywgeW91IG11c3QgY2FsbAogY2xvc2UoKSBhZnRlciBhbGwgZnJhbWVzIGhhdmUgYmVlbiB3cml0dGVuLgpAQCAtMjUyLDYgKzI1MiwxMSBAQAogICAgIF93cml0ZV91bG9uZyhmLCBsb21hbnQpCiAKIGZyb20gY2h1bmsgaW1wb3J0IENodW5rCitmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBuYW1lZHR1cGxlCisKK19haWZjX3BhcmFtcyA9IG5hbWVkdHVwbGUoJ19haWZjX3BhcmFtcycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICduY2hhbm5lbHMgc2FtcHdpZHRoIGZyYW1lcmF0ZSBuZnJhbWVzIGNvbXB0eXBlIGNvbXBuYW1lJykKKwogCiBjbGFzcyBBaWZjX3JlYWQ6CiAgICAgIyBWYXJpYWJsZXMgdXNlZCBpbiB0aGlzIGNsYXNzOgpAQCAtMzM0LDYgKzMzOSwxMiBAQAogICAgICAgICAjIGVsc2UsIGFzc3VtZSBpdCBpcyBhbiBvcGVuIGZpbGUgb2JqZWN0IGFscmVhZHkKICAgICAgICAgc2VsZi5pbml0ZnAoZikKIAorICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgKmFyZ3MpOgorICAgICAgICBzZWxmLmNsb3NlKCkKKwogICAgICMKICAgICAjIFVzZXIgdmlzaWJsZSBtZXRob2RzLgogICAgICMKQEAgLTM0NSw3ICszNTYsMTAgQEAKICAgICAgICAgc2VsZi5fc291bmRwb3MgPSAwCiAKICAgICBkZWYgY2xvc2Uoc2VsZik6Ci0gICAgICAgIHNlbGYuX2ZpbGUuY2xvc2UoKQorICAgICAgICBmaWxlID0gc2VsZi5fZmlsZQorICAgICAgICBpZiBmaWxlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fZmlsZSA9IE5vbmUKKyAgICAgICAgICAgIGZpbGUuY2xvc2UoKQogCiAgICAgZGVmIHRlbGwoc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLl9zb3VuZHBvcwpAQCAtMzcyLDkgKzM4Niw5IEBACiAjIyAgICAgIHJldHVybiBzZWxmLl92ZXJzaW9uCiAKICAgICBkZWYgZ2V0cGFyYW1zKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5nZXRuY2hhbm5lbHMoKSwgc2VsZi5nZXRzYW1wd2lkdGgoKSwgXAotICAgICAgICAgICAgICBzZWxmLmdldGZyYW1lcmF0ZSgpLCBzZWxmLmdldG5mcmFtZXMoKSwgXAotICAgICAgICAgICAgICBzZWxmLmdldGNvbXB0eXBlKCksIHNlbGYuZ2V0Y29tcG5hbWUoKQorICAgICAgICByZXR1cm4gX2FpZmNfcGFyYW1zKHNlbGYuZ2V0bmNoYW5uZWxzKCksIHNlbGYuZ2V0c2FtcHdpZHRoKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZXRmcmFtZXJhdGUoKSwgc2VsZi5nZXRuZnJhbWVzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZXRjb21wdHlwZSgpLCBzZWxmLmdldGNvbXBuYW1lKCkpCiAKICAgICBkZWYgZ2V0bWFya2VycyhzZWxmKToKICAgICAgICAgaWYgbGVuKHNlbGYuX21hcmtlcnMpID09IDA6CkBAIC01NTEsNiArNTY1LDEyIEBACiAgICAgZGVmIF9fZGVsX18oc2VsZik6CiAgICAgICAgIHNlbGYuY2xvc2UoKQogCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqYXJncyk6CisgICAgICAgIHNlbGYuY2xvc2UoKQorCiAgICAgIwogICAgICMgVXNlciB2aXNpYmxlIG1ldGhvZHMuCiAgICAgIwpAQCAtNjQ0LDggKzY2NCw4IEBACiAgICAgZGVmIGdldHBhcmFtcyhzZWxmKToKICAgICAgICAgaWYgbm90IHNlbGYuX25jaGFubmVscyBvciBub3Qgc2VsZi5fc2FtcHdpZHRoIG9yIG5vdCBzZWxmLl9mcmFtZXJhdGU6CiAgICAgICAgICAgICByYWlzZSBFcnJvcignbm90IGFsbCBwYXJhbWV0ZXJzIHNldCcpCi0gICAgICAgIHJldHVybiBzZWxmLl9uY2hhbm5lbHMsIHNlbGYuX3NhbXB3aWR0aCwgc2VsZi5fZnJhbWVyYXRlLCBcCi0gICAgICAgICAgICAgIHNlbGYuX25mcmFtZXMsIHNlbGYuX2NvbXB0eXBlLCBzZWxmLl9jb21wbmFtZQorICAgICAgICByZXR1cm4gX2FpZmNfcGFyYW1zKHNlbGYuX25jaGFubmVscywgc2VsZi5fc2FtcHdpZHRoLCBzZWxmLl9mcmFtZXJhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fbmZyYW1lcywgc2VsZi5fY29tcHR5cGUsIHNlbGYuX2NvbXBuYW1lKQogCiAgICAgZGVmIHNldG1hcmsoc2VsZiwgaWQsIHBvcywgbmFtZSk6CiAgICAgICAgIGlmIGlkIDw9IDA6CkBAIC02NzUsNiArNjk1LDggQEAKICAgICAgICAgcmV0dXJuIHNlbGYuX25mcmFtZXN3cml0dGVuCiAKICAgICBkZWYgd3JpdGVmcmFtZXNyYXcoc2VsZiwgZGF0YSk6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGRhdGEsIChieXRlcywgYnl0ZWFycmF5KSk6CisgICAgICAgICAgICBkYXRhID0gbWVtb3J5dmlldyhkYXRhKS5jYXN0KCdCJykKICAgICAgICAgc2VsZi5fZW5zdXJlX2hlYWRlcl93cml0dGVuKGxlbihkYXRhKSkKICAgICAgICAgbmZyYW1lcyA9IGxlbihkYXRhKSAvLyAoc2VsZi5fc2FtcHdpZHRoICogc2VsZi5fbmNoYW5uZWxzKQogICAgICAgICBpZiBzZWxmLl9jb252ZXJ0OgpAQCAtODc4LDggKzkwMCw3IEBACiAgICAgaWYgbm90IHN5cy5hcmd2WzE6XToKICAgICAgICAgc3lzLmFyZ3YuYXBwZW5kKCcvdXNyL2RlbW9zL2RhdGEvYXVkaW8vYmFjaC5haWZmJykKICAgICBmbiA9IHN5cy5hcmd2WzFdCi0gICAgZiA9IG9wZW4oZm4sICdyJykKLSAgICB0cnk6CisgICAgd2l0aCBvcGVuKGZuLCAncicpIGFzIGY6CiAgICAgICAgIHByaW50KCJSZWFkaW5nIiwgZm4pCiAgICAgICAgIHByaW50KCJuY2hhbm5lbHMgPSIsIGYuZ2V0bmNoYW5uZWxzKCkpCiAgICAgICAgIHByaW50KCJuZnJhbWVzICAgPSIsIGYuZ2V0bmZyYW1lcygpKQpAQCAtODkwLDE2ICs5MTEsMTEgQEAKICAgICAgICAgaWYgc3lzLmFyZ3ZbMjpdOgogICAgICAgICAgICAgZ24gPSBzeXMuYXJndlsyXQogICAgICAgICAgICAgcHJpbnQoIldyaXRpbmciLCBnbikKLSAgICAgICAgICAgIGcgPSBvcGVuKGduLCAndycpCi0gICAgICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIG9wZW4oZ24sICd3JykgYXMgZzoKICAgICAgICAgICAgICAgICBnLnNldHBhcmFtcyhmLmdldHBhcmFtcygpKQogICAgICAgICAgICAgICAgIHdoaWxlIDE6CiAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBmLnJlYWRmcmFtZXMoMTAyNCkKICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGRhdGE6CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgICAgICAgICBnLndyaXRlZnJhbWVzKGRhdGEpCi0gICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgIGcuY2xvc2UoKQogICAgICAgICAgICAgcHJpbnQoIkRvbmUuIikKLSAgICBmaW5hbGx5OgotICAgICAgICBmLmNsb3NlKCkKZGlmZiAtLWdpdCBhL0xpYi9hcmdwYXJzZS5weSBiL0xpYi9hcmdwYXJzZS5weQppbmRleCBiYzJiYTEzLi5iZTI3NmJiIDEwMDY0NAotLS0gYS9MaWIvYXJncGFyc2UucHkKKysrIGIvTGliL2FyZ3BhcnNlLnB5CkBAIC00OTAsNyArNDkwLDcgQEAKICAgICAgICAgYWN0aW9uX3dpZHRoID0gaGVscF9wb3NpdGlvbiAtIHNlbGYuX2N1cnJlbnRfaW5kZW50IC0gMgogICAgICAgICBhY3Rpb25faGVhZGVyID0gc2VsZi5fZm9ybWF0X2FjdGlvbl9pbnZvY2F0aW9uKGFjdGlvbikKIAotICAgICAgICAjIGhvIG5lbHA7IHN0YXJ0IG9uIHNhbWUgbGluZSBhbmQgYWRkIGEgZmluYWwgbmV3bGluZQorICAgICAgICAjIG5vIGhlbHA7IHN0YXJ0IG9uIHNhbWUgbGluZSBhbmQgYWRkIGEgZmluYWwgbmV3bGluZQogICAgICAgICBpZiBub3QgYWN0aW9uLmhlbHA6CiAgICAgICAgICAgICB0dXAgPSBzZWxmLl9jdXJyZW50X2luZGVudCwgJycsIGFjdGlvbl9oZWFkZXIKICAgICAgICAgICAgIGFjdGlvbl9oZWFkZXIgPSAnJSpzJXNcbicgJSB0dXAKQEAgLTYwOCw4ICs2MDgsNyBAQAogICAgICAgICAgICAgcGFzcwogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5faW5kZW50KCkKLSAgICAgICAgICAgIGZvciBzdWJhY3Rpb24gaW4gZ2V0X3N1YmFjdGlvbnMoKToKLSAgICAgICAgICAgICAgICB5aWVsZCBzdWJhY3Rpb24KKyAgICAgICAgICAgIHlpZWxkIGZyb20gZ2V0X3N1YmFjdGlvbnMoKQogICAgICAgICAgICAgc2VsZi5fZGVkZW50KCkKIAogICAgIGRlZiBfc3BsaXRfbGluZXMoc2VsZiwgdGV4dCwgd2lkdGgpOgpAQCAtMTA0MCw3ICsxMDM5LDggQEAKICAgICAgICAgICAgIHZlcnNpb24gPSBwYXJzZXIudmVyc2lvbgogICAgICAgICBmb3JtYXR0ZXIgPSBwYXJzZXIuX2dldF9mb3JtYXR0ZXIoKQogICAgICAgICBmb3JtYXR0ZXIuYWRkX3RleHQodmVyc2lvbikKLSAgICAgICAgcGFyc2VyLmV4aXQobWVzc2FnZT1mb3JtYXR0ZXIuZm9ybWF0X2hlbHAoKSkKKyAgICAgICAgcGFyc2VyLl9wcmludF9tZXNzYWdlKGZvcm1hdHRlci5mb3JtYXRfaGVscCgpLCBfc3lzLnN0ZG91dCkKKyAgICAgICAgcGFyc2VyLmV4aXQoKQogCiAKIGNsYXNzIF9TdWJQYXJzZXJzQWN0aW9uKEFjdGlvbik6CkBAIC0xMTIyLDcgKzExMjIsMTQgQEAKICAgICAgICAgIyBwYXJzZSBhbGwgdGhlIHJlbWFpbmluZyBvcHRpb25zIGludG8gdGhlIG5hbWVzcGFjZQogICAgICAgICAjIHN0b3JlIGFueSB1bnJlY29nbml6ZWQgb3B0aW9ucyBvbiB0aGUgb2JqZWN0LCBzbyB0aGF0IHRoZSB0b3AKICAgICAgICAgIyBsZXZlbCBwYXJzZXIgY2FuIGRlY2lkZSB3aGF0IHRvIGRvIHdpdGggdGhlbQotICAgICAgICBuYW1lc3BhY2UsIGFyZ19zdHJpbmdzID0gcGFyc2VyLnBhcnNlX2tub3duX2FyZ3MoYXJnX3N0cmluZ3MsIG5hbWVzcGFjZSkKKworICAgICAgICAjIEluIGNhc2UgdGhpcyBzdWJwYXJzZXIgZGVmaW5lcyBuZXcgZGVmYXVsdHMsIHdlIHBhcnNlIHRoZW0KKyAgICAgICAgIyBpbiBhIG5ldyBuYW1lc3BhY2Ugb2JqZWN0IGFuZCB0aGVuIHVwZGF0ZSB0aGUgb3JpZ2luYWwKKyAgICAgICAgIyBuYW1lc3BhY2UgZm9yIHRoZSByZWxldmFudCBwYXJ0cy4KKyAgICAgICAgc3VibmFtZXNwYWNlLCBhcmdfc3RyaW5ncyA9IHBhcnNlci5wYXJzZV9rbm93bl9hcmdzKGFyZ19zdHJpbmdzLCBOb25lKQorICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiB2YXJzKHN1Ym5hbWVzcGFjZSkuaXRlbXMoKToKKyAgICAgICAgICAgIHNldGF0dHIobmFtZXNwYWNlLCBrZXksIHZhbHVlKQorCiAgICAgICAgIGlmIGFyZ19zdHJpbmdzOgogICAgICAgICAgICAgdmFycyhuYW1lc3BhY2UpLnNldGRlZmF1bHQoX1VOUkVDT0dOSVpFRF9BUkdTX0FUVFIsIFtdKQogICAgICAgICAgICAgZ2V0YXR0cihuYW1lc3BhY2UsIF9VTlJFQ09HTklaRURfQVJHU19BVFRSKS5leHRlbmQoYXJnX3N0cmluZ3MpCkBAIC0xMTQzLDExICsxMTUwLDE3IEBACiAgICAgICAgICAgICBzYW1lIHZhbHVlcyBhcyB0aGUgYnVpbHRpbiBvcGVuKCkgZnVuY3Rpb24uCiAgICAgICAgIC0gYnVmc2l6ZSAtLSBUaGUgZmlsZSdzIGRlc2lyZWQgYnVmZmVyIHNpemUuIEFjY2VwdHMgdGhlIHNhbWUgdmFsdWVzIGFzCiAgICAgICAgICAgICB0aGUgYnVpbHRpbiBvcGVuKCkgZnVuY3Rpb24uCisgICAgICAgIC0gZW5jb2RpbmcgLS0gVGhlIGZpbGUncyBlbmNvZGluZy4gQWNjZXB0cyB0aGUgc2FtZSB2YWx1ZXMgYXMgdGhlCisgICAgICAgICAgICBidWlsdGluIG9wZW4oKSBmdW5jdGlvbi4KKyAgICAgICAgLSBlcnJvcnMgLS0gQSBzdHJpbmcgaW5kaWNhdGluZyBob3cgZW5jb2RpbmcgYW5kIGRlY29kaW5nIGVycm9ycyBhcmUgdG8KKyAgICAgICAgICAgIGJlIGhhbmRsZWQuIEFjY2VwdHMgdGhlIHNhbWUgdmFsdWUgYXMgdGhlIGJ1aWx0aW4gb3BlbigpIGZ1bmN0aW9uLgogICAgICIiIgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGU9J3InLCBidWZzaXplPS0xKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kZT0ncicsIGJ1ZnNpemU9LTEsIGVuY29kaW5nPU5vbmUsIGVycm9ycz1Ob25lKToKICAgICAgICAgc2VsZi5fbW9kZSA9IG1vZGUKICAgICAgICAgc2VsZi5fYnVmc2l6ZSA9IGJ1ZnNpemUKKyAgICAgICAgc2VsZi5fZW5jb2RpbmcgPSBlbmNvZGluZworICAgICAgICBzZWxmLl9lcnJvcnMgPSBlcnJvcnMKIAogICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBzdHJpbmcpOgogICAgICAgICAjIHRoZSBzcGVjaWFsIGFyZ3VtZW50ICItIiBtZWFucyBzeXMuc3Rke2luLG91dH0KQEAgLTExNjIsMTQgKzExNzUsMTggQEAKIAogICAgICAgICAjIGFsbCBvdGhlciBhcmd1bWVudHMgYXJlIHVzZWQgYXMgZmlsZSBuYW1lcwogICAgICAgICB0cnk6Ci0gICAgICAgICAgICByZXR1cm4gb3BlbihzdHJpbmcsIHNlbGYuX21vZGUsIHNlbGYuX2J1ZnNpemUpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgICAgICByZXR1cm4gb3BlbihzdHJpbmcsIHNlbGYuX21vZGUsIHNlbGYuX2J1ZnNpemUsIHNlbGYuX2VuY29kaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZXJyb3JzKQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgbWVzc2FnZSA9IF8oImNhbid0IG9wZW4gJyVzJzogJXMiKQogICAgICAgICAgICAgcmFpc2UgQXJndW1lbnRUeXBlRXJyb3IobWVzc2FnZSAlIChzdHJpbmcsIGUpKQogCiAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgICAgICBhcmdzID0gc2VsZi5fbW9kZSwgc2VsZi5fYnVmc2l6ZQotICAgICAgICBhcmdzX3N0ciA9ICcsICcuam9pbihyZXByKGFyZykgZm9yIGFyZyBpbiBhcmdzIGlmIGFyZyAhPSAtMSkKKyAgICAgICAga3dhcmdzID0gWygnZW5jb2RpbmcnLCBzZWxmLl9lbmNvZGluZyksICgnZXJyb3JzJywgc2VsZi5fZXJyb3JzKV0KKyAgICAgICAgYXJnc19zdHIgPSAnLCAnLmpvaW4oW3JlcHIoYXJnKSBmb3IgYXJnIGluIGFyZ3MgaWYgYXJnICE9IC0xXSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnJXM9JXInICUgKGt3LCBhcmcpIGZvciBrdywgYXJnIGluIGt3YXJncworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgYXJnIGlzIG5vdCBOb25lXSkKICAgICAgICAgcmV0dXJuICclcyglcyknICUgKHR5cGUoc2VsZikuX19uYW1lX18sIGFyZ3Nfc3RyKQogCiAjID09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMTE4OCw5ICsxMjA1LDEzIEBACiAgICAgICAgICAgICBzZXRhdHRyKHNlbGYsIG5hbWUsIGt3YXJnc1tuYW1lXSkKIAogICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgTmFtZXNwYWNlKToKKyAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAogICAgICAgICByZXR1cm4gdmFycyhzZWxmKSA9PSB2YXJzKG90aGVyKQogCiAgICAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBOYW1lc3BhY2UpOgorICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCiAgICAgICAgIHJldHVybiBub3QgKHNlbGYgPT0gb3RoZXIpCiAKICAgICBkZWYgX19jb250YWluc19fKHNlbGYsIGtleSk6CkBAIC0yMDAzLDE3ICsyMDI0LDE0IEBACiAgICAgICAgICAgICAjIHJlcGxhY2UgYXJndW1lbnRzIHJlZmVyZW5jaW5nIGZpbGVzIHdpdGggdGhlIGZpbGUgY29udGVudAogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIGFyZ3NfZmlsZSA9IG9wZW4oYXJnX3N0cmluZ1sxOl0pCi0gICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBvcGVuKGFyZ19zdHJpbmdbMTpdKSBhcyBhcmdzX2ZpbGU6CiAgICAgICAgICAgICAgICAgICAgICAgICBhcmdfc3RyaW5ncyA9IFtdCiAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYXJnX2xpbmUgaW4gYXJnc19maWxlLnJlYWQoKS5zcGxpdGxpbmVzKCk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGFyZyBpbiBzZWxmLmNvbnZlcnRfYXJnX2xpbmVfdG9fYXJncyhhcmdfbGluZSk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ19zdHJpbmdzLmFwcGVuZChhcmcpCiAgICAgICAgICAgICAgICAgICAgICAgICBhcmdfc3RyaW5ncyA9IHNlbGYuX3JlYWRfYXJnc19mcm9tX2ZpbGVzKGFyZ19zdHJpbmdzKQogICAgICAgICAgICAgICAgICAgICAgICAgbmV3X2FyZ19zdHJpbmdzLmV4dGVuZChhcmdfc3RyaW5ncykKLSAgICAgICAgICAgICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NfZmlsZS5jbG9zZSgpCi0gICAgICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgIGVyciA9IF9zeXMuZXhjX2luZm8oKVsxXQogICAgICAgICAgICAgICAgICAgICBzZWxmLmVycm9yKHN0cihlcnIpKQogCmRpZmYgLS1naXQgYS9MaWIvYXN0LnB5IGIvTGliL2FzdC5weQppbmRleCAxM2Y1OWY5Li4wMmMzYjI4IDEwMDY0NAotLS0gYS9MaWIvYXN0LnB5CisrKyBiL0xpYi9hc3QucHkKQEAgLTQyLDcgKzQyLDYgQEAKICAgICBQeXRob24gbGl0ZXJhbCBzdHJ1Y3R1cmVzOiBzdHJpbmdzLCBieXRlcywgbnVtYmVycywgdHVwbGVzLCBsaXN0cywgZGljdHMsCiAgICAgc2V0cywgYm9vbGVhbnMsIGFuZCBOb25lLgogICAgICIiIgotICAgIF9zYWZlX25hbWVzID0geydOb25lJzogTm9uZSwgJ1RydWUnOiBUcnVlLCAnRmFsc2UnOiBGYWxzZX0KICAgICBpZiBpc2luc3RhbmNlKG5vZGVfb3Jfc3RyaW5nLCBzdHIpOgogICAgICAgICBub2RlX29yX3N0cmluZyA9IHBhcnNlKG5vZGVfb3Jfc3RyaW5nLCBtb2RlPSdldmFsJykKICAgICBpZiBpc2luc3RhbmNlKG5vZGVfb3Jfc3RyaW5nLCBFeHByZXNzaW9uKToKQEAgLTYxLDkgKzYwLDggQEAKICAgICAgICAgZWxpZiBpc2luc3RhbmNlKG5vZGUsIERpY3QpOgogICAgICAgICAgICAgcmV0dXJuIGRpY3QoKF9jb252ZXJ0KGspLCBfY29udmVydCh2KSkgZm9yIGssIHYKICAgICAgICAgICAgICAgICAgICAgICAgIGluIHppcChub2RlLmtleXMsIG5vZGUudmFsdWVzKSkKLSAgICAgICAgZWxpZiBpc2luc3RhbmNlKG5vZGUsIE5hbWUpOgotICAgICAgICAgICAgaWYgbm9kZS5pZCBpbiBfc2FmZV9uYW1lczoKLSAgICAgICAgICAgICAgICByZXR1cm4gX3NhZmVfbmFtZXNbbm9kZS5pZF0KKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKG5vZGUsIE5hbWVDb25zdGFudCk6CisgICAgICAgICAgICByZXR1cm4gbm9kZS52YWx1ZQogICAgICAgICBlbGlmIGlzaW5zdGFuY2Uobm9kZSwgVW5hcnlPcCkgYW5kIFwKICAgICAgICAgICAgICBpc2luc3RhbmNlKG5vZGUub3AsIChVQWRkLCBVU3ViKSkgYW5kIFwKICAgICAgICAgICAgICBpc2luc3RhbmNlKG5vZGUub3BlcmFuZCwgKE51bSwgVW5hcnlPcCwgQmluT3ApKToKZGlmZiAtLWdpdCBhL0xpYi9hc3luY2hhdC5weSBiL0xpYi9hc3luY2hhdC5weQppbmRleCBlZWEzNDE4Li4xNGMxNTJmIDEwMDY0NAotLS0gYS9MaWIvYXN5bmNoYXQucHkKKysrIGIvTGliL2FzeW5jaGF0LnB5CkBAIC00NSwyNyArNDUsMjYgQEAKIG1ldGhvZCkgdXAgdG8gdGhlIHRlcm1pbmF0b3IsIGFuZCB0aGVuIGNvbnRyb2wgd2lsbCBiZSByZXR1cm5lZCB0bwogeW91IC0gYnkgY2FsbGluZyB5b3VyIHNlbGYuZm91bmRfdGVybWluYXRvcigpIG1ldGhvZC4KICIiIgotaW1wb3J0IHNvY2tldAogaW1wb3J0IGFzeW5jb3JlCiBmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBkZXF1ZQogCiAKLWNsYXNzIGFzeW5jX2NoYXQgKGFzeW5jb3JlLmRpc3BhdGNoZXIpOgorY2xhc3MgYXN5bmNfY2hhdChhc3luY29yZS5kaXNwYXRjaGVyKToKICAgICAiIiJUaGlzIGlzIGFuIGFic3RyYWN0IGNsYXNzLiAgWW91IG11c3QgZGVyaXZlIGZyb20gdGhpcyBjbGFzcywgYW5kIGFkZAogICAgIHRoZSB0d28gbWV0aG9kcyBjb2xsZWN0X2luY29taW5nX2RhdGEoKSBhbmQgZm91bmRfdGVybWluYXRvcigpIiIiCiAKICAgICAjIHRoZXNlIGFyZSBvdmVycmlkYWJsZSBkZWZhdWx0cwogCi0gICAgYWNfaW5fYnVmZmVyX3NpemUgICAgICAgPSA0MDk2Ci0gICAgYWNfb3V0X2J1ZmZlcl9zaXplICAgICAgPSA0MDk2CisgICAgYWNfaW5fYnVmZmVyX3NpemUgPSA2NTUzNgorICAgIGFjX291dF9idWZmZXJfc2l6ZSA9IDY1NTM2CiAKICAgICAjIHdlIGRvbid0IHdhbnQgdG8gZW5hYmxlIHRoZSB1c2Ugb2YgZW5jb2RpbmcgYnkgZGVmYXVsdCwgYmVjYXVzZSB0aGF0IGlzIGEKICAgICAjIHNpZ24gb2YgYW4gYXBwbGljYXRpb24gYnVnIHRoYXQgd2UgZG9uJ3Qgd2FudCB0byBwYXNzIHNpbGVudGx5CiAKLSAgICB1c2VfZW5jb2RpbmcgICAgICAgICAgICA9IDAKLSAgICBlbmNvZGluZyAgICAgICAgICAgICAgICA9ICdsYXRpbi0xJworICAgIHVzZV9lbmNvZGluZyA9IDAKKyAgICBlbmNvZGluZyA9ICdsYXRpbi0xJwogCi0gICAgZGVmIF9faW5pdF9fIChzZWxmLCBzb2NrPU5vbmUsIG1hcD1Ob25lKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc29jaz1Ob25lLCBtYXA9Tm9uZSk6CiAgICAgICAgICMgZm9yIHN0cmluZyB0ZXJtaW5hdG9yIG1hdGNoaW5nCiAgICAgICAgIHNlbGYuYWNfaW5fYnVmZmVyID0gYicnCiAKQEAgLTc3LDcgKzc2LDcgQEAKICAgICAgICAgIyB3ZSB0b3NzIHRoZSB1c2Ugb2YgdGhlICJzaW1wbGUgcHJvZHVjZXIiIGFuZCByZXBsYWNlIGl0IHdpdGgKICAgICAgICAgIyBhIHB1cmUgZGVxdWUsIHdoaWNoIHRoZSBvcmlnaW5hbCBmaWZvIHdhcyBhIHdyYXBwaW5nIG9mCiAgICAgICAgIHNlbGYucHJvZHVjZXJfZmlmbyA9IGRlcXVlKCkKLSAgICAgICAgYXN5bmNvcmUuZGlzcGF0Y2hlci5fX2luaXRfXyAoc2VsZiwgc29jaywgbWFwKQorICAgICAgICBhc3luY29yZS5kaXNwYXRjaGVyLl9faW5pdF9fKHNlbGYsIHNvY2ssIG1hcCkKIAogICAgIGRlZiBjb2xsZWN0X2luY29taW5nX2RhdGEoc2VsZiwgZGF0YSk6CiAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoIm11c3QgYmUgaW1wbGVtZW50ZWQgaW4gc3ViY2xhc3MiKQpAQCAtOTMsMTMgKzkyLDE4IEBACiAgICAgZGVmIGZvdW5kX3Rlcm1pbmF0b3Ioc2VsZik6CiAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoIm11c3QgYmUgaW1wbGVtZW50ZWQgaW4gc3ViY2xhc3MiKQogCi0gICAgZGVmIHNldF90ZXJtaW5hdG9yIChzZWxmLCB0ZXJtKToKLSAgICAgICAgIlNldCB0aGUgaW5wdXQgZGVsaW1pdGVyLiAgQ2FuIGJlIGEgZml4ZWQgc3RyaW5nIG9mIGFueSBsZW5ndGgsIGFuIGludGVnZXIsIG9yIE5vbmUiCisgICAgZGVmIHNldF90ZXJtaW5hdG9yKHNlbGYsIHRlcm0pOgorICAgICAgICAiIiJTZXQgdGhlIGlucHV0IGRlbGltaXRlci4KKworICAgICAgICBDYW4gYmUgYSBmaXhlZCBzdHJpbmcgb2YgYW55IGxlbmd0aCwgYW4gaW50ZWdlciwgb3IgTm9uZS4KKyAgICAgICAgIiIiCiAgICAgICAgIGlmIGlzaW5zdGFuY2UodGVybSwgc3RyKSBhbmQgc2VsZi51c2VfZW5jb2Rpbmc6CiAgICAgICAgICAgICB0ZXJtID0gYnl0ZXModGVybSwgc2VsZi5lbmNvZGluZykKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHRlcm0sIGludCkgYW5kIHRlcm0gPCAwOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigndGhlIG51bWJlciBvZiByZWNlaXZlZCBieXRlcyBtdXN0IGJlIHBvc2l0aXZlJykKICAgICAgICAgc2VsZi50ZXJtaW5hdG9yID0gdGVybQogCi0gICAgZGVmIGdldF90ZXJtaW5hdG9yIChzZWxmKToKKyAgICBkZWYgZ2V0X3Rlcm1pbmF0b3Ioc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLnRlcm1pbmF0b3IKIAogICAgICMgZ3JhYiBzb21lIG1vcmUgZGF0YSBmcm9tIHRoZSBzb2NrZXQsCkBAIC0xMDcsMTEgKzExMSwxMyBAQAogICAgICMgY2hlY2sgZm9yIHRoZSB0ZXJtaW5hdG9yLAogICAgICMgaWYgZm91bmQsIHRyYW5zaXRpb24gdG8gdGhlIG5leHQgc3RhdGUuCiAKLSAgICBkZWYgaGFuZGxlX3JlYWQgKHNlbGYpOgorICAgIGRlZiBoYW5kbGVfcmVhZChzZWxmKToKIAogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBkYXRhID0gc2VsZi5yZWN2IChzZWxmLmFjX2luX2J1ZmZlcl9zaXplKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIHdoeToKKyAgICAgICAgICAgIGRhdGEgPSBzZWxmLnJlY3Yoc2VsZi5hY19pbl9idWZmZXJfc2l6ZSkKKyAgICAgICAgZXhjZXB0IEJsb2NraW5nSU9FcnJvcjoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyB3aHk6CiAgICAgICAgICAgICBzZWxmLmhhbmRsZV9lcnJvcigpCiAgICAgICAgICAgICByZXR1cm4KIApAQCAtMTI5LDE3ICsxMzUsMTcgQEAKICAgICAgICAgICAgIHRlcm1pbmF0b3IgPSBzZWxmLmdldF90ZXJtaW5hdG9yKCkKICAgICAgICAgICAgIGlmIG5vdCB0ZXJtaW5hdG9yOgogICAgICAgICAgICAgICAgICMgbm8gdGVybWluYXRvciwgY29sbGVjdCBpdCBhbGwKLSAgICAgICAgICAgICAgICBzZWxmLmNvbGxlY3RfaW5jb21pbmdfZGF0YSAoc2VsZi5hY19pbl9idWZmZXIpCisgICAgICAgICAgICAgICAgc2VsZi5jb2xsZWN0X2luY29taW5nX2RhdGEoc2VsZi5hY19pbl9idWZmZXIpCiAgICAgICAgICAgICAgICAgc2VsZi5hY19pbl9idWZmZXIgPSBiJycKICAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh0ZXJtaW5hdG9yLCBpbnQpOgogICAgICAgICAgICAgICAgICMgbnVtZXJpYyB0ZXJtaW5hdG9yCiAgICAgICAgICAgICAgICAgbiA9IHRlcm1pbmF0b3IKICAgICAgICAgICAgICAgICBpZiBsYiA8IG46Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuY29sbGVjdF9pbmNvbWluZ19kYXRhIChzZWxmLmFjX2luX2J1ZmZlcikKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5jb2xsZWN0X2luY29taW5nX2RhdGEoc2VsZi5hY19pbl9idWZmZXIpCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuYWNfaW5fYnVmZmVyID0gYicnCiAgICAgICAgICAgICAgICAgICAgIHNlbGYudGVybWluYXRvciA9IHNlbGYudGVybWluYXRvciAtIGxiCiAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5jb2xsZWN0X2luY29taW5nX2RhdGEgKHNlbGYuYWNfaW5fYnVmZmVyWzpuXSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5jb2xsZWN0X2luY29taW5nX2RhdGEoc2VsZi5hY19pbl9idWZmZXJbOm5dKQogICAgICAgICAgICAgICAgICAgICBzZWxmLmFjX2luX2J1ZmZlciA9IHNlbGYuYWNfaW5fYnVmZmVyW246XQogICAgICAgICAgICAgICAgICAgICBzZWxmLnRlcm1pbmF0b3IgPSAwCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuZm91bmRfdGVybWluYXRvcigpCkBAIC0xNTYsMzIgKzE2MiwzNyBAQAogICAgICAgICAgICAgICAgIGlmIGluZGV4ICE9IC0xOgogICAgICAgICAgICAgICAgICAgICAjIHdlIGZvdW5kIHRoZSB0ZXJtaW5hdG9yCiAgICAgICAgICAgICAgICAgICAgIGlmIGluZGV4ID4gMDoKLSAgICAgICAgICAgICAgICAgICAgICAgICMgZG9uJ3QgYm90aGVyIHJlcG9ydGluZyB0aGUgZW1wdHkgc3RyaW5nIChzb3VyY2Ugb2Ygc3VidGxlIGJ1Z3MpCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbGxlY3RfaW5jb21pbmdfZGF0YSAoc2VsZi5hY19pbl9idWZmZXJbOmluZGV4XSkKKyAgICAgICAgICAgICAgICAgICAgICAgICMgZG9uJ3QgYm90aGVyIHJlcG9ydGluZyB0aGUgZW1wdHkgc3RyaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAjIChzb3VyY2Ugb2Ygc3VidGxlIGJ1Z3MpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbGxlY3RfaW5jb21pbmdfZGF0YShzZWxmLmFjX2luX2J1ZmZlcls6aW5kZXhdKQogICAgICAgICAgICAgICAgICAgICBzZWxmLmFjX2luX2J1ZmZlciA9IHNlbGYuYWNfaW5fYnVmZmVyW2luZGV4K3Rlcm1pbmF0b3JfbGVuOl0KLSAgICAgICAgICAgICAgICAgICAgIyBUaGlzIGRvZXMgdGhlIFJpZ2h0IFRoaW5nIGlmIHRoZSB0ZXJtaW5hdG9yIGlzIGNoYW5nZWQgaGVyZS4KKyAgICAgICAgICAgICAgICAgICAgIyBUaGlzIGRvZXMgdGhlIFJpZ2h0IFRoaW5nIGlmIHRoZSB0ZXJtaW5hdG9yCisgICAgICAgICAgICAgICAgICAgICMgaXMgY2hhbmdlZCBoZXJlLgogICAgICAgICAgICAgICAgICAgICBzZWxmLmZvdW5kX3Rlcm1pbmF0b3IoKQogICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgICMgY2hlY2sgZm9yIGEgcHJlZml4IG9mIHRoZSB0ZXJtaW5hdG9yCi0gICAgICAgICAgICAgICAgICAgIGluZGV4ID0gZmluZF9wcmVmaXhfYXRfZW5kIChzZWxmLmFjX2luX2J1ZmZlciwgdGVybWluYXRvcikKKyAgICAgICAgICAgICAgICAgICAgaW5kZXggPSBmaW5kX3ByZWZpeF9hdF9lbmQoc2VsZi5hY19pbl9idWZmZXIsIHRlcm1pbmF0b3IpCiAgICAgICAgICAgICAgICAgICAgIGlmIGluZGV4OgogICAgICAgICAgICAgICAgICAgICAgICAgaWYgaW5kZXggIT0gbGI6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB3ZSBmb3VuZCBhIHByZWZpeCwgY29sbGVjdCB1cCB0byB0aGUgcHJlZml4Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb2xsZWN0X2luY29taW5nX2RhdGEgKHNlbGYuYWNfaW5fYnVmZmVyWzotaW5kZXhdKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29sbGVjdF9pbmNvbWluZ19kYXRhKHNlbGYuYWNfaW5fYnVmZmVyWzotaW5kZXhdKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYWNfaW5fYnVmZmVyID0gc2VsZi5hY19pbl9idWZmZXJbLWluZGV4Ol0KICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgICAgICAjIG5vIHByZWZpeCwgY29sbGVjdCBpdCBhbGwKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29sbGVjdF9pbmNvbWluZ19kYXRhIChzZWxmLmFjX2luX2J1ZmZlcikKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29sbGVjdF9pbmNvbWluZ19kYXRhKHNlbGYuYWNfaW5fYnVmZmVyKQogICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hY19pbl9idWZmZXIgPSBiJycKIAotICAgIGRlZiBoYW5kbGVfd3JpdGUgKHNlbGYpOgorICAgIGRlZiBoYW5kbGVfd3JpdGUoc2VsZik6CiAgICAgICAgIHNlbGYuaW5pdGlhdGVfc2VuZCgpCiAKLSAgICBkZWYgaGFuZGxlX2Nsb3NlIChzZWxmKToKKyAgICBkZWYgaGFuZGxlX2Nsb3NlKHNlbGYpOgogICAgICAgICBzZWxmLmNsb3NlKCkKIAotICAgIGRlZiBwdXNoIChzZWxmLCBkYXRhKToKKyAgICBkZWYgcHVzaChzZWxmLCBkYXRhKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZGF0YSwgKGJ5dGVzLCBieXRlYXJyYXksIG1lbW9yeXZpZXcpKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignZGF0YSBhcmd1bWVudCBtdXN0IGJlIGJ5dGUtaXNoICglciknLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUoZGF0YSkpCiAgICAgICAgIHNhYnMgPSBzZWxmLmFjX291dF9idWZmZXJfc2l6ZQogICAgICAgICBpZiBsZW4oZGF0YSkgPiBzYWJzOgogICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKGRhdGEpLCBzYWJzKToKQEAgLTE5MCwxMSArMjAxLDExIEBACiAgICAgICAgICAgICBzZWxmLnByb2R1Y2VyX2ZpZm8uYXBwZW5kKGRhdGEpCiAgICAgICAgIHNlbGYuaW5pdGlhdGVfc2VuZCgpCiAKLSAgICBkZWYgcHVzaF93aXRoX3Byb2R1Y2VyIChzZWxmLCBwcm9kdWNlcik6CisgICAgZGVmIHB1c2hfd2l0aF9wcm9kdWNlcihzZWxmLCBwcm9kdWNlcik6CiAgICAgICAgIHNlbGYucHJvZHVjZXJfZmlmby5hcHBlbmQocHJvZHVjZXIpCiAgICAgICAgIHNlbGYuaW5pdGlhdGVfc2VuZCgpCiAKLSAgICBkZWYgcmVhZGFibGUgKHNlbGYpOgorICAgIGRlZiByZWFkYWJsZShzZWxmKToKICAgICAgICAgInByZWRpY2F0ZSBmb3IgaW5jbHVzaW9uIGluIHRoZSByZWFkYWJsZSBmb3Igc2VsZWN0KCkiCiAgICAgICAgICMgY2Fubm90IHVzZSB0aGUgb2xkIHByZWRpY2F0ZSwgaXQgdmlvbGF0ZXMgdGhlIGNsYWltIG9mIHRoZQogICAgICAgICAjIHNldF90ZXJtaW5hdG9yIG1ldGhvZC4KQEAgLTIwMiwxMSArMjEzLDExIEBACiAgICAgICAgICMgcmV0dXJuIChsZW4oc2VsZi5hY19pbl9idWZmZXIpIDw9IHNlbGYuYWNfaW5fYnVmZmVyX3NpemUpCiAgICAgICAgIHJldHVybiAxCiAKLSAgICBkZWYgd3JpdGFibGUgKHNlbGYpOgorICAgIGRlZiB3cml0YWJsZShzZWxmKToKICAgICAgICAgInByZWRpY2F0ZSBmb3IgaW5jbHVzaW9uIGluIHRoZSB3cml0YWJsZSBmb3Igc2VsZWN0KCkiCiAgICAgICAgIHJldHVybiBzZWxmLnByb2R1Y2VyX2ZpZm8gb3IgKG5vdCBzZWxmLmNvbm5lY3RlZCkKIAotICAgIGRlZiBjbG9zZV93aGVuX2RvbmUgKHNlbGYpOgorICAgIGRlZiBjbG9zZV93aGVuX2RvbmUoc2VsZik6CiAgICAgICAgICJhdXRvbWF0aWNhbGx5IGNsb3NlIHRoaXMgY2hhbm5lbCBvbmNlIHRoZSBvdXRnb2luZyBxdWV1ZSBpcyBlbXB0eSIKICAgICAgICAgc2VsZi5wcm9kdWNlcl9maWZvLmFwcGVuZChOb25lKQogCkBAIC0yMTcsMTAgKzIyOCw4IEBACiAgICAgICAgICAgICBpZiBub3QgZmlyc3Q6CiAgICAgICAgICAgICAgICAgZGVsIHNlbGYucHJvZHVjZXJfZmlmb1swXQogICAgICAgICAgICAgICAgIGlmIGZpcnN0IGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgICMjIHByaW50KCJmaXJzdCBpcyBOb25lIikKICAgICAgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVfY2xvc2UoKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgICAgICAgICAjIyBwcmludCgiZmlyc3QgaXMgbm90IE5vbmUiKQogCiAgICAgICAgICAgICAjIGhhbmRsZSBjbGFzc2ljIHByb2R1Y2VyIGJlaGF2aW9yCiAgICAgICAgICAgICBvYnMgPSBzZWxmLmFjX291dF9idWZmZXJfc2l6ZQpAQCAtMjQwLDcgKzI0OSw3IEBACiAgICAgICAgICAgICAjIHNlbmQgdGhlIGRhdGEKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBudW1fc2VudCA9IHNlbGYuc2VuZChkYXRhKQotICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlX2Vycm9yKCkKICAgICAgICAgICAgICAgICByZXR1cm4KIApAQCAtMjUyLDIwICsyNjEsMjEgQEAKICAgICAgICAgICAgICMgd2UgdHJpZWQgdG8gc2VuZCBzb21lIGFjdHVhbCBkYXRhCiAgICAgICAgICAgICByZXR1cm4KIAotICAgIGRlZiBkaXNjYXJkX2J1ZmZlcnMgKHNlbGYpOgorICAgIGRlZiBkaXNjYXJkX2J1ZmZlcnMoc2VsZik6CiAgICAgICAgICMgRW1lcmdlbmNpZXMgb25seSEKICAgICAgICAgc2VsZi5hY19pbl9idWZmZXIgPSBiJycKICAgICAgICAgZGVsIHNlbGYuaW5jb21pbmdbOl0KICAgICAgICAgc2VsZi5wcm9kdWNlcl9maWZvLmNsZWFyKCkKIAorCiBjbGFzcyBzaW1wbGVfcHJvZHVjZXI6CiAKLSAgICBkZWYgX19pbml0X18gKHNlbGYsIGRhdGEsIGJ1ZmZlcl9zaXplPTUxMik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRhdGEsIGJ1ZmZlcl9zaXplPTUxMik6CiAgICAgICAgIHNlbGYuZGF0YSA9IGRhdGEKICAgICAgICAgc2VsZi5idWZmZXJfc2l6ZSA9IGJ1ZmZlcl9zaXplCiAKLSAgICBkZWYgbW9yZSAoc2VsZik6Ci0gICAgICAgIGlmIGxlbiAoc2VsZi5kYXRhKSA+IHNlbGYuYnVmZmVyX3NpemU6CisgICAgZGVmIG1vcmUoc2VsZik6CisgICAgICAgIGlmIGxlbihzZWxmLmRhdGEpID4gc2VsZi5idWZmZXJfc2l6ZToKICAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuZGF0YVs6c2VsZi5idWZmZXJfc2l6ZV0KICAgICAgICAgICAgIHNlbGYuZGF0YSA9IHNlbGYuZGF0YVtzZWxmLmJ1ZmZlcl9zaXplOl0KICAgICAgICAgICAgIHJldHVybiByZXN1bHQKQEAgLTI3NCwzOCArMjg0LDQwIEBACiAgICAgICAgICAgICBzZWxmLmRhdGEgPSBiJycKICAgICAgICAgICAgIHJldHVybiByZXN1bHQKIAorCiBjbGFzcyBmaWZvOgotICAgIGRlZiBfX2luaXRfXyAoc2VsZiwgbGlzdD1Ob25lKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbGlzdD1Ob25lKToKICAgICAgICAgaWYgbm90IGxpc3Q6CiAgICAgICAgICAgICBzZWxmLmxpc3QgPSBkZXF1ZSgpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLmxpc3QgPSBkZXF1ZShsaXN0KQogCi0gICAgZGVmIF9fbGVuX18gKHNlbGYpOgorICAgIGRlZiBfX2xlbl9fKHNlbGYpOgogICAgICAgICByZXR1cm4gbGVuKHNlbGYubGlzdCkKIAotICAgIGRlZiBpc19lbXB0eSAoc2VsZik6CisgICAgZGVmIGlzX2VtcHR5KHNlbGYpOgogICAgICAgICByZXR1cm4gbm90IHNlbGYubGlzdAogCi0gICAgZGVmIGZpcnN0IChzZWxmKToKKyAgICBkZWYgZmlyc3Qoc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLmxpc3RbMF0KIAotICAgIGRlZiBwdXNoIChzZWxmLCBkYXRhKToKKyAgICBkZWYgcHVzaChzZWxmLCBkYXRhKToKICAgICAgICAgc2VsZi5saXN0LmFwcGVuZChkYXRhKQogCi0gICAgZGVmIHBvcCAoc2VsZik6CisgICAgZGVmIHBvcChzZWxmKToKICAgICAgICAgaWYgc2VsZi5saXN0OgogICAgICAgICAgICAgcmV0dXJuICgxLCBzZWxmLmxpc3QucG9wbGVmdCgpKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmV0dXJuICgwLCBOb25lKQogCisKICMgR2l2ZW4gJ2hheXN0YWNrJywgc2VlIGlmIGFueSBwcmVmaXggb2YgJ25lZWRsZScgaXMgYXQgaXRzIGVuZC4gIFRoaXMKICMgYXNzdW1lcyBhbiBleGFjdCBtYXRjaCBoYXMgYWxyZWFkeSBiZWVuIGNoZWNrZWQuICBSZXR1cm4gdGhlIG51bWJlciBvZgogIyBjaGFyYWN0ZXJzIG1hdGNoZWQuCiAjIGZvciBleGFtcGxlOgotIyBmX3BfYV9lICgicXdlcnR5XHIiLCAiXHJcbiIpID0+IDEKLSMgZl9wX2FfZSAoInF3ZXJ0eWRramYiLCAiXHJcbiIpID0+IDAKLSMgZl9wX2FfZSAoInF3ZXJ0eVxyXG4iLCAiXHJcbiIpID0+IDx1bmRlZmluZWQ+CisjIGZfcF9hX2UoInF3ZXJ0eVxyIiwgIlxyXG4iKSA9PiAxCisjIGZfcF9hX2UoInF3ZXJ0eWRramYiLCAiXHJcbiIpID0+IDAKKyMgZl9wX2FfZSgicXdlcnR5XHJcbiIsICJcclxuIikgPT4gPHVuZGVmaW5lZD4KIAogIyB0aGlzIGNvdWxkIG1heWJlIGJlIG1hZGUgZmFzdGVyIHdpdGggYSBjb21wdXRlZCByZWdleD8KICMgW2Fuc3dlcjogbm87IGNpcmNhIFB5dGhvbi0yLjAsIEphbiAyMDAxXQpAQCAtMzE0LDcgKzMyNiw3IEBACiAjIHJlOiAgICAgICAgMTI4MjAvcwogIyByZWdleDogICAgIDE0MDM1L3MKIAotZGVmIGZpbmRfcHJlZml4X2F0X2VuZCAoaGF5c3RhY2ssIG5lZWRsZSk6CitkZWYgZmluZF9wcmVmaXhfYXRfZW5kKGhheXN0YWNrLCBuZWVkbGUpOgogICAgIGwgPSBsZW4obmVlZGxlKSAtIDEKICAgICB3aGlsZSBsIGFuZCBub3QgaGF5c3RhY2suZW5kc3dpdGgobmVlZGxlWzpsXSk6CiAgICAgICAgIGwgLT0gMQpkaWZmIC0tZ2l0IGEvTGliL2FzeW5jaW8vX19pbml0X18ucHkgYi9MaWIvYXN5bmNpby9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTE0NjZiCi0tLSAvZGV2L251bGwKKysrIGIvTGliL2FzeW5jaW8vX19pbml0X18ucHkKQEAgLTAsMCArMSw1MCBAQAorIiIiVGhlIGFzeW5jaW8gcGFja2FnZSwgdHJhY2tpbmcgUEVQIDMxNTYuIiIiCisKK2ltcG9ydCBzeXMKKworIyBUaGUgc2VsZWN0b3JzIG1vZHVsZSBpcyBpbiB0aGUgc3RkbGliIGluIFB5dGhvbiAzLjQgYnV0IG5vdCBpbiAzLjMuCisjIERvIHRoaXMgZmlyc3QsIHNvIHRoZSBvdGhlciBzdWJtb2R1bGVzIGNhbiB1c2UgImZyb20gLiBpbXBvcnQgc2VsZWN0b3JzIi4KKyMgUHJlZmVyIGFzeW5jaW8vc2VsZWN0b3JzLnB5IG92ZXIgdGhlIHN0ZGxpYiBvbmUsIGFzIG91cnMgbWF5IGJlIG5ld2VyLgordHJ5OgorICAgIGZyb20gLiBpbXBvcnQgc2VsZWN0b3JzCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgaW1wb3J0IHNlbGVjdG9ycyAgIyBXaWxsIGFsc28gYmUgZXhwb3J0ZWQuCisKK2lmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgorICAgICMgU2ltaWxhciB0aGluZyBmb3IgX292ZXJsYXBwZWQuCisgICAgdHJ5OgorICAgICAgICBmcm9tIC4gaW1wb3J0IF9vdmVybGFwcGVkCisgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICBpbXBvcnQgX292ZXJsYXBwZWQgICMgV2lsbCBhbHNvIGJlIGV4cG9ydGVkLgorCisjIFRoaXMgcmVsaWVzIG9uIGVhY2ggb2YgdGhlIHN1Ym1vZHVsZXMgaGF2aW5nIGFuIF9fYWxsX18gdmFyaWFibGUuCitmcm9tIC5iYXNlX2V2ZW50cyBpbXBvcnQgKgorZnJvbSAuY29yb3V0aW5lcyBpbXBvcnQgKgorZnJvbSAuZXZlbnRzIGltcG9ydCAqCitmcm9tIC5mdXR1cmVzIGltcG9ydCAqCitmcm9tIC5sb2NrcyBpbXBvcnQgKgorZnJvbSAucHJvdG9jb2xzIGltcG9ydCAqCitmcm9tIC5xdWV1ZXMgaW1wb3J0ICoKK2Zyb20gLnN0cmVhbXMgaW1wb3J0ICoKK2Zyb20gLnN1YnByb2Nlc3MgaW1wb3J0ICoKK2Zyb20gLnRhc2tzIGltcG9ydCAqCitmcm9tIC50cmFuc3BvcnRzIGltcG9ydCAqCisKK19fYWxsX18gPSAoYmFzZV9ldmVudHMuX19hbGxfXyArCisgICAgICAgICAgIGNvcm91dGluZXMuX19hbGxfXyArCisgICAgICAgICAgIGV2ZW50cy5fX2FsbF9fICsKKyAgICAgICAgICAgZnV0dXJlcy5fX2FsbF9fICsKKyAgICAgICAgICAgbG9ja3MuX19hbGxfXyArCisgICAgICAgICAgIHByb3RvY29scy5fX2FsbF9fICsKKyAgICAgICAgICAgcXVldWVzLl9fYWxsX18gKworICAgICAgICAgICBzdHJlYW1zLl9fYWxsX18gKworICAgICAgICAgICBzdWJwcm9jZXNzLl9fYWxsX18gKworICAgICAgICAgICB0YXNrcy5fX2FsbF9fICsKKyAgICAgICAgICAgdHJhbnNwb3J0cy5fX2FsbF9fKQorCitpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzogICMgcHJhZ21hOiBubyBjb3ZlcgorICAgIGZyb20gLndpbmRvd3NfZXZlbnRzIGltcG9ydCAqCisgICAgX19hbGxfXyArPSB3aW5kb3dzX2V2ZW50cy5fX2FsbF9fCitlbHNlOgorICAgIGZyb20gLnVuaXhfZXZlbnRzIGltcG9ydCAqICAjIHByYWdtYTogbm8gY292ZXIKKyAgICBfX2FsbF9fICs9IHVuaXhfZXZlbnRzLl9fYWxsX18KZGlmZiAtLWdpdCBhL0xpYi9hc3luY2lvL2Jhc2VfZXZlbnRzLnB5IGIvTGliL2FzeW5jaW8vYmFzZV9ldmVudHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDUwNTczMgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9hc3luY2lvL2Jhc2VfZXZlbnRzLnB5CkBAIC0wLDAgKzEsMTMzOCBAQAorIiIiQmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBldmVudCBsb29wLgorCitUaGUgZXZlbnQgbG9vcCBjYW4gYmUgYnJva2VuIHVwIGludG8gYSBtdWx0aXBsZXhlciAodGhlIHBhcnQKK3Jlc3BvbnNpYmxlIGZvciBub3RpZnlpbmcgdXMgb2YgSS9PIGV2ZW50cykgYW5kIHRoZSBldmVudCBsb29wIHByb3BlciwKK3doaWNoIHdyYXBzIGEgbXVsdGlwbGV4ZXIgd2l0aCBmdW5jdGlvbmFsaXR5IGZvciBzY2hlZHVsaW5nIGNhbGxiYWNrcywKK2ltbWVkaWF0ZWx5IG9yIGF0IGEgZ2l2ZW4gdGltZSBpbiB0aGUgZnV0dXJlLgorCitXaGVuZXZlciBhIHB1YmxpYyBBUEkgdGFrZXMgYSBjYWxsYmFjaywgc3Vic2VxdWVudCBwb3NpdGlvbmFsCithcmd1bWVudHMgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrIGlmL3doZW4gaXQgaXMgY2FsbGVkLiAgVGhpcworYXZvaWRzIHRoZSBwcm9saWZlcmF0aW9uIG9mIHRyaXZpYWwgbGFtYmRhcyBpbXBsZW1lbnRpbmcgY2xvc3VyZXMuCitLZXl3b3JkIGFyZ3VtZW50cyBmb3IgdGhlIGNhbGxiYWNrIGFyZSBub3Qgc3VwcG9ydGVkOyB0aGlzIGlzIGEKK2NvbnNjaW91cyBkZXNpZ24gZGVjaXNpb24sIGxlYXZpbmcgdGhlIGRvb3Igb3BlbiBmb3Iga2V5d29yZCBhcmd1bWVudHMKK3RvIG1vZGlmeSB0aGUgbWVhbmluZyBvZiB0aGUgQVBJIGNhbGwgaXRzZWxmLgorIiIiCisKKworaW1wb3J0IGNvbGxlY3Rpb25zCitpbXBvcnQgY29uY3VycmVudC5mdXR1cmVzCitpbXBvcnQgZnVuY3Rvb2xzCitpbXBvcnQgaGVhcHEKK2ltcG9ydCBpbnNwZWN0CitpbXBvcnQgaXBhZGRyZXNzCitpbXBvcnQgaXRlcnRvb2xzCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9zCitpbXBvcnQgc29ja2V0CitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHRocmVhZGluZworaW1wb3J0IHRpbWUKK2ltcG9ydCB0cmFjZWJhY2sKK2ltcG9ydCBzeXMKK2ltcG9ydCB3YXJuaW5ncworCitmcm9tIC4gaW1wb3J0IGNvbXBhdAorZnJvbSAuIGltcG9ydCBjb3JvdXRpbmVzCitmcm9tIC4gaW1wb3J0IGV2ZW50cworZnJvbSAuIGltcG9ydCBmdXR1cmVzCitmcm9tIC4gaW1wb3J0IHRhc2tzCitmcm9tIC5jb3JvdXRpbmVzIGltcG9ydCBjb3JvdXRpbmUKK2Zyb20gLmxvZyBpbXBvcnQgbG9nZ2VyCisKKworX19hbGxfXyA9IFsnQmFzZUV2ZW50TG9vcCddCisKKworIyBBcmd1bWVudCBmb3IgZGVmYXVsdCB0aHJlYWQgcG9vbCBleGVjdXRvciBjcmVhdGlvbi4KK19NQVhfV09SS0VSUyA9IDUKKworIyBNaW5pbXVtIG51bWJlciBvZiBfc2NoZWR1bGVkIHRpbWVyIGhhbmRsZXMgYmVmb3JlIGNsZWFudXAgb2YKKyMgY2FuY2VsbGVkIGhhbmRsZXMgaXMgcGVyZm9ybWVkLgorX01JTl9TQ0hFRFVMRURfVElNRVJfSEFORExFUyA9IDEwMAorCisjIE1pbmltdW0gZnJhY3Rpb24gb2YgX3NjaGVkdWxlZCB0aW1lciBoYW5kbGVzIHRoYXQgYXJlIGNhbmNlbGxlZAorIyBiZWZvcmUgY2xlYW51cCBvZiBjYW5jZWxsZWQgaGFuZGxlcyBpcyBwZXJmb3JtZWQuCitfTUlOX0NBTkNFTExFRF9USU1FUl9IQU5ETEVTX0ZSQUNUSU9OID0gMC41CisKK2RlZiBfZm9ybWF0X2hhbmRsZShoYW5kbGUpOgorICAgIGNiID0gaGFuZGxlLl9jYWxsYmFjaworICAgIGlmIGluc3BlY3QuaXNtZXRob2QoY2IpIGFuZCBpc2luc3RhbmNlKGNiLl9fc2VsZl9fLCB0YXNrcy5UYXNrKToKKyAgICAgICAgIyBmb3JtYXQgdGhlIHRhc2sKKyAgICAgICAgcmV0dXJuIHJlcHIoY2IuX19zZWxmX18pCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIHN0cihoYW5kbGUpCisKKworZGVmIF9mb3JtYXRfcGlwZShmZCk6CisgICAgaWYgZmQgPT0gc3VicHJvY2Vzcy5QSVBFOgorICAgICAgICByZXR1cm4gJzxwaXBlPicKKyAgICBlbGlmIGZkID09IHN1YnByb2Nlc3MuU1RET1VUOgorICAgICAgICByZXR1cm4gJzxzdGRvdXQ+JworICAgIGVsc2U6CisgICAgICAgIHJldHVybiByZXByKGZkKQorCisKKyMgTGludXgncyBzb2NrLnR5cGUgaXMgYSBiaXRtYXNrIHRoYXQgY2FuIGluY2x1ZGUgZXh0cmEgaW5mbyBhYm91dCBzb2NrZXQuCitfU09DS0VUX1RZUEVfTUFTSyA9IDAKK2lmIGhhc2F0dHIoc29ja2V0LCAnU09DS19OT05CTE9DSycpOgorICAgIF9TT0NLRVRfVFlQRV9NQVNLIHw9IHNvY2tldC5TT0NLX05PTkJMT0NLCitpZiBoYXNhdHRyKHNvY2tldCwgJ1NPQ0tfQ0xPRVhFQycpOgorICAgIF9TT0NLRVRfVFlQRV9NQVNLIHw9IHNvY2tldC5TT0NLX0NMT0VYRUMKKworCitAZnVuY3Rvb2xzLmxydV9jYWNoZShtYXhzaXplPTEwMjQpCitkZWYgX2lwYWRkcl9pbmZvKGhvc3QsIHBvcnQsIGZhbWlseSwgdHlwZSwgcHJvdG8pOgorICAgICMgVHJ5IHRvIHNraXAgZ2V0YWRkcmluZm8gaWYgImhvc3QiIGlzIGFscmVhZHkgYW4gSVAuIFNpbmNlIGdldGFkZHJpbmZvCisgICAgIyBibG9ja3Mgb24gYW4gZXhjbHVzaXZlIGxvY2sgb24gc29tZSBwbGF0Zm9ybXMsIHVzZXJzIG1pZ2h0IGhhbmRsZSBuYW1lCisgICAgIyByZXNvbHV0aW9uIGluIHRoZWlyIG93biBjb2RlIGFuZCBwYXNzIGluIHJlc29sdmVkIElQcy4KKyAgICBpZiBwcm90byBub3QgaW4gezAsIHNvY2tldC5JUFBST1RPX1RDUCwgc29ja2V0LklQUFJPVE9fVURQfSBvciBob3N0IGlzIE5vbmU6CisgICAgICAgIHJldHVybiBOb25lCisKKyAgICB0eXBlICY9IH5fU09DS0VUX1RZUEVfTUFTSworICAgIGlmIHR5cGUgPT0gc29ja2V0LlNPQ0tfU1RSRUFNOgorICAgICAgICBwcm90byA9IHNvY2tldC5JUFBST1RPX1RDUAorICAgIGVsaWYgdHlwZSA9PSBzb2NrZXQuU09DS19ER1JBTToKKyAgICAgICAgcHJvdG8gPSBzb2NrZXQuSVBQUk9UT19VRFAKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgaWYgaGFzYXR0cihzb2NrZXQsICdpbmV0X3B0b24nKToKKyAgICAgICAgaWYgZmFtaWx5ID09IHNvY2tldC5BRl9VTlNQRUM6CisgICAgICAgICAgICBhZnMgPSBbc29ja2V0LkFGX0lORVQsIHNvY2tldC5BRl9JTkVUNl0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFmcyA9IFtmYW1pbHldCisKKyAgICAgICAgZm9yIGFmIGluIGFmczoKKyAgICAgICAgICAgICMgTGludXgncyBpbmV0X3B0b24gZG9lc24ndCBhY2NlcHQgYW4gSVB2NiB6b25lIGluZGV4IGFmdGVyIGhvc3QsCisgICAgICAgICAgICAjIGxpa2UgJzo6MSVsbzAnLCBzbyBzdHJpcCBpdC4gSWYgd2UgaGFwcGVuIHRvIG1ha2UgYW4gaW52YWxpZAorICAgICAgICAgICAgIyBhZGRyZXNzIGxvb2sgdmFsaWQsIHdlIGZhaWwgbGF0ZXIgaW4gc29jay5jb25uZWN0IG9yIHNvY2suYmluZC4KKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpZiBhZiA9PSBzb2NrZXQuQUZfSU5FVDY6CisgICAgICAgICAgICAgICAgICAgIHNvY2tldC5pbmV0X3B0b24oYWYsIGhvc3QucGFydGl0aW9uKCclJylbMF0pCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc29ja2V0LmluZXRfcHRvbihhZiwgaG9zdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gYWYsIHR5cGUsIHByb3RvLCAnJywgKGhvc3QsIHBvcnQpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgIyAiaG9zdCIgaXMgbm90IGFuIElQIGFkZHJlc3MuCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICAjIE5vIGluZXRfcHRvbi4gKE9uIFdpbmRvd3MgaXQncyBvbmx5IGF2YWlsYWJsZSBzaW5jZSBQeXRob24gMy40LikKKyAgICAjIEV2ZW4gdGhvdWdoIGdldGFkZHJpbmZvIHdpdGggQUlfTlVNRVJJQ0hPU1Qgd291bGQgYmUgbm9uLWJsb2NraW5nLCBpdAorICAgICMgc3RpbGwgcmVxdWlyZXMgYSBsb2NrIG9uIHNvbWUgcGxhdGZvcm1zLCBhbmQgd2FpdGluZyBmb3IgdGhhdCBsb2NrIGNvdWxkCisgICAgIyBibG9jayB0aGUgZXZlbnQgbG9vcC4gVXNlIGlwYWRkcmVzcyBpbnN0ZWFkLCBpdCdzIGp1c3QgdGV4dCBwYXJzaW5nLgorICAgIHRyeToKKyAgICAgICAgYWRkciA9IGlwYWRkcmVzcy5JUHY0QWRkcmVzcyhob3N0KQorICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBhZGRyID0gaXBhZGRyZXNzLklQdjZBZGRyZXNzKGhvc3QucGFydGl0aW9uKCclJylbMF0pCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGFmID0gc29ja2V0LkFGX0lORVQgaWYgYWRkci52ZXJzaW9uID09IDQgZWxzZSBzb2NrZXQuQUZfSU5FVDYKKyAgICBpZiBmYW1pbHkgbm90IGluIChzb2NrZXQuQUZfVU5TUEVDLCBhZik6CisgICAgICAgICMgImhvc3QiIGlzIHdyb25nIElQIHZlcnNpb24gZm9yICJmYW1pbHkiLgorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgcmV0dXJuIGFmLCB0eXBlLCBwcm90bywgJycsIChob3N0LCBwb3J0KQorCisKK2RlZiBfY2hlY2tfcmVzb2x2ZWRfYWRkcmVzcyhzb2NrLCBhZGRyZXNzKToKKyAgICAjIEVuc3VyZSB0aGF0IHRoZSBhZGRyZXNzIGlzIGFscmVhZHkgcmVzb2x2ZWQgdG8gYXZvaWQgdGhlIHRyYXAgb2YgaGFuZ2luZworICAgICMgdGhlIGVudGlyZSBldmVudCBsb29wIHdoZW4gdGhlIGFkZHJlc3MgcmVxdWlyZXMgZG9pbmcgYSBETlMgbG9va3VwLgorCisgICAgaWYgaGFzYXR0cihzb2NrZXQsICdBRl9VTklYJykgYW5kIHNvY2suZmFtaWx5ID09IHNvY2tldC5BRl9VTklYOgorICAgICAgICByZXR1cm4KKworICAgIGhvc3QsIHBvcnQgPSBhZGRyZXNzWzoyXQorICAgIGlmIF9pcGFkZHJfaW5mbyhob3N0LCBwb3J0LCBzb2NrLmZhbWlseSwgc29jay50eXBlLCBzb2NrLnByb3RvKSBpcyBOb25lOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJhZGRyZXNzIG11c3QgYmUgcmVzb2x2ZWQgKElQIGFkZHJlc3MpLCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiIGdvdCBob3N0ICVyIiAlIGhvc3QpCisKKworZGVmIF9ydW5fdW50aWxfY29tcGxldGVfY2IoZnV0KToKKyAgICBleGMgPSBmdXQuX2V4Y2VwdGlvbgorICAgIGlmIChpc2luc3RhbmNlKGV4YywgQmFzZUV4Y2VwdGlvbikKKyAgICBhbmQgbm90IGlzaW5zdGFuY2UoZXhjLCBFeGNlcHRpb24pKToKKyAgICAgICAgIyBJc3N1ZSAjMjI0Mjk6IHJ1bl9mb3JldmVyKCkgYWxyZWFkeSBmaW5pc2hlZCwgbm8gbmVlZCB0bworICAgICAgICAjIHN0b3AgaXQuCisgICAgICAgIHJldHVybgorICAgIGZ1dC5fbG9vcC5zdG9wKCkKKworCitjbGFzcyBTZXJ2ZXIoZXZlbnRzLkFic3RyYWN0U2VydmVyKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb29wLCBzb2NrZXRzKToKKyAgICAgICAgc2VsZi5fbG9vcCA9IGxvb3AKKyAgICAgICAgc2VsZi5zb2NrZXRzID0gc29ja2V0cworICAgICAgICBzZWxmLl9hY3RpdmVfY291bnQgPSAwCisgICAgICAgIHNlbGYuX3dhaXRlcnMgPSBbXQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gJzwlcyBzb2NrZXRzPSVyPicgJSAoc2VsZi5fX2NsYXNzX18uX19uYW1lX18sIHNlbGYuc29ja2V0cykKKworICAgIGRlZiBfYXR0YWNoKHNlbGYpOgorICAgICAgICBhc3NlcnQgc2VsZi5zb2NrZXRzIGlzIG5vdCBOb25lCisgICAgICAgIHNlbGYuX2FjdGl2ZV9jb3VudCArPSAxCisKKyAgICBkZWYgX2RldGFjaChzZWxmKToKKyAgICAgICAgYXNzZXJ0IHNlbGYuX2FjdGl2ZV9jb3VudCA+IDAKKyAgICAgICAgc2VsZi5fYWN0aXZlX2NvdW50IC09IDEKKyAgICAgICAgaWYgc2VsZi5fYWN0aXZlX2NvdW50ID09IDAgYW5kIHNlbGYuc29ja2V0cyBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5fd2FrZXVwKCkKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgc29ja2V0cyA9IHNlbGYuc29ja2V0cworICAgICAgICBpZiBzb2NrZXRzIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5zb2NrZXRzID0gTm9uZQorICAgICAgICBmb3Igc29jayBpbiBzb2NrZXRzOgorICAgICAgICAgICAgc2VsZi5fbG9vcC5fc3RvcF9zZXJ2aW5nKHNvY2spCisgICAgICAgIGlmIHNlbGYuX2FjdGl2ZV9jb3VudCA9PSAwOgorICAgICAgICAgICAgc2VsZi5fd2FrZXVwKCkKKworICAgIGRlZiBfd2FrZXVwKHNlbGYpOgorICAgICAgICB3YWl0ZXJzID0gc2VsZi5fd2FpdGVycworICAgICAgICBzZWxmLl93YWl0ZXJzID0gTm9uZQorICAgICAgICBmb3Igd2FpdGVyIGluIHdhaXRlcnM6CisgICAgICAgICAgICBpZiBub3Qgd2FpdGVyLmRvbmUoKToKKyAgICAgICAgICAgICAgICB3YWl0ZXIuc2V0X3Jlc3VsdCh3YWl0ZXIpCisKKyAgICBAY29yb3V0aW5lCisgICAgZGVmIHdhaXRfY2xvc2VkKHNlbGYpOgorICAgICAgICBpZiBzZWxmLnNvY2tldHMgaXMgTm9uZSBvciBzZWxmLl93YWl0ZXJzIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgd2FpdGVyID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLl9sb29wKQorICAgICAgICBzZWxmLl93YWl0ZXJzLmFwcGVuZCh3YWl0ZXIpCisgICAgICAgIHlpZWxkIGZyb20gd2FpdGVyCisKKworY2xhc3MgQmFzZUV2ZW50TG9vcChldmVudHMuQWJzdHJhY3RFdmVudExvb3ApOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLl90aW1lcl9jYW5jZWxsZWRfY291bnQgPSAwCisgICAgICAgIHNlbGYuX2Nsb3NlZCA9IEZhbHNlCisgICAgICAgIHNlbGYuX3N0b3BwaW5nID0gRmFsc2UKKyAgICAgICAgc2VsZi5fcmVhZHkgPSBjb2xsZWN0aW9ucy5kZXF1ZSgpCisgICAgICAgIHNlbGYuX3NjaGVkdWxlZCA9IFtdCisgICAgICAgIHNlbGYuX2RlZmF1bHRfZXhlY3V0b3IgPSBOb25lCisgICAgICAgIHNlbGYuX2ludGVybmFsX2ZkcyA9IDAKKyAgICAgICAgIyBJZGVudGlmaWVyIG9mIHRoZSB0aHJlYWQgcnVubmluZyB0aGUgZXZlbnQgbG9vcCwgb3IgTm9uZSBpZiB0aGUKKyAgICAgICAgIyBldmVudCBsb29wIGlzIG5vdCBydW5uaW5nCisgICAgICAgIHNlbGYuX3RocmVhZF9pZCA9IE5vbmUKKyAgICAgICAgc2VsZi5fY2xvY2tfcmVzb2x1dGlvbiA9IHRpbWUuZ2V0X2Nsb2NrX2luZm8oJ21vbm90b25pYycpLnJlc29sdXRpb24KKyAgICAgICAgc2VsZi5fZXhjZXB0aW9uX2hhbmRsZXIgPSBOb25lCisgICAgICAgIHNlbGYuc2V0X2RlYnVnKChub3Qgc3lzLmZsYWdzLmlnbm9yZV9lbnZpcm9ubWVudAorICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGJvb2wob3MuZW52aXJvbi5nZXQoJ1BZVEhPTkFTWU5DSU9ERUJVRycpKSkpCisgICAgICAgICMgSW4gZGVidWcgbW9kZSwgaWYgdGhlIGV4ZWN1dGlvbiBvZiBhIGNhbGxiYWNrIG9yIGEgc3RlcCBvZiBhIHRhc2sKKyAgICAgICAgIyBleGNlZWQgdGhpcyBkdXJhdGlvbiBpbiBzZWNvbmRzLCB0aGUgc2xvdyBjYWxsYmFjay90YXNrIGlzIGxvZ2dlZC4KKyAgICAgICAgc2VsZi5zbG93X2NhbGxiYWNrX2R1cmF0aW9uID0gMC4xCisgICAgICAgIHNlbGYuX2N1cnJlbnRfaGFuZGxlID0gTm9uZQorICAgICAgICBzZWxmLl90YXNrX2ZhY3RvcnkgPSBOb25lCisgICAgICAgIHNlbGYuX2Nvcm91dGluZV93cmFwcGVyX3NldCA9IEZhbHNlCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAoJzwlcyBydW5uaW5nPSVzIGNsb3NlZD0lcyBkZWJ1Zz0lcz4nCisgICAgICAgICAgICAgICAgJSAoc2VsZi5fX2NsYXNzX18uX19uYW1lX18sIHNlbGYuaXNfcnVubmluZygpLAorICAgICAgICAgICAgICAgICAgIHNlbGYuaXNfY2xvc2VkKCksIHNlbGYuZ2V0X2RlYnVnKCkpKQorCisgICAgZGVmIGNyZWF0ZV90YXNrKHNlbGYsIGNvcm8pOgorICAgICAgICAiIiJTY2hlZHVsZSBhIGNvcm91dGluZSBvYmplY3QuCisKKyAgICAgICAgUmV0dXJuIGEgdGFzayBvYmplY3QuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9jaGVja19jbG9zZWQoKQorICAgICAgICBpZiBzZWxmLl90YXNrX2ZhY3RvcnkgaXMgTm9uZToKKyAgICAgICAgICAgIHRhc2sgPSB0YXNrcy5UYXNrKGNvcm8sIGxvb3A9c2VsZikKKyAgICAgICAgICAgIGlmIHRhc2suX3NvdXJjZV90cmFjZWJhY2s6CisgICAgICAgICAgICAgICAgZGVsIHRhc2suX3NvdXJjZV90cmFjZWJhY2tbLTFdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0YXNrID0gc2VsZi5fdGFza19mYWN0b3J5KHNlbGYsIGNvcm8pCisgICAgICAgIHJldHVybiB0YXNrCisKKyAgICBkZWYgc2V0X3Rhc2tfZmFjdG9yeShzZWxmLCBmYWN0b3J5KToKKyAgICAgICAgIiIiU2V0IGEgdGFzayBmYWN0b3J5IHRoYXQgd2lsbCBiZSB1c2VkIGJ5IGxvb3AuY3JlYXRlX3Rhc2soKS4KKworICAgICAgICBJZiBmYWN0b3J5IGlzIE5vbmUgdGhlIGRlZmF1bHQgdGFzayBmYWN0b3J5IHdpbGwgYmUgc2V0LgorCisgICAgICAgIElmIGZhY3RvcnkgaXMgYSBjYWxsYWJsZSwgaXQgc2hvdWxkIGhhdmUgYSBzaWduYXR1cmUgbWF0Y2hpbmcKKyAgICAgICAgJyhsb29wLCBjb3JvKScsIHdoZXJlICdsb29wJyB3aWxsIGJlIGEgcmVmZXJlbmNlIHRvIHRoZSBhY3RpdmUKKyAgICAgICAgZXZlbnQgbG9vcCwgJ2Nvcm8nIHdpbGwgYmUgYSBjb3JvdXRpbmUgb2JqZWN0LiAgVGhlIGNhbGxhYmxlCisgICAgICAgIG11c3QgcmV0dXJuIGEgRnV0dXJlLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgZmFjdG9yeSBpcyBub3QgTm9uZSBhbmQgbm90IGNhbGxhYmxlKGZhY3RvcnkpOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCd0YXNrIGZhY3RvcnkgbXVzdCBiZSBhIGNhbGxhYmxlIG9yIE5vbmUnKQorICAgICAgICBzZWxmLl90YXNrX2ZhY3RvcnkgPSBmYWN0b3J5CisKKyAgICBkZWYgZ2V0X3Rhc2tfZmFjdG9yeShzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIGEgdGFzayBmYWN0b3J5LCBvciBOb25lIGlmIHRoZSBkZWZhdWx0IG9uZSBpcyBpbiB1c2UuIiIiCisgICAgICAgIHJldHVybiBzZWxmLl90YXNrX2ZhY3RvcnkKKworICAgIGRlZiBfbWFrZV9zb2NrZXRfdHJhbnNwb3J0KHNlbGYsIHNvY2ssIHByb3RvY29sLCB3YWl0ZXI9Tm9uZSwgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYT1Ob25lLCBzZXJ2ZXI9Tm9uZSk6CisgICAgICAgICIiIkNyZWF0ZSBzb2NrZXQgdHJhbnNwb3J0LiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgX21ha2Vfc3NsX3RyYW5zcG9ydChzZWxmLCByYXdzb2NrLCBwcm90b2NvbCwgc3NsY29udGV4dCwgd2FpdGVyPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiwgc2VydmVyX3NpZGU9RmFsc2UsIHNlcnZlcl9ob3N0bmFtZT1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhPU5vbmUsIHNlcnZlcj1Ob25lKToKKyAgICAgICAgIiIiQ3JlYXRlIFNTTCB0cmFuc3BvcnQuIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBfbWFrZV9kYXRhZ3JhbV90cmFuc3BvcnQoc2VsZiwgc29jaywgcHJvdG9jb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzPU5vbmUsIHdhaXRlcj1Ob25lLCBleHRyYT1Ob25lKToKKyAgICAgICAgIiIiQ3JlYXRlIGRhdGFncmFtIHRyYW5zcG9ydC4iIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIF9tYWtlX3JlYWRfcGlwZV90cmFuc3BvcnQoc2VsZiwgcGlwZSwgcHJvdG9jb2wsIHdhaXRlcj1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhPU5vbmUpOgorICAgICAgICAiIiJDcmVhdGUgcmVhZCBwaXBlIHRyYW5zcG9ydC4iIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIF9tYWtlX3dyaXRlX3BpcGVfdHJhbnNwb3J0KHNlbGYsIHBpcGUsIHByb3RvY29sLCB3YWl0ZXI9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE9Tm9uZSk6CisgICAgICAgICIiIkNyZWF0ZSB3cml0ZSBwaXBlIHRyYW5zcG9ydC4iIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgQGNvcm91dGluZQorICAgIGRlZiBfbWFrZV9zdWJwcm9jZXNzX3RyYW5zcG9ydChzZWxmLCBwcm90b2NvbCwgYXJncywgc2hlbGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGluLCBzdGRvdXQsIHN0ZGVyciwgYnVmc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE9Tm9uZSwgKiprd2FyZ3MpOgorICAgICAgICAiIiJDcmVhdGUgc3VicHJvY2VzcyB0cmFuc3BvcnQuIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBfd3JpdGVfdG9fc2VsZihzZWxmKToKKyAgICAgICAgIiIiV3JpdGUgYSBieXRlIHRvIHNlbGYtcGlwZSwgdG8gd2FrZSB1cCB0aGUgZXZlbnQgbG9vcC4KKworICAgICAgICBUaGlzIG1heSBiZSBjYWxsZWQgZnJvbSBhIGRpZmZlcmVudCB0aHJlYWQuCisKKyAgICAgICAgVGhlIHN1YmNsYXNzIGlzIHJlc3BvbnNpYmxlIGZvciBpbXBsZW1lbnRpbmcgdGhlIHNlbGYtcGlwZS4KKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBfcHJvY2Vzc19ldmVudHMoc2VsZiwgZXZlbnRfbGlzdCk6CisgICAgICAgICIiIlByb2Nlc3Mgc2VsZWN0b3IgZXZlbnRzLiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgX2NoZWNrX2Nsb3NlZChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fY2xvc2VkOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdFdmVudCBsb29wIGlzIGNsb3NlZCcpCisKKyAgICBkZWYgcnVuX2ZvcmV2ZXIoc2VsZik6CisgICAgICAgICIiIlJ1biB1bnRpbCBzdG9wKCkgaXMgY2FsbGVkLiIiIgorICAgICAgICBzZWxmLl9jaGVja19jbG9zZWQoKQorICAgICAgICBpZiBzZWxmLmlzX3J1bm5pbmcoKToKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignRXZlbnQgbG9vcCBpcyBydW5uaW5nLicpCisgICAgICAgIHNlbGYuX3NldF9jb3JvdXRpbmVfd3JhcHBlcihzZWxmLl9kZWJ1ZykKKyAgICAgICAgc2VsZi5fdGhyZWFkX2lkID0gdGhyZWFkaW5nLmdldF9pZGVudCgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgc2VsZi5fcnVuX29uY2UoKQorICAgICAgICAgICAgICAgIGlmIHNlbGYuX3N0b3BwaW5nOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5fc3RvcHBpbmcgPSBGYWxzZQorICAgICAgICAgICAgc2VsZi5fdGhyZWFkX2lkID0gTm9uZQorICAgICAgICAgICAgc2VsZi5fc2V0X2Nvcm91dGluZV93cmFwcGVyKEZhbHNlKQorCisgICAgZGVmIHJ1bl91bnRpbF9jb21wbGV0ZShzZWxmLCBmdXR1cmUpOgorICAgICAgICAiIiJSdW4gdW50aWwgdGhlIEZ1dHVyZSBpcyBkb25lLgorCisgICAgICAgIElmIHRoZSBhcmd1bWVudCBpcyBhIGNvcm91dGluZSwgaXQgaXMgd3JhcHBlZCBpbiBhIFRhc2suCisKKyAgICAgICAgV0FSTklORzogSXQgd291bGQgYmUgZGlzYXN0cm91cyB0byBjYWxsIHJ1bl91bnRpbF9jb21wbGV0ZSgpCisgICAgICAgIHdpdGggdGhlIHNhbWUgY29yb3V0aW5lIHR3aWNlIC0tIGl0IHdvdWxkIHdyYXAgaXQgaW4gdHdvCisgICAgICAgIGRpZmZlcmVudCBUYXNrcyBhbmQgdGhhdCBjYW4ndCBiZSBnb29kLgorCisgICAgICAgIFJldHVybiB0aGUgRnV0dXJlJ3MgcmVzdWx0LCBvciByYWlzZSBpdHMgZXhjZXB0aW9uLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fY2hlY2tfY2xvc2VkKCkKKworICAgICAgICBuZXdfdGFzayA9IG5vdCBpc2luc3RhbmNlKGZ1dHVyZSwgZnV0dXJlcy5GdXR1cmUpCisgICAgICAgIGZ1dHVyZSA9IHRhc2tzLmVuc3VyZV9mdXR1cmUoZnV0dXJlLCBsb29wPXNlbGYpCisgICAgICAgIGlmIG5ld190YXNrOgorICAgICAgICAgICAgIyBBbiBleGNlcHRpb24gaXMgcmFpc2VkIGlmIHRoZSBmdXR1cmUgZGlkbid0IGNvbXBsZXRlLCBzbyB0aGVyZQorICAgICAgICAgICAgIyBpcyBubyBuZWVkIHRvIGxvZyB0aGUgImRlc3Ryb3kgcGVuZGluZyB0YXNrIiBtZXNzYWdlCisgICAgICAgICAgICBmdXR1cmUuX2xvZ19kZXN0cm95X3BlbmRpbmcgPSBGYWxzZQorCisgICAgICAgIGZ1dHVyZS5hZGRfZG9uZV9jYWxsYmFjayhfcnVuX3VudGlsX2NvbXBsZXRlX2NiKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLnJ1bl9mb3JldmVyKCkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgaWYgbmV3X3Rhc2sgYW5kIGZ1dHVyZS5kb25lKCkgYW5kIG5vdCBmdXR1cmUuY2FuY2VsbGVkKCk6CisgICAgICAgICAgICAgICAgIyBUaGUgY29yb3V0aW5lIHJhaXNlZCBhIEJhc2VFeGNlcHRpb24uIENvbnN1bWUgdGhlIGV4Y2VwdGlvbgorICAgICAgICAgICAgICAgICMgdG8gbm90IGxvZyBhIHdhcm5pbmcsIHRoZSBjYWxsZXIgZG9lc24ndCBoYXZlIGFjY2VzcyB0byB0aGUKKyAgICAgICAgICAgICAgICAjIGxvY2FsIHRhc2suCisgICAgICAgICAgICAgICAgZnV0dXJlLmV4Y2VwdGlvbigpCisgICAgICAgICAgICByYWlzZQorICAgICAgICBmdXR1cmUucmVtb3ZlX2RvbmVfY2FsbGJhY2soX3J1bl91bnRpbF9jb21wbGV0ZV9jYikKKyAgICAgICAgaWYgbm90IGZ1dHVyZS5kb25lKCk6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ0V2ZW50IGxvb3Agc3RvcHBlZCBiZWZvcmUgRnV0dXJlIGNvbXBsZXRlZC4nKQorCisgICAgICAgIHJldHVybiBmdXR1cmUucmVzdWx0KCkKKworICAgIGRlZiBzdG9wKHNlbGYpOgorICAgICAgICAiIiJTdG9wIHJ1bm5pbmcgdGhlIGV2ZW50IGxvb3AuCisKKyAgICAgICAgRXZlcnkgY2FsbGJhY2sgYWxyZWFkeSBzY2hlZHVsZWQgd2lsbCBzdGlsbCBydW4uICBUaGlzIHNpbXBseSBpbmZvcm1zCisgICAgICAgIHJ1bl9mb3JldmVyIHRvIHN0b3AgbG9vcGluZyBhZnRlciBhIGNvbXBsZXRlIGl0ZXJhdGlvbi4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX3N0b3BwaW5nID0gVHJ1ZQorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICAiIiJDbG9zZSB0aGUgZXZlbnQgbG9vcC4KKworICAgICAgICBUaGlzIGNsZWFycyB0aGUgcXVldWVzIGFuZCBzaHV0cyBkb3duIHRoZSBleGVjdXRvciwKKyAgICAgICAgYnV0IGRvZXMgbm90IHdhaXQgZm9yIHRoZSBleGVjdXRvciB0byBmaW5pc2guCisKKyAgICAgICAgVGhlIGV2ZW50IGxvb3AgbXVzdCBub3QgYmUgcnVubmluZy4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuaXNfcnVubmluZygpOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJDYW5ub3QgY2xvc2UgYSBydW5uaW5nIGV2ZW50IGxvb3AiKQorICAgICAgICBpZiBzZWxmLl9jbG9zZWQ6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgc2VsZi5fZGVidWc6CisgICAgICAgICAgICBsb2dnZXIuZGVidWcoIkNsb3NlICVyIiwgc2VsZikKKyAgICAgICAgc2VsZi5fY2xvc2VkID0gVHJ1ZQorICAgICAgICBzZWxmLl9yZWFkeS5jbGVhcigpCisgICAgICAgIHNlbGYuX3NjaGVkdWxlZC5jbGVhcigpCisgICAgICAgIGV4ZWN1dG9yID0gc2VsZi5fZGVmYXVsdF9leGVjdXRvcgorICAgICAgICBpZiBleGVjdXRvciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2RlZmF1bHRfZXhlY3V0b3IgPSBOb25lCisgICAgICAgICAgICBleGVjdXRvci5zaHV0ZG93bih3YWl0PUZhbHNlKQorCisgICAgZGVmIGlzX2Nsb3NlZChzZWxmKToKKyAgICAgICAgIiIiUmV0dXJucyBUcnVlIGlmIHRoZSBldmVudCBsb29wIHdhcyBjbG9zZWQuIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9jbG9zZWQKKworICAgICMgT24gUHl0aG9uIDMuMyBhbmQgb2xkZXIsIG9iamVjdHMgd2l0aCBhIGRlc3RydWN0b3IgcGFydCBvZiBhIHJlZmVyZW5jZQorICAgICMgY3ljbGUgYXJlIG5ldmVyIGRlc3Ryb3llZC4gSXQncyBub3QgbW9yZSB0aGUgY2FzZSBvbiBQeXRob24gMy40IHRoYW5rcworICAgICMgdG8gdGhlIFBFUCA0NDIuCisgICAgaWYgY29tcGF0LlBZMzQ6CisgICAgICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICAgICAgaWYgbm90IHNlbGYuaXNfY2xvc2VkKCk6CisgICAgICAgICAgICAgICAgd2FybmluZ3Mud2FybigidW5jbG9zZWQgZXZlbnQgbG9vcCAlciIgJSBzZWxmLCBSZXNvdXJjZVdhcm5pbmcpCisgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuaXNfcnVubmluZygpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmNsb3NlKCkKKworICAgIGRlZiBpc19ydW5uaW5nKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm5zIFRydWUgaWYgdGhlIGV2ZW50IGxvb3AgaXMgcnVubmluZy4iIiIKKyAgICAgICAgcmV0dXJuIChzZWxmLl90aHJlYWRfaWQgaXMgbm90IE5vbmUpCisKKyAgICBkZWYgdGltZShzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSB0aW1lIGFjY29yZGluZyB0byB0aGUgZXZlbnQgbG9vcCdzIGNsb2NrLgorCisgICAgICAgIFRoaXMgaXMgYSBmbG9hdCBleHByZXNzZWQgaW4gc2Vjb25kcyBzaW5jZSBhbiBlcG9jaCwgYnV0IHRoZQorICAgICAgICBlcG9jaCwgcHJlY2lzaW9uLCBhY2N1cmFjeSBhbmQgZHJpZnQgYXJlIHVuc3BlY2lmaWVkIGFuZCBtYXkKKyAgICAgICAgZGlmZmVyIHBlciBldmVudCBsb29wLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHRpbWUubW9ub3RvbmljKCkKKworICAgIGRlZiBjYWxsX2xhdGVyKHNlbGYsIGRlbGF5LCBjYWxsYmFjaywgKmFyZ3MpOgorICAgICAgICAiIiJBcnJhbmdlIGZvciBhIGNhbGxiYWNrIHRvIGJlIGNhbGxlZCBhdCBhIGdpdmVuIHRpbWUuCisKKyAgICAgICAgUmV0dXJuIGEgSGFuZGxlOiBhbiBvcGFxdWUgb2JqZWN0IHdpdGggYSBjYW5jZWwoKSBtZXRob2QgdGhhdAorICAgICAgICBjYW4gYmUgdXNlZCB0byBjYW5jZWwgdGhlIGNhbGwuCisKKyAgICAgICAgVGhlIGRlbGF5IGNhbiBiZSBhbiBpbnQgb3IgZmxvYXQsIGV4cHJlc3NlZCBpbiBzZWNvbmRzLiAgSXQgaXMKKyAgICAgICAgYWx3YXlzIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHRpbWUuCisKKyAgICAgICAgRWFjaCBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBleGFjdGx5IG9uY2UuICBJZiB0d28gY2FsbGJhY2tzCisgICAgICAgIGFyZSBzY2hlZHVsZWQgZm9yIGV4YWN0bHkgdGhlIHNhbWUgdGltZSwgaXQgdW5kZWZpbmVkIHdoaWNoCisgICAgICAgIHdpbGwgYmUgY2FsbGVkIGZpcnN0LgorCisgICAgICAgIEFueSBwb3NpdGlvbmFsIGFyZ3VtZW50cyBhZnRlciB0aGUgY2FsbGJhY2sgd2lsbCBiZSBwYXNzZWQgdG8KKyAgICAgICAgdGhlIGNhbGxiYWNrIHdoZW4gaXQgaXMgY2FsbGVkLgorICAgICAgICAiIiIKKyAgICAgICAgdGltZXIgPSBzZWxmLmNhbGxfYXQoc2VsZi50aW1lKCkgKyBkZWxheSwgY2FsbGJhY2ssICphcmdzKQorICAgICAgICBpZiB0aW1lci5fc291cmNlX3RyYWNlYmFjazoKKyAgICAgICAgICAgIGRlbCB0aW1lci5fc291cmNlX3RyYWNlYmFja1stMV0KKyAgICAgICAgcmV0dXJuIHRpbWVyCisKKyAgICBkZWYgY2FsbF9hdChzZWxmLCB3aGVuLCBjYWxsYmFjaywgKmFyZ3MpOgorICAgICAgICAiIiJMaWtlIGNhbGxfbGF0ZXIoKSwgYnV0IHVzZXMgYW4gYWJzb2x1dGUgdGltZS4KKworICAgICAgICBBYnNvbHV0ZSB0aW1lIGNvcnJlc3BvbmRzIHRvIHRoZSBldmVudCBsb29wJ3MgdGltZSgpIG1ldGhvZC4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIChjb3JvdXRpbmVzLmlzY29yb3V0aW5lKGNhbGxiYWNrKQorICAgICAgICBvciBjb3JvdXRpbmVzLmlzY29yb3V0aW5lZnVuY3Rpb24oY2FsbGJhY2spKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiY29yb3V0aW5lcyBjYW5ub3QgYmUgdXNlZCB3aXRoIGNhbGxfYXQoKSIpCisgICAgICAgIHNlbGYuX2NoZWNrX2Nsb3NlZCgpCisgICAgICAgIGlmIHNlbGYuX2RlYnVnOgorICAgICAgICAgICAgc2VsZi5fY2hlY2tfdGhyZWFkKCkKKyAgICAgICAgdGltZXIgPSBldmVudHMuVGltZXJIYW5kbGUod2hlbiwgY2FsbGJhY2ssIGFyZ3MsIHNlbGYpCisgICAgICAgIGlmIHRpbWVyLl9zb3VyY2VfdHJhY2ViYWNrOgorICAgICAgICAgICAgZGVsIHRpbWVyLl9zb3VyY2VfdHJhY2ViYWNrWy0xXQorICAgICAgICBoZWFwcS5oZWFwcHVzaChzZWxmLl9zY2hlZHVsZWQsIHRpbWVyKQorICAgICAgICB0aW1lci5fc2NoZWR1bGVkID0gVHJ1ZQorICAgICAgICByZXR1cm4gdGltZXIKKworICAgIGRlZiBjYWxsX3Nvb24oc2VsZiwgY2FsbGJhY2ssICphcmdzKToKKyAgICAgICAgIiIiQXJyYW5nZSBmb3IgYSBjYWxsYmFjayB0byBiZSBjYWxsZWQgYXMgc29vbiBhcyBwb3NzaWJsZS4KKworICAgICAgICBUaGlzIG9wZXJhdGVzIGFzIGEgRklGTyBxdWV1ZTogY2FsbGJhY2tzIGFyZSBjYWxsZWQgaW4gdGhlCisgICAgICAgIG9yZGVyIGluIHdoaWNoIHRoZXkgYXJlIHJlZ2lzdGVyZWQuICBFYWNoIGNhbGxiYWNrIHdpbGwgYmUKKyAgICAgICAgY2FsbGVkIGV4YWN0bHkgb25jZS4KKworICAgICAgICBBbnkgcG9zaXRpb25hbCBhcmd1bWVudHMgYWZ0ZXIgdGhlIGNhbGxiYWNrIHdpbGwgYmUgcGFzc2VkIHRvCisgICAgICAgIHRoZSBjYWxsYmFjayB3aGVuIGl0IGlzIGNhbGxlZC4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuX2RlYnVnOgorICAgICAgICAgICAgc2VsZi5fY2hlY2tfdGhyZWFkKCkKKyAgICAgICAgaGFuZGxlID0gc2VsZi5fY2FsbF9zb29uKGNhbGxiYWNrLCBhcmdzKQorICAgICAgICBpZiBoYW5kbGUuX3NvdXJjZV90cmFjZWJhY2s6CisgICAgICAgICAgICBkZWwgaGFuZGxlLl9zb3VyY2VfdHJhY2ViYWNrWy0xXQorICAgICAgICByZXR1cm4gaGFuZGxlCisKKyAgICBkZWYgX2NhbGxfc29vbihzZWxmLCBjYWxsYmFjaywgYXJncyk6CisgICAgICAgIGlmIChjb3JvdXRpbmVzLmlzY29yb3V0aW5lKGNhbGxiYWNrKQorICAgICAgICBvciBjb3JvdXRpbmVzLmlzY29yb3V0aW5lZnVuY3Rpb24oY2FsbGJhY2spKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiY29yb3V0aW5lcyBjYW5ub3QgYmUgdXNlZCB3aXRoIGNhbGxfc29vbigpIikKKyAgICAgICAgc2VsZi5fY2hlY2tfY2xvc2VkKCkKKyAgICAgICAgaGFuZGxlID0gZXZlbnRzLkhhbmRsZShjYWxsYmFjaywgYXJncywgc2VsZikKKyAgICAgICAgaWYgaGFuZGxlLl9zb3VyY2VfdHJhY2ViYWNrOgorICAgICAgICAgICAgZGVsIGhhbmRsZS5fc291cmNlX3RyYWNlYmFja1stMV0KKyAgICAgICAgc2VsZi5fcmVhZHkuYXBwZW5kKGhhbmRsZSkKKyAgICAgICAgcmV0dXJuIGhhbmRsZQorCisgICAgZGVmIF9jaGVja190aHJlYWQoc2VsZik6CisgICAgICAgICIiIkNoZWNrIHRoYXQgdGhlIGN1cnJlbnQgdGhyZWFkIGlzIHRoZSB0aHJlYWQgcnVubmluZyB0aGUgZXZlbnQgbG9vcC4KKworICAgICAgICBOb24tdGhyZWFkLXNhZmUgbWV0aG9kcyBvZiB0aGlzIGNsYXNzIG1ha2UgdGhpcyBhc3N1bXB0aW9uIGFuZCB3aWxsCisgICAgICAgIGxpa2VseSBiZWhhdmUgaW5jb3JyZWN0bHkgd2hlbiB0aGUgYXNzdW1wdGlvbiBpcyB2aW9sYXRlZC4KKworICAgICAgICBTaG91bGQgb25seSBiZSBjYWxsZWQgd2hlbiAoc2VsZi5fZGVidWcgPT0gVHJ1ZSkuICBUaGUgY2FsbGVyIGlzCisgICAgICAgIHJlc3BvbnNpYmxlIGZvciBjaGVja2luZyB0aGlzIGNvbmRpdGlvbiBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucy4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuX3RocmVhZF9pZCBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHRocmVhZF9pZCA9IHRocmVhZGluZy5nZXRfaWRlbnQoKQorICAgICAgICBpZiB0aHJlYWRfaWQgIT0gc2VsZi5fdGhyZWFkX2lkOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKAorICAgICAgICAgICAgICAgICJOb24tdGhyZWFkLXNhZmUgb3BlcmF0aW9uIGludm9rZWQgb24gYW4gZXZlbnQgbG9vcCBvdGhlciAiCisgICAgICAgICAgICAgICAgInRoYW4gdGhlIGN1cnJlbnQgb25lIikKKworICAgIGRlZiBjYWxsX3Nvb25fdGhyZWFkc2FmZShzZWxmLCBjYWxsYmFjaywgKmFyZ3MpOgorICAgICAgICAiIiJMaWtlIGNhbGxfc29vbigpLCBidXQgdGhyZWFkLXNhZmUuIiIiCisgICAgICAgIGhhbmRsZSA9IHNlbGYuX2NhbGxfc29vbihjYWxsYmFjaywgYXJncykKKyAgICAgICAgaWYgaGFuZGxlLl9zb3VyY2VfdHJhY2ViYWNrOgorICAgICAgICAgICAgZGVsIGhhbmRsZS5fc291cmNlX3RyYWNlYmFja1stMV0KKyAgICAgICAgc2VsZi5fd3JpdGVfdG9fc2VsZigpCisgICAgICAgIHJldHVybiBoYW5kbGUKKworICAgIGRlZiBydW5faW5fZXhlY3V0b3Ioc2VsZiwgZXhlY3V0b3IsIGZ1bmMsICphcmdzKToKKyAgICAgICAgaWYgKGNvcm91dGluZXMuaXNjb3JvdXRpbmUoZnVuYykKKyAgICAgICAgb3IgY29yb3V0aW5lcy5pc2Nvcm91dGluZWZ1bmN0aW9uKGZ1bmMpKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiY29yb3V0aW5lcyBjYW5ub3QgYmUgdXNlZCB3aXRoIHJ1bl9pbl9leGVjdXRvcigpIikKKyAgICAgICAgc2VsZi5fY2hlY2tfY2xvc2VkKCkKKyAgICAgICAgaWYgaXNpbnN0YW5jZShmdW5jLCBldmVudHMuSGFuZGxlKToKKyAgICAgICAgICAgIGFzc2VydCBub3QgYXJncworICAgICAgICAgICAgYXNzZXJ0IG5vdCBpc2luc3RhbmNlKGZ1bmMsIGV2ZW50cy5UaW1lckhhbmRsZSkKKyAgICAgICAgICAgIGlmIGZ1bmMuX2NhbmNlbGxlZDoKKyAgICAgICAgICAgICAgICBmID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmKQorICAgICAgICAgICAgICAgIGYuc2V0X3Jlc3VsdChOb25lKQorICAgICAgICAgICAgICAgIHJldHVybiBmCisgICAgICAgICAgICBmdW5jLCBhcmdzID0gZnVuYy5fY2FsbGJhY2ssIGZ1bmMuX2FyZ3MKKyAgICAgICAgaWYgZXhlY3V0b3IgaXMgTm9uZToKKyAgICAgICAgICAgIGV4ZWN1dG9yID0gc2VsZi5fZGVmYXVsdF9leGVjdXRvcgorICAgICAgICAgICAgaWYgZXhlY3V0b3IgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBleGVjdXRvciA9IGNvbmN1cnJlbnQuZnV0dXJlcy5UaHJlYWRQb29sRXhlY3V0b3IoX01BWF9XT1JLRVJTKQorICAgICAgICAgICAgICAgIHNlbGYuX2RlZmF1bHRfZXhlY3V0b3IgPSBleGVjdXRvcgorICAgICAgICByZXR1cm4gZnV0dXJlcy53cmFwX2Z1dHVyZShleGVjdXRvci5zdWJtaXQoZnVuYywgKmFyZ3MpLCBsb29wPXNlbGYpCisKKyAgICBkZWYgc2V0X2RlZmF1bHRfZXhlY3V0b3Ioc2VsZiwgZXhlY3V0b3IpOgorICAgICAgICBzZWxmLl9kZWZhdWx0X2V4ZWN1dG9yID0gZXhlY3V0b3IKKworICAgIGRlZiBfZ2V0YWRkcmluZm9fZGVidWcoc2VsZiwgaG9zdCwgcG9ydCwgZmFtaWx5LCB0eXBlLCBwcm90bywgZmxhZ3MpOgorICAgICAgICBtc2cgPSBbIiVzOiVyIiAlIChob3N0LCBwb3J0KV0KKyAgICAgICAgaWYgZmFtaWx5OgorICAgICAgICAgICAgbXNnLmFwcGVuZCgnZmFtaWx5PSVyJyAlIGZhbWlseSkKKyAgICAgICAgaWYgdHlwZToKKyAgICAgICAgICAgIG1zZy5hcHBlbmQoJ3R5cGU9JXInICUgdHlwZSkKKyAgICAgICAgaWYgcHJvdG86CisgICAgICAgICAgICBtc2cuYXBwZW5kKCdwcm90bz0lcicgJSBwcm90bykKKyAgICAgICAgaWYgZmxhZ3M6CisgICAgICAgICAgICBtc2cuYXBwZW5kKCdmbGFncz0lcicgJSBmbGFncykKKyAgICAgICAgbXNnID0gJywgJy5qb2luKG1zZykKKyAgICAgICAgbG9nZ2VyLmRlYnVnKCdHZXQgYWRkcmVzcyBpbmZvICVzJywgbXNnKQorCisgICAgICAgIHQwID0gc2VsZi50aW1lKCkKKyAgICAgICAgYWRkcmluZm8gPSBzb2NrZXQuZ2V0YWRkcmluZm8oaG9zdCwgcG9ydCwgZmFtaWx5LCB0eXBlLCBwcm90bywgZmxhZ3MpCisgICAgICAgIGR0ID0gc2VsZi50aW1lKCkgLSB0MAorCisgICAgICAgIG1zZyA9ICgnR2V0dGluZyBhZGRyZXNzIGluZm8gJXMgdG9vayAlLjNmIG1zOiAlcicKKyAgICAgICAgICAgICAgICUgKG1zZywgZHQgKiAxZTMsIGFkZHJpbmZvKSkKKyAgICAgICAgaWYgZHQgPj0gc2VsZi5zbG93X2NhbGxiYWNrX2R1cmF0aW9uOgorICAgICAgICAgICAgbG9nZ2VyLmluZm8obXNnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKG1zZykKKyAgICAgICAgcmV0dXJuIGFkZHJpbmZvCisKKyAgICBkZWYgZ2V0YWRkcmluZm8oc2VsZiwgaG9zdCwgcG9ydCwgKiwKKyAgICAgICAgICAgICAgICAgICAgZmFtaWx5PTAsIHR5cGU9MCwgcHJvdG89MCwgZmxhZ3M9MCk6CisgICAgICAgIGluZm8gPSBfaXBhZGRyX2luZm8oaG9zdCwgcG9ydCwgZmFtaWx5LCB0eXBlLCBwcm90bykKKyAgICAgICAgaWYgaW5mbyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGZ1dCA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZikKKyAgICAgICAgICAgIGZ1dC5zZXRfcmVzdWx0KFtpbmZvXSkKKyAgICAgICAgICAgIHJldHVybiBmdXQKKyAgICAgICAgZWxpZiBzZWxmLl9kZWJ1ZzoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnJ1bl9pbl9leGVjdXRvcihOb25lLCBzZWxmLl9nZXRhZGRyaW5mb19kZWJ1ZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3N0LCBwb3J0LCBmYW1pbHksIHR5cGUsIHByb3RvLCBmbGFncykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnJ1bl9pbl9leGVjdXRvcihOb25lLCBzb2NrZXQuZ2V0YWRkcmluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9zdCwgcG9ydCwgZmFtaWx5LCB0eXBlLCBwcm90bywgZmxhZ3MpCisKKyAgICBkZWYgZ2V0bmFtZWluZm8oc2VsZiwgc29ja2FkZHIsIGZsYWdzPTApOgorICAgICAgICByZXR1cm4gc2VsZi5ydW5faW5fZXhlY3V0b3IoTm9uZSwgc29ja2V0LmdldG5hbWVpbmZvLCBzb2NrYWRkciwgZmxhZ3MpCisKKyAgICBAY29yb3V0aW5lCisgICAgZGVmIGNyZWF0ZV9jb25uZWN0aW9uKHNlbGYsIHByb3RvY29sX2ZhY3RvcnksIGhvc3Q9Tm9uZSwgcG9ydD1Ob25lLCAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzc2w9Tm9uZSwgZmFtaWx5PTAsIHByb3RvPTAsIGZsYWdzPTAsIHNvY2s9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxfYWRkcj1Ob25lLCBzZXJ2ZXJfaG9zdG5hbWU9Tm9uZSk6CisgICAgICAgICIiIkNvbm5lY3QgdG8gYSBUQ1Agc2VydmVyLgorCisgICAgICAgIENyZWF0ZSBhIHN0cmVhbWluZyB0cmFuc3BvcnQgY29ubmVjdGlvbiB0byBhIGdpdmVuIEludGVybmV0IGhvc3QgYW5kCisgICAgICAgIHBvcnQ6IHNvY2tldCBmYW1pbHkgQUZfSU5FVCBvciBzb2NrZXQuQUZfSU5FVDYgZGVwZW5kaW5nIG9uIGhvc3QgKG9yCisgICAgICAgIGZhbWlseSBpZiBzcGVjaWZpZWQpLCBzb2NrZXQgdHlwZSBTT0NLX1NUUkVBTS4gcHJvdG9jb2xfZmFjdG9yeSBtdXN0IGJlCisgICAgICAgIGEgY2FsbGFibGUgcmV0dXJuaW5nIGEgcHJvdG9jb2wgaW5zdGFuY2UuCisKKyAgICAgICAgVGhpcyBtZXRob2QgaXMgYSBjb3JvdXRpbmUgd2hpY2ggd2lsbCB0cnkgdG8gZXN0YWJsaXNoIHRoZSBjb25uZWN0aW9uCisgICAgICAgIGluIHRoZSBiYWNrZ3JvdW5kLiAgV2hlbiBzdWNjZXNzZnVsLCB0aGUgY29yb3V0aW5lIHJldHVybnMgYQorICAgICAgICAodHJhbnNwb3J0LCBwcm90b2NvbCkgcGFpci4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlcnZlcl9ob3N0bmFtZSBpcyBub3QgTm9uZSBhbmQgbm90IHNzbDoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3NlcnZlcl9ob3N0bmFtZSBpcyBvbmx5IG1lYW5pbmdmdWwgd2l0aCBzc2wnKQorCisgICAgICAgIGlmIHNlcnZlcl9ob3N0bmFtZSBpcyBOb25lIGFuZCBzc2w6CisgICAgICAgICAgICAjIFVzZSBob3N0IGFzIGRlZmF1bHQgZm9yIHNlcnZlcl9ob3N0bmFtZS4gIEl0IGlzIGFuIGVycm9yCisgICAgICAgICAgICAjIGlmIGhvc3QgaXMgZW1wdHkgb3Igbm90IHNldCwgZS5nLiB3aGVuIGFuCisgICAgICAgICAgICAjIGFscmVhZHktY29ubmVjdGVkIHNvY2tldCB3YXMgcGFzc2VkIG9yIHdoZW4gb25seSBhIHBvcnQKKyAgICAgICAgICAgICMgaXMgZ2l2ZW4uICBUbyBhdm9pZCB0aGlzIGVycm9yLCB5b3UgY2FuIHBhc3MKKyAgICAgICAgICAgICMgc2VydmVyX2hvc3RuYW1lPScnIC0tIHRoaXMgd2lsbCBieXBhc3MgdGhlIGhvc3RuYW1lCisgICAgICAgICAgICAjIGNoZWNrLiAgKFRoaXMgYWxzbyBtZWFucyB0aGF0IGlmIGhvc3QgaXMgYSBudW1lcmljCisgICAgICAgICAgICAjIElQL0lQdjYgYWRkcmVzcywgd2Ugd2lsbCBhdHRlbXB0IHRvIHZlcmlmeSB0aGF0IGV4YWN0CisgICAgICAgICAgICAjIGFkZHJlc3M7IHRoaXMgd2lsbCBwcm9iYWJseSBmYWlsLCBidXQgaXQgaXMgcG9zc2libGUgdG8KKyAgICAgICAgICAgICMgY3JlYXRlIGEgY2VydGlmaWNhdGUgZm9yIGEgc3BlY2lmaWMgSVAgYWRkcmVzcywgc28gd2UKKyAgICAgICAgICAgICMgZG9uJ3QganVkZ2UgaXQgaGVyZS4pCisgICAgICAgICAgICBpZiBub3QgaG9zdDoKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdZb3UgbXVzdCBzZXQgc2VydmVyX2hvc3RuYW1lICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3aGVuIHVzaW5nIHNzbCB3aXRob3V0IGEgaG9zdCcpCisgICAgICAgICAgICBzZXJ2ZXJfaG9zdG5hbWUgPSBob3N0CisKKyAgICAgICAgaWYgaG9zdCBpcyBub3QgTm9uZSBvciBwb3J0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgaWYgc29jayBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAorICAgICAgICAgICAgICAgICAgICAnaG9zdC9wb3J0IGFuZCBzb2NrIGNhbiBub3QgYmUgc3BlY2lmaWVkIGF0IHRoZSBzYW1lIHRpbWUnKQorCisgICAgICAgICAgICBmMSA9IHNlbGYuZ2V0YWRkcmluZm8oCisgICAgICAgICAgICAgICAgaG9zdCwgcG9ydCwgZmFtaWx5PWZhbWlseSwKKyAgICAgICAgICAgICAgICB0eXBlPXNvY2tldC5TT0NLX1NUUkVBTSwgcHJvdG89cHJvdG8sIGZsYWdzPWZsYWdzKQorICAgICAgICAgICAgZnMgPSBbZjFdCisgICAgICAgICAgICBpZiBsb2NhbF9hZGRyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGYyID0gc2VsZi5nZXRhZGRyaW5mbygKKyAgICAgICAgICAgICAgICAgICAgKmxvY2FsX2FkZHIsIGZhbWlseT1mYW1pbHksCisgICAgICAgICAgICAgICAgICAgIHR5cGU9c29ja2V0LlNPQ0tfU1RSRUFNLCBwcm90bz1wcm90bywgZmxhZ3M9ZmxhZ3MpCisgICAgICAgICAgICAgICAgZnMuYXBwZW5kKGYyKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBmMiA9IE5vbmUKKworICAgICAgICAgICAgeWllbGQgZnJvbSB0YXNrcy53YWl0KGZzLCBsb29wPXNlbGYpCisKKyAgICAgICAgICAgIGluZm9zID0gZjEucmVzdWx0KCkKKyAgICAgICAgICAgIGlmIG5vdCBpbmZvczoKKyAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCdnZXRhZGRyaW5mbygpIHJldHVybmVkIGVtcHR5IGxpc3QnKQorICAgICAgICAgICAgaWYgZjIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgbGFkZHJfaW5mb3MgPSBmMi5yZXN1bHQoKQorICAgICAgICAgICAgICAgIGlmIG5vdCBsYWRkcl9pbmZvczoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcignZ2V0YWRkcmluZm8oKSByZXR1cm5lZCBlbXB0eSBsaXN0JykKKworICAgICAgICAgICAgZXhjZXB0aW9ucyA9IFtdCisgICAgICAgICAgICBmb3IgZmFtaWx5LCB0eXBlLCBwcm90bywgY25hbWUsIGFkZHJlc3MgaW4gaW5mb3M6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldChmYW1pbHk9ZmFtaWx5LCB0eXBlPXR5cGUsIHByb3RvPXByb3RvKQorICAgICAgICAgICAgICAgICAgICBzb2NrLnNldGJsb2NraW5nKEZhbHNlKQorICAgICAgICAgICAgICAgICAgICBpZiBmMiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBfLCBfLCBfLCBfLCBsYWRkciBpbiBsYWRkcl9pbmZvczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2suYmluZChsYWRkcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4YyA9IE9TRXJyb3IoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGMuZXJybm8sICdlcnJvciB3aGlsZSAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXR0ZW1wdGluZyB0byBiaW5kIG9uIGFkZHJlc3MgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3shcn06IHt9Jy5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFkZHIsIGV4Yy5zdHJlcnJvci5sb3dlcigpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9ucy5hcHBlbmQoZXhjKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrLmNsb3NlKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrID0gTm9uZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuX2RlYnVnOgorICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCJjb25uZWN0ICVyIHRvICVyIiwgc29jaywgYWRkcmVzcykKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgZnJvbSBzZWxmLnNvY2tfY29ubmVjdChzb2NrLCBhZGRyZXNzKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKKyAgICAgICAgICAgICAgICAgICAgaWYgc29jayBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvY2suY2xvc2UoKQorICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25zLmFwcGVuZChleGMpCisgICAgICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgICAgICBpZiBzb2NrIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgc29jay5jbG9zZSgpCisgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgbGVuKGV4Y2VwdGlvbnMpID09IDE6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIGV4Y2VwdGlvbnNbMF0KKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAjIElmIHRoZXkgYWxsIGhhdmUgdGhlIHNhbWUgc3RyKCksIHJhaXNlIG9uZS4KKyAgICAgICAgICAgICAgICAgICAgbW9kZWwgPSBzdHIoZXhjZXB0aW9uc1swXSkKKyAgICAgICAgICAgICAgICAgICAgaWYgYWxsKHN0cihleGMpID09IG1vZGVsIGZvciBleGMgaW4gZXhjZXB0aW9ucyk6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBleGNlcHRpb25zWzBdCisgICAgICAgICAgICAgICAgICAgICMgUmFpc2UgYSBjb21iaW5lZCBleGNlcHRpb24gc28gdGhlIHVzZXIgY2FuIHNlZSBhbGwKKyAgICAgICAgICAgICAgICAgICAgIyB0aGUgdmFyaW91cyBlcnJvciBtZXNzYWdlcy4KKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcignTXVsdGlwbGUgZXhjZXB0aW9uczoge30nLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICcsICcuam9pbihzdHIoZXhjKSBmb3IgZXhjIGluIGV4Y2VwdGlvbnMpKSkKKworICAgICAgICBlbGlmIHNvY2sgaXMgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCisgICAgICAgICAgICAgICAgJ2hvc3QgYW5kIHBvcnQgd2FzIG5vdCBzcGVjaWZpZWQgYW5kIG5vIHNvY2sgc3BlY2lmaWVkJykKKworICAgICAgICBzb2NrLnNldGJsb2NraW5nKEZhbHNlKQorCisgICAgICAgIHRyYW5zcG9ydCwgcHJvdG9jb2wgPSB5aWVsZCBmcm9tIHNlbGYuX2NyZWF0ZV9jb25uZWN0aW9uX3RyYW5zcG9ydCgKKyAgICAgICAgICAgIHNvY2ssIHByb3RvY29sX2ZhY3RvcnksIHNzbCwgc2VydmVyX2hvc3RuYW1lKQorICAgICAgICBpZiBzZWxmLl9kZWJ1ZzoKKyAgICAgICAgICAgICMgR2V0IHRoZSBzb2NrZXQgZnJvbSB0aGUgdHJhbnNwb3J0IGJlY2F1c2UgU1NMIHRyYW5zcG9ydCBjbG9zZXMKKyAgICAgICAgICAgICMgdGhlIG9sZCBzb2NrZXQgYW5kIGNyZWF0ZXMgYSBuZXcgU1NMIHNvY2tldAorICAgICAgICAgICAgc29jayA9IHRyYW5zcG9ydC5nZXRfZXh0cmFfaW5mbygnc29ja2V0JykKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygiJXIgY29ubmVjdGVkIHRvICVzOiVyOiAoJXIsICVyKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgc29jaywgaG9zdCwgcG9ydCwgdHJhbnNwb3J0LCBwcm90b2NvbCkKKyAgICAgICAgcmV0dXJuIHRyYW5zcG9ydCwgcHJvdG9jb2wKKworICAgIEBjb3JvdXRpbmUKKyAgICBkZWYgX2NyZWF0ZV9jb25uZWN0aW9uX3RyYW5zcG9ydChzZWxmLCBzb2NrLCBwcm90b2NvbF9mYWN0b3J5LCBzc2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX2hvc3RuYW1lKToKKyAgICAgICAgcHJvdG9jb2wgPSBwcm90b2NvbF9mYWN0b3J5KCkKKyAgICAgICAgd2FpdGVyID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmKQorICAgICAgICBpZiBzc2w6CisgICAgICAgICAgICBzc2xjb250ZXh0ID0gTm9uZSBpZiBpc2luc3RhbmNlKHNzbCwgYm9vbCkgZWxzZSBzc2wKKyAgICAgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuX21ha2Vfc3NsX3RyYW5zcG9ydCgKKyAgICAgICAgICAgICAgICBzb2NrLCBwcm90b2NvbCwgc3NsY29udGV4dCwgd2FpdGVyLAorICAgICAgICAgICAgICAgIHNlcnZlcl9zaWRlPUZhbHNlLCBzZXJ2ZXJfaG9zdG5hbWU9c2VydmVyX2hvc3RuYW1lKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV9zb2NrZXRfdHJhbnNwb3J0KHNvY2ssIHByb3RvY29sLCB3YWl0ZXIpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgeWllbGQgZnJvbSB3YWl0ZXIKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgdHJhbnNwb3J0LmNsb3NlKCkKKyAgICAgICAgICAgIHJhaXNlCisKKyAgICAgICAgcmV0dXJuIHRyYW5zcG9ydCwgcHJvdG9jb2wKKworICAgIEBjb3JvdXRpbmUKKyAgICBkZWYgY3JlYXRlX2RhdGFncmFtX2VuZHBvaW50KHNlbGYsIHByb3RvY29sX2ZhY3RvcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbF9hZGRyPU5vbmUsIHJlbW90ZV9hZGRyPU5vbmUsICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYW1pbHk9MCwgcHJvdG89MCwgZmxhZ3M9MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldXNlX2FkZHJlc3M9Tm9uZSwgcmV1c2VfcG9ydD1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dfYnJvYWRjYXN0PU5vbmUsIHNvY2s9Tm9uZSk6CisgICAgICAgICIiIkNyZWF0ZSBkYXRhZ3JhbSBjb25uZWN0aW9uLiIiIgorICAgICAgICBpZiBzb2NrIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgaWYgKGxvY2FsX2FkZHIgb3IgcmVtb3RlX2FkZHIgb3IKKyAgICAgICAgICAgICAgICAgICAgZmFtaWx5IG9yIHByb3RvIG9yIGZsYWdzIG9yCisgICAgICAgICAgICAgICAgICAgIHJldXNlX2FkZHJlc3Mgb3IgcmV1c2VfcG9ydCBvciBhbGxvd19icm9hZGNhc3QpOgorICAgICAgICAgICAgICAgICMgc2hvdyB0aGUgcHJvYmxlbWF0aWMga3dhcmdzIGluIGV4Y2VwdGlvbiBtc2cKKyAgICAgICAgICAgICAgICBvcHRzID0gZGljdChsb2NhbF9hZGRyPWxvY2FsX2FkZHIsIHJlbW90ZV9hZGRyPXJlbW90ZV9hZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbWlseT1mYW1pbHksIHByb3RvPXByb3RvLCBmbGFncz1mbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXVzZV9hZGRyZXNzPXJldXNlX2FkZHJlc3MsIHJldXNlX3BvcnQ9cmV1c2VfcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd19icm9hZGNhc3Q9YWxsb3dfYnJvYWRjYXN0KQorICAgICAgICAgICAgICAgIHByb2JsZW1zID0gJywgJy5qb2luKAorICAgICAgICAgICAgICAgICAgICAne309e30nLmZvcm1hdChrLCB2KSBmb3IgaywgdiBpbiBvcHRzLml0ZW1zKCkgaWYgdikKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAorICAgICAgICAgICAgICAgICAgICAnc29ja2V0IG1vZGlmaWVyIGtleXdvcmQgYXJndW1lbnRzIGNhbiBub3QgYmUgdXNlZCAnCisgICAgICAgICAgICAgICAgICAgICd3aGVuIHNvY2sgaXMgc3BlY2lmaWVkLiAoe30pJy5mb3JtYXQocHJvYmxlbXMpKQorICAgICAgICAgICAgc29jay5zZXRibG9ja2luZyhGYWxzZSkKKyAgICAgICAgICAgIHJfYWRkciA9IE5vbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIG5vdCAobG9jYWxfYWRkciBvciByZW1vdGVfYWRkcik6CisgICAgICAgICAgICAgICAgaWYgZmFtaWx5ID09IDA6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3VuZXhwZWN0ZWQgYWRkcmVzcyBmYW1pbHknKQorICAgICAgICAgICAgICAgIGFkZHJfcGFpcnNfaW5mbyA9ICgoKGZhbWlseSwgcHJvdG8pLCAoTm9uZSwgTm9uZSkpLCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBqb2luIGFkZHJlc3MgYnkgKGZhbWlseSwgcHJvdG9jb2wpCisgICAgICAgICAgICAgICAgYWRkcl9pbmZvcyA9IGNvbGxlY3Rpb25zLk9yZGVyZWREaWN0KCkKKyAgICAgICAgICAgICAgICBmb3IgaWR4LCBhZGRyIGluICgoMCwgbG9jYWxfYWRkciksICgxLCByZW1vdGVfYWRkcikpOgorICAgICAgICAgICAgICAgICAgICBpZiBhZGRyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoYWRkciwgdHVwbGUpIGFuZCBsZW4oYWRkcikgPT0gMiwgKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICcyLXR1cGxlIGlzIGV4cGVjdGVkJykKKworICAgICAgICAgICAgICAgICAgICAgICAgaW5mb3MgPSB5aWVsZCBmcm9tIHNlbGYuZ2V0YWRkcmluZm8oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmFkZHIsIGZhbWlseT1mYW1pbHksIHR5cGU9c29ja2V0LlNPQ0tfREdSQU0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG89cHJvdG8sIGZsYWdzPWZsYWdzKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGluZm9zOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoJ2dldGFkZHJpbmZvKCkgcmV0dXJuZWQgZW1wdHkgbGlzdCcpCisKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBmYW0sIF8sIHBybywgXywgYWRkcmVzcyBpbiBpbmZvczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXkgPSAoZmFtLCBwcm8pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYga2V5IG5vdCBpbiBhZGRyX2luZm9zOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyX2luZm9zW2tleV0gPSBbTm9uZSwgTm9uZV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyX2luZm9zW2tleV1baWR4XSA9IGFkZHJlc3MKKworICAgICAgICAgICAgICAgICMgZWFjaCBhZGRyIGhhcyB0byBoYXZlIGluZm8gZm9yIGVhY2ggKGZhbWlseSwgcHJvdG8pIHBhaXIKKyAgICAgICAgICAgICAgICBhZGRyX3BhaXJzX2luZm8gPSBbCisgICAgICAgICAgICAgICAgICAgIChrZXksIGFkZHJfcGFpcikgZm9yIGtleSwgYWRkcl9wYWlyIGluIGFkZHJfaW5mb3MuaXRlbXMoKQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgKChsb2NhbF9hZGRyIGFuZCBhZGRyX3BhaXJbMF0gaXMgTm9uZSkgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmVtb3RlX2FkZHIgYW5kIGFkZHJfcGFpclsxXSBpcyBOb25lKSldCisKKyAgICAgICAgICAgICAgICBpZiBub3QgYWRkcl9wYWlyc19pbmZvOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdjYW4gbm90IGdldCBhZGRyZXNzIGluZm9ybWF0aW9uJykKKworICAgICAgICAgICAgZXhjZXB0aW9ucyA9IFtdCisKKyAgICAgICAgICAgIGlmIHJldXNlX2FkZHJlc3MgaXMgTm9uZToKKyAgICAgICAgICAgICAgICByZXVzZV9hZGRyZXNzID0gb3MubmFtZSA9PSAncG9zaXgnIGFuZCBzeXMucGxhdGZvcm0gIT0gJ2N5Z3dpbicKKworICAgICAgICAgICAgZm9yICgoZmFtaWx5LCBwcm90byksCisgICAgICAgICAgICAgICAgIChsb2NhbF9hZGRyZXNzLCByZW1vdGVfYWRkcmVzcykpIGluIGFkZHJfcGFpcnNfaW5mbzoKKyAgICAgICAgICAgICAgICBzb2NrID0gTm9uZQorICAgICAgICAgICAgICAgIHJfYWRkciA9IE5vbmUKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KAorICAgICAgICAgICAgICAgICAgICAgICAgZmFtaWx5PWZhbWlseSwgdHlwZT1zb2NrZXQuU09DS19ER1JBTSwgcHJvdG89cHJvdG8pCisgICAgICAgICAgICAgICAgICAgIGlmIHJldXNlX2FkZHJlc3M6CisgICAgICAgICAgICAgICAgICAgICAgICBzb2NrLnNldHNvY2tvcHQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ja2V0LlNPTF9TT0NLRVQsIHNvY2tldC5TT19SRVVTRUFERFIsIDEpCisgICAgICAgICAgICAgICAgICAgIGlmIHJldXNlX3BvcnQ6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgaGFzYXR0cihzb2NrZXQsICdTT19SRVVTRVBPUlQnKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmV1c2VfcG9ydCBub3Qgc3VwcG9ydGVkIGJ5IHNvY2tldCBtb2R1bGUnKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrLnNldHNvY2tvcHQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tldC5TT0xfU09DS0VULCBzb2NrZXQuU09fUkVVU0VQT1JULCAxKQorICAgICAgICAgICAgICAgICAgICBpZiBhbGxvd19icm9hZGNhc3Q6CisgICAgICAgICAgICAgICAgICAgICAgICBzb2NrLnNldHNvY2tvcHQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ja2V0LlNPTF9TT0NLRVQsIHNvY2tldC5TT19CUk9BRENBU1QsIDEpCisgICAgICAgICAgICAgICAgICAgIHNvY2suc2V0YmxvY2tpbmcoRmFsc2UpCisKKyAgICAgICAgICAgICAgICAgICAgaWYgbG9jYWxfYWRkcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvY2suYmluZChsb2NhbF9hZGRyZXNzKQorICAgICAgICAgICAgICAgICAgICBpZiByZW1vdGVfYWRkcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gc2VsZi5zb2NrX2Nvbm5lY3Qoc29jaywgcmVtb3RlX2FkZHJlc3MpCisgICAgICAgICAgICAgICAgICAgICAgICByX2FkZHIgPSByZW1vdGVfYWRkcmVzcworICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKKyAgICAgICAgICAgICAgICAgICAgaWYgc29jayBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvY2suY2xvc2UoKQorICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25zLmFwcGVuZChleGMpCisgICAgICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgICAgICBpZiBzb2NrIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgc29jay5jbG9zZSgpCisgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UgZXhjZXB0aW9uc1swXQorCisgICAgICAgIHByb3RvY29sID0gcHJvdG9jb2xfZmFjdG9yeSgpCisgICAgICAgIHdhaXRlciA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZikKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV9kYXRhZ3JhbV90cmFuc3BvcnQoCisgICAgICAgICAgICBzb2NrLCBwcm90b2NvbCwgcl9hZGRyLCB3YWl0ZXIpCisgICAgICAgIGlmIHNlbGYuX2RlYnVnOgorICAgICAgICAgICAgaWYgbG9jYWxfYWRkcjoKKyAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygiRGF0YWdyYW0gZW5kcG9pbnQgbG9jYWxfYWRkcj0lciByZW1vdGVfYWRkcj0lciAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNyZWF0ZWQ6ICglciwgJXIpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbF9hZGRyLCByZW1vdGVfYWRkciwgdHJhbnNwb3J0LCBwcm90b2NvbCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCJEYXRhZ3JhbSBlbmRwb2ludCByZW1vdGVfYWRkcj0lciBjcmVhdGVkOiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIoJXIsICVyKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW90ZV9hZGRyLCB0cmFuc3BvcnQsIHByb3RvY29sKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gd2FpdGVyCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHRyYW5zcG9ydC5jbG9zZSgpCisgICAgICAgICAgICByYWlzZQorCisgICAgICAgIHJldHVybiB0cmFuc3BvcnQsIHByb3RvY29sCisKKyAgICBAY29yb3V0aW5lCisgICAgZGVmIF9jcmVhdGVfc2VydmVyX2dldGFkZHJpbmZvKHNlbGYsIGhvc3QsIHBvcnQsIGZhbWlseSwgZmxhZ3MpOgorICAgICAgICBpbmZvcyA9IHlpZWxkIGZyb20gc2VsZi5nZXRhZGRyaW5mbyhob3N0LCBwb3J0LCBmYW1pbHk9ZmFtaWx5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPXNvY2tldC5TT0NLX1NUUkVBTSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3M9ZmxhZ3MpCisgICAgICAgIGlmIG5vdCBpbmZvczoKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoJ2dldGFkZHJpbmZvKHshcn0pIHJldHVybmVkIGVtcHR5IGxpc3QnLmZvcm1hdChob3N0KSkKKyAgICAgICAgcmV0dXJuIGluZm9zCisKKyAgICBAY29yb3V0aW5lCisgICAgZGVmIGNyZWF0ZV9zZXJ2ZXIoc2VsZiwgcHJvdG9jb2xfZmFjdG9yeSwgaG9zdD1Ob25lLCBwb3J0PU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgKiwKKyAgICAgICAgICAgICAgICAgICAgICBmYW1pbHk9c29ja2V0LkFGX1VOU1BFQywKKyAgICAgICAgICAgICAgICAgICAgICBmbGFncz1zb2NrZXQuQUlfUEFTU0lWRSwKKyAgICAgICAgICAgICAgICAgICAgICBzb2NrPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgYmFja2xvZz0xMDAsCisgICAgICAgICAgICAgICAgICAgICAgc3NsPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgcmV1c2VfYWRkcmVzcz1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgIHJldXNlX3BvcnQ9Tm9uZSk6CisgICAgICAgICIiIkNyZWF0ZSBhIFRDUCBzZXJ2ZXIuCisKKyAgICAgICAgVGhlIGhvc3QgcGFyYW1ldGVyIGNhbiBiZSBhIHN0cmluZywgaW4gdGhhdCBjYXNlIHRoZSBUQ1Agc2VydmVyIGlzIGJvdW5kCisgICAgICAgIHRvIGhvc3QgYW5kIHBvcnQuCisKKyAgICAgICAgVGhlIGhvc3QgcGFyYW1ldGVyIGNhbiBhbHNvIGJlIGEgc2VxdWVuY2Ugb2Ygc3RyaW5ncyBhbmQgaW4gdGhhdCBjYXNlCisgICAgICAgIHRoZSBUQ1Agc2VydmVyIGlzIGJvdW5kIHRvIGFsbCBob3N0cyBvZiB0aGUgc2VxdWVuY2UuCisKKyAgICAgICAgUmV0dXJuIGEgU2VydmVyIG9iamVjdCB3aGljaCBjYW4gYmUgdXNlZCB0byBzdG9wIHRoZSBzZXJ2aWNlLgorCisgICAgICAgIFRoaXMgbWV0aG9kIGlzIGEgY29yb3V0aW5lLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgaXNpbnN0YW5jZShzc2wsIGJvb2wpOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdzc2wgYXJndW1lbnQgbXVzdCBiZSBhbiBTU0xDb250ZXh0IG9yIE5vbmUnKQorICAgICAgICBpZiBob3N0IGlzIG5vdCBOb25lIG9yIHBvcnQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBpZiBzb2NrIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCisgICAgICAgICAgICAgICAgICAgICdob3N0L3BvcnQgYW5kIHNvY2sgY2FuIG5vdCBiZSBzcGVjaWZpZWQgYXQgdGhlIHNhbWUgdGltZScpCisKKyAgICAgICAgICAgIEFGX0lORVQ2ID0gZ2V0YXR0cihzb2NrZXQsICdBRl9JTkVUNicsIDApCisgICAgICAgICAgICBpZiByZXVzZV9hZGRyZXNzIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgcmV1c2VfYWRkcmVzcyA9IG9zLm5hbWUgPT0gJ3Bvc2l4JyBhbmQgc3lzLnBsYXRmb3JtICE9ICdjeWd3aW4nCisgICAgICAgICAgICBzb2NrZXRzID0gW10KKyAgICAgICAgICAgIGlmIGhvc3QgPT0gJyc6CisgICAgICAgICAgICAgICAgaG9zdHMgPSBbTm9uZV0KKyAgICAgICAgICAgIGVsaWYgKGlzaW5zdGFuY2UoaG9zdCwgc3RyKSBvcgorICAgICAgICAgICAgICAgICAgbm90IGlzaW5zdGFuY2UoaG9zdCwgY29sbGVjdGlvbnMuSXRlcmFibGUpKToKKyAgICAgICAgICAgICAgICBob3N0cyA9IFtob3N0XQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBob3N0cyA9IGhvc3QKKworICAgICAgICAgICAgZnMgPSBbc2VsZi5fY3JlYXRlX3NlcnZlcl9nZXRhZGRyaW5mbyhob3N0LCBwb3J0LCBmYW1pbHk9ZmFtaWx5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncz1mbGFncykKKyAgICAgICAgICAgICAgICAgIGZvciBob3N0IGluIGhvc3RzXQorICAgICAgICAgICAgaW5mb3MgPSB5aWVsZCBmcm9tIHRhc2tzLmdhdGhlcigqZnMsIGxvb3A9c2VsZikKKyAgICAgICAgICAgIGluZm9zID0gaXRlcnRvb2xzLmNoYWluLmZyb21faXRlcmFibGUoaW5mb3MpCisKKyAgICAgICAgICAgIGNvbXBsZXRlZCA9IEZhbHNlCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZm9yIHJlcyBpbiBpbmZvczoKKyAgICAgICAgICAgICAgICAgICAgYWYsIHNvY2t0eXBlLCBwcm90bywgY2Fub25uYW1lLCBzYSA9IHJlcworICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldChhZiwgc29ja3R5cGUsIHByb3RvKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBBc3N1bWUgaXQncyBhIGJhZCBmYW1pbHkvdHlwZS9wcm90b2NvbCBjb21iaW5hdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuX2RlYnVnOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nKCdjcmVhdGVfc2VydmVyKCkgZmFpbGVkIHRvIGNyZWF0ZSAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NvY2tldC5zb2NrZXQoJXIsICVyLCAlciknLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFmLCBzb2NrdHlwZSwgcHJvdG8sIGV4Y19pbmZvPVRydWUpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICBzb2NrZXRzLmFwcGVuZChzb2NrKQorICAgICAgICAgICAgICAgICAgICBpZiByZXVzZV9hZGRyZXNzOgorICAgICAgICAgICAgICAgICAgICAgICAgc29jay5zZXRzb2Nrb3B0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tldC5TT0xfU09DS0VULCBzb2NrZXQuU09fUkVVU0VBRERSLCBUcnVlKQorICAgICAgICAgICAgICAgICAgICBpZiByZXVzZV9wb3J0OgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGhhc2F0dHIoc29ja2V0LCAnU09fUkVVU0VQT1JUJyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JldXNlX3BvcnQgbm90IHN1cHBvcnRlZCBieSBzb2NrZXQgbW9kdWxlJykKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29jay5zZXRzb2Nrb3B0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrZXQuU09MX1NPQ0tFVCwgc29ja2V0LlNPX1JFVVNFUE9SVCwgVHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgIyBEaXNhYmxlIElQdjQvSVB2NiBkdWFsIHN0YWNrIHN1cHBvcnQgKGVuYWJsZWQgYnkKKyAgICAgICAgICAgICAgICAgICAgIyBkZWZhdWx0IG9uIExpbnV4KSB3aGljaCBtYWtlcyBhIHNpbmdsZSBzb2NrZXQKKyAgICAgICAgICAgICAgICAgICAgIyBsaXN0ZW4gb24gYm90aCBhZGRyZXNzIGZhbWlsaWVzLgorICAgICAgICAgICAgICAgICAgICBpZiBhZiA9PSBBRl9JTkVUNiBhbmQgaGFzYXR0cihzb2NrZXQsICdJUFBST1RPX0lQVjYnKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvY2suc2V0c29ja29wdChzb2NrZXQuSVBQUk9UT19JUFY2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tldC5JUFY2X1Y2T05MWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcnVlKQorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBzb2NrLmJpbmQoc2EpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoZXJyLmVycm5vLCAnZXJyb3Igd2hpbGUgYXR0ZW1wdGluZyAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0byBiaW5kIG9uIGFkZHJlc3MgJXI6ICVzJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChzYSwgZXJyLnN0cmVycm9yLmxvd2VyKCkpKQorICAgICAgICAgICAgICAgIGNvbXBsZXRlZCA9IFRydWUKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgaWYgbm90IGNvbXBsZXRlZDoKKyAgICAgICAgICAgICAgICAgICAgZm9yIHNvY2sgaW4gc29ja2V0czoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvY2suY2xvc2UoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgc29jayBpcyBOb25lOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ05laXRoZXIgaG9zdC9wb3J0IG5vciBzb2NrIHdlcmUgc3BlY2lmaWVkJykKKyAgICAgICAgICAgIHNvY2tldHMgPSBbc29ja10KKworICAgICAgICBzZXJ2ZXIgPSBTZXJ2ZXIoc2VsZiwgc29ja2V0cykKKyAgICAgICAgZm9yIHNvY2sgaW4gc29ja2V0czoKKyAgICAgICAgICAgIHNvY2subGlzdGVuKGJhY2tsb2cpCisgICAgICAgICAgICBzb2NrLnNldGJsb2NraW5nKEZhbHNlKQorICAgICAgICAgICAgc2VsZi5fc3RhcnRfc2VydmluZyhwcm90b2NvbF9mYWN0b3J5LCBzb2NrLCBzc2wsIHNlcnZlcikKKyAgICAgICAgaWYgc2VsZi5fZGVidWc6CisgICAgICAgICAgICBsb2dnZXIuaW5mbygiJXIgaXMgc2VydmluZyIsIHNlcnZlcikKKyAgICAgICAgcmV0dXJuIHNlcnZlcgorCisgICAgQGNvcm91dGluZQorICAgIGRlZiBjb25uZWN0X3JlYWRfcGlwZShzZWxmLCBwcm90b2NvbF9mYWN0b3J5LCBwaXBlKToKKyAgICAgICAgcHJvdG9jb2wgPSBwcm90b2NvbF9mYWN0b3J5KCkKKyAgICAgICAgd2FpdGVyID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmKQorICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLl9tYWtlX3JlYWRfcGlwZV90cmFuc3BvcnQocGlwZSwgcHJvdG9jb2wsIHdhaXRlcikKKworICAgICAgICB0cnk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIHdhaXRlcgorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICB0cmFuc3BvcnQuY2xvc2UoKQorICAgICAgICAgICAgcmFpc2UKKworICAgICAgICBpZiBzZWxmLl9kZWJ1ZzoKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygnUmVhZCBwaXBlICVyIGNvbm5lY3RlZDogKCVyLCAlciknLAorICAgICAgICAgICAgICAgICAgICAgICAgIHBpcGUuZmlsZW5vKCksIHRyYW5zcG9ydCwgcHJvdG9jb2wpCisgICAgICAgIHJldHVybiB0cmFuc3BvcnQsIHByb3RvY29sCisKKyAgICBAY29yb3V0aW5lCisgICAgZGVmIGNvbm5lY3Rfd3JpdGVfcGlwZShzZWxmLCBwcm90b2NvbF9mYWN0b3J5LCBwaXBlKToKKyAgICAgICAgcHJvdG9jb2wgPSBwcm90b2NvbF9mYWN0b3J5KCkKKyAgICAgICAgd2FpdGVyID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmKQorICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLl9tYWtlX3dyaXRlX3BpcGVfdHJhbnNwb3J0KHBpcGUsIHByb3RvY29sLCB3YWl0ZXIpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgeWllbGQgZnJvbSB3YWl0ZXIKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgdHJhbnNwb3J0LmNsb3NlKCkKKyAgICAgICAgICAgIHJhaXNlCisKKyAgICAgICAgaWYgc2VsZi5fZGVidWc6CisgICAgICAgICAgICBsb2dnZXIuZGVidWcoJ1dyaXRlIHBpcGUgJXIgY29ubmVjdGVkOiAoJXIsICVyKScsCisgICAgICAgICAgICAgICAgICAgICAgICAgcGlwZS5maWxlbm8oKSwgdHJhbnNwb3J0LCBwcm90b2NvbCkKKyAgICAgICAgcmV0dXJuIHRyYW5zcG9ydCwgcHJvdG9jb2wKKworICAgIGRlZiBfbG9nX3N1YnByb2Nlc3Moc2VsZiwgbXNnLCBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIpOgorICAgICAgICBpbmZvID0gW21zZ10KKyAgICAgICAgaWYgc3RkaW4gaXMgbm90IE5vbmU6CisgICAgICAgICAgICBpbmZvLmFwcGVuZCgnc3RkaW49JXMnICUgX2Zvcm1hdF9waXBlKHN0ZGluKSkKKyAgICAgICAgaWYgc3Rkb3V0IGlzIG5vdCBOb25lIGFuZCBzdGRlcnIgPT0gc3VicHJvY2Vzcy5TVERPVVQ6CisgICAgICAgICAgICBpbmZvLmFwcGVuZCgnc3Rkb3V0PXN0ZGVycj0lcycgJSBfZm9ybWF0X3BpcGUoc3Rkb3V0KSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIHN0ZG91dCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBpbmZvLmFwcGVuZCgnc3Rkb3V0PSVzJyAlIF9mb3JtYXRfcGlwZShzdGRvdXQpKQorICAgICAgICAgICAgaWYgc3RkZXJyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGluZm8uYXBwZW5kKCdzdGRlcnI9JXMnICUgX2Zvcm1hdF9waXBlKHN0ZGVycikpCisgICAgICAgIGxvZ2dlci5kZWJ1ZygnICcuam9pbihpbmZvKSkKKworICAgIEBjb3JvdXRpbmUKKyAgICBkZWYgc3VicHJvY2Vzc19zaGVsbChzZWxmLCBwcm90b2NvbF9mYWN0b3J5LCBjbWQsICosIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXZlcnNhbF9uZXdsaW5lcz1GYWxzZSwgc2hlbGw9VHJ1ZSwgYnVmc2l6ZT0wLAorICAgICAgICAgICAgICAgICAgICAgICAgICoqa3dhcmdzKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoY21kLCAoYnl0ZXMsIHN0cikpOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiY21kIG11c3QgYmUgYSBzdHJpbmciKQorICAgICAgICBpZiB1bml2ZXJzYWxfbmV3bGluZXM6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ1bml2ZXJzYWxfbmV3bGluZXMgbXVzdCBiZSBGYWxzZSIpCisgICAgICAgIGlmIG5vdCBzaGVsbDoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInNoZWxsIG11c3QgYmUgVHJ1ZSIpCisgICAgICAgIGlmIGJ1ZnNpemUgIT0gMDoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImJ1ZnNpemUgbXVzdCBiZSAwIikKKyAgICAgICAgcHJvdG9jb2wgPSBwcm90b2NvbF9mYWN0b3J5KCkKKyAgICAgICAgaWYgc2VsZi5fZGVidWc6CisgICAgICAgICAgICAjIGRvbid0IGxvZyBwYXJhbWV0ZXJzOiB0aGV5IG1heSBjb250YWluIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbgorICAgICAgICAgICAgIyAocGFzc3dvcmQpIGFuZCBtYXkgYmUgdG9vIGxvbmcKKyAgICAgICAgICAgIGRlYnVnX2xvZyA9ICdydW4gc2hlbGwgY29tbWFuZCAlcicgJSBjbWQKKyAgICAgICAgICAgIHNlbGYuX2xvZ19zdWJwcm9jZXNzKGRlYnVnX2xvZywgc3RkaW4sIHN0ZG91dCwgc3RkZXJyKQorICAgICAgICB0cmFuc3BvcnQgPSB5aWVsZCBmcm9tIHNlbGYuX21ha2Vfc3VicHJvY2Vzc190cmFuc3BvcnQoCisgICAgICAgICAgICBwcm90b2NvbCwgY21kLCBUcnVlLCBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIsIGJ1ZnNpemUsICoqa3dhcmdzKQorICAgICAgICBpZiBzZWxmLl9kZWJ1ZzoKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCclczogJXInICUgKGRlYnVnX2xvZywgdHJhbnNwb3J0KSkKKyAgICAgICAgcmV0dXJuIHRyYW5zcG9ydCwgcHJvdG9jb2wKKworICAgIEBjb3JvdXRpbmUKKyAgICBkZWYgc3VicHJvY2Vzc19leGVjKHNlbGYsIHByb3RvY29sX2ZhY3RvcnksIHByb2dyYW0sICphcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RkaW49c3VicHJvY2Vzcy5QSVBFLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSwgdW5pdmVyc2FsX25ld2xpbmVzPUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgc2hlbGw9RmFsc2UsIGJ1ZnNpemU9MCwgKiprd2FyZ3MpOgorICAgICAgICBpZiB1bml2ZXJzYWxfbmV3bGluZXM6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ1bml2ZXJzYWxfbmV3bGluZXMgbXVzdCBiZSBGYWxzZSIpCisgICAgICAgIGlmIHNoZWxsOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigic2hlbGwgbXVzdCBiZSBGYWxzZSIpCisgICAgICAgIGlmIGJ1ZnNpemUgIT0gMDoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImJ1ZnNpemUgbXVzdCBiZSAwIikKKyAgICAgICAgcG9wZW5fYXJncyA9IChwcm9ncmFtLCkgKyBhcmdzCisgICAgICAgIGZvciBhcmcgaW4gcG9wZW5fYXJnczoKKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGFyZywgKHN0ciwgYnl0ZXMpKToKKyAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoInByb2dyYW0gYXJndW1lbnRzIG11c3QgYmUgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYSBieXRlcyBvciB0ZXh0IHN0cmluZywgbm90ICVzIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIHR5cGUoYXJnKS5fX25hbWVfXykKKyAgICAgICAgcHJvdG9jb2wgPSBwcm90b2NvbF9mYWN0b3J5KCkKKyAgICAgICAgaWYgc2VsZi5fZGVidWc6CisgICAgICAgICAgICAjIGRvbid0IGxvZyBwYXJhbWV0ZXJzOiB0aGV5IG1heSBjb250YWluIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbgorICAgICAgICAgICAgIyAocGFzc3dvcmQpIGFuZCBtYXkgYmUgdG9vIGxvbmcKKyAgICAgICAgICAgIGRlYnVnX2xvZyA9ICdleGVjdXRlIHByb2dyYW0gJXInICUgcHJvZ3JhbQorICAgICAgICAgICAgc2VsZi5fbG9nX3N1YnByb2Nlc3MoZGVidWdfbG9nLCBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIpCisgICAgICAgIHRyYW5zcG9ydCA9IHlpZWxkIGZyb20gc2VsZi5fbWFrZV9zdWJwcm9jZXNzX3RyYW5zcG9ydCgKKyAgICAgICAgICAgIHByb3RvY29sLCBwb3Blbl9hcmdzLCBGYWxzZSwgc3RkaW4sIHN0ZG91dCwgc3RkZXJyLAorICAgICAgICAgICAgYnVmc2l6ZSwgKiprd2FyZ3MpCisgICAgICAgIGlmIHNlbGYuX2RlYnVnOgorICAgICAgICAgICAgbG9nZ2VyLmluZm8oJyVzOiAlcicgJSAoZGVidWdfbG9nLCB0cmFuc3BvcnQpKQorICAgICAgICByZXR1cm4gdHJhbnNwb3J0LCBwcm90b2NvbAorCisgICAgZGVmIHNldF9leGNlcHRpb25faGFuZGxlcihzZWxmLCBoYW5kbGVyKToKKyAgICAgICAgIiIiU2V0IGhhbmRsZXIgYXMgdGhlIG5ldyBldmVudCBsb29wIGV4Y2VwdGlvbiBoYW5kbGVyLgorCisgICAgICAgIElmIGhhbmRsZXIgaXMgTm9uZSwgdGhlIGRlZmF1bHQgZXhjZXB0aW9uIGhhbmRsZXIgd2lsbAorICAgICAgICBiZSBzZXQuCisKKyAgICAgICAgSWYgaGFuZGxlciBpcyBhIGNhbGxhYmxlIG9iamVjdCwgaXQgc2hvdWxkIGhhdmUgYQorICAgICAgICBzaWduYXR1cmUgbWF0Y2hpbmcgJyhsb29wLCBjb250ZXh0KScsIHdoZXJlICdsb29wJworICAgICAgICB3aWxsIGJlIGEgcmVmZXJlbmNlIHRvIHRoZSBhY3RpdmUgZXZlbnQgbG9vcCwgJ2NvbnRleHQnCisgICAgICAgIHdpbGwgYmUgYSBkaWN0IG9iamVjdCAoc2VlIGBjYWxsX2V4Y2VwdGlvbl9oYW5kbGVyKClgCisgICAgICAgIGRvY3VtZW50YXRpb24gZm9yIGRldGFpbHMgYWJvdXQgY29udGV4dCkuCisgICAgICAgICIiIgorICAgICAgICBpZiBoYW5kbGVyIGlzIG5vdCBOb25lIGFuZCBub3QgY2FsbGFibGUoaGFuZGxlcik6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ0EgY2FsbGFibGUgb2JqZWN0IG9yIE5vbmUgaXMgZXhwZWN0ZWQsICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZ290IHshcn0nLmZvcm1hdChoYW5kbGVyKSkKKyAgICAgICAgc2VsZi5fZXhjZXB0aW9uX2hhbmRsZXIgPSBoYW5kbGVyCisKKyAgICBkZWYgZGVmYXVsdF9leGNlcHRpb25faGFuZGxlcihzZWxmLCBjb250ZXh0KToKKyAgICAgICAgIiIiRGVmYXVsdCBleGNlcHRpb24gaGFuZGxlci4KKworICAgICAgICBUaGlzIGlzIGNhbGxlZCB3aGVuIGFuIGV4Y2VwdGlvbiBvY2N1cnMgYW5kIG5vIGV4Y2VwdGlvbgorICAgICAgICBoYW5kbGVyIGlzIHNldCwgYW5kIGNhbiBiZSBjYWxsZWQgYnkgYSBjdXN0b20gZXhjZXB0aW9uCisgICAgICAgIGhhbmRsZXIgdGhhdCB3YW50cyB0byBkZWZlciB0byB0aGUgZGVmYXVsdCBiZWhhdmlvci4KKworICAgICAgICBUaGUgY29udGV4dCBwYXJhbWV0ZXIgaGFzIHRoZSBzYW1lIG1lYW5pbmcgYXMgaW4KKyAgICAgICAgYGNhbGxfZXhjZXB0aW9uX2hhbmRsZXIoKWAuCisgICAgICAgICIiIgorICAgICAgICBtZXNzYWdlID0gY29udGV4dC5nZXQoJ21lc3NhZ2UnKQorICAgICAgICBpZiBub3QgbWVzc2FnZToKKyAgICAgICAgICAgIG1lc3NhZ2UgPSAnVW5oYW5kbGVkIGV4Y2VwdGlvbiBpbiBldmVudCBsb29wJworCisgICAgICAgIGV4Y2VwdGlvbiA9IGNvbnRleHQuZ2V0KCdleGNlcHRpb24nKQorICAgICAgICBpZiBleGNlcHRpb24gaXMgbm90IE5vbmU6CisgICAgICAgICAgICBleGNfaW5mbyA9ICh0eXBlKGV4Y2VwdGlvbiksIGV4Y2VwdGlvbiwgZXhjZXB0aW9uLl9fdHJhY2ViYWNrX18pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBleGNfaW5mbyA9IEZhbHNlCisKKyAgICAgICAgaWYgKCdzb3VyY2VfdHJhY2ViYWNrJyBub3QgaW4gY29udGV4dAorICAgICAgICBhbmQgc2VsZi5fY3VycmVudF9oYW5kbGUgaXMgbm90IE5vbmUKKyAgICAgICAgYW5kIHNlbGYuX2N1cnJlbnRfaGFuZGxlLl9zb3VyY2VfdHJhY2ViYWNrKToKKyAgICAgICAgICAgIGNvbnRleHRbJ2hhbmRsZV90cmFjZWJhY2snXSA9IHNlbGYuX2N1cnJlbnRfaGFuZGxlLl9zb3VyY2VfdHJhY2ViYWNrCisKKyAgICAgICAgbG9nX2xpbmVzID0gW21lc3NhZ2VdCisgICAgICAgIGZvciBrZXkgaW4gc29ydGVkKGNvbnRleHQpOgorICAgICAgICAgICAgaWYga2V5IGluIHsnbWVzc2FnZScsICdleGNlcHRpb24nfToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgdmFsdWUgPSBjb250ZXh0W2tleV0KKyAgICAgICAgICAgIGlmIGtleSA9PSAnc291cmNlX3RyYWNlYmFjayc6CisgICAgICAgICAgICAgICAgdGIgPSAnJy5qb2luKHRyYWNlYmFjay5mb3JtYXRfbGlzdCh2YWx1ZSkpCisgICAgICAgICAgICAgICAgdmFsdWUgPSAnT2JqZWN0IGNyZWF0ZWQgYXQgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6XG4nCisgICAgICAgICAgICAgICAgdmFsdWUgKz0gdGIucnN0cmlwKCkKKyAgICAgICAgICAgIGVsaWYga2V5ID09ICdoYW5kbGVfdHJhY2ViYWNrJzoKKyAgICAgICAgICAgICAgICB0YiA9ICcnLmpvaW4odHJhY2ViYWNrLmZvcm1hdF9saXN0KHZhbHVlKSkKKyAgICAgICAgICAgICAgICB2YWx1ZSA9ICdIYW5kbGUgY3JlYXRlZCBhdCAobW9zdCByZWNlbnQgY2FsbCBsYXN0KTpcbicKKyAgICAgICAgICAgICAgICB2YWx1ZSArPSB0Yi5yc3RyaXAoKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IHJlcHIodmFsdWUpCisgICAgICAgICAgICBsb2dfbGluZXMuYXBwZW5kKCd7fToge30nLmZvcm1hdChrZXksIHZhbHVlKSkKKworICAgICAgICBsb2dnZXIuZXJyb3IoJ1xuJy5qb2luKGxvZ19saW5lcyksIGV4Y19pbmZvPWV4Y19pbmZvKQorCisgICAgZGVmIGNhbGxfZXhjZXB0aW9uX2hhbmRsZXIoc2VsZiwgY29udGV4dCk6CisgICAgICAgICIiIkNhbGwgdGhlIGN1cnJlbnQgZXZlbnQgbG9vcCdzIGV4Y2VwdGlvbiBoYW5kbGVyLgorCisgICAgICAgIFRoZSBjb250ZXh0IGFyZ3VtZW50IGlzIGEgZGljdCBjb250YWluaW5nIHRoZSBmb2xsb3dpbmcga2V5czoKKworICAgICAgICAtICdtZXNzYWdlJzogRXJyb3IgbWVzc2FnZTsKKyAgICAgICAgLSAnZXhjZXB0aW9uJyAob3B0aW9uYWwpOiBFeGNlcHRpb24gb2JqZWN0OworICAgICAgICAtICdmdXR1cmUnIChvcHRpb25hbCk6IEZ1dHVyZSBpbnN0YW5jZTsKKyAgICAgICAgLSAnaGFuZGxlJyAob3B0aW9uYWwpOiBIYW5kbGUgaW5zdGFuY2U7CisgICAgICAgIC0gJ3Byb3RvY29sJyAob3B0aW9uYWwpOiBQcm90b2NvbCBpbnN0YW5jZTsKKyAgICAgICAgLSAndHJhbnNwb3J0JyAob3B0aW9uYWwpOiBUcmFuc3BvcnQgaW5zdGFuY2U7CisgICAgICAgIC0gJ3NvY2tldCcgKG9wdGlvbmFsKTogU29ja2V0IGluc3RhbmNlLgorCisgICAgICAgIE5ldyBrZXlzIG1heWJlIGludHJvZHVjZWQgaW4gdGhlIGZ1dHVyZS4KKworICAgICAgICBOb3RlOiBkbyBub3Qgb3ZlcmxvYWQgdGhpcyBtZXRob2QgaW4gYW4gZXZlbnQgbG9vcCBzdWJjbGFzcy4KKyAgICAgICAgRm9yIGN1c3RvbSBleGNlcHRpb24gaGFuZGxpbmcsIHVzZSB0aGUKKyAgICAgICAgYHNldF9leGNlcHRpb25faGFuZGxlcigpYCBtZXRob2QuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl9leGNlcHRpb25faGFuZGxlciBpcyBOb25lOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuZGVmYXVsdF9leGNlcHRpb25faGFuZGxlcihjb250ZXh0KQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICAjIFNlY29uZCBwcm90ZWN0aW9uIGxheWVyIGZvciB1bmV4cGVjdGVkIGVycm9ycworICAgICAgICAgICAgICAgICMgaW4gdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24sIGFzIHdlbGwgYXMgZm9yIHN1YmNsYXNzZWQKKyAgICAgICAgICAgICAgICAjIGV2ZW50IGxvb3BzIHdpdGggb3ZlcmxvYWRlZCAiZGVmYXVsdF9leGNlcHRpb25faGFuZGxlciIuCisgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdFeGNlcHRpb24gaW4gZGVmYXVsdCBleGNlcHRpb24gaGFuZGxlcicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y19pbmZvPVRydWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5fZXhjZXB0aW9uX2hhbmRsZXIoc2VsZiwgY29udGV4dCkKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgICAgICMgRXhjZXB0aW9uIGluIHRoZSB1c2VyIHNldCBjdXN0b20gZXhjZXB0aW9uIGhhbmRsZXIuCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAjIExldCdzIHRyeSBkZWZhdWx0IGhhbmRsZXIuCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZGVmYXVsdF9leGNlcHRpb25faGFuZGxlcih7CisgICAgICAgICAgICAgICAgICAgICAgICAnbWVzc2FnZSc6ICdVbmhhbmRsZWQgZXJyb3IgaW4gZXhjZXB0aW9uIGhhbmRsZXInLAorICAgICAgICAgICAgICAgICAgICAgICAgJ2V4Y2VwdGlvbic6IGV4YywKKyAgICAgICAgICAgICAgICAgICAgICAgICdjb250ZXh0JzogY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgfSkKKyAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgICAgICAjIEd1YXJkICdkZWZhdWx0X2V4Y2VwdGlvbl9oYW5kbGVyJyBpbiBjYXNlIGl0IGlzCisgICAgICAgICAgICAgICAgICAgICMgb3ZlcmxvYWRlZC4KKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdFeGNlcHRpb24gaW4gZGVmYXVsdCBleGNlcHRpb24gaGFuZGxlciAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2hpbGUgaGFuZGxpbmcgYW4gdW5leHBlY3RlZCBlcnJvciAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW4gY3VzdG9tIGV4Y2VwdGlvbiBoYW5kbGVyJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y19pbmZvPVRydWUpCisKKyAgICBkZWYgX2FkZF9jYWxsYmFjayhzZWxmLCBoYW5kbGUpOgorICAgICAgICAiIiJBZGQgYSBIYW5kbGUgdG8gX3NjaGVkdWxlZCAoVGltZXJIYW5kbGUpIG9yIF9yZWFkeS4iIiIKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoaGFuZGxlLCBldmVudHMuSGFuZGxlKSwgJ0EgSGFuZGxlIGlzIHJlcXVpcmVkIGhlcmUnCisgICAgICAgIGlmIGhhbmRsZS5fY2FuY2VsbGVkOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGFzc2VydCBub3QgaXNpbnN0YW5jZShoYW5kbGUsIGV2ZW50cy5UaW1lckhhbmRsZSkKKyAgICAgICAgc2VsZi5fcmVhZHkuYXBwZW5kKGhhbmRsZSkKKworICAgIGRlZiBfYWRkX2NhbGxiYWNrX3NpZ25hbHNhZmUoc2VsZiwgaGFuZGxlKToKKyAgICAgICAgIiIiTGlrZSBfYWRkX2NhbGxiYWNrKCkgYnV0IGNhbGxlZCBmcm9tIGEgc2lnbmFsIGhhbmRsZXIuIiIiCisgICAgICAgIHNlbGYuX2FkZF9jYWxsYmFjayhoYW5kbGUpCisgICAgICAgIHNlbGYuX3dyaXRlX3RvX3NlbGYoKQorCisgICAgZGVmIF90aW1lcl9oYW5kbGVfY2FuY2VsbGVkKHNlbGYsIGhhbmRsZSk6CisgICAgICAgICIiIk5vdGlmaWNhdGlvbiB0aGF0IGEgVGltZXJIYW5kbGUgaGFzIGJlZW4gY2FuY2VsbGVkLiIiIgorICAgICAgICBpZiBoYW5kbGUuX3NjaGVkdWxlZDoKKyAgICAgICAgICAgIHNlbGYuX3RpbWVyX2NhbmNlbGxlZF9jb3VudCArPSAxCisKKyAgICBkZWYgX3J1bl9vbmNlKHNlbGYpOgorICAgICAgICAiIiJSdW4gb25lIGZ1bGwgaXRlcmF0aW9uIG9mIHRoZSBldmVudCBsb29wLgorCisgICAgICAgIFRoaXMgY2FsbHMgYWxsIGN1cnJlbnRseSByZWFkeSBjYWxsYmFja3MsIHBvbGxzIGZvciBJL08sCisgICAgICAgIHNjaGVkdWxlcyB0aGUgcmVzdWx0aW5nIGNhbGxiYWNrcywgYW5kIGZpbmFsbHkgc2NoZWR1bGVzCisgICAgICAgICdjYWxsX2xhdGVyJyBjYWxsYmFja3MuCisgICAgICAgICIiIgorCisgICAgICAgIHNjaGVkX2NvdW50ID0gbGVuKHNlbGYuX3NjaGVkdWxlZCkKKyAgICAgICAgaWYgKHNjaGVkX2NvdW50ID4gX01JTl9TQ0hFRFVMRURfVElNRVJfSEFORExFUyBhbmQKKyAgICAgICAgICAgIHNlbGYuX3RpbWVyX2NhbmNlbGxlZF9jb3VudCAvIHNjaGVkX2NvdW50ID4KKyAgICAgICAgICAgICAgICBfTUlOX0NBTkNFTExFRF9USU1FUl9IQU5ETEVTX0ZSQUNUSU9OKToKKyAgICAgICAgICAgICMgUmVtb3ZlIGRlbGF5ZWQgY2FsbHMgdGhhdCB3ZXJlIGNhbmNlbGxlZCBpZiB0aGVpciBudW1iZXIKKyAgICAgICAgICAgICMgaXMgdG9vIGhpZ2gKKyAgICAgICAgICAgIG5ld19zY2hlZHVsZWQgPSBbXQorICAgICAgICAgICAgZm9yIGhhbmRsZSBpbiBzZWxmLl9zY2hlZHVsZWQ6CisgICAgICAgICAgICAgICAgaWYgaGFuZGxlLl9jYW5jZWxsZWQ6CisgICAgICAgICAgICAgICAgICAgIGhhbmRsZS5fc2NoZWR1bGVkID0gRmFsc2UKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBuZXdfc2NoZWR1bGVkLmFwcGVuZChoYW5kbGUpCisKKyAgICAgICAgICAgIGhlYXBxLmhlYXBpZnkobmV3X3NjaGVkdWxlZCkKKyAgICAgICAgICAgIHNlbGYuX3NjaGVkdWxlZCA9IG5ld19zY2hlZHVsZWQKKyAgICAgICAgICAgIHNlbGYuX3RpbWVyX2NhbmNlbGxlZF9jb3VudCA9IDAKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgUmVtb3ZlIGRlbGF5ZWQgY2FsbHMgdGhhdCB3ZXJlIGNhbmNlbGxlZCBmcm9tIGhlYWQgb2YgcXVldWUuCisgICAgICAgICAgICB3aGlsZSBzZWxmLl9zY2hlZHVsZWQgYW5kIHNlbGYuX3NjaGVkdWxlZFswXS5fY2FuY2VsbGVkOgorICAgICAgICAgICAgICAgIHNlbGYuX3RpbWVyX2NhbmNlbGxlZF9jb3VudCAtPSAxCisgICAgICAgICAgICAgICAgaGFuZGxlID0gaGVhcHEuaGVhcHBvcChzZWxmLl9zY2hlZHVsZWQpCisgICAgICAgICAgICAgICAgaGFuZGxlLl9zY2hlZHVsZWQgPSBGYWxzZQorCisgICAgICAgIHRpbWVvdXQgPSBOb25lCisgICAgICAgIGlmIHNlbGYuX3JlYWR5IG9yIHNlbGYuX3N0b3BwaW5nOgorICAgICAgICAgICAgdGltZW91dCA9IDAKKyAgICAgICAgZWxpZiBzZWxmLl9zY2hlZHVsZWQ6CisgICAgICAgICAgICAjIENvbXB1dGUgdGhlIGRlc2lyZWQgdGltZW91dC4KKyAgICAgICAgICAgIHdoZW4gPSBzZWxmLl9zY2hlZHVsZWRbMF0uX3doZW4KKyAgICAgICAgICAgIHRpbWVvdXQgPSBtYXgoMCwgd2hlbiAtIHNlbGYudGltZSgpKQorCisgICAgICAgIGlmIHNlbGYuX2RlYnVnIGFuZCB0aW1lb3V0ICE9IDA6CisgICAgICAgICAgICB0MCA9IHNlbGYudGltZSgpCisgICAgICAgICAgICBldmVudF9saXN0ID0gc2VsZi5fc2VsZWN0b3Iuc2VsZWN0KHRpbWVvdXQpCisgICAgICAgICAgICBkdCA9IHNlbGYudGltZSgpIC0gdDAKKyAgICAgICAgICAgIGlmIGR0ID49IDEuMDoKKyAgICAgICAgICAgICAgICBsZXZlbCA9IGxvZ2dpbmcuSU5GTworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBsZXZlbCA9IGxvZ2dpbmcuREVCVUcKKyAgICAgICAgICAgIG5ldmVudCA9IGxlbihldmVudF9saXN0KQorICAgICAgICAgICAgaWYgdGltZW91dCBpcyBOb25lOgorICAgICAgICAgICAgICAgIGxvZ2dlci5sb2cobGV2ZWwsICdwb2xsIHRvb2sgJS4zZiBtczogJXMgZXZlbnRzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGR0ICogMWUzLCBuZXZlbnQpCisgICAgICAgICAgICBlbGlmIG5ldmVudDoKKyAgICAgICAgICAgICAgICBsb2dnZXIubG9nKGxldmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BvbGwgJS4zZiBtcyB0b29rICUuM2YgbXM6ICVzIGV2ZW50cycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0ICogMWUzLCBkdCAqIDFlMywgbmV2ZW50KQorICAgICAgICAgICAgZWxpZiBkdCA+PSAxLjA6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmxvZyhsZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICdwb2xsICUuM2YgbXMgdG9vayAlLjNmIG1zOiB0aW1lb3V0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQgKiAxZTMsIGR0ICogMWUzKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZXZlbnRfbGlzdCA9IHNlbGYuX3NlbGVjdG9yLnNlbGVjdCh0aW1lb3V0KQorICAgICAgICBzZWxmLl9wcm9jZXNzX2V2ZW50cyhldmVudF9saXN0KQorCisgICAgICAgICMgSGFuZGxlICdsYXRlcicgY2FsbGJhY2tzIHRoYXQgYXJlIHJlYWR5LgorICAgICAgICBlbmRfdGltZSA9IHNlbGYudGltZSgpICsgc2VsZi5fY2xvY2tfcmVzb2x1dGlvbgorICAgICAgICB3aGlsZSBzZWxmLl9zY2hlZHVsZWQ6CisgICAgICAgICAgICBoYW5kbGUgPSBzZWxmLl9zY2hlZHVsZWRbMF0KKyAgICAgICAgICAgIGlmIGhhbmRsZS5fd2hlbiA+PSBlbmRfdGltZToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgaGFuZGxlID0gaGVhcHEuaGVhcHBvcChzZWxmLl9zY2hlZHVsZWQpCisgICAgICAgICAgICBoYW5kbGUuX3NjaGVkdWxlZCA9IEZhbHNlCisgICAgICAgICAgICBzZWxmLl9yZWFkeS5hcHBlbmQoaGFuZGxlKQorCisgICAgICAgICMgVGhpcyBpcyB0aGUgb25seSBwbGFjZSB3aGVyZSBjYWxsYmFja3MgYXJlIGFjdHVhbGx5ICpjYWxsZWQqLgorICAgICAgICAjIEFsbCBvdGhlciBwbGFjZXMganVzdCBhZGQgdGhlbSB0byByZWFkeS4KKyAgICAgICAgIyBOb3RlOiBXZSBydW4gYWxsIGN1cnJlbnRseSBzY2hlZHVsZWQgY2FsbGJhY2tzLCBidXQgbm90IGFueQorICAgICAgICAjIGNhbGxiYWNrcyBzY2hlZHVsZWQgYnkgY2FsbGJhY2tzIHJ1biB0aGlzIHRpbWUgYXJvdW5kIC0tCisgICAgICAgICMgdGhleSB3aWxsIGJlIHJ1biB0aGUgbmV4dCB0aW1lIChhZnRlciBhbm90aGVyIEkvTyBwb2xsKS4KKyAgICAgICAgIyBVc2UgYW4gaWRpb20gdGhhdCBpcyB0aHJlYWQtc2FmZSB3aXRob3V0IHVzaW5nIGxvY2tzLgorICAgICAgICBudG9kbyA9IGxlbihzZWxmLl9yZWFkeSkKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UobnRvZG8pOgorICAgICAgICAgICAgaGFuZGxlID0gc2VsZi5fcmVhZHkucG9wbGVmdCgpCisgICAgICAgICAgICBpZiBoYW5kbGUuX2NhbmNlbGxlZDoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgc2VsZi5fZGVidWc6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9jdXJyZW50X2hhbmRsZSA9IGhhbmRsZQorICAgICAgICAgICAgICAgICAgICB0MCA9IHNlbGYudGltZSgpCisgICAgICAgICAgICAgICAgICAgIGhhbmRsZS5fcnVuKCkKKyAgICAgICAgICAgICAgICAgICAgZHQgPSBzZWxmLnRpbWUoKSAtIHQwCisgICAgICAgICAgICAgICAgICAgIGlmIGR0ID49IHNlbGYuc2xvd19jYWxsYmFja19kdXJhdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nKCdFeGVjdXRpbmcgJXMgdG9vayAlLjNmIHNlY29uZHMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2Zvcm1hdF9oYW5kbGUoaGFuZGxlKSwgZHQpCisgICAgICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fY3VycmVudF9oYW5kbGUgPSBOb25lCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGhhbmRsZS5fcnVuKCkKKyAgICAgICAgaGFuZGxlID0gTm9uZSAgIyBOZWVkZWQgdG8gYnJlYWsgY3ljbGVzIHdoZW4gYW4gZXhjZXB0aW9uIG9jY3Vycy4KKworICAgIGRlZiBfc2V0X2Nvcm91dGluZV93cmFwcGVyKHNlbGYsIGVuYWJsZWQpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZXRfd3JhcHBlciA9IHN5cy5zZXRfY29yb3V0aW5lX3dyYXBwZXIKKyAgICAgICAgICAgIGdldF93cmFwcGVyID0gc3lzLmdldF9jb3JvdXRpbmVfd3JhcHBlcgorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBlbmFibGVkID0gYm9vbChlbmFibGVkKQorICAgICAgICBpZiBzZWxmLl9jb3JvdXRpbmVfd3JhcHBlcl9zZXQgPT0gZW5hYmxlZDoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHdyYXBwZXIgPSBjb3JvdXRpbmVzLmRlYnVnX3dyYXBwZXIKKyAgICAgICAgY3VycmVudF93cmFwcGVyID0gZ2V0X3dyYXBwZXIoKQorCisgICAgICAgIGlmIGVuYWJsZWQ6CisgICAgICAgICAgICBpZiBjdXJyZW50X3dyYXBwZXIgbm90IGluIChOb25lLCB3cmFwcGVyKToKKyAgICAgICAgICAgICAgICB3YXJuaW5ncy53YXJuKAorICAgICAgICAgICAgICAgICAgICAibG9vcC5zZXRfZGVidWcoVHJ1ZSk6IGNhbm5vdCBzZXQgZGVidWcgY29yb3V0aW5lICIKKyAgICAgICAgICAgICAgICAgICAgIndyYXBwZXI7IGFub3RoZXIgd3JhcHBlciBpcyBhbHJlYWR5IHNldCAlciIgJQorICAgICAgICAgICAgICAgICAgICBjdXJyZW50X3dyYXBwZXIsIFJ1bnRpbWVXYXJuaW5nKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZXRfd3JhcHBlcih3cmFwcGVyKQorICAgICAgICAgICAgICAgIHNlbGYuX2Nvcm91dGluZV93cmFwcGVyX3NldCA9IFRydWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIGN1cnJlbnRfd3JhcHBlciBub3QgaW4gKE5vbmUsIHdyYXBwZXIpOgorICAgICAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oCisgICAgICAgICAgICAgICAgICAgICJsb29wLnNldF9kZWJ1ZyhGYWxzZSk6IGNhbm5vdCB1bnNldCBkZWJ1ZyBjb3JvdXRpbmUgIgorICAgICAgICAgICAgICAgICAgICAid3JhcHBlcjsgYW5vdGhlciB3cmFwcGVyIHdhcyBzZXQgJXIiICUKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudF93cmFwcGVyLCBSdW50aW1lV2FybmluZykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2V0X3dyYXBwZXIoTm9uZSkKKyAgICAgICAgICAgICAgICBzZWxmLl9jb3JvdXRpbmVfd3JhcHBlcl9zZXQgPSBGYWxzZQorCisgICAgZGVmIGdldF9kZWJ1ZyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2RlYnVnCisKKyAgICBkZWYgc2V0X2RlYnVnKHNlbGYsIGVuYWJsZWQpOgorICAgICAgICBzZWxmLl9kZWJ1ZyA9IGVuYWJsZWQKKworICAgICAgICBpZiBzZWxmLmlzX3J1bm5pbmcoKToKKyAgICAgICAgICAgIHNlbGYuX3NldF9jb3JvdXRpbmVfd3JhcHBlcihlbmFibGVkKQpkaWZmIC0tZ2l0IGEvTGliL2FzeW5jaW8vYmFzZV9zdWJwcm9jZXNzLnB5IGIvTGliL2FzeW5jaW8vYmFzZV9zdWJwcm9jZXNzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczNDI1ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvYXN5bmNpby9iYXNlX3N1YnByb2Nlc3MucHkKQEAgLTAsMCArMSwyODMgQEAKK2ltcG9ydCBjb2xsZWN0aW9ucworaW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCB3YXJuaW5ncworCitmcm9tIC4gaW1wb3J0IGNvbXBhdAorZnJvbSAuIGltcG9ydCBmdXR1cmVzCitmcm9tIC4gaW1wb3J0IHByb3RvY29scworZnJvbSAuIGltcG9ydCB0cmFuc3BvcnRzCitmcm9tIC5jb3JvdXRpbmVzIGltcG9ydCBjb3JvdXRpbmUKK2Zyb20gLmxvZyBpbXBvcnQgbG9nZ2VyCisKKworY2xhc3MgQmFzZVN1YnByb2Nlc3NUcmFuc3BvcnQodHJhbnNwb3J0cy5TdWJwcm9jZXNzVHJhbnNwb3J0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb29wLCBwcm90b2NvbCwgYXJncywgc2hlbGwsCisgICAgICAgICAgICAgICAgIHN0ZGluLCBzdGRvdXQsIHN0ZGVyciwgYnVmc2l6ZSwKKyAgICAgICAgICAgICAgICAgd2FpdGVyPU5vbmUsIGV4dHJhPU5vbmUsICoqa3dhcmdzKToKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhleHRyYSkKKyAgICAgICAgc2VsZi5fY2xvc2VkID0gRmFsc2UKKyAgICAgICAgc2VsZi5fcHJvdG9jb2wgPSBwcm90b2NvbAorICAgICAgICBzZWxmLl9sb29wID0gbG9vcAorICAgICAgICBzZWxmLl9wcm9jID0gTm9uZQorICAgICAgICBzZWxmLl9waWQgPSBOb25lCisgICAgICAgIHNlbGYuX3JldHVybmNvZGUgPSBOb25lCisgICAgICAgIHNlbGYuX2V4aXRfd2FpdGVycyA9IFtdCisgICAgICAgIHNlbGYuX3BlbmRpbmdfY2FsbHMgPSBjb2xsZWN0aW9ucy5kZXF1ZSgpCisgICAgICAgIHNlbGYuX3BpcGVzID0ge30KKyAgICAgICAgc2VsZi5fZmluaXNoZWQgPSBGYWxzZQorCisgICAgICAgIGlmIHN0ZGluID09IHN1YnByb2Nlc3MuUElQRToKKyAgICAgICAgICAgIHNlbGYuX3BpcGVzWzBdID0gTm9uZQorICAgICAgICBpZiBzdGRvdXQgPT0gc3VicHJvY2Vzcy5QSVBFOgorICAgICAgICAgICAgc2VsZi5fcGlwZXNbMV0gPSBOb25lCisgICAgICAgIGlmIHN0ZGVyciA9PSBzdWJwcm9jZXNzLlBJUEU6CisgICAgICAgICAgICBzZWxmLl9waXBlc1syXSA9IE5vbmUKKworICAgICAgICAjIENyZWF0ZSB0aGUgY2hpbGQgcHJvY2Vzczogc2V0IHRoZSBfcHJvYyBhdHRyaWJ1dGUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5fc3RhcnQoYXJncz1hcmdzLCBzaGVsbD1zaGVsbCwgc3RkaW49c3RkaW4sIHN0ZG91dD1zdGRvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3RkZXJyLCBidWZzaXplPWJ1ZnNpemUsICoqa3dhcmdzKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBzZWxmLmNsb3NlKCkKKyAgICAgICAgICAgIHJhaXNlCisKKyAgICAgICAgc2VsZi5fcGlkID0gc2VsZi5fcHJvYy5waWQKKyAgICAgICAgc2VsZi5fZXh0cmFbJ3N1YnByb2Nlc3MnXSA9IHNlbGYuX3Byb2MKKworICAgICAgICBpZiBzZWxmLl9sb29wLmdldF9kZWJ1ZygpOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShhcmdzLCAoYnl0ZXMsIHN0cikpOgorICAgICAgICAgICAgICAgIHByb2dyYW0gPSBhcmdzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHByb2dyYW0gPSBhcmdzWzBdCisgICAgICAgICAgICBsb2dnZXIuZGVidWcoJ3Byb2Nlc3MgJXIgY3JlYXRlZDogcGlkICVzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLCBzZWxmLl9waWQpCisKKyAgICAgICAgc2VsZi5fbG9vcC5jcmVhdGVfdGFzayhzZWxmLl9jb25uZWN0X3BpcGVzKHdhaXRlcikpCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIGluZm8gPSBbc2VsZi5fX2NsYXNzX18uX19uYW1lX19dCisgICAgICAgIGlmIHNlbGYuX2Nsb3NlZDoKKyAgICAgICAgICAgIGluZm8uYXBwZW5kKCdjbG9zZWQnKQorICAgICAgICBpZiBzZWxmLl9waWQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBpbmZvLmFwcGVuZCgncGlkPSVzJyAlIHNlbGYuX3BpZCkKKyAgICAgICAgaWYgc2VsZi5fcmV0dXJuY29kZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGluZm8uYXBwZW5kKCdyZXR1cm5jb2RlPSVzJyAlIHNlbGYuX3JldHVybmNvZGUpCisgICAgICAgIGVsaWYgc2VsZi5fcGlkIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgaW5mby5hcHBlbmQoJ3J1bm5pbmcnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaW5mby5hcHBlbmQoJ25vdCBzdGFydGVkJykKKworICAgICAgICBzdGRpbiA9IHNlbGYuX3BpcGVzLmdldCgwKQorICAgICAgICBpZiBzdGRpbiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGluZm8uYXBwZW5kKCdzdGRpbj0lcycgJSBzdGRpbi5waXBlKQorCisgICAgICAgIHN0ZG91dCA9IHNlbGYuX3BpcGVzLmdldCgxKQorICAgICAgICBzdGRlcnIgPSBzZWxmLl9waXBlcy5nZXQoMikKKyAgICAgICAgaWYgc3Rkb3V0IGlzIG5vdCBOb25lIGFuZCBzdGRlcnIgaXMgc3Rkb3V0OgorICAgICAgICAgICAgaW5mby5hcHBlbmQoJ3N0ZG91dD1zdGRlcnI9JXMnICUgc3Rkb3V0LnBpcGUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBzdGRvdXQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgaW5mby5hcHBlbmQoJ3N0ZG91dD0lcycgJSBzdGRvdXQucGlwZSkKKyAgICAgICAgICAgIGlmIHN0ZGVyciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBpbmZvLmFwcGVuZCgnc3RkZXJyPSVzJyAlIHN0ZGVyci5waXBlKQorCisgICAgICAgIHJldHVybiAnPCVzPicgJSAnICcuam9pbihpbmZvKQorCisgICAgZGVmIF9zdGFydChzZWxmLCBhcmdzLCBzaGVsbCwgc3RkaW4sIHN0ZG91dCwgc3RkZXJyLCBidWZzaXplLCAqKmt3YXJncyk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBpc19jbG9zaW5nKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fY2xvc2VkCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgIGlmIHNlbGYuX2Nsb3NlZDoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLl9jbG9zZWQgPSBUcnVlCisKKyAgICAgICAgZm9yIHByb3RvIGluIHNlbGYuX3BpcGVzLnZhbHVlcygpOgorICAgICAgICAgICAgaWYgcHJvdG8gaXMgTm9uZToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgcHJvdG8ucGlwZS5jbG9zZSgpCisKKyAgICAgICAgaWYgKHNlbGYuX3Byb2MgaXMgbm90IE5vbmUKKyAgICAgICAgIyB0aGUgY2hpbGQgcHJvY2VzcyBmaW5pc2hlZD8KKyAgICAgICAgYW5kIHNlbGYuX3JldHVybmNvZGUgaXMgTm9uZQorICAgICAgICAjIHRoZSBjaGlsZCBwcm9jZXNzIGZpbmlzaGVkIGJ1dCB0aGUgdHJhbnNwb3J0IHdhcyBub3Qgbm90aWZpZWQgeWV0PworICAgICAgICBhbmQgc2VsZi5fcHJvYy5wb2xsKCkgaXMgTm9uZQorICAgICAgICApOgorICAgICAgICAgICAgaWYgc2VsZi5fbG9vcC5nZXRfZGVidWcoKToKKyAgICAgICAgICAgICAgICBsb2dnZXIud2FybmluZygnQ2xvc2UgcnVubmluZyBjaGlsZCBwcm9jZXNzOiBraWxsICVyJywgc2VsZikKKworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuX3Byb2Mua2lsbCgpCisgICAgICAgICAgICBleGNlcHQgUHJvY2Vzc0xvb2t1cEVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAgICAgIyBEb24ndCBjbGVhciB0aGUgX3Byb2MgcmVmZXJlbmNlIHlldDogX3Bvc3RfaW5pdCgpIG1heSBzdGlsbCBydW4KKworICAgICMgT24gUHl0aG9uIDMuMyBhbmQgb2xkZXIsIG9iamVjdHMgd2l0aCBhIGRlc3RydWN0b3IgcGFydCBvZiBhIHJlZmVyZW5jZQorICAgICMgY3ljbGUgYXJlIG5ldmVyIGRlc3Ryb3llZC4gSXQncyBub3QgbW9yZSB0aGUgY2FzZSBvbiBQeXRob24gMy40IHRoYW5rcworICAgICMgdG8gdGhlIFBFUCA0NDIuCisgICAgaWYgY29tcGF0LlBZMzQ6CisgICAgICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICAgICAgaWYgbm90IHNlbGYuX2Nsb3NlZDoKKyAgICAgICAgICAgICAgICB3YXJuaW5ncy53YXJuKCJ1bmNsb3NlZCB0cmFuc3BvcnQgJXIiICUgc2VsZiwgUmVzb3VyY2VXYXJuaW5nKQorICAgICAgICAgICAgICAgIHNlbGYuY2xvc2UoKQorCisgICAgZGVmIGdldF9waWQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9waWQKKworICAgIGRlZiBnZXRfcmV0dXJuY29kZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3JldHVybmNvZGUKKworICAgIGRlZiBnZXRfcGlwZV90cmFuc3BvcnQoc2VsZiwgZmQpOgorICAgICAgICBpZiBmZCBpbiBzZWxmLl9waXBlczoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9waXBlc1tmZF0ucGlwZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBfY2hlY2tfcHJvYyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fcHJvYyBpcyBOb25lOgorICAgICAgICAgICAgcmFpc2UgUHJvY2Vzc0xvb2t1cEVycm9yKCkKKworICAgIGRlZiBzZW5kX3NpZ25hbChzZWxmLCBzaWduYWwpOgorICAgICAgICBzZWxmLl9jaGVja19wcm9jKCkKKyAgICAgICAgc2VsZi5fcHJvYy5zZW5kX3NpZ25hbChzaWduYWwpCisKKyAgICBkZWYgdGVybWluYXRlKHNlbGYpOgorICAgICAgICBzZWxmLl9jaGVja19wcm9jKCkKKyAgICAgICAgc2VsZi5fcHJvYy50ZXJtaW5hdGUoKQorCisgICAgZGVmIGtpbGwoc2VsZik6CisgICAgICAgIHNlbGYuX2NoZWNrX3Byb2MoKQorICAgICAgICBzZWxmLl9wcm9jLmtpbGwoKQorCisgICAgQGNvcm91dGluZQorICAgIGRlZiBfY29ubmVjdF9waXBlcyhzZWxmLCB3YWl0ZXIpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBwcm9jID0gc2VsZi5fcHJvYworICAgICAgICAgICAgbG9vcCA9IHNlbGYuX2xvb3AKKworICAgICAgICAgICAgaWYgcHJvYy5zdGRpbiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBfLCBwaXBlID0geWllbGQgZnJvbSBsb29wLmNvbm5lY3Rfd3JpdGVfcGlwZSgKKyAgICAgICAgICAgICAgICAgICAgbGFtYmRhOiBXcml0ZVN1YnByb2Nlc3NQaXBlUHJvdG8oc2VsZiwgMCksCisgICAgICAgICAgICAgICAgICAgIHByb2Muc3RkaW4pCisgICAgICAgICAgICAgICAgc2VsZi5fcGlwZXNbMF0gPSBwaXBlCisKKyAgICAgICAgICAgIGlmIHByb2Muc3Rkb3V0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIF8sIHBpcGUgPSB5aWVsZCBmcm9tIGxvb3AuY29ubmVjdF9yZWFkX3BpcGUoCisgICAgICAgICAgICAgICAgICAgIGxhbWJkYTogUmVhZFN1YnByb2Nlc3NQaXBlUHJvdG8oc2VsZiwgMSksCisgICAgICAgICAgICAgICAgICAgIHByb2Muc3Rkb3V0KQorICAgICAgICAgICAgICAgIHNlbGYuX3BpcGVzWzFdID0gcGlwZQorCisgICAgICAgICAgICBpZiBwcm9jLnN0ZGVyciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBfLCBwaXBlID0geWllbGQgZnJvbSBsb29wLmNvbm5lY3RfcmVhZF9waXBlKAorICAgICAgICAgICAgICAgICAgICBsYW1iZGE6IFJlYWRTdWJwcm9jZXNzUGlwZVByb3RvKHNlbGYsIDIpLAorICAgICAgICAgICAgICAgICAgICBwcm9jLnN0ZGVycikKKyAgICAgICAgICAgICAgICBzZWxmLl9waXBlc1syXSA9IHBpcGUKKworICAgICAgICAgICAgYXNzZXJ0IHNlbGYuX3BlbmRpbmdfY2FsbHMgaXMgbm90IE5vbmUKKworICAgICAgICAgICAgbG9vcC5jYWxsX3Nvb24oc2VsZi5fcHJvdG9jb2wuY29ubmVjdGlvbl9tYWRlLCBzZWxmKQorICAgICAgICAgICAgZm9yIGNhbGxiYWNrLCBkYXRhIGluIHNlbGYuX3BlbmRpbmdfY2FsbHM6CisgICAgICAgICAgICAgICAgbG9vcC5jYWxsX3Nvb24oY2FsbGJhY2ssICpkYXRhKQorICAgICAgICAgICAgc2VsZi5fcGVuZGluZ19jYWxscyA9IE5vbmUKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICBpZiB3YWl0ZXIgaXMgbm90IE5vbmUgYW5kIG5vdCB3YWl0ZXIuY2FuY2VsbGVkKCk6CisgICAgICAgICAgICAgICAgd2FpdGVyLnNldF9leGNlcHRpb24oZXhjKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgd2FpdGVyIGlzIG5vdCBOb25lIGFuZCBub3Qgd2FpdGVyLmNhbmNlbGxlZCgpOgorICAgICAgICAgICAgICAgIHdhaXRlci5zZXRfcmVzdWx0KE5vbmUpCisKKyAgICBkZWYgX2NhbGwoc2VsZiwgY2IsICpkYXRhKToKKyAgICAgICAgaWYgc2VsZi5fcGVuZGluZ19jYWxscyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX3BlbmRpbmdfY2FsbHMuYXBwZW5kKChjYiwgZGF0YSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbihjYiwgKmRhdGEpCisKKyAgICBkZWYgX3BpcGVfY29ubmVjdGlvbl9sb3N0KHNlbGYsIGZkLCBleGMpOgorICAgICAgICBzZWxmLl9jYWxsKHNlbGYuX3Byb3RvY29sLnBpcGVfY29ubmVjdGlvbl9sb3N0LCBmZCwgZXhjKQorICAgICAgICBzZWxmLl90cnlfZmluaXNoKCkKKworICAgIGRlZiBfcGlwZV9kYXRhX3JlY2VpdmVkKHNlbGYsIGZkLCBkYXRhKToKKyAgICAgICAgc2VsZi5fY2FsbChzZWxmLl9wcm90b2NvbC5waXBlX2RhdGFfcmVjZWl2ZWQsIGZkLCBkYXRhKQorCisgICAgZGVmIF9wcm9jZXNzX2V4aXRlZChzZWxmLCByZXR1cm5jb2RlKToKKyAgICAgICAgYXNzZXJ0IHJldHVybmNvZGUgaXMgbm90IE5vbmUsIHJldHVybmNvZGUKKyAgICAgICAgYXNzZXJ0IHNlbGYuX3JldHVybmNvZGUgaXMgTm9uZSwgc2VsZi5fcmV0dXJuY29kZQorICAgICAgICBpZiBzZWxmLl9sb29wLmdldF9kZWJ1ZygpOgorICAgICAgICAgICAgbG9nZ2VyLmluZm8oJyVyIGV4aXRlZCB3aXRoIHJldHVybiBjb2RlICVyJywKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYsIHJldHVybmNvZGUpCisgICAgICAgIHNlbGYuX3JldHVybmNvZGUgPSByZXR1cm5jb2RlCisgICAgICAgIHNlbGYuX2NhbGwoc2VsZi5fcHJvdG9jb2wucHJvY2Vzc19leGl0ZWQpCisgICAgICAgIHNlbGYuX3RyeV9maW5pc2goKQorCisgICAgICAgICMgd2FrZSB1cCBmdXR1cmVzIHdhaXRpbmcgZm9yIHdhaXQoKQorICAgICAgICBmb3Igd2FpdGVyIGluIHNlbGYuX2V4aXRfd2FpdGVyczoKKyAgICAgICAgICAgIGlmIG5vdCB3YWl0ZXIuY2FuY2VsbGVkKCk6CisgICAgICAgICAgICAgICAgd2FpdGVyLnNldF9yZXN1bHQocmV0dXJuY29kZSkKKyAgICAgICAgc2VsZi5fZXhpdF93YWl0ZXJzID0gTm9uZQorCisgICAgQGNvcm91dGluZQorICAgIGRlZiBfd2FpdChzZWxmKToKKyAgICAgICAgIiIiV2FpdCB1bnRpbCB0aGUgcHJvY2VzcyBleGl0IGFuZCByZXR1cm4gdGhlIHByb2Nlc3MgcmV0dXJuIGNvZGUuCisKKyAgICAgICAgVGhpcyBtZXRob2QgaXMgYSBjb3JvdXRpbmUuIiIiCisgICAgICAgIGlmIHNlbGYuX3JldHVybmNvZGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fcmV0dXJuY29kZQorCisgICAgICAgIHdhaXRlciA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5fbG9vcCkKKyAgICAgICAgc2VsZi5fZXhpdF93YWl0ZXJzLmFwcGVuZCh3YWl0ZXIpCisgICAgICAgIHJldHVybiAoeWllbGQgZnJvbSB3YWl0ZXIpCisKKyAgICBkZWYgX3RyeV9maW5pc2goc2VsZik6CisgICAgICAgIGFzc2VydCBub3Qgc2VsZi5fZmluaXNoZWQKKyAgICAgICAgaWYgc2VsZi5fcmV0dXJuY29kZSBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGlmIGFsbChwIGlzIG5vdCBOb25lIGFuZCBwLmRpc2Nvbm5lY3RlZAorICAgICAgICAgICAgICAgZm9yIHAgaW4gc2VsZi5fcGlwZXMudmFsdWVzKCkpOgorICAgICAgICAgICAgc2VsZi5fZmluaXNoZWQgPSBUcnVlCisgICAgICAgICAgICBzZWxmLl9jYWxsKHNlbGYuX2NhbGxfY29ubmVjdGlvbl9sb3N0LCBOb25lKQorCisgICAgZGVmIF9jYWxsX2Nvbm5lY3Rpb25fbG9zdChzZWxmLCBleGMpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl9wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QoZXhjKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5fbG9vcCA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYuX3Byb2MgPSBOb25lCisgICAgICAgICAgICBzZWxmLl9wcm90b2NvbCA9IE5vbmUKKworCitjbGFzcyBXcml0ZVN1YnByb2Nlc3NQaXBlUHJvdG8ocHJvdG9jb2xzLkJhc2VQcm90b2NvbCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcHJvYywgZmQpOgorICAgICAgICBzZWxmLnByb2MgPSBwcm9jCisgICAgICAgIHNlbGYuZmQgPSBmZAorICAgICAgICBzZWxmLnBpcGUgPSBOb25lCisgICAgICAgIHNlbGYuZGlzY29ubmVjdGVkID0gRmFsc2UKKworICAgIGRlZiBjb25uZWN0aW9uX21hZGUoc2VsZiwgdHJhbnNwb3J0KToKKyAgICAgICAgc2VsZi5waXBlID0gdHJhbnNwb3J0CisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAoJzwlcyBmZD0lcyBwaXBlPSVyPicKKyAgICAgICAgICAgICAgICAlIChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgc2VsZi5mZCwgc2VsZi5waXBlKSkKKworICAgIGRlZiBjb25uZWN0aW9uX2xvc3Qoc2VsZiwgZXhjKToKKyAgICAgICAgc2VsZi5kaXNjb25uZWN0ZWQgPSBUcnVlCisgICAgICAgIHNlbGYucHJvYy5fcGlwZV9jb25uZWN0aW9uX2xvc3Qoc2VsZi5mZCwgZXhjKQorICAgICAgICBzZWxmLnByb2MgPSBOb25lCisKKyAgICBkZWYgcGF1c2Vfd3JpdGluZyhzZWxmKToKKyAgICAgICAgc2VsZi5wcm9jLl9wcm90b2NvbC5wYXVzZV93cml0aW5nKCkKKworICAgIGRlZiByZXN1bWVfd3JpdGluZyhzZWxmKToKKyAgICAgICAgc2VsZi5wcm9jLl9wcm90b2NvbC5yZXN1bWVfd3JpdGluZygpCisKKworY2xhc3MgUmVhZFN1YnByb2Nlc3NQaXBlUHJvdG8oV3JpdGVTdWJwcm9jZXNzUGlwZVByb3RvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG9jb2xzLlByb3RvY29sKToKKworICAgIGRlZiBkYXRhX3JlY2VpdmVkKHNlbGYsIGRhdGEpOgorICAgICAgICBzZWxmLnByb2MuX3BpcGVfZGF0YV9yZWNlaXZlZChzZWxmLmZkLCBkYXRhKQpkaWZmIC0tZ2l0IGEvTGliL2FzeW5jaW8vY29tcGF0LnB5IGIvTGliL2FzeW5jaW8vY29tcGF0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2MGI3ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvYXN5bmNpby9jb21wYXQucHkKQEAgLTAsMCArMSwxNyBAQAorIiIiQ29tcGF0aWJpbGl0eSBoZWxwZXJzIGZvciB0aGUgZGlmZmVyZW50IFB5dGhvbiB2ZXJzaW9ucy4iIiIKKworaW1wb3J0IHN5cworCitQWTM0ID0gc3lzLnZlcnNpb25faW5mbyA+PSAoMywgNCkKK1BZMzUgPSBzeXMudmVyc2lvbl9pbmZvID49ICgzLCA1KQorCisKK2RlZiBmbGF0dGVuX2xpc3RfYnl0ZXMobGlzdF9vZl9kYXRhKToKKyAgICAiIiJDb25jYXRlbmF0ZSBhIHNlcXVlbmNlIG9mIGJ5dGVzLWxpa2Ugb2JqZWN0cy4iIiIKKyAgICBpZiBub3QgUFkzNDoKKyAgICAgICAgIyBPbiBQeXRob24gMy4zIGFuZCBvbGRlciwgYnl0ZXMuam9pbigpIGRvZXNuJ3QgaGFuZGxlCisgICAgICAgICMgbWVtb3J5dmlldy4KKyAgICAgICAgbGlzdF9vZl9kYXRhID0gKAorICAgICAgICAgICAgYnl0ZXMoZGF0YSkgaWYgaXNpbnN0YW5jZShkYXRhLCBtZW1vcnl2aWV3KSBlbHNlIGRhdGEKKyAgICAgICAgICAgIGZvciBkYXRhIGluIGxpc3Rfb2ZfZGF0YSkKKyAgICByZXR1cm4gYicnLmpvaW4obGlzdF9vZl9kYXRhKQpkaWZmIC0tZ2l0IGEvTGliL2FzeW5jaW8vY29uc3RhbnRzLnB5IGIvTGliL2FzeW5jaW8vY29uc3RhbnRzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5ZTEyMzIKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvYXN5bmNpby9jb25zdGFudHMucHkKQEAgLTAsMCArMSw3IEBACisiIiJDb25zdGFudHMuIiIiCisKKyMgQWZ0ZXIgdGhlIGNvbm5lY3Rpb24gaXMgbG9zdCwgbG9nIHdhcm5pbmdzIGFmdGVyIHRoaXMgbWFueSB3cml0ZSgpcy4KK0xPR19USFJFU0hPTERfRk9SX0NPTk5MT1NUX1dSSVRFUyA9IDUKKworIyBTZWNvbmRzIHRvIHdhaXQgYmVmb3JlIHJldHJ5aW5nIGFjY2VwdCgpLgorQUNDRVBUX1JFVFJZX0RFTEFZID0gMQpkaWZmIC0tZ2l0IGEvTGliL2FzeW5jaW8vY29yb3V0aW5lcy5weSBiL0xpYi9hc3luY2lvL2Nvcm91dGluZXMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2E5MmM3ZAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9hc3luY2lvL2Nvcm91dGluZXMucHkKQEAgLTAsMCArMSwzMDUgQEAKK19fYWxsX18gPSBbJ2Nvcm91dGluZScsCisgICAgICAgICAgICdpc2Nvcm91dGluZWZ1bmN0aW9uJywgJ2lzY29yb3V0aW5lJ10KKworaW1wb3J0IGZ1bmN0b29scworaW1wb3J0IGluc3BlY3QKK2ltcG9ydCBvcGNvZGUKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IHRyYWNlYmFjaworaW1wb3J0IHR5cGVzCisKK2Zyb20gLiBpbXBvcnQgY29tcGF0Citmcm9tIC4gaW1wb3J0IGV2ZW50cworZnJvbSAuIGltcG9ydCBmdXR1cmVzCitmcm9tIC5sb2cgaW1wb3J0IGxvZ2dlcgorCisKKyMgT3Bjb2RlIG9mICJ5aWVsZCBmcm9tIiBpbnN0cnVjdGlvbgorX1lJRUxEX0ZST00gPSBvcGNvZGUub3BtYXBbJ1lJRUxEX0ZST00nXQorCisjIElmIHlvdSBzZXQgX0RFQlVHIHRvIHRydWUsIEBjb3JvdXRpbmUgd2lsbCB3cmFwIHRoZSByZXN1bHRpbmcKKyMgZ2VuZXJhdG9yIG9iamVjdHMgaW4gYSBDb3JvV3JhcHBlciBpbnN0YW5jZSAoZGVmaW5lZCBiZWxvdykuICBUaGF0CisjIGluc3RhbmNlIHdpbGwgbG9nIGEgbWVzc2FnZSB3aGVuIHRoZSBnZW5lcmF0b3IgaXMgbmV2ZXIgaXRlcmF0ZWQKKyMgb3Zlciwgd2hpY2ggbWF5IGhhcHBlbiB3aGVuIHlvdSBmb3JnZXQgdG8gdXNlICJ5aWVsZCBmcm9tIiB3aXRoIGEKKyMgY29yb3V0aW5lIGNhbGwuICBOb3RlIHRoYXQgdGhlIHZhbHVlIG9mIHRoZSBfREVCVUcgZmxhZyBpcyB0YWtlbgorIyB3aGVuIHRoZSBkZWNvcmF0b3IgaXMgdXNlZCwgc28gdG8gYmUgb2YgYW55IHVzZSBpdCBtdXN0IGJlIHNldAorIyBiZWZvcmUgeW91IGRlZmluZSB5b3VyIGNvcm91dGluZXMuICBBIGRvd25zaWRlIG9mIHVzaW5nIHRoaXMgZmVhdHVyZQorIyBpcyB0aGF0IHRyYWNlYmFja3Mgc2hvdyBlbnRyaWVzIGZvciB0aGUgQ29yb1dyYXBwZXIuX19uZXh0X18gbWV0aG9kCisjIHdoZW4gX0RFQlVHIGlzIHRydWUuCitfREVCVUcgPSAobm90IHN5cy5mbGFncy5pZ25vcmVfZW52aXJvbm1lbnQKKyAgICAgICAgICBhbmQgYm9vbChvcy5lbnZpcm9uLmdldCgnUFlUSE9OQVNZTkNJT0RFQlVHJykpKQorCisKK3RyeToKKyAgICBfdHlwZXNfY29yb3V0aW5lID0gdHlwZXMuY29yb3V0aW5lCitleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgX3R5cGVzX2Nvcm91dGluZSA9IE5vbmUKKwordHJ5OgorICAgIF9pbnNwZWN0X2lzY29yb3V0aW5lZnVuY3Rpb24gPSBpbnNwZWN0LmlzY29yb3V0aW5lZnVuY3Rpb24KK2V4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICBfaW5zcGVjdF9pc2Nvcm91dGluZWZ1bmN0aW9uID0gbGFtYmRhIGZ1bmM6IEZhbHNlCisKK3RyeToKKyAgICBmcm9tIGNvbGxlY3Rpb25zLmFiYyBpbXBvcnQgQ29yb3V0aW5lIGFzIF9Db3JvdXRpbmVBQkMsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXdhaXRhYmxlIGFzIF9Bd2FpdGFibGVBQkMKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBfQ29yb3V0aW5lQUJDID0gX0F3YWl0YWJsZUFCQyA9IE5vbmUKKworCisjIENoZWNrIGZvciBDUHl0aG9uIGlzc3VlICMyMTIwOQorZGVmIGhhc195aWVsZF9mcm9tX2J1ZygpOgorICAgIGNsYXNzIE15R2VuOgorICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICAgICBzZWxmLnNlbmRfYXJncyA9IE5vbmUKKyAgICAgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYKKyAgICAgICAgZGVmIF9fbmV4dF9fKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuIDQyCisgICAgICAgIGRlZiBzZW5kKHNlbGYsICp3aGF0KToKKyAgICAgICAgICAgIHNlbGYuc2VuZF9hcmdzID0gd2hhdAorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICBkZWYgeWllbGRfZnJvbV9nZW4oZ2VuKToKKyAgICAgICAgeWllbGQgZnJvbSBnZW4KKyAgICB2YWx1ZSA9ICgxLCAyLCAzKQorICAgIGdlbiA9IE15R2VuKCkKKyAgICBjb3JvID0geWllbGRfZnJvbV9nZW4oZ2VuKQorICAgIG5leHQoY29ybykKKyAgICBjb3JvLnNlbmQodmFsdWUpCisgICAgcmV0dXJuIGdlbi5zZW5kX2FyZ3MgIT0gKHZhbHVlLCkKK19ZSUVMRF9GUk9NX0JVRyA9IGhhc195aWVsZF9mcm9tX2J1ZygpCitkZWwgaGFzX3lpZWxkX2Zyb21fYnVnCisKKworZGVmIGRlYnVnX3dyYXBwZXIoZ2VuKToKKyAgICAjIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gJ3N5cy5zZXRfY29yb3V0aW5lX3dyYXBwZXInLgorICAgICMgV2Ugb25seSB3cmFwIGhlcmUgY29yb3V0aW5lcyBkZWZpbmVkIHZpYSAnYXN5bmMgZGVmJyBzeW50YXguCisgICAgIyBHZW5lcmF0b3ItYmFzZWQgY29yb3V0aW5lcyBhcmUgd3JhcHBlZCBpbiBAY29yb3V0aW5lCisgICAgIyBkZWNvcmF0b3IuCisgICAgcmV0dXJuIENvcm9XcmFwcGVyKGdlbiwgTm9uZSkKKworCitjbGFzcyBDb3JvV3JhcHBlcjoKKyAgICAjIFdyYXBwZXIgZm9yIGNvcm91dGluZSBvYmplY3QgaW4gX0RFQlVHIG1vZGUuCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZ2VuLCBmdW5jPU5vbmUpOgorICAgICAgICBhc3NlcnQgaW5zcGVjdC5pc2dlbmVyYXRvcihnZW4pIG9yIGluc3BlY3QuaXNjb3JvdXRpbmUoZ2VuKSwgZ2VuCisgICAgICAgIHNlbGYuZ2VuID0gZ2VuCisgICAgICAgIHNlbGYuZnVuYyA9IGZ1bmMgIyBVc2VkIHRvIHVud3JhcCBAY29yb3V0aW5lIGRlY29yYXRvcgorICAgICAgICBzZWxmLl9zb3VyY2VfdHJhY2ViYWNrID0gdHJhY2ViYWNrLmV4dHJhY3Rfc3RhY2soc3lzLl9nZXRmcmFtZSgxKSkKKyAgICAgICAgc2VsZi5fX25hbWVfXyA9IGdldGF0dHIoZ2VuLCAnX19uYW1lX18nLCBOb25lKQorICAgICAgICBzZWxmLl9fcXVhbG5hbWVfXyA9IGdldGF0dHIoZ2VuLCAnX19xdWFsbmFtZV9fJywgTm9uZSkKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgY29yb19yZXByID0gX2Zvcm1hdF9jb3JvdXRpbmUoc2VsZikKKyAgICAgICAgaWYgc2VsZi5fc291cmNlX3RyYWNlYmFjazoKKyAgICAgICAgICAgIGZyYW1lID0gc2VsZi5fc291cmNlX3RyYWNlYmFja1stMV0KKyAgICAgICAgICAgIGNvcm9fcmVwciArPSAnLCBjcmVhdGVkIGF0ICVzOiVzJyAlIChmcmFtZVswXSwgZnJhbWVbMV0pCisgICAgICAgIHJldHVybiAnPCVzICVzPicgJSAoc2VsZi5fX2NsYXNzX18uX19uYW1lX18sIGNvcm9fcmVwcikKKworICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfX25leHRfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZ2VuLnNlbmQoTm9uZSkKKworICAgIGlmIF9ZSUVMRF9GUk9NX0JVRzoKKyAgICAgICAgIyBGb3IgZm9yIENQeXRob24gaXNzdWUgIzIxMjA5OiB1c2luZyAieWllbGQgZnJvbSIgYW5kIGEgY3VzdG9tCisgICAgICAgICMgZ2VuZXJhdG9yLCBnZW5lcmF0b3Iuc2VuZCh0dXBsZSkgdW5wYWNrcyB0aGUgdHVwbGUgaW5zdGVhZCBvZiBwYXNzaW5nCisgICAgICAgICMgdGhlIHR1cGxlIHVuY2hhbmdlZC4gQ2hlY2sgaWYgdGhlIGNhbGxlciBpcyBhIGdlbmVyYXRvciB1c2luZyAieWllbGQKKyAgICAgICAgIyBmcm9tIiB0byBkZWNpZGUgaWYgdGhlIHBhcmFtZXRlciBzaG91bGQgYmUgdW5wYWNrZWQgb3Igbm90LgorICAgICAgICBkZWYgc2VuZChzZWxmLCAqdmFsdWUpOgorICAgICAgICAgICAgZnJhbWUgPSBzeXMuX2dldGZyYW1lKCkKKyAgICAgICAgICAgIGNhbGxlciA9IGZyYW1lLmZfYmFjaworICAgICAgICAgICAgYXNzZXJ0IGNhbGxlci5mX2xhc3RpID49IDAKKyAgICAgICAgICAgIGlmIGNhbGxlci5mX2NvZGUuY29fY29kZVtjYWxsZXIuZl9sYXN0aV0gIT0gX1lJRUxEX0ZST006CisgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZVswXQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuZ2VuLnNlbmQodmFsdWUpCisgICAgZWxzZToKKyAgICAgICAgZGVmIHNlbmQoc2VsZiwgdmFsdWUpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuZ2VuLnNlbmQodmFsdWUpCisKKyAgICBkZWYgdGhyb3coc2VsZiwgZXhjKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZ2VuLnRocm93KGV4YykKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZ2VuLmNsb3NlKCkKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBnaV9mcmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZ2VuLmdpX2ZyYW1lCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgZ2lfcnVubmluZyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZ2VuLmdpX3J1bm5pbmcKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBnaV9jb2RlKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5nZW4uZ2lfY29kZQorCisgICAgaWYgY29tcGF0LlBZMzU6CisKKyAgICAgICAgZGVmIF9fYXdhaXRfXyhzZWxmKToKKyAgICAgICAgICAgIGNyX2F3YWl0ID0gZ2V0YXR0cihzZWxmLmdlbiwgJ2NyX2F3YWl0JywgTm9uZSkKKyAgICAgICAgICAgIGlmIGNyX2F3YWl0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigKKyAgICAgICAgICAgICAgICAgICAgIkNhbm5vdCBhd2FpdCBvbiBjb3JvdXRpbmUgeyFyfSB3aGlsZSBpdCdzICIKKyAgICAgICAgICAgICAgICAgICAgImF3YWl0aW5nIGZvciB7IXJ9Ii5mb3JtYXQoc2VsZi5nZW4sIGNyX2F3YWl0KSkKKyAgICAgICAgICAgIHJldHVybiBzZWxmCisKKyAgICAgICAgQHByb3BlcnR5CisgICAgICAgIGRlZiBnaV95aWVsZGZyb20oc2VsZik6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5nZW4uZ2lfeWllbGRmcm9tCisKKyAgICAgICAgQHByb3BlcnR5CisgICAgICAgIGRlZiBjcl9hd2FpdChzZWxmKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmdlbi5jcl9hd2FpdAorCisgICAgICAgIEBwcm9wZXJ0eQorICAgICAgICBkZWYgY3JfcnVubmluZyhzZWxmKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmdlbi5jcl9ydW5uaW5nCisKKyAgICAgICAgQHByb3BlcnR5CisgICAgICAgIGRlZiBjcl9jb2RlKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuZ2VuLmNyX2NvZGUKKworICAgICAgICBAcHJvcGVydHkKKyAgICAgICAgZGVmIGNyX2ZyYW1lKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuZ2VuLmNyX2ZyYW1lCisKKyAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgIyBCZSBjYXJlZnVsIGFjY2Vzc2luZyBzZWxmLmdlbi5mcmFtZSAtLSBzZWxmLmdlbiBtaWdodCBub3QgZXhpc3QuCisgICAgICAgIGdlbiA9IGdldGF0dHIoc2VsZiwgJ2dlbicsIE5vbmUpCisgICAgICAgIGZyYW1lID0gZ2V0YXR0cihnZW4sICdnaV9mcmFtZScsIE5vbmUpCisgICAgICAgIGlmIGZyYW1lIGlzIE5vbmU6CisgICAgICAgICAgICBmcmFtZSA9IGdldGF0dHIoZ2VuLCAnY3JfZnJhbWUnLCBOb25lKQorICAgICAgICBpZiBmcmFtZSBpcyBub3QgTm9uZSBhbmQgZnJhbWUuZl9sYXN0aSA9PSAtMToKKyAgICAgICAgICAgIG1zZyA9ICclciB3YXMgbmV2ZXIgeWllbGRlZCBmcm9tJyAlIHNlbGYKKyAgICAgICAgICAgIHRiID0gZ2V0YXR0cihzZWxmLCAnX3NvdXJjZV90cmFjZWJhY2snLCAoKSkKKyAgICAgICAgICAgIGlmIHRiOgorICAgICAgICAgICAgICAgIHRiID0gJycuam9pbih0cmFjZWJhY2suZm9ybWF0X2xpc3QodGIpKQorICAgICAgICAgICAgICAgIG1zZyArPSAoJ1xuQ29yb3V0aW5lIG9iamVjdCBjcmVhdGVkIGF0ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICcobW9zdCByZWNlbnQgY2FsbCBsYXN0KTpcbicpCisgICAgICAgICAgICAgICAgbXNnICs9IHRiLnJzdHJpcCgpCisgICAgICAgICAgICBsb2dnZXIuZXJyb3IobXNnKQorCisKK2RlZiBjb3JvdXRpbmUoZnVuYyk6CisgICAgIiIiRGVjb3JhdG9yIHRvIG1hcmsgY29yb3V0aW5lcy4KKworICAgIElmIHRoZSBjb3JvdXRpbmUgaXMgbm90IHlpZWxkZWQgZnJvbSBiZWZvcmUgaXQgaXMgZGVzdHJveWVkLAorICAgIGFuIGVycm9yIG1lc3NhZ2UgaXMgbG9nZ2VkLgorICAgICIiIgorICAgIGlmIF9pbnNwZWN0X2lzY29yb3V0aW5lZnVuY3Rpb24oZnVuYyk6CisgICAgICAgICMgSW4gUHl0aG9uIDMuNSB0aGF0J3MgYWxsIHdlIG5lZWQgdG8gZG8gZm9yIGNvcm91dGluZXMKKyAgICAgICAgIyBkZWZpZW5kIHdpdGggImFzeW5jIGRlZiIuCisgICAgICAgICMgV3JhcHBpbmcgaW4gQ29yb1dyYXBwZXIgd2lsbCBoYXBwZW4gdmlhCisgICAgICAgICMgJ3N5cy5zZXRfY29yb3V0aW5lX3dyYXBwZXInIGZ1bmN0aW9uLgorICAgICAgICByZXR1cm4gZnVuYworCisgICAgaWYgaW5zcGVjdC5pc2dlbmVyYXRvcmZ1bmN0aW9uKGZ1bmMpOgorICAgICAgICBjb3JvID0gZnVuYworICAgIGVsc2U6CisgICAgICAgIEBmdW5jdG9vbHMud3JhcHMoZnVuYykKKyAgICAgICAgZGVmIGNvcm8oKmFyZ3MsICoqa3cpOgorICAgICAgICAgICAgcmVzID0gZnVuYygqYXJncywgKiprdykKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UocmVzLCBmdXR1cmVzLkZ1dHVyZSkgb3IgaW5zcGVjdC5pc2dlbmVyYXRvcihyZXMpOgorICAgICAgICAgICAgICAgIHJlcyA9IHlpZWxkIGZyb20gcmVzCisgICAgICAgICAgICBlbGlmIF9Bd2FpdGFibGVBQkMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgIyBJZiAnZnVuYycgcmV0dXJucyBhbiBBd2FpdGFibGUgKG5ldyBpbiAzLjUpIHdlCisgICAgICAgICAgICAgICAgIyB3YW50IHRvIHJ1biBpdC4KKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGF3YWl0X21ldGggPSByZXMuX19hd2FpdF9fCisgICAgICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShyZXMsIF9Bd2FpdGFibGVBQkMpOgorICAgICAgICAgICAgICAgICAgICAgICAgcmVzID0geWllbGQgZnJvbSBhd2FpdF9tZXRoKCkKKyAgICAgICAgICAgIHJldHVybiByZXMKKworICAgIGlmIG5vdCBfREVCVUc6CisgICAgICAgIGlmIF90eXBlc19jb3JvdXRpbmUgaXMgTm9uZToKKyAgICAgICAgICAgIHdyYXBwZXIgPSBjb3JvCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB3cmFwcGVyID0gX3R5cGVzX2Nvcm91dGluZShjb3JvKQorICAgIGVsc2U6CisgICAgICAgIEBmdW5jdG9vbHMud3JhcHMoZnVuYykKKyAgICAgICAgZGVmIHdyYXBwZXIoKmFyZ3MsICoqa3dkcyk6CisgICAgICAgICAgICB3ID0gQ29yb1dyYXBwZXIoY29ybygqYXJncywgKiprd2RzKSwgZnVuYz1mdW5jKQorICAgICAgICAgICAgaWYgdy5fc291cmNlX3RyYWNlYmFjazoKKyAgICAgICAgICAgICAgICBkZWwgdy5fc291cmNlX3RyYWNlYmFja1stMV0KKyAgICAgICAgICAgICMgUHl0aG9uIDwgMy41IGRvZXMgbm90IGltcGxlbWVudCBfX3F1YWxuYW1lX18KKyAgICAgICAgICAgICMgb24gZ2VuZXJhdG9yIG9iamVjdHMsIHNvIHdlIHNldCBpdCBtYW51YWxseS4KKyAgICAgICAgICAgICMgV2UgdXNlIGdldGF0dHIgYXMgc29tZSBjYWxsYWJsZXMgKHN1Y2ggYXMKKyAgICAgICAgICAgICMgZnVuY3Rvb2xzLnBhcnRpYWwgbWF5IGxhY2sgX19xdWFsbmFtZV9fKS4KKyAgICAgICAgICAgIHcuX19uYW1lX18gPSBnZXRhdHRyKGZ1bmMsICdfX25hbWVfXycsIE5vbmUpCisgICAgICAgICAgICB3Ll9fcXVhbG5hbWVfXyA9IGdldGF0dHIoZnVuYywgJ19fcXVhbG5hbWVfXycsIE5vbmUpCisgICAgICAgICAgICByZXR1cm4gdworCisgICAgd3JhcHBlci5faXNfY29yb3V0aW5lID0gVHJ1ZSAgIyBGb3IgaXNjb3JvdXRpbmVmdW5jdGlvbigpLgorICAgIHJldHVybiB3cmFwcGVyCisKKworZGVmIGlzY29yb3V0aW5lZnVuY3Rpb24oZnVuYyk6CisgICAgIiIiUmV0dXJuIFRydWUgaWYgZnVuYyBpcyBhIGRlY29yYXRlZCBjb3JvdXRpbmUgZnVuY3Rpb24uIiIiCisgICAgcmV0dXJuIChnZXRhdHRyKGZ1bmMsICdfaXNfY29yb3V0aW5lJywgRmFsc2UpIG9yCisgICAgICAgICAgICBfaW5zcGVjdF9pc2Nvcm91dGluZWZ1bmN0aW9uKGZ1bmMpKQorCisKK19DT1JPVVRJTkVfVFlQRVMgPSAodHlwZXMuR2VuZXJhdG9yVHlwZSwgQ29yb1dyYXBwZXIpCitpZiBfQ29yb3V0aW5lQUJDIGlzIG5vdCBOb25lOgorICAgIF9DT1JPVVRJTkVfVFlQRVMgKz0gKF9Db3JvdXRpbmVBQkMsKQorCisKK2RlZiBpc2Nvcm91dGluZShvYmopOgorICAgICIiIlJldHVybiBUcnVlIGlmIG9iaiBpcyBhIGNvcm91dGluZSBvYmplY3QuIiIiCisgICAgcmV0dXJuIGlzaW5zdGFuY2Uob2JqLCBfQ09ST1VUSU5FX1RZUEVTKQorCisKK2RlZiBfZm9ybWF0X2Nvcm91dGluZShjb3JvKToKKyAgICBhc3NlcnQgaXNjb3JvdXRpbmUoY29ybykKKworICAgIGNvcm9fbmFtZSA9IE5vbmUKKyAgICBpZiBpc2luc3RhbmNlKGNvcm8sIENvcm9XcmFwcGVyKToKKyAgICAgICAgZnVuYyA9IGNvcm8uZnVuYworICAgICAgICBjb3JvX25hbWUgPSBjb3JvLl9fcXVhbG5hbWVfXworICAgICAgICBpZiBjb3JvX25hbWUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBjb3JvX25hbWUgPSAne30oKScuZm9ybWF0KGNvcm9fbmFtZSkKKyAgICBlbHNlOgorICAgICAgICBmdW5jID0gY29ybworCisgICAgaWYgY29yb19uYW1lIGlzIE5vbmU6CisgICAgICAgIGNvcm9fbmFtZSA9IGV2ZW50cy5fZm9ybWF0X2NhbGxiYWNrKGZ1bmMsICgpKQorCisgICAgdHJ5OgorICAgICAgICBjb3JvX2NvZGUgPSBjb3JvLmdpX2NvZGUKKyAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgIGNvcm9fY29kZSA9IGNvcm8uY3JfY29kZQorCisgICAgdHJ5OgorICAgICAgICBjb3JvX2ZyYW1lID0gY29yby5naV9mcmFtZQorICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgY29yb19mcmFtZSA9IGNvcm8uY3JfZnJhbWUKKworICAgIGZpbGVuYW1lID0gY29yb19jb2RlLmNvX2ZpbGVuYW1lCisgICAgaWYgKGlzaW5zdGFuY2UoY29ybywgQ29yb1dyYXBwZXIpCisgICAgYW5kIG5vdCBpbnNwZWN0LmlzZ2VuZXJhdG9yZnVuY3Rpb24oY29yby5mdW5jKQorICAgIGFuZCBjb3JvLmZ1bmMgaXMgbm90IE5vbmUpOgorICAgICAgICBmaWxlbmFtZSwgbGluZW5vID0gZXZlbnRzLl9nZXRfZnVuY3Rpb25fc291cmNlKGNvcm8uZnVuYykKKyAgICAgICAgaWYgY29yb19mcmFtZSBpcyBOb25lOgorICAgICAgICAgICAgY29yb19yZXByID0gKCclcyBkb25lLCBkZWZpbmVkIGF0ICVzOiVzJworICAgICAgICAgICAgICAgICAgICAgICAgICUgKGNvcm9fbmFtZSwgZmlsZW5hbWUsIGxpbmVubykpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjb3JvX3JlcHIgPSAoJyVzIHJ1bm5pbmcsIGRlZmluZWQgYXQgJXM6JXMnCisgICAgICAgICAgICAgICAgICAgICAgICAgJSAoY29yb19uYW1lLCBmaWxlbmFtZSwgbGluZW5vKSkKKyAgICBlbGlmIGNvcm9fZnJhbWUgaXMgbm90IE5vbmU6CisgICAgICAgIGxpbmVubyA9IGNvcm9fZnJhbWUuZl9saW5lbm8KKyAgICAgICAgY29yb19yZXByID0gKCclcyBydW5uaW5nIGF0ICVzOiVzJworICAgICAgICAgICAgICAgICAgICAgJSAoY29yb19uYW1lLCBmaWxlbmFtZSwgbGluZW5vKSkKKyAgICBlbHNlOgorICAgICAgICBsaW5lbm8gPSBjb3JvX2NvZGUuY29fZmlyc3RsaW5lbm8KKyAgICAgICAgY29yb19yZXByID0gKCclcyBkb25lLCBkZWZpbmVkIGF0ICVzOiVzJworICAgICAgICAgICAgICAgICAgICAgJSAoY29yb19uYW1lLCBmaWxlbmFtZSwgbGluZW5vKSkKKworICAgIHJldHVybiBjb3JvX3JlcHIKZGlmZiAtLWdpdCBhL0xpYi9hc3luY2lvL2V2ZW50cy5weSBiL0xpYi9hc3luY2lvL2V2ZW50cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzZhODQ2Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL2FzeW5jaW8vZXZlbnRzLnB5CkBAIC0wLDAgKzEsNjQ3IEBACisiIiJFdmVudCBsb29wIGFuZCBldmVudCBsb29wIHBvbGljeS4iIiIKKworX19hbGxfXyA9IFsnQWJzdHJhY3RFdmVudExvb3BQb2xpY3knLAorICAgICAgICAgICAnQWJzdHJhY3RFdmVudExvb3AnLCAnQWJzdHJhY3RTZXJ2ZXInLAorICAgICAgICAgICAnSGFuZGxlJywgJ1RpbWVySGFuZGxlJywKKyAgICAgICAgICAgJ2dldF9ldmVudF9sb29wX3BvbGljeScsICdzZXRfZXZlbnRfbG9vcF9wb2xpY3knLAorICAgICAgICAgICAnZ2V0X2V2ZW50X2xvb3AnLCAnc2V0X2V2ZW50X2xvb3AnLCAnbmV3X2V2ZW50X2xvb3AnLAorICAgICAgICAgICAnZ2V0X2NoaWxkX3dhdGNoZXInLCAnc2V0X2NoaWxkX3dhdGNoZXInLAorICAgICAgICAgICBdCisKK2ltcG9ydCBmdW5jdG9vbHMKK2ltcG9ydCBpbnNwZWN0CitpbXBvcnQgcmVwcmxpYgoraW1wb3J0IHNvY2tldAoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB0aHJlYWRpbmcKK2ltcG9ydCB0cmFjZWJhY2sKKworZnJvbSBhc3luY2lvIGltcG9ydCBjb21wYXQKKworCitkZWYgX2dldF9mdW5jdGlvbl9zb3VyY2UoZnVuYyk6CisgICAgaWYgY29tcGF0LlBZMzQ6CisgICAgICAgIGZ1bmMgPSBpbnNwZWN0LnVud3JhcChmdW5jKQorICAgIGVsaWYgaGFzYXR0cihmdW5jLCAnX193cmFwcGVkX18nKToKKyAgICAgICAgZnVuYyA9IGZ1bmMuX193cmFwcGVkX18KKyAgICBpZiBpbnNwZWN0LmlzZnVuY3Rpb24oZnVuYyk6CisgICAgICAgIGNvZGUgPSBmdW5jLl9fY29kZV9fCisgICAgICAgIHJldHVybiAoY29kZS5jb19maWxlbmFtZSwgY29kZS5jb19maXJzdGxpbmVubykKKyAgICBpZiBpc2luc3RhbmNlKGZ1bmMsIGZ1bmN0b29scy5wYXJ0aWFsKToKKyAgICAgICAgcmV0dXJuIF9nZXRfZnVuY3Rpb25fc291cmNlKGZ1bmMuZnVuYykKKyAgICBpZiBjb21wYXQuUFkzNCBhbmQgaXNpbnN0YW5jZShmdW5jLCBmdW5jdG9vbHMucGFydGlhbG1ldGhvZCk6CisgICAgICAgIHJldHVybiBfZ2V0X2Z1bmN0aW9uX3NvdXJjZShmdW5jLmZ1bmMpCisgICAgcmV0dXJuIE5vbmUKKworCitkZWYgX2Zvcm1hdF9hcmdzKGFyZ3MpOgorICAgICIiIkZvcm1hdCBmdW5jdGlvbiBhcmd1bWVudHMuCisKKyAgICBTcGVjaWFsIGNhc2UgZm9yIGEgc2luZ2xlIHBhcmFtZXRlcjogKCdoZWxsbycsKSBpcyBmb3JtYXR0ZWQgYXMgKCdoZWxsbycpLgorICAgICIiIgorICAgICMgdXNlIHJlcHJsaWIgdG8gbGltaXQgdGhlIGxlbmd0aCBvZiB0aGUgb3V0cHV0CisgICAgYXJnc19yZXByID0gcmVwcmxpYi5yZXByKGFyZ3MpCisgICAgaWYgbGVuKGFyZ3MpID09IDEgYW5kIGFyZ3NfcmVwci5lbmRzd2l0aCgnLCknKToKKyAgICAgICAgYXJnc19yZXByID0gYXJnc19yZXByWzotMl0gKyAnKScKKyAgICByZXR1cm4gYXJnc19yZXByCisKKworZGVmIF9mb3JtYXRfY2FsbGJhY2soZnVuYywgYXJncywgc3VmZml4PScnKToKKyAgICBpZiBpc2luc3RhbmNlKGZ1bmMsIGZ1bmN0b29scy5wYXJ0aWFsKToKKyAgICAgICAgaWYgYXJncyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHN1ZmZpeCA9IF9mb3JtYXRfYXJncyhhcmdzKSArIHN1ZmZpeAorICAgICAgICByZXR1cm4gX2Zvcm1hdF9jYWxsYmFjayhmdW5jLmZ1bmMsIGZ1bmMuYXJncywgc3VmZml4KQorCisgICAgaWYgaGFzYXR0cihmdW5jLCAnX19xdWFsbmFtZV9fJyk6CisgICAgICAgIGZ1bmNfcmVwciA9IGdldGF0dHIoZnVuYywgJ19fcXVhbG5hbWVfXycpCisgICAgZWxpZiBoYXNhdHRyKGZ1bmMsICdfX25hbWVfXycpOgorICAgICAgICBmdW5jX3JlcHIgPSBnZXRhdHRyKGZ1bmMsICdfX25hbWVfXycpCisgICAgZWxzZToKKyAgICAgICAgZnVuY19yZXByID0gcmVwcihmdW5jKQorCisgICAgaWYgYXJncyBpcyBub3QgTm9uZToKKyAgICAgICAgZnVuY19yZXByICs9IF9mb3JtYXRfYXJncyhhcmdzKQorICAgIGlmIHN1ZmZpeDoKKyAgICAgICAgZnVuY19yZXByICs9IHN1ZmZpeAorICAgIHJldHVybiBmdW5jX3JlcHIKKworZGVmIF9mb3JtYXRfY2FsbGJhY2tfc291cmNlKGZ1bmMsIGFyZ3MpOgorICAgIGZ1bmNfcmVwciA9IF9mb3JtYXRfY2FsbGJhY2soZnVuYywgYXJncykKKyAgICBzb3VyY2UgPSBfZ2V0X2Z1bmN0aW9uX3NvdXJjZShmdW5jKQorICAgIGlmIHNvdXJjZToKKyAgICAgICAgZnVuY19yZXByICs9ICcgYXQgJXM6JXMnICUgc291cmNlCisgICAgcmV0dXJuIGZ1bmNfcmVwcgorCisKK2NsYXNzIEhhbmRsZToKKyAgICAiIiJPYmplY3QgcmV0dXJuZWQgYnkgY2FsbGJhY2sgcmVnaXN0cmF0aW9uIG1ldGhvZHMuIiIiCisKKyAgICBfX3Nsb3RzX18gPSAoJ19jYWxsYmFjaycsICdfYXJncycsICdfY2FuY2VsbGVkJywgJ19sb29wJywKKyAgICAgICAgICAgICAgICAgJ19zb3VyY2VfdHJhY2ViYWNrJywgJ19yZXByJywgJ19fd2Vha3JlZl9fJykKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjYWxsYmFjaywgYXJncywgbG9vcCk6CisgICAgICAgIGFzc2VydCBub3QgaXNpbnN0YW5jZShjYWxsYmFjaywgSGFuZGxlKSwgJ0EgSGFuZGxlIGlzIG5vdCBhIGNhbGxiYWNrJworICAgICAgICBzZWxmLl9sb29wID0gbG9vcAorICAgICAgICBzZWxmLl9jYWxsYmFjayA9IGNhbGxiYWNrCisgICAgICAgIHNlbGYuX2FyZ3MgPSBhcmdzCisgICAgICAgIHNlbGYuX2NhbmNlbGxlZCA9IEZhbHNlCisgICAgICAgIHNlbGYuX3JlcHIgPSBOb25lCisgICAgICAgIGlmIHNlbGYuX2xvb3AuZ2V0X2RlYnVnKCk6CisgICAgICAgICAgICBzZWxmLl9zb3VyY2VfdHJhY2ViYWNrID0gdHJhY2ViYWNrLmV4dHJhY3Rfc3RhY2soc3lzLl9nZXRmcmFtZSgxKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX3NvdXJjZV90cmFjZWJhY2sgPSBOb25lCisKKyAgICBkZWYgX3JlcHJfaW5mbyhzZWxmKToKKyAgICAgICAgaW5mbyA9IFtzZWxmLl9fY2xhc3NfXy5fX25hbWVfX10KKyAgICAgICAgaWYgc2VsZi5fY2FuY2VsbGVkOgorICAgICAgICAgICAgaW5mby5hcHBlbmQoJ2NhbmNlbGxlZCcpCisgICAgICAgIGlmIHNlbGYuX2NhbGxiYWNrIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgaW5mby5hcHBlbmQoX2Zvcm1hdF9jYWxsYmFja19zb3VyY2Uoc2VsZi5fY2FsbGJhY2ssIHNlbGYuX2FyZ3MpKQorICAgICAgICBpZiBzZWxmLl9zb3VyY2VfdHJhY2ViYWNrOgorICAgICAgICAgICAgZnJhbWUgPSBzZWxmLl9zb3VyY2VfdHJhY2ViYWNrWy0xXQorICAgICAgICAgICAgaW5mby5hcHBlbmQoJ2NyZWF0ZWQgYXQgJXM6JXMnICUgKGZyYW1lWzBdLCBmcmFtZVsxXSkpCisgICAgICAgIHJldHVybiBpbmZvCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIGlmIHNlbGYuX3JlcHIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fcmVwcgorICAgICAgICBpbmZvID0gc2VsZi5fcmVwcl9pbmZvKCkKKyAgICAgICAgcmV0dXJuICc8JXM+JyAlICcgJy5qb2luKGluZm8pCisKKyAgICBkZWYgY2FuY2VsKHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5fY2FuY2VsbGVkOgorICAgICAgICAgICAgc2VsZi5fY2FuY2VsbGVkID0gVHJ1ZQorICAgICAgICAgICAgaWYgc2VsZi5fbG9vcC5nZXRfZGVidWcoKToKKyAgICAgICAgICAgICAgICAjIEtlZXAgYSByZXByZXNlbnRhdGlvbiBpbiBkZWJ1ZyBtb2RlIHRvIGtlZXAgY2FsbGJhY2sgYW5kCisgICAgICAgICAgICAgICAgIyBwYXJhbWV0ZXJzLiBGb3IgZXhhbXBsZSwgdG8gbG9nIHRoZSB3YXJuaW5nCisgICAgICAgICAgICAgICAgIyAiRXhlY3V0aW5nIDxIYW5kbGUuLi4+IHRvb2sgMi41IHNlY29uZCIKKyAgICAgICAgICAgICAgICBzZWxmLl9yZXByID0gcmVwcihzZWxmKQorICAgICAgICAgICAgc2VsZi5fY2FsbGJhY2sgPSBOb25lCisgICAgICAgICAgICBzZWxmLl9hcmdzID0gTm9uZQorCisgICAgZGVmIF9ydW4oc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX2NhbGxiYWNrKCpzZWxmLl9hcmdzKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgIGNiID0gX2Zvcm1hdF9jYWxsYmFja19zb3VyY2Uoc2VsZi5fY2FsbGJhY2ssIHNlbGYuX2FyZ3MpCisgICAgICAgICAgICBtc2cgPSAnRXhjZXB0aW9uIGluIGNhbGxiYWNrIHt9Jy5mb3JtYXQoY2IpCisgICAgICAgICAgICBjb250ZXh0ID0geworICAgICAgICAgICAgICAgICdtZXNzYWdlJzogbXNnLAorICAgICAgICAgICAgICAgICdleGNlcHRpb24nOiBleGMsCisgICAgICAgICAgICAgICAgJ2hhbmRsZSc6IHNlbGYsCisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiBzZWxmLl9zb3VyY2VfdHJhY2ViYWNrOgorICAgICAgICAgICAgICAgIGNvbnRleHRbJ3NvdXJjZV90cmFjZWJhY2snXSA9IHNlbGYuX3NvdXJjZV90cmFjZWJhY2sKKyAgICAgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9leGNlcHRpb25faGFuZGxlcihjb250ZXh0KQorICAgICAgICBzZWxmID0gTm9uZSAgIyBOZWVkZWQgdG8gYnJlYWsgY3ljbGVzIHdoZW4gYW4gZXhjZXB0aW9uIG9jY3Vycy4KKworCitjbGFzcyBUaW1lckhhbmRsZShIYW5kbGUpOgorICAgICIiIk9iamVjdCByZXR1cm5lZCBieSB0aW1lZCBjYWxsYmFjayByZWdpc3RyYXRpb24gbWV0aG9kcy4iIiIKKworICAgIF9fc2xvdHNfXyA9IFsnX3NjaGVkdWxlZCcsICdfd2hlbiddCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgd2hlbiwgY2FsbGJhY2ssIGFyZ3MsIGxvb3ApOgorICAgICAgICBhc3NlcnQgd2hlbiBpcyBub3QgTm9uZQorICAgICAgICBzdXBlcigpLl9faW5pdF9fKGNhbGxiYWNrLCBhcmdzLCBsb29wKQorICAgICAgICBpZiBzZWxmLl9zb3VyY2VfdHJhY2ViYWNrOgorICAgICAgICAgICAgZGVsIHNlbGYuX3NvdXJjZV90cmFjZWJhY2tbLTFdCisgICAgICAgIHNlbGYuX3doZW4gPSB3aGVuCisgICAgICAgIHNlbGYuX3NjaGVkdWxlZCA9IEZhbHNlCisKKyAgICBkZWYgX3JlcHJfaW5mbyhzZWxmKToKKyAgICAgICAgaW5mbyA9IHN1cGVyKCkuX3JlcHJfaW5mbygpCisgICAgICAgIHBvcyA9IDIgaWYgc2VsZi5fY2FuY2VsbGVkIGVsc2UgMQorICAgICAgICBpbmZvLmluc2VydChwb3MsICd3aGVuPSVzJyAlIHNlbGYuX3doZW4pCisgICAgICAgIHJldHVybiBpbmZvCisKKyAgICBkZWYgX19oYXNoX18oc2VsZik6CisgICAgICAgIHJldHVybiBoYXNoKHNlbGYuX3doZW4pCisKKyAgICBkZWYgX19sdF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3doZW4gPCBvdGhlci5fd2hlbgorCisgICAgZGVmIF9fbGVfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIHNlbGYuX3doZW4gPCBvdGhlci5fd2hlbjoKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBzZWxmLl9fZXFfXyhvdGhlcikKKworICAgIGRlZiBfX2d0X18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gc2VsZi5fd2hlbiA+IG90aGVyLl93aGVuCisKKyAgICBkZWYgX19nZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgc2VsZi5fd2hlbiA+IG90aGVyLl93aGVuOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIHNlbGYuX19lcV9fKG90aGVyKQorCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIFRpbWVySGFuZGxlKToKKyAgICAgICAgICAgIHJldHVybiAoc2VsZi5fd2hlbiA9PSBvdGhlci5fd2hlbiBhbmQKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fY2FsbGJhY2sgPT0gb3RoZXIuX2NhbGxiYWNrIGFuZAorICAgICAgICAgICAgICAgICAgICBzZWxmLl9hcmdzID09IG90aGVyLl9hcmdzIGFuZAorICAgICAgICAgICAgICAgICAgICBzZWxmLl9jYW5jZWxsZWQgPT0gb3RoZXIuX2NhbmNlbGxlZCkKKyAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisKKyAgICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgZXF1YWwgPSBzZWxmLl9fZXFfXyhvdGhlcikKKyAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkIGlmIGVxdWFsIGlzIE5vdEltcGxlbWVudGVkIGVsc2Ugbm90IGVxdWFsCisKKyAgICBkZWYgY2FuY2VsKHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5fY2FuY2VsbGVkOgorICAgICAgICAgICAgc2VsZi5fbG9vcC5fdGltZXJfaGFuZGxlX2NhbmNlbGxlZChzZWxmKQorICAgICAgICBzdXBlcigpLmNhbmNlbCgpCisKKworY2xhc3MgQWJzdHJhY3RTZXJ2ZXI6CisgICAgIiIiQWJzdHJhY3Qgc2VydmVyIHJldHVybmVkIGJ5IGNyZWF0ZV9zZXJ2ZXIoKS4iIiIKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgIiIiU3RvcCBzZXJ2aW5nLiAgVGhpcyBsZWF2ZXMgZXhpc3RpbmcgY29ubmVjdGlvbnMgb3Blbi4iIiIKKyAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisKKyAgICBkZWYgd2FpdF9jbG9zZWQoc2VsZik6CisgICAgICAgICIiIkNvcm91dGluZSB0byB3YWl0IHVudGlsIHNlcnZpY2UgaXMgY2xvc2VkLiIiIgorICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKworCitjbGFzcyBBYnN0cmFjdEV2ZW50TG9vcDoKKyAgICAiIiJBYnN0cmFjdCBldmVudCBsb29wLiIiIgorCisgICAgIyBSdW5uaW5nIGFuZCBzdG9wcGluZyB0aGUgZXZlbnQgbG9vcC4KKworICAgIGRlZiBydW5fZm9yZXZlcihzZWxmKToKKyAgICAgICAgIiIiUnVuIHRoZSBldmVudCBsb29wIHVudGlsIHN0b3AoKSBpcyBjYWxsZWQuIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBydW5fdW50aWxfY29tcGxldGUoc2VsZiwgZnV0dXJlKToKKyAgICAgICAgIiIiUnVuIHRoZSBldmVudCBsb29wIHVudGlsIGEgRnV0dXJlIGlzIGRvbmUuCisKKyAgICAgICAgUmV0dXJuIHRoZSBGdXR1cmUncyByZXN1bHQsIG9yIHJhaXNlIGl0cyBleGNlcHRpb24uCisgICAgICAgICIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgc3RvcChzZWxmKToKKyAgICAgICAgIiIiU3RvcCB0aGUgZXZlbnQgbG9vcCBhcyBzb29uIGFzIHJlYXNvbmFibGUuCisKKyAgICAgICAgRXhhY3RseSBob3cgc29vbiB0aGF0IGlzIG1heSBkZXBlbmQgb24gdGhlIGltcGxlbWVudGF0aW9uLCBidXQKKyAgICAgICAgbm8gbW9yZSBJL08gY2FsbGJhY2tzIHNob3VsZCBiZSBzY2hlZHVsZWQuCisgICAgICAgICIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgaXNfcnVubmluZyhzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIHdoZXRoZXIgdGhlIGV2ZW50IGxvb3AgaXMgY3VycmVudGx5IHJ1bm5pbmcuIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBpc19jbG9zZWQoc2VsZik6CisgICAgICAgICIiIlJldHVybnMgVHJ1ZSBpZiB0aGUgZXZlbnQgbG9vcCB3YXMgY2xvc2VkLiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgICIiIkNsb3NlIHRoZSBsb29wLgorCisgICAgICAgIFRoZSBsb29wIHNob3VsZCBub3QgYmUgcnVubmluZy4KKworICAgICAgICBUaGlzIGlzIGlkZW1wb3RlbnQgYW5kIGlycmV2ZXJzaWJsZS4KKworICAgICAgICBObyBvdGhlciBtZXRob2RzIHNob3VsZCBiZSBjYWxsZWQgYWZ0ZXIgdGhpcyBvbmUuCisgICAgICAgICIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICAjIE1ldGhvZHMgc2NoZWR1bGluZyBjYWxsYmFja3MuICBBbGwgdGhlc2UgcmV0dXJuIEhhbmRsZXMuCisKKyAgICBkZWYgX3RpbWVyX2hhbmRsZV9jYW5jZWxsZWQoc2VsZiwgaGFuZGxlKToKKyAgICAgICAgIiIiTm90aWZpY2F0aW9uIHRoYXQgYSBUaW1lckhhbmRsZSBoYXMgYmVlbiBjYW5jZWxsZWQuIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBjYWxsX3Nvb24oc2VsZiwgY2FsbGJhY2ssICphcmdzKToKKyAgICAgICAgcmV0dXJuIHNlbGYuY2FsbF9sYXRlcigwLCBjYWxsYmFjaywgKmFyZ3MpCisKKyAgICBkZWYgY2FsbF9sYXRlcihzZWxmLCBkZWxheSwgY2FsbGJhY2ssICphcmdzKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIGNhbGxfYXQoc2VsZiwgd2hlbiwgY2FsbGJhY2ssICphcmdzKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIHRpbWUoc2VsZik6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgICMgTWV0aG9kIHNjaGVkdWxpbmcgYSBjb3JvdXRpbmUgb2JqZWN0OiBjcmVhdGUgYSB0YXNrLgorCisgICAgZGVmIGNyZWF0ZV90YXNrKHNlbGYsIGNvcm8pOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICAjIE1ldGhvZHMgZm9yIGludGVyYWN0aW5nIHdpdGggdGhyZWFkcy4KKworICAgIGRlZiBjYWxsX3Nvb25fdGhyZWFkc2FmZShzZWxmLCBjYWxsYmFjaywgKmFyZ3MpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgcnVuX2luX2V4ZWN1dG9yKHNlbGYsIGV4ZWN1dG9yLCBmdW5jLCAqYXJncyk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBzZXRfZGVmYXVsdF9leGVjdXRvcihzZWxmLCBleGVjdXRvcik6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgICMgTmV0d29yayBJL08gbWV0aG9kcyByZXR1cm5pbmcgRnV0dXJlcy4KKworICAgIGRlZiBnZXRhZGRyaW5mbyhzZWxmLCBob3N0LCBwb3J0LCAqLCBmYW1pbHk9MCwgdHlwZT0wLCBwcm90bz0wLCBmbGFncz0wKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIGdldG5hbWVpbmZvKHNlbGYsIHNvY2thZGRyLCBmbGFncz0wKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIGNyZWF0ZV9jb25uZWN0aW9uKHNlbGYsIHByb3RvY29sX2ZhY3RvcnksIGhvc3Q9Tm9uZSwgcG9ydD1Ob25lLCAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzc2w9Tm9uZSwgZmFtaWx5PTAsIHByb3RvPTAsIGZsYWdzPTAsIHNvY2s9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxfYWRkcj1Ob25lLCBzZXJ2ZXJfaG9zdG5hbWU9Tm9uZSk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBjcmVhdGVfc2VydmVyKHNlbGYsIHByb3RvY29sX2ZhY3RvcnksIGhvc3Q9Tm9uZSwgcG9ydD1Ob25lLCAqLAorICAgICAgICAgICAgICAgICAgICAgIGZhbWlseT1zb2NrZXQuQUZfVU5TUEVDLCBmbGFncz1zb2NrZXQuQUlfUEFTU0lWRSwKKyAgICAgICAgICAgICAgICAgICAgICBzb2NrPU5vbmUsIGJhY2tsb2c9MTAwLCBzc2w9Tm9uZSwgcmV1c2VfYWRkcmVzcz1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgIHJldXNlX3BvcnQ9Tm9uZSk6CisgICAgICAgICIiIkEgY29yb3V0aW5lIHdoaWNoIGNyZWF0ZXMgYSBUQ1Agc2VydmVyIGJvdW5kIHRvIGhvc3QgYW5kIHBvcnQuCisKKyAgICAgICAgVGhlIHJldHVybiB2YWx1ZSBpcyBhIFNlcnZlciBvYmplY3Qgd2hpY2ggY2FuIGJlIHVzZWQgdG8gc3RvcAorICAgICAgICB0aGUgc2VydmljZS4KKworICAgICAgICBJZiBob3N0IGlzIGFuIGVtcHR5IHN0cmluZyBvciBOb25lIGFsbCBpbnRlcmZhY2VzIGFyZSBhc3N1bWVkCisgICAgICAgIGFuZCBhIGxpc3Qgb2YgbXVsdGlwbGUgc29ja2V0cyB3aWxsIGJlIHJldHVybmVkIChtb3N0IGxpa2VseQorICAgICAgICBvbmUgZm9yIElQdjQgYW5kIGFub3RoZXIgb25lIGZvciBJUHY2KS4gVGhlIGhvc3QgcGFyYW1ldGVyIGNhbiBhbHNvIGJlIGEKKyAgICAgICAgc2VxdWVuY2UgKGUuZy4gbGlzdCkgb2YgaG9zdHMgdG8gYmluZCB0by4KKworICAgICAgICBmYW1pbHkgY2FuIGJlIHNldCB0byBlaXRoZXIgQUZfSU5FVCBvciBBRl9JTkVUNiB0byBmb3JjZSB0aGUKKyAgICAgICAgc29ja2V0IHRvIHVzZSBJUHY0IG9yIElQdjYuIElmIG5vdCBzZXQgaXQgd2lsbCBiZSBkZXRlcm1pbmVkCisgICAgICAgIGZyb20gaG9zdCAoZGVmYXVsdHMgdG8gQUZfVU5TUEVDKS4KKworICAgICAgICBmbGFncyBpcyBhIGJpdG1hc2sgZm9yIGdldGFkZHJpbmZvKCkuCisKKyAgICAgICAgc29jayBjYW4gb3B0aW9uYWxseSBiZSBzcGVjaWZpZWQgaW4gb3JkZXIgdG8gdXNlIGEgcHJlZXhpc3RpbmcKKyAgICAgICAgc29ja2V0IG9iamVjdC4KKworICAgICAgICBiYWNrbG9nIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBxdWV1ZWQgY29ubmVjdGlvbnMgcGFzc2VkIHRvCisgICAgICAgIGxpc3RlbigpIChkZWZhdWx0cyB0byAxMDApLgorCisgICAgICAgIHNzbCBjYW4gYmUgc2V0IHRvIGFuIFNTTENvbnRleHQgdG8gZW5hYmxlIFNTTCBvdmVyIHRoZQorICAgICAgICBhY2NlcHRlZCBjb25uZWN0aW9ucy4KKworICAgICAgICByZXVzZV9hZGRyZXNzIHRlbGxzIHRoZSBrZXJuZWwgdG8gcmV1c2UgYSBsb2NhbCBzb2NrZXQgaW4KKyAgICAgICAgVElNRV9XQUlUIHN0YXRlLCB3aXRob3V0IHdhaXRpbmcgZm9yIGl0cyBuYXR1cmFsIHRpbWVvdXQgdG8KKyAgICAgICAgZXhwaXJlLiBJZiBub3Qgc3BlY2lmaWVkIHdpbGwgYXV0b21hdGljYWxseSBiZSBzZXQgdG8gVHJ1ZSBvbgorICAgICAgICBVTklYLgorCisgICAgICAgIHJldXNlX3BvcnQgdGVsbHMgdGhlIGtlcm5lbCB0byBhbGxvdyB0aGlzIGVuZHBvaW50IHRvIGJlIGJvdW5kIHRvCisgICAgICAgIHRoZSBzYW1lIHBvcnQgYXMgb3RoZXIgZXhpc3RpbmcgZW5kcG9pbnRzIGFyZSBib3VuZCB0bywgc28gbG9uZyBhcworICAgICAgICB0aGV5IGFsbCBzZXQgdGhpcyBmbGFnIHdoZW4gYmVpbmcgY3JlYXRlZC4gVGhpcyBvcHRpb24gaXMgbm90CisgICAgICAgIHN1cHBvcnRlZCBvbiBXaW5kb3dzLgorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIGNyZWF0ZV91bml4X2Nvbm5lY3Rpb24oc2VsZiwgcHJvdG9jb2xfZmFjdG9yeSwgcGF0aCwgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2w9Tm9uZSwgc29jaz1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9ob3N0bmFtZT1Ob25lKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIGNyZWF0ZV91bml4X3NlcnZlcihzZWxmLCBwcm90b2NvbF9mYWN0b3J5LCBwYXRoLCAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc29jaz1Ob25lLCBiYWNrbG9nPTEwMCwgc3NsPU5vbmUpOgorICAgICAgICAiIiJBIGNvcm91dGluZSB3aGljaCBjcmVhdGVzIGEgVU5JWCBEb21haW4gU29ja2V0IHNlcnZlci4KKworICAgICAgICBUaGUgcmV0dXJuIHZhbHVlIGlzIGEgU2VydmVyIG9iamVjdCwgd2hpY2ggY2FuIGJlIHVzZWQgdG8gc3RvcAorICAgICAgICB0aGUgc2VydmljZS4KKworICAgICAgICBwYXRoIGlzIGEgc3RyLCByZXByZXNlbnRpbmcgYSBmaWxlIHN5c3RzZW0gcGF0aCB0byBiaW5kIHRoZQorICAgICAgICBzZXJ2ZXIgc29ja2V0IHRvLgorCisgICAgICAgIHNvY2sgY2FuIG9wdGlvbmFsbHkgYmUgc3BlY2lmaWVkIGluIG9yZGVyIHRvIHVzZSBhIHByZWV4aXN0aW5nCisgICAgICAgIHNvY2tldCBvYmplY3QuCisKKyAgICAgICAgYmFja2xvZyBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgcXVldWVkIGNvbm5lY3Rpb25zIHBhc3NlZCB0bworICAgICAgICBsaXN0ZW4oKSAoZGVmYXVsdHMgdG8gMTAwKS4KKworICAgICAgICBzc2wgY2FuIGJlIHNldCB0byBhbiBTU0xDb250ZXh0IHRvIGVuYWJsZSBTU0wgb3ZlciB0aGUKKyAgICAgICAgYWNjZXB0ZWQgY29ubmVjdGlvbnMuCisgICAgICAgICIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgY3JlYXRlX2RhdGFncmFtX2VuZHBvaW50KHNlbGYsIHByb3RvY29sX2ZhY3RvcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbF9hZGRyPU5vbmUsIHJlbW90ZV9hZGRyPU5vbmUsICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYW1pbHk9MCwgcHJvdG89MCwgZmxhZ3M9MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldXNlX2FkZHJlc3M9Tm9uZSwgcmV1c2VfcG9ydD1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dfYnJvYWRjYXN0PU5vbmUsIHNvY2s9Tm9uZSk6CisgICAgICAgICIiIkEgY29yb3V0aW5lIHdoaWNoIGNyZWF0ZXMgYSBkYXRhZ3JhbSBlbmRwb2ludC4KKworICAgICAgICBUaGlzIG1ldGhvZCB3aWxsIHRyeSB0byBlc3RhYmxpc2ggdGhlIGVuZHBvaW50IGluIHRoZSBiYWNrZ3JvdW5kLgorICAgICAgICBXaGVuIHN1Y2Nlc3NmdWwsIHRoZSBjb3JvdXRpbmUgcmV0dXJucyBhICh0cmFuc3BvcnQsIHByb3RvY29sKSBwYWlyLgorCisgICAgICAgIHByb3RvY29sX2ZhY3RvcnkgbXVzdCBiZSBhIGNhbGxhYmxlIHJldHVybmluZyBhIHByb3RvY29sIGluc3RhbmNlLgorCisgICAgICAgIHNvY2tldCBmYW1pbHkgQUZfSU5FVCBvciBzb2NrZXQuQUZfSU5FVDYgZGVwZW5kaW5nIG9uIGhvc3QgKG9yCisgICAgICAgIGZhbWlseSBpZiBzcGVjaWZpZWQpLCBzb2NrZXQgdHlwZSBTT0NLX0RHUkFNLgorCisgICAgICAgIHJldXNlX2FkZHJlc3MgdGVsbHMgdGhlIGtlcm5lbCB0byByZXVzZSBhIGxvY2FsIHNvY2tldCBpbgorICAgICAgICBUSU1FX1dBSVQgc3RhdGUsIHdpdGhvdXQgd2FpdGluZyBmb3IgaXRzIG5hdHVyYWwgdGltZW91dCB0bworICAgICAgICBleHBpcmUuIElmIG5vdCBzcGVjaWZpZWQgaXQgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIHNldCB0byBUcnVlIG9uCisgICAgICAgIFVOSVguCisKKyAgICAgICAgcmV1c2VfcG9ydCB0ZWxscyB0aGUga2VybmVsIHRvIGFsbG93IHRoaXMgZW5kcG9pbnQgdG8gYmUgYm91bmQgdG8KKyAgICAgICAgdGhlIHNhbWUgcG9ydCBhcyBvdGhlciBleGlzdGluZyBlbmRwb2ludHMgYXJlIGJvdW5kIHRvLCBzbyBsb25nIGFzCisgICAgICAgIHRoZXkgYWxsIHNldCB0aGlzIGZsYWcgd2hlbiBiZWluZyBjcmVhdGVkLiBUaGlzIG9wdGlvbiBpcyBub3QKKyAgICAgICAgc3VwcG9ydGVkIG9uIFdpbmRvd3MgYW5kIHNvbWUgVU5JWCdzLiBJZiB0aGUKKyAgICAgICAgOnB5OmRhdGE6YH5zb2NrZXQuU09fUkVVU0VQT1JUYCBjb25zdGFudCBpcyBub3QgZGVmaW5lZCB0aGVuIHRoaXMKKyAgICAgICAgY2FwYWJpbGl0eSBpcyB1bnN1cHBvcnRlZC4KKworICAgICAgICBhbGxvd19icm9hZGNhc3QgdGVsbHMgdGhlIGtlcm5lbCB0byBhbGxvdyB0aGlzIGVuZHBvaW50IHRvIHNlbmQKKyAgICAgICAgbWVzc2FnZXMgdG8gdGhlIGJyb2FkY2FzdCBhZGRyZXNzLgorCisgICAgICAgIHNvY2sgY2FuIG9wdGlvbmFsbHkgYmUgc3BlY2lmaWVkIGluIG9yZGVyIHRvIHVzZSBhIHByZWV4aXN0aW5nCisgICAgICAgIHNvY2tldCBvYmplY3QuCisgICAgICAgICIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICAjIFBpcGVzIGFuZCBzdWJwcm9jZXNzZXMuCisKKyAgICBkZWYgY29ubmVjdF9yZWFkX3BpcGUoc2VsZiwgcHJvdG9jb2xfZmFjdG9yeSwgcGlwZSk6CisgICAgICAgICIiIlJlZ2lzdGVyIHJlYWQgcGlwZSBpbiBldmVudCBsb29wLiBTZXQgdGhlIHBpcGUgdG8gbm9uLWJsb2NraW5nIG1vZGUuCisKKyAgICAgICAgcHJvdG9jb2xfZmFjdG9yeSBzaG91bGQgaW5zdGFudGlhdGUgb2JqZWN0IHdpdGggUHJvdG9jb2wgaW50ZXJmYWNlLgorICAgICAgICBwaXBlIGlzIGEgZmlsZS1saWtlIG9iamVjdC4KKyAgICAgICAgUmV0dXJuIHBhaXIgKHRyYW5zcG9ydCwgcHJvdG9jb2wpLCB3aGVyZSB0cmFuc3BvcnQgc3VwcG9ydHMgdGhlCisgICAgICAgIFJlYWRUcmFuc3BvcnQgaW50ZXJmYWNlLiIiIgorICAgICAgICAjIFRoZSByZWFzb24gdG8gYWNjZXB0IGZpbGUtbGlrZSBvYmplY3QgaW5zdGVhZCBvZiBqdXN0IGZpbGUgZGVzY3JpcHRvcgorICAgICAgICAjIGlzOiB3ZSBuZWVkIHRvIG93biBwaXBlIGFuZCBjbG9zZSBpdCBhdCB0cmFuc3BvcnQgZmluaXNoaW5nCisgICAgICAgICMgQ2FuIGdvdCBjb21wbGljYXRlZCBlcnJvcnMgaWYgcGFzcyBmLmZpbGVubygpLAorICAgICAgICAjIGNsb3NlIGZkIGluIHBpcGUgdHJhbnNwb3J0IHRoZW4gY2xvc2UgZiBhbmQgdmlzZSB2ZXJzYS4KKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIGNvbm5lY3Rfd3JpdGVfcGlwZShzZWxmLCBwcm90b2NvbF9mYWN0b3J5LCBwaXBlKToKKyAgICAgICAgIiIiUmVnaXN0ZXIgd3JpdGUgcGlwZSBpbiBldmVudCBsb29wLgorCisgICAgICAgIHByb3RvY29sX2ZhY3Rvcnkgc2hvdWxkIGluc3RhbnRpYXRlIG9iamVjdCB3aXRoIEJhc2VQcm90b2NvbCBpbnRlcmZhY2UuCisgICAgICAgIFBpcGUgaXMgZmlsZS1saWtlIG9iamVjdCBhbHJlYWR5IHN3aXRjaGVkIHRvIG5vbmJsb2NraW5nLgorICAgICAgICBSZXR1cm4gcGFpciAodHJhbnNwb3J0LCBwcm90b2NvbCksIHdoZXJlIHRyYW5zcG9ydCBzdXBwb3J0CisgICAgICAgIFdyaXRlVHJhbnNwb3J0IGludGVyZmFjZS4iIiIKKyAgICAgICAgIyBUaGUgcmVhc29uIHRvIGFjY2VwdCBmaWxlLWxpa2Ugb2JqZWN0IGluc3RlYWQgb2YganVzdCBmaWxlIGRlc2NyaXB0b3IKKyAgICAgICAgIyBpczogd2UgbmVlZCB0byBvd24gcGlwZSBhbmQgY2xvc2UgaXQgYXQgdHJhbnNwb3J0IGZpbmlzaGluZworICAgICAgICAjIENhbiBnb3QgY29tcGxpY2F0ZWQgZXJyb3JzIGlmIHBhc3MgZi5maWxlbm8oKSwKKyAgICAgICAgIyBjbG9zZSBmZCBpbiBwaXBlIHRyYW5zcG9ydCB0aGVuIGNsb3NlIGYgYW5kIHZpc2UgdmVyc2EuCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBzdWJwcm9jZXNzX3NoZWxsKHNlbGYsIHByb3RvY29sX2ZhY3RvcnksIGNtZCwgKiwgc3RkaW49c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgKiprd2FyZ3MpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgc3VicHJvY2Vzc19leGVjKHNlbGYsIHByb3RvY29sX2ZhY3RvcnksICphcmdzLCBzdGRpbj1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgKiprd2FyZ3MpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICAjIFJlYWR5LWJhc2VkIGNhbGxiYWNrIHJlZ2lzdHJhdGlvbiBtZXRob2RzLgorICAgICMgVGhlIGFkZF8qKCkgbWV0aG9kcyByZXR1cm4gTm9uZS4KKyAgICAjIFRoZSByZW1vdmVfKigpIG1ldGhvZHMgcmV0dXJuIFRydWUgaWYgc29tZXRoaW5nIHdhcyByZW1vdmVkLAorICAgICMgRmFsc2UgaWYgdGhlcmUgd2FzIG5vdGhpbmcgdG8gZGVsZXRlLgorCisgICAgZGVmIGFkZF9yZWFkZXIoc2VsZiwgZmQsIGNhbGxiYWNrLCAqYXJncyk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiByZW1vdmVfcmVhZGVyKHNlbGYsIGZkKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIGFkZF93cml0ZXIoc2VsZiwgZmQsIGNhbGxiYWNrLCAqYXJncyk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiByZW1vdmVfd3JpdGVyKHNlbGYsIGZkKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgIyBDb21wbGV0aW9uIGJhc2VkIEkvTyBtZXRob2RzIHJldHVybmluZyBGdXR1cmVzLgorCisgICAgZGVmIHNvY2tfcmVjdihzZWxmLCBzb2NrLCBuYnl0ZXMpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgc29ja19zZW5kYWxsKHNlbGYsIHNvY2ssIGRhdGEpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgc29ja19jb25uZWN0KHNlbGYsIHNvY2ssIGFkZHJlc3MpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgc29ja19hY2NlcHQoc2VsZiwgc29jayk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgICMgU2lnbmFsIGhhbmRsaW5nLgorCisgICAgZGVmIGFkZF9zaWduYWxfaGFuZGxlcihzZWxmLCBzaWcsIGNhbGxiYWNrLCAqYXJncyk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiByZW1vdmVfc2lnbmFsX2hhbmRsZXIoc2VsZiwgc2lnKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgIyBUYXNrIGZhY3RvcnkuCisKKyAgICBkZWYgc2V0X3Rhc2tfZmFjdG9yeShzZWxmLCBmYWN0b3J5KToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIGdldF90YXNrX2ZhY3Rvcnkoc2VsZik6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgICMgRXJyb3IgaGFuZGxlcnMuCisKKyAgICBkZWYgc2V0X2V4Y2VwdGlvbl9oYW5kbGVyKHNlbGYsIGhhbmRsZXIpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgZGVmYXVsdF9leGNlcHRpb25faGFuZGxlcihzZWxmLCBjb250ZXh0KToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIGNhbGxfZXhjZXB0aW9uX2hhbmRsZXIoc2VsZiwgY29udGV4dCk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgICMgRGVidWcgZmxhZyBtYW5hZ2VtZW50LgorCisgICAgZGVmIGdldF9kZWJ1ZyhzZWxmKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIHNldF9kZWJ1ZyhzZWxmLCBlbmFibGVkKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisKK2NsYXNzIEFic3RyYWN0RXZlbnRMb29wUG9saWN5OgorICAgICIiIkFic3RyYWN0IHBvbGljeSBmb3IgYWNjZXNzaW5nIHRoZSBldmVudCBsb29wLiIiIgorCisgICAgZGVmIGdldF9ldmVudF9sb29wKHNlbGYpOgorICAgICAgICAiIiJHZXQgdGhlIGV2ZW50IGxvb3AgZm9yIHRoZSBjdXJyZW50IGNvbnRleHQuCisKKyAgICAgICAgUmV0dXJucyBhbiBldmVudCBsb29wIG9iamVjdCBpbXBsZW1lbnRpbmcgdGhlIEJhc2VFdmVudExvb3AgaW50ZXJmYWNlLAorICAgICAgICBvciByYWlzZXMgYW4gZXhjZXB0aW9uIGluIGNhc2Ugbm8gZXZlbnQgbG9vcCBoYXMgYmVlbiBzZXQgZm9yIHRoZQorICAgICAgICBjdXJyZW50IGNvbnRleHQgYW5kIHRoZSBjdXJyZW50IHBvbGljeSBkb2VzIG5vdCBzcGVjaWZ5IHRvIGNyZWF0ZSBvbmUuCisKKyAgICAgICAgSXQgc2hvdWxkIG5ldmVyIHJldHVybiBOb25lLiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgc2V0X2V2ZW50X2xvb3Aoc2VsZiwgbG9vcCk6CisgICAgICAgICIiIlNldCB0aGUgZXZlbnQgbG9vcCBmb3IgdGhlIGN1cnJlbnQgY29udGV4dCB0byBsb29wLiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgbmV3X2V2ZW50X2xvb3Aoc2VsZik6CisgICAgICAgICIiIkNyZWF0ZSBhbmQgcmV0dXJuIGEgbmV3IGV2ZW50IGxvb3Agb2JqZWN0IGFjY29yZGluZyB0byB0aGlzCisgICAgICAgIHBvbGljeSdzIHJ1bGVzLiBJZiB0aGVyZSdzIG5lZWQgdG8gc2V0IHRoaXMgbG9vcCBhcyB0aGUgZXZlbnQgbG9vcCBmb3IKKyAgICAgICAgdGhlIGN1cnJlbnQgY29udGV4dCwgc2V0X2V2ZW50X2xvb3AgbXVzdCBiZSBjYWxsZWQgZXhwbGljaXRseS4iIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgIyBDaGlsZCBwcm9jZXNzZXMgaGFuZGxpbmcgKFVuaXggb25seSkuCisKKyAgICBkZWYgZ2V0X2NoaWxkX3dhdGNoZXIoc2VsZik6CisgICAgICAgICJHZXQgdGhlIHdhdGNoZXIgZm9yIGNoaWxkIHByb2Nlc3Nlcy4iCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBzZXRfY2hpbGRfd2F0Y2hlcihzZWxmLCB3YXRjaGVyKToKKyAgICAgICAgIiIiU2V0IHRoZSB3YXRjaGVyIGZvciBjaGlsZCBwcm9jZXNzZXMuIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworCitjbGFzcyBCYXNlRGVmYXVsdEV2ZW50TG9vcFBvbGljeShBYnN0cmFjdEV2ZW50TG9vcFBvbGljeSk6CisgICAgIiIiRGVmYXVsdCBwb2xpY3kgaW1wbGVtZW50YXRpb24gZm9yIGFjY2Vzc2luZyB0aGUgZXZlbnQgbG9vcC4KKworICAgIEluIHRoaXMgcG9saWN5LCBlYWNoIHRocmVhZCBoYXMgaXRzIG93biBldmVudCBsb29wLiAgSG93ZXZlciwgd2UKKyAgICBvbmx5IGF1dG9tYXRpY2FsbHkgY3JlYXRlIGFuIGV2ZW50IGxvb3AgYnkgZGVmYXVsdCBmb3IgdGhlIG1haW4KKyAgICB0aHJlYWQ7IG90aGVyIHRocmVhZHMgYnkgZGVmYXVsdCBoYXZlIG5vIGV2ZW50IGxvb3AuCisKKyAgICBPdGhlciBwb2xpY2llcyBtYXkgaGF2ZSBkaWZmZXJlbnQgcnVsZXMgKGUuZy4gYSBzaW5nbGUgZ2xvYmFsCisgICAgZXZlbnQgbG9vcCwgb3IgYXV0b21hdGljYWxseSBjcmVhdGluZyBhbiBldmVudCBsb29wIHBlciB0aHJlYWQsIG9yCisgICAgdXNpbmcgc29tZSBvdGhlciBub3Rpb24gb2YgY29udGV4dCB0byB3aGljaCBhbiBldmVudCBsb29wIGlzCisgICAgYXNzb2NpYXRlZCkuCisgICAgIiIiCisKKyAgICBfbG9vcF9mYWN0b3J5ID0gTm9uZQorCisgICAgY2xhc3MgX0xvY2FsKHRocmVhZGluZy5sb2NhbCk6CisgICAgICAgIF9sb29wID0gTm9uZQorICAgICAgICBfc2V0X2NhbGxlZCA9IEZhbHNlCisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuX2xvY2FsID0gc2VsZi5fTG9jYWwoKQorCisgICAgZGVmIGdldF9ldmVudF9sb29wKHNlbGYpOgorICAgICAgICAiIiJHZXQgdGhlIGV2ZW50IGxvb3AuCisKKyAgICAgICAgVGhpcyBtYXkgYmUgTm9uZSBvciBhbiBpbnN0YW5jZSBvZiBFdmVudExvb3AuCisgICAgICAgICIiIgorICAgICAgICBpZiAoc2VsZi5fbG9jYWwuX2xvb3AgaXMgTm9uZSBhbmQKKyAgICAgICAgICAgIG5vdCBzZWxmLl9sb2NhbC5fc2V0X2NhbGxlZCBhbmQKKyAgICAgICAgICAgIGlzaW5zdGFuY2UodGhyZWFkaW5nLmN1cnJlbnRfdGhyZWFkKCksIHRocmVhZGluZy5fTWFpblRocmVhZCkpOgorICAgICAgICAgICAgc2VsZi5zZXRfZXZlbnRfbG9vcChzZWxmLm5ld19ldmVudF9sb29wKCkpCisgICAgICAgIGlmIHNlbGYuX2xvY2FsLl9sb29wIGlzIE5vbmU6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ1RoZXJlIGlzIG5vIGN1cnJlbnQgZXZlbnQgbG9vcCBpbiB0aHJlYWQgJXIuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgdGhyZWFkaW5nLmN1cnJlbnRfdGhyZWFkKCkubmFtZSkKKyAgICAgICAgcmV0dXJuIHNlbGYuX2xvY2FsLl9sb29wCisKKyAgICBkZWYgc2V0X2V2ZW50X2xvb3Aoc2VsZiwgbG9vcCk6CisgICAgICAgICIiIlNldCB0aGUgZXZlbnQgbG9vcC4iIiIKKyAgICAgICAgc2VsZi5fbG9jYWwuX3NldF9jYWxsZWQgPSBUcnVlCisgICAgICAgIGFzc2VydCBsb29wIGlzIE5vbmUgb3IgaXNpbnN0YW5jZShsb29wLCBBYnN0cmFjdEV2ZW50TG9vcCkKKyAgICAgICAgc2VsZi5fbG9jYWwuX2xvb3AgPSBsb29wCisKKyAgICBkZWYgbmV3X2V2ZW50X2xvb3Aoc2VsZik6CisgICAgICAgICIiIkNyZWF0ZSBhIG5ldyBldmVudCBsb29wLgorCisgICAgICAgIFlvdSBtdXN0IGNhbGwgc2V0X2V2ZW50X2xvb3AoKSB0byBtYWtlIHRoaXMgdGhlIGN1cnJlbnQgZXZlbnQKKyAgICAgICAgbG9vcC4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9sb29wX2ZhY3RvcnkoKQorCisKKyMgRXZlbnQgbG9vcCBwb2xpY3kuICBUaGUgcG9saWN5IGl0c2VsZiBpcyBhbHdheXMgZ2xvYmFsLCBldmVuIGlmIHRoZQorIyBwb2xpY3kncyBydWxlcyBzYXkgdGhhdCB0aGVyZSBpcyBhbiBldmVudCBsb29wIHBlciB0aHJlYWQgKG9yIG90aGVyCisjIG5vdGlvbiBvZiBjb250ZXh0KS4gIFRoZSBkZWZhdWx0IHBvbGljeSBpcyBpbnN0YWxsZWQgYnkgdGhlIGZpcnN0CisjIGNhbGwgdG8gZ2V0X2V2ZW50X2xvb3BfcG9saWN5KCkuCitfZXZlbnRfbG9vcF9wb2xpY3kgPSBOb25lCisKKyMgTG9jayBmb3IgcHJvdGVjdGluZyB0aGUgb24tdGhlLWZseSBjcmVhdGlvbiBvZiB0aGUgZXZlbnQgbG9vcCBwb2xpY3kuCitfbG9jayA9IHRocmVhZGluZy5Mb2NrKCkKKworCitkZWYgX2luaXRfZXZlbnRfbG9vcF9wb2xpY3koKToKKyAgICBnbG9iYWwgX2V2ZW50X2xvb3BfcG9saWN5CisgICAgd2l0aCBfbG9jazoKKyAgICAgICAgaWYgX2V2ZW50X2xvb3BfcG9saWN5IGlzIE5vbmU6ICAjIHByYWdtYTogbm8gYnJhbmNoCisgICAgICAgICAgICBmcm9tIC4gaW1wb3J0IERlZmF1bHRFdmVudExvb3BQb2xpY3kKKyAgICAgICAgICAgIF9ldmVudF9sb29wX3BvbGljeSA9IERlZmF1bHRFdmVudExvb3BQb2xpY3koKQorCisKK2RlZiBnZXRfZXZlbnRfbG9vcF9wb2xpY3koKToKKyAgICAiIiJHZXQgdGhlIGN1cnJlbnQgZXZlbnQgbG9vcCBwb2xpY3kuIiIiCisgICAgaWYgX2V2ZW50X2xvb3BfcG9saWN5IGlzIE5vbmU6CisgICAgICAgIF9pbml0X2V2ZW50X2xvb3BfcG9saWN5KCkKKyAgICByZXR1cm4gX2V2ZW50X2xvb3BfcG9saWN5CisKKworZGVmIHNldF9ldmVudF9sb29wX3BvbGljeShwb2xpY3kpOgorICAgICIiIlNldCB0aGUgY3VycmVudCBldmVudCBsb29wIHBvbGljeS4KKworICAgIElmIHBvbGljeSBpcyBOb25lLCB0aGUgZGVmYXVsdCBwb2xpY3kgaXMgcmVzdG9yZWQuIiIiCisgICAgZ2xvYmFsIF9ldmVudF9sb29wX3BvbGljeQorICAgIGFzc2VydCBwb2xpY3kgaXMgTm9uZSBvciBpc2luc3RhbmNlKHBvbGljeSwgQWJzdHJhY3RFdmVudExvb3BQb2xpY3kpCisgICAgX2V2ZW50X2xvb3BfcG9saWN5ID0gcG9saWN5CisKKworZGVmIGdldF9ldmVudF9sb29wKCk6CisgICAgIiIiRXF1aXZhbGVudCB0byBjYWxsaW5nIGdldF9ldmVudF9sb29wX3BvbGljeSgpLmdldF9ldmVudF9sb29wKCkuIiIiCisgICAgcmV0dXJuIGdldF9ldmVudF9sb29wX3BvbGljeSgpLmdldF9ldmVudF9sb29wKCkKKworCitkZWYgc2V0X2V2ZW50X2xvb3AobG9vcCk6CisgICAgIiIiRXF1aXZhbGVudCB0byBjYWxsaW5nIGdldF9ldmVudF9sb29wX3BvbGljeSgpLnNldF9ldmVudF9sb29wKGxvb3ApLiIiIgorICAgIGdldF9ldmVudF9sb29wX3BvbGljeSgpLnNldF9ldmVudF9sb29wKGxvb3ApCisKKworZGVmIG5ld19ldmVudF9sb29wKCk6CisgICAgIiIiRXF1aXZhbGVudCB0byBjYWxsaW5nIGdldF9ldmVudF9sb29wX3BvbGljeSgpLm5ld19ldmVudF9sb29wKCkuIiIiCisgICAgcmV0dXJuIGdldF9ldmVudF9sb29wX3BvbGljeSgpLm5ld19ldmVudF9sb29wKCkKKworCitkZWYgZ2V0X2NoaWxkX3dhdGNoZXIoKToKKyAgICAiIiJFcXVpdmFsZW50IHRvIGNhbGxpbmcgZ2V0X2V2ZW50X2xvb3BfcG9saWN5KCkuZ2V0X2NoaWxkX3dhdGNoZXIoKS4iIiIKKyAgICByZXR1cm4gZ2V0X2V2ZW50X2xvb3BfcG9saWN5KCkuZ2V0X2NoaWxkX3dhdGNoZXIoKQorCisKK2RlZiBzZXRfY2hpbGRfd2F0Y2hlcih3YXRjaGVyKToKKyAgICAiIiJFcXVpdmFsZW50IHRvIGNhbGxpbmcKKyAgICBnZXRfZXZlbnRfbG9vcF9wb2xpY3koKS5zZXRfY2hpbGRfd2F0Y2hlcih3YXRjaGVyKS4iIiIKKyAgICByZXR1cm4gZ2V0X2V2ZW50X2xvb3BfcG9saWN5KCkuc2V0X2NoaWxkX3dhdGNoZXIod2F0Y2hlcikKZGlmZiAtLWdpdCBhL0xpYi9hc3luY2lvL2Z1dHVyZXMucHkgYi9MaWIvYXN5bmNpby9mdXR1cmVzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkY2I2NTQKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvYXN5bmNpby9mdXR1cmVzLnB5CkBAIC0wLDAgKzEsNDUzIEBACisiIiJBIEZ1dHVyZSBjbGFzcyBzaW1pbGFyIHRvIHRoZSBvbmUgaW4gUEVQIDMxNDguIiIiCisKK19fYWxsX18gPSBbJ0NhbmNlbGxlZEVycm9yJywgJ1RpbWVvdXRFcnJvcicsCisgICAgICAgICAgICdJbnZhbGlkU3RhdGVFcnJvcicsCisgICAgICAgICAgICdGdXR1cmUnLCAnd3JhcF9mdXR1cmUnLAorICAgICAgICAgICBdCisKK2ltcG9ydCBjb25jdXJyZW50LmZ1dHVyZXMuX2Jhc2UKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgcmVwcmxpYgoraW1wb3J0IHN5cworaW1wb3J0IHRyYWNlYmFjaworCitmcm9tIC4gaW1wb3J0IGNvbXBhdAorZnJvbSAuIGltcG9ydCBldmVudHMKKworIyBTdGF0ZXMgZm9yIEZ1dHVyZS4KK19QRU5ESU5HID0gJ1BFTkRJTkcnCitfQ0FOQ0VMTEVEID0gJ0NBTkNFTExFRCcKK19GSU5JU0hFRCA9ICdGSU5JU0hFRCcKKworRXJyb3IgPSBjb25jdXJyZW50LmZ1dHVyZXMuX2Jhc2UuRXJyb3IKK0NhbmNlbGxlZEVycm9yID0gY29uY3VycmVudC5mdXR1cmVzLkNhbmNlbGxlZEVycm9yCitUaW1lb3V0RXJyb3IgPSBjb25jdXJyZW50LmZ1dHVyZXMuVGltZW91dEVycm9yCisKK1NUQUNLX0RFQlVHID0gbG9nZ2luZy5ERUJVRyAtIDEgICMgaGVhdnktZHV0eSBkZWJ1Z2dpbmcKKworCitjbGFzcyBJbnZhbGlkU3RhdGVFcnJvcihFcnJvcik6CisgICAgIiIiVGhlIG9wZXJhdGlvbiBpcyBub3QgYWxsb3dlZCBpbiB0aGlzIHN0YXRlLiIiIgorCisKK2NsYXNzIF9UcmFjZWJhY2tMb2dnZXI6CisgICAgIiIiSGVscGVyIHRvIGxvZyBhIHRyYWNlYmFjayB1cG9uIGRlc3RydWN0aW9uIGlmIG5vdCBjbGVhcmVkLgorCisgICAgVGhpcyBzb2x2ZXMgYSBuYXN0eSBwcm9ibGVtIHdpdGggRnV0dXJlcyBhbmQgVGFza3MgdGhhdCBoYXZlIGFuCisgICAgZXhjZXB0aW9uIHNldDogaWYgbm9ib2R5IGFza3MgZm9yIHRoZSBleGNlcHRpb24sIHRoZSBleGNlcHRpb24gaXMKKyAgICBuZXZlciBsb2dnZWQuICBUaGlzIHZpb2xhdGVzIHRoZSBaZW4gb2YgUHl0aG9uOiAnRXJyb3JzIHNob3VsZAorICAgIG5ldmVyIHBhc3Mgc2lsZW50bHkuICBVbmxlc3MgZXhwbGljaXRseSBzaWxlbmNlZC4nCisKKyAgICBIb3dldmVyLCB3ZSBkb24ndCB3YW50IHRvIGxvZyB0aGUgZXhjZXB0aW9uIGFzIHNvb24gYXMKKyAgICBzZXRfZXhjZXB0aW9uKCkgaXMgY2FsbGVkOiBpZiB0aGUgY2FsbGluZyBjb2RlIGlzIHdyaXR0ZW4KKyAgICBwcm9wZXJseSwgaXQgd2lsbCBnZXQgdGhlIGV4Y2VwdGlvbiBhbmQgaGFuZGxlIGl0IHByb3Blcmx5LiAgQnV0CisgICAgd2UgKmRvKiB3YW50IHRvIGxvZyBpdCBpZiByZXN1bHQoKSBvciBleGNlcHRpb24oKSB3YXMgbmV2ZXIgY2FsbGVkCisgICAgLS0gb3RoZXJ3aXNlIGRldmVsb3BlcnMgd2FzdGUgYSBsb3Qgb2YgdGltZSB3b25kZXJpbmcgd2h5IHRoZWlyCisgICAgYnVnZ3kgY29kZSBmYWlscyBzaWxlbnRseS4KKworICAgIEFuIGVhcmxpZXIgYXR0ZW1wdCBhZGRlZCBhIF9fZGVsX18oKSBtZXRob2QgdG8gdGhlIEZ1dHVyZSBjbGFzcworICAgIGl0c2VsZiwgYnV0IHRoaXMgYmFja2ZpcmVkIGJlY2F1c2UgdGhlIHByZXNlbmNlIG9mIF9fZGVsX18oKQorICAgIHByZXZlbnRzIGdhcmJhZ2UgY29sbGVjdGlvbiBmcm9tIGJyZWFraW5nIGN5Y2xlcy4gIEEgd2F5IG91dCBvZgorICAgIHRoaXMgY2F0Y2gtMjIgaXMgdG8gYXZvaWQgaGF2aW5nIGEgX19kZWxfXygpIG1ldGhvZCBvbiB0aGUgRnV0dXJlCisgICAgY2xhc3MgaXRzZWxmLCBidXQgaW5zdGVhZCB0byBoYXZlIGEgcmVmZXJlbmNlIHRvIGEgaGVscGVyIG9iamVjdAorICAgIHdpdGggYSBfX2RlbF9fKCkgbWV0aG9kIHRoYXQgbG9ncyB0aGUgdHJhY2ViYWNrLCB3aGVyZSB3ZSBlbnN1cmUKKyAgICB0aGF0IHRoZSBoZWxwZXIgb2JqZWN0IGRvZXNuJ3QgcGFydGljaXBhdGUgaW4gY3ljbGVzLCBhbmQgb25seSB0aGUKKyAgICBGdXR1cmUgaGFzIGEgcmVmZXJlbmNlIHRvIGl0LgorCisgICAgVGhlIGhlbHBlciBvYmplY3QgaXMgYWRkZWQgd2hlbiBzZXRfZXhjZXB0aW9uKCkgaXMgY2FsbGVkLiAgV2hlbgorICAgIHRoZSBGdXR1cmUgaXMgY29sbGVjdGVkLCBhbmQgdGhlIGhlbHBlciBpcyBwcmVzZW50LCB0aGUgaGVscGVyCisgICAgb2JqZWN0IGlzIGFsc28gY29sbGVjdGVkLCBhbmQgaXRzIF9fZGVsX18oKSBtZXRob2Qgd2lsbCBsb2cgdGhlCisgICAgdHJhY2ViYWNrLiAgV2hlbiB0aGUgRnV0dXJlJ3MgcmVzdWx0KCkgb3IgZXhjZXB0aW9uKCkgbWV0aG9kIGlzCisgICAgY2FsbGVkIChhbmQgYSBoZWxwZXIgb2JqZWN0IGlzIHByZXNlbnQpLCBpdCByZW1vdmVzIHRoZSBoZWxwZXIKKyAgICBvYmplY3QsIGFmdGVyIGNhbGxpbmcgaXRzIGNsZWFyKCkgbWV0aG9kIHRvIHByZXZlbnQgaXQgZnJvbQorICAgIGxvZ2dpbmcuCisKKyAgICBPbmUgZG93bnNpZGUgaXMgdGhhdCB3ZSBkbyBhIGZhaXIgYW1vdW50IG9mIHdvcmsgdG8gZXh0cmFjdCB0aGUKKyAgICB0cmFjZWJhY2sgZnJvbSB0aGUgZXhjZXB0aW9uLCBldmVuIHdoZW4gaXQgaXMgbmV2ZXIgbG9nZ2VkLiAgSXQKKyAgICB3b3VsZCBzZWVtIGNoZWFwZXIgdG8ganVzdCBzdG9yZSB0aGUgZXhjZXB0aW9uIG9iamVjdCwgYnV0IHRoYXQKKyAgICByZWZlcmVuY2VzIHRoZSB0cmFjZWJhY2ssIHdoaWNoIHJlZmVyZW5jZXMgc3RhY2sgZnJhbWVzLCB3aGljaCBtYXkKKyAgICByZWZlcmVuY2UgdGhlIEZ1dHVyZSwgd2hpY2ggcmVmZXJlbmNlcyB0aGUgX1RyYWNlYmFja0xvZ2dlciwgYW5kCisgICAgdGhlbiB0aGUgX1RyYWNlYmFja0xvZ2dlciB3b3VsZCBiZSBpbmNsdWRlZCBpbiBhIGN5Y2xlLCB3aGljaCBpcworICAgIHdoYXQgd2UncmUgdHJ5aW5nIHRvIGF2b2lkISAgQXMgYW4gb3B0aW1pemF0aW9uLCB3ZSBkb24ndAorICAgIGltbWVkaWF0ZWx5IGZvcm1hdCB0aGUgZXhjZXB0aW9uOyB3ZSBvbmx5IGRvIHRoZSB3b3JrIHdoZW4KKyAgICBhY3RpdmF0ZSgpIGlzIGNhbGxlZCwgd2hpY2ggY2FsbCBpcyBkZWxheWVkIHVudGlsIGFmdGVyIGFsbCB0aGUKKyAgICBGdXR1cmUncyBjYWxsYmFja3MgaGF2ZSBydW4uICBTaW5jZSB1c3VhbGx5IGEgRnV0dXJlIGhhcyBhdCBsZWFzdAorICAgIG9uZSBjYWxsYmFjayAodHlwaWNhbGx5IHNldCBieSAneWllbGQgZnJvbScpIGFuZCB1c3VhbGx5IHRoYXQKKyAgICBjYWxsYmFjayBleHRyYWN0cyB0aGUgY2FsbGJhY2ssIHRoZXJlYnkgcmVtb3ZpbmcgdGhlIG5lZWQgdG8KKyAgICBmb3JtYXQgdGhlIGV4Y2VwdGlvbi4KKworICAgIFBTLiBJIGRvbid0IGNsYWltIGNyZWRpdCBmb3IgdGhpcyBzb2x1dGlvbi4gIEkgZmlyc3QgaGVhcmQgb2YgaXQKKyAgICBpbiBhIGRpc2N1c3Npb24gYWJvdXQgY2xvc2luZyBmaWxlcyB3aGVuIHRoZXkgYXJlIGNvbGxlY3RlZC4KKyAgICAiIiIKKworICAgIF9fc2xvdHNfXyA9ICgnbG9vcCcsICdzb3VyY2VfdHJhY2ViYWNrJywgJ2V4YycsICd0YicpCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZnV0dXJlLCBleGMpOgorICAgICAgICBzZWxmLmxvb3AgPSBmdXR1cmUuX2xvb3AKKyAgICAgICAgc2VsZi5zb3VyY2VfdHJhY2ViYWNrID0gZnV0dXJlLl9zb3VyY2VfdHJhY2ViYWNrCisgICAgICAgIHNlbGYuZXhjID0gZXhjCisgICAgICAgIHNlbGYudGIgPSBOb25lCisKKyAgICBkZWYgYWN0aXZhdGUoc2VsZik6CisgICAgICAgIGV4YyA9IHNlbGYuZXhjCisgICAgICAgIGlmIGV4YyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuZXhjID0gTm9uZQorICAgICAgICAgICAgc2VsZi50YiA9IHRyYWNlYmFjay5mb3JtYXRfZXhjZXB0aW9uKGV4Yy5fX2NsYXNzX18sIGV4YywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGMuX190cmFjZWJhY2tfXykKKworICAgIGRlZiBjbGVhcihzZWxmKToKKyAgICAgICAgc2VsZi5leGMgPSBOb25lCisgICAgICAgIHNlbGYudGIgPSBOb25lCisKKyAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi50YjoKKyAgICAgICAgICAgIG1zZyA9ICdGdXR1cmUvVGFzayBleGNlcHRpb24gd2FzIG5ldmVyIHJldHJpZXZlZFxuJworICAgICAgICAgICAgaWYgc2VsZi5zb3VyY2VfdHJhY2ViYWNrOgorICAgICAgICAgICAgICAgIHNyYyA9ICcnLmpvaW4odHJhY2ViYWNrLmZvcm1hdF9saXN0KHNlbGYuc291cmNlX3RyYWNlYmFjaykpCisgICAgICAgICAgICAgICAgbXNnICs9ICdGdXR1cmUvVGFzayBjcmVhdGVkIGF0IChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOlxuJworICAgICAgICAgICAgICAgIG1zZyArPSAnJXNcbicgJSBzcmMucnN0cmlwKCkKKyAgICAgICAgICAgIG1zZyArPSAnJy5qb2luKHNlbGYudGIpLnJzdHJpcCgpCisgICAgICAgICAgICBzZWxmLmxvb3AuY2FsbF9leGNlcHRpb25faGFuZGxlcih7J21lc3NhZ2UnOiBtc2d9KQorCisKK2NsYXNzIEZ1dHVyZToKKyAgICAiIiJUaGlzIGNsYXNzIGlzICphbG1vc3QqIGNvbXBhdGlibGUgd2l0aCBjb25jdXJyZW50LmZ1dHVyZXMuRnV0dXJlLgorCisgICAgRGlmZmVyZW5jZXM6CisKKyAgICAtIHJlc3VsdCgpIGFuZCBleGNlcHRpb24oKSBkbyBub3QgdGFrZSBhIHRpbWVvdXQgYXJndW1lbnQgYW5kCisgICAgICByYWlzZSBhbiBleGNlcHRpb24gd2hlbiB0aGUgZnV0dXJlIGlzbid0IGRvbmUgeWV0LgorCisgICAgLSBDYWxsYmFja3MgcmVnaXN0ZXJlZCB3aXRoIGFkZF9kb25lX2NhbGxiYWNrKCkgYXJlIGFsd2F5cyBjYWxsZWQKKyAgICAgIHZpYSB0aGUgZXZlbnQgbG9vcCdzIGNhbGxfc29vbl90aHJlYWRzYWZlKCkuCisKKyAgICAtIFRoaXMgY2xhc3MgaXMgbm90IGNvbXBhdGlibGUgd2l0aCB0aGUgd2FpdCgpIGFuZCBhc19jb21wbGV0ZWQoKQorICAgICAgbWV0aG9kcyBpbiB0aGUgY29uY3VycmVudC5mdXR1cmVzIHBhY2thZ2UuCisKKyAgICAoSW4gUHl0aG9uIDMuNCBvciBsYXRlciB3ZSBtYXkgYmUgYWJsZSB0byB1bmlmeSB0aGUgaW1wbGVtZW50YXRpb25zLikKKyAgICAiIiIKKworICAgICMgQ2xhc3MgdmFyaWFibGVzIHNlcnZpbmcgYXMgZGVmYXVsdHMgZm9yIGluc3RhbmNlIHZhcmlhYmxlcy4KKyAgICBfc3RhdGUgPSBfUEVORElORworICAgIF9yZXN1bHQgPSBOb25lCisgICAgX2V4Y2VwdGlvbiA9IE5vbmUKKyAgICBfbG9vcCA9IE5vbmUKKyAgICBfc291cmNlX3RyYWNlYmFjayA9IE5vbmUKKworICAgIF9ibG9ja2luZyA9IEZhbHNlICAjIHByb3BlciB1c2Ugb2YgZnV0dXJlICh5aWVsZCB2cyB5aWVsZCBmcm9tKQorCisgICAgX2xvZ190cmFjZWJhY2sgPSBGYWxzZSAgICMgVXNlZCBmb3IgUHl0aG9uIDMuNCBhbmQgbGF0ZXIKKyAgICBfdGJfbG9nZ2VyID0gTm9uZSAgICAgICAgIyBVc2VkIGZvciBQeXRob24gMy4zIG9ubHkKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqLCBsb29wPU5vbmUpOgorICAgICAgICAiIiJJbml0aWFsaXplIHRoZSBmdXR1cmUuCisKKyAgICAgICAgVGhlIG9wdGlvbmFsIGV2ZW50X2xvb3AgYXJndW1lbnQgYWxsb3dzIHRvIGV4cGxpY2l0bHkgc2V0IHRoZSBldmVudAorICAgICAgICBsb29wIG9iamVjdCB1c2VkIGJ5IHRoZSBmdXR1cmUuIElmIGl0J3Mgbm90IHByb3ZpZGVkLCB0aGUgZnV0dXJlIHVzZXMKKyAgICAgICAgdGhlIGRlZmF1bHQgZXZlbnQgbG9vcC4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIGxvb3AgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2xvb3AgPSBldmVudHMuZ2V0X2V2ZW50X2xvb3AoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fbG9vcCA9IGxvb3AKKyAgICAgICAgc2VsZi5fY2FsbGJhY2tzID0gW10KKyAgICAgICAgaWYgc2VsZi5fbG9vcC5nZXRfZGVidWcoKToKKyAgICAgICAgICAgIHNlbGYuX3NvdXJjZV90cmFjZWJhY2sgPSB0cmFjZWJhY2suZXh0cmFjdF9zdGFjayhzeXMuX2dldGZyYW1lKDEpKQorCisgICAgZGVmIF9fZm9ybWF0X2NhbGxiYWNrcyhzZWxmKToKKyAgICAgICAgY2IgPSBzZWxmLl9jYWxsYmFja3MKKyAgICAgICAgc2l6ZSA9IGxlbihjYikKKyAgICAgICAgaWYgbm90IHNpemU6CisgICAgICAgICAgICBjYiA9ICcnCisKKyAgICAgICAgZGVmIGZvcm1hdF9jYihjYWxsYmFjayk6CisgICAgICAgICAgICByZXR1cm4gZXZlbnRzLl9mb3JtYXRfY2FsbGJhY2tfc291cmNlKGNhbGxiYWNrLCAoKSkKKworICAgICAgICBpZiBzaXplID09IDE6CisgICAgICAgICAgICBjYiA9IGZvcm1hdF9jYihjYlswXSkKKyAgICAgICAgZWxpZiBzaXplID09IDI6CisgICAgICAgICAgICBjYiA9ICd7fSwge30nLmZvcm1hdChmb3JtYXRfY2IoY2JbMF0pLCBmb3JtYXRfY2IoY2JbMV0pKQorICAgICAgICBlbGlmIHNpemUgPiAyOgorICAgICAgICAgICAgY2IgPSAne30sIDx7fSBtb3JlPiwge30nLmZvcm1hdChmb3JtYXRfY2IoY2JbMF0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplLTIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdF9jYihjYlstMV0pKQorICAgICAgICByZXR1cm4gJ2NiPVslc10nICUgY2IKKworICAgIGRlZiBfcmVwcl9pbmZvKHNlbGYpOgorICAgICAgICBpbmZvID0gW3NlbGYuX3N0YXRlLmxvd2VyKCldCisgICAgICAgIGlmIHNlbGYuX3N0YXRlID09IF9GSU5JU0hFRDoKKyAgICAgICAgICAgIGlmIHNlbGYuX2V4Y2VwdGlvbiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBpbmZvLmFwcGVuZCgnZXhjZXB0aW9uPXshcn0nLmZvcm1hdChzZWxmLl9leGNlcHRpb24pKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIHVzZSByZXBybGliIHRvIGxpbWl0IHRoZSBsZW5ndGggb2YgdGhlIG91dHB1dCwgZXNwZWNpYWxseQorICAgICAgICAgICAgICAgICMgZm9yIHZlcnkgbG9uZyBzdHJpbmdzCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVwcmxpYi5yZXByKHNlbGYuX3Jlc3VsdCkKKyAgICAgICAgICAgICAgICBpbmZvLmFwcGVuZCgncmVzdWx0PXt9Jy5mb3JtYXQocmVzdWx0KSkKKyAgICAgICAgaWYgc2VsZi5fY2FsbGJhY2tzOgorICAgICAgICAgICAgaW5mby5hcHBlbmQoc2VsZi5fX2Zvcm1hdF9jYWxsYmFja3MoKSkKKyAgICAgICAgaWYgc2VsZi5fc291cmNlX3RyYWNlYmFjazoKKyAgICAgICAgICAgIGZyYW1lID0gc2VsZi5fc291cmNlX3RyYWNlYmFja1stMV0KKyAgICAgICAgICAgIGluZm8uYXBwZW5kKCdjcmVhdGVkIGF0ICVzOiVzJyAlIChmcmFtZVswXSwgZnJhbWVbMV0pKQorICAgICAgICByZXR1cm4gaW5mbworCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICBpbmZvID0gc2VsZi5fcmVwcl9pbmZvKCkKKyAgICAgICAgcmV0dXJuICc8JXMgJXM+JyAlIChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgJyAnLmpvaW4oaW5mbykpCisKKyAgICAjIE9uIFB5dGhvbiAzLjMgYW5kIG9sZGVyLCBvYmplY3RzIHdpdGggYSBkZXN0cnVjdG9yIHBhcnQgb2YgYSByZWZlcmVuY2UKKyAgICAjIGN5Y2xlIGFyZSBuZXZlciBkZXN0cm95ZWQuIEl0J3Mgbm90IG1vcmUgdGhlIGNhc2Ugb24gUHl0aG9uIDMuNCB0aGFua3MKKyAgICAjIHRvIHRoZSBQRVAgNDQyLgorICAgIGlmIGNvbXBhdC5QWTM0OgorICAgICAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9sb2dfdHJhY2ViYWNrOgorICAgICAgICAgICAgICAgICMgc2V0X2V4Y2VwdGlvbigpIHdhcyBub3QgY2FsbGVkLCBvciByZXN1bHQoKSBvciBleGNlcHRpb24oKQorICAgICAgICAgICAgICAgICMgaGFzIGNvbnN1bWVkIHRoZSBleGNlcHRpb24KKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIGV4YyA9IHNlbGYuX2V4Y2VwdGlvbgorICAgICAgICAgICAgY29udGV4dCA9IHsKKyAgICAgICAgICAgICAgICAnbWVzc2FnZSc6ICgnJXMgZXhjZXB0aW9uIHdhcyBuZXZlciByZXRyaWV2ZWQnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXyksCisgICAgICAgICAgICAgICAgJ2V4Y2VwdGlvbic6IGV4YywKKyAgICAgICAgICAgICAgICAnZnV0dXJlJzogc2VsZiwKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIHNlbGYuX3NvdXJjZV90cmFjZWJhY2s6CisgICAgICAgICAgICAgICAgY29udGV4dFsnc291cmNlX3RyYWNlYmFjayddID0gc2VsZi5fc291cmNlX3RyYWNlYmFjaworICAgICAgICAgICAgc2VsZi5fbG9vcC5jYWxsX2V4Y2VwdGlvbl9oYW5kbGVyKGNvbnRleHQpCisKKyAgICBkZWYgY2FuY2VsKHNlbGYpOgorICAgICAgICAiIiJDYW5jZWwgdGhlIGZ1dHVyZSBhbmQgc2NoZWR1bGUgY2FsbGJhY2tzLgorCisgICAgICAgIElmIHRoZSBmdXR1cmUgaXMgYWxyZWFkeSBkb25lIG9yIGNhbmNlbGxlZCwgcmV0dXJuIEZhbHNlLiAgT3RoZXJ3aXNlLAorICAgICAgICBjaGFuZ2UgdGhlIGZ1dHVyZSdzIHN0YXRlIHRvIGNhbmNlbGxlZCwgc2NoZWR1bGUgdGhlIGNhbGxiYWNrcyBhbmQKKyAgICAgICAgcmV0dXJuIFRydWUuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl9zdGF0ZSAhPSBfUEVORElORzoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBzZWxmLl9zdGF0ZSA9IF9DQU5DRUxMRUQKKyAgICAgICAgc2VsZi5fc2NoZWR1bGVfY2FsbGJhY2tzKCkKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBfc2NoZWR1bGVfY2FsbGJhY2tzKHNlbGYpOgorICAgICAgICAiIiJJbnRlcm5hbDogQXNrIHRoZSBldmVudCBsb29wIHRvIGNhbGwgYWxsIGNhbGxiYWNrcy4KKworICAgICAgICBUaGUgY2FsbGJhY2tzIGFyZSBzY2hlZHVsZWQgdG8gYmUgY2FsbGVkIGFzIHNvb24gYXMgcG9zc2libGUuIEFsc28KKyAgICAgICAgY2xlYXJzIHRoZSBjYWxsYmFjayBsaXN0LgorICAgICAgICAiIiIKKyAgICAgICAgY2FsbGJhY2tzID0gc2VsZi5fY2FsbGJhY2tzWzpdCisgICAgICAgIGlmIG5vdCBjYWxsYmFja3M6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBzZWxmLl9jYWxsYmFja3NbOl0gPSBbXQorICAgICAgICBmb3IgY2FsbGJhY2sgaW4gY2FsbGJhY2tzOgorICAgICAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24oY2FsbGJhY2ssIHNlbGYpCisKKyAgICBkZWYgY2FuY2VsbGVkKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gVHJ1ZSBpZiB0aGUgZnV0dXJlIHdhcyBjYW5jZWxsZWQuIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9zdGF0ZSA9PSBfQ0FOQ0VMTEVECisKKyAgICAjIERvbid0IGltcGxlbWVudCBydW5uaW5nKCk7IHNlZSBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTg2OTkKKworICAgIGRlZiBkb25lKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gVHJ1ZSBpZiB0aGUgZnV0dXJlIGlzIGRvbmUuCisKKyAgICAgICAgRG9uZSBtZWFucyBlaXRoZXIgdGhhdCBhIHJlc3VsdCAvIGV4Y2VwdGlvbiBhcmUgYXZhaWxhYmxlLCBvciB0aGF0IHRoZQorICAgICAgICBmdXR1cmUgd2FzIGNhbmNlbGxlZC4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9zdGF0ZSAhPSBfUEVORElORworCisgICAgZGVmIHJlc3VsdChzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSByZXN1bHQgdGhpcyBmdXR1cmUgcmVwcmVzZW50cy4KKworICAgICAgICBJZiB0aGUgZnV0dXJlIGhhcyBiZWVuIGNhbmNlbGxlZCwgcmFpc2VzIENhbmNlbGxlZEVycm9yLiAgSWYgdGhlCisgICAgICAgIGZ1dHVyZSdzIHJlc3VsdCBpc24ndCB5ZXQgYXZhaWxhYmxlLCByYWlzZXMgSW52YWxpZFN0YXRlRXJyb3IuICBJZgorICAgICAgICB0aGUgZnV0dXJlIGlzIGRvbmUgYW5kIGhhcyBhbiBleGNlcHRpb24gc2V0LCB0aGlzIGV4Y2VwdGlvbiBpcyByYWlzZWQuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl9zdGF0ZSA9PSBfQ0FOQ0VMTEVEOgorICAgICAgICAgICAgcmFpc2UgQ2FuY2VsbGVkRXJyb3IKKyAgICAgICAgaWYgc2VsZi5fc3RhdGUgIT0gX0ZJTklTSEVEOgorICAgICAgICAgICAgcmFpc2UgSW52YWxpZFN0YXRlRXJyb3IoJ1Jlc3VsdCBpcyBub3QgcmVhZHkuJykKKyAgICAgICAgc2VsZi5fbG9nX3RyYWNlYmFjayA9IEZhbHNlCisgICAgICAgIGlmIHNlbGYuX3RiX2xvZ2dlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX3RiX2xvZ2dlci5jbGVhcigpCisgICAgICAgICAgICBzZWxmLl90Yl9sb2dnZXIgPSBOb25lCisgICAgICAgIGlmIHNlbGYuX2V4Y2VwdGlvbiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIHNlbGYuX2V4Y2VwdGlvbgorICAgICAgICByZXR1cm4gc2VsZi5fcmVzdWx0CisKKyAgICBkZWYgZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIGV4Y2VwdGlvbiB0aGF0IHdhcyBzZXQgb24gdGhpcyBmdXR1cmUuCisKKyAgICAgICAgVGhlIGV4Y2VwdGlvbiAob3IgTm9uZSBpZiBubyBleGNlcHRpb24gd2FzIHNldCkgaXMgcmV0dXJuZWQgb25seSBpZgorICAgICAgICB0aGUgZnV0dXJlIGlzIGRvbmUuICBJZiB0aGUgZnV0dXJlIGhhcyBiZWVuIGNhbmNlbGxlZCwgcmFpc2VzCisgICAgICAgIENhbmNlbGxlZEVycm9yLiAgSWYgdGhlIGZ1dHVyZSBpc24ndCBkb25lIHlldCwgcmFpc2VzCisgICAgICAgIEludmFsaWRTdGF0ZUVycm9yLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5fc3RhdGUgPT0gX0NBTkNFTExFRDoKKyAgICAgICAgICAgIHJhaXNlIENhbmNlbGxlZEVycm9yCisgICAgICAgIGlmIHNlbGYuX3N0YXRlICE9IF9GSU5JU0hFRDoKKyAgICAgICAgICAgIHJhaXNlIEludmFsaWRTdGF0ZUVycm9yKCdFeGNlcHRpb24gaXMgbm90IHNldC4nKQorICAgICAgICBzZWxmLl9sb2dfdHJhY2ViYWNrID0gRmFsc2UKKyAgICAgICAgaWYgc2VsZi5fdGJfbG9nZ2VyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fdGJfbG9nZ2VyLmNsZWFyKCkKKyAgICAgICAgICAgIHNlbGYuX3RiX2xvZ2dlciA9IE5vbmUKKyAgICAgICAgcmV0dXJuIHNlbGYuX2V4Y2VwdGlvbgorCisgICAgZGVmIGFkZF9kb25lX2NhbGxiYWNrKHNlbGYsIGZuKToKKyAgICAgICAgIiIiQWRkIGEgY2FsbGJhY2sgdG8gYmUgcnVuIHdoZW4gdGhlIGZ1dHVyZSBiZWNvbWVzIGRvbmUuCisKKyAgICAgICAgVGhlIGNhbGxiYWNrIGlzIGNhbGxlZCB3aXRoIGEgc2luZ2xlIGFyZ3VtZW50IC0gdGhlIGZ1dHVyZSBvYmplY3QuIElmCisgICAgICAgIHRoZSBmdXR1cmUgaXMgYWxyZWFkeSBkb25lIHdoZW4gdGhpcyBpcyBjYWxsZWQsIHRoZSBjYWxsYmFjayBpcworICAgICAgICBzY2hlZHVsZWQgd2l0aCBjYWxsX3Nvb24uCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl9zdGF0ZSAhPSBfUEVORElORzoKKyAgICAgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKGZuLCBzZWxmKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fY2FsbGJhY2tzLmFwcGVuZChmbikKKworICAgICMgTmV3IG1ldGhvZCBub3QgaW4gUEVQIDMxNDguCisKKyAgICBkZWYgcmVtb3ZlX2RvbmVfY2FsbGJhY2soc2VsZiwgZm4pOgorICAgICAgICAiIiJSZW1vdmUgYWxsIGluc3RhbmNlcyBvZiBhIGNhbGxiYWNrIGZyb20gdGhlICJjYWxsIHdoZW4gZG9uZSIgbGlzdC4KKworICAgICAgICBSZXR1cm5zIHRoZSBudW1iZXIgb2YgY2FsbGJhY2tzIHJlbW92ZWQuCisgICAgICAgICIiIgorICAgICAgICBmaWx0ZXJlZF9jYWxsYmFja3MgPSBbZiBmb3IgZiBpbiBzZWxmLl9jYWxsYmFja3MgaWYgZiAhPSBmbl0KKyAgICAgICAgcmVtb3ZlZF9jb3VudCA9IGxlbihzZWxmLl9jYWxsYmFja3MpIC0gbGVuKGZpbHRlcmVkX2NhbGxiYWNrcykKKyAgICAgICAgaWYgcmVtb3ZlZF9jb3VudDoKKyAgICAgICAgICAgIHNlbGYuX2NhbGxiYWNrc1s6XSA9IGZpbHRlcmVkX2NhbGxiYWNrcworICAgICAgICByZXR1cm4gcmVtb3ZlZF9jb3VudAorCisgICAgIyBTby1jYWxsZWQgaW50ZXJuYWwgbWV0aG9kcyAobm90ZTogbm8gc2V0X3J1bm5pbmdfb3Jfbm90aWZ5X2NhbmNlbCgpKS4KKworICAgIGRlZiBzZXRfcmVzdWx0KHNlbGYsIHJlc3VsdCk6CisgICAgICAgICIiIk1hcmsgdGhlIGZ1dHVyZSBkb25lIGFuZCBzZXQgaXRzIHJlc3VsdC4KKworICAgICAgICBJZiB0aGUgZnV0dXJlIGlzIGFscmVhZHkgZG9uZSB3aGVuIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCwgcmFpc2VzCisgICAgICAgIEludmFsaWRTdGF0ZUVycm9yLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5fc3RhdGUgIT0gX1BFTkRJTkc6CisgICAgICAgICAgICByYWlzZSBJbnZhbGlkU3RhdGVFcnJvcigne306IHshcn0nLmZvcm1hdChzZWxmLl9zdGF0ZSwgc2VsZikpCisgICAgICAgIHNlbGYuX3Jlc3VsdCA9IHJlc3VsdAorICAgICAgICBzZWxmLl9zdGF0ZSA9IF9GSU5JU0hFRAorICAgICAgICBzZWxmLl9zY2hlZHVsZV9jYWxsYmFja3MoKQorCisgICAgZGVmIHNldF9leGNlcHRpb24oc2VsZiwgZXhjZXB0aW9uKToKKyAgICAgICAgIiIiTWFyayB0aGUgZnV0dXJlIGRvbmUgYW5kIHNldCBhbiBleGNlcHRpb24uCisKKyAgICAgICAgSWYgdGhlIGZ1dHVyZSBpcyBhbHJlYWR5IGRvbmUgd2hlbiB0aGlzIG1ldGhvZCBpcyBjYWxsZWQsIHJhaXNlcworICAgICAgICBJbnZhbGlkU3RhdGVFcnJvci4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuX3N0YXRlICE9IF9QRU5ESU5HOgorICAgICAgICAgICAgcmFpc2UgSW52YWxpZFN0YXRlRXJyb3IoJ3t9OiB7IXJ9Jy5mb3JtYXQoc2VsZi5fc3RhdGUsIHNlbGYpKQorICAgICAgICBpZiBpc2luc3RhbmNlKGV4Y2VwdGlvbiwgdHlwZSk6CisgICAgICAgICAgICBleGNlcHRpb24gPSBleGNlcHRpb24oKQorICAgICAgICBzZWxmLl9leGNlcHRpb24gPSBleGNlcHRpb24KKyAgICAgICAgc2VsZi5fc3RhdGUgPSBfRklOSVNIRUQKKyAgICAgICAgc2VsZi5fc2NoZWR1bGVfY2FsbGJhY2tzKCkKKyAgICAgICAgaWYgY29tcGF0LlBZMzQ6CisgICAgICAgICAgICBzZWxmLl9sb2dfdHJhY2ViYWNrID0gVHJ1ZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fdGJfbG9nZ2VyID0gX1RyYWNlYmFja0xvZ2dlcihzZWxmLCBleGNlcHRpb24pCisgICAgICAgICAgICAjIEFycmFuZ2UgZm9yIHRoZSBsb2dnZXIgdG8gYmUgYWN0aXZhdGVkIGFmdGVyIGFsbCBjYWxsYmFja3MKKyAgICAgICAgICAgICMgaGF2ZSBoYWQgYSBjaGFuY2UgdG8gY2FsbCByZXN1bHQoKSBvciBleGNlcHRpb24oKS4KKyAgICAgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKHNlbGYuX3RiX2xvZ2dlci5hY3RpdmF0ZSkKKworICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuZG9uZSgpOgorICAgICAgICAgICAgc2VsZi5fYmxvY2tpbmcgPSBUcnVlCisgICAgICAgICAgICB5aWVsZCBzZWxmICAjIFRoaXMgdGVsbHMgVGFzayB0byB3YWl0IGZvciBjb21wbGV0aW9uLgorICAgICAgICBhc3NlcnQgc2VsZi5kb25lKCksICJ5aWVsZCBmcm9tIHdhc24ndCB1c2VkIHdpdGggZnV0dXJlIgorICAgICAgICByZXR1cm4gc2VsZi5yZXN1bHQoKSAgIyBNYXkgcmFpc2UgdG9vLgorCisgICAgaWYgY29tcGF0LlBZMzU6CisgICAgICAgIF9fYXdhaXRfXyA9IF9faXRlcl9fICMgbWFrZSBjb21wYXRpYmxlIHdpdGggJ2F3YWl0JyBleHByZXNzaW9uCisKKworZGVmIF9zZXRfcmVzdWx0X3VubGVzc19jYW5jZWxsZWQoZnV0LCByZXN1bHQpOgorICAgICIiIkhlbHBlciBzZXR0aW5nIHRoZSByZXN1bHQgb25seSBpZiB0aGUgZnV0dXJlIHdhcyBub3QgY2FuY2VsbGVkLiIiIgorICAgIGlmIGZ1dC5jYW5jZWxsZWQoKToKKyAgICAgICAgcmV0dXJuCisgICAgZnV0LnNldF9yZXN1bHQocmVzdWx0KQorCisKK2RlZiBfc2V0X2NvbmN1cnJlbnRfZnV0dXJlX3N0YXRlKGNvbmN1cnJlbnQsIHNvdXJjZSk6CisgICAgIiIiQ29weSBzdGF0ZSBmcm9tIGEgZnV0dXJlIHRvIGEgY29uY3VycmVudC5mdXR1cmVzLkZ1dHVyZS4iIiIKKyAgICBhc3NlcnQgc291cmNlLmRvbmUoKQorICAgIGlmIHNvdXJjZS5jYW5jZWxsZWQoKToKKyAgICAgICAgY29uY3VycmVudC5jYW5jZWwoKQorICAgIGlmIG5vdCBjb25jdXJyZW50LnNldF9ydW5uaW5nX29yX25vdGlmeV9jYW5jZWwoKToKKyAgICAgICAgcmV0dXJuCisgICAgZXhjZXB0aW9uID0gc291cmNlLmV4Y2VwdGlvbigpCisgICAgaWYgZXhjZXB0aW9uIGlzIG5vdCBOb25lOgorICAgICAgICBjb25jdXJyZW50LnNldF9leGNlcHRpb24oZXhjZXB0aW9uKQorICAgIGVsc2U6CisgICAgICAgIHJlc3VsdCA9IHNvdXJjZS5yZXN1bHQoKQorICAgICAgICBjb25jdXJyZW50LnNldF9yZXN1bHQocmVzdWx0KQorCisKK2RlZiBfY29weV9mdXR1cmVfc3RhdGUoc291cmNlLCBkZXN0KToKKyAgICAiIiJJbnRlcm5hbCBoZWxwZXIgdG8gY29weSBzdGF0ZSBmcm9tIGFub3RoZXIgRnV0dXJlLgorCisgICAgVGhlIG90aGVyIEZ1dHVyZSBtYXkgYmUgYSBjb25jdXJyZW50LmZ1dHVyZXMuRnV0dXJlLgorICAgICIiIgorICAgIGFzc2VydCBzb3VyY2UuZG9uZSgpCisgICAgaWYgZGVzdC5jYW5jZWxsZWQoKToKKyAgICAgICAgcmV0dXJuCisgICAgYXNzZXJ0IG5vdCBkZXN0LmRvbmUoKQorICAgIGlmIHNvdXJjZS5jYW5jZWxsZWQoKToKKyAgICAgICAgZGVzdC5jYW5jZWwoKQorICAgIGVsc2U6CisgICAgICAgIGV4Y2VwdGlvbiA9IHNvdXJjZS5leGNlcHRpb24oKQorICAgICAgICBpZiBleGNlcHRpb24gaXMgbm90IE5vbmU6CisgICAgICAgICAgICBkZXN0LnNldF9leGNlcHRpb24oZXhjZXB0aW9uKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmVzdWx0ID0gc291cmNlLnJlc3VsdCgpCisgICAgICAgICAgICBkZXN0LnNldF9yZXN1bHQocmVzdWx0KQorCisKK2RlZiBfY2hhaW5fZnV0dXJlKHNvdXJjZSwgZGVzdGluYXRpb24pOgorICAgICIiIkNoYWluIHR3byBmdXR1cmVzIHNvIHRoYXQgd2hlbiBvbmUgY29tcGxldGVzLCBzbyBkb2VzIHRoZSBvdGhlci4KKworICAgIFRoZSByZXN1bHQgKG9yIGV4Y2VwdGlvbikgb2Ygc291cmNlIHdpbGwgYmUgY29waWVkIHRvIGRlc3RpbmF0aW9uLgorICAgIElmIGRlc3RpbmF0aW9uIGlzIGNhbmNlbGxlZCwgc291cmNlIGdldHMgY2FuY2VsbGVkIHRvby4KKyAgICBDb21wYXRpYmxlIHdpdGggYm90aCBhc3luY2lvLkZ1dHVyZSBhbmQgY29uY3VycmVudC5mdXR1cmVzLkZ1dHVyZS4KKyAgICAiIiIKKyAgICBpZiBub3QgaXNpbnN0YW5jZShzb3VyY2UsIChGdXR1cmUsIGNvbmN1cnJlbnQuZnV0dXJlcy5GdXR1cmUpKToKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdBIGZ1dHVyZSBpcyByZXF1aXJlZCBmb3Igc291cmNlIGFyZ3VtZW50JykKKyAgICBpZiBub3QgaXNpbnN0YW5jZShkZXN0aW5hdGlvbiwgKEZ1dHVyZSwgY29uY3VycmVudC5mdXR1cmVzLkZ1dHVyZSkpOgorICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ0EgZnV0dXJlIGlzIHJlcXVpcmVkIGZvciBkZXN0aW5hdGlvbiBhcmd1bWVudCcpCisgICAgc291cmNlX2xvb3AgPSBzb3VyY2UuX2xvb3AgaWYgaXNpbnN0YW5jZShzb3VyY2UsIEZ1dHVyZSkgZWxzZSBOb25lCisgICAgZGVzdF9sb29wID0gZGVzdGluYXRpb24uX2xvb3AgaWYgaXNpbnN0YW5jZShkZXN0aW5hdGlvbiwgRnV0dXJlKSBlbHNlIE5vbmUKKworICAgIGRlZiBfc2V0X3N0YXRlKGZ1dHVyZSwgb3RoZXIpOgorICAgICAgICBpZiBpc2luc3RhbmNlKGZ1dHVyZSwgRnV0dXJlKToKKyAgICAgICAgICAgIF9jb3B5X2Z1dHVyZV9zdGF0ZShvdGhlciwgZnV0dXJlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgX3NldF9jb25jdXJyZW50X2Z1dHVyZV9zdGF0ZShmdXR1cmUsIG90aGVyKQorCisgICAgZGVmIF9jYWxsX2NoZWNrX2NhbmNlbChkZXN0aW5hdGlvbik6CisgICAgICAgIGlmIGRlc3RpbmF0aW9uLmNhbmNlbGxlZCgpOgorICAgICAgICAgICAgaWYgc291cmNlX2xvb3AgaXMgTm9uZSBvciBzb3VyY2VfbG9vcCBpcyBkZXN0X2xvb3A6CisgICAgICAgICAgICAgICAgc291cmNlLmNhbmNlbCgpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNvdXJjZV9sb29wLmNhbGxfc29vbl90aHJlYWRzYWZlKHNvdXJjZS5jYW5jZWwpCisKKyAgICBkZWYgX2NhbGxfc2V0X3N0YXRlKHNvdXJjZSk6CisgICAgICAgIGlmIGRlc3RfbG9vcCBpcyBOb25lIG9yIGRlc3RfbG9vcCBpcyBzb3VyY2VfbG9vcDoKKyAgICAgICAgICAgIF9zZXRfc3RhdGUoZGVzdGluYXRpb24sIHNvdXJjZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGRlc3RfbG9vcC5jYWxsX3Nvb25fdGhyZWFkc2FmZShfc2V0X3N0YXRlLCBkZXN0aW5hdGlvbiwgc291cmNlKQorCisgICAgZGVzdGluYXRpb24uYWRkX2RvbmVfY2FsbGJhY2soX2NhbGxfY2hlY2tfY2FuY2VsKQorICAgIHNvdXJjZS5hZGRfZG9uZV9jYWxsYmFjayhfY2FsbF9zZXRfc3RhdGUpCisKKworZGVmIHdyYXBfZnV0dXJlKGZ1dHVyZSwgKiwgbG9vcD1Ob25lKToKKyAgICAiIiJXcmFwIGNvbmN1cnJlbnQuZnV0dXJlcy5GdXR1cmUgb2JqZWN0LiIiIgorICAgIGlmIGlzaW5zdGFuY2UoZnV0dXJlLCBGdXR1cmUpOgorICAgICAgICByZXR1cm4gZnV0dXJlCisgICAgYXNzZXJ0IGlzaW5zdGFuY2UoZnV0dXJlLCBjb25jdXJyZW50LmZ1dHVyZXMuRnV0dXJlKSwgXAorICAgICAgICAnY29uY3VycmVudC5mdXR1cmVzLkZ1dHVyZSBpcyBleHBlY3RlZCwgZ290IHshcn0nLmZvcm1hdChmdXR1cmUpCisgICAgbmV3X2Z1dHVyZSA9IEZ1dHVyZShsb29wPWxvb3ApCisgICAgX2NoYWluX2Z1dHVyZShmdXR1cmUsIG5ld19mdXR1cmUpCisgICAgcmV0dXJuIG5ld19mdXR1cmUKZGlmZiAtLWdpdCBhL0xpYi9hc3luY2lvL2xvY2tzLnB5IGIvTGliL2FzeW5jaW8vbG9ja3MucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzRmNmJjMQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9hc3luY2lvL2xvY2tzLnB5CkBAIC0wLDAgKzEsNDcyIEBACisiIiJTeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcy4iIiIKKworX19hbGxfXyA9IFsnTG9jaycsICdFdmVudCcsICdDb25kaXRpb24nLCAnU2VtYXBob3JlJywgJ0JvdW5kZWRTZW1hcGhvcmUnXQorCitpbXBvcnQgY29sbGVjdGlvbnMKKworZnJvbSAuIGltcG9ydCBjb21wYXQKK2Zyb20gLiBpbXBvcnQgZXZlbnRzCitmcm9tIC4gaW1wb3J0IGZ1dHVyZXMKK2Zyb20gLmNvcm91dGluZXMgaW1wb3J0IGNvcm91dGluZQorCisKK2NsYXNzIF9Db250ZXh0TWFuYWdlcjoKKyAgICAiIiJDb250ZXh0IG1hbmFnZXIuCisKKyAgICBUaGlzIGVuYWJsZXMgdGhlIGZvbGxvd2luZyBpZGlvbSBmb3IgYWNxdWlyaW5nIGFuZCByZWxlYXNpbmcgYQorICAgIGxvY2sgYXJvdW5kIGEgYmxvY2s6CisKKyAgICAgICAgd2l0aCAoeWllbGQgZnJvbSBsb2NrKToKKyAgICAgICAgICAgIDxibG9jaz4KKworICAgIHdoaWxlIGZhaWxpbmcgbG91ZGx5IHdoZW4gYWNjaWRlbnRhbGx5IHVzaW5nOgorCisgICAgICAgIHdpdGggbG9jazoKKyAgICAgICAgICAgIDxibG9jaz4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb2NrKToKKyAgICAgICAgc2VsZi5fbG9jayA9IGxvY2sKKworICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgICMgV2UgaGF2ZSBubyB1c2UgZm9yIHRoZSAiYXMgLi4uIiAgY2xhdXNlIGluIHRoZSB3aXRoCisgICAgICAgICMgc3RhdGVtZW50IGZvciBsb2Nrcy4KKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqYXJncyk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX2xvY2sucmVsZWFzZSgpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLl9sb2NrID0gTm9uZSAgIyBDcnVkZWx5IHByZXZlbnQgcmV1c2UuCisKKworY2xhc3MgX0NvbnRleHRNYW5hZ2VyTWl4aW46CisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKAorICAgICAgICAgICAgJyJ5aWVsZCBmcm9tIiBzaG91bGQgYmUgdXNlZCBhcyBjb250ZXh0IG1hbmFnZXIgZXhwcmVzc2lvbicpCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgKmFyZ3MpOgorICAgICAgICAjIFRoaXMgbXVzdCBleGlzdCBiZWNhdXNlIF9fZW50ZXJfXyBleGlzdHMsIGV2ZW4gdGhvdWdoIHRoYXQKKyAgICAgICAgIyBhbHdheXMgcmFpc2VzOyB0aGF0J3MgaG93IHRoZSB3aXRoLXN0YXRlbWVudCB3b3Jrcy4KKyAgICAgICAgcGFzcworCisgICAgQGNvcm91dGluZQorICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgIyBUaGlzIGlzIG5vdCBhIGNvcm91dGluZS4gIEl0IGlzIG1lYW50IHRvIGVuYWJsZSB0aGUgaWRpb206CisgICAgICAgICMKKyAgICAgICAgIyAgICAgd2l0aCAoeWllbGQgZnJvbSBsb2NrKToKKyAgICAgICAgIyAgICAgICAgIDxibG9jaz4KKyAgICAgICAgIworICAgICAgICAjIGFzIGFuIGFsdGVybmF0aXZlIHRvOgorICAgICAgICAjCisgICAgICAgICMgICAgIHlpZWxkIGZyb20gbG9jay5hY3F1aXJlKCkKKyAgICAgICAgIyAgICAgdHJ5OgorICAgICAgICAjICAgICAgICAgPGJsb2NrPgorICAgICAgICAjICAgICBmaW5hbGx5OgorICAgICAgICAjICAgICAgICAgbG9jay5yZWxlYXNlKCkKKyAgICAgICAgeWllbGQgZnJvbSBzZWxmLmFjcXVpcmUoKQorICAgICAgICByZXR1cm4gX0NvbnRleHRNYW5hZ2VyKHNlbGYpCisKKyAgICBpZiBjb21wYXQuUFkzNToKKworICAgICAgICBkZWYgX19hd2FpdF9fKHNlbGYpOgorICAgICAgICAgICAgIyBUbyBtYWtlICJ3aXRoIGF3YWl0IGxvY2siIHdvcmsuCisgICAgICAgICAgICB5aWVsZCBmcm9tIHNlbGYuYWNxdWlyZSgpCisgICAgICAgICAgICByZXR1cm4gX0NvbnRleHRNYW5hZ2VyKHNlbGYpCisKKyAgICAgICAgQGNvcm91dGluZQorICAgICAgICBkZWYgX19hZW50ZXJfXyhzZWxmKToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gc2VsZi5hY3F1aXJlKCkKKyAgICAgICAgICAgICMgV2UgaGF2ZSBubyB1c2UgZm9yIHRoZSAiYXMgLi4uIiAgY2xhdXNlIGluIHRoZSB3aXRoCisgICAgICAgICAgICAjIHN0YXRlbWVudCBmb3IgbG9ja3MuCisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgIEBjb3JvdXRpbmUKKyAgICAgICAgZGVmIF9fYWV4aXRfXyhzZWxmLCBleGNfdHlwZSwgZXhjLCB0Yik6CisgICAgICAgICAgICBzZWxmLnJlbGVhc2UoKQorCisKK2NsYXNzIExvY2soX0NvbnRleHRNYW5hZ2VyTWl4aW4pOgorICAgICIiIlByaW1pdGl2ZSBsb2NrIG9iamVjdHMuCisKKyAgICBBIHByaW1pdGl2ZSBsb2NrIGlzIGEgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZSB0aGF0IGlzIG5vdCBvd25lZAorICAgIGJ5IGEgcGFydGljdWxhciBjb3JvdXRpbmUgd2hlbiBsb2NrZWQuICBBIHByaW1pdGl2ZSBsb2NrIGlzIGluIG9uZQorICAgIG9mIHR3byBzdGF0ZXMsICdsb2NrZWQnIG9yICd1bmxvY2tlZCcuCisKKyAgICBJdCBpcyBjcmVhdGVkIGluIHRoZSB1bmxvY2tlZCBzdGF0ZS4gIEl0IGhhcyB0d28gYmFzaWMgbWV0aG9kcywKKyAgICBhY3F1aXJlKCkgYW5kIHJlbGVhc2UoKS4gIFdoZW4gdGhlIHN0YXRlIGlzIHVubG9ja2VkLCBhY3F1aXJlKCkKKyAgICBjaGFuZ2VzIHRoZSBzdGF0ZSB0byBsb2NrZWQgYW5kIHJldHVybnMgaW1tZWRpYXRlbHkuICBXaGVuIHRoZQorICAgIHN0YXRlIGlzIGxvY2tlZCwgYWNxdWlyZSgpIGJsb2NrcyB1bnRpbCBhIGNhbGwgdG8gcmVsZWFzZSgpIGluCisgICAgYW5vdGhlciBjb3JvdXRpbmUgY2hhbmdlcyBpdCB0byB1bmxvY2tlZCwgdGhlbiB0aGUgYWNxdWlyZSgpIGNhbGwKKyAgICByZXNldHMgaXQgdG8gbG9ja2VkIGFuZCByZXR1cm5zLiAgVGhlIHJlbGVhc2UoKSBtZXRob2Qgc2hvdWxkIG9ubHkKKyAgICBiZSBjYWxsZWQgaW4gdGhlIGxvY2tlZCBzdGF0ZTsgaXQgY2hhbmdlcyB0aGUgc3RhdGUgdG8gdW5sb2NrZWQKKyAgICBhbmQgcmV0dXJucyBpbW1lZGlhdGVseS4gIElmIGFuIGF0dGVtcHQgaXMgbWFkZSB0byByZWxlYXNlIGFuCisgICAgdW5sb2NrZWQgbG9jaywgYSBSdW50aW1lRXJyb3Igd2lsbCBiZSByYWlzZWQuCisKKyAgICBXaGVuIG1vcmUgdGhhbiBvbmUgY29yb3V0aW5lIGlzIGJsb2NrZWQgaW4gYWNxdWlyZSgpIHdhaXRpbmcgZm9yCisgICAgdGhlIHN0YXRlIHRvIHR1cm4gdG8gdW5sb2NrZWQsIG9ubHkgb25lIGNvcm91dGluZSBwcm9jZWVkcyB3aGVuIGEKKyAgICByZWxlYXNlKCkgY2FsbCByZXNldHMgdGhlIHN0YXRlIHRvIHVubG9ja2VkOyBmaXJzdCBjb3JvdXRpbmUgd2hpY2gKKyAgICBpcyBibG9ja2VkIGluIGFjcXVpcmUoKSBpcyBiZWluZyBwcm9jZXNzZWQuCisKKyAgICBhY3F1aXJlKCkgaXMgYSBjb3JvdXRpbmUgYW5kIHNob3VsZCBiZSBjYWxsZWQgd2l0aCAneWllbGQgZnJvbScuCisKKyAgICBMb2NrcyBhbHNvIHN1cHBvcnQgdGhlIGNvbnRleHQgbWFuYWdlbWVudCBwcm90b2NvbC4gICcoeWllbGQgZnJvbSBsb2NrKScKKyAgICBzaG91bGQgYmUgdXNlZCBhcyBjb250ZXh0IG1hbmFnZXIgZXhwcmVzc2lvbi4KKworICAgIFVzYWdlOgorCisgICAgICAgIGxvY2sgPSBMb2NrKCkKKyAgICAgICAgLi4uCisgICAgICAgIHlpZWxkIGZyb20gbG9jaworICAgICAgICB0cnk6CisgICAgICAgICAgICAuLi4KKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGxvY2sucmVsZWFzZSgpCisKKyAgICBDb250ZXh0IG1hbmFnZXIgdXNhZ2U6CisKKyAgICAgICAgbG9jayA9IExvY2soKQorICAgICAgICAuLi4KKyAgICAgICAgd2l0aCAoeWllbGQgZnJvbSBsb2NrKToKKyAgICAgICAgICAgICAuLi4KKworICAgIExvY2sgb2JqZWN0cyBjYW4gYmUgdGVzdGVkIGZvciBsb2NraW5nIHN0YXRlOgorCisgICAgICAgIGlmIG5vdCBsb2NrLmxvY2tlZCgpOgorICAgICAgICAgICB5aWVsZCBmcm9tIGxvY2sKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIyBsb2NrIGlzIGFjcXVpcmVkCisgICAgICAgICAgIC4uLgorCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKiwgbG9vcD1Ob25lKToKKyAgICAgICAgc2VsZi5fd2FpdGVycyA9IGNvbGxlY3Rpb25zLmRlcXVlKCkKKyAgICAgICAgc2VsZi5fbG9ja2VkID0gRmFsc2UKKyAgICAgICAgaWYgbG9vcCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2xvb3AgPSBsb29wCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9sb29wID0gZXZlbnRzLmdldF9ldmVudF9sb29wKCkKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmVzID0gc3VwZXIoKS5fX3JlcHJfXygpCisgICAgICAgIGV4dHJhID0gJ2xvY2tlZCcgaWYgc2VsZi5fbG9ja2VkIGVsc2UgJ3VubG9ja2VkJworICAgICAgICBpZiBzZWxmLl93YWl0ZXJzOgorICAgICAgICAgICAgZXh0cmEgPSAne30sd2FpdGVyczp7fScuZm9ybWF0KGV4dHJhLCBsZW4oc2VsZi5fd2FpdGVycykpCisgICAgICAgIHJldHVybiAnPHt9IFt7fV0+Jy5mb3JtYXQocmVzWzE6LTFdLCBleHRyYSkKKworICAgIGRlZiBsb2NrZWQoc2VsZik6CisgICAgICAgICIiIlJldHVybiBUcnVlIGlmIGxvY2sgaXMgYWNxdWlyZWQuIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9sb2NrZWQKKworICAgIEBjb3JvdXRpbmUKKyAgICBkZWYgYWNxdWlyZShzZWxmKToKKyAgICAgICAgIiIiQWNxdWlyZSBhIGxvY2suCisKKyAgICAgICAgVGhpcyBtZXRob2QgYmxvY2tzIHVudGlsIHRoZSBsb2NrIGlzIHVubG9ja2VkLCB0aGVuIHNldHMgaXQgdG8KKyAgICAgICAgbG9ja2VkIGFuZCByZXR1cm5zIFRydWUuCisgICAgICAgICIiIgorICAgICAgICBpZiBub3Qgc2VsZi5fd2FpdGVycyBhbmQgbm90IHNlbGYuX2xvY2tlZDoKKyAgICAgICAgICAgIHNlbGYuX2xvY2tlZCA9IFRydWUKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgZnV0ID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLl9sb29wKQorICAgICAgICBzZWxmLl93YWl0ZXJzLmFwcGVuZChmdXQpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gZnV0CisgICAgICAgICAgICBzZWxmLl9sb2NrZWQgPSBUcnVlCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5fd2FpdGVycy5yZW1vdmUoZnV0KQorCisgICAgZGVmIHJlbGVhc2Uoc2VsZik6CisgICAgICAgICIiIlJlbGVhc2UgYSBsb2NrLgorCisgICAgICAgIFdoZW4gdGhlIGxvY2sgaXMgbG9ja2VkLCByZXNldCBpdCB0byB1bmxvY2tlZCwgYW5kIHJldHVybi4KKyAgICAgICAgSWYgYW55IG90aGVyIGNvcm91dGluZXMgYXJlIGJsb2NrZWQgd2FpdGluZyBmb3IgdGhlIGxvY2sgdG8gYmVjb21lCisgICAgICAgIHVubG9ja2VkLCBhbGxvdyBleGFjdGx5IG9uZSBvZiB0aGVtIHRvIHByb2NlZWQuCisKKyAgICAgICAgV2hlbiBpbnZva2VkIG9uIGFuIHVubG9ja2VkIGxvY2ssIGEgUnVudGltZUVycm9yIGlzIHJhaXNlZC4KKworICAgICAgICBUaGVyZSBpcyBubyByZXR1cm4gdmFsdWUuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl9sb2NrZWQ6CisgICAgICAgICAgICBzZWxmLl9sb2NrZWQgPSBGYWxzZQorICAgICAgICAgICAgIyBXYWtlIHVwIHRoZSBmaXJzdCB3YWl0ZXIgd2hvIGlzbid0IGNhbmNlbGxlZC4KKyAgICAgICAgICAgIGZvciBmdXQgaW4gc2VsZi5fd2FpdGVyczoKKyAgICAgICAgICAgICAgICBpZiBub3QgZnV0LmRvbmUoKToKKyAgICAgICAgICAgICAgICAgICAgZnV0LnNldF9yZXN1bHQoVHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignTG9jayBpcyBub3QgYWNxdWlyZWQuJykKKworCitjbGFzcyBFdmVudDoKKyAgICAiIiJBc3luY2hyb25vdXMgZXF1aXZhbGVudCB0byB0aHJlYWRpbmcuRXZlbnQuCisKKyAgICBDbGFzcyBpbXBsZW1lbnRpbmcgZXZlbnQgb2JqZWN0cy4gQW4gZXZlbnQgbWFuYWdlcyBhIGZsYWcgdGhhdCBjYW4gYmUgc2V0CisgICAgdG8gdHJ1ZSB3aXRoIHRoZSBzZXQoKSBtZXRob2QgYW5kIHJlc2V0IHRvIGZhbHNlIHdpdGggdGhlIGNsZWFyKCkgbWV0aG9kLgorICAgIFRoZSB3YWl0KCkgbWV0aG9kIGJsb2NrcyB1bnRpbCB0aGUgZmxhZyBpcyB0cnVlLiBUaGUgZmxhZyBpcyBpbml0aWFsbHkKKyAgICBmYWxzZS4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqLCBsb29wPU5vbmUpOgorICAgICAgICBzZWxmLl93YWl0ZXJzID0gY29sbGVjdGlvbnMuZGVxdWUoKQorICAgICAgICBzZWxmLl92YWx1ZSA9IEZhbHNlCisgICAgICAgIGlmIGxvb3AgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl9sb29wID0gbG9vcAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fbG9vcCA9IGV2ZW50cy5nZXRfZXZlbnRfbG9vcCgpCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJlcyA9IHN1cGVyKCkuX19yZXByX18oKQorICAgICAgICBleHRyYSA9ICdzZXQnIGlmIHNlbGYuX3ZhbHVlIGVsc2UgJ3Vuc2V0JworICAgICAgICBpZiBzZWxmLl93YWl0ZXJzOgorICAgICAgICAgICAgZXh0cmEgPSAne30sd2FpdGVyczp7fScuZm9ybWF0KGV4dHJhLCBsZW4oc2VsZi5fd2FpdGVycykpCisgICAgICAgIHJldHVybiAnPHt9IFt7fV0+Jy5mb3JtYXQocmVzWzE6LTFdLCBleHRyYSkKKworICAgIGRlZiBpc19zZXQoc2VsZik6CisgICAgICAgICIiIlJldHVybiBUcnVlIGlmIGFuZCBvbmx5IGlmIHRoZSBpbnRlcm5hbCBmbGFnIGlzIHRydWUuIiIiCisgICAgICAgIHJldHVybiBzZWxmLl92YWx1ZQorCisgICAgZGVmIHNldChzZWxmKToKKyAgICAgICAgIiIiU2V0IHRoZSBpbnRlcm5hbCBmbGFnIHRvIHRydWUuIEFsbCBjb3JvdXRpbmVzIHdhaXRpbmcgZm9yIGl0IHRvCisgICAgICAgIGJlY29tZSB0cnVlIGFyZSBhd2FrZW5lZC4gQ29yb3V0aW5lIHRoYXQgY2FsbCB3YWl0KCkgb25jZSB0aGUgZmxhZyBpcworICAgICAgICB0cnVlIHdpbGwgbm90IGJsb2NrIGF0IGFsbC4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCBzZWxmLl92YWx1ZToKKyAgICAgICAgICAgIHNlbGYuX3ZhbHVlID0gVHJ1ZQorCisgICAgICAgICAgICBmb3IgZnV0IGluIHNlbGYuX3dhaXRlcnM6CisgICAgICAgICAgICAgICAgaWYgbm90IGZ1dC5kb25lKCk6CisgICAgICAgICAgICAgICAgICAgIGZ1dC5zZXRfcmVzdWx0KFRydWUpCisKKyAgICBkZWYgY2xlYXIoc2VsZik6CisgICAgICAgICIiIlJlc2V0IHRoZSBpbnRlcm5hbCBmbGFnIHRvIGZhbHNlLiBTdWJzZXF1ZW50bHksIGNvcm91dGluZXMgY2FsbGluZworICAgICAgICB3YWl0KCkgd2lsbCBibG9jayB1bnRpbCBzZXQoKSBpcyBjYWxsZWQgdG8gc2V0IHRoZSBpbnRlcm5hbCBmbGFnCisgICAgICAgIHRvIHRydWUgYWdhaW4uIiIiCisgICAgICAgIHNlbGYuX3ZhbHVlID0gRmFsc2UKKworICAgIEBjb3JvdXRpbmUKKyAgICBkZWYgd2FpdChzZWxmKToKKyAgICAgICAgIiIiQmxvY2sgdW50aWwgdGhlIGludGVybmFsIGZsYWcgaXMgdHJ1ZS4KKworICAgICAgICBJZiB0aGUgaW50ZXJuYWwgZmxhZyBpcyB0cnVlIG9uIGVudHJ5LCByZXR1cm4gVHJ1ZQorICAgICAgICBpbW1lZGlhdGVseS4gIE90aGVyd2lzZSwgYmxvY2sgdW50aWwgYW5vdGhlciBjb3JvdXRpbmUgY2FsbHMKKyAgICAgICAgc2V0KCkgdG8gc2V0IHRoZSBmbGFnIHRvIHRydWUsIHRoZW4gcmV0dXJuIFRydWUuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl92YWx1ZToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgZnV0ID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLl9sb29wKQorICAgICAgICBzZWxmLl93YWl0ZXJzLmFwcGVuZChmdXQpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gZnV0CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5fd2FpdGVycy5yZW1vdmUoZnV0KQorCisKK2NsYXNzIENvbmRpdGlvbihfQ29udGV4dE1hbmFnZXJNaXhpbik6CisgICAgIiIiQXN5bmNocm9ub3VzIGVxdWl2YWxlbnQgdG8gdGhyZWFkaW5nLkNvbmRpdGlvbi4KKworICAgIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBjb25kaXRpb24gdmFyaWFibGUgb2JqZWN0cy4gQSBjb25kaXRpb24gdmFyaWFibGUKKyAgICBhbGxvd3Mgb25lIG9yIG1vcmUgY29yb3V0aW5lcyB0byB3YWl0IHVudGlsIHRoZXkgYXJlIG5vdGlmaWVkIGJ5IGFub3RoZXIKKyAgICBjb3JvdXRpbmUuCisKKyAgICBBIG5ldyBMb2NrIG9iamVjdCBpcyBjcmVhdGVkIGFuZCB1c2VkIGFzIHRoZSB1bmRlcmx5aW5nIGxvY2suCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbG9jaz1Ob25lLCAqLCBsb29wPU5vbmUpOgorICAgICAgICBpZiBsb29wIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fbG9vcCA9IGxvb3AKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX2xvb3AgPSBldmVudHMuZ2V0X2V2ZW50X2xvb3AoKQorCisgICAgICAgIGlmIGxvY2sgaXMgTm9uZToKKyAgICAgICAgICAgIGxvY2sgPSBMb2NrKGxvb3A9c2VsZi5fbG9vcCkKKyAgICAgICAgZWxpZiBsb2NrLl9sb29wIGlzIG5vdCBzZWxmLl9sb29wOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigibG9vcCBhcmd1bWVudCBtdXN0IGFncmVlIHdpdGggbG9jayIpCisKKyAgICAgICAgc2VsZi5fbG9jayA9IGxvY2sKKyAgICAgICAgIyBFeHBvcnQgdGhlIGxvY2sncyBsb2NrZWQoKSwgYWNxdWlyZSgpIGFuZCByZWxlYXNlKCkgbWV0aG9kcy4KKyAgICAgICAgc2VsZi5sb2NrZWQgPSBsb2NrLmxvY2tlZAorICAgICAgICBzZWxmLmFjcXVpcmUgPSBsb2NrLmFjcXVpcmUKKyAgICAgICAgc2VsZi5yZWxlYXNlID0gbG9jay5yZWxlYXNlCisKKyAgICAgICAgc2VsZi5fd2FpdGVycyA9IGNvbGxlY3Rpb25zLmRlcXVlKCkKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmVzID0gc3VwZXIoKS5fX3JlcHJfXygpCisgICAgICAgIGV4dHJhID0gJ2xvY2tlZCcgaWYgc2VsZi5sb2NrZWQoKSBlbHNlICd1bmxvY2tlZCcKKyAgICAgICAgaWYgc2VsZi5fd2FpdGVyczoKKyAgICAgICAgICAgIGV4dHJhID0gJ3t9LHdhaXRlcnM6e30nLmZvcm1hdChleHRyYSwgbGVuKHNlbGYuX3dhaXRlcnMpKQorICAgICAgICByZXR1cm4gJzx7fSBbe31dPicuZm9ybWF0KHJlc1sxOi0xXSwgZXh0cmEpCisKKyAgICBAY29yb3V0aW5lCisgICAgZGVmIHdhaXQoc2VsZik6CisgICAgICAgICIiIldhaXQgdW50aWwgbm90aWZpZWQuCisKKyAgICAgICAgSWYgdGhlIGNhbGxpbmcgY29yb3V0aW5lIGhhcyBub3QgYWNxdWlyZWQgdGhlIGxvY2sgd2hlbiB0aGlzCisgICAgICAgIG1ldGhvZCBpcyBjYWxsZWQsIGEgUnVudGltZUVycm9yIGlzIHJhaXNlZC4KKworICAgICAgICBUaGlzIG1ldGhvZCByZWxlYXNlcyB0aGUgdW5kZXJseWluZyBsb2NrLCBhbmQgdGhlbiBibG9ja3MKKyAgICAgICAgdW50aWwgaXQgaXMgYXdha2VuZWQgYnkgYSBub3RpZnkoKSBvciBub3RpZnlfYWxsKCkgY2FsbCBmb3IKKyAgICAgICAgdGhlIHNhbWUgY29uZGl0aW9uIHZhcmlhYmxlIGluIGFub3RoZXIgY29yb3V0aW5lLiAgT25jZQorICAgICAgICBhd2FrZW5lZCwgaXQgcmUtYWNxdWlyZXMgdGhlIGxvY2sgYW5kIHJldHVybnMgVHJ1ZS4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCBzZWxmLmxvY2tlZCgpOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdjYW5ub3Qgd2FpdCBvbiB1bi1hY3F1aXJlZCBsb2NrJykKKworICAgICAgICBzZWxmLnJlbGVhc2UoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmdXQgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYuX2xvb3ApCisgICAgICAgICAgICBzZWxmLl93YWl0ZXJzLmFwcGVuZChmdXQpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgeWllbGQgZnJvbSBmdXQKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBzZWxmLl93YWl0ZXJzLnJlbW92ZShmdXQpCisKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gc2VsZi5hY3F1aXJlKCkKKworICAgIEBjb3JvdXRpbmUKKyAgICBkZWYgd2FpdF9mb3Ioc2VsZiwgcHJlZGljYXRlKToKKyAgICAgICAgIiIiV2FpdCB1bnRpbCBhIHByZWRpY2F0ZSBiZWNvbWVzIHRydWUuCisKKyAgICAgICAgVGhlIHByZWRpY2F0ZSBzaG91bGQgYmUgYSBjYWxsYWJsZSB3aGljaCByZXN1bHQgd2lsbCBiZQorICAgICAgICBpbnRlcnByZXRlZCBhcyBhIGJvb2xlYW4gdmFsdWUuICBUaGUgZmluYWwgcHJlZGljYXRlIHZhbHVlIGlzCisgICAgICAgIHRoZSByZXR1cm4gdmFsdWUuCisgICAgICAgICIiIgorICAgICAgICByZXN1bHQgPSBwcmVkaWNhdGUoKQorICAgICAgICB3aGlsZSBub3QgcmVzdWx0OgorICAgICAgICAgICAgeWllbGQgZnJvbSBzZWxmLndhaXQoKQorICAgICAgICAgICAgcmVzdWx0ID0gcHJlZGljYXRlKCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVmIG5vdGlmeShzZWxmLCBuPTEpOgorICAgICAgICAiIiJCeSBkZWZhdWx0LCB3YWtlIHVwIG9uZSBjb3JvdXRpbmUgd2FpdGluZyBvbiB0aGlzIGNvbmRpdGlvbiwgaWYgYW55LgorICAgICAgICBJZiB0aGUgY2FsbGluZyBjb3JvdXRpbmUgaGFzIG5vdCBhY3F1aXJlZCB0aGUgbG9jayB3aGVuIHRoaXMgbWV0aG9kCisgICAgICAgIGlzIGNhbGxlZCwgYSBSdW50aW1lRXJyb3IgaXMgcmFpc2VkLgorCisgICAgICAgIFRoaXMgbWV0aG9kIHdha2VzIHVwIGF0IG1vc3QgbiBvZiB0aGUgY29yb3V0aW5lcyB3YWl0aW5nIGZvciB0aGUKKyAgICAgICAgY29uZGl0aW9uIHZhcmlhYmxlOyBpdCBpcyBhIG5vLW9wIGlmIG5vIGNvcm91dGluZXMgYXJlIHdhaXRpbmcuCisKKyAgICAgICAgTm90ZTogYW4gYXdha2VuZWQgY29yb3V0aW5lIGRvZXMgbm90IGFjdHVhbGx5IHJldHVybiBmcm9tIGl0cworICAgICAgICB3YWl0KCkgY2FsbCB1bnRpbCBpdCBjYW4gcmVhY3F1aXJlIHRoZSBsb2NrLiBTaW5jZSBub3RpZnkoKSBkb2VzCisgICAgICAgIG5vdCByZWxlYXNlIHRoZSBsb2NrLCBpdHMgY2FsbGVyIHNob3VsZC4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCBzZWxmLmxvY2tlZCgpOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdjYW5ub3Qgbm90aWZ5IG9uIHVuLWFjcXVpcmVkIGxvY2snKQorCisgICAgICAgIGlkeCA9IDAKKyAgICAgICAgZm9yIGZ1dCBpbiBzZWxmLl93YWl0ZXJzOgorICAgICAgICAgICAgaWYgaWR4ID49IG46CisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgaWYgbm90IGZ1dC5kb25lKCk6CisgICAgICAgICAgICAgICAgaWR4ICs9IDEKKyAgICAgICAgICAgICAgICBmdXQuc2V0X3Jlc3VsdChGYWxzZSkKKworICAgIGRlZiBub3RpZnlfYWxsKHNlbGYpOgorICAgICAgICAiIiJXYWtlIHVwIGFsbCB0aHJlYWRzIHdhaXRpbmcgb24gdGhpcyBjb25kaXRpb24uIFRoaXMgbWV0aG9kIGFjdHMKKyAgICAgICAgbGlrZSBub3RpZnkoKSwgYnV0IHdha2VzIHVwIGFsbCB3YWl0aW5nIHRocmVhZHMgaW5zdGVhZCBvZiBvbmUuIElmIHRoZQorICAgICAgICBjYWxsaW5nIHRocmVhZCBoYXMgbm90IGFjcXVpcmVkIHRoZSBsb2NrIHdoZW4gdGhpcyBtZXRob2QgaXMgY2FsbGVkLAorICAgICAgICBhIFJ1bnRpbWVFcnJvciBpcyByYWlzZWQuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLm5vdGlmeShsZW4oc2VsZi5fd2FpdGVycykpCisKKworY2xhc3MgU2VtYXBob3JlKF9Db250ZXh0TWFuYWdlck1peGluKToKKyAgICAiIiJBIFNlbWFwaG9yZSBpbXBsZW1lbnRhdGlvbi4KKworICAgIEEgc2VtYXBob3JlIG1hbmFnZXMgYW4gaW50ZXJuYWwgY291bnRlciB3aGljaCBpcyBkZWNyZW1lbnRlZCBieSBlYWNoCisgICAgYWNxdWlyZSgpIGNhbGwgYW5kIGluY3JlbWVudGVkIGJ5IGVhY2ggcmVsZWFzZSgpIGNhbGwuIFRoZSBjb3VudGVyCisgICAgY2FuIG5ldmVyIGdvIGJlbG93IHplcm87IHdoZW4gYWNxdWlyZSgpIGZpbmRzIHRoYXQgaXQgaXMgemVybywgaXQgYmxvY2tzLAorICAgIHdhaXRpbmcgdW50aWwgc29tZSBvdGhlciB0aHJlYWQgY2FsbHMgcmVsZWFzZSgpLgorCisgICAgU2VtYXBob3JlcyBhbHNvIHN1cHBvcnQgdGhlIGNvbnRleHQgbWFuYWdlbWVudCBwcm90b2NvbC4KKworICAgIFRoZSBvcHRpb25hbCBhcmd1bWVudCBnaXZlcyB0aGUgaW5pdGlhbCB2YWx1ZSBmb3IgdGhlIGludGVybmFsCisgICAgY291bnRlcjsgaXQgZGVmYXVsdHMgdG8gMS4gSWYgdGhlIHZhbHVlIGdpdmVuIGlzIGxlc3MgdGhhbiAwLAorICAgIFZhbHVlRXJyb3IgaXMgcmFpc2VkLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlPTEsICosIGxvb3A9Tm9uZSk6CisgICAgICAgIGlmIHZhbHVlIDwgMDoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIlNlbWFwaG9yZSBpbml0aWFsIHZhbHVlIG11c3QgYmUgPj0gMCIpCisgICAgICAgIHNlbGYuX3ZhbHVlID0gdmFsdWUKKyAgICAgICAgc2VsZi5fd2FpdGVycyA9IGNvbGxlY3Rpb25zLmRlcXVlKCkKKyAgICAgICAgaWYgbG9vcCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2xvb3AgPSBsb29wCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9sb29wID0gZXZlbnRzLmdldF9ldmVudF9sb29wKCkKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmVzID0gc3VwZXIoKS5fX3JlcHJfXygpCisgICAgICAgIGV4dHJhID0gJ2xvY2tlZCcgaWYgc2VsZi5sb2NrZWQoKSBlbHNlICd1bmxvY2tlZCx2YWx1ZTp7fScuZm9ybWF0KAorICAgICAgICAgICAgc2VsZi5fdmFsdWUpCisgICAgICAgIGlmIHNlbGYuX3dhaXRlcnM6CisgICAgICAgICAgICBleHRyYSA9ICd7fSx3YWl0ZXJzOnt9Jy5mb3JtYXQoZXh0cmEsIGxlbihzZWxmLl93YWl0ZXJzKSkKKyAgICAgICAgcmV0dXJuICc8e30gW3t9XT4nLmZvcm1hdChyZXNbMTotMV0sIGV4dHJhKQorCisgICAgZGVmIF93YWtlX3VwX25leHQoc2VsZik6CisgICAgICAgIHdoaWxlIHNlbGYuX3dhaXRlcnM6CisgICAgICAgICAgICB3YWl0ZXIgPSBzZWxmLl93YWl0ZXJzLnBvcGxlZnQoKQorICAgICAgICAgICAgaWYgbm90IHdhaXRlci5kb25lKCk6CisgICAgICAgICAgICAgICAgd2FpdGVyLnNldF9yZXN1bHQoTm9uZSkKKyAgICAgICAgICAgICAgICByZXR1cm4KKworICAgIGRlZiBsb2NrZWQoc2VsZik6CisgICAgICAgICIiIlJldHVybnMgVHJ1ZSBpZiBzZW1hcGhvcmUgY2FuIG5vdCBiZSBhY3F1aXJlZCBpbW1lZGlhdGVseS4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX3ZhbHVlID09IDAKKworICAgIEBjb3JvdXRpbmUKKyAgICBkZWYgYWNxdWlyZShzZWxmKToKKyAgICAgICAgIiIiQWNxdWlyZSBhIHNlbWFwaG9yZS4KKworICAgICAgICBJZiB0aGUgaW50ZXJuYWwgY291bnRlciBpcyBsYXJnZXIgdGhhbiB6ZXJvIG9uIGVudHJ5LAorICAgICAgICBkZWNyZW1lbnQgaXQgYnkgb25lIGFuZCByZXR1cm4gVHJ1ZSBpbW1lZGlhdGVseS4gIElmIGl0IGlzCisgICAgICAgIHplcm8gb24gZW50cnksIGJsb2NrLCB3YWl0aW5nIHVudGlsIHNvbWUgb3RoZXIgY29yb3V0aW5lIGhhcworICAgICAgICBjYWxsZWQgcmVsZWFzZSgpIHRvIG1ha2UgaXQgbGFyZ2VyIHRoYW4gMCwgYW5kIHRoZW4gcmV0dXJuCisgICAgICAgIFRydWUuCisgICAgICAgICIiIgorICAgICAgICB3aGlsZSBzZWxmLl92YWx1ZSA8PSAwOgorICAgICAgICAgICAgZnV0ID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLl9sb29wKQorICAgICAgICAgICAgc2VsZi5fd2FpdGVycy5hcHBlbmQoZnV0KQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gZnV0CisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgIyBTZWUgdGhlIHNpbWlsYXIgY29kZSBpbiBRdWV1ZS5nZXQuCisgICAgICAgICAgICAgICAgZnV0LmNhbmNlbCgpCisgICAgICAgICAgICAgICAgaWYgc2VsZi5fdmFsdWUgPiAwIGFuZCBub3QgZnV0LmNhbmNlbGxlZCgpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl93YWtlX3VwX25leHQoKQorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgIHNlbGYuX3ZhbHVlIC09IDEKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiByZWxlYXNlKHNlbGYpOgorICAgICAgICAiIiJSZWxlYXNlIGEgc2VtYXBob3JlLCBpbmNyZW1lbnRpbmcgdGhlIGludGVybmFsIGNvdW50ZXIgYnkgb25lLgorICAgICAgICBXaGVuIGl0IHdhcyB6ZXJvIG9uIGVudHJ5IGFuZCBhbm90aGVyIGNvcm91dGluZSBpcyB3YWl0aW5nIGZvciBpdCB0bworICAgICAgICBiZWNvbWUgbGFyZ2VyIHRoYW4gemVybyBhZ2Fpbiwgd2FrZSB1cCB0aGF0IGNvcm91dGluZS4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX3ZhbHVlICs9IDEKKyAgICAgICAgc2VsZi5fd2FrZV91cF9uZXh0KCkKKworCitjbGFzcyBCb3VuZGVkU2VtYXBob3JlKFNlbWFwaG9yZSk6CisgICAgIiIiQSBib3VuZGVkIHNlbWFwaG9yZSBpbXBsZW1lbnRhdGlvbi4KKworICAgIFRoaXMgcmFpc2VzIFZhbHVlRXJyb3IgaW4gcmVsZWFzZSgpIGlmIGl0IHdvdWxkIGluY3JlYXNlIHRoZSB2YWx1ZQorICAgIGFib3ZlIHRoZSBpbml0aWFsIHZhbHVlLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlPTEsICosIGxvb3A9Tm9uZSk6CisgICAgICAgIHNlbGYuX2JvdW5kX3ZhbHVlID0gdmFsdWUKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXyh2YWx1ZSwgbG9vcD1sb29wKQorCisgICAgZGVmIHJlbGVhc2Uoc2VsZik6CisgICAgICAgIGlmIHNlbGYuX3ZhbHVlID49IHNlbGYuX2JvdW5kX3ZhbHVlOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignQm91bmRlZFNlbWFwaG9yZSByZWxlYXNlZCB0b28gbWFueSB0aW1lcycpCisgICAgICAgIHN1cGVyKCkucmVsZWFzZSgpCmRpZmYgLS1naXQgYS9MaWIvYXN5bmNpby9sb2cucHkgYi9MaWIvYXN5bmNpby9sb2cucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNhNzA3NAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9hc3luY2lvL2xvZy5weQpAQCAtMCwwICsxLDcgQEAKKyIiIkxvZ2dpbmcgY29uZmlndXJhdGlvbi4iIiIKKworaW1wb3J0IGxvZ2dpbmcKKworCisjIE5hbWUgdGhlIGxvZ2dlciBhZnRlciB0aGUgcGFja2FnZS4KK2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fcGFja2FnZV9fKQpkaWZmIC0tZ2l0IGEvTGliL2FzeW5jaW8vcHJvYWN0b3JfZXZlbnRzLnB5IGIvTGliL2FzeW5jaW8vcHJvYWN0b3JfZXZlbnRzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0YzA2NTkKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvYXN5bmNpby9wcm9hY3Rvcl9ldmVudHMucHkKQEAgLTAsMCArMSw1NTAgQEAKKyIiIkV2ZW50IGxvb3AgdXNpbmcgYSBwcm9hY3RvciBhbmQgcmVsYXRlZCBjbGFzc2VzLgorCitBIHByb2FjdG9yIGlzIGEgIm5vdGlmeS1vbi1jb21wbGV0aW9uIiBtdWx0aXBsZXhlci4gIEN1cnJlbnRseSBhCitwcm9hY3RvciBpcyBvbmx5IGltcGxlbWVudGVkIG9uIFdpbmRvd3Mgd2l0aCBJT0NQLgorIiIiCisKK19fYWxsX18gPSBbJ0Jhc2VQcm9hY3RvckV2ZW50TG9vcCddCisKK2ltcG9ydCBzb2NrZXQKK2ltcG9ydCB3YXJuaW5ncworCitmcm9tIC4gaW1wb3J0IGJhc2VfZXZlbnRzCitmcm9tIC4gaW1wb3J0IGNvbXBhdAorZnJvbSAuIGltcG9ydCBjb25zdGFudHMKK2Zyb20gLiBpbXBvcnQgZnV0dXJlcworZnJvbSAuIGltcG9ydCBzc2xwcm90bworZnJvbSAuIGltcG9ydCB0cmFuc3BvcnRzCitmcm9tIC5sb2cgaW1wb3J0IGxvZ2dlcgorCisKK2NsYXNzIF9Qcm9hY3RvckJhc2VQaXBlVHJhbnNwb3J0KHRyYW5zcG9ydHMuX0Zsb3dDb250cm9sTWl4aW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc3BvcnRzLkJhc2VUcmFuc3BvcnQpOgorICAgICIiIkJhc2UgY2xhc3MgZm9yIHBpcGUgYW5kIHNvY2tldCB0cmFuc3BvcnRzLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxvb3AsIHNvY2ssIHByb3RvY29sLCB3YWl0ZXI9Tm9uZSwKKyAgICAgICAgICAgICAgICAgZXh0cmE9Tm9uZSwgc2VydmVyPU5vbmUpOgorICAgICAgICBzdXBlcigpLl9faW5pdF9fKGV4dHJhLCBsb29wKQorICAgICAgICBzZWxmLl9zZXRfZXh0cmEoc29jaykKKyAgICAgICAgc2VsZi5fc29jayA9IHNvY2sKKyAgICAgICAgc2VsZi5fcHJvdG9jb2wgPSBwcm90b2NvbAorICAgICAgICBzZWxmLl9zZXJ2ZXIgPSBzZXJ2ZXIKKyAgICAgICAgc2VsZi5fYnVmZmVyID0gTm9uZSAgIyBOb25lIG9yIGJ5dGVhcnJheS4KKyAgICAgICAgc2VsZi5fcmVhZF9mdXQgPSBOb25lCisgICAgICAgIHNlbGYuX3dyaXRlX2Z1dCA9IE5vbmUKKyAgICAgICAgc2VsZi5fcGVuZGluZ193cml0ZSA9IDAKKyAgICAgICAgc2VsZi5fY29ubl9sb3N0ID0gMAorICAgICAgICBzZWxmLl9jbG9zaW5nID0gRmFsc2UgICMgU2V0IHdoZW4gY2xvc2UoKSBjYWxsZWQuCisgICAgICAgIHNlbGYuX2VvZl93cml0dGVuID0gRmFsc2UKKyAgICAgICAgaWYgc2VsZi5fc2VydmVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fc2VydmVyLl9hdHRhY2goKQorICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbihzZWxmLl9wcm90b2NvbC5jb25uZWN0aW9uX21hZGUsIHNlbGYpCisgICAgICAgIGlmIHdhaXRlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICMgb25seSB3YWtlIHVwIHRoZSB3YWl0ZXIgd2hlbiBjb25uZWN0aW9uX21hZGUoKSBoYXMgYmVlbiBjYWxsZWQKKyAgICAgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKGZ1dHVyZXMuX3NldF9yZXN1bHRfdW5sZXNzX2NhbmNlbGxlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhaXRlciwgTm9uZSkKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgaW5mbyA9IFtzZWxmLl9fY2xhc3NfXy5fX25hbWVfX10KKyAgICAgICAgaWYgc2VsZi5fc29jayBpcyBOb25lOgorICAgICAgICAgICAgaW5mby5hcHBlbmQoJ2Nsb3NlZCcpCisgICAgICAgIGVsaWYgc2VsZi5fY2xvc2luZzoKKyAgICAgICAgICAgIGluZm8uYXBwZW5kKCdjbG9zaW5nJykKKyAgICAgICAgaWYgc2VsZi5fc29jayBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGluZm8uYXBwZW5kKCdmZD0lcycgJSBzZWxmLl9zb2NrLmZpbGVubygpKQorICAgICAgICBpZiBzZWxmLl9yZWFkX2Z1dCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGluZm8uYXBwZW5kKCdyZWFkPSVzJyAlIHNlbGYuX3JlYWRfZnV0KQorICAgICAgICBpZiBzZWxmLl93cml0ZV9mdXQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBpbmZvLmFwcGVuZCgid3JpdGU9JXIiICUgc2VsZi5fd3JpdGVfZnV0KQorICAgICAgICBpZiBzZWxmLl9idWZmZXI6CisgICAgICAgICAgICBidWZzaXplID0gbGVuKHNlbGYuX2J1ZmZlcikKKyAgICAgICAgICAgIGluZm8uYXBwZW5kKCd3cml0ZV9idWZzaXplPSVzJyAlIGJ1ZnNpemUpCisgICAgICAgIGlmIHNlbGYuX2VvZl93cml0dGVuOgorICAgICAgICAgICAgaW5mby5hcHBlbmQoJ0VPRiB3cml0dGVuJykKKyAgICAgICAgcmV0dXJuICc8JXM+JyAlICcgJy5qb2luKGluZm8pCisKKyAgICBkZWYgX3NldF9leHRyYShzZWxmLCBzb2NrKToKKyAgICAgICAgc2VsZi5fZXh0cmFbJ3BpcGUnXSA9IHNvY2sKKworICAgIGRlZiBpc19jbG9zaW5nKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fY2xvc2luZworCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9jbG9zaW5nOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYuX2Nsb3NpbmcgPSBUcnVlCisgICAgICAgIHNlbGYuX2Nvbm5fbG9zdCArPSAxCisgICAgICAgIGlmIG5vdCBzZWxmLl9idWZmZXIgYW5kIHNlbGYuX3dyaXRlX2Z1dCBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24oc2VsZi5fY2FsbF9jb25uZWN0aW9uX2xvc3QsIE5vbmUpCisgICAgICAgIGlmIHNlbGYuX3JlYWRfZnV0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fcmVhZF9mdXQuY2FuY2VsKCkKKyAgICAgICAgICAgIHNlbGYuX3JlYWRfZnV0ID0gTm9uZQorCisgICAgIyBPbiBQeXRob24gMy4zIGFuZCBvbGRlciwgb2JqZWN0cyB3aXRoIGEgZGVzdHJ1Y3RvciBwYXJ0IG9mIGEgcmVmZXJlbmNlCisgICAgIyBjeWNsZSBhcmUgbmV2ZXIgZGVzdHJveWVkLiBJdCdzIG5vdCBtb3JlIHRoZSBjYXNlIG9uIFB5dGhvbiAzLjQgdGhhbmtzCisgICAgIyB0byB0aGUgUEVQIDQ0Mi4KKyAgICBpZiBjb21wYXQuUFkzNDoKKyAgICAgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgICAgICBpZiBzZWxmLl9zb2NrIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oInVuY2xvc2VkIHRyYW5zcG9ydCAlciIgJSBzZWxmLCBSZXNvdXJjZVdhcm5pbmcpCisgICAgICAgICAgICAgICAgc2VsZi5jbG9zZSgpCisKKyAgICBkZWYgX2ZhdGFsX2Vycm9yKHNlbGYsIGV4YywgbWVzc2FnZT0nRmF0YWwgZXJyb3Igb24gcGlwZSB0cmFuc3BvcnQnKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShleGMsIChCcm9rZW5QaXBlRXJyb3IsIENvbm5lY3Rpb25SZXNldEVycm9yKSk6CisgICAgICAgICAgICBpZiBzZWxmLl9sb29wLmdldF9kZWJ1ZygpOgorICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygiJXI6ICVzIiwgc2VsZiwgbWVzc2FnZSwgZXhjX2luZm89VHJ1ZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9leGNlcHRpb25faGFuZGxlcih7CisgICAgICAgICAgICAgICAgJ21lc3NhZ2UnOiBtZXNzYWdlLAorICAgICAgICAgICAgICAgICdleGNlcHRpb24nOiBleGMsCisgICAgICAgICAgICAgICAgJ3RyYW5zcG9ydCc6IHNlbGYsCisgICAgICAgICAgICAgICAgJ3Byb3RvY29sJzogc2VsZi5fcHJvdG9jb2wsCisgICAgICAgICAgICB9KQorICAgICAgICBzZWxmLl9mb3JjZV9jbG9zZShleGMpCisKKyAgICBkZWYgX2ZvcmNlX2Nsb3NlKHNlbGYsIGV4Yyk6CisgICAgICAgIGlmIHNlbGYuX2Nsb3Npbmc6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5fY2xvc2luZyA9IFRydWUKKyAgICAgICAgc2VsZi5fY29ubl9sb3N0ICs9IDEKKyAgICAgICAgaWYgc2VsZi5fd3JpdGVfZnV0OgorICAgICAgICAgICAgc2VsZi5fd3JpdGVfZnV0LmNhbmNlbCgpCisgICAgICAgICAgICBzZWxmLl93cml0ZV9mdXQgPSBOb25lCisgICAgICAgIGlmIHNlbGYuX3JlYWRfZnV0OgorICAgICAgICAgICAgc2VsZi5fcmVhZF9mdXQuY2FuY2VsKCkKKyAgICAgICAgICAgIHNlbGYuX3JlYWRfZnV0ID0gTm9uZQorICAgICAgICBzZWxmLl9wZW5kaW5nX3dyaXRlID0gMAorICAgICAgICBzZWxmLl9idWZmZXIgPSBOb25lCisgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKHNlbGYuX2NhbGxfY29ubmVjdGlvbl9sb3N0LCBleGMpCisKKyAgICBkZWYgX2NhbGxfY29ubmVjdGlvbl9sb3N0KHNlbGYsIGV4Yyk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX3Byb3RvY29sLmNvbm5lY3Rpb25fbG9zdChleGMpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAjIFhYWCBJZiB0aGVyZSBpcyBhIHBlbmRpbmcgb3ZlcmxhcHBlZCByZWFkIG9uIHRoZSBvdGhlcgorICAgICAgICAgICAgIyBlbmQgdGhlbiBpdCBtYXkgZmFpbCB3aXRoIEVSUk9SX05FVE5BTUVfREVMRVRFRCBpZiB3ZQorICAgICAgICAgICAgIyBqdXN0IGNsb3NlIG91ciBlbmQuICBGaXJzdCBjYWxsaW5nIHNodXRkb3duKCkgc2VlbXMgdG8KKyAgICAgICAgICAgICMgY3VyZSBpdCwgYnV0IG1heWJlIHVzaW5nIERpc2Nvbm5lY3RFeCgpIHdvdWxkIGJlIGJldHRlci4KKyAgICAgICAgICAgIGlmIGhhc2F0dHIoc2VsZi5fc29jaywgJ3NodXRkb3duJyk6CisgICAgICAgICAgICAgICAgc2VsZi5fc29jay5zaHV0ZG93bihzb2NrZXQuU0hVVF9SRFdSKQorICAgICAgICAgICAgc2VsZi5fc29jay5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLl9zb2NrID0gTm9uZQorICAgICAgICAgICAgc2VydmVyID0gc2VsZi5fc2VydmVyCisgICAgICAgICAgICBpZiBzZXJ2ZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgc2VydmVyLl9kZXRhY2goKQorICAgICAgICAgICAgICAgIHNlbGYuX3NlcnZlciA9IE5vbmUKKworICAgIGRlZiBnZXRfd3JpdGVfYnVmZmVyX3NpemUoc2VsZik6CisgICAgICAgIHNpemUgPSBzZWxmLl9wZW5kaW5nX3dyaXRlCisgICAgICAgIGlmIHNlbGYuX2J1ZmZlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNpemUgKz0gbGVuKHNlbGYuX2J1ZmZlcikKKyAgICAgICAgcmV0dXJuIHNpemUKKworCitjbGFzcyBfUHJvYWN0b3JSZWFkUGlwZVRyYW5zcG9ydChfUHJvYWN0b3JCYXNlUGlwZVRyYW5zcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zcG9ydHMuUmVhZFRyYW5zcG9ydCk6CisgICAgIiIiVHJhbnNwb3J0IGZvciByZWFkIHBpcGVzLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxvb3AsIHNvY2ssIHByb3RvY29sLCB3YWl0ZXI9Tm9uZSwKKyAgICAgICAgICAgICAgICAgZXh0cmE9Tm9uZSwgc2VydmVyPU5vbmUpOgorICAgICAgICBzdXBlcigpLl9faW5pdF9fKGxvb3AsIHNvY2ssIHByb3RvY29sLCB3YWl0ZXIsIGV4dHJhLCBzZXJ2ZXIpCisgICAgICAgIHNlbGYuX3BhdXNlZCA9IEZhbHNlCisgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKHNlbGYuX2xvb3BfcmVhZGluZykKKworICAgIGRlZiBwYXVzZV9yZWFkaW5nKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9jbG9zaW5nOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdDYW5ub3QgcGF1c2VfcmVhZGluZygpIHdoZW4gY2xvc2luZycpCisgICAgICAgIGlmIHNlbGYuX3BhdXNlZDoKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignQWxyZWFkeSBwYXVzZWQnKQorICAgICAgICBzZWxmLl9wYXVzZWQgPSBUcnVlCisgICAgICAgIGlmIHNlbGYuX2xvb3AuZ2V0X2RlYnVnKCk6CisgICAgICAgICAgICBsb2dnZXIuZGVidWcoIiVyIHBhdXNlcyByZWFkaW5nIiwgc2VsZikKKworICAgIGRlZiByZXN1bWVfcmVhZGluZyhzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuX3BhdXNlZDoKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignTm90IHBhdXNlZCcpCisgICAgICAgIHNlbGYuX3BhdXNlZCA9IEZhbHNlCisgICAgICAgIGlmIHNlbGYuX2Nsb3Npbmc6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24oc2VsZi5fbG9vcF9yZWFkaW5nLCBzZWxmLl9yZWFkX2Z1dCkKKyAgICAgICAgaWYgc2VsZi5fbG9vcC5nZXRfZGVidWcoKToKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygiJXIgcmVzdW1lcyByZWFkaW5nIiwgc2VsZikKKworICAgIGRlZiBfbG9vcF9yZWFkaW5nKHNlbGYsIGZ1dD1Ob25lKToKKyAgICAgICAgaWYgc2VsZi5fcGF1c2VkOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGRhdGEgPSBOb25lCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgZnV0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGFzc2VydCBzZWxmLl9yZWFkX2Z1dCBpcyBmdXQgb3IgKHNlbGYuX3JlYWRfZnV0IGlzIE5vbmUgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fY2xvc2luZykKKyAgICAgICAgICAgICAgICBzZWxmLl9yZWFkX2Z1dCA9IE5vbmUKKyAgICAgICAgICAgICAgICBkYXRhID0gZnV0LnJlc3VsdCgpICAjIGRlbGl2ZXIgZGF0YSBsYXRlciBpbiAiZmluYWxseSIgY2xhdXNlCisKKyAgICAgICAgICAgIGlmIHNlbGYuX2Nsb3Npbmc6CisgICAgICAgICAgICAgICAgIyBzaW5jZSBjbG9zZSgpIGhhcyBiZWVuIGNhbGxlZCB3ZSBpZ25vcmUgYW55IHJlYWQgZGF0YQorICAgICAgICAgICAgICAgIGRhdGEgPSBOb25lCisgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgICAgIGlmIGRhdGEgPT0gYicnOgorICAgICAgICAgICAgICAgICMgd2UgZ290IGVuZC1vZi1maWxlIHNvIG5vIG5lZWQgdG8gcmVzY2hlZHVsZSBhIG5ldyByZWFkCisgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgICAgICMgcmVzY2hlZHVsZSBhIG5ldyByZWFkCisgICAgICAgICAgICBzZWxmLl9yZWFkX2Z1dCA9IHNlbGYuX2xvb3AuX3Byb2FjdG9yLnJlY3Yoc2VsZi5fc29jaywgNDA5NikKKyAgICAgICAgZXhjZXB0IENvbm5lY3Rpb25BYm9ydGVkRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgaWYgbm90IHNlbGYuX2Nsb3Npbmc6CisgICAgICAgICAgICAgICAgc2VsZi5fZmF0YWxfZXJyb3IoZXhjLCAnRmF0YWwgcmVhZCBlcnJvciBvbiBwaXBlIHRyYW5zcG9ydCcpCisgICAgICAgICAgICBlbGlmIHNlbGYuX2xvb3AuZ2V0X2RlYnVnKCk6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCJSZWFkIGVycm9yIG9uIHBpcGUgdHJhbnNwb3J0IHdoaWxlIGNsb3NpbmciLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNfaW5mbz1UcnVlKQorICAgICAgICBleGNlcHQgQ29ubmVjdGlvblJlc2V0RXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgc2VsZi5fZm9yY2VfY2xvc2UoZXhjKQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6CisgICAgICAgICAgICBzZWxmLl9mYXRhbF9lcnJvcihleGMsICdGYXRhbCByZWFkIGVycm9yIG9uIHBpcGUgdHJhbnNwb3J0JykKKyAgICAgICAgZXhjZXB0IGZ1dHVyZXMuQ2FuY2VsbGVkRXJyb3I6CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5fY2xvc2luZzoKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fcmVhZF9mdXQuYWRkX2RvbmVfY2FsbGJhY2soc2VsZi5fbG9vcF9yZWFkaW5nKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgaWYgZGF0YToKKyAgICAgICAgICAgICAgICBzZWxmLl9wcm90b2NvbC5kYXRhX3JlY2VpdmVkKGRhdGEpCisgICAgICAgICAgICBlbGlmIGRhdGEgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5fbG9vcC5nZXRfZGVidWcoKToKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCIlciByZWNlaXZlZCBFT0YiLCBzZWxmKQorICAgICAgICAgICAgICAgIGtlZXBfb3BlbiA9IHNlbGYuX3Byb3RvY29sLmVvZl9yZWNlaXZlZCgpCisgICAgICAgICAgICAgICAgaWYgbm90IGtlZXBfb3BlbjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5jbG9zZSgpCisKKworY2xhc3MgX1Byb2FjdG9yQmFzZVdyaXRlUGlwZVRyYW5zcG9ydChfUHJvYWN0b3JCYXNlUGlwZVRyYW5zcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNwb3J0cy5Xcml0ZVRyYW5zcG9ydCk6CisgICAgIiIiVHJhbnNwb3J0IGZvciB3cml0ZSBwaXBlcy4iIiIKKworICAgIGRlZiB3cml0ZShzZWxmLCBkYXRhKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZGF0YSwgKGJ5dGVzLCBieXRlYXJyYXksIG1lbW9yeXZpZXcpKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignZGF0YSBhcmd1bWVudCBtdXN0IGJlIGJ5dGUtaXNoICglciknLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUoZGF0YSkpCisgICAgICAgIGlmIHNlbGYuX2VvZl93cml0dGVuOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCd3cml0ZV9lb2YoKSBhbHJlYWR5IGNhbGxlZCcpCisKKyAgICAgICAgaWYgbm90IGRhdGE6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpZiBzZWxmLl9jb25uX2xvc3Q6CisgICAgICAgICAgICBpZiBzZWxmLl9jb25uX2xvc3QgPj0gY29uc3RhbnRzLkxPR19USFJFU0hPTERfRk9SX0NPTk5MT1NUX1dSSVRFUzoKKyAgICAgICAgICAgICAgICBsb2dnZXIud2FybmluZygnc29ja2V0LnNlbmQoKSByYWlzZWQgZXhjZXB0aW9uLicpCisgICAgICAgICAgICBzZWxmLl9jb25uX2xvc3QgKz0gMQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgIyBPYnNlcnZhYmxlIHN0YXRlczoKKyAgICAgICAgIyAxLiBJRExFOiBfd3JpdGVfZnV0IGFuZCBfYnVmZmVyIGJvdGggTm9uZQorICAgICAgICAjIDIuIFdSSVRJTkc6IF93cml0ZV9mdXQgc2V0OyBfYnVmZmVyIE5vbmUKKyAgICAgICAgIyAzLiBCQUNLRUQgVVA6IF93cml0ZV9mdXQgc2V0OyBfYnVmZmVyIGEgYnl0ZWFycmF5CisgICAgICAgICMgV2UgYWx3YXlzIGNvcHkgdGhlIGRhdGEsIHNvIHRoZSBjYWxsZXIgY2FuJ3QgbW9kaWZ5IGl0CisgICAgICAgICMgd2hpbGUgd2UncmUgc3RpbGwgd2FpdGluZyBmb3IgdGhlIEkvTyB0byBoYXBwZW4uCisgICAgICAgIGlmIHNlbGYuX3dyaXRlX2Z1dCBpcyBOb25lOiAgIyBJRExFIC0+IFdSSVRJTkcKKyAgICAgICAgICAgIGFzc2VydCBzZWxmLl9idWZmZXIgaXMgTm9uZQorICAgICAgICAgICAgIyBQYXNzIGEgY29weSwgZXhjZXB0IGlmIGl0J3MgYWxyZWFkeSBpbW11dGFibGUuCisgICAgICAgICAgICBzZWxmLl9sb29wX3dyaXRpbmcoZGF0YT1ieXRlcyhkYXRhKSkKKyAgICAgICAgZWxpZiBub3Qgc2VsZi5fYnVmZmVyOiAgIyBXUklUSU5HIC0+IEJBQ0tFRCBVUAorICAgICAgICAgICAgIyBNYWtlIGEgbXV0YWJsZSBjb3B5IHdoaWNoIHdlIGNhbiBleHRlbmQuCisgICAgICAgICAgICBzZWxmLl9idWZmZXIgPSBieXRlYXJyYXkoZGF0YSkKKyAgICAgICAgICAgIHNlbGYuX21heWJlX3BhdXNlX3Byb3RvY29sKCkKKyAgICAgICAgZWxzZTogICMgQkFDS0VEIFVQCisgICAgICAgICAgICAjIEFwcGVuZCB0byBidWZmZXIgKGFsc28gY29waWVzKS4KKyAgICAgICAgICAgIHNlbGYuX2J1ZmZlci5leHRlbmQoZGF0YSkKKyAgICAgICAgICAgIHNlbGYuX21heWJlX3BhdXNlX3Byb3RvY29sKCkKKworICAgIGRlZiBfbG9vcF93cml0aW5nKHNlbGYsIGY9Tm9uZSwgZGF0YT1Ob25lKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYXNzZXJ0IGYgaXMgc2VsZi5fd3JpdGVfZnV0CisgICAgICAgICAgICBzZWxmLl93cml0ZV9mdXQgPSBOb25lCisgICAgICAgICAgICBzZWxmLl9wZW5kaW5nX3dyaXRlID0gMAorICAgICAgICAgICAgaWYgZjoKKyAgICAgICAgICAgICAgICBmLnJlc3VsdCgpCisgICAgICAgICAgICBpZiBkYXRhIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgZGF0YSA9IHNlbGYuX2J1ZmZlcgorICAgICAgICAgICAgICAgIHNlbGYuX2J1ZmZlciA9IE5vbmUKKyAgICAgICAgICAgIGlmIG5vdCBkYXRhOgorICAgICAgICAgICAgICAgIGlmIHNlbGYuX2Nsb3Npbmc6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKHNlbGYuX2NhbGxfY29ubmVjdGlvbl9sb3N0LCBOb25lKQorICAgICAgICAgICAgICAgIGlmIHNlbGYuX2VvZl93cml0dGVuOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9zb2NrLnNodXRkb3duKHNvY2tldC5TSFVUX1dSKQorICAgICAgICAgICAgICAgICMgTm93IHRoYXQgd2UndmUgcmVkdWNlZCB0aGUgYnVmZmVyIHNpemUsIHRlbGwgdGhlCisgICAgICAgICAgICAgICAgIyBwcm90b2NvbCB0byByZXN1bWUgd3JpdGluZyBpZiBpdCB3YXMgcGF1c2VkLiAgTm90ZSB0aGF0CisgICAgICAgICAgICAgICAgIyB3ZSBkbyB0aGlzIGxhc3Qgc2luY2UgdGhlIGNhbGxiYWNrIGlzIGNhbGxlZCBpbW1lZGlhdGVseQorICAgICAgICAgICAgICAgICMgYW5kIGl0IG1heSBhZGQgbW9yZSBkYXRhIHRvIHRoZSBidWZmZXIgKGV2ZW4gY2F1c2luZyB0aGUKKyAgICAgICAgICAgICAgICAjIHByb3RvY29sIHRvIGJlIHBhdXNlZCBhZ2FpbikuCisgICAgICAgICAgICAgICAgc2VsZi5fbWF5YmVfcmVzdW1lX3Byb3RvY29sKCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5fd3JpdGVfZnV0ID0gc2VsZi5fbG9vcC5fcHJvYWN0b3Iuc2VuZChzZWxmLl9zb2NrLCBkYXRhKQorICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLl93cml0ZV9mdXQuZG9uZSgpOgorICAgICAgICAgICAgICAgICAgICBhc3NlcnQgc2VsZi5fcGVuZGluZ193cml0ZSA9PSAwCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3BlbmRpbmdfd3JpdGUgPSBsZW4oZGF0YSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fd3JpdGVfZnV0LmFkZF9kb25lX2NhbGxiYWNrKHNlbGYuX2xvb3Bfd3JpdGluZykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fbWF5YmVfcGF1c2VfcHJvdG9jb2woKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3dyaXRlX2Z1dC5hZGRfZG9uZV9jYWxsYmFjayhzZWxmLl9sb29wX3dyaXRpbmcpCisgICAgICAgIGV4Y2VwdCBDb25uZWN0aW9uUmVzZXRFcnJvciBhcyBleGM6CisgICAgICAgICAgICBzZWxmLl9mb3JjZV9jbG9zZShleGMpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKKyAgICAgICAgICAgIHNlbGYuX2ZhdGFsX2Vycm9yKGV4YywgJ0ZhdGFsIHdyaXRlIGVycm9yIG9uIHBpcGUgdHJhbnNwb3J0JykKKworICAgIGRlZiBjYW5fd3JpdGVfZW9mKHNlbGYpOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIHdyaXRlX2VvZihzZWxmKToKKyAgICAgICAgc2VsZi5jbG9zZSgpCisKKyAgICBkZWYgYWJvcnQoc2VsZik6CisgICAgICAgIHNlbGYuX2ZvcmNlX2Nsb3NlKE5vbmUpCisKKworY2xhc3MgX1Byb2FjdG9yV3JpdGVQaXBlVHJhbnNwb3J0KF9Qcm9hY3RvckJhc2VXcml0ZVBpcGVUcmFuc3BvcnQpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprdyk6CisgICAgICAgIHN1cGVyKCkuX19pbml0X18oKmFyZ3MsICoqa3cpCisgICAgICAgIHNlbGYuX3JlYWRfZnV0ID0gc2VsZi5fbG9vcC5fcHJvYWN0b3IucmVjdihzZWxmLl9zb2NrLCAxNikKKyAgICAgICAgc2VsZi5fcmVhZF9mdXQuYWRkX2RvbmVfY2FsbGJhY2soc2VsZi5fcGlwZV9jbG9zZWQpCisKKyAgICBkZWYgX3BpcGVfY2xvc2VkKHNlbGYsIGZ1dCk6CisgICAgICAgIGlmIGZ1dC5jYW5jZWxsZWQoKToKKyAgICAgICAgICAgICMgdGhlIHRyYW5zcG9ydCBoYXMgYmVlbiBjbG9zZWQKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBhc3NlcnQgZnV0LnJlc3VsdCgpID09IGInJworICAgICAgICBpZiBzZWxmLl9jbG9zaW5nOgorICAgICAgICAgICAgYXNzZXJ0IHNlbGYuX3JlYWRfZnV0IGlzIE5vbmUKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBhc3NlcnQgZnV0IGlzIHNlbGYuX3JlYWRfZnV0LCAoZnV0LCBzZWxmLl9yZWFkX2Z1dCkKKyAgICAgICAgc2VsZi5fcmVhZF9mdXQgPSBOb25lCisgICAgICAgIGlmIHNlbGYuX3dyaXRlX2Z1dCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2ZvcmNlX2Nsb3NlKEJyb2tlblBpcGVFcnJvcigpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5jbG9zZSgpCisKKworY2xhc3MgX1Byb2FjdG9yRHVwbGV4UGlwZVRyYW5zcG9ydChfUHJvYWN0b3JSZWFkUGlwZVRyYW5zcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1Byb2FjdG9yQmFzZVdyaXRlUGlwZVRyYW5zcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNwb3J0cy5UcmFuc3BvcnQpOgorICAgICIiIlRyYW5zcG9ydCBmb3IgZHVwbGV4IHBpcGVzLiIiIgorCisgICAgZGVmIGNhbl93cml0ZV9lb2Yoc2VsZik6CisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIHdyaXRlX2VvZihzZWxmKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisKK2NsYXNzIF9Qcm9hY3RvclNvY2tldFRyYW5zcG9ydChfUHJvYWN0b3JSZWFkUGlwZVRyYW5zcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUHJvYWN0b3JCYXNlV3JpdGVQaXBlVHJhbnNwb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zcG9ydHMuVHJhbnNwb3J0KToKKyAgICAiIiJUcmFuc3BvcnQgZm9yIGNvbm5lY3RlZCBzb2NrZXRzLiIiIgorCisgICAgZGVmIF9zZXRfZXh0cmEoc2VsZiwgc29jayk6CisgICAgICAgIHNlbGYuX2V4dHJhWydzb2NrZXQnXSA9IHNvY2sKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5fZXh0cmFbJ3NvY2tuYW1lJ10gPSBzb2NrLmdldHNvY2tuYW1lKCkKKyAgICAgICAgZXhjZXB0IChzb2NrZXQuZXJyb3IsIEF0dHJpYnV0ZUVycm9yKToKKyAgICAgICAgICAgIGlmIHNlbGYuX2xvb3AuZ2V0X2RlYnVnKCk6CisgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoImdldHNvY2tuYW1lKCkgZmFpbGVkIG9uICVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29jaywgZXhjX2luZm89VHJ1ZSkKKyAgICAgICAgaWYgJ3BlZXJuYW1lJyBub3QgaW4gc2VsZi5fZXh0cmE6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5fZXh0cmFbJ3BlZXJuYW1lJ10gPSBzb2NrLmdldHBlZXJuYW1lKCkKKyAgICAgICAgICAgIGV4Y2VwdCAoc29ja2V0LmVycm9yLCBBdHRyaWJ1dGVFcnJvcik6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5fbG9vcC5nZXRfZGVidWcoKToKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoImdldHBlZXJuYW1lKCkgZmFpbGVkIG9uICVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29jaywgZXhjX2luZm89VHJ1ZSkKKworICAgIGRlZiBjYW5fd3JpdGVfZW9mKHNlbGYpOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIHdyaXRlX2VvZihzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fY2xvc2luZyBvciBzZWxmLl9lb2Zfd3JpdHRlbjoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLl9lb2Zfd3JpdHRlbiA9IFRydWUKKyAgICAgICAgaWYgc2VsZi5fd3JpdGVfZnV0IGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLl9zb2NrLnNodXRkb3duKHNvY2tldC5TSFVUX1dSKQorCisKK2NsYXNzIEJhc2VQcm9hY3RvckV2ZW50TG9vcChiYXNlX2V2ZW50cy5CYXNlRXZlbnRMb29wKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwcm9hY3Rvcik6CisgICAgICAgIHN1cGVyKCkuX19pbml0X18oKQorICAgICAgICBsb2dnZXIuZGVidWcoJ1VzaW5nIHByb2FjdG9yOiAlcycsIHByb2FjdG9yLl9fY2xhc3NfXy5fX25hbWVfXykKKyAgICAgICAgc2VsZi5fcHJvYWN0b3IgPSBwcm9hY3RvcgorICAgICAgICBzZWxmLl9zZWxlY3RvciA9IHByb2FjdG9yICAgIyBjb252ZW5pZW50IGFsaWFzCisgICAgICAgIHNlbGYuX3NlbGZfcmVhZGluZ19mdXR1cmUgPSBOb25lCisgICAgICAgIHNlbGYuX2FjY2VwdF9mdXR1cmVzID0ge30gICAjIHNvY2tldCBmaWxlIGRlc2NyaXB0b3IgPT4gRnV0dXJlCisgICAgICAgIHByb2FjdG9yLnNldF9sb29wKHNlbGYpCisgICAgICAgIHNlbGYuX21ha2Vfc2VsZl9waXBlKCkKKworICAgIGRlZiBfbWFrZV9zb2NrZXRfdHJhbnNwb3J0KHNlbGYsIHNvY2ssIHByb3RvY29sLCB3YWl0ZXI9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYT1Ob25lLCBzZXJ2ZXI9Tm9uZSk6CisgICAgICAgIHJldHVybiBfUHJvYWN0b3JTb2NrZXRUcmFuc3BvcnQoc2VsZiwgc29jaywgcHJvdG9jb2wsIHdhaXRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYSwgc2VydmVyKQorCisgICAgZGVmIF9tYWtlX3NzbF90cmFuc3BvcnQoc2VsZiwgcmF3c29jaywgcHJvdG9jb2wsIHNzbGNvbnRleHQsIHdhaXRlcj1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICosIHNlcnZlcl9zaWRlPUZhbHNlLCBzZXJ2ZXJfaG9zdG5hbWU9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYT1Ob25lLCBzZXJ2ZXI9Tm9uZSk6CisgICAgICAgIGlmIG5vdCBzc2xwcm90by5faXNfc3NscHJvdG9fYXZhaWxhYmxlKCk6CisgICAgICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCJQcm9hY3RvciBldmVudCBsb29wIHJlcXVpcmVzIFB5dGhvbiAzLjUiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgb3IgbmV3ZXIgKHNzbC5NZW1vcnlCSU8pIHRvIHN1cHBvcnQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU1NMIikKKworICAgICAgICBzc2xfcHJvdG9jb2wgPSBzc2xwcm90by5TU0xQcm90b2NvbChzZWxmLCBwcm90b2NvbCwgc3NsY29udGV4dCwgd2FpdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfc2lkZSwgc2VydmVyX2hvc3RuYW1lKQorICAgICAgICBfUHJvYWN0b3JTb2NrZXRUcmFuc3BvcnQoc2VsZiwgcmF3c29jaywgc3NsX3Byb3RvY29sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE9ZXh0cmEsIHNlcnZlcj1zZXJ2ZXIpCisgICAgICAgIHJldHVybiBzc2xfcHJvdG9jb2wuX2FwcF90cmFuc3BvcnQKKworICAgIGRlZiBfbWFrZV9kdXBsZXhfcGlwZV90cmFuc3BvcnQoc2VsZiwgc29jaywgcHJvdG9jb2wsIHdhaXRlcj1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE9Tm9uZSk6CisgICAgICAgIHJldHVybiBfUHJvYWN0b3JEdXBsZXhQaXBlVHJhbnNwb3J0KHNlbGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2ssIHByb3RvY29sLCB3YWl0ZXIsIGV4dHJhKQorCisgICAgZGVmIF9tYWtlX3JlYWRfcGlwZV90cmFuc3BvcnQoc2VsZiwgc29jaywgcHJvdG9jb2wsIHdhaXRlcj1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhPU5vbmUpOgorICAgICAgICByZXR1cm4gX1Byb2FjdG9yUmVhZFBpcGVUcmFuc3BvcnQoc2VsZiwgc29jaywgcHJvdG9jb2wsIHdhaXRlciwgZXh0cmEpCisKKyAgICBkZWYgX21ha2Vfd3JpdGVfcGlwZV90cmFuc3BvcnQoc2VsZiwgc29jaywgcHJvdG9jb2wsIHdhaXRlcj1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYT1Ob25lKToKKyAgICAgICAgIyBXZSB3YW50IGNvbm5lY3Rpb25fbG9zdCgpIHRvIGJlIGNhbGxlZCB3aGVuIG90aGVyIGVuZCBjbG9zZXMKKyAgICAgICAgcmV0dXJuIF9Qcm9hY3RvcldyaXRlUGlwZVRyYW5zcG9ydChzZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2ssIHByb3RvY29sLCB3YWl0ZXIsIGV4dHJhKQorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmlzX3J1bm5pbmcoKToKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiQ2Fubm90IGNsb3NlIGEgcnVubmluZyBldmVudCBsb29wIikKKyAgICAgICAgaWYgc2VsZi5pc19jbG9zZWQoKToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICMgQ2FsbCB0aGVzZSBtZXRob2RzIGJlZm9yZSBjbG9zaW5nIHRoZSBldmVudCBsb29wIChiZWZvcmUgY2FsbGluZworICAgICAgICAjIEJhc2VFdmVudExvb3AuY2xvc2UpLCBiZWNhdXNlIHRoZXkgY2FuIHNjaGVkdWxlIGNhbGxiYWNrcyB3aXRoCisgICAgICAgICMgY2FsbF9zb29uKCksIHdoaWNoIGlzIGZvcmJpZGRlbiB3aGVuIHRoZSBldmVudCBsb29wIGlzIGNsb3NlZC4KKyAgICAgICAgc2VsZi5fc3RvcF9hY2NlcHRfZnV0dXJlcygpCisgICAgICAgIHNlbGYuX2Nsb3NlX3NlbGZfcGlwZSgpCisgICAgICAgIHNlbGYuX3Byb2FjdG9yLmNsb3NlKCkKKyAgICAgICAgc2VsZi5fcHJvYWN0b3IgPSBOb25lCisgICAgICAgIHNlbGYuX3NlbGVjdG9yID0gTm9uZQorCisgICAgICAgICMgQ2xvc2UgdGhlIGV2ZW50IGxvb3AKKyAgICAgICAgc3VwZXIoKS5jbG9zZSgpCisKKyAgICBkZWYgc29ja19yZWN2KHNlbGYsIHNvY2ssIG4pOgorICAgICAgICByZXR1cm4gc2VsZi5fcHJvYWN0b3IucmVjdihzb2NrLCBuKQorCisgICAgZGVmIHNvY2tfc2VuZGFsbChzZWxmLCBzb2NrLCBkYXRhKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3Byb2FjdG9yLnNlbmQoc29jaywgZGF0YSkKKworICAgIGRlZiBzb2NrX2Nvbm5lY3Qoc2VsZiwgc29jaywgYWRkcmVzcyk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGJhc2VfZXZlbnRzLl9jaGVja19yZXNvbHZlZF9hZGRyZXNzKHNvY2ssIGFkZHJlc3MpCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yIGFzIGVycjoKKyAgICAgICAgICAgIGZ1dCA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZikKKyAgICAgICAgICAgIGZ1dC5zZXRfZXhjZXB0aW9uKGVycikKKyAgICAgICAgICAgIHJldHVybiBmdXQKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9wcm9hY3Rvci5jb25uZWN0KHNvY2ssIGFkZHJlc3MpCisKKyAgICBkZWYgc29ja19hY2NlcHQoc2VsZiwgc29jayk6CisgICAgICAgIHJldHVybiBzZWxmLl9wcm9hY3Rvci5hY2NlcHQoc29jaykKKworICAgIGRlZiBfc29ja2V0cGFpcihzZWxmKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIF9jbG9zZV9zZWxmX3BpcGUoc2VsZik6CisgICAgICAgIGlmIHNlbGYuX3NlbGZfcmVhZGluZ19mdXR1cmUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl9zZWxmX3JlYWRpbmdfZnV0dXJlLmNhbmNlbCgpCisgICAgICAgICAgICBzZWxmLl9zZWxmX3JlYWRpbmdfZnV0dXJlID0gTm9uZQorICAgICAgICBzZWxmLl9zc29jay5jbG9zZSgpCisgICAgICAgIHNlbGYuX3Nzb2NrID0gTm9uZQorICAgICAgICBzZWxmLl9jc29jay5jbG9zZSgpCisgICAgICAgIHNlbGYuX2Nzb2NrID0gTm9uZQorICAgICAgICBzZWxmLl9pbnRlcm5hbF9mZHMgLT0gMQorCisgICAgZGVmIF9tYWtlX3NlbGZfcGlwZShzZWxmKToKKyAgICAgICAgIyBBIHNlbGYtc29ja2V0LCByZWFsbHkuIDotKQorICAgICAgICBzZWxmLl9zc29jaywgc2VsZi5fY3NvY2sgPSBzZWxmLl9zb2NrZXRwYWlyKCkKKyAgICAgICAgc2VsZi5fc3NvY2suc2V0YmxvY2tpbmcoRmFsc2UpCisgICAgICAgIHNlbGYuX2Nzb2NrLnNldGJsb2NraW5nKEZhbHNlKQorICAgICAgICBzZWxmLl9pbnRlcm5hbF9mZHMgKz0gMQorICAgICAgICBzZWxmLmNhbGxfc29vbihzZWxmLl9sb29wX3NlbGZfcmVhZGluZykKKworICAgIGRlZiBfbG9vcF9zZWxmX3JlYWRpbmcoc2VsZiwgZj1Ob25lKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgZiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBmLnJlc3VsdCgpICAjIG1heSByYWlzZQorICAgICAgICAgICAgZiA9IHNlbGYuX3Byb2FjdG9yLnJlY3Yoc2VsZi5fc3NvY2ssIDQwOTYpCisgICAgICAgIGV4Y2VwdCBmdXR1cmVzLkNhbmNlbGxlZEVycm9yOgorICAgICAgICAgICAgIyBfY2xvc2Vfc2VsZl9waXBlKCkgaGFzIGJlZW4gY2FsbGVkLCBzdG9wIHdhaXRpbmcgZm9yIGRhdGEKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgIHNlbGYuY2FsbF9leGNlcHRpb25faGFuZGxlcih7CisgICAgICAgICAgICAgICAgJ21lc3NhZ2UnOiAnRXJyb3Igb24gcmVhZGluZyBmcm9tIHRoZSBldmVudCBsb29wIHNlbGYgcGlwZScsCisgICAgICAgICAgICAgICAgJ2V4Y2VwdGlvbic6IGV4YywKKyAgICAgICAgICAgICAgICAnbG9vcCc6IHNlbGYsCisgICAgICAgICAgICB9KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fc2VsZl9yZWFkaW5nX2Z1dHVyZSA9IGYKKyAgICAgICAgICAgIGYuYWRkX2RvbmVfY2FsbGJhY2soc2VsZi5fbG9vcF9zZWxmX3JlYWRpbmcpCisKKyAgICBkZWYgX3dyaXRlX3RvX3NlbGYoc2VsZik6CisgICAgICAgIHNlbGYuX2Nzb2NrLnNlbmQoYidcMCcpCisKKyAgICBkZWYgX3N0YXJ0X3NlcnZpbmcoc2VsZiwgcHJvdG9jb2xfZmFjdG9yeSwgc29jaywKKyAgICAgICAgICAgICAgICAgICAgICAgc3NsY29udGV4dD1Ob25lLCBzZXJ2ZXI9Tm9uZSk6CisKKyAgICAgICAgZGVmIGxvb3AoZj1Ob25lKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpZiBmIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBjb25uLCBhZGRyID0gZi5yZXN1bHQoKQorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLl9kZWJ1ZzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygiJXIgZ290IGEgbmV3IGNvbm5lY3Rpb24gZnJvbSAlcjogJXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlciwgYWRkciwgY29ubikKKyAgICAgICAgICAgICAgICAgICAgcHJvdG9jb2wgPSBwcm90b2NvbF9mYWN0b3J5KCkKKyAgICAgICAgICAgICAgICAgICAgaWYgc3NsY29udGV4dCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX21ha2Vfc3NsX3RyYW5zcG9ydCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uLCBwcm90b2NvbCwgc3NsY29udGV4dCwgc2VydmVyX3NpZGU9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYT17J3BlZXJuYW1lJzogYWRkcn0sIHNlcnZlcj1zZXJ2ZXIpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9tYWtlX3NvY2tldF90cmFuc3BvcnQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubiwgcHJvdG9jb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE9eydwZWVybmFtZSc6IGFkZHJ9LCBzZXJ2ZXI9c2VydmVyKQorICAgICAgICAgICAgICAgIGlmIHNlbGYuaXNfY2xvc2VkKCk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgICAgIGYgPSBzZWxmLl9wcm9hY3Rvci5hY2NlcHQoc29jaykKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKKyAgICAgICAgICAgICAgICBpZiBzb2NrLmZpbGVubygpICE9IC0xOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmNhbGxfZXhjZXB0aW9uX2hhbmRsZXIoeworICAgICAgICAgICAgICAgICAgICAgICAgJ21lc3NhZ2UnOiAnQWNjZXB0IGZhaWxlZCBvbiBhIHNvY2tldCcsCisgICAgICAgICAgICAgICAgICAgICAgICAnZXhjZXB0aW9uJzogZXhjLAorICAgICAgICAgICAgICAgICAgICAgICAgJ3NvY2tldCc6IHNvY2ssCisgICAgICAgICAgICAgICAgICAgIH0pCisgICAgICAgICAgICAgICAgICAgIHNvY2suY2xvc2UoKQorICAgICAgICAgICAgICAgIGVsaWYgc2VsZi5fZGVidWc6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygiQWNjZXB0IGZhaWxlZCBvbiBzb2NrZXQgJXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29jaywgZXhjX2luZm89VHJ1ZSkKKyAgICAgICAgICAgIGV4Y2VwdCBmdXR1cmVzLkNhbmNlbGxlZEVycm9yOgorICAgICAgICAgICAgICAgIHNvY2suY2xvc2UoKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLl9hY2NlcHRfZnV0dXJlc1tzb2NrLmZpbGVubygpXSA9IGYKKyAgICAgICAgICAgICAgICBmLmFkZF9kb25lX2NhbGxiYWNrKGxvb3ApCisKKyAgICAgICAgc2VsZi5jYWxsX3Nvb24obG9vcCkKKworICAgIGRlZiBfcHJvY2Vzc19ldmVudHMoc2VsZiwgZXZlbnRfbGlzdCk6CisgICAgICAgICMgRXZlbnRzIGFyZSBwcm9jZXNzZWQgaW4gdGhlIElvY3BQcm9hY3Rvci5fcG9sbCgpIG1ldGhvZAorICAgICAgICBwYXNzCisKKyAgICBkZWYgX3N0b3BfYWNjZXB0X2Z1dHVyZXMoc2VsZik6CisgICAgICAgIGZvciBmdXR1cmUgaW4gc2VsZi5fYWNjZXB0X2Z1dHVyZXMudmFsdWVzKCk6CisgICAgICAgICAgICBmdXR1cmUuY2FuY2VsKCkKKyAgICAgICAgc2VsZi5fYWNjZXB0X2Z1dHVyZXMuY2xlYXIoKQorCisgICAgZGVmIF9zdG9wX3NlcnZpbmcoc2VsZiwgc29jayk6CisgICAgICAgIHNlbGYuX3N0b3BfYWNjZXB0X2Z1dHVyZXMoKQorICAgICAgICBzZWxmLl9wcm9hY3Rvci5fc3RvcF9zZXJ2aW5nKHNvY2spCisgICAgICAgIHNvY2suY2xvc2UoKQpkaWZmIC0tZ2l0IGEvTGliL2FzeW5jaW8vcHJvdG9jb2xzLnB5IGIvTGliL2FzeW5jaW8vcHJvdG9jb2xzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwZmNhYzkKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvYXN5bmNpby9wcm90b2NvbHMucHkKQEAgLTAsMCArMSwxMzQgQEAKKyIiIkFic3RyYWN0IFByb3RvY29sIGNsYXNzLiIiIgorCitfX2FsbF9fID0gWydCYXNlUHJvdG9jb2wnLCAnUHJvdG9jb2wnLCAnRGF0YWdyYW1Qcm90b2NvbCcsCisgICAgICAgICAgICdTdWJwcm9jZXNzUHJvdG9jb2wnXQorCisKK2NsYXNzIEJhc2VQcm90b2NvbDoKKyAgICAiIiJDb21tb24gYmFzZSBjbGFzcyBmb3IgcHJvdG9jb2wgaW50ZXJmYWNlcy4KKworICAgIFVzdWFsbHkgdXNlciBpbXBsZW1lbnRzIHByb3RvY29scyB0aGF0IGRlcml2ZWQgZnJvbSBCYXNlUHJvdG9jb2wKKyAgICBsaWtlIFByb3RvY29sIG9yIFByb2Nlc3NQcm90b2NvbC4KKworICAgIFRoZSBvbmx5IGNhc2Ugd2hlbiBCYXNlUHJvdG9jb2wgc2hvdWxkIGJlIGltcGxlbWVudGVkIGRpcmVjdGx5IGlzCisgICAgd3JpdGUtb25seSB0cmFuc3BvcnQgbGlrZSB3cml0ZSBwaXBlCisgICAgIiIiCisKKyAgICBkZWYgY29ubmVjdGlvbl9tYWRlKHNlbGYsIHRyYW5zcG9ydCk6CisgICAgICAgICIiIkNhbGxlZCB3aGVuIGEgY29ubmVjdGlvbiBpcyBtYWRlLgorCisgICAgICAgIFRoZSBhcmd1bWVudCBpcyB0aGUgdHJhbnNwb3J0IHJlcHJlc2VudGluZyB0aGUgcGlwZSBjb25uZWN0aW9uLgorICAgICAgICBUbyByZWNlaXZlIGRhdGEsIHdhaXQgZm9yIGRhdGFfcmVjZWl2ZWQoKSBjYWxscy4KKyAgICAgICAgV2hlbiB0aGUgY29ubmVjdGlvbiBpcyBjbG9zZWQsIGNvbm5lY3Rpb25fbG9zdCgpIGlzIGNhbGxlZC4KKyAgICAgICAgIiIiCisKKyAgICBkZWYgY29ubmVjdGlvbl9sb3N0KHNlbGYsIGV4Yyk6CisgICAgICAgICIiIkNhbGxlZCB3aGVuIHRoZSBjb25uZWN0aW9uIGlzIGxvc3Qgb3IgY2xvc2VkLgorCisgICAgICAgIFRoZSBhcmd1bWVudCBpcyBhbiBleGNlcHRpb24gb2JqZWN0IG9yIE5vbmUgKHRoZSBsYXR0ZXIKKyAgICAgICAgbWVhbmluZyBhIHJlZ3VsYXIgRU9GIGlzIHJlY2VpdmVkIG9yIHRoZSBjb25uZWN0aW9uIHdhcworICAgICAgICBhYm9ydGVkIG9yIGNsb3NlZCkuCisgICAgICAgICIiIgorCisgICAgZGVmIHBhdXNlX3dyaXRpbmcoc2VsZik6CisgICAgICAgICIiIkNhbGxlZCB3aGVuIHRoZSB0cmFuc3BvcnQncyBidWZmZXIgZ29lcyBvdmVyIHRoZSBoaWdoLXdhdGVyIG1hcmsuCisKKyAgICAgICAgUGF1c2UgYW5kIHJlc3VtZSBjYWxscyBhcmUgcGFpcmVkIC0tIHBhdXNlX3dyaXRpbmcoKSBpcyBjYWxsZWQKKyAgICAgICAgb25jZSB3aGVuIHRoZSBidWZmZXIgZ29lcyBzdHJpY3RseSBvdmVyIHRoZSBoaWdoLXdhdGVyIG1hcmsKKyAgICAgICAgKGV2ZW4gaWYgc3Vic2VxdWVudCB3cml0ZXMgaW5jcmVhc2VzIHRoZSBidWZmZXIgc2l6ZSBldmVuCisgICAgICAgIG1vcmUpLCBhbmQgZXZlbnR1YWxseSByZXN1bWVfd3JpdGluZygpIGlzIGNhbGxlZCBvbmNlIHdoZW4gdGhlCisgICAgICAgIGJ1ZmZlciBzaXplIHJlYWNoZXMgdGhlIGxvdy13YXRlciBtYXJrLgorCisgICAgICAgIE5vdGUgdGhhdCBpZiB0aGUgYnVmZmVyIHNpemUgZXF1YWxzIHRoZSBoaWdoLXdhdGVyIG1hcmssCisgICAgICAgIHBhdXNlX3dyaXRpbmcoKSBpcyBub3QgY2FsbGVkIC0tIGl0IG11c3QgZ28gc3RyaWN0bHkgb3Zlci4KKyAgICAgICAgQ29udmVyc2VseSwgcmVzdW1lX3dyaXRpbmcoKSBpcyBjYWxsZWQgd2hlbiB0aGUgYnVmZmVyIHNpemUgaXMKKyAgICAgICAgZXF1YWwgb3IgbG93ZXIgdGhhbiB0aGUgbG93LXdhdGVyIG1hcmsuICBUaGVzZSBlbmQgY29uZGl0aW9ucworICAgICAgICBhcmUgaW1wb3J0YW50IHRvIGVuc3VyZSB0aGF0IHRoaW5ncyBnbyBhcyBleHBlY3RlZCB3aGVuIGVpdGhlcgorICAgICAgICBtYXJrIGlzIHplcm8uCisKKyAgICAgICAgTk9URTogVGhpcyBpcyB0aGUgb25seSBQcm90b2NvbCBjYWxsYmFjayB0aGF0IGlzIG5vdCBjYWxsZWQKKyAgICAgICAgdGhyb3VnaCBFdmVudExvb3AuY2FsbF9zb29uKCkgLS0gaWYgaXQgd2VyZSwgaXQgd291bGQgaGF2ZSBubworICAgICAgICBlZmZlY3Qgd2hlbiBpdCdzIG1vc3QgbmVlZGVkICh3aGVuIHRoZSBhcHAga2VlcHMgd3JpdGluZworICAgICAgICB3aXRob3V0IHlpZWxkaW5nIHVudGlsIHBhdXNlX3dyaXRpbmcoKSBpcyBjYWxsZWQpLgorICAgICAgICAiIiIKKworICAgIGRlZiByZXN1bWVfd3JpdGluZyhzZWxmKToKKyAgICAgICAgIiIiQ2FsbGVkIHdoZW4gdGhlIHRyYW5zcG9ydCdzIGJ1ZmZlciBkcmFpbnMgYmVsb3cgdGhlIGxvdy13YXRlciBtYXJrLgorCisgICAgICAgIFNlZSBwYXVzZV93cml0aW5nKCkgZm9yIGRldGFpbHMuCisgICAgICAgICIiIgorCisKK2NsYXNzIFByb3RvY29sKEJhc2VQcm90b2NvbCk6CisgICAgIiIiSW50ZXJmYWNlIGZvciBzdHJlYW0gcHJvdG9jb2wuCisKKyAgICBUaGUgdXNlciBzaG91bGQgaW1wbGVtZW50IHRoaXMgaW50ZXJmYWNlLiAgVGhleSBjYW4gaW5oZXJpdCBmcm9tCisgICAgdGhpcyBjbGFzcyBidXQgZG9uJ3QgbmVlZCB0by4gIFRoZSBpbXBsZW1lbnRhdGlvbnMgaGVyZSBkbworICAgIG5vdGhpbmcgKHRoZXkgZG9uJ3QgcmFpc2UgZXhjZXB0aW9ucykuCisKKyAgICBXaGVuIHRoZSB1c2VyIHdhbnRzIHRvIHJlcXVlc3RzIGEgdHJhbnNwb3J0LCB0aGV5IHBhc3MgYSBwcm90b2NvbAorICAgIGZhY3RvcnkgdG8gYSB1dGlsaXR5IGZ1bmN0aW9uIChlLmcuLCBFdmVudExvb3AuY3JlYXRlX2Nvbm5lY3Rpb24oKSkuCisKKyAgICBXaGVuIHRoZSBjb25uZWN0aW9uIGlzIG1hZGUgc3VjY2Vzc2Z1bGx5LCBjb25uZWN0aW9uX21hZGUoKSBpcworICAgIGNhbGxlZCB3aXRoIGEgc3VpdGFibGUgdHJhbnNwb3J0IG9iamVjdC4gIFRoZW4gZGF0YV9yZWNlaXZlZCgpCisgICAgd2lsbCBiZSBjYWxsZWQgMCBvciBtb3JlIHRpbWVzIHdpdGggZGF0YSAoYnl0ZXMpIHJlY2VpdmVkIGZyb20gdGhlCisgICAgdHJhbnNwb3J0OyBmaW5hbGx5LCBjb25uZWN0aW9uX2xvc3QoKSB3aWxsIGJlIGNhbGxlZCBleGFjdGx5IG9uY2UKKyAgICB3aXRoIGVpdGhlciBhbiBleGNlcHRpb24gb2JqZWN0IG9yIE5vbmUgYXMgYW4gYXJndW1lbnQuCisKKyAgICBTdGF0ZSBtYWNoaW5lIG9mIGNhbGxzOgorCisgICAgICBzdGFydCAtPiBDTSBbLT4gRFIqXSBbLT4gRVI/XSAtPiBDTCAtPiBlbmQKKworICAgICogQ006IGNvbm5lY3Rpb25fbWFkZSgpCisgICAgKiBEUjogZGF0YV9yZWNlaXZlZCgpCisgICAgKiBFUjogZW9mX3JlY2VpdmVkKCkKKyAgICAqIENMOiBjb25uZWN0aW9uX2xvc3QoKQorICAgICIiIgorCisgICAgZGVmIGRhdGFfcmVjZWl2ZWQoc2VsZiwgZGF0YSk6CisgICAgICAgICIiIkNhbGxlZCB3aGVuIHNvbWUgZGF0YSBpcyByZWNlaXZlZC4KKworICAgICAgICBUaGUgYXJndW1lbnQgaXMgYSBieXRlcyBvYmplY3QuCisgICAgICAgICIiIgorCisgICAgZGVmIGVvZl9yZWNlaXZlZChzZWxmKToKKyAgICAgICAgIiIiQ2FsbGVkIHdoZW4gdGhlIG90aGVyIGVuZCBjYWxscyB3cml0ZV9lb2YoKSBvciBlcXVpdmFsZW50LgorCisgICAgICAgIElmIHRoaXMgcmV0dXJucyBhIGZhbHNlIHZhbHVlIChpbmNsdWRpbmcgTm9uZSksIHRoZSB0cmFuc3BvcnQKKyAgICAgICAgd2lsbCBjbG9zZSBpdHNlbGYuICBJZiBpdCByZXR1cm5zIGEgdHJ1ZSB2YWx1ZSwgY2xvc2luZyB0aGUKKyAgICAgICAgdHJhbnNwb3J0IGlzIHVwIHRvIHRoZSBwcm90b2NvbC4KKyAgICAgICAgIiIiCisKKworY2xhc3MgRGF0YWdyYW1Qcm90b2NvbChCYXNlUHJvdG9jb2wpOgorICAgICIiIkludGVyZmFjZSBmb3IgZGF0YWdyYW0gcHJvdG9jb2wuIiIiCisKKyAgICBkZWYgZGF0YWdyYW1fcmVjZWl2ZWQoc2VsZiwgZGF0YSwgYWRkcik6CisgICAgICAgICIiIkNhbGxlZCB3aGVuIHNvbWUgZGF0YWdyYW0gaXMgcmVjZWl2ZWQuIiIiCisKKyAgICBkZWYgZXJyb3JfcmVjZWl2ZWQoc2VsZiwgZXhjKToKKyAgICAgICAgIiIiQ2FsbGVkIHdoZW4gYSBzZW5kIG9yIHJlY2VpdmUgb3BlcmF0aW9uIHJhaXNlcyBhbiBPU0Vycm9yLgorCisgICAgICAgIChPdGhlciB0aGFuIEJsb2NraW5nSU9FcnJvciBvciBJbnRlcnJ1cHRlZEVycm9yLikKKyAgICAgICAgIiIiCisKKworY2xhc3MgU3VicHJvY2Vzc1Byb3RvY29sKEJhc2VQcm90b2NvbCk6CisgICAgIiIiSW50ZXJmYWNlIGZvciBwcm90b2NvbCBmb3Igc3VicHJvY2VzcyBjYWxscy4iIiIKKworICAgIGRlZiBwaXBlX2RhdGFfcmVjZWl2ZWQoc2VsZiwgZmQsIGRhdGEpOgorICAgICAgICAiIiJDYWxsZWQgd2hlbiB0aGUgc3VicHJvY2VzcyB3cml0ZXMgZGF0YSBpbnRvIHN0ZG91dC9zdGRlcnIgcGlwZS4KKworICAgICAgICBmZCBpcyBpbnQgZmlsZSBkZXNjcmlwdG9yLgorICAgICAgICBkYXRhIGlzIGJ5dGVzIG9iamVjdC4KKyAgICAgICAgIiIiCisKKyAgICBkZWYgcGlwZV9jb25uZWN0aW9uX2xvc3Qoc2VsZiwgZmQsIGV4Yyk6CisgICAgICAgICIiIkNhbGxlZCB3aGVuIGEgZmlsZSBkZXNjcmlwdG9yIGFzc29jaWF0ZWQgd2l0aCB0aGUgY2hpbGQgcHJvY2VzcyBpcworICAgICAgICBjbG9zZWQuCisKKyAgICAgICAgZmQgaXMgdGhlIGludCBmaWxlIGRlc2NyaXB0b3IgdGhhdCB3YXMgY2xvc2VkLgorICAgICAgICAiIiIKKworICAgIGRlZiBwcm9jZXNzX2V4aXRlZChzZWxmKToKKyAgICAgICAgIiIiQ2FsbGVkIHdoZW4gc3VicHJvY2VzcyBoYXMgZXhpdGVkLiIiIgpkaWZmIC0tZ2l0IGEvTGliL2FzeW5jaW8vcXVldWVzLnB5IGIvTGliL2FzeW5jaW8vcXVldWVzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzYTFkNWUKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvYXN5bmNpby9xdWV1ZXMucHkKQEAgLTAsMCArMSwyNTQgQEAKKyIiIlF1ZXVlcyIiIgorCitfX2FsbF9fID0gWydRdWV1ZScsICdQcmlvcml0eVF1ZXVlJywgJ0xpZm9RdWV1ZScsICdRdWV1ZUZ1bGwnLCAnUXVldWVFbXB0eSddCisKK2ltcG9ydCBjb2xsZWN0aW9ucworaW1wb3J0IGhlYXBxCisKK2Zyb20gLiBpbXBvcnQgY29tcGF0Citmcm9tIC4gaW1wb3J0IGV2ZW50cworZnJvbSAuIGltcG9ydCBmdXR1cmVzCitmcm9tIC4gaW1wb3J0IGxvY2tzCitmcm9tIC5jb3JvdXRpbmVzIGltcG9ydCBjb3JvdXRpbmUKKworCitjbGFzcyBRdWV1ZUVtcHR5KEV4Y2VwdGlvbik6CisgICAgIiIiRXhjZXB0aW9uIHJhaXNlZCB3aGVuIFF1ZXVlLmdldF9ub3dhaXQoKSBpcyBjYWxsZWQgb24gYSBRdWV1ZSBvYmplY3QKKyAgICB3aGljaCBpcyBlbXB0eS4KKyAgICAiIiIKKyAgICBwYXNzCisKKworY2xhc3MgUXVldWVGdWxsKEV4Y2VwdGlvbik6CisgICAgIiIiRXhjZXB0aW9uIHJhaXNlZCB3aGVuIHRoZSBRdWV1ZS5wdXRfbm93YWl0KCkgbWV0aG9kIGlzIGNhbGxlZCBvbiBhIFF1ZXVlCisgICAgb2JqZWN0IHdoaWNoIGlzIGZ1bGwuCisgICAgIiIiCisgICAgcGFzcworCisKK2NsYXNzIFF1ZXVlOgorICAgICIiIkEgcXVldWUsIHVzZWZ1bCBmb3IgY29vcmRpbmF0aW5nIHByb2R1Y2VyIGFuZCBjb25zdW1lciBjb3JvdXRpbmVzLgorCisgICAgSWYgbWF4c2l6ZSBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gemVybywgdGhlIHF1ZXVlIHNpemUgaXMgaW5maW5pdGUuIElmIGl0CisgICAgaXMgYW4gaW50ZWdlciBncmVhdGVyIHRoYW4gMCwgdGhlbiAieWllbGQgZnJvbSBwdXQoKSIgd2lsbCBibG9jayB3aGVuIHRoZQorICAgIHF1ZXVlIHJlYWNoZXMgbWF4c2l6ZSwgdW50aWwgYW4gaXRlbSBpcyByZW1vdmVkIGJ5IGdldCgpLgorCisgICAgVW5saWtlIHRoZSBzdGFuZGFyZCBsaWJyYXJ5IFF1ZXVlLCB5b3UgY2FuIHJlbGlhYmx5IGtub3cgdGhpcyBRdWV1ZSdzIHNpemUKKyAgICB3aXRoIHFzaXplKCksIHNpbmNlIHlvdXIgc2luZ2xlLXRocmVhZGVkIGFzeW5jaW8gYXBwbGljYXRpb24gd29uJ3QgYmUKKyAgICBpbnRlcnJ1cHRlZCBiZXR3ZWVuIGNhbGxpbmcgcXNpemUoKSBhbmQgZG9pbmcgYW4gb3BlcmF0aW9uIG9uIHRoZSBRdWV1ZS4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXhzaXplPTAsICosIGxvb3A9Tm9uZSk6CisgICAgICAgIGlmIGxvb3AgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2xvb3AgPSBldmVudHMuZ2V0X2V2ZW50X2xvb3AoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fbG9vcCA9IGxvb3AKKyAgICAgICAgc2VsZi5fbWF4c2l6ZSA9IG1heHNpemUKKworICAgICAgICAjIEZ1dHVyZXMuCisgICAgICAgIHNlbGYuX2dldHRlcnMgPSBjb2xsZWN0aW9ucy5kZXF1ZSgpCisgICAgICAgICMgRnV0dXJlcy4KKyAgICAgICAgc2VsZi5fcHV0dGVycyA9IGNvbGxlY3Rpb25zLmRlcXVlKCkKKyAgICAgICAgc2VsZi5fdW5maW5pc2hlZF90YXNrcyA9IDAKKyAgICAgICAgc2VsZi5fZmluaXNoZWQgPSBsb2Nrcy5FdmVudChsb29wPXNlbGYuX2xvb3ApCisgICAgICAgIHNlbGYuX2ZpbmlzaGVkLnNldCgpCisgICAgICAgIHNlbGYuX2luaXQobWF4c2l6ZSkKKworICAgICMgVGhlc2UgdGhyZWUgYXJlIG92ZXJyaWRhYmxlIGluIHN1YmNsYXNzZXMuCisKKyAgICBkZWYgX2luaXQoc2VsZiwgbWF4c2l6ZSk6CisgICAgICAgIHNlbGYuX3F1ZXVlID0gY29sbGVjdGlvbnMuZGVxdWUoKQorCisgICAgZGVmIF9nZXQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9xdWV1ZS5wb3BsZWZ0KCkKKworICAgIGRlZiBfcHV0KHNlbGYsIGl0ZW0pOgorICAgICAgICBzZWxmLl9xdWV1ZS5hcHBlbmQoaXRlbSkKKworICAgICMgRW5kIG9mIHRoZSBvdmVycmlkYWJsZSBtZXRob2RzLgorCisgICAgZGVmIF93YWtldXBfbmV4dChzZWxmLCB3YWl0ZXJzKToKKyAgICAgICAgIyBXYWtlIHVwIHRoZSBuZXh0IHdhaXRlciAoaWYgYW55KSB0aGF0IGlzbid0IGNhbmNlbGxlZC4KKyAgICAgICAgd2hpbGUgd2FpdGVyczoKKyAgICAgICAgICAgIHdhaXRlciA9IHdhaXRlcnMucG9wbGVmdCgpCisgICAgICAgICAgICBpZiBub3Qgd2FpdGVyLmRvbmUoKToKKyAgICAgICAgICAgICAgICB3YWl0ZXIuc2V0X3Jlc3VsdChOb25lKQorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAnPHt9IGF0IHs6I3h9IHt9PicuZm9ybWF0KAorICAgICAgICAgICAgdHlwZShzZWxmKS5fX25hbWVfXywgaWQoc2VsZiksIHNlbGYuX2Zvcm1hdCgpKQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiAnPHt9IHt9PicuZm9ybWF0KHR5cGUoc2VsZikuX19uYW1lX18sIHNlbGYuX2Zvcm1hdCgpKQorCisgICAgZGVmIF9mb3JtYXQoc2VsZik6CisgICAgICAgIHJlc3VsdCA9ICdtYXhzaXplPXshcn0nLmZvcm1hdChzZWxmLl9tYXhzaXplKQorICAgICAgICBpZiBnZXRhdHRyKHNlbGYsICdfcXVldWUnLCBOb25lKToKKyAgICAgICAgICAgIHJlc3VsdCArPSAnIF9xdWV1ZT17IXJ9Jy5mb3JtYXQobGlzdChzZWxmLl9xdWV1ZSkpCisgICAgICAgIGlmIHNlbGYuX2dldHRlcnM6CisgICAgICAgICAgICByZXN1bHQgKz0gJyBfZ2V0dGVyc1t7fV0nLmZvcm1hdChsZW4oc2VsZi5fZ2V0dGVycykpCisgICAgICAgIGlmIHNlbGYuX3B1dHRlcnM6CisgICAgICAgICAgICByZXN1bHQgKz0gJyBfcHV0dGVyc1t7fV0nLmZvcm1hdChsZW4oc2VsZi5fcHV0dGVycykpCisgICAgICAgIGlmIHNlbGYuX3VuZmluaXNoZWRfdGFza3M6CisgICAgICAgICAgICByZXN1bHQgKz0gJyB0YXNrcz17fScuZm9ybWF0KHNlbGYuX3VuZmluaXNoZWRfdGFza3MpCisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgIGRlZiBxc2l6ZShzZWxmKToKKyAgICAgICAgIiIiTnVtYmVyIG9mIGl0ZW1zIGluIHRoZSBxdWV1ZS4iIiIKKyAgICAgICAgcmV0dXJuIGxlbihzZWxmLl9xdWV1ZSkKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBtYXhzaXplKHNlbGYpOgorICAgICAgICAiIiJOdW1iZXIgb2YgaXRlbXMgYWxsb3dlZCBpbiB0aGUgcXVldWUuIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9tYXhzaXplCisKKyAgICBkZWYgZW1wdHkoc2VsZik6CisgICAgICAgICIiIlJldHVybiBUcnVlIGlmIHRoZSBxdWV1ZSBpcyBlbXB0eSwgRmFsc2Ugb3RoZXJ3aXNlLiIiIgorICAgICAgICByZXR1cm4gbm90IHNlbGYuX3F1ZXVlCisKKyAgICBkZWYgZnVsbChzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIFRydWUgaWYgdGhlcmUgYXJlIG1heHNpemUgaXRlbXMgaW4gdGhlIHF1ZXVlLgorCisgICAgICAgIE5vdGU6IGlmIHRoZSBRdWV1ZSB3YXMgaW5pdGlhbGl6ZWQgd2l0aCBtYXhzaXplPTAgKHRoZSBkZWZhdWx0KSwKKyAgICAgICAgdGhlbiBmdWxsKCkgaXMgbmV2ZXIgVHJ1ZS4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuX21heHNpemUgPD0gMDoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYucXNpemUoKSA+PSBzZWxmLl9tYXhzaXplCisKKyAgICBAY29yb3V0aW5lCisgICAgZGVmIHB1dChzZWxmLCBpdGVtKToKKyAgICAgICAgIiIiUHV0IGFuIGl0ZW0gaW50byB0aGUgcXVldWUuCisKKyAgICAgICAgUHV0IGFuIGl0ZW0gaW50byB0aGUgcXVldWUuIElmIHRoZSBxdWV1ZSBpcyBmdWxsLCB3YWl0IHVudGlsIGEgZnJlZQorICAgICAgICBzbG90IGlzIGF2YWlsYWJsZSBiZWZvcmUgYWRkaW5nIGl0ZW0uCisKKyAgICAgICAgVGhpcyBtZXRob2QgaXMgYSBjb3JvdXRpbmUuCisgICAgICAgICIiIgorICAgICAgICB3aGlsZSBzZWxmLmZ1bGwoKToKKyAgICAgICAgICAgIHB1dHRlciA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5fbG9vcCkKKyAgICAgICAgICAgIHNlbGYuX3B1dHRlcnMuYXBwZW5kKHB1dHRlcikKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB5aWVsZCBmcm9tIHB1dHRlcgorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIHB1dHRlci5jYW5jZWwoKSAgIyBKdXN0IGluIGNhc2UgcHV0dGVyIGlzIG5vdCBkb25lIHlldC4KKyAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5mdWxsKCkgYW5kIG5vdCBwdXR0ZXIuY2FuY2VsbGVkKCk6CisgICAgICAgICAgICAgICAgICAgICMgV2Ugd2VyZSB3b2tlbiB1cCBieSBnZXRfbm93YWl0KCksIGJ1dCBjYW4ndCB0YWtlCisgICAgICAgICAgICAgICAgICAgICMgdGhlIGNhbGwuICBXYWtlIHVwIHRoZSBuZXh0IGluIGxpbmUuCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3dha2V1cF9uZXh0KHNlbGYuX3B1dHRlcnMpCisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgcmV0dXJuIHNlbGYucHV0X25vd2FpdChpdGVtKQorCisgICAgZGVmIHB1dF9ub3dhaXQoc2VsZiwgaXRlbSk6CisgICAgICAgICIiIlB1dCBhbiBpdGVtIGludG8gdGhlIHF1ZXVlIHdpdGhvdXQgYmxvY2tpbmcuCisKKyAgICAgICAgSWYgbm8gZnJlZSBzbG90IGlzIGltbWVkaWF0ZWx5IGF2YWlsYWJsZSwgcmFpc2UgUXVldWVGdWxsLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5mdWxsKCk6CisgICAgICAgICAgICByYWlzZSBRdWV1ZUZ1bGwKKyAgICAgICAgc2VsZi5fcHV0KGl0ZW0pCisgICAgICAgIHNlbGYuX3VuZmluaXNoZWRfdGFza3MgKz0gMQorICAgICAgICBzZWxmLl9maW5pc2hlZC5jbGVhcigpCisgICAgICAgIHNlbGYuX3dha2V1cF9uZXh0KHNlbGYuX2dldHRlcnMpCisKKyAgICBAY29yb3V0aW5lCisgICAgZGVmIGdldChzZWxmKToKKyAgICAgICAgIiIiUmVtb3ZlIGFuZCByZXR1cm4gYW4gaXRlbSBmcm9tIHRoZSBxdWV1ZS4KKworICAgICAgICBJZiBxdWV1ZSBpcyBlbXB0eSwgd2FpdCB1bnRpbCBhbiBpdGVtIGlzIGF2YWlsYWJsZS4KKworICAgICAgICBUaGlzIG1ldGhvZCBpcyBhIGNvcm91dGluZS4KKyAgICAgICAgIiIiCisgICAgICAgIHdoaWxlIHNlbGYuZW1wdHkoKToKKyAgICAgICAgICAgIGdldHRlciA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5fbG9vcCkKKyAgICAgICAgICAgIHNlbGYuX2dldHRlcnMuYXBwZW5kKGdldHRlcikKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB5aWVsZCBmcm9tIGdldHRlcgorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIGdldHRlci5jYW5jZWwoKSAgIyBKdXN0IGluIGNhc2UgZ2V0dGVyIGlzIG5vdCBkb25lIHlldC4KKyAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5lbXB0eSgpIGFuZCBub3QgZ2V0dGVyLmNhbmNlbGxlZCgpOgorICAgICAgICAgICAgICAgICAgICAjIFdlIHdlcmUgd29rZW4gdXAgYnkgcHV0X25vd2FpdCgpLCBidXQgY2FuJ3QgdGFrZQorICAgICAgICAgICAgICAgICAgICAjIHRoZSBjYWxsLiAgV2FrZSB1cCB0aGUgbmV4dCBpbiBsaW5lLgorICAgICAgICAgICAgICAgICAgICBzZWxmLl93YWtldXBfbmV4dChzZWxmLl9nZXR0ZXJzKQorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgIHJldHVybiBzZWxmLmdldF9ub3dhaXQoKQorCisgICAgZGVmIGdldF9ub3dhaXQoc2VsZik6CisgICAgICAgICIiIlJlbW92ZSBhbmQgcmV0dXJuIGFuIGl0ZW0gZnJvbSB0aGUgcXVldWUuCisKKyAgICAgICAgUmV0dXJuIGFuIGl0ZW0gaWYgb25lIGlzIGltbWVkaWF0ZWx5IGF2YWlsYWJsZSwgZWxzZSByYWlzZSBRdWV1ZUVtcHR5LgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5lbXB0eSgpOgorICAgICAgICAgICAgcmFpc2UgUXVldWVFbXB0eQorICAgICAgICBpdGVtID0gc2VsZi5fZ2V0KCkKKyAgICAgICAgc2VsZi5fd2FrZXVwX25leHQoc2VsZi5fcHV0dGVycykKKyAgICAgICAgcmV0dXJuIGl0ZW0KKworICAgIGRlZiB0YXNrX2RvbmUoc2VsZik6CisgICAgICAgICIiIkluZGljYXRlIHRoYXQgYSBmb3JtZXJseSBlbnF1ZXVlZCB0YXNrIGlzIGNvbXBsZXRlLgorCisgICAgICAgIFVzZWQgYnkgcXVldWUgY29uc3VtZXJzLiBGb3IgZWFjaCBnZXQoKSB1c2VkIHRvIGZldGNoIGEgdGFzaywKKyAgICAgICAgYSBzdWJzZXF1ZW50IGNhbGwgdG8gdGFza19kb25lKCkgdGVsbHMgdGhlIHF1ZXVlIHRoYXQgdGhlIHByb2Nlc3NpbmcKKyAgICAgICAgb24gdGhlIHRhc2sgaXMgY29tcGxldGUuCisKKyAgICAgICAgSWYgYSBqb2luKCkgaXMgY3VycmVudGx5IGJsb2NraW5nLCBpdCB3aWxsIHJlc3VtZSB3aGVuIGFsbCBpdGVtcyBoYXZlCisgICAgICAgIGJlZW4gcHJvY2Vzc2VkIChtZWFuaW5nIHRoYXQgYSB0YXNrX2RvbmUoKSBjYWxsIHdhcyByZWNlaXZlZCBmb3IgZXZlcnkKKyAgICAgICAgaXRlbSB0aGF0IGhhZCBiZWVuIHB1dCgpIGludG8gdGhlIHF1ZXVlKS4KKworICAgICAgICBSYWlzZXMgVmFsdWVFcnJvciBpZiBjYWxsZWQgbW9yZSB0aW1lcyB0aGFuIHRoZXJlIHdlcmUgaXRlbXMgcGxhY2VkIGluCisgICAgICAgIHRoZSBxdWV1ZS4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuX3VuZmluaXNoZWRfdGFza3MgPD0gMDoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3Rhc2tfZG9uZSgpIGNhbGxlZCB0b28gbWFueSB0aW1lcycpCisgICAgICAgIHNlbGYuX3VuZmluaXNoZWRfdGFza3MgLT0gMQorICAgICAgICBpZiBzZWxmLl91bmZpbmlzaGVkX3Rhc2tzID09IDA6CisgICAgICAgICAgICBzZWxmLl9maW5pc2hlZC5zZXQoKQorCisgICAgQGNvcm91dGluZQorICAgIGRlZiBqb2luKHNlbGYpOgorICAgICAgICAiIiJCbG9jayB1bnRpbCBhbGwgaXRlbXMgaW4gdGhlIHF1ZXVlIGhhdmUgYmVlbiBnb3R0ZW4gYW5kIHByb2Nlc3NlZC4KKworICAgICAgICBUaGUgY291bnQgb2YgdW5maW5pc2hlZCB0YXNrcyBnb2VzIHVwIHdoZW5ldmVyIGFuIGl0ZW0gaXMgYWRkZWQgdG8gdGhlCisgICAgICAgIHF1ZXVlLiBUaGUgY291bnQgZ29lcyBkb3duIHdoZW5ldmVyIGEgY29uc3VtZXIgY2FsbHMgdGFza19kb25lKCkgdG8KKyAgICAgICAgaW5kaWNhdGUgdGhhdCB0aGUgaXRlbSB3YXMgcmV0cmlldmVkIGFuZCBhbGwgd29yayBvbiBpdCBpcyBjb21wbGV0ZS4KKyAgICAgICAgV2hlbiB0aGUgY291bnQgb2YgdW5maW5pc2hlZCB0YXNrcyBkcm9wcyB0byB6ZXJvLCBqb2luKCkgdW5ibG9ja3MuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl91bmZpbmlzaGVkX3Rhc2tzID4gMDoKKyAgICAgICAgICAgIHlpZWxkIGZyb20gc2VsZi5fZmluaXNoZWQud2FpdCgpCisKKworY2xhc3MgUHJpb3JpdHlRdWV1ZShRdWV1ZSk6CisgICAgIiIiQSBzdWJjbGFzcyBvZiBRdWV1ZTsgcmV0cmlldmVzIGVudHJpZXMgaW4gcHJpb3JpdHkgb3JkZXIgKGxvd2VzdCBmaXJzdCkuCisKKyAgICBFbnRyaWVzIGFyZSB0eXBpY2FsbHkgdHVwbGVzIG9mIHRoZSBmb3JtOiAocHJpb3JpdHkgbnVtYmVyLCBkYXRhKS4KKyAgICAiIiIKKworICAgIGRlZiBfaW5pdChzZWxmLCBtYXhzaXplKToKKyAgICAgICAgc2VsZi5fcXVldWUgPSBbXQorCisgICAgZGVmIF9wdXQoc2VsZiwgaXRlbSwgaGVhcHB1c2g9aGVhcHEuaGVhcHB1c2gpOgorICAgICAgICBoZWFwcHVzaChzZWxmLl9xdWV1ZSwgaXRlbSkKKworICAgIGRlZiBfZ2V0KHNlbGYsIGhlYXBwb3A9aGVhcHEuaGVhcHBvcCk6CisgICAgICAgIHJldHVybiBoZWFwcG9wKHNlbGYuX3F1ZXVlKQorCisKK2NsYXNzIExpZm9RdWV1ZShRdWV1ZSk6CisgICAgIiIiQSBzdWJjbGFzcyBvZiBRdWV1ZSB0aGF0IHJldHJpZXZlcyBtb3N0IHJlY2VudGx5IGFkZGVkIGVudHJpZXMgZmlyc3QuIiIiCisKKyAgICBkZWYgX2luaXQoc2VsZiwgbWF4c2l6ZSk6CisgICAgICAgIHNlbGYuX3F1ZXVlID0gW10KKworICAgIGRlZiBfcHV0KHNlbGYsIGl0ZW0pOgorICAgICAgICBzZWxmLl9xdWV1ZS5hcHBlbmQoaXRlbSkKKworICAgIGRlZiBfZ2V0KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fcXVldWUucG9wKCkKKworCitpZiBub3QgY29tcGF0LlBZMzU6CisgICAgSm9pbmFibGVRdWV1ZSA9IFF1ZXVlCisgICAgIiIiRGVwcmVjYXRlZCBhbGlhcyBmb3IgUXVldWUuIiIiCisgICAgX19hbGxfXy5hcHBlbmQoJ0pvaW5hYmxlUXVldWUnKQpkaWZmIC0tZ2l0IGEvTGliL2FzeW5jaW8vc2VsZWN0b3JfZXZlbnRzLnB5IGIvTGliL2FzeW5jaW8vc2VsZWN0b3JfZXZlbnRzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViMjY2MzEKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvYXN5bmNpby9zZWxlY3Rvcl9ldmVudHMucHkKQEAgLTAsMCArMSwxMDczIEBACisiIiJFdmVudCBsb29wIHVzaW5nIGEgc2VsZWN0b3IgYW5kIHJlbGF0ZWQgY2xhc3Nlcy4KKworQSBzZWxlY3RvciBpcyBhICJub3RpZnktd2hlbi1yZWFkeSIgbXVsdGlwbGV4ZXIuICBGb3IgYSBzdWJjbGFzcyB3aGljaAorYWxzbyBpbmNsdWRlcyBzdXBwb3J0IGZvciBzaWduYWwgaGFuZGxpbmcsIHNlZSB0aGUgdW5peF9ldmVudHMgc3ViLW1vZHVsZS4KKyIiIgorCitfX2FsbF9fID0gWydCYXNlU2VsZWN0b3JFdmVudExvb3AnXQorCitpbXBvcnQgY29sbGVjdGlvbnMKK2ltcG9ydCBlcnJubworaW1wb3J0IGZ1bmN0b29scworaW1wb3J0IHNvY2tldAoraW1wb3J0IHdhcm5pbmdzCit0cnk6CisgICAgaW1wb3J0IHNzbAorZXhjZXB0IEltcG9ydEVycm9yOiAgIyBwcmFnbWE6IG5vIGNvdmVyCisgICAgc3NsID0gTm9uZQorCitmcm9tIC4gaW1wb3J0IGJhc2VfZXZlbnRzCitmcm9tIC4gaW1wb3J0IGNvbXBhdAorZnJvbSAuIGltcG9ydCBjb25zdGFudHMKK2Zyb20gLiBpbXBvcnQgZXZlbnRzCitmcm9tIC4gaW1wb3J0IGZ1dHVyZXMKK2Zyb20gLiBpbXBvcnQgc2VsZWN0b3JzCitmcm9tIC4gaW1wb3J0IHRyYW5zcG9ydHMKK2Zyb20gLiBpbXBvcnQgc3NscHJvdG8KK2Zyb20gLmNvcm91dGluZXMgaW1wb3J0IGNvcm91dGluZQorZnJvbSAubG9nIGltcG9ydCBsb2dnZXIKKworCitkZWYgX3Rlc3Rfc2VsZWN0b3JfZXZlbnQoc2VsZWN0b3IsIGZkLCBldmVudCk6CisgICAgIyBUZXN0IGlmIHRoZSBzZWxlY3RvciBpcyBtb25pdG9yaW5nICdldmVudCcgZXZlbnRzCisgICAgIyBmb3IgdGhlIGZpbGUgZGVzY3JpcHRvciAnZmQnLgorICAgIHRyeToKKyAgICAgICAga2V5ID0gc2VsZWN0b3IuZ2V0X2tleShmZCkKKyAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgIHJldHVybiBGYWxzZQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBib29sKGtleS5ldmVudHMgJiBldmVudCkKKworCitjbGFzcyBCYXNlU2VsZWN0b3JFdmVudExvb3AoYmFzZV9ldmVudHMuQmFzZUV2ZW50TG9vcCk6CisgICAgIiIiU2VsZWN0b3IgZXZlbnQgbG9vcC4KKworICAgIFNlZSBldmVudHMuRXZlbnRMb29wIGZvciBBUEkgc3BlY2lmaWNhdGlvbi4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZWxlY3Rvcj1Ob25lKToKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXygpCisKKyAgICAgICAgaWYgc2VsZWN0b3IgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGVjdG9yID0gc2VsZWN0b3JzLkRlZmF1bHRTZWxlY3RvcigpCisgICAgICAgIGxvZ2dlci5kZWJ1ZygnVXNpbmcgc2VsZWN0b3I6ICVzJywgc2VsZWN0b3IuX19jbGFzc19fLl9fbmFtZV9fKQorICAgICAgICBzZWxmLl9zZWxlY3RvciA9IHNlbGVjdG9yCisgICAgICAgIHNlbGYuX21ha2Vfc2VsZl9waXBlKCkKKworICAgIGRlZiBfbWFrZV9zb2NrZXRfdHJhbnNwb3J0KHNlbGYsIHNvY2ssIHByb3RvY29sLCB3YWl0ZXI9Tm9uZSwgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYT1Ob25lLCBzZXJ2ZXI9Tm9uZSk6CisgICAgICAgIHJldHVybiBfU2VsZWN0b3JTb2NrZXRUcmFuc3BvcnQoc2VsZiwgc29jaywgcHJvdG9jb2wsIHdhaXRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYSwgc2VydmVyKQorCisgICAgZGVmIF9tYWtlX3NzbF90cmFuc3BvcnQoc2VsZiwgcmF3c29jaywgcHJvdG9jb2wsIHNzbGNvbnRleHQsIHdhaXRlcj1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICosIHNlcnZlcl9zaWRlPUZhbHNlLCBzZXJ2ZXJfaG9zdG5hbWU9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYT1Ob25lLCBzZXJ2ZXI9Tm9uZSk6CisgICAgICAgIGlmIG5vdCBzc2xwcm90by5faXNfc3NscHJvdG9fYXZhaWxhYmxlKCk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fbWFrZV9sZWdhY3lfc3NsX3RyYW5zcG9ydCgKKyAgICAgICAgICAgICAgICByYXdzb2NrLCBwcm90b2NvbCwgc3NsY29udGV4dCwgd2FpdGVyLAorICAgICAgICAgICAgICAgIHNlcnZlcl9zaWRlPXNlcnZlcl9zaWRlLCBzZXJ2ZXJfaG9zdG5hbWU9c2VydmVyX2hvc3RuYW1lLAorICAgICAgICAgICAgICAgIGV4dHJhPWV4dHJhLCBzZXJ2ZXI9c2VydmVyKQorCisgICAgICAgIHNzbF9wcm90b2NvbCA9IHNzbHByb3RvLlNTTFByb3RvY29sKHNlbGYsIHByb3RvY29sLCBzc2xjb250ZXh0LCB3YWl0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9zaWRlLCBzZXJ2ZXJfaG9zdG5hbWUpCisgICAgICAgIF9TZWxlY3RvclNvY2tldFRyYW5zcG9ydChzZWxmLCByYXdzb2NrLCBzc2xfcHJvdG9jb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYT1leHRyYSwgc2VydmVyPXNlcnZlcikKKyAgICAgICAgcmV0dXJuIHNzbF9wcm90b2NvbC5fYXBwX3RyYW5zcG9ydAorCisgICAgZGVmIF9tYWtlX2xlZ2FjeV9zc2xfdHJhbnNwb3J0KHNlbGYsIHJhd3NvY2ssIHByb3RvY29sLCBzc2xjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YWl0ZXIsICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9zaWRlPUZhbHNlLCBzZXJ2ZXJfaG9zdG5hbWU9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE9Tm9uZSwgc2VydmVyPU5vbmUpOgorICAgICAgICAjIFVzZSB0aGUgbGVnYWN5IEFQSTogU1NMX3dyaXRlLCBTU0xfcmVhZCwgZXRjLiBUaGUgbGVnYWN5IEFQSSBpcyB1c2VkCisgICAgICAgICMgb24gUHl0aG9uIDMuNCBhbmQgb2xkZXIsIHdoZW4gc3NsLk1lbW9yeUJJTyBpcyBub3QgYXZhaWxhYmxlLgorICAgICAgICByZXR1cm4gX1NlbGVjdG9yU3NsVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZiwgcmF3c29jaywgcHJvdG9jb2wsIHNzbGNvbnRleHQsIHdhaXRlciwKKyAgICAgICAgICAgIHNlcnZlcl9zaWRlLCBzZXJ2ZXJfaG9zdG5hbWUsIGV4dHJhLCBzZXJ2ZXIpCisKKyAgICBkZWYgX21ha2VfZGF0YWdyYW1fdHJhbnNwb3J0KHNlbGYsIHNvY2ssIHByb3RvY29sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzcz1Ob25lLCB3YWl0ZXI9Tm9uZSwgZXh0cmE9Tm9uZSk6CisgICAgICAgIHJldHVybiBfU2VsZWN0b3JEYXRhZ3JhbVRyYW5zcG9ydChzZWxmLCBzb2NrLCBwcm90b2NvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3MsIHdhaXRlciwgZXh0cmEpCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgIGlmIHNlbGYuaXNfcnVubmluZygpOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJDYW5ub3QgY2xvc2UgYSBydW5uaW5nIGV2ZW50IGxvb3AiKQorICAgICAgICBpZiBzZWxmLmlzX2Nsb3NlZCgpOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYuX2Nsb3NlX3NlbGZfcGlwZSgpCisgICAgICAgIHN1cGVyKCkuY2xvc2UoKQorICAgICAgICBpZiBzZWxmLl9zZWxlY3RvciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX3NlbGVjdG9yLmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuX3NlbGVjdG9yID0gTm9uZQorCisgICAgZGVmIF9zb2NrZXRwYWlyKHNlbGYpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgX2Nsb3NlX3NlbGZfcGlwZShzZWxmKToKKyAgICAgICAgc2VsZi5yZW1vdmVfcmVhZGVyKHNlbGYuX3Nzb2NrLmZpbGVubygpKQorICAgICAgICBzZWxmLl9zc29jay5jbG9zZSgpCisgICAgICAgIHNlbGYuX3Nzb2NrID0gTm9uZQorICAgICAgICBzZWxmLl9jc29jay5jbG9zZSgpCisgICAgICAgIHNlbGYuX2Nzb2NrID0gTm9uZQorICAgICAgICBzZWxmLl9pbnRlcm5hbF9mZHMgLT0gMQorCisgICAgZGVmIF9tYWtlX3NlbGZfcGlwZShzZWxmKToKKyAgICAgICAgIyBBIHNlbGYtc29ja2V0LCByZWFsbHkuIDotKQorICAgICAgICBzZWxmLl9zc29jaywgc2VsZi5fY3NvY2sgPSBzZWxmLl9zb2NrZXRwYWlyKCkKKyAgICAgICAgc2VsZi5fc3NvY2suc2V0YmxvY2tpbmcoRmFsc2UpCisgICAgICAgIHNlbGYuX2Nzb2NrLnNldGJsb2NraW5nKEZhbHNlKQorICAgICAgICBzZWxmLl9pbnRlcm5hbF9mZHMgKz0gMQorICAgICAgICBzZWxmLmFkZF9yZWFkZXIoc2VsZi5fc3NvY2suZmlsZW5vKCksIHNlbGYuX3JlYWRfZnJvbV9zZWxmKQorCisgICAgZGVmIF9wcm9jZXNzX3NlbGZfZGF0YShzZWxmLCBkYXRhKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIF9yZWFkX2Zyb21fc2VsZihzZWxmKToKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBkYXRhID0gc2VsZi5fc3NvY2sucmVjdig0MDk2KQorICAgICAgICAgICAgICAgIGlmIG5vdCBkYXRhOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIHNlbGYuX3Byb2Nlc3Nfc2VsZl9kYXRhKGRhdGEpCisgICAgICAgICAgICBleGNlcHQgSW50ZXJydXB0ZWRFcnJvcjoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgZXhjZXB0IEJsb2NraW5nSU9FcnJvcjoKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgZGVmIF93cml0ZV90b19zZWxmKHNlbGYpOgorICAgICAgICAjIFRoaXMgbWF5IGJlIGNhbGxlZCBmcm9tIGEgZGlmZmVyZW50IHRocmVhZCwgcG9zc2libHkgYWZ0ZXIKKyAgICAgICAgIyBfY2xvc2Vfc2VsZl9waXBlKCkgaGFzIGJlZW4gY2FsbGVkIG9yIGV2ZW4gd2hpbGUgaXQgaXMKKyAgICAgICAgIyBydW5uaW5nLiAgR3VhcmQgZm9yIHNlbGYuX2Nzb2NrIGJlaW5nIE5vbmUgb3IgY2xvc2VkLiAgV2hlbgorICAgICAgICAjIGEgc29ja2V0IGlzIGNsb3NlZCwgc2VuZCgpIHJhaXNlcyBPU0Vycm9yICh3aXRoIGVycm5vIHNldCB0bworICAgICAgICAjIEVCQURGLCBidXQgbGV0J3Mgbm90IHJlbHkgb24gdGhlIGV4YWN0IGVycm9yIGNvZGUpLgorICAgICAgICBjc29jayA9IHNlbGYuX2Nzb2NrCisgICAgICAgIGlmIGNzb2NrIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGNzb2NrLnNlbmQoYidcMCcpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICBpZiBzZWxmLl9kZWJ1ZzoKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCJGYWlsIHRvIHdyaXRlIGEgbnVsbCBieXRlIGludG8gdGhlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZWxmLXBpcGUgc29ja2V0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y19pbmZvPVRydWUpCisKKyAgICBkZWYgX3N0YXJ0X3NlcnZpbmcoc2VsZiwgcHJvdG9jb2xfZmFjdG9yeSwgc29jaywKKyAgICAgICAgICAgICAgICAgICAgICAgc3NsY29udGV4dD1Ob25lLCBzZXJ2ZXI9Tm9uZSk6CisgICAgICAgIHNlbGYuYWRkX3JlYWRlcihzb2NrLmZpbGVubygpLCBzZWxmLl9hY2NlcHRfY29ubmVjdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvY29sX2ZhY3RvcnksIHNvY2ssIHNzbGNvbnRleHQsIHNlcnZlcikKKworICAgIGRlZiBfYWNjZXB0X2Nvbm5lY3Rpb24oc2VsZiwgcHJvdG9jb2xfZmFjdG9yeSwgc29jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbGNvbnRleHQ9Tm9uZSwgc2VydmVyPU5vbmUpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBjb25uLCBhZGRyID0gc29jay5hY2NlcHQoKQorICAgICAgICAgICAgaWYgc2VsZi5fZGVidWc6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCIlciBnb3QgYSBuZXcgY29ubmVjdGlvbiBmcm9tICVyOiAlciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlciwgYWRkciwgY29ubikKKyAgICAgICAgICAgIGNvbm4uc2V0YmxvY2tpbmcoRmFsc2UpCisgICAgICAgIGV4Y2VwdCAoQmxvY2tpbmdJT0Vycm9yLCBJbnRlcnJ1cHRlZEVycm9yLCBDb25uZWN0aW9uQWJvcnRlZEVycm9yKToKKyAgICAgICAgICAgIHBhc3MgICMgRmFsc2UgYWxhcm0uCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKKyAgICAgICAgICAgICMgVGhlcmUncyBub3doZXJlIHRvIHNlbmQgdGhlIGVycm9yLCBzbyBqdXN0IGxvZyBpdC4KKyAgICAgICAgICAgIGlmIGV4Yy5lcnJubyBpbiAoZXJybm8uRU1GSUxFLCBlcnJuby5FTkZJTEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm5vLkVOT0JVRlMsIGVycm5vLkVOT01FTSk6CisgICAgICAgICAgICAgICAgIyBTb21lIHBsYXRmb3JtcyAoZS5nLiBMaW51eCBrZWVwIHJlcG9ydGluZyB0aGUgRkQgYXMKKyAgICAgICAgICAgICAgICAjIHJlYWR5LCBzbyB3ZSByZW1vdmUgdGhlIHJlYWQgaGFuZGxlciB0ZW1wb3JhcmlseS4KKyAgICAgICAgICAgICAgICAjIFdlJ2xsIHRyeSBhZ2FpbiBpbiBhIHdoaWxlLgorICAgICAgICAgICAgICAgIHNlbGYuY2FsbF9leGNlcHRpb25faGFuZGxlcih7CisgICAgICAgICAgICAgICAgICAgICdtZXNzYWdlJzogJ3NvY2tldC5hY2NlcHQoKSBvdXQgb2Ygc3lzdGVtIHJlc291cmNlJywKKyAgICAgICAgICAgICAgICAgICAgJ2V4Y2VwdGlvbic6IGV4YywKKyAgICAgICAgICAgICAgICAgICAgJ3NvY2tldCc6IHNvY2ssCisgICAgICAgICAgICAgICAgfSkKKyAgICAgICAgICAgICAgICBzZWxmLnJlbW92ZV9yZWFkZXIoc29jay5maWxlbm8oKSkKKyAgICAgICAgICAgICAgICBzZWxmLmNhbGxfbGF0ZXIoY29uc3RhbnRzLkFDQ0VQVF9SRVRSWV9ERUxBWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fc3RhcnRfc2VydmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG9jb2xfZmFjdG9yeSwgc29jaywgc3NsY29udGV4dCwgc2VydmVyKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZSAgIyBUaGUgZXZlbnQgbG9vcCB3aWxsIGNhdGNoLCBsb2cgYW5kIGlnbm9yZSBpdC4KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGV4dHJhID0geydwZWVybmFtZSc6IGFkZHJ9CisgICAgICAgICAgICBhY2NlcHQgPSBzZWxmLl9hY2NlcHRfY29ubmVjdGlvbjIocHJvdG9jb2xfZmFjdG9yeSwgY29ubiwgZXh0cmEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsY29udGV4dCwgc2VydmVyKQorICAgICAgICAgICAgc2VsZi5jcmVhdGVfdGFzayhhY2NlcHQpCisKKyAgICBAY29yb3V0aW5lCisgICAgZGVmIF9hY2NlcHRfY29ubmVjdGlvbjIoc2VsZiwgcHJvdG9jb2xfZmFjdG9yeSwgY29ubiwgZXh0cmEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsY29udGV4dD1Ob25lLCBzZXJ2ZXI9Tm9uZSk6CisgICAgICAgIHByb3RvY29sID0gTm9uZQorICAgICAgICB0cmFuc3BvcnQgPSBOb25lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHByb3RvY29sID0gcHJvdG9jb2xfZmFjdG9yeSgpCisgICAgICAgICAgICB3YWl0ZXIgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYpCisgICAgICAgICAgICBpZiBzc2xjb250ZXh0OgorICAgICAgICAgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuX21ha2Vfc3NsX3RyYW5zcG9ydCgKKyAgICAgICAgICAgICAgICAgICAgY29ubiwgcHJvdG9jb2wsIHNzbGNvbnRleHQsIHdhaXRlcj13YWl0ZXIsCisgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9zaWRlPVRydWUsIGV4dHJhPWV4dHJhLCBzZXJ2ZXI9c2VydmVyKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLl9tYWtlX3NvY2tldF90cmFuc3BvcnQoCisgICAgICAgICAgICAgICAgICAgIGNvbm4sIHByb3RvY29sLCB3YWl0ZXI9d2FpdGVyLCBleHRyYT1leHRyYSwKKyAgICAgICAgICAgICAgICAgICAgc2VydmVyPXNlcnZlcikKKworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gd2FpdGVyCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgdHJhbnNwb3J0LmNsb3NlKCkKKyAgICAgICAgICAgICAgICByYWlzZQorCisgICAgICAgICAgICAjIEl0J3Mgbm93IHVwIHRvIHRoZSBwcm90b2NvbCB0byBoYW5kbGUgdGhlIGNvbm5lY3Rpb24uCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgaWYgc2VsZi5fZGVidWc6CisgICAgICAgICAgICAgICAgY29udGV4dCA9IHsKKyAgICAgICAgICAgICAgICAgICAgJ21lc3NhZ2UnOiAoJ0Vycm9yIG9uIHRyYW5zcG9ydCBjcmVhdGlvbiAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmb3IgaW5jb21pbmcgY29ubmVjdGlvbicpLAorICAgICAgICAgICAgICAgICAgICAnZXhjZXB0aW9uJzogZXhjLAorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiBwcm90b2NvbCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dFsncHJvdG9jb2wnXSA9IHByb3RvY29sCisgICAgICAgICAgICAgICAgaWYgdHJhbnNwb3J0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBjb250ZXh0Wyd0cmFuc3BvcnQnXSA9IHRyYW5zcG9ydAorICAgICAgICAgICAgICAgIHNlbGYuY2FsbF9leGNlcHRpb25faGFuZGxlcihjb250ZXh0KQorCisgICAgZGVmIGFkZF9yZWFkZXIoc2VsZiwgZmQsIGNhbGxiYWNrLCAqYXJncyk6CisgICAgICAgICIiIkFkZCBhIHJlYWRlciBjYWxsYmFjay4iIiIKKyAgICAgICAgc2VsZi5fY2hlY2tfY2xvc2VkKCkKKyAgICAgICAgaGFuZGxlID0gZXZlbnRzLkhhbmRsZShjYWxsYmFjaywgYXJncywgc2VsZikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAga2V5ID0gc2VsZi5fc2VsZWN0b3IuZ2V0X2tleShmZCkKKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgc2VsZi5fc2VsZWN0b3IucmVnaXN0ZXIoZmQsIHNlbGVjdG9ycy5FVkVOVF9SRUFELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGhhbmRsZSwgTm9uZSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtYXNrLCAocmVhZGVyLCB3cml0ZXIpID0ga2V5LmV2ZW50cywga2V5LmRhdGEKKyAgICAgICAgICAgIHNlbGYuX3NlbGVjdG9yLm1vZGlmeShmZCwgbWFzayB8IHNlbGVjdG9ycy5FVkVOVF9SRUFELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChoYW5kbGUsIHdyaXRlcikpCisgICAgICAgICAgICBpZiByZWFkZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgcmVhZGVyLmNhbmNlbCgpCisKKyAgICBkZWYgcmVtb3ZlX3JlYWRlcihzZWxmLCBmZCk6CisgICAgICAgICIiIlJlbW92ZSBhIHJlYWRlciBjYWxsYmFjay4iIiIKKyAgICAgICAgaWYgc2VsZi5pc19jbG9zZWQoKToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBrZXkgPSBzZWxmLl9zZWxlY3Rvci5nZXRfa2V5KGZkKQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG1hc2ssIChyZWFkZXIsIHdyaXRlcikgPSBrZXkuZXZlbnRzLCBrZXkuZGF0YQorICAgICAgICAgICAgbWFzayAmPSB+c2VsZWN0b3JzLkVWRU5UX1JFQUQKKyAgICAgICAgICAgIGlmIG5vdCBtYXNrOgorICAgICAgICAgICAgICAgIHNlbGYuX3NlbGVjdG9yLnVucmVnaXN0ZXIoZmQpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuX3NlbGVjdG9yLm1vZGlmeShmZCwgbWFzaywgKE5vbmUsIHdyaXRlcikpCisKKyAgICAgICAgICAgIGlmIHJlYWRlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICByZWFkZXIuY2FuY2VsKCkKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBhZGRfd3JpdGVyKHNlbGYsIGZkLCBjYWxsYmFjaywgKmFyZ3MpOgorICAgICAgICAiIiJBZGQgYSB3cml0ZXIgY2FsbGJhY2suLiIiIgorICAgICAgICBzZWxmLl9jaGVja19jbG9zZWQoKQorICAgICAgICBoYW5kbGUgPSBldmVudHMuSGFuZGxlKGNhbGxiYWNrLCBhcmdzLCBzZWxmKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBrZXkgPSBzZWxmLl9zZWxlY3Rvci5nZXRfa2V5KGZkKQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBzZWxmLl9zZWxlY3Rvci5yZWdpc3RlcihmZCwgc2VsZWN0b3JzLkVWRU5UX1dSSVRFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKE5vbmUsIGhhbmRsZSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtYXNrLCAocmVhZGVyLCB3cml0ZXIpID0ga2V5LmV2ZW50cywga2V5LmRhdGEKKyAgICAgICAgICAgIHNlbGYuX3NlbGVjdG9yLm1vZGlmeShmZCwgbWFzayB8IHNlbGVjdG9ycy5FVkVOVF9XUklURSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmVhZGVyLCBoYW5kbGUpKQorICAgICAgICAgICAgaWYgd3JpdGVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHdyaXRlci5jYW5jZWwoKQorCisgICAgZGVmIHJlbW92ZV93cml0ZXIoc2VsZiwgZmQpOgorICAgICAgICAiIiJSZW1vdmUgYSB3cml0ZXIgY2FsbGJhY2suIiIiCisgICAgICAgIGlmIHNlbGYuaXNfY2xvc2VkKCk6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAga2V5ID0gc2VsZi5fc2VsZWN0b3IuZ2V0X2tleShmZCkKKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtYXNrLCAocmVhZGVyLCB3cml0ZXIpID0ga2V5LmV2ZW50cywga2V5LmRhdGEKKyAgICAgICAgICAgICMgUmVtb3ZlIGJvdGggd3JpdGVyIGFuZCBjb25uZWN0b3IuCisgICAgICAgICAgICBtYXNrICY9IH5zZWxlY3RvcnMuRVZFTlRfV1JJVEUKKyAgICAgICAgICAgIGlmIG5vdCBtYXNrOgorICAgICAgICAgICAgICAgIHNlbGYuX3NlbGVjdG9yLnVucmVnaXN0ZXIoZmQpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuX3NlbGVjdG9yLm1vZGlmeShmZCwgbWFzaywgKHJlYWRlciwgTm9uZSkpCisKKyAgICAgICAgICAgIGlmIHdyaXRlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICB3cml0ZXIuY2FuY2VsKCkKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBzb2NrX3JlY3Yoc2VsZiwgc29jaywgbik6CisgICAgICAgICIiIlJlY2VpdmUgZGF0YSBmcm9tIHRoZSBzb2NrZXQuCisKKyAgICAgICAgVGhlIHJldHVybiB2YWx1ZSBpcyBhIGJ5dGVzIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGRhdGEgcmVjZWl2ZWQuCisgICAgICAgIFRoZSBtYXhpbXVtIGFtb3VudCBvZiBkYXRhIHRvIGJlIHJlY2VpdmVkIGF0IG9uY2UgaXMgc3BlY2lmaWVkIGJ5CisgICAgICAgIG5ieXRlcy4KKworICAgICAgICBUaGlzIG1ldGhvZCBpcyBhIGNvcm91dGluZS4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuX2RlYnVnIGFuZCBzb2NrLmdldHRpbWVvdXQoKSAhPSAwOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigidGhlIHNvY2tldCBtdXN0IGJlIG5vbi1ibG9ja2luZyIpCisgICAgICAgIGZ1dCA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZikKKyAgICAgICAgc2VsZi5fc29ja19yZWN2KGZ1dCwgRmFsc2UsIHNvY2ssIG4pCisgICAgICAgIHJldHVybiBmdXQKKworICAgIGRlZiBfc29ja19yZWN2KHNlbGYsIGZ1dCwgcmVnaXN0ZXJlZCwgc29jaywgbik6CisgICAgICAgICMgX3NvY2tfcmVjdigpIGNhbiBhZGQgaXRzZWxmIGFzIGFuIEkvTyBjYWxsYmFjayBpZiB0aGUgb3BlcmF0aW9uIGNhbid0CisgICAgICAgICMgYmUgZG9uZSBpbW1lZGlhdGVseS4gRG9uJ3QgdXNlIGl0IGRpcmVjdGx5LCBjYWxsIHNvY2tfcmVjdigpLgorICAgICAgICBmZCA9IHNvY2suZmlsZW5vKCkKKyAgICAgICAgaWYgcmVnaXN0ZXJlZDoKKyAgICAgICAgICAgICMgUmVtb3ZlIHRoZSBjYWxsYmFjayBlYXJseS4gIEl0IHNob3VsZCBiZSByYXJlIHRoYXQgdGhlCisgICAgICAgICAgICAjIHNlbGVjdG9yIHNheXMgdGhlIGZkIGlzIHJlYWR5IGJ1dCB0aGUgY2FsbCBzdGlsbCByZXR1cm5zCisgICAgICAgICAgICAjIEVBR0FJTiwgYW5kIEkgYW0gd2lsbGluZyB0byB0YWtlIGEgaGl0IGluIHRoYXQgY2FzZSBpbgorICAgICAgICAgICAgIyBvcmRlciB0byBzaW1wbGlmeSB0aGUgY29tbW9uIGNhc2UuCisgICAgICAgICAgICBzZWxmLnJlbW92ZV9yZWFkZXIoZmQpCisgICAgICAgIGlmIGZ1dC5jYW5jZWxsZWQoKToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICB0cnk6CisgICAgICAgICAgICBkYXRhID0gc29jay5yZWN2KG4pCisgICAgICAgIGV4Y2VwdCAoQmxvY2tpbmdJT0Vycm9yLCBJbnRlcnJ1cHRlZEVycm9yKToKKyAgICAgICAgICAgIHNlbGYuYWRkX3JlYWRlcihmZCwgc2VsZi5fc29ja19yZWN2LCBmdXQsIFRydWUsIHNvY2ssIG4pCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgZnV0LnNldF9leGNlcHRpb24oZXhjKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZnV0LnNldF9yZXN1bHQoZGF0YSkKKworICAgIGRlZiBzb2NrX3NlbmRhbGwoc2VsZiwgc29jaywgZGF0YSk6CisgICAgICAgICIiIlNlbmQgZGF0YSB0byB0aGUgc29ja2V0LgorCisgICAgICAgIFRoZSBzb2NrZXQgbXVzdCBiZSBjb25uZWN0ZWQgdG8gYSByZW1vdGUgc29ja2V0LiBUaGlzIG1ldGhvZCBjb250aW51ZXMKKyAgICAgICAgdG8gc2VuZCBkYXRhIGZyb20gZGF0YSB1bnRpbCBlaXRoZXIgYWxsIGRhdGEgaGFzIGJlZW4gc2VudCBvciBhbgorICAgICAgICBlcnJvciBvY2N1cnMuIE5vbmUgaXMgcmV0dXJuZWQgb24gc3VjY2Vzcy4gT24gZXJyb3IsIGFuIGV4Y2VwdGlvbiBpcworICAgICAgICByYWlzZWQsIGFuZCB0aGVyZSBpcyBubyB3YXkgdG8gZGV0ZXJtaW5lIGhvdyBtdWNoIGRhdGEsIGlmIGFueSwgd2FzCisgICAgICAgIHN1Y2Nlc3NmdWxseSBwcm9jZXNzZWQgYnkgdGhlIHJlY2VpdmluZyBlbmQgb2YgdGhlIGNvbm5lY3Rpb24uCisKKyAgICAgICAgVGhpcyBtZXRob2QgaXMgYSBjb3JvdXRpbmUuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl9kZWJ1ZyBhbmQgc29jay5nZXR0aW1lb3V0KCkgIT0gMDoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInRoZSBzb2NrZXQgbXVzdCBiZSBub24tYmxvY2tpbmciKQorICAgICAgICBmdXQgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYpCisgICAgICAgIGlmIGRhdGE6CisgICAgICAgICAgICBzZWxmLl9zb2NrX3NlbmRhbGwoZnV0LCBGYWxzZSwgc29jaywgZGF0YSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZ1dC5zZXRfcmVzdWx0KE5vbmUpCisgICAgICAgIHJldHVybiBmdXQKKworICAgIGRlZiBfc29ja19zZW5kYWxsKHNlbGYsIGZ1dCwgcmVnaXN0ZXJlZCwgc29jaywgZGF0YSk6CisgICAgICAgIGZkID0gc29jay5maWxlbm8oKQorCisgICAgICAgIGlmIHJlZ2lzdGVyZWQ6CisgICAgICAgICAgICBzZWxmLnJlbW92ZV93cml0ZXIoZmQpCisgICAgICAgIGlmIGZ1dC5jYW5jZWxsZWQoKToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG4gPSBzb2NrLnNlbmQoZGF0YSkKKyAgICAgICAgZXhjZXB0IChCbG9ja2luZ0lPRXJyb3IsIEludGVycnVwdGVkRXJyb3IpOgorICAgICAgICAgICAgbiA9IDAKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICBmdXQuc2V0X2V4Y2VwdGlvbihleGMpCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpZiBuID09IGxlbihkYXRhKToKKyAgICAgICAgICAgIGZ1dC5zZXRfcmVzdWx0KE5vbmUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBuOgorICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhW246XQorICAgICAgICAgICAgc2VsZi5hZGRfd3JpdGVyKGZkLCBzZWxmLl9zb2NrX3NlbmRhbGwsIGZ1dCwgVHJ1ZSwgc29jaywgZGF0YSkKKworICAgIGRlZiBzb2NrX2Nvbm5lY3Qoc2VsZiwgc29jaywgYWRkcmVzcyk6CisgICAgICAgICIiIkNvbm5lY3QgdG8gYSByZW1vdGUgc29ja2V0IGF0IGFkZHJlc3MuCisKKyAgICAgICAgVGhlIGFkZHJlc3MgbXVzdCBiZSBhbHJlYWR5IHJlc29sdmVkIHRvIGF2b2lkIHRoZSB0cmFwIG9mIGhhbmdpbmcgdGhlCisgICAgICAgIGVudGlyZSBldmVudCBsb29wIHdoZW4gdGhlIGFkZHJlc3MgcmVxdWlyZXMgZG9pbmcgYSBETlMgbG9va3VwLiBGb3IKKyAgICAgICAgZXhhbXBsZSwgaXQgbXVzdCBiZSBhbiBJUCBhZGRyZXNzLCBub3QgYW4gaG9zdG5hbWUsIGZvciBBRl9JTkVUIGFuZAorICAgICAgICBBRl9JTkVUNiBhZGRyZXNzIGZhbWlsaWVzLiBVc2UgZ2V0YWRkcmluZm8oKSB0byByZXNvbHZlIHRoZSBob3N0bmFtZQorICAgICAgICBhc3luY2hyb25vdXNseS4KKworICAgICAgICBUaGlzIG1ldGhvZCBpcyBhIGNvcm91dGluZS4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuX2RlYnVnIGFuZCBzb2NrLmdldHRpbWVvdXQoKSAhPSAwOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigidGhlIHNvY2tldCBtdXN0IGJlIG5vbi1ibG9ja2luZyIpCisgICAgICAgIGZ1dCA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYmFzZV9ldmVudHMuX2NoZWNrX3Jlc29sdmVkX2FkZHJlc3Moc29jaywgYWRkcmVzcykKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgZnV0LnNldF9leGNlcHRpb24oZXJyKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fc29ja19jb25uZWN0KGZ1dCwgc29jaywgYWRkcmVzcykKKyAgICAgICAgcmV0dXJuIGZ1dAorCisgICAgZGVmIF9zb2NrX2Nvbm5lY3Qoc2VsZiwgZnV0LCBzb2NrLCBhZGRyZXNzKToKKyAgICAgICAgZmQgPSBzb2NrLmZpbGVubygpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNvY2suY29ubmVjdChhZGRyZXNzKQorICAgICAgICBleGNlcHQgKEJsb2NraW5nSU9FcnJvciwgSW50ZXJydXB0ZWRFcnJvcik6CisgICAgICAgICAgICAjIElzc3VlICMyMzYxODogV2hlbiB0aGUgQyBmdW5jdGlvbiBjb25uZWN0KCkgZmFpbHMgd2l0aCBFSU5UUiwgdGhlCisgICAgICAgICAgICAjIGNvbm5lY3Rpb24gcnVucyBpbiBiYWNrZ3JvdW5kLiBXZSBoYXZlIHRvIHdhaXQgdW50aWwgdGhlIHNvY2tldAorICAgICAgICAgICAgIyBiZWNvbWVzIHdyaXRhYmxlIHRvIGJlIG5vdGlmaWVkIHdoZW4gdGhlIGNvbm5lY3Rpb24gc3VjY2VlZCBvcgorICAgICAgICAgICAgIyBmYWlscy4KKyAgICAgICAgICAgIGZ1dC5hZGRfZG9uZV9jYWxsYmFjayhmdW5jdG9vbHMucGFydGlhbChzZWxmLl9zb2NrX2Nvbm5lY3RfZG9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZCkpCisgICAgICAgICAgICBzZWxmLmFkZF93cml0ZXIoZmQsIHNlbGYuX3NvY2tfY29ubmVjdF9jYiwgZnV0LCBzb2NrLCBhZGRyZXNzKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgIGZ1dC5zZXRfZXhjZXB0aW9uKGV4YykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZ1dC5zZXRfcmVzdWx0KE5vbmUpCisKKyAgICBkZWYgX3NvY2tfY29ubmVjdF9kb25lKHNlbGYsIGZkLCBmdXQpOgorICAgICAgICBzZWxmLnJlbW92ZV93cml0ZXIoZmQpCisKKyAgICBkZWYgX3NvY2tfY29ubmVjdF9jYihzZWxmLCBmdXQsIHNvY2ssIGFkZHJlc3MpOgorICAgICAgICBpZiBmdXQuY2FuY2VsbGVkKCk6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICB0cnk6CisgICAgICAgICAgICBlcnIgPSBzb2NrLmdldHNvY2tvcHQoc29ja2V0LlNPTF9TT0NLRVQsIHNvY2tldC5TT19FUlJPUikKKyAgICAgICAgICAgIGlmIGVyciAhPSAwOgorICAgICAgICAgICAgICAgICMgSnVtcCB0byBhbnkgZXhjZXB0IGNsYXVzZSBiZWxvdy4KKyAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yKGVyciwgJ0Nvbm5lY3QgY2FsbCBmYWlsZWQgJXMnICUgKGFkZHJlc3MsKSkKKyAgICAgICAgZXhjZXB0IChCbG9ja2luZ0lPRXJyb3IsIEludGVycnVwdGVkRXJyb3IpOgorICAgICAgICAgICAgIyBzb2NrZXQgaXMgc3RpbGwgcmVnaXN0ZXJlZCwgdGhlIGNhbGxiYWNrIHdpbGwgYmUgcmV0cmllZCBsYXRlcgorICAgICAgICAgICAgcGFzcworICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgIGZ1dC5zZXRfZXhjZXB0aW9uKGV4YykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZ1dC5zZXRfcmVzdWx0KE5vbmUpCisKKyAgICBkZWYgc29ja19hY2NlcHQoc2VsZiwgc29jayk6CisgICAgICAgICIiIkFjY2VwdCBhIGNvbm5lY3Rpb24uCisKKyAgICAgICAgVGhlIHNvY2tldCBtdXN0IGJlIGJvdW5kIHRvIGFuIGFkZHJlc3MgYW5kIGxpc3RlbmluZyBmb3IgY29ubmVjdGlvbnMuCisgICAgICAgIFRoZSByZXR1cm4gdmFsdWUgaXMgYSBwYWlyIChjb25uLCBhZGRyZXNzKSB3aGVyZSBjb25uIGlzIGEgbmV3IHNvY2tldAorICAgICAgICBvYmplY3QgdXNhYmxlIHRvIHNlbmQgYW5kIHJlY2VpdmUgZGF0YSBvbiB0aGUgY29ubmVjdGlvbiwgYW5kIGFkZHJlc3MKKyAgICAgICAgaXMgdGhlIGFkZHJlc3MgYm91bmQgdG8gdGhlIHNvY2tldCBvbiB0aGUgb3RoZXIgZW5kIG9mIHRoZSBjb25uZWN0aW9uLgorCisgICAgICAgIFRoaXMgbWV0aG9kIGlzIGEgY29yb3V0aW5lLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5fZGVidWcgYW5kIHNvY2suZ2V0dGltZW91dCgpICE9IDA6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ0aGUgc29ja2V0IG11c3QgYmUgbm9uLWJsb2NraW5nIikKKyAgICAgICAgZnV0ID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmKQorICAgICAgICBzZWxmLl9zb2NrX2FjY2VwdChmdXQsIEZhbHNlLCBzb2NrKQorICAgICAgICByZXR1cm4gZnV0CisKKyAgICBkZWYgX3NvY2tfYWNjZXB0KHNlbGYsIGZ1dCwgcmVnaXN0ZXJlZCwgc29jayk6CisgICAgICAgIGZkID0gc29jay5maWxlbm8oKQorICAgICAgICBpZiByZWdpc3RlcmVkOgorICAgICAgICAgICAgc2VsZi5yZW1vdmVfcmVhZGVyKGZkKQorICAgICAgICBpZiBmdXQuY2FuY2VsbGVkKCk6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY29ubiwgYWRkcmVzcyA9IHNvY2suYWNjZXB0KCkKKyAgICAgICAgICAgIGNvbm4uc2V0YmxvY2tpbmcoRmFsc2UpCisgICAgICAgIGV4Y2VwdCAoQmxvY2tpbmdJT0Vycm9yLCBJbnRlcnJ1cHRlZEVycm9yKToKKyAgICAgICAgICAgIHNlbGYuYWRkX3JlYWRlcihmZCwgc2VsZi5fc29ja19hY2NlcHQsIGZ1dCwgVHJ1ZSwgc29jaykKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICBmdXQuc2V0X2V4Y2VwdGlvbihleGMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmdXQuc2V0X3Jlc3VsdCgoY29ubiwgYWRkcmVzcykpCisKKyAgICBkZWYgX3Byb2Nlc3NfZXZlbnRzKHNlbGYsIGV2ZW50X2xpc3QpOgorICAgICAgICBmb3Iga2V5LCBtYXNrIGluIGV2ZW50X2xpc3Q6CisgICAgICAgICAgICBmaWxlb2JqLCAocmVhZGVyLCB3cml0ZXIpID0ga2V5LmZpbGVvYmosIGtleS5kYXRhCisgICAgICAgICAgICBpZiBtYXNrICYgc2VsZWN0b3JzLkVWRU5UX1JFQUQgYW5kIHJlYWRlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBpZiByZWFkZXIuX2NhbmNlbGxlZDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5yZW1vdmVfcmVhZGVyKGZpbGVvYmopCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fYWRkX2NhbGxiYWNrKHJlYWRlcikKKyAgICAgICAgICAgIGlmIG1hc2sgJiBzZWxlY3RvcnMuRVZFTlRfV1JJVEUgYW5kIHdyaXRlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBpZiB3cml0ZXIuX2NhbmNlbGxlZDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5yZW1vdmVfd3JpdGVyKGZpbGVvYmopCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fYWRkX2NhbGxiYWNrKHdyaXRlcikKKworICAgIGRlZiBfc3RvcF9zZXJ2aW5nKHNlbGYsIHNvY2spOgorICAgICAgICBzZWxmLnJlbW92ZV9yZWFkZXIoc29jay5maWxlbm8oKSkKKyAgICAgICAgc29jay5jbG9zZSgpCisKKworY2xhc3MgX1NlbGVjdG9yVHJhbnNwb3J0KHRyYW5zcG9ydHMuX0Zsb3dDb250cm9sTWl4aW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNwb3J0cy5UcmFuc3BvcnQpOgorCisgICAgbWF4X3NpemUgPSAyNTYgKiAxMDI0ICAjIEJ1ZmZlciBzaXplIHBhc3NlZCB0byByZWN2KCkuCisKKyAgICBfYnVmZmVyX2ZhY3RvcnkgPSBieXRlYXJyYXkgICMgQ29uc3RydWN0cyBpbml0aWFsIHZhbHVlIGZvciBzZWxmLl9idWZmZXIuCisKKyAgICAjIEF0dHJpYnV0ZSB1c2VkIGluIHRoZSBkZXN0cnVjdG9yOiBpdCBtdXN0IGJlIHNldCBldmVuIGlmIHRoZSBjb25zdHJ1Y3RvcgorICAgICMgaXMgbm90IGNhbGxlZCAoc2VlIF9TZWxlY3RvclNzbFRyYW5zcG9ydCB3aGljaCBtYXkgc3RhcnQgYnkgcmFpc2luZyBhbgorICAgICMgZXhjZXB0aW9uKQorICAgIF9zb2NrID0gTm9uZQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxvb3AsIHNvY2ssIHByb3RvY29sLCBleHRyYT1Ob25lLCBzZXJ2ZXI9Tm9uZSk6CisgICAgICAgIHN1cGVyKCkuX19pbml0X18oZXh0cmEsIGxvb3ApCisgICAgICAgIHNlbGYuX2V4dHJhWydzb2NrZXQnXSA9IHNvY2sKKyAgICAgICAgc2VsZi5fZXh0cmFbJ3NvY2tuYW1lJ10gPSBzb2NrLmdldHNvY2tuYW1lKCkKKyAgICAgICAgaWYgJ3BlZXJuYW1lJyBub3QgaW4gc2VsZi5fZXh0cmE6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5fZXh0cmFbJ3BlZXJuYW1lJ10gPSBzb2NrLmdldHBlZXJuYW1lKCkKKyAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgICAgICAgICAgc2VsZi5fZXh0cmFbJ3BlZXJuYW1lJ10gPSBOb25lCisgICAgICAgIHNlbGYuX3NvY2sgPSBzb2NrCisgICAgICAgIHNlbGYuX3NvY2tfZmQgPSBzb2NrLmZpbGVubygpCisgICAgICAgIHNlbGYuX3Byb3RvY29sID0gcHJvdG9jb2wKKyAgICAgICAgc2VsZi5fcHJvdG9jb2xfY29ubmVjdGVkID0gVHJ1ZQorICAgICAgICBzZWxmLl9zZXJ2ZXIgPSBzZXJ2ZXIKKyAgICAgICAgc2VsZi5fYnVmZmVyID0gc2VsZi5fYnVmZmVyX2ZhY3RvcnkoKQorICAgICAgICBzZWxmLl9jb25uX2xvc3QgPSAwICAjIFNldCB3aGVuIGNhbGwgdG8gY29ubmVjdGlvbl9sb3N0IHNjaGVkdWxlZC4KKyAgICAgICAgc2VsZi5fY2xvc2luZyA9IEZhbHNlICAjIFNldCB3aGVuIGNsb3NlKCkgY2FsbGVkLgorICAgICAgICBpZiBzZWxmLl9zZXJ2ZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl9zZXJ2ZXIuX2F0dGFjaCgpCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIGluZm8gPSBbc2VsZi5fX2NsYXNzX18uX19uYW1lX19dCisgICAgICAgIGlmIHNlbGYuX3NvY2sgaXMgTm9uZToKKyAgICAgICAgICAgIGluZm8uYXBwZW5kKCdjbG9zZWQnKQorICAgICAgICBlbGlmIHNlbGYuX2Nsb3Npbmc6CisgICAgICAgICAgICBpbmZvLmFwcGVuZCgnY2xvc2luZycpCisgICAgICAgIGluZm8uYXBwZW5kKCdmZD0lcycgJSBzZWxmLl9zb2NrX2ZkKQorICAgICAgICAjIHRlc3QgaWYgdGhlIHRyYW5zcG9ydCB3YXMgY2xvc2VkCisgICAgICAgIGlmIHNlbGYuX2xvb3AgaXMgbm90IE5vbmUgYW5kIG5vdCBzZWxmLl9sb29wLmlzX2Nsb3NlZCgpOgorICAgICAgICAgICAgcG9sbGluZyA9IF90ZXN0X3NlbGVjdG9yX2V2ZW50KHNlbGYuX2xvb3AuX3NlbGVjdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3NvY2tfZmQsIHNlbGVjdG9ycy5FVkVOVF9SRUFEKQorICAgICAgICAgICAgaWYgcG9sbGluZzoKKyAgICAgICAgICAgICAgICBpbmZvLmFwcGVuZCgncmVhZD1wb2xsaW5nJykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaW5mby5hcHBlbmQoJ3JlYWQ9aWRsZScpCisKKyAgICAgICAgICAgIHBvbGxpbmcgPSBfdGVzdF9zZWxlY3Rvcl9ldmVudChzZWxmLl9sb29wLl9zZWxlY3RvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9zb2NrX2ZkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdG9ycy5FVkVOVF9XUklURSkKKyAgICAgICAgICAgIGlmIHBvbGxpbmc6CisgICAgICAgICAgICAgICAgc3RhdGUgPSAncG9sbGluZycKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc3RhdGUgPSAnaWRsZScKKworICAgICAgICAgICAgYnVmc2l6ZSA9IHNlbGYuZ2V0X3dyaXRlX2J1ZmZlcl9zaXplKCkKKyAgICAgICAgICAgIGluZm8uYXBwZW5kKCd3cml0ZT08JXMsIGJ1ZnNpemU9JXM+JyAlIChzdGF0ZSwgYnVmc2l6ZSkpCisgICAgICAgIHJldHVybiAnPCVzPicgJSAnICcuam9pbihpbmZvKQorCisgICAgZGVmIGFib3J0KHNlbGYpOgorICAgICAgICBzZWxmLl9mb3JjZV9jbG9zZShOb25lKQorCisgICAgZGVmIGlzX2Nsb3Npbmcoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9jbG9zaW5nCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgIGlmIHNlbGYuX2Nsb3Npbmc6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5fY2xvc2luZyA9IFRydWUKKyAgICAgICAgc2VsZi5fbG9vcC5yZW1vdmVfcmVhZGVyKHNlbGYuX3NvY2tfZmQpCisgICAgICAgIGlmIG5vdCBzZWxmLl9idWZmZXI6CisgICAgICAgICAgICBzZWxmLl9jb25uX2xvc3QgKz0gMQorICAgICAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24oc2VsZi5fY2FsbF9jb25uZWN0aW9uX2xvc3QsIE5vbmUpCisKKyAgICAjIE9uIFB5dGhvbiAzLjMgYW5kIG9sZGVyLCBvYmplY3RzIHdpdGggYSBkZXN0cnVjdG9yIHBhcnQgb2YgYSByZWZlcmVuY2UKKyAgICAjIGN5Y2xlIGFyZSBuZXZlciBkZXN0cm95ZWQuIEl0J3Mgbm90IG1vcmUgdGhlIGNhc2Ugb24gUHl0aG9uIDMuNCB0aGFua3MKKyAgICAjIHRvIHRoZSBQRVAgNDQyLgorICAgIGlmIGNvbXBhdC5QWTM0OgorICAgICAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgICAgIGlmIHNlbGYuX3NvY2sgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgd2FybmluZ3Mud2FybigidW5jbG9zZWQgdHJhbnNwb3J0ICVyIiAlIHNlbGYsIFJlc291cmNlV2FybmluZykKKyAgICAgICAgICAgICAgICBzZWxmLl9zb2NrLmNsb3NlKCkKKworICAgIGRlZiBfZmF0YWxfZXJyb3Ioc2VsZiwgZXhjLCBtZXNzYWdlPSdGYXRhbCBlcnJvciBvbiB0cmFuc3BvcnQnKToKKyAgICAgICAgIyBTaG91bGQgYmUgY2FsbGVkIGZyb20gZXhjZXB0aW9uIGhhbmRsZXIgb25seS4KKyAgICAgICAgaWYgaXNpbnN0YW5jZShleGMsIChCcm9rZW5QaXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29ubmVjdGlvblJlc2V0RXJyb3IsIENvbm5lY3Rpb25BYm9ydGVkRXJyb3IpKToKKyAgICAgICAgICAgIGlmIHNlbGYuX2xvb3AuZ2V0X2RlYnVnKCk6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCIlcjogJXMiLCBzZWxmLCBtZXNzYWdlLCBleGNfaW5mbz1UcnVlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fbG9vcC5jYWxsX2V4Y2VwdGlvbl9oYW5kbGVyKHsKKyAgICAgICAgICAgICAgICAnbWVzc2FnZSc6IG1lc3NhZ2UsCisgICAgICAgICAgICAgICAgJ2V4Y2VwdGlvbic6IGV4YywKKyAgICAgICAgICAgICAgICAndHJhbnNwb3J0Jzogc2VsZiwKKyAgICAgICAgICAgICAgICAncHJvdG9jb2wnOiBzZWxmLl9wcm90b2NvbCwKKyAgICAgICAgICAgIH0pCisgICAgICAgIHNlbGYuX2ZvcmNlX2Nsb3NlKGV4YykKKworICAgIGRlZiBfZm9yY2VfY2xvc2Uoc2VsZiwgZXhjKToKKyAgICAgICAgaWYgc2VsZi5fY29ubl9sb3N0OgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGlmIHNlbGYuX2J1ZmZlcjoKKyAgICAgICAgICAgIHNlbGYuX2J1ZmZlci5jbGVhcigpCisgICAgICAgICAgICBzZWxmLl9sb29wLnJlbW92ZV93cml0ZXIoc2VsZi5fc29ja19mZCkKKyAgICAgICAgaWYgbm90IHNlbGYuX2Nsb3Npbmc6CisgICAgICAgICAgICBzZWxmLl9jbG9zaW5nID0gVHJ1ZQorICAgICAgICAgICAgc2VsZi5fbG9vcC5yZW1vdmVfcmVhZGVyKHNlbGYuX3NvY2tfZmQpCisgICAgICAgIHNlbGYuX2Nvbm5fbG9zdCArPSAxCisgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKHNlbGYuX2NhbGxfY29ubmVjdGlvbl9sb3N0LCBleGMpCisKKyAgICBkZWYgX2NhbGxfY29ubmVjdGlvbl9sb3N0KHNlbGYsIGV4Yyk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIHNlbGYuX3Byb3RvY29sX2Nvbm5lY3RlZDoKKyAgICAgICAgICAgICAgICBzZWxmLl9wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QoZXhjKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5fc29jay5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLl9zb2NrID0gTm9uZQorICAgICAgICAgICAgc2VsZi5fcHJvdG9jb2wgPSBOb25lCisgICAgICAgICAgICBzZWxmLl9sb29wID0gTm9uZQorICAgICAgICAgICAgc2VydmVyID0gc2VsZi5fc2VydmVyCisgICAgICAgICAgICBpZiBzZXJ2ZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgc2VydmVyLl9kZXRhY2goKQorICAgICAgICAgICAgICAgIHNlbGYuX3NlcnZlciA9IE5vbmUKKworICAgIGRlZiBnZXRfd3JpdGVfYnVmZmVyX3NpemUoc2VsZik6CisgICAgICAgIHJldHVybiBsZW4oc2VsZi5fYnVmZmVyKQorCisKK2NsYXNzIF9TZWxlY3RvclNvY2tldFRyYW5zcG9ydChfU2VsZWN0b3JUcmFuc3BvcnQpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxvb3AsIHNvY2ssIHByb3RvY29sLCB3YWl0ZXI9Tm9uZSwKKyAgICAgICAgICAgICAgICAgZXh0cmE9Tm9uZSwgc2VydmVyPU5vbmUpOgorICAgICAgICBzdXBlcigpLl9faW5pdF9fKGxvb3AsIHNvY2ssIHByb3RvY29sLCBleHRyYSwgc2VydmVyKQorICAgICAgICBzZWxmLl9lb2YgPSBGYWxzZQorICAgICAgICBzZWxmLl9wYXVzZWQgPSBGYWxzZQorCisgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKHNlbGYuX3Byb3RvY29sLmNvbm5lY3Rpb25fbWFkZSwgc2VsZikKKyAgICAgICAgIyBvbmx5IHN0YXJ0IHJlYWRpbmcgd2hlbiBjb25uZWN0aW9uX21hZGUoKSBoYXMgYmVlbiBjYWxsZWQKKyAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24oc2VsZi5fbG9vcC5hZGRfcmVhZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9zb2NrX2ZkLCBzZWxmLl9yZWFkX3JlYWR5KQorICAgICAgICBpZiB3YWl0ZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAjIG9ubHkgd2FrZSB1cCB0aGUgd2FpdGVyIHdoZW4gY29ubmVjdGlvbl9tYWRlKCkgaGFzIGJlZW4gY2FsbGVkCisgICAgICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbihmdXR1cmVzLl9zZXRfcmVzdWx0X3VubGVzc19jYW5jZWxsZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YWl0ZXIsIE5vbmUpCisKKyAgICBkZWYgcGF1c2VfcmVhZGluZyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fY2xvc2luZzoKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignQ2Fubm90IHBhdXNlX3JlYWRpbmcoKSB3aGVuIGNsb3NpbmcnKQorICAgICAgICBpZiBzZWxmLl9wYXVzZWQ6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ0FscmVhZHkgcGF1c2VkJykKKyAgICAgICAgc2VsZi5fcGF1c2VkID0gVHJ1ZQorICAgICAgICBzZWxmLl9sb29wLnJlbW92ZV9yZWFkZXIoc2VsZi5fc29ja19mZCkKKyAgICAgICAgaWYgc2VsZi5fbG9vcC5nZXRfZGVidWcoKToKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygiJXIgcGF1c2VzIHJlYWRpbmciLCBzZWxmKQorCisgICAgZGVmIHJlc3VtZV9yZWFkaW5nKHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5fcGF1c2VkOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdOb3QgcGF1c2VkJykKKyAgICAgICAgc2VsZi5fcGF1c2VkID0gRmFsc2UKKyAgICAgICAgaWYgc2VsZi5fY2xvc2luZzoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLl9sb29wLmFkZF9yZWFkZXIoc2VsZi5fc29ja19mZCwgc2VsZi5fcmVhZF9yZWFkeSkKKyAgICAgICAgaWYgc2VsZi5fbG9vcC5nZXRfZGVidWcoKToKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygiJXIgcmVzdW1lcyByZWFkaW5nIiwgc2VsZikKKworICAgIGRlZiBfcmVhZF9yZWFkeShzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGF0YSA9IHNlbGYuX3NvY2sucmVjdihzZWxmLm1heF9zaXplKQorICAgICAgICBleGNlcHQgKEJsb2NraW5nSU9FcnJvciwgSW50ZXJydXB0ZWRFcnJvcik6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgc2VsZi5fZmF0YWxfZXJyb3IoZXhjLCAnRmF0YWwgcmVhZCBlcnJvciBvbiBzb2NrZXQgdHJhbnNwb3J0JykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIGRhdGE6CisgICAgICAgICAgICAgICAgc2VsZi5fcHJvdG9jb2wuZGF0YV9yZWNlaXZlZChkYXRhKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLl9sb29wLmdldF9kZWJ1ZygpOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoIiVyIHJlY2VpdmVkIEVPRiIsIHNlbGYpCisgICAgICAgICAgICAgICAga2VlcF9vcGVuID0gc2VsZi5fcHJvdG9jb2wuZW9mX3JlY2VpdmVkKCkKKyAgICAgICAgICAgICAgICBpZiBrZWVwX29wZW46CisgICAgICAgICAgICAgICAgICAgICMgV2UncmUga2VlcGluZyB0aGUgY29ubmVjdGlvbiBvcGVuIHNvIHRoZQorICAgICAgICAgICAgICAgICAgICAjIHByb3RvY29sIGNhbiB3cml0ZSBtb3JlLCBidXQgd2Ugc3RpbGwgY2FuJ3QKKyAgICAgICAgICAgICAgICAgICAgIyByZWNlaXZlIG1vcmUsIHNvIHJlbW92ZSB0aGUgcmVhZGVyIGNhbGxiYWNrLgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9sb29wLnJlbW92ZV9yZWFkZXIoc2VsZi5fc29ja19mZCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmNsb3NlKCkKKworICAgIGRlZiB3cml0ZShzZWxmLCBkYXRhKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZGF0YSwgKGJ5dGVzLCBieXRlYXJyYXksIG1lbW9yeXZpZXcpKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignZGF0YSBhcmd1bWVudCBtdXN0IGJlIGJ5dGUtaXNoICglciknLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUoZGF0YSkpCisgICAgICAgIGlmIHNlbGYuX2VvZjoKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignQ2Fubm90IGNhbGwgd3JpdGUoKSBhZnRlciB3cml0ZV9lb2YoKScpCisgICAgICAgIGlmIG5vdCBkYXRhOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaWYgc2VsZi5fY29ubl9sb3N0OgorICAgICAgICAgICAgaWYgc2VsZi5fY29ubl9sb3N0ID49IGNvbnN0YW50cy5MT0dfVEhSRVNIT0xEX0ZPUl9DT05OTE9TVF9XUklURVM6CisgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ3NvY2tldC5zZW5kKCkgcmFpc2VkIGV4Y2VwdGlvbi4nKQorICAgICAgICAgICAgc2VsZi5fY29ubl9sb3N0ICs9IDEKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIG5vdCBzZWxmLl9idWZmZXI6CisgICAgICAgICAgICAjIE9wdGltaXphdGlvbjogdHJ5IHRvIHNlbmQgbm93LgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG4gPSBzZWxmLl9zb2NrLnNlbmQoZGF0YSkKKyAgICAgICAgICAgIGV4Y2VwdCAoQmxvY2tpbmdJT0Vycm9yLCBJbnRlcnJ1cHRlZEVycm9yKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgICAgICBzZWxmLl9mYXRhbF9lcnJvcihleGMsICdGYXRhbCB3cml0ZSBlcnJvciBvbiBzb2NrZXQgdHJhbnNwb3J0JykKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZGF0YSA9IGRhdGFbbjpdCisgICAgICAgICAgICAgICAgaWYgbm90IGRhdGE6CisgICAgICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgIyBOb3QgYWxsIHdhcyB3cml0dGVuOyByZWdpc3RlciB3cml0ZSBoYW5kbGVyLgorICAgICAgICAgICAgc2VsZi5fbG9vcC5hZGRfd3JpdGVyKHNlbGYuX3NvY2tfZmQsIHNlbGYuX3dyaXRlX3JlYWR5KQorCisgICAgICAgICMgQWRkIGl0IHRvIHRoZSBidWZmZXIuCisgICAgICAgIHNlbGYuX2J1ZmZlci5leHRlbmQoZGF0YSkKKyAgICAgICAgc2VsZi5fbWF5YmVfcGF1c2VfcHJvdG9jb2woKQorCisgICAgZGVmIF93cml0ZV9yZWFkeShzZWxmKToKKyAgICAgICAgYXNzZXJ0IHNlbGYuX2J1ZmZlciwgJ0RhdGEgc2hvdWxkIG5vdCBiZSBlbXB0eScKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBuID0gc2VsZi5fc29jay5zZW5kKHNlbGYuX2J1ZmZlcikKKyAgICAgICAgZXhjZXB0IChCbG9ja2luZ0lPRXJyb3IsIEludGVycnVwdGVkRXJyb3IpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgIHNlbGYuX2xvb3AucmVtb3ZlX3dyaXRlcihzZWxmLl9zb2NrX2ZkKQorICAgICAgICAgICAgc2VsZi5fYnVmZmVyLmNsZWFyKCkKKyAgICAgICAgICAgIHNlbGYuX2ZhdGFsX2Vycm9yKGV4YywgJ0ZhdGFsIHdyaXRlIGVycm9yIG9uIHNvY2tldCB0cmFuc3BvcnQnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgbjoKKyAgICAgICAgICAgICAgICBkZWwgc2VsZi5fYnVmZmVyWzpuXQorICAgICAgICAgICAgc2VsZi5fbWF5YmVfcmVzdW1lX3Byb3RvY29sKCkgICMgTWF5IGFwcGVuZCB0byBidWZmZXIuCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5fYnVmZmVyOgorICAgICAgICAgICAgICAgIHNlbGYuX2xvb3AucmVtb3ZlX3dyaXRlcihzZWxmLl9zb2NrX2ZkKQorICAgICAgICAgICAgICAgIGlmIHNlbGYuX2Nsb3Npbmc6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2NhbGxfY29ubmVjdGlvbl9sb3N0KE5vbmUpCisgICAgICAgICAgICAgICAgZWxpZiBzZWxmLl9lb2Y6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3NvY2suc2h1dGRvd24oc29ja2V0LlNIVVRfV1IpCisKKyAgICBkZWYgd3JpdGVfZW9mKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9lb2Y6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5fZW9mID0gVHJ1ZQorICAgICAgICBpZiBub3Qgc2VsZi5fYnVmZmVyOgorICAgICAgICAgICAgc2VsZi5fc29jay5zaHV0ZG93bihzb2NrZXQuU0hVVF9XUikKKworICAgIGRlZiBjYW5fd3JpdGVfZW9mKHNlbGYpOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisKK2NsYXNzIF9TZWxlY3RvclNzbFRyYW5zcG9ydChfU2VsZWN0b3JUcmFuc3BvcnQpOgorCisgICAgX2J1ZmZlcl9mYWN0b3J5ID0gYnl0ZWFycmF5CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbG9vcCwgcmF3c29jaywgcHJvdG9jb2wsIHNzbGNvbnRleHQsIHdhaXRlcj1Ob25lLAorICAgICAgICAgICAgICAgICBzZXJ2ZXJfc2lkZT1GYWxzZSwgc2VydmVyX2hvc3RuYW1lPU5vbmUsCisgICAgICAgICAgICAgICAgIGV4dHJhPU5vbmUsIHNlcnZlcj1Ob25lKToKKyAgICAgICAgaWYgc3NsIGlzIE5vbmU6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ3N0ZGxpYiBzc2wgbW9kdWxlIG5vdCBhdmFpbGFibGUnKQorCisgICAgICAgIGlmIG5vdCBzc2xjb250ZXh0OgorICAgICAgICAgICAgc3NsY29udGV4dCA9IHNzbHByb3RvLl9jcmVhdGVfdHJhbnNwb3J0X2NvbnRleHQoc2VydmVyX3NpZGUsIHNlcnZlcl9ob3N0bmFtZSkKKworICAgICAgICB3cmFwX2t3YXJncyA9IHsKKyAgICAgICAgICAgICdzZXJ2ZXJfc2lkZSc6IHNlcnZlcl9zaWRlLAorICAgICAgICAgICAgJ2RvX2hhbmRzaGFrZV9vbl9jb25uZWN0JzogRmFsc2UsCisgICAgICAgIH0KKyAgICAgICAgaWYgc2VydmVyX2hvc3RuYW1lIGFuZCBub3Qgc2VydmVyX3NpZGU6CisgICAgICAgICAgICB3cmFwX2t3YXJnc1snc2VydmVyX2hvc3RuYW1lJ10gPSBzZXJ2ZXJfaG9zdG5hbWUKKyAgICAgICAgc3Nsc29jayA9IHNzbGNvbnRleHQud3JhcF9zb2NrZXQocmF3c29jaywgKip3cmFwX2t3YXJncykKKworICAgICAgICBzdXBlcigpLl9faW5pdF9fKGxvb3AsIHNzbHNvY2ssIHByb3RvY29sLCBleHRyYSwgc2VydmVyKQorICAgICAgICAjIHRoZSBwcm90b2NvbCBjb25uZWN0aW9uIGlzIG9ubHkgbWFkZSBhZnRlciB0aGUgU1NMIGhhbmRzaGFrZQorICAgICAgICBzZWxmLl9wcm90b2NvbF9jb25uZWN0ZWQgPSBGYWxzZQorCisgICAgICAgIHNlbGYuX3NlcnZlcl9ob3N0bmFtZSA9IHNlcnZlcl9ob3N0bmFtZQorICAgICAgICBzZWxmLl93YWl0ZXIgPSB3YWl0ZXIKKyAgICAgICAgc2VsZi5fc3NsY29udGV4dCA9IHNzbGNvbnRleHQKKyAgICAgICAgc2VsZi5fcGF1c2VkID0gRmFsc2UKKworICAgICAgICAjIFNTTC1zcGVjaWZpYyBleHRyYSBpbmZvLiAgKHBlZXJjZXJ0IGlzIHNldCBsYXRlcikKKyAgICAgICAgc2VsZi5fZXh0cmEudXBkYXRlKHNzbGNvbnRleHQ9c3NsY29udGV4dCkKKworICAgICAgICBpZiBzZWxmLl9sb29wLmdldF9kZWJ1ZygpOgorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCIlciBzdGFydHMgU1NMIGhhbmRzaGFrZSIsIHNlbGYpCisgICAgICAgICAgICBzdGFydF90aW1lID0gc2VsZi5fbG9vcC50aW1lKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHN0YXJ0X3RpbWUgPSBOb25lCisgICAgICAgIHNlbGYuX29uX2hhbmRzaGFrZShzdGFydF90aW1lKQorCisgICAgZGVmIF93YWtldXBfd2FpdGVyKHNlbGYsIGV4Yz1Ob25lKToKKyAgICAgICAgaWYgc2VsZi5fd2FpdGVyIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgbm90IHNlbGYuX3dhaXRlci5jYW5jZWxsZWQoKToKKyAgICAgICAgICAgIGlmIGV4YyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBzZWxmLl93YWl0ZXIuc2V0X2V4Y2VwdGlvbihleGMpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuX3dhaXRlci5zZXRfcmVzdWx0KE5vbmUpCisgICAgICAgIHNlbGYuX3dhaXRlciA9IE5vbmUKKworICAgIGRlZiBfb25faGFuZHNoYWtlKHNlbGYsIHN0YXJ0X3RpbWUpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl9zb2NrLmRvX2hhbmRzaGFrZSgpCisgICAgICAgIGV4Y2VwdCBzc2wuU1NMV2FudFJlYWRFcnJvcjoKKyAgICAgICAgICAgIHNlbGYuX2xvb3AuYWRkX3JlYWRlcihzZWxmLl9zb2NrX2ZkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX29uX2hhbmRzaGFrZSwgc3RhcnRfdGltZSkKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBleGNlcHQgc3NsLlNTTFdhbnRXcml0ZUVycm9yOgorICAgICAgICAgICAgc2VsZi5fbG9vcC5hZGRfd3JpdGVyKHNlbGYuX3NvY2tfZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fb25faGFuZHNoYWtlLCBzdGFydF90aW1lKQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGV4Y2VwdCBCYXNlRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgIGlmIHNlbGYuX2xvb3AuZ2V0X2RlYnVnKCk6CisgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoIiVyOiBTU0wgaGFuZHNoYWtlIGZhaWxlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZiwgZXhjX2luZm89VHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuX2xvb3AucmVtb3ZlX3JlYWRlcihzZWxmLl9zb2NrX2ZkKQorICAgICAgICAgICAgc2VsZi5fbG9vcC5yZW1vdmVfd3JpdGVyKHNlbGYuX3NvY2tfZmQpCisgICAgICAgICAgICBzZWxmLl9zb2NrLmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuX3dha2V1cF93YWl0ZXIoZXhjKQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShleGMsIEV4Y2VwdGlvbik6CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlCisKKyAgICAgICAgc2VsZi5fbG9vcC5yZW1vdmVfcmVhZGVyKHNlbGYuX3NvY2tfZmQpCisgICAgICAgIHNlbGYuX2xvb3AucmVtb3ZlX3dyaXRlcihzZWxmLl9zb2NrX2ZkKQorCisgICAgICAgIHBlZXJjZXJ0ID0gc2VsZi5fc29jay5nZXRwZWVyY2VydCgpCisgICAgICAgIGlmIG5vdCBoYXNhdHRyKHNlbGYuX3NzbGNvbnRleHQsICdjaGVja19ob3N0bmFtZScpOgorICAgICAgICAgICAgIyBWZXJpZnkgaG9zdG5hbWUgaWYgcmVxdWVzdGVkLCBQeXRob24gMy40KyB1c2VzIGNoZWNrX2hvc3RuYW1lCisgICAgICAgICAgICAjIGFuZCBjaGVja3MgdGhlIGhvc3RuYW1lIGluIGRvX2hhbmRzaGFrZSgpCisgICAgICAgICAgICBpZiAoc2VsZi5fc2VydmVyX2hvc3RuYW1lIGFuZAorICAgICAgICAgICAgICAgIHNlbGYuX3NzbGNvbnRleHQudmVyaWZ5X21vZGUgIT0gc3NsLkNFUlRfTk9ORSk6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBzc2wubWF0Y2hfaG9zdG5hbWUocGVlcmNlcnQsIHNlbGYuX3NlcnZlcl9ob3N0bmFtZSkKKyAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5fbG9vcC5nZXRfZGVidWcoKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nKCIlcjogU1NMIGhhbmRzaGFrZSBmYWlsZWQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9uIG1hdGNoaW5nIHRoZSBob3N0bmFtZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLCBleGNfaW5mbz1UcnVlKQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9zb2NrLmNsb3NlKCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fd2FrZXVwX3dhaXRlcihleGMpCisgICAgICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICMgQWRkIGV4dHJhIGluZm8gdGhhdCBiZWNvbWVzIGF2YWlsYWJsZSBhZnRlciBoYW5kc2hha2UuCisgICAgICAgIHNlbGYuX2V4dHJhLnVwZGF0ZShwZWVyY2VydD1wZWVyY2VydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNpcGhlcj1zZWxmLl9zb2NrLmNpcGhlcigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHJlc3Npb249c2VsZi5fc29jay5jb21wcmVzc2lvbigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsX29iamVjdD1zZWxmLl9zb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorCisgICAgICAgIHNlbGYuX3JlYWRfd2FudHNfd3JpdGUgPSBGYWxzZQorICAgICAgICBzZWxmLl93cml0ZV93YW50c19yZWFkID0gRmFsc2UKKyAgICAgICAgc2VsZi5fbG9vcC5hZGRfcmVhZGVyKHNlbGYuX3NvY2tfZmQsIHNlbGYuX3JlYWRfcmVhZHkpCisgICAgICAgIHNlbGYuX3Byb3RvY29sX2Nvbm5lY3RlZCA9IFRydWUKKyAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24oc2VsZi5fcHJvdG9jb2wuY29ubmVjdGlvbl9tYWRlLCBzZWxmKQorICAgICAgICAjIG9ubHkgd2FrZSB1cCB0aGUgd2FpdGVyIHdoZW4gY29ubmVjdGlvbl9tYWRlKCkgaGFzIGJlZW4gY2FsbGVkCisgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKHNlbGYuX3dha2V1cF93YWl0ZXIpCisKKyAgICAgICAgaWYgc2VsZi5fbG9vcC5nZXRfZGVidWcoKToKKyAgICAgICAgICAgIGR0ID0gc2VsZi5fbG9vcC50aW1lKCkgLSBzdGFydF90aW1lCisgICAgICAgICAgICBsb2dnZXIuZGVidWcoIiVyOiBTU0wgaGFuZHNoYWtlIHRvb2sgJS4xZiBtcyIsIHNlbGYsIGR0ICogMWUzKQorCisgICAgZGVmIHBhdXNlX3JlYWRpbmcoc2VsZik6CisgICAgICAgICMgWFhYIFRoaXMgaXMgYSBiaXQgaWNreSwgZ2l2ZW4gdGhlIGNvbW1lbnQgYXQgdGhlIHRvcCBvZgorICAgICAgICAjIF9yZWFkX3JlYWR5KCkuICBJcyBpdCBwb3NzaWJsZSB0byBldm9rZSBhIGRlYWRsb2NrPyAgSSBkb24ndAorICAgICAgICAjIGtub3csIGFsdGhvdWdoIGl0IGRvZXNuJ3QgbG9vayBsaWtlIGl0OyB3cml0ZSgpIHdpbGwgc3RpbGwKKyAgICAgICAgIyBhY2NlcHQgbW9yZSBkYXRhIGZvciB0aGUgYnVmZmVyIGFuZCBldmVudHVhbGx5IHRoZSBhcHAgd2lsbAorICAgICAgICAjIGNhbGwgcmVzdW1lX3JlYWRpbmcoKSBhZ2FpbiwgYW5kIHRoaW5ncyB3aWxsIGZsb3cgYWdhaW4uCisKKyAgICAgICAgaWYgc2VsZi5fY2xvc2luZzoKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignQ2Fubm90IHBhdXNlX3JlYWRpbmcoKSB3aGVuIGNsb3NpbmcnKQorICAgICAgICBpZiBzZWxmLl9wYXVzZWQ6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ0FscmVhZHkgcGF1c2VkJykKKyAgICAgICAgc2VsZi5fcGF1c2VkID0gVHJ1ZQorICAgICAgICBzZWxmLl9sb29wLnJlbW92ZV9yZWFkZXIoc2VsZi5fc29ja19mZCkKKyAgICAgICAgaWYgc2VsZi5fbG9vcC5nZXRfZGVidWcoKToKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygiJXIgcGF1c2VzIHJlYWRpbmciLCBzZWxmKQorCisgICAgZGVmIHJlc3VtZV9yZWFkaW5nKHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5fcGF1c2VkOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdOb3QgcGF1c2VkJykKKyAgICAgICAgc2VsZi5fcGF1c2VkID0gRmFsc2UKKyAgICAgICAgaWYgc2VsZi5fY2xvc2luZzoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLl9sb29wLmFkZF9yZWFkZXIoc2VsZi5fc29ja19mZCwgc2VsZi5fcmVhZF9yZWFkeSkKKyAgICAgICAgaWYgc2VsZi5fbG9vcC5nZXRfZGVidWcoKToKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygiJXIgcmVzdW1lcyByZWFkaW5nIiwgc2VsZikKKworICAgIGRlZiBfcmVhZF9yZWFkeShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fd3JpdGVfd2FudHNfcmVhZDoKKyAgICAgICAgICAgIHNlbGYuX3dyaXRlX3dhbnRzX3JlYWQgPSBGYWxzZQorICAgICAgICAgICAgc2VsZi5fd3JpdGVfcmVhZHkoKQorCisgICAgICAgICAgICBpZiBzZWxmLl9idWZmZXI6CisgICAgICAgICAgICAgICAgc2VsZi5fbG9vcC5hZGRfd3JpdGVyKHNlbGYuX3NvY2tfZmQsIHNlbGYuX3dyaXRlX3JlYWR5KQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9zb2NrLnJlY3Yoc2VsZi5tYXhfc2l6ZSkKKyAgICAgICAgZXhjZXB0IChCbG9ja2luZ0lPRXJyb3IsIEludGVycnVwdGVkRXJyb3IsIHNzbC5TU0xXYW50UmVhZEVycm9yKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZXhjZXB0IHNzbC5TU0xXYW50V3JpdGVFcnJvcjoKKyAgICAgICAgICAgIHNlbGYuX3JlYWRfd2FudHNfd3JpdGUgPSBUcnVlCisgICAgICAgICAgICBzZWxmLl9sb29wLnJlbW92ZV9yZWFkZXIoc2VsZi5fc29ja19mZCkKKyAgICAgICAgICAgIHNlbGYuX2xvb3AuYWRkX3dyaXRlcihzZWxmLl9zb2NrX2ZkLCBzZWxmLl93cml0ZV9yZWFkeSkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICBzZWxmLl9mYXRhbF9lcnJvcihleGMsICdGYXRhbCByZWFkIGVycm9yIG9uIFNTTCB0cmFuc3BvcnQnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgZGF0YToKKyAgICAgICAgICAgICAgICBzZWxmLl9wcm90b2NvbC5kYXRhX3JlY2VpdmVkKGRhdGEpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5fbG9vcC5nZXRfZGVidWcoKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygiJXIgcmVjZWl2ZWQgRU9GIiwgc2VsZikKKyAgICAgICAgICAgICAgICAgICAga2VlcF9vcGVuID0gc2VsZi5fcHJvdG9jb2wuZW9mX3JlY2VpdmVkKCkKKyAgICAgICAgICAgICAgICAgICAgaWYga2VlcF9vcGVuOgorICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ3JldHVybmluZyB0cnVlIGZyb20gZW9mX3JlY2VpdmVkKCkgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2hhcyBubyBlZmZlY3Qgd2hlbiB1c2luZyBzc2wnKQorICAgICAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuY2xvc2UoKQorCisgICAgZGVmIF93cml0ZV9yZWFkeShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fcmVhZF93YW50c193cml0ZToKKyAgICAgICAgICAgIHNlbGYuX3JlYWRfd2FudHNfd3JpdGUgPSBGYWxzZQorICAgICAgICAgICAgc2VsZi5fcmVhZF9yZWFkeSgpCisKKyAgICAgICAgICAgIGlmIG5vdCAoc2VsZi5fcGF1c2VkIG9yIHNlbGYuX2Nsb3NpbmcpOgorICAgICAgICAgICAgICAgIHNlbGYuX2xvb3AuYWRkX3JlYWRlcihzZWxmLl9zb2NrX2ZkLCBzZWxmLl9yZWFkX3JlYWR5KQorCisgICAgICAgIGlmIHNlbGYuX2J1ZmZlcjoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBuID0gc2VsZi5fc29jay5zZW5kKHNlbGYuX2J1ZmZlcikKKyAgICAgICAgICAgIGV4Y2VwdCAoQmxvY2tpbmdJT0Vycm9yLCBJbnRlcnJ1cHRlZEVycm9yLCBzc2wuU1NMV2FudFdyaXRlRXJyb3IpOgorICAgICAgICAgICAgICAgIG4gPSAwCisgICAgICAgICAgICBleGNlcHQgc3NsLlNTTFdhbnRSZWFkRXJyb3I6CisgICAgICAgICAgICAgICAgbiA9IDAKKyAgICAgICAgICAgICAgICBzZWxmLl9sb29wLnJlbW92ZV93cml0ZXIoc2VsZi5fc29ja19mZCkKKyAgICAgICAgICAgICAgICBzZWxmLl93cml0ZV93YW50c19yZWFkID0gVHJ1ZQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICAgICAgc2VsZi5fbG9vcC5yZW1vdmVfd3JpdGVyKHNlbGYuX3NvY2tfZmQpCisgICAgICAgICAgICAgICAgc2VsZi5fYnVmZmVyLmNsZWFyKCkKKyAgICAgICAgICAgICAgICBzZWxmLl9mYXRhbF9lcnJvcihleGMsICdGYXRhbCB3cml0ZSBlcnJvciBvbiBTU0wgdHJhbnNwb3J0JykKKyAgICAgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAgICAgaWYgbjoKKyAgICAgICAgICAgICAgICBkZWwgc2VsZi5fYnVmZmVyWzpuXQorCisgICAgICAgIHNlbGYuX21heWJlX3Jlc3VtZV9wcm90b2NvbCgpICAjIE1heSBhcHBlbmQgdG8gYnVmZmVyLgorCisgICAgICAgIGlmIG5vdCBzZWxmLl9idWZmZXI6CisgICAgICAgICAgICBzZWxmLl9sb29wLnJlbW92ZV93cml0ZXIoc2VsZi5fc29ja19mZCkKKyAgICAgICAgICAgIGlmIHNlbGYuX2Nsb3Npbmc6CisgICAgICAgICAgICAgICAgc2VsZi5fY2FsbF9jb25uZWN0aW9uX2xvc3QoTm9uZSkKKworICAgIGRlZiB3cml0ZShzZWxmLCBkYXRhKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZGF0YSwgKGJ5dGVzLCBieXRlYXJyYXksIG1lbW9yeXZpZXcpKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignZGF0YSBhcmd1bWVudCBtdXN0IGJlIGJ5dGUtaXNoICglciknLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUoZGF0YSkpCisgICAgICAgIGlmIG5vdCBkYXRhOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaWYgc2VsZi5fY29ubl9sb3N0OgorICAgICAgICAgICAgaWYgc2VsZi5fY29ubl9sb3N0ID49IGNvbnN0YW50cy5MT0dfVEhSRVNIT0xEX0ZPUl9DT05OTE9TVF9XUklURVM6CisgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ3NvY2tldC5zZW5kKCkgcmFpc2VkIGV4Y2VwdGlvbi4nKQorICAgICAgICAgICAgc2VsZi5fY29ubl9sb3N0ICs9IDEKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIG5vdCBzZWxmLl9idWZmZXI6CisgICAgICAgICAgICBzZWxmLl9sb29wLmFkZF93cml0ZXIoc2VsZi5fc29ja19mZCwgc2VsZi5fd3JpdGVfcmVhZHkpCisKKyAgICAgICAgIyBBZGQgaXQgdG8gdGhlIGJ1ZmZlci4KKyAgICAgICAgc2VsZi5fYnVmZmVyLmV4dGVuZChkYXRhKQorICAgICAgICBzZWxmLl9tYXliZV9wYXVzZV9wcm90b2NvbCgpCisKKyAgICBkZWYgY2FuX3dyaXRlX2VvZihzZWxmKToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKworY2xhc3MgX1NlbGVjdG9yRGF0YWdyYW1UcmFuc3BvcnQoX1NlbGVjdG9yVHJhbnNwb3J0KToKKworICAgIF9idWZmZXJfZmFjdG9yeSA9IGNvbGxlY3Rpb25zLmRlcXVlCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbG9vcCwgc29jaywgcHJvdG9jb2wsIGFkZHJlc3M9Tm9uZSwKKyAgICAgICAgICAgICAgICAgd2FpdGVyPU5vbmUsIGV4dHJhPU5vbmUpOgorICAgICAgICBzdXBlcigpLl9faW5pdF9fKGxvb3AsIHNvY2ssIHByb3RvY29sLCBleHRyYSkKKyAgICAgICAgc2VsZi5fYWRkcmVzcyA9IGFkZHJlc3MKKyAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24oc2VsZi5fcHJvdG9jb2wuY29ubmVjdGlvbl9tYWRlLCBzZWxmKQorICAgICAgICAjIG9ubHkgc3RhcnQgcmVhZGluZyB3aGVuIGNvbm5lY3Rpb25fbWFkZSgpIGhhcyBiZWVuIGNhbGxlZAorICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbihzZWxmLl9sb29wLmFkZF9yZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3NvY2tfZmQsIHNlbGYuX3JlYWRfcmVhZHkpCisgICAgICAgIGlmIHdhaXRlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICMgb25seSB3YWtlIHVwIHRoZSB3YWl0ZXIgd2hlbiBjb25uZWN0aW9uX21hZGUoKSBoYXMgYmVlbiBjYWxsZWQKKyAgICAgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKGZ1dHVyZXMuX3NldF9yZXN1bHRfdW5sZXNzX2NhbmNlbGxlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhaXRlciwgTm9uZSkKKworICAgIGRlZiBnZXRfd3JpdGVfYnVmZmVyX3NpemUoc2VsZik6CisgICAgICAgIHJldHVybiBzdW0obGVuKGRhdGEpIGZvciBkYXRhLCBfIGluIHNlbGYuX2J1ZmZlcikKKworICAgIGRlZiBfcmVhZF9yZWFkeShzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGF0YSwgYWRkciA9IHNlbGYuX3NvY2sucmVjdmZyb20oc2VsZi5tYXhfc2l6ZSkKKyAgICAgICAgZXhjZXB0IChCbG9ja2luZ0lPRXJyb3IsIEludGVycnVwdGVkRXJyb3IpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6CisgICAgICAgICAgICBzZWxmLl9wcm90b2NvbC5lcnJvcl9yZWNlaXZlZChleGMpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgc2VsZi5fZmF0YWxfZXJyb3IoZXhjLCAnRmF0YWwgcmVhZCBlcnJvciBvbiBkYXRhZ3JhbSB0cmFuc3BvcnQnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fcHJvdG9jb2wuZGF0YWdyYW1fcmVjZWl2ZWQoZGF0YSwgYWRkcikKKworICAgIGRlZiBzZW5kdG8oc2VsZiwgZGF0YSwgYWRkcj1Ob25lKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZGF0YSwgKGJ5dGVzLCBieXRlYXJyYXksIG1lbW9yeXZpZXcpKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignZGF0YSBhcmd1bWVudCBtdXN0IGJlIGJ5dGUtaXNoICglciknLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUoZGF0YSkpCisgICAgICAgIGlmIG5vdCBkYXRhOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaWYgc2VsZi5fYWRkcmVzcyBhbmQgYWRkciBub3QgaW4gKE5vbmUsIHNlbGYuX2FkZHJlc3MpOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignSW52YWxpZCBhZGRyZXNzOiBtdXN0IGJlIE5vbmUgb3IgJXMnICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYuX2FkZHJlc3MsKSkKKworICAgICAgICBpZiBzZWxmLl9jb25uX2xvc3QgYW5kIHNlbGYuX2FkZHJlc3M6CisgICAgICAgICAgICBpZiBzZWxmLl9jb25uX2xvc3QgPj0gY29uc3RhbnRzLkxPR19USFJFU0hPTERfRk9SX0NPTk5MT1NUX1dSSVRFUzoKKyAgICAgICAgICAgICAgICBsb2dnZXIud2FybmluZygnc29ja2V0LnNlbmQoKSByYWlzZWQgZXhjZXB0aW9uLicpCisgICAgICAgICAgICBzZWxmLl9jb25uX2xvc3QgKz0gMQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaWYgbm90IHNlbGYuX2J1ZmZlcjoKKyAgICAgICAgICAgICMgQXR0ZW1wdCB0byBzZW5kIGl0IHJpZ2h0IGF3YXkgZmlyc3QuCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5fYWRkcmVzczoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fc29jay5zZW5kKGRhdGEpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fc29jay5zZW5kdG8oZGF0YSwgYWRkcikKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIGV4Y2VwdCAoQmxvY2tpbmdJT0Vycm9yLCBJbnRlcnJ1cHRlZEVycm9yKToKKyAgICAgICAgICAgICAgICBzZWxmLl9sb29wLmFkZF93cml0ZXIoc2VsZi5fc29ja19mZCwgc2VsZi5fc2VuZHRvX3JlYWR5KQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgICAgIHNlbGYuX3Byb3RvY29sLmVycm9yX3JlY2VpdmVkKGV4YykKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgICAgIHNlbGYuX2ZhdGFsX2Vycm9yKGV4YywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRmF0YWwgd3JpdGUgZXJyb3Igb24gZGF0YWdyYW0gdHJhbnNwb3J0JykKKyAgICAgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAjIEVuc3VyZSB0aGF0IHdoYXQgd2UgYnVmZmVyIGlzIGltbXV0YWJsZS4KKyAgICAgICAgc2VsZi5fYnVmZmVyLmFwcGVuZCgoYnl0ZXMoZGF0YSksIGFkZHIpKQorICAgICAgICBzZWxmLl9tYXliZV9wYXVzZV9wcm90b2NvbCgpCisKKyAgICBkZWYgX3NlbmR0b19yZWFkeShzZWxmKToKKyAgICAgICAgd2hpbGUgc2VsZi5fYnVmZmVyOgorICAgICAgICAgICAgZGF0YSwgYWRkciA9IHNlbGYuX2J1ZmZlci5wb3BsZWZ0KCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLl9hZGRyZXNzOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9zb2NrLnNlbmQoZGF0YSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9zb2NrLnNlbmR0byhkYXRhLCBhZGRyKQorICAgICAgICAgICAgZXhjZXB0IChCbG9ja2luZ0lPRXJyb3IsIEludGVycnVwdGVkRXJyb3IpOgorICAgICAgICAgICAgICAgIHNlbGYuX2J1ZmZlci5hcHBlbmRsZWZ0KChkYXRhLCBhZGRyKSkgICMgVHJ5IGFnYWluIGxhdGVyLgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6CisgICAgICAgICAgICAgICAgc2VsZi5fcHJvdG9jb2wuZXJyb3JfcmVjZWl2ZWQoZXhjKQorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICAgICAgc2VsZi5fZmF0YWxfZXJyb3IoZXhjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdGYXRhbCB3cml0ZSBlcnJvciBvbiBkYXRhZ3JhbSB0cmFuc3BvcnQnKQorICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHNlbGYuX21heWJlX3Jlc3VtZV9wcm90b2NvbCgpICAjIE1heSBhcHBlbmQgdG8gYnVmZmVyLgorICAgICAgICBpZiBub3Qgc2VsZi5fYnVmZmVyOgorICAgICAgICAgICAgc2VsZi5fbG9vcC5yZW1vdmVfd3JpdGVyKHNlbGYuX3NvY2tfZmQpCisgICAgICAgICAgICBpZiBzZWxmLl9jbG9zaW5nOgorICAgICAgICAgICAgICAgIHNlbGYuX2NhbGxfY29ubmVjdGlvbl9sb3N0KE5vbmUpCmRpZmYgLS1naXQgYS9MaWIvYXN5bmNpby9zc2xwcm90by5weSBiL0xpYi9hc3luY2lvL3NzbHByb3RvLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkZTk4MGIKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvYXN5bmNpby9zc2xwcm90by5weQpAQCAtMCwwICsxLDY4MCBAQAoraW1wb3J0IGNvbGxlY3Rpb25zCitpbXBvcnQgd2FybmluZ3MKK3RyeToKKyAgICBpbXBvcnQgc3NsCitleGNlcHQgSW1wb3J0RXJyb3I6ICAjIHByYWdtYTogbm8gY292ZXIKKyAgICBzc2wgPSBOb25lCisKK2Zyb20gLiBpbXBvcnQgY29tcGF0Citmcm9tIC4gaW1wb3J0IHByb3RvY29scworZnJvbSAuIGltcG9ydCB0cmFuc3BvcnRzCitmcm9tIC5sb2cgaW1wb3J0IGxvZ2dlcgorCisKK2RlZiBfY3JlYXRlX3RyYW5zcG9ydF9jb250ZXh0KHNlcnZlcl9zaWRlLCBzZXJ2ZXJfaG9zdG5hbWUpOgorICAgIGlmIHNlcnZlcl9zaWRlOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdTZXJ2ZXIgc2lkZSBTU0wgbmVlZHMgYSB2YWxpZCBTU0xDb250ZXh0JykKKworICAgICMgQ2xpZW50IHNpZGUgbWF5IHBhc3Mgc3NsPVRydWUgdG8gdXNlIGEgZGVmYXVsdAorICAgICMgY29udGV4dDsgaW4gdGhhdCBjYXNlIHRoZSBzc2xjb250ZXh0IHBhc3NlZCBpcyBOb25lLgorICAgICMgVGhlIGRlZmF1bHQgaXMgc2VjdXJlIGZvciBjbGllbnQgY29ubmVjdGlvbnMuCisgICAgaWYgaGFzYXR0cihzc2wsICdjcmVhdGVfZGVmYXVsdF9jb250ZXh0Jyk6CisgICAgICAgICMgUHl0aG9uIDMuNCs6IHVzZSB1cC10by1kYXRlIHN0cm9uZyBzZXR0aW5ncy4KKyAgICAgICAgc3NsY29udGV4dCA9IHNzbC5jcmVhdGVfZGVmYXVsdF9jb250ZXh0KCkKKyAgICAgICAgaWYgbm90IHNlcnZlcl9ob3N0bmFtZToKKyAgICAgICAgICAgIHNzbGNvbnRleHQuY2hlY2tfaG9zdG5hbWUgPSBGYWxzZQorICAgIGVsc2U6CisgICAgICAgICMgRmFsbGJhY2sgZm9yIFB5dGhvbiAzLjMuCisgICAgICAgIHNzbGNvbnRleHQgPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfU1NMdjIzKQorICAgICAgICBzc2xjb250ZXh0Lm9wdGlvbnMgfD0gc3NsLk9QX05PX1NTTHYyCisgICAgICAgIHNzbGNvbnRleHQub3B0aW9ucyB8PSBzc2wuT1BfTk9fU1NMdjMKKyAgICAgICAgc3NsY29udGV4dC5zZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHMoKQorICAgICAgICBzc2xjb250ZXh0LnZlcmlmeV9tb2RlID0gc3NsLkNFUlRfUkVRVUlSRUQKKyAgICByZXR1cm4gc3NsY29udGV4dAorCisKK2RlZiBfaXNfc3NscHJvdG9fYXZhaWxhYmxlKCk6CisgICAgcmV0dXJuIGhhc2F0dHIoc3NsLCAiTWVtb3J5QklPIikKKworCisjIFN0YXRlcyBvZiBhbiBfU1NMUGlwZS4KK19VTldSQVBQRUQgPSAiVU5XUkFQUEVEIgorX0RPX0hBTkRTSEFLRSA9ICJET19IQU5EU0hBS0UiCitfV1JBUFBFRCA9ICJXUkFQUEVEIgorX1NIVVRET1dOID0gIlNIVVRET1dOIgorCisKK2NsYXNzIF9TU0xQaXBlKG9iamVjdCk6CisgICAgIiIiQW4gU1NMICJQaXBlIi4KKworICAgIEFuIFNTTCBwaXBlIGFsbG93cyB5b3UgdG8gY29tbXVuaWNhdGUgd2l0aCBhbiBTU0wvVExTIHByb3RvY29sIGluc3RhbmNlCisgICAgdGhyb3VnaCBtZW1vcnkgYnVmZmVycy4gSXQgY2FuIGJlIHVzZWQgdG8gaW1wbGVtZW50IGEgc2VjdXJpdHkgbGF5ZXIgZm9yIGFuCisgICAgZXhpc3RpbmcgY29ubmVjdGlvbiB3aGVyZSB5b3UgZG9uJ3QgaGF2ZSBhY2Nlc3MgdG8gdGhlIGNvbm5lY3Rpb24ncyBmaWxlCisgICAgZGVzY3JpcHRvciwgb3IgZm9yIHNvbWUgcmVhc29uIHlvdSBkb24ndCB3YW50IHRvIHVzZSBpdC4KKworICAgIEFuIFNTTCBwaXBlIGNhbiBiZSBpbiAid3JhcHBlZCIgYW5kICJ1bndyYXBwZWQiIG1vZGUuIEluIHVud3JhcHBlZCBtb2RlLAorICAgIGRhdGEgaXMgcGFzc2VkIHRocm91Z2ggdW50cmFuc2Zvcm1lZC4gSW4gd3JhcHBlZCBtb2RlLCBhcHBsaWNhdGlvbiBsZXZlbAorICAgIGRhdGEgaXMgZW5jcnlwdGVkIHRvIFNTTCByZWNvcmQgbGV2ZWwgZGF0YSBhbmQgdmljZSB2ZXJzYS4gVGhlIFNTTCByZWNvcmQKKyAgICBsZXZlbCBpcyB0aGUgbG93ZXN0IGxldmVsIGluIHRoZSBTU0wgcHJvdG9jb2wgc3VpdGUgYW5kIGlzIHdoYXQgdHJhdmVscworICAgIGFzLWlzIG92ZXIgdGhlIHdpcmUuCisKKyAgICBBbiBTc2xQaXBlIGluaXRpYWxseSBpcyBpbiAidW53cmFwcGVkIiBtb2RlLiBUbyBzdGFydCBTU0wsIGNhbGwKKyAgICBkb19oYW5kc2hha2UoKS4gVG8gc2h1dGRvd24gU1NMIGFnYWluLCBjYWxsIHVud3JhcCgpLgorICAgICIiIgorCisgICAgbWF4X3NpemUgPSAyNTYgKiAxMDI0ICAgIyBCdWZmZXIgc2l6ZSBwYXNzZWQgdG8gcmVhZCgpCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29udGV4dCwgc2VydmVyX3NpZGUsIHNlcnZlcl9ob3N0bmFtZT1Ob25lKToKKyAgICAgICAgIiIiCisgICAgICAgIFRoZSAqY29udGV4dCogYXJndW1lbnQgc3BlY2lmaWVzIHRoZSBzc2wuU1NMQ29udGV4dCB0byB1c2UuCisKKyAgICAgICAgVGhlICpzZXJ2ZXJfc2lkZSogYXJndW1lbnQgaW5kaWNhdGVzIHdoZXRoZXIgdGhpcyBpcyBhIHNlcnZlciBzaWRlIG9yCisgICAgICAgIGNsaWVudCBzaWRlIHRyYW5zcG9ydC4KKworICAgICAgICBUaGUgb3B0aW9uYWwgKnNlcnZlcl9ob3N0bmFtZSogYXJndW1lbnQgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUKKyAgICAgICAgaG9zdG5hbWUgeW91IGFyZSBjb25uZWN0aW5nIHRvLiBZb3UgbWF5IG9ubHkgc3BlY2lmeSB0aGlzIHBhcmFtZXRlciBpZgorICAgICAgICB0aGUgX3NzbCBtb2R1bGUgc3VwcG9ydHMgU2VydmVyIE5hbWUgSW5kaWNhdGlvbiAoU05JKS4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX2NvbnRleHQgPSBjb250ZXh0CisgICAgICAgIHNlbGYuX3NlcnZlcl9zaWRlID0gc2VydmVyX3NpZGUKKyAgICAgICAgc2VsZi5fc2VydmVyX2hvc3RuYW1lID0gc2VydmVyX2hvc3RuYW1lCisgICAgICAgIHNlbGYuX3N0YXRlID0gX1VOV1JBUFBFRAorICAgICAgICBzZWxmLl9pbmNvbWluZyA9IHNzbC5NZW1vcnlCSU8oKQorICAgICAgICBzZWxmLl9vdXRnb2luZyA9IHNzbC5NZW1vcnlCSU8oKQorICAgICAgICBzZWxmLl9zc2xvYmogPSBOb25lCisgICAgICAgIHNlbGYuX25lZWRfc3NsZGF0YSA9IEZhbHNlCisgICAgICAgIHNlbGYuX2hhbmRzaGFrZV9jYiA9IE5vbmUKKyAgICAgICAgc2VsZi5fc2h1dGRvd25fY2IgPSBOb25lCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgY29udGV4dChzZWxmKToKKyAgICAgICAgIiIiVGhlIFNTTCBjb250ZXh0IHBhc3NlZCB0byB0aGUgY29uc3RydWN0b3IuIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9jb250ZXh0CisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgc3NsX29iamVjdChzZWxmKToKKyAgICAgICAgIiIiVGhlIGludGVybmFsIHNzbC5TU0xPYmplY3QgaW5zdGFuY2UuCisKKyAgICAgICAgUmV0dXJuIE5vbmUgaWYgdGhlIHBpcGUgaXMgbm90IHdyYXBwZWQuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gc2VsZi5fc3Nsb2JqCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgbmVlZF9zc2xkYXRhKHNlbGYpOgorICAgICAgICAiIiJXaGV0aGVyIG1vcmUgcmVjb3JkIGxldmVsIGRhdGEgaXMgbmVlZGVkIHRvIGNvbXBsZXRlIGEgaGFuZHNoYWtlCisgICAgICAgIHRoYXQgaXMgY3VycmVudGx5IGluIHByb2dyZXNzLiIiIgorICAgICAgICByZXR1cm4gc2VsZi5fbmVlZF9zc2xkYXRhCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgd3JhcHBlZChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFdoZXRoZXIgYSBzZWN1cml0eSBsYXllciBpcyBjdXJyZW50bHkgaW4gZWZmZWN0LgorCisgICAgICAgIFJldHVybiBGYWxzZSBkdXJpbmcgaGFuZHNoYWtlLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX3N0YXRlID09IF9XUkFQUEVECisKKyAgICBkZWYgZG9faGFuZHNoYWtlKHNlbGYsIGNhbGxiYWNrPU5vbmUpOgorICAgICAgICAiIiJTdGFydCB0aGUgU1NMIGhhbmRzaGFrZS4KKworICAgICAgICBSZXR1cm4gYSBsaXN0IG9mIHNzbGRhdGEuIEEgc3NsZGF0YSBlbGVtZW50IGlzIGEgbGlzdCBvZiBidWZmZXJzCisKKyAgICAgICAgVGhlIG9wdGlvbmFsICpjYWxsYmFjayogYXJndW1lbnQgY2FuIGJlIHVzZWQgdG8gaW5zdGFsbCBhIGNhbGxiYWNrIHRoYXQKKyAgICAgICAgd2lsbCBiZSBjYWxsZWQgd2hlbiB0aGUgaGFuZHNoYWtlIGlzIGNvbXBsZXRlLiBUaGUgY2FsbGJhY2sgd2lsbCBiZQorICAgICAgICBjYWxsZWQgd2l0aCBOb25lIGlmIHN1Y2Nlc3NmdWwsIGVsc2UgYW4gZXhjZXB0aW9uIGluc3RhbmNlLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5fc3RhdGUgIT0gX1VOV1JBUFBFRDoKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignaGFuZHNoYWtlIGluIHByb2dyZXNzIG9yIGNvbXBsZXRlZCcpCisgICAgICAgIHNlbGYuX3NzbG9iaiA9IHNlbGYuX2NvbnRleHQud3JhcF9iaW8oCisgICAgICAgICAgICBzZWxmLl9pbmNvbWluZywgc2VsZi5fb3V0Z29pbmcsCisgICAgICAgICAgICBzZXJ2ZXJfc2lkZT1zZWxmLl9zZXJ2ZXJfc2lkZSwKKyAgICAgICAgICAgIHNlcnZlcl9ob3N0bmFtZT1zZWxmLl9zZXJ2ZXJfaG9zdG5hbWUpCisgICAgICAgIHNlbGYuX3N0YXRlID0gX0RPX0hBTkRTSEFLRQorICAgICAgICBzZWxmLl9oYW5kc2hha2VfY2IgPSBjYWxsYmFjaworICAgICAgICBzc2xkYXRhLCBhcHBkYXRhID0gc2VsZi5mZWVkX3NzbGRhdGEoYicnLCBvbmx5X2hhbmRzaGFrZT1UcnVlKQorICAgICAgICBhc3NlcnQgbGVuKGFwcGRhdGEpID09IDAKKyAgICAgICAgcmV0dXJuIHNzbGRhdGEKKworICAgIGRlZiBzaHV0ZG93bihzZWxmLCBjYWxsYmFjaz1Ob25lKToKKyAgICAgICAgIiIiU3RhcnQgdGhlIFNTTCBzaHV0ZG93biBzZXF1ZW5jZS4KKworICAgICAgICBSZXR1cm4gYSBsaXN0IG9mIHNzbGRhdGEuIEEgc3NsZGF0YSBlbGVtZW50IGlzIGEgbGlzdCBvZiBidWZmZXJzCisKKyAgICAgICAgVGhlIG9wdGlvbmFsICpjYWxsYmFjayogYXJndW1lbnQgY2FuIGJlIHVzZWQgdG8gaW5zdGFsbCBhIGNhbGxiYWNrIHRoYXQKKyAgICAgICAgd2lsbCBiZSBjYWxsZWQgd2hlbiB0aGUgc2h1dGRvd24gaXMgY29tcGxldGUuIFRoZSBjYWxsYmFjayB3aWxsIGJlCisgICAgICAgIGNhbGxlZCB3aXRob3V0IGFyZ3VtZW50cy4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuX3N0YXRlID09IF9VTldSQVBQRUQ6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ25vIHNlY3VyaXR5IGxheWVyIHByZXNlbnQnKQorICAgICAgICBpZiBzZWxmLl9zdGF0ZSA9PSBfU0hVVERPV046CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ3NodXRkb3duIGluIHByb2dyZXNzJykKKyAgICAgICAgYXNzZXJ0IHNlbGYuX3N0YXRlIGluIChfV1JBUFBFRCwgX0RPX0hBTkRTSEFLRSkKKyAgICAgICAgc2VsZi5fc3RhdGUgPSBfU0hVVERPV04KKyAgICAgICAgc2VsZi5fc2h1dGRvd25fY2IgPSBjYWxsYmFjaworICAgICAgICBzc2xkYXRhLCBhcHBkYXRhID0gc2VsZi5mZWVkX3NzbGRhdGEoYicnKQorICAgICAgICBhc3NlcnQgYXBwZGF0YSA9PSBbXSBvciBhcHBkYXRhID09IFtiJyddCisgICAgICAgIHJldHVybiBzc2xkYXRhCisKKyAgICBkZWYgZmVlZF9lb2Yoc2VsZik6CisgICAgICAgICIiIlNlbmQgYSBwb3RlbnRpYWxseSAicmFnZ2VkIiBFT0YuCisKKyAgICAgICAgVGhpcyBtZXRob2Qgd2lsbCByYWlzZSBhbiBTU0xfRVJST1JfRU9GIGV4Y2VwdGlvbiBpZiB0aGUgRU9GIGlzCisgICAgICAgIHVuZXhwZWN0ZWQuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9pbmNvbWluZy53cml0ZV9lb2YoKQorICAgICAgICBzc2xkYXRhLCBhcHBkYXRhID0gc2VsZi5mZWVkX3NzbGRhdGEoYicnKQorICAgICAgICBhc3NlcnQgYXBwZGF0YSA9PSBbXSBvciBhcHBkYXRhID09IFtiJyddCisKKyAgICBkZWYgZmVlZF9zc2xkYXRhKHNlbGYsIGRhdGEsIG9ubHlfaGFuZHNoYWtlPUZhbHNlKToKKyAgICAgICAgIiIiRmVlZCBTU0wgcmVjb3JkIGxldmVsIGRhdGEgaW50byB0aGUgcGlwZS4KKworICAgICAgICBUaGUgZGF0YSBtdXN0IGJlIGEgYnl0ZXMgaW5zdGFuY2UuIEl0IGlzIE9LIHRvIHNlbmQgYW4gZW1wdHkgYnl0ZXMKKyAgICAgICAgaW5zdGFuY2UuIFRoaXMgY2FuIGJlIHVzZWQgdG8gZ2V0IHNzbGRhdGEgZm9yIGEgaGFuZHNoYWtlIGluaXRpYXRlZCBieQorICAgICAgICB0aGlzIGVuZHBvaW50LgorCisgICAgICAgIFJldHVybiBhIChzc2xkYXRhLCBhcHBkYXRhKSB0dXBsZS4gVGhlIHNzbGRhdGEgZWxlbWVudCBpcyBhIGxpc3Qgb2YKKyAgICAgICAgYnVmZmVycyBjb250YWluaW5nIFNTTCBkYXRhIHRoYXQgbmVlZHMgdG8gYmUgc2VudCB0byB0aGUgcmVtb3RlIFNTTC4KKworICAgICAgICBUaGUgYXBwZGF0YSBlbGVtZW50IGlzIGEgbGlzdCBvZiBidWZmZXJzIGNvbnRhaW5pbmcgcGxhaW50ZXh0IGRhdGEgdGhhdAorICAgICAgICBuZWVkcyB0byBiZSBmb3J3YXJkZWQgdG8gdGhlIGFwcGxpY2F0aW9uLiBUaGUgYXBwZGF0YSBsaXN0IG1heSBjb250YWluCisgICAgICAgIGFuIGVtcHR5IGJ1ZmZlciBpbmRpY2F0aW5nIGFuIFNTTCAiY2xvc2Vfbm90aWZ5IiBhbGVydC4gVGhpcyBhbGVydCBtdXN0CisgICAgICAgIGJlIGFja25vd2xlZGdlZCBieSBjYWxsaW5nIHNodXRkb3duKCkuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl9zdGF0ZSA9PSBfVU5XUkFQUEVEOgorICAgICAgICAgICAgIyBJZiB1bndyYXBwZWQsIHBhc3MgcGxhaW50ZXh0IGRhdGEgc3RyYWlnaHQgdGhyb3VnaC4KKyAgICAgICAgICAgIGlmIGRhdGE6CisgICAgICAgICAgICAgICAgYXBwZGF0YSA9IFtkYXRhXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBhcHBkYXRhID0gW10KKyAgICAgICAgICAgIHJldHVybiAoW10sIGFwcGRhdGEpCisKKyAgICAgICAgc2VsZi5fbmVlZF9zc2xkYXRhID0gRmFsc2UKKyAgICAgICAgaWYgZGF0YToKKyAgICAgICAgICAgIHNlbGYuX2luY29taW5nLndyaXRlKGRhdGEpCisKKyAgICAgICAgc3NsZGF0YSA9IFtdCisgICAgICAgIGFwcGRhdGEgPSBbXQorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBzZWxmLl9zdGF0ZSA9PSBfRE9fSEFORFNIQUtFOgorICAgICAgICAgICAgICAgICMgQ2FsbCBkb19oYW5kc2hha2UoKSB1bnRpbCBpdCBkb2Vzbid0IHJhaXNlIGFueW1vcmUuCisgICAgICAgICAgICAgICAgc2VsZi5fc3Nsb2JqLmRvX2hhbmRzaGFrZSgpCisgICAgICAgICAgICAgICAgc2VsZi5fc3RhdGUgPSBfV1JBUFBFRAorICAgICAgICAgICAgICAgIGlmIHNlbGYuX2hhbmRzaGFrZV9jYjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5faGFuZHNoYWtlX2NiKE5vbmUpCisgICAgICAgICAgICAgICAgaWYgb25seV9oYW5kc2hha2U6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAoc3NsZGF0YSwgYXBwZGF0YSkKKyAgICAgICAgICAgICAgICAjIEhhbmRzaGFrZSBkb25lOiBleGVjdXRlIHRoZSB3cmFwcGVkIGJsb2NrCisKKyAgICAgICAgICAgIGlmIHNlbGYuX3N0YXRlID09IF9XUkFQUEVEOgorICAgICAgICAgICAgICAgICMgTWFpbiBzdGF0ZTogcmVhZCBkYXRhIGZyb20gU1NMIHVudGlsIGNsb3NlX25vdGlmeQorICAgICAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgICAgIGNodW5rID0gc2VsZi5fc3Nsb2JqLnJlYWQoc2VsZi5tYXhfc2l6ZSkKKyAgICAgICAgICAgICAgICAgICAgYXBwZGF0YS5hcHBlbmQoY2h1bmspCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBjaHVuazogICMgY2xvc2Vfbm90aWZ5CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICBlbGlmIHNlbGYuX3N0YXRlID09IF9TSFVURE9XTjoKKyAgICAgICAgICAgICAgICAjIENhbGwgc2h1dGRvd24oKSB1bnRpbCBpdCBkb2Vzbid0IHJhaXNlIGFueW1vcmUuCisgICAgICAgICAgICAgICAgc2VsZi5fc3Nsb2JqLnVud3JhcCgpCisgICAgICAgICAgICAgICAgc2VsZi5fc3Nsb2JqID0gTm9uZQorICAgICAgICAgICAgICAgIHNlbGYuX3N0YXRlID0gX1VOV1JBUFBFRAorICAgICAgICAgICAgICAgIGlmIHNlbGYuX3NodXRkb3duX2NiOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9zaHV0ZG93bl9jYigpCisKKyAgICAgICAgICAgIGVsaWYgc2VsZi5fc3RhdGUgPT0gX1VOV1JBUFBFRDoKKyAgICAgICAgICAgICAgICAjIERyYWluIHBvc3NpYmxlIHBsYWludGV4dCBkYXRhIGFmdGVyIGNsb3NlX25vdGlmeS4KKyAgICAgICAgICAgICAgICBhcHBkYXRhLmFwcGVuZChzZWxmLl9pbmNvbWluZy5yZWFkKCkpCisgICAgICAgIGV4Y2VwdCAoc3NsLlNTTEVycm9yLCBzc2wuQ2VydGlmaWNhdGVFcnJvcikgYXMgZXhjOgorICAgICAgICAgICAgaWYgZ2V0YXR0cihleGMsICdlcnJubycsIE5vbmUpIG5vdCBpbiAoCisgICAgICAgICAgICAgICAgICAgIHNzbC5TU0xfRVJST1JfV0FOVF9SRUFELCBzc2wuU1NMX0VSUk9SX1dBTlRfV1JJVEUsCisgICAgICAgICAgICAgICAgICAgIHNzbC5TU0xfRVJST1JfU1lTQ0FMTCk6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5fc3RhdGUgPT0gX0RPX0hBTkRTSEFLRSBhbmQgc2VsZi5faGFuZHNoYWtlX2NiOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9oYW5kc2hha2VfY2IoZXhjKQorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICBzZWxmLl9uZWVkX3NzbGRhdGEgPSAoZXhjLmVycm5vID09IHNzbC5TU0xfRVJST1JfV0FOVF9SRUFEKQorCisgICAgICAgICMgQ2hlY2sgZm9yIHJlY29yZCBsZXZlbCBkYXRhIHRoYXQgbmVlZHMgdG8gYmUgc2VudCBiYWNrLgorICAgICAgICAjIEhhcHBlbnMgZm9yIHRoZSBpbml0aWFsIGhhbmRzaGFrZSBhbmQgcmVuZWdvdGlhdGlvbnMuCisgICAgICAgIGlmIHNlbGYuX291dGdvaW5nLnBlbmRpbmc6CisgICAgICAgICAgICBzc2xkYXRhLmFwcGVuZChzZWxmLl9vdXRnb2luZy5yZWFkKCkpCisgICAgICAgIHJldHVybiAoc3NsZGF0YSwgYXBwZGF0YSkKKworICAgIGRlZiBmZWVkX2FwcGRhdGEoc2VsZiwgZGF0YSwgb2Zmc2V0PTApOgorICAgICAgICAiIiJGZWVkIHBsYWludGV4dCBkYXRhIGludG8gdGhlIHBpcGUuCisKKyAgICAgICAgUmV0dXJuIGFuIChzc2xkYXRhLCBvZmZzZXQpIHR1cGxlLiBUaGUgc3NsZGF0YSBlbGVtZW50IGlzIGEgbGlzdCBvZgorICAgICAgICBidWZmZXJzIGNvbnRhaW5pbmcgcmVjb3JkIGxldmVsIGRhdGEgdGhhdCBuZWVkcyB0byBiZSBzZW50IHRvIHRoZQorICAgICAgICByZW1vdGUgU1NMIGluc3RhbmNlLiBUaGUgb2Zmc2V0IGlzIHRoZSBudW1iZXIgb2YgcGxhaW50ZXh0IGJ5dGVzIHRoYXQKKyAgICAgICAgd2VyZSBwcm9jZXNzZWQsIHdoaWNoIG1heSBiZSBsZXNzIHRoYW4gdGhlIGxlbmd0aCBvZiBkYXRhLgorCisgICAgICAgIE5PVEU6IEluIGNhc2Ugb2Ygc2hvcnQgd3JpdGVzLCB0aGlzIGNhbGwgTVVTVCBiZSByZXRyaWVkIHdpdGggdGhlIFNBTUUKKyAgICAgICAgYnVmZmVyIHBhc3NlZCBpbnRvIHRoZSAqZGF0YSogYXJndW1lbnQgKGkuZS4gdGhlIGlkKCkgbXVzdCBiZSB0aGUKKyAgICAgICAgc2FtZSkuIFRoaXMgaXMgYW4gT3BlblNTTCByZXF1aXJlbWVudC4gQSBmdXJ0aGVyIHBhcnRpY3VsYXJpdHkgaXMgdGhhdAorICAgICAgICBhIHNob3J0IHdyaXRlIHdpbGwgYWx3YXlzIGhhdmUgb2Zmc2V0ID09IDAsIGJlY2F1c2UgdGhlIF9zc2wgbW9kdWxlCisgICAgICAgIGRvZXMgbm90IGVuYWJsZSBwYXJ0aWFsIHdyaXRlcy4gQW5kIGV2ZW4gdGhvdWdoIHRoZSBvZmZzZXQgaXMgemVybywKKyAgICAgICAgdGhlcmUgd2lsbCBzdGlsbCBiZSBlbmNyeXB0ZWQgZGF0YSBpbiBzc2xkYXRhLgorICAgICAgICAiIiIKKyAgICAgICAgYXNzZXJ0IDAgPD0gb2Zmc2V0IDw9IGxlbihkYXRhKQorICAgICAgICBpZiBzZWxmLl9zdGF0ZSA9PSBfVU5XUkFQUEVEOgorICAgICAgICAgICAgIyBwYXNzIHRocm91Z2ggZGF0YSBpbiB1bndyYXBwZWQgbW9kZQorICAgICAgICAgICAgaWYgb2Zmc2V0IDwgbGVuKGRhdGEpOgorICAgICAgICAgICAgICAgIHNzbGRhdGEgPSBbZGF0YVtvZmZzZXQ6XV0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc3NsZGF0YSA9IFtdCisgICAgICAgICAgICByZXR1cm4gKHNzbGRhdGEsIGxlbihkYXRhKSkKKworICAgICAgICBzc2xkYXRhID0gW10KKyAgICAgICAgdmlldyA9IG1lbW9yeXZpZXcoZGF0YSkKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIHNlbGYuX25lZWRfc3NsZGF0YSA9IEZhbHNlCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaWYgb2Zmc2V0IDwgbGVuKHZpZXcpOgorICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKz0gc2VsZi5fc3Nsb2JqLndyaXRlKHZpZXdbb2Zmc2V0Ol0pCisgICAgICAgICAgICBleGNlcHQgc3NsLlNTTEVycm9yIGFzIGV4YzoKKyAgICAgICAgICAgICAgICAjIEl0IGlzIG5vdCBhbGxvd2VkIHRvIGNhbGwgd3JpdGUoKSBhZnRlciB1bndyYXAoKSB1bnRpbCB0aGUKKyAgICAgICAgICAgICAgICAjIGNsb3NlX25vdGlmeSBpcyBhY2tub3dsZWRnZWQuIFdlIHJldHVybiB0aGUgY29uZGl0aW9uIHRvIHRoZQorICAgICAgICAgICAgICAgICMgY2FsbGVyIGFzIGEgc2hvcnQgd3JpdGUuCisgICAgICAgICAgICAgICAgaWYgZXhjLnJlYXNvbiA9PSAnUFJPVE9DT0xfSVNfU0hVVERPV04nOgorICAgICAgICAgICAgICAgICAgICBleGMuZXJybm8gPSBzc2wuU1NMX0VSUk9SX1dBTlRfUkVBRAorICAgICAgICAgICAgICAgIGlmIGV4Yy5lcnJubyBub3QgaW4gKHNzbC5TU0xfRVJST1JfV0FOVF9SRUFELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC5TU0xfRVJST1JfV0FOVF9XUklURSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2wuU1NMX0VSUk9SX1NZU0NBTEwpOgorICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgICAgIHNlbGYuX25lZWRfc3NsZGF0YSA9IChleGMuZXJybm8gPT0gc3NsLlNTTF9FUlJPUl9XQU5UX1JFQUQpCisKKyAgICAgICAgICAgICMgU2VlIGlmIHRoZXJlJ3MgYW55IHJlY29yZCBsZXZlbCBkYXRhIGJhY2sgZm9yIHVzLgorICAgICAgICAgICAgaWYgc2VsZi5fb3V0Z29pbmcucGVuZGluZzoKKyAgICAgICAgICAgICAgICBzc2xkYXRhLmFwcGVuZChzZWxmLl9vdXRnb2luZy5yZWFkKCkpCisgICAgICAgICAgICBpZiBvZmZzZXQgPT0gbGVuKHZpZXcpIG9yIHNlbGYuX25lZWRfc3NsZGF0YToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICByZXR1cm4gKHNzbGRhdGEsIG9mZnNldCkKKworCitjbGFzcyBfU1NMUHJvdG9jb2xUcmFuc3BvcnQodHJhbnNwb3J0cy5fRmxvd0NvbnRyb2xNaXhpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc3BvcnRzLlRyYW5zcG9ydCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbG9vcCwgc3NsX3Byb3RvY29sLCBhcHBfcHJvdG9jb2wpOgorICAgICAgICBzZWxmLl9sb29wID0gbG9vcAorICAgICAgICAjIFNTTFByb3RvY29sIGluc3RhbmNlCisgICAgICAgIHNlbGYuX3NzbF9wcm90b2NvbCA9IHNzbF9wcm90b2NvbAorICAgICAgICBzZWxmLl9hcHBfcHJvdG9jb2wgPSBhcHBfcHJvdG9jb2wKKyAgICAgICAgc2VsZi5fY2xvc2VkID0gRmFsc2UKKworICAgIGRlZiBnZXRfZXh0cmFfaW5mbyhzZWxmLCBuYW1lLCBkZWZhdWx0PU5vbmUpOgorICAgICAgICAiIiJHZXQgb3B0aW9uYWwgdHJhbnNwb3J0IGluZm9ybWF0aW9uLiIiIgorICAgICAgICByZXR1cm4gc2VsZi5fc3NsX3Byb3RvY29sLl9nZXRfZXh0cmFfaW5mbyhuYW1lLCBkZWZhdWx0KQorCisgICAgZGVmIGlzX2Nsb3Npbmcoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9jbG9zZWQKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgIiIiQ2xvc2UgdGhlIHRyYW5zcG9ydC4KKworICAgICAgICBCdWZmZXJlZCBkYXRhIHdpbGwgYmUgZmx1c2hlZCBhc3luY2hyb25vdXNseS4gIE5vIG1vcmUgZGF0YQorICAgICAgICB3aWxsIGJlIHJlY2VpdmVkLiAgQWZ0ZXIgYWxsIGJ1ZmZlcmVkIGRhdGEgaXMgZmx1c2hlZCwgdGhlCisgICAgICAgIHByb3RvY29sJ3MgY29ubmVjdGlvbl9sb3N0KCkgbWV0aG9kIHdpbGwgKGV2ZW50dWFsbHkpIGNhbGxlZAorICAgICAgICB3aXRoIE5vbmUgYXMgaXRzIGFyZ3VtZW50LgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fY2xvc2VkID0gVHJ1ZQorICAgICAgICBzZWxmLl9zc2xfcHJvdG9jb2wuX3N0YXJ0X3NodXRkb3duKCkKKworICAgICMgT24gUHl0aG9uIDMuMyBhbmQgb2xkZXIsIG9iamVjdHMgd2l0aCBhIGRlc3RydWN0b3IgcGFydCBvZiBhIHJlZmVyZW5jZQorICAgICMgY3ljbGUgYXJlIG5ldmVyIGRlc3Ryb3llZC4gSXQncyBub3QgbW9yZSB0aGUgY2FzZSBvbiBQeXRob24gMy40IHRoYW5rcworICAgICMgdG8gdGhlIFBFUCA0NDIuCisgICAgaWYgY29tcGF0LlBZMzQ6CisgICAgICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICAgICAgaWYgbm90IHNlbGYuX2Nsb3NlZDoKKyAgICAgICAgICAgICAgICB3YXJuaW5ncy53YXJuKCJ1bmNsb3NlZCB0cmFuc3BvcnQgJXIiICUgc2VsZiwgUmVzb3VyY2VXYXJuaW5nKQorICAgICAgICAgICAgICAgIHNlbGYuY2xvc2UoKQorCisgICAgZGVmIHBhdXNlX3JlYWRpbmcoc2VsZik6CisgICAgICAgICIiIlBhdXNlIHRoZSByZWNlaXZpbmcgZW5kLgorCisgICAgICAgIE5vIGRhdGEgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIHByb3RvY29sJ3MgZGF0YV9yZWNlaXZlZCgpCisgICAgICAgIG1ldGhvZCB1bnRpbCByZXN1bWVfcmVhZGluZygpIGlzIGNhbGxlZC4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX3NzbF9wcm90b2NvbC5fdHJhbnNwb3J0LnBhdXNlX3JlYWRpbmcoKQorCisgICAgZGVmIHJlc3VtZV9yZWFkaW5nKHNlbGYpOgorICAgICAgICAiIiJSZXN1bWUgdGhlIHJlY2VpdmluZyBlbmQuCisKKyAgICAgICAgRGF0YSByZWNlaXZlZCB3aWxsIG9uY2UgYWdhaW4gYmUgcGFzc2VkIHRvIHRoZSBwcm90b2NvbCdzCisgICAgICAgIGRhdGFfcmVjZWl2ZWQoKSBtZXRob2QuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9zc2xfcHJvdG9jb2wuX3RyYW5zcG9ydC5yZXN1bWVfcmVhZGluZygpCisKKyAgICBkZWYgc2V0X3dyaXRlX2J1ZmZlcl9saW1pdHMoc2VsZiwgaGlnaD1Ob25lLCBsb3c9Tm9uZSk6CisgICAgICAgICIiIlNldCB0aGUgaGlnaC0gYW5kIGxvdy13YXRlciBsaW1pdHMgZm9yIHdyaXRlIGZsb3cgY29udHJvbC4KKworICAgICAgICBUaGVzZSB0d28gdmFsdWVzIGNvbnRyb2wgd2hlbiB0byBjYWxsIHRoZSBwcm90b2NvbCdzCisgICAgICAgIHBhdXNlX3dyaXRpbmcoKSBhbmQgcmVzdW1lX3dyaXRpbmcoKSBtZXRob2RzLiAgSWYgc3BlY2lmaWVkLAorICAgICAgICB0aGUgbG93LXdhdGVyIGxpbWl0IG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZQorICAgICAgICBoaWdoLXdhdGVyIGxpbWl0LiAgTmVpdGhlciB2YWx1ZSBjYW4gYmUgbmVnYXRpdmUuCisKKyAgICAgICAgVGhlIGRlZmF1bHRzIGFyZSBpbXBsZW1lbnRhdGlvbi1zcGVjaWZpYy4gIElmIG9ubHkgdGhlCisgICAgICAgIGhpZ2gtd2F0ZXIgbGltaXQgaXMgZ2l2ZW4sIHRoZSBsb3ctd2F0ZXIgbGltaXQgZGVmYXVsdHMgdG8gYW4KKyAgICAgICAgaW1wbGVtZW50YXRpb24tc3BlY2lmaWMgdmFsdWUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZQorICAgICAgICBoaWdoLXdhdGVyIGxpbWl0LiAgU2V0dGluZyBoaWdoIHRvIHplcm8gZm9yY2VzIGxvdyB0byB6ZXJvIGFzCisgICAgICAgIHdlbGwsIGFuZCBjYXVzZXMgcGF1c2Vfd3JpdGluZygpIHRvIGJlIGNhbGxlZCB3aGVuZXZlciB0aGUKKyAgICAgICAgYnVmZmVyIGJlY29tZXMgbm9uLWVtcHR5LiAgU2V0dGluZyBsb3cgdG8gemVybyBjYXVzZXMKKyAgICAgICAgcmVzdW1lX3dyaXRpbmcoKSB0byBiZSBjYWxsZWQgb25seSBvbmNlIHRoZSBidWZmZXIgaXMgZW1wdHkuCisgICAgICAgIFVzZSBvZiB6ZXJvIGZvciBlaXRoZXIgbGltaXQgaXMgZ2VuZXJhbGx5IHN1Yi1vcHRpbWFsIGFzIGl0CisgICAgICAgIHJlZHVjZXMgb3Bwb3J0dW5pdGllcyBmb3IgZG9pbmcgSS9PIGFuZCBjb21wdXRhdGlvbgorICAgICAgICBjb25jdXJyZW50bHkuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9zc2xfcHJvdG9jb2wuX3RyYW5zcG9ydC5zZXRfd3JpdGVfYnVmZmVyX2xpbWl0cyhoaWdoLCBsb3cpCisKKyAgICBkZWYgZ2V0X3dyaXRlX2J1ZmZlcl9zaXplKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIGN1cnJlbnQgc2l6ZSBvZiB0aGUgd3JpdGUgYnVmZmVyLiIiIgorICAgICAgICByZXR1cm4gc2VsZi5fc3NsX3Byb3RvY29sLl90cmFuc3BvcnQuZ2V0X3dyaXRlX2J1ZmZlcl9zaXplKCkKKworICAgIGRlZiB3cml0ZShzZWxmLCBkYXRhKToKKyAgICAgICAgIiIiV3JpdGUgc29tZSBkYXRhIGJ5dGVzIHRvIHRoZSB0cmFuc3BvcnQuCisKKyAgICAgICAgVGhpcyBkb2VzIG5vdCBibG9jazsgaXQgYnVmZmVycyB0aGUgZGF0YSBhbmQgYXJyYW5nZXMgZm9yIGl0CisgICAgICAgIHRvIGJlIHNlbnQgb3V0IGFzeW5jaHJvbm91c2x5LgorICAgICAgICAiIiIKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZGF0YSwgKGJ5dGVzLCBieXRlYXJyYXksIG1lbW9yeXZpZXcpKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiZGF0YTogZXhwZWN0aW5nIGEgYnl0ZXMtbGlrZSBpbnN0YW5jZSwgZ290IHshcn0iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JtYXQodHlwZShkYXRhKS5fX25hbWVfXykpCisgICAgICAgIGlmIG5vdCBkYXRhOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYuX3NzbF9wcm90b2NvbC5fd3JpdGVfYXBwZGF0YShkYXRhKQorCisgICAgZGVmIGNhbl93cml0ZV9lb2Yoc2VsZik6CisgICAgICAgICIiIlJldHVybiBUcnVlIGlmIHRoaXMgdHJhbnNwb3J0IHN1cHBvcnRzIHdyaXRlX2VvZigpLCBGYWxzZSBpZiBub3QuIiIiCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIGFib3J0KHNlbGYpOgorICAgICAgICAiIiJDbG9zZSB0aGUgdHJhbnNwb3J0IGltbWVkaWF0ZWx5LgorCisgICAgICAgIEJ1ZmZlcmVkIGRhdGEgd2lsbCBiZSBsb3N0LiAgTm8gbW9yZSBkYXRhIHdpbGwgYmUgcmVjZWl2ZWQuCisgICAgICAgIFRoZSBwcm90b2NvbCdzIGNvbm5lY3Rpb25fbG9zdCgpIG1ldGhvZCB3aWxsIChldmVudHVhbGx5KSBiZQorICAgICAgICBjYWxsZWQgd2l0aCBOb25lIGFzIGl0cyBhcmd1bWVudC4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX3NzbF9wcm90b2NvbC5fYWJvcnQoKQorCisKK2NsYXNzIFNTTFByb3RvY29sKHByb3RvY29scy5Qcm90b2NvbCk6CisgICAgIiIiU1NMIHByb3RvY29sLgorCisgICAgSW1wbGVtZW50YXRpb24gb2YgU1NMIG9uIHRvcCBvZiBhIHNvY2tldCB1c2luZyBpbmNvbWluZyBhbmQgb3V0Z29pbmcKKyAgICBidWZmZXJzIHdoaWNoIGFyZSBzc2wuTWVtb3J5QklPIG9iamVjdHMuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbG9vcCwgYXBwX3Byb3RvY29sLCBzc2xjb250ZXh0LCB3YWl0ZXIsCisgICAgICAgICAgICAgICAgIHNlcnZlcl9zaWRlPUZhbHNlLCBzZXJ2ZXJfaG9zdG5hbWU9Tm9uZSk6CisgICAgICAgIGlmIHNzbCBpcyBOb25lOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdzdGRsaWIgc3NsIG1vZHVsZSBub3QgYXZhaWxhYmxlJykKKworICAgICAgICBpZiBub3Qgc3NsY29udGV4dDoKKyAgICAgICAgICAgIHNzbGNvbnRleHQgPSBfY3JlYXRlX3RyYW5zcG9ydF9jb250ZXh0KHNlcnZlcl9zaWRlLCBzZXJ2ZXJfaG9zdG5hbWUpCisKKyAgICAgICAgc2VsZi5fc2VydmVyX3NpZGUgPSBzZXJ2ZXJfc2lkZQorICAgICAgICBpZiBzZXJ2ZXJfaG9zdG5hbWUgYW5kIG5vdCBzZXJ2ZXJfc2lkZToKKyAgICAgICAgICAgIHNlbGYuX3NlcnZlcl9ob3N0bmFtZSA9IHNlcnZlcl9ob3N0bmFtZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fc2VydmVyX2hvc3RuYW1lID0gTm9uZQorICAgICAgICBzZWxmLl9zc2xjb250ZXh0ID0gc3NsY29udGV4dAorICAgICAgICAjIFNTTC1zcGVjaWZpYyBleHRyYSBpbmZvLiBNb3JlIGluZm8gYXJlIHNldCB3aGVuIHRoZSBoYW5kc2hha2UKKyAgICAgICAgIyBjb21wbGV0ZXMuCisgICAgICAgIHNlbGYuX2V4dHJhID0gZGljdChzc2xjb250ZXh0PXNzbGNvbnRleHQpCisKKyAgICAgICAgIyBBcHAgZGF0YSB3cml0ZSBidWZmZXJpbmcKKyAgICAgICAgc2VsZi5fd3JpdGVfYmFja2xvZyA9IGNvbGxlY3Rpb25zLmRlcXVlKCkKKyAgICAgICAgc2VsZi5fd3JpdGVfYnVmZmVyX3NpemUgPSAwCisKKyAgICAgICAgc2VsZi5fd2FpdGVyID0gd2FpdGVyCisgICAgICAgIHNlbGYuX2xvb3AgPSBsb29wCisgICAgICAgIHNlbGYuX2FwcF9wcm90b2NvbCA9IGFwcF9wcm90b2NvbAorICAgICAgICBzZWxmLl9hcHBfdHJhbnNwb3J0ID0gX1NTTFByb3RvY29sVHJhbnNwb3J0KHNlbGYuX2xvb3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZiwgc2VsZi5fYXBwX3Byb3RvY29sKQorICAgICAgICAjIF9TU0xQaXBlIGluc3RhbmNlIChOb25lIHVudGlsIHRoZSBjb25uZWN0aW9uIGlzIG1hZGUpCisgICAgICAgIHNlbGYuX3NzbHBpcGUgPSBOb25lCisgICAgICAgIHNlbGYuX3Nlc3Npb25fZXN0YWJsaXNoZWQgPSBGYWxzZQorICAgICAgICBzZWxmLl9pbl9oYW5kc2hha2UgPSBGYWxzZQorICAgICAgICBzZWxmLl9pbl9zaHV0ZG93biA9IEZhbHNlCisgICAgICAgICMgdHJhbnNwb3J0LCBleDogU2VsZWN0b3JTb2NrZXRUcmFuc3BvcnQKKyAgICAgICAgc2VsZi5fdHJhbnNwb3J0ID0gTm9uZQorCisgICAgZGVmIF93YWtldXBfd2FpdGVyKHNlbGYsIGV4Yz1Ob25lKToKKyAgICAgICAgaWYgc2VsZi5fd2FpdGVyIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgbm90IHNlbGYuX3dhaXRlci5jYW5jZWxsZWQoKToKKyAgICAgICAgICAgIGlmIGV4YyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBzZWxmLl93YWl0ZXIuc2V0X2V4Y2VwdGlvbihleGMpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuX3dhaXRlci5zZXRfcmVzdWx0KE5vbmUpCisgICAgICAgIHNlbGYuX3dhaXRlciA9IE5vbmUKKworICAgIGRlZiBjb25uZWN0aW9uX21hZGUoc2VsZiwgdHJhbnNwb3J0KToKKyAgICAgICAgIiIiQ2FsbGVkIHdoZW4gdGhlIGxvdy1sZXZlbCBjb25uZWN0aW9uIGlzIG1hZGUuCisKKyAgICAgICAgU3RhcnQgdGhlIFNTTCBoYW5kc2hha2UuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl90cmFuc3BvcnQgPSB0cmFuc3BvcnQKKyAgICAgICAgc2VsZi5fc3NscGlwZSA9IF9TU0xQaXBlKHNlbGYuX3NzbGNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9zZXJ2ZXJfc2lkZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3NlcnZlcl9ob3N0bmFtZSkKKyAgICAgICAgc2VsZi5fc3RhcnRfaGFuZHNoYWtlKCkKKworICAgIGRlZiBjb25uZWN0aW9uX2xvc3Qoc2VsZiwgZXhjKToKKyAgICAgICAgIiIiQ2FsbGVkIHdoZW4gdGhlIGxvdy1sZXZlbCBjb25uZWN0aW9uIGlzIGxvc3Qgb3IgY2xvc2VkLgorCisgICAgICAgIFRoZSBhcmd1bWVudCBpcyBhbiBleGNlcHRpb24gb2JqZWN0IG9yIE5vbmUgKHRoZSBsYXR0ZXIKKyAgICAgICAgbWVhbmluZyBhIHJlZ3VsYXIgRU9GIGlzIHJlY2VpdmVkIG9yIHRoZSBjb25uZWN0aW9uIHdhcworICAgICAgICBhYm9ydGVkIG9yIGNsb3NlZCkuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl9zZXNzaW9uX2VzdGFibGlzaGVkOgorICAgICAgICAgICAgc2VsZi5fc2Vzc2lvbl9lc3RhYmxpc2hlZCA9IEZhbHNlCisgICAgICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbihzZWxmLl9hcHBfcHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0LCBleGMpCisgICAgICAgIHNlbGYuX3RyYW5zcG9ydCA9IE5vbmUKKyAgICAgICAgc2VsZi5fYXBwX3RyYW5zcG9ydCA9IE5vbmUKKworICAgIGRlZiBwYXVzZV93cml0aW5nKHNlbGYpOgorICAgICAgICAiIiJDYWxsZWQgd2hlbiB0aGUgbG93LWxldmVsIHRyYW5zcG9ydCdzIGJ1ZmZlciBnb2VzIG92ZXIKKyAgICAgICAgdGhlIGhpZ2gtd2F0ZXIgbWFyay4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX2FwcF9wcm90b2NvbC5wYXVzZV93cml0aW5nKCkKKworICAgIGRlZiByZXN1bWVfd3JpdGluZyhzZWxmKToKKyAgICAgICAgIiIiQ2FsbGVkIHdoZW4gdGhlIGxvdy1sZXZlbCB0cmFuc3BvcnQncyBidWZmZXIgZHJhaW5zIGJlbG93CisgICAgICAgIHRoZSBsb3ctd2F0ZXIgbWFyay4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX2FwcF9wcm90b2NvbC5yZXN1bWVfd3JpdGluZygpCisKKyAgICBkZWYgZGF0YV9yZWNlaXZlZChzZWxmLCBkYXRhKToKKyAgICAgICAgIiIiQ2FsbGVkIHdoZW4gc29tZSBTU0wgZGF0YSBpcyByZWNlaXZlZC4KKworICAgICAgICBUaGUgYXJndW1lbnQgaXMgYSBieXRlcyBvYmplY3QuCisgICAgICAgICIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzc2xkYXRhLCBhcHBkYXRhID0gc2VsZi5fc3NscGlwZS5mZWVkX3NzbGRhdGEoZGF0YSkKKyAgICAgICAgZXhjZXB0IHNzbC5TU0xFcnJvciBhcyBlOgorICAgICAgICAgICAgaWYgc2VsZi5fbG9vcC5nZXRfZGVidWcoKToKKyAgICAgICAgICAgICAgICBsb2dnZXIud2FybmluZygnJXI6IFNTTCBlcnJvciAlcyAocmVhc29uICVzKScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZiwgZS5lcnJubywgZS5yZWFzb24pCisgICAgICAgICAgICBzZWxmLl9hYm9ydCgpCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBmb3IgY2h1bmsgaW4gc3NsZGF0YToKKyAgICAgICAgICAgIHNlbGYuX3RyYW5zcG9ydC53cml0ZShjaHVuaykKKworICAgICAgICBmb3IgY2h1bmsgaW4gYXBwZGF0YToKKyAgICAgICAgICAgIGlmIGNodW5rOgorICAgICAgICAgICAgICAgIHNlbGYuX2FwcF9wcm90b2NvbC5kYXRhX3JlY2VpdmVkKGNodW5rKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLl9zdGFydF9zaHV0ZG93bigpCisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgIGRlZiBlb2ZfcmVjZWl2ZWQoc2VsZik6CisgICAgICAgICIiIkNhbGxlZCB3aGVuIHRoZSBvdGhlciBlbmQgb2YgdGhlIGxvdy1sZXZlbCBzdHJlYW0KKyAgICAgICAgaXMgaGFsZi1jbG9zZWQuCisKKyAgICAgICAgSWYgdGhpcyByZXR1cm5zIGEgZmFsc2UgdmFsdWUgKGluY2x1ZGluZyBOb25lKSwgdGhlIHRyYW5zcG9ydAorICAgICAgICB3aWxsIGNsb3NlIGl0c2VsZi4gIElmIGl0IHJldHVybnMgYSB0cnVlIHZhbHVlLCBjbG9zaW5nIHRoZQorICAgICAgICB0cmFuc3BvcnQgaXMgdXAgdG8gdGhlIHByb3RvY29sLgorICAgICAgICAiIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgc2VsZi5fbG9vcC5nZXRfZGVidWcoKToKKyAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoIiVyIHJlY2VpdmVkIEVPRiIsIHNlbGYpCisKKyAgICAgICAgICAgIHNlbGYuX3dha2V1cF93YWl0ZXIoQ29ubmVjdGlvblJlc2V0RXJyb3IpCisKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9pbl9oYW5kc2hha2U6CisgICAgICAgICAgICAgICAga2VlcF9vcGVuID0gc2VsZi5fYXBwX3Byb3RvY29sLmVvZl9yZWNlaXZlZCgpCisgICAgICAgICAgICAgICAgaWYga2VlcF9vcGVuOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIud2FybmluZygncmV0dXJuaW5nIHRydWUgZnJvbSBlb2ZfcmVjZWl2ZWQoKSAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdoYXMgbm8gZWZmZWN0IHdoZW4gdXNpbmcgc3NsJykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYuX3RyYW5zcG9ydC5jbG9zZSgpCisKKyAgICBkZWYgX2dldF9leHRyYV9pbmZvKHNlbGYsIG5hbWUsIGRlZmF1bHQ9Tm9uZSk6CisgICAgICAgIGlmIG5hbWUgaW4gc2VsZi5fZXh0cmE6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fZXh0cmFbbmFtZV0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl90cmFuc3BvcnQuZ2V0X2V4dHJhX2luZm8obmFtZSwgZGVmYXVsdCkKKworICAgIGRlZiBfc3RhcnRfc2h1dGRvd24oc2VsZik6CisgICAgICAgIGlmIHNlbGYuX2luX3NodXRkb3duOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYuX2luX3NodXRkb3duID0gVHJ1ZQorICAgICAgICBzZWxmLl93cml0ZV9hcHBkYXRhKGInJykKKworICAgIGRlZiBfd3JpdGVfYXBwZGF0YShzZWxmLCBkYXRhKToKKyAgICAgICAgc2VsZi5fd3JpdGVfYmFja2xvZy5hcHBlbmQoKGRhdGEsIDApKQorICAgICAgICBzZWxmLl93cml0ZV9idWZmZXJfc2l6ZSArPSBsZW4oZGF0YSkKKyAgICAgICAgc2VsZi5fcHJvY2Vzc193cml0ZV9iYWNrbG9nKCkKKworICAgIGRlZiBfc3RhcnRfaGFuZHNoYWtlKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9sb29wLmdldF9kZWJ1ZygpOgorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCIlciBzdGFydHMgU1NMIGhhbmRzaGFrZSIsIHNlbGYpCisgICAgICAgICAgICBzZWxmLl9oYW5kc2hha2Vfc3RhcnRfdGltZSA9IHNlbGYuX2xvb3AudGltZSgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9oYW5kc2hha2Vfc3RhcnRfdGltZSA9IE5vbmUKKyAgICAgICAgc2VsZi5faW5faGFuZHNoYWtlID0gVHJ1ZQorICAgICAgICAjIChiJycsIDEpIGlzIGEgc3BlY2lhbCB2YWx1ZSBpbiBfcHJvY2Vzc193cml0ZV9iYWNrbG9nKCkgdG8gZG8KKyAgICAgICAgIyB0aGUgU1NMIGhhbmRzaGFrZQorICAgICAgICBzZWxmLl93cml0ZV9iYWNrbG9nLmFwcGVuZCgoYicnLCAxKSkKKyAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24oc2VsZi5fcHJvY2Vzc193cml0ZV9iYWNrbG9nKQorCisgICAgZGVmIF9vbl9oYW5kc2hha2VfY29tcGxldGUoc2VsZiwgaGFuZHNoYWtlX2V4Yyk6CisgICAgICAgIHNlbGYuX2luX2hhbmRzaGFrZSA9IEZhbHNlCisKKyAgICAgICAgc3Nsb2JqID0gc2VsZi5fc3NscGlwZS5zc2xfb2JqZWN0CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIGhhbmRzaGFrZV9leGMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgcmFpc2UgaGFuZHNoYWtlX2V4YworCisgICAgICAgICAgICBwZWVyY2VydCA9IHNzbG9iai5nZXRwZWVyY2VydCgpCisgICAgICAgICAgICBpZiBub3QgaGFzYXR0cihzZWxmLl9zc2xjb250ZXh0LCAnY2hlY2tfaG9zdG5hbWUnKToKKyAgICAgICAgICAgICAgICAjIFZlcmlmeSBob3N0bmFtZSBpZiByZXF1ZXN0ZWQsIFB5dGhvbiAzLjQrIHVzZXMgY2hlY2tfaG9zdG5hbWUKKyAgICAgICAgICAgICAgICAjIGFuZCBjaGVja3MgdGhlIGhvc3RuYW1lIGluIGRvX2hhbmRzaGFrZSgpCisgICAgICAgICAgICAgICAgaWYgKHNlbGYuX3NlcnZlcl9ob3N0bmFtZQorICAgICAgICAgICAgICAgIGFuZCBzZWxmLl9zc2xjb250ZXh0LnZlcmlmeV9tb2RlICE9IHNzbC5DRVJUX05PTkUpOgorICAgICAgICAgICAgICAgICAgICBzc2wubWF0Y2hfaG9zdG5hbWUocGVlcmNlcnQsIHNlbGYuX3NlcnZlcl9ob3N0bmFtZSkKKyAgICAgICAgZXhjZXB0IEJhc2VFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgaWYgc2VsZi5fbG9vcC5nZXRfZGVidWcoKToKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV4Yywgc3NsLkNlcnRpZmljYXRlRXJyb3IpOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIud2FybmluZygiJXI6IFNTTCBoYW5kc2hha2UgZmFpbGVkICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9uIHZlcmlmeWluZyB0aGUgY2VydGlmaWNhdGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLCBleGNfaW5mbz1UcnVlKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nKCIlcjogU1NMIGhhbmRzaGFrZSBmYWlsZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLCBleGNfaW5mbz1UcnVlKQorICAgICAgICAgICAgc2VsZi5fdHJhbnNwb3J0LmNsb3NlKCkKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXhjLCBFeGNlcHRpb24pOgorICAgICAgICAgICAgICAgIHNlbGYuX3dha2V1cF93YWl0ZXIoZXhjKQorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZQorCisgICAgICAgIGlmIHNlbGYuX2xvb3AuZ2V0X2RlYnVnKCk6CisgICAgICAgICAgICBkdCA9IHNlbGYuX2xvb3AudGltZSgpIC0gc2VsZi5faGFuZHNoYWtlX3N0YXJ0X3RpbWUKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygiJXI6IFNTTCBoYW5kc2hha2UgdG9vayAlLjFmIG1zIiwgc2VsZiwgZHQgKiAxZTMpCisKKyAgICAgICAgIyBBZGQgZXh0cmEgaW5mbyB0aGF0IGJlY29tZXMgYXZhaWxhYmxlIGFmdGVyIGhhbmRzaGFrZS4KKyAgICAgICAgc2VsZi5fZXh0cmEudXBkYXRlKHBlZXJjZXJ0PXBlZXJjZXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY2lwaGVyPXNzbG9iai5jaXBoZXIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXByZXNzaW9uPXNzbG9iai5jb21wcmVzc2lvbigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsX29iamVjdD1zc2xvYmosCisgICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgIHNlbGYuX2FwcF9wcm90b2NvbC5jb25uZWN0aW9uX21hZGUoc2VsZi5fYXBwX3RyYW5zcG9ydCkKKyAgICAgICAgc2VsZi5fd2FrZXVwX3dhaXRlcigpCisgICAgICAgIHNlbGYuX3Nlc3Npb25fZXN0YWJsaXNoZWQgPSBUcnVlCisgICAgICAgICMgSW4gY2FzZSB0cmFuc3BvcnQud3JpdGUoKSB3YXMgYWxyZWFkeSBjYWxsZWQuIERvbid0IGNhbGwKKyAgICAgICAgIyBpbW1lZGlhdGx5IF9wcm9jZXNzX3dyaXRlX2JhY2tsb2coKSwgYnV0IHNjaGVkdWxlIGl0OgorICAgICAgICAjIF9vbl9oYW5kc2hha2VfY29tcGxldGUoKSBjYW4gYmUgY2FsbGVkIGluZGlyZWN0bHkgZnJvbQorICAgICAgICAjIF9wcm9jZXNzX3dyaXRlX2JhY2tsb2coKSwgYW5kIF9wcm9jZXNzX3dyaXRlX2JhY2tsb2coKSBpcyBub3QKKyAgICAgICAgIyByZWVudHJhbnQuCisgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKHNlbGYuX3Byb2Nlc3Nfd3JpdGVfYmFja2xvZykKKworICAgIGRlZiBfcHJvY2Vzc193cml0ZV9iYWNrbG9nKHNlbGYpOgorICAgICAgICAjIFRyeSB0byBtYWtlIHByb2dyZXNzIG9uIHRoZSB3cml0ZSBiYWNrbG9nLgorICAgICAgICBpZiBzZWxmLl90cmFuc3BvcnQgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihzZWxmLl93cml0ZV9iYWNrbG9nKSk6CisgICAgICAgICAgICAgICAgZGF0YSwgb2Zmc2V0ID0gc2VsZi5fd3JpdGVfYmFja2xvZ1swXQorICAgICAgICAgICAgICAgIGlmIGRhdGE6CisgICAgICAgICAgICAgICAgICAgIHNzbGRhdGEsIG9mZnNldCA9IHNlbGYuX3NzbHBpcGUuZmVlZF9hcHBkYXRhKGRhdGEsIG9mZnNldCkKKyAgICAgICAgICAgICAgICBlbGlmIG9mZnNldDoKKyAgICAgICAgICAgICAgICAgICAgc3NsZGF0YSA9IHNlbGYuX3NzbHBpcGUuZG9faGFuZHNoYWtlKAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fb25faGFuZHNoYWtlX2NvbXBsZXRlKQorICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSAxCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc3NsZGF0YSA9IHNlbGYuX3NzbHBpcGUuc2h1dGRvd24oc2VsZi5fZmluYWxpemUpCisgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IDEKKworICAgICAgICAgICAgICAgIGZvciBjaHVuayBpbiBzc2xkYXRhOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl90cmFuc3BvcnQud3JpdGUoY2h1bmspCisKKyAgICAgICAgICAgICAgICBpZiBvZmZzZXQgPCBsZW4oZGF0YSk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3dyaXRlX2JhY2tsb2dbMF0gPSAoZGF0YSwgb2Zmc2V0KQorICAgICAgICAgICAgICAgICAgICAjIEEgc2hvcnQgd3JpdGUgbWVhbnMgdGhhdCBhIHdyaXRlIGlzIGJsb2NrZWQgb24gYSByZWFkCisgICAgICAgICAgICAgICAgICAgICMgV2UgbmVlZCB0byBlbmFibGUgcmVhZGluZyBpZiBpdCBpcyBwYXVzZWQhCisgICAgICAgICAgICAgICAgICAgIGFzc2VydCBzZWxmLl9zc2xwaXBlLm5lZWRfc3NsZGF0YQorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLl90cmFuc3BvcnQuX3BhdXNlZDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3RyYW5zcG9ydC5yZXN1bWVfcmVhZGluZygpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgICAgICAjIEFuIGVudGlyZSBjaHVuayBmcm9tIHRoZSBiYWNrbG9nIHdhcyBwcm9jZXNzZWQuIFdlIGNhbgorICAgICAgICAgICAgICAgICMgZGVsZXRlIGl0IGFuZCByZWR1Y2UgdGhlIG91dHN0YW5kaW5nIGJ1ZmZlciBzaXplLgorICAgICAgICAgICAgICAgIGRlbCBzZWxmLl93cml0ZV9iYWNrbG9nWzBdCisgICAgICAgICAgICAgICAgc2VsZi5fd3JpdGVfYnVmZmVyX3NpemUgLT0gbGVuKGRhdGEpCisgICAgICAgIGV4Y2VwdCBCYXNlRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgIGlmIHNlbGYuX2luX2hhbmRzaGFrZToKKyAgICAgICAgICAgICAgICAjIEJhc2VFeGNlcHRpb25zIHdpbGwgYmUgcmUtcmFpc2VkIGluIF9vbl9oYW5kc2hha2VfY29tcGxldGUuCisgICAgICAgICAgICAgICAgc2VsZi5fb25faGFuZHNoYWtlX2NvbXBsZXRlKGV4YykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5fZmF0YWxfZXJyb3IoZXhjLCAnRmF0YWwgZXJyb3Igb24gU1NMIHRyYW5zcG9ydCcpCisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShleGMsIEV4Y2VwdGlvbik6CisgICAgICAgICAgICAgICAgIyBCYXNlRXhjZXB0aW9uCisgICAgICAgICAgICAgICAgcmFpc2UKKworICAgIGRlZiBfZmF0YWxfZXJyb3Ioc2VsZiwgZXhjLCBtZXNzYWdlPSdGYXRhbCBlcnJvciBvbiB0cmFuc3BvcnQnKToKKyAgICAgICAgIyBTaG91bGQgYmUgY2FsbGVkIGZyb20gZXhjZXB0aW9uIGhhbmRsZXIgb25seS4KKyAgICAgICAgaWYgaXNpbnN0YW5jZShleGMsIChCcm9rZW5QaXBlRXJyb3IsIENvbm5lY3Rpb25SZXNldEVycm9yKSk6CisgICAgICAgICAgICBpZiBzZWxmLl9sb29wLmdldF9kZWJ1ZygpOgorICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygiJXI6ICVzIiwgc2VsZiwgbWVzc2FnZSwgZXhjX2luZm89VHJ1ZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9leGNlcHRpb25faGFuZGxlcih7CisgICAgICAgICAgICAgICAgJ21lc3NhZ2UnOiBtZXNzYWdlLAorICAgICAgICAgICAgICAgICdleGNlcHRpb24nOiBleGMsCisgICAgICAgICAgICAgICAgJ3RyYW5zcG9ydCc6IHNlbGYuX3RyYW5zcG9ydCwKKyAgICAgICAgICAgICAgICAncHJvdG9jb2wnOiBzZWxmLAorICAgICAgICAgICAgfSkKKyAgICAgICAgaWYgc2VsZi5fdHJhbnNwb3J0OgorICAgICAgICAgICAgc2VsZi5fdHJhbnNwb3J0Ll9mb3JjZV9jbG9zZShleGMpCisKKyAgICBkZWYgX2ZpbmFsaXplKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl90cmFuc3BvcnQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl90cmFuc3BvcnQuY2xvc2UoKQorCisgICAgZGVmIF9hYm9ydChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fdHJhbnNwb3J0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuX3RyYW5zcG9ydC5hYm9ydCgpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHNlbGYuX2ZpbmFsaXplKCkKZGlmZiAtLWdpdCBhL0xpYi9hc3luY2lvL3N0cmVhbXMucHkgYi9MaWIvYXN5bmNpby9zdHJlYW1zLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwOTdlMzgKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvYXN5bmNpby9zdHJlYW1zLnB5CkBAIC0wLDAgKzEsNTMxIEBACisiIiJTdHJlYW0tcmVsYXRlZCB0aGluZ3MuIiIiCisKK19fYWxsX18gPSBbJ1N0cmVhbVJlYWRlcicsICdTdHJlYW1Xcml0ZXInLCAnU3RyZWFtUmVhZGVyUHJvdG9jb2wnLAorICAgICAgICAgICAnb3Blbl9jb25uZWN0aW9uJywgJ3N0YXJ0X3NlcnZlcicsCisgICAgICAgICAgICdJbmNvbXBsZXRlUmVhZEVycm9yJywKKyAgICAgICAgICAgXQorCitpbXBvcnQgc29ja2V0CisKK2lmIGhhc2F0dHIoc29ja2V0LCAnQUZfVU5JWCcpOgorICAgIF9fYWxsX18uZXh0ZW5kKFsnb3Blbl91bml4X2Nvbm5lY3Rpb24nLCAnc3RhcnRfdW5peF9zZXJ2ZXInXSkKKworZnJvbSAuIGltcG9ydCBjb3JvdXRpbmVzCitmcm9tIC4gaW1wb3J0IGNvbXBhdAorZnJvbSAuIGltcG9ydCBldmVudHMKK2Zyb20gLiBpbXBvcnQgZnV0dXJlcworZnJvbSAuIGltcG9ydCBwcm90b2NvbHMKK2Zyb20gLmNvcm91dGluZXMgaW1wb3J0IGNvcm91dGluZQorZnJvbSAubG9nIGltcG9ydCBsb2dnZXIKKworCitfREVGQVVMVF9MSU1JVCA9IDIqKjE2CisKKworY2xhc3MgSW5jb21wbGV0ZVJlYWRFcnJvcihFT0ZFcnJvcik6CisgICAgIiIiCisgICAgSW5jb21wbGV0ZSByZWFkIGVycm9yLiBBdHRyaWJ1dGVzOgorCisgICAgLSBwYXJ0aWFsOiByZWFkIGJ5dGVzIHN0cmluZyBiZWZvcmUgdGhlIGVuZCBvZiBzdHJlYW0gd2FzIHJlYWNoZWQKKyAgICAtIGV4cGVjdGVkOiB0b3RhbCBudW1iZXIgb2YgZXhwZWN0ZWQgYnl0ZXMKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcGFydGlhbCwgZXhwZWN0ZWQpOgorICAgICAgICBFT0ZFcnJvci5fX2luaXRfXyhzZWxmLCAiJXMgYnl0ZXMgcmVhZCBvbiBhIHRvdGFsIG9mICVzIGV4cGVjdGVkIGJ5dGVzIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChsZW4ocGFydGlhbCksIGV4cGVjdGVkKSkKKyAgICAgICAgc2VsZi5wYXJ0aWFsID0gcGFydGlhbAorICAgICAgICBzZWxmLmV4cGVjdGVkID0gZXhwZWN0ZWQKKworCitAY29yb3V0aW5lCitkZWYgb3Blbl9jb25uZWN0aW9uKGhvc3Q9Tm9uZSwgcG9ydD1Ob25lLCAqLAorICAgICAgICAgICAgICAgICAgICBsb29wPU5vbmUsIGxpbWl0PV9ERUZBVUxUX0xJTUlULCAqKmt3ZHMpOgorICAgICIiIkEgd3JhcHBlciBmb3IgY3JlYXRlX2Nvbm5lY3Rpb24oKSByZXR1cm5pbmcgYSAocmVhZGVyLCB3cml0ZXIpIHBhaXIuCisKKyAgICBUaGUgcmVhZGVyIHJldHVybmVkIGlzIGEgU3RyZWFtUmVhZGVyIGluc3RhbmNlOyB0aGUgd3JpdGVyIGlzIGEKKyAgICBTdHJlYW1Xcml0ZXIgaW5zdGFuY2UuCisKKyAgICBUaGUgYXJndW1lbnRzIGFyZSBhbGwgdGhlIHVzdWFsIGFyZ3VtZW50cyB0byBjcmVhdGVfY29ubmVjdGlvbigpCisgICAgZXhjZXB0IHByb3RvY29sX2ZhY3Rvcnk7IG1vc3QgY29tbW9uIGFyZSBwb3NpdGlvbmFsIGhvc3QgYW5kIHBvcnQsCisgICAgd2l0aCB2YXJpb3VzIG9wdGlvbmFsIGtleXdvcmQgYXJndW1lbnRzIGZvbGxvd2luZy4KKworICAgIEFkZGl0aW9uYWwgb3B0aW9uYWwga2V5d29yZCBhcmd1bWVudHMgYXJlIGxvb3AgKHRvIHNldCB0aGUgZXZlbnQgbG9vcAorICAgIGluc3RhbmNlIHRvIHVzZSkgYW5kIGxpbWl0ICh0byBzZXQgdGhlIGJ1ZmZlciBsaW1pdCBwYXNzZWQgdG8gdGhlCisgICAgU3RyZWFtUmVhZGVyKS4KKworICAgIChJZiB5b3Ugd2FudCB0byBjdXN0b21pemUgdGhlIFN0cmVhbVJlYWRlciBhbmQvb3IKKyAgICBTdHJlYW1SZWFkZXJQcm90b2NvbCBjbGFzc2VzLCBqdXN0IGNvcHkgdGhlIGNvZGUgLS0gdGhlcmUncworICAgIHJlYWxseSBub3RoaW5nIHNwZWNpYWwgaGVyZSBleGNlcHQgc29tZSBjb252ZW5pZW5jZS4pCisgICAgIiIiCisgICAgaWYgbG9vcCBpcyBOb25lOgorICAgICAgICBsb29wID0gZXZlbnRzLmdldF9ldmVudF9sb29wKCkKKyAgICByZWFkZXIgPSBTdHJlYW1SZWFkZXIobGltaXQ9bGltaXQsIGxvb3A9bG9vcCkKKyAgICBwcm90b2NvbCA9IFN0cmVhbVJlYWRlclByb3RvY29sKHJlYWRlciwgbG9vcD1sb29wKQorICAgIHRyYW5zcG9ydCwgXyA9IHlpZWxkIGZyb20gbG9vcC5jcmVhdGVfY29ubmVjdGlvbigKKyAgICAgICAgbGFtYmRhOiBwcm90b2NvbCwgaG9zdCwgcG9ydCwgKiprd2RzKQorICAgIHdyaXRlciA9IFN0cmVhbVdyaXRlcih0cmFuc3BvcnQsIHByb3RvY29sLCByZWFkZXIsIGxvb3ApCisgICAgcmV0dXJuIHJlYWRlciwgd3JpdGVyCisKKworQGNvcm91dGluZQorZGVmIHN0YXJ0X3NlcnZlcihjbGllbnRfY29ubmVjdGVkX2NiLCBob3N0PU5vbmUsIHBvcnQ9Tm9uZSwgKiwKKyAgICAgICAgICAgICAgICAgbG9vcD1Ob25lLCBsaW1pdD1fREVGQVVMVF9MSU1JVCwgKiprd2RzKToKKyAgICAiIiJTdGFydCBhIHNvY2tldCBzZXJ2ZXIsIGNhbGwgYmFjayBmb3IgZWFjaCBjbGllbnQgY29ubmVjdGVkLgorCisgICAgVGhlIGZpcnN0IHBhcmFtZXRlciwgYGNsaWVudF9jb25uZWN0ZWRfY2JgLCB0YWtlcyB0d28gcGFyYW1ldGVyczoKKyAgICBjbGllbnRfcmVhZGVyLCBjbGllbnRfd3JpdGVyLiAgY2xpZW50X3JlYWRlciBpcyBhIFN0cmVhbVJlYWRlcgorICAgIG9iamVjdCwgd2hpbGUgY2xpZW50X3dyaXRlciBpcyBhIFN0cmVhbVdyaXRlciBvYmplY3QuICBUaGlzCisgICAgcGFyYW1ldGVyIGNhbiBlaXRoZXIgYmUgYSBwbGFpbiBjYWxsYmFjayBmdW5jdGlvbiBvciBhIGNvcm91dGluZTsKKyAgICBpZiBpdCBpcyBhIGNvcm91dGluZSwgaXQgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGNvbnZlcnRlZCBpbnRvIGEKKyAgICBUYXNrLgorCisgICAgVGhlIHJlc3Qgb2YgdGhlIGFyZ3VtZW50cyBhcmUgYWxsIHRoZSB1c3VhbCBhcmd1bWVudHMgdG8KKyAgICBsb29wLmNyZWF0ZV9zZXJ2ZXIoKSBleGNlcHQgcHJvdG9jb2xfZmFjdG9yeTsgbW9zdCBjb21tb24gYXJlCisgICAgcG9zaXRpb25hbCBob3N0IGFuZCBwb3J0LCB3aXRoIHZhcmlvdXMgb3B0aW9uYWwga2V5d29yZCBhcmd1bWVudHMKKyAgICBmb2xsb3dpbmcuICBUaGUgcmV0dXJuIHZhbHVlIGlzIHRoZSBzYW1lIGFzIGxvb3AuY3JlYXRlX3NlcnZlcigpLgorCisgICAgQWRkaXRpb25hbCBvcHRpb25hbCBrZXl3b3JkIGFyZ3VtZW50cyBhcmUgbG9vcCAodG8gc2V0IHRoZSBldmVudCBsb29wCisgICAgaW5zdGFuY2UgdG8gdXNlKSBhbmQgbGltaXQgKHRvIHNldCB0aGUgYnVmZmVyIGxpbWl0IHBhc3NlZCB0byB0aGUKKyAgICBTdHJlYW1SZWFkZXIpLgorCisgICAgVGhlIHJldHVybiB2YWx1ZSBpcyB0aGUgc2FtZSBhcyBsb29wLmNyZWF0ZV9zZXJ2ZXIoKSwgaS5lLiBhCisgICAgU2VydmVyIG9iamVjdCB3aGljaCBjYW4gYmUgdXNlZCB0byBzdG9wIHRoZSBzZXJ2aWNlLgorICAgICIiIgorICAgIGlmIGxvb3AgaXMgTm9uZToKKyAgICAgICAgbG9vcCA9IGV2ZW50cy5nZXRfZXZlbnRfbG9vcCgpCisKKyAgICBkZWYgZmFjdG9yeSgpOgorICAgICAgICByZWFkZXIgPSBTdHJlYW1SZWFkZXIobGltaXQ9bGltaXQsIGxvb3A9bG9vcCkKKyAgICAgICAgcHJvdG9jb2wgPSBTdHJlYW1SZWFkZXJQcm90b2NvbChyZWFkZXIsIGNsaWVudF9jb25uZWN0ZWRfY2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9vcD1sb29wKQorICAgICAgICByZXR1cm4gcHJvdG9jb2wKKworICAgIHJldHVybiAoeWllbGQgZnJvbSBsb29wLmNyZWF0ZV9zZXJ2ZXIoZmFjdG9yeSwgaG9zdCwgcG9ydCwgKiprd2RzKSkKKworCitpZiBoYXNhdHRyKHNvY2tldCwgJ0FGX1VOSVgnKToKKyAgICAjIFVOSVggRG9tYWluIFNvY2tldHMgYXJlIHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtCisKKyAgICBAY29yb3V0aW5lCisgICAgZGVmIG9wZW5fdW5peF9jb25uZWN0aW9uKHBhdGg9Tm9uZSwgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9vcD1Ob25lLCBsaW1pdD1fREVGQVVMVF9MSU1JVCwgKiprd2RzKToKKyAgICAgICAgIiIiU2ltaWxhciB0byBgb3Blbl9jb25uZWN0aW9uYCBidXQgd29ya3Mgd2l0aCBVTklYIERvbWFpbiBTb2NrZXRzLiIiIgorICAgICAgICBpZiBsb29wIGlzIE5vbmU6CisgICAgICAgICAgICBsb29wID0gZXZlbnRzLmdldF9ldmVudF9sb29wKCkKKyAgICAgICAgcmVhZGVyID0gU3RyZWFtUmVhZGVyKGxpbWl0PWxpbWl0LCBsb29wPWxvb3ApCisgICAgICAgIHByb3RvY29sID0gU3RyZWFtUmVhZGVyUHJvdG9jb2wocmVhZGVyLCBsb29wPWxvb3ApCisgICAgICAgIHRyYW5zcG9ydCwgXyA9IHlpZWxkIGZyb20gbG9vcC5jcmVhdGVfdW5peF9jb25uZWN0aW9uKAorICAgICAgICAgICAgbGFtYmRhOiBwcm90b2NvbCwgcGF0aCwgKiprd2RzKQorICAgICAgICB3cml0ZXIgPSBTdHJlYW1Xcml0ZXIodHJhbnNwb3J0LCBwcm90b2NvbCwgcmVhZGVyLCBsb29wKQorICAgICAgICByZXR1cm4gcmVhZGVyLCB3cml0ZXIKKworCisgICAgQGNvcm91dGluZQorICAgIGRlZiBzdGFydF91bml4X3NlcnZlcihjbGllbnRfY29ubmVjdGVkX2NiLCBwYXRoPU5vbmUsICosCisgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3A9Tm9uZSwgbGltaXQ9X0RFRkFVTFRfTElNSVQsICoqa3dkcyk6CisgICAgICAgICIiIlNpbWlsYXIgdG8gYHN0YXJ0X3NlcnZlcmAgYnV0IHdvcmtzIHdpdGggVU5JWCBEb21haW4gU29ja2V0cy4iIiIKKyAgICAgICAgaWYgbG9vcCBpcyBOb25lOgorICAgICAgICAgICAgbG9vcCA9IGV2ZW50cy5nZXRfZXZlbnRfbG9vcCgpCisKKyAgICAgICAgZGVmIGZhY3RvcnkoKToKKyAgICAgICAgICAgIHJlYWRlciA9IFN0cmVhbVJlYWRlcihsaW1pdD1saW1pdCwgbG9vcD1sb29wKQorICAgICAgICAgICAgcHJvdG9jb2wgPSBTdHJlYW1SZWFkZXJQcm90b2NvbChyZWFkZXIsIGNsaWVudF9jb25uZWN0ZWRfY2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3A9bG9vcCkKKyAgICAgICAgICAgIHJldHVybiBwcm90b2NvbAorCisgICAgICAgIHJldHVybiAoeWllbGQgZnJvbSBsb29wLmNyZWF0ZV91bml4X3NlcnZlcihmYWN0b3J5LCBwYXRoLCAqKmt3ZHMpKQorCisKK2NsYXNzIEZsb3dDb250cm9sTWl4aW4ocHJvdG9jb2xzLlByb3RvY29sKToKKyAgICAiIiJSZXVzYWJsZSBmbG93IGNvbnRyb2wgbG9naWMgZm9yIFN0cmVhbVdyaXRlci5kcmFpbigpLgorCisgICAgVGhpcyBpbXBsZW1lbnRzIHRoZSBwcm90b2NvbCBtZXRob2RzIHBhdXNlX3dyaXRpbmcoKSwKKyAgICByZXN1bWVfcmVhZGluZygpIGFuZCBjb25uZWN0aW9uX2xvc3QoKS4gIElmIHRoZSBzdWJjbGFzcyBvdmVycmlkZXMKKyAgICB0aGVzZSBpdCBtdXN0IGNhbGwgdGhlIHN1cGVyIG1ldGhvZHMuCisKKyAgICBTdHJlYW1Xcml0ZXIuZHJhaW4oKSBtdXN0IHdhaXQgZm9yIF9kcmFpbl9oZWxwZXIoKSBjb3JvdXRpbmUuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbG9vcD1Ob25lKToKKyAgICAgICAgaWYgbG9vcCBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5fbG9vcCA9IGV2ZW50cy5nZXRfZXZlbnRfbG9vcCgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9sb29wID0gbG9vcAorICAgICAgICBzZWxmLl9wYXVzZWQgPSBGYWxzZQorICAgICAgICBzZWxmLl9kcmFpbl93YWl0ZXIgPSBOb25lCisgICAgICAgIHNlbGYuX2Nvbm5lY3Rpb25fbG9zdCA9IEZhbHNlCisKKyAgICBkZWYgcGF1c2Vfd3JpdGluZyhzZWxmKToKKyAgICAgICAgYXNzZXJ0IG5vdCBzZWxmLl9wYXVzZWQKKyAgICAgICAgc2VsZi5fcGF1c2VkID0gVHJ1ZQorICAgICAgICBpZiBzZWxmLl9sb29wLmdldF9kZWJ1ZygpOgorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCIlciBwYXVzZXMgd3JpdGluZyIsIHNlbGYpCisKKyAgICBkZWYgcmVzdW1lX3dyaXRpbmcoc2VsZik6CisgICAgICAgIGFzc2VydCBzZWxmLl9wYXVzZWQKKyAgICAgICAgc2VsZi5fcGF1c2VkID0gRmFsc2UKKyAgICAgICAgaWYgc2VsZi5fbG9vcC5nZXRfZGVidWcoKToKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygiJXIgcmVzdW1lcyB3cml0aW5nIiwgc2VsZikKKworICAgICAgICB3YWl0ZXIgPSBzZWxmLl9kcmFpbl93YWl0ZXIKKyAgICAgICAgaWYgd2FpdGVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fZHJhaW5fd2FpdGVyID0gTm9uZQorICAgICAgICAgICAgaWYgbm90IHdhaXRlci5kb25lKCk6CisgICAgICAgICAgICAgICAgd2FpdGVyLnNldF9yZXN1bHQoTm9uZSkKKworICAgIGRlZiBjb25uZWN0aW9uX2xvc3Qoc2VsZiwgZXhjKToKKyAgICAgICAgc2VsZi5fY29ubmVjdGlvbl9sb3N0ID0gVHJ1ZQorICAgICAgICAjIFdha2UgdXAgdGhlIHdyaXRlciBpZiBjdXJyZW50bHkgcGF1c2VkLgorICAgICAgICBpZiBub3Qgc2VsZi5fcGF1c2VkOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHdhaXRlciA9IHNlbGYuX2RyYWluX3dhaXRlcgorICAgICAgICBpZiB3YWl0ZXIgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLl9kcmFpbl93YWl0ZXIgPSBOb25lCisgICAgICAgIGlmIHdhaXRlci5kb25lKCk6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgZXhjIGlzIE5vbmU6CisgICAgICAgICAgICB3YWl0ZXIuc2V0X3Jlc3VsdChOb25lKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgd2FpdGVyLnNldF9leGNlcHRpb24oZXhjKQorCisgICAgQGNvcm91dGluZQorICAgIGRlZiBfZHJhaW5faGVscGVyKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9jb25uZWN0aW9uX2xvc3Q6CisgICAgICAgICAgICByYWlzZSBDb25uZWN0aW9uUmVzZXRFcnJvcignQ29ubmVjdGlvbiBsb3N0JykKKyAgICAgICAgaWYgbm90IHNlbGYuX3BhdXNlZDoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICB3YWl0ZXIgPSBzZWxmLl9kcmFpbl93YWl0ZXIKKyAgICAgICAgYXNzZXJ0IHdhaXRlciBpcyBOb25lIG9yIHdhaXRlci5jYW5jZWxsZWQoKQorICAgICAgICB3YWl0ZXIgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYuX2xvb3ApCisgICAgICAgIHNlbGYuX2RyYWluX3dhaXRlciA9IHdhaXRlcgorICAgICAgICB5aWVsZCBmcm9tIHdhaXRlcgorCisKK2NsYXNzIFN0cmVhbVJlYWRlclByb3RvY29sKEZsb3dDb250cm9sTWl4aW4sIHByb3RvY29scy5Qcm90b2NvbCk6CisgICAgIiIiSGVscGVyIGNsYXNzIHRvIGFkYXB0IGJldHdlZW4gUHJvdG9jb2wgYW5kIFN0cmVhbVJlYWRlci4KKworICAgIChUaGlzIGlzIGEgaGVscGVyIGNsYXNzIGluc3RlYWQgb2YgbWFraW5nIFN0cmVhbVJlYWRlciBpdHNlbGYgYQorICAgIFByb3RvY29sIHN1YmNsYXNzLCBiZWNhdXNlIHRoZSBTdHJlYW1SZWFkZXIgaGFzIG90aGVyIHBvdGVudGlhbAorICAgIHVzZXMsIGFuZCB0byBwcmV2ZW50IHRoZSB1c2VyIG9mIHRoZSBTdHJlYW1SZWFkZXIgdG8gYWNjaWRlbnRhbGx5CisgICAgY2FsbCBpbmFwcHJvcHJpYXRlIG1ldGhvZHMgb2YgdGhlIHByb3RvY29sLikKKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzdHJlYW1fcmVhZGVyLCBjbGllbnRfY29ubmVjdGVkX2NiPU5vbmUsIGxvb3A9Tm9uZSk6CisgICAgICAgIHN1cGVyKCkuX19pbml0X18obG9vcD1sb29wKQorICAgICAgICBzZWxmLl9zdHJlYW1fcmVhZGVyID0gc3RyZWFtX3JlYWRlcgorICAgICAgICBzZWxmLl9zdHJlYW1fd3JpdGVyID0gTm9uZQorICAgICAgICBzZWxmLl9jbGllbnRfY29ubmVjdGVkX2NiID0gY2xpZW50X2Nvbm5lY3RlZF9jYgorCisgICAgZGVmIGNvbm5lY3Rpb25fbWFkZShzZWxmLCB0cmFuc3BvcnQpOgorICAgICAgICBzZWxmLl9zdHJlYW1fcmVhZGVyLnNldF90cmFuc3BvcnQodHJhbnNwb3J0KQorICAgICAgICBpZiBzZWxmLl9jbGllbnRfY29ubmVjdGVkX2NiIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fc3RyZWFtX3dyaXRlciA9IFN0cmVhbVdyaXRlcih0cmFuc3BvcnQsIHNlbGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3N0cmVhbV9yZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2xvb3ApCisgICAgICAgICAgICByZXMgPSBzZWxmLl9jbGllbnRfY29ubmVjdGVkX2NiKHNlbGYuX3N0cmVhbV9yZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3N0cmVhbV93cml0ZXIpCisgICAgICAgICAgICBpZiBjb3JvdXRpbmVzLmlzY29yb3V0aW5lKHJlcyk6CisgICAgICAgICAgICAgICAgc2VsZi5fbG9vcC5jcmVhdGVfdGFzayhyZXMpCisKKyAgICBkZWYgY29ubmVjdGlvbl9sb3N0KHNlbGYsIGV4Yyk6CisgICAgICAgIGlmIGV4YyBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5fc3RyZWFtX3JlYWRlci5mZWVkX2VvZigpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9zdHJlYW1fcmVhZGVyLnNldF9leGNlcHRpb24oZXhjKQorICAgICAgICBzdXBlcigpLmNvbm5lY3Rpb25fbG9zdChleGMpCisKKyAgICBkZWYgZGF0YV9yZWNlaXZlZChzZWxmLCBkYXRhKToKKyAgICAgICAgc2VsZi5fc3RyZWFtX3JlYWRlci5mZWVkX2RhdGEoZGF0YSkKKworICAgIGRlZiBlb2ZfcmVjZWl2ZWQoc2VsZik6CisgICAgICAgIHNlbGYuX3N0cmVhbV9yZWFkZXIuZmVlZF9lb2YoKQorICAgICAgICByZXR1cm4gVHJ1ZQorCisKK2NsYXNzIFN0cmVhbVdyaXRlcjoKKyAgICAiIiJXcmFwcyBhIFRyYW5zcG9ydC4KKworICAgIFRoaXMgZXhwb3NlcyB3cml0ZSgpLCB3cml0ZWxpbmVzKCksIFtjYW5fXXdyaXRlX2VvZigpLAorICAgIGdldF9leHRyYV9pbmZvKCkgYW5kIGNsb3NlKCkuICBJdCBhZGRzIGRyYWluKCkgd2hpY2ggcmV0dXJucyBhbgorICAgIG9wdGlvbmFsIEZ1dHVyZSBvbiB3aGljaCB5b3UgY2FuIHdhaXQgZm9yIGZsb3cgY29udHJvbC4gIEl0IGFsc28KKyAgICBhZGRzIGEgdHJhbnNwb3J0IHByb3BlcnR5IHdoaWNoIHJlZmVyZW5jZXMgdGhlIFRyYW5zcG9ydAorICAgIGRpcmVjdGx5LgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRyYW5zcG9ydCwgcHJvdG9jb2wsIHJlYWRlciwgbG9vcCk6CisgICAgICAgIHNlbGYuX3RyYW5zcG9ydCA9IHRyYW5zcG9ydAorICAgICAgICBzZWxmLl9wcm90b2NvbCA9IHByb3RvY29sCisgICAgICAgICMgZHJhaW4oKSBleHBlY3RzIHRoYXQgdGhlIHJlYWRlciBoYXMgYW4gZXhjZXB0aW9uKCkgbWV0aG9kCisgICAgICAgIGFzc2VydCByZWFkZXIgaXMgTm9uZSBvciBpc2luc3RhbmNlKHJlYWRlciwgU3RyZWFtUmVhZGVyKQorICAgICAgICBzZWxmLl9yZWFkZXIgPSByZWFkZXIKKyAgICAgICAgc2VsZi5fbG9vcCA9IGxvb3AKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgaW5mbyA9IFtzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgJ3RyYW5zcG9ydD0lcicgJSBzZWxmLl90cmFuc3BvcnRdCisgICAgICAgIGlmIHNlbGYuX3JlYWRlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGluZm8uYXBwZW5kKCdyZWFkZXI9JXInICUgc2VsZi5fcmVhZGVyKQorICAgICAgICByZXR1cm4gJzwlcz4nICUgJyAnLmpvaW4oaW5mbykKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiB0cmFuc3BvcnQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl90cmFuc3BvcnQKKworICAgIGRlZiB3cml0ZShzZWxmLCBkYXRhKToKKyAgICAgICAgc2VsZi5fdHJhbnNwb3J0LndyaXRlKGRhdGEpCisKKyAgICBkZWYgd3JpdGVsaW5lcyhzZWxmLCBkYXRhKToKKyAgICAgICAgc2VsZi5fdHJhbnNwb3J0LndyaXRlbGluZXMoZGF0YSkKKworICAgIGRlZiB3cml0ZV9lb2Yoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl90cmFuc3BvcnQud3JpdGVfZW9mKCkKKworICAgIGRlZiBjYW5fd3JpdGVfZW9mKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fdHJhbnNwb3J0LmNhbl93cml0ZV9lb2YoKQorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fdHJhbnNwb3J0LmNsb3NlKCkKKworICAgIGRlZiBnZXRfZXh0cmFfaW5mbyhzZWxmLCBuYW1lLCBkZWZhdWx0PU5vbmUpOgorICAgICAgICByZXR1cm4gc2VsZi5fdHJhbnNwb3J0LmdldF9leHRyYV9pbmZvKG5hbWUsIGRlZmF1bHQpCisKKyAgICBAY29yb3V0aW5lCisgICAgZGVmIGRyYWluKHNlbGYpOgorICAgICAgICAiIiJGbHVzaCB0aGUgd3JpdGUgYnVmZmVyLgorCisgICAgICAgIFRoZSBpbnRlbmRlZCB1c2UgaXMgdG8gd3JpdGUKKworICAgICAgICAgIHcud3JpdGUoZGF0YSkKKyAgICAgICAgICB5aWVsZCBmcm9tIHcuZHJhaW4oKQorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5fcmVhZGVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgZXhjID0gc2VsZi5fcmVhZGVyLmV4Y2VwdGlvbigpCisgICAgICAgICAgICBpZiBleGMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgcmFpc2UgZXhjCisgICAgICAgIGlmIHNlbGYuX3RyYW5zcG9ydCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGlmIHNlbGYuX3RyYW5zcG9ydC5pc19jbG9zaW5nKCk6CisgICAgICAgICAgICAgICAgIyBZaWVsZCB0byB0aGUgZXZlbnQgbG9vcCBzbyBjb25uZWN0aW9uX2xvc3QoKSBtYXkgYmUKKyAgICAgICAgICAgICAgICAjIGNhbGxlZC4gIFdpdGhvdXQgdGhpcywgX2RyYWluX2hlbHBlcigpIHdvdWxkIHJldHVybgorICAgICAgICAgICAgICAgICMgaW1tZWRpYXRlbHksIGFuZCBjb2RlIHRoYXQgY2FsbHMKKyAgICAgICAgICAgICAgICAjICAgICB3cml0ZSguLi4pOyB5aWVsZCBmcm9tIGRyYWluKCkKKyAgICAgICAgICAgICAgICAjIGluIGEgbG9vcCB3b3VsZCBuZXZlciBjYWxsIGNvbm5lY3Rpb25fbG9zdCgpLCBzbyBpdAorICAgICAgICAgICAgICAgICMgd291bGQgbm90IHNlZSBhbiBlcnJvciB3aGVuIHRoZSBzb2NrZXQgaXMgY2xvc2VkLgorICAgICAgICAgICAgICAgIHlpZWxkCisgICAgICAgIHlpZWxkIGZyb20gc2VsZi5fcHJvdG9jb2wuX2RyYWluX2hlbHBlcigpCisKKworY2xhc3MgU3RyZWFtUmVhZGVyOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxpbWl0PV9ERUZBVUxUX0xJTUlULCBsb29wPU5vbmUpOgorICAgICAgICAjIFRoZSBsaW5lIGxlbmd0aCBsaW1pdCBpcyAgYSBzZWN1cml0eSBmZWF0dXJlOworICAgICAgICAjIGl0IGFsc28gZG91YmxlcyBhcyBoYWxmIHRoZSBidWZmZXIgbGltaXQuCisgICAgICAgIHNlbGYuX2xpbWl0ID0gbGltaXQKKyAgICAgICAgaWYgbG9vcCBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5fbG9vcCA9IGV2ZW50cy5nZXRfZXZlbnRfbG9vcCgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9sb29wID0gbG9vcAorICAgICAgICBzZWxmLl9idWZmZXIgPSBieXRlYXJyYXkoKQorICAgICAgICBzZWxmLl9lb2YgPSBGYWxzZSAgICAjIFdoZXRoZXIgd2UncmUgZG9uZS4KKyAgICAgICAgc2VsZi5fd2FpdGVyID0gTm9uZSAgIyBBIGZ1dHVyZSB1c2VkIGJ5IF93YWl0X2Zvcl9kYXRhKCkKKyAgICAgICAgc2VsZi5fZXhjZXB0aW9uID0gTm9uZQorICAgICAgICBzZWxmLl90cmFuc3BvcnQgPSBOb25lCisgICAgICAgIHNlbGYuX3BhdXNlZCA9IEZhbHNlCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIGluZm8gPSBbJ1N0cmVhbVJlYWRlciddCisgICAgICAgIGlmIHNlbGYuX2J1ZmZlcjoKKyAgICAgICAgICAgIGluZm8uYXBwZW5kKCclZCBieXRlcycgJSBsZW4oc2VsZi5fYnVmZmVyKSkKKyAgICAgICAgaWYgc2VsZi5fZW9mOgorICAgICAgICAgICAgaW5mby5hcHBlbmQoJ2VvZicpCisgICAgICAgIGlmIHNlbGYuX2xpbWl0ICE9IF9ERUZBVUxUX0xJTUlUOgorICAgICAgICAgICAgaW5mby5hcHBlbmQoJ2w9JWQnICUgc2VsZi5fbGltaXQpCisgICAgICAgIGlmIHNlbGYuX3dhaXRlcjoKKyAgICAgICAgICAgIGluZm8uYXBwZW5kKCd3PSVyJyAlIHNlbGYuX3dhaXRlcikKKyAgICAgICAgaWYgc2VsZi5fZXhjZXB0aW9uOgorICAgICAgICAgICAgaW5mby5hcHBlbmQoJ2U9JXInICUgc2VsZi5fZXhjZXB0aW9uKQorICAgICAgICBpZiBzZWxmLl90cmFuc3BvcnQ6CisgICAgICAgICAgICBpbmZvLmFwcGVuZCgndD0lcicgJSBzZWxmLl90cmFuc3BvcnQpCisgICAgICAgIGlmIHNlbGYuX3BhdXNlZDoKKyAgICAgICAgICAgIGluZm8uYXBwZW5kKCdwYXVzZWQnKQorICAgICAgICByZXR1cm4gJzwlcz4nICUgJyAnLmpvaW4oaW5mbykKKworICAgIGRlZiBleGNlcHRpb24oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9leGNlcHRpb24KKworICAgIGRlZiBzZXRfZXhjZXB0aW9uKHNlbGYsIGV4Yyk6CisgICAgICAgIHNlbGYuX2V4Y2VwdGlvbiA9IGV4YworCisgICAgICAgIHdhaXRlciA9IHNlbGYuX3dhaXRlcgorICAgICAgICBpZiB3YWl0ZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl93YWl0ZXIgPSBOb25lCisgICAgICAgICAgICBpZiBub3Qgd2FpdGVyLmNhbmNlbGxlZCgpOgorICAgICAgICAgICAgICAgIHdhaXRlci5zZXRfZXhjZXB0aW9uKGV4YykKKworICAgIGRlZiBfd2FrZXVwX3dhaXRlcihzZWxmKToKKyAgICAgICAgIiIiV2FrZXVwIHJlYWQoKSBvciByZWFkbGluZSgpIGZ1bmN0aW9uIHdhaXRpbmcgZm9yIGRhdGEgb3IgRU9GLiIiIgorICAgICAgICB3YWl0ZXIgPSBzZWxmLl93YWl0ZXIKKyAgICAgICAgaWYgd2FpdGVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fd2FpdGVyID0gTm9uZQorICAgICAgICAgICAgaWYgbm90IHdhaXRlci5jYW5jZWxsZWQoKToKKyAgICAgICAgICAgICAgICB3YWl0ZXIuc2V0X3Jlc3VsdChOb25lKQorCisgICAgZGVmIHNldF90cmFuc3BvcnQoc2VsZiwgdHJhbnNwb3J0KToKKyAgICAgICAgYXNzZXJ0IHNlbGYuX3RyYW5zcG9ydCBpcyBOb25lLCAnVHJhbnNwb3J0IGFscmVhZHkgc2V0JworICAgICAgICBzZWxmLl90cmFuc3BvcnQgPSB0cmFuc3BvcnQKKworICAgIGRlZiBfbWF5YmVfcmVzdW1lX3RyYW5zcG9ydChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fcGF1c2VkIGFuZCBsZW4oc2VsZi5fYnVmZmVyKSA8PSBzZWxmLl9saW1pdDoKKyAgICAgICAgICAgIHNlbGYuX3BhdXNlZCA9IEZhbHNlCisgICAgICAgICAgICBzZWxmLl90cmFuc3BvcnQucmVzdW1lX3JlYWRpbmcoKQorCisgICAgZGVmIGZlZWRfZW9mKHNlbGYpOgorICAgICAgICBzZWxmLl9lb2YgPSBUcnVlCisgICAgICAgIHNlbGYuX3dha2V1cF93YWl0ZXIoKQorCisgICAgZGVmIGF0X2VvZihzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIFRydWUgaWYgdGhlIGJ1ZmZlciBpcyBlbXB0eSBhbmQgJ2ZlZWRfZW9mJyB3YXMgY2FsbGVkLiIiIgorICAgICAgICByZXR1cm4gc2VsZi5fZW9mIGFuZCBub3Qgc2VsZi5fYnVmZmVyCisKKyAgICBkZWYgZmVlZF9kYXRhKHNlbGYsIGRhdGEpOgorICAgICAgICBhc3NlcnQgbm90IHNlbGYuX2VvZiwgJ2ZlZWRfZGF0YSBhZnRlciBmZWVkX2VvZicKKworICAgICAgICBpZiBub3QgZGF0YToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHNlbGYuX2J1ZmZlci5leHRlbmQoZGF0YSkKKyAgICAgICAgc2VsZi5fd2FrZXVwX3dhaXRlcigpCisKKyAgICAgICAgaWYgKHNlbGYuX3RyYW5zcG9ydCBpcyBub3QgTm9uZSBhbmQKKyAgICAgICAgICAgIG5vdCBzZWxmLl9wYXVzZWQgYW5kCisgICAgICAgICAgICBsZW4oc2VsZi5fYnVmZmVyKSA+IDIqc2VsZi5fbGltaXQpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuX3RyYW5zcG9ydC5wYXVzZV9yZWFkaW5nKCkKKyAgICAgICAgICAgIGV4Y2VwdCBOb3RJbXBsZW1lbnRlZEVycm9yOgorICAgICAgICAgICAgICAgICMgVGhlIHRyYW5zcG9ydCBjYW4ndCBiZSBwYXVzZWQuCisgICAgICAgICAgICAgICAgIyBXZSdsbCBqdXN0IGhhdmUgdG8gYnVmZmVyIGFsbCBkYXRhLgorICAgICAgICAgICAgICAgICMgRm9yZ2V0IHRoZSB0cmFuc3BvcnQgc28gd2UgZG9uJ3Qga2VlcCB0cnlpbmcuCisgICAgICAgICAgICAgICAgc2VsZi5fdHJhbnNwb3J0ID0gTm9uZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLl9wYXVzZWQgPSBUcnVlCisKKyAgICBAY29yb3V0aW5lCisgICAgZGVmIF93YWl0X2Zvcl9kYXRhKHNlbGYsIGZ1bmNfbmFtZSk6CisgICAgICAgICIiIldhaXQgdW50aWwgZmVlZF9kYXRhKCkgb3IgZmVlZF9lb2YoKSBpcyBjYWxsZWQuIiIiCisgICAgICAgICMgU3RyZWFtUmVhZGVyIHVzZXMgYSBmdXR1cmUgdG8gbGluayB0aGUgcHJvdG9jb2wgZmVlZF9kYXRhKCkgbWV0aG9kCisgICAgICAgICMgdG8gYSByZWFkIGNvcm91dGluZS4gUnVubmluZyB0d28gcmVhZCBjb3JvdXRpbmVzIGF0IHRoZSBzYW1lIHRpbWUKKyAgICAgICAgIyB3b3VsZCBoYXZlIGFuIHVuZXhwZWN0ZWQgYmVoYXZpb3VyLiBJdCB3b3VsZCBub3QgcG9zc2libGUgdG8ga25vdworICAgICAgICAjIHdoaWNoIGNvcm91dGluZSB3b3VsZCBnZXQgdGhlIG5leHQgZGF0YS4KKyAgICAgICAgaWYgc2VsZi5fd2FpdGVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCclcygpIGNhbGxlZCB3aGlsZSBhbm90aGVyIGNvcm91dGluZSBpcyAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FscmVhZHkgd2FpdGluZyBmb3IgaW5jb21pbmcgZGF0YScgJSBmdW5jX25hbWUpCisKKyAgICAgICAgc2VsZi5fd2FpdGVyID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLl9sb29wKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIHNlbGYuX3dhaXRlcgorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5fd2FpdGVyID0gTm9uZQorCisgICAgQGNvcm91dGluZQorICAgIGRlZiByZWFkbGluZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fZXhjZXB0aW9uIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmFpc2Ugc2VsZi5fZXhjZXB0aW9uCisKKyAgICAgICAgbGluZSA9IGJ5dGVhcnJheSgpCisgICAgICAgIG5vdF9lbm91Z2ggPSBUcnVlCisKKyAgICAgICAgd2hpbGUgbm90X2Vub3VnaDoKKyAgICAgICAgICAgIHdoaWxlIHNlbGYuX2J1ZmZlciBhbmQgbm90X2Vub3VnaDoKKyAgICAgICAgICAgICAgICBpY2hhciA9IHNlbGYuX2J1ZmZlci5maW5kKGInXG4nKQorICAgICAgICAgICAgICAgIGlmIGljaGFyIDwgMDoKKyAgICAgICAgICAgICAgICAgICAgbGluZS5leHRlbmQoc2VsZi5fYnVmZmVyKQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9idWZmZXIuY2xlYXIoKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGljaGFyICs9IDEKKyAgICAgICAgICAgICAgICAgICAgbGluZS5leHRlbmQoc2VsZi5fYnVmZmVyWzppY2hhcl0pCisgICAgICAgICAgICAgICAgICAgIGRlbCBzZWxmLl9idWZmZXJbOmljaGFyXQorICAgICAgICAgICAgICAgICAgICBub3RfZW5vdWdoID0gRmFsc2UKKworICAgICAgICAgICAgICAgIGlmIGxlbihsaW5lKSA+IHNlbGYuX2xpbWl0OgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9tYXliZV9yZXN1bWVfdHJhbnNwb3J0KCkKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignTGluZSBpcyB0b28gbG9uZycpCisKKyAgICAgICAgICAgIGlmIHNlbGYuX2VvZjoKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICBpZiBub3RfZW5vdWdoOgorICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gc2VsZi5fd2FpdF9mb3JfZGF0YSgncmVhZGxpbmUnKQorCisgICAgICAgIHNlbGYuX21heWJlX3Jlc3VtZV90cmFuc3BvcnQoKQorICAgICAgICByZXR1cm4gYnl0ZXMobGluZSkKKworICAgIEBjb3JvdXRpbmUKKyAgICBkZWYgcmVhZChzZWxmLCBuPS0xKToKKyAgICAgICAgaWYgc2VsZi5fZXhjZXB0aW9uIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmFpc2Ugc2VsZi5fZXhjZXB0aW9uCisKKyAgICAgICAgaWYgbm90IG46CisgICAgICAgICAgICByZXR1cm4gYicnCisKKyAgICAgICAgaWYgbiA8IDA6CisgICAgICAgICAgICAjIFRoaXMgdXNlZCB0byBqdXN0IGxvb3AgY3JlYXRpbmcgYSBuZXcgd2FpdGVyIGhvcGluZyB0bworICAgICAgICAgICAgIyBjb2xsZWN0IGV2ZXJ5dGhpbmcgaW4gc2VsZi5fYnVmZmVyLCBidXQgdGhhdCB3b3VsZAorICAgICAgICAgICAgIyBkZWFkbG9jayBpZiB0aGUgc3VicHJvY2VzcyBzZW5kcyBtb3JlIHRoYW4gc2VsZi5saW1pdAorICAgICAgICAgICAgIyBieXRlcy4gIFNvIGp1c3QgY2FsbCBzZWxmLnJlYWQoc2VsZi5fbGltaXQpIHVudGlsIEVPRi4KKyAgICAgICAgICAgIGJsb2NrcyA9IFtdCisgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgIGJsb2NrID0geWllbGQgZnJvbSBzZWxmLnJlYWQoc2VsZi5fbGltaXQpCisgICAgICAgICAgICAgICAgaWYgbm90IGJsb2NrOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGJsb2Nrcy5hcHBlbmQoYmxvY2spCisgICAgICAgICAgICByZXR1cm4gYicnLmpvaW4oYmxvY2tzKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgbm90IHNlbGYuX2J1ZmZlciBhbmQgbm90IHNlbGYuX2VvZjoKKyAgICAgICAgICAgICAgICB5aWVsZCBmcm9tIHNlbGYuX3dhaXRfZm9yX2RhdGEoJ3JlYWQnKQorCisgICAgICAgIGlmIG4gPCAwIG9yIGxlbihzZWxmLl9idWZmZXIpIDw9IG46CisgICAgICAgICAgICBkYXRhID0gYnl0ZXMoc2VsZi5fYnVmZmVyKQorICAgICAgICAgICAgc2VsZi5fYnVmZmVyLmNsZWFyKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgbiA+IDAgYW5kIGxlbihzZWxmLl9idWZmZXIpID4gbgorICAgICAgICAgICAgZGF0YSA9IGJ5dGVzKHNlbGYuX2J1ZmZlcls6bl0pCisgICAgICAgICAgICBkZWwgc2VsZi5fYnVmZmVyWzpuXQorCisgICAgICAgIHNlbGYuX21heWJlX3Jlc3VtZV90cmFuc3BvcnQoKQorICAgICAgICByZXR1cm4gZGF0YQorCisgICAgQGNvcm91dGluZQorICAgIGRlZiByZWFkZXhhY3RseShzZWxmLCBuKToKKyAgICAgICAgaWYgbiA8IDA6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdyZWFkZXhhY3RseSBzaXplIGNhbiBub3QgYmUgbGVzcyB0aGFuIHplcm8nKQorCisgICAgICAgIGlmIHNlbGYuX2V4Y2VwdGlvbiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIHNlbGYuX2V4Y2VwdGlvbgorCisgICAgICAgICMgVGhlcmUgdXNlZCB0byBiZSAib3B0aW1pemVkIiBjb2RlIGhlcmUuICBJdCBjcmVhdGVkIGl0cyBvd24KKyAgICAgICAgIyBGdXR1cmUgYW5kIHdhaXRlZCB1bnRpbCBzZWxmLl9idWZmZXIgaGFkIGF0IGxlYXN0IHRoZSBuCisgICAgICAgICMgYnl0ZXMsIHRoZW4gY2FsbGVkIHJlYWQobikuICBVbmZvcnR1bmF0ZWx5LCB0aGlzIGNvdWxkIHBhdXNlCisgICAgICAgICMgdGhlIHRyYW5zcG9ydCBpZiB0aGUgYXJndW1lbnQgd2FzIGxhcmdlciB0aGFuIHRoZSBwYXVzZQorICAgICAgICAjIGxpbWl0ICh3aGljaCBpcyB0d2ljZSBzZWxmLl9saW1pdCkuICBTbyBub3cgd2UganVzdCByZWFkKCkKKyAgICAgICAgIyBpbnRvIGEgbG9jYWwgYnVmZmVyLgorCisgICAgICAgIGJsb2NrcyA9IFtdCisgICAgICAgIHdoaWxlIG4gPiAwOgorICAgICAgICAgICAgYmxvY2sgPSB5aWVsZCBmcm9tIHNlbGYucmVhZChuKQorICAgICAgICAgICAgaWYgbm90IGJsb2NrOgorICAgICAgICAgICAgICAgIHBhcnRpYWwgPSBiJycuam9pbihibG9ja3MpCisgICAgICAgICAgICAgICAgcmFpc2UgSW5jb21wbGV0ZVJlYWRFcnJvcihwYXJ0aWFsLCBsZW4ocGFydGlhbCkgKyBuKQorICAgICAgICAgICAgYmxvY2tzLmFwcGVuZChibG9jaykKKyAgICAgICAgICAgIG4gLT0gbGVuKGJsb2NrKQorCisgICAgICAgIHJldHVybiBiJycuam9pbihibG9ja3MpCisKKyAgICBpZiBjb21wYXQuUFkzNToKKyAgICAgICAgQGNvcm91dGluZQorICAgICAgICBkZWYgX19haXRlcl9fKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYKKworICAgICAgICBAY29yb3V0aW5lCisgICAgICAgIGRlZiBfX2FuZXh0X18oc2VsZik6CisgICAgICAgICAgICB2YWwgPSB5aWVsZCBmcm9tIHNlbGYucmVhZGxpbmUoKQorICAgICAgICAgICAgaWYgdmFsID09IGInJzoKKyAgICAgICAgICAgICAgICByYWlzZSBTdG9wQXN5bmNJdGVyYXRpb24KKyAgICAgICAgICAgIHJldHVybiB2YWwKZGlmZiAtLWdpdCBhL0xpYi9hc3luY2lvL3N1YnByb2Nlc3MucHkgYi9MaWIvYXN5bmNpby9zdWJwcm9jZXNzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhZDQwMzkKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvYXN5bmNpby9zdWJwcm9jZXNzLnB5CkBAIC0wLDAgKzEsMjEzIEBACitfX2FsbF9fID0gWydjcmVhdGVfc3VicHJvY2Vzc19leGVjJywgJ2NyZWF0ZV9zdWJwcm9jZXNzX3NoZWxsJ10KKworaW1wb3J0IHN1YnByb2Nlc3MKKworZnJvbSAuIGltcG9ydCBldmVudHMKK2Zyb20gLiBpbXBvcnQgcHJvdG9jb2xzCitmcm9tIC4gaW1wb3J0IHN0cmVhbXMKK2Zyb20gLiBpbXBvcnQgdGFza3MKK2Zyb20gLmNvcm91dGluZXMgaW1wb3J0IGNvcm91dGluZQorZnJvbSAubG9nIGltcG9ydCBsb2dnZXIKKworCitQSVBFID0gc3VicHJvY2Vzcy5QSVBFCitTVERPVVQgPSBzdWJwcm9jZXNzLlNURE9VVAorREVWTlVMTCA9IHN1YnByb2Nlc3MuREVWTlVMTAorCisKK2NsYXNzIFN1YnByb2Nlc3NTdHJlYW1Qcm90b2NvbChzdHJlYW1zLkZsb3dDb250cm9sTWl4aW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG9jb2xzLlN1YnByb2Nlc3NQcm90b2NvbCk6CisgICAgIiIiTGlrZSBTdHJlYW1SZWFkZXJQcm90b2NvbCwgYnV0IGZvciBhIHN1YnByb2Nlc3MuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbGltaXQsIGxvb3ApOgorICAgICAgICBzdXBlcigpLl9faW5pdF9fKGxvb3A9bG9vcCkKKyAgICAgICAgc2VsZi5fbGltaXQgPSBsaW1pdAorICAgICAgICBzZWxmLnN0ZGluID0gc2VsZi5zdGRvdXQgPSBzZWxmLnN0ZGVyciA9IE5vbmUKKyAgICAgICAgc2VsZi5fdHJhbnNwb3J0ID0gTm9uZQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICBpbmZvID0gW3NlbGYuX19jbGFzc19fLl9fbmFtZV9fXQorICAgICAgICBpZiBzZWxmLnN0ZGluIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgaW5mby5hcHBlbmQoJ3N0ZGluPSVyJyAlIHNlbGYuc3RkaW4pCisgICAgICAgIGlmIHNlbGYuc3Rkb3V0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgaW5mby5hcHBlbmQoJ3N0ZG91dD0lcicgJSBzZWxmLnN0ZG91dCkKKyAgICAgICAgaWYgc2VsZi5zdGRlcnIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBpbmZvLmFwcGVuZCgnc3RkZXJyPSVyJyAlIHNlbGYuc3RkZXJyKQorICAgICAgICByZXR1cm4gJzwlcz4nICUgJyAnLmpvaW4oaW5mbykKKworICAgIGRlZiBjb25uZWN0aW9uX21hZGUoc2VsZiwgdHJhbnNwb3J0KToKKyAgICAgICAgc2VsZi5fdHJhbnNwb3J0ID0gdHJhbnNwb3J0CisKKyAgICAgICAgc3Rkb3V0X3RyYW5zcG9ydCA9IHRyYW5zcG9ydC5nZXRfcGlwZV90cmFuc3BvcnQoMSkKKyAgICAgICAgaWYgc3Rkb3V0X3RyYW5zcG9ydCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuc3Rkb3V0ID0gc3RyZWFtcy5TdHJlYW1SZWFkZXIobGltaXQ9c2VsZi5fbGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3A9c2VsZi5fbG9vcCkKKyAgICAgICAgICAgIHNlbGYuc3Rkb3V0LnNldF90cmFuc3BvcnQoc3Rkb3V0X3RyYW5zcG9ydCkKKworICAgICAgICBzdGRlcnJfdHJhbnNwb3J0ID0gdHJhbnNwb3J0LmdldF9waXBlX3RyYW5zcG9ydCgyKQorICAgICAgICBpZiBzdGRlcnJfdHJhbnNwb3J0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5zdGRlcnIgPSBzdHJlYW1zLlN0cmVhbVJlYWRlcihsaW1pdD1zZWxmLl9saW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9vcD1zZWxmLl9sb29wKQorICAgICAgICAgICAgc2VsZi5zdGRlcnIuc2V0X3RyYW5zcG9ydChzdGRlcnJfdHJhbnNwb3J0KQorCisgICAgICAgIHN0ZGluX3RyYW5zcG9ydCA9IHRyYW5zcG9ydC5nZXRfcGlwZV90cmFuc3BvcnQoMCkKKyAgICAgICAgaWYgc3RkaW5fdHJhbnNwb3J0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5zdGRpbiA9IHN0cmVhbXMuU3RyZWFtV3JpdGVyKHN0ZGluX3RyYW5zcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90b2NvbD1zZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlcj1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3A9c2VsZi5fbG9vcCkKKworICAgIGRlZiBwaXBlX2RhdGFfcmVjZWl2ZWQoc2VsZiwgZmQsIGRhdGEpOgorICAgICAgICBpZiBmZCA9PSAxOgorICAgICAgICAgICAgcmVhZGVyID0gc2VsZi5zdGRvdXQKKyAgICAgICAgZWxpZiBmZCA9PSAyOgorICAgICAgICAgICAgcmVhZGVyID0gc2VsZi5zdGRlcnIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJlYWRlciA9IE5vbmUKKyAgICAgICAgaWYgcmVhZGVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmVhZGVyLmZlZWRfZGF0YShkYXRhKQorCisgICAgZGVmIHBpcGVfY29ubmVjdGlvbl9sb3N0KHNlbGYsIGZkLCBleGMpOgorICAgICAgICBpZiBmZCA9PSAwOgorICAgICAgICAgICAgcGlwZSA9IHNlbGYuc3RkaW4KKyAgICAgICAgICAgIGlmIHBpcGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgcGlwZS5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLmNvbm5lY3Rpb25fbG9zdChleGMpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgZmQgPT0gMToKKyAgICAgICAgICAgIHJlYWRlciA9IHNlbGYuc3Rkb3V0CisgICAgICAgIGVsaWYgZmQgPT0gMjoKKyAgICAgICAgICAgIHJlYWRlciA9IHNlbGYuc3RkZXJyCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZWFkZXIgPSBOb25lCisgICAgICAgIGlmIHJlYWRlciAhPSBOb25lOgorICAgICAgICAgICAgaWYgZXhjIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgcmVhZGVyLmZlZWRfZW9mKCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmVhZGVyLnNldF9leGNlcHRpb24oZXhjKQorCisgICAgZGVmIHByb2Nlc3NfZXhpdGVkKHNlbGYpOgorICAgICAgICBzZWxmLl90cmFuc3BvcnQuY2xvc2UoKQorICAgICAgICBzZWxmLl90cmFuc3BvcnQgPSBOb25lCisKKworY2xhc3MgUHJvY2VzczoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdHJhbnNwb3J0LCBwcm90b2NvbCwgbG9vcCk6CisgICAgICAgIHNlbGYuX3RyYW5zcG9ydCA9IHRyYW5zcG9ydAorICAgICAgICBzZWxmLl9wcm90b2NvbCA9IHByb3RvY29sCisgICAgICAgIHNlbGYuX2xvb3AgPSBsb29wCisgICAgICAgIHNlbGYuc3RkaW4gPSBwcm90b2NvbC5zdGRpbgorICAgICAgICBzZWxmLnN0ZG91dCA9IHByb3RvY29sLnN0ZG91dAorICAgICAgICBzZWxmLnN0ZGVyciA9IHByb3RvY29sLnN0ZGVycgorICAgICAgICBzZWxmLnBpZCA9IHRyYW5zcG9ydC5nZXRfcGlkKCkKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICc8JXMgJXM+JyAlIChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgc2VsZi5waWQpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgcmV0dXJuY29kZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3RyYW5zcG9ydC5nZXRfcmV0dXJuY29kZSgpCisKKyAgICBAY29yb3V0aW5lCisgICAgZGVmIHdhaXQoc2VsZik6CisgICAgICAgICIiIldhaXQgdW50aWwgdGhlIHByb2Nlc3MgZXhpdCBhbmQgcmV0dXJuIHRoZSBwcm9jZXNzIHJldHVybiBjb2RlLgorCisgICAgICAgIFRoaXMgbWV0aG9kIGlzIGEgY29yb3V0aW5lLiIiIgorICAgICAgICByZXR1cm4gKHlpZWxkIGZyb20gc2VsZi5fdHJhbnNwb3J0Ll93YWl0KCkpCisKKyAgICBkZWYgc2VuZF9zaWduYWwoc2VsZiwgc2lnbmFsKToKKyAgICAgICAgc2VsZi5fdHJhbnNwb3J0LnNlbmRfc2lnbmFsKHNpZ25hbCkKKworICAgIGRlZiB0ZXJtaW5hdGUoc2VsZik6CisgICAgICAgIHNlbGYuX3RyYW5zcG9ydC50ZXJtaW5hdGUoKQorCisgICAgZGVmIGtpbGwoc2VsZik6CisgICAgICAgIHNlbGYuX3RyYW5zcG9ydC5raWxsKCkKKworICAgIEBjb3JvdXRpbmUKKyAgICBkZWYgX2ZlZWRfc3RkaW4oc2VsZiwgaW5wdXQpOgorICAgICAgICBkZWJ1ZyA9IHNlbGYuX2xvb3AuZ2V0X2RlYnVnKCkKKyAgICAgICAgc2VsZi5zdGRpbi53cml0ZShpbnB1dCkKKyAgICAgICAgaWYgZGVidWc6CisgICAgICAgICAgICBsb2dnZXIuZGVidWcoJyVyIGNvbW11bmljYXRlOiBmZWVkIHN0ZGluICglcyBieXRlcyknLAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZiwgbGVuKGlucHV0KSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgeWllbGQgZnJvbSBzZWxmLnN0ZGluLmRyYWluKCkKKyAgICAgICAgZXhjZXB0IChCcm9rZW5QaXBlRXJyb3IsIENvbm5lY3Rpb25SZXNldEVycm9yKSBhcyBleGM6CisgICAgICAgICAgICAjIGNvbW11bmljYXRlKCkgaWdub3JlcyBCcm9rZW5QaXBlRXJyb3IgYW5kIENvbm5lY3Rpb25SZXNldEVycm9yCisgICAgICAgICAgICBpZiBkZWJ1ZzoKKyAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoJyVyIGNvbW11bmljYXRlOiBzdGRpbiBnb3QgJXInLCBzZWxmLCBleGMpCisKKyAgICAgICAgaWYgZGVidWc6CisgICAgICAgICAgICBsb2dnZXIuZGVidWcoJyVyIGNvbW11bmljYXRlOiBjbG9zZSBzdGRpbicsIHNlbGYpCisgICAgICAgIHNlbGYuc3RkaW4uY2xvc2UoKQorCisgICAgQGNvcm91dGluZQorICAgIGRlZiBfbm9vcChzZWxmKToKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIEBjb3JvdXRpbmUKKyAgICBkZWYgX3JlYWRfc3RyZWFtKHNlbGYsIGZkKToKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fdHJhbnNwb3J0LmdldF9waXBlX3RyYW5zcG9ydChmZCkKKyAgICAgICAgaWYgZmQgPT0gMjoKKyAgICAgICAgICAgIHN0cmVhbSA9IHNlbGYuc3RkZXJyCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBhc3NlcnQgZmQgPT0gMQorICAgICAgICAgICAgc3RyZWFtID0gc2VsZi5zdGRvdXQKKyAgICAgICAgaWYgc2VsZi5fbG9vcC5nZXRfZGVidWcoKToKKyAgICAgICAgICAgIG5hbWUgPSAnc3Rkb3V0JyBpZiBmZCA9PSAxIGVsc2UgJ3N0ZGVycicKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygnJXIgY29tbXVuaWNhdGU6IHJlYWQgJXMnLCBzZWxmLCBuYW1lKQorICAgICAgICBvdXRwdXQgPSB5aWVsZCBmcm9tIHN0cmVhbS5yZWFkKCkKKyAgICAgICAgaWYgc2VsZi5fbG9vcC5nZXRfZGVidWcoKToKKyAgICAgICAgICAgIG5hbWUgPSAnc3Rkb3V0JyBpZiBmZCA9PSAxIGVsc2UgJ3N0ZGVycicKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygnJXIgY29tbXVuaWNhdGU6IGNsb3NlICVzJywgc2VsZiwgbmFtZSkKKyAgICAgICAgdHJhbnNwb3J0LmNsb3NlKCkKKyAgICAgICAgcmV0dXJuIG91dHB1dAorCisgICAgQGNvcm91dGluZQorICAgIGRlZiBjb21tdW5pY2F0ZShzZWxmLCBpbnB1dD1Ob25lKToKKyAgICAgICAgaWYgaW5wdXQ6CisgICAgICAgICAgICBzdGRpbiA9IHNlbGYuX2ZlZWRfc3RkaW4oaW5wdXQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzdGRpbiA9IHNlbGYuX25vb3AoKQorICAgICAgICBpZiBzZWxmLnN0ZG91dCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHN0ZG91dCA9IHNlbGYuX3JlYWRfc3RyZWFtKDEpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzdGRvdXQgPSBzZWxmLl9ub29wKCkKKyAgICAgICAgaWYgc2VsZi5zdGRlcnIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzdGRlcnIgPSBzZWxmLl9yZWFkX3N0cmVhbSgyKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3RkZXJyID0gc2VsZi5fbm9vcCgpCisgICAgICAgIHN0ZGluLCBzdGRvdXQsIHN0ZGVyciA9IHlpZWxkIGZyb20gdGFza3MuZ2F0aGVyKHN0ZGluLCBzdGRvdXQsIHN0ZGVyciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9vcD1zZWxmLl9sb29wKQorICAgICAgICB5aWVsZCBmcm9tIHNlbGYud2FpdCgpCisgICAgICAgIHJldHVybiAoc3Rkb3V0LCBzdGRlcnIpCisKKworQGNvcm91dGluZQorZGVmIGNyZWF0ZV9zdWJwcm9jZXNzX3NoZWxsKGNtZCwgc3RkaW49Tm9uZSwgc3Rkb3V0PU5vbmUsIHN0ZGVycj1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3A9Tm9uZSwgbGltaXQ9c3RyZWFtcy5fREVGQVVMVF9MSU1JVCwgKiprd2RzKToKKyAgICBpZiBsb29wIGlzIE5vbmU6CisgICAgICAgIGxvb3AgPSBldmVudHMuZ2V0X2V2ZW50X2xvb3AoKQorICAgIHByb3RvY29sX2ZhY3RvcnkgPSBsYW1iZGE6IFN1YnByb2Nlc3NTdHJlYW1Qcm90b2NvbChsaW1pdD1saW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9vcD1sb29wKQorICAgIHRyYW5zcG9ydCwgcHJvdG9jb2wgPSB5aWVsZCBmcm9tIGxvb3Auc3VicHJvY2Vzc19zaGVsbCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG9jb2xfZmFjdG9yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kLCBzdGRpbj1zdGRpbiwgc3Rkb3V0PXN0ZG91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN0ZGVyciwgKiprd2RzKQorICAgIHJldHVybiBQcm9jZXNzKHRyYW5zcG9ydCwgcHJvdG9jb2wsIGxvb3ApCisKK0Bjb3JvdXRpbmUKK2RlZiBjcmVhdGVfc3VicHJvY2Vzc19leGVjKHByb2dyYW0sICphcmdzLCBzdGRpbj1Ob25lLCBzdGRvdXQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1Ob25lLCBsb29wPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW1pdD1zdHJlYW1zLl9ERUZBVUxUX0xJTUlULCAqKmt3ZHMpOgorICAgIGlmIGxvb3AgaXMgTm9uZToKKyAgICAgICAgbG9vcCA9IGV2ZW50cy5nZXRfZXZlbnRfbG9vcCgpCisgICAgcHJvdG9jb2xfZmFjdG9yeSA9IGxhbWJkYTogU3VicHJvY2Vzc1N0cmVhbVByb3RvY29sKGxpbWl0PWxpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29wPWxvb3ApCisgICAgdHJhbnNwb3J0LCBwcm90b2NvbCA9IHlpZWxkIGZyb20gbG9vcC5zdWJwcm9jZXNzX2V4ZWMoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvY29sX2ZhY3RvcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyYW0sICphcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRpbj1zdGRpbiwgc3Rkb3V0PXN0ZG91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN0ZGVyciwgKiprd2RzKQorICAgIHJldHVybiBQcm9jZXNzKHRyYW5zcG9ydCwgcHJvdG9jb2wsIGxvb3ApCmRpZmYgLS1naXQgYS9MaWIvYXN5bmNpby90YXNrcy5weSBiL0xpYi9hc3luY2lvL3Rhc2tzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyYWI4ODEKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvYXN5bmNpby90YXNrcy5weQpAQCAtMCwwICsxLDczNCBAQAorIiIiU3VwcG9ydCBmb3IgdGFza3MsIGNvcm91dGluZXMgYW5kIHRoZSBzY2hlZHVsZXIuIiIiCisKK19fYWxsX18gPSBbJ1Rhc2snLAorICAgICAgICAgICAnRklSU1RfQ09NUExFVEVEJywgJ0ZJUlNUX0VYQ0VQVElPTicsICdBTExfQ09NUExFVEVEJywKKyAgICAgICAgICAgJ3dhaXQnLCAnd2FpdF9mb3InLCAnYXNfY29tcGxldGVkJywgJ3NsZWVwJywgJ2FzeW5jJywKKyAgICAgICAgICAgJ2dhdGhlcicsICdzaGllbGQnLCAnZW5zdXJlX2Z1dHVyZScsICdydW5fY29yb3V0aW5lX3RocmVhZHNhZmUnLAorICAgICAgICAgICBdCisKK2ltcG9ydCBjb25jdXJyZW50LmZ1dHVyZXMKK2ltcG9ydCBmdW5jdG9vbHMKK2ltcG9ydCBpbnNwZWN0CitpbXBvcnQgbGluZWNhY2hlCitpbXBvcnQgdHJhY2ViYWNrCitpbXBvcnQgd2FybmluZ3MKK2ltcG9ydCB3ZWFrcmVmCisKK2Zyb20gLiBpbXBvcnQgY29tcGF0Citmcm9tIC4gaW1wb3J0IGNvcm91dGluZXMKK2Zyb20gLiBpbXBvcnQgZXZlbnRzCitmcm9tIC4gaW1wb3J0IGZ1dHVyZXMKK2Zyb20gLmNvcm91dGluZXMgaW1wb3J0IGNvcm91dGluZQorCisKK2NsYXNzIFRhc2soZnV0dXJlcy5GdXR1cmUpOgorICAgICIiIkEgY29yb3V0aW5lIHdyYXBwZWQgaW4gYSBGdXR1cmUuIiIiCisKKyAgICAjIEFuIGltcG9ydGFudCBpbnZhcmlhbnQgbWFpbnRhaW5lZCB3aGlsZSBhIFRhc2sgbm90IGRvbmU6CisgICAgIworICAgICMgLSBFaXRoZXIgX2Z1dF93YWl0ZXIgaXMgTm9uZSwgYW5kIF9zdGVwKCkgaXMgc2NoZWR1bGVkOworICAgICMgLSBvciBfZnV0X3dhaXRlciBpcyBzb21lIEZ1dHVyZSwgYW5kIF9zdGVwKCkgaXMgKm5vdCogc2NoZWR1bGVkLgorICAgICMKKyAgICAjIFRoZSBvbmx5IHRyYW5zaXRpb24gZnJvbSB0aGUgbGF0dGVyIHRvIHRoZSBmb3JtZXIgaXMgdGhyb3VnaAorICAgICMgX3dha2V1cCgpLiAgV2hlbiBfZnV0X3dhaXRlciBpcyBub3QgTm9uZSwgb25lIG9mIGl0cyBjYWxsYmFja3MKKyAgICAjIG11c3QgYmUgX3dha2V1cCgpLgorCisgICAgIyBXZWFrIHNldCBjb250YWluaW5nIGFsbCB0YXNrcyBhbGl2ZS4KKyAgICBfYWxsX3Rhc2tzID0gd2Vha3JlZi5XZWFrU2V0KCkKKworICAgICMgRGljdGlvbmFyeSBjb250YWluaW5nIHRhc2tzIHRoYXQgYXJlIGN1cnJlbnRseSBhY3RpdmUgaW4KKyAgICAjIGFsbCBydW5uaW5nIGV2ZW50IGxvb3BzLiAge0V2ZW50TG9vcDogVGFza30KKyAgICBfY3VycmVudF90YXNrcyA9IHt9CisKKyAgICAjIElmIEZhbHNlLCBkb24ndCBsb2cgYSBtZXNzYWdlIGlmIHRoZSB0YXNrIGlzIGRlc3Ryb3llZCB3aGVyZWFzIGl0cworICAgICMgc3RhdHVzIGlzIHN0aWxsIHBlbmRpbmcKKyAgICBfbG9nX2Rlc3Ryb3lfcGVuZGluZyA9IFRydWUKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBjdXJyZW50X3Rhc2soY2xzLCBsb29wPU5vbmUpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIGN1cnJlbnRseSBydW5uaW5nIHRhc2sgaW4gYW4gZXZlbnQgbG9vcCBvciBOb25lLgorCisgICAgICAgIEJ5IGRlZmF1bHQgdGhlIGN1cnJlbnQgdGFzayBmb3IgdGhlIGN1cnJlbnQgZXZlbnQgbG9vcCBpcyByZXR1cm5lZC4KKworICAgICAgICBOb25lIGlzIHJldHVybmVkIHdoZW4gY2FsbGVkIG5vdCBpbiB0aGUgY29udGV4dCBvZiBhIFRhc2suCisgICAgICAgICIiIgorICAgICAgICBpZiBsb29wIGlzIE5vbmU6CisgICAgICAgICAgICBsb29wID0gZXZlbnRzLmdldF9ldmVudF9sb29wKCkKKyAgICAgICAgcmV0dXJuIGNscy5fY3VycmVudF90YXNrcy5nZXQobG9vcCkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBhbGxfdGFza3MoY2xzLCBsb29wPU5vbmUpOgorICAgICAgICAiIiJSZXR1cm4gYSBzZXQgb2YgYWxsIHRhc2tzIGZvciBhbiBldmVudCBsb29wLgorCisgICAgICAgIEJ5IGRlZmF1bHQgYWxsIHRhc2tzIGZvciB0aGUgY3VycmVudCBldmVudCBsb29wIGFyZSByZXR1cm5lZC4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIGxvb3AgaXMgTm9uZToKKyAgICAgICAgICAgIGxvb3AgPSBldmVudHMuZ2V0X2V2ZW50X2xvb3AoKQorICAgICAgICByZXR1cm4ge3QgZm9yIHQgaW4gY2xzLl9hbGxfdGFza3MgaWYgdC5fbG9vcCBpcyBsb29wfQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvcm8sICosIGxvb3A9Tm9uZSk6CisgICAgICAgIGFzc2VydCBjb3JvdXRpbmVzLmlzY29yb3V0aW5lKGNvcm8pLCByZXByKGNvcm8pCisgICAgICAgIHN1cGVyKCkuX19pbml0X18obG9vcD1sb29wKQorICAgICAgICBpZiBzZWxmLl9zb3VyY2VfdHJhY2ViYWNrOgorICAgICAgICAgICAgZGVsIHNlbGYuX3NvdXJjZV90cmFjZWJhY2tbLTFdCisgICAgICAgIHNlbGYuX2Nvcm8gPSBjb3JvCisgICAgICAgIHNlbGYuX2Z1dF93YWl0ZXIgPSBOb25lCisgICAgICAgIHNlbGYuX211c3RfY2FuY2VsID0gRmFsc2UKKyAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24oc2VsZi5fc3RlcCkKKyAgICAgICAgc2VsZi5fX2NsYXNzX18uX2FsbF90YXNrcy5hZGQoc2VsZikKKworICAgICMgT24gUHl0aG9uIDMuMyBvciBvbGRlciwgb2JqZWN0cyB3aXRoIGEgZGVzdHJ1Y3RvciB0aGF0IGFyZSBwYXJ0IG9mIGEKKyAgICAjIHJlZmVyZW5jZSBjeWNsZSBhcmUgbmV2ZXIgZGVzdHJveWVkLiBUaGF0J3Mgbm90IHRoZSBjYXNlIGFueSBtb3JlIG9uCisgICAgIyBQeXRob24gMy40IHRoYW5rcyB0byB0aGUgUEVQIDQ0Mi4KKyAgICBpZiBjb21wYXQuUFkzNDoKKyAgICAgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgICAgICBpZiBzZWxmLl9zdGF0ZSA9PSBmdXR1cmVzLl9QRU5ESU5HIGFuZCBzZWxmLl9sb2dfZGVzdHJveV9wZW5kaW5nOgorICAgICAgICAgICAgICAgIGNvbnRleHQgPSB7CisgICAgICAgICAgICAgICAgICAgICd0YXNrJzogc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgJ21lc3NhZ2UnOiAnVGFzayB3YXMgZGVzdHJveWVkIGJ1dCBpdCBpcyBwZW5kaW5nIScsCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIHNlbGYuX3NvdXJjZV90cmFjZWJhY2s6CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHRbJ3NvdXJjZV90cmFjZWJhY2snXSA9IHNlbGYuX3NvdXJjZV90cmFjZWJhY2sKKyAgICAgICAgICAgICAgICBzZWxmLl9sb29wLmNhbGxfZXhjZXB0aW9uX2hhbmRsZXIoY29udGV4dCkKKyAgICAgICAgICAgIGZ1dHVyZXMuRnV0dXJlLl9fZGVsX18oc2VsZikKKworICAgIGRlZiBfcmVwcl9pbmZvKHNlbGYpOgorICAgICAgICBpbmZvID0gc3VwZXIoKS5fcmVwcl9pbmZvKCkKKworICAgICAgICBpZiBzZWxmLl9tdXN0X2NhbmNlbDoKKyAgICAgICAgICAgICMgcmVwbGFjZSBzdGF0dXMKKyAgICAgICAgICAgIGluZm9bMF0gPSAnY2FuY2VsbGluZycKKworICAgICAgICBjb3JvID0gY29yb3V0aW5lcy5fZm9ybWF0X2Nvcm91dGluZShzZWxmLl9jb3JvKQorICAgICAgICBpbmZvLmluc2VydCgxLCAnY29ybz08JXM+JyAlIGNvcm8pCisKKyAgICAgICAgaWYgc2VsZi5fZnV0X3dhaXRlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGluZm8uaW5zZXJ0KDIsICd3YWl0X2Zvcj0lcicgJSBzZWxmLl9mdXRfd2FpdGVyKQorICAgICAgICByZXR1cm4gaW5mbworCisgICAgZGVmIGdldF9zdGFjayhzZWxmLCAqLCBsaW1pdD1Ob25lKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSBsaXN0IG9mIHN0YWNrIGZyYW1lcyBmb3IgdGhpcyB0YXNrJ3MgY29yb3V0aW5lLgorCisgICAgICAgIElmIHRoZSBjb3JvdXRpbmUgaXMgbm90IGRvbmUsIHRoaXMgcmV0dXJucyB0aGUgc3RhY2sgd2hlcmUgaXQgaXMKKyAgICAgICAgc3VzcGVuZGVkLiAgSWYgdGhlIGNvcm91dGluZSBoYXMgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBvciB3YXMKKyAgICAgICAgY2FuY2VsbGVkLCB0aGlzIHJldHVybnMgYW4gZW1wdHkgbGlzdC4gIElmIHRoZSBjb3JvdXRpbmUgd2FzCisgICAgICAgIHRlcm1pbmF0ZWQgYnkgYW4gZXhjZXB0aW9uLCB0aGlzIHJldHVybnMgdGhlIGxpc3Qgb2YgdHJhY2ViYWNrCisgICAgICAgIGZyYW1lcy4KKworICAgICAgICBUaGUgZnJhbWVzIGFyZSBhbHdheXMgb3JkZXJlZCBmcm9tIG9sZGVzdCB0byBuZXdlc3QuCisKKyAgICAgICAgVGhlIG9wdGlvbmFsIGxpbWl0IGdpdmVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBmcmFtZXMgdG8KKyAgICAgICAgcmV0dXJuOyBieSBkZWZhdWx0IGFsbCBhdmFpbGFibGUgZnJhbWVzIGFyZSByZXR1cm5lZC4gIEl0cworICAgICAgICBtZWFuaW5nIGRpZmZlcnMgZGVwZW5kaW5nIG9uIHdoZXRoZXIgYSBzdGFjayBvciBhIHRyYWNlYmFjayBpcworICAgICAgICByZXR1cm5lZDogdGhlIG5ld2VzdCBmcmFtZXMgb2YgYSBzdGFjayBhcmUgcmV0dXJuZWQsIGJ1dCB0aGUKKyAgICAgICAgb2xkZXN0IGZyYW1lcyBvZiBhIHRyYWNlYmFjayBhcmUgcmV0dXJuZWQuICAoVGhpcyBtYXRjaGVzIHRoZQorICAgICAgICBiZWhhdmlvciBvZiB0aGUgdHJhY2ViYWNrIG1vZHVsZS4pCisKKyAgICAgICAgRm9yIHJlYXNvbnMgYmV5b25kIG91ciBjb250cm9sLCBvbmx5IG9uZSBzdGFjayBmcmFtZSBpcworICAgICAgICByZXR1cm5lZCBmb3IgYSBzdXNwZW5kZWQgY29yb3V0aW5lLgorICAgICAgICAiIiIKKyAgICAgICAgZnJhbWVzID0gW10KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyAnYXN5bmMgZGVmJyBjb3JvdXRpbmVzCisgICAgICAgICAgICBmID0gc2VsZi5fY29yby5jcl9mcmFtZQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBmID0gc2VsZi5fY29yby5naV9mcmFtZQorICAgICAgICBpZiBmIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgd2hpbGUgZiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBpZiBsaW1pdCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgaWYgbGltaXQgPD0gMDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgIGxpbWl0IC09IDEKKyAgICAgICAgICAgICAgICBmcmFtZXMuYXBwZW5kKGYpCisgICAgICAgICAgICAgICAgZiA9IGYuZl9iYWNrCisgICAgICAgICAgICBmcmFtZXMucmV2ZXJzZSgpCisgICAgICAgIGVsaWYgc2VsZi5fZXhjZXB0aW9uIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgdGIgPSBzZWxmLl9leGNlcHRpb24uX190cmFjZWJhY2tfXworICAgICAgICAgICAgd2hpbGUgdGIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgaWYgbGltaXQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGlmIGxpbWl0IDw9IDA6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICBsaW1pdCAtPSAxCisgICAgICAgICAgICAgICAgZnJhbWVzLmFwcGVuZCh0Yi50Yl9mcmFtZSkKKyAgICAgICAgICAgICAgICB0YiA9IHRiLnRiX25leHQKKyAgICAgICAgcmV0dXJuIGZyYW1lcworCisgICAgZGVmIHByaW50X3N0YWNrKHNlbGYsICosIGxpbWl0PU5vbmUsIGZpbGU9Tm9uZSk6CisgICAgICAgICIiIlByaW50IHRoZSBzdGFjayBvciB0cmFjZWJhY2sgZm9yIHRoaXMgdGFzaydzIGNvcm91dGluZS4KKworICAgICAgICBUaGlzIHByb2R1Y2VzIG91dHB1dCBzaW1pbGFyIHRvIHRoYXQgb2YgdGhlIHRyYWNlYmFjayBtb2R1bGUsCisgICAgICAgIGZvciB0aGUgZnJhbWVzIHJldHJpZXZlZCBieSBnZXRfc3RhY2soKS4gIFRoZSBsaW1pdCBhcmd1bWVudAorICAgICAgICBpcyBwYXNzZWQgdG8gZ2V0X3N0YWNrKCkuICBUaGUgZmlsZSBhcmd1bWVudCBpcyBhbiBJL08gc3RyZWFtCisgICAgICAgIHRvIHdoaWNoIHRoZSBvdXRwdXQgaXMgd3JpdHRlbjsgYnkgZGVmYXVsdCBvdXRwdXQgaXMgd3JpdHRlbgorICAgICAgICB0byBzeXMuc3RkZXJyLgorICAgICAgICAiIiIKKyAgICAgICAgZXh0cmFjdGVkX2xpc3QgPSBbXQorICAgICAgICBjaGVja2VkID0gc2V0KCkKKyAgICAgICAgZm9yIGYgaW4gc2VsZi5nZXRfc3RhY2sobGltaXQ9bGltaXQpOgorICAgICAgICAgICAgbGluZW5vID0gZi5mX2xpbmVubworICAgICAgICAgICAgY28gPSBmLmZfY29kZQorICAgICAgICAgICAgZmlsZW5hbWUgPSBjby5jb19maWxlbmFtZQorICAgICAgICAgICAgbmFtZSA9IGNvLmNvX25hbWUKKyAgICAgICAgICAgIGlmIGZpbGVuYW1lIG5vdCBpbiBjaGVja2VkOgorICAgICAgICAgICAgICAgIGNoZWNrZWQuYWRkKGZpbGVuYW1lKQorICAgICAgICAgICAgICAgIGxpbmVjYWNoZS5jaGVja2NhY2hlKGZpbGVuYW1lKQorICAgICAgICAgICAgbGluZSA9IGxpbmVjYWNoZS5nZXRsaW5lKGZpbGVuYW1lLCBsaW5lbm8sIGYuZl9nbG9iYWxzKQorICAgICAgICAgICAgZXh0cmFjdGVkX2xpc3QuYXBwZW5kKChmaWxlbmFtZSwgbGluZW5vLCBuYW1lLCBsaW5lKSkKKyAgICAgICAgZXhjID0gc2VsZi5fZXhjZXB0aW9uCisgICAgICAgIGlmIG5vdCBleHRyYWN0ZWRfbGlzdDoKKyAgICAgICAgICAgIHByaW50KCdObyBzdGFjayBmb3IgJXInICUgc2VsZiwgZmlsZT1maWxlKQorICAgICAgICBlbGlmIGV4YyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHByaW50KCdUcmFjZWJhY2sgZm9yICVyIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOicgJSBzZWxmLAorICAgICAgICAgICAgICAgICAgZmlsZT1maWxlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQoJ1N0YWNrIGZvciAlciAobW9zdCByZWNlbnQgY2FsbCBsYXN0KTonICUgc2VsZiwKKyAgICAgICAgICAgICAgICAgIGZpbGU9ZmlsZSkKKyAgICAgICAgdHJhY2ViYWNrLnByaW50X2xpc3QoZXh0cmFjdGVkX2xpc3QsIGZpbGU9ZmlsZSkKKyAgICAgICAgaWYgZXhjIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gdHJhY2ViYWNrLmZvcm1hdF9leGNlcHRpb25fb25seShleGMuX19jbGFzc19fLCBleGMpOgorICAgICAgICAgICAgICAgIHByaW50KGxpbmUsIGZpbGU9ZmlsZSwgZW5kPScnKQorCisgICAgZGVmIGNhbmNlbChzZWxmKToKKyAgICAgICAgIiIiUmVxdWVzdCB0aGF0IHRoaXMgdGFzayBjYW5jZWwgaXRzZWxmLgorCisgICAgICAgIFRoaXMgYXJyYW5nZXMgZm9yIGEgQ2FuY2VsbGVkRXJyb3IgdG8gYmUgdGhyb3duIGludG8gdGhlCisgICAgICAgIHdyYXBwZWQgY29yb3V0aW5lIG9uIHRoZSBuZXh0IGN5Y2xlIHRocm91Z2ggdGhlIGV2ZW50IGxvb3AuCisgICAgICAgIFRoZSBjb3JvdXRpbmUgdGhlbiBoYXMgYSBjaGFuY2UgdG8gY2xlYW4gdXAgb3IgZXZlbiBkZW55CisgICAgICAgIHRoZSByZXF1ZXN0IHVzaW5nIHRyeS9leGNlcHQvZmluYWxseS4KKworICAgICAgICBVbmxpa2UgRnV0dXJlLmNhbmNlbCwgdGhpcyBkb2VzIG5vdCBndWFyYW50ZWUgdGhhdCB0aGUKKyAgICAgICAgdGFzayB3aWxsIGJlIGNhbmNlbGxlZDogdGhlIGV4Y2VwdGlvbiBtaWdodCBiZSBjYXVnaHQgYW5kCisgICAgICAgIGFjdGVkIHVwb24sIGRlbGF5aW5nIGNhbmNlbGxhdGlvbiBvZiB0aGUgdGFzayBvciBwcmV2ZW50aW5nCisgICAgICAgIGNhbmNlbGxhdGlvbiBjb21wbGV0ZWx5LiAgVGhlIHRhc2sgbWF5IGFsc28gcmV0dXJuIGEgdmFsdWUgb3IKKyAgICAgICAgcmFpc2UgYSBkaWZmZXJlbnQgZXhjZXB0aW9uLgorCisgICAgICAgIEltbWVkaWF0ZWx5IGFmdGVyIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCwgVGFzay5jYW5jZWxsZWQoKSB3aWxsCisgICAgICAgIG5vdCByZXR1cm4gVHJ1ZSAodW5sZXNzIHRoZSB0YXNrIHdhcyBhbHJlYWR5IGNhbmNlbGxlZCkuICBBCisgICAgICAgIHRhc2sgd2lsbCBiZSBtYXJrZWQgYXMgY2FuY2VsbGVkIHdoZW4gdGhlIHdyYXBwZWQgY29yb3V0aW5lCisgICAgICAgIHRlcm1pbmF0ZXMgd2l0aCBhIENhbmNlbGxlZEVycm9yIGV4Y2VwdGlvbiAoZXZlbiBpZiBjYW5jZWwoKQorICAgICAgICB3YXMgbm90IGNhbGxlZCkuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLmRvbmUoKToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBpZiBzZWxmLl9mdXRfd2FpdGVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgaWYgc2VsZi5fZnV0X3dhaXRlci5jYW5jZWwoKToKKyAgICAgICAgICAgICAgICAjIExlYXZlIHNlbGYuX2Z1dF93YWl0ZXI7IGl0IG1heSBiZSBhIFRhc2sgdGhhdAorICAgICAgICAgICAgICAgICMgY2F0Y2hlcyBhbmQgaWdub3JlcyB0aGUgY2FuY2VsbGF0aW9uIHNvIHdlIG1heSBoYXZlCisgICAgICAgICAgICAgICAgIyB0byBjYW5jZWwgaXQgYWdhaW4gbGF0ZXIuCisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgIyBJdCBtdXN0IGJlIHRoZSBjYXNlIHRoYXQgc2VsZi5fc3RlcCBpcyBhbHJlYWR5IHNjaGVkdWxlZC4KKyAgICAgICAgc2VsZi5fbXVzdF9jYW5jZWwgPSBUcnVlCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgX3N0ZXAoc2VsZiwgZXhjPU5vbmUpOgorICAgICAgICBhc3NlcnQgbm90IHNlbGYuZG9uZSgpLCBcCisgICAgICAgICAgICAnX3N0ZXAoKTogYWxyZWFkeSBkb25lOiB7IXJ9LCB7IXJ9Jy5mb3JtYXQoc2VsZiwgZXhjKQorICAgICAgICBpZiBzZWxmLl9tdXN0X2NhbmNlbDoKKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGV4YywgZnV0dXJlcy5DYW5jZWxsZWRFcnJvcik6CisgICAgICAgICAgICAgICAgZXhjID0gZnV0dXJlcy5DYW5jZWxsZWRFcnJvcigpCisgICAgICAgICAgICBzZWxmLl9tdXN0X2NhbmNlbCA9IEZhbHNlCisgICAgICAgIGNvcm8gPSBzZWxmLl9jb3JvCisgICAgICAgIHNlbGYuX2Z1dF93YWl0ZXIgPSBOb25lCisKKyAgICAgICAgc2VsZi5fX2NsYXNzX18uX2N1cnJlbnRfdGFza3Nbc2VsZi5fbG9vcF0gPSBzZWxmCisgICAgICAgICMgQ2FsbCBlaXRoZXIgY29yby50aHJvdyhleGMpIG9yIGNvcm8uc2VuZChOb25lKS4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgZXhjIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgIyBXZSB1c2UgdGhlIGBzZW5kYCBtZXRob2QgZGlyZWN0bHksIGJlY2F1c2UgY29yb3V0aW5lcworICAgICAgICAgICAgICAgICMgZG9uJ3QgaGF2ZSBgX19pdGVyX19gIGFuZCBgX19uZXh0X19gIG1ldGhvZHMuCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gY29yby5zZW5kKE5vbmUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNvcm8udGhyb3coZXhjKQorICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbiBhcyBleGM6CisgICAgICAgICAgICBzZWxmLnNldF9yZXN1bHQoZXhjLnZhbHVlKQorICAgICAgICBleGNlcHQgZnV0dXJlcy5DYW5jZWxsZWRFcnJvciBhcyBleGM6CisgICAgICAgICAgICBzdXBlcigpLmNhbmNlbCgpICAjIEkuZS4sIEZ1dHVyZS5jYW5jZWwoc2VsZikuCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgc2VsZi5zZXRfZXhjZXB0aW9uKGV4YykKKyAgICAgICAgZXhjZXB0IEJhc2VFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgc2VsZi5zZXRfZXhjZXB0aW9uKGV4YykKKyAgICAgICAgICAgIHJhaXNlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHJlc3VsdCwgZnV0dXJlcy5GdXR1cmUpOgorICAgICAgICAgICAgICAgICMgWWllbGRlZCBGdXR1cmUgbXVzdCBjb21lIGZyb20gRnV0dXJlLl9faXRlcl9fKCkuCisgICAgICAgICAgICAgICAgaWYgcmVzdWx0Ll9sb29wIGlzIG5vdCBzZWxmLl9sb29wOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbigKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3N0ZXAsCisgICAgICAgICAgICAgICAgICAgICAgICBSdW50aW1lRXJyb3IoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1Rhc2sgeyFyfSBnb3QgRnV0dXJlIHshcn0gYXR0YWNoZWQgdG8gYSAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RpZmZlcmVudCBsb29wJy5mb3JtYXQoc2VsZiwgcmVzdWx0KSkpCisgICAgICAgICAgICAgICAgZWxpZiByZXN1bHQuX2Jsb2NraW5nOgorICAgICAgICAgICAgICAgICAgICByZXN1bHQuX2Jsb2NraW5nID0gRmFsc2UKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFkZF9kb25lX2NhbGxiYWNrKHNlbGYuX3dha2V1cCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fZnV0X3dhaXRlciA9IHJlc3VsdAorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLl9tdXN0X2NhbmNlbDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuX2Z1dF93YWl0ZXIuY2FuY2VsKCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fbXVzdF9jYW5jZWwgPSBGYWxzZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fc3RlcCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFJ1bnRpbWVFcnJvcigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAneWllbGQgd2FzIHVzZWQgaW5zdGVhZCBvZiB5aWVsZCBmcm9tICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW4gdGFzayB7IXJ9IHdpdGggeyFyfScuZm9ybWF0KHNlbGYsIHJlc3VsdCkpKQorICAgICAgICAgICAgZWxpZiByZXN1bHQgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAjIEJhcmUgeWllbGQgcmVsaW5xdWlzaGVzIGNvbnRyb2wgZm9yIG9uZSBldmVudCBsb29wIGl0ZXJhdGlvbi4KKyAgICAgICAgICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbihzZWxmLl9zdGVwKQorICAgICAgICAgICAgZWxpZiBpbnNwZWN0LmlzZ2VuZXJhdG9yKHJlc3VsdCk6CisgICAgICAgICAgICAgICAgIyBZaWVsZGluZyBhIGdlbmVyYXRvciBpcyBqdXN0IHdyb25nLgorICAgICAgICAgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKAorICAgICAgICAgICAgICAgICAgICBzZWxmLl9zdGVwLAorICAgICAgICAgICAgICAgICAgICBSdW50aW1lRXJyb3IoCisgICAgICAgICAgICAgICAgICAgICAgICAneWllbGQgd2FzIHVzZWQgaW5zdGVhZCBvZiB5aWVsZCBmcm9tIGZvciAnCisgICAgICAgICAgICAgICAgICAgICAgICAnZ2VuZXJhdG9yIGluIHRhc2sgeyFyfSB3aXRoIHt9Jy5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZiwgcmVzdWx0KSkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgWWllbGRpbmcgc29tZXRoaW5nIGVsc2UgaXMgYW4gZXJyb3IuCisgICAgICAgICAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24oCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3N0ZXAsCisgICAgICAgICAgICAgICAgICAgIFJ1bnRpbWVFcnJvcigKKyAgICAgICAgICAgICAgICAgICAgICAgICdUYXNrIGdvdCBiYWQgeWllbGQ6IHshcn0nLmZvcm1hdChyZXN1bHQpKSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYuX19jbGFzc19fLl9jdXJyZW50X3Rhc2tzLnBvcChzZWxmLl9sb29wKQorICAgICAgICAgICAgc2VsZiA9IE5vbmUgICMgTmVlZGVkIHRvIGJyZWFrIGN5Y2xlcyB3aGVuIGFuIGV4Y2VwdGlvbiBvY2N1cnMuCisKKyAgICBkZWYgX3dha2V1cChzZWxmLCBmdXR1cmUpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBmdXR1cmUucmVzdWx0KCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICAjIFRoaXMgbWF5IGFsc28gYmUgYSBjYW5jZWxsYXRpb24uCisgICAgICAgICAgICBzZWxmLl9zdGVwKGV4YykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgRG9uJ3QgcGFzcyB0aGUgdmFsdWUgb2YgYGZ1dHVyZS5yZXN1bHQoKWAgZXhwbGljaXRseSwKKyAgICAgICAgICAgICMgYXMgYEZ1dHVyZS5fX2l0ZXJfX2AgYW5kIGBGdXR1cmUuX19hd2FpdF9fYCBkb24ndCBuZWVkIGl0LgorICAgICAgICAgICAgIyBJZiB3ZSBjYWxsIGBfc3RlcCh2YWx1ZSwgTm9uZSlgIGluc3RlYWQgb2YgYF9zdGVwKClgLAorICAgICAgICAgICAgIyBQeXRob24gZXZhbCBsb29wIHdvdWxkIHVzZSBgLnNlbmQodmFsdWUpYCBtZXRob2QgY2FsbCwKKyAgICAgICAgICAgICMgaW5zdGVhZCBvZiBgX19uZXh0X18oKWAsIHdoaWNoIGlzIHNsb3dlciBmb3IgZnV0dXJlcworICAgICAgICAgICAgIyB0aGF0IHJldHVybiBub24tZ2VuZXJhdG9yIGl0ZXJhdG9ycyBmcm9tIHRoZWlyIGBfX2l0ZXJfX2AuCisgICAgICAgICAgICBzZWxmLl9zdGVwKCkKKyAgICAgICAgc2VsZiA9IE5vbmUgICMgTmVlZGVkIHRvIGJyZWFrIGN5Y2xlcyB3aGVuIGFuIGV4Y2VwdGlvbiBvY2N1cnMuCisKKworIyB3YWl0KCkgYW5kIGFzX2NvbXBsZXRlZCgpIHNpbWlsYXIgdG8gdGhvc2UgaW4gUEVQIDMxNDguCisKK0ZJUlNUX0NPTVBMRVRFRCA9IGNvbmN1cnJlbnQuZnV0dXJlcy5GSVJTVF9DT01QTEVURUQKK0ZJUlNUX0VYQ0VQVElPTiA9IGNvbmN1cnJlbnQuZnV0dXJlcy5GSVJTVF9FWENFUFRJT04KK0FMTF9DT01QTEVURUQgPSBjb25jdXJyZW50LmZ1dHVyZXMuQUxMX0NPTVBMRVRFRAorCisKK0Bjb3JvdXRpbmUKK2RlZiB3YWl0KGZzLCAqLCBsb29wPU5vbmUsIHRpbWVvdXQ9Tm9uZSwgcmV0dXJuX3doZW49QUxMX0NPTVBMRVRFRCk6CisgICAgIiIiV2FpdCBmb3IgdGhlIEZ1dHVyZXMgYW5kIGNvcm91dGluZXMgZ2l2ZW4gYnkgZnMgdG8gY29tcGxldGUuCisKKyAgICBUaGUgc2VxdWVuY2UgZnV0dXJlcyBtdXN0IG5vdCBiZSBlbXB0eS4KKworICAgIENvcm91dGluZXMgd2lsbCBiZSB3cmFwcGVkIGluIFRhc2tzLgorCisgICAgUmV0dXJucyB0d28gc2V0cyBvZiBGdXR1cmU6IChkb25lLCBwZW5kaW5nKS4KKworICAgIFVzYWdlOgorCisgICAgICAgIGRvbmUsIHBlbmRpbmcgPSB5aWVsZCBmcm9tIGFzeW5jaW8ud2FpdChmcykKKworICAgIE5vdGU6IFRoaXMgZG9lcyBub3QgcmFpc2UgVGltZW91dEVycm9yISBGdXR1cmVzIHRoYXQgYXJlbid0IGRvbmUKKyAgICB3aGVuIHRoZSB0aW1lb3V0IG9jY3VycyBhcmUgcmV0dXJuZWQgaW4gdGhlIHNlY29uZCBzZXQuCisgICAgIiIiCisgICAgaWYgaXNpbnN0YW5jZShmcywgZnV0dXJlcy5GdXR1cmUpIG9yIGNvcm91dGluZXMuaXNjb3JvdXRpbmUoZnMpOgorICAgICAgICByYWlzZSBUeXBlRXJyb3IoImV4cGVjdCBhIGxpc3Qgb2YgZnV0dXJlcywgbm90ICVzIiAlIHR5cGUoZnMpLl9fbmFtZV9fKQorICAgIGlmIG5vdCBmczoKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignU2V0IG9mIGNvcm91dGluZXMvRnV0dXJlcyBpcyBlbXB0eS4nKQorICAgIGlmIHJldHVybl93aGVuIG5vdCBpbiAoRklSU1RfQ09NUExFVEVELCBGSVJTVF9FWENFUFRJT04sIEFMTF9DT01QTEVURUQpOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdJbnZhbGlkIHJldHVybl93aGVuIHZhbHVlOiB7fScuZm9ybWF0KHJldHVybl93aGVuKSkKKworICAgIGlmIGxvb3AgaXMgTm9uZToKKyAgICAgICAgbG9vcCA9IGV2ZW50cy5nZXRfZXZlbnRfbG9vcCgpCisKKyAgICBmcyA9IHtlbnN1cmVfZnV0dXJlKGYsIGxvb3A9bG9vcCkgZm9yIGYgaW4gc2V0KGZzKX0KKworICAgIHJldHVybiAoeWllbGQgZnJvbSBfd2FpdChmcywgdGltZW91dCwgcmV0dXJuX3doZW4sIGxvb3ApKQorCisKK2RlZiBfcmVsZWFzZV93YWl0ZXIod2FpdGVyLCAqYXJncyk6CisgICAgaWYgbm90IHdhaXRlci5kb25lKCk6CisgICAgICAgIHdhaXRlci5zZXRfcmVzdWx0KE5vbmUpCisKKworQGNvcm91dGluZQorZGVmIHdhaXRfZm9yKGZ1dCwgdGltZW91dCwgKiwgbG9vcD1Ob25lKToKKyAgICAiIiJXYWl0IGZvciB0aGUgc2luZ2xlIEZ1dHVyZSBvciBjb3JvdXRpbmUgdG8gY29tcGxldGUsIHdpdGggdGltZW91dC4KKworICAgIENvcm91dGluZSB3aWxsIGJlIHdyYXBwZWQgaW4gVGFzay4KKworICAgIFJldHVybnMgcmVzdWx0IG9mIHRoZSBGdXR1cmUgb3IgY29yb3V0aW5lLiAgV2hlbiBhIHRpbWVvdXQgb2NjdXJzLAorICAgIGl0IGNhbmNlbHMgdGhlIHRhc2sgYW5kIHJhaXNlcyBUaW1lb3V0RXJyb3IuICBUbyBhdm9pZCB0aGUgdGFzaworICAgIGNhbmNlbGxhdGlvbiwgd3JhcCBpdCBpbiBzaGllbGQoKS4KKworICAgIElmIHRoZSB3YWl0IGlzIGNhbmNlbGxlZCwgdGhlIHRhc2sgaXMgYWxzbyBjYW5jZWxsZWQuCisKKyAgICBUaGlzIGZ1bmN0aW9uIGlzIGEgY29yb3V0aW5lLgorICAgICIiIgorICAgIGlmIGxvb3AgaXMgTm9uZToKKyAgICAgICAgbG9vcCA9IGV2ZW50cy5nZXRfZXZlbnRfbG9vcCgpCisKKyAgICBpZiB0aW1lb3V0IGlzIE5vbmU6CisgICAgICAgIHJldHVybiAoeWllbGQgZnJvbSBmdXQpCisKKyAgICB3YWl0ZXIgPSBmdXR1cmVzLkZ1dHVyZShsb29wPWxvb3ApCisgICAgdGltZW91dF9oYW5kbGUgPSBsb29wLmNhbGxfbGF0ZXIodGltZW91dCwgX3JlbGVhc2Vfd2FpdGVyLCB3YWl0ZXIpCisgICAgY2IgPSBmdW5jdG9vbHMucGFydGlhbChfcmVsZWFzZV93YWl0ZXIsIHdhaXRlcikKKworICAgIGZ1dCA9IGVuc3VyZV9mdXR1cmUoZnV0LCBsb29wPWxvb3ApCisgICAgZnV0LmFkZF9kb25lX2NhbGxiYWNrKGNiKQorCisgICAgdHJ5OgorICAgICAgICAjIHdhaXQgdW50aWwgdGhlIGZ1dHVyZSBjb21wbGV0ZXMgb3IgdGhlIHRpbWVvdXQKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgeWllbGQgZnJvbSB3YWl0ZXIKKyAgICAgICAgZXhjZXB0IGZ1dHVyZXMuQ2FuY2VsbGVkRXJyb3I6CisgICAgICAgICAgICBmdXQucmVtb3ZlX2RvbmVfY2FsbGJhY2soY2IpCisgICAgICAgICAgICBmdXQuY2FuY2VsKCkKKyAgICAgICAgICAgIHJhaXNlCisKKyAgICAgICAgaWYgZnV0LmRvbmUoKToKKyAgICAgICAgICAgIHJldHVybiBmdXQucmVzdWx0KCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZ1dC5yZW1vdmVfZG9uZV9jYWxsYmFjayhjYikKKyAgICAgICAgICAgIGZ1dC5jYW5jZWwoKQorICAgICAgICAgICAgcmFpc2UgZnV0dXJlcy5UaW1lb3V0RXJyb3IoKQorICAgIGZpbmFsbHk6CisgICAgICAgIHRpbWVvdXRfaGFuZGxlLmNhbmNlbCgpCisKKworQGNvcm91dGluZQorZGVmIF93YWl0KGZzLCB0aW1lb3V0LCByZXR1cm5fd2hlbiwgbG9vcCk6CisgICAgIiIiSW50ZXJuYWwgaGVscGVyIGZvciB3YWl0KCkgYW5kIF93YWl0X2ZvcigpLgorCisgICAgVGhlIGZzIGFyZ3VtZW50IG11c3QgYmUgYSBjb2xsZWN0aW9uIG9mIEZ1dHVyZXMuCisgICAgIiIiCisgICAgYXNzZXJ0IGZzLCAnU2V0IG9mIEZ1dHVyZXMgaXMgZW1wdHkuJworICAgIHdhaXRlciA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9bG9vcCkKKyAgICB0aW1lb3V0X2hhbmRsZSA9IE5vbmUKKyAgICBpZiB0aW1lb3V0IGlzIG5vdCBOb25lOgorICAgICAgICB0aW1lb3V0X2hhbmRsZSA9IGxvb3AuY2FsbF9sYXRlcih0aW1lb3V0LCBfcmVsZWFzZV93YWl0ZXIsIHdhaXRlcikKKyAgICBjb3VudGVyID0gbGVuKGZzKQorCisgICAgZGVmIF9vbl9jb21wbGV0aW9uKGYpOgorICAgICAgICBub25sb2NhbCBjb3VudGVyCisgICAgICAgIGNvdW50ZXIgLT0gMQorICAgICAgICBpZiAoY291bnRlciA8PSAwIG9yCisgICAgICAgICAgICByZXR1cm5fd2hlbiA9PSBGSVJTVF9DT01QTEVURUQgb3IKKyAgICAgICAgICAgIHJldHVybl93aGVuID09IEZJUlNUX0VYQ0VQVElPTiBhbmQgKG5vdCBmLmNhbmNlbGxlZCgpIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZi5leGNlcHRpb24oKSBpcyBub3QgTm9uZSkpOgorICAgICAgICAgICAgaWYgdGltZW91dF9oYW5kbGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgdGltZW91dF9oYW5kbGUuY2FuY2VsKCkKKyAgICAgICAgICAgIGlmIG5vdCB3YWl0ZXIuZG9uZSgpOgorICAgICAgICAgICAgICAgIHdhaXRlci5zZXRfcmVzdWx0KE5vbmUpCisKKyAgICBmb3IgZiBpbiBmczoKKyAgICAgICAgZi5hZGRfZG9uZV9jYWxsYmFjayhfb25fY29tcGxldGlvbikKKworICAgIHRyeToKKyAgICAgICAgeWllbGQgZnJvbSB3YWl0ZXIKKyAgICBmaW5hbGx5OgorICAgICAgICBpZiB0aW1lb3V0X2hhbmRsZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHRpbWVvdXRfaGFuZGxlLmNhbmNlbCgpCisKKyAgICBkb25lLCBwZW5kaW5nID0gc2V0KCksIHNldCgpCisgICAgZm9yIGYgaW4gZnM6CisgICAgICAgIGYucmVtb3ZlX2RvbmVfY2FsbGJhY2soX29uX2NvbXBsZXRpb24pCisgICAgICAgIGlmIGYuZG9uZSgpOgorICAgICAgICAgICAgZG9uZS5hZGQoZikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBlbmRpbmcuYWRkKGYpCisgICAgcmV0dXJuIGRvbmUsIHBlbmRpbmcKKworCisjIFRoaXMgaXMgKm5vdCogYSBAY29yb3V0aW5lISAgSXQgaXMganVzdCBhbiBpdGVyYXRvciAoeWllbGRpbmcgRnV0dXJlcykuCitkZWYgYXNfY29tcGxldGVkKGZzLCAqLCBsb29wPU5vbmUsIHRpbWVvdXQ9Tm9uZSk6CisgICAgIiIiUmV0dXJuIGFuIGl0ZXJhdG9yIHdob3NlIHZhbHVlcyBhcmUgY29yb3V0aW5lcy4KKworICAgIFdoZW4gd2FpdGluZyBmb3IgdGhlIHlpZWxkZWQgY29yb3V0aW5lcyB5b3UnbGwgZ2V0IHRoZSByZXN1bHRzIChvcgorICAgIGV4Y2VwdGlvbnMhKSBvZiB0aGUgb3JpZ2luYWwgRnV0dXJlcyAob3IgY29yb3V0aW5lcyksIGluIHRoZSBvcmRlcgorICAgIGluIHdoaWNoIGFuZCBhcyBzb29uIGFzIHRoZXkgY29tcGxldGUuCisKKyAgICBUaGlzIGRpZmZlcnMgZnJvbSBQRVAgMzE0ODsgdGhlIHByb3BlciB3YXkgdG8gdXNlIHRoaXMgaXM6CisKKyAgICAgICAgZm9yIGYgaW4gYXNfY29tcGxldGVkKGZzKToKKyAgICAgICAgICAgIHJlc3VsdCA9IHlpZWxkIGZyb20gZiAgIyBUaGUgJ3lpZWxkIGZyb20nIG1heSByYWlzZS4KKyAgICAgICAgICAgICMgVXNlIHJlc3VsdC4KKworICAgIElmIGEgdGltZW91dCBpcyBzcGVjaWZpZWQsIHRoZSAneWllbGQgZnJvbScgd2lsbCByYWlzZQorICAgIFRpbWVvdXRFcnJvciB3aGVuIHRoZSB0aW1lb3V0IG9jY3VycyBiZWZvcmUgYWxsIEZ1dHVyZXMgYXJlIGRvbmUuCisKKyAgICBOb3RlOiBUaGUgZnV0dXJlcyAnZicgYXJlIG5vdCBuZWNlc3NhcmlseSBtZW1iZXJzIG9mIGZzLgorICAgICIiIgorICAgIGlmIGlzaW5zdGFuY2UoZnMsIGZ1dHVyZXMuRnV0dXJlKSBvciBjb3JvdXRpbmVzLmlzY29yb3V0aW5lKGZzKToKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJleHBlY3QgYSBsaXN0IG9mIGZ1dHVyZXMsIG5vdCAlcyIgJSB0eXBlKGZzKS5fX25hbWVfXykKKyAgICBsb29wID0gbG9vcCBpZiBsb29wIGlzIG5vdCBOb25lIGVsc2UgZXZlbnRzLmdldF9ldmVudF9sb29wKCkKKyAgICB0b2RvID0ge2Vuc3VyZV9mdXR1cmUoZiwgbG9vcD1sb29wKSBmb3IgZiBpbiBzZXQoZnMpfQorICAgIGZyb20gLnF1ZXVlcyBpbXBvcnQgUXVldWUgICMgSW1wb3J0IGhlcmUgdG8gYXZvaWQgY2lyY3VsYXIgaW1wb3J0IHByb2JsZW0uCisgICAgZG9uZSA9IFF1ZXVlKGxvb3A9bG9vcCkKKyAgICB0aW1lb3V0X2hhbmRsZSA9IE5vbmUKKworICAgIGRlZiBfb25fdGltZW91dCgpOgorICAgICAgICBmb3IgZiBpbiB0b2RvOgorICAgICAgICAgICAgZi5yZW1vdmVfZG9uZV9jYWxsYmFjayhfb25fY29tcGxldGlvbikKKyAgICAgICAgICAgIGRvbmUucHV0X25vd2FpdChOb25lKSAgIyBRdWV1ZSBhIGR1bW15IHZhbHVlIGZvciBfd2FpdF9mb3Jfb25lKCkuCisgICAgICAgIHRvZG8uY2xlYXIoKSAgIyBDYW4ndCBkbyB0b2RvLnJlbW92ZShmKSBpbiB0aGUgbG9vcC4KKworICAgIGRlZiBfb25fY29tcGxldGlvbihmKToKKyAgICAgICAgaWYgbm90IHRvZG86CisgICAgICAgICAgICByZXR1cm4gICMgX29uX3RpbWVvdXQoKSB3YXMgaGVyZSBmaXJzdC4KKyAgICAgICAgdG9kby5yZW1vdmUoZikKKyAgICAgICAgZG9uZS5wdXRfbm93YWl0KGYpCisgICAgICAgIGlmIG5vdCB0b2RvIGFuZCB0aW1lb3V0X2hhbmRsZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHRpbWVvdXRfaGFuZGxlLmNhbmNlbCgpCisKKyAgICBAY29yb3V0aW5lCisgICAgZGVmIF93YWl0X2Zvcl9vbmUoKToKKyAgICAgICAgZiA9IHlpZWxkIGZyb20gZG9uZS5nZXQoKQorICAgICAgICBpZiBmIGlzIE5vbmU6CisgICAgICAgICAgICAjIER1bW15IHZhbHVlIGZyb20gX29uX3RpbWVvdXQoKS4KKyAgICAgICAgICAgIHJhaXNlIGZ1dHVyZXMuVGltZW91dEVycm9yCisgICAgICAgIHJldHVybiBmLnJlc3VsdCgpICAjIE1heSByYWlzZSBmLmV4Y2VwdGlvbigpLgorCisgICAgZm9yIGYgaW4gdG9kbzoKKyAgICAgICAgZi5hZGRfZG9uZV9jYWxsYmFjayhfb25fY29tcGxldGlvbikKKyAgICBpZiB0b2RvIGFuZCB0aW1lb3V0IGlzIG5vdCBOb25lOgorICAgICAgICB0aW1lb3V0X2hhbmRsZSA9IGxvb3AuY2FsbF9sYXRlcih0aW1lb3V0LCBfb25fdGltZW91dCkKKyAgICBmb3IgXyBpbiByYW5nZShsZW4odG9kbykpOgorICAgICAgICB5aWVsZCBfd2FpdF9mb3Jfb25lKCkKKworCitAY29yb3V0aW5lCitkZWYgc2xlZXAoZGVsYXksIHJlc3VsdD1Ob25lLCAqLCBsb29wPU5vbmUpOgorICAgICIiIkNvcm91dGluZSB0aGF0IGNvbXBsZXRlcyBhZnRlciBhIGdpdmVuIHRpbWUgKGluIHNlY29uZHMpLiIiIgorICAgIGlmIGRlbGF5ID09IDA6CisgICAgICAgIHlpZWxkCisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgIGZ1dHVyZSA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9bG9vcCkKKyAgICBoID0gZnV0dXJlLl9sb29wLmNhbGxfbGF0ZXIoZGVsYXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1dHVyZXMuX3NldF9yZXN1bHRfdW5sZXNzX2NhbmNlbGxlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnV0dXJlLCByZXN1bHQpCisgICAgdHJ5OgorICAgICAgICByZXR1cm4gKHlpZWxkIGZyb20gZnV0dXJlKQorICAgIGZpbmFsbHk6CisgICAgICAgIGguY2FuY2VsKCkKKworCitkZWYgYXN5bmMoY29yb19vcl9mdXR1cmUsICosIGxvb3A9Tm9uZSk6CisgICAgIiIiV3JhcCBhIGNvcm91dGluZSBpbiBhIGZ1dHVyZS4KKworICAgIElmIHRoZSBhcmd1bWVudCBpcyBhIEZ1dHVyZSwgaXQgaXMgcmV0dXJuZWQgZGlyZWN0bHkuCisKKyAgICBUaGlzIGZ1bmN0aW9uIGlzIGRlcHJlY2F0ZWQgaW4gMy41LiBVc2UgYXN5bmNpby5lbnN1cmVfZnV0dXJlKCkgaW5zdGVhZC4KKyAgICAiIiIKKworICAgIHdhcm5pbmdzLndhcm4oImFzeW5jaW8uYXN5bmMoKSBmdW5jdGlvbiBpcyBkZXByZWNhdGVkLCB1c2UgZW5zdXJlX2Z1dHVyZSgpIiwKKyAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZykKKworICAgIHJldHVybiBlbnN1cmVfZnV0dXJlKGNvcm9fb3JfZnV0dXJlLCBsb29wPWxvb3ApCisKKworZGVmIGVuc3VyZV9mdXR1cmUoY29yb19vcl9mdXR1cmUsICosIGxvb3A9Tm9uZSk6CisgICAgIiIiV3JhcCBhIGNvcm91dGluZSBvciBhbiBhd2FpdGFibGUgaW4gYSBmdXR1cmUuCisKKyAgICBJZiB0aGUgYXJndW1lbnQgaXMgYSBGdXR1cmUsIGl0IGlzIHJldHVybmVkIGRpcmVjdGx5LgorICAgICIiIgorICAgIGlmIGlzaW5zdGFuY2UoY29yb19vcl9mdXR1cmUsIGZ1dHVyZXMuRnV0dXJlKToKKyAgICAgICAgaWYgbG9vcCBpcyBub3QgTm9uZSBhbmQgbG9vcCBpcyBub3QgY29yb19vcl9mdXR1cmUuX2xvb3A6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdsb29wIGFyZ3VtZW50IG11c3QgYWdyZWUgd2l0aCBGdXR1cmUnKQorICAgICAgICByZXR1cm4gY29yb19vcl9mdXR1cmUKKyAgICBlbGlmIGNvcm91dGluZXMuaXNjb3JvdXRpbmUoY29yb19vcl9mdXR1cmUpOgorICAgICAgICBpZiBsb29wIGlzIE5vbmU6CisgICAgICAgICAgICBsb29wID0gZXZlbnRzLmdldF9ldmVudF9sb29wKCkKKyAgICAgICAgdGFzayA9IGxvb3AuY3JlYXRlX3Rhc2soY29yb19vcl9mdXR1cmUpCisgICAgICAgIGlmIHRhc2suX3NvdXJjZV90cmFjZWJhY2s6CisgICAgICAgICAgICBkZWwgdGFzay5fc291cmNlX3RyYWNlYmFja1stMV0KKyAgICAgICAgcmV0dXJuIHRhc2sKKyAgICBlbGlmIGNvbXBhdC5QWTM1IGFuZCBpbnNwZWN0LmlzYXdhaXRhYmxlKGNvcm9fb3JfZnV0dXJlKToKKyAgICAgICAgcmV0dXJuIGVuc3VyZV9mdXR1cmUoX3dyYXBfYXdhaXRhYmxlKGNvcm9fb3JfZnV0dXJlKSwgbG9vcD1sb29wKQorICAgIGVsc2U6CisgICAgICAgIHJhaXNlIFR5cGVFcnJvcignQSBGdXR1cmUsIGEgY29yb3V0aW5lIG9yIGFuIGF3YWl0YWJsZSBpcyByZXF1aXJlZCcpCisKKworQGNvcm91dGluZQorZGVmIF93cmFwX2F3YWl0YWJsZShhd2FpdGFibGUpOgorICAgICIiIkhlbHBlciBmb3IgYXN5bmNpby5lbnN1cmVfZnV0dXJlKCkuCisKKyAgICBXcmFwcyBhd2FpdGFibGUgKGFuIG9iamVjdCB3aXRoIF9fYXdhaXRfXykgaW50byBhIGNvcm91dGluZQorICAgIHRoYXQgd2lsbCBsYXRlciBiZSB3cmFwcGVkIGluIGEgVGFzayBieSBlbnN1cmVfZnV0dXJlKCkuCisgICAgIiIiCisgICAgcmV0dXJuICh5aWVsZCBmcm9tIGF3YWl0YWJsZS5fX2F3YWl0X18oKSkKKworCitjbGFzcyBfR2F0aGVyaW5nRnV0dXJlKGZ1dHVyZXMuRnV0dXJlKToKKyAgICAiIiJIZWxwZXIgZm9yIGdhdGhlcigpLgorCisgICAgVGhpcyBvdmVycmlkZXMgY2FuY2VsKCkgdG8gY2FuY2VsIGFsbCB0aGUgY2hpbGRyZW4gYW5kIGFjdCBtb3JlCisgICAgbGlrZSBUYXNrLmNhbmNlbCgpLCB3aGljaCBkb2Vzbid0IGltbWVkaWF0ZWx5IG1hcmsgaXRzZWxmIGFzCisgICAgY2FuY2VsbGVkLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNoaWxkcmVuLCAqLCBsb29wPU5vbmUpOgorICAgICAgICBzdXBlcigpLl9faW5pdF9fKGxvb3A9bG9vcCkKKyAgICAgICAgc2VsZi5fY2hpbGRyZW4gPSBjaGlsZHJlbgorCisgICAgZGVmIGNhbmNlbChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5kb25lKCk6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgZm9yIGNoaWxkIGluIHNlbGYuX2NoaWxkcmVuOgorICAgICAgICAgICAgY2hpbGQuY2FuY2VsKCkKKyAgICAgICAgcmV0dXJuIFRydWUKKworCitkZWYgZ2F0aGVyKCpjb3Jvc19vcl9mdXR1cmVzLCBsb29wPU5vbmUsIHJldHVybl9leGNlcHRpb25zPUZhbHNlKToKKyAgICAiIiJSZXR1cm4gYSBmdXR1cmUgYWdncmVnYXRpbmcgcmVzdWx0cyBmcm9tIHRoZSBnaXZlbiBjb3JvdXRpbmVzCisgICAgb3IgZnV0dXJlcy4KKworICAgIEFsbCBmdXR1cmVzIG11c3Qgc2hhcmUgdGhlIHNhbWUgZXZlbnQgbG9vcC4gIElmIGFsbCB0aGUgdGFza3MgYXJlCisgICAgZG9uZSBzdWNjZXNzZnVsbHksIHRoZSByZXR1cm5lZCBmdXR1cmUncyByZXN1bHQgaXMgdGhlIGxpc3Qgb2YKKyAgICByZXN1bHRzIChpbiB0aGUgb3JkZXIgb2YgdGhlIG9yaWdpbmFsIHNlcXVlbmNlLCBub3QgbmVjZXNzYXJpbHkKKyAgICB0aGUgb3JkZXIgb2YgcmVzdWx0cyBhcnJpdmFsKS4gIElmICpyZXR1cm5fZXhjZXB0aW9ucyogaXMgVHJ1ZSwKKyAgICBleGNlcHRpb25zIGluIHRoZSB0YXNrcyBhcmUgdHJlYXRlZCB0aGUgc2FtZSBhcyBzdWNjZXNzZnVsCisgICAgcmVzdWx0cywgYW5kIGdhdGhlcmVkIGluIHRoZSByZXN1bHQgbGlzdDsgb3RoZXJ3aXNlLCB0aGUgZmlyc3QKKyAgICByYWlzZWQgZXhjZXB0aW9uIHdpbGwgYmUgaW1tZWRpYXRlbHkgcHJvcGFnYXRlZCB0byB0aGUgcmV0dXJuZWQKKyAgICBmdXR1cmUuCisKKyAgICBDYW5jZWxsYXRpb246IGlmIHRoZSBvdXRlciBGdXR1cmUgaXMgY2FuY2VsbGVkLCBhbGwgY2hpbGRyZW4gKHRoYXQKKyAgICBoYXZlIG5vdCBjb21wbGV0ZWQgeWV0KSBhcmUgYWxzbyBjYW5jZWxsZWQuICBJZiBhbnkgY2hpbGQgaXMKKyAgICBjYW5jZWxsZWQsIHRoaXMgaXMgdHJlYXRlZCBhcyBpZiBpdCByYWlzZWQgQ2FuY2VsbGVkRXJyb3IgLS0KKyAgICB0aGUgb3V0ZXIgRnV0dXJlIGlzICpub3QqIGNhbmNlbGxlZCBpbiB0aGlzIGNhc2UuICAoVGhpcyBpcyB0bworICAgIHByZXZlbnQgdGhlIGNhbmNlbGxhdGlvbiBvZiBvbmUgY2hpbGQgdG8gY2F1c2Ugb3RoZXIgY2hpbGRyZW4gdG8KKyAgICBiZSBjYW5jZWxsZWQuKQorICAgICIiIgorICAgIGlmIG5vdCBjb3Jvc19vcl9mdXR1cmVzOgorICAgICAgICBvdXRlciA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9bG9vcCkKKyAgICAgICAgb3V0ZXIuc2V0X3Jlc3VsdChbXSkKKyAgICAgICAgcmV0dXJuIG91dGVyCisKKyAgICBhcmdfdG9fZnV0ID0ge30KKyAgICBmb3IgYXJnIGluIHNldChjb3Jvc19vcl9mdXR1cmVzKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoYXJnLCBmdXR1cmVzLkZ1dHVyZSk6CisgICAgICAgICAgICBmdXQgPSBlbnN1cmVfZnV0dXJlKGFyZywgbG9vcD1sb29wKQorICAgICAgICAgICAgaWYgbG9vcCBpcyBOb25lOgorICAgICAgICAgICAgICAgIGxvb3AgPSBmdXQuX2xvb3AKKyAgICAgICAgICAgICMgVGhlIGNhbGxlciBjYW5ub3QgY29udHJvbCB0aGlzIGZ1dHVyZSwgdGhlICJkZXN0cm95IHBlbmRpbmcgdGFzayIKKyAgICAgICAgICAgICMgd2FybmluZyBzaG91bGQgbm90IGJlIGVtaXR0ZWQuCisgICAgICAgICAgICBmdXQuX2xvZ19kZXN0cm95X3BlbmRpbmcgPSBGYWxzZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZnV0ID0gYXJnCisgICAgICAgICAgICBpZiBsb29wIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgbG9vcCA9IGZ1dC5fbG9vcAorICAgICAgICAgICAgZWxpZiBmdXQuX2xvb3AgaXMgbm90IGxvb3A6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiZnV0dXJlcyBhcmUgdGllZCB0byBkaWZmZXJlbnQgZXZlbnQgbG9vcHMiKQorICAgICAgICBhcmdfdG9fZnV0W2FyZ10gPSBmdXQKKworICAgIGNoaWxkcmVuID0gW2FyZ190b19mdXRbYXJnXSBmb3IgYXJnIGluIGNvcm9zX29yX2Z1dHVyZXNdCisgICAgbmNoaWxkcmVuID0gbGVuKGNoaWxkcmVuKQorICAgIG91dGVyID0gX0dhdGhlcmluZ0Z1dHVyZShjaGlsZHJlbiwgbG9vcD1sb29wKQorICAgIG5maW5pc2hlZCA9IDAKKyAgICByZXN1bHRzID0gW05vbmVdICogbmNoaWxkcmVuCisKKyAgICBkZWYgX2RvbmVfY2FsbGJhY2soaSwgZnV0KToKKyAgICAgICAgbm9ubG9jYWwgbmZpbmlzaGVkCisgICAgICAgIGlmIG91dGVyLmRvbmUoKToKKyAgICAgICAgICAgIGlmIG5vdCBmdXQuY2FuY2VsbGVkKCk6CisgICAgICAgICAgICAgICAgIyBNYXJrIGV4Y2VwdGlvbiByZXRyaWV2ZWQuCisgICAgICAgICAgICAgICAgZnV0LmV4Y2VwdGlvbigpCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpZiBmdXQuY2FuY2VsbGVkKCk6CisgICAgICAgICAgICByZXMgPSBmdXR1cmVzLkNhbmNlbGxlZEVycm9yKCkKKyAgICAgICAgICAgIGlmIG5vdCByZXR1cm5fZXhjZXB0aW9uczoKKyAgICAgICAgICAgICAgICBvdXRlci5zZXRfZXhjZXB0aW9uKHJlcykKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZWxpZiBmdXQuX2V4Y2VwdGlvbiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJlcyA9IGZ1dC5leGNlcHRpb24oKSAgIyBNYXJrIGV4Y2VwdGlvbiByZXRyaWV2ZWQuCisgICAgICAgICAgICBpZiBub3QgcmV0dXJuX2V4Y2VwdGlvbnM6CisgICAgICAgICAgICAgICAgb3V0ZXIuc2V0X2V4Y2VwdGlvbihyZXMpCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXMgPSBmdXQuX3Jlc3VsdAorICAgICAgICByZXN1bHRzW2ldID0gcmVzCisgICAgICAgIG5maW5pc2hlZCArPSAxCisgICAgICAgIGlmIG5maW5pc2hlZCA9PSBuY2hpbGRyZW46CisgICAgICAgICAgICBvdXRlci5zZXRfcmVzdWx0KHJlc3VsdHMpCisKKyAgICBmb3IgaSwgZnV0IGluIGVudW1lcmF0ZShjaGlsZHJlbik6CisgICAgICAgIGZ1dC5hZGRfZG9uZV9jYWxsYmFjayhmdW5jdG9vbHMucGFydGlhbChfZG9uZV9jYWxsYmFjaywgaSkpCisgICAgcmV0dXJuIG91dGVyCisKKworZGVmIHNoaWVsZChhcmcsICosIGxvb3A9Tm9uZSk6CisgICAgIiIiV2FpdCBmb3IgYSBmdXR1cmUsIHNoaWVsZGluZyBpdCBmcm9tIGNhbmNlbGxhdGlvbi4KKworICAgIFRoZSBzdGF0ZW1lbnQKKworICAgICAgICByZXMgPSB5aWVsZCBmcm9tIHNoaWVsZChzb21ldGhpbmcoKSkKKworICAgIGlzIGV4YWN0bHkgZXF1aXZhbGVudCB0byB0aGUgc3RhdGVtZW50CisKKyAgICAgICAgcmVzID0geWllbGQgZnJvbSBzb21ldGhpbmcoKQorCisgICAgKmV4Y2VwdCogdGhhdCBpZiB0aGUgY29yb3V0aW5lIGNvbnRhaW5pbmcgaXQgaXMgY2FuY2VsbGVkLCB0aGUKKyAgICB0YXNrIHJ1bm5pbmcgaW4gc29tZXRoaW5nKCkgaXMgbm90IGNhbmNlbGxlZC4gIEZyb20gdGhlIFBPViBvZgorICAgIHNvbWV0aGluZygpLCB0aGUgY2FuY2VsbGF0aW9uIGRpZCBub3QgaGFwcGVuLiAgQnV0IGl0cyBjYWxsZXIgaXMKKyAgICBzdGlsbCBjYW5jZWxsZWQsIHNvIHRoZSB5aWVsZC1mcm9tIGV4cHJlc3Npb24gc3RpbGwgcmFpc2VzCisgICAgQ2FuY2VsbGVkRXJyb3IuICBOb3RlOiBJZiBzb21ldGhpbmcoKSBpcyBjYW5jZWxsZWQgYnkgb3RoZXIgbWVhbnMKKyAgICB0aGlzIHdpbGwgc3RpbGwgY2FuY2VsIHNoaWVsZCgpLgorCisgICAgSWYgeW91IHdhbnQgdG8gY29tcGxldGVseSBpZ25vcmUgY2FuY2VsbGF0aW9uIChub3QgcmVjb21tZW5kZWQpCisgICAgeW91IGNhbiBjb21iaW5lIHNoaWVsZCgpIHdpdGggYSB0cnkvZXhjZXB0IGNsYXVzZSwgYXMgZm9sbG93czoKKworICAgICAgICB0cnk6CisgICAgICAgICAgICByZXMgPSB5aWVsZCBmcm9tIHNoaWVsZChzb21ldGhpbmcoKSkKKyAgICAgICAgZXhjZXB0IENhbmNlbGxlZEVycm9yOgorICAgICAgICAgICAgcmVzID0gTm9uZQorICAgICIiIgorICAgIGlubmVyID0gZW5zdXJlX2Z1dHVyZShhcmcsIGxvb3A9bG9vcCkKKyAgICBpZiBpbm5lci5kb25lKCk6CisgICAgICAgICMgU2hvcnRjdXQuCisgICAgICAgIHJldHVybiBpbm5lcgorICAgIGxvb3AgPSBpbm5lci5fbG9vcAorICAgIG91dGVyID0gZnV0dXJlcy5GdXR1cmUobG9vcD1sb29wKQorCisgICAgZGVmIF9kb25lX2NhbGxiYWNrKGlubmVyKToKKyAgICAgICAgaWYgb3V0ZXIuY2FuY2VsbGVkKCk6CisgICAgICAgICAgICBpZiBub3QgaW5uZXIuY2FuY2VsbGVkKCk6CisgICAgICAgICAgICAgICAgIyBNYXJrIGlubmVyJ3MgcmVzdWx0IGFzIHJldHJpZXZlZC4KKyAgICAgICAgICAgICAgICBpbm5lci5leGNlcHRpb24oKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaWYgaW5uZXIuY2FuY2VsbGVkKCk6CisgICAgICAgICAgICBvdXRlci5jYW5jZWwoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZXhjID0gaW5uZXIuZXhjZXB0aW9uKCkKKyAgICAgICAgICAgIGlmIGV4YyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBvdXRlci5zZXRfZXhjZXB0aW9uKGV4YykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgb3V0ZXIuc2V0X3Jlc3VsdChpbm5lci5yZXN1bHQoKSkKKworICAgIGlubmVyLmFkZF9kb25lX2NhbGxiYWNrKF9kb25lX2NhbGxiYWNrKQorICAgIHJldHVybiBvdXRlcgorCisKK2RlZiBydW5fY29yb3V0aW5lX3RocmVhZHNhZmUoY29ybywgbG9vcCk6CisgICAgIiIiU3VibWl0IGEgY29yb3V0aW5lIG9iamVjdCB0byBhIGdpdmVuIGV2ZW50IGxvb3AuCisKKyAgICBSZXR1cm4gYSBjb25jdXJyZW50LmZ1dHVyZXMuRnV0dXJlIHRvIGFjY2VzcyB0aGUgcmVzdWx0LgorICAgICIiIgorICAgIGlmIG5vdCBjb3JvdXRpbmVzLmlzY29yb3V0aW5lKGNvcm8pOgorICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ0EgY29yb3V0aW5lIG9iamVjdCBpcyByZXF1aXJlZCcpCisgICAgZnV0dXJlID0gY29uY3VycmVudC5mdXR1cmVzLkZ1dHVyZSgpCisKKyAgICBkZWYgY2FsbGJhY2soKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZnV0dXJlcy5fY2hhaW5fZnV0dXJlKGVuc3VyZV9mdXR1cmUoY29ybywgbG9vcD1sb29wKSwgZnV0dXJlKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgIGlmIGZ1dHVyZS5zZXRfcnVubmluZ19vcl9ub3RpZnlfY2FuY2VsKCk6CisgICAgICAgICAgICAgICAgZnV0dXJlLnNldF9leGNlcHRpb24oZXhjKQorICAgICAgICAgICAgcmFpc2UKKworICAgIGxvb3AuY2FsbF9zb29uX3RocmVhZHNhZmUoY2FsbGJhY2spCisgICAgcmV0dXJuIGZ1dHVyZQpkaWZmIC0tZ2l0IGEvTGliL2FzeW5jaW8vdGVzdF91dGlscy5weSBiL0xpYi9hc3luY2lvL3Rlc3RfdXRpbHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzk2ZTZhZQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9hc3luY2lvL3Rlc3RfdXRpbHMucHkKQEAgLTAsMCArMSw0NjMgQEAKKyIiIlV0aWxpdGllcyBzaGFyZWQgYnkgdGVzdHMuIiIiCisKK2ltcG9ydCBjb2xsZWN0aW9ucworaW1wb3J0IGNvbnRleHRsaWIKK2ltcG9ydCBpbworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcworaW1wb3J0IHJlCitpbXBvcnQgc29ja2V0CitpbXBvcnQgc29ja2V0c2VydmVyCitpbXBvcnQgc3lzCitpbXBvcnQgdGVtcGZpbGUKK2ltcG9ydCB0aHJlYWRpbmcKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdW5pdHRlc3QgaW1wb3J0IG1vY2sKKworZnJvbSBodHRwLnNlcnZlciBpbXBvcnQgSFRUUFNlcnZlcgorZnJvbSB3c2dpcmVmLnNpbXBsZV9zZXJ2ZXIgaW1wb3J0IFdTR0lSZXF1ZXN0SGFuZGxlciwgV1NHSVNlcnZlcgorCit0cnk6CisgICAgaW1wb3J0IHNzbAorZXhjZXB0IEltcG9ydEVycm9yOiAgIyBwcmFnbWE6IG5vIGNvdmVyCisgICAgc3NsID0gTm9uZQorCitmcm9tIC4gaW1wb3J0IGJhc2VfZXZlbnRzCitmcm9tIC4gaW1wb3J0IGNvbXBhdAorZnJvbSAuIGltcG9ydCBldmVudHMKK2Zyb20gLiBpbXBvcnQgZnV0dXJlcworZnJvbSAuIGltcG9ydCBzZWxlY3RvcnMKK2Zyb20gLiBpbXBvcnQgdGFza3MKK2Zyb20gLmNvcm91dGluZXMgaW1wb3J0IGNvcm91dGluZQorZnJvbSAubG9nIGltcG9ydCBsb2dnZXIKKworCitpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzogICMgcHJhZ21hOiBubyBjb3ZlcgorICAgIGZyb20gLndpbmRvd3NfdXRpbHMgaW1wb3J0IHNvY2tldHBhaXIKK2Vsc2U6CisgICAgZnJvbSBzb2NrZXQgaW1wb3J0IHNvY2tldHBhaXIgICMgcHJhZ21hOiBubyBjb3ZlcgorCisKK2RlZiBkdW1teV9zc2xfY29udGV4dCgpOgorICAgIGlmIHNzbCBpcyBOb25lOgorICAgICAgICByZXR1cm4gTm9uZQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfU1NMdjIzKQorCisKK2RlZiBydW5fYnJpZWZseShsb29wKToKKyAgICBAY29yb3V0aW5lCisgICAgZGVmIG9uY2UoKToKKyAgICAgICAgcGFzcworICAgIGdlbiA9IG9uY2UoKQorICAgIHQgPSBsb29wLmNyZWF0ZV90YXNrKGdlbikKKyAgICAjIERvbid0IGxvZyBhIHdhcm5pbmcgaWYgdGhlIHRhc2sgaXMgbm90IGRvbmUgYWZ0ZXIgcnVuX3VudGlsX2NvbXBsZXRlKCkuCisgICAgIyBJdCBvY2N1cnMgaWYgdGhlIGxvb3AgaXMgc3RvcHBlZCBvciBpZiBhIHRhc2sgcmFpc2VzIGEgQmFzZUV4Y2VwdGlvbi4KKyAgICB0Ll9sb2dfZGVzdHJveV9wZW5kaW5nID0gRmFsc2UKKyAgICB0cnk6CisgICAgICAgIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHQpCisgICAgZmluYWxseToKKyAgICAgICAgZ2VuLmNsb3NlKCkKKworCitkZWYgcnVuX3VudGlsKGxvb3AsIHByZWQsIHRpbWVvdXQ9MzApOgorICAgIGRlYWRsaW5lID0gdGltZS50aW1lKCkgKyB0aW1lb3V0CisgICAgd2hpbGUgbm90IHByZWQoKToKKyAgICAgICAgaWYgdGltZW91dCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHRpbWVvdXQgPSBkZWFkbGluZSAtIHRpbWUudGltZSgpCisgICAgICAgICAgICBpZiB0aW1lb3V0IDw9IDA6CisgICAgICAgICAgICAgICAgcmFpc2UgZnV0dXJlcy5UaW1lb3V0RXJyb3IoKQorICAgICAgICBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh0YXNrcy5zbGVlcCgwLjAwMSwgbG9vcD1sb29wKSkKKworCitkZWYgcnVuX29uY2UobG9vcCk6CisgICAgIiIiTGVnYWN5IEFQSSB0byBydW4gb25jZSB0aHJvdWdoIHRoZSBldmVudCBsb29wLgorCisgICAgVGhpcyBpcyB0aGUgcmVjb21tZW5kZWQgcGF0dGVybiBmb3IgdGVzdCBjb2RlLiAgSXQgd2lsbCBwb2xsIHRoZQorICAgIHNlbGVjdG9yIG9uY2UgYW5kIHJ1biBhbGwgY2FsbGJhY2tzIHNjaGVkdWxlZCBpbiByZXNwb25zZSB0byBJL08KKyAgICBldmVudHMuCisgICAgIiIiCisgICAgbG9vcC5jYWxsX3Nvb24obG9vcC5zdG9wKQorICAgIGxvb3AucnVuX2ZvcmV2ZXIoKQorCisKK2NsYXNzIFNpbGVudFdTR0lSZXF1ZXN0SGFuZGxlcihXU0dJUmVxdWVzdEhhbmRsZXIpOgorCisgICAgZGVmIGdldF9zdGRlcnIoc2VsZik6CisgICAgICAgIHJldHVybiBpby5TdHJpbmdJTygpCisKKyAgICBkZWYgbG9nX21lc3NhZ2Uoc2VsZiwgZm9ybWF0LCAqYXJncyk6CisgICAgICAgIHBhc3MKKworCitjbGFzcyBTaWxlbnRXU0dJU2VydmVyKFdTR0lTZXJ2ZXIpOgorCisgICAgcmVxdWVzdF90aW1lb3V0ID0gMgorCisgICAgZGVmIGdldF9yZXF1ZXN0KHNlbGYpOgorICAgICAgICByZXF1ZXN0LCBjbGllbnRfYWRkciA9IHN1cGVyKCkuZ2V0X3JlcXVlc3QoKQorICAgICAgICByZXF1ZXN0LnNldHRpbWVvdXQoc2VsZi5yZXF1ZXN0X3RpbWVvdXQpCisgICAgICAgIHJldHVybiByZXF1ZXN0LCBjbGllbnRfYWRkcgorCisgICAgZGVmIGhhbmRsZV9lcnJvcihzZWxmLCByZXF1ZXN0LCBjbGllbnRfYWRkcmVzcyk6CisgICAgICAgIHBhc3MKKworCitjbGFzcyBTU0xXU0dJU2VydmVyTWl4aW46CisKKyAgICBkZWYgZmluaXNoX3JlcXVlc3Qoc2VsZiwgcmVxdWVzdCwgY2xpZW50X2FkZHJlc3MpOgorICAgICAgICAjIFRoZSByZWxhdGl2ZSBsb2NhdGlvbiBvZiBvdXIgdGVzdCBkaXJlY3RvcnkgKHdoaWNoCisgICAgICAgICMgY29udGFpbnMgdGhlIHNzbCBrZXkgYW5kIGNlcnRpZmljYXRlIGZpbGVzKSBkaWZmZXJzCisgICAgICAgICMgYmV0d2VlbiB0aGUgc3RkbGliIGFuZCBzdGFuZC1hbG9uZSBhc3luY2lvLgorICAgICAgICAjIFByZWZlciBvdXIgb3duIGlmIHdlIGNhbiBmaW5kIGl0LgorICAgICAgICBoZXJlID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICcuLicsICd0ZXN0cycpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKGhlcmUpOgorICAgICAgICAgICAgaGVyZSA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUob3MuX19maWxlX18pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdCcsICd0ZXN0X2FzeW5jaW8nKQorICAgICAgICBrZXlmaWxlID0gb3MucGF0aC5qb2luKGhlcmUsICdzc2xfa2V5LnBlbScpCisgICAgICAgIGNlcnRmaWxlID0gb3MucGF0aC5qb2luKGhlcmUsICdzc2xfY2VydC5wZW0nKQorICAgICAgICBzc29jayA9IHNzbC53cmFwX3NvY2tldChyZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlmaWxlPWtleWZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRmaWxlPWNlcnRmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfc2lkZT1UcnVlKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLlJlcXVlc3RIYW5kbGVyQ2xhc3Moc3NvY2ssIGNsaWVudF9hZGRyZXNzLCBzZWxmKQorICAgICAgICAgICAgc3NvY2suY2xvc2UoKQorICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICMgbWF5YmUgc29ja2V0IGhhcyBiZWVuIGNsb3NlZCBieSBwZWVyCisgICAgICAgICAgICBwYXNzCisKKworY2xhc3MgU1NMV1NHSVNlcnZlcihTU0xXU0dJU2VydmVyTWl4aW4sIFNpbGVudFdTR0lTZXJ2ZXIpOgorICAgIHBhc3MKKworCitkZWYgX3J1bl90ZXN0X3NlcnZlcigqLCBhZGRyZXNzLCB1c2Vfc3NsPUZhbHNlLCBzZXJ2ZXJfY2xzLCBzZXJ2ZXJfc3NsX2Nscyk6CisKKyAgICBkZWYgYXBwKGVudmlyb24sIHN0YXJ0X3Jlc3BvbnNlKToKKyAgICAgICAgc3RhdHVzID0gJzIwMCBPSycKKyAgICAgICAgaGVhZGVycyA9IFsoJ0NvbnRlbnQtdHlwZScsICd0ZXh0L3BsYWluJyldCisgICAgICAgIHN0YXJ0X3Jlc3BvbnNlKHN0YXR1cywgaGVhZGVycykKKyAgICAgICAgcmV0dXJuIFtiJ1Rlc3QgbWVzc2FnZSddCisKKyAgICAjIFJ1biB0aGUgdGVzdCBXU0dJIHNlcnZlciBpbiBhIHNlcGFyYXRlIHRocmVhZCBpbiBvcmRlciBub3QgdG8KKyAgICAjIGludGVyZmVyZSB3aXRoIGV2ZW50IGhhbmRsaW5nIGluIHRoZSBtYWluIHRocmVhZAorICAgIHNlcnZlcl9jbGFzcyA9IHNlcnZlcl9zc2xfY2xzIGlmIHVzZV9zc2wgZWxzZSBzZXJ2ZXJfY2xzCisgICAgaHR0cGQgPSBzZXJ2ZXJfY2xhc3MoYWRkcmVzcywgU2lsZW50V1NHSVJlcXVlc3RIYW5kbGVyKQorICAgIGh0dHBkLnNldF9hcHAoYXBwKQorICAgIGh0dHBkLmFkZHJlc3MgPSBodHRwZC5zZXJ2ZXJfYWRkcmVzcworICAgIHNlcnZlcl90aHJlYWQgPSB0aHJlYWRpbmcuVGhyZWFkKAorICAgICAgICB0YXJnZXQ9bGFtYmRhOiBodHRwZC5zZXJ2ZV9mb3JldmVyKHBvbGxfaW50ZXJ2YWw9MC4wNSkpCisgICAgc2VydmVyX3RocmVhZC5zdGFydCgpCisgICAgdHJ5OgorICAgICAgICB5aWVsZCBodHRwZAorICAgIGZpbmFsbHk6CisgICAgICAgIGh0dHBkLnNodXRkb3duKCkKKyAgICAgICAgaHR0cGQuc2VydmVyX2Nsb3NlKCkKKyAgICAgICAgc2VydmVyX3RocmVhZC5qb2luKCkKKworCitpZiBoYXNhdHRyKHNvY2tldCwgJ0FGX1VOSVgnKToKKworICAgIGNsYXNzIFVuaXhIVFRQU2VydmVyKHNvY2tldHNlcnZlci5Vbml4U3RyZWFtU2VydmVyLCBIVFRQU2VydmVyKToKKworICAgICAgICBkZWYgc2VydmVyX2JpbmQoc2VsZik6CisgICAgICAgICAgICBzb2NrZXRzZXJ2ZXIuVW5peFN0cmVhbVNlcnZlci5zZXJ2ZXJfYmluZChzZWxmKQorICAgICAgICAgICAgc2VsZi5zZXJ2ZXJfbmFtZSA9ICcxMjcuMC4wLjEnCisgICAgICAgICAgICBzZWxmLnNlcnZlcl9wb3J0ID0gODAKKworCisgICAgY2xhc3MgVW5peFdTR0lTZXJ2ZXIoVW5peEhUVFBTZXJ2ZXIsIFdTR0lTZXJ2ZXIpOgorCisgICAgICAgIHJlcXVlc3RfdGltZW91dCA9IDIKKworICAgICAgICBkZWYgc2VydmVyX2JpbmQoc2VsZik6CisgICAgICAgICAgICBVbml4SFRUUFNlcnZlci5zZXJ2ZXJfYmluZChzZWxmKQorICAgICAgICAgICAgc2VsZi5zZXR1cF9lbnZpcm9uKCkKKworICAgICAgICBkZWYgZ2V0X3JlcXVlc3Qoc2VsZik6CisgICAgICAgICAgICByZXF1ZXN0LCBjbGllbnRfYWRkciA9IHN1cGVyKCkuZ2V0X3JlcXVlc3QoKQorICAgICAgICAgICAgcmVxdWVzdC5zZXR0aW1lb3V0KHNlbGYucmVxdWVzdF90aW1lb3V0KQorICAgICAgICAgICAgIyBDb2RlIGluIHRoZSBzdGRsaWIgZXhwZWN0cyB0aGF0IGdldF9yZXF1ZXN0CisgICAgICAgICAgICAjIHdpbGwgcmV0dXJuIGEgc29ja2V0IGFuZCBhIHR1cGxlIChob3N0LCBwb3J0KS4KKyAgICAgICAgICAgICMgSG93ZXZlciwgdGhpcyBpc24ndCB0cnVlIGZvciBVTklYIHNvY2tldHMsCisgICAgICAgICAgICAjIGFzIHRoZSBzZWNvbmQgcmV0dXJuIHZhbHVlIHdpbGwgYmUgYSBwYXRoOworICAgICAgICAgICAgIyBoZW5jZSB3ZSByZXR1cm4gc29tZSBmYWtlIGRhdGEgc3VmZmljaWVudAorICAgICAgICAgICAgIyB0byBnZXQgdGhlIHRlc3RzIGdvaW5nCisgICAgICAgICAgICByZXR1cm4gcmVxdWVzdCwgKCcxMjcuMC4wLjEnLCAnJykKKworCisgICAgY2xhc3MgU2lsZW50VW5peFdTR0lTZXJ2ZXIoVW5peFdTR0lTZXJ2ZXIpOgorCisgICAgICAgIGRlZiBoYW5kbGVfZXJyb3Ioc2VsZiwgcmVxdWVzdCwgY2xpZW50X2FkZHJlc3MpOgorICAgICAgICAgICAgcGFzcworCisKKyAgICBjbGFzcyBVbml4U1NMV1NHSVNlcnZlcihTU0xXU0dJU2VydmVyTWl4aW4sIFNpbGVudFVuaXhXU0dJU2VydmVyKToKKyAgICAgICAgcGFzcworCisKKyAgICBkZWYgZ2VuX3VuaXhfc29ja2V0X3BhdGgoKToKKyAgICAgICAgd2l0aCB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUoKSBhcyBmaWxlOgorICAgICAgICAgICAgcmV0dXJuIGZpbGUubmFtZQorCisKKyAgICBAY29udGV4dGxpYi5jb250ZXh0bWFuYWdlcgorICAgIGRlZiB1bml4X3NvY2tldF9wYXRoKCk6CisgICAgICAgIHBhdGggPSBnZW5fdW5peF9zb2NrZXRfcGF0aCgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHlpZWxkIHBhdGgKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBvcy51bmxpbmsocGF0aCkKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKworCisgICAgQGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIKKyAgICBkZWYgcnVuX3Rlc3RfdW5peF9zZXJ2ZXIoKiwgdXNlX3NzbD1GYWxzZSk6CisgICAgICAgIHdpdGggdW5peF9zb2NrZXRfcGF0aCgpIGFzIHBhdGg6CisgICAgICAgICAgICB5aWVsZCBmcm9tIF9ydW5fdGVzdF9zZXJ2ZXIoYWRkcmVzcz1wYXRoLCB1c2Vfc3NsPXVzZV9zc2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX2Nscz1TaWxlbnRVbml4V1NHSVNlcnZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfc3NsX2Nscz1Vbml4U1NMV1NHSVNlcnZlcikKKworCitAY29udGV4dGxpYi5jb250ZXh0bWFuYWdlcgorZGVmIHJ1bl90ZXN0X3NlcnZlcigqLCBob3N0PScxMjcuMC4wLjEnLCBwb3J0PTAsIHVzZV9zc2w9RmFsc2UpOgorICAgIHlpZWxkIGZyb20gX3J1bl90ZXN0X3NlcnZlcihhZGRyZXNzPShob3N0LCBwb3J0KSwgdXNlX3NzbD11c2Vfc3NsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfY2xzPVNpbGVudFdTR0lTZXJ2ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9zc2xfY2xzPVNTTFdTR0lTZXJ2ZXIpCisKKworZGVmIG1ha2VfdGVzdF9wcm90b2NvbChiYXNlKToKKyAgICBkY3QgPSB7fQorICAgIGZvciBuYW1lIGluIGRpcihiYXNlKToKKyAgICAgICAgaWYgbmFtZS5zdGFydHN3aXRoKCdfXycpIGFuZCBuYW1lLmVuZHN3aXRoKCdfXycpOgorICAgICAgICAgICAgIyBza2lwIG1hZ2ljIG5hbWVzCisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBkY3RbbmFtZV0gPSBNb2NrQ2FsbGJhY2socmV0dXJuX3ZhbHVlPU5vbmUpCisgICAgcmV0dXJuIHR5cGUoJ1Rlc3RQcm90b2NvbCcsIChiYXNlLCkgKyBiYXNlLl9fYmFzZXNfXywgZGN0KSgpCisKKworY2xhc3MgVGVzdFNlbGVjdG9yKHNlbGVjdG9ycy5CYXNlU2VsZWN0b3IpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLmtleXMgPSB7fQorCisgICAgZGVmIHJlZ2lzdGVyKHNlbGYsIGZpbGVvYmosIGV2ZW50cywgZGF0YT1Ob25lKToKKyAgICAgICAga2V5ID0gc2VsZWN0b3JzLlNlbGVjdG9yS2V5KGZpbGVvYmosIDAsIGV2ZW50cywgZGF0YSkKKyAgICAgICAgc2VsZi5rZXlzW2ZpbGVvYmpdID0ga2V5CisgICAgICAgIHJldHVybiBrZXkKKworICAgIGRlZiB1bnJlZ2lzdGVyKHNlbGYsIGZpbGVvYmopOgorICAgICAgICByZXR1cm4gc2VsZi5rZXlzLnBvcChmaWxlb2JqKQorCisgICAgZGVmIHNlbGVjdChzZWxmLCB0aW1lb3V0KToKKyAgICAgICAgcmV0dXJuIFtdCisKKyAgICBkZWYgZ2V0X21hcChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYua2V5cworCisKK2NsYXNzIFRlc3RMb29wKGJhc2VfZXZlbnRzLkJhc2VFdmVudExvb3ApOgorICAgICIiIkxvb3AgZm9yIHVuaXR0ZXN0cy4KKworICAgIEl0IG1hbmFnZXMgc2VsZiB0aW1lIGRpcmVjdGx5LgorICAgIElmIHNvbWV0aGluZyBzY2hlZHVsZWQgdG8gYmUgZXhlY3V0ZWQgbGF0ZXIgdGhlbgorICAgIG9uIG5leHQgbG9vcCBpdGVyYXRpb24gYWZ0ZXIgYWxsIHJlYWR5IGhhbmRsZXJzIGRvbmUKKyAgICBnZW5lcmF0b3IgcGFzc2VkIHRvIF9faW5pdF9fIGlzIGNhbGxpbmcuCisKKyAgICBHZW5lcmF0b3Igc2hvdWxkIGJlIGxpa2UgdGhpczoKKworICAgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgICAuLi4KKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZCAuLi4KKyAgICAgICAgICAgIC4uLiA9IHlpZWxkIHRpbWVfYWR2YW5jZQorCisgICAgVmFsdWUgcmV0dXJuZWQgYnkgeWllbGQgaXMgYWJzb2x1dGUgdGltZSBvZiBuZXh0IHNjaGVkdWxlZCBoYW5kbGVyLgorICAgIFZhbHVlIHBhc3NlZCB0byB5aWVsZCBpcyB0aW1lIGFkdmFuY2UgdG8gbW92ZSBsb29wJ3MgdGltZSBmb3J3YXJkLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGdlbj1Ob25lKToKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXygpCisKKyAgICAgICAgaWYgZ2VuIGlzIE5vbmU6CisgICAgICAgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgICAgICAgeWllbGQKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX29uX2Nsb3NlID0gRmFsc2UKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX29uX2Nsb3NlID0gVHJ1ZQorCisgICAgICAgIHNlbGYuX2dlbiA9IGdlbigpCisgICAgICAgIG5leHQoc2VsZi5fZ2VuKQorICAgICAgICBzZWxmLl90aW1lID0gMAorICAgICAgICBzZWxmLl9jbG9ja19yZXNvbHV0aW9uID0gMWUtOQorICAgICAgICBzZWxmLl90aW1lcnMgPSBbXQorICAgICAgICBzZWxmLl9zZWxlY3RvciA9IFRlc3RTZWxlY3RvcigpCisKKyAgICAgICAgc2VsZi5yZWFkZXJzID0ge30KKyAgICAgICAgc2VsZi53cml0ZXJzID0ge30KKyAgICAgICAgc2VsZi5yZXNldF9jb3VudGVycygpCisKKyAgICBkZWYgdGltZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3RpbWUKKworICAgIGRlZiBhZHZhbmNlX3RpbWUoc2VsZiwgYWR2YW5jZSk6CisgICAgICAgICIiIk1vdmUgdGVzdCB0aW1lIGZvcndhcmQuIiIiCisgICAgICAgIGlmIGFkdmFuY2U6CisgICAgICAgICAgICBzZWxmLl90aW1lICs9IGFkdmFuY2UKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgc3VwZXIoKS5jbG9zZSgpCisgICAgICAgIGlmIHNlbGYuX2NoZWNrX29uX2Nsb3NlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuX2dlbi5zZW5kKDApCisgICAgICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOiAgIyBwcmFnbWE6IG5vIGNvdmVyCisgICAgICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoIlRpbWUgZ2VuZXJhdG9yIGlzIG5vdCBmaW5pc2hlZCIpCisKKyAgICBkZWYgYWRkX3JlYWRlcihzZWxmLCBmZCwgY2FsbGJhY2ssICphcmdzKToKKyAgICAgICAgc2VsZi5yZWFkZXJzW2ZkXSA9IGV2ZW50cy5IYW5kbGUoY2FsbGJhY2ssIGFyZ3MsIHNlbGYpCisKKyAgICBkZWYgcmVtb3ZlX3JlYWRlcihzZWxmLCBmZCk6CisgICAgICAgIHNlbGYucmVtb3ZlX3JlYWRlcl9jb3VudFtmZF0gKz0gMQorICAgICAgICBpZiBmZCBpbiBzZWxmLnJlYWRlcnM6CisgICAgICAgICAgICBkZWwgc2VsZi5yZWFkZXJzW2ZkXQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIGFzc2VydF9yZWFkZXIoc2VsZiwgZmQsIGNhbGxiYWNrLCAqYXJncyk6CisgICAgICAgIGFzc2VydCBmZCBpbiBzZWxmLnJlYWRlcnMsICdmZCB7fSBpcyBub3QgcmVnaXN0ZXJlZCcuZm9ybWF0KGZkKQorICAgICAgICBoYW5kbGUgPSBzZWxmLnJlYWRlcnNbZmRdCisgICAgICAgIGFzc2VydCBoYW5kbGUuX2NhbGxiYWNrID09IGNhbGxiYWNrLCAneyFyfSAhPSB7IXJ9Jy5mb3JtYXQoCisgICAgICAgICAgICBoYW5kbGUuX2NhbGxiYWNrLCBjYWxsYmFjaykKKyAgICAgICAgYXNzZXJ0IGhhbmRsZS5fYXJncyA9PSBhcmdzLCAneyFyfSAhPSB7IXJ9Jy5mb3JtYXQoCisgICAgICAgICAgICBoYW5kbGUuX2FyZ3MsIGFyZ3MpCisKKyAgICBkZWYgYWRkX3dyaXRlcihzZWxmLCBmZCwgY2FsbGJhY2ssICphcmdzKToKKyAgICAgICAgc2VsZi53cml0ZXJzW2ZkXSA9IGV2ZW50cy5IYW5kbGUoY2FsbGJhY2ssIGFyZ3MsIHNlbGYpCisKKyAgICBkZWYgcmVtb3ZlX3dyaXRlcihzZWxmLCBmZCk6CisgICAgICAgIHNlbGYucmVtb3ZlX3dyaXRlcl9jb3VudFtmZF0gKz0gMQorICAgICAgICBpZiBmZCBpbiBzZWxmLndyaXRlcnM6CisgICAgICAgICAgICBkZWwgc2VsZi53cml0ZXJzW2ZkXQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIGFzc2VydF93cml0ZXIoc2VsZiwgZmQsIGNhbGxiYWNrLCAqYXJncyk6CisgICAgICAgIGFzc2VydCBmZCBpbiBzZWxmLndyaXRlcnMsICdmZCB7fSBpcyBub3QgcmVnaXN0ZXJlZCcuZm9ybWF0KGZkKQorICAgICAgICBoYW5kbGUgPSBzZWxmLndyaXRlcnNbZmRdCisgICAgICAgIGFzc2VydCBoYW5kbGUuX2NhbGxiYWNrID09IGNhbGxiYWNrLCAneyFyfSAhPSB7IXJ9Jy5mb3JtYXQoCisgICAgICAgICAgICBoYW5kbGUuX2NhbGxiYWNrLCBjYWxsYmFjaykKKyAgICAgICAgYXNzZXJ0IGhhbmRsZS5fYXJncyA9PSBhcmdzLCAneyFyfSAhPSB7IXJ9Jy5mb3JtYXQoCisgICAgICAgICAgICBoYW5kbGUuX2FyZ3MsIGFyZ3MpCisKKyAgICBkZWYgcmVzZXRfY291bnRlcnMoc2VsZik6CisgICAgICAgIHNlbGYucmVtb3ZlX3JlYWRlcl9jb3VudCA9IGNvbGxlY3Rpb25zLmRlZmF1bHRkaWN0KGludCkKKyAgICAgICAgc2VsZi5yZW1vdmVfd3JpdGVyX2NvdW50ID0gY29sbGVjdGlvbnMuZGVmYXVsdGRpY3QoaW50KQorCisgICAgZGVmIF9ydW5fb25jZShzZWxmKToKKyAgICAgICAgc3VwZXIoKS5fcnVuX29uY2UoKQorICAgICAgICBmb3Igd2hlbiBpbiBzZWxmLl90aW1lcnM6CisgICAgICAgICAgICBhZHZhbmNlID0gc2VsZi5fZ2VuLnNlbmQod2hlbikKKyAgICAgICAgICAgIHNlbGYuYWR2YW5jZV90aW1lKGFkdmFuY2UpCisgICAgICAgIHNlbGYuX3RpbWVycyA9IFtdCisKKyAgICBkZWYgY2FsbF9hdChzZWxmLCB3aGVuLCBjYWxsYmFjaywgKmFyZ3MpOgorICAgICAgICBzZWxmLl90aW1lcnMuYXBwZW5kKHdoZW4pCisgICAgICAgIHJldHVybiBzdXBlcigpLmNhbGxfYXQod2hlbiwgY2FsbGJhY2ssICphcmdzKQorCisgICAgZGVmIF9wcm9jZXNzX2V2ZW50cyhzZWxmLCBldmVudF9saXN0KToKKyAgICAgICAgcmV0dXJuCisKKyAgICBkZWYgX3dyaXRlX3RvX3NlbGYoc2VsZik6CisgICAgICAgIHBhc3MKKworCitkZWYgTW9ja0NhbGxiYWNrKCoqa3dhcmdzKToKKyAgICByZXR1cm4gbW9jay5Nb2NrKHNwZWM9WydfX2NhbGxfXyddLCAqKmt3YXJncykKKworCitjbGFzcyBNb2NrUGF0dGVybihzdHIpOgorICAgICIiIkEgcmVnZXggYmFzZWQgc3RyIHdpdGggYSBmdXp6eSBfX2VxX18uCisKKyAgICBVc2UgdGhpcyBoZWxwZXIgd2l0aCAnbW9jay5hc3NlcnRfY2FsbGVkX3dpdGgnLCBvciBhbnl3aGVyZQorICAgIHdoZXJlIGEgcmVnZXggY29tcGFyaXNvbiBiZXR3ZWVuIHN0cmluZ3MgaXMgbmVlZGVkLgorCisgICAgRm9yIGluc3RhbmNlOgorICAgICAgIG1vY2tfY2FsbC5hc3NlcnRfY2FsbGVkX3dpdGgoTW9ja1BhdHRlcm4oJ3NwYW0uKmhhbScpKQorICAgICIiIgorICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gYm9vbChyZS5zZWFyY2goc3RyKHNlbGYpLCBvdGhlciwgcmUuUykpCisKKworZGVmIGdldF9mdW5jdGlvbl9zb3VyY2UoZnVuYyk6CisgICAgc291cmNlID0gZXZlbnRzLl9nZXRfZnVuY3Rpb25fc291cmNlKGZ1bmMpCisgICAgaWYgc291cmNlIGlzIE5vbmU6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInVuYWJsZSB0byBnZXQgdGhlIHNvdXJjZSBvZiAlciIgJSAoZnVuYywpKQorICAgIHJldHVybiBzb3VyY2UKKworCitjbGFzcyBUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldF9ldmVudF9sb29wKHNlbGYsIGxvb3AsICosIGNsZWFudXA9VHJ1ZSk6CisgICAgICAgIGFzc2VydCBsb29wIGlzIG5vdCBOb25lCisgICAgICAgICMgZW5zdXJlIHRoYXQgdGhlIGV2ZW50IGxvb3AgaXMgcGFzc2VkIGV4cGxpY2l0bHkgaW4gYXN5bmNpbworICAgICAgICBldmVudHMuc2V0X2V2ZW50X2xvb3AoTm9uZSkKKyAgICAgICAgaWYgY2xlYW51cDoKKyAgICAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChsb29wLmNsb3NlKQorCisgICAgZGVmIG5ld190ZXN0X2xvb3Aoc2VsZiwgZ2VuPU5vbmUpOgorICAgICAgICBsb29wID0gVGVzdExvb3AoZ2VuKQorICAgICAgICBzZWxmLnNldF9ldmVudF9sb29wKGxvb3ApCisgICAgICAgIHJldHVybiBsb29wCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGV2ZW50cy5zZXRfZXZlbnRfbG9vcChOb25lKQorCisgICAgICAgICMgRGV0ZWN0IENQeXRob24gYnVnICMyMzM1MzogZW5zdXJlIHRoYXQgeWllbGQveWllbGQtZnJvbSBpcyBub3QgdXNlZAorICAgICAgICAjIGluIGFuIGV4Y2VwdCBibG9jayBvZiBhIGdlbmVyYXRvcgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN5cy5leGNfaW5mbygpLCAoTm9uZSwgTm9uZSwgTm9uZSkpCisKKyAgICBpZiBub3QgY29tcGF0LlBZMzQ6CisgICAgICAgICMgUHl0aG9uIDMuMyBjb21wYXRpYmlsaXR5CisgICAgICAgIGRlZiBzdWJUZXN0KHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICAgICBjbGFzcyBFbXB0eUNNOgorICAgICAgICAgICAgICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICBkZWYgX19leGl0X18oc2VsZiwgKmV4Yyk6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIHJldHVybiBFbXB0eUNNKCkKKworCitAY29udGV4dGxpYi5jb250ZXh0bWFuYWdlcgorZGVmIGRpc2FibGVfbG9nZ2VyKCk6CisgICAgIiIiQ29udGV4dCBtYW5hZ2VyIHRvIGRpc2FibGUgYXN5bmNpbyBsb2dnZXIuCisKKyAgICBGb3IgZXhhbXBsZSwgaXQgY2FuIGJlIHVzZWQgdG8gaWdub3JlIHdhcm5pbmdzIGluIGRlYnVnIG1vZGUuCisgICAgIiIiCisgICAgb2xkX2xldmVsID0gbG9nZ2VyLmxldmVsCisgICAgdHJ5OgorICAgICAgICBsb2dnZXIuc2V0TGV2ZWwobG9nZ2luZy5DUklUSUNBTCsxKQorICAgICAgICB5aWVsZAorICAgIGZpbmFsbHk6CisgICAgICAgIGxvZ2dlci5zZXRMZXZlbChvbGRfbGV2ZWwpCisKKworZGVmIG1vY2tfbm9uYmxvY2tpbmdfc29ja2V0KHByb3RvPXNvY2tldC5JUFBST1RPX1RDUCwgdHlwZT1zb2NrZXQuU09DS19TVFJFQU0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFtaWx5PXNvY2tldC5BRl9JTkVUKToKKyAgICAiIiJDcmVhdGUgYSBtb2NrIG9mIGEgbm9uLWJsb2NraW5nIHNvY2tldC4iIiIKKyAgICBzb2NrID0gbW9jay5NYWdpY01vY2soc29ja2V0LnNvY2tldCkKKyAgICBzb2NrLnByb3RvID0gcHJvdG8KKyAgICBzb2NrLnR5cGUgPSB0eXBlCisgICAgc29jay5mYW1pbHkgPSBmYW1pbHkKKyAgICBzb2NrLmdldHRpbWVvdXQucmV0dXJuX3ZhbHVlID0gMC4wCisgICAgcmV0dXJuIHNvY2sKKworCitkZWYgZm9yY2VfbGVnYWN5X3NzbF9zdXBwb3J0KCk6CisgICAgcmV0dXJuIG1vY2sucGF0Y2goJ2FzeW5jaW8uc3NscHJvdG8uX2lzX3NzbHByb3RvX2F2YWlsYWJsZScsCisgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbHVlPUZhbHNlKQpkaWZmIC0tZ2l0IGEvTGliL2FzeW5jaW8vdHJhbnNwb3J0cy5weSBiL0xpYi9hc3luY2lvL3RyYW5zcG9ydHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE2ZDkxOQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9hc3luY2lvL3RyYW5zcG9ydHMucHkKQEAgLTAsMCArMSwyOTggQEAKKyIiIkFic3RyYWN0IFRyYW5zcG9ydCBjbGFzcy4iIiIKKworZnJvbSBhc3luY2lvIGltcG9ydCBjb21wYXQKKworX19hbGxfXyA9IFsnQmFzZVRyYW5zcG9ydCcsICdSZWFkVHJhbnNwb3J0JywgJ1dyaXRlVHJhbnNwb3J0JywKKyAgICAgICAgICAgJ1RyYW5zcG9ydCcsICdEYXRhZ3JhbVRyYW5zcG9ydCcsICdTdWJwcm9jZXNzVHJhbnNwb3J0JywKKyAgICAgICAgICAgXQorCisKK2NsYXNzIEJhc2VUcmFuc3BvcnQ6CisgICAgIiIiQmFzZSBjbGFzcyBmb3IgdHJhbnNwb3J0cy4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBleHRyYT1Ob25lKToKKyAgICAgICAgaWYgZXh0cmEgaXMgTm9uZToKKyAgICAgICAgICAgIGV4dHJhID0ge30KKyAgICAgICAgc2VsZi5fZXh0cmEgPSBleHRyYQorCisgICAgZGVmIGdldF9leHRyYV9pbmZvKHNlbGYsIG5hbWUsIGRlZmF1bHQ9Tm9uZSk6CisgICAgICAgICIiIkdldCBvcHRpb25hbCB0cmFuc3BvcnQgaW5mb3JtYXRpb24uIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9leHRyYS5nZXQobmFtZSwgZGVmYXVsdCkKKworICAgIGRlZiBpc19jbG9zaW5nKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gVHJ1ZSBpZiB0aGUgdHJhbnNwb3J0IGlzIGNsb3Npbmcgb3IgY2xvc2VkLiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgICIiIkNsb3NlIHRoZSB0cmFuc3BvcnQuCisKKyAgICAgICAgQnVmZmVyZWQgZGF0YSB3aWxsIGJlIGZsdXNoZWQgYXN5bmNocm9ub3VzbHkuICBObyBtb3JlIGRhdGEKKyAgICAgICAgd2lsbCBiZSByZWNlaXZlZC4gIEFmdGVyIGFsbCBidWZmZXJlZCBkYXRhIGlzIGZsdXNoZWQsIHRoZQorICAgICAgICBwcm90b2NvbCdzIGNvbm5lY3Rpb25fbG9zdCgpIG1ldGhvZCB3aWxsIChldmVudHVhbGx5KSBjYWxsZWQKKyAgICAgICAgd2l0aCBOb25lIGFzIGl0cyBhcmd1bWVudC4KKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworCitjbGFzcyBSZWFkVHJhbnNwb3J0KEJhc2VUcmFuc3BvcnQpOgorICAgICIiIkludGVyZmFjZSBmb3IgcmVhZC1vbmx5IHRyYW5zcG9ydHMuIiIiCisKKyAgICBkZWYgcGF1c2VfcmVhZGluZyhzZWxmKToKKyAgICAgICAgIiIiUGF1c2UgdGhlIHJlY2VpdmluZyBlbmQuCisKKyAgICAgICAgTm8gZGF0YSB3aWxsIGJlIHBhc3NlZCB0byB0aGUgcHJvdG9jb2wncyBkYXRhX3JlY2VpdmVkKCkKKyAgICAgICAgbWV0aG9kIHVudGlsIHJlc3VtZV9yZWFkaW5nKCkgaXMgY2FsbGVkLgorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIHJlc3VtZV9yZWFkaW5nKHNlbGYpOgorICAgICAgICAiIiJSZXN1bWUgdGhlIHJlY2VpdmluZyBlbmQuCisKKyAgICAgICAgRGF0YSByZWNlaXZlZCB3aWxsIG9uY2UgYWdhaW4gYmUgcGFzc2VkIHRvIHRoZSBwcm90b2NvbCdzCisgICAgICAgIGRhdGFfcmVjZWl2ZWQoKSBtZXRob2QuCisgICAgICAgICIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKworY2xhc3MgV3JpdGVUcmFuc3BvcnQoQmFzZVRyYW5zcG9ydCk6CisgICAgIiIiSW50ZXJmYWNlIGZvciB3cml0ZS1vbmx5IHRyYW5zcG9ydHMuIiIiCisKKyAgICBkZWYgc2V0X3dyaXRlX2J1ZmZlcl9saW1pdHMoc2VsZiwgaGlnaD1Ob25lLCBsb3c9Tm9uZSk6CisgICAgICAgICIiIlNldCB0aGUgaGlnaC0gYW5kIGxvdy13YXRlciBsaW1pdHMgZm9yIHdyaXRlIGZsb3cgY29udHJvbC4KKworICAgICAgICBUaGVzZSB0d28gdmFsdWVzIGNvbnRyb2wgd2hlbiB0byBjYWxsIHRoZSBwcm90b2NvbCdzCisgICAgICAgIHBhdXNlX3dyaXRpbmcoKSBhbmQgcmVzdW1lX3dyaXRpbmcoKSBtZXRob2RzLiAgSWYgc3BlY2lmaWVkLAorICAgICAgICB0aGUgbG93LXdhdGVyIGxpbWl0IG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZQorICAgICAgICBoaWdoLXdhdGVyIGxpbWl0LiAgTmVpdGhlciB2YWx1ZSBjYW4gYmUgbmVnYXRpdmUuCisKKyAgICAgICAgVGhlIGRlZmF1bHRzIGFyZSBpbXBsZW1lbnRhdGlvbi1zcGVjaWZpYy4gIElmIG9ubHkgdGhlCisgICAgICAgIGhpZ2gtd2F0ZXIgbGltaXQgaXMgZ2l2ZW4sIHRoZSBsb3ctd2F0ZXIgbGltaXQgZGVmYXVsdHMgdG8gYW4KKyAgICAgICAgaW1wbGVtZW50YXRpb24tc3BlY2lmaWMgdmFsdWUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZQorICAgICAgICBoaWdoLXdhdGVyIGxpbWl0LiAgU2V0dGluZyBoaWdoIHRvIHplcm8gZm9yY2VzIGxvdyB0byB6ZXJvIGFzCisgICAgICAgIHdlbGwsIGFuZCBjYXVzZXMgcGF1c2Vfd3JpdGluZygpIHRvIGJlIGNhbGxlZCB3aGVuZXZlciB0aGUKKyAgICAgICAgYnVmZmVyIGJlY29tZXMgbm9uLWVtcHR5LiAgU2V0dGluZyBsb3cgdG8gemVybyBjYXVzZXMKKyAgICAgICAgcmVzdW1lX3dyaXRpbmcoKSB0byBiZSBjYWxsZWQgb25seSBvbmNlIHRoZSBidWZmZXIgaXMgZW1wdHkuCisgICAgICAgIFVzZSBvZiB6ZXJvIGZvciBlaXRoZXIgbGltaXQgaXMgZ2VuZXJhbGx5IHN1Yi1vcHRpbWFsIGFzIGl0CisgICAgICAgIHJlZHVjZXMgb3Bwb3J0dW5pdGllcyBmb3IgZG9pbmcgSS9PIGFuZCBjb21wdXRhdGlvbgorICAgICAgICBjb25jdXJyZW50bHkuCisgICAgICAgICIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgZ2V0X3dyaXRlX2J1ZmZlcl9zaXplKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIGN1cnJlbnQgc2l6ZSBvZiB0aGUgd3JpdGUgYnVmZmVyLiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgd3JpdGUoc2VsZiwgZGF0YSk6CisgICAgICAgICIiIldyaXRlIHNvbWUgZGF0YSBieXRlcyB0byB0aGUgdHJhbnNwb3J0LgorCisgICAgICAgIFRoaXMgZG9lcyBub3QgYmxvY2s7IGl0IGJ1ZmZlcnMgdGhlIGRhdGEgYW5kIGFycmFuZ2VzIGZvciBpdAorICAgICAgICB0byBiZSBzZW50IG91dCBhc3luY2hyb25vdXNseS4KKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiB3cml0ZWxpbmVzKHNlbGYsIGxpc3Rfb2ZfZGF0YSk6CisgICAgICAgICIiIldyaXRlIGEgbGlzdCAob3IgYW55IGl0ZXJhYmxlKSBvZiBkYXRhIGJ5dGVzIHRvIHRoZSB0cmFuc3BvcnQuCisKKyAgICAgICAgVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gY29uY2F0ZW5hdGVzIHRoZSBhcmd1bWVudHMgYW5kCisgICAgICAgIGNhbGxzIHdyaXRlKCkgb24gdGhlIHJlc3VsdC4KKyAgICAgICAgIiIiCisgICAgICAgIGRhdGEgPSBjb21wYXQuZmxhdHRlbl9saXN0X2J5dGVzKGxpc3Rfb2ZfZGF0YSkKKyAgICAgICAgc2VsZi53cml0ZShkYXRhKQorCisgICAgZGVmIHdyaXRlX2VvZihzZWxmKToKKyAgICAgICAgIiIiQ2xvc2UgdGhlIHdyaXRlIGVuZCBhZnRlciBmbHVzaGluZyBidWZmZXJlZCBkYXRhLgorCisgICAgICAgIChUaGlzIGlzIGxpa2UgdHlwaW5nIF5EIGludG8gYSBVTklYIHByb2dyYW0gcmVhZGluZyBmcm9tIHN0ZGluLikKKworICAgICAgICBEYXRhIG1heSBzdGlsbCBiZSByZWNlaXZlZC4KKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBjYW5fd3JpdGVfZW9mKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gVHJ1ZSBpZiB0aGlzIHRyYW5zcG9ydCBzdXBwb3J0cyB3cml0ZV9lb2YoKSwgRmFsc2UgaWYgbm90LiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgYWJvcnQoc2VsZik6CisgICAgICAgICIiIkNsb3NlIHRoZSB0cmFuc3BvcnQgaW1tZWRpYXRlbHkuCisKKyAgICAgICAgQnVmZmVyZWQgZGF0YSB3aWxsIGJlIGxvc3QuICBObyBtb3JlIGRhdGEgd2lsbCBiZSByZWNlaXZlZC4KKyAgICAgICAgVGhlIHByb3RvY29sJ3MgY29ubmVjdGlvbl9sb3N0KCkgbWV0aG9kIHdpbGwgKGV2ZW50dWFsbHkpIGJlCisgICAgICAgIGNhbGxlZCB3aXRoIE5vbmUgYXMgaXRzIGFyZ3VtZW50LgorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisKK2NsYXNzIFRyYW5zcG9ydChSZWFkVHJhbnNwb3J0LCBXcml0ZVRyYW5zcG9ydCk6CisgICAgIiIiSW50ZXJmYWNlIHJlcHJlc2VudGluZyBhIGJpZGlyZWN0aW9uYWwgdHJhbnNwb3J0LgorCisgICAgVGhlcmUgbWF5IGJlIHNldmVyYWwgaW1wbGVtZW50YXRpb25zLCBidXQgdHlwaWNhbGx5LCB0aGUgdXNlciBkb2VzCisgICAgbm90IGltcGxlbWVudCBuZXcgdHJhbnNwb3J0czsgcmF0aGVyLCB0aGUgcGxhdGZvcm0gcHJvdmlkZXMgc29tZQorICAgIHVzZWZ1bCB0cmFuc3BvcnRzIHRoYXQgYXJlIGltcGxlbWVudGVkIHVzaW5nIHRoZSBwbGF0Zm9ybSdzIGJlc3QKKyAgICBwcmFjdGljZXMuCisKKyAgICBUaGUgdXNlciBuZXZlciBpbnN0YW50aWF0ZXMgYSB0cmFuc3BvcnQgZGlyZWN0bHk7IHRoZXkgY2FsbCBhCisgICAgdXRpbGl0eSBmdW5jdGlvbiwgcGFzc2luZyBpdCBhIHByb3RvY29sIGZhY3RvcnkgYW5kIG90aGVyCisgICAgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IHRvIGNyZWF0ZSB0aGUgdHJhbnNwb3J0IGFuZCBwcm90b2NvbC4gIChFLmcuCisgICAgRXZlbnRMb29wLmNyZWF0ZV9jb25uZWN0aW9uKCkgb3IgRXZlbnRMb29wLmNyZWF0ZV9zZXJ2ZXIoKS4pCisKKyAgICBUaGUgdXRpbGl0eSBmdW5jdGlvbiB3aWxsIGFzeW5jaHJvbm91c2x5IGNyZWF0ZSBhIHRyYW5zcG9ydCBhbmQgYQorICAgIHByb3RvY29sIGFuZCBob29rIHRoZW0gdXAgYnkgY2FsbGluZyB0aGUgcHJvdG9jb2wncworICAgIGNvbm5lY3Rpb25fbWFkZSgpIG1ldGhvZCwgcGFzc2luZyBpdCB0aGUgdHJhbnNwb3J0LgorCisgICAgVGhlIGltcGxlbWVudGF0aW9uIGhlcmUgcmFpc2VzIE5vdEltcGxlbWVudGVkIGZvciBldmVyeSBtZXRob2QKKyAgICBleGNlcHQgd3JpdGVsaW5lcygpLCB3aGljaCBjYWxscyB3cml0ZSgpIGluIGEgbG9vcC4KKyAgICAiIiIKKworCitjbGFzcyBEYXRhZ3JhbVRyYW5zcG9ydChCYXNlVHJhbnNwb3J0KToKKyAgICAiIiJJbnRlcmZhY2UgZm9yIGRhdGFncmFtIChVRFApIHRyYW5zcG9ydHMuIiIiCisKKyAgICBkZWYgc2VuZHRvKHNlbGYsIGRhdGEsIGFkZHI9Tm9uZSk6CisgICAgICAgICIiIlNlbmQgZGF0YSB0byB0aGUgdHJhbnNwb3J0LgorCisgICAgICAgIFRoaXMgZG9lcyBub3QgYmxvY2s7IGl0IGJ1ZmZlcnMgdGhlIGRhdGEgYW5kIGFycmFuZ2VzIGZvciBpdAorICAgICAgICB0byBiZSBzZW50IG91dCBhc3luY2hyb25vdXNseS4KKyAgICAgICAgYWRkciBpcyB0YXJnZXQgc29ja2V0IGFkZHJlc3MuCisgICAgICAgIElmIGFkZHIgaXMgTm9uZSB1c2UgdGFyZ2V0IGFkZHJlc3MgcG9pbnRlZCBvbiB0cmFuc3BvcnQgY3JlYXRpb24uCisgICAgICAgICIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgYWJvcnQoc2VsZik6CisgICAgICAgICIiIkNsb3NlIHRoZSB0cmFuc3BvcnQgaW1tZWRpYXRlbHkuCisKKyAgICAgICAgQnVmZmVyZWQgZGF0YSB3aWxsIGJlIGxvc3QuICBObyBtb3JlIGRhdGEgd2lsbCBiZSByZWNlaXZlZC4KKyAgICAgICAgVGhlIHByb3RvY29sJ3MgY29ubmVjdGlvbl9sb3N0KCkgbWV0aG9kIHdpbGwgKGV2ZW50dWFsbHkpIGJlCisgICAgICAgIGNhbGxlZCB3aXRoIE5vbmUgYXMgaXRzIGFyZ3VtZW50LgorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisKK2NsYXNzIFN1YnByb2Nlc3NUcmFuc3BvcnQoQmFzZVRyYW5zcG9ydCk6CisKKyAgICBkZWYgZ2V0X3BpZChzZWxmKToKKyAgICAgICAgIiIiR2V0IHN1YnByb2Nlc3MgaWQuIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBnZXRfcmV0dXJuY29kZShzZWxmKToKKyAgICAgICAgIiIiR2V0IHN1YnByb2Nlc3MgcmV0dXJuY29kZS4KKworICAgICAgICBTZWUgYWxzbworICAgICAgICBodHRwOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdWJwcm9jZXNzI3N1YnByb2Nlc3MuUG9wZW4ucmV0dXJuY29kZQorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIGdldF9waXBlX3RyYW5zcG9ydChzZWxmLCBmZCk6CisgICAgICAgICIiIkdldCB0cmFuc3BvcnQgZm9yIHBpcGUgd2l0aCBudW1iZXIgZmQuIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBzZW5kX3NpZ25hbChzZWxmLCBzaWduYWwpOgorICAgICAgICAiIiJTZW5kIHNpZ25hbCB0byBzdWJwcm9jZXNzLgorCisgICAgICAgIFNlZSBhbHNvOgorICAgICAgICBkb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N1YnByb2Nlc3Mjc3VicHJvY2Vzcy5Qb3Blbi5zZW5kX3NpZ25hbAorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIHRlcm1pbmF0ZShzZWxmKToKKyAgICAgICAgIiIiU3RvcCB0aGUgc3VicHJvY2Vzcy4KKworICAgICAgICBBbGlhcyBmb3IgY2xvc2UoKSBtZXRob2QuCisKKyAgICAgICAgT24gUG9zaXggT1NzIHRoZSBtZXRob2Qgc2VuZHMgU0lHVEVSTSB0byB0aGUgc3VicHJvY2Vzcy4KKyAgICAgICAgT24gV2luZG93cyB0aGUgV2luMzIgQVBJIGZ1bmN0aW9uIFRlcm1pbmF0ZVByb2Nlc3MoKQorICAgICAgICAgaXMgY2FsbGVkIHRvIHN0b3AgdGhlIHN1YnByb2Nlc3MuCisKKyAgICAgICAgU2VlIGFsc286CisgICAgICAgIGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N1YnByb2Nlc3Mjc3VicHJvY2Vzcy5Qb3Blbi50ZXJtaW5hdGUKKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBraWxsKHNlbGYpOgorICAgICAgICAiIiJLaWxsIHRoZSBzdWJwcm9jZXNzLgorCisgICAgICAgIE9uIFBvc2l4IE9TcyB0aGUgZnVuY3Rpb24gc2VuZHMgU0lHS0lMTCB0byB0aGUgc3VicHJvY2Vzcy4KKyAgICAgICAgT24gV2luZG93cyBraWxsKCkgaXMgYW4gYWxpYXMgZm9yIHRlcm1pbmF0ZSgpLgorCisgICAgICAgIFNlZSBhbHNvOgorICAgICAgICBodHRwOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdWJwcm9jZXNzI3N1YnByb2Nlc3MuUG9wZW4ua2lsbAorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisKK2NsYXNzIF9GbG93Q29udHJvbE1peGluKFRyYW5zcG9ydCk6CisgICAgIiIiQWxsIHRoZSBsb2dpYyBmb3IgKHdyaXRlKSBmbG93IGNvbnRyb2wgaW4gYSBtaXgtaW4gYmFzZSBjbGFzcy4KKworICAgIFRoZSBzdWJjbGFzcyBtdXN0IGltcGxlbWVudCBnZXRfd3JpdGVfYnVmZmVyX3NpemUoKS4gIEl0IG11c3QgY2FsbAorICAgIF9tYXliZV9wYXVzZV9wcm90b2NvbCgpIHdoZW5ldmVyIHRoZSB3cml0ZSBidWZmZXIgc2l6ZSBpbmNyZWFzZXMsCisgICAgYW5kIF9tYXliZV9yZXN1bWVfcHJvdG9jb2woKSB3aGVuZXZlciBpdCBkZWNyZWFzZXMuICBJdCBtYXkgYWxzbworICAgIG92ZXJyaWRlIHNldF93cml0ZV9idWZmZXJfbGltaXRzKCkgKGUuZy4gdG8gc3BlY2lmeSBkaWZmZXJlbnQKKyAgICBkZWZhdWx0cykuCisKKyAgICBUaGUgc3ViY2xhc3MgY29uc3RydWN0b3IgbXVzdCBjYWxsIHN1cGVyKCkuX19pbml0X18oZXh0cmEpLiAgVGhpcworICAgIHdpbGwgY2FsbCBzZXRfd3JpdGVfYnVmZmVyX2xpbWl0cygpLgorCisgICAgVGhlIHVzZXIgbWF5IGNhbGwgc2V0X3dyaXRlX2J1ZmZlcl9saW1pdHMoKSBhbmQKKyAgICBnZXRfd3JpdGVfYnVmZmVyX3NpemUoKSwgYW5kIHRoZWlyIHByb3RvY29sJ3MgcGF1c2Vfd3JpdGluZygpIGFuZAorICAgIHJlc3VtZV93cml0aW5nKCkgbWF5IGJlIGNhbGxlZC4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBleHRyYT1Ob25lLCBsb29wPU5vbmUpOgorICAgICAgICBzdXBlcigpLl9faW5pdF9fKGV4dHJhKQorICAgICAgICBhc3NlcnQgbG9vcCBpcyBub3QgTm9uZQorICAgICAgICBzZWxmLl9sb29wID0gbG9vcAorICAgICAgICBzZWxmLl9wcm90b2NvbF9wYXVzZWQgPSBGYWxzZQorICAgICAgICBzZWxmLl9zZXRfd3JpdGVfYnVmZmVyX2xpbWl0cygpCisKKyAgICBkZWYgX21heWJlX3BhdXNlX3Byb3RvY29sKHNlbGYpOgorICAgICAgICBzaXplID0gc2VsZi5nZXRfd3JpdGVfYnVmZmVyX3NpemUoKQorICAgICAgICBpZiBzaXplIDw9IHNlbGYuX2hpZ2hfd2F0ZXI6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgbm90IHNlbGYuX3Byb3RvY29sX3BhdXNlZDoKKyAgICAgICAgICAgIHNlbGYuX3Byb3RvY29sX3BhdXNlZCA9IFRydWUKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLl9wcm90b2NvbC5wYXVzZV93cml0aW5nKCkKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9leGNlcHRpb25faGFuZGxlcih7CisgICAgICAgICAgICAgICAgICAgICdtZXNzYWdlJzogJ3Byb3RvY29sLnBhdXNlX3dyaXRpbmcoKSBmYWlsZWQnLAorICAgICAgICAgICAgICAgICAgICAnZXhjZXB0aW9uJzogZXhjLAorICAgICAgICAgICAgICAgICAgICAndHJhbnNwb3J0Jzogc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgJ3Byb3RvY29sJzogc2VsZi5fcHJvdG9jb2wsCisgICAgICAgICAgICAgICAgfSkKKworICAgIGRlZiBfbWF5YmVfcmVzdW1lX3Byb3RvY29sKHNlbGYpOgorICAgICAgICBpZiAoc2VsZi5fcHJvdG9jb2xfcGF1c2VkIGFuZAorICAgICAgICAgICAgc2VsZi5nZXRfd3JpdGVfYnVmZmVyX3NpemUoKSA8PSBzZWxmLl9sb3dfd2F0ZXIpOgorICAgICAgICAgICAgc2VsZi5fcHJvdG9jb2xfcGF1c2VkID0gRmFsc2UKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLl9wcm90b2NvbC5yZXN1bWVfd3JpdGluZygpCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgICAgICBzZWxmLl9sb29wLmNhbGxfZXhjZXB0aW9uX2hhbmRsZXIoeworICAgICAgICAgICAgICAgICAgICAnbWVzc2FnZSc6ICdwcm90b2NvbC5yZXN1bWVfd3JpdGluZygpIGZhaWxlZCcsCisgICAgICAgICAgICAgICAgICAgICdleGNlcHRpb24nOiBleGMsCisgICAgICAgICAgICAgICAgICAgICd0cmFuc3BvcnQnOiBzZWxmLAorICAgICAgICAgICAgICAgICAgICAncHJvdG9jb2wnOiBzZWxmLl9wcm90b2NvbCwKKyAgICAgICAgICAgICAgICB9KQorCisgICAgZGVmIGdldF93cml0ZV9idWZmZXJfbGltaXRzKHNlbGYpOgorICAgICAgICByZXR1cm4gKHNlbGYuX2xvd193YXRlciwgc2VsZi5faGlnaF93YXRlcikKKworICAgIGRlZiBfc2V0X3dyaXRlX2J1ZmZlcl9saW1pdHMoc2VsZiwgaGlnaD1Ob25lLCBsb3c9Tm9uZSk6CisgICAgICAgIGlmIGhpZ2ggaXMgTm9uZToKKyAgICAgICAgICAgIGlmIGxvdyBpcyBOb25lOgorICAgICAgICAgICAgICAgIGhpZ2ggPSA2NCoxMDI0CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGhpZ2ggPSA0KmxvdworICAgICAgICBpZiBsb3cgaXMgTm9uZToKKyAgICAgICAgICAgIGxvdyA9IGhpZ2ggLy8gNAorICAgICAgICBpZiBub3QgaGlnaCA+PSBsb3cgPj0gMDoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ2hpZ2ggKCVyKSBtdXN0IGJlID49IGxvdyAoJXIpIG11c3QgYmUgPj0gMCcgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaGlnaCwgbG93KSkKKyAgICAgICAgc2VsZi5faGlnaF93YXRlciA9IGhpZ2gKKyAgICAgICAgc2VsZi5fbG93X3dhdGVyID0gbG93CisKKyAgICBkZWYgc2V0X3dyaXRlX2J1ZmZlcl9saW1pdHMoc2VsZiwgaGlnaD1Ob25lLCBsb3c9Tm9uZSk6CisgICAgICAgIHNlbGYuX3NldF93cml0ZV9idWZmZXJfbGltaXRzKGhpZ2g9aGlnaCwgbG93PWxvdykKKyAgICAgICAgc2VsZi5fbWF5YmVfcGF1c2VfcHJvdG9jb2woKQorCisgICAgZGVmIGdldF93cml0ZV9idWZmZXJfc2l6ZShzZWxmKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgpkaWZmIC0tZ2l0IGEvTGliL2FzeW5jaW8vdW5peF9ldmVudHMucHkgYi9MaWIvYXN5bmNpby91bml4X2V2ZW50cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzQ3ZmY0Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL2FzeW5jaW8vdW5peF9ldmVudHMucHkKQEAgLTAsMCArMSwxMDA3IEBACisiIiJTZWxlY3RvciBldmVudCBsb29wIGZvciBVbml4IHdpdGggc2lnbmFsIGhhbmRsaW5nLiIiIgorCitpbXBvcnQgZXJybm8KK2ltcG9ydCBvcworaW1wb3J0IHNpZ25hbAoraW1wb3J0IHNvY2tldAoraW1wb3J0IHN0YXQKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgc3lzCitpbXBvcnQgdGhyZWFkaW5nCitpbXBvcnQgd2FybmluZ3MKKworCitmcm9tIC4gaW1wb3J0IGJhc2VfZXZlbnRzCitmcm9tIC4gaW1wb3J0IGJhc2Vfc3VicHJvY2VzcworZnJvbSAuIGltcG9ydCBjb21wYXQKK2Zyb20gLiBpbXBvcnQgY29uc3RhbnRzCitmcm9tIC4gaW1wb3J0IGNvcm91dGluZXMKK2Zyb20gLiBpbXBvcnQgZXZlbnRzCitmcm9tIC4gaW1wb3J0IGZ1dHVyZXMKK2Zyb20gLiBpbXBvcnQgc2VsZWN0b3JfZXZlbnRzCitmcm9tIC4gaW1wb3J0IHNlbGVjdG9ycworZnJvbSAuIGltcG9ydCB0cmFuc3BvcnRzCitmcm9tIC5jb3JvdXRpbmVzIGltcG9ydCBjb3JvdXRpbmUKK2Zyb20gLmxvZyBpbXBvcnQgbG9nZ2VyCisKKworX19hbGxfXyA9IFsnU2VsZWN0b3JFdmVudExvb3AnLAorICAgICAgICAgICAnQWJzdHJhY3RDaGlsZFdhdGNoZXInLCAnU2FmZUNoaWxkV2F0Y2hlcicsCisgICAgICAgICAgICdGYXN0Q2hpbGRXYXRjaGVyJywgJ0RlZmF1bHRFdmVudExvb3BQb2xpY3knLAorICAgICAgICAgICBdCisKK2lmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOiAgIyBwcmFnbWE6IG5vIGNvdmVyCisgICAgcmFpc2UgSW1wb3J0RXJyb3IoJ1NpZ25hbHMgYXJlIG5vdCByZWFsbHkgc3VwcG9ydGVkIG9uIFdpbmRvd3MnKQorCisKK2RlZiBfc2lnaGFuZGxlcl9ub29wKHNpZ251bSwgZnJhbWUpOgorICAgICIiIkR1bW15IHNpZ25hbCBoYW5kbGVyLiIiIgorICAgIHBhc3MKKworCitjbGFzcyBfVW5peFNlbGVjdG9yRXZlbnRMb29wKHNlbGVjdG9yX2V2ZW50cy5CYXNlU2VsZWN0b3JFdmVudExvb3ApOgorICAgICIiIlVuaXggZXZlbnQgbG9vcC4KKworICAgIEFkZHMgc2lnbmFsIGhhbmRsaW5nIGFuZCBVTklYIERvbWFpbiBTb2NrZXQgc3VwcG9ydCB0byBTZWxlY3RvckV2ZW50TG9vcC4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZWxlY3Rvcj1Ob25lKToKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhzZWxlY3RvcikKKyAgICAgICAgc2VsZi5fc2lnbmFsX2hhbmRsZXJzID0ge30KKworICAgIGRlZiBfc29ja2V0cGFpcihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNvY2tldC5zb2NrZXRwYWlyKCkKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgc3VwZXIoKS5jbG9zZSgpCisgICAgICAgIGZvciBzaWcgaW4gbGlzdChzZWxmLl9zaWduYWxfaGFuZGxlcnMpOgorICAgICAgICAgICAgc2VsZi5yZW1vdmVfc2lnbmFsX2hhbmRsZXIoc2lnKQorCisgICAgZGVmIF9wcm9jZXNzX3NlbGZfZGF0YShzZWxmLCBkYXRhKToKKyAgICAgICAgZm9yIHNpZ251bSBpbiBkYXRhOgorICAgICAgICAgICAgaWYgbm90IHNpZ251bToKKyAgICAgICAgICAgICAgICAjIGlnbm9yZSBudWxsIGJ5dGVzIHdyaXR0ZW4gYnkgX3dyaXRlX3RvX3NlbGYoKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBzZWxmLl9oYW5kbGVfc2lnbmFsKHNpZ251bSkKKworICAgIGRlZiBhZGRfc2lnbmFsX2hhbmRsZXIoc2VsZiwgc2lnLCBjYWxsYmFjaywgKmFyZ3MpOgorICAgICAgICAiIiJBZGQgYSBoYW5kbGVyIGZvciBhIHNpZ25hbC4gIFVOSVggb25seS4KKworICAgICAgICBSYWlzZSBWYWx1ZUVycm9yIGlmIHRoZSBzaWduYWwgbnVtYmVyIGlzIGludmFsaWQgb3IgdW5jYXRjaGFibGUuCisgICAgICAgIFJhaXNlIFJ1bnRpbWVFcnJvciBpZiB0aGVyZSBpcyBhIHByb2JsZW0gc2V0dGluZyB1cCB0aGUgaGFuZGxlci4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIChjb3JvdXRpbmVzLmlzY29yb3V0aW5lKGNhbGxiYWNrKQorICAgICAgICBvciBjb3JvdXRpbmVzLmlzY29yb3V0aW5lZnVuY3Rpb24oY2FsbGJhY2spKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiY29yb3V0aW5lcyBjYW5ub3QgYmUgdXNlZCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndpdGggYWRkX3NpZ25hbF9oYW5kbGVyKCkiKQorICAgICAgICBzZWxmLl9jaGVja19zaWduYWwoc2lnKQorICAgICAgICBzZWxmLl9jaGVja19jbG9zZWQoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICAjIHNldF93YWtldXBfZmQoKSByYWlzZXMgVmFsdWVFcnJvciBpZiB0aGlzIGlzIG5vdCB0aGUKKyAgICAgICAgICAgICMgbWFpbiB0aHJlYWQuICBCeSBjYWxsaW5nIGl0IGVhcmx5IHdlIGVuc3VyZSB0aGF0IGFuCisgICAgICAgICAgICAjIGV2ZW50IGxvb3AgcnVubmluZyBpbiBhbm90aGVyIHRocmVhZCBjYW5ub3QgYWRkIGEgc2lnbmFsCisgICAgICAgICAgICAjIGhhbmRsZXIuCisgICAgICAgICAgICBzaWduYWwuc2V0X3dha2V1cF9mZChzZWxmLl9jc29jay5maWxlbm8oKSkKKyAgICAgICAgZXhjZXB0IChWYWx1ZUVycm9yLCBPU0Vycm9yKSBhcyBleGM6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3Ioc3RyKGV4YykpCisKKyAgICAgICAgaGFuZGxlID0gZXZlbnRzLkhhbmRsZShjYWxsYmFjaywgYXJncywgc2VsZikKKyAgICAgICAgc2VsZi5fc2lnbmFsX2hhbmRsZXJzW3NpZ10gPSBoYW5kbGUKKworICAgICAgICB0cnk6CisgICAgICAgICAgICAjIFJlZ2lzdGVyIGEgZHVtbXkgc2lnbmFsIGhhbmRsZXIgdG8gYXNrIFB5dGhvbiB0byB3cml0ZSB0aGUgc2lnbmFsCisgICAgICAgICAgICAjIG51bWJlciBpbiB0aGUgd2FrdXAgZmlsZSBkZXNjcmlwdG9yLiBfcHJvY2Vzc19zZWxmX2RhdGEoKSB3aWxsCisgICAgICAgICAgICAjIHJlYWQgc2lnbmFsIG51bWJlcnMgZnJvbSB0aGlzIGZpbGUgZGVzY3JpcHRvciB0byBoYW5kbGUgc2lnbmFscy4KKyAgICAgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnLCBfc2lnaGFuZGxlcl9ub29wKQorCisgICAgICAgICAgICAjIFNldCBTQV9SRVNUQVJUIHRvIGxpbWl0IEVJTlRSIG9jY3VycmVuY2VzLgorICAgICAgICAgICAgc2lnbmFsLnNpZ2ludGVycnVwdChzaWcsIEZhbHNlKQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6CisgICAgICAgICAgICBkZWwgc2VsZi5fc2lnbmFsX2hhbmRsZXJzW3NpZ10KKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9zaWduYWxfaGFuZGxlcnM6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBzaWduYWwuc2V0X3dha2V1cF9mZCgtMSkKKyAgICAgICAgICAgICAgICBleGNlcHQgKFZhbHVlRXJyb3IsIE9TRXJyb3IpIGFzIG5leGM6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdzZXRfd2FrZXVwX2ZkKC0xKSBmYWlsZWQ6ICVzJywgbmV4YykKKworICAgICAgICAgICAgaWYgZXhjLmVycm5vID09IGVycm5vLkVJTlZBTDoKKyAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ3NpZyB7fSBjYW5ub3QgYmUgY2F1Z2h0Jy5mb3JtYXQoc2lnKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UKKworICAgIGRlZiBfaGFuZGxlX3NpZ25hbChzZWxmLCBzaWcpOgorICAgICAgICAiIiJJbnRlcm5hbCBoZWxwZXIgdGhhdCBpcyB0aGUgYWN0dWFsIHNpZ25hbCBoYW5kbGVyLiIiIgorICAgICAgICBoYW5kbGUgPSBzZWxmLl9zaWduYWxfaGFuZGxlcnMuZ2V0KHNpZykKKyAgICAgICAgaWYgaGFuZGxlIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gICMgQXNzdW1lIGl0J3Mgc29tZSByYWNlIGNvbmRpdGlvbi4KKyAgICAgICAgaWYgaGFuZGxlLl9jYW5jZWxsZWQ6CisgICAgICAgICAgICBzZWxmLnJlbW92ZV9zaWduYWxfaGFuZGxlcihzaWcpICAjIFJlbW92ZSBpdCBwcm9wZXJseS4KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX2FkZF9jYWxsYmFja19zaWduYWxzYWZlKGhhbmRsZSkKKworICAgIGRlZiByZW1vdmVfc2lnbmFsX2hhbmRsZXIoc2VsZiwgc2lnKToKKyAgICAgICAgIiIiUmVtb3ZlIGEgaGFuZGxlciBmb3IgYSBzaWduYWwuICBVTklYIG9ubHkuCisKKyAgICAgICAgUmV0dXJuIFRydWUgaWYgYSBzaWduYWwgaGFuZGxlciB3YXMgcmVtb3ZlZCwgRmFsc2UgaWYgbm90LgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fY2hlY2tfc2lnbmFsKHNpZykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGVsIHNlbGYuX3NpZ25hbF9oYW5kbGVyc1tzaWddCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIGlmIHNpZyA9PSBzaWduYWwuU0lHSU5UOgorICAgICAgICAgICAgaGFuZGxlciA9IHNpZ25hbC5kZWZhdWx0X2ludF9oYW5kbGVyCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBoYW5kbGVyID0gc2lnbmFsLlNJR19ERkwKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBzaWduYWwuc2lnbmFsKHNpZywgaGFuZGxlcikKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgaWYgZXhjLmVycm5vID09IGVycm5vLkVJTlZBTDoKKyAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ3NpZyB7fSBjYW5ub3QgYmUgY2F1Z2h0Jy5mb3JtYXQoc2lnKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UKKworICAgICAgICBpZiBub3Qgc2VsZi5fc2lnbmFsX2hhbmRsZXJzOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNpZ25hbC5zZXRfd2FrZXVwX2ZkKC0xKQorICAgICAgICAgICAgZXhjZXB0IChWYWx1ZUVycm9yLCBPU0Vycm9yKSBhcyBleGM6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ3NldF93YWtldXBfZmQoLTEpIGZhaWxlZDogJXMnLCBleGMpCisKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBfY2hlY2tfc2lnbmFsKHNlbGYsIHNpZyk6CisgICAgICAgICIiIkludGVybmFsIGhlbHBlciB0byB2YWxpZGF0ZSBhIHNpZ25hbC4KKworICAgICAgICBSYWlzZSBWYWx1ZUVycm9yIGlmIHRoZSBzaWduYWwgbnVtYmVyIGlzIGludmFsaWQgb3IgdW5jYXRjaGFibGUuCisgICAgICAgIFJhaXNlIFJ1bnRpbWVFcnJvciBpZiB0aGVyZSBpcyBhIHByb2JsZW0gc2V0dGluZyB1cCB0aGUgaGFuZGxlci4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHNpZywgaW50KToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignc2lnIG11c3QgYmUgYW4gaW50LCBub3QgeyFyfScuZm9ybWF0KHNpZykpCisKKyAgICAgICAgaWYgbm90ICgxIDw9IHNpZyA8IHNpZ25hbC5OU0lHKToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCisgICAgICAgICAgICAgICAgJ3NpZyB7fSBvdXQgb2YgcmFuZ2UoMSwge30pJy5mb3JtYXQoc2lnLCBzaWduYWwuTlNJRykpCisKKyAgICBkZWYgX21ha2VfcmVhZF9waXBlX3RyYW5zcG9ydChzZWxmLCBwaXBlLCBwcm90b2NvbCwgd2FpdGVyPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE9Tm9uZSk6CisgICAgICAgIHJldHVybiBfVW5peFJlYWRQaXBlVHJhbnNwb3J0KHNlbGYsIHBpcGUsIHByb3RvY29sLCB3YWl0ZXIsIGV4dHJhKQorCisgICAgZGVmIF9tYWtlX3dyaXRlX3BpcGVfdHJhbnNwb3J0KHNlbGYsIHBpcGUsIHByb3RvY29sLCB3YWl0ZXI9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE9Tm9uZSk6CisgICAgICAgIHJldHVybiBfVW5peFdyaXRlUGlwZVRyYW5zcG9ydChzZWxmLCBwaXBlLCBwcm90b2NvbCwgd2FpdGVyLCBleHRyYSkKKworICAgIEBjb3JvdXRpbmUKKyAgICBkZWYgX21ha2Vfc3VicHJvY2Vzc190cmFuc3BvcnQoc2VsZiwgcHJvdG9jb2wsIGFyZ3MsIHNoZWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIsIGJ1ZnNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhPU5vbmUsICoqa3dhcmdzKToKKyAgICAgICAgd2l0aCBldmVudHMuZ2V0X2NoaWxkX3dhdGNoZXIoKSBhcyB3YXRjaGVyOgorICAgICAgICAgICAgd2FpdGVyID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmKQorICAgICAgICAgICAgdHJhbnNwID0gX1VuaXhTdWJwcm9jZXNzVHJhbnNwb3J0KHNlbGYsIHByb3RvY29sLCBhcmdzLCBzaGVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIsIGJ1ZnNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FpdGVyPXdhaXRlciwgZXh0cmE9ZXh0cmEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiprd2FyZ3MpCisKKyAgICAgICAgICAgIHdhdGNoZXIuYWRkX2NoaWxkX2hhbmRsZXIodHJhbnNwLmdldF9waWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fY2hpbGRfd2F0Y2hlcl9jYWxsYmFjaywgdHJhbnNwKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gd2FpdGVyCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgICAgICAjIFdvcmthcm91bmQgQ1B5dGhvbiBidWcgIzIzMzUzOiB1c2luZyB5aWVsZC95aWVsZC1mcm9tIGluIGFuCisgICAgICAgICAgICAgICAgIyBleGNlcHQgYmxvY2sgb2YgYSBnZW5lcmF0b3IgZG9lc24ndCBjbGVhciBwcm9wZXJseQorICAgICAgICAgICAgICAgICMgc3lzLmV4Y19pbmZvKCkKKyAgICAgICAgICAgICAgICBlcnIgPSBleGMKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZXJyID0gTm9uZQorCisgICAgICAgICAgICBpZiBlcnIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgdHJhbnNwLmNsb3NlKCkKKyAgICAgICAgICAgICAgICB5aWVsZCBmcm9tIHRyYW5zcC5fd2FpdCgpCisgICAgICAgICAgICAgICAgcmFpc2UgZXJyCisKKyAgICAgICAgcmV0dXJuIHRyYW5zcAorCisgICAgZGVmIF9jaGlsZF93YXRjaGVyX2NhbGxiYWNrKHNlbGYsIHBpZCwgcmV0dXJuY29kZSwgdHJhbnNwKToKKyAgICAgICAgc2VsZi5jYWxsX3Nvb25fdGhyZWFkc2FmZSh0cmFuc3AuX3Byb2Nlc3NfZXhpdGVkLCByZXR1cm5jb2RlKQorCisgICAgQGNvcm91dGluZQorICAgIGRlZiBjcmVhdGVfdW5peF9jb25uZWN0aW9uKHNlbGYsIHByb3RvY29sX2ZhY3RvcnksIHBhdGgsICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsPU5vbmUsIHNvY2s9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfaG9zdG5hbWU9Tm9uZSk6CisgICAgICAgIGFzc2VydCBzZXJ2ZXJfaG9zdG5hbWUgaXMgTm9uZSBvciBpc2luc3RhbmNlKHNlcnZlcl9ob3N0bmFtZSwgc3RyKQorICAgICAgICBpZiBzc2w6CisgICAgICAgICAgICBpZiBzZXJ2ZXJfaG9zdG5hbWUgaXMgTm9uZToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAorICAgICAgICAgICAgICAgICAgICAneW91IGhhdmUgdG8gcGFzcyBzZXJ2ZXJfaG9zdG5hbWUgd2hlbiB1c2luZyBzc2wnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgc2VydmVyX2hvc3RuYW1lIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3NlcnZlcl9ob3N0bmFtZSBpcyBvbmx5IG1lYW5pbmdmdWwgd2l0aCBzc2wnKQorCisgICAgICAgIGlmIHBhdGggaXMgbm90IE5vbmU6CisgICAgICAgICAgICBpZiBzb2NrIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCisgICAgICAgICAgICAgICAgICAgICdwYXRoIGFuZCBzb2NrIGNhbiBub3QgYmUgc3BlY2lmaWVkIGF0IHRoZSBzYW1lIHRpbWUnKQorCisgICAgICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfVU5JWCwgc29ja2V0LlNPQ0tfU1RSRUFNLCAwKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNvY2suc2V0YmxvY2tpbmcoRmFsc2UpCisgICAgICAgICAgICAgICAgeWllbGQgZnJvbSBzZWxmLnNvY2tfY29ubmVjdChzb2NrLCBwYXRoKQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIHNvY2suY2xvc2UoKQorICAgICAgICAgICAgICAgIHJhaXNlCisKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIHNvY2sgaXMgTm9uZToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdubyBwYXRoIGFuZCBzb2NrIHdlcmUgc3BlY2lmaWVkJykKKyAgICAgICAgICAgIHNvY2suc2V0YmxvY2tpbmcoRmFsc2UpCisKKyAgICAgICAgdHJhbnNwb3J0LCBwcm90b2NvbCA9IHlpZWxkIGZyb20gc2VsZi5fY3JlYXRlX2Nvbm5lY3Rpb25fdHJhbnNwb3J0KAorICAgICAgICAgICAgc29jaywgcHJvdG9jb2xfZmFjdG9yeSwgc3NsLCBzZXJ2ZXJfaG9zdG5hbWUpCisgICAgICAgIHJldHVybiB0cmFuc3BvcnQsIHByb3RvY29sCisKKyAgICBAY29yb3V0aW5lCisgICAgZGVmIGNyZWF0ZV91bml4X3NlcnZlcihzZWxmLCBwcm90b2NvbF9mYWN0b3J5LCBwYXRoPU5vbmUsICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrPU5vbmUsIGJhY2tsb2c9MTAwLCBzc2w9Tm9uZSk6CisgICAgICAgIGlmIGlzaW5zdGFuY2Uoc3NsLCBib29sKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignc3NsIGFyZ3VtZW50IG11c3QgYmUgYW4gU1NMQ29udGV4dCBvciBOb25lJykKKworICAgICAgICBpZiBwYXRoIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgaWYgc29jayBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAorICAgICAgICAgICAgICAgICAgICAncGF0aCBhbmQgc29jayBjYW4gbm90IGJlIHNwZWNpZmllZCBhdCB0aGUgc2FtZSB0aW1lJykKKworICAgICAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX1VOSVgsIHNvY2tldC5TT0NLX1NUUkVBTSkKKworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNvY2suYmluZChwYXRoKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgICAgIHNvY2suY2xvc2UoKQorICAgICAgICAgICAgICAgIGlmIGV4Yy5lcnJubyA9PSBlcnJuby5FQUREUklOVVNFOgorICAgICAgICAgICAgICAgICAgICAjIExldCdzIGltcHJvdmUgdGhlIGVycm9yIG1lc3NhZ2UgYnkgYWRkaW5nCisgICAgICAgICAgICAgICAgICAgICMgd2l0aCB3aGF0IGV4YWN0IGFkZHJlc3MgaXQgb2NjdXJzLgorICAgICAgICAgICAgICAgICAgICBtc2cgPSAnQWRkcmVzcyB7IXJ9IGlzIGFscmVhZHkgaW4gdXNlJy5mb3JtYXQocGF0aCkKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcihlcnJuby5FQUREUklOVVNFLCBtc2cpIGZyb20gTm9uZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgc29jay5jbG9zZSgpCisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIHNvY2sgaXMgTm9uZToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAorICAgICAgICAgICAgICAgICAgICAncGF0aCB3YXMgbm90IHNwZWNpZmllZCwgYW5kIG5vIHNvY2sgc3BlY2lmaWVkJykKKworICAgICAgICAgICAgaWYgc29jay5mYW1pbHkgIT0gc29ja2V0LkFGX1VOSVg6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKKyAgICAgICAgICAgICAgICAgICAgJ0EgVU5JWCBEb21haW4gU29ja2V0IHdhcyBleHBlY3RlZCwgZ290IHshcn0nLmZvcm1hdChzb2NrKSkKKworICAgICAgICBzZXJ2ZXIgPSBiYXNlX2V2ZW50cy5TZXJ2ZXIoc2VsZiwgW3NvY2tdKQorICAgICAgICBzb2NrLmxpc3RlbihiYWNrbG9nKQorICAgICAgICBzb2NrLnNldGJsb2NraW5nKEZhbHNlKQorICAgICAgICBzZWxmLl9zdGFydF9zZXJ2aW5nKHByb3RvY29sX2ZhY3RvcnksIHNvY2ssIHNzbCwgc2VydmVyKQorICAgICAgICByZXR1cm4gc2VydmVyCisKKworaWYgaGFzYXR0cihvcywgJ3NldF9ibG9ja2luZycpOgorICAgIGRlZiBfc2V0X25vbmJsb2NraW5nKGZkKToKKyAgICAgICAgb3Muc2V0X2Jsb2NraW5nKGZkLCBGYWxzZSkKK2Vsc2U6CisgICAgaW1wb3J0IGZjbnRsCisKKyAgICBkZWYgX3NldF9ub25ibG9ja2luZyhmZCk6CisgICAgICAgIGZsYWdzID0gZmNudGwuZmNudGwoZmQsIGZjbnRsLkZfR0VURkwpCisgICAgICAgIGZsYWdzID0gZmxhZ3MgfCBvcy5PX05PTkJMT0NLCisgICAgICAgIGZjbnRsLmZjbnRsKGZkLCBmY250bC5GX1NFVEZMLCBmbGFncykKKworCitjbGFzcyBfVW5peFJlYWRQaXBlVHJhbnNwb3J0KHRyYW5zcG9ydHMuUmVhZFRyYW5zcG9ydCk6CisKKyAgICBtYXhfc2l6ZSA9IDI1NiAqIDEwMjQgICMgbWF4IGJ5dGVzIHdlIHJlYWQgaW4gb25lIGV2ZW50IGxvb3AgaXRlcmF0aW9uCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbG9vcCwgcGlwZSwgcHJvdG9jb2wsIHdhaXRlcj1Ob25lLCBleHRyYT1Ob25lKToKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhleHRyYSkKKyAgICAgICAgc2VsZi5fZXh0cmFbJ3BpcGUnXSA9IHBpcGUKKyAgICAgICAgc2VsZi5fbG9vcCA9IGxvb3AKKyAgICAgICAgc2VsZi5fcGlwZSA9IHBpcGUKKyAgICAgICAgc2VsZi5fZmlsZW5vID0gcGlwZS5maWxlbm8oKQorICAgICAgICBtb2RlID0gb3MuZnN0YXQoc2VsZi5fZmlsZW5vKS5zdF9tb2RlCisgICAgICAgIGlmIG5vdCAoc3RhdC5TX0lTRklGTyhtb2RlKSBvcgorICAgICAgICAgICAgICAgIHN0YXQuU19JU1NPQ0sobW9kZSkgb3IKKyAgICAgICAgICAgICAgICBzdGF0LlNfSVNDSFIobW9kZSkpOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiUGlwZSB0cmFuc3BvcnQgaXMgZm9yIHBpcGVzL3NvY2tldHMgb25seS4iKQorICAgICAgICBfc2V0X25vbmJsb2NraW5nKHNlbGYuX2ZpbGVubykKKyAgICAgICAgc2VsZi5fcHJvdG9jb2wgPSBwcm90b2NvbAorICAgICAgICBzZWxmLl9jbG9zaW5nID0gRmFsc2UKKyAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24oc2VsZi5fcHJvdG9jb2wuY29ubmVjdGlvbl9tYWRlLCBzZWxmKQorICAgICAgICAjIG9ubHkgc3RhcnQgcmVhZGluZyB3aGVuIGNvbm5lY3Rpb25fbWFkZSgpIGhhcyBiZWVuIGNhbGxlZAorICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbihzZWxmLl9sb29wLmFkZF9yZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGVubywgc2VsZi5fcmVhZF9yZWFkeSkKKyAgICAgICAgaWYgd2FpdGVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgIyBvbmx5IHdha2UgdXAgdGhlIHdhaXRlciB3aGVuIGNvbm5lY3Rpb25fbWFkZSgpIGhhcyBiZWVuIGNhbGxlZAorICAgICAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24oZnV0dXJlcy5fc2V0X3Jlc3VsdF91bmxlc3NfY2FuY2VsbGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FpdGVyLCBOb25lKQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICBpbmZvID0gW3NlbGYuX19jbGFzc19fLl9fbmFtZV9fXQorICAgICAgICBpZiBzZWxmLl9waXBlIGlzIE5vbmU6CisgICAgICAgICAgICBpbmZvLmFwcGVuZCgnY2xvc2VkJykKKyAgICAgICAgZWxpZiBzZWxmLl9jbG9zaW5nOgorICAgICAgICAgICAgaW5mby5hcHBlbmQoJ2Nsb3NpbmcnKQorICAgICAgICBpbmZvLmFwcGVuZCgnZmQ9JXMnICUgc2VsZi5fZmlsZW5vKQorICAgICAgICBpZiBzZWxmLl9waXBlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcG9sbGluZyA9IHNlbGVjdG9yX2V2ZW50cy5fdGVzdF9zZWxlY3Rvcl9ldmVudCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fbG9vcC5fc2VsZWN0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGVubywgc2VsZWN0b3JzLkVWRU5UX1JFQUQpCisgICAgICAgICAgICBpZiBwb2xsaW5nOgorICAgICAgICAgICAgICAgIGluZm8uYXBwZW5kKCdwb2xsaW5nJykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaW5mby5hcHBlbmQoJ2lkbGUnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaW5mby5hcHBlbmQoJ2Nsb3NlZCcpCisgICAgICAgIHJldHVybiAnPCVzPicgJSAnICcuam9pbihpbmZvKQorCisgICAgZGVmIF9yZWFkX3JlYWR5KHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBkYXRhID0gb3MucmVhZChzZWxmLl9maWxlbm8sIHNlbGYubWF4X3NpemUpCisgICAgICAgIGV4Y2VwdCAoQmxvY2tpbmdJT0Vycm9yLCBJbnRlcnJ1cHRlZEVycm9yKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgc2VsZi5fZmF0YWxfZXJyb3IoZXhjLCAnRmF0YWwgcmVhZCBlcnJvciBvbiBwaXBlIHRyYW5zcG9ydCcpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBkYXRhOgorICAgICAgICAgICAgICAgIHNlbGYuX3Byb3RvY29sLmRhdGFfcmVjZWl2ZWQoZGF0YSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5fbG9vcC5nZXRfZGVidWcoKToKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oIiVyIHdhcyBjbG9zZWQgYnkgcGVlciIsIHNlbGYpCisgICAgICAgICAgICAgICAgc2VsZi5fY2xvc2luZyA9IFRydWUKKyAgICAgICAgICAgICAgICBzZWxmLl9sb29wLnJlbW92ZV9yZWFkZXIoc2VsZi5fZmlsZW5vKQorICAgICAgICAgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKHNlbGYuX3Byb3RvY29sLmVvZl9yZWNlaXZlZCkKKyAgICAgICAgICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbihzZWxmLl9jYWxsX2Nvbm5lY3Rpb25fbG9zdCwgTm9uZSkKKworICAgIGRlZiBwYXVzZV9yZWFkaW5nKHNlbGYpOgorICAgICAgICBzZWxmLl9sb29wLnJlbW92ZV9yZWFkZXIoc2VsZi5fZmlsZW5vKQorCisgICAgZGVmIHJlc3VtZV9yZWFkaW5nKHNlbGYpOgorICAgICAgICBzZWxmLl9sb29wLmFkZF9yZWFkZXIoc2VsZi5fZmlsZW5vLCBzZWxmLl9yZWFkX3JlYWR5KQorCisgICAgZGVmIGlzX2Nsb3Npbmcoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9jbG9zaW5nCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLl9jbG9zaW5nOgorICAgICAgICAgICAgc2VsZi5fY2xvc2UoTm9uZSkKKworICAgICMgT24gUHl0aG9uIDMuMyBhbmQgb2xkZXIsIG9iamVjdHMgd2l0aCBhIGRlc3RydWN0b3IgcGFydCBvZiBhIHJlZmVyZW5jZQorICAgICMgY3ljbGUgYXJlIG5ldmVyIGRlc3Ryb3llZC4gSXQncyBub3QgbW9yZSB0aGUgY2FzZSBvbiBQeXRob24gMy40IHRoYW5rcworICAgICMgdG8gdGhlIFBFUCA0NDIuCisgICAgaWYgY29tcGF0LlBZMzQ6CisgICAgICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICAgICAgaWYgc2VsZi5fcGlwZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICB3YXJuaW5ncy53YXJuKCJ1bmNsb3NlZCB0cmFuc3BvcnQgJXIiICUgc2VsZiwgUmVzb3VyY2VXYXJuaW5nKQorICAgICAgICAgICAgICAgIHNlbGYuX3BpcGUuY2xvc2UoKQorCisgICAgZGVmIF9mYXRhbF9lcnJvcihzZWxmLCBleGMsIG1lc3NhZ2U9J0ZhdGFsIGVycm9yIG9uIHBpcGUgdHJhbnNwb3J0Jyk6CisgICAgICAgICMgc2hvdWxkIGJlIGNhbGxlZCBieSBleGNlcHRpb24gaGFuZGxlciBvbmx5CisgICAgICAgIGlmIChpc2luc3RhbmNlKGV4YywgT1NFcnJvcikgYW5kIGV4Yy5lcnJubyA9PSBlcnJuby5FSU8pOgorICAgICAgICAgICAgaWYgc2VsZi5fbG9vcC5nZXRfZGVidWcoKToKKyAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoIiVyOiAlcyIsIHNlbGYsIG1lc3NhZ2UsIGV4Y19pbmZvPVRydWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9sb29wLmNhbGxfZXhjZXB0aW9uX2hhbmRsZXIoeworICAgICAgICAgICAgICAgICdtZXNzYWdlJzogbWVzc2FnZSwKKyAgICAgICAgICAgICAgICAnZXhjZXB0aW9uJzogZXhjLAorICAgICAgICAgICAgICAgICd0cmFuc3BvcnQnOiBzZWxmLAorICAgICAgICAgICAgICAgICdwcm90b2NvbCc6IHNlbGYuX3Byb3RvY29sLAorICAgICAgICAgICAgfSkKKyAgICAgICAgc2VsZi5fY2xvc2UoZXhjKQorCisgICAgZGVmIF9jbG9zZShzZWxmLCBleGMpOgorICAgICAgICBzZWxmLl9jbG9zaW5nID0gVHJ1ZQorICAgICAgICBzZWxmLl9sb29wLnJlbW92ZV9yZWFkZXIoc2VsZi5fZmlsZW5vKQorICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbihzZWxmLl9jYWxsX2Nvbm5lY3Rpb25fbG9zdCwgZXhjKQorCisgICAgZGVmIF9jYWxsX2Nvbm5lY3Rpb25fbG9zdChzZWxmLCBleGMpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl9wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QoZXhjKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5fcGlwZS5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLl9waXBlID0gTm9uZQorICAgICAgICAgICAgc2VsZi5fcHJvdG9jb2wgPSBOb25lCisgICAgICAgICAgICBzZWxmLl9sb29wID0gTm9uZQorCisKK2NsYXNzIF9Vbml4V3JpdGVQaXBlVHJhbnNwb3J0KHRyYW5zcG9ydHMuX0Zsb3dDb250cm9sTWl4aW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc3BvcnRzLldyaXRlVHJhbnNwb3J0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb29wLCBwaXBlLCBwcm90b2NvbCwgd2FpdGVyPU5vbmUsIGV4dHJhPU5vbmUpOgorICAgICAgICBzdXBlcigpLl9faW5pdF9fKGV4dHJhLCBsb29wKQorICAgICAgICBzZWxmLl9leHRyYVsncGlwZSddID0gcGlwZQorICAgICAgICBzZWxmLl9waXBlID0gcGlwZQorICAgICAgICBzZWxmLl9maWxlbm8gPSBwaXBlLmZpbGVubygpCisgICAgICAgIG1vZGUgPSBvcy5mc3RhdChzZWxmLl9maWxlbm8pLnN0X21vZGUKKyAgICAgICAgaXNfc29ja2V0ID0gc3RhdC5TX0lTU09DSyhtb2RlKQorICAgICAgICBpZiBub3QgKGlzX3NvY2tldCBvcgorICAgICAgICAgICAgICAgIHN0YXQuU19JU0ZJRk8obW9kZSkgb3IKKyAgICAgICAgICAgICAgICBzdGF0LlNfSVNDSFIobW9kZSkpOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiUGlwZSB0cmFuc3BvcnQgaXMgb25seSBmb3IgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGlwZXMsIHNvY2tldHMgYW5kIGNoYXJhY3RlciBkZXZpY2VzIikKKyAgICAgICAgX3NldF9ub25ibG9ja2luZyhzZWxmLl9maWxlbm8pCisgICAgICAgIHNlbGYuX3Byb3RvY29sID0gcHJvdG9jb2wKKyAgICAgICAgc2VsZi5fYnVmZmVyID0gW10KKyAgICAgICAgc2VsZi5fY29ubl9sb3N0ID0gMAorICAgICAgICBzZWxmLl9jbG9zaW5nID0gRmFsc2UgICMgU2V0IHdoZW4gY2xvc2UoKSBvciB3cml0ZV9lb2YoKSBjYWxsZWQuCisKKyAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24oc2VsZi5fcHJvdG9jb2wuY29ubmVjdGlvbl9tYWRlLCBzZWxmKQorCisgICAgICAgICMgT24gQUlYLCB0aGUgcmVhZGVyIHRyaWNrICh0byBiZSBub3RpZmllZCB3aGVuIHRoZSByZWFkIGVuZCBvZiB0aGUKKyAgICAgICAgIyBzb2NrZXQgaXMgY2xvc2VkKSBvbmx5IHdvcmtzIGZvciBzb2NrZXRzLiBPbiBvdGhlciBwbGF0Zm9ybXMgaXQKKyAgICAgICAgIyB3b3JrcyBmb3IgcGlwZXMgYW5kIHNvY2tldHMuIChFeGNlcHRpb246IE9TIFggMTAuND8gIElzc3VlICMxOTI5NC4pCisgICAgICAgIGlmIGlzX3NvY2tldCBvciBub3Qgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoImFpeCIpOgorICAgICAgICAgICAgIyBvbmx5IHN0YXJ0IHJlYWRpbmcgd2hlbiBjb25uZWN0aW9uX21hZGUoKSBoYXMgYmVlbiBjYWxsZWQKKyAgICAgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKHNlbGYuX2xvb3AuYWRkX3JlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGVubywgc2VsZi5fcmVhZF9yZWFkeSkKKworICAgICAgICBpZiB3YWl0ZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAjIG9ubHkgd2FrZSB1cCB0aGUgd2FpdGVyIHdoZW4gY29ubmVjdGlvbl9tYWRlKCkgaGFzIGJlZW4gY2FsbGVkCisgICAgICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbihmdXR1cmVzLl9zZXRfcmVzdWx0X3VubGVzc19jYW5jZWxsZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YWl0ZXIsIE5vbmUpCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIGluZm8gPSBbc2VsZi5fX2NsYXNzX18uX19uYW1lX19dCisgICAgICAgIGlmIHNlbGYuX3BpcGUgaXMgTm9uZToKKyAgICAgICAgICAgIGluZm8uYXBwZW5kKCdjbG9zZWQnKQorICAgICAgICBlbGlmIHNlbGYuX2Nsb3Npbmc6CisgICAgICAgICAgICBpbmZvLmFwcGVuZCgnY2xvc2luZycpCisgICAgICAgIGluZm8uYXBwZW5kKCdmZD0lcycgJSBzZWxmLl9maWxlbm8pCisgICAgICAgIGlmIHNlbGYuX3BpcGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBwb2xsaW5nID0gc2VsZWN0b3JfZXZlbnRzLl90ZXN0X3NlbGVjdG9yX2V2ZW50KAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9sb29wLl9zZWxlY3RvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZmlsZW5vLCBzZWxlY3RvcnMuRVZFTlRfV1JJVEUpCisgICAgICAgICAgICBpZiBwb2xsaW5nOgorICAgICAgICAgICAgICAgIGluZm8uYXBwZW5kKCdwb2xsaW5nJykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaW5mby5hcHBlbmQoJ2lkbGUnKQorCisgICAgICAgICAgICBidWZzaXplID0gc2VsZi5nZXRfd3JpdGVfYnVmZmVyX3NpemUoKQorICAgICAgICAgICAgaW5mby5hcHBlbmQoJ2J1ZnNpemU9JXMnICUgYnVmc2l6ZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGluZm8uYXBwZW5kKCdjbG9zZWQnKQorICAgICAgICByZXR1cm4gJzwlcz4nICUgJyAnLmpvaW4oaW5mbykKKworICAgIGRlZiBnZXRfd3JpdGVfYnVmZmVyX3NpemUoc2VsZik6CisgICAgICAgIHJldHVybiBzdW0obGVuKGRhdGEpIGZvciBkYXRhIGluIHNlbGYuX2J1ZmZlcikKKworICAgIGRlZiBfcmVhZF9yZWFkeShzZWxmKToKKyAgICAgICAgIyBQaXBlIHdhcyBjbG9zZWQgYnkgcGVlci4KKyAgICAgICAgaWYgc2VsZi5fbG9vcC5nZXRfZGVidWcoKToKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCIlciB3YXMgY2xvc2VkIGJ5IHBlZXIiLCBzZWxmKQorICAgICAgICBpZiBzZWxmLl9idWZmZXI6CisgICAgICAgICAgICBzZWxmLl9jbG9zZShCcm9rZW5QaXBlRXJyb3IoKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX2Nsb3NlKCkKKworICAgIGRlZiB3cml0ZShzZWxmLCBkYXRhKToKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoZGF0YSwgKGJ5dGVzLCBieXRlYXJyYXksIG1lbW9yeXZpZXcpKSwgcmVwcihkYXRhKQorICAgICAgICBpZiBpc2luc3RhbmNlKGRhdGEsIGJ5dGVhcnJheSk6CisgICAgICAgICAgICBkYXRhID0gbWVtb3J5dmlldyhkYXRhKQorICAgICAgICBpZiBub3QgZGF0YToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIHNlbGYuX2Nvbm5fbG9zdCBvciBzZWxmLl9jbG9zaW5nOgorICAgICAgICAgICAgaWYgc2VsZi5fY29ubl9sb3N0ID49IGNvbnN0YW50cy5MT0dfVEhSRVNIT0xEX0ZPUl9DT05OTE9TVF9XUklURVM6CisgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ3BpcGUgY2xvc2VkIGJ5IHBlZXIgb3IgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvcy53cml0ZShwaXBlLCBkYXRhKSByYWlzZWQgZXhjZXB0aW9uLicpCisgICAgICAgICAgICBzZWxmLl9jb25uX2xvc3QgKz0gMQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaWYgbm90IHNlbGYuX2J1ZmZlcjoKKyAgICAgICAgICAgICMgQXR0ZW1wdCB0byBzZW5kIGl0IHJpZ2h0IGF3YXkgZmlyc3QuCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbiA9IG9zLndyaXRlKHNlbGYuX2ZpbGVubywgZGF0YSkKKyAgICAgICAgICAgIGV4Y2VwdCAoQmxvY2tpbmdJT0Vycm9yLCBJbnRlcnJ1cHRlZEVycm9yKToKKyAgICAgICAgICAgICAgICBuID0gMAorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICAgICAgc2VsZi5fY29ubl9sb3N0ICs9IDEKKyAgICAgICAgICAgICAgICBzZWxmLl9mYXRhbF9lcnJvcihleGMsICdGYXRhbCB3cml0ZSBlcnJvciBvbiBwaXBlIHRyYW5zcG9ydCcpCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBpZiBuID09IGxlbihkYXRhKToKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIGVsaWYgbiA+IDA6CisgICAgICAgICAgICAgICAgZGF0YSA9IGRhdGFbbjpdCisgICAgICAgICAgICBzZWxmLl9sb29wLmFkZF93cml0ZXIoc2VsZi5fZmlsZW5vLCBzZWxmLl93cml0ZV9yZWFkeSkKKworICAgICAgICBzZWxmLl9idWZmZXIuYXBwZW5kKGRhdGEpCisgICAgICAgIHNlbGYuX21heWJlX3BhdXNlX3Byb3RvY29sKCkKKworICAgIGRlZiBfd3JpdGVfcmVhZHkoc2VsZik6CisgICAgICAgIGRhdGEgPSBiJycuam9pbihzZWxmLl9idWZmZXIpCisgICAgICAgIGFzc2VydCBkYXRhLCAnRGF0YSBzaG91bGQgbm90IGJlIGVtcHR5JworCisgICAgICAgIHNlbGYuX2J1ZmZlci5jbGVhcigpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG4gPSBvcy53cml0ZShzZWxmLl9maWxlbm8sIGRhdGEpCisgICAgICAgIGV4Y2VwdCAoQmxvY2tpbmdJT0Vycm9yLCBJbnRlcnJ1cHRlZEVycm9yKToKKyAgICAgICAgICAgIHNlbGYuX2J1ZmZlci5hcHBlbmQoZGF0YSkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICBzZWxmLl9jb25uX2xvc3QgKz0gMQorICAgICAgICAgICAgIyBSZW1vdmUgd3JpdGVyIGhlcmUsIF9mYXRhbF9lcnJvcigpIGRvZXNuJ3QgaXQKKyAgICAgICAgICAgICMgYmVjYXVzZSBfYnVmZmVyIGlzIGVtcHR5LgorICAgICAgICAgICAgc2VsZi5fbG9vcC5yZW1vdmVfd3JpdGVyKHNlbGYuX2ZpbGVubykKKyAgICAgICAgICAgIHNlbGYuX2ZhdGFsX2Vycm9yKGV4YywgJ0ZhdGFsIHdyaXRlIGVycm9yIG9uIHBpcGUgdHJhbnNwb3J0JykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIG4gPT0gbGVuKGRhdGEpOgorICAgICAgICAgICAgICAgIHNlbGYuX2xvb3AucmVtb3ZlX3dyaXRlcihzZWxmLl9maWxlbm8pCisgICAgICAgICAgICAgICAgc2VsZi5fbWF5YmVfcmVzdW1lX3Byb3RvY29sKCkgICMgTWF5IGFwcGVuZCB0byBidWZmZXIuCisgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuX2J1ZmZlciBhbmQgc2VsZi5fY2xvc2luZzoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fbG9vcC5yZW1vdmVfcmVhZGVyKHNlbGYuX2ZpbGVubykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fY2FsbF9jb25uZWN0aW9uX2xvc3QoTm9uZSkKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIGVsaWYgbiA+IDA6CisgICAgICAgICAgICAgICAgZGF0YSA9IGRhdGFbbjpdCisKKyAgICAgICAgICAgIHNlbGYuX2J1ZmZlci5hcHBlbmQoZGF0YSkgICMgVHJ5IGFnYWluIGxhdGVyLgorCisgICAgZGVmIGNhbl93cml0ZV9lb2Yoc2VsZik6CisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgd3JpdGVfZW9mKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9jbG9zaW5nOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGFzc2VydCBzZWxmLl9waXBlCisgICAgICAgIHNlbGYuX2Nsb3NpbmcgPSBUcnVlCisgICAgICAgIGlmIG5vdCBzZWxmLl9idWZmZXI6CisgICAgICAgICAgICBzZWxmLl9sb29wLnJlbW92ZV9yZWFkZXIoc2VsZi5fZmlsZW5vKQorICAgICAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24oc2VsZi5fY2FsbF9jb25uZWN0aW9uX2xvc3QsIE5vbmUpCisKKyAgICBkZWYgaXNfY2xvc2luZyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2Nsb3NpbmcKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fcGlwZSBpcyBub3QgTm9uZSBhbmQgbm90IHNlbGYuX2Nsb3Npbmc6CisgICAgICAgICAgICAjIHdyaXRlX2VvZiBpcyBhbGwgd2hhdCB3ZSBuZWVkZWQgdG8gY2xvc2UgdGhlIHdyaXRlIHBpcGUKKyAgICAgICAgICAgIHNlbGYud3JpdGVfZW9mKCkKKworICAgICMgT24gUHl0aG9uIDMuMyBhbmQgb2xkZXIsIG9iamVjdHMgd2l0aCBhIGRlc3RydWN0b3IgcGFydCBvZiBhIHJlZmVyZW5jZQorICAgICMgY3ljbGUgYXJlIG5ldmVyIGRlc3Ryb3llZC4gSXQncyBub3QgbW9yZSB0aGUgY2FzZSBvbiBQeXRob24gMy40IHRoYW5rcworICAgICMgdG8gdGhlIFBFUCA0NDIuCisgICAgaWYgY29tcGF0LlBZMzQ6CisgICAgICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICAgICAgaWYgc2VsZi5fcGlwZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICB3YXJuaW5ncy53YXJuKCJ1bmNsb3NlZCB0cmFuc3BvcnQgJXIiICUgc2VsZiwgUmVzb3VyY2VXYXJuaW5nKQorICAgICAgICAgICAgICAgIHNlbGYuX3BpcGUuY2xvc2UoKQorCisgICAgZGVmIGFib3J0KHNlbGYpOgorICAgICAgICBzZWxmLl9jbG9zZShOb25lKQorCisgICAgZGVmIF9mYXRhbF9lcnJvcihzZWxmLCBleGMsIG1lc3NhZ2U9J0ZhdGFsIGVycm9yIG9uIHBpcGUgdHJhbnNwb3J0Jyk6CisgICAgICAgICMgc2hvdWxkIGJlIGNhbGxlZCBieSBleGNlcHRpb24gaGFuZGxlciBvbmx5CisgICAgICAgIGlmIGlzaW5zdGFuY2UoZXhjLCAoQnJva2VuUGlwZUVycm9yLCBDb25uZWN0aW9uUmVzZXRFcnJvcikpOgorICAgICAgICAgICAgaWYgc2VsZi5fbG9vcC5nZXRfZGVidWcoKToKKyAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoIiVyOiAlcyIsIHNlbGYsIG1lc3NhZ2UsIGV4Y19pbmZvPVRydWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9sb29wLmNhbGxfZXhjZXB0aW9uX2hhbmRsZXIoeworICAgICAgICAgICAgICAgICdtZXNzYWdlJzogbWVzc2FnZSwKKyAgICAgICAgICAgICAgICAnZXhjZXB0aW9uJzogZXhjLAorICAgICAgICAgICAgICAgICd0cmFuc3BvcnQnOiBzZWxmLAorICAgICAgICAgICAgICAgICdwcm90b2NvbCc6IHNlbGYuX3Byb3RvY29sLAorICAgICAgICAgICAgfSkKKyAgICAgICAgc2VsZi5fY2xvc2UoZXhjKQorCisgICAgZGVmIF9jbG9zZShzZWxmLCBleGM9Tm9uZSk6CisgICAgICAgIHNlbGYuX2Nsb3NpbmcgPSBUcnVlCisgICAgICAgIGlmIHNlbGYuX2J1ZmZlcjoKKyAgICAgICAgICAgIHNlbGYuX2xvb3AucmVtb3ZlX3dyaXRlcihzZWxmLl9maWxlbm8pCisgICAgICAgIHNlbGYuX2J1ZmZlci5jbGVhcigpCisgICAgICAgIHNlbGYuX2xvb3AucmVtb3ZlX3JlYWRlcihzZWxmLl9maWxlbm8pCisgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKHNlbGYuX2NhbGxfY29ubmVjdGlvbl9sb3N0LCBleGMpCisKKyAgICBkZWYgX2NhbGxfY29ubmVjdGlvbl9sb3N0KHNlbGYsIGV4Yyk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX3Byb3RvY29sLmNvbm5lY3Rpb25fbG9zdChleGMpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLl9waXBlLmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuX3BpcGUgPSBOb25lCisgICAgICAgICAgICBzZWxmLl9wcm90b2NvbCA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYuX2xvb3AgPSBOb25lCisKKworaWYgaGFzYXR0cihvcywgJ3NldF9pbmhlcml0YWJsZScpOgorICAgICMgUHl0aG9uIDMuNCBhbmQgbmV3ZXIKKyAgICBfc2V0X2luaGVyaXRhYmxlID0gb3Muc2V0X2luaGVyaXRhYmxlCitlbHNlOgorICAgIGltcG9ydCBmY250bAorCisgICAgZGVmIF9zZXRfaW5oZXJpdGFibGUoZmQsIGluaGVyaXRhYmxlKToKKyAgICAgICAgY2xvZXhlY19mbGFnID0gZ2V0YXR0cihmY250bCwgJ0ZEX0NMT0VYRUMnLCAxKQorCisgICAgICAgIG9sZCA9IGZjbnRsLmZjbnRsKGZkLCBmY250bC5GX0dFVEZEKQorICAgICAgICBpZiBub3QgaW5oZXJpdGFibGU6CisgICAgICAgICAgICBmY250bC5mY250bChmZCwgZmNudGwuRl9TRVRGRCwgb2xkIHwgY2xvZXhlY19mbGFnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZmNudGwuZmNudGwoZmQsIGZjbnRsLkZfU0VURkQsIG9sZCAmIH5jbG9leGVjX2ZsYWcpCisKKworY2xhc3MgX1VuaXhTdWJwcm9jZXNzVHJhbnNwb3J0KGJhc2Vfc3VicHJvY2Vzcy5CYXNlU3VicHJvY2Vzc1RyYW5zcG9ydCk6CisKKyAgICBkZWYgX3N0YXJ0KHNlbGYsIGFyZ3MsIHNoZWxsLCBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIsIGJ1ZnNpemUsICoqa3dhcmdzKToKKyAgICAgICAgc3RkaW5fdyA9IE5vbmUKKyAgICAgICAgaWYgc3RkaW4gPT0gc3VicHJvY2Vzcy5QSVBFOgorICAgICAgICAgICAgIyBVc2UgYSBzb2NrZXQgcGFpciBmb3Igc3RkaW4sIHNpbmNlIG5vdCBhbGwgcGxhdGZvcm1zCisgICAgICAgICAgICAjIHN1cHBvcnQgc2VsZWN0aW5nIHJlYWQgZXZlbnRzIG9uIHRoZSB3cml0ZSBlbmQgb2YgYQorICAgICAgICAgICAgIyBzb2NrZXQgKHdoaWNoIHdlIHVzZSBpbiBvcmRlciB0byBkZXRlY3QgY2xvc2luZyBvZiB0aGUKKyAgICAgICAgICAgICMgb3RoZXIgZW5kKS4gIE5vdGFibHkgdGhpcyBpcyBuZWVkZWQgb24gQUlYLCBhbmQgd29ya3MKKyAgICAgICAgICAgICMganVzdCBmaW5lIG9uIG90aGVyIHBsYXRmb3Jtcy4KKyAgICAgICAgICAgIHN0ZGluLCBzdGRpbl93ID0gc2VsZi5fbG9vcC5fc29ja2V0cGFpcigpCisKKyAgICAgICAgICAgICMgTWFyayB0aGUgd3JpdGUgZW5kIG9mIHRoZSBzdGRpbiBwaXBlIGFzIG5vbi1pbmhlcml0YWJsZSwKKyAgICAgICAgICAgICMgbmVlZGVkIGJ5IGNsb3NlX2Zkcz1GYWxzZSBvbiBQeXRob24gMy4zIGFuZCBvbGRlcgorICAgICAgICAgICAgIyAoUHl0aG9uIDMuNCBpbXBsZW1lbnRzIHRoZSBQRVAgNDQ2LCBzb2NrZXRwYWlyIHJldHVybnMKKyAgICAgICAgICAgICMgbm9uLWluaGVyaXRhYmxlIHNvY2tldHMpCisgICAgICAgICAgICBfc2V0X2luaGVyaXRhYmxlKHN0ZGluX3cuZmlsZW5vKCksIEZhbHNlKQorICAgICAgICBzZWxmLl9wcm9jID0gc3VicHJvY2Vzcy5Qb3BlbigKKyAgICAgICAgICAgIGFyZ3MsIHNoZWxsPXNoZWxsLCBzdGRpbj1zdGRpbiwgc3Rkb3V0PXN0ZG91dCwgc3RkZXJyPXN0ZGVyciwKKyAgICAgICAgICAgIHVuaXZlcnNhbF9uZXdsaW5lcz1GYWxzZSwgYnVmc2l6ZT1idWZzaXplLCAqKmt3YXJncykKKyAgICAgICAgaWYgc3RkaW5fdyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHN0ZGluLmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuX3Byb2Muc3RkaW4gPSBvcGVuKHN0ZGluX3cuZGV0YWNoKCksICd3YicsIGJ1ZmZlcmluZz1idWZzaXplKQorCisKK2NsYXNzIEFic3RyYWN0Q2hpbGRXYXRjaGVyOgorICAgICIiIkFic3RyYWN0IGJhc2UgY2xhc3MgZm9yIG1vbml0b3JpbmcgY2hpbGQgcHJvY2Vzc2VzLgorCisgICAgT2JqZWN0cyBkZXJpdmVkIGZyb20gdGhpcyBjbGFzcyBtb25pdG9yIGEgY29sbGVjdGlvbiBvZiBzdWJwcm9jZXNzZXMgYW5kCisgICAgcmVwb3J0IHRoZWlyIHRlcm1pbmF0aW9uIG9yIGludGVycnVwdGlvbiBieSBhIHNpZ25hbC4KKworICAgIE5ldyBjYWxsYmFja3MgYXJlIHJlZ2lzdGVyZWQgd2l0aCAuYWRkX2NoaWxkX2hhbmRsZXIoKS4gU3RhcnRpbmcgYSBuZXcKKyAgICBwcm9jZXNzIG11c3QgYmUgZG9uZSB3aXRoaW4gYSAnd2l0aCcgYmxvY2sgdG8gYWxsb3cgdGhlIHdhdGNoZXIgdG8gc3VzcGVuZAorICAgIGl0cyBhY3Rpdml0eSB1bnRpbCB0aGUgbmV3IHByb2Nlc3MgaWYgZnVsbHkgcmVnaXN0ZXJlZCAodGhpcyBpcyBuZWVkZWQgdG8KKyAgICBwcmV2ZW50IGEgcmFjZSBjb25kaXRpb24gaW4gc29tZSBpbXBsZW1lbnRhdGlvbnMpLgorCisgICAgRXhhbXBsZToKKyAgICAgICAgd2l0aCB3YXRjaGVyOgorICAgICAgICAgICAgcHJvYyA9IHN1YnByb2Nlc3MuUG9wZW4oInNsZWVwIDEiKQorICAgICAgICAgICAgd2F0Y2hlci5hZGRfY2hpbGRfaGFuZGxlcihwcm9jLnBpZCwgY2FsbGJhY2spCisKKyAgICBOb3RlczoKKyAgICAgICAgSW1wbGVtZW50YXRpb25zIG9mIHRoaXMgY2xhc3MgbXVzdCBiZSB0aHJlYWQtc2FmZS4KKworICAgICAgICBTaW5jZSBjaGlsZCB3YXRjaGVyIG9iamVjdHMgbWF5IGNhdGNoIHRoZSBTSUdDSExEIHNpZ25hbCBhbmQgY2FsbAorICAgICAgICB3YWl0cGlkKC0xKSwgdGhlcmUgc2hvdWxkIGJlIG9ubHkgb25lIGFjdGl2ZSBvYmplY3QgcGVyIHByb2Nlc3MuCisgICAgIiIiCisKKyAgICBkZWYgYWRkX2NoaWxkX2hhbmRsZXIoc2VsZiwgcGlkLCBjYWxsYmFjaywgKmFyZ3MpOgorICAgICAgICAiIiJSZWdpc3RlciBhIG5ldyBjaGlsZCBoYW5kbGVyLgorCisgICAgICAgIEFycmFuZ2UgZm9yIGNhbGxiYWNrKHBpZCwgcmV0dXJuY29kZSwgKmFyZ3MpIHRvIGJlIGNhbGxlZCB3aGVuCisgICAgICAgIHByb2Nlc3MgJ3BpZCcgdGVybWluYXRlcy4gU3BlY2lmeWluZyBhbm90aGVyIGNhbGxiYWNrIGZvciB0aGUgc2FtZQorICAgICAgICBwcm9jZXNzIHJlcGxhY2VzIHRoZSBwcmV2aW91cyBoYW5kbGVyLgorCisgICAgICAgIE5vdGU6IGNhbGxiYWNrKCkgbXVzdCBiZSB0aHJlYWQtc2FmZS4KKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQorCisgICAgZGVmIHJlbW92ZV9jaGlsZF9oYW5kbGVyKHNlbGYsIHBpZCk6CisgICAgICAgICIiIlJlbW92ZXMgdGhlIGhhbmRsZXIgZm9yIHByb2Nlc3MgJ3BpZCcuCisKKyAgICAgICAgVGhlIGZ1bmN0aW9uIHJldHVybnMgVHJ1ZSBpZiB0aGUgaGFuZGxlciB3YXMgc3VjY2Vzc2Z1bGx5IHJlbW92ZWQsCisgICAgICAgIEZhbHNlIGlmIHRoZXJlIHdhcyBub3RoaW5nIHRvIHJlbW92ZS4iIiIKKworICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCkKKworICAgIGRlZiBhdHRhY2hfbG9vcChzZWxmLCBsb29wKToKKyAgICAgICAgIiIiQXR0YWNoIHRoZSB3YXRjaGVyIHRvIGFuIGV2ZW50IGxvb3AuCisKKyAgICAgICAgSWYgdGhlIHdhdGNoZXIgd2FzIHByZXZpb3VzbHkgYXR0YWNoZWQgdG8gYW4gZXZlbnQgbG9vcCwgdGhlbiBpdCBpcworICAgICAgICBmaXJzdCBkZXRhY2hlZCBiZWZvcmUgYXR0YWNoaW5nIHRvIHRoZSBuZXcgbG9vcC4KKworICAgICAgICBOb3RlOiBsb29wIG1heSBiZSBOb25lLgorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgICIiIkNsb3NlIHRoZSB3YXRjaGVyLgorCisgICAgICAgIFRoaXMgbXVzdCBiZSBjYWxsZWQgdG8gbWFrZSBzdXJlIHRoYXQgYW55IHVuZGVybHlpbmcgcmVzb3VyY2UgaXMgZnJlZWQuCisgICAgICAgICIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCkKKworICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgICIiIkVudGVyIHRoZSB3YXRjaGVyJ3MgY29udGV4dCBhbmQgYWxsb3cgc3RhcnRpbmcgbmV3IHByb2Nlc3NlcworCisgICAgICAgIFRoaXMgZnVuY3Rpb24gbXVzdCByZXR1cm4gc2VsZiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCkKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCBhLCBiLCBjKToKKyAgICAgICAgIiIiRXhpdCB0aGUgd2F0Y2hlcidzIGNvbnRleHQiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCisKKworY2xhc3MgQmFzZUNoaWxkV2F0Y2hlcihBYnN0cmFjdENoaWxkV2F0Y2hlcik6CisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuX2xvb3AgPSBOb25lCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgIHNlbGYuYXR0YWNoX2xvb3AoTm9uZSkKKworICAgIGRlZiBfZG9fd2FpdHBpZChzZWxmLCBleHBlY3RlZF9waWQpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCkKKworICAgIGRlZiBfZG9fd2FpdHBpZF9hbGwoc2VsZik6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQorCisgICAgZGVmIGF0dGFjaF9sb29wKHNlbGYsIGxvb3ApOgorICAgICAgICBhc3NlcnQgbG9vcCBpcyBOb25lIG9yIGlzaW5zdGFuY2UobG9vcCwgZXZlbnRzLkFic3RyYWN0RXZlbnRMb29wKQorCisgICAgICAgIGlmIHNlbGYuX2xvb3AgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl9sb29wLnJlbW92ZV9zaWduYWxfaGFuZGxlcihzaWduYWwuU0lHQ0hMRCkKKworICAgICAgICBzZWxmLl9sb29wID0gbG9vcAorICAgICAgICBpZiBsb29wIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgbG9vcC5hZGRfc2lnbmFsX2hhbmRsZXIoc2lnbmFsLlNJR0NITEQsIHNlbGYuX3NpZ19jaGxkKQorCisgICAgICAgICAgICAjIFByZXZlbnQgYSByYWNlIGNvbmRpdGlvbiBpbiBjYXNlIGEgY2hpbGQgdGVybWluYXRlZAorICAgICAgICAgICAgIyBkdXJpbmcgdGhlIHN3aXRjaC4KKyAgICAgICAgICAgIHNlbGYuX2RvX3dhaXRwaWRfYWxsKCkKKworICAgIGRlZiBfc2lnX2NobGQoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX2RvX3dhaXRwaWRfYWxsKCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICAjIHNlbGYuX2xvb3Agc2hvdWxkIGFsd2F5cyBiZSBhdmFpbGFibGUgaGVyZQorICAgICAgICAgICAgIyBhcyAnX3NpZ19jaGxkJyBpcyBhZGRlZCBhcyBhIHNpZ25hbCBoYW5kbGVyCisgICAgICAgICAgICAjIGluICdhdHRhY2hfbG9vcCcKKyAgICAgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9leGNlcHRpb25faGFuZGxlcih7CisgICAgICAgICAgICAgICAgJ21lc3NhZ2UnOiAnVW5rbm93biBleGNlcHRpb24gaW4gU0lHQ0hMRCBoYW5kbGVyJywKKyAgICAgICAgICAgICAgICAnZXhjZXB0aW9uJzogZXhjLAorICAgICAgICAgICAgfSkKKworICAgIGRlZiBfY29tcHV0ZV9yZXR1cm5jb2RlKHNlbGYsIHN0YXR1cyk6CisgICAgICAgIGlmIG9zLldJRlNJR05BTEVEKHN0YXR1cyk6CisgICAgICAgICAgICAjIFRoZSBjaGlsZCBwcm9jZXNzIGRpZWQgYmVjYXVzZSBvZiBhIHNpZ25hbC4KKyAgICAgICAgICAgIHJldHVybiAtb3MuV1RFUk1TSUcoc3RhdHVzKQorICAgICAgICBlbGlmIG9zLldJRkVYSVRFRChzdGF0dXMpOgorICAgICAgICAgICAgIyBUaGUgY2hpbGQgcHJvY2VzcyBleGl0ZWQgKGUuZyBzeXMuZXhpdCgpKS4KKyAgICAgICAgICAgIHJldHVybiBvcy5XRVhJVFNUQVRVUyhzdGF0dXMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIFRoZSBjaGlsZCBleGl0ZWQsIGJ1dCB3ZSBkb24ndCB1bmRlcnN0YW5kIGl0cyBzdGF0dXMuCisgICAgICAgICAgICAjIFRoaXMgc2hvdWxkbid0IGhhcHBlbiwgYnV0IGlmIGl0IGRvZXMsIGxldCdzIGp1c3QKKyAgICAgICAgICAgICMgcmV0dXJuIHRoYXQgc3RhdHVzOyBwZXJoYXBzIHRoYXQgaGVscHMgZGVidWcgaXQuCisgICAgICAgICAgICByZXR1cm4gc3RhdHVzCisKKworY2xhc3MgU2FmZUNoaWxkV2F0Y2hlcihCYXNlQ2hpbGRXYXRjaGVyKToKKyAgICAiIiInU2FmZScgY2hpbGQgd2F0Y2hlciBpbXBsZW1lbnRhdGlvbi4KKworICAgIFRoaXMgaW1wbGVtZW50YXRpb24gYXZvaWRzIGRpc3J1cHRpbmcgb3RoZXIgY29kZSBzcGF3bmluZyBwcm9jZXNzZXMgYnkKKyAgICBwb2xsaW5nIGV4cGxpY2l0bHkgZWFjaCBwcm9jZXNzIGluIHRoZSBTSUdDSExEIGhhbmRsZXIgaW5zdGVhZCBvZiBjYWxsaW5nCisgICAgb3Mud2FpdHBpZCgtMSkuCisKKyAgICBUaGlzIGlzIGEgc2FmZSBzb2x1dGlvbiBidXQgaXQgaGFzIGEgc2lnbmlmaWNhbnQgb3ZlcmhlYWQgd2hlbiBoYW5kbGluZyBhCisgICAgYmlnIG51bWJlciBvZiBjaGlsZHJlbiAoTyhuKSBlYWNoIHRpbWUgU0lHQ0hMRCBpcyByYWlzZWQpCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHN1cGVyKCkuX19pbml0X18oKQorICAgICAgICBzZWxmLl9jYWxsYmFja3MgPSB7fQorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICBzZWxmLl9jYWxsYmFja3MuY2xlYXIoKQorICAgICAgICBzdXBlcigpLmNsb3NlKCkKKworICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgYSwgYiwgYyk6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBhZGRfY2hpbGRfaGFuZGxlcihzZWxmLCBwaWQsIGNhbGxiYWNrLCAqYXJncyk6CisgICAgICAgIHNlbGYuX2NhbGxiYWNrc1twaWRdID0gKGNhbGxiYWNrLCBhcmdzKQorCisgICAgICAgICMgUHJldmVudCBhIHJhY2UgY29uZGl0aW9uIGluIGNhc2UgdGhlIGNoaWxkIGlzIGFscmVhZHkgdGVybWluYXRlZC4KKyAgICAgICAgc2VsZi5fZG9fd2FpdHBpZChwaWQpCisKKyAgICBkZWYgcmVtb3ZlX2NoaWxkX2hhbmRsZXIoc2VsZiwgcGlkKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGVsIHNlbGYuX2NhbGxiYWNrc1twaWRdCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBfZG9fd2FpdHBpZF9hbGwoc2VsZik6CisKKyAgICAgICAgZm9yIHBpZCBpbiBsaXN0KHNlbGYuX2NhbGxiYWNrcyk6CisgICAgICAgICAgICBzZWxmLl9kb193YWl0cGlkKHBpZCkKKworICAgIGRlZiBfZG9fd2FpdHBpZChzZWxmLCBleHBlY3RlZF9waWQpOgorICAgICAgICBhc3NlcnQgZXhwZWN0ZWRfcGlkID4gMAorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHBpZCwgc3RhdHVzID0gb3Mud2FpdHBpZChleHBlY3RlZF9waWQsIG9zLldOT0hBTkcpCisgICAgICAgIGV4Y2VwdCBDaGlsZFByb2Nlc3NFcnJvcjoKKyAgICAgICAgICAgICMgVGhlIGNoaWxkIHByb2Nlc3MgaXMgYWxyZWFkeSByZWFwZWQKKyAgICAgICAgICAgICMgKG1heSBoYXBwZW4gaWYgd2FpdHBpZCgpIGlzIGNhbGxlZCBlbHNld2hlcmUpLgorICAgICAgICAgICAgcGlkID0gZXhwZWN0ZWRfcGlkCisgICAgICAgICAgICByZXR1cm5jb2RlID0gMjU1CisgICAgICAgICAgICBsb2dnZXIud2FybmluZygKKyAgICAgICAgICAgICAgICAiVW5rbm93biBjaGlsZCBwcm9jZXNzIHBpZCAlZCwgd2lsbCByZXBvcnQgcmV0dXJuY29kZSAyNTUiLAorICAgICAgICAgICAgICAgIHBpZCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIHBpZCA9PSAwOgorICAgICAgICAgICAgICAgICMgVGhlIGNoaWxkIHByb2Nlc3MgaXMgc3RpbGwgYWxpdmUuCisgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgICAgIHJldHVybmNvZGUgPSBzZWxmLl9jb21wdXRlX3JldHVybmNvZGUoc3RhdHVzKQorICAgICAgICAgICAgaWYgc2VsZi5fbG9vcC5nZXRfZGVidWcoKToKKyAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoJ3Byb2Nlc3MgJXMgZXhpdGVkIHdpdGggcmV0dXJuY29kZSAlcycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX3BpZCwgcmV0dXJuY29kZSkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBjYWxsYmFjaywgYXJncyA9IHNlbGYuX2NhbGxiYWNrcy5wb3AocGlkKQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6ICAjIHByYWdtYTogbm8gY292ZXIKKyAgICAgICAgICAgICMgTWF5IGhhcHBlbiBpZiAucmVtb3ZlX2NoaWxkX2hhbmRsZXIoKSBpcyBjYWxsZWQKKyAgICAgICAgICAgICMgYWZ0ZXIgb3Mud2FpdHBpZCgpIHJldHVybnMuCisgICAgICAgICAgICBpZiBzZWxmLl9sb29wLmdldF9kZWJ1ZygpOgorICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nKCJDaGlsZCB3YXRjaGVyIGdvdCBhbiB1bmV4cGVjdGVkIHBpZDogJXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpZCwgZXhjX2luZm89VHJ1ZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNhbGxiYWNrKHBpZCwgcmV0dXJuY29kZSwgKmFyZ3MpCisKKworY2xhc3MgRmFzdENoaWxkV2F0Y2hlcihCYXNlQ2hpbGRXYXRjaGVyKToKKyAgICAiIiInRmFzdCcgY2hpbGQgd2F0Y2hlciBpbXBsZW1lbnRhdGlvbi4KKworICAgIFRoaXMgaW1wbGVtZW50YXRpb24gcmVhcHMgZXZlcnkgdGVybWluYXRlZCBwcm9jZXNzZXMgYnkgY2FsbGluZworICAgIG9zLndhaXRwaWQoLTEpIGRpcmVjdGx5LCBwb3NzaWJseSBicmVha2luZyBvdGhlciBjb2RlIHNwYXduaW5nIHByb2Nlc3NlcworICAgIGFuZCB3YWl0aW5nIGZvciB0aGVpciB0ZXJtaW5hdGlvbi4KKworICAgIFRoZXJlIGlzIG5vIG5vdGljZWFibGUgb3ZlcmhlYWQgd2hlbiBoYW5kbGluZyBhIGJpZyBudW1iZXIgb2YgY2hpbGRyZW4KKyAgICAoTygxKSBlYWNoIHRpbWUgYSBjaGlsZCB0ZXJtaW5hdGVzKS4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHN1cGVyKCkuX19pbml0X18oKQorICAgICAgICBzZWxmLl9jYWxsYmFja3MgPSB7fQorICAgICAgICBzZWxmLl9sb2NrID0gdGhyZWFkaW5nLkxvY2soKQorICAgICAgICBzZWxmLl96b21iaWVzID0ge30KKyAgICAgICAgc2VsZi5fZm9ya3MgPSAwCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgIHNlbGYuX2NhbGxiYWNrcy5jbGVhcigpCisgICAgICAgIHNlbGYuX3pvbWJpZXMuY2xlYXIoKQorICAgICAgICBzdXBlcigpLmNsb3NlKCkKKworICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5fbG9jazoKKyAgICAgICAgICAgIHNlbGYuX2ZvcmtzICs9IDEKKworICAgICAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCBhLCBiLCBjKToKKyAgICAgICAgd2l0aCBzZWxmLl9sb2NrOgorICAgICAgICAgICAgc2VsZi5fZm9ya3MgLT0gMQorCisgICAgICAgICAgICBpZiBzZWxmLl9mb3JrcyBvciBub3Qgc2VsZi5fem9tYmllczoKKyAgICAgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAgICAgY29sbGF0ZXJhbF92aWN0aW1zID0gc3RyKHNlbGYuX3pvbWJpZXMpCisgICAgICAgICAgICBzZWxmLl96b21iaWVzLmNsZWFyKCkKKworICAgICAgICBsb2dnZXIud2FybmluZygKKyAgICAgICAgICAgICJDYXVnaHQgc3VicHJvY2Vzc2VzIHRlcm1pbmF0aW9uIGZyb20gdW5rbm93biBwaWRzOiAlcyIsCisgICAgICAgICAgICBjb2xsYXRlcmFsX3ZpY3RpbXMpCisKKyAgICBkZWYgYWRkX2NoaWxkX2hhbmRsZXIoc2VsZiwgcGlkLCBjYWxsYmFjaywgKmFyZ3MpOgorICAgICAgICBhc3NlcnQgc2VsZi5fZm9ya3MsICJNdXN0IHVzZSB0aGUgY29udGV4dCBtYW5hZ2VyIgorICAgICAgICB3aXRoIHNlbGYuX2xvY2s6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmV0dXJuY29kZSA9IHNlbGYuX3pvbWJpZXMucG9wKHBpZCkKKyAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgICAgICAjIFRoZSBjaGlsZCBpcyBydW5uaW5nLgorICAgICAgICAgICAgICAgIHNlbGYuX2NhbGxiYWNrc1twaWRdID0gY2FsbGJhY2ssIGFyZ3MKKyAgICAgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAjIFRoZSBjaGlsZCBpcyBkZWFkIGFscmVhZHkuIFdlIGNhbiBmaXJlIHRoZSBjYWxsYmFjay4KKyAgICAgICAgY2FsbGJhY2socGlkLCByZXR1cm5jb2RlLCAqYXJncykKKworICAgIGRlZiByZW1vdmVfY2hpbGRfaGFuZGxlcihzZWxmLCBwaWQpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBkZWwgc2VsZi5fY2FsbGJhY2tzW3BpZF0KKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIF9kb193YWl0cGlkX2FsbChzZWxmKToKKyAgICAgICAgIyBCZWNhdXNlIG9mIHNpZ25hbCBjb2FsZXNjaW5nLCB3ZSBtdXN0IGtlZXAgY2FsbGluZyB3YWl0cGlkKCkgYXMKKyAgICAgICAgIyBsb25nIGFzIHdlJ3JlIGFibGUgdG8gcmVhcCBhIGNoaWxkLgorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHBpZCwgc3RhdHVzID0gb3Mud2FpdHBpZCgtMSwgb3MuV05PSEFORykKKyAgICAgICAgICAgIGV4Y2VwdCBDaGlsZFByb2Nlc3NFcnJvcjoKKyAgICAgICAgICAgICAgICAjIE5vIG1vcmUgY2hpbGQgcHJvY2Vzc2VzIGV4aXN0LgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBwaWQgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgIyBBIGNoaWxkIHByb2Nlc3MgaXMgc3RpbGwgYWxpdmUuCisgICAgICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICAgICAgICAgcmV0dXJuY29kZSA9IHNlbGYuX2NvbXB1dGVfcmV0dXJuY29kZShzdGF0dXMpCisKKyAgICAgICAgICAgIHdpdGggc2VsZi5fbG9jazoKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLCBhcmdzID0gc2VsZi5fY2FsbGJhY2tzLnBvcChwaWQpCisgICAgICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgICAgICAgICAjIHVua25vd24gY2hpbGQKKyAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5fZm9ya3M6CisgICAgICAgICAgICAgICAgICAgICAgICAjIEl0IG1heSBub3QgYmUgcmVnaXN0ZXJlZCB5ZXQuCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl96b21iaWVzW3BpZF0gPSByZXR1cm5jb2RlCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLl9sb29wLmdldF9kZWJ1ZygpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygndW5rbm93biBwcm9jZXNzICVzIGV4aXRlZCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3aXRoIHJldHVybmNvZGUgJXMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaWQsIHJldHVybmNvZGUpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IE5vbmUKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLl9sb29wLmdldF9kZWJ1ZygpOgorICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCdwcm9jZXNzICVzIGV4aXRlZCB3aXRoIHJldHVybmNvZGUgJXMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpZCwgcmV0dXJuY29kZSkKKworICAgICAgICAgICAgaWYgY2FsbGJhY2sgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBsb2dnZXIud2FybmluZygKKyAgICAgICAgICAgICAgICAgICAgIkNhdWdodCBzdWJwcm9jZXNzIHRlcm1pbmF0aW9uIGZyb20gdW5rbm93biBwaWQ6ICIKKyAgICAgICAgICAgICAgICAgICAgIiVkIC0+ICVkIiwgcGlkLCByZXR1cm5jb2RlKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBjYWxsYmFjayhwaWQsIHJldHVybmNvZGUsICphcmdzKQorCisKK2NsYXNzIF9Vbml4RGVmYXVsdEV2ZW50TG9vcFBvbGljeShldmVudHMuQmFzZURlZmF1bHRFdmVudExvb3BQb2xpY3kpOgorICAgICIiIlVOSVggZXZlbnQgbG9vcCBwb2xpY3kgd2l0aCBhIHdhdGNoZXIgZm9yIGNoaWxkIHByb2Nlc3Nlcy4iIiIKKyAgICBfbG9vcF9mYWN0b3J5ID0gX1VuaXhTZWxlY3RvckV2ZW50TG9vcAorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzdXBlcigpLl9faW5pdF9fKCkKKyAgICAgICAgc2VsZi5fd2F0Y2hlciA9IE5vbmUKKworICAgIGRlZiBfaW5pdF93YXRjaGVyKHNlbGYpOgorICAgICAgICB3aXRoIGV2ZW50cy5fbG9jazoKKyAgICAgICAgICAgIGlmIHNlbGYuX3dhdGNoZXIgaXMgTm9uZTogICMgcHJhZ21hOiBubyBicmFuY2gKKyAgICAgICAgICAgICAgICBzZWxmLl93YXRjaGVyID0gU2FmZUNoaWxkV2F0Y2hlcigpCisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh0aHJlYWRpbmcuY3VycmVudF90aHJlYWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocmVhZGluZy5fTWFpblRocmVhZCk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3dhdGNoZXIuYXR0YWNoX2xvb3Aoc2VsZi5fbG9jYWwuX2xvb3ApCisKKyAgICBkZWYgc2V0X2V2ZW50X2xvb3Aoc2VsZiwgbG9vcCk6CisgICAgICAgICIiIlNldCB0aGUgZXZlbnQgbG9vcC4KKworICAgICAgICBBcyBhIHNpZGUgZWZmZWN0LCBpZiBhIGNoaWxkIHdhdGNoZXIgd2FzIHNldCBiZWZvcmUsIHRoZW4gY2FsbGluZworICAgICAgICAuc2V0X2V2ZW50X2xvb3AoKSBmcm9tIHRoZSBtYWluIHRocmVhZCB3aWxsIGNhbGwgLmF0dGFjaF9sb29wKGxvb3ApIG9uCisgICAgICAgIHRoZSBjaGlsZCB3YXRjaGVyLgorICAgICAgICAiIiIKKworICAgICAgICBzdXBlcigpLnNldF9ldmVudF9sb29wKGxvb3ApCisKKyAgICAgICAgaWYgc2VsZi5fd2F0Y2hlciBpcyBub3QgTm9uZSBhbmQgXAorICAgICAgICAgICAgaXNpbnN0YW5jZSh0aHJlYWRpbmcuY3VycmVudF90aHJlYWQoKSwgdGhyZWFkaW5nLl9NYWluVGhyZWFkKToKKyAgICAgICAgICAgIHNlbGYuX3dhdGNoZXIuYXR0YWNoX2xvb3AobG9vcCkKKworICAgIGRlZiBnZXRfY2hpbGRfd2F0Y2hlcihzZWxmKToKKyAgICAgICAgIiIiR2V0IHRoZSB3YXRjaGVyIGZvciBjaGlsZCBwcm9jZXNzZXMuCisKKyAgICAgICAgSWYgbm90IHlldCBzZXQsIGEgU2FmZUNoaWxkV2F0Y2hlciBvYmplY3QgaXMgYXV0b21hdGljYWxseSBjcmVhdGVkLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5fd2F0Y2hlciBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5faW5pdF93YXRjaGVyKCkKKworICAgICAgICByZXR1cm4gc2VsZi5fd2F0Y2hlcgorCisgICAgZGVmIHNldF9jaGlsZF93YXRjaGVyKHNlbGYsIHdhdGNoZXIpOgorICAgICAgICAiIiJTZXQgdGhlIHdhdGNoZXIgZm9yIGNoaWxkIHByb2Nlc3Nlcy4iIiIKKworICAgICAgICBhc3NlcnQgd2F0Y2hlciBpcyBOb25lIG9yIGlzaW5zdGFuY2Uod2F0Y2hlciwgQWJzdHJhY3RDaGlsZFdhdGNoZXIpCisKKyAgICAgICAgaWYgc2VsZi5fd2F0Y2hlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX3dhdGNoZXIuY2xvc2UoKQorCisgICAgICAgIHNlbGYuX3dhdGNoZXIgPSB3YXRjaGVyCisKK1NlbGVjdG9yRXZlbnRMb29wID0gX1VuaXhTZWxlY3RvckV2ZW50TG9vcAorRGVmYXVsdEV2ZW50TG9vcFBvbGljeSA9IF9Vbml4RGVmYXVsdEV2ZW50TG9vcFBvbGljeQpkaWZmIC0tZ2l0IGEvTGliL2FzeW5jaW8vd2luZG93c19ldmVudHMucHkgYi9MaWIvYXN5bmNpby93aW5kb3dzX2V2ZW50cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjI1OTRmCi0tLSAvZGV2L251bGwKKysrIGIvTGliL2FzeW5jaW8vd2luZG93c19ldmVudHMucHkKQEAgLTAsMCArMSw3NzQgQEAKKyIiIlNlbGVjdG9yIGFuZCBwcm9hY3RvciBldmVudCBsb29wcyBmb3IgV2luZG93cy4iIiIKKworaW1wb3J0IF93aW5hcGkKK2ltcG9ydCBlcnJubworaW1wb3J0IG1hdGgKK2ltcG9ydCBzb2NrZXQKK2ltcG9ydCBzdHJ1Y3QKK2ltcG9ydCB3ZWFrcmVmCisKK2Zyb20gLiBpbXBvcnQgZXZlbnRzCitmcm9tIC4gaW1wb3J0IGJhc2Vfc3VicHJvY2VzcworZnJvbSAuIGltcG9ydCBmdXR1cmVzCitmcm9tIC4gaW1wb3J0IHByb2FjdG9yX2V2ZW50cworZnJvbSAuIGltcG9ydCBzZWxlY3Rvcl9ldmVudHMKK2Zyb20gLiBpbXBvcnQgdGFza3MKK2Zyb20gLiBpbXBvcnQgd2luZG93c191dGlscworZnJvbSAuIGltcG9ydCBfb3ZlcmxhcHBlZAorZnJvbSAuY29yb3V0aW5lcyBpbXBvcnQgY29yb3V0aW5lCitmcm9tIC5sb2cgaW1wb3J0IGxvZ2dlcgorCisKK19fYWxsX18gPSBbJ1NlbGVjdG9yRXZlbnRMb29wJywgJ1Byb2FjdG9yRXZlbnRMb29wJywgJ0lvY3BQcm9hY3RvcicsCisgICAgICAgICAgICdEZWZhdWx0RXZlbnRMb29wUG9saWN5JywKKyAgICAgICAgICAgXQorCisKK05VTEwgPSAwCitJTkZJTklURSA9IDB4ZmZmZmZmZmYKK0VSUk9SX0NPTk5FQ1RJT05fUkVGVVNFRCA9IDEyMjUKK0VSUk9SX0NPTk5FQ1RJT05fQUJPUlRFRCA9IDEyMzYKKworIyBJbml0aWFsIGRlbGF5IGluIHNlY29uZHMgZm9yIGNvbm5lY3RfcGlwZSgpIGJlZm9yZSByZXRyeWluZyB0byBjb25uZWN0CitDT05ORUNUX1BJUEVfSU5JVF9ERUxBWSA9IDAuMDAxCisKKyMgTWF4aW11bSBkZWxheSBpbiBzZWNvbmRzIGZvciBjb25uZWN0X3BpcGUoKSBiZWZvcmUgcmV0cnlpbmcgdG8gY29ubmVjdAorQ09OTkVDVF9QSVBFX01BWF9ERUxBWSA9IDAuMTAwCisKKworY2xhc3MgX092ZXJsYXBwZWRGdXR1cmUoZnV0dXJlcy5GdXR1cmUpOgorICAgICIiIlN1YmNsYXNzIG9mIEZ1dHVyZSB3aGljaCByZXByZXNlbnRzIGFuIG92ZXJsYXBwZWQgb3BlcmF0aW9uLgorCisgICAgQ2FuY2VsbGluZyBpdCB3aWxsIGltbWVkaWF0ZWx5IGNhbmNlbCB0aGUgb3ZlcmxhcHBlZCBvcGVyYXRpb24uCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgb3YsICosIGxvb3A9Tm9uZSk6CisgICAgICAgIHN1cGVyKCkuX19pbml0X18obG9vcD1sb29wKQorICAgICAgICBpZiBzZWxmLl9zb3VyY2VfdHJhY2ViYWNrOgorICAgICAgICAgICAgZGVsIHNlbGYuX3NvdXJjZV90cmFjZWJhY2tbLTFdCisgICAgICAgIHNlbGYuX292ID0gb3YKKworICAgIGRlZiBfcmVwcl9pbmZvKHNlbGYpOgorICAgICAgICBpbmZvID0gc3VwZXIoKS5fcmVwcl9pbmZvKCkKKyAgICAgICAgaWYgc2VsZi5fb3YgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzdGF0ZSA9ICdwZW5kaW5nJyBpZiBzZWxmLl9vdi5wZW5kaW5nIGVsc2UgJ2NvbXBsZXRlZCcKKyAgICAgICAgICAgIGluZm8uaW5zZXJ0KDEsICdvdmVybGFwcGVkPTwlcywgJSN4PicgJSAoc3RhdGUsIHNlbGYuX292LmFkZHJlc3MpKQorICAgICAgICByZXR1cm4gaW5mbworCisgICAgZGVmIF9jYW5jZWxfb3ZlcmxhcHBlZChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fb3YgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl9vdi5jYW5jZWwoKQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6CisgICAgICAgICAgICBjb250ZXh0ID0geworICAgICAgICAgICAgICAgICdtZXNzYWdlJzogJ0NhbmNlbGxpbmcgYW4gb3ZlcmxhcHBlZCBmdXR1cmUgZmFpbGVkJywKKyAgICAgICAgICAgICAgICAnZXhjZXB0aW9uJzogZXhjLAorICAgICAgICAgICAgICAgICdmdXR1cmUnOiBzZWxmLAorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgc2VsZi5fc291cmNlX3RyYWNlYmFjazoKKyAgICAgICAgICAgICAgICBjb250ZXh0Wydzb3VyY2VfdHJhY2ViYWNrJ10gPSBzZWxmLl9zb3VyY2VfdHJhY2ViYWNrCisgICAgICAgICAgICBzZWxmLl9sb29wLmNhbGxfZXhjZXB0aW9uX2hhbmRsZXIoY29udGV4dCkKKyAgICAgICAgc2VsZi5fb3YgPSBOb25lCisKKyAgICBkZWYgY2FuY2VsKHNlbGYpOgorICAgICAgICBzZWxmLl9jYW5jZWxfb3ZlcmxhcHBlZCgpCisgICAgICAgIHJldHVybiBzdXBlcigpLmNhbmNlbCgpCisKKyAgICBkZWYgc2V0X2V4Y2VwdGlvbihzZWxmLCBleGNlcHRpb24pOgorICAgICAgICBzdXBlcigpLnNldF9leGNlcHRpb24oZXhjZXB0aW9uKQorICAgICAgICBzZWxmLl9jYW5jZWxfb3ZlcmxhcHBlZCgpCisKKyAgICBkZWYgc2V0X3Jlc3VsdChzZWxmLCByZXN1bHQpOgorICAgICAgICBzdXBlcigpLnNldF9yZXN1bHQocmVzdWx0KQorICAgICAgICBzZWxmLl9vdiA9IE5vbmUKKworCitjbGFzcyBfQmFzZVdhaXRIYW5kbGVGdXR1cmUoZnV0dXJlcy5GdXR1cmUpOgorICAgICIiIlN1YmNsYXNzIG9mIEZ1dHVyZSB3aGljaCByZXByZXNlbnRzIGEgd2FpdCBoYW5kbGUuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgb3YsIGhhbmRsZSwgd2FpdF9oYW5kbGUsICosIGxvb3A9Tm9uZSk6CisgICAgICAgIHN1cGVyKCkuX19pbml0X18obG9vcD1sb29wKQorICAgICAgICBpZiBzZWxmLl9zb3VyY2VfdHJhY2ViYWNrOgorICAgICAgICAgICAgZGVsIHNlbGYuX3NvdXJjZV90cmFjZWJhY2tbLTFdCisgICAgICAgICMgS2VlcCBhIHJlZmVyZW5jZSB0byB0aGUgT3ZlcmxhcHBlZCBvYmplY3QgdG8ga2VlcCBpdCBhbGl2ZSB1bnRpbCB0aGUKKyAgICAgICAgIyB3YWl0IGlzIHVucmVnaXN0ZXJlZAorICAgICAgICBzZWxmLl9vdiA9IG92CisgICAgICAgIHNlbGYuX2hhbmRsZSA9IGhhbmRsZQorICAgICAgICBzZWxmLl93YWl0X2hhbmRsZSA9IHdhaXRfaGFuZGxlCisKKyAgICAgICAgIyBTaG91bGQgd2UgY2FsbCBVbnJlZ2lzdGVyV2FpdEV4KCkgaWYgdGhlIHdhaXQgY29tcGxldGVzCisgICAgICAgICMgb3IgaXMgY2FuY2VsbGVkPworICAgICAgICBzZWxmLl9yZWdpc3RlcmVkID0gVHJ1ZQorCisgICAgZGVmIF9wb2xsKHNlbGYpOgorICAgICAgICAjIG5vbi1ibG9ja2luZyB3YWl0OiB1c2UgYSB0aW1lb3V0IG9mIDAgbWlsbGlzZWNvbmQKKyAgICAgICAgcmV0dXJuIChfd2luYXBpLldhaXRGb3JTaW5nbGVPYmplY3Qoc2VsZi5faGFuZGxlLCAwKSA9PQorICAgICAgICAgICAgICAgIF93aW5hcGkuV0FJVF9PQkpFQ1RfMCkKKworICAgIGRlZiBfcmVwcl9pbmZvKHNlbGYpOgorICAgICAgICBpbmZvID0gc3VwZXIoKS5fcmVwcl9pbmZvKCkKKyAgICAgICAgaW5mby5hcHBlbmQoJ2hhbmRsZT0lI3gnICUgc2VsZi5faGFuZGxlKQorICAgICAgICBpZiBzZWxmLl9oYW5kbGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzdGF0ZSA9ICdzaWduYWxlZCcgaWYgc2VsZi5fcG9sbCgpIGVsc2UgJ3dhaXRpbmcnCisgICAgICAgICAgICBpbmZvLmFwcGVuZChzdGF0ZSkKKyAgICAgICAgaWYgc2VsZi5fd2FpdF9oYW5kbGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBpbmZvLmFwcGVuZCgnd2FpdF9oYW5kbGU9JSN4JyAlIHNlbGYuX3dhaXRfaGFuZGxlKQorICAgICAgICByZXR1cm4gaW5mbworCisgICAgZGVmIF91bnJlZ2lzdGVyX3dhaXRfY2Ioc2VsZiwgZnV0KToKKyAgICAgICAgIyBUaGUgd2FpdCB3YXMgdW5yZWdpc3RlcmVkOiBpdCdzIG5vdCBzYWZlIHRvIGRlc3Ryb3kgdGhlIE92ZXJsYXBwZWQKKyAgICAgICAgIyBvYmplY3QKKyAgICAgICAgc2VsZi5fb3YgPSBOb25lCisKKyAgICBkZWYgX3VucmVnaXN0ZXJfd2FpdChzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuX3JlZ2lzdGVyZWQ6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5fcmVnaXN0ZXJlZCA9IEZhbHNlCisKKyAgICAgICAgd2FpdF9oYW5kbGUgPSBzZWxmLl93YWl0X2hhbmRsZQorICAgICAgICBzZWxmLl93YWl0X2hhbmRsZSA9IE5vbmUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgX292ZXJsYXBwZWQuVW5yZWdpc3RlcldhaXQod2FpdF9oYW5kbGUpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKKyAgICAgICAgICAgIGlmIGV4Yy53aW5lcnJvciAhPSBfb3ZlcmxhcHBlZC5FUlJPUl9JT19QRU5ESU5HOgorICAgICAgICAgICAgICAgIGNvbnRleHQgPSB7CisgICAgICAgICAgICAgICAgICAgICdtZXNzYWdlJzogJ0ZhaWxlZCB0byB1bnJlZ2lzdGVyIHRoZSB3YWl0IGhhbmRsZScsCisgICAgICAgICAgICAgICAgICAgICdleGNlcHRpb24nOiBleGMsCisgICAgICAgICAgICAgICAgICAgICdmdXR1cmUnOiBzZWxmLAorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiBzZWxmLl9zb3VyY2VfdHJhY2ViYWNrOgorICAgICAgICAgICAgICAgICAgICBjb250ZXh0Wydzb3VyY2VfdHJhY2ViYWNrJ10gPSBzZWxmLl9zb3VyY2VfdHJhY2ViYWNrCisgICAgICAgICAgICAgICAgc2VsZi5fbG9vcC5jYWxsX2V4Y2VwdGlvbl9oYW5kbGVyKGNvbnRleHQpCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICAjIEVSUk9SX0lPX1BFTkRJTkcgbWVhbnMgdGhhdCB0aGUgdW5yZWdpc3RlciBpcyBwZW5kaW5nCisKKyAgICAgICAgc2VsZi5fdW5yZWdpc3Rlcl93YWl0X2NiKE5vbmUpCisKKyAgICBkZWYgY2FuY2VsKHNlbGYpOgorICAgICAgICBzZWxmLl91bnJlZ2lzdGVyX3dhaXQoKQorICAgICAgICByZXR1cm4gc3VwZXIoKS5jYW5jZWwoKQorCisgICAgZGVmIHNldF9leGNlcHRpb24oc2VsZiwgZXhjZXB0aW9uKToKKyAgICAgICAgc2VsZi5fdW5yZWdpc3Rlcl93YWl0KCkKKyAgICAgICAgc3VwZXIoKS5zZXRfZXhjZXB0aW9uKGV4Y2VwdGlvbikKKworICAgIGRlZiBzZXRfcmVzdWx0KHNlbGYsIHJlc3VsdCk6CisgICAgICAgIHNlbGYuX3VucmVnaXN0ZXJfd2FpdCgpCisgICAgICAgIHN1cGVyKCkuc2V0X3Jlc3VsdChyZXN1bHQpCisKKworY2xhc3MgX1dhaXRDYW5jZWxGdXR1cmUoX0Jhc2VXYWl0SGFuZGxlRnV0dXJlKToKKyAgICAiIiJTdWJjbGFzcyBvZiBGdXR1cmUgd2hpY2ggcmVwcmVzZW50cyBhIHdhaXQgZm9yIHRoZSBjYW5jZWxsYXRpb24gb2YgYQorICAgIF9XYWl0SGFuZGxlRnV0dXJlIHVzaW5nIGFuIGV2ZW50LgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG92LCBldmVudCwgd2FpdF9oYW5kbGUsICosIGxvb3A9Tm9uZSk6CisgICAgICAgIHN1cGVyKCkuX19pbml0X18ob3YsIGV2ZW50LCB3YWl0X2hhbmRsZSwgbG9vcD1sb29wKQorCisgICAgICAgIHNlbGYuX2RvbmVfY2FsbGJhY2sgPSBOb25lCisKKyAgICBkZWYgY2FuY2VsKHNlbGYpOgorICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIl9XYWl0Q2FuY2VsRnV0dXJlIG11c3Qgbm90IGJlIGNhbmNlbGxlZCIpCisKKyAgICBkZWYgX3NjaGVkdWxlX2NhbGxiYWNrcyhzZWxmKToKKyAgICAgICAgc3VwZXIoX1dhaXRDYW5jZWxGdXR1cmUsIHNlbGYpLl9zY2hlZHVsZV9jYWxsYmFja3MoKQorICAgICAgICBpZiBzZWxmLl9kb25lX2NhbGxiYWNrIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fZG9uZV9jYWxsYmFjayhzZWxmKQorCisKK2NsYXNzIF9XYWl0SGFuZGxlRnV0dXJlKF9CYXNlV2FpdEhhbmRsZUZ1dHVyZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG92LCBoYW5kbGUsIHdhaXRfaGFuZGxlLCBwcm9hY3RvciwgKiwgbG9vcD1Ob25lKToKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhvdiwgaGFuZGxlLCB3YWl0X2hhbmRsZSwgbG9vcD1sb29wKQorICAgICAgICBzZWxmLl9wcm9hY3RvciA9IHByb2FjdG9yCisgICAgICAgIHNlbGYuX3VucmVnaXN0ZXJfcHJvYWN0b3IgPSBUcnVlCisgICAgICAgIHNlbGYuX2V2ZW50ID0gX292ZXJsYXBwZWQuQ3JlYXRlRXZlbnQoTm9uZSwgVHJ1ZSwgRmFsc2UsIE5vbmUpCisgICAgICAgIHNlbGYuX2V2ZW50X2Z1dCA9IE5vbmUKKworICAgIGRlZiBfdW5yZWdpc3Rlcl93YWl0X2NiKHNlbGYsIGZ1dCk6CisgICAgICAgIGlmIHNlbGYuX2V2ZW50IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgX3dpbmFwaS5DbG9zZUhhbmRsZShzZWxmLl9ldmVudCkKKyAgICAgICAgICAgIHNlbGYuX2V2ZW50ID0gTm9uZQorICAgICAgICAgICAgc2VsZi5fZXZlbnRfZnV0ID0gTm9uZQorCisgICAgICAgICMgSWYgdGhlIHdhaXQgd2FzIGNhbmNlbGxlZCwgdGhlIHdhaXQgbWF5IG5ldmVyIGJlIHNpZ25hbGxlZCwgc28KKyAgICAgICAgIyBpdCdzIHJlcXVpcmVkIHRvIHVucmVnaXN0ZXIgaXQuIE90aGVyd2lzZSwgSW9jcFByb2FjdG9yLmNsb3NlKCkgd2lsbAorICAgICAgICAjIHdhaXQgZm9yZXZlciBmb3IgYW4gZXZlbnQgd2hpY2ggd2lsbCBuZXZlciBjb21lLgorICAgICAgICAjCisgICAgICAgICMgSWYgdGhlIElvY3BQcm9hY3RvciBhbHJlYWR5IHJlY2VpdmVkIHRoZSBldmVudCwgaXQncyBzYWZlIHRvIGNhbGwKKyAgICAgICAgIyBfdW5yZWdpc3RlcigpIGJlY2F1c2Ugd2Uga2VwdCBhIHJlZmVyZW5jZSB0byB0aGUgT3ZlcmxhcHBlZCBvYmplY3QKKyAgICAgICAgIyB3aGljaCBpcyB1c2VkIGFzIGFuIHVuaXF1ZSBrZXkuCisgICAgICAgIHNlbGYuX3Byb2FjdG9yLl91bnJlZ2lzdGVyKHNlbGYuX292KQorICAgICAgICBzZWxmLl9wcm9hY3RvciA9IE5vbmUKKworICAgICAgICBzdXBlcigpLl91bnJlZ2lzdGVyX3dhaXRfY2IoZnV0KQorCisgICAgZGVmIF91bnJlZ2lzdGVyX3dhaXQoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLl9yZWdpc3RlcmVkOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYuX3JlZ2lzdGVyZWQgPSBGYWxzZQorCisgICAgICAgIHdhaXRfaGFuZGxlID0gc2VsZi5fd2FpdF9oYW5kbGUKKyAgICAgICAgc2VsZi5fd2FpdF9oYW5kbGUgPSBOb25lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIF9vdmVybGFwcGVkLlVucmVnaXN0ZXJXYWl0RXgod2FpdF9oYW5kbGUsIHNlbGYuX2V2ZW50KQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6CisgICAgICAgICAgICBpZiBleGMud2luZXJyb3IgIT0gX292ZXJsYXBwZWQuRVJST1JfSU9fUEVORElORzoKKyAgICAgICAgICAgICAgICBjb250ZXh0ID0geworICAgICAgICAgICAgICAgICAgICAnbWVzc2FnZSc6ICdGYWlsZWQgdG8gdW5yZWdpc3RlciB0aGUgd2FpdCBoYW5kbGUnLAorICAgICAgICAgICAgICAgICAgICAnZXhjZXB0aW9uJzogZXhjLAorICAgICAgICAgICAgICAgICAgICAnZnV0dXJlJzogc2VsZiwKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgc2VsZi5fc291cmNlX3RyYWNlYmFjazoKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dFsnc291cmNlX3RyYWNlYmFjayddID0gc2VsZi5fc291cmNlX3RyYWNlYmFjaworICAgICAgICAgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9leGNlcHRpb25faGFuZGxlcihjb250ZXh0KQorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgIyBFUlJPUl9JT19QRU5ESU5HIGlzIG5vdCBhbiBlcnJvciwgdGhlIHdhaXQgd2FzIHVucmVnaXN0ZXJlZAorCisgICAgICAgIHNlbGYuX2V2ZW50X2Z1dCA9IHNlbGYuX3Byb2FjdG9yLl93YWl0X2NhbmNlbChzZWxmLl9ldmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3VucmVnaXN0ZXJfd2FpdF9jYikKKworCitjbGFzcyBQaXBlU2VydmVyKG9iamVjdCk6CisgICAgIiIiQ2xhc3MgcmVwcmVzZW50aW5nIGEgcGlwZSBzZXJ2ZXIuCisKKyAgICBUaGlzIGlzIG11Y2ggbGlrZSBhIGJvdW5kLCBsaXN0ZW5pbmcgc29ja2V0LgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhZGRyZXNzKToKKyAgICAgICAgc2VsZi5fYWRkcmVzcyA9IGFkZHJlc3MKKyAgICAgICAgc2VsZi5fZnJlZV9pbnN0YW5jZXMgPSB3ZWFrcmVmLldlYWtTZXQoKQorICAgICAgICAjIGluaXRpYWxpemUgdGhlIHBpcGUgYXR0cmlidXRlIGJlZm9yZSBjYWxsaW5nIF9zZXJ2ZXJfcGlwZV9oYW5kbGUoKQorICAgICAgICAjIGJlY2F1c2UgdGhpcyBmdW5jdGlvbiBjYW4gcmFpc2UgYW4gZXhjZXB0aW9uIGFuZCB0aGUgZGVzdHJ1Y3RvciBjYWxscworICAgICAgICAjIHRoZSBjbG9zZSgpIG1ldGhvZAorICAgICAgICBzZWxmLl9waXBlID0gTm9uZQorICAgICAgICBzZWxmLl9hY2NlcHRfcGlwZV9mdXR1cmUgPSBOb25lCisgICAgICAgIHNlbGYuX3BpcGUgPSBzZWxmLl9zZXJ2ZXJfcGlwZV9oYW5kbGUoVHJ1ZSkKKworICAgIGRlZiBfZ2V0X3VuY29ubmVjdGVkX3BpcGUoc2VsZik6CisgICAgICAgICMgQ3JlYXRlIG5ldyBpbnN0YW5jZSBhbmQgcmV0dXJuIHByZXZpb3VzIG9uZS4gIFRoaXMgZW5zdXJlcworICAgICAgICAjIHRoYXQgKHVudGlsIHRoZSBzZXJ2ZXIgaXMgY2xvc2VkKSB0aGVyZSBpcyBhbHdheXMgYXQgbGVhc3QKKyAgICAgICAgIyBvbmUgcGlwZSBoYW5kbGUgZm9yIGFkZHJlc3MuICBUaGVyZWZvcmUgaWYgYSBjbGllbnQgYXR0ZW1wdAorICAgICAgICAjIHRvIGNvbm5lY3QgaXQgd2lsbCBub3QgZmFpbCB3aXRoIEZpbGVOb3RGb3VuZEVycm9yLgorICAgICAgICB0bXAsIHNlbGYuX3BpcGUgPSBzZWxmLl9waXBlLCBzZWxmLl9zZXJ2ZXJfcGlwZV9oYW5kbGUoRmFsc2UpCisgICAgICAgIHJldHVybiB0bXAKKworICAgIGRlZiBfc2VydmVyX3BpcGVfaGFuZGxlKHNlbGYsIGZpcnN0KToKKyAgICAgICAgIyBSZXR1cm4gYSB3cmFwcGVyIGZvciBhIG5ldyBwaXBlIGhhbmRsZS4KKyAgICAgICAgaWYgc2VsZi5jbG9zZWQoKToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIGZsYWdzID0gX3dpbmFwaS5QSVBFX0FDQ0VTU19EVVBMRVggfCBfd2luYXBpLkZJTEVfRkxBR19PVkVSTEFQUEVECisgICAgICAgIGlmIGZpcnN0OgorICAgICAgICAgICAgZmxhZ3MgfD0gX3dpbmFwaS5GSUxFX0ZMQUdfRklSU1RfUElQRV9JTlNUQU5DRQorICAgICAgICBoID0gX3dpbmFwaS5DcmVhdGVOYW1lZFBpcGUoCisgICAgICAgICAgICBzZWxmLl9hZGRyZXNzLCBmbGFncywKKyAgICAgICAgICAgIF93aW5hcGkuUElQRV9UWVBFX01FU1NBR0UgfCBfd2luYXBpLlBJUEVfUkVBRE1PREVfTUVTU0FHRSB8CisgICAgICAgICAgICBfd2luYXBpLlBJUEVfV0FJVCwKKyAgICAgICAgICAgIF93aW5hcGkuUElQRV9VTkxJTUlURURfSU5TVEFOQ0VTLAorICAgICAgICAgICAgd2luZG93c191dGlscy5CVUZTSVpFLCB3aW5kb3dzX3V0aWxzLkJVRlNJWkUsCisgICAgICAgICAgICBfd2luYXBpLk5NUFdBSVRfV0FJVF9GT1JFVkVSLCBfd2luYXBpLk5VTEwpCisgICAgICAgIHBpcGUgPSB3aW5kb3dzX3V0aWxzLlBpcGVIYW5kbGUoaCkKKyAgICAgICAgc2VsZi5fZnJlZV9pbnN0YW5jZXMuYWRkKHBpcGUpCisgICAgICAgIHJldHVybiBwaXBlCisKKyAgICBkZWYgY2xvc2VkKHNlbGYpOgorICAgICAgICByZXR1cm4gKHNlbGYuX2FkZHJlc3MgaXMgTm9uZSkKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fYWNjZXB0X3BpcGVfZnV0dXJlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fYWNjZXB0X3BpcGVfZnV0dXJlLmNhbmNlbCgpCisgICAgICAgICAgICBzZWxmLl9hY2NlcHRfcGlwZV9mdXR1cmUgPSBOb25lCisgICAgICAgICMgQ2xvc2UgYWxsIGluc3RhbmNlcyB3aGljaCBoYXZlIG5vdCBiZWVuIGNvbm5lY3RlZCB0byBieSBhIGNsaWVudC4KKyAgICAgICAgaWYgc2VsZi5fYWRkcmVzcyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGZvciBwaXBlIGluIHNlbGYuX2ZyZWVfaW5zdGFuY2VzOgorICAgICAgICAgICAgICAgIHBpcGUuY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5fcGlwZSA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYuX2FkZHJlc3MgPSBOb25lCisgICAgICAgICAgICBzZWxmLl9mcmVlX2luc3RhbmNlcy5jbGVhcigpCisKKyAgICBfX2RlbF9fID0gY2xvc2UKKworCitjbGFzcyBfV2luZG93c1NlbGVjdG9yRXZlbnRMb29wKHNlbGVjdG9yX2V2ZW50cy5CYXNlU2VsZWN0b3JFdmVudExvb3ApOgorICAgICIiIldpbmRvd3MgdmVyc2lvbiBvZiBzZWxlY3RvciBldmVudCBsb29wLiIiIgorCisgICAgZGVmIF9zb2NrZXRwYWlyKHNlbGYpOgorICAgICAgICByZXR1cm4gd2luZG93c191dGlscy5zb2NrZXRwYWlyKCkKKworCitjbGFzcyBQcm9hY3RvckV2ZW50TG9vcChwcm9hY3Rvcl9ldmVudHMuQmFzZVByb2FjdG9yRXZlbnRMb29wKToKKyAgICAiIiJXaW5kb3dzIHZlcnNpb24gb2YgcHJvYWN0b3IgZXZlbnQgbG9vcCB1c2luZyBJT0NQLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHByb2FjdG9yPU5vbmUpOgorICAgICAgICBpZiBwcm9hY3RvciBpcyBOb25lOgorICAgICAgICAgICAgcHJvYWN0b3IgPSBJb2NwUHJvYWN0b3IoKQorICAgICAgICBzdXBlcigpLl9faW5pdF9fKHByb2FjdG9yKQorCisgICAgZGVmIF9zb2NrZXRwYWlyKHNlbGYpOgorICAgICAgICByZXR1cm4gd2luZG93c191dGlscy5zb2NrZXRwYWlyKCkKKworICAgIEBjb3JvdXRpbmUKKyAgICBkZWYgY3JlYXRlX3BpcGVfY29ubmVjdGlvbihzZWxmLCBwcm90b2NvbF9mYWN0b3J5LCBhZGRyZXNzKToKKyAgICAgICAgZiA9IHNlbGYuX3Byb2FjdG9yLmNvbm5lY3RfcGlwZShhZGRyZXNzKQorICAgICAgICBwaXBlID0geWllbGQgZnJvbSBmCisgICAgICAgIHByb3RvY29sID0gcHJvdG9jb2xfZmFjdG9yeSgpCisgICAgICAgIHRyYW5zID0gc2VsZi5fbWFrZV9kdXBsZXhfcGlwZV90cmFuc3BvcnQocGlwZSwgcHJvdG9jb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE9eydhZGRyJzogYWRkcmVzc30pCisgICAgICAgIHJldHVybiB0cmFucywgcHJvdG9jb2wKKworICAgIEBjb3JvdXRpbmUKKyAgICBkZWYgc3RhcnRfc2VydmluZ19waXBlKHNlbGYsIHByb3RvY29sX2ZhY3RvcnksIGFkZHJlc3MpOgorICAgICAgICBzZXJ2ZXIgPSBQaXBlU2VydmVyKGFkZHJlc3MpCisKKyAgICAgICAgZGVmIGxvb3BfYWNjZXB0X3BpcGUoZj1Ob25lKToKKyAgICAgICAgICAgIHBpcGUgPSBOb25lCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaWYgZjoKKyAgICAgICAgICAgICAgICAgICAgcGlwZSA9IGYucmVzdWx0KCkKKyAgICAgICAgICAgICAgICAgICAgc2VydmVyLl9mcmVlX2luc3RhbmNlcy5kaXNjYXJkKHBpcGUpCisKKyAgICAgICAgICAgICAgICAgICAgaWYgc2VydmVyLmNsb3NlZCgpOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBBIGNsaWVudCBjb25uZWN0ZWQgYmVmb3JlIHRoZSBzZXJ2ZXIgd2FzIGNsb3NlZDoKKyAgICAgICAgICAgICAgICAgICAgICAgICMgZHJvcCB0aGUgY2xpZW50IChjbG9zZSB0aGUgcGlwZSkgYW5kIGV4aXQKKyAgICAgICAgICAgICAgICAgICAgICAgIHBpcGUuY2xvc2UoKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgICAgICAgICAgICAgcHJvdG9jb2wgPSBwcm90b2NvbF9mYWN0b3J5KCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fbWFrZV9kdXBsZXhfcGlwZV90cmFuc3BvcnQoCisgICAgICAgICAgICAgICAgICAgICAgICBwaXBlLCBwcm90b2NvbCwgZXh0cmE9eydhZGRyJzogYWRkcmVzc30pCisKKyAgICAgICAgICAgICAgICBwaXBlID0gc2VydmVyLl9nZXRfdW5jb25uZWN0ZWRfcGlwZSgpCisgICAgICAgICAgICAgICAgaWYgcGlwZSBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAgICAgICAgIGYgPSBzZWxmLl9wcm9hY3Rvci5hY2NlcHRfcGlwZShwaXBlKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgICAgIGlmIHBpcGUgYW5kIHBpcGUuZmlsZW5vKCkgIT0gLTE6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuY2FsbF9leGNlcHRpb25faGFuZGxlcih7CisgICAgICAgICAgICAgICAgICAgICAgICAnbWVzc2FnZSc6ICdQaXBlIGFjY2VwdCBmYWlsZWQnLAorICAgICAgICAgICAgICAgICAgICAgICAgJ2V4Y2VwdGlvbic6IGV4YywKKyAgICAgICAgICAgICAgICAgICAgICAgICdwaXBlJzogcGlwZSwKKyAgICAgICAgICAgICAgICAgICAgfSkKKyAgICAgICAgICAgICAgICAgICAgcGlwZS5jbG9zZSgpCisgICAgICAgICAgICAgICAgZWxpZiBzZWxmLl9kZWJ1ZzoKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoIkFjY2VwdCBwaXBlIGZhaWxlZCBvbiBwaXBlICVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlwZSwgZXhjX2luZm89VHJ1ZSkKKyAgICAgICAgICAgIGV4Y2VwdCBmdXR1cmVzLkNhbmNlbGxlZEVycm9yOgorICAgICAgICAgICAgICAgIGlmIHBpcGU6CisgICAgICAgICAgICAgICAgICAgIHBpcGUuY2xvc2UoKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZXJ2ZXIuX2FjY2VwdF9waXBlX2Z1dHVyZSA9IGYKKyAgICAgICAgICAgICAgICBmLmFkZF9kb25lX2NhbGxiYWNrKGxvb3BfYWNjZXB0X3BpcGUpCisKKyAgICAgICAgc2VsZi5jYWxsX3Nvb24obG9vcF9hY2NlcHRfcGlwZSkKKyAgICAgICAgcmV0dXJuIFtzZXJ2ZXJdCisKKyAgICBAY29yb3V0aW5lCisgICAgZGVmIF9tYWtlX3N1YnByb2Nlc3NfdHJhbnNwb3J0KHNlbGYsIHByb3RvY29sLCBhcmdzLCBzaGVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkaW4sIHN0ZG91dCwgc3RkZXJyLCBidWZzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYT1Ob25lLCAqKmt3YXJncyk6CisgICAgICAgIHdhaXRlciA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZikKKyAgICAgICAgdHJhbnNwID0gX1dpbmRvd3NTdWJwcm9jZXNzVHJhbnNwb3J0KHNlbGYsIHByb3RvY29sLCBhcmdzLCBzaGVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGluLCBzdGRvdXQsIHN0ZGVyciwgYnVmc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhaXRlcj13YWl0ZXIsIGV4dHJhPWV4dHJhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiprd2FyZ3MpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gd2FpdGVyCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgIyBXb3JrYXJvdW5kIENQeXRob24gYnVnICMyMzM1MzogdXNpbmcgeWllbGQveWllbGQtZnJvbSBpbiBhbgorICAgICAgICAgICAgIyBleGNlcHQgYmxvY2sgb2YgYSBnZW5lcmF0b3IgZG9lc24ndCBjbGVhciBwcm9wZXJseSBzeXMuZXhjX2luZm8oKQorICAgICAgICAgICAgZXJyID0gZXhjCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBlcnIgPSBOb25lCisKKyAgICAgICAgaWYgZXJyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgdHJhbnNwLmNsb3NlKCkKKyAgICAgICAgICAgIHlpZWxkIGZyb20gdHJhbnNwLl93YWl0KCkKKyAgICAgICAgICAgIHJhaXNlIGVycgorCisgICAgICAgIHJldHVybiB0cmFuc3AKKworCitjbGFzcyBJb2NwUHJvYWN0b3I6CisgICAgIiIiUHJvYWN0b3IgaW1wbGVtZW50YXRpb24gdXNpbmcgSU9DUC4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb25jdXJyZW5jeT0weGZmZmZmZmZmKToKKyAgICAgICAgc2VsZi5fbG9vcCA9IE5vbmUKKyAgICAgICAgc2VsZi5fcmVzdWx0cyA9IFtdCisgICAgICAgIHNlbGYuX2lvY3AgPSBfb3ZlcmxhcHBlZC5DcmVhdGVJb0NvbXBsZXRpb25Qb3J0KAorICAgICAgICAgICAgX292ZXJsYXBwZWQuSU5WQUxJRF9IQU5ETEVfVkFMVUUsIE5VTEwsIDAsIGNvbmN1cnJlbmN5KQorICAgICAgICBzZWxmLl9jYWNoZSA9IHt9CisgICAgICAgIHNlbGYuX3JlZ2lzdGVyZWQgPSB3ZWFrcmVmLldlYWtTZXQoKQorICAgICAgICBzZWxmLl91bnJlZ2lzdGVyZWQgPSBbXQorICAgICAgICBzZWxmLl9zdG9wcGVkX3NlcnZpbmcgPSB3ZWFrcmVmLldlYWtTZXQoKQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gKCc8JXMgb3ZlcmxhcHBlZCM9JXMgcmVzdWx0Iz0lcz4nCisgICAgICAgICAgICAgICAgJSAoc2VsZi5fX2NsYXNzX18uX19uYW1lX18sIGxlbihzZWxmLl9jYWNoZSksCisgICAgICAgICAgICAgICAgICAgbGVuKHNlbGYuX3Jlc3VsdHMpKSkKKworICAgIGRlZiBzZXRfbG9vcChzZWxmLCBsb29wKToKKyAgICAgICAgc2VsZi5fbG9vcCA9IGxvb3AKKworICAgIGRlZiBzZWxlY3Qoc2VsZiwgdGltZW91dD1Ob25lKToKKyAgICAgICAgaWYgbm90IHNlbGYuX3Jlc3VsdHM6CisgICAgICAgICAgICBzZWxmLl9wb2xsKHRpbWVvdXQpCisgICAgICAgIHRtcCA9IHNlbGYuX3Jlc3VsdHMKKyAgICAgICAgc2VsZi5fcmVzdWx0cyA9IFtdCisgICAgICAgIHJldHVybiB0bXAKKworICAgIGRlZiBfcmVzdWx0KHNlbGYsIHZhbHVlKToKKyAgICAgICAgZnV0ID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLl9sb29wKQorICAgICAgICBmdXQuc2V0X3Jlc3VsdCh2YWx1ZSkKKyAgICAgICAgcmV0dXJuIGZ1dAorCisgICAgZGVmIHJlY3Yoc2VsZiwgY29ubiwgbmJ5dGVzLCBmbGFncz0wKToKKyAgICAgICAgc2VsZi5fcmVnaXN0ZXJfd2l0aF9pb2NwKGNvbm4pCisgICAgICAgIG92ID0gX292ZXJsYXBwZWQuT3ZlcmxhcHBlZChOVUxMKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGNvbm4sIHNvY2tldC5zb2NrZXQpOgorICAgICAgICAgICAgICAgIG92LldTQVJlY3YoY29ubi5maWxlbm8oKSwgbmJ5dGVzLCBmbGFncykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgb3YuUmVhZEZpbGUoY29ubi5maWxlbm8oKSwgbmJ5dGVzKQorICAgICAgICBleGNlcHQgQnJva2VuUGlwZUVycm9yOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3Jlc3VsdChiJycpCisKKyAgICAgICAgZGVmIGZpbmlzaF9yZWN2KHRyYW5zLCBrZXksIG92KToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXR1cm4gb3YuZ2V0cmVzdWx0KCkKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKKyAgICAgICAgICAgICAgICBpZiBleGMud2luZXJyb3IgPT0gX292ZXJsYXBwZWQuRVJST1JfTkVUTkFNRV9ERUxFVEVEOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBDb25uZWN0aW9uUmVzZXRFcnJvcigqZXhjLmFyZ3MpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKworICAgICAgICByZXR1cm4gc2VsZi5fcmVnaXN0ZXIob3YsIGNvbm4sIGZpbmlzaF9yZWN2KQorCisgICAgZGVmIHNlbmQoc2VsZiwgY29ubiwgYnVmLCBmbGFncz0wKToKKyAgICAgICAgc2VsZi5fcmVnaXN0ZXJfd2l0aF9pb2NwKGNvbm4pCisgICAgICAgIG92ID0gX292ZXJsYXBwZWQuT3ZlcmxhcHBlZChOVUxMKQorICAgICAgICBpZiBpc2luc3RhbmNlKGNvbm4sIHNvY2tldC5zb2NrZXQpOgorICAgICAgICAgICAgb3YuV1NBU2VuZChjb25uLmZpbGVubygpLCBidWYsIGZsYWdzKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb3YuV3JpdGVGaWxlKGNvbm4uZmlsZW5vKCksIGJ1ZikKKworICAgICAgICBkZWYgZmluaXNoX3NlbmQodHJhbnMsIGtleSwgb3YpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJldHVybiBvdi5nZXRyZXN1bHQoKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgICAgIGlmIGV4Yy53aW5lcnJvciA9PSBfb3ZlcmxhcHBlZC5FUlJPUl9ORVROQU1FX0RFTEVURUQ6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIENvbm5lY3Rpb25SZXNldEVycm9yKCpleGMuYXJncykKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByYWlzZQorCisgICAgICAgIHJldHVybiBzZWxmLl9yZWdpc3RlcihvdiwgY29ubiwgZmluaXNoX3NlbmQpCisKKyAgICBkZWYgYWNjZXB0KHNlbGYsIGxpc3RlbmVyKToKKyAgICAgICAgc2VsZi5fcmVnaXN0ZXJfd2l0aF9pb2NwKGxpc3RlbmVyKQorICAgICAgICBjb25uID0gc2VsZi5fZ2V0X2FjY2VwdF9zb2NrZXQobGlzdGVuZXIuZmFtaWx5KQorICAgICAgICBvdiA9IF9vdmVybGFwcGVkLk92ZXJsYXBwZWQoTlVMTCkKKyAgICAgICAgb3YuQWNjZXB0RXgobGlzdGVuZXIuZmlsZW5vKCksIGNvbm4uZmlsZW5vKCkpCisKKyAgICAgICAgZGVmIGZpbmlzaF9hY2NlcHQodHJhbnMsIGtleSwgb3YpOgorICAgICAgICAgICAgb3YuZ2V0cmVzdWx0KCkKKyAgICAgICAgICAgICMgVXNlIFNPX1VQREFURV9BQ0NFUFRfQ09OVEVYVCBzbyBnZXRzb2NrbmFtZSgpIGV0YyB3b3JrLgorICAgICAgICAgICAgYnVmID0gc3RydWN0LnBhY2soJ0BQJywgbGlzdGVuZXIuZmlsZW5vKCkpCisgICAgICAgICAgICBjb25uLnNldHNvY2tvcHQoc29ja2V0LlNPTF9TT0NLRVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX292ZXJsYXBwZWQuU09fVVBEQVRFX0FDQ0VQVF9DT05URVhULCBidWYpCisgICAgICAgICAgICBjb25uLnNldHRpbWVvdXQobGlzdGVuZXIuZ2V0dGltZW91dCgpKQorICAgICAgICAgICAgcmV0dXJuIGNvbm4sIGNvbm4uZ2V0cGVlcm5hbWUoKQorCisgICAgICAgIEBjb3JvdXRpbmUKKyAgICAgICAgZGVmIGFjY2VwdF9jb3JvKGZ1dHVyZSwgY29ubik6CisgICAgICAgICAgICAjIENvcm91dGluZSBjbG9zaW5nIHRoZSBhY2NlcHQgc29ja2V0IGlmIHRoZSBmdXR1cmUgaXMgY2FuY2VsbGVkCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgeWllbGQgZnJvbSBmdXR1cmUKKyAgICAgICAgICAgIGV4Y2VwdCBmdXR1cmVzLkNhbmNlbGxlZEVycm9yOgorICAgICAgICAgICAgICAgIGNvbm4uY2xvc2UoKQorICAgICAgICAgICAgICAgIHJhaXNlCisKKyAgICAgICAgZnV0dXJlID0gc2VsZi5fcmVnaXN0ZXIob3YsIGxpc3RlbmVyLCBmaW5pc2hfYWNjZXB0KQorICAgICAgICBjb3JvID0gYWNjZXB0X2Nvcm8oZnV0dXJlLCBjb25uKQorICAgICAgICB0YXNrcy5lbnN1cmVfZnV0dXJlKGNvcm8sIGxvb3A9c2VsZi5fbG9vcCkKKyAgICAgICAgcmV0dXJuIGZ1dHVyZQorCisgICAgZGVmIGNvbm5lY3Qoc2VsZiwgY29ubiwgYWRkcmVzcyk6CisgICAgICAgIHNlbGYuX3JlZ2lzdGVyX3dpdGhfaW9jcChjb25uKQorICAgICAgICAjIFRoZSBzb2NrZXQgbmVlZHMgdG8gYmUgbG9jYWxseSBib3VuZCBiZWZvcmUgd2UgY2FsbCBDb25uZWN0RXgoKS4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgX292ZXJsYXBwZWQuQmluZExvY2FsKGNvbm4uZmlsZW5vKCksIGNvbm4uZmFtaWx5KQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgaWYgZS53aW5lcnJvciAhPSBlcnJuby5XU0FFSU5WQUw6CisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICMgUHJvYmFibHkgYWxyZWFkeSBsb2NhbGx5IGJvdW5kOyBjaGVjayB1c2luZyBnZXRzb2NrbmFtZSgpLgorICAgICAgICAgICAgaWYgY29ubi5nZXRzb2NrbmFtZSgpWzFdID09IDA6CisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgb3YgPSBfb3ZlcmxhcHBlZC5PdmVybGFwcGVkKE5VTEwpCisgICAgICAgIG92LkNvbm5lY3RFeChjb25uLmZpbGVubygpLCBhZGRyZXNzKQorCisgICAgICAgIGRlZiBmaW5pc2hfY29ubmVjdCh0cmFucywga2V5LCBvdik6CisgICAgICAgICAgICBvdi5nZXRyZXN1bHQoKQorICAgICAgICAgICAgIyBVc2UgU09fVVBEQVRFX0NPTk5FQ1RfQ09OVEVYVCBzbyBnZXRzb2NrbmFtZSgpIGV0YyB3b3JrLgorICAgICAgICAgICAgY29ubi5zZXRzb2Nrb3B0KHNvY2tldC5TT0xfU09DS0VULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9vdmVybGFwcGVkLlNPX1VQREFURV9DT05ORUNUX0NPTlRFWFQsIDApCisgICAgICAgICAgICByZXR1cm4gY29ubgorCisgICAgICAgIHJldHVybiBzZWxmLl9yZWdpc3RlcihvdiwgY29ubiwgZmluaXNoX2Nvbm5lY3QpCisKKyAgICBkZWYgYWNjZXB0X3BpcGUoc2VsZiwgcGlwZSk6CisgICAgICAgIHNlbGYuX3JlZ2lzdGVyX3dpdGhfaW9jcChwaXBlKQorICAgICAgICBvdiA9IF9vdmVybGFwcGVkLk92ZXJsYXBwZWQoTlVMTCkKKyAgICAgICAgY29ubmVjdGVkID0gb3YuQ29ubmVjdE5hbWVkUGlwZShwaXBlLmZpbGVubygpKQorCisgICAgICAgIGlmIGNvbm5lY3RlZDoKKyAgICAgICAgICAgICMgQ29ubmVjdE5hbWVQaXBlKCkgZmFpbGVkIHdpdGggRVJST1JfUElQRV9DT05ORUNURUQgd2hpY2ggbWVhbnMKKyAgICAgICAgICAgICMgdGhhdCB0aGUgcGlwZSBpcyBjb25uZWN0ZWQuIFRoZXJlIGlzIG5vIG5lZWQgdG8gd2FpdCBmb3IgdGhlCisgICAgICAgICAgICAjIGNvbXBsZXRpb24gb2YgdGhlIGNvbm5lY3Rpb24uCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fcmVzdWx0KHBpcGUpCisKKyAgICAgICAgZGVmIGZpbmlzaF9hY2NlcHRfcGlwZSh0cmFucywga2V5LCBvdik6CisgICAgICAgICAgICBvdi5nZXRyZXN1bHQoKQorICAgICAgICAgICAgcmV0dXJuIHBpcGUKKworICAgICAgICByZXR1cm4gc2VsZi5fcmVnaXN0ZXIob3YsIHBpcGUsIGZpbmlzaF9hY2NlcHRfcGlwZSkKKworICAgIEBjb3JvdXRpbmUKKyAgICBkZWYgY29ubmVjdF9waXBlKHNlbGYsIGFkZHJlc3MpOgorICAgICAgICBkZWxheSA9IENPTk5FQ1RfUElQRV9JTklUX0RFTEFZCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAjIFVuZm9ydHVuYXRlbHkgdGhlcmUgaXMgbm8gd2F5IHRvIGRvIGFuIG92ZXJsYXBwZWQgY29ubmVjdCB0byBhIHBpcGUuCisgICAgICAgICAgICAjIENhbGwgQ3JlYXRlRmlsZSgpIGluIGEgbG9vcCB1bnRpbCBpdCBkb2Vzbid0IGZhaWwgd2l0aAorICAgICAgICAgICAgIyBFUlJPUl9QSVBFX0JVU1kKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBoYW5kbGUgPSBfb3ZlcmxhcHBlZC5Db25uZWN0UGlwZShhZGRyZXNzKQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6CisgICAgICAgICAgICAgICAgaWYgZXhjLndpbmVycm9yICE9IF9vdmVybGFwcGVkLkVSUk9SX1BJUEVfQlVTWToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKworICAgICAgICAgICAgIyBDb25uZWN0UGlwZSgpIGZhaWxlZCB3aXRoIEVSUk9SX1BJUEVfQlVTWTogcmV0cnkgbGF0ZXIKKyAgICAgICAgICAgIGRlbGF5ID0gbWluKGRlbGF5ICogMiwgQ09OTkVDVF9QSVBFX01BWF9ERUxBWSkKKyAgICAgICAgICAgIHlpZWxkIGZyb20gdGFza3Muc2xlZXAoZGVsYXksIGxvb3A9c2VsZi5fbG9vcCkKKworICAgICAgICByZXR1cm4gd2luZG93c191dGlscy5QaXBlSGFuZGxlKGhhbmRsZSkKKworICAgIGRlZiB3YWl0X2Zvcl9oYW5kbGUoc2VsZiwgaGFuZGxlLCB0aW1lb3V0PU5vbmUpOgorICAgICAgICAiIiJXYWl0IGZvciBhIGhhbmRsZS4KKworICAgICAgICBSZXR1cm4gYSBGdXR1cmUgb2JqZWN0LiBUaGUgcmVzdWx0IG9mIHRoZSBmdXR1cmUgaXMgVHJ1ZSBpZiB0aGUgd2FpdAorICAgICAgICBjb21wbGV0ZWQsIG9yIEZhbHNlIGlmIHRoZSB3YWl0IGRpZCBub3QgY29tcGxldGUgKG9uIHRpbWVvdXQpLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX3dhaXRfZm9yX2hhbmRsZShoYW5kbGUsIHRpbWVvdXQsIEZhbHNlKQorCisgICAgZGVmIF93YWl0X2NhbmNlbChzZWxmLCBldmVudCwgZG9uZV9jYWxsYmFjayk6CisgICAgICAgIGZ1dCA9IHNlbGYuX3dhaXRfZm9yX2hhbmRsZShldmVudCwgTm9uZSwgVHJ1ZSkKKyAgICAgICAgIyBhZGRfZG9uZV9jYWxsYmFjaygpIGNhbm5vdCBiZSB1c2VkIGJlY2F1c2UgdGhlIHdhaXQgbWF5IG9ubHkgY29tcGxldGUKKyAgICAgICAgIyBpbiBJb2NwUHJvYWN0b3IuY2xvc2UoKSwgd2hpbGUgdGhlIGV2ZW50IGxvb3AgaXMgbm90IHJ1bm5pbmcuCisgICAgICAgIGZ1dC5fZG9uZV9jYWxsYmFjayA9IGRvbmVfY2FsbGJhY2sKKyAgICAgICAgcmV0dXJuIGZ1dAorCisgICAgZGVmIF93YWl0X2Zvcl9oYW5kbGUoc2VsZiwgaGFuZGxlLCB0aW1lb3V0LCBfaXNfY2FuY2VsKToKKyAgICAgICAgaWYgdGltZW91dCBpcyBOb25lOgorICAgICAgICAgICAgbXMgPSBfd2luYXBpLklORklOSVRFCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIFJlZ2lzdGVyV2FpdEZvclNpbmdsZU9iamVjdCgpIGhhcyBhIHJlc29sdXRpb24gb2YgMSBtaWxsaXNlY29uZCwKKyAgICAgICAgICAgICMgcm91bmQgYXdheSBmcm9tIHplcm8gdG8gd2FpdCAqYXQgbGVhc3QqIHRpbWVvdXQgc2Vjb25kcy4KKyAgICAgICAgICAgIG1zID0gbWF0aC5jZWlsKHRpbWVvdXQgKiAxZTMpCisKKyAgICAgICAgIyBXZSBvbmx5IGNyZWF0ZSBvdiBzbyB3ZSBjYW4gdXNlIG92LmFkZHJlc3MgYXMgYSBrZXkgZm9yIHRoZSBjYWNoZS4KKyAgICAgICAgb3YgPSBfb3ZlcmxhcHBlZC5PdmVybGFwcGVkKE5VTEwpCisgICAgICAgIHdhaXRfaGFuZGxlID0gX292ZXJsYXBwZWQuUmVnaXN0ZXJXYWl0V2l0aFF1ZXVlKAorICAgICAgICAgICAgaGFuZGxlLCBzZWxmLl9pb2NwLCBvdi5hZGRyZXNzLCBtcykKKyAgICAgICAgaWYgX2lzX2NhbmNlbDoKKyAgICAgICAgICAgIGYgPSBfV2FpdENhbmNlbEZ1dHVyZShvdiwgaGFuZGxlLCB3YWl0X2hhbmRsZSwgbG9vcD1zZWxmLl9sb29wKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZiA9IF9XYWl0SGFuZGxlRnV0dXJlKG92LCBoYW5kbGUsIHdhaXRfaGFuZGxlLCBzZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3A9c2VsZi5fbG9vcCkKKyAgICAgICAgaWYgZi5fc291cmNlX3RyYWNlYmFjazoKKyAgICAgICAgICAgIGRlbCBmLl9zb3VyY2VfdHJhY2ViYWNrWy0xXQorCisgICAgICAgIGRlZiBmaW5pc2hfd2FpdF9mb3JfaGFuZGxlKHRyYW5zLCBrZXksIG92KToKKyAgICAgICAgICAgICMgTm90ZSB0aGF0IHRoaXMgc2Vjb25kIHdhaXQgbWVhbnMgdGhhdCB3ZSBzaG91bGQgb25seSB1c2UKKyAgICAgICAgICAgICMgdGhpcyB3aXRoIGhhbmRsZXMgdHlwZXMgd2hlcmUgYSBzdWNjZXNzZnVsIHdhaXQgaGFzIG5vCisgICAgICAgICAgICAjIGVmZmVjdC4gIFNvIGV2ZW50cyBvciBwcm9jZXNzZXMgYXJlIGFsbCByaWdodCwgYnV0IGxvY2tzCisgICAgICAgICAgICAjIG9yIHNlbWFwaG9yZXMgYXJlIG5vdC4gIEFsc28gbm90ZSBpZiB0aGUgaGFuZGxlIGlzCisgICAgICAgICAgICAjIHNpZ25hbGxlZCBhbmQgdGhlbiBxdWlja2x5IHJlc2V0LCB0aGVuIHdlIG1heSByZXR1cm4KKyAgICAgICAgICAgICMgRmFsc2UgZXZlbiB0aG91Z2ggd2UgaGF2ZSBub3QgdGltZWQgb3V0LgorICAgICAgICAgICAgcmV0dXJuIGYuX3BvbGwoKQorCisgICAgICAgIHNlbGYuX2NhY2hlW292LmFkZHJlc3NdID0gKGYsIG92LCAwLCBmaW5pc2hfd2FpdF9mb3JfaGFuZGxlKQorICAgICAgICByZXR1cm4gZgorCisgICAgZGVmIF9yZWdpc3Rlcl93aXRoX2lvY3Aoc2VsZiwgb2JqKToKKyAgICAgICAgIyBUbyBnZXQgbm90aWZpY2F0aW9ucyBvZiBmaW5pc2hlZCBvcHMgb24gdGhpcyBvYmplY3RzIHNlbnQgdG8gdGhlCisgICAgICAgICMgY29tcGxldGlvbiBwb3J0LCB3ZXJlIG11c3QgcmVnaXN0ZXIgdGhlIGhhbmRsZS4KKyAgICAgICAgaWYgb2JqIG5vdCBpbiBzZWxmLl9yZWdpc3RlcmVkOgorICAgICAgICAgICAgc2VsZi5fcmVnaXN0ZXJlZC5hZGQob2JqKQorICAgICAgICAgICAgX292ZXJsYXBwZWQuQ3JlYXRlSW9Db21wbGV0aW9uUG9ydChvYmouZmlsZW5vKCksIHNlbGYuX2lvY3AsIDAsIDApCisgICAgICAgICAgICAjIFhYWCBXZSBjb3VsZCBhbHNvIHVzZSBTZXRGaWxlQ29tcGxldGlvbk5vdGlmaWNhdGlvbk1vZGVzKCkKKyAgICAgICAgICAgICMgdG8gYXZvaWQgc2VuZGluZyBub3RpZmljYXRpb25zIHRvIGNvbXBsZXRpb24gcG9ydCBvZiBvcHMKKyAgICAgICAgICAgICMgdGhhdCBzdWNjZWVkIGltbWVkaWF0ZWx5LgorCisgICAgZGVmIF9yZWdpc3RlcihzZWxmLCBvdiwgb2JqLCBjYWxsYmFjayk6CisgICAgICAgICMgUmV0dXJuIGEgZnV0dXJlIHdoaWNoIHdpbGwgYmUgc2V0IHdpdGggdGhlIHJlc3VsdCBvZiB0aGUKKyAgICAgICAgIyBvcGVyYXRpb24gd2hlbiBpdCBjb21wbGV0ZXMuICBUaGUgZnV0dXJlJ3MgdmFsdWUgaXMgYWN0dWFsbHkKKyAgICAgICAgIyB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgY2FsbGJhY2soKS4KKyAgICAgICAgZiA9IF9PdmVybGFwcGVkRnV0dXJlKG92LCBsb29wPXNlbGYuX2xvb3ApCisgICAgICAgIGlmIGYuX3NvdXJjZV90cmFjZWJhY2s6CisgICAgICAgICAgICBkZWwgZi5fc291cmNlX3RyYWNlYmFja1stMV0KKyAgICAgICAgaWYgbm90IG92LnBlbmRpbmc6CisgICAgICAgICAgICAjIFRoZSBvcGVyYXRpb24gaGFzIGNvbXBsZXRlZCwgc28gbm8gbmVlZCB0byBwb3N0cG9uZSB0aGUKKyAgICAgICAgICAgICMgd29yay4gIFdlIGNhbm5vdCB0YWtlIHRoaXMgc2hvcnQgY3V0IGlmIHdlIG5lZWQgdGhlCisgICAgICAgICAgICAjIE51bWJlck9mQnl0ZXMsIENvbXBsZXRpb25LZXkgdmFsdWVzIHJldHVybmVkIGJ5CisgICAgICAgICAgICAjIFBvc3RRdWV1ZWRDb21wbGV0aW9uU3RhdHVzKCkuCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgdmFsdWUgPSBjYWxsYmFjayhOb25lLCBOb25lLCBvdikKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgZi5zZXRfZXhjZXB0aW9uKGUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGYuc2V0X3Jlc3VsdCh2YWx1ZSkKKyAgICAgICAgICAgICMgRXZlbiBpZiBHZXRPdmVybGFwcGVkUmVzdWx0KCkgd2FzIGNhbGxlZCwgd2UgaGF2ZSB0byB3YWl0IGZvciB0aGUKKyAgICAgICAgICAgICMgbm90aWZpY2F0aW9uIG9mIHRoZSBjb21wbGV0aW9uIGluIEdldFF1ZXVlZENvbXBsZXRpb25TdGF0dXMoKS4KKyAgICAgICAgICAgICMgUmVnaXN0ZXIgdGhlIG92ZXJsYXBwZWQgb3BlcmF0aW9uIHRvIGtlZXAgYSByZWZlcmVuY2UgdG8gdGhlCisgICAgICAgICAgICAjIE9WRVJMQVBQRUQgb2JqZWN0LCBvdGhlcndpc2UgdGhlIG1lbW9yeSBpcyBmcmVlZCBhbmQgV2luZG93cyBtYXkKKyAgICAgICAgICAgICMgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeS4KKworICAgICAgICAjIFJlZ2lzdGVyIHRoZSBvdmVybGFwcGVkIG9wZXJhdGlvbiBmb3IgbGF0ZXIuICBOb3RlIHRoYXQKKyAgICAgICAgIyB3ZSBvbmx5IHN0b3JlIG9iaiB0byBwcmV2ZW50IGl0IGZyb20gYmVpbmcgZ2FyYmFnZQorICAgICAgICAjIGNvbGxlY3RlZCB0b28gZWFybHkuCisgICAgICAgIHNlbGYuX2NhY2hlW292LmFkZHJlc3NdID0gKGYsIG92LCBvYmosIGNhbGxiYWNrKQorICAgICAgICByZXR1cm4gZgorCisgICAgZGVmIF91bnJlZ2lzdGVyKHNlbGYsIG92KToKKyAgICAgICAgIiIiVW5yZWdpc3RlciBhbiBvdmVybGFwcGVkIG9iamVjdC4KKworICAgICAgICBDYWxsIHRoaXMgbWV0aG9kIHdoZW4gaXRzIGZ1dHVyZSBoYXMgYmVlbiBjYW5jZWxsZWQuIFRoZSBldmVudCBjYW4KKyAgICAgICAgYWxyZWFkeSBiZSBzaWduYWxsZWQgKHBlbmRpbmcgaW4gdGhlIHByb2FjdG9yIGV2ZW50IHF1ZXVlKS4gSXQgaXMgYWxzbworICAgICAgICBzYWZlIGlmIHRoZSBldmVudCBpcyBuZXZlciBzaWduYWxsZWQgKGJlY2F1c2UgaXQgd2FzIGNhbmNlbGxlZCkuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl91bnJlZ2lzdGVyZWQuYXBwZW5kKG92KQorCisgICAgZGVmIF9nZXRfYWNjZXB0X3NvY2tldChzZWxmLCBmYW1pbHkpOgorICAgICAgICBzID0gc29ja2V0LnNvY2tldChmYW1pbHkpCisgICAgICAgIHMuc2V0dGltZW91dCgwKQorICAgICAgICByZXR1cm4gcworCisgICAgZGVmIF9wb2xsKHNlbGYsIHRpbWVvdXQ9Tm9uZSk6CisgICAgICAgIGlmIHRpbWVvdXQgaXMgTm9uZToKKyAgICAgICAgICAgIG1zID0gSU5GSU5JVEUKKyAgICAgICAgZWxpZiB0aW1lb3V0IDwgMDoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIm5lZ2F0aXZlIHRpbWVvdXQiKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBHZXRRdWV1ZWRDb21wbGV0aW9uU3RhdHVzKCkgaGFzIGEgcmVzb2x1dGlvbiBvZiAxIG1pbGxpc2Vjb25kLAorICAgICAgICAgICAgIyByb3VuZCBhd2F5IGZyb20gemVybyB0byB3YWl0ICphdCBsZWFzdCogdGltZW91dCBzZWNvbmRzLgorICAgICAgICAgICAgbXMgPSBtYXRoLmNlaWwodGltZW91dCAqIDFlMykKKyAgICAgICAgICAgIGlmIG1zID49IElORklOSVRFOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInRpbWVvdXQgdG9vIGJpZyIpCisKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIHN0YXR1cyA9IF9vdmVybGFwcGVkLkdldFF1ZXVlZENvbXBsZXRpb25TdGF0dXMoc2VsZi5faW9jcCwgbXMpCisgICAgICAgICAgICBpZiBzdGF0dXMgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgbXMgPSAwCisKKyAgICAgICAgICAgIGVyciwgdHJhbnNmZXJyZWQsIGtleSwgYWRkcmVzcyA9IHN0YXR1cworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGYsIG92LCBvYmosIGNhbGxiYWNrID0gc2VsZi5fY2FjaGUucG9wKGFkZHJlc3MpCisgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5fbG9vcC5nZXRfZGVidWcoKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fbG9vcC5jYWxsX2V4Y2VwdGlvbl9oYW5kbGVyKHsKKyAgICAgICAgICAgICAgICAgICAgICAgICdtZXNzYWdlJzogKCdHZXRRdWV1ZWRDb21wbGV0aW9uU3RhdHVzKCkgcmV0dXJuZWQgYW4gJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3VuZXhwZWN0ZWQgZXZlbnQnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdzdGF0dXMnOiAoJ2Vycj0lcyB0cmFuc2ZlcnJlZD0lcyBrZXk9JSN4IGFkZHJlc3M9JSN4JworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChlcnIsIHRyYW5zZmVycmVkLCBrZXksIGFkZHJlc3MpKSwKKyAgICAgICAgICAgICAgICAgICAgfSkKKworICAgICAgICAgICAgICAgICMga2V5IGlzIGVpdGhlciB6ZXJvLCBvciBpdCBpcyB1c2VkIHRvIHJldHVybiBhIHBpcGUKKyAgICAgICAgICAgICAgICAjIGhhbmRsZSB3aGljaCBzaG91bGQgYmUgY2xvc2VkIHRvIGF2b2lkIGEgbGVhay4KKyAgICAgICAgICAgICAgICBpZiBrZXkgbm90IGluICgwLCBfb3ZlcmxhcHBlZC5JTlZBTElEX0hBTkRMRV9WQUxVRSk6CisgICAgICAgICAgICAgICAgICAgIF93aW5hcGkuQ2xvc2VIYW5kbGUoa2V5KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGlmIG9iaiBpbiBzZWxmLl9zdG9wcGVkX3NlcnZpbmc6CisgICAgICAgICAgICAgICAgZi5jYW5jZWwoKQorICAgICAgICAgICAgIyBEb24ndCBjYWxsIHRoZSBjYWxsYmFjayBpZiBfcmVnaXN0ZXIoKSBhbHJlYWR5IHJlYWQgdGhlIHJlc3VsdCBvcgorICAgICAgICAgICAgIyBpZiB0aGUgb3ZlcmxhcHBlZCBoYXMgYmVlbiBjYW5jZWxsZWQKKyAgICAgICAgICAgIGVsaWYgbm90IGYuZG9uZSgpOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBjYWxsYmFjayh0cmFuc2ZlcnJlZCwga2V5LCBvdikKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgICAgICBmLnNldF9leGNlcHRpb24oZSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fcmVzdWx0cy5hcHBlbmQoZikKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBmLnNldF9yZXN1bHQodmFsdWUpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3Jlc3VsdHMuYXBwZW5kKGYpCisKKyAgICAgICAgIyBSZW1vdmUgdW5yZWdpc3RlZCBmdXR1cmVzCisgICAgICAgIGZvciBvdiBpbiBzZWxmLl91bnJlZ2lzdGVyZWQ6CisgICAgICAgICAgICBzZWxmLl9jYWNoZS5wb3Aob3YuYWRkcmVzcywgTm9uZSkKKyAgICAgICAgc2VsZi5fdW5yZWdpc3RlcmVkLmNsZWFyKCkKKworICAgIGRlZiBfc3RvcF9zZXJ2aW5nKHNlbGYsIG9iaik6CisgICAgICAgICMgb2JqIGlzIGEgc29ja2V0IG9yIHBpcGUgaGFuZGxlLiAgSXQgd2lsbCBiZSBjbG9zZWQgaW4KKyAgICAgICAgIyBCYXNlUHJvYWN0b3JFdmVudExvb3AuX3N0b3Bfc2VydmluZygpIHdoaWNoIHdpbGwgbWFrZSBhbnkKKyAgICAgICAgIyBwZW5kaW5nIG9wZXJhdGlvbnMgZmFpbCBxdWlja2x5LgorICAgICAgICBzZWxmLl9zdG9wcGVkX3NlcnZpbmcuYWRkKG9iaikKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgIyBDYW5jZWwgcmVtYWluaW5nIHJlZ2lzdGVyZWQgb3BlcmF0aW9ucy4KKyAgICAgICAgZm9yIGFkZHJlc3MsIChmdXQsIG92LCBvYmosIGNhbGxiYWNrKSBpbiBsaXN0KHNlbGYuX2NhY2hlLml0ZW1zKCkpOgorICAgICAgICAgICAgaWYgZnV0LmNhbmNlbGxlZCgpOgorICAgICAgICAgICAgICAgICMgTm90aGluZyB0byBkbyB3aXRoIGNhbmNlbGxlZCBmdXR1cmVzCisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKGZ1dCwgX1dhaXRDYW5jZWxGdXR1cmUpOgorICAgICAgICAgICAgICAgICMgX1dhaXRDYW5jZWxGdXR1cmUgbXVzdCBub3QgYmUgY2FuY2VsbGVkCisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGZ1dC5jYW5jZWwoKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKKyAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5fbG9vcCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQgPSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21lc3NhZ2UnOiAnQ2FuY2VsbGluZyBhIGZ1dHVyZSBmYWlsZWQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICdleGNlcHRpb24nOiBleGMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Z1dHVyZSc6IGZ1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGZ1dC5fc291cmNlX3RyYWNlYmFjazoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0Wydzb3VyY2VfdHJhY2ViYWNrJ10gPSBmdXQuX3NvdXJjZV90cmFjZWJhY2sKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9leGNlcHRpb25faGFuZGxlcihjb250ZXh0KQorCisgICAgICAgIHdoaWxlIHNlbGYuX2NhY2hlOgorICAgICAgICAgICAgaWYgbm90IHNlbGYuX3BvbGwoMSk6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCd0YWtpbmcgbG9uZyB0aW1lIHRvIGNsb3NlIHByb2FjdG9yJykKKworICAgICAgICBzZWxmLl9yZXN1bHRzID0gW10KKyAgICAgICAgaWYgc2VsZi5faW9jcCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIF93aW5hcGkuQ2xvc2VIYW5kbGUoc2VsZi5faW9jcCkKKyAgICAgICAgICAgIHNlbGYuX2lvY3AgPSBOb25lCisKKyAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgc2VsZi5jbG9zZSgpCisKKworY2xhc3MgX1dpbmRvd3NTdWJwcm9jZXNzVHJhbnNwb3J0KGJhc2Vfc3VicHJvY2Vzcy5CYXNlU3VicHJvY2Vzc1RyYW5zcG9ydCk6CisKKyAgICBkZWYgX3N0YXJ0KHNlbGYsIGFyZ3MsIHNoZWxsLCBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIsIGJ1ZnNpemUsICoqa3dhcmdzKToKKyAgICAgICAgc2VsZi5fcHJvYyA9IHdpbmRvd3NfdXRpbHMuUG9wZW4oCisgICAgICAgICAgICBhcmdzLCBzaGVsbD1zaGVsbCwgc3RkaW49c3RkaW4sIHN0ZG91dD1zdGRvdXQsIHN0ZGVycj1zdGRlcnIsCisgICAgICAgICAgICBidWZzaXplPWJ1ZnNpemUsICoqa3dhcmdzKQorCisgICAgICAgIGRlZiBjYWxsYmFjayhmKToKKyAgICAgICAgICAgIHJldHVybmNvZGUgPSBzZWxmLl9wcm9jLnBvbGwoKQorICAgICAgICAgICAgc2VsZi5fcHJvY2Vzc19leGl0ZWQocmV0dXJuY29kZSkKKworICAgICAgICBmID0gc2VsZi5fbG9vcC5fcHJvYWN0b3Iud2FpdF9mb3JfaGFuZGxlKGludChzZWxmLl9wcm9jLl9oYW5kbGUpKQorICAgICAgICBmLmFkZF9kb25lX2NhbGxiYWNrKGNhbGxiYWNrKQorCisKK1NlbGVjdG9yRXZlbnRMb29wID0gX1dpbmRvd3NTZWxlY3RvckV2ZW50TG9vcAorCisKK2NsYXNzIF9XaW5kb3dzRGVmYXVsdEV2ZW50TG9vcFBvbGljeShldmVudHMuQmFzZURlZmF1bHRFdmVudExvb3BQb2xpY3kpOgorICAgIF9sb29wX2ZhY3RvcnkgPSBTZWxlY3RvckV2ZW50TG9vcAorCisKK0RlZmF1bHRFdmVudExvb3BQb2xpY3kgPSBfV2luZG93c0RlZmF1bHRFdmVudExvb3BQb2xpY3kKZGlmZiAtLWdpdCBhL0xpYi9hc3luY2lvL3dpbmRvd3NfdXRpbHMucHkgYi9MaWIvYXN5bmNpby93aW5kb3dzX3V0aWxzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3MGNkMTMKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvYXN5bmNpby93aW5kb3dzX3V0aWxzLnB5CkBAIC0wLDAgKzEsMjIzIEBACisiIiIKK1ZhcmlvdXMgV2luZG93cyBzcGVjaWZpYyBiaXRzIGFuZCBwaWVjZXMKKyIiIgorCitpbXBvcnQgc3lzCisKK2lmIHN5cy5wbGF0Zm9ybSAhPSAnd2luMzInOiAgIyBwcmFnbWE6IG5vIGNvdmVyCisgICAgcmFpc2UgSW1wb3J0RXJyb3IoJ3dpbjMyIG9ubHknKQorCitpbXBvcnQgX3dpbmFwaQoraW1wb3J0IGl0ZXJ0b29scworaW1wb3J0IG1zdmNydAoraW1wb3J0IG9zCitpbXBvcnQgc29ja2V0CitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgd2FybmluZ3MKKworCitfX2FsbF9fID0gWydzb2NrZXRwYWlyJywgJ3BpcGUnLCAnUG9wZW4nLCAnUElQRScsICdQaXBlSGFuZGxlJ10KKworCisjIENvbnN0YW50cy9nbG9iYWxzCisKKworQlVGU0laRSA9IDgxOTIKK1BJUEUgPSBzdWJwcm9jZXNzLlBJUEUKK1NURE9VVCA9IHN1YnByb2Nlc3MuU1RET1VUCitfbW1hcF9jb3VudGVyID0gaXRlcnRvb2xzLmNvdW50KCkKKworCitpZiBoYXNhdHRyKHNvY2tldCwgJ3NvY2tldHBhaXInKToKKyAgICAjIFNpbmNlIFB5dGhvbiAzLjUsIHNvY2tldC5zb2NrZXRwYWlyKCkgaXMgbm93IGFsc28gYXZhaWxhYmxlIG9uIFdpbmRvd3MKKyAgICBzb2NrZXRwYWlyID0gc29ja2V0LnNvY2tldHBhaXIKK2Vsc2U6CisgICAgIyBSZXBsYWNlbWVudCBmb3Igc29ja2V0LnNvY2tldHBhaXIoKQorICAgIGRlZiBzb2NrZXRwYWlyKGZhbWlseT1zb2NrZXQuQUZfSU5FVCwgdHlwZT1zb2NrZXQuU09DS19TVFJFQU0sIHByb3RvPTApOgorICAgICAgICAiIiJBIHNvY2tldCBwYWlyIHVzYWJsZSBhcyBhIHNlbGYtcGlwZSwgZm9yIFdpbmRvd3MuCisKKyAgICAgICAgT3JpZ2luOiBodHRwczovL2dpc3QuZ2l0aHViLmNvbS80MzI1NzgzLCBieSBHZWVydCBKYW5zZW4uCisgICAgICAgIFB1YmxpYyBkb21haW4uCisgICAgICAgICIiIgorICAgICAgICBpZiBmYW1pbHkgPT0gc29ja2V0LkFGX0lORVQ6CisgICAgICAgICAgICBob3N0ID0gJzEyNy4wLjAuMScKKyAgICAgICAgZWxpZiBmYW1pbHkgPT0gc29ja2V0LkFGX0lORVQ2OgorICAgICAgICAgICAgaG9zdCA9ICc6OjEnCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJPbmx5IEFGX0lORVQgYW5kIEFGX0lORVQ2IHNvY2tldCBhZGRyZXNzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZhbWlsaWVzIGFyZSBzdXBwb3J0ZWQiKQorICAgICAgICBpZiB0eXBlICE9IHNvY2tldC5TT0NLX1NUUkVBTToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIk9ubHkgU09DS19TVFJFQU0gc29ja2V0IHR5cGUgaXMgc3VwcG9ydGVkIikKKyAgICAgICAgaWYgcHJvdG8gIT0gMDoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIk9ubHkgcHJvdG9jb2wgemVybyBpcyBzdXBwb3J0ZWQiKQorCisgICAgICAgICMgV2UgY3JlYXRlIGEgY29ubmVjdGVkIFRDUCBzb2NrZXQuIE5vdGUgdGhlIHRyaWNrIHdpdGggc2V0YmxvY2tpbmcoMCkKKyAgICAgICAgIyB0aGF0IHByZXZlbnRzIHVzIGZyb20gaGF2aW5nIHRvIGNyZWF0ZSBhIHRocmVhZC4KKyAgICAgICAgbHNvY2sgPSBzb2NrZXQuc29ja2V0KGZhbWlseSwgdHlwZSwgcHJvdG8pCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGxzb2NrLmJpbmQoKGhvc3QsIDApKQorICAgICAgICAgICAgbHNvY2subGlzdGVuKDEpCisgICAgICAgICAgICAjIE9uIElQdjYsIGlnbm9yZSBmbG93X2luZm8gYW5kIHNjb3BlX2lkCisgICAgICAgICAgICBhZGRyLCBwb3J0ID0gbHNvY2suZ2V0c29ja25hbWUoKVs6Ml0KKyAgICAgICAgICAgIGNzb2NrID0gc29ja2V0LnNvY2tldChmYW1pbHksIHR5cGUsIHByb3RvKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGNzb2NrLnNldGJsb2NraW5nKEZhbHNlKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgY3NvY2suY29ubmVjdCgoYWRkciwgcG9ydCkpCisgICAgICAgICAgICAgICAgZXhjZXB0IChCbG9ja2luZ0lPRXJyb3IsIEludGVycnVwdGVkRXJyb3IpOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgY3NvY2suc2V0YmxvY2tpbmcoVHJ1ZSkKKyAgICAgICAgICAgICAgICBzc29jaywgXyA9IGxzb2NrLmFjY2VwdCgpCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgY3NvY2suY2xvc2UoKQorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBsc29jay5jbG9zZSgpCisgICAgICAgIHJldHVybiAoc3NvY2ssIGNzb2NrKQorCisKKyMgUmVwbGFjZW1lbnQgZm9yIG9zLnBpcGUoKSB1c2luZyBoYW5kbGVzIGluc3RlYWQgb2YgZmRzCisKKworZGVmIHBpcGUoKiwgZHVwbGV4PUZhbHNlLCBvdmVybGFwcGVkPShUcnVlLCBUcnVlKSwgYnVmc2l6ZT1CVUZTSVpFKToKKyAgICAiIiJMaWtlIG9zLnBpcGUoKSBidXQgd2l0aCBvdmVybGFwcGVkIHN1cHBvcnQgYW5kIHVzaW5nIGhhbmRsZXMgbm90IGZkcy4iIiIKKyAgICBhZGRyZXNzID0gdGVtcGZpbGUubWt0ZW1wKHByZWZpeD1yJ1xcLlxwaXBlXHB5dGhvbi1waXBlLSVkLSVkLScgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9zLmdldHBpZCgpLCBuZXh0KF9tbWFwX2NvdW50ZXIpKSkKKworICAgIGlmIGR1cGxleDoKKyAgICAgICAgb3Blbm1vZGUgPSBfd2luYXBpLlBJUEVfQUNDRVNTX0RVUExFWAorICAgICAgICBhY2Nlc3MgPSBfd2luYXBpLkdFTkVSSUNfUkVBRCB8IF93aW5hcGkuR0VORVJJQ19XUklURQorICAgICAgICBvYnNpemUsIGlic2l6ZSA9IGJ1ZnNpemUsIGJ1ZnNpemUKKyAgICBlbHNlOgorICAgICAgICBvcGVubW9kZSA9IF93aW5hcGkuUElQRV9BQ0NFU1NfSU5CT1VORAorICAgICAgICBhY2Nlc3MgPSBfd2luYXBpLkdFTkVSSUNfV1JJVEUKKyAgICAgICAgb2JzaXplLCBpYnNpemUgPSAwLCBidWZzaXplCisKKyAgICBvcGVubW9kZSB8PSBfd2luYXBpLkZJTEVfRkxBR19GSVJTVF9QSVBFX0lOU1RBTkNFCisKKyAgICBpZiBvdmVybGFwcGVkWzBdOgorICAgICAgICBvcGVubW9kZSB8PSBfd2luYXBpLkZJTEVfRkxBR19PVkVSTEFQUEVECisKKyAgICBpZiBvdmVybGFwcGVkWzFdOgorICAgICAgICBmbGFnc19hbmRfYXR0cmlicyA9IF93aW5hcGkuRklMRV9GTEFHX09WRVJMQVBQRUQKKyAgICBlbHNlOgorICAgICAgICBmbGFnc19hbmRfYXR0cmlicyA9IDAKKworICAgIGgxID0gaDIgPSBOb25lCisgICAgdHJ5OgorICAgICAgICBoMSA9IF93aW5hcGkuQ3JlYXRlTmFtZWRQaXBlKAorICAgICAgICAgICAgYWRkcmVzcywgb3Blbm1vZGUsIF93aW5hcGkuUElQRV9XQUlULAorICAgICAgICAgICAgMSwgb2JzaXplLCBpYnNpemUsIF93aW5hcGkuTk1QV0FJVF9XQUlUX0ZPUkVWRVIsIF93aW5hcGkuTlVMTCkKKworICAgICAgICBoMiA9IF93aW5hcGkuQ3JlYXRlRmlsZSgKKyAgICAgICAgICAgIGFkZHJlc3MsIGFjY2VzcywgMCwgX3dpbmFwaS5OVUxMLCBfd2luYXBpLk9QRU5fRVhJU1RJTkcsCisgICAgICAgICAgICBmbGFnc19hbmRfYXR0cmlicywgX3dpbmFwaS5OVUxMKQorCisgICAgICAgIG92ID0gX3dpbmFwaS5Db25uZWN0TmFtZWRQaXBlKGgxLCBvdmVybGFwcGVkPVRydWUpCisgICAgICAgIG92LkdldE92ZXJsYXBwZWRSZXN1bHQoVHJ1ZSkKKyAgICAgICAgcmV0dXJuIGgxLCBoMgorICAgIGV4Y2VwdDoKKyAgICAgICAgaWYgaDEgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBfd2luYXBpLkNsb3NlSGFuZGxlKGgxKQorICAgICAgICBpZiBoMiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIF93aW5hcGkuQ2xvc2VIYW5kbGUoaDIpCisgICAgICAgIHJhaXNlCisKKworIyBXcmFwcGVyIGZvciBhIHBpcGUgaGFuZGxlCisKKworY2xhc3MgUGlwZUhhbmRsZToKKyAgICAiIiJXcmFwcGVyIGZvciBhbiBvdmVybGFwcGVkIHBpcGUgaGFuZGxlIHdoaWNoIGlzIHZhZ3VlbHkgZmlsZS1vYmplY3QgbGlrZS4KKworICAgIFRoZSBJT0NQIGV2ZW50IGxvb3AgY2FuIHVzZSB0aGVzZSBpbnN0ZWFkIG9mIHNvY2tldCBvYmplY3RzLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBoYW5kbGUpOgorICAgICAgICBzZWxmLl9oYW5kbGUgPSBoYW5kbGUKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5faGFuZGxlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgaGFuZGxlID0gJ2hhbmRsZT0lcicgJSBzZWxmLl9oYW5kbGUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGhhbmRsZSA9ICdjbG9zZWQnCisgICAgICAgIHJldHVybiAnPCVzICVzPicgJSAoc2VsZi5fX2NsYXNzX18uX19uYW1lX18sIGhhbmRsZSkKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBoYW5kbGUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9oYW5kbGUKKworICAgIGRlZiBmaWxlbm8oc2VsZik6CisgICAgICAgIGlmIHNlbGYuX2hhbmRsZSBpcyBOb25lOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiSS9PIG9wZXJhdGlvb24gb24gY2xvc2VkIHBpcGUiKQorICAgICAgICByZXR1cm4gc2VsZi5faGFuZGxlCisKKyAgICBkZWYgY2xvc2Uoc2VsZiwgKiwgQ2xvc2VIYW5kbGU9X3dpbmFwaS5DbG9zZUhhbmRsZSk6CisgICAgICAgIGlmIHNlbGYuX2hhbmRsZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIENsb3NlSGFuZGxlKHNlbGYuX2hhbmRsZSkKKyAgICAgICAgICAgIHNlbGYuX2hhbmRsZSA9IE5vbmUKKworICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9oYW5kbGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICB3YXJuaW5ncy53YXJuKCJ1bmNsb3NlZCAlciIgJSBzZWxmLCBSZXNvdXJjZVdhcm5pbmcpCisgICAgICAgICAgICBzZWxmLmNsb3NlKCkKKworICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgdCwgdiwgdGIpOgorICAgICAgICBzZWxmLmNsb3NlKCkKKworCisjIFJlcGxhY2VtZW50IGZvciBzdWJwcm9jZXNzLlBvcGVuIHVzaW5nIG92ZXJsYXBwZWQgcGlwZSBoYW5kbGVzCisKKworY2xhc3MgUG9wZW4oc3VicHJvY2Vzcy5Qb3Blbik6CisgICAgIiIiUmVwbGFjZW1lbnQgZm9yIHN1YnByb2Nlc3MuUG9wZW4gdXNpbmcgb3ZlcmxhcHBlZCBwaXBlIGhhbmRsZXMuCisKKyAgICBUaGUgc3RkaW4sIHN0ZG91dCwgc3RkZXJyIGFyZSBOb25lIG9yIGluc3RhbmNlcyBvZiBQaXBlSGFuZGxlLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhcmdzLCBzdGRpbj1Ob25lLCBzdGRvdXQ9Tm9uZSwgc3RkZXJyPU5vbmUsICoqa3dkcyk6CisgICAgICAgIGFzc2VydCBub3Qga3dkcy5nZXQoJ3VuaXZlcnNhbF9uZXdsaW5lcycpCisgICAgICAgIGFzc2VydCBrd2RzLmdldCgnYnVmc2l6ZScsIDApID09IDAKKyAgICAgICAgc3RkaW5fcmZkID0gc3Rkb3V0X3dmZCA9IHN0ZGVycl93ZmQgPSBOb25lCisgICAgICAgIHN0ZGluX3doID0gc3Rkb3V0X3JoID0gc3RkZXJyX3JoID0gTm9uZQorICAgICAgICBpZiBzdGRpbiA9PSBQSVBFOgorICAgICAgICAgICAgc3RkaW5fcmgsIHN0ZGluX3doID0gcGlwZShvdmVybGFwcGVkPShGYWxzZSwgVHJ1ZSksIGR1cGxleD1UcnVlKQorICAgICAgICAgICAgc3RkaW5fcmZkID0gbXN2Y3J0Lm9wZW5fb3NmaGFuZGxlKHN0ZGluX3JoLCBvcy5PX1JET05MWSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHN0ZGluX3JmZCA9IHN0ZGluCisgICAgICAgIGlmIHN0ZG91dCA9PSBQSVBFOgorICAgICAgICAgICAgc3Rkb3V0X3JoLCBzdGRvdXRfd2ggPSBwaXBlKG92ZXJsYXBwZWQ9KFRydWUsIEZhbHNlKSkKKyAgICAgICAgICAgIHN0ZG91dF93ZmQgPSBtc3ZjcnQub3Blbl9vc2ZoYW5kbGUoc3Rkb3V0X3doLCAwKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3Rkb3V0X3dmZCA9IHN0ZG91dAorICAgICAgICBpZiBzdGRlcnIgPT0gUElQRToKKyAgICAgICAgICAgIHN0ZGVycl9yaCwgc3RkZXJyX3doID0gcGlwZShvdmVybGFwcGVkPShUcnVlLCBGYWxzZSkpCisgICAgICAgICAgICBzdGRlcnJfd2ZkID0gbXN2Y3J0Lm9wZW5fb3NmaGFuZGxlKHN0ZGVycl93aCwgMCkKKyAgICAgICAgZWxpZiBzdGRlcnIgPT0gU1RET1VUOgorICAgICAgICAgICAgc3RkZXJyX3dmZCA9IHN0ZG91dF93ZmQKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHN0ZGVycl93ZmQgPSBzdGRlcnIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhhcmdzLCBzdGRpbj1zdGRpbl9yZmQsIHN0ZG91dD1zdGRvdXRfd2ZkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3RkZXJyX3dmZCwgKiprd2RzKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBmb3IgaCBpbiAoc3RkaW5fd2gsIHN0ZG91dF9yaCwgc3RkZXJyX3JoKToKKyAgICAgICAgICAgICAgICBpZiBoIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBfd2luYXBpLkNsb3NlSGFuZGxlKGgpCisgICAgICAgICAgICByYWlzZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgc3RkaW5fd2ggaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgc2VsZi5zdGRpbiA9IFBpcGVIYW5kbGUoc3RkaW5fd2gpCisgICAgICAgICAgICBpZiBzdGRvdXRfcmggaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgc2VsZi5zdGRvdXQgPSBQaXBlSGFuZGxlKHN0ZG91dF9yaCkKKyAgICAgICAgICAgIGlmIHN0ZGVycl9yaCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBzZWxmLnN0ZGVyciA9IFBpcGVIYW5kbGUoc3RkZXJyX3JoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgaWYgc3RkaW4gPT0gUElQRToKKyAgICAgICAgICAgICAgICBvcy5jbG9zZShzdGRpbl9yZmQpCisgICAgICAgICAgICBpZiBzdGRvdXQgPT0gUElQRToKKyAgICAgICAgICAgICAgICBvcy5jbG9zZShzdGRvdXRfd2ZkKQorICAgICAgICAgICAgaWYgc3RkZXJyID09IFBJUEU6CisgICAgICAgICAgICAgICAgb3MuY2xvc2Uoc3RkZXJyX3dmZCkKZGlmZiAtLWdpdCBhL0xpYi9hc3luY29yZS5weSBiL0xpYi9hc3luY29yZS5weQppbmRleCA5MDlkOWY2Li4wMGE2Mzk2IDEwMDY0NAotLS0gYS9MaWIvYXN5bmNvcmUucHkKKysrIGIvTGliL2FzeW5jb3JlLnB5CkBAIC0xMTIsNyArMTEyLDcgQEAKICAgICAgICAgICAgIG9iai5oYW5kbGVfZXhwdF9ldmVudCgpCiAgICAgICAgIGlmIGZsYWdzICYgKHNlbGVjdC5QT0xMSFVQIHwgc2VsZWN0LlBPTExFUlIgfCBzZWxlY3QuUE9MTE5WQUwpOgogICAgICAgICAgICAgb2JqLmhhbmRsZV9jbG9zZSgpCi0gICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBlOgorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgIGlmIGUuYXJnc1swXSBub3QgaW4gX0RJU0NPTk5FQ1RFRDoKICAgICAgICAgICAgIG9iai5oYW5kbGVfZXJyb3IoKQogICAgICAgICBlbHNlOgpAQCAtMjQwLDcgKzI0MCw3IEBACiAgICAgICAgICAgICAjIHBhc3NlZCBiZSBjb25uZWN0ZWQuCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc2VsZi5hZGRyID0gc29jay5nZXRwZWVybmFtZSgpCi0gICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIGVycjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKICAgICAgICAgICAgICAgICBpZiBlcnIuYXJnc1swXSBpbiAoRU5PVENPTk4sIEVJTlZBTCk6CiAgICAgICAgICAgICAgICAgICAgICMgVG8gaGFuZGxlIHRoZSBjYXNlIHdoZXJlIHdlIGdvdCBhbiB1bmNvbm5lY3RlZAogICAgICAgICAgICAgICAgICAgICAjIHNvY2tldC4KQEAgLTMwNCw3ICszMDQsNyBAQAogICAgICAgICAgICAgICAgIHNlbGYuc29ja2V0LmdldHNvY2tvcHQoc29ja2V0LlNPTF9TT0NLRVQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrZXQuU09fUkVVU0VBRERSKSB8IDEKICAgICAgICAgICAgICAgICApCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcGFzcwogCiAgICAgIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMzQ1LDcgKzM0NSw3IEBACiAgICAgICAgICAgICBzZWxmLmFkZHIgPSBhZGRyZXNzCiAgICAgICAgICAgICBzZWxmLmhhbmRsZV9jb25uZWN0X2V2ZW50KCkKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJhaXNlIHNvY2tldC5lcnJvcihlcnIsIGVycm9yY29kZVtlcnJdKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcihlcnIsIGVycm9yY29kZVtlcnJdKQogCiAgICAgZGVmIGFjY2VwdChzZWxmKToKICAgICAgICAgIyBYWFggY2FuIHJldHVybiBlaXRoZXIgYW4gYWRkcmVzcyBwYWlyIG9yIE5vbmUKQEAgLTM1Myw3ICszNTMsNyBAQAogICAgICAgICAgICAgY29ubiwgYWRkciA9IHNlbGYuc29ja2V0LmFjY2VwdCgpCiAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CiAgICAgICAgICAgICByZXR1cm4gTm9uZQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIHdoeToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgd2h5OgogICAgICAgICAgICAgaWYgd2h5LmFyZ3NbMF0gaW4gKEVXT1VMREJMT0NLLCBFQ09OTkFCT1JURUQsIEVBR0FJTik6CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKICAgICAgICAgICAgIGVsc2U6CkBAIC0zNjUsNyArMzY1LDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5zb2NrZXQuc2VuZChkYXRhKQogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIHdoeToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgd2h5OgogICAgICAgICAgICAgaWYgd2h5LmFyZ3NbMF0gPT0gRVdPVUxEQkxPQ0s6CiAgICAgICAgICAgICAgICAgcmV0dXJuIDAKICAgICAgICAgICAgIGVsaWYgd2h5LmFyZ3NbMF0gaW4gX0RJU0NPTk5FQ1RFRDoKQEAgLTM4NCw3ICszODQsNyBAQAogICAgICAgICAgICAgICAgIHJldHVybiBiJycKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGEKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyB3aHk6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIHdoeToKICAgICAgICAgICAgICMgd2luc29jayBzb21ldGltZXMgcmFpc2VzIEVOT1RDT05OCiAgICAgICAgICAgICBpZiB3aHkuYXJnc1swXSBpbiBfRElTQ09OTkVDVEVEOgogICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlX2Nsb3NlKCkKQEAgLTM5NywxMSArMzk3LDEyIEBACiAgICAgICAgIHNlbGYuYWNjZXB0aW5nID0gRmFsc2UKICAgICAgICAgc2VsZi5jb25uZWN0aW5nID0gRmFsc2UKICAgICAgICAgc2VsZi5kZWxfY2hhbm5lbCgpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYuc29ja2V0LmNsb3NlKCkKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyB3aHk6Ci0gICAgICAgICAgICBpZiB3aHkuYXJnc1swXSBub3QgaW4gKEVOT1RDT05OLCBFQkFERik6Ci0gICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgaWYgc2VsZi5zb2NrZXQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5zb2NrZXQuY2xvc2UoKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgd2h5OgorICAgICAgICAgICAgICAgIGlmIHdoeS5hcmdzWzBdIG5vdCBpbiAoRU5PVENPTk4sIEVCQURGKToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKIAogICAgICMgY2hlYXAgaW5oZXJpdGFuY2UsIHVzZWQgdG8gcGFzcyBhbGwgb3RoZXIgYXR0cmlidXRlCiAgICAgIyByZWZlcmVuY2VzIHRvIHRoZSB1bmRlcmx5aW5nIHNvY2tldCBvYmplY3QuCkBAIC00NDMsNyArNDQ0LDcgQEAKICAgICBkZWYgaGFuZGxlX2Nvbm5lY3RfZXZlbnQoc2VsZik6CiAgICAgICAgIGVyciA9IHNlbGYuc29ja2V0LmdldHNvY2tvcHQoc29ja2V0LlNPTF9TT0NLRVQsIHNvY2tldC5TT19FUlJPUikKICAgICAgICAgaWYgZXJyICE9IDA6Ci0gICAgICAgICAgICByYWlzZSBzb2NrZXQuZXJyb3IoZXJyLCBfc3RyZXJyb3IoZXJyKSkKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoZXJyLCBfc3RyZXJyb3IoZXJyKSkKICAgICAgICAgc2VsZi5oYW5kbGVfY29ubmVjdCgpCiAgICAgICAgIHNlbGYuY29ubmVjdGVkID0gVHJ1ZQogICAgICAgICBzZWxmLmNvbm5lY3RpbmcgPSBGYWxzZQpAQCAtNTMyLDcgKzUzMyw3IEBACiAKICAgICBkZWYgaW5pdGlhdGVfc2VuZChzZWxmKToKICAgICAgICAgbnVtX3NlbnQgPSAwCi0gICAgICAgIG51bV9zZW50ID0gZGlzcGF0Y2hlci5zZW5kKHNlbGYsIHNlbGYub3V0X2J1ZmZlcls6NTEyXSkKKyAgICAgICAgbnVtX3NlbnQgPSBkaXNwYXRjaGVyLnNlbmQoc2VsZiwgc2VsZi5vdXRfYnVmZmVyWzo2NTUzNl0pCiAgICAgICAgIHNlbGYub3V0X2J1ZmZlciA9IHNlbGYub3V0X2J1ZmZlcltudW1fc2VudDpdCiAKICAgICBkZWYgaGFuZGxlX3dyaXRlKHNlbGYpOgpAQCAtNjEzLDYgKzYxNCwxMSBAQAogICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgZmQpOgogICAgICAgICAgICAgc2VsZi5mZCA9IG9zLmR1cChmZCkKIAorICAgICAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgICAgIGlmIHNlbGYuZmQgPj0gMDoKKyAgICAgICAgICAgICAgICB3YXJuaW5ncy53YXJuKCJ1bmNsb3NlZCBmaWxlICVyIiAlIHNlbGYsIFJlc291cmNlV2FybmluZykKKyAgICAgICAgICAgIHNlbGYuY2xvc2UoKQorCiAgICAgICAgIGRlZiByZWN2KHNlbGYsICphcmdzKToKICAgICAgICAgICAgIHJldHVybiBvcy5yZWFkKHNlbGYuZmQsICphcmdzKQogCkBAIC02MzEsNyArNjM3LDEwIEBACiAgICAgICAgIHdyaXRlID0gc2VuZAogCiAgICAgICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgICAgIGlmIHNlbGYuZmQgPCAwOgorICAgICAgICAgICAgICAgIHJldHVybgogICAgICAgICAgICAgb3MuY2xvc2Uoc2VsZi5mZCkKKyAgICAgICAgICAgIHNlbGYuZmQgPSAtMQogCiAgICAgICAgIGRlZiBmaWxlbm8oc2VsZik6CiAgICAgICAgICAgICByZXR1cm4gc2VsZi5mZApkaWZmIC0tZ2l0IGEvTGliL2Jhc2U2NC5weSBiL0xpYi9iYXNlNjQucHkKaW5kZXggYjZlODJiNi4uNjQwZjc4NyAxMDA3NTUKLS0tIGEvTGliL2Jhc2U2NC5weQorKysgYi9MaWIvYmFzZTY0LnB5CkBAIC0xLDYgKzEsNiBAQAogIyEgL3Vzci9iaW4vZW52IHB5dGhvbjMKIAotIiIiUkZDIDM1NDg6IEJhc2UxNiwgQmFzZTMyLCBCYXNlNjQgRGF0YSBFbmNvZGluZ3MiIiIKKyIiIkJhc2UxNiwgQmFzZTMyLCBCYXNlNjQgKFJGQyAzNTQ4KSwgQmFzZTg1IGFuZCBBc2NpaTg1IGRhdGEgZW5jb2RpbmdzIiIiCiAKICMgTW9kaWZpZWQgMDQtT2N0LTE5OTUgYnkgSmFjayBKYW5zZW4gdG8gdXNlIGJpbmFzY2lpIG1vZHVsZQogIyBNb2RpZmllZCAzMC1EZWMtMjAwMyBieSBCYXJyeSBXYXJzYXcgdG8gYWRkIGZ1bGwgUkZDIDM1NDggc3VwcG9ydApAQCAtMTcsNiArMTcsOCBAQAogICAgICMgR2VuZXJhbGl6ZWQgaW50ZXJmYWNlIGZvciBvdGhlciBlbmNvZGluZ3MKICAgICAnYjY0ZW5jb2RlJywgJ2I2NGRlY29kZScsICdiMzJlbmNvZGUnLCAnYjMyZGVjb2RlJywKICAgICAnYjE2ZW5jb2RlJywgJ2IxNmRlY29kZScsCisgICAgIyBCYXNlODUgYW5kIEFzY2lpODUgZW5jb2RpbmdzCisgICAgJ2I4NWVuY29kZScsICdiODVkZWNvZGUnLCAnYTg1ZW5jb2RlJywgJ2E4NWRlY29kZScsCiAgICAgIyBTdGFuZGFyZCBCYXNlNjQgZW5jb2RpbmcKICAgICAnc3RhbmRhcmRfYjY0ZW5jb2RlJywgJ3N0YW5kYXJkX2I2NGRlY29kZScsCiAgICAgIyBTb21lIGNvbW1vbiBCYXNlNjQgYWx0ZXJuYXRpdmVzLiAgQXMgcmVmZXJlbmNlZCBieSBSRkMgMzQ1OCwgc2VlIHRocmVhZApAQCAtMzUsMTEgKzM3LDEzIEBACiAgICAgICAgICAgICByZXR1cm4gcy5lbmNvZGUoJ2FzY2lpJykKICAgICAgICAgZXhjZXB0IFVuaWNvZGVFbmNvZGVFcnJvcjoKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3N0cmluZyBhcmd1bWVudCBzaG91bGQgY29udGFpbiBvbmx5IEFTQ0lJIGNoYXJhY3RlcnMnKQotICAgIGVsaWYgaXNpbnN0YW5jZShzLCBieXRlc190eXBlcyk6CisgICAgaWYgaXNpbnN0YW5jZShzLCBieXRlc190eXBlcyk6CiAgICAgICAgIHJldHVybiBzCi0gICAgZWxzZToKLSAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJhcmd1bWVudCBzaG91bGQgYmUgYnl0ZXMgb3IgQVNDSUkgc3RyaW5nLCBub3QgJXMiICUgcy5fX2NsYXNzX18uX19uYW1lX18pCi0KKyAgICB0cnk6CisgICAgICAgIHJldHVybiBtZW1vcnl2aWV3KHMpLnRvYnl0ZXMoKQorICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiYXJndW1lbnQgc2hvdWxkIGJlIGEgYnl0ZXMtbGlrZSBvYmplY3Qgb3IgQVNDSUkgIgorICAgICAgICAgICAgICAgICAgICAgICAgInN0cmluZywgbm90ICVyIiAlIHMuX19jbGFzc19fLl9fbmFtZV9fKSBmcm9tIE5vbmUKIAogCiAjIEJhc2U2NCBlbmNvZGluZy9kZWNvZGluZyB1c2VzIGJpbmFzY2lpCkBAIC01NCwxNCArNTgsOSBAQAogCiAgICAgVGhlIGVuY29kZWQgYnl0ZSBzdHJpbmcgaXMgcmV0dXJuZWQuCiAgICAgIiIiCi0gICAgaWYgbm90IGlzaW5zdGFuY2UocywgYnl0ZXNfdHlwZXMpOgotICAgICAgICByYWlzZSBUeXBlRXJyb3IoImV4cGVjdGVkIGJ5dGVzLCBub3QgJXMiICUgcy5fX2NsYXNzX18uX19uYW1lX18pCiAgICAgIyBTdHJpcCBvZmYgdGhlIHRyYWlsaW5nIG5ld2xpbmUKICAgICBlbmNvZGVkID0gYmluYXNjaWkuYjJhX2Jhc2U2NChzKVs6LTFdCiAgICAgaWYgYWx0Y2hhcnMgaXMgbm90IE5vbmU6Ci0gICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGFsdGNoYXJzLCBieXRlc190eXBlcyk6Ci0gICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoImV4cGVjdGVkIGJ5dGVzLCBub3QgJXMiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJSBhbHRjaGFycy5fX2NsYXNzX18uX19uYW1lX18pCiAgICAgICAgIGFzc2VydCBsZW4oYWx0Y2hhcnMpID09IDIsIHJlcHIoYWx0Y2hhcnMpCiAgICAgICAgIHJldHVybiBlbmNvZGVkLnRyYW5zbGF0ZShieXRlcy5tYWtldHJhbnMoYicrLycsIGFsdGNoYXJzKSkKICAgICByZXR1cm4gZW5jb2RlZApAQCAtMTM4LDUzICsxMzcsMzkgQEAKIAogCiAjIEJhc2UzMiBlbmNvZGluZy9kZWNvZGluZyBtdXN0IGJlIGRvbmUgaW4gUHl0aG9uCi1fYjMyYWxwaGFiZXQgPSB7Ci0gICAgMDogYidBJywgIDk6IGInSicsIDE4OiBiJ1MnLCAyNzogYiczJywKLSAgICAxOiBiJ0InLCAxMDogYidLJywgMTk6IGInVCcsIDI4OiBiJzQnLAotICAgIDI6IGInQycsIDExOiBiJ0wnLCAyMDogYidVJywgMjk6IGInNScsCi0gICAgMzogYidEJywgMTI6IGInTScsIDIxOiBiJ1YnLCAzMDogYic2JywKLSAgICA0OiBiJ0UnLCAxMzogYidOJywgMjI6IGInVycsIDMxOiBiJzcnLAotICAgIDU6IGInRicsIDE0OiBiJ08nLCAyMzogYidYJywKLSAgICA2OiBiJ0cnLCAxNTogYidQJywgMjQ6IGInWScsCi0gICAgNzogYidIJywgMTY6IGInUScsIDI1OiBiJ1onLAotICAgIDg6IGInSScsIDE3OiBiJ1InLCAyNjogYicyJywKLSAgICB9Ci0KLV9iMzJ0YWIgPSBbdlswXSBmb3IgaywgdiBpbiBzb3J0ZWQoX2IzMmFscGhhYmV0Lml0ZW1zKCkpXQotX2IzMnJldiA9IGRpY3QoWyh2WzBdLCBrKSBmb3IgaywgdiBpbiBfYjMyYWxwaGFiZXQuaXRlbXMoKV0pCi0KK19iMzJhbHBoYWJldCA9IGInQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoyMzQ1NjcnCitfYjMydGFiMiA9IE5vbmUKK19iMzJyZXYgPSBOb25lCiAKIGRlZiBiMzJlbmNvZGUocyk6CiAgICAgIiIiRW5jb2RlIGEgYnl0ZSBzdHJpbmcgdXNpbmcgQmFzZTMyLgogCiAgICAgcyBpcyB0aGUgYnl0ZSBzdHJpbmcgdG8gZW5jb2RlLiAgVGhlIGVuY29kZWQgYnl0ZSBzdHJpbmcgaXMgcmV0dXJuZWQuCiAgICAgIiIiCisgICAgZ2xvYmFsIF9iMzJ0YWIyCisgICAgIyBEZWxheSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHRhYmxlIHRvIG5vdCB3YXN0ZSBtZW1vcnkKKyAgICAjIGlmIHRoZSBmdW5jdGlvbiBpcyBuZXZlciBjYWxsZWQKKyAgICBpZiBfYjMydGFiMiBpcyBOb25lOgorICAgICAgICBiMzJ0YWIgPSBbYnl0ZXMoKGksKSkgZm9yIGkgaW4gX2IzMmFscGhhYmV0XQorICAgICAgICBfYjMydGFiMiA9IFthICsgYiBmb3IgYSBpbiBiMzJ0YWIgZm9yIGIgaW4gYjMydGFiXQorICAgICAgICBiMzJ0YWIgPSBOb25lCisKICAgICBpZiBub3QgaXNpbnN0YW5jZShzLCBieXRlc190eXBlcyk6Ci0gICAgICAgIHJhaXNlIFR5cGVFcnJvcigiZXhwZWN0ZWQgYnl0ZXMsIG5vdCAlcyIgJSBzLl9fY2xhc3NfXy5fX25hbWVfXykKLSAgICBxdWFudGEsIGxlZnRvdmVyID0gZGl2bW9kKGxlbihzKSwgNSkKKyAgICAgICAgcyA9IG1lbW9yeXZpZXcocykudG9ieXRlcygpCisgICAgbGVmdG92ZXIgPSBsZW4ocykgJSA1CiAgICAgIyBQYWQgdGhlIGxhc3QgcXVhbnR1bSB3aXRoIHplcm8gYml0cyBpZiBuZWNlc3NhcnkKICAgICBpZiBsZWZ0b3ZlcjoKICAgICAgICAgcyA9IHMgKyBieXRlcyg1IC0gbGVmdG92ZXIpICAjIERvbid0IHVzZSArPSAhCi0gICAgICAgIHF1YW50YSArPSAxCiAgICAgZW5jb2RlZCA9IGJ5dGVhcnJheSgpCi0gICAgZm9yIGkgaW4gcmFuZ2UocXVhbnRhKToKLSAgICAgICAgIyBjMSBhbmQgYzIgYXJlIDE2IGJpdHMgd2lkZSwgYzMgaXMgOCBiaXRzIHdpZGUuICBUaGUgaW50ZW50IG9mIHRoaXMKLSAgICAgICAgIyBjb2RlIGlzIHRvIHByb2Nlc3MgdGhlIDQwIGJpdHMgaW4gdW5pdHMgb2YgNSBiaXRzLiAgU28gd2UgdGFrZSB0aGUgMQotICAgICAgICAjIGxlZnRvdmVyIGJpdCBvZiBjMSBhbmQgdGFjayBpdCBvbnRvIGMyLiAgVGhlbiB3ZSB0YWtlIHRoZSAyIGxlZnRvdmVyCi0gICAgICAgICMgYml0cyBvZiBjMiBhbmQgdGFjayB0aGVtIG9udG8gYzMuICBUaGUgc2hpZnRzIGFuZCBtYXNrcyBhcmUgaW50ZW5kZWQKLSAgICAgICAgIyB0byBnaXZlIHVzIHZhbHVlcyBvZiBleGFjdGx5IDUgYml0cyBpbiB3aWR0aC4KLSAgICAgICAgYzEsIGMyLCBjMyA9IHN0cnVjdC51bnBhY2soJyFISEInLCBzW2kqNTooaSsxKSo1XSkKLSAgICAgICAgYzIgKz0gKGMxICYgMSkgPDwgMTYgIyAxNyBiaXRzIHdpZGUKLSAgICAgICAgYzMgKz0gKGMyICYgMykgPDwgOCAgIyAxMCBiaXRzIHdpZGUKLSAgICAgICAgZW5jb2RlZCArPSBieXRlcyhbX2IzMnRhYltjMSA+PiAxMV0sICAgICAgICAgIyBiaXRzIDEgLSA1Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIF9iMzJ0YWJbKGMxID4+IDYpICYgMHgxZl0sICMgYml0cyA2IC0gMTAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgX2IzMnRhYlsoYzEgPj4gMSkgJiAweDFmXSwgIyBiaXRzIDExIC0gMTUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgX2IzMnRhYltjMiA+PiAxMl0sICAgICAgICAgIyBiaXRzIDE2IC0gMjAgKDEgLSA1KQotICAgICAgICAgICAgICAgICAgICAgICAgICBfYjMydGFiWyhjMiA+PiA3KSAmIDB4MWZdLCAjIGJpdHMgMjEgLSAyNSAoNiAtIDEwKQotICAgICAgICAgICAgICAgICAgICAgICAgICBfYjMydGFiWyhjMiA+PiAyKSAmIDB4MWZdLCAjIGJpdHMgMjYgLSAzMCAoMTEgLSAxNSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgX2IzMnRhYltjMyA+PiA1XSwgICAgICAgICAgIyBiaXRzIDMxIC0gMzUgKDEgLSA1KQotICAgICAgICAgICAgICAgICAgICAgICAgICBfYjMydGFiW2MzICYgMHgxZl0sICAgICAgICAjIGJpdHMgMzYgLSA0MCAoMSAtIDUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgIF0pCisgICAgZnJvbV9ieXRlcyA9IGludC5mcm9tX2J5dGVzCisgICAgYjMydGFiMiA9IF9iMzJ0YWIyCisgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKHMpLCA1KToKKyAgICAgICAgYyA9IGZyb21fYnl0ZXMoc1tpOiBpICsgNV0sICdiaWcnKQorICAgICAgICBlbmNvZGVkICs9IChiMzJ0YWIyW2MgPj4gMzBdICsgICAgICAgICAgICMgYml0cyAxIC0gMTAKKyAgICAgICAgICAgICAgICAgICAgYjMydGFiMlsoYyA+PiAyMCkgJiAweDNmZl0gKyAjIGJpdHMgMTEgLSAyMAorICAgICAgICAgICAgICAgICAgICBiMzJ0YWIyWyhjID4+IDEwKSAmIDB4M2ZmXSArICMgYml0cyAyMSAtIDMwCisgICAgICAgICAgICAgICAgICAgIGIzMnRhYjJbYyAmIDB4M2ZmXSAgICAgICAgICAgIyBiaXRzIDMxIC0gNDAKKyAgICAgICAgICAgICAgICAgICApCiAgICAgIyBBZGp1c3QgZm9yIGFueSBsZWZ0b3ZlciBwYXJ0aWFsIHF1YW50YQogICAgIGlmIGxlZnRvdmVyID09IDE6CiAgICAgICAgIGVuY29kZWRbLTY6XSA9IGInPT09PT09JwpAQCAtMTk2LDcgKzE4MSw2IEBACiAgICAgICAgIGVuY29kZWRbLTE6XSA9IGInPScKICAgICByZXR1cm4gYnl0ZXMoZW5jb2RlZCkKIAotCiBkZWYgYjMyZGVjb2RlKHMsIGNhc2Vmb2xkPUZhbHNlLCBtYXAwMT1Ob25lKToKICAgICAiIiJEZWNvZGUgYSBCYXNlMzIgZW5jb2RlZCBieXRlIHN0cmluZy4KIApAQCAtMjE2LDkgKzIwMCwxMyBAQAogICAgIHRoZSBpbnB1dCBpcyBpbmNvcnJlY3RseSBwYWRkZWQgb3IgaWYgdGhlcmUgYXJlIG5vbi1hbHBoYWJldAogICAgIGNoYXJhY3RlcnMgcHJlc2VudCBpbiB0aGUgaW5wdXQuCiAgICAgIiIiCisgICAgZ2xvYmFsIF9iMzJyZXYKKyAgICAjIERlbGF5IHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgdGFibGUgdG8gbm90IHdhc3RlIG1lbW9yeQorICAgICMgaWYgdGhlIGZ1bmN0aW9uIGlzIG5ldmVyIGNhbGxlZAorICAgIGlmIF9iMzJyZXYgaXMgTm9uZToKKyAgICAgICAgX2IzMnJldiA9IHt2OiBrIGZvciBrLCB2IGluIGVudW1lcmF0ZShfYjMyYWxwaGFiZXQpfQogICAgIHMgPSBfYnl0ZXNfZnJvbV9kZWNvZGVfZGF0YShzKQotICAgIHF1YW50YSwgbGVmdG92ZXIgPSBkaXZtb2QobGVuKHMpLCA4KQotICAgIGlmIGxlZnRvdmVyOgorICAgIGlmIGxlbihzKSAlIDg6CiAgICAgICAgIHJhaXNlIGJpbmFzY2lpLkVycm9yKCdJbmNvcnJlY3QgcGFkZGluZycpCiAgICAgIyBIYW5kbGUgc2VjdGlvbiAyLjQgemVybyBhbmQgb25lIG1hcHBpbmcuICBUaGUgZmxhZyBtYXAwMSB3aWxsIGJlIGVpdGhlcgogICAgICMgRmFsc2UsIG9yIHRoZSBjaGFyYWN0ZXIgdG8gbWFwIHRoZSBkaWdpdCAxIChvbmUpIHRvLiAgSXQgc2hvdWxkIGJlCkBAIC0yMzIsNDIgKzIyMCwzNiBAQAogICAgICMgU3RyaXAgb2ZmIHBhZCBjaGFyYWN0ZXJzIGZyb20gdGhlIHJpZ2h0LiAgV2UgbmVlZCB0byBjb3VudCB0aGUgcGFkCiAgICAgIyBjaGFyYWN0ZXJzIGJlY2F1c2UgdGhpcyB3aWxsIHRlbGwgdXMgaG93IG1hbnkgbnVsbCBieXRlcyB0byByZW1vdmUgZnJvbQogICAgICMgdGhlIGVuZCBvZiB0aGUgZGVjb2RlZCBzdHJpbmcuCi0gICAgcGFkY2hhcnMgPSAwCi0gICAgbW8gPSByZS5zZWFyY2goYicoP1A8cGFkPls9XSopJCcsIHMpCi0gICAgaWYgbW86Ci0gICAgICAgIHBhZGNoYXJzID0gbGVuKG1vLmdyb3VwKCdwYWQnKSkKLSAgICAgICAgaWYgcGFkY2hhcnMgPiAwOgotICAgICAgICAgICAgcyA9IHNbOi1wYWRjaGFyc10KKyAgICBsID0gbGVuKHMpCisgICAgcyA9IHMucnN0cmlwKGInPScpCisgICAgcGFkY2hhcnMgPSBsIC0gbGVuKHMpCiAgICAgIyBOb3cgZGVjb2RlIHRoZSBmdWxsIHF1YW50YQotICAgIHBhcnRzID0gW10KLSAgICBhY2MgPSAwCi0gICAgc2hpZnQgPSAzNQotICAgIGZvciBjIGluIHM6Ci0gICAgICAgIHZhbCA9IF9iMzJyZXYuZ2V0KGMpCi0gICAgICAgIGlmIHZhbCBpcyBOb25lOgotICAgICAgICAgICAgcmFpc2UgYmluYXNjaWkuRXJyb3IoJ05vbi1iYXNlMzIgZGlnaXQgZm91bmQnKQotICAgICAgICBhY2MgKz0gX2IzMnJldltjXSA8PCBzaGlmdAotICAgICAgICBzaGlmdCAtPSA1Ci0gICAgICAgIGlmIHNoaWZ0IDwgMDoKLSAgICAgICAgICAgIHBhcnRzLmFwcGVuZChiaW5hc2NpaS51bmhleGxpZnkoYnl0ZXMoJyUwMTB4JyAlIGFjYywgImFzY2lpIikpKQotICAgICAgICAgICAgYWNjID0gMAotICAgICAgICAgICAgc2hpZnQgPSAzNQorICAgIGRlY29kZWQgPSBieXRlYXJyYXkoKQorICAgIGIzMnJldiA9IF9iMzJyZXYKKyAgICBmb3IgaSBpbiByYW5nZSgwLCBsZW4ocyksIDgpOgorICAgICAgICBxdWFudGEgPSBzW2k6IGkgKyA4XQorICAgICAgICBhY2MgPSAwCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZvciBjIGluIHF1YW50YToKKyAgICAgICAgICAgICAgICBhY2MgPSAoYWNjIDw8IDUpICsgYjMycmV2W2NdCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIGJpbmFzY2lpLkVycm9yKCdOb24tYmFzZTMyIGRpZ2l0IGZvdW5kJykgZnJvbSBOb25lCisgICAgICAgIGRlY29kZWQgKz0gYWNjLnRvX2J5dGVzKDUsICdiaWcnKQogICAgICMgUHJvY2VzcyB0aGUgbGFzdCwgcGFydGlhbCBxdWFudGEKLSAgICBsYXN0ID0gYmluYXNjaWkudW5oZXhsaWZ5KGJ5dGVzKCclMDEweCcgJSBhY2MsICJhc2NpaSIpKQotICAgIGlmIHBhZGNoYXJzID09IDA6Ci0gICAgICAgIGxhc3QgPSBiJycgICAgICAgICAgICAgICAgICAgICAgIyBObyBjaGFyYWN0ZXJzCi0gICAgZWxpZiBwYWRjaGFycyA9PSAxOgotICAgICAgICBsYXN0ID0gbGFzdFs6LTFdCi0gICAgZWxpZiBwYWRjaGFycyA9PSAzOgotICAgICAgICBsYXN0ID0gbGFzdFs6LTJdCi0gICAgZWxpZiBwYWRjaGFycyA9PSA0OgotICAgICAgICBsYXN0ID0gbGFzdFs6LTNdCi0gICAgZWxpZiBwYWRjaGFycyA9PSA2OgotICAgICAgICBsYXN0ID0gbGFzdFs6LTRdCi0gICAgZWxzZToKLSAgICAgICAgcmFpc2UgYmluYXNjaWkuRXJyb3IoJ0luY29ycmVjdCBwYWRkaW5nJykKLSAgICBwYXJ0cy5hcHBlbmQobGFzdCkKLSAgICByZXR1cm4gYicnLmpvaW4ocGFydHMpCisgICAgaWYgcGFkY2hhcnM6CisgICAgICAgIGFjYyA8PD0gNSAqIHBhZGNoYXJzCisgICAgICAgIGxhc3QgPSBhY2MudG9fYnl0ZXMoNSwgJ2JpZycpCisgICAgICAgIGlmIHBhZGNoYXJzID09IDE6CisgICAgICAgICAgICBkZWNvZGVkWy01Ol0gPSBsYXN0WzotMV0KKyAgICAgICAgZWxpZiBwYWRjaGFycyA9PSAzOgorICAgICAgICAgICAgZGVjb2RlZFstNTpdID0gbGFzdFs6LTJdCisgICAgICAgIGVsaWYgcGFkY2hhcnMgPT0gNDoKKyAgICAgICAgICAgIGRlY29kZWRbLTU6XSA9IGxhc3RbOi0zXQorICAgICAgICBlbGlmIHBhZGNoYXJzID09IDY6CisgICAgICAgICAgICBkZWNvZGVkWy01Ol0gPSBsYXN0WzotNF0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIGJpbmFzY2lpLkVycm9yKCdJbmNvcnJlY3QgcGFkZGluZycpCisgICAgcmV0dXJuIGJ5dGVzKGRlY29kZWQpCiAKIAogCkBAIC0yNzksOCArMjYxLDYgQEAKIAogICAgIHMgaXMgdGhlIGJ5dGUgc3RyaW5nIHRvIGVuY29kZS4gIFRoZSBlbmNvZGVkIGJ5dGUgc3RyaW5nIGlzIHJldHVybmVkLgogICAgICIiIgotICAgIGlmIG5vdCBpc2luc3RhbmNlKHMsIGJ5dGVzX3R5cGVzKToKLSAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJleHBlY3RlZCBieXRlcywgbm90ICVzIiAlIHMuX19jbGFzc19fLl9fbmFtZV9fKQogICAgIHJldHVybiBiaW5hc2NpaS5oZXhsaWZ5KHMpLnVwcGVyKCkKIAogCkBAIC0zMDIsNyArMjgyLDIwNiBAQAogICAgICAgICByYWlzZSBiaW5hc2NpaS5FcnJvcignTm9uLWJhc2UxNiBkaWdpdCBmb3VuZCcpCiAgICAgcmV0dXJuIGJpbmFzY2lpLnVuaGV4bGlmeShzKQogCisjCisjIEFzY2lpODUgZW5jb2RpbmcvZGVjb2RpbmcKKyMKIAorX2E4NWNoYXJzID0gTm9uZQorX2E4NWNoYXJzMiA9IE5vbmUKK19BODVTVEFSVCA9IGIiPH4iCitfQTg1RU5EID0gYiJ+PiIKKworZGVmIF84NWVuY29kZShiLCBjaGFycywgY2hhcnMyLCBwYWQ9RmFsc2UsIGZvbGRudWxzPUZhbHNlLCBmb2xkc3BhY2VzPUZhbHNlKToKKyAgICAjIEhlbHBlciBmdW5jdGlvbiBmb3IgYTg1ZW5jb2RlIGFuZCBiODVlbmNvZGUKKyAgICBpZiBub3QgaXNpbnN0YW5jZShiLCBieXRlc190eXBlcyk6CisgICAgICAgIGIgPSBtZW1vcnl2aWV3KGIpLnRvYnl0ZXMoKQorCisgICAgcGFkZGluZyA9ICgtbGVuKGIpKSAlIDQKKyAgICBpZiBwYWRkaW5nOgorICAgICAgICBiID0gYiArIGInXDAnICogcGFkZGluZworICAgIHdvcmRzID0gc3RydWN0LlN0cnVjdCgnISVkSScgJSAobGVuKGIpIC8vIDQpKS51bnBhY2soYikKKworICAgIGNodW5rcyA9IFtiJ3onIGlmIGZvbGRudWxzIGFuZCBub3Qgd29yZCBlbHNlCisgICAgICAgICAgICAgIGIneScgaWYgZm9sZHNwYWNlcyBhbmQgd29yZCA9PSAweDIwMjAyMDIwIGVsc2UKKyAgICAgICAgICAgICAgKGNoYXJzMlt3b3JkIC8vIDYxNDEyNV0gKworICAgICAgICAgICAgICAgY2hhcnMyW3dvcmQgLy8gODUgJSA3MjI1XSArCisgICAgICAgICAgICAgICBjaGFyc1t3b3JkICUgODVdKQorICAgICAgICAgICAgICBmb3Igd29yZCBpbiB3b3Jkc10KKworICAgIGlmIHBhZGRpbmcgYW5kIG5vdCBwYWQ6CisgICAgICAgIGlmIGNodW5rc1stMV0gPT0gYid6JzoKKyAgICAgICAgICAgIGNodW5rc1stMV0gPSBjaGFyc1swXSAqIDUKKyAgICAgICAgY2h1bmtzWy0xXSA9IGNodW5rc1stMV1bOi1wYWRkaW5nXQorCisgICAgcmV0dXJuIGInJy5qb2luKGNodW5rcykKKworZGVmIGE4NWVuY29kZShiLCAqLCBmb2xkc3BhY2VzPUZhbHNlLCB3cmFwY29sPTAsIHBhZD1GYWxzZSwgYWRvYmU9RmFsc2UpOgorICAgICIiIkVuY29kZSBhIGJ5dGUgc3RyaW5nIHVzaW5nIEFzY2lpODUuCisKKyAgICBiIGlzIHRoZSBieXRlIHN0cmluZyB0byBlbmNvZGUuIFRoZSBlbmNvZGVkIGJ5dGUgc3RyaW5nIGlzIHJldHVybmVkLgorCisgICAgZm9sZHNwYWNlcyBpcyBhbiBvcHRpb25hbCBmbGFnIHRoYXQgdXNlcyB0aGUgc3BlY2lhbCBzaG9ydCBzZXF1ZW5jZSAneScKKyAgICBpbnN0ZWFkIG9mIDQgY29uc2VjdXRpdmUgc3BhY2VzIChBU0NJSSAweDIwKSBhcyBzdXBwb3J0ZWQgYnkgJ2J0b2EnLiBUaGlzCisgICAgZmVhdHVyZSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSAic3RhbmRhcmQiIEFkb2JlIGVuY29kaW5nLgorCisgICAgd3JhcGNvbCBjb250cm9scyB3aGV0aGVyIHRoZSBvdXRwdXQgc2hvdWxkIGhhdmUgbmV3bGluZSAoJ1xcbicpIGNoYXJhY3RlcnMKKyAgICBhZGRlZCB0byBpdC4gSWYgdGhpcyBpcyBub24temVybywgZWFjaCBvdXRwdXQgbGluZSB3aWxsIGJlIGF0IG1vc3QgdGhpcworICAgIG1hbnkgY2hhcmFjdGVycyBsb25nLgorCisgICAgcGFkIGNvbnRyb2xzIHdoZXRoZXIgdGhlIGlucHV0IHN0cmluZyBpcyBwYWRkZWQgdG8gYSBtdWx0aXBsZSBvZiA0IGJlZm9yZQorICAgIGVuY29kaW5nLiBOb3RlIHRoYXQgdGhlIGJ0b2EgaW1wbGVtZW50YXRpb24gYWx3YXlzIHBhZHMuCisKKyAgICBhZG9iZSBjb250cm9scyB3aGV0aGVyIHRoZSBlbmNvZGVkIGJ5dGUgc2VxdWVuY2UgaXMgZnJhbWVkIHdpdGggPH4gYW5kIH4+LAorICAgIHdoaWNoIGlzIHVzZWQgYnkgdGhlIEFkb2JlIGltcGxlbWVudGF0aW9uLgorICAgICIiIgorICAgIGdsb2JhbCBfYTg1Y2hhcnMsIF9hODVjaGFyczIKKyAgICAjIERlbGF5IHRoZSBpbml0aWFsaXphdGlvbiBvZiB0YWJsZXMgdG8gbm90IHdhc3RlIG1lbW9yeQorICAgICMgaWYgdGhlIGZ1bmN0aW9uIGlzIG5ldmVyIGNhbGxlZAorICAgIGlmIF9hODVjaGFycyBpcyBOb25lOgorICAgICAgICBfYTg1Y2hhcnMgPSBbYnl0ZXMoKGksKSkgZm9yIGkgaW4gcmFuZ2UoMzMsIDExOCldCisgICAgICAgIF9hODVjaGFyczIgPSBbKGEgKyBiKSBmb3IgYSBpbiBfYTg1Y2hhcnMgZm9yIGIgaW4gX2E4NWNoYXJzXQorCisgICAgcmVzdWx0ID0gXzg1ZW5jb2RlKGIsIF9hODVjaGFycywgX2E4NWNoYXJzMiwgcGFkLCBUcnVlLCBmb2xkc3BhY2VzKQorCisgICAgaWYgYWRvYmU6CisgICAgICAgIHJlc3VsdCA9IF9BODVTVEFSVCArIHJlc3VsdAorICAgIGlmIHdyYXBjb2w6CisgICAgICAgIHdyYXBjb2wgPSBtYXgoMiBpZiBhZG9iZSBlbHNlIDEsIHdyYXBjb2wpCisgICAgICAgIGNodW5rcyA9IFtyZXN1bHRbaTogaSArIHdyYXBjb2xdCisgICAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCBsZW4ocmVzdWx0KSwgd3JhcGNvbCldCisgICAgICAgIGlmIGFkb2JlOgorICAgICAgICAgICAgaWYgbGVuKGNodW5rc1stMV0pICsgMiA+IHdyYXBjb2w6CisgICAgICAgICAgICAgICAgY2h1bmtzLmFwcGVuZChiJycpCisgICAgICAgIHJlc3VsdCA9IGInXG4nLmpvaW4oY2h1bmtzKQorICAgIGlmIGFkb2JlOgorICAgICAgICByZXN1bHQgKz0gX0E4NUVORAorCisgICAgcmV0dXJuIHJlc3VsdAorCitkZWYgYTg1ZGVjb2RlKGIsICosIGZvbGRzcGFjZXM9RmFsc2UsIGFkb2JlPUZhbHNlLCBpZ25vcmVjaGFycz1iJyBcdFxuXHJcdicpOgorICAgICIiIkRlY29kZSBhbiBBc2NpaTg1IGVuY29kZWQgYnl0ZSBzdHJpbmcuCisKKyAgICBzIGlzIHRoZSBieXRlIHN0cmluZyB0byBkZWNvZGUuCisKKyAgICBmb2xkc3BhY2VzIGlzIGEgZmxhZyB0aGF0IHNwZWNpZmllcyB3aGV0aGVyIHRoZSAneScgc2hvcnQgc2VxdWVuY2Ugc2hvdWxkIGJlCisgICAgYWNjZXB0ZWQgYXMgc2hvcnRoYW5kIGZvciA0IGNvbnNlY3V0aXZlIHNwYWNlcyAoQVNDSUkgMHgyMCkuIFRoaXMgZmVhdHVyZSBpcworICAgIG5vdCBzdXBwb3J0ZWQgYnkgdGhlICJzdGFuZGFyZCIgQWRvYmUgZW5jb2RpbmcuCisKKyAgICBhZG9iZSBjb250cm9scyB3aGV0aGVyIHRoZSBpbnB1dCBzZXF1ZW5jZSBpcyBpbiBBZG9iZSBBc2NpaTg1IGZvcm1hdCAoaS5lLgorICAgIGlzIGZyYW1lZCB3aXRoIDx+IGFuZCB+PikuCisKKyAgICBpZ25vcmVjaGFycyBzaG91bGQgYmUgYSBieXRlIHN0cmluZyBjb250YWluaW5nIGNoYXJhY3RlcnMgdG8gaWdub3JlIGZyb20gdGhlCisgICAgaW5wdXQuIFRoaXMgc2hvdWxkIG9ubHkgY29udGFpbiB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMsIGFuZCBieSBkZWZhdWx0CisgICAgY29udGFpbnMgYWxsIHdoaXRlc3BhY2UgY2hhcmFjdGVycyBpbiBBU0NJSS4KKyAgICAiIiIKKyAgICBiID0gX2J5dGVzX2Zyb21fZGVjb2RlX2RhdGEoYikKKyAgICBpZiBhZG9iZToKKyAgICAgICAgaWYgbm90IChiLnN0YXJ0c3dpdGgoX0E4NVNUQVJUKSBhbmQgYi5lbmRzd2l0aChfQTg1RU5EKSk6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJBc2NpaTg1IGVuY29kZWQgYnl0ZSBzZXF1ZW5jZXMgbXVzdCBiZSBicmFja2V0ZWQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYnkgeyFyfSBhbmQgeyFyfSIuZm9ybWF0KF9BODVTVEFSVCwgX0E4NUVORCkpCisgICAgICAgIGIgPSBiWzI6LTJdICMgU3RyaXAgb2ZmIHN0YXJ0L2VuZCBtYXJrZXJzCisgICAgIworICAgICMgV2UgaGF2ZSB0byBnbyB0aHJvdWdoIHRoaXMgc3RlcHdpc2UsIHNvIGFzIHRvIGlnbm9yZSBzcGFjZXMgYW5kIGhhbmRsZQorICAgICMgc3BlY2lhbCBzaG9ydCBzZXF1ZW5jZXMKKyAgICAjCisgICAgcGFja0kgPSBzdHJ1Y3QuU3RydWN0KCchSScpLnBhY2sKKyAgICBkZWNvZGVkID0gW10KKyAgICBkZWNvZGVkX2FwcGVuZCA9IGRlY29kZWQuYXBwZW5kCisgICAgY3VyciA9IFtdCisgICAgY3Vycl9hcHBlbmQgPSBjdXJyLmFwcGVuZAorICAgIGN1cnJfY2xlYXIgPSBjdXJyLmNsZWFyCisgICAgZm9yIHggaW4gYiArIGIndScgKiA0OgorICAgICAgICBpZiBiJyEnWzBdIDw9IHggPD0gYid1J1swXToKKyAgICAgICAgICAgIGN1cnJfYXBwZW5kKHgpCisgICAgICAgICAgICBpZiBsZW4oY3VycikgPT0gNToKKyAgICAgICAgICAgICAgICBhY2MgPSAwCisgICAgICAgICAgICAgICAgZm9yIHggaW4gY3VycjoKKyAgICAgICAgICAgICAgICAgICAgYWNjID0gODUgKiBhY2MgKyAoeCAtIDMzKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgZGVjb2RlZF9hcHBlbmQocGFja0koYWNjKSkKKyAgICAgICAgICAgICAgICBleGNlcHQgc3RydWN0LmVycm9yOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdBc2NpaTg1IG92ZXJmbG93JykgZnJvbSBOb25lCisgICAgICAgICAgICAgICAgY3Vycl9jbGVhcigpCisgICAgICAgIGVsaWYgeCA9PSBiJ3onWzBdOgorICAgICAgICAgICAgaWYgY3VycjoKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCd6IGluc2lkZSBBc2NpaTg1IDUtdHVwbGUnKQorICAgICAgICAgICAgZGVjb2RlZF9hcHBlbmQoYidcMFwwXDBcMCcpCisgICAgICAgIGVsaWYgZm9sZHNwYWNlcyBhbmQgeCA9PSBiJ3knWzBdOgorICAgICAgICAgICAgaWYgY3VycjoKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCd5IGluc2lkZSBBc2NpaTg1IDUtdHVwbGUnKQorICAgICAgICAgICAgZGVjb2RlZF9hcHBlbmQoYidceDIwXHgyMFx4MjBceDIwJykKKyAgICAgICAgZWxpZiB4IGluIGlnbm9yZWNoYXJzOgorICAgICAgICAgICAgIyBTa2lwIHdoaXRlc3BhY2UKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdOb24tQXNjaWk4NSBkaWdpdCBmb3VuZDogJWMnICUgeCkKKworICAgIHJlc3VsdCA9IGInJy5qb2luKGRlY29kZWQpCisgICAgcGFkZGluZyA9IDQgLSBsZW4oY3VycikKKyAgICBpZiBwYWRkaW5nOgorICAgICAgICAjIFRocm93IGF3YXkgdGhlIGV4dHJhIHBhZGRpbmcKKyAgICAgICAgcmVzdWx0ID0gcmVzdWx0WzotcGFkZGluZ10KKyAgICByZXR1cm4gcmVzdWx0CisKKyMgVGhlIGZvbGxvd2luZyBjb2RlIGlzIG9yaWdpbmFsbHkgdGFrZW4gKHdpdGggcGVybWlzc2lvbikgZnJvbSBNZXJjdXJpYWwKKworX2I4NWFscGhhYmV0ID0gKGIiMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIgorICAgICAgICAgICAgICAgIGIiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXohIyQlJigpKistOzw9Pj9AXl9ge3x9fiIpCitfYjg1Y2hhcnMgPSBOb25lCitfYjg1Y2hhcnMyID0gTm9uZQorX2I4NWRlYyA9IE5vbmUKKworZGVmIGI4NWVuY29kZShiLCBwYWQ9RmFsc2UpOgorICAgICIiIkVuY29kZSBhbiBBU0NJSS1lbmNvZGVkIGJ5dGUgYXJyYXkgaW4gYmFzZTg1IGZvcm1hdC4KKworICAgIElmIHBhZCBpcyB0cnVlLCB0aGUgaW5wdXQgaXMgcGFkZGVkIHdpdGggIlxcMCIgc28gaXRzIGxlbmd0aCBpcyBhIG11bHRpcGxlIG9mCisgICAgNCBjaGFyYWN0ZXJzIGJlZm9yZSBlbmNvZGluZy4KKyAgICAiIiIKKyAgICBnbG9iYWwgX2I4NWNoYXJzLCBfYjg1Y2hhcnMyCisgICAgIyBEZWxheSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGFibGVzIHRvIG5vdCB3YXN0ZSBtZW1vcnkKKyAgICAjIGlmIHRoZSBmdW5jdGlvbiBpcyBuZXZlciBjYWxsZWQKKyAgICBpZiBfYjg1Y2hhcnMgaXMgTm9uZToKKyAgICAgICAgX2I4NWNoYXJzID0gW2J5dGVzKChpLCkpIGZvciBpIGluIF9iODVhbHBoYWJldF0KKyAgICAgICAgX2I4NWNoYXJzMiA9IFsoYSArIGIpIGZvciBhIGluIF9iODVjaGFycyBmb3IgYiBpbiBfYjg1Y2hhcnNdCisgICAgcmV0dXJuIF84NWVuY29kZShiLCBfYjg1Y2hhcnMsIF9iODVjaGFyczIsIHBhZCkKKworZGVmIGI4NWRlY29kZShiKToKKyAgICAiIiJEZWNvZGUgYmFzZTg1LWVuY29kZWQgYnl0ZSBhcnJheSIiIgorICAgIGdsb2JhbCBfYjg1ZGVjCisgICAgIyBEZWxheSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGFibGVzIHRvIG5vdCB3YXN0ZSBtZW1vcnkKKyAgICAjIGlmIHRoZSBmdW5jdGlvbiBpcyBuZXZlciBjYWxsZWQKKyAgICBpZiBfYjg1ZGVjIGlzIE5vbmU6CisgICAgICAgIF9iODVkZWMgPSBbTm9uZV0gKiAyNTYKKyAgICAgICAgZm9yIGksIGMgaW4gZW51bWVyYXRlKF9iODVhbHBoYWJldCk6CisgICAgICAgICAgICBfYjg1ZGVjW2NdID0gaQorCisgICAgYiA9IF9ieXRlc19mcm9tX2RlY29kZV9kYXRhKGIpCisgICAgcGFkZGluZyA9ICgtbGVuKGIpKSAlIDUKKyAgICBiID0gYiArIGInficgKiBwYWRkaW5nCisgICAgb3V0ID0gW10KKyAgICBwYWNrSSA9IHN0cnVjdC5TdHJ1Y3QoJyFJJykucGFjaworICAgIGZvciBpIGluIHJhbmdlKDAsIGxlbihiKSwgNSk6CisgICAgICAgIGNodW5rID0gYltpOmkgKyA1XQorICAgICAgICBhY2MgPSAwCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZvciBjIGluIGNodW5rOgorICAgICAgICAgICAgICAgIGFjYyA9IGFjYyAqIDg1ICsgX2I4NWRlY1tjXQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgZm9yIGosIGMgaW4gZW51bWVyYXRlKGNodW5rKToKKyAgICAgICAgICAgICAgICBpZiBfYjg1ZGVjW2NdIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ2JhZCBiYXNlODUgY2hhcmFjdGVyIGF0IHBvc2l0aW9uICVkJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoaSArIGopKSBmcm9tIE5vbmUKKyAgICAgICAgICAgIHJhaXNlCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG91dC5hcHBlbmQocGFja0koYWNjKSkKKyAgICAgICAgZXhjZXB0IHN0cnVjdC5lcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ2Jhc2U4NSBvdmVyZmxvdyBpbiBodW5rIHN0YXJ0aW5nIGF0IGJ5dGUgJWQnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgaSkgZnJvbSBOb25lCisKKyAgICByZXN1bHQgPSBiJycuam9pbihvdXQpCisgICAgaWYgcGFkZGluZzoKKyAgICAgICAgcmVzdWx0ID0gcmVzdWx0WzotcGFkZGluZ10KKyAgICByZXR1cm4gcmVzdWx0CiAKICMgTGVnYWN5IGludGVyZmFjZS4gIFRoaXMgY29kZSBjb3VsZCBiZSBjbGVhbmVkIHVwIHNpbmNlIEkgZG9uJ3QgYmVsaWV2ZQogIyBiaW5hc2NpaSBoYXMgYW55IGxpbmUgbGVuZ3RoIGxpbWl0YXRpb25zLiAgSXQganVzdCBkb2Vzbid0IHNlZW0gd29ydGggaXQKQEAgLTMzNSwxMiArNTE0LDI2IEBACiAgICAgICAgIHMgPSBiaW5hc2NpaS5hMmJfYmFzZTY0KGxpbmUpCiAgICAgICAgIG91dHB1dC53cml0ZShzKQogCitkZWYgX2lucHV0X3R5cGVfY2hlY2socyk6CisgICAgdHJ5OgorICAgICAgICBtID0gbWVtb3J5dmlldyhzKQorICAgIGV4Y2VwdCBUeXBlRXJyb3IgYXMgZXJyOgorICAgICAgICBtc2cgPSAiZXhwZWN0ZWQgYnl0ZXMtbGlrZSBvYmplY3QsIG5vdCAlcyIgJSBzLl9fY2xhc3NfXy5fX25hbWVfXworICAgICAgICByYWlzZSBUeXBlRXJyb3IobXNnKSBmcm9tIGVycgorICAgIGlmIG0uZm9ybWF0IG5vdCBpbiAoJ2MnLCAnYicsICdCJyk6CisgICAgICAgIG1zZyA9ICgiZXhwZWN0ZWQgc2luZ2xlIGJ5dGUgZWxlbWVudHMsIG5vdCAlciBmcm9tICVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobS5mb3JtYXQsIHMuX19jbGFzc19fLl9fbmFtZV9fKSkKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKG1zZykKKyAgICBpZiBtLm5kaW0gIT0gMToKKyAgICAgICAgbXNnID0gKCJleHBlY3RlZCAxLUQgZGF0YSwgbm90ICVkLUQgZGF0YSBmcm9tICVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobS5uZGltLCBzLl9fY2xhc3NfXy5fX25hbWVfXykpCisgICAgICAgIHJhaXNlIFR5cGVFcnJvcihtc2cpCisKIAogZGVmIGVuY29kZWJ5dGVzKHMpOgogICAgICIiIkVuY29kZSBhIGJ5dGVzdHJpbmcgaW50byBhIGJ5dGVzdHJpbmcgY29udGFpbmluZyBtdWx0aXBsZSBsaW5lcwogICAgIG9mIGJhc2UtNjQgZGF0YS4iIiIKLSAgICBpZiBub3QgaXNpbnN0YW5jZShzLCBieXRlc190eXBlcyk6Ci0gICAgICAgIHJhaXNlIFR5cGVFcnJvcigiZXhwZWN0ZWQgYnl0ZXMsIG5vdCAlcyIgJSBzLl9fY2xhc3NfXy5fX25hbWVfXykKKyAgICBfaW5wdXRfdHlwZV9jaGVjayhzKQogICAgIHBpZWNlcyA9IFtdCiAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKHMpLCBNQVhCSU5TSVpFKToKICAgICAgICAgY2h1bmsgPSBzW2kgOiBpICsgTUFYQklOU0laRV0KQEAgLTM1Nyw4ICs1NTAsNyBAQAogCiBkZWYgZGVjb2RlYnl0ZXMocyk6CiAgICAgIiIiRGVjb2RlIGEgYnl0ZXN0cmluZyBvZiBiYXNlLTY0IGRhdGEgaW50byBhIGJ5dGVzdHJpbmcuIiIiCi0gICAgaWYgbm90IGlzaW5zdGFuY2UocywgYnl0ZXNfdHlwZXMpOgotICAgICAgICByYWlzZSBUeXBlRXJyb3IoImV4cGVjdGVkIGJ5dGVzLCBub3QgJXMiICUgcy5fX2NsYXNzX18uX19uYW1lX18pCisgICAgX2lucHV0X3R5cGVfY2hlY2socykKICAgICByZXR1cm4gYmluYXNjaWkuYTJiX2Jhc2U2NChzKQogCiBkZWYgZGVjb2Rlc3RyaW5nKHMpOgpkaWZmIC0tZ2l0IGEvTGliL2JkYi5weSBiL0xpYi9iZGIucHkKaW5kZXggZGQxZjQyOC4uNjdhMDg0NiAxMDA2NDQKLS0tIGEvTGliL2JkYi5weQorKysgYi9MaWIvYmRiLnB5CkBAIC0zLDYgKzMsNyBAQAogaW1wb3J0IGZubWF0Y2gKIGltcG9ydCBzeXMKIGltcG9ydCBvcworZnJvbSBpbnNwZWN0IGltcG9ydCBDT19HRU5FUkFUT1IKIAogX19hbGxfXyA9IFsiQmRiUXVpdCIsICJCZGIiLCAiQnJlYWtwb2ludCJdCiAKQEAgLTc1LDI0ICs3Niw0OCBAQAogICAgICAgICBpZiBub3QgKHNlbGYuc3RvcF9oZXJlKGZyYW1lKSBvciBzZWxmLmJyZWFrX2FueXdoZXJlKGZyYW1lKSk6CiAgICAgICAgICAgICAjIE5vIG5lZWQgdG8gdHJhY2UgdGhpcyBmdW5jdGlvbgogICAgICAgICAgICAgcmV0dXJuICMgTm9uZQorICAgICAgICAjIElnbm9yZSBjYWxsIGV2ZW50cyBpbiBnZW5lcmF0b3IgZXhjZXB0IHdoZW4gc3RlcHBpbmcuCisgICAgICAgIGlmIHNlbGYuc3RvcGZyYW1lIGFuZCBmcmFtZS5mX2NvZGUuY29fZmxhZ3MgJiBDT19HRU5FUkFUT1I6CisgICAgICAgICAgICByZXR1cm4gc2VsZi50cmFjZV9kaXNwYXRjaAogICAgICAgICBzZWxmLnVzZXJfY2FsbChmcmFtZSwgYXJnKQogICAgICAgICBpZiBzZWxmLnF1aXR0aW5nOiByYWlzZSBCZGJRdWl0CiAgICAgICAgIHJldHVybiBzZWxmLnRyYWNlX2Rpc3BhdGNoCiAKICAgICBkZWYgZGlzcGF0Y2hfcmV0dXJuKHNlbGYsIGZyYW1lLCBhcmcpOgogICAgICAgICBpZiBzZWxmLnN0b3BfaGVyZShmcmFtZSkgb3IgZnJhbWUgPT0gc2VsZi5yZXR1cm5mcmFtZToKKyAgICAgICAgICAgICMgSWdub3JlIHJldHVybiBldmVudHMgaW4gZ2VuZXJhdG9yIGV4Y2VwdCB3aGVuIHN0ZXBwaW5nLgorICAgICAgICAgICAgaWYgc2VsZi5zdG9wZnJhbWUgYW5kIGZyYW1lLmZfY29kZS5jb19mbGFncyAmIENPX0dFTkVSQVRPUjoKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi50cmFjZV9kaXNwYXRjaAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHNlbGYuZnJhbWVfcmV0dXJuaW5nID0gZnJhbWUKICAgICAgICAgICAgICAgICBzZWxmLnVzZXJfcmV0dXJuKGZyYW1lLCBhcmcpCiAgICAgICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgICAgIHNlbGYuZnJhbWVfcmV0dXJuaW5nID0gTm9uZQogICAgICAgICAgICAgaWYgc2VsZi5xdWl0dGluZzogcmFpc2UgQmRiUXVpdAorICAgICAgICAgICAgIyBUaGUgdXNlciBpc3N1ZWQgYSAnbmV4dCcgb3IgJ3VudGlsJyBjb21tYW5kLgorICAgICAgICAgICAgaWYgc2VsZi5zdG9wZnJhbWUgaXMgZnJhbWUgYW5kIHNlbGYuc3RvcGxpbmVubyAhPSAtMToKKyAgICAgICAgICAgICAgICBzZWxmLl9zZXRfc3RvcGluZm8oTm9uZSwgTm9uZSkKICAgICAgICAgcmV0dXJuIHNlbGYudHJhY2VfZGlzcGF0Y2gKIAogICAgIGRlZiBkaXNwYXRjaF9leGNlcHRpb24oc2VsZiwgZnJhbWUsIGFyZyk6CiAgICAgICAgIGlmIHNlbGYuc3RvcF9oZXJlKGZyYW1lKToKKyAgICAgICAgICAgICMgV2hlbiBzdGVwcGluZyB3aXRoIG5leHQvdW50aWwvcmV0dXJuIGluIGEgZ2VuZXJhdG9yIGZyYW1lLCBza2lwCisgICAgICAgICAgICAjIHRoZSBpbnRlcm5hbCBTdG9wSXRlcmF0aW9uIGV4Y2VwdGlvbiAod2l0aCBubyB0cmFjZWJhY2spCisgICAgICAgICAgICAjIHRyaWdnZXJlZCBieSBhIHN1Yml0ZXJhdG9yIHJ1biB3aXRoIHRoZSAneWllbGQgZnJvbScgc3RhdGVtZW50LgorICAgICAgICAgICAgaWYgbm90IChmcmFtZS5mX2NvZGUuY29fZmxhZ3MgJiBDT19HRU5FUkFUT1IKKyAgICAgICAgICAgICAgICAgICAgYW5kIGFyZ1swXSBpcyBTdG9wSXRlcmF0aW9uIGFuZCBhcmdbMl0gaXMgTm9uZSk6CisgICAgICAgICAgICAgICAgc2VsZi51c2VyX2V4Y2VwdGlvbihmcmFtZSwgYXJnKQorICAgICAgICAgICAgICAgIGlmIHNlbGYucXVpdHRpbmc6IHJhaXNlIEJkYlF1aXQKKyAgICAgICAgIyBTdG9wIGF0IHRoZSBTdG9wSXRlcmF0aW9uIG9yIEdlbmVyYXRvckV4aXQgZXhjZXB0aW9uIHdoZW4gdGhlIHVzZXIKKyAgICAgICAgIyBoYXMgc2V0IHN0b3BmcmFtZSBpbiBhIGdlbmVyYXRvciBieSBpc3N1aW5nIGEgcmV0dXJuIGNvbW1hbmQsIG9yIGEKKyAgICAgICAgIyBuZXh0L3VudGlsIGNvbW1hbmQgYXQgdGhlIGxhc3Qgc3RhdGVtZW50IGluIHRoZSBnZW5lcmF0b3IgYmVmb3JlIHRoZQorICAgICAgICAjIGV4Y2VwdGlvbi4KKyAgICAgICAgZWxpZiAoc2VsZi5zdG9wZnJhbWUgYW5kIGZyYW1lIGlzIG5vdCBzZWxmLnN0b3BmcmFtZQorICAgICAgICAgICAgICAgIGFuZCBzZWxmLnN0b3BmcmFtZS5mX2NvZGUuY29fZmxhZ3MgJiBDT19HRU5FUkFUT1IKKyAgICAgICAgICAgICAgICBhbmQgYXJnWzBdIGluIChTdG9wSXRlcmF0aW9uLCBHZW5lcmF0b3JFeGl0KSk6CiAgICAgICAgICAgICBzZWxmLnVzZXJfZXhjZXB0aW9uKGZyYW1lLCBhcmcpCiAgICAgICAgICAgICBpZiBzZWxmLnF1aXR0aW5nOiByYWlzZSBCZGJRdWl0CisKICAgICAgICAgcmV0dXJuIHNlbGYudHJhY2VfZGlzcGF0Y2gKIAogICAgICMgTm9ybWFsbHkgZGVyaXZlZCBjbGFzc2VzIGRvbid0IG92ZXJyaWRlIHRoZSBmb2xsb3dpbmcKQEAgLTExNSwxMCArMTQwLDggQEAKICAgICAgICAgICAgIGlmIHNlbGYuc3RvcGxpbmVubyA9PSAtMToKICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgICAgIHJldHVybiBmcmFtZS5mX2xpbmVubyA+PSBzZWxmLnN0b3BsaW5lbm8KLSAgICAgICAgd2hpbGUgZnJhbWUgaXMgbm90IE5vbmUgYW5kIGZyYW1lIGlzIG5vdCBzZWxmLnN0b3BmcmFtZToKLSAgICAgICAgICAgIGlmIGZyYW1lIGlzIHNlbGYuYm90ZnJhbWU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKLSAgICAgICAgICAgIGZyYW1lID0gZnJhbWUuZl9iYWNrCisgICAgICAgIGlmIG5vdCBzZWxmLnN0b3BmcmFtZToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCiAgICAgICAgIHJldHVybiBGYWxzZQogCiAgICAgZGVmIGJyZWFrX2hlcmUoc2VsZiwgZnJhbWUpOgpAQCAtMjA3LDcgKzIzMCwxMCBAQAogCiAgICAgZGVmIHNldF9yZXR1cm4oc2VsZiwgZnJhbWUpOgogICAgICAgICAiIiJTdG9wIHdoZW4gcmV0dXJuaW5nIGZyb20gdGhlIGdpdmVuIGZyYW1lLiIiIgotICAgICAgICBzZWxmLl9zZXRfc3RvcGluZm8oZnJhbWUuZl9iYWNrLCBmcmFtZSkKKyAgICAgICAgaWYgZnJhbWUuZl9jb2RlLmNvX2ZsYWdzICYgQ09fR0VORVJBVE9SOgorICAgICAgICAgICAgc2VsZi5fc2V0X3N0b3BpbmZvKGZyYW1lLCBOb25lLCAtMSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX3NldF9zdG9waW5mbyhmcmFtZS5mX2JhY2ssIGZyYW1lKQogCiAgICAgZGVmIHNldF90cmFjZShzZWxmLCBmcmFtZT1Ob25lKToKICAgICAgICAgIiIiU3RhcnQgZGVidWdnaW5nIGZyb20gYGZyYW1lYC4KZGlmZiAtLWdpdCBhL0xpYi9iaW5oZXgucHkgYi9MaWIvYmluaGV4LnB5CmluZGV4IDdiZjkyNzguLjgyNzJkNWMgMTAwNjQ0Ci0tLSBhL0xpYi9iaW5oZXgucHkKKysrIGIvTGliL2JpbmhleC5weQpAQCAtMzIsNyArMzIsOCBAQAogICAgIHBhc3MKIAogIyBTdGF0ZXMgKHdoYXQgaGF2ZSB3ZSB3cml0dGVuKQotW19ESURfSEVBREVSLCBfRElEX0RBVEEsIF9ESURfUlNSQ10gPSByYW5nZSgzKQorX0RJRF9IRUFERVIgPSAwCitfRElEX0RBVEEgPSAxCiAKICMgVmFyaW91cyBjb25zdGFudHMKIFJFQVNPTkFCTFlfTEFSR0UgPSAzMjc2OCAgIyBNaW5pbWFsIGFtb3VudCB3ZSBwYXNzIHRoZSBybGUtY29kZXIKQEAgLTIxMywxNiArMjE0LDIxIEBACiAgICAgICAgIHNlbGYuX3dyaXRlKGRhdGEpCiAKICAgICBkZWYgY2xvc2Uoc2VsZik6Ci0gICAgICAgIGlmIHNlbGYuc3RhdGUgPCBfRElEX0RBVEE6Ci0gICAgICAgICAgICBzZWxmLmNsb3NlX2RhdGEoKQotICAgICAgICBpZiBzZWxmLnN0YXRlICE9IF9ESURfREFUQToKLSAgICAgICAgICAgIHJhaXNlIEVycm9yKCdDbG9zZSBhdCB0aGUgd3JvbmcgdGltZScpCi0gICAgICAgIGlmIHNlbGYucmxlbiAhPSAwOgotICAgICAgICAgICAgcmFpc2UgRXJyb3IoIkluY29ycmVjdCByZXNvdXJjZS1kYXRhc2l6ZSwgZGlmZj0lciIgJSAoc2VsZi5ybGVuLCkpCi0gICAgICAgIHNlbGYuX3dyaXRlY3JjKCkKLSAgICAgICAgc2VsZi5vZnAuY2xvc2UoKQotICAgICAgICBzZWxmLnN0YXRlID0gTm9uZQotICAgICAgICBkZWwgc2VsZi5vZnAKKyAgICAgICAgaWYgc2VsZi5zdGF0ZSBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIHNlbGYuc3RhdGUgPCBfRElEX0RBVEE6CisgICAgICAgICAgICAgICAgc2VsZi5jbG9zZV9kYXRhKCkKKyAgICAgICAgICAgIGlmIHNlbGYuc3RhdGUgIT0gX0RJRF9EQVRBOgorICAgICAgICAgICAgICAgIHJhaXNlIEVycm9yKCdDbG9zZSBhdCB0aGUgd3JvbmcgdGltZScpCisgICAgICAgICAgICBpZiBzZWxmLnJsZW4gIT0gMDoKKyAgICAgICAgICAgICAgICByYWlzZSBFcnJvcigiSW5jb3JyZWN0IHJlc291cmNlLWRhdGFzaXplLCBkaWZmPSVyIiAlIChzZWxmLnJsZW4sKSkKKyAgICAgICAgICAgIHNlbGYuX3dyaXRlY3JjKCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYuc3RhdGUgPSBOb25lCisgICAgICAgICAgICBvZnAgPSBzZWxmLm9mcAorICAgICAgICAgICAgZGVsIHNlbGYub2ZwCisgICAgICAgICAgICBvZnAuY2xvc2UoKQogCiBkZWYgYmluaGV4KGlucCwgb3V0KToKICAgICAiIiJiaW5oZXgoaW5maWxlbmFtZSwgb3V0ZmlsZW5hbWUpOiBjcmVhdGUgYmluaGV4LWVuY29kZWQgY29weSBvZiBhIGZpbGUiIiIKQEAgLTQzNiwxMSArNDQyLDE1IEBACiAgICAgICAgIHJldHVybiBzZWxmLl9yZWFkKG4pCiAKICAgICBkZWYgY2xvc2Uoc2VsZik6Ci0gICAgICAgIGlmIHNlbGYucmxlbjoKLSAgICAgICAgICAgIGR1bW15ID0gc2VsZi5yZWFkX3JzcmMoc2VsZi5ybGVuKQotICAgICAgICBzZWxmLl9jaGVja2NyYygpCi0gICAgICAgIHNlbGYuc3RhdGUgPSBfRElEX1JTUkMKLSAgICAgICAgc2VsZi5pZnAuY2xvc2UoKQorICAgICAgICBpZiBzZWxmLnN0YXRlIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgc2VsZi5ybGVuOgorICAgICAgICAgICAgICAgIGR1bW15ID0gc2VsZi5yZWFkX3JzcmMoc2VsZi5ybGVuKQorICAgICAgICAgICAgc2VsZi5fY2hlY2tjcmMoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5zdGF0ZSA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYuaWZwLmNsb3NlKCkKIAogZGVmIGhleGJpbihpbnAsIG91dCk6CiAgICAgIiIiaGV4YmluKGluZmlsZW5hbWUsIG91dGZpbGVuYW1lKSAtIERlY29kZSBiaW5oZXhlZCBmaWxlIiIiCmRpZmYgLS1naXQgYS9MaWIvYnoyLnB5IGIvTGliL2J6Mi5weQppbmRleCAxZGU4ZjNjLi42YzVhNjBkIDEwMDY0NAotLS0gYS9MaWIvYnoyLnB5CisrKyBiL0xpYi9iejIucHkKQEAgLTksNyArOSw3IEBACiAKIF9fYXV0aG9yX18gPSAiTmFkZWVtIFZhd2RhIDxuYWRlZW0udmF3ZGFAZ21haWwuY29tPiIKIAotaW1wb3J0IGJ1aWx0aW5zCitmcm9tIGJ1aWx0aW5zIGltcG9ydCBvcGVuIGFzIF9idWlsdGluX29wZW4KIGltcG9ydCBpbwogaW1wb3J0IHdhcm5pbmdzCiAKQEAgLTQzLDE2ICs0MywxNyBAQAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlbmFtZSwgbW9kZT0iciIsIGJ1ZmZlcmluZz1Ob25lLCBjb21wcmVzc2xldmVsPTkpOgogICAgICAgICAiIiJPcGVuIGEgYnppcDItY29tcHJlc3NlZCBmaWxlLgogCi0gICAgICAgIElmIGZpbGVuYW1lIGlzIGEgc3RyIG9yIGJ5dGVzIG9iamVjdCwgaXMgZ2l2ZXMgdGhlIG5hbWUgb2YgdGhlIGZpbGUgdG8KLSAgICAgICAgYmUgb3BlbmVkLiBPdGhlcndpc2UsIGl0IHNob3VsZCBiZSBhIGZpbGUgb2JqZWN0LCB3aGljaCB3aWxsIGJlIHVzZWQgdG8KLSAgICAgICAgcmVhZCBvciB3cml0ZSB0aGUgY29tcHJlc3NlZCBkYXRhLgorICAgICAgICBJZiBmaWxlbmFtZSBpcyBhIHN0ciBvciBieXRlcyBvYmplY3QsIGl0IGdpdmVzIHRoZSBuYW1lCisgICAgICAgIG9mIHRoZSBmaWxlIHRvIGJlIG9wZW5lZC4gT3RoZXJ3aXNlLCBpdCBzaG91bGQgYmUgYSBmaWxlIG9iamVjdCwKKyAgICAgICAgd2hpY2ggd2lsbCBiZSB1c2VkIHRvIHJlYWQgb3Igd3JpdGUgdGhlIGNvbXByZXNzZWQgZGF0YS4KIAotICAgICAgICBtb2RlIGNhbiBiZSAncicgZm9yIHJlYWRpbmcgKGRlZmF1bHQpLCAndycgZm9yIChvdmVyKXdyaXRpbmcsIG9yICdhJyBmb3IKLSAgICAgICAgYXBwZW5kaW5nLiBUaGVzZSBjYW4gZXF1aXZhbGVudGx5IGJlIGdpdmVuIGFzICdyYicsICd3YicsIGFuZCAnYWInLgorICAgICAgICBtb2RlIGNhbiBiZSAncicgZm9yIHJlYWRpbmcgKGRlZmF1bHQpLCAndycgZm9yIChvdmVyKXdyaXRpbmcsCisgICAgICAgICd4JyBmb3IgY3JlYXRpbmcgZXhjbHVzaXZlbHksIG9yICdhJyBmb3IgYXBwZW5kaW5nLiBUaGVzZSBjYW4KKyAgICAgICAgZXF1aXZhbGVudGx5IGJlIGdpdmVuIGFzICdyYicsICd3YicsICd4YicsIGFuZCAnYWInLgogCiAgICAgICAgIGJ1ZmZlcmluZyBpcyBpZ25vcmVkLiBJdHMgdXNlIGlzIGRlcHJlY2F0ZWQuCiAKLSAgICAgICAgSWYgbW9kZSBpcyAndycgb3IgJ2EnLCBjb21wcmVzc2xldmVsIGNhbiBiZSBhIG51bWJlciBiZXR3ZWVuIDEKKyAgICAgICAgSWYgbW9kZSBpcyAndycsICd4JyBvciAnYScsIGNvbXByZXNzbGV2ZWwgY2FuIGJlIGEgbnVtYmVyIGJldHdlZW4gMQogICAgICAgICBhbmQgOSBzcGVjaWZ5aW5nIHRoZSBsZXZlbCBvZiBjb21wcmVzc2lvbjogMSBwcm9kdWNlcyB0aGUgbGVhc3QKICAgICAgICAgY29tcHJlc3Npb24sIGFuZCA5IChkZWZhdWx0KSBwcm9kdWNlcyB0aGUgbW9zdCBjb21wcmVzc2lvbi4KIApAQCAtODUsMTUgKzg2LDE5IEBACiAgICAgICAgICAgICBtb2RlID0gIndiIgogICAgICAgICAgICAgbW9kZV9jb2RlID0gX01PREVfV1JJVEUKICAgICAgICAgICAgIHNlbGYuX2NvbXByZXNzb3IgPSBCWjJDb21wcmVzc29yKGNvbXByZXNzbGV2ZWwpCisgICAgICAgIGVsaWYgbW9kZSBpbiAoIngiLCAieGIiKToKKyAgICAgICAgICAgIG1vZGUgPSAieGIiCisgICAgICAgICAgICBtb2RlX2NvZGUgPSBfTU9ERV9XUklURQorICAgICAgICAgICAgc2VsZi5fY29tcHJlc3NvciA9IEJaMkNvbXByZXNzb3IoY29tcHJlc3NsZXZlbCkKICAgICAgICAgZWxpZiBtb2RlIGluICgiYSIsICJhYiIpOgogICAgICAgICAgICAgbW9kZSA9ICJhYiIKICAgICAgICAgICAgIG1vZGVfY29kZSA9IF9NT0RFX1dSSVRFCiAgICAgICAgICAgICBzZWxmLl9jb21wcmVzc29yID0gQloyQ29tcHJlc3Nvcihjb21wcmVzc2xldmVsKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiSW52YWxpZCBtb2RlOiB7IXJ9Ii5mb3JtYXQobW9kZSkpCisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJJbnZhbGlkIG1vZGU6ICVyIiAlIChtb2RlLCkpCiAKICAgICAgICAgaWYgaXNpbnN0YW5jZShmaWxlbmFtZSwgKHN0ciwgYnl0ZXMpKToKLSAgICAgICAgICAgIHNlbGYuX2ZwID0gYnVpbHRpbnMub3BlbihmaWxlbmFtZSwgbW9kZSkKKyAgICAgICAgICAgIHNlbGYuX2ZwID0gX2J1aWx0aW5fb3BlbihmaWxlbmFtZSwgbW9kZSkKICAgICAgICAgICAgIHNlbGYuX2Nsb3NlZnAgPSBUcnVlCiAgICAgICAgICAgICBzZWxmLl9tb2RlID0gbW9kZV9jb2RlCiAgICAgICAgIGVsaWYgaGFzYXR0cihmaWxlbmFtZSwgInJlYWQiKSBvciBoYXNhdHRyKGZpbGVuYW1lLCAid3JpdGUiKToKQEAgLTE4OSwxNSArMTk0LDE3IEBACiAKICAgICAgICAgICAgIGlmIG5vdCByYXdibG9jazoKICAgICAgICAgICAgICAgICBpZiBzZWxmLl9kZWNvbXByZXNzb3IuZW9mOgorICAgICAgICAgICAgICAgICAgICAjIEVuZC1vZi1zdHJlYW0gbWFya2VyIGFuZCBlbmQgb2YgZmlsZS4gV2UncmUgZ29vZC4KICAgICAgICAgICAgICAgICAgICAgc2VsZi5fbW9kZSA9IF9NT0RFX1JFQURfRU9GCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3NpemUgPSBzZWxmLl9wb3MKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgIyBQcm9ibGVtIC0gd2Ugd2VyZSBleHBlY3RpbmcgbW9yZSBjb21wcmVzc2VkIGRhdGEuCiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEVPRkVycm9yKCJDb21wcmVzc2VkIGZpbGUgZW5kZWQgYmVmb3JlIHRoZSAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlbmQtb2Ytc3RyZWFtIG1hcmtlciB3YXMgcmVhY2hlZCIpCiAKLSAgICAgICAgICAgICMgQ29udGludWUgdG8gbmV4dCBzdHJlYW0uCiAgICAgICAgICAgICBpZiBzZWxmLl9kZWNvbXByZXNzb3IuZW9mOgorICAgICAgICAgICAgICAgICMgQ29udGludWUgdG8gbmV4dCBzdHJlYW0uCiAgICAgICAgICAgICAgICAgc2VsZi5fZGVjb21wcmVzc29yID0gQloyRGVjb21wcmVzc29yKCkKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2J1ZmZlciA9IHNlbGYuX2RlY29tcHJlc3Nvci5kZWNvbXByZXNzKHJhd2Jsb2NrKQpAQCAtNDE5LDcgKzQyNiw3IEBACiAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3JlYWRfYWxsKHJldHVybl9kYXRhPUZhbHNlKQogICAgICAgICAgICAgICAgIG9mZnNldCA9IHNlbGYuX3NpemUgKyBvZmZzZXQKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiSW52YWxpZCB2YWx1ZSBmb3Igd2hlbmNlOiB7fSIuZm9ybWF0KHdoZW5jZSkpCisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiSW52YWxpZCB2YWx1ZSBmb3Igd2hlbmNlOiAlcyIgJSAod2hlbmNlLCkpCiAKICAgICAgICAgICAgICMgTWFrZSBpdCBzbyB0aGF0IG9mZnNldCBpcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHNraXAgZm9yd2FyZC4KICAgICAgICAgICAgIGlmIG9mZnNldCA8IHNlbGYuX3BvczoKQEAgLTQ0MywyMCArNDUwLDIwIEBACiAgICAgICAgICBlbmNvZGluZz1Ob25lLCBlcnJvcnM9Tm9uZSwgbmV3bGluZT1Ob25lKToKICAgICAiIiJPcGVuIGEgYnppcDItY29tcHJlc3NlZCBmaWxlIGluIGJpbmFyeSBvciB0ZXh0IG1vZGUuCiAKLSAgICBUaGUgZmlsZW5hbWUgYXJndW1lbnQgY2FuIGJlIGFuIGFjdHVhbCBmaWxlbmFtZSAoYSBzdHIgb3IgYnl0ZXMgb2JqZWN0KSwgb3IKLSAgICBhbiBleGlzdGluZyBmaWxlIG9iamVjdCB0byByZWFkIGZyb20gb3Igd3JpdGUgdG8uCisgICAgVGhlIGZpbGVuYW1lIGFyZ3VtZW50IGNhbiBiZSBhbiBhY3R1YWwgZmlsZW5hbWUgKGEgc3RyIG9yIGJ5dGVzCisgICAgb2JqZWN0KSwgb3IgYW4gZXhpc3RpbmcgZmlsZSBvYmplY3QgdG8gcmVhZCBmcm9tIG9yIHdyaXRlIHRvLgogCi0gICAgVGhlIG1vZGUgYXJndW1lbnQgY2FuIGJlICJyIiwgInJiIiwgInciLCAid2IiLCAiYSIgb3IgImFiIiBmb3IgYmluYXJ5IG1vZGUsCi0gICAgb3IgInJ0IiwgInd0IiBvciAiYXQiIGZvciB0ZXh0IG1vZGUuIFRoZSBkZWZhdWx0IG1vZGUgaXMgInJiIiwgYW5kIHRoZQotICAgIGRlZmF1bHQgY29tcHJlc3NsZXZlbCBpcyA5LgorICAgIFRoZSBtb2RlIGFyZ3VtZW50IGNhbiBiZSAiciIsICJyYiIsICJ3IiwgIndiIiwgIngiLCAieGIiLCAiYSIgb3IKKyAgICAiYWIiIGZvciBiaW5hcnkgbW9kZSwgb3IgInJ0IiwgInd0IiwgInh0IiBvciAiYXQiIGZvciB0ZXh0IG1vZGUuCisgICAgVGhlIGRlZmF1bHQgbW9kZSBpcyAicmIiLCBhbmQgdGhlIGRlZmF1bHQgY29tcHJlc3NsZXZlbCBpcyA5LgogCi0gICAgRm9yIGJpbmFyeSBtb2RlLCB0aGlzIGZ1bmN0aW9uIGlzIGVxdWl2YWxlbnQgdG8gdGhlIEJaMkZpbGUgY29uc3RydWN0b3I6Ci0gICAgQloyRmlsZShmaWxlbmFtZSwgbW9kZSwgY29tcHJlc3NsZXZlbCkuIEluIHRoaXMgY2FzZSwgdGhlIGVuY29kaW5nLCBlcnJvcnMKLSAgICBhbmQgbmV3bGluZSBhcmd1bWVudHMgbXVzdCBub3QgYmUgcHJvdmlkZWQuCisgICAgRm9yIGJpbmFyeSBtb2RlLCB0aGlzIGZ1bmN0aW9uIGlzIGVxdWl2YWxlbnQgdG8gdGhlIEJaMkZpbGUKKyAgICBjb25zdHJ1Y3RvcjogQloyRmlsZShmaWxlbmFtZSwgbW9kZSwgY29tcHJlc3NsZXZlbCkuIEluIHRoaXMgY2FzZSwKKyAgICB0aGUgZW5jb2RpbmcsIGVycm9ycyBhbmQgbmV3bGluZSBhcmd1bWVudHMgbXVzdCBub3QgYmUgcHJvdmlkZWQuCiAKICAgICBGb3IgdGV4dCBtb2RlLCBhIEJaMkZpbGUgb2JqZWN0IGlzIGNyZWF0ZWQsIGFuZCB3cmFwcGVkIGluIGFuCi0gICAgaW8uVGV4dElPV3JhcHBlciBpbnN0YW5jZSB3aXRoIHRoZSBzcGVjaWZpZWQgZW5jb2RpbmcsIGVycm9yIGhhbmRsaW5nCi0gICAgYmVoYXZpb3IsIGFuZCBsaW5lIGVuZGluZyhzKS4KKyAgICBpby5UZXh0SU9XcmFwcGVyIGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZCBlbmNvZGluZywgZXJyb3IKKyAgICBoYW5kbGluZyBiZWhhdmlvciwgYW5kIGxpbmUgZW5kaW5nKHMpLgogCiAgICAgIiIiCiAgICAgaWYgInQiIGluIG1vZGU6CmRpZmYgLS1naXQgYS9MaWIvY1Byb2ZpbGUucHkgYi9MaWIvY1Byb2ZpbGUucHkKaW5kZXggYzI0ZDQ1Yi4uMTE4NDM4NSAxMDA3NTUKLS0tIGEvTGliL2NQcm9maWxlLnB5CisrKyBiL0xpYi9jUHJvZmlsZS5weQpAQCAtNyw1NCArNywyMCBAQAogX19hbGxfXyA9IFsicnVuIiwgInJ1bmN0eCIsICJQcm9maWxlIl0KIAogaW1wb3J0IF9sc3Byb2YKK2ltcG9ydCBwcm9maWxlIGFzIF9weXByb2ZpbGUKIAogIyBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KICMgU2ltcGxlIGludGVyZmFjZQogCiBkZWYgcnVuKHN0YXRlbWVudCwgZmlsZW5hbWU9Tm9uZSwgc29ydD0tMSk6Ci0gICAgIiIiUnVuIHN0YXRlbWVudCB1bmRlciBwcm9maWxlciBvcHRpb25hbGx5IHNhdmluZyByZXN1bHRzIGluIGZpbGVuYW1lCi0KLSAgICBUaGlzIGZ1bmN0aW9uIHRha2VzIGEgc2luZ2xlIGFyZ3VtZW50IHRoYXQgY2FuIGJlIHBhc3NlZCB0byB0aGUKLSAgICAiZXhlYyIgc3RhdGVtZW50LCBhbmQgYW4gb3B0aW9uYWwgZmlsZSBuYW1lLiAgSW4gYWxsIGNhc2VzIHRoaXMKLSAgICByb3V0aW5lIGF0dGVtcHRzIHRvICJleGVjIiBpdHMgZmlyc3QgYXJndW1lbnQgYW5kIGdhdGhlciBwcm9maWxpbmcKLSAgICBzdGF0aXN0aWNzIGZyb20gdGhlIGV4ZWN1dGlvbi4gSWYgbm8gZmlsZSBuYW1lIGlzIHByZXNlbnQsIHRoZW4gdGhpcwotICAgIGZ1bmN0aW9uIGF1dG9tYXRpY2FsbHkgcHJpbnRzIGEgc2ltcGxlIHByb2ZpbGluZyByZXBvcnQsIHNvcnRlZCBieSB0aGUKLSAgICBzdGFuZGFyZCBuYW1lIHN0cmluZyAoZmlsZS9saW5lL2Z1bmN0aW9uLW5hbWUpIHRoYXQgaXMgcHJlc2VudGVkIGluCi0gICAgZWFjaCBsaW5lLgotICAgICIiIgotICAgIHByb2YgPSBQcm9maWxlKCkKLSAgICByZXN1bHQgPSBOb25lCi0gICAgdHJ5OgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBwcm9mID0gcHJvZi5ydW4oc3RhdGVtZW50KQotICAgICAgICBleGNlcHQgU3lzdGVtRXhpdDoKLSAgICAgICAgICAgIHBhc3MKLSAgICBmaW5hbGx5OgotICAgICAgICBpZiBmaWxlbmFtZSBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHByb2YuZHVtcF9zdGF0cyhmaWxlbmFtZSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJlc3VsdCA9IHByb2YucHJpbnRfc3RhdHMoc29ydCkKLSAgICByZXR1cm4gcmVzdWx0CisgICAgcmV0dXJuIF9weXByb2ZpbGUuX1V0aWxzKFByb2ZpbGUpLnJ1bihzdGF0ZW1lbnQsIGZpbGVuYW1lLCBzb3J0KQogCiBkZWYgcnVuY3R4KHN0YXRlbWVudCwgZ2xvYmFscywgbG9jYWxzLCBmaWxlbmFtZT1Ob25lLCBzb3J0PS0xKToKLSAgICAiIiJSdW4gc3RhdGVtZW50IHVuZGVyIHByb2ZpbGVyLCBzdXBwbHlpbmcgeW91ciBvd24gZ2xvYmFscyBhbmQgbG9jYWxzLAotICAgIG9wdGlvbmFsbHkgc2F2aW5nIHJlc3VsdHMgaW4gZmlsZW5hbWUuCisgICAgcmV0dXJuIF9weXByb2ZpbGUuX1V0aWxzKFByb2ZpbGUpLnJ1bmN0eChzdGF0ZW1lbnQsIGdsb2JhbHMsIGxvY2FscywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lLCBzb3J0KQogCi0gICAgc3RhdGVtZW50IGFuZCBmaWxlbmFtZSBoYXZlIHRoZSBzYW1lIHNlbWFudGljcyBhcyBwcm9maWxlLnJ1bgotICAgICIiIgotICAgIHByb2YgPSBQcm9maWxlKCkKLSAgICByZXN1bHQgPSBOb25lCi0gICAgdHJ5OgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBwcm9mID0gcHJvZi5ydW5jdHgoc3RhdGVtZW50LCBnbG9iYWxzLCBsb2NhbHMpCi0gICAgICAgIGV4Y2VwdCBTeXN0ZW1FeGl0OgotICAgICAgICAgICAgcGFzcwotICAgIGZpbmFsbHk6Ci0gICAgICAgIGlmIGZpbGVuYW1lIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgcHJvZi5kdW1wX3N0YXRzKGZpbGVuYW1lKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmVzdWx0ID0gcHJvZi5wcmludF9zdGF0cyhzb3J0KQotICAgIHJldHVybiByZXN1bHQKK3J1bi5fX2RvY19fID0gX3B5cHJvZmlsZS5ydW4uX19kb2NfXworcnVuY3R4Ll9fZG9jX18gPSBfcHlwcm9maWxlLnJ1bmN0eC5fX2RvY19fCiAKICMgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCiAKQEAgLTc3LDEwICs0Myw5IEBACiAKICAgICBkZWYgZHVtcF9zdGF0cyhzZWxmLCBmaWxlKToKICAgICAgICAgaW1wb3J0IG1hcnNoYWwKLSAgICAgICAgZiA9IG9wZW4oZmlsZSwgJ3diJykKLSAgICAgICAgc2VsZi5jcmVhdGVfc3RhdHMoKQotICAgICAgICBtYXJzaGFsLmR1bXAoc2VsZi5zdGF0cywgZikKLSAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIHdpdGggb3BlbihmaWxlLCAnd2InKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5jcmVhdGVfc3RhdHMoKQorICAgICAgICAgICAgbWFyc2hhbC5kdW1wKHNlbGYuc3RhdHMsIGYpCiAKICAgICBkZWYgY3JlYXRlX3N0YXRzKHNlbGYpOgogICAgICAgICBzZWxmLmRpc2FibGUoKQpkaWZmIC0tZ2l0IGEvTGliL2NhbGVuZGFyLnB5IGIvTGliL2NhbGVuZGFyLnB5CmluZGV4IDAyMDUwZWEuLjUyNDRiOGQgMTAwNjQ0Ci0tLSBhL0xpYi9jYWxlbmRhci5weQorKysgYi9MaWIvY2FsZW5kYXIucHkKQEAgLTE0Miw3ICsxNDIsNyBAQAogCiAgICAgZGVmIGl0ZXJ3ZWVrZGF5cyhzZWxmKToKICAgICAgICAgIiIiCi0gICAgICAgIFJldHVybiBhIGl0ZXJhdG9yIGZvciBvbmUgd2VlayBvZiB3ZWVrZGF5IG51bWJlcnMgc3RhcnRpbmcgd2l0aCB0aGUKKyAgICAgICAgUmV0dXJuIGFuIGl0ZXJhdG9yIGZvciBvbmUgd2VlayBvZiB3ZWVrZGF5IG51bWJlcnMgc3RhcnRpbmcgd2l0aCB0aGUKICAgICAgICAgY29uZmlndXJlZCBmaXJzdCBvbmUuCiAgICAgICAgICIiIgogICAgICAgICBmb3IgaSBpbiByYW5nZShzZWxmLmZpcnN0d2Vla2RheSwgc2VsZi5maXJzdHdlZWtkYXkgKyA3KToKZGlmZiAtLWdpdCBhL0xpYi9jZ2kucHkgYi9MaWIvY2dpLnB5CmluZGV4IDBmNTBkMGUuLjQ1YmFkZjYgMTAwNzU1Ci0tLSBhL0xpYi9jZ2kucHkKKysrIGIvTGliL2NnaS5weQpAQCAtODIsNyArODIsNyBAQAogICAgIGlmIGxvZ2ZpbGUgYW5kIG5vdCBsb2dmcDoKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgbG9nZnAgPSBvcGVuKGxvZ2ZpbGUsICJhIikKLSAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcGFzcwogICAgIGlmIG5vdCBsb2dmcDoKICAgICAgICAgbG9nID0gbm9sb2cKQEAgLTU2MCw2ICs1NjAsMTIgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYucmVhZF9zaW5nbGUoKQogCisgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuZmlsZS5jbG9zZSgpCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKwogICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgICAgICAgIiIiUmV0dXJuIGEgcHJpbnRhYmxlIHJlcHJlc2VudGF0aW9uLiIiIgogICAgICAgICByZXR1cm4gIkZpZWxkU3RvcmFnZSglciwgJXIsICVyKSIgJSAoCkBAIC02ODAsNyArNjg2LDYgQEAKICAgICAgICAgICAgICAgICBlbmNvZGluZz1zZWxmLmVuY29kaW5nLCBlcnJvcnM9c2VsZi5lcnJvcnMpCiAgICAgICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBxdWVyeToKICAgICAgICAgICAgICAgICBzZWxmLmxpc3QuYXBwZW5kKE1pbmlGaWVsZFN0b3JhZ2Uoa2V5LCB2YWx1ZSkpCi0gICAgICAgICAgICBGaWVsZFN0b3JhZ2VDbGFzcyA9IE5vbmUKIAogICAgICAgICBrbGFzcyA9IHNlbGYuRmllbGRTdG9yYWdlQ2xhc3Mgb3Igc2VsZi5fX2NsYXNzX18KICAgICAgICAgZmlyc3RfbGluZSA9IHNlbGYuZnAucmVhZGxpbmUoKSAjIGJ5dGVzCkBAIC02ODgsOCArNjkzLDEzIEBACiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCIlcyBzaG91bGQgcmV0dXJuIGJ5dGVzLCBnb3QgJXMiIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoc2VsZi5mcCwgdHlwZShmaXJzdF9saW5lKS5fX25hbWVfXykpCiAgICAgICAgIHNlbGYuYnl0ZXNfcmVhZCArPSBsZW4oZmlyc3RfbGluZSkKLSAgICAgICAgIyBmaXJzdCBsaW5lIGhvbGRzIGJvdW5kYXJ5IDsgaWdub3JlIGl0LCBvciBjaGVjayB0aGF0Ci0gICAgICAgICMgYiItLSIgKyBpYiA9PSBmaXJzdF9saW5lLnN0cmlwKCkgPworCisgICAgICAgICMgRW5zdXJlIHRoYXQgd2UgY29uc3VtZSB0aGUgZmlsZSB1bnRpbCB3ZSd2ZSBoaXQgb3VyIGlubmVyIGJvdW5kYXJ5CisgICAgICAgIHdoaWxlIChmaXJzdF9saW5lLnN0cmlwKCkgIT0gKGIiLS0iICsgc2VsZi5pbm5lcmJvdW5kYXJ5KSBhbmQKKyAgICAgICAgICAgICAgICBmaXJzdF9saW5lKToKKyAgICAgICAgICAgIGZpcnN0X2xpbmUgPSBzZWxmLmZwLnJlYWRsaW5lKCkKKyAgICAgICAgICAgIHNlbGYuYnl0ZXNfcmVhZCArPSBsZW4oZmlyc3RfbGluZSkKKwogICAgICAgICB3aGlsZSBUcnVlOgogICAgICAgICAgICAgcGFyc2VyID0gRmVlZFBhcnNlcigpCiAgICAgICAgICAgICBoZHJfdGV4dCA9IGIiIgpAQCAtNzA0LDYgKzcxNCwxMSBAQAogICAgICAgICAgICAgc2VsZi5ieXRlc19yZWFkICs9IGxlbihoZHJfdGV4dCkKICAgICAgICAgICAgIHBhcnNlci5mZWVkKGhkcl90ZXh0LmRlY29kZShzZWxmLmVuY29kaW5nLCBzZWxmLmVycm9ycykpCiAgICAgICAgICAgICBoZWFkZXJzID0gcGFyc2VyLmNsb3NlKCkKKworICAgICAgICAgICAgIyBTb21lIGNsaWVudHMgYWRkIENvbnRlbnQtTGVuZ3RoIGZvciBwYXJ0IGhlYWRlcnMsIGlnbm9yZSB0aGVtCisgICAgICAgICAgICBpZiAnY29udGVudC1sZW5ndGgnIGluIGhlYWRlcnM6CisgICAgICAgICAgICAgICAgZGVsIGhlYWRlcnNbJ2NvbnRlbnQtbGVuZ3RoJ10KKwogICAgICAgICAgICAgcGFydCA9IGtsYXNzKHNlbGYuZnAsIGhlYWRlcnMsIGliLCBlbnZpcm9uLCBrZWVwX2JsYW5rX3ZhbHVlcywKICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpY3RfcGFyc2luZyxzZWxmLmxpbWl0LXNlbGYuYnl0ZXNfcmVhZCwKICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmVuY29kaW5nLCBzZWxmLmVycm9ycykKQEAgLTk2OCw4ICs5ODMsOCBAQAogICAgIHByaW50KCI8SDM+Q3VycmVudCBXb3JraW5nIERpcmVjdG9yeTo8L0gzPiIpCiAgICAgdHJ5OgogICAgICAgICBwd2QgPSBvcy5nZXRjd2QoKQotICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBtc2c6Ci0gICAgICAgIHByaW50KCJvcy5lcnJvcjoiLCBodG1sLmVzY2FwZShzdHIobXNnKSkpCisgICAgZXhjZXB0IE9TRXJyb3IgYXMgbXNnOgorICAgICAgICBwcmludCgiT1NFcnJvcjoiLCBodG1sLmVzY2FwZShzdHIobXNnKSkpCiAgICAgZWxzZToKICAgICAgICAgcHJpbnQoaHRtbC5lc2NhcGUocHdkKSkKICAgICBwcmludCgpCkBAIC0xMDQwLDcgKzEwNTUsNyBAQAogICAgIHJldHVybiBzCiAKIAotZGVmIHZhbGlkX2JvdW5kYXJ5KHMsIF92Yl9wYXR0ZXJuPU5vbmUpOgorZGVmIHZhbGlkX2JvdW5kYXJ5KHMpOgogICAgIGltcG9ydCByZQogICAgIGlmIGlzaW5zdGFuY2UocywgYnl0ZXMpOgogICAgICAgICBfdmJfcGF0dGVybiA9IGIiXlsgLX5dezAsMjAwfVshLX5dJCIKZGlmZiAtLWdpdCBhL0xpYi9jaHVuay5weSBiL0xpYi9jaHVuay5weQppbmRleCA1ODYzZWQwLi5kOTRkZDM5IDEwMDY0NAotLS0gYS9MaWIvY2h1bmsucHkKKysrIGIvTGliL2NodW5rLnB5CkBAIC0yMSw3ICsyMSw3IEBACiB1c2FnZSBvZiB0aGUgQ2h1bmsgY2xhc3MgZGVmaW5lZCBoZXJlIGlzIHRvIGluc3RhbnRpYXRlIGFuIGluc3RhbmNlIGF0CiB0aGUgc3RhcnQgb2YgZWFjaCBjaHVuayBhbmQgcmVhZCBmcm9tIHRoZSBpbnN0YW5jZSB1bnRpbCBpdCByZWFjaGVzCiB0aGUgZW5kLCBhZnRlciB3aGljaCBhIG5ldyBpbnN0YW5jZSBjYW4gYmUgaW5zdGFudGlhdGVkLiAgQXQgdGhlIGVuZAotb2YgdGhlIGZpbGUsIGNyZWF0aW5nIGEgbmV3IGluc3RhbmNlIHdpbGwgZmFpbCB3aXRoIGEgRU9GRXJyb3IKK29mIHRoZSBmaWxlLCBjcmVhdGluZyBhIG5ldyBpbnN0YW5jZSB3aWxsIGZhaWwgd2l0aCBhbiBFT0ZFcnJvcgogZXhjZXB0aW9uLgogCiBVc2FnZToKQEAgLTcwLDcgKzcwLDcgQEAKICAgICAgICAgc2VsZi5zaXplX3JlYWQgPSAwCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYub2Zmc2V0ID0gc2VsZi5maWxlLnRlbGwoKQotICAgICAgICBleGNlcHQgKEF0dHJpYnV0ZUVycm9yLCBJT0Vycm9yKToKKyAgICAgICAgZXhjZXB0IChBdHRyaWJ1dGVFcnJvciwgT1NFcnJvcik6CiAgICAgICAgICAgICBzZWxmLnNlZWthYmxlID0gRmFsc2UKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuc2Vla2FibGUgPSBUcnVlCkBAIC04NSw4ICs4NSwxMCBAQAogCiAgICAgZGVmIGNsb3NlKHNlbGYpOgogICAgICAgICBpZiBub3Qgc2VsZi5jbG9zZWQ6Ci0gICAgICAgICAgICBzZWxmLnNraXAoKQotICAgICAgICAgICAgc2VsZi5jbG9zZWQgPSBUcnVlCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5za2lwKCkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgc2VsZi5jbG9zZWQgPSBUcnVlCiAKICAgICBkZWYgaXNhdHR5KHNlbGYpOgogICAgICAgICBpZiBzZWxmLmNsb3NlZDoKQEAgLTEwMiw3ICsxMDQsNyBAQAogICAgICAgICBpZiBzZWxmLmNsb3NlZDoKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkkvTyBvcGVyYXRpb24gb24gY2xvc2VkIGZpbGUiKQogICAgICAgICBpZiBub3Qgc2VsZi5zZWVrYWJsZToKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoImNhbm5vdCBzZWVrIikKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoImNhbm5vdCBzZWVrIikKICAgICAgICAgaWYgd2hlbmNlID09IDE6CiAgICAgICAgICAgICBwb3MgPSBwb3MgKyBzZWxmLnNpemVfcmVhZAogICAgICAgICBlbGlmIHdoZW5jZSA9PSAyOgpAQCAtMTI2LDcgKzEyOCw3IEBACiAgICAgICAgIGlmIHNlbGYuY2xvc2VkOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiSS9PIG9wZXJhdGlvbiBvbiBjbG9zZWQgZmlsZSIpCiAgICAgICAgIGlmIHNlbGYuc2l6ZV9yZWFkID49IHNlbGYuY2h1bmtzaXplOgotICAgICAgICAgICAgcmV0dXJuICcnCisgICAgICAgICAgICByZXR1cm4gYicnCiAgICAgICAgIGlmIHNpemUgPCAwOgogICAgICAgICAgICAgc2l6ZSA9IHNlbGYuY2h1bmtzaXplIC0gc2VsZi5zaXplX3JlYWQKICAgICAgICAgaWYgc2l6ZSA+IHNlbGYuY2h1bmtzaXplIC0gc2VsZi5zaXplX3JlYWQ6CkBAIC0xNTgsNyArMTYwLDcgQEAKICAgICAgICAgICAgICAgICBzZWxmLmZpbGUuc2VlayhuLCAxKQogICAgICAgICAgICAgICAgIHNlbGYuc2l6ZV9yZWFkID0gc2VsZi5zaXplX3JlYWQgKyBuCiAgICAgICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgd2hpbGUgc2VsZi5zaXplX3JlYWQgPCBzZWxmLmNodW5rc2l6ZToKICAgICAgICAgICAgIG4gPSBtaW4oODE5Miwgc2VsZi5jaHVua3NpemUgLSBzZWxmLnNpemVfcmVhZCkKZGlmZiAtLWdpdCBhL0xpYi9jb2RlLnB5IGIvTGliL2NvZGUucHkKaW5kZXggOTAyMGFhYi4uZjgxODRiNiAxMDA2NDQKLS0tIGEvTGliL2NvZGUucHkKKysrIGIvTGliL2NvZGUucHkKQEAgLTIxNiw3ICsyMTYsNyBAQAogICAgICAgICAgICAgc2VsZi53cml0ZSgiUHl0aG9uICVzIG9uICVzXG4lc1xuKCVzKVxuIiAlCiAgICAgICAgICAgICAgICAgICAgICAgIChzeXMudmVyc2lvbiwgc3lzLnBsYXRmb3JtLCBjcHJ0LAogICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fX2NsYXNzX18uX19uYW1lX18pKQotICAgICAgICBlbHNlOgorICAgICAgICBlbGlmIGJhbm5lcjoKICAgICAgICAgICAgIHNlbGYud3JpdGUoIiVzXG4iICUgc3RyKGJhbm5lcikpCiAgICAgICAgIG1vcmUgPSAwCiAgICAgICAgIHdoaWxlIDE6CmRpZmYgLS1naXQgYS9MaWIvY29kZWNzLnB5IGIvTGliL2NvZGVjcy5weQppbmRleCBjMjA2NWRhLi42Y2RmM2Y0IDEwMDY0NAotLS0gYS9MaWIvY29kZWNzLnB5CisrKyBiL0xpYi9jb2RlY3MucHkKQEAgLTIwLDggKzIwLDE0IEBACiAgICAgICAgICAgICJCT01fTEUiLCAiQk9NMzJfQkUiLCAiQk9NMzJfTEUiLCAiQk9NNjRfQkUiLCAiQk9NNjRfTEUiLAogICAgICAgICAgICAiQk9NX1VURjgiLCAiQk9NX1VURjE2IiwgIkJPTV9VVEYxNl9MRSIsICJCT01fVVRGMTZfQkUiLAogICAgICAgICAgICAiQk9NX1VURjMyIiwgIkJPTV9VVEYzMl9MRSIsICJCT01fVVRGMzJfQkUiLAorICAgICAgICAgICAiQ29kZWNJbmZvIiwgIkNvZGVjIiwgIkluY3JlbWVudGFsRW5jb2RlciIsICJJbmNyZW1lbnRhbERlY29kZXIiLAorICAgICAgICAgICAiU3RyZWFtUmVhZGVyIiwgIlN0cmVhbVdyaXRlciIsCisgICAgICAgICAgICJTdHJlYW1SZWFkZXJXcml0ZXIiLCAiU3RyZWFtUmVjb2RlciIsCisgICAgICAgICAgICJnZXRlbmNvZGVyIiwgImdldGRlY29kZXIiLCAiZ2V0aW5jcmVtZW50YWxlbmNvZGVyIiwKKyAgICAgICAgICAgImdldGluY3JlbWVudGFsZGVjb2RlciIsICJnZXRyZWFkZXIiLCAiZ2V0d3JpdGVyIiwKKyAgICAgICAgICAgImVuY29kZSIsICJkZWNvZGUiLCAiaXRlcmVuY29kZSIsICJpdGVyZGVjb2RlIiwKICAgICAgICAgICAgInN0cmljdF9lcnJvcnMiLCAiaWdub3JlX2Vycm9ycyIsICJyZXBsYWNlX2Vycm9ycyIsCi0gICAgICAgICAgICJ4bWxjaGFycmVmcmVwbGFjZV9lcnJvcnMiLAorICAgICAgICAgICAieG1sY2hhcnJlZnJlcGxhY2VfZXJyb3JzIiwgImJhY2tzbGFzaHJlcGxhY2VfZXJyb3JzIiwKICAgICAgICAgICAgInJlZ2lzdGVyX2Vycm9yIiwgImxvb2t1cF9lcnJvciJdCiAKICMjIyBDb25zdGFudHMKQEAgLTExNyw3ICsxMjMsNyBAQAogICAgICAgICAgICAgICAgICAgICBQeXRob24gd2lsbCB1c2UgdGhlIG9mZmljaWFsIFUrRkZGRCBSRVBMQUNFTUVOVAogICAgICAgICAgICAgICAgICAgICBDSEFSQUNURVIgZm9yIHRoZSBidWlsdGluIFVuaWNvZGUgY29kZWNzIG9uCiAgICAgICAgICAgICAgICAgICAgIGRlY29kaW5nIGFuZCAnPycgb24gZW5jb2RpbmcuCi0gICAgICAgICAnc3Vycm9nYXRlZXNjYXBlJyAtIHJlcGxhY2Ugd2l0aCBwcml2YXRlIGNvZGVwb2ludHMgVStEQ25uLgorICAgICAgICAgJ3N1cnJvZ2F0ZWVzY2FwZScgLSByZXBsYWNlIHdpdGggcHJpdmF0ZSBjb2RlIHBvaW50cyBVK0RDbm4uCiAgICAgICAgICAneG1sY2hhcnJlZnJlcGxhY2UnIC0gUmVwbGFjZSB3aXRoIHRoZSBhcHByb3ByaWF0ZSBYTUwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXIgcmVmZXJlbmNlIChvbmx5IGZvciBlbmNvZGluZykuCiAgICAgICAgICAnYmFja3NsYXNocmVwbGFjZScgIC0gUmVwbGFjZSB3aXRoIGJhY2tzbGFzaGVkIGVzY2FwZSBzZXF1ZW5jZXMKQEAgLTEzNSw4ICsxNDEsOCBAQAogICAgICAgICAgICAgJ3N0cmljdCcgaGFuZGxpbmcuCiAKICAgICAgICAgICAgIFRoZSBtZXRob2QgbWF5IG5vdCBzdG9yZSBzdGF0ZSBpbiB0aGUgQ29kZWMgaW5zdGFuY2UuIFVzZQotICAgICAgICAgICAgU3RyZWFtQ29kZWMgZm9yIGNvZGVjcyB3aGljaCBoYXZlIHRvIGtlZXAgc3RhdGUgaW4gb3JkZXIgdG8KLSAgICAgICAgICAgIG1ha2UgZW5jb2RpbmcvZGVjb2RpbmcgZWZmaWNpZW50LgorICAgICAgICAgICAgU3RyZWFtV3JpdGVyIGZvciBjb2RlY3Mgd2hpY2ggaGF2ZSB0byBrZWVwIHN0YXRlIGluIG9yZGVyIHRvCisgICAgICAgICAgICBtYWtlIGVuY29kaW5nIGVmZmljaWVudC4KIAogICAgICAgICAgICAgVGhlIGVuY29kZXIgbXVzdCBiZSBhYmxlIHRvIGhhbmRsZSB6ZXJvIGxlbmd0aCBpbnB1dCBhbmQKICAgICAgICAgICAgIHJldHVybiBhbiBlbXB0eSBvYmplY3Qgb2YgdGhlIG91dHB1dCBvYmplY3QgdHlwZSBpbiB0aGlzCkBAIC0xNTgsOCArMTY0LDggQEAKICAgICAgICAgICAgICdzdHJpY3QnIGhhbmRsaW5nLgogCiAgICAgICAgICAgICBUaGUgbWV0aG9kIG1heSBub3Qgc3RvcmUgc3RhdGUgaW4gdGhlIENvZGVjIGluc3RhbmNlLiBVc2UKLSAgICAgICAgICAgIFN0cmVhbUNvZGVjIGZvciBjb2RlY3Mgd2hpY2ggaGF2ZSB0byBrZWVwIHN0YXRlIGluIG9yZGVyIHRvCi0gICAgICAgICAgICBtYWtlIGVuY29kaW5nL2RlY29kaW5nIGVmZmljaWVudC4KKyAgICAgICAgICAgIFN0cmVhbVJlYWRlciBmb3IgY29kZWNzIHdoaWNoIGhhdmUgdG8ga2VlcCBzdGF0ZSBpbiBvcmRlciB0bworICAgICAgICAgICAgbWFrZSBkZWNvZGluZyBlZmZpY2llbnQuCiAKICAgICAgICAgICAgIFRoZSBkZWNvZGVyIG11c3QgYmUgYWJsZSB0byBoYW5kbGUgemVybyBsZW5ndGggaW5wdXQgYW5kCiAgICAgICAgICAgICByZXR1cm4gYW4gZW1wdHkgb2JqZWN0IG9mIHRoZSBvdXRwdXQgb2JqZWN0IHR5cGUgaW4gdGhpcwpAQCAtMjUwLDcgKzI1Niw3IEBACiAgICAgIiIiCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGVycm9ycz0nc3RyaWN0Jyk6CiAgICAgICAgICIiIgotICAgICAgICBDcmVhdGUgYSBJbmNyZW1lbnRhbERlY29kZXIgaW5zdGFuY2UuCisgICAgICAgIENyZWF0ZSBhbiBJbmNyZW1lbnRhbERlY29kZXIgaW5zdGFuY2UuCiAKICAgICAgICAgVGhlIEluY3JlbWVudGFsRGVjb2RlciBtYXkgdXNlIGRpZmZlcmVudCBlcnJvciBoYW5kbGluZyBzY2hlbWVzIGJ5CiAgICAgICAgIHByb3ZpZGluZyB0aGUgZXJyb3JzIGtleXdvcmQgYXJndW1lbnQuIFNlZSB0aGUgbW9kdWxlIGRvY3N0cmluZwpAQCAtMzQwLDggKzM0Niw3IEBACiAKICAgICAgICAgIiIiIENyZWF0ZXMgYSBTdHJlYW1Xcml0ZXIgaW5zdGFuY2UuCiAKLSAgICAgICAgICAgIHN0cmVhbSBtdXN0IGJlIGEgZmlsZS1saWtlIG9iamVjdCBvcGVuIGZvciB3cml0aW5nCi0gICAgICAgICAgICAoYmluYXJ5KSBkYXRhLgorICAgICAgICAgICAgc3RyZWFtIG11c3QgYmUgYSBmaWxlLWxpa2Ugb2JqZWN0IG9wZW4gZm9yIHdyaXRpbmcuCiAKICAgICAgICAgICAgIFRoZSBTdHJlYW1Xcml0ZXIgbWF5IHVzZSBkaWZmZXJlbnQgZXJyb3IgaGFuZGxpbmcKICAgICAgICAgICAgIHNjaGVtZXMgYnkgcHJvdmlkaW5nIHRoZSBlcnJvcnMga2V5d29yZCBhcmd1bWVudC4gVGhlc2UKQEAgLTQxNSw4ICs0MjAsNyBAQAogCiAgICAgICAgICIiIiBDcmVhdGVzIGEgU3RyZWFtUmVhZGVyIGluc3RhbmNlLgogCi0gICAgICAgICAgICBzdHJlYW0gbXVzdCBiZSBhIGZpbGUtbGlrZSBvYmplY3Qgb3BlbiBmb3IgcmVhZGluZwotICAgICAgICAgICAgKGJpbmFyeSkgZGF0YS4KKyAgICAgICAgICAgIHN0cmVhbSBtdXN0IGJlIGEgZmlsZS1saWtlIG9iamVjdCBvcGVuIGZvciByZWFkaW5nLgogCiAgICAgICAgICAgICBUaGUgU3RyZWFtUmVhZGVyIG1heSB1c2UgZGlmZmVyZW50IGVycm9yIGhhbmRsaW5nCiAgICAgICAgICAgICBzY2hlbWVzIGJ5IHByb3ZpZGluZyB0aGUgZXJyb3JzIGtleXdvcmQgYXJndW1lbnQuIFRoZXNlCkBAIC00NDQsMTMgKzQ0OCwxMiBAQAogICAgICAgICAiIiIgRGVjb2RlcyBkYXRhIGZyb20gdGhlIHN0cmVhbSBzZWxmLnN0cmVhbSBhbmQgcmV0dXJucyB0aGUKICAgICAgICAgICAgIHJlc3VsdGluZyBvYmplY3QuCiAKLSAgICAgICAgICAgIGNoYXJzIGluZGljYXRlcyB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gcmVhZCBmcm9tIHRoZQotICAgICAgICAgICAgc3RyZWFtLiByZWFkKCkgd2lsbCBuZXZlciByZXR1cm4gbW9yZSB0aGFuIGNoYXJzCi0gICAgICAgICAgICBjaGFyYWN0ZXJzLCBidXQgaXQgbWlnaHQgcmV0dXJuIGxlc3MsIGlmIHRoZXJlIGFyZSBub3QgZW5vdWdoCi0gICAgICAgICAgICBjaGFyYWN0ZXJzIGF2YWlsYWJsZS4KKyAgICAgICAgICAgIGNoYXJzIGluZGljYXRlcyB0aGUgbnVtYmVyIG9mIGRlY29kZWQgY29kZSBwb2ludHMgb3IgYnl0ZXMgdG8KKyAgICAgICAgICAgIHJldHVybi4gcmVhZCgpIHdpbGwgbmV2ZXIgcmV0dXJuIG1vcmUgZGF0YSB0aGFuIHJlcXVlc3RlZCwKKyAgICAgICAgICAgIGJ1dCBpdCBtaWdodCByZXR1cm4gbGVzcywgaWYgdGhlcmUgaXMgbm90IGVub3VnaCBhdmFpbGFibGUuCiAKLSAgICAgICAgICAgIHNpemUgaW5kaWNhdGVzIHRoZSBhcHByb3hpbWF0ZSBtYXhpbXVtIG51bWJlciBvZiBieXRlcyB0bwotICAgICAgICAgICAgcmVhZCBmcm9tIHRoZSBzdHJlYW0gZm9yIGRlY29kaW5nIHB1cnBvc2VzLiBUaGUgZGVjb2RlcgorICAgICAgICAgICAgc2l6ZSBpbmRpY2F0ZXMgdGhlIGFwcHJveGltYXRlIG1heGltdW0gbnVtYmVyIG9mIGRlY29kZWQKKyAgICAgICAgICAgIGJ5dGVzIG9yIGNvZGUgcG9pbnRzIHRvIHJlYWQgZm9yIGRlY29kaW5nLiBUaGUgZGVjb2RlcgogICAgICAgICAgICAgY2FuIG1vZGlmeSB0aGlzIHNldHRpbmcgYXMgYXBwcm9wcmlhdGUuIFRoZSBkZWZhdWx0IHZhbHVlCiAgICAgICAgICAgICAtMSBpbmRpY2F0ZXMgdG8gcmVhZCBhbmQgZGVjb2RlIGFzIG11Y2ggYXMgcG9zc2libGUuICBzaXplCiAgICAgICAgICAgICBpcyBpbnRlbmRlZCB0byBwcmV2ZW50IGhhdmluZyB0byBkZWNvZGUgaHVnZSBmaWxlcyBpbiBvbmUKQEAgLTQ2MSw3ICs0NjQsNyBAQAogICAgICAgICAgICAgd2lsbCBiZSByZXR1cm5lZCwgdGhlIHJlc3Qgb2YgdGhlIGlucHV0IHdpbGwgYmUga2VwdCB1bnRpbCB0aGUKICAgICAgICAgICAgIG5leHQgY2FsbCB0byByZWFkKCkuCiAKLSAgICAgICAgICAgIFRoZSBtZXRob2Qgc2hvdWxkIHVzZSBhIGdyZWVkeSByZWFkIHN0cmF0ZWd5IG1lYW5pbmcgdGhhdAorICAgICAgICAgICAgVGhlIG1ldGhvZCBzaG91bGQgdXNlIGEgZ3JlZWR5IHJlYWQgc3RyYXRlZ3ksIG1lYW5pbmcgdGhhdAogICAgICAgICAgICAgaXQgc2hvdWxkIHJlYWQgYXMgbXVjaCBkYXRhIGFzIGlzIGFsbG93ZWQgd2l0aGluIHRoZQogICAgICAgICAgICAgZGVmaW5pdGlvbiBvZiB0aGUgZW5jb2RpbmcgYW5kIHRoZSBnaXZlbiBzaXplLCBlLmcuICBpZgogICAgICAgICAgICAgb3B0aW9uYWwgZW5jb2RpbmcgZW5kaW5ncyBvciBzdGF0ZSBtYXJrZXJzIGFyZSBhdmFpbGFibGUKQEAgLTU5Niw3ICs1OTksNyBAQAogICAgIGRlZiByZWFkbGluZXMoc2VsZiwgc2l6ZWhpbnQ9Tm9uZSwga2VlcGVuZHM9VHJ1ZSk6CiAKICAgICAgICAgIiIiIFJlYWQgYWxsIGxpbmVzIGF2YWlsYWJsZSBvbiB0aGUgaW5wdXQgc3RyZWFtCi0gICAgICAgICAgICBhbmQgcmV0dXJuIHRoZW0gYXMgbGlzdCBvZiBsaW5lcy4KKyAgICAgICAgICAgIGFuZCByZXR1cm4gdGhlbSBhcyBhIGxpc3QuCiAKICAgICAgICAgICAgIExpbmUgYnJlYWtzIGFyZSBpbXBsZW1lbnRlZCB1c2luZyB0aGUgY29kZWMncyBkZWNvZGVyCiAgICAgICAgICAgICBtZXRob2QgYW5kIGFyZSBpbmNsdWRlZCBpbiB0aGUgbGlzdCBlbnRyaWVzLgpAQCAtNzQ0LDE5ICs3NDcsMTggQEAKIAogY2xhc3MgU3RyZWFtUmVjb2RlcjoKIAotICAgICIiIiBTdHJlYW1SZWNvZGVyIGluc3RhbmNlcyBwcm92aWRlIGEgZnJvbnRlbmQgLSBiYWNrZW5kCi0gICAgICAgIHZpZXcgb2YgZW5jb2RpbmcgZGF0YS4KKyAgICAiIiIgU3RyZWFtUmVjb2RlciBpbnN0YW5jZXMgdHJhbnNsYXRlIGRhdGEgZnJvbSBvbmUgZW5jb2RpbmcgdG8gYW5vdGhlci4KIAogICAgICAgICBUaGV5IHVzZSB0aGUgY29tcGxldGUgc2V0IG9mIEFQSXMgcmV0dXJuZWQgYnkgdGhlCiAgICAgICAgIGNvZGVjcy5sb29rdXAoKSBmdW5jdGlvbiB0byBpbXBsZW1lbnQgdGhlaXIgdGFzay4KIAotICAgICAgICBEYXRhIHdyaXR0ZW4gdG8gdGhlIHN0cmVhbSBpcyBmaXJzdCBkZWNvZGVkIGludG8gYW4KLSAgICAgICAgaW50ZXJtZWRpYXRlIGZvcm1hdCAod2hpY2ggaXMgZGVwZW5kZW50IG9uIHRoZSBnaXZlbiBjb2RlYwotICAgICAgICBjb21iaW5hdGlvbikgYW5kIHRoZW4gd3JpdHRlbiB0byB0aGUgc3RyZWFtIHVzaW5nIGFuIGluc3RhbmNlCi0gICAgICAgIG9mIHRoZSBwcm92aWRlZCBXcml0ZXIgY2xhc3MuCisgICAgICAgIERhdGEgd3JpdHRlbiB0byB0aGUgU3RyZWFtUmVjb2RlciBpcyBmaXJzdCBkZWNvZGVkIGludG8gYW4KKyAgICAgICAgaW50ZXJtZWRpYXRlIGZvcm1hdCAoZGVwZW5kaW5nIG9uIHRoZSAiZGVjb2RlIiBjb2RlYykgYW5kIHRoZW4KKyAgICAgICAgd3JpdHRlbiB0byB0aGUgdW5kZXJseWluZyBzdHJlYW0gdXNpbmcgYW4gaW5zdGFuY2Ugb2YgdGhlIHByb3ZpZGVkCisgICAgICAgIFdyaXRlciBjbGFzcy4KIAotICAgICAgICBJbiB0aGUgb3RoZXIgZGlyZWN0aW9uLCBkYXRhIGlzIHJlYWQgZnJvbSB0aGUgc3RyZWFtIHVzaW5nIGEKLSAgICAgICAgUmVhZGVyIGluc3RhbmNlIGFuZCB0aGVuIHJldHVybiBlbmNvZGVkIGRhdGEgdG8gdGhlIGNhbGxlci4KKyAgICAgICAgSW4gdGhlIG90aGVyIGRpcmVjdGlvbiwgZGF0YSBpcyByZWFkIGZyb20gdGhlIHVuZGVybHlpbmcgc3RyZWFtIHVzaW5nCisgICAgICAgIGEgUmVhZGVyIGluc3RhbmNlIGFuZCB0aGVuIGVuY29kZWQgYW5kIHJldHVybmVkIHRvIHRoZSBjYWxsZXIuCiAKICAgICAiIiIKICAgICAjIE9wdGlvbmFsIGF0dHJpYnV0ZXMgc2V0IGJ5IHRoZSBmaWxlIHdyYXBwZXJzIGJlbG93CkBAIC03NjgsMjIgKzc3MCwxNyBAQAogCiAgICAgICAgICIiIiBDcmVhdGVzIGEgU3RyZWFtUmVjb2RlciBpbnN0YW5jZSB3aGljaCBpbXBsZW1lbnRzIGEgdHdvLXdheQogICAgICAgICAgICAgY29udmVyc2lvbjogZW5jb2RlIGFuZCBkZWNvZGUgd29yayBvbiB0aGUgZnJvbnRlbmQgKHRoZQotICAgICAgICAgICAgaW5wdXQgdG8gLnJlYWQoKSBhbmQgb3V0cHV0IG9mIC53cml0ZSgpKSB3aGlsZQotICAgICAgICAgICAgUmVhZGVyIGFuZCBXcml0ZXIgd29yayBvbiB0aGUgYmFja2VuZCAocmVhZGluZyBhbmQKLSAgICAgICAgICAgIHdyaXRpbmcgdG8gdGhlIHN0cmVhbSkuCisgICAgICAgICAgICBkYXRhIHZpc2libGUgdG8gLnJlYWQoKSBhbmQgLndyaXRlKCkpIHdoaWxlIFJlYWRlciBhbmQgV3JpdGVyCisgICAgICAgICAgICB3b3JrIG9uIHRoZSBiYWNrZW5kICh0aGUgZGF0YSBpbiBzdHJlYW0pLgogCi0gICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGVzZSBvYmplY3RzIHRvIGRvIHRyYW5zcGFyZW50IGRpcmVjdAotICAgICAgICAgICAgcmVjb2RpbmdzIGZyb20gZS5nLiBsYXRpbi0xIHRvIHV0Zi04IGFuZCBiYWNrLgorICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhlc2Ugb2JqZWN0cyB0byBkbyB0cmFuc3BhcmVudAorICAgICAgICAgICAgdHJhbnNjb2RpbmdzIGZyb20gZS5nLiBsYXRpbi0xIHRvIHV0Zi04IGFuZCBiYWNrLgogCiAgICAgICAgICAgICBzdHJlYW0gbXVzdCBiZSBhIGZpbGUtbGlrZSBvYmplY3QuCiAKLSAgICAgICAgICAgIGVuY29kZSwgZGVjb2RlIG11c3QgYWRoZXJlIHRvIHRoZSBDb2RlYyBpbnRlcmZhY2UsIFJlYWRlciwKKyAgICAgICAgICAgIGVuY29kZSBhbmQgZGVjb2RlIG11c3QgYWRoZXJlIHRvIHRoZSBDb2RlYyBpbnRlcmZhY2U7IFJlYWRlciBhbmQKICAgICAgICAgICAgIFdyaXRlciBtdXN0IGJlIGZhY3RvcnkgZnVuY3Rpb25zIG9yIGNsYXNzZXMgcHJvdmlkaW5nIHRoZQotICAgICAgICAgICAgU3RyZWFtUmVhZGVyLCBTdHJlYW1Xcml0ZXIgaW50ZXJmYWNlIHJlc3AuCi0KLSAgICAgICAgICAgIGVuY29kZSBhbmQgZGVjb2RlIGFyZSBuZWVkZWQgZm9yIHRoZSBmcm9udGVuZCB0cmFuc2xhdGlvbiwKLSAgICAgICAgICAgIFJlYWRlciBhbmQgV3JpdGVyIGZvciB0aGUgYmFja2VuZCB0cmFuc2xhdGlvbi4gVW5pY29kZSBpcwotICAgICAgICAgICAgdXNlZCBhcyBpbnRlcm1lZGlhdGUgZW5jb2RpbmcuCisgICAgICAgICAgICBTdHJlYW1SZWFkZXIgYW5kIFN0cmVhbVdyaXRlciBpbnRlcmZhY2VzIHJlc3AuCiAKICAgICAgICAgICAgIEVycm9yIGhhbmRsaW5nIGlzIGRvbmUgaW4gdGhlIHNhbWUgd2F5IGFzIGRlZmluZWQgZm9yIHRoZQogICAgICAgICAgICAgU3RyZWFtV3JpdGVyL1JlYWRlcnMuCkBAIC04NTgsNyArODU1LDcgQEAKIAogIyMjIFNob3J0Y3V0cwogCi1kZWYgb3BlbihmaWxlbmFtZSwgbW9kZT0ncmInLCBlbmNvZGluZz1Ob25lLCBlcnJvcnM9J3N0cmljdCcsIGJ1ZmZlcmluZz0xKToKK2RlZiBvcGVuKGZpbGVuYW1lLCBtb2RlPSdyJywgZW5jb2Rpbmc9Tm9uZSwgZXJyb3JzPSdzdHJpY3QnLCBidWZmZXJpbmc9MSk6CiAKICAgICAiIiIgT3BlbiBhbiBlbmNvZGVkIGZpbGUgdXNpbmcgdGhlIGdpdmVuIG1vZGUgYW5kIHJldHVybgogICAgICAgICBhIHdyYXBwZWQgdmVyc2lvbiBwcm92aWRpbmcgdHJhbnNwYXJlbnQgZW5jb2RpbmcvZGVjb2RpbmcuCkBAIC04NjgsMTAgKzg2NSw4IEBACiAgICAgICAgIGNvZGVjcy4gT3V0cHV0IGlzIGFsc28gY29kZWMgZGVwZW5kZW50IGFuZCB3aWxsIHVzdWFsbHkgYmUKICAgICAgICAgVW5pY29kZSBhcyB3ZWxsLgogCi0gICAgICAgIEZpbGVzIGFyZSBhbHdheXMgb3BlbmVkIGluIGJpbmFyeSBtb2RlLCBldmVuIGlmIG5vIGJpbmFyeSBtb2RlCi0gICAgICAgIHdhcyBzcGVjaWZpZWQuIFRoaXMgaXMgZG9uZSB0byBhdm9pZCBkYXRhIGxvc3MgZHVlIHRvIGVuY29kaW5ncwotICAgICAgICB1c2luZyA4LWJpdCB2YWx1ZXMuIFRoZSBkZWZhdWx0IGZpbGUgbW9kZSBpcyAncmInIG1lYW5pbmcgdG8KLSAgICAgICAgb3BlbiB0aGUgZmlsZSBpbiBiaW5hcnkgcmVhZCBtb2RlLgorICAgICAgICBVbmRlcmx5aW5nIGVuY29kZWQgZmlsZXMgYXJlIGFsd2F5cyBvcGVuZWQgaW4gYmluYXJ5IG1vZGUuCisgICAgICAgIFRoZSBkZWZhdWx0IGZpbGUgbW9kZSBpcyAncicsIG1lYW5pbmcgdG8gb3BlbiB0aGUgZmlsZSBpbiByZWFkIG1vZGUuCiAKICAgICAgICAgZW5jb2Rpbmcgc3BlY2lmaWVzIHRoZSBlbmNvZGluZyB3aGljaCBpcyB0byBiZSB1c2VkIGZvciB0aGUKICAgICAgICAgZmlsZS4KQEAgLTkwNywxMyArOTAyLDEzIEBACiAgICAgIiIiIFJldHVybiBhIHdyYXBwZWQgdmVyc2lvbiBvZiBmaWxlIHdoaWNoIHByb3ZpZGVzIHRyYW5zcGFyZW50CiAgICAgICAgIGVuY29kaW5nIHRyYW5zbGF0aW9uLgogCi0gICAgICAgIFN0cmluZ3Mgd3JpdHRlbiB0byB0aGUgd3JhcHBlZCBmaWxlIGFyZSBpbnRlcnByZXRlZCBhY2NvcmRpbmcKLSAgICAgICAgdG8gdGhlIGdpdmVuIGRhdGFfZW5jb2RpbmcgYW5kIHRoZW4gd3JpdHRlbiB0byB0aGUgb3JpZ2luYWwKLSAgICAgICAgZmlsZSBhcyBzdHJpbmcgdXNpbmcgZmlsZV9lbmNvZGluZy4gVGhlIGludGVybWVkaWF0ZSBlbmNvZGluZworICAgICAgICBEYXRhIHdyaXR0ZW4gdG8gdGhlIHdyYXBwZWQgZmlsZSBpcyBkZWNvZGVkIGFjY29yZGluZworICAgICAgICB0byB0aGUgZ2l2ZW4gZGF0YV9lbmNvZGluZyBhbmQgdGhlbiBlbmNvZGVkIHRvIHRoZSB1bmRlcmx5aW5nCisgICAgICAgIGZpbGUgdXNpbmcgZmlsZV9lbmNvZGluZy4gVGhlIGludGVybWVkaWF0ZSBkYXRhIHR5cGUKICAgICAgICAgd2lsbCB1c3VhbGx5IGJlIFVuaWNvZGUgYnV0IGRlcGVuZHMgb24gdGhlIHNwZWNpZmllZCBjb2RlY3MuCiAKLSAgICAgICAgU3RyaW5ncyBhcmUgcmVhZCBmcm9tIHRoZSBmaWxlIHVzaW5nIGZpbGVfZW5jb2RpbmcgYW5kIHRoZW4KLSAgICAgICAgcGFzc2VkIGJhY2sgdG8gdGhlIGNhbGxlciBhcyBzdHJpbmcgdXNpbmcgZGF0YV9lbmNvZGluZy4KKyAgICAgICAgQnl0ZXMgcmVhZCBmcm9tIHRoZSBmaWxlIGFyZSBkZWNvZGVkIHVzaW5nIGZpbGVfZW5jb2RpbmcgYW5kIHRoZW4KKyAgICAgICAgcGFzc2VkIGJhY2sgdG8gdGhlIGNhbGxlciBlbmNvZGVkIHVzaW5nIGRhdGFfZW5jb2RpbmcuCiAKICAgICAgICAgSWYgZmlsZV9lbmNvZGluZyBpcyBub3QgZ2l2ZW4sIGl0IGRlZmF1bHRzIHRvIGRhdGFfZW5jb2RpbmcuCiAKQEAgLTEwMTIsNyArMTAwNyw3IEBACiAgICAgIiIiCiAgICAgRW5jb2RpbmcgaXRlcmF0b3IuCiAKLSAgICBFbmNvZGVzIHRoZSBpbnB1dCBzdHJpbmdzIGZyb20gdGhlIGl0ZXJhdG9yIHVzaW5nIGEgSW5jcmVtZW50YWxFbmNvZGVyLgorICAgIEVuY29kZXMgdGhlIGlucHV0IHN0cmluZ3MgZnJvbSB0aGUgaXRlcmF0b3IgdXNpbmcgYW4gSW5jcmVtZW50YWxFbmNvZGVyLgogCiAgICAgZXJyb3JzIGFuZCBrd2FyZ3MgYXJlIHBhc3NlZCB0aHJvdWdoIHRvIHRoZSBJbmNyZW1lbnRhbEVuY29kZXIKICAgICBjb25zdHJ1Y3Rvci4KQEAgLTEwMzAsNyArMTAyNSw3IEBACiAgICAgIiIiCiAgICAgRGVjb2RpbmcgaXRlcmF0b3IuCiAKLSAgICBEZWNvZGVzIHRoZSBpbnB1dCBzdHJpbmdzIGZyb20gdGhlIGl0ZXJhdG9yIHVzaW5nIGEgSW5jcmVtZW50YWxEZWNvZGVyLgorICAgIERlY29kZXMgdGhlIGlucHV0IHN0cmluZ3MgZnJvbSB0aGUgaXRlcmF0b3IgdXNpbmcgYW4gSW5jcmVtZW50YWxEZWNvZGVyLgogCiAgICAgZXJyb3JzIGFuZCBrd2FyZ3MgYXJlIHBhc3NlZCB0aHJvdWdoIHRvIHRoZSBJbmNyZW1lbnRhbERlY29kZXIKICAgICBjb25zdHJ1Y3Rvci4KQEAgLTEwNjYsNyArMTA2MSw3IEBACiAgICAgICAgIGR1cmluZyB0cmFuc2xhdGlvbi4KIAogICAgICAgICBPbmUgZXhhbXBsZSB3aGVyZSB0aGlzIGhhcHBlbnMgaXMgY3A4NzUucHkgd2hpY2ggZGVjb2RlcwotICAgICAgICBtdWx0aXBsZSBjaGFyYWN0ZXIgdG8gXHUwMDFhLgorICAgICAgICBtdWx0aXBsZSBjaGFyYWN0ZXIgdG8gXFx1MDAxYS4KIAogICAgICIiIgogICAgIG0gPSB7fQpkaWZmIC0tZ2l0IGEvTGliL2NvbGxlY3Rpb25zL19faW5pdF9fLnB5IGIvTGliL2NvbGxlY3Rpb25zL19faW5pdF9fLnB5CmluZGV4IGQ3MzcyOTUuLmY5NDIxMGUgMTAwNjQ0Ci0tLSBhL0xpYi9jb2xsZWN0aW9ucy9fX2luaXRfXy5weQorKysgYi9MaWIvY29sbGVjdGlvbnMvX19pbml0X18ucHkKQEAgLTMsMTYgKzMsMTYgQEAKIAogIyBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIGNvbnRpbnVlIHRvIG1ha2UgdGhlIGNvbGxlY3Rpb25zIEFCQ3MKICMgYXZhaWxhYmxlIHRocm91Z2ggdGhlIGNvbGxlY3Rpb25zIG1vZHVsZS4KLWZyb20gY29sbGVjdGlvbnMuYWJjIGltcG9ydCAqCi1pbXBvcnQgY29sbGVjdGlvbnMuYWJjCi1fX2FsbF9fICs9IGNvbGxlY3Rpb25zLmFiYy5fX2FsbF9fCitmcm9tIF9jb2xsZWN0aW9uc19hYmMgaW1wb3J0ICoKK2ltcG9ydCBfY29sbGVjdGlvbnNfYWJjCitfX2FsbF9fICs9IF9jb2xsZWN0aW9uc19hYmMuX19hbGxfXwogCiBmcm9tIF9jb2xsZWN0aW9ucyBpbXBvcnQgZGVxdWUsIGRlZmF1bHRkaWN0CiBmcm9tIG9wZXJhdG9yIGltcG9ydCBpdGVtZ2V0dGVyIGFzIF9pdGVtZ2V0dGVyLCBlcSBhcyBfZXEKIGZyb20ga2V5d29yZCBpbXBvcnQgaXNrZXl3b3JkIGFzIF9pc2tleXdvcmQKIGltcG9ydCBzeXMgYXMgX3N5cwogaW1wb3J0IGhlYXBxIGFzIF9oZWFwcQotZnJvbSB3ZWFrcmVmIGltcG9ydCBwcm94eSBhcyBfcHJveHkKK2Zyb20gX3dlYWtyZWYgaW1wb3J0IHByb3h5IGFzIF9wcm94eQogZnJvbSBpdGVydG9vbHMgaW1wb3J0IHJlcGVhdCBhcyBfcmVwZWF0LCBjaGFpbiBhcyBfY2hhaW4sIHN0YXJtYXAgYXMgX3N0YXJtYXAKIGZyb20gcmVwcmxpYiBpbXBvcnQgcmVjdXJzaXZlX3JlcHIgYXMgX3JlY3Vyc2l2ZV9yZXByCiAKQEAgLTM4LDEyICszOCwxNiBAQAogICAgICMgSW5kaXZpZHVhbCBsaW5rcyBhcmUga2VwdCBhbGl2ZSBieSB0aGUgaGFyZCByZWZlcmVuY2UgaW4gc2VsZi5fX21hcC4KICAgICAjIFRob3NlIGhhcmQgcmVmZXJlbmNlcyBkaXNhcHBlYXIgd2hlbiBhIGtleSBpcyBkZWxldGVkIGZyb20gYW4gT3JkZXJlZERpY3QuCiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dkcyk6CisgICAgZGVmIF9faW5pdF9fKCphcmdzLCAqKmt3ZHMpOgogICAgICAgICAnJydJbml0aWFsaXplIGFuIG9yZGVyZWQgZGljdGlvbmFyeS4gIFRoZSBzaWduYXR1cmUgaXMgdGhlIHNhbWUgYXMKICAgICAgICAgcmVndWxhciBkaWN0aW9uYXJpZXMsIGJ1dCBrZXl3b3JkIGFyZ3VtZW50cyBhcmUgbm90IHJlY29tbWVuZGVkIGJlY2F1c2UKICAgICAgICAgdGhlaXIgaW5zZXJ0aW9uIG9yZGVyIGlzIGFyYml0cmFyeS4KIAogICAgICAgICAnJycKKyAgICAgICAgaWYgbm90IGFyZ3M6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoImRlc2NyaXB0b3IgJ19faW5pdF9fJyBvZiAnT3JkZXJlZERpY3QnIG9iamVjdCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5lZWRzIGFuIGFyZ3VtZW50IikKKyAgICAgICAgc2VsZiwgKmFyZ3MgPSBhcmdzCiAgICAgICAgIGlmIGxlbihhcmdzKSA+IDE6CiAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ2V4cGVjdGVkIGF0IG1vc3QgMSBhcmd1bWVudHMsIGdvdCAlZCcgJSBsZW4oYXJncykpCiAgICAgICAgIHRyeToKQEAgLTE5OSwxMyArMjAzLDEwIEBACiAKICAgICBkZWYgX19yZWR1Y2VfXyhzZWxmKToKICAgICAgICAgJ1JldHVybiBzdGF0ZSBpbmZvcm1hdGlvbiBmb3IgcGlja2xpbmcnCi0gICAgICAgIGl0ZW1zID0gW1trLCBzZWxmW2tdXSBmb3IgayBpbiBzZWxmXQogICAgICAgICBpbnN0X2RpY3QgPSB2YXJzKHNlbGYpLmNvcHkoKQogICAgICAgICBmb3IgayBpbiB2YXJzKE9yZGVyZWREaWN0KCkpOgogICAgICAgICAgICAgaW5zdF9kaWN0LnBvcChrLCBOb25lKQotICAgICAgICBpZiBpbnN0X2RpY3Q6Ci0gICAgICAgICAgICByZXR1cm4gKHNlbGYuX19jbGFzc19fLCAoaXRlbXMsKSwgaW5zdF9kaWN0KQotICAgICAgICByZXR1cm4gc2VsZi5fX2NsYXNzX18sIChpdGVtcywpCisgICAgICAgIHJldHVybiBzZWxmLl9fY2xhc3NfXywgKCksIGluc3RfZGljdCBvciBOb25lLCBOb25lLCBpdGVyKHNlbGYuaXRlbXMoKSkKIAogICAgIGRlZiBjb3B5KHNlbGYpOgogICAgICAgICAnb2QuY29weSgpIC0+IGEgc2hhbGxvdyBjb3B5IG9mIG9kJwpAQCAtMjcxLDI1ICsyNzIsMTQgQEAKICAgICAgICAgJ1JldHVybiBhIG5pY2VseSBmb3JtYXR0ZWQgcmVwcmVzZW50YXRpb24gc3RyaW5nJwogICAgICAgICByZXR1cm4gc2VsZi5fX2NsYXNzX18uX19uYW1lX18gKyAnKHtyZXByX2ZtdH0pJyAlIHNlbGYKIAotICAgIEBwcm9wZXJ0eQotICAgIGRlZiBfX2RpY3RfXyhzZWxmKToKLSAgICAgICAgJ0EgbmV3IE9yZGVyZWREaWN0IG1hcHBpbmcgZmllbGQgbmFtZXMgdG8gdGhlaXIgdmFsdWVzJwotICAgICAgICByZXR1cm4gT3JkZXJlZERpY3QoemlwKHNlbGYuX2ZpZWxkcywgc2VsZikpCi0KICAgICBkZWYgX2FzZGljdChzZWxmKToKLSAgICAgICAgJycnUmV0dXJuIGEgbmV3IE9yZGVyZWREaWN0IHdoaWNoIG1hcHMgZmllbGQgbmFtZXMgdG8gdGhlaXIgdmFsdWVzLgotICAgICAgICAgICBUaGlzIG1ldGhvZCBpcyBvYnNvbGV0ZS4gIFVzZSB2YXJzKG50KSBvciBudC5fX2RpY3RfXyBpbnN0ZWFkLgotICAgICAgICAnJycKLSAgICAgICAgcmV0dXJuIHNlbGYuX19kaWN0X18KKyAgICAgICAgJ1JldHVybiBhIG5ldyBPcmRlcmVkRGljdCB3aGljaCBtYXBzIGZpZWxkIG5hbWVzIHRvIHRoZWlyIHZhbHVlcy4nCisgICAgICAgIHJldHVybiBPcmRlcmVkRGljdCh6aXAoc2VsZi5fZmllbGRzLCBzZWxmKSkKIAogICAgIGRlZiBfX2dldG5ld2FyZ3NfXyhzZWxmKToKICAgICAgICAgJ1JldHVybiBzZWxmIGFzIGEgcGxhaW4gdHVwbGUuICBVc2VkIGJ5IGNvcHkgYW5kIHBpY2tsZS4nCiAgICAgICAgIHJldHVybiB0dXBsZShzZWxmKQogCi0gICAgZGVmIF9fZ2V0c3RhdGVfXyhzZWxmKToKLSAgICAgICAgJ0V4Y2x1ZGUgdGhlIE9yZGVyZWREaWN0IGZyb20gcGlja2xpbmcnCi0gICAgICAgIHJldHVybiBOb25lCi0KIHtmaWVsZF9kZWZzfQogIiIiCiAKQEAgLTMyOCw2ICszMTgsNyBAQAogICAgIGlmIGlzaW5zdGFuY2UoZmllbGRfbmFtZXMsIHN0cik6CiAgICAgICAgIGZpZWxkX25hbWVzID0gZmllbGRfbmFtZXMucmVwbGFjZSgnLCcsICcgJykuc3BsaXQoKQogICAgIGZpZWxkX25hbWVzID0gbGlzdChtYXAoc3RyLCBmaWVsZF9uYW1lcykpCisgICAgdHlwZW5hbWUgPSBzdHIodHlwZW5hbWUpCiAgICAgaWYgcmVuYW1lOgogICAgICAgICBzZWVuID0gc2V0KCkKICAgICAgICAgZm9yIGluZGV4LCBuYW1lIGluIGVudW1lcmF0ZShmaWVsZF9uYW1lcyk6CkBAIC0zMzgsNiArMzI5LDggQEAKICAgICAgICAgICAgICAgICBmaWVsZF9uYW1lc1tpbmRleF0gPSAnXyVkJyAlIGluZGV4CiAgICAgICAgICAgICBzZWVuLmFkZChuYW1lKQogICAgIGZvciBuYW1lIGluIFt0eXBlbmFtZV0gKyBmaWVsZF9uYW1lczoKKyAgICAgICAgaWYgdHlwZShuYW1lKSAhPSBzdHI6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ1R5cGUgbmFtZXMgYW5kIGZpZWxkIG5hbWVzIG11c3QgYmUgc3RyaW5ncycpCiAgICAgICAgIGlmIG5vdCBuYW1lLmlzaWRlbnRpZmllcigpOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignVHlwZSBuYW1lcyBhbmQgZmllbGQgbmFtZXMgbXVzdCBiZSB2YWxpZCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpZGVudGlmaWVyczogJXInICUgbmFtZSkKQEAgLTQ1Miw3ICs0NDUsNyBAQAogICAgICMgICBodHRwOi8vY29kZS5hY3RpdmVzdGF0ZS5jb20vcmVjaXBlcy8yNTkxNzQvCiAgICAgIyAgIEtudXRoLCBUQU9DUCBWb2wuIElJIHNlY3Rpb24gNC42LjMKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpdGVyYWJsZT1Ob25lLCAqKmt3ZHMpOgorICAgIGRlZiBfX2luaXRfXygqYXJncywgKiprd2RzKToKICAgICAgICAgJycnQ3JlYXRlIGEgbmV3LCBlbXB0eSBDb3VudGVyIG9iamVjdC4gIEFuZCBpZiBnaXZlbiwgY291bnQgZWxlbWVudHMKICAgICAgICAgZnJvbSBhbiBpbnB1dCBpdGVyYWJsZS4gIE9yLCBpbml0aWFsaXplIHRoZSBjb3VudCBmcm9tIGFub3RoZXIgbWFwcGluZwogICAgICAgICBvZiBlbGVtZW50cyB0byB0aGVpciBjb3VudHMuCkBAIC00NjMsOCArNDU2LDE0IEBACiAgICAgICAgID4+PiBjID0gQ291bnRlcihhPTQsIGI9MikgICAgICAgICAgICAgICAgICAgIyBhIG5ldyBjb3VudGVyIGZyb20ga2V5d29yZCBhcmdzCiAKICAgICAgICAgJycnCi0gICAgICAgIHN1cGVyKCkuX19pbml0X18oKQotICAgICAgICBzZWxmLnVwZGF0ZShpdGVyYWJsZSwgKiprd2RzKQorICAgICAgICBpZiBub3QgYXJnczoKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiZGVzY3JpcHRvciAnX19pbml0X18nIG9mICdDb3VudGVyJyBvYmplY3QgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuZWVkcyBhbiBhcmd1bWVudCIpCisgICAgICAgIHNlbGYsICphcmdzID0gYXJncworICAgICAgICBpZiBsZW4oYXJncykgPiAxOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdleHBlY3RlZCBhdCBtb3N0IDEgYXJndW1lbnRzLCBnb3QgJWQnICUgbGVuKGFyZ3MpKQorICAgICAgICBzdXBlcihDb3VudGVyLCBzZWxmKS5fX2luaXRfXygpCisgICAgICAgIHNlbGYudXBkYXRlKCphcmdzLCAqKmt3ZHMpCiAKICAgICBkZWYgX19taXNzaW5nX18oc2VsZiwga2V5KToKICAgICAgICAgJ1RoZSBjb3VudCBvZiBlbGVtZW50cyBub3QgaW4gdGhlIENvdW50ZXIgaXMgemVyby4nCkBAIC01MTUsNyArNTE0LDcgQEAKICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigKICAgICAgICAgICAgICdDb3VudGVyLmZyb21rZXlzKCkgaXMgdW5kZWZpbmVkLiAgVXNlIENvdW50ZXIoaXRlcmFibGUpIGluc3RlYWQuJykKIAotICAgIGRlZiB1cGRhdGUoc2VsZiwgaXRlcmFibGU9Tm9uZSwgKiprd2RzKToKKyAgICBkZWYgdXBkYXRlKCphcmdzLCAqKmt3ZHMpOgogICAgICAgICAnJydMaWtlIGRpY3QudXBkYXRlKCkgYnV0IGFkZCBjb3VudHMgaW5zdGVhZCBvZiByZXBsYWNpbmcgdGhlbS4KIAogICAgICAgICBTb3VyY2UgY2FuIGJlIGFuIGl0ZXJhYmxlLCBhIGRpY3Rpb25hcnksIG9yIGFub3RoZXIgQ291bnRlciBpbnN0YW5jZS4KQEAgLTUzNSw2ICs1MzQsMTMgQEAKICAgICAgICAgIyBjb250ZXh0cy4gIEluc3RlYWQsIHdlIGltcGxlbWVudCBzdHJhaWdodC1hZGRpdGlvbi4gIEJvdGggdGhlIGlucHV0cwogICAgICAgICAjIGFuZCBvdXRwdXRzIGFyZSBhbGxvd2VkIHRvIGNvbnRhaW4gemVybyBhbmQgbmVnYXRpdmUgY291bnRzLgogCisgICAgICAgIGlmIG5vdCBhcmdzOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJkZXNjcmlwdG9yICd1cGRhdGUnIG9mICdDb3VudGVyJyBvYmplY3QgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuZWVkcyBhbiBhcmd1bWVudCIpCisgICAgICAgIHNlbGYsICphcmdzID0gYXJncworICAgICAgICBpZiBsZW4oYXJncykgPiAxOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdleHBlY3RlZCBhdCBtb3N0IDEgYXJndW1lbnRzLCBnb3QgJWQnICUgbGVuKGFyZ3MpKQorICAgICAgICBpdGVyYWJsZSA9IGFyZ3NbMF0gaWYgYXJncyBlbHNlIE5vbmUKICAgICAgICAgaWYgaXRlcmFibGUgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGl0ZXJhYmxlLCBNYXBwaW5nKToKICAgICAgICAgICAgICAgICBpZiBzZWxmOgpAQCAtNTQyLDEzICs1NDgsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgZm9yIGVsZW0sIGNvdW50IGluIGl0ZXJhYmxlLml0ZW1zKCk6CiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmW2VsZW1dID0gY291bnQgKyBzZWxmX2dldChlbGVtLCAwKQogICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHN1cGVyKCkudXBkYXRlKGl0ZXJhYmxlKSAjIGZhc3QgcGF0aCB3aGVuIGNvdW50ZXIgaXMgZW1wdHkKKyAgICAgICAgICAgICAgICAgICAgc3VwZXIoQ291bnRlciwgc2VsZikudXBkYXRlKGl0ZXJhYmxlKSAjIGZhc3QgcGF0aCB3aGVuIGNvdW50ZXIgaXMgZW1wdHkKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgX2NvdW50X2VsZW1lbnRzKHNlbGYsIGl0ZXJhYmxlKQogICAgICAgICBpZiBrd2RzOgogICAgICAgICAgICAgc2VsZi51cGRhdGUoa3dkcykKIAotICAgIGRlZiBzdWJ0cmFjdChzZWxmLCBpdGVyYWJsZT1Ob25lLCAqKmt3ZHMpOgorICAgIGRlZiBzdWJ0cmFjdCgqYXJncywgKiprd2RzKToKICAgICAgICAgJycnTGlrZSBkaWN0LnVwZGF0ZSgpIGJ1dCBzdWJ0cmFjdHMgY291bnRzIGluc3RlYWQgb2YgcmVwbGFjaW5nIHRoZW0uCiAgICAgICAgIENvdW50cyBjYW4gYmUgcmVkdWNlZCBiZWxvdyB6ZXJvLiAgQm90aCB0aGUgaW5wdXRzIGFuZCBvdXRwdXRzIGFyZQogICAgICAgICBhbGxvd2VkIHRvIGNvbnRhaW4gemVybyBhbmQgbmVnYXRpdmUgY291bnRzLgpAQCAtNTY0LDYgKzU3MCwxMyBAQAogICAgICAgICAtMQogCiAgICAgICAgICcnJworICAgICAgICBpZiBub3QgYXJnczoKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiZGVzY3JpcHRvciAnc3VidHJhY3QnIG9mICdDb3VudGVyJyBvYmplY3QgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuZWVkcyBhbiBhcmd1bWVudCIpCisgICAgICAgIHNlbGYsICphcmdzID0gYXJncworICAgICAgICBpZiBsZW4oYXJncykgPiAxOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdleHBlY3RlZCBhdCBtb3N0IDEgYXJndW1lbnRzLCBnb3QgJWQnICUgbGVuKGFyZ3MpKQorICAgICAgICBpdGVyYWJsZSA9IGFyZ3NbMF0gaWYgYXJncyBlbHNlIE5vbmUKICAgICAgICAgaWYgaXRlcmFibGUgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBzZWxmX2dldCA9IHNlbGYuZ2V0CiAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGl0ZXJhYmxlLCBNYXBwaW5nKToKQEAgLTgyMiw5ICs4MzUsMTMgQEAKIAogICAgIF9fY29weV9fID0gY29weQogCi0gICAgZGVmIG5ld19jaGlsZChzZWxmKTogICAgICAgICAgICAgICAgICAgICAgICAjIGxpa2UgRGphbmdvJ3MgQ29udGV4dC5wdXNoKCkKLSAgICAgICAgJ05ldyBDaGFpbk1hcCB3aXRoIGEgbmV3IGRpY3QgZm9sbG93ZWQgYnkgYWxsIHByZXZpb3VzIG1hcHMuJwotICAgICAgICByZXR1cm4gc2VsZi5fX2NsYXNzX18oe30sICpzZWxmLm1hcHMpCisgICAgZGVmIG5ld19jaGlsZChzZWxmLCBtPU5vbmUpOiAgICAgICAgICAgICAgICAjIGxpa2UgRGphbmdvJ3MgQ29udGV4dC5wdXNoKCkKKyAgICAgICAgJycnTmV3IENoYWluTWFwIHdpdGggYSBuZXcgbWFwIGZvbGxvd2VkIGJ5IGFsbCBwcmV2aW91cyBtYXBzLgorICAgICAgICBJZiBubyBtYXAgaXMgcHJvdmlkZWQsIGFuIGVtcHR5IGRpY3QgaXMgdXNlZC4KKyAgICAgICAgJycnCisgICAgICAgIGlmIG0gaXMgTm9uZToKKyAgICAgICAgICAgIG0gPSB7fQorICAgICAgICByZXR1cm4gc2VsZi5fX2NsYXNzX18obSwgKnNlbGYubWFwcykKIAogICAgIEBwcm9wZXJ0eQogICAgIGRlZiBwYXJlbnRzKHNlbGYpOiAgICAgICAgICAgICAgICAgICAgICAgICAgIyBsaWtlIERqYW5nbydzIENvbnRleHQucG9wKCkKQEAgLTg2Niw3ICs4ODMsMjIgQEAKIGNsYXNzIFVzZXJEaWN0KE11dGFibGVNYXBwaW5nKToKIAogICAgICMgU3RhcnQgYnkgZmlsbGluZy1vdXQgdGhlIGFic3RyYWN0IG1ldGhvZHMKLSAgICBkZWYgX19pbml0X18oc2VsZiwgZGljdD1Ob25lLCAqKmt3YXJncyk6CisgICAgZGVmIF9faW5pdF9fKCphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIGlmIG5vdCBhcmdzOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJkZXNjcmlwdG9yICdfX2luaXRfXycgb2YgJ1VzZXJEaWN0JyBvYmplY3QgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuZWVkcyBhbiBhcmd1bWVudCIpCisgICAgICAgIHNlbGYsICphcmdzID0gYXJncworICAgICAgICBpZiBsZW4oYXJncykgPiAxOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdleHBlY3RlZCBhdCBtb3N0IDEgYXJndW1lbnRzLCBnb3QgJWQnICUgbGVuKGFyZ3MpKQorICAgICAgICBpZiBhcmdzOgorICAgICAgICAgICAgZGljdCA9IGFyZ3NbMF0KKyAgICAgICAgZWxpZiAnZGljdCcgaW4ga3dhcmdzOgorICAgICAgICAgICAgZGljdCA9IGt3YXJncy5wb3AoJ2RpY3QnKQorICAgICAgICAgICAgaW1wb3J0IHdhcm5pbmdzCisgICAgICAgICAgICB3YXJuaW5ncy53YXJuKCJQYXNzaW5nICdkaWN0JyBhcyBrZXl3b3JkIGFyZ3VtZW50IGlzIGRlcHJlY2F0ZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nLCBzdGFja2xldmVsPTIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBkaWN0ID0gTm9uZQogICAgICAgICBzZWxmLmRhdGEgPSB7fQogICAgICAgICBpZiBkaWN0IGlzIG5vdCBOb25lOgogICAgICAgICAgICAgc2VsZi51cGRhdGUoZGljdCkKZGlmZiAtLWdpdCBhL0xpYi9jb2xsZWN0aW9ucy9hYmMucHkgYi9MaWIvY29sbGVjdGlvbnMvYWJjLnB5CmluZGV4IDc5MzkyNjguLjg5MTYwMGQgMTAwNjQ0Ci0tLSBhL0xpYi9jb2xsZWN0aW9ucy9hYmMucHkKKysrIGIvTGliL2NvbGxlY3Rpb25zL2FiYy5weQpAQCAtMSw3MjggKzEsMiBAQAotIyBDb3B5cmlnaHQgMjAwNyBHb29nbGUsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMgTGljZW5zZWQgdG8gUFNGIHVuZGVyIGEgQ29udHJpYnV0b3IgQWdyZWVtZW50LgotCi0iIiJBYnN0cmFjdCBCYXNlIENsYXNzZXMgKEFCQ3MpIGZvciBjb2xsZWN0aW9ucywgYWNjb3JkaW5nIHRvIFBFUCAzMTE5LgotCi1Vbml0IHRlc3RzIGFyZSBpbiB0ZXN0X2NvbGxlY3Rpb25zLgotIiIiCi0KLWZyb20gYWJjIGltcG9ydCBBQkNNZXRhLCBhYnN0cmFjdG1ldGhvZAotaW1wb3J0IHN5cwotCi1fX2FsbF9fID0gWyJIYXNoYWJsZSIsICJJdGVyYWJsZSIsICJJdGVyYXRvciIsCi0gICAgICAgICAgICJTaXplZCIsICJDb250YWluZXIiLCAiQ2FsbGFibGUiLAotICAgICAgICAgICAiU2V0IiwgIk11dGFibGVTZXQiLAotICAgICAgICAgICAiTWFwcGluZyIsICJNdXRhYmxlTWFwcGluZyIsCi0gICAgICAgICAgICJNYXBwaW5nVmlldyIsICJLZXlzVmlldyIsICJJdGVtc1ZpZXciLCAiVmFsdWVzVmlldyIsCi0gICAgICAgICAgICJTZXF1ZW5jZSIsICJNdXRhYmxlU2VxdWVuY2UiLAotICAgICAgICAgICAiQnl0ZVN0cmluZyIsCi0gICAgICAgICAgIF0KLQotIyBQcml2YXRlIGxpc3Qgb2YgdHlwZXMgdGhhdCB3ZSB3YW50IHRvIHJlZ2lzdGVyIHdpdGggdGhlIHZhcmlvdXMgQUJDcwotIyBzbyB0aGF0IHRoZXkgd2lsbCBwYXNzIHRlc3RzIGxpa2U6Ci0jICAgICAgIGl0ID0gaXRlcihzb21lYnl0ZWFycmF5KQotIyAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShpdCwgSXRlcmFibGUpCi0jIE5vdGU6ICBpbiBvdGhlciBpbXBsZW1lbnRhdGlvbnMsIHRoZXNlIHR5cGVzIG1hbnkgbm90IGJlIGRpc3RpbmN0Ci0jIGFuZCB0aGV5IG1ha2UgaGF2ZSB0aGVpciBvd24gaW1wbGVtZW50YXRpb24gc3BlY2lmaWMgdHlwZXMgdGhhdAotIyBhcmUgbm90IGluY2x1ZGVkIG9uIHRoaXMgbGlzdC4KLWJ5dGVzX2l0ZXJhdG9yID0gdHlwZShpdGVyKGInJykpCi1ieXRlYXJyYXlfaXRlcmF0b3IgPSB0eXBlKGl0ZXIoYnl0ZWFycmF5KCkpKQotI2NhbGxhYmxlX2l0ZXJhdG9yID0gPz8/Ci1kaWN0X2tleWl0ZXJhdG9yID0gdHlwZShpdGVyKHt9LmtleXMoKSkpCi1kaWN0X3ZhbHVlaXRlcmF0b3IgPSB0eXBlKGl0ZXIoe30udmFsdWVzKCkpKQotZGljdF9pdGVtaXRlcmF0b3IgPSB0eXBlKGl0ZXIoe30uaXRlbXMoKSkpCi1saXN0X2l0ZXJhdG9yID0gdHlwZShpdGVyKFtdKSkKLWxpc3RfcmV2ZXJzZWl0ZXJhdG9yID0gdHlwZShpdGVyKHJldmVyc2VkKFtdKSkpCi1yYW5nZV9pdGVyYXRvciA9IHR5cGUoaXRlcihyYW5nZSgwKSkpCi1zZXRfaXRlcmF0b3IgPSB0eXBlKGl0ZXIoc2V0KCkpKQotc3RyX2l0ZXJhdG9yID0gdHlwZShpdGVyKCIiKSkKLXR1cGxlX2l0ZXJhdG9yID0gdHlwZShpdGVyKCgpKSkKLXppcF9pdGVyYXRvciA9IHR5cGUoaXRlcih6aXAoKSkpCi0jIyB2aWV3cyAjIwotZGljdF9rZXlzID0gdHlwZSh7fS5rZXlzKCkpCi1kaWN0X3ZhbHVlcyA9IHR5cGUoe30udmFsdWVzKCkpCi1kaWN0X2l0ZW1zID0gdHlwZSh7fS5pdGVtcygpKQotIyMgbWlzYyAjIwotbWFwcGluZ3Byb3h5ID0gdHlwZSh0eXBlLl9fZGljdF9fKQotCi0KLSMjIyBPTkUtVFJJQ0sgUE9OSUVTICMjIwotCi1jbGFzcyBIYXNoYWJsZShtZXRhY2xhc3M9QUJDTWV0YSk6Ci0KLSAgICBfX3Nsb3RzX18gPSAoKQotCi0gICAgQGFic3RyYWN0bWV0aG9kCi0gICAgZGVmIF9faGFzaF9fKHNlbGYpOgotICAgICAgICByZXR1cm4gMAotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIF9fc3ViY2xhc3Nob29rX18oY2xzLCBDKToKLSAgICAgICAgaWYgY2xzIGlzIEhhc2hhYmxlOgotICAgICAgICAgICAgZm9yIEIgaW4gQy5fX21yb19fOgotICAgICAgICAgICAgICAgIGlmICJfX2hhc2hfXyIgaW4gQi5fX2RpY3RfXzoKLSAgICAgICAgICAgICAgICAgICAgaWYgQi5fX2RpY3RfX1siX19oYXNoX18iXToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAotCi0KLWNsYXNzIEl0ZXJhYmxlKG1ldGFjbGFzcz1BQkNNZXRhKToKLQotICAgIF9fc2xvdHNfXyA9ICgpCi0KLSAgICBAYWJzdHJhY3RtZXRob2QKLSAgICBkZWYgX19pdGVyX18oc2VsZik6Ci0gICAgICAgIHdoaWxlIEZhbHNlOgotICAgICAgICAgICAgeWllbGQgTm9uZQotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIF9fc3ViY2xhc3Nob29rX18oY2xzLCBDKToKLSAgICAgICAgaWYgY2xzIGlzIEl0ZXJhYmxlOgotICAgICAgICAgICAgaWYgYW55KCJfX2l0ZXJfXyIgaW4gQi5fX2RpY3RfXyBmb3IgQiBpbiBDLl9fbXJvX18pOgotICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCi0gICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAotCi0KLWNsYXNzIEl0ZXJhdG9yKEl0ZXJhYmxlKToKLQotICAgIF9fc2xvdHNfXyA9ICgpCi0KLSAgICBAYWJzdHJhY3RtZXRob2QKLSAgICBkZWYgX19uZXh0X18oc2VsZik6Ci0gICAgICAgICdSZXR1cm4gdGhlIG5leHQgaXRlbSBmcm9tIHRoZSBpdGVyYXRvci4gV2hlbiBleGhhdXN0ZWQsIHJhaXNlIFN0b3BJdGVyYXRpb24nCi0gICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24KLQotICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBfX3N1YmNsYXNzaG9va19fKGNscywgQyk6Ci0gICAgICAgIGlmIGNscyBpcyBJdGVyYXRvcjoKLSAgICAgICAgICAgIGlmIChhbnkoIl9fbmV4dF9fIiBpbiBCLl9fZGljdF9fIGZvciBCIGluIEMuX19tcm9fXykgYW5kCi0gICAgICAgICAgICAgICAgYW55KCJfX2l0ZXJfXyIgaW4gQi5fX2RpY3RfXyBmb3IgQiBpbiBDLl9fbXJvX18pKToKLSAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQotICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKLQotSXRlcmF0b3IucmVnaXN0ZXIoYnl0ZXNfaXRlcmF0b3IpCi1JdGVyYXRvci5yZWdpc3RlcihieXRlYXJyYXlfaXRlcmF0b3IpCi0jSXRlcmF0b3IucmVnaXN0ZXIoY2FsbGFibGVfaXRlcmF0b3IpCi1JdGVyYXRvci5yZWdpc3RlcihkaWN0X2tleWl0ZXJhdG9yKQotSXRlcmF0b3IucmVnaXN0ZXIoZGljdF92YWx1ZWl0ZXJhdG9yKQotSXRlcmF0b3IucmVnaXN0ZXIoZGljdF9pdGVtaXRlcmF0b3IpCi1JdGVyYXRvci5yZWdpc3RlcihsaXN0X2l0ZXJhdG9yKQotSXRlcmF0b3IucmVnaXN0ZXIobGlzdF9yZXZlcnNlaXRlcmF0b3IpCi1JdGVyYXRvci5yZWdpc3RlcihyYW5nZV9pdGVyYXRvcikKLUl0ZXJhdG9yLnJlZ2lzdGVyKHNldF9pdGVyYXRvcikKLUl0ZXJhdG9yLnJlZ2lzdGVyKHN0cl9pdGVyYXRvcikKLUl0ZXJhdG9yLnJlZ2lzdGVyKHR1cGxlX2l0ZXJhdG9yKQotSXRlcmF0b3IucmVnaXN0ZXIoemlwX2l0ZXJhdG9yKQotCi1jbGFzcyBTaXplZChtZXRhY2xhc3M9QUJDTWV0YSk6Ci0KLSAgICBfX3Nsb3RzX18gPSAoKQotCi0gICAgQGFic3RyYWN0bWV0aG9kCi0gICAgZGVmIF9fbGVuX18oc2VsZik6Ci0gICAgICAgIHJldHVybiAwCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgX19zdWJjbGFzc2hvb2tfXyhjbHMsIEMpOgotICAgICAgICBpZiBjbHMgaXMgU2l6ZWQ6Ci0gICAgICAgICAgICBpZiBhbnkoIl9fbGVuX18iIGluIEIuX19kaWN0X18gZm9yIEIgaW4gQy5fX21yb19fKToKLSAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQotICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKLQotCi1jbGFzcyBDb250YWluZXIobWV0YWNsYXNzPUFCQ01ldGEpOgotCi0gICAgX19zbG90c19fID0gKCkKLQotICAgIEBhYnN0cmFjdG1ldGhvZAotICAgIGRlZiBfX2NvbnRhaW5zX18oc2VsZiwgeCk6Ci0gICAgICAgIHJldHVybiBGYWxzZQotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIF9fc3ViY2xhc3Nob29rX18oY2xzLCBDKToKLSAgICAgICAgaWYgY2xzIGlzIENvbnRhaW5lcjoKLSAgICAgICAgICAgIGlmIGFueSgiX19jb250YWluc19fIiBpbiBCLl9fZGljdF9fIGZvciBCIGluIEMuX19tcm9fXyk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKLSAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCi0KLQotY2xhc3MgQ2FsbGFibGUobWV0YWNsYXNzPUFCQ01ldGEpOgotCi0gICAgX19zbG90c19fID0gKCkKLQotICAgIEBhYnN0cmFjdG1ldGhvZAotICAgIGRlZiBfX2NhbGxfXyhzZWxmLCAqYXJncywgKiprd2RzKToKLSAgICAgICAgcmV0dXJuIEZhbHNlCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgX19zdWJjbGFzc2hvb2tfXyhjbHMsIEMpOgotICAgICAgICBpZiBjbHMgaXMgQ2FsbGFibGU6Ci0gICAgICAgICAgICBpZiBhbnkoIl9fY2FsbF9fIiBpbiBCLl9fZGljdF9fIGZvciBCIGluIEMuX19tcm9fXyk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKLSAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCi0KLQotIyMjIFNFVFMgIyMjCi0KLQotY2xhc3MgU2V0KFNpemVkLCBJdGVyYWJsZSwgQ29udGFpbmVyKToKLQotICAgICIiIkEgc2V0IGlzIGEgZmluaXRlLCBpdGVyYWJsZSBjb250YWluZXIuCi0KLSAgICBUaGlzIGNsYXNzIHByb3ZpZGVzIGNvbmNyZXRlIGdlbmVyaWMgaW1wbGVtZW50YXRpb25zIG9mIGFsbAotICAgIG1ldGhvZHMgZXhjZXB0IGZvciBfX2NvbnRhaW5zX18sIF9faXRlcl9fIGFuZCBfX2xlbl9fLgotCi0gICAgVG8gb3ZlcnJpZGUgdGhlIGNvbXBhcmlzb25zIChwcmVzdW1hYmx5IGZvciBzcGVlZCwgYXMgdGhlCi0gICAgc2VtYW50aWNzIGFyZSBmaXhlZCksIGFsbCB5b3UgaGF2ZSB0byBkbyBpcyByZWRlZmluZSBfX2xlX18gYW5kCi0gICAgdGhlbiB0aGUgb3RoZXIgb3BlcmF0aW9ucyB3aWxsIGF1dG9tYXRpY2FsbHkgZm9sbG93IHN1aXQuCi0gICAgIiIiCi0KLSAgICBfX3Nsb3RzX18gPSAoKQotCi0gICAgZGVmIF9fbGVfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBTZXQpOgotICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCi0gICAgICAgIGlmIGxlbihzZWxmKSA+IGxlbihvdGhlcik6Ci0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgZm9yIGVsZW0gaW4gc2VsZjoKLSAgICAgICAgICAgIGlmIGVsZW0gbm90IGluIG90aGVyOgotICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICByZXR1cm4gVHJ1ZQotCi0gICAgZGVmIF9fbHRfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBTZXQpOgotICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCi0gICAgICAgIHJldHVybiBsZW4oc2VsZikgPCBsZW4ob3RoZXIpIGFuZCBzZWxmLl9fbGVfXyhvdGhlcikKLQotICAgIGRlZiBfX2d0X18oc2VsZiwgb3RoZXIpOgotICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgU2V0KToKLSAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAotICAgICAgICByZXR1cm4gb3RoZXIuX19sdF9fKHNlbGYpCi0KLSAgICBkZWYgX19nZV9fKHNlbGYsIG90aGVyKToKLSAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIFNldCk6Ci0gICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKLSAgICAgICAgcmV0dXJuIG90aGVyLl9fbGVfXyhzZWxmKQotCi0gICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBTZXQpOgotICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCi0gICAgICAgIHJldHVybiBsZW4oc2VsZikgPT0gbGVuKG90aGVyKSBhbmQgc2VsZi5fX2xlX18ob3RoZXIpCi0KLSAgICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKLSAgICAgICAgcmV0dXJuIG5vdCAoc2VsZiA9PSBvdGhlcikKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBfZnJvbV9pdGVyYWJsZShjbHMsIGl0KToKLSAgICAgICAgJycnQ29uc3RydWN0IGFuIGluc3RhbmNlIG9mIHRoZSBjbGFzcyBmcm9tIGFueSBpdGVyYWJsZSBpbnB1dC4KLQotICAgICAgICBNdXN0IG92ZXJyaWRlIHRoaXMgbWV0aG9kIGlmIHRoZSBjbGFzcyBjb25zdHJ1Y3RvciBzaWduYXR1cmUKLSAgICAgICAgZG9lcyBub3QgYWNjZXB0IGFuIGl0ZXJhYmxlIGZvciBhbiBpbnB1dC4KLSAgICAgICAgJycnCi0gICAgICAgIHJldHVybiBjbHMoaXQpCi0KLSAgICBkZWYgX19hbmRfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBJdGVyYWJsZSk6Ci0gICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKLSAgICAgICAgcmV0dXJuIHNlbGYuX2Zyb21faXRlcmFibGUodmFsdWUgZm9yIHZhbHVlIGluIG90aGVyIGlmIHZhbHVlIGluIHNlbGYpCi0KLSAgICBkZWYgaXNkaXNqb2ludChzZWxmLCBvdGhlcik6Ci0gICAgICAgICdSZXR1cm4gVHJ1ZSBpZiB0d28gc2V0cyBoYXZlIGEgbnVsbCBpbnRlcnNlY3Rpb24uJwotICAgICAgICBmb3IgdmFsdWUgaW4gb3RoZXI6Ci0gICAgICAgICAgICBpZiB2YWx1ZSBpbiBzZWxmOgotICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICByZXR1cm4gVHJ1ZQotCi0gICAgZGVmIF9fb3JfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBJdGVyYWJsZSk6Ci0gICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKLSAgICAgICAgY2hhaW4gPSAoZSBmb3IgcyBpbiAoc2VsZiwgb3RoZXIpIGZvciBlIGluIHMpCi0gICAgICAgIHJldHVybiBzZWxmLl9mcm9tX2l0ZXJhYmxlKGNoYWluKQotCi0gICAgZGVmIF9fc3ViX18oc2VsZiwgb3RoZXIpOgotICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgU2V0KToKLSAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBJdGVyYWJsZSk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCi0gICAgICAgICAgICBvdGhlciA9IHNlbGYuX2Zyb21faXRlcmFibGUob3RoZXIpCi0gICAgICAgIHJldHVybiBzZWxmLl9mcm9tX2l0ZXJhYmxlKHZhbHVlIGZvciB2YWx1ZSBpbiBzZWxmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHZhbHVlIG5vdCBpbiBvdGhlcikKLQotICAgIGRlZiBfX3hvcl9fKHNlbGYsIG90aGVyKToKLSAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIFNldCk6Ci0gICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgSXRlcmFibGUpOgotICAgICAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAotICAgICAgICAgICAgb3RoZXIgPSBzZWxmLl9mcm9tX2l0ZXJhYmxlKG90aGVyKQotICAgICAgICByZXR1cm4gKHNlbGYgLSBvdGhlcikgfCAob3RoZXIgLSBzZWxmKQotCi0gICAgZGVmIF9oYXNoKHNlbGYpOgotICAgICAgICAiIiJDb21wdXRlIHRoZSBoYXNoIHZhbHVlIG9mIGEgc2V0LgotCi0gICAgICAgIE5vdGUgdGhhdCB3ZSBkb24ndCBkZWZpbmUgX19oYXNoX186IG5vdCBhbGwgc2V0cyBhcmUgaGFzaGFibGUuCi0gICAgICAgIEJ1dCBpZiB5b3UgZGVmaW5lIGEgaGFzaGFibGUgc2V0IHR5cGUsIGl0cyBfX2hhc2hfXyBzaG91bGQKLSAgICAgICAgY2FsbCB0aGlzIGZ1bmN0aW9uLgotCi0gICAgICAgIFRoaXMgbXVzdCBiZSBjb21wYXRpYmxlIF9fZXFfXy4KLQotICAgICAgICBBbGwgc2V0cyBvdWdodCB0byBjb21wYXJlIGVxdWFsIGlmIHRoZXkgY29udGFpbiB0aGUgc2FtZQotICAgICAgICBlbGVtZW50cywgcmVnYXJkbGVzcyBvZiBob3cgdGhleSBhcmUgaW1wbGVtZW50ZWQsIGFuZAotICAgICAgICByZWdhcmRsZXNzIG9mIHRoZSBvcmRlciBvZiB0aGUgZWxlbWVudHM7IHNvIHRoZXJlJ3Mgbm90IG11Y2gKLSAgICAgICAgZnJlZWRvbSBmb3IgX19lcV9fIG9yIF9faGFzaF9fLiAgV2UgbWF0Y2ggdGhlIGFsZ29yaXRobSB1c2VkCi0gICAgICAgIGJ5IHRoZSBidWlsdC1pbiBmcm96ZW5zZXQgdHlwZS4KLSAgICAgICAgIiIiCi0gICAgICAgIE1BWCA9IHN5cy5tYXhzaXplCi0gICAgICAgIE1BU0sgPSAyICogTUFYICsgMQotICAgICAgICBuID0gbGVuKHNlbGYpCi0gICAgICAgIGggPSAxOTI3ODY4MjM3ICogKG4gKyAxKQotICAgICAgICBoICY9IE1BU0sKLSAgICAgICAgZm9yIHggaW4gc2VsZjoKLSAgICAgICAgICAgIGh4ID0gaGFzaCh4KQotICAgICAgICAgICAgaCBePSAoaHggXiAoaHggPDwgMTYpIF4gODk4Njk3NDcpICAqIDM2NDQ3OTgxNjcKLSAgICAgICAgICAgIGggJj0gTUFTSwotICAgICAgICBoID0gaCAqIDY5MDY5ICsgOTA3MTMzOTIzCi0gICAgICAgIGggJj0gTUFTSwotICAgICAgICBpZiBoID4gTUFYOgotICAgICAgICAgICAgaCAtPSBNQVNLICsgMQotICAgICAgICBpZiBoID09IC0xOgotICAgICAgICAgICAgaCA9IDU5MDkyMzcxMwotICAgICAgICByZXR1cm4gaAotCi1TZXQucmVnaXN0ZXIoZnJvemVuc2V0KQotCi0KLWNsYXNzIE11dGFibGVTZXQoU2V0KToKLSAgICAiIiJBIG11dGFibGUgc2V0IGlzIGEgZmluaXRlLCBpdGVyYWJsZSBjb250YWluZXIuCi0KLSAgICBUaGlzIGNsYXNzIHByb3ZpZGVzIGNvbmNyZXRlIGdlbmVyaWMgaW1wbGVtZW50YXRpb25zIG9mIGFsbAotICAgIG1ldGhvZHMgZXhjZXB0IGZvciBfX2NvbnRhaW5zX18sIF9faXRlcl9fLCBfX2xlbl9fLAotICAgIGFkZCgpLCBhbmQgZGlzY2FyZCgpLgotCi0gICAgVG8gb3ZlcnJpZGUgdGhlIGNvbXBhcmlzb25zIChwcmVzdW1hYmx5IGZvciBzcGVlZCwgYXMgdGhlCi0gICAgc2VtYW50aWNzIGFyZSBmaXhlZCksIGFsbCB5b3UgaGF2ZSB0byBkbyBpcyByZWRlZmluZSBfX2xlX18gYW5kCi0gICAgdGhlbiB0aGUgb3RoZXIgb3BlcmF0aW9ucyB3aWxsIGF1dG9tYXRpY2FsbHkgZm9sbG93IHN1aXQuCi0gICAgIiIiCi0KLSAgICBfX3Nsb3RzX18gPSAoKQotCi0gICAgQGFic3RyYWN0bWV0aG9kCi0gICAgZGVmIGFkZChzZWxmLCB2YWx1ZSk6Ci0gICAgICAgICIiIkFkZCBhbiBlbGVtZW50LiIiIgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCi0KLSAgICBAYWJzdHJhY3RtZXRob2QKLSAgICBkZWYgZGlzY2FyZChzZWxmLCB2YWx1ZSk6Ci0gICAgICAgICIiIlJlbW92ZSBhbiBlbGVtZW50LiAgRG8gbm90IHJhaXNlIGFuIGV4Y2VwdGlvbiBpZiBhYnNlbnQuIiIiCi0gICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKLQotICAgIGRlZiByZW1vdmUoc2VsZiwgdmFsdWUpOgotICAgICAgICAiIiJSZW1vdmUgYW4gZWxlbWVudC4gSWYgbm90IGEgbWVtYmVyLCByYWlzZSBhIEtleUVycm9yLiIiIgotICAgICAgICBpZiB2YWx1ZSBub3QgaW4gc2VsZjoKLSAgICAgICAgICAgIHJhaXNlIEtleUVycm9yKHZhbHVlKQotICAgICAgICBzZWxmLmRpc2NhcmQodmFsdWUpCi0KLSAgICBkZWYgcG9wKHNlbGYpOgotICAgICAgICAiIiJSZXR1cm4gdGhlIHBvcHBlZCB2YWx1ZS4gIFJhaXNlIEtleUVycm9yIGlmIGVtcHR5LiIiIgotICAgICAgICBpdCA9IGl0ZXIoc2VsZikKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgdmFsdWUgPSBuZXh0KGl0KQotICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKLSAgICAgICAgICAgIHJhaXNlIEtleUVycm9yCi0gICAgICAgIHNlbGYuZGlzY2FyZCh2YWx1ZSkKLSAgICAgICAgcmV0dXJuIHZhbHVlCi0KLSAgICBkZWYgY2xlYXIoc2VsZik6Ci0gICAgICAgICIiIlRoaXMgaXMgc2xvdyAoY3JlYXRlcyBOIG5ldyBpdGVyYXRvcnMhKSBidXQgZWZmZWN0aXZlLiIiIgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgICAgIHNlbGYucG9wKCkKLSAgICAgICAgZXhjZXB0IEtleUVycm9yOgotICAgICAgICAgICAgcGFzcwotCi0gICAgZGVmIF9faW9yX18oc2VsZiwgaXQpOgotICAgICAgICBmb3IgdmFsdWUgaW4gaXQ6Ci0gICAgICAgICAgICBzZWxmLmFkZCh2YWx1ZSkKLSAgICAgICAgcmV0dXJuIHNlbGYKLQotICAgIGRlZiBfX2lhbmRfXyhzZWxmLCBpdCk6Ci0gICAgICAgIGZvciB2YWx1ZSBpbiAoc2VsZiAtIGl0KToKLSAgICAgICAgICAgIHNlbGYuZGlzY2FyZCh2YWx1ZSkKLSAgICAgICAgcmV0dXJuIHNlbGYKLQotICAgIGRlZiBfX2l4b3JfXyhzZWxmLCBpdCk6Ci0gICAgICAgIGlmIGl0IGlzIHNlbGY6Ci0gICAgICAgICAgICBzZWxmLmNsZWFyKCkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGl0LCBTZXQpOgotICAgICAgICAgICAgICAgIGl0ID0gc2VsZi5fZnJvbV9pdGVyYWJsZShpdCkKLSAgICAgICAgICAgIGZvciB2YWx1ZSBpbiBpdDoKLSAgICAgICAgICAgICAgICBpZiB2YWx1ZSBpbiBzZWxmOgotICAgICAgICAgICAgICAgICAgICBzZWxmLmRpc2NhcmQodmFsdWUpCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hZGQodmFsdWUpCi0gICAgICAgIHJldHVybiBzZWxmCi0KLSAgICBkZWYgX19pc3ViX18oc2VsZiwgaXQpOgotICAgICAgICBpZiBpdCBpcyBzZWxmOgotICAgICAgICAgICAgc2VsZi5jbGVhcigpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBmb3IgdmFsdWUgaW4gaXQ6Ci0gICAgICAgICAgICAgICAgc2VsZi5kaXNjYXJkKHZhbHVlKQotICAgICAgICByZXR1cm4gc2VsZgotCi1NdXRhYmxlU2V0LnJlZ2lzdGVyKHNldCkKLQotCi0jIyMgTUFQUElOR1MgIyMjCi0KLQotY2xhc3MgTWFwcGluZyhTaXplZCwgSXRlcmFibGUsIENvbnRhaW5lcik6Ci0KLSAgICBfX3Nsb3RzX18gPSAoKQotCi0gICAgIiIiQSBNYXBwaW5nIGlzIGEgZ2VuZXJpYyBjb250YWluZXIgZm9yIGFzc29jaWF0aW5nIGtleS92YWx1ZQotICAgIHBhaXJzLgotCi0gICAgVGhpcyBjbGFzcyBwcm92aWRlcyBjb25jcmV0ZSBnZW5lcmljIGltcGxlbWVudGF0aW9ucyBvZiBhbGwKLSAgICBtZXRob2RzIGV4Y2VwdCBmb3IgX19nZXRpdGVtX18sIF9faXRlcl9fLCBhbmQgX19sZW5fXy4KLQotICAgICIiIgotCi0gICAgQGFic3RyYWN0bWV0aG9kCi0gICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGtleSk6Ci0gICAgICAgIHJhaXNlIEtleUVycm9yCi0KLSAgICBkZWYgZ2V0KHNlbGYsIGtleSwgZGVmYXVsdD1Ob25lKToKLSAgICAgICAgJ0QuZ2V0KGtbLGRdKSAtPiBEW2tdIGlmIGsgaW4gRCwgZWxzZSBkLiAgZCBkZWZhdWx0cyB0byBOb25lLicKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcmV0dXJuIHNlbGZba2V5XQotICAgICAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgICAgICByZXR1cm4gZGVmYXVsdAotCi0gICAgZGVmIF9fY29udGFpbnNfXyhzZWxmLCBrZXkpOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmW2tleV0KLSAgICAgICAgZXhjZXB0IEtleUVycm9yOgotICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gVHJ1ZQotCi0gICAgZGVmIGtleXMoc2VsZik6Ci0gICAgICAgICJELmtleXMoKSAtPiBhIHNldC1saWtlIG9iamVjdCBwcm92aWRpbmcgYSB2aWV3IG9uIEQncyBrZXlzIgotICAgICAgICByZXR1cm4gS2V5c1ZpZXcoc2VsZikKLQotICAgIGRlZiBpdGVtcyhzZWxmKToKLSAgICAgICAgIkQuaXRlbXMoKSAtPiBhIHNldC1saWtlIG9iamVjdCBwcm92aWRpbmcgYSB2aWV3IG9uIEQncyBpdGVtcyIKLSAgICAgICAgcmV0dXJuIEl0ZW1zVmlldyhzZWxmKQotCi0gICAgZGVmIHZhbHVlcyhzZWxmKToKLSAgICAgICAgIkQudmFsdWVzKCkgLT4gYW4gb2JqZWN0IHByb3ZpZGluZyBhIHZpZXcgb24gRCdzIHZhbHVlcyIKLSAgICAgICAgcmV0dXJuIFZhbHVlc1ZpZXcoc2VsZikKLQotICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgotICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgTWFwcGluZyk6Ci0gICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKLSAgICAgICAgcmV0dXJuIGRpY3Qoc2VsZi5pdGVtcygpKSA9PSBkaWN0KG90aGVyLml0ZW1zKCkpCi0KLSAgICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKLSAgICAgICAgcmV0dXJuIG5vdCAoc2VsZiA9PSBvdGhlcikKLQotTWFwcGluZy5yZWdpc3RlcihtYXBwaW5ncHJveHkpCi0KLQotY2xhc3MgTWFwcGluZ1ZpZXcoU2l6ZWQpOgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hcHBpbmcpOgotICAgICAgICBzZWxmLl9tYXBwaW5nID0gbWFwcGluZwotCi0gICAgZGVmIF9fbGVuX18oc2VsZik6Ci0gICAgICAgIHJldHVybiBsZW4oc2VsZi5fbWFwcGluZykKLQotICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuICd7MC5fX2NsYXNzX18uX19uYW1lX199KHswLl9tYXBwaW5nIXJ9KScuZm9ybWF0KHNlbGYpCi0KLQotY2xhc3MgS2V5c1ZpZXcoTWFwcGluZ1ZpZXcsIFNldCk6Ci0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgX2Zyb21faXRlcmFibGUoc2VsZiwgaXQpOgotICAgICAgICByZXR1cm4gc2V0KGl0KQotCi0gICAgZGVmIF9fY29udGFpbnNfXyhzZWxmLCBrZXkpOgotICAgICAgICByZXR1cm4ga2V5IGluIHNlbGYuX21hcHBpbmcKLQotICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKLSAgICAgICAgZm9yIGtleSBpbiBzZWxmLl9tYXBwaW5nOgotICAgICAgICAgICAgeWllbGQga2V5Ci0KLUtleXNWaWV3LnJlZ2lzdGVyKGRpY3Rfa2V5cykKLQotCi1jbGFzcyBJdGVtc1ZpZXcoTWFwcGluZ1ZpZXcsIFNldCk6Ci0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgX2Zyb21faXRlcmFibGUoc2VsZiwgaXQpOgotICAgICAgICByZXR1cm4gc2V0KGl0KQotCi0gICAgZGVmIF9fY29udGFpbnNfXyhzZWxmLCBpdGVtKToKLSAgICAgICAga2V5LCB2YWx1ZSA9IGl0ZW0KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgdiA9IHNlbGYuX21hcHBpbmdba2V5XQotICAgICAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiB2ID09IHZhbHVlCi0KLSAgICBkZWYgX19pdGVyX18oc2VsZik6Ci0gICAgICAgIGZvciBrZXkgaW4gc2VsZi5fbWFwcGluZzoKLSAgICAgICAgICAgIHlpZWxkIChrZXksIHNlbGYuX21hcHBpbmdba2V5XSkKLQotSXRlbXNWaWV3LnJlZ2lzdGVyKGRpY3RfaXRlbXMpCi0KLQotY2xhc3MgVmFsdWVzVmlldyhNYXBwaW5nVmlldyk6Ci0KLSAgICBkZWYgX19jb250YWluc19fKHNlbGYsIHZhbHVlKToKLSAgICAgICAgZm9yIGtleSBpbiBzZWxmLl9tYXBwaW5nOgotICAgICAgICAgICAgaWYgdmFsdWUgPT0gc2VsZi5fbWFwcGluZ1trZXldOgotICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCi0gICAgICAgIHJldHVybiBGYWxzZQotCi0gICAgZGVmIF9faXRlcl9fKHNlbGYpOgotICAgICAgICBmb3Iga2V5IGluIHNlbGYuX21hcHBpbmc6Ci0gICAgICAgICAgICB5aWVsZCBzZWxmLl9tYXBwaW5nW2tleV0KLQotVmFsdWVzVmlldy5yZWdpc3RlcihkaWN0X3ZhbHVlcykKLQotCi1jbGFzcyBNdXRhYmxlTWFwcGluZyhNYXBwaW5nKToKLQotICAgIF9fc2xvdHNfXyA9ICgpCi0KLSAgICAiIiJBIE11dGFibGVNYXBwaW5nIGlzIGEgZ2VuZXJpYyBjb250YWluZXIgZm9yIGFzc29jaWF0aW5nCi0gICAga2V5L3ZhbHVlIHBhaXJzLgotCi0gICAgVGhpcyBjbGFzcyBwcm92aWRlcyBjb25jcmV0ZSBnZW5lcmljIGltcGxlbWVudGF0aW9ucyBvZiBhbGwKLSAgICBtZXRob2RzIGV4Y2VwdCBmb3IgX19nZXRpdGVtX18sIF9fc2V0aXRlbV9fLCBfX2RlbGl0ZW1fXywKLSAgICBfX2l0ZXJfXywgYW5kIF9fbGVuX18uCi0KLSAgICAiIiIKLQotICAgIEBhYnN0cmFjdG1ldGhvZAotICAgIGRlZiBfX3NldGl0ZW1fXyhzZWxmLCBrZXksIHZhbHVlKToKLSAgICAgICAgcmFpc2UgS2V5RXJyb3IKLQotICAgIEBhYnN0cmFjdG1ldGhvZAotICAgIGRlZiBfX2RlbGl0ZW1fXyhzZWxmLCBrZXkpOgotICAgICAgICByYWlzZSBLZXlFcnJvcgotCi0gICAgX19tYXJrZXIgPSBvYmplY3QoKQotCi0gICAgZGVmIHBvcChzZWxmLCBrZXksIGRlZmF1bHQ9X19tYXJrZXIpOgotICAgICAgICAnJydELnBvcChrWyxkXSkgLT4gdiwgcmVtb3ZlIHNwZWNpZmllZCBrZXkgYW5kIHJldHVybiB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZS4KLSAgICAgICAgICBJZiBrZXkgaXMgbm90IGZvdW5kLCBkIGlzIHJldHVybmVkIGlmIGdpdmVuLCBvdGhlcndpc2UgS2V5RXJyb3IgaXMgcmFpc2VkLgotICAgICAgICAnJycKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgdmFsdWUgPSBzZWxmW2tleV0KLSAgICAgICAgZXhjZXB0IEtleUVycm9yOgotICAgICAgICAgICAgaWYgZGVmYXVsdCBpcyBzZWxmLl9fbWFya2VyOgotICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgICAgICByZXR1cm4gZGVmYXVsdAotICAgICAgICBlbHNlOgotICAgICAgICAgICAgZGVsIHNlbGZba2V5XQotICAgICAgICAgICAgcmV0dXJuIHZhbHVlCi0KLSAgICBkZWYgcG9waXRlbShzZWxmKToKLSAgICAgICAgJycnRC5wb3BpdGVtKCkgLT4gKGssIHYpLCByZW1vdmUgYW5kIHJldHVybiBzb21lIChrZXksIHZhbHVlKSBwYWlyCi0gICAgICAgICAgIGFzIGEgMi10dXBsZTsgYnV0IHJhaXNlIEtleUVycm9yIGlmIEQgaXMgZW1wdHkuCi0gICAgICAgICcnJwotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBrZXkgPSBuZXh0KGl0ZXIoc2VsZikpCi0gICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgotICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IKLSAgICAgICAgdmFsdWUgPSBzZWxmW2tleV0KLSAgICAgICAgZGVsIHNlbGZba2V5XQotICAgICAgICByZXR1cm4ga2V5LCB2YWx1ZQotCi0gICAgZGVmIGNsZWFyKHNlbGYpOgotICAgICAgICAnRC5jbGVhcigpIC0+IE5vbmUuICBSZW1vdmUgYWxsIGl0ZW1zIGZyb20gRC4nCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHdoaWxlIFRydWU6Ci0gICAgICAgICAgICAgICAgc2VsZi5wb3BpdGVtKCkKLSAgICAgICAgZXhjZXB0IEtleUVycm9yOgotICAgICAgICAgICAgcGFzcwotCi0gICAgZGVmIHVwZGF0ZSgqYXJncywgKiprd2RzKToKLSAgICAgICAgJycnIEQudXBkYXRlKFtFLCBdKipGKSAtPiBOb25lLiAgVXBkYXRlIEQgZnJvbSBtYXBwaW5nL2l0ZXJhYmxlIEUgYW5kIEYuCi0gICAgICAgICAgICBJZiBFIHByZXNlbnQgYW5kIGhhcyBhIC5rZXlzKCkgbWV0aG9kLCBkb2VzOiAgICAgZm9yIGsgaW4gRTogRFtrXSA9IEVba10KLSAgICAgICAgICAgIElmIEUgcHJlc2VudCBhbmQgbGFja3MgLmtleXMoKSBtZXRob2QsIGRvZXM6ICAgICBmb3IgKGssIHYpIGluIEU6IERba10gPSB2Ci0gICAgICAgICAgICBJbiBlaXRoZXIgY2FzZSwgdGhpcyBpcyBmb2xsb3dlZCBieTogZm9yIGssIHYgaW4gRi5pdGVtcygpOiBEW2tdID0gdgotICAgICAgICAnJycKLSAgICAgICAgaWYgbGVuKGFyZ3MpID4gMjoKLSAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigidXBkYXRlKCkgdGFrZXMgYXQgbW9zdCAyIHBvc2l0aW9uYWwgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhcmd1bWVudHMgKHt9IGdpdmVuKSIuZm9ybWF0KGxlbihhcmdzKSkpCi0gICAgICAgIGVsaWYgbm90IGFyZ3M6Ci0gICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoInVwZGF0ZSgpIHRha2VzIGF0IGxlYXN0IDEgYXJndW1lbnQgKDAgZ2l2ZW4pIikKLSAgICAgICAgc2VsZiA9IGFyZ3NbMF0KLSAgICAgICAgb3RoZXIgPSBhcmdzWzFdIGlmIGxlbihhcmdzKSA+PSAyIGVsc2UgKCkKLQotICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBNYXBwaW5nKToKLSAgICAgICAgICAgIGZvciBrZXkgaW4gb3RoZXI6Ci0gICAgICAgICAgICAgICAgc2VsZltrZXldID0gb3RoZXJba2V5XQotICAgICAgICBlbGlmIGhhc2F0dHIob3RoZXIsICJrZXlzIik6Ci0gICAgICAgICAgICBmb3Iga2V5IGluIG90aGVyLmtleXMoKToKLSAgICAgICAgICAgICAgICBzZWxmW2tleV0gPSBvdGhlcltrZXldCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBvdGhlcjoKLSAgICAgICAgICAgICAgICBzZWxmW2tleV0gPSB2YWx1ZQotICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBrd2RzLml0ZW1zKCk6Ci0gICAgICAgICAgICBzZWxmW2tleV0gPSB2YWx1ZQotCi0gICAgZGVmIHNldGRlZmF1bHQoc2VsZiwga2V5LCBkZWZhdWx0PU5vbmUpOgotICAgICAgICAnRC5zZXRkZWZhdWx0KGtbLGRdKSAtPiBELmdldChrLGQpLCBhbHNvIHNldCBEW2tdPWQgaWYgayBub3QgaW4gRCcKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcmV0dXJuIHNlbGZba2V5XQotICAgICAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgICAgICBzZWxmW2tleV0gPSBkZWZhdWx0Ci0gICAgICAgIHJldHVybiBkZWZhdWx0Ci0KLU11dGFibGVNYXBwaW5nLnJlZ2lzdGVyKGRpY3QpCi0KLQotIyMjIFNFUVVFTkNFUyAjIyMKLQotCi1jbGFzcyBTZXF1ZW5jZShTaXplZCwgSXRlcmFibGUsIENvbnRhaW5lcik6Ci0KLSAgICAiIiJBbGwgdGhlIG9wZXJhdGlvbnMgb24gYSByZWFkLW9ubHkgc2VxdWVuY2UuCi0KLSAgICBDb25jcmV0ZSBzdWJjbGFzc2VzIG11c3Qgb3ZlcnJpZGUgX19uZXdfXyBvciBfX2luaXRfXywKLSAgICBfX2dldGl0ZW1fXywgYW5kIF9fbGVuX18uCi0gICAgIiIiCi0KLSAgICBfX3Nsb3RzX18gPSAoKQotCi0gICAgQGFic3RyYWN0bWV0aG9kCi0gICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGluZGV4KToKLSAgICAgICAgcmFpc2UgSW5kZXhFcnJvcgotCi0gICAgZGVmIF9faXRlcl9fKHNlbGYpOgotICAgICAgICBpID0gMAotICAgICAgICB0cnk6Ci0gICAgICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgICAgIHYgPSBzZWxmW2ldCi0gICAgICAgICAgICAgICAgeWllbGQgdgotICAgICAgICAgICAgICAgIGkgKz0gMQotICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKLSAgICAgICAgICAgIHJldHVybgotCi0gICAgZGVmIF9fY29udGFpbnNfXyhzZWxmLCB2YWx1ZSk6Ci0gICAgICAgIGZvciB2IGluIHNlbGY6Ci0gICAgICAgICAgICBpZiB2ID09IHZhbHVlOgotICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCi0gICAgICAgIHJldHVybiBGYWxzZQotCi0gICAgZGVmIF9fcmV2ZXJzZWRfXyhzZWxmKToKLSAgICAgICAgZm9yIGkgaW4gcmV2ZXJzZWQocmFuZ2UobGVuKHNlbGYpKSk6Ci0gICAgICAgICAgICB5aWVsZCBzZWxmW2ldCi0KLSAgICBkZWYgaW5kZXgoc2VsZiwgdmFsdWUpOgotICAgICAgICAnJydTLmluZGV4KHZhbHVlKSAtPiBpbnRlZ2VyIC0tIHJldHVybiBmaXJzdCBpbmRleCBvZiB2YWx1ZS4KLSAgICAgICAgICAgUmFpc2VzIFZhbHVlRXJyb3IgaWYgdGhlIHZhbHVlIGlzIG5vdCBwcmVzZW50LgotICAgICAgICAnJycKLSAgICAgICAgZm9yIGksIHYgaW4gZW51bWVyYXRlKHNlbGYpOgotICAgICAgICAgICAgaWYgdiA9PSB2YWx1ZToKLSAgICAgICAgICAgICAgICByZXR1cm4gaQotICAgICAgICByYWlzZSBWYWx1ZUVycm9yCi0KLSAgICBkZWYgY291bnQoc2VsZiwgdmFsdWUpOgotICAgICAgICAnUy5jb3VudCh2YWx1ZSkgLT4gaW50ZWdlciAtLSByZXR1cm4gbnVtYmVyIG9mIG9jY3VycmVuY2VzIG9mIHZhbHVlJwotICAgICAgICByZXR1cm4gc3VtKDEgZm9yIHYgaW4gc2VsZiBpZiB2ID09IHZhbHVlKQotCi1TZXF1ZW5jZS5yZWdpc3Rlcih0dXBsZSkKLVNlcXVlbmNlLnJlZ2lzdGVyKHN0cikKLVNlcXVlbmNlLnJlZ2lzdGVyKHJhbmdlKQotCi0KLWNsYXNzIEJ5dGVTdHJpbmcoU2VxdWVuY2UpOgotCi0gICAgIiIiVGhpcyB1bmlmaWVzIGJ5dGVzIGFuZCBieXRlYXJyYXkuCi0KLSAgICBYWFggU2hvdWxkIGFkZCBhbGwgdGhlaXIgbWV0aG9kcy4KLSAgICAiIiIKLQotICAgIF9fc2xvdHNfXyA9ICgpCi0KLUJ5dGVTdHJpbmcucmVnaXN0ZXIoYnl0ZXMpCi1CeXRlU3RyaW5nLnJlZ2lzdGVyKGJ5dGVhcnJheSkKLQotCi1jbGFzcyBNdXRhYmxlU2VxdWVuY2UoU2VxdWVuY2UpOgotCi0gICAgX19zbG90c19fID0gKCkKLQotICAgICIiIkFsbCB0aGUgb3BlcmF0aW9ucyBvbiBhIHJlYWQtb25seSBzZXF1ZW5jZS4KLQotICAgIENvbmNyZXRlIHN1YmNsYXNzZXMgbXVzdCBwcm92aWRlIF9fbmV3X18gb3IgX19pbml0X18sCi0gICAgX19nZXRpdGVtX18sIF9fc2V0aXRlbV9fLCBfX2RlbGl0ZW1fXywgX19sZW5fXywgYW5kIGluc2VydCgpLgotCi0gICAgIiIiCi0KLSAgICBAYWJzdHJhY3RtZXRob2QKLSAgICBkZWYgX19zZXRpdGVtX18oc2VsZiwgaW5kZXgsIHZhbHVlKToKLSAgICAgICAgcmFpc2UgSW5kZXhFcnJvcgotCi0gICAgQGFic3RyYWN0bWV0aG9kCi0gICAgZGVmIF9fZGVsaXRlbV9fKHNlbGYsIGluZGV4KToKLSAgICAgICAgcmFpc2UgSW5kZXhFcnJvcgotCi0gICAgQGFic3RyYWN0bWV0aG9kCi0gICAgZGVmIGluc2VydChzZWxmLCBpbmRleCwgdmFsdWUpOgotICAgICAgICAnUy5pbnNlcnQoaW5kZXgsIHZhbHVlKSAtLSBpbnNlcnQgdmFsdWUgYmVmb3JlIGluZGV4JwotICAgICAgICByYWlzZSBJbmRleEVycm9yCi0KLSAgICBkZWYgYXBwZW5kKHNlbGYsIHZhbHVlKToKLSAgICAgICAgJ1MuYXBwZW5kKHZhbHVlKSAtLSBhcHBlbmQgdmFsdWUgdG8gdGhlIGVuZCBvZiB0aGUgc2VxdWVuY2UnCi0gICAgICAgIHNlbGYuaW5zZXJ0KGxlbihzZWxmKSwgdmFsdWUpCi0KLSAgICBkZWYgY2xlYXIoc2VsZik6Ci0gICAgICAgICdTLmNsZWFyKCkgLT4gTm9uZSAtLSByZW1vdmUgYWxsIGl0ZW1zIGZyb20gUycKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgICAgICBzZWxmLnBvcCgpCi0gICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgotICAgICAgICAgICAgcGFzcwotCi0gICAgZGVmIHJldmVyc2Uoc2VsZik6Ci0gICAgICAgICdTLnJldmVyc2UoKSAtLSByZXZlcnNlICpJTiBQTEFDRSonCi0gICAgICAgIG4gPSBsZW4oc2VsZikKLSAgICAgICAgZm9yIGkgaW4gcmFuZ2Uobi8vMik6Ci0gICAgICAgICAgICBzZWxmW2ldLCBzZWxmW24taS0xXSA9IHNlbGZbbi1pLTFdLCBzZWxmW2ldCi0KLSAgICBkZWYgZXh0ZW5kKHNlbGYsIHZhbHVlcyk6Ci0gICAgICAgICdTLmV4dGVuZChpdGVyYWJsZSkgLS0gZXh0ZW5kIHNlcXVlbmNlIGJ5IGFwcGVuZGluZyBlbGVtZW50cyBmcm9tIHRoZSBpdGVyYWJsZScKLSAgICAgICAgZm9yIHYgaW4gdmFsdWVzOgotICAgICAgICAgICAgc2VsZi5hcHBlbmQodikKLQotICAgIGRlZiBwb3Aoc2VsZiwgaW5kZXg9LTEpOgotICAgICAgICAnJydTLnBvcChbaW5kZXhdKSAtPiBpdGVtIC0tIHJlbW92ZSBhbmQgcmV0dXJuIGl0ZW0gYXQgaW5kZXggKGRlZmF1bHQgbGFzdCkuCi0gICAgICAgICAgIFJhaXNlIEluZGV4RXJyb3IgaWYgbGlzdCBpcyBlbXB0eSBvciBpbmRleCBpcyBvdXQgb2YgcmFuZ2UuCi0gICAgICAgICcnJwotICAgICAgICB2ID0gc2VsZltpbmRleF0KLSAgICAgICAgZGVsIHNlbGZbaW5kZXhdCi0gICAgICAgIHJldHVybiB2Ci0KLSAgICBkZWYgcmVtb3ZlKHNlbGYsIHZhbHVlKToKLSAgICAgICAgJycnUy5yZW1vdmUodmFsdWUpIC0tIHJlbW92ZSBmaXJzdCBvY2N1cnJlbmNlIG9mIHZhbHVlLgotICAgICAgICAgICBSYWlzZSBWYWx1ZUVycm9yIGlmIHRoZSB2YWx1ZSBpcyBub3QgcHJlc2VudC4KLSAgICAgICAgJycnCi0gICAgICAgIGRlbCBzZWxmW3NlbGYuaW5kZXgodmFsdWUpXQotCi0gICAgZGVmIF9faWFkZF9fKHNlbGYsIHZhbHVlcyk6Ci0gICAgICAgIHNlbGYuZXh0ZW5kKHZhbHVlcykKLSAgICAgICAgcmV0dXJuIHNlbGYKLQotTXV0YWJsZVNlcXVlbmNlLnJlZ2lzdGVyKGxpc3QpCi1NdXRhYmxlU2VxdWVuY2UucmVnaXN0ZXIoYnl0ZWFycmF5KSAgIyBNdWx0aXBseSBpbmhlcml0aW5nLCBzZWUgQnl0ZVN0cmluZworZnJvbSBfY29sbGVjdGlvbnNfYWJjIGltcG9ydCAqCitmcm9tIF9jb2xsZWN0aW9uc19hYmMgaW1wb3J0IF9fYWxsX18KZGlmZiAtLWdpdCBhL0xpYi9jb2xvcnN5cy5weSBiL0xpYi9jb2xvcnN5cy5weQppbmRleCBhNmMwY2Y2Li5iOTNlMzg0IDEwMDY0NAotLS0gYS9MaWIvY29sb3JzeXMucHkKKysrIGIvTGliL2NvbG9yc3lzLnB5CkBAIC0zMywxNyArMzMsMjUgQEAKICMgWUlROiB1c2VkIGJ5IGNvbXBvc2l0ZSB2aWRlbyBzaWduYWxzIChsaW5lYXIgY29tYmluYXRpb25zIG9mIFJHQikKICMgWTogcGVyY2VpdmVkIGdyZXkgbGV2ZWwgKDAuMCA9PSBibGFjaywgMS4wID09IHdoaXRlKQogIyBJLCBROiBjb2xvciBjb21wb25lbnRzCisjCisjIFRoZXJlIGFyZSBhIGdyZWF0IG1hbnkgdmVyc2lvbnMgb2YgdGhlIGNvbnN0YW50cyB1c2VkIGluIHRoZXNlIGZvcm11bGFlLgorIyBUaGUgb25lcyBpbiB0aGlzIGxpYnJhcnkgdXNlcyBjb25zdGFudHMgZnJvbSB0aGUgRkNDIHZlcnNpb24gb2YgTlRTQy4KIAogZGVmIHJnYl90b195aXEociwgZywgYik6CiAgICAgeSA9IDAuMzAqciArIDAuNTkqZyArIDAuMTEqYgotICAgIGkgPSAwLjYwKnIgLSAwLjI4KmcgLSAwLjMyKmIKLSAgICBxID0gMC4yMSpyIC0gMC41MipnICsgMC4zMSpiCisgICAgaSA9IDAuNzQqKHIteSkgLSAwLjI3KihiLXkpCisgICAgcSA9IDAuNDgqKHIteSkgKyAwLjQxKihiLXkpCiAgICAgcmV0dXJuICh5LCBpLCBxKQogCiBkZWYgeWlxX3RvX3JnYih5LCBpLCBxKToKLSAgICByID0geSArIDAuOTQ4MjYyKmkgKyAwLjYyNDAxMypxCi0gICAgZyA9IHkgLSAwLjI3NjA2NippIC0gMC42Mzk4MTAqcQotICAgIGIgPSB5IC0gMS4xMDU0NTAqaSArIDEuNzI5ODYwKnEKKyAgICAjIHIgPSB5ICsgKDAuMjcqcSArIDAuNDEqaSkgLyAoMC43NCowLjQxICsgMC4yNyowLjQ4KQorICAgICMgYiA9IHkgKyAoMC43NCpxIC0gMC40OCppKSAvICgwLjc0KjAuNDEgKyAwLjI3KjAuNDgpCisgICAgIyBnID0geSAtICgwLjMwKihyLXkpICsgMC4xMSooYi15KSkgLyAwLjU5CisKKyAgICByID0geSArIDAuOTQ2ODgyMjE3MDkwMDY5MyppICsgMC42MjM1NTY1ODE5ODYxNDMzKnEKKyAgICBnID0geSAtIDAuMjc0Nzg3NjQ2Mjk4OTc4MzQqaSAtIDAuNjM1NjkxMDc5MTg3MzgwMSpxCisgICAgYiA9IHkgLSAxLjEwODU0NTAzNDY0MjAzMjIqaSArIDEuNzA5MDA2OTI4NDA2NDY2NipxCisKICAgICBpZiByIDwgMC4wOgogICAgICAgICByID0gMC4wCiAgICAgaWYgZyA8IDAuMDoKZGlmZiAtLWdpdCBhL0xpYi9jb21waWxlYWxsLnB5IGIvTGliL2NvbXBpbGVhbGwucHkKaW5kZXggNjkzZWRhOS4uOGUxNTY5YyAxMDA2NDQKLS0tIGEvTGliL2NvbXBpbGVhbGwucHkKKysrIGIvTGliL2NvbXBpbGVhbGwucHkKQEAgLTEyLDggKzEyLDcgQEAKICIiIgogaW1wb3J0IG9zCiBpbXBvcnQgc3lzCi1pbXBvcnQgZXJybm8KLWltcG9ydCBpbXAKK2ltcG9ydCBpbXBvcnRsaWIudXRpbAogaW1wb3J0IHB5X2NvbXBpbGUKIGltcG9ydCBzdHJ1Y3QKIApAQCAtMzgsNyArMzcsNyBAQAogICAgICAgICBwcmludCgnTGlzdGluZyB7IXJ9Li4uJy5mb3JtYXQoZGlyKSkKICAgICB0cnk6CiAgICAgICAgIG5hbWVzID0gb3MubGlzdGRpcihkaXIpCi0gICAgZXhjZXB0IG9zLmVycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICBwcmludCgiQ2FuJ3QgbGlzdCB7IXJ9Ii5mb3JtYXQoZGlyKSkKICAgICAgICAgbmFtZXMgPSBbXQogICAgIG5hbWVzLnNvcnQoKQpAQCAtOTEsMjIgKzkwLDIzIEBACiAgICAgICAgICAgICBjZmlsZSA9IGZ1bGxuYW1lICsgKCdjJyBpZiBfX2RlYnVnX18gZWxzZSAnbycpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBpZiBvcHRpbWl6ZSA+PSAwOgotICAgICAgICAgICAgICAgIGNmaWxlID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKGZ1bGxuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnX292ZXJyaWRlPW5vdCBvcHRpbWl6ZSkKKyAgICAgICAgICAgICAgICBjZmlsZSA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdWxsbmFtZSwgZGVidWdfb3ZlcnJpZGU9bm90IG9wdGltaXplKQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBjZmlsZSA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShmdWxsbmFtZSkKKyAgICAgICAgICAgICAgICBjZmlsZSA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKGZ1bGxuYW1lKQogICAgICAgICAgICAgY2FjaGVfZGlyID0gb3MucGF0aC5kaXJuYW1lKGNmaWxlKQogICAgICAgICBoZWFkLCB0YWlsID0gbmFtZVs6LTNdLCBuYW1lWy0zOl0KICAgICAgICAgaWYgdGFpbCA9PSAnLnB5JzoKICAgICAgICAgICAgIGlmIG5vdCBmb3JjZToKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIG10aW1lID0gaW50KG9zLnN0YXQoZnVsbG5hbWUpLnN0X210aW1lKQotICAgICAgICAgICAgICAgICAgICBleHBlY3QgPSBzdHJ1Y3QucGFjaygnPDRzbCcsIGltcC5nZXRfbWFnaWMoKSwgbXRpbWUpCisgICAgICAgICAgICAgICAgICAgIGV4cGVjdCA9IHN0cnVjdC5wYWNrKCc8NHNsJywgaW1wb3J0bGliLnV0aWwuTUFHSUNfTlVNQkVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGltZSkKICAgICAgICAgICAgICAgICAgICAgd2l0aCBvcGVuKGNmaWxlLCAncmInKSBhcyBjaGFuZGxlOgogICAgICAgICAgICAgICAgICAgICAgICAgYWN0dWFsID0gY2hhbmRsZS5yZWFkKDgpCiAgICAgICAgICAgICAgICAgICAgIGlmIGV4cGVjdCA9PSBhY3R1YWw6CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3VjY2VzcwotICAgICAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICBpZiBub3QgcXVpZXQ6CiAgICAgICAgICAgICAgICAgcHJpbnQoJ0NvbXBpbGluZyB7IXJ9Li4uJy5mb3JtYXQoZnVsbG5hbWUpKQpAQCAtMTI0LDcgKzEyNCw3IEBACiAgICAgICAgICAgICAgICAgbXNnID0gbXNnLmRlY29kZShzeXMuc3Rkb3V0LmVuY29kaW5nKQogICAgICAgICAgICAgICAgIHByaW50KG1zZykKICAgICAgICAgICAgICAgICBzdWNjZXNzID0gMAotICAgICAgICAgICAgZXhjZXB0IChTeW50YXhFcnJvciwgVW5pY29kZUVycm9yLCBJT0Vycm9yKSBhcyBlOgorICAgICAgICAgICAgZXhjZXB0IChTeW50YXhFcnJvciwgVW5pY29kZUVycm9yLCBPU0Vycm9yKSBhcyBlOgogICAgICAgICAgICAgICAgIGlmIHF1aWV0OgogICAgICAgICAgICAgICAgICAgICBwcmludCgnKioqIEVycm9yIGNvbXBpbGluZyB7IXJ9Li4uJy5mb3JtYXQoZnVsbG5hbWUpKQogICAgICAgICAgICAgICAgIGVsc2U6CkBAIC0xOTYsOSArMTk2LDYgQEAKIAogICAgIGNvbXBpbGVfZGVzdHMgPSBhcmdzLmNvbXBpbGVfZGVzdAogCi0gICAgaWYgKGFyZ3MuZGRpciBhbmQgKGxlbihjb21waWxlX2Rlc3RzKSAhPSAxCi0gICAgICAgICAgICBvciBub3Qgb3MucGF0aC5pc2Rpcihjb21waWxlX2Rlc3RzWzBdKSkpOgotICAgICAgICBwYXJzZXIuZXhpdCgnLWQgZGVzdGRpciByZXF1aXJlcyBleGFjdGx5IG9uZSBkaXJlY3RvcnkgYXJndW1lbnQnKQogICAgIGlmIGFyZ3Mucng6CiAgICAgICAgIGltcG9ydCByZQogICAgICAgICBhcmdzLnJ4ID0gcmUuY29tcGlsZShhcmdzLnJ4KQpAQCAtMjA5LDcgKzIwNiw3IEBACiAgICAgICAgICAgICB3aXRoIChzeXMuc3RkaW4gaWYgYXJncy5mbGlzdD09Jy0nIGVsc2Ugb3BlbihhcmdzLmZsaXN0KSkgYXMgZjoKICAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgogICAgICAgICAgICAgICAgICAgICBjb21waWxlX2Rlc3RzLmFwcGVuZChsaW5lLnN0cmlwKCkpCi0gICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHByaW50KCJFcnJvciByZWFkaW5nIGZpbGUgbGlzdCB7fSIuZm9ybWF0KGFyZ3MuZmxpc3QpKQogICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAKZGlmZiAtLWdpdCBhL0xpYi9jb25jdXJyZW50L2Z1dHVyZXMvX2Jhc2UucHkgYi9MaWIvY29uY3VycmVudC9mdXR1cmVzL19iYXNlLnB5CmluZGV4IGQ0NWE0MDQuLmIyNTk4MzMgMTAwNjQ0Ci0tLSBhL0xpYi9jb25jdXJyZW50L2Z1dHVyZXMvX2Jhc2UucHkKKysrIGIvTGliL2NvbmN1cnJlbnQvZnV0dXJlcy9fYmFzZS5weQpAQCAtMjAwLDggKzIwMCw3IEBACiAgICAgICAgIHdhaXRlciA9IF9jcmVhdGVfYW5kX2luc3RhbGxfd2FpdGVycyhmcywgX0FTX0NPTVBMRVRFRCkKIAogICAgIHRyeToKLSAgICAgICAgZm9yIGZ1dHVyZSBpbiBmaW5pc2hlZDoKLSAgICAgICAgICAgIHlpZWxkIGZ1dHVyZQorICAgICAgICB5aWVsZCBmcm9tIGZpbmlzaGVkCiAKICAgICAgICAgd2hpbGUgcGVuZGluZzoKICAgICAgICAgICAgIGlmIHRpbWVvdXQgaXMgTm9uZToKQEAgLTIyNiw3ICsyMjUsOCBAQAogCiAgICAgZmluYWxseToKICAgICAgICAgZm9yIGYgaW4gZnM6Ci0gICAgICAgICAgICBmLl93YWl0ZXJzLnJlbW92ZSh3YWl0ZXIpCisgICAgICAgICAgICB3aXRoIGYuX2NvbmRpdGlvbjoKKyAgICAgICAgICAgICAgICBmLl93YWl0ZXJzLnJlbW92ZSh3YWl0ZXIpCiAKIERvbmVBbmROb3REb25lRnV0dXJlcyA9IGNvbGxlY3Rpb25zLm5hbWVkdHVwbGUoCiAgICAgICAgICdEb25lQW5kTm90RG9uZUZ1dHVyZXMnLCAnZG9uZSBub3RfZG9uZScpCkBAIC0yNzMsNyArMjczLDggQEAKIAogICAgIHdhaXRlci5ldmVudC53YWl0KHRpbWVvdXQpCiAgICAgZm9yIGYgaW4gZnM6Ci0gICAgICAgIGYuX3dhaXRlcnMucmVtb3ZlKHdhaXRlcikKKyAgICAgICAgd2l0aCBmLl9jb25kaXRpb246CisgICAgICAgICAgICBmLl93YWl0ZXJzLnJlbW92ZSh3YWl0ZXIpCiAKICAgICBkb25lLnVwZGF0ZSh3YWl0ZXIuZmluaXNoZWRfZnV0dXJlcykKICAgICByZXR1cm4gRG9uZUFuZE5vdERvbmVGdXR1cmVzKGRvbmUsIHNldChmcykgLSBkb25lKQpAQCAtNTE3LDcgKzUxOCw3IEBACiAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQogCiAgICAgZGVmIG1hcChzZWxmLCBmbiwgKml0ZXJhYmxlcywgdGltZW91dD1Ob25lKToKLSAgICAgICAgIiIiUmV0dXJucyBhIGl0ZXJhdG9yIGVxdWl2YWxlbnQgdG8gbWFwKGZuLCBpdGVyKS4KKyAgICAgICAgIiIiUmV0dXJucyBhbiBpdGVyYXRvciBlcXVpdmFsZW50IHRvIG1hcChmbiwgaXRlcikuCiAKICAgICAgICAgQXJnczoKICAgICAgICAgICAgIGZuOiBBIGNhbGxhYmxlIHRoYXQgd2lsbCB0YWtlIGFzIG1hbnkgYXJndW1lbnRzIGFzIHRoZXJlIGFyZQpkaWZmIC0tZ2l0IGEvTGliL2NvbmN1cnJlbnQvZnV0dXJlcy9wcm9jZXNzLnB5IGIvTGliL2NvbmN1cnJlbnQvZnV0dXJlcy9wcm9jZXNzLnB5CmluZGV4IGFkZjJhYjQuLjA3YjUyMjUgMTAwNjQ0Ci0tLSBhL0xpYi9jb25jdXJyZW50L2Z1dHVyZXMvcHJvY2Vzcy5weQorKysgYi9MaWIvY29uY3VycmVudC9mdXR1cmVzL3Byb2Nlc3MucHkKQEAgLTQwLDcgKzQwLDcgQEAKIAogUHJvY2VzcyAjMS4ubjoKIC0gcmVhZHMgX0NhbGxJdGVtcyBmcm9tICJDYWxsIFEiLCBleGVjdXRlcyB0aGUgY2FsbHMsIGFuZCBwdXRzIHRoZSByZXN1bHRpbmcKLSAgX1Jlc3VsdEl0ZW1zIGluICJSZXF1ZXN0IFEiCisgIF9SZXN1bHRJdGVtcyBpbiAiUmVzdWx0IFEiCiAiIiIKIAogX19hdXRob3JfXyA9ICdCcmlhbiBRdWlubGFuIChicmlhbkBzd2VldGFwcC5jb20pJwpAQCAtNDksOCArNDksOSBAQAogaW1wb3J0IG9zCiBmcm9tIGNvbmN1cnJlbnQuZnV0dXJlcyBpbXBvcnQgX2Jhc2UKIGltcG9ydCBxdWV1ZQorZnJvbSBxdWV1ZSBpbXBvcnQgRnVsbAogaW1wb3J0IG11bHRpcHJvY2Vzc2luZwotZnJvbSBtdWx0aXByb2Nlc3NpbmcucXVldWVzIGltcG9ydCBTaW1wbGVRdWV1ZSwgRnVsbAorZnJvbSBtdWx0aXByb2Nlc3NpbmcgaW1wb3J0IFNpbXBsZVF1ZXVlCiBmcm9tIG11bHRpcHJvY2Vzc2luZy5jb25uZWN0aW9uIGltcG9ydCB3YWl0CiBpbXBvcnQgdGhyZWFkaW5nCiBpbXBvcnQgd2Vha3JlZgpAQCAtMjQwLDYgKzI0MSw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAidGVybWluYXRlZCBhYnJ1cHRseSB3aGlsZSB0aGUgZnV0dXJlIHdhcyAiCiAgICAgICAgICAgICAgICAgICAgICAgICAicnVubmluZyBvciBwZW5kaW5nLiIKICAgICAgICAgICAgICAgICAgICAgKSkKKyAgICAgICAgICAgICAgICAjIERlbGV0ZSByZWZlcmVuY2VzIHRvIG9iamVjdC4gU2VlIGlzc3VlMTYyODQKKyAgICAgICAgICAgICAgICBkZWwgd29ya19pdGVtCiAgICAgICAgICAgICBwZW5kaW5nX3dvcmtfaXRlbXMuY2xlYXIoKQogICAgICAgICAgICAgIyBUZXJtaW5hdGUgcmVtYWluaW5nIHdvcmtlcnMgZm9yY2libHk6IHRoZSBxdWV1ZXMgb3IgdGhlaXIKICAgICAgICAgICAgICMgbG9ja3MgbWF5IGJlIGluIGEgZGlydHkgc3RhdGUgYW5kIGJsb2NrIGZvcmV2ZXIuCkBAIC0yNjQsNiArMjY3LDggQEAKICAgICAgICAgICAgICAgICAgICAgd29ya19pdGVtLmZ1dHVyZS5zZXRfZXhjZXB0aW9uKHJlc3VsdF9pdGVtLmV4Y2VwdGlvbikKICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICB3b3JrX2l0ZW0uZnV0dXJlLnNldF9yZXN1bHQocmVzdWx0X2l0ZW0ucmVzdWx0KQorICAgICAgICAgICAgICAgICMgRGVsZXRlIHJlZmVyZW5jZXMgdG8gb2JqZWN0LiBTZWUgaXNzdWUxNjI4NAorICAgICAgICAgICAgICAgIGRlbCB3b3JrX2l0ZW0KICAgICAgICAgIyBDaGVjayB3aGV0aGVyIHdlIHNob3VsZCBzdGFydCBzaHV0dGluZyBkb3duLgogICAgICAgICBleGVjdXRvciA9IGV4ZWN1dG9yX3JlZmVyZW5jZSgpCiAgICAgICAgICMgTm8gbW9yZSB3b3JrIGl0ZW1zIGNhbiBiZSBhZGRlZCBpZjoKQEAgLTMyNyw3ICszMzIsNyBAQAogICAgICAgICBfY2hlY2tfc3lzdGVtX2xpbWl0cygpCiAKICAgICAgICAgaWYgbWF4X3dvcmtlcnMgaXMgTm9uZToKLSAgICAgICAgICAgIHNlbGYuX21heF93b3JrZXJzID0gbXVsdGlwcm9jZXNzaW5nLmNwdV9jb3VudCgpCisgICAgICAgICAgICBzZWxmLl9tYXhfd29ya2VycyA9IG9zLmNwdV9jb3VudCgpIG9yIDEKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuX21heF93b3JrZXJzID0gbWF4X3dvcmtlcnMKIApkaWZmIC0tZ2l0IGEvTGliL2NvbmN1cnJlbnQvZnV0dXJlcy90aHJlYWQucHkgYi9MaWIvY29uY3VycmVudC9mdXR1cmVzL3RocmVhZC5weQppbmRleCA5NWJiNjgyLi5mOWJlYjBmIDEwMDY0NAotLS0gYS9MaWIvY29uY3VycmVudC9mdXR1cmVzL3RocmVhZC5weQorKysgYi9MaWIvY29uY3VycmVudC9mdXR1cmVzL3RocmVhZC5weQpAQCAtNjMsNiArNjMsOCBAQAogICAgICAgICAgICAgd29ya19pdGVtID0gd29ya19xdWV1ZS5nZXQoYmxvY2s9VHJ1ZSkKICAgICAgICAgICAgIGlmIHdvcmtfaXRlbSBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICB3b3JrX2l0ZW0ucnVuKCkKKyAgICAgICAgICAgICAgICAjIERlbGV0ZSByZWZlcmVuY2VzIHRvIG9iamVjdC4gU2VlIGlzc3VlMTYyODQKKyAgICAgICAgICAgICAgICBkZWwgd29ya19pdGVtCiAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgIGV4ZWN1dG9yID0gZXhlY3V0b3JfcmVmZXJlbmNlKCkKICAgICAgICAgICAgICMgRXhpdCBpZjoKZGlmZiAtLWdpdCBhL0xpYi9jb25maWdwYXJzZXIucHkgYi9MaWIvY29uZmlncGFyc2VyLnB5CmluZGV4IGFlYmY4YTAuLmRjYjdlYzQgMTAwNjQ0Ci0tLSBhL0xpYi9jb25maWdwYXJzZXIucHkKKysrIGIvTGliL2NvbmZpZ3BhcnNlci5weQpAQCAtMjQxLDEyICsyNDEsOSBAQAogICAgICIiIkEgc3RyaW5nIHN1YnN0aXR1dGlvbiByZXF1aXJlZCBhIHNldHRpbmcgd2hpY2ggd2FzIG5vdCBhdmFpbGFibGUuIiIiCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgb3B0aW9uLCBzZWN0aW9uLCByYXd2YWwsIHJlZmVyZW5jZSk6Ci0gICAgICAgIG1zZyA9ICgiQmFkIHZhbHVlIHN1YnN0aXR1dGlvbjpcbiIKLSAgICAgICAgICAgICAgICJcdHNlY3Rpb246IFslc11cbiIKLSAgICAgICAgICAgICAgICJcdG9wdGlvbiA6ICVzXG4iCi0gICAgICAgICAgICAgICAiXHRrZXkgICAgOiAlc1xuIgotICAgICAgICAgICAgICAgIlx0cmF3dmFsIDogJXNcbiIKLSAgICAgICAgICAgICAgICUgKHNlY3Rpb24sIG9wdGlvbiwgcmVmZXJlbmNlLCByYXd2YWwpKQorICAgICAgICBtc2cgPSAoIkJhZCB2YWx1ZSBzdWJzdGl0dXRpb246IG9wdGlvbiB7IXJ9IGluIHNlY3Rpb24geyFyfSBjb250YWlucyAiCisgICAgICAgICAgICAgICAiYW4gaW50ZXJwb2xhdGlvbiBrZXkgeyFyfSB3aGljaCBpcyBub3QgYSB2YWxpZCBvcHRpb24gbmFtZS4gIgorICAgICAgICAgICAgICAgIlJhdyB2YWx1ZTogeyFyfSIuZm9ybWF0KG9wdGlvbiwgc2VjdGlvbiwgcmVmZXJlbmNlLCByYXd2YWwpKQogICAgICAgICBJbnRlcnBvbGF0aW9uRXJyb3IuX19pbml0X18oc2VsZiwgb3B0aW9uLCBzZWN0aW9uLCBtc2cpCiAgICAgICAgIHNlbGYucmVmZXJlbmNlID0gcmVmZXJlbmNlCiAgICAgICAgIHNlbGYuYXJncyA9IChvcHRpb24sIHNlY3Rpb24sIHJhd3ZhbCwgcmVmZXJlbmNlKQpAQCAtMjY0LDExICsyNjEsMTEgQEAKICAgICAiIiJSYWlzZWQgd2hlbiBzdWJzdGl0dXRpb25zIGFyZSBuZXN0ZWQgdG9vIGRlZXBseS4iIiIKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvcHRpb24sIHNlY3Rpb24sIHJhd3ZhbCk6Ci0gICAgICAgIG1zZyA9ICgiVmFsdWUgaW50ZXJwb2xhdGlvbiB0b28gZGVlcGx5IHJlY3Vyc2l2ZTpcbiIKLSAgICAgICAgICAgICAgICJcdHNlY3Rpb246IFslc11cbiIKLSAgICAgICAgICAgICAgICJcdG9wdGlvbiA6ICVzXG4iCi0gICAgICAgICAgICAgICAiXHRyYXd2YWwgOiAlc1xuIgotICAgICAgICAgICAgICAgJSAoc2VjdGlvbiwgb3B0aW9uLCByYXd2YWwpKQorICAgICAgICBtc2cgPSAoIlJlY3Vyc2lvbiBsaW1pdCBleGNlZWRlZCBpbiB2YWx1ZSBzdWJzdGl0dXRpb246IG9wdGlvbiB7IXJ9ICIKKyAgICAgICAgICAgICAgICJpbiBzZWN0aW9uIHshcn0gY29udGFpbnMgYW4gaW50ZXJwb2xhdGlvbiBrZXkgd2hpY2ggIgorICAgICAgICAgICAgICAgImNhbm5vdCBiZSBzdWJzdGl0dXRlZCBpbiB7fSBzdGVwcy4gUmF3IHZhbHVlOiB7IXJ9IgorICAgICAgICAgICAgICAgIiIuZm9ybWF0KG9wdGlvbiwgc2VjdGlvbiwgTUFYX0lOVEVSUE9MQVRJT05fREVQVEgsCisgICAgICAgICAgICAgICAgICAgICAgICAgcmF3dmFsKSkKICAgICAgICAgSW50ZXJwb2xhdGlvbkVycm9yLl9faW5pdF9fKHNlbGYsIG9wdGlvbiwgc2VjdGlvbiwgbXNnKQogICAgICAgICBzZWxmLmFyZ3MgPSAob3B0aW9uLCBzZWN0aW9uLCByYXd2YWwpCiAKQEAgLTM4NCw4ICszODEsOSBAQAogCiAgICAgZGVmIF9pbnRlcnBvbGF0ZV9zb21lKHNlbGYsIHBhcnNlciwgb3B0aW9uLCBhY2N1bSwgcmVzdCwgc2VjdGlvbiwgbWFwLAogICAgICAgICAgICAgICAgICAgICAgICAgICBkZXB0aCk6CisgICAgICAgIHJhd3ZhbCA9IHBhcnNlci5nZXQoc2VjdGlvbiwgb3B0aW9uLCByYXc9VHJ1ZSwgZmFsbGJhY2s9cmVzdCkKICAgICAgICAgaWYgZGVwdGggPiBNQVhfSU5URVJQT0xBVElPTl9ERVBUSDoKLSAgICAgICAgICAgIHJhaXNlIEludGVycG9sYXRpb25EZXB0aEVycm9yKG9wdGlvbiwgc2VjdGlvbiwgcmVzdCkKKyAgICAgICAgICAgIHJhaXNlIEludGVycG9sYXRpb25EZXB0aEVycm9yKG9wdGlvbiwgc2VjdGlvbiwgcmF3dmFsKQogICAgICAgICB3aGlsZSByZXN0OgogICAgICAgICAgICAgcCA9IHJlc3QuZmluZCgiJSIpCiAgICAgICAgICAgICBpZiBwIDwgMDoKQEAgLTQxMCw3ICs0MDgsNyBAQAogICAgICAgICAgICAgICAgICAgICB2ID0gbWFwW3Zhcl0KICAgICAgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEludGVycG9sYXRpb25NaXNzaW5nT3B0aW9uRXJyb3IoCi0gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb24sIHNlY3Rpb24sIHJlc3QsIHZhcikKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbiwgc2VjdGlvbiwgcmF3dmFsLCB2YXIpCiAgICAgICAgICAgICAgICAgaWYgIiUiIGluIHY6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2ludGVycG9sYXRlX3NvbWUocGFyc2VyLCBvcHRpb24sIGFjY3VtLCB2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24sIG1hcCwgZGVwdGggKyAxKQpAQCAtNDQ0LDggKzQ0Miw5IEBACiAKICAgICBkZWYgX2ludGVycG9sYXRlX3NvbWUoc2VsZiwgcGFyc2VyLCBvcHRpb24sIGFjY3VtLCByZXN0LCBzZWN0aW9uLCBtYXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcHRoKToKKyAgICAgICAgcmF3dmFsID0gcGFyc2VyLmdldChzZWN0aW9uLCBvcHRpb24sIHJhdz1UcnVlLCBmYWxsYmFjaz1yZXN0KQogICAgICAgICBpZiBkZXB0aCA+IE1BWF9JTlRFUlBPTEFUSU9OX0RFUFRIOgotICAgICAgICAgICAgcmFpc2UgSW50ZXJwb2xhdGlvbkRlcHRoRXJyb3Iob3B0aW9uLCBzZWN0aW9uLCByZXN0KQorICAgICAgICAgICAgcmFpc2UgSW50ZXJwb2xhdGlvbkRlcHRoRXJyb3Iob3B0aW9uLCBzZWN0aW9uLCByYXd2YWwpCiAgICAgICAgIHdoaWxlIHJlc3Q6CiAgICAgICAgICAgICBwID0gcmVzdC5maW5kKCIkIikKICAgICAgICAgICAgIGlmIHAgPCAwOgpAQCAtNDgyLDcgKzQ4MSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1vcmUgdGhhbiBvbmUgJzonIGZvdW5kOiAlciIgJSAocmVzdCwpKQogICAgICAgICAgICAgICAgIGV4Y2VwdCAoS2V5RXJyb3IsIE5vU2VjdGlvbkVycm9yLCBOb09wdGlvbkVycm9yKToKICAgICAgICAgICAgICAgICAgICAgcmFpc2UgSW50ZXJwb2xhdGlvbk1pc3NpbmdPcHRpb25FcnJvcigKLSAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbiwgc2VjdGlvbiwgcmVzdCwgIjoiLmpvaW4ocGF0aCkpCisgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb24sIHNlY3Rpb24sIHJhd3ZhbCwgIjoiLmpvaW4ocGF0aCkpCiAgICAgICAgICAgICAgICAgaWYgIiQiIGluIHY6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2ludGVycG9sYXRlX3NvbWUocGFyc2VyLCBvcHQsIGFjY3VtLCB2LCBzZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpY3QocGFyc2VyLml0ZW1zKHNlY3QsIHJhdz1UcnVlKSksCkBAIC02NzAsNyArNjY5LDcgQEAKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsIGVuY29kaW5nPWVuY29kaW5nKSBhcyBmcDoKICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcmVhZChmcCwgZmlsZW5hbWUpCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICByZWFkX29rLmFwcGVuZChmaWxlbmFtZSkKICAgICAgICAgcmV0dXJuIHJlYWRfb2sKZGlmZiAtLWdpdCBhL0xpYi9jb250ZXh0bGliLnB5IGIvTGliL2NvbnRleHRsaWIucHkKaW5kZXggYjAzZjgyOC4uMDdiMjI2MSAxMDA2NDQKLS0tIGEvTGliL2NvbnRleHRsaWIucHkKKysrIGIvTGliL2NvbnRleHRsaWIucHkKQEAgLTQsNyArNCw4IEBACiBmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBkZXF1ZQogZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHdyYXBzCiAKLV9fYWxsX18gPSBbImNvbnRleHRtYW5hZ2VyIiwgImNsb3NpbmciLCAiQ29udGV4dERlY29yYXRvciIsICJFeGl0U3RhY2siXQorX19hbGxfXyA9IFsiY29udGV4dG1hbmFnZXIiLCAiY2xvc2luZyIsICJDb250ZXh0RGVjb3JhdG9yIiwgIkV4aXRTdGFjayIsCisgICAgICAgICAgICJyZWRpcmVjdF9zdGRvdXQiLCAic3VwcHJlc3MiXQogCiAKIGNsYXNzIENvbnRleHREZWNvcmF0b3Iob2JqZWN0KToKQEAgLTMzLDIxICszNCwzMSBAQAogY2xhc3MgX0dlbmVyYXRvckNvbnRleHRNYW5hZ2VyKENvbnRleHREZWNvcmF0b3IpOgogICAgICIiIkhlbHBlciBmb3IgQGNvbnRleHRtYW5hZ2VyIGRlY29yYXRvci4iIiIKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmdW5jLCAqYXJncywgKiprd2RzKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZnVuYywgYXJncywga3dkcyk6CiAgICAgICAgIHNlbGYuZ2VuID0gZnVuYygqYXJncywgKiprd2RzKQogICAgICAgICBzZWxmLmZ1bmMsIHNlbGYuYXJncywgc2VsZi5rd2RzID0gZnVuYywgYXJncywga3dkcworICAgICAgICAjIElzc3VlIDE5MzMwOiBlbnN1cmUgY29udGV4dCBtYW5hZ2VyIGluc3RhbmNlcyBoYXZlIGdvb2QgZG9jc3RyaW5ncworICAgICAgICBkb2MgPSBnZXRhdHRyKGZ1bmMsICJfX2RvY19fIiwgTm9uZSkKKyAgICAgICAgaWYgZG9jIGlzIE5vbmU6CisgICAgICAgICAgICBkb2MgPSB0eXBlKHNlbGYpLl9fZG9jX18KKyAgICAgICAgc2VsZi5fX2RvY19fID0gZG9jCisgICAgICAgICMgVW5mb3J0dW5hdGVseSwgdGhpcyBzdGlsbCBkb2Vzbid0IHByb3ZpZGUgZ29vZCBoZWxwIG91dHB1dCB3aGVuCisgICAgICAgICMgaW5zcGVjdGluZyB0aGUgY3JlYXRlZCBjb250ZXh0IG1hbmFnZXIgaW5zdGFuY2VzLCBzaW5jZSBweWRvYworICAgICAgICAjIGN1cnJlbnRseSBieXBhc3NlcyB0aGUgaW5zdGFuY2UgZG9jc3RyaW5nIGFuZCBzaG93cyB0aGUgZG9jc3RyaW5nCisgICAgICAgICMgZm9yIHRoZSBjbGFzcyBpbnN0ZWFkLgorICAgICAgICAjIFNlZSBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTk0MDQgZm9yIG1vcmUgZGV0YWlscy4KIAogICAgIGRlZiBfcmVjcmVhdGVfY20oc2VsZik6CiAgICAgICAgICMgX0dDTSBpbnN0YW5jZXMgYXJlIG9uZS1zaG90IGNvbnRleHQgbWFuYWdlcnMsIHNvIHRoZQogICAgICAgICAjIENNIG11c3QgYmUgcmVjcmVhdGVkIGVhY2ggdGltZSBhIGRlY29yYXRlZCBmdW5jdGlvbiBpcwogICAgICAgICAjIGNhbGxlZAotICAgICAgICByZXR1cm4gc2VsZi5fX2NsYXNzX18oc2VsZi5mdW5jLCAqc2VsZi5hcmdzLCAqKnNlbGYua3dkcykKKyAgICAgICAgcmV0dXJuIHNlbGYuX19jbGFzc19fKHNlbGYuZnVuYywgc2VsZi5hcmdzLCBzZWxmLmt3ZHMpCiAKICAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICByZXR1cm4gbmV4dChzZWxmLmdlbikKICAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246Ci0gICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoImdlbmVyYXRvciBkaWRuJ3QgeWllbGQiKQorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJnZW5lcmF0b3IgZGlkbid0IHlpZWxkIikgZnJvbSBOb25lCiAKICAgICBkZWYgX19leGl0X18oc2VsZiwgdHlwZSwgdmFsdWUsIHRyYWNlYmFjayk6CiAgICAgICAgIGlmIHR5cGUgaXMgTm9uZToKQEAgLTExMiw3ICsxMjMsNyBAQAogICAgICIiIgogICAgIEB3cmFwcyhmdW5jKQogICAgIGRlZiBoZWxwZXIoKmFyZ3MsICoqa3dkcyk6Ci0gICAgICAgIHJldHVybiBfR2VuZXJhdG9yQ29udGV4dE1hbmFnZXIoZnVuYywgKmFyZ3MsICoqa3dkcykKKyAgICAgICAgcmV0dXJuIF9HZW5lcmF0b3JDb250ZXh0TWFuYWdlcihmdW5jLCBhcmdzLCBrd2RzKQogICAgIHJldHVybiBoZWxwZXIKIAogCkBAIC0xNDAsNiArMTUxLDYyIEBACiAgICAgZGVmIF9fZXhpdF9fKHNlbGYsICpleGNfaW5mbyk6CiAgICAgICAgIHNlbGYudGhpbmcuY2xvc2UoKQogCitjbGFzcyByZWRpcmVjdF9zdGRvdXQ6CisgICAgIiIiQ29udGV4dCBtYW5hZ2VyIGZvciB0ZW1wb3JhcmlseSByZWRpcmVjdGluZyBzdGRvdXQgdG8gYW5vdGhlciBmaWxlCisKKyAgICAgICAgIyBIb3cgdG8gc2VuZCBoZWxwKCkgdG8gc3RkZXJyCisgICAgICAgIHdpdGggcmVkaXJlY3Rfc3Rkb3V0KHN5cy5zdGRlcnIpOgorICAgICAgICAgICAgaGVscChkaXIpCisKKyAgICAgICAgIyBIb3cgdG8gd3JpdGUgaGVscCgpIHRvIGEgZmlsZQorICAgICAgICB3aXRoIG9wZW4oJ2hlbHAudHh0JywgJ3cnKSBhcyBmOgorICAgICAgICAgICAgd2l0aCByZWRpcmVjdF9zdGRvdXQoZik6CisgICAgICAgICAgICAgICAgaGVscChwb3cpCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmV3X3RhcmdldCk6CisgICAgICAgIHNlbGYuX25ld190YXJnZXQgPSBuZXdfdGFyZ2V0CisgICAgICAgICMgV2UgdXNlIGEgbGlzdCBvZiBvbGQgdGFyZ2V0cyB0byBtYWtlIHRoaXMgQ00gcmUtZW50cmFudAorICAgICAgICBzZWxmLl9vbGRfdGFyZ2V0cyA9IFtdCisKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICBzZWxmLl9vbGRfdGFyZ2V0cy5hcHBlbmQoc3lzLnN0ZG91dCkKKyAgICAgICAgc3lzLnN0ZG91dCA9IHNlbGYuX25ld190YXJnZXQKKyAgICAgICAgcmV0dXJuIHNlbGYuX25ld190YXJnZXQKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCBleGN0eXBlLCBleGNpbnN0LCBleGN0Yik6CisgICAgICAgIHN5cy5zdGRvdXQgPSBzZWxmLl9vbGRfdGFyZ2V0cy5wb3AoKQorCisKK2NsYXNzIHN1cHByZXNzOgorICAgICIiIkNvbnRleHQgbWFuYWdlciB0byBzdXBwcmVzcyBzcGVjaWZpZWQgZXhjZXB0aW9ucworCisgICAgQWZ0ZXIgdGhlIGV4Y2VwdGlvbiBpcyBzdXBwcmVzc2VkLCBleGVjdXRpb24gcHJvY2VlZHMgd2l0aCB0aGUgbmV4dAorICAgIHN0YXRlbWVudCBmb2xsb3dpbmcgdGhlIHdpdGggc3RhdGVtZW50LgorCisgICAgICAgICB3aXRoIHN1cHByZXNzKEZpbGVOb3RGb3VuZEVycm9yKToKKyAgICAgICAgICAgICBvcy5yZW1vdmUoc29tZWZpbGUpCisgICAgICAgICAjIEV4ZWN1dGlvbiBzdGlsbCByZXN1bWVzIGhlcmUgaWYgdGhlIGZpbGUgd2FzIGFscmVhZHkgcmVtb3ZlZAorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICpleGNlcHRpb25zKToKKyAgICAgICAgc2VsZi5fZXhjZXB0aW9ucyA9IGV4Y2VwdGlvbnMKKworICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCBleGN0eXBlLCBleGNpbnN0LCBleGN0Yik6CisgICAgICAgICMgVW5saWtlIGlzaW5zdGFuY2UgYW5kIGlzc3ViY2xhc3MsIENQeXRob24gZXhjZXB0aW9uIGhhbmRsaW5nCisgICAgICAgICMgY3VycmVudGx5IG9ubHkgbG9va3MgYXQgdGhlIGNvbmNyZXRlIHR5cGUgaGllcmFyY2h5IChpZ25vcmluZworICAgICAgICAjIHRoZSBpbnN0YW5jZSBhbmQgc3ViY2xhc3MgY2hlY2tpbmcgaG9va3MpLiBXaGlsZSBHdWlkbyBjb25zaWRlcnMKKyAgICAgICAgIyB0aGF0IGEgYnVnIHJhdGhlciB0aGFuIGEgZmVhdHVyZSwgaXQncyBhIGZhaXJseSBoYXJkIG9uZSB0byBmaXgKKyAgICAgICAgIyBkdWUgdG8gdmFyaW91cyBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLiBzdXBwcmVzcyBwcm92aWRlcworICAgICAgICAjIHRoZSBzaW1wbGVyIGlzc3ViY2xhc3MgYmFzZWQgc2VtYW50aWNzLCByYXRoZXIgdGhhbiB0cnlpbmcgdG8KKyAgICAgICAgIyBleGFjdGx5IHJlcHJvZHVjZSB0aGUgbGltaXRhdGlvbnMgb2YgdGhlIENQeXRob24gaW50ZXJwcmV0ZXIuCisgICAgICAgICMKKyAgICAgICAgIyBTZWUgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTEyMDI5IGZvciBtb3JlIGRldGFpbHMKKyAgICAgICAgcmV0dXJuIGV4Y3R5cGUgaXMgbm90IE5vbmUgYW5kIGlzc3ViY2xhc3MoZXhjdHlwZSwgc2VsZi5fZXhjZXB0aW9ucykKKwogCiAjIEluc3BpcmVkIGJ5IGRpc2N1c3Npb25zIG9uIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxMzU4NQogY2xhc3MgRXhpdFN0YWNrKG9iamVjdCk6CmRpZmYgLS1naXQgYS9MaWIvY29weS5weSBiL0xpYi9jb3B5LnB5CmluZGV4IGJiODg0MGUuLmYwZmI0NDMgMTAwNjQ0Ci0tLSBhL0xpYi9jb3B5LnB5CisrKyBiL0xpYi9jb3B5LnB5CkBAIC0yODEsNyArMjgxLDcgQEAKICAgICBpZiBuID4gMjoKICAgICAgICAgc3RhdGUgPSBpbmZvWzJdCiAgICAgZWxzZToKLSAgICAgICAgc3RhdGUgPSB7fQorICAgICAgICBzdGF0ZSA9IE5vbmUKICAgICBpZiBuID4gMzoKICAgICAgICAgbGlzdGl0ZXIgPSBpbmZvWzNdCiAgICAgZWxzZToKQEAgLTI5NSw3ICsyOTUsNyBAQAogICAgIHkgPSBjYWxsYWJsZSgqYXJncykKICAgICBtZW1vW2lkKHgpXSA9IHkKIAotICAgIGlmIHN0YXRlOgorICAgIGlmIHN0YXRlIGlzIG5vdCBOb25lOgogICAgICAgICBpZiBkZWVwOgogICAgICAgICAgICAgc3RhdGUgPSBkZWVwY29weShzdGF0ZSwgbWVtbykKICAgICAgICAgaWYgaGFzYXR0cih5LCAnX19zZXRzdGF0ZV9fJyk6CmRpZmYgLS1naXQgYS9MaWIvY29weXJlZy5weSBiL0xpYi9jb3B5cmVnLnB5CmluZGV4IDY2YzBmOGEuLjY3ZjViYjAgMTAwNjQ0Ci0tLSBhL0xpYi9jb3B5cmVnLnB5CisrKyBiL0xpYi9jb3B5cmVnLnB5CkBAIC04Nyw2ICs4NywxMiBAQAogZGVmIF9fbmV3b2JqX18oY2xzLCAqYXJncyk6CiAgICAgcmV0dXJuIGNscy5fX25ld19fKGNscywgKmFyZ3MpCiAKK2RlZiBfX25ld29ial9leF9fKGNscywgYXJncywga3dhcmdzKToKKyAgICAiIiJVc2VkIGJ5IHBpY2tsZSBwcm90b2NvbCA0LCBpbnN0ZWFkIG9mIF9fbmV3b2JqX18gdG8gYWxsb3cgY2xhc3NlcyB3aXRoCisgICAga2V5d29yZC1vbmx5IGFyZ3VtZW50cyB0byBiZSBwaWNrbGVkIGNvcnJlY3RseS4KKyAgICAiIiIKKyAgICByZXR1cm4gY2xzLl9fbmV3X18oY2xzLCAqYXJncywgKiprd2FyZ3MpCisKIGRlZiBfc2xvdG5hbWVzKGNscyk6CiAgICAgIiIiUmV0dXJuIGEgbGlzdCBvZiBzbG90IG5hbWVzIGZvciBhIGdpdmVuIGNsYXNzLgogCmRpZmYgLS1naXQgYS9MaWIvY3R5cGVzL19faW5pdF9fLnB5IGIvTGliL2N0eXBlcy9fX2luaXRfXy5weQppbmRleCBjOTJlMTMwLi41YzgwM2ZmIDEwMDY0NAotLS0gYS9MaWIvY3R5cGVzL19faW5pdF9fLnB5CisrKyBiL0xpYi9jdHlwZXMvX19pbml0X18ucHkKQEAgLTM0LDI0ICszNCwyMiBAQAogICAgICBGVU5DRkxBR19VU0VfRVJSTk8gYXMgX0ZVTkNGTEFHX1VTRV9FUlJOTywgXAogICAgICBGVU5DRkxBR19VU0VfTEFTVEVSUk9SIGFzIF9GVU5DRkxBR19VU0VfTEFTVEVSUk9SCiAKLSIiIgotV0lOT0xFQVBJIC0+IEhSRVNVTFQKLVdJTk9MRUFQSV8odHlwZSkKLQotU1RETUVUSE9EQ0FMTFRZUEUKLQotU1RETUVUSE9EKG5hbWUpCi1TVERNRVRIT0RfKHR5cGUsIG5hbWUpCi0KLVNUREFQSUNBTExUWVBFCi0iIiIKKyMgV0lOT0xFQVBJIC0+IEhSRVNVTFQKKyMgV0lOT0xFQVBJXyh0eXBlKQorIworIyBTVERNRVRIT0RDQUxMVFlQRQorIworIyBTVERNRVRIT0QobmFtZSkKKyMgU1RETUVUSE9EXyh0eXBlLCBuYW1lKQorIworIyBTVERBUElDQUxMVFlQRQogCiBkZWYgY3JlYXRlX3N0cmluZ19idWZmZXIoaW5pdCwgc2l6ZT1Ob25lKToKICAgICAiIiJjcmVhdGVfc3RyaW5nX2J1ZmZlcihhQnl0ZXMpIC0+IGNoYXJhY3RlciBhcnJheQogICAgIGNyZWF0ZV9zdHJpbmdfYnVmZmVyKGFuSW50ZWdlcikgLT4gY2hhcmFjdGVyIGFycmF5CiAgICAgY3JlYXRlX3N0cmluZ19idWZmZXIoYVN0cmluZywgYW5JbnRlZ2VyKSAtPiBjaGFyYWN0ZXIgYXJyYXkKICAgICAiIiIKLSAgICBpZiBpc2luc3RhbmNlKGluaXQsIChzdHIsIGJ5dGVzKSk6CisgICAgaWYgaXNpbnN0YW5jZShpbml0LCBieXRlcyk6CiAgICAgICAgIGlmIHNpemUgaXMgTm9uZToKICAgICAgICAgICAgIHNpemUgPSBsZW4oaW5pdCkrMQogICAgICAgICBidWZ0eXBlID0gY19jaGFyICogc2l6ZQpAQCAtMjg2LDcgKzI4NCw3IEBACiAgICAgY3JlYXRlX3VuaWNvZGVfYnVmZmVyKGFuSW50ZWdlcikgLT4gY2hhcmFjdGVyIGFycmF5CiAgICAgY3JlYXRlX3VuaWNvZGVfYnVmZmVyKGFTdHJpbmcsIGFuSW50ZWdlcikgLT4gY2hhcmFjdGVyIGFycmF5CiAgICAgIiIiCi0gICAgaWYgaXNpbnN0YW5jZShpbml0LCAoc3RyLCBieXRlcykpOgorICAgIGlmIGlzaW5zdGFuY2UoaW5pdCwgc3RyKToKICAgICAgICAgaWYgc2l6ZSBpcyBOb25lOgogICAgICAgICAgICAgc2l6ZSA9IGxlbihpbml0KSsxCiAgICAgICAgIGJ1ZnR5cGUgPSBjX3djaGFyICogc2l6ZQpAQCAtMzk1LDcgKzM5Myw3IEBACiAgICAgICAgIF90eXBlXyA9ICJsIgogICAgICAgICAjIF9jaGVja19yZXR2YWxfIGlzIGNhbGxlZCB3aXRoIHRoZSBmdW5jdGlvbidzIHJlc3VsdCB3aGVuIGl0CiAgICAgICAgICMgaXMgdXNlZCBhcyByZXN0eXBlLiAgSXQgY2hlY2tzIGZvciB0aGUgRkFJTEVEIGJpdCwgYW5kCi0gICAgICAgICMgcmFpc2VzIGEgV2luZG93c0Vycm9yIGlmIGl0IGlzIHNldC4KKyAgICAgICAgIyByYWlzZXMgYW4gT1NFcnJvciBpZiBpdCBpcyBzZXQuCiAgICAgICAgICMKICAgICAgICAgIyBUaGUgX2NoZWNrX3JldHZhbF8gbWV0aG9kIGlzIGltcGxlbWVudGVkIGluIEMsIHNvIHRoYXQgdGhlCiAgICAgICAgICMgbWV0aG9kIGRlZmluaXRpb24gaXRzZWxmIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGUgdHJhY2ViYWNrCkBAIC00MDcsNyArNDA1LDcgQEAKICAgICBjbGFzcyBPbGVETEwoQ0RMTCk6CiAgICAgICAgICIiIlRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIGRsbCBleHBvcnRpbmcgZnVuY3Rpb25zIHVzaW5nIHRoZQogICAgICAgICBXaW5kb3dzIHN0ZGNhbGwgY2FsbGluZyBjb252ZW50aW9uLCBhbmQgcmV0dXJuaW5nIEhSRVNVTFQuCi0gICAgICAgIEhSRVNVTFQgZXJyb3IgdmFsdWVzIGFyZSBhdXRvbWF0aWNhbGx5IHJhaXNlZCBhcyBXaW5kb3dzRXJyb3IKKyAgICAgICAgSFJFU1VMVCBlcnJvciB2YWx1ZXMgYXJlIGF1dG9tYXRpY2FsbHkgcmFpc2VkIGFzIE9TRXJyb3IKICAgICAgICAgZXhjZXB0aW9ucy4KICAgICAgICAgIiIiCiAgICAgICAgIF9mdW5jX2ZsYWdzXyA9IF9GVU5DRkxBR19TVERDQUxMCkBAIC00NTYsNyArNDU0LDcgQEAKICAgICAgICAgICAgIGNvZGUgPSBHZXRMYXN0RXJyb3IoKQogICAgICAgICBpZiBkZXNjciBpcyBOb25lOgogICAgICAgICAgICAgZGVzY3IgPSBGb3JtYXRFcnJvcihjb2RlKS5zdHJpcCgpCi0gICAgICAgIHJldHVybiBXaW5kb3dzRXJyb3IoTm9uZSwgZGVzY3IsIE5vbmUsIGNvZGUpCisgICAgICAgIHJldHVybiBPU0Vycm9yKE5vbmUsIGRlc2NyLCBOb25lLCBjb2RlKQogCiBpZiBzaXplb2YoY191aW50KSA9PSBzaXplb2YoY192b2lkX3ApOgogICAgIGNfc2l6ZV90ID0gY191aW50CmRpZmYgLS1naXQgYS9MaWIvY3R5cGVzL21hY2hvbGliL2ZldGNoX21hY2hvbGliLmJhdCBiL0xpYi9jdHlwZXMvbWFjaG9saWIvZmV0Y2hfbWFjaG9saWIuYmF0CmluZGV4IGY5ZTFjMGQuLmY0NzRkNWMgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvbWFjaG9saWIvZmV0Y2hfbWFjaG9saWIuYmF0CisrKyBiL0xpYi9jdHlwZXMvbWFjaG9saWIvZmV0Y2hfbWFjaG9saWIuYmF0CkBAIC0xICsxIEBACi1zdm4gZXhwb3J0IC0tZm9yY2UgaHR0cDovL3N2bi5yZWQtYmVhbi5jb20vYm9iL21hY2hvbGliL3RydW5rL21hY2hvbGliLyAuCitzdm4gZXhwb3J0IC0tZm9yY2UgaHR0cDovL3N2bi5yZWQtYmVhbi5jb20vYm9iL21hY2hvbGliL3RydW5rL21hY2hvbGliLyAuDQpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L19faW5pdF9fLnB5IGIvTGliL2N0eXBlcy90ZXN0L19faW5pdF9fLnB5CmluZGV4IGNjNWZlMDIuLjI2YTcwYjcgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvdGVzdC9fX2luaXRfXy5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvX19pbml0X18ucHkKQEAgLTEsMjA4ICsxLDE0IEBACi1pbXBvcnQgb3MsIHN5cywgdW5pdHRlc3QsIGdldG9wdCwgdGltZQoraW1wb3J0IG9zCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogCi11c2VfcmVzb3VyY2VzID0gW10KKyMgc2tpcCB0ZXN0cyBpZiBfY3R5cGVzIHdhcyBub3QgYnVpbHQKK2N0eXBlcyA9IHN1cHBvcnQuaW1wb3J0X21vZHVsZSgnY3R5cGVzJykKK2N0eXBlc19zeW1ib2xzID0gZGlyKGN0eXBlcykKIAotY2xhc3MgUmVzb3VyY2VEZW5pZWQoRXhjZXB0aW9uKToKLSAgICAiIiJUZXN0IHNraXBwZWQgYmVjYXVzZSBpdCByZXF1ZXN0ZWQgYSBkaXNhbGxvd2VkIHJlc291cmNlLgorZGVmIG5lZWRfc3ltYm9sKG5hbWUpOgorICAgIHJldHVybiB1bml0dGVzdC5za2lwVW5sZXNzKG5hbWUgaW4gY3R5cGVzX3N5bWJvbHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3shcn0gaXMgcmVxdWlyZWQnLmZvcm1hdChuYW1lKSkKIAotICAgIFRoaXMgaXMgcmFpc2VkIHdoZW4gYSB0ZXN0IGNhbGxzIHJlcXVpcmVzKCkgZm9yIGEgcmVzb3VyY2UgdGhhdAotICAgIGhhcyBub3QgYmUgZW5hYmxlZC4gIFJlc291cmNlcyBhcmUgZGVmaW5lZCBieSB0ZXN0IG1vZHVsZXMuCi0gICAgIiIiCi0KLWRlZiBpc19yZXNvdXJjZV9lbmFibGVkKHJlc291cmNlKToKLSAgICAiIiJUZXN0IHdoZXRoZXIgYSByZXNvdXJjZSBpcyBlbmFibGVkLgotCi0gICAgSWYgdGhlIGNhbGxlcidzIG1vZHVsZSBpcyBfX21haW5fXyB0aGVuIGF1dG9tYXRpY2FsbHkgcmV0dXJuIFRydWUuIiIiCi0gICAgaWYgc3lzLl9nZXRmcmFtZSgpLmZfYmFjay5mX2dsb2JhbHMuZ2V0KCJfX25hbWVfXyIpID09ICJfX21haW5fXyI6Ci0gICAgICAgIHJldHVybiBUcnVlCi0gICAgcmVzdWx0ID0gdXNlX3Jlc291cmNlcyBpcyBub3QgTm9uZSBhbmQgXAotICAgICAgICAgICAocmVzb3VyY2UgaW4gdXNlX3Jlc291cmNlcyBvciAiKiIgaW4gdXNlX3Jlc291cmNlcykKLSAgICBpZiBub3QgcmVzdWx0OgotICAgICAgICBfdW5hdmFpbFtyZXNvdXJjZV0gPSBOb25lCi0gICAgcmV0dXJuIHJlc3VsdAotCi1fdW5hdmFpbCA9IHt9Ci1kZWYgcmVxdWlyZXMocmVzb3VyY2UsIG1zZz1Ob25lKToKLSAgICAiIiJSYWlzZSBSZXNvdXJjZURlbmllZCBpZiB0aGUgc3BlY2lmaWVkIHJlc291cmNlIGlzIG5vdCBhdmFpbGFibGUuCi0KLSAgICBJZiB0aGUgY2FsbGVyJ3MgbW9kdWxlIGlzIF9fbWFpbl9fIHRoZW4gYXV0b21hdGljYWxseSByZXR1cm4gVHJ1ZS4iIiIKLSAgICAjIHNlZSBpZiB0aGUgY2FsbGVyJ3MgbW9kdWxlIGlzIF9fbWFpbl9fIC0gaWYgc28sIHRyZWF0IGFzIGlmCi0gICAgIyB0aGUgcmVzb3VyY2Ugd2FzIHNldAotICAgIGlmIHN5cy5fZ2V0ZnJhbWUoKS5mX2JhY2suZl9nbG9iYWxzLmdldCgiX19uYW1lX18iKSA9PSAiX19tYWluX18iOgotICAgICAgICByZXR1cm4KLSAgICBpZiBub3QgaXNfcmVzb3VyY2VfZW5hYmxlZChyZXNvdXJjZSk6Ci0gICAgICAgIGlmIG1zZyBpcyBOb25lOgotICAgICAgICAgICAgbXNnID0gIlVzZSBvZiB0aGUgYCVzJyByZXNvdXJjZSBub3QgZW5hYmxlZCIgJSByZXNvdXJjZQotICAgICAgICByYWlzZSBSZXNvdXJjZURlbmllZChtc2cpCi0KLWRlZiBmaW5kX3BhY2thZ2VfbW9kdWxlcyhwYWNrYWdlLCBtYXNrKToKLSAgICBpbXBvcnQgZm5tYXRjaAotICAgIGlmIChoYXNhdHRyKHBhY2thZ2UsICJfX2xvYWRlcl9fIikgYW5kCi0gICAgICAgICAgICBoYXNhdHRyKHBhY2thZ2UuX19sb2FkZXJfXywgJ19maWxlcycpKToKLSAgICAgICAgcGF0aCA9IHBhY2thZ2UuX19uYW1lX18ucmVwbGFjZSgiLiIsIG9zLnBhdGguc2VwKQotICAgICAgICBtYXNrID0gb3MucGF0aC5qb2luKHBhdGgsIG1hc2spCi0gICAgICAgIGZvciBmbm0gaW4gcGFja2FnZS5fX2xvYWRlcl9fLl9maWxlcy5rZXlzKCk6Ci0gICAgICAgICAgICBpZiBmbm1hdGNoLmZubWF0Y2hjYXNlKGZubSwgbWFzayk6Ci0gICAgICAgICAgICAgICAgeWllbGQgb3MucGF0aC5zcGxpdGV4dChmbm0pWzBdLnJlcGxhY2Uob3MucGF0aC5zZXAsICIuIikKLSAgICBlbHNlOgotICAgICAgICBwYXRoID0gcGFja2FnZS5fX3BhdGhfX1swXQotICAgICAgICBmb3IgZm5tIGluIG9zLmxpc3RkaXIocGF0aCk6Ci0gICAgICAgICAgICBpZiBmbm1hdGNoLmZubWF0Y2hjYXNlKGZubSwgbWFzayk6Ci0gICAgICAgICAgICAgICAgeWllbGQgIiVzLiVzIiAlIChwYWNrYWdlLl9fbmFtZV9fLCBvcy5wYXRoLnNwbGl0ZXh0KGZubSlbMF0pCi0KLWRlZiBnZXRfdGVzdHMocGFja2FnZSwgbWFzaywgdmVyYm9zaXR5LCBleGNsdWRlPSgpKToKLSAgICAiIiJSZXR1cm4gYSBsaXN0IG9mIHNraXBwZWQgdGVzdCBtb2R1bGVzLCBhbmQgYSBsaXN0IG9mIHRlc3QgY2FzZXMuIiIiCi0gICAgdGVzdHMgPSBbXQotICAgIHNraXBwZWQgPSBbXQotICAgIGZvciBtb2RuYW1lIGluIGZpbmRfcGFja2FnZV9tb2R1bGVzKHBhY2thZ2UsIG1hc2spOgotICAgICAgICBpZiBtb2RuYW1lLnNwbGl0KCIuIilbLTFdIGluIGV4Y2x1ZGU6Ci0gICAgICAgICAgICBza2lwcGVkLmFwcGVuZChtb2RuYW1lKQotICAgICAgICAgICAgaWYgdmVyYm9zaXR5ID4gMToKLSAgICAgICAgICAgICAgICBwcmludCgiU2tpcHBlZCAlczogZXhjbHVkZWQiICUgbW9kbmFtZSwgZmlsZT1zeXMuc3RkZXJyKQotICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgbW9kID0gX19pbXBvcnRfXyhtb2RuYW1lLCBnbG9iYWxzKCksIGxvY2FscygpLCBbJyonXSkKLSAgICAgICAgZXhjZXB0IChSZXNvdXJjZURlbmllZCwgdW5pdHRlc3QuU2tpcFRlc3QpIGFzIGRldGFpbDoKLSAgICAgICAgICAgIHNraXBwZWQuYXBwZW5kKG1vZG5hbWUpCi0gICAgICAgICAgICBpZiB2ZXJib3NpdHkgPiAxOgotICAgICAgICAgICAgICAgIHByaW50KCJTa2lwcGVkICVzOiAlcyIgJSAobW9kbmFtZSwgZGV0YWlsKSwgZmlsZT1zeXMuc3RkZXJyKQotICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgZm9yIG5hbWUgaW4gZGlyKG1vZCk6Ci0gICAgICAgICAgICBpZiBuYW1lLnN0YXJ0c3dpdGgoIl8iKToKLSAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgbyA9IGdldGF0dHIobW9kLCBuYW1lKQotICAgICAgICAgICAgaWYgdHlwZShvKSBpcyB0eXBlKHVuaXR0ZXN0LlRlc3RDYXNlKSBhbmQgaXNzdWJjbGFzcyhvLCB1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgICAgICAgICAgICAgdGVzdHMuYXBwZW5kKG8pCi0gICAgcmV0dXJuIHNraXBwZWQsIHRlc3RzCi0KLWRlZiB1c2FnZSgpOgotICAgIHByaW50KF9fZG9jX18pCi0gICAgcmV0dXJuIDEKLQotZGVmIHRlc3Rfd2l0aF9yZWZjb3VudHMocnVubmVyLCB2ZXJib3NpdHksIHRlc3RjYXNlKToKLSAgICAiIiJSdW4gdGVzdGNhc2Ugc2V2ZXJhbCB0aW1lcywgdHJhY2tpbmcgcmVmZXJlbmNlIGNvdW50cy4iIiIKLSAgICBpbXBvcnQgZ2MKLSAgICBpbXBvcnQgY3R5cGVzCi0gICAgcHRjID0gY3R5cGVzLl9wb2ludGVyX3R5cGVfY2FjaGUuY29weSgpCi0gICAgY2ZjID0gY3R5cGVzLl9jX2Z1bmN0eXBlX2NhY2hlLmNvcHkoKQotICAgIHdmYyA9IGN0eXBlcy5fd2luX2Z1bmN0eXBlX2NhY2hlLmNvcHkoKQotCi0gICAgIyB3aGVuIHNlYXJjaGluZyBmb3IgcmVmY291bnQgbGVha3MsIHdlIGhhdmUgdG8gbWFudWFsbHkgcmVzZXQgYW55Ci0gICAgIyBjYWNoZXMgdGhhdCBjdHlwZXMgaGFzLgotICAgIGRlZiBjbGVhbnVwKCk6Ci0gICAgICAgIGN0eXBlcy5fcG9pbnRlcl90eXBlX2NhY2hlID0gcHRjLmNvcHkoKQotICAgICAgICBjdHlwZXMuX2NfZnVuY3R5cGVfY2FjaGUgPSBjZmMuY29weSgpCi0gICAgICAgIGN0eXBlcy5fd2luX2Z1bmN0eXBlX2NhY2hlID0gd2ZjLmNvcHkoKQotICAgICAgICBnYy5jb2xsZWN0KCkKLQotICAgIHRlc3QgPSB1bml0dGVzdC5tYWtlU3VpdGUodGVzdGNhc2UpCi0gICAgZm9yIGkgaW4gcmFuZ2UoNSk6Ci0gICAgICAgIHJjID0gc3lzLmdldHRvdGFscmVmY291bnQoKQotICAgICAgICBydW5uZXIucnVuKHRlc3QpCi0gICAgICAgIGNsZWFudXAoKQotICAgIENPVU5UID0gNQotICAgIHJlZmNvdW50cyA9IFtOb25lXSAqIENPVU5UCi0gICAgZm9yIGkgaW4gcmFuZ2UoQ09VTlQpOgotICAgICAgICByYyA9IHN5cy5nZXR0b3RhbHJlZmNvdW50KCkKLSAgICAgICAgcnVubmVyLnJ1bih0ZXN0KQotICAgICAgICBjbGVhbnVwKCkKLSAgICAgICAgcmVmY291bnRzW2ldID0gc3lzLmdldHRvdGFscmVmY291bnQoKSAtIHJjCi0gICAgaWYgZmlsdGVyKE5vbmUsIHJlZmNvdW50cyk6Ci0gICAgICAgIHByaW50KCIlcyBsZWFrczpcblx0IiAlIHRlc3RjYXNlLCByZWZjb3VudHMpCi0gICAgZWxpZiB2ZXJib3NpdHk6Ci0gICAgICAgIHByaW50KCIlczogb2suIiAlIHRlc3RjYXNlKQotCi1jbGFzcyBUZXN0UnVubmVyKHVuaXR0ZXN0LlRleHRUZXN0UnVubmVyKToKLSAgICBkZWYgcnVuKHNlbGYsIHRlc3QsIHNraXBwZWQpOgotICAgICAgICAiUnVuIHRoZSBnaXZlbiB0ZXN0IGNhc2Ugb3IgdGVzdCBzdWl0ZS4iCi0gICAgICAgICMgU2FtZSBhcyB1bml0dGVzdC5UZXh0VGVzdFJ1bm5lci5ydW4sIGV4Y2VwdCB0aGF0IGl0IHJlcG9ydHMKLSAgICAgICAgIyBza2lwcGVkIHRlc3RzLgotICAgICAgICByZXN1bHQgPSBzZWxmLl9tYWtlUmVzdWx0KCkKLSAgICAgICAgc3RhcnRUaW1lID0gdGltZS50aW1lKCkKLSAgICAgICAgdGVzdChyZXN1bHQpCi0gICAgICAgIHN0b3BUaW1lID0gdGltZS50aW1lKCkKLSAgICAgICAgdGltZVRha2VuID0gc3RvcFRpbWUgLSBzdGFydFRpbWUKLSAgICAgICAgcmVzdWx0LnByaW50RXJyb3JzKCkKLSAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGVsbihyZXN1bHQuc2VwYXJhdG9yMikKLSAgICAgICAgcnVuID0gcmVzdWx0LnRlc3RzUnVuCi0gICAgICAgIGlmIF91bmF2YWlsOiAjc2tpcHBlZDoKLSAgICAgICAgICAgIHJlcXVlc3RlZCA9IGxpc3QoX3VuYXZhaWwua2V5cygpKQotICAgICAgICAgICAgcmVxdWVzdGVkLnNvcnQoKQotICAgICAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGVsbigiUmFuICVkIHRlc3QlcyBpbiAlLjNmcyAoJXMgbW9kdWxlJXMgc2tpcHBlZCkiICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ1biwgcnVuICE9IDEgYW5kICJzIiBvciAiIiwgdGltZVRha2VuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuKHNraXBwZWQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuKHNraXBwZWQpICE9IDEgYW5kICJzIiBvciAiIikpCi0gICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZWxuKCJVbmF2YWlsYWJsZSByZXNvdXJjZXM6ICVzIiAlICIsICIuam9pbihyZXF1ZXN0ZWQpKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGVsbigiUmFuICVkIHRlc3QlcyBpbiAlLjNmcyIgJQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocnVuLCBydW4gIT0gMSBhbmQgInMiIG9yICIiLCB0aW1lVGFrZW4pKQotICAgICAgICBzZWxmLnN0cmVhbS53cml0ZWxuKCkKLSAgICAgICAgaWYgbm90IHJlc3VsdC53YXNTdWNjZXNzZnVsKCk6Ci0gICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZSgiRkFJTEVEICgiKQotICAgICAgICAgICAgZmFpbGVkLCBlcnJvcmVkID0gbWFwKGxlbiwgKHJlc3VsdC5mYWlsdXJlcywgcmVzdWx0LmVycm9ycykpCi0gICAgICAgICAgICBpZiBmYWlsZWQ6Ci0gICAgICAgICAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGUoImZhaWx1cmVzPSVkIiAlIGZhaWxlZCkKLSAgICAgICAgICAgIGlmIGVycm9yZWQ6Ci0gICAgICAgICAgICAgICAgaWYgZmFpbGVkOiBzZWxmLnN0cmVhbS53cml0ZSgiLCAiKQotICAgICAgICAgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlKCJlcnJvcnM9JWQiICUgZXJyb3JlZCkKLSAgICAgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlbG4oIikiKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGVsbigiT0siKQotICAgICAgICByZXR1cm4gcmVzdWx0Ci0KLQotZGVmIG1haW4oKnBhY2thZ2VzKToKLSAgICB0cnk6Ci0gICAgICAgIG9wdHMsIGFyZ3MgPSBnZXRvcHQuZ2V0b3B0KHN5cy5hcmd2WzE6XSwgInJxdnU6eDoiKQotICAgIGV4Y2VwdCBnZXRvcHQuZXJyb3I6Ci0gICAgICAgIHJldHVybiB1c2FnZSgpCi0KLSAgICB2ZXJib3NpdHkgPSAxCi0gICAgc2VhcmNoX2xlYWtzID0gRmFsc2UKLSAgICBleGNsdWRlID0gW10KLSAgICBmb3IgZmxhZywgdmFsdWUgaW4gb3B0czoKLSAgICAgICAgaWYgZmxhZyA9PSAiLXEiOgotICAgICAgICAgICAgdmVyYm9zaXR5IC09IDEKLSAgICAgICAgZWxpZiBmbGFnID09ICItdiI6Ci0gICAgICAgICAgICB2ZXJib3NpdHkgKz0gMQotICAgICAgICBlbGlmIGZsYWcgPT0gIi1yIjoKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBzeXMuZ2V0dG90YWxyZWZjb3VudAotICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICAgICAgICAgICAgIHByaW50KCItciBmbGFnIHJlcXVpcmVzIFB5dGhvbiBkZWJ1ZyBidWlsZCIsIGZpbGU9c3lzLnN0ZGVycikKLSAgICAgICAgICAgICAgICByZXR1cm4gLTEKLSAgICAgICAgICAgIHNlYXJjaF9sZWFrcyA9IFRydWUKLSAgICAgICAgZWxpZiBmbGFnID09ICItdSI6Ci0gICAgICAgICAgICB1c2VfcmVzb3VyY2VzLmV4dGVuZCh2YWx1ZS5zcGxpdCgiLCIpKQotICAgICAgICBlbGlmIGZsYWcgPT0gIi14IjoKLSAgICAgICAgICAgIGV4Y2x1ZGUuZXh0ZW5kKHZhbHVlLnNwbGl0KCIsIikpCi0KLSAgICBtYXNrID0gInRlc3RfKi5weSIKLSAgICBpZiBhcmdzOgotICAgICAgICBtYXNrID0gYXJnc1swXQotCi0gICAgZm9yIHBhY2thZ2UgaW4gcGFja2FnZXM6Ci0gICAgICAgIHJ1bl90ZXN0cyhwYWNrYWdlLCBtYXNrLCB2ZXJib3NpdHksIHNlYXJjaF9sZWFrcywgZXhjbHVkZSkKLQotCi1kZWYgcnVuX3Rlc3RzKHBhY2thZ2UsIG1hc2ssIHZlcmJvc2l0eSwgc2VhcmNoX2xlYWtzLCBleGNsdWRlKToKLSAgICBza2lwcGVkLCB0ZXN0Y2FzZXMgPSBnZXRfdGVzdHMocGFja2FnZSwgbWFzaywgdmVyYm9zaXR5LCBleGNsdWRlKQotICAgIHJ1bm5lciA9IFRlc3RSdW5uZXIodmVyYm9zaXR5PXZlcmJvc2l0eSkKLQotICAgIHN1aXRlcyA9IFt1bml0dGVzdC5tYWtlU3VpdGUobykgZm9yIG8gaW4gdGVzdGNhc2VzXQotICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKHN1aXRlcykKLSAgICByZXN1bHQgPSBydW5uZXIucnVuKHN1aXRlLCBza2lwcGVkKQotCi0gICAgaWYgc2VhcmNoX2xlYWtzOgotICAgICAgICAjIGh1bnQgZm9yIHJlZmNvdW50IGxlYWtzCi0gICAgICAgIHJ1bm5lciA9IEJhc2ljVGVzdFJ1bm5lcigpCi0gICAgICAgIGZvciB0IGluIHRlc3RjYXNlczoKLSAgICAgICAgICAgIHRlc3Rfd2l0aF9yZWZjb3VudHMocnVubmVyLCB2ZXJib3NpdHksIHQpCi0KLSAgICByZXR1cm4gYm9vbChyZXN1bHQuZXJyb3JzKQotCi1jbGFzcyBCYXNpY1Rlc3RSdW5uZXI6Ci0gICAgZGVmIHJ1bihzZWxmLCB0ZXN0KToKLSAgICAgICAgcmVzdWx0ID0gdW5pdHRlc3QuVGVzdFJlc3VsdCgpCi0gICAgICAgIHRlc3QocmVzdWx0KQotICAgICAgICByZXR1cm4gcmVzdWx0CitkZWYgbG9hZF90ZXN0cygqYXJncyk6CisgICAgcmV0dXJuIHN1cHBvcnQubG9hZF9wYWNrYWdlX3Rlc3RzKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICphcmdzKQpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L19fbWFpbl9fLnB5IGIvTGliL2N0eXBlcy90ZXN0L19fbWFpbl9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2MmE5ZWMKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvY3R5cGVzL3Rlc3QvX19tYWluX18ucHkKQEAgLTAsMCArMSw0IEBACitmcm9tIGN0eXBlcy50ZXN0IGltcG9ydCBsb2FkX3Rlc3RzCitpbXBvcnQgdW5pdHRlc3QKKwordW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvY3R5cGVzL3Rlc3QvcnVudGVzdHMucHkgYi9MaWIvY3R5cGVzL3Rlc3QvcnVudGVzdHMucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3YTJiMjYuLjAwMDAwMDAKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3J1bnRlc3RzLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotIiIiVXNhZ2U6IHJ1bnRlc3RzLnB5IFstcV0gWy1yXSBbLXZdIFstdSByZXNvdXJjZXNdIFttYXNrXQotCi1SdW4gYWxsIHRlc3RzIGZvdW5kIGluIHRoaXMgZGlyZWN0b3J5LCBhbmQgcHJpbnQgYSBzdW1tYXJ5IG9mIHRoZSByZXN1bHRzLgotQ29tbWFuZCBsaW5lIGZsYWdzOgotICAtcSAgICAgcXVpZXQgbW9kZTogZG9uJ3QgcHJpbnQgYW55dGhpbmcgd2hpbGUgdGhlIHRlc3RzIGFyZSBydW5uaW5nCi0gIC1yICAgICBydW4gdGVzdHMgcmVwZWF0ZWRseSwgbG9vayBmb3IgcmVmY291bnQgbGVha3MKLSAgLXU8cmVzb3VyY2VzPgotICAgICAgICAgQWRkIHJlc291cmNlcyB0byB0aGUgbGl0cyBvZiBhbGxvd2VkIHJlc291cmNlcy4gJyonIGFsbG93cyBhbGwKLSAgICAgICAgIHJlc291cmNlcy4KLSAgLXYgICAgIHZlcmJvc2UgbW9kZTogcHJpbnQgdGhlIHRlc3QgY3VycmVudGx5IGV4ZWN1dGVkCi0gIC14PHRlc3QxWyx0ZXN0Mi4uLl0+Ci0gICAgICAgICBFeGNsdWRlIHNwZWNpZmllZCB0ZXN0cy4KLSAgbWFzayAgIG1hc2sgdG8gc2VsZWN0IGZpbGVuYW1lcyBjb250YWluaW5nIHRlc3RjYXNlcywgd2lsZGNhcmRzIGFsbG93ZWQKLSIiIgotaW1wb3J0IHN5cwotaW1wb3J0IGN0eXBlcy50ZXN0Ci0KLWlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgc3lzLmV4aXQoY3R5cGVzLnRlc3QubWFpbihjdHlwZXMudGVzdCkpCmRpZmYgLS1naXQgYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9hcnJheXMucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9hcnJheXMucHkKaW5kZXggOTliOTdhYS4uOGNhNzdlMCAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfYXJyYXlzLnB5CisrKyBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2FycmF5cy5weQpAQCAtMSw2ICsxLDggQEAKIGltcG9ydCB1bml0dGVzdAogZnJvbSBjdHlwZXMgaW1wb3J0ICoKIAorZnJvbSBjdHlwZXMudGVzdCBpbXBvcnQgbmVlZF9zeW1ib2wKKwogZm9ybWF0cyA9ICJiQmhIaUlsTHFRZmQiCiAKIGZvcm1hdHMgPSBjX2J5dGUsIGNfdWJ5dGUsIGNfc2hvcnQsIGNfdXNob3J0LCBjX2ludCwgY191aW50LCBcCkBAIC05OCwyMCArMTAwLDE2IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3pbMTo0OjJdLCBiIm8iKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN6LnZhbHVlLCBiImZvbyIpCiAKLSAgICB0cnk6Ci0gICAgICAgIGNyZWF0ZV91bmljb2RlX2J1ZmZlcgotICAgIGV4Y2VwdCBOYW1lRXJyb3I6Ci0gICAgICAgIHBhc3MKLSAgICBlbHNlOgotICAgICAgICBkZWYgdGVzdF9mcm9tX2FkZHJlc3NXKHNlbGYpOgotICAgICAgICAgICAgcCA9IGNyZWF0ZV91bmljb2RlX2J1ZmZlcigiZm9vIikKLSAgICAgICAgICAgIHN6ID0gKGNfd2NoYXIgKiAzKS5mcm9tX2FkZHJlc3MoYWRkcmVzc29mKHApKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzels6XSwgImZvbyIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN6Wzo6XSwgImZvbyIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN6Wzo6LTFdLCAib29mIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3pbOjozXSwgImYiKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzelsxOjQ6Ml0sICJvIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3oudmFsdWUsICJmb28iKQorICAgIEBuZWVkX3N5bWJvbCgnY3JlYXRlX3VuaWNvZGVfYnVmZmVyJykKKyAgICBkZWYgdGVzdF9mcm9tX2FkZHJlc3NXKHNlbGYpOgorICAgICAgICBwID0gY3JlYXRlX3VuaWNvZGVfYnVmZmVyKCJmb28iKQorICAgICAgICBzeiA9IChjX3djaGFyICogMykuZnJvbV9hZGRyZXNzKGFkZHJlc3NvZihwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzels6XSwgImZvbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3pbOjpdLCAiZm9vIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzels6Oi0xXSwgIm9vZiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3pbOjozXSwgImYiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN6WzE6NDoyXSwgIm8iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN6LnZhbHVlLCAiZm9vIikKIAogICAgIGRlZiB0ZXN0X2NhY2hlKHNlbGYpOgogICAgICAgICAjIEFycmF5IHR5cGVzIGFyZSBjYWNoZWQgaW50ZXJuYWxseSBpbiB0aGUgX2N0eXBlcyBleHRlbnNpb24sCmRpZmYgLS1naXQgYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9hc19wYXJhbWV0ZXIucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9hc19wYXJhbWV0ZXIucHkKaW5kZXggNDM3MDNlMy4uOTQ4YjQ2MyAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfYXNfcGFyYW1ldGVyLnB5CisrKyBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2FzX3BhcmFtZXRlci5weQpAQCAtMSw1ICsxLDYgQEAKIGltcG9ydCB1bml0dGVzdAogZnJvbSBjdHlwZXMgaW1wb3J0ICoKK2Zyb20gY3R5cGVzLnRlc3QgaW1wb3J0IG5lZWRfc3ltYm9sCiBpbXBvcnQgX2N0eXBlc190ZXN0CiAKIGRsbCA9IENETEwoX2N0eXBlc190ZXN0Ll9fZmlsZV9fKQpAQCAtMTcsMTEgKzE4LDggQEAKICAgICBkZWYgd3JhcChzZWxmLCBwYXJhbSk6CiAgICAgICAgIHJldHVybiBwYXJhbQogCisgICAgQG5lZWRfc3ltYm9sKCdjX3djaGFyJykKICAgICBkZWYgdGVzdF93Y2hhcl9wYXJtKHNlbGYpOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBjX3djaGFyCi0gICAgICAgIGV4Y2VwdCBOYW1lRXJyb3I6Ci0gICAgICAgICAgICByZXR1cm4KICAgICAgICAgZiA9IGRsbC5fdGVzdGZ1bmNfaV9iaGlsZmQKICAgICAgICAgZi5hcmd0eXBlcyA9IFtjX2J5dGUsIGNfd2NoYXIsIGNfaW50LCBjX2xvbmcsIGNfZmxvYXQsIGNfZG91YmxlXQogICAgICAgICByZXN1bHQgPSBmKHNlbGYud3JhcCgxKSwgc2VsZi53cmFwKCJ4IiksIHNlbGYud3JhcCgzKSwgc2VsZi53cmFwKDQpLCBzZWxmLndyYXAoNS4wKSwgc2VsZi53cmFwKDYuMCkpCmRpZmYgLS1naXQgYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9iaXRmaWVsZHMucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9iaXRmaWVsZHMucHkKaW5kZXggNzdkZTYwNi4uYjM5ZDgyYyAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfYml0ZmllbGRzLnB5CisrKyBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2JpdGZpZWxkcy5weQpAQCAtMSw0ICsxLDUgQEAKIGZyb20gY3R5cGVzIGltcG9ydCAqCitmcm9tIGN0eXBlcy50ZXN0IGltcG9ydCBuZWVkX3N5bWJvbAogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgb3MKIApAQCAtMTI3LDIwICsxMjgsMTggQEAKICAgICAgICAgcmVzdWx0ID0gc2VsZi5mYWlsX2ZpZWxkcygoImEiLCBjX2NoYXIsIDEpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgKFR5cGVFcnJvciwgJ2JpdCBmaWVsZHMgbm90IGFsbG93ZWQgZm9yIHR5cGUgY19jaGFyJykpCiAKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgY193Y2hhcgotICAgICAgICBleGNlcHQgTmFtZUVycm9yOgotICAgICAgICAgICAgcGFzcwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5mYWlsX2ZpZWxkcygoImEiLCBjX3djaGFyLCAxKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCAoVHlwZUVycm9yLCAnYml0IGZpZWxkcyBub3QgYWxsb3dlZCBmb3IgdHlwZSBjX3djaGFyJykpCi0KICAgICAgICAgY2xhc3MgRHVtbXkoU3RydWN0dXJlKToKICAgICAgICAgICAgIF9maWVsZHNfID0gW10KIAogICAgICAgICByZXN1bHQgPSBzZWxmLmZhaWxfZmllbGRzKCgiYSIsIER1bW15LCAxKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIChUeXBlRXJyb3IsICdiaXQgZmllbGRzIG5vdCBhbGxvd2VkIGZvciB0eXBlIER1bW15JykpCiAKKyAgICBAbmVlZF9zeW1ib2woJ2Nfd2NoYXInKQorICAgIGRlZiB0ZXN0X2Nfd2NoYXIoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHNlbGYuZmFpbF9maWVsZHMoKCJhIiwgY193Y2hhciwgMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LAorICAgICAgICAgICAgICAgIChUeXBlRXJyb3IsICdiaXQgZmllbGRzIG5vdCBhbGxvd2VkIGZvciB0eXBlIGNfd2NoYXInKSkKKwogICAgIGRlZiB0ZXN0X3NpbmdsZV9iaXRmaWVsZF9zaXplKHNlbGYpOgogICAgICAgICBmb3IgY190eXAgaW4gaW50X3R5cGVzOgogICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5mYWlsX2ZpZWxkcygoImEiLCBjX3R5cCwgLTEpKQpAQCAtMjQwLDcgKzIzOSw3IEBACiAgICAgICAgICAgICBfYW5vbnltb3VzXyA9IFsiXyJdCiAgICAgICAgICAgICBfZmllbGRzXyA9IFsoIl8iLCBYKV0KIAotICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoY3R5cGVzLCAiY191aW50MzIiKSwgImNfaW50MzIgaXMgcmVxdWlyZWQiKQorICAgIEBuZWVkX3N5bWJvbCgnY191aW50MzInKQogICAgIGRlZiB0ZXN0X3VpbnQzMihzZWxmKToKICAgICAgICAgY2xhc3MgWChTdHJ1Y3R1cmUpOgogICAgICAgICAgICAgX2ZpZWxkc18gPSBbKCJhIiwgY191aW50MzIsIDMyKV0KQEAgLTI1MCw3ICsyNDksNyBAQAogICAgICAgICB4LmEgPSAweEZEQ0JBOTg3CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5hLCAweEZEQ0JBOTg3KQogCi0gICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihjdHlwZXMsICJjX3VpbnQ2NCIpLCAiY19pbnQ2NCBpcyByZXF1aXJlZCIpCisgICAgQG5lZWRfc3ltYm9sKCdjX3VpbnQ2NCcpCiAgICAgZGVmIHRlc3RfdWludDY0KHNlbGYpOgogICAgICAgICBjbGFzcyBYKFN0cnVjdHVyZSk6CiAgICAgICAgICAgICBfZmllbGRzXyA9IFsoImEiLCBjX3VpbnQ2NCwgNjQpXQpAQCAtMjYwLDUgKzI1OSwzMyBAQAogICAgICAgICB4LmEgPSAweEZFRENCQTk4NzY1NDMyMTEKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LmEsIDB4RkVEQ0JBOTg3NjU0MzIxMSkKIAorICAgIEBuZWVkX3N5bWJvbCgnY191aW50MzInKQorICAgIGRlZiB0ZXN0X3VpbnQzMl9zd2FwX2xpdHRsZV9lbmRpYW4oc2VsZik6CisgICAgICAgICMgSXNzdWUgIzIzMzE5CisgICAgICAgIGNsYXNzIExpdHRsZShMaXR0bGVFbmRpYW5TdHJ1Y3R1cmUpOgorICAgICAgICAgICAgX2ZpZWxkc18gPSBbKCJhIiwgY191aW50MzIsIDI0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICgiYiIsIGNfdWludDMyLCA0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICgiYyIsIGNfdWludDMyLCA0KV0KKyAgICAgICAgYiA9IGJ5dGVhcnJheSg0KQorICAgICAgICB4ID0gTGl0dGxlLmZyb21fYnVmZmVyKGIpCisgICAgICAgIHguYSA9IDB4YWJjZGVmCisgICAgICAgIHguYiA9IDEKKyAgICAgICAgeC5jID0gMgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIsIGInXHhlZlx4Y2RceGFiXHgyMScpCisKKyAgICBAbmVlZF9zeW1ib2woJ2NfdWludDMyJykKKyAgICBkZWYgdGVzdF91aW50MzJfc3dhcF9iaWdfZW5kaWFuKHNlbGYpOgorICAgICAgICAjIElzc3VlICMyMzMxOQorICAgICAgICBjbGFzcyBCaWcoQmlnRW5kaWFuU3RydWN0dXJlKToKKyAgICAgICAgICAgIF9maWVsZHNfID0gWygiYSIsIGNfdWludDMyLCAyNCksCisgICAgICAgICAgICAgICAgICAgICAgICAoImIiLCBjX3VpbnQzMiwgNCksCisgICAgICAgICAgICAgICAgICAgICAgICAoImMiLCBjX3VpbnQzMiwgNCldCisgICAgICAgIGIgPSBieXRlYXJyYXkoNCkKKyAgICAgICAgeCA9IEJpZy5mcm9tX2J1ZmZlcihiKQorICAgICAgICB4LmEgPSAweGFiY2RlZgorICAgICAgICB4LmIgPSAxCisgICAgICAgIHguYyA9IDIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLCBiJ1x4YWJceGNkXHhlZlx4MTInKQorCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfYnVmZmVycy5weSBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2J1ZmZlcnMucHkKaW5kZXggMGQxMmY0Ny4uMTY2ZmFhZiAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfYnVmZmVycy5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9idWZmZXJzLnB5CkBAIC0xLDQgKzEsNSBAQAogZnJvbSBjdHlwZXMgaW1wb3J0ICoKK2Zyb20gY3R5cGVzLnRlc3QgaW1wb3J0IG5lZWRfc3ltYm9sCiBpbXBvcnQgdW5pdHRlc3QKIAogY2xhc3MgU3RyaW5nQnVmZmVyVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtMjAsNDMgKzIxLDQ0IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYls6OjJdLCBiImFjIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiWzo6NV0sIGIiYSIpCiAKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjcmVhdGVfc3RyaW5nX2J1ZmZlciwgImFiYyIpCisKICAgICBkZWYgdGVzdF9idWZmZXJfaW50ZXJmYWNlKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihieXRlYXJyYXkoY3JlYXRlX3N0cmluZ19idWZmZXIoMCkpKSwgMCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYnl0ZWFycmF5KGNyZWF0ZV9zdHJpbmdfYnVmZmVyKDEpKSksIDEpCiAKLSAgICB0cnk6Ci0gICAgICAgIGNfd2NoYXIKLSAgICBleGNlcHQgTmFtZUVycm9yOgotICAgICAgICBwYXNzCi0gICAgZWxzZToKLSAgICAgICAgZGVmIHRlc3RfdW5pY29kZV9idWZmZXIoc2VsZik6Ci0gICAgICAgICAgICBiID0gY3JlYXRlX3VuaWNvZGVfYnVmZmVyKDMyKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYiksIDMyKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXplb2YoYiksIDMyICogc2l6ZW9mKGNfd2NoYXIpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKGJbMF0pLCBzdHIpCisgICAgQG5lZWRfc3ltYm9sKCdjX3djaGFyJykKKyAgICBkZWYgdGVzdF91bmljb2RlX2J1ZmZlcihzZWxmKToKKyAgICAgICAgYiA9IGNyZWF0ZV91bmljb2RlX2J1ZmZlcigzMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYiksIDMyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpemVvZihiKSwgMzIgKiBzaXplb2YoY193Y2hhcikpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShiWzBdKSwgc3RyKQogCi0gICAgICAgICAgICBiID0gY3JlYXRlX3VuaWNvZGVfYnVmZmVyKCJhYmMiKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYiksIDQpICMgdHJhaWxpbmcgbnVsIGNoYXIKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZW9mKGIpLCA0ICogc2l6ZW9mKGNfd2NoYXIpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKGJbMF0pLCBzdHIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJbMF0sICJhIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYls6XSwgImFiY1wwIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYls6Ol0sICJhYmNcMCIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJbOjotMV0sICJcMGNiYSIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJbOjoyXSwgImFjIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYls6OjVdLCAiYSIpCisgICAgICAgIGIgPSBjcmVhdGVfdW5pY29kZV9idWZmZXIoImFiYyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGIpLCA0KSAjIHRyYWlsaW5nIG51bCBjaGFyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZW9mKGIpLCA0ICogc2l6ZW9mKGNfd2NoYXIpKQorICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUoYlswXSksIHN0cikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiWzBdLCAiYSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYls6XSwgImFiY1wwIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiWzo6XSwgImFiY1wwIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiWzo6LTFdLCAiXDBjYmEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJbOjoyXSwgImFjIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiWzo6NV0sICJhIikKIAotICAgICAgICBkZWYgdGVzdF91bmljb2RlX2NvbnZlcnNpb24oc2VsZik6Ci0gICAgICAgICAgICBiID0gY3JlYXRlX3VuaWNvZGVfYnVmZmVyKCJhYmMiKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYiksIDQpICMgdHJhaWxpbmcgbnVsIGNoYXIKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZW9mKGIpLCA0ICogc2l6ZW9mKGNfd2NoYXIpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKGJbMF0pLCBzdHIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJbMF0sICJhIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYls6XSwgImFiY1wwIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYls6Ol0sICJhYmNcMCIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJbOjotMV0sICJcMGNiYSIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJbOjoyXSwgImFjIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYls6OjVdLCAiYSIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY3JlYXRlX3VuaWNvZGVfYnVmZmVyLCBiImFiYyIpCisKKyAgICBAbmVlZF9zeW1ib2woJ2Nfd2NoYXInKQorICAgIGRlZiB0ZXN0X3VuaWNvZGVfY29udmVyc2lvbihzZWxmKToKKyAgICAgICAgYiA9IGNyZWF0ZV91bmljb2RlX2J1ZmZlcigiYWJjIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYiksIDQpICMgdHJhaWxpbmcgbnVsIGNoYXIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXplb2YoYiksIDQgKiBzaXplb2YoY193Y2hhcikpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShiWzBdKSwgc3RyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJbMF0sICJhIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiWzpdLCAiYWJjXDAiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJbOjpdLCAiYWJjXDAiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJbOjotMV0sICJcMGNiYSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYls6OjJdLCAiYWMiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJbOjo1XSwgImEiKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfYnl0ZXMucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9ieXRlcy5weQppbmRleCBlZTQ5YzQ1Li4yMGZhMDU2IDEwMDY0NAotLS0gYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9ieXRlcy5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9ieXRlcy5weQpAQCAtNiwyNyArNiw0MCBAQAogY2xhc3MgQnl0ZXNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9jX2NoYXIoc2VsZik6CiAgICAgICAgIHggPSBjX2NoYXIoYiJ4IikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjX2NoYXIsICJ4IikKICAgICAgICAgeC52YWx1ZSA9IGIieSIKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgeC52YWx1ZSA9ICJ5IgogICAgICAgICBjX2NoYXIuZnJvbV9wYXJhbShiIngiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNfY2hhci5mcm9tX3BhcmFtLCAieCIpCiAgICAgICAgIChjX2NoYXIgKiAzKShiImEiLCBiImIiLCBiImMiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNfY2hhciAqIDMsICJhIiwgImIiLCAiYyIpCiAKICAgICBkZWYgdGVzdF9jX3djaGFyKHNlbGYpOgogICAgICAgICB4ID0gY193Y2hhcigieCIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY193Y2hhciwgYiJ4IikKICAgICAgICAgeC52YWx1ZSA9ICJ5IgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICB4LnZhbHVlID0gYiJ5IgogICAgICAgICBjX3djaGFyLmZyb21fcGFyYW0oIngiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNfd2NoYXIuZnJvbV9wYXJhbSwgYiJ4IikKICAgICAgICAgKGNfd2NoYXIgKiAzKSgiYSIsICJiIiwgImMiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNfd2NoYXIgKiAzLCBiImEiLCBiImIiLCBiImMiKQogCiAgICAgZGVmIHRlc3RfY19jaGFyX3Aoc2VsZik6CiAgICAgICAgIGNfY2hhcl9wKGIiZm9vIGJhciIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY19jaGFyX3AsICJmb28gYmFyIikKIAogICAgIGRlZiB0ZXN0X2Nfd2NoYXJfcChzZWxmKToKICAgICAgICAgY193Y2hhcl9wKCJmb28gYmFyIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjX3djaGFyX3AsIGIiZm9vIGJhciIpCiAKICAgICBkZWYgdGVzdF9zdHJ1Y3Qoc2VsZik6CiAgICAgICAgIGNsYXNzIFgoU3RydWN0dXJlKToKICAgICAgICAgICAgIF9maWVsZHNfID0gWygiYSIsIGNfY2hhciAqIDMpXQogCiAgICAgICAgIHggPSBYKGIiYWJjIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBYLCAiYWJjIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LmEsIGIiYWJjIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHguYSksIGJ5dGVzKQogCkBAIC0zNSwxNiArNDgsMTggQEAKICAgICAgICAgICAgIF9maWVsZHNfID0gWygiYSIsIGNfd2NoYXIgKiAzKV0KIAogICAgICAgICB4ID0gWCgiYWJjIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBYLCBiImFiYyIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5hLCAiYWJjIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHguYSksIHN0cikKIAotICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiOgotICAgICAgICBkZWYgdGVzdF9CU1RSKHNlbGYpOgotICAgICAgICAgICAgZnJvbSBfY3R5cGVzIGltcG9ydCBfU2ltcGxlQ0RhdGEKLSAgICAgICAgICAgIGNsYXNzIEJTVFIoX1NpbXBsZUNEYXRhKToKLSAgICAgICAgICAgICAgICBfdHlwZV8gPSAiWCIKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhzeXMucGxhdGZvcm0gPT0gIndpbjMyIiwgJ1dpbmRvd3Mtc3BlY2lmaWMgdGVzdCcpCisgICAgZGVmIHRlc3RfQlNUUihzZWxmKToKKyAgICAgICAgZnJvbSBfY3R5cGVzIGltcG9ydCBfU2ltcGxlQ0RhdGEKKyAgICAgICAgY2xhc3MgQlNUUihfU2ltcGxlQ0RhdGEpOgorICAgICAgICAgICAgX3R5cGVfID0gIlgiCiAKLSAgICAgICAgICAgIEJTVFIoImFiYyIpCisgICAgICAgIEJTVFIoImFiYyIpCisKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2J5dGVzd2FwLnB5IGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfYnl0ZXN3YXAucHkKaW5kZXggNjNkZGUxMy4uNDI3YmI4YiAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfYnl0ZXN3YXAucHkKKysrIGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfYnl0ZXN3YXAucHkKQEAgLTE0LDcgKzE0LDggQEAKICMgRm9yIFN0cnVjdHVyZXMgYW5kIFVuaW9ucywgdGhlc2UgdHlwZXMgYXJlIGNyZWF0ZWQgb24gZGVtYW5kLgogCiBjbGFzcyBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBkZWYgWF90ZXN0KHNlbGYpOgorICAgIEB1bml0dGVzdC5za2lwKCd0ZXN0IGRpc2FibGVkJykKKyAgICBkZWYgdGVzdF9YKHNlbGYpOgogICAgICAgICBwcmludChzeXMuYnl0ZW9yZGVyLCBmaWxlPXN5cy5zdGRlcnIpCiAgICAgICAgIGZvciBpIGluIHJhbmdlKDMyKToKICAgICAgICAgICAgIGJpdHMgPSBCSVRTKCkKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2NhbGxiYWNrcy5weSBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2NhbGxiYWNrcy5weQppbmRleCA1NjAwYjQzLi4zODI0ZjdjIDEwMDY0NAotLS0gYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9jYWxsYmFja3MucHkKKysrIGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfY2FsbGJhY2tzLnB5CkBAIC0xLDUgKzEsNiBAQAogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIGN0eXBlcyBpbXBvcnQgKgorZnJvbSBjdHlwZXMudGVzdCBpbXBvcnQgbmVlZF9zeW1ib2wKIGltcG9ydCBfY3R5cGVzX3Rlc3QKIAogY2xhc3MgQ2FsbGJhY2tzKHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTg4LDkgKzg5LDEwIEBACiAgICAgIyBkaXNhYmxlZDogd291bGQgbm93IChjb3JyZWN0bHkpIHJhaXNlIGEgUnVudGltZVdhcm5pbmcgYWJvdXQKICAgICAjIGEgbWVtb3J5IGxlYWsuICBBIGNhbGxiYWNrIGZ1bmN0aW9uIGNhbm5vdCByZXR1cm4gYSBub24taW50ZWdyYWwKICAgICAjIEMgdHlwZSB3aXRob3V0IGNhdXNpbmcgYSBtZW1vcnkgbGVhay4KLSMjICAgIGRlZiB0ZXN0X2NoYXJfcChzZWxmKToKLSMjICAgICAgICBzZWxmLmNoZWNrX3R5cGUoY19jaGFyX3AsICJhYmMiKQotIyMgICAgICAgIHNlbGYuY2hlY2tfdHlwZShjX2NoYXJfcCwgImRlZiIpCisgICAgQHVuaXR0ZXN0LnNraXAoJ3Rlc3QgZGlzYWJsZWQnKQorICAgIGRlZiB0ZXN0X2NoYXJfcChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja190eXBlKGNfY2hhcl9wLCAiYWJjIikKKyAgICAgICAgc2VsZi5jaGVja190eXBlKGNfY2hhcl9wLCAiZGVmIikKIAogICAgIGRlZiB0ZXN0X3B5b2JqZWN0KHNlbGYpOgogICAgICAgICBvID0gKCkKQEAgLTE0MiwxMyArMTQ0LDEyIEBACiAgICAgICAgIENGVU5DVFlQRShOb25lKShsYW1iZGEgeD1OYXN0eSgpOiBOb25lKQogCiAKLXRyeToKLSAgICBXSU5GVU5DVFlQRQotZXhjZXB0IE5hbWVFcnJvcjoKLSAgICBwYXNzCi1lbHNlOgotICAgIGNsYXNzIFN0ZGNhbGxDYWxsYmFja3MoQ2FsbGJhY2tzKToKK0BuZWVkX3N5bWJvbCgnV0lORlVOQ1RZUEUnKQorY2xhc3MgU3RkY2FsbENhbGxiYWNrcyhDYWxsYmFja3MpOgorICAgIHRyeToKICAgICAgICAgZnVuY3R5cGUgPSBXSU5GVU5DVFlQRQorICAgIGV4Y2VwdCBOYW1lRXJyb3I6CisgICAgICAgIHBhc3MKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCkBAIC0xNzgsNyArMTc5LDcgQEAKICAgICAgICAgZnJvbSBjdHlwZXMudXRpbCBpbXBvcnQgZmluZF9saWJyYXJ5CiAgICAgICAgIGxpYmNfcGF0aCA9IGZpbmRfbGlicmFyeSgiYyIpCiAgICAgICAgIGlmIG5vdCBsaWJjX3BhdGg6Ci0gICAgICAgICAgICByZXR1cm4gIyBjYW5ub3QgdGVzdAorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgnY291bGQgbm90IGZpbmQgbGliYycpCiAgICAgICAgIGxpYmMgPSBDRExMKGxpYmNfcGF0aCkKIAogICAgICAgICBAQ0ZVTkNUWVBFKGNfaW50LCBQT0lOVEVSKGNfaW50KSwgUE9JTlRFUihjX2ludCkpCkBAIC0xOTAsMjMgKzE5MSwxOSBAQAogICAgICAgICBsaWJjLnFzb3J0KGFycmF5LCBsZW4oYXJyYXkpLCBzaXplb2YoY19pbnQpLCBjbXBfZnVuYykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhcnJheVs6XSwgWzEsIDUsIDcsIDMzLCA5OV0pCiAKLSAgICB0cnk6Ci0gICAgICAgIFdJTkZVTkNUWVBFCi0gICAgZXhjZXB0IE5hbWVFcnJvcjoKLSAgICAgICAgcGFzcwotICAgIGVsc2U6Ci0gICAgICAgIGRlZiB0ZXN0X2lzc3VlXzg5NTlfYihzZWxmKToKLSAgICAgICAgICAgIGZyb20gY3R5cGVzLndpbnR5cGVzIGltcG9ydCBCT09MLCBIV05ELCBMUEFSQU0KKyAgICBAbmVlZF9zeW1ib2woJ1dJTkZVTkNUWVBFJykKKyAgICBkZWYgdGVzdF9pc3N1ZV84OTU5X2Ioc2VsZik6CisgICAgICAgIGZyb20gY3R5cGVzLndpbnR5cGVzIGltcG9ydCBCT09MLCBIV05ELCBMUEFSQU0KKyAgICAgICAgZ2xvYmFsIHdpbmRvd0NvdW50CisgICAgICAgIHdpbmRvd0NvdW50ID0gMAorCisgICAgICAgIEBXSU5GVU5DVFlQRShCT09MLCBIV05ELCBMUEFSQU0pCisgICAgICAgIGRlZiBFbnVtV2luZG93c0NhbGxiYWNrRnVuYyhod25kLCBsUGFyYW0pOgogICAgICAgICAgICAgZ2xvYmFsIHdpbmRvd0NvdW50Ci0gICAgICAgICAgICB3aW5kb3dDb3VudCA9IDAKKyAgICAgICAgICAgIHdpbmRvd0NvdW50ICs9IDEKKyAgICAgICAgICAgIHJldHVybiBUcnVlICNBbGxvdyB3aW5kb3dzIHRvIGtlZXAgZW51bWVyYXRpbmcKIAotICAgICAgICAgICAgQFdJTkZVTkNUWVBFKEJPT0wsIEhXTkQsIExQQVJBTSkKLSAgICAgICAgICAgIGRlZiBFbnVtV2luZG93c0NhbGxiYWNrRnVuYyhod25kLCBsUGFyYW0pOgotICAgICAgICAgICAgICAgIGdsb2JhbCB3aW5kb3dDb3VudAotICAgICAgICAgICAgICAgIHdpbmRvd0NvdW50ICs9IDEKLSAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZSAjQWxsb3cgd2luZG93cyB0byBrZWVwIGVudW1lcmF0aW5nCi0KLSAgICAgICAgICAgIHdpbmRsbC51c2VyMzIuRW51bVdpbmRvd3MoRW51bVdpbmRvd3NDYWxsYmFja0Z1bmMsIDApCisgICAgICAgIHdpbmRsbC51c2VyMzIuRW51bVdpbmRvd3MoRW51bVdpbmRvd3NDYWxsYmFja0Z1bmMsIDApCiAKICAgICBkZWYgdGVzdF9jYWxsYmFja19yZWdpc3Rlcl9pbnQoc2VsZik6CiAgICAgICAgICMgSXNzdWUgIzgyNzU6IGJ1Z2d5IGhhbmRsaW5nIG9mIGNhbGxiYWNrIGFyZ3MgdW5kZXIgV2luNjQKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2Nhc3QucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9jYXN0LnB5CmluZGV4IDMyNDk2ZjYuLjE4N2QyYmQgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2Nhc3QucHkKKysrIGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfY2FzdC5weQpAQCAtMSw0ICsxLDUgQEAKIGZyb20gY3R5cGVzIGltcG9ydCAqCitmcm9tIGN0eXBlcy50ZXN0IGltcG9ydCBuZWVkX3N5bWJvbAogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgc3lzCiAKQEAgLTc1LDE1ICs3NiwxMSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhc3QoY2FzdChzLCBjX3ZvaWRfcCksIGNfY2hhcl9wKS52YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJoaWhvIikKIAotICAgIHRyeToKLSAgICAgICAgY193Y2hhcl9wCi0gICAgZXhjZXB0IE5hbWVFcnJvcjoKLSAgICAgICAgcGFzcwotICAgIGVsc2U6Ci0gICAgICAgIGRlZiB0ZXN0X3djaGFyX3Aoc2VsZik6Ci0gICAgICAgICAgICBzID0gY193Y2hhcl9wKCJoaWhvIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FzdChjYXN0KHMsIGNfdm9pZF9wKSwgY193Y2hhcl9wKS52YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoaWhvIikKKyAgICBAbmVlZF9zeW1ib2woJ2Nfd2NoYXJfcCcpCisgICAgZGVmIHRlc3Rfd2NoYXJfcChzZWxmKToKKyAgICAgICAgcyA9IGNfd2NoYXJfcCgiaGlobyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FzdChjYXN0KHMsIGNfdm9pZF9wKSwgY193Y2hhcl9wKS52YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhpaG8iKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfY2Z1bmNzLnB5IGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfY2Z1bmNzLnB5CmluZGV4IGEwODA0OTYuLmFjMjI0MGYgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2NmdW5jcy5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9jZnVuY3MucHkKQEAgLTMsNiArMyw3IEBACiAKIGltcG9ydCB1bml0dGVzdAogZnJvbSBjdHlwZXMgaW1wb3J0ICoKK2Zyb20gY3R5cGVzLnRlc3QgaW1wb3J0IG5lZWRfc3ltYm9sCiAKIGltcG9ydCBfY3R5cGVzX3Rlc3QKIApAQCAtMTkzLDcgKzE5NCw3IEBACiB0cnk6CiAgICAgV2luRExMCiBleGNlcHQgTmFtZUVycm9yOgotICAgIHBhc3MKKyAgICBkZWYgc3RkY2FsbF9kbGwoKl8pOiBwYXNzCiBlbHNlOgogICAgIGNsYXNzIHN0ZGNhbGxfZGxsKFdpbkRMTCk6CiAgICAgICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBuYW1lKToKQEAgLTIwMyw5ICsyMDQsOSBAQAogICAgICAgICAgICAgc2V0YXR0cihzZWxmLCBuYW1lLCBmdW5jKQogICAgICAgICAgICAgcmV0dXJuIGZ1bmMKIAotICAgIGNsYXNzIHN0ZGNhbGxDRnVuY3Rpb25zKENGdW5jdGlvbnMpOgotICAgICAgICBfZGxsID0gc3RkY2FsbF9kbGwoX2N0eXBlc190ZXN0Ll9fZmlsZV9fKQotICAgICAgICBwYXNzCitAbmVlZF9zeW1ib2woJ1dpbkRMTCcpCitjbGFzcyBzdGRjYWxsQ0Z1bmN0aW9ucyhDRnVuY3Rpb25zKToKKyAgICBfZGxsID0gc3RkY2FsbF9kbGwoX2N0eXBlc190ZXN0Ll9fZmlsZV9fKQogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfY2hlY2tyZXR2YWwucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9jaGVja3JldHZhbC5weQppbmRleCAwMWNjYzU3Li5lOTU2N2RjIDEwMDY0NAotLS0gYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9jaGVja3JldHZhbC5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9jaGVja3JldHZhbC5weQpAQCAtMSw2ICsxLDcgQEAKIGltcG9ydCB1bml0dGVzdAogCiBmcm9tIGN0eXBlcyBpbXBvcnQgKgorZnJvbSBjdHlwZXMudGVzdCBpbXBvcnQgbmVlZF9zeW1ib2wKIAogY2xhc3MgQ0hFQ0tFRChjX2ludCk6CiAgICAgZGVmIF9jaGVja19yZXR2YWxfKHZhbHVlKToKQEAgLTI1LDE1ICsyNiwxMSBAQAogICAgICAgICBkZWwgZGxsLl90ZXN0ZnVuY19wX3AucmVzdHlwZQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDQyLCBkbGwuX3Rlc3RmdW5jX3BfcCg0MikpCiAKLSAgICB0cnk6Ci0gICAgICAgIG9sZWRsbAotICAgIGV4Y2VwdCBOYW1lRXJyb3I6Ci0gICAgICAgIHBhc3MKLSAgICBlbHNlOgotICAgICAgICBkZWYgdGVzdF9vbGVkbGwoc2VsZik6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhXaW5kb3dzRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xlZGxsLm9sZWF1dDMyLkNyZWF0ZVR5cGVMaWIyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIE5vbmUsIE5vbmUpCisgICAgQG5lZWRfc3ltYm9sKCdvbGVkbGwnKQorICAgIGRlZiB0ZXN0X29sZWRsbChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZWRsbC5vbGVhdXQzMi5DcmVhdGVUeXBlTGliMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIE5vbmUsIE5vbmUpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9lcnJjaGVjay5weSBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2VycmNoZWNrLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNDkxM2Y5Li4wMDAwMDAwCi0tLSBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2VycmNoZWNrLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotaW1wb3J0IHN5cwotZnJvbSBjdHlwZXMgaW1wb3J0ICoKLQotIyNjbGFzcyBITU9EVUxFKFN0cnVjdHVyZSk6Ci0jIyAgICBfZmllbGRzXyA9IFsoInZhbHVlIiwgY192b2lkX3ApXQotCi0jIyAgICBkZWYgX19yZXByX18oc2VsZik6Ci0jIyAgICAgICAgcmV0dXJuICI8SE1PRFVMRSAlcz4iICUgc2VsZi52YWx1ZQotCi0jI3dpbmRsbC5rZXJuZWwzMi5HZXRNb2R1bGVIYW5kbGVBLnJlc3R5cGUgPSBITU9EVUxFCi0KLSMjcHJpbnQgd2luZGxsLmtlcm5lbDMyLkdldE1vZHVsZUhhbmRsZUEoInB5dGhvbjIzLmRsbCIpCi0jI3ByaW50IGhleChzeXMuZGxsaGFuZGxlKQotCi0jI2RlZiBub256ZXJvKGhhbmRsZSk6Ci0jIyAgICByZXR1cm4gKEdldExhc3RFcnJvcigpLCBoYW5kbGUpCi0KLSMjd2luZGxsLmtlcm5lbDMyLkdldE1vZHVsZUhhbmRsZUEuZXJyY2hlY2sgPSBub256ZXJvCi0jI3ByaW50IHdpbmRsbC5rZXJuZWwzMi5HZXRNb2R1bGVIYW5kbGVBKCJzcGFtIikKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2ZpbmQucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9maW5kLnB5CmluZGV4IGM1NGI2OWIuLmU2YmMxOWQgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2ZpbmQucHkKKysrIGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfZmluZC5weQpAQCAtMSw4MiArMSw5MSBAQAogaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgb3MKIGltcG9ydCBzeXMKK2ltcG9ydCB0ZXN0LnN1cHBvcnQKIGZyb20gY3R5cGVzIGltcG9ydCAqCiBmcm9tIGN0eXBlcy51dGlsIGltcG9ydCBmaW5kX2xpYnJhcnkKLWZyb20gY3R5cGVzLnRlc3QgaW1wb3J0IGlzX3Jlc291cmNlX2VuYWJsZWQKLQotaWYgc3lzLnBsYXRmb3JtID09ICJ3aW4zMiI6Ci0gICAgbGliX2dsID0gZmluZF9saWJyYXJ5KCJPcGVuR0wzMiIpCi0gICAgbGliX2dsdSA9IGZpbmRfbGlicmFyeSgiR2x1MzIiKQotICAgIGxpYl9nbGUgPSBOb25lCi1lbGlmIHN5cy5wbGF0Zm9ybSA9PSAiZGFyd2luIjoKLSAgICBsaWJfZ2wgPSBsaWJfZ2x1ID0gZmluZF9saWJyYXJ5KCJPcGVuR0wiKQotICAgIGxpYl9nbGUgPSBOb25lCi1lbHNlOgotICAgIGxpYl9nbCA9IGZpbmRfbGlicmFyeSgiR0wiKQotICAgIGxpYl9nbHUgPSBmaW5kX2xpYnJhcnkoIkdMVSIpCi0gICAgbGliX2dsZSA9IGZpbmRfbGlicmFyeSgiZ2xlIikKLQotIyMgcHJpbnQsIGZvciBkZWJ1Z2dpbmcKLWlmIGlzX3Jlc291cmNlX2VuYWJsZWQoInByaW50aW5nIik6Ci0gICAgaWYgbGliX2dsIG9yIGxpYl9nbHUgb3IgbGliX2dsZToKLSAgICAgICAgcHJpbnQoIk9wZW5HTCBsaWJyYXJpZXM6IikKLSAgICAgICAgZm9yIGl0ZW0gaW4gKCgiR0wiLCBsaWJfZ2wpLAotICAgICAgICAgICAgICAgICAgICAgKCJHTFUiLCBsaWJfZ2x1KSwKLSAgICAgICAgICAgICAgICAgICAgICgiZ2xlIiwgbGliX2dsZSkpOgotICAgICAgICAgICAgcHJpbnQoIlx0IiwgaXRlbSkKLQogCiAjIE9uIHNvbWUgc3lzdGVtcywgbG9hZGluZyB0aGUgT3BlbkdMIGxpYnJhcmllcyBuZWVkcyB0aGUgUlRMRF9HTE9CQUwgbW9kZS4KIGNsYXNzIFRlc3RfT3BlbkdMX2xpYnModW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgc2VsZi5nbCA9IHNlbGYuZ2x1ID0gc2VsZi5nbGUgPSBOb25lCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3MoY2xzKToKKyAgICAgICAgbGliX2dsID0gbGliX2dsdSA9IGxpYl9nbGUgPSBOb25lCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiOgorICAgICAgICAgICAgbGliX2dsID0gZmluZF9saWJyYXJ5KCJPcGVuR0wzMiIpCisgICAgICAgICAgICBsaWJfZ2x1ID0gZmluZF9saWJyYXJ5KCJHbHUzMiIpCisgICAgICAgIGVsaWYgc3lzLnBsYXRmb3JtID09ICJkYXJ3aW4iOgorICAgICAgICAgICAgbGliX2dsID0gbGliX2dsdSA9IGZpbmRfbGlicmFyeSgiT3BlbkdMIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxpYl9nbCA9IGZpbmRfbGlicmFyeSgiR0wiKQorICAgICAgICAgICAgbGliX2dsdSA9IGZpbmRfbGlicmFyeSgiR0xVIikKKyAgICAgICAgICAgIGxpYl9nbGUgPSBmaW5kX2xpYnJhcnkoImdsZSIpCisKKyAgICAgICAgIyMgcHJpbnQsIGZvciBkZWJ1Z2dpbmcKKyAgICAgICAgaWYgdGVzdC5zdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICBwcmludCgiT3BlbkdMIGxpYnJhcmllczoiKQorICAgICAgICAgICAgZm9yIGl0ZW0gaW4gKCgiR0wiLCBsaWJfZ2wpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgiR0xVIiwgbGliX2dsdSksCisgICAgICAgICAgICAgICAgICAgICAgICAgKCJnbGUiLCBsaWJfZ2xlKSk6CisgICAgICAgICAgICAgICAgcHJpbnQoIlx0IiwgaXRlbSkKKworICAgICAgICBjbHMuZ2wgPSBjbHMuZ2x1ID0gY2xzLmdsZSA9IE5vbmUKICAgICAgICAgaWYgbGliX2dsOgotICAgICAgICAgICAgc2VsZi5nbCA9IENETEwobGliX2dsLCBtb2RlPVJUTERfR0xPQkFMKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGNscy5nbCA9IENETEwobGliX2dsLCBtb2RlPVJUTERfR0xPQkFMKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICBpZiBsaWJfZ2x1OgotICAgICAgICAgICAgc2VsZi5nbHUgPSBDRExMKGxpYl9nbHUsIFJUTERfR0xPQkFMKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGNscy5nbHUgPSBDRExMKGxpYl9nbHUsIFJUTERfR0xPQkFMKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICBpZiBsaWJfZ2xlOgogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHNlbGYuZ2xlID0gQ0RMTChsaWJfZ2xlKQorICAgICAgICAgICAgICAgIGNscy5nbGUgPSBDRExMKGxpYl9nbGUpCiAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICBwYXNzCiAKLSAgICBpZiBsaWJfZ2w6Ci0gICAgICAgIGRlZiB0ZXN0X2dsKHNlbGYpOgotICAgICAgICAgICAgaWYgc2VsZi5nbDoKLSAgICAgICAgICAgICAgICBzZWxmLmdsLmdsQ2xlYXJJbmRleAorICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiB0ZWFyRG93bkNsYXNzKGNscyk6CisgICAgICAgIGNscy5nbCA9IGNscy5nbHUgPSBjbHMuZ2xlID0gTm9uZQogCi0gICAgaWYgbGliX2dsdToKLSAgICAgICAgZGVmIHRlc3RfZ2x1KHNlbGYpOgotICAgICAgICAgICAgaWYgc2VsZi5nbHU6Ci0gICAgICAgICAgICAgICAgc2VsZi5nbHUuZ2x1QmVnaW5DdXJ2ZQorICAgIGRlZiB0ZXN0X2dsKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmdsIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCdsaWJfZ2wgbm90IGF2YWlsYWJsZScpCisgICAgICAgIHNlbGYuZ2wuZ2xDbGVhckluZGV4CiAKLSAgICBpZiBsaWJfZ2xlOgotICAgICAgICBkZWYgdGVzdF9nbGUoc2VsZik6Ci0gICAgICAgICAgICBpZiBzZWxmLmdsZToKLSAgICAgICAgICAgICAgICBzZWxmLmdsZS5nbGVHZXRKb2luU3R5bGUKKyAgICBkZWYgdGVzdF9nbHUoc2VsZik6CisgICAgICAgIGlmIHNlbGYuZ2x1IGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCdsaWJfZ2x1IG5vdCBhdmFpbGFibGUnKQorICAgICAgICBzZWxmLmdsdS5nbHVCZWdpbkN1cnZlCiAKLSMjaWYgb3MubmFtZSA9PSAicG9zaXgiIGFuZCBzeXMucGxhdGZvcm0gIT0gImRhcndpbiI6CisgICAgZGVmIHRlc3RfZ2xlKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmdsZSBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgnbGliX2dsZSBub3QgYXZhaWxhYmxlJykKKyAgICAgICAgc2VsZi5nbGUuZ2xlR2V0Sm9pblN0eWxlCiAKLSMjICAgICMgT24gcGxhdGZvcm1zIHdoZXJlIHRoZSBkZWZhdWx0IHNoYXJlZCBsaWJyYXJ5IHN1ZmZpeCBpcyAnLnNvJywKLSMjICAgICMgYXQgbGVhc3Qgc29tZSBsaWJyYXJpZXMgY2FuIGJlIGxvYWRlZCBhcyBhdHRyaWJ1dGVzIG9mIHRoZSBjZGxsCi0jIyAgICAjIG9iamVjdCwgc2luY2UgY3R5cGVzIG5vdyB0cmllcyBsb2FkaW5nIHRoZSBsaWIgYWdhaW4KLSMjICAgICMgd2l0aCAnLnNvJyBhcHBlbmRlZCBvZiB0aGUgZmlyc3QgdHJ5IGZhaWxzLgotIyMgICAgIwotIyMgICAgIyBXb24ndCB3b3JrIGZvciBsaWJjLCB1bmZvcnR1bmF0ZWx5LiAgT1RPSCwgaXQgaXNuJ3QKLSMjICAgICMgbmVlZGVkIGZvciBsaWJjIHNpbmNlIHRoaXMgaXMgYWxyZWFkeSBtYXBwZWQgaW50byB0aGUgY3VycmVudAotIyMgICAgIyBwcm9jZXNzICg/KQotIyMgICAgIwotIyMgICAgIyBPbiBNQUMgT1NYLCBpdCB3b24ndCB3b3JrIGVpdGhlciwgYmVjYXVzZSBkbG9wZW4oKSBuZWVkcyBhIGZ1bGwgcGF0aCwKLSMjICAgICMgYW5kIHRoZSBkZWZhdWx0IHN1ZmZpeCBpcyBlaXRoZXIgbm9uZSBvciAnLmR5bGliJy4KLQotIyMgICAgY2xhc3MgTG9hZExpYnModW5pdHRlc3QuVGVzdENhc2UpOgotIyMgICAgICAgIGRlZiB0ZXN0X2xpYm0oc2VsZik6Ci0jIyAgICAgICAgICAgIGltcG9ydCBtYXRoCi0jIyAgICAgICAgICAgIGxpYm0gPSBjZGxsLmxpYm0KLSMjICAgICAgICAgICAgc3FydCA9IGxpYm0uc3FydAotIyMgICAgICAgICAgICBzcXJ0LmFyZ3R5cGVzID0gKGNfZG91YmxlLCkKLSMjICAgICAgICAgICAgc3FydC5yZXN0eXBlID0gY19kb3VibGUKLSMjICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcXJ0KDIpLCBtYXRoLnNxcnQoMikpCisjIE9uIHBsYXRmb3JtcyB3aGVyZSB0aGUgZGVmYXVsdCBzaGFyZWQgbGlicmFyeSBzdWZmaXggaXMgJy5zbycsCisjIGF0IGxlYXN0IHNvbWUgbGlicmFyaWVzIGNhbiBiZSBsb2FkZWQgYXMgYXR0cmlidXRlcyBvZiB0aGUgY2RsbAorIyBvYmplY3QsIHNpbmNlIGN0eXBlcyBub3cgdHJpZXMgbG9hZGluZyB0aGUgbGliIGFnYWluCisjIHdpdGggJy5zbycgYXBwZW5kZWQgb2YgdGhlIGZpcnN0IHRyeSBmYWlscy4KKyMKKyMgV29uJ3Qgd29yayBmb3IgbGliYywgdW5mb3J0dW5hdGVseS4gIE9UT0gsIGl0IGlzbid0CisjIG5lZWRlZCBmb3IgbGliYyBzaW5jZSB0aGlzIGlzIGFscmVhZHkgbWFwcGVkIGludG8gdGhlIGN1cnJlbnQKKyMgcHJvY2VzcyAoPykKKyMKKyMgT24gTUFDIE9TWCwgaXQgd29uJ3Qgd29yayBlaXRoZXIsIGJlY2F1c2UgZGxvcGVuKCkgbmVlZHMgYSBmdWxsIHBhdGgsCisjIGFuZCB0aGUgZGVmYXVsdCBzdWZmaXggaXMgZWl0aGVyIG5vbmUgb3IgJy5keWxpYicuCitAdW5pdHRlc3Quc2tpcCgndGVzdCBkaXNhYmxlZCcpCitAdW5pdHRlc3Quc2tpcFVubGVzcyhvcy5uYW1lPT0icG9zaXgiIGFuZCBzeXMucGxhdGZvcm0gIT0gImRhcndpbiIsCisgICAgICAgICAgICAgICAgICAgICAndGVzdCBub3Qgc3VpdGFibGUgZm9yIHRoaXMgcGxhdGZvcm0nKQorY2xhc3MgTG9hZExpYnModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2xpYm0oc2VsZik6CisgICAgICAgIGltcG9ydCBtYXRoCisgICAgICAgIGxpYm0gPSBjZGxsLmxpYm0KKyAgICAgICAgc3FydCA9IGxpYm0uc3FydAorICAgICAgICBzcXJ0LmFyZ3R5cGVzID0gKGNfZG91YmxlLCkKKyAgICAgICAgc3FydC5yZXN0eXBlID0gY19kb3VibGUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcXJ0KDIpLCBtYXRoLnNxcnQoMikpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9mcm9tYnVmZmVyLnB5IGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfZnJvbWJ1ZmZlci5weQppbmRleCBmZmIyN2E2Li44Njk1NGZlIDEwMDY0NAotLS0gYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9mcm9tYnVmZmVyLnB5CisrKyBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2Zyb21idWZmZXIucHkKQEAgLTEwLDcgKzEwLDcgQEAKICAgICAgICAgc2VsZi5faW5pdF9jYWxsZWQgPSBUcnVlCiAKIGNsYXNzIFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGRlZiB0ZXN0X2ZvbV9idWZmZXIoc2VsZik6CisgICAgZGVmIHRlc3RfZnJvbV9idWZmZXIoc2VsZik6CiAgICAgICAgIGEgPSBhcnJheS5hcnJheSgiaSIsIHJhbmdlKDE2KSkKICAgICAgICAgeCA9IChjX2ludCAqIDE2KS5mcm9tX2J1ZmZlcihhKQogCkBAIC0yMywyNSArMjMsNjQgQEAKICAgICAgICAgYVswXSwgYVstMV0gPSAyMDAsIC0yMDAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4WzpdLCBhLnRvbGlzdCgpKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4oYSwgeC5fb2JqZWN0cy52YWx1ZXMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQnVmZmVyRXJyb3IsIGEuYXBwZW5kLCAxMDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEJ1ZmZlckVycm9yLCBhLnBvcCkKIAotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICBjX2ludC5mcm9tX2J1ZmZlciwgYSwgLTEpCisgICAgICAgIGRlbCB4OyBkZWwgeTsgZ2MuY29sbGVjdCgpOyBnYy5jb2xsZWN0KCk7IGdjLmNvbGxlY3QoKQorICAgICAgICBhLmFwcGVuZCgxMDApCisgICAgICAgIGEucG9wKCkKKyAgICAgICAgeCA9IChjX2ludCAqIDE2KS5mcm9tX2J1ZmZlcihhKQorCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oYSwgW29iai5vYmogaWYgaXNpbnN0YW5jZShvYmosIG1lbW9yeXZpZXcpIGVsc2Ugb2JqCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBvYmogaW4geC5fb2JqZWN0cy52YWx1ZXMoKV0pCiAKICAgICAgICAgZXhwZWN0ZWQgPSB4WzpdCiAgICAgICAgIGRlbCBhOyBnYy5jb2xsZWN0KCk7IGdjLmNvbGxlY3QoKTsgZ2MuY29sbGVjdCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeFs6XSwgZXhwZWN0ZWQpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAoY19jaGFyICogMTYpLmZyb21fYnVmZmVyLCAiYSIgKiAxNikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFR5cGVFcnJvciwgIm5vdCB3cml0YWJsZSIpOgorICAgICAgICAgICAgKGNfY2hhciAqIDE2KS5mcm9tX2J1ZmZlcihiImEiICogMTYpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUeXBlRXJyb3IsICJub3Qgd3JpdGFibGUiKToKKyAgICAgICAgICAgIChjX2NoYXIgKiAxNikuZnJvbV9idWZmZXIobWVtb3J5dmlldyhiImEiICogMTYpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVHlwZUVycm9yLCAibm90IEMgY29udGlndW91cyIpOgorICAgICAgICAgICAgKGNfY2hhciAqIDE2KS5mcm9tX2J1ZmZlcihtZW1vcnl2aWV3KGJ5dGVhcnJheShiImEiICogMTYpKVs6Oi0xXSkKKyAgICAgICAgbXNnID0gImRvZXMgbm90IGhhdmUgdGhlIGJ1ZmZlciBpbnRlcmZhY2UiCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUeXBlRXJyb3IsIG1zZyk6CisgICAgICAgICAgICAoY19jaGFyICogMTYpLmZyb21fYnVmZmVyKCJhIiAqIDE2KQogCi0gICAgZGVmIHRlc3RfZm9tX2J1ZmZlcl93aXRoX29mZnNldChzZWxmKToKKyAgICBkZWYgdGVzdF9mb3J0cmFuX2NvbnRpZ3VvdXMoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGltcG9ydCBfdGVzdGJ1ZmZlcgorICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdChzdHIoZXJyKSkKKyAgICAgICAgZmxhZ3MgPSBfdGVzdGJ1ZmZlci5ORF9XUklUQUJMRSB8IF90ZXN0YnVmZmVyLk5EX0ZPUlRSQU4KKyAgICAgICAgYXJyYXkgPSBfdGVzdGJ1ZmZlci5uZGFycmF5KAorICAgICAgICAgICAgWzk3XSAqIDE2LCBmb3JtYXQ9IkIiLCBzaGFwZT1bNCwgNF0sIGZsYWdzPWZsYWdzKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVHlwZUVycm9yLCAibm90IEMgY29udGlndW91cyIpOgorICAgICAgICAgICAgKGNfY2hhciAqIDE2KS5mcm9tX2J1ZmZlcihhcnJheSkKKyAgICAgICAgYXJyYXkgPSBtZW1vcnl2aWV3KGFycmF5KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYXJyYXkuZl9jb250aWd1b3VzKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGFycmF5LmNfY29udGlndW91cykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFR5cGVFcnJvciwgIm5vdCBDIGNvbnRpZ3VvdXMiKToKKyAgICAgICAgICAgIChjX2NoYXIgKiAxNikuZnJvbV9idWZmZXIoYXJyYXkpCisKKyAgICBkZWYgdGVzdF9mcm9tX2J1ZmZlcl93aXRoX29mZnNldChzZWxmKToKICAgICAgICAgYSA9IGFycmF5LmFycmF5KCJpIiwgcmFuZ2UoMTYpKQogICAgICAgICB4ID0gKGNfaW50ICogMTUpLmZyb21fYnVmZmVyKGEsIHNpemVvZihjX2ludCkpCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4WzpdLCBhLnRvbGlzdCgpWzE6XSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbGFtYmRhOiAoY19pbnQgKiAxNikuZnJvbV9idWZmZXIoYSwgc2l6ZW9mKGNfaW50KSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGxhbWJkYTogKGNfaW50ICogMSkuZnJvbV9idWZmZXIoYSwgMTYgKiBzaXplb2YoY19pbnQpKSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGNfaW50LmZyb21fYnVmZmVyKGEsIC0xKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgKGNfaW50ICogMTYpLmZyb21fYnVmZmVyKGEsIHNpemVvZihjX2ludCkpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICAoY19pbnQgKiAxKS5mcm9tX2J1ZmZlcihhLCAxNiAqIHNpemVvZihjX2ludCkpCisKKyAgICBkZWYgdGVzdF9mcm9tX2J1ZmZlcl9tZW1vcnl2aWV3KHNlbGYpOgorICAgICAgICBhID0gW2NfY2hhci5mcm9tX2J1ZmZlcihtZW1vcnl2aWV3KGJ5dGVhcnJheShiJ2EnKSkpXQorICAgICAgICBhLmFwcGVuZChhKQorICAgICAgICBkZWwgYQorICAgICAgICBnYy5jb2xsZWN0KCkgICMgU2hvdWxkIG5vdCBjcmFzaAogCiAgICAgZGVmIHRlc3RfZnJvbV9idWZmZXJfY29weShzZWxmKToKICAgICAgICAgYSA9IGFycmF5LmFycmF5KCJpIiwgcmFuZ2UoMTYpKQpAQCAtNTYsMjYgKzk1LDMwIEBACiAgICAgICAgIGFbMF0sIGFbLTFdID0gMjAwLCAtMjAwCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeFs6XSwgbGlzdChyYW5nZSgxNikpKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5fb2JqZWN0cywgTm9uZSkKKyAgICAgICAgYS5hcHBlbmQoMTAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHhbOl0sIGxpc3QocmFuZ2UoMTYpKSkKIAotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICBjX2ludC5mcm9tX2J1ZmZlciwgYSwgLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5fb2JqZWN0cywgTm9uZSkKIAogICAgICAgICBkZWwgYTsgZ2MuY29sbGVjdCgpOyBnYy5jb2xsZWN0KCk7IGdjLmNvbGxlY3QoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHhbOl0sIGxpc3QocmFuZ2UoMTYpKSkKIAogICAgICAgICB4ID0gKGNfY2hhciAqIDE2KS5mcm9tX2J1ZmZlcl9jb3B5KGIiYSIgKiAxNikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4WzpdLCBiImEiICogMTYpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIChjX2NoYXIgKiAxNikuZnJvbV9idWZmZXJfY29weSgiYSIgKiAxNikKIAotICAgIGRlZiB0ZXN0X2ZvbV9idWZmZXJfY29weV93aXRoX29mZnNldChzZWxmKToKKyAgICBkZWYgdGVzdF9mcm9tX2J1ZmZlcl9jb3B5X3dpdGhfb2Zmc2V0KHNlbGYpOgogICAgICAgICBhID0gYXJyYXkuYXJyYXkoImkiLCByYW5nZSgxNikpCiAgICAgICAgIHggPSAoY19pbnQgKiAxNSkuZnJvbV9idWZmZXJfY29weShhLCBzaXplb2YoY19pbnQpKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeFs6XSwgYS50b2xpc3QoKVsxOl0pCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIChjX2ludCAqIDE2KS5mcm9tX2J1ZmZlcl9jb3B5LCBhLCBzaXplb2YoY19pbnQpKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAoY19pbnQgKiAxKS5mcm9tX2J1ZmZlcl9jb3B5LCBhLCAxNiAqIHNpemVvZihjX2ludCkpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBjX2ludC5mcm9tX2J1ZmZlcl9jb3B5KGEsIC0xKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgKGNfaW50ICogMTYpLmZyb21fYnVmZmVyX2NvcHkoYSwgc2l6ZW9mKGNfaW50KSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIChjX2ludCAqIDEpLmZyb21fYnVmZmVyX2NvcHkoYSwgMTYgKiBzaXplb2YoY19pbnQpKQogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfZnVuY3Rpb25zLnB5IGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfZnVuY3Rpb25zLnB5CmluZGV4IDA3ZWViNjguLjc1NjI4OTIgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2Z1bmN0aW9ucy5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9mdW5jdGlvbnMucHkKQEAgLTYsNiArNiw3IEBACiAiIiIKIAogZnJvbSBjdHlwZXMgaW1wb3J0ICoKK2Zyb20gY3R5cGVzLnRlc3QgaW1wb3J0IG5lZWRfc3ltYm9sCiBpbXBvcnQgc3lzLCB1bml0dGVzdAogCiB0cnk6CkBAIC02MywyMiArNjQsMTYgQEAKICAgICAgICAgICAgIHBhc3MKIAogCisgICAgQG5lZWRfc3ltYm9sKCdjX3djaGFyJykKICAgICBkZWYgdGVzdF93Y2hhcl9wYXJtKHNlbGYpOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBjX3djaGFyCi0gICAgICAgIGV4Y2VwdCBOYW1lRXJyb3I6Ci0gICAgICAgICAgICByZXR1cm4KICAgICAgICAgZiA9IGRsbC5fdGVzdGZ1bmNfaV9iaGlsZmQKICAgICAgICAgZi5hcmd0eXBlcyA9IFtjX2J5dGUsIGNfd2NoYXIsIGNfaW50LCBjX2xvbmcsIGNfZmxvYXQsIGNfZG91YmxlXQogICAgICAgICByZXN1bHQgPSBmKDEsICJ4IiwgMywgNCwgNS4wLCA2LjApCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCAxMzkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShyZXN1bHQpLCBpbnQpCiAKKyAgICBAbmVlZF9zeW1ib2woJ2Nfd2NoYXInKQogICAgIGRlZiB0ZXN0X3djaGFyX3Jlc3VsdChzZWxmKToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgY193Y2hhcgotICAgICAgICBleGNlcHQgTmFtZUVycm9yOgotICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIGYgPSBkbGwuX3Rlc3RmdW5jX2lfYmhpbGZkCiAgICAgICAgIGYuYXJndHlwZXMgPSBbY19ieXRlLCBjX3Nob3J0LCBjX2ludCwgY19sb25nLCBjX2Zsb2F0LCBjX2RvdWJsZV0KICAgICAgICAgZi5yZXN0eXBlID0gY193Y2hhcgpAQCAtMTU1LDExICsxNTAsOCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgLTIxKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUocmVzdWx0KSwgZmxvYXQpCiAKKyAgICBAbmVlZF9zeW1ib2woJ2NfbG9uZ2xvbmcnKQogICAgIGRlZiB0ZXN0X2xvbmdsb25ncmVzdWx0KHNlbGYpOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBjX2xvbmdsb25nCi0gICAgICAgIGV4Y2VwdCBOYW1lRXJyb3I6Ci0gICAgICAgICAgICByZXR1cm4KICAgICAgICAgZiA9IGRsbC5fdGVzdGZ1bmNfcV9iaGlsZmQKICAgICAgICAgZi5yZXN0eXBlID0gY19sb25nbG9uZwogICAgICAgICBmLmFyZ3R5cGVzID0gW2NfYnl0ZSwgY19zaG9ydCwgY19pbnQsIGNfbG9uZywgY19mbG9hdCwgY19kb3VibGVdCkBAIC0yOTYsNiArMjg4LDcgQEAKICAgICAgICAgcmVzdWx0ID0gZigtMTAsIGNiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgLTE4KQogCisgICAgQG5lZWRfc3ltYm9sKCdjX2xvbmdsb25nJykKICAgICBkZWYgdGVzdF9sb25nbG9uZ19jYWxsYmFja3Moc2VsZik6CiAKICAgICAgICAgZiA9IGRsbC5fdGVzdGZ1bmNfY2FsbGJhY2tfcV9xZgpAQCAtMzQ4LDE2ICszNDEsMTYgQEAKICAgICAgICAgczJoID0gZGxsLnJldF8yaF9mdW5jKGlucCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoczJoLngsIHMyaC55KSwgKDk5KjIsIDg4KjMpKQogCi0gICAgaWYgc3lzLnBsYXRmb3JtID09ICJ3aW4zMiI6Ci0gICAgICAgIGRlZiB0ZXN0X3N0cnVjdF9yZXR1cm5fMkhfc3RkY2FsbChzZWxmKToKLSAgICAgICAgICAgIGNsYXNzIFMySChTdHJ1Y3R1cmUpOgotICAgICAgICAgICAgICAgIF9maWVsZHNfID0gWygieCIsIGNfc2hvcnQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICgieSIsIGNfc2hvcnQpXQorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiLCAnV2luZG93cy1zcGVjaWZpYyB0ZXN0JykKKyAgICBkZWYgdGVzdF9zdHJ1Y3RfcmV0dXJuXzJIX3N0ZGNhbGwoc2VsZik6CisgICAgICAgIGNsYXNzIFMySChTdHJ1Y3R1cmUpOgorICAgICAgICAgICAgX2ZpZWxkc18gPSBbKCJ4IiwgY19zaG9ydCksCisgICAgICAgICAgICAgICAgICAgICAgICAoInkiLCBjX3Nob3J0KV0KIAotICAgICAgICAgICAgd2luZGxsLnNfcmV0XzJoX2Z1bmMucmVzdHlwZSA9IFMySAotICAgICAgICAgICAgd2luZGxsLnNfcmV0XzJoX2Z1bmMuYXJndHlwZXMgPSBbUzJIXQotICAgICAgICAgICAgczJoID0gd2luZGxsLnNfcmV0XzJoX2Z1bmMoUzJIKDk5LCA4OCkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChzMmgueCwgczJoLnkpLCAoOTkqMiwgODgqMykpCisgICAgICAgIHdpbmRsbC5zX3JldF8yaF9mdW5jLnJlc3R5cGUgPSBTMkgKKyAgICAgICAgd2luZGxsLnNfcmV0XzJoX2Z1bmMuYXJndHlwZXMgPSBbUzJIXQorICAgICAgICBzMmggPSB3aW5kbGwuc19yZXRfMmhfZnVuYyhTMkgoOTksIDg4KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoczJoLngsIHMyaC55KSwgKDk5KjIsIDg4KjMpKQogCiAgICAgZGVmIHRlc3Rfc3RydWN0X3JldHVybl84SChzZWxmKToKICAgICAgICAgY2xhc3MgUzhJKFN0cnVjdHVyZSk6CkBAIC0zNzYsMjMgKzM2OSwyNCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChzOGkuYSwgczhpLmIsIHM4aS5jLCBzOGkuZCwgczhpLmUsIHM4aS5mLCBzOGkuZywgczhpLmgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoOSoyLCA4KjMsIDcqNCwgNio1LCA1KjYsIDQqNywgMyo4LCAyKjkpKQogCi0gICAgaWYgc3lzLnBsYXRmb3JtID09ICJ3aW4zMiI6Ci0gICAgICAgIGRlZiB0ZXN0X3N0cnVjdF9yZXR1cm5fOEhfc3RkY2FsbChzZWxmKToKLSAgICAgICAgICAgIGNsYXNzIFM4SShTdHJ1Y3R1cmUpOgotICAgICAgICAgICAgICAgIF9maWVsZHNfID0gWygiYSIsIGNfaW50KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoImIiLCBjX2ludCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJjIiwgY19pbnQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiZCIsIGNfaW50KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoImUiLCBjX2ludCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJmIiwgY19pbnQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiZyIsIGNfaW50KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoImgiLCBjX2ludCldCi0gICAgICAgICAgICB3aW5kbGwuc19yZXRfOGlfZnVuYy5yZXN0eXBlID0gUzhJCi0gICAgICAgICAgICB3aW5kbGwuc19yZXRfOGlfZnVuYy5hcmd0eXBlcyA9IFtTOEldCi0gICAgICAgICAgICBpbnAgPSBTOEkoOSwgOCwgNywgNiwgNSwgNCwgMywgMikKLSAgICAgICAgICAgIHM4aSA9IHdpbmRsbC5zX3JldF84aV9mdW5jKGlucCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKHM4aS5hLCBzOGkuYiwgczhpLmMsIHM4aS5kLCBzOGkuZSwgczhpLmYsIHM4aS5nLCBzOGkuaCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoOSoyLCA4KjMsIDcqNCwgNio1LCA1KjYsIDQqNywgMyo4LCAyKjkpKQorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiLCAnV2luZG93cy1zcGVjaWZpYyB0ZXN0JykKKyAgICBkZWYgdGVzdF9zdHJ1Y3RfcmV0dXJuXzhIX3N0ZGNhbGwoc2VsZik6CisgICAgICAgIGNsYXNzIFM4SShTdHJ1Y3R1cmUpOgorICAgICAgICAgICAgX2ZpZWxkc18gPSBbKCJhIiwgY19pbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgKCJiIiwgY19pbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgKCJjIiwgY19pbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgKCJkIiwgY19pbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgKCJlIiwgY19pbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgKCJmIiwgY19pbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgKCJnIiwgY19pbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgKCJoIiwgY19pbnQpXQorICAgICAgICB3aW5kbGwuc19yZXRfOGlfZnVuYy5yZXN0eXBlID0gUzhJCisgICAgICAgIHdpbmRsbC5zX3JldF84aV9mdW5jLmFyZ3R5cGVzID0gW1M4SV0KKyAgICAgICAgaW5wID0gUzhJKDksIDgsIDcsIDYsIDUsIDQsIDMsIDIpCisgICAgICAgIHM4aSA9IHdpbmRsbC5zX3JldF84aV9mdW5jKGlucCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICAoczhpLmEsIHM4aS5iLCBzOGkuYywgczhpLmQsIHM4aS5lLCBzOGkuZiwgczhpLmcsIHM4aS5oKSwKKyAgICAgICAgICAgICAgICAoOSoyLCA4KjMsIDcqNCwgNio1LCA1KjYsIDQqNywgMyo4LCAyKjkpKQogCiAgICAgZGVmIHRlc3Rfc2YxNjUxMjM1KHNlbGYpOgogICAgICAgICAjIHNlZSBodHRwOi8vd3d3LnB5dGhvbi5vcmcvc2YvMTY1MTIzNQpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfaW50ZWdlcnMucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9pbnRlZ2Vycy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjJlNGIwOC4uMDAwMDAwMAotLS0gYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9pbnRlZ2Vycy5weQorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotIyBzdXBlcnNlZGVkIGJ5IHRlc3RfbnVtYmVycy5weQotaW1wb3J0IHVuaXR0ZXN0Ci0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9pbnRlcm5hbHMucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9pbnRlcm5hbHMucHkKaW5kZXggY2JmMmUwNS4uMjcxZTNmNSAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfaW50ZXJuYWxzLnB5CisrKyBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2ludGVybmFscy5weQpAQCAtNSwxNyArNSwxNCBAQAogCiAjIFhYWCBUaGlzIHRlc3QgbXVzdCBiZSByZXZpZXdlZCBmb3IgY29ycmVjdG5lc3MhISEKIAotIiIiCi1jdHlwZXMnIHR5cGVzIGFyZSBjb250YWluZXIgdHlwZXMuCi0KLVRoZXkgaGF2ZSBhbiBpbnRlcm5hbCBtZW1vcnkgYmxvY2ssIHdoaWNoIG9ubHkgY29uc2lzdHMgb2Ygc29tZSBieXRlcywKLWJ1dCBpdCBoYXMgdG8ga2VlcCByZWZlcmVuY2VzIHRvIG90aGVyIG9iamVjdHMgYXMgd2VsbC4gVGhpcyBpcyBub3QKLXJlYWxseSBuZWVkZWQgZm9yIHRyaXZpYWwgQyB0eXBlcyBsaWtlIGludCBvciBjaGFyLCBidXQgaXQgaXMgaW1wb3J0YW50Ci1mb3IgYWdncmVnYXRlIHR5cGVzIGxpa2Ugc3RyaW5ncyBvciBwb2ludGVycyBpbiBwYXJ0aWN1bGFyLgotCi1XaGF0IGFib3V0IHBvaW50ZXJzPwotCi0iIiIKKyMgY3R5cGVzJyB0eXBlcyBhcmUgY29udGFpbmVyIHR5cGVzLgorIworIyBUaGV5IGhhdmUgYW4gaW50ZXJuYWwgbWVtb3J5IGJsb2NrLCB3aGljaCBvbmx5IGNvbnNpc3RzIG9mIHNvbWUgYnl0ZXMsCisjIGJ1dCBpdCBoYXMgdG8ga2VlcCByZWZlcmVuY2VzIHRvIG90aGVyIG9iamVjdHMgYXMgd2VsbC4gVGhpcyBpcyBub3QKKyMgcmVhbGx5IG5lZWRlZCBmb3IgdHJpdmlhbCBDIHR5cGVzIGxpa2UgaW50IG9yIGNoYXIsIGJ1dCBpdCBpcyBpbXBvcnRhbnQKKyMgZm9yIGFnZ3JlZ2F0ZSB0eXBlcyBsaWtlIHN0cmluZ3Mgb3IgcG9pbnRlcnMgaW4gcGFydGljdWxhci4KKyMKKyMgV2hhdCBhYm91dCBwb2ludGVycz8KIAogY2xhc3MgT2JqZWN0c1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgYXNzZXJ0U2FtZShzZWxmLCBhLCBiKToKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2tlZXByZWZzLnB5IGIvTGliL2N0eXBlcy90ZXN0L3Rlc3Rfa2VlcHJlZnMucHkKaW5kZXggZGI4YWRmYi4uOTRjMDI1NyAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3Rfa2VlcHJlZnMucHkKKysrIGIvTGliL2N0eXBlcy90ZXN0L3Rlc3Rfa2VlcHJlZnMucHkKQEAgLTk0LDcgKzk0LDggQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4Ll9vYmplY3RzLCB7JzEnOiBpfSkKIAogY2xhc3MgRGVsZXRlUG9pbnRlclRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBkZWYgWF90ZXN0KHNlbGYpOgorICAgIEB1bml0dGVzdC5za2lwKCd0ZXN0IGRpc2FibGVkJykKKyAgICBkZWYgdGVzdF9YKHNlbGYpOgogICAgICAgICBjbGFzcyBYKFN0cnVjdHVyZSk6CiAgICAgICAgICAgICBfZmllbGRzXyA9IFsoInAiLCBQT0lOVEVSKGNfY2hhcl9wKSldCiAgICAgICAgIHggPSBYKCkKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2xvYWRpbmcucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9sb2FkaW5nLnB5CmluZGV4IDQxNDM2M2QuLjRmYjg5NjQgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2xvYWRpbmcucHkKKysrIGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfbG9hZGluZy5weQpAQCAtMSwzOCArMSw0NiBAQAogZnJvbSBjdHlwZXMgaW1wb3J0ICoKLWltcG9ydCBzeXMsIHVuaXR0ZXN0CiBpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHRlc3Quc3VwcG9ydAogZnJvbSBjdHlwZXMudXRpbCBpbXBvcnQgZmluZF9saWJyYXJ5Ci1mcm9tIGN0eXBlcy50ZXN0IGltcG9ydCBpc19yZXNvdXJjZV9lbmFibGVkCiAKIGxpYmNfbmFtZSA9IE5vbmUKLWlmIG9zLm5hbWUgPT0gIm50IjoKLSAgICBsaWJjX25hbWUgPSBmaW5kX2xpYnJhcnkoImMiKQotZWxpZiBvcy5uYW1lID09ICJjZSI6Ci0gICAgbGliY19uYW1lID0gImNvcmVkbGwiCi1lbGlmIHN5cy5wbGF0Zm9ybSA9PSAiY3lnd2luIjoKLSAgICBsaWJjX25hbWUgPSAiY3lnd2luMS5kbGwiCi1lbHNlOgotICAgIGxpYmNfbmFtZSA9IGZpbmRfbGlicmFyeSgiYyIpCiAKLWlmIGlzX3Jlc291cmNlX2VuYWJsZWQoInByaW50aW5nIik6Ci0gICAgcHJpbnQoImxpYmNfbmFtZSBpcyIsIGxpYmNfbmFtZSkKK2RlZiBzZXRVcE1vZHVsZSgpOgorICAgIGdsb2JhbCBsaWJjX25hbWUKKyAgICBpZiBvcy5uYW1lID09ICJudCI6CisgICAgICAgIGxpYmNfbmFtZSA9IGZpbmRfbGlicmFyeSgiYyIpCisgICAgZWxpZiBvcy5uYW1lID09ICJjZSI6CisgICAgICAgIGxpYmNfbmFtZSA9ICJjb3JlZGxsIgorICAgIGVsaWYgc3lzLnBsYXRmb3JtID09ICJjeWd3aW4iOgorICAgICAgICBsaWJjX25hbWUgPSAiY3lnd2luMS5kbGwiCisgICAgZWxzZToKKyAgICAgICAgbGliY19uYW1lID0gZmluZF9saWJyYXJ5KCJjIikKKworICAgIGlmIHRlc3Quc3VwcG9ydC52ZXJib3NlOgorICAgICAgICBwcmludCgibGliY19uYW1lIGlzIiwgbGliY19uYW1lKQogCiBjbGFzcyBMb2FkZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIHVua25vd25kbGwgPSAieHhyYW5kb21uYW1leHgiCiAKLSAgICBpZiBsaWJjX25hbWUgaXMgbm90IE5vbmU6Ci0gICAgICAgIGRlZiB0ZXN0X2xvYWQoc2VsZik6Ci0gICAgICAgICAgICBDRExMKGxpYmNfbmFtZSkKLSAgICAgICAgICAgIENETEwob3MucGF0aC5iYXNlbmFtZShsaWJjX25hbWUpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgQ0RMTCwgc2VsZi51bmtub3duZGxsKQorICAgIGRlZiB0ZXN0X2xvYWQoc2VsZik6CisgICAgICAgIGlmIGxpYmNfbmFtZSBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgnY291bGQgbm90IGZpbmQgbGliYycpCisgICAgICAgIENETEwobGliY19uYW1lKQorICAgICAgICBDRExMKG9zLnBhdGguYmFzZW5hbWUobGliY19uYW1lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgQ0RMTCwgc2VsZi51bmtub3duZGxsKQogCi0gICAgaWYgbGliY19uYW1lIGlzIG5vdCBOb25lIGFuZCBvcy5wYXRoLmJhc2VuYW1lKGxpYmNfbmFtZSkgPT0gImxpYmMuc28uNiI6Ci0gICAgICAgIGRlZiB0ZXN0X2xvYWRfdmVyc2lvbihzZWxmKToKLSAgICAgICAgICAgIGNkbGwuTG9hZExpYnJhcnkoImxpYmMuc28uNiIpCi0gICAgICAgICAgICAjIGxpbnV4IHVzZXMgdmVyc2lvbiwgbGliYyA5IHNob3VsZCBub3QgZXhpc3QKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIGNkbGwuTG9hZExpYnJhcnksICJsaWJjLnNvLjkiKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgY2RsbC5Mb2FkTGlicmFyeSwgc2VsZi51bmtub3duZGxsKQorICAgIGRlZiB0ZXN0X2xvYWRfdmVyc2lvbihzZWxmKToKKyAgICAgICAgaWYgbGliY19uYW1lIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCdjb3VsZCBub3QgZmluZCBsaWJjJykKKyAgICAgICAgaWYgb3MucGF0aC5iYXNlbmFtZShsaWJjX25hbWUpICE9ICdsaWJjLnNvLjYnOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgnd3JvbmcgbGliYyBwYXRoIGZvciB0ZXN0JykKKyAgICAgICAgY2RsbC5Mb2FkTGlicmFyeSgibGliYy5zby42IikKKyAgICAgICAgIyBsaW51eCB1c2VzIHZlcnNpb24sIGxpYmMgOSBzaG91bGQgbm90IGV4aXN0CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIGNkbGwuTG9hZExpYnJhcnksICJsaWJjLnNvLjkiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBjZGxsLkxvYWRMaWJyYXJ5LCBzZWxmLnVua25vd25kbGwpCiAKICAgICBkZWYgdGVzdF9maW5kKHNlbGYpOgogICAgICAgICBmb3IgbmFtZSBpbiAoImMiLCAibSIpOgpAQCAtNDEsNjYgKzQ5LDcxIEBACiAgICAgICAgICAgICAgICAgY2RsbC5Mb2FkTGlicmFyeShsaWIpCiAgICAgICAgICAgICAgICAgQ0RMTChsaWIpCiAKLSAgICBpZiBvcy5uYW1lIGluICgibnQiLCAiY2UiKToKLSAgICAgICAgZGVmIHRlc3RfbG9hZF9saWJyYXJ5KHNlbGYpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUobGliY19uYW1lKQotICAgICAgICAgICAgaWYgaXNfcmVzb3VyY2VfZW5hYmxlZCgicHJpbnRpbmciKToKLSAgICAgICAgICAgICAgICBwcmludChmaW5kX2xpYnJhcnkoImtlcm5lbDMyIikpCi0gICAgICAgICAgICAgICAgcHJpbnQoZmluZF9saWJyYXJ5KCJ1c2VyMzIiKSkKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhvcy5uYW1lIGluICgibnQiLCAiY2UiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdCBzcGVjaWZpYyB0byBXaW5kb3dzIChOVC9DRSknKQorICAgIGRlZiB0ZXN0X2xvYWRfbGlicmFyeShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUobGliY19uYW1lKQorICAgICAgICBpZiB0ZXN0LnN1cHBvcnQudmVyYm9zZToKKyAgICAgICAgICAgIHByaW50KGZpbmRfbGlicmFyeSgia2VybmVsMzIiKSkKKyAgICAgICAgICAgIHByaW50KGZpbmRfbGlicmFyeSgidXNlcjMyIikpCiAKLSAgICAgICAgICAgIGlmIG9zLm5hbWUgPT0gIm50IjoKLSAgICAgICAgICAgICAgICB3aW5kbGwua2VybmVsMzIuR2V0TW9kdWxlSGFuZGxlVwotICAgICAgICAgICAgICAgIHdpbmRsbFsia2VybmVsMzIiXS5HZXRNb2R1bGVIYW5kbGVXCi0gICAgICAgICAgICAgICAgd2luZGxsLkxvYWRMaWJyYXJ5KCJrZXJuZWwzMiIpLkdldE1vZHVsZUhhbmRsZVcKLSAgICAgICAgICAgICAgICBXaW5ETEwoImtlcm5lbDMyIikuR2V0TW9kdWxlSGFuZGxlVwotICAgICAgICAgICAgZWxpZiBvcy5uYW1lID09ICJjZSI6Ci0gICAgICAgICAgICAgICAgd2luZGxsLmNvcmVkbGwuR2V0TW9kdWxlSGFuZGxlVwotICAgICAgICAgICAgICAgIHdpbmRsbFsiY29yZWRsbCJdLkdldE1vZHVsZUhhbmRsZVcKLSAgICAgICAgICAgICAgICB3aW5kbGwuTG9hZExpYnJhcnkoImNvcmVkbGwiKS5HZXRNb2R1bGVIYW5kbGVXCi0gICAgICAgICAgICAgICAgV2luRExMKCJjb3JlZGxsIikuR2V0TW9kdWxlSGFuZGxlVworICAgICAgICBpZiBvcy5uYW1lID09ICJudCI6CisgICAgICAgICAgICB3aW5kbGwua2VybmVsMzIuR2V0TW9kdWxlSGFuZGxlVworICAgICAgICAgICAgd2luZGxsWyJrZXJuZWwzMiJdLkdldE1vZHVsZUhhbmRsZVcKKyAgICAgICAgICAgIHdpbmRsbC5Mb2FkTGlicmFyeSgia2VybmVsMzIiKS5HZXRNb2R1bGVIYW5kbGVXCisgICAgICAgICAgICBXaW5ETEwoImtlcm5lbDMyIikuR2V0TW9kdWxlSGFuZGxlVworICAgICAgICBlbGlmIG9zLm5hbWUgPT0gImNlIjoKKyAgICAgICAgICAgIHdpbmRsbC5jb3JlZGxsLkdldE1vZHVsZUhhbmRsZVcKKyAgICAgICAgICAgIHdpbmRsbFsiY29yZWRsbCJdLkdldE1vZHVsZUhhbmRsZVcKKyAgICAgICAgICAgIHdpbmRsbC5Mb2FkTGlicmFyeSgiY29yZWRsbCIpLkdldE1vZHVsZUhhbmRsZVcKKyAgICAgICAgICAgIFdpbkRMTCgiY29yZWRsbCIpLkdldE1vZHVsZUhhbmRsZVcKIAotICAgICAgICBkZWYgdGVzdF9sb2FkX29yZGluYWxfZnVuY3Rpb25zKHNlbGYpOgotICAgICAgICAgICAgaW1wb3J0IF9jdHlwZXNfdGVzdAotICAgICAgICAgICAgZGxsID0gV2luRExMKF9jdHlwZXNfdGVzdC5fX2ZpbGVfXykKLSAgICAgICAgICAgICMgV2UgbG9hZCB0aGUgc2FtZSBmdW5jdGlvbiBib3RoIHZpYSBvcmRpbmFsIGFuZCBuYW1lCi0gICAgICAgICAgICBmdW5jX29yZCA9IGRsbFsyXQotICAgICAgICAgICAgZnVuY19uYW1lID0gZGxsLkdldFN0cmluZwotICAgICAgICAgICAgIyBhZGRyZXNzb2YgZ2V0cyB0aGUgYWRkcmVzcyB3aGVyZSB0aGUgZnVuY3Rpb24gcG9pbnRlciBpcyBzdG9yZWQKLSAgICAgICAgICAgIGFfb3JkID0gYWRkcmVzc29mKGZ1bmNfb3JkKQotICAgICAgICAgICAgYV9uYW1lID0gYWRkcmVzc29mKGZ1bmNfbmFtZSkKLSAgICAgICAgICAgIGZfb3JkX2FkZHIgPSBjX3ZvaWRfcC5mcm9tX2FkZHJlc3MoYV9vcmQpLnZhbHVlCi0gICAgICAgICAgICBmX25hbWVfYWRkciA9IGNfdm9pZF9wLmZyb21fYWRkcmVzcyhhX25hbWUpLnZhbHVlCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhleChmX29yZF9hZGRyKSwgaGV4KGZfbmFtZV9hZGRyKSkKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhvcy5uYW1lIGluICgibnQiLCAiY2UiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdCBzcGVjaWZpYyB0byBXaW5kb3dzIChOVC9DRSknKQorICAgIGRlZiB0ZXN0X2xvYWRfb3JkaW5hbF9mdW5jdGlvbnMoc2VsZik6CisgICAgICAgIGltcG9ydCBfY3R5cGVzX3Rlc3QKKyAgICAgICAgZGxsID0gV2luRExMKF9jdHlwZXNfdGVzdC5fX2ZpbGVfXykKKyAgICAgICAgIyBXZSBsb2FkIHRoZSBzYW1lIGZ1bmN0aW9uIGJvdGggdmlhIG9yZGluYWwgYW5kIG5hbWUKKyAgICAgICAgZnVuY19vcmQgPSBkbGxbMl0KKyAgICAgICAgZnVuY19uYW1lID0gZGxsLkdldFN0cmluZworICAgICAgICAjIGFkZHJlc3NvZiBnZXRzIHRoZSBhZGRyZXNzIHdoZXJlIHRoZSBmdW5jdGlvbiBwb2ludGVyIGlzIHN0b3JlZAorICAgICAgICBhX29yZCA9IGFkZHJlc3NvZihmdW5jX29yZCkKKyAgICAgICAgYV9uYW1lID0gYWRkcmVzc29mKGZ1bmNfbmFtZSkKKyAgICAgICAgZl9vcmRfYWRkciA9IGNfdm9pZF9wLmZyb21fYWRkcmVzcyhhX29yZCkudmFsdWUKKyAgICAgICAgZl9uYW1lX2FkZHIgPSBjX3ZvaWRfcC5mcm9tX2FkZHJlc3MoYV9uYW1lKS52YWx1ZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhleChmX29yZF9hZGRyKSwgaGV4KGZfbmFtZV9hZGRyKSkKIAotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IsIGRsbC5fX2dldGl0ZW1fXywgMTIzNCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IsIGRsbC5fX2dldGl0ZW1fXywgMTIzNCkKIAotICAgIGlmIG9zLm5hbWUgPT0gIm50IjoKLSAgICAgICAgZGVmIHRlc3RfMTcwMzI4Nl9BKHNlbGYpOgotICAgICAgICAgICAgZnJvbSBfY3R5cGVzIGltcG9ydCBMb2FkTGlicmFyeSwgRnJlZUxpYnJhcnkKLSAgICAgICAgICAgICMgT24gd2luWFAgNjQtYml0LCBhZHZhcGkzMiBsb2FkcyBhdCBhbiBhZGRyZXNzIHRoYXQgZG9lcwotICAgICAgICAgICAgIyBOT1QgZml0IGludG8gYSAzMi1iaXQgaW50ZWdlci4gIEZyZWVMaWJyYXJ5IG11c3QgYmUgYWJsZQotICAgICAgICAgICAgIyB0byBhY2NlcHQgdGhpcyBhZGRyZXNzLgorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKG9zLm5hbWUgPT0gIm50IiwgJ1dpbmRvd3Mtc3BlY2lmaWMgdGVzdCcpCisgICAgZGVmIHRlc3RfMTcwMzI4Nl9BKHNlbGYpOgorICAgICAgICBmcm9tIF9jdHlwZXMgaW1wb3J0IExvYWRMaWJyYXJ5LCBGcmVlTGlicmFyeQorICAgICAgICAjIE9uIHdpblhQIDY0LWJpdCwgYWR2YXBpMzIgbG9hZHMgYXQgYW4gYWRkcmVzcyB0aGF0IGRvZXMKKyAgICAgICAgIyBOT1QgZml0IGludG8gYSAzMi1iaXQgaW50ZWdlci4gIEZyZWVMaWJyYXJ5IG11c3QgYmUgYWJsZQorICAgICAgICAjIHRvIGFjY2VwdCB0aGlzIGFkZHJlc3MuCiAKLSAgICAgICAgICAgICMgVGhlc2UgYXJlIHRlc3RzIGZvciBodHRwOi8vd3d3LnB5dGhvbi5vcmcvc2YvMTcwMzI4NgotICAgICAgICAgICAgaGFuZGxlID0gTG9hZExpYnJhcnkoImFkdmFwaTMyIikKLSAgICAgICAgICAgIEZyZWVMaWJyYXJ5KGhhbmRsZSkKKyAgICAgICAgIyBUaGVzZSBhcmUgdGVzdHMgZm9yIGh0dHA6Ly93d3cucHl0aG9uLm9yZy9zZi8xNzAzMjg2CisgICAgICAgIGhhbmRsZSA9IExvYWRMaWJyYXJ5KCJhZHZhcGkzMiIpCisgICAgICAgIEZyZWVMaWJyYXJ5KGhhbmRsZSkKIAotICAgICAgICBkZWYgdGVzdF8xNzAzMjg2X0Ioc2VsZik6Ci0gICAgICAgICAgICAjIFNpbmNlIG9uIHdpblhQIDY0LWJpdCBhZHZhcGkzMiBsb2FkcyBsaWtlIGRlc2NyaWJlZAotICAgICAgICAgICAgIyBhYm92ZSwgdGhlIChhcmJpdHJhcmlseSBzZWxlY3RlZCkgQ2xvc2VFdmVudExvZyBmdW5jdGlvbgotICAgICAgICAgICAgIyBhbHNvIGhhcyBhIGhpZ2ggYWRkcmVzcy4gICdjYWxsX2Z1bmN0aW9uJyBzaG91bGQgYWNjZXB0Ci0gICAgICAgICAgICAjIGFkZHJlc3NlcyBzbyBsYXJnZS4KLSAgICAgICAgICAgIGZyb20gX2N0eXBlcyBpbXBvcnQgY2FsbF9mdW5jdGlvbgotICAgICAgICAgICAgYWR2YXBpMzIgPSB3aW5kbGwuYWR2YXBpMzIKLSAgICAgICAgICAgICMgQ2FsbGluZyBDbG9zZUV2ZW50TG9nIHdpdGggYSBOVUxMIGFyZ3VtZW50IHNob3VsZCBmYWlsLAotICAgICAgICAgICAgIyBidXQgdGhlIGNhbGwgc2hvdWxkIG5vdCBzZWdmYXVsdCBvciBzby4KLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgYWR2YXBpMzIuQ2xvc2VFdmVudExvZyhOb25lKSkKLSAgICAgICAgICAgIHdpbmRsbC5rZXJuZWwzMi5HZXRQcm9jQWRkcmVzcy5hcmd0eXBlcyA9IGNfdm9pZF9wLCBjX2NoYXJfcAotICAgICAgICAgICAgd2luZGxsLmtlcm5lbDMyLkdldFByb2NBZGRyZXNzLnJlc3R5cGUgPSBjX3ZvaWRfcAotICAgICAgICAgICAgcHJvYyA9IHdpbmRsbC5rZXJuZWwzMi5HZXRQcm9jQWRkcmVzcyhhZHZhcGkzMi5faGFuZGxlLCBiIkNsb3NlRXZlbnRMb2ciKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHByb2MpCi0gICAgICAgICAgICAjIFRoaXMgaXMgdGhlIHJlYWwgdGVzdDogY2FsbCB0aGUgZnVuY3Rpb24gdmlhICdjYWxsX2Z1bmN0aW9uJwotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBjYWxsX2Z1bmN0aW9uKHByb2MsIChOb25lLCkpKQorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKG9zLm5hbWUgPT0gIm50IiwgJ1dpbmRvd3Mtc3BlY2lmaWMgdGVzdCcpCisgICAgZGVmIHRlc3RfMTcwMzI4Nl9CKHNlbGYpOgorICAgICAgICAjIFNpbmNlIG9uIHdpblhQIDY0LWJpdCBhZHZhcGkzMiBsb2FkcyBsaWtlIGRlc2NyaWJlZAorICAgICAgICAjIGFib3ZlLCB0aGUgKGFyYml0cmFyaWx5IHNlbGVjdGVkKSBDbG9zZUV2ZW50TG9nIGZ1bmN0aW9uCisgICAgICAgICMgYWxzbyBoYXMgYSBoaWdoIGFkZHJlc3MuICAnY2FsbF9mdW5jdGlvbicgc2hvdWxkIGFjY2VwdAorICAgICAgICAjIGFkZHJlc3NlcyBzbyBsYXJnZS4KKyAgICAgICAgZnJvbSBfY3R5cGVzIGltcG9ydCBjYWxsX2Z1bmN0aW9uCisgICAgICAgIGFkdmFwaTMyID0gd2luZGxsLmFkdmFwaTMyCisgICAgICAgICMgQ2FsbGluZyBDbG9zZUV2ZW50TG9nIHdpdGggYSBOVUxMIGFyZ3VtZW50IHNob3VsZCBmYWlsLAorICAgICAgICAjIGJ1dCB0aGUgY2FsbCBzaG91bGQgbm90IHNlZ2ZhdWx0IG9yIHNvLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGFkdmFwaTMyLkNsb3NlRXZlbnRMb2coTm9uZSkpCisgICAgICAgIHdpbmRsbC5rZXJuZWwzMi5HZXRQcm9jQWRkcmVzcy5hcmd0eXBlcyA9IGNfdm9pZF9wLCBjX2NoYXJfcAorICAgICAgICB3aW5kbGwua2VybmVsMzIuR2V0UHJvY0FkZHJlc3MucmVzdHlwZSA9IGNfdm9pZF9wCisgICAgICAgIHByb2MgPSB3aW5kbGwua2VybmVsMzIuR2V0UHJvY0FkZHJlc3MoYWR2YXBpMzIuX2hhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiIkNsb3NlRXZlbnRMb2ciKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocHJvYykKKyAgICAgICAgIyBUaGlzIGlzIHRoZSByZWFsIHRlc3Q6IGNhbGwgdGhlIGZ1bmN0aW9uIHZpYSAnY2FsbF9mdW5jdGlvbicKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBjYWxsX2Z1bmN0aW9uKHByb2MsIChOb25lLCkpKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfbWFjaG9saWIucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9tYWNob2xpYi5weQppbmRleCBlZGE4NDZkLi42YjM1MjY5IDEwMDY0NAotLS0gYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9tYWNob2xpYi5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9tYWNob2xpYi5weQpAQCAtMywzNSArMywzMyBAQAogaW1wb3J0IHVuaXR0ZXN0CiAKICMgQm9iIElwcG9saXRvOgotIiIiCi1Pay4uIHRoZSBjb2RlIHRvIGZpbmQgdGhlIGZpbGVuYW1lIGZvciBfX2dldGF0dHJfXyBzaG91bGQgbG9vawotc29tZXRoaW5nIGxpa2U6Ci0KLWltcG9ydCBvcwotZnJvbSBtYWNob2xpYi5keWxkIGltcG9ydCBkeWxkX2ZpbmQKLQotZGVmIGZpbmRfbGliKG5hbWUpOgotICAgICBwb3NzaWJsZSA9IFsnbGliJytuYW1lKycuZHlsaWInLCBuYW1lKycuZHlsaWInLAotICAgICBuYW1lKycuZnJhbWV3b3JrLycrbmFtZV0KLSAgICAgZm9yIGR5bGliIGluIHBvc3NpYmxlOgotICAgICAgICAgdHJ5OgotICAgICAgICAgICAgIHJldHVybiBvcy5wYXRoLnJlYWxwYXRoKGR5bGRfZmluZChkeWxpYikpCi0gICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKLSAgICAgICAgICAgICBwYXNzCi0gICAgIHJhaXNlIFZhbHVlRXJyb3IsICIlcyBub3QgZm91bmQiICUgKG5hbWUsKQotCi1JdCdsbCBoYXZlIG91dHB1dCBsaWtlIHRoaXM6Ci0KLSA+Pj4gZmluZF9saWIoJ3B0aHJlYWQnKQotJy91c3IvbGliL2xpYlN5c3RlbS5CLmR5bGliJwotID4+PiBmaW5kX2xpYigneicpCi0nL3Vzci9saWIvbGliei4xLmR5bGliJwotID4+PiBmaW5kX2xpYignSU9LaXQnKQotJy9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0lPS2l0LmZyYW1ld29yay9WZXJzaW9ucy9BL0lPS2l0JwotCi0tYm9iCi0KLSIiIgorIworIyBPay4uIHRoZSBjb2RlIHRvIGZpbmQgdGhlIGZpbGVuYW1lIGZvciBfX2dldGF0dHJfXyBzaG91bGQgbG9vaworIyBzb21ldGhpbmcgbGlrZToKKyMKKyMgaW1wb3J0IG9zCisjIGZyb20gbWFjaG9saWIuZHlsZCBpbXBvcnQgZHlsZF9maW5kCisjCisjIGRlZiBmaW5kX2xpYihuYW1lKToKKyMgICAgICBwb3NzaWJsZSA9IFsnbGliJytuYW1lKycuZHlsaWInLCBuYW1lKycuZHlsaWInLAorIyAgICAgIG5hbWUrJy5mcmFtZXdvcmsvJytuYW1lXQorIyAgICAgIGZvciBkeWxpYiBpbiBwb3NzaWJsZToKKyMgICAgICAgICAgdHJ5OgorIyAgICAgICAgICAgICAgcmV0dXJuIG9zLnBhdGgucmVhbHBhdGgoZHlsZF9maW5kKGR5bGliKSkKKyMgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisjICAgICAgICAgICAgICBwYXNzCisjICAgICAgcmFpc2UgVmFsdWVFcnJvciwgIiVzIG5vdCBmb3VuZCIgJSAobmFtZSwpCisjCisjIEl0J2xsIGhhdmUgb3V0cHV0IGxpa2UgdGhpczoKKyMKKyMgID4+PiBmaW5kX2xpYigncHRocmVhZCcpCisjICcvdXNyL2xpYi9saWJTeXN0ZW0uQi5keWxpYicKKyMgID4+PiBmaW5kX2xpYigneicpCisjICcvdXNyL2xpYi9saWJ6LjEuZHlsaWInCisjICA+Pj4gZmluZF9saWIoJ0lPS2l0JykKKyMgJy9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0lPS2l0LmZyYW1ld29yay9WZXJzaW9ucy9BL0lPS2l0JworIworIyAtYm9iCiAKIGZyb20gY3R5cGVzLm1hY2hvbGliLmR5bGQgaW1wb3J0IGR5bGRfZmluZAogCkBAIC00NSwxOCArNDMsMjEgQEAKICAgICByYWlzZSBWYWx1ZUVycm9yKCIlcyBub3QgZm91bmQiICUgKG5hbWUsKSkKIAogY2xhc3MgTWFjaE9UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBpZiBzeXMucGxhdGZvcm0gPT0gImRhcndpbiI6Ci0gICAgICAgIGRlZiB0ZXN0X2ZpbmQoc2VsZik6CisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3lzLnBsYXRmb3JtID09ICJkYXJ3aW4iLCAnT1NYLXNwZWNpZmljIHRlc3QnKQorICAgIGRlZiB0ZXN0X2ZpbmQoc2VsZik6CiAKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmluZF9saWIoJ3B0aHJlYWQnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvdXNyL2xpYi9saWJTeXN0ZW0uQi5keWxpYicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmluZF9saWIoJ3B0aHJlYWQnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy91c3IvbGliL2xpYlN5c3RlbS5CLmR5bGliJykKIAotICAgICAgICAgICAgcmVzdWx0ID0gZmluZF9saWIoJ3onKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdC5zdGFydHN3aXRoKCcvdXNyL2xpYi9saWJ6LjEnKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXN1bHQuZW5kc3dpdGgoJy5keWxpYicpKQorICAgICAgICByZXN1bHQgPSBmaW5kX2xpYigneicpCisgICAgICAgICMgSXNzdWUgIzIxMDkzOiBkeWxkIGRlZmF1bHQgc2VhcmNoIHBhdGggaW5jbHVkZXMgJEhPTUUvbGliIGFuZAorICAgICAgICAjIC91c3IvbG9jYWwvbGliIGJlZm9yZSAvdXNyL2xpYiwgd2hpY2ggY2F1c2VkIHRlc3QgZmFpbHVyZXMgaWYKKyAgICAgICAgIyBhIGxvY2FsIGNvcHkgb2YgbGlieiBleGlzdHMgaW4gb25lIG9mIHRoZW0uIE5vdyBpZ25vcmUgdGhlIGhlYWQKKyAgICAgICAgIyBvZiB0aGUgcGF0aC4KKyAgICAgICAgc2VsZi5hc3NlcnRSZWdleChyZXN1bHQsIHIiLiovbGliL2xpYnpcLi4qLipcLmR5bGliIikKIAotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaW5kX2xpYignSU9LaXQnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9JT0tpdC5mcmFtZXdvcmsvVmVyc2lvbnMvQS9JT0tpdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmluZF9saWIoJ0lPS2l0JyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9JT0tpdC5mcmFtZXdvcmsvVmVyc2lvbnMvQS9JT0tpdCcpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9tZW1mdW5jdGlvbnMucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9tZW1mdW5jdGlvbnMucHkKaW5kZXggYWVjNGFhYS4uZTc4NGI5YSAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfbWVtZnVuY3Rpb25zLnB5CisrKyBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X21lbWZ1bmN0aW9ucy5weQpAQCAtMiwxNyArMiwxOSBAQAogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiBpbXBvcnQgdW5pdHRlc3QKIGZyb20gY3R5cGVzIGltcG9ydCAqCitmcm9tIGN0eXBlcy50ZXN0IGltcG9ydCBuZWVkX3N5bWJvbAogCiBjbGFzcyBNZW1GdW5jdGlvbnNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLSMjICAgIGRlZiB0ZXN0X292ZXJmbG93KHNlbGYpOgotIyMgICAgICAgICMgc3RyaW5nX2F0IGFuZCB3c3RyaW5nX2F0IG11c3QgdXNlIHRoZSBQeXRob24gY2FsbGluZwotIyMgICAgICAgICMgY29udmVudGlvbiAod2hpY2ggYWNxdWlyZXMgdGhlIEdJTCBhbmQgY2hlY2tzIHRoZSBQeXRob24KLSMjICAgICAgICAjIGVycm9yIGZsYWcpLiAgUHJvdm9rZSBhbiBlcnJvciBhbmQgY2F0Y2ggaXQ7IHNlZSBhbHNvIGlzc3VlCi0jIyAgICAgICAgIyAjMzU1NDogPGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUzNTU0PgotIyMgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChPdmVyZmxvd0Vycm9yLCBNZW1vcnlFcnJvciwgU3lzdGVtRXJyb3IpLAotIyMgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbWJkYTogd3N0cmluZ19hdCh1ImZvbyIsIHN5cy5tYXhpbnQgLSAxKSkKLSMjICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoT3ZlcmZsb3dFcnJvciwgTWVtb3J5RXJyb3IsIFN5c3RlbUVycm9yKSwKLSMjICAgICAgICAgICAgICAgICAgICAgICAgICBsYW1iZGE6IHN0cmluZ19hdCgiZm9vIiwgc3lzLm1heGludCAtIDEpKQorICAgIEB1bml0dGVzdC5za2lwKCd0ZXN0IGRpc2FibGVkJykKKyAgICBkZWYgdGVzdF9vdmVyZmxvdyhzZWxmKToKKyAgICAgICAgIyBzdHJpbmdfYXQgYW5kIHdzdHJpbmdfYXQgbXVzdCB1c2UgdGhlIFB5dGhvbiBjYWxsaW5nCisgICAgICAgICMgY29udmVudGlvbiAod2hpY2ggYWNxdWlyZXMgdGhlIEdJTCBhbmQgY2hlY2tzIHRoZSBQeXRob24KKyAgICAgICAgIyBlcnJvciBmbGFnKS4gIFByb3Zva2UgYW4gZXJyb3IgYW5kIGNhdGNoIGl0OyBzZWUgYWxzbyBpc3N1ZQorICAgICAgICAjICMzNTU0OiA8aHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTM1NTQ+CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChPdmVyZmxvd0Vycm9yLCBNZW1vcnlFcnJvciwgU3lzdGVtRXJyb3IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBsYW1iZGE6IHdzdHJpbmdfYXQodSJmb28iLCBzeXMubWF4aW50IC0gMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChPdmVyZmxvd0Vycm9yLCBNZW1vcnlFcnJvciwgU3lzdGVtRXJyb3IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBsYW1iZGE6IHN0cmluZ19hdCgiZm9vIiwgc3lzLm1heGludCAtIDEpKQogCiAgICAgZGVmIHRlc3RfbWVtbW92ZShzZWxmKToKICAgICAgICAgIyBsYXJnZSBidWZmZXJzIGFwcGFyZW50bHkgaW5jcmVhc2UgdGhlIGNoYW5jZSB0aGF0IHRoZSBtZW1vcnkKQEAgLTYxLDIxICs2MywxNyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cmluZ19hdChiImZvbyBiYXIiLCA3KSwgYiJmb28gYmFyIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHJpbmdfYXQoYiJmb28gYmFyIiwgMyksIGIiZm9vIikKIAotICAgIHRyeToKLSAgICAgICAgY3JlYXRlX3VuaWNvZGVfYnVmZmVyCi0gICAgZXhjZXB0IE5hbWVFcnJvcjoKLSAgICAgICAgcGFzcwotICAgIGVsc2U6Ci0gICAgICAgIGRlZiB0ZXN0X3dzdHJpbmdfYXQoc2VsZik6Ci0gICAgICAgICAgICBwID0gY3JlYXRlX3VuaWNvZGVfYnVmZmVyKCJIZWxsbywgV29ybGQiKQotICAgICAgICAgICAgYSA9IGNyZWF0ZV91bmljb2RlX2J1ZmZlcigxMDAwMDAwKQotICAgICAgICAgICAgcmVzdWx0ID0gbWVtbW92ZShhLCBwLCBsZW4ocCkgKiBzaXplb2YoY193Y2hhcikpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEudmFsdWUsICJIZWxsbywgV29ybGQiKQorICAgIEBuZWVkX3N5bWJvbCgnY3JlYXRlX3VuaWNvZGVfYnVmZmVyJykKKyAgICBkZWYgdGVzdF93c3RyaW5nX2F0KHNlbGYpOgorICAgICAgICBwID0gY3JlYXRlX3VuaWNvZGVfYnVmZmVyKCJIZWxsbywgV29ybGQiKQorICAgICAgICBhID0gY3JlYXRlX3VuaWNvZGVfYnVmZmVyKDEwMDAwMDApCisgICAgICAgIHJlc3VsdCA9IG1lbW1vdmUoYSwgcCwgbGVuKHApICogc2l6ZW9mKGNfd2NoYXIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEudmFsdWUsICJIZWxsbywgV29ybGQiKQogCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdzdHJpbmdfYXQoYSksICJIZWxsbywgV29ybGQiKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3c3RyaW5nX2F0KGEsIDUpLCAiSGVsbG8iKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3c3RyaW5nX2F0KGEsIDE2KSwgIkhlbGxvLCBXb3JsZFwwXDBcMFwwIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod3N0cmluZ19hdChhLCAwKSwgIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod3N0cmluZ19hdChhKSwgIkhlbGxvLCBXb3JsZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod3N0cmluZ19hdChhLCA1KSwgIkhlbGxvIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3c3RyaW5nX2F0KGEsIDE2KSwgIkhlbGxvLCBXb3JsZFwwXDBcMFwwIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3c3RyaW5nX2F0KGEsIDApLCAiIikKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X251bWJlcnMucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9udW1iZXJzLnB5CmluZGV4IDNiNzE5NGYuLjJhZmNhMjYgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X251bWJlcnMucHkKKysrIGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfbnVtYmVycy5weQpAQCAtODIsMTIgKzgyLDEzIEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHQsICIiKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0LCBOb25lKQogCi0jIyAgICBkZWYgdGVzdF92YWxpZF9yYW5nZXMoc2VsZik6Ci0jIyAgICAgICAgIyBpbnZhbGlkIHZhbHVlcyBvZiB0aGUgY29ycmVjdCB0eXBlCi0jIyAgICAgICAgIyByYWlzZSBWYWx1ZUVycm9yIChub3QgT3ZlcmZsb3dFcnJvcikKLSMjICAgICAgICBmb3IgdCwgKGwsIGgpIGluIHppcCh1bnNpZ25lZF90eXBlcywgdW5zaWduZWRfcmFuZ2VzKToKLSMjICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdCwgbC0xKQotIyMgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0LCBoKzEpCisgICAgQHVuaXR0ZXN0LnNraXAoJ3Rlc3QgZGlzYWJsZWQnKQorICAgIGRlZiB0ZXN0X3ZhbGlkX3JhbmdlcyhzZWxmKToKKyAgICAgICAgIyBpbnZhbGlkIHZhbHVlcyBvZiB0aGUgY29ycmVjdCB0eXBlCisgICAgICAgICMgcmFpc2UgVmFsdWVFcnJvciAobm90IE92ZXJmbG93RXJyb3IpCisgICAgICAgIGZvciB0LCAobCwgaCkgaW4gemlwKHVuc2lnbmVkX3R5cGVzLCB1bnNpZ25lZF9yYW5nZXMpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdCwgbC0xKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdCwgaCsxKQogCiAgICAgZGVmIHRlc3RfZnJvbV9wYXJhbShzZWxmKToKICAgICAgICAgIyB0aGUgZnJvbV9wYXJhbSBjbGFzcyBtZXRob2QgYXR0cmlidXRlIGFsd2F5cwpAQCAtMjAwLDE2ICsyMDEsMTcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2LnZhbHVlLCBiJz8nKQogCiAgICAgIyBhcnJheSBkb2VzIG5vdCBzdXBwb3J0IGNfYm9vbCAvICd0JwotICAgICMgZGVmIHRlc3RfYm9vbF9mcm9tX2FkZHJlc3Moc2VsZik6Ci0gICAgIyAgICAgZnJvbSBjdHlwZXMgaW1wb3J0IGNfYm9vbAotICAgICMgICAgIGZyb20gYXJyYXkgaW1wb3J0IGFycmF5Ci0gICAgIyAgICAgYSA9IGFycmF5KGNfYm9vbC5fdHlwZV8sIFtUcnVlXSkKLSAgICAjICAgICB2ID0gdC5mcm9tX2FkZHJlc3MoYS5idWZmZXJfaW5mbygpWzBdKQotICAgICMgICAgIHNlbGYuYXNzZXJ0RXF1YWwodi52YWx1ZSwgYVswXSkKLSAgICAjICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUodikgaXMgdCkKLSAgICAjICAgICBhWzBdID0gRmFsc2UKLSAgICAjICAgICBzZWxmLmFzc2VydEVxdWFsKHYudmFsdWUsIGFbMF0pCi0gICAgIyAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHYpIGlzIHQpCisgICAgQHVuaXR0ZXN0LnNraXAoJ3Rlc3QgZGlzYWJsZWQnKQorICAgIGRlZiB0ZXN0X2Jvb2xfZnJvbV9hZGRyZXNzKHNlbGYpOgorICAgICAgICBmcm9tIGN0eXBlcyBpbXBvcnQgY19ib29sCisgICAgICAgIGZyb20gYXJyYXkgaW1wb3J0IGFycmF5CisgICAgICAgIGEgPSBhcnJheShjX2Jvb2wuX3R5cGVfLCBbVHJ1ZV0pCisgICAgICAgIHYgPSB0LmZyb21fYWRkcmVzcyhhLmJ1ZmZlcl9pbmZvKClbMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodi52YWx1ZSwgYVswXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHYpIGlzIHQpCisgICAgICAgIGFbMF0gPSBGYWxzZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHYudmFsdWUsIGFbMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZSh2KSBpcyB0KQogCiAgICAgZGVmIHRlc3RfaW5pdChzZWxmKToKICAgICAgICAgIyBjX2ludCgpIGNhbiBiZSBpbml0aWFsaXplZCBmcm9tIFB5dGhvbidzIGludCwgYW5kIGNfaW50LgpAQCAtMjI3LDggKzIyOSw5IEBACiAgICAgICAgICAgICBpZiAoaGFzYXR0cih0LCAiX19jdHlwZV9sZV9fIikpOgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIHQuX19jdHlwZV9sZV9fLCBiaWdfaW50KQogCi0jIyAgICBkZWYgdGVzdF9wZXJmKHNlbGYpOgotIyMgICAgICAgIGNoZWNrX3BlcmYoKQorICAgIEB1bml0dGVzdC5za2lwKCd0ZXN0IGRpc2FibGVkJykKKyAgICBkZWYgdGVzdF9wZXJmKHNlbGYpOgorICAgICAgICBjaGVja19wZXJmKCkKIAogZnJvbSBjdHlwZXMgaW1wb3J0IF9TaW1wbGVDRGF0YQogY2xhc3MgY19pbnRfUyhfU2ltcGxlQ0RhdGEpOgpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3Rfb2JqZWN0cy5weSBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X29iamVjdHMucHkKaW5kZXggZjA3NWMyMC4uZWY3YjIwYiAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3Rfb2JqZWN0cy5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9vYmplY3RzLnB5CkBAIC01OSwxMiArNTksOSBAQAogaW1wb3J0IGN0eXBlcy50ZXN0LnRlc3Rfb2JqZWN0cwogCiBjbGFzcyBUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgaWYgc3lzLmhleHZlcnNpb24gPiAweDAyMDQwMDAwOgotICAgICAgICAjIFB5dGhvbiAyLjMgaGFzIG5vIEVMTElQU0lTIGZsYWcsIHNvIHdlIGRvbid0IHRlc3Qgd2l0aCB0aGlzCi0gICAgICAgICMgdmVyc2lvbjoKLSAgICAgICAgZGVmIHRlc3Qoc2VsZik6Ci0gICAgICAgICAgICBkb2N0ZXN0LnRlc3Rtb2QoY3R5cGVzLnRlc3QudGVzdF9vYmplY3RzKQorICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICBmYWlsdXJlcywgdGVzdHMgPSBkb2N0ZXN0LnRlc3Rtb2QoY3R5cGVzLnRlc3QudGVzdF9vYmplY3RzKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZhaWx1cmVzLCAnZG9jdGVzdHMgZmFpbGVkLCBzZWUgb3V0cHV0IGFib3ZlJykKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICBpZiBzeXMuaGV4dmVyc2lvbiA+IDB4MDIwNDAwMDA6Ci0gICAgICAgIGRvY3Rlc3QudGVzdG1vZChjdHlwZXMudGVzdC50ZXN0X29iamVjdHMpCisgICAgZG9jdGVzdC50ZXN0bW9kKGN0eXBlcy50ZXN0LnRlc3Rfb2JqZWN0cykKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3BhcmFtZXRlcnMucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9wYXJhbWV0ZXJzLnB5CmluZGV4IDEyYjViZDUuLmU1NmJjY2YgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3BhcmFtZXRlcnMucHkKKysrIGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfcGFyYW1ldGVycy5weQpAQCAtMSw0ICsxLDUgQEAKIGltcG9ydCB1bml0dGVzdCwgc3lzCitmcm9tIGN0eXBlcy50ZXN0IGltcG9ydCBuZWVkX3N5bWJvbAogCiBjbGFzcyBTaW1wbGVUeXBlc1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKIApAQCAtMzUsMTAgKzM2LDkgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDVk9JRFAuZnJvbV9wYXJhbSgiYWJjIiksICJhYmNhYmMiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKENDSEFSUC5mcm9tX3BhcmFtKCJhYmMiKSwgImFiY2FiY2FiY2FiYyIpCiAKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZnJvbSBjdHlwZXMgaW1wb3J0IGNfd2NoYXJfcAotICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgICAgICAgICByZXR1cm4KKyAgICBAbmVlZF9zeW1ib2woJ2Nfd2NoYXJfcCcpCisgICAgZGVmIHRlc3Rfc3ViY2xhc3Nlc19jX3djaGFyX3Aoc2VsZik6CisgICAgICAgIGZyb20gY3R5cGVzIGltcG9ydCBjX3djaGFyX3AKIAogICAgICAgICBjbGFzcyBDV0NIQVJQKGNfd2NoYXJfcCk6CiAgICAgICAgICAgICBkZWYgZnJvbV9wYXJhbShjbHMsIHZhbHVlKToKQEAgLTY2LDEzICs2Niw5IEBACiAgICAgICAgIGEgPSBjX2NoYXJfcChiIjEyMyIpCiAgICAgICAgIHNlbGYuYXNzZXJ0SXMoY19jaGFyX3AuZnJvbV9wYXJhbShhKSwgYSkKIAorICAgIEBuZWVkX3N5bWJvbCgnY193Y2hhcl9wJykKICAgICBkZWYgdGVzdF9jd19zdHJpbmdzKHNlbGYpOgotICAgICAgICBmcm9tIGN0eXBlcyBpbXBvcnQgYnlyZWYKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZnJvbSBjdHlwZXMgaW1wb3J0IGNfd2NoYXJfcAotICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6Ci0jIyAgICAgICAgICAgIHByaW50ICIoTm8gY193Y2hhcl9wKSIKLSAgICAgICAgICAgIHJldHVybgorICAgICAgICBmcm9tIGN0eXBlcyBpbXBvcnQgYnlyZWYsIGNfd2NoYXJfcAogCiAgICAgICAgIGNfd2NoYXJfcC5mcm9tX3BhcmFtKCIxMjMiKQogCkBAIC0xMzksOSArMTM1LDYgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBMUElOVC5mcm9tX3BhcmFtLCBjX2xvbmcqMykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBMUElOVC5mcm9tX3BhcmFtLCBjX3VpbnQqMykKIAotIyMgICAgZGVmIHRlc3RfcGVyZm9ybWFuY2Uoc2VsZik6Ci0jIyAgICAgICAgY2hlY2tfcGVyZigpCi0KICAgICBkZWYgdGVzdF9ub2N0eXBlc19hcmd0eXBlKHNlbGYpOgogICAgICAgICBpbXBvcnQgX2N0eXBlc190ZXN0CiAgICAgICAgIGZyb20gY3R5cGVzIGltcG9ydCBDRExMLCBjX3ZvaWRfcCwgQXJndW1lbnRFcnJvcgpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfcGVwMzExOC5weSBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3BlcDMxMTgucHkKaW5kZXggYWQxM2IwMS4uMzJmODAyYyAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfcGVwMzExOC5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9wZXAzMTE4LnB5CkBAIC05Niw2ICs5Niw5IEBACiBjbGFzcyBhVW5pb24oVW5pb24pOgogICAgIF9maWVsZHNfID0gWygiYSIsIGNfaW50KV0KIAorY2xhc3MgU3RydWN0V2l0aEFycmF5cyhTdHJ1Y3R1cmUpOgorICAgIF9maWVsZHNfID0gWygieCIsIGNfbG9uZyAqIDMgKiAyKSwgKCJ5IiwgUG9pbnQgKiA0KV0KKwogY2xhc3MgSW5jb21wbGV0ZShTdHJ1Y3R1cmUpOgogICAgIHBhc3MKIApAQCAtMTQ1LDEwICsxNDgsMTAgQEAKIAogICAgICMjIGFycmF5cyBhbmQgcG9pbnRlcnMKIAotICAgIChjX2RvdWJsZSAqIDQsICAgICAgICAgICAgICAiKDQpPGQiLCAgICAgICAgICAgICAgICAoNCwpLCAgICAgICAgICAgY19kb3VibGUpLAotICAgIChjX2Zsb2F0ICogNCAqIDMgKiAyLCAgICAgICAiKDIsMyw0KTxmIiwgICAgICAgICAgICAoMiwzLDQpLCAgICAgICAgY19mbG9hdCksCi0gICAgKFBPSU5URVIoY19zaG9ydCkgKiAyLCAgICAgICIoMikmPGgiLCAgICAgICAgICAgICAgICgyLCksICAgICAgICAgICBQT0lOVEVSKGNfc2hvcnQpKSwKLSAgICAoUE9JTlRFUihjX3Nob3J0KSAqIDIgKiAzLCAgIigzLDIpJjxoIiwgICAgICAgICAgICAgKDMsMiwpLCAgICAgICAgIFBPSU5URVIoY19zaG9ydCkpLAorICAgIChjX2RvdWJsZSAqIDQsICAgICAgICAgICAgICAiPGQiLCAgICAgICAgICAgICAgICAgICAoNCwpLCAgICAgICAgICAgY19kb3VibGUpLAorICAgIChjX2Zsb2F0ICogNCAqIDMgKiAyLCAgICAgICAiPGYiLCAgICAgICAgICAgICAgICAgICAoMiwzLDQpLCAgICAgICAgY19mbG9hdCksCisgICAgKFBPSU5URVIoY19zaG9ydCkgKiAyLCAgICAgICImPGgiLCAgICAgICAgICAgICAgICAgICgyLCksICAgICAgICAgICBQT0lOVEVSKGNfc2hvcnQpKSwKKyAgICAoUE9JTlRFUihjX3Nob3J0KSAqIDIgKiAzLCAgIiY8aCIsICAgICAgICAgICAgICAgICAgKDMsMiwpLCAgICAgICAgIFBPSU5URVIoY19zaG9ydCkpLAogICAgIChQT0lOVEVSKGNfc2hvcnQgKiAyKSwgICAgICAiJigyKTxoIiwgICAgICAgICAgICAgICAoKSwgICAgICAgICAgIFBPSU5URVIoY19zaG9ydCkpLAogCiAgICAgIyMgc3RydWN0dXJlcyBhbmQgdW5pb25zCkBAIC0xNjAsNiArMTYzLDkgQEAKICAgICAoRW1wdHlTdHJ1Y3QsICAgICAgICAgICAgICAgIlR7fSIsICAgICAgICAgICAgICAgICAgKCksICAgICAgICAgICBFbXB0eVN0cnVjdCksCiAgICAgIyB0aGUgcGVwIGRvZXMndCBzdXBwb3J0IHVuaW9ucwogICAgIChhVW5pb24sICAgICAgICAgICAgICAgICAgICAiQiIsICAgICAgICAgICAgICAgICAgICAoKSwgICAgICAgICAgIGFVbmlvbiksCisgICAgIyBzdHJ1Y3R1cmUgd2l0aCBzdWItYXJyYXlzCisgICAgKFN0cnVjdFdpdGhBcnJheXMsICAgICAgICAgICJUeygyLDMpPGw6eDooNClUezxsOng6PGw6eTp9Onk6fSIsICgpLCAgU3RydWN0V2l0aEFycmF5cyksCisgICAgKFN0cnVjdFdpdGhBcnJheXMgKiAzLCAgICAgICJUeygyLDMpPGw6eDooNClUezxsOng6PGw6eTp9Onk6fSIsICgzLCksICBTdHJ1Y3RXaXRoQXJyYXlzKSwKIAogICAgICMjIHBvaW50ZXIgdG8gaW5jb21wbGV0ZSBzdHJ1Y3R1cmUKICAgICAoSW5jb21wbGV0ZSwgICAgICAgICAgICAgICAgIkIiLCAgICAgICAgICAgICAgICAgICAgKCksICAgICAgICAgICBJbmNvbXBsZXRlKSwKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3BpY2tsaW5nLnB5IGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfcGlja2xpbmcucHkKaW5kZXggOGM5MTIyMi4uYzRhNzliOSAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfcGlja2xpbmcucHkKKysrIGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfcGlja2xpbmcucHkKQEAgLTE0LDkgKzE0LDkgQEAKIGNsYXNzIFkoWCk6CiAgICAgX2ZpZWxkc18gPSBbKCJzdHIiLCBjX2NoYXJfcCldCiAKLWNsYXNzIFBpY2tsZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorY2xhc3MgUGlja2xlVGVzdDoKICAgICBkZWYgZHVtcHMoc2VsZiwgaXRlbSk6Ci0gICAgICAgIHJldHVybiBwaWNrbGUuZHVtcHMoaXRlbSkKKyAgICAgICAgcmV0dXJuIHBpY2tsZS5kdW1wcyhpdGVtLCBzZWxmLnByb3RvKQogCiAgICAgZGVmIGxvYWRzKHNlbGYsIGl0ZW0pOgogICAgICAgICByZXR1cm4gcGlja2xlLmxvYWRzKGl0ZW0pCkBAIC02NywxNyArNjcsMTUgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGxhbWJkYTogc2VsZi5kdW1wcyhpdGVtKSkKIAogICAgIGRlZiB0ZXN0X3djaGFyKHNlbGYpOgotICAgICAgICBwaWNrbGUuZHVtcHMoY19jaGFyKGIieCIpKQorICAgICAgICBzZWxmLmR1bXBzKGNfY2hhcihiIngiKSkKICAgICAgICAgIyBJc3N1ZSA1MDQ5Ci0gICAgICAgIHBpY2tsZS5kdW1wcyhjX3djaGFyKCJ4IikpCisgICAgICAgIHNlbGYuZHVtcHMoY193Y2hhcigieCIpKQogCi1jbGFzcyBQaWNrbGVUZXN0XzEoUGlja2xlVGVzdCk6Ci0gICAgZGVmIGR1bXBzKHNlbGYsIGl0ZW0pOgotICAgICAgICByZXR1cm4gcGlja2xlLmR1bXBzKGl0ZW0sIDEpCi0KLWNsYXNzIFBpY2tsZVRlc3RfMihQaWNrbGVUZXN0KToKLSAgICBkZWYgZHVtcHMoc2VsZiwgaXRlbSk6Ci0gICAgICAgIHJldHVybiBwaWNrbGUuZHVtcHMoaXRlbSwgMikKK2ZvciBwcm90byBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgIG5hbWUgPSAnUGlja2xlVGVzdF8lcycgJSBwcm90bworICAgIGdsb2JhbHMoKVtuYW1lXSA9IHR5cGUobmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChQaWNrbGVUZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICB7J3Byb3RvJzogcHJvdG99KQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfcG9pbnRlcnMucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9wb2ludGVycy5weQppbmRleCBmOGVmMGFiLi42ZWVhNThmIDEwMDY0NAotLS0gYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9wb2ludGVycy5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9wb2ludGVycy5weQpAQCAtMTg4LDUgKzE4OCwyMyBAQAogICAgICAgICAgICAgbXRoID0gV0lORlVOQ1RZUEUoTm9uZSkoNDIsICJuYW1lIiwgKCksIE5vbmUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJvb2wobXRoKSwgVHJ1ZSkKIAorICAgIGRlZiB0ZXN0X3BvaW50ZXJfdHlwZV9uYW1lKHNlbGYpOgorICAgICAgICBMYXJnZU5hbWVkVHlwZSA9IHR5cGUoJ1QnICogMiAqKiAyNSwgKFN0cnVjdHVyZSwpLCB7fSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFBPSU5URVIoTGFyZ2VOYW1lZFR5cGUpKQorCisgICAgICAgICMgdG8gbm90IGxlYWsgcmVmZXJlbmNlcywgd2UgbXVzdCBjbGVhbiBfcG9pbnRlcl90eXBlX2NhY2hlCisgICAgICAgIGZyb20gY3R5cGVzIGltcG9ydCBfcG9pbnRlcl90eXBlX2NhY2hlCisgICAgICAgIGRlbCBfcG9pbnRlcl90eXBlX2NhY2hlW0xhcmdlTmFtZWRUeXBlXQorCisgICAgZGVmIHRlc3RfcG9pbnRlcl90eXBlX3N0cl9uYW1lKHNlbGYpOgorICAgICAgICBsYXJnZV9zdHJpbmcgPSAnVCcgKiAyICoqIDI1CisgICAgICAgIFAgPSBQT0lOVEVSKGxhcmdlX3N0cmluZykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFApCisKKyAgICAgICAgIyB0byBub3QgbGVhayByZWZlcmVuY2VzLCB3ZSBtdXN0IGNsZWFuIF9wb2ludGVyX3R5cGVfY2FjaGUKKyAgICAgICAgZnJvbSBjdHlwZXMgaW1wb3J0IF9wb2ludGVyX3R5cGVfY2FjaGUKKyAgICAgICAgZGVsIF9wb2ludGVyX3R5cGVfY2FjaGVbaWQoUCldCisKKwogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3Byb3RvdHlwZXMucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9wcm90b3R5cGVzLnB5CmluZGV4IDZlZjFiMWIuLjgxOGMxMTEgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3Byb3RvdHlwZXMucHkKKysrIGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfcHJvdG90eXBlcy5weQpAQCAtMSw0ICsxLDUgQEAKIGZyb20gY3R5cGVzIGltcG9ydCAqCitmcm9tIGN0eXBlcy50ZXN0IGltcG9ydCBuZWVkX3N5bWJvbAogaW1wb3J0IHVuaXR0ZXN0CiAKICMgSU1QT1JUQU5UIElORk86CkBAIC0xMzUsMTMgKzEzNiwxNCBAQAogICAgICAgICBmdW5jKHBvaW50ZXIoY19pbnQoKSkpCiAgICAgICAgIGZ1bmMoKGNfaW50ICogMykoKSkKIAotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBmdW5jLnJlc3R5cGUgPSBjX3djaGFyX3AKLSAgICAgICAgZXhjZXB0IE5hbWVFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgZnVuYyhjX3djaGFyX3AoTm9uZSkpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiMTIzIiwgZnVuYyhjX3djaGFyX3AoIjEyMyIpKSkKKyAgICBAbmVlZF9zeW1ib2woJ2Nfd2NoYXJfcCcpCisgICAgZGVmIHRlc3RfY192b2lkX3BfYXJnX3dpdGhfY193Y2hhcl9wKHNlbGYpOgorICAgICAgICBmdW5jID0gdGVzdGRsbC5fdGVzdGZ1bmNfcF9wCisgICAgICAgIGZ1bmMucmVzdHlwZSA9IGNfd2NoYXJfcAorICAgICAgICBmdW5jLmFyZ3R5cGVzID0gY192b2lkX3AsCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBmdW5jKGNfd2NoYXJfcChOb25lKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIjEyMyIsIGZ1bmMoY193Y2hhcl9wKCIxMjMiKSkpCiAKICAgICBkZWYgdGVzdF9pbnN0YW5jZShzZWxmKToKICAgICAgICAgZnVuYyA9IHRlc3RkbGwuX3Rlc3RmdW5jX3BfcApAQCAtMTU2LDUxICsxNTgsNDcgQEAKICAgICAgICAgZnVuYy5hcmd0eXBlcyA9IE5vbmUKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBmdW5jKFgoKSkpCiAKLXRyeToKLSAgICBjX3djaGFyCi1leGNlcHQgTmFtZUVycm9yOgotICAgIHBhc3MKLWVsc2U6Ci0gICAgY2xhc3MgV0NoYXJQb2ludGVyc1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKK0BuZWVkX3N5bWJvbCgnY193Y2hhcicpCitjbGFzcyBXQ2hhclBvaW50ZXJzVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogCi0gICAgICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgICAgIGZ1bmMgPSB0ZXN0ZGxsLl90ZXN0ZnVuY19wX3AKLSAgICAgICAgICAgIGZ1bmMucmVzdHlwZSA9IGNfaW50Ci0gICAgICAgICAgICBmdW5jLmFyZ3R5cGVzID0gTm9uZQorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgZnVuYyA9IHRlc3RkbGwuX3Rlc3RmdW5jX3BfcAorICAgICAgICBmdW5jLnJlc3R5cGUgPSBjX2ludAorICAgICAgICBmdW5jLmFyZ3R5cGVzID0gTm9uZQogCiAKLSAgICAgICAgZGVmIHRlc3RfUE9JTlRFUl9jX3djaGFyX2FyZyhzZWxmKToKLSAgICAgICAgICAgIGZ1bmMgPSB0ZXN0ZGxsLl90ZXN0ZnVuY19wX3AKLSAgICAgICAgICAgIGZ1bmMucmVzdHlwZSA9IGNfd2NoYXJfcAotICAgICAgICAgICAgZnVuYy5hcmd0eXBlcyA9IFBPSU5URVIoY193Y2hhciksCisgICAgZGVmIHRlc3RfUE9JTlRFUl9jX3djaGFyX2FyZyhzZWxmKToKKyAgICAgICAgZnVuYyA9IHRlc3RkbGwuX3Rlc3RmdW5jX3BfcAorICAgICAgICBmdW5jLnJlc3R5cGUgPSBjX3djaGFyX3AKKyAgICAgICAgZnVuYy5hcmd0eXBlcyA9IFBPSU5URVIoY193Y2hhciksCiAKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgZnVuYyhOb25lKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIjEyMyIsIGZ1bmMoIjEyMyIpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBmdW5jKGNfd2NoYXJfcChOb25lKSkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCIxMjMiLCBmdW5jKGNfd2NoYXJfcCgiMTIzIikpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIGZ1bmMoTm9uZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIjEyMyIsIGZ1bmMoIjEyMyIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIGZ1bmMoY193Y2hhcl9wKE5vbmUpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiMTIzIiwgZnVuYyhjX3djaGFyX3AoIjEyMyIpKSkKIAotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiMTIzIiwgZnVuYyhjX3didWZmZXIoIjEyMyIpKSkKLSAgICAgICAgICAgIGNhID0gY193Y2hhcigiYSIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJhIiwgZnVuYyhwb2ludGVyKGNhKSlbMF0pCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJhIiwgZnVuYyhieXJlZihjYSkpWzBdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCIxMjMiLCBmdW5jKGNfd2J1ZmZlcigiMTIzIikpKQorICAgICAgICBjYSA9IGNfd2NoYXIoImEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJhIiwgZnVuYyhwb2ludGVyKGNhKSlbMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoImEiLCBmdW5jKGJ5cmVmKGNhKSlbMF0pCiAKLSAgICAgICAgZGVmIHRlc3RfY193Y2hhcl9wX2FyZyhzZWxmKToKLSAgICAgICAgICAgIGZ1bmMgPSB0ZXN0ZGxsLl90ZXN0ZnVuY19wX3AKLSAgICAgICAgICAgIGZ1bmMucmVzdHlwZSA9IGNfd2NoYXJfcAotICAgICAgICAgICAgZnVuYy5hcmd0eXBlcyA9IGNfd2NoYXJfcCwKKyAgICBkZWYgdGVzdF9jX3djaGFyX3BfYXJnKHNlbGYpOgorICAgICAgICBmdW5jID0gdGVzdGRsbC5fdGVzdGZ1bmNfcF9wCisgICAgICAgIGZ1bmMucmVzdHlwZSA9IGNfd2NoYXJfcAorICAgICAgICBmdW5jLmFyZ3R5cGVzID0gY193Y2hhcl9wLAogCi0gICAgICAgICAgICBjX3djaGFyX3AuZnJvbV9wYXJhbSgiMTIzIikKKyAgICAgICAgY193Y2hhcl9wLmZyb21fcGFyYW0oIjEyMyIpCiAKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgZnVuYyhOb25lKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIjEyMyIsIGZ1bmMoIjEyMyIpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBmdW5jKGNfd2NoYXJfcChOb25lKSkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCIxMjMiLCBmdW5jKGNfd2NoYXJfcCgiMTIzIikpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIGZ1bmMoTm9uZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIjEyMyIsIGZ1bmMoIjEyMyIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIGZ1bmMoY193Y2hhcl9wKE5vbmUpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiMTIzIiwgZnVuYyhjX3djaGFyX3AoIjEyMyIpKSkKIAotICAgICAgICAgICAgIyBYWFggQ3VycmVudGx5LCB0aGVzZSByYWlzZSBUeXBlRXJyb3JzLCBhbHRob3VnaCB0aGV5IHNob3VsZG4ndDoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIjEyMyIsIGZ1bmMoY193YnVmZmVyKCIxMjMiKSkpCi0gICAgICAgICAgICBjYSA9IGNfd2NoYXIoImEiKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiYSIsIGZ1bmMocG9pbnRlcihjYSkpWzBdKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiYSIsIGZ1bmMoYnlyZWYoY2EpKVswXSkKKyAgICAgICAgIyBYWFggQ3VycmVudGx5LCB0aGVzZSByYWlzZSBUeXBlRXJyb3JzLCBhbHRob3VnaCB0aGV5IHNob3VsZG4ndDoKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiMTIzIiwgZnVuYyhjX3didWZmZXIoIjEyMyIpKSkKKyAgICAgICAgY2EgPSBjX3djaGFyKCJhIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiYSIsIGZ1bmMocG9pbnRlcihjYSkpWzBdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJhIiwgZnVuYyhieXJlZihjYSkpWzBdKQogCiBjbGFzcyBBcnJheVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0KHNlbGYpOgpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfcHl0aG9uX2FwaS5weSBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3B5dGhvbl9hcGkucHkKaW5kZXggNWViODgyYS4uOWMxMzc0NiAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfcHl0aG9uX2FwaS5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9weXRob25fYXBpLnB5CkBAIC0xLDcgKzEsNiBAQAogZnJvbSBjdHlwZXMgaW1wb3J0ICoKIGltcG9ydCB1bml0dGVzdCwgc3lzCiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKLWZyb20gY3R5cGVzLnRlc3QgaW1wb3J0IGlzX3Jlc291cmNlX2VuYWJsZWQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBUaGlzIHNlY3Rpb24gc2hvdWxkIGJlIG1vdmVkIGludG8gY3R5cGVzXF9faW5pdF9fLnB5LCB3aGVuIGl0J3MgcmVhZHkuCkBAIC0zOSwyNCArMzgsMjEgQEAKICAgICAgICAgZGVsIHB5b2IKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChncmMocyksIHJlZmNudCkKIAotICAgIGlmIGlzX3Jlc291cmNlX2VuYWJsZWQoInJlZmNvdW50Iik6Ci0gICAgICAgICMgVGhpcyB0ZXN0IGlzIHVucmVsaWFibGUsIGJlY2F1c2UgaXQgaXMgcG9zc2libGUgdGhhdCBjb2RlIGluCi0gICAgICAgICMgdW5pdHRlc3QgY2hhbmdlcyB0aGUgcmVmY291bnQgb2YgdGhlICc0MicgaW50ZWdlci4gIFNvLCBpdAotICAgICAgICAjIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQuCi0gICAgICAgIGRlZiB0ZXN0X1B5TG9uZ19Mb25nKHNlbGYpOgotICAgICAgICAgICAgcmVmNDIgPSBncmMoNDIpCi0gICAgICAgICAgICBweXRob25hcGkuUHlMb25nX0Zyb21Mb25nLnJlc3R5cGUgPSBweV9vYmplY3QKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHl0aG9uYXBpLlB5TG9uZ19Gcm9tTG9uZyg0MiksIDQyKQorICAgIEBzdXBwb3J0LnJlZmNvdW50X3Rlc3QKKyAgICBkZWYgdGVzdF9QeUxvbmdfTG9uZyhzZWxmKToKKyAgICAgICAgcmVmNDIgPSBncmMoNDIpCisgICAgICAgIHB5dGhvbmFwaS5QeUxvbmdfRnJvbUxvbmcucmVzdHlwZSA9IHB5X29iamVjdAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHB5dGhvbmFwaS5QeUxvbmdfRnJvbUxvbmcoNDIpLCA0MikKIAotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChncmMoNDIpLCByZWY0MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChncmMoNDIpLCByZWY0MikKIAotICAgICAgICAgICAgcHl0aG9uYXBpLlB5TG9uZ19Bc0xvbmcuYXJndHlwZXMgPSAocHlfb2JqZWN0LCkKLSAgICAgICAgICAgIHB5dGhvbmFwaS5QeUxvbmdfQXNMb25nLnJlc3R5cGUgPSBjX2xvbmcKKyAgICAgICAgcHl0aG9uYXBpLlB5TG9uZ19Bc0xvbmcuYXJndHlwZXMgPSAocHlfb2JqZWN0LCkKKyAgICAgICAgcHl0aG9uYXBpLlB5TG9uZ19Bc0xvbmcucmVzdHlwZSA9IGNfbG9uZwogCi0gICAgICAgICAgICByZXMgPSBweXRob25hcGkuUHlMb25nX0FzTG9uZyg0MikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ3JjKHJlcyksIHJlZjQyICsgMSkKLSAgICAgICAgICAgIGRlbCByZXMKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ3JjKDQyKSwgcmVmNDIpCisgICAgICAgIHJlcyA9IHB5dGhvbmFwaS5QeUxvbmdfQXNMb25nKDQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdyYyhyZXMpLCByZWY0MiArIDEpCisgICAgICAgIGRlbCByZXMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChncmMoNDIpLCByZWY0MikKIAogICAgIEBzdXBwb3J0LnJlZmNvdW50X3Rlc3QKICAgICBkZWYgdGVzdF9QeU9ial9Gcm9tUHRyKHNlbGYpOgpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfcmFuZG9tX3RoaW5ncy5weSBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3JhbmRvbV90aGluZ3MucHkKaW5kZXggNTE1YWNmNS4uZWU1YjIxMiAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfcmFuZG9tX3RoaW5ncy5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9yYW5kb21fdGhpbmdzLnB5CkBAIC01LDIzICs1LDIyIEBACiAgICAgNDIgLyBhcmcKICAgICByYWlzZSBWYWx1ZUVycm9yKGFyZykKIAotaWYgc3lzLnBsYXRmb3JtID09ICJ3aW4zMiI6CitAdW5pdHRlc3Quc2tpcFVubGVzcyhzeXMucGxhdGZvcm0gPT0gIndpbjMyIiwgJ1dpbmRvd3Mtc3BlY2lmaWMgdGVzdCcpCitjbGFzcyBjYWxsX2Z1bmN0aW9uX1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIF9jdHlwZXMuY2FsbF9mdW5jdGlvbiBpcyBkZXByZWNhdGVkIGFuZCBwcml2YXRlLCBidXQgdXNlZCBieQorICAgICMgR2FyeSBCaXNocCdzIHJlYWRsaW5lIG1vZHVsZS4gIElmIHdlIGhhdmUgaXQsIHdlIG11c3QgdGVzdCBpdCBhcyB3ZWxsLgogCi0gICAgY2xhc3MgY2FsbF9mdW5jdGlvbl9UZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgICAgICMgX2N0eXBlcy5jYWxsX2Z1bmN0aW9uIGlzIGRlcHJlY2F0ZWQgYW5kIHByaXZhdGUsIGJ1dCB1c2VkIGJ5Ci0gICAgICAgICMgR2FyeSBCaXNocCdzIHJlYWRsaW5lIG1vZHVsZS4gIElmIHdlIGhhdmUgaXQsIHdlIG11c3QgdGVzdCBpdCBhcyB3ZWxsLgorICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICBmcm9tIF9jdHlwZXMgaW1wb3J0IGNhbGxfZnVuY3Rpb24KKyAgICAgICAgd2luZGxsLmtlcm5lbDMyLkxvYWRMaWJyYXJ5QS5yZXN0eXBlID0gY192b2lkX3AKKyAgICAgICAgd2luZGxsLmtlcm5lbDMyLkdldFByb2NBZGRyZXNzLmFyZ3R5cGVzID0gY192b2lkX3AsIGNfY2hhcl9wCisgICAgICAgIHdpbmRsbC5rZXJuZWwzMi5HZXRQcm9jQWRkcmVzcy5yZXN0eXBlID0gY192b2lkX3AKIAotICAgICAgICBkZWYgdGVzdChzZWxmKToKLSAgICAgICAgICAgIGZyb20gX2N0eXBlcyBpbXBvcnQgY2FsbF9mdW5jdGlvbgotICAgICAgICAgICAgd2luZGxsLmtlcm5lbDMyLkxvYWRMaWJyYXJ5QS5yZXN0eXBlID0gY192b2lkX3AKLSAgICAgICAgICAgIHdpbmRsbC5rZXJuZWwzMi5HZXRQcm9jQWRkcmVzcy5hcmd0eXBlcyA9IGNfdm9pZF9wLCBjX2NoYXJfcAotICAgICAgICAgICAgd2luZGxsLmtlcm5lbDMyLkdldFByb2NBZGRyZXNzLnJlc3R5cGUgPSBjX3ZvaWRfcAorICAgICAgICBoZGxsID0gd2luZGxsLmtlcm5lbDMyLkxvYWRMaWJyYXJ5QShiImtlcm5lbDMyIikKKyAgICAgICAgZnVuY2FkZHIgPSB3aW5kbGwua2VybmVsMzIuR2V0UHJvY0FkZHJlc3MoaGRsbCwgYiJHZXRNb2R1bGVIYW5kbGVBIikKIAotICAgICAgICAgICAgaGRsbCA9IHdpbmRsbC5rZXJuZWwzMi5Mb2FkTGlicmFyeUEoYiJrZXJuZWwzMiIpCi0gICAgICAgICAgICBmdW5jYWRkciA9IHdpbmRsbC5rZXJuZWwzMi5HZXRQcm9jQWRkcmVzcyhoZGxsLCBiIkdldE1vZHVsZUhhbmRsZUEiKQotCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhbGxfZnVuY3Rpb24oZnVuY2FkZHIsIChOb25lLCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZGxsLmtlcm5lbDMyLkdldE1vZHVsZUhhbmRsZUEoTm9uZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FsbF9mdW5jdGlvbihmdW5jYWRkciwgKE5vbmUsKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRsbC5rZXJuZWwzMi5HZXRNb2R1bGVIYW5kbGVBKE5vbmUpKQogCiBjbGFzcyBDYWxsYmFja1RyYWNiYWNrVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICMgV2hlbiBhbiBleGNlcHRpb24gaXMgcmFpc2VkIGluIGEgY3R5cGVzIGNhbGxiYWNrIGZ1bmN0aW9uLCB0aGUgQwpAQCAtMzEsNyArMzAsNyBAQAogICAgICMgdmFsdWUgaXMgcHJpbnRlZCBjb3JyZWN0bHkuCiAgICAgIwogICAgICMgQ2hhbmdlZCBpbiAwLjkuMzogTm8gbG9uZ2VyIGlzICcoaW4gY2FsbGJhY2spJyBwcmVwZW5kZWQgdG8gdGhlCi0gICAgIyBlcnJvciBtZXNzYWdlIC0gaW5zdGVhZCBhIGFkZGl0aW9uYWwgZnJhbWUgZm9yIHRoZSBDIGNvZGUgaXMKKyAgICAjIGVycm9yIG1lc3NhZ2UgLSBpbnN0ZWFkIGFuIGFkZGl0aW9uYWwgZnJhbWUgZm9yIHRoZSBDIGNvZGUgaXMKICAgICAjIGNyZWF0ZWQsIHRoZW4gYSBmdWxsIHRyYWNlYmFjayBwcmludGVkLiAgV2hlbiBTeXN0ZW1FeGl0IGlzCiAgICAgIyByYWlzZWQgaW4gYSBjYWxsYmFjayBmdW5jdGlvbiwgdGhlIGludGVycHJldGVyIGV4aXRzLgogCmRpZmYgLS1naXQgYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9zbGljaW5nLnB5IGIvTGliL2N0eXBlcy90ZXN0L3Rlc3Rfc2xpY2luZy5weQppbmRleCA4MmZlZTk2Li4yNDBkYzBjIDEwMDY0NAotLS0gYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9zbGljaW5nLnB5CisrKyBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3NsaWNpbmcucHkKQEAgLTEsNSArMSw2IEBACiBpbXBvcnQgdW5pdHRlc3QKIGZyb20gY3R5cGVzIGltcG9ydCAqCitmcm9tIGN0eXBlcy50ZXN0IGltcG9ydCBuZWVkX3N5bWJvbAogCiBpbXBvcnQgX2N0eXBlc190ZXN0CiAKQEAgLTEyNSw0NCArMTI2LDQwIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocFsyOjU6LTNdLCBzWzI6NTotM10pCiAKIAotICAgIHRyeToKLSAgICAgICAgY193Y2hhcgotICAgIGV4Y2VwdCBOYW1lRXJyb3I6Ci0gICAgICAgIHBhc3MKLSAgICBlbHNlOgotICAgICAgICBkZWYgdGVzdF93Y2hhcl9wdHIoc2VsZik6Ci0gICAgICAgICAgICBzID0gImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6XDAiCisgICAgQG5lZWRfc3ltYm9sKCdjX3djaGFyJykKKyAgICBkZWYgdGVzdF93Y2hhcl9wdHIoc2VsZik6CisgICAgICAgIHMgPSAiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpcMCIKIAotICAgICAgICAgICAgZGxsID0gQ0RMTChfY3R5cGVzX3Rlc3QuX19maWxlX18pCi0gICAgICAgICAgICBkbGwubXlfd2NzZHVwLnJlc3R5cGUgPSBQT0lOVEVSKGNfd2NoYXIpCi0gICAgICAgICAgICBkbGwubXlfd2NzZHVwLmFyZ3R5cGVzID0gUE9JTlRFUihjX3djaGFyKSwKLSAgICAgICAgICAgIGRsbC5teV9mcmVlLnJlc3R5cGUgPSBOb25lCi0gICAgICAgICAgICByZXMgPSBkbGwubXlfd2NzZHVwKHMpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc1s6bGVuKHMpXSwgcykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzWzpsZW4ocyk6XSwgcykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzW2xlbihzKS0xOi0xOi0xXSwgc1s6Oi0xXSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzW2xlbihzKS0xOjU6LTddLCBzWzo1Oi03XSkKKyAgICAgICAgZGxsID0gQ0RMTChfY3R5cGVzX3Rlc3QuX19maWxlX18pCisgICAgICAgIGRsbC5teV93Y3NkdXAucmVzdHlwZSA9IFBPSU5URVIoY193Y2hhcikKKyAgICAgICAgZGxsLm15X3djc2R1cC5hcmd0eXBlcyA9IFBPSU5URVIoY193Y2hhciksCisgICAgICAgIGRsbC5teV9mcmVlLnJlc3R5cGUgPSBOb25lCisgICAgICAgIHJlcyA9IGRsbC5teV93Y3NkdXAocykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNbOmxlbihzKV0sIHMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzWzpsZW4ocyk6XSwgcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNbbGVuKHMpLTE6LTE6LTFdLCBzWzo6LTFdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc1tsZW4ocyktMTo1Oi03XSwgc1s6NTotN10pCiAKLSAgICAgICAgICAgIGltcG9ydCBvcGVyYXRvcgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5zZXRpdGVtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzLCBzbGljZSgwLCA1KSwgImFiY2RlIikKLSAgICAgICAgICAgIGRsbC5teV9mcmVlKHJlcykKKyAgICAgICAgaW1wb3J0IG9wZXJhdG9yCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3Iuc2V0aXRlbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzLCBzbGljZSgwLCA1KSwgImFiY2RlIikKKyAgICAgICAgZGxsLm15X2ZyZWUocmVzKQogCi0gICAgICAgICAgICBpZiBzaXplb2YoY193Y2hhcikgPT0gc2l6ZW9mKGNfc2hvcnQpOgotICAgICAgICAgICAgICAgIGRsbC5teV93Y3NkdXAucmVzdHlwZSA9IFBPSU5URVIoY19zaG9ydCkKLSAgICAgICAgICAgIGVsaWYgc2l6ZW9mKGNfd2NoYXIpID09IHNpemVvZihjX2ludCk6Ci0gICAgICAgICAgICAgICAgZGxsLm15X3djc2R1cC5yZXN0eXBlID0gUE9JTlRFUihjX2ludCkKLSAgICAgICAgICAgIGVsaWYgc2l6ZW9mKGNfd2NoYXIpID09IHNpemVvZihjX2xvbmcpOgotICAgICAgICAgICAgICAgIGRsbC5teV93Y3NkdXAucmVzdHlwZSA9IFBPSU5URVIoY19sb25nKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgICAgIHJlcyA9IGRsbC5teV93Y3NkdXAocykKLSAgICAgICAgICAgIHRtcGwgPSBsaXN0KHJhbmdlKG9yZCgiYSIpLCBvcmQoInoiKSsxKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzWzpsZW4ocyktMV0sIHRtcGwpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc1s6bGVuKHMpLTE6XSwgdG1wbCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzW2xlbihzKS0yOi0xOi0xXSwgdG1wbFs6Oi0xXSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzW2xlbihzKS0yOjU6LTddLCB0bXBsWzo1Oi03XSkKLSAgICAgICAgICAgIGRsbC5teV9mcmVlKHJlcykKKyAgICAgICAgaWYgc2l6ZW9mKGNfd2NoYXIpID09IHNpemVvZihjX3Nob3J0KToKKyAgICAgICAgICAgIGRsbC5teV93Y3NkdXAucmVzdHlwZSA9IFBPSU5URVIoY19zaG9ydCkKKyAgICAgICAgZWxpZiBzaXplb2YoY193Y2hhcikgPT0gc2l6ZW9mKGNfaW50KToKKyAgICAgICAgICAgIGRsbC5teV93Y3NkdXAucmVzdHlwZSA9IFBPSU5URVIoY19pbnQpCisgICAgICAgIGVsaWYgc2l6ZW9mKGNfd2NoYXIpID09IHNpemVvZihjX2xvbmcpOgorICAgICAgICAgICAgZGxsLm15X3djc2R1cC5yZXN0eXBlID0gUE9JTlRFUihjX2xvbmcpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCdQb2ludGVycyB0byBjX3djaGFyIGFyZSBub3Qgc3VwcG9ydGVkJykKKyAgICAgICAgcmVzID0gZGxsLm15X3djc2R1cChzKQorICAgICAgICB0bXBsID0gbGlzdChyYW5nZShvcmQoImEiKSwgb3JkKCJ6IikrMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzWzpsZW4ocyktMV0sIHRtcGwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzWzpsZW4ocyktMTpdLCB0bXBsKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc1tsZW4ocyktMjotMTotMV0sIHRtcGxbOjotMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzW2xlbihzKS0yOjU6LTddLCB0bXBsWzo1Oi03XSkKKyAgICAgICAgZGxsLm15X2ZyZWUocmVzKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3N0cmluZ3MucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9zdHJpbmdzLnB5CmluZGV4IDlkYzJhMjkuLmM3YmZiZGEgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3N0cmluZ3MucHkKKysrIGIvTGliL2N0eXBlcy90ZXN0L3Rlc3Rfc3RyaW5ncy5weQpAQCAtMSw1ICsxLDYgQEAKIGltcG9ydCB1bml0dGVzdAogZnJvbSBjdHlwZXMgaW1wb3J0ICoKK2Zyb20gY3R5cGVzLnRlc3QgaW1wb3J0IG5lZWRfc3ltYm9sCiAKIGNsYXNzIFN0cmluZ0FycmF5VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0KHNlbGYpOgpAQCAtNTMsMzYgKzU0LDMzIEBACiAjIyAgICAgICAgcHJpbnQgQlVGLmZyb21fcGFyYW0oY19jaGFyX3AoInB5dGhvbiIpKQogIyMgICAgICAgIHByaW50IEJVRi5mcm9tX3BhcmFtKEJVRigqInB5dGgiKSkKIAotdHJ5OgotICAgIGNfd2NoYXIKLWV4Y2VwdCBOYW1lRXJyb3I6Ci0gICAgcGFzcwotZWxzZToKLSAgICBjbGFzcyBXU3RyaW5nQXJyYXlUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgICAgIGRlZiB0ZXN0KHNlbGYpOgotICAgICAgICAgICAgQlVGID0gY193Y2hhciAqIDQKK0BuZWVkX3N5bWJvbCgnY193Y2hhcicpCitjbGFzcyBXU3RyaW5nQXJyYXlUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgIEJVRiA9IGNfd2NoYXIgKiA0CiAKLSAgICAgICAgICAgIGJ1ZiA9IEJVRigiYSIsICJiIiwgImMiKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWYudmFsdWUsICJhYmMiKQorICAgICAgICBidWYgPSBCVUYoImEiLCAiYiIsICJjIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWYudmFsdWUsICJhYmMiKQogCi0gICAgICAgICAgICBidWYudmFsdWUgPSAiQUJDRCIKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmLnZhbHVlLCAiQUJDRCIpCisgICAgICAgIGJ1Zi52YWx1ZSA9ICJBQkNEIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1Zi52YWx1ZSwgIkFCQ0QiKQogCi0gICAgICAgICAgICBidWYudmFsdWUgPSAieCIKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmLnZhbHVlLCAieCIpCisgICAgICAgIGJ1Zi52YWx1ZSA9ICJ4IgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1Zi52YWx1ZSwgIngiKQogCi0gICAgICAgICAgICBidWZbMV0gPSAiWiIKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmLnZhbHVlLCAieFpDRCIpCisgICAgICAgIGJ1ZlsxXSA9ICJaIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1Zi52YWx1ZSwgInhaQ0QiKQogCi0gICAgICAgIEB1bml0dGVzdC5za2lwSWYoc2l6ZW9mKGNfd2NoYXIpIDwgNCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAic2l6ZW9mKHdjaGFyX3QpIGlzIHNtYWxsZXIgdGhhbiA0IGJ5dGVzIikKLSAgICAgICAgZGVmIHRlc3Rfbm9uYm1wKHNlbGYpOgotICAgICAgICAgICAgdSA9IGNocigweDEwZmZmZikKLSAgICAgICAgICAgIHcgPSBjX3djaGFyKHUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHcudmFsdWUsIHUpCisgICAgQHVuaXR0ZXN0LnNraXBJZihzaXplb2YoY193Y2hhcikgPCA0LAorICAgICAgICAgICAgICAgICAgICAgInNpemVvZih3Y2hhcl90KSBpcyBzbWFsbGVyIHRoYW4gNCBieXRlcyIpCisgICAgZGVmIHRlc3Rfbm9uYm1wKHNlbGYpOgorICAgICAgICB1ID0gY2hyKDB4MTBmZmZmKQorICAgICAgICB3ID0gY193Y2hhcih1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHcudmFsdWUsIHUpCiAKIGNsYXNzIFN0cmluZ1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBkZWYgWFhfdGVzdF9iYXNpY19zdHJpbmdzKHNlbGYpOgorICAgIEB1bml0dGVzdC5za2lwKCd0ZXN0IGRpc2FibGVkJykKKyAgICBkZWYgdGVzdF9iYXNpY19zdHJpbmdzKHNlbGYpOgogICAgICAgICBjcyA9IGNfc3RyaW5nKCJhYmNkZWYiKQogCiAgICAgICAgICMgQ2Fubm90IGNhbGwgbGVuIG9uIGEgY19zdHJpbmcgYW55IGxvbmdlcgpAQCAtMTA4LDcgKzEwNiw4IEBACiAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjX3N0cmluZywgIjEyMyIpCiAKLSAgICBkZWYgWFhfdGVzdF9zaXplZF9zdHJpbmdzKHNlbGYpOgorICAgIEB1bml0dGVzdC5za2lwKCd0ZXN0IGRpc2FibGVkJykKKyAgICBkZWYgdGVzdF9zaXplZF9zdHJpbmdzKHNlbGYpOgogCiAgICAgICAgICMgTmV3IGluIHJlbGVhc2VzIGxhdGVyIHRoYW4gMC40LjA6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY19zdHJpbmcsIE5vbmUpCkBAIC0xMjUsNyArMTI0LDggQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjX3N0cmluZygyKS5yYXdbLTFdLCAiXDAwMCIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGNfc3RyaW5nKDIpLnJhdyksIDIpCiAKLSAgICBkZWYgWFhfdGVzdF9pbml0aWFsaXplZF9zdHJpbmdzKHNlbGYpOgorICAgIEB1bml0dGVzdC5za2lwKCd0ZXN0IGRpc2FibGVkJykKKyAgICBkZWYgdGVzdF9pbml0aWFsaXplZF9zdHJpbmdzKHNlbGYpOgogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY19zdHJpbmcoImFiIiwgNCkucmF3WzoyXSwgImFiIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjX3N0cmluZygiYWIiLCA0KS5yYXdbOjI6XSwgImFiIikKQEAgLTEzNCw3ICsxMzQsOCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNfc3RyaW5nKCJhYiIsIDQpLnJhd1stMV0sICJcMDAwIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjX3N0cmluZygiYWIiLCAyKS5yYXcsICJhXDAwMCIpCiAKLSAgICBkZWYgWFhfdGVzdF90b29sb25nKHNlbGYpOgorICAgIEB1bml0dGVzdC5za2lwKCd0ZXN0IGRpc2FibGVkJykKKyAgICBkZWYgdGVzdF90b29sb25nKHNlbGYpOgogICAgICAgICBjcyA9IGNfc3RyaW5nKCJhYmNkZWYiKQogICAgICAgICAjIE11Y2ggdG9vIGxvbmcgc3RyaW5nOgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZXRhdHRyLCBjcywgInZhbHVlIiwgIjEyMzQ1Njc4OTAxMjM0NSIpCkBAIC0xNDIsNTQgKzE0Myw1MyBAQAogICAgICAgICAjIE9uZSBjaGFyIHRvbyBsb25nIHZhbHVlczoKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2V0YXR0ciwgY3MsICJ2YWx1ZSIsICIxMjM0NTY3IikKIAotIyMgICAgZGVmIHRlc3RfcGVyZihzZWxmKToKLSMjICAgICAgICBjaGVja19wZXJmKCkKKyAgICBAdW5pdHRlc3Quc2tpcCgndGVzdCBkaXNhYmxlZCcpCisgICAgZGVmIHRlc3RfcGVyZihzZWxmKToKKyAgICAgICAgY2hlY2tfcGVyZigpCiAKLXRyeToKLSAgICBjX3djaGFyCi1leGNlcHQgTmFtZUVycm9yOgotICAgIHBhc3MKLWVsc2U6Ci0gICAgY2xhc3MgV1N0cmluZ1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAgICAgZGVmIHRlc3Rfd2NoYXIoc2VsZik6Ci0gICAgICAgICAgICBjX3djaGFyKCJ4IikKLSAgICAgICAgICAgIHJlcHIoYnlyZWYoY193Y2hhcigieCIpKSkKLSAgICAgICAgICAgIGNfd2NoYXIoIngiKQorQG5lZWRfc3ltYm9sKCdjX3djaGFyJykKK2NsYXNzIFdTdHJpbmdUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3Rfd2NoYXIoc2VsZik6CisgICAgICAgIGNfd2NoYXIoIngiKQorICAgICAgICByZXByKGJ5cmVmKGNfd2NoYXIoIngiKSkpCisgICAgICAgIGNfd2NoYXIoIngiKQogCiAKLSAgICAgICAgZGVmIFhfdGVzdF9iYXNpY193c3RyaW5ncyhzZWxmKToKLSAgICAgICAgICAgIGNzID0gY193c3RyaW5nKCJhYmNkZWYiKQorICAgIEB1bml0dGVzdC5za2lwKCd0ZXN0IGRpc2FibGVkJykKKyAgICBkZWYgdGVzdF9iYXNpY193c3RyaW5ncyhzZWxmKToKKyAgICAgICAgY3MgPSBjX3dzdHJpbmcoImFiY2RlZiIpCiAKLSAgICAgICAgICAgICMgWFhYIFRoaXMgYmVoYXZpb3VyIGlzIGFib3V0IHRvIGNoYW5nZToKLSAgICAgICAgICAgICMgbGVuIHJldHVybnMgdGhlIHNpemUgb2YgdGhlIGludGVybmFsIGJ1ZmZlciBpbiBieXRlcy4KLSAgICAgICAgICAgICMgVGhpcyBpbmNsdWRlcyB0aGUgdGVybWluYXRpbmcgTlVMIGNoYXJhY3Rlci4KLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZW9mKGNzKSwgMTQpCisgICAgICAgICMgWFhYIFRoaXMgYmVoYXZpb3VyIGlzIGFib3V0IHRvIGNoYW5nZToKKyAgICAgICAgIyBsZW4gcmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgaW50ZXJuYWwgYnVmZmVyIGluIGJ5dGVzLgorICAgICAgICAjIFRoaXMgaW5jbHVkZXMgdGhlIHRlcm1pbmF0aW5nIE5VTCBjaGFyYWN0ZXIuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZW9mKGNzKSwgMTQpCiAKLSAgICAgICAgICAgICMgVGhlIHZhbHVlIHByb3BlcnR5IGlzIHRoZSBzdHJpbmcgdXAgdG8gdGhlIGZpcnN0IHRlcm1pbmF0aW5nIE5VTC4KLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3MudmFsdWUsICJhYmNkZWYiKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjX3dzdHJpbmcoImFiY1wwMDBkZWYiKS52YWx1ZSwgImFiYyIpCisgICAgICAgICMgVGhlIHZhbHVlIHByb3BlcnR5IGlzIHRoZSBzdHJpbmcgdXAgdG8gdGhlIGZpcnN0IHRlcm1pbmF0aW5nIE5VTC4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjcy52YWx1ZSwgImFiY2RlZiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY193c3RyaW5nKCJhYmNcMDAwZGVmIikudmFsdWUsICJhYmMiKQogCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNfd3N0cmluZygiYWJjXDAwMGRlZiIpLnZhbHVlLCAiYWJjIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjX3dzdHJpbmcoImFiY1wwMDBkZWYiKS52YWx1ZSwgImFiYyIpCiAKLSAgICAgICAgICAgICMgVGhlIHJhdyBwcm9wZXJ0eSBpcyB0aGUgdG90YWwgYnVmZmVyIGNvbnRlbnRzOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjcy5yYXcsICJhYmNkZWZcMDAwIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY193c3RyaW5nKCJhYmNcMDAwZGVmIikucmF3LCAiYWJjXDAwMGRlZlwwMDAiKQorICAgICAgICAjIFRoZSByYXcgcHJvcGVydHkgaXMgdGhlIHRvdGFsIGJ1ZmZlciBjb250ZW50czoKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjcy5yYXcsICJhYmNkZWZcMDAwIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjX3dzdHJpbmcoImFiY1wwMDBkZWYiKS5yYXcsICJhYmNcMDAwZGVmXDAwMCIpCiAKLSAgICAgICAgICAgICMgV2UgY2FuIGNoYW5nZSB0aGUgdmFsdWU6Ci0gICAgICAgICAgICBjcy52YWx1ZSA9ICJhYiIKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3MudmFsdWUsICJhYiIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNzLnJhdywgImFiXDAwMFwwMDBcMDAwXDAwMFwwMDAiKQorICAgICAgICAjIFdlIGNhbiBjaGFuZ2UgdGhlIHZhbHVlOgorICAgICAgICBjcy52YWx1ZSA9ICJhYiIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjcy52YWx1ZSwgImFiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjcy5yYXcsICJhYlwwMDBcMDAwXDAwMFwwMDBcMDAwIikKIAotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjX3dzdHJpbmcsICIxMjMiKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY193c3RyaW5nLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNfd3N0cmluZywgIjEyMyIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNfd3N0cmluZywgMCkKIAotICAgICAgICBkZWYgWF90ZXN0X3Rvb2xvbmcoc2VsZik6Ci0gICAgICAgICAgICBjcyA9IGNfd3N0cmluZygiYWJjZGVmIikKLSAgICAgICAgICAgICMgTXVjaCB0b28gbG9uZyBzdHJpbmc6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZXRhdHRyLCBjcywgInZhbHVlIiwgIjEyMzQ1Njc4OTAxMjM0NSIpCisgICAgQHVuaXR0ZXN0LnNraXAoJ3Rlc3QgZGlzYWJsZWQnKQorICAgIGRlZiB0ZXN0X3Rvb2xvbmcoc2VsZik6CisgICAgICAgIGNzID0gY193c3RyaW5nKCJhYmNkZWYiKQorICAgICAgICAjIE11Y2ggdG9vIGxvbmcgc3RyaW5nOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZXRhdHRyLCBjcywgInZhbHVlIiwgIjEyMzQ1Njc4OTAxMjM0NSIpCiAKLSAgICAgICAgICAgICMgT25lIGNoYXIgdG9vIGxvbmcgdmFsdWVzOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2V0YXR0ciwgY3MsICJ2YWx1ZSIsICIxMjM0NTY3IikKKyAgICAgICAgIyBPbmUgY2hhciB0b28gbG9uZyB2YWx1ZXM6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNldGF0dHIsIGNzLCAidmFsdWUiLCAiMTIzNDU2NyIpCiAKIAogZGVmIHJ1bl90ZXN0KHJlcCwgbXNnLCBmdW5jLCBhcmcpOgpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3Rfc3RydWN0dXJlcy5weSBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3N0cnVjdHVyZXMucHkKaW5kZXggODc2MTNhZC4uODRkNDU2YyAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3Rfc3RydWN0dXJlcy5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9zdHJ1Y3R1cmVzLnB5CkBAIC0xLDUgKzEsNiBAQAogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIGN0eXBlcyBpbXBvcnQgKgorZnJvbSBjdHlwZXMudGVzdCBpbXBvcnQgbmVlZF9zeW1ib2wKIGZyb20gc3RydWN0IGltcG9ydCBjYWxjc2l6ZQogaW1wb3J0IF90ZXN0Y2FwaQogCkBAIC0yOTEsMTIgKzI5Miw4IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5waG9uZS5udW1iZXIsIGIiNTY3OCIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5hZ2UsIDUpCiAKKyAgICBAbmVlZF9zeW1ib2woJ2Nfd2NoYXInKQogICAgIGRlZiB0ZXN0X3N0cnVjdHVyZXNfd2l0aF93Y2hhcihzZWxmKToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgY193Y2hhcgotICAgICAgICBleGNlcHQgTmFtZUVycm9yOgotICAgICAgICAgICAgcmV0dXJuICMgbm8gdW5pY29kZQotCiAgICAgICAgIGNsYXNzIFBlcnNvblcoU3RydWN0dXJlKToKICAgICAgICAgICAgIF9maWVsZHNfID0gWygibmFtZSIsIGNfd2NoYXIgKiAxMiksCiAgICAgICAgICAgICAgICAgICAgICAgICAoImFnZSIsIGNfaW50KV0KQEAgLTMyNSw3ICszMjIsNyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNscywgUnVudGltZUVycm9yKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIihQaG9uZSkgPGNsYXNzICdUeXBlRXJyb3InPjogIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgc3RyaW5nLCBpbnQgZm91bmQiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgYnl0ZXMsIGludCBmb3VuZCIpCiAKICAgICAgICAgY2xzLCBtc2cgPSBzZWxmLmdldF9leGNlcHQoUGVyc29uLCBiIlNvbWVvbmUiLCAoYiJhIiwgYiJiIiwgYiJjIikpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2xzLCBSdW50aW1lRXJyb3IpCkBAIC0zNTQsMTQgKzM1MSwxNCBAQAogICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGRldGFpbDoKICAgICAgICAgICAgIHJldHVybiBkZXRhaWwuX19jbGFzc19fLCBzdHIoZGV0YWlsKQogCi0KLSMjICAgIGRlZiB0ZXN0X3N1YmNsYXNzX2NyZWF0aW9uKHNlbGYpOgotIyMgICAgICAgIG1ldGEgPSB0eXBlKFN0cnVjdHVyZSkKLSMjICAgICAgICAjIHNhbWUgYXMgJ2NsYXNzIFgoU3RydWN0dXJlKTogcGFzcycKLSMjICAgICAgICAjIGZhaWxzLCBzaW5jZSB3ZSBuZWVkIGVpdGhlciBhIF9maWVsZHNfIG9yIGEgX2Fic3RyYWN0XyBhdHRyaWJ1dGUKLSMjICAgICAgICBjbHMsIG1zZyA9IHNlbGYuZ2V0X2V4Y2VwdChtZXRhLCAiWCIsIChTdHJ1Y3R1cmUsKSwge30pCi0jIyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoY2xzLCBtc2cpLAotIyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChBdHRyaWJ1dGVFcnJvciwgImNsYXNzIG11c3QgZGVmaW5lIGEgJ19maWVsZHNfJyBhdHRyaWJ1dGUiKSkKKyAgICBAdW5pdHRlc3Quc2tpcCgndGVzdCBkaXNhYmxlZCcpCisgICAgZGVmIHRlc3Rfc3ViY2xhc3NfY3JlYXRpb24oc2VsZik6CisgICAgICAgIG1ldGEgPSB0eXBlKFN0cnVjdHVyZSkKKyAgICAgICAgIyBzYW1lIGFzICdjbGFzcyBYKFN0cnVjdHVyZSk6IHBhc3MnCisgICAgICAgICMgZmFpbHMsIHNpbmNlIHdlIG5lZWQgZWl0aGVyIGEgX2ZpZWxkc18gb3IgYSBfYWJzdHJhY3RfIGF0dHJpYnV0ZQorICAgICAgICBjbHMsIG1zZyA9IHNlbGYuZ2V0X2V4Y2VwdChtZXRhLCAiWCIsIChTdHJ1Y3R1cmUsKSwge30pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKGNscywgbXNnKSwKKyAgICAgICAgICAgICAgICAoQXR0cmlidXRlRXJyb3IsICJjbGFzcyBtdXN0IGRlZmluZSBhICdfZmllbGRzXycgYXR0cmlidXRlIikpCiAKICAgICBkZWYgdGVzdF9hYnN0cmFjdF9jbGFzcyhzZWxmKToKICAgICAgICAgY2xhc3MgWChTdHJ1Y3R1cmUpOgpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfdW5pY29kZS5weSBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3VuaWNvZGUucHkKaW5kZXggYzNiMmQ0OC4uYzIwMGFmNyAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfdW5pY29kZS5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF91bmljb2RlLnB5CkBAIC0xLDU4ICsxLDU1IEBACiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCBjdHlwZXMKK2Zyb20gY3R5cGVzLnRlc3QgaW1wb3J0IG5lZWRfc3ltYm9sCiAKLXRyeToKLSAgICBjdHlwZXMuY193Y2hhcgotZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgIHBhc3MKLWVsc2U6Ci0gICAgaW1wb3J0IF9jdHlwZXNfdGVzdAoraW1wb3J0IF9jdHlwZXNfdGVzdAogCi0gICAgY2xhc3MgVW5pY29kZVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAgICAgZGVmIHRlc3Rfd2NzbGVuKHNlbGYpOgotICAgICAgICAgICAgZGxsID0gY3R5cGVzLkNETEwoX2N0eXBlc190ZXN0Ll9fZmlsZV9fKQotICAgICAgICAgICAgd2NzbGVuID0gZGxsLm15X3djc2xlbgotICAgICAgICAgICAgd2NzbGVuLmFyZ3R5cGVzID0gW2N0eXBlcy5jX3djaGFyX3BdCitAbmVlZF9zeW1ib2woJ2Nfd2NoYXInKQorY2xhc3MgVW5pY29kZVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF93Y3NsZW4oc2VsZik6CisgICAgICAgIGRsbCA9IGN0eXBlcy5DRExMKF9jdHlwZXNfdGVzdC5fX2ZpbGVfXykKKyAgICAgICAgd2NzbGVuID0gZGxsLm15X3djc2xlbgorICAgICAgICB3Y3NsZW4uYXJndHlwZXMgPSBbY3R5cGVzLmNfd2NoYXJfcF0KIAotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3Y3NsZW4oImFiYyIpLCAzKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3Y3NsZW4oImFiXHUyMDcwIiksIDMpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhjdHlwZXMuQXJndW1lbnRFcnJvciwgd2NzbGVuLCBiImFiXHhlNCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod2NzbGVuKCJhYmMiKSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3Y3NsZW4oImFiXHUyMDcwIiksIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGN0eXBlcy5Bcmd1bWVudEVycm9yLCB3Y3NsZW4sIGIiYWJceGU0IikKIAotICAgICAgICBkZWYgdGVzdF9idWZmZXJzKHNlbGYpOgotICAgICAgICAgICAgYnVmID0gY3R5cGVzLmNyZWF0ZV91bmljb2RlX2J1ZmZlcigiYWJjIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGJ1ZiksIDMrMSkKKyAgICBkZWYgdGVzdF9idWZmZXJzKHNlbGYpOgorICAgICAgICBidWYgPSBjdHlwZXMuY3JlYXRlX3VuaWNvZGVfYnVmZmVyKCJhYmMiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihidWYpLCAzKzEpCiAKLSAgICAgICAgICAgIGJ1ZiA9IGN0eXBlcy5jcmVhdGVfdW5pY29kZV9idWZmZXIoImFiXHhlNFx4ZjZceGZjIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmWzpdLCAiYWJceGU0XHhmNlx4ZmNcMCIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1Zls6Ol0sICJhYlx4ZTRceGY2XHhmY1wwIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmWzo6LTFdLCAnXHgwMFx4ZmNceGY2XHhlNGJhJykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmWzo6Ml0sICdhXHhlNFx4ZmMnKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZbNjo1Oi0xXSwgIiIpCisgICAgICAgIGJ1ZiA9IGN0eXBlcy5jcmVhdGVfdW5pY29kZV9idWZmZXIoImFiXHhlNFx4ZjZceGZjIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZbOl0sICJhYlx4ZTRceGY2XHhmY1wwIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZbOjpdLCAiYWJceGU0XHhmNlx4ZmNcMCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmWzo6LTFdLCAnXHgwMFx4ZmNceGY2XHhlNGJhJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZbOjoyXSwgJ2FceGU0XHhmYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmWzY6NTotMV0sICIiKQogCi0gICAgZnVuYyA9IGN0eXBlcy5DRExMKF9jdHlwZXNfdGVzdC5fX2ZpbGVfXykuX3Rlc3RmdW5jX3BfcAorZnVuYyA9IGN0eXBlcy5DRExMKF9jdHlwZXNfdGVzdC5fX2ZpbGVfXykuX3Rlc3RmdW5jX3BfcAogCi0gICAgY2xhc3MgU3RyaW5nVGVzdENhc2UoVW5pY29kZVRlc3RDYXNlKToKLSAgICAgICAgZGVmIHNldFVwKHNlbGYpOgotICAgICAgICAgICAgZnVuYy5hcmd0eXBlcyA9IFtjdHlwZXMuY19jaGFyX3BdCi0gICAgICAgICAgICBmdW5jLnJlc3R5cGUgPSBjdHlwZXMuY19jaGFyX3AKK2NsYXNzIFN0cmluZ1Rlc3RDYXNlKFVuaWNvZGVUZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBmdW5jLmFyZ3R5cGVzID0gW2N0eXBlcy5jX2NoYXJfcF0KKyAgICAgICAgZnVuYy5yZXN0eXBlID0gY3R5cGVzLmNfY2hhcl9wCiAKLSAgICAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgotICAgICAgICAgICAgZnVuYy5hcmd0eXBlcyA9IE5vbmUKLSAgICAgICAgICAgIGZ1bmMucmVzdHlwZSA9IGN0eXBlcy5jX2ludAorICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgZnVuYy5hcmd0eXBlcyA9IE5vbmUKKyAgICAgICAgZnVuYy5yZXN0eXBlID0gY3R5cGVzLmNfaW50CiAKLSAgICAgICAgZGVmIHRlc3RfZnVuYyhzZWxmKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnVuYyhiImFiY1x4ZTQiKSwgYiJhYmNceGU0IikKKyAgICBkZWYgdGVzdF9mdW5jKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZ1bmMoYiJhYmNceGU0IiksIGIiYWJjXHhlNCIpCiAKLSAgICAgICAgZGVmIHRlc3RfYnVmZmVycyhzZWxmKToKLSAgICAgICAgICAgIGJ1ZiA9IGN0eXBlcy5jcmVhdGVfc3RyaW5nX2J1ZmZlcihiImFiYyIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihidWYpLCAzKzEpCisgICAgZGVmIHRlc3RfYnVmZmVycyhzZWxmKToKKyAgICAgICAgYnVmID0gY3R5cGVzLmNyZWF0ZV9zdHJpbmdfYnVmZmVyKGIiYWJjIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYnVmKSwgMysxKQogCi0gICAgICAgICAgICBidWYgPSBjdHlwZXMuY3JlYXRlX3N0cmluZ19idWZmZXIoYiJhYlx4ZTRceGY2XHhmYyIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1Zls6XSwgYiJhYlx4ZTRceGY2XHhmY1wwIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmWzo6XSwgYiJhYlx4ZTRceGY2XHhmY1wwIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmWzo6LTFdLCBiJ1x4MDBceGZjXHhmNlx4ZTRiYScpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1Zls6OjJdLCBiJ2FceGU0XHhmYycpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1Zls2OjU6LTFdLCBiIiIpCisgICAgICAgIGJ1ZiA9IGN0eXBlcy5jcmVhdGVfc3RyaW5nX2J1ZmZlcihiImFiXHhlNFx4ZjZceGZjIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZbOl0sIGIiYWJceGU0XHhmNlx4ZmNcMCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmWzo6XSwgYiJhYlx4ZTRceGY2XHhmY1wwIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZbOjotMV0sIGInXHgwMFx4ZmNceGY2XHhlNGJhJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZbOjoyXSwgYidhXHhlNFx4ZmMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1Zls2OjU6LTFdLCBiIiIpCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3ZhbHVlcy5weSBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3ZhbHVlcy5weQppbmRleCBlNDY0MTAyLi42ODUwY2YwIDEwMDY0NAotLS0gYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF92YWx1ZXMucHkKKysrIGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfdmFsdWVzLnB5CkBAIC0zLDYgKzMsNyBAQAogIiIiCiAKIGltcG9ydCB1bml0dGVzdAoraW1wb3J0IHN5cwogZnJvbSBjdHlwZXMgaW1wb3J0ICoKIAogaW1wb3J0IF9jdHlwZXNfdGVzdApAQCAtMjcsNjIgKzI4LDY3IEBACiAgICAgICAgIGN0ZGxsID0gQ0RMTChfY3R5cGVzX3Rlc3QuX19maWxlX18pCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNfaW50LmluX2RsbCwgY3RkbGwsICJVbmRlZmluZWRfU3ltYm9sIikKIAotICAgIGNsYXNzIFdpbl9WYWx1ZXNUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgICAgICIiIlRoaXMgdGVzdCBvbmx5IHdvcmtzIHdoZW4gcHl0aG9uIGl0c2VsZiBpcyBhIGRsbC9zaGFyZWQgbGlicmFyeSIiIgorY2xhc3MgUHl0aG9uVmFsdWVzVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIlRoaXMgdGVzdCBvbmx5IHdvcmtzIHdoZW4gcHl0aG9uIGl0c2VsZiBpcyBhIGRsbC9zaGFyZWQgbGlicmFyeSIiIgogCi0gICAgICAgIGRlZiB0ZXN0X29wdGltaXplZmxhZyhzZWxmKToKLSAgICAgICAgICAgICMgVGhpcyB0ZXN0IGFjY2Vzc2VzIHRoZSBQeV9PcHRpbWl6ZUZsYWcgaW50Z2VyLCB3aGljaCBpcwotICAgICAgICAgICAgIyBleHBvcnRlZCBieSB0aGUgUHl0aG9uIGRsbC4KKyAgICBkZWYgdGVzdF9vcHRpbWl6ZWZsYWcoc2VsZik6CisgICAgICAgICMgVGhpcyB0ZXN0IGFjY2Vzc2VzIHRoZSBQeV9PcHRpbWl6ZUZsYWcgaW50ZWdlciwgd2hpY2ggaXMKKyAgICAgICAgIyBleHBvcnRlZCBieSB0aGUgUHl0aG9uIGRsbCBhbmQgc2hvdWxkIG1hdGNoIHRoZSBzeXMuZmxhZ3MgdmFsdWUKIAotICAgICAgICAgICAgIyBJdCdzIHZhbHVlIGlzIHNldCBkZXBlbmRpbmcgb24gdGhlIC1PIGFuZCAtT08gZmxhZ3M6Ci0gICAgICAgICAgICAjIGlmIG5vdCBnaXZlbiwgaXQgaXMgMCBhbmQgX19kZWJ1Z19fIGlzIDEuCi0gICAgICAgICAgICAjIElmIC1PIGlzIGdpdmVuLCB0aGUgZmxhZyBpcyAxLCBmb3IgLU9PIGl0IGlzIDIuCi0gICAgICAgICAgICAjIGRvY3N0cmluZ3MgYXJlIGFsc28gcmVtb3ZlZCBpbiB0aGUgbGF0dGVyIGNhc2UuCi0gICAgICAgICAgICBvcHQgPSBjX2ludC5pbl9kbGwocHlkbGwsICJQeV9PcHRpbWl6ZUZsYWciKS52YWx1ZQotICAgICAgICAgICAgaWYgX19kZWJ1Z19fOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3B0LCAwKQotICAgICAgICAgICAgZWxpZiBWYWx1ZXNUZXN0Q2FzZS5fX2RvY19fIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3B0LCAxKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wdCwgMikKKyAgICAgICAgb3B0ID0gY19pbnQuaW5fZGxsKHB5dGhvbmFwaSwgIlB5X09wdGltaXplRmxhZyIpLnZhbHVlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3B0LCBzeXMuZmxhZ3Mub3B0aW1pemUpCiAKLSAgICAgICAgZGVmIHRlc3RfZnJvemVudGFibGUoc2VsZik6Ci0gICAgICAgICAgICAjIFB5dGhvbiBleHBvcnRzIGEgUHlJbXBvcnRfRnJvemVuTW9kdWxlcyBzeW1ib2wuIFRoaXMgaXMgYQotICAgICAgICAgICAgIyBwb2ludGVyIHRvIGFuIGFycmF5IG9mIHN0cnVjdCBfZnJvemVuIGVudHJpZXMuICBUaGUgZW5kIG9mIHRoZQotICAgICAgICAgICAgIyBhcnJheSBpcyBtYXJrZWQgYnkgYW4gZW50cnkgY29udGFpbmluZyBhIE5VTEwgbmFtZSBhbmQgemVybwotICAgICAgICAgICAgIyBzaXplLgorICAgIGRlZiB0ZXN0X2Zyb3plbnRhYmxlKHNlbGYpOgorICAgICAgICAjIFB5dGhvbiBleHBvcnRzIGEgUHlJbXBvcnRfRnJvemVuTW9kdWxlcyBzeW1ib2wuIFRoaXMgaXMgYQorICAgICAgICAjIHBvaW50ZXIgdG8gYW4gYXJyYXkgb2Ygc3RydWN0IF9mcm96ZW4gZW50cmllcy4gIFRoZSBlbmQgb2YgdGhlCisgICAgICAgICMgYXJyYXkgaXMgbWFya2VkIGJ5IGFuIGVudHJ5IGNvbnRhaW5pbmcgYSBOVUxMIG5hbWUgYW5kIHplcm8KKyAgICAgICAgIyBzaXplLgogCi0gICAgICAgICAgICAjIEluIHN0YW5kYXJkIFB5dGhvbiwgdGhpcyB0YWJsZSBjb250YWlucyBhIF9faGVsbG9fXwotICAgICAgICAgICAgIyBtb2R1bGUsIGFuZCBhIF9fcGhlbGxvX18gcGFja2FnZSBjb250YWluaW5nIGEgc3BhbQotICAgICAgICAgICAgIyBtb2R1bGUuCi0gICAgICAgICAgICBjbGFzcyBzdHJ1Y3RfZnJvemVuKFN0cnVjdHVyZSk6Ci0gICAgICAgICAgICAgICAgX2ZpZWxkc18gPSBbKCJuYW1lIiwgY19jaGFyX3ApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiY29kZSIsIFBPSU5URVIoY191Ynl0ZSkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICgic2l6ZSIsIGNfaW50KV0KLSAgICAgICAgICAgIEZyb3plblRhYmxlID0gUE9JTlRFUihzdHJ1Y3RfZnJvemVuKQorICAgICAgICAjIEluIHN0YW5kYXJkIFB5dGhvbiwgdGhpcyB0YWJsZSBjb250YWlucyBhIF9faGVsbG9fXworICAgICAgICAjIG1vZHVsZSwgYW5kIGEgX19waGVsbG9fXyBwYWNrYWdlIGNvbnRhaW5pbmcgYSBzcGFtCisgICAgICAgICMgbW9kdWxlLgorICAgICAgICBjbGFzcyBzdHJ1Y3RfZnJvemVuKFN0cnVjdHVyZSk6CisgICAgICAgICAgICBfZmllbGRzXyA9IFsoIm5hbWUiLCBjX2NoYXJfcCksCisgICAgICAgICAgICAgICAgICAgICAgICAoImNvZGUiLCBQT0lOVEVSKGNfdWJ5dGUpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICgic2l6ZSIsIGNfaW50KV0KKyAgICAgICAgRnJvemVuVGFibGUgPSBQT0lOVEVSKHN0cnVjdF9mcm96ZW4pCiAKLSAgICAgICAgICAgIGZ0ID0gRnJvemVuVGFibGUuaW5fZGxsKHB5ZGxsLCAiUHlJbXBvcnRfRnJvemVuTW9kdWxlcyIpCi0gICAgICAgICAgICAjIGZ0IGlzIGEgcG9pbnRlciB0byB0aGUgc3RydWN0X2Zyb3plbiBlbnRyaWVzOgotICAgICAgICAgICAgaXRlbXMgPSBbXQotICAgICAgICAgICAgZm9yIGVudHJ5IGluIGZ0OgotICAgICAgICAgICAgICAgICMgVGhpcyBpcyBkYW5nZXJvdXMuIFdlICpjYW4qIGl0ZXJhdGUgb3ZlciBhIHBvaW50ZXIsIGJ1dAotICAgICAgICAgICAgICAgICMgdGhlIGxvb3Agd2lsbCBub3QgdGVybWluYXRlIChtYXliZSB3aXRoIGFuIGFjY2VzcwotICAgICAgICAgICAgICAgICMgdmlvbGF0aW9uOy0pIGJlY2F1c2UgdGhlIHBvaW50ZXIgaW5zdGFuY2UgaGFzIG5vIHNpemUuCi0gICAgICAgICAgICAgICAgaWYgZW50cnkubmFtZSBpcyBOb25lOgotICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgIGl0ZW1zLmFwcGVuZCgoZW50cnkubmFtZSwgZW50cnkuc2l6ZSkpCi0gICAgICAgICAgICBpbXBvcnQgc3lzCi0gICAgICAgICAgICBpZiBzeXMudmVyc2lvbl9pbmZvWzoyXSA+PSAoMiwgMyk6Ci0gICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSBbKCJfX2hlbGxvX18iLCAxMDQpLCAoIl9fcGhlbGxvX18iLCAtMTA0KSwgKCJfX3BoZWxsb19fLnNwYW0iLCAxMDQpXQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBleHBlY3RlZCA9IFsoIl9faGVsbG9fXyIsIDEwMCksICgiX19waGVsbG9fXyIsIC0xMDApLCAoIl9fcGhlbGxvX18uc3BhbSIsIDEwMCldCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGl0ZW1zLCBleHBlY3RlZCkKKyAgICAgICAgZnQgPSBGcm96ZW5UYWJsZS5pbl9kbGwocHl0aG9uYXBpLCAiUHlJbXBvcnRfRnJvemVuTW9kdWxlcyIpCisgICAgICAgICMgZnQgaXMgYSBwb2ludGVyIHRvIHRoZSBzdHJ1Y3RfZnJvemVuIGVudHJpZXM6CisgICAgICAgIGl0ZW1zID0gW10KKyAgICAgICAgIyBfZnJvemVuX2ltcG9ydGxpYiBjaGFuZ2VzIHNpemUgd2hlbmV2ZXIgaW1wb3J0bGliLl9ib290c3RyYXAKKyAgICAgICAgIyBjaGFuZ2VzLCBzbyBpdCBnZXRzIGEgc3BlY2lhbCBjYXNlLiAgV2Ugc2hvdWxkIG1ha2Ugc3VyZSBpdCdzCisgICAgICAgICMgZm91bmQsIGJ1dCBkb24ndCB3b3JyeSBhYm91dCBpdHMgc2l6ZSB0b28gbXVjaC4KKyAgICAgICAgX2Z6bl9pbXBsaWJfc2VlbiA9IEZhbHNlCisgICAgICAgIGZvciBlbnRyeSBpbiBmdDoKKyAgICAgICAgICAgICMgVGhpcyBpcyBkYW5nZXJvdXMuIFdlICpjYW4qIGl0ZXJhdGUgb3ZlciBhIHBvaW50ZXIsIGJ1dAorICAgICAgICAgICAgIyB0aGUgbG9vcCB3aWxsIG5vdCB0ZXJtaW5hdGUgKG1heWJlIHdpdGggYW4gYWNjZXNzCisgICAgICAgICAgICAjIHZpb2xhdGlvbjstKSBiZWNhdXNlIHRoZSBwb2ludGVyIGluc3RhbmNlIGhhcyBubyBzaXplLgorICAgICAgICAgICAgaWYgZW50cnkubmFtZSBpcyBOb25lOgorICAgICAgICAgICAgICAgIGJyZWFrCiAKLSAgICAgICAgICAgIGZyb20gY3R5cGVzIGltcG9ydCBfcG9pbnRlcl90eXBlX2NhY2hlCi0gICAgICAgICAgICBkZWwgX3BvaW50ZXJfdHlwZV9jYWNoZVtzdHJ1Y3RfZnJvemVuXQorICAgICAgICAgICAgaWYgZW50cnkubmFtZSA9PSBiJ19mcm96ZW5faW1wb3J0bGliJzoKKyAgICAgICAgICAgICAgICBfZnpuX2ltcGxpYl9zZWVuID0gVHJ1ZQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlbnRyeS5zaXplLAorICAgICAgICAgICAgICAgICAgICAiX2Zyb3plbl9pbXBvcnRsaWIgd2FzIHJlcG9ydGVkIGFzIGhhdmluZyBubyBzaXplIikKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaXRlbXMuYXBwZW5kKChlbnRyeS5uYW1lLCBlbnRyeS5zaXplKSkKIAotICAgICAgICBkZWYgdGVzdF91bmRlZmluZWQoc2VsZik6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjX2ludC5pbl9kbGwsIHB5ZGxsLCAiVW5kZWZpbmVkX1N5bWJvbCIpCisgICAgICAgIGV4cGVjdGVkID0gWyhiIl9faGVsbG9fXyIsIDE2MSksCisgICAgICAgICAgICAgICAgICAgIChiIl9fcGhlbGxvX18iLCAtMTYxKSwKKyAgICAgICAgICAgICAgICAgICAgKGIiX19waGVsbG9fXy5zcGFtIiwgMTYxKSwKKyAgICAgICAgICAgICAgICAgICAgXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGl0ZW1zLCBleHBlY3RlZCkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoX2Z6bl9pbXBsaWJfc2VlbiwKKyAgICAgICAgICAgICJfZnJvemVuX2ltcG9ydGxpYiB3YXNuJ3QgZm91bmQgaW4gUHlJbXBvcnRfRnJvemVuTW9kdWxlcyIpCisKKyAgICAgICAgZnJvbSBjdHlwZXMgaW1wb3J0IF9wb2ludGVyX3R5cGVfY2FjaGUKKyAgICAgICAgZGVsIF9wb2ludGVyX3R5cGVfY2FjaGVbc3RydWN0X2Zyb3plbl0KKworICAgIGRlZiB0ZXN0X3VuZGVmaW5lZChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY19pbnQuaW5fZGxsLCBweXRob25hcGksCisgICAgICAgICAgICAgICAgICAgICAgICAgICJVbmRlZmluZWRfU3ltYm9sIikKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3dpbjMyLnB5IGIvTGliL2N0eXBlcy90ZXN0L3Rlc3Rfd2luMzIucHkKaW5kZXggZGEyMTMzNi4uZGExNjI0MCAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3Rfd2luMzIucHkKKysrIGIvTGliL2N0eXBlcy90ZXN0L3Rlc3Rfd2luMzIucHkKQEAgLTEsOTkgKzEsMTAzIEBACiAjIFdpbmRvd3Mgc3BlY2lmaWMgdGVzdHMKIAogZnJvbSBjdHlwZXMgaW1wb3J0ICoKLWZyb20gY3R5cGVzLnRlc3QgaW1wb3J0IGlzX3Jlc291cmNlX2VuYWJsZWQKIGltcG9ydCB1bml0dGVzdCwgc3lzCiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIAogaW1wb3J0IF9jdHlwZXNfdGVzdAogCi1pZiBzeXMucGxhdGZvcm0gPT0gIndpbjMyIiBhbmQgc2l6ZW9mKGNfdm9pZF9wKSA9PSBzaXplb2YoY19pbnQpOgotICAgICMgT25seSB3aW5kb3dzIDMyLWJpdCBoYXMgZGlmZmVyZW50IGNhbGxpbmcgY29udmVudGlvbnMuCisjIE9ubHkgd2luZG93cyAzMi1iaXQgaGFzIGRpZmZlcmVudCBjYWxsaW5nIGNvbnZlbnRpb25zLgorQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3lzLnBsYXRmb3JtID09ICJ3aW4zMiIsICdXaW5kb3dzLXNwZWNpZmljIHRlc3QnKQorQHVuaXR0ZXN0LnNraXBVbmxlc3Moc2l6ZW9mKGNfdm9pZF9wKSA9PSBzaXplb2YoY19pbnQpLAorICAgICAgICAgICAgICAgICAgICAgInNpemVvZiBjX3ZvaWRfcCBhbmQgY19pbnQgZGlmZmVyIikKK2NsYXNzIFdpbmRvd3NUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfY2FsbGNvbnZfMShzZWxmKToKKyAgICAgICAgIyBUZXN0aW5nIHN0ZGNhbGwgZnVuY3Rpb24KIAotICAgIGNsYXNzIFdpbmRvd3NUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgICAgIGRlZiB0ZXN0X2NhbGxjb252XzEoc2VsZik6Ci0gICAgICAgICAgICAjIFRlc3Rpbmcgc3RkY2FsbCBmdW5jdGlvbgorICAgICAgICBJc1dpbmRvdyA9IHdpbmRsbC51c2VyMzIuSXNXaW5kb3cKKyAgICAgICAgIyBWYWx1ZUVycm9yOiBQcm9jZWR1cmUgcHJvYmFibHkgY2FsbGVkIHdpdGggbm90IGVub3VnaCBhcmd1bWVudHMKKyAgICAgICAgIyAoNCBieXRlcyBtaXNzaW5nKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBJc1dpbmRvdykKIAotICAgICAgICAgICAgSXNXaW5kb3cgPSB3aW5kbGwudXNlcjMyLklzV2luZG93Ci0gICAgICAgICAgICAjIFZhbHVlRXJyb3I6IFByb2NlZHVyZSBwcm9iYWJseSBjYWxsZWQgd2l0aCBub3QgZW5vdWdoIGFyZ3VtZW50cyAoNCBieXRlcyBtaXNzaW5nKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgSXNXaW5kb3cpCisgICAgICAgICMgVGhpcyBvbmUgc2hvdWxkIHN1Y2NlZWQuLi4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBJc1dpbmRvdygwKSkKIAotICAgICAgICAgICAgIyBUaGlzIG9uZSBzaG91bGQgc3VjY2VlZC4uLgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBJc1dpbmRvdygwKSkKKyAgICAgICAgIyBWYWx1ZUVycm9yOiBQcm9jZWR1cmUgcHJvYmFibHkgY2FsbGVkIHdpdGggdG9vIG1hbnkgYXJndW1lbnRzCisgICAgICAgICMgKDggYnl0ZXMgaW4gZXhjZXNzKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBJc1dpbmRvdywgMCwgMCwgMCkKIAotICAgICAgICAgICAgIyBWYWx1ZUVycm9yOiBQcm9jZWR1cmUgcHJvYmFibHkgY2FsbGVkIHdpdGggdG9vIG1hbnkgYXJndW1lbnRzICg4IGJ5dGVzIGluIGV4Y2VzcykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIElzV2luZG93LCAwLCAwLCAwKQorICAgIGRlZiB0ZXN0X2NhbGxjb252XzIoc2VsZik6CisgICAgICAgICMgQ2FsbGluZyBzdGRjYWxsIGZ1bmN0aW9uIGFzIGNkZWNsCiAKLSAgICAgICAgZGVmIHRlc3RfY2FsbGNvbnZfMihzZWxmKToKLSAgICAgICAgICAgICMgQ2FsbGluZyBzdGRjYWxsIGZ1bmN0aW9uIGFzIGNkZWNsCisgICAgICAgIElzV2luZG93ID0gY2RsbC51c2VyMzIuSXNXaW5kb3cKIAotICAgICAgICAgICAgSXNXaW5kb3cgPSBjZGxsLnVzZXIzMi5Jc1dpbmRvdworICAgICAgICAjIFZhbHVlRXJyb3I6IFByb2NlZHVyZSBjYWxsZWQgd2l0aCBub3QgZW5vdWdoIGFyZ3VtZW50cworICAgICAgICAjICg0IGJ5dGVzIG1pc3NpbmcpIG9yIHdyb25nIGNhbGxpbmcgY29udmVudGlvbgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBJc1dpbmRvdywgTm9uZSkKIAotICAgICAgICAgICAgIyBWYWx1ZUVycm9yOiBQcm9jZWR1cmUgY2FsbGVkIHdpdGggbm90IGVub3VnaCBhcmd1bWVudHMgKDQgYnl0ZXMgbWlzc2luZykKLSAgICAgICAgICAgICMgb3Igd3JvbmcgY2FsbGluZyBjb252ZW50aW9uCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBJc1dpbmRvdywgTm9uZSkKK0B1bml0dGVzdC5za2lwVW5sZXNzKHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiLCAnV2luZG93cy1zcGVjaWZpYyB0ZXN0JykKK2NsYXNzIEZ1bmN0aW9uQ2FsbFRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcygnTVNDJyBpbiBzeXMudmVyc2lvbiwgIlNFSCBvbmx5IHN1cHBvcnRlZCBieSBNU0MiKQorICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLmV4ZWN1dGFibGUubG93ZXIoKS5lbmRzd2l0aCgnX2QuZXhlJyksCisgICAgICAgICAgICAgICAgICAgICAiU0VIIG5vdCBlbmFibGVkIGluIGRlYnVnIGJ1aWxkcyIpCisgICAgZGVmIHRlc3RfU0VIKHNlbGYpOgorICAgICAgICAjIENhbGwgZnVuY3Rpb25zIHdpdGggaW52YWxpZCBhcmd1bWVudHMsIGFuZCBtYWtlIHN1cmUKKyAgICAgICAgIyB0aGF0IGFjY2VzcyB2aW9sYXRpb25zIGFyZSB0cmFwcGVkIGFuZCByYWlzZSBhbgorICAgICAgICAjIGV4Y2VwdGlvbi4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgd2luZGxsLmtlcm5lbDMyLkdldE1vZHVsZUhhbmRsZUEsIDMyKQogCi1pZiBzeXMucGxhdGZvcm0gPT0gIndpbjMyIjoKLSAgICBjbGFzcyBGdW5jdGlvbkNhbGxUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3Rfbm9hcmdzKHNlbGYpOgorICAgICAgICAjIFRoaXMgaXMgYSBzcGVjaWFsIGNhc2Ugb24gd2luMzIgeDY0CisgICAgICAgIHdpbmRsbC51c2VyMzIuR2V0RGVza3RvcFdpbmRvdygpCiAKLSAgICAgICAgaWYgaXNfcmVzb3VyY2VfZW5hYmxlZCgiU0VIIik6Ci0gICAgICAgICAgICBkZWYgdGVzdF9TRUgoc2VsZik6Ci0gICAgICAgICAgICAgICAgIyBDYWxsIGZ1bmN0aW9ucyB3aXRoIGludmFsaWQgYXJndW1lbnRzLCBhbmQgbWFrZSBzdXJlCi0gICAgICAgICAgICAgICAgIyB0aGF0IGFjY2VzcyB2aW9sYXRpb25zIGFyZSB0cmFwcGVkIGFuZCByYWlzZSBhbgotICAgICAgICAgICAgICAgICMgZXhjZXB0aW9uLgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFdpbmRvd3NFcnJvciwgd2luZGxsLmtlcm5lbDMyLkdldE1vZHVsZUhhbmRsZUEsIDMyKQorQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3lzLnBsYXRmb3JtID09ICJ3aW4zMiIsICdXaW5kb3dzLXNwZWNpZmljIHRlc3QnKQorY2xhc3MgVGVzdFdpbnR5cGVzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9IV05EKHNlbGYpOgorICAgICAgICBmcm9tIGN0eXBlcyBpbXBvcnQgd2ludHlwZXMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXplb2Yod2ludHlwZXMuSFdORCksIHNpemVvZihjX3ZvaWRfcCkpCiAKLSAgICAgICAgZGVmIHRlc3Rfbm9hcmdzKHNlbGYpOgotICAgICAgICAgICAgIyBUaGlzIGlzIGEgc3BlY2lhbCBjYXNlIG9uIHdpbjMyIHg2NAotICAgICAgICAgICAgd2luZGxsLnVzZXIzMi5HZXREZXNrdG9wV2luZG93KCkKKyAgICBkZWYgdGVzdF9QQVJBTShzZWxmKToKKyAgICAgICAgZnJvbSBjdHlwZXMgaW1wb3J0IHdpbnR5cGVzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZW9mKHdpbnR5cGVzLldQQVJBTSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihjX3ZvaWRfcCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZW9mKHdpbnR5cGVzLkxQQVJBTSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihjX3ZvaWRfcCkpCiAKLSAgICBjbGFzcyBUZXN0V2ludHlwZXModW5pdHRlc3QuVGVzdENhc2UpOgotICAgICAgICBkZWYgdGVzdF9IV05EKHNlbGYpOgotICAgICAgICAgICAgZnJvbSBjdHlwZXMgaW1wb3J0IHdpbnR5cGVzCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpemVvZih3aW50eXBlcy5IV05EKSwgc2l6ZW9mKGNfdm9pZF9wKSkKKyAgICBkZWYgdGVzdF9DT01FcnJvcihzZWxmKToKKyAgICAgICAgZnJvbSBfY3R5cGVzIGltcG9ydCBDT01FcnJvcgorICAgICAgICBpZiBzdXBwb3J0LkhBVkVfRE9DU1RSSU5HUzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQ09NRXJyb3IuX19kb2NfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJhaXNlZCB3aGVuIGEgQ09NIG1ldGhvZCBjYWxsIGZhaWxlZC4iKQogCi0gICAgICAgIGRlZiB0ZXN0X1BBUkFNKHNlbGYpOgotICAgICAgICAgICAgZnJvbSBjdHlwZXMgaW1wb3J0IHdpbnR5cGVzCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpemVvZih3aW50eXBlcy5XUEFSQU0pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGNfdm9pZF9wKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZW9mKHdpbnR5cGVzLkxQQVJBTSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoY192b2lkX3ApKQorICAgICAgICBleCA9IENPTUVycm9yKC0xLCAidGV4dCIsICgiZGV0YWlscyIsKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleC5ocmVzdWx0LCAtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleC50ZXh0LCAidGV4dCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXguZGV0YWlscywgKCJkZXRhaWxzIiwpKQogCi0gICAgICAgIGRlZiB0ZXN0X0NPTUVycm9yKHNlbGYpOgotICAgICAgICAgICAgZnJvbSBfY3R5cGVzIGltcG9ydCBDT01FcnJvcgotICAgICAgICAgICAgaWYgc3VwcG9ydC5IQVZFX0RPQ1NUUklOR1M6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDT01FcnJvci5fX2RvY19fLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJhaXNlZCB3aGVuIGEgQ09NIG1ldGhvZCBjYWxsIGZhaWxlZC4iKQorQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3lzLnBsYXRmb3JtID09ICJ3aW4zMiIsICdXaW5kb3dzLXNwZWNpZmljIHRlc3QnKQorY2xhc3MgVGVzdFdpbkVycm9yKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF93aW5lcnJvcihzZWxmKToKKyAgICAgICAgIyBzZWUgSXNzdWUgMTYxNjkKKyAgICAgICAgaW1wb3J0IGVycm5vCisgICAgICAgIEVSUk9SX0lOVkFMSURfUEFSQU1FVEVSID0gODcKKyAgICAgICAgbXNnID0gRm9ybWF0RXJyb3IoRVJST1JfSU5WQUxJRF9QQVJBTUVURVIpLnN0cmlwKCkKKyAgICAgICAgYXJncyA9IChlcnJuby5FSU5WQUwsIG1zZywgTm9uZSwgRVJST1JfSU5WQUxJRF9QQVJBTUVURVIpCiAKLSAgICAgICAgICAgIGV4ID0gQ09NRXJyb3IoLTEsICJ0ZXh0IiwgKCJkZXRhaWxzIiwpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleC5ocmVzdWx0LCAtMSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXgudGV4dCwgInRleHQiKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleC5kZXRhaWxzLCAoImRldGFpbHMiLCkpCisgICAgICAgIGUgPSBXaW5FcnJvcihFUlJPUl9JTlZBTElEX1BBUkFNRVRFUikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLmFyZ3MsIGFyZ3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5lcnJubywgZXJybm8uRUlOVkFMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUud2luZXJyb3IsIEVSUk9SX0lOVkFMSURfUEFSQU1FVEVSKQogCi0gICAgY2xhc3MgVGVzdFdpbkVycm9yKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAgICAgZGVmIHRlc3Rfd2luZXJyb3Ioc2VsZik6Ci0gICAgICAgICAgICAjIHNlZSBJc3N1ZSAxNjE2OQotICAgICAgICAgICAgaW1wb3J0IGVycm5vCi0gICAgICAgICAgICBFUlJPUl9JTlZBTElEX1BBUkFNRVRFUiA9IDg3Ci0gICAgICAgICAgICBtc2cgPSBGb3JtYXRFcnJvcihFUlJPUl9JTlZBTElEX1BBUkFNRVRFUikuc3RyaXAoKQotICAgICAgICAgICAgYXJncyA9IChlcnJuby5FSU5WQUwsIG1zZywgTm9uZSwgRVJST1JfSU5WQUxJRF9QQVJBTUVURVIpCi0KLSAgICAgICAgICAgIGUgPSBXaW5FcnJvcihFUlJPUl9JTlZBTElEX1BBUkFNRVRFUikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5hcmdzLCBhcmdzKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLmVycm5vLCBlcnJuby5FSU5WQUwpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUud2luZXJyb3IsIEVSUk9SX0lOVkFMSURfUEFSQU1FVEVSKQotCi0gICAgICAgICAgICB3aW5kbGwua2VybmVsMzIuU2V0TGFzdEVycm9yKEVSUk9SX0lOVkFMSURfUEFSQU1FVEVSKQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHJhaXNlIFdpbkVycm9yKCkKLSAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKLSAgICAgICAgICAgICAgICBlID0gZXhjCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuYXJncywgYXJncykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5lcnJubywgZXJybm8uRUlOVkFMKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLndpbmVycm9yLCBFUlJPUl9JTlZBTElEX1BBUkFNRVRFUikKKyAgICAgICAgd2luZGxsLmtlcm5lbDMyLlNldExhc3RFcnJvcihFUlJPUl9JTlZBTElEX1BBUkFNRVRFUikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmFpc2UgV2luRXJyb3IoKQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6CisgICAgICAgICAgICBlID0gZXhjCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5hcmdzLCBhcmdzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuZXJybm8sIGVycm5vLkVJTlZBTCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLndpbmVycm9yLCBFUlJPUl9JTlZBTElEX1BBUkFNRVRFUikKIAogY2xhc3MgU3RydWN0dXJlcyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KICAgICBkZWYgdGVzdF9zdHJ1Y3RfYnlfdmFsdWUoc2VsZik6CiAgICAgICAgIGNsYXNzIFBPSU5UKFN0cnVjdHVyZSk6CiAgICAgICAgICAgICBfZmllbGRzXyA9IFsoIngiLCBjX2xvbmcpLApAQCAtMTA3LDkgKzExMSwzMyBAQAogCiAgICAgICAgIGRsbCA9IENETEwoX2N0eXBlc190ZXN0Ll9fZmlsZV9fKQogCi0gICAgICAgIHB0ID0gUE9JTlQoMTAsIDEwKQotICAgICAgICByZWN0ID0gUkVDVCgwLCAwLCAyMCwgMjApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgZGxsLlBvaW50SW5SZWN0KGJ5cmVmKHJlY3QpLCBwdCkpCisgICAgICAgIHB0ID0gUE9JTlQoMTUsIDI1KQorICAgICAgICBsZWZ0ID0gY19sb25nLmluX2RsbChkbGwsICdsZWZ0JykKKyAgICAgICAgdG9wID0gY19sb25nLmluX2RsbChkbGwsICd0b3AnKQorICAgICAgICByaWdodCA9IGNfbG9uZy5pbl9kbGwoZGxsLCAncmlnaHQnKQorICAgICAgICBib3R0b20gPSBjX2xvbmcuaW5fZGxsKGRsbCwgJ2JvdHRvbScpCisgICAgICAgIHJlY3QgPSBSRUNUKGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSkKKyAgICAgICAgUG9pbnRJblJlY3QgPSBkbGwuUG9pbnRJblJlY3QKKyAgICAgICAgUG9pbnRJblJlY3QuYXJndHlwZXMgPSBbUE9JTlRFUihSRUNUKSwgUE9JTlRdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgUG9pbnRJblJlY3QoYnlyZWYocmVjdCksIHB0KSkKKworICAgICAgICBSZXR1cm5SZWN0ID0gZGxsLlJldHVyblJlY3QKKyAgICAgICAgUmV0dXJuUmVjdC5hcmd0eXBlcyA9IFtjX2ludCwgUkVDVCwgUE9JTlRFUihSRUNUKSwgUE9JTlQsIFJFQ1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUE9JTlRFUihSRUNUKSwgUE9JTlQsIFJFQ1RdCisgICAgICAgIFJldHVyblJlY3QucmVzdHlwZSA9IFJFQ1QKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoNCk6CisgICAgICAgICAgICByZXQgPSBSZXR1cm5SZWN0KGksIHJlY3QsIHBvaW50ZXIocmVjdCksIHB0LCByZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgIGJ5cmVmKHJlY3QpLCBwdCwgcmVjdCkKKyAgICAgICAgICAgICMgdGhlIGMgZnVuY3Rpb24gd2lsbCBjaGVjayBhbmQgbW9kaWZ5IHJldCBpZiBzb21ldGhpbmcgaXMKKyAgICAgICAgICAgICMgcGFzc2VkIGluIGltcHJvcGVybHkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmV0LmxlZnQsIGxlZnQudmFsdWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldC5yaWdodCwgcmlnaHQudmFsdWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldC50b3AsIHRvcC52YWx1ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmV0LmJvdHRvbSwgYm90dG9tLnZhbHVlKQorCisgICAgICAgICMgdG8gbm90IGxlYWsgcmVmZXJlbmNlcywgd2UgbXVzdCBjbGVhbiBfcG9pbnRlcl90eXBlX2NhY2hlCisgICAgICAgIGZyb20gY3R5cGVzIGltcG9ydCBfcG9pbnRlcl90eXBlX2NhY2hlCisgICAgICAgIGRlbCBfcG9pbnRlcl90eXBlX2NhY2hlW1JFQ1RdCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF93aW50eXBlcy5weSBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3dpbnR5cGVzLnB5CmluZGV4IDgwNmZjY2UuLjcxNDQyZGYgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3dpbnR5cGVzLnB5CisrKyBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3dpbnR5cGVzLnB5CkBAIC0xLDE0ICsxLDEyIEBACiBpbXBvcnQgc3lzCiBpbXBvcnQgdW5pdHRlc3QKIAotaWYgbm90IHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCd3aW4nKToKLSAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgnV2luZG93cy1vbmx5IHRlc3QnKQotCiBmcm9tIGN0eXBlcyBpbXBvcnQgKgotZnJvbSBjdHlwZXMgaW1wb3J0IHdpbnR5cGVzCiAKK0B1bml0dGVzdC5za2lwVW5sZXNzKHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCd3aW4nKSwgJ1dpbmRvd3Mtb25seSB0ZXN0JykKIGNsYXNzIFdpblR5cGVzVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RfdmFyaWFudF9ib29sKHNlbGYpOgorICAgICAgICBmcm9tIGN0eXBlcyBpbXBvcnQgd2ludHlwZXMKICAgICAgICAgIyByZWFkcyAxNi1iaXRzIGZyb20gbWVtb3J5LCBhbnl0aGluZyBub24temVybyBpcyBUcnVlCiAgICAgICAgIGZvciB0cnVlX3ZhbHVlIGluICgxLCAzMjc2NywgMzI3NjgsIDY1NTM1LCA2NTUzNyk6CiAgICAgICAgICAgICB0cnVlID0gUE9JTlRFUihjX2ludDE2KShjX2ludDE2KHRydWVfdmFsdWUpKQpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy91dGlsLnB5IGIvTGliL2N0eXBlcy91dGlsLnB5CmluZGV4IDA1NGM1MTEuLjU5NTExM2IgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvdXRpbC5weQorKysgYi9MaWIvY3R5cGVzL3V0aWwucHkKQEAgLTg1LDcgKzg1LDcgQEAKIAogZWxpZiBvcy5uYW1lID09ICJwb3NpeCI6CiAgICAgIyBBbmRyZWFzIERlZ2VydCdzIGZpbmQgZnVuY3Rpb25zLCB1c2luZyBnY2MsIC9zYmluL2xkY29uZmlnLCBvYmpkdW1wCi0gICAgaW1wb3J0IHJlLCB0ZW1wZmlsZSwgZXJybm8KKyAgICBpbXBvcnQgcmUsIHRlbXBmaWxlCiAKICAgICBkZWYgX2ZpbmRMaWJfZ2NjKG5hbWUpOgogICAgICAgICBleHByID0gcidbXlwoXClcc10qbGliJXNcLlteXChcKVxzXSonICUgcmUuZXNjYXBlKG5hbWUpCkBAIC0xMDIsOSArMTAyLDggQEAKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBvcy51bmxpbmsoY2NvdXQpCi0gICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgotICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRU5PRU5UOgotICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgZXhjZXB0IEZpbGVOb3RGb3VuZEVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgaWYgcnYgPT0gMTA6CiAgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCdnY2Mgb3IgY2MgY29tbWFuZCBub3QgZm91bmQnKQogICAgICAgICByZXMgPSByZS5zZWFyY2goZXhwciwgdHJhY2UpCkBAIC0xMzMsOCArMTMyLDEwIEBACiAgICAgICAgICAgICBjbWQgPSAnaWYgISB0eXBlIG9iamR1bXAgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIGV4aXQgMTA7IGZpOycgXAogICAgICAgICAgICAgICAgICAgIm9iamR1bXAgLXAgLWogLmR5bmFtaWMgMj4vZGV2L251bGwgIiArIGYKICAgICAgICAgICAgIGYgPSBvcy5wb3BlbihjbWQpCi0gICAgICAgICAgICBkdW1wID0gZi5yZWFkKCkKLSAgICAgICAgICAgIHJ2ID0gZi5jbG9zZSgpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZHVtcCA9IGYucmVhZCgpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHJ2ID0gZi5jbG9zZSgpCiAgICAgICAgICAgICBpZiBydiA9PSAxMDoKICAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCdvYmpkdW1wIGNvbW1hbmQgbm90IGZvdW5kJykKICAgICAgICAgICAgIHJlcyA9IHJlLnNlYXJjaChyJ1xzU09OQU1FXHMrKFteXHNdKyknLCBkdW1wKQpAQCAtMTc3LDEwICsxNzgsMTEgQEAKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgY21kID0gJ2VudiBMQ19BTEw9QyAvdXNyL2Jpbi9jcmxlIDI+L2Rldi9udWxsJwogCi0gICAgICAgICAgICBmb3IgbGluZSBpbiBvcy5wb3BlbihjbWQpLnJlYWRsaW5lcygpOgotICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnN0cmlwKCkKLSAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJ0RlZmF1bHQgTGlicmFyeSBQYXRoIChFTEYpOicpOgotICAgICAgICAgICAgICAgICAgICBwYXRocyA9IGxpbmUuc3BsaXQoKVs0XQorICAgICAgICAgICAgd2l0aCBjb250ZXh0bGliLmNsb3Npbmcob3MucG9wZW4oY21kKSkgYXMgZjoKKyAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBmLnJlYWRsaW5lcygpOgorICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5zdHJpcCgpCisgICAgICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnRGVmYXVsdCBMaWJyYXJ5IFBhdGggKEVMRik6Jyk6CisgICAgICAgICAgICAgICAgICAgICAgICBwYXRocyA9IGxpbmUuc3BsaXQoKVs0XQogCiAgICAgICAgICAgICBpZiBub3QgcGF0aHM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKZGlmZiAtLWdpdCBhL0xpYi9kYXRldGltZS5weSBiL0xpYi9kYXRldGltZS5weQppbmRleCBkMWYzNTNiLi4zYWYxMmU3IDEwMDY0NAotLS0gYS9MaWIvZGF0ZXRpbWUucHkKKysrIGIvTGliL2RhdGV0aW1lLnB5CkBAIC0yMyw5ICsyMywxMCBAQAogIyBmb3IgYWxsIGNvbXB1dGF0aW9ucy4gIFNlZSB0aGUgYm9vayBmb3IgYWxnb3JpdGhtcyBmb3IgY29udmVydGluZyBiZXR3ZWVuCiAjIHByb2xlcHRpYyBHcmVnb3JpYW4gb3JkaW5hbHMgYW5kIG1hbnkgb3RoZXIgY2FsZW5kYXIgc3lzdGVtcy4KIAotX0RBWVNfSU5fTU9OVEggPSBbTm9uZSwgMzEsIDI4LCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMxLCAzMCwgMzEsIDMwLCAzMV0KKyMgLTEgaXMgYSBwbGFjZWhvbGRlciBmb3IgaW5kZXhpbmcgcHVycG9zZXMuCitfREFZU19JTl9NT05USCA9IFstMSwgMzEsIDI4LCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMxLCAzMCwgMzEsIDMwLCAzMV0KIAotX0RBWVNfQkVGT1JFX01PTlRIID0gW05vbmVdCitfREFZU19CRUZPUkVfTU9OVEggPSBbLTFdICMgLTEgaXMgYSBwbGFjZWhvbGRlciBmb3IgaW5kZXhpbmcgcHVycG9zZXMuCiBkYm0gPSAwCiBmb3IgZGltIGluIF9EQVlTX0lOX01PTlRIWzE6XToKICAgICBfREFZU19CRUZPUkVfTU9OVEguYXBwZW5kKGRibSkKQEAgLTI3OSw2ICsyODAsMjUgQEAKICAgICByYWlzZSBUeXBlRXJyb3IoImNhbid0IGNvbXBhcmUgJyVzJyB0byAnJXMnIiAlICgKICAgICAgICAgICAgICAgICAgICAgdHlwZSh4KS5fX25hbWVfXywgdHlwZSh5KS5fX25hbWVfXykpCiAKK2RlZiBfZGl2aWRlX2FuZF9yb3VuZChhLCBiKToKKyAgICAiIiJkaXZpZGUgYSBieSBiIGFuZCByb3VuZCByZXN1bHQgdG8gdGhlIG5lYXJlc3QgaW50ZWdlcgorCisgICAgV2hlbiB0aGUgcmF0aW8gaXMgZXhhY3RseSBoYWxmLXdheSBiZXR3ZWVuIHR3byBpbnRlZ2VycywKKyAgICB0aGUgZXZlbiBpbnRlZ2VyIGlzIHJldHVybmVkLgorICAgICIiIgorICAgICMgQmFzZWQgb24gdGhlIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBmb3IgZGl2bW9kX25lYXIKKyAgICAjIGluIE9iamVjdHMvbG9uZ29iamVjdC5jLgorICAgIHEsIHIgPSBkaXZtb2QoYSwgYikKKyAgICAjIHJvdW5kIHVwIGlmIGVpdGhlciByIC8gYiA+IDAuNSwgb3IgciAvIGIgPT0gMC41IGFuZCBxIGlzIG9kZC4KKyAgICAjIFRoZSBleHByZXNzaW9uIHIgLyBiID4gMC41IGlzIGVxdWl2YWxlbnQgdG8gMiAqIHIgPiBiIGlmIGIgaXMKKyAgICAjIHBvc2l0aXZlLCAyICogciA8IGIgaWYgYiBuZWdhdGl2ZS4KKyAgICByICo9IDIKKyAgICBncmVhdGVyX3RoYW5faGFsZiA9IHIgPiBiIGlmIGIgPiAwIGVsc2UgciA8IGIKKyAgICBpZiBncmVhdGVyX3RoYW5faGFsZiBvciByID09IGIgYW5kIHEgJSAyID09IDE6CisgICAgICAgIHEgKz0gMQorCisgICAgcmV0dXJuIHEKKwogY2xhc3MgdGltZWRlbHRhOgogICAgICIiIlJlcHJlc2VudCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHR3byBkYXRldGltZSBvYmplY3RzLgogCkBAIC01MDUsOCArNTI1LDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fc2Vjb25kcyAqIG90aGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9taWNyb3NlY29uZHMgKiBvdGhlcikKICAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgZmxvYXQpOgorICAgICAgICAgICAgdXNlYyA9IHNlbGYuX3RvX21pY3Jvc2Vjb25kcygpCiAgICAgICAgICAgICBhLCBiID0gb3RoZXIuYXNfaW50ZWdlcl9yYXRpbygpCi0gICAgICAgICAgICByZXR1cm4gc2VsZiAqIGEgLyBiCisgICAgICAgICAgICByZXR1cm4gdGltZWRlbHRhKDAsIDAsIF9kaXZpZGVfYW5kX3JvdW5kKHVzZWMgKiBhLCBiKSkKICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCiAKICAgICBfX3JtdWxfXyA9IF9fbXVsX18KQEAgLTUzMSwxMCArNTUyLDEwIEBACiAgICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIHRpbWVkZWx0YSk6CiAgICAgICAgICAgICByZXR1cm4gdXNlYyAvIG90aGVyLl90b19taWNyb3NlY29uZHMoKQogICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBpbnQpOgotICAgICAgICAgICAgcmV0dXJuIHRpbWVkZWx0YSgwLCAwLCB1c2VjIC8gb3RoZXIpCisgICAgICAgICAgICByZXR1cm4gdGltZWRlbHRhKDAsIDAsIF9kaXZpZGVfYW5kX3JvdW5kKHVzZWMsIG90aGVyKSkKICAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgZmxvYXQpOgogICAgICAgICAgICAgYSwgYiA9IG90aGVyLmFzX2ludGVnZXJfcmF0aW8oKQotICAgICAgICAgICAgcmV0dXJuIHRpbWVkZWx0YSgwLCAwLCBiICogdXNlYyAvIGEpCisgICAgICAgICAgICByZXR1cm4gdGltZWRlbHRhKDAsIDAsIF9kaXZpZGVfYW5kX3JvdW5kKGIgKiB1c2VjLCBhKSkKIAogICAgIGRlZiBfX21vZF9fKHNlbGYsIG90aGVyKToKICAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgdGltZWRlbHRhKToKQEAgLTYyNSw3ICs2NDYsNyBAQAogICAgIE9wZXJhdG9yczoKIAogICAgIF9fcmVwcl9fLCBfX3N0cl9fCi0gICAgX19jbXBfXywgX19oYXNoX18KKyAgICBfX2VxX18sIF9fbGVfXywgX19sdF9fLCBfX2dlX18sIF9fZ3RfXywgX19oYXNoX18KICAgICBfX2FkZF9fLCBfX3JhZGRfXywgX19zdWJfXyAoYWRkL3JhZGQgb25seSB3aXRoIHRpbWVkZWx0YSBhcmcpCiAKICAgICBNZXRob2RzOgpAQCAtNzU1LDcgKzc3Niw4IEBACiAgICAgICAgICIiImRheSAoMS0zMSkiIiIKICAgICAgICAgcmV0dXJuIHNlbGYuX2RheQogCi0gICAgIyBTdGFuZGFyZCBjb252ZXJzaW9ucywgX19jbXBfXywgX19oYXNoX18gKGFuZCBoZWxwZXJzKQorICAgICMgU3RhbmRhcmQgY29udmVyc2lvbnMsIF9fZXFfXywgX19sZV9fLCBfX2x0X18sIF9fZ2VfXywgX19ndF9fLAorICAgICMgX19oYXNoX18gKGFuZCBoZWxwZXJzKQogCiAgICAgZGVmIHRpbWV0dXBsZShzZWxmKToKICAgICAgICAgIlJldHVybiBsb2NhbCB0aW1lIHR1cGxlIGNvbXBhdGlibGUgd2l0aCB0aW1lLmxvY2FsdGltZSgpLiIKQEAgLTk4NCw3ICsxMDA2LDcgQEAKICAgICBPcGVyYXRvcnM6CiAKICAgICBfX3JlcHJfXywgX19zdHJfXwotICAgIF9fY21wX18sIF9faGFzaF9fCisgICAgX19lcV9fLCBfX2xlX18sIF9fbHRfXywgX19nZV9fLCBfX2d0X18sIF9faGFzaF9fCiAKICAgICBNZXRob2RzOgogCkBAIC0xMzQwLDQ5ICsxMzYyLDQyIEBACiAgICAgICAgIHJldHVybiBzZWxmLl90emluZm8KIAogICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfZnJvbXRpbWVzdGFtcChjbHMsIHQsIHV0YywgdHopOgorICAgICAgICAiIiJDb25zdHJ1Y3QgYSBkYXRldGltZSBmcm9tIGEgUE9TSVggdGltZXN0YW1wIChsaWtlIHRpbWUudGltZSgpKS4KKworICAgICAgICBBIHRpbWV6b25lIGluZm8gb2JqZWN0IG1heSBiZSBwYXNzZWQgaW4gYXMgd2VsbC4KKyAgICAgICAgIiIiCisgICAgICAgIGZyYWMsIHQgPSBfbWF0aC5tb2RmKHQpCisgICAgICAgIHVzID0gcm91bmQoZnJhYyAqIDFlNikKKyAgICAgICAgaWYgdXMgPj0gMTAwMDAwMDoKKyAgICAgICAgICAgIHQgKz0gMQorICAgICAgICAgICAgdXMgLT0gMTAwMDAwMAorICAgICAgICBlbGlmIHVzIDwgMDoKKyAgICAgICAgICAgIHQgLT0gMQorICAgICAgICAgICAgdXMgKz0gMTAwMDAwMAorCisgICAgICAgIGNvbnZlcnRlciA9IF90aW1lLmdtdGltZSBpZiB1dGMgZWxzZSBfdGltZS5sb2NhbHRpbWUKKyAgICAgICAgeSwgbSwgZCwgaGgsIG1tLCBzcywgd2Vla2RheSwgamRheSwgZHN0ID0gY29udmVydGVyKHQpCisgICAgICAgIHNzID0gbWluKHNzLCA1OSkgICAgIyBjbGFtcCBvdXQgbGVhcCBzZWNvbmRzIGlmIHRoZSBwbGF0Zm9ybSBoYXMgdGhlbQorICAgICAgICByZXR1cm4gY2xzKHksIG0sIGQsIGhoLCBtbSwgc3MsIHVzLCB0eikKKworICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBmcm9tdGltZXN0YW1wKGNscywgdCwgdHo9Tm9uZSk6CiAgICAgICAgICIiIkNvbnN0cnVjdCBhIGRhdGV0aW1lIGZyb20gYSBQT1NJWCB0aW1lc3RhbXAgKGxpa2UgdGltZS50aW1lKCkpLgogCiAgICAgICAgIEEgdGltZXpvbmUgaW5mbyBvYmplY3QgbWF5IGJlIHBhc3NlZCBpbiBhcyB3ZWxsLgogICAgICAgICAiIiIKLQogICAgICAgICBfY2hlY2tfdHppbmZvX2FyZyh0eikKIAotICAgICAgICBjb252ZXJ0ZXIgPSBfdGltZS5sb2NhbHRpbWUgaWYgdHogaXMgTm9uZSBlbHNlIF90aW1lLmdtdGltZQotCi0gICAgICAgIHQsIGZyYWMgPSBkaXZtb2QodCwgMS4wKQotICAgICAgICB1cyA9IGludChmcmFjICogMWU2KQotCi0gICAgICAgICMgSWYgdGltZXN0YW1wIGlzIGxlc3MgdGhhbiBvbmUgbWljcm9zZWNvbmQgc21hbGxlciB0aGFuIGEKLSAgICAgICAgIyBmdWxsIHNlY29uZCwgdXMgY2FuIGJlIHJvdW5kZWQgdXAgdG8gMTAwMDAwMC4gIEluIHRoaXMgY2FzZSwKLSAgICAgICAgIyByb2xsIG92ZXIgdG8gc2Vjb25kcywgb3RoZXJ3aXNlLCBWYWx1ZUVycm9yIGlzIHJhaXNlZAotICAgICAgICAjIGJ5IHRoZSBjb25zdHJ1Y3Rvci4KLSAgICAgICAgaWYgdXMgPT0gMTAwMDAwMDoKLSAgICAgICAgICAgIHQgKz0gMQotICAgICAgICAgICAgdXMgPSAwCi0gICAgICAgIHksIG0sIGQsIGhoLCBtbSwgc3MsIHdlZWtkYXksIGpkYXksIGRzdCA9IGNvbnZlcnRlcih0KQotICAgICAgICBzcyA9IG1pbihzcywgNTkpICAgICMgY2xhbXAgb3V0IGxlYXAgc2Vjb25kcyBpZiB0aGUgcGxhdGZvcm0gaGFzIHRoZW0KLSAgICAgICAgcmVzdWx0ID0gY2xzKHksIG0sIGQsIGhoLCBtbSwgc3MsIHVzLCB0eikKKyAgICAgICAgcmVzdWx0ID0gY2xzLl9mcm9tdGltZXN0YW1wKHQsIHR6IGlzIG5vdCBOb25lLCB0eikKICAgICAgICAgaWYgdHogaXMgbm90IE5vbmU6CiAgICAgICAgICAgICByZXN1bHQgPSB0ei5mcm9tdXRjKHJlc3VsdCkKICAgICAgICAgcmV0dXJuIHJlc3VsdAogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIHV0Y2Zyb210aW1lc3RhbXAoY2xzLCB0KToKLSAgICAgICAgIkNvbnN0cnVjdCBhIFVUQyBkYXRldGltZSBmcm9tIGEgUE9TSVggdGltZXN0YW1wIChsaWtlIHRpbWUudGltZSgpKS4iCi0gICAgICAgIHQsIGZyYWMgPSBkaXZtb2QodCwgMS4wKQotICAgICAgICB1cyA9IGludChmcmFjICogMWU2KQotCi0gICAgICAgICMgSWYgdGltZXN0YW1wIGlzIGxlc3MgdGhhbiBvbmUgbWljcm9zZWNvbmQgc21hbGxlciB0aGFuIGEKLSAgICAgICAgIyBmdWxsIHNlY29uZCwgdXMgY2FuIGJlIHJvdW5kZWQgdXAgdG8gMTAwMDAwMC4gIEluIHRoaXMgY2FzZSwKLSAgICAgICAgIyByb2xsIG92ZXIgdG8gc2Vjb25kcywgb3RoZXJ3aXNlLCBWYWx1ZUVycm9yIGlzIHJhaXNlZAotICAgICAgICAjIGJ5IHRoZSBjb25zdHJ1Y3Rvci4KLSAgICAgICAgaWYgdXMgPT0gMTAwMDAwMDoKLSAgICAgICAgICAgIHQgKz0gMQotICAgICAgICAgICAgdXMgPSAwCi0gICAgICAgIHksIG0sIGQsIGhoLCBtbSwgc3MsIHdlZWtkYXksIGpkYXksIGRzdCA9IF90aW1lLmdtdGltZSh0KQotICAgICAgICBzcyA9IG1pbihzcywgNTkpICAgICMgY2xhbXAgb3V0IGxlYXAgc2Vjb25kcyBpZiB0aGUgcGxhdGZvcm0gaGFzIHRoZW0KLSAgICAgICAgcmV0dXJuIGNscyh5LCBtLCBkLCBoaCwgbW0sIHNzLCB1cykKKyAgICAgICAgIiIiQ29uc3RydWN0IGEgbmFpdmUgVVRDIGRhdGV0aW1lIGZyb20gYSBQT1NJWCB0aW1lc3RhbXAuIiIiCisgICAgICAgIHJldHVybiBjbHMuX2Zyb210aW1lc3RhbXAodCwgVHJ1ZSwgTm9uZSkKIAogICAgICMgWFhYIFRoaXMgaXMgc3VwcG9zZWQgdG8gZG8gYmV0dGVyIHRoYW4gd2UgKmNhbiogZG8gYnkgdXNpbmcgdGltZS50aW1lKCksCiAgICAgIyBYWFggaWYgdGhlIHBsYXRmb3JtIHN1cHBvcnRzIGEgbW9yZSBhY2N1cmF0ZSB3YXkuICBUaGUgQyBpbXBsZW1lbnRhdGlvbgpAQCAtMTkxNywyMDMgKzE5MzIsMjAzIEBACiB0aW1lem9uZS5taW4gPSB0aW1lem9uZS5fY3JlYXRlKHRpbWV6b25lLl9taW5vZmZzZXQpCiB0aW1lem9uZS5tYXggPSB0aW1lem9uZS5fY3JlYXRlKHRpbWV6b25lLl9tYXhvZmZzZXQpCiBfRVBPQ0ggPSBkYXRldGltZSgxOTcwLCAxLCAxLCB0emluZm89dGltZXpvbmUudXRjKQotIiIiCi1Tb21lIHRpbWUgem9uZSBhbGdlYnJhLiAgRm9yIGEgZGF0ZXRpbWUgeCwgbGV0Ci0gICAgeC5uID0geCBzdHJpcHBlZCBvZiBpdHMgdGltZXpvbmUgLS0gaXRzIG5haXZlIHRpbWUuCi0gICAgeC5vID0geC51dGNvZmZzZXQoKSwgYW5kIGFzc3VtaW5nIHRoYXQgZG9lc24ndCByYWlzZSBhbiBleGNlcHRpb24gb3IKLSAgICAgICAgICByZXR1cm4gTm9uZQotICAgIHguZCA9IHguZHN0KCksIGFuZCBhc3N1bWluZyB0aGF0IGRvZXNuJ3QgcmFpc2UgYW4gZXhjZXB0aW9uIG9yCi0gICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICB4LnMgPSB4J3Mgc3RhbmRhcmQgb2Zmc2V0LCB4Lm8gLSB4LmQKIAotTm93IHNvbWUgZGVyaXZlZCBydWxlcywgd2hlcmUgayBpcyBhIGR1cmF0aW9uICh0aW1lZGVsdGEpLgorIyBTb21lIHRpbWUgem9uZSBhbGdlYnJhLiAgRm9yIGEgZGF0ZXRpbWUgeCwgbGV0CisjICAgICB4Lm4gPSB4IHN0cmlwcGVkIG9mIGl0cyB0aW1lem9uZSAtLSBpdHMgbmFpdmUgdGltZS4KKyMgICAgIHgubyA9IHgudXRjb2Zmc2V0KCksIGFuZCBhc3N1bWluZyB0aGF0IGRvZXNuJ3QgcmFpc2UgYW4gZXhjZXB0aW9uIG9yCisjICAgICAgICAgICByZXR1cm4gTm9uZQorIyAgICAgeC5kID0geC5kc3QoKSwgYW5kIGFzc3VtaW5nIHRoYXQgZG9lc24ndCByYWlzZSBhbiBleGNlcHRpb24gb3IKKyMgICAgICAgICAgIHJldHVybiBOb25lCisjICAgICB4LnMgPSB4J3Mgc3RhbmRhcmQgb2Zmc2V0LCB4Lm8gLSB4LmQKKyMKKyMgTm93IHNvbWUgZGVyaXZlZCBydWxlcywgd2hlcmUgayBpcyBhIGR1cmF0aW9uICh0aW1lZGVsdGEpLgorIworIyAxLiB4Lm8gPSB4LnMgKyB4LmQKKyMgICAgVGhpcyBmb2xsb3dzIGZyb20gdGhlIGRlZmluaXRpb24gb2YgeC5zLgorIworIyAyLiBJZiB4IGFuZCB5IGhhdmUgdGhlIHNhbWUgdHppbmZvIG1lbWJlciwgeC5zID0geS5zLgorIyAgICBUaGlzIGlzIGFjdHVhbGx5IGEgcmVxdWlyZW1lbnQsIGFuIGFzc3VtcHRpb24gd2UgbmVlZCB0byBtYWtlIGFib3V0CisjICAgIHNhbmUgdHppbmZvIGNsYXNzZXMuCisjCisjIDMuIFRoZSBuYWl2ZSBVVEMgdGltZSBjb3JyZXNwb25kaW5nIHRvIHggaXMgeC5uIC0geC5vLgorIyAgICBUaGlzIGlzIGFnYWluIGEgcmVxdWlyZW1lbnQgZm9yIGEgc2FuZSB0emluZm8gY2xhc3MuCisjCisjIDQuICh4K2spLnMgPSB4LnMKKyMgICAgVGhpcyBmb2xsb3dzIGZyb20gIzIsIGFuZCB0aGF0IGRhdGltZXRpbWV0eit0aW1lZGVsdGEgcHJlc2VydmVzIHR6aW5mby4KKyMKKyMgNS4gKHgraykubiA9IHgubiArIGsKKyMgICAgQWdhaW4gZm9sbG93cyBmcm9tIGhvdyBhcml0aG1ldGljIGlzIGRlZmluZWQuCisjCisjIE5vdyB3ZSBjYW4gZXhwbGFpbiB0ei5mcm9tdXRjKHgpLiAgTGV0J3MgYXNzdW1lIGl0J3MgYW4gaW50ZXJlc3RpbmcgY2FzZQorIyAobWVhbmluZyB0aGF0IHRoZSB2YXJpb3VzIHR6aW5mbyBtZXRob2RzIGV4aXN0LCBhbmQgZG9uJ3QgYmxvdyB1cCBvciByZXR1cm4KKyMgTm9uZSB3aGVuIGNhbGxlZCkuCisjCisjIFRoZSBmdW5jdGlvbiB3YW50cyB0byByZXR1cm4gYSBkYXRldGltZSB5IHdpdGggdGltZXpvbmUgdHosIGVxdWl2YWxlbnQgdG8geC4KKyMgeCBpcyBhbHJlYWR5IGluIFVUQy4KKyMKKyMgQnkgIzMsIHdlIHdhbnQKKyMKKyMgICAgIHkubiAtIHkubyA9IHgubiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzFdCisjCisjIFRoZSBhbGdvcml0aG0gc3RhcnRzIGJ5IGF0dGFjaGluZyB0eiB0byB4Lm4sIGFuZCBjYWxsaW5nIHRoYXQgeS4gIFNvCisjIHgubiA9IHkubiBhdCB0aGUgc3RhcnQuICBUaGVuIGl0IHdhbnRzIHRvIGFkZCBhIGR1cmF0aW9uIGsgdG8geSwgc28gdGhhdCBbMV0KKyMgYmVjb21lcyB0cnVlOyBpbiBlZmZlY3QsIHdlIHdhbnQgdG8gc29sdmUgWzJdIGZvciBrOgorIworIyAgICAoeStrKS5uIC0gKHkraykubyA9IHgubiAgICAgICAgICAgICAgICAgICAgICBbMl0KKyMKKyMgQnkgIzEsIHRoaXMgaXMgdGhlIHNhbWUgYXMKKyMKKyMgICAgKHkraykubiAtICgoeStrKS5zICsgKHkraykuZCkgPSB4Lm4gICAgICAgICAgWzNdCisjCisjIEJ5ICM1LCAoeStrKS5uID0geS5uICsgaywgd2hpY2ggZXF1YWxzIHgubiArIGsgYmVjYXVzZSB4Lm49eS5uIGF0IHRoZSBzdGFydC4KKyMgU3Vic3RpdHV0aW5nIHRoYXQgaW50byBbM10sCisjCisjICAgIHgubiArIGsgLSAoeStrKS5zIC0gKHkraykuZCA9IHgubjsgdGhlIHgubiB0ZXJtcyBjYW5jZWwsIGxlYXZpbmcKKyMgICAgayAtICh5K2spLnMgLSAoeStrKS5kID0gMDsgcmVhcnJhbmdpbmcsCisjICAgIGsgPSAoeStrKS5zIC0gKHkraykuZDsgYnkgIzQsICh5K2spLnMgPT0geS5zLCBzbworIyAgICBrID0geS5zIC0gKHkraykuZAorIworIyBPbiB0aGUgUkhTLCAoeStrKS5kIGNhbid0IGJlIGNvbXB1dGVkIGRpcmVjdGx5LCBidXQgeS5zIGNhbiBiZSwgYW5kIHdlCisjIGFwcHJveGltYXRlIGsgYnkgaWdub3JpbmcgdGhlICh5K2spLmQgdGVybSBhdCBmaXJzdC4gIE5vdGUgdGhhdCBrIGNhbid0IGJlCisjIHZlcnkgbGFyZ2UsIHNpbmNlIGFsbCBvZmZzZXQtcmV0dXJuaW5nIG1ldGhvZHMgcmV0dXJuIGEgZHVyYXRpb24gb2YgbWFnbml0dWRlCisjIGxlc3MgdGhhbiAyNCBob3Vycy4gIEZvciB0aGF0IHJlYXNvbiwgaWYgeSBpcyBmaXJtbHkgaW4gc3RkIHRpbWUsICh5K2spLmQgbXVzdAorIyBiZSAwLCBzbyBpZ25vcmluZyBpdCBoYXMgbm8gY29uc2VxdWVuY2UgdGhlbi4KKyMKKyMgSW4gYW55IGNhc2UsIHRoZSBuZXcgdmFsdWUgaXMKKyMKKyMgICAgIHogPSB5ICsgeS5zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzRdCisjCisjIEl0J3MgaGVscGZ1bCB0byBzdGVwIGJhY2sgYXQgbG9vayBhdCBbNF0gZnJvbSBhIGhpZ2hlciBsZXZlbDogIGl0J3Mgc2ltcGx5CisjIG1hcHBpbmcgZnJvbSBVVEMgdG8gdHoncyBzdGFuZGFyZCB0aW1lLgorIworIyBBdCB0aGlzIHBvaW50LCBpZgorIworIyAgICAgei5uIC0gei5vID0geC5uICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbNV0KKyMKKyMgd2UgaGF2ZSBhbiBlcXVpdmFsZW50IHRpbWUsIGFuZCBhcmUgYWxtb3N0IGRvbmUuICBUaGUgaW5zZWN1cml0eSBoZXJlIGlzCisjIGF0IHRoZSBzdGFydCBvZiBkYXlsaWdodCB0aW1lLiAgUGljdHVyZSBVUyBFYXN0ZXJuIGZvciBjb25jcmV0ZW5lc3MuICBUaGUgd2FsbAorIyB0aW1lIGp1bXBzIGZyb20gMTo1OSB0byAzOjAwLCBhbmQgd2FsbCBob3VycyBvZiB0aGUgZm9ybSAyOk1NIGRvbid0IG1ha2UgZ29vZAorIyBzZW5zZSB0aGVuLiAgVGhlIGRvY3MgYXNrIHRoYXQgYW4gRWFzdGVybiB0emluZm8gY2xhc3MgY29uc2lkZXIgc3VjaCBhIHRpbWUgdG8KKyMgYmUgRURUIChiZWNhdXNlIGl0J3MgImFmdGVyIDIiKSwgd2hpY2ggaXMgYSByZWR1bmRhbnQgc3BlbGxpbmcgb2YgMTpNTSBFU1QKKyMgb24gdGhlIGRheSBEU1Qgc3RhcnRzLiAgV2Ugd2FudCB0byByZXR1cm4gdGhlIDE6TU0gRVNUIHNwZWxsaW5nIGJlY2F1c2UgdGhhdCdzCisjIHRoZSBvbmx5IHNwZWxsaW5nIHRoYXQgbWFrZXMgc2Vuc2Ugb24gdGhlIGxvY2FsIHdhbGwgY2xvY2suCisjCisjIEluIGZhY3QsIGlmIFs1XSBob2xkcyBhdCB0aGlzIHBvaW50LCB3ZSBkbyBoYXZlIHRoZSBzdGFuZGFyZC10aW1lIHNwZWxsaW5nLAorIyBidXQgdGhhdCB0YWtlcyBhIGJpdCBvZiBwcm9vZi4gIFdlIGZpcnN0IHByb3ZlIGEgc3Ryb25nZXIgcmVzdWx0LiAgV2hhdCdzIHRoZQorIyBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIExIUyBhbmQgUkhTIG9mIFs1XT8gIExldAorIworIyAgICAgZGlmZiA9IHgubiAtICh6Lm4gLSB6Lm8pICAgICAgICAgICAgICAgICAgICBbNl0KKyMKKyMgTm93CisjICAgICB6Lm4gPSAgICAgICAgICAgICAgICAgICAgICAgYnkgWzRdCisjICAgICAoeSArIHkucykubiA9ICAgICAgICAgICAgICAgYnkgIzUKKyMgICAgIHkubiArIHkucyA9ICAgICAgICAgICAgICAgICBzaW5jZSB5Lm4gPSB4Lm4KKyMgICAgIHgubiArIHkucyA9ICAgICAgICAgICAgICAgICBzaW5jZSB6IGFuZCB5IGFyZSBoYXZlIHRoZSBzYW1lIHR6aW5mbyBtZW1iZXIsCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkucyA9IHoucyBieSAjMgorIyAgICAgeC5uICsgei5zCisjCisjIFBsdWdnaW5nIHRoYXQgYmFjayBpbnRvIFs2XSBnaXZlcworIworIyAgICAgZGlmZiA9CisjICAgICB4Lm4gLSAoKHgubiArIHoucykgLSB6Lm8pID0gICAgIGV4cGFuZGluZworIyAgICAgeC5uIC0geC5uIC0gei5zICsgei5vID0gICAgICAgICBjYW5jZWxsaW5nCisjICAgICAtIHoucyArIHoubyA9ICAgICAgICAgICAgICAgICAgIGJ5ICMyCisjICAgICB6LmQKKyMKKyMgU28gZGlmZiA9IHouZC4KKyMKKyMgSWYgWzVdIGlzIHRydWUgbm93LCBkaWZmID0gMCwgc28gei5kID0gMCB0b28sIGFuZCB3ZSBoYXZlIHRoZSBzdGFuZGFyZC10aW1lCisjIHNwZWxsaW5nIHdlIHdhbnRlZCBpbiB0aGUgZW5kY2FzZSBkZXNjcmliZWQgYWJvdmUuICBXZSdyZSBkb25lLiAgQ29udHJhcmlseSwKKyMgaWYgei5kID0gMCwgdGhlbiB3ZSBoYXZlIGEgVVRDIGVxdWl2YWxlbnQsIGFuZCBhcmUgYWxzbyBkb25lLgorIworIyBJZiBbNV0gaXMgbm90IHRydWUgbm93LCBkaWZmID0gei5kICE9IDAsIGFuZCB6LmQgaXMgdGhlIG9mZnNldCB3ZSBuZWVkIHRvCisjIGFkZCB0byB6IChpbiBlZmZlY3QsIHogaXMgaW4gdHoncyBzdGFuZGFyZCB0aW1lLCBhbmQgd2UgbmVlZCB0byBzaGlmdCB0aGUKKyMgbG9jYWwgY2xvY2sgaW50byB0eidzIGRheWxpZ2h0IHRpbWUpLgorIworIyBMZXQKKyMKKyMgICAgIHonID0geiArIHouZCA9IHogKyBkaWZmICAgICAgICAgICAgICAgICAgICAgWzddCisjCisjIGFuZCB3ZSBjYW4gYWdhaW4gYXNrIHdoZXRoZXIKKyMKKyMgICAgIHonLm4gLSB6Jy5vID0geC5uICAgICAgICAgICAgICAgICAgICAgICAgICAgWzhdCisjCisjIElmIHNvLCB3ZSdyZSBkb25lLiAgSWYgbm90LCB0aGUgdHppbmZvIGNsYXNzIGlzIGluc2FuZSwgYWNjb3JkaW5nIHRvIHRoZQorIyBhc3N1bXB0aW9ucyB3ZSd2ZSBtYWRlLiAgVGhpcyBhbHNvIHJlcXVpcmVzIGEgYml0IG9mIHByb29mLiAgQXMgYmVmb3JlLCBsZXQncworIyBjb21wdXRlIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIExIUyBhbmQgUkhTIG9mIFs4XSAoYW5kIHNraXBwaW5nIHNvbWUgb2YKKyMgdGhlIGp1c3RpZmljYXRpb25zIGZvciB0aGUga2luZHMgb2Ygc3Vic3RpdHV0aW9ucyB3ZSd2ZSBkb25lIHNldmVyYWwgdGltZXMKKyMgYWxyZWFkeSk6CisjCisjICAgICBkaWZmJyA9IHgubiAtICh6Jy5uIC0geicubykgPSAgICAgICAgICAgcmVwbGFjaW5nIHonLm4gdmlhIFs3XQorIyAgICAgICAgICAgICB4Lm4gIC0gKHoubiArIGRpZmYgLSB6Jy5vKSA9ICAgIHJlcGxhY2luZyBkaWZmIHZpYSBbNl0KKyMgICAgICAgICAgICAgeC5uIC0gKHoubiArIHgubiAtICh6Lm4gLSB6Lm8pIC0geicubykgPQorIyAgICAgICAgICAgICB4Lm4gLSB6Lm4gLSB4Lm4gKyB6Lm4gLSB6Lm8gKyB6Jy5vID0gICAgY2FuY2VsIHgubgorIyAgICAgICAgICAgICAtIHoubiArIHoubiAtIHoubyArIHonLm8gPSAgICAgICAgICAgICAgY2FuY2VsIHoubgorIyAgICAgICAgICAgICAtIHoubyArIHonLm8gPSAgICAgICAgICAgICAgICAgICAgICAjMSB0d2ljZQorIyAgICAgICAgICAgICAtei5zIC0gei5kICsgeicucyArIHonLmQgPSAgICAgICAgICB6IGFuZCB6JyBoYXZlIHNhbWUgdHppbmZvCisjICAgICAgICAgICAgIHonLmQgLSB6LmQKKyMKKyMgU28geicgaXMgVVRDLWVxdWl2YWxlbnQgdG8geCBpZmYgeicuZCA9IHouZCBhdCB0aGlzIHBvaW50LiAgSWYgdGhleSBhcmUgZXF1YWwsCisjIHdlJ3ZlIGZvdW5kIHRoZSBVVEMtZXF1aXZhbGVudCBzbyBhcmUgZG9uZS4gIEluIGZhY3QsIHdlIHN0b3Agd2l0aCBbN10gYW5kCisjIHJldHVybiB6Jywgbm90IGJvdGhlcmluZyB0byBjb21wdXRlIHonLmQuCisjCisjIEhvdyBjb3VsZCB6LmQgYW5kIHonZCBkaWZmZXI/ICB6JyA9IHogKyB6LmQgWzddLCBzbyBtZXJlbHkgbW92aW5nIHonIGJ5CisjIGEgZHN0KCkgb2Zmc2V0LCBhbmQgc3RhcnRpbmcgKmZyb20qIGEgdGltZSBhbHJlYWR5IGluIERTVCAod2Uga25vdyB6LmQgIT0gMCksCisjIHdvdWxkIGhhdmUgdG8gY2hhbmdlIHRoZSByZXN1bHQgZHN0KCkgcmV0dXJuczogIHdlIHN0YXJ0IGluIERTVCwgYW5kIG1vdmluZworIyBhIGxpdHRsZSBmdXJ0aGVyIGludG8gaXQgdGFrZXMgdXMgb3V0IG9mIERTVC4KKyMKKyMgVGhlcmUgaXNuJ3QgYSBzYW5lIGNhc2Ugd2hlcmUgdGhpcyBjYW4gaGFwcGVuLiAgVGhlIGNsb3Nlc3QgaXQgZ2V0cyBpcyBhdAorIyB0aGUgZW5kIG9mIERTVCwgd2hlcmUgdGhlcmUncyBhbiBob3VyIGluIFVUQyB3aXRoIG5vIHNwZWxsaW5nIGluIGEgaHlicmlkCisjIHR6aW5mbyBjbGFzcy4gIEluIFVTIEVhc3Rlcm4sIHRoYXQncyA1Ok1NIFVUQyA9IDA6TU0gRVNUID0gMTpNTSBFRFQuICBEdXJpbmcKKyMgdGhhdCBob3VyLCBvbiBhbiBFYXN0ZXJuIGNsb2NrIDE6TU0gaXMgdGFrZW4gYXMgYmVpbmcgaW4gc3RhbmRhcmQgdGltZSAoNjpNTQorIyBVVEMpIGJlY2F1c2UgdGhlIGRvY3MgaW5zaXN0IG9uIHRoYXQsIGJ1dCAwOk1NIGlzIHRha2VuIGFzIGJlaW5nIGluIGRheWxpZ2h0CisjIHRpbWUgKDQ6TU0gVVRDKS4gIFRoZXJlIGlzIG5vIGxvY2FsIHRpbWUgbWFwcGluZyB0byA1Ok1NIFVUQy4gIFRoZSBsb2NhbAorIyBjbG9jayBqdW1wcyBmcm9tIDE6NTkgYmFjayB0byAxOjAwIGFnYWluLCBhbmQgcmVwZWF0cyB0aGUgMTpNTSBob3VyIGluCisjIHN0YW5kYXJkIHRpbWUuICBTaW5jZSB0aGF0J3Mgd2hhdCB0aGUgbG9jYWwgY2xvY2sgKmRvZXMqLCB3ZSB3YW50IHRvIG1hcCBib3RoCisjIFVUQyBob3VycyA1Ok1NIGFuZCA2Ok1NIHRvIDE6TU0gRWFzdGVybi4gIFRoZSByZXN1bHQgaXMgYW1iaWd1b3VzCisjIGluIGxvY2FsIHRpbWUsIGJ1dCBzbyBpdCBnb2VzIC0tIGl0J3MgdGhlIHdheSB0aGUgbG9jYWwgY2xvY2sgd29ya3MuCisjCisjIFdoZW4geCA9IDU6TU0gVVRDIGlzIHRoZSBpbnB1dCB0byB0aGlzIGFsZ29yaXRobSwgeC5vPTAsIHkubz0tNSBhbmQgeS5kPTAsCisjIHNvIHo9MDpNTS4gIHouZD02MCAobWludXRlcykgdGhlbiwgc28gWzVdIGRvZXNuJ3QgaG9sZCBhbmQgd2Uga2VlcCBnb2luZy4KKyMgeicgPSB6ICsgei5kID0gMTpNTSB0aGVuLCBhbmQgeicuZD0wLCBhbmQgeicuZCAtIHouZCA9IC02MCAhPSAwIHNvIFs4XQorIyAoY29ycmVjdGx5KSBjb25jbHVkZXMgdGhhdCB6JyBpcyBub3QgVVRDLWVxdWl2YWxlbnQgdG8geC4KKyMKKyMgQmVjYXVzZSB3ZSBrbm93IHouZCBzYWlkIHogd2FzIGluIGRheWxpZ2h0IHRpbWUgKGVsc2UgWzVdIHdvdWxkIGhhdmUgaGVsZCBhbmQKKyMgd2Ugd291bGQgaGF2ZSBzdG9wcGVkIHRoZW4pLCBhbmQgd2Uga25vdyB6LmQgIT0geicuZCAoZWxzZSBbOF0gd291bGQgaGF2ZSBoZWxkCisjIGFuZCB3ZSBoYXZlIHN0b3BwZWQgdGhlbiksIGFuZCB0aGVyZSBhcmUgb25seSAyIHBvc3NpYmxlIHZhbHVlcyBkc3QoKSBjYW4KKyMgcmV0dXJuIGluIEVhc3Rlcm4sIGl0IGZvbGxvd3MgdGhhdCB6Jy5kIG11c3QgYmUgMCAod2hpY2ggaXQgaXMgaW4gdGhlIGV4YW1wbGUsCisjIGJ1dCB0aGUgcmVhc29uaW5nIGRvZXNuJ3QgZGVwZW5kIG9uIHRoZSBleGFtcGxlIC0tIGl0IGRlcGVuZHMgb24gdGhlcmUgYmVpbmcKKyMgdHdvIHBvc3NpYmxlIGRzdCgpIG91dGNvbWVzLCBvbmUgemVybyBhbmQgdGhlIG90aGVyIG5vbi16ZXJvKS4gIFRoZXJlZm9yZQorIyB6JyBtdXN0IGJlIGluIHN0YW5kYXJkIHRpbWUsIGFuZCBpcyB0aGUgc3BlbGxpbmcgd2Ugd2FudCBpbiB0aGlzIGNhc2UuCisjCisjIE5vdGUgYWdhaW4gdGhhdCB6JyBpcyBub3QgVVRDLWVxdWl2YWxlbnQgYXMgZmFyIGFzIHRoZSBoeWJyaWQgdHppbmZvIGNsYXNzIGlzCisjIGNvbmNlcm5lZCAoYmVjYXVzZSBpdCB0YWtlcyB6JyBhcyBiZWluZyBpbiBzdGFuZGFyZCB0aW1lIHJhdGhlciB0aGFuIHRoZQorIyBkYXlsaWdodCB0aW1lIHdlIGludGVuZCBoZXJlKSwgYnV0IHJldHVybmluZyBpdCBnaXZlcyB0aGUgcmVhbC1saWZlICJsb2NhbAorIyBjbG9jayByZXBlYXRzIGFuIGhvdXIiIGJlaGF2aW9yIHdoZW4gbWFwcGluZyB0aGUgInVuc3BlbGxhYmxlIiBVVEMgaG91ciBpbnRvCisjIHR6LgorIworIyBXaGVuIHRoZSBpbnB1dCBpcyA2Ok1NLCB6PTE6TU0gYW5kIHouZD0wLCBhbmQgd2Ugc3RvcCBhdCBvbmNlLCBhZ2FpbiB3aXRoCisjIHRoZSAxOk1NIHN0YW5kYXJkIHRpbWUgc3BlbGxpbmcgd2Ugd2FudC4KKyMKKyMgU28gaG93IGNhbiB0aGlzIGJyZWFrPyAgT25lIG9mIHRoZSBhc3N1bXB0aW9ucyBtdXN0IGJlIHZpb2xhdGVkLiAgVHdvCisjIHBvc3NpYmlsaXRpZXM6CisjCisjIDEpIFsyXSBlZmZlY3RpdmVseSBzYXlzIHRoYXQgeS5zIGlzIGludmFyaWFudCBhY3Jvc3MgYWxsIHkgYmVsb25nIHRvIGEgZ2l2ZW4KKyMgICAgdGltZSB6b25lLiAgVGhpcyBpc24ndCB0cnVlIGlmLCBmb3IgcG9saXRpY2FsIHJlYXNvbnMgb3IgY29udGluZW50YWwgZHJpZnQsCisjICAgIGEgcmVnaW9uIGRlY2lkZXMgdG8gY2hhbmdlIGl0cyBiYXNlIG9mZnNldCBmcm9tIFVUQy4KKyMKKyMgMikgVGhlcmUgbWF5IGJlIHZlcnNpb25zIG9mICJkb3VibGUgZGF5bGlnaHQiIHRpbWUgd2hlcmUgdGhlIHRhaWwgZW5kIG9mCisjICAgIHRoZSBhbmFseXNpcyBnaXZlcyB1cCBhIHN0ZXAgdG9vIGVhcmx5LiAgSSBoYXZlbid0IHRob3VnaHQgYWJvdXQgdGhhdAorIyAgICBlbm91Z2ggdG8gc2F5LgorIworIyBJbiBhbnkgY2FzZSwgaXQncyBjbGVhciB0aGF0IHRoZSBkZWZhdWx0IGZyb211dGMoKSBpcyBzdHJvbmcgZW5vdWdoIHRvIGhhbmRsZQorIyAiYWxtb3N0IGFsbCIgdGltZSB6b25lczogIHNvIGxvbmcgYXMgdGhlIHN0YW5kYXJkIG9mZnNldCBpcyBpbnZhcmlhbnQsIGl0CisjIGRvZXNuJ3QgbWF0dGVyIGlmIGRheWxpZ2h0IHRpbWUgdHJhbnNpdGlvbiBwb2ludHMgY2hhbmdlIGZyb20geWVhciB0byB5ZWFyLCBvcgorIyBpZiBkYXlsaWdodCB0aW1lIGlzIHNraXBwZWQgaW4gc29tZSB5ZWFyczsgaXQgZG9lc24ndCBtYXR0ZXIgaG93IGxhcmdlIG9yCisjIHNtYWxsIGRzdCgpIG1heSBnZXQgd2l0aGluIGl0cyBib3VuZHM7IGFuZCBpdCBkb2Vzbid0IGV2ZW4gbWF0dGVyIGlmIHNvbWUKKyMgcGVydmVyc2UgdGltZSB6b25lIHJldHVybnMgYSBuZWdhdGl2ZSBkc3QoKSkuICBTbyBhIGJyZWFraW5nIGNhc2UgbXVzdCBiZQorIyBwcmV0dHkgYml6YXJyZSwgYW5kIGEgdHppbmZvIHN1YmNsYXNzIGNhbiBvdmVycmlkZSBmcm9tdXRjKCkgaWYgaXQgaXMuCiAKLTEuIHgubyA9IHgucyArIHguZAotICAgVGhpcyBmb2xsb3dzIGZyb20gdGhlIGRlZmluaXRpb24gb2YgeC5zLgotCi0yLiBJZiB4IGFuZCB5IGhhdmUgdGhlIHNhbWUgdHppbmZvIG1lbWJlciwgeC5zID0geS5zLgotICAgVGhpcyBpcyBhY3R1YWxseSBhIHJlcXVpcmVtZW50LCBhbiBhc3N1bXB0aW9uIHdlIG5lZWQgdG8gbWFrZSBhYm91dAotICAgc2FuZSB0emluZm8gY2xhc3Nlcy4KLQotMy4gVGhlIG5haXZlIFVUQyB0aW1lIGNvcnJlc3BvbmRpbmcgdG8geCBpcyB4Lm4gLSB4Lm8uCi0gICBUaGlzIGlzIGFnYWluIGEgcmVxdWlyZW1lbnQgZm9yIGEgc2FuZSB0emluZm8gY2xhc3MuCi0KLTQuICh4K2spLnMgPSB4LnMKLSAgIFRoaXMgZm9sbG93cyBmcm9tICMyLCBhbmQgdGhhdCBkYXRpbWV0aW1ldHordGltZWRlbHRhIHByZXNlcnZlcyB0emluZm8uCi0KLTUuICh4K2spLm4gPSB4Lm4gKyBrCi0gICBBZ2FpbiBmb2xsb3dzIGZyb20gaG93IGFyaXRobWV0aWMgaXMgZGVmaW5lZC4KLQotTm93IHdlIGNhbiBleHBsYWluIHR6LmZyb211dGMoeCkuICBMZXQncyBhc3N1bWUgaXQncyBhbiBpbnRlcmVzdGluZyBjYXNlCi0obWVhbmluZyB0aGF0IHRoZSB2YXJpb3VzIHR6aW5mbyBtZXRob2RzIGV4aXN0LCBhbmQgZG9uJ3QgYmxvdyB1cCBvciByZXR1cm4KLU5vbmUgd2hlbiBjYWxsZWQpLgotCi1UaGUgZnVuY3Rpb24gd2FudHMgdG8gcmV0dXJuIGEgZGF0ZXRpbWUgeSB3aXRoIHRpbWV6b25lIHR6LCBlcXVpdmFsZW50IHRvIHguCi14IGlzIGFscmVhZHkgaW4gVVRDLgotCi1CeSAjMywgd2Ugd2FudAotCi0gICAgeS5uIC0geS5vID0geC5uICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMV0KLQotVGhlIGFsZ29yaXRobSBzdGFydHMgYnkgYXR0YWNoaW5nIHR6IHRvIHgubiwgYW5kIGNhbGxpbmcgdGhhdCB5LiAgU28KLXgubiA9IHkubiBhdCB0aGUgc3RhcnQuICBUaGVuIGl0IHdhbnRzIHRvIGFkZCBhIGR1cmF0aW9uIGsgdG8geSwgc28gdGhhdCBbMV0KLWJlY29tZXMgdHJ1ZTsgaW4gZWZmZWN0LCB3ZSB3YW50IHRvIHNvbHZlIFsyXSBmb3IgazoKLQotICAgKHkraykubiAtICh5K2spLm8gPSB4Lm4gICAgICAgICAgICAgICAgICAgICAgWzJdCi0KLUJ5ICMxLCB0aGlzIGlzIHRoZSBzYW1lIGFzCi0KLSAgICh5K2spLm4gLSAoKHkraykucyArICh5K2spLmQpID0geC5uICAgICAgICAgIFszXQotCi1CeSAjNSwgKHkraykubiA9IHkubiArIGssIHdoaWNoIGVxdWFscyB4Lm4gKyBrIGJlY2F1c2UgeC5uPXkubiBhdCB0aGUgc3RhcnQuCi1TdWJzdGl0dXRpbmcgdGhhdCBpbnRvIFszXSwKLQotICAgeC5uICsgayAtICh5K2spLnMgLSAoeStrKS5kID0geC5uOyB0aGUgeC5uIHRlcm1zIGNhbmNlbCwgbGVhdmluZwotICAgayAtICh5K2spLnMgLSAoeStrKS5kID0gMDsgcmVhcnJhbmdpbmcsCi0gICBrID0gKHkraykucyAtICh5K2spLmQ7IGJ5ICM0LCAoeStrKS5zID09IHkucywgc28KLSAgIGsgPSB5LnMgLSAoeStrKS5kCi0KLU9uIHRoZSBSSFMsICh5K2spLmQgY2FuJ3QgYmUgY29tcHV0ZWQgZGlyZWN0bHksIGJ1dCB5LnMgY2FuIGJlLCBhbmQgd2UKLWFwcHJveGltYXRlIGsgYnkgaWdub3JpbmcgdGhlICh5K2spLmQgdGVybSBhdCBmaXJzdC4gIE5vdGUgdGhhdCBrIGNhbid0IGJlCi12ZXJ5IGxhcmdlLCBzaW5jZSBhbGwgb2Zmc2V0LXJldHVybmluZyBtZXRob2RzIHJldHVybiBhIGR1cmF0aW9uIG9mIG1hZ25pdHVkZQotbGVzcyB0aGFuIDI0IGhvdXJzLiAgRm9yIHRoYXQgcmVhc29uLCBpZiB5IGlzIGZpcm1seSBpbiBzdGQgdGltZSwgKHkraykuZCBtdXN0Ci1iZSAwLCBzbyBpZ25vcmluZyBpdCBoYXMgbm8gY29uc2VxdWVuY2UgdGhlbi4KLQotSW4gYW55IGNhc2UsIHRoZSBuZXcgdmFsdWUgaXMKLQotICAgIHogPSB5ICsgeS5zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzRdCi0KLUl0J3MgaGVscGZ1bCB0byBzdGVwIGJhY2sgYXQgbG9vayBhdCBbNF0gZnJvbSBhIGhpZ2hlciBsZXZlbDogIGl0J3Mgc2ltcGx5Ci1tYXBwaW5nIGZyb20gVVRDIHRvIHR6J3Mgc3RhbmRhcmQgdGltZS4KLQotQXQgdGhpcyBwb2ludCwgaWYKLQotICAgIHoubiAtIHoubyA9IHgubiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzVdCi0KLXdlIGhhdmUgYW4gZXF1aXZhbGVudCB0aW1lLCBhbmQgYXJlIGFsbW9zdCBkb25lLiAgVGhlIGluc2VjdXJpdHkgaGVyZSBpcwotYXQgdGhlIHN0YXJ0IG9mIGRheWxpZ2h0IHRpbWUuICBQaWN0dXJlIFVTIEVhc3Rlcm4gZm9yIGNvbmNyZXRlbmVzcy4gIFRoZSB3YWxsCi10aW1lIGp1bXBzIGZyb20gMTo1OSB0byAzOjAwLCBhbmQgd2FsbCBob3VycyBvZiB0aGUgZm9ybSAyOk1NIGRvbid0IG1ha2UgZ29vZAotc2Vuc2UgdGhlbi4gIFRoZSBkb2NzIGFzayB0aGF0IGFuIEVhc3Rlcm4gdHppbmZvIGNsYXNzIGNvbnNpZGVyIHN1Y2ggYSB0aW1lIHRvCi1iZSBFRFQgKGJlY2F1c2UgaXQncyAiYWZ0ZXIgMiIpLCB3aGljaCBpcyBhIHJlZHVuZGFudCBzcGVsbGluZyBvZiAxOk1NIEVTVAotb24gdGhlIGRheSBEU1Qgc3RhcnRzLiAgV2Ugd2FudCB0byByZXR1cm4gdGhlIDE6TU0gRVNUIHNwZWxsaW5nIGJlY2F1c2UgdGhhdCdzCi10aGUgb25seSBzcGVsbGluZyB0aGF0IG1ha2VzIHNlbnNlIG9uIHRoZSBsb2NhbCB3YWxsIGNsb2NrLgotCi1JbiBmYWN0LCBpZiBbNV0gaG9sZHMgYXQgdGhpcyBwb2ludCwgd2UgZG8gaGF2ZSB0aGUgc3RhbmRhcmQtdGltZSBzcGVsbGluZywKLWJ1dCB0aGF0IHRha2VzIGEgYml0IG9mIHByb29mLiAgV2UgZmlyc3QgcHJvdmUgYSBzdHJvbmdlciByZXN1bHQuICBXaGF0J3MgdGhlCi1kaWZmZXJlbmNlIGJldHdlZW4gdGhlIExIUyBhbmQgUkhTIG9mIFs1XT8gIExldAotCi0gICAgZGlmZiA9IHgubiAtICh6Lm4gLSB6Lm8pICAgICAgICAgICAgICAgICAgICBbNl0KLQotTm93Ci0gICAgei5uID0gICAgICAgICAgICAgICAgICAgICAgIGJ5IFs0XQotICAgICh5ICsgeS5zKS5uID0gICAgICAgICAgICAgICBieSAjNQotICAgIHkubiArIHkucyA9ICAgICAgICAgICAgICAgICBzaW5jZSB5Lm4gPSB4Lm4KLSAgICB4Lm4gKyB5LnMgPSAgICAgICAgICAgICAgICAgc2luY2UgeiBhbmQgeSBhcmUgaGF2ZSB0aGUgc2FtZSB0emluZm8gbWVtYmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeS5zID0gei5zIGJ5ICMyCi0gICAgeC5uICsgei5zCi0KLVBsdWdnaW5nIHRoYXQgYmFjayBpbnRvIFs2XSBnaXZlcwotCi0gICAgZGlmZiA9Ci0gICAgeC5uIC0gKCh4Lm4gKyB6LnMpIC0gei5vKSA9ICAgICBleHBhbmRpbmcKLSAgICB4Lm4gLSB4Lm4gLSB6LnMgKyB6Lm8gPSAgICAgICAgIGNhbmNlbGxpbmcKLSAgICAtIHoucyArIHoubyA9ICAgICAgICAgICAgICAgICAgIGJ5ICMyCi0gICAgei5kCi0KLVNvIGRpZmYgPSB6LmQuCi0KLUlmIFs1XSBpcyB0cnVlIG5vdywgZGlmZiA9IDAsIHNvIHouZCA9IDAgdG9vLCBhbmQgd2UgaGF2ZSB0aGUgc3RhbmRhcmQtdGltZQotc3BlbGxpbmcgd2Ugd2FudGVkIGluIHRoZSBlbmRjYXNlIGRlc2NyaWJlZCBhYm92ZS4gIFdlJ3JlIGRvbmUuICBDb250cmFyaWx5LAotaWYgei5kID0gMCwgdGhlbiB3ZSBoYXZlIGEgVVRDIGVxdWl2YWxlbnQsIGFuZCBhcmUgYWxzbyBkb25lLgotCi1JZiBbNV0gaXMgbm90IHRydWUgbm93LCBkaWZmID0gei5kICE9IDAsIGFuZCB6LmQgaXMgdGhlIG9mZnNldCB3ZSBuZWVkIHRvCi1hZGQgdG8geiAoaW4gZWZmZWN0LCB6IGlzIGluIHR6J3Mgc3RhbmRhcmQgdGltZSwgYW5kIHdlIG5lZWQgdG8gc2hpZnQgdGhlCi1sb2NhbCBjbG9jayBpbnRvIHR6J3MgZGF5bGlnaHQgdGltZSkuCi0KLUxldAotCi0gICAgeicgPSB6ICsgei5kID0geiArIGRpZmYgICAgICAgICAgICAgICAgICAgICBbN10KLQotYW5kIHdlIGNhbiBhZ2FpbiBhc2sgd2hldGhlcgotCi0gICAgeicubiAtIHonLm8gPSB4Lm4gICAgICAgICAgICAgICAgICAgICAgICAgICBbOF0KLQotSWYgc28sIHdlJ3JlIGRvbmUuICBJZiBub3QsIHRoZSB0emluZm8gY2xhc3MgaXMgaW5zYW5lLCBhY2NvcmRpbmcgdG8gdGhlCi1hc3N1bXB0aW9ucyB3ZSd2ZSBtYWRlLiAgVGhpcyBhbHNvIHJlcXVpcmVzIGEgYml0IG9mIHByb29mLiAgQXMgYmVmb3JlLCBsZXQncwotY29tcHV0ZSB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBMSFMgYW5kIFJIUyBvZiBbOF0gKGFuZCBza2lwcGluZyBzb21lIG9mCi10aGUganVzdGlmaWNhdGlvbnMgZm9yIHRoZSBraW5kcyBvZiBzdWJzdGl0dXRpb25zIHdlJ3ZlIGRvbmUgc2V2ZXJhbCB0aW1lcwotYWxyZWFkeSk6Ci0KLSAgICBkaWZmJyA9IHgubiAtICh6Jy5uIC0geicubykgPSAgICAgICAgICAgcmVwbGFjaW5nIHonLm4gdmlhIFs3XQotICAgICAgICAgICAgeC5uICAtICh6Lm4gKyBkaWZmIC0geicubykgPSAgICByZXBsYWNpbmcgZGlmZiB2aWEgWzZdCi0gICAgICAgICAgICB4Lm4gLSAoei5uICsgeC5uIC0gKHoubiAtIHoubykgLSB6Jy5vKSA9Ci0gICAgICAgICAgICB4Lm4gLSB6Lm4gLSB4Lm4gKyB6Lm4gLSB6Lm8gKyB6Jy5vID0gICAgY2FuY2VsIHgubgotICAgICAgICAgICAgLSB6Lm4gKyB6Lm4gLSB6Lm8gKyB6Jy5vID0gICAgICAgICAgICAgIGNhbmNlbCB6Lm4KLSAgICAgICAgICAgIC0gei5vICsgeicubyA9ICAgICAgICAgICAgICAgICAgICAgICMxIHR3aWNlCi0gICAgICAgICAgICAtei5zIC0gei5kICsgeicucyArIHonLmQgPSAgICAgICAgICB6IGFuZCB6JyBoYXZlIHNhbWUgdHppbmZvCi0gICAgICAgICAgICB6Jy5kIC0gei5kCi0KLVNvIHonIGlzIFVUQy1lcXVpdmFsZW50IHRvIHggaWZmIHonLmQgPSB6LmQgYXQgdGhpcyBwb2ludC4gIElmIHRoZXkgYXJlIGVxdWFsLAotd2UndmUgZm91bmQgdGhlIFVUQy1lcXVpdmFsZW50IHNvIGFyZSBkb25lLiAgSW4gZmFjdCwgd2Ugc3RvcCB3aXRoIFs3XSBhbmQKLXJldHVybiB6Jywgbm90IGJvdGhlcmluZyB0byBjb21wdXRlIHonLmQuCi0KLUhvdyBjb3VsZCB6LmQgYW5kIHonZCBkaWZmZXI/ICB6JyA9IHogKyB6LmQgWzddLCBzbyBtZXJlbHkgbW92aW5nIHonIGJ5Ci1hIGRzdCgpIG9mZnNldCwgYW5kIHN0YXJ0aW5nICpmcm9tKiBhIHRpbWUgYWxyZWFkeSBpbiBEU1QgKHdlIGtub3cgei5kICE9IDApLAotd291bGQgaGF2ZSB0byBjaGFuZ2UgdGhlIHJlc3VsdCBkc3QoKSByZXR1cm5zOiAgd2Ugc3RhcnQgaW4gRFNULCBhbmQgbW92aW5nCi1hIGxpdHRsZSBmdXJ0aGVyIGludG8gaXQgdGFrZXMgdXMgb3V0IG9mIERTVC4KLQotVGhlcmUgaXNuJ3QgYSBzYW5lIGNhc2Ugd2hlcmUgdGhpcyBjYW4gaGFwcGVuLiAgVGhlIGNsb3Nlc3QgaXQgZ2V0cyBpcyBhdAotdGhlIGVuZCBvZiBEU1QsIHdoZXJlIHRoZXJlJ3MgYW4gaG91ciBpbiBVVEMgd2l0aCBubyBzcGVsbGluZyBpbiBhIGh5YnJpZAotdHppbmZvIGNsYXNzLiAgSW4gVVMgRWFzdGVybiwgdGhhdCdzIDU6TU0gVVRDID0gMDpNTSBFU1QgPSAxOk1NIEVEVC4gIER1cmluZwotdGhhdCBob3VyLCBvbiBhbiBFYXN0ZXJuIGNsb2NrIDE6TU0gaXMgdGFrZW4gYXMgYmVpbmcgaW4gc3RhbmRhcmQgdGltZSAoNjpNTQotVVRDKSBiZWNhdXNlIHRoZSBkb2NzIGluc2lzdCBvbiB0aGF0LCBidXQgMDpNTSBpcyB0YWtlbiBhcyBiZWluZyBpbiBkYXlsaWdodAotdGltZSAoNDpNTSBVVEMpLiAgVGhlcmUgaXMgbm8gbG9jYWwgdGltZSBtYXBwaW5nIHRvIDU6TU0gVVRDLiAgVGhlIGxvY2FsCi1jbG9jayBqdW1wcyBmcm9tIDE6NTkgYmFjayB0byAxOjAwIGFnYWluLCBhbmQgcmVwZWF0cyB0aGUgMTpNTSBob3VyIGluCi1zdGFuZGFyZCB0aW1lLiAgU2luY2UgdGhhdCdzIHdoYXQgdGhlIGxvY2FsIGNsb2NrICpkb2VzKiwgd2Ugd2FudCB0byBtYXAgYm90aAotVVRDIGhvdXJzIDU6TU0gYW5kIDY6TU0gdG8gMTpNTSBFYXN0ZXJuLiAgVGhlIHJlc3VsdCBpcyBhbWJpZ3VvdXMKLWluIGxvY2FsIHRpbWUsIGJ1dCBzbyBpdCBnb2VzIC0tIGl0J3MgdGhlIHdheSB0aGUgbG9jYWwgY2xvY2sgd29ya3MuCi0KLVdoZW4geCA9IDU6TU0gVVRDIGlzIHRoZSBpbnB1dCB0byB0aGlzIGFsZ29yaXRobSwgeC5vPTAsIHkubz0tNSBhbmQgeS5kPTAsCi1zbyB6PTA6TU0uICB6LmQ9NjAgKG1pbnV0ZXMpIHRoZW4sIHNvIFs1XSBkb2Vzbid0IGhvbGQgYW5kIHdlIGtlZXAgZ29pbmcuCi16JyA9IHogKyB6LmQgPSAxOk1NIHRoZW4sIGFuZCB6Jy5kPTAsIGFuZCB6Jy5kIC0gei5kID0gLTYwICE9IDAgc28gWzhdCi0oY29ycmVjdGx5KSBjb25jbHVkZXMgdGhhdCB6JyBpcyBub3QgVVRDLWVxdWl2YWxlbnQgdG8geC4KLQotQmVjYXVzZSB3ZSBrbm93IHouZCBzYWlkIHogd2FzIGluIGRheWxpZ2h0IHRpbWUgKGVsc2UgWzVdIHdvdWxkIGhhdmUgaGVsZCBhbmQKLXdlIHdvdWxkIGhhdmUgc3RvcHBlZCB0aGVuKSwgYW5kIHdlIGtub3cgei5kICE9IHonLmQgKGVsc2UgWzhdIHdvdWxkIGhhdmUgaGVsZAotYW5kIHdlIGhhdmUgc3RvcHBlZCB0aGVuKSwgYW5kIHRoZXJlIGFyZSBvbmx5IDIgcG9zc2libGUgdmFsdWVzIGRzdCgpIGNhbgotcmV0dXJuIGluIEVhc3Rlcm4sIGl0IGZvbGxvd3MgdGhhdCB6Jy5kIG11c3QgYmUgMCAod2hpY2ggaXQgaXMgaW4gdGhlIGV4YW1wbGUsCi1idXQgdGhlIHJlYXNvbmluZyBkb2Vzbid0IGRlcGVuZCBvbiB0aGUgZXhhbXBsZSAtLSBpdCBkZXBlbmRzIG9uIHRoZXJlIGJlaW5nCi10d28gcG9zc2libGUgZHN0KCkgb3V0Y29tZXMsIG9uZSB6ZXJvIGFuZCB0aGUgb3RoZXIgbm9uLXplcm8pLiAgVGhlcmVmb3JlCi16JyBtdXN0IGJlIGluIHN0YW5kYXJkIHRpbWUsIGFuZCBpcyB0aGUgc3BlbGxpbmcgd2Ugd2FudCBpbiB0aGlzIGNhc2UuCi0KLU5vdGUgYWdhaW4gdGhhdCB6JyBpcyBub3QgVVRDLWVxdWl2YWxlbnQgYXMgZmFyIGFzIHRoZSBoeWJyaWQgdHppbmZvIGNsYXNzIGlzCi1jb25jZXJuZWQgKGJlY2F1c2UgaXQgdGFrZXMgeicgYXMgYmVpbmcgaW4gc3RhbmRhcmQgdGltZSByYXRoZXIgdGhhbiB0aGUKLWRheWxpZ2h0IHRpbWUgd2UgaW50ZW5kIGhlcmUpLCBidXQgcmV0dXJuaW5nIGl0IGdpdmVzIHRoZSByZWFsLWxpZmUgImxvY2FsCi1jbG9jayByZXBlYXRzIGFuIGhvdXIiIGJlaGF2aW9yIHdoZW4gbWFwcGluZyB0aGUgInVuc3BlbGxhYmxlIiBVVEMgaG91ciBpbnRvCi10ei4KLQotV2hlbiB0aGUgaW5wdXQgaXMgNjpNTSwgej0xOk1NIGFuZCB6LmQ9MCwgYW5kIHdlIHN0b3AgYXQgb25jZSwgYWdhaW4gd2l0aAotdGhlIDE6TU0gc3RhbmRhcmQgdGltZSBzcGVsbGluZyB3ZSB3YW50LgotCi1TbyBob3cgY2FuIHRoaXMgYnJlYWs/ICBPbmUgb2YgdGhlIGFzc3VtcHRpb25zIG11c3QgYmUgdmlvbGF0ZWQuICBUd28KLXBvc3NpYmlsaXRpZXM6Ci0KLTEpIFsyXSBlZmZlY3RpdmVseSBzYXlzIHRoYXQgeS5zIGlzIGludmFyaWFudCBhY3Jvc3MgYWxsIHkgYmVsb25nIHRvIGEgZ2l2ZW4KLSAgIHRpbWUgem9uZS4gIFRoaXMgaXNuJ3QgdHJ1ZSBpZiwgZm9yIHBvbGl0aWNhbCByZWFzb25zIG9yIGNvbnRpbmVudGFsIGRyaWZ0LAotICAgYSByZWdpb24gZGVjaWRlcyB0byBjaGFuZ2UgaXRzIGJhc2Ugb2Zmc2V0IGZyb20gVVRDLgotCi0yKSBUaGVyZSBtYXkgYmUgdmVyc2lvbnMgb2YgImRvdWJsZSBkYXlsaWdodCIgdGltZSB3aGVyZSB0aGUgdGFpbCBlbmQgb2YKLSAgIHRoZSBhbmFseXNpcyBnaXZlcyB1cCBhIHN0ZXAgdG9vIGVhcmx5LiAgSSBoYXZlbid0IHRob3VnaHQgYWJvdXQgdGhhdAotICAgZW5vdWdoIHRvIHNheS4KLQotSW4gYW55IGNhc2UsIGl0J3MgY2xlYXIgdGhhdCB0aGUgZGVmYXVsdCBmcm9tdXRjKCkgaXMgc3Ryb25nIGVub3VnaCB0byBoYW5kbGUKLSJhbG1vc3QgYWxsIiB0aW1lIHpvbmVzOiAgc28gbG9uZyBhcyB0aGUgc3RhbmRhcmQgb2Zmc2V0IGlzIGludmFyaWFudCwgaXQKLWRvZXNuJ3QgbWF0dGVyIGlmIGRheWxpZ2h0IHRpbWUgdHJhbnNpdGlvbiBwb2ludHMgY2hhbmdlIGZyb20geWVhciB0byB5ZWFyLCBvcgotaWYgZGF5bGlnaHQgdGltZSBpcyBza2lwcGVkIGluIHNvbWUgeWVhcnM7IGl0IGRvZXNuJ3QgbWF0dGVyIGhvdyBsYXJnZSBvcgotc21hbGwgZHN0KCkgbWF5IGdldCB3aXRoaW4gaXRzIGJvdW5kczsgYW5kIGl0IGRvZXNuJ3QgZXZlbiBtYXR0ZXIgaWYgc29tZQotcGVydmVyc2UgdGltZSB6b25lIHJldHVybnMgYSBuZWdhdGl2ZSBkc3QoKSkuICBTbyBhIGJyZWFraW5nIGNhc2UgbXVzdCBiZQotcHJldHR5IGJpemFycmUsIGFuZCBhIHR6aW5mbyBzdWJjbGFzcyBjYW4gb3ZlcnJpZGUgZnJvbXV0YygpIGlmIGl0IGlzLgotIiIiCiB0cnk6CiAgICAgZnJvbSBfZGF0ZXRpbWUgaW1wb3J0ICoKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKZGlmZiAtLWdpdCBhL0xpYi9kYm0vX19pbml0X18ucHkgYi9MaWIvZGJtL19faW5pdF9fLnB5CmluZGV4IGE3ODNmZGUuLjVmNDY2NGEgMTAwNjQ0Ci0tLSBhL0xpYi9kYm0vX19pbml0X18ucHkKKysrIGIvTGliL2RibS9fX2luaXRfXy5weQpAQCAtNDIsNyArNDIsNyBAQAogX2RlZmF1bHRtb2QgPSBOb25lCiBfbW9kdWxlcyA9IHt9CiAKLWVycm9yID0gKGVycm9yLCBJT0Vycm9yKQorZXJyb3IgPSAoZXJyb3IsIE9TRXJyb3IpCiAKIHRyeToKICAgICBmcm9tIGRibSBpbXBvcnQgbmRibQpAQCAtMTExLDEyICsxMTEsMTAgQEAKICAgICB0cnk6CiAgICAgICAgIGYgPSBpby5vcGVuKGZpbGVuYW1lICsgIi5wYWciLCAicmIiKQogICAgICAgICBmLmNsb3NlKCkKLSAgICAgICAgIyBkYm0gbGlua2VkIHdpdGggZ2RibSBvbiBPUy8yIGRvZXNuJ3QgaGF2ZSAuZGlyIGZpbGUKLSAgICAgICAgaWYgbm90IChuZGJtLmxpYnJhcnkgPT0gIkdOVSBnZGJtIiBhbmQgc3lzLnBsYXRmb3JtID09ICJvczJlbXgiKToKLSAgICAgICAgICAgIGYgPSBpby5vcGVuKGZpbGVuYW1lICsgIi5kaXIiLCAicmIiKQotICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIGYgPSBpby5vcGVuKGZpbGVuYW1lICsgIi5kaXIiLCAicmIiKQorICAgICAgICBmLmNsb3NlKCkKICAgICAgICAgcmV0dXJuICJkYm0ubmRibSIKLSAgICBleGNlcHQgSU9FcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgIyBzb21lIGRibSBlbXVsYXRpb25zIGJhc2VkIG9uIEJlcmtlbGV5IERCIGdlbmVyYXRlIGEgLmRiIGZpbGUKICAgICAgICAgIyBzb21lIGRvIG5vdCwgYnV0IHRoZXkgc2hvdWxkIGJlIGNhdWdodCBieSB0aGUgYnNkIGNoZWNrcwogICAgICAgICB0cnk6CkBAIC0xMjksNyArMTI3LDcgQEAKICAgICAgICAgICAgICAgICBkID0gbmRibS5vcGVuKGZpbGVuYW1lKQogICAgICAgICAgICAgICAgIGQuY2xvc2UoKQogICAgICAgICAgICAgICAgIHJldHVybiAiZGJtLm5kYm0iCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MKIAogICAgICMgQ2hlY2sgZm9yIGR1bWJkYm0gbmV4dCAtLSB0aGlzIGhhcyBhIC5kaXIgYW5kIGEgLmRhdCBmaWxlCkBAIC0xNDYsMTMgKzE0NCwxMyBAQAogICAgICAgICAgICAgICAgIHJldHVybiAiZGJtLmR1bWIiCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBmLmNsb3NlKCkKLSAgICBleGNlcHQgKE9TRXJyb3IsIElPRXJyb3IpOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICBwYXNzCiAKICAgICAjIFNlZSBpZiB0aGUgZmlsZSBleGlzdHMsIHJldHVybiBOb25lIGlmIG5vdAogICAgIHRyeToKICAgICAgICAgZiA9IGlvLm9wZW4oZmlsZW5hbWUsICJyYiIpCi0gICAgZXhjZXB0IElPRXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIHJldHVybiBOb25lCiAKICAgICAjIFJlYWQgdGhlIHN0YXJ0IG9mIHRoZSBmaWxlIC0tIHRoZSBtYWdpYyBudW1iZXIKZGlmZiAtLWdpdCBhL0xpYi9kYm0vZHVtYi5weSBiL0xpYi9kYm0vZHVtYi5weQppbmRleCBjZmI5MTIzLi42M2JjMzI5IDEwMDY0NAotLS0gYS9MaWIvZGJtL2R1bWIucHkKKysrIGIvTGliL2RibS9kdW1iLnB5CkBAIC0yMSw2ICsyMSw3IEBACiAKICIiIgogCitpbXBvcnQgYXN0IGFzIF9hc3QKIGltcG9ydCBpbyBhcyBfaW8KIGltcG9ydCBvcyBhcyBfb3MKIGltcG9ydCBjb2xsZWN0aW9ucwpAQCAtMjksNyArMzAsNyBAQAogCiBfQkxPQ0tTSVpFID0gNTEyCiAKLWVycm9yID0gSU9FcnJvcgorZXJyb3IgPSBPU0Vycm9yCiAKIGNsYXNzIF9EYXRhYmFzZShjb2xsZWN0aW9ucy5NdXRhYmxlTWFwcGluZyk6CiAKQEAgLTY3LDEwICs2OCwxMSBAQAogICAgICAgICAjIE1vZCBieSBKYWNrOiBjcmVhdGUgZGF0YSBmaWxlIGlmIG5lZWRlZAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmID0gX2lvLm9wZW4oc2VsZi5fZGF0ZmlsZSwgJ3InLCBlbmNvZGluZz0iTGF0aW4tMSIpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yOgotICAgICAgICAgICAgZiA9IF9pby5vcGVuKHNlbGYuX2RhdGZpbGUsICd3JywgZW5jb2Rpbmc9IkxhdGluLTEiKQotICAgICAgICAgICAgc2VsZi5fY2htb2Qoc2VsZi5fZGF0ZmlsZSkKLSAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgd2l0aCBfaW8ub3BlbihzZWxmLl9kYXRmaWxlLCAndycsIGVuY29kaW5nPSJMYXRpbi0xIikgYXMgZjoKKyAgICAgICAgICAgICAgICBzZWxmLl9jaG1vZChzZWxmLl9kYXRmaWxlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZi5jbG9zZSgpCiAgICAgICAgIHNlbGYuX3VwZGF0ZSgpCiAKICAgICAjIFJlYWQgZGlyZWN0b3J5IGZpbGUgaW50byB0aGUgaW4tbWVtb3J5IGluZGV4IGRpY3QuCkBAIC03OCwxNSArODAsMTUgQEAKICAgICAgICAgc2VsZi5faW5kZXggPSB7fQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmID0gX2lvLm9wZW4oc2VsZi5fZGlyZmlsZSwgJ3InLCBlbmNvZGluZz0iTGF0aW4tMSIpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGZvciBsaW5lIGluIGY6Ci0gICAgICAgICAgICAgICAgbGluZSA9IGxpbmUucnN0cmlwKCkKLSAgICAgICAgICAgICAgICBrZXksIHBvc19hbmRfc2l6X3BhaXIgPSBldmFsKGxpbmUpCi0gICAgICAgICAgICAgICAga2V5ID0ga2V5LmVuY29kZSgnTGF0aW4tMScpCi0gICAgICAgICAgICAgICAgc2VsZi5faW5kZXhba2V5XSA9IHBvc19hbmRfc2l6X3BhaXIKLSAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgd2l0aCBmOgorICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnJzdHJpcCgpCisgICAgICAgICAgICAgICAgICAgIGtleSwgcG9zX2FuZF9zaXpfcGFpciA9IF9hc3QubGl0ZXJhbF9ldmFsKGxpbmUpCisgICAgICAgICAgICAgICAgICAgIGtleSA9IGtleS5lbmNvZGUoJ0xhdGluLTEnKQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9pbmRleFtrZXldID0gcG9zX2FuZF9zaXpfcGFpcgogCiAgICAgIyBXcml0ZSB0aGUgaW5kZXggZGljdCB0byB0aGUgZGlyZWN0b3J5IGZpbGUuICBUaGUgb3JpZ2luYWwgZGlyZWN0b3J5CiAgICAgIyBmaWxlIChpZiBhbnkpIGlzIHJlbmFtZWQgd2l0aCBhIC5iYWsgZXh0ZW5zaW9uIGZpcnN0LiAgSWYgYSAuYmFrCkBAIC0xMDAsMzIgKzEwMiwzNiBAQAogCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYuX29zLnVubGluayhzZWxmLl9iYWtmaWxlKQotICAgICAgICBleGNlcHQgc2VsZi5fb3MuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcGFzcwogCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYuX29zLnJlbmFtZShzZWxmLl9kaXJmaWxlLCBzZWxmLl9iYWtmaWxlKQotICAgICAgICBleGNlcHQgc2VsZi5fb3MuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcGFzcwogCi0gICAgICAgIGYgPSBzZWxmLl9pby5vcGVuKHNlbGYuX2RpcmZpbGUsICd3JywgZW5jb2Rpbmc9IkxhdGluLTEiKQotICAgICAgICBzZWxmLl9jaG1vZChzZWxmLl9kaXJmaWxlKQotICAgICAgICBmb3Iga2V5LCBwb3NfYW5kX3Npel9wYWlyIGluIHNlbGYuX2luZGV4Lml0ZW1zKCk6Ci0gICAgICAgICAgICAjIFVzZSBMYXRpbi0xIHNpbmNlIGl0IGhhcyBubyBxdWFsbXMgd2l0aCBhbnkgdmFsdWUgaW4gYW55Ci0gICAgICAgICAgICAjIHBvc2l0aW9uOyBVVEYtOCwgdGhvdWdoLCBkb2VzIGNhcmUgc29tZXRpbWVzLgotICAgICAgICAgICAgZi53cml0ZSgiJXIsICVyXG4iICUgKGtleS5kZWNvZGUoJ0xhdGluLTEnKSwgcG9zX2FuZF9zaXpfcGFpcikpCi0gICAgICAgIGYuY2xvc2UoKQorICAgICAgICB3aXRoIHNlbGYuX2lvLm9wZW4oc2VsZi5fZGlyZmlsZSwgJ3cnLCBlbmNvZGluZz0iTGF0aW4tMSIpIGFzIGY6CisgICAgICAgICAgICBzZWxmLl9jaG1vZChzZWxmLl9kaXJmaWxlKQorICAgICAgICAgICAgZm9yIGtleSwgcG9zX2FuZF9zaXpfcGFpciBpbiBzZWxmLl9pbmRleC5pdGVtcygpOgorICAgICAgICAgICAgICAgICMgVXNlIExhdGluLTEgc2luY2UgaXQgaGFzIG5vIHF1YWxtcyB3aXRoIGFueSB2YWx1ZSBpbiBhbnkKKyAgICAgICAgICAgICAgICAjIHBvc2l0aW9uOyBVVEYtOCwgdGhvdWdoLCBkb2VzIGNhcmUgc29tZXRpbWVzLgorICAgICAgICAgICAgICAgIGVudHJ5ID0gIiVyLCAlclxuIiAlIChrZXkuZGVjb2RlKCdMYXRpbi0xJyksIHBvc19hbmRfc2l6X3BhaXIpCisgICAgICAgICAgICAgICAgZi53cml0ZShlbnRyeSkKIAogICAgIHN5bmMgPSBfY29tbWl0CiAKKyAgICBkZWYgX3ZlcmlmeV9vcGVuKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9pbmRleCBpcyBOb25lOgorICAgICAgICAgICAgcmFpc2UgZXJyb3IoJ0RCTSBvYmplY3QgaGFzIGFscmVhZHkgYmVlbiBjbG9zZWQnKQorCiAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGtleSk6CiAgICAgICAgIGlmIGlzaW5zdGFuY2Uoa2V5LCBzdHIpOgogICAgICAgICAgICAga2V5ID0ga2V5LmVuY29kZSgndXRmLTgnKQorICAgICAgICBzZWxmLl92ZXJpZnlfb3BlbigpCiAgICAgICAgIHBvcywgc2l6ID0gc2VsZi5faW5kZXhba2V5XSAgICAgIyBtYXkgcmFpc2UgS2V5RXJyb3IKLSAgICAgICAgZiA9IF9pby5vcGVuKHNlbGYuX2RhdGZpbGUsICdyYicpCi0gICAgICAgIGYuc2Vlayhwb3MpCi0gICAgICAgIGRhdCA9IGYucmVhZChzaXopCi0gICAgICAgIGYuY2xvc2UoKQorICAgICAgICB3aXRoIF9pby5vcGVuKHNlbGYuX2RhdGZpbGUsICdyYicpIGFzIGY6CisgICAgICAgICAgICBmLnNlZWsocG9zKQorICAgICAgICAgICAgZGF0ID0gZi5yZWFkKHNpeikKICAgICAgICAgcmV0dXJuIGRhdAogCiAgICAgIyBBcHBlbmQgdmFsIHRvIHRoZSBkYXRhIGZpbGUsIHN0YXJ0aW5nIGF0IGEgX0JMT0NLU0laRS1hbGlnbmVkCkBAIC0xMzMsMTQgKzEzOSwxMyBAQAogICAgICMgdG8gZ2V0IHRvIGFuIGFsaWduZWQgb2Zmc2V0LiAgUmV0dXJuIHBhaXIKICAgICAjICAgICAoc3RhcnRpbmcgb2Zmc2V0IG9mIHZhbCwgbGVuKHZhbCkpCiAgICAgZGVmIF9hZGR2YWwoc2VsZiwgdmFsKToKLSAgICAgICAgZiA9IF9pby5vcGVuKHNlbGYuX2RhdGZpbGUsICdyYisnKQotICAgICAgICBmLnNlZWsoMCwgMikKLSAgICAgICAgcG9zID0gaW50KGYudGVsbCgpKQotICAgICAgICBucG9zID0gKChwb3MgKyBfQkxPQ0tTSVpFIC0gMSkgLy8gX0JMT0NLU0laRSkgKiBfQkxPQ0tTSVpFCi0gICAgICAgIGYud3JpdGUoYidcMCcqKG5wb3MtcG9zKSkKLSAgICAgICAgcG9zID0gbnBvcwotICAgICAgICBmLndyaXRlKHZhbCkKLSAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIHdpdGggX2lvLm9wZW4oc2VsZi5fZGF0ZmlsZSwgJ3JiKycpIGFzIGY6CisgICAgICAgICAgICBmLnNlZWsoMCwgMikKKyAgICAgICAgICAgIHBvcyA9IGludChmLnRlbGwoKSkKKyAgICAgICAgICAgIG5wb3MgPSAoKHBvcyArIF9CTE9DS1NJWkUgLSAxKSAvLyBfQkxPQ0tTSVpFKSAqIF9CTE9DS1NJWkUKKyAgICAgICAgICAgIGYud3JpdGUoYidcMCcqKG5wb3MtcG9zKSkKKyAgICAgICAgICAgIHBvcyA9IG5wb3MKKyAgICAgICAgICAgIGYud3JpdGUodmFsKQogICAgICAgICByZXR1cm4gKHBvcywgbGVuKHZhbCkpCiAKICAgICAjIFdyaXRlIHZhbCB0byB0aGUgZGF0YSBmaWxlLCBzdGFydGluZyBhdCBvZmZzZXQgcG9zLiAgVGhlIGNhbGxlcgpAQCAtMTQ4LDEwICsxNTMsOSBAQAogICAgICMgcG9zIHRvIGhvbGQgdmFsLCB3aXRob3V0IG92ZXJ3cml0aW5nIHNvbWUgb3RoZXIgdmFsdWUuICBSZXR1cm4KICAgICAjIHBhaXIgKHBvcywgbGVuKHZhbCkpLgogICAgIGRlZiBfc2V0dmFsKHNlbGYsIHBvcywgdmFsKToKLSAgICAgICAgZiA9IF9pby5vcGVuKHNlbGYuX2RhdGZpbGUsICdyYisnKQotICAgICAgICBmLnNlZWsocG9zKQotICAgICAgICBmLndyaXRlKHZhbCkKLSAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIHdpdGggX2lvLm9wZW4oc2VsZi5fZGF0ZmlsZSwgJ3JiKycpIGFzIGY6CisgICAgICAgICAgICBmLnNlZWsocG9zKQorICAgICAgICAgICAgZi53cml0ZSh2YWwpCiAgICAgICAgIHJldHVybiAocG9zLCBsZW4odmFsKSkKIAogICAgICMga2V5IGlzIGEgbmV3IGtleSB3aG9zZSBhc3NvY2lhdGVkIHZhbHVlIHN0YXJ0cyBpbiB0aGUgZGF0YSBmaWxlCkBAIC0xNTksMTAgKzE2Myw5IEBACiAgICAgIyB0aGUgaW4tbWVtb3J5IGluZGV4IGRpY3QsIGFuZCBhcHBlbmQgb25lIHRvIHRoZSBkaXJlY3RvcnkgZmlsZS4KICAgICBkZWYgX2FkZGtleShzZWxmLCBrZXksIHBvc19hbmRfc2l6X3BhaXIpOgogICAgICAgICBzZWxmLl9pbmRleFtrZXldID0gcG9zX2FuZF9zaXpfcGFpcgotICAgICAgICBmID0gX2lvLm9wZW4oc2VsZi5fZGlyZmlsZSwgJ2EnLCBlbmNvZGluZz0iTGF0aW4tMSIpCi0gICAgICAgIHNlbGYuX2NobW9kKHNlbGYuX2RpcmZpbGUpCi0gICAgICAgIGYud3JpdGUoIiVyLCAlclxuIiAlIChrZXkuZGVjb2RlKCJMYXRpbi0xIiksIHBvc19hbmRfc2l6X3BhaXIpKQotICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgd2l0aCBfaW8ub3BlbihzZWxmLl9kaXJmaWxlLCAnYScsIGVuY29kaW5nPSJMYXRpbi0xIikgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuX2NobW9kKHNlbGYuX2RpcmZpbGUpCisgICAgICAgICAgICBmLndyaXRlKCIlciwgJXJcbiIgJSAoa2V5LmRlY29kZSgiTGF0aW4tMSIpLCBwb3NfYW5kX3Npel9wYWlyKSkKIAogICAgIGRlZiBfX3NldGl0ZW1fXyhzZWxmLCBrZXksIHZhbCk6CiAgICAgICAgIGlmIGlzaW5zdGFuY2Uoa2V5LCBzdHIpOgpAQCAtMTczLDYgKzE3Niw3IEBACiAgICAgICAgICAgICB2YWwgPSB2YWwuZW5jb2RlKCd1dGYtOCcpCiAgICAgICAgIGVsaWYgbm90IGlzaW5zdGFuY2UodmFsLCAoYnl0ZXMsIGJ5dGVhcnJheSkpOgogICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJ2YWx1ZXMgbXVzdCBiZSBieXRlcyBvciBzdHJpbmdzIikKKyAgICAgICAgc2VsZi5fdmVyaWZ5X29wZW4oKQogICAgICAgICBpZiBrZXkgbm90IGluIHNlbGYuX2luZGV4OgogICAgICAgICAgICAgc2VsZi5fYWRka2V5KGtleSwgc2VsZi5fYWRkdmFsKHZhbCkpCiAgICAgICAgIGVsc2U6CkBAIC0yMDAsNiArMjA0LDcgQEAKICAgICBkZWYgX19kZWxpdGVtX18oc2VsZiwga2V5KToKICAgICAgICAgaWYgaXNpbnN0YW5jZShrZXksIHN0cik6CiAgICAgICAgICAgICBrZXkgPSBrZXkuZW5jb2RlKCd1dGYtOCcpCisgICAgICAgIHNlbGYuX3ZlcmlmeV9vcGVuKCkKICAgICAgICAgIyBUaGUgYmxvY2tzIHVzZWQgYnkgdGhlIGFzc29jaWF0ZWQgdmFsdWUgYXJlIGxvc3QuCiAgICAgICAgIGRlbCBzZWxmLl9pbmRleFtrZXldCiAgICAgICAgICMgWFhYIEl0J3MgdW5jbGVhciB3aHkgd2UgZG8gYSBfY29tbWl0KCkgaGVyZSAodGhlIGNvZGUgYWx3YXlzCkBAIC0yMDksMjYgKzIxNCw0NCBAQAogICAgICAgICBzZWxmLl9jb21taXQoKQogCiAgICAgZGVmIGtleXMoc2VsZik6Ci0gICAgICAgIHJldHVybiBsaXN0KHNlbGYuX2luZGV4LmtleXMoKSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIGxpc3Qoc2VsZi5faW5kZXgpCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICByYWlzZSBlcnJvcignREJNIG9iamVjdCBoYXMgYWxyZWFkeSBiZWVuIGNsb3NlZCcpIGZyb20gTm9uZQogCiAgICAgZGVmIGl0ZW1zKHNlbGYpOgorICAgICAgICBzZWxmLl92ZXJpZnlfb3BlbigpCiAgICAgICAgIHJldHVybiBbKGtleSwgc2VsZltrZXldKSBmb3Iga2V5IGluIHNlbGYuX2luZGV4LmtleXMoKV0KIAogICAgIGRlZiBfX2NvbnRhaW5zX18oc2VsZiwga2V5KToKICAgICAgICAgaWYgaXNpbnN0YW5jZShrZXksIHN0cik6CiAgICAgICAgICAgICBrZXkgPSBrZXkuZW5jb2RlKCd1dGYtOCcpCi0gICAgICAgIHJldHVybiBrZXkgaW4gc2VsZi5faW5kZXgKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIGtleSBpbiBzZWxmLl9pbmRleAorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgaWYgc2VsZi5faW5kZXggaXMgTm9uZToKKyAgICAgICAgICAgICAgICByYWlzZSBlcnJvcignREJNIG9iamVjdCBoYXMgYWxyZWFkeSBiZWVuIGNsb3NlZCcpIGZyb20gTm9uZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZQogCiAgICAgZGVmIGl0ZXJrZXlzKHNlbGYpOgotICAgICAgICByZXR1cm4gaXRlcihzZWxmLl9pbmRleC5rZXlzKCkpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBpdGVyKHNlbGYuX2luZGV4KQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcmFpc2UgZXJyb3IoJ0RCTSBvYmplY3QgaGFzIGFscmVhZHkgYmVlbiBjbG9zZWQnKSBmcm9tIE5vbmUKICAgICBfX2l0ZXJfXyA9IGl0ZXJrZXlzCiAKICAgICBkZWYgX19sZW5fXyhzZWxmKToKLSAgICAgICAgcmV0dXJuIGxlbihzZWxmLl9pbmRleCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIGxlbihzZWxmLl9pbmRleCkKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIGVycm9yKCdEQk0gb2JqZWN0IGhhcyBhbHJlYWR5IGJlZW4gY2xvc2VkJykgZnJvbSBOb25lCiAKICAgICBkZWYgY2xvc2Uoc2VsZik6Ci0gICAgICAgIHNlbGYuX2NvbW1pdCgpCi0gICAgICAgIHNlbGYuX2luZGV4ID0gc2VsZi5fZGF0ZmlsZSA9IHNlbGYuX2RpcmZpbGUgPSBzZWxmLl9iYWtmaWxlID0gTm9uZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl9jb21taXQoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5faW5kZXggPSBzZWxmLl9kYXRmaWxlID0gc2VsZi5fZGlyZmlsZSA9IHNlbGYuX2Jha2ZpbGUgPSBOb25lCiAKICAgICBfX2RlbF9fID0gY2xvc2UKIApAQCAtMjM2LDYgKzI1OSwxMiBAQAogICAgICAgICBpZiBoYXNhdHRyKHNlbGYuX29zLCAnY2htb2QnKToKICAgICAgICAgICAgIHNlbGYuX29zLmNobW9kKGZpbGUsIHNlbGYuX21vZGUpCiAKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsICphcmdzKToKKyAgICAgICAgc2VsZi5jbG9zZSgpCisKIAogZGVmIG9wZW4oZmlsZSwgZmxhZz1Ob25lLCBtb2RlPTBvNjY2KToKICAgICAiIiJPcGVuIHRoZSBkYXRhYmFzZSBmaWxlLCBmaWxlbmFtZSwgYW5kIHJldHVybiBjb3JyZXNwb25kaW5nIG9iamVjdC4KZGlmZiAtLWdpdCBhL0xpYi9kZWNpbWFsLnB5IGIvTGliL2RlY2ltYWwucHkKaW5kZXggOWYzN2U0Zi4uMzI0ZTRmOSAxMDA2NDQKLS0tIGEvTGliL2RlY2ltYWwucHkKKysrIGIvTGliL2RlY2ltYWwucHkKQEAgLTExNiw2ICsxMTYsOSBAQAogICAgICMgVHdvIG1ham9yIGNsYXNzZXMKICAgICAnRGVjaW1hbCcsICdDb250ZXh0JywKIAorICAgICMgTmFtZWQgdHVwbGUgcmVwcmVzZW50YXRpb24KKyAgICAnRGVjaW1hbFR1cGxlJywKKwogICAgICMgQ29udGV4dHMKICAgICAnRGVmYXVsdENvbnRleHQnLCAnQmFzaWNDb250ZXh0JywgJ0V4dGVuZGVkQ29udGV4dCcsCiAKQEAgLTEyNCw2ICsxMjcsOSBAQAogICAgICdJbmV4YWN0JywgJ1JvdW5kZWQnLCAnU3Vibm9ybWFsJywgJ092ZXJmbG93JywgJ1VuZGVyZmxvdycsCiAgICAgJ0Zsb2F0T3BlcmF0aW9uJywKIAorICAgICMgRXhjZXB0aW9uYWwgY29uZGl0aW9ucyB0aGF0IHRyaWdnZXIgSW52YWxpZE9wZXJhdGlvbgorICAgICdEaXZpc2lvbkltcG9zc2libGUnLCAnSW52YWxpZENvbnRleHQnLCAnQ29udmVyc2lvblN5bnRheCcsICdEaXZpc2lvblVuZGVmaW5lZCcsCisKICAgICAjIENvbnN0YW50cyBmb3IgdXNlIGluIHNldHRpbmcgdXAgY29udGV4dHMKICAgICAnUk9VTkRfRE9XTicsICdST1VORF9IQUxGX1VQJywgJ1JPVU5EX0hBTEZfRVZFTicsICdST1VORF9DRUlMSU5HJywKICAgICAnUk9VTkRfRkxPT1InLCAnUk9VTkRfVVAnLCAnUk9VTkRfSEFMRl9ET1dOJywgJ1JPVU5EXzA1VVAnLApAQCAtMTQwLDkgKzE0Niw4IEBACiAKIF9fdmVyc2lvbl9fID0gJzEuNzAnICAgICMgSGlnaGVzdCB2ZXJzaW9uIG9mIHRoZSBzcGVjIHRoaXMgY29tcGxpZXMgd2l0aAogICAgICAgICAgICAgICAgICAgICAgICAgIyBTZWUgaHR0cDovL3NwZWxlb3Ryb3ZlLmNvbS9kZWNpbWFsLwotX19saWJtcGRlY192ZXJzaW9uX18gPSAiMi40LjAiICMgY29tcGF0aWJsZSBsaWJtcGRlYyB2ZXJzaW9uCitfX2xpYm1wZGVjX3ZlcnNpb25fXyA9ICIyLjQuMSIgIyBjb21wYXRpYmxlIGxpYm1wZGVjIHZlcnNpb24KIAotaW1wb3J0IGNvcHkgYXMgX2NvcHkKIGltcG9ydCBtYXRoIGFzIF9tYXRoCiBpbXBvcnQgbnVtYmVycyBhcyBfbnVtYmVycwogaW1wb3J0IHN5cwpAQCAtNzA0LDggKzcwOSw3IEBACiAKICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJDYW5ub3QgY29udmVydCAlciB0byBEZWNpbWFsIiAlIHZhbHVlKQogCi0gICAgIyBAY2xhc3NtZXRob2QsIGJ1dCBAZGVjb3JhdG9yIGlzIG5vdCB2YWxpZCBQeXRob24gMi4zIHN5bnRheCwgc28KLSAgICAjIGRvbid0IHVzZSBpdCAoc2VlIG5vdGVzIG9uIFB5Mi4zIGNvbXBhdGliaWxpdHkgYXQgdG9wIG9mIGZpbGUpCisgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIGZyb21fZmxvYXQoY2xzLCBmKToKICAgICAgICAgIiIiQ29udmVydHMgYSBmbG9hdCB0byBhIGRlY2ltYWwgbnVtYmVyLCBleGFjdGx5LgogCkBAIC03NDQsNyArNzQ4LDYgQEAKICAgICAgICAgICAgIHJldHVybiByZXN1bHQKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHJldHVybiBjbHMocmVzdWx0KQotICAgIGZyb21fZmxvYXQgPSBjbGFzc21ldGhvZChmcm9tX2Zsb2F0KQogCiAgICAgZGVmIF9pc25hbihzZWxmKToKICAgICAgICAgIiIiUmV0dXJucyB3aGV0aGVyIHRoZSBudW1iZXIgaXMgbm90IGFjdHVhbGx5IG9uZS4KQEAgLTk2NCwxMyArOTY3LDEyIEBACiAgICAgICAgIHJldHVybiBzZWxmLl9jbXAob3RoZXIpID49IDAKIAogICAgIGRlZiBjb21wYXJlKHNlbGYsIG90aGVyLCBjb250ZXh0PU5vbmUpOgotICAgICAgICAiIiJDb21wYXJlcyBvbmUgdG8gYW5vdGhlci4KKyAgICAgICAgIiIiQ29tcGFyZSBzZWxmIHRvIG90aGVyLiAgUmV0dXJuIGEgZGVjaW1hbCB2YWx1ZToKIAotICAgICAgICAtMSA9PiBhIDwgYgotICAgICAgICAwICA9PiBhID0gYgotICAgICAgICAxICA9PiBhID4gYgotICAgICAgICBOYU4gPT4gb25lIGlzIE5hTgotICAgICAgICBMaWtlIF9fY21wX18sIGJ1dCByZXR1cm5zIERlY2ltYWwgaW5zdGFuY2VzLgorICAgICAgICBhIG9yIGIgaXMgYSBOYU4gPT0+IERlY2ltYWwoJ05hTicpCisgICAgICAgIGEgPCBiICAgICAgICAgICA9PT4gRGVjaW1hbCgnLTEnKQorICAgICAgICBhID09IGIgICAgICAgICAgPT0+IERlY2ltYWwoJzAnKQorICAgICAgICBhID4gYiAgICAgICAgICAgPT0+IERlY2ltYWwoJzEnKQogICAgICAgICAiIiIKICAgICAgICAgb3RoZXIgPSBfY29udmVydF9vdGhlcihvdGhlciwgcmFpc2VpdD1UcnVlKQogCkBAIC0zNzcyLDYgKzM3NzQsOCBAQAogICAgICAgICBpZiBzZWxmLl9pc19zcGVjaWFsOgogICAgICAgICAgICAgc2lnbiA9IF9mb3JtYXRfc2lnbihzZWxmLl9zaWduLCBzcGVjKQogICAgICAgICAgICAgYm9keSA9IHN0cihzZWxmLmNvcHlfYWJzKCkpCisgICAgICAgICAgICBpZiBzcGVjWyd0eXBlJ10gPT0gJyUnOgorICAgICAgICAgICAgICAgIGJvZHkgKz0gJyUnCiAgICAgICAgICAgICByZXR1cm4gX2Zvcm1hdF9hbGlnbihzaWduLCBib2R5LCBzcGVjKQogCiAgICAgICAgICMgYSB0eXBlIG9mIE5vbmUgZGVmYXVsdHMgdG8gJ2cnIG9yICdHJywgZGVwZW5kaW5nIG9uIGNvbnRleHQKZGlmZiAtLWdpdCBhL0xpYi9kaWZmbGliLnB5IGIvTGliL2RpZmZsaWIucHkKaW5kZXggZjBiZmNjNS4uNTZkNDg1MiAxMDA2NDQKLS0tIGEvTGliL2RpZmZsaWIucHkKKysrIGIvTGliL2RpZmZsaWIucHkKQEAgLTMwLDcgKzMwLDYgQEAKICAgICAgICAgICAgJ0RpZmZlcicsJ0lTX0NIQVJBQ1RFUl9KVU5LJywgJ0lTX0xJTkVfSlVOSycsICdjb250ZXh0X2RpZmYnLAogICAgICAgICAgICAndW5pZmllZF9kaWZmJywgJ0h0bWxEaWZmJywgJ01hdGNoJ10KIAotaW1wb3J0IHdhcm5pbmdzCiBpbXBvcnQgaGVhcHEKIGZyb20gY29sbGVjdGlvbnMgaW1wb3J0IG5hbWVkdHVwbGUgYXMgX25hbWVkdHVwbGUKIApAQCAtMzM0LDIwICszMzMsNiBAQAogICAgICAgICAgICAgZm9yIGVsdCBpbiBwb3B1bGFyOiAjIGRpdHRvOyBhcyBmYXN0IGZvciAxJSBkZWxldGlvbgogICAgICAgICAgICAgICAgIGRlbCBiMmpbZWx0XQogCi0gICAgZGVmIGlzYmp1bmsoc2VsZiwgaXRlbSk6Ci0gICAgICAgICJEZXByZWNhdGVkOyB1c2UgJ2l0ZW0gaW4gU2VxdWVuY2VNYXRjaGVyKCkuYmp1bmsnLiIKLSAgICAgICAgd2FybmluZ3Mud2FybigiJ1NlcXVlbmNlTWF0Y2hlcigpLmlzYmp1bmsoaXRlbSknIGlzIGRlcHJlY2F0ZWQ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgInVzZSAnaXRlbSBpbiBTTWluc3RhbmNlLmJqdW5rJyBpbnN0ZWFkLiIsCi0gICAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nLCAyKQotICAgICAgICByZXR1cm4gaXRlbSBpbiBzZWxmLmJqdW5rCi0KLSAgICBkZWYgaXNicG9wdWxhcihzZWxmLCBpdGVtKToKLSAgICAgICAgIkRlcHJlY2F0ZWQ7IHVzZSAnaXRlbSBpbiBTZXF1ZW5jZU1hdGNoZXIoKS5icG9wdWxhcicuIgotICAgICAgICB3YXJuaW5ncy53YXJuKCInU2VxdWVuY2VNYXRjaGVyKCkuaXNicG9wdWxhcihpdGVtKScgaXMgZGVwcmVjYXRlZDtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAidXNlICdpdGVtIGluIFNNaW5zdGFuY2UuYnBvcHVsYXInIGluc3RlYWQuIiwKLSAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcsIDIpCi0gICAgICAgIHJldHVybiBpdGVtIGluIHNlbGYuYnBvcHVsYXIKLQogICAgIGRlZiBmaW5kX2xvbmdlc3RfbWF0Y2goc2VsZiwgYWxvLCBhaGksIGJsbywgYmhpKToKICAgICAgICAgIiIiRmluZCBsb25nZXN0IG1hdGNoaW5nIGJsb2NrIGluIGFbYWxvOmFoaV0gYW5kIGJbYmxvOmJoaV0uCiAKQEAgLTUyNiw4ICs1MTEsOCBAQAogICAgICAgICAgICAgbm9uX2FkamFjZW50LmFwcGVuZCgoaTEsIGoxLCBrMSkpCiAKICAgICAgICAgbm9uX2FkamFjZW50LmFwcGVuZCggKGxhLCBsYiwgMCkgKQotICAgICAgICBzZWxmLm1hdGNoaW5nX2Jsb2NrcyA9IG5vbl9hZGphY2VudAotICAgICAgICByZXR1cm4gbWFwKE1hdGNoLl9tYWtlLCBzZWxmLm1hdGNoaW5nX2Jsb2NrcykKKyAgICAgICAgc2VsZi5tYXRjaGluZ19ibG9ja3MgPSBsaXN0KG1hcChNYXRjaC5fbWFrZSwgbm9uX2FkamFjZW50KSkKKyAgICAgICAgcmV0dXJuIHNlbGYubWF0Y2hpbmdfYmxvY2tzCiAKICAgICBkZWYgZ2V0X29wY29kZXMoc2VsZik6CiAgICAgICAgICIiIlJldHVybiBsaXN0IG9mIDUtdHVwbGVzIGRlc2NyaWJpbmcgaG93IHRvIHR1cm4gYSBpbnRvIGIuCkBAIC05MjAsOCArOTA1LDcgQEAKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigndW5rbm93biB0YWcgJXInICUgKHRhZywpKQogCi0gICAgICAgICAgICBmb3IgbGluZSBpbiBnOgotICAgICAgICAgICAgICAgIHlpZWxkIGxpbmUKKyAgICAgICAgICAgIHlpZWxkIGZyb20gZwogCiAgICAgZGVmIF9kdW1wKHNlbGYsIHRhZywgeCwgbG8sIGhpKToKICAgICAgICAgIiIiR2VuZXJhdGUgY29tcGFyaXNvbiByZXN1bHRzIGZvciBhIHNhbWUtdGFnZ2VkIHJhbmdlLiIiIgpAQCAtOTQwLDggKzkyNCw3IEBACiAgICAgICAgICAgICBzZWNvbmQgPSBzZWxmLl9kdW1wKCcrJywgYiwgYmxvLCBiaGkpCiAKICAgICAgICAgZm9yIGcgaW4gZmlyc3QsIHNlY29uZDoKLSAgICAgICAgICAgIGZvciBsaW5lIGluIGc6Ci0gICAgICAgICAgICAgICAgeWllbGQgbGluZQorICAgICAgICAgICAgeWllbGQgZnJvbSBnCiAKICAgICBkZWYgX2ZhbmN5X3JlcGxhY2Uoc2VsZiwgYSwgYWxvLCBhaGksIGIsIGJsbywgYmhpKToKICAgICAgICAgciIiIgpAQCAtOTk1LDggKzk3OCw3IEBACiAgICAgICAgICAgICAjIG5vIG5vbi1pZGVudGljYWwgInByZXR0eSBjbG9zZSIgcGFpcgogICAgICAgICAgICAgaWYgZXFpIGlzIE5vbmU6CiAgICAgICAgICAgICAgICAgIyBubyBpZGVudGljYWwgcGFpciBlaXRoZXIgLS0gdHJlYXQgaXQgYXMgYSBzdHJhaWdodCByZXBsYWNlCi0gICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gc2VsZi5fcGxhaW5fcmVwbGFjZShhLCBhbG8sIGFoaSwgYiwgYmxvLCBiaGkpOgotICAgICAgICAgICAgICAgICAgICB5aWVsZCBsaW5lCisgICAgICAgICAgICAgICAgeWllbGQgZnJvbSBzZWxmLl9wbGFpbl9yZXBsYWNlKGEsIGFsbywgYWhpLCBiLCBibG8sIGJoaSkKICAgICAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgICAgICMgbm8gY2xvc2UgcGFpciwgYnV0IGFuIGlkZW50aWNhbCBwYWlyIC0tIHN5bmNoIHVwIG9uIHRoYXQKICAgICAgICAgICAgIGJlc3RfaSwgYmVzdF9qLCBiZXN0X3JhdGlvID0gZXFpLCBlcWosIDEuMApAQCAtMTAwOCw4ICs5OTAsNyBAQAogICAgICAgICAjIGlkZW50aWNhbAogCiAgICAgICAgICMgcHVtcCBvdXQgZGlmZnMgZnJvbSBiZWZvcmUgdGhlIHN5bmNoIHBvaW50Ci0gICAgICAgIGZvciBsaW5lIGluIHNlbGYuX2ZhbmN5X2hlbHBlcihhLCBhbG8sIGJlc3RfaSwgYiwgYmxvLCBiZXN0X2opOgotICAgICAgICAgICAgeWllbGQgbGluZQorICAgICAgICB5aWVsZCBmcm9tIHNlbGYuX2ZhbmN5X2hlbHBlcihhLCBhbG8sIGJlc3RfaSwgYiwgYmxvLCBiZXN0X2opCiAKICAgICAgICAgIyBkbyBpbnRyYWxpbmUgbWFya2luZyBvbiB0aGUgc3luY2ggcGFpcgogICAgICAgICBhZWx0LCBiZWx0ID0gYVtiZXN0X2ldLCBiW2Jlc3Rfal0KQEAgLTEwMzEsMTUgKzEwMTIsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgYnRhZ3MgKz0gJyAnICogbGIKICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCd1bmtub3duIHRhZyAlcicgJSAodGFnLCkpCi0gICAgICAgICAgICBmb3IgbGluZSBpbiBzZWxmLl9xZm9ybWF0KGFlbHQsIGJlbHQsIGF0YWdzLCBidGFncyk6Ci0gICAgICAgICAgICAgICAgeWllbGQgbGluZQorICAgICAgICAgICAgeWllbGQgZnJvbSBzZWxmLl9xZm9ybWF0KGFlbHQsIGJlbHQsIGF0YWdzLCBidGFncykKICAgICAgICAgZWxzZToKICAgICAgICAgICAgICMgdGhlIHN5bmNoIHBhaXIgaXMgaWRlbnRpY2FsCiAgICAgICAgICAgICB5aWVsZCAnICAnICsgYWVsdAogCiAgICAgICAgICMgcHVtcCBvdXQgZGlmZnMgZnJvbSBhZnRlciB0aGUgc3luY2ggcG9pbnQKLSAgICAgICAgZm9yIGxpbmUgaW4gc2VsZi5fZmFuY3lfaGVscGVyKGEsIGJlc3RfaSsxLCBhaGksIGIsIGJlc3RfaisxLCBiaGkpOgotICAgICAgICAgICAgeWllbGQgbGluZQorICAgICAgICB5aWVsZCBmcm9tIHNlbGYuX2ZhbmN5X2hlbHBlcihhLCBiZXN0X2krMSwgYWhpLCBiLCBiZXN0X2orMSwgYmhpKQogCiAgICAgZGVmIF9mYW5jeV9oZWxwZXIoc2VsZiwgYSwgYWxvLCBhaGksIGIsIGJsbywgYmhpKToKICAgICAgICAgZyA9IFtdCkBAIC0xMDUxLDggKzEwMzAsNyBAQAogICAgICAgICBlbGlmIGJsbyA8IGJoaToKICAgICAgICAgICAgIGcgPSBzZWxmLl9kdW1wKCcrJywgYiwgYmxvLCBiaGkpCiAKLSAgICAgICAgZm9yIGxpbmUgaW4gZzoKLSAgICAgICAgICAgIHlpZWxkIGxpbmUKKyAgICAgICAgeWllbGQgZnJvbSBnCiAKICAgICBkZWYgX3Fmb3JtYXQoc2VsZiwgYWxpbmUsIGJsaW5lLCBhdGFncywgYnRhZ3MpOgogICAgICAgICByIiIiCkBAIC0xNDkxLDcgKzE0NjksNyBAQAogICAgICAgICAgICAgICAgIHlpZWxkIF9tYWtlX2xpbmUobGluZXMsJy0nLDApLCBOb25lLCBUcnVlCiAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgIGVsaWYgcy5zdGFydHN3aXRoKCgnLS0/KycsICctLSsnLCAnLSAnKSk6Ci0gICAgICAgICAgICAgICAgIyBpbiBkZWxldGUgYmxvY2sgYW5kIHNlZSBhIGludHJhbGluZSBjaGFuZ2Ugb3IgdW5jaGFuZ2VkIGxpbmUKKyAgICAgICAgICAgICAgICAjIGluIGRlbGV0ZSBibG9jayBhbmQgc2VlIGFuIGludHJhbGluZSBjaGFuZ2Ugb3IgdW5jaGFuZ2VkIGxpbmUKICAgICAgICAgICAgICAgICAjIGNvbWluZzogeWllbGQgdGhlIGRlbGV0ZSBsaW5lIGFuZCB0aGVuIGJsYW5rcwogICAgICAgICAgICAgICAgIGZyb21fbGluZSx0b19saW5lID0gX21ha2VfbGluZShsaW5lcywnLScsMCksIE5vbmUKICAgICAgICAgICAgICAgICBudW1fYmxhbmtzX3RvX3lpZWxkLG51bV9ibGFua3NfcGVuZGluZyA9IG51bV9ibGFua3NfcGVuZGluZy0xLDAKZGlmZiAtLWdpdCBhL0xpYi9kaXMucHkgYi9MaWIvZGlzLnB5CmluZGV4IDU0M2ZkYzcuLjgxY2JlN2YgMTAwNjQ0Ci0tLSBhL0xpYi9kaXMucHkKKysrIGIvTGliL2Rpcy5weQpAQCAtMiwxMiArMiwxNSBAQAogCiBpbXBvcnQgc3lzCiBpbXBvcnQgdHlwZXMKK2ltcG9ydCBjb2xsZWN0aW9ucworaW1wb3J0IGlvCiAKIGZyb20gb3Bjb2RlIGltcG9ydCAqCiBmcm9tIG9wY29kZSBpbXBvcnQgX19hbGxfXyBhcyBfb3Bjb2Rlc19hbGwKIAogX19hbGxfXyA9IFsiY29kZV9pbmZvIiwgImRpcyIsICJkaXNhc3NlbWJsZSIsICJkaXN0YiIsICJkaXNjbyIsCi0gICAgICAgICAgICJmaW5kbGluZXN0YXJ0cyIsICJmaW5kbGFiZWxzIiwgInNob3dfY29kZSJdICsgX29wY29kZXNfYWxsCisgICAgICAgICAgICJmaW5kbGluZXN0YXJ0cyIsICJmaW5kbGFiZWxzIiwgInNob3dfY29kZSIsCisgICAgICAgICAgICJnZXRfaW5zdHJ1Y3Rpb25zIiwgIkluc3RydWN0aW9uIiwgIkJ5dGVjb2RlIl0gKyBfb3Bjb2Rlc19hbGwKIGRlbCBfb3Bjb2Rlc19hbGwKIAogX2hhdmVfY29kZSA9ICh0eXBlcy5NZXRob2RUeXBlLCB0eXBlcy5GdW5jdGlvblR5cGUsIHR5cGVzLkNvZGVUeXBlLCB0eXBlKQpAQCAtMjUsMTQgKzI4LDE0IEBACiAgICAgICAgIGMgPSBjb21waWxlKHNvdXJjZSwgbmFtZSwgJ2V4ZWMnKQogICAgIHJldHVybiBjCiAKLWRlZiBkaXMoeD1Ob25lKToKK2RlZiBkaXMoeD1Ob25lLCAqLCBmaWxlPU5vbmUpOgogICAgICIiIkRpc2Fzc2VtYmxlIGNsYXNzZXMsIG1ldGhvZHMsIGZ1bmN0aW9ucywgb3IgY29kZS4KIAogICAgIFdpdGggbm8gYXJndW1lbnQsIGRpc2Fzc2VtYmxlIHRoZSBsYXN0IHRyYWNlYmFjay4KIAogICAgICIiIgogICAgIGlmIHggaXMgTm9uZToKLSAgICAgICAgZGlzdGIoKQorICAgICAgICBkaXN0YihmaWxlPWZpbGUpCiAgICAgICAgIHJldHVybgogICAgIGlmIGhhc2F0dHIoeCwgJ19fZnVuY19fJyk6ICAjIE1ldGhvZAogICAgICAgICB4ID0geC5fX2Z1bmNfXwpAQCAtNDIsMjMgKzQ1LDIzIEBACiAgICAgICAgIGl0ZW1zID0gc29ydGVkKHguX19kaWN0X18uaXRlbXMoKSkKICAgICAgICAgZm9yIG5hbWUsIHgxIGluIGl0ZW1zOgogICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh4MSwgX2hhdmVfY29kZSk6Ci0gICAgICAgICAgICAgICAgcHJpbnQoIkRpc2Fzc2VtYmx5IG9mICVzOiIgJSBuYW1lKQorICAgICAgICAgICAgICAgIHByaW50KCJEaXNhc3NlbWJseSBvZiAlczoiICUgbmFtZSwgZmlsZT1maWxlKQogICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgZGlzKHgxKQorICAgICAgICAgICAgICAgICAgICBkaXMoeDEsIGZpbGU9ZmlsZSkKICAgICAgICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yIGFzIG1zZzoKLSAgICAgICAgICAgICAgICAgICAgcHJpbnQoIlNvcnJ5OiIsIG1zZykKLSAgICAgICAgICAgICAgICBwcmludCgpCisgICAgICAgICAgICAgICAgICAgIHByaW50KCJTb3JyeToiLCBtc2csIGZpbGU9ZmlsZSkKKyAgICAgICAgICAgICAgICBwcmludChmaWxlPWZpbGUpCiAgICAgZWxpZiBoYXNhdHRyKHgsICdjb19jb2RlJyk6ICMgQ29kZSBvYmplY3QKLSAgICAgICAgZGlzYXNzZW1ibGUoeCkKKyAgICAgICAgZGlzYXNzZW1ibGUoeCwgZmlsZT1maWxlKQogICAgIGVsaWYgaXNpbnN0YW5jZSh4LCAoYnl0ZXMsIGJ5dGVhcnJheSkpOiAjIFJhdyBieXRlY29kZQotICAgICAgICBfZGlzYXNzZW1ibGVfYnl0ZXMoeCkKKyAgICAgICAgX2Rpc2Fzc2VtYmxlX2J5dGVzKHgsIGZpbGU9ZmlsZSkKICAgICBlbGlmIGlzaW5zdGFuY2UoeCwgc3RyKTogICAgIyBTb3VyY2UgY29kZQotICAgICAgICBfZGlzYXNzZW1ibGVfc3RyKHgpCisgICAgICAgIF9kaXNhc3NlbWJsZV9zdHIoeCwgZmlsZT1maWxlKQogICAgIGVsc2U6CiAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiZG9uJ3Qga25vdyBob3cgdG8gZGlzYXNzZW1ibGUgJXMgb2JqZWN0cyIgJQogICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSh4KS5fX25hbWVfXykKIAotZGVmIGRpc3RiKHRiPU5vbmUpOgorZGVmIGRpc3RiKHRiPU5vbmUsICosIGZpbGU9Tm9uZSk6CiAgICAgIiIiRGlzYXNzZW1ibGUgYSB0cmFjZWJhY2sgKGRlZmF1bHQ6IGxhc3QgdHJhY2ViYWNrKS4iIiIKICAgICBpZiB0YiBpcyBOb25lOgogICAgICAgICB0cnk6CkBAIC02Niw3ICs2OSw3IEBACiAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigibm8gbGFzdCB0cmFjZWJhY2sgdG8gZGlzYXNzZW1ibGUiKQogICAgICAgICB3aGlsZSB0Yi50Yl9uZXh0OiB0YiA9IHRiLnRiX25leHQKLSAgICBkaXNhc3NlbWJsZSh0Yi50Yl9mcmFtZS5mX2NvZGUsIHRiLnRiX2xhc3RpKQorICAgIGRpc2Fzc2VtYmxlKHRiLnRiX2ZyYW1lLmZfY29kZSwgdGIudGJfbGFzdGksIGZpbGU9ZmlsZSkKIAogIyBUaGUgaW5zcGVjdCBtb2R1bGUgaW50ZXJyb2dhdGVzIHRoaXMgZGljdGlvbmFyeSB0byBidWlsZCBpdHMKICMgbGlzdCBvZiBDT18qIGNvbnN0YW50cy4gSXQgaXMgYWxzbyB1c2VkIGJ5IHByZXR0eV9mbGFncyB0bwpAQCAtOTUsMTkgKzk4LDIyIEBACiAgICAgICAgIG5hbWVzLmFwcGVuZChoZXgoZmxhZ3MpKQogICAgIHJldHVybiAiLCAiLmpvaW4obmFtZXMpCiAKLWRlZiBjb2RlX2luZm8oeCk6Ci0gICAgIiIiRm9ybWF0dGVkIGRldGFpbHMgb2YgbWV0aG9kcywgZnVuY3Rpb25zLCBvciBjb2RlLiIiIgorZGVmIF9nZXRfY29kZV9vYmplY3QoeCk6CisgICAgIiIiSGVscGVyIHRvIGhhbmRsZSBtZXRob2RzLCBmdW5jdGlvbnMsIHN0cmluZ3MgYW5kIHJhdyBjb2RlIG9iamVjdHMiIiIKICAgICBpZiBoYXNhdHRyKHgsICdfX2Z1bmNfXycpOiAjIE1ldGhvZAogICAgICAgICB4ID0geC5fX2Z1bmNfXwogICAgIGlmIGhhc2F0dHIoeCwgJ19fY29kZV9fJyk6ICMgRnVuY3Rpb24KICAgICAgICAgeCA9IHguX19jb2RlX18KICAgICBpZiBpc2luc3RhbmNlKHgsIHN0cik6ICAgICAjIFNvdXJjZSBjb2RlCi0gICAgICAgIHggPSBfdHJ5X2NvbXBpbGUoeCwgIjxjb2RlX2luZm8+IikKKyAgICAgICAgeCA9IF90cnlfY29tcGlsZSh4LCAiPGRpc2Fzc2VtYmx5PiIpCiAgICAgaWYgaGFzYXR0cih4LCAnY29fY29kZScpOiAgIyBDb2RlIG9iamVjdAotICAgICAgICByZXR1cm4gX2Zvcm1hdF9jb2RlX2luZm8oeCkKLSAgICBlbHNlOgotICAgICAgICByYWlzZSBUeXBlRXJyb3IoImRvbid0IGtub3cgaG93IHRvIGRpc2Fzc2VtYmxlICVzIG9iamVjdHMiICUKLSAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUoeCkuX19uYW1lX18pCisgICAgICAgIHJldHVybiB4CisgICAgcmFpc2UgVHlwZUVycm9yKCJkb24ndCBrbm93IGhvdyB0byBkaXNhc3NlbWJsZSAlcyBvYmplY3RzIiAlCisgICAgICAgICAgICAgICAgICAgIHR5cGUoeCkuX19uYW1lX18pCisKK2RlZiBjb2RlX2luZm8oeCk6CisgICAgIiIiRm9ybWF0dGVkIGRldGFpbHMgb2YgbWV0aG9kcywgZnVuY3Rpb25zLCBvciBjb2RlLiIiIgorICAgIHJldHVybiBfZm9ybWF0X2NvZGVfaW5mbyhfZ2V0X2NvZGVfb2JqZWN0KHgpKQogCiBkZWYgX2Zvcm1hdF9jb2RlX2luZm8oY28pOgogICAgIGxpbmVzID0gW10KQEAgLTE0MCwxMDYgKzE0NiwyMDYgQEAKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgiJTRkOiAlcyIgJSBpX24pCiAgICAgcmV0dXJuICJcbiIuam9pbihsaW5lcykKIAotZGVmIHNob3dfY29kZShjbyk6Ci0gICAgIiIiUHJpbnQgZGV0YWlscyBvZiBtZXRob2RzLCBmdW5jdGlvbnMsIG9yIGNvZGUgdG8gc3Rkb3V0LiIiIgotICAgIHByaW50KGNvZGVfaW5mbyhjbykpCitkZWYgc2hvd19jb2RlKGNvLCAqLCBmaWxlPU5vbmUpOgorICAgICIiIlByaW50IGRldGFpbHMgb2YgbWV0aG9kcywgZnVuY3Rpb25zLCBvciBjb2RlIHRvICpmaWxlKi4KIAotZGVmIGRpc2Fzc2VtYmxlKGNvLCBsYXN0aT0tMSk6Ci0gICAgIiIiRGlzYXNzZW1ibGUgYSBjb2RlIG9iamVjdC4iIiIKLSAgICBjb2RlID0gY28uY29fY29kZQotICAgIGxhYmVscyA9IGZpbmRsYWJlbHMoY29kZSkKKyAgICBJZiAqZmlsZSogaXMgbm90IHByb3ZpZGVkLCB0aGUgb3V0cHV0IGlzIHByaW50ZWQgb24gc3Rkb3V0LgorICAgICIiIgorICAgIHByaW50KGNvZGVfaW5mbyhjbyksIGZpbGU9ZmlsZSkKKworX0luc3RydWN0aW9uID0gY29sbGVjdGlvbnMubmFtZWR0dXBsZSgiX0luc3RydWN0aW9uIiwKKyAgICAgIm9wbmFtZSBvcGNvZGUgYXJnIGFyZ3ZhbCBhcmdyZXByIG9mZnNldCBzdGFydHNfbGluZSBpc19qdW1wX3RhcmdldCIpCisKK2NsYXNzIEluc3RydWN0aW9uKF9JbnN0cnVjdGlvbik6CisgICAgIiIiRGV0YWlscyBmb3IgYSBieXRlY29kZSBvcGVyYXRpb24KKworICAgICAgIERlZmluZWQgZmllbGRzOgorICAgICAgICAgb3BuYW1lIC0gaHVtYW4gcmVhZGFibGUgbmFtZSBmb3Igb3BlcmF0aW9uCisgICAgICAgICBvcGNvZGUgLSBudW1lcmljIGNvZGUgZm9yIG9wZXJhdGlvbgorICAgICAgICAgYXJnIC0gbnVtZXJpYyBhcmd1bWVudCB0byBvcGVyYXRpb24gKGlmIGFueSksIG90aGVyd2lzZSBOb25lCisgICAgICAgICBhcmd2YWwgLSByZXNvbHZlZCBhcmcgdmFsdWUgKGlmIGtub3duKSwgb3RoZXJ3aXNlIHNhbWUgYXMgYXJnCisgICAgICAgICBhcmdyZXByIC0gaHVtYW4gcmVhZGFibGUgZGVzY3JpcHRpb24gb2Ygb3BlcmF0aW9uIGFyZ3VtZW50CisgICAgICAgICBvZmZzZXQgLSBzdGFydCBpbmRleCBvZiBvcGVyYXRpb24gd2l0aGluIGJ5dGVjb2RlIHNlcXVlbmNlCisgICAgICAgICBzdGFydHNfbGluZSAtIGxpbmUgc3RhcnRlZCBieSB0aGlzIG9wY29kZSAoaWYgYW55KSwgb3RoZXJ3aXNlIE5vbmUKKyAgICAgICAgIGlzX2p1bXBfdGFyZ2V0IC0gVHJ1ZSBpZiBvdGhlciBjb2RlIGp1bXBzIHRvIGhlcmUsIG90aGVyd2lzZSBGYWxzZQorICAgICIiIgorCisgICAgZGVmIF9kaXNhc3NlbWJsZShzZWxmLCBsaW5lbm9fd2lkdGg9MywgbWFya19hc19jdXJyZW50PUZhbHNlKToKKyAgICAgICAgIiIiRm9ybWF0IGluc3RydWN0aW9uIGRldGFpbHMgZm9yIGluY2x1c2lvbiBpbiBkaXNhc3NlbWJseSBvdXRwdXQKKworICAgICAgICAqbGluZW5vX3dpZHRoKiBzZXRzIHRoZSB3aWR0aCBvZiB0aGUgbGluZSBudW1iZXIgZmllbGQgKDAgb21pdHMgaXQpCisgICAgICAgICptYXJrX2FzX2N1cnJlbnQqIGluc2VydHMgYSAnLS0+JyBtYXJrZXIgYXJyb3cgYXMgcGFydCBvZiB0aGUgbGluZQorICAgICAgICAiIiIKKyAgICAgICAgZmllbGRzID0gW10KKyAgICAgICAgIyBDb2x1bW46IFNvdXJjZSBjb2RlIGxpbmUgbnVtYmVyCisgICAgICAgIGlmIGxpbmVub193aWR0aDoKKyAgICAgICAgICAgIGlmIHNlbGYuc3RhcnRzX2xpbmUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgbGluZW5vX2ZtdCA9ICIlJSVkZCIgJSBsaW5lbm9fd2lkdGgKKyAgICAgICAgICAgICAgICBmaWVsZHMuYXBwZW5kKGxpbmVub19mbXQgJSBzZWxmLnN0YXJ0c19saW5lKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBmaWVsZHMuYXBwZW5kKCcgJyAqIGxpbmVub193aWR0aCkKKyAgICAgICAgIyBDb2x1bW46IEN1cnJlbnQgaW5zdHJ1Y3Rpb24gaW5kaWNhdG9yCisgICAgICAgIGlmIG1hcmtfYXNfY3VycmVudDoKKyAgICAgICAgICAgIGZpZWxkcy5hcHBlbmQoJy0tPicpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmaWVsZHMuYXBwZW5kKCcgICAnKQorICAgICAgICAjIENvbHVtbjogSnVtcCB0YXJnZXQgbWFya2VyCisgICAgICAgIGlmIHNlbGYuaXNfanVtcF90YXJnZXQ6CisgICAgICAgICAgICBmaWVsZHMuYXBwZW5kKCc+PicpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmaWVsZHMuYXBwZW5kKCcgICcpCisgICAgICAgICMgQ29sdW1uOiBJbnN0cnVjdGlvbiBvZmZzZXQgZnJvbSBzdGFydCBvZiBjb2RlIHNlcXVlbmNlCisgICAgICAgIGZpZWxkcy5hcHBlbmQocmVwcihzZWxmLm9mZnNldCkucmp1c3QoNCkpCisgICAgICAgICMgQ29sdW1uOiBPcGNvZGUgbmFtZQorICAgICAgICBmaWVsZHMuYXBwZW5kKHNlbGYub3BuYW1lLmxqdXN0KDIwKSkKKyAgICAgICAgIyBDb2x1bW46IE9wY29kZSBhcmd1bWVudAorICAgICAgICBpZiBzZWxmLmFyZyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGZpZWxkcy5hcHBlbmQocmVwcihzZWxmLmFyZykucmp1c3QoNSkpCisgICAgICAgICAgICAjIENvbHVtbjogT3Bjb2RlIGFyZ3VtZW50IGRldGFpbHMKKyAgICAgICAgICAgIGlmIHNlbGYuYXJncmVwcjoKKyAgICAgICAgICAgICAgICBmaWVsZHMuYXBwZW5kKCcoJyArIHNlbGYuYXJncmVwciArICcpJykKKyAgICAgICAgcmV0dXJuICcgJy5qb2luKGZpZWxkcykucnN0cmlwKCkKKworCitkZWYgZ2V0X2luc3RydWN0aW9ucyh4LCAqLCBmaXJzdF9saW5lPU5vbmUpOgorICAgICIiIkl0ZXJhdG9yIGZvciB0aGUgb3Bjb2RlcyBpbiBtZXRob2RzLCBmdW5jdGlvbnMgb3IgY29kZQorCisgICAgR2VuZXJhdGVzIGEgc2VyaWVzIG9mIEluc3RydWN0aW9uIG5hbWVkIHR1cGxlcyBnaXZpbmcgdGhlIGRldGFpbHMgb2YKKyAgICBlYWNoIG9wZXJhdGlvbnMgaW4gdGhlIHN1cHBsaWVkIGNvZGUuCisKKyAgICBJZiAqZmlyc3RfbGluZSogaXMgbm90IE5vbmUsIGl0IGluZGljYXRlcyB0aGUgbGluZSBudW1iZXIgdGhhdCBzaG91bGQKKyAgICBiZSByZXBvcnRlZCBmb3IgdGhlIGZpcnN0IHNvdXJjZSBsaW5lIGluIHRoZSBkaXNhc3NlbWJsZWQgY29kZS4KKyAgICBPdGhlcndpc2UsIHRoZSBzb3VyY2UgbGluZSBpbmZvcm1hdGlvbiAoaWYgYW55KSBpcyB0YWtlbiBkaXJlY3RseSBmcm9tCisgICAgdGhlIGRpc2Fzc2VtYmxlZCBjb2RlIG9iamVjdC4KKyAgICAiIiIKKyAgICBjbyA9IF9nZXRfY29kZV9vYmplY3QoeCkKKyAgICBjZWxsX25hbWVzID0gY28uY29fY2VsbHZhcnMgKyBjby5jb19mcmVldmFycwogICAgIGxpbmVzdGFydHMgPSBkaWN0KGZpbmRsaW5lc3RhcnRzKGNvKSkKKyAgICBpZiBmaXJzdF9saW5lIGlzIG5vdCBOb25lOgorICAgICAgICBsaW5lX29mZnNldCA9IGZpcnN0X2xpbmUgLSBjby5jb19maXJzdGxpbmVubworICAgIGVsc2U6CisgICAgICAgIGxpbmVfb2Zmc2V0ID0gMAorICAgIHJldHVybiBfZ2V0X2luc3RydWN0aW9uc19ieXRlcyhjby5jb19jb2RlLCBjby5jb192YXJuYW1lcywgY28uY29fbmFtZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvLmNvX2NvbnN0cywgY2VsbF9uYW1lcywgbGluZXN0YXJ0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZV9vZmZzZXQpCisKK2RlZiBfZ2V0X2NvbnN0X2luZm8oY29uc3RfaW5kZXgsIGNvbnN0X2xpc3QpOgorICAgICIiIkhlbHBlciB0byBnZXQgb3B0aW9uYWwgZGV0YWlscyBhYm91dCBjb25zdCByZWZlcmVuY2VzCisKKyAgICAgICBSZXR1cm5zIHRoZSBkZXJlZmVyZW5jZWQgY29uc3RhbnQgYW5kIGl0cyByZXByIGlmIHRoZSBjb25zdGFudAorICAgICAgIGxpc3QgaXMgZGVmaW5lZC4KKyAgICAgICBPdGhlcndpc2UgcmV0dXJucyB0aGUgY29uc3RhbnQgaW5kZXggYW5kIGl0cyByZXByKCkuCisgICAgIiIiCisgICAgYXJndmFsID0gY29uc3RfaW5kZXgKKyAgICBpZiBjb25zdF9saXN0IGlzIG5vdCBOb25lOgorICAgICAgICBhcmd2YWwgPSBjb25zdF9saXN0W2NvbnN0X2luZGV4XQorICAgIHJldHVybiBhcmd2YWwsIHJlcHIoYXJndmFsKQorCitkZWYgX2dldF9uYW1lX2luZm8obmFtZV9pbmRleCwgbmFtZV9saXN0KToKKyAgICAiIiJIZWxwZXIgdG8gZ2V0IG9wdGlvbmFsIGRldGFpbHMgYWJvdXQgbmFtZWQgcmVmZXJlbmNlcworCisgICAgICAgUmV0dXJucyB0aGUgZGVyZWZlcmVuY2VkIG5hbWUgYXMgYm90aCB2YWx1ZSBhbmQgcmVwciBpZiB0aGUgbmFtZQorICAgICAgIGxpc3QgaXMgZGVmaW5lZC4KKyAgICAgICBPdGhlcndpc2UgcmV0dXJucyB0aGUgbmFtZSBpbmRleCBhbmQgaXRzIHJlcHIoKS4KKyAgICAiIiIKKyAgICBhcmd2YWwgPSBuYW1lX2luZGV4CisgICAgaWYgbmFtZV9saXN0IGlzIG5vdCBOb25lOgorICAgICAgICBhcmd2YWwgPSBuYW1lX2xpc3RbbmFtZV9pbmRleF0KKyAgICAgICAgYXJncmVwciA9IGFyZ3ZhbAorICAgIGVsc2U6CisgICAgICAgIGFyZ3JlcHIgPSByZXByKGFyZ3ZhbCkKKyAgICByZXR1cm4gYXJndmFsLCBhcmdyZXByCisKKworZGVmIF9nZXRfaW5zdHJ1Y3Rpb25zX2J5dGVzKGNvZGUsIHZhcm5hbWVzPU5vbmUsIG5hbWVzPU5vbmUsIGNvbnN0YW50cz1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgIGNlbGxzPU5vbmUsIGxpbmVzdGFydHM9Tm9uZSwgbGluZV9vZmZzZXQ9MCk6CisgICAgIiIiSXRlcmF0ZSBvdmVyIHRoZSBpbnN0cnVjdGlvbnMgaW4gYSBieXRlY29kZSBzdHJpbmcuCisKKyAgICBHZW5lcmF0ZXMgYSBzZXF1ZW5jZSBvZiBJbnN0cnVjdGlvbiBuYW1lZHR1cGxlcyBnaXZpbmcgdGhlIGRldGFpbHMgb2YgZWFjaAorICAgIG9wY29kZS4gIEFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNvZGUncyBydW50aW1lIGVudmlyb25tZW50CisgICAgKGUuZy4gdmFyaWFibGUgbmFtZXMsIGNvbnN0YW50cykgY2FuIGJlIHNwZWNpZmllZCB1c2luZyBvcHRpb25hbAorICAgIGFyZ3VtZW50cy4KKworICAgICIiIgorICAgIGxhYmVscyA9IGZpbmRsYWJlbHMoY29kZSkKKyAgICBleHRlbmRlZF9hcmcgPSAwCisgICAgc3RhcnRzX2xpbmUgPSBOb25lCisgICAgZnJlZSA9IE5vbmUKKyAgICAjIGVudW1lcmF0ZSgpIGlzIG5vdCBhbiBvcHRpb24sIHNpbmNlIHdlIHNvbWV0aW1lcyBwcm9jZXNzCisgICAgIyBtdWx0aXBsZSBlbGVtZW50cyBvbiBhIHNpbmdsZSBwYXNzIHRocm91Z2ggdGhlIGxvb3AKICAgICBuID0gbGVuKGNvZGUpCiAgICAgaSA9IDAKLSAgICBleHRlbmRlZF9hcmcgPSAwCi0gICAgZnJlZSA9IE5vbmUKICAgICB3aGlsZSBpIDwgbjoKICAgICAgICAgb3AgPSBjb2RlW2ldCi0gICAgICAgIGlmIGkgaW4gbGluZXN0YXJ0czoKLSAgICAgICAgICAgIGlmIGkgPiAwOgotICAgICAgICAgICAgICAgIHByaW50KCkKLSAgICAgICAgICAgIHByaW50KCIlM2QiICUgbGluZXN0YXJ0c1tpXSwgZW5kPScgJykKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHByaW50KCcgICAnLCBlbmQ9JyAnKQotCi0gICAgICAgIGlmIGkgPT0gbGFzdGk6IHByaW50KCctLT4nLCBlbmQ9JyAnKQotICAgICAgICBlbHNlOiBwcmludCgnICAgJywgZW5kPScgJykKLSAgICAgICAgaWYgaSBpbiBsYWJlbHM6IHByaW50KCc+PicsIGVuZD0nICcpCi0gICAgICAgIGVsc2U6IHByaW50KCcgICcsIGVuZD0nICcpCi0gICAgICAgIHByaW50KHJlcHIoaSkucmp1c3QoNCksIGVuZD0nICcpCi0gICAgICAgIHByaW50KG9wbmFtZVtvcF0ubGp1c3QoMjApLCBlbmQ9JyAnKQorICAgICAgICBvZmZzZXQgPSBpCisgICAgICAgIGlmIGxpbmVzdGFydHMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzdGFydHNfbGluZSA9IGxpbmVzdGFydHMuZ2V0KGksIE5vbmUpCisgICAgICAgICAgICBpZiBzdGFydHNfbGluZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBzdGFydHNfbGluZSArPSBsaW5lX29mZnNldAorICAgICAgICBpc19qdW1wX3RhcmdldCA9IGkgaW4gbGFiZWxzCiAgICAgICAgIGkgPSBpKzEKKyAgICAgICAgYXJnID0gTm9uZQorICAgICAgICBhcmd2YWwgPSBOb25lCisgICAgICAgIGFyZ3JlcHIgPSAnJwogICAgICAgICBpZiBvcCA+PSBIQVZFX0FSR1VNRU5UOgotICAgICAgICAgICAgb3BhcmcgPSBjb2RlW2ldICsgY29kZVtpKzFdKjI1NiArIGV4dGVuZGVkX2FyZworICAgICAgICAgICAgYXJnID0gY29kZVtpXSArIGNvZGVbaSsxXSoyNTYgKyBleHRlbmRlZF9hcmcKICAgICAgICAgICAgIGV4dGVuZGVkX2FyZyA9IDAKICAgICAgICAgICAgIGkgPSBpKzIKICAgICAgICAgICAgIGlmIG9wID09IEVYVEVOREVEX0FSRzoKLSAgICAgICAgICAgICAgICBleHRlbmRlZF9hcmcgPSBvcGFyZyo2NTUzNgotICAgICAgICAgICAgcHJpbnQocmVwcihvcGFyZykucmp1c3QoNSksIGVuZD0nICcpCisgICAgICAgICAgICAgICAgZXh0ZW5kZWRfYXJnID0gYXJnKjY1NTM2CisgICAgICAgICAgICAjICBTZXQgYXJndmFsIHRvIHRoZSBkZXJlZmVyZW5jZWQgdmFsdWUgb2YgdGhlIGFyZ3VtZW50IHdoZW4KKyAgICAgICAgICAgICMgIGF2YWlsYWJlLCBhbmQgYXJncmVwciB0byB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFyZ3ZhbC4KKyAgICAgICAgICAgICMgICAgX2Rpc2Fzc2VtYmxlX2J5dGVzIG5lZWRzIHRoZSBzdHJpbmcgcmVwciBvZiB0aGUKKyAgICAgICAgICAgICMgICAgcmF3IG5hbWUgaW5kZXggZm9yIExPQURfR0xPQkFMLCBMT0FEX0NPTlNULCBldGMuCisgICAgICAgICAgICBhcmd2YWwgPSBhcmcKICAgICAgICAgICAgIGlmIG9wIGluIGhhc2NvbnN0OgotICAgICAgICAgICAgICAgIHByaW50KCcoJyArIHJlcHIoY28uY29fY29uc3RzW29wYXJnXSkgKyAnKScsIGVuZD0nICcpCisgICAgICAgICAgICAgICAgYXJndmFsLCBhcmdyZXByID0gX2dldF9jb25zdF9pbmZvKGFyZywgY29uc3RhbnRzKQogICAgICAgICAgICAgZWxpZiBvcCBpbiBoYXNuYW1lOgotICAgICAgICAgICAgICAgIHByaW50KCcoJyArIGNvLmNvX25hbWVzW29wYXJnXSArICcpJywgZW5kPScgJykKKyAgICAgICAgICAgICAgICBhcmd2YWwsIGFyZ3JlcHIgPSBfZ2V0X25hbWVfaW5mbyhhcmcsIG5hbWVzKQogICAgICAgICAgICAgZWxpZiBvcCBpbiBoYXNqcmVsOgotICAgICAgICAgICAgICAgIHByaW50KCcodG8gJyArIHJlcHIoaSArIG9wYXJnKSArICcpJywgZW5kPScgJykKKyAgICAgICAgICAgICAgICBhcmd2YWwgPSBpICsgYXJnCisgICAgICAgICAgICAgICAgYXJncmVwciA9ICJ0byAiICsgcmVwcihhcmd2YWwpCiAgICAgICAgICAgICBlbGlmIG9wIGluIGhhc2xvY2FsOgotICAgICAgICAgICAgICAgIHByaW50KCcoJyArIGNvLmNvX3Zhcm5hbWVzW29wYXJnXSArICcpJywgZW5kPScgJykKKyAgICAgICAgICAgICAgICBhcmd2YWwsIGFyZ3JlcHIgPSBfZ2V0X25hbWVfaW5mbyhhcmcsIHZhcm5hbWVzKQogICAgICAgICAgICAgZWxpZiBvcCBpbiBoYXNjb21wYXJlOgotICAgICAgICAgICAgICAgIHByaW50KCcoJyArIGNtcF9vcFtvcGFyZ10gKyAnKScsIGVuZD0nICcpCisgICAgICAgICAgICAgICAgYXJndmFsID0gY21wX29wW2FyZ10KKyAgICAgICAgICAgICAgICBhcmdyZXByID0gYXJndmFsCiAgICAgICAgICAgICBlbGlmIG9wIGluIGhhc2ZyZWU6Ci0gICAgICAgICAgICAgICAgaWYgZnJlZSBpcyBOb25lOgotICAgICAgICAgICAgICAgICAgICBmcmVlID0gY28uY29fY2VsbHZhcnMgKyBjby5jb19mcmVldmFycwotICAgICAgICAgICAgICAgIHByaW50KCcoJyArIGZyZWVbb3BhcmddICsgJyknLCBlbmQ9JyAnKQorICAgICAgICAgICAgICAgIGFyZ3ZhbCwgYXJncmVwciA9IF9nZXRfbmFtZV9pbmZvKGFyZywgY2VsbHMpCiAgICAgICAgICAgICBlbGlmIG9wIGluIGhhc25hcmdzOgotICAgICAgICAgICAgICAgIHByaW50KCcoJWQgcG9zaXRpb25hbCwgJWQga2V5d29yZCBwYWlyKScKLSAgICAgICAgICAgICAgICAgICAgICAlIChjb2RlW2ktMl0sIGNvZGVbaS0xXSksIGVuZD0nICcpCi0gICAgICAgIHByaW50KCkKKyAgICAgICAgICAgICAgICBhcmdyZXByID0gIiVkIHBvc2l0aW9uYWwsICVkIGtleXdvcmQgcGFpciIgJSAoY29kZVtpLTJdLCBjb2RlW2ktMV0pCisgICAgICAgIHlpZWxkIEluc3RydWN0aW9uKG9wbmFtZVtvcF0sIG9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICBhcmcsIGFyZ3ZhbCwgYXJncmVwciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0LCBzdGFydHNfbGluZSwgaXNfanVtcF90YXJnZXQpCisKK2RlZiBkaXNhc3NlbWJsZShjbywgbGFzdGk9LTEsICosIGZpbGU9Tm9uZSk6CisgICAgIiIiRGlzYXNzZW1ibGUgYSBjb2RlIG9iamVjdC4iIiIKKyAgICBjZWxsX25hbWVzID0gY28uY29fY2VsbHZhcnMgKyBjby5jb19mcmVldmFycworICAgIGxpbmVzdGFydHMgPSBkaWN0KGZpbmRsaW5lc3RhcnRzKGNvKSkKKyAgICBfZGlzYXNzZW1ibGVfYnl0ZXMoY28uY29fY29kZSwgbGFzdGksIGNvLmNvX3Zhcm5hbWVzLCBjby5jb19uYW1lcywKKyAgICAgICAgICAgICAgICAgICAgICAgY28uY29fY29uc3RzLCBjZWxsX25hbWVzLCBsaW5lc3RhcnRzLCBmaWxlPWZpbGUpCiAKIGRlZiBfZGlzYXNzZW1ibGVfYnl0ZXMoY29kZSwgbGFzdGk9LTEsIHZhcm5hbWVzPU5vbmUsIG5hbWVzPU5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbnN0YW50cz1Ob25lKToKLSAgICBsYWJlbHMgPSBmaW5kbGFiZWxzKGNvZGUpCi0gICAgbiA9IGxlbihjb2RlKQotICAgIGkgPSAwCi0gICAgd2hpbGUgaSA8IG46Ci0gICAgICAgIG9wID0gY29kZVtpXQotICAgICAgICBpZiBpID09IGxhc3RpOiBwcmludCgnLS0+JywgZW5kPScgJykKLSAgICAgICAgZWxzZTogcHJpbnQoJyAgICcsIGVuZD0nICcpCi0gICAgICAgIGlmIGkgaW4gbGFiZWxzOiBwcmludCgnPj4nLCBlbmQ9JyAnKQotICAgICAgICBlbHNlOiBwcmludCgnICAnLCBlbmQ9JyAnKQotICAgICAgICBwcmludChyZXByKGkpLnJqdXN0KDQpLCBlbmQ9JyAnKQotICAgICAgICBwcmludChvcG5hbWVbb3BdLmxqdXN0KDE1KSwgZW5kPScgJykKLSAgICAgICAgaSA9IGkrMQotICAgICAgICBpZiBvcCA+PSBIQVZFX0FSR1VNRU5UOgotICAgICAgICAgICAgb3BhcmcgPSBjb2RlW2ldICsgY29kZVtpKzFdKjI1NgotICAgICAgICAgICAgaSA9IGkrMgotICAgICAgICAgICAgcHJpbnQocmVwcihvcGFyZykucmp1c3QoNSksIGVuZD0nICcpCi0gICAgICAgICAgICBpZiBvcCBpbiBoYXNjb25zdDoKLSAgICAgICAgICAgICAgICBpZiBjb25zdGFudHM6Ci0gICAgICAgICAgICAgICAgICAgIHByaW50KCcoJyArIHJlcHIoY29uc3RhbnRzW29wYXJnXSkgKyAnKScsIGVuZD0nICcpCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgcHJpbnQoJyglZCknJW9wYXJnLCBlbmQ9JyAnKQotICAgICAgICAgICAgZWxpZiBvcCBpbiBoYXNuYW1lOgotICAgICAgICAgICAgICAgIGlmIG5hbWVzIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgICAgICBwcmludCgnKCcgKyBuYW1lc1tvcGFyZ10gKyAnKScsIGVuZD0nICcpCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgcHJpbnQoJyglZCknJW9wYXJnLCBlbmQ9JyAnKQotICAgICAgICAgICAgZWxpZiBvcCBpbiBoYXNqcmVsOgotICAgICAgICAgICAgICAgIHByaW50KCcodG8gJyArIHJlcHIoaSArIG9wYXJnKSArICcpJywgZW5kPScgJykKLSAgICAgICAgICAgIGVsaWYgb3AgaW4gaGFzbG9jYWw6Ci0gICAgICAgICAgICAgICAgaWYgdmFybmFtZXM6Ci0gICAgICAgICAgICAgICAgICAgIHByaW50KCcoJyArIHZhcm5hbWVzW29wYXJnXSArICcpJywgZW5kPScgJykKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBwcmludCgnKCVkKScgJSBvcGFyZywgZW5kPScgJykKLSAgICAgICAgICAgIGVsaWYgb3AgaW4gaGFzY29tcGFyZToKLSAgICAgICAgICAgICAgICBwcmludCgnKCcgKyBjbXBfb3Bbb3BhcmddICsgJyknLCBlbmQ9JyAnKQotICAgICAgICAgICAgZWxpZiBvcCBpbiBoYXNuYXJnczoKLSAgICAgICAgICAgICAgICBwcmludCgnKCVkIHBvc2l0aW9uYWwsICVkIGtleXdvcmQgcGFpciknCi0gICAgICAgICAgICAgICAgICAgICAgJSAoY29kZVtpLTJdLCBjb2RlW2ktMV0pLCBlbmQ9JyAnKQotICAgICAgICBwcmludCgpCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0YW50cz1Ob25lLCBjZWxscz1Ob25lLCBsaW5lc3RhcnRzPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICosIGZpbGU9Tm9uZSwgbGluZV9vZmZzZXQ9MCk6CisgICAgIyBPbWl0IHRoZSBsaW5lIG51bWJlciBjb2x1bW4gZW50aXJlbHkgaWYgd2UgaGF2ZSBubyBsaW5lIG51bWJlciBpbmZvCisgICAgc2hvd19saW5lbm8gPSBsaW5lc3RhcnRzIGlzIG5vdCBOb25lCisgICAgIyBUT0RPPzogQWRqdXN0IHdpZHRoIHVwd2FyZHMgaWYgbWF4KGxpbmVzdGFydHMudmFsdWVzKCkpID49IDEwMDA/CisgICAgbGluZW5vX3dpZHRoID0gMyBpZiBzaG93X2xpbmVubyBlbHNlIDAKKyAgICBmb3IgaW5zdHIgaW4gX2dldF9pbnN0cnVjdGlvbnNfYnl0ZXMoY29kZSwgdmFybmFtZXMsIG5hbWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdGFudHMsIGNlbGxzLCBsaW5lc3RhcnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lX29mZnNldD1saW5lX29mZnNldCk6CisgICAgICAgIG5ld19zb3VyY2VfbGluZSA9IChzaG93X2xpbmVubyBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RyLnN0YXJ0c19saW5lIGlzIG5vdCBOb25lIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdHIub2Zmc2V0ID4gMCkKKyAgICAgICAgaWYgbmV3X3NvdXJjZV9saW5lOgorICAgICAgICAgICAgcHJpbnQoZmlsZT1maWxlKQorICAgICAgICBpc19jdXJyZW50X2luc3RyID0gaW5zdHIub2Zmc2V0ID09IGxhc3RpCisgICAgICAgIHByaW50KGluc3RyLl9kaXNhc3NlbWJsZShsaW5lbm9fd2lkdGgsIGlzX2N1cnJlbnRfaW5zdHIpLCBmaWxlPWZpbGUpCiAKLWRlZiBfZGlzYXNzZW1ibGVfc3RyKHNvdXJjZSk6CitkZWYgX2Rpc2Fzc2VtYmxlX3N0cihzb3VyY2UsICosIGZpbGU9Tm9uZSk6CiAgICAgIiIiQ29tcGlsZSB0aGUgc291cmNlIHN0cmluZywgdGhlbiBkaXNhc3NlbWJsZSB0aGUgY29kZSBvYmplY3QuIiIiCi0gICAgZGlzYXNzZW1ibGUoX3RyeV9jb21waWxlKHNvdXJjZSwgJzxkaXM+JykpCisgICAgZGlzYXNzZW1ibGUoX3RyeV9jb21waWxlKHNvdXJjZSwgJzxkaXM+JyksIGZpbGU9ZmlsZSkKIAogZGlzY28gPSBkaXNhc3NlbWJsZSAgICAgICAgICAgICAgICAgICAgICMgWFhYIEZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eQogCkBAIC0yNTAsMTkgKzM1NiwyMSBAQAogCiAgICAgIiIiCiAgICAgbGFiZWxzID0gW10KKyAgICAjIGVudW1lcmF0ZSgpIGlzIG5vdCBhbiBvcHRpb24sIHNpbmNlIHdlIHNvbWV0aW1lcyBwcm9jZXNzCisgICAgIyBtdWx0aXBsZSBlbGVtZW50cyBvbiBhIHNpbmdsZSBwYXNzIHRocm91Z2ggdGhlIGxvb3AKICAgICBuID0gbGVuKGNvZGUpCiAgICAgaSA9IDAKICAgICB3aGlsZSBpIDwgbjoKICAgICAgICAgb3AgPSBjb2RlW2ldCiAgICAgICAgIGkgPSBpKzEKICAgICAgICAgaWYgb3AgPj0gSEFWRV9BUkdVTUVOVDoKLSAgICAgICAgICAgIG9wYXJnID0gY29kZVtpXSArIGNvZGVbaSsxXSoyNTYKKyAgICAgICAgICAgIGFyZyA9IGNvZGVbaV0gKyBjb2RlW2krMV0qMjU2CiAgICAgICAgICAgICBpID0gaSsyCiAgICAgICAgICAgICBsYWJlbCA9IC0xCiAgICAgICAgICAgICBpZiBvcCBpbiBoYXNqcmVsOgotICAgICAgICAgICAgICAgIGxhYmVsID0gaStvcGFyZworICAgICAgICAgICAgICAgIGxhYmVsID0gaSthcmcKICAgICAgICAgICAgIGVsaWYgb3AgaW4gaGFzamFiczoKLSAgICAgICAgICAgICAgICBsYWJlbCA9IG9wYXJnCisgICAgICAgICAgICAgICAgbGFiZWwgPSBhcmcKICAgICAgICAgICAgIGlmIGxhYmVsID49IDA6CiAgICAgICAgICAgICAgICAgaWYgbGFiZWwgbm90IGluIGxhYmVsczoKICAgICAgICAgICAgICAgICAgICAgbGFiZWxzLmFwcGVuZChsYWJlbCkKQEAgLTI5MCwyNyArMzk4LDc3IEBACiAgICAgaWYgbGluZW5vICE9IGxhc3RsaW5lbm86CiAgICAgICAgIHlpZWxkIChhZGRyLCBsaW5lbm8pCiAKK2NsYXNzIEJ5dGVjb2RlOgorICAgICIiIlRoZSBieXRlY29kZSBvcGVyYXRpb25zIG9mIGEgcGllY2Ugb2YgY29kZQorCisgICAgSW5zdGFudGlhdGUgdGhpcyB3aXRoIGEgZnVuY3Rpb24sIG1ldGhvZCwgc3RyaW5nIG9mIGNvZGUsIG9yIGEgY29kZSBvYmplY3QKKyAgICAoYXMgcmV0dXJuZWQgYnkgY29tcGlsZSgpKS4KKworICAgIEl0ZXJhdGluZyBvdmVyIHRoaXMgeWllbGRzIHRoZSBieXRlY29kZSBvcGVyYXRpb25zIGFzIEluc3RydWN0aW9uIGluc3RhbmNlcy4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgeCwgKiwgZmlyc3RfbGluZT1Ob25lLCBjdXJyZW50X29mZnNldD1Ob25lKToKKyAgICAgICAgc2VsZi5jb2Rlb2JqID0gY28gPSBfZ2V0X2NvZGVfb2JqZWN0KHgpCisgICAgICAgIGlmIGZpcnN0X2xpbmUgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYuZmlyc3RfbGluZSA9IGNvLmNvX2ZpcnN0bGluZW5vCisgICAgICAgICAgICBzZWxmLl9saW5lX29mZnNldCA9IDAKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmlyc3RfbGluZSA9IGZpcnN0X2xpbmUKKyAgICAgICAgICAgIHNlbGYuX2xpbmVfb2Zmc2V0ID0gZmlyc3RfbGluZSAtIGNvLmNvX2ZpcnN0bGluZW5vCisgICAgICAgIHNlbGYuX2NlbGxfbmFtZXMgPSBjby5jb19jZWxsdmFycyArIGNvLmNvX2ZyZWV2YXJzCisgICAgICAgIHNlbGYuX2xpbmVzdGFydHMgPSBkaWN0KGZpbmRsaW5lc3RhcnRzKGNvKSkKKyAgICAgICAgc2VsZi5fb3JpZ2luYWxfb2JqZWN0ID0geAorICAgICAgICBzZWxmLmN1cnJlbnRfb2Zmc2V0ID0gY3VycmVudF9vZmZzZXQKKworICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgY28gPSBzZWxmLmNvZGVvYmoKKyAgICAgICAgcmV0dXJuIF9nZXRfaW5zdHJ1Y3Rpb25zX2J5dGVzKGNvLmNvX2NvZGUsIGNvLmNvX3Zhcm5hbWVzLCBjby5jb19uYW1lcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvLmNvX2NvbnN0cywgc2VsZi5fY2VsbF9uYW1lcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2xpbmVzdGFydHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lX29mZnNldD1zZWxmLl9saW5lX29mZnNldCkKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICJ7fSh7IXJ9KSIuZm9ybWF0KHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fb3JpZ2luYWxfb2JqZWN0KQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGZyb21fdHJhY2ViYWNrKGNscywgdGIpOgorICAgICAgICAiIiIgQ29uc3RydWN0IGEgQnl0ZWNvZGUgZnJvbSB0aGUgZ2l2ZW4gdHJhY2ViYWNrICIiIgorICAgICAgICB3aGlsZSB0Yi50Yl9uZXh0OgorICAgICAgICAgICAgdGIgPSB0Yi50Yl9uZXh0CisgICAgICAgIHJldHVybiBjbHModGIudGJfZnJhbWUuZl9jb2RlLCBjdXJyZW50X29mZnNldD10Yi50Yl9sYXN0aSkKKworICAgIGRlZiBpbmZvKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gZm9ybWF0dGVkIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjb2RlIG9iamVjdC4iIiIKKyAgICAgICAgcmV0dXJuIF9mb3JtYXRfY29kZV9pbmZvKHNlbGYuY29kZW9iaikKKworICAgIGRlZiBkaXMoc2VsZik6CisgICAgICAgICIiIlJldHVybiBhIGZvcm1hdHRlZCB2aWV3IG9mIHRoZSBieXRlY29kZSBvcGVyYXRpb25zLiIiIgorICAgICAgICBjbyA9IHNlbGYuY29kZW9iagorICAgICAgICBpZiBzZWxmLmN1cnJlbnRfb2Zmc2V0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgb2Zmc2V0ID0gc2VsZi5jdXJyZW50X29mZnNldAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb2Zmc2V0ID0gLTEKKyAgICAgICAgd2l0aCBpby5TdHJpbmdJTygpIGFzIG91dHB1dDoKKyAgICAgICAgICAgIF9kaXNhc3NlbWJsZV9ieXRlcyhjby5jb19jb2RlLCB2YXJuYW1lcz1jby5jb192YXJuYW1lcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lcz1jby5jb19uYW1lcywgY29uc3RhbnRzPWNvLmNvX2NvbnN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxscz1zZWxmLl9jZWxsX25hbWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzdGFydHM9c2VsZi5fbGluZXN0YXJ0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lX29mZnNldD1zZWxmLl9saW5lX29mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlPW91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0aT1vZmZzZXQpCisgICAgICAgICAgICByZXR1cm4gb3V0cHV0LmdldHZhbHVlKCkKKworCiBkZWYgX3Rlc3QoKToKICAgICAiIiJTaW1wbGUgdGVzdCBwcm9ncmFtIHRvIGRpc2Fzc2VtYmxlIGEgZmlsZS4iIiIKLSAgICBpZiBzeXMuYXJndlsxOl06Ci0gICAgICAgIGlmIHN5cy5hcmd2WzI6XToKLSAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoInVzYWdlOiBweXRob24gZGlzLnB5IFstfGZpbGVdXG4iKQotICAgICAgICAgICAgc3lzLmV4aXQoMikKLSAgICAgICAgZm4gPSBzeXMuYXJndlsxXQotICAgICAgICBpZiBub3QgZm4gb3IgZm4gPT0gIi0iOgotICAgICAgICAgICAgZm4gPSBOb25lCi0gICAgZWxzZToKLSAgICAgICAgZm4gPSBOb25lCi0gICAgaWYgZm4gaXMgTm9uZToKLSAgICAgICAgZiA9IHN5cy5zdGRpbgotICAgIGVsc2U6Ci0gICAgICAgIGYgPSBvcGVuKGZuKQotICAgIHNvdXJjZSA9IGYucmVhZCgpCi0gICAgaWYgZm4gaXMgbm90IE5vbmU6Ci0gICAgICAgIGYuY2xvc2UoKQotICAgIGVsc2U6Ci0gICAgICAgIGZuID0gIjxzdGRpbj4iCi0gICAgY29kZSA9IGNvbXBpbGUoc291cmNlLCBmbiwgImV4ZWMiKQorICAgIGltcG9ydCBhcmdwYXJzZQorCisgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJ2luZmlsZScsIHR5cGU9YXJncGFyc2UuRmlsZVR5cGUoKSwgbmFyZ3M9Jz8nLCBkZWZhdWx0PSctJykKKyAgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQorICAgIHdpdGggYXJncy5pbmZpbGUgYXMgaW5maWxlOgorICAgICAgICBzb3VyY2UgPSBpbmZpbGUucmVhZCgpCisgICAgY29kZSA9IGNvbXBpbGUoc291cmNlLCBhcmdzLmluZmlsZS5uYW1lLCAiZXhlYyIpCiAgICAgZGlzKGNvZGUpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2FyY2hpdmVfdXRpbC5weSBiL0xpYi9kaXN0dXRpbHMvYXJjaGl2ZV91dGlsLnB5CmluZGV4IGZjZGEwOGUuLjQ0NzBiYjAgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvYXJjaGl2ZV91dGlsLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvYXJjaGl2ZV91dGlsLnB5CkBAIC0xOCwxNSArMTgsNTUgQEAKIGZyb20gZGlzdHV0aWxzLmRpcl91dGlsIGltcG9ydCBta3BhdGgKIGZyb20gZGlzdHV0aWxzIGltcG9ydCBsb2cKIAotZGVmIG1ha2VfdGFyYmFsbChiYXNlX25hbWUsIGJhc2VfZGlyLCBjb21wcmVzcz0iZ3ppcCIsIHZlcmJvc2U9MCwgZHJ5X3J1bj0wKToKK3RyeToKKyAgICBmcm9tIHB3ZCBpbXBvcnQgZ2V0cHduYW0KK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBnZXRwd25hbSA9IE5vbmUKKwordHJ5OgorICAgIGZyb20gZ3JwIGltcG9ydCBnZXRncm5hbQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGdldGdybmFtID0gTm9uZQorCitkZWYgX2dldF9naWQobmFtZSk6CisgICAgIiIiUmV0dXJucyBhIGdpZCwgZ2l2ZW4gYSBncm91cCBuYW1lLiIiIgorICAgIGlmIGdldGdybmFtIGlzIE5vbmUgb3IgbmFtZSBpcyBOb25lOgorICAgICAgICByZXR1cm4gTm9uZQorICAgIHRyeToKKyAgICAgICAgcmVzdWx0ID0gZ2V0Z3JuYW0obmFtZSkKKyAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgIHJlc3VsdCA9IE5vbmUKKyAgICBpZiByZXN1bHQgaXMgbm90IE5vbmU6CisgICAgICAgIHJldHVybiByZXN1bHRbMl0KKyAgICByZXR1cm4gTm9uZQorCitkZWYgX2dldF91aWQobmFtZSk6CisgICAgIiIiUmV0dXJucyBhbiB1aWQsIGdpdmVuIGEgdXNlciBuYW1lLiIiIgorICAgIGlmIGdldHB3bmFtIGlzIE5vbmUgb3IgbmFtZSBpcyBOb25lOgorICAgICAgICByZXR1cm4gTm9uZQorICAgIHRyeToKKyAgICAgICAgcmVzdWx0ID0gZ2V0cHduYW0obmFtZSkKKyAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgIHJlc3VsdCA9IE5vbmUKKyAgICBpZiByZXN1bHQgaXMgbm90IE5vbmU6CisgICAgICAgIHJldHVybiByZXN1bHRbMl0KKyAgICByZXR1cm4gTm9uZQorCitkZWYgbWFrZV90YXJiYWxsKGJhc2VfbmFtZSwgYmFzZV9kaXIsIGNvbXByZXNzPSJnemlwIiwgdmVyYm9zZT0wLCBkcnlfcnVuPTAsCisgICAgICAgICAgICAgICAgIG93bmVyPU5vbmUsIGdyb3VwPU5vbmUpOgogICAgICIiIkNyZWF0ZSBhIChwb3NzaWJseSBjb21wcmVzc2VkKSB0YXIgZmlsZSBmcm9tIGFsbCB0aGUgZmlsZXMgdW5kZXIKICAgICAnYmFzZV9kaXInLgogCiAgICAgJ2NvbXByZXNzJyBtdXN0IGJlICJnemlwIiAodGhlIGRlZmF1bHQpLCAiY29tcHJlc3MiLCAiYnppcDIiLCBvciBOb25lLgotICAgIEJvdGggInRhciIgYW5kIHRoZSBjb21wcmVzc2lvbiB1dGlsaXR5IG5hbWVkIGJ5ICdjb21wcmVzcycgbXVzdCBiZSBvbgotICAgIHRoZSBkZWZhdWx0IHByb2dyYW0gc2VhcmNoIHBhdGgsIHNvIHRoaXMgaXMgcHJvYmFibHkgVW5peC1zcGVjaWZpYy4KKyAgICAoY29tcHJlc3Mgd2lsbCBiZSBkZXByZWNhdGVkIGluIFB5dGhvbiAzLjIpCisKKyAgICAnb3duZXInIGFuZCAnZ3JvdXAnIGNhbiBiZSB1c2VkIHRvIGRlZmluZSBhbiBvd25lciBhbmQgYSBncm91cCBmb3IgdGhlCisgICAgYXJjaGl2ZSB0aGF0IGlzIGJlaW5nIGJ1aWx0LiBJZiBub3QgcHJvdmlkZWQsIHRoZSBjdXJyZW50IG93bmVyIGFuZCBncm91cAorICAgIHdpbGwgYmUgdXNlZC4KKwogICAgIFRoZSBvdXRwdXQgdGFyIGZpbGUgd2lsbCBiZSBuYW1lZCAnYmFzZV9kaXInICsgICIudGFyIiwgcG9zc2libHkgcGx1cwogICAgIHRoZSBhcHByb3ByaWF0ZSBjb21wcmVzc2lvbiBleHRlbnNpb24gKCIuZ3oiLCAiLmJ6MiIgb3IgIi5aIikuCisKICAgICBSZXR1cm5zIHRoZSBvdXRwdXQgZmlsZW5hbWUuCiAgICAgIiIiCiAgICAgdGFyX2NvbXByZXNzaW9uID0geydnemlwJzogJ2d6JywgJ2J6aXAyJzogJ2J6MicsIE5vbmU6ICcnLCAnY29tcHJlc3MnOiAnJ30KQEAgLTQ4LDEwICs4OCwyMyBAQAogICAgIGltcG9ydCB0YXJmaWxlICAjIGxhdGUgaW1wb3J0IHNvIFB5dGhvbiBidWlsZCBpdHNlbGYgZG9lc24ndCBicmVhawogCiAgICAgbG9nLmluZm8oJ0NyZWF0aW5nIHRhciBhcmNoaXZlJykKKworICAgIHVpZCA9IF9nZXRfdWlkKG93bmVyKQorICAgIGdpZCA9IF9nZXRfZ2lkKGdyb3VwKQorCisgICAgZGVmIF9zZXRfdWlkX2dpZCh0YXJpbmZvKToKKyAgICAgICAgaWYgZ2lkIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgdGFyaW5mby5naWQgPSBnaWQKKyAgICAgICAgICAgIHRhcmluZm8uZ25hbWUgPSBncm91cAorICAgICAgICBpZiB1aWQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICB0YXJpbmZvLnVpZCA9IHVpZAorICAgICAgICAgICAgdGFyaW5mby51bmFtZSA9IG93bmVyCisgICAgICAgIHJldHVybiB0YXJpbmZvCisKICAgICBpZiBub3QgZHJ5X3J1bjoKICAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKGFyY2hpdmVfbmFtZSwgJ3d8JXMnICUgdGFyX2NvbXByZXNzaW9uW2NvbXByZXNzXSkKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgdGFyLmFkZChiYXNlX2RpcikKKyAgICAgICAgICAgIHRhci5hZGQoYmFzZV9kaXIsIGZpbHRlcj1fc2V0X3VpZF9naWQpCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICB0YXIuY2xvc2UoKQogCkBAIC0xNDAsNyArMTkzLDcgQEAKICAgICByZXR1cm4gTm9uZQogCiBkZWYgbWFrZV9hcmNoaXZlKGJhc2VfbmFtZSwgZm9ybWF0LCByb290X2Rpcj1Ob25lLCBiYXNlX2Rpcj1Ob25lLCB2ZXJib3NlPTAsCi0gICAgICAgICAgICAgICAgIGRyeV9ydW49MCk6CisgICAgICAgICAgICAgICAgIGRyeV9ydW49MCwgb3duZXI9Tm9uZSwgZ3JvdXA9Tm9uZSk6CiAgICAgIiIiQ3JlYXRlIGFuIGFyY2hpdmUgZmlsZSAoZWcuIHppcCBvciB0YXIpLgogCiAgICAgJ2Jhc2VfbmFtZScgaXMgdGhlIG5hbWUgb2YgdGhlIGZpbGUgdG8gY3JlYXRlLCBtaW51cyBhbnkgZm9ybWF0LXNwZWNpZmljCkBAIC0xNTMsNiArMjA2LDkgQEAKICAgICBpZS4gJ2Jhc2VfZGlyJyB3aWxsIGJlIHRoZSBjb21tb24gcHJlZml4IG9mIGFsbCBmaWxlcyBhbmQKICAgICBkaXJlY3RvcmllcyBpbiB0aGUgYXJjaGl2ZS4gICdyb290X2RpcicgYW5kICdiYXNlX2RpcicgYm90aCBkZWZhdWx0CiAgICAgdG8gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LiAgUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgYXJjaGl2ZSBmaWxlLgorCisgICAgJ293bmVyJyBhbmQgJ2dyb3VwJyBhcmUgdXNlZCB3aGVuIGNyZWF0aW5nIGEgdGFyIGFyY2hpdmUuIEJ5IGRlZmF1bHQsCisgICAgdXNlcyB0aGUgY3VycmVudCBvd25lciBhbmQgZ3JvdXAuCiAgICAgIiIiCiAgICAgc2F2ZV9jd2QgPSBvcy5nZXRjd2QoKQogICAgIGlmIHJvb3RfZGlyIGlzIG5vdCBOb25lOgpAQCAtMTc0LDYgKzIzMCwxMSBAQAogICAgIGZ1bmMgPSBmb3JtYXRfaW5mb1swXQogICAgIGZvciBhcmcsIHZhbCBpbiBmb3JtYXRfaW5mb1sxXToKICAgICAgICAga3dhcmdzW2FyZ10gPSB2YWwKKworICAgIGlmIGZvcm1hdCAhPSAnemlwJzoKKyAgICAgICAga3dhcmdzWydvd25lciddID0gb3duZXIKKyAgICAgICAga3dhcmdzWydncm91cCddID0gZ3JvdXAKKwogICAgIHRyeToKICAgICAgICAgZmlsZW5hbWUgPSBmdW5jKGJhc2VfbmFtZSwgYmFzZV9kaXIsICoqa3dhcmdzKQogICAgIGZpbmFsbHk6CmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2Njb21waWxlci5weSBiL0xpYi9kaXN0dXRpbHMvY2NvbXBpbGVyLnB5CmluZGV4IGM3OTVjOTUuLmU5M2EyNzMgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvY2NvbXBpbGVyLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvY2NvbXBpbGVyLnB5CkBAIC0zNTEsNyArMzUxLDcgQEAKICAgICAgICAgcmV0dXJuIG1hY3Jvcywgb2JqZWN0cywgZXh0cmEsIHBwX29wdHMsIGJ1aWxkCiAKICAgICBkZWYgX2dldF9jY19hcmdzKHNlbGYsIHBwX29wdHMsIGRlYnVnLCBiZWZvcmUpOgotICAgICAgICAjIHdvcmtzIGZvciB1bml4Y2NvbXBpbGVyLCBlbXhjY29tcGlsZXIsIGN5Z3dpbmNjb21waWxlcgorICAgICAgICAjIHdvcmtzIGZvciB1bml4Y2NvbXBpbGVyLCBjeWd3aW5jY29tcGlsZXIKICAgICAgICAgY2NfYXJncyA9IHBwX29wdHMgKyBbJy1jJ10KICAgICAgICAgaWYgZGVidWc6CiAgICAgICAgICAgICBjY19hcmdzWzowXSA9IFsnLWcnXQpAQCAtNzUyLDcgKzc1Miw3IEBACiAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKIAogICAgIGRlZiBsaWJyYXJ5X29wdGlvbihzZWxmLCBsaWIpOgotICAgICAgICAiIiJSZXR1cm4gdGhlIGNvbXBpbGVyIG9wdGlvbiB0byBhZGQgJ2RpcicgdG8gdGhlIGxpc3Qgb2YgbGlicmFyaWVzCisgICAgICAgICIiIlJldHVybiB0aGUgY29tcGlsZXIgb3B0aW9uIHRvIGFkZCAnbGliJyB0byB0aGUgbGlzdCBvZiBsaWJyYXJpZXMKICAgICAgICAgbGlua2VkIGludG8gdGhlIHNoYXJlZCBsaWJyYXJ5IG9yIGV4ZWN1dGFibGUuCiAgICAgICAgICIiIgogICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCkBAIC05MjYsNyArOTI2LDYgQEAKICAgICAjIG9uIGEgY3lnd2luIGJ1aWx0IHB5dGhvbiB3ZSBjYW4gdXNlIGdjYyBsaWtlIGFuIG9yZGluYXJ5IFVOSVhpc2gKICAgICAjIGNvbXBpbGVyCiAgICAgKCdjeWd3aW4uKicsICd1bml4JyksCi0gICAgKCdvczJlbXgnLCAnZW14JyksCiAKICAgICAjIE9TIG5hbWUgbWFwcGluZ3MKICAgICAoJ3Bvc2l4JywgJ3VuaXgnKSwKQEAgLTk2OCw4ICs5NjcsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNaW5ndzMyIHBvcnQgb2YgR05VIEMgQ29tcGlsZXIgZm9yIFdpbjMyIiksCiAgICAgICAgICAgICAgICAgICAgJ2JjcHAnOiAgICAoJ2JjcHBjb21waWxlcicsICdCQ1BQQ29tcGlsZXInLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJCb3JsYW5kIEMrKyBDb21waWxlciIpLAotICAgICAgICAgICAgICAgICAgICdlbXgnOiAgICAgKCdlbXhjY29tcGlsZXInLCAnRU1YQ0NvbXBpbGVyJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRU1YIHBvcnQgb2YgR05VIEMgQ29tcGlsZXIgZm9yIE9TLzIiKSwKICAgICAgICAgICAgICAgICAgfQogCiBkZWYgc2hvd19jb21waWxlcnMoKToKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvY21kLnB5IGIvTGliL2Rpc3R1dGlscy9jbWQucHkKaW5kZXggM2VhMDgxMC4uYzg5ZDVlZiAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy9jbWQucHkKKysrIGIvTGliL2Rpc3R1dGlscy9jbWQucHkKQEAgLTM2NSw5ICszNjUsMTEgQEAKICAgICAgICAgZnJvbSBkaXN0dXRpbHMuc3Bhd24gaW1wb3J0IHNwYXduCiAgICAgICAgIHNwYXduKGNtZCwgc2VhcmNoX3BhdGgsIGRyeV9ydW49c2VsZi5kcnlfcnVuKQogCi0gICAgZGVmIG1ha2VfYXJjaGl2ZShzZWxmLCBiYXNlX25hbWUsIGZvcm1hdCwgcm9vdF9kaXI9Tm9uZSwgYmFzZV9kaXI9Tm9uZSk6CisgICAgZGVmIG1ha2VfYXJjaGl2ZShzZWxmLCBiYXNlX25hbWUsIGZvcm1hdCwgcm9vdF9kaXI9Tm9uZSwgYmFzZV9kaXI9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgIG93bmVyPU5vbmUsIGdyb3VwPU5vbmUpOgogICAgICAgICByZXR1cm4gYXJjaGl2ZV91dGlsLm1ha2VfYXJjaGl2ZShiYXNlX25hbWUsIGZvcm1hdCwgcm9vdF9kaXIsIGJhc2VfZGlyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcnlfcnVuPXNlbGYuZHJ5X3J1bikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJ5X3J1bj1zZWxmLmRyeV9ydW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG93bmVyPW93bmVyLCBncm91cD1ncm91cCkKIAogICAgIGRlZiBtYWtlX2ZpbGUoc2VsZiwgaW5maWxlcywgb3V0ZmlsZSwgZnVuYywgYXJncywKICAgICAgICAgICAgICAgICAgIGV4ZWNfbXNnPU5vbmUsIHNraXBfbXNnPU5vbmUsIGxldmVsPTEpOgpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9jb21tYW5kL2JkaXN0LnB5IGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL2JkaXN0LnB5CmluZGV4IGM1MTg4ZWIuLjY4MTRhMWMgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9iZGlzdC5weQorKysgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYmRpc3QucHkKQEAgLTM3LDYgKzM3LDEyIEBACiAgICAgICAgICAgICAgICAgICAgICAiW2RlZmF1bHQ6IGRpc3RdIiksCiAgICAgICAgICAgICAgICAgICAgICgnc2tpcC1idWlsZCcsIE5vbmUsCiAgICAgICAgICAgICAgICAgICAgICAic2tpcCByZWJ1aWxkaW5nIGV2ZXJ5dGhpbmcgKGZvciB0ZXN0aW5nL2RlYnVnZ2luZykiKSwKKyAgICAgICAgICAgICAgICAgICAgKCdvd25lcj0nLCAndScsCisgICAgICAgICAgICAgICAgICAgICAiT3duZXIgbmFtZSB1c2VkIHdoZW4gY3JlYXRpbmcgYSB0YXIgZmlsZSIKKyAgICAgICAgICAgICAgICAgICAgICIgW2RlZmF1bHQ6IGN1cnJlbnQgdXNlcl0iKSwKKyAgICAgICAgICAgICAgICAgICAgKCdncm91cD0nLCAnZycsCisgICAgICAgICAgICAgICAgICAgICAiR3JvdXAgbmFtZSB1c2VkIHdoZW4gY3JlYXRpbmcgYSB0YXIgZmlsZSIKKyAgICAgICAgICAgICAgICAgICAgICIgW2RlZmF1bHQ6IGN1cnJlbnQgZ3JvdXBdIiksCiAgICAgICAgICAgICAgICAgICAgXQogCiAgICAgYm9vbGVhbl9vcHRpb25zID0gWydza2lwLWJ1aWxkJ10KQEAgLTUyLDggKzU4LDcgQEAKICAgICAjIFRoaXMgd29uJ3QgZG8gaW4gcmVhbGl0eTogd2lsbCBuZWVkIHRvIGRpc3Rpbmd1aXNoIFJQTS1pc2ggTGludXgsCiAgICAgIyBEZWJpYW4taXNoIExpbnV4LCBTb2xhcmlzLCBGcmVlQlNELCAuLi4sIFdpbmRvd3MsIE1hYyBPUy4KICAgICBkZWZhdWx0X2Zvcm1hdCA9IHsncG9zaXgnOiAnZ3p0YXInLAotICAgICAgICAgICAgICAgICAgICAgICdudCc6ICd6aXAnLAotICAgICAgICAgICAgICAgICAgICAgICdvczInOiAnemlwJ30KKyAgICAgICAgICAgICAgICAgICAgICAnbnQnOiAnemlwJ30KIAogICAgICMgRXN0YWJsaXNoIHRoZSBwcmVmZXJyZWQgb3JkZXIgKGZvciB0aGUgLS1oZWxwLWZvcm1hdHMgb3B0aW9uKS4KICAgICBmb3JtYXRfY29tbWFuZHMgPSBbJ3JwbScsICdnenRhcicsICdienRhcicsICd6dGFyJywgJ3RhcicsCkBAIC03OCw2ICs4Myw4IEBACiAgICAgICAgIHNlbGYuZm9ybWF0cyA9IE5vbmUKICAgICAgICAgc2VsZi5kaXN0X2RpciA9IE5vbmUKICAgICAgICAgc2VsZi5za2lwX2J1aWxkID0gMAorICAgICAgICBzZWxmLmdyb3VwID0gTm9uZQorICAgICAgICBzZWxmLm93bmVyID0gTm9uZQogCiAgICAgZGVmIGZpbmFsaXplX29wdGlvbnMoc2VsZik6CiAgICAgICAgICMgaGF2ZSB0byBmaW5hbGl6ZSAncGxhdF9uYW1lJyBiZWZvcmUgJ2JkaXN0X2Jhc2UnCkBAIC0xMjMsNiArMTMwLDExIEBACiAgICAgICAgICAgICBpZiBjbWRfbmFtZSBub3QgaW4gc2VsZi5ub19mb3JtYXRfb3B0aW9uOgogICAgICAgICAgICAgICAgIHN1Yl9jbWQuZm9ybWF0ID0gc2VsZi5mb3JtYXRzW2ldCiAKKyAgICAgICAgICAgICMgcGFzc2luZyB0aGUgb3duZXIgYW5kIGdyb3VwIG5hbWVzIGZvciB0YXIgYXJjaGl2aW5nCisgICAgICAgICAgICBpZiBjbWRfbmFtZSA9PSAnYmRpc3RfZHVtYic6CisgICAgICAgICAgICAgICAgc3ViX2NtZC5vd25lciA9IHNlbGYub3duZXIKKyAgICAgICAgICAgICAgICBzdWJfY21kLmdyb3VwID0gc2VsZi5ncm91cAorCiAgICAgICAgICAgICAjIElmIHdlJ3JlIGdvaW5nIHRvIG5lZWQgdG8gcnVuIHRoaXMgY29tbWFuZCBhZ2FpbiwgdGVsbCBpdCB0bwogICAgICAgICAgICAgIyBrZWVwIGl0cyB0ZW1wb3JhcnkgZmlsZXMgYXJvdW5kIHNvIHN1YnNlcXVlbnQgcnVucyBnbyBmYXN0ZXIuCiAgICAgICAgICAgICBpZiBjbWRfbmFtZSBpbiBjb21tYW5kc1tpKzE6XToKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9iZGlzdF9kdW1iLnB5IGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL2JkaXN0X2R1bWIucHkKaW5kZXggMWFiMDlkMS4uNDQwNWQxMiAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy9jb21tYW5kL2JkaXN0X2R1bWIucHkKKysrIGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL2JkaXN0X2R1bWIucHkKQEAgLTMzLDEzICszMywxOCBAQAogICAgICAgICAgICAgICAgICAgICAoJ3JlbGF0aXZlJywgTm9uZSwKICAgICAgICAgICAgICAgICAgICAgICJidWlsZCB0aGUgYXJjaGl2ZSB1c2luZyByZWxhdGl2ZSBwYXRocyIKICAgICAgICAgICAgICAgICAgICAgICIoZGVmYXVsdDogZmFsc2UpIiksCisgICAgICAgICAgICAgICAgICAgICgnb3duZXI9JywgJ3UnLAorICAgICAgICAgICAgICAgICAgICAgIk93bmVyIG5hbWUgdXNlZCB3aGVuIGNyZWF0aW5nIGEgdGFyIGZpbGUiCisgICAgICAgICAgICAgICAgICAgICAiIFtkZWZhdWx0OiBjdXJyZW50IHVzZXJdIiksCisgICAgICAgICAgICAgICAgICAgICgnZ3JvdXA9JywgJ2cnLAorICAgICAgICAgICAgICAgICAgICAgIkdyb3VwIG5hbWUgdXNlZCB3aGVuIGNyZWF0aW5nIGEgdGFyIGZpbGUiCisgICAgICAgICAgICAgICAgICAgICAiIFtkZWZhdWx0OiBjdXJyZW50IGdyb3VwXSIpLAogICAgICAgICAgICAgICAgICAgIF0KIAogICAgIGJvb2xlYW5fb3B0aW9ucyA9IFsna2VlcC10ZW1wJywgJ3NraXAtYnVpbGQnLCAncmVsYXRpdmUnXQogCiAgICAgZGVmYXVsdF9mb3JtYXQgPSB7ICdwb3NpeCc6ICdnenRhcicsCi0gICAgICAgICAgICAgICAgICAgICAgICdudCc6ICd6aXAnLAotICAgICAgICAgICAgICAgICAgICAgICAnb3MyJzogJ3ppcCcgfQorICAgICAgICAgICAgICAgICAgICAgICAnbnQnOiAnemlwJyB9CiAKICAgICBkZWYgaW5pdGlhbGl6ZV9vcHRpb25zKHNlbGYpOgogICAgICAgICBzZWxmLmJkaXN0X2RpciA9IE5vbmUKQEAgLTQ5LDYgKzU0LDggQEAKICAgICAgICAgc2VsZi5kaXN0X2RpciA9IE5vbmUKICAgICAgICAgc2VsZi5za2lwX2J1aWxkID0gTm9uZQogICAgICAgICBzZWxmLnJlbGF0aXZlID0gMAorICAgICAgICBzZWxmLm93bmVyID0gTm9uZQorICAgICAgICBzZWxmLmdyb3VwID0gTm9uZQogCiAgICAgZGVmIGZpbmFsaXplX29wdGlvbnMoc2VsZik6CiAgICAgICAgIGlmIHNlbGYuYmRpc3RfZGlyIGlzIE5vbmU6CkBAIC04NSwxMSArOTIsNiBAQAogICAgICAgICBhcmNoaXZlX2Jhc2VuYW1lID0gIiVzLiVzIiAlIChzZWxmLmRpc3RyaWJ1dGlvbi5nZXRfZnVsbG5hbWUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wbGF0X25hbWUpCiAKLSAgICAgICAgIyBPUy8yIG9iamVjdHMgdG8gYW55ICI6IiBjaGFyYWN0ZXJzIGluIGEgZmlsZW5hbWUgKHN1Y2ggYXMgd2hlbgotICAgICAgICAjIGEgdGltZXN0YW1wIGlzIHVzZWQgaW4gYSB2ZXJzaW9uKSBzbyBjaGFuZ2UgdGhlbSB0byBoeXBoZW5zLgotICAgICAgICBpZiBvcy5uYW1lID09ICJvczIiOgotICAgICAgICAgICAgYXJjaGl2ZV9iYXNlbmFtZSA9IGFyY2hpdmVfYmFzZW5hbWUucmVwbGFjZSgiOiIsICItIikKLQogICAgICAgICBwc2V1ZG9pbnN0YWxsX3Jvb3QgPSBvcy5wYXRoLmpvaW4oc2VsZi5kaXN0X2RpciwgYXJjaGl2ZV9iYXNlbmFtZSkKICAgICAgICAgaWYgbm90IHNlbGYucmVsYXRpdmU6CiAgICAgICAgICAgICBhcmNoaXZlX3Jvb3QgPSBzZWxmLmJkaXN0X2RpcgpAQCAtMTA3LDcgKzEwOSw4IEBACiAKICAgICAgICAgIyBNYWtlIHRoZSBhcmNoaXZlCiAgICAgICAgIGZpbGVuYW1lID0gc2VsZi5tYWtlX2FyY2hpdmUocHNldWRvaW5zdGFsbF9yb290LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZm9ybWF0LCByb290X2Rpcj1hcmNoaXZlX3Jvb3QpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5mb3JtYXQsIHJvb3RfZGlyPWFyY2hpdmVfcm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvd25lcj1zZWxmLm93bmVyLCBncm91cD1zZWxmLmdyb3VwKQogICAgICAgICBpZiBzZWxmLmRpc3RyaWJ1dGlvbi5oYXNfZXh0X21vZHVsZXMoKToKICAgICAgICAgICAgIHB5dmVyc2lvbiA9IGdldF9weXRob25fdmVyc2lvbigpCiAgICAgICAgIGVsc2U6CmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYnVpbGRfZXh0LnB5IGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL2J1aWxkX2V4dC5weQppbmRleCBiYzZhMjNmLi5hY2JlNjQ4IDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYnVpbGRfZXh0LnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9idWlsZF9leHQucHkKQEAgLTE0LDEzICsxNCw3IEBACiBmcm9tIGRpc3R1dGlscy51dGlsIGltcG9ydCBnZXRfcGxhdGZvcm0KIGZyb20gZGlzdHV0aWxzIGltcG9ydCBsb2cKIAotIyB0aGlzIGtlZXBzIGNvbXBhdGliaWxpdHkgZnJvbSAyLjMgdG8gMi41Ci1pZiBzeXMudmVyc2lvbiA8ICIyLjYiOgotICAgIFVTRVJfQkFTRSA9IE5vbmUKLSAgICBIQVNfVVNFUl9TSVRFID0gRmFsc2UKLWVsc2U6Ci0gICAgZnJvbSBzaXRlIGltcG9ydCBVU0VSX0JBU0UKLSAgICBIQVNfVVNFUl9TSVRFID0gVHJ1ZQorZnJvbSBzaXRlIGltcG9ydCBVU0VSX0JBU0UKIAogaWYgb3MubmFtZSA9PSAnbnQnOgogICAgIGZyb20gZGlzdHV0aWxzLm1zdmNjb21waWxlciBpbXBvcnQgZ2V0X2J1aWxkX3ZlcnNpb24KQEAgLTk3LDE0ICs5MSwxMSBAQAogICAgICAgICAgImxpc3Qgb2YgU1dJRyBjb21tYW5kIGxpbmUgb3B0aW9ucyIpLAogICAgICAgICAoJ3N3aWc9JywgTm9uZSwKICAgICAgICAgICJwYXRoIHRvIHRoZSBTV0lHIGV4ZWN1dGFibGUiKSwKKyAgICAgICAgKCd1c2VyJywgTm9uZSwKKyAgICAgICAgICJhZGQgdXNlciBpbmNsdWRlLCBsaWJyYXJ5IGFuZCBycGF0aCIpCiAgICAgICAgIF0KIAotICAgIGJvb2xlYW5fb3B0aW9ucyA9IFsnaW5wbGFjZScsICdkZWJ1ZycsICdmb3JjZScsICdzd2lnLWNwcCddCi0KLSAgICBpZiBIQVNfVVNFUl9TSVRFOgotICAgICAgICB1c2VyX29wdGlvbnMuYXBwZW5kKCgndXNlcicsIE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhZGQgdXNlciBpbmNsdWRlLCBsaWJyYXJ5IGFuZCBycGF0aCIpKQotICAgICAgICBib29sZWFuX29wdGlvbnMuYXBwZW5kKCd1c2VyJykKKyAgICBib29sZWFuX29wdGlvbnMgPSBbJ2lucGxhY2UnLCAnZGVidWcnLCAnZm9yY2UnLCAnc3dpZy1jcHAnLCAndXNlciddCiAKICAgICBoZWxwX29wdGlvbnMgPSBbCiAgICAgICAgICgnaGVscC1jb21waWxlcicsIE5vbmUsCkBAIC0yMzAsMTEgKzIyMSw2IEBACiAgICAgICAgICAgICAgICAgc2VsZi5saWJyYXJ5X2RpcnMuYXBwZW5kKG9zLnBhdGguam9pbihzeXMuZXhlY19wcmVmaXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdQQycsICdWQzYnKSkKIAotICAgICAgICAjIE9TLzIgKEVNWCkgZG9lc24ndCBzdXBwb3J0IERlYnVnIHZzIFJlbGVhc2UgYnVpbGRzLCBidXQgaGFzIHRoZQotICAgICAgICAjIGltcG9ydCBsaWJyYXJpZXMgaW4gaXRzICJDb25maWciIHN1YmRpcmVjdG9yeQotICAgICAgICBpZiBvcy5uYW1lID09ICdvczInOgotICAgICAgICAgICAgc2VsZi5saWJyYXJ5X2RpcnMuYXBwZW5kKG9zLnBhdGguam9pbihzeXMuZXhlY19wcmVmaXgsICdDb25maWcnKSkKLQogICAgICAgICAjIGZvciBleHRlbnNpb25zIHVuZGVyIEN5Z3dpbiBhbmQgQXRoZU9TIFB5dGhvbidzIGxpYnJhcnkgZGlyZWN0b3J5IG11c3QgYmUKICAgICAgICAgIyBhcHBlbmRlZCB0byBsaWJyYXJ5X2RpcnMKICAgICAgICAgaWYgc3lzLnBsYXRmb3JtWzo2XSA9PSAnY3lnd2luJyBvciBzeXMucGxhdGZvcm1bOjZdID09ICdhdGhlb3MnOgpAQCAtMjUxLDcgKzIzNyw3IEBACiAgICAgICAgICMgUHl0aG9uJ3MgbGlicmFyeSBkaXJlY3RvcnkgbXVzdCBiZSBhcHBlbmRlZCB0byBsaWJyYXJ5X2RpcnMKICAgICAgICAgIyBTZWUgSXNzdWVzOiAjMTYwMDg2MCwgIzQzNjYKICAgICAgICAgaWYgKHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignUHlfRU5BQkxFX1NIQVJFRCcpKToKLSAgICAgICAgICAgIGlmIHN5cy5leGVjdXRhYmxlLnN0YXJ0c3dpdGgob3MucGF0aC5qb2luKHN5cy5leGVjX3ByZWZpeCwgImJpbiIpKToKKyAgICAgICAgICAgIGlmIG5vdCBzeXNjb25maWcucHl0aG9uX2J1aWxkOgogICAgICAgICAgICAgICAgICMgYnVpbGRpbmcgdGhpcmQgcGFydHkgZXh0ZW5zaW9ucwogICAgICAgICAgICAgICAgIHNlbGYubGlicmFyeV9kaXJzLmFwcGVuZChzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ0xJQkRJUicpKQogICAgICAgICAgICAgZWxzZToKQEAgLTYxOSw5ICs2MDUsNiBAQAogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm4KICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcmV0dXJuICJzd2lnLmV4ZSIKLSAgICAgICAgZWxpZiBvcy5uYW1lID09ICJvczIiOgotICAgICAgICAgICAgIyBhc3N1bWUgc3dpZyBhdmFpbGFibGUgaW4gdGhlIFBBVEguCi0gICAgICAgICAgICByZXR1cm4gInN3aWcuZXhlIgogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmFpc2UgRGlzdHV0aWxzUGxhdGZvcm1FcnJvcigKICAgICAgICAgICAgICAgICAgICJJIGRvbid0IGtub3cgaG93IHRvIGZpbmQgKG11Y2ggbGVzcyBydW4pIFNXSUcgIgpAQCAtNjcyLDkgKzY1NSw2IEBACiAgICAgICAgICIiIgogICAgICAgICBmcm9tIGRpc3R1dGlscy5zeXNjb25maWcgaW1wb3J0IGdldF9jb25maWdfdmFyCiAgICAgICAgIGV4dF9wYXRoID0gZXh0X25hbWUuc3BsaXQoJy4nKQotICAgICAgICAjIE9TLzIgaGFzIGFuIDggY2hhcmFjdGVyIG1vZHVsZSAoZXh0ZW5zaW9uKSBsaW1pdCA6LSgKLSAgICAgICAgaWYgb3MubmFtZSA9PSAib3MyIjoKLSAgICAgICAgICAgIGV4dF9wYXRoW2xlbihleHRfcGF0aCkgLSAxXSA9IGV4dF9wYXRoW2xlbihleHRfcGF0aCkgLSAxXVs6OF0KICAgICAgICAgIyBleHRlbnNpb25zIGluIGRlYnVnX21vZGUgYXJlIG5hbWVkICdtb2R1bGVfZC5weWQnIHVuZGVyIHdpbmRvd3MKICAgICAgICAgZXh0X3N1ZmZpeCA9IGdldF9jb25maWdfdmFyKCdFWFRfU1VGRklYJykKICAgICAgICAgaWYgb3MubmFtZSA9PSAnbnQnIGFuZCBzZWxmLmRlYnVnOgpAQCAtNjk1LDcgKzY3NSw3IEBACiAgICAgZGVmIGdldF9saWJyYXJpZXMoc2VsZiwgZXh0KToKICAgICAgICAgIiIiUmV0dXJuIHRoZSBsaXN0IG9mIGxpYnJhcmllcyB0byBsaW5rIGFnYWluc3Qgd2hlbiBidWlsZGluZyBhCiAgICAgICAgIHNoYXJlZCBleHRlbnNpb24uICBPbiBtb3N0IHBsYXRmb3JtcywgdGhpcyBpcyBqdXN0ICdleHQubGlicmFyaWVzJzsKLSAgICAgICAgb24gV2luZG93cyBhbmQgT1MvMiwgd2UgYWRkIHRoZSBQeXRob24gbGlicmFyeSAoZWcuIHB5dGhvbjIwLmRsbCkuCisgICAgICAgIG9uIFdpbmRvd3MsIHdlIGFkZCB0aGUgUHl0aG9uIGxpYnJhcnkgKGVnLiBweXRob24yMC5kbGwpLgogICAgICAgICAiIiIKICAgICAgICAgIyBUaGUgcHl0aG9uIGxpYnJhcnkgaXMgYWx3YXlzIG5lZWRlZCBvbiBXaW5kb3dzLiAgRm9yIE1TVkMsIHRoaXMKICAgICAgICAgIyBpcyByZWR1bmRhbnQsIHNpbmNlIHRoZSBsaWJyYXJ5IGlzIG1lbnRpb25lZCBpbiBhIHByYWdtYSBpbgpAQCAtNzE1LDE5ICs2OTUsNiBAQAogICAgICAgICAgICAgICAgIHJldHVybiBleHQubGlicmFyaWVzICsgW3B5dGhvbmxpYl0KICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGV4dC5saWJyYXJpZXMKLSAgICAgICAgZWxpZiBzeXMucGxhdGZvcm0gPT0gIm9zMmVteCI6Ci0gICAgICAgICAgICAjIEVNWC9HQ0MgcmVxdWlyZXMgdGhlIHB5dGhvbiBsaWJyYXJ5IGV4cGxpY2l0bHksIGFuZCBJCi0gICAgICAgICAgICAjIGJlbGlldmUgVkFDUFAgZG9lcyBhcyB3ZWxsICh0aG91Z2ggbm90IGNvbmZpcm1lZCkgLSBBSU0gQXByMDEKLSAgICAgICAgICAgIHRlbXBsYXRlID0gInB5dGhvbiVkJWQiCi0gICAgICAgICAgICAjIGRlYnVnIHZlcnNpb25zIG9mIHRoZSBtYWluIERMTCBhcmVuJ3Qgc3VwcG9ydGVkLCBhdCBsZWFzdAotICAgICAgICAgICAgIyBub3QgYXQgdGhpcyB0aW1lIC0gQUlNIEFwcjAxCi0gICAgICAgICAgICAjaWYgc2VsZi5kZWJ1ZzoKLSAgICAgICAgICAgICMgICAgdGVtcGxhdGUgPSB0ZW1wbGF0ZSArICdfZCcKLSAgICAgICAgICAgIHB5dGhvbmxpYiA9ICh0ZW1wbGF0ZSAlCi0gICAgICAgICAgICAgICAgICAgKHN5cy5oZXh2ZXJzaW9uID4+IDI0LCAoc3lzLmhleHZlcnNpb24gPj4gMTYpICYgMHhmZikpCi0gICAgICAgICAgICAjIGRvbid0IGV4dGVuZCBleHQubGlicmFyaWVzLCBpdCBtYXkgYmUgc2hhcmVkIHdpdGggb3RoZXIKLSAgICAgICAgICAgICMgZXh0ZW5zaW9ucywgaXQgaXMgYSByZWZlcmVuY2UgdG8gdGhlIG9yaWdpbmFsIGxpc3QKLSAgICAgICAgICAgIHJldHVybiBleHQubGlicmFyaWVzICsgW3B5dGhvbmxpYl0KICAgICAgICAgZWxpZiBzeXMucGxhdGZvcm1bOjZdID09ICJjeWd3aW4iOgogICAgICAgICAgICAgdGVtcGxhdGUgPSAicHl0aG9uJWQuJWQiCiAgICAgICAgICAgICBweXRob25saWIgPSAodGVtcGxhdGUgJQpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9jb21tYW5kL2J1aWxkX3B5LnB5IGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL2J1aWxkX3B5LnB5CmluZGV4IGQ0OGViNjkuLjkxMDBiOTYgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9idWlsZF9weS5weQorKysgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYnVpbGRfcHkucHkKQEAgLTMsNyArMyw3IEBACiBJbXBsZW1lbnRzIHRoZSBEaXN0dXRpbHMgJ2J1aWxkX3B5JyBjb21tYW5kLiIiIgogCiBpbXBvcnQgb3MKLWltcG9ydCBpbXAKK2ltcG9ydCBpbXBvcnRsaWIudXRpbAogaW1wb3J0IHN5cwogZnJvbSBnbG9iIGltcG9ydCBnbG9iCiAKQEAgLTMxMywxMSArMzEzLDExIEBACiAgICAgICAgICAgICBvdXRwdXRzLmFwcGVuZChmaWxlbmFtZSkKICAgICAgICAgICAgIGlmIGluY2x1ZGVfYnl0ZWNvZGU6CiAgICAgICAgICAgICAgICAgaWYgc2VsZi5jb21waWxlOgotICAgICAgICAgICAgICAgICAgICBvdXRwdXRzLmFwcGVuZChpbXAuY2FjaGVfZnJvbV9zb3VyY2UoZmlsZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z19vdmVycmlkZT1UcnVlKSkKKyAgICAgICAgICAgICAgICAgICAgb3V0cHV0cy5hcHBlbmQoaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoCisgICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSwgZGVidWdfb3ZlcnJpZGU9VHJ1ZSkpCiAgICAgICAgICAgICAgICAgaWYgc2VsZi5vcHRpbWl6ZSA+IDA6Ci0gICAgICAgICAgICAgICAgICAgIG91dHB1dHMuYXBwZW5kKGltcC5jYWNoZV9mcm9tX3NvdXJjZShmaWxlbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnX292ZXJyaWRlPUZhbHNlKSkKKyAgICAgICAgICAgICAgICAgICAgb3V0cHV0cy5hcHBlbmQoaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoCisgICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSwgZGVidWdfb3ZlcnJpZGU9RmFsc2UpKQogCiAgICAgICAgIG91dHB1dHMgKz0gWwogICAgICAgICAgICAgb3MucGF0aC5qb2luKGJ1aWxkX2RpciwgZmlsZW5hbWUpCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYnVpbGRfc2NyaXB0cy5weSBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9idWlsZF9zY3JpcHRzLnB5CmluZGV4IDRiNWIyMmUuLjkwYTgzODAgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9idWlsZF9zY3JpcHRzLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9idWlsZF9zY3JpcHRzLnB5CkBAIC03NCw3ICs3NCw3IEBACiAgICAgICAgICAgICAjIHNjcmlwdC4KICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBmID0gb3BlbihzY3JpcHQsICJyYiIpCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLmRyeV9ydW46CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgICAgICAgICAgZiA9IE5vbmUKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9jaGVjay5weSBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9jaGVjay5weQppbmRleCAyMmI5MzQ5Li43ZWJlNzA3IDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvY2hlY2sucHkKKysrIGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL2NoZWNrLnB5CkBAIC0xMjIsNyArMTIyLDcgQEAKICAgICAgICAgIiIiUmV0dXJucyB3YXJuaW5ncyB3aGVuIHRoZSBwcm92aWRlZCBkYXRhIGRvZXNuJ3QgY29tcGlsZS4iIiIKICAgICAgICAgc291cmNlX3BhdGggPSBTdHJpbmdJTygpCiAgICAgICAgIHBhcnNlciA9IFBhcnNlcigpCi0gICAgICAgIHNldHRpbmdzID0gZnJvbnRlbmQuT3B0aW9uUGFyc2VyKCkuZ2V0X2RlZmF1bHRfdmFsdWVzKCkKKyAgICAgICAgc2V0dGluZ3MgPSBmcm9udGVuZC5PcHRpb25QYXJzZXIoY29tcG9uZW50cz0oUGFyc2VyLCkpLmdldF9kZWZhdWx0X3ZhbHVlcygpCiAgICAgICAgIHNldHRpbmdzLnRhYl93aWR0aCA9IDQKICAgICAgICAgc2V0dGluZ3MucGVwX3JlZmVyZW5jZXMgPSBOb25lCiAgICAgICAgIHNldHRpbmdzLnJmY19yZWZlcmVuY2VzID0gTm9uZQpAQCAtMTM4LDggKzEzOCw4IEBACiAgICAgICAgIGRvY3VtZW50Lm5vdGVfc291cmNlKHNvdXJjZV9wYXRoLCAtMSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcGFyc2VyLnBhcnNlKGRhdGEsIGRvY3VtZW50KQotICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICByZXBvcnRlci5tZXNzYWdlcy5hcHBlbmQoKC0xLCAnQ291bGQgbm90IGZpbmlzaCB0aGUgcGFyc2luZy4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJywge30pKQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3IgYXMgZToKKyAgICAgICAgICAgIHJlcG9ydGVyLm1lc3NhZ2VzLmFwcGVuZCgKKyAgICAgICAgICAgICAgICAoLTEsICdDb3VsZCBub3QgZmluaXNoIHRoZSBwYXJzaW5nOiAlcy4nICUgZSwgJycsIHt9KSkKIAogICAgICAgICByZXR1cm4gcmVwb3J0ZXIubWVzc2FnZXMKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9pbnN0YWxsLnB5IGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL2luc3RhbGwucHkKaW5kZXggM2M2NzVkMS4uZDc2OGRjNSAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy9jb21tYW5kL2luc3RhbGwucHkKKysrIGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL2luc3RhbGwucHkKQEAgLTE1LDMyICsxNSwxNyBAQAogZnJvbSBkaXN0dXRpbHMudXRpbCBpbXBvcnQgZ2V0X3BsYXRmb3JtCiBmcm9tIGRpc3R1dGlscy5lcnJvcnMgaW1wb3J0IERpc3R1dGlsc09wdGlvbkVycm9yCiAKLSMgdGhpcyBrZWVwcyBjb21wYXRpYmlsaXR5IGZyb20gMi4zIHRvIDIuNQotaWYgc3lzLnZlcnNpb24gPCAiMi42IjoKLSAgICBVU0VSX0JBU0UgPSBOb25lCi0gICAgVVNFUl9TSVRFID0gTm9uZQotICAgIEhBU19VU0VSX1NJVEUgPSBGYWxzZQotZWxzZToKLSAgICBmcm9tIHNpdGUgaW1wb3J0IFVTRVJfQkFTRQotICAgIGZyb20gc2l0ZSBpbXBvcnQgVVNFUl9TSVRFCi0gICAgSEFTX1VTRVJfU0lURSA9IFRydWUKK2Zyb20gc2l0ZSBpbXBvcnQgVVNFUl9CQVNFCitmcm9tIHNpdGUgaW1wb3J0IFVTRVJfU0lURQorSEFTX1VTRVJfU0lURSA9IFRydWUKIAotaWYgc3lzLnZlcnNpb24gPCAiMi4yIjoKLSAgICBXSU5ET1dTX1NDSEVNRSA9IHsKLSAgICAgICAgJ3B1cmVsaWInOiAnJGJhc2UnLAotICAgICAgICAncGxhdGxpYic6ICckYmFzZScsCi0gICAgICAgICdoZWFkZXJzJzogJyRiYXNlL0luY2x1ZGUvJGRpc3RfbmFtZScsCi0gICAgICAgICdzY3JpcHRzJzogJyRiYXNlL1NjcmlwdHMnLAotICAgICAgICAnZGF0YScgICA6ICckYmFzZScsCi0gICAgfQotZWxzZToKLSAgICBXSU5ET1dTX1NDSEVNRSA9IHsKLSAgICAgICAgJ3B1cmVsaWInOiAnJGJhc2UvTGliL3NpdGUtcGFja2FnZXMnLAotICAgICAgICAncGxhdGxpYic6ICckYmFzZS9MaWIvc2l0ZS1wYWNrYWdlcycsCi0gICAgICAgICdoZWFkZXJzJzogJyRiYXNlL0luY2x1ZGUvJGRpc3RfbmFtZScsCi0gICAgICAgICdzY3JpcHRzJzogJyRiYXNlL1NjcmlwdHMnLAotICAgICAgICAnZGF0YScgICA6ICckYmFzZScsCi0gICAgfQorV0lORE9XU19TQ0hFTUUgPSB7CisgICAgJ3B1cmVsaWInOiAnJGJhc2UvTGliL3NpdGUtcGFja2FnZXMnLAorICAgICdwbGF0bGliJzogJyRiYXNlL0xpYi9zaXRlLXBhY2thZ2VzJywKKyAgICAnaGVhZGVycyc6ICckYmFzZS9JbmNsdWRlLyRkaXN0X25hbWUnLAorICAgICdzY3JpcHRzJzogJyRiYXNlL1NjcmlwdHMnLAorICAgICdkYXRhJyAgIDogJyRiYXNlJywKK30KIAogSU5TVEFMTF9TQ0hFTUVTID0gewogICAgICd1bml4X3ByZWZpeCc6IHsKQEAgLTU4LDEzICs0Myw2IEBACiAgICAgICAgICdkYXRhJyAgIDogJyRiYXNlJywKICAgICAgICAgfSwKICAgICAnbnQnOiBXSU5ET1dTX1NDSEVNRSwKLSAgICAnb3MyJzogewotICAgICAgICAncHVyZWxpYic6ICckYmFzZS9MaWIvc2l0ZS1wYWNrYWdlcycsCi0gICAgICAgICdwbGF0bGliJzogJyRiYXNlL0xpYi9zaXRlLXBhY2thZ2VzJywKLSAgICAgICAgJ2hlYWRlcnMnOiAnJGJhc2UvSW5jbHVkZS8kZGlzdF9uYW1lJywKLSAgICAgICAgJ3NjcmlwdHMnOiAnJGJhc2UvU2NyaXB0cycsCi0gICAgICAgICdkYXRhJyAgIDogJyRiYXNlJywKLSAgICAgICAgfSwKICAgICB9CiAKICMgdXNlciBzaXRlIHNjaGVtZXMKQEAgLTg2LDE0ICs2NCw2IEBACiAgICAgICAgICdkYXRhJyAgIDogJyR1c2VyYmFzZScsCiAgICAgICAgIH0KIAotICAgIElOU1RBTExfU0NIRU1FU1snb3MyX2hvbWUnXSA9IHsKLSAgICAgICAgJ3B1cmVsaWInOiAnJHVzZXJzaXRlJywKLSAgICAgICAgJ3BsYXRsaWInOiAnJHVzZXJzaXRlJywKLSAgICAgICAgJ2hlYWRlcnMnOiAnJHVzZXJiYXNlL2luY2x1ZGUvcHl0aG9uJHB5X3ZlcnNpb25fc2hvcnQvJGRpc3RfbmFtZScsCi0gICAgICAgICdzY3JpcHRzJzogJyR1c2VyYmFzZS9iaW4nLAotICAgICAgICAnZGF0YScgICA6ICckdXNlcmJhc2UnLAotICAgICAgICB9Ci0KICMgVGhlIGtleXMgdG8gYW4gaW5zdGFsbGF0aW9uIHNjaGVtZTsgaWYgYW55IG5ldyB0eXBlcyBvZiBmaWxlcyBhcmUgdG8gYmUKICMgaW5zdGFsbGVkLCBiZSBzdXJlIHRvIGFkZCBhbiBlbnRyeSB0byBldmVyeSBpbnN0YWxsYXRpb24gc2NoZW1lIGFib3ZlLAogIyBhbmQgdG8gU0NIRU1FX0tFWVMgaGVyZS4KZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9pbnN0YWxsX2xpYi5weSBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9pbnN0YWxsX2xpYi5weQppbmRleCAxNWMwOGYxLi4yMTU4MTNiIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvaW5zdGFsbF9saWIucHkKKysrIGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL2luc3RhbGxfbGliLnB5CkBAIC00LDcgKzQsNyBAQAogKGluc3RhbGwgYWxsIFB5dGhvbiBtb2R1bGVzKS4iIiIKIAogaW1wb3J0IG9zCi1pbXBvcnQgaW1wCitpbXBvcnQgaW1wb3J0bGliLnV0aWwKIGltcG9ydCBzeXMKIAogZnJvbSBkaXN0dXRpbHMuY29yZSBpbXBvcnQgQ29tbWFuZApAQCAtMTY1LDEwICsxNjUsMTAgQEAKICAgICAgICAgICAgIGlmIGV4dCAhPSBQWVRIT05fU09VUkNFX0VYVEVOU0lPTjoKICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgaWYgc2VsZi5jb21waWxlOgotICAgICAgICAgICAgICAgIGJ5dGVjb2RlX2ZpbGVzLmFwcGVuZChpbXAuY2FjaGVfZnJvbV9zb3VyY2UoCisgICAgICAgICAgICAgICAgYnl0ZWNvZGVfZmlsZXMuYXBwZW5kKGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKAogICAgICAgICAgICAgICAgICAgICBweV9maWxlLCBkZWJ1Z19vdmVycmlkZT1UcnVlKSkKICAgICAgICAgICAgIGlmIHNlbGYub3B0aW1pemUgPiAwOgotICAgICAgICAgICAgICAgIGJ5dGVjb2RlX2ZpbGVzLmFwcGVuZChpbXAuY2FjaGVfZnJvbV9zb3VyY2UoCisgICAgICAgICAgICAgICAgYnl0ZWNvZGVfZmlsZXMuYXBwZW5kKGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKAogICAgICAgICAgICAgICAgICAgICBweV9maWxlLCBkZWJ1Z19vdmVycmlkZT1GYWxzZSkpCiAKICAgICAgICAgcmV0dXJuIGJ5dGVjb2RlX2ZpbGVzCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvc2Rpc3QucHkgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvc2Rpc3QucHkKaW5kZXggMTE2ZjY3ZS4uN2VhM2Q1ZiAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy9jb21tYW5kL3NkaXN0LnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9zZGlzdC5weQpAQCAtNzQsNiArNzQsMTAgQEAKICAgICAgICAgKCdtZXRhZGF0YS1jaGVjaycsIE5vbmUsCiAgICAgICAgICAiRW5zdXJlIHRoYXQgYWxsIHJlcXVpcmVkIGVsZW1lbnRzIG9mIG1ldGEtZGF0YSAiCiAgICAgICAgICAiYXJlIHN1cHBsaWVkLiBXYXJuIGlmIGFueSBtaXNzaW5nLiBbZGVmYXVsdF0iKSwKKyAgICAgICAgKCdvd25lcj0nLCAndScsCisgICAgICAgICAiT3duZXIgbmFtZSB1c2VkIHdoZW4gY3JlYXRpbmcgYSB0YXIgZmlsZSBbZGVmYXVsdDogY3VycmVudCB1c2VyXSIpLAorICAgICAgICAoJ2dyb3VwPScsICdnJywKKyAgICAgICAgICJHcm91cCBuYW1lIHVzZWQgd2hlbiBjcmVhdGluZyBhIHRhciBmaWxlIFtkZWZhdWx0OiBjdXJyZW50IGdyb3VwXSIpLAogICAgICAgICBdCiAKICAgICBib29sZWFuX29wdGlvbnMgPSBbJ3VzZS1kZWZhdWx0cycsICdwcnVuZScsCkBAIC0xMTMsNiArMTE3LDggQEAKIAogICAgICAgICBzZWxmLmFyY2hpdmVfZmlsZXMgPSBOb25lCiAgICAgICAgIHNlbGYubWV0YWRhdGFfY2hlY2sgPSAxCisgICAgICAgIHNlbGYub3duZXIgPSBOb25lCisgICAgICAgIHNlbGYuZ3JvdXAgPSBOb25lCiAKICAgICBkZWYgZmluYWxpemVfb3B0aW9ucyhzZWxmKToKICAgICAgICAgaWYgc2VsZi5tYW5pZmVzdCBpcyBOb25lOgpAQCAtNDQ0LDcgKzQ1MCw4IEBACiAgICAgICAgICAgICBzZWxmLmZvcm1hdHMuYXBwZW5kKHNlbGYuZm9ybWF0cy5wb3Aoc2VsZi5mb3JtYXRzLmluZGV4KCd0YXInKSkpCiAKICAgICAgICAgZm9yIGZtdCBpbiBzZWxmLmZvcm1hdHM6Ci0gICAgICAgICAgICBmaWxlID0gc2VsZi5tYWtlX2FyY2hpdmUoYmFzZV9uYW1lLCBmbXQsIGJhc2VfZGlyPWJhc2VfZGlyKQorICAgICAgICAgICAgZmlsZSA9IHNlbGYubWFrZV9hcmNoaXZlKGJhc2VfbmFtZSwgZm10LCBiYXNlX2Rpcj1iYXNlX2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvd25lcj1zZWxmLm93bmVyLCBncm91cD1zZWxmLmdyb3VwKQogICAgICAgICAgICAgYXJjaGl2ZV9maWxlcy5hcHBlbmQoZmlsZSkKICAgICAgICAgICAgIHNlbGYuZGlzdHJpYnV0aW9uLmRpc3RfZmlsZXMuYXBwZW5kKCgnc2Rpc3QnLCAnJywgZmlsZSkpCiAKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC91cGxvYWQucHkgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvdXBsb2FkLnB5CmluZGV4IGUzMGMxODkuLjFhOTZlMjIgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC91cGxvYWQucHkKKysrIGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL3VwbG9hZC5weQpAQCAtMiwxMCArMiw2IEBACiAKIEltcGxlbWVudHMgdGhlIERpc3R1dGlscyAndXBsb2FkJyBzdWJjb21tYW5kICh1cGxvYWQgcGFja2FnZSB0byBQeVBJKS4iIiIKIAotZnJvbSBkaXN0dXRpbHMuZXJyb3JzIGltcG9ydCAqCi1mcm9tIGRpc3R1dGlscy5jb3JlIGltcG9ydCBQeVBJUkNDb21tYW5kCi1mcm9tIGRpc3R1dGlscy5zcGF3biBpbXBvcnQgc3Bhd24KLWZyb20gZGlzdHV0aWxzIGltcG9ydCBsb2cKIGltcG9ydCBzeXMKIGltcG9ydCBvcywgaW8KIGltcG9ydCBzb2NrZXQKQEAgLTEzLDYgKzksMTAgQEAKIGZyb20gYmFzZTY0IGltcG9ydCBzdGFuZGFyZF9iNjRlbmNvZGUKIGZyb20gdXJsbGliLnJlcXVlc3QgaW1wb3J0IHVybG9wZW4sIFJlcXVlc3QsIEhUVFBFcnJvcgogZnJvbSB1cmxsaWIucGFyc2UgaW1wb3J0IHVybHBhcnNlCitmcm9tIGRpc3R1dGlscy5lcnJvcnMgaW1wb3J0IERpc3R1dGlsc0Vycm9yLCBEaXN0dXRpbHNPcHRpb25FcnJvcgorZnJvbSBkaXN0dXRpbHMuY29yZSBpbXBvcnQgUHlQSVJDQ29tbWFuZAorZnJvbSBkaXN0dXRpbHMuc3Bhd24gaW1wb3J0IHNwYXduCitmcm9tIGRpc3R1dGlscyBpbXBvcnQgbG9nCiAKICMgdGhpcyBrZWVwcyBjb21wYXRpYmlsaXR5IGZvciAyLjMgYW5kIDIuNAogaWYgc3lzLnZlcnNpb24gPCAiMi41IjoKQEAgLTE0MywxMSArMTQzLDExIEBACiAKICAgICAgICAgIyBCdWlsZCB1cCB0aGUgTUlNRSBwYXlsb2FkIGZvciB0aGUgUE9TVCBkYXRhCiAgICAgICAgIGJvdW5kYXJ5ID0gJy0tLS0tLS0tLS0tLS0tR0hTS0ZKRExHRFM3NTQzRkpLTEZIUkU3NTY0Mjc1Njc0MzI1NCcKLSAgICAgICAgc2VwX2JvdW5kYXJ5ID0gYidcbi0tJyArIGJvdW5kYXJ5LmVuY29kZSgnYXNjaWknKQotICAgICAgICBlbmRfYm91bmRhcnkgPSBzZXBfYm91bmRhcnkgKyBiJy0tJworICAgICAgICBzZXBfYm91bmRhcnkgPSBiJ1xyXG4tLScgKyBib3VuZGFyeS5lbmNvZGUoJ2FzY2lpJykKKyAgICAgICAgZW5kX2JvdW5kYXJ5ID0gc2VwX2JvdW5kYXJ5ICsgYictLVxyXG4nCiAgICAgICAgIGJvZHkgPSBpby5CeXRlc0lPKCkKICAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gZGF0YS5pdGVtcygpOgotICAgICAgICAgICAgdGl0bGUgPSAnXG5Db250ZW50LURpc3Bvc2l0aW9uOiBmb3JtLWRhdGE7IG5hbWU9IiVzIicgJSBrZXkKKyAgICAgICAgICAgIHRpdGxlID0gJ1xyXG5Db250ZW50LURpc3Bvc2l0aW9uOiBmb3JtLWRhdGE7IG5hbWU9IiVzIicgJSBrZXkKICAgICAgICAgICAgICMgaGFuZGxlIG11bHRpcGxlIGVudHJpZXMgZm9yIHRoZSBzYW1lIG5hbWUKICAgICAgICAgICAgIGlmIHR5cGUodmFsdWUpICE9IHR5cGUoW10pOgogICAgICAgICAgICAgICAgIHZhbHVlID0gW3ZhbHVlXQpAQCAtMTU5LDEyICsxNTksMTEgQEAKICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBzdHIodmFsdWUpLmVuY29kZSgndXRmLTgnKQogICAgICAgICAgICAgICAgIGJvZHkud3JpdGUoc2VwX2JvdW5kYXJ5KQogICAgICAgICAgICAgICAgIGJvZHkud3JpdGUodGl0bGUuZW5jb2RlKCd1dGYtOCcpKQotICAgICAgICAgICAgICAgIGJvZHkud3JpdGUoYiJcblxuIikKKyAgICAgICAgICAgICAgICBib2R5LndyaXRlKGIiXHJcblxyXG4iKQogICAgICAgICAgICAgICAgIGJvZHkud3JpdGUodmFsdWUpCiAgICAgICAgICAgICAgICAgaWYgdmFsdWUgYW5kIHZhbHVlWy0xOl0gPT0gYidccic6CiAgICAgICAgICAgICAgICAgICAgIGJvZHkud3JpdGUoYidcbicpICAjIHdyaXRlIGFuIGV4dHJhIG5ld2xpbmUgKGx1cnZlIE1hY3MpCiAgICAgICAgIGJvZHkud3JpdGUoZW5kX2JvdW5kYXJ5KQotICAgICAgICBib2R5LndyaXRlKGIiXG4iKQogICAgICAgICBib2R5ID0gYm9keS5nZXR2YWx1ZSgpCiAKICAgICAgICAgc2VsZi5hbm5vdW5jZSgiU3VibWl0dGluZyAlcyB0byAlcyIgJSAoZmlsZW5hbWUsIHNlbGYucmVwb3NpdG9yeSksIGxvZy5JTkZPKQpAQCAtMTgyLDkgKzE4MSw5IEBACiAgICAgICAgICAgICByZXN1bHQgPSB1cmxvcGVuKHJlcXVlc3QpCiAgICAgICAgICAgICBzdGF0dXMgPSByZXN1bHQuZ2V0Y29kZSgpCiAgICAgICAgICAgICByZWFzb24gPSByZXN1bHQubXNnCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgIHNlbGYuYW5ub3VuY2Uoc3RyKGUpLCBsb2cuRVJST1IpCi0gICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIHJhaXNlCiAgICAgICAgIGV4Y2VwdCBIVFRQRXJyb3IgYXMgZToKICAgICAgICAgICAgIHN0YXR1cyA9IGUuY29kZQogICAgICAgICAgICAgcmVhc29uID0gZS5tc2cKQEAgLTE5Myw4ICsxOTIsOSBAQAogICAgICAgICAgICAgc2VsZi5hbm5vdW5jZSgnU2VydmVyIHJlc3BvbnNlICglcyk6ICVzJyAlIChzdGF0dXMsIHJlYXNvbiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZy5JTkZPKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5hbm5vdW5jZSgnVXBsb2FkIGZhaWxlZCAoJXMpOiAlcycgJSAoc3RhdHVzLCByZWFzb24pLAotICAgICAgICAgICAgICAgICAgICAgICAgICBsb2cuRVJST1IpCisgICAgICAgICAgICBtc2cgPSAnVXBsb2FkIGZhaWxlZCAoJXMpOiAlcycgJSAoc3RhdHVzLCByZWFzb24pCisgICAgICAgICAgICBzZWxmLmFubm91bmNlKG1zZywgbG9nLkVSUk9SKQorICAgICAgICAgICAgcmFpc2UgRGlzdHV0aWxzRXJyb3IobXNnKQogICAgICAgICBpZiBzZWxmLnNob3dfcmVzcG9uc2U6CiAgICAgICAgICAgICB0ZXh0ID0gc2VsZi5fcmVhZF9weXBpX3Jlc3BvbnNlKHJlc3VsdCkKICAgICAgICAgICAgIG1zZyA9ICdcbicuam9pbigoJy0nICogNzUsIHRleHQsICctJyAqIDc1KSkKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvY29uZmlnLnB5IGIvTGliL2Rpc3R1dGlscy9jb25maWcucHkKaW5kZXggMTA2ZTE0Ni4uMzgyYWNhOCAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy9jb25maWcucHkKKysrIGIvTGliL2Rpc3R1dGlscy9jb25maWcucHkKQEAgLTgzLDYgKzgzLDE1IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFtrZXldID0gY29uZmlnLmdldChzZXJ2ZXIsIGtleSkKICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFtrZXldID0gZGVmYXVsdAorCisgICAgICAgICAgICAgICAgICAgICMgd29yayBhcm91bmQgcGVvcGxlIGhhdmluZyAicmVwb3NpdG9yeSIgZm9yIHRoZSAicHlwaSIKKyAgICAgICAgICAgICAgICAgICAgIyBzZWN0aW9uIG9mIHRoZWlyIGNvbmZpZyBzZXQgdG8gdGhlIEhUVFAgKHJhdGhlciB0aGFuCisgICAgICAgICAgICAgICAgICAgICMgSFRUUFMpIFVSTAorICAgICAgICAgICAgICAgICAgICBpZiAoc2VydmVyID09ICdweXBpJyBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcnkgaW4gKHNlbGYuREVGQVVMVF9SRVBPU0lUT1JZLCAncHlwaScpKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRbJ3JlcG9zaXRvcnknXSA9IHNlbGYuREVGQVVMVF9SRVBPU0lUT1JZCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudAorCiAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50WydzZXJ2ZXInXSA9PSByZXBvc2l0b3J5IG9yCiAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50WydyZXBvc2l0b3J5J10gPT0gcmVwb3NpdG9yeSk6CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudApkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9jb3JlLnB5IGIvTGliL2Rpc3R1dGlscy9jb3JlLnB5CmluZGV4IDI1ZDkxYmEuLjJiZmU2NmEgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvY29yZS5weQorKysgYi9MaWIvZGlzdHV0aWxzL2NvcmUucHkKQEAgLTEyNyw4ICsxMjcsOSBAQAogICAgIGlmIF9zZXR1cF9zdG9wX2FmdGVyID09ICJjb25maWciOgogICAgICAgICByZXR1cm4gZGlzdAogCi0gICAgIyBQYXJzZSB0aGUgY29tbWFuZCBsaW5lOyBhbnkgY29tbWFuZC1saW5lIGVycm9ycyBhcmUgdGhlIGVuZCB1c2VyJ3MKLSAgICAjIGZhdWx0LCBzbyB0dXJuIHRoZW0gaW50byBTeXN0ZW1FeGl0IHRvIHN1cHByZXNzIHRyYWNlYmFja3MuCisgICAgIyBQYXJzZSB0aGUgY29tbWFuZCBsaW5lIGFuZCBvdmVycmlkZSBjb25maWcgZmlsZXM7IGFueQorICAgICMgY29tbWFuZC1saW5lIGVycm9ycyBhcmUgdGhlIGVuZCB1c2VyJ3MgZmF1bHQsIHNvIHR1cm4gdGhlbSBpbnRvCisgICAgIyBTeXN0ZW1FeGl0IHRvIHN1cHByZXNzIHRyYWNlYmFja3MuCiAgICAgdHJ5OgogICAgICAgICBvayA9IGRpc3QucGFyc2VfY29tbWFuZF9saW5lKCkKICAgICBleGNlcHQgRGlzdHV0aWxzQXJnRXJyb3IgYXMgbXNnOgpAQCAtMTQ3LDcgKzE0OCw3IEBACiAgICAgICAgICAgICBkaXN0LnJ1bl9jb21tYW5kcygpCiAgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKICAgICAgICAgICAgIHJhaXNlIFN5c3RlbUV4aXQoImludGVycnVwdGVkIikKLSAgICAgICAgZXhjZXB0IChJT0Vycm9yLCBvcy5lcnJvcikgYXMgZXhjOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6CiAgICAgICAgICAgICBpZiBERUJVRzoKICAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJlcnJvcjogJXNcbiIgJSAoZXhjLCkpCiAgICAgICAgICAgICAgICAgcmFpc2UKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvY3lnd2luY2NvbXBpbGVyLnB5IGIvTGliL2Rpc3R1dGlscy9jeWd3aW5jY29tcGlsZXIucHkKaW5kZXggZTAwNzRhMS4uYzg3OTY0NiAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy9jeWd3aW5jY29tcGlsZXIucHkKKysrIGIvTGliL2Rpc3R1dGlscy9jeWd3aW5jY29tcGlsZXIucHkKQEAgLTEwLDkgKzEwLDkgQEAKICMKICMgKiBpZiB5b3UgdXNlIGEgbXN2YyBjb21waWxlZCBweXRob24gdmVyc2lvbiAoMS41LjIpCiAjICAgMS4geW91IGhhdmUgdG8gaW5zZXJ0IGEgX19HTlVDX18gc2VjdGlvbiBpbiBpdHMgY29uZmlnLmgKLSMgICAyLiB5b3UgaGF2ZSB0byBnZW5lcmF0ZSBhIGltcG9ydCBsaWJyYXJ5IGZvciBpdHMgZGxsCisjICAgMi4geW91IGhhdmUgdG8gZ2VuZXJhdGUgYW4gaW1wb3J0IGxpYnJhcnkgZm9yIGl0cyBkbGwKICMgICAgICAtIGNyZWF0ZSBhIGRlZi1maWxlIGZvciBweXRob24/Py5kbGwKLSMgICAgICAtIGNyZWF0ZSBhIGltcG9ydCBsaWJyYXJ5IHVzaW5nCisjICAgICAgLSBjcmVhdGUgYW4gaW1wb3J0IGxpYnJhcnkgdXNpbmcKICMgICAgICAgICAgICAgZGxsdG9vbCAtLWRsbG5hbWUgcHl0aG9uMTUuZGxsIC0tZGVmIHB5dGhvbjE1LmRlZiBcCiAjICAgICAgICAgICAgICAgICAgICAgICAtLW91dHB1dC1saWIgbGlicHl0aG9uMTUuYQogIwpAQCAtNTQsNyArNTQsOCBAQAogZnJvbSBkaXN0dXRpbHMuY2NvbXBpbGVyIGltcG9ydCBnZW5fcHJlcHJvY2Vzc19vcHRpb25zLCBnZW5fbGliX29wdGlvbnMKIGZyb20gZGlzdHV0aWxzLnVuaXhjY29tcGlsZXIgaW1wb3J0IFVuaXhDQ29tcGlsZXIKIGZyb20gZGlzdHV0aWxzLmZpbGVfdXRpbCBpbXBvcnQgd3JpdGVfZmlsZQotZnJvbSBkaXN0dXRpbHMuZXJyb3JzIGltcG9ydCBEaXN0dXRpbHNFeGVjRXJyb3IsIENvbXBpbGVFcnJvciwgVW5rbm93bkZpbGVFcnJvcgorZnJvbSBkaXN0dXRpbHMuZXJyb3JzIGltcG9ydCAoRGlzdHV0aWxzRXhlY0Vycm9yLCBDQ29tcGlsZXJFcnJvciwKKyAgICAgICAgQ29tcGlsZUVycm9yLCBVbmtub3duRmlsZUVycm9yKQogZnJvbSBkaXN0dXRpbHMgaW1wb3J0IGxvZwogZnJvbSBkaXN0dXRpbHMudmVyc2lvbiBpbXBvcnQgTG9vc2VWZXJzaW9uCiBmcm9tIGRpc3R1dGlscy5zcGF3biBpbXBvcnQgZmluZF9leGVjdXRhYmxlCkBAIC0yOTQsMTggKzI5NSwxNyBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgZW50cnlfcG9pbnQgPSAnJwogCi0gICAgICAgIGlmIHNlbGYuZ2NjX3ZlcnNpb24gPCAnNCcgb3IgaXNfY3lnd2luZ2NjKCk6Ci0gICAgICAgICAgICBub19jeWd3aW4gPSAnIC1tbm8tY3lnd2luJwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgbm9fY3lnd2luID0gJycKKyAgICAgICAgaWYgaXNfY3lnd2luZ2NjKCk6CisgICAgICAgICAgICByYWlzZSBDQ29tcGlsZXJFcnJvcigKKyAgICAgICAgICAgICAgICAnQ3lnd2luIGdjYyBjYW5ub3QgYmUgdXNlZCB3aXRoIC0tY29tcGlsZXI9bWluZ3czMicpCiAKLSAgICAgICAgc2VsZi5zZXRfZXhlY3V0YWJsZXMoY29tcGlsZXI9J2djYyVzIC1PIC1XYWxsJyAlIG5vX2N5Z3dpbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZXJfc289J2djYyVzIC1tZGxsIC1PIC1XYWxsJyAlIG5vX2N5Z3dpbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZXJfY3h4PSdnKyslcyAtTyAtV2FsbCcgJSBub19jeWd3aW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtlcl9leGU9J2djYyVzJyAlIG5vX2N5Z3dpbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua2VyX3NvPSclcyVzICVzICVzJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoc2VsZi5saW5rZXJfZGxsLCBub19jeWd3aW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFyZWRfb3B0aW9uLCBlbnRyeV9wb2ludCkpCisgICAgICAgIHNlbGYuc2V0X2V4ZWN1dGFibGVzKGNvbXBpbGVyPSdnY2MgLU8gLVdhbGwnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21waWxlcl9zbz0nZ2NjIC1tZGxsIC1PIC1XYWxsJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZXJfY3h4PSdnKysgLU8gLVdhbGwnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rZXJfZXhlPSdnY2MnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rZXJfc289JyVzICVzICVzJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHNlbGYubGlua2VyX2RsbCwgc2hhcmVkX29wdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeV9wb2ludCkpCiAgICAgICAgICMgTWF5YmUgd2Ugc2hvdWxkIGFsc28gYXBwZW5kIC1tdGhyZWFkcywgYnV0IHRoZW4gdGhlIGZpbmlzaGVkCiAgICAgICAgICMgZGxscyBuZWVkIGFub3RoZXIgZGxsIChtaW5nd20xMC5kbGwgc2VlIE1pbmd3MzIgZG9jcykKICAgICAgICAgIyAoLW10aHJlYWRzOiBTdXBwb3J0IHRocmVhZC1zYWZlIGV4Y2VwdGlvbiBoYW5kbGluZyBvbiBgTWluZ3czMicpCkBAIC0zMTgsNyArMzE4LDcgQEAKICAgICAgICAgc2VsZi5kbGxfbGlicmFyaWVzID0gZ2V0X21zdmNyKCkKIAogIyBCZWNhdXNlIHRoZXNlIGNvbXBpbGVycyBhcmVuJ3QgY29uZmlndXJlZCBpbiBQeXRob24ncyBweWNvbmZpZy5oIGZpbGUgYnkKLSMgZGVmYXVsdCwgd2Ugc2hvdWxkIGF0IGxlYXN0IHdhcm4gdGhlIHVzZXIgaWYgaGUgaXMgdXNpbmcgYSB1bm1vZGlmaWVkCisjIGRlZmF1bHQsIHdlIHNob3VsZCBhdCBsZWFzdCB3YXJuIHRoZSB1c2VyIGlmIGhlIGlzIHVzaW5nIGFuIHVubW9kaWZpZWQKICMgdmVyc2lvbi4KIAogQ09ORklHX0hfT0sgPSAib2siCkBAIC0zNjQsNyArMzY0LDcgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gQ09ORklHX0hfTk9UT0ssICInJXMnIGRvZXMgbm90IG1lbnRpb24gJ19fR05VQ19fJyIgJSBmbgogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgY29uZmlnX2guY2xvc2UoKQotICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGV4YzoKKyAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6CiAgICAgICAgIHJldHVybiAoQ09ORklHX0hfVU5DRVJUQUlOLAogICAgICAgICAgICAgICAgICJjb3VsZG4ndCByZWFkICclcyc6ICVzIiAlIChmbiwgZXhjLnN0cmVycm9yKSkKIApkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9kaXJfdXRpbC5weSBiL0xpYi9kaXN0dXRpbHMvZGlyX3V0aWwucHkKaW5kZXggNmE3MmJkZC4uZDVjZDhlMyAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy9kaXJfdXRpbC5weQorKysgYi9MaWIvZGlzdHV0aWxzL2Rpcl91dGlsLnB5CkBAIC04MSw3ICs4MSw3IEBACiAgICAgIiIiQ3JlYXRlIGFsbCB0aGUgZW1wdHkgZGlyZWN0b3JpZXMgdW5kZXIgJ2Jhc2VfZGlyJyBuZWVkZWQgdG8gcHV0ICdmaWxlcycKICAgICB0aGVyZS4KIAotICAgICdiYXNlX2RpcicgaXMganVzdCB0aGUgYSBuYW1lIG9mIGEgZGlyZWN0b3J5IHdoaWNoIGRvZXNuJ3QgbmVjZXNzYXJpbHkKKyAgICAnYmFzZV9kaXInIGlzIGp1c3QgdGhlIG5hbWUgb2YgYSBkaXJlY3Rvcnkgd2hpY2ggZG9lc24ndCBuZWNlc3NhcmlseQogICAgIGV4aXN0IHlldDsgJ2ZpbGVzJyBpcyBhIGxpc3Qgb2YgZmlsZW5hbWVzIHRvIGJlIGludGVycHJldGVkIHJlbGF0aXZlIHRvCiAgICAgJ2Jhc2VfZGlyJy4gICdiYXNlX2RpcicgKyB0aGUgZGlyZWN0b3J5IHBvcnRpb24gb2YgZXZlcnkgZmlsZSBpbiAnZmlsZXMnCiAgICAgd2lsbCBiZSBjcmVhdGVkIGlmIGl0IGRvZXNuJ3QgYWxyZWFkeSBleGlzdC4gICdtb2RlJywgJ3ZlcmJvc2UnIGFuZApAQCAtMTI0LDEzICsxMjQsMTIgQEAKICAgICAgICAgICAgICAgImNhbm5vdCBjb3B5IHRyZWUgJyVzJzogbm90IGEgZGlyZWN0b3J5IiAlIHNyYykKICAgICB0cnk6CiAgICAgICAgIG5hbWVzID0gb3MubGlzdGRpcihzcmMpCi0gICAgZXhjZXB0IG9zLmVycm9yIGFzIGU6Ci0gICAgICAgIChlcnJubywgZXJyc3RyKSA9IGUKKyAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICBpZiBkcnlfcnVuOgogICAgICAgICAgICAgbmFtZXMgPSBbXQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmFpc2UgRGlzdHV0aWxzRmlsZUVycm9yKAotICAgICAgICAgICAgICAgICAgImVycm9yIGxpc3RpbmcgZmlsZXMgaW4gJyVzJzogJXMiICUgKHNyYywgZXJyc3RyKSkKKyAgICAgICAgICAgICAgICAgICJlcnJvciBsaXN0aW5nIGZpbGVzIGluICclcyc6ICVzIiAlIChzcmMsIGUuc3RyZXJyb3IpKQogCiAgICAgaWYgbm90IGRyeV9ydW46CiAgICAgICAgIG1rcGF0aChkc3QsIHZlcmJvc2U9dmVyYm9zZSkKQEAgLTE5Nyw3ICsxOTYsNyBAQAogICAgICAgICAgICAgYWJzcGF0aCA9IG9zLnBhdGguYWJzcGF0aChjbWRbMV0pCiAgICAgICAgICAgICBpZiBhYnNwYXRoIGluIF9wYXRoX2NyZWF0ZWQ6CiAgICAgICAgICAgICAgICAgZGVsIF9wYXRoX2NyZWF0ZWRbYWJzcGF0aF0KLSAgICAgICAgZXhjZXB0IChJT0Vycm9yLCBPU0Vycm9yKSBhcyBleGM6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKICAgICAgICAgICAgIGxvZy53YXJuKCJlcnJvciByZW1vdmluZyAlczogJXMiLCBkaXJlY3RvcnksIGV4YykKIAogZGVmIGVuc3VyZV9yZWxhdGl2ZShwYXRoKToKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvZGlzdC5weSBiL0xpYi9kaXN0dXRpbHMvZGlzdC5weQppbmRleCAxMWEyMTAyLi43ZWIwNGJjIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2Rpc3QucHkKKysrIGIvTGliL2Rpc3R1dGlscy9kaXN0LnB5CkBAIC01Miw3ICs1Miw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgKCdxdWlldCcsICdxJywgInJ1biBxdWlldGx5ICh0dXJucyB2ZXJib3NpdHkgb2ZmKSIpLAogICAgICAgICAgICAgICAgICAgICAgICgnZHJ5LXJ1bicsICduJywgImRvbid0IGFjdHVhbGx5IGRvIGFueXRoaW5nIiksCiAgICAgICAgICAgICAgICAgICAgICAgKCdoZWxwJywgJ2gnLCAic2hvdyBkZXRhaWxlZCBoZWxwIG1lc3NhZ2UiKSwKLSAgICAgICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgICAgICAgICAgICAoJ25vLXVzZXItY2ZnJywgTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgJ2lnbm9yZSBweWRpc3R1dGlscy5jZmcgaW4geW91ciBob21lIGRpcmVjdG9yeScpLAorICAgIF0KIAogICAgICMgJ2NvbW1vbl91c2FnZScgaXMgYSBzaG9ydCAoMi0zIGxpbmUpIHN0cmluZyBkZXNjcmliaW5nIHRoZSBjb21tb24KICAgICAjIHVzYWdlIG9mIHRoZSBzZXR1cCBzY3JpcHQuCkBAIC0yNTksNiArMjYxLDIyIEBACiAgICAgICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKG1zZyArICJcbiIpCiAKKyAgICAgICAgIyBuby11c2VyLWNmZyBpcyBoYW5kbGVkIGJlZm9yZSBvdGhlciBjb21tYW5kIGxpbmUgYXJncworICAgICAgICAjIGJlY2F1c2Ugb3RoZXIgYXJncyBvdmVycmlkZSB0aGUgY29uZmlnIGZpbGVzLCBhbmQgdGhpcworICAgICAgICAjIG9uZSBpcyBuZWVkZWQgYmVmb3JlIHdlIGNhbiBsb2FkIHRoZSBjb25maWcgZmlsZXMuCisgICAgICAgICMgSWYgYXR0cnNbJ3NjcmlwdF9hcmdzJ10gd2Fzbid0IHBhc3NlZCwgYXNzdW1lIGZhbHNlLgorICAgICAgICAjCisgICAgICAgICMgVGhpcyBhbHNvIG1ha2Ugc3VyZSB3ZSBqdXN0IGxvb2sgYXQgdGhlIGdsb2JhbCBvcHRpb25zCisgICAgICAgIHNlbGYud2FudF91c2VyX2NmZyA9IFRydWUKKworICAgICAgICBpZiBzZWxmLnNjcmlwdF9hcmdzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgZm9yIGFyZyBpbiBzZWxmLnNjcmlwdF9hcmdzOgorICAgICAgICAgICAgICAgIGlmIG5vdCBhcmcuc3RhcnRzd2l0aCgnLScpOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGlmIGFyZyA9PSAnLS1uby11c2VyLWNmZyc6CisgICAgICAgICAgICAgICAgICAgIHNlbGYud2FudF91c2VyX2NmZyA9IEZhbHNlCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKICAgICAgICAgc2VsZi5maW5hbGl6ZV9vcHRpb25zKCkKIAogICAgIGRlZiBnZXRfb3B0aW9uX2RpY3Qoc2VsZiwgY29tbWFuZCk6CkBAIC0zMTAsNyArMzI4LDEwIEBACiAgICAgICAgIERpc3R1dGlscyBpbnN0YWxsYXRpb24gZGlyZWN0b3J5IChpZS4gd2hlcmUgdGhlIHRvcC1sZXZlbAogICAgICAgICBEaXN0dXRpbHMgX19pbnN0X18ucHkgZmlsZSBsaXZlcyksIGEgZmlsZSBpbiB0aGUgdXNlcidzIGhvbWUKICAgICAgICAgZGlyZWN0b3J5IG5hbWVkIC5weWRpc3R1dGlscy5jZmcgb24gVW5peCBhbmQgcHlkaXN0dXRpbHMuY2ZnCi0gICAgICAgIG9uIFdpbmRvd3MvTWFjLCBhbmQgc2V0dXAuY2ZnIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KKyAgICAgICAgb24gV2luZG93cy9NYWM7IGFuZCBzZXR1cC5jZmcgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgorCisgICAgICAgIFRoZSBmaWxlIGluIHRoZSB1c2VyJ3MgaG9tZSBkaXJlY3RvcnkgY2FuIGJlIGRpc2FibGVkIHdpdGggdGhlCisgICAgICAgIC0tbm8tdXNlci1jZmcgb3B0aW9uLgogICAgICAgICAiIiIKICAgICAgICAgZmlsZXMgPSBbXQogICAgICAgICBjaGVja19lbnZpcm9uKCkKQEAgLTMzMCwxNSArMzUxLDE5IEBACiAgICAgICAgICAgICB1c2VyX2ZpbGVuYW1lID0gInB5ZGlzdHV0aWxzLmNmZyIKIAogICAgICAgICAjIEFuZCBsb29rIGZvciB0aGUgdXNlciBjb25maWcgZmlsZQotICAgICAgICB1c2VyX2ZpbGUgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5leHBhbmR1c2VyKCd+JyksIHVzZXJfZmlsZW5hbWUpCi0gICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKHVzZXJfZmlsZSk6Ci0gICAgICAgICAgICBmaWxlcy5hcHBlbmQodXNlcl9maWxlKQorICAgICAgICBpZiBzZWxmLndhbnRfdXNlcl9jZmc6CisgICAgICAgICAgICB1c2VyX2ZpbGUgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5leHBhbmR1c2VyKCd+JyksIHVzZXJfZmlsZW5hbWUpCisgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZSh1c2VyX2ZpbGUpOgorICAgICAgICAgICAgICAgIGZpbGVzLmFwcGVuZCh1c2VyX2ZpbGUpCiAKICAgICAgICAgIyBBbGwgcGxhdGZvcm1zIHN1cHBvcnQgbG9jYWwgc2V0dXAuY2ZnCiAgICAgICAgIGxvY2FsX2ZpbGUgPSAic2V0dXAuY2ZnIgogICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShsb2NhbF9maWxlKToKICAgICAgICAgICAgIGZpbGVzLmFwcGVuZChsb2NhbF9maWxlKQogCisgICAgICAgIGlmIERFQlVHOgorICAgICAgICAgICAgc2VsZi5hbm5vdW5jZSgidXNpbmcgY29uZmlnIGZpbGVzOiAlcyIgJSAnLCAnLmpvaW4oZmlsZXMpKQorCiAgICAgICAgIHJldHVybiBmaWxlcwogCiAgICAgZGVmIHBhcnNlX2NvbmZpZ19maWxlcyhzZWxmLCBmaWxlbmFtZXM9Tm9uZSk6CmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2VteGNjb21waWxlci5weSBiL0xpYi9kaXN0dXRpbHMvZW14Y2NvbXBpbGVyLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNjc1ZjhkLi4wMDAwMDAwCi0tLSBhL0xpYi9kaXN0dXRpbHMvZW14Y2NvbXBpbGVyLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMzE1ICswLDAgQEAKLSIiImRpc3R1dGlscy5lbXhjY29tcGlsZXIKLQotUHJvdmlkZXMgdGhlIEVNWENDb21waWxlciBjbGFzcywgYSBzdWJjbGFzcyBvZiBVbml4Q0NvbXBpbGVyIHRoYXQKLWhhbmRsZXMgdGhlIEVNWCBwb3J0IG9mIHRoZSBHTlUgQyBjb21waWxlciB0byBPUy8yLgotIiIiCi0KLSMgaXNzdWVzOgotIwotIyAqIE9TLzIgaW5zaXN0cyB0aGF0IERMTHMgY2FuIGhhdmUgbmFtZXMgbm8gbG9uZ2VyIHRoYW4gOCBjaGFyYWN0ZXJzCi0jICAgV2UgcHV0IGV4cG9ydF9zeW1ib2xzIGluIGEgZGVmLWZpbGUsIGFzIHRob3VnaCB0aGUgRExMIGNhbiBoYXZlCi0jICAgYW4gYXJiaXRyYXJ5IGxlbmd0aCBuYW1lLCBidXQgdHJ1bmNhdGUgdGhlIG91dHB1dCBmaWxlbmFtZS4KLSMKLSMgKiBvbmx5IHVzZSBPTUYgb2JqZWN0cyBhbmQgdXNlIExJTkszODYgYXMgdGhlIGxpbmtlciAoLVpvbWYpCi0jCi0jICogYWx3YXlzIGJ1aWxkIGZvciBtdWx0aXRocmVhZGluZyAoLVptdCkgYXMgdGhlIGFjY29tcGFueWluZyBPUy8yIHBvcnQKLSMgICBvZiBQeXRob24gaXMgb25seSBkaXN0cmlidXRlZCB3aXRoIHRocmVhZHMgZW5hYmxlZC4KLSMKLSMgdGVzdGVkIGNvbmZpZ3VyYXRpb25zOgotIwotIyAqIEVNWCBnY2MgMi44MS9FTVggMC45ZCBmaXgwMwotCi1pbXBvcnQgb3Msc3lzLGNvcHkKLWZyb20gZGlzdHV0aWxzLmNjb21waWxlciBpbXBvcnQgZ2VuX3ByZXByb2Nlc3Nfb3B0aW9ucywgZ2VuX2xpYl9vcHRpb25zCi1mcm9tIGRpc3R1dGlscy51bml4Y2NvbXBpbGVyIGltcG9ydCBVbml4Q0NvbXBpbGVyCi1mcm9tIGRpc3R1dGlscy5maWxlX3V0aWwgaW1wb3J0IHdyaXRlX2ZpbGUKLWZyb20gZGlzdHV0aWxzLmVycm9ycyBpbXBvcnQgRGlzdHV0aWxzRXhlY0Vycm9yLCBDb21waWxlRXJyb3IsIFVua25vd25GaWxlRXJyb3IKLWZyb20gZGlzdHV0aWxzIGltcG9ydCBsb2cKLQotY2xhc3MgRU1YQ0NvbXBpbGVyIChVbml4Q0NvbXBpbGVyKToKLQotICAgIGNvbXBpbGVyX3R5cGUgPSAnZW14JwotICAgIG9ial9leHRlbnNpb24gPSAiLm9iaiIKLSAgICBzdGF0aWNfbGliX2V4dGVuc2lvbiA9ICIubGliIgotICAgIHNoYXJlZF9saWJfZXh0ZW5zaW9uID0gIi5kbGwiCi0gICAgc3RhdGljX2xpYl9mb3JtYXQgPSAiJXMlcyIKLSAgICBzaGFyZWRfbGliX2Zvcm1hdCA9ICIlcyVzIgotICAgIHJlc19leHRlbnNpb24gPSAiLnJlcyIgICAgICAjIGNvbXBpbGVkIHJlc291cmNlIGZpbGUKLSAgICBleGVfZXh0ZW5zaW9uID0gIi5leGUiCi0KLSAgICBkZWYgX19pbml0X18gKHNlbGYsCi0gICAgICAgICAgICAgICAgICB2ZXJib3NlPTAsCi0gICAgICAgICAgICAgICAgICBkcnlfcnVuPTAsCi0gICAgICAgICAgICAgICAgICBmb3JjZT0wKToKLQotICAgICAgICBVbml4Q0NvbXBpbGVyLl9faW5pdF9fIChzZWxmLCB2ZXJib3NlLCBkcnlfcnVuLCBmb3JjZSkKLQotICAgICAgICAoc3RhdHVzLCBkZXRhaWxzKSA9IGNoZWNrX2NvbmZpZ19oKCkKLSAgICAgICAgc2VsZi5kZWJ1Z19wcmludCgiUHl0aG9uJ3MgR0NDIHN0YXR1czogJXMgKGRldGFpbHM6ICVzKSIgJQotICAgICAgICAgICAgICAgICAgICAgICAgIChzdGF0dXMsIGRldGFpbHMpKQotICAgICAgICBpZiBzdGF0dXMgaXMgbm90IENPTkZJR19IX09LOgotICAgICAgICAgICAgc2VsZi53YXJuKAotICAgICAgICAgICAgICAgICJQeXRob24ncyBweWNvbmZpZy5oIGRvZXNuJ3Qgc2VlbSB0byBzdXBwb3J0IHlvdXIgY29tcGlsZXIuICAiICsKLSAgICAgICAgICAgICAgICAoIlJlYXNvbjogJXMuIiAlIGRldGFpbHMpICsKLSAgICAgICAgICAgICAgICAiQ29tcGlsaW5nIG1heSBmYWlsIGJlY2F1c2Ugb2YgdW5kZWZpbmVkIHByZXByb2Nlc3NvciBtYWNyb3MuIikKLQotICAgICAgICAoc2VsZi5nY2NfdmVyc2lvbiwgc2VsZi5sZF92ZXJzaW9uKSA9IFwKLSAgICAgICAgICAgIGdldF92ZXJzaW9ucygpCi0gICAgICAgIHNlbGYuZGVidWdfcHJpbnQoc2VsZi5jb21waWxlcl90eXBlICsgIjogZ2NjICVzLCBsZCAlc1xuIiAlCi0gICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYuZ2NjX3ZlcnNpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGRfdmVyc2lvbikgKQotCi0gICAgICAgICMgSGFyZC1jb2RlIEdDQyBiZWNhdXNlIHRoYXQncyB3aGF0IHRoaXMgaXMgYWxsIGFib3V0LgotICAgICAgICAjIFhYWCBvcHRpbWl6YXRpb24sIHdhcm5pbmdzIGV0Yy4gc2hvdWxkIGJlIGN1c3RvbWl6YWJsZS4KLSAgICAgICAgc2VsZi5zZXRfZXhlY3V0YWJsZXMoY29tcGlsZXI9J2djYyAtWm9tZiAtWm10IC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtbXByb2JlIC1XYWxsJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZXJfc289J2djYyAtWm9tZiAtWm10IC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtbXByb2JlIC1XYWxsJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua2VyX2V4ZT0nZ2NjIC1ab21mIC1abXQgLVpjcnRkbGwnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rZXJfc289J2djYyAtWm9tZiAtWm10IC1aY3J0ZGxsIC1aZGxsJykKLQotICAgICAgICAjIHdhbnQgdGhlIGdjYyBsaWJyYXJ5IHN0YXRpY2FsbHkgbGlua2VkIChzbyB0aGF0IHdlIGRvbid0IGhhdmUKLSAgICAgICAgIyB0byBkaXN0cmlidXRlIGEgdmVyc2lvbiBkZXBlbmRlbnQgb24gdGhlIGNvbXBpbGVyIHdlIGhhdmUpCi0gICAgICAgIHNlbGYuZGxsX2xpYnJhcmllcz1bImdjYyJdCi0KLSAgICAjIF9faW5pdF9fICgpCi0KLSAgICBkZWYgX2NvbXBpbGUoc2VsZiwgb2JqLCBzcmMsIGV4dCwgY2NfYXJncywgZXh0cmFfcG9zdGFyZ3MsIHBwX29wdHMpOgotICAgICAgICBpZiBleHQgPT0gJy5yYyc6Ci0gICAgICAgICAgICAjIGdjYyByZXF1aXJlcyAnLnJjJyBjb21waWxlZCB0byBiaW5hcnkgKCcucmVzJykgZmlsZXMgISEhCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgc2VsZi5zcGF3bihbInJjIiwgIi1yIiwgc3JjXSkKLSAgICAgICAgICAgIGV4Y2VwdCBEaXN0dXRpbHNFeGVjRXJyb3IgYXMgbXNnOgotICAgICAgICAgICAgICAgIHJhaXNlIENvbXBpbGVFcnJvcihtc2cpCi0gICAgICAgIGVsc2U6ICMgZm9yIG90aGVyIGZpbGVzIHVzZSB0aGUgQy1jb21waWxlcgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHNlbGYuc3Bhd24oc2VsZi5jb21waWxlcl9zbyArIGNjX2FyZ3MgKyBbc3JjLCAnLW8nLCBvYmpdICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhX3Bvc3RhcmdzKQotICAgICAgICAgICAgZXhjZXB0IERpc3R1dGlsc0V4ZWNFcnJvciBhcyBtc2c6Ci0gICAgICAgICAgICAgICAgcmFpc2UgQ29tcGlsZUVycm9yKG1zZykKLQotICAgIGRlZiBsaW5rIChzZWxmLAotICAgICAgICAgICAgICB0YXJnZXRfZGVzYywKLSAgICAgICAgICAgICAgb2JqZWN0cywKLSAgICAgICAgICAgICAgb3V0cHV0X2ZpbGVuYW1lLAotICAgICAgICAgICAgICBvdXRwdXRfZGlyPU5vbmUsCi0gICAgICAgICAgICAgIGxpYnJhcmllcz1Ob25lLAotICAgICAgICAgICAgICBsaWJyYXJ5X2RpcnM9Tm9uZSwKLSAgICAgICAgICAgICAgcnVudGltZV9saWJyYXJ5X2RpcnM9Tm9uZSwKLSAgICAgICAgICAgICAgZXhwb3J0X3N5bWJvbHM9Tm9uZSwKLSAgICAgICAgICAgICAgZGVidWc9MCwKLSAgICAgICAgICAgICAgZXh0cmFfcHJlYXJncz1Ob25lLAotICAgICAgICAgICAgICBleHRyYV9wb3N0YXJncz1Ob25lLAotICAgICAgICAgICAgICBidWlsZF90ZW1wPU5vbmUsCi0gICAgICAgICAgICAgIHRhcmdldF9sYW5nPU5vbmUpOgotCi0gICAgICAgICMgdXNlIHNlcGFyYXRlIGNvcGllcywgc28gd2UgY2FuIG1vZGlmeSB0aGUgbGlzdHMKLSAgICAgICAgZXh0cmFfcHJlYXJncyA9IGNvcHkuY29weShleHRyYV9wcmVhcmdzIG9yIFtdKQotICAgICAgICBsaWJyYXJpZXMgPSBjb3B5LmNvcHkobGlicmFyaWVzIG9yIFtdKQotICAgICAgICBvYmplY3RzID0gY29weS5jb3B5KG9iamVjdHMgb3IgW10pCi0KLSAgICAgICAgIyBBZGRpdGlvbmFsIGxpYnJhcmllcwotICAgICAgICBsaWJyYXJpZXMuZXh0ZW5kKHNlbGYuZGxsX2xpYnJhcmllcykKLQotICAgICAgICAjIGhhbmRsZSBleHBvcnQgc3ltYm9scyBieSBjcmVhdGluZyBhIGRlZi1maWxlCi0gICAgICAgICMgd2l0aCBleGVjdXRhYmxlcyB0aGlzIG9ubHkgd29ya3Mgd2l0aCBnY2MvbGQgYXMgbGlua2VyCi0gICAgICAgIGlmICgoZXhwb3J0X3N5bWJvbHMgaXMgbm90IE5vbmUpIGFuZAotICAgICAgICAgICAgKHRhcmdldF9kZXNjICE9IHNlbGYuRVhFQ1VUQUJMRSkpOgotICAgICAgICAgICAgIyAoVGhlIGxpbmtlciBkb2Vzbid0IGRvIGFueXRoaW5nIGlmIG91dHB1dCBpcyB1cC10by1kYXRlLgotICAgICAgICAgICAgIyBTbyBpdCB3b3VsZCBwcm9iYWJseSBiZXR0ZXIgdG8gY2hlY2sgaWYgd2UgcmVhbGx5IG5lZWQgdGhpcywKLSAgICAgICAgICAgICMgYnV0IGZvciB0aGlzIHdlIGhhZCB0byBpbnNlcnQgc29tZSB1bmNoYW5nZWQgcGFydHMgb2YKLSAgICAgICAgICAgICMgVW5peENDb21waWxlciwgYW5kIHRoaXMgaXMgbm90IHdoYXQgd2Ugd2FudC4pCi0KLSAgICAgICAgICAgICMgd2Ugd2FudCB0byBwdXQgc29tZSBmaWxlcyBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgYXMgdGhlCi0gICAgICAgICAgICAjIG9iamVjdCBmaWxlcyBhcmUsIGJ1aWxkX3RlbXAgZG9lc24ndCBoZWxwIG11Y2gKLSAgICAgICAgICAgICMgd2hlcmUgYXJlIHRoZSBvYmplY3QgZmlsZXMKLSAgICAgICAgICAgIHRlbXBfZGlyID0gb3MucGF0aC5kaXJuYW1lKG9iamVjdHNbMF0pCi0gICAgICAgICAgICAjIG5hbWUgb2YgZGxsIHRvIGdpdmUgdGhlIGhlbHBlciBmaWxlcyB0aGUgc2FtZSBiYXNlIG5hbWUKLSAgICAgICAgICAgIChkbGxfbmFtZSwgZGxsX2V4dGVuc2lvbikgPSBvcy5wYXRoLnNwbGl0ZXh0KAotICAgICAgICAgICAgICAgIG9zLnBhdGguYmFzZW5hbWUob3V0cHV0X2ZpbGVuYW1lKSkKLQotICAgICAgICAgICAgIyBnZW5lcmF0ZSB0aGUgZmlsZW5hbWVzIGZvciB0aGVzZSBmaWxlcwotICAgICAgICAgICAgZGVmX2ZpbGUgPSBvcy5wYXRoLmpvaW4odGVtcF9kaXIsIGRsbF9uYW1lICsgIi5kZWYiKQotCi0gICAgICAgICAgICAjIEdlbmVyYXRlIC5kZWYgZmlsZQotICAgICAgICAgICAgY29udGVudHMgPSBbCi0gICAgICAgICAgICAgICAgIkxJQlJBUlkgJXMgSU5JVElOU1RBTkNFIFRFUk1JTlNUQU5DRSIgJSBcCi0gICAgICAgICAgICAgICAgb3MucGF0aC5zcGxpdGV4dChvcy5wYXRoLmJhc2VuYW1lKG91dHB1dF9maWxlbmFtZSkpWzBdLAotICAgICAgICAgICAgICAgICJEQVRBIE1VTFRJUExFIE5PTlNIQVJFRCIsCi0gICAgICAgICAgICAgICAgIkVYUE9SVFMiXQotICAgICAgICAgICAgZm9yIHN5bSBpbiBleHBvcnRfc3ltYm9sczoKLSAgICAgICAgICAgICAgICBjb250ZW50cy5hcHBlbmQoJyAgIiVzIicgJSBzeW0pCi0gICAgICAgICAgICBzZWxmLmV4ZWN1dGUod3JpdGVfZmlsZSwgKGRlZl9maWxlLCBjb250ZW50cyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIndyaXRpbmcgJXMiICUgZGVmX2ZpbGUpCi0KLSAgICAgICAgICAgICMgbmV4dCBhZGQgb3B0aW9ucyBmb3IgZGVmLWZpbGUgYW5kIHRvIGNyZWF0aW5nIGltcG9ydCBsaWJyYXJpZXMKLSAgICAgICAgICAgICMgZm9yIGdjYy9sZCB0aGUgZGVmLWZpbGUgaXMgc3BlY2lmaWVkIGFzIGFueSBvdGhlciBvYmplY3QgZmlsZXMKLSAgICAgICAgICAgIG9iamVjdHMuYXBwZW5kKGRlZl9maWxlKQotCi0gICAgICAgICNlbmQ6IGlmICgoZXhwb3J0X3N5bWJvbHMgaXMgbm90IE5vbmUpIGFuZAotICAgICAgICAjICAgICAgICAodGFyZ2V0X2Rlc2MgIT0gc2VsZi5FWEVDVVRBQkxFIG9yIHNlbGYubGlua2VyX2RsbCA9PSAiZ2NjIikpOgotCi0gICAgICAgICMgd2hvIHdhbnRzIHN5bWJvbHMgYW5kIGEgbWFueSB0aW1lcyBsYXJnZXIgb3V0cHV0IGZpbGUKLSAgICAgICAgIyBzaG91bGQgZXhwbGljaXRseSBzd2l0Y2ggdGhlIGRlYnVnIG1vZGUgb24KLSAgICAgICAgIyBvdGhlcndpc2Ugd2UgbGV0IGRsbHdyYXAvbGQgc3RyaXAgdGhlIG91dHB1dCBmaWxlCi0gICAgICAgICMgKE9uIG15IG1hY2hpbmU6IDEwS0IgPCBzdHJpcHBlZF9maWxlIDwgPz8xMDBLQgotICAgICAgICAjICAgdW5zdHJpcHBlZF9maWxlID0gc3RyaXBwZWRfZmlsZSArIFhYWCBLQgotICAgICAgICAjICAoIFhYWD0yNTQgZm9yIGEgdHlwaWNhbCBweXRob24gZXh0ZW5zaW9uKSkKLSAgICAgICAgaWYgbm90IGRlYnVnOgotICAgICAgICAgICAgZXh0cmFfcHJlYXJncy5hcHBlbmQoIi1zIikKLQotICAgICAgICBVbml4Q0NvbXBpbGVyLmxpbmsoc2VsZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldF9kZXNjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9maWxlbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9kaXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJpZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJ5X2RpcnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBydW50aW1lX2xpYnJhcnlfZGlycywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUsICMgZXhwb3J0X3N5bWJvbHMsIHdlIGRvIHRoaXMgaW4gb3VyIGRlZi1maWxlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhX3ByZWFyZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYV9wb3N0YXJncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkX3RlbXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRfbGFuZykKLQotICAgICMgbGluayAoKQotCi0gICAgIyAtLSBNaXNjZWxsYW5lb3VzIG1ldGhvZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAgICMgb3ZlcnJpZGUgdGhlIG9iamVjdF9maWxlbmFtZXMgbWV0aG9kIGZyb20gQ0NvbXBpbGVyIHRvCi0gICAgIyBzdXBwb3J0IHJjIGFuZCByZXMtZmlsZXMKLSAgICBkZWYgb2JqZWN0X2ZpbGVuYW1lcyAoc2VsZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlX2ZpbGVuYW1lcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaXBfZGlyPTAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9kaXI9JycpOgotICAgICAgICBpZiBvdXRwdXRfZGlyIGlzIE5vbmU6IG91dHB1dF9kaXIgPSAnJwotICAgICAgICBvYmpfbmFtZXMgPSBbXQotICAgICAgICBmb3Igc3JjX25hbWUgaW4gc291cmNlX2ZpbGVuYW1lczoKLSAgICAgICAgICAgICMgdXNlIG5vcm1jYXNlIHRvIG1ha2Ugc3VyZSAnLnJjJyBpcyByZWFsbHkgJy5yYycgYW5kIG5vdCAnLlJDJwotICAgICAgICAgICAgKGJhc2UsIGV4dCkgPSBvcy5wYXRoLnNwbGl0ZXh0IChvcy5wYXRoLm5vcm1jYXNlKHNyY19uYW1lKSkKLSAgICAgICAgICAgIGlmIGV4dCBub3QgaW4gKHNlbGYuc3JjX2V4dGVuc2lvbnMgKyBbJy5yYyddKToKLSAgICAgICAgICAgICAgICByYWlzZSBVbmtub3duRmlsZUVycm9yKCJ1bmtub3duIGZpbGUgdHlwZSAnJXMnIChmcm9tICclcycpIiAlIFwKLSAgICAgICAgICAgICAgICAgICAgICAoZXh0LCBzcmNfbmFtZSkpCi0gICAgICAgICAgICBpZiBzdHJpcF9kaXI6Ci0gICAgICAgICAgICAgICAgYmFzZSA9IG9zLnBhdGguYmFzZW5hbWUgKGJhc2UpCi0gICAgICAgICAgICBpZiBleHQgPT0gJy5yYyc6Ci0gICAgICAgICAgICAgICAgIyB0aGVzZSBuZWVkIHRvIGJlIGNvbXBpbGVkIHRvIG9iamVjdCBmaWxlcwotICAgICAgICAgICAgICAgIG9ial9uYW1lcy5hcHBlbmQgKG9zLnBhdGguam9pbiAob3V0cHV0X2RpciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZSArIHNlbGYucmVzX2V4dGVuc2lvbikpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIG9ial9uYW1lcy5hcHBlbmQgKG9zLnBhdGguam9pbiAob3V0cHV0X2RpciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZSArIHNlbGYub2JqX2V4dGVuc2lvbikpCi0gICAgICAgIHJldHVybiBvYmpfbmFtZXMKLQotICAgICMgb2JqZWN0X2ZpbGVuYW1lcyAoKQotCi0gICAgIyBvdmVycmlkZSB0aGUgZmluZF9saWJyYXJ5X2ZpbGUgbWV0aG9kIGZyb20gVW5peENDb21waWxlcgotICAgICMgdG8gZGVhbCB3aXRoIGZpbGUgbmFtaW5nL3NlYXJjaGluZyBkaWZmZXJlbmNlcwotICAgIGRlZiBmaW5kX2xpYnJhcnlfZmlsZShzZWxmLCBkaXJzLCBsaWIsIGRlYnVnPTApOgotICAgICAgICBzaG9ydGxpYiA9ICclcy5saWInICUgbGliCi0gICAgICAgIGxvbmdsaWIgPSAnbGliJXMubGliJyAlIGxpYiAgICAjIHRoaXMgZm9ybSB2ZXJ5IHJhcmUKLQotICAgICAgICAjIGdldCBFTVgncyBkZWZhdWx0IGxpYnJhcnkgZGlyZWN0b3J5IHNlYXJjaCBwYXRoCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGVteF9kaXJzID0gb3MuZW52aXJvblsnTElCUkFSWV9QQVRIJ10uc3BsaXQoJzsnKQotICAgICAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgICAgICBlbXhfZGlycyA9IFtdCi0KLSAgICAgICAgZm9yIGRpciBpbiBkaXJzICsgZW14X2RpcnM6Ci0gICAgICAgICAgICBzaG9ydGxpYnAgPSBvcy5wYXRoLmpvaW4oZGlyLCBzaG9ydGxpYikKLSAgICAgICAgICAgIGxvbmdsaWJwID0gb3MucGF0aC5qb2luKGRpciwgbG9uZ2xpYikKLSAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHNob3J0bGlicCk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHNob3J0bGlicAotICAgICAgICAgICAgZWxpZiBvcy5wYXRoLmV4aXN0cyhsb25nbGlicCk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGxvbmdsaWJwCi0KLSAgICAgICAgIyBPb3BzLCBkaWRuJ3QgZmluZCBpdCBpbiAqYW55KiBvZiAnZGlycycKLSAgICAgICAgcmV0dXJuIE5vbmUKLQotIyBjbGFzcyBFTVhDQ29tcGlsZXIKLQotCi0jIEJlY2F1c2UgdGhlc2UgY29tcGlsZXJzIGFyZW4ndCBjb25maWd1cmVkIGluIFB5dGhvbidzIHB5Y29uZmlnLmggZmlsZSBieQotIyBkZWZhdWx0LCB3ZSBzaG91bGQgYXQgbGVhc3Qgd2FybiB0aGUgdXNlciBpZiBoZSBpcyB1c2luZyBhIHVubW9kaWZpZWQKLSMgdmVyc2lvbi4KLQotQ09ORklHX0hfT0sgPSAib2siCi1DT05GSUdfSF9OT1RPSyA9ICJub3Qgb2siCi1DT05GSUdfSF9VTkNFUlRBSU4gPSAidW5jZXJ0YWluIgotCi1kZWYgY2hlY2tfY29uZmlnX2goKToKLQotICAgICIiIkNoZWNrIGlmIHRoZSBjdXJyZW50IFB5dGhvbiBpbnN0YWxsYXRpb24gKHNwZWNpZmljYWxseSwgcHljb25maWcuaCkKLSAgICBhcHBlYXJzIGFtZW5hYmxlIHRvIGJ1aWxkaW5nIGV4dGVuc2lvbnMgd2l0aCBHQ0MuICBSZXR1cm5zIGEgdHVwbGUKLSAgICAoc3RhdHVzLCBkZXRhaWxzKSwgd2hlcmUgJ3N0YXR1cycgaXMgb25lIG9mIHRoZSBmb2xsb3dpbmcgY29uc3RhbnRzOgotICAgICAgQ09ORklHX0hfT0sKLSAgICAgICAgYWxsIGlzIHdlbGwsIGdvIGFoZWFkIGFuZCBjb21waWxlCi0gICAgICBDT05GSUdfSF9OT1RPSwotICAgICAgICBkb2Vzbid0IGxvb2sgZ29vZAotICAgICAgQ09ORklHX0hfVU5DRVJUQUlOCi0gICAgICAgIG5vdCBzdXJlIC0tIHVuYWJsZSB0byByZWFkIHB5Y29uZmlnLmgKLSAgICAnZGV0YWlscycgaXMgYSBodW1hbi1yZWFkYWJsZSBzdHJpbmcgZXhwbGFpbmluZyB0aGUgc2l0dWF0aW9uLgotCi0gICAgTm90ZSB0aGVyZSBhcmUgdHdvIHdheXMgdG8gY29uY2x1ZGUgIk9LIjogZWl0aGVyICdzeXMudmVyc2lvbicgY29udGFpbnMKLSAgICB0aGUgc3RyaW5nICJHQ0MiIChpbXBseWluZyB0aGF0IHRoaXMgUHl0aG9uIHdhcyBidWlsdCB3aXRoIEdDQyksIG9yIHRoZQotICAgIGluc3RhbGxlZCAicHljb25maWcuaCIgY29udGFpbnMgdGhlIHN0cmluZyAiX19HTlVDX18iLgotICAgICIiIgotCi0gICAgIyBYWFggc2luY2UgdGhpcyBmdW5jdGlvbiBhbHNvIGNoZWNrcyBzeXMudmVyc2lvbiwgaXQncyBub3Qgc3RyaWN0bHkgYQotICAgICMgInB5Y29uZmlnLmgiIGNoZWNrIC0tIHNob3VsZCBwcm9iYWJseSBiZSByZW5hbWVkLi4uCi0KLSAgICBmcm9tIGRpc3R1dGlscyBpbXBvcnQgc3lzY29uZmlnCi0gICAgIyBpZiBzeXMudmVyc2lvbiBjb250YWlucyBHQ0MgdGhlbiBweXRob24gd2FzIGNvbXBpbGVkIHdpdGgKLSAgICAjIEdDQywgYW5kIHRoZSBweWNvbmZpZy5oIGZpbGUgc2hvdWxkIGJlIE9LCi0gICAgaWYgc3lzLnZlcnNpb24uZmluZCgiR0NDIikgPj0gMDoKLSAgICAgICAgcmV0dXJuIChDT05GSUdfSF9PSywgInN5cy52ZXJzaW9uIG1lbnRpb25zICdHQ0MnIikKLQotICAgIGZuID0gc3lzY29uZmlnLmdldF9jb25maWdfaF9maWxlbmFtZSgpCi0gICAgdHJ5OgotICAgICAgICAjIEl0IHdvdWxkIHByb2JhYmx5IGJldHRlciB0byByZWFkIHNpbmdsZSBsaW5lcyB0byBzZWFyY2guCi0gICAgICAgICMgQnV0IHdlIGRvIHRoaXMgb25seSBvbmNlLCBhbmQgaXQgaXMgZmFzdCBlbm91Z2gKLSAgICAgICAgZiA9IG9wZW4oZm4pCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHMgPSBmLnJlYWQoKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgZi5jbG9zZSgpCi0KLSAgICBleGNlcHQgSU9FcnJvciBhcyBleGM6Ci0gICAgICAgICMgaWYgd2UgY2FuJ3QgcmVhZCB0aGlzIGZpbGUsIHdlIGNhbm5vdCBzYXkgaXQgaXMgd3JvbmcKLSAgICAgICAgIyB0aGUgY29tcGlsZXIgd2lsbCBjb21wbGFpbiBsYXRlciBhYm91dCB0aGlzIGZpbGUgYXMgbWlzc2luZwotICAgICAgICByZXR1cm4gKENPTkZJR19IX1VOQ0VSVEFJTiwKLSAgICAgICAgICAgICAgICAiY291bGRuJ3QgcmVhZCAnJXMnOiAlcyIgJSAoZm4sIGV4Yy5zdHJlcnJvcikpCi0KLSAgICBlbHNlOgotICAgICAgICAjICJweWNvbmZpZy5oIiBjb250YWlucyBhbiAiI2lmZGVmIF9fR05VQ19fIiBvciBzb21ldGhpbmcgc2ltaWxhcgotICAgICAgICBpZiBzLmZpbmQoIl9fR05VQ19fIikgPj0gMDoKLSAgICAgICAgICAgIHJldHVybiAoQ09ORklHX0hfT0ssICInJXMnIG1lbnRpb25zICdfX0dOVUNfXyciICUgZm4pCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gKENPTkZJR19IX05PVE9LLCAiJyVzJyBkb2VzIG5vdCBtZW50aW9uICdfX0dOVUNfXyciICUgZm4pCi0KLQotZGVmIGdldF92ZXJzaW9ucygpOgotICAgICIiIiBUcnkgdG8gZmluZCBvdXQgdGhlIHZlcnNpb25zIG9mIGdjYyBhbmQgbGQuCi0gICAgICAgIElmIG5vdCBwb3NzaWJsZSBpdCByZXR1cm5zIE5vbmUgZm9yIGl0LgotICAgICIiIgotICAgIGZyb20gZGlzdHV0aWxzLnZlcnNpb24gaW1wb3J0IFN0cmljdFZlcnNpb24KLSAgICBmcm9tIGRpc3R1dGlscy5zcGF3biBpbXBvcnQgZmluZF9leGVjdXRhYmxlCi0gICAgaW1wb3J0IHJlCi0KLSAgICBnY2NfZXhlID0gZmluZF9leGVjdXRhYmxlKCdnY2MnKQotICAgIGlmIGdjY19leGU6Ci0gICAgICAgIG91dCA9IG9zLnBvcGVuKGdjY19leGUgKyAnIC1kdW1wdmVyc2lvbicsJ3InKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBvdXRfc3RyaW5nID0gb3V0LnJlYWQoKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgb3V0LmNsb3NlKCkKLSAgICAgICAgcmVzdWx0ID0gcmUuc2VhcmNoKCcoXGQrXC5cZCtcLlxkKyknLCBvdXRfc3RyaW5nLCByZS5BU0NJSSkKLSAgICAgICAgaWYgcmVzdWx0OgotICAgICAgICAgICAgZ2NjX3ZlcnNpb24gPSBTdHJpY3RWZXJzaW9uKHJlc3VsdC5ncm91cCgxKSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGdjY192ZXJzaW9uID0gTm9uZQotICAgIGVsc2U6Ci0gICAgICAgIGdjY192ZXJzaW9uID0gTm9uZQotICAgICMgRU1YIGxkIGhhcyBubyB3YXkgb2YgcmVwb3J0aW5nIHZlcnNpb24gbnVtYmVyLCBhbmQgd2UgdXNlIEdDQwotICAgICMgYW55d2F5IC0gc28gd2UgY2FuIGxpbmsgT01GIERMTHMKLSAgICBsZF92ZXJzaW9uID0gTm9uZQotICAgIHJldHVybiAoZ2NjX3ZlcnNpb24sIGxkX3ZlcnNpb24pCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2Vycm9ycy5weSBiL0xpYi9kaXN0dXRpbHMvZXJyb3JzLnB5CmluZGV4IGViMTNjOTguLjhiOTMwNTkgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvZXJyb3JzLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvZXJyb3JzLnB5CkBAIC0zNSw4ICszNSw4IEBACiAKIGNsYXNzIERpc3R1dGlsc0ZpbGVFcnJvciAoRGlzdHV0aWxzRXJyb3IpOgogICAgICIiIkFueSBwcm9ibGVtcyBpbiB0aGUgZmlsZXN5c3RlbTogZXhwZWN0ZWQgZmlsZSBub3QgZm91bmQsIGV0Yy4KLSAgICBUeXBpY2FsbHkgdGhpcyBpcyBmb3IgcHJvYmxlbXMgdGhhdCB3ZSBkZXRlY3QgYmVmb3JlIElPRXJyb3Igb3IKLSAgICBPU0Vycm9yIGNvdWxkIGJlIHJhaXNlZC4iIiIKKyAgICBUeXBpY2FsbHkgdGhpcyBpcyBmb3IgcHJvYmxlbXMgdGhhdCB3ZSBkZXRlY3QgYmVmb3JlIE9TRXJyb3IKKyAgICBjb3VsZCBiZSByYWlzZWQuIiIiCiAgICAgcGFzcwogCiBjbGFzcyBEaXN0dXRpbHNPcHRpb25FcnJvciAoRGlzdHV0aWxzRXJyb3IpOgpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9maWxlX3V0aWwucHkgYi9MaWIvZGlzdHV0aWxzL2ZpbGVfdXRpbC5weQppbmRleCA5YmRkMTRlLi5iM2ZlZTM1IDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2ZpbGVfdXRpbC5weQorKysgYi9MaWIvZGlzdHV0aWxzL2ZpbGVfdXRpbC5weQpAQCAtMjcsMjYgKzI3LDI2IEBACiAgICAgdHJ5OgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmc3JjID0gb3BlbihzcmMsICdyYicpCi0gICAgICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBlOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgcmFpc2UgRGlzdHV0aWxzRmlsZUVycm9yKCJjb3VsZCBub3Qgb3BlbiAnJXMnOiAlcyIgJSAoc3JjLCBlLnN0cmVycm9yKSkKIAogICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhkc3QpOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIG9zLnVubGluayhkc3QpCi0gICAgICAgICAgICBleGNlcHQgb3MuZXJyb3IgYXMgZToKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICAgICAgcmFpc2UgRGlzdHV0aWxzRmlsZUVycm9yKAogICAgICAgICAgICAgICAgICAgICAgICJjb3VsZCBub3QgZGVsZXRlICclcyc6ICVzIiAlIChkc3QsIGUuc3RyZXJyb3IpKQogCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGZkc3QgPSBvcGVuKGRzdCwgJ3diJykKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yIGFzIGU6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICByYWlzZSBEaXN0dXRpbHNGaWxlRXJyb3IoCiAgICAgICAgICAgICAgICAgICAiY291bGQgbm90IGNyZWF0ZSAnJXMnOiAlcyIgJSAoZHN0LCBlLnN0cmVycm9yKSkKIAogICAgICAgICB3aGlsZSBUcnVlOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGJ1ZiA9IGZzcmMucmVhZChidWZmZXJfc2l6ZSkKLSAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBlOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgICAgICByYWlzZSBEaXN0dXRpbHNGaWxlRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgICAgImNvdWxkIG5vdCByZWFkIGZyb20gJyVzJzogJXMiICUgKHNyYywgZS5zdHJlcnJvcikpCiAKQEAgLTU1LDcgKzU1LDcgQEAKIAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGZkc3Qud3JpdGUoYnVmKQotICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yIGFzIGU6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgICAgIHJhaXNlIERpc3R1dGlsc0ZpbGVFcnJvcigKICAgICAgICAgICAgICAgICAgICAgICAiY291bGQgbm90IHdyaXRlIHRvICclcyc6ICVzIiAlIChkc3QsIGUuc3RyZXJyb3IpKQogICAgIGZpbmFsbHk6CkBAIC04MCw3ICs4MCw4IEBACiAgICAgKG9zLnN5bWxpbmspIGluc3RlYWQgb2YgY29weWluZzogc2V0IGl0IHRvICJoYXJkIiBvciAic3ltIjsgaWYgaXQgaXMKICAgICBOb25lICh0aGUgZGVmYXVsdCksIGZpbGVzIGFyZSBjb3BpZWQuICBEb24ndCBzZXQgJ2xpbmsnIG9uIHN5c3RlbXMgdGhhdAogICAgIGRvbid0IHN1cHBvcnQgaXQ6ICdjb3B5X2ZpbGUoKScgZG9lc24ndCBjaGVjayBpZiBoYXJkIG9yIHN5bWJvbGljCi0gICAgbGlua2luZyBpcyBhdmFpbGFibGUuCisgICAgbGlua2luZyBpcyBhdmFpbGFibGUuIElmIGhhcmRsaW5rIGZhaWxzLCBmYWxscyBiYWNrIHRvCisgICAgX2NvcHlfZmlsZV9jb250ZW50cygpLgogCiAgICAgVW5kZXIgTWFjIE9TLCB1c2VzIHRoZSBuYXRpdmUgZmlsZSBjb3B5IGZ1bmN0aW9uIGluIG1hY29zdG9vbHM7IG9uCiAgICAgb3RoZXIgc3lzdGVtcywgdXNlcyAnX2NvcHlfZmlsZV9jb250ZW50cygpJyB0byBjb3B5IGZpbGUgY29udGVudHMuCkBAIC0xMzIsMjQgKzEzMywzMSBAQAogICAgICMgKFVuaXggb25seSwgb2YgY291cnNlLCBidXQgdGhhdCdzIHRoZSBjYWxsZXIncyByZXNwb25zaWJpbGl0eSkKICAgICBlbGlmIGxpbmsgPT0gJ2hhcmQnOgogICAgICAgICBpZiBub3QgKG9zLnBhdGguZXhpc3RzKGRzdCkgYW5kIG9zLnBhdGguc2FtZWZpbGUoc3JjLCBkc3QpKToKLSAgICAgICAgICAgIG9zLmxpbmsoc3JjLCBkc3QpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgb3MubGluayhzcmMsIGRzdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gKGRzdCwgMSkKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgICMgSWYgaGFyZCBsaW5raW5nIGZhaWxzLCBmYWxsIGJhY2sgb24gY29weWluZyBmaWxlCisgICAgICAgICAgICAgICAgIyAoc29tZSBzcGVjaWFsIGZpbGVzeXN0ZW1zIGRvbid0IHN1cHBvcnQgaGFyZCBsaW5raW5nCisgICAgICAgICAgICAgICAgIyAgZXZlbiB1bmRlciBVbml4LCBzZWUgaXNzdWUgIzg4NzYpLgorICAgICAgICAgICAgICAgIHBhc3MKICAgICBlbGlmIGxpbmsgPT0gJ3N5bSc6CiAgICAgICAgIGlmIG5vdCAob3MucGF0aC5leGlzdHMoZHN0KSBhbmQgb3MucGF0aC5zYW1lZmlsZShzcmMsIGRzdCkpOgogICAgICAgICAgICAgb3Muc3ltbGluayhzcmMsIGRzdCkKKyAgICAgICAgICAgIHJldHVybiAoZHN0LCAxKQogCiAgICAgIyBPdGhlcndpc2UgKG5vbi1NYWMsIG5vdCBsaW5raW5nKSwgY29weSB0aGUgZmlsZSBjb250ZW50cyBhbmQKICAgICAjIChvcHRpb25hbGx5KSBjb3B5IHRoZSB0aW1lcyBhbmQgbW9kZS4KLSAgICBlbHNlOgotICAgICAgICBfY29weV9maWxlX2NvbnRlbnRzKHNyYywgZHN0KQotICAgICAgICBpZiBwcmVzZXJ2ZV9tb2RlIG9yIHByZXNlcnZlX3RpbWVzOgotICAgICAgICAgICAgc3QgPSBvcy5zdGF0KHNyYykKKyAgICBfY29weV9maWxlX2NvbnRlbnRzKHNyYywgZHN0KQorICAgIGlmIHByZXNlcnZlX21vZGUgb3IgcHJlc2VydmVfdGltZXM6CisgICAgICAgIHN0ID0gb3Muc3RhdChzcmMpCiAKLSAgICAgICAgICAgICMgQWNjb3JkaW5nIHRvIERhdmlkIEFzY2hlciA8ZGFAc2tpLm9yZz4sIHV0aW1lKCkgc2hvdWxkIGJlIGRvbmUKLSAgICAgICAgICAgICMgYmVmb3JlIGNobW9kKCkgKGF0IGxlYXN0IHVuZGVyIE5UKS4KLSAgICAgICAgICAgIGlmIHByZXNlcnZlX3RpbWVzOgotICAgICAgICAgICAgICAgIG9zLnV0aW1lKGRzdCwgKHN0W1NUX0FUSU1FXSwgc3RbU1RfTVRJTUVdKSkKLSAgICAgICAgICAgIGlmIHByZXNlcnZlX21vZGU6Ci0gICAgICAgICAgICAgICAgb3MuY2htb2QoZHN0LCBTX0lNT0RFKHN0W1NUX01PREVdKSkKKyAgICAgICAgIyBBY2NvcmRpbmcgdG8gRGF2aWQgQXNjaGVyIDxkYUBza2kub3JnPiwgdXRpbWUoKSBzaG91bGQgYmUgZG9uZQorICAgICAgICAjIGJlZm9yZSBjaG1vZCgpIChhdCBsZWFzdCB1bmRlciBOVCkuCisgICAgICAgIGlmIHByZXNlcnZlX3RpbWVzOgorICAgICAgICAgICAgb3MudXRpbWUoZHN0LCAoc3RbU1RfQVRJTUVdLCBzdFtTVF9NVElNRV0pKQorICAgICAgICBpZiBwcmVzZXJ2ZV9tb2RlOgorICAgICAgICAgICAgb3MuY2htb2QoZHN0LCBTX0lNT0RFKHN0W1NUX01PREVdKSkKIAogICAgIHJldHVybiAoZHN0LCAxKQogCkBAIC0xOTMsOCArMjAxLDggQEAKICAgICBjb3B5X2l0ID0gRmFsc2UKICAgICB0cnk6CiAgICAgICAgIG9zLnJlbmFtZShzcmMsIGRzdCkKLSAgICBleGNlcHQgb3MuZXJyb3IgYXMgZToKLSAgICAgICAgKG51bSwgbXNnKSA9IGUKKyAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAobnVtLCBtc2cpID0gZS5hcmdzCiAgICAgICAgIGlmIG51bSA9PSBlcnJuby5FWERFVjoKICAgICAgICAgICAgIGNvcHlfaXQgPSBUcnVlCiAgICAgICAgIGVsc2U6CkBAIC0yMDUsMTEgKzIxMywxMSBAQAogICAgICAgICBjb3B5X2ZpbGUoc3JjLCBkc3QsIHZlcmJvc2U9dmVyYm9zZSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgb3MudW5saW5rKHNyYykKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yIGFzIGU6Ci0gICAgICAgICAgICAobnVtLCBtc2cpID0gZQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgKG51bSwgbXNnKSA9IGUuYXJncwogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIG9zLnVubGluayhkc3QpCi0gICAgICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICByYWlzZSBEaXN0dXRpbHNGaWxlRXJyb3IoCiAgICAgICAgICAgICAgICAgICAiY291bGRuJ3QgbW92ZSAnJXMnIHRvICclcycgYnkgY29weS9kZWxldGU6ICIKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvbXN2Yzljb21waWxlci5weSBiL0xpYi9kaXN0dXRpbHMvbXN2Yzljb21waWxlci5weQppbmRleCBiM2Y2Y2UxLi5hNWE1MDEwIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL21zdmM5Y29tcGlsZXIucHkKKysrIGIvTGliL2Rpc3R1dGlscy9tc3ZjOWNvbXBpbGVyLnB5CkBAIC00MTMsNyArNDEzLDcgQEAKICAgICAgICAgc2VsZi5sZGZsYWdzX3NoYXJlZCA9IFsnL0RMTCcsICcvbm9sb2dvJywgJy9JTkNSRU1FTlRBTDpOTyddCiAgICAgICAgIGlmIHNlbGYuX192ZXJzaW9uID49IDc6CiAgICAgICAgICAgICBzZWxmLmxkZmxhZ3Nfc2hhcmVkX2RlYnVnID0gWwotICAgICAgICAgICAgICAgICcvRExMJywgJy9ub2xvZ28nLCAnL0lOQ1JFTUVOVEFMOm5vJywgJy9ERUJVRycsICcvcGRiOk5vbmUnCisgICAgICAgICAgICAgICAgJy9ETEwnLCAnL25vbG9nbycsICcvSU5DUkVNRU5UQUw6bm8nLCAnL0RFQlVHJwogICAgICAgICAgICAgICAgIF0KICAgICAgICAgc2VsZi5sZGZsYWdzX3N0YXRpYyA9IFsgJy9ub2xvZ28nXQogCkBAIC03MjksNyArNzI5LDcgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gbWFuaWZlc3RfZmlsZQogICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICBtYW5pZmVzdF9mLmNsb3NlKCkKLSAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcGFzcwogCiAgICAgIyAtLSBNaXNjZWxsYW5lb3VzIG1ldGhvZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvc3Bhd24ucHkgYi9MaWIvZGlzdHV0aWxzL3NwYXduLnB5CmluZGV4IGY2NmZmOTMuLjIyZTg3ZTggMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvc3Bhd24ucHkKKysrIGIvTGliL2Rpc3R1dGlscy9zcGF3bi5weQpAQCAtMzYsOCArMzYsNiBAQAogICAgICAgICBfc3Bhd25fcG9zaXgoY21kLCBzZWFyY2hfcGF0aCwgZHJ5X3J1bj1kcnlfcnVuKQogICAgIGVsaWYgb3MubmFtZSA9PSAnbnQnOgogICAgICAgICBfc3Bhd25fbnQoY21kLCBzZWFyY2hfcGF0aCwgZHJ5X3J1bj1kcnlfcnVuKQotICAgIGVsaWYgb3MubmFtZSA9PSAnb3MyJzoKLSAgICAgICAgX3NwYXduX29zMihjbWQsIHNlYXJjaF9wYXRoLCBkcnlfcnVuPWRyeV9ydW4pCiAgICAgZWxzZToKICAgICAgICAgcmFpc2UgRGlzdHV0aWxzUGxhdGZvcm1FcnJvcigKICAgICAgICAgICAgICAgImRvbid0IGtub3cgaG93IHRvIHNwYXduIHByb2dyYW1zIG9uIHBsYXRmb3JtICclcyciICUgb3MubmFtZSkKQEAgLTgyLDMwICs4MCw2IEBACiAgICAgICAgICAgICByYWlzZSBEaXN0dXRpbHNFeGVjRXJyb3IoCiAgICAgICAgICAgICAgICAgICAiY29tbWFuZCAlciBmYWlsZWQgd2l0aCBleGl0IHN0YXR1cyAlZCIgJSAoY21kLCByYykpCiAKLWRlZiBfc3Bhd25fb3MyKGNtZCwgc2VhcmNoX3BhdGg9MSwgdmVyYm9zZT0wLCBkcnlfcnVuPTApOgotICAgIGV4ZWN1dGFibGUgPSBjbWRbMF0KLSAgICBpZiBzZWFyY2hfcGF0aDoKLSAgICAgICAgIyBlaXRoZXIgd2UgZmluZCBvbmUgb3IgaXQgc3RheXMgdGhlIHNhbWUKLSAgICAgICAgZXhlY3V0YWJsZSA9IGZpbmRfZXhlY3V0YWJsZShleGVjdXRhYmxlKSBvciBleGVjdXRhYmxlCi0gICAgbG9nLmluZm8oJyAnLmpvaW4oW2V4ZWN1dGFibGVdICsgY21kWzE6XSkpCi0gICAgaWYgbm90IGRyeV9ydW46Ci0gICAgICAgICMgc3Bhd252IGZvciBPUy8yIEVNWCByZXF1aXJlcyBhIGZ1bGwgcGF0aCB0byB0aGUgLmV4ZQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICByYyA9IG9zLnNwYXdudihvcy5QX1dBSVQsIGV4ZWN1dGFibGUsIGNtZCkKLSAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOgotICAgICAgICAgICAgIyB0aGlzIHNlZW1zIHRvIGhhcHBlbiB3aGVuIHRoZSBjb21tYW5kIGlzbid0IGZvdW5kCi0gICAgICAgICAgICBpZiBub3QgREVCVUc6Ci0gICAgICAgICAgICAgICAgY21kID0gZXhlY3V0YWJsZQotICAgICAgICAgICAgcmFpc2UgRGlzdHV0aWxzRXhlY0Vycm9yKAotICAgICAgICAgICAgICAgICAgImNvbW1hbmQgJXIgZmFpbGVkOiAlcyIgJSAoY21kLCBleGMuYXJnc1stMV0pKQotICAgICAgICBpZiByYyAhPSAwOgotICAgICAgICAgICAgIyBhbmQgdGhpcyByZWZsZWN0cyB0aGUgY29tbWFuZCBydW5uaW5nIGJ1dCBmYWlsaW5nCi0gICAgICAgICAgICBpZiBub3QgREVCVUc6Ci0gICAgICAgICAgICAgICAgY21kID0gZXhlY3V0YWJsZQotICAgICAgICAgICAgbG9nLmRlYnVnKCJjb21tYW5kICVyIGZhaWxlZCB3aXRoIGV4aXQgc3RhdHVzICVkIiAlIChjbWQsIHJjKSkKLSAgICAgICAgICAgIHJhaXNlIERpc3R1dGlsc0V4ZWNFcnJvcigKLSAgICAgICAgICAgICAgICAgICJjb21tYW5kICVyIGZhaWxlZCB3aXRoIGV4aXQgc3RhdHVzICVkIiAlIChjbWQsIHJjKSkKLQogaWYgc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nOgogICAgIGZyb20gZGlzdHV0aWxzIGltcG9ydCBzeXNjb25maWcKICAgICBfY2ZnX3RhcmdldCA9IE5vbmUKQEAgLTIwNyw3ICsxODEsNyBAQAogICAgIHBhdGhzID0gcGF0aC5zcGxpdChvcy5wYXRoc2VwKQogICAgIGJhc2UsIGV4dCA9IG9zLnBhdGguc3BsaXRleHQoZXhlY3V0YWJsZSkKIAotICAgIGlmIChzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJyBvciBvcy5uYW1lID09ICdvczInKSBhbmQgKGV4dCAhPSAnLmV4ZScpOgorICAgIGlmIChzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJykgYW5kIChleHQgIT0gJy5leGUnKToKICAgICAgICAgZXhlY3V0YWJsZSA9IGV4ZWN1dGFibGUgKyAnLmV4ZScKIAogICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShleGVjdXRhYmxlKToKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvc3lzY29uZmlnLnB5IGIvTGliL2Rpc3R1dGlscy9zeXNjb25maWcucHkKaW5kZXggYjk0Nzk4OC4uYTE0NTJmZSAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy9zeXNjb25maWcucHkKKysrIGIvTGliL2Rpc3R1dGlscy9zeXNjb25maWcucHkKQEAgLTExNCw4ICsxMTQsNiBAQAogICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHByZWZpeCwgImluY2x1ZGUiLCBweXRob25fZGlyKQogICAgIGVsaWYgb3MubmFtZSA9PSAibnQiOgogICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHByZWZpeCwgImluY2x1ZGUiKQotICAgIGVsaWYgb3MubmFtZSA9PSAib3MyIjoKLSAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihwcmVmaXgsICJJbmNsdWRlIikKICAgICBlbHNlOgogICAgICAgICByYWlzZSBEaXN0dXRpbHNQbGF0Zm9ybUVycm9yKAogICAgICAgICAgICAgIkkgZG9uJ3Qga25vdyB3aGVyZSBQeXRob24gaW5zdGFsbHMgaXRzIEMgaGVhZGVyIGZpbGVzICIKQEAgLTE1MywxNCArMTUxLDYgQEAKICAgICAgICAgaWYgc3RhbmRhcmRfbGliOgogICAgICAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihwcmVmaXgsICJMaWIiKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgaWYgZ2V0X3B5dGhvbl92ZXJzaW9uKCkgPCAiMi4yIjoKLSAgICAgICAgICAgICAgICByZXR1cm4gcHJlZml4Ci0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4ocHJlZml4LCAiTGliIiwgInNpdGUtcGFja2FnZXMiKQotICAgIGVsaWYgb3MubmFtZSA9PSAib3MyIjoKLSAgICAgICAgaWYgc3RhbmRhcmRfbGliOgotICAgICAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihwcmVmaXgsICJMaWIiKQotICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihwcmVmaXgsICJMaWIiLCAic2l0ZS1wYWNrYWdlcyIpCiAgICAgZWxzZToKICAgICAgICAgcmFpc2UgRGlzdHV0aWxzUGxhdGZvcm1FcnJvcigKQEAgLTE4Niw3ICsxNzYsOCBAQAogICAgICAgICAgICAgIyB2ZXJzaW9uIGFuZCBidWlsZCB0b29scyBtYXkgbm90IHN1cHBvcnQgdGhlIHNhbWUgc2V0CiAgICAgICAgICAgICAjIG9mIENQVSBhcmNoaXRlY3R1cmVzIGZvciB1bml2ZXJzYWwgYnVpbGRzLgogICAgICAgICAgICAgZ2xvYmFsIF9jb25maWdfdmFycwotICAgICAgICAgICAgaWYgbm90IF9jb25maWdfdmFycy5nZXQoJ0NVU1RPTUlaRURfT1NYX0NPTVBJTEVSJywgJycpOgorICAgICAgICAgICAgIyBVc2UgZ2V0X2NvbmZpZ192YXIoKSB0byBlbnN1cmUgX2NvbmZpZ192YXJzIGlzIGluaXRpYWxpemVkLgorICAgICAgICAgICAgaWYgbm90IGdldF9jb25maWdfdmFyKCdDVVNUT01JWkVEX09TWF9DT01QSUxFUicpOgogICAgICAgICAgICAgICAgIGltcG9ydCBfb3N4X3N1cHBvcnQKICAgICAgICAgICAgICAgICBfb3N4X3N1cHBvcnQuY3VzdG9taXplX2NvbXBpbGVyKF9jb25maWdfdmFycykKICAgICAgICAgICAgICAgICBfY29uZmlnX3ZhcnNbJ0NVU1RPTUlaRURfT1NYX0NPTVBJTEVSJ10gPSAnVHJ1ZScKQEAgLTI1MCwxMiArMjQxLDggQEAKICAgICAgICAgICAgIGluY19kaXIgPSBfc3lzX2hvbWUgb3IgcHJvamVjdF9iYXNlCiAgICAgZWxzZToKICAgICAgICAgaW5jX2RpciA9IGdldF9weXRob25faW5jKHBsYXRfc3BlY2lmaWM9MSkKLSAgICBpZiBnZXRfcHl0aG9uX3ZlcnNpb24oKSA8ICcyLjInOgotICAgICAgICBjb25maWdfaCA9ICdjb25maWcuaCcKLSAgICBlbHNlOgotICAgICAgICAjIFRoZSBuYW1lIG9mIHRoZSBjb25maWcuaCBmaWxlIGNoYW5nZWQgaW4gMi4yCi0gICAgICAgIGNvbmZpZ19oID0gJ3B5Y29uZmlnLmgnCi0gICAgcmV0dXJuIG9zLnBhdGguam9pbihpbmNfZGlyLCBjb25maWdfaCkKKworICAgIHJldHVybiBvcy5wYXRoLmpvaW4oaW5jX2RpciwgJ3B5Y29uZmlnLmgnKQogCiAKIGRlZiBnZXRfbWFrZWZpbGVfZmlsZW5hbWUoKToKQEAgLTQ0Miw3ICs0MjksNyBAQAogICAgIHRyeToKICAgICAgICAgZmlsZW5hbWUgPSBnZXRfbWFrZWZpbGVfZmlsZW5hbWUoKQogICAgICAgICBwYXJzZV9tYWtlZmlsZShmaWxlbmFtZSwgZykKLSAgICBleGNlcHQgSU9FcnJvciBhcyBtc2c6CisgICAgZXhjZXB0IE9TRXJyb3IgYXMgbXNnOgogICAgICAgICBteV9tc2cgPSAiaW52YWxpZCBQeXRob24gaW5zdGFsbGF0aW9uOiB1bmFibGUgdG8gb3BlbiAlcyIgJSBmaWxlbmFtZQogICAgICAgICBpZiBoYXNhdHRyKG1zZywgInN0cmVycm9yIik6CiAgICAgICAgICAgICBteV9tc2cgPSBteV9tc2cgKyAiICglcykiICUgbXNnLnN0cmVycm9yCkBAIC00NTQsNyArNDQxLDcgQEAKICAgICAgICAgZmlsZW5hbWUgPSBnZXRfY29uZmlnX2hfZmlsZW5hbWUoKQogICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUpIGFzIGZpbGU6CiAgICAgICAgICAgICBwYXJzZV9jb25maWdfaChmaWxlLCBnKQotICAgIGV4Y2VwdCBJT0Vycm9yIGFzIG1zZzoKKyAgICBleGNlcHQgT1NFcnJvciBhcyBtc2c6CiAgICAgICAgIG15X21zZyA9ICJpbnZhbGlkIFB5dGhvbiBpbnN0YWxsYXRpb246IHVuYWJsZSB0byBvcGVuICVzIiAlIGZpbGVuYW1lCiAgICAgICAgIGlmIGhhc2F0dHIobXNnLCAic3RyZXJyb3IiKToKICAgICAgICAgICAgIG15X21zZyA9IG15X21zZyArICIgKCVzKSIgJSBtc2cuc3RyZXJyb3IKQEAgLTQ2NywxNyArNDU0LDYgQEAKICAgICBpZiBweXRob25fYnVpbGQ6CiAgICAgICAgIGdbJ0xEU0hBUkVEJ10gPSBnWydCTERTSEFSRUQnXQogCi0gICAgZWxpZiBnZXRfcHl0aG9uX3ZlcnNpb24oKSA8ICcyLjEnOgotICAgICAgICAjIFRoZSBmb2xsb3dpbmcgdHdvIGJyYW5jaGVzIGFyZSBmb3IgMS41LjIgY29tcGF0aWJpbGl0eS4KLSAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICdhaXg0JzogICAgICAgICAgIyB3aGF0IGFib3V0IEFJWCAzLnggPwotICAgICAgICAgICAgIyBMaW5rZXIgc2NyaXB0IGlzIGluIHRoZSBjb25maWcgZGlyZWN0b3J5LCBub3QgaW4gTW9kdWxlcyBhcyB0aGUKLSAgICAgICAgICAgICMgTWFrZWZpbGUgc2F5cy4KLSAgICAgICAgICAgIHB5dGhvbl9saWIgPSBnZXRfcHl0aG9uX2xpYihzdGFuZGFyZF9saWI9MSkKLSAgICAgICAgICAgIGxkX3NvX2FpeCA9IG9zLnBhdGguam9pbihweXRob25fbGliLCAnY29uZmlnJywgJ2xkX3NvX2FpeCcpCi0gICAgICAgICAgICBweXRob25fZXhwID0gb3MucGF0aC5qb2luKHB5dGhvbl9saWIsICdjb25maWcnLCAncHl0aG9uLmV4cCcpCi0KLSAgICAgICAgICAgIGdbJ0xEU0hBUkVEJ10gPSAiJXMgJXMgLWJJOiVzIiAlIChsZF9zb19haXgsIGdbJ0NDJ10sIHB5dGhvbl9leHApCi0KICAgICBnbG9iYWwgX2NvbmZpZ192YXJzCiAgICAgX2NvbmZpZ192YXJzID0gZwogCkBAIC00OTIsNyArNDY4LDYgQEAKICAgICAjIFhYWCBobW1tLi4gYSBub3JtYWwgaW5zdGFsbCBwdXRzIGluY2x1ZGUgZmlsZXMgaGVyZQogICAgIGdbJ0lOQ0xVREVQWSddID0gZ2V0X3B5dGhvbl9pbmMocGxhdF9zcGVjaWZpYz0wKQogCi0gICAgZ1snU08nXSA9ICcucHlkJwogICAgIGdbJ0VYVF9TVUZGSVgnXSA9ICcucHlkJwogICAgIGdbJ0VYRSddID0gIi5leGUiCiAgICAgZ1snVkVSU0lPTiddID0gZ2V0X3B5dGhvbl92ZXJzaW9uKCkucmVwbGFjZSgiLiIsICIiKQpAQCAtNTAyLDI0ICs0NzcsNiBAQAogICAgIF9jb25maWdfdmFycyA9IGcKIAogCi1kZWYgX2luaXRfb3MyKCk6Ci0gICAgIiIiSW5pdGlhbGl6ZSB0aGUgbW9kdWxlIGFzIGFwcHJvcHJpYXRlIGZvciBPUy8yIiIiCi0gICAgZyA9IHt9Ci0gICAgIyBzZXQgYmFzaWMgaW5zdGFsbCBkaXJlY3RvcmllcwotICAgIGdbJ0xJQkRFU1QnXSA9IGdldF9weXRob25fbGliKHBsYXRfc3BlY2lmaWM9MCwgc3RhbmRhcmRfbGliPTEpCi0gICAgZ1snQklOTElCREVTVCddID0gZ2V0X3B5dGhvbl9saWIocGxhdF9zcGVjaWZpYz0xLCBzdGFuZGFyZF9saWI9MSkKLQotICAgICMgWFhYIGhtbW0uLiBhIG5vcm1hbCBpbnN0YWxsIHB1dHMgaW5jbHVkZSBmaWxlcyBoZXJlCi0gICAgZ1snSU5DTFVERVBZJ10gPSBnZXRfcHl0aG9uX2luYyhwbGF0X3NwZWNpZmljPTApCi0KLSAgICBnWydTTyddID0gJy5weWQnCi0gICAgZ1snRVhUX1NVRkZJWCddID0gJy5weWQnCi0gICAgZ1snRVhFJ10gPSAiLmV4ZSIKLQotICAgIGdsb2JhbCBfY29uZmlnX3ZhcnMKLSAgICBfY29uZmlnX3ZhcnMgPSBnCi0KLQogZGVmIGdldF9jb25maWdfdmFycygqYXJncyk6CiAgICAgIiIiV2l0aCBubyBhcmd1bWVudHMsIHJldHVybiBhIGRpY3Rpb25hcnkgb2YgYWxsIGNvbmZpZ3VyYXRpb24KICAgICB2YXJpYWJsZXMgcmVsZXZhbnQgZm9yIHRoZSBjdXJyZW50IHBsYXRmb3JtLiAgR2VuZXJhbGx5IHRoaXMgaW5jbHVkZXMKQEAgLTU0NCw2ICs1MDEsMTEgQEAKICAgICAgICAgX2NvbmZpZ192YXJzWydwcmVmaXgnXSA9IFBSRUZJWAogICAgICAgICBfY29uZmlnX3ZhcnNbJ2V4ZWNfcHJlZml4J10gPSBFWEVDX1BSRUZJWAogCisgICAgICAgICMgRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIHNlZSBpc3N1ZTE5NTU1CisgICAgICAgIFNPID0gX2NvbmZpZ192YXJzLmdldCgnRVhUX1NVRkZJWCcpCisgICAgICAgIGlmIFNPIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgX2NvbmZpZ192YXJzWydTTyddID0gU08KKwogICAgICAgICAjIEFsd2F5cyBjb252ZXJ0IHNyY2RpciB0byBhbiBhYnNvbHV0ZSBwYXRoCiAgICAgICAgIHNyY2RpciA9IF9jb25maWdfdmFycy5nZXQoJ3NyY2RpcicsIHByb2plY3RfYmFzZSkKICAgICAgICAgaWYgb3MubmFtZSA9PSAncG9zaXgnOgpAQCAtNTk0LDQgKzU1Niw3IEBACiAgICAgcmV0dXJuZWQgYnkgJ2dldF9jb25maWdfdmFycygpJy4gIEVxdWl2YWxlbnQgdG8KICAgICBnZXRfY29uZmlnX3ZhcnMoKS5nZXQobmFtZSkKICAgICAiIiIKKyAgICBpZiBuYW1lID09ICdTTyc6CisgICAgICAgIGltcG9ydCB3YXJuaW5ncworICAgICAgICB3YXJuaW5ncy53YXJuKCdTTyBpcyBkZXByZWNhdGVkLCB1c2UgRVhUX1NVRkZJWCcsIERlcHJlY2F0aW9uV2FybmluZywgMikKICAgICByZXR1cm4gZ2V0X2NvbmZpZ192YXJzKCkuZ2V0KG5hbWUpCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfYXJjaGl2ZV91dGlsLnB5IGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2FyY2hpdmVfdXRpbC5weQppbmRleCBkM2ZiMjRhLi4yZDcyYWY0IDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfYXJjaGl2ZV91dGlsLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9hcmNoaXZlX3V0aWwucHkKQEAgLTE2LDYgKzE2LDEzIEBACiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgY2hlY2tfd2FybmluZ3MsIHJ1bl91bml0dGVzdCwgcGF0Y2gKIAogdHJ5OgorICAgIGltcG9ydCBncnAKKyAgICBpbXBvcnQgcHdkCisgICAgVUlEX0dJRF9TVVBQT1JUID0gVHJ1ZQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIFVJRF9HSURfU1VQUE9SVCA9IEZhbHNlCisKK3RyeToKICAgICBpbXBvcnQgemlwZmlsZQogICAgIFpJUF9TVVBQT1JUID0gVHJ1ZQogZXhjZXB0IEltcG9ydEVycm9yOgpAQCAtNzcsNyArODQsNyBAQAogCiAgICAgICAgIHRtcGRpcjIgPSBzZWxmLm1rZHRlbXAoKQogICAgICAgICB1bml0dGVzdC5za2lwVW5sZXNzKHNwbGl0ZHJpdmUodG1wZGlyKVswXSA9PSBzcGxpdGRyaXZlKHRtcGRpcjIpWzBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTb3VyY2UgYW5kIHRhcmdldCBzaG91bGQgYmUgb24gc2FtZSBkcml2ZSIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSBhbmQgdGFyZ2V0IHNob3VsZCBiZSBvbiBzYW1lIGRyaXZlIikKIAogICAgICAgICBiYXNlX25hbWUgPSBvcy5wYXRoLmpvaW4odG1wZGlyMiwgdGFyZ2V0X25hbWUpCiAKQEAgLTI3NSw2ICsyODIsNTggQEAKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIGRlbCBBUkNISVZFX0ZPUk1BVFNbJ3h4eCddCiAKKyAgICBkZWYgdGVzdF9tYWtlX2FyY2hpdmVfb3duZXJfZ3JvdXAoc2VsZik6CisgICAgICAgICMgdGVzdGluZyBtYWtlX2FyY2hpdmUgd2l0aCBvd25lciBhbmQgZ3JvdXAsIHdpdGggdmFyaW91cyBjb21iaW5hdGlvbnMKKyAgICAgICAgIyB0aGlzIHdvcmtzIGV2ZW4gaWYgdGhlcmUncyBub3QgZ2lkL3VpZCBzdXBwb3J0CisgICAgICAgIGlmIFVJRF9HSURfU1VQUE9SVDoKKyAgICAgICAgICAgIGdyb3VwID0gZ3JwLmdldGdyZ2lkKDApWzBdCisgICAgICAgICAgICBvd25lciA9IHB3ZC5nZXRwd3VpZCgwKVswXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZ3JvdXAgPSBvd25lciA9ICdyb290JworCisgICAgICAgIGJhc2VfZGlyLCByb290X2RpciwgYmFzZV9uYW1lID0gIHNlbGYuX2NyZWF0ZV9maWxlcygpCisgICAgICAgIGJhc2VfbmFtZSA9IG9zLnBhdGguam9pbihzZWxmLm1rZHRlbXAoKSAsICdhcmNoaXZlJykKKyAgICAgICAgcmVzID0gbWFrZV9hcmNoaXZlKGJhc2VfbmFtZSwgJ3ppcCcsIHJvb3RfZGlyLCBiYXNlX2Rpciwgb3duZXI9b3duZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cD1ncm91cCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHJlcykpCisKKyAgICAgICAgcmVzID0gbWFrZV9hcmNoaXZlKGJhc2VfbmFtZSwgJ3ppcCcsIHJvb3RfZGlyLCBiYXNlX2RpcikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHJlcykpCisKKyAgICAgICAgcmVzID0gbWFrZV9hcmNoaXZlKGJhc2VfbmFtZSwgJ3RhcicsIHJvb3RfZGlyLCBiYXNlX2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG93bmVyPW93bmVyLCBncm91cD1ncm91cCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHJlcykpCisKKyAgICAgICAgcmVzID0gbWFrZV9hcmNoaXZlKGJhc2VfbmFtZSwgJ3RhcicsIHJvb3RfZGlyLCBiYXNlX2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG93bmVyPSdramhramhramcnLCBncm91cD0nb2lob2hvaCcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhyZXMpKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoWkxJQl9TVVBQT1JULCAiUmVxdWlyZXMgemxpYiIpCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoVUlEX0dJRF9TVVBQT1JULCAiUmVxdWlyZXMgZ3JwIGFuZCBwd2Qgc3VwcG9ydCIpCisgICAgZGVmIHRlc3RfdGFyZmlsZV9yb290X293bmVyKHNlbGYpOgorICAgICAgICB0bXBkaXIsIHRtcGRpcjIsIGJhc2VfbmFtZSA9ICBzZWxmLl9jcmVhdGVfZmlsZXMoKQorICAgICAgICBvbGRfZGlyID0gb3MuZ2V0Y3dkKCkKKyAgICAgICAgb3MuY2hkaXIodG1wZGlyKQorICAgICAgICBncm91cCA9IGdycC5nZXRncmdpZCgwKVswXQorICAgICAgICBvd25lciA9IHB3ZC5nZXRwd3VpZCgwKVswXQorICAgICAgICB0cnk6CisgICAgICAgICAgICBhcmNoaXZlX25hbWUgPSBtYWtlX3RhcmJhbGwoYmFzZV9uYW1lLCAnZGlzdCcsIGNvbXByZXNzPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3duZXI9b3duZXIsIGdyb3VwPWdyb3VwKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MuY2hkaXIob2xkX2RpcikKKworICAgICAgICAjIGNoZWNrIGlmIHRoZSBjb21wcmVzc2VkIHRhcmJhbGwgd2FzIGNyZWF0ZWQKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKGFyY2hpdmVfbmFtZSkpCisKKyAgICAgICAgIyBub3cgY2hlY2tzIHRoZSByaWdodHMKKyAgICAgICAgYXJjaGl2ZSA9IHRhcmZpbGUub3BlbihhcmNoaXZlX25hbWUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZvciBtZW1iZXIgaW4gYXJjaGl2ZS5nZXRtZW1iZXJzKCk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1iZXIudWlkLCAwKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtYmVyLmdpZCwgMCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGFyY2hpdmUuY2xvc2UoKQorCiBkZWYgdGVzdF9zdWl0ZSgpOgogICAgIHJldHVybiB1bml0dGVzdC5tYWtlU3VpdGUoQXJjaGl2ZVV0aWxUZXN0Q2FzZSkKIApkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2JkaXN0X2R1bWIucHkgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfYmRpc3RfZHVtYi5weQppbmRleCAwYWQzMmQ0Li5jOGNjZGMyIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfYmRpc3RfZHVtYi5weQorKysgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfYmRpc3RfZHVtYi5weQpAQCAtMSw3ICsxLDYgQEAKICIiIlRlc3RzIGZvciBkaXN0dXRpbHMuY29tbWFuZC5iZGlzdF9kdW1iLiIiIgogCiBpbXBvcnQgb3MKLWltcG9ydCBpbXAKIGltcG9ydCBzeXMKIGltcG9ydCB6aXBmaWxlCiBpbXBvcnQgdW5pdHRlc3QKQEAgLTc1LDggKzc0LDYgQEAKICAgICAgICAgIyBzZWUgd2hhdCB3ZSBoYXZlCiAgICAgICAgIGRpc3RfY3JlYXRlZCA9IG9zLmxpc3RkaXIob3MucGF0aC5qb2luKHBrZ19kaXIsICdkaXN0JykpCiAgICAgICAgIGJhc2UgPSAiJXMuJXMuemlwIiAlIChkaXN0LmdldF9mdWxsbmFtZSgpLCBjbWQucGxhdF9uYW1lKQotICAgICAgICBpZiBvcy5uYW1lID09ICdvczInOgotICAgICAgICAgICAgYmFzZSA9IGJhc2UucmVwbGFjZSgnOicsICctJykKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpc3RfY3JlYXRlZCwgW2Jhc2VdKQogCkBAIC05MCw3ICs4Nyw3IEBACiAgICAgICAgIGNvbnRlbnRzID0gc29ydGVkKG9zLnBhdGguYmFzZW5hbWUoZm4pIGZvciBmbiBpbiBjb250ZW50cykKICAgICAgICAgd2FudGVkID0gWydmb28tMC4xLXB5JXMuJXMuZWdnLWluZm8nICUgc3lzLnZlcnNpb25faW5mb1s6Ml0sICdmb28ucHknXQogICAgICAgICBpZiBub3Qgc3lzLmRvbnRfd3JpdGVfYnl0ZWNvZGU6Ci0gICAgICAgICAgICB3YW50ZWQuYXBwZW5kKCdmb28uJXMucHljJyAlIGltcC5nZXRfdGFnKCkpCisgICAgICAgICAgICB3YW50ZWQuYXBwZW5kKCdmb28uJXMucHljJyAlIHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWcpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29udGVudHMsIHNvcnRlZCh3YW50ZWQpKQogCiBkZWYgdGVzdF9zdWl0ZSgpOgpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2JkaXN0X3JwbS5weSBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9iZGlzdF9ycG0ucHkKaW5kZXggYmNiYjU2My4uMjVjMTRhYiAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2JkaXN0X3JwbS5weQorKysgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfYmRpc3RfcnBtLnB5CkBAIC0yNCw2ICsyNCw3IEBACiAiIiIKIAogY2xhc3MgQnVpbGRScG1UZXN0Q2FzZShzdXBwb3J0LlRlbXBkaXJNYW5hZ2VyLAorICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0LkVudmlyb25HdWFyZCwKICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydC5Mb2dnaW5nU2lsZW5jZXIsCiAgICAgICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlKToKIApAQCAtNTQsNiArNTUsNyBAQAogICAgIGRlZiB0ZXN0X3F1aWV0KHNlbGYpOgogICAgICAgICAjIGxldCdzIGNyZWF0ZSBhIHBhY2thZ2UKICAgICAgICAgdG1wX2RpciA9IHNlbGYubWtkdGVtcCgpCisgICAgICAgIG9zLmVudmlyb25bJ0hPTUUnXSA9IHRtcF9kaXIgICAjIHRvIGNvbmZpbmUgZGlyICcucnBtZGInIGNyZWF0aW9uCiAgICAgICAgIHBrZ19kaXIgPSBvcy5wYXRoLmpvaW4odG1wX2RpciwgJ2ZvbycpCiAgICAgICAgIG9zLm1rZGlyKHBrZ19kaXIpCiAgICAgICAgIHNlbGYud3JpdGVfZmlsZSgocGtnX2RpciwgJ3NldHVwLnB5JyksIFNFVFVQX1BZKQpAQCAtOTYsNiArOTgsNyBAQAogICAgIGRlZiB0ZXN0X25vX29wdGltaXplX2ZsYWcoc2VsZik6CiAgICAgICAgICMgbGV0J3MgY3JlYXRlIGEgcGFja2FnZSB0aGF0IGJyYWtlcyBiZGlzdF9ycG0KICAgICAgICAgdG1wX2RpciA9IHNlbGYubWtkdGVtcCgpCisgICAgICAgIG9zLmVudmlyb25bJ0hPTUUnXSA9IHRtcF9kaXIgICAjIHRvIGNvbmZpbmUgZGlyICcucnBtZGInIGNyZWF0aW9uCiAgICAgICAgIHBrZ19kaXIgPSBvcy5wYXRoLmpvaW4odG1wX2RpciwgJ2ZvbycpCiAgICAgICAgIG9zLm1rZGlyKHBrZ19kaXIpCiAgICAgICAgIHNlbGYud3JpdGVfZmlsZSgocGtnX2RpciwgJ3NldHVwLnB5JyksIFNFVFVQX1BZKQpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2J1aWxkX2V4dC5weSBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9idWlsZF9leHQucHkKaW5kZXggOTg1M2FiZC4uYjlmNDA3ZiAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2J1aWxkX2V4dC5weQorKysgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfYnVpbGRfZXh0LnB5CkBAIC0zMSwxMiArMzEsMTEgQEAKICAgICAgICAgc2VsZi50bXBfZGlyID0gc2VsZi5ta2R0ZW1wKCkKICAgICAgICAgc2VsZi5zeXNfcGF0aCA9IHN5cy5wYXRoLCBzeXMucGF0aFs6XQogICAgICAgICBzeXMucGF0aC5hcHBlbmQoc2VsZi50bXBfZGlyKQotICAgICAgICBpZiBzeXMudmVyc2lvbiA+ICIyLjYiOgotICAgICAgICAgICAgaW1wb3J0IHNpdGUKLSAgICAgICAgICAgIHNlbGYub2xkX3VzZXJfYmFzZSA9IHNpdGUuVVNFUl9CQVNFCi0gICAgICAgICAgICBzaXRlLlVTRVJfQkFTRSA9IHNlbGYubWtkdGVtcCgpCi0gICAgICAgICAgICBmcm9tIGRpc3R1dGlscy5jb21tYW5kIGltcG9ydCBidWlsZF9leHQKLSAgICAgICAgICAgIGJ1aWxkX2V4dC5VU0VSX0JBU0UgPSBzaXRlLlVTRVJfQkFTRQorICAgICAgICBpbXBvcnQgc2l0ZQorICAgICAgICBzZWxmLm9sZF91c2VyX2Jhc2UgPSBzaXRlLlVTRVJfQkFTRQorICAgICAgICBzaXRlLlVTRVJfQkFTRSA9IHNlbGYubWtkdGVtcCgpCisgICAgICAgIGZyb20gZGlzdHV0aWxzLmNvbW1hbmQgaW1wb3J0IGJ1aWxkX2V4dAorICAgICAgICBidWlsZF9leHQuVVNFUl9CQVNFID0gc2l0ZS5VU0VSX0JBU0UKIAogICAgIGRlZiB0ZXN0X2J1aWxkX2V4dChzZWxmKToKICAgICAgICAgZ2xvYmFsIEFMUkVBRFlfVEVTVEVECkBAIC04NCwxMSArODMsMTAgQEAKICAgICAgICAgc3VwcG9ydC51bmxvYWQoJ3h4JykKICAgICAgICAgc3lzLnBhdGggPSBzZWxmLnN5c19wYXRoWzBdCiAgICAgICAgIHN5cy5wYXRoWzpdID0gc2VsZi5zeXNfcGF0aFsxXQotICAgICAgICBpZiBzeXMudmVyc2lvbiA+ICIyLjYiOgotICAgICAgICAgICAgaW1wb3J0IHNpdGUKLSAgICAgICAgICAgIHNpdGUuVVNFUl9CQVNFID0gc2VsZi5vbGRfdXNlcl9iYXNlCi0gICAgICAgICAgICBmcm9tIGRpc3R1dGlscy5jb21tYW5kIGltcG9ydCBidWlsZF9leHQKLSAgICAgICAgICAgIGJ1aWxkX2V4dC5VU0VSX0JBU0UgPSBzZWxmLm9sZF91c2VyX2Jhc2UKKyAgICAgICAgaW1wb3J0IHNpdGUKKyAgICAgICAgc2l0ZS5VU0VSX0JBU0UgPSBzZWxmLm9sZF91c2VyX2Jhc2UKKyAgICAgICAgZnJvbSBkaXN0dXRpbHMuY29tbWFuZCBpbXBvcnQgYnVpbGRfZXh0CisgICAgICAgIGJ1aWxkX2V4dC5VU0VSX0JBU0UgPSBzZWxmLm9sZF91c2VyX2Jhc2UKICAgICAgICAgc3VwZXIoQnVpbGRFeHRUZXN0Q2FzZSwgc2VsZikudGVhckRvd24oKQogCiAgICAgZGVmIHRlc3Rfc29sYXJpc19lbmFibGVfc2hhcmVkKHNlbGYpOgpAQCAtNDQ0LDggKzQ0MiwxNiBAQAogCiAgICAgICAgICMgZ2V0IHRoZSBkZXBsb3ltZW50IHRhcmdldCB0aGF0IHRoZSBpbnRlcnByZXRlciB3YXMgYnVpbHQgd2l0aAogICAgICAgICB0YXJnZXQgPSBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCcpCi0gICAgICAgIHRhcmdldCA9IHR1cGxlKG1hcChpbnQsIHRhcmdldC5zcGxpdCgnLicpKSkKLSAgICAgICAgdGFyZ2V0ID0gJyUwMmQlMDFkMCcgJSB0YXJnZXQKKyAgICAgICAgdGFyZ2V0ID0gdHVwbGUobWFwKGludCwgdGFyZ2V0LnNwbGl0KCcuJylbMDoyXSkpCisgICAgICAgICMgZm9ybWF0IHRoZSB0YXJnZXQgdmFsdWUgYXMgZGVmaW5lZCBpbiB0aGUgQXBwbGUKKyAgICAgICAgIyBBdmFpbGFiaWxpdHkgTWFjcm9zLiAgV2UgY2FuJ3QgdXNlIHRoZSBtYWNybyBuYW1lcyBzaW5jZQorICAgICAgICAjIGF0IGxlYXN0IG9uZSB2YWx1ZSB3ZSB0ZXN0IHdpdGggd2lsbCBub3QgZXhpc3QgeWV0LgorICAgICAgICBpZiB0YXJnZXRbMV0gPCAxMDoKKyAgICAgICAgICAgICMgZm9yIDEwLjEgdGhyb3VnaCAxMC45LnggLT4gIjEwbjAiCisgICAgICAgICAgICB0YXJnZXQgPSAnJTAyZCUwMWQwJyAlIHRhcmdldAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBmb3IgMTAuMTAgYW5kIGJleW9uZCAtPiAiMTBubjAwIgorICAgICAgICAgICAgdGFyZ2V0ID0gJyUwMmQlMDJkMDAnICUgdGFyZ2V0CiAgICAgICAgIGRlcHRhcmdldF9leHQgPSBFeHRlbnNpb24oCiAgICAgICAgICAgICAnZGVwdGFyZ2V0JywKICAgICAgICAgICAgIFtkZXB0YXJnZXRfY10sCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfYnVpbGRfcHkucHkgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfYnVpbGRfcHkucHkKaW5kZXggMmNlOWQ0NC4uYzhmNmI4OSAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2J1aWxkX3B5LnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9idWlsZF9weS5weQpAQCAtMiw3ICsyLDYgQEAKIAogaW1wb3J0IG9zCiBpbXBvcnQgc3lzCi1pbXBvcnQgaW1wCiBpbXBvcnQgdW5pdHRlc3QKIAogZnJvbSBkaXN0dXRpbHMuY29tbWFuZC5idWlsZF9weSBpbXBvcnQgYnVpbGRfcHkKQEAgLTYzLDcgKzYyLDggQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5leGlzdHMocHljYWNoZV9kaXIpKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcHljX2ZpbGVzID0gb3MubGlzdGRpcihweWNhY2hlX2RpcikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oIl9faW5pdF9fLiVzLnB5YyIgJSBpbXAuZ2V0X3RhZygpLCBweWNfZmlsZXMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCJfX2luaXRfXy4lcy5weWMiICUgc3lzLmltcGxlbWVudGF0aW9uLmNhY2hlX3RhZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcHljX2ZpbGVzKQogCiAgICAgZGVmIHRlc3RfZW1wdHlfcGFja2FnZV9kaXIoc2VsZik6CiAgICAgICAgICMgU2VlIGJ1Z3MgIzE2Njg1OTYvIzE3MjA4OTcKQEAgLTEwMiw3ICsxMDIsOCBAQAogICAgICAgICBmb3VuZCA9IG9zLmxpc3RkaXIoY21kLmJ1aWxkX2xpYikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQoZm91bmQpLCBbJ19fcHljYWNoZV9fJywgJ2JvaWxlZGVnZ3MucHknXSkKICAgICAgICAgZm91bmQgPSBvcy5saXN0ZGlyKG9zLnBhdGguam9pbihjbWQuYnVpbGRfbGliLCAnX19weWNhY2hlX18nKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3VuZCwgWydib2lsZWRlZ2dzLiVzLnB5YycgJSBpbXAuZ2V0X3RhZygpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3VuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbJ2JvaWxlZGVnZ3MuJXMucHljJyAlIHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWddKQogCiAgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMuZG9udF93cml0ZV9ieXRlY29kZSwgJ2J5dGUtY29tcGlsZSBkaXNhYmxlZCcpCiAgICAgZGVmIHRlc3RfYnl0ZV9jb21waWxlX29wdGltaXplZChzZWxmKToKQEAgLTExOSw3ICsxMjAsOCBAQAogICAgICAgICBmb3VuZCA9IG9zLmxpc3RkaXIoY21kLmJ1aWxkX2xpYikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQoZm91bmQpLCBbJ19fcHljYWNoZV9fJywgJ2JvaWxlZGVnZ3MucHknXSkKICAgICAgICAgZm91bmQgPSBvcy5saXN0ZGlyKG9zLnBhdGguam9pbihjbWQuYnVpbGRfbGliLCAnX19weWNhY2hlX18nKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQoZm91bmQpLCBbJ2JvaWxlZGVnZ3MuJXMucHlvJyAlIGltcC5nZXRfdGFnKCldKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChmb3VuZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgWydib2lsZWRlZ2dzLiVzLnB5bycgJSBzeXMuaW1wbGVtZW50YXRpb24uY2FjaGVfdGFnXSkKIAogICAgIGRlZiB0ZXN0X2Rpcl9pbl9wYWNrYWdlX2RhdGEoc2VsZik6CiAgICAgICAgICIiIgpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2NoZWNrLnB5IGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2NoZWNrLnB5CmluZGV4IDYwMWI2ODYuLjk1OWZhOTAgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9jaGVjay5weQorKysgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfY2hlY2sucHkKQEAgLTEsNCArMSw1IEBACiAiIiJUZXN0cyBmb3IgZGlzdHV0aWxzLmNvbW1hbmQuY2hlY2suIiIiCitpbXBvcnQgdGV4dHdyYXAKIGltcG9ydCB1bml0dGVzdAogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAogCkBAIC05Miw2ICs5MywzNiBAQAogICAgICAgICBjbWQgPSBzZWxmLl9ydW4obWV0YWRhdGEsIHN0cmljdD0xLCByZXN0cnVjdHVyZWR0ZXh0PTEpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21kLl93YXJuaW5ncywgMCkKIAorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKEhBU19ET0NVVElMUywgIndvbid0IHRlc3Qgd2l0aG91dCBkb2N1dGlscyIpCisgICAgZGVmIHRlc3RfY2hlY2tfcmVzdHJ1Y3R1cmVkdGV4dF93aXRoX3N5bnRheF9oaWdobGlnaHQoc2VsZik6CisgICAgICAgICMgRG9uJ3QgZmFpbCBpZiB0aGVyZSBpcyBhIGBjb2RlYCBvciBgY29kZS1ibG9ja2AgZGlyZWN0aXZlCisKKyAgICAgICAgZXhhbXBsZV9yc3RfZG9jcyA9IFtdCisgICAgICAgIGV4YW1wbGVfcnN0X2RvY3MuYXBwZW5kKHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBIZXJlJ3Mgc29tZSBjb2RlOgorCisgICAgICAgICAgICAuLiBjb2RlOjogcHl0aG9uCisKKyAgICAgICAgICAgICAgICBkZWYgZm9vKCk6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICIiIikpCisgICAgICAgIGV4YW1wbGVfcnN0X2RvY3MuYXBwZW5kKHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBIZXJlJ3Mgc29tZSBjb2RlOgorCisgICAgICAgICAgICAuLiBjb2RlLWJsb2NrOjogcHl0aG9uCisKKyAgICAgICAgICAgICAgICBkZWYgZm9vKCk6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICIiIikpCisKKyAgICAgICAgZm9yIHJlc3Rfd2l0aF9jb2RlIGluIGV4YW1wbGVfcnN0X2RvY3M6CisgICAgICAgICAgICBwa2dfaW5mbywgZGlzdCA9IHNlbGYuY3JlYXRlX2Rpc3QobG9uZ19kZXNjcmlwdGlvbj1yZXN0X3dpdGhfY29kZSkKKyAgICAgICAgICAgIGNtZCA9IGNoZWNrKGRpc3QpCisgICAgICAgICAgICBjbWQuY2hlY2tfcmVzdHJ1Y3R1cmVkdGV4dCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtZC5fd2FybmluZ3MsIDApCisgICAgICAgICAgICBtc2dzID0gY21kLl9jaGVja19yc3RfZGF0YShyZXN0X3dpdGhfY29kZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG1zZ3MpLCAwKQorCiAgICAgZGVmIHRlc3RfY2hlY2tfYWxsKHNlbGYpOgogCiAgICAgICAgIG1ldGFkYXRhID0geyd1cmwnOiAneHh4JywgJ2F1dGhvcic6ICd4eHgnfQpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2NvcmUucHkgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfY29yZS5weQppbmRleCA0MTMyMWY3Li42NTQyMjdjIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfY29yZS5weQorKysgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfY29yZS5weQpAQCAtOSw2ICs5LDcgQEAKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBjYXB0dXJlZF9zdGRvdXQsIHJ1bl91bml0dGVzdAogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIGRpc3R1dGlscy50ZXN0cyBpbXBvcnQgc3VwcG9ydAorZnJvbSBkaXN0dXRpbHMgaW1wb3J0IGxvZwogCiAjIHNldHVwIHNjcmlwdCB0aGF0IHVzZXMgX19maWxlX18KIHNldHVwX3VzaW5nX19fZmlsZV9fID0gIiIiXApAQCAtMzYsNiArMzcsNyBAQAogICAgICAgICBzZWxmLm9sZF9zdGRvdXQgPSBzeXMuc3Rkb3V0CiAgICAgICAgIHNlbGYuY2xlYW51cF90ZXN0Zm4oKQogICAgICAgICBzZWxmLm9sZF9hcmd2ID0gc3lzLmFyZ3YsIHN5cy5hcmd2WzpdCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChsb2cuc2V0X3RocmVzaG9sZCwgbG9nLl9nbG9iYWxfbG9nLnRocmVzaG9sZCkKIAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKICAgICAgICAgc3lzLnN0ZG91dCA9IHNlbGYub2xkX3N0ZG91dApkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2Rpcl91dGlsLnB5IGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2Rpcl91dGlsLnB5CmluZGV4IDE1ODlmMTIuLmQ0MzZjZjggMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9kaXJfdXRpbC5weQorKysgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfZGlyX3V0aWwucHkKQEAgLTIsOSArMiwxMCBAQAogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgb3MKIGltcG9ydCBzdGF0Ci1pbXBvcnQgc2h1dGlsCiBpbXBvcnQgc3lzCitmcm9tIHVuaXR0ZXN0Lm1vY2sgaW1wb3J0IHBhdGNoCiAKK2Zyb20gZGlzdHV0aWxzIGltcG9ydCBkaXJfdXRpbCwgZXJyb3JzCiBmcm9tIGRpc3R1dGlscy5kaXJfdXRpbCBpbXBvcnQgKG1rcGF0aCwgcmVtb3ZlX3RyZWUsIGNyZWF0ZV90cmVlLCBjb3B5X3RyZWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuc3VyZV9yZWxhdGl2ZSkKIApAQCAtMTIsNiArMTMsNyBAQAogZnJvbSBkaXN0dXRpbHMudGVzdHMgaW1wb3J0IHN1cHBvcnQKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKIAorCiBjbGFzcyBEaXJVdGlsVGVzdENhc2Uoc3VwcG9ydC5UZW1wZGlyTWFuYWdlciwgdW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIF9sb2coc2VsZiwgbXNnLCAqYXJncyk6CkBAIC01Miw3ICs1NCw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fbG9ncywgd2FudGVkKQogCiAgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnd2luJyksCi0gICAgICAgICAgICAgICAgICAgICAgICAiVGhpcyB0ZXN0IGlzIG9ubHkgYXBwcm9wcmlhdGUgZm9yIFBPU0lYLWxpa2Ugc3lzdGVtcy4iKQorICAgICAgICAiVGhpcyB0ZXN0IGlzIG9ubHkgYXBwcm9wcmlhdGUgZm9yIFBPU0lYLWxpa2Ugc3lzdGVtcy4iKQogICAgIGRlZiB0ZXN0X21rcGF0aF93aXRoX2N1c3RvbV9tb2RlKHNlbGYpOgogICAgICAgICAjIEdldCBhbmQgc2V0IHRoZSBjdXJyZW50IHVtYXNrIHZhbHVlIGZvciB0ZXN0aW5nIG1vZGUgYml0cy4KICAgICAgICAgdW1hc2sgPSBvcy51bWFzaygwbzAwMikKQEAgLTEyMCw2ICsxMjIsMTYgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW5zdXJlX3JlbGF0aXZlKCdjOlxcaG9tZVxcZm9vJyksICdjOmhvbWVcXGZvbycpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVuc3VyZV9yZWxhdGl2ZSgnaG9tZVxcZm9vJyksICdob21lXFxmb28nKQogCisgICAgZGVmIHRlc3RfY29weV90cmVlX2V4Y2VwdGlvbl9pbl9saXN0ZGlyKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgQW4gZXhjZXB0aW9uIGluIGxpc3RkaXIgc2hvdWxkIHJhaXNlIGEgRGlzdHV0aWxzRmlsZUVycm9yCisgICAgICAgICIiIgorICAgICAgICB3aXRoIHBhdGNoKCJvcy5saXN0ZGlyIiwgc2lkZV9lZmZlY3Q9T1NFcnJvcigpKSwgXAorICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGVycm9ycy5EaXN0dXRpbHNGaWxlRXJyb3IpOgorICAgICAgICAgICAgc3JjID0gc2VsZi50ZW1wZGlyc1stMV0KKyAgICAgICAgICAgIGRpcl91dGlsLmNvcHlfdHJlZShzcmMsIE5vbmUpCisKKwogZGVmIHRlc3Rfc3VpdGUoKToKICAgICByZXR1cm4gdW5pdHRlc3QubWFrZVN1aXRlKERpclV0aWxUZXN0Q2FzZSkKIApkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2Rpc3QucHkgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfZGlzdC5weQppbmRleCA2MWFjNTdkLi4xZjEwNGNlIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfZGlzdC5weQorKysgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfZGlzdC5weQpAQCAtMTMsNiArMTMsNyBAQAogCiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgVEVTVEZOLCBjYXB0dXJlZF9zdGRvdXQsIHJ1bl91bml0dGVzdAogZnJvbSBkaXN0dXRpbHMudGVzdHMgaW1wb3J0IHN1cHBvcnQKK2Zyb20gZGlzdHV0aWxzIGltcG9ydCBsb2cKIAogCiBjbGFzcyB0ZXN0X2Rpc3QoQ29tbWFuZCk6CkBAIC0zOSw2ICs0MCw3IEBACiAKIAogY2xhc3MgRGlzdHJpYnV0aW9uVGVzdENhc2Uoc3VwcG9ydC5Mb2dnaW5nU2lsZW5jZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0LlRlbXBkaXJNYW5hZ2VyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydC5FbnZpcm9uR3VhcmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZSk6CiAKQEAgLTIxMyw2ICsyMTUsMzQgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZGlzdC5hbm5vdW5jZSwgYXJncywga3dhcmdzKQogCiAKKyAgICBkZWYgdGVzdF9maW5kX2NvbmZpZ19maWxlc19kaXNhYmxlKHNlbGYpOgorICAgICAgICAjIFRpY2tldCAjMTE4MDogQWxsb3cgdXNlciB0byBkaXNhYmxlIHRoZWlyIGhvbWUgY29uZmlnIGZpbGUuCisgICAgICAgIHRlbXBfaG9tZSA9IHNlbGYubWtkdGVtcCgpCisgICAgICAgIGlmIG9zLm5hbWUgPT0gJ3Bvc2l4JzoKKyAgICAgICAgICAgIHVzZXJfZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4odGVtcF9ob21lLCAiLnB5ZGlzdHV0aWxzLmNmZyIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB1c2VyX2ZpbGVuYW1lID0gb3MucGF0aC5qb2luKHRlbXBfaG9tZSwgInB5ZGlzdHV0aWxzLmNmZyIpCisKKyAgICAgICAgd2l0aCBvcGVuKHVzZXJfZmlsZW5hbWUsICd3JykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoJ1tkaXN0dXRpbHNdXG4nKQorCisgICAgICAgIGRlZiBfZXhwYW5kZXIocGF0aCk6CisgICAgICAgICAgICByZXR1cm4gdGVtcF9ob21lCisKKyAgICAgICAgb2xkX2V4cGFuZGVyID0gb3MucGF0aC5leHBhbmR1c2VyCisgICAgICAgIG9zLnBhdGguZXhwYW5kdXNlciA9IF9leHBhbmRlcgorICAgICAgICB0cnk6CisgICAgICAgICAgICBkID0gRGlzdHJpYnV0aW9uKCkKKyAgICAgICAgICAgIGFsbF9maWxlcyA9IGQuZmluZF9jb25maWdfZmlsZXMoKQorCisgICAgICAgICAgICBkID0gRGlzdHJpYnV0aW9uKGF0dHJzPXsnc2NyaXB0X2FyZ3MnOiBbJy0tbm8tdXNlci1jZmcnXX0pCisgICAgICAgICAgICBmaWxlcyA9IGQuZmluZF9jb25maWdfZmlsZXMoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MucGF0aC5leHBhbmR1c2VyID0gb2xkX2V4cGFuZGVyCisKKyAgICAgICAgIyBtYWtlIHN1cmUgLS1uby11c2VyLWNmZyBkaXNhYmxlcyB0aGUgdXNlciBjZmcgZmlsZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihhbGxfZmlsZXMpLTEsIGxlbihmaWxlcykpCisKIGNsYXNzIE1ldGFkYXRhVGVzdENhc2Uoc3VwcG9ydC5UZW1wZGlyTWFuYWdlciwgc3VwcG9ydC5FbnZpcm9uR3VhcmQsCiAgICAgICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlKToKIApAQCAtMzc2LDYgKzQwNiw3IEBACiAKICAgICBkZWYgdGVzdF9zaG93X2hlbHAoc2VsZik6CiAgICAgICAgICMgc21va2UgdGVzdCwganVzdCBtYWtlcyBzdXJlIHNvbWUgaGVscCBpcyBkaXNwbGF5ZWQKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGxvZy5zZXRfdGhyZXNob2xkLCBsb2cuX2dsb2JhbF9sb2cudGhyZXNob2xkKQogICAgICAgICBkaXN0ID0gRGlzdHJpYnV0aW9uKCkKICAgICAgICAgc3lzLmFyZ3YgPSBbXQogICAgICAgICBkaXN0LmhlbHAgPSAxCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfZmlsZV91dGlsLnB5IGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2ZpbGVfdXRpbC5weQppbmRleCAzYzNlM2RjLi5hNmQwNGYwIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfZmlsZV91dGlsLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9maWxlX3V0aWwucHkKQEAgLTIsMTAgKzIsMTMgQEAKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IG9zCiBpbXBvcnQgc2h1dGlsCitpbXBvcnQgZXJybm8KK2Zyb20gdW5pdHRlc3QubW9jayBpbXBvcnQgcGF0Y2gKIAotZnJvbSBkaXN0dXRpbHMuZmlsZV91dGlsIGltcG9ydCBtb3ZlX2ZpbGUKK2Zyb20gZGlzdHV0aWxzLmZpbGVfdXRpbCBpbXBvcnQgbW92ZV9maWxlLCBjb3B5X2ZpbGUKIGZyb20gZGlzdHV0aWxzIGltcG9ydCBsb2cKIGZyb20gZGlzdHV0aWxzLnRlc3RzIGltcG9ydCBzdXBwb3J0Citmcm9tIGRpc3R1dGlscy5lcnJvcnMgaW1wb3J0IERpc3R1dGlsc0ZpbGVFcnJvcgogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAogCiBjbGFzcyBGaWxlVXRpbFRlc3RDYXNlKHN1cHBvcnQuVGVtcGRpck1hbmFnZXIsIHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTU4LDYgKzYxLDUyIEBACiAgICAgICAgIHdhbnRlZCA9IFsnbW92aW5nICVzIC0+ICVzJyAlIChzZWxmLnNvdXJjZSwgc2VsZi50YXJnZXRfZGlyKV0KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9sb2dzLCB3YW50ZWQpCiAKKyAgICBkZWYgdGVzdF9tb3ZlX2ZpbGVfZXhjZXB0aW9uX3VucGFja2luZ19yZW5hbWUoc2VsZik6CisgICAgICAgICMgc2VlIGlzc3VlIDIyMTgyCisgICAgICAgIHdpdGggcGF0Y2goIm9zLnJlbmFtZSIsIHNpZGVfZWZmZWN0PU9TRXJyb3IoIndyb25nIiwgMSkpLCBcCisgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRGlzdHV0aWxzRmlsZUVycm9yKToKKyAgICAgICAgICAgIHdpdGggb3BlbihzZWxmLnNvdXJjZSwgJ3cnKSBhcyBmb2JqOgorICAgICAgICAgICAgICAgIGZvYmoud3JpdGUoJ3NwYW0gZWdncycpCisgICAgICAgICAgICBtb3ZlX2ZpbGUoc2VsZi5zb3VyY2UsIHNlbGYudGFyZ2V0LCB2ZXJib3NlPTApCisKKyAgICBkZWYgdGVzdF9tb3ZlX2ZpbGVfZXhjZXB0aW9uX3VucGFja2luZ191bmxpbmsoc2VsZik6CisgICAgICAgICMgc2VlIGlzc3VlIDIyMTgyCisgICAgICAgIHdpdGggcGF0Y2goIm9zLnJlbmFtZSIsIHNpZGVfZWZmZWN0PU9TRXJyb3IoZXJybm8uRVhERVYsICJ3cm9uZyIpKSwgXAorICAgICAgICAgICAgIHBhdGNoKCJvcy51bmxpbmsiLCBzaWRlX2VmZmVjdD1PU0Vycm9yKCJ3cm9uZyIsIDEpKSwgXAorICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKERpc3R1dGlsc0ZpbGVFcnJvcik6CisgICAgICAgICAgICB3aXRoIG9wZW4oc2VsZi5zb3VyY2UsICd3JykgYXMgZm9iajoKKyAgICAgICAgICAgICAgICBmb2JqLndyaXRlKCdzcGFtIGVnZ3MnKQorICAgICAgICAgICAgbW92ZV9maWxlKHNlbGYuc291cmNlLCBzZWxmLnRhcmdldCwgdmVyYm9zZT0wKQorCisgICAgZGVmIHRlc3RfY29weV9maWxlX2hhcmRfbGluayhzZWxmKToKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYuc291cmNlLCAndycpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKCdzb21lIGNvbnRlbnQnKQorICAgICAgICBzdCA9IG9zLnN0YXQoc2VsZi5zb3VyY2UpCisgICAgICAgIGNvcHlfZmlsZShzZWxmLnNvdXJjZSwgc2VsZi50YXJnZXQsIGxpbms9J2hhcmQnKQorICAgICAgICBzdDIgPSBvcy5zdGF0KHNlbGYuc291cmNlKQorICAgICAgICBzdDMgPSBvcy5zdGF0KHNlbGYudGFyZ2V0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5zYW1lc3RhdChzdCwgc3QyKSwgKHN0LCBzdDIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5zYW1lc3RhdChzdDIsIHN0MyksIChzdDIsIHN0MykpCisgICAgICAgIHdpdGggb3BlbihzZWxmLnNvdXJjZSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgJ3NvbWUgY29udGVudCcpCisKKyAgICBkZWYgdGVzdF9jb3B5X2ZpbGVfaGFyZF9saW5rX2ZhaWx1cmUoc2VsZik6CisgICAgICAgICMgSWYgaGFyZCBsaW5raW5nIGZhaWxzLCBjb3B5X2ZpbGUoKSBmYWxscyBiYWNrIG9uIGNvcHlpbmcgZmlsZQorICAgICAgICAjIChzb21lIHNwZWNpYWwgZmlsZXN5c3RlbXMgZG9uJ3Qgc3VwcG9ydCBoYXJkIGxpbmtpbmcgZXZlbiB1bmRlcgorICAgICAgICAjICBVbml4LCBzZWUgaXNzdWUgIzg4NzYpLgorICAgICAgICB3aXRoIG9wZW4oc2VsZi5zb3VyY2UsICd3JykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoJ3NvbWUgY29udGVudCcpCisgICAgICAgIHN0ID0gb3Muc3RhdChzZWxmLnNvdXJjZSkKKyAgICAgICAgd2l0aCBwYXRjaCgib3MubGluayIsIHNpZGVfZWZmZWN0PU9TRXJyb3IoMCwgImxpbmtpbmcgdW5zdXBwb3J0ZWQiKSk6CisgICAgICAgICAgICBjb3B5X2ZpbGUoc2VsZi5zb3VyY2UsIHNlbGYudGFyZ2V0LCBsaW5rPSdoYXJkJykKKyAgICAgICAgc3QyID0gb3Muc3RhdChzZWxmLnNvdXJjZSkKKyAgICAgICAgc3QzID0gb3Muc3RhdChzZWxmLnRhcmdldCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguc2FtZXN0YXQoc3QsIHN0MiksIChzdCwgc3QyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLnNhbWVzdGF0KHN0Miwgc3QzKSwgKHN0Miwgc3QzKSkKKyAgICAgICAgZm9yIGZuIGluIChzZWxmLnNvdXJjZSwgc2VsZi50YXJnZXQpOgorICAgICAgICAgICAgd2l0aCBvcGVuKGZuLCAncicpIGFzIGY6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgJ3NvbWUgY29udGVudCcpCisKIAogZGVmIHRlc3Rfc3VpdGUoKToKICAgICByZXR1cm4gdW5pdHRlc3QubWFrZVN1aXRlKEZpbGVVdGlsVGVzdENhc2UpCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfaW5zdGFsbC5weSBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9pbnN0YWxsLnB5CmluZGV4IGVkZTg4ZTUuLjE4ZTFlNTcgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9pbnN0YWxsLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9pbnN0YWxsLnB5CkBAIC0xLDcgKzEsNiBAQAogIiIiVGVzdHMgZm9yIGRpc3R1dGlscy5jb21tYW5kLmluc3RhbGwuIiIiCiAKIGltcG9ydCBvcwotaW1wb3J0IGltcAogaW1wb3J0IHN5cwogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgc2l0ZQpAQCAtOTQsNyArOTMsNyBAQAogCiAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChjbGVhbnVwKQogCi0gICAgICAgIGZvciBrZXkgaW4gKCdudF91c2VyJywgJ3VuaXhfdXNlcicsICdvczJfaG9tZScpOgorICAgICAgICBmb3Iga2V5IGluICgnbnRfdXNlcicsICd1bml4X3VzZXInKToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oa2V5LCBJTlNUQUxMX1NDSEVNRVMpCiAKICAgICAgICAgZGlzdCA9IERpc3RyaWJ1dGlvbih7J25hbWUnOiAneHgnfSkKQEAgLTE5Myw3ICsxOTIsOCBAQAogICAgICAgICAgICAgZi5jbG9zZSgpCiAKICAgICAgICAgZm91bmQgPSBbb3MucGF0aC5iYXNlbmFtZShsaW5lKSBmb3IgbGluZSBpbiBjb250ZW50LnNwbGl0bGluZXMoKV0KLSAgICAgICAgZXhwZWN0ZWQgPSBbJ2hlbGxvLnB5JywgJ2hlbGxvLiVzLnB5YycgJSBpbXAuZ2V0X3RhZygpLCAnc2F5aGknLAorICAgICAgICBleHBlY3RlZCA9IFsnaGVsbG8ucHknLCAnaGVsbG8uJXMucHljJyAlIHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWcsCisgICAgICAgICAgICAgICAgICAgICdzYXloaScsCiAgICAgICAgICAgICAgICAgICAgICdVTktOT1dOLTAuMC4wLXB5JXMuJXMuZWdnLWluZm8nICUgc3lzLnZlcnNpb25faW5mb1s6Ml1dCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm91bmQsIGV4cGVjdGVkKQogCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfaW5zdGFsbF9saWIucHkgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfaW5zdGFsbF9saWIucHkKaW5kZXggZDBkZmNhMC4uNDBkZDFhOSAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2luc3RhbGxfbGliLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9pbnN0YWxsX2xpYi5weQpAQCAtMSw3ICsxLDcgQEAKICIiIlRlc3RzIGZvciBkaXN0dXRpbHMuY29tbWFuZC5pbnN0YWxsX2RhdGEuIiIiCiBpbXBvcnQgc3lzCiBpbXBvcnQgb3MKLWltcG9ydCBpbXAKK2ltcG9ydCBpbXBvcnRsaWIudXRpbAogaW1wb3J0IHVuaXR0ZXN0CiAKIGZyb20gZGlzdHV0aWxzLmNvbW1hbmQuaW5zdGFsbF9saWIgaW1wb3J0IGluc3RhbGxfbGliCkBAIC00NCw4ICs0NCwxMCBAQAogICAgICAgICBmID0gb3MucGF0aC5qb2luKHByb2plY3RfZGlyLCAnZm9vLnB5JykKICAgICAgICAgc2VsZi53cml0ZV9maWxlKGYsICcjIHB5dGhvbiBmaWxlJykKICAgICAgICAgY21kLmJ5dGVfY29tcGlsZShbZl0pCi0gICAgICAgIHB5Y19maWxlID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKCdmb28ucHknLCBkZWJ1Z19vdmVycmlkZT1UcnVlKQotICAgICAgICBweW9fZmlsZSA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZSgnZm9vLnB5JywgZGVidWdfb3ZlcnJpZGU9RmFsc2UpCisgICAgICAgIHB5Y19maWxlID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoJ2Zvby5weScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdfb3ZlcnJpZGU9VHJ1ZSkKKyAgICAgICAgcHlvX2ZpbGUgPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZSgnZm9vLnB5JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z19vdmVycmlkZT1GYWxzZSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHB5Y19maWxlKSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHB5b19maWxlKSkKIApkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2xvZy5weSBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9sb2cucHkKaW5kZXggY2U2NmVlNS4uMGMyYWQ3YSAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2xvZy5weQorKysgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfbG9nLnB5CkBAIC0xNCw4ICsxNCw4IEBACiAgICAgICAgICMgZXJyb3IgaGFuZGxlcikKICAgICAgICAgb2xkX3N0ZG91dCA9IHN5cy5zdGRvdXQKICAgICAgICAgb2xkX3N0ZGVyciA9IHN5cy5zdGRlcnIKKyAgICAgICAgb2xkX3RocmVzaG9sZCA9IGxvZy5zZXRfdGhyZXNob2xkKGxvZy5ERUJVRykKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgbG9nLnNldF90aHJlc2hvbGQobG9nLkRFQlVHKQogICAgICAgICAgICAgd2l0aCBOYW1lZFRlbXBvcmFyeUZpbGUobW9kZT0idysiLCBlbmNvZGluZz0nYXNjaWknKSBhcyBzdGRvdXQsIFwKICAgICAgICAgICAgICAgICAgTmFtZWRUZW1wb3JhcnlGaWxlKG1vZGU9IncrIiwgZW5jb2Rpbmc9J2FzY2lpJykgYXMgc3RkZXJyOgogICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQgPSBzdGRvdXQKQEAgLTI3LDYgKzI3LDcgQEAKICAgICAgICAgICAgICAgICBzdGRlcnIuc2VlaygwKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RkZXJyLnJlYWQoKS5yc3RyaXAoKSwgImZhdGFsOlxceGU5IikKICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGxvZy5zZXRfdGhyZXNob2xkKG9sZF90aHJlc2hvbGQpCiAgICAgICAgICAgICBzeXMuc3Rkb3V0ID0gb2xkX3N0ZG91dAogICAgICAgICAgICAgc3lzLnN0ZGVyciA9IG9sZF9zdGRlcnIKIApkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X3NkaXN0LnB5IGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X3NkaXN0LnB5CmluZGV4IGM5NTI0MDYuLjVhMDRlMGQgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9zZGlzdC5weQorKysgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3Rfc2Rpc3QucHkKQEAgLTE0LDYgKzE0LDEyIEBACiBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgWkxJQl9TVVBQT1JUID0gRmFsc2UKIAordHJ5OgorICAgIGltcG9ydCBncnAKKyAgICBpbXBvcnQgcHdkCisgICAgVUlEX0dJRF9TVVBQT1JUID0gVHJ1ZQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIFVJRF9HSURfU1VQUE9SVCA9IEZhbHNlCiAKIGZyb20gZGlzdHV0aWxzLmNvbW1hbmQuc2Rpc3QgaW1wb3J0IHNkaXN0LCBzaG93X2Zvcm1hdHMKIGZyb20gZGlzdHV0aWxzLmNvcmUgaW1wb3J0IERpc3RyaWJ1dGlvbgpAQCAtNDIzLDYgKzQyOSw1NCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChmaWxlbmFtZXMpLCBbJ2Zha2UtMS4wJywgJ2Zha2UtMS4wL1BLRy1JTkZPJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmYWtlLTEuMC9SRUFETUUubWFudWFsJ10pCiAKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhaTElCX1NVUFBPUlQsICJyZXF1aXJlcyB6bGliIikKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhVSURfR0lEX1NVUFBPUlQsICJSZXF1aXJlcyBncnAgYW5kIHB3ZCBzdXBwb3J0IikKKyAgICBAdW5pdHRlc3Quc2tpcElmKGZpbmRfZXhlY3V0YWJsZSgndGFyJykgaXMgTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICJUaGUgdGFyIGNvbW1hbmQgaXMgbm90IGZvdW5kIikKKyAgICBAdW5pdHRlc3Quc2tpcElmKGZpbmRfZXhlY3V0YWJsZSgnZ3ppcCcpIGlzIE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAiVGhlIGd6aXAgY29tbWFuZCBpcyBub3QgZm91bmQiKQorICAgIGRlZiB0ZXN0X21ha2VfZGlzdHJpYnV0aW9uX293bmVyX2dyb3VwKHNlbGYpOgorICAgICAgICAjIG5vdyBidWlsZGluZyBhIHNkaXN0CisgICAgICAgIGRpc3QsIGNtZCA9IHNlbGYuZ2V0X2NtZCgpCisKKyAgICAgICAgIyBjcmVhdGluZyBhIGd6dGFyIGFuZCBzcGVjaWZ5aW5nIHRoZSBvd25lcitncm91cAorICAgICAgICBjbWQuZm9ybWF0cyA9IFsnZ3p0YXInXQorICAgICAgICBjbWQub3duZXIgPSBwd2QuZ2V0cHd1aWQoMClbMF0KKyAgICAgICAgY21kLmdyb3VwID0gZ3JwLmdldGdyZ2lkKDApWzBdCisgICAgICAgIGNtZC5lbnN1cmVfZmluYWxpemVkKCkKKyAgICAgICAgY21kLnJ1bigpCisKKyAgICAgICAgIyBtYWtpbmcgc3VyZSB3ZSBoYXZlIHRoZSBnb29kIHJpZ2h0cworICAgICAgICBhcmNoaXZlX25hbWUgPSBqb2luKHNlbGYudG1wX2RpciwgJ2Rpc3QnLCAnZmFrZS0xLjAudGFyLmd6JykKKyAgICAgICAgYXJjaGl2ZSA9IHRhcmZpbGUub3BlbihhcmNoaXZlX25hbWUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZvciBtZW1iZXIgaW4gYXJjaGl2ZS5nZXRtZW1iZXJzKCk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1iZXIudWlkLCAwKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtYmVyLmdpZCwgMCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGFyY2hpdmUuY2xvc2UoKQorCisgICAgICAgICMgYnVpbGRpbmcgYSBzZGlzdCBhZ2FpbgorICAgICAgICBkaXN0LCBjbWQgPSBzZWxmLmdldF9jbWQoKQorCisgICAgICAgICMgY3JlYXRpbmcgYSBnenRhcgorICAgICAgICBjbWQuZm9ybWF0cyA9IFsnZ3p0YXInXQorICAgICAgICBjbWQuZW5zdXJlX2ZpbmFsaXplZCgpCisgICAgICAgIGNtZC5ydW4oKQorCisgICAgICAgICMgbWFraW5nIHN1cmUgd2UgaGF2ZSB0aGUgZ29vZCByaWdodHMKKyAgICAgICAgYXJjaGl2ZV9uYW1lID0gam9pbihzZWxmLnRtcF9kaXIsICdkaXN0JywgJ2Zha2UtMS4wLnRhci5neicpCisgICAgICAgIGFyY2hpdmUgPSB0YXJmaWxlLm9wZW4oYXJjaGl2ZV9uYW1lKQorCisgICAgICAgICMgbm90ZSB0aGF0IHdlIGFyZSBub3QgdGVzdGluZyB0aGUgZ3JvdXAgb3duZXJzaGlwIGhlcmUKKyAgICAgICAgIyBiZWNhdXNlLCBkZXBlbmRpbmcgb24gdGhlIHBsYXRmb3JtcyBhbmQgdGhlIGNvbnRhaW5lcgorICAgICAgICAjIHJpZ2h0cyAoc2VlICM3NDA4KQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmb3IgbWVtYmVyIGluIGFyY2hpdmUuZ2V0bWVtYmVycygpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtYmVyLnVpZCwgb3MuZ2V0dWlkKCkpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBhcmNoaXZlLmNsb3NlKCkKKwogZGVmIHRlc3Rfc3VpdGUoKToKICAgICByZXR1cm4gdW5pdHRlc3QubWFrZVN1aXRlKFNEaXN0VGVzdENhc2UpCiAKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9zeXNjb25maWcucHkgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3Rfc3lzY29uZmlnLnB5CmluZGV4IGExY2I0N2QuLmZjNGQxZGUgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9zeXNjb25maWcucHkKKysrIGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X3N5c2NvbmZpZy5weQpAQCAtMSwxNiArMSwxNyBAQAogIiIiVGVzdHMgZm9yIGRpc3R1dGlscy5zeXNjb25maWcuIiIiCiBpbXBvcnQgb3MKIGltcG9ydCBzaHV0aWwKLWltcG9ydCB0ZXN0CitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHN5cworaW1wb3J0IHRleHR3cmFwCiBpbXBvcnQgdW5pdHRlc3QKIAogZnJvbSBkaXN0dXRpbHMgaW1wb3J0IHN5c2NvbmZpZwogZnJvbSBkaXN0dXRpbHMuY2NvbXBpbGVyIGltcG9ydCBnZXRfZGVmYXVsdF9jb21waWxlcgogZnJvbSBkaXN0dXRpbHMudGVzdHMgaW1wb3J0IHN1cHBvcnQKLWZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBURVNURk4sIHJ1bl91bml0dGVzdAorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IFRFU1RGTiwgcnVuX3VuaXR0ZXN0LCBjaGVja193YXJuaW5ncwogCi1jbGFzcyBTeXNjb25maWdUZXN0Q2FzZShzdXBwb3J0LkVudmlyb25HdWFyZCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlKToKK2NsYXNzIFN5c2NvbmZpZ1Rlc3RDYXNlKHN1cHBvcnQuRW52aXJvbkd1YXJkLCB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBzdXBlcihTeXNjb25maWdUZXN0Q2FzZSwgc2VsZikuc2V0VXAoKQogICAgICAgICBzZWxmLm1ha2VmaWxlID0gTm9uZQpAQCAtMzIsNyArMzMsNiBAQAogICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUoY29uZmlnX2gpLCBjb25maWdfaCkKIAogICAgIGRlZiB0ZXN0X2dldF9weXRob25fbGliKHNlbGYpOgotICAgICAgICBsaWJfZGlyID0gc3lzY29uZmlnLmdldF9weXRob25fbGliKCkKICAgICAgICAgIyBYWFggZG9lc24ndCB3b3JrIG9uIExpbnV4IHdoZW4gUHl0aG9uIHdhcyBuZXZlciBpbnN0YWxsZWQgYmVmb3JlCiAgICAgICAgICNzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2RpcihsaWJfZGlyKSwgbGliX2RpcikKICAgICAgICAgIyB0ZXN0IGZvciBweXRob254eC5saWI/CkBAIC02Nyw4ICs2Nyw5IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoUHl0aG9uX2gpLCBQeXRob25faCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzeXNjb25maWcuX2lzX3B5dGhvbl9zb3VyY2VfZGlyKHNyY2RpcikpCiAgICAgICAgIGVsaWYgb3MubmFtZSA9PSAncG9zaXgnOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5wYXRoLmRpcm5hbWUoc3lzY29uZmlnLmdldF9tYWtlZmlsZV9maWxlbmFtZSgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY2RpcikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgb3MucGF0aC5kaXJuYW1lKHN5c2NvbmZpZy5nZXRfbWFrZWZpbGVfZmlsZW5hbWUoKSksCisgICAgICAgICAgICAgICAgc3JjZGlyKQogCiAgICAgZGVmIHRlc3Rfc3JjZGlyX2luZGVwZW5kZW50X29mX2N3ZChzZWxmKToKICAgICAgICAgIyBzcmNkaXIgc2hvdWxkIGJlIGluZGVwZW5kZW50IG9mIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5CkBAIC0xMjYsMTAgKzEyNywxMyBAQAogCiAgICAgZGVmIHRlc3Rfc3lzY29uZmlnX21vZHVsZShzZWxmKToKICAgICAgICAgaW1wb3J0IHN5c2NvbmZpZyBhcyBnbG9iYWxfc3lzY29uZmlnCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2xvYmFsX3N5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignQ0ZMQUdTJyksIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignQ0ZMQUdTJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2xvYmFsX3N5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignTERGTEFHUycpLCBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ0xERkxBR1MnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnbG9iYWxfc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdDRkxBR1MnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ0NGTEFHUycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdsb2JhbF9zeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ0xERkxBR1MnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ0xERkxBR1MnKSkKIAotICAgIEB1bml0dGVzdC5za2lwSWYoc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdDVVNUT01JWkVEX09TWF9DT01QSUxFUicpLCdjb21waWxlciBmbGFncyBjdXN0b21pemVkJykKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignQ1VTVE9NSVpFRF9PU1hfQ09NUElMRVInKSwKKyAgICAgICAgICAgICAgICAgICAgICdjb21waWxlciBmbGFncyBjdXN0b21pemVkJykKICAgICBkZWYgdGVzdF9zeXNjb25maWdfY29tcGlsZXJfdmFycyhzZWxmKToKICAgICAgICAgIyBPbiBPUyBYLCBiaW5hcnkgaW5zdGFsbGVycyBzdXBwb3J0IGV4dGVuc2lvbiBtb2R1bGUgYnVpbGRpbmcgb24KICAgICAgICAgIyB2YXJpb3VzIGxldmVscyBvZiB0aGUgb3BlcmF0aW5nIHN5c3RlbSB3aXRoIGRpZmZlcmluZyBYY29kZQpAQCAtMTQ4LDkgKzE1Miw0OSBAQAogICAgICAgICBpbXBvcnQgc3lzY29uZmlnIGFzIGdsb2JhbF9zeXNjb25maWcKICAgICAgICAgaWYgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdDVVNUT01JWkVEX09TWF9DT01QSUxFUicpOgogICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgnY29tcGlsZXIgZmxhZ3MgY3VzdG9taXplZCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2xvYmFsX3N5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignTERTSEFSRUQnKSwgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdMRFNIQVJFRCcpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdsb2JhbF9zeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ0NDJyksIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignQ0MnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnbG9iYWxfc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdMRFNIQVJFRCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignTERTSEFSRUQnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnbG9iYWxfc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdDQycpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignQ0MnKSkKIAorICAgIEB1bml0dGVzdC5za2lwSWYoc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdFWFRfU1VGRklYJykgaXMgTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICdFWFRfU1VGRklYIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QnKQorICAgIGRlZiB0ZXN0X1NPX2RlcHJlY2F0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIsICdTTycpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignRVhUX1NVRkZJWCcpIGlzIE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAnRVhUX1NVRkZJWCByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0JykKKyAgICBkZWYgdGVzdF9TT192YWx1ZShzZWxmKToKKyAgICAgICAgd2l0aCBjaGVja193YXJuaW5ncygoJycsIERlcHJlY2F0aW9uV2FybmluZykpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ1NPJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignRVhUX1NVRkZJWCcpKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ0VYVF9TVUZGSVgnKSBpcyBOb25lLAorICAgICAgICAgICAgICAgICAgICAgJ0VYVF9TVUZGSVggcmVxdWlyZWQgZm9yIHRoaXMgdGVzdCcpCisgICAgZGVmIHRlc3RfU09faW5fdmFycyhzZWxmKToKKyAgICAgICAgdmFycyA9IHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcnMoKQorICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZSh2YXJzWydTTyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhcnNbJ1NPJ10sIHZhcnNbJ0VYVF9TVUZGSVgnXSkKKworICAgIGRlZiB0ZXN0X2N1c3RvbWl6ZV9jb21waWxlcl9iZWZvcmVfZ2V0X2NvbmZpZ192YXJzKHNlbGYpOgorICAgICAgICAjIElzc3VlICMyMTkyMzogdGVzdCB0aGF0IGEgRGlzdHJpYnV0aW9uIGNvbXBpbGVyCisgICAgICAgICMgaW5zdGFuY2UgY2FuIGJlIGNhbGxlZCB3aXRob3V0IGFuIGV4cGxpY2l0IGNhbGwgdG8KKyAgICAgICAgIyBnZXRfY29uZmlnX3ZhcnMoKS4KKyAgICAgICAgd2l0aCBvcGVuKFRFU1RGTiwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZWxpbmVzKHRleHR3cmFwLmRlZGVudCgnJydcCisgICAgICAgICAgICAgICAgZnJvbSBkaXN0dXRpbHMuY29yZSBpbXBvcnQgRGlzdHJpYnV0aW9uCisgICAgICAgICAgICAgICAgY29uZmlnID0gRGlzdHJpYnV0aW9uKCkuZ2V0X2NvbW1hbmRfb2JqKCdjb25maWcnKQorICAgICAgICAgICAgICAgICMgdHJ5X2NvbXBpbGUgbWF5IHBhc3Mgb3IgaXQgbWF5IGZhaWwgaWYgbm8gY29tcGlsZXIKKyAgICAgICAgICAgICAgICAjIGlzIGZvdW5kIGJ1dCBpdCBzaG91bGQgbm90IHJhaXNlIGFuIGV4Y2VwdGlvbi4KKyAgICAgICAgICAgICAgICByYyA9IGNvbmZpZy50cnlfY29tcGlsZSgnaW50IHg7JykKKyAgICAgICAgICAgICAgICAnJycpKQorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3RyKHN5cy5leGVjdXRhYmxlKSwgVEVTVEZOXSwKKyAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCwKKyAgICAgICAgICAgICAgICB1bml2ZXJzYWxfbmV3bGluZXM9VHJ1ZSkKKyAgICAgICAgb3V0cywgZXJycyA9IHAuY29tbXVuaWNhdGUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHAucmV0dXJuY29kZSwgIlN1YnByb2Nlc3MgZmFpbGVkOiAiICsgb3V0cykKIAogCiBkZWYgdGVzdF9zdWl0ZSgpOgpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X3VwbG9hZC5weSBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF91cGxvYWQucHkKaW5kZXggODUzMjM2OS4uZGNjYWY3NyAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X3VwbG9hZC5weQorKysgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfdXBsb2FkLnB5CkBAIC02LDYgKzYsNyBAQAogZnJvbSBkaXN0dXRpbHMuY29tbWFuZCBpbXBvcnQgdXBsb2FkIGFzIHVwbG9hZF9tb2QKIGZyb20gZGlzdHV0aWxzLmNvbW1hbmQudXBsb2FkIGltcG9ydCB1cGxvYWQKIGZyb20gZGlzdHV0aWxzLmNvcmUgaW1wb3J0IERpc3RyaWJ1dGlvbgorZnJvbSBkaXN0dXRpbHMuZXJyb3JzIGltcG9ydCBEaXN0dXRpbHNFcnJvcgogZnJvbSBkaXN0dXRpbHMubG9nIGltcG9ydCBJTkZPCiAKIGZyb20gZGlzdHV0aWxzLnRlc3RzLnRlc3RfY29uZmlnIGltcG9ydCBQWVBJUkMsIFB5UElSQ0NvbW1hbmRUZXN0Q2FzZQpAQCAtNDEsMTMgKzQyLDE0IEBACiAKIGNsYXNzIEZha2VPcGVuKG9iamVjdCk6CiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgdXJsKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdXJsLCBtc2c9Tm9uZSwgY29kZT1Ob25lKToKICAgICAgICAgc2VsZi51cmwgPSB1cmwKICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UodXJsLCBzdHIpOgogICAgICAgICAgICAgc2VsZi5yZXEgPSB1cmwKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYucmVxID0gTm9uZQotICAgICAgICBzZWxmLm1zZyA9ICdPSycKKyAgICAgICAgc2VsZi5tc2cgPSBtc2cgb3IgJ09LJworICAgICAgICBzZWxmLmNvZGUgPSBjb2RlIG9yIDIwMAogCiAgICAgZGVmIGdldGhlYWRlcihzZWxmLCBuYW1lLCBkZWZhdWx0PU5vbmUpOgogICAgICAgICByZXR1cm4gewpAQCAtNTgsNyArNjAsNyBAQAogICAgICAgICByZXR1cm4gYid4eXp6eScKIAogICAgIGRlZiBnZXRjb2RlKHNlbGYpOgotICAgICAgICByZXR1cm4gMjAwCisgICAgICAgIHJldHVybiBzZWxmLmNvZGUKIAogCiBjbGFzcyB1cGxvYWRUZXN0Q2FzZShQeVBJUkNDb21tYW5kVGVzdENhc2UpOgpAQCAtNjgsMTMgKzcwLDE1IEBACiAgICAgICAgIHNlbGYub2xkX29wZW4gPSB1cGxvYWRfbW9kLnVybG9wZW4KICAgICAgICAgdXBsb2FkX21vZC51cmxvcGVuID0gc2VsZi5fdXJsb3BlbgogICAgICAgICBzZWxmLmxhc3Rfb3BlbiA9IE5vbmUKKyAgICAgICAgc2VsZi5uZXh0X21zZyA9IE5vbmUKKyAgICAgICAgc2VsZi5uZXh0X2NvZGUgPSBOb25lCiAKICAgICBkZWYgdGVhckRvd24oc2VsZik6CiAgICAgICAgIHVwbG9hZF9tb2QudXJsb3BlbiA9IHNlbGYub2xkX29wZW4KICAgICAgICAgc3VwZXIodXBsb2FkVGVzdENhc2UsIHNlbGYpLnRlYXJEb3duKCkKIAogICAgIGRlZiBfdXJsb3BlbihzZWxmLCB1cmwpOgotICAgICAgICBzZWxmLmxhc3Rfb3BlbiA9IEZha2VPcGVuKHVybCkKKyAgICAgICAgc2VsZi5sYXN0X29wZW4gPSBGYWtlT3Blbih1cmwsIG1zZz1zZWxmLm5leHRfbXNnLCBjb2RlPXNlbGYubmV4dF9jb2RlKQogICAgICAgICByZXR1cm4gc2VsZi5sYXN0X29wZW4KIAogICAgIGRlZiB0ZXN0X2ZpbmFsaXplX29wdGlvbnMoc2VsZik6CkBAIC0xMjMsMTcgKzEyNywyMiBAQAogCiAgICAgICAgICMgd2hhdCBkaWQgd2Ugc2VuZCA/CiAgICAgICAgIGhlYWRlcnMgPSBkaWN0KHNlbGYubGFzdF9vcGVuLnJlcS5oZWFkZXJzKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhlYWRlcnNbJ0NvbnRlbnQtbGVuZ3RoJ10sICcyMDg3JykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhlYWRlcnNbJ0NvbnRlbnQtdHlwZSddLnN0YXJ0c3dpdGgoJ211bHRpcGFydC9mb3JtLWRhdGEnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoZWFkZXJzWydDb250ZW50LWxlbmd0aCddLCAnMjE2MScpCisgICAgICAgIGNvbnRlbnRfdHlwZSA9IGhlYWRlcnNbJ0NvbnRlbnQtdHlwZSddCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb250ZW50X3R5cGUuc3RhcnRzd2l0aCgnbXVsdGlwYXJ0L2Zvcm0tZGF0YScpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubGFzdF9vcGVuLnJlcS5nZXRfbWV0aG9kKCksICdQT1NUJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxhc3Rfb3Blbi5yZXEuZ2V0X2Z1bGxfdXJsKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ2h0dHBzOi8vcHlwaS5weXRob24ub3JnL3B5cGknKQotICAgICAgICBzZWxmLmFzc2VydEluKGIneHh4Jywgc2VsZi5sYXN0X29wZW4ucmVxLmRhdGEpCisgICAgICAgIGV4cGVjdGVkX3VybCA9ICdodHRwczovL3B5cGkucHl0aG9uLm9yZy9weXBpJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubGFzdF9vcGVuLnJlcS5nZXRfZnVsbF91cmwoKSwgZXhwZWN0ZWRfdXJsKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYid4eHgnIGluIHNlbGYubGFzdF9vcGVuLnJlcS5kYXRhKQogCiAgICAgICAgICMgVGhlIFB5UEkgcmVzcG9uc2UgYm9keSB3YXMgZWNob2VkCiAgICAgICAgIHJlc3VsdHMgPSBzZWxmLmdldF9sb2dzKElORk8pCiAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3h5enp5XG4nLCByZXN1bHRzWy0xXSkKIAorICAgIGRlZiB0ZXN0X3VwbG9hZF9mYWlscyhzZWxmKToKKyAgICAgICAgc2VsZi5uZXh0X21zZyA9ICJOb3QgRm91bmQiCisgICAgICAgIHNlbGYubmV4dF9jb2RlID0gNDA0CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKERpc3R1dGlsc0Vycm9yLCBzZWxmLnRlc3RfdXBsb2FkKQogCiBkZWYgdGVzdF9zdWl0ZSgpOgogICAgIHJldHVybiB1bml0dGVzdC5tYWtlU3VpdGUodXBsb2FkVGVzdENhc2UpCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfdXRpbC5weSBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF91dGlsLnB5CmluZGV4IGExYWJmOGYuLjRlOWQ3OWIgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF91dGlsLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF91dGlsLnB5CkBAIC0yMzcsNyArMjM3LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRGlzdHV0aWxzUGxhdGZvcm1FcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlX3Jvb3QsICdjOlxccm9vdCcsICdpdHNcXGhlcmUnKQogCi0gICAgICAgICMgWFhYIHBsYXRmb3JtcyB0byBiZSBjb3ZlcmVkOiBvczIsIG1hYworICAgICAgICAjIFhYWCBwbGF0Zm9ybXMgdG8gYmUgY292ZXJlZDogbWFjCiAKICAgICBkZWYgdGVzdF9jaGVja19lbnZpcm9uKHNlbGYpOgogICAgICAgICB1dGlsLl9lbnZpcm9uX2NoZWNrZWQgPSAwCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL3RleHRfZmlsZS5weSBiL0xpYi9kaXN0dXRpbHMvdGV4dF9maWxlLnB5CmluZGV4IDQwYjg0ODQuLjQ3ODMzNmYgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvdGV4dF9maWxlLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvdGV4dF9maWxlLnB5CkBAIC0xMTgsMTAgKzExOCwxMSBAQAogICAgIGRlZiBjbG9zZShzZWxmKToKICAgICAgICAgIiIiQ2xvc2UgdGhlIGN1cnJlbnQgZmlsZSBhbmQgZm9yZ2V0IGV2ZXJ5dGhpbmcgd2Uga25vdyBhYm91dCBpdAogICAgICAgICAgICAoZmlsZW5hbWUsIGN1cnJlbnQgbGluZSBudW1iZXIpLiIiIgotICAgICAgICBzZWxmLmZpbGUuY2xvc2UoKQorICAgICAgICBmaWxlID0gc2VsZi5maWxlCiAgICAgICAgIHNlbGYuZmlsZSA9IE5vbmUKICAgICAgICAgc2VsZi5maWxlbmFtZSA9IE5vbmUKICAgICAgICAgc2VsZi5jdXJyZW50X2xpbmUgPSBOb25lCisgICAgICAgIGZpbGUuY2xvc2UoKQogCiAgICAgZGVmIGdlbl9lcnJvcihzZWxmLCBtc2csIGxpbmU9Tm9uZSk6CiAgICAgICAgIG91dG1zZyA9IFtdCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL3V0aWwucHkgYi9MaWIvZGlzdHV0aWxzL3V0aWwucHkKaW5kZXggYjU1ODk1Ny4uNWFkY2FjNSAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy91dGlsLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvdXRpbC5weQpAQCAtNiw3ICs2LDcgQEAKIAogaW1wb3J0IG9zCiBpbXBvcnQgcmUKLWltcG9ydCBpbXAKK2ltcG9ydCBpbXBvcnRsaWIudXRpbAogaW1wb3J0IHN5cwogaW1wb3J0IHN0cmluZwogZnJvbSBkaXN0dXRpbHMuZXJyb3JzIGltcG9ydCBEaXN0dXRpbHNQbGF0Zm9ybUVycm9yCkBAIC0xNTQsMTIgKzE1NCw2IEBACiAgICAgICAgICAgICBwYXRoID0gcGF0aFsxOl0KICAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihuZXdfcm9vdCwgcGF0aCkKIAotICAgIGVsaWYgb3MubmFtZSA9PSAnb3MyJzoKLSAgICAgICAgKGRyaXZlLCBwYXRoKSA9IG9zLnBhdGguc3BsaXRkcml2ZShwYXRobmFtZSkKLSAgICAgICAgaWYgcGF0aFswXSA9PSBvcy5zZXA6Ci0gICAgICAgICAgICBwYXRoID0gcGF0aFsxOl0KLSAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihuZXdfcm9vdCwgcGF0aCkKLQogICAgIGVsc2U6CiAgICAgICAgIHJhaXNlIERpc3R1dGlsc1BsYXRmb3JtRXJyb3IoIm5vdGhpbmcga25vd24gYWJvdXQgcGxhdGZvcm0gJyVzJyIgJSBvcy5uYW1lKQogCkBAIC00NDQsOSArNDM4LDEwIEBACiAgICAgICAgICAgICAjICAgY2ZpbGUgLSBieXRlLWNvbXBpbGVkIGZpbGUKICAgICAgICAgICAgICMgICBkZmlsZSAtIHB1cnBvcnRlZCBzb3VyY2UgZmlsZW5hbWUgKHNhbWUgYXMgJ2ZpbGUnIGJ5IGRlZmF1bHQpCiAgICAgICAgICAgICBpZiBvcHRpbWl6ZSA+PSAwOgotICAgICAgICAgICAgICAgIGNmaWxlID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKGZpbGUsIGRlYnVnX292ZXJyaWRlPW5vdCBvcHRpbWl6ZSkKKyAgICAgICAgICAgICAgICBjZmlsZSA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKAorICAgICAgICAgICAgICAgICAgICBmaWxlLCBkZWJ1Z19vdmVycmlkZT1ub3Qgb3B0aW1pemUpCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGNmaWxlID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKGZpbGUpCisgICAgICAgICAgICAgICAgY2ZpbGUgPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShmaWxlKQogICAgICAgICAgICAgZGZpbGUgPSBmaWxlCiAgICAgICAgICAgICBpZiBwcmVmaXg6CiAgICAgICAgICAgICAgICAgaWYgZmlsZVs6bGVuKHByZWZpeCldICE9IHByZWZpeDoKZGlmZiAtLWdpdCBhL0xpYi9kb2N0ZXN0LnB5IGIvTGliL2RvY3Rlc3QucHkKaW5kZXggM2YwZDlkOS4uNDMyZWYwNSAxMDA2NDQKLS0tIGEvTGliL2RvY3Rlc3QucHkKKysrIGIvTGliL2RvY3Rlc3QucHkKQEAgLTYyLDYgKzYyLDcgQEAKICAgICAnUkVQT1JUX05ESUZGJywKICAgICAnUkVQT1JUX09OTFlfRklSU1RfRkFJTFVSRScsCiAgICAgJ1JFUE9SVElOR19GTEFHUycsCisgICAgJ0ZBSUxfRkFTVCcsCiAgICAgIyAxLiBVdGlsaXR5IEZ1bmN0aW9ucwogICAgICMgMi4gRXhhbXBsZSAmIERvY1Rlc3QKICAgICAnRXhhbXBsZScsCkBAIC05Miw2ICs5Myw3IEBACiBdCiAKIGltcG9ydCBfX2Z1dHVyZV9fCitpbXBvcnQgYXJncGFyc2UKIGltcG9ydCBkaWZmbGliCiBpbXBvcnQgaW5zcGVjdAogaW1wb3J0IGxpbmVjYWNoZQpAQCAtMTUwLDExICsxNTIsMTMgQEAKIFJFUE9SVF9DRElGRiA9IHJlZ2lzdGVyX29wdGlvbmZsYWcoJ1JFUE9SVF9DRElGRicpCiBSRVBPUlRfTkRJRkYgPSByZWdpc3Rlcl9vcHRpb25mbGFnKCdSRVBPUlRfTkRJRkYnKQogUkVQT1JUX09OTFlfRklSU1RfRkFJTFVSRSA9IHJlZ2lzdGVyX29wdGlvbmZsYWcoJ1JFUE9SVF9PTkxZX0ZJUlNUX0ZBSUxVUkUnKQorRkFJTF9GQVNUID0gcmVnaXN0ZXJfb3B0aW9uZmxhZygnRkFJTF9GQVNUJykKIAogUkVQT1JUSU5HX0ZMQUdTID0gKFJFUE9SVF9VRElGRiB8CiAgICAgICAgICAgICAgICAgICAgUkVQT1JUX0NESUZGIHwKICAgICAgICAgICAgICAgICAgICBSRVBPUlRfTkRJRkYgfAotICAgICAgICAgICAgICAgICAgIFJFUE9SVF9PTkxZX0ZJUlNUX0ZBSUxVUkUpCisgICAgICAgICAgICAgICAgICAgUkVQT1JUX09OTFlfRklSU1RfRkFJTFVSRSB8CisgICAgICAgICAgICAgICAgICAgRkFJTF9GQVNUKQogCiAjIFNwZWNpYWwgc3RyaW5nIG1hcmtlcnMgZm9yIHVzZSBpbiBgd2FudGAgc3RyaW5nczoKIEJMQU5LTElORV9NQVJLRVIgPSAnPEJMQU5LTElORT4nCkBAIC0yMTIsNyArMjE2LDcgQEAKICAgICBpZiBtb2R1bGVfcmVsYXRpdmU6CiAgICAgICAgIHBhY2thZ2UgPSBfbm9ybWFsaXplX21vZHVsZShwYWNrYWdlLCAzKQogICAgICAgICBmaWxlbmFtZSA9IF9tb2R1bGVfcmVsYXRpdmVfcGF0aChwYWNrYWdlLCBmaWxlbmFtZSkKLSAgICAgICAgaWYgaGFzYXR0cihwYWNrYWdlLCAnX19sb2FkZXJfXycpOgorICAgICAgICBpZiBnZXRhdHRyKHBhY2thZ2UsICdfX2xvYWRlcl9fJywgTm9uZSkgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBpZiBoYXNhdHRyKHBhY2thZ2UuX19sb2FkZXJfXywgJ2dldF9kYXRhJyk6CiAgICAgICAgICAgICAgICAgZmlsZV9jb250ZW50cyA9IHBhY2thZ2UuX19sb2FkZXJfXy5nZXRfZGF0YShmaWxlbmFtZSkKICAgICAgICAgICAgICAgICBmaWxlX2NvbnRlbnRzID0gZmlsZV9jb250ZW50cy5kZWNvZGUoZW5jb2RpbmcpCkBAIC00NzcsOSArNDgxLDYgQEAKICAgICAgICAgICAgICAgIHNlbGYub3B0aW9ucyA9PSBvdGhlci5vcHRpb25zIGFuZCBcCiAgICAgICAgICAgICAgICBzZWxmLmV4Y19tc2cgPT0gb3RoZXIuZXhjX21zZwogCi0gICAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgIHJldHVybiBub3Qgc2VsZiA9PSBvdGhlcgotCiAgICAgZGVmIF9faGFzaF9fKHNlbGYpOgogICAgICAgICByZXR1cm4gaGFzaCgoc2VsZi5zb3VyY2UsIHNlbGYud2FudCwgc2VsZi5saW5lbm8sIHNlbGYuaW5kZW50LAogICAgICAgICAgICAgICAgICAgICAgc2VsZi5leGNfbXNnKSkKQEAgLTU0Myw5ICs1NDQsNiBAQAogICAgICAgICAgICAgICAgc2VsZi5maWxlbmFtZSA9PSBvdGhlci5maWxlbmFtZSBhbmQgXAogICAgICAgICAgICAgICAgc2VsZi5saW5lbm8gPT0gb3RoZXIubGluZW5vCiAKLSAgICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKLSAgICAgICAgcmV0dXJuIG5vdCBzZWxmID09IG90aGVyCi0KICAgICBkZWYgX19oYXNoX18oc2VsZik6CiAgICAgICAgIHJldHVybiBoYXNoKChzZWxmLmRvY3N0cmluZywgc2VsZi5uYW1lLCBzZWxmLmZpbGVuYW1lLCBzZWxmLmxpbmVubykpCiAKQEAgLTk0MCw2ICs5MzgsMTQgQEAKICAgICAgICAgICAgIHJldHVybiBtb2R1bGUgaXMgaW5zcGVjdC5nZXRtb2R1bGUob2JqZWN0KQogICAgICAgICBlbGlmIGluc3BlY3QuaXNmdW5jdGlvbihvYmplY3QpOgogICAgICAgICAgICAgcmV0dXJuIG1vZHVsZS5fX2RpY3RfXyBpcyBvYmplY3QuX19nbG9iYWxzX18KKyAgICAgICAgZWxpZiBpbnNwZWN0LmlzbWV0aG9kZGVzY3JpcHRvcihvYmplY3QpOgorICAgICAgICAgICAgaWYgaGFzYXR0cihvYmplY3QsICdfX29iamNsYXNzX18nKToKKyAgICAgICAgICAgICAgICBvYmpfbW9kID0gb2JqZWN0Ll9fb2JqY2xhc3NfXy5fX21vZHVsZV9fCisgICAgICAgICAgICBlbGlmIGhhc2F0dHIob2JqZWN0LCAnX19tb2R1bGVfXycpOgorICAgICAgICAgICAgICAgIG9ial9tb2QgPSBvYmplY3QuX19tb2R1bGVfXworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZSAjIFtYWF0gbm8gZWFzeSB3YXkgdG8gdGVsbCBvdGhlcndpc2UKKyAgICAgICAgICAgIHJldHVybiBtb2R1bGUuX19uYW1lX18gPT0gb2JqX21vZAogICAgICAgICBlbGlmIGluc3BlY3QuaXNjbGFzcyhvYmplY3QpOgogICAgICAgICAgICAgcmV0dXJuIG1vZHVsZS5fX25hbWVfXyA9PSBvYmplY3QuX19tb2R1bGVfXwogICAgICAgICBlbGlmIGhhc2F0dHIob2JqZWN0LCAnX19tb2R1bGVfXycpOgpAQCAtOTcyLDcgKzk3OCw3IEBACiAgICAgICAgICAgICBmb3IgdmFsbmFtZSwgdmFsIGluIG9iai5fX2RpY3RfXy5pdGVtcygpOgogICAgICAgICAgICAgICAgIHZhbG5hbWUgPSAnJXMuJXMnICUgKG5hbWUsIHZhbG5hbWUpCiAgICAgICAgICAgICAgICAgIyBSZWN1cnNlIHRvIGZ1bmN0aW9ucyAmIGNsYXNzZXMuCi0gICAgICAgICAgICAgICAgaWYgKChpbnNwZWN0LmlzZnVuY3Rpb24odmFsKSBvciBpbnNwZWN0LmlzY2xhc3ModmFsKSkgYW5kCisgICAgICAgICAgICAgICAgaWYgKChpbnNwZWN0Lmlzcm91dGluZSh2YWwpIG9yIGluc3BlY3QuaXNjbGFzcyh2YWwpKSBhbmQKICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZnJvbV9tb2R1bGUobW9kdWxlLCB2YWwpKToKICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZmluZCh0ZXN0cywgdmFsLCB2YWxuYW1lLCBtb2R1bGUsIHNvdXJjZV9saW5lcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9icywgc2VlbikKQEAgLTk4NCw5ICs5OTAsOCBAQAogICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJEb2NUZXN0RmluZGVyLmZpbmQ6IF9fdGVzdF9fIGtleXMgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtdXN0IGJlIHN0cmluZ3M6ICVyIiAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHR5cGUodmFsbmFtZSksKSkKLSAgICAgICAgICAgICAgICBpZiBub3QgKGluc3BlY3QuaXNmdW5jdGlvbih2YWwpIG9yIGluc3BlY3QuaXNjbGFzcyh2YWwpIG9yCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnNwZWN0LmlzbWV0aG9kKHZhbCkgb3IgaW5zcGVjdC5pc21vZHVsZSh2YWwpIG9yCi0gICAgICAgICAgICAgICAgICAgICAgICBpc2luc3RhbmNlKHZhbCwgc3RyKSk6CisgICAgICAgICAgICAgICAgaWYgbm90IChpbnNwZWN0Lmlzcm91dGluZSh2YWwpIG9yIGluc3BlY3QuaXNjbGFzcyh2YWwpIG9yCisgICAgICAgICAgICAgICAgICAgICAgICBpbnNwZWN0LmlzbW9kdWxlKHZhbCkgb3IgaXNpbnN0YW5jZSh2YWwsIHN0cikpOgogICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJEb2NUZXN0RmluZGVyLmZpbmQ6IF9fdGVzdF9fIHZhbHVlcyAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm11c3QgYmUgc3RyaW5ncywgZnVuY3Rpb25zLCBtZXRob2RzLCAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNsYXNzZXMsIG9yIG1vZHVsZXM6ICVyIiAlCkBAIC0xMDA1LDcgKzEwMTAsNyBAQAogICAgICAgICAgICAgICAgICAgICB2YWwgPSBnZXRhdHRyKG9iaiwgdmFsbmFtZSkuX19mdW5jX18KIAogICAgICAgICAgICAgICAgICMgUmVjdXJzZSB0byBtZXRob2RzLCBwcm9wZXJ0aWVzLCBhbmQgbmVzdGVkIGNsYXNzZXMuCi0gICAgICAgICAgICAgICAgaWYgKChpbnNwZWN0LmlzZnVuY3Rpb24odmFsKSBvciBpbnNwZWN0LmlzY2xhc3ModmFsKSBvcgorICAgICAgICAgICAgICAgIGlmICgoaW5zcGVjdC5pc3JvdXRpbmUodmFsKSBvciBpbnNwZWN0LmlzY2xhc3ModmFsKSBvcgogICAgICAgICAgICAgICAgICAgICAgIGlzaW5zdGFuY2UodmFsLCBwcm9wZXJ0eSkpIGFuZAogICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2Zyb21fbW9kdWxlKG1vZHVsZSwgdmFsKSk6CiAgICAgICAgICAgICAgICAgICAgIHZhbG5hbWUgPSAnJXMuJXMnICUgKG5hbWUsIHZhbG5hbWUpCkBAIC0xMzY3LDYgKzEzNzIsOSBAQAogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBhc3NlcnQgRmFsc2UsICgidW5rbm93biBvdXRjb21lIiwgb3V0Y29tZSkKIAorICAgICAgICAgICAgaWYgZmFpbHVyZXMgYW5kIHNlbGYub3B0aW9uZmxhZ3MgJiBGQUlMX0ZBU1Q6CisgICAgICAgICAgICAgICAgYnJlYWsKKwogICAgICAgICAjIFJlc3RvcmUgdGhlIG9wdGlvbiBmbGFncyAoaW4gY2FzZSB0aGV5IHdlcmUgbW9kaWZpZWQpCiAgICAgICAgIHNlbGYub3B0aW9uZmxhZ3MgPSBvcmlnaW5hbF9vcHRpb25mbGFncwogCkBAIC0xNTY1LDcgKzE1NzMsNyBAQAogCiAgICAgICAgICMgSWYgYHdhbnRgIGNvbnRhaW5zIGhleC1lc2NhcGVkIGNoYXJhY3RlciBzdWNoIGFzICJcdTEyMzQiLAogICAgICAgICAjIHRoZW4gYHdhbnRgIGlzIGEgc3RyaW5nIG9mIHNpeCBjaGFyYWN0ZXJzKGUuZy4gW1wsdSwxLDIsMyw0XSkuCi0gICAgICAgICMgT24gdGhlIG90aGVyIGhhbmQsIGBnb3RgIGNvdWxkIGJlIGFuIGFub3RoZXIgc2VxdWVuY2Ugb2YKKyAgICAgICAgIyBPbiB0aGUgb3RoZXIgaGFuZCwgYGdvdGAgY291bGQgYmUgYW5vdGhlciBzZXF1ZW5jZSBvZgogICAgICAgICAjIGNoYXJhY3RlcnMgc3VjaCBhcyBbXHUxMjM0XSwgc28gYHdhbnRgIGFuZCBgZ290YCBzaG91bGQKICAgICAgICAgIyBiZSBmb2xkZWQgdG8gaGV4LWVzY2FwZWQgQVNDSUkgc3RyaW5nIHRvIGNvbXBhcmUuCiAgICAgICAgIGdvdCA9IHNlbGYuX3RvQXNjaWkoZ290KQpAQCAtMjI3NSw5ICsyMjgzLDYgQEAKICAgICAgICAgICAgICAgIHNlbGYuX2R0X3RlYXJEb3duID09IG90aGVyLl9kdF90ZWFyRG93biBhbmQgXAogICAgICAgICAgICAgICAgc2VsZi5fZHRfY2hlY2tlciA9PSBvdGhlci5fZHRfY2hlY2tlcgogCi0gICAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgIHJldHVybiBub3Qgc2VsZiA9PSBvdGhlcgotCiAgICAgZGVmIF9faGFzaF9fKHNlbGYpOgogICAgICAgICByZXR1cm4gaGFzaCgoc2VsZi5fZHRfb3B0aW9uZmxhZ3MsIHNlbGYuX2R0X3NldFVwLCBzZWxmLl9kdF90ZWFyRG93biwKICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2R0X2NoZWNrZXIpKQpAQCAtMjMwOCw2ICsyMzEzLDEyIEBACiAgICAgX19zdHJfXyA9IHNob3J0RGVzY3JpcHRpb24KIAogCitjbGFzcyBfRG9jVGVzdFN1aXRlKHVuaXR0ZXN0LlRlc3RTdWl0ZSk6CisKKyAgICBkZWYgX3JlbW92ZVRlc3RBdEluZGV4KHNlbGYsIGluZGV4KToKKyAgICAgICAgcGFzcworCisKIGRlZiBEb2NUZXN0U3VpdGUobW9kdWxlPU5vbmUsIGdsb2JzPU5vbmUsIGV4dHJhZ2xvYnM9Tm9uZSwgdGVzdF9maW5kZXI9Tm9uZSwKICAgICAgICAgICAgICAgICAgKipvcHRpb25zKToKICAgICAiIiIKQEAgLTIzNTMsNyArMjM2NCw3IEBACiAKICAgICBpZiBub3QgdGVzdHMgYW5kIHN5cy5mbGFncy5vcHRpbWl6ZSA+PTI6CiAgICAgICAgICMgU2tpcCBkb2N0ZXN0cyB3aGVuIHJ1bm5pbmcgd2l0aCAtTzIKLSAgICAgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoKQorICAgICAgICBzdWl0ZSA9IF9Eb2NUZXN0U3VpdGUoKQogICAgICAgICBzdWl0ZS5hZGRUZXN0KFNraXBEb2NUZXN0Q2FzZShtb2R1bGUpKQogICAgICAgICByZXR1cm4gc3VpdGUKICAgICBlbGlmIG5vdCB0ZXN0czoKQEAgLTIzNjcsNyArMjM3OCw3IEBACiAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IobW9kdWxlLCAiaGFzIG5vIGRvY3N0cmluZ3MiKQogCiAgICAgdGVzdHMuc29ydCgpCi0gICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoKQorICAgIHN1aXRlID0gX0RvY1Rlc3RTdWl0ZSgpCiAKICAgICBmb3IgdGVzdCBpbiB0ZXN0czoKICAgICAgICAgaWYgbGVuKHRlc3QuZXhhbXBsZXMpID09IDA6CkBAIC0yNDc3LDcgKzI0ODgsNyBAQAogICAgIGVuY29kaW5nCiAgICAgICBBbiBlbmNvZGluZyB0aGF0IHdpbGwgYmUgdXNlZCB0byBjb252ZXJ0IHRoZSBmaWxlcyB0byB1bmljb2RlLgogICAgICIiIgotICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKKyAgICBzdWl0ZSA9IF9Eb2NUZXN0U3VpdGUoKQogCiAgICAgIyBXZSBkbyB0aGlzIGhlcmUgc28gdGhhdCBfbm9ybWFsaXplX21vZHVsZSBpcyBjYWxsZWQgYXQgdGhlIHJpZ2h0CiAgICAgIyBsZXZlbC4gIElmIGl0IHdlcmUgY2FsbGVkIGluIERvY0ZpbGVUZXN0LCB0aGVuIHRoaXMgZnVuY3Rpb24KQEAgLTI3MjcsMTMgKzI3MzgsMzAgQEAKIAogCiBkZWYgX3Rlc3QoKToKLSAgICB0ZXN0ZmlsZXMgPSBbYXJnIGZvciBhcmcgaW4gc3lzLmFyZ3ZbMTpdIGlmIGFyZyBhbmQgYXJnWzBdICE9ICctJ10KLSAgICBpZiBub3QgdGVzdGZpbGVzOgotICAgICAgICBuYW1lID0gb3MucGF0aC5iYXNlbmFtZShzeXMuYXJndlswXSkKLSAgICAgICAgaWYgJ19fbG9hZGVyX18nIGluIGdsb2JhbHMoKTogICAgICAgICAgIyBweXRob24gLW0KLSAgICAgICAgICAgIG5hbWUsIF8gPSBvcy5wYXRoLnNwbGl0ZXh0KG5hbWUpCi0gICAgICAgIHByaW50KCJ1c2FnZTogezB9IFstdl0gZmlsZSAuLi4iLmZvcm1hdChuYW1lKSkKLSAgICAgICAgcmV0dXJuIDIKKyAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihkZXNjcmlwdGlvbj0iZG9jdGVzdCBydW5uZXIiKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy12JywgJy0tdmVyYm9zZScsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdwcmludCB2ZXJ5IHZlcmJvc2Ugb3V0cHV0IGZvciBhbGwgdGVzdHMnKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1vJywgJy0tb3B0aW9uJywgYWN0aW9uPSdhcHBlbmQnLAorICAgICAgICAgICAgICAgICAgICAgICAgY2hvaWNlcz1PUFRJT05GTEFHU19CWV9OQU1FLmtleXMoKSwgZGVmYXVsdD1bXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9KCdzcGVjaWZ5IGEgZG9jdGVzdCBvcHRpb24gZmxhZyB0byBhcHBseScKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgdG8gdGhlIHRlc3QgcnVuOyBtYXkgYmUgc3BlY2lmaWVkIG1vcmUnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIHRoYW4gb25jZSB0byBhcHBseSBtdWx0aXBsZSBvcHRpb25zJykpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLWYnLCAnLS1mYWlsLWZhc3QnLCBhY3Rpb249J3N0b3JlX3RydWUnLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0oJ3N0b3AgcnVubmluZyB0ZXN0cyBhZnRlciBmaXJzdCBmYWlsdXJlICh0aGlzJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyBpcyBhIHNob3J0aGFuZCBmb3IgLW8gRkFJTF9GQVNULCBhbmQgaXMnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIGluIGFkZGl0aW9uIHRvIGFueSBvdGhlciAtbyBvcHRpb25zKScpKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJ2ZpbGUnLCBuYXJncz0nKycsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdmaWxlIGNvbnRhaW5pbmcgdGhlIHRlc3RzIHRvIHJ1bicpCisgICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKKyAgICB0ZXN0ZmlsZXMgPSBhcmdzLmZpbGUKKyAgICAjIFZlcmJvc2UgdXNlZCB0byBiZSBoYW5kbGVkIGJ5IHRoZSAiaW5zcGVjdCBhcmd2IiBtYWdpYyBpbiBEb2NUZXN0UnVubmVyLAorICAgICMgYnV0IHNpbmNlIHdlIGFyZSB1c2luZyBhcmdwYXJzZSB3ZSBhcmUgcGFzc2luZyBpdCBtYW51YWxseSBub3cuCisgICAgdmVyYm9zZSA9IGFyZ3MudmVyYm9zZQorICAgIG9wdGlvbnMgPSAwCisgICAgZm9yIG9wdGlvbiBpbiBhcmdzLm9wdGlvbjoKKyAgICAgICAgb3B0aW9ucyB8PSBPUFRJT05GTEFHU19CWV9OQU1FW29wdGlvbl0KKyAgICBpZiBhcmdzLmZhaWxfZmFzdDoKKyAgICAgICAgb3B0aW9ucyB8PSBGQUlMX0ZBU1QKICAgICBmb3IgZmlsZW5hbWUgaW4gdGVzdGZpbGVzOgogICAgICAgICBpZiBmaWxlbmFtZS5lbmRzd2l0aCgiLnB5Iik6CiAgICAgICAgICAgICAjIEl0IGlzIGEgbW9kdWxlIC0tIGluc2VydCBpdHMgZGlyIGludG8gc3lzLnBhdGggYW5kIHRyeSB0bwpAQCAtMjc0Myw5ICsyNzcxLDEwIEBACiAgICAgICAgICAgICBzeXMucGF0aC5pbnNlcnQoMCwgZGlybmFtZSkKICAgICAgICAgICAgIG0gPSBfX2ltcG9ydF9fKGZpbGVuYW1lWzotM10pCiAgICAgICAgICAgICBkZWwgc3lzLnBhdGhbMF0KLSAgICAgICAgICAgIGZhaWx1cmVzLCBfID0gdGVzdG1vZChtKQorICAgICAgICAgICAgZmFpbHVyZXMsIF8gPSB0ZXN0bW9kKG0sIHZlcmJvc2U9dmVyYm9zZSwgb3B0aW9uZmxhZ3M9b3B0aW9ucykKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGZhaWx1cmVzLCBfID0gdGVzdGZpbGUoZmlsZW5hbWUsIG1vZHVsZV9yZWxhdGl2ZT1GYWxzZSkKKyAgICAgICAgICAgIGZhaWx1cmVzLCBfID0gdGVzdGZpbGUoZmlsZW5hbWUsIG1vZHVsZV9yZWxhdGl2ZT1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJib3NlPXZlcmJvc2UsIG9wdGlvbmZsYWdzPW9wdGlvbnMpCiAgICAgICAgIGlmIGZhaWx1cmVzOgogICAgICAgICAgICAgcmV0dXJuIDEKICAgICByZXR1cm4gMApkaWZmIC0tZ2l0IGEvTGliL2VtYWlsL19lbmNvZGVkX3dvcmRzLnB5IGIvTGliL2VtYWlsL19lbmNvZGVkX3dvcmRzLnB5CmluZGV4IDllMGNjNzUuLjVlYWFiMzYgMTAwNjQ0Ci0tLSBhL0xpYi9lbWFpbC9fZW5jb2RlZF93b3Jkcy5weQorKysgYi9MaWIvZW1haWwvX2VuY29kZWRfd29yZHMucHkKQEAgLTE1Miw3ICsxNTIsNyBAQAogICAgIHRoZW4gZnJvbSB0aGUgcmVzdWx0aW5nIGJ5dGVzIGludG8gdW5pY29kZSB1c2luZyB0aGUgc3BlY2lmaWVkIGNoYXJzZXQuICBJZgogICAgIHRoZSBjdGUtZGVjb2RlZCBzdHJpbmcgZG9lcyBub3Qgc3VjY2Vzc2Z1bGx5IGRlY29kZSB1c2luZyB0aGUgc3BlY2lmaWVkCiAgICAgY2hhcmFjdGVyIHNldCwgYSBkZWZlY3QgaXMgYWRkZWQgdG8gdGhlIGRlZmVjdHMgbGlzdCBhbmQgdGhlIHVua25vd24gb2N0ZXRzCi0gICAgYXJlIHJlcGxhY2VkIGJ5IHRoZSB1bmljb2RlICd1bmtub3duJyBjaGFyYWN0ZXIgXHVGREZGLgorICAgIGFyZSByZXBsYWNlZCBieSB0aGUgdW5pY29kZSAndW5rbm93bicgY2hhcmFjdGVyIFxcdUZERkYuCiAKICAgICBUaGUgc3BlY2lmaWVkIGNoYXJzZXQgYW5kIGxhbmd1YWdlIGFyZSByZXR1cm5lZC4gIFRoZSBkZWZhdWx0IGZvciBsYW5ndWFnZSwKICAgICB3aGljaCBpcyByYXJlbHkgaWYgZXZlciBlbmNvdW50ZXJlZCwgaXMgdGhlIGVtcHR5IHN0cmluZy4KZGlmZiAtLWdpdCBhL0xpYi9lbWFpbC9faGVhZGVyX3ZhbHVlX3BhcnNlci5weSBiL0xpYi9lbWFpbC9faGVhZGVyX3ZhbHVlX3BhcnNlci5weQppbmRleCAwMzY5ZTAxLi5hOWJkZjQ0IDEwMDY0NAotLS0gYS9MaWIvZW1haWwvX2hlYWRlcl92YWx1ZV9wYXJzZXIucHkKKysrIGIvTGliL2VtYWlsL19oZWFkZXJfdmFsdWVfcGFyc2VyLnB5CkBAIC03MCw3ICs3MCw4IEBACiBpbXBvcnQgcmUKIGltcG9ydCB1cmxsaWIgICAjIEZvciB1cmxsaWIucGFyc2UudW5xdW90ZQogZnJvbSBzdHJpbmcgaW1wb3J0IGhleGRpZ2l0cwotZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgbmFtZWR0dXBsZSwgT3JkZXJlZERpY3QKK2Zyb20gY29sbGVjdGlvbnMgaW1wb3J0IE9yZGVyZWREaWN0Citmcm9tIG9wZXJhdG9yIGltcG9ydCBpdGVtZ2V0dGVyCiBmcm9tIGVtYWlsIGltcG9ydCBfZW5jb2RlZF93b3JkcyBhcyBfZXcKIGZyb20gZW1haWwgaW1wb3J0IGVycm9ycwogZnJvbSBlbWFpbCBpbXBvcnQgdXRpbHMKQEAgLTM2OCw4ICszNjksNyBAQAogICAgICAgICAgICAgICAgIHlpZWxkIChpbmRlbnQgKyAnICAgICEhIGludmFsaWQgZWxlbWVudCBpbiB0b2tlbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xpc3Q6IHshcn0nLmZvcm1hdCh0b2tlbikpCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIHRva2VuLl9wcChpbmRlbnQrJyAgICAnKToKLSAgICAgICAgICAgICAgICAgICAgeWllbGQgbGluZQorICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gdG9rZW4uX3BwKGluZGVudCsnICAgICcpCiAgICAgICAgIGlmIHNlbGYuZGVmZWN0czoKICAgICAgICAgICAgIGV4dHJhID0gJyBEZWZlY3RzOiB7fScuZm9ybWF0KHNlbGYuZGVmZWN0cykKICAgICAgICAgZWxzZToKQEAgLTEwOTksMTUgKzEwOTksMzQgQEAKICAgICAgICAgICAgICAgICBwYXJhbXNbbmFtZV0gPSBbXQogICAgICAgICAgICAgcGFyYW1zW25hbWVdLmFwcGVuZCgodG9rZW4uc2VjdGlvbl9udW1iZXIsIHRva2VuKSkKICAgICAgICAgZm9yIG5hbWUsIHBhcnRzIGluIHBhcmFtcy5pdGVtcygpOgotICAgICAgICAgICAgcGFydHMgPSBzb3J0ZWQocGFydHMpCi0gICAgICAgICAgICAjIFhYWDogdGhlcmUgbWlnaHQgYmUgbW9yZSByZWNvdmVyeSB3ZSBjb3VsZCBkbyBoZXJlIGlmLCBmb3IKLSAgICAgICAgICAgICMgZXhhbXBsZSwgdGhpcyBpcyByZWFsbHkgYSBjYXNlIG9mIGEgZHVwbGljYXRlIGF0dHJpYnV0ZSBuYW1lLgorICAgICAgICAgICAgcGFydHMgPSBzb3J0ZWQocGFydHMsIGtleT1pdGVtZ2V0dGVyKDApKQorICAgICAgICAgICAgZmlyc3RfcGFyYW0gPSBwYXJ0c1swXVsxXQorICAgICAgICAgICAgY2hhcnNldCA9IGZpcnN0X3BhcmFtLmNoYXJzZXQKKyAgICAgICAgICAgICMgT3VyIGFyYml0cmFyeSBlcnJvciByZWNvdmVyeSBpcyB0byBpZ25vcmUgZHVwbGljYXRlIHBhcmFtZXRlcnMsCisgICAgICAgICAgICAjIHRvIHVzZSBhcHBlYXJhbmNlIG9yZGVyIGlmIHRoZXJlIGFyZSBkdXBsaWNhdGUgcmZjIDIyMzEgcGFydHMsCisgICAgICAgICAgICAjIGFuZCB0byBpZ25vcmUgZ2Fwcy4gIFRoaXMgbWltaWNzIHRoZSBlcnJvciByZWNvdmVyeSBvZiBnZXRfcGFyYW0uCisgICAgICAgICAgICBpZiBub3QgZmlyc3RfcGFyYW0uZXh0ZW5kZWQgYW5kIGxlbihwYXJ0cykgPiAxOgorICAgICAgICAgICAgICAgIGlmIHBhcnRzWzFdWzBdID09IDA6CisgICAgICAgICAgICAgICAgICAgIHBhcnRzWzFdWzFdLmRlZmVjdHMuYXBwZW5kKGVycm9ycy5JbnZhbGlkSGVhZGVyRGVmZWN0KAorICAgICAgICAgICAgICAgICAgICAgICAgJ2R1cGxpY2F0ZSBwYXJhbWV0ZXIgbmFtZTsgZHVwbGljYXRlKHMpIGlnbm9yZWQnKSkKKyAgICAgICAgICAgICAgICAgICAgcGFydHMgPSBwYXJ0c1s6MV0KKyAgICAgICAgICAgICAgICAjIEVsc2UgYXNzdW1lIHRoZSAqMCogd2FzIG1pc3NpbmcuLi5ub3RlIHRoYXQgdGhpcyBpcyBkaWZmZXJlbnQKKyAgICAgICAgICAgICAgICAjIGZyb20gZ2V0X3BhcmFtLCBidXQgd2UgcmVnaXN0ZXJlZCBhIGRlZmVjdCBmb3IgdGhpcyBlYXJsaWVyLgogICAgICAgICAgICAgdmFsdWVfcGFydHMgPSBbXQotICAgICAgICAgICAgY2hhcnNldCA9IHBhcnRzWzBdWzFdLmNoYXJzZXQKLSAgICAgICAgICAgIGZvciBpLCAoc2VjdGlvbl9udW1iZXIsIHBhcmFtKSBpbiBlbnVtZXJhdGUocGFydHMpOgorICAgICAgICAgICAgaSA9IDAKKyAgICAgICAgICAgIGZvciBzZWN0aW9uX251bWJlciwgcGFyYW0gaW4gcGFydHM6CiAgICAgICAgICAgICAgICAgaWYgc2VjdGlvbl9udW1iZXIgIT0gaToKLSAgICAgICAgICAgICAgICAgICAgcGFyYW0uZGVmZWN0cy5hcHBlbmQoZXJyb3JzLkludmFsaWRIZWFkZXJEZWZlY3QoCi0gICAgICAgICAgICAgICAgICAgICAgICAiaW5jb25zaXN0ZW50IG11bHRpcGFydCBwYXJhbWV0ZXIgbnVtYmVyaW5nIikpCisgICAgICAgICAgICAgICAgICAgICMgV2UgY291bGQgZ2V0IGZhbmNpZXIgaGVyZSBhbmQgbG9vayBmb3IgYSBjb21wbGV0ZQorICAgICAgICAgICAgICAgICAgICAjIGR1cGxpY2F0ZSBleHRlbmRlZCBwYXJhbWV0ZXIgYW5kIGlnbm9yZSB0aGUgc2Vjb25kIG9uZQorICAgICAgICAgICAgICAgICAgICAjIHNlZW4uICBCdXQgd2UncmUgbm90IGRvaW5nIHRoYXQuICBUaGUgb2xkIGNvZGUgZGlkbid0LgorICAgICAgICAgICAgICAgICAgICBpZiBub3QgcGFyYW0uZXh0ZW5kZWQ6CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbS5kZWZlY3RzLmFwcGVuZChlcnJvcnMuSW52YWxpZEhlYWRlckRlZmVjdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZHVwbGljYXRlIHBhcmFtZXRlciBuYW1lOyBkdXBsaWNhdGUgaWdub3JlZCcpKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtLmRlZmVjdHMuYXBwZW5kKGVycm9ycy5JbnZhbGlkSGVhZGVyRGVmZWN0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbmNvbnNpc3RlbnQgUkZDMjIzMSBwYXJhbWV0ZXIgbnVtYmVyaW5nIikpCisgICAgICAgICAgICAgICAgaSArPSAxCiAgICAgICAgICAgICAgICAgdmFsdWUgPSBwYXJhbS5wYXJhbV92YWx1ZQogICAgICAgICAgICAgICAgIGlmIHBhcmFtLmV4dGVuZGVkOgogICAgICAgICAgICAgICAgICAgICB0cnk6CkBAIC0xMzE1LDI0ICsxMzM0LDIyIEBACiAjIFBhcnNlcgogIwogCi0iIiJQYXJzZSBzdHJpbmdzIGFjY29yZGluZyB0byBSRkM4MjIvMjA0Ny8yODIyLzUzMjIgcnVsZXMuCi0KLVRoaXMgaXMgYSBzdGF0ZWxlc3MgcGFyc2VyLiAgRWFjaCBnZXRfWFhYIGZ1bmN0aW9uIGFjY2VwdHMgYSBzdHJpbmcgYW5kCi1yZXR1cm5zIGVpdGhlciBhIFRlcm1pbmFsIG9yIGEgVG9rZW5MaXN0IHJlcHJlc2VudGluZyB0aGUgUkZDIG9iamVjdCBuYW1lZAotYnkgdGhlIG1ldGhvZCBhbmQgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgcmVtYWluaW5nIHVucGFyc2VkIGNoYXJhY3RlcnMKLWZyb20gdGhlIGlucHV0LiAgVGh1cyBhIHBhcnNlciBtZXRob2QgY29uc3VtZXMgdGhlIG5leHQgc3ludGFjdGljIGNvbnN0cnVjdAotb2YgYSBnaXZlbiB0eXBlIGFuZCByZXR1cm5zIGEgdG9rZW4gcmVwcmVzZW50aW5nIHRoZSBjb25zdHJ1Y3QgcGx1cyB0aGUKLXVucGFyc2VkIHJlbWFpbmRlciBvZiB0aGUgaW5wdXQgc3RyaW5nLgotCi1Gb3IgZXhhbXBsZSwgaWYgdGhlIGZpcnN0IGVsZW1lbnQgb2YgYSBzdHJ1Y3R1cmVkIGhlYWRlciBpcyBhICdwaHJhc2UnLAotdGhlbjoKLQotICAgIHBocmFzZSwgdmFsdWUgPSBnZXRfcGhyYXNlKHZhbHVlKQotCi1yZXR1cm5zIHRoZSBjb21wbGV0ZSBwaHJhc2UgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIHN0cmluZyB2YWx1ZSwgcGx1cyBhbnkKLWNoYXJhY3RlcnMgbGVmdCBpbiB0aGUgc3RyaW5nIGFmdGVyIHRoZSBwaHJhc2UgaXMgcmVtb3ZlZC4KLQotIiIiCisjIFBhcnNlIHN0cmluZ3MgYWNjb3JkaW5nIHRvIFJGQzgyMi8yMDQ3LzI4MjIvNTMyMiBydWxlcy4KKyMKKyMgVGhpcyBpcyBhIHN0YXRlbGVzcyBwYXJzZXIuICBFYWNoIGdldF9YWFggZnVuY3Rpb24gYWNjZXB0cyBhIHN0cmluZyBhbmQKKyMgcmV0dXJucyBlaXRoZXIgYSBUZXJtaW5hbCBvciBhIFRva2VuTGlzdCByZXByZXNlbnRpbmcgdGhlIFJGQyBvYmplY3QgbmFtZWQKKyMgYnkgdGhlIG1ldGhvZCBhbmQgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgcmVtYWluaW5nIHVucGFyc2VkIGNoYXJhY3RlcnMKKyMgZnJvbSB0aGUgaW5wdXQuICBUaHVzIGEgcGFyc2VyIG1ldGhvZCBjb25zdW1lcyB0aGUgbmV4dCBzeW50YWN0aWMgY29uc3RydWN0CisjIG9mIGEgZ2l2ZW4gdHlwZSBhbmQgcmV0dXJucyBhIHRva2VuIHJlcHJlc2VudGluZyB0aGUgY29uc3RydWN0IHBsdXMgdGhlCisjIHVucGFyc2VkIHJlbWFpbmRlciBvZiB0aGUgaW5wdXQgc3RyaW5nLgorIworIyBGb3IgZXhhbXBsZSwgaWYgdGhlIGZpcnN0IGVsZW1lbnQgb2YgYSBzdHJ1Y3R1cmVkIGhlYWRlciBpcyBhICdwaHJhc2UnLAorIyB0aGVuOgorIworIyAgICAgcGhyYXNlLCB2YWx1ZSA9IGdldF9waHJhc2UodmFsdWUpCisjCisjIHJldHVybnMgdGhlIGNvbXBsZXRlIHBocmFzZSBmcm9tIHRoZSBzdGFydCBvZiB0aGUgc3RyaW5nIHZhbHVlLCBwbHVzIGFueQorIyBjaGFyYWN0ZXJzIGxlZnQgaW4gdGhlIHN0cmluZyBhZnRlciB0aGUgcGhyYXNlIGlzIHJlbW92ZWQuCiAKIF93c3Bfc3BsaXR0ZXIgPSByZS5jb21waWxlKHInKFt7fV0rKScuZm9ybWF0KCcnLmpvaW4oV1NQKSkpLnNwbGl0CiBfbm9uX2F0b21fZW5kX21hdGNoZXIgPSByZS5jb21waWxlKHIiW157fV0rIi5mb3JtYXQoCkBAIC0yOTAwLDcgKzI5MTcsNyBAQAogICAgIHRyeToKICAgICAgICAgdG9rZW4sIHZhbHVlID0gZ2V0X3Rva2VuKHZhbHVlKQogICAgIGV4Y2VwdCBlcnJvcnMuSGVhZGVyUGFyc2VFcnJvcjoKLSAgICAgICAgY3R5cGUuZGVmZWN0cy5hcHBlbmQoZXJyb3JzLkludmFsaWRIZWFkZXJEZWZlY3QoCisgICAgICAgIGRpc3BfaGVhZGVyLmRlZmVjdHMuYXBwZW5kKGVycm9ycy5JbnZhbGlkSGVhZGVyRGVmZWN0KAogICAgICAgICAgICAgIkV4cGVjdGVkIGNvbnRlbnQgZGlzcG9zaXRpb24gYnV0IGZvdW5kIHshcn0iLmZvcm1hdCh2YWx1ZSkpKQogICAgICAgICBfZmluZF9taW1lX3BhcmFtZXRlcnMoZGlzcF9oZWFkZXIsIHZhbHVlKQogICAgICAgICByZXR1cm4gZGlzcF9oZWFkZXIKQEAgLTI5MzEsOCArMjk0OCw4IEBACiAgICAgdHJ5OgogICAgICAgICB0b2tlbiwgdmFsdWUgPSBnZXRfdG9rZW4odmFsdWUpCiAgICAgZXhjZXB0IGVycm9ycy5IZWFkZXJQYXJzZUVycm9yOgotICAgICAgICBjdHlwZS5kZWZlY3RzLmFwcGVuZChlcnJvcnMuSW52YWxpZEhlYWRlckRlZmVjdCgKLSAgICAgICAgICAgICJFeHBlY3RlZCBjb250ZW50IHRybmFzZmVyIGVuY29kaW5nIGJ1dCBmb3VuZCB7IXJ9Ii5mb3JtYXQodmFsdWUpKSkKKyAgICAgICAgY3RlX2hlYWRlci5kZWZlY3RzLmFwcGVuZChlcnJvcnMuSW52YWxpZEhlYWRlckRlZmVjdCgKKyAgICAgICAgICAgICJFeHBlY3RlZCBjb250ZW50IHRyYW5zZmVyIGVuY29kaW5nIGJ1dCBmb3VuZCB7IXJ9Ii5mb3JtYXQodmFsdWUpKSkKICAgICBlbHNlOgogICAgICAgICBjdGVfaGVhZGVyLmFwcGVuZCh0b2tlbikKICAgICAgICAgY3RlX2hlYWRlci5jdGUgPSB0b2tlbi52YWx1ZS5zdHJpcCgpLmxvd2VyKCkKZGlmZiAtLWdpdCBhL0xpYi9lbWFpbC9jb250ZW50bWFuYWdlci5weSBiL0xpYi9lbWFpbC9jb250ZW50bWFuYWdlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzYzNjUyCi0tLSAvZGV2L251bGwKKysrIGIvTGliL2VtYWlsL2NvbnRlbnRtYW5hZ2VyLnB5CkBAIC0wLDAgKzEsMjQ5IEBACitpbXBvcnQgYmluYXNjaWkKK2ltcG9ydCBlbWFpbC5jaGFyc2V0CitpbXBvcnQgZW1haWwubWVzc2FnZQoraW1wb3J0IGVtYWlsLmVycm9ycworZnJvbSBlbWFpbCBpbXBvcnQgcXVvcHJpbWltZQorCitjbGFzcyBDb250ZW50TWFuYWdlcjoKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5nZXRfaGFuZGxlcnMgPSB7fQorICAgICAgICBzZWxmLnNldF9oYW5kbGVycyA9IHt9CisKKyAgICBkZWYgYWRkX2dldF9oYW5kbGVyKHNlbGYsIGtleSwgaGFuZGxlcik6CisgICAgICAgIHNlbGYuZ2V0X2hhbmRsZXJzW2tleV0gPSBoYW5kbGVyCisKKyAgICBkZWYgZ2V0X2NvbnRlbnQoc2VsZiwgbXNnLCAqYXJncywgKiprdyk6CisgICAgICAgIGNvbnRlbnRfdHlwZSA9IG1zZy5nZXRfY29udGVudF90eXBlKCkKKyAgICAgICAgaWYgY29udGVudF90eXBlIGluIHNlbGYuZ2V0X2hhbmRsZXJzOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuZ2V0X2hhbmRsZXJzW2NvbnRlbnRfdHlwZV0obXNnLCAqYXJncywgKiprdykKKyAgICAgICAgbWFpbnR5cGUgPSBtc2cuZ2V0X2NvbnRlbnRfbWFpbnR5cGUoKQorICAgICAgICBpZiBtYWludHlwZSBpbiBzZWxmLmdldF9oYW5kbGVyczoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmdldF9oYW5kbGVyc1ttYWludHlwZV0obXNnLCAqYXJncywgKiprdykKKyAgICAgICAgaWYgJycgaW4gc2VsZi5nZXRfaGFuZGxlcnM6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5nZXRfaGFuZGxlcnNbJyddKG1zZywgKmFyZ3MsICoqa3cpCisgICAgICAgIHJhaXNlIEtleUVycm9yKGNvbnRlbnRfdHlwZSkKKworICAgIGRlZiBhZGRfc2V0X2hhbmRsZXIoc2VsZiwgdHlwZWtleSwgaGFuZGxlcik6CisgICAgICAgIHNlbGYuc2V0X2hhbmRsZXJzW3R5cGVrZXldID0gaGFuZGxlcgorCisgICAgZGVmIHNldF9jb250ZW50KHNlbGYsIG1zZywgb2JqLCAqYXJncywgKiprdyk6CisgICAgICAgIGlmIG1zZy5nZXRfY29udGVudF9tYWludHlwZSgpID09ICdtdWx0aXBhcnQnOgorICAgICAgICAgICAgIyBYWFg6IGlzIHRoaXMgZXJyb3IgYSBnb29kIGlkZWEgb3Igbm90PyAgV2UgY2FuIHJlbW92ZSBpdCBsYXRlciwKKyAgICAgICAgICAgICMgYnV0IHdlIGNhbid0IGFkZCBpdCBsYXRlciwgc28gZG8gaXQgZm9yIG5vdy4KKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigic2V0X2NvbnRlbnQgbm90IHZhbGlkIG9uIG11bHRpcGFydCIpCisgICAgICAgIGhhbmRsZXIgPSBzZWxmLl9maW5kX3NldF9oYW5kbGVyKG1zZywgb2JqKQorICAgICAgICBtc2cuY2xlYXJfY29udGVudCgpCisgICAgICAgIGhhbmRsZXIobXNnLCBvYmosICphcmdzLCAqKmt3KQorCisgICAgZGVmIF9maW5kX3NldF9oYW5kbGVyKHNlbGYsIG1zZywgb2JqKToKKyAgICAgICAgZnVsbF9wYXRoX2Zvcl9lcnJvciA9IE5vbmUKKyAgICAgICAgZm9yIHR5cCBpbiB0eXBlKG9iaikuX19tcm9fXzoKKyAgICAgICAgICAgIGlmIHR5cCBpbiBzZWxmLnNldF9oYW5kbGVyczoKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5zZXRfaGFuZGxlcnNbdHlwXQorICAgICAgICAgICAgcW5hbWUgPSB0eXAuX19xdWFsbmFtZV9fCisgICAgICAgICAgICBtb2RuYW1lID0gZ2V0YXR0cih0eXAsICdfX21vZHVsZV9fJywgJycpCisgICAgICAgICAgICBmdWxsX3BhdGggPSAnLicuam9pbigobW9kbmFtZSwgcW5hbWUpKSBpZiBtb2RuYW1lIGVsc2UgcW5hbWUKKyAgICAgICAgICAgIGlmIGZ1bGxfcGF0aF9mb3JfZXJyb3IgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBmdWxsX3BhdGhfZm9yX2Vycm9yID0gZnVsbF9wYXRoCisgICAgICAgICAgICBpZiBmdWxsX3BhdGggaW4gc2VsZi5zZXRfaGFuZGxlcnM6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuc2V0X2hhbmRsZXJzW2Z1bGxfcGF0aF0KKyAgICAgICAgICAgIGlmIHFuYW1lIGluIHNlbGYuc2V0X2hhbmRsZXJzOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnNldF9oYW5kbGVyc1txbmFtZV0KKyAgICAgICAgICAgIG5hbWUgPSB0eXAuX19uYW1lX18KKyAgICAgICAgICAgIGlmIG5hbWUgaW4gc2VsZi5zZXRfaGFuZGxlcnM6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuc2V0X2hhbmRsZXJzW25hbWVdCisgICAgICAgIGlmIE5vbmUgaW4gc2VsZi5zZXRfaGFuZGxlcnM6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5zZXRfaGFuZGxlcnNbTm9uZV0KKyAgICAgICAgcmFpc2UgS2V5RXJyb3IoZnVsbF9wYXRoX2Zvcl9lcnJvcikKKworCityYXdfZGF0YV9tYW5hZ2VyID0gQ29udGVudE1hbmFnZXIoKQorCisKK2RlZiBnZXRfdGV4dF9jb250ZW50KG1zZywgZXJyb3JzPSdyZXBsYWNlJyk6CisgICAgY29udGVudCA9IG1zZy5nZXRfcGF5bG9hZChkZWNvZGU9VHJ1ZSkKKyAgICBjaGFyc2V0ID0gbXNnLmdldF9wYXJhbSgnY2hhcnNldCcsICdBU0NJSScpCisgICAgcmV0dXJuIGNvbnRlbnQuZGVjb2RlKGNoYXJzZXQsIGVycm9ycz1lcnJvcnMpCityYXdfZGF0YV9tYW5hZ2VyLmFkZF9nZXRfaGFuZGxlcigndGV4dCcsIGdldF90ZXh0X2NvbnRlbnQpCisKKworZGVmIGdldF9ub25fdGV4dF9jb250ZW50KG1zZyk6CisgICAgcmV0dXJuIG1zZy5nZXRfcGF5bG9hZChkZWNvZGU9VHJ1ZSkKK2ZvciBtYWludHlwZSBpbiAnYXVkaW8gaW1hZ2UgdmlkZW8gYXBwbGljYXRpb24nLnNwbGl0KCk6CisgICAgcmF3X2RhdGFfbWFuYWdlci5hZGRfZ2V0X2hhbmRsZXIobWFpbnR5cGUsIGdldF9ub25fdGV4dF9jb250ZW50KQorCisKK2RlZiBnZXRfbWVzc2FnZV9jb250ZW50KG1zZyk6CisgICAgcmV0dXJuIG1zZy5nZXRfcGF5bG9hZCgwKQorZm9yIHN1YnR5cGUgaW4gJ3JmYzgyMiBleHRlcm5hbC1ib2R5Jy5zcGxpdCgpOgorICAgIHJhd19kYXRhX21hbmFnZXIuYWRkX2dldF9oYW5kbGVyKCdtZXNzYWdlLycrc3VidHlwZSwgZ2V0X21lc3NhZ2VfY29udGVudCkKKworCitkZWYgZ2V0X2FuZF9maXh1cF91bmtub3duX21lc3NhZ2VfY29udGVudChtc2cpOgorICAgICMgSWYgd2UgZG9uJ3QgdW5kZXJzdGFuZCBhIG1lc3NhZ2Ugc3VidHlwZSwgd2UgYXJlIHN1cHBvc2VkIHRvIHRyZWF0IGl0IGFzCisgICAgIyBpZiBpdCB3ZXJlIGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSwgcGVyCisgICAgIyB0b29scy5pZXRmLm9yZy9odG1sL3JmYzIwNDYjc2VjdGlvbi01LjIuNC4gIEZlZWRwYXJzZXIgZG9lc24ndCBkbyB0aGF0LAorICAgICMgc28gZG8gb3VyIGJlc3QgdG8gZml4IHRoaW5ncyB1cC4gIE5vdGUgdGhhdCBpdCBpcyAqbm90KiBhcHByb3ByaWF0ZSB0bworICAgICMgbW9kZWwgbWVzc2FnZS9wYXJ0aWFsIGNvbnRlbnQgYXMgTWVzc2FnZSBvYmplY3RzLCBzbyB0aGV5IGFyZSBoYW5kbGVkCisgICAgIyBoZXJlIGFzIHdlbGwuICAoSG93IHRvIHJlYXNzZW1ibGUgdGhlbSBpcyBvdXQgb2Ygc2NvcGUgZm9yIHRoaXMgY29tbWVudCA6KQorICAgIHJldHVybiBieXRlcyhtc2cuZ2V0X3BheWxvYWQoMCkpCityYXdfZGF0YV9tYW5hZ2VyLmFkZF9nZXRfaGFuZGxlcignbWVzc2FnZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRfYW5kX2ZpeHVwX3Vua25vd25fbWVzc2FnZV9jb250ZW50KQorCisKK2RlZiBfcHJlcGFyZV9zZXQobXNnLCBtYWludHlwZSwgc3VidHlwZSwgaGVhZGVycyk6CisgICAgbXNnWydDb250ZW50LVR5cGUnXSA9ICcvJy5qb2luKChtYWludHlwZSwgc3VidHlwZSkpCisgICAgaWYgaGVhZGVyczoKKyAgICAgICAgaWYgbm90IGhhc2F0dHIoaGVhZGVyc1swXSwgJ25hbWUnKToKKyAgICAgICAgICAgIG1wID0gbXNnLnBvbGljeQorICAgICAgICAgICAgaGVhZGVycyA9IFttcC5oZWFkZXJfZmFjdG9yeSgqbXAuaGVhZGVyX3NvdXJjZV9wYXJzZShbaGVhZGVyXSkpCisgICAgICAgICAgICAgICAgICAgICAgIGZvciBoZWFkZXIgaW4gaGVhZGVyc10KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZm9yIGhlYWRlciBpbiBoZWFkZXJzOgorICAgICAgICAgICAgICAgIGlmIGhlYWRlci5kZWZlY3RzOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBoZWFkZXIuZGVmZWN0c1swXQorICAgICAgICAgICAgICAgIG1zZ1toZWFkZXIubmFtZV0gPSBoZWFkZXIKKyAgICAgICAgZXhjZXB0IGVtYWlsLmVycm9ycy5IZWFkZXJEZWZlY3QgYXMgZXhjOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiSW52YWxpZCBoZWFkZXI6IHt9Ii5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlci5mb2xkKHBvbGljeT1tc2cucG9saWN5KSkpIGZyb20gZXhjCisKKworZGVmIF9maW5hbGl6ZV9zZXQobXNnLCBkaXNwb3NpdGlvbiwgZmlsZW5hbWUsIGNpZCwgcGFyYW1zKToKKyAgICBpZiBkaXNwb3NpdGlvbiBpcyBOb25lIGFuZCBmaWxlbmFtZSBpcyBub3QgTm9uZToKKyAgICAgICAgZGlzcG9zaXRpb24gPSAnYXR0YWNobWVudCcKKyAgICBpZiBkaXNwb3NpdGlvbiBpcyBub3QgTm9uZToKKyAgICAgICAgbXNnWydDb250ZW50LURpc3Bvc2l0aW9uJ10gPSBkaXNwb3NpdGlvbgorICAgIGlmIGZpbGVuYW1lIGlzIG5vdCBOb25lOgorICAgICAgICBtc2cuc2V0X3BhcmFtKCdmaWxlbmFtZScsCisgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyPSdDb250ZW50LURpc3Bvc2l0aW9uJywKKyAgICAgICAgICAgICAgICAgICAgICByZXBsYWNlPVRydWUpCisgICAgaWYgY2lkIGlzIG5vdCBOb25lOgorICAgICAgICBtc2dbJ0NvbnRlbnQtSUQnXSA9IGNpZAorICAgIGlmIHBhcmFtcyBpcyBub3QgTm9uZToKKyAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gcGFyYW1zLml0ZW1zKCk6CisgICAgICAgICAgICBtc2cuc2V0X3BhcmFtKGtleSwgdmFsdWUpCisKKworIyBYWFg6IFRoaXMgaXMgYSBjbGVhbmVkLXVwIHZlcnNpb24gb2YgYmFzZTY0bWltZS5ib2R5X2VuY29kZS4gIEl0IHdvdWxkCisjIGJlIG5pY2UgdG8gZHJvcCBib3RoIHRoaXMgYW5kIHF1b3ByaW1pbWUuYm9keV9lbmNvZGUgaW4gZmF2b3Igb2YKKyMgZW5oYW5jZWQgYmluYXNjaWkgcm91dGluZXMgdGhhdCBhY2NlcHRlZCBhIG1heF9saW5lX2xlbmd0aCBwYXJhbWV0ZXIuCitkZWYgX2VuY29kZV9iYXNlNjQoZGF0YSwgbWF4X2xpbmVfbGVuZ3RoKToKKyAgICBlbmNvZGVkX2xpbmVzID0gW10KKyAgICB1bmVuY29kZWRfYnl0ZXNfcGVyX2xpbmUgPSBtYXhfbGluZV9sZW5ndGggKiAzIC8vIDQKKyAgICBmb3IgaSBpbiByYW5nZSgwLCBsZW4oZGF0YSksIHVuZW5jb2RlZF9ieXRlc19wZXJfbGluZSk6CisgICAgICAgIHRoaXNsaW5lID0gZGF0YVtpOmkrdW5lbmNvZGVkX2J5dGVzX3Blcl9saW5lXQorICAgICAgICBlbmNvZGVkX2xpbmVzLmFwcGVuZChiaW5hc2NpaS5iMmFfYmFzZTY0KHRoaXNsaW5lKS5kZWNvZGUoJ2FzY2lpJykpCisgICAgcmV0dXJuICcnLmpvaW4oZW5jb2RlZF9saW5lcykKKworCitkZWYgX2VuY29kZV90ZXh0KHN0cmluZywgY2hhcnNldCwgY3RlLCBwb2xpY3kpOgorICAgIGxpbmVzID0gc3RyaW5nLmVuY29kZShjaGFyc2V0KS5zcGxpdGxpbmVzKCkKKyAgICBsaW5lc2VwID0gcG9saWN5LmxpbmVzZXAuZW5jb2RlKCdhc2NpaScpCisgICAgZGVmIGVtYmVkZWRfYm9keShsaW5lcyk6IHJldHVybiBsaW5lc2VwLmpvaW4obGluZXMpICsgbGluZXNlcAorICAgIGRlZiBub3JtYWxfYm9keShsaW5lcyk6IHJldHVybiBiJ1xuJy5qb2luKGxpbmVzKSArIGInXG4nCisgICAgaWYgY3RlPT1Ob25lOgorICAgICAgICAjIFVzZSBoZXVyaXN0aWNzIHRvIGRlY2lkZSBvbiB0aGUgImJlc3QiIGVuY29kaW5nLgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gJzdiaXQnLCBub3JtYWxfYm9keShsaW5lcykuZGVjb2RlKCdhc2NpaScpCisgICAgICAgIGV4Y2VwdCBVbmljb2RlRGVjb2RlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGlmIChwb2xpY3kuY3RlX3R5cGUgPT0gJzhiaXQnIGFuZAorICAgICAgICAgICAgICAgIG1heChsZW4oeCkgZm9yIHggaW4gbGluZXMpIDw9IHBvbGljeS5tYXhfbGluZV9sZW5ndGgpOgorICAgICAgICAgICAgcmV0dXJuICc4Yml0Jywgbm9ybWFsX2JvZHkobGluZXMpLmRlY29kZSgnYXNjaWknLCAnc3Vycm9nYXRlZXNjYXBlJykKKyAgICAgICAgc25pZmYgPSBlbWJlZGVkX2JvZHkobGluZXNbOjEwXSkKKyAgICAgICAgc25pZmZfcXAgPSBxdW9wcmltaW1lLmJvZHlfZW5jb2RlKHNuaWZmLmRlY29kZSgnbGF0aW4tMScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9saWN5Lm1heF9saW5lX2xlbmd0aCkKKyAgICAgICAgc25pZmZfYmFzZTY0ID0gYmluYXNjaWkuYjJhX2Jhc2U2NChzbmlmZikKKyAgICAgICAgIyBUaGlzIGlzIGEgbGl0dGxlIHVuZmFpciB0byBxcDsgaXQgaW5jbHVkZXMgbGluZXNlcHMsIGJhc2U2NCBkb2Vzbid0LgorICAgICAgICBpZiBsZW4oc25pZmZfcXApID4gbGVuKHNuaWZmX2Jhc2U2NCk6CisgICAgICAgICAgICBjdGUgPSAnYmFzZTY0JworICAgICAgICBlbHNlOgorICAgICAgICAgICAgY3RlID0gJ3F1b3RlZC1wcmludGFibGUnCisgICAgICAgICAgICBpZiBsZW4obGluZXMpIDw9IDEwOgorICAgICAgICAgICAgICAgIHJldHVybiBjdGUsIHNuaWZmX3FwCisgICAgaWYgY3RlID09ICc3Yml0JzoKKyAgICAgICAgZGF0YSA9IG5vcm1hbF9ib2R5KGxpbmVzKS5kZWNvZGUoJ2FzY2lpJykKKyAgICBlbGlmIGN0ZSA9PSAnOGJpdCc6CisgICAgICAgIGRhdGEgPSBub3JtYWxfYm9keShsaW5lcykuZGVjb2RlKCdhc2NpaScsICdzdXJyb2dhdGVlc2NhcGUnKQorICAgIGVsaWYgY3RlID09ICdxdW90ZWQtcHJpbnRhYmxlJzoKKyAgICAgICAgZGF0YSA9IHF1b3ByaW1pbWUuYm9keV9lbmNvZGUobm9ybWFsX2JvZHkobGluZXMpLmRlY29kZSgnbGF0aW4tMScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2xpY3kubWF4X2xpbmVfbGVuZ3RoKQorICAgIGVsaWYgY3RlID09ICdiYXNlNjQnOgorICAgICAgICBkYXRhID0gX2VuY29kZV9iYXNlNjQoZW1iZWRlZF9ib2R5KGxpbmVzKSwgcG9saWN5Lm1heF9saW5lX2xlbmd0aCkKKyAgICBlbHNlOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJVbmtub3duIGNvbnRlbnQgdHJhbnNmZXIgZW5jb2Rpbmcge30iLmZvcm1hdChjdGUpKQorICAgIHJldHVybiBjdGUsIGRhdGEKKworCitkZWYgc2V0X3RleHRfY29udGVudChtc2csIHN0cmluZywgc3VidHlwZT0icGxhaW4iLCBjaGFyc2V0PSd1dGYtOCcsIGN0ZT1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgZGlzcG9zaXRpb249Tm9uZSwgZmlsZW5hbWU9Tm9uZSwgY2lkPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICBwYXJhbXM9Tm9uZSwgaGVhZGVycz1Ob25lKToKKyAgICBfcHJlcGFyZV9zZXQobXNnLCAndGV4dCcsIHN1YnR5cGUsIGhlYWRlcnMpCisgICAgY3RlLCBwYXlsb2FkID0gX2VuY29kZV90ZXh0KHN0cmluZywgY2hhcnNldCwgY3RlLCBtc2cucG9saWN5KQorICAgIG1zZy5zZXRfcGF5bG9hZChwYXlsb2FkKQorICAgIG1zZy5zZXRfcGFyYW0oJ2NoYXJzZXQnLAorICAgICAgICAgICAgICAgICAgZW1haWwuY2hhcnNldC5BTElBU0VTLmdldChjaGFyc2V0LCBjaGFyc2V0KSwKKyAgICAgICAgICAgICAgICAgIHJlcGxhY2U9VHJ1ZSkKKyAgICBtc2dbJ0NvbnRlbnQtVHJhbnNmZXItRW5jb2RpbmcnXSA9IGN0ZQorICAgIF9maW5hbGl6ZV9zZXQobXNnLCBkaXNwb3NpdGlvbiwgZmlsZW5hbWUsIGNpZCwgcGFyYW1zKQorcmF3X2RhdGFfbWFuYWdlci5hZGRfc2V0X2hhbmRsZXIoc3RyLCBzZXRfdGV4dF9jb250ZW50KQorCisKK2RlZiBzZXRfbWVzc2FnZV9jb250ZW50KG1zZywgbWVzc2FnZSwgc3VidHlwZT0icmZjODIyIiwgY3RlPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgIGRpc3Bvc2l0aW9uPU5vbmUsIGZpbGVuYW1lPU5vbmUsIGNpZD1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXM9Tm9uZSwgaGVhZGVycz1Ob25lKToKKyAgICBpZiBzdWJ0eXBlID09ICdwYXJ0aWFsJzoKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigibWVzc2FnZS9wYXJ0aWFsIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIE1lc3NhZ2Ugb2JqZWN0cyIpCisgICAgaWYgc3VidHlwZSA9PSAncmZjODIyJzoKKyAgICAgICAgaWYgY3RlIG5vdCBpbiAoTm9uZSwgJzdiaXQnLCAnOGJpdCcsICdiaW5hcnknKToKKyAgICAgICAgICAgICMgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMjA0NiNzZWN0aW9uLTUuMi4xIG1hbmRhdGUuCisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAorICAgICAgICAgICAgICAgICJtZXNzYWdlL3JmYzgyMiBwYXJ0cyBkbyBub3Qgc3VwcG9ydCBjdGU9e30iLmZvcm1hdChjdGUpKQorICAgICAgICAjIDhiaXQgd2lsbCBnZXQgY29lcmNlZCBvbiBzZXJpYWxpemF0aW9uIGlmIHBvbGljeS5jdGVfdHlwZT0nN2JpdCcuICBXZQorICAgICAgICAjIG1heSBlbmQgdXAgY2xhaW1pbmcgOGJpdCB3aGVuIGl0IGlzbid0IG5lZWRlZCwgYnV0IHRoZSBvbmx5IG5lZ2F0aXZlCisgICAgICAgICMgcmVzdWx0IG9mIHRoYXQgc2hvdWxkIGJlIGEgZ2F0ZXdheSB0aGF0IG5lZWRzIHRvIGNvZXJjZSB0byA3Yml0CisgICAgICAgICMgaGF2aW5nIHRvIGxvb2sgdGhyb3VnaCB0aGUgd2hvbGUgZW1iZWRkZWQgbWVzc2FnZSB0byBkaXNjb3ZlciB3aGV0aGVyCisgICAgICAgICMgb3Igbm90IGl0IGFjdHVhbGx5IGhhcyB0byBkbyBhbnl0aGluZy4KKyAgICAgICAgY3RlID0gJzhiaXQnIGlmIGN0ZSBpcyBOb25lIGVsc2UgY3RlCisgICAgZWxpZiBzdWJ0eXBlID09ICdleHRlcm5hbC1ib2R5JzoKKyAgICAgICAgaWYgY3RlIG5vdCBpbiAoTm9uZSwgJzdiaXQnKToKKyAgICAgICAgICAgICMgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMjA0NiNzZWN0aW9uLTUuMi4zIG1hbmRhdGUuCisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAorICAgICAgICAgICAgICAgICJtZXNzYWdlL2V4dGVybmFsLWJvZHkgcGFydHMgZG8gbm90IHN1cHBvcnQgY3RlPXt9Ii5mb3JtYXQoY3RlKSkKKyAgICAgICAgY3RlID0gJzdiaXQnCisgICAgZWxpZiBjdGUgaXMgTm9uZToKKyAgICAgICAgIyBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMyMDQ2I3NlY3Rpb24tNS4yLjQgc2F5cyBhbGwgZnV0dXJlCisgICAgICAgICMgc3VidHlwZXMgc2hvdWxkIGJlIHJlc3RyaWN0ZWQgdG8gN2JpdCwgc28gYXNzdW1lIHRoYXQuCisgICAgICAgIGN0ZSA9ICc3Yml0JworICAgIF9wcmVwYXJlX3NldChtc2csICdtZXNzYWdlJywgc3VidHlwZSwgaGVhZGVycykKKyAgICBtc2cuc2V0X3BheWxvYWQoW21lc3NhZ2VdKQorICAgIG1zZ1snQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZyddID0gY3RlCisgICAgX2ZpbmFsaXplX3NldChtc2csIGRpc3Bvc2l0aW9uLCBmaWxlbmFtZSwgY2lkLCBwYXJhbXMpCityYXdfZGF0YV9tYW5hZ2VyLmFkZF9zZXRfaGFuZGxlcihlbWFpbC5tZXNzYWdlLk1lc3NhZ2UsIHNldF9tZXNzYWdlX2NvbnRlbnQpCisKKworZGVmIHNldF9ieXRlc19jb250ZW50KG1zZywgZGF0YSwgbWFpbnR5cGUsIHN1YnR5cGUsIGN0ZT0nYmFzZTY0JywKKyAgICAgICAgICAgICAgICAgICAgIGRpc3Bvc2l0aW9uPU5vbmUsIGZpbGVuYW1lPU5vbmUsIGNpZD1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgcGFyYW1zPU5vbmUsIGhlYWRlcnM9Tm9uZSk6CisgICAgX3ByZXBhcmVfc2V0KG1zZywgbWFpbnR5cGUsIHN1YnR5cGUsIGhlYWRlcnMpCisgICAgaWYgY3RlID09ICdiYXNlNjQnOgorICAgICAgICBkYXRhID0gX2VuY29kZV9iYXNlNjQoZGF0YSwgbWF4X2xpbmVfbGVuZ3RoPW1zZy5wb2xpY3kubWF4X2xpbmVfbGVuZ3RoKQorICAgIGVsaWYgY3RlID09ICdxdW90ZWQtcHJpbnRhYmxlJzoKKyAgICAgICAgIyBYWFg6IHF1b3ByaW1pbWUuYm9keV9lbmNvZGUgd29uJ3QgZW5jb2RlIG5ld2xpbmUgY2hhcmFjdGVycyBpbiBkYXRhLAorICAgICAgICAjIHNvIHdlIGNhbid0IHVzZSBpdC4gIFRoaXMgbWVhbnMgbWF4X2xpbmVfbGVuZ3RoIGlzIGlnbm9yZWQuICBBbm90aGVyCisgICAgICAgICMgYnVnIHRvIGZpeCBsYXRlci4gIChOb3RlOiBlbmNvZGVycy5xdW9wcmkgaXMgYnJva2VuIG9uIGxpbmUgZW5kcy4pCisgICAgICAgIGRhdGEgPSBiaW5hc2NpaS5iMmFfcXAoZGF0YSwgaXN0ZXh0PUZhbHNlLCBoZWFkZXI9RmFsc2UsIHF1b3RldGFicz1UcnVlKQorICAgICAgICBkYXRhID0gZGF0YS5kZWNvZGUoJ2FzY2lpJykKKyAgICBlbGlmIGN0ZSA9PSAnN2JpdCc6CisgICAgICAgICMgTWFrZSBzdXJlIGl0IHJlYWxseSBpcyBvbmx5IEFTQ0lJLiAgVGhlIGVhcmx5IHdhcm5pbmcgaGVyZSBzZWVtcworICAgICAgICAjIHdvcnRoIHRoZSBvdmVyaGVhZC4uLmlmIHlvdSBjYXJlIHdyaXRlIHlvdXIgb3duIGNvbnRlbnQgbWFuYWdlciA6KS4KKyAgICAgICAgZGF0YS5lbmNvZGUoJ2FzY2lpJykKKyAgICBlbGlmIGN0ZSBpbiAoJzhiaXQnLCAnYmluYXJ5Jyk6CisgICAgICAgIGRhdGEgPSBkYXRhLmRlY29kZSgnYXNjaWknLCAnc3Vycm9nYXRlZXNjYXBlJykKKyAgICBtc2cuc2V0X3BheWxvYWQoZGF0YSkKKyAgICBtc2dbJ0NvbnRlbnQtVHJhbnNmZXItRW5jb2RpbmcnXSA9IGN0ZQorICAgIF9maW5hbGl6ZV9zZXQobXNnLCBkaXNwb3NpdGlvbiwgZmlsZW5hbWUsIGNpZCwgcGFyYW1zKQorZm9yIHR5cCBpbiAoYnl0ZXMsIGJ5dGVhcnJheSwgbWVtb3J5dmlldyk6CisgICAgcmF3X2RhdGFfbWFuYWdlci5hZGRfc2V0X2hhbmRsZXIodHlwLCBzZXRfYnl0ZXNfY29udGVudCkKZGlmZiAtLWdpdCBhL0xpYi9lbWFpbC9lbmNvZGVycy5weSBiL0xpYi9lbWFpbC9lbmNvZGVycy5weQppbmRleCBmOTY1N2YwLi4wYTY2YWNiIDEwMDY0NAotLS0gYS9MaWIvZW1haWwvZW5jb2RlcnMucHkKKysrIGIvTGliL2VtYWlsL2VuY29kZXJzLnB5CkBAIC01NCwyMSArNTQsMTIgQEAKICAgICAgICAgIyBUaGVyZSdzIG5vIHBheWxvYWQuICBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2UgdXNlIDdiaXQKICAgICAgICAgbXNnWydDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nJ10gPSAnN2JpdCcKICAgICAgICAgcmV0dXJuCi0gICAgIyBXZSBwbGF5IGEgdHJpY2sgdG8gbWFrZSB0aGlzIGdvIGZhc3QuICBJZiBlbmNvZGluZy9kZWNvZGUgdG8gQVNDSUkKLSAgICAjIHN1Y2NlZWRzLCB3ZSBrbm93IHRoZSBkYXRhIG11c3QgYmUgN2JpdCwgb3RoZXJ3aXNlIHRyZWF0IGl0IGFzIDhiaXQuCisgICAgIyBXZSBwbGF5IGEgdHJpY2sgdG8gbWFrZSB0aGlzIGdvIGZhc3QuICBJZiBkZWNvZGluZyBmcm9tIEFTQ0lJIHN1Y2NlZWRzLAorICAgICMgd2Uga25vdyB0aGUgZGF0YSBtdXN0IGJlIDdiaXQsIG90aGVyd2lzZSB0cmVhdCBpdCBhcyA4Yml0LgogICAgIHRyeToKLSAgICAgICAgaWYgaXNpbnN0YW5jZShvcmlnLCBzdHIpOgotICAgICAgICAgICAgb3JpZy5lbmNvZGUoJ2FzY2lpJykKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIG9yaWcuZGVjb2RlKCdhc2NpaScpCisgICAgICAgIG9yaWcuZGVjb2RlKCdhc2NpaScpCiAgICAgZXhjZXB0IFVuaWNvZGVFcnJvcjoKLSAgICAgICAgY2hhcnNldCA9IG1zZy5nZXRfY2hhcnNldCgpCi0gICAgICAgIG91dHB1dF9jc2V0ID0gY2hhcnNldCBhbmQgY2hhcnNldC5vdXRwdXRfY2hhcnNldAotICAgICAgICAjIGlzby0yMDIyLSogaXMgbm9uLUFTQ0lJIGJ1dCBlbmNvZGVzIHRvIGEgNy1iaXQgcmVwcmVzZW50YXRpb24KLSAgICAgICAgaWYgb3V0cHV0X2NzZXQgYW5kIG91dHB1dF9jc2V0Lmxvd2VyKCkuc3RhcnRzd2l0aCgnaXNvLTIwMjItJyk6Ci0gICAgICAgICAgICBtc2dbJ0NvbnRlbnQtVHJhbnNmZXItRW5jb2RpbmcnXSA9ICc3Yml0JwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgbXNnWydDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nJ10gPSAnOGJpdCcKKyAgICAgICAgbXNnWydDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nJ10gPSAnOGJpdCcKICAgICBlbHNlOgogICAgICAgICBtc2dbJ0NvbnRlbnQtVHJhbnNmZXItRW5jb2RpbmcnXSA9ICc3Yml0JwogCmRpZmYgLS1naXQgYS9MaWIvZW1haWwvZmVlZHBhcnNlci5weSBiL0xpYi9lbWFpbC9mZWVkcGFyc2VyLnB5CmluZGV4IGVhNDFlOTUuLmM5NWIyN2YgMTAwNjQ0Ci0tLSBhL0xpYi9lbWFpbC9mZWVkcGFyc2VyLnB5CisrKyBiL0xpYi9lbWFpbC9mZWVkcGFyc2VyLnB5CkBAIC0zMyw3ICszMyw3IEBACiBOTENSRV9jcmFjayA9IHJlLmNvbXBpbGUoJyhcclxufFxyfFxuKScpCiAjIFJGQyAyODIyICQzLjYuOCBPcHRpb25hbCBmaWVsZHMuICBmdGV4dCBpcyAlZDMzLTU3IC8gJWQ1OS0xMjYsIEFueSBjaGFyYWN0ZXIKICMgZXhjZXB0IGNvbnRyb2xzLCBTUCwgYW5kICI6Ii4KLWhlYWRlclJFID0gcmUuY29tcGlsZShyJ14oRnJvbSB8W1wwNDEtXDA3MVwwNzMtXDE3Nl17MSx9OnxbXHQgXSknKQoraGVhZGVyUkUgPSByZS5jb21waWxlKHInXihGcm9tIHxbXDA0MS1cMDcxXDA3My1cMTc2XSo6fFtcdCBdKScpCiBFTVBUWVNUUklORyA9ICcnCiBOTCA9ICdcbicKIApAQCAtNTAsOCArNTAsOCBAQAogICAgIHNpbXBsZSBhYnN0cmFjdGlvbiAtLSBpdCBwYXJzZXMgdW50aWwgRU9GIGNsb3NlcyB0aGUgY3VycmVudCBtZXNzYWdlLgogICAgICIiIgogICAgIGRlZiBfX2luaXRfXyhzZWxmKToKLSAgICAgICAgIyBUaGUgbGFzdCBwYXJ0aWFsIGxpbmUgcHVzaGVkIGludG8gdGhpcyBvYmplY3QuCi0gICAgICAgIHNlbGYuX3BhcnRpYWwgPSAnJworICAgICAgICAjIENodW5rcyBvZiB0aGUgbGFzdCBwYXJ0aWFsIGxpbmUgcHVzaGVkIGludG8gdGhpcyBvYmplY3QuCisgICAgICAgIHNlbGYuX3BhcnRpYWwgPSBbXQogICAgICAgICAjIFRoZSBsaXN0IG9mIGZ1bGwsIHB1c2hlZCBsaW5lcywgaW4gcmV2ZXJzZSBvcmRlcgogICAgICAgICBzZWxmLl9saW5lcyA9IFtdCiAgICAgICAgICMgVGhlIHN0YWNrIG9mIGZhbHNlLUVPRiBjaGVja2luZyBwcmVkaWNhdGVzLgpAQCAtNjcsOCArNjcsOCBAQAogCiAgICAgZGVmIGNsb3NlKHNlbGYpOgogICAgICAgICAjIERvbid0IGZvcmdldCBhbnkgdHJhaWxpbmcgcGFydGlhbCBsaW5lLgotICAgICAgICBzZWxmLl9saW5lcy5hcHBlbmQoc2VsZi5fcGFydGlhbCkKLSAgICAgICAgc2VsZi5fcGFydGlhbCA9ICcnCisgICAgICAgIHNlbGYucHVzaGxpbmVzKCcnLmpvaW4oc2VsZi5fcGFydGlhbCkuc3BsaXRsaW5lcyhUcnVlKSkKKyAgICAgICAgc2VsZi5fcGFydGlhbCA9IFtdCiAgICAgICAgIHNlbGYuX2Nsb3NlZCA9IFRydWUKIAogICAgIGRlZiByZWFkbGluZShzZWxmKToKQEAgLTk2LDI2ICs5NiwyNyBAQAogCiAgICAgZGVmIHB1c2goc2VsZiwgZGF0YSk6CiAgICAgICAgICIiIlB1c2ggc29tZSBuZXcgZGF0YSBpbnRvIHRoaXMgb2JqZWN0LiIiIgotICAgICAgICAjIEhhbmRsZSBhbnkgcHJldmlvdXMgbGVmdG92ZXJzCi0gICAgICAgIGRhdGEsIHNlbGYuX3BhcnRpYWwgPSBzZWxmLl9wYXJ0aWFsICsgZGF0YSwgJycKLSAgICAgICAgIyBDcmFjayBpbnRvIGxpbmVzLCBidXQgcHJlc2VydmUgdGhlIG5ld2xpbmVzIG9uIHRoZSBlbmQgb2YgZWFjaAotICAgICAgICBwYXJ0cyA9IE5MQ1JFX2NyYWNrLnNwbGl0KGRhdGEpCi0gICAgICAgICMgVGhlICphaGVtKiBpbnRlcmVzdGluZyBiZWhhdmlvdXIgb2YgcmUuc3BsaXQgd2hlbiBzdXBwbGllZCBncm91cGluZwotICAgICAgICAjIHBhcmVudGhlc2VzIGlzIHRoYXQgdGhlIGxhc3QgZWxlbWVudCBvZiB0aGUgcmVzdWx0aW5nIGxpc3QgaXMgdGhlCi0gICAgICAgICMgZGF0YSBhZnRlciB0aGUgZmluYWwgUkUuICBJbiB0aGUgY2FzZSBvZiBhIE5ML0NSIHRlcm1pbmF0ZWQgc3RyaW5nLAotICAgICAgICAjIHRoaXMgaXMgdGhlIGVtcHR5IHN0cmluZy4KLSAgICAgICAgc2VsZi5fcGFydGlhbCA9IHBhcnRzLnBvcCgpCi0gICAgICAgICNHQU4gMjlNYXIwOSAgYnVncyAxNTU1NTcwLCAxNzIxODYyICBDb25mdXNpb24gYXQgOEsgYm91bmRhcnkgZW5kaW5nIHdpdGggXHI6Ci0gICAgICAgICMgaXMgdGhlcmUgYSBcbiB0byBmb2xsb3cgbGF0ZXI/Ci0gICAgICAgIGlmIG5vdCBzZWxmLl9wYXJ0aWFsIGFuZCBwYXJ0cyBhbmQgcGFydHNbLTFdLmVuZHN3aXRoKCdccicpOgotICAgICAgICAgICAgc2VsZi5fcGFydGlhbCA9IHBhcnRzLnBvcCgtMikrcGFydHMucG9wKCkKLSAgICAgICAgIyBwYXJ0cyBpcyBhIGxpc3Qgb2Ygc3RyaW5ncywgYWx0ZXJuYXRpbmcgYmV0d2VlbiB0aGUgbGluZSBjb250ZW50cwotICAgICAgICAjIGFuZCB0aGUgZW9sIGNoYXJhY3RlcihzKS4gIEdhdGhlciB1cCBhIGxpc3Qgb2YgbGluZXMgYWZ0ZXIKLSAgICAgICAgIyByZS1hdHRhY2hpbmcgdGhlIG5ld2xpbmVzLgotICAgICAgICBsaW5lcyA9IFtdCi0gICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihwYXJ0cykgLy8gMik6Ci0gICAgICAgICAgICBsaW5lcy5hcHBlbmQocGFydHNbaSoyXSArIHBhcnRzW2kqMisxXSkKLSAgICAgICAgc2VsZi5wdXNobGluZXMobGluZXMpCisgICAgICAgICMgQ3JhY2sgaW50byBsaW5lcywgYnV0IHByZXNlcnZlIHRoZSBsaW5lc2VwIGNoYXJhY3RlcnMgb24gdGhlIGVuZCBvZiBlYWNoCisgICAgICAgIHBhcnRzID0gZGF0YS5zcGxpdGxpbmVzKFRydWUpCisKKyAgICAgICAgaWYgbm90IHBhcnRzIG9yIG5vdCBwYXJ0c1swXS5lbmRzd2l0aCgoJ1xuJywgJ1xyJykpOgorICAgICAgICAgICAgIyBObyBuZXcgY29tcGxldGUgbGluZXMsIHNvIGp1c3QgYWNjdW11bGF0ZSBwYXJ0aWFscworICAgICAgICAgICAgc2VsZi5fcGFydGlhbCArPSBwYXJ0cworICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaWYgc2VsZi5fcGFydGlhbDoKKyAgICAgICAgICAgICMgSWYgdGhlcmUgYXJlIHByZXZpb3VzIGxlZnRvdmVycywgY29tcGxldGUgdGhlbSBub3cKKyAgICAgICAgICAgIHNlbGYuX3BhcnRpYWwuYXBwZW5kKHBhcnRzWzBdKQorICAgICAgICAgICAgcGFydHNbMDoxXSA9ICcnLmpvaW4oc2VsZi5fcGFydGlhbCkuc3BsaXRsaW5lcyhUcnVlKQorICAgICAgICAgICAgZGVsIHNlbGYuX3BhcnRpYWxbOl0KKworICAgICAgICAjIElmIHRoZSBsYXN0IGVsZW1lbnQgb2YgdGhlIGxpc3QgZG9lcyBub3QgZW5kIGluIGEgbmV3bGluZSwgdGhlbiB0cmVhdAorICAgICAgICAjIGl0IGFzIGEgcGFydGlhbCBsaW5lLiAgV2Ugb25seSBjaGVjayBmb3IgJ1xuJyBoZXJlIGJlY2F1c2UgYSBsaW5lCisgICAgICAgICMgZW5kaW5nIHdpdGggJ1xyJyBtaWdodCBiZSBhIGxpbmUgdGhhdCB3YXMgc3BsaXQgaW4gdGhlIG1pZGRsZSBvZiBhCisgICAgICAgICMgJ1xyXG4nIHNlcXVlbmNlIChzZWUgYnVncyAxNTU1NTcwIGFuZCAxNzIxODYyKS4KKyAgICAgICAgaWYgbm90IHBhcnRzWy0xXS5lbmRzd2l0aCgnXG4nKToKKyAgICAgICAgICAgIHNlbGYuX3BhcnRpYWwgPSBbcGFydHMucG9wKCldCisgICAgICAgIHNlbGYucHVzaGxpbmVzKHBhcnRzKQogCiAgICAgZGVmIHB1c2hsaW5lcyhzZWxmLCBsaW5lcyk6CiAgICAgICAgICMgUmV2ZXJzZSBhbmQgaW5zZXJ0IGF0IHRoZSBmcm9udCBvZiB0aGUgbGluZXMuCkBAIC0xMzUsNyArMTM2LDcgQEAKIGNsYXNzIEZlZWRQYXJzZXI6CiAgICAgIiIiQSBmZWVkLXN0eWxlIHBhcnNlciBvZiBlbWFpbC4iIiIKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBfZmFjdG9yeT1tZXNzYWdlLk1lc3NhZ2UsICosIHBvbGljeT1jb21wYXQzMik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIF9mYWN0b3J5PU5vbmUsICosIHBvbGljeT1jb21wYXQzMik6CiAgICAgICAgICIiIl9mYWN0b3J5IGlzIGNhbGxlZCB3aXRoIG5vIGFyZ3VtZW50cyB0byBjcmVhdGUgYSBuZXcgbWVzc2FnZSBvYmoKIAogICAgICAgICBUaGUgcG9saWN5IGtleXdvcmQgc3BlY2lmaWVzIGEgcG9saWN5IG9iamVjdCB0aGF0IGNvbnRyb2xzIGEgbnVtYmVyIG9mCkBAIC0xNDMsMTQgKzE0NCwyMyBAQAogICAgICAgICBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgogCiAgICAgICAgICIiIgotICAgICAgICBzZWxmLl9mYWN0b3J5ID0gX2ZhY3RvcnkKICAgICAgICAgc2VsZi5wb2xpY3kgPSBwb2xpY3kKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgX2ZhY3RvcnkocG9saWN5PXNlbGYucG9saWN5KQotICAgICAgICAgICAgc2VsZi5fZmFjdG9yeV9rd2RzID0gbGFtYmRhOiB7J3BvbGljeSc6IHNlbGYucG9saWN5fQotICAgICAgICBleGNlcHQgVHlwZUVycm9yOgotICAgICAgICAgICAgIyBBc3N1bWUgdGhpcyBpcyBhbiBvbGQtc3R5bGUgZmFjdG9yeQotICAgICAgICAgICAgc2VsZi5fZmFjdG9yeV9rd2RzID0gbGFtYmRhOiB7fQorICAgICAgICBzZWxmLl9mYWN0b3J5X2t3ZHMgPSBsYW1iZGE6IHsncG9saWN5Jzogc2VsZi5wb2xpY3l9CisgICAgICAgIGlmIF9mYWN0b3J5IGlzIE5vbmU6CisgICAgICAgICAgICAjIFdoYXQgdGhpcyBzaG91bGQgYmU6CisgICAgICAgICAgICAjc2VsZi5fZmFjdG9yeSA9IHBvbGljeS5kZWZhdWx0X21lc3NhZ2VfZmFjdG9yeQorICAgICAgICAgICAgIyBidXQsIGJlY2F1c2Ugd2UgYXJlIHBvc3QgMy40IGZlYXR1cmUgZnJlZXplLCBmaXggd2l0aCB0ZW1wIGhhY2s6CisgICAgICAgICAgICBpZiBzZWxmLnBvbGljeSBpcyBjb21wYXQzMjoKKyAgICAgICAgICAgICAgICBzZWxmLl9mYWN0b3J5ID0gbWVzc2FnZS5NZXNzYWdlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuX2ZhY3RvcnkgPSBtZXNzYWdlLkVtYWlsTWVzc2FnZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fZmFjdG9yeSA9IF9mYWN0b3J5CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgX2ZhY3RvcnkocG9saWN5PXNlbGYucG9saWN5KQorICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgICAgICAjIEFzc3VtZSB0aGlzIGlzIGFuIG9sZC1zdHlsZSBmYWN0b3J5CisgICAgICAgICAgICAgICAgc2VsZi5fZmFjdG9yeV9rd2RzID0gbGFtYmRhOiB7fQogICAgICAgICBzZWxmLl9pbnB1dCA9IEJ1ZmZlcmVkU3ViRmlsZSgpCiAgICAgICAgIHNlbGYuX21zZ3N0YWNrID0gW10KICAgICAgICAgc2VsZi5fcGFyc2UgPSBzZWxmLl9wYXJzZWdlbigpLl9fbmV4dF9fCkBAIC01MDEsNiArNTExLDE1IEBACiAgICAgICAgICAgICAjIFRoZXJlIHdpbGwgYWx3YXlzIGJlIGEgY29sb24sIGJlY2F1c2UgaWYgdGhlcmUgd2Fzbid0IHRoZSBwYXJ0IG9mCiAgICAgICAgICAgICAjIHRoZSBwYXJzZXIgdGhhdCBjYWxscyB1cyB3b3VsZCBoYXZlIHN0YXJ0ZWQgcGFyc2luZyB0aGUgYm9keS4KICAgICAgICAgICAgIGkgPSBsaW5lLmZpbmQoJzonKQorCisgICAgICAgICAgICAjIElmIHRoZSBjb2xvbiBpcyBvbiB0aGUgc3RhcnQgb2YgdGhlIGxpbmUgdGhlIGhlYWRlciBpcyBjbGVhcmx5CisgICAgICAgICAgICAjIG1hbGZvcm1lZCwgYnV0IHdlIG1pZ2h0IGJlIGFibGUgdG8gc2FsdmFnZSB0aGUgcmVzdCBvZiB0aGUKKyAgICAgICAgICAgICMgbWVzc2FnZS4gVHJhY2sgdGhlIGVycm9yIGJ1dCBrZWVwIGdvaW5nLgorICAgICAgICAgICAgaWYgaSA9PSAwOgorICAgICAgICAgICAgICAgIGRlZmVjdCA9IGVycm9ycy5JbnZhbGlkSGVhZGVyRGVmZWN0KCJNaXNzaW5nIGhlYWRlciBuYW1lLiIpCisgICAgICAgICAgICAgICAgc2VsZi5fY3VyLmRlZmVjdHMuYXBwZW5kKGRlZmVjdCkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCiAgICAgICAgICAgICBhc3NlcnQgaT4wLCAiX3BhcnNlX2hlYWRlcnMgZmVkIGxpbmUgd2l0aCBubyA6IGFuZCBubyBsZWFkaW5nIFdTIgogICAgICAgICAgICAgbGFzdGhlYWRlciA9IGxpbmVbOmldCiAgICAgICAgICAgICBsYXN0dmFsdWUgPSBbbGluZV0KZGlmZiAtLWdpdCBhL0xpYi9lbWFpbC9nZW5lcmF0b3IucHkgYi9MaWIvZW1haWwvZ2VuZXJhdG9yLnB5CmluZGV4IGU0YTg2ZDQuLjQ3MzU3MjEgMTAwNjQ0Ci0tLSBhL0xpYi9lbWFpbC9nZW5lcmF0b3IucHkKKysrIGIvTGliL2VtYWlsL2dlbmVyYXRvci5weQpAQCAtMTAsMTQgKzEwLDEwIEBACiBpbXBvcnQgc3lzCiBpbXBvcnQgdGltZQogaW1wb3J0IHJhbmRvbQotaW1wb3J0IHdhcm5pbmdzCiAKIGZyb20gY29weSBpbXBvcnQgZGVlcGNvcHkKIGZyb20gaW8gaW1wb3J0IFN0cmluZ0lPLCBCeXRlc0lPCi1mcm9tIGVtYWlsLl9wb2xpY3liYXNlIGltcG9ydCBjb21wYXQzMgotZnJvbSBlbWFpbC5oZWFkZXIgaW1wb3J0IEhlYWRlcgogZnJvbSBlbWFpbC51dGlscyBpbXBvcnQgX2hhc19zdXJyb2dhdGVzCi1pbXBvcnQgZW1haWwuY2hhcnNldCBhcyBfY2hhcnNldAogCiBVTkRFUlNDT1JFID0gJ18nCiBOTCA9ICdcbicgICMgWFhYOiBubyBsb25nZXIgdXNlZCBieSB0aGUgY29kZSBiZWxvdy4KQEAgLTU1LDggKzUxLDkgQEAKICAgICAgICAgYnkgUkZDIDI4MjIuCiAKICAgICAgICAgVGhlIHBvbGljeSBrZXl3b3JkIHNwZWNpZmllcyBhIHBvbGljeSBvYmplY3QgdGhhdCBjb250cm9scyBhIG51bWJlciBvZgotICAgICAgICBhc3BlY3RzIG9mIHRoZSBnZW5lcmF0b3IncyBvcGVyYXRpb24uICBUaGUgZGVmYXVsdCBwb2xpY3kgbWFpbnRhaW5zCi0gICAgICAgIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCisgICAgICAgIGFzcGVjdHMgb2YgdGhlIGdlbmVyYXRvcidzIG9wZXJhdGlvbi4gIElmIG5vIHBvbGljeSBpcyBzcGVjaWZpZWQsCisgICAgICAgIHRoZSBwb2xpY3kgYXNzb2NpYXRlZCB3aXRoIHRoZSBNZXNzYWdlIG9iamVjdCBwYXNzZWQgdG8gdGhlCisgICAgICAgIGZsYXR0ZW4gbWV0aG9kIGlzIHVzZWQuCiAKICAgICAgICAgIiIiCiAgICAgICAgIHNlbGYuX2ZwID0gb3V0ZnAKQEAgLTgwLDcgKzc3LDkgQEAKICAgICAgICAgTm90ZSB0aGF0IGZvciBzdWJvYmplY3RzLCBubyBGcm9tXyBsaW5lIGlzIHByaW50ZWQuCiAKICAgICAgICAgbGluZXNlcCBzcGVjaWZpZXMgdGhlIGNoYXJhY3RlcnMgdXNlZCB0byBpbmRpY2F0ZSBhIG5ldyBsaW5lIGluCi0gICAgICAgIHRoZSBvdXRwdXQuICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBwb2xpY3kuCisgICAgICAgIHRoZSBvdXRwdXQuICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBwb2xpY3kgc3BlY2lmaWVkCisgICAgICAgIHdoZW4gdGhlIEdlbmVyYXRvciBpbnN0YW5jZSB3YXMgY3JlYXRlZCBvciwgaWYgbm9uZSB3YXMgc3BlY2lmaWVkLAorICAgICAgICBmcm9tIHRoZSBwb2xpY3kgYXNzb2NpYXRlZCB3aXRoIHRoZSBtc2cuCiAKICAgICAgICAgIiIiCiAgICAgICAgICMgV2UgdXNlIHRoZSBfWFhYIGNvbnN0YW50cyBmb3Igb3BlcmF0aW5nIG9uIGRhdGEgdGhhdCBjb21lcyBkaXJlY3RseQpkaWZmIC0tZ2l0IGEvTGliL2VtYWlsL2hlYWRlci5weSBiL0xpYi9lbWFpbC9oZWFkZXIucHkKaW5kZXggNWJkMDYzOC4uOWM4OTU4OSAxMDA2NDQKLS0tIGEvTGliL2VtYWlsL2hlYWRlci5weQorKysgYi9MaWIvZW1haWwvaGVhZGVyLnB5CkBAIC0xMDAsNyArMTAwLDYgQEAKICAgICAgICAgICAgICAgICB3b3Jkcy5hcHBlbmQoKGVuY29kZWQsIGVuY29kaW5nLCBjaGFyc2V0KSkKICAgICAjIE5vdyBsb29wIG92ZXIgd29yZHMgYW5kIHJlbW92ZSB3b3JkcyB0aGF0IGNvbnNpc3Qgb2Ygd2hpdGVzcGFjZQogICAgICMgYmV0d2VlbiB0d28gZW5jb2RlZCBzdHJpbmdzLgotICAgIGltcG9ydCBzeXMKICAgICBkcm9wbGlzdCA9IFtdCiAgICAgZm9yIG4sIHcgaW4gZW51bWVyYXRlKHdvcmRzKToKICAgICAgICAgaWYgbj4xIGFuZCB3WzFdIGFuZCB3b3Jkc1tuLTJdWzFdIGFuZCB3b3Jkc1tuLTFdWzBdLmlzc3BhY2UoKToKQEAgLTM2Miw3ICszNjEsNiBAQAogICAgICAgICBmb3Igc3RyaW5nLCBjaGFyc2V0IGluIHNlbGYuX2NodW5rczoKICAgICAgICAgICAgIGlmIGhhc3NwYWNlIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgIGhhc3NwYWNlID0gc3RyaW5nIGFuZCBzZWxmLl9ub25jdGV4dChzdHJpbmdbMF0pCi0gICAgICAgICAgICAgICAgaW1wb3J0IHN5cwogICAgICAgICAgICAgICAgIGlmIGxhc3RjcyBub3QgaW4gKE5vbmUsICd1cy1hc2NpaScpOgogICAgICAgICAgICAgICAgICAgICBpZiBub3QgaGFzc3BhY2Ugb3IgY2hhcnNldCBub3QgaW4gKE5vbmUsICd1cy1hc2NpaScpOgogICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVyLmFkZF90cmFuc2l0aW9uKCkKZGlmZiAtLWdpdCBhL0xpYi9lbWFpbC9oZWFkZXJyZWdpc3RyeS5weSBiL0xpYi9lbWFpbC9oZWFkZXJyZWdpc3RyeS5weQppbmRleCAxZmFlOTUwLi45MTFhMmFmIDEwMDY0NAotLS0gYS9MaWIvZW1haWwvaGVhZGVycmVnaXN0cnkucHkKKysrIGIvTGliL2VtYWlsL2hlYWRlcnJlZ2lzdHJ5LnB5CkBAIC03LDYgKzcsNyBAQAogYW5kIHdpbGwgcHJvYmFibHkgY2hhbmdlIHNvbWUgYmVmb3JlIHRoYXQgaGFwcGVucy4KIAogIiIiCitmcm9tIHR5cGVzIGltcG9ydCBNYXBwaW5nUHJveHlUeXBlCiAKIGZyb20gZW1haWwgaW1wb3J0IHV0aWxzCiBmcm9tIGVtYWlsIGltcG9ydCBlcnJvcnMKQEAgLTQ1NCw3ICs0NTUsNyBAQAogCiAgICAgQHByb3BlcnR5CiAgICAgZGVmIHBhcmFtcyhzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX3BhcmFtcy5jb3B5KCkKKyAgICAgICAgcmV0dXJuIE1hcHBpbmdQcm94eVR5cGUoc2VsZi5fcGFyYW1zKQogCiAKIGNsYXNzIENvbnRlbnRUeXBlSGVhZGVyKFBhcmFtZXRlcml6ZWRNSU1FSGVhZGVyKToKZGlmZiAtLWdpdCBhL0xpYi9lbWFpbC9pdGVyYXRvcnMucHkgYi9MaWIvZW1haWwvaXRlcmF0b3JzLnB5CmluZGV4IDNhZGM0YTAuLmI1NTAyZWUgMTAwNjQ0Ci0tLSBhL0xpYi9lbWFpbC9pdGVyYXRvcnMucHkKKysrIGIvTGliL2VtYWlsL2l0ZXJhdG9ycy5weQpAQCAtMjYsOCArMjYsNyBAQAogICAgIHlpZWxkIHNlbGYKICAgICBpZiBzZWxmLmlzX211bHRpcGFydCgpOgogICAgICAgICBmb3Igc3VicGFydCBpbiBzZWxmLmdldF9wYXlsb2FkKCk6Ci0gICAgICAgICAgICBmb3Igc3Vic3VicGFydCBpbiBzdWJwYXJ0LndhbGsoKToKLSAgICAgICAgICAgICAgICB5aWVsZCBzdWJzdWJwYXJ0CisgICAgICAgICAgICB5aWVsZCBmcm9tIHN1YnBhcnQud2FsaygpCiAKIAogDApAQCAtNDAsOCArMzksNyBAQAogICAgIGZvciBzdWJwYXJ0IGluIG1zZy53YWxrKCk6CiAgICAgICAgIHBheWxvYWQgPSBzdWJwYXJ0LmdldF9wYXlsb2FkKGRlY29kZT1kZWNvZGUpCiAgICAgICAgIGlmIGlzaW5zdGFuY2UocGF5bG9hZCwgc3RyKToKLSAgICAgICAgICAgIGZvciBsaW5lIGluIFN0cmluZ0lPKHBheWxvYWQpOgotICAgICAgICAgICAgICAgIHlpZWxkIGxpbmUKKyAgICAgICAgICAgIHlpZWxkIGZyb20gU3RyaW5nSU8ocGF5bG9hZCkKIAogCiBkZWYgdHlwZWRfc3VicGFydF9pdGVyYXRvcihtc2csIG1haW50eXBlPSd0ZXh0Jywgc3VidHlwZT1Ob25lKToKZGlmZiAtLWdpdCBhL0xpYi9lbWFpbC9tZXNzYWdlLnB5IGIvTGliL2VtYWlsL21lc3NhZ2UucHkKaW5kZXggYWZlMzUwYy4uMmYzN2RiYiAxMDA2NDQKLS0tIGEvTGliL2VtYWlsL21lc3NhZ2UucHkKKysrIGIvTGliL2VtYWlsL21lc3NhZ2UucHkKQEAgLTgsOCArOCw4IEBACiAKIGltcG9ydCByZQogaW1wb3J0IHV1Ci1pbXBvcnQgYmFzZTY0Ci1pbXBvcnQgYmluYXNjaWkKK2ltcG9ydCBxdW9wcmkKK2ltcG9ydCB3YXJuaW5ncwogZnJvbSBpbyBpbXBvcnQgQnl0ZXNJTywgU3RyaW5nSU8KIAogIyBJbnRyYXBhY2thZ2UgaW1wb3J0cwpAQCAtMTMyLDIyICsxMzIsNTAgQEAKIAogICAgIGRlZiBfX3N0cl9fKHNlbGYpOgogICAgICAgICAiIiJSZXR1cm4gdGhlIGVudGlyZSBmb3JtYXR0ZWQgbWVzc2FnZSBhcyBhIHN0cmluZy4KLSAgICAgICAgVGhpcyBpbmNsdWRlcyB0aGUgaGVhZGVycywgYm9keSwgYW5kIGVudmVsb3BlIGhlYWRlci4KICAgICAgICAgIiIiCiAgICAgICAgIHJldHVybiBzZWxmLmFzX3N0cmluZygpCiAKLSAgICBkZWYgYXNfc3RyaW5nKHNlbGYsIHVuaXhmcm9tPUZhbHNlLCBtYXhoZWFkZXJsZW49MCk6CisgICAgZGVmIGFzX3N0cmluZyhzZWxmLCB1bml4ZnJvbT1GYWxzZSwgbWF4aGVhZGVybGVuPTAsIHBvbGljeT1Ob25lKToKICAgICAgICAgIiIiUmV0dXJuIHRoZSBlbnRpcmUgZm9ybWF0dGVkIG1lc3NhZ2UgYXMgYSBzdHJpbmcuCi0gICAgICAgIE9wdGlvbmFsIGB1bml4ZnJvbScgd2hlbiBUcnVlLCBtZWFucyBpbmNsdWRlIHRoZSBVbml4IEZyb21fIGVudmVsb3BlCi0gICAgICAgIGhlYWRlci4KIAotICAgICAgICBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIGFuZCBtYXkgbm90IGdlbmVyYXRlIHRoZSBtZXNzYWdlIGV4YWN0bHkKLSAgICAgICAgYXMgeW91IGludGVuZC4gIEZvciBtb3JlIGZsZXhpYmlsaXR5LCB1c2UgdGhlIGZsYXR0ZW4oKSBtZXRob2Qgb2YgYQotICAgICAgICBHZW5lcmF0b3IgaW5zdGFuY2UuCisgICAgICAgIE9wdGlvbmFsICd1bml4ZnJvbScsIHdoZW4gdHJ1ZSwgbWVhbnMgaW5jbHVkZSB0aGUgVW5peCBGcm9tXyBlbnZlbG9wZQorICAgICAgICBoZWFkZXIuICBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSByZWFzb25zLCBpZiBtYXhoZWFkZXJsZW4gaXMKKyAgICAgICAgbm90IHNwZWNpZmllZCBpdCBkZWZhdWx0cyB0byAwLCBzbyB5b3UgbXVzdCBvdmVycmlkZSBpdCBleHBsaWNpdGx5CisgICAgICAgIGlmIHlvdSB3YW50IGEgZGlmZmVyZW50IG1heGhlYWRlcmxlbi4gICdwb2xpY3knIGlzIHBhc3NlZCB0byB0aGUKKyAgICAgICAgR2VuZXJhdG9yIGluc3RhbmNlIHVzZWQgdG8gc2VyaWFsaXplIHRoZSBtZXNhc2dlOyBpZiBpdCBpcyBub3QKKyAgICAgICAgc3BlY2lmaWVkIHRoZSBwb2xpY3kgYXNzb2NpYXRlZCB3aXRoIHRoZSBtZXNzYWdlIGluc3RhbmNlIGlzIHVzZWQuCisKKyAgICAgICAgSWYgdGhlIG1lc3NhZ2Ugb2JqZWN0IGNvbnRhaW5zIGJpbmFyeSBkYXRhIHRoYXQgaXMgbm90IGVuY29kZWQKKyAgICAgICAgYWNjb3JkaW5nIHRvIFJGQyBzdGFuZGFyZHMsIHRoZSBub24tY29tcGxpYW50IGRhdGEgd2lsbCBiZSByZXBsYWNlZCBieQorICAgICAgICB1bmljb2RlICJ1bmtub3duIGNoYXJhY3RlciIgY29kZSBwb2ludHMuCiAgICAgICAgICIiIgogICAgICAgICBmcm9tIGVtYWlsLmdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yCisgICAgICAgIHBvbGljeSA9IHNlbGYucG9saWN5IGlmIHBvbGljeSBpcyBOb25lIGVsc2UgcG9saWN5CiAgICAgICAgIGZwID0gU3RyaW5nSU8oKQotICAgICAgICBnID0gR2VuZXJhdG9yKGZwLCBtYW5nbGVfZnJvbV89RmFsc2UsIG1heGhlYWRlcmxlbj1tYXhoZWFkZXJsZW4pCisgICAgICAgIGcgPSBHZW5lcmF0b3IoZnAsCisgICAgICAgICAgICAgICAgICAgICAgbWFuZ2xlX2Zyb21fPUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgIG1heGhlYWRlcmxlbj1tYXhoZWFkZXJsZW4sCisgICAgICAgICAgICAgICAgICAgICAgcG9saWN5PXBvbGljeSkKKyAgICAgICAgZy5mbGF0dGVuKHNlbGYsIHVuaXhmcm9tPXVuaXhmcm9tKQorICAgICAgICByZXR1cm4gZnAuZ2V0dmFsdWUoKQorCisgICAgZGVmIF9fYnl0ZXNfXyhzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSBlbnRpcmUgZm9ybWF0dGVkIG1lc3NhZ2UgYXMgYSBieXRlcyBvYmplY3QuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gc2VsZi5hc19ieXRlcygpCisKKyAgICBkZWYgYXNfYnl0ZXMoc2VsZiwgdW5peGZyb209RmFsc2UsIHBvbGljeT1Ob25lKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSBlbnRpcmUgZm9ybWF0dGVkIG1lc3NhZ2UgYXMgYSBieXRlcyBvYmplY3QuCisKKyAgICAgICAgT3B0aW9uYWwgJ3VuaXhmcm9tJywgd2hlbiB0cnVlLCBtZWFucyBpbmNsdWRlIHRoZSBVbml4IEZyb21fIGVudmVsb3BlCisgICAgICAgIGhlYWRlci4gICdwb2xpY3knIGlzIHBhc3NlZCB0byB0aGUgQnl0ZXNHZW5lcmF0b3IgaW5zdGFuY2UgdXNlZCB0bworICAgICAgICBzZXJpYWxpemUgdGhlIG1lc3NhZ2U7IGlmIG5vdCBzcGVjaWZpZWQgdGhlIHBvbGljeSBhc3NvY2lhdGVkIHdpdGgKKyAgICAgICAgdGhlIG1lc3NhZ2UgaW5zdGFuY2UgaXMgdXNlZC4KKyAgICAgICAgIiIiCisgICAgICAgIGZyb20gZW1haWwuZ2VuZXJhdG9yIGltcG9ydCBCeXRlc0dlbmVyYXRvcgorICAgICAgICBwb2xpY3kgPSBzZWxmLnBvbGljeSBpZiBwb2xpY3kgaXMgTm9uZSBlbHNlIHBvbGljeQorICAgICAgICBmcCA9IEJ5dGVzSU8oKQorICAgICAgICBnID0gQnl0ZXNHZW5lcmF0b3IoZnAsIG1hbmdsZV9mcm9tXz1GYWxzZSwgcG9saWN5PXBvbGljeSkKICAgICAgICAgZy5mbGF0dGVuKHNlbGYsIHVuaXhmcm9tPXVuaXhmcm9tKQogICAgICAgICByZXR1cm4gZnAuZ2V0dmFsdWUoKQogCkBAIC0xNzcsNyArMjA1LDExIEBACiAgICAgICAgIGlmIHNlbGYuX3BheWxvYWQgaXMgTm9uZToKICAgICAgICAgICAgIHNlbGYuX3BheWxvYWQgPSBbcGF5bG9hZF0KICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuX3BheWxvYWQuYXBwZW5kKHBheWxvYWQpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5fcGF5bG9hZC5hcHBlbmQocGF5bG9hZCkKKyAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoIkF0dGFjaCBpcyBub3QgdmFsaWQgb24gYSBtZXNzYWdlIHdpdGggYSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBub24tbXVsdGlwYXJ0IHBheWxvYWQiKQogCiAgICAgZGVmIGdldF9wYXlsb2FkKHNlbGYsIGk9Tm9uZSwgZGVjb2RlPUZhbHNlKToKICAgICAgICAgIiIiUmV0dXJuIGEgcmVmZXJlbmNlIHRvIHRoZSBwYXlsb2FkLgpAQCAtMjQxLDE0ICsyNzMsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgYnBheWxvYWQgPSBwYXlsb2FkLmVuY29kZSgnYXNjaWknKQogICAgICAgICAgICAgICAgIGV4Y2VwdCBVbmljb2RlRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgICMgVGhpcyB3b24ndCBoYXBwZW4gZm9yIFJGQyBjb21wbGlhbnQgbWVzc2FnZXMgKG1lc3NhZ2VzCi0gICAgICAgICAgICAgICAgICAgICMgY29udGFpbmluZyBvbmx5IEFTQ0lJIGNvZGVwb2ludHMgaW4gdGhlIHVuaWNvZGUgaW5wdXQpLgorICAgICAgICAgICAgICAgICAgICAjIGNvbnRhaW5pbmcgb25seSBBU0NJSSBjb2RlIHBvaW50cyBpbiB0aGUgdW5pY29kZSBpbnB1dCkuCiAgICAgICAgICAgICAgICAgICAgICMgSWYgaXQgZG9lcyBoYXBwZW4sIHR1cm4gdGhlIHN0cmluZyBpbnRvIGJ5dGVzIGluIGEgd2F5CiAgICAgICAgICAgICAgICAgICAgICMgZ3VhcmFudGVlZCBub3QgdG8gZmFpbC4KICAgICAgICAgICAgICAgICAgICAgYnBheWxvYWQgPSBwYXlsb2FkLmVuY29kZSgncmF3LXVuaWNvZGUtZXNjYXBlJykKICAgICAgICAgaWYgbm90IGRlY29kZToKICAgICAgICAgICAgIHJldHVybiBwYXlsb2FkCiAgICAgICAgIGlmIGN0ZSA9PSAncXVvdGVkLXByaW50YWJsZSc6Ci0gICAgICAgICAgICByZXR1cm4gdXRpbHMuX3FkZWNvZGUoYnBheWxvYWQpCisgICAgICAgICAgICByZXR1cm4gcXVvcHJpLmRlY29kZXN0cmluZyhicGF5bG9hZCkKICAgICAgICAgZWxpZiBjdGUgPT0gJ2Jhc2U2NCc6CiAgICAgICAgICAgICAjIFhYWDogdGhpcyBpcyBhIGJpdCBvZiBhIGhhY2s7IGRlY29kZV9iIHNob3VsZCBwcm9iYWJseSBiZSBmYWN0b3JlZAogICAgICAgICAgICAgIyBvdXQgc29tZXdoZXJlLCBidXQgSSBoYXZlbid0IGZpZ3VyZWQgb3V0IHdoZXJlIHlldC4KQEAgLTY2OCw3ICs3MDAsNyBAQAogICAgICAgICByZXR1cm4gZmFpbG9iagogCiAgICAgZGVmIHNldF9wYXJhbShzZWxmLCBwYXJhbSwgdmFsdWUsIGhlYWRlcj0nQ29udGVudC1UeXBlJywgcmVxdW90ZT1UcnVlLAotICAgICAgICAgICAgICAgICAgY2hhcnNldD1Ob25lLCBsYW5ndWFnZT0nJyk6CisgICAgICAgICAgICAgICAgICBjaGFyc2V0PU5vbmUsIGxhbmd1YWdlPScnLCByZXBsYWNlPUZhbHNlKToKICAgICAgICAgIiIiU2V0IGEgcGFyYW1ldGVyIGluIHRoZSBDb250ZW50LVR5cGUgaGVhZGVyLgogCiAgICAgICAgIElmIHRoZSBwYXJhbWV0ZXIgYWxyZWFkeSBleGlzdHMgaW4gdGhlIGhlYWRlciwgaXRzIHZhbHVlIHdpbGwgYmUKQEAgLTcxMiw4ICs3NDQsMTEgQEAKICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICBjdHlwZSA9IFNFTUlTUEFDRS5qb2luKFtjdHlwZSwgYXBwZW5kX3BhcmFtXSkKICAgICAgICAgaWYgY3R5cGUgIT0gc2VsZi5nZXQoaGVhZGVyKToKLSAgICAgICAgICAgIGRlbCBzZWxmW2hlYWRlcl0KLSAgICAgICAgICAgIHNlbGZbaGVhZGVyXSA9IGN0eXBlCisgICAgICAgICAgICBpZiByZXBsYWNlOgorICAgICAgICAgICAgICAgIHNlbGYucmVwbGFjZV9oZWFkZXIoaGVhZGVyLCBjdHlwZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZGVsIHNlbGZbaGVhZGVyXQorICAgICAgICAgICAgICAgIHNlbGZbaGVhZGVyXSA9IGN0eXBlCiAKICAgICBkZWYgZGVsX3BhcmFtKHNlbGYsIHBhcmFtLCBoZWFkZXI9J2NvbnRlbnQtdHlwZScsIHJlcXVvdGU9VHJ1ZSk6CiAgICAgICAgICIiIlJlbW92ZSB0aGUgZ2l2ZW4gcGFyYW1ldGVyIGNvbXBsZXRlbHkgZnJvbSB0aGUgQ29udGVudC1UeXBlIGhlYWRlci4KQEAgLTg5NCwzICs5MjksMjE5IEBACiAKICAgICAjIEkuZS4gZGVmIHdhbGsoc2VsZik6IC4uLgogICAgIGZyb20gZW1haWwuaXRlcmF0b3JzIGltcG9ydCB3YWxrCisKKyMgWFhYIFN1cHBvcnQgZm9yIHRlbXBvcmFyeSBkZXByZWNhdGlvbiBoYWNrIGZvciBpc19hdHRhY2htZW50IHByb3BlcnR5LgorY2xhc3MgX0lzQXR0YWNobWVudDoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWUpOgorICAgICAgICBzZWxmLnZhbHVlID0gdmFsdWUKKyAgICBkZWYgX19jYWxsX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnZhbHVlCisgICAgZGVmIF9fYm9vbF9fKHNlbGYpOgorICAgICAgICB3YXJuaW5ncy53YXJuKCJpc19hdHRhY2htZW50IHdpbGwgYmUgYSBtZXRob2QsIG5vdCBhIHByb3BlcnR5LCBpbiAzLjUiLAorICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywKKyAgICAgICAgICAgICAgICAgICAgICBzdGFja2xldmVsPTMpCisgICAgICAgIHJldHVybiBzZWxmLnZhbHVlCisKK2NsYXNzIE1JTUVQYXJ0KE1lc3NhZ2UpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvbGljeT1Ob25lKToKKyAgICAgICAgaWYgcG9saWN5IGlzIE5vbmU6CisgICAgICAgICAgICBmcm9tIGVtYWlsLnBvbGljeSBpbXBvcnQgZGVmYXVsdAorICAgICAgICAgICAgcG9saWN5ID0gZGVmYXVsdAorICAgICAgICBNZXNzYWdlLl9faW5pdF9fKHNlbGYsIHBvbGljeSkKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBpc19hdHRhY2htZW50KHNlbGYpOgorICAgICAgICBjX2QgPSBzZWxmLmdldCgnY29udGVudC1kaXNwb3NpdGlvbicpCisgICAgICAgIHJlc3VsdCA9IEZhbHNlIGlmIGNfZCBpcyBOb25lIGVsc2UgY19kLmNvbnRlbnRfZGlzcG9zaXRpb24gPT0gJ2F0dGFjaG1lbnQnCisgICAgICAgICMgWFhYIHRyYW5zaXRpb25hbCBoYWNrIHRvIHJhaXNlIGRlcHJlY2F0aW9uIGlmIG5vdCBjYWxsZWQuCisgICAgICAgIHJldHVybiBfSXNBdHRhY2htZW50KHJlc3VsdCkKKworICAgIGRlZiBfZmluZF9ib2R5KHNlbGYsIHBhcnQsIHByZWZlcmVuY2VsaXN0KToKKyAgICAgICAgaWYgcGFydC5pc19hdHRhY2htZW50KCk6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgbWFpbnR5cGUsIHN1YnR5cGUgPSBwYXJ0LmdldF9jb250ZW50X3R5cGUoKS5zcGxpdCgnLycpCisgICAgICAgIGlmIG1haW50eXBlID09ICd0ZXh0JzoKKyAgICAgICAgICAgIGlmIHN1YnR5cGUgaW4gcHJlZmVyZW5jZWxpc3Q6CisgICAgICAgICAgICAgICAgeWllbGQgKHByZWZlcmVuY2VsaXN0LmluZGV4KHN1YnR5cGUpLCBwYXJ0KQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGlmIG1haW50eXBlICE9ICdtdWx0aXBhcnQnOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGlmIHN1YnR5cGUgIT0gJ3JlbGF0ZWQnOgorICAgICAgICAgICAgZm9yIHN1YnBhcnQgaW4gcGFydC5pdGVyX3BhcnRzKCk6CisgICAgICAgICAgICAgICAgeWllbGQgZnJvbSBzZWxmLl9maW5kX2JvZHkoc3VicGFydCwgcHJlZmVyZW5jZWxpc3QpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgJ3JlbGF0ZWQnIGluIHByZWZlcmVuY2VsaXN0OgorICAgICAgICAgICAgeWllbGQgKHByZWZlcmVuY2VsaXN0LmluZGV4KCdyZWxhdGVkJyksIHBhcnQpCisgICAgICAgIGNhbmRpZGF0ZSA9IE5vbmUKKyAgICAgICAgc3RhcnQgPSBwYXJ0LmdldF9wYXJhbSgnc3RhcnQnKQorICAgICAgICBpZiBzdGFydDoKKyAgICAgICAgICAgIGZvciBzdWJwYXJ0IGluIHBhcnQuaXRlcl9wYXJ0cygpOgorICAgICAgICAgICAgICAgIGlmIHN1YnBhcnRbJ2NvbnRlbnQtaWQnXSA9PSBzdGFydDoKKyAgICAgICAgICAgICAgICAgICAgY2FuZGlkYXRlID0gc3VicGFydAorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBpZiBjYW5kaWRhdGUgaXMgTm9uZToKKyAgICAgICAgICAgIHN1YnBhcnRzID0gcGFydC5nZXRfcGF5bG9hZCgpCisgICAgICAgICAgICBjYW5kaWRhdGUgPSBzdWJwYXJ0c1swXSBpZiBzdWJwYXJ0cyBlbHNlIE5vbmUKKyAgICAgICAgaWYgY2FuZGlkYXRlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgeWllbGQgZnJvbSBzZWxmLl9maW5kX2JvZHkoY2FuZGlkYXRlLCBwcmVmZXJlbmNlbGlzdCkKKworICAgIGRlZiBnZXRfYm9keShzZWxmLCBwcmVmZXJlbmNlbGlzdD0oJ3JlbGF0ZWQnLCAnaHRtbCcsICdwbGFpbicpKToKKyAgICAgICAgIiIiUmV0dXJuIGJlc3QgY2FuZGlkYXRlIG1pbWUgcGFydCBmb3IgZGlzcGxheSBhcyAnYm9keScgb2YgbWVzc2FnZS4KKworICAgICAgICBEbyBhIGRlcHRoIGZpcnN0IHNlYXJjaCwgc3RhcnRpbmcgd2l0aCBzZWxmLCBsb29raW5nIGZvciB0aGUgZmlyc3QgcGFydAorICAgICAgICBtYXRjaGluZyBlYWNoIG9mIHRoZSBpdGVtcyBpbiBwcmVmZXJlbmNlbGlzdCwgYW5kIHJldHVybiB0aGUgcGFydAorICAgICAgICBjb3JyZXNwb25kaW5nIHRvIHRoZSBmaXJzdCBpdGVtIHRoYXQgaGFzIGEgbWF0Y2gsIG9yIE5vbmUgaWYgbm8gaXRlbXMKKyAgICAgICAgaGF2ZSBhIG1hdGNoLiAgSWYgJ3JlbGF0ZWQnIGlzIG5vdCBpbmNsdWRlZCBpbiBwcmVmZXJlbmNlbGlzdCwgY29uc2lkZXIKKyAgICAgICAgdGhlIHJvb3QgcGFydCBvZiBhbnkgbXVsdGlwYXJ0L3JlbGF0ZWQgZW5jb3VudGVyZWQgYXMgYSBjYW5kaWRhdGUKKyAgICAgICAgbWF0Y2guICBJZ25vcmUgcGFydHMgd2l0aCAnQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudCcuCisgICAgICAgICIiIgorICAgICAgICBiZXN0X3ByaW8gPSBsZW4ocHJlZmVyZW5jZWxpc3QpCisgICAgICAgIGJvZHkgPSBOb25lCisgICAgICAgIGZvciBwcmlvLCBwYXJ0IGluIHNlbGYuX2ZpbmRfYm9keShzZWxmLCBwcmVmZXJlbmNlbGlzdCk6CisgICAgICAgICAgICBpZiBwcmlvIDwgYmVzdF9wcmlvOgorICAgICAgICAgICAgICAgIGJlc3RfcHJpbyA9IHByaW8KKyAgICAgICAgICAgICAgICBib2R5ID0gcGFydAorICAgICAgICAgICAgICAgIGlmIHByaW8gPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgcmV0dXJuIGJvZHkKKworICAgIF9ib2R5X3R5cGVzID0geygndGV4dCcsICdwbGFpbicpLAorICAgICAgICAgICAgICAgICAgICgndGV4dCcsICdodG1sJyksCisgICAgICAgICAgICAgICAgICAgKCdtdWx0aXBhcnQnLCAncmVsYXRlZCcpLAorICAgICAgICAgICAgICAgICAgICgnbXVsdGlwYXJ0JywgJ2FsdGVybmF0aXZlJyl9CisgICAgZGVmIGl0ZXJfYXR0YWNobWVudHMoc2VsZik6CisgICAgICAgICIiIlJldHVybiBhbiBpdGVyYXRvciBvdmVyIHRoZSBub24tbWFpbiBwYXJ0cyBvZiBhIG11bHRpcGFydC4KKworICAgICAgICBTa2lwIHRoZSBmaXJzdCBvZiBlYWNoIG9jY3VycmVuY2Ugb2YgdGV4dC9wbGFpbiwgdGV4dC9odG1sLAorICAgICAgICBtdWx0aXBhcnQvcmVsYXRlZCwgb3IgbXVsdGlwYXJ0L2FsdGVybmF0aXZlIGluIHRoZSBtdWx0aXBhcnQgKHVubGVzcworICAgICAgICB0aGV5IGhhdmUgYSAnQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudCcgaGVhZGVyKSBhbmQgaW5jbHVkZSBhbGwKKyAgICAgICAgcmVtYWluaW5nIHN1YnBhcnRzIGluIHRoZSByZXR1cm5lZCBpdGVyYXRvci4gIFdoZW4gYXBwbGllZCB0byBhCisgICAgICAgIG11bHRpcGFydC9yZWxhdGVkLCByZXR1cm4gYWxsIHBhcnRzIGV4Y2VwdCB0aGUgcm9vdCBwYXJ0LiAgUmV0dXJuIGFuCisgICAgICAgIGVtcHR5IGl0ZXJhdG9yIHdoZW4gYXBwbGllZCB0byBhIG11bHRpcGFydC9hbHRlcm5hdGl2ZSBvciBhCisgICAgICAgIG5vbi1tdWx0aXBhcnQuCisgICAgICAgICIiIgorICAgICAgICBtYWludHlwZSwgc3VidHlwZSA9IHNlbGYuZ2V0X2NvbnRlbnRfdHlwZSgpLnNwbGl0KCcvJykKKyAgICAgICAgaWYgbWFpbnR5cGUgIT0gJ211bHRpcGFydCcgb3Igc3VidHlwZSA9PSAnYWx0ZXJuYXRpdmUnOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHBhcnRzID0gc2VsZi5nZXRfcGF5bG9hZCgpCisgICAgICAgIGlmIG1haW50eXBlID09ICdtdWx0aXBhcnQnIGFuZCBzdWJ0eXBlID09ICdyZWxhdGVkJzoKKyAgICAgICAgICAgICMgRm9yIHJlbGF0ZWQsIHdlIHRyZWF0IGV2ZXJ5dGhpbmcgYnV0IHRoZSByb290IGFzIGFuIGF0dGFjaG1lbnQuCisgICAgICAgICAgICAjIFRoZSByb290IG1heSBiZSBpbmRpY2F0ZWQgYnkgJ3N0YXJ0JzsgaWYgdGhlcmUncyBubyBzdGFydCBvciB3ZQorICAgICAgICAgICAgIyBjYW4ndCBmaW5kIHRoZSBuYW1lZCBzdGFydCwgdHJlYXQgdGhlIGZpcnN0IHN1YnBhcnQgYXMgdGhlIHJvb3QuCisgICAgICAgICAgICBzdGFydCA9IHNlbGYuZ2V0X3BhcmFtKCdzdGFydCcpCisgICAgICAgICAgICBpZiBzdGFydDoKKyAgICAgICAgICAgICAgICBmb3VuZCA9IEZhbHNlCisgICAgICAgICAgICAgICAgYXR0YWNobWVudHMgPSBbXQorICAgICAgICAgICAgICAgIGZvciBwYXJ0IGluIHBhcnRzOgorICAgICAgICAgICAgICAgICAgICBpZiBwYXJ0LmdldCgnY29udGVudC1pZCcpID09IHN0YXJ0OgorICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50cy5hcHBlbmQocGFydCkKKyAgICAgICAgICAgICAgICBpZiBmb3VuZDoKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgZnJvbSBhdHRhY2htZW50cworICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIHBhcnRzLnBvcCgwKQorICAgICAgICAgICAgeWllbGQgZnJvbSBwYXJ0cworICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICMgT3RoZXJ3aXNlIHdlIG1vcmUgb3IgbGVzcyBpbnZlcnQgdGhlIHJlbWFpbmluZyBsb2dpYyBpbiBnZXRfYm9keS4KKyAgICAgICAgIyBUaGlzIG9ubHkgcmVhbGx5IHdvcmtzIGluIGVkZ2UgY2FzZXMgKGV4OiBub24tdGV4dCByZWxhdGVkcyBvcgorICAgICAgICAjIGFsdGVybmF0aXZlcykgaWYgdGhlIHNlbmRpbmcgYWdlbnQgc2V0cyBjb250ZW50LWRpc3Bvc2l0aW9uLgorICAgICAgICBzZWVuID0gW10gICAjIE9ubHkgc2tpcCB0aGUgZmlyc3QgZXhhbXBsZSBvZiBlYWNoIGNhbmRpZGF0ZSB0eXBlLgorICAgICAgICBmb3IgcGFydCBpbiBwYXJ0czoKKyAgICAgICAgICAgIG1haW50eXBlLCBzdWJ0eXBlID0gcGFydC5nZXRfY29udGVudF90eXBlKCkuc3BsaXQoJy8nKQorICAgICAgICAgICAgaWYgKChtYWludHlwZSwgc3VidHlwZSkgaW4gc2VsZi5fYm9keV90eXBlcyBhbmQKKyAgICAgICAgICAgICAgICAgICAgbm90IHBhcnQuaXNfYXR0YWNobWVudCgpIGFuZCBzdWJ0eXBlIG5vdCBpbiBzZWVuKToKKyAgICAgICAgICAgICAgICBzZWVuLmFwcGVuZChzdWJ0eXBlKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICB5aWVsZCBwYXJ0CisKKyAgICBkZWYgaXRlcl9wYXJ0cyhzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIGFuIGl0ZXJhdG9yIG92ZXIgYWxsIGltbWVkaWF0ZSBzdWJwYXJ0cyBvZiBhIG11bHRpcGFydC4KKworICAgICAgICBSZXR1cm4gYW4gZW1wdHkgaXRlcmF0b3IgZm9yIGEgbm9uLW11bHRpcGFydC4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuZ2V0X2NvbnRlbnRfbWFpbnR5cGUoKSA9PSAnbXVsdGlwYXJ0JzoKKyAgICAgICAgICAgIHlpZWxkIGZyb20gc2VsZi5nZXRfcGF5bG9hZCgpCisKKyAgICBkZWYgZ2V0X2NvbnRlbnQoc2VsZiwgKmFyZ3MsIGNvbnRlbnRfbWFuYWdlcj1Ob25lLCAqKmt3KToKKyAgICAgICAgaWYgY29udGVudF9tYW5hZ2VyIGlzIE5vbmU6CisgICAgICAgICAgICBjb250ZW50X21hbmFnZXIgPSBzZWxmLnBvbGljeS5jb250ZW50X21hbmFnZXIKKyAgICAgICAgcmV0dXJuIGNvbnRlbnRfbWFuYWdlci5nZXRfY29udGVudChzZWxmLCAqYXJncywgKiprdykKKworICAgIGRlZiBzZXRfY29udGVudChzZWxmLCAqYXJncywgY29udGVudF9tYW5hZ2VyPU5vbmUsICoqa3cpOgorICAgICAgICBpZiBjb250ZW50X21hbmFnZXIgaXMgTm9uZToKKyAgICAgICAgICAgIGNvbnRlbnRfbWFuYWdlciA9IHNlbGYucG9saWN5LmNvbnRlbnRfbWFuYWdlcgorICAgICAgICBjb250ZW50X21hbmFnZXIuc2V0X2NvbnRlbnQoc2VsZiwgKmFyZ3MsICoqa3cpCisKKyAgICBkZWYgX21ha2VfbXVsdGlwYXJ0KHNlbGYsIHN1YnR5cGUsIGRpc2FsbG93ZWRfc3VidHlwZXMsIGJvdW5kYXJ5KToKKyAgICAgICAgaWYgc2VsZi5nZXRfY29udGVudF9tYWludHlwZSgpID09ICdtdWx0aXBhcnQnOgorICAgICAgICAgICAgZXhpc3Rpbmdfc3VidHlwZSA9IHNlbGYuZ2V0X2NvbnRlbnRfc3VidHlwZSgpCisgICAgICAgICAgICBkaXNhbGxvd2VkX3N1YnR5cGVzID0gZGlzYWxsb3dlZF9zdWJ0eXBlcyArIChzdWJ0eXBlLCkKKyAgICAgICAgICAgIGlmIGV4aXN0aW5nX3N1YnR5cGUgaW4gZGlzYWxsb3dlZF9zdWJ0eXBlczoKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJDYW5ub3QgY29udmVydCB7fSB0byB7fSIuZm9ybWF0KAorICAgICAgICAgICAgICAgICAgICBleGlzdGluZ19zdWJ0eXBlLCBzdWJ0eXBlKSkKKyAgICAgICAga2VlcF9oZWFkZXJzID0gW10KKyAgICAgICAgcGFydF9oZWFkZXJzID0gW10KKyAgICAgICAgZm9yIG5hbWUsIHZhbHVlIGluIHNlbGYuX2hlYWRlcnM6CisgICAgICAgICAgICBpZiBuYW1lLmxvd2VyKCkuc3RhcnRzd2l0aCgnY29udGVudC0nKToKKyAgICAgICAgICAgICAgICBwYXJ0X2hlYWRlcnMuYXBwZW5kKChuYW1lLCB2YWx1ZSkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGtlZXBfaGVhZGVycy5hcHBlbmQoKG5hbWUsIHZhbHVlKSkKKyAgICAgICAgaWYgcGFydF9oZWFkZXJzOgorICAgICAgICAgICAgIyBUaGVyZSBpcyBleGlzdGluZyBjb250ZW50LCBtb3ZlIGl0IHRvIHRoZSBmaXJzdCBzdWJwYXJ0LgorICAgICAgICAgICAgcGFydCA9IHR5cGUoc2VsZikocG9saWN5PXNlbGYucG9saWN5KQorICAgICAgICAgICAgcGFydC5faGVhZGVycyA9IHBhcnRfaGVhZGVycworICAgICAgICAgICAgcGFydC5fcGF5bG9hZCA9IHNlbGYuX3BheWxvYWQKKyAgICAgICAgICAgIHNlbGYuX3BheWxvYWQgPSBbcGFydF0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX3BheWxvYWQgPSBbXQorICAgICAgICBzZWxmLl9oZWFkZXJzID0ga2VlcF9oZWFkZXJzCisgICAgICAgIHNlbGZbJ0NvbnRlbnQtVHlwZSddID0gJ211bHRpcGFydC8nICsgc3VidHlwZQorICAgICAgICBpZiBib3VuZGFyeSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuc2V0X3BhcmFtKCdib3VuZGFyeScsIGJvdW5kYXJ5KQorCisgICAgZGVmIG1ha2VfcmVsYXRlZChzZWxmLCBib3VuZGFyeT1Ob25lKToKKyAgICAgICAgc2VsZi5fbWFrZV9tdWx0aXBhcnQoJ3JlbGF0ZWQnLCAoJ2FsdGVybmF0aXZlJywgJ21peGVkJyksIGJvdW5kYXJ5KQorCisgICAgZGVmIG1ha2VfYWx0ZXJuYXRpdmUoc2VsZiwgYm91bmRhcnk9Tm9uZSk6CisgICAgICAgIHNlbGYuX21ha2VfbXVsdGlwYXJ0KCdhbHRlcm5hdGl2ZScsICgnbWl4ZWQnLCksIGJvdW5kYXJ5KQorCisgICAgZGVmIG1ha2VfbWl4ZWQoc2VsZiwgYm91bmRhcnk9Tm9uZSk6CisgICAgICAgIHNlbGYuX21ha2VfbXVsdGlwYXJ0KCdtaXhlZCcsICgpLCBib3VuZGFyeSkKKworICAgIGRlZiBfYWRkX211bHRpcGFydChzZWxmLCBfc3VidHlwZSwgKmFyZ3MsIF9kaXNwPU5vbmUsICoqa3cpOgorICAgICAgICBpZiAoc2VsZi5nZXRfY29udGVudF9tYWludHlwZSgpICE9ICdtdWx0aXBhcnQnIG9yCisgICAgICAgICAgICAgICAgc2VsZi5nZXRfY29udGVudF9zdWJ0eXBlKCkgIT0gX3N1YnR5cGUpOgorICAgICAgICAgICAgZ2V0YXR0cihzZWxmLCAnbWFrZV8nICsgX3N1YnR5cGUpKCkKKyAgICAgICAgcGFydCA9IHR5cGUoc2VsZikocG9saWN5PXNlbGYucG9saWN5KQorICAgICAgICBwYXJ0LnNldF9jb250ZW50KCphcmdzLCAqKmt3KQorICAgICAgICBpZiBfZGlzcCBhbmQgJ2NvbnRlbnQtZGlzcG9zaXRpb24nIG5vdCBpbiBwYXJ0OgorICAgICAgICAgICAgcGFydFsnQ29udGVudC1EaXNwb3NpdGlvbiddID0gX2Rpc3AKKyAgICAgICAgc2VsZi5hdHRhY2gocGFydCkKKworICAgIGRlZiBhZGRfcmVsYXRlZChzZWxmLCAqYXJncywgKiprdyk6CisgICAgICAgIHNlbGYuX2FkZF9tdWx0aXBhcnQoJ3JlbGF0ZWQnLCAqYXJncywgX2Rpc3A9J2lubGluZScsICoqa3cpCisKKyAgICBkZWYgYWRkX2FsdGVybmF0aXZlKHNlbGYsICphcmdzLCAqKmt3KToKKyAgICAgICAgc2VsZi5fYWRkX211bHRpcGFydCgnYWx0ZXJuYXRpdmUnLCAqYXJncywgKiprdykKKworICAgIGRlZiBhZGRfYXR0YWNobWVudChzZWxmLCAqYXJncywgKiprdyk6CisgICAgICAgIHNlbGYuX2FkZF9tdWx0aXBhcnQoJ21peGVkJywgKmFyZ3MsIF9kaXNwPSdhdHRhY2htZW50JywgKiprdykKKworICAgIGRlZiBjbGVhcihzZWxmKToKKyAgICAgICAgc2VsZi5faGVhZGVycyA9IFtdCisgICAgICAgIHNlbGYuX3BheWxvYWQgPSBOb25lCisKKyAgICBkZWYgY2xlYXJfY29udGVudChzZWxmKToKKyAgICAgICAgc2VsZi5faGVhZGVycyA9IFsobiwgdikgZm9yIG4sIHYgaW4gc2VsZi5faGVhZGVycworICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBuLmxvd2VyKCkuc3RhcnRzd2l0aCgnY29udGVudC0nKV0KKyAgICAgICAgc2VsZi5fcGF5bG9hZCA9IE5vbmUKKworCitjbGFzcyBFbWFpbE1lc3NhZ2UoTUlNRVBhcnQpOgorCisgICAgZGVmIHNldF9jb250ZW50KHNlbGYsICphcmdzLCAqKmt3KToKKyAgICAgICAgc3VwZXIoKS5zZXRfY29udGVudCgqYXJncywgKiprdykKKyAgICAgICAgaWYgJ01JTUUtVmVyc2lvbicgbm90IGluIHNlbGY6CisgICAgICAgICAgICBzZWxmWydNSU1FLVZlcnNpb24nXSA9ICcxLjAnCmRpZmYgLS1naXQgYS9MaWIvZW1haWwvbWltZS9ub25tdWx0aXBhcnQucHkgYi9MaWIvZW1haWwvbWltZS9ub25tdWx0aXBhcnQucHkKaW5kZXggZmMzYjllYi4uZTFmNTE5NiAxMDA2NDQKLS0tIGEvTGliL2VtYWlsL21pbWUvbm9ubXVsdGlwYXJ0LnB5CisrKyBiL0xpYi9lbWFpbC9taW1lL25vbm11bHRpcGFydC5weQpAQCAtMTIsNyArMTIsNyBAQAogCiAMCiBjbGFzcyBNSU1FTm9uTXVsdGlwYXJ0KE1JTUVCYXNlKToKLSAgICAiIiJCYXNlIGNsYXNzIGZvciBNSU1FIG11bHRpcGFydC8qIHR5cGUgbWVzc2FnZXMuIiIiCisgICAgIiIiQmFzZSBjbGFzcyBmb3IgTUlNRSBub24tbXVsdGlwYXJ0IHR5cGUgbWVzc2FnZXMuIiIiCiAKICAgICBkZWYgYXR0YWNoKHNlbGYsIHBheWxvYWQpOgogICAgICAgICAjIFRoZSBwdWJsaWMgQVBJIHByb2hpYml0cyBhdHRhY2hpbmcgbXVsdGlwbGUgc3VicGFydHMgdG8gTUlNRUJhc2UKZGlmZiAtLWdpdCBhL0xpYi9lbWFpbC9taW1lL3RleHQucHkgYi9MaWIvZW1haWwvbWltZS90ZXh0LnB5CmluZGV4IDNiNWIwOWYuLmVjMThiODUgMTAwNjQ0Ci0tLSBhL0xpYi9lbWFpbC9taW1lL3RleHQucHkKKysrIGIvTGliL2VtYWlsL21pbWUvdGV4dC5weQpAQCAtNiw3ICs2LDYgQEAKIAogX19hbGxfXyA9IFsnTUlNRVRleHQnXQogCi1mcm9tIGVtYWlsLmVuY29kZXJzIGltcG9ydCBlbmNvZGVfN29yOGJpdAogZnJvbSBlbWFpbC5taW1lLm5vbm11bHRpcGFydCBpbXBvcnQgTUlNRU5vbk11bHRpcGFydAogCiAKZGlmZiAtLWdpdCBhL0xpYi9lbWFpbC9wYXJzZXIucHkgYi9MaWIvZW1haWwvcGFyc2VyLnB5CmluZGV4IDc1MmJmMzUuLjhjOWJjOWUgMTAwNjQ0Ci0tLSBhL0xpYi9lbWFpbC9wYXJzZXIucHkKKysrIGIvTGliL2VtYWlsL3BhcnNlci5weQpAQCAtNCwxOSArNCwxOCBAQAogCiAiIiJBIHBhcnNlciBvZiBSRkMgMjgyMiBhbmQgTUlNRSBlbWFpbCBtZXNzYWdlcy4iIiIKIAotX19hbGxfXyA9IFsnUGFyc2VyJywgJ0hlYWRlclBhcnNlcicsICdCeXRlc1BhcnNlcicsICdCeXRlc0hlYWRlclBhcnNlciddCitfX2FsbF9fID0gWydQYXJzZXInLCAnSGVhZGVyUGFyc2VyJywgJ0J5dGVzUGFyc2VyJywgJ0J5dGVzSGVhZGVyUGFyc2VyJywKKyAgICAgICAgICAgJ0ZlZWRQYXJzZXInLCAnQnl0ZXNGZWVkUGFyc2VyJ10KIAotaW1wb3J0IHdhcm5pbmdzCiBmcm9tIGlvIGltcG9ydCBTdHJpbmdJTywgVGV4dElPV3JhcHBlcgogCiBmcm9tIGVtYWlsLmZlZWRwYXJzZXIgaW1wb3J0IEZlZWRQYXJzZXIsIEJ5dGVzRmVlZFBhcnNlcgotZnJvbSBlbWFpbC5tZXNzYWdlIGltcG9ydCBNZXNzYWdlCiBmcm9tIGVtYWlsLl9wb2xpY3liYXNlIGltcG9ydCBjb21wYXQzMgogCiAKIAwKIGNsYXNzIFBhcnNlcjoKLSAgICBkZWYgX19pbml0X18oc2VsZiwgX2NsYXNzPU1lc3NhZ2UsICosIHBvbGljeT1jb21wYXQzMik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIF9jbGFzcz1Ob25lLCAqLCBwb2xpY3k9Y29tcGF0MzIpOgogICAgICAgICAiIiJQYXJzZXIgb2YgUkZDIDI4MjIgYW5kIE1JTUUgZW1haWwgbWVzc2FnZXMuCiAKICAgICAgICAgQ3JlYXRlcyBhbiBpbi1tZW1vcnkgb2JqZWN0IHRyZWUgcmVwcmVzZW50aW5nIHRoZSBlbWFpbCBtZXNzYWdlLCB3aGljaApAQCAtMTA3LDggKzEwNiwxMCBAQAogICAgICAgICBtZWFuaW5nIGl0IHBhcnNlcyB0aGUgZW50aXJlIGNvbnRlbnRzIG9mIHRoZSBmaWxlLgogICAgICAgICAiIiIKICAgICAgICAgZnAgPSBUZXh0SU9XcmFwcGVyKGZwLCBlbmNvZGluZz0nYXNjaWknLCBlcnJvcnM9J3N1cnJvZ2F0ZWVzY2FwZScpCi0gICAgICAgIHdpdGggZnA6CisgICAgICAgIHRyeToKICAgICAgICAgICAgIHJldHVybiBzZWxmLnBhcnNlci5wYXJzZShmcCwgaGVhZGVyc29ubHkpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmcC5kZXRhY2goKQogCiAKICAgICBkZWYgcGFyc2VieXRlcyhzZWxmLCB0ZXh0LCBoZWFkZXJzb25seT1GYWxzZSk6CmRpZmYgLS1naXQgYS9MaWIvZW1haWwvcG9saWN5LnB5IGIvTGliL2VtYWlsL3BvbGljeS5weQppbmRleCAzOGU4OGFmLi5mMGIyMGY0IDEwMDY0NAotLS0gYS9MaWIvZW1haWwvcG9saWN5LnB5CisrKyBiL0xpYi9lbWFpbC9wb2xpY3kucHkKQEAgLTUsNiArNSw3IEBACiBmcm9tIGVtYWlsLl9wb2xpY3liYXNlIGltcG9ydCBQb2xpY3ksIENvbXBhdDMyLCBjb21wYXQzMiwgX2V4dGVuZF9kb2NzdHJpbmdzCiBmcm9tIGVtYWlsLnV0aWxzIGltcG9ydCBfaGFzX3N1cnJvZ2F0ZXMKIGZyb20gZW1haWwuaGVhZGVycmVnaXN0cnkgaW1wb3J0IEhlYWRlclJlZ2lzdHJ5IGFzIEhlYWRlclJlZ2lzdHJ5Citmcm9tIGVtYWlsLmNvbnRlbnRtYW5hZ2VyIGltcG9ydCByYXdfZGF0YV9tYW5hZ2VyCiAKIF9fYWxsX18gPSBbCiAgICAgJ0NvbXBhdDMyJywKQEAgLTU4LDEwICs1OSwyMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lhbCB0cmVhdG1lbnQsIHdoaWxlIGFsbCBvdGhlciBmaWVsZHMgYXJlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmVhdGVkIGFzIHVuc3RydWN0dXJlZC4gIFRoaXMgbGlzdCB3aWxsIGJlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZWQgYmVmb3JlIHRoZSBleHRlbnNpb24gaXMgbWFya2VkIHN0YWJsZS4pCisKKyAgICBjb250ZW50X21hbmFnZXIgICAgIC0tIGFuIG9iamVjdCB3aXRoIGF0IGxlYXN0IHR3byBtZXRob2RzOiBnZXRfY29udGVudAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHNldF9jb250ZW50LiAgV2hlbiB0aGUgZ2V0X2NvbnRlbnQgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldF9jb250ZW50IG1ldGhvZCBvZiBhIE1lc3NhZ2Ugb2JqZWN0IGlzIGNhbGxlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0IGNhbGxzIHRoZSBjb3JyZXNwb25kaW5nIG1ldGhvZCBvZiB0aGlzIG9iamVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3NpbmcgaXQgdGhlIG1lc3NhZ2Ugb2JqZWN0IGFzIGl0cyBmaXJzdCBhcmd1bWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBhbnkgYXJndW1lbnRzIG9yIGtleXdvcmRzIHRoYXQgd2VyZSBwYXNzZWQgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0IGFzIGFkZGl0aW9uYWwgYXJndW1lbnRzLiAgVGhlIGRlZmF1bHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRfbWFuYWdlciBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgOmRhdGE6YH5lbWFpbC5jb250ZW50bWFuYWdlci5yYXdfZGF0YV9tYW5hZ2VyYC4KKwogICAgICIiIgogCiAgICAgcmVmb2xkX3NvdXJjZSA9ICdsb25nJwogICAgIGhlYWRlcl9mYWN0b3J5ID0gSGVhZGVyUmVnaXN0cnkoKQorICAgIGNvbnRlbnRfbWFuYWdlciA9IHJhd19kYXRhX21hbmFnZXIKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqKmt3KToKICAgICAgICAgIyBFbnN1cmUgdGhhdCBlYWNoIG5ldyBpbnN0YW5jZSBnZXRzIGEgdW5pcXVlIGhlYWRlciBmYWN0b3J5CmRpZmYgLS1naXQgYS9MaWIvZW1haWwvcXVvcHJpbWltZS5weSBiL0xpYi9lbWFpbC9xdW9wcmltaW1lLnB5CmluZGV4IDMwYmY5MTYuLmMxZmUyYjQgMTAwNjQ0Ci0tLSBhL0xpYi9lbWFpbC9xdW9wcmltaW1lLnB5CisrKyBiL0xpYi9lbWFpbC9xdW9wcmltaW1lLnB5CkBAIC00MCw3ICs0MCw2IEBACiAgICAgXQogCiBpbXBvcnQgcmUKLWltcG9ydCBpbwogCiBmcm9tIHN0cmluZyBpbXBvcnQgYXNjaWlfbGV0dGVycywgZGlnaXRzLCBoZXhkaWdpdHMKIApkaWZmIC0tZ2l0IGEvTGliL2VtYWlsL3V0aWxzLnB5IGIvTGliL2VtYWlsL3V0aWxzLnB5CmluZGV4IGY3NmMyMWUuLjUwODBkODEgMTAwNjQ0Ci0tLSBhL0xpYi9lbWFpbC91dGlscy5weQorKysgYi9MaWIvZW1haWwvdXRpbHMucHkKQEAgLTI1LDEzICsyNSwxMCBAQAogaW1wb3J0IG9zCiBpbXBvcnQgcmUKIGltcG9ydCB0aW1lCi1pbXBvcnQgYmFzZTY0CiBpbXBvcnQgcmFuZG9tCiBpbXBvcnQgc29ja2V0CiBpbXBvcnQgZGF0ZXRpbWUKIGltcG9ydCB1cmxsaWIucGFyc2UKLWltcG9ydCB3YXJuaW5ncwotZnJvbSBpbyBpbXBvcnQgU3RyaW5nSU8KIAogZnJvbSBlbWFpbC5fcGFyc2VhZGRyIGltcG9ydCBxdW90ZQogZnJvbSBlbWFpbC5fcGFyc2VhZGRyIGltcG9ydCBBZGRyZXNzTGlzdCBhcyBfQWRkcmVzc0xpc3QKQEAgLTM5LDEwICszNiw3IEBACiAKIGZyb20gZW1haWwuX3BhcnNlYWRkciBpbXBvcnQgcGFyc2VkYXRlLCBwYXJzZWRhdGVfdHosIF9wYXJzZWRhdGVfdHoKIAotZnJvbSBxdW9wcmkgaW1wb3J0IGRlY29kZXN0cmluZyBhcyBfcWRlY29kZQotCiAjIEludHJhcGFja2FnZSBpbXBvcnRzCi1mcm9tIGVtYWlsLmVuY29kZXJzIGltcG9ydCBfYmVuY29kZSwgX3FlbmNvZGUKIGZyb20gZW1haWwuY2hhcnNldCBpbXBvcnQgQ2hhcnNldAogCiBDT01NQVNQQUNFID0gJywgJwpAQCAtNTQsMTcgKzQ4LDI3IEBACiBzcGVjaWFsc3JlID0gcmUuY29tcGlsZShyJ1tdW1xcKCk8PkAsOjsiLl0nKQogZXNjYXBlc3JlID0gcmUuY29tcGlsZShyJ1tcXCJdJykKIAotIyBIb3cgdG8gZmlndXJlIG91dCBpZiB3ZSBhcmUgcHJvY2Vzc2luZyBzdHJpbmdzIHRoYXQgY29tZSBmcm9tIGEgYnl0ZQotIyBzb3VyY2Ugd2l0aCB1bmRlY29kYWJsZSBjaGFyYWN0ZXJzLgotX2hhc19zdXJyb2dhdGVzID0gcmUuY29tcGlsZSgKLSAgICAnKFteXHVkODAwLVx1ZGJmZl18XEEpW1x1ZGMwMC1cdWRmZmZdKFteXHVkYzAwLVx1ZGZmZl18XFopJykuc2VhcmNoCitkZWYgX2hhc19zdXJyb2dhdGVzKHMpOgorICAgICIiIlJldHVybiBUcnVlIGlmIHMgY29udGFpbnMgc3Vycm9nYXRlLWVzY2FwZWQgYmluYXJ5IGRhdGEuIiIiCisgICAgIyBUaGlzIGNoZWNrIGlzIGJhc2VkIG9uIHRoZSBmYWN0IHRoYXQgdW5sZXNzIHRoZXJlIGFyZSBzdXJyb2dhdGVzLCB1dGY4CisgICAgIyAoUHl0aG9uJ3MgZGVmYXVsdCBlbmNvZGluZykgY2FuIGVuY29kZSBhbnkgc3RyaW5nLiAgVGhpcyBpcyB0aGUgZmFzdGVzdAorICAgICMgd2F5IHRvIGNoZWNrIGZvciBzdXJyb2dhdGVzLCBzZWUgaXNzdWUgMTE0NTQgZm9yIHRpbWluZ3MuCisgICAgdHJ5OgorICAgICAgICBzLmVuY29kZSgpCisgICAgICAgIHJldHVybiBGYWxzZQorICAgIGV4Y2VwdCBVbmljb2RlRW5jb2RlRXJyb3I6CisgICAgICAgIHJldHVybiBUcnVlCiAKICMgSG93IHRvIGRlYWwgd2l0aCBhIHN0cmluZyBjb250YWluaW5nIGJ5dGVzIGJlZm9yZSBoYW5kaW5nIGl0IHRvIHRoZQogIyBhcHBsaWNhdGlvbiB0aHJvdWdoIHRoZSAnbm9ybWFsJyBpbnRlcmZhY2UuCiBkZWYgX3Nhbml0aXplKHN0cmluZyk6Ci0gICAgIyBUdXJuIGFueSBlc2NhcGVkIGJ5dGVzIGludG8gdW5pY29kZSAndW5rbm93bicgY2hhci4KLSAgICBvcmlnaW5hbF9ieXRlcyA9IHN0cmluZy5lbmNvZGUoJ2FzY2lpJywgJ3N1cnJvZ2F0ZWVzY2FwZScpCi0gICAgcmV0dXJuIG9yaWdpbmFsX2J5dGVzLmRlY29kZSgnYXNjaWknLCAncmVwbGFjZScpCisgICAgIyBUdXJuIGFueSBlc2NhcGVkIGJ5dGVzIGludG8gdW5pY29kZSAndW5rbm93bicgY2hhci4gIElmIHRoZSBlc2NhcGVkCisgICAgIyBieXRlcyBoYXBwZW4gdG8gYmUgdXRmLTggdGhleSB3aWxsIGluc3RlYWQgZ2V0IGRlY29kZWQsIGV2ZW4gaWYgdGhleQorICAgICMgd2VyZSBpbnZhbGlkIGluIHRoZSBjaGFyc2V0IHRoZSBzb3VyY2Ugd2FzIHN1cHBvc2VkIHRvIGJlIGluLiAgVGhpcworICAgICMgc2VlbXMgbGlrZSBpdCBpcyBub3QgYSBiYWQgdGhpbmc7IGEgZGVmZWN0IHdhcyBzdGlsbCByZWdpc3RlcmVkLgorICAgIG9yaWdpbmFsX2J5dGVzID0gc3RyaW5nLmVuY29kZSgndXRmLTgnLCAnc3Vycm9nYXRlZXNjYXBlJykKKyAgICByZXR1cm4gb3JpZ2luYWxfYnl0ZXMuZGVjb2RlKCd1dGYtOCcsICdyZXBsYWNlJykKKwogCiAKICMgSGVscGVycwpAQCAtMTUxLDMwICsxNTUsMTQgQEAKICAgICAjIDI4MjIgcmVxdWlyZXMgdGhhdCBkYXkgYW5kIG1vbnRoIG5hbWVzIGJlIHRoZSBFbmdsaXNoIGFiYnJldmlhdGlvbnMuCiAgICAgaWYgdGltZXZhbCBpcyBOb25lOgogICAgICAgICB0aW1ldmFsID0gdGltZS50aW1lKCkKLSAgICBpZiBsb2NhbHRpbWU6Ci0gICAgICAgIG5vdyA9IHRpbWUubG9jYWx0aW1lKHRpbWV2YWwpCi0gICAgICAgICMgQ2FsY3VsYXRlIHRpbWV6b25lIG9mZnNldCwgYmFzZWQgb24gd2hldGhlciB0aGUgbG9jYWwgem9uZSBoYXMKLSAgICAgICAgIyBkYXlsaWdodCBzYXZpbmdzIHRpbWUsIGFuZCB3aGV0aGVyIERTVCBpcyBpbiBlZmZlY3QuCi0gICAgICAgIGlmIHRpbWUuZGF5bGlnaHQgYW5kIG5vd1stMV06Ci0gICAgICAgICAgICBvZmZzZXQgPSB0aW1lLmFsdHpvbmUKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIG9mZnNldCA9IHRpbWUudGltZXpvbmUKLSAgICAgICAgaG91cnMsIG1pbnV0ZXMgPSBkaXZtb2QoYWJzKG9mZnNldCksIDM2MDApCi0gICAgICAgICMgUmVtZW1iZXIgb2Zmc2V0IGlzIGluIHNlY29uZHMgd2VzdCBvZiBVVEMsIGJ1dCB0aGUgdGltZXpvbmUgaXMgaW4KLSAgICAgICAgIyBtaW51dGVzIGVhc3Qgb2YgVVRDLCBzbyB0aGUgc2lnbnMgZGlmZmVyLgotICAgICAgICBpZiBvZmZzZXQgPiAwOgotICAgICAgICAgICAgc2lnbiA9ICctJwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2lnbiA9ICcrJwotICAgICAgICB6b25lID0gJyVzJTAyZCUwMmQnICUgKHNpZ24sIGhvdXJzLCBtaW51dGVzIC8vIDYwKQorICAgIGlmIGxvY2FsdGltZSBvciB1c2VnbXQ6CisgICAgICAgIGR0ID0gZGF0ZXRpbWUuZGF0ZXRpbWUuZnJvbXRpbWVzdGFtcCh0aW1ldmFsLCBkYXRldGltZS50aW1lem9uZS51dGMpCiAgICAgZWxzZToKLSAgICAgICAgbm93ID0gdGltZS5nbXRpbWUodGltZXZhbCkKLSAgICAgICAgIyBUaW1lem9uZSBvZmZzZXQgaXMgYWx3YXlzIC0wMDAwCi0gICAgICAgIGlmIHVzZWdtdDoKLSAgICAgICAgICAgIHpvbmUgPSAnR01UJwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgem9uZSA9ICctMDAwMCcKLSAgICByZXR1cm4gX2Zvcm1hdF90aW1ldHVwbGVfYW5kX3pvbmUobm93LCB6b25lKQorICAgICAgICBkdCA9IGRhdGV0aW1lLmRhdGV0aW1lLnV0Y2Zyb210aW1lc3RhbXAodGltZXZhbCkKKyAgICBpZiBsb2NhbHRpbWU6CisgICAgICAgIGR0ID0gZHQuYXN0aW1lem9uZSgpCisgICAgICAgIHVzZWdtdCA9IEZhbHNlCisgICAgcmV0dXJuIGZvcm1hdF9kYXRldGltZShkdCwgdXNlZ210KQogCiBkZWYgZm9ybWF0X2RhdGV0aW1lKGR0LCB1c2VnbXQ9RmFsc2UpOgogICAgICIiIlR1cm4gYSBkYXRldGltZSBpbnRvIGEgZGF0ZSBzdHJpbmcgYXMgc3BlY2lmaWVkIGluIFJGQyAyODIyLgpAQCAtMTk4LDI0ICsxODYsMjMgQEAKIGRlZiBtYWtlX21zZ2lkKGlkc3RyaW5nPU5vbmUsIGRvbWFpbj1Ob25lKToKICAgICAiIiJSZXR1cm5zIGEgc3RyaW5nIHN1aXRhYmxlIGZvciBSRkMgMjgyMiBjb21wbGlhbnQgTWVzc2FnZS1JRCwgZS5nOgogCi0gICAgPDIwMDIwMjAxMTk1NjI3LjMzNTM5Ljk2NjcxQG5pZ2h0c2hhZGUubGEubWFzdGFsZXIuY29tPgorICAgIDwxNDI0ODAyMTY0ODYuMjA4MDAuMTY1MjYzODgwNDA4Nzc5NDY4ODdAbmlnaHRzaGFkZS5sYS5tYXN0YWxlci5jb20+CiAKICAgICBPcHRpb25hbCBpZHN0cmluZyBpZiBnaXZlbiBpcyBhIHN0cmluZyB1c2VkIHRvIHN0cmVuZ3RoZW4gdGhlCiAgICAgdW5pcXVlbmVzcyBvZiB0aGUgbWVzc2FnZSBpZC4gIE9wdGlvbmFsIGRvbWFpbiBpZiBnaXZlbiBwcm92aWRlcyB0aGUKICAgICBwb3J0aW9uIG9mIHRoZSBtZXNzYWdlIGlkIGFmdGVyIHRoZSAnQCcuICBJdCBkZWZhdWx0cyB0byB0aGUgbG9jYWxseQogICAgIGRlZmluZWQgaG9zdG5hbWUuCiAgICAgIiIiCi0gICAgdGltZXZhbCA9IHRpbWUudGltZSgpCi0gICAgdXRjZGF0ZSA9IHRpbWUuc3RyZnRpbWUoJyVZJW0lZCVIJU0lUycsIHRpbWUuZ210aW1lKHRpbWV2YWwpKQorICAgIHRpbWV2YWwgPSBpbnQodGltZS50aW1lKCkqMTAwKQogICAgIHBpZCA9IG9zLmdldHBpZCgpCi0gICAgcmFuZGludCA9IHJhbmRvbS5yYW5kcmFuZ2UoMTAwMDAwKQorICAgIHJhbmRpbnQgPSByYW5kb20uZ2V0cmFuZGJpdHMoNjQpCiAgICAgaWYgaWRzdHJpbmcgaXMgTm9uZToKICAgICAgICAgaWRzdHJpbmcgPSAnJwogICAgIGVsc2U6CiAgICAgICAgIGlkc3RyaW5nID0gJy4nICsgaWRzdHJpbmcKICAgICBpZiBkb21haW4gaXMgTm9uZToKICAgICAgICAgZG9tYWluID0gc29ja2V0LmdldGZxZG4oKQotICAgIG1zZ2lkID0gJzwlcy4lcy4lcyVzQCVzPicgJSAodXRjZGF0ZSwgcGlkLCByYW5kaW50LCBpZHN0cmluZywgZG9tYWluKQorICAgIG1zZ2lkID0gJzwlZC4lZC4lZCVzQCVzPicgJSAodGltZXZhbCwgcGlkLCByYW5kaW50LCBpZHN0cmluZywgZG9tYWluKQogICAgIHJldHVybiBtc2dpZAogCiAKZGlmZiAtLWdpdCBhL0xpYi9lbmNvZGluZ3MvYWxpYXNlcy5weSBiL0xpYi9lbmNvZGluZ3MvYWxpYXNlcy5weQppbmRleCAyMzVkZWI1Li40Y2JhYWRlIDEwMDY0NAotLS0gYS9MaWIvZW5jb2RpbmdzL2FsaWFzZXMucHkKKysrIGIvTGliL2VuY29kaW5ncy9hbGlhc2VzLnB5CkBAIC0zMyw5ICszMyw5IEBACiAgICAgJ3VzJyAgICAgICAgICAgICAgICAgOiAnYXNjaWknLAogICAgICd1c19hc2NpaScgICAgICAgICAgIDogJ2FzY2lpJywKIAotICAgICMjIGJhc2U2NF9jb2RlYyBjb2RlYwotICAgICMnYmFzZTY0JyAgICAgICAgICAgICA6ICdiYXNlNjRfY29kZWMnLAotICAgICMnYmFzZV82NCcgICAgICAgICAgICA6ICdiYXNlNjRfY29kZWMnLAorICAgICMgYmFzZTY0X2NvZGVjIGNvZGVjCisgICAgJ2Jhc2U2NCcgICAgICAgICAgICAgOiAnYmFzZTY0X2NvZGVjJywKKyAgICAnYmFzZV82NCcgICAgICAgICAgICA6ICdiYXNlNjRfY29kZWMnLAogCiAgICAgIyBiaWc1IGNvZGVjCiAgICAgJ2JpZzVfdHcnICAgICAgICAgICAgOiAnYmlnNScsCkBAIC00NSw4ICs0NSw4IEBACiAgICAgJ2JpZzVfaGtzY3MnICAgICAgICAgOiAnYmlnNWhrc2NzJywKICAgICAnaGtzY3MnICAgICAgICAgICAgICA6ICdiaWc1aGtzY3MnLAogCi0gICAgIyMgYnoyX2NvZGVjIGNvZGVjCi0gICAgIydiejInICAgICAgICAgICAgICAgIDogJ2J6Ml9jb2RlYycsCisgICAgIyBiejJfY29kZWMgY29kZWMKKyAgICAnYnoyJyAgICAgICAgICAgICAgICA6ICdiejJfY29kZWMnLAogCiAgICAgIyBjcDAzNyBjb2RlYwogICAgICcwMzcnICAgICAgICAgICAgICAgIDogJ2NwMDM3JywKQEAgLTYzLDYgKzYzLDEyIEBACiAgICAgJ2NzaWJtMTAyNicgICAgICAgICAgOiAnY3AxMDI2JywKICAgICAnaWJtMTAyNicgICAgICAgICAgICA6ICdjcDEwMjYnLAogCisgICAgIyBjcDExMjUgY29kZWMKKyAgICAnMTEyNScgICAgICAgICAgICAgICAgOiAnY3AxMTI1JywKKyAgICAnaWJtMTEyNScgICAgICAgICAgICAgOiAnY3AxMTI1JywKKyAgICAnY3A4NjZ1JyAgICAgICAgICAgICAgOiAnY3AxMTI1JywKKyAgICAncnVzY2lpJyAgICAgICAgICAgICAgOiAnY3AxMTI1JywKKwogICAgICMgY3AxMTQwIGNvZGVjCiAgICAgJzExNDAnICAgICAgICAgICAgICAgOiAnY3AxMTQwJywKICAgICAnaWJtMTE0MCcgICAgICAgICAgICA6ICdjcDExNDAnLApAQCAtMTAzLDYgKzEwOSwxMSBAQAogICAgICcxMjU4JyAgICAgICAgICAgICAgIDogJ2NwMTI1OCcsCiAgICAgJ3dpbmRvd3NfMTI1OCcgICAgICAgOiAnY3AxMjU4JywKIAorICAgICMgY3AyNzMgY29kZWMKKyAgICAnMjczJyAgICAgICAgICAgICAgICA6ICdjcDI3MycsCisgICAgJ2libTI3MycgICAgICAgICAgICAgOiAnY3AyNzMnLAorICAgICdjc2libTI3MycgICAgICAgICAgIDogJ2NwMjczJywKKwogICAgICMgY3A0MjQgY29kZWMKICAgICAnNDI0JyAgICAgICAgICAgICAgICA6ICdjcDQyNCcsCiAgICAgJ2NzaWJtNDI0JyAgICAgICAgICAgOiAnY3A0MjQnLApAQCAtMjQ4LDggKzI1OSw4IEBACiAgICAgJ2NwOTM2JyAgICAgICAgICAgICAgOiAnZ2JrJywKICAgICAnbXM5MzYnICAgICAgICAgICAgICA6ICdnYmsnLAogCi0gICAgIyMgaGV4X2NvZGVjIGNvZGVjCi0gICAgIydoZXgnICAgICAgICAgICAgICAgIDogJ2hleF9jb2RlYycsCisgICAgIyBoZXhfY29kZWMgY29kZWMKKyAgICAnaGV4JyAgICAgICAgICAgICAgICA6ICdoZXhfY29kZWMnLAogCiAgICAgIyBocF9yb21hbjggY29kZWMKICAgICAncm9tYW44JyAgICAgICAgICAgICA6ICdocF9yb21hbjgnLApAQCAtNDUwLDEzICs0NjEsMTMgQEAKICAgICAnY3AxNTQnICAgICAgICAgICAgICA6ICdwdGNwMTU0JywKICAgICAnY3lyaWxsaWNfYXNpYW4nICAgICA6ICdwdGNwMTU0JywKIAotICAgICMjIHF1b3ByaV9jb2RlYyBjb2RlYwotICAgICMncXVvcHJpJyAgICAgICAgICAgICA6ICdxdW9wcmlfY29kZWMnLAotICAgICMncXVvdGVkX3ByaW50YWJsZScgICA6ICdxdW9wcmlfY29kZWMnLAotICAgICMncXVvdGVkcHJpbnRhYmxlJyAgICA6ICdxdW9wcmlfY29kZWMnLAorICAgICMgcXVvcHJpX2NvZGVjIGNvZGVjCisgICAgJ3F1b3ByaScgICAgICAgICAgICAgOiAncXVvcHJpX2NvZGVjJywKKyAgICAncXVvdGVkX3ByaW50YWJsZScgICA6ICdxdW9wcmlfY29kZWMnLAorICAgICdxdW90ZWRwcmludGFibGUnICAgIDogJ3F1b3ByaV9jb2RlYycsCiAKLSAgICAjIyByb3RfMTMgY29kZWMKLSAgICAjJ3JvdDEzJyAgICAgICAgICAgICAgOiAncm90XzEzJywKKyAgICAjIHJvdF8xMyBjb2RlYworICAgICdyb3QxMycgICAgICAgICAgICAgIDogJ3JvdF8xMycsCiAKICAgICAjIHNoaWZ0X2ppcyBjb2RlYwogICAgICdjc3NoaWZ0amlzJyAgICAgICAgIDogJ3NoaWZ0X2ppcycsCkBAIC01MTgsMTIgKzUyOSwxMiBAQAogICAgICd1dGY4X3VjczInICAgICAgICAgIDogJ3V0Zl84JywKICAgICAndXRmOF91Y3M0JyAgICAgICAgICA6ICd1dGZfOCcsCiAKLSAgICAjIyB1dV9jb2RlYyBjb2RlYwotICAgICMndXUnICAgICAgICAgICAgICAgICA6ICd1dV9jb2RlYycsCisgICAgIyB1dV9jb2RlYyBjb2RlYworICAgICd1dScgICAgICAgICAgICAgICAgIDogJ3V1X2NvZGVjJywKIAotICAgICMjIHpsaWJfY29kZWMgY29kZWMKLSAgICAjJ3ppcCcgICAgICAgICAgICAgICAgOiAnemxpYl9jb2RlYycsCi0gICAgIyd6bGliJyAgICAgICAgICAgICAgIDogJ3psaWJfY29kZWMnLAorICAgICMgemxpYl9jb2RlYyBjb2RlYworICAgICd6aXAnICAgICAgICAgICAgICAgIDogJ3psaWJfY29kZWMnLAorICAgICd6bGliJyAgICAgICAgICAgICAgIDogJ3psaWJfY29kZWMnLAogCiAgICAgIyB0ZW1wb3JhcnkgbWFjIENKSyBhbGlhc2VzLCB3aWxsIGJlIHJlcGxhY2VkIGJ5IHByb3BlciBjb2RlY3MgaW4gMy4xCiAgICAgJ3hfbWFjX2phcGFuZXNlJyAgICAgIDogJ3NoaWZ0X2ppcycsCmRpZmYgLS1naXQgYS9MaWIvZW5jb2RpbmdzL2NwMDM3LnB5IGIvTGliL2VuY29kaW5ncy9jcDAzNy5weQppbmRleCBiZmUyYzFlLi40ZWRkNzA4IDEwMDY0NAotLS0gYS9MaWIvZW5jb2RpbmdzL2NwMDM3LnB5CisrKyBiL0xpYi9lbmNvZGluZ3MvY3AwMzcucHkKQEAgLTMwMSw3ICszMDEsNiBAQAogICAgICdceGQ5JyAgICAgIyAgMHhGRCAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggR1JBVkUKICAgICAnXHhkYScgICAgICMgIDB4RkUgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIEFDVVRFCiAgICAgJ1x4OWYnICAgICAjICAweEZGIC0+IENPTlRST0wKLSAgICAnXHVmZmZlJyAgICMjIFdpZGVuIHRvIFVDUzIgZm9yIG9wdGltaXphdGlvbgogKQogCiAjIyMgRW5jb2RpbmcgdGFibGUKZGlmZiAtLWdpdCBhL0xpYi9lbmNvZGluZ3MvY3AxMTI1LnB5IGIvTGliL2VuY29kaW5ncy9jcDExMjUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFmZDY5ZAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9lbmNvZGluZ3MvY3AxMTI1LnB5CkBAIC0wLDAgKzEsNjk4IEBACisiIiIgUHl0aG9uIENoYXJhY3RlciBNYXBwaW5nIENvZGVjIGZvciBDUDExMjUKKworIiIiIyIKKworaW1wb3J0IGNvZGVjcworCisjIyMgQ29kZWMgQVBJcworCitjbGFzcyBDb2RlYyhjb2RlY3MuQ29kZWMpOgorCisgICAgZGVmIGVuY29kZShzZWxmLGlucHV0LGVycm9ycz0nc3RyaWN0Jyk6CisgICAgICAgIHJldHVybiBjb2RlY3MuY2hhcm1hcF9lbmNvZGUoaW5wdXQsZXJyb3JzLGVuY29kaW5nX21hcCkKKworICAgIGRlZiBkZWNvZGUoc2VsZixpbnB1dCxlcnJvcnM9J3N0cmljdCcpOgorICAgICAgICByZXR1cm4gY29kZWNzLmNoYXJtYXBfZGVjb2RlKGlucHV0LGVycm9ycyxkZWNvZGluZ190YWJsZSkKKworY2xhc3MgSW5jcmVtZW50YWxFbmNvZGVyKGNvZGVjcy5JbmNyZW1lbnRhbEVuY29kZXIpOgorICAgIGRlZiBlbmNvZGUoc2VsZiwgaW5wdXQsIGZpbmFsPUZhbHNlKToKKyAgICAgICAgcmV0dXJuIGNvZGVjcy5jaGFybWFwX2VuY29kZShpbnB1dCxzZWxmLmVycm9ycyxlbmNvZGluZ19tYXApWzBdCisKK2NsYXNzIEluY3JlbWVudGFsRGVjb2Rlcihjb2RlY3MuSW5jcmVtZW50YWxEZWNvZGVyKToKKyAgICBkZWYgZGVjb2RlKHNlbGYsIGlucHV0LCBmaW5hbD1GYWxzZSk6CisgICAgICAgIHJldHVybiBjb2RlY3MuY2hhcm1hcF9kZWNvZGUoaW5wdXQsc2VsZi5lcnJvcnMsZGVjb2RpbmdfdGFibGUpWzBdCisKK2NsYXNzIFN0cmVhbVdyaXRlcihDb2RlYyxjb2RlY3MuU3RyZWFtV3JpdGVyKToKKyAgICBwYXNzCisKK2NsYXNzIFN0cmVhbVJlYWRlcihDb2RlYyxjb2RlY3MuU3RyZWFtUmVhZGVyKToKKyAgICBwYXNzCisKKyMjIyBlbmNvZGluZ3MgbW9kdWxlIEFQSQorCitkZWYgZ2V0cmVnZW50cnkoKToKKyAgICByZXR1cm4gY29kZWNzLkNvZGVjSW5mbygKKyAgICAgICAgbmFtZT0nY3AxMTI1JywKKyAgICAgICAgZW5jb2RlPUNvZGVjKCkuZW5jb2RlLAorICAgICAgICBkZWNvZGU9Q29kZWMoKS5kZWNvZGUsCisgICAgICAgIGluY3JlbWVudGFsZW5jb2Rlcj1JbmNyZW1lbnRhbEVuY29kZXIsCisgICAgICAgIGluY3JlbWVudGFsZGVjb2Rlcj1JbmNyZW1lbnRhbERlY29kZXIsCisgICAgICAgIHN0cmVhbXJlYWRlcj1TdHJlYW1SZWFkZXIsCisgICAgICAgIHN0cmVhbXdyaXRlcj1TdHJlYW1Xcml0ZXIsCisgICAgKQorCisjIyMgRGVjb2RpbmcgTWFwCisKK2RlY29kaW5nX21hcCA9IGNvZGVjcy5tYWtlX2lkZW50aXR5X2RpY3QocmFuZ2UoMjU2KSkKK2RlY29kaW5nX21hcC51cGRhdGUoeworICAgIDB4MDA4MDogMHgwNDEwLCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgQQorICAgIDB4MDA4MTogMHgwNDExLCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgQkUKKyAgICAweDAwODI6IDB4MDQxMiwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIFZFCisgICAgMHgwMDgzOiAweDA0MTMsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBHSEUKKyAgICAweDAwODQ6IDB4MDQxNCwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIERFCisgICAgMHgwMDg1OiAweDA0MTUsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBJRQorICAgIDB4MDA4NjogMHgwNDE2LCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgWkhFCisgICAgMHgwMDg3OiAweDA0MTcsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBaRQorICAgIDB4MDA4ODogMHgwNDE4LCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgSQorICAgIDB4MDA4OTogMHgwNDE5LCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgU0hPUlQgSQorICAgIDB4MDA4YTogMHgwNDFhLCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgS0EKKyAgICAweDAwOGI6IDB4MDQxYiwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIEVMCisgICAgMHgwMDhjOiAweDA0MWMsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBFTQorICAgIDB4MDA4ZDogMHgwNDFkLCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgRU4KKyAgICAweDAwOGU6IDB4MDQxZSwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIE8KKyAgICAweDAwOGY6IDB4MDQxZiwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIFBFCisgICAgMHgwMDkwOiAweDA0MjAsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBFUgorICAgIDB4MDA5MTogMHgwNDIxLCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgRVMKKyAgICAweDAwOTI6IDB4MDQyMiwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIFRFCisgICAgMHgwMDkzOiAweDA0MjMsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBVCisgICAgMHgwMDk0OiAweDA0MjQsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBFRgorICAgIDB4MDA5NTogMHgwNDI1LCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgSEEKKyAgICAweDAwOTY6IDB4MDQyNiwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIFRTRQorICAgIDB4MDA5NzogMHgwNDI3LCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgQ0hFCisgICAgMHgwMDk4OiAweDA0MjgsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBTSEEKKyAgICAweDAwOTk6IDB4MDQyOSwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIFNIQ0hBCisgICAgMHgwMDlhOiAweDA0MmEsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBIQVJEIFNJR04KKyAgICAweDAwOWI6IDB4MDQyYiwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIFlFUlUKKyAgICAweDAwOWM6IDB4MDQyYywgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIFNPRlQgU0lHTgorICAgIDB4MDA5ZDogMHgwNDJkLCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgRQorICAgIDB4MDA5ZTogMHgwNDJlLCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgWVUKKyAgICAweDAwOWY6IDB4MDQyZiwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIFlBCisgICAgMHgwMGEwOiAweDA0MzAsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgQQorICAgIDB4MDBhMTogMHgwNDMxLCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEJFCisgICAgMHgwMGEyOiAweDA0MzIsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgVkUKKyAgICAweDAwYTM6IDB4MDQzMywgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBHSEUKKyAgICAweDAwYTQ6IDB4MDQzNCwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBERQorICAgIDB4MDBhNTogMHgwNDM1LCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIElFCisgICAgMHgwMGE2OiAweDA0MzYsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgWkhFCisgICAgMHgwMGE3OiAweDA0MzcsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgWkUKKyAgICAweDAwYTg6IDB4MDQzOCwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBJCisgICAgMHgwMGE5OiAweDA0MzksICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgU0hPUlQgSQorICAgIDB4MDBhYTogMHgwNDNhLCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEtBCisgICAgMHgwMGFiOiAweDA0M2IsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgRUwKKyAgICAweDAwYWM6IDB4MDQzYywgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBFTQorICAgIDB4MDBhZDogMHgwNDNkLCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEVOCisgICAgMHgwMGFlOiAweDA0M2UsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgTworICAgIDB4MDBhZjogMHgwNDNmLCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFBFCisgICAgMHgwMGIwOiAweDI1OTEsICAgICAjICBMSUdIVCBTSEFERQorICAgIDB4MDBiMTogMHgyNTkyLCAgICAgIyAgTUVESVVNIFNIQURFCisgICAgMHgwMGIyOiAweDI1OTMsICAgICAjICBEQVJLIFNIQURFCisgICAgMHgwMGIzOiAweDI1MDIsICAgICAjICBCT1ggRFJBV0lOR1MgTElHSFQgVkVSVElDQUwKKyAgICAweDAwYjQ6IDB4MjUyNCwgICAgICMgIEJPWCBEUkFXSU5HUyBMSUdIVCBWRVJUSUNBTCBBTkQgTEVGVAorICAgIDB4MDBiNTogMHgyNTYxLCAgICAgIyAgQk9YIERSQVdJTkdTIFZFUlRJQ0FMIFNJTkdMRSBBTkQgTEVGVCBET1VCTEUKKyAgICAweDAwYjY6IDB4MjU2MiwgICAgICMgIEJPWCBEUkFXSU5HUyBWRVJUSUNBTCBET1VCTEUgQU5EIExFRlQgU0lOR0xFCisgICAgMHgwMGI3OiAweDI1NTYsICAgICAjICBCT1ggRFJBV0lOR1MgRE9XTiBET1VCTEUgQU5EIExFRlQgU0lOR0xFCisgICAgMHgwMGI4OiAweDI1NTUsICAgICAjICBCT1ggRFJBV0lOR1MgRE9XTiBTSU5HTEUgQU5EIExFRlQgRE9VQkxFCisgICAgMHgwMGI5OiAweDI1NjMsICAgICAjICBCT1ggRFJBV0lOR1MgRE9VQkxFIFZFUlRJQ0FMIEFORCBMRUZUCisgICAgMHgwMGJhOiAweDI1NTEsICAgICAjICBCT1ggRFJBV0lOR1MgRE9VQkxFIFZFUlRJQ0FMCisgICAgMHgwMGJiOiAweDI1NTcsICAgICAjICBCT1ggRFJBV0lOR1MgRE9VQkxFIERPV04gQU5EIExFRlQKKyAgICAweDAwYmM6IDB4MjU1ZCwgICAgICMgIEJPWCBEUkFXSU5HUyBET1VCTEUgVVAgQU5EIExFRlQKKyAgICAweDAwYmQ6IDB4MjU1YywgICAgICMgIEJPWCBEUkFXSU5HUyBVUCBET1VCTEUgQU5EIExFRlQgU0lOR0xFCisgICAgMHgwMGJlOiAweDI1NWIsICAgICAjICBCT1ggRFJBV0lOR1MgVVAgU0lOR0xFIEFORCBMRUZUIERPVUJMRQorICAgIDB4MDBiZjogMHgyNTEwLCAgICAgIyAgQk9YIERSQVdJTkdTIExJR0hUIERPV04gQU5EIExFRlQKKyAgICAweDAwYzA6IDB4MjUxNCwgICAgICMgIEJPWCBEUkFXSU5HUyBMSUdIVCBVUCBBTkQgUklHSFQKKyAgICAweDAwYzE6IDB4MjUzNCwgICAgICMgIEJPWCBEUkFXSU5HUyBMSUdIVCBVUCBBTkQgSE9SSVpPTlRBTAorICAgIDB4MDBjMjogMHgyNTJjLCAgICAgIyAgQk9YIERSQVdJTkdTIExJR0hUIERPV04gQU5EIEhPUklaT05UQUwKKyAgICAweDAwYzM6IDB4MjUxYywgICAgICMgIEJPWCBEUkFXSU5HUyBMSUdIVCBWRVJUSUNBTCBBTkQgUklHSFQKKyAgICAweDAwYzQ6IDB4MjUwMCwgICAgICMgIEJPWCBEUkFXSU5HUyBMSUdIVCBIT1JJWk9OVEFMCisgICAgMHgwMGM1OiAweDI1M2MsICAgICAjICBCT1ggRFJBV0lOR1MgTElHSFQgVkVSVElDQUwgQU5EIEhPUklaT05UQUwKKyAgICAweDAwYzY6IDB4MjU1ZSwgICAgICMgIEJPWCBEUkFXSU5HUyBWRVJUSUNBTCBTSU5HTEUgQU5EIFJJR0hUIERPVUJMRQorICAgIDB4MDBjNzogMHgyNTVmLCAgICAgIyAgQk9YIERSQVdJTkdTIFZFUlRJQ0FMIERPVUJMRSBBTkQgUklHSFQgU0lOR0xFCisgICAgMHgwMGM4OiAweDI1NWEsICAgICAjICBCT1ggRFJBV0lOR1MgRE9VQkxFIFVQIEFORCBSSUdIVAorICAgIDB4MDBjOTogMHgyNTU0LCAgICAgIyAgQk9YIERSQVdJTkdTIERPVUJMRSBET1dOIEFORCBSSUdIVAorICAgIDB4MDBjYTogMHgyNTY5LCAgICAgIyAgQk9YIERSQVdJTkdTIERPVUJMRSBVUCBBTkQgSE9SSVpPTlRBTAorICAgIDB4MDBjYjogMHgyNTY2LCAgICAgIyAgQk9YIERSQVdJTkdTIERPVUJMRSBET1dOIEFORCBIT1JJWk9OVEFMCisgICAgMHgwMGNjOiAweDI1NjAsICAgICAjICBCT1ggRFJBV0lOR1MgRE9VQkxFIFZFUlRJQ0FMIEFORCBSSUdIVAorICAgIDB4MDBjZDogMHgyNTUwLCAgICAgIyAgQk9YIERSQVdJTkdTIERPVUJMRSBIT1JJWk9OVEFMCisgICAgMHgwMGNlOiAweDI1NmMsICAgICAjICBCT1ggRFJBV0lOR1MgRE9VQkxFIFZFUlRJQ0FMIEFORCBIT1JJWk9OVEFMCisgICAgMHgwMGNmOiAweDI1NjcsICAgICAjICBCT1ggRFJBV0lOR1MgVVAgU0lOR0xFIEFORCBIT1JJWk9OVEFMIERPVUJMRQorICAgIDB4MDBkMDogMHgyNTY4LCAgICAgIyAgQk9YIERSQVdJTkdTIFVQIERPVUJMRSBBTkQgSE9SSVpPTlRBTCBTSU5HTEUKKyAgICAweDAwZDE6IDB4MjU2NCwgICAgICMgIEJPWCBEUkFXSU5HUyBET1dOIFNJTkdMRSBBTkQgSE9SSVpPTlRBTCBET1VCTEUKKyAgICAweDAwZDI6IDB4MjU2NSwgICAgICMgIEJPWCBEUkFXSU5HUyBET1dOIERPVUJMRSBBTkQgSE9SSVpPTlRBTCBTSU5HTEUKKyAgICAweDAwZDM6IDB4MjU1OSwgICAgICMgIEJPWCBEUkFXSU5HUyBVUCBET1VCTEUgQU5EIFJJR0hUIFNJTkdMRQorICAgIDB4MDBkNDogMHgyNTU4LCAgICAgIyAgQk9YIERSQVdJTkdTIFVQIFNJTkdMRSBBTkQgUklHSFQgRE9VQkxFCisgICAgMHgwMGQ1OiAweDI1NTIsICAgICAjICBCT1ggRFJBV0lOR1MgRE9XTiBTSU5HTEUgQU5EIFJJR0hUIERPVUJMRQorICAgIDB4MDBkNjogMHgyNTUzLCAgICAgIyAgQk9YIERSQVdJTkdTIERPV04gRE9VQkxFIEFORCBSSUdIVCBTSU5HTEUKKyAgICAweDAwZDc6IDB4MjU2YiwgICAgICMgIEJPWCBEUkFXSU5HUyBWRVJUSUNBTCBET1VCTEUgQU5EIEhPUklaT05UQUwgU0lOR0xFCisgICAgMHgwMGQ4OiAweDI1NmEsICAgICAjICBCT1ggRFJBV0lOR1MgVkVSVElDQUwgU0lOR0xFIEFORCBIT1JJWk9OVEFMIERPVUJMRQorICAgIDB4MDBkOTogMHgyNTE4LCAgICAgIyAgQk9YIERSQVdJTkdTIExJR0hUIFVQIEFORCBMRUZUCisgICAgMHgwMGRhOiAweDI1MGMsICAgICAjICBCT1ggRFJBV0lOR1MgTElHSFQgRE9XTiBBTkQgUklHSFQKKyAgICAweDAwZGI6IDB4MjU4OCwgICAgICMgIEZVTEwgQkxPQ0sKKyAgICAweDAwZGM6IDB4MjU4NCwgICAgICMgIExPV0VSIEhBTEYgQkxPQ0sKKyAgICAweDAwZGQ6IDB4MjU4YywgICAgICMgIExFRlQgSEFMRiBCTE9DSworICAgIDB4MDBkZTogMHgyNTkwLCAgICAgIyAgUklHSFQgSEFMRiBCTE9DSworICAgIDB4MDBkZjogMHgyNTgwLCAgICAgIyAgVVBQRVIgSEFMRiBCTE9DSworICAgIDB4MDBlMDogMHgwNDQwLCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEVSCisgICAgMHgwMGUxOiAweDA0NDEsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgRVMKKyAgICAweDAwZTI6IDB4MDQ0MiwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBURQorICAgIDB4MDBlMzogMHgwNDQzLCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFUKKyAgICAweDAwZTQ6IDB4MDQ0NCwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBFRgorICAgIDB4MDBlNTogMHgwNDQ1LCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEhBCisgICAgMHgwMGU2OiAweDA0NDYsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgVFNFCisgICAgMHgwMGU3OiAweDA0NDcsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgQ0hFCisgICAgMHgwMGU4OiAweDA0NDgsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgU0hBCisgICAgMHgwMGU5OiAweDA0NDksICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgU0hDSEEKKyAgICAweDAwZWE6IDB4MDQ0YSwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBIQVJEIFNJR04KKyAgICAweDAwZWI6IDB4MDQ0YiwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBZRVJVCisgICAgMHgwMGVjOiAweDA0NGMsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgU09GVCBTSUdOCisgICAgMHgwMGVkOiAweDA0NGQsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgRQorICAgIDB4MDBlZTogMHgwNDRlLCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFlVCisgICAgMHgwMGVmOiAweDA0NGYsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgWUEKKyAgICAweDAwZjA6IDB4MDQwMSwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIElPCisgICAgMHgwMGYxOiAweDA0NTEsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgSU8KKyAgICAweDAwZjI6IDB4MDQ5MCwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIEdIRSBXSVRIIFVQVFVSTgorICAgIDB4MDBmMzogMHgwNDkxLCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEdIRSBXSVRIIFVQVFVSTgorICAgIDB4MDBmNDogMHgwNDA0LCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgVUtSQUlOSUFOIElFCisgICAgMHgwMGY1OiAweDA0NTQsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgVUtSQUlOSUFOIElFCisgICAgMHgwMGY2OiAweDA0MDYsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBCWUVMT1JVU1NJQU4tVUtSQUlOSUFOIEkKKyAgICAweDAwZjc6IDB4MDQ1NiwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBCWUVMT1JVU1NJQU4tVUtSQUlOSUFOIEkKKyAgICAweDAwZjg6IDB4MDQwNywgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIFlJCisgICAgMHgwMGY5OiAweDA0NTcsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgWUkKKyAgICAweDAwZmE6IDB4MDBiNywgICAgICMgIE1JRERMRSBET1QKKyAgICAweDAwZmI6IDB4MjIxYSwgICAgICMgIFNRVUFSRSBST09UCisgICAgMHgwMGZjOiAweDIxMTYsICAgICAjICBOVU1FUk8gU0lHTgorICAgIDB4MDBmZDogMHgwMGE0LCAgICAgIyAgQ1VSUkVOQ1kgU0lHTgorICAgIDB4MDBmZTogMHgyNWEwLCAgICAgIyAgQkxBQ0sgU1FVQVJFCisgICAgMHgwMGZmOiAweDAwYTAsICAgICAjICBOTy1CUkVBSyBTUEFDRQorfSkKKworIyMjIERlY29kaW5nIFRhYmxlCisKK2RlY29kaW5nX3RhYmxlID0gKAorICAgICdceDAwJyAgICAgIyAgMHgwMDAwIC0+IE5VTEwKKyAgICAnXHgwMScgICAgICMgIDB4MDAwMSAtPiBTVEFSVCBPRiBIRUFESU5HCisgICAgJ1x4MDInICAgICAjICAweDAwMDIgLT4gU1RBUlQgT0YgVEVYVAorICAgICdceDAzJyAgICAgIyAgMHgwMDAzIC0+IEVORCBPRiBURVhUCisgICAgJ1x4MDQnICAgICAjICAweDAwMDQgLT4gRU5EIE9GIFRSQU5TTUlTU0lPTgorICAgICdceDA1JyAgICAgIyAgMHgwMDA1IC0+IEVOUVVJUlkKKyAgICAnXHgwNicgICAgICMgIDB4MDAwNiAtPiBBQ0tOT1dMRURHRQorICAgICdceDA3JyAgICAgIyAgMHgwMDA3IC0+IEJFTEwKKyAgICAnXHgwOCcgICAgICMgIDB4MDAwOCAtPiBCQUNLU1BBQ0UKKyAgICAnXHQnICAgICAgICMgIDB4MDAwOSAtPiBIT1JJWk9OVEFMIFRBQlVMQVRJT04KKyAgICAnXG4nICAgICAgICMgIDB4MDAwYSAtPiBMSU5FIEZFRUQKKyAgICAnXHgwYicgICAgICMgIDB4MDAwYiAtPiBWRVJUSUNBTCBUQUJVTEFUSU9OCisgICAgJ1x4MGMnICAgICAjICAweDAwMGMgLT4gRk9STSBGRUVECisgICAgJ1xyJyAgICAgICAjICAweDAwMGQgLT4gQ0FSUklBR0UgUkVUVVJOCisgICAgJ1x4MGUnICAgICAjICAweDAwMGUgLT4gU0hJRlQgT1VUCisgICAgJ1x4MGYnICAgICAjICAweDAwMGYgLT4gU0hJRlQgSU4KKyAgICAnXHgxMCcgICAgICMgIDB4MDAxMCAtPiBEQVRBIExJTksgRVNDQVBFCisgICAgJ1x4MTEnICAgICAjICAweDAwMTEgLT4gREVWSUNFIENPTlRST0wgT05FCisgICAgJ1x4MTInICAgICAjICAweDAwMTIgLT4gREVWSUNFIENPTlRST0wgVFdPCisgICAgJ1x4MTMnICAgICAjICAweDAwMTMgLT4gREVWSUNFIENPTlRST0wgVEhSRUUKKyAgICAnXHgxNCcgICAgICMgIDB4MDAxNCAtPiBERVZJQ0UgQ09OVFJPTCBGT1VSCisgICAgJ1x4MTUnICAgICAjICAweDAwMTUgLT4gTkVHQVRJVkUgQUNLTk9XTEVER0UKKyAgICAnXHgxNicgICAgICMgIDB4MDAxNiAtPiBTWU5DSFJPTk9VUyBJRExFCisgICAgJ1x4MTcnICAgICAjICAweDAwMTcgLT4gRU5EIE9GIFRSQU5TTUlTU0lPTiBCTE9DSworICAgICdceDE4JyAgICAgIyAgMHgwMDE4IC0+IENBTkNFTAorICAgICdceDE5JyAgICAgIyAgMHgwMDE5IC0+IEVORCBPRiBNRURJVU0KKyAgICAnXHgxYScgICAgICMgIDB4MDAxYSAtPiBTVUJTVElUVVRFCisgICAgJ1x4MWInICAgICAjICAweDAwMWIgLT4gRVNDQVBFCisgICAgJ1x4MWMnICAgICAjICAweDAwMWMgLT4gRklMRSBTRVBBUkFUT1IKKyAgICAnXHgxZCcgICAgICMgIDB4MDAxZCAtPiBHUk9VUCBTRVBBUkFUT1IKKyAgICAnXHgxZScgICAgICMgIDB4MDAxZSAtPiBSRUNPUkQgU0VQQVJBVE9SCisgICAgJ1x4MWYnICAgICAjICAweDAwMWYgLT4gVU5JVCBTRVBBUkFUT1IKKyAgICAnICcgICAgICAgICMgIDB4MDAyMCAtPiBTUEFDRQorICAgICchJyAgICAgICAgIyAgMHgwMDIxIC0+IEVYQ0xBTUFUSU9OIE1BUksKKyAgICAnIicgICAgICAgICMgIDB4MDAyMiAtPiBRVU9UQVRJT04gTUFSSworICAgICcjJyAgICAgICAgIyAgMHgwMDIzIC0+IE5VTUJFUiBTSUdOCisgICAgJyQnICAgICAgICAjICAweDAwMjQgLT4gRE9MTEFSIFNJR04KKyAgICAnJScgICAgICAgICMgIDB4MDAyNSAtPiBQRVJDRU5UIFNJR04KKyAgICAnJicgICAgICAgICMgIDB4MDAyNiAtPiBBTVBFUlNBTkQKKyAgICAiJyIgICAgICAgICMgIDB4MDAyNyAtPiBBUE9TVFJPUEhFCisgICAgJygnICAgICAgICAjICAweDAwMjggLT4gTEVGVCBQQVJFTlRIRVNJUworICAgICcpJyAgICAgICAgIyAgMHgwMDI5IC0+IFJJR0hUIFBBUkVOVEhFU0lTCisgICAgJyonICAgICAgICAjICAweDAwMmEgLT4gQVNURVJJU0sKKyAgICAnKycgICAgICAgICMgIDB4MDAyYiAtPiBQTFVTIFNJR04KKyAgICAnLCcgICAgICAgICMgIDB4MDAyYyAtPiBDT01NQQorICAgICctJyAgICAgICAgIyAgMHgwMDJkIC0+IEhZUEhFTi1NSU5VUworICAgICcuJyAgICAgICAgIyAgMHgwMDJlIC0+IEZVTEwgU1RPUAorICAgICcvJyAgICAgICAgIyAgMHgwMDJmIC0+IFNPTElEVVMKKyAgICAnMCcgICAgICAgICMgIDB4MDAzMCAtPiBESUdJVCBaRVJPCisgICAgJzEnICAgICAgICAjICAweDAwMzEgLT4gRElHSVQgT05FCisgICAgJzInICAgICAgICAjICAweDAwMzIgLT4gRElHSVQgVFdPCisgICAgJzMnICAgICAgICAjICAweDAwMzMgLT4gRElHSVQgVEhSRUUKKyAgICAnNCcgICAgICAgICMgIDB4MDAzNCAtPiBESUdJVCBGT1VSCisgICAgJzUnICAgICAgICAjICAweDAwMzUgLT4gRElHSVQgRklWRQorICAgICc2JyAgICAgICAgIyAgMHgwMDM2IC0+IERJR0lUIFNJWAorICAgICc3JyAgICAgICAgIyAgMHgwMDM3IC0+IERJR0lUIFNFVkVOCisgICAgJzgnICAgICAgICAjICAweDAwMzggLT4gRElHSVQgRUlHSFQKKyAgICAnOScgICAgICAgICMgIDB4MDAzOSAtPiBESUdJVCBOSU5FCisgICAgJzonICAgICAgICAjICAweDAwM2EgLT4gQ09MT04KKyAgICAnOycgICAgICAgICMgIDB4MDAzYiAtPiBTRU1JQ09MT04KKyAgICAnPCcgICAgICAgICMgIDB4MDAzYyAtPiBMRVNTLVRIQU4gU0lHTgorICAgICc9JyAgICAgICAgIyAgMHgwMDNkIC0+IEVRVUFMUyBTSUdOCisgICAgJz4nICAgICAgICAjICAweDAwM2UgLT4gR1JFQVRFUi1USEFOIFNJR04KKyAgICAnPycgICAgICAgICMgIDB4MDAzZiAtPiBRVUVTVElPTiBNQVJLCisgICAgJ0AnICAgICAgICAjICAweDAwNDAgLT4gQ09NTUVSQ0lBTCBBVAorICAgICdBJyAgICAgICAgIyAgMHgwMDQxIC0+IExBVElOIENBUElUQUwgTEVUVEVSIEEKKyAgICAnQicgICAgICAgICMgIDB4MDA0MiAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBCCisgICAgJ0MnICAgICAgICAjICAweDAwNDMgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgQworICAgICdEJyAgICAgICAgIyAgMHgwMDQ0IC0+IExBVElOIENBUElUQUwgTEVUVEVSIEQKKyAgICAnRScgICAgICAgICMgIDB4MDA0NSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBFCisgICAgJ0YnICAgICAgICAjICAweDAwNDYgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgRgorICAgICdHJyAgICAgICAgIyAgMHgwMDQ3IC0+IExBVElOIENBUElUQUwgTEVUVEVSIEcKKyAgICAnSCcgICAgICAgICMgIDB4MDA0OCAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBICisgICAgJ0knICAgICAgICAjICAweDAwNDkgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgSQorICAgICdKJyAgICAgICAgIyAgMHgwMDRhIC0+IExBVElOIENBUElUQUwgTEVUVEVSIEoKKyAgICAnSycgICAgICAgICMgIDB4MDA0YiAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBLCisgICAgJ0wnICAgICAgICAjICAweDAwNGMgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgTAorICAgICdNJyAgICAgICAgIyAgMHgwMDRkIC0+IExBVElOIENBUElUQUwgTEVUVEVSIE0KKyAgICAnTicgICAgICAgICMgIDB4MDA0ZSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBOCisgICAgJ08nICAgICAgICAjICAweDAwNGYgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgTworICAgICdQJyAgICAgICAgIyAgMHgwMDUwIC0+IExBVElOIENBUElUQUwgTEVUVEVSIFAKKyAgICAnUScgICAgICAgICMgIDB4MDA1MSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBRCisgICAgJ1InICAgICAgICAjICAweDAwNTIgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgUgorICAgICdTJyAgICAgICAgIyAgMHgwMDUzIC0+IExBVElOIENBUElUQUwgTEVUVEVSIFMKKyAgICAnVCcgICAgICAgICMgIDB4MDA1NCAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBUCisgICAgJ1UnICAgICAgICAjICAweDAwNTUgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgVQorICAgICdWJyAgICAgICAgIyAgMHgwMDU2IC0+IExBVElOIENBUElUQUwgTEVUVEVSIFYKKyAgICAnVycgICAgICAgICMgIDB4MDA1NyAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBXCisgICAgJ1gnICAgICAgICAjICAweDAwNTggLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgWAorICAgICdZJyAgICAgICAgIyAgMHgwMDU5IC0+IExBVElOIENBUElUQUwgTEVUVEVSIFkKKyAgICAnWicgICAgICAgICMgIDB4MDA1YSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBaCisgICAgJ1snICAgICAgICAjICAweDAwNWIgLT4gTEVGVCBTUVVBUkUgQlJBQ0tFVAorICAgICdcXCcgICAgICAgIyAgMHgwMDVjIC0+IFJFVkVSU0UgU09MSURVUworICAgICddJyAgICAgICAgIyAgMHgwMDVkIC0+IFJJR0hUIFNRVUFSRSBCUkFDS0VUCisgICAgJ14nICAgICAgICAjICAweDAwNWUgLT4gQ0lSQ1VNRkxFWCBBQ0NFTlQKKyAgICAnXycgICAgICAgICMgIDB4MDA1ZiAtPiBMT1cgTElORQorICAgICdgJyAgICAgICAgIyAgMHgwMDYwIC0+IEdSQVZFIEFDQ0VOVAorICAgICdhJyAgICAgICAgIyAgMHgwMDYxIC0+IExBVElOIFNNQUxMIExFVFRFUiBBCisgICAgJ2InICAgICAgICAjICAweDAwNjIgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEIKKyAgICAnYycgICAgICAgICMgIDB4MDA2MyAtPiBMQVRJTiBTTUFMTCBMRVRURVIgQworICAgICdkJyAgICAgICAgIyAgMHgwMDY0IC0+IExBVElOIFNNQUxMIExFVFRFUiBECisgICAgJ2UnICAgICAgICAjICAweDAwNjUgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEUKKyAgICAnZicgICAgICAgICMgIDB4MDA2NiAtPiBMQVRJTiBTTUFMTCBMRVRURVIgRgorICAgICdnJyAgICAgICAgIyAgMHgwMDY3IC0+IExBVElOIFNNQUxMIExFVFRFUiBHCisgICAgJ2gnICAgICAgICAjICAweDAwNjggLT4gTEFUSU4gU01BTEwgTEVUVEVSIEgKKyAgICAnaScgICAgICAgICMgIDB4MDA2OSAtPiBMQVRJTiBTTUFMTCBMRVRURVIgSQorICAgICdqJyAgICAgICAgIyAgMHgwMDZhIC0+IExBVElOIFNNQUxMIExFVFRFUiBKCisgICAgJ2snICAgICAgICAjICAweDAwNmIgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEsKKyAgICAnbCcgICAgICAgICMgIDB4MDA2YyAtPiBMQVRJTiBTTUFMTCBMRVRURVIgTAorICAgICdtJyAgICAgICAgIyAgMHgwMDZkIC0+IExBVElOIFNNQUxMIExFVFRFUiBNCisgICAgJ24nICAgICAgICAjICAweDAwNmUgLT4gTEFUSU4gU01BTEwgTEVUVEVSIE4KKyAgICAnbycgICAgICAgICMgIDB4MDA2ZiAtPiBMQVRJTiBTTUFMTCBMRVRURVIgTworICAgICdwJyAgICAgICAgIyAgMHgwMDcwIC0+IExBVElOIFNNQUxMIExFVFRFUiBQCisgICAgJ3EnICAgICAgICAjICAweDAwNzEgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFEKKyAgICAncicgICAgICAgICMgIDB4MDA3MiAtPiBMQVRJTiBTTUFMTCBMRVRURVIgUgorICAgICdzJyAgICAgICAgIyAgMHgwMDczIC0+IExBVElOIFNNQUxMIExFVFRFUiBTCisgICAgJ3QnICAgICAgICAjICAweDAwNzQgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFQKKyAgICAndScgICAgICAgICMgIDB4MDA3NSAtPiBMQVRJTiBTTUFMTCBMRVRURVIgVQorICAgICd2JyAgICAgICAgIyAgMHgwMDc2IC0+IExBVElOIFNNQUxMIExFVFRFUiBWCisgICAgJ3cnICAgICAgICAjICAweDAwNzcgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFcKKyAgICAneCcgICAgICAgICMgIDB4MDA3OCAtPiBMQVRJTiBTTUFMTCBMRVRURVIgWAorICAgICd5JyAgICAgICAgIyAgMHgwMDc5IC0+IExBVElOIFNNQUxMIExFVFRFUiBZCisgICAgJ3onICAgICAgICAjICAweDAwN2EgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFoKKyAgICAneycgICAgICAgICMgIDB4MDA3YiAtPiBMRUZUIENVUkxZIEJSQUNLRVQKKyAgICAnfCcgICAgICAgICMgIDB4MDA3YyAtPiBWRVJUSUNBTCBMSU5FCisgICAgJ30nICAgICAgICAjICAweDAwN2QgLT4gUklHSFQgQ1VSTFkgQlJBQ0tFVAorICAgICd+JyAgICAgICAgIyAgMHgwMDdlIC0+IFRJTERFCisgICAgJ1x4N2YnICAgICAjICAweDAwN2YgLT4gREVMRVRFCisgICAgJ1x1MDQxMCcgICAjICAweDAwODAgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgQQorICAgICdcdTA0MTEnICAgIyAgMHgwMDgxIC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIEJFCisgICAgJ1x1MDQxMicgICAjICAweDAwODIgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgVkUKKyAgICAnXHUwNDEzJyAgICMgIDB4MDA4MyAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBHSEUKKyAgICAnXHUwNDE0JyAgICMgIDB4MDA4NCAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBERQorICAgICdcdTA0MTUnICAgIyAgMHgwMDg1IC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIElFCisgICAgJ1x1MDQxNicgICAjICAweDAwODYgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgWkhFCisgICAgJ1x1MDQxNycgICAjICAweDAwODcgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgWkUKKyAgICAnXHUwNDE4JyAgICMgIDB4MDA4OCAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBJCisgICAgJ1x1MDQxOScgICAjICAweDAwODkgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgU0hPUlQgSQorICAgICdcdTA0MWEnICAgIyAgMHgwMDhhIC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIEtBCisgICAgJ1x1MDQxYicgICAjICAweDAwOGIgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgRUwKKyAgICAnXHUwNDFjJyAgICMgIDB4MDA4YyAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBFTQorICAgICdcdTA0MWQnICAgIyAgMHgwMDhkIC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIEVOCisgICAgJ1x1MDQxZScgICAjICAweDAwOGUgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgTworICAgICdcdTA0MWYnICAgIyAgMHgwMDhmIC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIFBFCisgICAgJ1x1MDQyMCcgICAjICAweDAwOTAgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgRVIKKyAgICAnXHUwNDIxJyAgICMgIDB4MDA5MSAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBFUworICAgICdcdTA0MjInICAgIyAgMHgwMDkyIC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIFRFCisgICAgJ1x1MDQyMycgICAjICAweDAwOTMgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgVQorICAgICdcdTA0MjQnICAgIyAgMHgwMDk0IC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIEVGCisgICAgJ1x1MDQyNScgICAjICAweDAwOTUgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgSEEKKyAgICAnXHUwNDI2JyAgICMgIDB4MDA5NiAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBUU0UKKyAgICAnXHUwNDI3JyAgICMgIDB4MDA5NyAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBDSEUKKyAgICAnXHUwNDI4JyAgICMgIDB4MDA5OCAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBTSEEKKyAgICAnXHUwNDI5JyAgICMgIDB4MDA5OSAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBTSENIQQorICAgICdcdTA0MmEnICAgIyAgMHgwMDlhIC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIEhBUkQgU0lHTgorICAgICdcdTA0MmInICAgIyAgMHgwMDliIC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIFlFUlUKKyAgICAnXHUwNDJjJyAgICMgIDB4MDA5YyAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBTT0ZUIFNJR04KKyAgICAnXHUwNDJkJyAgICMgIDB4MDA5ZCAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBFCisgICAgJ1x1MDQyZScgICAjICAweDAwOWUgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgWVUKKyAgICAnXHUwNDJmJyAgICMgIDB4MDA5ZiAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBZQQorICAgICdcdTA0MzAnICAgIyAgMHgwMGEwIC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBBCisgICAgJ1x1MDQzMScgICAjICAweDAwYTEgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEJFCisgICAgJ1x1MDQzMicgICAjICAweDAwYTIgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFZFCisgICAgJ1x1MDQzMycgICAjICAweDAwYTMgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEdIRQorICAgICdcdTA0MzQnICAgIyAgMHgwMGE0IC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBERQorICAgICdcdTA0MzUnICAgIyAgMHgwMGE1IC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBJRQorICAgICdcdTA0MzYnICAgIyAgMHgwMGE2IC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBaSEUKKyAgICAnXHUwNDM3JyAgICMgIDB4MDBhNyAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgWkUKKyAgICAnXHUwNDM4JyAgICMgIDB4MDBhOCAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgSQorICAgICdcdTA0MzknICAgIyAgMHgwMGE5IC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBTSE9SVCBJCisgICAgJ1x1MDQzYScgICAjICAweDAwYWEgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEtBCisgICAgJ1x1MDQzYicgICAjICAweDAwYWIgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEVMCisgICAgJ1x1MDQzYycgICAjICAweDAwYWMgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEVNCisgICAgJ1x1MDQzZCcgICAjICAweDAwYWQgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEVOCisgICAgJ1x1MDQzZScgICAjICAweDAwYWUgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIE8KKyAgICAnXHUwNDNmJyAgICMgIDB4MDBhZiAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgUEUKKyAgICAnXHUyNTkxJyAgICMgIDB4MDBiMCAtPiBMSUdIVCBTSEFERQorICAgICdcdTI1OTInICAgIyAgMHgwMGIxIC0+IE1FRElVTSBTSEFERQorICAgICdcdTI1OTMnICAgIyAgMHgwMGIyIC0+IERBUksgU0hBREUKKyAgICAnXHUyNTAyJyAgICMgIDB4MDBiMyAtPiBCT1ggRFJBV0lOR1MgTElHSFQgVkVSVElDQUwKKyAgICAnXHUyNTI0JyAgICMgIDB4MDBiNCAtPiBCT1ggRFJBV0lOR1MgTElHSFQgVkVSVElDQUwgQU5EIExFRlQKKyAgICAnXHUyNTYxJyAgICMgIDB4MDBiNSAtPiBCT1ggRFJBV0lOR1MgVkVSVElDQUwgU0lOR0xFIEFORCBMRUZUIERPVUJMRQorICAgICdcdTI1NjInICAgIyAgMHgwMGI2IC0+IEJPWCBEUkFXSU5HUyBWRVJUSUNBTCBET1VCTEUgQU5EIExFRlQgU0lOR0xFCisgICAgJ1x1MjU1NicgICAjICAweDAwYjcgLT4gQk9YIERSQVdJTkdTIERPV04gRE9VQkxFIEFORCBMRUZUIFNJTkdMRQorICAgICdcdTI1NTUnICAgIyAgMHgwMGI4IC0+IEJPWCBEUkFXSU5HUyBET1dOIFNJTkdMRSBBTkQgTEVGVCBET1VCTEUKKyAgICAnXHUyNTYzJyAgICMgIDB4MDBiOSAtPiBCT1ggRFJBV0lOR1MgRE9VQkxFIFZFUlRJQ0FMIEFORCBMRUZUCisgICAgJ1x1MjU1MScgICAjICAweDAwYmEgLT4gQk9YIERSQVdJTkdTIERPVUJMRSBWRVJUSUNBTAorICAgICdcdTI1NTcnICAgIyAgMHgwMGJiIC0+IEJPWCBEUkFXSU5HUyBET1VCTEUgRE9XTiBBTkQgTEVGVAorICAgICdcdTI1NWQnICAgIyAgMHgwMGJjIC0+IEJPWCBEUkFXSU5HUyBET1VCTEUgVVAgQU5EIExFRlQKKyAgICAnXHUyNTVjJyAgICMgIDB4MDBiZCAtPiBCT1ggRFJBV0lOR1MgVVAgRE9VQkxFIEFORCBMRUZUIFNJTkdMRQorICAgICdcdTI1NWInICAgIyAgMHgwMGJlIC0+IEJPWCBEUkFXSU5HUyBVUCBTSU5HTEUgQU5EIExFRlQgRE9VQkxFCisgICAgJ1x1MjUxMCcgICAjICAweDAwYmYgLT4gQk9YIERSQVdJTkdTIExJR0hUIERPV04gQU5EIExFRlQKKyAgICAnXHUyNTE0JyAgICMgIDB4MDBjMCAtPiBCT1ggRFJBV0lOR1MgTElHSFQgVVAgQU5EIFJJR0hUCisgICAgJ1x1MjUzNCcgICAjICAweDAwYzEgLT4gQk9YIERSQVdJTkdTIExJR0hUIFVQIEFORCBIT1JJWk9OVEFMCisgICAgJ1x1MjUyYycgICAjICAweDAwYzIgLT4gQk9YIERSQVdJTkdTIExJR0hUIERPV04gQU5EIEhPUklaT05UQUwKKyAgICAnXHUyNTFjJyAgICMgIDB4MDBjMyAtPiBCT1ggRFJBV0lOR1MgTElHSFQgVkVSVElDQUwgQU5EIFJJR0hUCisgICAgJ1x1MjUwMCcgICAjICAweDAwYzQgLT4gQk9YIERSQVdJTkdTIExJR0hUIEhPUklaT05UQUwKKyAgICAnXHUyNTNjJyAgICMgIDB4MDBjNSAtPiBCT1ggRFJBV0lOR1MgTElHSFQgVkVSVElDQUwgQU5EIEhPUklaT05UQUwKKyAgICAnXHUyNTVlJyAgICMgIDB4MDBjNiAtPiBCT1ggRFJBV0lOR1MgVkVSVElDQUwgU0lOR0xFIEFORCBSSUdIVCBET1VCTEUKKyAgICAnXHUyNTVmJyAgICMgIDB4MDBjNyAtPiBCT1ggRFJBV0lOR1MgVkVSVElDQUwgRE9VQkxFIEFORCBSSUdIVCBTSU5HTEUKKyAgICAnXHUyNTVhJyAgICMgIDB4MDBjOCAtPiBCT1ggRFJBV0lOR1MgRE9VQkxFIFVQIEFORCBSSUdIVAorICAgICdcdTI1NTQnICAgIyAgMHgwMGM5IC0+IEJPWCBEUkFXSU5HUyBET1VCTEUgRE9XTiBBTkQgUklHSFQKKyAgICAnXHUyNTY5JyAgICMgIDB4MDBjYSAtPiBCT1ggRFJBV0lOR1MgRE9VQkxFIFVQIEFORCBIT1JJWk9OVEFMCisgICAgJ1x1MjU2NicgICAjICAweDAwY2IgLT4gQk9YIERSQVdJTkdTIERPVUJMRSBET1dOIEFORCBIT1JJWk9OVEFMCisgICAgJ1x1MjU2MCcgICAjICAweDAwY2MgLT4gQk9YIERSQVdJTkdTIERPVUJMRSBWRVJUSUNBTCBBTkQgUklHSFQKKyAgICAnXHUyNTUwJyAgICMgIDB4MDBjZCAtPiBCT1ggRFJBV0lOR1MgRE9VQkxFIEhPUklaT05UQUwKKyAgICAnXHUyNTZjJyAgICMgIDB4MDBjZSAtPiBCT1ggRFJBV0lOR1MgRE9VQkxFIFZFUlRJQ0FMIEFORCBIT1JJWk9OVEFMCisgICAgJ1x1MjU2NycgICAjICAweDAwY2YgLT4gQk9YIERSQVdJTkdTIFVQIFNJTkdMRSBBTkQgSE9SSVpPTlRBTCBET1VCTEUKKyAgICAnXHUyNTY4JyAgICMgIDB4MDBkMCAtPiBCT1ggRFJBV0lOR1MgVVAgRE9VQkxFIEFORCBIT1JJWk9OVEFMIFNJTkdMRQorICAgICdcdTI1NjQnICAgIyAgMHgwMGQxIC0+IEJPWCBEUkFXSU5HUyBET1dOIFNJTkdMRSBBTkQgSE9SSVpPTlRBTCBET1VCTEUKKyAgICAnXHUyNTY1JyAgICMgIDB4MDBkMiAtPiBCT1ggRFJBV0lOR1MgRE9XTiBET1VCTEUgQU5EIEhPUklaT05UQUwgU0lOR0xFCisgICAgJ1x1MjU1OScgICAjICAweDAwZDMgLT4gQk9YIERSQVdJTkdTIFVQIERPVUJMRSBBTkQgUklHSFQgU0lOR0xFCisgICAgJ1x1MjU1OCcgICAjICAweDAwZDQgLT4gQk9YIERSQVdJTkdTIFVQIFNJTkdMRSBBTkQgUklHSFQgRE9VQkxFCisgICAgJ1x1MjU1MicgICAjICAweDAwZDUgLT4gQk9YIERSQVdJTkdTIERPV04gU0lOR0xFIEFORCBSSUdIVCBET1VCTEUKKyAgICAnXHUyNTUzJyAgICMgIDB4MDBkNiAtPiBCT1ggRFJBV0lOR1MgRE9XTiBET1VCTEUgQU5EIFJJR0hUIFNJTkdMRQorICAgICdcdTI1NmInICAgIyAgMHgwMGQ3IC0+IEJPWCBEUkFXSU5HUyBWRVJUSUNBTCBET1VCTEUgQU5EIEhPUklaT05UQUwgU0lOR0xFCisgICAgJ1x1MjU2YScgICAjICAweDAwZDggLT4gQk9YIERSQVdJTkdTIFZFUlRJQ0FMIFNJTkdMRSBBTkQgSE9SSVpPTlRBTCBET1VCTEUKKyAgICAnXHUyNTE4JyAgICMgIDB4MDBkOSAtPiBCT1ggRFJBV0lOR1MgTElHSFQgVVAgQU5EIExFRlQKKyAgICAnXHUyNTBjJyAgICMgIDB4MDBkYSAtPiBCT1ggRFJBV0lOR1MgTElHSFQgRE9XTiBBTkQgUklHSFQKKyAgICAnXHUyNTg4JyAgICMgIDB4MDBkYiAtPiBGVUxMIEJMT0NLCisgICAgJ1x1MjU4NCcgICAjICAweDAwZGMgLT4gTE9XRVIgSEFMRiBCTE9DSworICAgICdcdTI1OGMnICAgIyAgMHgwMGRkIC0+IExFRlQgSEFMRiBCTE9DSworICAgICdcdTI1OTAnICAgIyAgMHgwMGRlIC0+IFJJR0hUIEhBTEYgQkxPQ0sKKyAgICAnXHUyNTgwJyAgICMgIDB4MDBkZiAtPiBVUFBFUiBIQUxGIEJMT0NLCisgICAgJ1x1MDQ0MCcgICAjICAweDAwZTAgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEVSCisgICAgJ1x1MDQ0MScgICAjICAweDAwZTEgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEVTCisgICAgJ1x1MDQ0MicgICAjICAweDAwZTIgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFRFCisgICAgJ1x1MDQ0MycgICAjICAweDAwZTMgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFUKKyAgICAnXHUwNDQ0JyAgICMgIDB4MDBlNCAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgRUYKKyAgICAnXHUwNDQ1JyAgICMgIDB4MDBlNSAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgSEEKKyAgICAnXHUwNDQ2JyAgICMgIDB4MDBlNiAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgVFNFCisgICAgJ1x1MDQ0NycgICAjICAweDAwZTcgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIENIRQorICAgICdcdTA0NDgnICAgIyAgMHgwMGU4IC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBTSEEKKyAgICAnXHUwNDQ5JyAgICMgIDB4MDBlOSAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgU0hDSEEKKyAgICAnXHUwNDRhJyAgICMgIDB4MDBlYSAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgSEFSRCBTSUdOCisgICAgJ1x1MDQ0YicgICAjICAweDAwZWIgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFlFUlUKKyAgICAnXHUwNDRjJyAgICMgIDB4MDBlYyAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgU09GVCBTSUdOCisgICAgJ1x1MDQ0ZCcgICAjICAweDAwZWQgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEUKKyAgICAnXHUwNDRlJyAgICMgIDB4MDBlZSAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgWVUKKyAgICAnXHUwNDRmJyAgICMgIDB4MDBlZiAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgWUEKKyAgICAnXHUwNDAxJyAgICMgIDB4MDBmMCAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBJTworICAgICdcdTA0NTEnICAgIyAgMHgwMGYxIC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBJTworICAgICdcdTA0OTAnICAgIyAgMHgwMGYyIC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIEdIRSBXSVRIIFVQVFVSTgorICAgICdcdTA0OTEnICAgIyAgMHgwMGYzIC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBHSEUgV0lUSCBVUFRVUk4KKyAgICAnXHUwNDA0JyAgICMgIDB4MDBmNCAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBVS1JBSU5JQU4gSUUKKyAgICAnXHUwNDU0JyAgICMgIDB4MDBmNSAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgVUtSQUlOSUFOIElFCisgICAgJ1x1MDQwNicgICAjICAweDAwZjYgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgQllFTE9SVVNTSUFOLVVLUkFJTklBTiBJCisgICAgJ1x1MDQ1NicgICAjICAweDAwZjcgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEJZRUxPUlVTU0lBTi1VS1JBSU5JQU4gSQorICAgICdcdTA0MDcnICAgIyAgMHgwMGY4IC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIFlJCisgICAgJ1x1MDQ1NycgICAjICAweDAwZjkgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFlJCisgICAgJ1x4YjcnICAgICAjICAweDAwZmEgLT4gTUlERExFIERPVAorICAgICdcdTIyMWEnICAgIyAgMHgwMGZiIC0+IFNRVUFSRSBST09UCisgICAgJ1x1MjExNicgICAjICAweDAwZmMgLT4gTlVNRVJPIFNJR04KKyAgICAnXHhhNCcgICAgICMgIDB4MDBmZCAtPiBDVVJSRU5DWSBTSUdOCisgICAgJ1x1MjVhMCcgICAjICAweDAwZmUgLT4gQkxBQ0sgU1FVQVJFCisgICAgJ1x4YTAnICAgICAjICAweDAwZmYgLT4gTk8tQlJFQUsgU1BBQ0UKKykKKworIyMjIEVuY29kaW5nIE1hcAorCitlbmNvZGluZ19tYXAgPSB7CisgICAgMHgwMDAwOiAweDAwMDAsICAgICAjICBOVUxMCisgICAgMHgwMDAxOiAweDAwMDEsICAgICAjICBTVEFSVCBPRiBIRUFESU5HCisgICAgMHgwMDAyOiAweDAwMDIsICAgICAjICBTVEFSVCBPRiBURVhUCisgICAgMHgwMDAzOiAweDAwMDMsICAgICAjICBFTkQgT0YgVEVYVAorICAgIDB4MDAwNDogMHgwMDA0LCAgICAgIyAgRU5EIE9GIFRSQU5TTUlTU0lPTgorICAgIDB4MDAwNTogMHgwMDA1LCAgICAgIyAgRU5RVUlSWQorICAgIDB4MDAwNjogMHgwMDA2LCAgICAgIyAgQUNLTk9XTEVER0UKKyAgICAweDAwMDc6IDB4MDAwNywgICAgICMgIEJFTEwKKyAgICAweDAwMDg6IDB4MDAwOCwgICAgICMgIEJBQ0tTUEFDRQorICAgIDB4MDAwOTogMHgwMDA5LCAgICAgIyAgSE9SSVpPTlRBTCBUQUJVTEFUSU9OCisgICAgMHgwMDBhOiAweDAwMGEsICAgICAjICBMSU5FIEZFRUQKKyAgICAweDAwMGI6IDB4MDAwYiwgICAgICMgIFZFUlRJQ0FMIFRBQlVMQVRJT04KKyAgICAweDAwMGM6IDB4MDAwYywgICAgICMgIEZPUk0gRkVFRAorICAgIDB4MDAwZDogMHgwMDBkLCAgICAgIyAgQ0FSUklBR0UgUkVUVVJOCisgICAgMHgwMDBlOiAweDAwMGUsICAgICAjICBTSElGVCBPVVQKKyAgICAweDAwMGY6IDB4MDAwZiwgICAgICMgIFNISUZUIElOCisgICAgMHgwMDEwOiAweDAwMTAsICAgICAjICBEQVRBIExJTksgRVNDQVBFCisgICAgMHgwMDExOiAweDAwMTEsICAgICAjICBERVZJQ0UgQ09OVFJPTCBPTkUKKyAgICAweDAwMTI6IDB4MDAxMiwgICAgICMgIERFVklDRSBDT05UUk9MIFRXTworICAgIDB4MDAxMzogMHgwMDEzLCAgICAgIyAgREVWSUNFIENPTlRST0wgVEhSRUUKKyAgICAweDAwMTQ6IDB4MDAxNCwgICAgICMgIERFVklDRSBDT05UUk9MIEZPVVIKKyAgICAweDAwMTU6IDB4MDAxNSwgICAgICMgIE5FR0FUSVZFIEFDS05PV0xFREdFCisgICAgMHgwMDE2OiAweDAwMTYsICAgICAjICBTWU5DSFJPTk9VUyBJRExFCisgICAgMHgwMDE3OiAweDAwMTcsICAgICAjICBFTkQgT0YgVFJBTlNNSVNTSU9OIEJMT0NLCisgICAgMHgwMDE4OiAweDAwMTgsICAgICAjICBDQU5DRUwKKyAgICAweDAwMTk6IDB4MDAxOSwgICAgICMgIEVORCBPRiBNRURJVU0KKyAgICAweDAwMWE6IDB4MDAxYSwgICAgICMgIFNVQlNUSVRVVEUKKyAgICAweDAwMWI6IDB4MDAxYiwgICAgICMgIEVTQ0FQRQorICAgIDB4MDAxYzogMHgwMDFjLCAgICAgIyAgRklMRSBTRVBBUkFUT1IKKyAgICAweDAwMWQ6IDB4MDAxZCwgICAgICMgIEdST1VQIFNFUEFSQVRPUgorICAgIDB4MDAxZTogMHgwMDFlLCAgICAgIyAgUkVDT1JEIFNFUEFSQVRPUgorICAgIDB4MDAxZjogMHgwMDFmLCAgICAgIyAgVU5JVCBTRVBBUkFUT1IKKyAgICAweDAwMjA6IDB4MDAyMCwgICAgICMgIFNQQUNFCisgICAgMHgwMDIxOiAweDAwMjEsICAgICAjICBFWENMQU1BVElPTiBNQVJLCisgICAgMHgwMDIyOiAweDAwMjIsICAgICAjICBRVU9UQVRJT04gTUFSSworICAgIDB4MDAyMzogMHgwMDIzLCAgICAgIyAgTlVNQkVSIFNJR04KKyAgICAweDAwMjQ6IDB4MDAyNCwgICAgICMgIERPTExBUiBTSUdOCisgICAgMHgwMDI1OiAweDAwMjUsICAgICAjICBQRVJDRU5UIFNJR04KKyAgICAweDAwMjY6IDB4MDAyNiwgICAgICMgIEFNUEVSU0FORAorICAgIDB4MDAyNzogMHgwMDI3LCAgICAgIyAgQVBPU1RST1BIRQorICAgIDB4MDAyODogMHgwMDI4LCAgICAgIyAgTEVGVCBQQVJFTlRIRVNJUworICAgIDB4MDAyOTogMHgwMDI5LCAgICAgIyAgUklHSFQgUEFSRU5USEVTSVMKKyAgICAweDAwMmE6IDB4MDAyYSwgICAgICMgIEFTVEVSSVNLCisgICAgMHgwMDJiOiAweDAwMmIsICAgICAjICBQTFVTIFNJR04KKyAgICAweDAwMmM6IDB4MDAyYywgICAgICMgIENPTU1BCisgICAgMHgwMDJkOiAweDAwMmQsICAgICAjICBIWVBIRU4tTUlOVVMKKyAgICAweDAwMmU6IDB4MDAyZSwgICAgICMgIEZVTEwgU1RPUAorICAgIDB4MDAyZjogMHgwMDJmLCAgICAgIyAgU09MSURVUworICAgIDB4MDAzMDogMHgwMDMwLCAgICAgIyAgRElHSVQgWkVSTworICAgIDB4MDAzMTogMHgwMDMxLCAgICAgIyAgRElHSVQgT05FCisgICAgMHgwMDMyOiAweDAwMzIsICAgICAjICBESUdJVCBUV08KKyAgICAweDAwMzM6IDB4MDAzMywgICAgICMgIERJR0lUIFRIUkVFCisgICAgMHgwMDM0OiAweDAwMzQsICAgICAjICBESUdJVCBGT1VSCisgICAgMHgwMDM1OiAweDAwMzUsICAgICAjICBESUdJVCBGSVZFCisgICAgMHgwMDM2OiAweDAwMzYsICAgICAjICBESUdJVCBTSVgKKyAgICAweDAwMzc6IDB4MDAzNywgICAgICMgIERJR0lUIFNFVkVOCisgICAgMHgwMDM4OiAweDAwMzgsICAgICAjICBESUdJVCBFSUdIVAorICAgIDB4MDAzOTogMHgwMDM5LCAgICAgIyAgRElHSVQgTklORQorICAgIDB4MDAzYTogMHgwMDNhLCAgICAgIyAgQ09MT04KKyAgICAweDAwM2I6IDB4MDAzYiwgICAgICMgIFNFTUlDT0xPTgorICAgIDB4MDAzYzogMHgwMDNjLCAgICAgIyAgTEVTUy1USEFOIFNJR04KKyAgICAweDAwM2Q6IDB4MDAzZCwgICAgICMgIEVRVUFMUyBTSUdOCisgICAgMHgwMDNlOiAweDAwM2UsICAgICAjICBHUkVBVEVSLVRIQU4gU0lHTgorICAgIDB4MDAzZjogMHgwMDNmLCAgICAgIyAgUVVFU1RJT04gTUFSSworICAgIDB4MDA0MDogMHgwMDQwLCAgICAgIyAgQ09NTUVSQ0lBTCBBVAorICAgIDB4MDA0MTogMHgwMDQxLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgQQorICAgIDB4MDA0MjogMHgwMDQyLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgQgorICAgIDB4MDA0MzogMHgwMDQzLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgQworICAgIDB4MDA0NDogMHgwMDQ0LCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgRAorICAgIDB4MDA0NTogMHgwMDQ1LCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgRQorICAgIDB4MDA0NjogMHgwMDQ2LCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgRgorICAgIDB4MDA0NzogMHgwMDQ3LCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgRworICAgIDB4MDA0ODogMHgwMDQ4LCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgSAorICAgIDB4MDA0OTogMHgwMDQ5LCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgSQorICAgIDB4MDA0YTogMHgwMDRhLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgSgorICAgIDB4MDA0YjogMHgwMDRiLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgSworICAgIDB4MDA0YzogMHgwMDRjLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgTAorICAgIDB4MDA0ZDogMHgwMDRkLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgTQorICAgIDB4MDA0ZTogMHgwMDRlLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgTgorICAgIDB4MDA0ZjogMHgwMDRmLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgTworICAgIDB4MDA1MDogMHgwMDUwLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgUAorICAgIDB4MDA1MTogMHgwMDUxLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgUQorICAgIDB4MDA1MjogMHgwMDUyLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgUgorICAgIDB4MDA1MzogMHgwMDUzLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgUworICAgIDB4MDA1NDogMHgwMDU0LCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgVAorICAgIDB4MDA1NTogMHgwMDU1LCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgVQorICAgIDB4MDA1NjogMHgwMDU2LCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgVgorICAgIDB4MDA1NzogMHgwMDU3LCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgVworICAgIDB4MDA1ODogMHgwMDU4LCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgWAorICAgIDB4MDA1OTogMHgwMDU5LCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgWQorICAgIDB4MDA1YTogMHgwMDVhLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgWgorICAgIDB4MDA1YjogMHgwMDViLCAgICAgIyAgTEVGVCBTUVVBUkUgQlJBQ0tFVAorICAgIDB4MDA1YzogMHgwMDVjLCAgICAgIyAgUkVWRVJTRSBTT0xJRFVTCisgICAgMHgwMDVkOiAweDAwNWQsICAgICAjICBSSUdIVCBTUVVBUkUgQlJBQ0tFVAorICAgIDB4MDA1ZTogMHgwMDVlLCAgICAgIyAgQ0lSQ1VNRkxFWCBBQ0NFTlQKKyAgICAweDAwNWY6IDB4MDA1ZiwgICAgICMgIExPVyBMSU5FCisgICAgMHgwMDYwOiAweDAwNjAsICAgICAjICBHUkFWRSBBQ0NFTlQKKyAgICAweDAwNjE6IDB4MDA2MSwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBBCisgICAgMHgwMDYyOiAweDAwNjIsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgQgorICAgIDB4MDA2MzogMHgwMDYzLCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIEMKKyAgICAweDAwNjQ6IDB4MDA2NCwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBECisgICAgMHgwMDY1OiAweDAwNjUsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgRQorICAgIDB4MDA2NjogMHgwMDY2LCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIEYKKyAgICAweDAwNjc6IDB4MDA2NywgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBHCisgICAgMHgwMDY4OiAweDAwNjgsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgSAorICAgIDB4MDA2OTogMHgwMDY5LCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIEkKKyAgICAweDAwNmE6IDB4MDA2YSwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBKCisgICAgMHgwMDZiOiAweDAwNmIsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgSworICAgIDB4MDA2YzogMHgwMDZjLCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIEwKKyAgICAweDAwNmQ6IDB4MDA2ZCwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBNCisgICAgMHgwMDZlOiAweDAwNmUsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgTgorICAgIDB4MDA2ZjogMHgwMDZmLCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIE8KKyAgICAweDAwNzA6IDB4MDA3MCwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBQCisgICAgMHgwMDcxOiAweDAwNzEsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgUQorICAgIDB4MDA3MjogMHgwMDcyLCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIFIKKyAgICAweDAwNzM6IDB4MDA3MywgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBTCisgICAgMHgwMDc0OiAweDAwNzQsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgVAorICAgIDB4MDA3NTogMHgwMDc1LCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIFUKKyAgICAweDAwNzY6IDB4MDA3NiwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBWCisgICAgMHgwMDc3OiAweDAwNzcsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgVworICAgIDB4MDA3ODogMHgwMDc4LCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIFgKKyAgICAweDAwNzk6IDB4MDA3OSwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBZCisgICAgMHgwMDdhOiAweDAwN2EsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgWgorICAgIDB4MDA3YjogMHgwMDdiLCAgICAgIyAgTEVGVCBDVVJMWSBCUkFDS0VUCisgICAgMHgwMDdjOiAweDAwN2MsICAgICAjICBWRVJUSUNBTCBMSU5FCisgICAgMHgwMDdkOiAweDAwN2QsICAgICAjICBSSUdIVCBDVVJMWSBCUkFDS0VUCisgICAgMHgwMDdlOiAweDAwN2UsICAgICAjICBUSUxERQorICAgIDB4MDA3ZjogMHgwMDdmLCAgICAgIyAgREVMRVRFCisgICAgMHgwMGEwOiAweDAwZmYsICAgICAjICBOTy1CUkVBSyBTUEFDRQorICAgIDB4MDBhNDogMHgwMGZkLCAgICAgIyAgQ1VSUkVOQ1kgU0lHTgorICAgIDB4MDBiNzogMHgwMGZhLCAgICAgIyAgTUlERExFIERPVAorICAgIDB4MDQwMTogMHgwMGYwLCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgSU8KKyAgICAweDA0MDQ6IDB4MDBmNCwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIFVLUkFJTklBTiBJRQorICAgIDB4MDQwNjogMHgwMGY2LCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgQllFTE9SVVNTSUFOLVVLUkFJTklBTiBJCisgICAgMHgwNDA3OiAweDAwZjgsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBZSQorICAgIDB4MDQxMDogMHgwMDgwLCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgQQorICAgIDB4MDQxMTogMHgwMDgxLCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgQkUKKyAgICAweDA0MTI6IDB4MDA4MiwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIFZFCisgICAgMHgwNDEzOiAweDAwODMsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBHSEUKKyAgICAweDA0MTQ6IDB4MDA4NCwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIERFCisgICAgMHgwNDE1OiAweDAwODUsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBJRQorICAgIDB4MDQxNjogMHgwMDg2LCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgWkhFCisgICAgMHgwNDE3OiAweDAwODcsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBaRQorICAgIDB4MDQxODogMHgwMDg4LCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgSQorICAgIDB4MDQxOTogMHgwMDg5LCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgU0hPUlQgSQorICAgIDB4MDQxYTogMHgwMDhhLCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgS0EKKyAgICAweDA0MWI6IDB4MDA4YiwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIEVMCisgICAgMHgwNDFjOiAweDAwOGMsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBFTQorICAgIDB4MDQxZDogMHgwMDhkLCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgRU4KKyAgICAweDA0MWU6IDB4MDA4ZSwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIE8KKyAgICAweDA0MWY6IDB4MDA4ZiwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIFBFCisgICAgMHgwNDIwOiAweDAwOTAsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBFUgorICAgIDB4MDQyMTogMHgwMDkxLCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgRVMKKyAgICAweDA0MjI6IDB4MDA5MiwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIFRFCisgICAgMHgwNDIzOiAweDAwOTMsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBVCisgICAgMHgwNDI0OiAweDAwOTQsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBFRgorICAgIDB4MDQyNTogMHgwMDk1LCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgSEEKKyAgICAweDA0MjY6IDB4MDA5NiwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIFRTRQorICAgIDB4MDQyNzogMHgwMDk3LCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgQ0hFCisgICAgMHgwNDI4OiAweDAwOTgsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBTSEEKKyAgICAweDA0Mjk6IDB4MDA5OSwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIFNIQ0hBCisgICAgMHgwNDJhOiAweDAwOWEsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBIQVJEIFNJR04KKyAgICAweDA0MmI6IDB4MDA5YiwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIFlFUlUKKyAgICAweDA0MmM6IDB4MDA5YywgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIFNPRlQgU0lHTgorICAgIDB4MDQyZDogMHgwMDlkLCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgRQorICAgIDB4MDQyZTogMHgwMDllLCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgWVUKKyAgICAweDA0MmY6IDB4MDA5ZiwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIFlBCisgICAgMHgwNDMwOiAweDAwYTAsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgQQorICAgIDB4MDQzMTogMHgwMGExLCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEJFCisgICAgMHgwNDMyOiAweDAwYTIsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgVkUKKyAgICAweDA0MzM6IDB4MDBhMywgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBHSEUKKyAgICAweDA0MzQ6IDB4MDBhNCwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBERQorICAgIDB4MDQzNTogMHgwMGE1LCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIElFCisgICAgMHgwNDM2OiAweDAwYTYsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgWkhFCisgICAgMHgwNDM3OiAweDAwYTcsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgWkUKKyAgICAweDA0Mzg6IDB4MDBhOCwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBJCisgICAgMHgwNDM5OiAweDAwYTksICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgU0hPUlQgSQorICAgIDB4MDQzYTogMHgwMGFhLCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEtBCisgICAgMHgwNDNiOiAweDAwYWIsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgRUwKKyAgICAweDA0M2M6IDB4MDBhYywgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBFTQorICAgIDB4MDQzZDogMHgwMGFkLCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEVOCisgICAgMHgwNDNlOiAweDAwYWUsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgTworICAgIDB4MDQzZjogMHgwMGFmLCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFBFCisgICAgMHgwNDQwOiAweDAwZTAsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgRVIKKyAgICAweDA0NDE6IDB4MDBlMSwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBFUworICAgIDB4MDQ0MjogMHgwMGUyLCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFRFCisgICAgMHgwNDQzOiAweDAwZTMsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgVQorICAgIDB4MDQ0NDogMHgwMGU0LCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEVGCisgICAgMHgwNDQ1OiAweDAwZTUsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgSEEKKyAgICAweDA0NDY6IDB4MDBlNiwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBUU0UKKyAgICAweDA0NDc6IDB4MDBlNywgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBDSEUKKyAgICAweDA0NDg6IDB4MDBlOCwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBTSEEKKyAgICAweDA0NDk6IDB4MDBlOSwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBTSENIQQorICAgIDB4MDQ0YTogMHgwMGVhLCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEhBUkQgU0lHTgorICAgIDB4MDQ0YjogMHgwMGViLCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFlFUlUKKyAgICAweDA0NGM6IDB4MDBlYywgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBTT0ZUIFNJR04KKyAgICAweDA0NGQ6IDB4MDBlZCwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBFCisgICAgMHgwNDRlOiAweDAwZWUsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgWVUKKyAgICAweDA0NGY6IDB4MDBlZiwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBZQQorICAgIDB4MDQ1MTogMHgwMGYxLCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIElPCisgICAgMHgwNDU0OiAweDAwZjUsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgVUtSQUlOSUFOIElFCisgICAgMHgwNDU2OiAweDAwZjcsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgQllFTE9SVVNTSUFOLVVLUkFJTklBTiBJCisgICAgMHgwNDU3OiAweDAwZjksICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgWUkKKyAgICAweDA0OTA6IDB4MDBmMiwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIEdIRSBXSVRIIFVQVFVSTgorICAgIDB4MDQ5MTogMHgwMGYzLCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEdIRSBXSVRIIFVQVFVSTgorICAgIDB4MjExNjogMHgwMGZjLCAgICAgIyAgTlVNRVJPIFNJR04KKyAgICAweDIyMWE6IDB4MDBmYiwgICAgICMgIFNRVUFSRSBST09UCisgICAgMHgyNTAwOiAweDAwYzQsICAgICAjICBCT1ggRFJBV0lOR1MgTElHSFQgSE9SSVpPTlRBTAorICAgIDB4MjUwMjogMHgwMGIzLCAgICAgIyAgQk9YIERSQVdJTkdTIExJR0hUIFZFUlRJQ0FMCisgICAgMHgyNTBjOiAweDAwZGEsICAgICAjICBCT1ggRFJBV0lOR1MgTElHSFQgRE9XTiBBTkQgUklHSFQKKyAgICAweDI1MTA6IDB4MDBiZiwgICAgICMgIEJPWCBEUkFXSU5HUyBMSUdIVCBET1dOIEFORCBMRUZUCisgICAgMHgyNTE0OiAweDAwYzAsICAgICAjICBCT1ggRFJBV0lOR1MgTElHSFQgVVAgQU5EIFJJR0hUCisgICAgMHgyNTE4OiAweDAwZDksICAgICAjICBCT1ggRFJBV0lOR1MgTElHSFQgVVAgQU5EIExFRlQKKyAgICAweDI1MWM6IDB4MDBjMywgICAgICMgIEJPWCBEUkFXSU5HUyBMSUdIVCBWRVJUSUNBTCBBTkQgUklHSFQKKyAgICAweDI1MjQ6IDB4MDBiNCwgICAgICMgIEJPWCBEUkFXSU5HUyBMSUdIVCBWRVJUSUNBTCBBTkQgTEVGVAorICAgIDB4MjUyYzogMHgwMGMyLCAgICAgIyAgQk9YIERSQVdJTkdTIExJR0hUIERPV04gQU5EIEhPUklaT05UQUwKKyAgICAweDI1MzQ6IDB4MDBjMSwgICAgICMgIEJPWCBEUkFXSU5HUyBMSUdIVCBVUCBBTkQgSE9SSVpPTlRBTAorICAgIDB4MjUzYzogMHgwMGM1LCAgICAgIyAgQk9YIERSQVdJTkdTIExJR0hUIFZFUlRJQ0FMIEFORCBIT1JJWk9OVEFMCisgICAgMHgyNTUwOiAweDAwY2QsICAgICAjICBCT1ggRFJBV0lOR1MgRE9VQkxFIEhPUklaT05UQUwKKyAgICAweDI1NTE6IDB4MDBiYSwgICAgICMgIEJPWCBEUkFXSU5HUyBET1VCTEUgVkVSVElDQUwKKyAgICAweDI1NTI6IDB4MDBkNSwgICAgICMgIEJPWCBEUkFXSU5HUyBET1dOIFNJTkdMRSBBTkQgUklHSFQgRE9VQkxFCisgICAgMHgyNTUzOiAweDAwZDYsICAgICAjICBCT1ggRFJBV0lOR1MgRE9XTiBET1VCTEUgQU5EIFJJR0hUIFNJTkdMRQorICAgIDB4MjU1NDogMHgwMGM5LCAgICAgIyAgQk9YIERSQVdJTkdTIERPVUJMRSBET1dOIEFORCBSSUdIVAorICAgIDB4MjU1NTogMHgwMGI4LCAgICAgIyAgQk9YIERSQVdJTkdTIERPV04gU0lOR0xFIEFORCBMRUZUIERPVUJMRQorICAgIDB4MjU1NjogMHgwMGI3LCAgICAgIyAgQk9YIERSQVdJTkdTIERPV04gRE9VQkxFIEFORCBMRUZUIFNJTkdMRQorICAgIDB4MjU1NzogMHgwMGJiLCAgICAgIyAgQk9YIERSQVdJTkdTIERPVUJMRSBET1dOIEFORCBMRUZUCisgICAgMHgyNTU4OiAweDAwZDQsICAgICAjICBCT1ggRFJBV0lOR1MgVVAgU0lOR0xFIEFORCBSSUdIVCBET1VCTEUKKyAgICAweDI1NTk6IDB4MDBkMywgICAgICMgIEJPWCBEUkFXSU5HUyBVUCBET1VCTEUgQU5EIFJJR0hUIFNJTkdMRQorICAgIDB4MjU1YTogMHgwMGM4LCAgICAgIyAgQk9YIERSQVdJTkdTIERPVUJMRSBVUCBBTkQgUklHSFQKKyAgICAweDI1NWI6IDB4MDBiZSwgICAgICMgIEJPWCBEUkFXSU5HUyBVUCBTSU5HTEUgQU5EIExFRlQgRE9VQkxFCisgICAgMHgyNTVjOiAweDAwYmQsICAgICAjICBCT1ggRFJBV0lOR1MgVVAgRE9VQkxFIEFORCBMRUZUIFNJTkdMRQorICAgIDB4MjU1ZDogMHgwMGJjLCAgICAgIyAgQk9YIERSQVdJTkdTIERPVUJMRSBVUCBBTkQgTEVGVAorICAgIDB4MjU1ZTogMHgwMGM2LCAgICAgIyAgQk9YIERSQVdJTkdTIFZFUlRJQ0FMIFNJTkdMRSBBTkQgUklHSFQgRE9VQkxFCisgICAgMHgyNTVmOiAweDAwYzcsICAgICAjICBCT1ggRFJBV0lOR1MgVkVSVElDQUwgRE9VQkxFIEFORCBSSUdIVCBTSU5HTEUKKyAgICAweDI1NjA6IDB4MDBjYywgICAgICMgIEJPWCBEUkFXSU5HUyBET1VCTEUgVkVSVElDQUwgQU5EIFJJR0hUCisgICAgMHgyNTYxOiAweDAwYjUsICAgICAjICBCT1ggRFJBV0lOR1MgVkVSVElDQUwgU0lOR0xFIEFORCBMRUZUIERPVUJMRQorICAgIDB4MjU2MjogMHgwMGI2LCAgICAgIyAgQk9YIERSQVdJTkdTIFZFUlRJQ0FMIERPVUJMRSBBTkQgTEVGVCBTSU5HTEUKKyAgICAweDI1NjM6IDB4MDBiOSwgICAgICMgIEJPWCBEUkFXSU5HUyBET1VCTEUgVkVSVElDQUwgQU5EIExFRlQKKyAgICAweDI1NjQ6IDB4MDBkMSwgICAgICMgIEJPWCBEUkFXSU5HUyBET1dOIFNJTkdMRSBBTkQgSE9SSVpPTlRBTCBET1VCTEUKKyAgICAweDI1NjU6IDB4MDBkMiwgICAgICMgIEJPWCBEUkFXSU5HUyBET1dOIERPVUJMRSBBTkQgSE9SSVpPTlRBTCBTSU5HTEUKKyAgICAweDI1NjY6IDB4MDBjYiwgICAgICMgIEJPWCBEUkFXSU5HUyBET1VCTEUgRE9XTiBBTkQgSE9SSVpPTlRBTAorICAgIDB4MjU2NzogMHgwMGNmLCAgICAgIyAgQk9YIERSQVdJTkdTIFVQIFNJTkdMRSBBTkQgSE9SSVpPTlRBTCBET1VCTEUKKyAgICAweDI1Njg6IDB4MDBkMCwgICAgICMgIEJPWCBEUkFXSU5HUyBVUCBET1VCTEUgQU5EIEhPUklaT05UQUwgU0lOR0xFCisgICAgMHgyNTY5OiAweDAwY2EsICAgICAjICBCT1ggRFJBV0lOR1MgRE9VQkxFIFVQIEFORCBIT1JJWk9OVEFMCisgICAgMHgyNTZhOiAweDAwZDgsICAgICAjICBCT1ggRFJBV0lOR1MgVkVSVElDQUwgU0lOR0xFIEFORCBIT1JJWk9OVEFMIERPVUJMRQorICAgIDB4MjU2YjogMHgwMGQ3LCAgICAgIyAgQk9YIERSQVdJTkdTIFZFUlRJQ0FMIERPVUJMRSBBTkQgSE9SSVpPTlRBTCBTSU5HTEUKKyAgICAweDI1NmM6IDB4MDBjZSwgICAgICMgIEJPWCBEUkFXSU5HUyBET1VCTEUgVkVSVElDQUwgQU5EIEhPUklaT05UQUwKKyAgICAweDI1ODA6IDB4MDBkZiwgICAgICMgIFVQUEVSIEhBTEYgQkxPQ0sKKyAgICAweDI1ODQ6IDB4MDBkYywgICAgICMgIExPV0VSIEhBTEYgQkxPQ0sKKyAgICAweDI1ODg6IDB4MDBkYiwgICAgICMgIEZVTEwgQkxPQ0sKKyAgICAweDI1OGM6IDB4MDBkZCwgICAgICMgIExFRlQgSEFMRiBCTE9DSworICAgIDB4MjU5MDogMHgwMGRlLCAgICAgIyAgUklHSFQgSEFMRiBCTE9DSworICAgIDB4MjU5MTogMHgwMGIwLCAgICAgIyAgTElHSFQgU0hBREUKKyAgICAweDI1OTI6IDB4MDBiMSwgICAgICMgIE1FRElVTSBTSEFERQorICAgIDB4MjU5MzogMHgwMGIyLCAgICAgIyAgREFSSyBTSEFERQorICAgIDB4MjVhMDogMHgwMGZlLCAgICAgIyAgQkxBQ0sgU1FVQVJFCit9CmRpZmYgLS1naXQgYS9MaWIvZW5jb2RpbmdzL2NwMjczLnB5IGIvTGliL2VuY29kaW5ncy9jcDI3My5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OWM2ZDc3Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL2VuY29kaW5ncy9jcDI3My5weQpAQCAtMCwwICsxLDMwNyBAQAorIiIiIFB5dGhvbiBDaGFyYWN0ZXIgTWFwcGluZyBDb2RlYyBjcDI3MyBnZW5lcmF0ZWQgZnJvbSAncHl0aG9uLW1hcHBpbmdzL0NQMjczLlRYVCcgd2l0aCBnZW5jb2RlYy5weS4KKworIiIiIyIKKworaW1wb3J0IGNvZGVjcworCisjIyMgQ29kZWMgQVBJcworCitjbGFzcyBDb2RlYyhjb2RlY3MuQ29kZWMpOgorCisgICAgZGVmIGVuY29kZShzZWxmLGlucHV0LGVycm9ycz0nc3RyaWN0Jyk6CisgICAgICAgIHJldHVybiBjb2RlY3MuY2hhcm1hcF9lbmNvZGUoaW5wdXQsZXJyb3JzLGVuY29kaW5nX3RhYmxlKQorCisgICAgZGVmIGRlY29kZShzZWxmLGlucHV0LGVycm9ycz0nc3RyaWN0Jyk6CisgICAgICAgIHJldHVybiBjb2RlY3MuY2hhcm1hcF9kZWNvZGUoaW5wdXQsZXJyb3JzLGRlY29kaW5nX3RhYmxlKQorCitjbGFzcyBJbmNyZW1lbnRhbEVuY29kZXIoY29kZWNzLkluY3JlbWVudGFsRW5jb2Rlcik6CisgICAgZGVmIGVuY29kZShzZWxmLCBpbnB1dCwgZmluYWw9RmFsc2UpOgorICAgICAgICByZXR1cm4gY29kZWNzLmNoYXJtYXBfZW5jb2RlKGlucHV0LHNlbGYuZXJyb3JzLGVuY29kaW5nX3RhYmxlKVswXQorCitjbGFzcyBJbmNyZW1lbnRhbERlY29kZXIoY29kZWNzLkluY3JlbWVudGFsRGVjb2Rlcik6CisgICAgZGVmIGRlY29kZShzZWxmLCBpbnB1dCwgZmluYWw9RmFsc2UpOgorICAgICAgICByZXR1cm4gY29kZWNzLmNoYXJtYXBfZGVjb2RlKGlucHV0LHNlbGYuZXJyb3JzLGRlY29kaW5nX3RhYmxlKVswXQorCitjbGFzcyBTdHJlYW1Xcml0ZXIoQ29kZWMsY29kZWNzLlN0cmVhbVdyaXRlcik6CisgICAgcGFzcworCitjbGFzcyBTdHJlYW1SZWFkZXIoQ29kZWMsY29kZWNzLlN0cmVhbVJlYWRlcik6CisgICAgcGFzcworCisjIyMgZW5jb2RpbmdzIG1vZHVsZSBBUEkKKworZGVmIGdldHJlZ2VudHJ5KCk6CisgICAgcmV0dXJuIGNvZGVjcy5Db2RlY0luZm8oCisgICAgICAgIG5hbWU9J2NwMjczJywKKyAgICAgICAgZW5jb2RlPUNvZGVjKCkuZW5jb2RlLAorICAgICAgICBkZWNvZGU9Q29kZWMoKS5kZWNvZGUsCisgICAgICAgIGluY3JlbWVudGFsZW5jb2Rlcj1JbmNyZW1lbnRhbEVuY29kZXIsCisgICAgICAgIGluY3JlbWVudGFsZGVjb2Rlcj1JbmNyZW1lbnRhbERlY29kZXIsCisgICAgICAgIHN0cmVhbXJlYWRlcj1TdHJlYW1SZWFkZXIsCisgICAgICAgIHN0cmVhbXdyaXRlcj1TdHJlYW1Xcml0ZXIsCisgICAgKQorCisKKyMjIyBEZWNvZGluZyBUYWJsZQorCitkZWNvZGluZ190YWJsZSA9ICgKKyAgICAnXHgwMCcgICAgICAjICAweDAwIC0+IE5VTEwgKE5VTCkKKyAgICAnXHgwMScgICAgICAjICAweDAxIC0+IFNUQVJUIE9GIEhFQURJTkcgKFNPSCkKKyAgICAnXHgwMicgICAgICAjICAweDAyIC0+IFNUQVJUIE9GIFRFWFQgKFNUWCkKKyAgICAnXHgwMycgICAgICAjICAweDAzIC0+IEVORCBPRiBURVhUIChFVFgpCisgICAgJ1x4OWMnICAgICAgIyAgMHgwNCAtPiBTVFJJTkcgVEVSTUlOQVRPUiAoU1QpCisgICAgJ1x0JyAgICAgICAgIyAgMHgwNSAtPiBDSEFSQUNURVIgVEFCVUxBVElPTiAoSFQpCisgICAgJ1x4ODYnICAgICAgIyAgMHgwNiAtPiBTVEFSVCBPRiBTRUxFQ1RFRCBBUkVBIChTU0EpCisgICAgJ1x4N2YnICAgICAgIyAgMHgwNyAtPiBERUxFVEUgKERFTCkKKyAgICAnXHg5NycgICAgICAjICAweDA4IC0+IEVORCBPRiBHVUFSREVEIEFSRUEgKEVQQSkKKyAgICAnXHg4ZCcgICAgICAjICAweDA5IC0+IFJFVkVSU0UgTElORSBGRUVEIChSSSkKKyAgICAnXHg4ZScgICAgICAjICAweDBBIC0+IFNJTkdMRS1TSElGVCBUV08gKFNTMikKKyAgICAnXHgwYicgICAgICAjICAweDBCIC0+IExJTkUgVEFCVUxBVElPTiAoVlQpCisgICAgJ1x4MGMnICAgICAgIyAgMHgwQyAtPiBGT1JNIEZFRUQgKEZGKQorICAgICdccicgICAgICAgICMgIDB4MEQgLT4gQ0FSUklBR0UgUkVUVVJOIChDUikKKyAgICAnXHgwZScgICAgICAjICAweDBFIC0+IFNISUZUIE9VVCAoU08pCisgICAgJ1x4MGYnICAgICAgIyAgMHgwRiAtPiBTSElGVCBJTiAoU0kpCisgICAgJ1x4MTAnICAgICAgIyAgMHgxMCAtPiBEQVRBTElOSyBFU0NBUEUgKERMRSkKKyAgICAnXHgxMScgICAgICAjICAweDExIC0+IERFVklDRSBDT05UUk9MIE9ORSAoREMxKQorICAgICdceDEyJyAgICAgICMgIDB4MTIgLT4gREVWSUNFIENPTlRST0wgVFdPIChEQzIpCisgICAgJ1x4MTMnICAgICAgIyAgMHgxMyAtPiBERVZJQ0UgQ09OVFJPTCBUSFJFRSAoREMzKQorICAgICdceDlkJyAgICAgICMgIDB4MTQgLT4gT1BFUkFUSU5HIFNZU1RFTSBDT01NQU5EIChPU0MpCisgICAgJ1x4ODUnICAgICAgIyAgMHgxNSAtPiBORVhUIExJTkUgKE5FTCkKKyAgICAnXHgwOCcgICAgICAjICAweDE2IC0+IEJBQ0tTUEFDRSAoQlMpCisgICAgJ1x4ODcnICAgICAgIyAgMHgxNyAtPiBFTkQgT0YgU0VMRUNURUQgQVJFQSAoRVNBKQorICAgICdceDE4JyAgICAgICMgIDB4MTggLT4gQ0FOQ0VMIChDQU4pCisgICAgJ1x4MTknICAgICAgIyAgMHgxOSAtPiBFTkQgT0YgTUVESVVNIChFTSkKKyAgICAnXHg5MicgICAgICAjICAweDFBIC0+IFBSSVZBVEUgVVNFIFRXTyAoUFUyKQorICAgICdceDhmJyAgICAgICMgIDB4MUIgLT4gU0lOR0xFLVNISUZUIFRIUkVFIChTUzMpCisgICAgJ1x4MWMnICAgICAgIyAgMHgxQyAtPiBGSUxFIFNFUEFSQVRPUiAoSVM0KQorICAgICdceDFkJyAgICAgICMgIDB4MUQgLT4gR1JPVVAgU0VQQVJBVE9SIChJUzMpCisgICAgJ1x4MWUnICAgICAgIyAgMHgxRSAtPiBSRUNPUkQgU0VQQVJBVE9SIChJUzIpCisgICAgJ1x4MWYnICAgICAgIyAgMHgxRiAtPiBVTklUIFNFUEFSQVRPUiAoSVMxKQorICAgICdceDgwJyAgICAgICMgIDB4MjAgLT4gUEFERElORyBDSEFSQUNURVIgKFBBRCkKKyAgICAnXHg4MScgICAgICAjICAweDIxIC0+IEhJR0ggT0NURVQgUFJFU0VUIChIT1ApCisgICAgJ1x4ODInICAgICAgIyAgMHgyMiAtPiBCUkVBSyBQRVJNSVRURUQgSEVSRSAoQlBIKQorICAgICdceDgzJyAgICAgICMgIDB4MjMgLT4gTk8gQlJFQUsgSEVSRSAoTkJIKQorICAgICdceDg0JyAgICAgICMgIDB4MjQgLT4gSU5ERVggKElORCkKKyAgICAnXG4nICAgICAgICAjICAweDI1IC0+IExJTkUgRkVFRCAoTEYpCisgICAgJ1x4MTcnICAgICAgIyAgMHgyNiAtPiBFTkQgT0YgVFJBTlNNSVNTSU9OIEJMT0NLIChFVEIpCisgICAgJ1x4MWInICAgICAgIyAgMHgyNyAtPiBFU0NBUEUgKEVTQykKKyAgICAnXHg4OCcgICAgICAjICAweDI4IC0+IENIQVJBQ1RFUiBUQUJVTEFUSU9OIFNFVCAoSFRTKQorICAgICdceDg5JyAgICAgICMgIDB4MjkgLT4gQ0hBUkFDVEVSIFRBQlVMQVRJT04gV0lUSCBKVVNUSUZJQ0FUSU9OIChIVEopCisgICAgJ1x4OGEnICAgICAgIyAgMHgyQSAtPiBMSU5FIFRBQlVMQVRJT04gU0VUIChWVFMpCisgICAgJ1x4OGInICAgICAgIyAgMHgyQiAtPiBQQVJUSUFMIExJTkUgRk9SV0FSRCAoUExEKQorICAgICdceDhjJyAgICAgICMgIDB4MkMgLT4gUEFSVElBTCBMSU5FIEJBQ0tXQVJEIChQTFUpCisgICAgJ1x4MDUnICAgICAgIyAgMHgyRCAtPiBFTlFVSVJZIChFTlEpCisgICAgJ1x4MDYnICAgICAgIyAgMHgyRSAtPiBBQ0tOT1dMRURHRSAoQUNLKQorICAgICdceDA3JyAgICAgICMgIDB4MkYgLT4gQkVMTCAoQkVMKQorICAgICdceDkwJyAgICAgICMgIDB4MzAgLT4gREVWSUNFIENPTlRST0wgU1RSSU5HIChEQ1MpCisgICAgJ1x4OTEnICAgICAgIyAgMHgzMSAtPiBQUklWQVRFIFVTRSBPTkUgKFBVMSkKKyAgICAnXHgxNicgICAgICAjICAweDMyIC0+IFNZTkNIUk9OT1VTIElETEUgKFNZTikKKyAgICAnXHg5MycgICAgICAjICAweDMzIC0+IFNFVCBUUkFOU01JVCBTVEFURSAoU1RTKQorICAgICdceDk0JyAgICAgICMgIDB4MzQgLT4gQ0FOQ0VMIENIQVJBQ1RFUiAoQ0NIKQorICAgICdceDk1JyAgICAgICMgIDB4MzUgLT4gTUVTU0FHRSBXQUlUSU5HIChNVykKKyAgICAnXHg5NicgICAgICAjICAweDM2IC0+IFNUQVJUIE9GIEdVQVJERUQgQVJFQSAoU1BBKQorICAgICdceDA0JyAgICAgICMgIDB4MzcgLT4gRU5EIE9GIFRSQU5TTUlTU0lPTiAoRU9UKQorICAgICdceDk4JyAgICAgICMgIDB4MzggLT4gU1RBUlQgT0YgU1RSSU5HIChTT1MpCisgICAgJ1x4OTknICAgICAgIyAgMHgzOSAtPiBTSU5HTEUgR1JBUEhJQyBDSEFSQUNURVIgSU5UUk9EVUNFUiAoU0dDSSkKKyAgICAnXHg5YScgICAgICAjICAweDNBIC0+IFNJTkdMRSBDSEFSQUNURVIgSU5UUk9EVUNFUiAoU0NJKQorICAgICdceDliJyAgICAgICMgIDB4M0IgLT4gQ09OVFJPTCBTRVFVRU5DRSBJTlRST0RVQ0VSIChDU0kpCisgICAgJ1x4MTQnICAgICAgIyAgMHgzQyAtPiBERVZJQ0UgQ09OVFJPTCBGT1VSIChEQzQpCisgICAgJ1x4MTUnICAgICAgIyAgMHgzRCAtPiBORUdBVElWRSBBQ0tOT1dMRURHRSAoTkFLKQorICAgICdceDllJyAgICAgICMgIDB4M0UgLT4gUFJJVkFDWSBNRVNTQUdFIChQTSkKKyAgICAnXHgxYScgICAgICAjICAweDNGIC0+IFNVQlNUSVRVVEUgKFNVQikKKyAgICAnICcgICAgICAgICAjICAweDQwIC0+IFNQQUNFCisgICAgJ1x4YTAnICAgICAgIyAgMHg0MSAtPiBOTy1CUkVBSyBTUEFDRQorICAgICdceGUyJyAgICAgICMgIDB4NDIgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBDSVJDVU1GTEVYCisgICAgJ3snICAgICAgICAgIyAgMHg0MyAtPiBMRUZUIENVUkxZIEJSQUNLRVQKKyAgICAnXHhlMCcgICAgICAjICAweDQ0IC0+IExBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggR1JBVkUKKyAgICAnXHhlMScgICAgICAjICAweDQ1IC0+IExBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggQUNVVEUKKyAgICAnXHhlMycgICAgICAjICAweDQ2IC0+IExBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggVElMREUKKyAgICAnXHhlNScgICAgICAjICAweDQ3IC0+IExBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggUklORyBBQk9WRQorICAgICdceGU3JyAgICAgICMgIDB4NDggLT4gTEFUSU4gU01BTEwgTEVUVEVSIEMgV0lUSCBDRURJTExBCisgICAgJ1x4ZjEnICAgICAgIyAgMHg0OSAtPiBMQVRJTiBTTUFMTCBMRVRURVIgTiBXSVRIIFRJTERFCisgICAgJ1x4YzQnICAgICAgIyAgMHg0QSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggRElBRVJFU0lTCisgICAgJy4nICAgICAgICAgIyAgMHg0QiAtPiBGVUxMIFNUT1AKKyAgICAnPCcgICAgICAgICAjICAweDRDIC0+IExFU1MtVEhBTiBTSUdOCisgICAgJygnICAgICAgICAgIyAgMHg0RCAtPiBMRUZUIFBBUkVOVEhFU0lTCisgICAgJysnICAgICAgICAgIyAgMHg0RSAtPiBQTFVTIFNJR04KKyAgICAnIScgICAgICAgICAjICAweDRGIC0+IEVYQ0xBTUFUSU9OIE1BUksKKyAgICAnJicgICAgICAgICAjICAweDUwIC0+IEFNUEVSU0FORAorICAgICdceGU5JyAgICAgICMgIDB4NTEgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBBQ1VURQorICAgICdceGVhJyAgICAgICMgIDB4NTIgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBDSVJDVU1GTEVYCisgICAgJ1x4ZWInICAgICAgIyAgMHg1MyAtPiBMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIERJQUVSRVNJUworICAgICdceGU4JyAgICAgICMgIDB4NTQgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBHUkFWRQorICAgICdceGVkJyAgICAgICMgIDB4NTUgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEkgV0lUSCBBQ1VURQorICAgICdceGVlJyAgICAgICMgIDB4NTYgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEkgV0lUSCBDSVJDVU1GTEVYCisgICAgJ1x4ZWYnICAgICAgIyAgMHg1NyAtPiBMQVRJTiBTTUFMTCBMRVRURVIgSSBXSVRIIERJQUVSRVNJUworICAgICdceGVjJyAgICAgICMgIDB4NTggLT4gTEFUSU4gU01BTEwgTEVUVEVSIEkgV0lUSCBHUkFWRQorICAgICd+JyAgICAgICAgICMgIDB4NTkgLT4gVElMREUKKyAgICAnXHhkYycgICAgICAjICAweDVBIC0+IExBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBESUFFUkVTSVMKKyAgICAnJCcgICAgICAgICAjICAweDVCIC0+IERPTExBUiBTSUdOCisgICAgJyonICAgICAgICAgIyAgMHg1QyAtPiBBU1RFUklTSworICAgICcpJyAgICAgICAgICMgIDB4NUQgLT4gUklHSFQgUEFSRU5USEVTSVMKKyAgICAnOycgICAgICAgICAjICAweDVFIC0+IFNFTUlDT0xPTgorICAgICdeJyAgICAgICAgICMgIDB4NUYgLT4gQ0lSQ1VNRkxFWCBBQ0NFTlQKKyAgICAnLScgICAgICAgICAjICAweDYwIC0+IEhZUEhFTi1NSU5VUworICAgICcvJyAgICAgICAgICMgIDB4NjEgLT4gU09MSURVUworICAgICdceGMyJyAgICAgICMgIDB4NjIgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIENJUkNVTUZMRVgKKyAgICAnWycgICAgICAgICAjICAweDYzIC0+IExFRlQgU1FVQVJFIEJSQUNLRVQKKyAgICAnXHhjMCcgICAgICAjICAweDY0IC0+IExBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBHUkFWRQorICAgICdceGMxJyAgICAgICMgIDB4NjUgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIEFDVVRFCisgICAgJ1x4YzMnICAgICAgIyAgMHg2NiAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggVElMREUKKyAgICAnXHhjNScgICAgICAjICAweDY3IC0+IExBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBSSU5HIEFCT1ZFCisgICAgJ1x4YzcnICAgICAgIyAgMHg2OCAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBDIFdJVEggQ0VESUxMQQorICAgICdceGQxJyAgICAgICMgIDB4NjkgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgTiBXSVRIIFRJTERFCisgICAgJ1x4ZjYnICAgICAgIyAgMHg2QSAtPiBMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIERJQUVSRVNJUworICAgICcsJyAgICAgICAgICMgIDB4NkIgLT4gQ09NTUEKKyAgICAnJScgICAgICAgICAjICAweDZDIC0+IFBFUkNFTlQgU0lHTgorICAgICdfJyAgICAgICAgICMgIDB4NkQgLT4gTE9XIExJTkUKKyAgICAnPicgICAgICAgICAjICAweDZFIC0+IEdSRUFURVItVEhBTiBTSUdOCisgICAgJz8nICAgICAgICAgIyAgMHg2RiAtPiBRVUVTVElPTiBNQVJLCisgICAgJ1x4ZjgnICAgICAgIyAgMHg3MCAtPiBMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIFNUUk9LRQorICAgICdceGM5JyAgICAgICMgIDB4NzEgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIEFDVVRFCisgICAgJ1x4Y2EnICAgICAgIyAgMHg3MiAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggQ0lSQ1VNRkxFWAorICAgICdceGNiJyAgICAgICMgIDB4NzMgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIERJQUVSRVNJUworICAgICdceGM4JyAgICAgICMgIDB4NzQgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIEdSQVZFCisgICAgJ1x4Y2QnICAgICAgIyAgMHg3NSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggQUNVVEUKKyAgICAnXHhjZScgICAgICAjICAweDc2IC0+IExBVElOIENBUElUQUwgTEVUVEVSIEkgV0lUSCBDSVJDVU1GTEVYCisgICAgJ1x4Y2YnICAgICAgIyAgMHg3NyAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggRElBRVJFU0lTCisgICAgJ1x4Y2MnICAgICAgIyAgMHg3OCAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggR1JBVkUKKyAgICAnYCcgICAgICAgICAjICAweDc5IC0+IEdSQVZFIEFDQ0VOVAorICAgICc6JyAgICAgICAgICMgIDB4N0EgLT4gQ09MT04KKyAgICAnIycgICAgICAgICAjICAweDdCIC0+IE5VTUJFUiBTSUdOCisgICAgJ1x4YTcnICAgICAgIyAgMHg3QyAtPiBTRUNUSU9OIFNJR04KKyAgICAiJyIgICAgICAgICAjICAweDdEIC0+IEFQT1NUUk9QSEUKKyAgICAnPScgICAgICAgICAjICAweDdFIC0+IEVRVUFMUyBTSUdOCisgICAgJyInICAgICAgICAgIyAgMHg3RiAtPiBRVU9UQVRJT04gTUFSSworICAgICdceGQ4JyAgICAgICMgIDB4ODAgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIFNUUk9LRQorICAgICdhJyAgICAgICAgICMgIDB4ODEgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEEKKyAgICAnYicgICAgICAgICAjICAweDgyIC0+IExBVElOIFNNQUxMIExFVFRFUiBCCisgICAgJ2MnICAgICAgICAgIyAgMHg4MyAtPiBMQVRJTiBTTUFMTCBMRVRURVIgQworICAgICdkJyAgICAgICAgICMgIDB4ODQgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEQKKyAgICAnZScgICAgICAgICAjICAweDg1IC0+IExBVElOIFNNQUxMIExFVFRFUiBFCisgICAgJ2YnICAgICAgICAgIyAgMHg4NiAtPiBMQVRJTiBTTUFMTCBMRVRURVIgRgorICAgICdnJyAgICAgICAgICMgIDB4ODcgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEcKKyAgICAnaCcgICAgICAgICAjICAweDg4IC0+IExBVElOIFNNQUxMIExFVFRFUiBICisgICAgJ2knICAgICAgICAgIyAgMHg4OSAtPiBMQVRJTiBTTUFMTCBMRVRURVIgSQorICAgICdceGFiJyAgICAgICMgIDB4OEEgLT4gTEVGVC1QT0lOVElORyBET1VCTEUgQU5HTEUgUVVPVEFUSU9OIE1BUksKKyAgICAnXHhiYicgICAgICAjICAweDhCIC0+IFJJR0hULVBPSU5USU5HIERPVUJMRSBBTkdMRSBRVU9UQVRJT04gTUFSSworICAgICdceGYwJyAgICAgICMgIDB4OEMgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEVUSCAoSWNlbGFuZGljKQorICAgICdceGZkJyAgICAgICMgIDB4OEQgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFkgV0lUSCBBQ1VURQorICAgICdceGZlJyAgICAgICMgIDB4OEUgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFRIT1JOIChJY2VsYW5kaWMpCisgICAgJ1x4YjEnICAgICAgIyAgMHg4RiAtPiBQTFVTLU1JTlVTIFNJR04KKyAgICAnXHhiMCcgICAgICAjICAweDkwIC0+IERFR1JFRSBTSUdOCisgICAgJ2onICAgICAgICAgIyAgMHg5MSAtPiBMQVRJTiBTTUFMTCBMRVRURVIgSgorICAgICdrJyAgICAgICAgICMgIDB4OTIgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEsKKyAgICAnbCcgICAgICAgICAjICAweDkzIC0+IExBVElOIFNNQUxMIExFVFRFUiBMCisgICAgJ20nICAgICAgICAgIyAgMHg5NCAtPiBMQVRJTiBTTUFMTCBMRVRURVIgTQorICAgICduJyAgICAgICAgICMgIDB4OTUgLT4gTEFUSU4gU01BTEwgTEVUVEVSIE4KKyAgICAnbycgICAgICAgICAjICAweDk2IC0+IExBVElOIFNNQUxMIExFVFRFUiBPCisgICAgJ3AnICAgICAgICAgIyAgMHg5NyAtPiBMQVRJTiBTTUFMTCBMRVRURVIgUAorICAgICdxJyAgICAgICAgICMgIDB4OTggLT4gTEFUSU4gU01BTEwgTEVUVEVSIFEKKyAgICAncicgICAgICAgICAjICAweDk5IC0+IExBVElOIFNNQUxMIExFVFRFUiBSCisgICAgJ1x4YWEnICAgICAgIyAgMHg5QSAtPiBGRU1JTklORSBPUkRJTkFMIElORElDQVRPUgorICAgICdceGJhJyAgICAgICMgIDB4OUIgLT4gTUFTQ1VMSU5FIE9SRElOQUwgSU5ESUNBVE9SCisgICAgJ1x4ZTYnICAgICAgIyAgMHg5QyAtPiBMQVRJTiBTTUFMTCBMRVRURVIgQUUKKyAgICAnXHhiOCcgICAgICAjICAweDlEIC0+IENFRElMTEEKKyAgICAnXHhjNicgICAgICAjICAweDlFIC0+IExBVElOIENBUElUQUwgTEVUVEVSIEFFCisgICAgJ1x4YTQnICAgICAgIyAgMHg5RiAtPiBDVVJSRU5DWSBTSUdOCisgICAgJ1x4YjUnICAgICAgIyAgMHhBMCAtPiBNSUNSTyBTSUdOCisgICAgJ1x4ZGYnICAgICAgIyAgMHhBMSAtPiBMQVRJTiBTTUFMTCBMRVRURVIgU0hBUlAgUyAoR2VybWFuKQorICAgICdzJyAgICAgICAgICMgIDB4QTIgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFMKKyAgICAndCcgICAgICAgICAjICAweEEzIC0+IExBVElOIFNNQUxMIExFVFRFUiBUCisgICAgJ3UnICAgICAgICAgIyAgMHhBNCAtPiBMQVRJTiBTTUFMTCBMRVRURVIgVQorICAgICd2JyAgICAgICAgICMgIDB4QTUgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFYKKyAgICAndycgICAgICAgICAjICAweEE2IC0+IExBVElOIFNNQUxMIExFVFRFUiBXCisgICAgJ3gnICAgICAgICAgIyAgMHhBNyAtPiBMQVRJTiBTTUFMTCBMRVRURVIgWAorICAgICd5JyAgICAgICAgICMgIDB4QTggLT4gTEFUSU4gU01BTEwgTEVUVEVSIFkKKyAgICAneicgICAgICAgICAjICAweEE5IC0+IExBVElOIFNNQUxMIExFVFRFUiBaCisgICAgJ1x4YTEnICAgICAgIyAgMHhBQSAtPiBJTlZFUlRFRCBFWENMQU1BVElPTiBNQVJLCisgICAgJ1x4YmYnICAgICAgIyAgMHhBQiAtPiBJTlZFUlRFRCBRVUVTVElPTiBNQVJLCisgICAgJ1x4ZDAnICAgICAgIyAgMHhBQyAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBFVEggKEljZWxhbmRpYykKKyAgICAnXHhkZCcgICAgICAjICAweEFEIC0+IExBVElOIENBUElUQUwgTEVUVEVSIFkgV0lUSCBBQ1VURQorICAgICdceGRlJyAgICAgICMgIDB4QUUgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgVEhPUk4gKEljZWxhbmRpYykKKyAgICAnXHhhZScgICAgICAjICAweEFGIC0+IFJFR0lTVEVSRUQgU0lHTgorICAgICdceGEyJyAgICAgICMgIDB4QjAgLT4gQ0VOVCBTSUdOCisgICAgJ1x4YTMnICAgICAgIyAgMHhCMSAtPiBQT1VORCBTSUdOCisgICAgJ1x4YTUnICAgICAgIyAgMHhCMiAtPiBZRU4gU0lHTgorICAgICdceGI3JyAgICAgICMgIDB4QjMgLT4gTUlERExFIERPVAorICAgICdceGE5JyAgICAgICMgIDB4QjQgLT4gQ09QWVJJR0hUIFNJR04KKyAgICAnQCcgICAgICAgICAjICAweEI1IC0+IENPTU1FUkNJQUwgQVQKKyAgICAnXHhiNicgICAgICAjICAweEI2IC0+IFBJTENST1cgU0lHTgorICAgICdceGJjJyAgICAgICMgIDB4QjcgLT4gVlVMR0FSIEZSQUNUSU9OIE9ORSBRVUFSVEVSCisgICAgJ1x4YmQnICAgICAgIyAgMHhCOCAtPiBWVUxHQVIgRlJBQ1RJT04gT05FIEhBTEYKKyAgICAnXHhiZScgICAgICAjICAweEI5IC0+IFZVTEdBUiBGUkFDVElPTiBUSFJFRSBRVUFSVEVSUworICAgICdceGFjJyAgICAgICMgIDB4QkEgLT4gTk9UIFNJR04KKyAgICAnfCcgICAgICAgICAjICAweEJCIC0+IFZFUlRJQ0FMIExJTkUKKyAgICAnXHUyMDNlJyAgICAjICAweEJDIC0+IE9WRVJMSU5FCisgICAgJ1x4YTgnICAgICAgIyAgMHhCRCAtPiBESUFFUkVTSVMKKyAgICAnXHhiNCcgICAgICAjICAweEJFIC0+IEFDVVRFIEFDQ0VOVAorICAgICdceGQ3JyAgICAgICMgIDB4QkYgLT4gTVVMVElQTElDQVRJT04gU0lHTgorICAgICdceGU0JyAgICAgICMgIDB4QzAgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBESUFFUkVTSVMKKyAgICAnQScgICAgICAgICAjICAweEMxIC0+IExBVElOIENBUElUQUwgTEVUVEVSIEEKKyAgICAnQicgICAgICAgICAjICAweEMyIC0+IExBVElOIENBUElUQUwgTEVUVEVSIEIKKyAgICAnQycgICAgICAgICAjICAweEMzIC0+IExBVElOIENBUElUQUwgTEVUVEVSIEMKKyAgICAnRCcgICAgICAgICAjICAweEM0IC0+IExBVElOIENBUElUQUwgTEVUVEVSIEQKKyAgICAnRScgICAgICAgICAjICAweEM1IC0+IExBVElOIENBUElUQUwgTEVUVEVSIEUKKyAgICAnRicgICAgICAgICAjICAweEM2IC0+IExBVElOIENBUElUQUwgTEVUVEVSIEYKKyAgICAnRycgICAgICAgICAjICAweEM3IC0+IExBVElOIENBUElUQUwgTEVUVEVSIEcKKyAgICAnSCcgICAgICAgICAjICAweEM4IC0+IExBVElOIENBUElUQUwgTEVUVEVSIEgKKyAgICAnSScgICAgICAgICAjICAweEM5IC0+IExBVElOIENBUElUQUwgTEVUVEVSIEkKKyAgICAnXHhhZCcgICAgICAjICAweENBIC0+IFNPRlQgSFlQSEVOCisgICAgJ1x4ZjQnICAgICAgIyAgMHhDQiAtPiBMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIENJUkNVTUZMRVgKKyAgICAnXHhhNicgICAgICAjICAweENDIC0+IEJST0tFTiBCQVIKKyAgICAnXHhmMicgICAgICAjICAweENEIC0+IExBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggR1JBVkUKKyAgICAnXHhmMycgICAgICAjICAweENFIC0+IExBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggQUNVVEUKKyAgICAnXHhmNScgICAgICAjICAweENGIC0+IExBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggVElMREUKKyAgICAnXHhmYycgICAgICAjICAweEQwIC0+IExBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggRElBRVJFU0lTCisgICAgJ0onICAgICAgICAgIyAgMHhEMSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBKCisgICAgJ0snICAgICAgICAgIyAgMHhEMiAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBLCisgICAgJ0wnICAgICAgICAgIyAgMHhEMyAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBMCisgICAgJ00nICAgICAgICAgIyAgMHhENCAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBNCisgICAgJ04nICAgICAgICAgIyAgMHhENSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBOCisgICAgJ08nICAgICAgICAgIyAgMHhENiAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBPCisgICAgJ1AnICAgICAgICAgIyAgMHhENyAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBQCisgICAgJ1EnICAgICAgICAgIyAgMHhEOCAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBRCisgICAgJ1InICAgICAgICAgIyAgMHhEOSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBSCisgICAgJ1x4YjknICAgICAgIyAgMHhEQSAtPiBTVVBFUlNDUklQVCBPTkUKKyAgICAnXHhmYicgICAgICAjICAweERCIC0+IExBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggQ0lSQ1VNRkxFWAorICAgICd9JyAgICAgICAgICMgIDB4REMgLT4gUklHSFQgQ1VSTFkgQlJBQ0tFVAorICAgICdceGY5JyAgICAgICMgIDB4REQgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBHUkFWRQorICAgICdceGZhJyAgICAgICMgIDB4REUgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBBQ1VURQorICAgICdceGZmJyAgICAgICMgIDB4REYgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFkgV0lUSCBESUFFUkVTSVMKKyAgICAnXHhkNicgICAgICAjICAweEUwIC0+IExBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBESUFFUkVTSVMKKyAgICAnXHhmNycgICAgICAjICAweEUxIC0+IERJVklTSU9OIFNJR04KKyAgICAnUycgICAgICAgICAjICAweEUyIC0+IExBVElOIENBUElUQUwgTEVUVEVSIFMKKyAgICAnVCcgICAgICAgICAjICAweEUzIC0+IExBVElOIENBUElUQUwgTEVUVEVSIFQKKyAgICAnVScgICAgICAgICAjICAweEU0IC0+IExBVElOIENBUElUQUwgTEVUVEVSIFUKKyAgICAnVicgICAgICAgICAjICAweEU1IC0+IExBVElOIENBUElUQUwgTEVUVEVSIFYKKyAgICAnVycgICAgICAgICAjICAweEU2IC0+IExBVElOIENBUElUQUwgTEVUVEVSIFcKKyAgICAnWCcgICAgICAgICAjICAweEU3IC0+IExBVElOIENBUElUQUwgTEVUVEVSIFgKKyAgICAnWScgICAgICAgICAjICAweEU4IC0+IExBVElOIENBUElUQUwgTEVUVEVSIFkKKyAgICAnWicgICAgICAgICAjICAweEU5IC0+IExBVElOIENBUElUQUwgTEVUVEVSIFoKKyAgICAnXHhiMicgICAgICAjICAweEVBIC0+IFNVUEVSU0NSSVBUIFRXTworICAgICdceGQ0JyAgICAgICMgIDB4RUIgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIENJUkNVTUZMRVgKKyAgICAnXFwnICAgICAgICAjICAweEVDIC0+IFJFVkVSU0UgU09MSURVUworICAgICdceGQyJyAgICAgICMgIDB4RUQgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIEdSQVZFCisgICAgJ1x4ZDMnICAgICAgIyAgMHhFRSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggQUNVVEUKKyAgICAnXHhkNScgICAgICAjICAweEVGIC0+IExBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBUSUxERQorICAgICcwJyAgICAgICAgICMgIDB4RjAgLT4gRElHSVQgWkVSTworICAgICcxJyAgICAgICAgICMgIDB4RjEgLT4gRElHSVQgT05FCisgICAgJzInICAgICAgICAgIyAgMHhGMiAtPiBESUdJVCBUV08KKyAgICAnMycgICAgICAgICAjICAweEYzIC0+IERJR0lUIFRIUkVFCisgICAgJzQnICAgICAgICAgIyAgMHhGNCAtPiBESUdJVCBGT1VSCisgICAgJzUnICAgICAgICAgIyAgMHhGNSAtPiBESUdJVCBGSVZFCisgICAgJzYnICAgICAgICAgIyAgMHhGNiAtPiBESUdJVCBTSVgKKyAgICAnNycgICAgICAgICAjICAweEY3IC0+IERJR0lUIFNFVkVOCisgICAgJzgnICAgICAgICAgIyAgMHhGOCAtPiBESUdJVCBFSUdIVAorICAgICc5JyAgICAgICAgICMgIDB4RjkgLT4gRElHSVQgTklORQorICAgICdceGIzJyAgICAgICMgIDB4RkEgLT4gU1VQRVJTQ1JJUFQgVEhSRUUKKyAgICAnXHhkYicgICAgICAjICAweEZCIC0+IExBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBDSVJDVU1GTEVYCisgICAgJ10nICAgICAgICAgIyAgMHhGQyAtPiBSSUdIVCBTUVVBUkUgQlJBQ0tFVAorICAgICdceGQ5JyAgICAgICMgIDB4RkQgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIEdSQVZFCisgICAgJ1x4ZGEnICAgICAgIyAgMHhGRSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggQUNVVEUKKyAgICAnXHg5ZicgICAgICAjICAweEZGIC0+IEFQUExJQ0FUSU9OIFBST0dSQU0gQ09NTUFORCAoQVBDKQorKQorCisjIyMgRW5jb2RpbmcgdGFibGUKK2VuY29kaW5nX3RhYmxlPWNvZGVjcy5jaGFybWFwX2J1aWxkKGRlY29kaW5nX3RhYmxlKQpkaWZmIC0tZ2l0IGEvTGliL2VuY29kaW5ncy9jcDUwMC5weSBiL0xpYi9lbmNvZGluZ3MvY3A1MDAucHkKaW5kZXggYTk3NWJlNy4uNWY2MTUzNSAxMDA2NDQKLS0tIGEvTGliL2VuY29kaW5ncy9jcDUwMC5weQorKysgYi9MaWIvZW5jb2RpbmdzL2NwNTAwLnB5CkBAIC0zMDEsNyArMzAxLDYgQEAKICAgICAnXHhkOScgICAgICMgIDB4RkQgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIEdSQVZFCiAgICAgJ1x4ZGEnICAgICAjICAweEZFIC0+IExBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBBQ1VURQogICAgICdceDlmJyAgICAgIyAgMHhGRiAtPiBDT05UUk9MCi0gICAgJ1x1ZmZmZScgICAjIyBXaWRlbiB0byBVQ1MyIGZvciBvcHRpbWl6YXRpb24KICkKIAogIyMjIEVuY29kaW5nIHRhYmxlCmRpZmYgLS1naXQgYS9MaWIvZW5jb2RpbmdzL2lzbzg4NTlfMS5weSBiL0xpYi9lbmNvZGluZ3MvaXNvODg1OV8xLnB5CmluZGV4IGQ5Y2M1MTYuLjhjZmMwMWYgMTAwNjQ0Ci0tLSBhL0xpYi9lbmNvZGluZ3MvaXNvODg1OV8xLnB5CisrKyBiL0xpYi9lbmNvZGluZ3MvaXNvODg1OV8xLnB5CkBAIC0zMDEsNyArMzAxLDYgQEAKICAgICAnXHhmZCcgICAgICMgIDB4RkQgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFkgV0lUSCBBQ1VURQogICAgICdceGZlJyAgICAgIyAgMHhGRSAtPiBMQVRJTiBTTUFMTCBMRVRURVIgVEhPUk4gKEljZWxhbmRpYykKICAgICAnXHhmZicgICAgICMgIDB4RkYgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFkgV0lUSCBESUFFUkVTSVMKLSAgICAnXHVmZmZlJyAgICMjIFdpZGVuIHRvIFVDUzIgZm9yIG9wdGltaXphdGlvbgogKQogCiAjIyMgRW5jb2RpbmcgdGFibGUKZGlmZiAtLWdpdCBhL0xpYi9lbmNvZGluZ3MvcXVvcHJpX2NvZGVjLnB5IGIvTGliL2VuY29kaW5ncy9xdW9wcmlfY29kZWMucHkKaW5kZXggMDUzM2RiZS4uNDk2Y2I3NiAxMDA2NDQKLS0tIGEvTGliL2VuY29kaW5ncy9xdW9wcmlfY29kZWMucHkKKysrIGIvTGliL2VuY29kaW5ncy9xdW9wcmlfY29kZWMucHkKQEAgLTExLDcgKzExLDcgQEAKICAgICBhc3NlcnQgZXJyb3JzID09ICdzdHJpY3QnCiAgICAgZiA9IEJ5dGVzSU8oaW5wdXQpCiAgICAgZyA9IEJ5dGVzSU8oKQotICAgIHF1b3ByaS5lbmNvZGUoZiwgZywgMSkKKyAgICBxdW9wcmkuZW5jb2RlKGYsIGcsIHF1b3RldGFicz1UcnVlKQogICAgIHJldHVybiAoZy5nZXR2YWx1ZSgpLCBsZW4oaW5wdXQpKQogCiBkZWYgcXVvcHJpX2RlY29kZShpbnB1dCwgZXJyb3JzPSdzdHJpY3QnKToKZGlmZiAtLWdpdCBhL0xpYi9lbmNvZGluZ3Mvcm90XzEzLnB5IGIvTGliL2VuY29kaW5ncy9yb3RfMTMucHkKaW5kZXggMWYyZjQ3Yi4uZjBiNDE4NiAxMDA3NTUKLS0tIGEvTGliL2VuY29kaW5ncy9yb3RfMTMucHkKKysrIGIvTGliL2VuY29kaW5ncy9yb3RfMTMucHkKQEAgLTEwNiw3ICsxMDYsNyBAQAogIyMjIEZpbHRlciBBUEkKIAogZGVmIHJvdDEzKGluZmlsZSwgb3V0ZmlsZSk6Ci0gICAgb3V0ZmlsZS53cml0ZShpbmZpbGUucmVhZCgpLmVuY29kZSgncm90LTEzJykpCisgICAgb3V0ZmlsZS53cml0ZShjb2RlY3MuZW5jb2RlKGluZmlsZS5yZWFkKCksICdyb3QtMTMnKSkKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICBpbXBvcnQgc3lzCmRpZmYgLS1naXQgYS9MaWIvZW5jb2RpbmdzL3V1X2NvZGVjLnB5IGIvTGliL2VuY29kaW5ncy91dV9jb2RlYy5weQppbmRleCAxNDU0MDk1Li4yYTU3MjhmIDEwMDY0NAotLS0gYS9MaWIvZW5jb2RpbmdzL3V1X2NvZGVjLnB5CisrKyBiL0xpYi9lbmNvZGluZ3MvdXVfY29kZWMucHkKQEAgLTU0LDcgKzU0LDcgQEAKICAgICAgICAgICAgIGRhdGEgPSBiaW5hc2NpaS5hMmJfdXUocykKICAgICAgICAgZXhjZXB0IGJpbmFzY2lpLkVycm9yIGFzIHY6CiAgICAgICAgICAgICAjIFdvcmthcm91bmQgZm9yIGJyb2tlbiB1dWVuY29kZXJzIGJ5IC9GcmVkcmlrIEx1bmRoCi0gICAgICAgICAgICBuYnl0ZXMgPSAoKChvcmQoc1swXSktMzIpICYgNjMpICogNCArIDUpIC8gMworICAgICAgICAgICAgbmJ5dGVzID0gKCgoc1swXS0zMikgJiA2MykgKiA0ICsgNSkgLy8gMwogICAgICAgICAgICAgZGF0YSA9IGJpbmFzY2lpLmEyYl91dShzWzpuYnl0ZXNdKQogICAgICAgICAgICAgI3N5cy5zdGRlcnIud3JpdGUoIldhcm5pbmc6ICVzXG4iICUgc3RyKHYpKQogICAgICAgICB3cml0ZShkYXRhKQpkaWZmIC0tZ2l0IGEvTGliL2Vuc3VyZXBpcC9fX2luaXRfXy5weSBiL0xpYi9lbnN1cmVwaXAvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTI1ODgzMwotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9lbnN1cmVwaXAvX19pbml0X18ucHkKQEAgLTAsMCArMSwyMTAgQEAKK2ltcG9ydCBvcworaW1wb3J0IG9zLnBhdGgKK2ltcG9ydCBwa2d1dGlsCitpbXBvcnQgc3lzCitpbXBvcnQgdGVtcGZpbGUKKworCitfX2FsbF9fID0gWyJ2ZXJzaW9uIiwgImJvb3RzdHJhcCJdCisKKworX1NFVFVQVE9PTFNfVkVSU0lPTiA9ICIxOC4yIgorCitfUElQX1ZFUlNJT04gPSAiNy4xLjIiCisKKyMgcGlwIGN1cnJlbnRseSByZXF1aXJlcyBzc2wgc3VwcG9ydCwgc28gd2UgdHJ5IHRvIHByb3ZpZGUgYSBuaWNlcgorIyBlcnJvciBtZXNzYWdlIHdoZW4gdGhhdCBpcyBtaXNzaW5nIChodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTk3NDQpCitfTUlTU0lOR19TU0xfTUVTU0FHRSA9ICgicGlwIHt9IHJlcXVpcmVzIFNTTC9UTFMiLmZvcm1hdChfUElQX1ZFUlNJT04pKQordHJ5OgorICAgIGltcG9ydCBzc2wKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBzc2wgPSBOb25lCisgICAgZGVmIF9yZXF1aXJlX3NzbF9mb3JfcGlwKCk6CisgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcihfTUlTU0lOR19TU0xfTUVTU0FHRSkKK2Vsc2U6CisgICAgZGVmIF9yZXF1aXJlX3NzbF9mb3JfcGlwKCk6CisgICAgICAgIHBhc3MKKworX1BST0pFQ1RTID0gWworICAgICgic2V0dXB0b29scyIsIF9TRVRVUFRPT0xTX1ZFUlNJT04pLAorICAgICgicGlwIiwgX1BJUF9WRVJTSU9OKSwKK10KKworCitkZWYgX3J1bl9waXAoYXJncywgYWRkaXRpb25hbF9wYXRocz1Ob25lKToKKyAgICAjIEFkZCBvdXIgYnVuZGxlZCBzb2Z0d2FyZSB0byB0aGUgc3lzLnBhdGggc28gd2UgY2FuIGltcG9ydCBpdAorICAgIGlmIGFkZGl0aW9uYWxfcGF0aHMgaXMgbm90IE5vbmU6CisgICAgICAgIHN5cy5wYXRoID0gYWRkaXRpb25hbF9wYXRocyArIHN5cy5wYXRoCisKKyAgICAjIEluc3RhbGwgdGhlIGJ1bmRsZWQgc29mdHdhcmUKKyAgICBpbXBvcnQgcGlwCisgICAgcGlwLm1haW4oYXJncykKKworCitkZWYgdmVyc2lvbigpOgorICAgICIiIgorICAgIFJldHVybnMgYSBzdHJpbmcgc3BlY2lmeWluZyB0aGUgYnVuZGxlZCB2ZXJzaW9uIG9mIHBpcC4KKyAgICAiIiIKKyAgICByZXR1cm4gX1BJUF9WRVJTSU9OCisKK2RlZiBfZGlzYWJsZV9waXBfY29uZmlndXJhdGlvbl9zZXR0aW5ncygpOgorICAgICMgV2UgZGVsaWJlcmF0ZWx5IGlnbm9yZSBhbGwgcGlwIGVudmlyb25tZW50IHZhcmlhYmxlcworICAgICMgd2hlbiBpbnZva2luZyBwaXAKKyAgICAjIFNlZSBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTk3MzQgZm9yIGRldGFpbHMKKyAgICBrZXlzX3RvX3JlbW92ZSA9IFtrIGZvciBrIGluIG9zLmVudmlyb24gaWYgay5zdGFydHN3aXRoKCJQSVBfIildCisgICAgZm9yIGsgaW4ga2V5c190b19yZW1vdmU6CisgICAgICAgIGRlbCBvcy5lbnZpcm9uW2tdCisgICAgIyBXZSBhbHNvIGlnbm9yZSB0aGUgc2V0dGluZ3MgaW4gdGhlIGRlZmF1bHQgcGlwIGNvbmZpZ3VyYXRpb24gZmlsZQorICAgICMgU2VlIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUyMDA1MyBmb3IgZGV0YWlscworICAgIG9zLmVudmlyb25bJ1BJUF9DT05GSUdfRklMRSddID0gb3MuZGV2bnVsbAorCisKK2RlZiBib290c3RyYXAoKiwgcm9vdD1Ob25lLCB1cGdyYWRlPUZhbHNlLCB1c2VyPUZhbHNlLAorICAgICAgICAgICAgICBhbHRpbnN0YWxsPUZhbHNlLCBkZWZhdWx0X3BpcD1GYWxzZSwKKyAgICAgICAgICAgICAgdmVyYm9zaXR5PTApOgorICAgICIiIgorICAgIEJvb3RzdHJhcCBwaXAgaW50byB0aGUgY3VycmVudCBQeXRob24gaW5zdGFsbGF0aW9uIChvciB0aGUgZ2l2ZW4gcm9vdAorICAgIGRpcmVjdG9yeSkuCisKKyAgICBOb3RlIHRoYXQgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdpbGwgYWx0ZXIgYm90aCBzeXMucGF0aCBhbmQgb3MuZW52aXJvbi4KKyAgICAiIiIKKyAgICBpZiBhbHRpbnN0YWxsIGFuZCBkZWZhdWx0X3BpcDoKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiQ2Fubm90IHVzZSBhbHRpbnN0YWxsIGFuZCBkZWZhdWx0X3BpcCB0b2dldGhlciIpCisKKyAgICBfcmVxdWlyZV9zc2xfZm9yX3BpcCgpCisgICAgX2Rpc2FibGVfcGlwX2NvbmZpZ3VyYXRpb25fc2V0dGluZ3MoKQorCisgICAgIyBCeSBkZWZhdWx0LCBpbnN0YWxsaW5nIHBpcCBhbmQgc2V0dXB0b29scyBpbnN0YWxscyBhbGwgb2YgdGhlCisgICAgIyBmb2xsb3dpbmcgc2NyaXB0cyAoWC5ZID09IHJ1bm5pbmcgUHl0aG9uIHZlcnNpb24pOgorICAgICMKKyAgICAjICAgcGlwLCBwaXBYLCBwaXBYLlksIGVhc3lfaW5zdGFsbCwgZWFzeV9pbnN0YWxsLVguWQorICAgICMKKyAgICAjIHBpcCAxLjUrIGFsbG93cyBlbnN1cmVwaXAgdG8gcmVxdWVzdCB0aGF0IHNvbWUgb2YgdGhvc2UgYmUgbGVmdCBvdXQKKyAgICBpZiBhbHRpbnN0YWxsOgorICAgICAgICAjIG9taXQgcGlwLCBwaXBYIGFuZCBlYXN5X2luc3RhbGwKKyAgICAgICAgb3MuZW52aXJvblsiRU5TVVJFUElQX09QVElPTlMiXSA9ICJhbHRpbnN0YWxsIgorICAgIGVsaWYgbm90IGRlZmF1bHRfcGlwOgorICAgICAgICAjIG9taXQgcGlwIGFuZCBlYXN5X2luc3RhbGwKKyAgICAgICAgb3MuZW52aXJvblsiRU5TVVJFUElQX09QVElPTlMiXSA9ICJpbnN0YWxsIgorCisgICAgd2l0aCB0ZW1wZmlsZS5UZW1wb3JhcnlEaXJlY3RvcnkoKSBhcyB0bXBkaXI6CisgICAgICAgICMgUHV0IG91ciBidW5kbGVkIHdoZWVscyBpbnRvIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSBhbmQgY29uc3RydWN0IHRoZQorICAgICAgICAjIGFkZGl0aW9uYWwgcGF0aHMgdGhhdCBuZWVkIGFkZGVkIHRvIHN5cy5wYXRoCisgICAgICAgIGFkZGl0aW9uYWxfcGF0aHMgPSBbXQorICAgICAgICBmb3IgcHJvamVjdCwgdmVyc2lvbiBpbiBfUFJPSkVDVFM6CisgICAgICAgICAgICB3aGVlbF9uYW1lID0gInt9LXt9LXB5Mi5weTMtbm9uZS1hbnkud2hsIi5mb3JtYXQocHJvamVjdCwgdmVyc2lvbikKKyAgICAgICAgICAgIHdobCA9IHBrZ3V0aWwuZ2V0X2RhdGEoCisgICAgICAgICAgICAgICAgImVuc3VyZXBpcCIsCisgICAgICAgICAgICAgICAgIl9idW5kbGVkL3t9Ii5mb3JtYXQod2hlZWxfbmFtZSksCisgICAgICAgICAgICApCisgICAgICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKHRtcGRpciwgd2hlZWxfbmFtZSksICJ3YiIpIGFzIGZwOgorICAgICAgICAgICAgICAgIGZwLndyaXRlKHdobCkKKworICAgICAgICAgICAgYWRkaXRpb25hbF9wYXRocy5hcHBlbmQob3MucGF0aC5qb2luKHRtcGRpciwgd2hlZWxfbmFtZSkpCisKKyAgICAgICAgIyBDb25zdHJ1Y3QgdGhlIGFyZ3VtZW50cyB0byBiZSBwYXNzZWQgdG8gdGhlIHBpcCBjb21tYW5kCisgICAgICAgIGFyZ3MgPSBbImluc3RhbGwiLCAiLS1uby1pbmRleCIsICItLWZpbmQtbGlua3MiLCB0bXBkaXJdCisgICAgICAgIGlmIHJvb3Q6CisgICAgICAgICAgICBhcmdzICs9IFsiLS1yb290Iiwgcm9vdF0KKyAgICAgICAgaWYgdXBncmFkZToKKyAgICAgICAgICAgIGFyZ3MgKz0gWyItLXVwZ3JhZGUiXQorICAgICAgICBpZiB1c2VyOgorICAgICAgICAgICAgYXJncyArPSBbIi0tdXNlciJdCisgICAgICAgIGlmIHZlcmJvc2l0eToKKyAgICAgICAgICAgIGFyZ3MgKz0gWyItIiArICJ2IiAqIHZlcmJvc2l0eV0KKworICAgICAgICBfcnVuX3BpcChhcmdzICsgW3BbMF0gZm9yIHAgaW4gX1BST0pFQ1RTXSwgYWRkaXRpb25hbF9wYXRocykKKworZGVmIF91bmluc3RhbGxfaGVscGVyKCosIHZlcmJvc2l0eT0wKToKKyAgICAiIiJIZWxwZXIgdG8gc3VwcG9ydCBhIGNsZWFuIGRlZmF1bHQgdW5pbnN0YWxsIHByb2Nlc3Mgb24gV2luZG93cworCisgICAgTm90ZSB0aGF0IGNhbGxpbmcgdGhpcyBmdW5jdGlvbiBtYXkgYWx0ZXIgb3MuZW52aXJvbi4KKyAgICAiIiIKKyAgICAjIE5vdGhpbmcgdG8gZG8gaWYgcGlwIHdhcyBuZXZlciBpbnN0YWxsZWQsIG9yIGhhcyBiZWVuIHJlbW92ZWQKKyAgICB0cnk6CisgICAgICAgIGltcG9ydCBwaXAKKyAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgIHJldHVybgorCisgICAgIyBJZiB0aGUgcGlwIHZlcnNpb24gZG9lc24ndCBtYXRjaCB0aGUgYnVuZGxlZCBvbmUsIGxlYXZlIGl0IGFsb25lCisgICAgaWYgcGlwLl9fdmVyc2lvbl9fICE9IF9QSVBfVkVSU0lPTjoKKyAgICAgICAgbXNnID0gKCJlbnN1cmVwaXAgd2lsbCBvbmx5IHVuaW5zdGFsbCBhIG1hdGNoaW5nIHZlcnNpb24gIgorICAgICAgICAgICAgICAgIih7IXJ9IGluc3RhbGxlZCwgeyFyfSBidW5kbGVkKSIpCisgICAgICAgIHByaW50KG1zZy5mb3JtYXQocGlwLl9fdmVyc2lvbl9fLCBfUElQX1ZFUlNJT04pLCBmaWxlPXN5cy5zdGRlcnIpCisgICAgICAgIHJldHVybgorCisgICAgX3JlcXVpcmVfc3NsX2Zvcl9waXAoKQorICAgIF9kaXNhYmxlX3BpcF9jb25maWd1cmF0aW9uX3NldHRpbmdzKCkKKworICAgICMgQ29uc3RydWN0IHRoZSBhcmd1bWVudHMgdG8gYmUgcGFzc2VkIHRvIHRoZSBwaXAgY29tbWFuZAorICAgIGFyZ3MgPSBbInVuaW5zdGFsbCIsICIteSIsICItLWRpc2FibGUtcGlwLXZlcnNpb24tY2hlY2siXQorICAgIGlmIHZlcmJvc2l0eToKKyAgICAgICAgYXJncyArPSBbIi0iICsgInYiICogdmVyYm9zaXR5XQorCisgICAgX3J1bl9waXAoYXJncyArIFtwWzBdIGZvciBwIGluIHJldmVyc2VkKF9QUk9KRUNUUyldKQorCisKK2RlZiBfbWFpbihhcmd2PU5vbmUpOgorICAgIGlmIHNzbCBpcyBOb25lOgorICAgICAgICBwcmludCgiSWdub3JpbmcgZW5zdXJlcGlwIGZhaWx1cmU6IHt9Ii5mb3JtYXQoX01JU1NJTkdfU1NMX01FU1NBR0UpLAorICAgICAgICAgICAgICBmaWxlPXN5cy5zdGRlcnIpCisgICAgICAgIHJldHVybgorCisgICAgaW1wb3J0IGFyZ3BhcnNlCisgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIocHJvZz0icHl0aG9uIC1tIGVuc3VyZXBpcCIpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKKyAgICAgICAgIi0tdmVyc2lvbiIsCisgICAgICAgIGFjdGlvbj0idmVyc2lvbiIsCisgICAgICAgIHZlcnNpb249InBpcCB7fSIuZm9ybWF0KHZlcnNpb24oKSksCisgICAgICAgIGhlbHA9IlNob3cgdGhlIHZlcnNpb24gb2YgcGlwIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgUHl0aG9uLiIsCisgICAgKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCisgICAgICAgICItdiIsICItLXZlcmJvc2UiLAorICAgICAgICBhY3Rpb249ImNvdW50IiwKKyAgICAgICAgZGVmYXVsdD0wLAorICAgICAgICBkZXN0PSJ2ZXJib3NpdHkiLAorICAgICAgICBoZWxwPSgiR2l2ZSBtb3JlIG91dHB1dC4gT3B0aW9uIGlzIGFkZGl0aXZlLCBhbmQgY2FuIGJlIHVzZWQgdXAgdG8gMyAiCisgICAgICAgICAgICAgICJ0aW1lcy4iKSwKKyAgICApCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKKyAgICAgICAgIi1VIiwgIi0tdXBncmFkZSIsCisgICAgICAgIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgIGhlbHA9IlVwZ3JhZGUgcGlwIGFuZCBkZXBlbmRlbmNpZXMsIGV2ZW4gaWYgYWxyZWFkeSBpbnN0YWxsZWQuIiwKKyAgICApCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKKyAgICAgICAgIi0tdXNlciIsCisgICAgICAgIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgIGhlbHA9Ikluc3RhbGwgdXNpbmcgdGhlIHVzZXIgc2NoZW1lLiIsCisgICAgKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCisgICAgICAgICItLXJvb3QiLAorICAgICAgICBkZWZhdWx0PU5vbmUsCisgICAgICAgIGhlbHA9Ikluc3RhbGwgZXZlcnl0aGluZyByZWxhdGl2ZSB0byB0aGlzIGFsdGVybmF0ZSByb290IGRpcmVjdG9yeS4iLAorICAgICkKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAorICAgICAgICAiLS1hbHRpbnN0YWxsIiwKKyAgICAgICAgYWN0aW9uPSJzdG9yZV90cnVlIiwKKyAgICAgICAgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgaGVscD0oIk1ha2UgYW4gYWx0ZXJuYXRlIGluc3RhbGwsIGluc3RhbGxpbmcgb25seSB0aGUgWC5ZIHZlcnNpb25lZCIKKyAgICAgICAgICAgICAgInNjcmlwdHMgKERlZmF1bHQ6IHBpcFgsIHBpcFguWSwgZWFzeV9pbnN0YWxsLVguWSkiKSwKKyAgICApCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKKyAgICAgICAgIi0tZGVmYXVsdC1waXAiLAorICAgICAgICBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAgICBkZWZhdWx0PUZhbHNlLAorICAgICAgICBoZWxwPSgiTWFrZSBhIGRlZmF1bHQgcGlwIGluc3RhbGwsIGluc3RhbGxpbmcgdGhlIHVucXVhbGlmaWVkIHBpcCAiCisgICAgICAgICAgICAgICJhbmQgZWFzeV9pbnN0YWxsIGluIGFkZGl0aW9uIHRvIHRoZSB2ZXJzaW9uZWQgc2NyaXB0cyIpLAorICAgICkKKworICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncyhhcmd2KQorCisgICAgYm9vdHN0cmFwKAorICAgICAgICByb290PWFyZ3Mucm9vdCwKKyAgICAgICAgdXBncmFkZT1hcmdzLnVwZ3JhZGUsCisgICAgICAgIHVzZXI9YXJncy51c2VyLAorICAgICAgICB2ZXJib3NpdHk9YXJncy52ZXJib3NpdHksCisgICAgICAgIGFsdGluc3RhbGw9YXJncy5hbHRpbnN0YWxsLAorICAgICAgICBkZWZhdWx0X3BpcD1hcmdzLmRlZmF1bHRfcGlwLAorICAgICkKZGlmZiAtLWdpdCBhL0xpYi9lbnN1cmVwaXAvX19tYWluX18ucHkgYi9MaWIvZW5zdXJlcGlwL19fbWFpbl9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3NTI3ZDcKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvZW5zdXJlcGlwL19fbWFpbl9fLnB5CkBAIC0wLDAgKzEsNCBAQAoraW1wb3J0IGVuc3VyZXBpcAorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIGVuc3VyZXBpcC5fbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvZW5zdXJlcGlwL19idW5kbGVkL3BpcC03LjEuMi1weTIucHkzLW5vbmUtYW55LndobCBiL0xpYi9lbnN1cmVwaXAvX2J1bmRsZWQvcGlwLTcuMS4yLXB5Mi5weTMtbm9uZS1hbnkud2hsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlNDkwMTUKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvZW5zdXJlcGlwL19idW5kbGVkL3BpcC03LjEuMi1weTIucHkzLW5vbmUtYW55LndobApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9MaWIvZW5zdXJlcGlwL19idW5kbGVkL3NldHVwdG9vbHMtMTguMi1weTIucHkzLW5vbmUtYW55LndobCBiL0xpYi9lbnN1cmVwaXAvX2J1bmRsZWQvc2V0dXB0b29scy0xOC4yLXB5Mi5weTMtbm9uZS1hbnkud2hsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0Mjg4ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvZW5zdXJlcGlwL19idW5kbGVkL3NldHVwdG9vbHMtMTguMi1weTIucHkzLW5vbmUtYW55LndobApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9MaWIvZW5zdXJlcGlwL191bmluc3RhbGwucHkgYi9MaWIvZW5zdXJlcGlwL191bmluc3RhbGwucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzUwMzY1ZQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9lbnN1cmVwaXAvX3VuaW5zdGFsbC5weQpAQCAtMCwwICsxLDMwIEBACisiIiJCYXNpYyBwaXAgdW5pbnN0YWxsYXRpb24gc3VwcG9ydCwgaGVscGVyIGZvciB0aGUgV2luZG93cyB1bmluc3RhbGxlciIiIgorCitpbXBvcnQgYXJncGFyc2UKK2ltcG9ydCBlbnN1cmVwaXAKKworCitkZWYgX21haW4oYXJndj1Ob25lKToKKyAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihwcm9nPSJweXRob24gLW0gZW5zdXJlcGlwLl91bmluc3RhbGwiKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCisgICAgICAgICItLXZlcnNpb24iLAorICAgICAgICBhY3Rpb249InZlcnNpb24iLAorICAgICAgICB2ZXJzaW9uPSJwaXAge30iLmZvcm1hdChlbnN1cmVwaXAudmVyc2lvbigpKSwKKyAgICAgICAgaGVscD0iU2hvdyB0aGUgdmVyc2lvbiBvZiBwaXAgdGhpcyB3aWxsIGF0dGVtcHQgdG8gdW5pbnN0YWxsLiIsCisgICAgKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCisgICAgICAgICItdiIsICItLXZlcmJvc2UiLAorICAgICAgICBhY3Rpb249ImNvdW50IiwKKyAgICAgICAgZGVmYXVsdD0wLAorICAgICAgICBkZXN0PSJ2ZXJib3NpdHkiLAorICAgICAgICBoZWxwPSgiR2l2ZSBtb3JlIG91dHB1dC4gT3B0aW9uIGlzIGFkZGl0aXZlLCBhbmQgY2FuIGJlIHVzZWQgdXAgdG8gMyAiCisgICAgICAgICAgICAgICJ0aW1lcy4iKSwKKyAgICApCisKKyAgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoYXJndikKKworICAgIGVuc3VyZXBpcC5fdW5pbnN0YWxsX2hlbHBlcih2ZXJib3NpdHk9YXJncy52ZXJib3NpdHkpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvZW51bS5weSBiL0xpYi9lbnVtLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjZDNkZjgKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvZW51bS5weQpAQCAtMCwwICsxLDU1NiBAQAoraW1wb3J0IHN5cworZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgT3JkZXJlZERpY3QKK2Zyb20gdHlwZXMgaW1wb3J0IE1hcHBpbmdQcm94eVR5cGUsIER5bmFtaWNDbGFzc0F0dHJpYnV0ZQorCitfX2FsbF9fID0gWydFbnVtJywgJ0ludEVudW0nLCAndW5pcXVlJ10KKworCitkZWYgX2lzX2Rlc2NyaXB0b3Iob2JqKToKKyAgICAiIiJSZXR1cm5zIFRydWUgaWYgb2JqIGlzIGEgZGVzY3JpcHRvciwgRmFsc2Ugb3RoZXJ3aXNlLiIiIgorICAgIHJldHVybiAoCisgICAgICAgICAgICBoYXNhdHRyKG9iaiwgJ19fZ2V0X18nKSBvcgorICAgICAgICAgICAgaGFzYXR0cihvYmosICdfX3NldF9fJykgb3IKKyAgICAgICAgICAgIGhhc2F0dHIob2JqLCAnX19kZWxldGVfXycpKQorCisKK2RlZiBfaXNfZHVuZGVyKG5hbWUpOgorICAgICIiIlJldHVybnMgVHJ1ZSBpZiBhIF9fZHVuZGVyX18gbmFtZSwgRmFsc2Ugb3RoZXJ3aXNlLiIiIgorICAgIHJldHVybiAobmFtZVs6Ml0gPT0gbmFtZVstMjpdID09ICdfXycgYW5kCisgICAgICAgICAgICBuYW1lWzI6M10gIT0gJ18nIGFuZAorICAgICAgICAgICAgbmFtZVstMzotMl0gIT0gJ18nIGFuZAorICAgICAgICAgICAgbGVuKG5hbWUpID4gNCkKKworCitkZWYgX2lzX3N1bmRlcihuYW1lKToKKyAgICAiIiJSZXR1cm5zIFRydWUgaWYgYSBfc3VuZGVyXyBuYW1lLCBGYWxzZSBvdGhlcndpc2UuIiIiCisgICAgcmV0dXJuIChuYW1lWzBdID09IG5hbWVbLTFdID09ICdfJyBhbmQKKyAgICAgICAgICAgIG5hbWVbMToyXSAhPSAnXycgYW5kCisgICAgICAgICAgICBuYW1lWy0yOi0xXSAhPSAnXycgYW5kCisgICAgICAgICAgICBsZW4obmFtZSkgPiAyKQorCisKK2RlZiBfbWFrZV9jbGFzc191bnBpY2tsYWJsZShjbHMpOgorICAgICIiIk1ha2UgdGhlIGdpdmVuIGNsYXNzIHVuLXBpY2tsYWJsZS4iIiIKKyAgICBkZWYgX2JyZWFrX29uX2NhbGxfcmVkdWNlKHNlbGYsIHByb3RvKToKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKCclciBjYW5ub3QgYmUgcGlja2xlZCcgJSBzZWxmKQorICAgIGNscy5fX3JlZHVjZV9leF9fID0gX2JyZWFrX29uX2NhbGxfcmVkdWNlCisgICAgY2xzLl9fbW9kdWxlX18gPSAnPHVua25vd24+JworCisKK2NsYXNzIF9FbnVtRGljdChkaWN0KToKKyAgICAiIiJUcmFjayBlbnVtIG1lbWJlciBvcmRlciBhbmQgZW5zdXJlIG1lbWJlciBuYW1lcyBhcmUgbm90IHJldXNlZC4KKworICAgIEVudW1NZXRhIHdpbGwgdXNlIHRoZSBuYW1lcyBmb3VuZCBpbiBzZWxmLl9tZW1iZXJfbmFtZXMgYXMgdGhlCisgICAgZW51bWVyYXRpb24gbWVtYmVyIG5hbWVzLgorCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzdXBlcigpLl9faW5pdF9fKCkKKyAgICAgICAgc2VsZi5fbWVtYmVyX25hbWVzID0gW10KKworICAgIGRlZiBfX3NldGl0ZW1fXyhzZWxmLCBrZXksIHZhbHVlKToKKyAgICAgICAgIiIiQ2hhbmdlcyBhbnl0aGluZyBub3QgZHVuZGVyZWQgb3Igbm90IGEgZGVzY3JpcHRvci4KKworICAgICAgICBJZiBhbiBlbnVtIG1lbWJlciBuYW1lIGlzIHVzZWQgdHdpY2UsIGFuIGVycm9yIGlzIHJhaXNlZDsgZHVwbGljYXRlCisgICAgICAgIHZhbHVlcyBhcmUgbm90IGNoZWNrZWQgZm9yLgorCisgICAgICAgIFNpbmdsZSB1bmRlcnNjb3JlIChzdW5kZXIpIG5hbWVzIGFyZSByZXNlcnZlZC4KKworICAgICAgICAiIiIKKyAgICAgICAgaWYgX2lzX3N1bmRlcihrZXkpOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignX25hbWVzXyBhcmUgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSBFbnVtIHVzZScpCisgICAgICAgIGVsaWYgX2lzX2R1bmRlcihrZXkpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbGlmIGtleSBpbiBzZWxmLl9tZW1iZXJfbmFtZXM6CisgICAgICAgICAgICAjIGRlc2NyaXB0b3Igb3ZlcndyaXRpbmcgYW4gZW51bT8KKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignQXR0ZW1wdGVkIHRvIHJldXNlIGtleTogJXInICUga2V5KQorICAgICAgICBlbGlmIG5vdCBfaXNfZGVzY3JpcHRvcih2YWx1ZSk6CisgICAgICAgICAgICBpZiBrZXkgaW4gc2VsZjoKKyAgICAgICAgICAgICAgICAjIGVudW0gb3ZlcndyaXRpbmcgYSBkZXNjcmlwdG9yPworICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignS2V5IGFscmVhZHkgZGVmaW5lZCBhczogJXInICUgc2VsZltrZXldKQorICAgICAgICAgICAgc2VsZi5fbWVtYmVyX25hbWVzLmFwcGVuZChrZXkpCisgICAgICAgIHN1cGVyKCkuX19zZXRpdGVtX18oa2V5LCB2YWx1ZSkKKworCisKKyMgRHVtbXkgdmFsdWUgZm9yIEVudW0gYXMgRW51bU1ldGEgZXhwbGljaXRseSBjaGVja3MgZm9yIGl0LCBidXQgb2YgY291cnNlCisjIHVudGlsIEVudW1NZXRhIGZpbmlzaGVzIHJ1bm5pbmcgdGhlIGZpcnN0IHRpbWUgdGhlIEVudW0gY2xhc3MgZG9lc24ndCBleGlzdC4KKyMgVGhpcyBpcyBhbHNvIHdoeSB0aGVyZSBhcmUgY2hlY2tzIGluIEVudW1NZXRhIGxpa2UgYGlmIEVudW0gaXMgbm90IE5vbmVgCitFbnVtID0gTm9uZQorCisKK2NsYXNzIEVudW1NZXRhKHR5cGUpOgorICAgICIiIk1ldGFjbGFzcyBmb3IgRW51bSIiIgorICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfX3ByZXBhcmVfXyhtZXRhY2xzLCBjbHMsIGJhc2VzKToKKyAgICAgICAgcmV0dXJuIF9FbnVtRGljdCgpCisKKyAgICBkZWYgX19uZXdfXyhtZXRhY2xzLCBjbHMsIGJhc2VzLCBjbGFzc2RpY3QpOgorICAgICAgICAjIGFuIEVudW0gY2xhc3MgaXMgZmluYWwgb25jZSBlbnVtZXJhdGlvbiBpdGVtcyBoYXZlIGJlZW4gZGVmaW5lZDsgaXQKKyAgICAgICAgIyBjYW5ub3QgYmUgbWl4ZWQgd2l0aCBvdGhlciB0eXBlcyAoaW50LCBmbG9hdCwgZXRjLikgaWYgaXQgaGFzIGFuCisgICAgICAgICMgaW5oZXJpdGVkIF9fbmV3X18gdW5sZXNzIGEgbmV3IF9fbmV3X18gaXMgZGVmaW5lZCAob3IgdGhlIHJlc3VsdGluZworICAgICAgICAjIGNsYXNzIHdpbGwgZmFpbCkuCisgICAgICAgIG1lbWJlcl90eXBlLCBmaXJzdF9lbnVtID0gbWV0YWNscy5fZ2V0X21peGluc18oYmFzZXMpCisgICAgICAgIF9fbmV3X18sIHNhdmVfbmV3LCB1c2VfYXJncyA9IG1ldGFjbHMuX2ZpbmRfbmV3XyhjbGFzc2RpY3QsIG1lbWJlcl90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdF9lbnVtKQorCisgICAgICAgICMgc2F2ZSBlbnVtIGl0ZW1zIGludG8gc2VwYXJhdGUgbWFwcGluZyBzbyB0aGV5IGRvbid0IGdldCBiYWtlZCBpbnRvCisgICAgICAgICMgdGhlIG5ldyBjbGFzcworICAgICAgICBtZW1iZXJzID0ge2s6IGNsYXNzZGljdFtrXSBmb3IgayBpbiBjbGFzc2RpY3QuX21lbWJlcl9uYW1lc30KKyAgICAgICAgZm9yIG5hbWUgaW4gY2xhc3NkaWN0Ll9tZW1iZXJfbmFtZXM6CisgICAgICAgICAgICBkZWwgY2xhc3NkaWN0W25hbWVdCisKKyAgICAgICAgIyBjaGVjayBmb3IgaWxsZWdhbCBlbnVtIG5hbWVzIChhbnkgb3RoZXJzPykKKyAgICAgICAgaW52YWxpZF9uYW1lcyA9IHNldChtZW1iZXJzKSAmIHsnbXJvJywgfQorICAgICAgICBpZiBpbnZhbGlkX25hbWVzOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignSW52YWxpZCBlbnVtIG1lbWJlciBuYW1lOiB7MH0nLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAnLCcuam9pbihpbnZhbGlkX25hbWVzKSkpCisKKyAgICAgICAgIyBjcmVhdGUgb3VyIG5ldyBFbnVtIHR5cGUKKyAgICAgICAgZW51bV9jbGFzcyA9IHN1cGVyKCkuX19uZXdfXyhtZXRhY2xzLCBjbHMsIGJhc2VzLCBjbGFzc2RpY3QpCisgICAgICAgIGVudW1fY2xhc3MuX21lbWJlcl9uYW1lc18gPSBbXSAgICAgICAgICAgICAgICMgbmFtZXMgaW4gZGVmaW5pdGlvbiBvcmRlcgorICAgICAgICBlbnVtX2NsYXNzLl9tZW1iZXJfbWFwXyA9IE9yZGVyZWREaWN0KCkgICAgICAjIG5hbWUtPnZhbHVlIG1hcAorICAgICAgICBlbnVtX2NsYXNzLl9tZW1iZXJfdHlwZV8gPSBtZW1iZXJfdHlwZQorCisgICAgICAgICMgUmV2ZXJzZSB2YWx1ZS0+bmFtZSBtYXAgZm9yIGhhc2hhYmxlIHZhbHVlcy4KKyAgICAgICAgZW51bV9jbGFzcy5fdmFsdWUybWVtYmVyX21hcF8gPSB7fQorCisgICAgICAgICMgSWYgYSBjdXN0b20gdHlwZSBpcyBtaXhlZCBpbnRvIHRoZSBFbnVtLCBhbmQgaXQgZG9lcyBub3Qga25vdyBob3cKKyAgICAgICAgIyB0byBwaWNrbGUgaXRzZWxmLCBwaWNrbGUuZHVtcHMgd2lsbCBzdWNjZWVkIGJ1dCBwaWNrbGUubG9hZHMgd2lsbAorICAgICAgICAjIGZhaWwuICBSYXRoZXIgdGhhbiBoYXZlIHRoZSBlcnJvciBzaG93IHVwIGxhdGVyIGFuZCBwb3NzaWJseSBmYXIKKyAgICAgICAgIyBmcm9tIHRoZSBzb3VyY2UsIHNhYm90YWdlIHRoZSBwaWNrbGUgcHJvdG9jb2wgZm9yIHRoaXMgY2xhc3Mgc28KKyAgICAgICAgIyB0aGF0IHBpY2tsZS5kdW1wcyBhbHNvIGZhaWxzLgorICAgICAgICAjCisgICAgICAgICMgSG93ZXZlciwgaWYgdGhlIG5ldyBjbGFzcyBpbXBsZW1lbnRzIGl0cyBvd24gX19yZWR1Y2VfZXhfXywgZG8gbm90CisgICAgICAgICMgc2Fib3RhZ2UgLS0gaXQncyBvbiB0aGVtIHRvIG1ha2Ugc3VyZSBpdCB3b3JrcyBjb3JyZWN0bHkuICBXZSB1c2UKKyAgICAgICAgIyBfX3JlZHVjZV9leF9fIGluc3RlYWQgb2YgYW55IG9mIHRoZSBvdGhlcnMgYXMgaXQgaXMgcHJlZmVycmVkIGJ5CisgICAgICAgICMgcGlja2xlIG92ZXIgX19yZWR1Y2VfXywgYW5kIGl0IGhhbmRsZXMgYWxsIHBpY2tsZSBwcm90b2NvbHMuCisgICAgICAgIGlmICdfX3JlZHVjZV9leF9fJyBub3QgaW4gY2xhc3NkaWN0OgorICAgICAgICAgICAgaWYgbWVtYmVyX3R5cGUgaXMgbm90IG9iamVjdDoKKyAgICAgICAgICAgICAgICBtZXRob2RzID0gKCdfX2dldG5ld2FyZ3NfZXhfXycsICdfX2dldG5ld2FyZ3NfXycsCisgICAgICAgICAgICAgICAgICAgICAgICAnX19yZWR1Y2VfZXhfXycsICdfX3JlZHVjZV9fJykKKyAgICAgICAgICAgICAgICBpZiBub3QgYW55KG0gaW4gbWVtYmVyX3R5cGUuX19kaWN0X18gZm9yIG0gaW4gbWV0aG9kcyk6CisgICAgICAgICAgICAgICAgICAgIF9tYWtlX2NsYXNzX3VucGlja2xhYmxlKGVudW1fY2xhc3MpCisKKyAgICAgICAgIyBpbnN0YW50aWF0ZSB0aGVtLCBjaGVja2luZyBmb3IgZHVwbGljYXRlcyBhcyB3ZSBnbworICAgICAgICAjIHdlIGluc3RhbnRpYXRlIGZpcnN0IGluc3RlYWQgb2YgY2hlY2tpbmcgZm9yIGR1cGxpY2F0ZXMgZmlyc3QgaW4gY2FzZQorICAgICAgICAjIGEgY3VzdG9tIF9fbmV3X18gaXMgZG9pbmcgc29tZXRoaW5nIGZ1bmt5IHdpdGggdGhlIHZhbHVlcyAtLSBzdWNoIGFzCisgICAgICAgICMgYXV0by1udW1iZXJpbmcgOykKKyAgICAgICAgZm9yIG1lbWJlcl9uYW1lIGluIGNsYXNzZGljdC5fbWVtYmVyX25hbWVzOgorICAgICAgICAgICAgdmFsdWUgPSBtZW1iZXJzW21lbWJlcl9uYW1lXQorICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UodmFsdWUsIHR1cGxlKToKKyAgICAgICAgICAgICAgICBhcmdzID0gKHZhbHVlLCApCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGFyZ3MgPSB2YWx1ZQorICAgICAgICAgICAgaWYgbWVtYmVyX3R5cGUgaXMgdHVwbGU6ICAgIyBzcGVjaWFsIGNhc2UgZm9yIHR1cGxlIGVudW1zCisgICAgICAgICAgICAgICAgYXJncyA9IChhcmdzLCApICAgICAjIHdyYXAgaXQgb25lIG1vcmUgdGltZQorICAgICAgICAgICAgaWYgbm90IHVzZV9hcmdzOgorICAgICAgICAgICAgICAgIGVudW1fbWVtYmVyID0gX19uZXdfXyhlbnVtX2NsYXNzKQorICAgICAgICAgICAgICAgIGlmIG5vdCBoYXNhdHRyKGVudW1fbWVtYmVyLCAnX3ZhbHVlXycpOgorICAgICAgICAgICAgICAgICAgICBlbnVtX21lbWJlci5fdmFsdWVfID0gdmFsdWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZW51bV9tZW1iZXIgPSBfX25ld19fKGVudW1fY2xhc3MsICphcmdzKQorICAgICAgICAgICAgICAgIGlmIG5vdCBoYXNhdHRyKGVudW1fbWVtYmVyLCAnX3ZhbHVlXycpOgorICAgICAgICAgICAgICAgICAgICBlbnVtX21lbWJlci5fdmFsdWVfID0gbWVtYmVyX3R5cGUoKmFyZ3MpCisgICAgICAgICAgICB2YWx1ZSA9IGVudW1fbWVtYmVyLl92YWx1ZV8KKyAgICAgICAgICAgIGVudW1fbWVtYmVyLl9uYW1lXyA9IG1lbWJlcl9uYW1lCisgICAgICAgICAgICBlbnVtX21lbWJlci5fX29iamNsYXNzX18gPSBlbnVtX2NsYXNzCisgICAgICAgICAgICBlbnVtX21lbWJlci5fX2luaXRfXygqYXJncykKKyAgICAgICAgICAgICMgSWYgYW5vdGhlciBtZW1iZXIgd2l0aCB0aGUgc2FtZSB2YWx1ZSB3YXMgYWxyZWFkeSBkZWZpbmVkLCB0aGUKKyAgICAgICAgICAgICMgbmV3IG1lbWJlciBiZWNvbWVzIGFuIGFsaWFzIHRvIHRoZSBleGlzdGluZyBvbmUuCisgICAgICAgICAgICBmb3IgbmFtZSwgY2Fub25pY2FsX21lbWJlciBpbiBlbnVtX2NsYXNzLl9tZW1iZXJfbWFwXy5pdGVtcygpOgorICAgICAgICAgICAgICAgIGlmIGNhbm9uaWNhbF9tZW1iZXIuX3ZhbHVlXyA9PSBlbnVtX21lbWJlci5fdmFsdWVfOgorICAgICAgICAgICAgICAgICAgICBlbnVtX21lbWJlciA9IGNhbm9uaWNhbF9tZW1iZXIKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBBbGlhc2VzIGRvbid0IGFwcGVhciBpbiBtZW1iZXIgbmFtZXMgKG9ubHkgaW4gX19tZW1iZXJzX18pLgorICAgICAgICAgICAgICAgIGVudW1fY2xhc3MuX21lbWJlcl9uYW1lc18uYXBwZW5kKG1lbWJlcl9uYW1lKQorICAgICAgICAgICAgZW51bV9jbGFzcy5fbWVtYmVyX21hcF9bbWVtYmVyX25hbWVdID0gZW51bV9tZW1iZXIKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAjIFRoaXMgbWF5IGZhaWwgaWYgdmFsdWUgaXMgbm90IGhhc2hhYmxlLiBXZSBjYW4ndCBhZGQgdGhlIHZhbHVlCisgICAgICAgICAgICAgICAgIyB0byB0aGUgbWFwLCBhbmQgYnktdmFsdWUgbG9va3VwcyBmb3IgdGhpcyB2YWx1ZSB3aWxsIGJlCisgICAgICAgICAgICAgICAgIyBsaW5lYXIuCisgICAgICAgICAgICAgICAgZW51bV9jbGFzcy5fdmFsdWUybWVtYmVyX21hcF9bdmFsdWVdID0gZW51bV9tZW1iZXIKKyAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICMgZG91YmxlIGNoZWNrIHRoYXQgcmVwciBhbmQgZnJpZW5kcyBhcmUgbm90IHRoZSBtaXhpbidzIG9yIHZhcmlvdXMKKyAgICAgICAgIyB0aGluZ3MgYnJlYWsgKHN1Y2ggYXMgcGlja2xlKQorICAgICAgICBmb3IgbmFtZSBpbiAoJ19fcmVwcl9fJywgJ19fc3RyX18nLCAnX19mb3JtYXRfXycsICdfX3JlZHVjZV9leF9fJyk6CisgICAgICAgICAgICBjbGFzc19tZXRob2QgPSBnZXRhdHRyKGVudW1fY2xhc3MsIG5hbWUpCisgICAgICAgICAgICBvYmpfbWV0aG9kID0gZ2V0YXR0cihtZW1iZXJfdHlwZSwgbmFtZSwgTm9uZSkKKyAgICAgICAgICAgIGVudW1fbWV0aG9kID0gZ2V0YXR0cihmaXJzdF9lbnVtLCBuYW1lLCBOb25lKQorICAgICAgICAgICAgaWYgb2JqX21ldGhvZCBpcyBub3QgTm9uZSBhbmQgb2JqX21ldGhvZCBpcyBjbGFzc19tZXRob2Q6CisgICAgICAgICAgICAgICAgc2V0YXR0cihlbnVtX2NsYXNzLCBuYW1lLCBlbnVtX21ldGhvZCkKKworICAgICAgICAjIHJlcGxhY2UgYW55IG90aGVyIF9fbmV3X18gd2l0aCBvdXIgb3duIChhcyBsb25nIGFzIEVudW0gaXMgbm90IE5vbmUsCisgICAgICAgICMgYW55d2F5KSAtLSBhZ2FpbiwgdGhpcyBpcyB0byBzdXBwb3J0IHBpY2tsZQorICAgICAgICBpZiBFbnVtIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgIyBpZiB0aGUgdXNlciBkZWZpbmVkIHRoZWlyIG93biBfX25ld19fLCBzYXZlIGl0IGJlZm9yZSBpdCBnZXRzCisgICAgICAgICAgICAjIGNsb2JiZXJlZCBpbiBjYXNlIHRoZXkgc3ViY2xhc3MgbGF0ZXIKKyAgICAgICAgICAgIGlmIHNhdmVfbmV3OgorICAgICAgICAgICAgICAgIGVudW1fY2xhc3MuX19uZXdfbWVtYmVyX18gPSBfX25ld19fCisgICAgICAgICAgICBlbnVtX2NsYXNzLl9fbmV3X18gPSBFbnVtLl9fbmV3X18KKyAgICAgICAgcmV0dXJuIGVudW1fY2xhc3MKKworICAgIGRlZiBfX2NhbGxfXyhjbHMsIHZhbHVlLCBuYW1lcz1Ob25lLCAqLCBtb2R1bGU9Tm9uZSwgcXVhbG5hbWU9Tm9uZSwgdHlwZT1Ob25lKToKKyAgICAgICAgIiIiRWl0aGVyIHJldHVybnMgYW4gZXhpc3RpbmcgbWVtYmVyLCBvciBjcmVhdGVzIGEgbmV3IGVudW0gY2xhc3MuCisKKyAgICAgICAgVGhpcyBtZXRob2QgaXMgdXNlZCBib3RoIHdoZW4gYW4gZW51bSBjbGFzcyBpcyBnaXZlbiBhIHZhbHVlIHRvIG1hdGNoCisgICAgICAgIHRvIGFuIGVudW1lcmF0aW9uIG1lbWJlciAoaS5lLiBDb2xvcigzKSkgYW5kIGZvciB0aGUgZnVuY3Rpb25hbCBBUEkKKyAgICAgICAgKGkuZS4gQ29sb3IgPSBFbnVtKCdDb2xvcicsIG5hbWVzPSdyZWQgZ3JlZW4gYmx1ZScpKS4KKworICAgICAgICBXaGVuIHVzZWQgZm9yIHRoZSBmdW5jdGlvbmFsIEFQSToKKworICAgICAgICBgdmFsdWVgIHdpbGwgYmUgdGhlIG5hbWUgb2YgdGhlIG5ldyBjbGFzcy4KKworICAgICAgICBgbmFtZXNgIHNob3VsZCBiZSBlaXRoZXIgYSBzdHJpbmcgb2Ygd2hpdGUtc3BhY2UvY29tbWEgZGVsaW1pdGVkIG5hbWVzCisgICAgICAgICh2YWx1ZXMgd2lsbCBzdGFydCBhdCAxKSwgb3IgYW4gaXRlcmF0b3IvbWFwcGluZyBvZiBuYW1lLCB2YWx1ZSBwYWlycy4KKworICAgICAgICBgbW9kdWxlYCBzaG91bGQgYmUgc2V0IHRvIHRoZSBtb2R1bGUgdGhpcyBjbGFzcyBpcyBiZWluZyBjcmVhdGVkIGluOworICAgICAgICBpZiBpdCBpcyBub3Qgc2V0LCBhbiBhdHRlbXB0IHRvIGZpbmQgdGhhdCBtb2R1bGUgd2lsbCBiZSBtYWRlLCBidXQgaWYKKyAgICAgICAgaXQgZmFpbHMgdGhlIGNsYXNzIHdpbGwgbm90IGJlIHBpY2tsYWJsZS4KKworICAgICAgICBgcXVhbG5hbWVgIHNob3VsZCBiZSBzZXQgdG8gdGhlIGFjdHVhbCBsb2NhdGlvbiB0aGlzIGNsYXNzIGNhbiBiZSBmb3VuZAorICAgICAgICBhdCBpbiBpdHMgbW9kdWxlOyBieSBkZWZhdWx0IGl0IGlzIHNldCB0byB0aGUgZ2xvYmFsIHNjb3BlLiAgSWYgdGhpcyBpcworICAgICAgICBub3QgY29ycmVjdCwgdW5waWNrbGluZyB3aWxsIGZhaWwgaW4gc29tZSBjaXJjdW1zdGFuY2VzLgorCisgICAgICAgIGB0eXBlYCwgaWYgc2V0LCB3aWxsIGJlIG1peGVkIGluIGFzIHRoZSBmaXJzdCBiYXNlIGNsYXNzLgorCisgICAgICAgICIiIgorICAgICAgICBpZiBuYW1lcyBpcyBOb25lOiAgIyBzaW1wbGUgdmFsdWUgbG9va3VwCisgICAgICAgICAgICByZXR1cm4gY2xzLl9fbmV3X18oY2xzLCB2YWx1ZSkKKyAgICAgICAgIyBvdGhlcndpc2UsIGZ1bmN0aW9uYWwgQVBJOiB3ZSdyZSBjcmVhdGluZyBhIG5ldyBFbnVtIHR5cGUKKyAgICAgICAgcmV0dXJuIGNscy5fY3JlYXRlXyh2YWx1ZSwgbmFtZXMsIG1vZHVsZT1tb2R1bGUsIHF1YWxuYW1lPXF1YWxuYW1lLCB0eXBlPXR5cGUpCisKKyAgICBkZWYgX19jb250YWluc19fKGNscywgbWVtYmVyKToKKyAgICAgICAgcmV0dXJuIGlzaW5zdGFuY2UobWVtYmVyLCBjbHMpIGFuZCBtZW1iZXIuX25hbWVfIGluIGNscy5fbWVtYmVyX21hcF8KKworICAgIGRlZiBfX2RlbGF0dHJfXyhjbHMsIGF0dHIpOgorICAgICAgICAjIG5pY2VyIGVycm9yIG1lc3NhZ2Ugd2hlbiBzb21lb25lIHRyaWVzIHRvIGRlbGV0ZSBhbiBhdHRyaWJ1dGUKKyAgICAgICAgIyAoc2VlIGlzc3VlMTkwMjUpLgorICAgICAgICBpZiBhdHRyIGluIGNscy5fbWVtYmVyX21hcF86CisgICAgICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcigKKyAgICAgICAgICAgICAgICAgICAgIiVzOiBjYW5ub3QgZGVsZXRlIEVudW0gbWVtYmVyLiIgJSBjbHMuX19uYW1lX18pCisgICAgICAgIHN1cGVyKCkuX19kZWxhdHRyX18oYXR0cikKKworICAgIGRlZiBfX2Rpcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gKFsnX19jbGFzc19fJywgJ19fZG9jX18nLCAnX19tZW1iZXJzX18nLCAnX19tb2R1bGVfXyddICsKKyAgICAgICAgICAgICAgICBzZWxmLl9tZW1iZXJfbmFtZXNfKQorCisgICAgZGVmIF9fZ2V0YXR0cl9fKGNscywgbmFtZSk6CisgICAgICAgICIiIlJldHVybiB0aGUgZW51bSBtZW1iZXIgbWF0Y2hpbmcgYG5hbWVgCisKKyAgICAgICAgV2UgdXNlIF9fZ2V0YXR0cl9fIGluc3RlYWQgb2YgZGVzY3JpcHRvcnMgb3IgaW5zZXJ0aW5nIGludG8gdGhlIGVudW0KKyAgICAgICAgY2xhc3MnIF9fZGljdF9fIGluIG9yZGVyIHRvIHN1cHBvcnQgYG5hbWVgIGFuZCBgdmFsdWVgIGJlaW5nIGJvdGgKKyAgICAgICAgcHJvcGVydGllcyBmb3IgZW51bSBtZW1iZXJzICh3aGljaCBsaXZlIGluIHRoZSBjbGFzcycgX19kaWN0X18pIGFuZAorICAgICAgICBlbnVtIG1lbWJlcnMgdGhlbXNlbHZlcy4KKworICAgICAgICAiIiIKKyAgICAgICAgaWYgX2lzX2R1bmRlcihuYW1lKToKKyAgICAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKG5hbWUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBjbHMuX21lbWJlcl9tYXBfW25hbWVdCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKG5hbWUpIGZyb20gTm9uZQorCisgICAgZGVmIF9fZ2V0aXRlbV9fKGNscywgbmFtZSk6CisgICAgICAgIHJldHVybiBjbHMuX21lbWJlcl9tYXBfW25hbWVdCisKKyAgICBkZWYgX19pdGVyX18oY2xzKToKKyAgICAgICAgcmV0dXJuIChjbHMuX21lbWJlcl9tYXBfW25hbWVdIGZvciBuYW1lIGluIGNscy5fbWVtYmVyX25hbWVzXykKKworICAgIGRlZiBfX2xlbl9fKGNscyk6CisgICAgICAgIHJldHVybiBsZW4oY2xzLl9tZW1iZXJfbmFtZXNfKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIF9fbWVtYmVyc19fKGNscyk6CisgICAgICAgICIiIlJldHVybnMgYSBtYXBwaW5nIG9mIG1lbWJlciBuYW1lLT52YWx1ZS4KKworICAgICAgICBUaGlzIG1hcHBpbmcgbGlzdHMgYWxsIGVudW0gbWVtYmVycywgaW5jbHVkaW5nIGFsaWFzZXMuIE5vdGUgdGhhdCB0aGlzCisgICAgICAgIGlzIGEgcmVhZC1vbmx5IHZpZXcgb2YgdGhlIGludGVybmFsIG1hcHBpbmcuCisKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBNYXBwaW5nUHJveHlUeXBlKGNscy5fbWVtYmVyX21hcF8pCisKKyAgICBkZWYgX19yZXByX18oY2xzKToKKyAgICAgICAgcmV0dXJuICI8ZW51bSAlcj4iICUgY2xzLl9fbmFtZV9fCisKKyAgICBkZWYgX19yZXZlcnNlZF9fKGNscyk6CisgICAgICAgIHJldHVybiAoY2xzLl9tZW1iZXJfbWFwX1tuYW1lXSBmb3IgbmFtZSBpbiByZXZlcnNlZChjbHMuX21lbWJlcl9uYW1lc18pKQorCisgICAgZGVmIF9fc2V0YXR0cl9fKGNscywgbmFtZSwgdmFsdWUpOgorICAgICAgICAiIiJCbG9jayBhdHRlbXB0cyB0byByZWFzc2lnbiBFbnVtIG1lbWJlcnMuCisKKyAgICAgICAgQSBzaW1wbGUgYXNzaWdubWVudCB0byB0aGUgY2xhc3MgbmFtZXNwYWNlIG9ubHkgY2hhbmdlcyBvbmUgb2YgdGhlCisgICAgICAgIHNldmVyYWwgcG9zc2libGUgd2F5cyB0byBnZXQgYW4gRW51bSBtZW1iZXIgZnJvbSB0aGUgRW51bSBjbGFzcywKKyAgICAgICAgcmVzdWx0aW5nIGluIGFuIGluY29uc2lzdGVudCBFbnVtZXJhdGlvbi4KKworICAgICAgICAiIiIKKyAgICAgICAgbWVtYmVyX21hcCA9IGNscy5fX2RpY3RfXy5nZXQoJ19tZW1iZXJfbWFwXycsIHt9KQorICAgICAgICBpZiBuYW1lIGluIG1lbWJlcl9tYXA6CisgICAgICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcignQ2Fubm90IHJlYXNzaWduIG1lbWJlcnMuJykKKyAgICAgICAgc3VwZXIoKS5fX3NldGF0dHJfXyhuYW1lLCB2YWx1ZSkKKworICAgIGRlZiBfY3JlYXRlXyhjbHMsIGNsYXNzX25hbWUsIG5hbWVzPU5vbmUsICosIG1vZHVsZT1Ob25lLCBxdWFsbmFtZT1Ob25lLCB0eXBlPU5vbmUpOgorICAgICAgICAiIiJDb252ZW5pZW5jZSBtZXRob2QgdG8gY3JlYXRlIGEgbmV3IEVudW0gY2xhc3MuCisKKyAgICAgICAgYG5hbWVzYCBjYW4gYmU6CisKKyAgICAgICAgKiBBIHN0cmluZyBjb250YWluaW5nIG1lbWJlciBuYW1lcywgc2VwYXJhdGVkIGVpdGhlciB3aXRoIHNwYWNlcyBvcgorICAgICAgICAgIGNvbW1hcy4gIFZhbHVlcyBhcmUgYXV0by1udW1iZXJlZCBmcm9tIDEuCisgICAgICAgICogQW4gaXRlcmFibGUgb2YgbWVtYmVyIG5hbWVzLiAgVmFsdWVzIGFyZSBhdXRvLW51bWJlcmVkIGZyb20gMS4KKyAgICAgICAgKiBBbiBpdGVyYWJsZSBvZiAobWVtYmVyIG5hbWUsIHZhbHVlKSBwYWlycy4KKyAgICAgICAgKiBBIG1hcHBpbmcgb2YgbWVtYmVyIG5hbWUgLT4gdmFsdWUuCisKKyAgICAgICAgIiIiCisgICAgICAgIG1ldGFjbHMgPSBjbHMuX19jbGFzc19fCisgICAgICAgIGJhc2VzID0gKGNscywgKSBpZiB0eXBlIGlzIE5vbmUgZWxzZSAodHlwZSwgY2xzKQorICAgICAgICBjbGFzc2RpY3QgPSBtZXRhY2xzLl9fcHJlcGFyZV9fKGNsYXNzX25hbWUsIGJhc2VzKQorCisgICAgICAgICMgc3BlY2lhbCBwcm9jZXNzaW5nIG5lZWRlZCBmb3IgbmFtZXM/CisgICAgICAgIGlmIGlzaW5zdGFuY2UobmFtZXMsIHN0cik6CisgICAgICAgICAgICBuYW1lcyA9IG5hbWVzLnJlcGxhY2UoJywnLCAnICcpLnNwbGl0KCkKKyAgICAgICAgaWYgaXNpbnN0YW5jZShuYW1lcywgKHR1cGxlLCBsaXN0KSkgYW5kIGlzaW5zdGFuY2UobmFtZXNbMF0sIHN0cik6CisgICAgICAgICAgICBuYW1lcyA9IFsoZSwgaSkgZm9yIChpLCBlKSBpbiBlbnVtZXJhdGUobmFtZXMsIDEpXQorCisgICAgICAgICMgSGVyZSwgbmFtZXMgaXMgZWl0aGVyIGFuIGl0ZXJhYmxlIG9mIChuYW1lLCB2YWx1ZSkgb3IgYSBtYXBwaW5nLgorICAgICAgICBmb3IgaXRlbSBpbiBuYW1lczoKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoaXRlbSwgc3RyKToKKyAgICAgICAgICAgICAgICBtZW1iZXJfbmFtZSwgbWVtYmVyX3ZhbHVlID0gaXRlbSwgbmFtZXNbaXRlbV0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbWVtYmVyX25hbWUsIG1lbWJlcl92YWx1ZSA9IGl0ZW0KKyAgICAgICAgICAgIGNsYXNzZGljdFttZW1iZXJfbmFtZV0gPSBtZW1iZXJfdmFsdWUKKyAgICAgICAgZW51bV9jbGFzcyA9IG1ldGFjbHMuX19uZXdfXyhtZXRhY2xzLCBjbGFzc19uYW1lLCBiYXNlcywgY2xhc3NkaWN0KQorCisgICAgICAgICMgVE9ETzogcmVwbGFjZSB0aGUgZnJhbWUgaGFjayBpZiBhIGJsZXNzZWQgd2F5IHRvIGtub3cgdGhlIGNhbGxpbmcKKyAgICAgICAgIyBtb2R1bGUgaXMgZXZlciBkZXZlbG9wZWQKKyAgICAgICAgaWYgbW9kdWxlIGlzIE5vbmU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbW9kdWxlID0gc3lzLl9nZXRmcmFtZSgyKS5mX2dsb2JhbHNbJ19fbmFtZV9fJ10KKyAgICAgICAgICAgIGV4Y2VwdCAoQXR0cmlidXRlRXJyb3IsIFZhbHVlRXJyb3IpIGFzIGV4YzoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIGlmIG1vZHVsZSBpcyBOb25lOgorICAgICAgICAgICAgX21ha2VfY2xhc3NfdW5waWNrbGFibGUoZW51bV9jbGFzcykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGVudW1fY2xhc3MuX19tb2R1bGVfXyA9IG1vZHVsZQorICAgICAgICBpZiBxdWFsbmFtZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGVudW1fY2xhc3MuX19xdWFsbmFtZV9fID0gcXVhbG5hbWUKKworICAgICAgICByZXR1cm4gZW51bV9jbGFzcworCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBfZ2V0X21peGluc18oYmFzZXMpOgorICAgICAgICAiIiJSZXR1cm5zIHRoZSB0eXBlIGZvciBjcmVhdGluZyBlbnVtIG1lbWJlcnMsIGFuZCB0aGUgZmlyc3QgaW5oZXJpdGVkCisgICAgICAgIGVudW0gY2xhc3MuCisKKyAgICAgICAgYmFzZXM6IHRoZSB0dXBsZSBvZiBiYXNlcyB0aGF0IHdhcyBnaXZlbiB0byBfX25ld19fCisKKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCBiYXNlczoKKyAgICAgICAgICAgIHJldHVybiBvYmplY3QsIEVudW0KKworICAgICAgICAjIGRvdWJsZSBjaGVjayB0aGF0IHdlIGFyZSBub3Qgc3ViY2xhc3NpbmcgYSBjbGFzcyB3aXRoIGV4aXN0aW5nCisgICAgICAgICMgZW51bWVyYXRpb24gbWVtYmVyczsgd2hpbGUgd2UncmUgYXQgaXQsIHNlZSBpZiBhbnkgb3RoZXIgZGF0YQorICAgICAgICAjIHR5cGUgaGFzIGJlZW4gbWl4ZWQgaW4gc28gd2UgY2FuIHVzZSB0aGUgY29ycmVjdCBfX25ld19fCisgICAgICAgIG1lbWJlcl90eXBlID0gZmlyc3RfZW51bSA9IE5vbmUKKyAgICAgICAgZm9yIGJhc2UgaW4gYmFzZXM6CisgICAgICAgICAgICBpZiAgKGJhc2UgaXMgbm90IEVudW0gYW5kCisgICAgICAgICAgICAgICAgICAgIGlzc3ViY2xhc3MoYmFzZSwgRW51bSkgYW5kCisgICAgICAgICAgICAgICAgICAgIGJhc2UuX21lbWJlcl9uYW1lc18pOgorICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiQ2Fubm90IGV4dGVuZCBlbnVtZXJhdGlvbnMiKQorICAgICAgICAjIGJhc2UgaXMgbm93IHRoZSBsYXN0IGJhc2UgaW4gYmFzZXMKKyAgICAgICAgaWYgbm90IGlzc3ViY2xhc3MoYmFzZSwgRW51bSk6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoIm5ldyBlbnVtZXJhdGlvbnMgbXVzdCBiZSBjcmVhdGVkIGFzICIKKyAgICAgICAgICAgICAgICAgICAgImBDbGFzc05hbWUoW21peGluX3R5cGUsXSBlbnVtX3R5cGUpYCIpCisKKyAgICAgICAgIyBnZXQgY29ycmVjdCBtaXgtaW4gdHlwZSAoZWl0aGVyIG1peC1pbiB0eXBlIG9mIEVudW0gc3ViY2xhc3MsIG9yCisgICAgICAgICMgZmlyc3QgYmFzZSBpZiBsYXN0IGJhc2UgaXMgRW51bSkKKyAgICAgICAgaWYgbm90IGlzc3ViY2xhc3MoYmFzZXNbMF0sIEVudW0pOgorICAgICAgICAgICAgbWVtYmVyX3R5cGUgPSBiYXNlc1swXSAgICAgIyBmaXJzdCBkYXRhIHR5cGUKKyAgICAgICAgICAgIGZpcnN0X2VudW0gPSBiYXNlc1stMV0gICMgZW51bSB0eXBlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmb3IgYmFzZSBpbiBiYXNlc1swXS5fX21yb19fOgorICAgICAgICAgICAgICAgICMgbW9zdCBjb21tb246IChJbnRFbnVtLCBpbnQsIEVudW0sIG9iamVjdCkKKyAgICAgICAgICAgICAgICAjIHBvc3NpYmxlOiAgICAoPEVudW0gJ0F1dG9JbnRFbnVtJz4sIDxFbnVtICdJbnRFbnVtJz4sCisgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICAgIDxjbGFzcyAnaW50Jz4sIDxFbnVtICdFbnVtJz4sCisgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICAgIDxjbGFzcyAnb2JqZWN0Jz4pCisgICAgICAgICAgICAgICAgaWYgaXNzdWJjbGFzcyhiYXNlLCBFbnVtKToKKyAgICAgICAgICAgICAgICAgICAgaWYgZmlyc3RfZW51bSBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RfZW51bSA9IGJhc2UKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBpZiBtZW1iZXJfdHlwZSBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgbWVtYmVyX3R5cGUgPSBiYXNlCisKKyAgICAgICAgcmV0dXJuIG1lbWJlcl90eXBlLCBmaXJzdF9lbnVtCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIF9maW5kX25ld18oY2xhc3NkaWN0LCBtZW1iZXJfdHlwZSwgZmlyc3RfZW51bSk6CisgICAgICAgICIiIlJldHVybnMgdGhlIF9fbmV3X18gdG8gYmUgdXNlZCBmb3IgY3JlYXRpbmcgdGhlIGVudW0gbWVtYmVycy4KKworICAgICAgICBjbGFzc2RpY3Q6IHRoZSBjbGFzcyBkaWN0aW9uYXJ5IGdpdmVuIHRvIF9fbmV3X18KKyAgICAgICAgbWVtYmVyX3R5cGU6IHRoZSBkYXRhIHR5cGUgd2hvc2UgX19uZXdfXyB3aWxsIGJlIHVzZWQgYnkgZGVmYXVsdAorICAgICAgICBmaXJzdF9lbnVtOiBlbnVtZXJhdGlvbiB0byBjaGVjayBmb3IgYW4gb3ZlcnJpZGluZyBfX25ld19fCisKKyAgICAgICAgIiIiCisgICAgICAgICMgbm93IGZpbmQgdGhlIGNvcnJlY3QgX19uZXdfXywgY2hlY2tpbmcgdG8gc2VlIG9mIG9uZSB3YXMgZGVmaW5lZAorICAgICAgICAjIGJ5IHRoZSB1c2VyOyBhbHNvIGNoZWNrIGVhcmxpZXIgZW51bSBjbGFzc2VzIGluIGNhc2UgYSBfX25ld19fIHdhcworICAgICAgICAjIHNhdmVkIGFzIF9fbmV3X21lbWJlcl9fCisgICAgICAgIF9fbmV3X18gPSBjbGFzc2RpY3QuZ2V0KCdfX25ld19fJywgTm9uZSkKKworICAgICAgICAjIHNob3VsZCBfX25ld19fIGJlIHNhdmVkIGFzIF9fbmV3X21lbWJlcl9fIGxhdGVyPworICAgICAgICBzYXZlX25ldyA9IF9fbmV3X18gaXMgbm90IE5vbmUKKworICAgICAgICBpZiBfX25ld19fIGlzIE5vbmU6CisgICAgICAgICAgICAjIGNoZWNrIGFsbCBwb3NzaWJsZXMgZm9yIF9fbmV3X21lbWJlcl9fIGJlZm9yZSBmYWxsaW5nIGJhY2sgdG8KKyAgICAgICAgICAgICMgX19uZXdfXworICAgICAgICAgICAgZm9yIG1ldGhvZCBpbiAoJ19fbmV3X21lbWJlcl9fJywgJ19fbmV3X18nKToKKyAgICAgICAgICAgICAgICBmb3IgcG9zc2libGUgaW4gKG1lbWJlcl90eXBlLCBmaXJzdF9lbnVtKToKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0ID0gZ2V0YXR0cihwb3NzaWJsZSwgbWV0aG9kLCBOb25lKQorICAgICAgICAgICAgICAgICAgICBpZiB0YXJnZXQgbm90IGluIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUuX19uZXdfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuX19uZXdfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbnVtLl9fbmV3X18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfToKKyAgICAgICAgICAgICAgICAgICAgICAgIF9fbmV3X18gPSB0YXJnZXQKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgaWYgX19uZXdfXyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgX19uZXdfXyA9IG9iamVjdC5fX25ld19fCisKKyAgICAgICAgIyBpZiBhIG5vbi1vYmplY3QuX19uZXdfXyBpcyB1c2VkIHRoZW4gd2hhdGV2ZXIgdmFsdWUvdHVwbGUgd2FzCisgICAgICAgICMgYXNzaWduZWQgdG8gdGhlIGVudW0gbWVtYmVyIG5hbWUgd2lsbCBiZSBwYXNzZWQgdG8gX19uZXdfXyBhbmQgdG8gdGhlCisgICAgICAgICMgbmV3IGVudW0gbWVtYmVyJ3MgX19pbml0X18KKyAgICAgICAgaWYgX19uZXdfXyBpcyBvYmplY3QuX19uZXdfXzoKKyAgICAgICAgICAgIHVzZV9hcmdzID0gRmFsc2UKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHVzZV9hcmdzID0gVHJ1ZQorCisgICAgICAgIHJldHVybiBfX25ld19fLCBzYXZlX25ldywgdXNlX2FyZ3MKKworCitjbGFzcyBFbnVtKG1ldGFjbGFzcz1FbnVtTWV0YSk6CisgICAgIiIiR2VuZXJpYyBlbnVtZXJhdGlvbi4KKworICAgIERlcml2ZSBmcm9tIHRoaXMgY2xhc3MgdG8gZGVmaW5lIG5ldyBlbnVtZXJhdGlvbnMuCisKKyAgICAiIiIKKyAgICBkZWYgX19uZXdfXyhjbHMsIHZhbHVlKToKKyAgICAgICAgIyBhbGwgZW51bSBpbnN0YW5jZXMgYXJlIGFjdHVhbGx5IGNyZWF0ZWQgZHVyaW5nIGNsYXNzIGNvbnN0cnVjdGlvbgorICAgICAgICAjIHdpdGhvdXQgY2FsbGluZyB0aGlzIG1ldGhvZDsgdGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBtZXRhY2xhc3MnCisgICAgICAgICMgX19jYWxsX18gKGkuZS4gQ29sb3IoMykgKSwgYW5kIGJ5IHBpY2tsZQorICAgICAgICBpZiB0eXBlKHZhbHVlKSBpcyBjbHM6CisgICAgICAgICAgICAjIEZvciBsb29rdXBzIGxpa2UgQ29sb3IoQ29sb3IucmVkKQorICAgICAgICAgICAgcmV0dXJuIHZhbHVlCisgICAgICAgICMgYnktdmFsdWUgc2VhcmNoIGZvciBhIG1hdGNoaW5nIGVudW0gbWVtYmVyCisgICAgICAgICMgc2VlIGlmIGl0J3MgaW4gdGhlIHJldmVyc2UgbWFwcGluZyAoZm9yIGhhc2hhYmxlIHZhbHVlcykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgdmFsdWUgaW4gY2xzLl92YWx1ZTJtZW1iZXJfbWFwXzoKKyAgICAgICAgICAgICAgICByZXR1cm4gY2xzLl92YWx1ZTJtZW1iZXJfbWFwX1t2YWx1ZV0KKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgICMgbm90IHRoZXJlLCBub3cgZG8gbG9uZyBzZWFyY2ggLS0gTyhuKSBiZWhhdmlvcgorICAgICAgICAgICAgZm9yIG1lbWJlciBpbiBjbHMuX21lbWJlcl9tYXBfLnZhbHVlcygpOgorICAgICAgICAgICAgICAgIGlmIG1lbWJlci5fdmFsdWVfID09IHZhbHVlOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVtYmVyCisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIiVyIGlzIG5vdCBhIHZhbGlkICVzIiAlICh2YWx1ZSwgY2xzLl9fbmFtZV9fKSkKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICI8JXMuJXM6ICVyPiIgJSAoCisgICAgICAgICAgICAgICAgc2VsZi5fX2NsYXNzX18uX19uYW1lX18sIHNlbGYuX25hbWVfLCBzZWxmLl92YWx1ZV8pCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICIlcy4lcyIgJSAoc2VsZi5fX2NsYXNzX18uX19uYW1lX18sIHNlbGYuX25hbWVfKQorCisgICAgZGVmIF9fZGlyX18oc2VsZik6CisgICAgICAgIGFkZGVkX2JlaGF2aW9yID0gWworICAgICAgICAgICAgICAgIG0KKyAgICAgICAgICAgICAgICBmb3IgY2xzIGluIHNlbGYuX19jbGFzc19fLm1ybygpCisgICAgICAgICAgICAgICAgZm9yIG0gaW4gY2xzLl9fZGljdF9fCisgICAgICAgICAgICAgICAgaWYgbVswXSAhPSAnXycKKyAgICAgICAgICAgICAgICBdCisgICAgICAgIHJldHVybiAoWydfX2NsYXNzX18nLCAnX19kb2NfXycsICdfX21vZHVsZV9fJywgJ25hbWUnLCAndmFsdWUnXSArCisgICAgICAgICAgICAgICAgYWRkZWRfYmVoYXZpb3IpCisKKyAgICBkZWYgX19mb3JtYXRfXyhzZWxmLCBmb3JtYXRfc3BlYyk6CisgICAgICAgICMgbWl4ZWQtaW4gRW51bXMgc2hvdWxkIHVzZSB0aGUgbWl4ZWQtaW4gdHlwZSdzIF9fZm9ybWF0X18sIG90aGVyd2lzZQorICAgICAgICAjIHdlIGNhbiBnZXQgc3RyYW5nZSByZXN1bHRzIHdpdGggdGhlIEVudW0gbmFtZSBzaG93aW5nIHVwIGluc3RlYWQgb2YKKyAgICAgICAgIyB0aGUgdmFsdWUKKworICAgICAgICAjIHB1cmUgRW51bSBicmFuY2gKKyAgICAgICAgaWYgc2VsZi5fbWVtYmVyX3R5cGVfIGlzIG9iamVjdDoKKyAgICAgICAgICAgIGNscyA9IHN0cgorICAgICAgICAgICAgdmFsID0gc3RyKHNlbGYpCisgICAgICAgICMgbWl4LWluIGJyYW5jaAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY2xzID0gc2VsZi5fbWVtYmVyX3R5cGVfCisgICAgICAgICAgICB2YWwgPSBzZWxmLl92YWx1ZV8KKyAgICAgICAgcmV0dXJuIGNscy5fX2Zvcm1hdF9fKHZhbCwgZm9ybWF0X3NwZWMpCisKKyAgICBkZWYgX19oYXNoX18oc2VsZik6CisgICAgICAgIHJldHVybiBoYXNoKHNlbGYuX25hbWVfKQorCisgICAgZGVmIF9fcmVkdWNlX2V4X18oc2VsZiwgcHJvdG8pOgorICAgICAgICByZXR1cm4gc2VsZi5fX2NsYXNzX18sIChzZWxmLl92YWx1ZV8sICkKKworICAgICMgRHluYW1pY0NsYXNzQXR0cmlidXRlIGlzIHVzZWQgdG8gcHJvdmlkZSBhY2Nlc3MgdG8gdGhlIGBuYW1lYCBhbmQKKyAgICAjIGB2YWx1ZWAgcHJvcGVydGllcyBvZiBlbnVtIG1lbWJlcnMgd2hpbGUga2VlcGluZyBzb21lIG1lYXN1cmUgb2YKKyAgICAjIHByb3RlY3Rpb24gZnJvbSBtb2RpZmljYXRpb24sIHdoaWxlIHN0aWxsIGFsbG93aW5nIGZvciBhbiBlbnVtZXJhdGlvbgorICAgICMgdG8gaGF2ZSBtZW1iZXJzIG5hbWVkIGBuYW1lYCBhbmQgYHZhbHVlYC4gIFRoaXMgd29ya3MgYmVjYXVzZSBlbnVtZXJhdGlvbgorICAgICMgbWVtYmVycyBhcmUgbm90IHNldCBkaXJlY3RseSBvbiB0aGUgZW51bSBjbGFzcyAtLSBfX2dldGF0dHJfXyBpcworICAgICMgdXNlZCB0byBsb29rIHRoZW0gdXAuCisKKyAgICBARHluYW1pY0NsYXNzQXR0cmlidXRlCisgICAgZGVmIG5hbWUoc2VsZik6CisgICAgICAgICIiIlRoZSBuYW1lIG9mIHRoZSBFbnVtIG1lbWJlci4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX25hbWVfCisKKyAgICBARHluYW1pY0NsYXNzQXR0cmlidXRlCisgICAgZGVmIHZhbHVlKHNlbGYpOgorICAgICAgICAiIiJUaGUgdmFsdWUgb2YgdGhlIEVudW0gbWVtYmVyLiIiIgorICAgICAgICByZXR1cm4gc2VsZi5fdmFsdWVfCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX2NvbnZlcnQoY2xzLCBuYW1lLCBtb2R1bGUsIGZpbHRlciwgc291cmNlPU5vbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgQ3JlYXRlIGEgbmV3IEVudW0gc3ViY2xhc3MgdGhhdCByZXBsYWNlcyBhIGNvbGxlY3Rpb24gb2YgZ2xvYmFsIGNvbnN0YW50cworICAgICAgICAiIiIKKyAgICAgICAgIyBjb252ZXJ0IGFsbCBjb25zdGFudHMgZnJvbSBzb3VyY2UgKG9yIG1vZHVsZSkgdGhhdCBwYXNzIGZpbHRlcigpIHRvCisgICAgICAgICMgYSBuZXcgRW51bSBjYWxsZWQgbmFtZSwgYW5kIGV4cG9ydCB0aGUgZW51bSBhbmQgaXRzIG1lbWJlcnMgYmFjayB0bworICAgICAgICAjIG1vZHVsZTsKKyAgICAgICAgIyBhbHNvLCByZXBsYWNlIHRoZSBfX3JlZHVjZV9leF9fIG1ldGhvZCBzbyB1bnBpY2tsaW5nIHdvcmtzIGluCisgICAgICAgICMgcHJldmlvdXMgUHl0aG9uIHZlcnNpb25zCisgICAgICAgIG1vZHVsZV9nbG9iYWxzID0gdmFycyhzeXMubW9kdWxlc1ttb2R1bGVdKQorICAgICAgICBpZiBzb3VyY2U6CisgICAgICAgICAgICBzb3VyY2UgPSB2YXJzKHNvdXJjZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNvdXJjZSA9IG1vZHVsZV9nbG9iYWxzCisgICAgICAgIG1lbWJlcnMgPSB7bmFtZTogdmFsdWUgZm9yIG5hbWUsIHZhbHVlIGluIHNvdXJjZS5pdGVtcygpCisgICAgICAgICAgICAgICAgaWYgZmlsdGVyKG5hbWUpfQorICAgICAgICBjbHMgPSBjbHMobmFtZSwgbWVtYmVycywgbW9kdWxlPW1vZHVsZSkKKyAgICAgICAgY2xzLl9fcmVkdWNlX2V4X18gPSBfcmVkdWNlX2V4X2J5X25hbWUKKyAgICAgICAgbW9kdWxlX2dsb2JhbHMudXBkYXRlKGNscy5fX21lbWJlcnNfXykKKyAgICAgICAgbW9kdWxlX2dsb2JhbHNbbmFtZV0gPSBjbHMKKyAgICAgICAgcmV0dXJuIGNscworCisKK2NsYXNzIEludEVudW0oaW50LCBFbnVtKToKKyAgICAiIiJFbnVtIHdoZXJlIG1lbWJlcnMgYXJlIGFsc28gKGFuZCBtdXN0IGJlKSBpbnRzIiIiCisKKworZGVmIF9yZWR1Y2VfZXhfYnlfbmFtZShzZWxmLCBwcm90byk6CisgICAgcmV0dXJuIHNlbGYubmFtZQorCitkZWYgdW5pcXVlKGVudW1lcmF0aW9uKToKKyAgICAiIiJDbGFzcyBkZWNvcmF0b3IgZm9yIGVudW1lcmF0aW9ucyBlbnN1cmluZyB1bmlxdWUgbWVtYmVyIHZhbHVlcy4iIiIKKyAgICBkdXBsaWNhdGVzID0gW10KKyAgICBmb3IgbmFtZSwgbWVtYmVyIGluIGVudW1lcmF0aW9uLl9fbWVtYmVyc19fLml0ZW1zKCk6CisgICAgICAgIGlmIG5hbWUgIT0gbWVtYmVyLm5hbWU6CisgICAgICAgICAgICBkdXBsaWNhdGVzLmFwcGVuZCgobmFtZSwgbWVtYmVyLm5hbWUpKQorICAgIGlmIGR1cGxpY2F0ZXM6CisgICAgICAgIGFsaWFzX2RldGFpbHMgPSAnLCAnLmpvaW4oCisgICAgICAgICAgICAgICAgWyIlcyAtPiAlcyIgJSAoYWxpYXMsIG5hbWUpIGZvciAoYWxpYXMsIG5hbWUpIGluIGR1cGxpY2F0ZXNdKQorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdkdXBsaWNhdGUgdmFsdWVzIGZvdW5kIGluICVyOiAlcycgJQorICAgICAgICAgICAgICAgIChlbnVtZXJhdGlvbiwgYWxpYXNfZGV0YWlscykpCisgICAgcmV0dXJuIGVudW1lcmF0aW9uCmRpZmYgLS1naXQgYS9MaWIvZmlsZWNtcC5weSBiL0xpYi9maWxlY21wLnB5CmluZGV4IGY1Y2VhMWQuLmU1YWQ4MzkgMTAwNjQ0Ci0tLSBhL0xpYi9maWxlY21wLnB5CisrKyBiL0xpYi9maWxlY21wLnB5CkBAIC02LDYgKzYsNyBAQAogRnVuY3Rpb25zOgogICAgIGNtcChmMSwgZjIsIHNoYWxsb3c9VHJ1ZSkgLT4gaW50CiAgICAgY21wZmlsZXMoYSwgYiwgY29tbW9uKSAtPiAoW10sIFtdLCBbXSkKKyAgICBjbGVhcl9jYWNoZSgpCiAKICIiIgogCkBAIC0xMywxMSArMTQsMTggQEAKIGltcG9ydCBzdGF0CiBmcm9tIGl0ZXJ0b29scyBpbXBvcnQgZmlsdGVyZmFsc2UKIAotX19hbGxfXyA9IFsiY21wIiwgImRpcmNtcCIsICJjbXBmaWxlcyJdCitfX2FsbF9fID0gWydjbGVhcl9jYWNoZScsICdjbXAnLCAnZGlyY21wJywgJ2NtcGZpbGVzJywgJ0RFRkFVTFRfSUdOT1JFUyddCiAKIF9jYWNoZSA9IHt9CiBCVUZTSVpFID0gOCoxMDI0CiAKK0RFRkFVTFRfSUdOT1JFUyA9IFsKKyAgICAnUkNTJywgJ0NWUycsICd0YWdzJywgJy5naXQnLCAnLmhnJywgJy5ienInLCAnX2RhcmNzJywgJ19fcHljYWNoZV9fJ10KKworZGVmIGNsZWFyX2NhY2hlKCk6CisgICAgIiIiQ2xlYXIgdGhlIGZpbGVjbXAgY2FjaGUuIiIiCisgICAgX2NhY2hlLmNsZWFyKCkKKwogZGVmIGNtcChmMSwgZjIsIHNoYWxsb3c9VHJ1ZSk6CiAgICAgIiIiQ29tcGFyZSB0d28gZmlsZXMuCiAKQEAgLTI4LDE0ICszNiwxNSBAQAogICAgIGYyIC0tIFNlY29uZCBmaWxlIG5hbWUKIAogICAgIHNoYWxsb3cgLS0gSnVzdCBjaGVjayBzdGF0IHNpZ25hdHVyZSAoZG8gbm90IHJlYWQgdGhlIGZpbGVzKS4KLSAgICAgICAgICAgICAgIGRlZmF1bHRzIHRvIDEuCisgICAgICAgICAgICAgICBkZWZhdWx0cyB0byBUcnVlLgogCiAgICAgUmV0dXJuIHZhbHVlOgogCiAgICAgVHJ1ZSBpZiB0aGUgZmlsZXMgYXJlIHRoZSBzYW1lLCBGYWxzZSBvdGhlcndpc2UuCiAKICAgICBUaGlzIGZ1bmN0aW9uIHVzZXMgYSBjYWNoZSBmb3IgcGFzdCBjb21wYXJpc29ucyBhbmQgdGhlIHJlc3VsdHMsCi0gICAgd2l0aCBhIGNhY2hlIGludmFsaWRhdGlvbiBtZWNoYW5pc20gcmVseWluZyBvbiBzdGFsZSBzaWduYXR1cmVzLgorICAgIHdpdGggY2FjaGUgZW50cmllcyBpbnZhbGlkYXRlZCBpZiB0aGVpciBzdGF0IGluZm9ybWF0aW9uCisgICAgY2hhbmdlcy4gIFRoZSBjYWNoZSBtYXkgYmUgY2xlYXJlZCBieSBjYWxsaW5nIGNsZWFyX2NhY2hlKCkuCiAKICAgICAiIiIKIApAQCAtNTIsNyArNjEsNyBAQAogICAgIGlmIG91dGNvbWUgaXMgTm9uZToKICAgICAgICAgb3V0Y29tZSA9IF9kb19jbXAoZjEsIGYyKQogICAgICAgICBpZiBsZW4oX2NhY2hlKSA+IDEwMDogICAgICAjIGxpbWl0IHRoZSBtYXhpbXVtIHNpemUgb2YgdGhlIGNhY2hlCi0gICAgICAgICAgICBfY2FjaGUuY2xlYXIoKQorICAgICAgICAgICAgY2xlYXJfY2FjaGUoKQogICAgICAgICBfY2FjaGVbZjEsIGYyLCBzMSwgczJdID0gb3V0Y29tZQogICAgIHJldHVybiBvdXRjb21lCiAKQEAgLTgwLDcgKzg5LDcgQEAKICAgICBkaXJjbXAoYSwgYiwgaWdub3JlPU5vbmUsIGhpZGU9Tm9uZSkKICAgICAgIEEgYW5kIEIgYXJlIGRpcmVjdG9yaWVzLgogICAgICAgSUdOT1JFIGlzIGEgbGlzdCBvZiBuYW1lcyB0byBpZ25vcmUsCi0gICAgICAgIGRlZmF1bHRzIHRvIFsnUkNTJywgJ0NWUycsICd0YWdzJ10uCisgICAgICAgIGRlZmF1bHRzIHRvIERFRkFVTFRfSUdOT1JFUy4KICAgICAgIEhJREUgaXMgYSBsaXN0IG9mIG5hbWVzIHRvIGhpZGUsCiAgICAgICAgIGRlZmF1bHRzIHRvIFtvcy5jdXJkaXIsIG9zLnBhcmRpcl0uCiAKQEAgLTExNiw3ICsxMjUsNyBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5oaWRlID0gaGlkZQogICAgICAgICBpZiBpZ25vcmUgaXMgTm9uZToKLSAgICAgICAgICAgIHNlbGYuaWdub3JlID0gWydSQ1MnLCAnQ1ZTJywgJ3RhZ3MnXSAjIE5hbWVzIGlnbm9yZWQgaW4gY29tcGFyaXNvbgorICAgICAgICAgICAgc2VsZi5pZ25vcmUgPSBERUZBVUxUX0lHTk9SRVMKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuaWdub3JlID0gaWdub3JlCiAKQEAgLTE0NywxMiArMTU2LDEyIEBACiAgICAgICAgICAgICBvayA9IDEKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBhX3N0YXQgPSBvcy5zdGF0KGFfcGF0aCkKLSAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvciBhcyB3aHk6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyB3aHk6CiAgICAgICAgICAgICAgICAgIyBwcmludCgnQ2FuXCd0IHN0YXQnLCBhX3BhdGgsICc6Jywgd2h5LmFyZ3NbMV0pCiAgICAgICAgICAgICAgICAgb2sgPSAwCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgYl9zdGF0ID0gb3Muc3RhdChiX3BhdGgpCi0gICAgICAgICAgICBleGNlcHQgb3MuZXJyb3IgYXMgd2h5OgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgd2h5OgogICAgICAgICAgICAgICAgICMgcHJpbnQoJ0NhblwndCBzdGF0JywgYl9wYXRoLCAnOicsIHdoeS5hcmdzWzFdKQogICAgICAgICAgICAgICAgIG9rID0gMAogCkBAIC0yNjgsNyArMjc3LDcgQEAKIGRlZiBfY21wKGEsIGIsIHNoLCBhYnM9YWJzLCBjbXA9Y21wKToKICAgICB0cnk6CiAgICAgICAgIHJldHVybiBub3QgYWJzKGNtcChhLCBiLCBzaCkpCi0gICAgZXhjZXB0IG9zLmVycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICByZXR1cm4gMgogCiAKZGlmZiAtLWdpdCBhL0xpYi9maWxlaW5wdXQucHkgYi9MaWIvZmlsZWlucHV0LnB5CmluZGV4IDg3OWEwZmQuLjgxYTc1NDUgMTAwNjQ0Ci0tLSBhL0xpYi9maWxlaW5wdXQucHkKKysrIGIvTGliL2ZpbGVpbnB1dC5weQpAQCAtMzAsNyArMzAsNyBAQAogCiBBbGwgZmlsZXMgYXJlIG9wZW5lZCBpbiB0ZXh0IG1vZGUgYnkgZGVmYXVsdCwgeW91IGNhbiBvdmVycmlkZSB0aGlzIGJ5CiBzZXR0aW5nIHRoZSBtb2RlIHBhcmFtZXRlciB0byBpbnB1dCgpIG9yIEZpbGVJbnB1dC5fX2luaXRfXygpLgotSWYgYW4gSS9PIGVycm9yIG9jY3VycyBkdXJpbmcgb3BlbmluZyBvciByZWFkaW5nIGEgZmlsZSwgdGhlIElPRXJyb3IKK0lmIGFuIEkvTyBlcnJvciBvY2N1cnMgZHVyaW5nIG9wZW5pbmcgb3IgcmVhZGluZyBhIGZpbGUsIHRoZSBPU0Vycm9yCiBleGNlcHRpb24gaXMgcmFpc2VkLgogCiBJZiBzeXMuc3RkaW4gaXMgdXNlZCBtb3JlIHRoYW4gb25jZSwgdGhlIHNlY29uZCBhbmQgZnVydGhlciB1c2Ugd2lsbApAQCAtMjIyLDYgKzIyMiwxMCBAQAogICAgICAgICBpZiBtb2RlIG5vdCBpbiAoJ3InLCAnclUnLCAnVScsICdyYicpOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiRmlsZUlucHV0IG9wZW5pbmcgbW9kZSBtdXN0IGJlIG9uZSBvZiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIncicsICdyVScsICdVJyBhbmQgJ3JiJyIpCisgICAgICAgIGlmICdVJyBpbiBtb2RlOgorICAgICAgICAgICAgaW1wb3J0IHdhcm5pbmdzCisgICAgICAgICAgICB3YXJuaW5ncy53YXJuKCInVScgbW9kZSBpcyBkZXByZWNhdGVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nLCAyKQogICAgICAgICBzZWxmLl9tb2RlID0gbW9kZQogICAgICAgICBpZiBvcGVuaG9vazoKICAgICAgICAgICAgIGlmIGlucGxhY2U6CkBAIC0yMzQsOCArMjM4LDEwIEBACiAgICAgICAgIHNlbGYuY2xvc2UoKQogCiAgICAgZGVmIGNsb3NlKHNlbGYpOgotICAgICAgICBzZWxmLm5leHRmaWxlKCkKLSAgICAgICAgc2VsZi5fZmlsZXMgPSAoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLm5leHRmaWxlKCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYuX2ZpbGVzID0gKCkKIAogICAgIGRlZiBfX2VudGVyX18oc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmCkBAIC0yNzcsMjMgKzI4MywyNSBAQAogCiAgICAgICAgIG91dHB1dCA9IHNlbGYuX291dHB1dAogICAgICAgICBzZWxmLl9vdXRwdXQgPSAwCi0gICAgICAgIGlmIG91dHB1dDoKLSAgICAgICAgICAgIG91dHB1dC5jbG9zZSgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIG91dHB1dDoKKyAgICAgICAgICAgICAgICBvdXRwdXQuY2xvc2UoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZmlsZSA9IHNlbGYuX2ZpbGUKKyAgICAgICAgICAgIHNlbGYuX2ZpbGUgPSAwCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaWYgZmlsZSBhbmQgbm90IHNlbGYuX2lzc3RkaW46CisgICAgICAgICAgICAgICAgICAgIGZpbGUuY2xvc2UoKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBiYWNrdXBmaWxlbmFtZSA9IHNlbGYuX2JhY2t1cGZpbGVuYW1lCisgICAgICAgICAgICAgICAgc2VsZi5fYmFja3VwZmlsZW5hbWUgPSAwCisgICAgICAgICAgICAgICAgaWYgYmFja3VwZmlsZW5hbWUgYW5kIG5vdCBzZWxmLl9iYWNrdXA6CisgICAgICAgICAgICAgICAgICAgIHRyeTogb3MudW5saW5rKGJhY2t1cGZpbGVuYW1lKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjogcGFzcwogCi0gICAgICAgIGZpbGUgPSBzZWxmLl9maWxlCi0gICAgICAgIHNlbGYuX2ZpbGUgPSAwCi0gICAgICAgIGlmIGZpbGUgYW5kIG5vdCBzZWxmLl9pc3N0ZGluOgotICAgICAgICAgICAgZmlsZS5jbG9zZSgpCi0KLSAgICAgICAgYmFja3VwZmlsZW5hbWUgPSBzZWxmLl9iYWNrdXBmaWxlbmFtZQotICAgICAgICBzZWxmLl9iYWNrdXBmaWxlbmFtZSA9IDAKLSAgICAgICAgaWYgYmFja3VwZmlsZW5hbWUgYW5kIG5vdCBzZWxmLl9iYWNrdXA6Ci0gICAgICAgICAgICB0cnk6IG9zLnVubGluayhiYWNrdXBmaWxlbmFtZSkKLSAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOiBwYXNzCi0KLSAgICAgICAgc2VsZi5faXNzdGRpbiA9IEZhbHNlCi0gICAgICAgIHNlbGYuX2J1ZmZlciA9IFtdCi0gICAgICAgIHNlbGYuX2J1ZmluZGV4ID0gMAorICAgICAgICAgICAgICAgIHNlbGYuX2lzc3RkaW4gPSBGYWxzZQorICAgICAgICAgICAgICAgIHNlbGYuX2J1ZmZlciA9IFtdCisgICAgICAgICAgICAgICAgc2VsZi5fYnVmaW5kZXggPSAwCiAKICAgICBkZWYgcmVhZGxpbmUoc2VsZik6CiAgICAgICAgIHRyeToKQEAgLTMwNyw3ICszMTUsMTAgQEAKICAgICAgICAgICAgIHJldHVybiBsaW5lCiAgICAgICAgIGlmIG5vdCBzZWxmLl9maWxlOgogICAgICAgICAgICAgaWYgbm90IHNlbGYuX2ZpbGVzOgotICAgICAgICAgICAgICAgIHJldHVybiAiIgorICAgICAgICAgICAgICAgIGlmICdiJyBpbiBzZWxmLl9tb2RlOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gYicnCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcnCiAgICAgICAgICAgICBzZWxmLl9maWxlbmFtZSA9IHNlbGYuX2ZpbGVzWzBdCiAgICAgICAgICAgICBzZWxmLl9maWxlcyA9IHNlbGYuX2ZpbGVzWzE6XQogICAgICAgICAgICAgc2VsZi5fZmlsZWxpbmVubyA9IDAKQEAgLTMxNiwxNSArMzI3LDIwIEBACiAgICAgICAgICAgICBzZWxmLl9iYWNrdXBmaWxlbmFtZSA9IDAKICAgICAgICAgICAgIGlmIHNlbGYuX2ZpbGVuYW1lID09ICctJzoKICAgICAgICAgICAgICAgICBzZWxmLl9maWxlbmFtZSA9ICc8c3RkaW4+JwotICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGUgPSBzeXMuc3RkaW4KKyAgICAgICAgICAgICAgICBpZiAnYicgaW4gc2VsZi5fbW9kZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fZmlsZSA9IHN5cy5zdGRpbi5idWZmZXIKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9maWxlID0gc3lzLnN0ZGluCiAgICAgICAgICAgICAgICAgc2VsZi5faXNzdGRpbiA9IFRydWUKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgaWYgc2VsZi5faW5wbGFjZToKICAgICAgICAgICAgICAgICAgICAgc2VsZi5fYmFja3VwZmlsZW5hbWUgPSAoCiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9maWxlbmFtZSArIChzZWxmLl9iYWNrdXAgb3IgIi5iYWsiKSkKLSAgICAgICAgICAgICAgICAgICAgdHJ5OiBvcy51bmxpbmsoc2VsZi5fYmFja3VwZmlsZW5hbWUpCi0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvcjogcGFzcwotICAgICAgICAgICAgICAgICAgICAjIFRoZSBuZXh0IGZldyBsaW5lcyBtYXkgcmFpc2UgSU9FcnJvcgorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBvcy51bmxpbmsoc2VsZi5fYmFja3VwZmlsZW5hbWUpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgICAgICAjIFRoZSBuZXh0IGZldyBsaW5lcyBtYXkgcmFpc2UgT1NFcnJvcgogICAgICAgICAgICAgICAgICAgICBvcy5yZW5hbWUoc2VsZi5fZmlsZW5hbWUsIHNlbGYuX2JhY2t1cGZpbGVuYW1lKQogICAgICAgICAgICAgICAgICAgICBzZWxmLl9maWxlID0gb3BlbihzZWxmLl9iYWNrdXBmaWxlbmFtZSwgc2VsZi5fbW9kZSkKICAgICAgICAgICAgICAgICAgICAgdHJ5OgpAQCAtMzQ2LDcgKzM2Miw3IEBACiAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3NhdmVzdGRvdXQgPSBzeXMuc3Rkb3V0CiAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQgPSBzZWxmLl9vdXRwdXQKICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAjIFRoaXMgbWF5IHJhaXNlIElPRXJyb3IKKyAgICAgICAgICAgICAgICAgICAgIyBUaGlzIG1heSByYWlzZSBPU0Vycm9yCiAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuX29wZW5ob29rOgogICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZmlsZSA9IHNlbGYuX29wZW5ob29rKHNlbGYuX2ZpbGVuYW1lLCBzZWxmLl9tb2RlKQogICAgICAgICAgICAgICAgICAgICBlbHNlOgpkaWZmIC0tZ2l0IGEvTGliL2Zvcm1hdHRlci5weSBiL0xpYi9mb3JtYXR0ZXIucHkKaW5kZXggNjBlNjBmMS4uOTMzODI2MSAxMDA2NDQKLS0tIGEvTGliL2Zvcm1hdHRlci5weQorKysgYi9MaWIvZm9ybWF0dGVyLnB5CkBAIC0xOSw2ICsxOSw5IEBACiAiIiIKIAogaW1wb3J0IHN5cworaW1wb3J0IHdhcm5pbmdzCit3YXJuaW5ncy53YXJuKCd0aGUgZm9ybWF0dGVyIG1vZHVsZSBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gJworICAgICAgICAgICAgICAnUHl0aG9uIDMuNicsIFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcpCiAKIAogQVNfSVMgPSBOb25lCkBAIC00MzMsMTEgKzQzNiwxNSBAQAogICAgICAgICBmcCA9IG9wZW4oc3lzLmFyZ3ZbMV0pCiAgICAgZWxzZToKICAgICAgICAgZnAgPSBzeXMuc3RkaW4KLSAgICBmb3IgbGluZSBpbiBmcDoKLSAgICAgICAgaWYgbGluZSA9PSAnXG4nOgotICAgICAgICAgICAgZi5lbmRfcGFyYWdyYXBoKDEpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBmLmFkZF9mbG93aW5nX2RhdGEobGluZSkKKyAgICB0cnk6CisgICAgICAgIGZvciBsaW5lIGluIGZwOgorICAgICAgICAgICAgaWYgbGluZSA9PSAnXG4nOgorICAgICAgICAgICAgICAgIGYuZW5kX3BhcmFncmFwaCgxKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBmLmFkZF9mbG93aW5nX2RhdGEobGluZSkKKyAgICBmaW5hbGx5OgorICAgICAgICBpZiBmcCBpcyBub3Qgc3lzLnN0ZGluOgorICAgICAgICAgICAgZnAuY2xvc2UoKQogICAgIGYuZW5kX3BhcmFncmFwaCgwKQogCiAKZGlmZiAtLWdpdCBhL0xpYi9mcmFjdGlvbnMucHkgYi9MaWIvZnJhY3Rpb25zLnB5CmluZGV4IDhiZTUyZDIuLjc5ZTgzZmYgMTAwNjQ0Ci0tLSBhL0xpYi9mcmFjdGlvbnMucHkKKysrIGIvTGliL2ZyYWN0aW9ucy5weQpAQCAtMTgyLDggKzE4MiwxMCBAQAogICAgICAgICBlbGlmIG5vdCBpc2luc3RhbmNlKGYsIGZsb2F0KToKICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiJXMuZnJvbV9mbG9hdCgpIG9ubHkgdGFrZXMgZmxvYXRzLCBub3QgJXIgKCVzKSIgJQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbHMuX19uYW1lX18sIGYsIHR5cGUoZikuX19uYW1lX18pKQotICAgICAgICBpZiBtYXRoLmlzbmFuKGYpIG9yIG1hdGguaXNpbmYoZik6Ci0gICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoIkNhbm5vdCBjb252ZXJ0ICVyIHRvICVzLiIgJSAoZiwgY2xzLl9fbmFtZV9fKSkKKyAgICAgICAgaWYgbWF0aC5pc25hbihmKToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkNhbm5vdCBjb252ZXJ0ICVyIHRvICVzLiIgJSAoZiwgY2xzLl9fbmFtZV9fKSkKKyAgICAgICAgaWYgbWF0aC5pc2luZihmKToKKyAgICAgICAgICAgIHJhaXNlIE92ZXJmbG93RXJyb3IoIkNhbm5vdCBjb252ZXJ0ICVyIHRvICVzLiIgJSAoZiwgY2xzLl9fbmFtZV9fKSkKICAgICAgICAgcmV0dXJuIGNscygqZi5hc19pbnRlZ2VyX3JhdGlvKCkpCiAKICAgICBAY2xhc3NtZXRob2QKQEAgLTE5Niw5ICsxOTgsMTEgQEAKICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigKICAgICAgICAgICAgICAgICAiJXMuZnJvbV9kZWNpbWFsKCkgb25seSB0YWtlcyBEZWNpbWFscywgbm90ICVyICglcykiICUKICAgICAgICAgICAgICAgICAoY2xzLl9fbmFtZV9fLCBkZWMsIHR5cGUoZGVjKS5fX25hbWVfXykpCi0gICAgICAgIGlmIG5vdCBkZWMuaXNfZmluaXRlKCk6Ci0gICAgICAgICAgICAjIENhdGNoZXMgaW5maW5pdGllcyBhbmQgbmFucy4KLSAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiQ2Fubm90IGNvbnZlcnQgJXMgdG8gJXMuIiAlIChkZWMsIGNscy5fX25hbWVfXykpCisgICAgICAgIGlmIGRlYy5pc19pbmZpbml0ZSgpOgorICAgICAgICAgICAgcmFpc2UgT3ZlcmZsb3dFcnJvcigKKyAgICAgICAgICAgICAgICAiQ2Fubm90IGNvbnZlcnQgJXMgdG8gJXMuIiAlIChkZWMsIGNscy5fX25hbWVfXykpCisgICAgICAgIGlmIGRlYy5pc19uYW4oKToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkNhbm5vdCBjb252ZXJ0ICVzIHRvICVzLiIgJSAoZGVjLCBjbHMuX19uYW1lX18pKQogICAgICAgICBzaWduLCBkaWdpdHMsIGV4cCA9IGRlYy5hc190dXBsZSgpCiAgICAgICAgIGRpZ2l0cyA9IGludCgnJy5qb2luKG1hcChzdHIsIGRpZ2l0cykpKQogICAgICAgICBpZiBzaWduOgpkaWZmIC0tZ2l0IGEvTGliL2Z0cGxpYi5weSBiL0xpYi9mdHBsaWIucHkKaW5kZXggNWU3NWU2ZC4uMWQzYmQ5ZSAxMDA2NDQKLS0tIGEvTGliL2Z0cGxpYi5weQorKysgYi9MaWIvZnRwbGliLnB5CkBAIC0zOSw5ICszOSwxMCBAQAogaW1wb3J0IG9zCiBpbXBvcnQgc3lzCiBpbXBvcnQgc29ja2V0CitpbXBvcnQgd2FybmluZ3MKIGZyb20gc29ja2V0IGltcG9ydCBfR0xPQkFMX0RFRkFVTFRfVElNRU9VVAogCi1fX2FsbF9fID0gWyJGVFAiLCJOZXRyYyJdCitfX2FsbF9fID0gWyJGVFAiLCAiTmV0cmMiXQogCiAjIE1hZ2ljIG51bWJlciBmcm9tIDxzb2NrZXQuaD4KIE1TR19PT0IgPSAweDEgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFByb2Nlc3MgZGF0YSBvdXQgb2YgYmFuZApAQCAtNjMsNyArNjQsNyBAQAogCiAjIEFsbCBleGNlcHRpb25zIChob3BlZnVsbHkpIHRoYXQgbWF5IGJlIHJhaXNlZCBoZXJlIGFuZCB0aGF0IGFyZW4ndAogIyAoYWx3YXlzKSBwcm9ncmFtbWluZyBlcnJvcnMgb24gb3VyIHNpZGUKLWFsbF9lcnJvcnMgPSAoRXJyb3IsIElPRXJyb3IsIEVPRkVycm9yKQorYWxsX2Vycm9ycyA9IChFcnJvciwgT1NFcnJvciwgRU9GRXJyb3IpCiAKIAogIyBMaW5lIHRlcm1pbmF0b3JzICh3ZSBhbHdheXMgb3V0cHV0IENSTEYsIGJ1dCBhY2NlcHQgYW55IG9mIENSTEYsIENSLCBMRikKQEAgLTEyNiw3ICsxMjcsNyBAQAogICAgICAgICBpZiBzZWxmLnNvY2sgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc2VsZi5xdWl0KCkKLSAgICAgICAgICAgIGV4Y2VwdCAoc29ja2V0LmVycm9yLCBFT0ZFcnJvcik6CisgICAgICAgICAgICBleGNlcHQgKE9TRXJyb3IsIEVPRkVycm9yKToKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgICAgIGlmIHNlbGYuc29jayBpcyBub3QgTm9uZToKQEAgLTEzNiw2ICsxMzcsNyBAQAogICAgICAgICAnJydDb25uZWN0IHRvIGhvc3QuICBBcmd1bWVudHMgYXJlOgogICAgICAgICAgLSBob3N0OiBob3N0bmFtZSB0byBjb25uZWN0IHRvIChzdHJpbmcsIGRlZmF1bHQgcHJldmlvdXMgaG9zdCkKICAgICAgICAgIC0gcG9ydDogcG9ydCB0byBjb25uZWN0IHRvIChpbnRlZ2VyLCBkZWZhdWx0IHByZXZpb3VzIHBvcnQpCisgICAgICAgICAtIHRpbWVvdXQ6IHRoZSB0aW1lb3V0IHRvIHNldCBhZ2FpbnN0IHRoZSBmdHAgc29ja2V0KHMpCiAgICAgICAgICAtIHNvdXJjZV9hZGRyZXNzOiBhIDItdHVwbGUgKGhvc3QsIHBvcnQpIGZvciB0aGUgc29ja2V0IHRvIGJpbmQKICAgICAgICAgICAgdG8gYXMgaXRzIHNvdXJjZSBhZGRyZXNzIGJlZm9yZSBjb25uZWN0aW5nLgogICAgICAgICAnJycKQEAgLTE4Niw3ICsxODgsOCBAQAogICAgICMgSW50ZXJuYWw6IHNlbmQgb25lIGxpbmUgdG8gdGhlIHNlcnZlciwgYXBwZW5kaW5nIENSTEYKICAgICBkZWYgcHV0bGluZShzZWxmLCBsaW5lKToKICAgICAgICAgbGluZSA9IGxpbmUgKyBDUkxGCi0gICAgICAgIGlmIHNlbGYuZGVidWdnaW5nID4gMTogcHJpbnQoJypwdXQqJywgc2VsZi5zYW5pdGl6ZShsaW5lKSkKKyAgICAgICAgaWYgc2VsZi5kZWJ1Z2dpbmcgPiAxOgorICAgICAgICAgICAgcHJpbnQoJypwdXQqJywgc2VsZi5zYW5pdGl6ZShsaW5lKSkKICAgICAgICAgc2VsZi5zb2NrLnNlbmRhbGwobGluZS5lbmNvZGUoc2VsZi5lbmNvZGluZykpCiAKICAgICAjIEludGVybmFsOiBzZW5kIG9uZSBjb21tYW5kIHRvIHRoZSBzZXJ2ZXIgKHRocm91Z2ggcHV0bGluZSgpKQpAQCAtMjAyLDkgKzIwNSwxMiBAQAogICAgICAgICAgICAgcmFpc2UgRXJyb3IoImdvdCBtb3JlIHRoYW4gJWQgYnl0ZXMiICUgc2VsZi5tYXhsaW5lKQogICAgICAgICBpZiBzZWxmLmRlYnVnZ2luZyA+IDE6CiAgICAgICAgICAgICBwcmludCgnKmdldConLCBzZWxmLnNhbml0aXplKGxpbmUpKQotICAgICAgICBpZiBub3QgbGluZTogcmFpc2UgRU9GRXJyb3IKLSAgICAgICAgaWYgbGluZVstMjpdID09IENSTEY6IGxpbmUgPSBsaW5lWzotMl0KLSAgICAgICAgZWxpZiBsaW5lWy0xOl0gaW4gQ1JMRjogbGluZSA9IGxpbmVbOi0xXQorICAgICAgICBpZiBub3QgbGluZToKKyAgICAgICAgICAgIHJhaXNlIEVPRkVycm9yCisgICAgICAgIGlmIGxpbmVbLTI6XSA9PSBDUkxGOgorICAgICAgICAgICAgbGluZSA9IGxpbmVbOi0yXQorICAgICAgICBlbGlmIGxpbmVbLTE6XSBpbiBDUkxGOgorICAgICAgICAgICAgbGluZSA9IGxpbmVbOi0xXQogICAgICAgICByZXR1cm4gbGluZQogCiAgICAgIyBJbnRlcm5hbDogZ2V0IGEgcmVzcG9uc2UgZnJvbSB0aGUgc2VydmVyLCB3aGljaCBtYXkgcG9zc2libHkKQEAgLTIyNyw3ICsyMzMsOCBAQAogICAgICMgUmFpc2UgdmFyaW91cyBlcnJvcnMgaWYgdGhlIHJlc3BvbnNlIGluZGljYXRlcyBhbiBlcnJvcgogICAgIGRlZiBnZXRyZXNwKHNlbGYpOgogICAgICAgICByZXNwID0gc2VsZi5nZXRtdWx0aWxpbmUoKQotICAgICAgICBpZiBzZWxmLmRlYnVnZ2luZzogcHJpbnQoJypyZXNwKicsIHNlbGYuc2FuaXRpemUocmVzcCkpCisgICAgICAgIGlmIHNlbGYuZGVidWdnaW5nOgorICAgICAgICAgICAgcHJpbnQoJypyZXNwKicsIHNlbGYuc2FuaXRpemUocmVzcCkpCiAgICAgICAgIHNlbGYubGFzdHJlc3AgPSByZXNwWzozXQogICAgICAgICBjID0gcmVzcFs6MV0KICAgICAgICAgaWYgYyBpbiB7JzEnLCAnMicsICczJ306CkBAIC0yNTEsNyArMjU4LDggQEAKICAgICAgICAgSVAgYW5kIFN5bmNoOyB0aGF0IGRvZXNuJ3Qgc2VlbSB0byB3b3JrIHdpdGggdGhlIHNlcnZlcnMgSSd2ZQogICAgICAgICB0cmllZC4gIEluc3RlYWQsIGp1c3Qgc2VuZCB0aGUgQUJPUiBjb21tYW5kIGFzIE9PQiBkYXRhLicnJwogICAgICAgICBsaW5lID0gYidBQk9SJyArIEJfQ1JMRgotICAgICAgICBpZiBzZWxmLmRlYnVnZ2luZyA+IDE6IHByaW50KCcqcHV0IHVyZ2VudConLCBzZWxmLnNhbml0aXplKGxpbmUpKQorICAgICAgICBpZiBzZWxmLmRlYnVnZ2luZyA+IDE6CisgICAgICAgICAgICBwcmludCgnKnB1dCB1cmdlbnQqJywgc2VsZi5zYW5pdGl6ZShsaW5lKSkKICAgICAgICAgc2VsZi5zb2NrLnNlbmRhbGwobGluZSwgTVNHX09PQikKICAgICAgICAgcmVzcCA9IHNlbGYuZ2V0bXVsdGlsaW5lKCkKICAgICAgICAgaWYgcmVzcFs6M10gbm90IGluIHsnNDI2JywgJzIyNScsICcyMjYnfToKQEAgLTI3OSw3ICsyODcsNyBAQAogICAgICAgICByZXR1cm4gc2VsZi52b2lkY21kKGNtZCkKIAogICAgIGRlZiBzZW5kZXBydChzZWxmLCBob3N0LCBwb3J0KToKLSAgICAgICAgJycnU2VuZCBhIEVQUlQgY29tbWFuZCB3aXRoIHRoZSBjdXJyZW50IGhvc3QgYW5kIHRoZSBnaXZlbiBwb3J0IG51bWJlci4nJycKKyAgICAgICAgJycnU2VuZCBhbiBFUFJUIGNvbW1hbmQgd2l0aCB0aGUgY3VycmVudCBob3N0IGFuZCB0aGUgZ2l2ZW4gcG9ydCBudW1iZXIuJycnCiAgICAgICAgIGFmID0gMAogICAgICAgICBpZiBzZWxmLmFmID09IHNvY2tldC5BRl9JTkVUOgogICAgICAgICAgICAgYWYgPSAxCkBAIC0zMDAsNyArMzA4LDcgQEAKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldChhZiwgc29ja3R5cGUsIHByb3RvKQogICAgICAgICAgICAgICAgIHNvY2suYmluZChzYSkKLSAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgXzoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIF86CiAgICAgICAgICAgICAgICAgZXJyID0gXwogICAgICAgICAgICAgICAgIGlmIHNvY2s6CiAgICAgICAgICAgICAgICAgICAgIHNvY2suY2xvc2UoKQpAQCAtMzExLDggKzMxOSw3IEBACiAgICAgICAgICAgICBpZiBlcnIgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAgcmFpc2UgZXJyCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJhaXNlIHNvY2tldC5lcnJvcigiZ2V0YWRkcmluZm8gcmV0dXJucyBhbiBlbXB0eSBsaXN0IikKLSAgICAgICAgICAgIHJhaXNlIHNvY2tldC5lcnJvcihtc2cpCisgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigiZ2V0YWRkcmluZm8gcmV0dXJucyBhbiBlbXB0eSBsaXN0IikKICAgICAgICAgc29jay5saXN0ZW4oMSkKICAgICAgICAgcG9ydCA9IHNvY2suZ2V0c29ja25hbWUoKVsxXSAjIEdldCBwcm9wZXIgcG9ydAogICAgICAgICBob3N0ID0gc2VsZi5zb2NrLmdldHNvY2tuYW1lKClbMF0gIyBHZXQgcHJvcGVyIGhvc3QKQEAgLTM5Miw5ICszOTksMTIgQEAKIAogICAgIGRlZiBsb2dpbihzZWxmLCB1c2VyID0gJycsIHBhc3N3ZCA9ICcnLCBhY2N0ID0gJycpOgogICAgICAgICAnJydMb2dpbiwgZGVmYXVsdCBhbm9ueW1vdXMuJycnCi0gICAgICAgIGlmIG5vdCB1c2VyOiB1c2VyID0gJ2Fub255bW91cycKLSAgICAgICAgaWYgbm90IHBhc3N3ZDogcGFzc3dkID0gJycKLSAgICAgICAgaWYgbm90IGFjY3Q6IGFjY3QgPSAnJworICAgICAgICBpZiBub3QgdXNlcjoKKyAgICAgICAgICAgIHVzZXIgPSAnYW5vbnltb3VzJworICAgICAgICBpZiBub3QgcGFzc3dkOgorICAgICAgICAgICAgcGFzc3dkID0gJycKKyAgICAgICAgaWYgbm90IGFjY3Q6CisgICAgICAgICAgICBhY2N0ID0gJycKICAgICAgICAgaWYgdXNlciA9PSAnYW5vbnltb3VzJyBhbmQgcGFzc3dkIGluIHsnJywgJy0nfToKICAgICAgICAgICAgICMgSWYgdGhlcmUgaXMgbm8gYW5vbnltb3VzIGZ0cCBwYXNzd29yZCBzcGVjaWZpZWQKICAgICAgICAgICAgICMgdGhlbiB3ZSdsbCBqdXN0IHVzZSBhbm9ueW1vdXNACkBAIC00MDUsOCArNDE1LDEwIEBACiAgICAgICAgICAgICAjICAgaG9zdCBvciBjb3VudHJ5LgogICAgICAgICAgICAgcGFzc3dkID0gcGFzc3dkICsgJ2Fub255bW91c0AnCiAgICAgICAgIHJlc3AgPSBzZWxmLnNlbmRjbWQoJ1VTRVIgJyArIHVzZXIpCi0gICAgICAgIGlmIHJlc3BbMF0gPT0gJzMnOiByZXNwID0gc2VsZi5zZW5kY21kKCdQQVNTICcgKyBwYXNzd2QpCi0gICAgICAgIGlmIHJlc3BbMF0gPT0gJzMnOiByZXNwID0gc2VsZi5zZW5kY21kKCdBQ0NUICcgKyBhY2N0KQorICAgICAgICBpZiByZXNwWzBdID09ICczJzoKKyAgICAgICAgICAgIHJlc3AgPSBzZWxmLnNlbmRjbWQoJ1BBU1MgJyArIHBhc3N3ZCkKKyAgICAgICAgaWYgcmVzcFswXSA9PSAnMyc6CisgICAgICAgICAgICByZXNwID0gc2VsZi5zZW5kY21kKCdBQ0NUICcgKyBhY2N0KQogICAgICAgICBpZiByZXNwWzBdICE9ICcyJzoKICAgICAgICAgICAgIHJhaXNlIGVycm9yX3JlcGx5KHJlc3ApCiAgICAgICAgIHJldHVybiByZXNwCkBAIC00MzIsNiArNDQ0LDkgQEAKICAgICAgICAgICAgICAgICBpZiBub3QgZGF0YToKICAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgICAgICBjYWxsYmFjayhkYXRhKQorICAgICAgICAgICAgIyBzaHV0ZG93biBzc2wgbGF5ZXIKKyAgICAgICAgICAgIGlmIF9TU0xTb2NrZXQgaXMgbm90IE5vbmUgYW5kIGlzaW5zdGFuY2UoY29ubiwgX1NTTFNvY2tldCk6CisgICAgICAgICAgICAgICAgY29ubi51bndyYXAoKQogICAgICAgICByZXR1cm4gc2VsZi52b2lkcmVzcCgpCiAKICAgICBkZWYgcmV0cmxpbmVzKHNlbGYsIGNtZCwgY2FsbGJhY2sgPSBOb25lKToKQEAgLTQ0Niw3ICs0NjEsOCBAQAogICAgICAgICBSZXR1cm5zOgogICAgICAgICAgIFRoZSByZXNwb25zZSBjb2RlLgogICAgICAgICAiIiIKLSAgICAgICAgaWYgY2FsbGJhY2sgaXMgTm9uZTogY2FsbGJhY2sgPSBwcmludF9saW5lCisgICAgICAgIGlmIGNhbGxiYWNrIGlzIE5vbmU6CisgICAgICAgICAgICBjYWxsYmFjayA9IHByaW50X2xpbmUKICAgICAgICAgcmVzcCA9IHNlbGYuc2VuZGNtZCgnVFlQRSBBJykKICAgICAgICAgd2l0aCBzZWxmLnRyYW5zZmVyY21kKGNtZCkgYXMgY29ubiwgXAogICAgICAgICAgICAgICAgICBjb25uLm1ha2VmaWxlKCdyJywgZW5jb2Rpbmc9c2VsZi5lbmNvZGluZykgYXMgZnA6CkBAIC00NTQsNyArNDcwLDggQEAKICAgICAgICAgICAgICAgICBsaW5lID0gZnAucmVhZGxpbmUoc2VsZi5tYXhsaW5lICsgMSkKICAgICAgICAgICAgICAgICBpZiBsZW4obGluZSkgPiBzZWxmLm1heGxpbmU6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEVycm9yKCJnb3QgbW9yZSB0aGFuICVkIGJ5dGVzIiAlIHNlbGYubWF4bGluZSkKLSAgICAgICAgICAgICAgICBpZiBzZWxmLmRlYnVnZ2luZyA+IDI6IHByaW50KCcqcmV0cionLCByZXByKGxpbmUpKQorICAgICAgICAgICAgICAgIGlmIHNlbGYuZGVidWdnaW5nID4gMjoKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoJypyZXRyKicsIHJlcHIobGluZSkpCiAgICAgICAgICAgICAgICAgaWYgbm90IGxpbmU6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICAgICAgaWYgbGluZVstMjpdID09IENSTEY6CkBAIC00NjIsNiArNDc5LDkgQEAKICAgICAgICAgICAgICAgICBlbGlmIGxpbmVbLTE6XSA9PSAnXG4nOgogICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZVs6LTFdCiAgICAgICAgICAgICAgICAgY2FsbGJhY2sobGluZSkKKyAgICAgICAgICAgICMgc2h1dGRvd24gc3NsIGxheWVyCisgICAgICAgICAgICBpZiBfU1NMU29ja2V0IGlzIG5vdCBOb25lIGFuZCBpc2luc3RhbmNlKGNvbm4sIF9TU0xTb2NrZXQpOgorICAgICAgICAgICAgICAgIGNvbm4udW53cmFwKCkKICAgICAgICAgcmV0dXJuIHNlbGYudm9pZHJlc3AoKQogCiAgICAgZGVmIHN0b3JiaW5hcnkoc2VsZiwgY21kLCBmcCwgYmxvY2tzaXplPTgxOTIsIGNhbGxiYWNrPU5vbmUsIHJlc3Q9Tm9uZSk6CkBAIC00ODMsOSArNTAzLDE0IEBACiAgICAgICAgIHdpdGggc2VsZi50cmFuc2ZlcmNtZChjbWQsIHJlc3QpIGFzIGNvbm46CiAgICAgICAgICAgICB3aGlsZSAxOgogICAgICAgICAgICAgICAgIGJ1ZiA9IGZwLnJlYWQoYmxvY2tzaXplKQotICAgICAgICAgICAgICAgIGlmIG5vdCBidWY6IGJyZWFrCisgICAgICAgICAgICAgICAgaWYgbm90IGJ1ZjoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgICAgICBjb25uLnNlbmRhbGwoYnVmKQotICAgICAgICAgICAgICAgIGlmIGNhbGxiYWNrOiBjYWxsYmFjayhidWYpCisgICAgICAgICAgICAgICAgaWYgY2FsbGJhY2s6CisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGJ1ZikKKyAgICAgICAgICAgICMgc2h1dGRvd24gc3NsIGxheWVyCisgICAgICAgICAgICBpZiBfU1NMU29ja2V0IGlzIG5vdCBOb25lIGFuZCBpc2luc3RhbmNlKGNvbm4sIF9TU0xTb2NrZXQpOgorICAgICAgICAgICAgICAgIGNvbm4udW53cmFwKCkKICAgICAgICAgcmV0dXJuIHNlbGYudm9pZHJlc3AoKQogCiAgICAgZGVmIHN0b3JsaW5lcyhzZWxmLCBjbWQsIGZwLCBjYWxsYmFjaz1Ob25lKToKQEAgLTUwNiwxMiArNTMxLDE3IEBACiAgICAgICAgICAgICAgICAgYnVmID0gZnAucmVhZGxpbmUoc2VsZi5tYXhsaW5lICsgMSkKICAgICAgICAgICAgICAgICBpZiBsZW4oYnVmKSA+IHNlbGYubWF4bGluZToKICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRXJyb3IoImdvdCBtb3JlIHRoYW4gJWQgYnl0ZXMiICUgc2VsZi5tYXhsaW5lKQotICAgICAgICAgICAgICAgIGlmIG5vdCBidWY6IGJyZWFrCisgICAgICAgICAgICAgICAgaWYgbm90IGJ1ZjoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgICAgICBpZiBidWZbLTI6XSAhPSBCX0NSTEY6CiAgICAgICAgICAgICAgICAgICAgIGlmIGJ1ZlstMV0gaW4gQl9DUkxGOiBidWYgPSBidWZbOi0xXQogICAgICAgICAgICAgICAgICAgICBidWYgPSBidWYgKyBCX0NSTEYKICAgICAgICAgICAgICAgICBjb25uLnNlbmRhbGwoYnVmKQotICAgICAgICAgICAgICAgIGlmIGNhbGxiYWNrOiBjYWxsYmFjayhidWYpCisgICAgICAgICAgICAgICAgaWYgY2FsbGJhY2s6CisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGJ1ZikKKyAgICAgICAgICAgICMgc2h1dGRvd24gc3NsIGxheWVyCisgICAgICAgICAgICBpZiBfU1NMU29ja2V0IGlzIG5vdCBOb25lIGFuZCBpc2luc3RhbmNlKGNvbm4sIF9TU0xTb2NrZXQpOgorICAgICAgICAgICAgICAgIGNvbm4udW53cmFwKCkKICAgICAgICAgcmV0dXJuIHNlbGYudm9pZHJlc3AoKQogCiAgICAgZGVmIGFjY3Qoc2VsZiwgcGFzc3dvcmQpOgpAQCAtNjM3LDE3ICs2NjcsMjQgQEAKIAogICAgIGRlZiBjbG9zZShzZWxmKToKICAgICAgICAgJycnQ2xvc2UgdGhlIGNvbm5lY3Rpb24gd2l0aG91dCBhc3N1bWluZyBhbnl0aGluZyBhYm91dCBpdC4nJycKLSAgICAgICAgaWYgc2VsZi5maWxlIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgc2VsZi5maWxlLmNsb3NlKCkKLSAgICAgICAgaWYgc2VsZi5zb2NrIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgc2VsZi5zb2NrLmNsb3NlKCkKLSAgICAgICAgc2VsZi5maWxlID0gc2VsZi5zb2NrID0gTm9uZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmaWxlID0gc2VsZi5maWxlCisgICAgICAgICAgICBzZWxmLmZpbGUgPSBOb25lCisgICAgICAgICAgICBpZiBmaWxlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGZpbGUuY2xvc2UoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc29jayA9IHNlbGYuc29jaworICAgICAgICAgICAgc2VsZi5zb2NrID0gTm9uZQorICAgICAgICAgICAgaWYgc29jayBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBzb2NrLmNsb3NlKCkKIAogdHJ5OgogICAgIGltcG9ydCBzc2wKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICBwYXNzCisgICAgX1NTTFNvY2tldCA9IE5vbmUKIGVsc2U6CisgICAgX1NTTFNvY2tldCA9IHNzbC5TU0xTb2NrZXQKKwogICAgIGNsYXNzIEZUUF9UTFMoRlRQKToKICAgICAgICAgJycnQSBGVFAgc3ViY2xhc3Mgd2hpY2ggYWRkcyBUTFMgc3VwcG9ydCB0byBGVFAgYXMgZGVzY3JpYmVkCiAgICAgICAgIGluIFJGQy00MjE3LgpAQCAtNjgxLDcgKzcxOCw3IEBACiAgICAgICAgICcyMjEgR29vZGJ5ZS4nCiAgICAgICAgID4+PgogICAgICAgICAnJycKLSAgICAgICAgc3NsX3ZlcnNpb24gPSBzc2wuUFJPVE9DT0xfVExTdjEKKyAgICAgICAgc3NsX3ZlcnNpb24gPSBzc2wuUFJPVE9DT0xfU1NMdjIzCiAKICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGhvc3Q9JycsIHVzZXI9JycsIHBhc3N3ZD0nJywgYWNjdD0nJywga2V5ZmlsZT1Ob25lLAogICAgICAgICAgICAgICAgICAgICAgY2VydGZpbGU9Tm9uZSwgY29udGV4dD1Ob25lLApAQCAtNjk0LDYgKzczMSwxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2x1c2l2ZSIpCiAgICAgICAgICAgICBzZWxmLmtleWZpbGUgPSBrZXlmaWxlCiAgICAgICAgICAgICBzZWxmLmNlcnRmaWxlID0gY2VydGZpbGUKKyAgICAgICAgICAgIGlmIGNvbnRleHQgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBjb250ZXh0ID0gc3NsLl9jcmVhdGVfc3RkbGliX2NvbnRleHQoc2VsZi5zc2xfdmVyc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydGZpbGU9Y2VydGZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleWZpbGU9a2V5ZmlsZSkKICAgICAgICAgICAgIHNlbGYuY29udGV4dCA9IGNvbnRleHQKICAgICAgICAgICAgIHNlbGYuX3Byb3RfcCA9IEZhbHNlCiAgICAgICAgICAgICBGVFAuX19pbml0X18oc2VsZiwgaG9zdCwgdXNlciwgcGFzc3dkLCBhY2N0LCB0aW1lb3V0LCBzb3VyY2VfYWRkcmVzcykKQEAgLTcwNywxNiArNzQ4LDEyIEBACiAgICAgICAgICAgICAnJydTZXQgdXAgc2VjdXJlIGNvbnRyb2wgY29ubmVjdGlvbiBieSB1c2luZyBUTFMvU1NMLicnJwogICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShzZWxmLnNvY2ssIHNzbC5TU0xTb2NrZXQpOgogICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkFscmVhZHkgdXNpbmcgVExTIikKLSAgICAgICAgICAgIGlmIHNlbGYuc3NsX3ZlcnNpb24gPT0gc3NsLlBST1RPQ09MX1RMU3YxOgorICAgICAgICAgICAgaWYgc2VsZi5zc2xfdmVyc2lvbiA+PSBzc2wuUFJPVE9DT0xfU1NMdjIzOgogICAgICAgICAgICAgICAgIHJlc3AgPSBzZWxmLnZvaWRjbWQoJ0FVVEggVExTJykKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcmVzcCA9IHNlbGYudm9pZGNtZCgnQVVUSCBTU0wnKQotICAgICAgICAgICAgaWYgc2VsZi5jb250ZXh0IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgIHNlbGYuc29jayA9IHNlbGYuY29udGV4dC53cmFwX3NvY2tldChzZWxmLnNvY2spCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuc29jayA9IHNzbC53cmFwX3NvY2tldChzZWxmLnNvY2ssIHNlbGYua2V5ZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jZXJ0ZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsX3ZlcnNpb249c2VsZi5zc2xfdmVyc2lvbikKKyAgICAgICAgICAgIHNlbGYuc29jayA9IHNlbGYuY29udGV4dC53cmFwX3NvY2tldChzZWxmLnNvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX2hvc3RuYW1lPXNlbGYuaG9zdCkKICAgICAgICAgICAgIHNlbGYuZmlsZSA9IHNlbGYuc29jay5tYWtlZmlsZShtb2RlPSdyJywgZW5jb2Rpbmc9c2VsZi5lbmNvZGluZykKICAgICAgICAgICAgIHJldHVybiByZXNwCiAKQEAgLTc1NSw4MCArNzkyLDEwIEBACiAgICAgICAgIGRlZiBudHJhbnNmZXJjbWQoc2VsZiwgY21kLCByZXN0PU5vbmUpOgogICAgICAgICAgICAgY29ubiwgc2l6ZSA9IEZUUC5udHJhbnNmZXJjbWQoc2VsZiwgY21kLCByZXN0KQogICAgICAgICAgICAgaWYgc2VsZi5fcHJvdF9wOgotICAgICAgICAgICAgICAgIGlmIHNlbGYuY29udGV4dCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgY29ubiA9IHNlbGYuY29udGV4dC53cmFwX3NvY2tldChjb25uKQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIGNvbm4gPSBzc2wud3JhcF9zb2NrZXQoY29ubiwgc2VsZi5rZXlmaWxlLCBzZWxmLmNlcnRmaWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbF92ZXJzaW9uPXNlbGYuc3NsX3ZlcnNpb24pCisgICAgICAgICAgICAgICAgY29ubiA9IHNlbGYuY29udGV4dC53cmFwX3NvY2tldChjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX2hvc3RuYW1lPXNlbGYuaG9zdCkKICAgICAgICAgICAgIHJldHVybiBjb25uLCBzaXplCiAKLSAgICAgICAgZGVmIHJldHJiaW5hcnkoc2VsZiwgY21kLCBjYWxsYmFjaywgYmxvY2tzaXplPTgxOTIsIHJlc3Q9Tm9uZSk6Ci0gICAgICAgICAgICBzZWxmLnZvaWRjbWQoJ1RZUEUgSScpCi0gICAgICAgICAgICB3aXRoIHNlbGYudHJhbnNmZXJjbWQoY21kLCByZXN0KSBhcyBjb25uOgotICAgICAgICAgICAgICAgIHdoaWxlIDE6Ci0gICAgICAgICAgICAgICAgICAgIGRhdGEgPSBjb25uLnJlY3YoYmxvY2tzaXplKQotICAgICAgICAgICAgICAgICAgICBpZiBub3QgZGF0YToKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGRhdGEpCi0gICAgICAgICAgICAgICAgIyBzaHV0ZG93biBzc2wgbGF5ZXIKLSAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGNvbm4sIHNzbC5TU0xTb2NrZXQpOgotICAgICAgICAgICAgICAgICAgICBjb25uLnVud3JhcCgpCi0gICAgICAgICAgICByZXR1cm4gc2VsZi52b2lkcmVzcCgpCi0KLSAgICAgICAgZGVmIHJldHJsaW5lcyhzZWxmLCBjbWQsIGNhbGxiYWNrID0gTm9uZSk6Ci0gICAgICAgICAgICBpZiBjYWxsYmFjayBpcyBOb25lOiBjYWxsYmFjayA9IHByaW50X2xpbmUKLSAgICAgICAgICAgIHJlc3AgPSBzZWxmLnNlbmRjbWQoJ1RZUEUgQScpCi0gICAgICAgICAgICBjb25uID0gc2VsZi50cmFuc2ZlcmNtZChjbWQpCi0gICAgICAgICAgICBmcCA9IGNvbm4ubWFrZWZpbGUoJ3InLCBlbmNvZGluZz1zZWxmLmVuY29kaW5nKQotICAgICAgICAgICAgd2l0aCBmcCwgY29ubjoKLSAgICAgICAgICAgICAgICB3aGlsZSAxOgotICAgICAgICAgICAgICAgICAgICBsaW5lID0gZnAucmVhZGxpbmUoc2VsZi5tYXhsaW5lICsgMSkKLSAgICAgICAgICAgICAgICAgICAgaWYgbGVuKGxpbmUpID4gc2VsZi5tYXhsaW5lOgotICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRXJyb3IoImdvdCBtb3JlIHRoYW4gJWQgYnl0ZXMiICUgc2VsZi5tYXhsaW5lKQotICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmRlYnVnZ2luZyA+IDI6IHByaW50KCcqcmV0cionLCByZXByKGxpbmUpKQotICAgICAgICAgICAgICAgICAgICBpZiBub3QgbGluZToKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgICAgIGlmIGxpbmVbLTI6XSA9PSBDUkxGOgotICAgICAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmVbOi0yXQotICAgICAgICAgICAgICAgICAgICBlbGlmIGxpbmVbLTE6XSA9PSAnXG4nOgotICAgICAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmVbOi0xXQotICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhsaW5lKQotICAgICAgICAgICAgICAgICMgc2h1dGRvd24gc3NsIGxheWVyCi0gICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShjb25uLCBzc2wuU1NMU29ja2V0KToKLSAgICAgICAgICAgICAgICAgICAgY29ubi51bndyYXAoKQotICAgICAgICAgICAgcmV0dXJuIHNlbGYudm9pZHJlc3AoKQotCi0gICAgICAgIGRlZiBzdG9yYmluYXJ5KHNlbGYsIGNtZCwgZnAsIGJsb2Nrc2l6ZT04MTkyLCBjYWxsYmFjaz1Ob25lLCByZXN0PU5vbmUpOgotICAgICAgICAgICAgc2VsZi52b2lkY21kKCdUWVBFIEknKQotICAgICAgICAgICAgd2l0aCBzZWxmLnRyYW5zZmVyY21kKGNtZCwgcmVzdCkgYXMgY29ubjoKLSAgICAgICAgICAgICAgICB3aGlsZSAxOgotICAgICAgICAgICAgICAgICAgICBidWYgPSBmcC5yZWFkKGJsb2Nrc2l6ZSkKLSAgICAgICAgICAgICAgICAgICAgaWYgbm90IGJ1ZjogYnJlYWsKLSAgICAgICAgICAgICAgICAgICAgY29ubi5zZW5kYWxsKGJ1ZikKLSAgICAgICAgICAgICAgICAgICAgaWYgY2FsbGJhY2s6IGNhbGxiYWNrKGJ1ZikKLSAgICAgICAgICAgICAgICAjIHNodXRkb3duIHNzbCBsYXllcgotICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoY29ubiwgc3NsLlNTTFNvY2tldCk6Ci0gICAgICAgICAgICAgICAgICAgIGNvbm4udW53cmFwKCkKLSAgICAgICAgICAgIHJldHVybiBzZWxmLnZvaWRyZXNwKCkKLQotICAgICAgICBkZWYgc3RvcmxpbmVzKHNlbGYsIGNtZCwgZnAsIGNhbGxiYWNrPU5vbmUpOgotICAgICAgICAgICAgc2VsZi52b2lkY21kKCdUWVBFIEEnKQotICAgICAgICAgICAgd2l0aCBzZWxmLnRyYW5zZmVyY21kKGNtZCkgYXMgY29ubjoKLSAgICAgICAgICAgICAgICB3aGlsZSAxOgotICAgICAgICAgICAgICAgICAgICBidWYgPSBmcC5yZWFkbGluZShzZWxmLm1heGxpbmUgKyAxKQotICAgICAgICAgICAgICAgICAgICBpZiBsZW4oYnVmKSA+IHNlbGYubWF4bGluZToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEVycm9yKCJnb3QgbW9yZSB0aGFuICVkIGJ5dGVzIiAlIHNlbGYubWF4bGluZSkKLSAgICAgICAgICAgICAgICAgICAgaWYgbm90IGJ1ZjogYnJlYWsKLSAgICAgICAgICAgICAgICAgICAgaWYgYnVmWy0yOl0gIT0gQl9DUkxGOgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgYnVmWy0xXSBpbiBCX0NSTEY6IGJ1ZiA9IGJ1Zls6LTFdCi0gICAgICAgICAgICAgICAgICAgICAgICBidWYgPSBidWYgKyBCX0NSTEYKLSAgICAgICAgICAgICAgICAgICAgY29ubi5zZW5kYWxsKGJ1ZikKLSAgICAgICAgICAgICAgICAgICAgaWYgY2FsbGJhY2s6IGNhbGxiYWNrKGJ1ZikKLSAgICAgICAgICAgICAgICAjIHNodXRkb3duIHNzbCBsYXllcgotICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoY29ubiwgc3NsLlNTTFNvY2tldCk6Ci0gICAgICAgICAgICAgICAgICAgIGNvbm4udW53cmFwKCkKLSAgICAgICAgICAgIHJldHVybiBzZWxmLnZvaWRyZXNwKCkKLQogICAgICAgICBkZWYgYWJvcnQoc2VsZik6CiAgICAgICAgICAgICAjIG92ZXJyaWRkZW4gYXMgd2UgY2FuJ3QgcGFzcyBNU0dfT09CIGZsYWcgdG8gc2VuZGFsbCgpCiAgICAgICAgICAgICBsaW5lID0gYidBQk9SJyArIEJfQ1JMRgpAQCAtODM5LDcgKzgwNiw3IEBACiAgICAgICAgICAgICByZXR1cm4gcmVzcAogCiAgICAgX19hbGxfXy5hcHBlbmQoJ0ZUUF9UTFMnKQotICAgIGFsbF9lcnJvcnMgPSAoRXJyb3IsIElPRXJyb3IsIEVPRkVycm9yLCBzc2wuU1NMRXJyb3IpCisgICAgYWxsX2Vycm9ycyA9IChFcnJvciwgT1NFcnJvciwgRU9GRXJyb3IsIHNzbC5TU0xFcnJvcikKIAogCiBfMTUwX3JlID0gTm9uZQpAQCAtODg1LDcgKzg1Miw3IEBACiAKIAogZGVmIHBhcnNlMjI5KHJlc3AsIHBlZXIpOgotICAgICcnJ1BhcnNlIHRoZSAnMjI5JyByZXNwb25zZSBmb3IgYSBFUFNWIHJlcXVlc3QuCisgICAgJycnUGFyc2UgdGhlICcyMjknIHJlc3BvbnNlIGZvciBhbiBFUFNWIHJlcXVlc3QuCiAgICAgUmFpc2VzIGVycm9yX3Byb3RvIGlmIGl0IGRvZXMgbm90IGNvbnRhaW4gJyh8fHxwb3J0fCknCiAgICAgUmV0dXJuICgnaG9zdC5hZGRyLmFzLm51bWJlcnMnLCBwb3J0IykgdHVwbGUuJycnCiAKQEAgLTkzNiw3ICs5MDMsOCBAQAogCiBkZWYgZnRwY3Aoc291cmNlLCBzb3VyY2VuYW1lLCB0YXJnZXQsIHRhcmdldG5hbWUgPSAnJywgdHlwZSA9ICdJJyk6CiAgICAgJycnQ29weSBmaWxlIGZyb20gb25lIEZUUC1pbnN0YW5jZSB0byBhbm90aGVyLicnJwotICAgIGlmIG5vdCB0YXJnZXRuYW1lOiB0YXJnZXRuYW1lID0gc291cmNlbmFtZQorICAgIGlmIG5vdCB0YXJnZXRuYW1lOgorICAgICAgICB0YXJnZXRuYW1lID0gc291cmNlbmFtZQogICAgIHR5cGUgPSAnVFlQRSAnICsgdHlwZQogICAgIHNvdXJjZS52b2lkY21kKHR5cGUpCiAgICAgdGFyZ2V0LnZvaWRjbWQodHlwZSkKQEAgLTk0Niw5ICs5MTQsMTEgQEAKICAgICAjIHRyYW5zZmVyIHJlcXVlc3QuCiAgICAgIyBTbzogU1RPUiBiZWZvcmUgUkVUUiwgYmVjYXVzZSBoZXJlIHRoZSB0YXJnZXQgaXMgYSAidXNlciIuCiAgICAgdHJlcGx5ID0gdGFyZ2V0LnNlbmRjbWQoJ1NUT1IgJyArIHRhcmdldG5hbWUpCi0gICAgaWYgdHJlcGx5WzozXSBub3QgaW4geycxMjUnLCAnMTUwJ306IHJhaXNlIGVycm9yX3Byb3RvICAjIFJGQyA5NTkKKyAgICBpZiB0cmVwbHlbOjNdIG5vdCBpbiB7JzEyNScsICcxNTAnfToKKyAgICAgICAgcmFpc2UgZXJyb3JfcHJvdG8gICMgUkZDIDk1OQogICAgIHNyZXBseSA9IHNvdXJjZS5zZW5kY21kKCdSRVRSICcgKyBzb3VyY2VuYW1lKQotICAgIGlmIHNyZXBseVs6M10gbm90IGluIHsnMTI1JywgJzE1MCd9OiByYWlzZSBlcnJvcl9wcm90byAgIyBSRkMgOTU5CisgICAgaWYgc3JlcGx5WzozXSBub3QgaW4geycxMjUnLCAnMTUwJ306CisgICAgICAgIHJhaXNlIGVycm9yX3Byb3RvICAjIFJGQyA5NTkKICAgICBzb3VyY2Uudm9pZHJlc3AoKQogICAgIHRhcmdldC52b2lkcmVzcCgpCiAKQEAgLTk2NiwxOSArOTM2LDIyIEBACiAgICAgX19kZWZhY2N0ID0gTm9uZQogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVuYW1lPU5vbmUpOgorICAgICAgICB3YXJuaW5ncy53YXJuKCJUaGlzIGNsYXNzIGlzIGRlcHJlY2F0ZWQsIHVzZSB0aGUgbmV0cmMgbW9kdWxlIGluc3RlYWQiLAorICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgMikKICAgICAgICAgaWYgZmlsZW5hbWUgaXMgTm9uZToKICAgICAgICAgICAgIGlmICJIT01FIiBpbiBvcy5lbnZpcm9uOgogICAgICAgICAgICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5qb2luKG9zLmVudmlyb25bIkhPTUUiXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLm5ldHJjIikKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigic3BlY2lmeSBmaWxlIHRvIGxvYWQgb3Igc2V0ICRIT01FIikKKyAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJzcGVjaWZ5IGZpbGUgdG8gbG9hZCBvciBzZXQgJEhPTUUiKQogICAgICAgICBzZWxmLl9faG9zdHMgPSB7fQogICAgICAgICBzZWxmLl9fbWFjcm9zID0ge30KICAgICAgICAgZnAgPSBvcGVuKGZpbGVuYW1lLCAiciIpCiAgICAgICAgIGluX21hY3JvID0gMAogICAgICAgICB3aGlsZSAxOgogICAgICAgICAgICAgbGluZSA9IGZwLnJlYWRsaW5lKCkKLSAgICAgICAgICAgIGlmIG5vdCBsaW5lOiBicmVhaworICAgICAgICAgICAgaWYgbm90IGxpbmU6CisgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgIGlmIGluX21hY3JvIGFuZCBsaW5lLnN0cmlwKCk6CiAgICAgICAgICAgICAgICAgbWFjcm9fbGluZXMuYXBwZW5kKGxpbmUpCiAgICAgICAgICAgICAgICAgY29udGludWUKQEAgLTEwODcsNyArMTA2MCw3IEBACiAgICAgdXNlcmlkID0gcGFzc3dkID0gYWNjdCA9ICcnCiAgICAgdHJ5OgogICAgICAgICBuZXRyYyA9IE5ldHJjKHJjZmlsZSkKLSAgICBleGNlcHQgSU9FcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgaWYgcmNmaWxlIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiQ291bGQgbm90IG9wZW4gYWNjb3VudCBmaWxlIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIC0tIHVzaW5nIGFub255bW91cyBsb2dpbi4iKQpkaWZmIC0tZ2l0IGEvTGliL2Z1bmN0b29scy5weSBiL0xpYi9mdW5jdG9vbHMucHkKaW5kZXggMDUzZTQ0ZS4uMmMyOTlkNyAxMDA2NDQKLS0tIGEvTGliL2Z1bmN0b29scy5weQorKysgYi9MaWIvZnVuY3Rvb2xzLnB5CkBAIC0zLDE2ICszLDI0IEBACiAjIFB5dGhvbiBtb2R1bGUgd3JhcHBlciBmb3IgX2Z1bmN0b29scyBDIG1vZHVsZQogIyB0byBhbGxvdyB1dGlsaXRpZXMgd3JpdHRlbiBpbiBQeXRob24gdG8gYmUgYWRkZWQKICMgdG8gdGhlIGZ1bmN0b29scyBtb2R1bGUuCi0jIFdyaXR0ZW4gYnkgTmljayBDb2dobGFuIDxuY29naGxhbiBhdCBnbWFpbC5jb20+Ci0jIGFuZCBSYXltb25kIEhldHRpbmdlciA8cHl0aG9uIGF0IHJjbi5jb20+Ci0jICAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTAgUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjIFdyaXR0ZW4gYnkgTmljayBDb2dobGFuIDxuY29naGxhbiBhdCBnbWFpbC5jb20+LAorIyBSYXltb25kIEhldHRpbmdlciA8cHl0aG9uIGF0IHJjbi5jb20+LAorIyBhbmQgxYF1a2FzeiBMYW5nYSA8bHVrYXN6IGF0IGxhbmdhLnBsPi4KKyMgICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxMyBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbi4KICMgU2VlIEMgc291cmNlIGNvZGUgZm9yIF9mdW5jdG9vbHMgY3JlZGl0cy9jb3B5cmlnaHQKIAogX19hbGxfXyA9IFsndXBkYXRlX3dyYXBwZXInLCAnd3JhcHMnLCAnV1JBUFBFUl9BU1NJR05NRU5UUycsICdXUkFQUEVSX1VQREFURVMnLAotICAgICAgICAgICAndG90YWxfb3JkZXJpbmcnLCAnY21wX3RvX2tleScsICdscnVfY2FjaGUnLCAncmVkdWNlJywgJ3BhcnRpYWwnXQorICAgICAgICAgICAndG90YWxfb3JkZXJpbmcnLCAnY21wX3RvX2tleScsICdscnVfY2FjaGUnLCAncmVkdWNlJywgJ3BhcnRpYWwnLAorICAgICAgICAgICAncGFydGlhbG1ldGhvZCcsICdzaW5nbGVkaXNwYXRjaCddCiAKLWZyb20gX2Z1bmN0b29scyBpbXBvcnQgcGFydGlhbCwgcmVkdWNlCit0cnk6CisgICAgZnJvbSBfZnVuY3Rvb2xzIGltcG9ydCByZWR1Y2UKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBwYXNzCitmcm9tIGFiYyBpbXBvcnQgZ2V0X2NhY2hlX3Rva2VuCiBmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBuYW1lZHR1cGxlCitmcm9tIHR5cGVzIGltcG9ydCBNYXBwaW5nUHJveHlUeXBlCitmcm9tIHdlYWtyZWYgaW1wb3J0IFdlYWtLZXlEaWN0aW9uYXJ5CiB0cnk6CiAgICAgZnJvbSBfdGhyZWFkIGltcG9ydCBSTG9jawogZXhjZXB0OgpAQCAtNDcsNyArNTUsNiBAQAogICAgICAgIGFyZSB1cGRhdGVkIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgYXR0cmlidXRlIGZyb20gdGhlIHdyYXBwZWQKICAgICAgICBmdW5jdGlvbiAoZGVmYXVsdHMgdG8gZnVuY3Rvb2xzLldSQVBQRVJfVVBEQVRFUykKICAgICAiIiIKLSAgICB3cmFwcGVyLl9fd3JhcHBlZF9fID0gd3JhcHBlZAogICAgIGZvciBhdHRyIGluIGFzc2lnbmVkOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICB2YWx1ZSA9IGdldGF0dHIod3JhcHBlZCwgYXR0cikKQEAgLTU3LDYgKzY0LDkgQEAKICAgICAgICAgICAgIHNldGF0dHIod3JhcHBlciwgYXR0ciwgdmFsdWUpCiAgICAgZm9yIGF0dHIgaW4gdXBkYXRlZDoKICAgICAgICAgZ2V0YXR0cih3cmFwcGVyLCBhdHRyKS51cGRhdGUoZ2V0YXR0cih3cmFwcGVkLCBhdHRyLCB7fSkpCisgICAgIyBJc3N1ZSAjMTc0ODI6IHNldCBfX3dyYXBwZWRfXyBsYXN0IHNvIHdlIGRvbid0IGluYWR2ZXJ0ZW50bHkgY29weSBpdAorICAgICMgZnJvbSB0aGUgd3JhcHBlZCBmdW5jdGlvbiB3aGVuIHVwZGF0aW5nIF9fZGljdF9fCisgICAgd3JhcHBlci5fX3dyYXBwZWRfXyA9IHdyYXBwZWQKICAgICAjIFJldHVybiB0aGUgd3JhcHBlciBzbyB0aGlzIGNhbiBiZSB1c2VkIGFzIGEgZGVjb3JhdG9yIHZpYSBwYXJ0aWFsKCkKICAgICByZXR1cm4gd3JhcHBlcgogCkBAIC03OSwyMSArODksMTA2IEBACiAjIyMgdG90YWxfb3JkZXJpbmcgY2xhc3MgZGVjb3JhdG9yCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCisjIFRoZSB0b3RhbCBvcmRlcmluZyBmdW5jdGlvbnMgYWxsIGludm9rZSB0aGUgcm9vdCBtYWdpYyBtZXRob2QgZGlyZWN0bHkKKyMgcmF0aGVyIHRoYW4gdXNpbmcgdGhlIGNvcnJlc3BvbmRpbmcgb3BlcmF0b3IuICBUaGlzIGF2b2lkcyBwb3NzaWJsZQorIyBpbmZpbml0ZSByZWN1cnNpb24gdGhhdCBjb3VsZCBvY2N1ciB3aGVuIHRoZSBvcGVyYXRvciBkaXNwYXRjaCBsb2dpYworIyBkZXRlY3RzIGEgTm90SW1wbGVtZW50ZWQgcmVzdWx0IGFuZCB0aGVuIGNhbGxzIGEgcmVmbGVjdGVkIG1ldGhvZC4KKworZGVmIF9ndF9mcm9tX2x0KHNlbGYsIG90aGVyKToKKyAgICAnUmV0dXJuIGEgPiBiLiAgQ29tcHV0ZWQgYnkgQHRvdGFsX29yZGVyaW5nIGZyb20gKG5vdCBhIDwgYikgYW5kIChhICE9IGIpLicKKyAgICBvcF9yZXN1bHQgPSBzZWxmLl9fbHRfXyhvdGhlcikKKyAgICBpZiBvcF9yZXN1bHQgaXMgTm90SW1wbGVtZW50ZWQ6CisgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgIHJldHVybiBub3Qgb3BfcmVzdWx0IGFuZCBzZWxmICE9IG90aGVyCisKK2RlZiBfbGVfZnJvbV9sdChzZWxmLCBvdGhlcik6CisgICAgJ1JldHVybiBhIDw9IGIuICBDb21wdXRlZCBieSBAdG90YWxfb3JkZXJpbmcgZnJvbSAoYSA8IGIpIG9yIChhID09IGIpLicKKyAgICBvcF9yZXN1bHQgPSBzZWxmLl9fbHRfXyhvdGhlcikKKyAgICByZXR1cm4gb3BfcmVzdWx0IG9yIHNlbGYgPT0gb3RoZXIKKworZGVmIF9nZV9mcm9tX2x0KHNlbGYsIG90aGVyKToKKyAgICAnUmV0dXJuIGEgPj0gYi4gIENvbXB1dGVkIGJ5IEB0b3RhbF9vcmRlcmluZyBmcm9tIChub3QgYSA8IGIpLicKKyAgICBvcF9yZXN1bHQgPSBzZWxmLl9fbHRfXyhvdGhlcikKKyAgICBpZiBvcF9yZXN1bHQgaXMgTm90SW1wbGVtZW50ZWQ6CisgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgIHJldHVybiBub3Qgb3BfcmVzdWx0CisKK2RlZiBfZ2VfZnJvbV9sZShzZWxmLCBvdGhlcik6CisgICAgJ1JldHVybiBhID49IGIuICBDb21wdXRlZCBieSBAdG90YWxfb3JkZXJpbmcgZnJvbSAobm90IGEgPD0gYikgb3IgKGEgPT0gYikuJworICAgIG9wX3Jlc3VsdCA9IHNlbGYuX19sZV9fKG90aGVyKQorICAgIGlmIG9wX3Jlc3VsdCBpcyBOb3RJbXBsZW1lbnRlZDoKKyAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgcmV0dXJuIG5vdCBvcF9yZXN1bHQgb3Igc2VsZiA9PSBvdGhlcgorCitkZWYgX2x0X2Zyb21fbGUoc2VsZiwgb3RoZXIpOgorICAgICdSZXR1cm4gYSA8IGIuICBDb21wdXRlZCBieSBAdG90YWxfb3JkZXJpbmcgZnJvbSAoYSA8PSBiKSBhbmQgKGEgIT0gYikuJworICAgIG9wX3Jlc3VsdCA9IHNlbGYuX19sZV9fKG90aGVyKQorICAgIGlmIG9wX3Jlc3VsdCBpcyBOb3RJbXBsZW1lbnRlZDoKKyAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgcmV0dXJuIG9wX3Jlc3VsdCBhbmQgc2VsZiAhPSBvdGhlcgorCitkZWYgX2d0X2Zyb21fbGUoc2VsZiwgb3RoZXIpOgorICAgICdSZXR1cm4gYSA+IGIuICBDb21wdXRlZCBieSBAdG90YWxfb3JkZXJpbmcgZnJvbSAobm90IGEgPD0gYikuJworICAgIG9wX3Jlc3VsdCA9IHNlbGYuX19sZV9fKG90aGVyKQorICAgIGlmIG9wX3Jlc3VsdCBpcyBOb3RJbXBsZW1lbnRlZDoKKyAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgcmV0dXJuIG5vdCBvcF9yZXN1bHQKKworZGVmIF9sdF9mcm9tX2d0KHNlbGYsIG90aGVyKToKKyAgICAnUmV0dXJuIGEgPCBiLiAgQ29tcHV0ZWQgYnkgQHRvdGFsX29yZGVyaW5nIGZyb20gKG5vdCBhID4gYikgYW5kIChhICE9IGIpLicKKyAgICBvcF9yZXN1bHQgPSBzZWxmLl9fZ3RfXyhvdGhlcikKKyAgICBpZiBvcF9yZXN1bHQgaXMgTm90SW1wbGVtZW50ZWQ6CisgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgIHJldHVybiBub3Qgb3BfcmVzdWx0IGFuZCBzZWxmICE9IG90aGVyCisKK2RlZiBfZ2VfZnJvbV9ndChzZWxmLCBvdGhlcik6CisgICAgJ1JldHVybiBhID49IGIuICBDb21wdXRlZCBieSBAdG90YWxfb3JkZXJpbmcgZnJvbSAoYSA+IGIpIG9yIChhID09IGIpLicKKyAgICBvcF9yZXN1bHQgPSBzZWxmLl9fZ3RfXyhvdGhlcikKKyAgICByZXR1cm4gb3BfcmVzdWx0IG9yIHNlbGYgPT0gb3RoZXIKKworZGVmIF9sZV9mcm9tX2d0KHNlbGYsIG90aGVyKToKKyAgICAnUmV0dXJuIGEgPD0gYi4gIENvbXB1dGVkIGJ5IEB0b3RhbF9vcmRlcmluZyBmcm9tIChub3QgYSA+IGIpLicKKyAgICBvcF9yZXN1bHQgPSBzZWxmLl9fZ3RfXyhvdGhlcikKKyAgICBpZiBvcF9yZXN1bHQgaXMgTm90SW1wbGVtZW50ZWQ6CisgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgIHJldHVybiBub3Qgb3BfcmVzdWx0CisKK2RlZiBfbGVfZnJvbV9nZShzZWxmLCBvdGhlcik6CisgICAgJ1JldHVybiBhIDw9IGIuICBDb21wdXRlZCBieSBAdG90YWxfb3JkZXJpbmcgZnJvbSAobm90IGEgPj0gYikgb3IgKGEgPT0gYikuJworICAgIG9wX3Jlc3VsdCA9IHNlbGYuX19nZV9fKG90aGVyKQorICAgIGlmIG9wX3Jlc3VsdCBpcyBOb3RJbXBsZW1lbnRlZDoKKyAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgcmV0dXJuIG5vdCBvcF9yZXN1bHQgb3Igc2VsZiA9PSBvdGhlcgorCitkZWYgX2d0X2Zyb21fZ2Uoc2VsZiwgb3RoZXIpOgorICAgICdSZXR1cm4gYSA+IGIuICBDb21wdXRlZCBieSBAdG90YWxfb3JkZXJpbmcgZnJvbSAoYSA+PSBiKSBhbmQgKGEgIT0gYikuJworICAgIG9wX3Jlc3VsdCA9IHNlbGYuX19nZV9fKG90aGVyKQorICAgIGlmIG9wX3Jlc3VsdCBpcyBOb3RJbXBsZW1lbnRlZDoKKyAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgcmV0dXJuIG9wX3Jlc3VsdCBhbmQgc2VsZiAhPSBvdGhlcgorCitkZWYgX2x0X2Zyb21fZ2Uoc2VsZiwgb3RoZXIpOgorICAgICdSZXR1cm4gYSA8IGIuICBDb21wdXRlZCBieSBAdG90YWxfb3JkZXJpbmcgZnJvbSAobm90IGEgPj0gYikuJworICAgIG9wX3Jlc3VsdCA9IHNlbGYuX19nZV9fKG90aGVyKQorICAgIGlmIG9wX3Jlc3VsdCBpcyBOb3RJbXBsZW1lbnRlZDoKKyAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgcmV0dXJuIG5vdCBvcF9yZXN1bHQKKwogZGVmIHRvdGFsX29yZGVyaW5nKGNscyk6CiAgICAgIiIiQ2xhc3MgZGVjb3JhdG9yIHRoYXQgZmlsbHMgaW4gbWlzc2luZyBvcmRlcmluZyBtZXRob2RzIiIiCiAgICAgY29udmVydCA9IHsKLSAgICAgICAgJ19fbHRfXyc6IFsoJ19fZ3RfXycsIGxhbWJkYSBzZWxmLCBvdGhlcjogbm90IChzZWxmIDwgb3RoZXIgb3Igc2VsZiA9PSBvdGhlcikpLAotICAgICAgICAgICAgICAgICAgICgnX19sZV9fJywgbGFtYmRhIHNlbGYsIG90aGVyOiBzZWxmIDwgb3RoZXIgb3Igc2VsZiA9PSBvdGhlciksCi0gICAgICAgICAgICAgICAgICAgKCdfX2dlX18nLCBsYW1iZGEgc2VsZiwgb3RoZXI6IG5vdCBzZWxmIDwgb3RoZXIpXSwKLSAgICAgICAgJ19fbGVfXyc6IFsoJ19fZ2VfXycsIGxhbWJkYSBzZWxmLCBvdGhlcjogbm90IHNlbGYgPD0gb3RoZXIgb3Igc2VsZiA9PSBvdGhlciksCi0gICAgICAgICAgICAgICAgICAgKCdfX2x0X18nLCBsYW1iZGEgc2VsZiwgb3RoZXI6IHNlbGYgPD0gb3RoZXIgYW5kIG5vdCBzZWxmID09IG90aGVyKSwKLSAgICAgICAgICAgICAgICAgICAoJ19fZ3RfXycsIGxhbWJkYSBzZWxmLCBvdGhlcjogbm90IHNlbGYgPD0gb3RoZXIpXSwKLSAgICAgICAgJ19fZ3RfXyc6IFsoJ19fbHRfXycsIGxhbWJkYSBzZWxmLCBvdGhlcjogbm90IChzZWxmID4gb3RoZXIgb3Igc2VsZiA9PSBvdGhlcikpLAotICAgICAgICAgICAgICAgICAgICgnX19nZV9fJywgbGFtYmRhIHNlbGYsIG90aGVyOiBzZWxmID4gb3RoZXIgb3Igc2VsZiA9PSBvdGhlciksCi0gICAgICAgICAgICAgICAgICAgKCdfX2xlX18nLCBsYW1iZGEgc2VsZiwgb3RoZXI6IG5vdCBzZWxmID4gb3RoZXIpXSwKLSAgICAgICAgJ19fZ2VfXyc6IFsoJ19fbGVfXycsIGxhbWJkYSBzZWxmLCBvdGhlcjogKG5vdCBzZWxmID49IG90aGVyKSBvciBzZWxmID09IG90aGVyKSwKLSAgICAgICAgICAgICAgICAgICAoJ19fZ3RfXycsIGxhbWJkYSBzZWxmLCBvdGhlcjogc2VsZiA+PSBvdGhlciBhbmQgbm90IHNlbGYgPT0gb3RoZXIpLAotICAgICAgICAgICAgICAgICAgICgnX19sdF9fJywgbGFtYmRhIHNlbGYsIG90aGVyOiBub3Qgc2VsZiA+PSBvdGhlcildCisgICAgICAgICdfX2x0X18nOiBbKCdfX2d0X18nLCBfZ3RfZnJvbV9sdCksCisgICAgICAgICAgICAgICAgICAgKCdfX2xlX18nLCBfbGVfZnJvbV9sdCksCisgICAgICAgICAgICAgICAgICAgKCdfX2dlX18nLCBfZ2VfZnJvbV9sdCldLAorICAgICAgICAnX19sZV9fJzogWygnX19nZV9fJywgX2dlX2Zyb21fbGUpLAorICAgICAgICAgICAgICAgICAgICgnX19sdF9fJywgX2x0X2Zyb21fbGUpLAorICAgICAgICAgICAgICAgICAgICgnX19ndF9fJywgX2d0X2Zyb21fbGUpXSwKKyAgICAgICAgJ19fZ3RfXyc6IFsoJ19fbHRfXycsIF9sdF9mcm9tX2d0KSwKKyAgICAgICAgICAgICAgICAgICAoJ19fZ2VfXycsIF9nZV9mcm9tX2d0KSwKKyAgICAgICAgICAgICAgICAgICAoJ19fbGVfXycsIF9sZV9mcm9tX2d0KV0sCisgICAgICAgICdfX2dlX18nOiBbKCdfX2xlX18nLCBfbGVfZnJvbV9nZSksCisgICAgICAgICAgICAgICAgICAgKCdfX2d0X18nLCBfZ3RfZnJvbV9nZSksCisgICAgICAgICAgICAgICAgICAgKCdfX2x0X18nLCBfbHRfZnJvbV9nZSldCiAgICAgfQogICAgICMgRmluZCB1c2VyLWRlZmluZWQgY29tcGFyaXNvbnMgKG5vdCB0aG9zZSBpbmhlcml0ZWQgZnJvbSBvYmplY3QpLgogICAgIHJvb3RzID0gW29wIGZvciBvcCBpbiBjb252ZXJ0IGlmIGdldGF0dHIoY2xzLCBvcCwgTm9uZSkgaXMgbm90IGdldGF0dHIob2JqZWN0LCBvcCwgTm9uZSldCkBAIC0xMDMsNyArMTk4LDYgQEAKICAgICBmb3Igb3BuYW1lLCBvcGZ1bmMgaW4gY29udmVydFtyb290XToKICAgICAgICAgaWYgb3BuYW1lIG5vdCBpbiByb290czoKICAgICAgICAgICAgIG9wZnVuYy5fX25hbWVfXyA9IG9wbmFtZQotICAgICAgICAgICAgb3BmdW5jLl9fZG9jX18gPSBnZXRhdHRyKGludCwgb3BuYW1lKS5fX2RvY19fCiAgICAgICAgICAgICBzZXRhdHRyKGNscywgb3BuYW1lLCBvcGZ1bmMpCiAgICAgcmV0dXJuIGNscwogCkBAIC0xNDAsNiArMjM0LDEwNCBAQAogCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMgcGFydGlhbCgpIGFyZ3VtZW50IGFwcGxpY2F0aW9uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIFB1cmVseSBmdW5jdGlvbmFsLCBubyBkZXNjcmlwdG9yIGJlaGF2aW91cgorZGVmIHBhcnRpYWwoZnVuYywgKmFyZ3MsICoqa2V5d29yZHMpOgorICAgICIiIk5ldyBmdW5jdGlvbiB3aXRoIHBhcnRpYWwgYXBwbGljYXRpb24gb2YgdGhlIGdpdmVuIGFyZ3VtZW50cworICAgIGFuZCBrZXl3b3Jkcy4KKyAgICAiIiIKKyAgICBkZWYgbmV3ZnVuYygqZmFyZ3MsICoqZmtleXdvcmRzKToKKyAgICAgICAgbmV3a2V5d29yZHMgPSBrZXl3b3Jkcy5jb3B5KCkKKyAgICAgICAgbmV3a2V5d29yZHMudXBkYXRlKGZrZXl3b3JkcykKKyAgICAgICAgcmV0dXJuIGZ1bmMoKihhcmdzICsgZmFyZ3MpLCAqKm5ld2tleXdvcmRzKQorICAgIG5ld2Z1bmMuZnVuYyA9IGZ1bmMKKyAgICBuZXdmdW5jLmFyZ3MgPSBhcmdzCisgICAgbmV3ZnVuYy5rZXl3b3JkcyA9IGtleXdvcmRzCisgICAgcmV0dXJuIG5ld2Z1bmMKKwordHJ5OgorICAgIGZyb20gX2Z1bmN0b29scyBpbXBvcnQgcGFydGlhbAorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHBhc3MKKworIyBEZXNjcmlwdG9yIHZlcnNpb24KK2NsYXNzIHBhcnRpYWxtZXRob2Qob2JqZWN0KToKKyAgICAiIiJNZXRob2QgZGVzY3JpcHRvciB3aXRoIHBhcnRpYWwgYXBwbGljYXRpb24gb2YgdGhlIGdpdmVuIGFyZ3VtZW50cworICAgIGFuZCBrZXl3b3Jkcy4KKworICAgIFN1cHBvcnRzIHdyYXBwaW5nIGV4aXN0aW5nIGRlc2NyaXB0b3JzIGFuZCBoYW5kbGVzIG5vbi1kZXNjcmlwdG9yCisgICAgY2FsbGFibGVzIGFzIGluc3RhbmNlIG1ldGhvZHMuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZnVuYywgKmFyZ3MsICoqa2V5d29yZHMpOgorICAgICAgICBpZiBub3QgY2FsbGFibGUoZnVuYykgYW5kIG5vdCBoYXNhdHRyKGZ1bmMsICJfX2dldF9fIik6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoInshcn0gaXMgbm90IGNhbGxhYmxlIG9yIGEgZGVzY3JpcHRvciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JtYXQoZnVuYykpCisKKyAgICAgICAgIyBmdW5jIGNvdWxkIGJlIGEgZGVzY3JpcHRvciBsaWtlIGNsYXNzbWV0aG9kIHdoaWNoIGlzbid0IGNhbGxhYmxlLAorICAgICAgICAjIHNvIHdlIGNhbid0IGluaGVyaXQgZnJvbSBwYXJ0aWFsIChpdCB2ZXJpZmllcyBmdW5jIGlzIGNhbGxhYmxlKQorICAgICAgICBpZiBpc2luc3RhbmNlKGZ1bmMsIHBhcnRpYWxtZXRob2QpOgorICAgICAgICAgICAgIyBmbGF0dGVuaW5nIGlzIG1hbmRhdG9yeSBpbiBvcmRlciB0byBwbGFjZSBjbHMvc2VsZiBiZWZvcmUgYWxsCisgICAgICAgICAgICAjIG90aGVyIGFyZ3VtZW50cworICAgICAgICAgICAgIyBpdCdzIGFsc28gbW9yZSBlZmZpY2llbnQgc2luY2Ugb25seSBvbmUgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQKKyAgICAgICAgICAgIHNlbGYuZnVuYyA9IGZ1bmMuZnVuYworICAgICAgICAgICAgc2VsZi5hcmdzID0gZnVuYy5hcmdzICsgYXJncworICAgICAgICAgICAgc2VsZi5rZXl3b3JkcyA9IGZ1bmMua2V5d29yZHMuY29weSgpCisgICAgICAgICAgICBzZWxmLmtleXdvcmRzLnVwZGF0ZShrZXl3b3JkcykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZnVuYyA9IGZ1bmMKKyAgICAgICAgICAgIHNlbGYuYXJncyA9IGFyZ3MKKyAgICAgICAgICAgIHNlbGYua2V5d29yZHMgPSBrZXl3b3JkcworCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICBhcmdzID0gIiwgIi5qb2luKG1hcChyZXByLCBzZWxmLmFyZ3MpKQorICAgICAgICBrZXl3b3JkcyA9ICIsICIuam9pbigie309eyFyfSIuZm9ybWF0KGssIHYpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgaywgdiBpbiBzZWxmLmtleXdvcmRzLml0ZW1zKCkpCisgICAgICAgIGZvcm1hdF9zdHJpbmcgPSAie21vZHVsZX0ue2Nsc30oe2Z1bmN9LCB7YXJnc30sIHtrZXl3b3Jkc30pIgorICAgICAgICByZXR1cm4gZm9ybWF0X3N0cmluZy5mb3JtYXQobW9kdWxlPXNlbGYuX19jbGFzc19fLl9fbW9kdWxlX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbHM9c2VsZi5fX2NsYXNzX18uX19uYW1lX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jPXNlbGYuZnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M9YXJncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleXdvcmRzPWtleXdvcmRzKQorCisgICAgZGVmIF9tYWtlX3VuYm91bmRfbWV0aG9kKHNlbGYpOgorICAgICAgICBkZWYgX21ldGhvZCgqYXJncywgKiprZXl3b3Jkcyk6CisgICAgICAgICAgICBjYWxsX2tleXdvcmRzID0gc2VsZi5rZXl3b3Jkcy5jb3B5KCkKKyAgICAgICAgICAgIGNhbGxfa2V5d29yZHMudXBkYXRlKGtleXdvcmRzKQorICAgICAgICAgICAgY2xzX29yX3NlbGYsICpyZXN0ID0gYXJncworICAgICAgICAgICAgY2FsbF9hcmdzID0gKGNsc19vcl9zZWxmLCkgKyBzZWxmLmFyZ3MgKyB0dXBsZShyZXN0KQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuZnVuYygqY2FsbF9hcmdzLCAqKmNhbGxfa2V5d29yZHMpCisgICAgICAgIF9tZXRob2QuX19pc2Fic3RyYWN0bWV0aG9kX18gPSBzZWxmLl9faXNhYnN0cmFjdG1ldGhvZF9fCisgICAgICAgIF9tZXRob2QuX3BhcnRpYWxtZXRob2QgPSBzZWxmCisgICAgICAgIHJldHVybiBfbWV0aG9kCisKKyAgICBkZWYgX19nZXRfXyhzZWxmLCBvYmosIGNscyk6CisgICAgICAgIGdldCA9IGdldGF0dHIoc2VsZi5mdW5jLCAiX19nZXRfXyIsIE5vbmUpCisgICAgICAgIHJlc3VsdCA9IE5vbmUKKyAgICAgICAgaWYgZ2V0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgbmV3X2Z1bmMgPSBnZXQob2JqLCBjbHMpCisgICAgICAgICAgICBpZiBuZXdfZnVuYyBpcyBub3Qgc2VsZi5mdW5jOgorICAgICAgICAgICAgICAgICMgQXNzdW1lIF9fZ2V0X18gcmV0dXJuaW5nIHNvbWV0aGluZyBuZXcgaW5kaWNhdGVzIHRoZQorICAgICAgICAgICAgICAgICMgY3JlYXRpb24gb2YgYW4gYXBwcm9wcmlhdGUgY2FsbGFibGUKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBwYXJ0aWFsKG5ld19mdW5jLCAqc2VsZi5hcmdzLCAqKnNlbGYua2V5d29yZHMpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICByZXN1bHQuX19zZWxmX18gPSBuZXdfZnVuYy5fX3NlbGZfXworICAgICAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBpZiByZXN1bHQgaXMgTm9uZToKKyAgICAgICAgICAgICMgSWYgdGhlIHVuZGVybHlpbmcgZGVzY3JpcHRvciBkaWRuJ3QgZG8gYW55dGhpbmcsIHRyZWF0IHRoaXMKKyAgICAgICAgICAgICMgbGlrZSBhbiBpbnN0YW5jZSBtZXRob2QKKyAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuX21ha2VfdW5ib3VuZF9tZXRob2QoKS5fX2dldF9fKG9iaiwgY2xzKQorICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgX19pc2Fic3RyYWN0bWV0aG9kX18oc2VsZik6CisgICAgICAgIHJldHVybiBnZXRhdHRyKHNlbGYuZnVuYywgIl9faXNhYnN0cmFjdG1ldGhvZF9fIiwgRmFsc2UpCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMjIyBMUlUgQ2FjaGUgZnVuY3Rpb24gZGVjb3JhdG9yCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCkBAIC0yMTQsMTMgKzQwNiwxOCBAQAogICAgICMgVGhlIGludGVybmFscyBvZiB0aGUgbHJ1X2NhY2hlIGFyZSBlbmNhcHN1bGF0ZWQgZm9yIHRocmVhZCBzYWZldHkgYW5kCiAgICAgIyB0byBhbGxvdyB0aGUgaW1wbGVtZW50YXRpb24gdG8gY2hhbmdlIChpbmNsdWRpbmcgYSBwb3NzaWJsZSBDIHZlcnNpb24pLgogCisgICAgIyBFYXJseSBkZXRlY3Rpb24gb2YgYW4gZXJyb25lb3VzIGNhbGwgdG8gQGxydV9jYWNoZSB3aXRob3V0IGFueSBhcmd1bWVudHMKKyAgICAjIHJlc3VsdGluZyBpbiB0aGUgaW5uZXIgZnVuY3Rpb24gYmVpbmcgcGFzc2VkIHRvIG1heHNpemUgaW5zdGVhZCBvZiBhbgorICAgICMgaW50ZWdlciBvciBOb25lLgorICAgIGlmIG1heHNpemUgaXMgbm90IE5vbmUgYW5kIG5vdCBpc2luc3RhbmNlKG1heHNpemUsIGludCk6CisgICAgICAgIHJhaXNlIFR5cGVFcnJvcignRXhwZWN0ZWQgbWF4c2l6ZSB0byBiZSBhbiBpbnRlZ2VyIG9yIE5vbmUnKQorCiAgICAgIyBDb25zdGFudHMgc2hhcmVkIGJ5IGFsbCBscnUgY2FjaGUgaW5zdGFuY2VzOgogICAgIHNlbnRpbmVsID0gb2JqZWN0KCkgICAgICAgICAgIyB1bmlxdWUgb2JqZWN0IHVzZWQgdG8gc2lnbmFsIGNhY2hlIG1pc3NlcwogICAgIG1ha2Vfa2V5ID0gX21ha2Vfa2V5ICAgICAgICAgIyBidWlsZCBhIGtleSBmcm9tIHRoZSBmdW5jdGlvbiBhcmd1bWVudHMKICAgICBQUkVWLCBORVhULCBLRVksIFJFU1VMVCA9IDAsIDEsIDIsIDMgICAjIG5hbWVzIGZvciB0aGUgbGluayBmaWVsZHMKIAogICAgIGRlZiBkZWNvcmF0aW5nX2Z1bmN0aW9uKHVzZXJfZnVuY3Rpb24pOgotCiAgICAgICAgIGNhY2hlID0ge30KICAgICAgICAgaGl0cyA9IG1pc3NlcyA9IDAKICAgICAgICAgZnVsbCA9IEZhbHNlCkBAIC0zMjksMyArNTI2LDIxMCBAQAogICAgICAgICByZXR1cm4gdXBkYXRlX3dyYXBwZXIod3JhcHBlciwgdXNlcl9mdW5jdGlvbikKIAogICAgIHJldHVybiBkZWNvcmF0aW5nX2Z1bmN0aW9uCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyBzaW5nbGVkaXNwYXRjaCgpIC0gc2luZ2xlLWRpc3BhdGNoIGdlbmVyaWMgZnVuY3Rpb24gZGVjb3JhdG9yCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitkZWYgX2MzX21lcmdlKHNlcXVlbmNlcyk6CisgICAgIiIiTWVyZ2VzIE1ST3MgaW4gKnNlcXVlbmNlcyogdG8gYSBzaW5nbGUgTVJPIHVzaW5nIHRoZSBDMyBhbGdvcml0aG0uCisKKyAgICBBZGFwdGVkIGZyb20gaHR0cDovL3d3dy5weXRob24ub3JnL2Rvd25sb2FkL3JlbGVhc2VzLzIuMy9tcm8vLgorCisgICAgIiIiCisgICAgcmVzdWx0ID0gW10KKyAgICB3aGlsZSBUcnVlOgorICAgICAgICBzZXF1ZW5jZXMgPSBbcyBmb3IgcyBpbiBzZXF1ZW5jZXMgaWYgc10gICAjIHB1cmdlIGVtcHR5IHNlcXVlbmNlcworICAgICAgICBpZiBub3Qgc2VxdWVuY2VzOgorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAorICAgICAgICBmb3IgczEgaW4gc2VxdWVuY2VzOiAgICMgZmluZCBtZXJnZSBjYW5kaWRhdGVzIGFtb25nIHNlcSBoZWFkcworICAgICAgICAgICAgY2FuZGlkYXRlID0gczFbMF0KKyAgICAgICAgICAgIGZvciBzMiBpbiBzZXF1ZW5jZXM6CisgICAgICAgICAgICAgICAgaWYgY2FuZGlkYXRlIGluIHMyWzE6XToKKyAgICAgICAgICAgICAgICAgICAgY2FuZGlkYXRlID0gTm9uZQorICAgICAgICAgICAgICAgICAgICBicmVhayAgICAgICMgcmVqZWN0IHRoZSBjdXJyZW50IGhlYWQsIGl0IGFwcGVhcnMgbGF0ZXIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgaWYgY2FuZGlkYXRlIGlzIE5vbmU6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIkluY29uc2lzdGVudCBoaWVyYXJjaHkiKQorICAgICAgICByZXN1bHQuYXBwZW5kKGNhbmRpZGF0ZSkKKyAgICAgICAgIyByZW1vdmUgdGhlIGNob3NlbiBjYW5kaWRhdGUKKyAgICAgICAgZm9yIHNlcSBpbiBzZXF1ZW5jZXM6CisgICAgICAgICAgICBpZiBzZXFbMF0gPT0gY2FuZGlkYXRlOgorICAgICAgICAgICAgICAgIGRlbCBzZXFbMF0KKworZGVmIF9jM19tcm8oY2xzLCBhYmNzPU5vbmUpOgorICAgICIiIkNvbXB1dGVzIHRoZSBtZXRob2QgcmVzb2x1dGlvbiBvcmRlciB1c2luZyBleHRlbmRlZCBDMyBsaW5lYXJpemF0aW9uLgorCisgICAgSWYgbm8gKmFiY3MqIGFyZSBnaXZlbiwgdGhlIGFsZ29yaXRobSB3b3JrcyBleGFjdGx5IGxpa2UgdGhlIGJ1aWx0LWluIEMzCisgICAgbGluZWFyaXphdGlvbiB1c2VkIGZvciBtZXRob2QgcmVzb2x1dGlvbi4KKworICAgIElmIGdpdmVuLCAqYWJjcyogaXMgYSBsaXN0IG9mIGFic3RyYWN0IGJhc2UgY2xhc3NlcyB0aGF0IHNob3VsZCBiZSBpbnNlcnRlZAorICAgIGludG8gdGhlIHJlc3VsdGluZyBNUk8uIFVucmVsYXRlZCBBQkNzIGFyZSBpZ25vcmVkIGFuZCBkb24ndCBlbmQgdXAgaW4gdGhlCisgICAgcmVzdWx0LiBUaGUgYWxnb3JpdGhtIGluc2VydHMgQUJDcyB3aGVyZSB0aGVpciBmdW5jdGlvbmFsaXR5IGlzIGludHJvZHVjZWQsCisgICAgaS5lLiBpc3N1YmNsYXNzKGNscywgYWJjKSByZXR1cm5zIFRydWUgZm9yIHRoZSBjbGFzcyBpdHNlbGYgYnV0IHJldHVybnMKKyAgICBGYWxzZSBmb3IgYWxsIGl0cyBkaXJlY3QgYmFzZSBjbGFzc2VzLiBJbXBsaWNpdCBBQkNzIGZvciBhIGdpdmVuIGNsYXNzCisgICAgKGVpdGhlciByZWdpc3RlcmVkIG9yIGluZmVycmVkIGZyb20gdGhlIHByZXNlbmNlIG9mIGEgc3BlY2lhbCBtZXRob2QgbGlrZQorICAgIF9fbGVuX18pIGFyZSBpbnNlcnRlZCBkaXJlY3RseSBhZnRlciB0aGUgbGFzdCBBQkMgZXhwbGljaXRseSBsaXN0ZWQgaW4gdGhlCisgICAgTVJPIG9mIHNhaWQgY2xhc3MuIElmIHR3byBpbXBsaWNpdCBBQkNzIGVuZCB1cCBuZXh0IHRvIGVhY2ggb3RoZXIgaW4gdGhlCisgICAgcmVzdWx0aW5nIE1STywgdGhlaXIgb3JkZXJpbmcgZGVwZW5kcyBvbiB0aGUgb3JkZXIgb2YgdHlwZXMgaW4gKmFiY3MqLgorCisgICAgIiIiCisgICAgZm9yIGksIGJhc2UgaW4gZW51bWVyYXRlKHJldmVyc2VkKGNscy5fX2Jhc2VzX18pKToKKyAgICAgICAgaWYgaGFzYXR0cihiYXNlLCAnX19hYnN0cmFjdG1ldGhvZHNfXycpOgorICAgICAgICAgICAgYm91bmRhcnkgPSBsZW4oY2xzLl9fYmFzZXNfXykgLSBpCisgICAgICAgICAgICBicmVhayAgICMgQmFzZXMgdXAgdG8gdGhlIGxhc3QgZXhwbGljaXQgQUJDIGFyZSBjb25zaWRlcmVkIGZpcnN0LgorICAgIGVsc2U6CisgICAgICAgIGJvdW5kYXJ5ID0gMAorICAgIGFiY3MgPSBsaXN0KGFiY3MpIGlmIGFiY3MgZWxzZSBbXQorICAgIGV4cGxpY2l0X2Jhc2VzID0gbGlzdChjbHMuX19iYXNlc19fWzpib3VuZGFyeV0pCisgICAgYWJzdHJhY3RfYmFzZXMgPSBbXQorICAgIG90aGVyX2Jhc2VzID0gbGlzdChjbHMuX19iYXNlc19fW2JvdW5kYXJ5Ol0pCisgICAgZm9yIGJhc2UgaW4gYWJjczoKKyAgICAgICAgaWYgaXNzdWJjbGFzcyhjbHMsIGJhc2UpIGFuZCBub3QgYW55KAorICAgICAgICAgICAgICAgIGlzc3ViY2xhc3MoYiwgYmFzZSkgZm9yIGIgaW4gY2xzLl9fYmFzZXNfXworICAgICAgICAgICAgKToKKyAgICAgICAgICAgICMgSWYgKmNscyogaXMgdGhlIGNsYXNzIHRoYXQgaW50cm9kdWNlcyBiZWhhdmlvdXIgZGVzY3JpYmVkIGJ5CisgICAgICAgICAgICAjIGFuIEFCQyAqYmFzZSosIGluc2VydCBzYWlkIEFCQyB0byBpdHMgTVJPLgorICAgICAgICAgICAgYWJzdHJhY3RfYmFzZXMuYXBwZW5kKGJhc2UpCisgICAgZm9yIGJhc2UgaW4gYWJzdHJhY3RfYmFzZXM6CisgICAgICAgIGFiY3MucmVtb3ZlKGJhc2UpCisgICAgZXhwbGljaXRfYzNfbXJvcyA9IFtfYzNfbXJvKGJhc2UsIGFiY3M9YWJjcykgZm9yIGJhc2UgaW4gZXhwbGljaXRfYmFzZXNdCisgICAgYWJzdHJhY3RfYzNfbXJvcyA9IFtfYzNfbXJvKGJhc2UsIGFiY3M9YWJjcykgZm9yIGJhc2UgaW4gYWJzdHJhY3RfYmFzZXNdCisgICAgb3RoZXJfYzNfbXJvcyA9IFtfYzNfbXJvKGJhc2UsIGFiY3M9YWJjcykgZm9yIGJhc2UgaW4gb3RoZXJfYmFzZXNdCisgICAgcmV0dXJuIF9jM19tZXJnZSgKKyAgICAgICAgW1tjbHNdXSArCisgICAgICAgIGV4cGxpY2l0X2MzX21yb3MgKyBhYnN0cmFjdF9jM19tcm9zICsgb3RoZXJfYzNfbXJvcyArCisgICAgICAgIFtleHBsaWNpdF9iYXNlc10gKyBbYWJzdHJhY3RfYmFzZXNdICsgW290aGVyX2Jhc2VzXQorICAgICkKKworZGVmIF9jb21wb3NlX21ybyhjbHMsIHR5cGVzKToKKyAgICAiIiJDYWxjdWxhdGVzIHRoZSBtZXRob2QgcmVzb2x1dGlvbiBvcmRlciBmb3IgYSBnaXZlbiBjbGFzcyAqY2xzKi4KKworICAgIEluY2x1ZGVzIHJlbGV2YW50IGFic3RyYWN0IGJhc2UgY2xhc3NlcyAod2l0aCB0aGVpciByZXNwZWN0aXZlIGJhc2VzKSBmcm9tCisgICAgdGhlICp0eXBlcyogaXRlcmFibGUuIFVzZXMgYSBtb2RpZmllZCBDMyBsaW5lYXJpemF0aW9uIGFsZ29yaXRobS4KKworICAgICIiIgorICAgIGJhc2VzID0gc2V0KGNscy5fX21yb19fKQorICAgICMgUmVtb3ZlIGVudHJpZXMgd2hpY2ggYXJlIGFscmVhZHkgcHJlc2VudCBpbiB0aGUgX19tcm9fXyBvciB1bnJlbGF0ZWQuCisgICAgZGVmIGlzX3JlbGF0ZWQodHlwKToKKyAgICAgICAgcmV0dXJuICh0eXAgbm90IGluIGJhc2VzIGFuZCBoYXNhdHRyKHR5cCwgJ19fbXJvX18nKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGlzc3ViY2xhc3MoY2xzLCB0eXApKQorICAgIHR5cGVzID0gW24gZm9yIG4gaW4gdHlwZXMgaWYgaXNfcmVsYXRlZChuKV0KKyAgICAjIFJlbW92ZSBlbnRyaWVzIHdoaWNoIGFyZSBzdHJpY3QgYmFzZXMgb2Ygb3RoZXIgZW50cmllcyAodGhleSB3aWxsIGVuZCB1cAorICAgICMgaW4gdGhlIE1STyBhbnl3YXkuCisgICAgZGVmIGlzX3N0cmljdF9iYXNlKHR5cCk6CisgICAgICAgIGZvciBvdGhlciBpbiB0eXBlczoKKyAgICAgICAgICAgIGlmIHR5cCAhPSBvdGhlciBhbmQgdHlwIGluIG90aGVyLl9fbXJvX186CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgdHlwZXMgPSBbbiBmb3IgbiBpbiB0eXBlcyBpZiBub3QgaXNfc3RyaWN0X2Jhc2UobildCisgICAgIyBTdWJjbGFzc2VzIG9mIHRoZSBBQkNzIGluICp0eXBlcyogd2hpY2ggYXJlIGFsc28gaW1wbGVtZW50ZWQgYnkKKyAgICAjICpjbHMqIGNhbiBiZSB1c2VkIHRvIHN0YWJpbGl6ZSBBQkMgb3JkZXJpbmcuCisgICAgdHlwZV9zZXQgPSBzZXQodHlwZXMpCisgICAgbXJvID0gW10KKyAgICBmb3IgdHlwIGluIHR5cGVzOgorICAgICAgICBmb3VuZCA9IFtdCisgICAgICAgIGZvciBzdWIgaW4gdHlwLl9fc3ViY2xhc3Nlc19fKCk6CisgICAgICAgICAgICBpZiBzdWIgbm90IGluIGJhc2VzIGFuZCBpc3N1YmNsYXNzKGNscywgc3ViKToKKyAgICAgICAgICAgICAgICBmb3VuZC5hcHBlbmQoW3MgZm9yIHMgaW4gc3ViLl9fbXJvX18gaWYgcyBpbiB0eXBlX3NldF0pCisgICAgICAgIGlmIG5vdCBmb3VuZDoKKyAgICAgICAgICAgIG1yby5hcHBlbmQodHlwKQorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgIyBGYXZvciBzdWJjbGFzc2VzIHdpdGggdGhlIGJpZ2dlc3QgbnVtYmVyIG9mIHVzZWZ1bCBiYXNlcworICAgICAgICBmb3VuZC5zb3J0KGtleT1sZW4sIHJldmVyc2U9VHJ1ZSkKKyAgICAgICAgZm9yIHN1YiBpbiBmb3VuZDoKKyAgICAgICAgICAgIGZvciBzdWJjbHMgaW4gc3ViOgorICAgICAgICAgICAgICAgIGlmIHN1YmNscyBub3QgaW4gbXJvOgorICAgICAgICAgICAgICAgICAgICBtcm8uYXBwZW5kKHN1YmNscykKKyAgICByZXR1cm4gX2MzX21ybyhjbHMsIGFiY3M9bXJvKQorCitkZWYgX2ZpbmRfaW1wbChjbHMsIHJlZ2lzdHJ5KToKKyAgICAiIiJSZXR1cm5zIHRoZSBiZXN0IG1hdGNoaW5nIGltcGxlbWVudGF0aW9uIGZyb20gKnJlZ2lzdHJ5KiBmb3IgdHlwZSAqY2xzKi4KKworICAgIFdoZXJlIHRoZXJlIGlzIG5vIHJlZ2lzdGVyZWQgaW1wbGVtZW50YXRpb24gZm9yIGEgc3BlY2lmaWMgdHlwZSwgaXRzIG1ldGhvZAorICAgIHJlc29sdXRpb24gb3JkZXIgaXMgdXNlZCB0byBmaW5kIGEgbW9yZSBnZW5lcmljIGltcGxlbWVudGF0aW9uLgorCisgICAgTm90ZTogaWYgKnJlZ2lzdHJ5KiBkb2VzIG5vdCBjb250YWluIGFuIGltcGxlbWVudGF0aW9uIGZvciB0aGUgYmFzZQorICAgICpvYmplY3QqIHR5cGUsIHRoaXMgZnVuY3Rpb24gbWF5IHJldHVybiBOb25lLgorCisgICAgIiIiCisgICAgbXJvID0gX2NvbXBvc2VfbXJvKGNscywgcmVnaXN0cnkua2V5cygpKQorICAgIG1hdGNoID0gTm9uZQorICAgIGZvciB0IGluIG1ybzoKKyAgICAgICAgaWYgbWF0Y2ggaXMgbm90IE5vbmU6CisgICAgICAgICAgICAjIElmICptYXRjaCogaXMgYW4gaW1wbGljaXQgQUJDIGJ1dCB0aGVyZSBpcyBhbm90aGVyIHVucmVsYXRlZCwKKyAgICAgICAgICAgICMgZXF1YWxseSBtYXRjaGluZyBpbXBsaWNpdCBBQkMsIHJlZnVzZSB0aGUgdGVtcHRhdGlvbiB0byBndWVzcy4KKyAgICAgICAgICAgIGlmICh0IGluIHJlZ2lzdHJ5IGFuZCB0IG5vdCBpbiBjbHMuX19tcm9fXworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIG1hdGNoIG5vdCBpbiBjbHMuX19tcm9fXworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIG5vdCBpc3N1YmNsYXNzKG1hdGNoLCB0KSk6CisgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJBbWJpZ3VvdXMgZGlzcGF0Y2g6IHt9IG9yIHt9Ii5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgIG1hdGNoLCB0KSkKKyAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGlmIHQgaW4gcmVnaXN0cnk6CisgICAgICAgICAgICBtYXRjaCA9IHQKKyAgICByZXR1cm4gcmVnaXN0cnkuZ2V0KG1hdGNoKQorCitkZWYgc2luZ2xlZGlzcGF0Y2goZnVuYyk6CisgICAgIiIiU2luZ2xlLWRpc3BhdGNoIGdlbmVyaWMgZnVuY3Rpb24gZGVjb3JhdG9yLgorCisgICAgVHJhbnNmb3JtcyBhIGZ1bmN0aW9uIGludG8gYSBnZW5lcmljIGZ1bmN0aW9uLCB3aGljaCBjYW4gaGF2ZSBkaWZmZXJlbnQKKyAgICBiZWhhdmlvdXJzIGRlcGVuZGluZyB1cG9uIHRoZSB0eXBlIG9mIGl0cyBmaXJzdCBhcmd1bWVudC4gVGhlIGRlY29yYXRlZAorICAgIGZ1bmN0aW9uIGFjdHMgYXMgdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24sIGFuZCBhZGRpdGlvbmFsCisgICAgaW1wbGVtZW50YXRpb25zIGNhbiBiZSByZWdpc3RlcmVkIHVzaW5nIHRoZSByZWdpc3RlcigpIGF0dHJpYnV0ZSBvZiB0aGUKKyAgICBnZW5lcmljIGZ1bmN0aW9uLgorCisgICAgIiIiCisgICAgcmVnaXN0cnkgPSB7fQorICAgIGRpc3BhdGNoX2NhY2hlID0gV2Vha0tleURpY3Rpb25hcnkoKQorICAgIGNhY2hlX3Rva2VuID0gTm9uZQorCisgICAgZGVmIGRpc3BhdGNoKGNscyk6CisgICAgICAgICIiImdlbmVyaWNfZnVuYy5kaXNwYXRjaChjbHMpIC0+IDxmdW5jdGlvbiBpbXBsZW1lbnRhdGlvbj4KKworICAgICAgICBSdW5zIHRoZSBkaXNwYXRjaCBhbGdvcml0aG0gdG8gcmV0dXJuIHRoZSBiZXN0IGF2YWlsYWJsZSBpbXBsZW1lbnRhdGlvbgorICAgICAgICBmb3IgdGhlIGdpdmVuICpjbHMqIHJlZ2lzdGVyZWQgb24gKmdlbmVyaWNfZnVuYyouCisKKyAgICAgICAgIiIiCisgICAgICAgIG5vbmxvY2FsIGNhY2hlX3Rva2VuCisgICAgICAgIGlmIGNhY2hlX3Rva2VuIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgY3VycmVudF90b2tlbiA9IGdldF9jYWNoZV90b2tlbigpCisgICAgICAgICAgICBpZiBjYWNoZV90b2tlbiAhPSBjdXJyZW50X3Rva2VuOgorICAgICAgICAgICAgICAgIGRpc3BhdGNoX2NhY2hlLmNsZWFyKCkKKyAgICAgICAgICAgICAgICBjYWNoZV90b2tlbiA9IGN1cnJlbnRfdG9rZW4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaW1wbCA9IGRpc3BhdGNoX2NhY2hlW2Nsc10KKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGltcGwgPSByZWdpc3RyeVtjbHNdCisgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICAgICAgaW1wbCA9IF9maW5kX2ltcGwoY2xzLCByZWdpc3RyeSkKKyAgICAgICAgICAgIGRpc3BhdGNoX2NhY2hlW2Nsc10gPSBpbXBsCisgICAgICAgIHJldHVybiBpbXBsCisKKyAgICBkZWYgcmVnaXN0ZXIoY2xzLCBmdW5jPU5vbmUpOgorICAgICAgICAiIiJnZW5lcmljX2Z1bmMucmVnaXN0ZXIoY2xzLCBmdW5jKSAtPiBmdW5jCisKKyAgICAgICAgUmVnaXN0ZXJzIGEgbmV3IGltcGxlbWVudGF0aW9uIGZvciB0aGUgZ2l2ZW4gKmNscyogb24gYSAqZ2VuZXJpY19mdW5jKi4KKworICAgICAgICAiIiIKKyAgICAgICAgbm9ubG9jYWwgY2FjaGVfdG9rZW4KKyAgICAgICAgaWYgZnVuYyBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIGxhbWJkYSBmOiByZWdpc3RlcihjbHMsIGYpCisgICAgICAgIHJlZ2lzdHJ5W2Nsc10gPSBmdW5jCisgICAgICAgIGlmIGNhY2hlX3Rva2VuIGlzIE5vbmUgYW5kIGhhc2F0dHIoY2xzLCAnX19hYnN0cmFjdG1ldGhvZHNfXycpOgorICAgICAgICAgICAgY2FjaGVfdG9rZW4gPSBnZXRfY2FjaGVfdG9rZW4oKQorICAgICAgICBkaXNwYXRjaF9jYWNoZS5jbGVhcigpCisgICAgICAgIHJldHVybiBmdW5jCisKKyAgICBkZWYgd3JhcHBlcigqYXJncywgKiprdyk6CisgICAgICAgIHJldHVybiBkaXNwYXRjaChhcmdzWzBdLl9fY2xhc3NfXykoKmFyZ3MsICoqa3cpCisKKyAgICByZWdpc3RyeVtvYmplY3RdID0gZnVuYworICAgIHdyYXBwZXIucmVnaXN0ZXIgPSByZWdpc3RlcgorICAgIHdyYXBwZXIuZGlzcGF0Y2ggPSBkaXNwYXRjaAorICAgIHdyYXBwZXIucmVnaXN0cnkgPSBNYXBwaW5nUHJveHlUeXBlKHJlZ2lzdHJ5KQorICAgIHdyYXBwZXIuX2NsZWFyX2NhY2hlID0gZGlzcGF0Y2hfY2FjaGUuY2xlYXIKKyAgICB1cGRhdGVfd3JhcHBlcih3cmFwcGVyLCBmdW5jKQorICAgIHJldHVybiB3cmFwcGVyCmRpZmYgLS1naXQgYS9MaWIvZ2VuZXJpY3BhdGgucHkgYi9MaWIvZ2VuZXJpY3BhdGgucHkKaW5kZXggMzQwYzAwNC4uY2E0YTUxMCAxMDA2NDQKLS0tIGEvTGliL2dlbmVyaWNwYXRoLnB5CisrKyBiL0xpYi9nZW5lcmljcGF0aC5weQpAQCAtNyw3ICs3LDggQEAKIGltcG9ydCBzdGF0CiAKIF9fYWxsX18gPSBbJ2NvbW1vbnByZWZpeCcsICdleGlzdHMnLCAnZ2V0YXRpbWUnLCAnZ2V0Y3RpbWUnLCAnZ2V0bXRpbWUnLAotICAgICAgICAgICAnZ2V0c2l6ZScsICdpc2RpcicsICdpc2ZpbGUnXQorICAgICAgICAgICAnZ2V0c2l6ZScsICdpc2RpcicsICdpc2ZpbGUnLCAnc2FtZWZpbGUnLCAnc2FtZW9wZW5maWxlJywKKyAgICAgICAgICAgJ3NhbWVzdGF0J10KIAogCiAjIERvZXMgYSBwYXRoIGV4aXN0PwpAQCAtMTYsNyArMTcsNyBAQAogICAgICIiIlRlc3Qgd2hldGhlciBhIHBhdGggZXhpc3RzLiAgUmV0dXJucyBGYWxzZSBmb3IgYnJva2VuIHN5bWJvbGljIGxpbmtzIiIiCiAgICAgdHJ5OgogICAgICAgICBvcy5zdGF0KHBhdGgpCi0gICAgZXhjZXB0IG9zLmVycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICByZXR1cm4gRmFsc2UKICAgICByZXR1cm4gVHJ1ZQogCkBAIC0yNyw3ICsyOCw3IEBACiAgICAgIiIiVGVzdCB3aGV0aGVyIGEgcGF0aCBpcyBhIHJlZ3VsYXIgZmlsZSIiIgogICAgIHRyeToKICAgICAgICAgc3QgPSBvcy5zdGF0KHBhdGgpCi0gICAgZXhjZXB0IG9zLmVycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICByZXR1cm4gRmFsc2UKICAgICByZXR1cm4gc3RhdC5TX0lTUkVHKHN0LnN0X21vZGUpCiAKQEAgLTM5LDcgKzQwLDcgQEAKICAgICAiIiJSZXR1cm4gdHJ1ZSBpZiB0aGUgcGF0aG5hbWUgcmVmZXJzIHRvIGFuIGV4aXN0aW5nIGRpcmVjdG9yeS4iIiIKICAgICB0cnk6CiAgICAgICAgIHN0ID0gb3Muc3RhdChzKQotICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgcmV0dXJuIHN0YXQuU19JU0RJUihzdC5zdF9tb2RlKQogCkBAIC03NSw2ICs3NiwzMSBAQAogICAgICAgICAgICAgcmV0dXJuIHMxWzppXQogICAgIHJldHVybiBzMQogCisjIEFyZSB0d28gc3RhdCBidWZmZXJzIChvYnRhaW5lZCBmcm9tIHN0YXQsIGZzdGF0IG9yIGxzdGF0KQorIyBkZXNjcmliaW5nIHRoZSBzYW1lIGZpbGU/CitkZWYgc2FtZXN0YXQoczEsIHMyKToKKyAgICAiIiJUZXN0IHdoZXRoZXIgdHdvIHN0YXQgYnVmZmVycyByZWZlcmVuY2UgdGhlIHNhbWUgZmlsZSIiIgorICAgIHJldHVybiAoczEuc3RfaW5vID09IHMyLnN0X2lubyBhbmQKKyAgICAgICAgICAgIHMxLnN0X2RldiA9PSBzMi5zdF9kZXYpCisKKworIyBBcmUgdHdvIGZpbGVuYW1lcyByZWFsbHkgcG9pbnRpbmcgdG8gdGhlIHNhbWUgZmlsZT8KK2RlZiBzYW1lZmlsZShmMSwgZjIpOgorICAgICIiIlRlc3Qgd2hldGhlciB0d28gcGF0aG5hbWVzIHJlZmVyZW5jZSB0aGUgc2FtZSBhY3R1YWwgZmlsZSIiIgorICAgIHMxID0gb3Muc3RhdChmMSkKKyAgICBzMiA9IG9zLnN0YXQoZjIpCisgICAgcmV0dXJuIHNhbWVzdGF0KHMxLCBzMikKKworCisjIEFyZSB0d28gb3BlbiBmaWxlcyByZWFsbHkgcmVmZXJlbmNpbmcgdGhlIHNhbWUgZmlsZT8KKyMgKE5vdCBuZWNlc3NhcmlseSB0aGUgc2FtZSBmaWxlIGRlc2NyaXB0b3IhKQorZGVmIHNhbWVvcGVuZmlsZShmcDEsIGZwMik6CisgICAgIiIiVGVzdCB3aGV0aGVyIHR3byBvcGVuIGZpbGUgb2JqZWN0cyByZWZlcmVuY2UgdGhlIHNhbWUgZmlsZSIiIgorICAgIHMxID0gb3MuZnN0YXQoZnAxKQorICAgIHMyID0gb3MuZnN0YXQoZnAyKQorICAgIHJldHVybiBzYW1lc3RhdChzMSwgczIpCisKKwogIyBTcGxpdCBhIHBhdGggaW4gcm9vdCBhbmQgZXh0ZW5zaW9uLgogIyBUaGUgZXh0ZW5zaW9uIGlzIGV2ZXJ5dGhpbmcgc3RhcnRpbmcgYXQgdGhlIGxhc3QgZG90IGluIHRoZSBsYXN0CiAjIHBhdGhuYW1lIGNvbXBvbmVudDsgdGhlIHJvb3QgaXMgZXZlcnl0aGluZyBiZWZvcmUgdGhhdC4KZGlmZiAtLWdpdCBhL0xpYi9nZXRvcHQucHkgYi9MaWIvZ2V0b3B0LnB5CmluZGV4IDNkNmVjYmQuLjlkNGNhYjEgMTAwNjQ0Ci0tLSBhL0xpYi9nZXRvcHQucHkKKysrIGIvTGliL2dldG9wdC5weQpAQCAtMjgsNyArMjgsNyBAQAogIyAtIFJFVFVSTl9JTl9PUkRFUiBvcHRpb24KICMgLSBHTlUgZXh0ZW5zaW9uIHdpdGggJy0nIGFzIGZpcnN0IGNoYXJhY3RlciBvZiBvcHRpb24gc3RyaW5nCiAjIC0gb3B0aW9uYWwgYXJndW1lbnRzLCBzcGVjaWZpZWQgYnkgZG91YmxlIGNvbG9ucwotIyAtIGEgb3B0aW9uIHN0cmluZyB3aXRoIGEgVyBmb2xsb3dlZCBieSBzZW1pY29sb24gc2hvdWxkCisjIC0gYW4gb3B0aW9uIHN0cmluZyB3aXRoIGEgVyBmb2xsb3dlZCBieSBzZW1pY29sb24gc2hvdWxkCiAjICAgdHJlYXQgIi1XIGZvbyIgYXMgIi0tZm9vIgogCiBfX2FsbF9fID0gWyJHZXRvcHRFcnJvciIsImVycm9yIiwiZ2V0b3B0IiwiZ251X2dldG9wdCJdCmRpZmYgLS1naXQgYS9MaWIvZ2V0cGFzcy5weSBiL0xpYi9nZXRwYXNzLnB5CmluZGV4IDUzYzM4YjguLjdjNGU5NzYgMTAwNjQ0Ci0tLSBhL0xpYi9nZXRwYXNzLnB5CisrKyBiL0xpYi9nZXRwYXNzLnB5CkBAIC0xMzUsNyArMTM1LDEzIEBACiAgICAgICAgIGlucHV0ID0gc3lzLnN0ZGluCiAgICAgcHJvbXB0ID0gc3RyKHByb21wdCkKICAgICBpZiBwcm9tcHQ6Ci0gICAgICAgIHN0cmVhbS53cml0ZShwcm9tcHQpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN0cmVhbS53cml0ZShwcm9tcHQpCisgICAgICAgIGV4Y2VwdCBVbmljb2RlRW5jb2RlRXJyb3I6CisgICAgICAgICAgICAjIFVzZSByZXBsYWNlIGVycm9yIGhhbmRsZXIgdG8gZ2V0IGFzIG11Y2ggYXMgcG9zc2libGUgcHJpbnRlZC4KKyAgICAgICAgICAgIHByb21wdCA9IHByb21wdC5lbmNvZGUoc3RyZWFtLmVuY29kaW5nLCAncmVwbGFjZScpCisgICAgICAgICAgICBwcm9tcHQgPSBwcm9tcHQuZGVjb2RlKHN0cmVhbS5lbmNvZGluZykKKyAgICAgICAgICAgIHN0cmVhbS53cml0ZShwcm9tcHQpCiAgICAgICAgIHN0cmVhbS5mbHVzaCgpCiAgICAgIyBOT1RFOiBUaGUgUHl0aG9uIEMgQVBJIGNhbGxzIGZsb2NrZmlsZSgpIChhbmQgdW5sb2NrKSBkdXJpbmcgcmVhZGxpbmUuCiAgICAgbGluZSA9IGlucHV0LnJlYWRsaW5lKCkKZGlmZiAtLWdpdCBhL0xpYi9nZXR0ZXh0LnB5IGIvTGliL2dldHRleHQucHkKaW5kZXggZTQzZjA0NC4uOGNhZjFkMSAxMDA2NDQKLS0tIGEvTGliL2dldHRleHQucHkKKysrIGIvTGliL2dldHRleHQucHkKQEAgLTUyLDcgKzUyLDkgQEAKIAogX19hbGxfXyA9IFsnTnVsbFRyYW5zbGF0aW9ucycsICdHTlVUcmFuc2xhdGlvbnMnLCAnQ2F0YWxvZycsCiAgICAgICAgICAgICdmaW5kJywgJ3RyYW5zbGF0aW9uJywgJ2luc3RhbGwnLCAndGV4dGRvbWFpbicsICdiaW5kdGV4dGRvbWFpbicsCi0gICAgICAgICAgICdkZ2V0dGV4dCcsICdkbmdldHRleHQnLCAnZ2V0dGV4dCcsICduZ2V0dGV4dCcsCisgICAgICAgICAgICdiaW5kX3RleHRkb21haW5fY29kZXNldCcsCisgICAgICAgICAgICdkZ2V0dGV4dCcsICdkbmdldHRleHQnLCAnZ2V0dGV4dCcsICdsZ2V0dGV4dCcsICdsZGdldHRleHQnLAorICAgICAgICAgICAnbGRuZ2V0dGV4dCcsICdsbmdldHRleHQnLCAnbmdldHRleHQnLAogICAgICAgICAgICBdCiAKIF9kZWZhdWx0X2xvY2FsZWRpciA9IG9zLnBhdGguam9pbihzeXMuYmFzZV9wcmVmaXgsICdzaGFyZScsICdsb2NhbGUnKQpAQCAtMjQ0LDcgKzI0Niw3IEBACiAgICAgICAgICAgICB2ZXJzaW9uLCBtc2djb3VudCwgbWFzdGVyaWR4LCB0cmFuc2lkeCA9IHVucGFjaygnPjRJJywgYnVmWzQ6MjBdKQogICAgICAgICAgICAgaWkgPSAnPklJJwogICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigwLCAnQmFkIG1hZ2ljIG51bWJlcicsIGZpbGVuYW1lKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigwLCAnQmFkIG1hZ2ljIG51bWJlcicsIGZpbGVuYW1lKQogICAgICAgICAjIE5vdyBwdXQgYWxsIG1lc3NhZ2VzIGZyb20gdGhlIC5tbyBmaWxlIGJ1ZmZlciBpbnRvIHRoZSBjYXRhbG9nCiAgICAgICAgICMgZGljdGlvbmFyeS4KICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbXNnY291bnQpOgpAQCAtMjU2LDE1ICsyNTgsMTYgQEAKICAgICAgICAgICAgICAgICBtc2cgPSBidWZbbW9mZjptZW5kXQogICAgICAgICAgICAgICAgIHRtc2cgPSBidWZbdG9mZjp0ZW5kXQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByYWlzZSBJT0Vycm9yKDAsICdGaWxlIGlzIGNvcnJ1cHQnLCBmaWxlbmFtZSkKKyAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yKDAsICdGaWxlIGlzIGNvcnJ1cHQnLCBmaWxlbmFtZSkKICAgICAgICAgICAgICMgU2VlIGlmIHdlJ3JlIGxvb2tpbmcgYXQgR05VIC5tbyBjb252ZW50aW9ucyBmb3IgbWV0YWRhdGEKICAgICAgICAgICAgIGlmIG1sZW4gPT0gMDoKICAgICAgICAgICAgICAgICAjIENhdGFsb2cgZGVzY3JpcHRpb24KLSAgICAgICAgICAgICAgICBsYXN0ayA9IGsgPSBOb25lCisgICAgICAgICAgICAgICAgbGFzdGsgPSBOb25lCiAgICAgICAgICAgICAgICAgZm9yIGJfaXRlbSBpbiB0bXNnLnNwbGl0KCdcbicuZW5jb2RlKCJhc2NpaSIpKToKICAgICAgICAgICAgICAgICAgICAgaXRlbSA9IGJfaXRlbS5kZWNvZGUoKS5zdHJpcCgpCiAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBpdGVtOgogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgayA9IHYgPSBOb25lCiAgICAgICAgICAgICAgICAgICAgIGlmICc6JyBpbiBpdGVtOgogICAgICAgICAgICAgICAgICAgICAgICAgaywgdiA9IGl0ZW0uc3BsaXQoJzonLCAxKQogICAgICAgICAgICAgICAgICAgICAgICAgayA9IGsuc3RyaXAoKS5sb3dlcigpCkBAIC0zOTgsNyArNDAxLDcgQEAKICAgICBpZiBub3QgbW9maWxlczoKICAgICAgICAgaWYgZmFsbGJhY2s6CiAgICAgICAgICAgICByZXR1cm4gTnVsbFRyYW5zbGF0aW9ucygpCi0gICAgICAgIHJhaXNlIElPRXJyb3IoRU5PRU5ULCAnTm8gdHJhbnNsYXRpb24gZmlsZSBmb3VuZCBmb3IgZG9tYWluJywgZG9tYWluKQorICAgICAgICByYWlzZSBPU0Vycm9yKEVOT0VOVCwgJ05vIHRyYW5zbGF0aW9uIGZpbGUgZm91bmQgZm9yIGRvbWFpbicsIGRvbWFpbikKICAgICAjIEF2b2lkIG9wZW5pbmcsIHJlYWRpbmcsIGFuZCBwYXJzaW5nIHRoZSAubW8gZmlsZSBhZnRlciBpdCdzIGJlZW4gZG9uZQogICAgICMgb25jZS4KICAgICByZXN1bHQgPSBOb25lCkBAIC00NjAsNyArNDYzLDcgQEAKICAgICB0cnk6CiAgICAgICAgIHQgPSB0cmFuc2xhdGlvbihkb21haW4sIF9sb2NhbGVkaXJzLmdldChkb21haW4sIE5vbmUpLAogICAgICAgICAgICAgICAgICAgICAgICAgY29kZXNldD1fbG9jYWxlY29kZXNldHMuZ2V0KGRvbWFpbikpCi0gICAgZXhjZXB0IElPRXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIHJldHVybiBtZXNzYWdlCiAgICAgcmV0dXJuIHQuZ2V0dGV4dChtZXNzYWdlKQogCkBAIC00NjgsNyArNDcxLDcgQEAKICAgICB0cnk6CiAgICAgICAgIHQgPSB0cmFuc2xhdGlvbihkb21haW4sIF9sb2NhbGVkaXJzLmdldChkb21haW4sIE5vbmUpLAogICAgICAgICAgICAgICAgICAgICAgICAgY29kZXNldD1fbG9jYWxlY29kZXNldHMuZ2V0KGRvbWFpbikpCi0gICAgZXhjZXB0IElPRXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIHJldHVybiBtZXNzYWdlCiAgICAgcmV0dXJuIHQubGdldHRleHQobWVzc2FnZSkKIApAQCAtNDc2LDcgKzQ3OSw3IEBACiAgICAgdHJ5OgogICAgICAgICB0ID0gdHJhbnNsYXRpb24oZG9tYWluLCBfbG9jYWxlZGlycy5nZXQoZG9tYWluLCBOb25lKSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVzZXQ9X2xvY2FsZWNvZGVzZXRzLmdldChkb21haW4pKQotICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICBpZiBuID09IDE6CiAgICAgICAgICAgICByZXR1cm4gbXNnaWQxCiAgICAgICAgIGVsc2U6CkBAIC00ODcsNyArNDkwLDcgQEAKICAgICB0cnk6CiAgICAgICAgIHQgPSB0cmFuc2xhdGlvbihkb21haW4sIF9sb2NhbGVkaXJzLmdldChkb21haW4sIE5vbmUpLAogICAgICAgICAgICAgICAgICAgICAgICAgY29kZXNldD1fbG9jYWxlY29kZXNldHMuZ2V0KGRvbWFpbikpCi0gICAgZXhjZXB0IElPRXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIGlmIG4gPT0gMToKICAgICAgICAgICAgIHJldHVybiBtc2dpZDEKICAgICAgICAgZWxzZToKZGlmZiAtLWdpdCBhL0xpYi9nbG9iLnB5IGIvTGliL2dsb2IucHkKaW5kZXggMWY2MDI2NS4uZDZlY2EyNCAxMDA2NDQKLS0tIGEvTGliL2dsb2IucHkKKysrIGIvTGliL2dsb2IucHkKQEAgLTI2LDE0ICsyNiwxOCBAQAogICAgIHBhdHRlcm5zLgogCiAgICAgIiIiCi0gICAgaWYgbm90IGhhc19tYWdpYyhwYXRobmFtZSk6Ci0gICAgICAgIGlmIG9zLnBhdGgubGV4aXN0cyhwYXRobmFtZSk6Ci0gICAgICAgICAgICB5aWVsZCBwYXRobmFtZQotICAgICAgICByZXR1cm4KICAgICBkaXJuYW1lLCBiYXNlbmFtZSA9IG9zLnBhdGguc3BsaXQocGF0aG5hbWUpCisgICAgaWYgbm90IGhhc19tYWdpYyhwYXRobmFtZSk6CisgICAgICAgIGlmIGJhc2VuYW1lOgorICAgICAgICAgICAgaWYgb3MucGF0aC5sZXhpc3RzKHBhdGhuYW1lKToKKyAgICAgICAgICAgICAgICB5aWVsZCBwYXRobmFtZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBQYXR0ZXJucyBlbmRpbmcgd2l0aCBhIHNsYXNoIHNob3VsZCBtYXRjaCBvbmx5IGRpcmVjdG9yaWVzCisgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKGRpcm5hbWUpOgorICAgICAgICAgICAgICAgIHlpZWxkIHBhdGhuYW1lCisgICAgICAgIHJldHVybgogICAgIGlmIG5vdCBkaXJuYW1lOgotICAgICAgICBmb3IgbmFtZSBpbiBnbG9iMShOb25lLCBiYXNlbmFtZSk6Ci0gICAgICAgICAgICB5aWVsZCBuYW1lCisgICAgICAgIHlpZWxkIGZyb20gZ2xvYjEoTm9uZSwgYmFzZW5hbWUpCiAgICAgICAgIHJldHVybgogICAgICMgYG9zLnBhdGguc3BsaXQoKWAgcmV0dXJucyB0aGUgYXJndW1lbnQgaXRzZWxmIGFzIGEgZGlybmFtZSBpZiBpdCBpcyBhCiAgICAgIyBkcml2ZSBvciBVTkMgcGF0aC4gIFByZXZlbnQgYW4gaW5maW5pdGUgcmVjdXJzaW9uIGlmIGEgZHJpdmUgb3IgVU5DIHBhdGgKQEAgLTYyLDcgKzY2LDcgQEAKICAgICAgICAgICAgIGRpcm5hbWUgPSBvcy5jdXJkaXIKICAgICB0cnk6CiAgICAgICAgIG5hbWVzID0gb3MubGlzdGRpcihkaXJuYW1lKQotICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcmV0dXJuIFtdCiAgICAgaWYgbm90IF9pc2hpZGRlbihwYXR0ZXJuKToKICAgICAgICAgbmFtZXMgPSBbeCBmb3IgeCBpbiBuYW1lcyBpZiBub3QgX2lzaGlkZGVuKHgpXQpAQCAtODAsOCArODQsOCBAQAogICAgIHJldHVybiBbXQogCiAKLW1hZ2ljX2NoZWNrID0gcmUuY29tcGlsZSgnWyo/W10nKQotbWFnaWNfY2hlY2tfYnl0ZXMgPSByZS5jb21waWxlKGInWyo/W10nKQorbWFnaWNfY2hlY2sgPSByZS5jb21waWxlKCcoWyo/W10pJykKK21hZ2ljX2NoZWNrX2J5dGVzID0gcmUuY29tcGlsZShiJyhbKj9bXSknKQogCiBkZWYgaGFzX21hZ2ljKHMpOgogICAgIGlmIGlzaW5zdGFuY2UocywgYnl0ZXMpOgpAQCAtOTIsMyArOTYsMTUgQEAKIAogZGVmIF9pc2hpZGRlbihwYXRoKToKICAgICByZXR1cm4gcGF0aFswXSBpbiAoJy4nLCBiJy4nWzBdKQorCitkZWYgZXNjYXBlKHBhdGhuYW1lKToKKyAgICAiIiJFc2NhcGUgYWxsIHNwZWNpYWwgY2hhcmFjdGVycy4KKyAgICAiIiIKKyAgICAjIEVzY2FwaW5nIGlzIGRvbmUgYnkgd3JhcHBpbmcgYW55IG9mICIqP1siIGJldHdlZW4gc3F1YXJlIGJyYWNrZXRzLgorICAgICMgTWV0YWNoYXJhY3RlcnMgZG8gbm90IHdvcmsgaW4gdGhlIGRyaXZlIHBhcnQgYW5kIHNob3VsZG4ndCBiZSBlc2NhcGVkLgorICAgIGRyaXZlLCBwYXRobmFtZSA9IG9zLnBhdGguc3BsaXRkcml2ZShwYXRobmFtZSkKKyAgICBpZiBpc2luc3RhbmNlKHBhdGhuYW1lLCBieXRlcyk6CisgICAgICAgIHBhdGhuYW1lID0gbWFnaWNfY2hlY2tfYnl0ZXMuc3ViKGJyJ1tcMV0nLCBwYXRobmFtZSkKKyAgICBlbHNlOgorICAgICAgICBwYXRobmFtZSA9IG1hZ2ljX2NoZWNrLnN1YihyJ1tcMV0nLCBwYXRobmFtZSkKKyAgICByZXR1cm4gZHJpdmUgKyBwYXRobmFtZQpkaWZmIC0tZ2l0IGEvTGliL2d6aXAucHkgYi9MaWIvZ3ppcC5weQppbmRleCA0ZmY5ODIwLi43YWQwMGUxIDEwMDY0NAotLS0gYS9MaWIvZ3ppcC5weQorKysgYi9MaWIvZ3ppcC5weQpAQCAtMjMsOSArMjMsOSBAQAogICAgIFRoZSBmaWxlbmFtZSBhcmd1bWVudCBjYW4gYmUgYW4gYWN0dWFsIGZpbGVuYW1lIChhIHN0ciBvciBieXRlcyBvYmplY3QpLCBvcgogICAgIGFuIGV4aXN0aW5nIGZpbGUgb2JqZWN0IHRvIHJlYWQgZnJvbSBvciB3cml0ZSB0by4KIAotICAgIFRoZSBtb2RlIGFyZ3VtZW50IGNhbiBiZSAiciIsICJyYiIsICJ3IiwgIndiIiwgImEiIG9yICJhYiIgZm9yIGJpbmFyeSBtb2RlLAotICAgIG9yICJydCIsICJ3dCIgb3IgImF0IiBmb3IgdGV4dCBtb2RlLiBUaGUgZGVmYXVsdCBtb2RlIGlzICJyYiIsIGFuZCB0aGUKLSAgICBkZWZhdWx0IGNvbXByZXNzbGV2ZWwgaXMgOS4KKyAgICBUaGUgbW9kZSBhcmd1bWVudCBjYW4gYmUgInIiLCAicmIiLCAidyIsICJ3YiIsICJ4IiwgInhiIiwgImEiIG9yICJhYiIgZm9yCisgICAgYmluYXJ5IG1vZGUsIG9yICJydCIsICJ3dCIsICJ4dCIgb3IgImF0IiBmb3IgdGV4dCBtb2RlLiBUaGUgZGVmYXVsdCBtb2RlIGlzCisgICAgInJiIiwgYW5kIHRoZSBkZWZhdWx0IGNvbXByZXNzbGV2ZWwgaXMgOS4KIAogICAgIEZvciBiaW5hcnkgbW9kZSwgdGhpcyBmdW5jdGlvbiBpcyBlcXVpdmFsZW50IHRvIHRoZSBHemlwRmlsZSBjb25zdHJ1Y3RvcjoKICAgICBHemlwRmlsZShmaWxlbmFtZSwgbW9kZSwgY29tcHJlc3NsZXZlbCkuIEluIHRoaXMgY2FzZSwgdGhlIGVuY29kaW5nLCBlcnJvcnMKQEAgLTY1LDkgKzY1LDYgQEAKICAgICAjIG9yIHVuc2lnbmVkLgogICAgIG91dHB1dC53cml0ZShzdHJ1Y3QucGFjaygiPEwiLCB2YWx1ZSkpCiAKLWRlZiByZWFkMzIoaW5wdXQpOgotICAgIHJldHVybiBzdHJ1Y3QudW5wYWNrKCI8SSIsIGlucHV0LnJlYWQoNCkpWzBdCi0KIGNsYXNzIF9QYWRkZWRGaWxlOgogICAgICIiIk1pbmltYWwgcmVhZC1vbmx5IGZpbGUgb2JqZWN0IHRoYXQgcHJlcGVuZHMgYSBzdHJpbmcgdG8gdGhlIGNvbnRlbnRzCiAgICAgb2YgYW4gYWN0dWFsIGZpbGUuIFNob3VsZG4ndCBiZSB1c2VkIG91dHNpZGUgb2YgZ3ppcC5weSwgYXMgaXQgbGFja3MKQEAgLTE1NCwxMSArMTUxLDExIEBACiAgICAgICAgIGZpbGVvYmosIGlmIGRpc2Nlcm5pYmxlOyBvdGhlcndpc2UsIGl0IGRlZmF1bHRzIHRvIHRoZSBlbXB0eSBzdHJpbmcsCiAgICAgICAgIGFuZCBpbiB0aGlzIGNhc2UgdGhlIG9yaWdpbmFsIGZpbGVuYW1lIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGUgaGVhZGVyLgogCi0gICAgICAgIFRoZSBtb2RlIGFyZ3VtZW50IGNhbiBiZSBhbnkgb2YgJ3InLCAncmInLCAnYScsICdhYicsICd3Jywgb3IgJ3diJywKLSAgICAgICAgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIGZpbGUgd2lsbCBiZSByZWFkIG9yIHdyaXR0ZW4uICBUaGUgZGVmYXVsdAorICAgICAgICBUaGUgbW9kZSBhcmd1bWVudCBjYW4gYmUgYW55IG9mICdyJywgJ3JiJywgJ2EnLCAnYWInLCAndycsICd3YicsICd4Jywgb3IKKyAgICAgICAgJ3hiJyBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgZmlsZSB3aWxsIGJlIHJlYWQgb3Igd3JpdHRlbi4gIFRoZSBkZWZhdWx0CiAgICAgICAgIGlzIHRoZSBtb2RlIG9mIGZpbGVvYmogaWYgZGlzY2VybmlibGU7IG90aGVyd2lzZSwgdGhlIGRlZmF1bHQgaXMgJ3JiJy4KICAgICAgICAgQSBtb2RlIG9mICdyJyBpcyBlcXVpdmFsZW50IHRvIG9uZSBvZiAncmInLCBhbmQgc2ltaWxhcmx5IGZvciAndycgYW5kCi0gICAgICAgICd3YicsIGFuZCAnYScgYW5kICdhYicuCisgICAgICAgICd3YicsICdhJyBhbmQgJ2FiJywgYW5kICd4JyBhbmQgJ3hiJy4KIAogICAgICAgICBUaGUgY29tcHJlc3NsZXZlbCBhcmd1bWVudCBpcyBhbiBpbnRlZ2VyIGZyb20gMCB0byA5IGNvbnRyb2xsaW5nIHRoZQogICAgICAgICBsZXZlbCBvZiBjb21wcmVzc2lvbjsgMSBpcyBmYXN0ZXN0IGFuZCBwcm9kdWNlcyB0aGUgbGVhc3QgY29tcHJlc3Npb24sCkBAIC0yMDQsNyArMjAxLDcgQEAKICAgICAgICAgICAgIHNlbGYubWluX3JlYWRzaXplID0gMTAwCiAgICAgICAgICAgICBmaWxlb2JqID0gX1BhZGRlZEZpbGUoZmlsZW9iaikKIAotICAgICAgICBlbGlmIG1vZGUuc3RhcnRzd2l0aCgoJ3cnLCAnYScpKToKKyAgICAgICAgZWxpZiBtb2RlLnN0YXJ0c3dpdGgoKCd3JywgJ2EnLCAneCcpKToKICAgICAgICAgICAgIHNlbGYubW9kZSA9IFdSSVRFCiAgICAgICAgICAgICBzZWxmLl9pbml0X3dyaXRlKGZpbGVuYW1lKQogICAgICAgICAgICAgc2VsZi5jb21wcmVzcyA9IHpsaWIuY29tcHJlc3NvYmooY29tcHJlc3NsZXZlbCwKQEAgLTI4MSwyOCArMjc4LDMyIEBACiAgICAgICAgIHNlbGYuY3JjID0gemxpYi5jcmMzMihiIiIpICYgMHhmZmZmZmZmZgogICAgICAgICBzZWxmLnNpemUgPSAwCiAKKyAgICBkZWYgX3JlYWRfZXhhY3Qoc2VsZiwgbik6CisgICAgICAgIGRhdGEgPSBzZWxmLmZpbGVvYmoucmVhZChuKQorICAgICAgICB3aGlsZSBsZW4oZGF0YSkgPCBuOgorICAgICAgICAgICAgYiA9IHNlbGYuZmlsZW9iai5yZWFkKG4gLSBsZW4oZGF0YSkpCisgICAgICAgICAgICBpZiBub3QgYjoKKyAgICAgICAgICAgICAgICByYWlzZSBFT0ZFcnJvcigiQ29tcHJlc3NlZCBmaWxlIGVuZGVkIGJlZm9yZSB0aGUgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlbmQtb2Ytc3RyZWFtIG1hcmtlciB3YXMgcmVhY2hlZCIpCisgICAgICAgICAgICBkYXRhICs9IGIKKyAgICAgICAgcmV0dXJuIGRhdGEKKwogICAgIGRlZiBfcmVhZF9nemlwX2hlYWRlcihzZWxmKToKICAgICAgICAgbWFnaWMgPSBzZWxmLmZpbGVvYmoucmVhZCgyKQogICAgICAgICBpZiBtYWdpYyA9PSBiJyc6Ci0gICAgICAgICAgICByYWlzZSBFT0ZFcnJvcigiUmVhY2hlZCBFT0YiKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAKICAgICAgICAgaWYgbWFnaWMgIT0gYidcMDM3XDIxMyc6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCdOb3QgYSBnemlwcGVkIGZpbGUnKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcignTm90IGEgZ3ppcHBlZCBmaWxlJykKIAotICAgICAgICBtZXRob2QgPSBvcmQoIHNlbGYuZmlsZW9iai5yZWFkKDEpICkKKyAgICAgICAgbWV0aG9kLCBmbGFnLCBzZWxmLm10aW1lID0gc3RydWN0LnVucGFjaygiPEJCSXh4Iiwgc2VsZi5fcmVhZF9leGFjdCg4KSkKICAgICAgICAgaWYgbWV0aG9kICE9IDg6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCdVbmtub3duIGNvbXByZXNzaW9uIG1ldGhvZCcpCi0gICAgICAgIGZsYWcgPSBvcmQoIHNlbGYuZmlsZW9iai5yZWFkKDEpICkKLSAgICAgICAgc2VsZi5tdGltZSA9IHJlYWQzMihzZWxmLmZpbGVvYmopCi0gICAgICAgICMgZXh0cmFmbGFnID0gc2VsZi5maWxlb2JqLnJlYWQoMSkKLSAgICAgICAgIyBvcyA9IHNlbGYuZmlsZW9iai5yZWFkKDEpCi0gICAgICAgIHNlbGYuZmlsZW9iai5yZWFkKDIpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCdVbmtub3duIGNvbXByZXNzaW9uIG1ldGhvZCcpCiAKICAgICAgICAgaWYgZmxhZyAmIEZFWFRSQToKICAgICAgICAgICAgICMgUmVhZCAmIGRpc2NhcmQgdGhlIGV4dHJhIGZpZWxkLCBpZiBwcmVzZW50Ci0gICAgICAgICAgICB4bGVuID0gb3JkKHNlbGYuZmlsZW9iai5yZWFkKDEpKQotICAgICAgICAgICAgeGxlbiA9IHhsZW4gKyAyNTYqb3JkKHNlbGYuZmlsZW9iai5yZWFkKDEpKQotICAgICAgICAgICAgc2VsZi5maWxlb2JqLnJlYWQoeGxlbikKKyAgICAgICAgICAgIGV4dHJhX2xlbiwgPSBzdHJ1Y3QudW5wYWNrKCI8SCIsIHNlbGYuX3JlYWRfZXhhY3QoMikpCisgICAgICAgICAgICBzZWxmLl9yZWFkX2V4YWN0KGV4dHJhX2xlbikKICAgICAgICAgaWYgZmxhZyAmIEZOQU1FOgogICAgICAgICAgICAgIyBSZWFkIGFuZCBkaXNjYXJkIGEgbnVsbC10ZXJtaW5hdGVkIHN0cmluZyBjb250YWluaW5nIHRoZSBmaWxlbmFtZQogICAgICAgICAgICAgd2hpbGUgVHJ1ZToKQEAgLTMxNiwxOCArMzE3LDE5IEBACiAgICAgICAgICAgICAgICAgaWYgbm90IHMgb3Igcz09YidcMDAwJzoKICAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgaWYgZmxhZyAmIEZIQ1JDOgotICAgICAgICAgICAgc2VsZi5maWxlb2JqLnJlYWQoMikgICAgICMgUmVhZCAmIGRpc2NhcmQgdGhlIDE2LWJpdCBoZWFkZXIgQ1JDCisgICAgICAgICAgICBzZWxmLl9yZWFkX2V4YWN0KDIpICAgICAjIFJlYWQgJiBkaXNjYXJkIHRoZSAxNi1iaXQgaGVhZGVyIENSQwogCiAgICAgICAgIHVudXNlZCA9IHNlbGYuZmlsZW9iai51bnVzZWQoKQogICAgICAgICBpZiB1bnVzZWQ6CiAgICAgICAgICAgICB1bmNvbXByZXNzID0gc2VsZi5kZWNvbXByZXNzLmRlY29tcHJlc3ModW51c2VkKQogICAgICAgICAgICAgc2VsZi5fYWRkX3JlYWRfZGF0YSh1bmNvbXByZXNzKQorICAgICAgICByZXR1cm4gVHJ1ZQogCiAgICAgZGVmIHdyaXRlKHNlbGYsZGF0YSk6CiAgICAgICAgIHNlbGYuX2NoZWNrX2Nsb3NlZCgpCiAgICAgICAgIGlmIHNlbGYubW9kZSAhPSBXUklURToKICAgICAgICAgICAgIGltcG9ydCBlcnJubwotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcihlcnJuby5FQkFERiwgIndyaXRlKCkgb24gcmVhZC1vbmx5IEd6aXBGaWxlIG9iamVjdCIpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKGVycm5vLkVCQURGLCAid3JpdGUoKSBvbiByZWFkLW9ubHkgR3ppcEZpbGUgb2JqZWN0IikKIAogICAgICAgICBpZiBzZWxmLmZpbGVvYmogaXMgTm9uZToKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIndyaXRlKCkgb24gY2xvc2VkIEd6aXBGaWxlIG9iamVjdCIpCkBAIC0zMzcsOSArMzM5LDkgQEAKICAgICAgICAgICAgIGRhdGEgPSBkYXRhLnRvYnl0ZXMoKQogCiAgICAgICAgIGlmIGxlbihkYXRhKSA+IDA6Ci0gICAgICAgICAgICBzZWxmLnNpemUgPSBzZWxmLnNpemUgKyBsZW4oZGF0YSkKKyAgICAgICAgICAgIHNlbGYuZmlsZW9iai53cml0ZShzZWxmLmNvbXByZXNzLmNvbXByZXNzKGRhdGEpKQorICAgICAgICAgICAgc2VsZi5zaXplICs9IGxlbihkYXRhKQogICAgICAgICAgICAgc2VsZi5jcmMgPSB6bGliLmNyYzMyKGRhdGEsIHNlbGYuY3JjKSAmIDB4ZmZmZmZmZmYKLSAgICAgICAgICAgIHNlbGYuZmlsZW9iai53cml0ZSggc2VsZi5jb21wcmVzcy5jb21wcmVzcyhkYXRhKSApCiAgICAgICAgICAgICBzZWxmLm9mZnNldCArPSBsZW4oZGF0YSkKIAogICAgICAgICByZXR1cm4gbGVuKGRhdGEpCkBAIC0zNDgsMjcgKzM1MCwyMyBAQAogICAgICAgICBzZWxmLl9jaGVja19jbG9zZWQoKQogICAgICAgICBpZiBzZWxmLm1vZGUgIT0gUkVBRDoKICAgICAgICAgICAgIGltcG9ydCBlcnJubwotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcihlcnJuby5FQkFERiwgInJlYWQoKSBvbiB3cml0ZS1vbmx5IEd6aXBGaWxlIG9iamVjdCIpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKGVycm5vLkVCQURGLCAicmVhZCgpIG9uIHdyaXRlLW9ubHkgR3ppcEZpbGUgb2JqZWN0IikKIAogICAgICAgICBpZiBzZWxmLmV4dHJhc2l6ZSA8PSAwIGFuZCBzZWxmLmZpbGVvYmogaXMgTm9uZToKICAgICAgICAgICAgIHJldHVybiBiJycKIAogICAgICAgICByZWFkc2l6ZSA9IDEwMjQKICAgICAgICAgaWYgc2l6ZSA8IDA6ICAgICAgICAjIGdldCB0aGUgd2hvbGUgdGhpbmcKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgICAgICAgICBzZWxmLl9yZWFkKHJlYWRzaXplKQotICAgICAgICAgICAgICAgICAgICByZWFkc2l6ZSA9IG1pbihzZWxmLm1heF9yZWFkX2NodW5rLCByZWFkc2l6ZSAqIDIpCi0gICAgICAgICAgICBleGNlcHQgRU9GRXJyb3I6Ci0gICAgICAgICAgICAgICAgc2l6ZSA9IHNlbGYuZXh0cmFzaXplCisgICAgICAgICAgICB3aGlsZSBzZWxmLl9yZWFkKHJlYWRzaXplKToKKyAgICAgICAgICAgICAgICByZWFkc2l6ZSA9IG1pbihzZWxmLm1heF9yZWFkX2NodW5rLCByZWFkc2l6ZSAqIDIpCisgICAgICAgICAgICBzaXplID0gc2VsZi5leHRyYXNpemUKICAgICAgICAgZWxzZTogICAgICAgICAgICAgICAjIGp1c3QgZ2V0IHNvbWUgbW9yZSBvZiBpdAotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHdoaWxlIHNpemUgPiBzZWxmLmV4dHJhc2l6ZToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fcmVhZChyZWFkc2l6ZSkKLSAgICAgICAgICAgICAgICAgICAgcmVhZHNpemUgPSBtaW4oc2VsZi5tYXhfcmVhZF9jaHVuaywgcmVhZHNpemUgKiAyKQotICAgICAgICAgICAgZXhjZXB0IEVPRkVycm9yOgotICAgICAgICAgICAgICAgIGlmIHNpemUgPiBzZWxmLmV4dHJhc2l6ZToKLSAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IHNlbGYuZXh0cmFzaXplCisgICAgICAgICAgICB3aGlsZSBzaXplID4gc2VsZi5leHRyYXNpemU6CisgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuX3JlYWQocmVhZHNpemUpOgorICAgICAgICAgICAgICAgICAgICBpZiBzaXplID4gc2VsZi5leHRyYXNpemU6CisgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gc2VsZi5leHRyYXNpemUKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICByZWFkc2l6ZSA9IG1pbihzZWxmLm1heF9yZWFkX2NodW5rLCByZWFkc2l6ZSAqIDIpCiAKICAgICAgICAgb2Zmc2V0ID0gc2VsZi5vZmZzZXQgLSBzZWxmLmV4dHJhc3RhcnQKICAgICAgICAgY2h1bmsgPSBzZWxmLmV4dHJhYnVmW29mZnNldDogb2Zmc2V0ICsgc2l6ZV0KQEAgLTM4MSwxNyArMzc5LDE0IEBACiAgICAgICAgIHNlbGYuX2NoZWNrX2Nsb3NlZCgpCiAgICAgICAgIGlmIHNlbGYubW9kZSAhPSBSRUFEOgogICAgICAgICAgICAgaW1wb3J0IGVycm5vCi0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKGVycm5vLkVCQURGLCAicmVhZDEoKSBvbiB3cml0ZS1vbmx5IEd6aXBGaWxlIG9iamVjdCIpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKGVycm5vLkVCQURGLCAicmVhZDEoKSBvbiB3cml0ZS1vbmx5IEd6aXBGaWxlIG9iamVjdCIpCiAKICAgICAgICAgaWYgc2VsZi5leHRyYXNpemUgPD0gMCBhbmQgc2VsZi5maWxlb2JqIGlzIE5vbmU6CiAgICAgICAgICAgICByZXR1cm4gYicnCiAKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgIyBGb3IgY2VydGFpbiBpbnB1dCBkYXRhLCBhIHNpbmdsZSBjYWxsIHRvIF9yZWFkKCkgbWF5IG5vdCByZXR1cm4KLSAgICAgICAgICAgICMgYW55IGRhdGEuIEluIHRoaXMgY2FzZSwgcmV0cnkgdW50aWwgd2UgZ2V0IHNvbWUgZGF0YSBvciByZWFjaCBFT0YuCi0gICAgICAgICAgICB3aGlsZSBzZWxmLmV4dHJhc2l6ZSA8PSAwOgotICAgICAgICAgICAgICAgIHNlbGYuX3JlYWQoKQotICAgICAgICBleGNlcHQgRU9GRXJyb3I6CisgICAgICAgICMgRm9yIGNlcnRhaW4gaW5wdXQgZGF0YSwgYSBzaW5nbGUgY2FsbCB0byBfcmVhZCgpIG1heSBub3QgcmV0dXJuCisgICAgICAgICMgYW55IGRhdGEuIEluIHRoaXMgY2FzZSwgcmV0cnkgdW50aWwgd2UgZ2V0IHNvbWUgZGF0YSBvciByZWFjaCBFT0YuCisgICAgICAgIHdoaWxlIHNlbGYuZXh0cmFzaXplIDw9IDAgYW5kIHNlbGYuX3JlYWQoKToKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgaWYgc2l6ZSA8IDAgb3Igc2l6ZSA+IHNlbGYuZXh0cmFzaXplOgogICAgICAgICAgICAgc2l6ZSA9IHNlbGYuZXh0cmFzaXplCkBAIC00MDUsNyArNDAwLDcgQEAKICAgICBkZWYgcGVlayhzZWxmLCBuKToKICAgICAgICAgaWYgc2VsZi5tb2RlICE9IFJFQUQ6CiAgICAgICAgICAgICBpbXBvcnQgZXJybm8KLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoZXJybm8uRUJBREYsICJwZWVrKCkgb24gd3JpdGUtb25seSBHemlwRmlsZSBvYmplY3QiKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcihlcnJuby5FQkFERiwgInBlZWsoKSBvbiB3cml0ZS1vbmx5IEd6aXBGaWxlIG9iamVjdCIpCiAKICAgICAgICAgIyBEbyBub3QgcmV0dXJuIHJpZGljdWxvdXNseSBzbWFsbCBidWZmZXJzLCBmb3Igb25lIGNvbW1vbiBpZGlvbQogICAgICAgICAjIGlzIHRvIGNhbGwgcGVlaygxKSBhbmQgZXhwZWN0IG1vcmUgYnl0ZXMgaW4gcmV0dXJuLgpAQCAtNDE0LDEyICs0MDksOSBAQAogICAgICAgICBpZiBzZWxmLmV4dHJhc2l6ZSA9PSAwOgogICAgICAgICAgICAgaWYgc2VsZi5maWxlb2JqIGlzIE5vbmU6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGInJwotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICMgRW5zdXJlIHRoYXQgd2UgZG9uJ3QgcmV0dXJuIGIiIiBpZiB3ZSBoYXZlbid0IHJlYWNoZWQgRU9GLgotICAgICAgICAgICAgICAgIHdoaWxlIHNlbGYuZXh0cmFzaXplID09IDA6Ci0gICAgICAgICAgICAgICAgICAgICMgMTAyNCBpcyB0aGUgc2FtZSBidWZmZXJpbmcgaGV1cmlzdGljIHVzZWQgaW4gcmVhZCgpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuX3JlYWQobWF4KG4sIDEwMjQpKQotICAgICAgICAgICAgZXhjZXB0IEVPRkVycm9yOgorICAgICAgICAgICAgIyBFbnN1cmUgdGhhdCB3ZSBkb24ndCByZXR1cm4gYiIiIGlmIHdlIGhhdmVuJ3QgcmVhY2hlZCBFT0YuCisgICAgICAgICAgICAjIDEwMjQgaXMgdGhlIHNhbWUgYnVmZmVyaW5nIGhldXJpc3RpYyB1c2VkIGluIHJlYWQoKQorICAgICAgICAgICAgd2hpbGUgc2VsZi5leHRyYXNpemUgPT0gMCBhbmQgc2VsZi5fcmVhZChtYXgobiwgMTAyNCkpOgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgb2Zmc2V0ID0gc2VsZi5vZmZzZXQgLSBzZWxmLmV4dHJhc3RhcnQKICAgICAgICAgcmVtYWluaW5nID0gc2VsZi5leHRyYXNpemUKQEAgLTQzMiwxMyArNDI0LDE0IEBACiAKICAgICBkZWYgX3JlYWQoc2VsZiwgc2l6ZT0xMDI0KToKICAgICAgICAgaWYgc2VsZi5maWxlb2JqIGlzIE5vbmU6Ci0gICAgICAgICAgICByYWlzZSBFT0ZFcnJvcigiUmVhY2hlZCBFT0YiKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAKICAgICAgICAgaWYgc2VsZi5fbmV3X21lbWJlcjoKICAgICAgICAgICAgICMgSWYgdGhlIF9uZXdfbWVtYmVyIGZsYWcgaXMgc2V0LCB3ZSBoYXZlIHRvCiAgICAgICAgICAgICAjIGp1bXAgdG8gdGhlIG5leHQgbWVtYmVyLCBpZiB0aGVyZSBpcyBvbmUuCiAgICAgICAgICAgICBzZWxmLl9pbml0X3JlYWQoKQotICAgICAgICAgICAgc2VsZi5fcmVhZF9nemlwX2hlYWRlcigpCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5fcmVhZF9nemlwX2hlYWRlcigpOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICAgICAgc2VsZi5kZWNvbXByZXNzID0gemxpYi5kZWNvbXByZXNzb2JqKC16bGliLk1BWF9XQklUUykKICAgICAgICAgICAgIHNlbGYuX25ld19tZW1iZXIgPSBGYWxzZQogCkBAIC00NTUsNyArNDQ4LDcgQEAKICAgICAgICAgICAgIHNlbGYuZmlsZW9iai5wcmVwZW5kKHNlbGYuZGVjb21wcmVzcy51bnVzZWRfZGF0YSwgVHJ1ZSkKICAgICAgICAgICAgIHNlbGYuX3JlYWRfZW9mKCkKICAgICAgICAgICAgIHNlbGYuX2FkZF9yZWFkX2RhdGEoIHVuY29tcHJlc3MgKQotICAgICAgICAgICAgcmFpc2UgRU9GRXJyb3IoJ1JlYWNoZWQgRU9GJykKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQogCiAgICAgICAgIHVuY29tcHJlc3MgPSBzZWxmLmRlY29tcHJlc3MuZGVjb21wcmVzcyhidWYpCiAgICAgICAgIHNlbGYuX2FkZF9yZWFkX2RhdGEoIHVuY29tcHJlc3MgKQpAQCAtNDcxLDYgKzQ2NCw3IEBACiAgICAgICAgICAgICAjIGEgbmV3IG1lbWJlciBvbiB0aGUgbmV4dCBjYWxsCiAgICAgICAgICAgICBzZWxmLl9yZWFkX2VvZigpCiAgICAgICAgICAgICBzZWxmLl9uZXdfbWVtYmVyID0gVHJ1ZQorICAgICAgICByZXR1cm4gVHJ1ZQogCiAgICAgZGVmIF9hZGRfcmVhZF9kYXRhKHNlbGYsIGRhdGEpOgogICAgICAgICBzZWxmLmNyYyA9IHpsaWIuY3JjMzIoZGF0YSwgc2VsZi5jcmMpICYgMHhmZmZmZmZmZgpAQCAtNDg1LDEzICs0NzksMTIgQEAKICAgICAgICAgIyBXZSBjaGVjayB0aGUgdGhhdCB0aGUgY29tcHV0ZWQgQ1JDIGFuZCBzaXplIG9mIHRoZQogICAgICAgICAjIHVuY29tcHJlc3NlZCBkYXRhIG1hdGNoZXMgdGhlIHN0b3JlZCB2YWx1ZXMuICBOb3RlIHRoYXQgdGhlIHNpemUKICAgICAgICAgIyBzdG9yZWQgaXMgdGhlIHRydWUgZmlsZSBzaXplIG1vZCAyKiozMi4KLSAgICAgICAgY3JjMzIgPSByZWFkMzIoc2VsZi5maWxlb2JqKQotICAgICAgICBpc2l6ZSA9IHJlYWQzMihzZWxmLmZpbGVvYmopICAjIG1heSBleGNlZWQgMkdCCisgICAgICAgIGNyYzMyLCBpc2l6ZSA9IHN0cnVjdC51bnBhY2soIjxJSSIsIHNlbGYuX3JlYWRfZXhhY3QoOCkpCiAgICAgICAgIGlmIGNyYzMyICE9IHNlbGYuY3JjOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigiQ1JDIGNoZWNrIGZhaWxlZCAlcyAhPSAlcyIgJSAoaGV4KGNyYzMyKSwKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoIkNSQyBjaGVjayBmYWlsZWQgJXMgIT0gJXMiICUgKGhleChjcmMzMiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZXgoc2VsZi5jcmMpKSkKICAgICAgICAgZWxpZiBpc2l6ZSAhPSAoc2VsZi5zaXplICYgMHhmZmZmZmZmZik6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCJJbmNvcnJlY3QgbGVuZ3RoIG9mIGRhdGEgcHJvZHVjZWQiKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigiSW5jb3JyZWN0IGxlbmd0aCBvZiBkYXRhIHByb2R1Y2VkIikKIAogICAgICAgICAjIEd6aXAgZmlsZXMgY2FuIGJlIHBhZGRlZCB3aXRoIHplcm9lcyBhbmQgc3RpbGwgaGF2ZSBhcmNoaXZlcy4KICAgICAgICAgIyBDb25zdW1lIGFsbCB6ZXJvIGJ5dGVzIGFuZCBzZXQgdGhlIGZpbGUgcG9zaXRpb24gdG8gdGhlIGZpcnN0CkBAIC01MDcsMTkgKzUwMCwyMSBAQAogICAgICAgICByZXR1cm4gc2VsZi5maWxlb2JqIGlzIE5vbmUKIAogICAgIGRlZiBjbG9zZShzZWxmKToKLSAgICAgICAgaWYgc2VsZi5maWxlb2JqIGlzIE5vbmU6CisgICAgICAgIGZpbGVvYmogPSBzZWxmLmZpbGVvYmoKKyAgICAgICAgaWYgZmlsZW9iaiBpcyBOb25lOgogICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGlmIHNlbGYubW9kZSA9PSBXUklURToKLSAgICAgICAgICAgIHNlbGYuZmlsZW9iai53cml0ZShzZWxmLmNvbXByZXNzLmZsdXNoKCkpCi0gICAgICAgICAgICB3cml0ZTMydShzZWxmLmZpbGVvYmosIHNlbGYuY3JjKQotICAgICAgICAgICAgIyBzZWxmLnNpemUgbWF5IGV4Y2VlZCAyR0IsIG9yIGV2ZW4gNEdCCi0gICAgICAgICAgICB3cml0ZTMydShzZWxmLmZpbGVvYmosIHNlbGYuc2l6ZSAmIDB4ZmZmZmZmZmYpCi0gICAgICAgICAgICBzZWxmLmZpbGVvYmogPSBOb25lCi0gICAgICAgIGVsaWYgc2VsZi5tb2RlID09IFJFQUQ6Ci0gICAgICAgICAgICBzZWxmLmZpbGVvYmogPSBOb25lCi0gICAgICAgIGlmIHNlbGYubXlmaWxlb2JqOgotICAgICAgICAgICAgc2VsZi5teWZpbGVvYmouY2xvc2UoKQotICAgICAgICAgICAgc2VsZi5teWZpbGVvYmogPSBOb25lCisgICAgICAgIHNlbGYuZmlsZW9iaiA9IE5vbmUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgc2VsZi5tb2RlID09IFdSSVRFOgorICAgICAgICAgICAgICAgIGZpbGVvYmoud3JpdGUoc2VsZi5jb21wcmVzcy5mbHVzaCgpKQorICAgICAgICAgICAgICAgIHdyaXRlMzJ1KGZpbGVvYmosIHNlbGYuY3JjKQorICAgICAgICAgICAgICAgICMgc2VsZi5zaXplIG1heSBleGNlZWQgMkdCLCBvciBldmVuIDRHQgorICAgICAgICAgICAgICAgIHdyaXRlMzJ1KGZpbGVvYmosIHNlbGYuc2l6ZSAmIDB4ZmZmZmZmZmYpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBteWZpbGVvYmogPSBzZWxmLm15ZmlsZW9iagorICAgICAgICAgICAgaWYgbXlmaWxlb2JqOgorICAgICAgICAgICAgICAgIHNlbGYubXlmaWxlb2JqID0gTm9uZQorICAgICAgICAgICAgICAgIG15ZmlsZW9iai5jbG9zZSgpCiAKICAgICBkZWYgZmx1c2goc2VsZix6bGliX21vZGU9emxpYi5aX1NZTkNfRkxVU0gpOgogICAgICAgICBzZWxmLl9jaGVja19jbG9zZWQoKQpAQCAtNTQwLDcgKzUzNSw3IEBACiAgICAgICAgICcnJ1JldHVybiB0aGUgdW5jb21wcmVzc2VkIHN0cmVhbSBmaWxlIHBvc2l0aW9uIGluZGljYXRvciB0byB0aGUKICAgICAgICAgYmVnaW5uaW5nIG9mIHRoZSBmaWxlJycnCiAgICAgICAgIGlmIHNlbGYubW9kZSAhPSBSRUFEOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigiQ2FuJ3QgcmV3aW5kIGluIHdyaXRlIG1vZGUiKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigiQ2FuJ3QgcmV3aW5kIGluIHdyaXRlIG1vZGUiKQogICAgICAgICBzZWxmLmZpbGVvYmouc2VlaygwKQogICAgICAgICBzZWxmLl9uZXdfbWVtYmVyID0gVHJ1ZQogICAgICAgICBzZWxmLmV4dHJhYnVmID0gYiIiCkBAIC01NjUsNyArNTYwLDcgQEAKICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdTZWVrIGZyb20gZW5kIG5vdCBzdXBwb3J0ZWQnKQogICAgICAgICBpZiBzZWxmLm1vZGUgPT0gV1JJVEU6CiAgICAgICAgICAgICBpZiBvZmZzZXQgPCBzZWxmLm9mZnNldDoKLSAgICAgICAgICAgICAgICByYWlzZSBJT0Vycm9yKCdOZWdhdGl2ZSBzZWVrIGluIHdyaXRlIG1vZGUnKQorICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoJ05lZ2F0aXZlIHNlZWsgaW4gd3JpdGUgbW9kZScpCiAgICAgICAgICAgICBjb3VudCA9IG9mZnNldCAtIHNlbGYub2Zmc2V0CiAgICAgICAgICAgICBjaHVuayA9IGJ5dGVzKDEwMjQpCiAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShjb3VudCAvLyAxMDI0KToKZGlmZiAtLWdpdCBhL0xpYi9oYXNobGliLnB5IGIvTGliL2hhc2hsaWIucHkKaW5kZXggMjE0NTRjNy4uMzE2Y2VjZSAxMDA2NDQKLS0tIGEvTGliL2hhc2hsaWIucHkKKysrIGIvTGliL2hhc2hsaWIucHkKQEAgLTEsNCArMSw0IEBACi0jICBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMCAgIEdyZWdvcnkgUC4gU21pdGggKGdyZWdAa3J5cHRvLm9yZykKKyMuICBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMCAgIEdyZWdvcnkgUC4gU21pdGggKGdyZWdAa3J5cHRvLm9yZykKICMgIExpY2Vuc2VkIHRvIFBTRiB1bmRlciBhIENvbnRyaWJ1dG9yIEFncmVlbWVudC4KICMKIApAQCAtNjAsMzQgKzYwLDM4IEBACiBhbGdvcml0aG1zX2F2YWlsYWJsZSA9IHNldChfX2Fsd2F5c19zdXBwb3J0ZWQpCiAKIF9fYWxsX18gPSBfX2Fsd2F5c19zdXBwb3J0ZWQgKyAoJ25ldycsICdhbGdvcml0aG1zX2d1YXJhbnRlZWQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYWxnb3JpdGhtc19hdmFpbGFibGUnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYWxnb3JpdGhtc19hdmFpbGFibGUnLCAncGJrZGYyX2htYWMnKQogCiAKK19fYnVpbHRpbl9jb25zdHJ1Y3Rvcl9jYWNoZSA9IHt9CisKIGRlZiBfX2dldF9idWlsdGluX2NvbnN0cnVjdG9yKG5hbWUpOgorICAgIGNhY2hlID0gX19idWlsdGluX2NvbnN0cnVjdG9yX2NhY2hlCisgICAgY29uc3RydWN0b3IgPSBjYWNoZS5nZXQobmFtZSkKKyAgICBpZiBjb25zdHJ1Y3RvciBpcyBub3QgTm9uZToKKyAgICAgICAgcmV0dXJuIGNvbnN0cnVjdG9yCiAgICAgdHJ5OgogICAgICAgICBpZiBuYW1lIGluICgnU0hBMScsICdzaGExJyk6CiAgICAgICAgICAgICBpbXBvcnQgX3NoYTEKLSAgICAgICAgICAgIHJldHVybiBfc2hhMS5zaGExCisgICAgICAgICAgICBjYWNoZVsnU0hBMSddID0gY2FjaGVbJ3NoYTEnXSA9IF9zaGExLnNoYTEKICAgICAgICAgZWxpZiBuYW1lIGluICgnTUQ1JywgJ21kNScpOgogICAgICAgICAgICAgaW1wb3J0IF9tZDUKLSAgICAgICAgICAgIHJldHVybiBfbWQ1Lm1kNQorICAgICAgICAgICAgY2FjaGVbJ01ENSddID0gY2FjaGVbJ21kNSddID0gX21kNS5tZDUKICAgICAgICAgZWxpZiBuYW1lIGluICgnU0hBMjU2JywgJ3NoYTI1NicsICdTSEEyMjQnLCAnc2hhMjI0Jyk6CiAgICAgICAgICAgICBpbXBvcnQgX3NoYTI1NgotICAgICAgICAgICAgYnMgPSBuYW1lWzM6XQotICAgICAgICAgICAgaWYgYnMgPT0gJzI1Nic6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIF9zaGEyNTYuc2hhMjU2Ci0gICAgICAgICAgICBlbGlmIGJzID09ICcyMjQnOgotICAgICAgICAgICAgICAgIHJldHVybiBfc2hhMjU2LnNoYTIyNAorICAgICAgICAgICAgY2FjaGVbJ1NIQTIyNCddID0gY2FjaGVbJ3NoYTIyNCddID0gX3NoYTI1Ni5zaGEyMjQKKyAgICAgICAgICAgIGNhY2hlWydTSEEyNTYnXSA9IGNhY2hlWydzaGEyNTYnXSA9IF9zaGEyNTYuc2hhMjU2CiAgICAgICAgIGVsaWYgbmFtZSBpbiAoJ1NIQTUxMicsICdzaGE1MTInLCAnU0hBMzg0JywgJ3NoYTM4NCcpOgogICAgICAgICAgICAgaW1wb3J0IF9zaGE1MTIKLSAgICAgICAgICAgIGJzID0gbmFtZVszOl0KLSAgICAgICAgICAgIGlmIGJzID09ICc1MTInOgotICAgICAgICAgICAgICAgIHJldHVybiBfc2hhNTEyLnNoYTUxMgotICAgICAgICAgICAgZWxpZiBicyA9PSAnMzg0JzoKLSAgICAgICAgICAgICAgICByZXR1cm4gX3NoYTUxMi5zaGEzODQKKyAgICAgICAgICAgIGNhY2hlWydTSEEzODQnXSA9IGNhY2hlWydzaGEzODQnXSA9IF9zaGE1MTIuc2hhMzg0CisgICAgICAgICAgICBjYWNoZVsnU0hBNTEyJ10gPSBjYWNoZVsnc2hhNTEyJ10gPSBfc2hhNTEyLnNoYTUxMgogICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICAgICAgcGFzcyAgIyBubyBleHRlbnNpb24gbW9kdWxlLCB0aGlzIGhhc2ggaXMgdW5zdXBwb3J0ZWQuCiAKKyAgICBjb25zdHJ1Y3RvciA9IGNhY2hlLmdldChuYW1lKQorICAgIGlmIGNvbnN0cnVjdG9yIGlzIG5vdCBOb25lOgorICAgICAgICByZXR1cm4gY29uc3RydWN0b3IKKwogICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3Vuc3VwcG9ydGVkIGhhc2ggdHlwZSAnICsgbmFtZSkKIAogCkBAIC0xMzQsNiArMTM4LDcxIEBACiAgICAgbmV3ID0gX19weV9uZXcKICAgICBfX2dldF9oYXNoID0gX19nZXRfYnVpbHRpbl9jb25zdHJ1Y3RvcgogCit0cnk6CisgICAgIyBPcGVuU1NMJ3MgUEtDUzVfUEJLREYyX0hNQUMgcmVxdWlyZXMgT3BlblNTTCAxLjArIHdpdGggSE1BQyBhbmQgU0hBCisgICAgZnJvbSBfaGFzaGxpYiBpbXBvcnQgcGJrZGYyX2htYWMKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBfdHJhbnNfNUMgPSBieXRlcygoeCBeIDB4NUMpIGZvciB4IGluIHJhbmdlKDI1NikpCisgICAgX3RyYW5zXzM2ID0gYnl0ZXMoKHggXiAweDM2KSBmb3IgeCBpbiByYW5nZSgyNTYpKQorCisgICAgZGVmIHBia2RmMl9obWFjKGhhc2hfbmFtZSwgcGFzc3dvcmQsIHNhbHQsIGl0ZXJhdGlvbnMsIGRrbGVuPU5vbmUpOgorICAgICAgICAiIiJQYXNzd29yZCBiYXNlZCBrZXkgZGVyaXZhdGlvbiBmdW5jdGlvbiAyIChQS0NTICM1IHYyLjApCisKKyAgICAgICAgVGhpcyBQeXRob24gaW1wbGVtZW50YXRpb25zIGJhc2VkIG9uIHRoZSBobWFjIG1vZHVsZSBhYm91dCBhcyBmYXN0CisgICAgICAgIGFzIE9wZW5TU0wncyBQS0NTNV9QQktERjJfSE1BQyBmb3Igc2hvcnQgcGFzc3dvcmRzIGFuZCBtdWNoIGZhc3RlcgorICAgICAgICBmb3IgbG9uZyBwYXNzd29yZHMuCisgICAgICAgICIiIgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShoYXNoX25hbWUsIHN0cik6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoaGFzaF9uYW1lKQorCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHBhc3N3b3JkLCAoYnl0ZXMsIGJ5dGVhcnJheSkpOgorICAgICAgICAgICAgcGFzc3dvcmQgPSBieXRlcyhtZW1vcnl2aWV3KHBhc3N3b3JkKSkKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uoc2FsdCwgKGJ5dGVzLCBieXRlYXJyYXkpKToKKyAgICAgICAgICAgIHNhbHQgPSBieXRlcyhtZW1vcnl2aWV3KHNhbHQpKQorCisgICAgICAgICMgRmFzdCBpbmxpbmUgSE1BQyBpbXBsZW1lbnRhdGlvbgorICAgICAgICBpbm5lciA9IG5ldyhoYXNoX25hbWUpCisgICAgICAgIG91dGVyID0gbmV3KGhhc2hfbmFtZSkKKyAgICAgICAgYmxvY2tzaXplID0gZ2V0YXR0cihpbm5lciwgJ2Jsb2NrX3NpemUnLCA2NCkKKyAgICAgICAgaWYgbGVuKHBhc3N3b3JkKSA+IGJsb2Nrc2l6ZToKKyAgICAgICAgICAgIHBhc3N3b3JkID0gbmV3KGhhc2hfbmFtZSwgcGFzc3dvcmQpLmRpZ2VzdCgpCisgICAgICAgIHBhc3N3b3JkID0gcGFzc3dvcmQgKyBiJ1x4MDAnICogKGJsb2Nrc2l6ZSAtIGxlbihwYXNzd29yZCkpCisgICAgICAgIGlubmVyLnVwZGF0ZShwYXNzd29yZC50cmFuc2xhdGUoX3RyYW5zXzM2KSkKKyAgICAgICAgb3V0ZXIudXBkYXRlKHBhc3N3b3JkLnRyYW5zbGF0ZShfdHJhbnNfNUMpKQorCisgICAgICAgIGRlZiBwcmYobXNnLCBpbm5lcj1pbm5lciwgb3V0ZXI9b3V0ZXIpOgorICAgICAgICAgICAgIyBQQktERjJfSE1BQyB1c2VzIHRoZSBwYXNzd29yZCBhcyBrZXkuIFdlIGNhbiByZS11c2UgdGhlIHNhbWUKKyAgICAgICAgICAgICMgZGlnZXN0IG9iamVjdHMgYW5kIGp1c3QgdXBkYXRlIGNvcGllcyB0byBza2lwIGluaXRpYWxpemF0aW9uLgorICAgICAgICAgICAgaWNweSA9IGlubmVyLmNvcHkoKQorICAgICAgICAgICAgb2NweSA9IG91dGVyLmNvcHkoKQorICAgICAgICAgICAgaWNweS51cGRhdGUobXNnKQorICAgICAgICAgICAgb2NweS51cGRhdGUoaWNweS5kaWdlc3QoKSkKKyAgICAgICAgICAgIHJldHVybiBvY3B5LmRpZ2VzdCgpCisKKyAgICAgICAgaWYgaXRlcmF0aW9ucyA8IDE6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKGl0ZXJhdGlvbnMpCisgICAgICAgIGlmIGRrbGVuIGlzIE5vbmU6CisgICAgICAgICAgICBka2xlbiA9IG91dGVyLmRpZ2VzdF9zaXplCisgICAgICAgIGlmIGRrbGVuIDwgMToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoZGtsZW4pCisKKyAgICAgICAgZGtleSA9IGInJworICAgICAgICBsb29wID0gMQorICAgICAgICBmcm9tX2J5dGVzID0gaW50LmZyb21fYnl0ZXMKKyAgICAgICAgd2hpbGUgbGVuKGRrZXkpIDwgZGtsZW46CisgICAgICAgICAgICBwcmV2ID0gcHJmKHNhbHQgKyBsb29wLnRvX2J5dGVzKDQsICdiaWcnKSkKKyAgICAgICAgICAgICMgZW5kaWFuZXNzIGRvZXNuJ3QgbWF0dGVyIGhlcmUgYXMgbG9uZyB0byAvIGZyb20gdXNlIHRoZSBzYW1lCisgICAgICAgICAgICBya2V5ID0gaW50LmZyb21fYnl0ZXMocHJldiwgJ2JpZycpCisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShpdGVyYXRpb25zIC0gMSk6CisgICAgICAgICAgICAgICAgcHJldiA9IHByZihwcmV2KQorICAgICAgICAgICAgICAgICMgcmtleSA9IHJrZXkgXiBwcmV2CisgICAgICAgICAgICAgICAgcmtleSBePSBmcm9tX2J5dGVzKHByZXYsICdiaWcnKQorICAgICAgICAgICAgbG9vcCArPSAxCisgICAgICAgICAgICBka2V5ICs9IHJrZXkudG9fYnl0ZXMoaW5uZXIuZGlnZXN0X3NpemUsICdiaWcnKQorCisgICAgICAgIHJldHVybiBka2V5Wzpka2xlbl0KKworCiBmb3IgX19mdW5jX25hbWUgaW4gX19hbHdheXNfc3VwcG9ydGVkOgogICAgICMgdHJ5IHRoZW0gYWxsLCBzb21lIG1heSBub3Qgd29yayBkdWUgdG8gdGhlIE9wZW5TU0wKICAgICAjIHZlcnNpb24gbm90IHN1cHBvcnRpbmcgdGhhdCBhbGdvcml0aG0uCmRpZmYgLS1naXQgYS9MaWIvaG1hYy5weSBiL0xpYi9obWFjLnB5CmluZGV4IDQyOTdhNzEuLjc3Nzg1YTIgMTAwNjQ0Ci0tLSBhL0xpYi9obWFjLnB5CisrKyBiL0xpYi9obWFjLnB5CkBAIC00LDcgKzQsOCBAQAogIiIiCiAKIGltcG9ydCB3YXJuaW5ncyBhcyBfd2FybmluZ3MKLWZyb20gb3BlcmF0b3IgaW1wb3J0IF9jb21wYXJlX2RpZ2VzdCBhcyBjb21wYXJlX2RpZ2VzdAorZnJvbSBfb3BlcmF0b3IgaW1wb3J0IF9jb21wYXJlX2RpZ2VzdCBhcyBjb21wYXJlX2RpZ2VzdAoraW1wb3J0IGhhc2hsaWIgYXMgX2hhc2hsaWIKIAogdHJhbnNfNUMgPSBieXRlcygoeCBeIDB4NUMpIGZvciB4IGluIHJhbmdlKDI1NikpCiB0cmFuc18zNiA9IGJ5dGVzKCh4IF4gMHgzNikgZm9yIHggaW4gcmFuZ2UoMjU2KSkKQEAgLTI4LDIxICsyOSwyNyBAQAogICAgICAgICBrZXk6ICAgICAgIGtleSBmb3IgdGhlIGtleWVkIGhhc2ggb2JqZWN0LgogICAgICAgICBtc2c6ICAgICAgIEluaXRpYWwgaW5wdXQgZm9yIHRoZSBoYXNoLCBpZiBwcm92aWRlZC4KICAgICAgICAgZGlnZXN0bW9kOiBBIG1vZHVsZSBzdXBwb3J0aW5nIFBFUCAyNDcuICAqT1IqCi0gICAgICAgICAgICAgICAgICAgQSBoYXNobGliIGNvbnN0cnVjdG9yIHJldHVybmluZyBhIG5ldyBoYXNoIG9iamVjdC4KKyAgICAgICAgICAgICAgICAgICBBIGhhc2hsaWIgY29uc3RydWN0b3IgcmV0dXJuaW5nIGEgbmV3IGhhc2ggb2JqZWN0LiAqT1IqCisgICAgICAgICAgICAgICAgICAgQSBoYXNoIG5hbWUgc3VpdGFibGUgZm9yIGhhc2hsaWIubmV3KCkuCiAgICAgICAgICAgICAgICAgICAgRGVmYXVsdHMgdG8gaGFzaGxpYi5tZDUuCisgICAgICAgICAgICAgICAgICAgSW1wbGljaXQgZGVmYXVsdCB0byBoYXNobGliLm1kNSBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlCisgICAgICAgICAgICAgICAgICAgcmVtb3ZlZCBpbiBQeXRob24gMy42LgogCi0gICAgICAgIE5vdGU6IGtleSBhbmQgbXNnIG11c3QgYmUgYnl0ZXMgb2JqZWN0cy4KKyAgICAgICAgTm90ZToga2V5IGFuZCBtc2cgbXVzdCBiZSBhIGJ5dGVzIG9yIGJ5dGVhcnJheSBvYmplY3RzLgogICAgICAgICAiIiIKIAotICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShrZXksIGJ5dGVzKToKLSAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigia2V5OiBleHBlY3RlZCBieXRlcywgYnV0IGdvdCAlciIgJSB0eXBlKGtleSkuX19uYW1lX18pCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGtleSwgKGJ5dGVzLCBieXRlYXJyYXkpKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigia2V5OiBleHBlY3RlZCBieXRlcyBvciBieXRlYXJyYXksIGJ1dCBnb3QgJXIiICUgdHlwZShrZXkpLl9fbmFtZV9fKQogCiAgICAgICAgIGlmIGRpZ2VzdG1vZCBpcyBOb25lOgotICAgICAgICAgICAgaW1wb3J0IGhhc2hsaWIKLSAgICAgICAgICAgIGRpZ2VzdG1vZCA9IGhhc2hsaWIubWQ1CisgICAgICAgICAgICBfd2FybmluZ3Mud2FybigiSE1BQygpIHdpdGhvdXQgYW4gZXhwbGljaXQgZGlnZXN0bW9kIGFyZ3VtZW50ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJpcyBkZXByZWNhdGVkLiIsIFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcsIDIpCisgICAgICAgICAgICBkaWdlc3Rtb2QgPSBfaGFzaGxpYi5tZDUKIAogICAgICAgICBpZiBjYWxsYWJsZShkaWdlc3Rtb2QpOgogICAgICAgICAgICAgc2VsZi5kaWdlc3RfY29ucyA9IGRpZ2VzdG1vZAorICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZGlnZXN0bW9kLCBzdHIpOgorICAgICAgICAgICAgc2VsZi5kaWdlc3RfY29ucyA9IGxhbWJkYSBkPWInJzogX2hhc2hsaWIubmV3KGRpZ2VzdG1vZCwgZCkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuZGlnZXN0X2NvbnMgPSBsYW1iZGEgZD1iJyc6IGRpZ2VzdG1vZC5uZXcoZCkKIApAQCAtNjMsNiArNzAsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJ1bnRpbWVXYXJuaW5nLCAyKQogICAgICAgICAgICAgYmxvY2tzaXplID0gc2VsZi5ibG9ja3NpemUKIAorICAgICAgICAjIHNlbGYuYmxvY2tzaXplIGlzIHRoZSBkZWZhdWx0IGJsb2Nrc2l6ZS4gc2VsZi5ibG9ja19zaXplIGlzCisgICAgICAgICMgZWZmZWN0aXZlIGJsb2NrIHNpemUgYXMgd2VsbCBhcyB0aGUgcHVibGljIEFQSSBhdHRyaWJ1dGUuCisgICAgICAgIHNlbGYuYmxvY2tfc2l6ZSA9IGJsb2Nrc2l6ZQorCiAgICAgICAgIGlmIGxlbihrZXkpID4gYmxvY2tzaXplOgogICAgICAgICAgICAga2V5ID0gc2VsZi5kaWdlc3RfY29ucyhrZXkpLmRpZ2VzdCgpCiAKQEAgLTcyLDExICs4MywxMyBAQAogICAgICAgICBpZiBtc2cgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBzZWxmLnVwZGF0ZShtc2cpCiAKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuICJobWFjLSIgKyBzZWxmLmlubmVyLm5hbWUKKwogICAgIGRlZiB1cGRhdGUoc2VsZiwgbXNnKToKICAgICAgICAgIiIiVXBkYXRlIHRoaXMgaGFzaGluZyBvYmplY3Qgd2l0aCB0aGUgc3RyaW5nIG1zZy4KICAgICAgICAgIiIiCi0gICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG1zZywgYnl0ZXMpOgotICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJleHBlY3RlZCBieXRlcywgYnV0IGdvdCAlciIgJSB0eXBlKG1zZykuX19uYW1lX18pCiAgICAgICAgIHNlbGYuaW5uZXIudXBkYXRlKG1zZykKIAogICAgIGRlZiBjb3B5KHNlbGYpOgpkaWZmIC0tZ2l0IGEvTGliL2h0bWwvX19pbml0X18ucHkgYi9MaWIvaHRtbC9fX2luaXRfXy5weQppbmRleCAwMjY1MmVmLi5kYTBhMGEzIDEwMDY0NAotLS0gYS9MaWIvaHRtbC9fX2luaXRfXy5weQorKysgYi9MaWIvaHRtbC9fX2luaXRfXy5weQpAQCAtMiwxMiArMiwxMiBAQAogR2VuZXJhbCBmdW5jdGlvbnMgZm9yIEhUTUwgbWFuaXB1bGF0aW9uLgogIiIiCiAKK2ltcG9ydCByZSBhcyBfcmUKK2Zyb20gaHRtbC5lbnRpdGllcyBpbXBvcnQgaHRtbDUgYXMgX2h0bWw1CiAKLV9lc2NhcGVfbWFwID0ge29yZCgnJicpOiAnJmFtcDsnLCBvcmQoJzwnKTogJyZsdDsnLCBvcmQoJz4nKTogJyZndDsnfQotX2VzY2FwZV9tYXBfZnVsbCA9IHtvcmQoJyYnKTogJyZhbXA7Jywgb3JkKCc8Jyk6ICcmbHQ7Jywgb3JkKCc+Jyk6ICcmZ3Q7JywKLSAgICAgICAgICAgICAgICAgICAgb3JkKCciJyk6ICcmcXVvdDsnLCBvcmQoJ1wnJyk6ICcmI3gyNzsnfQogCi0jIE5COiB0aGlzIGlzIGEgY2FuZGlkYXRlIGZvciBhIGJ5dGVzL3N0cmluZyBwb2x5bW9ycGhpYyBpbnRlcmZhY2UKK19fYWxsX18gPSBbJ2VzY2FwZScsICd1bmVzY2FwZSddCisKIAogZGVmIGVzY2FwZShzLCBxdW90ZT1UcnVlKToKICAgICAiIiIKQEAgLTE2LDYgKzE2LDExNyBAQAogICAgIGNoYXJhY3RlcnMsIGJvdGggZG91YmxlIHF1b3RlICgiKSBhbmQgc2luZ2xlIHF1b3RlICgnKSBjaGFyYWN0ZXJzIGFyZSBhbHNvCiAgICAgdHJhbnNsYXRlZC4KICAgICAiIiIKKyAgICBzID0gcy5yZXBsYWNlKCImIiwgIiZhbXA7IikgIyBNdXN0IGJlIGRvbmUgZmlyc3QhCisgICAgcyA9IHMucmVwbGFjZSgiPCIsICImbHQ7IikKKyAgICBzID0gcy5yZXBsYWNlKCI+IiwgIiZndDsiKQogICAgIGlmIHF1b3RlOgotICAgICAgICByZXR1cm4gcy50cmFuc2xhdGUoX2VzY2FwZV9tYXBfZnVsbCkKLSAgICByZXR1cm4gcy50cmFuc2xhdGUoX2VzY2FwZV9tYXApCisgICAgICAgIHMgPSBzLnJlcGxhY2UoJyInLCAiJnF1b3Q7IikKKyAgICAgICAgcyA9IHMucmVwbGFjZSgnXCcnLCAiJiN4Mjc7IikKKyAgICByZXR1cm4gcworCisKKyMgc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw1L3N5bnRheC5odG1sI3Rva2VuaXppbmctY2hhcmFjdGVyLXJlZmVyZW5jZXMKKworX2ludmFsaWRfY2hhcnJlZnMgPSB7CisgICAgMHgwMDogJ1x1ZmZmZCcsICAjIFJFUExBQ0VNRU5UIENIQVJBQ1RFUgorICAgIDB4MGQ6ICdccicsICAgICAgIyBDQVJSSUFHRSBSRVRVUk4KKyAgICAweDgwOiAnXHUyMGFjJywgICMgRVVSTyBTSUdOCisgICAgMHg4MTogJ1x4ODEnLCAgICAjIDxjb250cm9sPgorICAgIDB4ODI6ICdcdTIwMWEnLCAgIyBTSU5HTEUgTE9XLTkgUVVPVEFUSU9OIE1BUksKKyAgICAweDgzOiAnXHUwMTkyJywgICMgTEFUSU4gU01BTEwgTEVUVEVSIEYgV0lUSCBIT09LCisgICAgMHg4NDogJ1x1MjAxZScsICAjIERPVUJMRSBMT1ctOSBRVU9UQVRJT04gTUFSSworICAgIDB4ODU6ICdcdTIwMjYnLCAgIyBIT1JJWk9OVEFMIEVMTElQU0lTCisgICAgMHg4NjogJ1x1MjAyMCcsICAjIERBR0dFUgorICAgIDB4ODc6ICdcdTIwMjEnLCAgIyBET1VCTEUgREFHR0VSCisgICAgMHg4ODogJ1x1MDJjNicsICAjIE1PRElGSUVSIExFVFRFUiBDSVJDVU1GTEVYIEFDQ0VOVAorICAgIDB4ODk6ICdcdTIwMzAnLCAgIyBQRVIgTUlMTEUgU0lHTgorICAgIDB4OGE6ICdcdTAxNjAnLCAgIyBMQVRJTiBDQVBJVEFMIExFVFRFUiBTIFdJVEggQ0FST04KKyAgICAweDhiOiAnXHUyMDM5JywgICMgU0lOR0xFIExFRlQtUE9JTlRJTkcgQU5HTEUgUVVPVEFUSU9OIE1BUksKKyAgICAweDhjOiAnXHUwMTUyJywgICMgTEFUSU4gQ0FQSVRBTCBMSUdBVFVSRSBPRQorICAgIDB4OGQ6ICdceDhkJywgICAgIyA8Y29udHJvbD4KKyAgICAweDhlOiAnXHUwMTdkJywgICMgTEFUSU4gQ0FQSVRBTCBMRVRURVIgWiBXSVRIIENBUk9OCisgICAgMHg4ZjogJ1x4OGYnLCAgICAjIDxjb250cm9sPgorICAgIDB4OTA6ICdceDkwJywgICAgIyA8Y29udHJvbD4KKyAgICAweDkxOiAnXHUyMDE4JywgICMgTEVGVCBTSU5HTEUgUVVPVEFUSU9OIE1BUksKKyAgICAweDkyOiAnXHUyMDE5JywgICMgUklHSFQgU0lOR0xFIFFVT1RBVElPTiBNQVJLCisgICAgMHg5MzogJ1x1MjAxYycsICAjIExFRlQgRE9VQkxFIFFVT1RBVElPTiBNQVJLCisgICAgMHg5NDogJ1x1MjAxZCcsICAjIFJJR0hUIERPVUJMRSBRVU9UQVRJT04gTUFSSworICAgIDB4OTU6ICdcdTIwMjInLCAgIyBCVUxMRVQKKyAgICAweDk2OiAnXHUyMDEzJywgICMgRU4gREFTSAorICAgIDB4OTc6ICdcdTIwMTQnLCAgIyBFTSBEQVNICisgICAgMHg5ODogJ1x1MDJkYycsICAjIFNNQUxMIFRJTERFCisgICAgMHg5OTogJ1x1MjEyMicsICAjIFRSQURFIE1BUksgU0lHTgorICAgIDB4OWE6ICdcdTAxNjEnLCAgIyBMQVRJTiBTTUFMTCBMRVRURVIgUyBXSVRIIENBUk9OCisgICAgMHg5YjogJ1x1MjAzYScsICAjIFNJTkdMRSBSSUdIVC1QT0lOVElORyBBTkdMRSBRVU9UQVRJT04gTUFSSworICAgIDB4OWM6ICdcdTAxNTMnLCAgIyBMQVRJTiBTTUFMTCBMSUdBVFVSRSBPRQorICAgIDB4OWQ6ICdceDlkJywgICAgIyA8Y29udHJvbD4KKyAgICAweDllOiAnXHUwMTdlJywgICMgTEFUSU4gU01BTEwgTEVUVEVSIFogV0lUSCBDQVJPTgorICAgIDB4OWY6ICdcdTAxNzgnLCAgIyBMQVRJTiBDQVBJVEFMIExFVFRFUiBZIFdJVEggRElBRVJFU0lTCit9CisKK19pbnZhbGlkX2NvZGVwb2ludHMgPSB7CisgICAgIyAweDAwMDEgdG8gMHgwMDA4CisgICAgMHgxLCAweDIsIDB4MywgMHg0LCAweDUsIDB4NiwgMHg3LCAweDgsCisgICAgIyAweDAwMEUgdG8gMHgwMDFGCisgICAgMHhlLCAweGYsIDB4MTAsIDB4MTEsIDB4MTIsIDB4MTMsIDB4MTQsIDB4MTUsIDB4MTYsIDB4MTcsIDB4MTgsIDB4MTksCisgICAgMHgxYSwgMHgxYiwgMHgxYywgMHgxZCwgMHgxZSwgMHgxZiwKKyAgICAjIDB4MDA3RiB0byAweDAwOUYKKyAgICAweDdmLCAweDgwLCAweDgxLCAweDgyLCAweDgzLCAweDg0LCAweDg1LCAweDg2LCAweDg3LCAweDg4LCAweDg5LCAweDhhLAorICAgIDB4OGIsIDB4OGMsIDB4OGQsIDB4OGUsIDB4OGYsIDB4OTAsIDB4OTEsIDB4OTIsIDB4OTMsIDB4OTQsIDB4OTUsIDB4OTYsCisgICAgMHg5NywgMHg5OCwgMHg5OSwgMHg5YSwgMHg5YiwgMHg5YywgMHg5ZCwgMHg5ZSwgMHg5ZiwKKyAgICAjIDB4RkREMCB0byAweEZERUYKKyAgICAweGZkZDAsIDB4ZmRkMSwgMHhmZGQyLCAweGZkZDMsIDB4ZmRkNCwgMHhmZGQ1LCAweGZkZDYsIDB4ZmRkNywgMHhmZGQ4LAorICAgIDB4ZmRkOSwgMHhmZGRhLCAweGZkZGIsIDB4ZmRkYywgMHhmZGRkLCAweGZkZGUsIDB4ZmRkZiwgMHhmZGUwLCAweGZkZTEsCisgICAgMHhmZGUyLCAweGZkZTMsIDB4ZmRlNCwgMHhmZGU1LCAweGZkZTYsIDB4ZmRlNywgMHhmZGU4LCAweGZkZTksIDB4ZmRlYSwKKyAgICAweGZkZWIsIDB4ZmRlYywgMHhmZGVkLCAweGZkZWUsIDB4ZmRlZiwKKyAgICAjIG90aGVycworICAgIDB4YiwgMHhmZmZlLCAweGZmZmYsIDB4MWZmZmUsIDB4MWZmZmYsIDB4MmZmZmUsIDB4MmZmZmYsIDB4M2ZmZmUsIDB4M2ZmZmYsCisgICAgMHg0ZmZmZSwgMHg0ZmZmZiwgMHg1ZmZmZSwgMHg1ZmZmZiwgMHg2ZmZmZSwgMHg2ZmZmZiwgMHg3ZmZmZSwgMHg3ZmZmZiwKKyAgICAweDhmZmZlLCAweDhmZmZmLCAweDlmZmZlLCAweDlmZmZmLCAweGFmZmZlLCAweGFmZmZmLCAweGJmZmZlLCAweGJmZmZmLAorICAgIDB4Y2ZmZmUsIDB4Y2ZmZmYsIDB4ZGZmZmUsIDB4ZGZmZmYsIDB4ZWZmZmUsIDB4ZWZmZmYsIDB4ZmZmZmUsIDB4ZmZmZmYsCisgICAgMHgxMGZmZmUsIDB4MTBmZmZmCit9CisKKworZGVmIF9yZXBsYWNlX2NoYXJyZWYocyk6CisgICAgcyA9IHMuZ3JvdXAoMSkKKyAgICBpZiBzWzBdID09ICcjJzoKKyAgICAgICAgIyBudW1lcmljIGNoYXJyZWYKKyAgICAgICAgaWYgc1sxXSBpbiAneFgnOgorICAgICAgICAgICAgbnVtID0gaW50KHNbMjpdLnJzdHJpcCgnOycpLCAxNikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG51bSA9IGludChzWzE6XS5yc3RyaXAoJzsnKSkKKyAgICAgICAgaWYgbnVtIGluIF9pbnZhbGlkX2NoYXJyZWZzOgorICAgICAgICAgICAgcmV0dXJuIF9pbnZhbGlkX2NoYXJyZWZzW251bV0KKyAgICAgICAgaWYgMHhEODAwIDw9IG51bSA8PSAweERGRkYgb3IgbnVtID4gMHgxMEZGRkY6CisgICAgICAgICAgICByZXR1cm4gJ1x1RkZGRCcKKyAgICAgICAgaWYgbnVtIGluIF9pbnZhbGlkX2NvZGVwb2ludHM6CisgICAgICAgICAgICByZXR1cm4gJycKKyAgICAgICAgcmV0dXJuIGNocihudW0pCisgICAgZWxzZToKKyAgICAgICAgIyBuYW1lZCBjaGFycmVmCisgICAgICAgIGlmIHMgaW4gX2h0bWw1OgorICAgICAgICAgICAgcmV0dXJuIF9odG1sNVtzXQorICAgICAgICAjIGZpbmQgdGhlIGxvbmdlc3QgbWF0Y2hpbmcgbmFtZSAoYXMgZGVmaW5lZCBieSB0aGUgc3RhbmRhcmQpCisgICAgICAgIGZvciB4IGluIHJhbmdlKGxlbihzKS0xLCAxLCAtMSk6CisgICAgICAgICAgICBpZiBzWzp4XSBpbiBfaHRtbDU6CisgICAgICAgICAgICAgICAgcmV0dXJuIF9odG1sNVtzWzp4XV0gKyBzW3g6XQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuICcmJyArIHMKKworCitfY2hhcnJlZiA9IF9yZS5jb21waWxlKHInJigjWzAtOV0rOz8nCisgICAgICAgICAgICAgICAgICAgICAgIHInfCNbeFhdWzAtOWEtZkEtRl0rOz8nCisgICAgICAgICAgICAgICAgICAgICAgIHInfFteXHRcblxmIDwmIztdezEsMzJ9Oz8pJykKKworZGVmIHVuZXNjYXBlKHMpOgorICAgICIiIgorICAgIENvbnZlcnQgYWxsIG5hbWVkIGFuZCBudW1lcmljIGNoYXJhY3RlciByZWZlcmVuY2VzIChlLmcuICZndDssICYjNjI7LAorICAgICZ4M2U7KSBpbiB0aGUgc3RyaW5nIHMgdG8gdGhlIGNvcnJlc3BvbmRpbmcgdW5pY29kZSBjaGFyYWN0ZXJzLgorICAgIFRoaXMgZnVuY3Rpb24gdXNlcyB0aGUgcnVsZXMgZGVmaW5lZCBieSB0aGUgSFRNTCA1IHN0YW5kYXJkCisgICAgZm9yIGJvdGggdmFsaWQgYW5kIGludmFsaWQgY2hhcmFjdGVyIHJlZmVyZW5jZXMsIGFuZCB0aGUgbGlzdCBvZgorICAgIEhUTUwgNSBuYW1lZCBjaGFyYWN0ZXIgcmVmZXJlbmNlcyBkZWZpbmVkIGluIGh0bWwuZW50aXRpZXMuaHRtbDUuCisgICAgIiIiCisgICAgaWYgJyYnIG5vdCBpbiBzOgorICAgICAgICByZXR1cm4gcworICAgIHJldHVybiBfY2hhcnJlZi5zdWIoX3JlcGxhY2VfY2hhcnJlZiwgcykKZGlmZiAtLWdpdCBhL0xpYi9odG1sL2VudGl0aWVzLnB5IGIvTGliL2h0bWwvZW50aXRpZXMucHkKaW5kZXggZTg5MWFkNi4uYmUzZjYyNyAxMDA2NDQKLS0tIGEvTGliL2h0bWwvZW50aXRpZXMucHkKKysrIGIvTGliL2h0bWwvZW50aXRpZXMucHkKQEAgLTEsNiArMSw2IEBACiAiIiJIVE1MIGNoYXJhY3RlciBlbnRpdHkgcmVmZXJlbmNlcy4iIiIKIAotIyBtYXBzIHRoZSBIVE1MIGVudGl0eSBuYW1lIHRvIHRoZSBVbmljb2RlIGNvZGVwb2ludAorIyBtYXBzIHRoZSBIVE1MIGVudGl0eSBuYW1lIHRvIHRoZSBVbmljb2RlIGNvZGUgcG9pbnQKIG5hbWUyY29kZXBvaW50ID0gewogICAgICdBRWxpZyc6ICAgIDB4MDBjNiwgIyBsYXRpbiBjYXBpdGFsIGxldHRlciBBRSA9IGxhdGluIGNhcGl0YWwgbGlnYXR1cmUgQUUsIFUrMDBDNiBJU09sYXQxCiAgICAgJ0FhY3V0ZSc6ICAgMHgwMGMxLCAjIGxhdGluIGNhcGl0YWwgbGV0dGVyIEEgd2l0aCBhY3V0ZSwgVSswMEMxIElTT2xhdDEKQEAgLTIyMSw3ICsyMjEsNyBAQAogICAgICdzcGFkZXMnOiAgIDB4MjY2MCwgIyBibGFjayBzcGFkZSBzdWl0LCBVKzI2NjAgSVNPcHViCiAgICAgJ3N1Yic6ICAgICAgMHgyMjgyLCAjIHN1YnNldCBvZiwgVSsyMjgyIElTT3RlY2gKICAgICAnc3ViZSc6ICAgICAweDIyODYsICMgc3Vic2V0IG9mIG9yIGVxdWFsIHRvLCBVKzIyODYgSVNPdGVjaAotICAgICdzdW0nOiAgICAgIDB4MjIxMSwgIyBuLWFyeSBzdW1hdGlvbiwgVSsyMjExIElTT2Ftc2IKKyAgICAnc3VtJzogICAgICAweDIyMTEsICMgbi1hcnkgc3VtbWF0aW9uLCBVKzIyMTEgSVNPYW1zYgogICAgICdzdXAnOiAgICAgIDB4MjI4MywgIyBzdXBlcnNldCBvZiwgVSsyMjgzIElTT3RlY2gKICAgICAnc3VwMSc6ICAgICAweDAwYjksICMgc3VwZXJzY3JpcHQgb25lID0gc3VwZXJzY3JpcHQgZGlnaXQgb25lLCBVKzAwQjkgSVNPbnVtCiAgICAgJ3N1cDInOiAgICAgMHgwMGIyLCAjIHN1cGVyc2NyaXB0IHR3byA9IHN1cGVyc2NyaXB0IGRpZ2l0IHR3byA9IHNxdWFyZWQsIFUrMDBCMiBJU09udW0KQEAgLTI0OTIsNyArMjQ5Miw3IEBACiAgICAgJ3p3bmo7JzogJ1x1MjAwYycsCiB9CiAKLSMgbWFwcyB0aGUgVW5pY29kZSBjb2RlcG9pbnQgdG8gdGhlIEhUTUwgZW50aXR5IG5hbWUKKyMgbWFwcyB0aGUgVW5pY29kZSBjb2RlIHBvaW50IHRvIHRoZSBIVE1MIGVudGl0eSBuYW1lCiBjb2RlcG9pbnQybmFtZSA9IHt9CiAKICMgbWFwcyB0aGUgSFRNTCBlbnRpdHkgbmFtZSB0byB0aGUgY2hhcmFjdGVyCmRpZmYgLS1naXQgYS9MaWIvaHRtbC9wYXJzZXIucHkgYi9MaWIvaHRtbC9wYXJzZXIucHkKaW5kZXggNjNmZTc3NC4uOWFlMzFiOSAxMDA2NDQKLS0tIGEvTGliL2h0bWwvcGFyc2VyLnB5CisrKyBiL0xpYi9odG1sL3BhcnNlci5weQpAQCAtOCw5ICs4LDE0IEBACiAjIGFuZCBDREFUQSAoY2hhcmFjdGVyIGRhdGEgLS0gb25seSBlbmQgdGFncyBhcmUgc3BlY2lhbCkuCiAKIAotaW1wb3J0IF9tYXJrdXBiYXNlCiBpbXBvcnQgcmUKIGltcG9ydCB3YXJuaW5ncworaW1wb3J0IF9tYXJrdXBiYXNlCisKK2Zyb20gaHRtbCBpbXBvcnQgdW5lc2NhcGUKKworCitfX2FsbF9fID0gWydIVE1MUGFyc2VyJ10KIAogIyBSZWd1bGFyIGV4cHJlc3Npb25zIHVzZWQgZm9yIHBhcnNpbmcKIApAQCAtOTIsNiArOTcsOCBAQAogICAgICAgICByZXR1cm4gcmVzdWx0CiAKIAorX2RlZmF1bHRfc2VudGluZWwgPSBvYmplY3QoKQorCiBjbGFzcyBIVE1MUGFyc2VyKF9tYXJrdXBiYXNlLlBhcnNlckJhc2UpOgogICAgICIiIkZpbmQgdGFncyBhbmQgb3RoZXIgbWFya3VwIGFuZCBjYWxsIGhhbmRsZXIgZnVuY3Rpb25zLgogCkBAIC0xMDUsMjYgKzExMiwzOSBAQAogICAgIHNlbGYuaGFuZGxlX3N0YXJ0ZW5kdGFnKCk7IGVuZCB0YWdzIGJ5IHNlbGYuaGFuZGxlX2VuZHRhZygpLiAgVGhlCiAgICAgZGF0YSBiZXR3ZWVuIHRhZ3MgaXMgcGFzc2VkIGZyb20gdGhlIHBhcnNlciB0byB0aGUgZGVyaXZlZCBjbGFzcwogICAgIGJ5IGNhbGxpbmcgc2VsZi5oYW5kbGVfZGF0YSgpIHdpdGggdGhlIGRhdGEgYXMgYXJndW1lbnQgKHRoZSBkYXRhCi0gICAgbWF5IGJlIHNwbGl0IHVwIGluIGFyYml0cmFyeSBjaHVua3MpLiAgRW50aXR5IHJlZmVyZW5jZXMgYXJlCi0gICAgcGFzc2VkIGJ5IGNhbGxpbmcgc2VsZi5oYW5kbGVfZW50aXR5cmVmKCkgd2l0aCB0aGUgZW50aXR5Ci0gICAgcmVmZXJlbmNlIGFzIHRoZSBhcmd1bWVudC4gIE51bWVyaWMgY2hhcmFjdGVyIHJlZmVyZW5jZXMgYXJlCi0gICAgcGFzc2VkIHRvIHNlbGYuaGFuZGxlX2NoYXJyZWYoKSB3aXRoIHRoZSBzdHJpbmcgY29udGFpbmluZyB0aGUKLSAgICByZWZlcmVuY2UgYXMgdGhlIGFyZ3VtZW50LgorICAgIG1heSBiZSBzcGxpdCB1cCBpbiBhcmJpdHJhcnkgY2h1bmtzKS4gIElmIGNvbnZlcnRfY2hhcnJlZnMgaXMKKyAgICBUcnVlIHRoZSBjaGFyYWN0ZXIgcmVmZXJlbmNlcyBhcmUgY29udmVydGVkIGF1dG9tYXRpY2FsbHkgdG8gdGhlCisgICAgY29ycmVzcG9uZGluZyBVbmljb2RlIGNoYXJhY3RlciAoYW5kIHNlbGYuaGFuZGxlX2RhdGEoKSBpcyBubworICAgIGxvbmdlciBzcGxpdCBpbiBjaHVua3MpLCBvdGhlcndpc2UgdGhleSBhcmUgcGFzc2VkIGJ5IGNhbGxpbmcKKyAgICBzZWxmLmhhbmRsZV9lbnRpdHlyZWYoKSBvciBzZWxmLmhhbmRsZV9jaGFycmVmKCkgd2l0aCB0aGUgc3RyaW5nCisgICAgY29udGFpbmluZyByZXNwZWN0aXZlbHkgdGhlIG5hbWVkIG9yIG51bWVyaWMgcmVmZXJlbmNlIGFzIHRoZQorICAgIGFyZ3VtZW50LgogICAgICIiIgogCiAgICAgQ0RBVEFfQ09OVEVOVF9FTEVNRU5UUyA9ICgic2NyaXB0IiwgInN0eWxlIikKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzdHJpY3Q9RmFsc2UpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzdHJpY3Q9X2RlZmF1bHRfc2VudGluZWwsICosCisgICAgICAgICAgICAgICAgIGNvbnZlcnRfY2hhcnJlZnM9X2RlZmF1bHRfc2VudGluZWwpOgogICAgICAgICAiIiJJbml0aWFsaXplIGFuZCByZXNldCB0aGlzIGluc3RhbmNlLgogCisgICAgICAgIElmIGNvbnZlcnRfY2hhcnJlZnMgaXMgVHJ1ZSAoZGVmYXVsdDogRmFsc2UpLCBhbGwgY2hhcmFjdGVyIHJlZmVyZW5jZXMKKyAgICAgICAgYXJlIGF1dG9tYXRpY2FsbHkgY29udmVydGVkIHRvIHRoZSBjb3JyZXNwb25kaW5nIFVuaWNvZGUgY2hhcmFjdGVycy4KICAgICAgICAgSWYgc3RyaWN0IGlzIHNldCB0byBGYWxzZSAodGhlIGRlZmF1bHQpIHRoZSBwYXJzZXIgd2lsbCBwYXJzZSBpbnZhbGlkCiAgICAgICAgIG1hcmt1cCwgb3RoZXJ3aXNlIGl0IHdpbGwgcmFpc2UgYW4gZXJyb3IuICBOb3RlIHRoYXQgdGhlIHN0cmljdCBtb2RlCi0gICAgICAgIGlzIGRlcHJlY2F0ZWQuCisgICAgICAgIGFuZCBhcmd1bWVudCBhcmUgZGVwcmVjYXRlZC4KICAgICAgICAgIiIiCi0gICAgICAgIGlmIHN0cmljdDoKLSAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oIlRoZSBzdHJpY3QgbW9kZSBpcyBkZXByZWNhdGVkLiIsCisgICAgICAgIGlmIHN0cmljdCBpcyBub3QgX2RlZmF1bHRfc2VudGluZWw6CisgICAgICAgICAgICB3YXJuaW5ncy53YXJuKCJUaGUgc3RyaWN0IGFyZ3VtZW50IGFuZCBtb2RlIGFyZSBkZXByZWNhdGVkLiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgc3RhY2tsZXZlbD0yKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3RyaWN0ID0gRmFsc2UgICMgZGVmYXVsdAogICAgICAgICBzZWxmLnN0cmljdCA9IHN0cmljdAorICAgICAgICBpZiBjb252ZXJ0X2NoYXJyZWZzIGlzIF9kZWZhdWx0X3NlbnRpbmVsOgorICAgICAgICAgICAgY29udmVydF9jaGFycmVmcyA9IEZhbHNlICAjIGRlZmF1bHQKKyAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oIlRoZSB2YWx1ZSBvZiBjb252ZXJ0X2NoYXJyZWZzIHdpbGwgYmVjb21lIFRydWUgaW4gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiMy41LiBZb3UgYXJlIGVuY291cmFnZWQgdG8gc2V0IHRoZSB2YWx1ZSBleHBsaWNpdGx5LiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgc3RhY2tsZXZlbD0yKQorICAgICAgICBzZWxmLmNvbnZlcnRfY2hhcnJlZnMgPSBjb252ZXJ0X2NoYXJyZWZzCiAgICAgICAgIHNlbGYucmVzZXQoKQogCiAgICAgZGVmIHJlc2V0KHNlbGYpOgpAQCAtMTQ5LDYgKzE2OSw4IEBACiAgICAgICAgIHNlbGYuZ29haGVhZCgxKQogCiAgICAgZGVmIGVycm9yKHNlbGYsIG1lc3NhZ2UpOgorICAgICAgICB3YXJuaW5ncy53YXJuKCJUaGUgJ2Vycm9yJyBtZXRob2QgaXMgZGVwcmVjYXRlZC4iLAorICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgc3RhY2tsZXZlbD0yKQogICAgICAgICByYWlzZSBIVE1MUGFyc2VFcnJvcihtZXNzYWdlLCBzZWxmLmdldHBvcygpKQogCiAgICAgX19zdGFydHRhZ190ZXh0ID0gTm9uZQpAQCAtMTczLDE0ICsxOTUsMzMgQEAKICAgICAgICAgaSA9IDAKICAgICAgICAgbiA9IGxlbihyYXdkYXRhKQogICAgICAgICB3aGlsZSBpIDwgbjoKLSAgICAgICAgICAgIG1hdGNoID0gc2VsZi5pbnRlcmVzdGluZy5zZWFyY2gocmF3ZGF0YSwgaSkgIyA8IG9yICYKLSAgICAgICAgICAgIGlmIG1hdGNoOgotICAgICAgICAgICAgICAgIGogPSBtYXRjaC5zdGFydCgpCisgICAgICAgICAgICBpZiBzZWxmLmNvbnZlcnRfY2hhcnJlZnMgYW5kIG5vdCBzZWxmLmNkYXRhX2VsZW06CisgICAgICAgICAgICAgICAgaiA9IHJhd2RhdGEuZmluZCgnPCcsIGkpCisgICAgICAgICAgICAgICAgaWYgaiA8IDA6CisgICAgICAgICAgICAgICAgICAgICMgaWYgd2UgY2FuJ3QgZmluZCB0aGUgbmV4dCA8LCBlaXRoZXIgd2UgYXJlIGF0IHRoZSBlbmQKKyAgICAgICAgICAgICAgICAgICAgIyBvciB0aGVyZSdzIG1vcmUgdGV4dCBpbmNvbWluZy4gIElmIHRoZSBsYXR0ZXIgaXMgVHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgIyB3ZSBjYW4ndCBwYXNzIHRoZSB0ZXh0IHRvIGhhbmRsZV9kYXRhIGluIGNhc2Ugd2UgaGF2ZQorICAgICAgICAgICAgICAgICAgICAjIGEgY2hhcnJlZiBjdXQgaW4gaGFsZiBhdCBlbmQuICBUcnkgdG8gZGV0ZXJtaW5lIGlmCisgICAgICAgICAgICAgICAgICAgICMgdGhpcyBpcyB0aGUgY2FzZSBiZWZvcmUgcHJvY2VkaW5nIGJ5IGxvb2tpbmcgZm9yIGFuCisgICAgICAgICAgICAgICAgICAgICMgJiBuZWFyIHRoZSBlbmQgYW5kIHNlZSBpZiBpdCdzIGZvbGxvd2VkIGJ5IGEgc3BhY2Ugb3IgOy4KKyAgICAgICAgICAgICAgICAgICAgYW1wcG9zID0gcmF3ZGF0YS5yZmluZCgnJicsIG1heChpLCBuLTM0KSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKGFtcHBvcyA+PSAwIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgbm90IHJlLmNvbXBpbGUocidbXHM7XScpLnNlYXJjaChyYXdkYXRhLCBhbXBwb3MpKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrICAjIHdhaXQgdGlsbCB3ZSBnZXQgYWxsIHRoZSB0ZXh0CisgICAgICAgICAgICAgICAgICAgIGogPSBuCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGlmIHNlbGYuY2RhdGFfZWxlbToKLSAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICBqID0gbgotICAgICAgICAgICAgaWYgaSA8IGo6IHNlbGYuaGFuZGxlX2RhdGEocmF3ZGF0YVtpOmpdKQorICAgICAgICAgICAgICAgIG1hdGNoID0gc2VsZi5pbnRlcmVzdGluZy5zZWFyY2gocmF3ZGF0YSwgaSkgICMgPCBvciAmCisgICAgICAgICAgICAgICAgaWYgbWF0Y2g6CisgICAgICAgICAgICAgICAgICAgIGogPSBtYXRjaC5zdGFydCgpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5jZGF0YV9lbGVtOgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgaiA9IG4KKyAgICAgICAgICAgIGlmIGkgPCBqOgorICAgICAgICAgICAgICAgIGlmIHNlbGYuY29udmVydF9jaGFycmVmcyBhbmQgbm90IHNlbGYuY2RhdGFfZWxlbToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVfZGF0YSh1bmVzY2FwZShyYXdkYXRhW2k6al0pKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlX2RhdGEocmF3ZGF0YVtpOmpdKQogICAgICAgICAgICAgaSA9IHNlbGYudXBkYXRlcG9zKGksIGopCiAgICAgICAgICAgICBpZiBpID09IG46IGJyZWFrCiAgICAgICAgICAgICBzdGFydHN3aXRoID0gcmF3ZGF0YS5zdGFydHN3aXRoCkBAIC0yMTUsNyArMjU2LDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgayA9IGkgKyAxCiAgICAgICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgICAgICBrICs9IDEKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVfZGF0YShyYXdkYXRhW2k6a10pCisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuY29udmVydF9jaGFycmVmcyBhbmQgbm90IHNlbGYuY2RhdGFfZWxlbToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlX2RhdGEodW5lc2NhcGUocmF3ZGF0YVtpOmtdKSkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlX2RhdGEocmF3ZGF0YVtpOmtdKQogICAgICAgICAgICAgICAgIGkgPSBzZWxmLnVwZGF0ZXBvcyhpLCBrKQogICAgICAgICAgICAgZWxpZiBzdGFydHN3aXRoKCImIyIsIGkpOgogICAgICAgICAgICAgICAgIG1hdGNoID0gY2hhcnJlZi5tYXRjaChyYXdkYXRhLCBpKQpAQCAtMjY2LDcgKzMxMCwxMCBAQAogICAgICAgICAgICAgICAgIGFzc2VydCAwLCAiaW50ZXJlc3Rpbmcuc2VhcmNoKCkgbGllZCIKICAgICAgICAgIyBlbmQgd2hpbGUKICAgICAgICAgaWYgZW5kIGFuZCBpIDwgbiBhbmQgbm90IHNlbGYuY2RhdGFfZWxlbToKLSAgICAgICAgICAgIHNlbGYuaGFuZGxlX2RhdGEocmF3ZGF0YVtpOm5dKQorICAgICAgICAgICAgaWYgc2VsZi5jb252ZXJ0X2NoYXJyZWZzIGFuZCBub3Qgc2VsZi5jZGF0YV9lbGVtOgorICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlX2RhdGEodW5lc2NhcGUocmF3ZGF0YVtpOm5dKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVfZGF0YShyYXdkYXRhW2k6bl0pCiAgICAgICAgICAgICBpID0gc2VsZi51cGRhdGVwb3MoaSwgbikKICAgICAgICAgc2VsZi5yYXdkYXRhID0gcmF3ZGF0YVtpOl0KIApAQCAtMzQ5LDcgKzM5Niw3IEBACiAgICAgICAgICAgICAgICAgIGF0dHJ2YWx1ZVs6MV0gPT0gJyInID09IGF0dHJ2YWx1ZVstMTpdOgogICAgICAgICAgICAgICAgIGF0dHJ2YWx1ZSA9IGF0dHJ2YWx1ZVsxOi0xXQogICAgICAgICAgICAgaWYgYXR0cnZhbHVlOgotICAgICAgICAgICAgICAgIGF0dHJ2YWx1ZSA9IHNlbGYudW5lc2NhcGUoYXR0cnZhbHVlKQorICAgICAgICAgICAgICAgIGF0dHJ2YWx1ZSA9IHVuZXNjYXBlKGF0dHJ2YWx1ZSkKICAgICAgICAgICAgIGF0dHJzLmFwcGVuZCgoYXR0cm5hbWUubG93ZXIoKSwgYXR0cnZhbHVlKSkKICAgICAgICAgICAgIGsgPSBtLmVuZCgpCiAKQEAgLTUwNSwzMSArNTUyLDcgQEAKIAogICAgICMgSW50ZXJuYWwgLS0gaGVscGVyIHRvIHJlbW92ZSBzcGVjaWFsIGNoYXJhY3RlciBxdW90aW5nCiAgICAgZGVmIHVuZXNjYXBlKHNlbGYsIHMpOgotICAgICAgICBpZiAnJicgbm90IGluIHM6Ci0gICAgICAgICAgICByZXR1cm4gcwotICAgICAgICBkZWYgcmVwbGFjZUVudGl0aWVzKHMpOgotICAgICAgICAgICAgcyA9IHMuZ3JvdXBzKClbMF0KLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBpZiBzWzBdID09ICIjIjoKLSAgICAgICAgICAgICAgICAgICAgcyA9IHNbMTpdCi0gICAgICAgICAgICAgICAgICAgIGlmIHNbMF0gaW4gWyd4JywnWCddOgotICAgICAgICAgICAgICAgICAgICAgICAgYyA9IGludChzWzE6XS5yc3RyaXAoJzsnKSwgMTYpCi0gICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICBjID0gaW50KHMucnN0cmlwKCc7JykpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBjaHIoYykKLSAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgotICAgICAgICAgICAgICAgIHJldHVybiAnJiMnICsgcwotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBmcm9tIGh0bWwuZW50aXRpZXMgaW1wb3J0IGh0bWw1Ci0gICAgICAgICAgICAgICAgaWYgcyBpbiBodG1sNToKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGh0bWw1W3NdCi0gICAgICAgICAgICAgICAgZWxpZiBzLmVuZHN3aXRoKCc7Jyk6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAnJicgKyBzCi0gICAgICAgICAgICAgICAgZm9yIHggaW4gcmFuZ2UoMiwgbGVuKHMpKToKLSAgICAgICAgICAgICAgICAgICAgaWYgc1s6eF0gaW4gaHRtbDU6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaHRtbDVbc1s6eF1dICsgc1t4Ol0KLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gJyYnICsgcwotCi0gICAgICAgIHJldHVybiByZS5zdWIociImKCM/W3hYXT8oPzpbMC05YS1mQS1GXSs7fFx3ezEsMzJ9Oz8pKSIsCi0gICAgICAgICAgICAgICAgICAgICAgcmVwbGFjZUVudGl0aWVzLCBzLCBmbGFncz1yZS5BU0NJSSkKKyAgICAgICAgd2FybmluZ3Mud2FybignVGhlIHVuZXNjYXBlIG1ldGhvZCBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgJworICAgICAgICAgICAgICAgICAgICAgICdpbiAzLjUsIHVzZSBodG1sLnVuZXNjYXBlKCkgaW5zdGVhZC4nLAorICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgc3RhY2tsZXZlbD0yKQorICAgICAgICByZXR1cm4gdW5lc2NhcGUocykKZGlmZiAtLWdpdCBhL0xpYi9odHRwL2NsaWVudC5weSBiL0xpYi9odHRwL2NsaWVudC5weQppbmRleCBlMDVjODRkLi4xYzY5ZGNiIDEwMDY0NAotLS0gYS9MaWIvaHR0cC9jbGllbnQucHkKKysrIGIvTGliL2h0dHAvY2xpZW50LnB5CkBAIC03MCwxNyArNzAsMTkgQEAKIGltcG9ydCBlbWFpbC5tZXNzYWdlCiBpbXBvcnQgaW8KIGltcG9ydCBvcworaW1wb3J0IHJlCiBpbXBvcnQgc29ja2V0CiBpbXBvcnQgY29sbGVjdGlvbnMKIGZyb20gdXJsbGliLnBhcnNlIGltcG9ydCB1cmxzcGxpdAotaW1wb3J0IHdhcm5pbmdzCiAKKyMgSFRUUE1lc3NhZ2UsIHBhcnNlX2hlYWRlcnMoKSwgYW5kIHRoZSBIVFRQIHN0YXR1cyBjb2RlIGNvbnN0YW50cyBhcmUKKyMgaW50ZW50aW9uYWxseSBvbWl0dGVkIGZvciBzaW1wbGljaXR5CiBfX2FsbF9fID0gWyJIVFRQUmVzcG9uc2UiLCAiSFRUUENvbm5lY3Rpb24iLAogICAgICAgICAgICAiSFRUUEV4Y2VwdGlvbiIsICJOb3RDb25uZWN0ZWQiLCAiVW5rbm93blByb3RvY29sIiwKICAgICAgICAgICAgIlVua25vd25UcmFuc2ZlckVuY29kaW5nIiwgIlVuaW1wbGVtZW50ZWRGaWxlTW9kZSIsCiAgICAgICAgICAgICJJbmNvbXBsZXRlUmVhZCIsICJJbnZhbGlkVVJMIiwgIkltcHJvcGVyQ29ubmVjdGlvblN0YXRlIiwKICAgICAgICAgICAgIkNhbm5vdFNlbmRSZXF1ZXN0IiwgIkNhbm5vdFNlbmRIZWFkZXIiLCAiUmVzcG9uc2VOb3RSZWFkeSIsCi0gICAgICAgICAgICJCYWRTdGF0dXNMaW5lIiwgImVycm9yIiwgInJlc3BvbnNlcyJdCisgICAgICAgICAgICJCYWRTdGF0dXNMaW5lIiwgIkxpbmVUb29Mb25nIiwgImVycm9yIiwgInJlc3BvbnNlcyJdCiAKIEhUVFBfUE9SVCA9IDgwCiBIVFRQU19QT1JUID0gNDQzCkBAIC0yMTYsNiArMjE4LDM4IEBACiBfTUFYTElORSA9IDY1NTM2CiBfTUFYSEVBREVSUyA9IDEwMAogCisjIEhlYWRlciBuYW1lL3ZhbHVlIEFCTkYgKGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzAjc2VjdGlvbi0zLjIpCisjCisjIFZDSEFSICAgICAgICAgID0gJXgyMS03RQorIyBvYnMtdGV4dCAgICAgICA9ICV4ODAtRkYKKyMgaGVhZGVyLWZpZWxkICAgPSBmaWVsZC1uYW1lICI6IiBPV1MgZmllbGQtdmFsdWUgT1dTCisjIGZpZWxkLW5hbWUgICAgID0gdG9rZW4KKyMgZmllbGQtdmFsdWUgICAgPSAqKCBmaWVsZC1jb250ZW50IC8gb2JzLWZvbGQgKQorIyBmaWVsZC1jb250ZW50ICA9IGZpZWxkLXZjaGFyIFsgMSooIFNQIC8gSFRBQiApIGZpZWxkLXZjaGFyIF0KKyMgZmllbGQtdmNoYXIgICAgPSBWQ0hBUiAvIG9icy10ZXh0CisjCisjIG9icy1mb2xkICAgICAgID0gQ1JMRiAxKiggU1AgLyBIVEFCICkKKyMgICAgICAgICAgICAgICAgOyBvYnNvbGV0ZSBsaW5lIGZvbGRpbmcKKyMgICAgICAgICAgICAgICAgOyBzZWUgU2VjdGlvbiAzLjIuNAorCisjIHRva2VuICAgICAgICAgID0gMSp0Y2hhcgorIworIyB0Y2hhciAgICAgICAgICA9ICIhIiAvICIjIiAvICIkIiAvICIlIiAvICImIiAvICInIiAvICIqIgorIyAgICAgICAgICAgICAgICAvICIrIiAvICItIiAvICIuIiAvICJeIiAvICJfIiAvICJgIiAvICJ8IiAvICJ+IgorIyAgICAgICAgICAgICAgICAvIERJR0lUIC8gQUxQSEEKKyMgICAgICAgICAgICAgICAgOyBhbnkgVkNIQVIsIGV4Y2VwdCBkZWxpbWl0ZXJzCisjCisjIFZDSEFSIGRlZmluZWQgaW4gaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNTIzNCNhcHBlbmRpeC1CLjEKKworIyB0aGUgcGF0dGVybnMgZm9yIGJvdGggbmFtZSBhbmQgdmFsdWUgYXJlIG1vcmUgbGVuaWFudCB0aGFuIFJGQworIyBkZWZpbml0aW9ucyB0byBhbGxvdyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkKK19pc19sZWdhbF9oZWFkZXJfbmFtZSA9IHJlLmNvbXBpbGUocmInW146XHNdW146XHJcbl0qJykuZnVsbG1hdGNoCitfaXNfaWxsZWdhbF9oZWFkZXJfdmFsdWUgPSByZS5jb21waWxlKHJiJ1xuKD8hWyBcdF0pfFxyKD8hWyBcdFxuXSknKS5zZWFyY2gKKworIyBXZSBhbHdheXMgc2V0IHRoZSBDb250ZW50LUxlbmd0aCBoZWFkZXIgZm9yIHRoZXNlIG1ldGhvZHMgYmVjYXVzZSBzb21lCisjIHNlcnZlcnMgd2lsbCBvdGhlcndpc2UgcmVzcG9uZCB3aXRoIGEgNDExCitfTUVUSE9EU19FWFBFQ1RJTkdfQk9EWSA9IHsnUEFUQ0gnLCAnUE9TVCcsICdQVVQnfQorCiAKIGNsYXNzIEhUVFBNZXNzYWdlKGVtYWlsLm1lc3NhZ2UuTWVzc2FnZSk6CiAgICAgIyBYWFggVGhlIG9ubHkgdXNhZ2Ugb2YgdGhpcyBtZXRob2QgaXMgaW4KQEAgLTI3MSw4ICszMDUsNiBAQAogICAgIHJldHVybiBlbWFpbC5wYXJzZXIuUGFyc2VyKF9jbGFzcz1fY2xhc3MpLnBhcnNlc3RyKGhzdHJpbmcpCiAKIAotX3N0cmljdF9zZW50aW5lbCA9IG9iamVjdCgpCi0KIGNsYXNzIEhUVFBSZXNwb25zZShpby5SYXdJT0Jhc2UpOgogCiAgICAgIyBTZWUgUkZDIDI2MTYgc2VjIDE5LjYgYW5kIFJGQyAxOTQ1IHNlYyA2IGZvciBkZXRhaWxzLgpAQCAtMjgyLDcgKzMxNCw3IEBACiAgICAgIyB0ZXh0IGZvbGxvd2luZyBSRkMgMjA0Ny4gIFRoZSBiYXNpYyBzdGF0dXMgbGluZSBwYXJzaW5nIG9ubHkKICAgICAjIGFjY2VwdHMgaXNvLTg4NTktMS4KIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzb2NrLCBkZWJ1Z2xldmVsPTAsIHN0cmljdD1fc3RyaWN0X3NlbnRpbmVsLCBtZXRob2Q9Tm9uZSwgdXJsPU5vbmUpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzb2NrLCBkZWJ1Z2xldmVsPTAsIG1ldGhvZD1Ob25lLCB1cmw9Tm9uZSk6CiAgICAgICAgICMgSWYgdGhlIHJlc3BvbnNlIGluY2x1ZGVzIGEgY29udGVudC1sZW5ndGggaGVhZGVyLCB3ZSBuZWVkIHRvCiAgICAgICAgICMgbWFrZSBzdXJlIHRoYXQgdGhlIGNsaWVudCBkb2Vzbid0IHJlYWQgbW9yZSB0aGFuIHRoZQogICAgICAgICAjIHNwZWNpZmllZCBudW1iZXIgb2YgYnl0ZXMuICBJZiBpdCBkb2VzLCBpdCB3aWxsIGJsb2NrIHVudGlsCkBAIC0yOTIsMTAgKzMyNCw2IEBACiAgICAgICAgICMgY2xpZW50cyB1bmxlc3MgdGhleSBrbm93IHdoYXQgdGhleSBhcmUgZG9pbmcuCiAgICAgICAgIHNlbGYuZnAgPSBzb2NrLm1ha2VmaWxlKCJyYiIpCiAgICAgICAgIHNlbGYuZGVidWdsZXZlbCA9IGRlYnVnbGV2ZWwKLSAgICAgICAgaWYgc3RyaWN0IGlzIG5vdCBfc3RyaWN0X3NlbnRpbmVsOgotICAgICAgICAgICAgd2FybmluZ3Mud2FybigidGhlICdzdHJpY3QnIGFyZ3VtZW50IGlzbid0IHN1cHBvcnRlZCBhbnltb3JlOyAiCi0gICAgICAgICAgICAgICAgImh0dHAuY2xpZW50IG5vdyBhbHdheXMgYXNzdW1lcyBIVFRQLzEueCBjb21wbGlhbnQgc2VydmVycy4iLAotICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgMikKICAgICAgICAgc2VsZi5fbWV0aG9kID0gbWV0aG9kCiAKICAgICAgICAgIyBUaGUgSFRUUFJlc3BvbnNlIG9iamVjdCBpcyByZXR1cm5lZCB2aWEgdXJsbGliLiAgVGhlIGNsaWVudHMKQEAgLTQ2NCw5ICs0OTIsMTEgQEAKICAgICAgICAgZnAuY2xvc2UoKQogCiAgICAgZGVmIGNsb3NlKHNlbGYpOgotICAgICAgICBzdXBlcigpLmNsb3NlKCkgIyBzZXQgImNsb3NlZCIgZmxhZwotICAgICAgICBpZiBzZWxmLmZwOgotICAgICAgICAgICAgc2VsZi5fY2xvc2VfY29ubigpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN1cGVyKCkuY2xvc2UoKSAjIHNldCAiY2xvc2VkIiBmbGFnCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBpZiBzZWxmLmZwOgorICAgICAgICAgICAgICAgIHNlbGYuX2Nsb3NlX2Nvbm4oKQogCiAgICAgIyBUaGVzZSBpbXBsZW1lbnRhdGlvbnMgYXJlIGZvciB0aGUgYmVuZWZpdCBvZiBpby5CdWZmZXJlZFJlYWRlci4KIApAQCAtNzMyLDEzICs3NjIsMTcgQEAKICAgICBkZWZhdWx0X3BvcnQgPSBIVFRQX1BPUlQKICAgICBhdXRvX29wZW4gPSAxCiAgICAgZGVidWdsZXZlbCA9IDAKKyAgICAjIFRDUCBNYXhpbXVtIFNlZ21lbnQgU2l6ZSAoTVNTKSBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBUQ1Agc3RhY2sgb24KKyAgICAjIGEgcGVyLWNvbm5lY3Rpb24gYmFzaXMuICBUaGVyZSBpcyBubyBzaW1wbGUgYW5kIGVmZmljaWVudAorICAgICMgcGxhdGZvcm0gaW5kZXBlbmRlbnQgbWVjaGFuaXNtIGZvciBkZXRlcm1pbmluZyB0aGUgTVNTLCBzbworICAgICMgaW5zdGVhZCBhIHJlYXNvbmFibGUgZXN0aW1hdGUgaXMgY2hvc2VuLiAgVGhlIGdldHNvY2tvcHQoKQorICAgICMgaW50ZXJmYWNlIHVzaW5nIHRoZSBUQ1BfTUFYU0VHIHBhcmFtZXRlciBtYXkgYmUgYSBzdWl0YWJsZQorICAgICMgYXBwcm9hY2ggb24gc29tZSBvcGVyYXRpbmcgc3lzdGVtcy4gQSB2YWx1ZSBvZiAxNktpQiBpcyBjaG9zZW4KKyAgICAjIGFzIGEgcmVhc29uYWJsZSBlc3RpbWF0ZSBvZiB0aGUgbWF4aW11bSBNU1MuCisgICAgbXNzID0gMTYzODQKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBob3N0LCBwb3J0PU5vbmUsIHN0cmljdD1fc3RyaWN0X3NlbnRpbmVsLAotICAgICAgICAgICAgICAgICB0aW1lb3V0PXNvY2tldC5fR0xPQkFMX0RFRkFVTFRfVElNRU9VVCwgc291cmNlX2FkZHJlc3M9Tm9uZSk6Ci0gICAgICAgIGlmIHN0cmljdCBpcyBub3QgX3N0cmljdF9zZW50aW5lbDoKLSAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oInRoZSAnc3RyaWN0JyBhcmd1bWVudCBpc24ndCBzdXBwb3J0ZWQgYW55bW9yZTsgIgotICAgICAgICAgICAgICAgICJodHRwLmNsaWVudCBub3cgYWx3YXlzIGFzc3VtZXMgSFRUUC8xLnggY29tcGxpYW50IHNlcnZlcnMuIiwKLSAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcsIDIpCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGhvc3QsIHBvcnQ9Tm9uZSwgdGltZW91dD1zb2NrZXQuX0dMT0JBTF9ERUZBVUxUX1RJTUVPVVQsCisgICAgICAgICAgICAgICAgIHNvdXJjZV9hZGRyZXNzPU5vbmUpOgogICAgICAgICBzZWxmLnRpbWVvdXQgPSB0aW1lb3V0CiAgICAgICAgIHNlbGYuc291cmNlX2FkZHJlc3MgPSBzb3VyY2VfYWRkcmVzcwogICAgICAgICBzZWxmLnNvY2sgPSBOb25lCkBAIC03NTAsMjIgKzc4NCwzNyBAQAogICAgICAgICBzZWxmLl90dW5uZWxfcG9ydCA9IE5vbmUKICAgICAgICAgc2VsZi5fdHVubmVsX2hlYWRlcnMgPSB7fQogCi0gICAgICAgIHNlbGYuX3NldF9ob3N0cG9ydChob3N0LCBwb3J0KQorICAgICAgICAoc2VsZi5ob3N0LCBzZWxmLnBvcnQpID0gc2VsZi5fZ2V0X2hvc3Rwb3J0KGhvc3QsIHBvcnQpCisKKyAgICAgICAgIyBUaGlzIGlzIHN0b3JlZCBhcyBhbiBpbnN0YW5jZSB2YXJpYWJsZSB0byBhbGxvdyB1bml0CisgICAgICAgICMgdGVzdHMgdG8gcmVwbGFjZSBpdCB3aXRoIGEgc3VpdGFibGUgbW9ja3VwCisgICAgICAgIHNlbGYuX2NyZWF0ZV9jb25uZWN0aW9uID0gc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uCiAKICAgICBkZWYgc2V0X3R1bm5lbChzZWxmLCBob3N0LCBwb3J0PU5vbmUsIGhlYWRlcnM9Tm9uZSk6Ci0gICAgICAgICIiIiBTZXRzIHVwIHRoZSBob3N0IGFuZCB0aGUgcG9ydCBmb3IgdGhlIEhUVFAgQ09OTkVDVCBUdW5uZWxsaW5nLgorICAgICAgICAiIiJTZXQgdXAgaG9zdCBhbmQgcG9ydCBmb3IgSFRUUCBDT05ORUNUIHR1bm5lbGxpbmcuCiAKLSAgICAgICAgVGhlIGhlYWRlcnMgYXJndW1lbnQgc2hvdWxkIGJlIGEgbWFwcGluZyBvZiBleHRyYSBIVFRQIGhlYWRlcnMKLSAgICAgICAgdG8gc2VuZCB3aXRoIHRoZSBDT05ORUNUIHJlcXVlc3QuCisgICAgICAgIEluIGEgY29ubmVjdGlvbiB0aGF0IHVzZXMgSFRUUCBDT05ORUNUIHR1bm5lbGluZywgdGhlIGhvc3QgcGFzc2VkIHRvIHRoZQorICAgICAgICBjb25zdHJ1Y3RvciBpcyB1c2VkIGFzIGEgcHJveHkgc2VydmVyIHRoYXQgcmVsYXlzIGFsbCBjb21tdW5pY2F0aW9uIHRvCisgICAgICAgIHRoZSBlbmRwb2ludCBwYXNzZWQgdG8gYHNldF90dW5uZWxgLiBUaGlzIGRvbmUgYnkgc2VuZGluZyBhbiBIVFRQCisgICAgICAgIENPTk5FQ1QgcmVxdWVzdCB0byB0aGUgcHJveHkgc2VydmVyIHdoZW4gdGhlIGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQuCisKKyAgICAgICAgVGhpcyBtZXRob2QgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIHRoZSBIVE1MIGNvbm5lY3Rpb24gaGFzIGJlZW4KKyAgICAgICAgZXN0YWJsaXNoZWQuCisKKyAgICAgICAgVGhlIGhlYWRlcnMgYXJndW1lbnQgc2hvdWxkIGJlIGEgbWFwcGluZyBvZiBleHRyYSBIVFRQIGhlYWRlcnMgdG8gc2VuZAorICAgICAgICB3aXRoIHRoZSBDT05ORUNUIHJlcXVlc3QuCiAgICAgICAgICIiIgotICAgICAgICBzZWxmLl90dW5uZWxfaG9zdCA9IGhvc3QKLSAgICAgICAgc2VsZi5fdHVubmVsX3BvcnQgPSBwb3J0CisKKyAgICAgICAgaWYgc2VsZi5zb2NrOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJDYW4ndCBzZXQgdXAgdHVubmVsIGZvciBlc3RhYmxpc2hlZCBjb25uZWN0aW9uIikKKworICAgICAgICBzZWxmLl90dW5uZWxfaG9zdCwgc2VsZi5fdHVubmVsX3BvcnQgPSBzZWxmLl9nZXRfaG9zdHBvcnQoaG9zdCwgcG9ydCkKICAgICAgICAgaWYgaGVhZGVyczoKICAgICAgICAgICAgIHNlbGYuX3R1bm5lbF9oZWFkZXJzID0gaGVhZGVycwogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5fdHVubmVsX2hlYWRlcnMuY2xlYXIoKQogCi0gICAgZGVmIF9zZXRfaG9zdHBvcnQoc2VsZiwgaG9zdCwgcG9ydCk6CisgICAgZGVmIF9nZXRfaG9zdHBvcnQoc2VsZiwgaG9zdCwgcG9ydCk6CiAgICAgICAgIGlmIHBvcnQgaXMgTm9uZToKICAgICAgICAgICAgIGkgPSBob3N0LnJmaW5kKCc6JykKICAgICAgICAgICAgIGogPSBob3N0LnJmaW5kKCddJykgICAgICAgICAjIGlwdjYgYWRkcmVzc2VzIGhhdmUgWy4uLl0KQEAgLTc4MiwxNSArODMxLDE1IEBACiAgICAgICAgICAgICAgICAgcG9ydCA9IHNlbGYuZGVmYXVsdF9wb3J0CiAgICAgICAgICAgICBpZiBob3N0IGFuZCBob3N0WzBdID09ICdbJyBhbmQgaG9zdFstMV0gPT0gJ10nOgogICAgICAgICAgICAgICAgIGhvc3QgPSBob3N0WzE6LTFdCi0gICAgICAgIHNlbGYuaG9zdCA9IGhvc3QKLSAgICAgICAgc2VsZi5wb3J0ID0gcG9ydAorCisgICAgICAgIHJldHVybiAoaG9zdCwgcG9ydCkKIAogICAgIGRlZiBzZXRfZGVidWdsZXZlbChzZWxmLCBsZXZlbCk6CiAgICAgICAgIHNlbGYuZGVidWdsZXZlbCA9IGxldmVsCiAKICAgICBkZWYgX3R1bm5lbChzZWxmKToKLSAgICAgICAgc2VsZi5fc2V0X2hvc3Rwb3J0KHNlbGYuX3R1bm5lbF9ob3N0LCBzZWxmLl90dW5uZWxfcG9ydCkKLSAgICAgICAgY29ubmVjdF9zdHIgPSAiQ09OTkVDVCAlczolZCBIVFRQLzEuMFxyXG4iICUgKHNlbGYuaG9zdCwgc2VsZi5wb3J0KQorICAgICAgICBjb25uZWN0X3N0ciA9ICJDT05ORUNUICVzOiVkIEhUVFAvMS4wXHJcbiIgJSAoc2VsZi5fdHVubmVsX2hvc3QsCisgICAgICAgICAgICBzZWxmLl90dW5uZWxfcG9ydCkKICAgICAgICAgY29ubmVjdF9ieXRlcyA9IGNvbm5lY3Rfc3RyLmVuY29kZSgiYXNjaWkiKQogICAgICAgICBzZWxmLnNlbmQoY29ubmVjdF9ieXRlcykKICAgICAgICAgZm9yIGhlYWRlciwgdmFsdWUgaW4gc2VsZi5fdHVubmVsX2hlYWRlcnMuaXRlbXMoKToKQEAgLTgwNCw4ICs4NTMsOCBAQAogCiAgICAgICAgIGlmIGNvZGUgIT0gMjAwOgogICAgICAgICAgICAgc2VsZi5jbG9zZSgpCi0gICAgICAgICAgICByYWlzZSBzb2NrZXQuZXJyb3IoIlR1bm5lbCBjb25uZWN0aW9uIGZhaWxlZDogJWQgJXMiICUgKGNvZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc3RyaXAoKSkpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJUdW5uZWwgY29ubmVjdGlvbiBmYWlsZWQ6ICVkICVzIiAlIChjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zdHJpcCgpKSkKICAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgIGxpbmUgPSByZXNwb25zZS5mcC5yZWFkbGluZShfTUFYTElORSArIDEpCiAgICAgICAgICAgICBpZiBsZW4obGluZSkgPiBfTUFYTElORToKQEAgLTgxOCwyMCArODY3LDI1IEBACiAKICAgICBkZWYgY29ubmVjdChzZWxmKToKICAgICAgICAgIiIiQ29ubmVjdCB0byB0aGUgaG9zdCBhbmQgcG9ydCBzcGVjaWZpZWQgaW4gX19pbml0X18uIiIiCi0gICAgICAgIHNlbGYuc29jayA9IHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbigoc2VsZi5ob3N0LHNlbGYucG9ydCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRpbWVvdXQsIHNlbGYuc291cmNlX2FkZHJlc3MpCisgICAgICAgIHNlbGYuc29jayA9IHNlbGYuX2NyZWF0ZV9jb25uZWN0aW9uKChzZWxmLmhvc3Qsc2VsZi5wb3J0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50aW1lb3V0LCBzZWxmLnNvdXJjZV9hZGRyZXNzKQorCiAgICAgICAgIGlmIHNlbGYuX3R1bm5lbF9ob3N0OgogICAgICAgICAgICAgc2VsZi5fdHVubmVsKCkKIAogICAgIGRlZiBjbG9zZShzZWxmKToKICAgICAgICAgIiIiQ2xvc2UgdGhlIGNvbm5lY3Rpb24gdG8gdGhlIEhUVFAgc2VydmVyLiIiIgotICAgICAgICBpZiBzZWxmLnNvY2s6Ci0gICAgICAgICAgICBzZWxmLnNvY2suY2xvc2UoKSAgICMgY2xvc2UgaXQgbWFudWFsbHkuLi4gdGhlcmUgbWF5IGJlIG90aGVyIHJlZnMKLSAgICAgICAgICAgIHNlbGYuc29jayA9IE5vbmUKLSAgICAgICAgaWYgc2VsZi5fX3Jlc3BvbnNlOgotICAgICAgICAgICAgc2VsZi5fX3Jlc3BvbnNlLmNsb3NlKCkKLSAgICAgICAgICAgIHNlbGYuX19yZXNwb25zZSA9IE5vbmUKICAgICAgICAgc2VsZi5fX3N0YXRlID0gX0NTX0lETEUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc29jayA9IHNlbGYuc29jaworICAgICAgICAgICAgaWYgc29jazoKKyAgICAgICAgICAgICAgICBzZWxmLnNvY2sgPSBOb25lCisgICAgICAgICAgICAgICAgc29jay5jbG9zZSgpICAgIyBjbG9zZSBpdCBtYW51YWxseS4uLiB0aGVyZSBtYXkgYmUgb3RoZXIgcmVmcworICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgcmVzcG9uc2UgPSBzZWxmLl9fcmVzcG9uc2UKKyAgICAgICAgICAgIGlmIHJlc3BvbnNlOgorICAgICAgICAgICAgICAgIHNlbGYuX19yZXNwb25zZSA9IE5vbmUKKyAgICAgICAgICAgICAgICByZXNwb25zZS5jbG9zZSgpCiAKICAgICBkZWYgc2VuZChzZWxmLCBkYXRhKToKICAgICAgICAgIiIiU2VuZCBgZGF0YScgdG8gdGhlIHNlcnZlci4KQEAgLTg5OSw4ICs5NTMsMTEgQEAKICAgICAgICAgZGVsIHNlbGYuX2J1ZmZlcls6XQogICAgICAgICAjIElmIG1zZyBhbmQgbWVzc2FnZV9ib2R5IGFyZSBzZW50IGluIGEgc2luZ2xlIHNlbmQoKSBjYWxsLAogICAgICAgICAjIGl0IHdpbGwgYXZvaWQgcGVyZm9ybWFuY2UgcHJvYmxlbXMgY2F1c2VkIGJ5IHRoZSBpbnRlcmFjdGlvbgotICAgICAgICAjIGJldHdlZW4gZGVsYXllZCBhY2sgYW5kIHRoZSBOYWdsZSBhbGdvcml0aG0uCi0gICAgICAgIGlmIGlzaW5zdGFuY2UobWVzc2FnZV9ib2R5LCBieXRlcyk6CisgICAgICAgICMgYmV0d2VlbiBkZWxheWVkIGFjayBhbmQgdGhlIE5hZ2xlIGFsZ29yaXRobS4gSG93ZXZlciwKKyAgICAgICAgIyB0aGVyZSBpcyBubyBwZXJmb3JtYW5jZSBnYWluIGlmIHRoZSBtZXNzYWdlIGlzIGxhcmdlcgorICAgICAgICAjIHRoYW4gTVNTIChhbmQgdGhlcmUgaXMgYSBtZW1vcnkgcGVuYWx0eSBmb3IgdGhlIG1lc3NhZ2UKKyAgICAgICAgIyBjb3B5KS4KKyAgICAgICAgaWYgaXNpbnN0YW5jZShtZXNzYWdlX2JvZHksIGJ5dGVzKSBhbmQgbGVuKG1lc3NhZ2VfYm9keSkgPCBzZWxmLm1zczoKICAgICAgICAgICAgIG1zZyArPSBtZXNzYWdlX2JvZHkKICAgICAgICAgICAgIG1lc3NhZ2VfYm9keSA9IE5vbmUKICAgICAgICAgc2VsZi5zZW5kKG1zZykKQEAgLTk4NSwyMiArMTA0MiwyOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgbmV0bG9jX2VuYyA9IG5ldGxvYy5lbmNvZGUoImlkbmEiKQogICAgICAgICAgICAgICAgICAgICBzZWxmLnB1dGhlYWRlcignSG9zdCcsIG5ldGxvY19lbmMpCiAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5fdHVubmVsX2hvc3Q6CisgICAgICAgICAgICAgICAgICAgICAgICBob3N0ID0gc2VsZi5fdHVubmVsX2hvc3QKKyAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQgPSBzZWxmLl90dW5uZWxfcG9ydAorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgaG9zdCA9IHNlbGYuaG9zdAorICAgICAgICAgICAgICAgICAgICAgICAgcG9ydCA9IHNlbGYucG9ydAorCiAgICAgICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgICAgIGhvc3RfZW5jID0gc2VsZi5ob3N0LmVuY29kZSgiYXNjaWkiKQorICAgICAgICAgICAgICAgICAgICAgICAgaG9zdF9lbmMgPSBob3N0LmVuY29kZSgiYXNjaWkiKQogICAgICAgICAgICAgICAgICAgICBleGNlcHQgVW5pY29kZUVuY29kZUVycm9yOgotICAgICAgICAgICAgICAgICAgICAgICAgaG9zdF9lbmMgPSBzZWxmLmhvc3QuZW5jb2RlKCJpZG5hIikKKyAgICAgICAgICAgICAgICAgICAgICAgIGhvc3RfZW5jID0gaG9zdC5lbmNvZGUoImlkbmEiKQogCiAgICAgICAgICAgICAgICAgICAgICMgQXMgcGVyIFJGQyAyNzMsIElQdjYgYWRkcmVzcyBzaG91bGQgYmUgd3JhcHBlZCB3aXRoIFtdCiAgICAgICAgICAgICAgICAgICAgICMgd2hlbiB1c2VkIGFzIEhvc3QgaGVhZGVyCiAKLSAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5ob3N0LmZpbmQoJzonKSA+PSAwOgorICAgICAgICAgICAgICAgICAgICBpZiBob3N0LmZpbmQoJzonKSA+PSAwOgogICAgICAgICAgICAgICAgICAgICAgICAgaG9zdF9lbmMgPSBiJ1snICsgaG9zdF9lbmMgKyBiJ10nCiAKLSAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5wb3J0ID09IHNlbGYuZGVmYXVsdF9wb3J0OgorICAgICAgICAgICAgICAgICAgICBpZiBwb3J0ID09IHNlbGYuZGVmYXVsdF9wb3J0OgogICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wdXRoZWFkZXIoJ0hvc3QnLCBob3N0X2VuYykKICAgICAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgICAgIGhvc3RfZW5jID0gaG9zdF9lbmMuZGVjb2RlKCJhc2NpaSIpCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnB1dGhlYWRlcignSG9zdCcsICIlczolcyIgJSAoaG9zdF9lbmMsIHNlbGYucG9ydCkpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnB1dGhlYWRlcignSG9zdCcsICIlczolcyIgJSAoaG9zdF9lbmMsIHBvcnQpKQogCiAgICAgICAgICAgICAjIG5vdGU6IHdlIGFyZSBhc3N1bWluZyB0aGF0IGNsaWVudHMgd2lsbCBub3QgYXR0ZW1wdCB0byBzZXQgdGhlc2UKICAgICAgICAgICAgICMgICAgICAgaGVhZGVycyBzaW5jZSAqdGhpcyogbGlicmFyeSBtdXN0IGRlYWwgd2l0aCB0aGUKQEAgLTEwMzUsMTIgKzEwOTksMjAgQEAKIAogICAgICAgICBpZiBoYXNhdHRyKGhlYWRlciwgJ2VuY29kZScpOgogICAgICAgICAgICAgaGVhZGVyID0gaGVhZGVyLmVuY29kZSgnYXNjaWknKQorCisgICAgICAgIGlmIG5vdCBfaXNfbGVnYWxfaGVhZGVyX25hbWUoaGVhZGVyKToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0ludmFsaWQgaGVhZGVyIG5hbWUgJXInICUgKGhlYWRlciwpKQorCiAgICAgICAgIHZhbHVlcyA9IGxpc3QodmFsdWVzKQogICAgICAgICBmb3IgaSwgb25lX3ZhbHVlIGluIGVudW1lcmF0ZSh2YWx1ZXMpOgogICAgICAgICAgICAgaWYgaGFzYXR0cihvbmVfdmFsdWUsICdlbmNvZGUnKToKICAgICAgICAgICAgICAgICB2YWx1ZXNbaV0gPSBvbmVfdmFsdWUuZW5jb2RlKCdsYXRpbi0xJykKICAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShvbmVfdmFsdWUsIGludCk6CiAgICAgICAgICAgICAgICAgdmFsdWVzW2ldID0gc3RyKG9uZV92YWx1ZSkuZW5jb2RlKCdhc2NpaScpCisKKyAgICAgICAgICAgIGlmIF9pc19pbGxlZ2FsX2hlYWRlcl92YWx1ZSh2YWx1ZXNbaV0pOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0ludmFsaWQgaGVhZGVyIHZhbHVlICVyJyAlICh2YWx1ZXNbaV0sKSkKKwogICAgICAgICB2YWx1ZSA9IGInXHJcblx0Jy5qb2luKHZhbHVlcykKICAgICAgICAgaGVhZGVyID0gaGVhZGVyICsgYic6ICcgKyB2YWx1ZQogICAgICAgICBzZWxmLl9vdXRwdXQoaGVhZGVyKQpAQCAtMTA2NCwxOSArMTEzNiwyNiBAQAogICAgICAgICAiIiJTZW5kIGEgY29tcGxldGUgcmVxdWVzdCB0byB0aGUgc2VydmVyLiIiIgogICAgICAgICBzZWxmLl9zZW5kX3JlcXVlc3QobWV0aG9kLCB1cmwsIGJvZHksIGhlYWRlcnMpCiAKLSAgICBkZWYgX3NldF9jb250ZW50X2xlbmd0aChzZWxmLCBib2R5KToKLSAgICAgICAgIyBTZXQgdGhlIGNvbnRlbnQtbGVuZ3RoIGJhc2VkIG9uIHRoZSBib2R5LgorICAgIGRlZiBfc2V0X2NvbnRlbnRfbGVuZ3RoKHNlbGYsIGJvZHksIG1ldGhvZCk6CisgICAgICAgICMgU2V0IHRoZSBjb250ZW50LWxlbmd0aCBiYXNlZCBvbiB0aGUgYm9keS4gSWYgdGhlIGJvZHkgaXMgImVtcHR5Iiwgd2UKKyAgICAgICAgIyBzZXQgQ29udGVudC1MZW5ndGg6IDAgZm9yIG1ldGhvZHMgdGhhdCBleHBlY3QgYSBib2R5IChSRkMgNzIzMCwKKyAgICAgICAgIyBTZWN0aW9uIDMuMy4yKS4gSWYgdGhlIGJvZHkgaXMgc2V0IGZvciBvdGhlciBtZXRob2RzLCB3ZSBzZXQgdGhlCisgICAgICAgICMgaGVhZGVyIHByb3ZpZGVkIHdlIGNhbiBmaWd1cmUgb3V0IHdoYXQgdGhlIGxlbmd0aCBpcy4KICAgICAgICAgdGhlbGVuID0gTm9uZQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICB0aGVsZW4gPSBzdHIobGVuKGJvZHkpKQotICAgICAgICBleGNlcHQgVHlwZUVycm9yIGFzIHRlOgotICAgICAgICAgICAgIyBJZiB0aGlzIGlzIGEgZmlsZS1saWtlIG9iamVjdCwgdHJ5IHRvCi0gICAgICAgICAgICAjIGZzdGF0IGl0cyBmaWxlIGRlc2NyaXB0b3IKKyAgICAgICAgbWV0aG9kX2V4cGVjdHNfYm9keSA9IG1ldGhvZC51cHBlcigpIGluIF9NRVRIT0RTX0VYUEVDVElOR19CT0RZCisgICAgICAgIGlmIGJvZHkgaXMgTm9uZSBhbmQgbWV0aG9kX2V4cGVjdHNfYm9keToKKyAgICAgICAgICAgIHRoZWxlbiA9ICcwJworICAgICAgICBlbGlmIGJvZHkgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgdGhlbGVuID0gc3RyKG9zLmZzdGF0KGJvZHkuZmlsZW5vKCkpLnN0X3NpemUpCi0gICAgICAgICAgICBleGNlcHQgKEF0dHJpYnV0ZUVycm9yLCBPU0Vycm9yKToKLSAgICAgICAgICAgICAgICAjIERvbid0IHNlbmQgYSBsZW5ndGggaWYgdGhpcyBmYWlsZWQKLSAgICAgICAgICAgICAgICBpZiBzZWxmLmRlYnVnbGV2ZWwgPiAwOiBwcmludCgiQ2Fubm90IHN0YXQhISIpCisgICAgICAgICAgICAgICAgdGhlbGVuID0gc3RyKGxlbihib2R5KSkKKyAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICAgICAgIyBJZiB0aGlzIGlzIGEgZmlsZS1saWtlIG9iamVjdCwgdHJ5IHRvCisgICAgICAgICAgICAgICAgIyBmc3RhdCBpdHMgZmlsZSBkZXNjcmlwdG9yCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICB0aGVsZW4gPSBzdHIob3MuZnN0YXQoYm9keS5maWxlbm8oKSkuc3Rfc2l6ZSkKKyAgICAgICAgICAgICAgICBleGNlcHQgKEF0dHJpYnV0ZUVycm9yLCBPU0Vycm9yKToKKyAgICAgICAgICAgICAgICAgICAgIyBEb24ndCBzZW5kIGEgbGVuZ3RoIGlmIHRoaXMgZmFpbGVkCisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuZGVidWdsZXZlbCA+IDA6IHByaW50KCJDYW5ub3Qgc3RhdCEhIikKIAogICAgICAgICBpZiB0aGVsZW4gaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBzZWxmLnB1dGhlYWRlcignQ29udGVudC1MZW5ndGgnLCB0aGVsZW4pCkBAIC0xMDkyLDggKzExNzEsOCBAQAogCiAgICAgICAgIHNlbGYucHV0cmVxdWVzdChtZXRob2QsIHVybCwgKipza2lwcykKIAotICAgICAgICBpZiBib2R5IGlzIG5vdCBOb25lIGFuZCAoJ2NvbnRlbnQtbGVuZ3RoJyBub3QgaW4gaGVhZGVyX25hbWVzKToKLSAgICAgICAgICAgIHNlbGYuX3NldF9jb250ZW50X2xlbmd0aChib2R5KQorICAgICAgICBpZiAnY29udGVudC1sZW5ndGgnIG5vdCBpbiBoZWFkZXJfbmFtZXM6CisgICAgICAgICAgICBzZWxmLl9zZXRfY29udGVudF9sZW5ndGgoYm9keSwgbWV0aG9kKQogICAgICAgICBmb3IgaGRyLCB2YWx1ZSBpbiBoZWFkZXJzLml0ZW1zKCk6CiAgICAgICAgICAgICBzZWxmLnB1dGhlYWRlcihoZHIsIHZhbHVlKQogICAgICAgICBpZiBpc2luc3RhbmNlKGJvZHksIHN0cik6CkBAIC0xMTQ0LDE4ICsxMjIzLDIyIEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICByZXNwb25zZSA9IHNlbGYucmVzcG9uc2VfY2xhc3Moc2VsZi5zb2NrLCBtZXRob2Q9c2VsZi5fbWV0aG9kKQogCi0gICAgICAgIHJlc3BvbnNlLmJlZ2luKCkKLSAgICAgICAgYXNzZXJ0IHJlc3BvbnNlLndpbGxfY2xvc2UgIT0gX1VOS05PV04KLSAgICAgICAgc2VsZi5fX3N0YXRlID0gX0NTX0lETEUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmVzcG9uc2UuYmVnaW4oKQorICAgICAgICAgICAgYXNzZXJ0IHJlc3BvbnNlLndpbGxfY2xvc2UgIT0gX1VOS05PV04KKyAgICAgICAgICAgIHNlbGYuX19zdGF0ZSA9IF9DU19JRExFCiAKLSAgICAgICAgaWYgcmVzcG9uc2Uud2lsbF9jbG9zZToKLSAgICAgICAgICAgICMgdGhpcyBlZmZlY3RpdmVseSBwYXNzZXMgdGhlIGNvbm5lY3Rpb24gdG8gdGhlIHJlc3BvbnNlCi0gICAgICAgICAgICBzZWxmLmNsb3NlKCkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgICMgcmVtZW1iZXIgdGhpcywgc28gd2UgY2FuIHRlbGwgd2hlbiBpdCBpcyBjb21wbGV0ZQotICAgICAgICAgICAgc2VsZi5fX3Jlc3BvbnNlID0gcmVzcG9uc2UKKyAgICAgICAgICAgIGlmIHJlc3BvbnNlLndpbGxfY2xvc2U6CisgICAgICAgICAgICAgICAgIyB0aGlzIGVmZmVjdGl2ZWx5IHBhc3NlcyB0aGUgY29ubmVjdGlvbiB0byB0aGUgcmVzcG9uc2UKKyAgICAgICAgICAgICAgICBzZWxmLmNsb3NlKCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyByZW1lbWJlciB0aGlzLCBzbyB3ZSBjYW4gdGVsbCB3aGVuIGl0IGlzIGNvbXBsZXRlCisgICAgICAgICAgICAgICAgc2VsZi5fX3Jlc3BvbnNlID0gcmVzcG9uc2UKIAotICAgICAgICByZXR1cm4gcmVzcG9uc2UKKyAgICAgICAgICAgIHJldHVybiByZXNwb25zZQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICByZXNwb25zZS5jbG9zZSgpCisgICAgICAgICAgICByYWlzZQogCiB0cnk6CiAgICAgaW1wb3J0IHNzbApAQCAtMTE3MCwyMCArMTI1MywxOSBAQAogICAgICAgICAjIFhYWCBTaG91bGQga2V5X2ZpbGUgYW5kIGNlcnRfZmlsZSBiZSBkZXByZWNhdGVkIGluIGZhdm91ciBvZiBjb250ZXh0PwogCiAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBob3N0LCBwb3J0PU5vbmUsIGtleV9maWxlPU5vbmUsIGNlcnRfZmlsZT1Ob25lLAotICAgICAgICAgICAgICAgICAgICAgc3RyaWN0PV9zdHJpY3Rfc2VudGluZWwsIHRpbWVvdXQ9c29ja2V0Ll9HTE9CQUxfREVGQVVMVF9USU1FT1VULAotICAgICAgICAgICAgICAgICAgICAgc291cmNlX2FkZHJlc3M9Tm9uZSwgKiwgY29udGV4dD1Ob25lLCBjaGVja19ob3N0bmFtZT1Ob25lKToKLSAgICAgICAgICAgIHN1cGVyKEhUVFBTQ29ubmVjdGlvbiwgc2VsZikuX19pbml0X18oaG9zdCwgcG9ydCwgc3RyaWN0LCB0aW1lb3V0LAorICAgICAgICAgICAgICAgICAgICAgdGltZW91dD1zb2NrZXQuX0dMT0JBTF9ERUZBVUxUX1RJTUVPVVQsCisgICAgICAgICAgICAgICAgICAgICBzb3VyY2VfYWRkcmVzcz1Ob25lLCAqLCBjb250ZXh0PU5vbmUsCisgICAgICAgICAgICAgICAgICAgICBjaGVja19ob3N0bmFtZT1Ob25lKToKKyAgICAgICAgICAgIHN1cGVyKEhUVFBTQ29ubmVjdGlvbiwgc2VsZikuX19pbml0X18oaG9zdCwgcG9ydCwgdGltZW91dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlX2FkZHJlc3MpCiAgICAgICAgICAgICBzZWxmLmtleV9maWxlID0ga2V5X2ZpbGUKICAgICAgICAgICAgIHNlbGYuY2VydF9maWxlID0gY2VydF9maWxlCiAgICAgICAgICAgICBpZiBjb250ZXh0IGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgIyBTb21lIHJlYXNvbmFibGUgZGVmYXVsdHMKLSAgICAgICAgICAgICAgICBjb250ZXh0ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1NTTHYyMykKLSAgICAgICAgICAgICAgICBjb250ZXh0Lm9wdGlvbnMgfD0gc3NsLk9QX05PX1NTTHYyCisgICAgICAgICAgICAgICAgY29udGV4dCA9IHNzbC5fY3JlYXRlX2RlZmF1bHRfaHR0cHNfY29udGV4dCgpCiAgICAgICAgICAgICB3aWxsX3ZlcmlmeSA9IGNvbnRleHQudmVyaWZ5X21vZGUgIT0gc3NsLkNFUlRfTk9ORQogICAgICAgICAgICAgaWYgY2hlY2tfaG9zdG5hbWUgaXMgTm9uZToKLSAgICAgICAgICAgICAgICBjaGVja19ob3N0bmFtZSA9IHdpbGxfdmVyaWZ5Ci0gICAgICAgICAgICBlbGlmIGNoZWNrX2hvc3RuYW1lIGFuZCBub3Qgd2lsbF92ZXJpZnk6CisgICAgICAgICAgICAgICAgY2hlY2tfaG9zdG5hbWUgPSBjb250ZXh0LmNoZWNrX2hvc3RuYW1lCisgICAgICAgICAgICBpZiBjaGVja19ob3N0bmFtZSBhbmQgbm90IHdpbGxfdmVyaWZ5OgogICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImNoZWNrX2hvc3RuYW1lIG5lZWRzIGEgU1NMIGNvbnRleHQgd2l0aCAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZWl0aGVyIENFUlRfT1BUSU9OQUwgb3IgQ0VSVF9SRVFVSVJFRCIpCiAgICAgICAgICAgICBpZiBrZXlfZmlsZSBvciBjZXJ0X2ZpbGU6CkBAIC0xMTk0LDIzICsxMjc2LDIyIEBACiAgICAgICAgIGRlZiBjb25uZWN0KHNlbGYpOgogICAgICAgICAgICAgIkNvbm5lY3QgdG8gYSBob3N0IG9uIGEgZ2l2ZW4gKFNTTCkgcG9ydC4iCiAKLSAgICAgICAgICAgIHNvY2sgPSBzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb24oKHNlbGYuaG9zdCwgc2VsZi5wb3J0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50aW1lb3V0LCBzZWxmLnNvdXJjZV9hZGRyZXNzKQorICAgICAgICAgICAgc3VwZXIoKS5jb25uZWN0KCkKIAogICAgICAgICAgICAgaWYgc2VsZi5fdHVubmVsX2hvc3Q6Ci0gICAgICAgICAgICAgICAgc2VsZi5zb2NrID0gc29jawotICAgICAgICAgICAgICAgIHNlbGYuX3R1bm5lbCgpCisgICAgICAgICAgICAgICAgc2VydmVyX2hvc3RuYW1lID0gc2VsZi5fdHVubmVsX2hvc3QKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VydmVyX2hvc3RuYW1lID0gc2VsZi5ob3N0CiAKLSAgICAgICAgICAgIHNlcnZlcl9ob3N0bmFtZSA9IHNlbGYuaG9zdCBpZiBzc2wuSEFTX1NOSSBlbHNlIE5vbmUKLSAgICAgICAgICAgIHNlbGYuc29jayA9IHNlbGYuX2NvbnRleHQud3JhcF9zb2NrZXQoc29jaywKKyAgICAgICAgICAgIHNlbGYuc29jayA9IHNlbGYuX2NvbnRleHQud3JhcF9zb2NrZXQoc2VsZi5zb2NrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfaG9zdG5hbWU9c2VydmVyX2hvc3RuYW1lKQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGlmIHNlbGYuX2NoZWNrX2hvc3RuYW1lOgotICAgICAgICAgICAgICAgICAgICBzc2wubWF0Y2hfaG9zdG5hbWUoc2VsZi5zb2NrLmdldHBlZXJjZXJ0KCksIHNlbGYuaG9zdCkKLSAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246Ci0gICAgICAgICAgICAgICAgc2VsZi5zb2NrLnNodXRkb3duKHNvY2tldC5TSFVUX1JEV1IpCi0gICAgICAgICAgICAgICAgc2VsZi5zb2NrLmNsb3NlKCkKLSAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgaWYgbm90IHNlbGYuX2NvbnRleHQuY2hlY2tfaG9zdG5hbWUgYW5kIHNlbGYuX2NoZWNrX2hvc3RuYW1lOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc3NsLm1hdGNoX2hvc3RuYW1lKHNlbGYuc29jay5nZXRwZWVyY2VydCgpLCBzZXJ2ZXJfaG9zdG5hbWUpCisgICAgICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5zb2NrLnNodXRkb3duKHNvY2tldC5TSFVUX1JEV1IpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuc29jay5jbG9zZSgpCisgICAgICAgICAgICAgICAgICAgIHJhaXNlCiAKICAgICBfX2FsbF9fLmFwcGVuZCgiSFRUUFNDb25uZWN0aW9uIikKIApkaWZmIC0tZ2l0IGEvTGliL2h0dHAvY29va2llamFyLnB5IGIvTGliL2h0dHAvY29va2llamFyLnB5CmluZGV4IDlmY2Q0YzYuLmNhZDZiM2EgMTAwNjQ0Ci0tLSBhL0xpYi9odHRwL2Nvb2tpZWphci5weQorKysgYi9MaWIvaHR0cC9jb29raWVqYXIucHkKQEAgLTQyMywxMCArNDIzLDEwIEBACiAgICAgVGFrZXMgYSBsaXN0IG9mIGxpc3RzIG9mIChrZXksIHZhbHVlKSBwYWlycyBhbmQgcHJvZHVjZXMgYSBzaW5nbGUgaGVhZGVyCiAgICAgdmFsdWUuICBBdHRyaWJ1dGUgdmFsdWVzIGFyZSBxdW90ZWQgaWYgbmVlZGVkLgogCi0gICAgPj4+IGpvaW5faGVhZGVyX3dvcmRzKFtbKCJ0ZXh0L3BsYWluIiwgTm9uZSksICgiY2hhcnNldCIsICJpc28tODg1OS8xIildXSkKLSAgICAndGV4dC9wbGFpbjsgY2hhcnNldD0iaXNvLTg4NTkvMSInCi0gICAgPj4+IGpvaW5faGVhZGVyX3dvcmRzKFtbKCJ0ZXh0L3BsYWluIiwgTm9uZSldLCBbKCJjaGFyc2V0IiwgImlzby04ODU5LzEiKV1dKQotICAgICd0ZXh0L3BsYWluLCBjaGFyc2V0PSJpc28tODg1OS8xIicKKyAgICA+Pj4gam9pbl9oZWFkZXJfd29yZHMoW1soInRleHQvcGxhaW4iLCBOb25lKSwgKCJjaGFyc2V0IiwgImlzby04ODU5LTEiKV1dKQorICAgICd0ZXh0L3BsYWluOyBjaGFyc2V0PSJpc28tODg1OS0xIicKKyAgICA+Pj4gam9pbl9oZWFkZXJfd29yZHMoW1soInRleHQvcGxhaW4iLCBOb25lKV0sIFsoImNoYXJzZXQiLCAiaXNvLTg4NTktMSIpXV0pCisgICAgJ3RleHQvcGxhaW4sIGNoYXJzZXQ9Imlzby04ODU5LTEiJwogCiAgICAgIiIiCiAgICAgaGVhZGVycyA9IFtdCkBAIC00NzIsMjYgKzQ3Miw0MiBAQAogICAgIGZvciBuc19oZWFkZXIgaW4gbnNfaGVhZGVyczoKICAgICAgICAgcGFpcnMgPSBbXQogICAgICAgICB2ZXJzaW9uX3NldCA9IEZhbHNlCi0gICAgICAgIGZvciBpaSwgcGFyYW0gaW4gZW51bWVyYXRlKHJlLnNwbGl0KHIiO1xzKiIsIG5zX2hlYWRlcikpOgotICAgICAgICAgICAgcGFyYW0gPSBwYXJhbS5yc3RyaXAoKQotICAgICAgICAgICAgaWYgcGFyYW0gPT0gIiI6IGNvbnRpbnVlCi0gICAgICAgICAgICBpZiAiPSIgbm90IGluIHBhcmFtOgotICAgICAgICAgICAgICAgIGssIHYgPSBwYXJhbSwgTm9uZQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBrLCB2ID0gcmUuc3BsaXQociJccyo9XHMqIiwgcGFyYW0sIDEpCi0gICAgICAgICAgICAgICAgayA9IGsubHN0cmlwKCkKKworICAgICAgICAjIFhYWDogVGhlIGZvbGxvd2luZyBkb2VzIG5vdCBzdHJpY3RseSBhZGhlcmUgdG8gUkZDcyBpbiB0aGF0IGVtcHR5CisgICAgICAgICMgbmFtZXMgYW5kIHZhbHVlcyBhcmUgbGVnYWwgKHRoZSBmb3JtZXIgd2lsbCBvbmx5IGFwcGVhciBvbmNlIGFuZCB3aWxsCisgICAgICAgICMgYmUgb3ZlcndyaXR0ZW4gaWYgbXVsdGlwbGUgb2NjdXJyZW5jZXMgYXJlIHByZXNlbnQpLiBUaGlzIGlzCisgICAgICAgICMgbW9zdGx5IHRvIGRlYWwgd2l0aCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4KKyAgICAgICAgZm9yIGlpLCBwYXJhbSBpbiBlbnVtZXJhdGUobnNfaGVhZGVyLnNwbGl0KCc7JykpOgorICAgICAgICAgICAgcGFyYW0gPSBwYXJhbS5zdHJpcCgpCisKKyAgICAgICAgICAgIGtleSwgc2VwLCB2YWwgPSBwYXJhbS5wYXJ0aXRpb24oJz0nKQorICAgICAgICAgICAga2V5ID0ga2V5LnN0cmlwKCkKKworICAgICAgICAgICAgaWYgbm90IGtleToKKyAgICAgICAgICAgICAgICBpZiBpaSA9PSAwOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICMgYWxsb3cgZm9yIGEgZGlzdGluY3Rpb24gYmV0d2VlbiBwcmVzZW50IGFuZCBlbXB0eSBhbmQgbWlzc2luZworICAgICAgICAgICAgIyBhbHRvZ2V0aGVyCisgICAgICAgICAgICB2YWwgPSB2YWwuc3RyaXAoKSBpZiBzZXAgZWxzZSBOb25lCisKICAgICAgICAgICAgIGlmIGlpICE9IDA6Ci0gICAgICAgICAgICAgICAgbGMgPSBrLmxvd2VyKCkKKyAgICAgICAgICAgICAgICBsYyA9IGtleS5sb3dlcigpCiAgICAgICAgICAgICAgICAgaWYgbGMgaW4ga25vd25fYXR0cnM6Ci0gICAgICAgICAgICAgICAgICAgIGsgPSBsYwotICAgICAgICAgICAgICAgIGlmIGsgPT0gInZlcnNpb24iOgorICAgICAgICAgICAgICAgICAgICBrZXkgPSBsYworCisgICAgICAgICAgICAgICAgaWYga2V5ID09ICJ2ZXJzaW9uIjoKICAgICAgICAgICAgICAgICAgICAgIyBUaGlzIGlzIGFuIFJGQyAyMTA5IGNvb2tpZS4KLSAgICAgICAgICAgICAgICAgICAgdiA9IHN0cmlwX3F1b3Rlcyh2KQorICAgICAgICAgICAgICAgICAgICBpZiB2YWwgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSBzdHJpcF9xdW90ZXModmFsKQogICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uX3NldCA9IFRydWUKLSAgICAgICAgICAgICAgICBpZiBrID09ICJleHBpcmVzIjoKKyAgICAgICAgICAgICAgICBlbGlmIGtleSA9PSAiZXhwaXJlcyI6CiAgICAgICAgICAgICAgICAgICAgICMgY29udmVydCBleHBpcmVzIGRhdGUgdG8gc2Vjb25kcyBzaW5jZSBlcG9jaAotICAgICAgICAgICAgICAgICAgICB2ID0gaHR0cDJ0aW1lKHN0cmlwX3F1b3Rlcyh2KSkgICMgTm9uZSBpZiBpbnZhbGlkCi0gICAgICAgICAgICBwYWlycy5hcHBlbmQoKGssIHYpKQorICAgICAgICAgICAgICAgICAgICBpZiB2YWwgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSBodHRwMnRpbWUoc3RyaXBfcXVvdGVzKHZhbCkpICAjIE5vbmUgaWYgaW52YWxpZAorICAgICAgICAgICAgcGFpcnMuYXBwZW5kKChrZXksIHZhbCkpCiAKICAgICAgICAgaWYgcGFpcnM6CiAgICAgICAgICAgICBpZiBub3QgdmVyc2lvbl9zZXQ6CkBAIC03NDIsNyArNzU4LDcgQEAKICAgICAgICAgICAgICAgICAgKToKIAogICAgICAgICBpZiB2ZXJzaW9uIGlzIG5vdCBOb25lOiB2ZXJzaW9uID0gaW50KHZlcnNpb24pCi0gICAgICAgIGlmIGV4cGlyZXMgaXMgbm90IE5vbmU6IGV4cGlyZXMgPSBpbnQoZXhwaXJlcykKKyAgICAgICAgaWYgZXhwaXJlcyBpcyBub3QgTm9uZTogZXhwaXJlcyA9IGludChmbG9hdChleHBpcmVzKSkKICAgICAgICAgaWYgcG9ydCBpcyBOb25lIGFuZCBwb3J0X3NwZWNpZmllZCBpcyBUcnVlOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiaWYgcG9ydCBpcyBOb25lLCBwb3J0X3NwZWNpZmllZCBtdXN0IGJlIGZhbHNlIikKIApAQCAtMTE5Myw4ICsxMjA5LDcgQEAKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIG1hcHBpbmcgPSBUcnVlCi0gICAgICAgICAgICBmb3Igc3Vib2JqIGluIGRlZXB2YWx1ZXMob2JqKToKLSAgICAgICAgICAgICAgICB5aWVsZCBzdWJvYmoKKyAgICAgICAgICAgIHlpZWxkIGZyb20gZGVlcHZhbHVlcyhvYmopCiAgICAgICAgIGlmIG5vdCBtYXBwaW5nOgogICAgICAgICAgICAgeWllbGQgb2JqCiAKQEAgLTE0MjIsNyArMTQzNyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgICAgICAgICAjIGNvbnZlcnQgUkZDIDI5NjUgTWF4LUFnZSB0byBzZWNvbmRzIHNpbmNlIGVwb2NoCiAgICAgICAgICAgICAgICAgICAgICMgWFhYIFN0cmljdGx5IHlvdSdyZSBzdXBwb3NlZCB0byBmb2xsb3cgUkZDIDI2MTYKLSAgICAgICAgICAgICAgICAgICAgIyAgIGFnZS1jYWxjdWxhdGlvbiBydWxlcy4gIFJlbWVtYmVyIHRoYXQgemVybyBNYXgtQWdlIGlzIGEKKyAgICAgICAgICAgICAgICAgICAgIyAgIGFnZS1jYWxjdWxhdGlvbiBydWxlcy4gIFJlbWVtYmVyIHRoYXQgemVybyBNYXgtQWdlCiAgICAgICAgICAgICAgICAgICAgICMgICBpcyBhIHJlcXVlc3QgdG8gZGlzY2FyZCAob2xkIGFuZCBuZXcpIGNvb2tpZSwgdGhvdWdoLgogICAgICAgICAgICAgICAgICAgICBrID0gImV4cGlyZXMiCiAgICAgICAgICAgICAgICAgICAgIHYgPSBzZWxmLl9ub3cgKyB2CkBAIC0xNzIzLDE2ICsxNzM4LDE2IEBACiAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgICAgICByID0gW10KICAgICAgICAgZm9yIGNvb2tpZSBpbiBzZWxmOiByLmFwcGVuZChyZXByKGNvb2tpZSkpCi0gICAgICAgIHJldHVybiAiPCVzWyVzXT4iICUgKHNlbGYuX19jbGFzc19fLCAiLCAiLmpvaW4ocikpCisgICAgICAgIHJldHVybiAiPCVzWyVzXT4iICUgKHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLCAiLCAiLmpvaW4ocikpCiAKICAgICBkZWYgX19zdHJfXyhzZWxmKToKICAgICAgICAgciA9IFtdCiAgICAgICAgIGZvciBjb29raWUgaW4gc2VsZjogci5hcHBlbmQoc3RyKGNvb2tpZSkpCi0gICAgICAgIHJldHVybiAiPCVzWyVzXT4iICUgKHNlbGYuX19jbGFzc19fLCAiLCAiLmpvaW4ocikpCisgICAgICAgIHJldHVybiAiPCVzWyVzXT4iICUgKHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLCAiLCAiLmpvaW4ocikpCiAKIAotIyBkZXJpdmVzIGZyb20gSU9FcnJvciBmb3IgYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgd2l0aCBQeXRob24gMi40LjAKLWNsYXNzIExvYWRFcnJvcihJT0Vycm9yKTogcGFzcworIyBkZXJpdmVzIGZyb20gT1NFcnJvciBmb3IgYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgd2l0aCBQeXRob24gMi40LjAKK2NsYXNzIExvYWRFcnJvcihPU0Vycm9yKTogcGFzcwogCiBjbGFzcyBGaWxlQ29va2llSmFyKENvb2tpZUphcik6CiAgICAgIiIiQ29va2llSmFyIHRoYXQgY2FuIGJlIGxvYWRlZCBmcm9tIGFuZCBzYXZlZCB0byBhIGZpbGUuIiIiCkBAIC0xNzYyLDE3ICsxNzc3LDE0IEBACiAgICAgICAgICAgICBpZiBzZWxmLmZpbGVuYW1lIGlzIG5vdCBOb25lOiBmaWxlbmFtZSA9IHNlbGYuZmlsZW5hbWUKICAgICAgICAgICAgIGVsc2U6IHJhaXNlIFZhbHVlRXJyb3IoTUlTU0lOR19GSUxFTkFNRV9URVhUKQogCi0gICAgICAgIGYgPSBvcGVuKGZpbGVuYW1lKQotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSkgYXMgZjoKICAgICAgICAgICAgIHNlbGYuX3JlYWxseV9sb2FkKGYsIGZpbGVuYW1lLCBpZ25vcmVfZGlzY2FyZCwgaWdub3JlX2V4cGlyZXMpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBmLmNsb3NlKCkKIAogICAgIGRlZiByZXZlcnQoc2VsZiwgZmlsZW5hbWU9Tm9uZSwKICAgICAgICAgICAgICAgIGlnbm9yZV9kaXNjYXJkPUZhbHNlLCBpZ25vcmVfZXhwaXJlcz1GYWxzZSk6CiAgICAgICAgICIiIkNsZWFyIGFsbCBjb29raWVzIGFuZCByZWxvYWQgY29va2llcyBmcm9tIGEgc2F2ZWQgZmlsZS4KIAotICAgICAgICBSYWlzZXMgTG9hZEVycm9yIChvciBJT0Vycm9yKSBpZiByZXZlcnNpb24gaXMgbm90IHN1Y2Nlc3NmdWw7IHRoZQorICAgICAgICBSYWlzZXMgTG9hZEVycm9yIChvciBPU0Vycm9yKSBpZiByZXZlcnNpb24gaXMgbm90IHN1Y2Nlc3NmdWw7IHRoZQogICAgICAgICBvYmplY3QncyBzdGF0ZSB3aWxsIG5vdCBiZSBhbHRlcmVkIGlmIHRoaXMgaGFwcGVucy4KIAogICAgICAgICAiIiIKQEAgLTE3ODcsNyArMTc5OSw3IEBACiAgICAgICAgICAgICBzZWxmLl9jb29raWVzID0ge30KICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzZWxmLmxvYWQoZmlsZW5hbWUsIGlnbm9yZV9kaXNjYXJkLCBpZ25vcmVfZXhwaXJlcykKLSAgICAgICAgICAgIGV4Y2VwdCAoTG9hZEVycm9yLCBJT0Vycm9yKToKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIHNlbGYuX2Nvb2tpZXMgPSBvbGRfc3RhdGUKICAgICAgICAgICAgICAgICByYWlzZQogCkBAIC0xNzk2LDcgKzE4MDgsNyBAQAogCiAKIGRlZiBsd3BfY29va2llX3N0cihjb29raWUpOgotICAgICIiIlJldHVybiBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgQ29va2llIGluIGFuIHRoZSBMV1AgY29va2llIGZpbGUgZm9ybWF0LgorICAgICIiIlJldHVybiBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgQ29va2llIGluIHRoZSBMV1AgY29va2llIGZpbGUgZm9ybWF0LgogCiAgICAgQWN0dWFsbHksIHRoZSBmb3JtYXQgaXMgZXh0ZW5kZWQgYSBiaXQgLS0gc2VlIG1vZHVsZSBkb2NzdHJpbmcuCiAKQEAgLTE4NTcsMTUgKzE4NjksMTIgQEAKICAgICAgICAgICAgIGlmIHNlbGYuZmlsZW5hbWUgaXMgbm90IE5vbmU6IGZpbGVuYW1lID0gc2VsZi5maWxlbmFtZQogICAgICAgICAgICAgZWxzZTogcmFpc2UgVmFsdWVFcnJvcihNSVNTSU5HX0ZJTEVOQU1FX1RFWFQpCiAKLSAgICAgICAgZiA9IG9wZW4oZmlsZW5hbWUsICJ3IikKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICJ3IikgYXMgZjoKICAgICAgICAgICAgICMgVGhlcmUgcmVhbGx5IGlzbid0IGFuIExXUCBDb29raWVzIDIuMCBmb3JtYXQsIGJ1dCB0aGlzIGluZGljYXRlcwogICAgICAgICAgICAgIyB0aGF0IHRoZXJlIGlzIGV4dHJhIGluZm9ybWF0aW9uIGluIGhlcmUgKGRvbWFpbl9kb3QgYW5kCiAgICAgICAgICAgICAjIHBvcnRfc3BlYykgd2hpbGUgc3RpbGwgYmVpbmcgY29tcGF0aWJsZSB3aXRoIGxpYnd3dy1wZXJsLCBJIGhvcGUuCiAgICAgICAgICAgICBmLndyaXRlKCIjTFdQLUNvb2tpZXMtMi4wXG4iKQogICAgICAgICAgICAgZi53cml0ZShzZWxmLmFzX2x3cF9zdHIoaWdub3JlX2Rpc2NhcmQsIGlnbm9yZV9leHBpcmVzKSkKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGYuY2xvc2UoKQogCiAgICAgZGVmIF9yZWFsbHlfbG9hZChzZWxmLCBmLCBmaWxlbmFtZSwgaWdub3JlX2Rpc2NhcmQsIGlnbm9yZV9leHBpcmVzKToKICAgICAgICAgbWFnaWMgPSBmLnJlYWRsaW5lKCkKQEAgLTE5MzgsOCArMTk0Nyw3IEBACiAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBpZ25vcmVfZXhwaXJlcyBhbmQgYy5pc19leHBpcmVkKG5vdyk6CiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgICAgICAgICBzZWxmLnNldF9jb29raWUoYykKLQotICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICByYWlzZQogICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgICAgICAgX3dhcm5fdW5oYW5kbGVkX2V4Y2VwdGlvbigpCkBAIC0yMDQ1LDcgKzIwNTMsNyBAQAogICAgICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgICAgIHNlbGYuc2V0X2Nvb2tpZShjKQogCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgICAgICBfd2Fybl91bmhhbmRsZWRfZXhjZXB0aW9uKCkKQEAgLTIwNTcsOCArMjA2NSw3IEBACiAgICAgICAgICAgICBpZiBzZWxmLmZpbGVuYW1lIGlzIG5vdCBOb25lOiBmaWxlbmFtZSA9IHNlbGYuZmlsZW5hbWUKICAgICAgICAgICAgIGVsc2U6IHJhaXNlIFZhbHVlRXJyb3IoTUlTU0lOR19GSUxFTkFNRV9URVhUKQogCi0gICAgICAgIGYgPSBvcGVuKGZpbGVuYW1lLCAidyIpCi0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAidyIpIGFzIGY6CiAgICAgICAgICAgICBmLndyaXRlKHNlbGYuaGVhZGVyKQogICAgICAgICAgICAgbm93ID0gdGltZS50aW1lKCkKICAgICAgICAgICAgIGZvciBjb29raWUgaW4gc2VsZjoKQEAgLTIwODcsNSArMjA5NCwzIEBACiAgICAgICAgICAgICAgICAgICAgICJcdCIuam9pbihbY29va2llLmRvbWFpbiwgaW5pdGlhbF9kb3QsIGNvb2tpZS5wYXRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3VyZSwgZXhwaXJlcywgbmFtZSwgdmFsdWVdKSsKICAgICAgICAgICAgICAgICAgICAgIlxuIikKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGYuY2xvc2UoKQpkaWZmIC0tZ2l0IGEvTGliL2h0dHAvY29va2llcy5weSBiL0xpYi9odHRwL2Nvb2tpZXMucHkKaW5kZXggMDAwODJhNi4uNDgyZTYwMSAxMDA2NDQKLS0tIGEvTGliL2h0dHAvY29va2llcy5weQorKysgYi9MaWIvaHR0cC9jb29raWVzLnB5CkBAIC0zMzAsOCArMzMwLDggQEAKICAgICAgICAgImNvbW1lbnQiICA6ICJDb21tZW50IiwKICAgICAgICAgImRvbWFpbiIgICA6ICJEb21haW4iLAogICAgICAgICAibWF4LWFnZSIgIDogIk1heC1BZ2UiLAotICAgICAgICAic2VjdXJlIiAgIDogInNlY3VyZSIsCi0gICAgICAgICJodHRwb25seSIgOiAiaHR0cG9ubHkiLAorICAgICAgICAic2VjdXJlIiAgIDogIlNlY3VyZSIsCisgICAgICAgICJodHRwb25seSIgOiAiSHR0cE9ubHkiLAogICAgICAgICAidmVyc2lvbiIgIDogIlZlcnNpb24iLAogICAgIH0KIApAQCAtNDg3LDggKzQ4NywxMiBAQAogCiAgICAgZGVmIF9fc2V0aXRlbV9fKHNlbGYsIGtleSwgdmFsdWUpOgogICAgICAgICAiIiJEaWN0aW9uYXJ5IHN0eWxlIGFzc2lnbm1lbnQuIiIiCi0gICAgICAgIHJ2YWwsIGN2YWwgPSBzZWxmLnZhbHVlX2VuY29kZSh2YWx1ZSkKLSAgICAgICAgc2VsZi5fX3NldChrZXksIHJ2YWwsIGN2YWwpCisgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIE1vcnNlbCk6CisgICAgICAgICAgICAjIGFsbG93IGFzc2lnbm1lbnQgb2YgY29uc3RydWN0ZWQgTW9yc2VscyAoZS5nLiBmb3IgcGlja2xpbmcpCisgICAgICAgICAgICBkaWN0Ll9fc2V0aXRlbV9fKHNlbGYsIGtleSwgdmFsdWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBydmFsLCBjdmFsID0gc2VsZi52YWx1ZV9lbmNvZGUodmFsdWUpCisgICAgICAgICAgICBzZWxmLl9fc2V0KGtleSwgcnZhbCwgY3ZhbCkKIAogICAgIGRlZiBvdXRwdXQoc2VsZiwgYXR0cnM9Tm9uZSwgaGVhZGVyPSJTZXQtQ29va2llOiIsIHNlcD0iXDAxNVwwMTIiKToKICAgICAgICAgIiIiUmV0dXJuIGEgc3RyaW5nIHN1aXRhYmxlIGZvciBIVFRQLiIiIgpkaWZmIC0tZ2l0IGEvTGliL2h0dHAvc2VydmVyLnB5IGIvTGliL2h0dHAvc2VydmVyLnB5CmluZGV4IDdkM2I1MDYuLjQ2ODgwOTYgMTAwNjQ0Ci0tLSBhL0xpYi9odHRwL3NlcnZlci5weQorKysgYi9MaWIvaHR0cC9zZXJ2ZXIucHkKQEAgLTgyLDExICs4MiwxMiBAQAogCiBfX3ZlcnNpb25fXyA9ICIwLjYiCiAKLV9fYWxsX18gPSBbIkhUVFBTZXJ2ZXIiLCAiQmFzZUhUVFBSZXF1ZXN0SGFuZGxlciJdCitfX2FsbF9fID0gWworICAgICJIVFRQU2VydmVyIiwgIkJhc2VIVFRQUmVxdWVzdEhhbmRsZXIiLAorICAgICJTaW1wbGVIVFRQUmVxdWVzdEhhbmRsZXIiLCAiQ0dJSFRUUFJlcXVlc3RIYW5kbGVyIiwKK10KIAogaW1wb3J0IGh0bWwKLWltcG9ydCBlbWFpbC5tZXNzYWdlCi1pbXBvcnQgZW1haWwucGFyc2VyCiBpbXBvcnQgaHR0cC5jbGllbnQKIGltcG9ydCBpbwogaW1wb3J0IG1pbWV0eXBlcwpAQCAtMjcyLDcgKzI3Myw3IEBACiAgICAgICAgICIiIgogICAgICAgICBzZWxmLmNvbW1hbmQgPSBOb25lICAjIHNldCBpbiBjYXNlIG9mIGVycm9yIG9uIHRoZSBmaXJzdCBsaW5lCiAgICAgICAgIHNlbGYucmVxdWVzdF92ZXJzaW9uID0gdmVyc2lvbiA9IHNlbGYuZGVmYXVsdF9yZXF1ZXN0X3ZlcnNpb24KLSAgICAgICAgc2VsZi5jbG9zZV9jb25uZWN0aW9uID0gMQorICAgICAgICBzZWxmLmNsb3NlX2Nvbm5lY3Rpb24gPSBUcnVlCiAgICAgICAgIHJlcXVlc3RsaW5lID0gc3RyKHNlbGYucmF3X3JlcXVlc3RsaW5lLCAnaXNvLTg4NTktMScpCiAgICAgICAgIHJlcXVlc3RsaW5lID0gcmVxdWVzdGxpbmUucnN0cmlwKCdcclxuJykKICAgICAgICAgc2VsZi5yZXF1ZXN0bGluZSA9IHJlcXVlc3RsaW5lCkBAIC0yOTgsMTQgKzI5OSwxNCBAQAogICAgICAgICAgICAgICAgIHNlbGYuc2VuZF9lcnJvcig0MDAsICJCYWQgcmVxdWVzdCB2ZXJzaW9uICglcikiICUgdmVyc2lvbikKICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgICAgIGlmIHZlcnNpb25fbnVtYmVyID49ICgxLCAxKSBhbmQgc2VsZi5wcm90b2NvbF92ZXJzaW9uID49ICJIVFRQLzEuMSI6Ci0gICAgICAgICAgICAgICAgc2VsZi5jbG9zZV9jb25uZWN0aW9uID0gMAorICAgICAgICAgICAgICAgIHNlbGYuY2xvc2VfY29ubmVjdGlvbiA9IEZhbHNlCiAgICAgICAgICAgICBpZiB2ZXJzaW9uX251bWJlciA+PSAoMiwgMCk6CiAgICAgICAgICAgICAgICAgc2VsZi5zZW5kX2Vycm9yKDUwNSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkludmFsaWQgSFRUUCBWZXJzaW9uICglcykiICUgYmFzZV92ZXJzaW9uX251bWJlcikKICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgZWxpZiBsZW4od29yZHMpID09IDI6CiAgICAgICAgICAgICBjb21tYW5kLCBwYXRoID0gd29yZHMKLSAgICAgICAgICAgIHNlbGYuY2xvc2VfY29ubmVjdGlvbiA9IDEKKyAgICAgICAgICAgIHNlbGYuY2xvc2VfY29ubmVjdGlvbiA9IFRydWUKICAgICAgICAgICAgIGlmIGNvbW1hbmQgIT0gJ0dFVCc6CiAgICAgICAgICAgICAgICAgc2VsZi5zZW5kX2Vycm9yKDQwMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkJhZCBIVFRQLzAuOSByZXF1ZXN0IHR5cGUgKCVyKSIgJSBjb21tYW5kKQpAQCAtMzI3LDEwICszMjgsMTAgQEAKIAogICAgICAgICBjb25udHlwZSA9IHNlbGYuaGVhZGVycy5nZXQoJ0Nvbm5lY3Rpb24nLCAiIikKICAgICAgICAgaWYgY29ubnR5cGUubG93ZXIoKSA9PSAnY2xvc2UnOgotICAgICAgICAgICAgc2VsZi5jbG9zZV9jb25uZWN0aW9uID0gMQorICAgICAgICAgICAgc2VsZi5jbG9zZV9jb25uZWN0aW9uID0gVHJ1ZQogICAgICAgICBlbGlmIChjb25udHlwZS5sb3dlcigpID09ICdrZWVwLWFsaXZlJyBhbmQKICAgICAgICAgICAgICAgc2VsZi5wcm90b2NvbF92ZXJzaW9uID49ICJIVFRQLzEuMSIpOgotICAgICAgICAgICAgc2VsZi5jbG9zZV9jb25uZWN0aW9uID0gMAorICAgICAgICAgICAgc2VsZi5jbG9zZV9jb25uZWN0aW9uID0gRmFsc2UKICAgICAgICAgIyBFeGFtaW5lIHRoZSBoZWFkZXJzIGFuZCBsb29rIGZvciBhbiBFeHBlY3QgZGlyZWN0aXZlCiAgICAgICAgIGV4cGVjdCA9IHNlbGYuaGVhZGVycy5nZXQoJ0V4cGVjdCcsICIiKQogICAgICAgICBpZiAoZXhwZWN0Lmxvd2VyKCkgPT0gIjEwMC1jb250aW51ZSIgYW5kCkBAIC0zNzUsNyArMzc2LDcgQEAKICAgICAgICAgICAgICAgICBzZWxmLnNlbmRfZXJyb3IoNDE0KQogICAgICAgICAgICAgICAgIHJldHVybgogICAgICAgICAgICAgaWYgbm90IHNlbGYucmF3X3JlcXVlc3RsaW5lOgotICAgICAgICAgICAgICAgIHNlbGYuY2xvc2VfY29ubmVjdGlvbiA9IDEKKyAgICAgICAgICAgICAgICBzZWxmLmNsb3NlX2Nvbm5lY3Rpb24gPSBUcnVlCiAgICAgICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgICAgICBpZiBub3Qgc2VsZi5wYXJzZV9yZXF1ZXN0KCk6CiAgICAgICAgICAgICAgICAgIyBBbiBlcnJvciBjb2RlIGhhcyBiZWVuIHNlbnQsIGp1c3QgZXhpdApAQCAtMzkwLDIzICszOTEsMjggQEAKICAgICAgICAgZXhjZXB0IHNvY2tldC50aW1lb3V0IGFzIGU6CiAgICAgICAgICAgICAjYSByZWFkIG9yIGEgd3JpdGUgdGltZWQgb3V0LiAgRGlzY2FyZCB0aGlzIGNvbm5lY3Rpb24KICAgICAgICAgICAgIHNlbGYubG9nX2Vycm9yKCJSZXF1ZXN0IHRpbWVkIG91dDogJXIiLCBlKQotICAgICAgICAgICAgc2VsZi5jbG9zZV9jb25uZWN0aW9uID0gMQorICAgICAgICAgICAgc2VsZi5jbG9zZV9jb25uZWN0aW9uID0gVHJ1ZQogICAgICAgICAgICAgcmV0dXJuCiAKICAgICBkZWYgaGFuZGxlKHNlbGYpOgogICAgICAgICAiIiJIYW5kbGUgbXVsdGlwbGUgcmVxdWVzdHMgaWYgbmVjZXNzYXJ5LiIiIgotICAgICAgICBzZWxmLmNsb3NlX2Nvbm5lY3Rpb24gPSAxCisgICAgICAgIHNlbGYuY2xvc2VfY29ubmVjdGlvbiA9IFRydWUKIAogICAgICAgICBzZWxmLmhhbmRsZV9vbmVfcmVxdWVzdCgpCiAgICAgICAgIHdoaWxlIG5vdCBzZWxmLmNsb3NlX2Nvbm5lY3Rpb246CiAgICAgICAgICAgICBzZWxmLmhhbmRsZV9vbmVfcmVxdWVzdCgpCiAKLSAgICBkZWYgc2VuZF9lcnJvcihzZWxmLCBjb2RlLCBtZXNzYWdlPU5vbmUpOgorICAgIGRlZiBzZW5kX2Vycm9yKHNlbGYsIGNvZGUsIG1lc3NhZ2U9Tm9uZSwgZXhwbGFpbj1Ob25lKToKICAgICAgICAgIiIiU2VuZCBhbmQgbG9nIGFuIGVycm9yIHJlcGx5LgogCi0gICAgICAgIEFyZ3VtZW50cyBhcmUgdGhlIGVycm9yIGNvZGUsIGFuZCBhIGRldGFpbGVkIG1lc3NhZ2UuCi0gICAgICAgIFRoZSBkZXRhaWxlZCBtZXNzYWdlIGRlZmF1bHRzIHRvIHRoZSBzaG9ydCBlbnRyeSBtYXRjaGluZyB0aGUKLSAgICAgICAgcmVzcG9uc2UgY29kZS4KKyAgICAgICAgQXJndW1lbnRzIGFyZQorICAgICAgICAqIGNvZGU6ICAgIGFuIEhUVFAgZXJyb3IgY29kZQorICAgICAgICAgICAgICAgICAgIDMgZGlnaXRzCisgICAgICAgICogbWVzc2FnZTogYSBzaW1wbGUgb3B0aW9uYWwgMSBsaW5lIHJlYXNvbiBwaHJhc2UuCisgICAgICAgICAgICAgICAgICAgKiggSFRBQiAvIFNQIC8gVkNIQVIgLyAleDgwLUZGICkKKyAgICAgICAgICAgICAgICAgICBkZWZhdWx0cyB0byBzaG9ydCBlbnRyeSBtYXRjaGluZyB0aGUgcmVzcG9uc2UgY29kZQorICAgICAgICAqIGV4cGxhaW46IGEgZGV0YWlsZWQgbWVzc2FnZSBkZWZhdWx0cyB0byB0aGUgbG9uZyBlbnRyeQorICAgICAgICAgICAgICAgICAgIG1hdGNoaW5nIHRoZSByZXNwb25zZSBjb2RlLgogCiAgICAgICAgIFRoaXMgc2VuZHMgYW4gZXJyb3IgcmVzcG9uc2UgKHNvIGl0IG11c3QgYmUgY2FsbGVkIGJlZm9yZSBhbnkKICAgICAgICAgb3V0cHV0IGhhcyBiZWVuIGdlbmVyYXRlZCksIGxvZ3MgdGhlIGVycm9yLCBhbmQgZmluYWxseSBzZW5kcwpAQCAtNDIwLDE3ICs0MjYsMjAgQEAKICAgICAgICAgICAgIHNob3J0bXNnLCBsb25nbXNnID0gJz8/PycsICc/Pz8nCiAgICAgICAgIGlmIG1lc3NhZ2UgaXMgTm9uZToKICAgICAgICAgICAgIG1lc3NhZ2UgPSBzaG9ydG1zZwotICAgICAgICBleHBsYWluID0gbG9uZ21zZworICAgICAgICBpZiBleHBsYWluIGlzIE5vbmU6CisgICAgICAgICAgICBleHBsYWluID0gbG9uZ21zZwogICAgICAgICBzZWxmLmxvZ19lcnJvcigiY29kZSAlZCwgbWVzc2FnZSAlcyIsIGNvZGUsIG1lc3NhZ2UpCiAgICAgICAgICMgdXNpbmcgX3F1b3RlX2h0bWwgdG8gcHJldmVudCBDcm9zcyBTaXRlIFNjcmlwdGluZyBhdHRhY2tzIChzZWUgYnVnICMxMTAwMjAxKQogICAgICAgICBjb250ZW50ID0gKHNlbGYuZXJyb3JfbWVzc2FnZV9mb3JtYXQgJQotICAgICAgICAgICAgICAgICAgIHsnY29kZSc6IGNvZGUsICdtZXNzYWdlJzogX3F1b3RlX2h0bWwobWVzc2FnZSksICdleHBsYWluJzogZXhwbGFpbn0pCisgICAgICAgICAgICAgICAgICAgeydjb2RlJzogY29kZSwgJ21lc3NhZ2UnOiBfcXVvdGVfaHRtbChtZXNzYWdlKSwgJ2V4cGxhaW4nOiBfcXVvdGVfaHRtbChleHBsYWluKX0pCisgICAgICAgIGJvZHkgPSBjb250ZW50LmVuY29kZSgnVVRGLTgnLCAncmVwbGFjZScpCiAgICAgICAgIHNlbGYuc2VuZF9yZXNwb25zZShjb2RlLCBtZXNzYWdlKQogICAgICAgICBzZWxmLnNlbmRfaGVhZGVyKCJDb250ZW50LVR5cGUiLCBzZWxmLmVycm9yX2NvbnRlbnRfdHlwZSkKICAgICAgICAgc2VsZi5zZW5kX2hlYWRlcignQ29ubmVjdGlvbicsICdjbG9zZScpCisgICAgICAgIHNlbGYuc2VuZF9oZWFkZXIoJ0NvbnRlbnQtTGVuZ3RoJywgaW50KGxlbihib2R5KSkpCiAgICAgICAgIHNlbGYuZW5kX2hlYWRlcnMoKQogICAgICAgICBpZiBzZWxmLmNvbW1hbmQgIT0gJ0hFQUQnIGFuZCBjb2RlID49IDIwMCBhbmQgY29kZSBub3QgaW4gKDIwNCwgMzA0KToKLSAgICAgICAgICAgIHNlbGYud2ZpbGUud3JpdGUoY29udGVudC5lbmNvZGUoJ1VURi04JywgJ3JlcGxhY2UnKSkKKyAgICAgICAgICAgIHNlbGYud2ZpbGUud3JpdGUoYm9keSkKIAogICAgIGRlZiBzZW5kX3Jlc3BvbnNlKHNlbGYsIGNvZGUsIG1lc3NhZ2U9Tm9uZSk6CiAgICAgICAgICIiIkFkZCB0aGUgcmVzcG9uc2UgaGVhZGVyIHRvIHRoZSBoZWFkZXJzIGJ1ZmZlciBhbmQgbG9nIHRoZQpAQCAtNDY5LDkgKzQ3OCw5IEBACiAKICAgICAgICAgaWYga2V5d29yZC5sb3dlcigpID09ICdjb25uZWN0aW9uJzoKICAgICAgICAgICAgIGlmIHZhbHVlLmxvd2VyKCkgPT0gJ2Nsb3NlJzoKLSAgICAgICAgICAgICAgICBzZWxmLmNsb3NlX2Nvbm5lY3Rpb24gPSAxCisgICAgICAgICAgICAgICAgc2VsZi5jbG9zZV9jb25uZWN0aW9uID0gVHJ1ZQogICAgICAgICAgICAgZWxpZiB2YWx1ZS5sb3dlcigpID09ICdrZWVwLWFsaXZlJzoKLSAgICAgICAgICAgICAgICBzZWxmLmNsb3NlX2Nvbm5lY3Rpb24gPSAwCisgICAgICAgICAgICAgICAgc2VsZi5jbG9zZV9jb25uZWN0aW9uID0gRmFsc2UKIAogICAgIGRlZiBlbmRfaGVhZGVycyhzZWxmKToKICAgICAgICAgIiIiU2VuZCB0aGUgYmxhbmsgbGluZSBlbmRpbmcgdGhlIE1JTUUgaGVhZGVycy4iIiIKQEAgLTY5NSwxMCArNzA0LDE0IEBACiAgICAgICAgIHBhdGggPSBzZWxmLnRyYW5zbGF0ZV9wYXRoKHNlbGYucGF0aCkKICAgICAgICAgZiA9IE5vbmUKICAgICAgICAgaWYgb3MucGF0aC5pc2RpcihwYXRoKToKLSAgICAgICAgICAgIGlmIG5vdCBzZWxmLnBhdGguZW5kc3dpdGgoJy8nKToKKyAgICAgICAgICAgIHBhcnRzID0gdXJsbGliLnBhcnNlLnVybHNwbGl0KHNlbGYucGF0aCkKKyAgICAgICAgICAgIGlmIG5vdCBwYXJ0cy5wYXRoLmVuZHN3aXRoKCcvJyk6CiAgICAgICAgICAgICAgICAgIyByZWRpcmVjdCBicm93c2VyIC0gZG9pbmcgYmFzaWNhbGx5IHdoYXQgYXBhY2hlIGRvZXMKICAgICAgICAgICAgICAgICBzZWxmLnNlbmRfcmVzcG9uc2UoMzAxKQotICAgICAgICAgICAgICAgIHNlbGYuc2VuZF9oZWFkZXIoIkxvY2F0aW9uIiwgc2VsZi5wYXRoICsgIi8iKQorICAgICAgICAgICAgICAgIG5ld19wYXJ0cyA9IChwYXJ0c1swXSwgcGFydHNbMV0sIHBhcnRzWzJdICsgJy8nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0c1szXSwgcGFydHNbNF0pCisgICAgICAgICAgICAgICAgbmV3X3VybCA9IHVybGxpYi5wYXJzZS51cmx1bnNwbGl0KG5ld19wYXJ0cykKKyAgICAgICAgICAgICAgICBzZWxmLnNlbmRfaGVhZGVyKCJMb2NhdGlvbiIsIG5ld191cmwpCiAgICAgICAgICAgICAgICAgc2VsZi5lbmRfaGVhZGVycygpCiAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKICAgICAgICAgICAgIGZvciBpbmRleCBpbiAiaW5kZXguaHRtbCIsICJpbmRleC5odG0iOgpAQCAtNzExLDcgKzcyNCw3IEBACiAgICAgICAgIGN0eXBlID0gc2VsZi5ndWVzc190eXBlKHBhdGgpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGYgPSBvcGVuKHBhdGgsICdyYicpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHNlbGYuc2VuZF9lcnJvcig0MDQsICJGaWxlIG5vdCBmb3VuZCIpCiAgICAgICAgICAgICByZXR1cm4gTm9uZQogICAgICAgICB0cnk6CkBAIC03MzYsMTIgKzc0OSwxNyBAQAogICAgICAgICAiIiIKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgbGlzdCA9IG9zLmxpc3RkaXIocGF0aCkKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHNlbGYuc2VuZF9lcnJvcig0MDQsICJObyBwZXJtaXNzaW9uIHRvIGxpc3QgZGlyZWN0b3J5IikKICAgICAgICAgICAgIHJldHVybiBOb25lCiAgICAgICAgIGxpc3Quc29ydChrZXk9bGFtYmRhIGE6IGEubG93ZXIoKSkKICAgICAgICAgciA9IFtdCi0gICAgICAgIGRpc3BsYXlwYXRoID0gaHRtbC5lc2NhcGUodXJsbGliLnBhcnNlLnVucXVvdGUoc2VsZi5wYXRoKSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGlzcGxheXBhdGggPSB1cmxsaWIucGFyc2UudW5xdW90ZShzZWxmLnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycz0nc3Vycm9nYXRlcGFzcycpCisgICAgICAgIGV4Y2VwdCBVbmljb2RlRGVjb2RlRXJyb3I6CisgICAgICAgICAgICBkaXNwbGF5cGF0aCA9IHVybGxpYi5wYXJzZS51bnF1b3RlKHBhdGgpCisgICAgICAgIGRpc3BsYXlwYXRoID0gaHRtbC5lc2NhcGUoZGlzcGxheXBhdGgpCiAgICAgICAgIGVuYyA9IHN5cy5nZXRmaWxlc3lzdGVtZW5jb2RpbmcoKQogICAgICAgICB0aXRsZSA9ICdEaXJlY3RvcnkgbGlzdGluZyBmb3IgJXMnICUgZGlzcGxheXBhdGgKICAgICAgICAgci5hcHBlbmQoJzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxLy9FTiIgJwpAQCAtNzYzLDkgKzc4MSwxMSBAQAogICAgICAgICAgICAgICAgIGRpc3BsYXluYW1lID0gbmFtZSArICJAIgogICAgICAgICAgICAgICAgICMgTm90ZTogYSBsaW5rIHRvIGEgZGlyZWN0b3J5IGRpc3BsYXlzIHdpdGggQCBhbmQgbGlua3Mgd2l0aCAvCiAgICAgICAgICAgICByLmFwcGVuZCgnPGxpPjxhIGhyZWY9IiVzIj4lczwvYT48L2xpPicKLSAgICAgICAgICAgICAgICAgICAgJSAodXJsbGliLnBhcnNlLnF1b3RlKGxpbmtuYW1lKSwgaHRtbC5lc2NhcGUoZGlzcGxheW5hbWUpKSkKKyAgICAgICAgICAgICAgICAgICAgJSAodXJsbGliLnBhcnNlLnF1b3RlKGxpbmtuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzPSdzdXJyb2dhdGVwYXNzJyksCisgICAgICAgICAgICAgICAgICAgICAgIGh0bWwuZXNjYXBlKGRpc3BsYXluYW1lKSkpCiAgICAgICAgIHIuYXBwZW5kKCc8L3VsPlxuPGhyPlxuPC9ib2R5PlxuPC9odG1sPlxuJykKLSAgICAgICAgZW5jb2RlZCA9ICdcbicuam9pbihyKS5lbmNvZGUoZW5jKQorICAgICAgICBlbmNvZGVkID0gJ1xuJy5qb2luKHIpLmVuY29kZShlbmMsICdzdXJyb2dhdGVlc2NhcGUnKQogICAgICAgICBmID0gaW8uQnl0ZXNJTygpCiAgICAgICAgIGYud3JpdGUoZW5jb2RlZCkKICAgICAgICAgZi5zZWVrKDApCkBAIC03ODgsNyArODA4LDExIEBACiAgICAgICAgIHBhdGggPSBwYXRoLnNwbGl0KCcjJywxKVswXQogICAgICAgICAjIERvbid0IGZvcmdldCBleHBsaWNpdCB0cmFpbGluZyBzbGFzaCB3aGVuIG5vcm1hbGl6aW5nLiBJc3N1ZTE3MzI0CiAgICAgICAgIHRyYWlsaW5nX3NsYXNoID0gcGF0aC5yc3RyaXAoKS5lbmRzd2l0aCgnLycpCi0gICAgICAgIHBhdGggPSBwb3NpeHBhdGgubm9ybXBhdGgodXJsbGliLnBhcnNlLnVucXVvdGUocGF0aCkpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHBhdGggPSB1cmxsaWIucGFyc2UudW5xdW90ZShwYXRoLCBlcnJvcnM9J3N1cnJvZ2F0ZXBhc3MnKQorICAgICAgICBleGNlcHQgVW5pY29kZURlY29kZUVycm9yOgorICAgICAgICAgICAgcGF0aCA9IHVybGxpYi5wYXJzZS51bnF1b3RlKHBhdGgpCisgICAgICAgIHBhdGggPSBwb3NpeHBhdGgubm9ybXBhdGgocGF0aCkKICAgICAgICAgd29yZHMgPSBwYXRoLnNwbGl0KCcvJykKICAgICAgICAgd29yZHMgPSBmaWx0ZXIoTm9uZSwgd29yZHMpCiAgICAgICAgIHBhdGggPSBvcy5nZXRjd2QoKQpAQCAtODU3LDE5ICs4ODEsMjEgQEAKIGRlZiBfdXJsX2NvbGxhcHNlX3BhdGgocGF0aCk6CiAgICAgIiIiCiAgICAgR2l2ZW4gYSBVUkwgcGF0aCwgcmVtb3ZlIGV4dHJhICcvJ3MgYW5kICcuJyBwYXRoIGVsZW1lbnRzIGFuZCBjb2xsYXBzZQotICAgIGFueSAnLi4nIHJlZmVyZW5jZXMgYW5kIHJldHVybnMgYSBjb2xsbGFwc2VkIHBhdGguCisgICAgYW55ICcuLicgcmVmZXJlbmNlcyBhbmQgcmV0dXJucyBhIGNvbGxhcHNlZCBwYXRoLgogCiAgICAgSW1wbGVtZW50cyBzb21ldGhpbmcgYWtpbiB0byBSRkMtMjM5NiA1LjIgc3RlcCA2IHRvIHBhcnNlIHJlbGF0aXZlIHBhdGhzLgogICAgIFRoZSB1dGlsaXR5IG9mIHRoaXMgZnVuY3Rpb24gaXMgbGltaXRlZCB0byBpc19jZ2kgbWV0aG9kIGFuZCBoZWxwcwogICAgIHByZXZlbnRpbmcgc29tZSBzZWN1cml0eSBhdHRhY2tzLgogCi0gICAgUmV0dXJuczogQSB0dXBsZSBvZiAoaGVhZCwgdGFpbCkgd2hlcmUgdGFpbCBpcyBldmVyeXRoaW5nIGFmdGVyIHRoZSBmaW5hbCAvCi0gICAgYW5kIGhlYWQgaXMgZXZlcnl0aGluZyBiZWZvcmUgaXQuICBIZWFkIHdpbGwgYWx3YXlzIHN0YXJ0IHdpdGggYSAnLycgYW5kLAotICAgIGlmIGl0IGNvbnRhaW5zIGFueXRoaW5nIGVsc2UsIG5ldmVyIGhhdmUgYSB0cmFpbGluZyAnLycuCisgICAgUmV0dXJuczogVGhlIHJlY29uc3RpdHV0ZWQgVVJMLCB3aGljaCB3aWxsIGFsd2F5cyBzdGFydCB3aXRoIGEgJy8nLgogCiAgICAgUmFpc2VzOiBJbmRleEVycm9yIGlmIHRvbyBtYW55ICcuLicgb2NjdXIgd2l0aGluIHRoZSBwYXRoLgogCiAgICAgIiIiCisgICAgIyBRdWVyeSBjb21wb25lbnQgc2hvdWxkIG5vdCBiZSBpbnZvbHZlZC4KKyAgICBwYXRoLCBfLCBxdWVyeSA9IHBhdGgucGFydGl0aW9uKCc/JykKKyAgICBwYXRoID0gdXJsbGliLnBhcnNlLnVucXVvdGUocGF0aCkKKwogICAgICMgU2ltaWxhciB0byBvcy5wYXRoLnNwbGl0KG9zLnBhdGgubm9ybXBhdGgocGF0aCkpIGJ1dCBzcGVjaWZpYyB0byBVUkwKICAgICAjIHBhdGggc2VtYW50aWNzIHJhdGhlciB0aGFuIGxvY2FsIG9wZXJhdGluZyBzeXN0ZW0gc2VtYW50aWNzLgogICAgIHBhdGhfcGFydHMgPSBwYXRoLnNwbGl0KCcvJykKQEAgLTg5MCw2ICs5MTYsOSBAQAogICAgIGVsc2U6CiAgICAgICAgIHRhaWxfcGFydCA9ICcnCiAKKyAgICBpZiBxdWVyeToKKyAgICAgICAgdGFpbF9wYXJ0ID0gJz8nLmpvaW4oKHRhaWxfcGFydCwgcXVlcnkpKQorCiAgICAgc3BsaXRwYXRoID0gKCcvJyArICcvJy5qb2luKGhlYWRfcGFydHMpLCB0YWlsX3BhcnQpCiAgICAgY29sbGFwc2VkX3BhdGggPSAiLyIuam9pbihzcGxpdHBhdGgpCiAKQEAgLTk3MSw3ICsxMDAwLDcgQEAKICAgICAgICAgKGFuZCB0aGUgbmV4dCBjaGFyYWN0ZXIgaXMgYSAnLycgb3IgdGhlIGVuZCBvZiB0aGUgc3RyaW5nKS4KIAogICAgICAgICAiIiIKLSAgICAgICAgY29sbGFwc2VkX3BhdGggPSBfdXJsX2NvbGxhcHNlX3BhdGgodXJsbGliLnBhcnNlLnVucXVvdGUoc2VsZi5wYXRoKSkKKyAgICAgICAgY29sbGFwc2VkX3BhdGggPSBfdXJsX2NvbGxhcHNlX3BhdGgoc2VsZi5wYXRoKQogICAgICAgICBkaXJfc2VwID0gY29sbGFwc2VkX3BhdGguZmluZCgnLycsIDEpCiAgICAgICAgIGhlYWQsIHRhaWwgPSBjb2xsYXBzZWRfcGF0aFs6ZGlyX3NlcF0sIGNvbGxhcHNlZF9wYXRoW2Rpcl9zZXArMTpdCiAgICAgICAgIGlmIGhlYWQgaW4gc2VsZi5jZ2lfZGlyZWN0b3JpZXM6CkBAIC0xMDA4LDExICsxMDM3LDcgQEAKICAgICAgICAgICAgICAgICBicmVhawogCiAgICAgICAgICMgZmluZCBhbiBleHBsaWNpdCBxdWVyeSBzdHJpbmcsIGlmIHByZXNlbnQuCi0gICAgICAgIGkgPSByZXN0LnJmaW5kKCc/JykKLSAgICAgICAgaWYgaSA+PSAwOgotICAgICAgICAgICAgcmVzdCwgcXVlcnkgPSByZXN0WzppXSwgcmVzdFtpKzE6XQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcXVlcnkgPSAnJworICAgICAgICByZXN0LCBfLCBxdWVyeSA9IHJlc3QucGFydGl0aW9uKCc/JykKIAogICAgICAgICAjIGRpc3NlY3QgdGhlIHBhcnQgYWZ0ZXIgdGhlIGRpcmVjdG9yeSBuYW1lIGludG8gYSBzY3JpcHQgbmFtZSAmCiAgICAgICAgICMgYSBwb3NzaWJsZSBhZGRpdGlvbmFsIHBhdGgsIHRvIGJlIHN0b3JlZCBpbiBQQVRIX0lORk8uCkBAIC0xMTMwLDcgKzExNTUsNyBAQAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgb3Muc2V0dWlkKG5vYm9keSkKLSAgICAgICAgICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgICAgICBvcy5kdXAyKHNlbGYucmZpbGUuZmlsZW5vKCksIDApCiAgICAgICAgICAgICAgICAgb3MuZHVwMihzZWxmLndmaWxlLmZpbGVubygpLCAxKQpAQCAtMTE4MywxNSArMTIwOCwxNCBAQAogICAgICAgICAgICAgICAgIHNlbGYubG9nX21lc3NhZ2UoIkNHSSBzY3JpcHQgZXhpdGVkIE9LIikKIAogCi1kZWYgdGVzdChIYW5kbGVyQ2xhc3MgPSBCYXNlSFRUUFJlcXVlc3RIYW5kbGVyLAotICAgICAgICAgU2VydmVyQ2xhc3MgPSBIVFRQU2VydmVyLCBwcm90b2NvbD0iSFRUUC8xLjAiLCBwb3J0PTgwMDApOgorZGVmIHRlc3QoSGFuZGxlckNsYXNzPUJhc2VIVFRQUmVxdWVzdEhhbmRsZXIsCisgICAgICAgICBTZXJ2ZXJDbGFzcz1IVFRQU2VydmVyLCBwcm90b2NvbD0iSFRUUC8xLjAiLCBwb3J0PTgwMDAsIGJpbmQ9IiIpOgogICAgICIiIlRlc3QgdGhlIEhUVFAgcmVxdWVzdCBoYW5kbGVyIGNsYXNzLgogCi0gICAgVGhpcyBydW5zIGFuIEhUVFAgc2VydmVyIG9uIHBvcnQgODAwMCAob3IgdGhlIGZpcnN0IGNvbW1hbmQgbGluZQotICAgIGFyZ3VtZW50KS4KKyAgICBUaGlzIHJ1bnMgYW4gSFRUUCBzZXJ2ZXIgb24gcG9ydCA4MDAwIChvciB0aGUgcG9ydCBhcmd1bWVudCkuCiAKICAgICAiIiIKLSAgICBzZXJ2ZXJfYWRkcmVzcyA9ICgnJywgcG9ydCkKKyAgICBzZXJ2ZXJfYWRkcmVzcyA9IChiaW5kLCBwb3J0KQogCiAgICAgSGFuZGxlckNsYXNzLnByb3RvY29sX3ZlcnNpb24gPSBwcm90b2NvbAogICAgIGh0dHBkID0gU2VydmVyQ2xhc3Moc2VydmVyX2FkZHJlc3MsIEhhbmRsZXJDbGFzcykKQEAgLTEyMDksMTIgKzEyMzMsMTYgQEAKICAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCiAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1jZ2knLCBhY3Rpb249J3N0b3JlX3RydWUnLAogICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdSdW4gYXMgQ0dJIFNlcnZlcicpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1iaW5kJywgJy1iJywgZGVmYXVsdD0nJywgbWV0YXZhcj0nQUREUkVTUycsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdTcGVjaWZ5IGFsdGVybmF0ZSBiaW5kIGFkZHJlc3MgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnW2RlZmF1bHQ6IGFsbCBpbnRlcmZhY2VzXScpCiAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgncG9ydCcsIGFjdGlvbj0nc3RvcmUnLAogICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD04MDAwLCB0eXBlPWludCwKICAgICAgICAgICAgICAgICAgICAgICAgIG5hcmdzPSc/JywKICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1NwZWNpZnkgYWx0ZXJuYXRlIHBvcnQgW2RlZmF1bHQ6IDgwMDBdJykKICAgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQogICAgIGlmIGFyZ3MuY2dpOgotICAgICAgICB0ZXN0KEhhbmRsZXJDbGFzcz1DR0lIVFRQUmVxdWVzdEhhbmRsZXIsIHBvcnQ9YXJncy5wb3J0KQorICAgICAgICBoYW5kbGVyX2NsYXNzID0gQ0dJSFRUUFJlcXVlc3RIYW5kbGVyCiAgICAgZWxzZToKLSAgICAgICAgdGVzdChIYW5kbGVyQ2xhc3M9U2ltcGxlSFRUUFJlcXVlc3RIYW5kbGVyLCBwb3J0PWFyZ3MucG9ydCkKKyAgICAgICAgaGFuZGxlcl9jbGFzcyA9IFNpbXBsZUhUVFBSZXF1ZXN0SGFuZGxlcgorICAgIHRlc3QoSGFuZGxlckNsYXNzPWhhbmRsZXJfY2xhc3MsIHBvcnQ9YXJncy5wb3J0LCBiaW5kPWFyZ3MuYmluZCkKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL0F1dG9Db21wbGV0ZS5weSBiL0xpYi9pZGxlbGliL0F1dG9Db21wbGV0ZS5weQppbmRleCBmMzY2MDMwLi5iMjA1MTJkIDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9BdXRvQ29tcGxldGUucHkKKysrIGIvTGliL2lkbGVsaWIvQXV0b0NvbXBsZXRlLnB5CkBAIC0yMjYsMyArMjI2LDggQEAKICAgICAgICAgbmFtZXNwYWNlID0gc3lzLm1vZHVsZXMuY29weSgpCiAgICAgICAgIG5hbWVzcGFjZS51cGRhdGUoX19tYWluX18uX19kaWN0X18pCiAgICAgICAgIHJldHVybiBldmFsKG5hbWUsIG5hbWVzcGFjZSkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIGZyb20gdW5pdHRlc3QgaW1wb3J0IG1haW4KKyAgICBtYWluKCdpZGxlbGliLmlkbGVfdGVzdC50ZXN0X2F1dG9jb21wbGV0ZScsIHZlcmJvc2l0eT0yKQpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvQXV0b0NvbXBsZXRlV2luZG93LnB5IGIvTGliL2lkbGVsaWIvQXV0b0NvbXBsZXRlV2luZG93LnB5CmluZGV4IGY2NjZlYTYuLjJlZTY4NzggMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL0F1dG9Db21wbGV0ZVdpbmRvdy5weQorKysgYi9MaWIvaWRsZWxpYi9BdXRvQ29tcGxldGVXaW5kb3cucHkKQEAgLTE5Miw2ICsxOTIsNyBAQAogICAgICAgICBzY3JvbGxiYXIuY29uZmlnKGNvbW1hbmQ9bGlzdGJveC55dmlldykKICAgICAgICAgc2Nyb2xsYmFyLnBhY2soc2lkZT1SSUdIVCwgZmlsbD1ZKQogICAgICAgICBsaXN0Ym94LnBhY2soc2lkZT1MRUZULCBmaWxsPUJPVEgsIGV4cGFuZD1UcnVlKQorICAgICAgICBhY3cubGlmdCgpICAjIHdvcmsgYXJvdW5kIGJ1ZyBpbiBUayA4LjUuMTgrIChpc3N1ZSAjMjQ1NzApCiAKICAgICAgICAgIyBJbml0aWFsaXplIHRoZSBsaXN0Ym94IHNlbGVjdGlvbgogICAgICAgICBzZWxmLmxpc3Rib3guc2VsZWN0X3NldChzZWxmLl9iaW5hcnlfc2VhcmNoKHNlbGYuc3RhcnQpKQpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvQXV0b0V4cGFuZC5weSBiL0xpYi9pZGxlbGliL0F1dG9FeHBhbmQucHkKaW5kZXggOWU5M2Q1Ny4uNzA1OTA1NCAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvQXV0b0V4cGFuZC5weQorKysgYi9MaWIvaWRsZWxpYi9BdXRvRXhwYW5kLnB5CkBAIC0xLDMgKzEsMTcgQEAKKycnJ0NvbXBsZXRlIHRoZSBjdXJyZW50IHdvcmQgYmVmb3JlIHRoZSBjdXJzb3Igd2l0aCB3b3JkcyBpbiB0aGUgZWRpdG9yLgorCitFYWNoIG1lbnUgc2VsZWN0aW9uIG9yIHNob3J0Y3V0IGtleSBzZWxlY3Rpb24gcmVwbGFjZXMgdGhlIHdvcmQgd2l0aCBhCitkaWZmZXJlbnQgd29yZCB3aXRoIHRoZSBzYW1lIHByZWZpeC4gVGhlIHNlYXJjaCBmb3IgbWF0Y2hlcyBiZWdpbnMKK2JlZm9yZSB0aGUgdGFyZ2V0IGFuZCBtb3ZlcyB0b3dhcmQgdGhlIHRvcCBvZiB0aGUgZWRpdG9yLiBJdCB0aGVuIHN0YXJ0cworYWZ0ZXIgdGhlIGN1cnNvciBhbmQgbW92ZXMgZG93bi4gSXQgdGhlbiByZXR1cm5zIHRvIHRoZSBvcmlnaW5hbCB3b3JkIGFuZAordGhlIGN5Y2xlIHN0YXJ0cyBhZ2Fpbi4KKworQ2hhbmdpbmcgdGhlIGN1cnJlbnQgdGV4dCBsaW5lIG9yIGxlYXZpbmcgdGhlIGN1cnNvciBpbiBhIGRpZmZlcmVudAorcGxhY2UgYmVmb3JlIHJlcXVlc3RpbmcgdGhlIG5leHQgc2VsZWN0aW9uIGNhdXNlcyBBdXRvRXhwYW5kIHRvIHJlc2V0CitpdHMgc3RhdGUuCisKK1RoaXMgaXMgYW4gZXh0ZW5zaW9uIGZpbGUgYW5kIHRoZXJlIGlzIG9ubHkgb25lIGluc3RhbmNlIG9mIEF1dG9FeHBhbmQuCisnJycKIGltcG9ydCBzdHJpbmcKIGltcG9ydCByZQogCkBAIC0yMCw2ICszNCw3IEBACiAgICAgICAgIHNlbGYuc3RhdGUgPSBOb25lCiAKICAgICBkZWYgZXhwYW5kX3dvcmRfZXZlbnQoc2VsZiwgZXZlbnQpOgorICAgICAgICAiUmVwbGFjZSB0aGUgY3VycmVudCB3b3JkIHdpdGggdGhlIG5leHQgZXhwYW5zaW9uLiIKICAgICAgICAgY3VyaW5zZXJ0ID0gc2VsZi50ZXh0LmluZGV4KCJpbnNlcnQiKQogICAgICAgICBjdXJsaW5lID0gc2VsZi50ZXh0LmdldCgiaW5zZXJ0IGxpbmVzdGFydCIsICJpbnNlcnQgbGluZWVuZCIpCiAgICAgICAgIGlmIG5vdCBzZWxmLnN0YXRlOgpAQCAtNDYsNiArNjEsNyBAQAogICAgICAgICByZXR1cm4gImJyZWFrIgogCiAgICAgZGVmIGdldHdvcmRzKHNlbGYpOgorICAgICAgICAiUmV0dXJuIGEgbGlzdCBvZiB3b3JkcyB0aGF0IG1hdGNoIHRoZSBwcmVmaXggYmVmb3JlIHRoZSBjdXJzb3IuIgogICAgICAgICB3b3JkID0gc2VsZi5nZXRwcmV2d29yZCgpCiAgICAgICAgIGlmIG5vdCB3b3JkOgogICAgICAgICAgICAgcmV0dXJuIFtdCkBAIC03Niw4ICs5MiwxMyBAQAogICAgICAgICByZXR1cm4gd29yZHMKIAogICAgIGRlZiBnZXRwcmV2d29yZChzZWxmKToKKyAgICAgICAgIlJldHVybiB0aGUgd29yZCBwcmVmaXggYmVmb3JlIHRoZSBjdXJzb3IuIgogICAgICAgICBsaW5lID0gc2VsZi50ZXh0LmdldCgiaW5zZXJ0IGxpbmVzdGFydCIsICJpbnNlcnQiKQogICAgICAgICBpID0gbGVuKGxpbmUpCiAgICAgICAgIHdoaWxlIGkgPiAwIGFuZCBsaW5lW2ktMV0gaW4gc2VsZi53b3JkY2hhcnM6CiAgICAgICAgICAgICBpID0gaS0xCiAgICAgICAgIHJldHVybiBsaW5lW2k6XQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIGltcG9ydCB1bml0dGVzdAorICAgIHVuaXR0ZXN0Lm1haW4oJ2lkbGVsaWIuaWRsZV90ZXN0LnRlc3RfYXV0b2V4cGFuZCcsIHZlcmJvc2l0eT0yKQpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvQmluZGluZ3MucHkgYi9MaWIvaWRsZWxpYi9CaW5kaW5ncy5weQppbmRleCA2NWMwMzE3Li5hYjI1ZmYxIDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9CaW5kaW5ncy5weQorKysgYi9MaWIvaWRsZWxpYi9CaW5kaW5ncy5weQpAQCAtOCw5ICs4LDE2IEBACiB3aW5kb3dzLgogCiAiIiIKLWltcG9ydCBzeXMKK2Zyb20gaW1wb3J0bGliLnV0aWwgaW1wb3J0IGZpbmRfc3BlYworCiBmcm9tIGlkbGVsaWIuY29uZmlnSGFuZGxlciBpbXBvcnQgaWRsZUNvbmYKLWZyb20gaWRsZWxpYiBpbXBvcnQgbWFjb3N4U3VwcG9ydAorCisjICAgV2FybmluZzogbWVudWRlZnMgaXMgYWx0ZXJlZCBpbiBtYWNvc3hTdXBwb3J0Lm92ZXJyaWRlUm9vdE1lbnUoKQorIyAgIGFmdGVyIGl0IGlzIGRldGVybWluZWQgdGhhdCBhbiBPUyBYIEFxdWEgVGsgaXMgaW4gdXNlLAorIyAgIHdoaWNoIGNhbm5vdCBiZSBkb25lIHVudGlsIGFmdGVyIFRrKCkgaXMgZmlyc3QgY2FsbGVkLgorIyAgIERvIG5vdCBhbHRlciB0aGUgJ2ZpbGUnLCAnb3B0aW9ucycsIG9yICdoZWxwJyBjYXNjYWRlcyBoZXJlCisjICAgd2l0aG91dCBhbHRlcmluZyBvdmVycmlkZVJvb3RNZW51KCkgYXMgd2VsbC4KKyMgICAgICAgVE9ETzogTWFrZSB0aGlzIG1vcmUgcm9idXN0CiAKIG1lbnVkZWZzID0gWwogICMgdW5kZXJzY29yZSBwcmVmaXhlcyBjaGFyYWN0ZXIgdG8gdW5kZXJzY29yZQpAQCAtNzAsNyArNzcsNyBAQAogICAgKCchX0F1dG8tb3BlbiBTdGFjayBWaWV3ZXInLCAnPDx0b2dnbGUtaml0LXN0YWNrLXZpZXdlcj4+JyksCiAgICBdKSwKICAoJ29wdGlvbnMnLCBbCi0gICAoJ19Db25maWd1cmUgSURMRS4uLicsICc8PG9wZW4tY29uZmlnLWRpYWxvZz4+JyksCisgICAoJ0NvbmZpZ3VyZSBfSURMRScsICc8PG9wZW4tY29uZmlnLWRpYWxvZz4+JyksCiAgICBOb25lLAogICAgXSksCiAgKCdoZWxwJywgWwpAQCAtODEsMjcgKzg4LDcgQEAKICAgIF0pLAogXQogCi1pZiBtYWNvc3hTdXBwb3J0LnJ1bm5pbmdBc09TWEFwcCgpOgotICAgICMgUnVubmluZyBhcyBhIHByb3BlciBNYWNPUyBhcHBsaWNhdGlvbiBidW5kbGUuIFRoaXMgYmxvY2sgcmVzdHJ1Y3R1cmVzCi0gICAgIyB0aGUgbWVudXMgYSBsaXR0bGUgdG8gbWFrZSB0aGVtIGNvbmZvcm0gYmV0dGVyIHRvIHRoZSBISUcuCi0KLSAgICBxdWl0SXRlbSA9IG1lbnVkZWZzWzBdWzFdWy0xXQotICAgIGNsb3NlSXRlbSA9IG1lbnVkZWZzWzBdWzFdWy0yXQotCi0gICAgIyBSZW1vdmUgdGhlIGxhc3QgMyBpdGVtcyBvZiB0aGUgZmlsZSBtZW51OiBhIHNlcGFyYXRvciwgY2xvc2Ugd2luZG93IGFuZAotICAgICMgcXVpdC4gQ2xvc2Ugd2luZG93IHdpbGwgYmUgcmVpbnNlcnRlZCBqdXN0IGFib3ZlIHRoZSBzYXZlIGl0ZW0sIHdoZXJlCi0gICAgIyBpdCBzaG91bGQgYmUgYWNjb3JkaW5nIHRvIHRoZSBISUcuIFF1aXQgaXMgaW4gdGhlIGFwcGxpY2F0aW9uIG1lbnUuCi0gICAgZGVsIG1lbnVkZWZzWzBdWzFdWy0zOl0KLSAgICBtZW51ZGVmc1swXVsxXS5pbnNlcnQoNiwgY2xvc2VJdGVtKQotCi0gICAgIyBSZW1vdmUgdGhlICdBYm91dCcgZW50cnkgZnJvbSB0aGUgaGVscCBtZW51LCBpdCBpcyBpbiB0aGUgYXBwbGljYXRpb24KLSAgICAjIG1lbnUKLSAgICBkZWwgbWVudWRlZnNbLTFdWzFdWzA6Ml0KLQotICAgICMgUmVtb3ZlIHRoZSAnQ29uZmlndXJlJyBlbnRyeSBmcm9tIHRoZSBvcHRpb25zIG1lbnUsIGl0IGlzIGluIHRoZQotICAgICMgYXBwbGljYXRpb24gbWVudSBhcyAnUHJlZmVyZW5jZXMnCi0gICAgZGVsIG1lbnVkZWZzWy0yXVsxXVswOjJdCitpZiBmaW5kX3NwZWMoJ3R1cnRsZWRlbW8nKToKKyAgICBtZW51ZGVmc1stMV1bMV0uYXBwZW5kKCgnVHVydGxlIERlbW8nLCAnPDxvcGVuLXR1cnRsZS1kZW1vPj4nKSkKIAogZGVmYXVsdF9rZXlkZWZzID0gaWRsZUNvbmYuR2V0Q3VycmVudEtleVNldCgpCi0KLWRlbCBzeXMKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL0NhbGxUaXBXaW5kb3cucHkgYi9MaWIvaWRsZWxpYi9DYWxsVGlwV2luZG93LnB5CmluZGV4IDhlMjlkYWIuLjhlNjhhNzYgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL0NhbGxUaXBXaW5kb3cucHkKKysrIGIvTGliL2lkbGVsaWIvQ2FsbFRpcFdpbmRvdy5weQpAQCAtMiw5ICsyLDggQEAKIAogQWZ0ZXIgVG9vbFRpcC5weSwgd2hpY2ggdXNlcyBpZGVhcyBnbGVhbmVkIGZyb20gUHlTb2wKIFVzZWQgYnkgdGhlIENhbGxUaXBzIElETEUgZXh0ZW5zaW9uLgotCiAiIiIKLWZyb20gdGtpbnRlciBpbXBvcnQgKgorZnJvbSB0a2ludGVyIGltcG9ydCBUb3BsZXZlbCwgTGFiZWwsIExFRlQsIFNPTElELCBUY2xFcnJvcgogCiBISURFX1ZJUlRVQUxfRVZFTlRfTkFNRSA9ICI8PGNhbGx0aXB3aW5kb3ctaGlkZT4+IgogSElERV9TRVFVRU5DRVMgPSAoIjxLZXktRXNjYXBlPiIsICI8Rm9jdXNPdXQ+IikKQEAgLTczLDYgKzcyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ9IiNmZmZmZTAiLCByZWxpZWY9U09MSUQsIGJvcmRlcndpZHRoPTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250ID0gc2VsZi53aWRnZXRbJ2ZvbnQnXSkKICAgICAgICAgc2VsZi5sYWJlbC5wYWNrKCkKKyAgICAgICAgdHcubGlmdCgpICAjIHdvcmsgYXJvdW5kIGJ1ZyBpbiBUayA4LjUuMTgrIChpc3N1ZSAjMjQ1NzApCiAKICAgICAgICAgc2VsZi5jaGVja2hpZGVpZCA9IHNlbGYud2lkZ2V0LmJpbmQoQ0hFQ0tISURFX1ZJUlRVQUxfRVZFTlRfTkFNRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jaGVja2hpZGVfZXZlbnQpCkBAIC0xMzMsMzcgKzEzMywyOSBAQAogICAgICAgICByZXR1cm4gYm9vbChzZWxmLnRpcHdpbmRvdykKIAogCitkZWYgX2NhbGx0aXBfd2luZG93KHBhcmVudCk6ICAjIGh0ZXN0ICMKKyAgICBmcm9tIHRraW50ZXIgaW1wb3J0IFRvcGxldmVsLCBUZXh0LCBMRUZULCBCT1RICiAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMKLSMgVGVzdCBDb2RlCi0jCi1jbGFzcyBjb250YWluZXI6ICMgQ29uY2VwdHVhbGx5IGFuIGVkaXRvcl93aW5kb3cKLSAgICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgICAgIHJvb3QgPSBUaygpCi0gICAgICAgIHRleHQgPSBzZWxmLnRleHQgPSBUZXh0KHJvb3QpCi0gICAgICAgIHRleHQucGFjayhzaWRlPUxFRlQsIGZpbGw9Qk9USCwgZXhwYW5kPTEpCi0gICAgICAgIHRleHQuaW5zZXJ0KCJpbnNlcnQiLCAic3RyaW5nLnNwbGl0IikKLSAgICAgICAgcm9vdC51cGRhdGUoKQotICAgICAgICBzZWxmLmNhbGx0aXAgPSBDYWxsVGlwKHRleHQpCisgICAgdG9wID0gVG9wbGV2ZWwocGFyZW50KQorICAgIHRvcC50aXRsZSgiVGVzdCBjYWxsdGlwcyIpCisgICAgdG9wLmdlb21ldHJ5KCIyMDB4MTAwKyVkKyVkIiAlIChwYXJlbnQud2luZm9fcm9vdHgoKSArIDIwMCwKKyAgICAgICAgICAgICAgICAgIHBhcmVudC53aW5mb19yb290eSgpICsgMTUwKSkKKyAgICB0ZXh0ID0gVGV4dCh0b3ApCisgICAgdGV4dC5wYWNrKHNpZGU9TEVGVCwgZmlsbD1CT1RILCBleHBhbmQ9MSkKKyAgICB0ZXh0Lmluc2VydCgiaW5zZXJ0IiwgInN0cmluZy5zcGxpdCIpCisgICAgdG9wLnVwZGF0ZSgpCisgICAgY2FsbHRpcCA9IENhbGxUaXAodGV4dCkKIAotICAgICAgICB0ZXh0LmV2ZW50X2FkZCgiPDxjYWxsdGlwLXNob3c+PiIsICIoIikKLSAgICAgICAgdGV4dC5ldmVudF9hZGQoIjw8Y2FsbHRpcC1oaWRlPj4iLCAiKSIpCi0gICAgICAgIHRleHQuYmluZCgiPDxjYWxsdGlwLXNob3c+PiIsIHNlbGYuY2FsbHRpcF9zaG93KQotICAgICAgICB0ZXh0LmJpbmQoIjw8Y2FsbHRpcC1oaWRlPj4iLCBzZWxmLmNhbGx0aXBfaGlkZSkKLQotICAgICAgICB0ZXh0LmZvY3VzX3NldCgpCi0gICAgICAgIHJvb3QubWFpbmxvb3AoKQotCi0gICAgZGVmIGNhbGx0aXBfc2hvdyhzZWxmLCBldmVudCk6Ci0gICAgICAgIHNlbGYuY2FsbHRpcC5zaG93dGlwKCJIZWxsbyB3b3JsZCIpCi0KLSAgICBkZWYgY2FsbHRpcF9oaWRlKHNlbGYsIGV2ZW50KToKLSAgICAgICAgc2VsZi5jYWxsdGlwLmhpZGV0aXAoKQotCi1kZWYgbWFpbigpOgotICAgICMgVGVzdCBjb2RlCi0gICAgYz1jb250YWluZXIoKQorICAgIGRlZiBjYWxsdGlwX3Nob3coZXZlbnQpOgorICAgICAgICBjYWxsdGlwLnNob3d0aXAoIihzPUhlbGxvIHdvcmxkKSIsICJpbnNlcnQiLCAiZW5kIikKKyAgICBkZWYgY2FsbHRpcF9oaWRlKGV2ZW50KToKKyAgICAgICAgY2FsbHRpcC5oaWRldGlwKCkKKyAgICB0ZXh0LmV2ZW50X2FkZCgiPDxjYWxsdGlwLXNob3c+PiIsICIoIikKKyAgICB0ZXh0LmV2ZW50X2FkZCgiPDxjYWxsdGlwLWhpZGU+PiIsICIpIikKKyAgICB0ZXh0LmJpbmQoIjw8Y2FsbHRpcC1zaG93Pj4iLCBjYWxsdGlwX3Nob3cpCisgICAgdGV4dC5iaW5kKCI8PGNhbGx0aXAtaGlkZT4+IiwgY2FsbHRpcF9oaWRlKQorICAgIHRleHQuZm9jdXNfc2V0KCkKIAogaWYgX19uYW1lX189PSdfX21haW5fXyc6Ci0gICAgbWFpbigpCisgICAgZnJvbSBpZGxlbGliLmlkbGVfdGVzdC5odGVzdCBpbXBvcnQgcnVuCisgICAgcnVuKF9jYWxsdGlwX3dpbmRvdykKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL0NsYXNzQnJvd3Nlci5weSBiL0xpYi9pZGxlbGliL0NsYXNzQnJvd3Nlci5weQppbmRleCA3MTE3NmNkLi5kMDljNTJmIDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9DbGFzc0Jyb3dzZXIucHkKKysrIGIvTGliL2lkbGVsaWIvQ2xhc3NCcm93c2VyLnB5CkBAIC0xOSwxMyArMTksMjMgQEAKIGZyb20gaWRsZWxpYi5UcmVlV2lkZ2V0IGltcG9ydCBUcmVlTm9kZSwgVHJlZUl0ZW0sIFNjcm9sbGVkQ2FudmFzCiBmcm9tIGlkbGVsaWIuY29uZmlnSGFuZGxlciBpbXBvcnQgaWRsZUNvbmYKIAorZmlsZV9vcGVuID0gTm9uZSAgIyBNZXRob2QuLi5JdGVtIGFuZCBDbGFzcy4uLkl0ZW0gdXNlIHRoaXMuCisjIE5vcm1hbGx5IFB5U2hlbGwuZmxpc3Qub3BlbiwgYnV0IHRoZXJlIGlzIG5vIFB5U2hlbGwuZmxpc3QgZm9yIGh0ZXN0LgorCiBjbGFzcyBDbGFzc0Jyb3dzZXI6CiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgZmxpc3QsIG5hbWUsIHBhdGgpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmbGlzdCwgbmFtZSwgcGF0aCwgX2h0ZXN0PUZhbHNlKToKICAgICAgICAgIyBYWFggVGhpcyBBUEkgc2hvdWxkIGNoYW5nZSwgaWYgdGhlIGZpbGUgZG9lc24ndCBlbmQgaW4gIi5weSIKICAgICAgICAgIyBYWFggdGhlIGNvZGUgaGVyZSBpcyBib2d1cyEKKyAgICAgICAgIiIiCisgICAgICAgIF9odGVzdCAtIGJvb2wsIGNoYW5nZSBib3ggd2hlbiBsb2NhdGlvbiBydW5uaW5nIGh0ZXN0LgorICAgICAgICAiIiIKKyAgICAgICAgZ2xvYmFsIGZpbGVfb3BlbgorICAgICAgICBpZiBub3QgX2h0ZXN0OgorICAgICAgICAgICAgZmlsZV9vcGVuID0gUHlTaGVsbC5mbGlzdC5vcGVuCiAgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKICAgICAgICAgc2VsZi5maWxlID0gb3MucGF0aC5qb2luKHBhdGhbMF0sIHNlbGYubmFtZSArICIucHkiKQorICAgICAgICBzZWxmLl9odGVzdCA9IF9odGVzdAogICAgICAgICBzZWxmLmluaXQoZmxpc3QpCiAKICAgICBkZWYgY2xvc2Uoc2VsZiwgZXZlbnQ9Tm9uZSk6CkBAIC00MCwxMCArNTAsMTMgQEAKICAgICAgICAgc2VsZi50b3AgPSB0b3AgPSBMaXN0ZWRUb3BsZXZlbChmbGlzdC5yb290KQogICAgICAgICB0b3AucHJvdG9jb2woIldNX0RFTEVURV9XSU5ET1ciLCBzZWxmLmNsb3NlKQogICAgICAgICB0b3AuYmluZCgiPEVzY2FwZT4iLCBzZWxmLmNsb3NlKQorICAgICAgICBpZiBzZWxmLl9odGVzdDogIyBwbGFjZSBkaWFsb2cgYmVsb3cgcGFyZW50IGlmIHJ1bm5pbmcgaHRlc3QKKyAgICAgICAgICAgIHRvcC5nZW9tZXRyeSgiKyVkKyVkIiAlCisgICAgICAgICAgICAgICAgKGZsaXN0LnJvb3Qud2luZm9fcm9vdHgoKSwgZmxpc3Qucm9vdC53aW5mb19yb290eSgpICsgMjAwKSkKICAgICAgICAgc2VsZi5zZXR0aXRsZSgpCiAgICAgICAgIHRvcC5mb2N1c19zZXQoKQogICAgICAgICAjIGNyZWF0ZSBzY3JvbGxlZCBjYW52YXMKLSAgICAgICAgdGhlbWUgPSBpZGxlQ29uZi5HZXRPcHRpb24oJ21haW4nLCdUaGVtZScsJ25hbWUnKQorICAgICAgICB0aGVtZSA9IGlkbGVDb25mLkN1cnJlbnRUaGVtZSgpCiAgICAgICAgIGJhY2tncm91bmQgPSBpZGxlQ29uZi5HZXRIaWdobGlnaHQodGhlbWUsICdub3JtYWwnKVsnYmFja2dyb3VuZCddCiAgICAgICAgIHNjID0gU2Nyb2xsZWRDYW52YXModG9wLCBiZz1iYWNrZ3JvdW5kLCBoaWdobGlnaHR0aGlja25lc3M9MCwgdGFrZWZvY3VzPTEpCiAgICAgICAgIHNjLmZyYW1lLnBhY2soZXhwYW5kPTEsIGZpbGw9ImJvdGgiKQpAQCAtOTQsNyArMTA3LDcgQEAKICAgICAgICAgICAgIHJldHVybiBbXQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBkaWN0ID0gcHljbGJyLnJlYWRtb2R1bGVfZXgobmFtZSwgW2Rpcl0gKyBzeXMucGF0aCkKLSAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yIGFzIG1zZzoKKyAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgogICAgICAgICAgICAgcmV0dXJuIFtdCiAgICAgICAgIGl0ZW1zID0gW10KICAgICAgICAgc2VsZi5jbGFzc2VzID0ge30KQEAgLTE2Myw3ICsxNzYsNyBAQAogICAgIGRlZiBPbkRvdWJsZUNsaWNrKHNlbGYpOgogICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc2VsZi5maWxlKToKICAgICAgICAgICAgIHJldHVybgotICAgICAgICBlZGl0ID0gUHlTaGVsbC5mbGlzdC5vcGVuKHNlbGYuZmlsZSkKKyAgICAgICAgZWRpdCA9IGZpbGVfb3BlbihzZWxmLmZpbGUpCiAgICAgICAgIGlmIGhhc2F0dHIoc2VsZi5jbCwgJ2xpbmVubycpOgogICAgICAgICAgICAgbGluZW5vID0gc2VsZi5jbC5saW5lbm8KICAgICAgICAgICAgIGVkaXQuZ290b2xpbmUobGluZW5vKQpAQCAtMTk5LDEwICsyMTIsMTAgQEAKICAgICBkZWYgT25Eb3VibGVDbGljayhzZWxmKToKICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHNlbGYuZmlsZSk6CiAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgZWRpdCA9IFB5U2hlbGwuZmxpc3Qub3BlbihzZWxmLmZpbGUpCisgICAgICAgIGVkaXQgPSBmaWxlX29wZW4oc2VsZi5maWxlKQogICAgICAgICBlZGl0LmdvdG9saW5lKHNlbGYuY2wubWV0aG9kc1tzZWxmLm5hbWVdKQogCi1kZWYgbWFpbigpOgorZGVmIF9jbGFzc19icm93c2VyKHBhcmVudCk6ICNXcmFwcGVyIGZvciBodGVzdAogICAgIHRyeToKICAgICAgICAgZmlsZSA9IF9fZmlsZV9fCiAgICAgZXhjZXB0IE5hbWVFcnJvcjoKQEAgLTIxMyw5ICsyMjYsMTEgQEAKICAgICAgICAgICAgIGZpbGUgPSBzeXMuYXJndlswXQogICAgIGRpciwgZmlsZSA9IG9zLnBhdGguc3BsaXQoZmlsZSkKICAgICBuYW1lID0gb3MucGF0aC5zcGxpdGV4dChmaWxlKVswXQotICAgIENsYXNzQnJvd3NlcihQeVNoZWxsLmZsaXN0LCBuYW1lLCBbZGlyXSkKLSAgICBpZiBzeXMuc3RkaW4gaXMgc3lzLl9fc3RkaW5fXzoKLSAgICAgICAgbWFpbmxvb3AoKQorICAgIGZsaXN0ID0gUHlTaGVsbC5QeVNoZWxsRmlsZUxpc3QocGFyZW50KQorICAgIGdsb2JhbCBmaWxlX29wZW4KKyAgICBmaWxlX29wZW4gPSBmbGlzdC5vcGVuCisgICAgQ2xhc3NCcm93c2VyKGZsaXN0LCBuYW1lLCBbZGlyXSwgX2h0ZXN0PVRydWUpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgbWFpbigpCisgICAgZnJvbSBpZGxlbGliLmlkbGVfdGVzdC5odGVzdCBpbXBvcnQgcnVuCisgICAgcnVuKF9jbGFzc19icm93c2VyKQpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvQ29kZUNvbnRleHQucHkgYi9MaWIvaWRsZWxpYi9Db2RlQ29udGV4dC5weQppbmRleCA4NDQ5MWQ1Li40NDc4M2I2IDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9Db2RlQ29udGV4dC5weQorKysgYi9MaWIvaWRsZWxpYi9Db2RlQ29udGV4dC5weQpAQCAtMTUsOCArMTUsOCBAQAogZnJvbSBzeXMgaW1wb3J0IG1heHNpemUgYXMgSU5GSU5JVFkKIGZyb20gaWRsZWxpYi5jb25maWdIYW5kbGVyIGltcG9ydCBpZGxlQ29uZgogCi1CTE9DS09QRU5FUlMgPSBzZXQoWyJjbGFzcyIsICJkZWYiLCAiZWxpZiIsICJlbHNlIiwgImV4Y2VwdCIsICJmaW5hbGx5IiwgImZvciIsCi0gICAgICAgICAgICAgICAgICAgICJpZiIsICJ0cnkiLCAid2hpbGUiLCAid2l0aCJdKQorQkxPQ0tPUEVORVJTID0geyJjbGFzcyIsICJkZWYiLCAiZWxpZiIsICJlbHNlIiwgImV4Y2VwdCIsICJmaW5hbGx5IiwgImZvciIsCisgICAgICAgICAgICAgICAgICAgICJpZiIsICJ0cnkiLCAid2hpbGUiLCAid2l0aCJ9CiBVUERBVEVJTlRFUlZBTCA9IDEwMCAjIG1pbGxpc2VjCiBGT05UVVBEQVRFSU5URVJWQUwgPSAxMDAwICMgbWlsbGlzZWMKIApkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvQ29sb3JEZWxlZ2F0b3IucHkgYi9MaWIvaWRsZWxpYi9Db2xvckRlbGVnYXRvci5weQppbmRleCA2MWUyYmU0Li45ZjMxMzQ5IDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9Db2xvckRlbGVnYXRvci5weQorKysgYi9MaWIvaWRsZWxpYi9Db2xvckRlbGVnYXRvci5weQpAQCAtMiw3ICsyLDYgQEAKIGltcG9ydCByZQogaW1wb3J0IGtleXdvcmQKIGltcG9ydCBidWlsdGlucwotZnJvbSB0a2ludGVyIGltcG9ydCAqCiBmcm9tIGlkbGVsaWIuRGVsZWdhdG9yIGltcG9ydCBEZWxlZ2F0b3IKIGZyb20gaWRsZWxpYi5jb25maWdIYW5kbGVyIGltcG9ydCBpZGxlQ29uZgogCkBAIC0zMiw3ICszMSw2IEBACiAKIHByb2cgPSByZS5jb21waWxlKG1ha2VfcGF0KCksIHJlLlMpCiBpZHByb2cgPSByZS5jb21waWxlKHIiXHMrKFx3KykiLCByZS5TKQotYXNwcm9nID0gcmUuY29tcGlsZShyIi4qP1xiKGFzKVxiIikKIAogY2xhc3MgQ29sb3JEZWxlZ2F0b3IoRGVsZWdhdG9yKToKIApAQCAtNDAsNyArMzgsNiBAQAogICAgICAgICBEZWxlZ2F0b3IuX19pbml0X18oc2VsZikKICAgICAgICAgc2VsZi5wcm9nID0gcHJvZwogICAgICAgICBzZWxmLmlkcHJvZyA9IGlkcHJvZwotICAgICAgICBzZWxmLmFzcHJvZyA9IGFzcHJvZwogICAgICAgICBzZWxmLkxvYWRUYWdEZWZzKCkKIAogICAgIGRlZiBzZXRkZWxlZ2F0ZShzZWxmLCBkZWxlZ2F0ZSk6CkBAIC02Myw3ICs2MCw3IEBACiAgICAgICAgIHNlbGYudGFnX3JhaXNlKCdzZWwnKQogCiAgICAgZGVmIExvYWRUYWdEZWZzKHNlbGYpOgotICAgICAgICB0aGVtZSA9IGlkbGVDb25mLkdldE9wdGlvbignbWFpbicsJ1RoZW1lJywnbmFtZScpCisgICAgICAgIHRoZW1lID0gaWRsZUNvbmYuQ3VycmVudFRoZW1lKCkKICAgICAgICAgc2VsZi50YWdkZWZzID0gewogICAgICAgICAgICAgIkNPTU1FTlQiOiBpZGxlQ29uZi5HZXRIaWdobGlnaHQodGhlbWUsICJjb21tZW50IiksCiAgICAgICAgICAgICAiS0VZV09SRCI6IGlkbGVDb25mLkdldEhpZ2hsaWdodCh0aGVtZSwgImtleXdvcmQiKSwKQEAgLTcyLDcgKzY5LDYgQEAKICAgICAgICAgICAgICJERUZJTklUSU9OIjogaWRsZUNvbmYuR2V0SGlnaGxpZ2h0KHRoZW1lLCAiZGVmaW5pdGlvbiIpLAogICAgICAgICAgICAgIlNZTkMiOiB7J2JhY2tncm91bmQnOk5vbmUsJ2ZvcmVncm91bmQnOk5vbmV9LAogICAgICAgICAgICAgIlRPRE8iOiB7J2JhY2tncm91bmQnOk5vbmUsJ2ZvcmVncm91bmQnOk5vbmV9LAotICAgICAgICAgICAgIkJSRUFLIjogaWRsZUNvbmYuR2V0SGlnaGxpZ2h0KHRoZW1lLCAiYnJlYWsiKSwKICAgICAgICAgICAgICJFUlJPUiI6IGlkbGVDb25mLkdldEhpZ2hsaWdodCh0aGVtZSwgImVycm9yIiksCiAgICAgICAgICAgICAjIFRoZSBmb2xsb3dpbmcgaXMgdXNlZCBieSBSZXBsYWNlRGlhbG9nOgogICAgICAgICAgICAgImhpdCI6IGlkbGVDb25mLkdldEhpZ2hsaWdodCh0aGVtZSwgImhpdCIpLApAQCAtMjE0LDIyICsyMTAsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50YWdfYWRkKCJERUZJTklUSU9OIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkICsgIislZGMiICUgYSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkICsgIislZGMiICUgYikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGlmIHZhbHVlID09ICJpbXBvcnQiOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGNvbG9yIGFsbCB0aGUgImFzIiB3b3JkcyBvbiBzYW1lIGxpbmUsIGV4Y2VwdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGlmIGluIGEgY29tbWVudDsgY2hlYXAgYXBwcm94aW1hdGlvbiB0byB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB0cnV0aAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAnIycgaW4gY2hhcnM6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRwb3MgPSBjaGFycy5pbmRleCgnIycpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRwb3MgPSBsZW4oY2hhcnMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIFRydWU6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtMSA9IHNlbGYuYXNwcm9nLm1hdGNoKGNoYXJzLCBiLCBlbmRwb3MpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgbTE6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEsIGIgPSBtMS5zcGFuKDEpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRhZ19hZGQoIktFWVdPUkQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWQgKyAiKyVkYyIgJSBhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWQgKyAiKyVkYyIgJSBiKQogICAgICAgICAgICAgICAgICAgICBtID0gc2VsZi5wcm9nLnNlYXJjaChjaGFycywgbS5lbmQoKSkKICAgICAgICAgICAgICAgICBpZiAiU1lOQyIgaW4gc2VsZi50YWdfbmFtZXMobmV4dCArICItMWMiKToKICAgICAgICAgICAgICAgICAgICAgaGVhZCA9IG5leHQKQEAgLTI1MywxNyArMjMzLDI0IEBACiAgICAgICAgIGZvciB0YWcgaW4gc2VsZi50YWdkZWZzOgogICAgICAgICAgICAgc2VsZi50YWdfcmVtb3ZlKHRhZywgIjEuMCIsICJlbmQiKQogCi1kZWYgbWFpbigpOgorZGVmIF9jb2xvcl9kZWxlZ2F0b3IocGFyZW50KTogICMgaHRlc3QgIworICAgIGZyb20gdGtpbnRlciBpbXBvcnQgVG9wbGV2ZWwsIFRleHQKICAgICBmcm9tIGlkbGVsaWIuUGVyY29sYXRvciBpbXBvcnQgUGVyY29sYXRvcgotICAgIHJvb3QgPSBUaygpCi0gICAgcm9vdC53bV9wcm90b2NvbCgiV01fREVMRVRFX1dJTkRPVyIsIHJvb3QucXVpdCkKLSAgICB0ZXh0ID0gVGV4dChiYWNrZ3JvdW5kPSJ3aGl0ZSIpCisKKyAgICB0b3AgPSBUb3BsZXZlbChwYXJlbnQpCisgICAgdG9wLnRpdGxlKCJUZXN0IENvbG9yRGVsZWdhdG9yIikKKyAgICB0b3AuZ2VvbWV0cnkoIjIwMHgxMDArJWQrJWQiICUgKHBhcmVudC53aW5mb19yb290eCgpICsgMjAwLAorICAgICAgICAgICAgICAgICAgcGFyZW50LndpbmZvX3Jvb3R5KCkgKyAxNTApKQorICAgIHNvdXJjZSA9ICJpZiBzb21lbmFtZTogeCA9ICdhYmMnICMgY29tbWVudFxucHJpbnRcbiIKKyAgICB0ZXh0ID0gVGV4dCh0b3AsIGJhY2tncm91bmQ9IndoaXRlIikKICAgICB0ZXh0LnBhY2soZXhwYW5kPTEsIGZpbGw9ImJvdGgiKQorICAgIHRleHQuaW5zZXJ0KCJpbnNlcnQiLCBzb3VyY2UpCiAgICAgdGV4dC5mb2N1c19zZXQoKQorCiAgICAgcCA9IFBlcmNvbGF0b3IodGV4dCkKICAgICBkID0gQ29sb3JEZWxlZ2F0b3IoKQogICAgIHAuaW5zZXJ0ZmlsdGVyKGQpCi0gICAgcm9vdC5tYWlubG9vcCgpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgbWFpbigpCisgICAgZnJvbSBpZGxlbGliLmlkbGVfdGVzdC5odGVzdCBpbXBvcnQgcnVuCisgICAgcnVuKF9jb2xvcl9kZWxlZ2F0b3IpCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9EZWJ1Z2dlci5weSBiL0xpYi9pZGxlbGliL0RlYnVnZ2VyLnB5CmluZGV4IGQ0ODcyZWQuLjI1MDQyMmUgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL0RlYnVnZ2VyLnB5CisrKyBiL0xpYi9pZGxlbGliL0RlYnVnZ2VyLnB5CkBAIC0xLDYgKzEsNSBAQAogaW1wb3J0IG9zCiBpbXBvcnQgYmRiCi1pbXBvcnQgdHlwZXMKIGZyb20gdGtpbnRlciBpbXBvcnQgKgogZnJvbSBpZGxlbGliLldpbmRvd0xpc3QgaW1wb3J0IExpc3RlZFRvcGxldmVsCiBmcm9tIGlkbGVsaWIuU2Nyb2xsZWRMaXN0IGltcG9ydCBTY3JvbGxlZExpc3QKQEAgLTE4LDcgKzE3LDEwIEBACiAgICAgICAgICAgICBzZWxmLnNldF9zdGVwKCkKICAgICAgICAgICAgIHJldHVybgogICAgICAgICBtZXNzYWdlID0gc2VsZi5fX2ZyYW1lMm1lc3NhZ2UoZnJhbWUpCi0gICAgICAgIHNlbGYuZ3VpLmludGVyYWN0aW9uKG1lc3NhZ2UsIGZyYW1lKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmd1aS5pbnRlcmFjdGlvbihtZXNzYWdlLCBmcmFtZSkKKyAgICAgICAgZXhjZXB0IFRjbEVycm9yOiAgIyBXaGVuIGNsb3NpbmcgZGVidWdnZXIgd2luZG93IHdpdGggW3hdIGluIDMueAorICAgICAgICAgICAgcGFzcwogCiAgICAgZGVmIHVzZXJfZXhjZXB0aW9uKHNlbGYsIGZyYW1lLCBpbmZvKToKICAgICAgICAgaWYgc2VsZi5pbl9ycGNfY29kZShmcmFtZSk6CkBAIC02MCw4ICs2Miw0MiBAQAogICAgICAgICBzZWxmLmZyYW1lID0gTm9uZQogICAgICAgICBzZWxmLm1ha2VfZ3VpKCkKICAgICAgICAgc2VsZi5pbnRlcmFjdGluZyA9IDAKKyAgICAgICAgc2VsZi5uZXN0aW5nX2xldmVsID0gMAogCiAgICAgZGVmIHJ1bihzZWxmLCAqYXJncyk6CisgICAgICAgICMgRGVhbCB3aXRoIHRoZSBzY2VuYXJpbyB3aGVyZSB3ZSd2ZSBhbHJlYWR5IGdvdCBhIHByb2dyYW0gcnVubmluZworICAgICAgICAjIGluIHRoZSBkZWJ1Z2dlciBhbmQgd2Ugd2FudCB0byBzdGFydCBhbm90aGVyLiBJZiB0aGF0IGlzIHRoZSBjYXNlLAorICAgICAgICAjIG91ciBzZWNvbmQgJ3J1bicgd2FzIGludm9rZWQgZnJvbSBhbiBldmVudCBkaXNwYXRjaGVkIG5vdCBmcm9tCisgICAgICAgICMgdGhlIG1haW4gZXZlbnQgbG9vcCwgYnV0IGZyb20gdGhlIG5lc3RlZCBldmVudCBsb29wIGluICdpbnRlcmFjdGlvbicKKyAgICAgICAgIyBiZWxvdy4gU28gb3VyIHN0YWNrIGxvb2tzIHNvbWV0aGluZyBsaWtlIHRoaXM6CisgICAgICAgICMgICAgICAgb3V0ZXIgbWFpbiBldmVudCBsb29wCisgICAgICAgICMgICAgICAgICBydW4oKQorICAgICAgICAjICAgICAgICAgICA8cnVubmluZyBwcm9ncmFtIHdpdGggdHJhY2VzPgorICAgICAgICAjICAgICAgICAgICAgIGNhbGxiYWNrIHRvIGRlYnVnZ2VyJ3MgaW50ZXJhY3Rpb24oKQorICAgICAgICAjICAgICAgICAgICAgICAgbmVzdGVkIGV2ZW50IGxvb3AKKyAgICAgICAgIyAgICAgICAgICAgICAgICAgcnVuKCkgZm9yIHNlY29uZCBjb21tYW5kCisgICAgICAgICMKKyAgICAgICAgIyBUaGlzIGtpbmQgb2YgbmVzdGluZyBvZiBldmVudCBsb29wcyBjYXVzZXMgYWxsIGtpbmRzIG9mIHByb2JsZW1zCisgICAgICAgICMgKHNlZSBlLmcuIGlzc3VlICMyNDQ1NSkgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBydW5uaW5nIGFzIGEKKyAgICAgICAgIyBzdWJwcm9jZXNzLCB3aGVyZSB0aGVyZSdzIGFsbCBraW5kcyBvZiBleHRyYSBzdHVmZiBoYXBwZW5pbmcgaW4KKyAgICAgICAgIyB0aGVyZSAtIGluc2VydCBhIHRyYWNlYmFjay5wcmludF9zdGFjaygpIHRvIGNoZWNrIGl0IG91dC4KKyAgICAgICAgIworICAgICAgICAjIEJ5IHRoaXMgcG9pbnQsIHdlJ3ZlIGFscmVhZHkgY2FsbGVkIHJlc3RhcnRfc3VicHJvY2VzcygpIGluCisgICAgICAgICMgU2NyaXB0QmluZGluZy4gSG93ZXZlciwgd2UgYWxzbyBuZWVkIHRvIHVud2luZCB0aGUgc3RhY2sgYmFjayB0bworICAgICAgICAjIHRoYXQgb3V0ZXIgZXZlbnQgbG9vcC4gIFRvIGFjY29tcGxpc2ggdGhpcywgd2U6CisgICAgICAgICMgICAtIHJldHVybiBpbW1lZGlhdGVseSBmcm9tIHRoZSBuZXN0ZWQgcnVuKCkKKyAgICAgICAgIyAgIC0gYWJvcnRfbG9vcCBlbnN1cmVzIHRoZSBuZXN0ZWQgZXZlbnQgbG9vcCB3aWxsIHRlcm1pbmF0ZQorICAgICAgICAjICAgLSB0aGUgZGVidWdnZXIncyBpbnRlcmFjdGlvbiByb3V0aW5lIGNvbXBsZXRlcyBub3JtYWxseQorICAgICAgICAjICAgLSB0aGUgcmVzdGFydF9zdWJwcm9jZXNzKCkgd2lsbCBoYXZlIHRha2VuIGNhcmUgb2Ygc3RvcHBpbmcKKyAgICAgICAgIyAgICAgdGhlIHJ1bm5pbmcgcHJvZ3JhbSwgd2hpY2ggd2lsbCBhbHNvIGxldCB0aGUgb3V0ZXIgcnVuIGNvbXBsZXRlCisgICAgICAgICMKKyAgICAgICAgIyBUaGF0IGxlYXZlcyB1cyBiYWNrIGF0IHRoZSBvdXRlciBtYWluIGV2ZW50IGxvb3AsIGF0IHdoaWNoIHBvaW50IG91cgorICAgICAgICAjIGFmdGVyIGV2ZW50IGNhbiBmaXJlLCBhbmQgd2UnbGwgY29tZSBiYWNrIHRvIHRoaXMgcm91dGluZSB3aXRoIGEKKyAgICAgICAgIyBjbGVhbiBzdGFjay4KKyAgICAgICAgaWYgc2VsZi5uZXN0aW5nX2xldmVsID4gMDoKKyAgICAgICAgICAgIHNlbGYuYWJvcnRfbG9vcCgpCisgICAgICAgICAgICBzZWxmLnJvb3QuYWZ0ZXIoMTAwLCBsYW1iZGE6IHNlbGYucnVuKCphcmdzKSkKKyAgICAgICAgICAgIHJldHVybgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLmludGVyYWN0aW5nID0gMQogICAgICAgICAgICAgcmV0dXJuIHNlbGYuaWRiLnJ1bigqYXJncykKQEAgLTY5LDYgKzEwNSwxMCBAQAogICAgICAgICAgICAgc2VsZi5pbnRlcmFjdGluZyA9IDAKIAogICAgIGRlZiBjbG9zZShzZWxmLCBldmVudD1Ob25lKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5xdWl0KCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgIHBhc3MKICAgICAgICAgaWYgc2VsZi5pbnRlcmFjdGluZzoKICAgICAgICAgICAgIHNlbGYudG9wLmJlbGwoKQogICAgICAgICAgICAgcmV0dXJuCkBAIC0xOTIsNyArMjMyLDEyIEBACiAgICAgICAgICAgICBiLmNvbmZpZ3VyZShzdGF0ZT0ibm9ybWFsIikKICAgICAgICAgIwogICAgICAgICBzZWxmLnRvcC53YWtldXAoKQotICAgICAgICBzZWxmLnJvb3QubWFpbmxvb3AoKQorICAgICAgICAjIE5lc3RlZCBtYWluIGxvb3A6IFRraW50ZXIncyBtYWluIGxvb3AgaXMgbm90IHJlZW50cmFudCwgc28gdXNlCisgICAgICAgICMgVGNsJ3MgdndhaXQgZmFjaWxpdHksIHdoaWNoIHJlZW50ZXJzIHRoZSBldmVudCBsb29wIHVudGlsIGFuCisgICAgICAgICMgZXZlbnQgaGFuZGxlciBzZXRzIHRoZSB2YXJpYWJsZSB3ZSdyZSB3YWl0aW5nIG9uCisgICAgICAgIHNlbGYubmVzdGluZ19sZXZlbCArPSAxCisgICAgICAgIHNlbGYucm9vdC50ay5jYWxsKCd2d2FpdCcsICc6OmlkbGVkZWJ1Z3dhaXQnKQorICAgICAgICBzZWxmLm5lc3RpbmdfbGV2ZWwgLT0gMQogICAgICAgICAjCiAgICAgICAgIGZvciBiIGluIHNlbGYuYnV0dG9uczoKICAgICAgICAgICAgIGIuY29uZmlndXJlKHN0YXRlPSJkaXNhYmxlZCIpCkBAIC0yMTYsMjMgKzI2MSwyNiBAQAogCiAgICAgZGVmIGNvbnQoc2VsZik6CiAgICAgICAgIHNlbGYuaWRiLnNldF9jb250aW51ZSgpCi0gICAgICAgIHNlbGYucm9vdC5xdWl0KCkKKyAgICAgICAgc2VsZi5hYm9ydF9sb29wKCkKIAogICAgIGRlZiBzdGVwKHNlbGYpOgogICAgICAgICBzZWxmLmlkYi5zZXRfc3RlcCgpCi0gICAgICAgIHNlbGYucm9vdC5xdWl0KCkKKyAgICAgICAgc2VsZi5hYm9ydF9sb29wKCkKIAogICAgIGRlZiBuZXh0KHNlbGYpOgogICAgICAgICBzZWxmLmlkYi5zZXRfbmV4dChzZWxmLmZyYW1lKQotICAgICAgICBzZWxmLnJvb3QucXVpdCgpCisgICAgICAgIHNlbGYuYWJvcnRfbG9vcCgpCiAKICAgICBkZWYgcmV0KHNlbGYpOgogICAgICAgICBzZWxmLmlkYi5zZXRfcmV0dXJuKHNlbGYuZnJhbWUpCi0gICAgICAgIHNlbGYucm9vdC5xdWl0KCkKKyAgICAgICAgc2VsZi5hYm9ydF9sb29wKCkKIAogICAgIGRlZiBxdWl0KHNlbGYpOgogICAgICAgICBzZWxmLmlkYi5zZXRfcXVpdCgpCi0gICAgICAgIHNlbGYucm9vdC5xdWl0KCkKKyAgICAgICAgc2VsZi5hYm9ydF9sb29wKCkKKworICAgIGRlZiBhYm9ydF9sb29wKHNlbGYpOgorICAgICAgICBzZWxmLnJvb3QudGsuY2FsbCgnc2V0JywgJzo6aWRsZWRlYnVnd2FpdCcsICcxJykKIAogICAgIHN0YWNrdmlld2VyID0gTm9uZQogCkBAIC0zMjIsNyArMzcwLDcgQEAKIGNsYXNzIFN0YWNrVmlld2VyKFNjcm9sbGVkTGlzdCk6CiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgbWFzdGVyLCBmbGlzdCwgZ3VpKToKLSAgICAgICAgaWYgbWFjb3N4U3VwcG9ydC5ydW5uaW5nQXNPU1hBcHAoKToKKyAgICAgICAgaWYgbWFjb3N4U3VwcG9ydC5pc0FxdWFUaygpOgogICAgICAgICAgICAgIyBBdCBsZWFzdCBvbiB3aXRoIHRoZSBzdG9jayBBcXVhVGsgdmVyc2lvbiBvbiBPU1ggMTAuNCB5b3UnbGwKICAgICAgICAgICAgICMgZ2V0IGFuIHNoYWtpbmcgR1VJIHRoYXQgZXZlbnR1YWxseSBraWxscyBJRExFIGlmIHRoZSB3aWR0aAogICAgICAgICAgICAgIyBhcmd1bWVudCBpcyBzcGVjaWZpZWQuCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9FZGl0b3JXaW5kb3cucHkgYi9MaWIvaWRsZWxpYi9FZGl0b3JXaW5kb3cucHkKaW5kZXggNGJmMTExMS4uYjU4NjhiZSAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvRWRpdG9yV2luZG93LnB5CisrKyBiL0xpYi9pZGxlbGliL0VkaXRvcldpbmRvdy5weQpAQCAtMSw3ICsxLDggQEAKIGltcG9ydCBpbXBvcnRsaWIKIGltcG9ydCBpbXBvcnRsaWIuYWJjCitpbXBvcnQgaW1wb3J0bGliLnV0aWwKIGltcG9ydCBvcwotZnJvbSBwbGF0Zm9ybSBpbXBvcnQgcHl0aG9uX3ZlcnNpb24KK2ltcG9ydCBwbGF0Zm9ybQogaW1wb3J0IHJlCiBpbXBvcnQgc3RyaW5nCiBpbXBvcnQgc3lzCkBAIC0xMiw3ICsxMyw2IEBACiBpbXBvcnQgd2ViYnJvd3NlcgogCiBmcm9tIGlkbGVsaWIuTXVsdGlDYWxsIGltcG9ydCBNdWx0aUNhbGxDcmVhdG9yCi1mcm9tIGlkbGVsaWIgaW1wb3J0IGlkbGV2ZXIKIGZyb20gaWRsZWxpYiBpbXBvcnQgV2luZG93TGlzdAogZnJvbSBpZGxlbGliIGltcG9ydCBTZWFyY2hEaWFsb2cKIGZyb20gaWRsZWxpYiBpbXBvcnQgR3JlcERpYWxvZwpAQCAtMjEsMTAgKzIxLDEzIEBACiBmcm9tIGlkbGVsaWIuY29uZmlnSGFuZGxlciBpbXBvcnQgaWRsZUNvbmYKIGZyb20gaWRsZWxpYiBpbXBvcnQgYWJvdXREaWFsb2csIHRleHRWaWV3LCBjb25maWdEaWFsb2cKIGZyb20gaWRsZWxpYiBpbXBvcnQgbWFjb3N4U3VwcG9ydAorZnJvbSBpZGxlbGliIGltcG9ydCBoZWxwCiAKICMgVGhlIGRlZmF1bHQgdGFiIHNldHRpbmcgZm9yIGEgVGV4dCB3aWRnZXQsIGluIGF2ZXJhZ2Utd2lkdGggY2hhcmFjdGVycy4KIFRLX1RBQldJRFRIX0RFRkFVTFQgPSA4CiAKK19weV92ZXJzaW9uID0gJyAoJXMpJyAlIHBsYXRmb3JtLnB5dGhvbl92ZXJzaW9uKCkKKwogZGVmIF9zcGhpbnhfdmVyc2lvbigpOgogICAgICJGb3JtYXQgc3lzLnZlcnNpb25faW5mbyB0byBwcm9kdWNlIHRoZSBTcGhpbnggdmVyc2lvbiBzdHJpbmcgdXNlZCB0byBpbnN0YWxsIHRoZSBjaG0gZG9jcyIKICAgICBtYWpvciwgbWlub3IsIG1pY3JvLCBsZXZlbCwgc2VyaWFsID0gc3lzLnZlcnNpb25faW5mbwpAQCAtNTEsNiArNTQsMTEgQEAKICAgICAgICAgICAgIG5lYXIgLSBhIFRvcGxldmVsIHdpZGdldCAoZS5nLiBFZGl0b3JXaW5kb3cgb3IgUHlTaGVsbCkKICAgICAgICAgICAgICAgICAgICB0byB1c2UgYXMgYSByZWZlcmVuY2UgZm9yIHBsYWNpbmcgdGhlIGhlbHAgd2luZG93CiAgICAgICAgICIiIgorICAgICAgICBpbXBvcnQgd2FybmluZ3MgYXMgdworICAgICAgICB3Lndhcm4oIkVkaXRvcldpbmRvdy5IZWxwRGlhbG9nIGlzIG5vIGxvbmdlciB1c2VkIGJ5IElkbGUuXG4iCisgICAgICAgICAgICAgICAiSXQgd2lsbCBiZSByZW1vdmVkIGluIDMuNiBvciBsYXRlci5cbiIKKyAgICAgICAgICAgICAgICJJdCBoYXMgYmVlbiByZXBsYWNlZCBieSBwcml2YXRlIGhlbHAuSGVscFdpbmRvd1xuIiwKKyAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgc3RhY2tsZXZlbD0yKQogICAgICAgICBpZiBzZWxmLmRsZyBpcyBOb25lOgogICAgICAgICAgICAgc2VsZi5zaG93X2RpYWxvZyhwYXJlbnQpCiAgICAgICAgIGlmIG5lYXI6CkBAIC03Nyw3ICs4NSw3IEBACiAgICAgICAgIHNlbGYuZGxnID0gTm9uZQogICAgICAgICBzZWxmLnBhcmVudCA9IE5vbmUKIAotaGVscERpYWxvZyA9IEhlbHBEaWFsb2coKSAgIyBzaW5nbGV0b24gaW5zdGFuY2UKK2hlbHBEaWFsb2cgPSBIZWxwRGlhbG9nKCkgICMgc2luZ2xldG9uIGluc3RhbmNlLCBubyBsb25nZXIgdXNlZAogCiAKIGNsYXNzIEVkaXRvcldpbmRvdyhvYmplY3QpOgpAQCAtMTA4LDggKzExNiw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUHl0aG9uJXMuY2htJyAlIF9zcGhpbnhfdmVyc2lvbigpKQogICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGNobWZpbGUpOgogICAgICAgICAgICAgICAgICAgICBkb2Nob21lID0gY2htZmlsZQotICAgICAgICAgICAgZWxpZiBtYWNvc3hTdXBwb3J0LnJ1bm5pbmdBc09TWEFwcCgpOgotICAgICAgICAgICAgICAgICMgZG9jdW1lbnRhdGlvbiBpcyBzdG9yZWQgaW5zaWRlIHRoZSBweXRob24gZnJhbWV3b3JrCisgICAgICAgICAgICBlbGlmIHN5cy5wbGF0Zm9ybSA9PSAnZGFyd2luJzoKKyAgICAgICAgICAgICAgICAjIGRvY3VtZW50YXRpb24gbWF5IGJlIHN0b3JlZCBpbnNpZGUgYSBweXRob24gZnJhbWV3b3JrCiAgICAgICAgICAgICAgICAgZG9jaG9tZSA9IG9zLnBhdGguam9pbihzeXMuYmFzZV9wcmVmaXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAnUmVzb3VyY2VzL0VuZ2xpc2gubHByb2ovRG9jdW1lbnRhdGlvbi9pbmRleC5odG1sJykKICAgICAgICAgICAgIGRvY2hvbWUgPSBvcy5wYXRoLm5vcm1wYXRoKGRvY2hvbWUpCkBAIC0xMTksOCArMTI3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgIyBTYWZhcmkgcmVxdWlyZXMgcmVhbCBmaWxlOi1VUkxzCiAgICAgICAgICAgICAgICAgICAgIEVkaXRvcldpbmRvdy5oZWxwX3VybCA9ICdmaWxlOi8vJyArIEVkaXRvcldpbmRvdy5oZWxwX3VybAogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBFZGl0b3JXaW5kb3cuaGVscF91cmwgPSAiaHR0cDovL2RvY3MucHl0aG9uLm9yZy8lZC4lZCIgJSBzeXMudmVyc2lvbl9pbmZvWzoyXQotICAgICAgICBjdXJyZW50VGhlbWU9aWRsZUNvbmYuQ3VycmVudFRoZW1lKCkKKyAgICAgICAgICAgICAgICBFZGl0b3JXaW5kb3cuaGVscF91cmwgPSAiaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvJWQuJWQvIiAlIHN5cy52ZXJzaW9uX2luZm9bOjJdCiAgICAgICAgIHNlbGYuZmxpc3QgPSBmbGlzdAogICAgICAgICByb290ID0gcm9vdCBvciBmbGlzdC5yb290CiAgICAgICAgIHNlbGYucm9vdCA9IHJvb3QKQEAgLTE0OSw2ICsxNTYsNyBAQAogICAgICAgICAgICAgICAgICduYW1lJzogJ3RleHQnLAogICAgICAgICAgICAgICAgICdwYWR4JzogNSwKICAgICAgICAgICAgICAgICAnd3JhcCc6ICdub25lJywKKyAgICAgICAgICAgICAgICAnaGlnaGxpZ2h0dGhpY2tuZXNzJzogMCwKICAgICAgICAgICAgICAgICAnd2lkdGgnOiBzZWxmLndpZHRoLAogICAgICAgICAgICAgICAgICdoZWlnaHQnOiBpZGxlQ29uZi5HZXRPcHRpb24oJ21haW4nLCAnRWRpdG9yV2luZG93JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdoZWlnaHQnLCB0eXBlPSdpbnQnKX0KQEAgLTE2NSwxNiArMTczLDE2IEBACiAKICAgICAgICAgc2VsZi50b3AucHJvdG9jb2woIldNX0RFTEVURV9XSU5ET1ciLCBzZWxmLmNsb3NlKQogICAgICAgICBzZWxmLnRvcC5iaW5kKCI8PGNsb3NlLXdpbmRvdz4+Iiwgc2VsZi5jbG9zZV9ldmVudCkKLSAgICAgICAgaWYgbWFjb3N4U3VwcG9ydC5ydW5uaW5nQXNPU1hBcHAoKToKKyAgICAgICAgaWYgbWFjb3N4U3VwcG9ydC5pc0FxdWFUaygpOgogICAgICAgICAgICAgIyBDb21tYW5kLVcgb24gZWRpdG9yd2luZG93cyBkb2Vzbid0IHdvcmsgd2l0aG91dCB0aGlzLgogICAgICAgICAgICAgdGV4dC5iaW5kKCc8PGNsb3NlLXdpbmRvdz4+Jywgc2VsZi5jbG9zZV9ldmVudCkKLSAgICAgICAgICAgICMgU29tZSBPUyBYIHN5c3RlbXMgaGF2ZSBvbmx5IG9uZSBtb3VzZSBidXR0b24sCi0gICAgICAgICAgICAjIHNvIHVzZSBjb250cm9sLWNsaWNrIGZvciBwdWxsZG93biBtZW51cyB0aGVyZS4KLSAgICAgICAgICAgICMgIChOb3RlLCBBcXVhVGsgZGVmaW5lcyA8Mj4gYXMgdGhlIHJpZ2h0IGJ1dHRvbiBpZgotICAgICAgICAgICAgIyAgIHByZXNlbnQgYW5kIHRoZSBUayBUZXh0IHdpZGdldCBhbHJlYWR5IGJpbmRzIDwyPi4pCisgICAgICAgICAgICAjIFNvbWUgT1MgWCBzeXN0ZW1zIGhhdmUgb25seSBvbmUgbW91c2UgYnV0dG9uLCBzbyB1c2UKKyAgICAgICAgICAgICMgY29udHJvbC1jbGljayBmb3IgcG9wdXAgY29udGV4dCBtZW51cyB0aGVyZS4gRm9yIHR3bworICAgICAgICAgICAgIyBidXR0b25zLCBBcXVhVGsgZGVmaW5lcyA8Mj4gYXMgdGhlIHJpZ2h0IGJ1dHRvbiwgbm90IDwzPi4KICAgICAgICAgICAgIHRleHQuYmluZCgiPENvbnRyb2wtQnV0dG9uLTE+IixzZWxmLnJpZ2h0X21lbnVfZXZlbnQpCisgICAgICAgICAgICB0ZXh0LmJpbmQoIjwyPiIsIHNlbGYucmlnaHRfbWVudV9ldmVudCkKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICMgRWxzZXdoZXJlLCB1c2UgcmlnaHQtY2xpY2sgZm9yIHB1bGxkb3duIG1lbnVzLgorICAgICAgICAgICAgIyBFbHNld2hlcmUsIHVzZSByaWdodC1jbGljayBmb3IgcG9wdXAgbWVudXMuCiAgICAgICAgICAgICB0ZXh0LmJpbmQoIjwzPiIsc2VsZi5yaWdodF9tZW51X2V2ZW50KQogICAgICAgICB0ZXh0LmJpbmQoIjw8Y3V0Pj4iLCBzZWxmLmN1dCkKICAgICAgICAgdGV4dC5iaW5kKCI8PGNvcHk+PiIsIHNlbGYuY29weSkKQEAgLTIxOSwxOCArMjI3LDEzIEBACiAgICAgICAgICAgICB0ZXh0LmJpbmQoIjw8Y2xvc2UtYWxsLXdpbmRvd3M+PiIsIHNlbGYuZmxpc3QuY2xvc2VfYWxsX2NhbGxiYWNrKQogICAgICAgICAgICAgdGV4dC5iaW5kKCI8PG9wZW4tY2xhc3MtYnJvd3Nlcj4+Iiwgc2VsZi5vcGVuX2NsYXNzX2Jyb3dzZXIpCiAgICAgICAgICAgICB0ZXh0LmJpbmQoIjw8b3Blbi1wYXRoLWJyb3dzZXI+PiIsIHNlbGYub3Blbl9wYXRoX2Jyb3dzZXIpCisgICAgICAgICAgICB0ZXh0LmJpbmQoIjw8b3Blbi10dXJ0bGUtZGVtbz4+Iiwgc2VsZi5vcGVuX3R1cnRsZV9kZW1vKQogCiAgICAgICAgIHNlbGYuc2V0X3N0YXR1c19iYXIoKQogICAgICAgICB2YmFyWydjb21tYW5kJ10gPSB0ZXh0Lnl2aWV3CiAgICAgICAgIHZiYXIucGFjayhzaWRlPVJJR0hULCBmaWxsPVkpCiAgICAgICAgIHRleHRbJ3lzY3JvbGxjb21tYW5kJ10gPSB2YmFyLnNldAotICAgICAgICBmb250V2VpZ2h0ID0gJ25vcm1hbCcKLSAgICAgICAgaWYgaWRsZUNvbmYuR2V0T3B0aW9uKCdtYWluJywgJ0VkaXRvcldpbmRvdycsICdmb250LWJvbGQnLCB0eXBlPSdib29sJyk6Ci0gICAgICAgICAgICBmb250V2VpZ2h0PSdib2xkJwotICAgICAgICB0ZXh0LmNvbmZpZyhmb250PShpZGxlQ29uZi5HZXRPcHRpb24oJ21haW4nLCAnRWRpdG9yV2luZG93JywgJ2ZvbnQnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaWRsZUNvbmYuR2V0T3B0aW9uKCdtYWluJywgJ0VkaXRvcldpbmRvdycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZm9udC1zaXplJywgdHlwZT0naW50JyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRXZWlnaHQpKQorICAgICAgICB0ZXh0Wydmb250J10gPSBpZGxlQ29uZi5HZXRGb250KHNlbGYucm9vdCwgJ21haW4nLCAnRWRpdG9yV2luZG93JykKICAgICAgICAgdGV4dF9mcmFtZS5wYWNrKHNpZGU9TEVGVCwgZmlsbD1CT1RILCBleHBhbmQ9MSkKICAgICAgICAgdGV4dC5wYWNrKHNpZGU9VE9QLCBmaWxsPUJPVEgsIGV4cGFuZD0xKQogICAgICAgICB0ZXh0LmZvY3VzX3NldCgpCkBAIC0zMTMsNTAgKzMxNiwyMCBAQAogICAgICAgICBzZWxmLmFza2ludGVnZXIgPSB0a1NpbXBsZURpYWxvZy5hc2tpbnRlZ2VyCiAgICAgICAgIHNlbGYuc2hvd2Vycm9yID0gdGtNZXNzYWdlQm94LnNob3dlcnJvcgogCi0gICAgICAgIHNlbGYuX2hpZ2hsaWdodF93b3JrYXJvdW5kKCkgICMgRml4IHNlbGVjdGlvbiB0YWdzIG9uIFdpbmRvd3MKLQotICAgIGRlZiBfaGlnaGxpZ2h0X3dvcmthcm91bmQoc2VsZik6Ci0gICAgICAgICMgT24gV2luZG93cywgVGsgcmVtb3ZlcyBwYWludGluZyBvZiB0aGUgc2VsZWN0aW9uCi0gICAgICAgICMgdGFncyB3aGljaCBpcyBkaWZmZXJlbnQgYmVoYXZpb3IgdGhhbiBvbiBMaW51eCBhbmQgTWFjLgotICAgICAgICAjIFNlZSBpc3N1ZTE0MTQ2IGZvciBtb3JlIGluZm9ybWF0aW9uLgotICAgICAgICBpZiBub3Qgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ3dpbicpOgotICAgICAgICAgICAgcmV0dXJuCi0KLSAgICAgICAgdGV4dCA9IHNlbGYudGV4dAotICAgICAgICB0ZXh0LmV2ZW50X2FkZCgiPDxIaWdobGlnaHQtRm9jdXNPdXQ+PiIsICI8Rm9jdXNPdXQ+IikKLSAgICAgICAgdGV4dC5ldmVudF9hZGQoIjw8SGlnaGxpZ2h0LUZvY3VzSW4+PiIsICI8Rm9jdXNJbj4iKQotICAgICAgICBkZWYgaGlnaGxpZ2h0X2ZpeChmb2N1cyk6Ci0gICAgICAgICAgICBzZWxfcmFuZ2UgPSB0ZXh0LnRhZ19yYW5nZXMoInNlbCIpCi0gICAgICAgICAgICBpZiBzZWxfcmFuZ2U6Ci0gICAgICAgICAgICAgICAgaWYgZm9jdXMgPT0gJ291dCc6Ci0gICAgICAgICAgICAgICAgICAgIEhJTElURV9DT05GSUcgPSBpZGxlQ29uZi5HZXRIaWdobGlnaHQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRsZUNvbmYuQ3VycmVudFRoZW1lKCksICdoaWxpdGUnKQotICAgICAgICAgICAgICAgICAgICB0ZXh0LnRhZ19jb25maWcoInNlbF9maXgiLCBISUxJVEVfQ09ORklHKQotICAgICAgICAgICAgICAgICAgICB0ZXh0LnRhZ19yYWlzZSgic2VsX2ZpeCIpCi0gICAgICAgICAgICAgICAgICAgIHRleHQudGFnX2FkZCgic2VsX2ZpeCIsICpzZWxfcmFuZ2UpCi0gICAgICAgICAgICAgICAgZWxpZiBmb2N1cyA9PSAnaW4nOgotICAgICAgICAgICAgICAgICAgICB0ZXh0LnRhZ19yZW1vdmUoInNlbF9maXgiLCAiMS4wIiwgImVuZCIpCi0KLSAgICAgICAgdGV4dC5iaW5kKCI8PEhpZ2hsaWdodC1Gb2N1c091dD4+IiwKLSAgICAgICAgICAgICAgICBsYW1iZGEgZXY6IGhpZ2hsaWdodF9maXgoIm91dCIpKQotICAgICAgICB0ZXh0LmJpbmQoIjw8SGlnaGxpZ2h0LUZvY3VzSW4+PiIsCi0gICAgICAgICAgICAgICAgbGFtYmRhIGV2OiBoaWdobGlnaHRfZml4KCJpbiIpKQotCi0KICAgICBkZWYgX2ZpbGVuYW1lX3RvX3VuaWNvZGUoc2VsZiwgZmlsZW5hbWUpOgotICAgICAgICAiIiJjb252ZXJ0IGZpbGVuYW1lIHRvIHVuaWNvZGUgaW4gb3JkZXIgdG8gZGlzcGxheSBpdCBpbiBUayIiIgotICAgICAgICBpZiBpc2luc3RhbmNlKGZpbGVuYW1lLCBzdHIpIG9yIG5vdCBmaWxlbmFtZToKLSAgICAgICAgICAgIHJldHVybiBmaWxlbmFtZQotICAgICAgICBlbHNlOgorICAgICAgICAiIiJSZXR1cm4gZmlsZW5hbWUgYXMgQk1QIHVuaWNvZGUgc28gZGlwbGF5YWJsZSBpbiBUay4iIiIKKyAgICAgICAgIyBEZWNvZGUgYnl0ZXMgdG8gdW5pY29kZS4KKyAgICAgICAgaWYgaXNpbnN0YW5jZShmaWxlbmFtZSwgYnl0ZXMpOgogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHJldHVybiBmaWxlbmFtZS5kZWNvZGUoc2VsZi5maWxlc3lzdGVtZW5jb2RpbmcpCisgICAgICAgICAgICAgICAgZmlsZW5hbWUgPSBmaWxlbmFtZS5kZWNvZGUoc2VsZi5maWxlc3lzdGVtZW5jb2RpbmcpCiAgICAgICAgICAgICBleGNlcHQgVW5pY29kZURlY29kZUVycm9yOgotICAgICAgICAgICAgICAgICMgWFhYCiAgICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmlsZW5hbWUuZGVjb2RlKHNlbGYuZW5jb2RpbmcpCisgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lID0gZmlsZW5hbWUuZGVjb2RlKHNlbGYuZW5jb2RpbmcpCiAgICAgICAgICAgICAgICAgZXhjZXB0IFVuaWNvZGVEZWNvZGVFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgIyBieXRlLXRvLWJ5dGUgY29udmVyc2lvbgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmlsZW5hbWUuZGVjb2RlKCdpc284ODU5LTEnKQorICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSA9IGZpbGVuYW1lLmRlY29kZSgnaXNvODg1OS0xJykKKyAgICAgICAgIyBSZXBsYWNlIG5vbi1CTVAgY2hhciB3aXRoIGRpYW1vbmQgcXVlc3Rpb25tYXJrLgorICAgICAgICByZXR1cm4gcmUuc3ViKCdbXFUwMDAxMDAwMC1cVTAwMTBGRkZGXScsICdcdWZmZmQnLCBmaWxlbmFtZSkKIAogICAgIGRlZiBuZXdfY2FsbGJhY2soc2VsZiwgZXZlbnQpOgogICAgICAgICBkaXJuYW1lLCBiYXNlbmFtZSA9IHNlbGYuaW8uZGVmYXVsdGZpbGVuYW1lKCkKQEAgLTQwOCwxMyArMzgxLDE1IEBACiAKICAgICBkZWYgc2V0X3N0YXR1c19iYXIoc2VsZik6CiAgICAgICAgIHNlbGYuc3RhdHVzX2JhciA9IHNlbGYuTXVsdGlTdGF0dXNCYXIoc2VsZi50b3ApCi0gICAgICAgIGlmIG1hY29zeFN1cHBvcnQucnVubmluZ0FzT1NYQXBwKCk6CisgICAgICAgIHNlcCA9IEZyYW1lKHNlbGYudG9wLCBoZWlnaHQ9MSwgYm9yZGVyd2lkdGg9MSwgYmFja2dyb3VuZD0nZ3JleTc1JykKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICJkYXJ3aW4iOgogICAgICAgICAgICAgIyBJbnNlcnQgc29tZSBwYWRkaW5nIHRvIGF2b2lkIG9ic2N1cmluZyBzb21lIG9mIHRoZSBzdGF0dXNiYXIKICAgICAgICAgICAgICMgYnkgdGhlIHJlc2l6ZSB3aWRnZXQuCiAgICAgICAgICAgICBzZWxmLnN0YXR1c19iYXIuc2V0X2xhYmVsKCdfcGFkZGluZzEnLCAnICAgICcsIHNpZGU9UklHSFQpCiAgICAgICAgIHNlbGYuc3RhdHVzX2Jhci5zZXRfbGFiZWwoJ2NvbHVtbicsICdDb2w6ID8nLCBzaWRlPVJJR0hUKQogICAgICAgICBzZWxmLnN0YXR1c19iYXIuc2V0X2xhYmVsKCdsaW5lJywgJ0xuOiA/Jywgc2lkZT1SSUdIVCkKICAgICAgICAgc2VsZi5zdGF0dXNfYmFyLnBhY2soc2lkZT1CT1RUT00sIGZpbGw9WCkKKyAgICAgICAgc2VwLnBhY2soc2lkZT1CT1RUT00sIGZpbGw9WCkKICAgICAgICAgc2VsZi50ZXh0LmJpbmQoIjw8c2V0LWxpbmUtYW5kLWNvbHVtbj4+Iiwgc2VsZi5zZXRfbGluZV9hbmRfY29sdW1uKQogICAgICAgICBzZWxmLnRleHQuZXZlbnRfYWRkKCI8PHNldC1saW5lLWFuZC1jb2x1bW4+PiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxLZXlSZWxlYXNlPiIsICI8QnV0dG9uUmVsZWFzZT4iKQpAQCAtNDMxLDI3ICs0MDYsMjUgQEAKICAgICAgICAgKCJmb3JtYXQiLCAiRl9vcm1hdCIpLAogICAgICAgICAoInJ1biIsICJfUnVuIiksCiAgICAgICAgICgib3B0aW9ucyIsICJfT3B0aW9ucyIpLAotICAgICAgICAoIndpbmRvd3MiLCAiX1dpbmRvd3MiKSwKKyAgICAgICAgKCJ3aW5kb3dzIiwgIl9XaW5kb3ciKSwKICAgICAgICAgKCJoZWxwIiwgIl9IZWxwIiksCiAgICAgXQogCi0gICAgaWYgbWFjb3N4U3VwcG9ydC5ydW5uaW5nQXNPU1hBcHAoKToKLSAgICAgICAgbWVudV9zcGVjc1stMl0gPSAoIndpbmRvd3MiLCAiX1dpbmRvdyIpCi0KIAogICAgIGRlZiBjcmVhdGVtZW51YmFyKHNlbGYpOgogICAgICAgICBtYmFyID0gc2VsZi5tZW51YmFyCiAgICAgICAgIHNlbGYubWVudWRpY3QgPSBtZW51ZGljdCA9IHt9CiAgICAgICAgIGZvciBuYW1lLCBsYWJlbCBpbiBzZWxmLm1lbnVfc3BlY3M6CiAgICAgICAgICAgICB1bmRlcmxpbmUsIGxhYmVsID0gcHJlcHN0cihsYWJlbCkKLSAgICAgICAgICAgIG1lbnVkaWN0W25hbWVdID0gbWVudSA9IE1lbnUobWJhciwgbmFtZT1uYW1lKQorICAgICAgICAgICAgbWVudWRpY3RbbmFtZV0gPSBtZW51ID0gTWVudShtYmFyLCBuYW1lPW5hbWUsIHRlYXJvZmY9MCkKICAgICAgICAgICAgIG1iYXIuYWRkX2Nhc2NhZGUobGFiZWw9bGFiZWwsIG1lbnU9bWVudSwgdW5kZXJsaW5lPXVuZGVybGluZSkKLSAgICAgICAgaWYgbWFjb3N4U3VwcG9ydC5pc0NhcmJvbkFxdWFUayhzZWxmLnJvb3QpOgorICAgICAgICBpZiBtYWNvc3hTdXBwb3J0LmlzQ2FyYm9uVGsoKToKICAgICAgICAgICAgICMgSW5zZXJ0IHRoZSBhcHBsaWNhdGlvbiBtZW51Ci0gICAgICAgICAgICBtZW51ZGljdFsnYXBwbGljYXRpb24nXSA9IG1lbnUgPSBNZW51KG1iYXIsIG5hbWU9J2FwcGxlJykKKyAgICAgICAgICAgIG1lbnVkaWN0WydhcHBsaWNhdGlvbiddID0gbWVudSA9IE1lbnUobWJhciwgbmFtZT0nYXBwbGUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZWFyb2ZmPTApCiAgICAgICAgICAgICBtYmFyLmFkZF9jYXNjYWRlKGxhYmVsPSdJRExFJywgbWVudT1tZW51KQogICAgICAgICBzZWxmLmZpbGxfbWVudXMoKQotICAgICAgICBzZWxmLnJlY2VudF9maWxlc19tZW51ID0gTWVudShzZWxmLm1lbnViYXIpCisgICAgICAgIHNlbGYucmVjZW50X2ZpbGVzX21lbnUgPSBNZW51KHNlbGYubWVudWJhciwgdGVhcm9mZj0wKQogICAgICAgICBzZWxmLm1lbnVkaWN0WydmaWxlJ10uaW5zZXJ0X2Nhc2NhZGUoMywgbGFiZWw9J1JlY2VudCBGaWxlcycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlcmxpbmU9MCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbnU9c2VsZi5yZWNlbnRfZmlsZXNfbWVudSkKQEAgLTUzMywyMyArNTA2LDI5IEBACiAgICAgICAgICAgICByZXR1cm4gJ25vcm1hbCcKIAogICAgIGRlZiBhYm91dF9kaWFsb2coc2VsZiwgZXZlbnQ9Tm9uZSk6CisgICAgICAgICJIYW5kbGUgSGVscCAnQWJvdXQgSURMRScgZXZlbnQuIgorICAgICAgICAjIFN5bmNocm9uaXplIHdpdGggbWFjb3N4U3VwcG9ydC5vdmVycmlkZVJvb3RNZW51LmFib3V0X2RpYWxvZy4KICAgICAgICAgYWJvdXREaWFsb2cuQWJvdXREaWFsb2coc2VsZi50b3AsJ0Fib3V0IElETEUnKQogCiAgICAgZGVmIGNvbmZpZ19kaWFsb2coc2VsZiwgZXZlbnQ9Tm9uZSk6CisgICAgICAgICJIYW5kbGUgT3B0aW9ucyAnQ29uZmlndXJlIElETEUnIGV2ZW50LiIKKyAgICAgICAgIyBTeW5jaHJvbml6ZSB3aXRoIG1hY29zeFN1cHBvcnQub3ZlcnJpZGVSb290TWVudS5jb25maWdfZGlhbG9nLgogICAgICAgICBjb25maWdEaWFsb2cuQ29uZmlnRGlhbG9nKHNlbGYudG9wLCdTZXR0aW5ncycpCiAKICAgICBkZWYgaGVscF9kaWFsb2coc2VsZiwgZXZlbnQ9Tm9uZSk6CisgICAgICAgICJIYW5kbGUgSGVscCAnSURMRSBIZWxwJyBldmVudC4iCisgICAgICAgICMgU3luY2hyb25pemUgd2l0aCBtYWNvc3hTdXBwb3J0Lm92ZXJyaWRlUm9vdE1lbnUuaGVscF9kaWFsb2cuCiAgICAgICAgIGlmIHNlbGYucm9vdDoKICAgICAgICAgICAgIHBhcmVudCA9IHNlbGYucm9vdAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcGFyZW50ID0gc2VsZi50b3AKLSAgICAgICAgaGVscERpYWxvZy5kaXNwbGF5KHBhcmVudCwgbmVhcj1zZWxmLnRvcCkKKyAgICAgICAgaGVscC5zaG93X2lkbGVoZWxwKHBhcmVudCkKIAogICAgIGRlZiBweXRob25fZG9jcyhzZWxmLCBldmVudD1Ob25lKToKICAgICAgICAgaWYgc3lzLnBsYXRmb3JtWzozXSA9PSAnd2luJzoKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBvcy5zdGFydGZpbGUoc2VsZi5oZWxwX3VybCkKLSAgICAgICAgICAgIGV4Y2VwdCBXaW5kb3dzRXJyb3IgYXMgd2h5OgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgd2h5OgogICAgICAgICAgICAgICAgIHRrTWVzc2FnZUJveC5zaG93ZXJyb3IodGl0bGU9J0RvY3VtZW50IFN0YXJ0IEZhaWx1cmUnLAogICAgICAgICAgICAgICAgICAgICBtZXNzYWdlPXN0cih3aHkpLCBwYXJlbnQ9c2VsZi50ZXh0KQogICAgICAgICBlbHNlOgpAQCAtNjYwLDIwICs2MzksMjAgQEAKICAgICAgICAgICAgIHJldHVybgogICAgICAgICAjIFhYWCBPdWdodCB0byBpbnNlcnQgY3VycmVudCBmaWxlJ3MgZGlyZWN0b3J5IGluIGZyb250IG9mIHBhdGgKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgbG9hZGVyID0gaW1wb3J0bGliLmZpbmRfbG9hZGVyKG5hbWUpCisgICAgICAgICAgICBzcGVjID0gaW1wb3J0bGliLnV0aWwuZmluZF9zcGVjKG5hbWUpCiAgICAgICAgIGV4Y2VwdCAoVmFsdWVFcnJvciwgSW1wb3J0RXJyb3IpIGFzIG1zZzoKICAgICAgICAgICAgIHRrTWVzc2FnZUJveC5zaG93ZXJyb3IoIkltcG9ydCBlcnJvciIsIHN0cihtc2cpLCBwYXJlbnQ9c2VsZi50ZXh0KQogICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGlmIGxvYWRlciBpcyBOb25lOgorICAgICAgICBpZiBzcGVjIGlzIE5vbmU6CiAgICAgICAgICAgICB0a01lc3NhZ2VCb3guc2hvd2Vycm9yKCJJbXBvcnQgZXJyb3IiLCAibW9kdWxlIG5vdCBmb3VuZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudD1zZWxmLnRleHQpCiAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UobG9hZGVyLCBpbXBvcnRsaWIuYWJjLlNvdXJjZUxvYWRlcik6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHNwZWMubG9hZGVyLCBpbXBvcnRsaWIuYWJjLlNvdXJjZUxvYWRlcik6CiAgICAgICAgICAgICB0a01lc3NhZ2VCb3guc2hvd2Vycm9yKCJJbXBvcnQgZXJyb3IiLCAibm90IGEgc291cmNlLWJhc2VkIG1vZHVsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudD1zZWxmLnRleHQpCiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgdHJ5OgotICAgICAgICAgICAgZmlsZV9wYXRoID0gbG9hZGVyLmdldF9maWxlbmFtZShuYW1lKQorICAgICAgICAgICAgZmlsZV9wYXRoID0gc3BlYy5sb2FkZXIuZ2V0X2ZpbGVuYW1lKG5hbWUpCiAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKICAgICAgICAgICAgIHRrTWVzc2FnZUJveC5zaG93ZXJyb3IoIkltcG9ydCBlcnJvciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsb2FkZXIgZG9lcyBub3Qgc3VwcG9ydCBnZXRfZmlsZW5hbWUiLApAQCAtNjgzLDE2ICs2NjIsMTUgQEAKICAgICAgICAgICAgIHNlbGYuZmxpc3Qub3BlbihmaWxlX3BhdGgpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLmlvLmxvYWRmaWxlKGZpbGVfcGF0aCkKKyAgICAgICAgcmV0dXJuIGZpbGVfcGF0aAogCiAgICAgZGVmIG9wZW5fY2xhc3NfYnJvd3NlcihzZWxmLCBldmVudD1Ob25lKToKICAgICAgICAgZmlsZW5hbWUgPSBzZWxmLmlvLmZpbGVuYW1lCi0gICAgICAgIGlmIG5vdCBmaWxlbmFtZToKLSAgICAgICAgICAgIHRrTWVzc2FnZUJveC5zaG93ZXJyb3IoCi0gICAgICAgICAgICAgICAgIk5vIGZpbGVuYW1lIiwKLSAgICAgICAgICAgICAgICAiVGhpcyBidWZmZXIgaGFzIG5vIGFzc29jaWF0ZWQgZmlsZW5hbWUiLAotICAgICAgICAgICAgICAgIG1hc3Rlcj1zZWxmLnRleHQpCi0gICAgICAgICAgICBzZWxmLnRleHQuZm9jdXNfc2V0KCkKLSAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIGlmIG5vdCAoc2VsZi5fX2NsYXNzX18uX19uYW1lX18gPT0gJ1B5U2hlbGxFZGl0b3JXaW5kb3cnCisgICAgICAgICAgICAgICAgYW5kIGZpbGVuYW1lKToKKyAgICAgICAgICAgIGZpbGVuYW1lID0gc2VsZi5vcGVuX21vZHVsZSgpCisgICAgICAgICAgICBpZiBmaWxlbmFtZSBpcyBOb25lOgorICAgICAgICAgICAgICAgIHJldHVybgogICAgICAgICBoZWFkLCB0YWlsID0gb3MucGF0aC5zcGxpdChmaWxlbmFtZSkKICAgICAgICAgYmFzZSwgZXh0ID0gb3MucGF0aC5zcGxpdGV4dCh0YWlsKQogICAgICAgICBmcm9tIGlkbGVsaWIgaW1wb3J0IENsYXNzQnJvd3NlcgpAQCAtNzAyLDYgKzY4MCwxNCBAQAogICAgICAgICBmcm9tIGlkbGVsaWIgaW1wb3J0IFBhdGhCcm93c2VyCiAgICAgICAgIFBhdGhCcm93c2VyLlBhdGhCcm93c2VyKHNlbGYuZmxpc3QpCiAKKyAgICBkZWYgb3Blbl90dXJ0bGVfZGVtbyhzZWxmLCBldmVudCA9IE5vbmUpOgorICAgICAgICBpbXBvcnQgc3VicHJvY2VzcworCisgICAgICAgIGNtZCA9IFtzeXMuZXhlY3V0YWJsZSwKKyAgICAgICAgICAgICAgICctYycsCisgICAgICAgICAgICAgICAnZnJvbSB0dXJ0bGVkZW1vLl9fbWFpbl9fIGltcG9ydCBtYWluOyBtYWluKCknXQorICAgICAgICBzdWJwcm9jZXNzLlBvcGVuKGNtZCwgc2hlbGw9RmFsc2UpCisKICAgICBkZWYgZ290b2xpbmUoc2VsZiwgbGluZW5vKToKICAgICAgICAgaWYgbGluZW5vIGlzIG5vdCBOb25lIGFuZCBsaW5lbm8gPiAwOgogICAgICAgICAgICAgc2VsZi50ZXh0Lm1hcmtfc2V0KCJpbnNlcnQiLCAiJWQuMCIgJSBsaW5lbm8pCkBAIC03NTIsMTEgKzczOCwxMSBAQAogICAgICAgICBzZWxmLmNvbG9yID0gTm9uZQogCiAgICAgZGVmIFJlc2V0Q29sb3JpemVyKHNlbGYpOgotICAgICAgICAiVXBkYXRlIHRoZSBjb2xvdXIgdGhlbWUiCisgICAgICAgICJVcGRhdGUgdGhlIGNvbG9yIHRoZW1lIgogICAgICAgICAjIENhbGxlZCBmcm9tIHNlbGYuZmlsZW5hbWVfY2hhbmdlX2hvb2sgYW5kIGZyb20gY29uZmlnRGlhbG9nLnB5CiAgICAgICAgIHNlbGYuX3JtY29sb3JpemVyKCkKICAgICAgICAgc2VsZi5fYWRkY29sb3JpemVyKCkKLSAgICAgICAgdGhlbWUgPSBpZGxlQ29uZi5HZXRPcHRpb24oJ21haW4nLCdUaGVtZScsJ25hbWUnKQorICAgICAgICB0aGVtZSA9IGlkbGVDb25mLkN1cnJlbnRUaGVtZSgpCiAgICAgICAgIG5vcm1hbF9jb2xvcnMgPSBpZGxlQ29uZi5HZXRIaWdobGlnaHQodGhlbWUsICdub3JtYWwnKQogICAgICAgICBjdXJzb3JfY29sb3IgPSBpZGxlQ29uZi5HZXRIaWdobGlnaHQodGhlbWUsICdjdXJzb3InLCBmZ0JnPSdmZycpCiAgICAgICAgIHNlbGVjdF9jb2xvcnMgPSBpZGxlQ29uZi5HZXRIaWdobGlnaHQodGhlbWUsICdoaWxpdGUnKQpAQCAtNzY3LDYgKzc1Myw5IEBACiAgICAgICAgICAgICBzZWxlY3Rmb3JlZ3JvdW5kPXNlbGVjdF9jb2xvcnNbJ2ZvcmVncm91bmQnXSwKICAgICAgICAgICAgIHNlbGVjdGJhY2tncm91bmQ9c2VsZWN0X2NvbG9yc1snYmFja2dyb3VuZCddLAogICAgICAgICAgICAgKQorICAgICAgICBpZiBUa1ZlcnNpb24gPj0gOC41OgorICAgICAgICAgICAgc2VsZi50ZXh0LmNvbmZpZygKKyAgICAgICAgICAgICAgICBpbmFjdGl2ZXNlbGVjdGJhY2tncm91bmQ9c2VsZWN0X2NvbG9yc1snYmFja2dyb3VuZCddKQogCiAgICAgSURFTlRDSEFSUyA9IHN0cmluZy5hc2NpaV9sZXR0ZXJzICsgc3RyaW5nLmRpZ2l0cyArICJfIgogCkBAIC03ODQsMTMgKzc3Myw4IEBACiAgICAgZGVmIFJlc2V0Rm9udChzZWxmKToKICAgICAgICAgIlVwZGF0ZSB0aGUgdGV4dCB3aWRnZXRzJyBmb250IGlmIGl0IGlzIGNoYW5nZWQiCiAgICAgICAgICMgQ2FsbGVkIGZyb20gY29uZmlnRGlhbG9nLnB5Ci0gICAgICAgIGZvbnRXZWlnaHQ9J25vcm1hbCcKLSAgICAgICAgaWYgaWRsZUNvbmYuR2V0T3B0aW9uKCdtYWluJywnRWRpdG9yV2luZG93JywnZm9udC1ib2xkJyx0eXBlPSdib29sJyk6Ci0gICAgICAgICAgICBmb250V2VpZ2h0PSdib2xkJwotICAgICAgICBzZWxmLnRleHQuY29uZmlnKGZvbnQ9KGlkbGVDb25mLkdldE9wdGlvbignbWFpbicsJ0VkaXRvcldpbmRvdycsJ2ZvbnQnKSwKLSAgICAgICAgICAgICAgICBpZGxlQ29uZi5HZXRPcHRpb24oJ21haW4nLCdFZGl0b3JXaW5kb3cnLCdmb250LXNpemUnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPSdpbnQnKSwKLSAgICAgICAgICAgICAgICBmb250V2VpZ2h0KSkKKworICAgICAgICBzZWxmLnRleHRbJ2ZvbnQnXSA9IGlkbGVDb25mLkdldEZvbnQoc2VsZi5yb290LCAnbWFpbicsJ0VkaXRvcldpbmRvdycpCiAKICAgICBkZWYgUmVtb3ZlS2V5YmluZGluZ3Moc2VsZik6CiAgICAgICAgICJSZW1vdmUgdGhlIGtleWJpbmRpbmdzIGJlZm9yZSB0aGV5IGFyZSBjaGFuZ2VkLiIKQEAgLTg3Miw3ICs4NTYsNyBAQAogICAgICAgICAgICAgaWYgc3lzLnBsYXRmb3JtWzozXSA9PSAnd2luJzoKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIG9zLnN0YXJ0ZmlsZShoZWxwZmlsZSkKLSAgICAgICAgICAgICAgICBleGNlcHQgV2luZG93c0Vycm9yIGFzIHdoeToKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyB3aHk6CiAgICAgICAgICAgICAgICAgICAgIHRrTWVzc2FnZUJveC5zaG93ZXJyb3IodGl0bGU9J0RvY3VtZW50IFN0YXJ0IEZhaWx1cmUnLAogICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZT1zdHIod2h5KSwgcGFyZW50PXNlbGYudGV4dCkKICAgICAgICAgICAgIGVsc2U6CkBAIC05MDYsOSArODkwLDExIEBACiAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKICAgICAgICAgICAgIGlmIG5vdCBnZXRhdHRyKHNlbGYucm9vdCwgInJlY2VudGZpbGVsaXN0X2Vycm9yX2Rpc3BsYXllZCIsIEZhbHNlKToKICAgICAgICAgICAgICAgICBzZWxmLnJvb3QucmVjZW50ZmlsZWxpc3RfZXJyb3JfZGlzcGxheWVkID0gVHJ1ZQotICAgICAgICAgICAgICAgIHRrTWVzc2FnZUJveC5zaG93ZXJyb3IodGl0bGU9J0lETEUgRXJyb3InLAotICAgICAgICAgICAgICAgICAgICBtZXNzYWdlPSdVbmFibGUgdG8gdXBkYXRlIFJlY2VudCBGaWxlcyBsaXN0OlxuJXMnCi0gICAgICAgICAgICAgICAgICAgICAgICAlIHN0cihlcnIpLAorICAgICAgICAgICAgICAgIHRrTWVzc2FnZUJveC5zaG93d2FybmluZyh0aXRsZT0nSURMRSBXYXJuaW5nJywKKyAgICAgICAgICAgICAgICAgICAgbWVzc2FnZT0iQ2Fubm90IHVwZGF0ZSBGaWxlIG1lbnUgUmVjZW50IEZpbGVzIGxpc3QuICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiWW91ciBvcGVyYXRpbmcgc3lzdGVtIHNheXM6XG4lc1xuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTZWxlY3QgT0sgYW5kIElETEUgd2lsbCBjb250aW51ZSB3aXRob3V0IHVwZGF0aW5nLiIKKyAgICAgICAgICAgICAgICAgICAgICAgICUgc2VsZi5fZmlsZW5hbWVfdG9fdW5pY29kZShzdHIoZXJyKSksCiAgICAgICAgICAgICAgICAgICAgIHBhcmVudD1zZWxmLnRleHQpCiAgICAgICAgICMgZm9yIGVhY2ggZWRpdCB3aW5kb3cgaW5zdGFuY2UsIGNvbnN0cnVjdCB0aGUgcmVjZW50IGZpbGVzIG1lbnUKICAgICAgICAgZm9yIGluc3RhbmNlIGluIHNlbGYudG9wLmluc3RhbmNlX2RpY3Q6CkBAIC05MzIsNyArOTE4LDcgQEAKICAgICAgICAgc2hvcnQgPSBzZWxmLnNob3J0X3RpdGxlKCkKICAgICAgICAgbG9uZyA9IHNlbGYubG9uZ190aXRsZSgpCiAgICAgICAgIGlmIHNob3J0IGFuZCBsb25nOgotICAgICAgICAgICAgdGl0bGUgPSBzaG9ydCArICIgLSAiICsgbG9uZworICAgICAgICAgICAgdGl0bGUgPSBzaG9ydCArICIgLSAiICsgbG9uZyArIF9weV92ZXJzaW9uCiAgICAgICAgIGVsaWYgc2hvcnQ6CiAgICAgICAgICAgICB0aXRsZSA9IHNob3J0CiAgICAgICAgIGVsaWYgbG9uZzoKQEAgLTk1NiwxNCArOTQyLDEzIEBACiAgICAgICAgIHNlbGYudW5kby5yZXNldF91bmRvKCkKIAogICAgIGRlZiBzaG9ydF90aXRsZShzZWxmKToKLSAgICAgICAgcHl2ZXJzaW9uID0gIlB5dGhvbiAiICsgcHl0aG9uX3ZlcnNpb24oKSArICI6ICIKICAgICAgICAgZmlsZW5hbWUgPSBzZWxmLmlvLmZpbGVuYW1lCiAgICAgICAgIGlmIGZpbGVuYW1lOgogICAgICAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKGZpbGVuYW1lKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgZmlsZW5hbWUgPSAiVW50aXRsZWQiCiAgICAgICAgICMgcmV0dXJuIHVuaWNvZGUgc3RyaW5nIHRvIGRpc3BsYXkgbm9uLUFTQ0lJIGNoYXJzIGNvcnJlY3RseQotICAgICAgICByZXR1cm4gcHl2ZXJzaW9uICsgc2VsZi5fZmlsZW5hbWVfdG9fdW5pY29kZShmaWxlbmFtZSkKKyAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbGVuYW1lX3RvX3VuaWNvZGUoZmlsZW5hbWUpCiAKICAgICBkZWYgbG9uZ190aXRsZShzZWxmKToKICAgICAgICAgIyByZXR1cm4gdW5pY29kZSBzdHJpbmcgdG8gZGlzcGxheSBub24tQVNDSUkgY2hhcnMgY29ycmVjdGx5CkBAIC0xMDYzLDcgKzEwNDgsNyBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgbW9kID0gaW1wb3J0bGliLmltcG9ydF9tb2R1bGUoJy4nICsgbmFtZSwgcGFja2FnZT1fX3BhY2thZ2VfXykKLSAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCAoSW1wb3J0RXJyb3IsIFR5cGVFcnJvcik6CiAgICAgICAgICAgICAgICAgbW9kID0gaW1wb3J0bGliLmltcG9ydF9tb2R1bGUobmFtZSkKICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgogICAgICAgICAgICAgcHJpbnQoIlxuRmFpbGVkIHRvIGltcG9ydCBleHRlbnNpb246ICIsIG5hbWUpCkBAIC0xMzk3LDcgKzEzODIsNyBAQAogICAgICAgICAgICAgdGV4dC5zZWUoImluc2VydCIpCiAgICAgICAgICAgICB0ZXh0LnVuZG9fYmxvY2tfc3RvcCgpCiAKLSAgICAjIE91ciBlZGl0d2luIHByb3ZpZGVzIGEgaXNfY2hhcl9pbl9zdHJpbmcgZnVuY3Rpb24gdGhhdCB3b3JrcworICAgICMgT3VyIGVkaXR3aW4gcHJvdmlkZXMgYW4gaXNfY2hhcl9pbl9zdHJpbmcgZnVuY3Rpb24gdGhhdCB3b3JrcwogICAgICMgd2l0aCBhIFRrIHRleHQgaW5kZXgsIGJ1dCBQeVBhcnNlIG9ubHkga25vd3MgYWJvdXQgb2Zmc2V0cyBpbnRvCiAgICAgIyBhIHN0cmluZy4gVGhpcyBidWlsZHMgYSBmdW5jdGlvbiBmb3IgUHlQYXJzZSB0aGF0IGFjY2VwdHMgYW4KICAgICAjIG9mZnNldC4KQEAgLTE2NzIsNyArMTY1Nyw3IEBACiAgICAga2V5bGlzdCA9IGtleWRlZnMuZ2V0KGV2ZW50bmFtZSkKICAgICAjIGlzc3VlMTA5NDA6IHRlbXBvcmFyeSB3b3JrYXJvdW5kIHRvIHByZXZlbnQgaGFuZyB3aXRoIE9TIFggQ29jb2EgVGsgOC41CiAgICAgIyBpZiBub3Qga2V5bGlzdDoKLSAgICBpZiAobm90IGtleWxpc3QpIG9yIChtYWNvc3hTdXBwb3J0LnJ1bm5pbmdBc09TWEFwcCgpIGFuZCBldmVudG5hbWUgaW4geworICAgIGlmIChub3Qga2V5bGlzdCkgb3IgKG1hY29zeFN1cHBvcnQuaXNDb2NvYVRrKCkgYW5kIGV2ZW50bmFtZSBpbiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjw8b3Blbi1tb2R1bGU+PiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjw8Z290by1saW5lPj4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8PGNoYW5nZS1pbmRlbnR3aWR0aD4+In0pOgpAQCAtMTY5OSwxOSArMTY4NCwyMCBAQAogICAgIHRrLmNhbGwoJ3NldCcsICd0Y2xfbm9ud29yZGNoYXJzJywgJ1teYS16QS1aMC05X10nKQogCiAKLWRlZiB0ZXN0KCk6Ci0gICAgcm9vdCA9IFRrKCkKK2RlZiBfZWRpdG9yX3dpbmRvdyhwYXJlbnQpOiAgIyBodGVzdCAjCisgICAgIyBlcnJvciBpZiBjbG9zZSBtYXN0ZXIgd2luZG93IGZpcnN0IC0gdGltZXIgZXZlbnQsIGFmdGVyIHNjcmlwdAorICAgIHJvb3QgPSBwYXJlbnQKICAgICBmaXh3b3JkYnJlYWtzKHJvb3QpCi0gICAgcm9vdC53aXRoZHJhdygpCiAgICAgaWYgc3lzLmFyZ3ZbMTpdOgogICAgICAgICBmaWxlbmFtZSA9IHN5cy5hcmd2WzFdCiAgICAgZWxzZToKICAgICAgICAgZmlsZW5hbWUgPSBOb25lCisgICAgbWFjb3N4U3VwcG9ydC5zZXR1cEFwcChyb290LCBOb25lKQogICAgIGVkaXQgPSBFZGl0b3JXaW5kb3cocm9vdD1yb290LCBmaWxlbmFtZT1maWxlbmFtZSkKLSAgICBlZGl0LnNldF9jbG9zZV9ob29rKHJvb3QucXVpdCkKICAgICBlZGl0LnRleHQuYmluZCgiPDxjbG9zZS1hbGwtd2luZG93cz4+IiwgZWRpdC5jbG9zZV9ldmVudCkKLSAgICByb290Lm1haW5sb29wKCkKLSAgICByb290LmRlc3Ryb3koKQorICAgICMgRG9lcyBub3Qgc3RvcCBlcnJvciwgbmVpdGhlciBkb2VzIGZvbGxvd2luZworICAgICMgZWRpdC50ZXh0LmJpbmQoIjw8Y2xvc2Utd2luZG93Pj4iLCBlZGl0LmNsb3NlX2V2ZW50KQogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3QoKQorICAgIGZyb20gaWRsZWxpYi5pZGxlX3Rlc3QuaHRlc3QgaW1wb3J0IHJ1bgorICAgIHJ1bihfZWRpdG9yX3dpbmRvdykKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL0ZpbGVMaXN0LnB5IGIvTGliL2lkbGVsaWIvRmlsZUxpc3QucHkKaW5kZXggMzdhMzM3ZS4uYTk5ODlhOCAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvRmlsZUxpc3QucHkKKysrIGIvTGliL2lkbGVsaWIvRmlsZUxpc3QucHkKQEAgLTEwMyw3ICsxMDMsNyBAQAogICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2FicyhmaWxlbmFtZSk6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgcHdkID0gb3MuZ2V0Y3dkKCkKLSAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4ocHdkLCBmaWxlbmFtZSkKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL0Zvcm1hdFBhcmFncmFwaC5weSBiL0xpYi9pZGxlbGliL0Zvcm1hdFBhcmFncmFwaC5weQppbmRleCBhZTRlNmU3Li43YTlkMTg1IDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9Gb3JtYXRQYXJhZ3JhcGgucHkKKysrIGIvTGliL2lkbGVsaWIvRm9ybWF0UGFyYWdyYXBoLnB5CkBAIC0zMiw3ICszMiw3IEBACiAgICAgZGVmIGNsb3NlKHNlbGYpOgogICAgICAgICBzZWxmLmVkaXR3aW4gPSBOb25lCiAKLSAgICBkZWYgZm9ybWF0X3BhcmFncmFwaF9ldmVudChzZWxmLCBldmVudCk6CisgICAgZGVmIGZvcm1hdF9wYXJhZ3JhcGhfZXZlbnQoc2VsZiwgZXZlbnQsIGxpbWl0PU5vbmUpOgogICAgICAgICAiIiJGb3JtYXRzIHBhcmFncmFwaCB0byBhIG1heCB3aWR0aCBzcGVjaWZpZWQgaW4gaWRsZUNvbmYuCiAKICAgICAgICAgSWYgdGV4dCBpcyBzZWxlY3RlZCwgZm9ybWF0X3BhcmFncmFwaF9ldmVudCB3aWxsIHN0YXJ0IGJyZWFraW5nIGxpbmVzCkBAIC00MSw5ICs0MSwxNCBAQAogICAgICAgICBJZiBubyB0ZXh0IGlzIHNlbGVjdGVkLCBmb3JtYXRfcGFyYWdyYXBoX2V2ZW50IHVzZXMgdGhlIGN1cnJlbnQKICAgICAgICAgY3Vyc29yIGxvY2F0aW9uIHRvIGRldGVybWluZSB0aGUgcGFyYWdyYXBoIChsaW5lcyBvZiB0ZXh0IHN1cnJvdW5kZWQKICAgICAgICAgYnkgYmxhbmsgbGluZXMpIGFuZCBmb3JtYXRzIGl0LgorCisgICAgICAgIFRoZSBsZW5ndGggbGltaXQgcGFyYW1ldGVyIGlzIGZvciB0ZXN0aW5nIHdpdGggYSBrbm93biB2YWx1ZS4KICAgICAgICAgIiIiCi0gICAgICAgIG1heGZvcm1hdHdpZHRoID0gaWRsZUNvbmYuR2V0T3B0aW9uKAotICAgICAgICAgICAgICAgICdtYWluJywgJ0Zvcm1hdFBhcmFncmFwaCcsICdwYXJhZ3JhcGgnLCB0eXBlPSdpbnQnKQorICAgICAgICBpZiBsaW1pdCBpcyBOb25lOgorICAgICAgICAgICAgIyBUaGUgZGVmYXVsdCBsZW5ndGggbGltaXQgaXMgdGhhdCBkZWZpbmVkIGJ5IHBlcDgKKyAgICAgICAgICAgIGxpbWl0ID0gaWRsZUNvbmYuR2V0T3B0aW9uKAorICAgICAgICAgICAgICAgICdleHRlbnNpb25zJywgJ0Zvcm1hdFBhcmFncmFwaCcsICdtYXgtd2lkdGgnLAorICAgICAgICAgICAgICAgIHR5cGU9J2ludCcsIGRlZmF1bHQ9NzIpCiAgICAgICAgIHRleHQgPSBzZWxmLmVkaXR3aW4udGV4dAogICAgICAgICBmaXJzdCwgbGFzdCA9IHNlbGYuZWRpdHdpbi5nZXRfc2VsZWN0aW9uX2luZGljZXMoKQogICAgICAgICBpZiBmaXJzdCBhbmQgbGFzdDoKQEAgLTUzLDkgKzU4LDkgQEAKICAgICAgICAgICAgIGZpcnN0LCBsYXN0LCBjb21tZW50X2hlYWRlciwgZGF0YSA9IFwKICAgICAgICAgICAgICAgICAgICAgZmluZF9wYXJhZ3JhcGgodGV4dCwgdGV4dC5pbmRleCgiaW5zZXJ0IikpCiAgICAgICAgIGlmIGNvbW1lbnRfaGVhZGVyOgotICAgICAgICAgICAgbmV3ZGF0YSA9IHJlZm9ybWF0X2NvbW1lbnQoZGF0YSwgbWF4Zm9ybWF0d2lkdGgsIGNvbW1lbnRfaGVhZGVyKQorICAgICAgICAgICAgbmV3ZGF0YSA9IHJlZm9ybWF0X2NvbW1lbnQoZGF0YSwgbGltaXQsIGNvbW1lbnRfaGVhZGVyKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgbmV3ZGF0YSA9IHJlZm9ybWF0X3BhcmFncmFwaChkYXRhLCBtYXhmb3JtYXR3aWR0aCkKKyAgICAgICAgICAgIG5ld2RhdGEgPSByZWZvcm1hdF9wYXJhZ3JhcGgoZGF0YSwgbGltaXQpCiAgICAgICAgIHRleHQudGFnX3JlbW92ZSgic2VsIiwgIjEuMCIsICJlbmQiKQogCiAgICAgICAgIGlmIG5ld2RhdGEgIT0gZGF0YToKQEAgLTE4NSw3ICsxOTAsNiBAQAogICAgIHJldHVybiBtLmdyb3VwKDEpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0OyBzdXBwb3J0LnVzZV9yZXNvdXJjZXMgPSBbJ2d1aSddCiAgICAgaW1wb3J0IHVuaXR0ZXN0CiAgICAgdW5pdHRlc3QubWFpbignaWRsZWxpYi5pZGxlX3Rlc3QudGVzdF9mb3JtYXRwYXJhZ3JhcGgnLAogICAgICAgICAgICAgdmVyYm9zaXR5PTIsIGV4aXQ9RmFsc2UpCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9HcmVwRGlhbG9nLnB5IGIvTGliL2lkbGVsaWIvR3JlcERpYWxvZy5weQppbmRleCBjMzU5MDc0Li43MjFiMjMxIDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9HcmVwRGlhbG9nLnB5CisrKyBiL0xpYi9pZGxlbGliL0dyZXBEaWFsb2cucHkKQEAgLTEsOSArMSwxMyBAQAogaW1wb3J0IG9zCiBpbXBvcnQgZm5tYXRjaAoraW1wb3J0IHJlICAjIGZvciBodGVzdAogaW1wb3J0IHN5cwotZnJvbSB0a2ludGVyIGltcG9ydCAqCitmcm9tIHRraW50ZXIgaW1wb3J0IFN0cmluZ1ZhciwgQm9vbGVhblZhciwgQ2hlY2tidXR0b24gICMgZm9yIEdyZXBEaWFsb2cKK2Zyb20gdGtpbnRlciBpbXBvcnQgVGssIFRleHQsIEJ1dHRvbiwgU0VMLCBFTkQgICMgZm9yIGh0ZXN0CiBmcm9tIGlkbGVsaWIgaW1wb3J0IFNlYXJjaEVuZ2luZQogZnJvbSBpZGxlbGliLlNlYXJjaERpYWxvZ0Jhc2UgaW1wb3J0IFNlYXJjaERpYWxvZ0Jhc2UKKyMgSW1wb3J0aW5nIE91dHB1dFdpbmRvdyBmYWlscyBkdWUgdG8gaW1wb3J0IGxvb3AKKyMgRWRpdG9yV2luZG93IC0+IEdyZXBEaWFsb3AgLT4gT3V0cHV0V2luZG93IC0+IEVkaXRvcldpbmRvdwogCiBkZWYgZ3JlcCh0ZXh0LCBpbz1Ob25lLCBmbGlzdD1Ob25lKToKICAgICByb290ID0gdGV4dC5fcm9vdCgpCkBAIC00MCwxMCArNDQsMTAgQEAKIAogICAgIGRlZiBjcmVhdGVfZW50cmllcyhzZWxmKToKICAgICAgICAgU2VhcmNoRGlhbG9nQmFzZS5jcmVhdGVfZW50cmllcyhzZWxmKQotICAgICAgICBzZWxmLmdsb2JlbnQgPSBzZWxmLm1ha2VfZW50cnkoIkluIGZpbGVzOiIsIHNlbGYuZ2xvYnZhcikKKyAgICAgICAgc2VsZi5nbG9iZW50ID0gc2VsZi5tYWtlX2VudHJ5KCJJbiBmaWxlczoiLCBzZWxmLmdsb2J2YXIpWzBdCiAKICAgICBkZWYgY3JlYXRlX290aGVyX2J1dHRvbnMoc2VsZik6Ci0gICAgICAgIGYgPSBzZWxmLm1ha2VfZnJhbWUoKQorICAgICAgICBmID0gc2VsZi5tYWtlX2ZyYW1lKClbMF0KIAogICAgICAgICBidG4gPSBDaGVja2J1dHRvbihmLCBhbmNob3I9InciLAogICAgICAgICAgICAgICAgIHZhcmlhYmxlPXNlbGYucmVjdmFyLApAQCAtNjMsNyArNjcsNyBAQAogICAgICAgICBpZiBub3QgcGF0aDoKICAgICAgICAgICAgIHNlbGYudG9wLmJlbGwoKQogICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGZyb20gaWRsZWxpYi5PdXRwdXRXaW5kb3cgaW1wb3J0IE91dHB1dFdpbmRvdworICAgICAgICBmcm9tIGlkbGVsaWIuT3V0cHV0V2luZG93IGltcG9ydCBPdXRwdXRXaW5kb3cgICMgbGVhdmUgaGVyZSEKICAgICAgICAgc2F2ZSA9IHN5cy5zdGRvdXQKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc3lzLnN0ZG91dCA9IE91dHB1dFdpbmRvdyhzZWxmLmZsaXN0KQpAQCAtNzksMjEgKzgzLDI2IEBACiAgICAgICAgIHBhdCA9IHNlbGYuZW5naW5lLmdldHBhdCgpCiAgICAgICAgIHByaW50KCJTZWFyY2hpbmcgJXIgaW4gJXMgLi4uIiAlIChwYXQsIHBhdGgpKQogICAgICAgICBoaXRzID0gMAotICAgICAgICBmb3IgZm4gaW4gbGlzdDoKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICB3aXRoIG9wZW4oZm4sIGVycm9ycz0ncmVwbGFjZScpIGFzIGY6Ci0gICAgICAgICAgICAgICAgICAgIGZvciBsaW5lbm8sIGxpbmUgaW4gZW51bWVyYXRlKGYsIDEpOgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgbGluZVstMTpdID09ICdcbic6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmVbOi0xXQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgcHJvZy5zZWFyY2gobGluZSk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiJXM6ICVzOiAlc1xuIiAlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZm4sIGxpbmVubywgbGluZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGl0cyArPSAxCi0gICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBtc2c6Ci0gICAgICAgICAgICAgICAgcHJpbnQobXNnKQotICAgICAgICBwcmludCgoIkhpdHMgZm91bmQ6ICVzXG4iCi0gICAgICAgICAgICAgICIoSGludDogcmlnaHQtY2xpY2sgdG8gb3BlbiBsb2NhdGlvbnMuKSIKLSAgICAgICAgICAgICAgJSBoaXRzKSBpZiBoaXRzIGVsc2UgIk5vIGhpdHMuIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZm9yIGZuIGluIGxpc3Q6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICB3aXRoIG9wZW4oZm4sIGVycm9ycz0ncmVwbGFjZScpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgbGluZW5vLCBsaW5lIGluIGVudW1lcmF0ZShmLCAxKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBsaW5lWy0xOl0gPT0gJ1xuJzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmVbOi0xXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHByb2cuc2VhcmNoKGxpbmUpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCIlczogJXM6ICVzXG4iICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZm4sIGxpbmVubywgbGluZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpdHMgKz0gMQorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIG1zZzoKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQobXNnKQorICAgICAgICAgICAgcHJpbnQoKCJIaXRzIGZvdW5kOiAlc1xuIgorICAgICAgICAgICAgICAgICAgIihIaW50OiByaWdodC1jbGljayB0byBvcGVuIGxvY2F0aW9ucy4pIgorICAgICAgICAgICAgICAgICAgJSBoaXRzKSBpZiBoaXRzIGVsc2UgIk5vIGhpdHMuIikKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgIyBUayB3aW5kb3cgaGFzIGJlZW4gY2xvc2VkLCBPdXRwdXRXaW5kb3cudGV4dCA9IE5vbmUsCisgICAgICAgICAgICAjIHNvIGluIE9XLndyaXRlLCBPVy50ZXh0Lmluc2VydCBmYWlscy4KKyAgICAgICAgICAgIHBhc3MKIAogICAgIGRlZiBmaW5kZmlsZXMoc2VsZiwgZGlyLCBiYXNlLCByZWMpOgogICAgICAgICB0cnk6CkBAIC0xMjAsOSArMTI5LDMwIEBACiAgICAgICAgICAgICBzZWxmLnRvcC5ncmFiX3JlbGVhc2UoKQogICAgICAgICAgICAgc2VsZi50b3Aud2l0aGRyYXcoKQogCisKK2RlZiBfZ3JlcF9kaWFsb2cocGFyZW50KTogICMgaHRlc3QgIworICAgIGZyb20gaWRsZWxpYi5QeVNoZWxsIGltcG9ydCBQeVNoZWxsRmlsZUxpc3QKKyAgICByb290ID0gVGsoKQorICAgIHJvb3QudGl0bGUoIlRlc3QgR3JlcERpYWxvZyIpCisgICAgd2lkdGgsIGhlaWdodCwgeCwgeSA9IGxpc3QobWFwKGludCwgcmUuc3BsaXQoJ1t4K10nLCBwYXJlbnQuZ2VvbWV0cnkoKSkpKQorICAgIHJvb3QuZ2VvbWV0cnkoIislZCslZCIlKHgsIHkgKyAxNTApKQorCisgICAgZmxpc3QgPSBQeVNoZWxsRmlsZUxpc3Qocm9vdCkKKyAgICB0ZXh0ID0gVGV4dChyb290LCBoZWlnaHQ9NSkKKyAgICB0ZXh0LnBhY2soKQorCisgICAgZGVmIHNob3dfZ3JlcF9kaWFsb2coKToKKyAgICAgICAgdGV4dC50YWdfYWRkKFNFTCwgIjEuMCIsIEVORCkKKyAgICAgICAgZ3JlcCh0ZXh0LCBmbGlzdD1mbGlzdCkKKyAgICAgICAgdGV4dC50YWdfcmVtb3ZlKFNFTCwgIjEuMCIsIEVORCkKKworICAgIGJ1dHRvbiA9IEJ1dHRvbihyb290LCB0ZXh0PSJTaG93IEdyZXBEaWFsb2ciLCBjb21tYW5kPXNob3dfZ3JlcF9kaWFsb2cpCisgICAgYnV0dG9uLnBhY2soKQorICAgIHJvb3QubWFpbmxvb3AoKQorCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgICMgQSBodW1hbiB0ZXN0IGlzIGEgYml0IHRyaWNreSBzaW5jZSBFZGl0b3JXaW5kb3coKSBpbXBvcnRzIHRoaXMgbW9kdWxlLgotICAgICMgSGVuY2UgSWRsZSBtdXN0IGJlIHJlc3RhcnRlZCBhZnRlciBlZGl0aW5nIHRoaXMgZmlsZSBmb3IgYSBsaXZlIHRlc3QuCiAgICAgaW1wb3J0IHVuaXR0ZXN0CiAgICAgdW5pdHRlc3QubWFpbignaWRsZWxpYi5pZGxlX3Rlc3QudGVzdF9ncmVwJywgdmVyYm9zaXR5PTIsIGV4aXQ9RmFsc2UpCiAKKyAgICBmcm9tIGlkbGVsaWIuaWRsZV90ZXN0Lmh0ZXN0IGltcG9ydCBydW4KKyAgICBydW4oX2dyZXBfZGlhbG9nKQpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvSHlwZXJQYXJzZXIucHkgYi9MaWIvaWRsZWxpYi9IeXBlclBhcnNlci5weQppbmRleCA0YWY0YjA4Li43N2NiMDU3IDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9IeXBlclBhcnNlci5weQorKysgYi9MaWIvaWRsZWxpYi9IeXBlclBhcnNlci5weQpAQCAtMSwyMyArMSwzMSBAQAotIiIiCi1IeXBlclBhcnNlcgotPT09PT09PT09PT0KLVRoaXMgbW9kdWxlIGRlZmluZXMgdGhlIEh5cGVyUGFyc2VyIGNsYXNzLCB3aGljaCBwcm92aWRlcyBhZHZhbmNlZCBwYXJzaW5nCi1hYmlsaXRpZXMgZm9yIHRoZSBQYXJlbk1hdGNoIGFuZCBvdGhlciBleHRlbnNpb25zLgotVGhlIEh5cGVyUGFyc2VyIHVzZXMgUHlQYXJzZXIuIFB5UGFyc2VyIGlzIGludGVuZGVkIG1vc3RseSB0byBnaXZlIGluZm9ybWF0aW9uCi1vbiB0aGUgcHJvcGVyIGluZGVudGF0aW9uIG9mIGNvZGUuIEh5cGVyUGFyc2VyIGdpdmVzIHNvbWUgaW5mb3JtYXRpb24gb24gdGhlCi1zdHJ1Y3R1cmUgb2YgY29kZSwgdXNlZCBieSBleHRlbnNpb25zIHRvIGhlbHAgdGhlIHVzZXIuCisiIiJQcm92aWRlIGFkdmFuY2VkIHBhcnNpbmcgYWJpbGl0aWVzIGZvciBQYXJlbk1hdGNoIGFuZCBvdGhlciBleHRlbnNpb25zLgorCitIeXBlclBhcnNlciB1c2VzIFB5UGFyc2VyLiAgUHlQYXJzZXIgbW9zdGx5IGdpdmVzIGluZm9ybWF0aW9uIG9uIHRoZQorcHJvcGVyIGluZGVudGF0aW9uIG9mIGNvZGUuICBIeXBlclBhcnNlciBnaXZlcyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9uCit0aGUgc3RydWN0dXJlIG9mIGNvZGUuCiAiIiIKIAogaW1wb3J0IHN0cmluZwotaW1wb3J0IGtleXdvcmQKK2Zyb20ga2V5d29yZCBpbXBvcnQgaXNrZXl3b3JkCiBmcm9tIGlkbGVsaWIgaW1wb3J0IFB5UGFyc2UKIAotY2xhc3MgSHlwZXJQYXJzZXI6CiAKKyMgYWxsIEFTQ0lJIGNoYXJzIHRoYXQgbWF5IGJlIGluIGFuIGlkZW50aWZpZXIKK19BU0NJSV9JRF9DSEFSUyA9IGZyb3plbnNldChzdHJpbmcuYXNjaWlfbGV0dGVycyArIHN0cmluZy5kaWdpdHMgKyAiXyIpCisjIGFsbCBBU0NJSSBjaGFycyB0aGF0IG1heSBiZSB0aGUgZmlyc3QgY2hhciBvZiBhbiBpZGVudGlmaWVyCitfQVNDSUlfSURfRklSU1RfQ0hBUlMgPSBmcm96ZW5zZXQoc3RyaW5nLmFzY2lpX2xldHRlcnMgKyAiXyIpCisKKyMgbG9va3VwIHRhYmxlIGZvciB3aGV0aGVyIDctYml0IEFTQ0lJIGNoYXJzIGFyZSB2YWxpZCBpbiBhIFB5dGhvbiBpZGVudGlmaWVyCitfSVNfQVNDSUlfSURfQ0hBUiA9IFsoY2hyKHgpIGluIF9BU0NJSV9JRF9DSEFSUykgZm9yIHggaW4gcmFuZ2UoMTI4KV0KKyMgbG9va3VwIHRhYmxlIGZvciB3aGV0aGVyIDctYml0IEFTQ0lJIGNoYXJzIGFyZSB2YWxpZCBhcyB0aGUgZmlyc3QKKyMgY2hhciBpbiBhIFB5dGhvbiBpZGVudGlmaWVyCitfSVNfQVNDSUlfSURfRklSU1RfQ0hBUiA9IFwKKyAgICBbKGNocih4KSBpbiBfQVNDSUlfSURfRklSU1RfQ0hBUlMpIGZvciB4IGluIHJhbmdlKDEyOCldCisKKworY2xhc3MgSHlwZXJQYXJzZXI6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGVkaXR3aW4sIGluZGV4KToKLSAgICAgICAgIiIiSW5pdGlhbGl6ZSB0aGUgSHlwZXJQYXJzZXIgdG8gYW5hbHl6ZSB0aGUgc3Vycm91bmRpbmdzIG9mIHRoZSBnaXZlbgotICAgICAgICBpbmRleC4KLSAgICAgICAgIiIiCisgICAgICAgICJUbyBpbml0aWFsaXplLCBhbmFseXplIHRoZSBzdXJyb3VuZGluZ3Mgb2YgdGhlIGdpdmVuIGluZGV4LiIKIAogICAgICAgICBzZWxmLmVkaXR3aW4gPSBlZGl0d2luCiAgICAgICAgIHNlbGYudGV4dCA9IHRleHQgPSBlZGl0d2luLnRleHQKQEAgLTMzLDkgKzQxLDEwIEBACiAgICAgICAgICAgICAgICAgc3RhcnRhdCA9IG1heChsbm8gLSBjb250ZXh0LCAxKQogICAgICAgICAgICAgICAgIHN0YXJ0YXRpbmRleCA9IHJlcHIoc3RhcnRhdCkgKyAiLjAiCiAgICAgICAgICAgICAgICAgc3RvcGF0aW5kZXggPSAiJWQuZW5kIiAlIGxubwotICAgICAgICAgICAgICAgICMgV2UgYWRkIHRoZSBuZXdsaW5lIGJlY2F1c2UgUHlQYXJzZSByZXF1aXJlcyBhIG5ld2xpbmUgYXQgZW5kLgotICAgICAgICAgICAgICAgICMgV2UgYWRkIGEgc3BhY2Ugc28gdGhhdCBpbmRleCB3b24ndCBiZSBhdCBlbmQgb2YgbGluZSwgc28gdGhhdAotICAgICAgICAgICAgICAgICMgaXRzIHN0YXR1cyB3aWxsIGJlIHRoZSBzYW1lIGFzIHRoZSBjaGFyIGJlZm9yZSBpdCwgaWYgc2hvdWxkLgorICAgICAgICAgICAgICAgICMgV2UgYWRkIHRoZSBuZXdsaW5lIGJlY2F1c2UgUHlQYXJzZSByZXF1aXJlcyBhIG5ld2xpbmUKKyAgICAgICAgICAgICAgICAjIGF0IGVuZC4gV2UgYWRkIGEgc3BhY2Ugc28gdGhhdCBpbmRleCB3b24ndCBiZSBhdCBlbmQKKyAgICAgICAgICAgICAgICAjIG9mIGxpbmUsIHNvIHRoYXQgaXRzIHN0YXR1cyB3aWxsIGJlIHRoZSBzYW1lIGFzIHRoZQorICAgICAgICAgICAgICAgICMgY2hhciBiZWZvcmUgaXQsIGlmIHNob3VsZC4KICAgICAgICAgICAgICAgICBwYXJzZXIuc2V0X3N0cih0ZXh0LmdldChzdGFydGF0aW5kZXgsIHN0b3BhdGluZGV4KSsnIFxuJykKICAgICAgICAgICAgICAgICBib2QgPSBwYXJzZXIuZmluZF9nb29kX3BhcnNlX3N0YXJ0KAogICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0d2luLl9idWlsZF9jaGFyX2luX3N0cmluZ19mdW5jKHN0YXJ0YXRpbmRleCkpCkBAIC00OSwxMjIgKzU4LDE3NSBAQAogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBzdGFydGF0aW5kZXggPSAiMS4wIgogICAgICAgICAgICAgc3RvcGF0aW5kZXggPSAiJWQuZW5kIiAlIGxubwotICAgICAgICAgICAgIyBXZSBhZGQgdGhlIG5ld2xpbmUgYmVjYXVzZSBQeVBhcnNlIHJlcXVpcmVzIGEgbmV3bGluZSBhdCBlbmQuCi0gICAgICAgICAgICAjIFdlIGFkZCBhIHNwYWNlIHNvIHRoYXQgaW5kZXggd29uJ3QgYmUgYXQgZW5kIG9mIGxpbmUsIHNvIHRoYXQKLSAgICAgICAgICAgICMgaXRzIHN0YXR1cyB3aWxsIGJlIHRoZSBzYW1lIGFzIHRoZSBjaGFyIGJlZm9yZSBpdCwgaWYgc2hvdWxkLgorICAgICAgICAgICAgIyBXZSBhZGQgdGhlIG5ld2xpbmUgYmVjYXVzZSBQeVBhcnNlIHJlcXVpcmVzIGl0LiBXZSBhZGQgYQorICAgICAgICAgICAgIyBzcGFjZSBzbyB0aGF0IGluZGV4IHdvbid0IGJlIGF0IGVuZCBvZiBsaW5lLCBzbyB0aGF0IGl0cworICAgICAgICAgICAgIyBzdGF0dXMgd2lsbCBiZSB0aGUgc2FtZSBhcyB0aGUgY2hhciBiZWZvcmUgaXQsIGlmIHNob3VsZC4KICAgICAgICAgICAgIHBhcnNlci5zZXRfc3RyKHRleHQuZ2V0KHN0YXJ0YXRpbmRleCwgc3RvcGF0aW5kZXgpKycgXG4nKQogICAgICAgICAgICAgcGFyc2VyLnNldF9sbygwKQogCi0gICAgICAgICMgV2Ugd2FudCB3aGF0IHRoZSBwYXJzZXIgaGFzLCBleGNlcHQgZm9yIHRoZSBsYXN0IG5ld2xpbmUgYW5kIHNwYWNlLgorICAgICAgICAjIFdlIHdhbnQgd2hhdCB0aGUgcGFyc2VyIGhhcywgbWludXMgdGhlIGxhc3QgbmV3bGluZSBhbmQgc3BhY2UuCiAgICAgICAgIHNlbGYucmF3dGV4dCA9IHBhcnNlci5zdHJbOi0yXQotICAgICAgICAjIEFzIGZhciBhcyBJIGNhbiBzZWUsIHBhcnNlci5zdHIgcHJlc2VydmVzIHRoZSBzdGF0ZW1lbnQgd2UgYXJlIGluLAotICAgICAgICAjIHNvIHRoYXQgc3RvcGF0aW5kZXggY2FuIGJlIHVzZWQgdG8gc3luY2hyb25pemUgdGhlIHN0cmluZyB3aXRoIHRoZQotICAgICAgICAjIHRleHQgYm94IGluZGljZXMuCisgICAgICAgICMgUGFyc2VyLnN0ciBhcHBhcmVudGx5IHByZXNlcnZlcyB0aGUgc3RhdGVtZW50IHdlIGFyZSBpbiwgc28KKyAgICAgICAgIyB0aGF0IHN0b3BhdGluZGV4IGNhbiBiZSB1c2VkIHRvIHN5bmNocm9uaXplIHRoZSBzdHJpbmcgd2l0aAorICAgICAgICAjIHRoZSB0ZXh0IGJveCBpbmRpY2VzLgogICAgICAgICBzZWxmLnN0b3BhdGluZGV4ID0gc3RvcGF0aW5kZXgKICAgICAgICAgc2VsZi5icmFja2V0aW5nID0gcGFyc2VyLmdldF9sYXN0X3N0bXRfYnJhY2tldGluZygpCi0gICAgICAgICMgZmluZCB3aGljaCBwYWlycyBvZiBicmFja2V0aW5nIGFyZSBvcGVuZXJzLiBUaGVzZSBhbHdheXMgY29ycmVzcG9uZAotICAgICAgICAjIHRvIGEgY2hhcmFjdGVyIG9mIHJhd3RleHQuCi0gICAgICAgIHNlbGYuaXNvcGVuZXIgPSBbaT4wIGFuZCBzZWxmLmJyYWNrZXRpbmdbaV1bMV0gPiBzZWxmLmJyYWNrZXRpbmdbaS0xXVsxXQorICAgICAgICAjIGZpbmQgd2hpY2ggcGFpcnMgb2YgYnJhY2tldGluZyBhcmUgb3BlbmVycy4gVGhlc2UgYWx3YXlzCisgICAgICAgICMgY29ycmVzcG9uZCB0byBhIGNoYXJhY3RlciBvZiByYXd0ZXh0LgorICAgICAgICBzZWxmLmlzb3BlbmVyID0gW2k+MCBhbmQgc2VsZi5icmFja2V0aW5nW2ldWzFdID4KKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmJyYWNrZXRpbmdbaS0xXVsxXQogICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihzZWxmLmJyYWNrZXRpbmcpKV0KIAogICAgICAgICBzZWxmLnNldF9pbmRleChpbmRleCkKIAogICAgIGRlZiBzZXRfaW5kZXgoc2VsZiwgaW5kZXgpOgotICAgICAgICAiIiJTZXQgdGhlIGluZGV4IHRvIHdoaWNoIHRoZSBmdW5jdGlvbnMgcmVsYXRlLiBOb3RlIHRoYXQgaXQgbXVzdCBiZQotICAgICAgICBpbiB0aGUgc2FtZSBzdGF0ZW1lbnQuCisgICAgICAgICIiIlNldCB0aGUgaW5kZXggdG8gd2hpY2ggdGhlIGZ1bmN0aW9ucyByZWxhdGUuCisKKyAgICAgICAgVGhlIGluZGV4IG11c3QgYmUgaW4gdGhlIHNhbWUgc3RhdGVtZW50LgogICAgICAgICAiIiIKLSAgICAgICAgaW5kZXhpbnJhd3RleHQgPSBcCi0gICAgICAgICAgICBsZW4oc2VsZi5yYXd0ZXh0KSAtIGxlbihzZWxmLnRleHQuZ2V0KGluZGV4LCBzZWxmLnN0b3BhdGluZGV4KSkKKyAgICAgICAgaW5kZXhpbnJhd3RleHQgPSAobGVuKHNlbGYucmF3dGV4dCkgLQorICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4oc2VsZi50ZXh0LmdldChpbmRleCwgc2VsZi5zdG9wYXRpbmRleCkpKQogICAgICAgICBpZiBpbmRleGlucmF3dGV4dCA8IDA6Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJUaGUgaW5kZXggZ2l2ZW4gaXMgYmVmb3JlIHRoZSBhbmFseXplZCBzdGF0ZW1lbnQiKQorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiSW5kZXggJXMgcHJlY2VkZXMgdGhlIGFuYWx5emVkIHN0YXRlbWVudCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSBpbmRleCkKICAgICAgICAgc2VsZi5pbmRleGlucmF3dGV4dCA9IGluZGV4aW5yYXd0ZXh0CiAgICAgICAgICMgZmluZCB0aGUgcmlnaHRtb3N0IGJyYWNrZXQgdG8gd2hpY2ggaW5kZXggYmVsb25ncwogICAgICAgICBzZWxmLmluZGV4YnJhY2tldCA9IDAKLSAgICAgICAgd2hpbGUgc2VsZi5pbmRleGJyYWNrZXQgPCBsZW4oc2VsZi5icmFja2V0aW5nKS0xIGFuZCBcCi0gICAgICAgICAgICAgIHNlbGYuYnJhY2tldGluZ1tzZWxmLmluZGV4YnJhY2tldCsxXVswXSA8IHNlbGYuaW5kZXhpbnJhd3RleHQ6CisgICAgICAgIHdoaWxlIChzZWxmLmluZGV4YnJhY2tldCA8IGxlbihzZWxmLmJyYWNrZXRpbmcpLTEgYW5kCisgICAgICAgICAgICAgICBzZWxmLmJyYWNrZXRpbmdbc2VsZi5pbmRleGJyYWNrZXQrMV1bMF0gPCBzZWxmLmluZGV4aW5yYXd0ZXh0KToKICAgICAgICAgICAgIHNlbGYuaW5kZXhicmFja2V0ICs9IDEKLSAgICAgICAgaWYgc2VsZi5pbmRleGJyYWNrZXQgPCBsZW4oc2VsZi5icmFja2V0aW5nKS0xIGFuZCBcCi0gICAgICAgICAgIHNlbGYuYnJhY2tldGluZ1tzZWxmLmluZGV4YnJhY2tldCsxXVswXSA9PSBzZWxmLmluZGV4aW5yYXd0ZXh0IGFuZCBcCi0gICAgICAgICAgIG5vdCBzZWxmLmlzb3BlbmVyW3NlbGYuaW5kZXhicmFja2V0KzFdOgorICAgICAgICBpZiAoc2VsZi5pbmRleGJyYWNrZXQgPCBsZW4oc2VsZi5icmFja2V0aW5nKS0xIGFuZAorICAgICAgICAgICAgc2VsZi5icmFja2V0aW5nW3NlbGYuaW5kZXhicmFja2V0KzFdWzBdID09IHNlbGYuaW5kZXhpbnJhd3RleHQgYW5kCisgICAgICAgICAgIG5vdCBzZWxmLmlzb3BlbmVyW3NlbGYuaW5kZXhicmFja2V0KzFdKToKICAgICAgICAgICAgIHNlbGYuaW5kZXhicmFja2V0ICs9IDEKIAogICAgIGRlZiBpc19pbl9zdHJpbmcoc2VsZik6Ci0gICAgICAgICIiIklzIHRoZSBpbmRleCBnaXZlbiB0byB0aGUgSHlwZXJQYXJzZXIgaXMgaW4gYSBzdHJpbmc/IiIiCisgICAgICAgICIiIklzIHRoZSBpbmRleCBnaXZlbiB0byB0aGUgSHlwZXJQYXJzZXIgaW4gYSBzdHJpbmc/IiIiCiAgICAgICAgICMgVGhlIGJyYWNrZXQgdG8gd2hpY2ggd2UgYmVsb25nIHNob3VsZCBiZSBhbiBvcGVuZXIuCiAgICAgICAgICMgSWYgaXQncyBhbiBvcGVuZXIsIGl0IGhhcyB0byBoYXZlIGEgY2hhcmFjdGVyLgotICAgICAgICByZXR1cm4gc2VsZi5pc29wZW5lcltzZWxmLmluZGV4YnJhY2tldF0gYW5kIFwKLSAgICAgICAgICAgICAgIHNlbGYucmF3dGV4dFtzZWxmLmJyYWNrZXRpbmdbc2VsZi5pbmRleGJyYWNrZXRdWzBdXSBpbiAoJyInLCAiJyIpCisgICAgICAgIHJldHVybiAoc2VsZi5pc29wZW5lcltzZWxmLmluZGV4YnJhY2tldF0gYW5kCisgICAgICAgICAgICAgICAgc2VsZi5yYXd0ZXh0W3NlbGYuYnJhY2tldGluZ1tzZWxmLmluZGV4YnJhY2tldF1bMF1dCisgICAgICAgICAgICAgICAgaW4gKCciJywgIiciKSkKIAogICAgIGRlZiBpc19pbl9jb2RlKHNlbGYpOgotICAgICAgICAiIiJJcyB0aGUgaW5kZXggZ2l2ZW4gdG8gdGhlIEh5cGVyUGFyc2VyIGlzIGluIGEgbm9ybWFsIGNvZGU/IiIiCi0gICAgICAgIHJldHVybiBub3Qgc2VsZi5pc29wZW5lcltzZWxmLmluZGV4YnJhY2tldF0gb3IgXAotICAgICAgICAgICAgICAgc2VsZi5yYXd0ZXh0W3NlbGYuYnJhY2tldGluZ1tzZWxmLmluZGV4YnJhY2tldF1bMF1dIG5vdCBpbiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCcjJywgJyInLCAiJyIpCisgICAgICAgICIiIklzIHRoZSBpbmRleCBnaXZlbiB0byB0aGUgSHlwZXJQYXJzZXIgaW4gbm9ybWFsIGNvZGU/IiIiCisgICAgICAgIHJldHVybiAobm90IHNlbGYuaXNvcGVuZXJbc2VsZi5pbmRleGJyYWNrZXRdIG9yCisgICAgICAgICAgICAgICAgc2VsZi5yYXd0ZXh0W3NlbGYuYnJhY2tldGluZ1tzZWxmLmluZGV4YnJhY2tldF1bMF1dCisgICAgICAgICAgICAgICAgbm90IGluICgnIycsICciJywgIiciKSkKIAogICAgIGRlZiBnZXRfc3Vycm91bmRpbmdfYnJhY2tldHMoc2VsZiwgb3BlbmVycz0nKFt7JywgbXVzdGNsb3NlPUZhbHNlKToKLSAgICAgICAgIiIiSWYgdGhlIGluZGV4IGdpdmVuIHRvIHRoZSBIeXBlclBhcnNlciBpcyBzdXJyb3VuZGVkIGJ5IGEgYnJhY2tldAotICAgICAgICBkZWZpbmVkIGluIG9wZW5lcnMgKG9yIGF0IGxlYXN0IGhhcyBvbmUgYmVmb3JlIGl0KSwgcmV0dXJuIHRoZQotICAgICAgICBpbmRpY2VzIG9mIHRoZSBvcGVuaW5nIGJyYWNrZXQgYW5kIHRoZSBjbG9zaW5nIGJyYWNrZXQgKG9yIHRoZQotICAgICAgICBlbmQgb2YgbGluZSwgd2hpY2hldmVyIGNvbWVzIGZpcnN0KS4KLSAgICAgICAgSWYgaXQgaXMgbm90IHN1cnJvdW5kZWQgYnkgYnJhY2tldHMsIG9yIHRoZSBlbmQgb2YgbGluZSBjb21lcyBiZWZvcmUKLSAgICAgICAgdGhlIGNsb3NpbmcgYnJhY2tldCBhbmQgbXVzdGNsb3NlIGlzIFRydWUsIHJldHVybnMgTm9uZS4KKyAgICAgICAgIiIiUmV0dXJuIGJyYWNrZXQgaW5kZXhlcyBvciBOb25lLgorCisgICAgICAgIElmIHRoZSBpbmRleCBnaXZlbiB0byB0aGUgSHlwZXJQYXJzZXIgaXMgc3Vycm91bmRlZCBieSBhCisgICAgICAgIGJyYWNrZXQgZGVmaW5lZCBpbiBvcGVuZXJzIChvciBhdCBsZWFzdCBoYXMgb25lIGJlZm9yZSBpdCksCisgICAgICAgIHJldHVybiB0aGUgaW5kaWNlcyBvZiB0aGUgb3BlbmluZyBicmFja2V0IGFuZCB0aGUgY2xvc2luZworICAgICAgICBicmFja2V0IChvciB0aGUgZW5kIG9mIGxpbmUsIHdoaWNoZXZlciBjb21lcyBmaXJzdCkuCisKKyAgICAgICAgSWYgaXQgaXMgbm90IHN1cnJvdW5kZWQgYnkgYnJhY2tldHMsIG9yIHRoZSBlbmQgb2YgbGluZSBjb21lcworICAgICAgICBiZWZvcmUgdGhlIGNsb3NpbmcgYnJhY2tldCBhbmQgbXVzdGNsb3NlIGlzIFRydWUsIHJldHVybnMgTm9uZS4KICAgICAgICAgIiIiCisKICAgICAgICAgYnJhY2tldGluZ2xldmVsID0gc2VsZi5icmFja2V0aW5nW3NlbGYuaW5kZXhicmFja2V0XVsxXQogICAgICAgICBiZWZvcmUgPSBzZWxmLmluZGV4YnJhY2tldAotICAgICAgICB3aGlsZSBub3Qgc2VsZi5pc29wZW5lcltiZWZvcmVdIG9yIFwKLSAgICAgICAgICAgICAgc2VsZi5yYXd0ZXh0W3NlbGYuYnJhY2tldGluZ1tiZWZvcmVdWzBdXSBub3QgaW4gb3BlbmVycyBvciBcCi0gICAgICAgICAgICAgIHNlbGYuYnJhY2tldGluZ1tiZWZvcmVdWzFdID4gYnJhY2tldGluZ2xldmVsOgorICAgICAgICB3aGlsZSAobm90IHNlbGYuaXNvcGVuZXJbYmVmb3JlXSBvcgorICAgICAgICAgICAgICBzZWxmLnJhd3RleHRbc2VsZi5icmFja2V0aW5nW2JlZm9yZV1bMF1dIG5vdCBpbiBvcGVuZXJzIG9yCisgICAgICAgICAgICAgIHNlbGYuYnJhY2tldGluZ1tiZWZvcmVdWzFdID4gYnJhY2tldGluZ2xldmVsKToKICAgICAgICAgICAgIGJlZm9yZSAtPSAxCiAgICAgICAgICAgICBpZiBiZWZvcmUgPCAwOgogICAgICAgICAgICAgICAgIHJldHVybiBOb25lCiAgICAgICAgICAgICBicmFja2V0aW5nbGV2ZWwgPSBtaW4oYnJhY2tldGluZ2xldmVsLCBzZWxmLmJyYWNrZXRpbmdbYmVmb3JlXVsxXSkKICAgICAgICAgYWZ0ZXIgPSBzZWxmLmluZGV4YnJhY2tldCArIDEKLSAgICAgICAgd2hpbGUgYWZ0ZXIgPCBsZW4oc2VsZi5icmFja2V0aW5nKSBhbmQgXAotICAgICAgICAgICAgICBzZWxmLmJyYWNrZXRpbmdbYWZ0ZXJdWzFdID49IGJyYWNrZXRpbmdsZXZlbDoKKyAgICAgICAgd2hpbGUgKGFmdGVyIDwgbGVuKHNlbGYuYnJhY2tldGluZykgYW5kCisgICAgICAgICAgICAgIHNlbGYuYnJhY2tldGluZ1thZnRlcl1bMV0gPj0gYnJhY2tldGluZ2xldmVsKToKICAgICAgICAgICAgIGFmdGVyICs9IDEKIAogICAgICAgICBiZWZvcmVpbmRleCA9IHNlbGYudGV4dC5pbmRleCgiJXMtJWRjIiAlCiAgICAgICAgICAgICAoc2VsZi5zdG9wYXRpbmRleCwgbGVuKHNlbGYucmF3dGV4dCktc2VsZi5icmFja2V0aW5nW2JlZm9yZV1bMF0pKQotICAgICAgICBpZiBhZnRlciA+PSBsZW4oc2VsZi5icmFja2V0aW5nKSBvciBcCi0gICAgICAgICAgIHNlbGYuYnJhY2tldGluZ1thZnRlcl1bMF0gPiBsZW4oc2VsZi5yYXd0ZXh0KToKKyAgICAgICAgaWYgKGFmdGVyID49IGxlbihzZWxmLmJyYWNrZXRpbmcpIG9yCisgICAgICAgICAgIHNlbGYuYnJhY2tldGluZ1thZnRlcl1bMF0gPiBsZW4oc2VsZi5yYXd0ZXh0KSk6CiAgICAgICAgICAgICBpZiBtdXN0Y2xvc2U6CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKICAgICAgICAgICAgIGFmdGVyaW5kZXggPSBzZWxmLnN0b3BhdGluZGV4CiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAjIFdlIGFyZSBhZnRlciBhIHJlYWwgY2hhciwgc28gaXQgaXMgYSAnKScgYW5kIHdlIGdpdmUgdGhlIGluZGV4Ci0gICAgICAgICAgICAjIGJlZm9yZSBpdC4KLSAgICAgICAgICAgIGFmdGVyaW5kZXggPSBzZWxmLnRleHQuaW5kZXgoIiVzLSVkYyIgJQotICAgICAgICAgICAgICAgIChzZWxmLnN0b3BhdGluZGV4LAorICAgICAgICAgICAgIyBXZSBhcmUgYWZ0ZXIgYSByZWFsIGNoYXIsIHNvIGl0IGlzIGEgJyknIGFuZCB3ZSBnaXZlIHRoZQorICAgICAgICAgICAgIyBpbmRleCBiZWZvcmUgaXQuCisgICAgICAgICAgICBhZnRlcmluZGV4ID0gc2VsZi50ZXh0LmluZGV4KAorICAgICAgICAgICAgICAgICIlcy0lZGMiICUgKHNlbGYuc3RvcGF0aW5kZXgsCiAgICAgICAgICAgICAgICAgIGxlbihzZWxmLnJhd3RleHQpLShzZWxmLmJyYWNrZXRpbmdbYWZ0ZXJdWzBdLTEpKSkKIAogICAgICAgICByZXR1cm4gYmVmb3JlaW5kZXgsIGFmdGVyaW5kZXgKIAotICAgICMgVGhpcyBzdHJpbmcgaW5jbHVkZXMgYWxsIGNoYXJzIHRoYXQgbWF5IGJlIGluIGEgd2hpdGUgc3BhY2UKLSAgICBfd2hpdGVzcGFjZV9jaGFycyA9ICIgXHRcblxcIgotICAgICMgVGhpcyBzdHJpbmcgaW5jbHVkZXMgYWxsIGNoYXJzIHRoYXQgbWF5IGJlIGluIGFuIGlkZW50aWZpZXIKLSAgICBfaWRfY2hhcnMgPSBzdHJpbmcuYXNjaWlfbGV0dGVycyArIHN0cmluZy5kaWdpdHMgKyAiXyIKLSAgICAjIFRoaXMgc3RyaW5nIGluY2x1ZGVzIGFsbCBjaGFycyB0aGF0IG1heSBiZSB0aGUgZmlyc3QgY2hhciBvZiBhbiBpZGVudGlmaWVyCi0gICAgX2lkX2ZpcnN0X2NoYXJzID0gc3RyaW5nLmFzY2lpX2xldHRlcnMgKyAiXyIKKyAgICAjIHRoZSBzZXQgb2YgYnVpbHQtaW4gaWRlbnRpZmllcnMgd2hpY2ggYXJlIGFsc28ga2V5d29yZHMsCisgICAgIyBpLmUuIGtleXdvcmQuaXNrZXl3b3JkKCkgcmV0dXJucyBUcnVlIGZvciB0aGVtCisgICAgX0lEX0tFWVdPUkRTID0gZnJvemVuc2V0KHsiVHJ1ZSIsICJGYWxzZSIsICJOb25lIn0pCiAKLSAgICAjIEdpdmVuIGEgc3RyaW5nIGFuZCBwb3MsIHJldHVybiB0aGUgbnVtYmVyIG9mIGNoYXJzIGluIHRoZSBpZGVudGlmaWVyCi0gICAgIyB3aGljaCBlbmRzIGF0IHBvcywgb3IgMCBpZiB0aGVyZSBpcyBubyBzdWNoIG9uZS4gU2F2ZWQgd29yZHMgYXJlIG5vdAotICAgICMgaWRlbnRpZmllcnMuCi0gICAgZGVmIF9lYXRfaWRlbnRpZmllcihzZWxmLCBzdHIsIGxpbWl0LCBwb3MpOgorICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfZWF0X2lkZW50aWZpZXIoY2xzLCBzdHIsIGxpbWl0LCBwb3MpOgorICAgICAgICAiIiJHaXZlbiBhIHN0cmluZyBhbmQgcG9zLCByZXR1cm4gdGhlIG51bWJlciBvZiBjaGFycyBpbiB0aGUKKyAgICAgICAgaWRlbnRpZmllciB3aGljaCBlbmRzIGF0IHBvcywgb3IgMCBpZiB0aGVyZSBpcyBubyBzdWNoIG9uZS4KKworICAgICAgICBUaGlzIGlnbm9yZXMgbm9uLWlkZW50aWZpZXIgZXl3b3JkcyBhcmUgbm90IGlkZW50aWZpZXJzLgorICAgICAgICAiIiIKKyAgICAgICAgaXNfYXNjaWlfaWRfY2hhciA9IF9JU19BU0NJSV9JRF9DSEFSCisKKyAgICAgICAgIyBTdGFydCBhdCB0aGUgZW5kIChwb3MpIGFuZCB3b3JrIGJhY2t3YXJkcy4KICAgICAgICAgaSA9IHBvcwotICAgICAgICB3aGlsZSBpID4gbGltaXQgYW5kIHN0cltpLTFdIGluIHNlbGYuX2lkX2NoYXJzOgorCisgICAgICAgICMgR28gYmFja3dhcmRzIGFzIGxvbmcgYXMgdGhlIGNoYXJhY3RlcnMgYXJlIHZhbGlkIEFTQ0lJCisgICAgICAgICMgaWRlbnRpZmllciBjaGFyYWN0ZXJzLiBUaGlzIGlzIGFuIG9wdGltaXphdGlvbiwgc2luY2UgaXQKKyAgICAgICAgIyBpcyBmYXN0ZXIgaW4gdGhlIGNvbW1vbiBjYXNlIHdoZXJlIG1vc3Qgb2YgdGhlIGNoYXJhY3RlcnMKKyAgICAgICAgIyBhcmUgQVNDSUkuCisgICAgICAgIHdoaWxlIGkgPiBsaW1pdCBhbmQgKAorICAgICAgICAgICAgICAgIG9yZChzdHJbaSAtIDFdKSA8IDEyOCBhbmQKKyAgICAgICAgICAgICAgICBpc19hc2NpaV9pZF9jaGFyW29yZChzdHJbaSAtIDFdKV0KKyAgICAgICAgKToKICAgICAgICAgICAgIGkgLT0gMQotICAgICAgICBpZiBpIDwgcG9zIGFuZCAoc3RyW2ldIG5vdCBpbiBzZWxmLl9pZF9maXJzdF9jaGFycyBvciBcCi0gICAgICAgICAgICAgICAgICAgICAgICBrZXl3b3JkLmlza2V5d29yZChzdHJbaTpwb3NdKSk6Ci0gICAgICAgICAgICBpID0gcG9zCisKKyAgICAgICAgIyBJZiB0aGUgYWJvdmUgbG9vcCBlbmRlZCBkdWUgdG8gcmVhY2hpbmcgYSBub24tQVNDSUkKKyAgICAgICAgIyBjaGFyYWN0ZXIsIGNvbnRpbnVlIGdvaW5nIGJhY2t3YXJkcyB1c2luZyB0aGUgbW9zdCBnZW5lcmljCisgICAgICAgICMgdGVzdCBmb3Igd2hldGhlciBhIHN0cmluZyBjb250YWlucyBvbmx5IHZhbGlkIGlkZW50aWZpZXIKKyAgICAgICAgIyBjaGFyYWN0ZXJzLgorICAgICAgICBpZiBpID4gbGltaXQgYW5kIG9yZChzdHJbaSAtIDFdKSA+PSAxMjg6CisgICAgICAgICAgICB3aGlsZSBpIC0gNCA+PSBsaW1pdCBhbmQgKCdhJyArIHN0cltpIC0gNDpwb3NdKS5pc2lkZW50aWZpZXIoKToKKyAgICAgICAgICAgICAgICBpIC09IDQKKyAgICAgICAgICAgIGlmIGkgLSAyID49IGxpbWl0IGFuZCAoJ2EnICsgc3RyW2kgLSAyOnBvc10pLmlzaWRlbnRpZmllcigpOgorICAgICAgICAgICAgICAgIGkgLT0gMgorICAgICAgICAgICAgaWYgaSAtIDEgPj0gbGltaXQgYW5kICgnYScgKyBzdHJbaSAtIDE6cG9zXSkuaXNpZGVudGlmaWVyKCk6CisgICAgICAgICAgICAgICAgaSAtPSAxCisKKyAgICAgICAgICAgICMgVGhlIGlkZW50aWZpZXIgY2FuZGlkYXRlIHN0YXJ0cyBoZXJlLiBJZiBpdCBpc24ndCBhIHZhbGlkCisgICAgICAgICAgICAjIGlkZW50aWZpZXIsIGRvbid0IGVhdCBhbnl0aGluZy4gQXQgdGhpcyBwb2ludCB0aGF0IGlzIG9ubHkKKyAgICAgICAgICAgICMgcG9zc2libGUgaWYgdGhlIGZpcnN0IGNoYXJhY3RlciBpc24ndCBhIHZhbGlkIGZpcnN0CisgICAgICAgICAgICAjIGNoYXJhY3RlciBmb3IgYW4gaWRlbnRpZmllci4KKyAgICAgICAgICAgIGlmIG5vdCBzdHJbaTpwb3NdLmlzaWRlbnRpZmllcigpOgorICAgICAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgIGVsaWYgaSA8IHBvczoKKyAgICAgICAgICAgICMgQWxsIGNoYXJhY3RlcnMgaW4gc3RyW2k6cG9zXSBhcmUgdmFsaWQgQVNDSUkgaWRlbnRpZmllcgorICAgICAgICAgICAgIyBjaGFyYWN0ZXJzLCBzbyBpdCBpcyBlbm91Z2ggdG8gY2hlY2sgdGhhdCB0aGUgZmlyc3QgaXMKKyAgICAgICAgICAgICMgdmFsaWQgYXMgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBhbiBpZGVudGlmaWVyLgorICAgICAgICAgICAgaWYgbm90IF9JU19BU0NJSV9JRF9GSVJTVF9DSEFSW29yZChzdHJbaV0pXToKKyAgICAgICAgICAgICAgICByZXR1cm4gMAorCisgICAgICAgICMgQWxsIGtleXdvcmRzIGFyZSB2YWxpZCBpZGVudGlmaWVycywgYnV0IHNob3VsZCBub3QgYmUKKyAgICAgICAgIyBjb25zaWRlcmVkIGlkZW50aWZpZXJzIGhlcmUsIGV4Y2VwdCBmb3IgVHJ1ZSwgRmFsc2UgYW5kIE5vbmUuCisgICAgICAgIGlmIGkgPCBwb3MgYW5kICgKKyAgICAgICAgICAgICAgICBpc2tleXdvcmQoc3RyW2k6cG9zXSkgYW5kCisgICAgICAgICAgICAgICAgc3RyW2k6cG9zXSBub3QgaW4gY2xzLl9JRF9LRVlXT1JEUworICAgICAgICApOgorICAgICAgICAgICAgcmV0dXJuIDAKKwogICAgICAgICByZXR1cm4gcG9zIC0gaQogCisgICAgIyBUaGlzIHN0cmluZyBpbmNsdWRlcyBhbGwgY2hhcnMgdGhhdCBtYXkgYmUgaW4gYSB3aGl0ZSBzcGFjZQorICAgIF93aGl0ZXNwYWNlX2NoYXJzID0gIiBcdFxuXFwiCisKICAgICBkZWYgZ2V0X2V4cHJlc3Npb24oc2VsZik6Ci0gICAgICAgICIiIlJldHVybiBhIHN0cmluZyB3aXRoIHRoZSBQeXRob24gZXhwcmVzc2lvbiB3aGljaCBlbmRzIGF0IHRoZSBnaXZlbgotICAgICAgICBpbmRleCwgd2hpY2ggaXMgZW1wdHkgaWYgdGhlcmUgaXMgbm8gcmVhbCBvbmUuCisgICAgICAgICIiIlJldHVybiBhIHN0cmluZyB3aXRoIHRoZSBQeXRob24gZXhwcmVzc2lvbiB3aGljaCBlbmRzIGF0IHRoZQorICAgICAgICBnaXZlbiBpbmRleCwgd2hpY2ggaXMgZW1wdHkgaWYgdGhlcmUgaXMgbm8gcmVhbCBvbmUuCiAgICAgICAgICIiIgogICAgICAgICBpZiBub3Qgc2VsZi5pc19pbl9jb2RlKCk6Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJnZXRfZXhwcmVzc2lvbiBzaG91bGQgb25seSBiZSBjYWxsZWQgaWYgaW5kZXggIlwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImlzIGluc2lkZSBhIGNvZGUuIikKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImdldF9leHByZXNzaW9uIHNob3VsZCBvbmx5IGJlIGNhbGxlZCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImlmIGluZGV4IGlzIGluc2lkZSBhIGNvZGUuIikKIAogICAgICAgICByYXd0ZXh0ID0gc2VsZi5yYXd0ZXh0CiAgICAgICAgIGJyYWNrZXRpbmcgPSBzZWxmLmJyYWNrZXRpbmcKQEAgLTE3NywyMCArMjM5LDIwIEBACiAgICAgICAgIHBvc3Rkb3RfcGhhc2UgPSBUcnVlCiAKICAgICAgICAgd2hpbGUgMToKLSAgICAgICAgICAgICMgRWF0IHdoaXRlc3BhY2VzLCBjb21tZW50cywgYW5kIGlmIHBvc3Rkb3RfcGhhc2UgaXMgRmFsc2UgLSBvbmUgZG90CisgICAgICAgICAgICAjIEVhdCB3aGl0ZXNwYWNlcywgY29tbWVudHMsIGFuZCBpZiBwb3N0ZG90X3BoYXNlIGlzIEZhbHNlIC0gYSBkb3QKICAgICAgICAgICAgIHdoaWxlIDE6CiAgICAgICAgICAgICAgICAgaWYgcG9zPmJyY2tfbGltaXQgYW5kIHJhd3RleHRbcG9zLTFdIGluIHNlbGYuX3doaXRlc3BhY2VfY2hhcnM6CiAgICAgICAgICAgICAgICAgICAgICMgRWF0IGEgd2hpdGVzcGFjZQogICAgICAgICAgICAgICAgICAgICBwb3MgLT0gMQotICAgICAgICAgICAgICAgIGVsaWYgbm90IHBvc3Rkb3RfcGhhc2UgYW5kIFwKLSAgICAgICAgICAgICAgICAgICAgIHBvcyA+IGJyY2tfbGltaXQgYW5kIHJhd3RleHRbcG9zLTFdID09ICcuJzoKKyAgICAgICAgICAgICAgICBlbGlmIChub3QgcG9zdGRvdF9waGFzZSBhbmQKKyAgICAgICAgICAgICAgICAgICAgICBwb3MgPiBicmNrX2xpbWl0IGFuZCByYXd0ZXh0W3Bvcy0xXSA9PSAnLicpOgogICAgICAgICAgICAgICAgICAgICAjIEVhdCBhIGRvdAogICAgICAgICAgICAgICAgICAgICBwb3MgLT0gMQogICAgICAgICAgICAgICAgICAgICBwb3N0ZG90X3BoYXNlID0gVHJ1ZQotICAgICAgICAgICAgICAgICMgVGhlIG5leHQgbGluZSB3aWxsIGZhaWwgaWYgd2UgYXJlICppbnNpZGUqIGEgY29tbWVudCwgYnV0IHdlCi0gICAgICAgICAgICAgICAgIyBzaG91bGRuJ3QgYmUuCi0gICAgICAgICAgICAgICAgZWxpZiBwb3MgPT0gYnJja19saW1pdCBhbmQgYnJja19pbmRleCA+IDAgYW5kIFwKLSAgICAgICAgICAgICAgICAgICAgIHJhd3RleHRbYnJhY2tldGluZ1ticmNrX2luZGV4LTFdWzBdXSA9PSAnIyc6CisgICAgICAgICAgICAgICAgIyBUaGUgbmV4dCBsaW5lIHdpbGwgZmFpbCBpZiB3ZSBhcmUgKmluc2lkZSogYSBjb21tZW50LAorICAgICAgICAgICAgICAgICMgYnV0IHdlIHNob3VsZG4ndCBiZS4KKyAgICAgICAgICAgICAgICBlbGlmIChwb3MgPT0gYnJja19saW1pdCBhbmQgYnJja19pbmRleCA+IDAgYW5kCisgICAgICAgICAgICAgICAgICAgICAgcmF3dGV4dFticmFja2V0aW5nW2JyY2tfaW5kZXgtMV1bMF1dID09ICcjJyk6CiAgICAgICAgICAgICAgICAgICAgICMgRWF0IGEgY29tbWVudAogICAgICAgICAgICAgICAgICAgICBicmNrX2luZGV4IC09IDIKICAgICAgICAgICAgICAgICAgICAgYnJja19saW1pdCA9IGJyYWNrZXRpbmdbYnJja19pbmRleF1bMF0KQEAgLTIwMCw4ICsyNjIsOCBAQAogICAgICAgICAgICAgICAgICAgICBicmVhawogCiAgICAgICAgICAgICBpZiBub3QgcG9zdGRvdF9waGFzZToKLSAgICAgICAgICAgICAgICAjIFdlIGRpZG4ndCBmaW5kIGEgZG90LCBzbyB0aGUgZXhwcmVzc2lvbiBlbmQgYXQgdGhlIGxhc3QKLSAgICAgICAgICAgICAgICAjIGlkZW50aWZpZXIgcG9zLgorICAgICAgICAgICAgICAgICMgV2UgZGlkbid0IGZpbmQgYSBkb3QsIHNvIHRoZSBleHByZXNzaW9uIGVuZCBhdCB0aGUKKyAgICAgICAgICAgICAgICAjIGxhc3QgaWRlbnRpZmllciBwb3MuCiAgICAgICAgICAgICAgICAgYnJlYWsKIAogICAgICAgICAgICAgcmV0ID0gc2VsZi5fZWF0X2lkZW50aWZpZXIocmF3dGV4dCwgYnJja19saW1pdCwgcG9zKQpAQCAtMjA5LDEzICsyNzEsMTMgQEAKICAgICAgICAgICAgICAgICAjIFRoZXJlIGlzIGFuIGlkZW50aWZpZXIgdG8gZWF0CiAgICAgICAgICAgICAgICAgcG9zID0gcG9zIC0gcmV0CiAgICAgICAgICAgICAgICAgbGFzdF9pZGVudGlmaWVyX3BvcyA9IHBvcwotICAgICAgICAgICAgICAgICMgTm93LCBpbiBvcmRlciB0byBjb250aW51ZSB0aGUgc2VhcmNoLCB3ZSBtdXN0IGZpbmQgYSBkb3QuCisgICAgICAgICAgICAgICAgIyBOb3csIHRvIGNvbnRpbnVlIHRoZSBzZWFyY2gsIHdlIG11c3QgZmluZCBhIGRvdC4KICAgICAgICAgICAgICAgICBwb3N0ZG90X3BoYXNlID0gRmFsc2UKICAgICAgICAgICAgICAgICAjICh0aGUgbG9vcCBjb250aW51ZXMgbm93KQogCiAgICAgICAgICAgICBlbGlmIHBvcyA9PSBicmNrX2xpbWl0OgotICAgICAgICAgICAgICAgICMgV2UgYXJlIGF0IGEgYnJhY2tldGluZyBsaW1pdC4gSWYgaXQgaXMgYSBjbG9zaW5nIGJyYWNrZXQsCi0gICAgICAgICAgICAgICAgIyBlYXQgdGhlIGJyYWNrZXQsIG90aGVyd2lzZSwgc3RvcCB0aGUgc2VhcmNoLgorICAgICAgICAgICAgICAgICMgV2UgYXJlIGF0IGEgYnJhY2tldGluZyBsaW1pdC4gSWYgaXQgaXMgYSBjbG9zaW5nCisgICAgICAgICAgICAgICAgIyBicmFja2V0LCBlYXQgdGhlIGJyYWNrZXQsIG90aGVyd2lzZSwgc3RvcCB0aGUgc2VhcmNoLgogICAgICAgICAgICAgICAgIGxldmVsID0gYnJhY2tldGluZ1ticmNrX2luZGV4XVsxXQogICAgICAgICAgICAgICAgIHdoaWxlIGJyY2tfaW5kZXggPiAwIGFuZCBicmFja2V0aW5nW2JyY2tfaW5kZXgtMV1bMV0gPiBsZXZlbDoKICAgICAgICAgICAgICAgICAgICAgYnJja19pbmRleCAtPSAxCkBAIC0yNDQsMyArMzA2LDggQEAKICAgICAgICAgICAgICAgICBicmVhawogCiAgICAgICAgIHJldHVybiByYXd0ZXh0W2xhc3RfaWRlbnRpZmllcl9wb3M6c2VsZi5pbmRleGlucmF3dGV4dF0KKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIGltcG9ydCB1bml0dGVzdAorICAgIHVuaXR0ZXN0Lm1haW4oJ2lkbGVsaWIuaWRsZV90ZXN0LnRlc3RfaHlwZXJwYXJzZXInLCB2ZXJib3NpdHk9MikKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL0lPQmluZGluZy5weSBiL0xpYi9pZGxlbGliL0lPQmluZGluZy5weQppbmRleCBmMDA4YjQ2Li41ZWM5ZDU0IDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9JT0JpbmRpbmcucHkKKysrIGIvTGliL2lkbGVsaWIvSU9CaW5kaW5nLnB5CkBAIC0xLDE4ICsxLDE2IEBACitpbXBvcnQgY29kZWNzCitmcm9tIGNvZGVjcyBpbXBvcnQgQk9NX1VURjgKIGltcG9ydCBvcwotaW1wb3J0IHR5cGVzCitpbXBvcnQgcmUKIGltcG9ydCBzaGxleAogaW1wb3J0IHN5cwotaW1wb3J0IGNvZGVjcwogaW1wb3J0IHRlbXBmaWxlCisKIGltcG9ydCB0a2ludGVyLmZpbGVkaWFsb2cgYXMgdGtGaWxlRGlhbG9nCiBpbXBvcnQgdGtpbnRlci5tZXNzYWdlYm94IGFzIHRrTWVzc2FnZUJveAotaW1wb3J0IHJlCi1mcm9tIHRraW50ZXIgaW1wb3J0ICoKIGZyb20gdGtpbnRlci5zaW1wbGVkaWFsb2cgaW1wb3J0IGFza3N0cmluZwogCi1mcm9tIGlkbGVsaWIuY29uZmlnSGFuZGxlciBpbXBvcnQgaWRsZUNvbmYKIAotZnJvbSBjb2RlY3MgaW1wb3J0IEJPTV9VVEY4CiAKICMgVHJ5IHNldHRpbmcgdGhlIGxvY2FsZSwgc28gdGhhdCB3ZSBjYW4gZmluZCBvdXQKICMgd2hhdCBlbmNvZGluZyB0byB1c2UKQEAgLTIxOCw3ICsyMTYsNyBAQAogICAgICAgICAgICAgICAgIGYuc2VlaygwKQogICAgICAgICAgICAgICAgIGJ5dGVzID0gZi5yZWFkKCkKICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgbXNnOgotICAgICAgICAgICAgdGtNZXNzYWdlQm94LnNob3dlcnJvcigiSS9PIEVycm9yIiwgc3RyKG1zZyksIG1hc3Rlcj1zZWxmLnRleHQpCisgICAgICAgICAgICB0a01lc3NhZ2VCb3guc2hvd2Vycm9yKCJJL08gRXJyb3IiLCBzdHIobXNnKSwgcGFyZW50PXNlbGYudGV4dCkKICAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICBjaGFycywgY29udmVydGVkID0gc2VsZi5fZGVjb2RlKHR3b19saW5lcywgYnl0ZXMpCiAgICAgICAgIGlmIGNoYXJzIGlzIE5vbmU6CkBAIC0yNjcsNyArMjY1LDcgQEAKICAgICAgICAgICAgICAgICB0aXRsZT0iRXJyb3IgbG9hZGluZyB0aGUgZmlsZSIsCiAgICAgICAgICAgICAgICAgbWVzc2FnZT0iVGhlIGVuY29kaW5nICclcycgaXMgbm90IGtub3duIHRvIHRoaXMgUHl0aG9uICJcCiAgICAgICAgICAgICAgICAgImluc3RhbGxhdGlvbi4gVGhlIGZpbGUgbWF5IG5vdCBkaXNwbGF5IGNvcnJlY3RseSIgJSBuYW1lLAotICAgICAgICAgICAgICAgIG1hc3RlciA9IHNlbGYudGV4dCkKKyAgICAgICAgICAgICAgICBwYXJlbnQgPSBzZWxmLnRleHQpCiAgICAgICAgICAgICBlbmMgPSBOb25lCiAgICAgICAgIGV4Y2VwdCBVbmljb2RlRGVjb2RlRXJyb3I6CiAgICAgICAgICAgICByZXR1cm4gTm9uZSwgRmFsc2UKQEAgLTMyMiw3ICszMjAsNyBAQAogICAgICAgICAgICAgICAgICAgdGl0bGU9IlNhdmUgT24gQ2xvc2UiLAogICAgICAgICAgICAgICAgICAgbWVzc2FnZT1tZXNzYWdlLAogICAgICAgICAgICAgICAgICAgZGVmYXVsdD10a01lc3NhZ2VCb3guWUVTLAotICAgICAgICAgICAgICAgICAgbWFzdGVyPXNlbGYudGV4dCkKKyAgICAgICAgICAgICAgICAgIHBhcmVudD1zZWxmLnRleHQpCiAgICAgICAgIGlmIGNvbmZpcm06CiAgICAgICAgICAgICByZXBseSA9ICJ5ZXMiCiAgICAgICAgICAgICBzZWxmLnNhdmUoTm9uZSkKQEAgLTM4Miw3ICszODAsNyBAQAogICAgICAgICAgICAgcmV0dXJuIFRydWUKICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgbXNnOgogICAgICAgICAgICAgdGtNZXNzYWdlQm94LnNob3dlcnJvcigiSS9PIEVycm9yIiwgc3RyKG1zZyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc3Rlcj1zZWxmLnRleHQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudD1zZWxmLnRleHQpCiAgICAgICAgICAgICByZXR1cm4gRmFsc2UKIAogICAgIGRlZiBlbmNvZGUoc2VsZiwgY2hhcnMpOgpAQCAtNDE5LDcgKzQxNyw3IEBACiAgICAgICAgIHRrTWVzc2FnZUJveC5zaG93ZXJyb3IoCiAgICAgICAgICAgICAiSS9PIEVycm9yIiwKICAgICAgICAgICAgICIlcy5cblNhdmluZyBhcyBVVEYtOCIgJSBmYWlsZWQsCi0gICAgICAgICAgICBtYXN0ZXIgPSBzZWxmLnRleHQpCisgICAgICAgICAgICBwYXJlbnQgPSBzZWxmLnRleHQpCiAgICAgICAgICMgRmFsbGJhY2s6IHNhdmUgYXMgVVRGLTgsIHdpdGggQk9NIC0gaWdub3JpbmcgdGhlIGluY29ycmVjdAogICAgICAgICAjIGRlY2xhcmVkIGVuY29kaW5nCiAgICAgICAgIHJldHVybiBCT01fVVRGOCArIGNoYXJzLmVuY29kZSgidXRmLTgiKQpAQCAtNDM0LDcgKzQzMiw3IEBACiAgICAgICAgICAgICAgICAgICB0aXRsZT0iUHJpbnQiLAogICAgICAgICAgICAgICAgICAgbWVzc2FnZT0iUHJpbnQgdG8gRGVmYXVsdCBQcmludGVyIiwKICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9dGtNZXNzYWdlQm94Lk9LLAotICAgICAgICAgICAgICAgICAgbWFzdGVyPXNlbGYudGV4dCkKKyAgICAgICAgICAgICAgICAgIHBhcmVudD1zZWxmLnRleHQpCiAgICAgICAgIGlmIG5vdCBjb25maXJtOgogICAgICAgICAgICAgc2VsZi50ZXh0LmZvY3VzX3NldCgpCiAgICAgICAgICAgICByZXR1cm4gImJyZWFrIgpAQCAtNDcxLDEwICs0NjksMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMgKyBvdXRwdXQKICAgICAgICAgICAgIGlmIG91dHB1dDoKICAgICAgICAgICAgICAgICBvdXRwdXQgPSAiUHJpbnRpbmcgY29tbWFuZDogJXNcbiIgJSByZXByKGNvbW1hbmQpICsgb3V0cHV0Ci0gICAgICAgICAgICAgICAgdGtNZXNzYWdlQm94LnNob3dlcnJvcigiUHJpbnQgc3RhdHVzIiwgb3V0cHV0LCBtYXN0ZXI9c2VsZi50ZXh0KQorICAgICAgICAgICAgICAgIHRrTWVzc2FnZUJveC5zaG93ZXJyb3IoIlByaW50IHN0YXR1cyIsIG91dHB1dCwgcGFyZW50PXNlbGYudGV4dCkKICAgICAgICAgZWxzZTogICNubyBwcmludGluZyBmb3IgdGhpcyBwbGF0Zm9ybQogICAgICAgICAgICAgbWVzc2FnZSA9ICJQcmludGluZyBpcyBub3QgZW5hYmxlZCBmb3IgdGhpcyBwbGF0Zm9ybTogJXMiICUgcGxhdGZvcm0KLSAgICAgICAgICAgIHRrTWVzc2FnZUJveC5zaG93aW5mbygiUHJpbnQgc3RhdHVzIiwgbWVzc2FnZSwgbWFzdGVyPXNlbGYudGV4dCkKKyAgICAgICAgICAgIHRrTWVzc2FnZUJveC5zaG93aW5mbygiUHJpbnQgc3RhdHVzIiwgbWVzc2FnZSwgcGFyZW50PXNlbGYudGV4dCkKICAgICAgICAgaWYgdGVtcGZpbGVuYW1lOgogICAgICAgICAgICAgb3MudW5saW5rKHRlbXBmaWxlbmFtZSkKICAgICAgICAgcmV0dXJuICJicmVhayIKQEAgLTQ5Myw3ICs0OTEsNyBAQAogICAgIGRlZiBhc2tvcGVuZmlsZShzZWxmKToKICAgICAgICAgZGlyLCBiYXNlID0gc2VsZi5kZWZhdWx0ZmlsZW5hbWUoIm9wZW4iKQogICAgICAgICBpZiBub3Qgc2VsZi5vcGVuZGlhbG9nOgotICAgICAgICAgICAgc2VsZi5vcGVuZGlhbG9nID0gdGtGaWxlRGlhbG9nLk9wZW4obWFzdGVyPXNlbGYudGV4dCwKKyAgICAgICAgICAgIHNlbGYub3BlbmRpYWxvZyA9IHRrRmlsZURpYWxvZy5PcGVuKHBhcmVudD1zZWxmLnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxldHlwZXM9c2VsZi5maWxldHlwZXMpCiAgICAgICAgIGZpbGVuYW1lID0gc2VsZi5vcGVuZGlhbG9nLnNob3coaW5pdGlhbGRpcj1kaXIsIGluaXRpYWxmaWxlPWJhc2UpCiAgICAgICAgIHJldHVybiBmaWxlbmFtZQpAQCAtNTA2LDcgKzUwNCw3IEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgcHdkID0gb3MuZ2V0Y3dkKCkKLSAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIHB3ZCA9ICIiCiAgICAgICAgICAgICByZXR1cm4gcHdkLCAiIgogCkBAIC01MTQsNyArNTEyLDcgQEAKICAgICAgICAgZGlyLCBiYXNlID0gc2VsZi5kZWZhdWx0ZmlsZW5hbWUoInNhdmUiKQogICAgICAgICBpZiBub3Qgc2VsZi5zYXZlZGlhbG9nOgogICAgICAgICAgICAgc2VsZi5zYXZlZGlhbG9nID0gdGtGaWxlRGlhbG9nLlNhdmVBcygKLSAgICAgICAgICAgICAgICAgICAgbWFzdGVyPXNlbGYudGV4dCwKKyAgICAgICAgICAgICAgICAgICAgcGFyZW50PXNlbGYudGV4dCwKICAgICAgICAgICAgICAgICAgICAgZmlsZXR5cGVzPXNlbGYuZmlsZXR5cGVzLAogICAgICAgICAgICAgICAgICAgICBkZWZhdWx0ZXh0ZW5zaW9uPXNlbGYuZGVmYXVsdGV4dGVuc2lvbikKICAgICAgICAgZmlsZW5hbWUgPSBzZWxmLnNhdmVkaWFsb2cuc2hvdyhpbml0aWFsZGlyPWRpciwgaW5pdGlhbGZpbGU9YmFzZSkKQEAgLTUyNSwxNiArNTIzLDIwIEBACiAgICAgICAgIGlmIHNlbGYuZWRpdHdpbi5mbGlzdDoKICAgICAgICAgICAgIHNlbGYuZWRpdHdpbi51cGRhdGVfcmVjZW50X2ZpbGVzX2xpc3QoZmlsZW5hbWUpCiAKLWRlZiB0ZXN0KCk6Ci0gICAgcm9vdCA9IFRrKCkKK2RlZiBfaW9fYmluZGluZyhwYXJlbnQpOiAgIyBodGVzdCAjCisgICAgZnJvbSB0a2ludGVyIGltcG9ydCBUb3BsZXZlbCwgVGV4dAorICAgIGZyb20gaWRsZWxpYi5jb25maWdIYW5kbGVyIGltcG9ydCBpZGxlQ29uZgorCisgICAgcm9vdCA9IFRvcGxldmVsKHBhcmVudCkKKyAgICByb290LnRpdGxlKCJUZXN0IElPQmluZGluZyIpCisgICAgd2lkdGgsIGhlaWdodCwgeCwgeSA9IGxpc3QobWFwKGludCwgcmUuc3BsaXQoJ1t4K10nLCBwYXJlbnQuZ2VvbWV0cnkoKSkpKQorICAgIHJvb3QuZ2VvbWV0cnkoIislZCslZCIlKHgsIHkgKyAxNTApKQogICAgIGNsYXNzIE15RWRpdFdpbjoKICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRleHQpOgogICAgICAgICAgICAgc2VsZi50ZXh0ID0gdGV4dAogICAgICAgICAgICAgc2VsZi5mbGlzdCA9IE5vbmUKICAgICAgICAgICAgIHNlbGYudGV4dC5iaW5kKCI8Q29udHJvbC1vPiIsIHNlbGYub3BlbikKICAgICAgICAgICAgIHNlbGYudGV4dC5iaW5kKCI8Q29udHJvbC1zPiIsIHNlbGYuc2F2ZSkKLSAgICAgICAgICAgIHNlbGYudGV4dC5iaW5kKCI8QWx0LXM+Iiwgc2VsZi5zYXZlX2FzKQotICAgICAgICAgICAgc2VsZi50ZXh0LmJpbmQoIjxBbHQtej4iLCBzZWxmLnNhdmVfYV9jb3B5KQogICAgICAgICBkZWYgZ2V0X3NhdmVkKHNlbGYpOiByZXR1cm4gMAogICAgICAgICBkZWYgc2V0X3NhdmVkKHNlbGYsIGZsYWcpOiBwYXNzCiAgICAgICAgIGRlZiByZXNldF91bmRvKHNlbGYpOiBwYXNzCkBAIC01NDIsMTYgKzU0NCwxMyBAQAogICAgICAgICAgICAgc2VsZi50ZXh0LmV2ZW50X2dlbmVyYXRlKCI8PG9wZW4td2luZG93LWZyb20tZmlsZT4+IikKICAgICAgICAgZGVmIHNhdmUoc2VsZiwgZXZlbnQpOgogICAgICAgICAgICAgc2VsZi50ZXh0LmV2ZW50X2dlbmVyYXRlKCI8PHNhdmUtd2luZG93Pj4iKQotICAgICAgICBkZWYgc2F2ZV9hcyhzZWxmLCBldmVudCk6Ci0gICAgICAgICAgICBzZWxmLnRleHQuZXZlbnRfZ2VuZXJhdGUoIjw8c2F2ZS13aW5kb3ctYXMtZmlsZT4+IikKLSAgICAgICAgZGVmIHNhdmVfYV9jb3B5KHNlbGYsIGV2ZW50KToKLSAgICAgICAgICAgIHNlbGYudGV4dC5ldmVudF9nZW5lcmF0ZSgiPDxzYXZlLWNvcHktb2Ytd2luZG93LWFzLWZpbGU+PiIpCisKICAgICB0ZXh0ID0gVGV4dChyb290KQogICAgIHRleHQucGFjaygpCiAgICAgdGV4dC5mb2N1c19zZXQoKQogICAgIGVkaXR3aW4gPSBNeUVkaXRXaW4odGV4dCkKLSAgICBpbyA9IElPQmluZGluZyhlZGl0d2luKQotICAgIHJvb3QubWFpbmxvb3AoKQorICAgIElPQmluZGluZyhlZGl0d2luKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3QoKQorICAgIGZyb20gaWRsZWxpYi5pZGxlX3Rlc3QuaHRlc3QgaW1wb3J0IHJ1bgorICAgIHJ1bihfaW9fYmluZGluZykKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL0lkbGVIaXN0b3J5LnB5IGIvTGliL2lkbGVsaWIvSWRsZUhpc3RvcnkucHkKaW5kZXggZDZjYjE2Mi4uMDc4YWYyOSAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvSWRsZUhpc3RvcnkucHkKKysrIGIvTGliL2lkbGVsaWIvSWRsZUhpc3RvcnkucHkKQEAgLTEwMCw3ICsxMDAsNSBAQAogICAgICAgICBzZWxmLnByZWZpeCA9IE5vbmUKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKLSAgICBzdXBwb3J0LnVzZV9yZXNvdXJjZXMgPSBbJ2d1aSddCiAgICAgZnJvbSB1bml0dGVzdCBpbXBvcnQgbWFpbgogICAgIG1haW4oJ2lkbGVsaWIuaWRsZV90ZXN0LnRlc3RfaWRsZWhpc3RvcnknLCB2ZXJib3NpdHk9MiwgZXhpdD1GYWxzZSkKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL011bHRpQ2FsbC5weSBiL0xpYi9pZGxlbGliL011bHRpQ2FsbC5weQppbmRleCA2NDcyOWVhLi4yNTFhODRkIDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9NdWx0aUNhbGwucHkKKysrIGIvTGliL2lkbGVsaWIvTXVsdGlDYWxsLnB5CkBAIC0zMiw3ICszMiw2IEBACiBpbXBvcnQgc3lzCiBpbXBvcnQgcmUKIGltcG9ydCB0a2ludGVyCi1mcm9tIGlkbGVsaWIgaW1wb3J0IG1hY29zeFN1cHBvcnQKIAogIyB0aGUgZXZlbnQgdHlwZSBjb25zdGFudHMsIHdoaWNoIGRlZmluZSB0aGUgbWVhbmluZyBvZiBtY190eXBlCiBNQ19LRVlQUkVTUz0wOyBNQ19LRVlSRUxFQVNFPTE7IE1DX0JVVFRPTlBSRVNTPTI7IE1DX0JVVFRPTlJFTEVBU0U9MzsKQEAgLTQ1LDcgKzQ0LDcgQEAKIE1DX09QVElPTiA9IDE8PDY7IE1DX0NPTU1BTkQgPSAxPDw3CiAKICMgZGVmaW5lIHRoZSBsaXN0IG9mIG1vZGlmaWVycywgdG8gYmUgdXNlZCBpbiBjb21wbGV4IGV2ZW50IHR5cGVzLgotaWYgbWFjb3N4U3VwcG9ydC5ydW5uaW5nQXNPU1hBcHAoKToKK2lmIHN5cy5wbGF0Zm9ybSA9PSAiZGFyd2luIjoKICAgICBfbW9kaWZpZXJzID0gKCgiU2hpZnQiLCksICgiQ29udHJvbCIsKSwgKCJPcHRpb24iLCksICgiQ29tbWFuZCIsKSkKICAgICBfbW9kaWZpZXJfbWFza3MgPSAoTUNfU0hJRlQsIE1DX0NPTlRST0wsIE1DX09QVElPTiwgTUNfQ09NTUFORCkKIGVsc2U6CkBAIC01Nyw2ICs1NiwxMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBudW1iZXIgaW4gcmFuZ2UobGVuKF9tb2RpZmllcnMpKQogICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBuYW1lIGluIF9tb2RpZmllcnNbbnVtYmVyXV0pCiAKKyMgSW4gMy40LCBpZiBubyBzaGVsbCB3aW5kb3cgaXMgZXZlciBvcGVuLCB0aGUgdW5kZXJseWluZyBUayB3aWRnZXQgaXMKKyMgZGVzdHJveWVkIGJlZm9yZSAuX19kZWxfXyBtZXRob2RzIGhlcmUgYXJlIGNhbGxlZC4gIFRoZSBmb2xsb3dpbmcKKyMgaXMgdXNlZCB0byBzZWxlY3RpdmVseSBpZ25vcmUgc2h1dGRvd24gZXhjZXB0aW9ucyB0byBhdm9pZAorIyAnRXhjZXB0aW9uIGlnbm9yZWQnIG1lc3NhZ2VzLiAgU2VlIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUyMDE2NworQVBQTElDQVRJT05fR09ORSA9ICJhcHBsaWNhdGlvbiBoYXMgYmVlbiBkZXN0cm95ZWQiCisKICMgQSBiaW5kZXIgaXMgYSBjbGFzcyB3aGljaCBiaW5kcyBmdW5jdGlvbnMgdG8gb25lIHR5cGUgb2YgZXZlbnQuIEl0IGhhcyB0d28KICMgbWV0aG9kczogYmluZCBhbmQgdW5iaW5kLCB3aGljaCBnZXQgYSBmdW5jdGlvbiBhbmQgYSBwYXJzZWQgc2VxdWVuY2UsIGFzCiAjIHJldHVybmVkIGJ5IF9wYXJzZV9zZXF1ZW5jZSgpLiBUaGVyZSBhcmUgdHdvIHR5cGVzIG9mIGJpbmRlcnM6CkBAIC05OCw3ICsxMDMsMTIgQEAKIAogICAgIGRlZiBfX2RlbF9fKHNlbGYpOgogICAgICAgICBpZiBzZWxmLmhhbmRsZXJpZDoKLSAgICAgICAgICAgIHNlbGYud2lkZ2V0LnVuYmluZChzZWxmLndpZGdldGluc3QsIHNlbGYuc2VxdWVuY2UsIHNlbGYuaGFuZGxlcmlkKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYud2lkZ2V0LnVuYmluZChzZWxmLndpZGdldGluc3QsIHNlbGYuc2VxdWVuY2UsCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZXJpZCkKKyAgICAgICAgICAgIGV4Y2VwdCB0a2ludGVyLlRjbEVycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgaWYgbm90IEFQUExJQ0FUSU9OX0dPTkUgaW4gZS5hcmdzWzBdOgorICAgICAgICAgICAgICAgICAgICByYWlzZQogCiAjIEFuIGludCBpbiByYW5nZSgxIDw8IGxlbihfbW9kaWZpZXJzKSkgcmVwcmVzZW50cyBhIGNvbWJpbmF0aW9uIG9mIG1vZGlmaWVycwogIyAoaWYgdGhlIGxlYXN0IHNpZ25pZmljZW50IGJpdCBpcyBvbiwgX21vZGlmaWVyc1swXSBpcyBvbiwgYW5kIHNvIG9uKS4KQEAgLTIyNyw3ICsyMzcsMTEgQEAKIAogICAgIGRlZiBfX2RlbF9fKHNlbGYpOgogICAgICAgICBmb3Igc2VxLCBpZCBpbiBzZWxmLmhhbmRsZXJpZHM6Ci0gICAgICAgICAgICBzZWxmLndpZGdldC51bmJpbmQoc2VsZi53aWRnZXRpbnN0LCBzZXEsIGlkKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYud2lkZ2V0LnVuYmluZChzZWxmLndpZGdldGluc3QsIHNlcSwgaWQpCisgICAgICAgICAgICBleGNlcHQgdGtpbnRlci5UY2xFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIGlmIG5vdCBBUFBMSUNBVElPTl9HT05FIGluIGUuYXJnc1swXToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKIAogIyBkZWZpbmUgdGhlIGxpc3Qgb2YgZXZlbnQgdHlwZXMgdG8gYmUgaGFuZGxlZCBieSBNdWx0aUV2ZW50LiB0aGUgb3JkZXIgaXMKICMgY29tcGF0aWJsZSB3aXRoIHRoZSBkZWZpbml0aW9uIG9mIGV2ZW50IHR5cGUgY29uc3RhbnRzLgpAQCAtMzkwLDE1ICs0MDQsMjEgQEAKICAgICAgICAgICAgICAgICBmdW5jLCB0cmlwbGV0cyA9IHNlbGYuX19ldmVudGluZm9bdmlydHVhbF0KICAgICAgICAgICAgICAgICBpZiBmdW5jOgogICAgICAgICAgICAgICAgICAgICBmb3IgdHJpcGxldCBpbiB0cmlwbGV0czoKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX19iaW5kZXJzW3RyaXBsZXRbMV1dLnVuYmluZCh0cmlwbGV0LCBmdW5jKQotCisgICAgICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fX2JpbmRlcnNbdHJpcGxldFsxXV0udW5iaW5kKHRyaXBsZXQsIGZ1bmMpCisgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgdGtpbnRlci5UY2xFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBBUFBMSUNBVElPTl9HT05FIGluIGUuYXJnc1swXToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKIAogICAgIF9tdWx0aWNhbGxfZGljdFt3aWRnZXRdID0gTXVsdGlDYWxsCiAgICAgcmV0dXJuIE11bHRpQ2FsbAogCi1pZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgICMgVGVzdAorCitkZWYgX211bHRpX2NhbGwocGFyZW50KToKICAgICByb290ID0gdGtpbnRlci5UaygpCisgICAgcm9vdC50aXRsZSgiVGVzdCBNdWx0aUNhbGwiKQorICAgIHdpZHRoLCBoZWlnaHQsIHgsIHkgPSBsaXN0KG1hcChpbnQsIHJlLnNwbGl0KCdbeCtdJywgcGFyZW50Lmdlb21ldHJ5KCkpKSkKKyAgICByb290Lmdlb21ldHJ5KCIrJWQrJWQiJSh4LCB5ICsgMTUwKSkKICAgICB0ZXh0ID0gTXVsdGlDYWxsQ3JlYXRvcih0a2ludGVyLlRleHQpKHJvb3QpCiAgICAgdGV4dC5wYWNrKCkKICAgICBkZWYgYmluZHNlcShzZXEsIG49WzBdKToKQEAgLTQxNCw4ICs0MzQsMTMgQEAKICAgICBiaW5kc2VxKCI8QWx0LUNvbnRyb2wtS2V5LWE+IikKICAgICBiaW5kc2VxKCI8S2V5LWI+IikKICAgICBiaW5kc2VxKCI8Q29udHJvbC1CdXR0b24tMT4iKQorICAgIGJpbmRzZXEoIjxCdXR0b24tMj4iKQogICAgIGJpbmRzZXEoIjxBbHQtQnV0dG9uLTE+IikKICAgICBiaW5kc2VxKCI8Rm9jdXNPdXQ+IikKICAgICBiaW5kc2VxKCI8RW50ZXI+IikKICAgICBiaW5kc2VxKCI8TGVhdmU+IikKICAgICByb290Lm1haW5sb29wKCkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBmcm9tIGlkbGVsaWIuaWRsZV90ZXN0Lmh0ZXN0IGltcG9ydCBydW4KKyAgICBydW4oX211bHRpX2NhbGwpCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9NdWx0aVN0YXR1c0Jhci5weSBiL0xpYi9pZGxlbGliL011bHRpU3RhdHVzQmFyLnB5CmluZGV4IDRmYzhkY2YuLmU4MmJhOWEgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL011bHRpU3RhdHVzQmFyLnB5CisrKyBiL0xpYi9pZGxlbGliL011bHRpU3RhdHVzQmFyLnB5CkBAIC04LDI1ICs4LDQwIEBACiAgICAgICAgIEZyYW1lLl9faW5pdF9fKHNlbGYsIG1hc3RlciwgKiprdykKICAgICAgICAgc2VsZi5sYWJlbHMgPSB7fQogCi0gICAgZGVmIHNldF9sYWJlbChzZWxmLCBuYW1lLCB0ZXh0PScnLCBzaWRlPUxFRlQpOgorICAgIGRlZiBzZXRfbGFiZWwoc2VsZiwgbmFtZSwgdGV4dD0nJywgc2lkZT1MRUZULCB3aWR0aD0wKToKICAgICAgICAgaWYgbmFtZSBub3QgaW4gc2VsZi5sYWJlbHM6Ci0gICAgICAgICAgICBsYWJlbCA9IExhYmVsKHNlbGYsIGJkPTEsIHJlbGllZj1TVU5LRU4sIGFuY2hvcj1XKQotICAgICAgICAgICAgbGFiZWwucGFjayhzaWRlPXNpZGUpCisgICAgICAgICAgICBsYWJlbCA9IExhYmVsKHNlbGYsIGJvcmRlcndpZHRoPTAsIGFuY2hvcj1XKQorICAgICAgICAgICAgbGFiZWwucGFjayhzaWRlPXNpZGUsIHBhZHk9MCwgcGFkeD00KQogICAgICAgICAgICAgc2VsZi5sYWJlbHNbbmFtZV0gPSBsYWJlbAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgbGFiZWwgPSBzZWxmLmxhYmVsc1tuYW1lXQorICAgICAgICBpZiB3aWR0aCAhPSAwOgorICAgICAgICAgICAgbGFiZWwuY29uZmlnKHdpZHRoPXdpZHRoKQogICAgICAgICBsYWJlbC5jb25maWcodGV4dD10ZXh0KQogCi1kZWYgX3Rlc3QoKToKLSAgICBiID0gRnJhbWUoKQotICAgIGMgPSBUZXh0KGIpCi0gICAgYy5wYWNrKHNpZGU9VE9QKQotICAgIGEgPSBNdWx0aVN0YXR1c0JhcihiKQotICAgIGEuc2V0X2xhYmVsKCJvbmUiLCAiaGVsbG8iKQotICAgIGEuc2V0X2xhYmVsKCJ0d28iLCAid29ybGQiKQotICAgIGEucGFjayhzaWRlPUJPVFRPTSwgZmlsbD1YKQotICAgIGIucGFjaygpCi0gICAgYi5tYWlubG9vcCgpCitkZWYgX211bHRpc3RhdHVzX2JhcihwYXJlbnQpOgorICAgIHJvb3QgPSBUaygpCisgICAgd2lkdGgsIGhlaWdodCwgeCwgeSA9IGxpc3QobWFwKGludCwgcmUuc3BsaXQoJ1t4K10nLCBwYXJlbnQuZ2VvbWV0cnkoKSkpKQorICAgIHJvb3QuZ2VvbWV0cnkoIislZCslZCIgJSh4LCB5ICsgMTUwKSkKKyAgICByb290LnRpdGxlKCJUZXN0IG11bHRpc3RhdHVzIGJhciIpCisgICAgZnJhbWUgPSBGcmFtZShyb290KQorICAgIHRleHQgPSBUZXh0KGZyYW1lKQorICAgIHRleHQucGFjaygpCisgICAgbXNiID0gTXVsdGlTdGF0dXNCYXIoZnJhbWUpCisgICAgbXNiLnNldF9sYWJlbCgib25lIiwgImhlbGxvIikKKyAgICBtc2Iuc2V0X2xhYmVsKCJ0d28iLCAid29ybGQiKQorICAgIG1zYi5wYWNrKHNpZGU9Qk9UVE9NLCBmaWxsPVgpCisKKyAgICBkZWYgY2hhbmdlKCk6CisgICAgICAgIG1zYi5zZXRfbGFiZWwoIm9uZSIsICJmb28iKQorICAgICAgICBtc2Iuc2V0X2xhYmVsKCJ0d28iLCAiYmFyIikKKworICAgIGJ1dHRvbiA9IEJ1dHRvbihyb290LCB0ZXh0PSJVcGRhdGUgc3RhdHVzIiwgY29tbWFuZD1jaGFuZ2UpCisgICAgYnV0dG9uLnBhY2soc2lkZT1CT1RUT00pCisgICAgZnJhbWUucGFjaygpCisgICAgZnJhbWUubWFpbmxvb3AoKQorICAgIHJvb3QubWFpbmxvb3AoKQogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIF90ZXN0KCkKKyAgICBmcm9tIGlkbGVsaWIuaWRsZV90ZXN0Lmh0ZXN0IGltcG9ydCBydW4KKyAgICBydW4oX211bHRpc3RhdHVzX2JhcikKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL05FV1MudHh0IGIvTGliL2lkbGVsaWIvTkVXUy50eHQKaW5kZXggNjM4OGQwZC4uOGI4ZTEwYiAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvTkVXUy50eHQKKysrIGIvTGliL2lkbGVsaWIvTkVXUy50eHQKQEAgLTEsNzQgKzEsMjE4IEBACi1XaGF0J3MgTmV3IGluIElETEUgMy4zLjQ/CitXaGF0J3MgTmV3IGluIElkbGUgMy40LjQ/CiA9PT09PT09PT09PT09PT09PT09PT09PT09CisqUmVsZWFzZSBkYXRlOiAyMDE1LTEyLTIwKgogCi0tIElzc3VlICMxNzM5MDogQWRkIFB5dGhvbiB2ZXJzaW9uIHRvIElkbGUgZWRpdG9yIHdpbmRvdyB0aXRsZSBiYXIuCi0gIE9yaWdpbmFsIHBhdGNoZXMgYnkgRWRtb25kIEJ1cm5ldHQgYW5kIEtlbnQgSm9obnNvbi4KKy0gSXNzdWUgMTUzNDg6IFN0b3AgdGhlIGRlYnVnZ2VyIGVuZ2luZSAobm9ybWFsbHkgaW4gYSB1c2VyIHByb2Nlc3MpCisgIGJlZm9yZSBjbG9zaW5nIHRoZSBkZWJ1Z2dlciB3aW5kb3cgKHJ1bm5pbmcgaW4gdGhlIElETEUgcHJvY2VzcykuCisgIFRoaXMgcHJldmVudHMgdGhlIFJ1bnRpbWVFcnJvcnMgdGhhdCB3ZXJlIGJlaW5nIGNhdWdodCBhbmQgaWdub3JlZC4KIAotLSBJc3N1ZSAjMTg5NjA6IElETEUgbm93IGlnbm9yZXMgdGhlIHNvdXJjZSBlbmNvZGluZyBkZWNsYXJhdGlvbiBvbiB0aGUgc2Vjb25kCi0gIGxpbmUgaWYgdGhlIGZpcnN0IGxpbmUgY29udGFpbnMgYW55dGhpbmcgZXhjZXB0IGEgY29tbWVudC4KKy0gSXNzdWUgIzI0NDU1OiBQcmV2ZW50IElETEUgZnJvbSBoYW5naW5nIHdoZW4gYSkgY2xvc2luZyB0aGUgc2hlbGwgd2hpbGUgdGhlCisgIGRlYnVnZ2VyIGlzIGFjdGl2ZSAoMTUzNDcpOyBiKSBjbG9zaW5nIHRoZSBkZWJ1Z2dlciB3aXRoIHRoZSBbWF0gYnV0dG9uCisgICgxNTM0OCk7IGFuZCBjKSBhY3RpdmF0aW5nIHRoZSBkZWJ1Z2dlciB3aGVuIGFscmVhZHkgYWN0aXZlICgyNDQ1NSkuCisgIFRoZSBwYXRjaCBieSBNYXJrIFJvc2VtYW4gZG9lcyB0aGlzIGJ5IG1ha2luZyB0d28gY2hhbmdlcy4KKyAgMS4gU3VzcGVuZCBhbmQgcmVzdW1lIHRoZSBndWkuaW50ZXJhY3Rpb24gbWV0aG9kIHdpdGggdGhlIHRjbCB2d2FpdAorICBtZWNoYW5pc20gaW50ZW5kZWQgZm9yIHRoaXMgcHVycG9zZSAoaW5zdGVhZCBvZiByb290Lm1haW5sb29wICYgLnF1aXQpLgorICAyLiBJbiBndWkucnVuLCBhbGxvdyBhbnkgZXhpc3RpbmcgaW50ZXJhY3Rpb24gdG8gdGVybWluYXRlIGZpcnN0LgogCi0tIElzc3VlICMyMDA1ODogc3lzLnN0ZGluLnJlYWRsaW5lKCkgaW4gSURMRSBub3cgYWx3YXlzIHJldHVybnMgb25seSBvbmUgbGluZS4KKy0gQ2hhbmdlICdUaGUgcHJvZ3JhbScgdG8gJ1lvdXIgcHJvZ3JhbScgaW4gYW4gSURMRSAna2lsbCBwcm9ncmFtPycgbWVzc2FnZQorICB0byBtYWtlIGl0IGNsZWFyZXIgdGhhdCB0aGUgcHJvZ3JhbSByZWZlcnJlZCB0byBpcyB0aGUgY3VycmVudGx5IHJ1bm5pbmcKKyAgdXNlciBwcm9ncmFtLCBub3QgSURMRSBpdHNlbGYuCiAKLS0gSXNzdWUgIzE5NDgxOiBwcmludCgpIG9mIHN0cmluZyBzdWJjbGFzcyBpbnN0YW5jZSBpbiBJRExFIG5vIGxvbmdlciBoYW5ncy4KKy0gSXNzdWUgIzI0NzUwOiBJbXByb3ZlIHRoZSBhcHBlYXJhbmNlIG9mIHRoZSBJRExFIGVkaXRvciB3aW5kb3cgc3RhdHVzIGJhci4KKyAgUGF0Y2ggYnkgTWFyayBSb3NlbWFuLgogCi0tIElzc3VlICMxODI3MDogUHJldmVudCBwb3NzaWJsZSBJRExFIEF0dHJpYnV0ZUVycm9yIG9uIE9TIFggd2hlbiBubyBpbml0aWFsCi0gIHNoZWxsIHdpbmRvdyBpcyBwcmVzZW50LgorLSBJc3N1ZSAjMjUzMTM6IENoYW5nZSB0aGUgaGFuZGxpbmcgb2YgbmV3IGJ1aWx0LWluIHRleHQgY29sb3IgdGhlbWVzIHRvIGJldHRlcgorICBhZGRyZXNzIHRoZSBjb21wYXRpYmlsaXR5IHByb2JsZW0gaW50cm9kdWNlZCBieSB0aGUgYWRkaXRpb24gb2YgSURMRSBEYXJrLgorICBDb25zaXN0ZW50bHkgdXNlIHRoZSByZXZpc2VkIGlkbGVDb25mLkN1cnJlbnRUaGVtZSBldmVyeXdoZXJlIGluIGlkbGVsaWIuCisKKy0gSXNzdWUgIzI0NzgyOiBFeHRlbnNpb24gY29uZmlndXJhdGlvbiBpcyBub3cgYSB0YWIgaW4gdGhlIElETEUgUHJlZmVyZW5jZXMKKyAgZGlhbG9nIHJhdGhlciB0aGFuIGEgc2VwYXJhdGUgZGlhbG9nLiAgIFRoZSBmb3JtZXIgdGFicyBhcmUgbm93IGEgc29ydGVkCisgIGxpc3QuICBQYXRjaCBieSBNYXJrIFJvc2VtYW4uCisKKy0gSXNzdWUgIzIyNzI2OiBSZS1hY3RpdmF0ZSB0aGUgY29uZmlnIGRpYWxvZyBoZWxwIGJ1dHRvbiB3aXRoIHNvbWUgY29udGVudAorICBhYm91dCB0aGUgb3RoZXIgYnV0dG9ucyBhbmQgdGhlIG5ldyBJRExFIERhcmsgdGhlbWUuCisKKy0gSXNzdWUgIzI0ODIwOiBJRExFIG5vdyBoYXMgYW4gJ0lETEUgRGFyaycgYnVpbHQtaW4gdGV4dCBjb2xvciB0aGVtZS4KKyAgSXQgaXMgbW9yZSBvciBsZXNzIElETEUgQ2xhc3NpYyBpbnZlcnRlZCwgd2l0aCBhIGNvYmFsdCBibHVlIGJhY2tncm91bmQuCisgIFN0cmluZ3MsIGNvbW1lbnRzLCBrZXl3b3JkcywgLi4uIGFyZSBzdGlsbCBncmVlbiwgcmVkLCBvcmFuZ2UsIC4uLiAuCisgIFRvIHVzZSBpdCB3aXRoIElETEVzIHJlbGVhc2VkIGJlZm9yZSBOb3ZlbWJlciAyMDE1LCBoaXQgdGhlCisgICdTYXZlIGFzIE5ldyBDdXN0b20gVGhlbWUnIGJ1dHRvbiBhbmQgZW50ZXIgYSBuZXcgbmFtZSwKKyAgc3VjaCBhcyAnQ3VzdG9tIERhcmsnLiAgVGhlIGN1c3RvbSB0aGVtZSB3aWxsIHdvcmsgd2l0aCBhbnkgSURMRQorICByZWxlYXNlLCBhbmQgY2FuIGJlIG1vZGlmaWVkLgorCistIElzc3VlICMyNTIyNDogUkVBRE1FLnR4dCBpcyBub3cgYW4gaWRsZWxpYiBpbmRleCBmb3IgSURMRSBkZXZlbG9wZXJzIGFuZAorICBjdXJpb3VzIHVzZXJzLiAgVGhlIHByZXZpb3VzIHVzZXIgY29udGVudCBpcyBub3cgaW4gdGhlIElETEUgZG9jIGNoYXB0ZXIuCisgICdJRExFJyBub3cgbWVhbnMgJ0ludGVncmF0ZWQgRGV2ZWxvcG1lbnQgYW5kIExlYXJuaW5nIEVudmlyb25tZW50Jy4KKworLSBJc3N1ZSAjMjQ4MjA6IFVzZXJzIGNhbiBub3cgc2V0IGJyZWFrcG9pbnQgY29sb3JzIGluCisgIFNldHRpbmdzIC0+IEN1c3RvbSBIaWdobGlnaHRpbmcuICBPcmlnaW5hbCBwYXRjaCBieSBNYXJrIFJvc2VtYW4uCisKKy0gSXNzdWUgIzI0OTcyOiBJbmFjdGl2ZSBzZWxlY3Rpb24gYmFja2dyb3VuZCBub3cgbWF0Y2hlcyBhY3RpdmUgc2VsZWN0aW9uCisgIGJhY2tncm91bmQsIGFzIGNvbmZpZ3VyZWQgYnkgdXNlcnMsIG9uIGFsbCBzeXN0ZW1zLiAgRm91bmQgaXRlbXMgYXJlIG5vdworICBhbHdheXMgaGlnaGxpZ2h0ZWQgb24gV2luZG93cy4gIEluaXRpYWwgcGF0Y2ggYnkgTWFyayBSb3NlbWFuLgorCistIElzc3VlICMyNDU3MDogSWRsZTogbWFrZSBjYWxsdGlwIGFuZCBjb21wbGV0aW9uIGJveGVzIGFwcGVhciBvbiBNYWNzCisgIGFmZmVjdGVkIGJ5IGEgdGsgcmVncmVzc2lvbi4gIEluaXRpYWwgcGF0Y2ggYnkgTWFyayBSb3NlbWFuLgorCistIElzc3VlICMyNDk4ODogSWRsZSBTY3JvbGxlZExpc3QgY29udGV4dCBtZW51cyAodXNlZCBpbiBkZWJ1Z2dlcikKKyAgbm93IHdvcmsgb24gTWFjIEFxdWEuICBQYXRjaCBieSBNYXJrIFJvc2VtYW4uCisKKy0gSXNzdWUgIzI0ODAxOiBNYWtlIHJpZ2h0LWNsaWNrIGZvciBjb250ZXh0IG1lbnUgd29yayBvbiBNYWMgQXF1YS4KKyAgUGF0Y2ggYnkgTWFyayBSb3NlbWFuLgorCistIElzc3VlICMyNTE3MzogQXNzb2NpYXRlIHRraW50ZXIgbWVzc2FnZWJveGVzIHdpdGggYSBzcGVjaWZpYyB3aWRnZXQuCisgIEZvciBNYWMgT1NYLCBtYWtlIHRoZW0gYSAnc2hlZXQnLiAgUGF0Y2ggYnkgTWFyayBSb3NlbWFuLgorCistIElzc3VlICMyNTE5ODogRW5oYW5jZSB0aGUgaW5pdGlhbCBodG1sIHZpZXdlciBub3cgdXNlZCBmb3IgSWRsZSBIZWxwLgorICAqIFByb3Blcmx5IGluZGVudCBmaXhlZC1waXRjaCB0ZXh0IChwYXRjaCBieSBNYXJrIFJvc2VtYW4pLgorICAqIEdpdmUgY29kZSBzbmlwcGV0IGEgdmVyeSBTcGhpbngtbGlrZSBsaWdodCBibHVlaXNoLWdyYXkgYmFja2dyb3VuZC4KKyAgKiBSZS11c2UgaW5pdGlhbCB3aWR0aCBhbmQgaGVpZ2h0IHNldCBieSB1c2VycyBmb3Igc2hlbGwgYW5kIGVkaXRvci4KKyAgKiBXaGVuIHRoZSBUYWJsZSBvZiBDb250ZW50cyAoVE9DKSBtZW51IGlzIHVzZWQsIHB1dCB0aGUgc2VjdGlvbiBoZWFkZXIKKyAgYXQgdGhlIHRvcCBvZiB0aGUgc2NyZWVuLgorCistIElzc3VlICMyNTIyNTogQ29uZGVuc2UgYW5kIHJld3JpdGUgSWRsZSBkb2Mgc2VjdGlvbiBvbiB0ZXh0IGNvbG9ycy4KKworLSBJc3N1ZSAjMjE5OTU6IEV4cGxhaW4gc29tZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIElETEUgYW5kIGNvbnNvbGUgUHl0aG9uLgorCistIElzc3VlICMyMjgyMDogRXhwbGFpbiBuZWVkIGZvciAqcHJpbnQqIHdoZW4gcnVubmluZyBmaWxlIGZyb20gSWRsZSBlZGl0b3IuCisKKy0gSXNzdWUgIzI1MjI0OiBEb2M6IGF1Z21lbnQgSWRsZSBmZWF0dXJlIGxpc3QgYW5kIG5vLXN1YnByb2Nlc3Mgc2VjdGlvbi4KKworLSBJc3N1ZSAjMjUyMTk6IFVwZGF0ZSBkb2MgZm9yIElkbGUgY29tbWFuZCBsaW5lIG9wdGlvbnMuCisgIFNvbWUgd2VyZSBtaXNzaW5nIGFuZCBub3RlcyB3ZXJlIG5vdCBjb3JyZWN0LgorCistIElzc3VlICMyNDg2MTogTW9zdCBvZiBpZGxlbGliIGlzIHByaXZhdGUgYW5kIHN1YmplY3QgdG8gY2hhbmdlLgorICBVc2UgaWRsZWliLmlkbGUuKiB0byBzdGFydCBJZGxlLiBTZWUgaWRsZWxpYi5fX2luaXRfXy5fX2RvY19fLgorCistIElzc3VlICMyNTE5OTogSWRsZTogYWRkIHN5bmNocm9uaXphdGlvbiBjb21tZW50cyBmb3IgZnV0dXJlIG1haW50YWluZXJzLgorCistIElzc3VlICMxNjg5MzogUmVwbGFjZSBoZWxwLnR4dCB3aXRoIGhlbHAuaHRtbCBmb3IgSWRsZSBkb2MgZGlzcGxheS4KKyAgVGhlIG5ldyBpZGxlbGliL2hlbHAuaHRtbCBpcyByc3RyaXBwZWQgRG9jL2J1aWxkL2h0bWwvbGlicmFyeS9pZGxlLmh0bWwuCisgIEl0IGxvb2tzIGJldHRlciB0aGFuIGhlbHAudHh0IGFuZCB3aWxsIGJldHRlciBkb2N1bWVudCBJZGxlIGFzIHJlbGVhc2VkLgorICBUaGUgdGtpbnRlciBodG1sIHZpZXdlciB0aGF0IHdvcmtzIGZvciB0aGlzIGZpbGUgd2FzIHdyaXR0ZW4gYnkgTWFyayBSb3NlbWFuLgorICBUaGUgbm93IHVudXNlZCBFZGl0b3JXaW5kb3cuSGVscERpYWxvZyBjbGFzcyBhbmQgaGVsdC50eHQgZmlsZSBhcmUgZGVwcmVjYXRlZC4KKworLSBJc3N1ZSAjMjQxOTk6IERlcHJlY2F0ZSB1bnVzZWQgaWRsZWxpYi5pZGxldmVyIHdpdGggcG9zc2libGUgcmVtb3ZhbCBpbiAzLjYuCisKKy0gSXNzdWUgIzI0NzkwOiBSZW1vdmUgZXh0cmFuZW91cyBjb2RlICh3aGljaCBhbHNvIGNyZWF0ZSAyICYgMyBjb25mbGljdHMpLgorCistIElzc3VlICMyMzY3MjogQWxsb3cgSWRsZSB0byBlZGl0IGFuZCBydW4gZmlsZXMgd2l0aCBhc3RyYWwgY2hhcnMgaW4gbmFtZS4KKyAgUGF0Y2ggYnkgTW9oZCBTYW5hZCBaYWtpIFJpenZpLgorCistIElzc3VlIDI0NzQ1OiBJZGxlIGVkaXRvciBkZWZhdWx0IGZvbnQuIFN3aXRjaCBmcm9tIENvdXJpZXIgdG8KKyAgcGxhdGZvcm0tc2Vuc2l0aXZlIFRrRml4ZWRGb250LiAgVGhpcyBzaG91bGQgbm90IGFmZmVjdCBjdXJyZW50IGN1c3RvbWl6ZWQKKyAgZm9udCBzZWxlY3Rpb25zLiAgSWYgdGhlcmUgaXMgYSBwcm9ibGVtLCBlZGl0ICRIT01FLy5pZGxlcmMvY29uZmlnLW1haW4uY2ZnCisgIGFuZCByZW1vdmUgJ2ZvbnR4eHgnIGVudHJpZXMgZnJvbSBbRWRpdG9yIFdpbmRvd10uICBQYXRjaCBieSBNYXJrIFJvc2VtYW4uCisKKy0gSXNzdWUgIzIxMTkyOiBJZGxlIGVkaXRvci4gV2hlbiBhIGZpbGUgaXMgcnVuLCBwdXQgaXRzIG5hbWUgaW4gdGhlIHJlc3RhcnQgYmFyLgorICBEbyBub3QgcHJpbnQgZmFsc2UgcHJvbXB0cy4gT3JpZ2luYWwgcGF0Y2ggYnkgQWRuYW4gVW1lci4KKworLSBJc3N1ZSAjMTM4ODQ6IElkbGUgbWVudXMuIFJlbW92ZSB0ZWFyb2ZmIGxpbmVzLiBQYXRjaCBieSBSb2dlciBTZXJ3eS4KKworLSBJc3N1ZSAjMjMxODQ6IHJlbW92ZSB1bnVzZWQgbmFtZXMgYW5kIGltcG9ydHMgaW4gaWRsZWxpYi4KKyAgSW5pdGlhbCBwYXRjaCBieSBBbCBTd2VpZ2FydC4KIAogCi1XaGF0J3MgTmV3IGluIElETEUgMy4zLjM/CitXaGF0J3MgTmV3IGluIElkbGUgMy40LjM/CiA9PT09PT09PT09PT09PT09PT09PT09PT09CisqUmVsZWFzZSBkYXRlOiAyMDE1LTAyLTI1KgogCi0tIElzc3VlICMxODg3MzogSURMRSBub3cgZGV0ZWN0cyBQeXRob24gc291cmNlIGNvZGUgZW5jb2Rpbmcgb25seSBpbiBjb21tZW50Ci0gIGxpbmVzLgorLSBJc3N1ZSAjMjA1Nzc6IENvbmZpZ3VyYXRpb24gb2YgdGhlIG1heCBsaW5lIGxlbmd0aCBmb3IgdGhlIEZvcm1hdFBhcmFncmFwaAorICBleHRlbnNpb24gaGFzIGJlZW4gbW92ZWQgZnJvbSB0aGUgR2VuZXJhbCB0YWIgb2YgdGhlIElkbGUgcHJlZmVyZW5jZXMgZGlhbG9nCisgIHRvIHRoZSBGb3JtYXRQYXJhZ3JhcGggdGFiIG9mIHRoZSBDb25maWcgRXh0ZW5zaW9ucyBkaWFsb2cuCisgIFBhdGNoIGJ5IFRhbCBFaW5hdC4KIAotLSBJc3N1ZSAjMTg5ODg6IFRoZSAiVGFiIiBrZXkgbm93IHdvcmtzIHdoZW4gYSB3b3JkIGlzIGFscmVhZHkgYXV0b2NvbXBsZXRlZC4KKy0gSXNzdWUgIzE2ODkzOiBVcGRhdGUgSWRsZSBkb2MgY2hhcHRlciB0byBtYXRjaCBjdXJyZW50IElkbGUgYW5kIGFkZCBuZXcKKyAgaW5mb3JtYXRpb24uCiAKLS0gSXNzdWUgIzE4NDg5OiBBZGQgdGVzdHMgZm9yIFNlYXJjaEVuZ2luZS4gT3JpZ2luYWwgcGF0Y2ggYnkgUGhpbCBXZWJzdGVyLgorLSBJc3N1ZSAjMzA2ODogQWRkIElkbGUgZXh0ZW5zaW9uIGNvbmZpZ3VyYXRpb24gZGlhbG9nIHRvIE9wdGlvbnMgbWVudS4KKyAgQ2hhbmdlcyBhcmUgd3JpdHRlbiB0byBIT01FLy5pZGxlcmMvY29uZmlnLWV4dGVuc2lvbnMuY2ZnLgorICBPcmlnaW5hbCBwYXRjaCBieSBUYWwgRWluYXQuCiAKLS0gSXNzdWUgIzE4NDI5OiBGb3JtYXQgLyBGb3JtYXQgUGFyYWdyYXBoLCBub3cgd29ya3Mgd2hlbiBjb21tZW50IGJsb2NrcwotICBhcmUgc2VsZWN0ZWQuIEFzIHdpdGggdGV4dCBibG9ja3MsIHRoaXMgd29ya3MgYmVzdCB3aGVuIHRoZSBzZWxlY3Rpb24KLSAgb25seSBpbmNsdWRlcyBjb21wbGV0ZSBsaW5lcy4KKy0gSXNzdWUgIzE2MjMzOiBBIG1vZHVsZSBicm93c2VyIChGaWxlIDogQ2xhc3MgQnJvd3NlciwgQWx0K0MpIHJlcXVpcmVzIGEKKyAgZWRpdG9yIHdpbmRvdyB3aXRoIGEgZmlsZW5hbWUuICBXaGVuIENsYXNzIEJyb3dzZXIgaXMgcmVxdWVzdGVkIG90aGVyd2lzZSwKKyAgZnJvbSBhIHNoZWxsLCBvdXRwdXQgd2luZG93LCBvciAnVW50aXRsZWQnIGVkaXRvciwgSWRsZSBubyBsb25nZXIgZGlzcGxheXMKKyAgYW4gZXJyb3IgYm94LiAgSXQgbm93IHBvcHMgdXAgYW4gIE9wZW4gTW9kdWxlIGJveCAoQWx0K00pLiBJZiBhIHZhbGlkIG5hbWUKKyAgaXMgZW50ZXJlZCBhbmQgYSBtb2R1bGUgaXMgb3BlbmVkLCBhIGNvcnJlc3BvbmRpbmcgYnJvd3NlciBpcyBhbHNvIG9wZW5lZC4KIAotLSBJc3N1ZSAjMTgyMjY6IEFkZCBkb2NzdHJpbmdzIGFuZCB1bml0dGVzdHMgZm9yIEZvcm1hdFBhcmFncmFwaC5weS4KLSAgT3JpZ2luYWwgcGF0Y2hlcyBieSBUb2RkIFJvdml0byBhbmQgUGhpbCBXZWJzdGVyLgorLSBJc3N1ZSAjNDgzMjogU2F2ZSBBcyB0byB0eXBlIFB5dGhvbiBmaWxlcyBhdXRvbWF0aWNhbGx5IGFkZHMgLnB5IHRvIHRoZQorICBuYW1lIHlvdSBlbnRlciAoZXZlbiBpZiB5b3VyIHN5c3RlbSBkb2VzIG5vdCBkaXNwbGF5IGl0KS4gIFNvbWUgc3lzdGVtcworICBhdXRvbWF0aWNhbGx5IGFkZCAudHh0IHdoZW4gdHlwZSBpcyBUZXh0IGZpbGVzLgogCi0tIElzc3VlICMxODI3OTogRm9ybWF0IC0gU3RyaXAgdHJhaWxpbmcgd2hpdGVzcGFjZSBubyBsb25nZXIgbWFya3MgYSBmaWxlIGFzCi0gIGNoYW5nZWQgd2hlbiBpdCBoYXMgbm90IGJlZW4gY2hhbmdlZC4gVGhpcyBmaXggZm9sbG93ZWQgdGhlIGFkZGl0aW9uIG9mIGEKLSAgdGVzdCBmaWxlIG9yaWdpbmFsbHkgd3JpdHRlbiBieSBQaGlsIFdlYnN0ZXIgKHRoZSBpc3N1ZSdzIG1haW4gZ29hbCkuCistIElzc3VlICMyMTk4NjogQ29kZSBvYmplY3RzIGFyZSBub3Qgbm9ybWFsbHkgcGlja2xlZCBieSB0aGUgcGlja2xlIG1vZHVsZS4KKyAgVG8gbWF0Y2ggdGhpcywgdGhleSBhcmUgbm8gbG9uZ2VyIHBpY2tsZWQgd2hlbiBydW5uaW5nIHVuZGVyIElkbGUuCiAKLS0gSXNzdWUgIzcxMzY6IEluIHRoZSBJZGxlIEZpbGUgbWVudSwgIk5ldyBXaW5kb3ciIGlzIHJlbmFtZWQgIk5ldyBGaWxlIi4KLSAgUGF0Y2ggYnkgVGFsIEVpbmF0LCBSb2dldCBTZXJ3eSwgYW5kIFRvZGQgUm92aXRvLgotCi0tIFJlbW92ZSBkZWFkIGltcG9ydHMgb2YgaW1wLgotCi0tIElzc3VlICMxODE5NjogQXZvaWQgZGlzcGxheWluZyBzcHVyaW91cyBTeXN0ZW1FeGl0IHRyYWNlYmFja3MuCi0KLS0gSXNzdWUgIzU0OTI6IEF2b2lkIHRyYWNlYmFjayB3aGVuIGV4aXRpbmcgSURMRSBjYXVzZWQgYnkgYSByYWNlIGNvbmRpdGlvbi4KLQotLSBJc3N1ZSAjMTc1MTE6IEtlZXAgSURMRSBmaW5kIGRpYWxvZyBvcGVuIGFmdGVyIGNsaWNraW5nICJGaW5kIE5leHQiLgotICBPcmlnaW5hbCBwYXRjaCBieSBTYXJhaCBLLgotCi0tIElzc3VlICMxODA1NTogTW92ZSBJRExFIG9mZiBvZiBpbXAgYW5kIG9uIHRvIGltcG9ydGxpYi4KLQotLSBJc3N1ZSAjMTUzOTI6IENyZWF0ZSBhIHVuaXR0ZXN0IGZyYW1ld29yayBmb3IgSURMRS4KLSAgSW5pdGlhbCBwYXRjaCBieSBSYWphZ29wYWxhc2FybWEgSmF5YWtyaXNobmFuLgotICBTZWUgTGliL2lkbGVsaWIvaWRsZV90ZXN0L1JFQURNRS50eHQgZm9yIGhvdyB0byBydW4gSWRsZSB0ZXN0cy4KLQotLSBJc3N1ZSAjMTQxNDY6IEhpZ2hsaWdodCBzb3VyY2UgbGluZSB3aGlsZSBkZWJ1Z2dpbmcgb24gV2luZG93cy4KLQotLSBJc3N1ZSAjMTc1MzI6IEFsd2F5cyBpbmNsdWRlIE9wdGlvbnMgbWVudSBmb3IgSURMRSBvbiBPUyBYLgotICBQYXRjaCBieSBHdWlsaGVybWUgU2ltw7Vlcy4KKy0gSXNzdWUgIzIzMTgwOiBSZW5hbWUgSURMRSAiV2luZG93cyIgbWVudSBpdGVtIHRvICJXaW5kb3ciLgorICBQYXRjaCBieSBBbCBTd2VpZ2FydC4KIAogCi1XaGF0J3MgTmV3IGluIElETEUgMy4zLjI/CitXaGF0J3MgTmV3IGluIElETEUgMy40LjI/CiA9PT09PT09PT09PT09PT09PT09PT09PT09CisqUmVsZWFzZSBkYXRlOiAyMDE0LTEwLTA2KgorCistIElzc3VlICMxNzM5MDogQWRqdXN0IEVkaXRvciB3aW5kb3cgdGl0bGU7IHJlbW92ZSAnUHl0aG9uJywKKyAgbW92ZSB2ZXJzaW9uIHRvIGVuZC4KKworLSBJc3N1ZSAjMTQxMDU6IElkbGUgZGVidWdnZXIgYnJlYWtwb2ludHMgbm8gbG9uZ2VyIGRpc2FwcGVhcgorICB3aGVuIGluc2V0aW5nIG9yIGRlbGV0aW5nIGxpbmVzLgorCistIElzc3VlICMxNzE3MjogVHVydGxlZGVtbyBjYW4gbm93IGJlIHJ1biBmcm9tIElkbGUuCisgIEN1cnJlbnRseSwgdGhlIGVudHJ5IGlzIG9uIHRoZSBIZWxwIG1lbnUsIGJ1dCBpdCBtYXkgbW92ZSB0byBSdW4uCisgIFBhdGNoIGJ5IFJhbWNoYW5kcmEgQXB0IGFuZCBMaXRhIENoby4KKworLSBJc3N1ZSAjMjE3NjU6IEFkZCBzdXBwb3J0IGZvciBub24tYXNjaWkgaWRlbnRpZmllcnMgdG8gSHlwZXJQYXJzZXIuCisKKy0gSXNzdWUgIzIxOTQwOiBBZGQgdW5pdHRlc3QgZm9yIFdpZGdldFJlZGlyZWN0b3IuIEluaXRpYWwgcGF0Y2ggYnkgU2FpbWFkaGF2CisgIEhlYmxpa2FyLgorCistIElzc3VlICMxODU5MjogQWRkIHVuaXR0ZXN0IGZvciBTZWFyY2hEaWFsb2dCYXNlLiBQYXRjaCBieSBQaGlsIFdlYnN0ZXIuCisKKy0gSXNzdWUgIzIxNjk0OiBBZGQgdW5pdHRlc3QgZm9yIFBhcmVuTWF0Y2guIFBhdGNoIGJ5IFNhaW1hZGhhdiBIZWJsaWthci4KKworLSBJc3N1ZSAjMjE2ODY6IGFkZCB1bml0dGVzdCBmb3IgSHlwZXJQYXJzZXIuIE9yaWdpbmFsIHBhdGNoIGJ5IFNhaW1hZGhhdgorICBIZWJsaWthci4KKworLSBJc3N1ZSAjMTIzODc6IEFkZCBtaXNzaW5nIHVwcGVyKGxvd2VyKWNhc2UgdmVyc2lvbnMgb2YgZGVmYXVsdCBXaW5kb3dzIGtleQorICBiaW5kaW5ncyBmb3IgSWRsZSBzbyBDYXBzIExvY2sgZG9lcyBub3QgZGlzYWJsZSB0aGVtLiBQYXRjaCBieSBSb2dlciBTZXJ3eS4KKworLSBJc3N1ZSAjMjE2OTU6IENsb3NpbmcgYSBGaW5kLWluLWZpbGVzIG91dHB1dCB3aW5kb3cgd2hpbGUgdGhlIHNlYXJjaCBpcworICBzdGlsbCBpbiBwcm9ncmVzcyBubyBsb25nZXIgY2xvc2VzIElkbGUuCisKKy0gSXNzdWUgIzE4OTEwOiBBZGQgdW5pdHRlc3QgZm9yIHRleHRWaWV3LiBQYXRjaCBieSBQaGlsIFdlYnN0ZXIuCisKKy0gSXNzdWUgIzE4MjkyOiBBZGQgdW5pdHRlc3QgZm9yIEF1dG9FeHBhbmQuIFBhdGNoIGJ5IFNhaWhhZGhhdiBIZWJsaWthci4KKworLSBJc3N1ZSAjMTg0MDk6IEFkZCB1bml0dGVzdCBmb3IgQXV0b0NvbXBsZXRlLiBQYXRjaCBieSBQaGlsIFdlYnN0ZXIuCisKKy0gSXNzdWUgIzE4MTA0OiBBZGQgaWRsZWxpYi9pZGxlX3Rlc3QvaHRlc3QucHkgd2l0aCBhIGZldyBzYW1wbGUgdGVzdHMgdG8gYmVnaW4KKyAgY29uc29saWRhdGluZyBhbmQgaW1wcm92aW5nIGh1bWFuLXZhbGlkYXRlZCB0ZXN0cyBvZiBJZGxlLiBDaGFuZ2Ugb3RoZXIgZmlsZXMKKyAgYXMgbmVlZGVkIHRvIHdvcmsgd2l0aCBodGVzdC4gIFJ1bm5pbmcgdGhlIG1vZHVsZSBhcyBfX21haW5fXyBydW5zIGFsbCB0ZXN0cy4KKworCitXaGF0J3MgTmV3IGluIElETEUgMy40LjE/Cis9PT09PT09PT09PT09PT09PT09PT09PT09CisqUmVsZWFzZSBkYXRlOiAyMDE0LTA1LTE4KgorCistIElzc3VlICMxODEwNDogQWRkIGlkbGVsaWIvaWRsZV90ZXN0L2h0ZXN0LnB5IHdpdGggYSBmZXcgc2FtcGxlIHRlc3RzIHRvIGJlZ2luCisgIGNvbnNvbGlkYXRpbmcgYW5kIGltcHJvdmluZyBodW1hbi12YWxpZGF0ZWQgdGVzdHMgb2YgSWRsZS4gQ2hhbmdlIG90aGVyIGZpbGVzCisgIGFzIG5lZWRlZCB0byB3b3JrIHdpdGggaHRlc3QuICBSdW5uaW5nIHRoZSBtb2R1bGUgYXMgX19tYWluX18gcnVucyBhbGwgdGVzdHMuCisKKy0gSXNzdWUgIzIxMTM5OiBDaGFuZ2UgZGVmYXVsdCBwYXJhZ3JhcGggd2lkdGggdG8gNzIsIHRoZSBQRVAgOCByZWNvbW1lbmRhdGlvbi4KKworLSBJc3N1ZSAjMjEyODQ6IFBhcmFncmFwaCByZWZvcm1hdCB0ZXN0IHBhc3NlcyBhZnRlciB1c2VyIGNoYW5nZXMgcmVmb3JtYXQgd2lkdGguCisKKy0gSXNzdWUgIzE3NjU0OiBFbnN1cmUgSURMRSBtZW51cyBhcmUgY3VzdG9taXplZCBwcm9wZXJseSBvbiBPUyBYIGZvcgorICBub24tZnJhbWV3b3JrIGJ1aWxkcyBhbmQgZm9yIGFsbCB2YXJpYW50cyBvZiBUay4KKworCitXaGF0J3MgTmV3IGluIElETEUgMy40LjA/Cis9PT09PT09PT09PT09PT09PT09PT09PT09CisqUmVsZWFzZSBkYXRlOiAyMDE0LTAzLTE2KgogCiAtIElzc3VlICMxNzM5MDogRGlzcGxheSBQeXRob24gdmVyc2lvbiBvbiBJZGxlIHRpdGxlIGJhci4KICAgSW5pdGlhbCBwYXRjaCBieSBFZG1vbmQgQnVybmV0dC4KIAotCi1XaGF0J3MgTmV3IGluIElETEUgMy4zLjE/Ci09PT09PT09PT09PT09PT09PT09PT09PT09CistIElzc3VlICM1MDY2OiBVcGRhdGUgSURMRSBkb2NzLiBQYXRjaCBieSBUb2RkIFJvdml0by4KIAogLSBJc3N1ZSAjMTc2MjU6IENsb3NlIHRoZSByZXBsYWNlIGRpYWxvZyBhZnRlciBpdCBpcyB1c2VkLgogCkBAIC04MSw2ICsyMjUsNyBAQAogCiBXaGF0J3MgTmV3IGluIElETEUgMy4zLjA/CiA9PT09PT09PT09PT09PT09PT09PT09PT09CisqUmVsZWFzZSBkYXRlOiAyMDEyLTA5LTI5KgogCiAtIElzc3VlICMxNzYyNTogQ2xvc2UgdGhlIHJlcGxhY2UgZGlhbG9nIGFmdGVyIGl0IGlzIHVzZWQuCiAKQEAgLTEyMyw3ICsyNjgsNiBAQAogCiBXaGF0J3MgTmV3IGluIElETEUgMy4yLjE/CiA9PT09PT09PT09PT09PT09PT09PT09PT09Ci0KICpSZWxlYXNlIGRhdGU6IDE1LU1heS0xMSoKIAogLSBJc3N1ZSAjNjM3ODogRnVydGhlciBhZGp1c3QgaWRsZS5iYXQgdG8gc3RhcnQgYXNzb2NpYXRlZCBQeXRob24KQEAgLTE0MSw3ICsyODUsNiBAQAogCiBXaGF0J3MgTmV3IGluIElETEUgMy4xYjE/CiA9PT09PT09PT09PT09PT09PT09PT09PT09Ci0KICpSZWxlYXNlIGRhdGU6IDA2LU1heS0wOSoKIAogLSBVc2Ugb2YgJ2ZpbHRlcicgaW4ga2V5YmluZGluZ0RpYWxvZy5weSB3YXMgY2F1c2luZyBjdXN0b20ga2V5IGFzc2lnbm1lbnQgdG8KQEAgLTE1MCw3ICsyOTMsNiBAQAogCiBXaGF0J3MgTmV3IGluIElETEUgMy4xYTE/CiA9PT09PT09PT09PT09PT09PT09PT09PT09Ci0KICpSZWxlYXNlIGRhdGU6IDA3LU1hci0wOSoKIAogLSBJc3N1ZSAjNDgxNTogT2ZmZXIgY29udmVyc2lvbiB0byBVVEYtOCBpZiBzb3VyY2UgZmlsZXMgaGF2ZQpAQCAtMTY2LDkgKzMwOCw5IEBACiAtIElzc3VlICMyNjY1OiBPbiBXaW5kb3dzLCBhbiBJRExFIGluc3RhbGxhdGlvbiB1cGdyYWRlZCBmcm9tIGFuIG9sZCB2ZXJzaW9uCiAgIHdvdWxkIG5vdCBzdGFydCBpZiBhIGN1c3RvbSB0aGVtZSB3YXMgZGVmaW5lZC4KIAorCiBXaGF0J3MgTmV3IGluIElETEUgMi43PyAoVU5SRUxFQVNFRCwgYnV0IG1lcmdlZCBpbnRvIDMuMSByZWxlYXNlcyBhYm92ZS4pCiA9PT09PT09PT09PT09PT09PT09PT09PQotCiAqUmVsZWFzZSBkYXRlOiBYWC1YWFgtMjAxMCoKIAogLSBpZGxlLnB5IG1vZGlmaWVkIGFuZCBzaW1wbGlmaWVkIHRvIGJldHRlciBzdXBwb3J0IGRldmVsb3BpbmcgZXhwZXJpbWVudGFsCkBAIC0xOTIsOSArMzM0LDkgQEAKIAogLSBJc3N1ZSAjMzU0OTogT24gTWFjT1MgdGhlIHByZWZlcmVuY2VzIG1lbnUgd2FzIG5vdCBwcmVzZW50CiAKKwogV2hhdCdzIE5ldyBpbiBJRExFIDMuMCBmaW5hbD8KID09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KICpSZWxlYXNlIGRhdGU6IDAzLURlYy0yMDA4KgogCiAtIElETEUgd291bGQgcHJpbnQgYSAiVW5oYW5kbGVkIHNlcnZlciBleGNlcHRpb24hIiBtZXNzYWdlIHdoZW4gaW50ZXJuYWwKQEAgLTIwOSw3ICszNTEsNiBAQAogCiBXaGF0J3MgTmV3IGluIElETEUgMy4wYTM/CiA9PT09PT09PT09PT09PT09PT09PT09PT09Ci0KICpSZWxlYXNlIGRhdGU6IDI5LUZlYi0yMDA4KgogCiAtIGhlbHAoKSB3YXMgbm90IHBhZ2luZyB0byB0aGUgc2hlbGwuICBJc3N1ZTE2NTAuCkBAIC0yMjYsNyArMzY3LDYgQEAKIAogV2hhdCdzIE5ldyBpbiBJRExFIDMuMGEyPwogPT09PT09PT09PT09PT09PT09PT09PT09PQotCiAqUmVsZWFzZSBkYXRlOiAwNi1EZWMtMjAwNyoKIAogLSBXaW5kb3dzIEVPTCBzZXF1ZW5jZSBub3QgY29udmVydGVkIGNvcnJlY3RseSwgZW5jb2RpbmcgZXJyb3IuCkBAIC0yMzUsNyArMzc1LDYgQEAKIAogV2hhdCdzIE5ldyBpbiBJRExFIDMuMGExPwogPT09PT09PT09PT09PT09PT09PT09PT09PQotCiAqUmVsZWFzZSBkYXRlOiAzMS1BdWctMjAwNyoKIAogLSBJRExFIGNvbnZlcnRlZCB0byBQeXRob24gMzAwMCBzeW50YXguCkBAIC0yNTEsOSArMzkwLDggQEAKICAgYmUgY2xlYXJlZCBiZWZvcmUgSURMRSBleGl0cy4KIAogCi1XaGF0J3MgTmV3IGluIElETEUgMi42IGZpbmFsPwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQorV2hhdCdzIE5ldyBpbiBJRExFIDIuNgorPT09PT09PT09PT09PT09PT09PT09PQogKlJlbGVhc2UgZGF0ZTogMDEtT2N0LTIwMDgqLCBtZXJnZWQgaW50byAzLjAgcmVsZWFzZXMgZGV0YWlsZWQgYWJvdmUgKDMuMHJjMikKIAogLSBJc3N1ZSAjMjY2NTogT24gV2luZG93cywgYW4gSURMRSBpbnN0YWxsYXRpb24gdXBncmFkZWQgZnJvbSBhbiBvbGQgdmVyc2lvbgpAQCAtMzM4LDE1ICs0NzYsOCBAQAogCiBXaGF0J3MgTmV3IGluIElETEUgMS4yPwogPT09PT09PT09PT09PT09PT09PT09PT0KLQogKlJlbGVhc2UgZGF0ZTogMTktU0VQLTIwMDYqCiAKLQotV2hhdCdzIE5ldyBpbiBJRExFIDEuMmMxPwotPT09PT09PT09PT09PT09PT09PT09PT09PQotCi0qUmVsZWFzZSBkYXRlOiAxNy1BVUctMjAwNioKLQogLSBGaWxlIG1lbnUgaG90a2V5czogdGhlcmUgd2VyZSB0aHJlZSAncCcgYXNzaWdubWVudHMuICBSZWFzc2lnbiB0aGUKICAgJ1NhdmUgQ29weSBBcycgYW5kICdQcmludCcgaG90a2V5cyB0byAneScgYW5kICd0Jy4gIENoYW5nZSB0aGUKICAgU2hlbGwgaG90a2V5IGZyb20gJ3MnIHRvICdsJy4KQEAgLTM2NywxMSArNDk4LDYgQEAKIC0gV2hlbiB1c2VkIHcvbyBzdWJwcm9jZXNzLCBhbGwgZXhjZXB0aW9ucyB3ZXJlIHByZWNlZGVkIGJ5IGFuIGVycm9yCiAgIG1lc3NhZ2UgY2xhaW1pbmcgdGhleSB3ZXJlIElETEUgaW50ZXJuYWwgZXJyb3JzIChzaW5jZSAxLjJhMSkuCiAKLVdoYXQncyBOZXcgaW4gSURMRSAxLjJiMz8KLT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotKlJlbGVhc2UgZGF0ZTogMDMtQVVHLTIwMDYqCi0KIC0gQnVnICMxNTI1ODE3OiBEb24ndCB0cnVuY2F0ZSBzaG9ydCBsaW5lcyBpbiBJRExFJ3MgdG9vbCB0aXBzLgogCiAtIEJ1ZyAjMTUxNzk5MDogSURMRSBrZXliaW5kaW5ncyBvbiBNYWNPUyBYIG5vdyB3b3JrIGNvcnJlY3RseQpAQCAtMzk1LDI2ICs1MjEsNiBAQAogICAnYXMnIGtleXdvcmQgaW4gY29tbWVudCBkaXJlY3RseSBmb2xsb3dpbmcgaW1wb3J0IGNvbW1hbmQuIENsb3NlcyAxMzI1MDcxLgogICBQYXRjaCAxNDc5MjE5IFRhbCBFaW5hdAogCi1XaGF0J3MgTmV3IGluIElETEUgMS4yYjI/Ci09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSpSZWxlYXNlIGRhdGU6IDExLUpVTC0yMDA2KgotCi1XaGF0J3MgTmV3IGluIElETEUgMS4yYjE/Ci09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSpSZWxlYXNlIGRhdGU6IDIwLUpVTi0yMDA2KgotCi1XaGF0J3MgTmV3IGluIElETEUgMS4yYTI/Ci09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSpSZWxlYXNlIGRhdGU6IDI3LUFQUi0yMDA2KgotCi1XaGF0J3MgTmV3IGluIElETEUgMS4yYTE/Ci09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSpSZWxlYXNlIGRhdGU6IDA1LUFQUi0yMDA2KgotCiAtIFBhdGNoICMxMTYyODI1OiBTdXBwb3J0IG5vbi1BU0NJSSBjaGFyYWN0ZXJzIGluIElETEUgd2luZG93IHRpdGxlcy4KIAogLSBTb3VyY2UgZmlsZSBmLmZsdXNoKCkgYWZ0ZXIgd3JpdGluZzsgdHJ5aW5nIHRvIGF2b2lkIGxvc3NhZ2UgaWYgdXNlcgpAQCAtNDk0LDE5ICs2MDAsMTQgQEAKIC0gVGhlIHJlbW90ZSBwcm9jZWR1cmUgY2FsbCBtb2R1bGUgcnBjLnB5IGNhbiBub3cgYWNjZXNzIGRhdGEgYXR0cmlidXRlcyBvZgogICByZW1vdGUgcmVnaXN0ZXJlZCBvYmplY3RzLiAgQ2hhbmdlcyB0byB0aGVzZSBhdHRyaWJ1dGVzIGFyZSBsb2NhbCwgaG93ZXZlci4KIAorCiBXaGF0J3MgTmV3IGluIElETEUgMS4xPwogPT09PT09PT09PT09PT09PT09PT09PT0KLQogKlJlbGVhc2UgZGF0ZTogMzAtTk9WLTIwMDQqCiAKIC0gT24gT3BlbkJTRCwgdGVybWluYXRpbmcgSURMRSB3aXRoIGN0cmwtYyBmcm9tIHRoZSBjb21tYW5kIGxpbmUgY2F1c2VkIGEKICAgc3R1Y2sgc3VicHJvY2VzcyBNYWluVGhyZWFkIGJlY2F1c2Ugb25seSB0aGUgU29ja2V0VGhyZWFkIHdhcyBleGl0aW5nLgogCi1XaGF0J3MgTmV3IGluIElETEUgMS4xYjMvcmMxPwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotKlJlbGVhc2UgZGF0ZTogMTgtTk9WLTIwMDQqCi0KIC0gU2F2aW5nIGEgS2V5c2V0IHcvbyBtYWtpbmcgY2hhbmdlcyAoYnkgdXNpbmcgdGhlICJTYXZlIGFzIE5ldyBDdXN0b20gS2V5IFNldCIKICAgYnV0dG9uKSBjYXVzZWQgSURMRSB0byBmYWlsIG9uIHJlc3RhcnQgKG5vIG5ldyBrZXlzZXQgd2FzIGNyZWF0ZWQgaW4KICAgY29uZmlnLWtleXMuY2ZnKS4gIEFsc28gdHJ1ZSBmb3IgVGhlbWUvaGlnaGxpZ2h0cy4gIFB5dGhvbiBCdWcgMTA2NDUzNS4KQEAgLTUxNCwyOCArNjE1LDEyIEBACiAtIEEgY2hhbmdlIHRvIHRoZSBsaW5lY2FjaGUucHkgQVBJIGNhdXNlZCBJRExFIHRvIGV4aXQgd2hlbiBhbiBleGNlcHRpb24gd2FzCiAgIHJhaXNlZCB3aGlsZSBydW5uaW5nIHdpdGhvdXQgdGhlIHN1YnByb2Nlc3MgKC1uIHN3aXRjaCkuICBQeXRob24gQnVnIDEwNjM4NDAuCiAKLVdoYXQncyBOZXcgaW4gSURMRSAxLjFiMj8KLT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotKlJlbGVhc2UgZGF0ZTogMDMtTk9WLTIwMDQqCi0KIC0gV2hlbiBwYXJhZ3JhcGggcmVmb3JtYXQgd2lkdGggd2FzIG1hZGUgY29uZmlndXJhYmxlLCBhIGJ1ZyB3YXMKICAgaW50cm9kdWNlZCB0aGF0IGNhdXNlZCByZWZvcm1hdHRpbmcgb2YgY29tbWVudCBibG9ja3MgdG8gaWdub3JlIGhvdwogICBmYXIgdGhlIGJsb2NrIHdhcyBpbmRlbnRlZCwgZWZmZWN0aXZlbHkgYWRkaW5nIHRoZSBpbmRlbnRhdGlvbiB3aWR0aAogICB0byB0aGUgcmVmb3JtYXQgd2lkdGguICBUaGlzIGhhcyBiZWVuIHJlcGFpcmVkLCBhbmQgdGhlIHJlZm9ybWF0CiAgIHdpZHRoIGlzIGFnYWluIGEgYm91bmQgb24gdGhlIHRvdGFsIHdpZHRoIG9mIHJlZm9ybWF0dGVkIGxpbmVzLgogCi1XaGF0J3MgTmV3IGluIElETEUgMS4xYjE/Ci09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSpSZWxlYXNlIGRhdGU6IDE1LU9DVC0yMDA0KgotCi0KLVdoYXQncyBOZXcgaW4gSURMRSAxLjFhMz8KLT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotKlJlbGVhc2UgZGF0ZTogMDItU0VQLTIwMDQqCi0KIC0gSW1wcm92ZSBrZXlib2FyZCBmb2N1cyBiaW5kaW5nLCBlc3BlY2lhbGx5IGluIFdpbmRvd3MgbWVudS4gIEltcHJvdmUKICAgd2luZG93IHJhaXNpbmcsIGVzcGVjaWFsbHkgaW4gdGhlIFdpbmRvd3MgbWVudSBhbmQgaW4gdGhlIGRlYnVnZ2VyLgogICBJRExFZm9yayA3NjM1MjQuCkBAIC01NDMsMjQgKzYyOCwxMiBAQAogLSBJZiB1c2VyIHBhc3NlcyBhIG5vbi1leGlzdGVudCBmaWxlbmFtZSBvbiB0aGUgY29tbWFuZGxpbmUsIGp1c3QKICAgb3BlbiBhIG5ldyBmaWxlLCBkb24ndCByYWlzZSBhIGRpYWxvZy4gIElETEVmb3JrIDg1NDkyOC4KIAotCi1XaGF0J3MgTmV3IGluIElETEUgMS4xYTI/Ci09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSpSZWxlYXNlIGRhdGU6IDA1LUFVRy0yMDA0KgotCiAtIEVkaXRvcldpbmRvdy5weSB3YXMgbm90IGZpbmRpbmcgdGhlIC5jaG0gaGVscCBmaWxlIG9uIFdpbmRvd3MuICBUeXBvCiAgIGF0IFJldiAxLjU0LiAgUHl0aG9uIEJ1ZyA5OTA5NTQKIAogLSBjaGVja2luZyBzeXMucGxhdGZvcm0gZm9yIHN1YnN0cmluZyAnd2luJyB3YXMgYnJlYWtpbmcgSURMRSBkb2NzIG9uIE1hYwogICAoZGFyd2luKS4gIEFsc28sIE1hYyBTYWZhcmkgYnJvd3NlciByZXF1aXJlcyBmdWxsIGZpbGU6Ly8gVVJJcy4gIFNGIDkwMDU4MC4KIAotCi1XaGF0J3MgTmV3IGluIElETEUgMS4xYTE/Ci09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSpSZWxlYXNlIGRhdGU6IDA4LUpVTC0yMDA0KgotCiAtIFJlZGlyZWN0IHRoZSB3YXJuaW5nIHN0cmVhbSB0byB0aGUgc2hlbGwgZHVyaW5nIHRoZSBTY3JpcHRCaW5kaW5nIGNoZWNrIG9mCiAgIHVzZXIgY29kZSBhbmQgZm9ybWF0IHRoZSB3YXJuaW5nIHNpbWlsYXJseSB0byBhbiBleGNlcHRpb24gZm9yIGJvdGggdGhhdAogICBjaGVjayBhbmQgZm9yIHJ1bnRpbWUgd2FybmluZ3MgcmFpc2VkIGluIHRoZSBzdWJwcm9jZXNzLgpAQCAtNjIzLDI2ICs2OTYsMTMgQEAKIAogV2hhdCdzIE5ldyBpbiBJRExFIDEuMD8KID09PT09PT09PT09PT09PT09PT09PT09Ci0KICpSZWxlYXNlIGRhdGU6IDI5LUp1bC0yMDAzKgogCiAtIEFkZGVkIGEgYmFubmVyIHRvIHRoZSBzaGVsbCBkaXNjdXNzaW5nIHdhcm5pbmdzIHBvc3NpYmx5IHJhaXNlZCBieSBwZXJzb25hbAogICBmaXJld2FsbCBzb2Z0d2FyZS4gIEFkZGVkIHNhbWUgY29tbWVudCB0byBSRUFETUUudHh0LgogCi0KLVdoYXQncyBOZXcgaW4gSURMRSAxLjAgcmVsZWFzZSBjYW5kaWRhdGUgMj8KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotKlJlbGVhc2UgZGF0ZTogMjQtSnVsLTIwMDMqCi0KIC0gQ2FsbHRpcCBlcnJvciB3aGVuIGRvY3N0cmluZyB3YXMgTm9uZSAgUHl0aG9uIEJ1ZyA3NzU1NDEKIAotCi1XaGF0J3MgTmV3IGluIElETEUgMS4wIHJlbGVhc2UgY2FuZGlkYXRlIDE/Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSpSZWxlYXNlIGRhdGU6IDE4LUp1bC0yMDAzKgotCiAtIFVwZGF0ZWQgZXh0ZW5kLnR4dCwgaGVscC50eHQsIGFuZCBjb25maWctZXh0ZW5zaW9ucy5kZWYgdG8gY29ycmVjdGx5CiAgIHJlZmxlY3QgdGhlIGN1cnJlbnQgc3RhdHVzIG9mIHRoZSBjb25maWd1cmF0aW9uIHN5c3RlbS4gIFB5dGhvbiBCdWcgNzY4NDY5CiAKQEAgLTY1OCwxMiArNzE4LDYgQEAKICAgc3lzLnN0ZHtpbnxvdXR8ZXJyfS5lbmNvZGluZywgZm9yIGJvdGggdGhlIGxvY2FsIGFuZCB0aGUgc3VicHJvY2VzcyBjYXNlLgogICBTRiBJRExFZm9yayBwYXRjaCA2ODIzNDcuCiAKLQotV2hhdCdzIE5ldyBpbiBJRExFIDEuMGIyPwotPT09PT09PT09PT09PT09PT09PT09PT09PQotCi0qUmVsZWFzZSBkYXRlOiAyOS1KdW4tMjAwMyoKLQogLSBFeHRlbmQgQWJvdXREaWFsb2cuVmlld0ZpbGUoKSB0byBzdXBwb3J0IGZpbGUgZW5jb2RpbmdzLiAgTWFrZSB0aGUgQ1JFRElUUwogICBmaWxlIExhdGluLTEuCiAKQEAgLTcwMiw3ICs3NTYsNiBAQAogCiBXaGF0J3MgTmV3IGluIElETEVmb3JrIDAuOWIxPwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQogKlJlbGVhc2UgZGF0ZTogMDItSnVuLTIwMDMqCiAKIC0gVGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3Rvcnkgb2YgdGhlIGV4ZWN1dGlvbiBlbnZpcm9ubWVudCAoYW5kIHNoZWxsCkBAIC04MDQsMTAgKzg1Nyw4IEBACiAgIGV4Y2VwdGlvbiBmb3JtYXR0aW5nIHRvIHRoZSBzdWJwcm9jZXNzLgogCiAKLQogV2hhdCdzIE5ldyBpbiBJRExFZm9yayAwLjkgQWxwaGEgMj8KID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KICpSZWxlYXNlIGRhdGU6IDI3LUphbi0yMDAzKgogCiAtIFVwZGF0ZWQgSU5TVEFMTC50eHQgdG8gY2xhaWZ5IHVzZSBvZiB0aGUgcHl0aG9uMiBycG0uCkBAIC05MTEsNyArOTYyLDYgQEAKIAogV2hhdCdzIE5ldyBpbiBJRExFZm9yayAwLjkgQWxwaGEgMT8KID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KICpSZWxlYXNlIGRhdGU6IDMxLURlYy0yMDAyKgogCiAtIEZpcnN0IHJlbGVhc2Ugb2YgbWFqb3IgbmV3IGZ1bmN0aW9uYWxpdHkuICBGb3IgZnVydGhlciBkZXRhaWxzIHJlZmVyIHRvCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9PYmplY3RCcm93c2VyLnB5IGIvTGliL2lkbGVsaWIvT2JqZWN0QnJvd3Nlci5weQppbmRleCBiMzU5ZWZjLi43YjU3YWE0IDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9PYmplY3RCcm93c2VyLnB5CisrKyBiL0xpYi9pZGxlbGliL09iamVjdEJyb3dzZXIucHkKQEAgLTksNiArOSw4IEBACiAjIFhYWCBUTyBETzoKICMgLSBmb3IgY2xhc3Nlcy9tb2R1bGVzLCBhZGQgIm9wZW4gc291cmNlIiB0byBvYmplY3QgYnJvd3NlcgogCitpbXBvcnQgcmUKKwogZnJvbSBpZGxlbGliLlRyZWVXaWRnZXQgaW1wb3J0IFRyZWVJdGVtLCBUcmVlTm9kZSwgU2Nyb2xsZWRDYW52YXMKIAogZnJvbSByZXBybGliIGltcG9ydCBSZXByCkBAIC0xMTksMTIgKzEyMSwxNCBAQAogICAgICAgICBjID0gT2JqZWN0VHJlZUl0ZW0KICAgICByZXR1cm4gYyhsYWJlbHRleHQsIG9iamVjdCwgc2V0ZnVuY3Rpb24pCiAKLSMgVGVzdCBzY3JpcHQKIAotZGVmIF90ZXN0KCk6CitkZWYgX29iamVjdF9icm93c2VyKHBhcmVudCk6CiAgICAgaW1wb3J0IHN5cwogICAgIGZyb20gdGtpbnRlciBpbXBvcnQgVGsKICAgICByb290ID0gVGsoKQorICAgIHJvb3QudGl0bGUoIlRlc3QgT2JqZWN0QnJvd3NlciIpCisgICAgd2lkdGgsIGhlaWdodCwgeCwgeSA9IGxpc3QobWFwKGludCwgcmUuc3BsaXQoJ1t4K10nLCBwYXJlbnQuZ2VvbWV0cnkoKSkpKQorICAgIHJvb3QuZ2VvbWV0cnkoIislZCslZCIlKHgsIHkgKyAxNTApKQogICAgIHJvb3QuY29uZmlndXJlKGJkPTAsIGJnPSJ5ZWxsb3ciKQogICAgIHJvb3QuZm9jdXNfc2V0KCkKICAgICBzYyA9IFNjcm9sbGVkQ2FudmFzKHJvb3QsIGJnPSJ3aGl0ZSIsIGhpZ2hsaWdodHRoaWNrbmVzcz0wLCB0YWtlZm9jdXM9MSkKQEAgLTEzNSw0ICsxMzksNSBAQAogICAgIHJvb3QubWFpbmxvb3AoKQogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIF90ZXN0KCkKKyAgICBmcm9tIGlkbGVsaWIuaWRsZV90ZXN0Lmh0ZXN0IGltcG9ydCBydW4KKyAgICBydW4oX29iamVjdF9icm93c2VyKQpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvT3V0cHV0V2luZG93LnB5IGIvTGliL2lkbGVsaWIvT3V0cHV0V2luZG93LnB5CmluZGV4IDlkYWNjNDkuLmU2MTRmOWIgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL091dHB1dFdpbmRvdy5weQorKysgYi9MaWIvaWRsZWxpYi9PdXRwdXRXaW5kb3cucHkKQEAgLTkxLDcgKzkxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgIk5vIHNwZWNpYWwgbGluZSIsCiAgICAgICAgICAgICAgICAgICAgICJUaGUgbGluZSB5b3UgcG9pbnQgYXQgZG9lc24ndCBsb29rIGxpa2UgIgogICAgICAgICAgICAgICAgICAgICAiYSB2YWxpZCBmaWxlIG5hbWUgZm9sbG93ZWQgYnkgYSBsaW5lIG51bWJlci4iLAotICAgICAgICAgICAgICAgICAgICBtYXN0ZXI9c2VsZi50ZXh0KQorICAgICAgICAgICAgICAgICAgICBwYXJlbnQ9c2VsZi50ZXh0KQogICAgICAgICAgICAgICAgIHJldHVybgogICAgICAgICBmaWxlbmFtZSwgbGluZW5vID0gcmVzdWx0CiAgICAgICAgIGVkaXQgPSBzZWxmLmZsaXN0Lm9wZW4oZmlsZW5hbWUpCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9QYXJlbk1hdGNoLnB5IGIvTGliL2lkbGVsaWIvUGFyZW5NYXRjaC5weQppbmRleCA2ZDkxYjM5Li4xOWJhZDhjIDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9QYXJlbk1hdGNoLnB5CisrKyBiL0xpYi9pZGxlbGliL1BhcmVuTWF0Y2gucHkKQEAgLTkwLDcgKzkwLDggQEAKICAgICAgICAgICAgIHNlbGYuc2V0X3RpbWVvdXQgPSBzZWxmLnNldF90aW1lb3V0X25vbmUKIAogICAgIGRlZiBmbGFzaF9wYXJlbl9ldmVudChzZWxmLCBldmVudCk6Ci0gICAgICAgIGluZGljZXMgPSBIeXBlclBhcnNlcihzZWxmLmVkaXR3aW4sICJpbnNlcnQiKS5nZXRfc3Vycm91bmRpbmdfYnJhY2tldHMoKQorICAgICAgICBpbmRpY2VzID0gKEh5cGVyUGFyc2VyKHNlbGYuZWRpdHdpbiwgImluc2VydCIpCisgICAgICAgICAgICAgICAgICAgLmdldF9zdXJyb3VuZGluZ19icmFja2V0cygpKQogICAgICAgICBpZiBpbmRpY2VzIGlzIE5vbmU6CiAgICAgICAgICAgICBzZWxmLndhcm5fbWlzbWF0Y2hlZCgpCiAgICAgICAgICAgICByZXR1cm4KQEAgLTE2Nyw2ICsxNjgsMTEgQEAKICAgICAgICAgIyBhc3NvY2lhdGUgYSBjb3VudGVyIHdpdGggYW4gZXZlbnQ7IG9ubHkgZGlzYWJsZSB0aGUgInBhcmVuIgogICAgICAgICAjIHRhZyBpZiB0aGUgZXZlbnQgaXMgZm9yIHRoZSBtb3N0IHJlY2VudCB0aW1lci4KICAgICAgICAgc2VsZi5jb3VudGVyICs9IDEKLSAgICAgICAgc2VsZi5lZGl0d2luLnRleHRfZnJhbWUuYWZ0ZXIoc2VsZi5GTEFTSF9ERUxBWSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFtYmRhIHNlbGY9c2VsZiwgYz1zZWxmLmNvdW50ZXI6IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVfcmVzdG9yZV90aW1lcihjKSkKKyAgICAgICAgc2VsZi5lZGl0d2luLnRleHRfZnJhbWUuYWZ0ZXIoCisgICAgICAgICAgICBzZWxmLkZMQVNIX0RFTEFZLAorICAgICAgICAgICAgbGFtYmRhIHNlbGY9c2VsZiwgYz1zZWxmLmNvdW50ZXI6IHNlbGYuaGFuZGxlX3Jlc3RvcmVfdGltZXIoYykpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBpbXBvcnQgdW5pdHRlc3QKKyAgICB1bml0dGVzdC5tYWluKCdpZGxlbGliLmlkbGVfdGVzdC50ZXN0X3BhcmVubWF0Y2gnLCB2ZXJib3NpdHk9MikKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL1BhdGhCcm93c2VyLnB5IGIvTGliL2lkbGVsaWIvUGF0aEJyb3dzZXIucHkKaW5kZXggYmE0MDcxOS4uOWFiNzYzMiAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvUGF0aEJyb3dzZXIucHkKKysrIGIvTGliL2lkbGVsaWIvUGF0aEJyb3dzZXIucHkKQEAgLTQsMTMgKzQsMjAgQEAKIAogZnJvbSBpZGxlbGliLlRyZWVXaWRnZXQgaW1wb3J0IFRyZWVJdGVtCiBmcm9tIGlkbGVsaWIuQ2xhc3NCcm93c2VyIGltcG9ydCBDbGFzc0Jyb3dzZXIsIE1vZHVsZUJyb3dzZXJUcmVlSXRlbQorZnJvbSBpZGxlbGliLlB5U2hlbGwgaW1wb3J0IFB5U2hlbGxGaWxlTGlzdAorCiAKIGNsYXNzIFBhdGhCcm93c2VyKENsYXNzQnJvd3Nlcik6CiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgZmxpc3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmbGlzdCwgX2h0ZXN0PUZhbHNlKToKKyAgICAgICAgIiIiCisgICAgICAgIF9odGVzdCAtIGJvb2wsIGNoYW5nZSBib3ggbG9jYXRpb24gd2hlbiBydW5uaW5nIGh0ZXN0CisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9odGVzdCA9IF9odGVzdAogICAgICAgICBzZWxmLmluaXQoZmxpc3QpCiAKICAgICBkZWYgc2V0dGl0bGUoc2VsZik6CisgICAgICAgICJTZXQgd2luZG93IHRpdGxlcy4iCiAgICAgICAgIHNlbGYudG9wLndtX3RpdGxlKCJQYXRoIEJyb3dzZXIiKQogICAgICAgICBzZWxmLnRvcC53bV9pY29ubmFtZSgiUGF0aCBCcm93c2VyIikKIApAQCAtNDQsNyArNTEsNyBAQAogICAgIGRlZiBHZXRTdWJMaXN0KHNlbGYpOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBuYW1lcyA9IG9zLmxpc3RkaXIoc2VsZi5kaXIgb3Igb3MuY3VyZGlyKQotICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcmV0dXJuIFtdCiAgICAgICAgIHBhY2thZ2VzID0gW10KICAgICAgICAgZm9yIG5hbWUgaW4gbmFtZXM6CkBAIC02MywxNiArNzAsMTcgQEAKICAgICAgICAgcmV0dXJuIHN1Ymxpc3QKIAogICAgIGRlZiBpc3BhY2thZ2VkaXIoc2VsZiwgZmlsZSk6CisgICAgICAgICIgUmV0dXJuIHRydWUgZm9yIGRpcmVjdG9yaWVzIHRoYXQgYXJlIHBhY2thZ2VzLiIKICAgICAgICAgaWYgbm90IG9zLnBhdGguaXNkaXIoZmlsZSk6Ci0gICAgICAgICAgICByZXR1cm4gMAorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgIGluaXQgPSBvcy5wYXRoLmpvaW4oZmlsZSwgIl9faW5pdF9fLnB5IikKICAgICAgICAgcmV0dXJuIG9zLnBhdGguZXhpc3RzKGluaXQpCiAKICAgICBkZWYgbGlzdG1vZHVsZXMoc2VsZiwgYWxsbmFtZXMpOgogICAgICAgICBtb2R1bGVzID0ge30KICAgICAgICAgc3VmZml4ZXMgPSBpbXBvcnRsaWIubWFjaGluZXJ5LkVYVEVOU0lPTl9TVUZGSVhFU1s6XQotICAgICAgICBzdWZmaXhlcyArPSBpbXBvcnRsaWIubWFjaGluZXJ5LlNPVVJDRV9TVUZGSVhFU1s6XQotICAgICAgICBzdWZmaXhlcyArPSBpbXBvcnRsaWIubWFjaGluZXJ5LkJZVEVDT0RFX1NVRkZJWEVTWzpdCisgICAgICAgIHN1ZmZpeGVzICs9IGltcG9ydGxpYi5tYWNoaW5lcnkuU09VUkNFX1NVRkZJWEVTCisgICAgICAgIHN1ZmZpeGVzICs9IGltcG9ydGxpYi5tYWNoaW5lcnkuQllURUNPREVfU1VGRklYRVMKICAgICAgICAgc29ydGVkID0gW10KICAgICAgICAgZm9yIHN1ZmYgaW4gc3VmZml4ZXM6CiAgICAgICAgICAgICBpID0gLWxlbihzdWZmKQpAQCAtODcsMTIgKzk1LDE0IEBACiAgICAgICAgIHNvcnRlZC5zb3J0KCkKICAgICAgICAgcmV0dXJuIHNvcnRlZAogCi1kZWYgbWFpbigpOgotICAgIGZyb20gaWRsZWxpYiBpbXBvcnQgUHlTaGVsbAotICAgIFBhdGhCcm93c2VyKFB5U2hlbGwuZmxpc3QpCi0gICAgaWYgc3lzLnN0ZGluIGlzIHN5cy5fX3N0ZGluX186Ci0gICAgICAgIG1haW5sb29wKCkKK2RlZiBfcGF0aF9icm93c2VyKHBhcmVudCk6ICAjIGh0ZXN0ICMKKyAgICBmbGlzdCA9IFB5U2hlbGxGaWxlTGlzdChwYXJlbnQpCisgICAgUGF0aEJyb3dzZXIoZmxpc3QsIF9odGVzdD1UcnVlKQorICAgIHBhcmVudC5tYWlubG9vcCgpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgZnJvbSB1bml0dGVzdCBpbXBvcnQgbWFpbgogICAgIG1haW4oJ2lkbGVsaWIuaWRsZV90ZXN0LnRlc3RfcGF0aGJyb3dzZXInLCB2ZXJib3NpdHk9MiwgZXhpdD1GYWxzZSkKKworICAgIGZyb20gaWRsZWxpYi5pZGxlX3Rlc3QuaHRlc3QgaW1wb3J0IHJ1bgorICAgIHJ1bihfcGF0aF9icm93c2VyKQpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvUGVyY29sYXRvci5weSBiL0xpYi9pZGxlbGliL1BlcmNvbGF0b3IucHkKaW5kZXggYzkxZGUzOC4uOWU5MzMxOSAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvUGVyY29sYXRvci5weQorKysgYi9MaWIvaWRsZWxpYi9QZXJjb2xhdG9yLnB5CkBAIC01MSw4ICs1MSw5IEBACiAgICAgICAgICAgICBmLnNldGRlbGVnYXRlKGZpbHRlci5kZWxlZ2F0ZSkKICAgICAgICAgICAgIGZpbHRlci5zZXRkZWxlZ2F0ZShOb25lKQogCi1kZWYgbWFpbigpOgotICAgIGltcG9ydCB0a2ludGVyIGFzIFRrCitkZWYgX3BlcmNvbGF0b3IocGFyZW50KToKKyAgICBpbXBvcnQgdGtpbnRlciBhcyB0aworICAgIGltcG9ydCByZQogICAgIGNsYXNzIFRyYWNlcihEZWxlZ2F0b3IpOgogICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSk6CiAgICAgICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCkBAIC02MywyMiArNjQsNDEgQEAKICAgICAgICAgZGVmIGRlbGV0ZShzZWxmLCAqYXJncyk6CiAgICAgICAgICAgICBwcmludChzZWxmLm5hbWUsICI6IGRlbGV0ZSIsIGFyZ3MpCiAgICAgICAgICAgICBzZWxmLmRlbGVnYXRlLmRlbGV0ZSgqYXJncykKLSAgICByb290ID0gVGsuVGsoKQotICAgIHJvb3Qud21fcHJvdG9jb2woIldNX0RFTEVURV9XSU5ET1ciLCByb290LnF1aXQpCi0gICAgdGV4dCA9IFRrLlRleHQoKQotICAgIHRleHQucGFjaygpCi0gICAgdGV4dC5mb2N1c19zZXQoKQorICAgIHJvb3QgPSB0ay5UaygpCisgICAgcm9vdC50aXRsZSgiVGVzdCBQZXJjb2xhdG9yIikKKyAgICB3aWR0aCwgaGVpZ2h0LCB4LCB5ID0gbGlzdChtYXAoaW50LCByZS5zcGxpdCgnW3grXScsIHBhcmVudC5nZW9tZXRyeSgpKSkpCisgICAgcm9vdC5nZW9tZXRyeSgiKyVkKyVkIiUoeCwgeSArIDE1MCkpCisgICAgdGV4dCA9IHRrLlRleHQocm9vdCkKICAgICBwID0gUGVyY29sYXRvcih0ZXh0KQogICAgIHQxID0gVHJhY2VyKCJ0MSIpCiAgICAgdDIgPSBUcmFjZXIoInQyIikKLSAgICBwLmluc2VydGZpbHRlcih0MSkKLSAgICBwLmluc2VydGZpbHRlcih0MikKLSAgICByb290Lm1haW5sb29wKCkgIyBjbGljayBjbG9zZSB3aWRnZXQgdG8gY29udGludWUuLi4KLSAgICBwLnJlbW92ZWZpbHRlcih0MikKLSAgICByb290Lm1haW5sb29wKCkKLSAgICBwLmluc2VydGZpbHRlcih0MikKLSAgICBwLnJlbW92ZWZpbHRlcih0MSkKKworICAgIGRlZiB0b2dnbGUxKCk6CisgICAgICAgIGlmIHZhcjEuZ2V0KCkgPT0gMDoKKyAgICAgICAgICAgIHZhcjEuc2V0KDEpCisgICAgICAgICAgICBwLmluc2VydGZpbHRlcih0MSkKKyAgICAgICAgZWxpZiB2YXIxLmdldCgpID09IDE6CisgICAgICAgICAgICB2YXIxLnNldCgwKQorICAgICAgICAgICAgcC5yZW1vdmVmaWx0ZXIodDEpCisKKyAgICBkZWYgdG9nZ2xlMigpOgorICAgICAgICBpZiB2YXIyLmdldCgpID09IDA6CisgICAgICAgICAgICB2YXIyLnNldCgxKQorICAgICAgICAgICAgcC5pbnNlcnRmaWx0ZXIodDIpCisgICAgICAgIGVsaWYgdmFyMi5nZXQoKSA9PSAxOgorICAgICAgICAgICAgdmFyMi5zZXQoMCkKKyAgICAgICAgICAgIHAucmVtb3ZlZmlsdGVyKHQyKQorCisgICAgdGV4dC5wYWNrKCkKKyAgICB2YXIxID0gdGsuSW50VmFyKCkKKyAgICBjYjEgPSB0ay5DaGVja2J1dHRvbihyb290LCB0ZXh0PSJUcmFjZXIxIiwgY29tbWFuZD10b2dnbGUxLCB2YXJpYWJsZT12YXIxKQorICAgIGNiMS5wYWNrKCkKKyAgICB2YXIyID0gdGsuSW50VmFyKCkKKyAgICBjYjIgPSB0ay5DaGVja2J1dHRvbihyb290LCB0ZXh0PSJUcmFjZXIyIiwgY29tbWFuZD10b2dnbGUyLCB2YXJpYWJsZT12YXIyKQorICAgIGNiMi5wYWNrKCkKKwogICAgIHJvb3QubWFpbmxvb3AoKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIG1haW4oKQorICAgIGZyb20gaWRsZWxpYi5pZGxlX3Rlc3QuaHRlc3QgaW1wb3J0IHJ1bgorICAgIHJ1bihfcGVyY29sYXRvcikKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL1B5UGFyc2UucHkgYi9MaWIvaWRsZWxpYi9QeVBhcnNlLnB5CmluZGV4IDYxYTAwMDMuLjljY2JiMjUgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL1B5UGFyc2UucHkKKysrIGIvTGliL2lkbGVsaWIvUHlQYXJzZS5weQpAQCAtMSw1ICsxLDYgQEAKIGltcG9ydCByZQogaW1wb3J0IHN5cworZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgTWFwcGluZwogCiAjIFJlYXNvbiBsYXN0IHN0bXQgaXMgY29udGludWVkIChvciBDX05PTkUgaWYgaXQncyBub3QpLgogKENfTk9ORSwgQ19CQUNLU0xBU0gsIENfU1RSSU5HX0ZJUlNUX0xJTkUsCkBAIC05MSwxOSArOTIsNDggQEAKICAgICBbXltcXSgpe30jJyJcXF0rCiAiIiIsIHJlLlZFUkJPU0UpLm1hdGNoCiAKLSMgQnVpbGQgdHJhbnNsYXRpb24gdGFibGUgdG8gbWFwIHVuaW50ZXJlc3RpbmcgY2hhcnMgdG8gIngiLCBvcGVuCi0jIGJyYWNrZXRzIHRvICIoIiwgYW5kIGNsb3NlIGJyYWNrZXRzIHRvICIpIi4KIAotX3RyYW4gPSB7fQotZm9yIGkgaW4gcmFuZ2UoMjU2KToKLSAgICBfdHJhbltpXSA9ICd4JwotZm9yIGNoIGluICIoe1siOgotICAgIF90cmFuW29yZChjaCldID0gJygnCi1mb3IgY2ggaW4gIil9XSI6Ci0gICAgX3RyYW5bb3JkKGNoKV0gPSAnKScKLWZvciBjaCBpbiAiXCInXFxcbiMiOgotICAgIF90cmFuW29yZChjaCldID0gY2gKLWRlbCBpLCBjaAorY2xhc3MgU3RyaW5nVHJhbnNsYXRlUHNldWRvTWFwcGluZyhNYXBwaW5nKToKKyAgICByIiIiVXRpbGl0eSBjbGFzcyB0byBiZSB1c2VkIHdpdGggc3RyLnRyYW5zbGF0ZSgpCisKKyAgICBUaGlzIE1hcHBpbmcgY2xhc3Mgd3JhcHMgYSBnaXZlbiBkaWN0LiBXaGVuIGEgdmFsdWUgZm9yIGEga2V5IGlzCisgICAgcmVxdWVzdGVkIHZpYSBfX2dldGl0ZW1fXygpIG9yIGdldCgpLCB0aGUga2V5IGlzIGxvb2tlZCB1cCBpbiB0aGUKKyAgICBnaXZlbiBkaWN0LiBJZiBmb3VuZCB0aGVyZSwgdGhlIHZhbHVlIGZyb20gdGhlIGRpY3QgaXMgcmV0dXJuZWQuCisgICAgT3RoZXJ3aXNlLCB0aGUgZGVmYXVsdCB2YWx1ZSBnaXZlbiB1cG9uIGluaXRpYWxpemF0aW9uIGlzIHJldHVybmVkLgorCisgICAgVGhpcyBhbGxvd3MgdXNpbmcgc3RyLnRyYW5zbGF0ZSgpIHRvIG1ha2Ugc29tZSByZXBsYWNlbWVudHMsIGFuZCB0bworICAgIHJlcGxhY2UgYWxsIGNoYXJhY3RlcnMgZm9yIHdoaWNoIG5vIHJlcGxhY2VtZW50IHdhcyBzcGVjaWZpZWQgd2l0aAorICAgIGEgZ2l2ZW4gY2hhcmFjdGVyIGluc3RlYWQgb2YgbGVhdmluZyB0aGVtIGFzLWlzLgorCisgICAgRm9yIGV4YW1wbGUsIHRvIHJlcGxhY2UgZXZlcnl0aGluZyBleGNlcHQgd2hpdGVzcGFjZSB3aXRoICd4JzoKKworICAgID4+PiB3aGl0ZXNwYWNlX2NoYXJzID0gJyBcdFxuXHInCisgICAgPj4+IHByZXNlcnZlX2RpY3QgPSB7b3JkKGMpOiBvcmQoYykgZm9yIGMgaW4gd2hpdGVzcGFjZV9jaGFyc30KKyAgICA+Pj4gbWFwcGluZyA9IFN0cmluZ1RyYW5zbGF0ZVBzZXVkb01hcHBpbmcocHJlc2VydmVfZGljdCwgb3JkKCd4JykpCisgICAgPj4+IHRleHQgPSAiYSArIGJcdGNcbmQiCisgICAgPj4+IHRleHQudHJhbnNsYXRlKG1hcHBpbmcpCisgICAgJ3ggeCB4XHR4XG54JworICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBub25fZGVmYXVsdHMsIGRlZmF1bHRfdmFsdWUpOgorICAgICAgICBzZWxmLl9ub25fZGVmYXVsdHMgPSBub25fZGVmYXVsdHMKKyAgICAgICAgc2VsZi5fZGVmYXVsdF92YWx1ZSA9IGRlZmF1bHRfdmFsdWUKKworICAgICAgICBkZWYgX2dldChrZXksIF9nZXQ9bm9uX2RlZmF1bHRzLmdldCwgX2RlZmF1bHQ9ZGVmYXVsdF92YWx1ZSk6CisgICAgICAgICAgICByZXR1cm4gX2dldChrZXksIF9kZWZhdWx0KQorICAgICAgICBzZWxmLl9nZXQgPSBfZ2V0CisKKyAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaXRlbSk6CisgICAgICAgIHJldHVybiBzZWxmLl9nZXQoaXRlbSkKKworICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gbGVuKHNlbGYuX25vbl9kZWZhdWx0cykKKworICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGl0ZXIoc2VsZi5fbm9uX2RlZmF1bHRzKQorCisgICAgZGVmIGdldChzZWxmLCBrZXksIGRlZmF1bHQ9Tm9uZSk6CisgICAgICAgIHJldHVybiBzZWxmLl9nZXQoa2V5KQorCiAKIGNsYXNzIFBhcnNlcjoKIApAQCAtMTEzLDE5ICsxNDMsNiBAQAogCiAgICAgZGVmIHNldF9zdHIoc2VsZiwgcyk6CiAgICAgICAgIGFzc2VydCBsZW4ocykgPT0gMCBvciBzWy0xXSA9PSAnXG4nCi0gICAgICAgIGlmIGlzaW5zdGFuY2Uocywgc3RyKToKLSAgICAgICAgICAgICMgVGhlIHBhcnNlIGZ1bmN0aW9ucyBoYXZlIG5vIGlkZWEgd2hhdCB0byBkbyB3aXRoIFVuaWNvZGUsIHNvCi0gICAgICAgICAgICAjIHJlcGxhY2UgYWxsIFVuaWNvZGUgY2hhcmFjdGVycyB3aXRoICJ4Ii4gIFRoaXMgaXMgInNhZmUiCi0gICAgICAgICAgICAjIHNvIGxvbmcgYXMgdGhlIG9ubHkgY2hhcmFjdGVycyBnZXJtYW5lIHRvIHBhcnNpbmcgdGhlIHN0cnVjdHVyZQotICAgICAgICAgICAgIyBvZiBQeXRob24gYXJlIDctYml0IEFTQ0lJLiAgSXQncyAqbmVjZXNzYXJ5KiBiZWNhdXNlIFVuaWNvZGUKLSAgICAgICAgICAgICMgc3RyaW5ncyBkb24ndCBoYXZlIGEgLnRyYW5zbGF0ZSgpIG1ldGhvZCB0aGF0IHN1cHBvcnRzCi0gICAgICAgICAgICAjIGRlbGV0ZWNoYXJzLgotICAgICAgICAgICAgdW5pcGhvb2V5ID0gcwotICAgICAgICAgICAgcyA9IFtdCi0gICAgICAgICAgICBwdXNoID0gcy5hcHBlbmQKLSAgICAgICAgICAgIGZvciByYXcgaW4gbWFwKG9yZCwgdW5pcGhvb2V5KToKLSAgICAgICAgICAgICAgICBwdXNoKHJhdyA8IDEyNyBhbmQgY2hyKHJhdykgb3IgIngiKQotICAgICAgICAgICAgcyA9ICIiLmpvaW4ocykKICAgICAgICAgc2VsZi5zdHIgPSBzCiAgICAgICAgIHNlbGYuc3R1ZHlfbGV2ZWwgPSAwCiAKQEAgLTE5Nyw2ICsyMTQsMTYgQEAKICAgICAgICAgaWYgbG8gPiAwOgogICAgICAgICAgICAgc2VsZi5zdHIgPSBzZWxmLnN0cltsbzpdCiAKKyAgICAjIEJ1aWxkIGEgdHJhbnNsYXRpb24gdGFibGUgdG8gbWFwIHVuaW50ZXJlc3RpbmcgY2hhcnMgdG8gJ3gnLCBvcGVuCisgICAgIyBicmFja2V0cyB0byAnKCcsIGNsb3NlIGJyYWNrZXRzIHRvICcpJyB3aGlsZSBwcmVzZXJ2aW5nIHF1b3RlcywKKyAgICAjIGJhY2tzbGFzaGVzLCBuZXdsaW5lcyBhbmQgaGFzaGVzLiBUaGlzIGlzIHRvIGJlIHBhc3NlZCB0bworICAgICMgc3RyLnRyYW5zbGF0ZSgpIGluIF9zdHVkeTEoKS4KKyAgICBfdHJhbiA9IHt9CisgICAgX3RyYW4udXBkYXRlKChvcmQoYyksIG9yZCgnKCcpKSBmb3IgYyBpbiAiKHtbIikKKyAgICBfdHJhbi51cGRhdGUoKG9yZChjKSwgb3JkKCcpJykpIGZvciBjIGluICIpfV0iKQorICAgIF90cmFuLnVwZGF0ZSgob3JkKGMpLCBvcmQoYykpIGZvciBjIGluICJcIidcXFxuIyIpCisgICAgX3RyYW4gPSBTdHJpbmdUcmFuc2xhdGVQc2V1ZG9NYXBwaW5nKF90cmFuLCBkZWZhdWx0X3ZhbHVlPW9yZCgneCcpKQorCiAgICAgIyBBcyBxdWlja2x5IGFzIGh1bWFubHkgcG9zc2libGUgPHdpbms+LCBmaW5kIHRoZSBsaW5lIG51bWJlcnMgKDAtCiAgICAgIyBiYXNlZCkgb2YgdGhlIG5vbi1jb250aW51YXRpb24gbGluZXMuCiAgICAgIyBDcmVhdGVzIHNlbGYue2dvb2RsaW5lcywgY29udGludWF0aW9ufS4KQEAgLTIxMSw3ICsyMzgsNyBAQAogICAgICAgICAjIHVuaW50ZXJlc3RpbmcgY2hhcmFjdGVycy4gIFRoaXMgY2FuIGN1dCB0aGUgbnVtYmVyIG9mIGNoYXJzCiAgICAgICAgICMgYnkgYSBmYWN0b3Igb2YgMTAtNDAsIGFuZCBzbyBncmVhdGx5IHNwZWVkIHRoZSBmb2xsb3dpbmcgbG9vcC4KICAgICAgICAgc3RyID0gc2VsZi5zdHIKLSAgICAgICAgc3RyID0gc3RyLnRyYW5zbGF0ZShfdHJhbikKKyAgICAgICAgc3RyID0gc3RyLnRyYW5zbGF0ZShzZWxmLl90cmFuKQogICAgICAgICBzdHIgPSBzdHIucmVwbGFjZSgneHh4eHh4eHgnLCAneCcpCiAgICAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKCd4eHh4JywgJ3gnKQogICAgICAgICBzdHIgPSBzdHIucmVwbGFjZSgneHgnLCAneCcpCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9QeVNoZWxsLnB5IGIvTGliL2lkbGVsaWIvUHlTaGVsbC5weQppbmRleCAyZTVlYmIyLi4xYmNjOWI2IDEwMDc1NQotLS0gYS9MaWIvaWRsZWxpYi9QeVNoZWxsLnB5CisrKyBiL0xpYi9pZGxlbGliL1B5U2hlbGwucHkKQEAgLTEwLDggKzEwLDYgQEAKIGltcG9ydCB0aHJlYWRpbmcKIGltcG9ydCB0aW1lCiBpbXBvcnQgdG9rZW5pemUKLWltcG9ydCB0cmFjZWJhY2sKLWltcG9ydCB0eXBlcwogaW1wb3J0IGlvCiAKIGltcG9ydCBsaW5lY2FjaGUKQEAgLTIxLDcgKzE5LDcgQEAKIHRyeToKICAgICBmcm9tIHRraW50ZXIgaW1wb3J0ICoKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICBwcmludCgiKiogSURMRSBjYW4ndCBpbXBvcnQgVGtpbnRlci4gICIgXAorICAgIHByaW50KCIqKiBJRExFIGNhbid0IGltcG9ydCBUa2ludGVyLlxuIgogICAgICAgICAgICJZb3VyIFB5dGhvbiBtYXkgbm90IGJlIGNvbmZpZ3VyZWQgZm9yIFRrLiAqKiIsIGZpbGU9c3lzLl9fc3RkZXJyX18pCiAgICAgc3lzLmV4aXQoMSkKIGltcG9ydCB0a2ludGVyLm1lc3NhZ2Vib3ggYXMgdGtNZXNzYWdlQm94CkBAIC0zMiw3ICszMCw2IEBACiBmcm9tIGlkbGVsaWIuVW5kb0RlbGVnYXRvciBpbXBvcnQgVW5kb0RlbGVnYXRvcgogZnJvbSBpZGxlbGliLk91dHB1dFdpbmRvdyBpbXBvcnQgT3V0cHV0V2luZG93CiBmcm9tIGlkbGVsaWIuY29uZmlnSGFuZGxlciBpbXBvcnQgaWRsZUNvbmYKLWZyb20gaWRsZWxpYiBpbXBvcnQgaWRsZXZlcgogZnJvbSBpZGxlbGliIGltcG9ydCBycGMKIGZyb20gaWRsZWxpYiBpbXBvcnQgRGVidWdnZXIKIGZyb20gaWRsZWxpYiBpbXBvcnQgUmVtb3RlRGVidWdnZXIKQEAgLTEzOCw2ICsxMzUsNyBAQAogICAgICAgICBzZWxmLmlvLnNldF9maWxlbmFtZV9jaGFuZ2VfaG9vayhmaWxlbmFtZV9jaGFuZ2VkX2hvb2spCiAgICAgICAgIGlmIHNlbGYuaW8uZmlsZW5hbWU6CiAgICAgICAgICAgICBzZWxmLnJlc3RvcmVfZmlsZV9icmVha3MoKQorICAgICAgICBzZWxmLmNvbG9yX2JyZWFrcG9pbnRfdGV4dCgpCiAKICAgICBybWVudV9zcGVjcyA9IFsKICAgICAgICAgKCJDdXQiLCAiPDxjdXQ+PiIsICJybWVudV9jaGVja19jdXQiKSwKQEAgLTE0OCwxMiArMTQ2LDI0IEBACiAgICAgICAgICgiQ2xlYXIgQnJlYWtwb2ludCIsICI8PGNsZWFyLWJyZWFrcG9pbnQtaGVyZT4+IiwgTm9uZSkKICAgICBdCiAKKyAgICBkZWYgY29sb3JfYnJlYWtwb2ludF90ZXh0KHNlbGYsIGNvbG9yPVRydWUpOgorICAgICAgICAiVHVybiBjb2xvcml6aW5nIG9mIGJyZWFrcG9pbnQgdGV4dCBvbiBvciBvZmYiCisgICAgICAgIGlmIHNlbGYuaW8gaXMgTm9uZToKKyAgICAgICAgICAgICMgcG9zc2libGUgZHVlIHRvIHVwZGF0ZSBpbiByZXN0b3JlX2ZpbGVfYnJlYWtzCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgY29sb3I6CisgICAgICAgICAgICB0aGVtZSA9IGlkbGVDb25mLkN1cnJlbnRUaGVtZSgpCisgICAgICAgICAgICBjZmcgPSBpZGxlQ29uZi5HZXRIaWdobGlnaHQodGhlbWUsICJicmVhayIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjZmcgPSB7J2ZvcmVncm91bmQnOiAnJywgJ2JhY2tncm91bmQnOiAnJ30KKyAgICAgICAgc2VsZi50ZXh0LnRhZ19jb25maWcoJ0JSRUFLJywgY2ZnKQorCiAgICAgZGVmIHNldF9icmVha3BvaW50KHNlbGYsIGxpbmVubyk6CiAgICAgICAgIHRleHQgPSBzZWxmLnRleHQKICAgICAgICAgZmlsZW5hbWUgPSBzZWxmLmlvLmZpbGVuYW1lCiAgICAgICAgIHRleHQudGFnX2FkZCgiQlJFQUsiLCAiJWQuMCIgJSBsaW5lbm8sICIlZC4wIiAlIChsaW5lbm8rMSkpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIGkgPSBzZWxmLmJyZWFrcG9pbnRzLmluZGV4KGxpbmVubykKKyAgICAgICAgICAgIHNlbGYuYnJlYWtwb2ludHMuaW5kZXgobGluZW5vKQogICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjogICMgb25seSBhZGQgaWYgbWlzc2luZywgaS5lLiBkbyBvbmNlCiAgICAgICAgICAgICBzZWxmLmJyZWFrcG9pbnRzLmFwcGVuZChsaW5lbm8pCiAgICAgICAgIHRyeTogICAgIyB1cGRhdGUgdGhlIHN1YnByb2Nlc3MgZGVidWdnZXIKQEAgLTIxNywxMyArMjI3LDggQEAKICAgICAgICAgIyAgICAgVGhpcyBpcyBuZWNlc3NhcnkgdG8ga2VlcCB0aGUgc2F2ZWQgYnJlYWtzIHN5bmNoZWQgd2l0aCB0aGUKICAgICAgICAgIyAgICAgc2F2ZWQgZmlsZS4KICAgICAgICAgIwotICAgICAgICAjICAgICBCcmVha3BvaW50cyBhcmUgc2V0IGFzIHRhZ2dlZCByYW5nZXMgaW4gdGhlIHRleHQuICBDZXJ0YWluCi0gICAgICAgICMgICAgIGtpbmRzIG9mIGVkaXRzIGNhdXNlIHRoZXNlIHJhbmdlcyB0byBiZSBkZWxldGVkOiBJbnNlcnRpbmcKLSAgICAgICAgIyAgICAgb3IgZGVsZXRpbmcgYSBsaW5lIGp1c3QgYmVmb3JlIGEgYnJlYWtwb2ludCwgYW5kIGNlcnRhaW4KLSAgICAgICAgIyAgICAgZGVsZXRpb25zIHByaW9yIHRvIGEgYnJlYWtwb2ludC4gIFRoZXNlIGlzc3VlcyBuZWVkIHRvIGJlCi0gICAgICAgICMgICAgIGludmVzdGlnYXRlZCBhbmQgdW5kZXJzdG9vZC4gIEl0J3Mgbm90IGNsZWFyIGlmIHRoZXkgYXJlCi0gICAgICAgICMgICAgIFRrIGlzc3VlcyBvciBJRExFIGlzc3Vlcywgb3Igd2hldGhlciB0aGV5IGNhbiBhY3R1YWxseQotICAgICAgICAjICAgICBiZSBmaXhlZC4gIFNpbmNlIGEgbW9kaWZpZWQgZmlsZSBoYXMgdG8gYmUgc2F2ZWQgYmVmb3JlIGl0IGlzCisgICAgICAgICMgICAgIEJyZWFrcG9pbnRzIGFyZSBzZXQgYXMgdGFnZ2VkIHJhbmdlcyBpbiB0aGUgdGV4dC4KKyAgICAgICAgIyAgICAgU2luY2UgYSBtb2RpZmllZCBmaWxlIGhhcyB0byBiZSBzYXZlZCBiZWZvcmUgaXQgaXMKICAgICAgICAgIyAgICAgcnVuLCBhbmQgc2luY2Ugc2VsZi5icmVha3BvaW50cyAoZnJvbSB3aGljaCB0aGUgc3VicHJvY2VzcwogICAgICAgICAjICAgICBkZWJ1Z2dlciBpcyBsb2FkZWQpIGlzIHVwZGF0ZWQgZHVyaW5nIHRoZSBzYXZlLCB0aGUgdmlzaWJsZQogICAgICAgICAjICAgICBicmVha3Mgc3RheSBzeW5jaGVkIHdpdGggdGhlIHN1YnByb2Nlc3MgZXZlbiBpZiBvbmUgb2YgdGhlc2UKQEAgLTMzMyw3ICszMzgsNyBAQAogCiAgICAgZGVmIExvYWRUYWdEZWZzKHNlbGYpOgogICAgICAgICBDb2xvckRlbGVnYXRvci5Mb2FkVGFnRGVmcyhzZWxmKQotICAgICAgICB0aGVtZSA9IGlkbGVDb25mLkdldE9wdGlvbignbWFpbicsJ1RoZW1lJywnbmFtZScpCisgICAgICAgIHRoZW1lID0gaWRsZUNvbmYuQ3VycmVudFRoZW1lKCkKICAgICAgICAgc2VsZi50YWdkZWZzLnVwZGF0ZSh7CiAgICAgICAgICAgICAic3RkaW4iOiB7J2JhY2tncm91bmQnOk5vbmUsJ2ZvcmVncm91bmQnOk5vbmV9LAogICAgICAgICAgICAgInN0ZG91dCI6IGlkbGVDb25mLkdldEhpZ2hsaWdodCh0aGVtZSwgInN0ZG91dCIpLApAQCAtNDE5LDcgKzQyNCw3IEBACiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc2VsZi5ycGNjbHQgPSBNeVJQQ0NsaWVudChhZGRyKQogICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIGVycjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuZGlzcGxheV9wb3J0X2JpbmRpbmdfZXJyb3IoKQpAQCAtNDQwLDcgKzQ0NSw3IEBACiAgICAgICAgIHNlbGYucnBjY2x0Lmxpc3RlbmluZ19zb2NrLnNldHRpbWVvdXQoMTApCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYucnBjY2x0LmFjY2VwdCgpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQudGltZW91dCBhcyBlcnI6CisgICAgICAgIGV4Y2VwdCBzb2NrZXQudGltZW91dDoKICAgICAgICAgICAgIHNlbGYuZGlzcGxheV9ub19zdWJwcm9jZXNzX2Vycm9yKCkKICAgICAgICAgICAgIHJldHVybiBOb25lCiAgICAgICAgIHNlbGYucnBjY2x0LnJlZ2lzdGVyKCJjb25zb2xlIiwgc2VsZi50a2NvbnNvbGUpCkBAIC00NTQsNyArNDU5LDcgQEAKICAgICAgICAgc2VsZi5wb2xsX3N1YnByb2Nlc3MoKQogICAgICAgICByZXR1cm4gc2VsZi5ycGNjbHQKIAotICAgIGRlZiByZXN0YXJ0X3N1YnByb2Nlc3Moc2VsZiwgd2l0aF9jd2Q9RmFsc2UpOgorICAgIGRlZiByZXN0YXJ0X3N1YnByb2Nlc3Moc2VsZiwgd2l0aF9jd2Q9RmFsc2UsIGZpbGVuYW1lPScnKToKICAgICAgICAgaWYgc2VsZi5yZXN0YXJ0aW5nOgogICAgICAgICAgICAgcmV0dXJuIHNlbGYucnBjY2x0CiAgICAgICAgIHNlbGYucmVzdGFydGluZyA9IFRydWUKQEAgLTQ3NSwyNSArNDgwLDI0IEBACiAgICAgICAgIHNlbGYuc3Bhd25fc3VicHJvY2VzcygpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYucnBjY2x0LmFjY2VwdCgpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQudGltZW91dCBhcyBlcnI6CisgICAgICAgIGV4Y2VwdCBzb2NrZXQudGltZW91dDoKICAgICAgICAgICAgIHNlbGYuZGlzcGxheV9ub19zdWJwcm9jZXNzX2Vycm9yKCkKICAgICAgICAgICAgIHJldHVybiBOb25lCiAgICAgICAgIHNlbGYudHJhbnNmZXJfcGF0aCh3aXRoX2N3ZD13aXRoX2N3ZCkKICAgICAgICAgY29uc29sZS5zdG9wX3JlYWRsaW5lKCkKICAgICAgICAgIyBhbm5vdGF0ZSByZXN0YXJ0IGluIHNoZWxsIHdpbmRvdyBhbmQgbWFyayBpdAogICAgICAgICBjb25zb2xlLnRleHQuZGVsZXRlKCJpb21hcmsiLCAiZW5kLTFjIikKLSAgICAgICAgaWYgd2FzX2V4ZWN1dGluZzoKLSAgICAgICAgICAgIGNvbnNvbGUud3JpdGUoJ1xuJykKLSAgICAgICAgICAgIGNvbnNvbGUuc2hvd3Byb21wdCgpCi0gICAgICAgIGhhbGZiYXIgPSAoKGludChjb25zb2xlLndpZHRoKSAtIDE2KSAvLyAyKSAqICc9JwotICAgICAgICBjb25zb2xlLndyaXRlKGhhbGZiYXIgKyAnIFJFU1RBUlQgJyArIGhhbGZiYXIpCisgICAgICAgIHRhZyA9ICdSRVNUQVJUOiAnICsgKGZpbGVuYW1lIGlmIGZpbGVuYW1lIGVsc2UgJ1NoZWxsJykKKyAgICAgICAgaGFsZmJhciA9ICgoaW50KGNvbnNvbGUud2lkdGgpIC1sZW4odGFnKSAtIDQpIC8vIDIpICogJz0nCisgICAgICAgIGNvbnNvbGUud3JpdGUoIlxuezB9IHsxfSB7MH0iLmZvcm1hdChoYWxmYmFyLCB0YWcpKQogICAgICAgICBjb25zb2xlLnRleHQubWFya19zZXQoInJlc3RhcnQiLCAiZW5kLTFjIikKICAgICAgICAgY29uc29sZS50ZXh0Lm1hcmtfZ3Jhdml0eSgicmVzdGFydCIsICJsZWZ0IikKLSAgICAgICAgY29uc29sZS5zaG93cHJvbXB0KCkKKyAgICAgICAgaWYgbm90IGZpbGVuYW1lOgorICAgICAgICAgICAgY29uc29sZS5zaG93cHJvbXB0KCkKICAgICAgICAgIyByZXN0YXJ0IHN1YnByb2Nlc3MgZGVidWdnZXIKICAgICAgICAgaWYgZGVidWc6CiAgICAgICAgICAgICAjIFJlc3RhcnRlZCBkZWJ1Z2dlciBjb25uZWN0cyB0byBjdXJyZW50IGluc3RhbmNlIG9mIGRlYnVnIEdVSQotICAgICAgICAgICAgZ3VpID0gUmVtb3RlRGVidWdnZXIucmVzdGFydF9zdWJwcm9jZXNzX2RlYnVnZ2VyKHNlbGYucnBjY2x0KQorICAgICAgICAgICAgUmVtb3RlRGVidWdnZXIucmVzdGFydF9zdWJwcm9jZXNzX2RlYnVnZ2VyKHNlbGYucnBjY2x0KQogICAgICAgICAgICAgIyByZWxvYWQgcmVtb3RlIGRlYnVnZ2VyIGJyZWFrcG9pbnRzIGZvciBhbGwgUHlTaGVsbEVkaXRXaW5kb3dzCiAgICAgICAgICAgICBkZWJ1Zy5sb2FkX2JyZWFrcG9pbnRzKCkKICAgICAgICAgc2VsZi5jb21waWxlLmNvbXBpbGVyLmZsYWdzID0gc2VsZi5vcmlnaW5hbF9jb21waWxlcl9mbGFncwpAQCAtNjE3LDcgKzYyMSw3IEBACiAgICAgICAgIGl0ZW0gPSBSZW1vdGVPYmplY3RCcm93c2VyLlN0dWJPYmplY3RUcmVlSXRlbShzZWxmLnJwY2NsdCwgb2lkKQogICAgICAgICBmcm9tIGlkbGVsaWIuVHJlZVdpZGdldCBpbXBvcnQgU2Nyb2xsZWRDYW52YXMsIFRyZWVOb2RlCiAgICAgICAgIHRvcCA9IFRvcGxldmVsKHNlbGYudGtjb25zb2xlLnJvb3QpCi0gICAgICAgIHRoZW1lID0gaWRsZUNvbmYuR2V0T3B0aW9uKCdtYWluJywnVGhlbWUnLCduYW1lJykKKyAgICAgICAgdGhlbWUgPSBpZGxlQ29uZi5DdXJyZW50VGhlbWUoKQogICAgICAgICBiYWNrZ3JvdW5kID0gaWRsZUNvbmYuR2V0SGlnaGxpZ2h0KHRoZW1lLCAnbm9ybWFsJylbJ2JhY2tncm91bmQnXQogICAgICAgICBzYyA9IFNjcm9sbGVkQ2FudmFzKHRvcCwgYmc9YmFja2dyb3VuZCwgaGlnaGxpZ2h0dGhpY2tuZXNzPTApCiAgICAgICAgIHNjLmZyYW1lLnBhY2soZXhwYW5kPTEsIGZpbGw9ImJvdGgiKQpAQCAtNjQxLDkgKzY0NSw5IEBACiAgICAgICAgICAgICBjb2RlID0gY29tcGlsZShzb3VyY2UsIGZpbGVuYW1lLCAiZXhlYyIpCiAgICAgICAgIGV4Y2VwdCAoT3ZlcmZsb3dFcnJvciwgU3ludGF4RXJyb3IpOgogICAgICAgICAgICAgc2VsZi50a2NvbnNvbGUucmVzZXRvdXRwdXQoKQotICAgICAgICAgICAgdGtlcnIgPSBzZWxmLnRrY29uc29sZS5zdGRlcnIKLSAgICAgICAgICAgIHByaW50KCcqKiogRXJyb3IgaW4gc2NyaXB0IG9yIGNvbW1hbmQhXG4nLCBmaWxlPXRrZXJyKQotICAgICAgICAgICAgcHJpbnQoJ1RyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KTonLCBmaWxlPXRrZXJyKQorICAgICAgICAgICAgcHJpbnQoJyoqKiBFcnJvciBpbiBzY3JpcHQgb3IgY29tbWFuZCFcbicKKyAgICAgICAgICAgICAgICAgJ1RyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KTonLAorICAgICAgICAgICAgICAgICAgZmlsZT1zZWxmLnRrY29uc29sZS5zdGRlcnIpCiAgICAgICAgICAgICBJbnRlcmFjdGl2ZUludGVycHJldGVyLnNob3dzeW50YXhlcnJvcihzZWxmLCBmaWxlbmFtZSkKICAgICAgICAgICAgIHNlbGYudGtjb25zb2xlLnNob3dwcm9tcHQoKQogICAgICAgICBlbHNlOgpAQCAtNzcwLDcgKzc3NCw3IEBACiAgICAgICAgICAgICAgICAgICAgICJFeGl0PyIsCiAgICAgICAgICAgICAgICAgICAgICJEbyB5b3Ugd2FudCB0byBleGl0IGFsdG9nZXRoZXI/IiwKICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD0ieWVzIiwKLSAgICAgICAgICAgICAgICAgICAgbWFzdGVyPXNlbGYudGtjb25zb2xlLnRleHQpOgorICAgICAgICAgICAgICAgICAgICBwYXJlbnQ9c2VsZi50a2NvbnNvbGUudGV4dCk6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgc2VsZi5zaG93dHJhY2ViYWNrKCkKQEAgLTgwOCw3ICs4MTIsNyBAQAogICAgICAgICAgICAgIlJ1biBJRExFIHdpdGggdGhlIC1uIGNvbW1hbmQgbGluZSBzd2l0Y2ggdG8gc3RhcnQgd2l0aG91dCBhICIKICAgICAgICAgICAgICJzdWJwcm9jZXNzIGFuZCByZWZlciB0byBIZWxwL0lETEUgSGVscCAnUnVubmluZyB3aXRob3V0IGEgIgogICAgICAgICAgICAgInN1YnByb2Nlc3MnIGZvciBmdXJ0aGVyIGRldGFpbHMuIiwKLSAgICAgICAgICAgIG1hc3Rlcj1zZWxmLnRrY29uc29sZS50ZXh0KQorICAgICAgICAgICAgcGFyZW50PXNlbGYudGtjb25zb2xlLnRleHQpCiAKICAgICBkZWYgZGlzcGxheV9ub19zdWJwcm9jZXNzX2Vycm9yKHNlbGYpOgogICAgICAgICB0a01lc3NhZ2VCb3guc2hvd2Vycm9yKApAQCAtODE2LDE0ICs4MjAsMTQgQEAKICAgICAgICAgICAgICJJRExFJ3Mgc3VicHJvY2VzcyBkaWRuJ3QgbWFrZSBjb25uZWN0aW9uLiAgRWl0aGVyIElETEUgY2FuJ3QgIgogICAgICAgICAgICAgInN0YXJ0IGEgc3VicHJvY2VzcyBvciBwZXJzb25hbCBmaXJld2FsbCBzb2Z0d2FyZSBpcyBibG9ja2luZyAiCiAgICAgICAgICAgICAidGhlIGNvbm5lY3Rpb24uIiwKLSAgICAgICAgICAgIG1hc3Rlcj1zZWxmLnRrY29uc29sZS50ZXh0KQorICAgICAgICAgICAgcGFyZW50PXNlbGYudGtjb25zb2xlLnRleHQpCiAKICAgICBkZWYgZGlzcGxheV9leGVjdXRpbmdfZGlhbG9nKHNlbGYpOgogICAgICAgICB0a01lc3NhZ2VCb3guc2hvd2Vycm9yKAogICAgICAgICAgICAgIkFscmVhZHkgZXhlY3V0aW5nIiwKICAgICAgICAgICAgICJUaGUgUHl0aG9uIFNoZWxsIHdpbmRvdyBpcyBhbHJlYWR5IGV4ZWN1dGluZyBhIGNvbW1hbmQ7ICIKICAgICAgICAgICAgICJwbGVhc2Ugd2FpdCB1bnRpbCBpdCBpcyBmaW5pc2hlZC4iLAotICAgICAgICAgICAgbWFzdGVyPXNlbGYudGtjb25zb2xlLnRleHQpCisgICAgICAgICAgICBwYXJlbnQ9c2VsZi50a2NvbnNvbGUudGV4dCkKIAogCiBjbGFzcyBQeVNoZWxsKE91dHB1dFdpbmRvdyk6CkBAIC04NDAsMTMgKzg0NCwxMCBAQAogICAgICAgICAoImVkaXQiLCAiX0VkaXQiKSwKICAgICAgICAgKCJkZWJ1ZyIsICJfRGVidWciKSwKICAgICAgICAgKCJvcHRpb25zIiwgIl9PcHRpb25zIiksCi0gICAgICAgICgid2luZG93cyIsICJfV2luZG93cyIpLAorICAgICAgICAoIndpbmRvd3MiLCAiX1dpbmRvdyIpLAogICAgICAgICAoImhlbHAiLCAiX0hlbHAiKSwKICAgICBdCiAKLSAgICBpZiBtYWNvc3hTdXBwb3J0LnJ1bm5pbmdBc09TWEFwcCgpOgotICAgICAgICBtZW51X3NwZWNzWy0yXSA9ICgid2luZG93cyIsICJfV2luZG93IikKLQogCiAgICAgIyBOZXcgY2xhc3NlcwogICAgIGZyb20gaWRsZWxpYi5JZGxlSGlzdG9yeSBpbXBvcnQgSGlzdG9yeQpAQCAtOTMwLDcgKzkzMSw3IEBACiAgICAgICAgIGlmIHNlbGYuZXhlY3V0aW5nOgogICAgICAgICAgICAgdGtNZXNzYWdlQm94LnNob3dlcnJvcigiRG9uJ3QgZGVidWcgbm93IiwKICAgICAgICAgICAgICAgICAiWW91IGNhbiBvbmx5IHRvZ2dsZSB0aGUgZGVidWdnZXIgd2hlbiBpZGxlIiwKLSAgICAgICAgICAgICAgICBtYXN0ZXI9c2VsZi50ZXh0KQorICAgICAgICAgICAgICAgIHBhcmVudD1zZWxmLnRleHQpCiAgICAgICAgICAgICBzZWxmLnNldF9kZWJ1Z2dlcl9pbmRpY2F0b3IoKQogICAgICAgICAgICAgcmV0dXJuICJicmVhayIKICAgICAgICAgZWxzZToKQEAgLTk4OCw3ICs5ODksNyBAQAogICAgICAgICBpZiBzZWxmLmV4ZWN1dGluZzoKICAgICAgICAgICAgIHJlc3BvbnNlID0gdGtNZXNzYWdlQm94LmFza29rY2FuY2VsKAogICAgICAgICAgICAgICAgICJLaWxsPyIsCi0gICAgICAgICAgICAgICAgIlRoZSBwcm9ncmFtIGlzIHN0aWxsIHJ1bm5pbmchXG4gRG8geW91IHdhbnQgdG8ga2lsbCBpdD8iLAorICAgICAgICAgICAgICAgICJZb3VyIHByb2dyYW0gaXMgc3RpbGwgcnVubmluZyFcbiBEbyB5b3Ugd2FudCB0byBraWxsIGl0PyIsCiAgICAgICAgICAgICAgICAgZGVmYXVsdD0ib2siLAogICAgICAgICAgICAgICAgIHBhcmVudD1zZWxmLnRleHQpCiAgICAgICAgICAgICBpZiByZXNwb25zZSBpcyBGYWxzZToKQEAgLTEwMzQsMTEgKzEwMzUsMTUgQEAKICAgICAgICAgICAgICAgICBzZWxmLmNsb3NlKCkKICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIG5vc3ViID0gIj09PT0gTm8gU3VicHJvY2VzcyA9PT09IgorICAgICAgICAgICAgbm9zdWIgPSAoIj09PT0gTm8gU3VicHJvY2VzcyA9PT09XG5cbiIgKworICAgICAgICAgICAgICAgICAgICAiV0FSTklORzogUnVubmluZyBJRExFIHdpdGhvdXQgYSBTdWJwcm9jZXNzIGlzIGRlcHJlY2F0ZWRcbiIgKworICAgICAgICAgICAgICAgICAgICAiYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGxhdGVyIHZlcnNpb24uIFNlZSBIZWxwL0lETEUgSGVscFxuIiArCisgICAgICAgICAgICAgICAgICAgICJmb3IgZGV0YWlscy5cblxuIikKICAgICAgICAgICAgIHN5cy5kaXNwbGF5aG9vayA9IHJwYy5kaXNwbGF5aG9vawogCiAgICAgICAgIHNlbGYud3JpdGUoIlB5dGhvbiAlcyBvbiAlc1xuJXNcbiVzIiAlCiAgICAgICAgICAgICAgICAgICAgKHN5cy52ZXJzaW9uLCBzeXMucGxhdGZvcm0sIHNlbGYuQ09QWVJJR0hULCBub3N1YikpCisgICAgICAgIHNlbGYudGV4dC5mb2N1c19mb3JjZSgpCiAgICAgICAgIHNlbGYuc2hvd3Byb21wdCgpCiAgICAgICAgIGltcG9ydCB0a2ludGVyCiAgICAgICAgIHRraW50ZXIuX2RlZmF1bHRfcm9vdCA9IE5vbmUgIyAwM0phbjA0IEtCSyBXaGF0J3MgdGhpcz8KQEAgLTEyMjMsNyArMTIyOCw3IEBACiAgICAgICAgIHdoaWxlIGkgPiAwIGFuZCBsaW5lW2ktMV0gaW4gIiBcdCI6CiAgICAgICAgICAgICBpID0gaS0xCiAgICAgICAgIGxpbmUgPSBsaW5lWzppXQotICAgICAgICBtb3JlID0gc2VsZi5pbnRlcnAucnVuc291cmNlKGxpbmUpCisgICAgICAgIHNlbGYuaW50ZXJwLnJ1bnNvdXJjZShsaW5lKQogCiAgICAgZGVmIG9wZW5fc3RhY2tfdmlld2VyKHNlbGYsIGV2ZW50PU5vbmUpOgogICAgICAgICBpZiBzZWxmLmludGVycC5ycGNjbHQ6CkBAIC0xMjM0LDEwICsxMjM5LDEwIEBACiAgICAgICAgICAgICB0a01lc3NhZ2VCb3guc2hvd2Vycm9yKCJObyBzdGFjayB0cmFjZSIsCiAgICAgICAgICAgICAgICAgIlRoZXJlIGlzIG5vIHN0YWNrIHRyYWNlIHlldC5cbiIKICAgICAgICAgICAgICAgICAiKHN5cy5sYXN0X3RyYWNlYmFjayBpcyBub3QgZGVmaW5lZCkiLAotICAgICAgICAgICAgICAgIG1hc3Rlcj1zZWxmLnRleHQpCisgICAgICAgICAgICAgICAgcGFyZW50PXNlbGYudGV4dCkKICAgICAgICAgICAgIHJldHVybgogICAgICAgICBmcm9tIGlkbGVsaWIuU3RhY2tWaWV3ZXIgaW1wb3J0IFN0YWNrQnJvd3NlcgotICAgICAgICBzdiA9IFN0YWNrQnJvd3NlcihzZWxmLnJvb3QsIHNlbGYuZmxpc3QpCisgICAgICAgIFN0YWNrQnJvd3NlcihzZWxmLnJvb3QsIHNlbGYuZmxpc3QpCiAKICAgICBkZWYgdmlld19yZXN0YXJ0X21hcmsoc2VsZiwgZXZlbnQ9Tm9uZSk6CiAgICAgICAgIHNlbGYudGV4dC5zZWUoImlvbWFyayIpCkBAIC0xMzk4LDcgKzE0MDMsOCBAQAogICAgICAgIGlkbGUgIFstZG5zXSBbLXQgdGl0bGVdIC0gW2FyZ10qCiAKICAgLWggICAgICAgICBwcmludCB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAotICAtbiAgICAgICAgIHJ1biBJRExFIHdpdGhvdXQgYSBzdWJwcm9jZXNzIChzZWUgSGVscC9JRExFIEhlbHAgZm9yIGRldGFpbHMpCisgIC1uICAgICAgICAgcnVuIElETEUgd2l0aG91dCBhIHN1YnByb2Nlc3MgKERFUFJFQ0FURUQsCisgICAgICAgICAgICAgc2VlIEhlbHAvSURMRSBIZWxwIGZvciBkZXRhaWxzKQogCiBUaGUgZm9sbG93aW5nIG9wdGlvbnMgd2lsbCBvdmVycmlkZSB0aGUgSURMRSAnc2V0dGluZ3MnIGNvbmZpZ3VyYXRpb246CiAKQEAgLTE0NTgsOCArMTQ2NCw3IEBACiAgICAgdHJ5OgogICAgICAgICBvcHRzLCBhcmdzID0gZ2V0b3B0LmdldG9wdChzeXMuYXJndlsxOl0sICJjOmRlaWhucjpzdDoiKQogICAgIGV4Y2VwdCBnZXRvcHQuZXJyb3IgYXMgbXNnOgotICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJFcnJvcjogJXNcbiIgJSBzdHIobXNnKSkKLSAgICAgICAgc3lzLnN0ZGVyci53cml0ZSh1c2FnZV9tc2cpCisgICAgICAgIHByaW50KCJFcnJvcjogJXNcbiVzIiAlIChtc2csIHVzYWdlX21zZyksIGZpbGU9c3lzLnN0ZGVycikKICAgICAgICAgc3lzLmV4aXQoMikKICAgICBmb3IgbywgYSBpbiBvcHRzOgogICAgICAgICBpZiBvID09ICctYyc6CkBAIC0xNDc2LDYgKzE0ODEsOCBAQAogICAgICAgICBpZiBvID09ICctaSc6CiAgICAgICAgICAgICBlbmFibGVfc2hlbGwgPSBUcnVlCiAgICAgICAgIGlmIG8gPT0gJy1uJzoKKyAgICAgICAgICAgIHByaW50KCIgV2FybmluZzogcnVubmluZyBJRExFIHdpdGhvdXQgYSBzdWJwcm9jZXNzIGlzIGRlcHJlY2F0ZWQuIiwKKyAgICAgICAgICAgICAgICAgIGZpbGU9c3lzLnN0ZGVycikKICAgICAgICAgICAgIHVzZV9zdWJwcm9jZXNzID0gRmFsc2UKICAgICAgICAgaWYgbyA9PSAnLXInOgogICAgICAgICAgICAgc2NyaXB0ID0gYQpAQCAtMTU0MSw2ICsxNTQ4LDE0IEBACiAgICAgZmxpc3QgPSBQeVNoZWxsRmlsZUxpc3Qocm9vdCkKICAgICBtYWNvc3hTdXBwb3J0LnNldHVwQXBwKHJvb3QsIGZsaXN0KQogCisgICAgaWYgbWFjb3N4U3VwcG9ydC5pc0FxdWFUaygpOgorICAgICAgICAjIFRoZXJlIGFyZSBzb21lIHNjcmV3ZWQgdXAgPDI+IGNsYXNzIGJpbmRpbmdzIGZvciB0ZXh0CisgICAgICAgICMgd2lkZ2V0cyBkZWZpbmVkIGluIFRrIHdoaWNoIHdlIG5lZWQgdG8gZG8gYXdheSB3aXRoLgorICAgICAgICAjIFNlZSBpc3N1ZSAjMjQ4MDEuCisgICAgICAgIHJvb3QudW5iaW5kX2NsYXNzKCdUZXh0JywgJzxCMj4nKQorICAgICAgICByb290LnVuYmluZF9jbGFzcygnVGV4dCcsICc8QjItTW90aW9uPicpCisgICAgICAgIHJvb3QudW5iaW5kX2NsYXNzKCdUZXh0JywgJzw8UGFzdGVTZWxlY3Rpb24+PicpCisKICAgICBpZiBlbmFibGVfZWRpdDoKICAgICAgICAgaWYgbm90IChjbWQgb3Igc2NyaXB0KToKICAgICAgICAgICAgIGZvciBmaWxlbmFtZSBpbiBhcmdzWzpdOgpAQCAtMTU1NCw3ICsxNTY5LDcgQEAKICAgICAgICAgc2hlbGwgPSBmbGlzdC5vcGVuX3NoZWxsKCkKICAgICAgICAgaWYgbm90IHNoZWxsOgogICAgICAgICAgICAgcmV0dXJuICMgY291bGRuJ3Qgb3BlbiBzaGVsbAotICAgICAgICBpZiBtYWNvc3hTdXBwb3J0LnJ1bm5pbmdBc09TWEFwcCgpIGFuZCBmbGlzdC5kaWN0OgorICAgICAgICBpZiBtYWNvc3hTdXBwb3J0LmlzQXF1YVRrKCkgYW5kIGZsaXN0LmRpY3Q6CiAgICAgICAgICAgICAjIE9uIE9TWDogd2hlbiB0aGUgdXNlciBoYXMgZG91YmxlLWNsaWNrZWQgb24gYSBmaWxlIHRoYXQgY2F1c2VzCiAgICAgICAgICAgICAjIElETEUgdG8gYmUgbGF1bmNoZWQgdGhlIHNoZWxsIHdpbmRvdyB3aWxsIG9wZW4ganVzdCBpbiBmcm9udCBvZgogICAgICAgICAgICAgIyB0aGUgZmlsZSBzaGUgd2FudHMgdG8gc2VlLiBMb3dlciB0aGUgaW50ZXJwcmV0ZXIgd2luZG93IHdoZW4KZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL1JFQURNRS50eHQgYi9MaWIvaWRsZWxpYi9SRUFETUUudHh0CmluZGV4IGIyYmI3M2IuLjdiZjc0YzAgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL1JFQURNRS50eHQKKysrIGIvTGliL2lkbGVsaWIvUkVBRE1FLnR4dApAQCAtMSw2MCArMSwyMjkgQEAKLUlETEUgaXMgUHl0aG9uJ3MgVGtpbnRlci1iYXNlZCBJbnRlZ3JhdGVkIERldmVMb3BtZW50IEVudmlyb25tZW50LgorUkVBRE1FLnR4dDogYW4gaW5kZXggdG8gaWRsZWxpYiBmaWxlcyBhbmQgdGhlIElETEUgbWVudS4KIAotSURMRSBlbXBoYXNpemVzIGEgbGlnaHR3ZWlnaHQsIGNsZWFuIGRlc2lnbiB3aXRoIGEgc2ltcGxlIHVzZXIgaW50ZXJmYWNlLgotQWx0aG91Z2ggaXQgaXMgc3VpdGFibGUgZm9yIGJlZ2lubmVycywgZXZlbiBhZHZhbmNlZCB1c2VycyB3aWxsIGZpbmQgdGhhdAotSURMRSBoYXMgZXZlcnl0aGluZyB0aGV5IHJlYWxseSBuZWVkIHRvIGRldmVsb3AgcHVyZSBQeXRob24gY29kZS4KK0lETEUgaXMgUHl0aG9uJ3MgSW50ZWdyYXRlZCBEZXZlbG9wbWVudCBhbmQgTGVhcm5pbmcKK0Vudmlyb25tZW50LiAgVGhlIHVzZXIgZG9jdW1lbnRhdGlvbiBpcyBwYXJ0IG9mIHRoZSBMaWJyYXJ5IFJlZmVyZW5jZSBhbmQKK2lzIGF2YWlsYWJsZSBpbiBJRExFIGJ5IHNlbGVjdGluZyBIZWxwID0+IElETEUgSGVscC4gIFRoaXMgUkVBRE1FIGRvY3VtZW50cworaWRsZWxpYiBmb3IgSURMRSBkZXZlbG9wZXJzIGFuZCBjdXJpb3VzIHVzZXJzLgogCi1JRExFIGZlYXR1cmVzIGEgbXVsdGktd2luZG93IHRleHQgZWRpdG9yIHdpdGggbXVsdGlwbGUgdW5kbywgUHl0aG9uIGNvbG9yaXppbmcsCi1hbmQgbWFueSBvdGhlciBjYXBhYmlsaXRpZXMsIGUuZy4gc21hcnQgaW5kZW50LCBjYWxsIHRpcHMsIGFuZCBhdXRvY29tcGxldGlvbi4KK0lETEVMSUIgRklMRVMgbGlzdHMgZmlsZXMgYWxwaGFiZXRpY2FsbHkgYnkgY2F0ZWdvcnksCit3aXRoIGEgc2hvcnQgZGVzY3JpcHRpb24gb2YgZWFjaC4KIAotVGhlIGVkaXRvciBoYXMgY29tcHJlaGVuc2l2ZSBzZWFyY2ggZnVuY3Rpb25zLCBpbmNsdWRpbmcgc2VhcmNoaW5nIHRocm91Z2gKLW11bHRpcGxlIGZpbGVzLiAgQ2xhc3MgYnJvd3NlcnMgYW5kIHBhdGggYnJvd3NlcnMgcHJvdmlkZSBmYXN0IGFjY2VzcyB0bwotY29kZSBvYmplY3RzIGZyb20gYSB0b3AgbGV2ZWwgdmlld3BvaW50IHdpdGhvdXQgZGVhbGluZyB3aXRoIGNvZGUgZm9sZGluZy4KK0lETEUgTUVOVSBzaG93IHRoZSBtZW51IHRyZWUsIGFubm90YXRlZCB3aXRoIHRoZSBtb2R1bGUKK29yIG1vZHVsZSBvYmplY3QgdGhhdCBpbXBsZW1lbnRzIHRoZSBjb3JyZXNwb25kaW5nIGZ1bmN0aW9uLgogCi1UaGVyZSBpcyBhIFB5dGhvbiBTaGVsbCB3aW5kb3cgd2hpY2ggZmVhdHVyZXMgY29sb3JpemluZyBhbmQgY29tbWFuZCByZWNhbGwuCi0KLUlETEUgZXhlY3V0ZXMgUHl0aG9uIGNvZGUgaW4gYSBzZXBhcmF0ZSBwcm9jZXNzLCB3aGljaCBpcyByZXN0YXJ0ZWQgZm9yIGVhY2gKLVJ1biAoRjUpIGluaXRpYXRlZCBmcm9tIGFuIGVkaXRvciB3aW5kb3cuICBUaGUgZW52aXJvbm1lbnQgY2FuIGFsc28gYmUgCi1yZXN0YXJ0ZWQgZnJvbSB0aGUgU2hlbGwgd2luZG93IHdpdGhvdXQgcmVzdGFydGluZyBJRExFLgotCi1UaGlzIGVuaGFuY2VtZW50IGhhcyBvZnRlbiBiZWVuIHJlcXVlc3RlZCwgYW5kIGlzIG5vdyBmaW5hbGx5IGF2YWlsYWJsZS4gIFRoZQotbWFnaWMgInJlbG9hZC9pbXBvcnQgKiIgaW5jYW50YXRpb25zIGFyZSBubyBsb25nZXIgcmVxdWlyZWQgd2hlbiBlZGl0aW5nIGFuZAotdGVzdGluZyBhIG1vZHVsZSB0d28gb3IgdGhyZWUgc3RlcHMgZG93biB0aGUgaW1wb3J0IGNoYWluLgotCi0oUGVyc29uYWwgZmlyZXdhbGwgc29mdHdhcmUgbWF5IHdhcm4gYWJvdXQgdGhlIGNvbm5lY3Rpb24gSURMRSBtYWtlcyB0byBpdHMKLXN1YnByb2Nlc3MgdXNpbmcgdGhpcyBjb21wdXRlcidzIGludGVybmFsIGxvb3BiYWNrIGludGVyZmFjZS4gIFRoaXMgY29ubmVjdGlvbgotaXMgbm90IHZpc2libGUgb24gYW55IGV4dGVybmFsIGludGVyZmFjZSBhbmQgbm8gZGF0YSBpcyBzZW50IHRvIG9yIHJlY2VpdmVkCi1mcm9tIHRoZSBJbnRlcm5ldC4pCi0KLUl0IGlzIHBvc3NpYmxlIHRvIGludGVycnVwdCB0aWdodGx5IGxvb3BpbmcgdXNlciBjb2RlLCBldmVuIG9uIFdpbmRvd3MuCi0KLUFwcGxpY2F0aW9ucyB3aGljaCBjYW5ub3Qgc3VwcG9ydCBzdWJwcm9jZXNzZXMgYW5kL29yIHNvY2tldHMgY2FuIHN0aWxsIHJ1bgotSURMRSBpbiBhIHNpbmdsZSBwcm9jZXNzLgotCi1JRExFIGhhcyBhbiBpbnRlZ3JhdGVkIGRlYnVnZ2VyIHdpdGggc3RlcHBpbmcsIHBlcnNpc3RlbnQgYnJlYWtwb2ludHMsIGFuZCBjYWxsCi1zdGFjayB2aXNpYmlsaXR5LgotCi1UaGVyZSBpcyBhIEdVSSBjb25maWd1cmF0aW9uIG1hbmFnZXIgd2hpY2ggbWFrZXMgaXQgZWFzeSB0byBzZWxlY3QgZm9udHMsCi1jb2xvcnMsIGtleWJpbmRpbmdzLCBhbmQgc3RhcnR1cCBvcHRpb25zLiAgVGhpcyBmYWNpbGl0eSBpbmNsdWRlcyBhIGZlYXR1cmUKLXdoaWNoIGFsbG93cyB0aGUgdXNlciB0byBzcGVjaWZ5IGFkZGl0aW9uYWwgaGVscCBzb3VyY2VzLCBlaXRoZXIgbG9jYWxseSBvciBvbgotdGhlIHdlYi4KLQotSURMRSBpcyBjb2RlZCBpbiAxMDAlIHB1cmUgUHl0aG9uLCB1c2luZyB0aGUgVGtpbnRlciBHVUkgdG9vbGtpdCAoVGsvVGNsKQotYW5kIGlzIGNyb3NzLXBsYXRmb3JtLCB3b3JraW5nIG9uIFVuaXgsIE1hYywgYW5kIFdpbmRvd3MuCi0KLUlETEUgYWNjZXB0cyBjb21tYW5kIGxpbmUgYXJndW1lbnRzLiAgVHJ5IGlkbGUgLWggdG8gc2VlIHRoZSBvcHRpb25zLgorVGhpcyBmaWxlIGlzIGRlc2NyaXB0aXZlLCBub3QgcHJlc2NyaXB0aXZlLCBhbmQgbWF5IGhhdmUgZXJyb3JzCithbmQgb21pc3Npb25zIGFuZCBsYWcgYmVoaW5kIGNoYW5nZXMgaW4gaWRsZWxpYi4KIAogCi1JZiB5b3UgZmluZCBidWdzIG9yIGhhdmUgc3VnZ2VzdGlvbnMgb3IgcGF0Y2hlcywgbGV0IHVzIGtub3cgYWJvdXQKLXRoZW0gYnkgdXNpbmcgdGhlIFB5dGhvbiBpc3N1ZSB0cmFja2VyOgorSURMRUxJQiBGSUxFUworSW1wbGVtZXRhdGlvbiBmaWxlcyBub3QgaW4gSURMRSBNRU5VIGFyZSBtYXJrZWQgKG5pbSkuCitEZXByZWNhdGVkIGZpbGVzIGFuZCBvYmplY3RzIGFyZSBsaXN0ZWQgc2VwYXJhdGVseSBhcyB0aGUgZW5kLgogCi1odHRwOi8vYnVncy5weXRob24ub3JnCitTdGFydHVwCistLS0tLS0tCitfX2luaXRfXy5weSAgIyBpbXBvcnQsIGRvZXMgbm90aGluZworX19tYWluX18ucHkgICMgLW0sIHN0YXJ0cyBJRExFCitpZGxlLmJhdAoraWRsZS5weQoraWRsZS5weXcKIAotRm9yIGZ1cnRoZXIgZGV0YWlscyBhbmQgbGlua3MsIHJlYWQgdGhlIEhlbHAgZmlsZXMgYW5kIGNoZWNrIHRoZSBJRExFIGhvbWUKLXBhZ2UgYXQKK0ltcGxlbWVudGF0aW9uCistLS0tLS0tLS0tLS0tLQorQXV0b0NvbXBsZXRlLnB5ICAgIyBDb21wbGV0ZSBhdHRyaWJ1dGUgbmFtZXMgb3IgZmlsZW5hbWVzLgorQXV0b0NvbXBsZXRlV2luZG93LnB5ICAjIERpc3BsYXkgY29tcGxldGlvbnMuCitBdXRvRXhwYW5kLnB5ICAgICAjIEV4cGFuZCB3b3JkIHdpdGggcHJldmlvdXMgd29yZCBpbiBmaWxlLgorQmluZGluZ3MucHkgICAgICAgIyBEZWZpbmUgbW9zdCBvZiBJRExFIG1lbnUuCitDYWxsVGlwV2luZG93LnB5ICAjIERpc3BsYXkgY2FsbHRpcC4KK0NhbGxUaXBzLnB5ICAgICAgICMgQ3JlYXRlIGNhbGx0aXAgdGV4dC4KK0NsYXNzQnJvd3Nlci5weSAgICMgQ3JlYXRlIG1vZHVsZSBicm93c2VyIHdpbmRvdy4KK0NvZGVDb250ZXh0LnB5ICAgICMgU2hvdyBjb21wb3VuZCBzdGF0ZW1lbnQgaGVhZGVycyBvdGhlcndpc2Ugbm90IHZpc2libGUuCitDb2xvckRlbGVnYXRvci5weSAjIENvbG9yaXplIHRleHQgKG5pbSkuCitEZWJ1Z2dlci5weSAgICAgICAjIERlYnVnIGNvZGUgcnVuIGZyb20gZWRpdG9yOyBzaG93IHdpbmRvdy4KK0RlbGVnYXRvci5weSAgICAgICMgRGVmaW5lIGJhc2UgY2xhc3MgZm9yIGRlbGVnYXRvcnMgKG5pbSkuCitFZGl0b3JXaW5kb3cucHkgICAjIERlZmluZSBtb3N0IG9mIGVkaXRvciBhbmQgdXRpbGl0eSBmdW5jdGlvbnMuCitGaWxlTGlzdC5weSAgICAgICAjIE9wZW4gZmlsZXMgYW5kIG1hbmFnZSBsaXN0IG9mIG9wZW4gd2luZG93cyAobmltKS4KK0Zvcm1hdFBhcmFncmFwaC5weSMgUmUtd3JhcCBtdWx0aWxpbmUgc3RyaW5ncyBhbmQgY29tbWVudHMuCitHcmVwRGlhbG9nLnB5ICAgICAjIEZpbmQgYWxsIG9jY3VycmVuY2VzIG9mIHBhdHRlcm4gaW4gbXVsdGlwbGUgZmlsZXMuCitIeXBlclBhcnNlci5weSAgICAjIFBhcnNlIGNvZGUgYXJvdW5kIGEgZ2l2ZW4gaW5kZXguCitJT0JpbmRpbmcucHkgICAgICAjIE9wZW4sIHJlYWQsIGFuZCB3cml0ZSBmaWxlcworSWRsZUhpc3RvcnkucHkgICAgIyBHZXQgcHJldmlvdXMgb3IgbmV4dCB1c2VyIGlucHV0IGluIHNoZWxsIChuaW0pCitNdWx0aUNhbGwucHkgICAgICAjIFdyYXAgdGsgd2lkZ2V0IHRvIGFsbG93IG11bHRpcGxlIGNhbGxzIHBlciBldmVudCAobmltKS4KK011bHRpU3RhdHVzQmFyLnB5ICMgRGVmaW5lIHN0YXR1cyBiYXIgZm9yIHdpbmRvd3MgKG5pbSkuCitPYmplY3RCcm93c2VyLnB5ICAjIERlZmluZSBjbGFzcyB1c2VkIGluIFN0YWNrVmlld2VyIChuaW0pLgorT3V0cHV0V2luZG93LnB5ICAgIyBDcmVhdGUgd2luZG93IGZvciBncmVwIG91dHB1dC4KK1BhcmVuTWF0Y2gucHkgICAgICMgTWF0Y2ggZmVuY2Vwb3N0czogKCksIFtdLCBhbmQge30uCitQYXRoQnJvd3Nlci5weSAgICAjIENyZWF0ZSBwYXRoIGJyb3dzZXIgd2luZG93LgorUGVyY29sYXRvci5weSAgICAgIyBNYW5hZ2UgZGVsZWdhdG9yIHN0YWNrIChuaW0pLgorUHlQYXJzZS5weSAgICAgICAgIyBHaXZlIGluZm9ybWF0aW9uIG9uIGNvZGUgaW5kZW50YXRpb24KK1B5U2hlbGwucHkgICAgICAgICMgU3RhcnQgSURMRSwgbWFuYWdlIHNoZWxsLCBjb21wbGV0ZSBlZGl0b3Igd2luZG93CitSZW1vdGVEZWJ1Z2dlci5weSAjIERlYnVnIGNvZGUgcnVuIGluIHJlbW90ZSBwcm9jZXNzLgorUmVtb3RlT2JqZWN0QnJvd3Nlci5weSAjIENvbW11bmljYXRlIG9iamVjdHMgYmV0d2VlbiBwcm9jZXNzZXMgd2l0aCBycGMgKG5pbSkuCitSZXBsYWNlRGlhbG9nLnB5ICAjIFNlYXJjaCBhbmQgcmVwbGFjZSBwYXR0ZXJuIGluIHRleHQuCitSc3RyaXBFeHRlbnNpb24ucHkjIFN0cmlwIHRyYWlsaW5nIHdoaXRlc3BhY2UKK1NjcmlwdEJpbmRpbmcucHkgICMgQ2hlY2sgYW5kIHJ1biB1c2VyIGNvZGUuCitTY3JvbGxlZExpc3QucHkgICAjIERlZmluZSBTY3JvbGxlZExpc3Qgd2lkZ2V0IGZvciBJRExFIChuaW0pLgorU2VhcmNoRGlhbG9nLnB5ICAgIyBTZWFyY2ggZm9yIHBhdHRlcm4gaW4gdGV4dC4KK1NlYXJjaERpYWxvZ0Jhc2UucHkgICMgRGVmaW5lIGJhc2UgZm9yIHNlYXJjaCwgcmVwbGFjZSwgYW5kIGdyZXAgZGlhbG9ncy4KK1NlYXJjaEVuZ2luZS5weSAgICMgRGVmaW5lIGVuZ2luZSBmb3IgYWxsIDMgc2VhcmNoIGRpYWxvZ3MuCitTdGFja1ZpZXdlci5weSAgICAjIFZpZXcgc3RhY2sgYWZ0ZXIgZXhjZXB0aW9uLgorVHJlZVdpZGdldC5weSAgICAgIyBEZWZpbmUgdHJlZSB3aWRnZXIsIHVzZWQgaW4gYnJvd3NlcnMgKG5pbSkuCitVbmRvRGVsZWdhdG9yLnB5ICAjIE1hbmFnZSB1bmRvIHN0YWNrLgorV2lkZ2V0UmVkaXJlY3Rvci5weSAjIEludGVyY2VwdCB3aWRnZXQgc3ViY29tbWFuZHMgKGZvciBwZXJjb2xhdG9yKSAobmltKS4KK1dpbmRvd0xpc3QucHkgICAgICMgTWFuYWdlIHdpbmRvdyBsaXN0IGFuZCBkZWZpbmUgbGlzdGVkIHRvcCBsZXZlbC4KK1pvb21IZWlnaHQucHkgICAgICMgWm9vbSB3aW5kb3cgdG8gZnVsbCBoZWlnaHQgb2Ygc2NyZWVuLgorYWJvdXREaWFsb2cucHkgICAgIyBEaXNwbGF5IEFib3V0IElETEUgZGlhbG9nLgorY29uZmlnRGlhbG9nLnB5ICAgIyBEaXNwbGF5IHVzZXIgY29uZmlndXJhdGlvbiBkaWFsb2dzLgorY29uZmlnSGFuZGxlci5weSAgIyBMb2FkLCBmZXRjaCwgYW5kIHNhdmUgY29uZmlndXJhdGlvbiAobmltKS4KK2NvbmZpZ0hlbHBTb3VyY2VFZGl0LnB5ICAjIFNwZWNpZnkgaGVscCBzb3VyY2UuCitjb25maWdTZWN0aW9uTmFtZURpYWxvZy5weSAgIyBTcGVmaWZ5IHVzZXIgY29uZmlnIHNlY3Rpb24gbmFtZQorZHluT3B0aW9uTWVudVdpZGdldC5weSAgIyBkZWZpbmUgbXV0YWJsZSBPcHRpb25NZW51IHdpZGdldCAobmltKS4KK2hlbHAucHkgICAgICAgICAgICMgRGlzcGxheSBJRExFJ3MgaHRtbCBkb2MuCitrZXliaW5kaW5nRGlhbG9nLnB5ICAjIENoYW5nZSBrZXliaW5kaW5ncy4KK21hY29zeFN1cHBvcnQucHkgICMgSGVscCBJRExFIHJ1biBvbiBNYWNzIChuaW0pLgorcnBjLnB5ICAgICAgICAgICAgIyBDb21tdWljYXRlIGJldHdlZW4gaWRsZSBhbmQgdXNlciBwcm9jZXNzZXMgKG5pbSkuCitydW4ucHkgICAgICAgICAgICAjIE1hbmFnZSB1c2VyIGNvZGUgZXhlY3V0aW9uIHN1YnByb2Nlc3MuCit0YWJiZWRwYWdlcy5weSAgICAjIERlZmluZSB0YWJiZWQgcGFnZXMgd2lkZ2V0IChuaW0pLgordGV4dFZpZXcucHkgICAgICAgIyBEZWZpbmUgcmVhZC1vbmx5IHRleHQgd2lkZ2V0IChuaW0pLgogCi1odHRwOi8vd3d3LnB5dGhvbi5vcmcvaWRsZS8KK0NvbmZpZ3VyYXRpb24KKy0tLS0tLS0tLS0tLS0KK2NvbmZpZy1leHRlbnNpb25zLmRlZiAjIERlZmF1bHRzIGZvciBleHRlbnNpb25zCitjb25maWctaGlnaGxpZ2h0LmRlZiAgIyBEZWZhdWx0cyBmb3IgY29sb3JpemluZworY29uZmlnLWtleXMuZGVmICAgICAgICMgRGVmYXVsdHMgZm9yIGtleSBiaW5kaW5ncworY29uZmlnLW1haW4uZGVmICAgICAgICMgRGVmYWk7dHMgZnByIGZvbnQgYW5kIGdlbmVhbAogCi1UaGVyZSBpcyBhIG1haWwgbGlzdCBmb3IgSURMRTogaWRsZS1kZXZAcHl0aG9uLm9yZy4gIFlvdSBjYW4gam9pbiBhdAorVGV4dAorLS0tLQorQ1JFRElUUy50eHQgICMgbm90IG1haW50YWluZWQsIGRpc3BsYXllZCBieSBBYm91dCBJRExFCitISVNUT1JZLnR4dCAgIyBORVdTIHVwIHRvIEp1bHkgMjAwMQorTkVXUy50eHQgICAgICMgY29tbWl0cywgZGlzcGxheWVkIGJ5IEFib3V0IElETEUKK1JFQURNRS50eHQgICAjIHRoaXMgZmlsZSwgZGlzcGxleWVkIGJ5IEFib3V0IElETEUKK1RPRE8udHh0ICAgICAjIG5lZWRzIHJldmlldworZXh0ZW5kLnR4dCAgICMgYWJvdXQgd3JpdGluZyBleHRlbnNpb25zCitoZWxwLmh0bWwgICAgIyBjb3B5IG9mIGlkbGUuaHRtbCBpbiBkb2NzLCBkaXNwbGF5ZWQgYnkgSURMRSBIZWxwCiAKLWh0dHA6Ly9tYWlsLnB5dGhvbi5vcmcvbWFpbG1hbi9saXN0aW5mby9pZGxlLWRldgorU3ViZGlyZWN0b3JpZXMKKy0tLS0tLS0tLS0tLS0tCitJY29ucyAgIyBzbWFsbCBpbWFnZSBmaWxlcworaWRsZV90ZXN0ICAjIGZpbGVzIGZvciBodW1hbiB0ZXN0IGFuZCBhdXRvbWF0ZWQgdW5pdCB0ZXN0cworCitVbnVzZWQgYW5kIERlcHJlY2F0ZWQgZmlsZXMgYW5kIG9iamVjdHMgKG5pbSkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorRWRpdG9yV2luZG93LnB5OiBIZWxwZGlhbG9nIGFuZCBoZWxwRGlhbG9nCitUb29sVGlwLnB5OiB1bnVzZWQuCitoZWxwLnR4dAoraWRsZXZlci5weQorCisKK0lETEUgTUVOVVMKK1RvcCBsZXZlbCBpdGVtcyBhbmQgbW9zdCBzdWJtZW51IGl0ZW1zIGFyZSBkZWZpbmVkIGluIEJpbmRpbmdzLgorRXh0ZW5zdGlvbnMgYWRkIHN1Ym1lbnUgaXRlbXMgd2hlbiBhY3RpdmUuICBUaGUgbmFtZXMgZ2l2ZW4gYXJlCitmb3VuZCwgcXVvdGVkLCBpbiBvbmUgb2YgdGhlc2UgbW9kdWxlcywgcGFpcmVkIHdpdGggYSAnPDxwc2V1ZG9ldmVudD4+Jy4KK0VhY2ggcHNldWRvZXZlbnQgaXMgYm91bmQgdG8gYW4gZXZlbnQgaGFuZGxlci4gIFNvbWUgZXZlbnQgaGFuZGxlcnMKK2NhbGwgYW5vdGhlciBmdW5jdGlvbiB0aGF0IGRvZXMgdGhlIGFjdHVhbCB3b3JrLiAgVGhlIGFubm90YXRpb25zIGJlbG93CithcmUgaW50ZW5kZWQgdG8gYXQgbGVhc3QgZ2l2ZSB0aGUgbW9kdWxlIHdoZXJlIHRoZSBhY3R1YWwgd29yayBpcyBkb25lLgorCitGaWxlICAjIElPQmluZGlnIGV4Y2VwdCBhcyBub3RlZAorICBOZXcgRmlsZQorICBPcGVuLi4uICAjIElPQmluZGluZy5vcGVuCisgIE9wZW4gTW9kdWxlCisgIFJlY2VudCBGaWxlcworICBDbGFzcyBCcm93c2VyICAjIENsYXNzIEJyb3dzZXIKKyAgUGF0aCBCcm93c2VyICAjIFBhdGggQnJvd3NlcgorICAtLS0KKyAgU2F2ZSAgIyBJREJpbmRpbmcuc2F2ZQorICBTYXZlIEFzLi4uICAjIElPQmluZGluZy5zYXZlX2FzCisgIFNhdmUgQ29weSBBcy4uLiAgIyBJT0JpbmRsaW5nLnNhdmVfYV9jb3B5CisgIC0tLQorICBQcmludCBXaW5kb3cgICMgSU9CaW5kaW5nLnByaW50X3dpbmRvdworICAtLS0KKyAgQ2xvc2UKKyAgRXhpdAorCitFZGl0CisgIFVuZG8gICMgdW5kb0RlbGVnYXRvcgorICBSZWRvICAjIHVuZG9EZWxlZ2F0b3IKKyAgLS0tCisgIEN1dAorICBDb3B5CisgIFBhc3RlCisgIFNlbGVjdCBBbGwKKyAgLS0tICAjIE5leHQgNSBpdGVtcyB1c2UgU2VhcmNoRW5naW5lOyBkaWFsb2dzIHVzZSBTZWFyY2hEaWFsb2dCYXNlCisgIEZpbmQgICMgU2VhcmNoIERpYWxvZworICBGaW5kIEFnYWluCisgIEZpbmQgU2VsZWN0aW9uCisgIEZpbmQgaW4gRmlsZXMuLi4gICMgR3JlcERpYWxvZworICBSZXBsYWNlLi4uICAjIFJlcGxhY2VEaWFsb2cKKyAgR28gdG8gTGluZQorICBTaG93IENvbXBsZXRpb25zICAjIEF1dG9Db21wbGV0ZSBleHRlbnNpb24gYW5kIEF1dG9Db21wbGV0ZVdpZG93ICgmSFApCisgIEV4cGFuZCBXb3JkICAjIEF1dG9FeHBhbmQgZXh0ZW5zaW9uCisgIFNob3cgY2FsbCB0aXAgICMgQ2FsbHRpcHMgZXh0ZW5zaW9uIGFuZCBDYWxsdGlwV2luZG93ICgmIEh5cGVycGFyc2VyKQorICBTaG93IHN1cnJvdW5kaW5nIHBhcmVucyAgIyBQYXJlbk1hdGNoICgmIEh5cGVycGFyc2VyKQorCitTaGVsbCAgIyBQeVNoZWxsCisgIFZpZXcgTGFzdCBSZXN0YXJ0ICAjIFB5U2hlbGwuPworICBSZXN0YXJ0IFNoZWxsICAjIFB5U2hlbGwuPworCitEZWJ1ZyAoU2hlbGwgb25seSkKKyAgR28gdG8gRmlsZS9MaW5lCisgIERlYnVnZ2VyICAjIERlYnVnZ2VyLCBSZW1vdGVEZWJ1Z2dlcgorICBTdGFjayBWaWV3ZXIgICMgU3RhY2tWaWV3ZXIKKyAgQXV0by1vcGVuIFN0YWNrIFZpZXdlciAgIyBTdGFja1ZpZXdlcgorCitGb3JtYXQgKEVkaXRvciBvbmx5KQorICBJbmRlbnQgUmVnaW9uCisgIERlZGVudCBSZWdpb24KKyAgQ29tbWVudCBPdXQgUmVnaW9uCisgIFVuY29tbWVudCBSZWdpb24KKyAgVGFiaWZ5IFJlZ2lvbgorICBVbnRhYmlmeSBSZWdpb24KKyAgVG9nZ2xlIFRhYnMKKyAgTmV3IEluZGVudCBXaWR0aAorICBGb3JtYXQgUGFyYWdyYXBoICAjIEZvcm1hdFBhcmFncmFwaCBleHRlbnNpb24KKyAgLS0tCisgIFN0cmlwIHRhaWxpbmcgd2hpdGVzcGFjZSAgIyBSc3RyaXBFeHRlbnNpb24gZXh0ZW5zaW9uCisKK1J1biAoRWRpdG9yIG9ubHkpCisgIFB5dGhvbiBTaGVsbCAgIyBQeVNoZWxsCisgIC0tLQorICBDaGVjayBNb2R1bGUgICMgU2NyaXB0QmluZGluZworICBSdW4gTW9kdWxlICAjIFNjcmlwdEJpbmRpbmcKKworT3B0aW9ucworICBDb25maWd1cmUgSURMRSAgIyBjb25maWdEaWFsb2cKKyAgICAodGFicyBpbiB0aGUgZGlhbG9nKQorICAgIEZvbnQgdGFiICAjIG9uZmlnLW1haW4uZGVmCisgICAgSGlnaGxpZ2h0IHRhYiAgIyBjb25maWdTZWN0aW9uTmFtZURpYWxvZywgY29uZmlnLWhpZ2hsaWdodC5kZWYKKyAgICBLZXlzIHRhYiAgIyBrZXliaW5kaW5nRGlhbG9nLCBjb25maWdTZWN0aW9uTmFtZURpYWxvZywgb25maWcta2V1cy5kZWYKKyAgICBHZW5lcmFsIHRhYiAgIyBjb25maWdIZWxwU291cmNlRWRpdCwgY29uZmlnLW1haW4uZGVmCisgIENvbmZpZ3VyZSBFeHRlbnNpb25zICAjIGNvbmZpZ0RpYWxvZworICAgIFh5eiB0YWIgICMgeHl6LnB5LCBjb25maWctZXh0ZW5zaW9ucy5kZWYKKyAgLS0tCisgIENvZGUgQ29udGV4dCAoZWRpdG9yIG9ubHkpICAjIENvZGVDb250ZXh0IGV4dGVuc2lvbgorCitXaW5kb3cKKyAgWm9vbWhlaWdodCAgIyBab29tSGVpZ2h0IGV4dGVuc2lvbgorICAtLS0KKyAgPG9wZW4gd2luZG93cz4gICMgV2luZG93TGlzdAorCitIZWxwCisgIEFib3V0IElETEUgICMgYWJvdXREaWFsb2cKKyAgLS0tCisgIElETEUgSGVscCAgIyBoZWxwCisgIFB5dGhvbiBEb2MKKyAgVHVydGxlIERlbW8KKyAgLS0tCisgIDxvdGhlciBoZWxwIHNvdXJjZXM+CisKKzxDb250ZXh0IE1lbnU+IChyaWdodCBjbGljaykKK0RlZmluZWQgaW4gRWRpdG9yV2luZG93LCBQeVNoZWxsLCBPdXRwdXQKKyAgIEN1dAorICAgQ29weQorICAgUGFzdGUKKyAgIC0tLQorICAgR28gdG8gZmlsZS9saW5lIChzaGVsbCBhbmQgb3V0cHV0IG9ubHkpCisgICBTZXQgQnJlYWtwb2ludCAoZWRpdG9yIG9ubHkpCisgICBDbGVhciBCcmVha3BvaW50IChlZGl0b3Igb25seSkKKyBEZWZpbmVkIGluIERlYnVnZ2VyCisgICBHbyB0byBzb3VyY2UgbGluZQorICAgU2hvdyBzdGFjayBmcmFtZQpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvUmVtb3RlRGVidWdnZXIucHkgYi9MaWIvaWRsZWxpYi9SZW1vdGVEZWJ1Z2dlci5weQppbmRleCBkODY2MmJiLi5iZTIyNjJmIDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9SZW1vdGVEZWJ1Z2dlci5weQorKysgYi9MaWIvaWRsZWxpYi9SZW1vdGVEZWJ1Z2dlci5weQpAQCAtMjEsNyArMjEsNiBAQAogIiIiCiAKIGltcG9ydCB0eXBlcwotZnJvbSBpZGxlbGliIGltcG9ydCBycGMKIGZyb20gaWRsZWxpYiBpbXBvcnQgRGVidWdnZXIKIAogZGVidWdnaW5nID0gMApAQCAtOTksNyArOTgsNyBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgdGIgPSB0cmFjZWJhY2t0YWJsZVt0YmlkXQogICAgICAgICBzdGFjaywgaSA9IHNlbGYuaWRiLmdldF9zdGFjayhmcmFtZSwgdGIpCi0gICAgICAgIHN0YWNrID0gWyh3cmFwX2ZyYW1lKGZyYW1lKSwgaykgZm9yIGZyYW1lLCBrIGluIHN0YWNrXQorICAgICAgICBzdGFjayA9IFsod3JhcF9mcmFtZShmcmFtZTIpLCBrKSBmb3IgZnJhbWUyLCBrIGluIHN0YWNrXQogICAgICAgICByZXR1cm4gc3RhY2ssIGkKIAogICAgIGRlZiBydW4oc2VsZiwgY21kKToKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL1JlcGxhY2VEaWFsb2cucHkgYi9MaWIvaWRsZWxpYi9SZXBsYWNlRGlhbG9nLnB5CmluZGV4IGU3M2YyYzUuLjI2NjVhMWMgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL1JlcGxhY2VEaWFsb2cucHkKKysrIGIvTGliL2lkbGVsaWIvUmVwbGFjZURpYWxvZy5weQpAQCAtNDAsNyArNDAsNyBAQAogCiAgICAgZGVmIGNyZWF0ZV9lbnRyaWVzKHNlbGYpOgogICAgICAgICBTZWFyY2hEaWFsb2dCYXNlLmNyZWF0ZV9lbnRyaWVzKHNlbGYpCi0gICAgICAgIHNlbGYucmVwbGVudCA9IHNlbGYubWFrZV9lbnRyeSgiUmVwbGFjZSB3aXRoOiIsIHNlbGYucmVwbHZhcikKKyAgICAgICAgc2VsZi5yZXBsZW50ID0gc2VsZi5tYWtlX2VudHJ5KCJSZXBsYWNlIHdpdGg6Iiwgc2VsZi5yZXBsdmFyKVswXQogCiAgICAgZGVmIGNyZWF0ZV9jb21tYW5kX2J1dHRvbnMoc2VsZik6CiAgICAgICAgIFNlYXJjaERpYWxvZ0Jhc2UuY3JlYXRlX2NvbW1hbmRfYnV0dG9ucyhzZWxmKQpAQCAtNTksNyArNTksNyBAQAogICAgIGRlZiBkZWZhdWx0X2NvbW1hbmQoc2VsZiwgZXZlbnQ9Tm9uZSk6CiAgICAgICAgIGlmIHNlbGYuZG9fZmluZChzZWxmLm9rKToKICAgICAgICAgICAgIGlmIHNlbGYuZG9fcmVwbGFjZSgpOiAgICMgT25seSBmaW5kIG5leHQgbWF0Y2ggaWYgcmVwbGFjZSBzdWNjZWVkZWQuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEEgYmFkIHJlIGNhbiBjYXVzZSBhIGl0IHRvIGZhaWwuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEEgYmFkIHJlIGNhbiBjYXVzZSBpdCB0byBmYWlsLgogICAgICAgICAgICAgICAgIHNlbGYuZG9fZmluZCgwKQogCiAgICAgZGVmIF9yZXBsYWNlX2V4cGFuZChzZWxmLCBtLCByZXBsKToKQEAgLTE4OCwzICsxODgsMzQgQEAKICAgICBkZWYgY2xvc2Uoc2VsZiwgZXZlbnQ9Tm9uZSk6CiAgICAgICAgIFNlYXJjaERpYWxvZ0Jhc2UuY2xvc2Uoc2VsZiwgZXZlbnQpCiAgICAgICAgIHNlbGYudGV4dC50YWdfcmVtb3ZlKCJoaXQiLCAiMS4wIiwgImVuZCIpCisKK2RlZiBfcmVwbGFjZV9kaWFsb2cocGFyZW50KToKKyAgICByb290ID0gVGsoKQorICAgIHJvb3QudGl0bGUoIlRlc3QgUmVwbGFjZURpYWxvZyIpCisgICAgd2lkdGgsIGhlaWdodCwgeCwgeSA9IGxpc3QobWFwKGludCwgcmUuc3BsaXQoJ1t4K10nLCBwYXJlbnQuZ2VvbWV0cnkoKSkpKQorICAgIHJvb3QuZ2VvbWV0cnkoIislZCslZCIlKHgsIHkgKyAxNTApKQorCisgICAgIyBtb2NrIHVuZG8gZGVsZWdhdG9yIG1ldGhvZHMKKyAgICBkZWYgdW5kb19ibG9ja19zdGFydCgpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgdW5kb19ibG9ja19zdG9wKCk6CisgICAgICAgIHBhc3MKKworICAgIHRleHQgPSBUZXh0KHJvb3QpCisgICAgdGV4dC51bmRvX2Jsb2NrX3N0YXJ0ID0gdW5kb19ibG9ja19zdGFydAorICAgIHRleHQudW5kb19ibG9ja19zdG9wID0gdW5kb19ibG9ja19zdG9wCisgICAgdGV4dC5wYWNrKCkKKyAgICB0ZXh0Lmluc2VydCgiaW5zZXJ0IiwiVGhpcyBpcyBhIHNhbXBsZSBzdHJpbmcuXG4iKjEwKQorCisgICAgZGVmIHNob3dfcmVwbGFjZSgpOgorICAgICAgICB0ZXh0LnRhZ19hZGQoU0VMLCAiMS4wIiwgRU5EKQorICAgICAgICByZXBsYWNlKHRleHQpCisgICAgICAgIHRleHQudGFnX3JlbW92ZShTRUwsICIxLjAiLCBFTkQpCisKKyAgICBidXR0b24gPSBCdXR0b24ocm9vdCwgdGV4dD0iUmVwbGFjZSIsIGNvbW1hbmQ9c2hvd19yZXBsYWNlKQorICAgIGJ1dHRvbi5wYWNrKCkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBmcm9tIGlkbGVsaWIuaWRsZV90ZXN0Lmh0ZXN0IGltcG9ydCBydW4KKyAgICBydW4oX3JlcGxhY2VfZGlhbG9nKQpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvU2NyaXB0QmluZGluZy5weSBiL0xpYi9pZGxlbGliL1NjcmlwdEJpbmRpbmcucHkKaW5kZXggNmJmZTEyOC4uNWNiODE4ZCAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvU2NyaXB0QmluZGluZy5weQorKysgYi9MaWIvaWRsZWxpYi9TY3JpcHRCaW5kaW5nLnB5CkBAIC0xOCwxMyArMTgsMTAgQEAKICIiIgogCiBpbXBvcnQgb3MKLWltcG9ydCByZQotaW1wb3J0IHN0cmluZwogaW1wb3J0IHRhYm5hbm55CiBpbXBvcnQgdG9rZW5pemUKIGltcG9ydCB0a2ludGVyLm1lc3NhZ2Vib3ggYXMgdGtNZXNzYWdlQm94Ci1mcm9tIGlkbGVsaWIuRWRpdG9yV2luZG93IGltcG9ydCBFZGl0b3JXaW5kb3cKLWZyb20gaWRsZWxpYiBpbXBvcnQgUHlTaGVsbCwgSU9CaW5kaW5nCitmcm9tIGlkbGVsaWIgaW1wb3J0IFB5U2hlbGwKIAogZnJvbSBpZGxlbGliLmNvbmZpZ0hhbmRsZXIgaW1wb3J0IGlkbGVDb25mCiBmcm9tIGlkbGVsaWIgaW1wb3J0IG1hY29zeFN1cHBvcnQKQEAgLTM5LDYgKzM2LDcgQEAKIGJ5IEZvcm1hdC0+VW50YWJpZnkgUmVnaW9uIGFuZCBzcGVjaWZ5IHRoZSBudW1iZXIgb2YgY29sdW1ucyB1c2VkIGJ5IGVhY2ggdGFiLgogIiIiCiAKKwogY2xhc3MgU2NyaXB0QmluZGluZzoKIAogICAgIG1lbnVkZWZzID0gWwpAQCAtNTMsNyArNTEsNyBAQAogICAgICAgICBzZWxmLmZsaXN0ID0gc2VsZi5lZGl0d2luLmZsaXN0CiAgICAgICAgIHNlbGYucm9vdCA9IHNlbGYuZWRpdHdpbi5yb290CiAKLSAgICAgICAgaWYgbWFjb3N4U3VwcG9ydC5ydW5uaW5nQXNPU1hBcHAoKToKKyAgICAgICAgaWYgbWFjb3N4U3VwcG9ydC5pc0NvY29hVGsoKToKICAgICAgICAgICAgIHNlbGYuZWRpdHdpbi50ZXh0X2ZyYW1lLmJpbmQoJzw8cnVuLW1vZHVsZS1ldmVudC0yPj4nLCBzZWxmLl9ydW5fbW9kdWxlX2V2ZW50KQogCiAgICAgZGVmIGNoZWNrX21vZHVsZV9ldmVudChzZWxmLCBldmVudCk6CkBAIC03MSw3ICs2OSw3IEBACiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgdGFibmFubnkucHJvY2Vzc190b2tlbnModG9rZW5pemUuZ2VuZXJhdGVfdG9rZW5zKGYucmVhZGxpbmUpKQogICAgICAgICAgICAgZXhjZXB0IHRva2VuaXplLlRva2VuRXJyb3IgYXMgbXNnOgotICAgICAgICAgICAgICAgIG1zZ3R4dCwgKGxpbmVubywgc3RhcnQpID0gbXNnCisgICAgICAgICAgICAgICAgbXNndHh0LCAobGluZW5vLCBzdGFydCkgPSBtc2cuYXJncwogICAgICAgICAgICAgICAgIHNlbGYuZWRpdHdpbi5nb3RvbGluZShsaW5lbm8pCiAgICAgICAgICAgICAgICAgc2VsZi5lcnJvcmJveCgiVGFibmFubnkgVG9rZW5pemluZyBFcnJvciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVG9rZW4gRXJyb3I6ICVzIiAlIG1zZ3R4dCkKQEAgLTExNCw3ICsxMTIsNyBAQAogICAgICAgICAgICAgc2hlbGwuc2V0X3dhcm5pbmdfc3RyZWFtKHNhdmVkX3N0cmVhbSkKIAogICAgIGRlZiBydW5fbW9kdWxlX2V2ZW50KHNlbGYsIGV2ZW50KToKLSAgICAgICAgaWYgbWFjb3N4U3VwcG9ydC5ydW5uaW5nQXNPU1hBcHAoKToKKyAgICAgICAgaWYgbWFjb3N4U3VwcG9ydC5pc0NvY29hVGsoKToKICAgICAgICAgICAgICMgVGstQ29jb2EgaW4gTWFjT1NYIGlzIGJyb2tlbiB1bnRpbCBhdCBsZWFzdAogICAgICAgICAgICAgIyBUayA4LjUuOSwgYW5kIHdpdGhvdXQgdGhpcyByYXRoZXIKICAgICAgICAgICAgICMgY3J1ZGUgd29ya2Fyb3VuZCBJRExFIHdvdWxkIGhhbmcgd2hlbiBhIHVzZXIKQEAgLTE0NSw3ICsxNDMsOCBAQAogICAgICAgICAgICAgcmV0dXJuICdicmVhaycKICAgICAgICAgaW50ZXJwID0gc2VsZi5zaGVsbC5pbnRlcnAKICAgICAgICAgaWYgUHlTaGVsbC51c2Vfc3VicHJvY2VzczoKLSAgICAgICAgICAgIGludGVycC5yZXN0YXJ0X3N1YnByb2Nlc3Mod2l0aF9jd2Q9RmFsc2UpCisgICAgICAgICAgICBpbnRlcnAucmVzdGFydF9zdWJwcm9jZXNzKHdpdGhfY3dkPUZhbHNlLCBmaWxlbmFtZT0KKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZWRpdHdpbi5fZmlsZW5hbWVfdG9fdW5pY29kZShmaWxlbmFtZSkpCiAgICAgICAgIGRpcm5hbWUgPSBvcy5wYXRoLmRpcm5hbWUoZmlsZW5hbWUpCiAgICAgICAgICMgWFhYIFRvbyBvZnRlbiB0aGlzIGRpc2NhcmRzIGFyZ3VtZW50cyB0aGUgdXNlciBqdXN0IHNldC4uLgogICAgICAgICBpbnRlcnAucnVuY29tbWFuZCgiIiJpZiAxOgpAQCAtMTk4LDEwICsxOTcsMTAgQEAKICAgICAgICAgY29uZmlybSA9IHRrTWVzc2FnZUJveC5hc2tva2NhbmNlbCh0aXRsZT0iU2F2ZSBCZWZvcmUgUnVuIG9yIENoZWNrIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlPW1zZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PXRrTWVzc2FnZUJveC5PSywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXN0ZXI9c2VsZi5lZGl0d2luLnRleHQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50PXNlbGYuZWRpdHdpbi50ZXh0KQogICAgICAgICByZXR1cm4gY29uZmlybQogCiAgICAgZGVmIGVycm9yYm94KHNlbGYsIHRpdGxlLCBtZXNzYWdlKToKICAgICAgICAgIyBYWFggVGhpcyBzaG91bGQgcmVhbGx5IGJlIGEgZnVuY3Rpb24gb2YgRWRpdG9yV2luZG93Li4uCi0gICAgICAgIHRrTWVzc2FnZUJveC5zaG93ZXJyb3IodGl0bGUsIG1lc3NhZ2UsIG1hc3Rlcj1zZWxmLmVkaXR3aW4udGV4dCkKKyAgICAgICAgdGtNZXNzYWdlQm94LnNob3dlcnJvcih0aXRsZSwgbWVzc2FnZSwgcGFyZW50PXNlbGYuZWRpdHdpbi50ZXh0KQogICAgICAgICBzZWxmLmVkaXR3aW4udGV4dC5mb2N1c19zZXQoKQpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvU2Nyb2xsZWRMaXN0LnB5IGIvTGliL2lkbGVsaWIvU2Nyb2xsZWRMaXN0LnB5CmluZGV4IDAyNTVhMGEuLjUzNTc2YjUgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL1Njcm9sbGVkTGlzdC5weQorKysgYi9MaWIvaWRsZWxpYi9TY3JvbGxlZExpc3QucHkKQEAgLTEsNCArMSw1IEBACiBmcm9tIHRraW50ZXIgaW1wb3J0ICoKK2Zyb20gaWRsZWxpYiBpbXBvcnQgbWFjb3N4U3VwcG9ydAogCiBjbGFzcyBTY3JvbGxlZExpc3Q6CiAKQEAgLTIyLDcgKzIzLDExIEBACiAgICAgICAgICMgQmluZCBldmVudHMgdG8gdGhlIGxpc3QgYm94CiAgICAgICAgIGxpc3Rib3guYmluZCgiPEJ1dHRvblJlbGVhc2UtMT4iLCBzZWxmLmNsaWNrX2V2ZW50KQogICAgICAgICBsaXN0Ym94LmJpbmQoIjxEb3VibGUtQnV0dG9uUmVsZWFzZS0xPiIsIHNlbGYuZG91YmxlX2NsaWNrX2V2ZW50KQotICAgICAgICBsaXN0Ym94LmJpbmQoIjxCdXR0b25QcmVzcy0zPiIsIHNlbGYucG9wdXBfZXZlbnQpCisgICAgICAgIGlmIG1hY29zeFN1cHBvcnQuaXNBcXVhVGsoKToKKyAgICAgICAgICAgIGxpc3Rib3guYmluZCgiPEJ1dHRvblByZXNzLTI+Iiwgc2VsZi5wb3B1cF9ldmVudCkKKyAgICAgICAgICAgIGxpc3Rib3guYmluZCgiPENvbnRyb2wtQnV0dG9uLTE+Iiwgc2VsZi5wb3B1cF9ldmVudCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxpc3Rib3guYmluZCgiPEJ1dHRvblByZXNzLTM+Iiwgc2VsZi5wb3B1cF9ldmVudCkKICAgICAgICAgbGlzdGJveC5iaW5kKCI8S2V5LVVwPiIsIHNlbGYudXBfZXZlbnQpCiAgICAgICAgIGxpc3Rib3guYmluZCgiPEtleS1Eb3duPiIsIHNlbGYuZG93bl9ldmVudCkKICAgICAgICAgIyBNYXJrIGFzIGVtcHR5CkBAIC0xMTksMjEgKzEyNCwyMiBAQAogICAgICAgICBwYXNzCiAKIAotZGVmIHRlc3QoKToKK2RlZiBfc2Nyb2xsZWRfbGlzdChwYXJlbnQpOgogICAgIHJvb3QgPSBUaygpCi0gICAgcm9vdC5wcm90b2NvbCgiV01fREVMRVRFX1dJTkRPVyIsIHJvb3QuZGVzdHJveSkKKyAgICByb290LnRpdGxlKCJUZXN0IFNjcm9sbGVkTGlzdCIpCisgICAgd2lkdGgsIGhlaWdodCwgeCwgeSA9IGxpc3QobWFwKGludCwgcmUuc3BsaXQoJ1t4K10nLCBwYXJlbnQuZ2VvbWV0cnkoKSkpKQorICAgIHJvb3QuZ2VvbWV0cnkoIislZCslZCIlKHgsIHkgKyAxNTApKQogICAgIGNsYXNzIE15U2Nyb2xsZWRMaXN0KFNjcm9sbGVkTGlzdCk6Ci0gICAgICAgIGRlZiBmaWxsX21lbnUoc2VsZik6IHNlbGYubWVudS5hZGRfY29tbWFuZChsYWJlbD0icGFzcyIpCisgICAgICAgIGRlZiBmaWxsX21lbnUoc2VsZik6IHNlbGYubWVudS5hZGRfY29tbWFuZChsYWJlbD0icmlnaHQgY2xpY2siKQogICAgICAgICBkZWYgb25fc2VsZWN0KHNlbGYsIGluZGV4KTogcHJpbnQoInNlbGVjdCIsIHNlbGYuZ2V0KGluZGV4KSkKICAgICAgICAgZGVmIG9uX2RvdWJsZShzZWxmLCBpbmRleCk6IHByaW50KCJkb3VibGUiLCBzZWxmLmdldChpbmRleCkpCi0gICAgcyA9IE15U2Nyb2xsZWRMaXN0KHJvb3QpCi0gICAgZm9yIGkgaW4gcmFuZ2UoMzApOgotICAgICAgICBzLmFwcGVuZCgiaXRlbSAlMDJkIiAlIGkpCi0gICAgcmV0dXJuIHJvb3QKIAotZGVmIG1haW4oKToKLSAgICByb290ID0gdGVzdCgpCisgICAgc2Nyb2xsZWRfbGlzdCA9IE15U2Nyb2xsZWRMaXN0KHJvb3QpCisgICAgZm9yIGkgaW4gcmFuZ2UoMzApOgorICAgICAgICBzY3JvbGxlZF9saXN0LmFwcGVuZCgiSXRlbSAlMDJkIiAlIGkpCisKICAgICByb290Lm1haW5sb29wKCkKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICBtYWluKCkKKyAgICBmcm9tIGlkbGVsaWIuaWRsZV90ZXN0Lmh0ZXN0IGltcG9ydCBydW4KKyAgICBydW4oX3Njcm9sbGVkX2xpc3QpCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9TZWFyY2hEaWFsb2cucHkgYi9MaWIvaWRsZWxpYi9TZWFyY2hEaWFsb2cucHkKaW5kZXggYmY3NmM0MS4uNzdlZjdiOSAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvU2VhcmNoRGlhbG9nLnB5CisrKyBiL0xpYi9pZGxlbGliL1NlYXJjaERpYWxvZy5weQpAQCAtMjMsNyArMjMsNyBAQAogY2xhc3MgU2VhcmNoRGlhbG9nKFNlYXJjaERpYWxvZ0Jhc2UpOgogCiAgICAgZGVmIGNyZWF0ZV93aWRnZXRzKHNlbGYpOgotICAgICAgICBmID0gU2VhcmNoRGlhbG9nQmFzZS5jcmVhdGVfd2lkZ2V0cyhzZWxmKQorICAgICAgICBTZWFyY2hEaWFsb2dCYXNlLmNyZWF0ZV93aWRnZXRzKHNlbGYpCiAgICAgICAgIHNlbGYubWFrZV9idXR0b24oIkZpbmQgTmV4dCIsIHNlbGYuZGVmYXVsdF9jb21tYW5kLCAxKQogCiAgICAgZGVmIGRlZmF1bHRfY29tbWFuZChzZWxmLCBldmVudD1Ob25lKToKQEAgLTY1LDMgKzY1LDI1IEBACiAgICAgICAgIGlmIHBhdDoKICAgICAgICAgICAgIHNlbGYuZW5naW5lLnNldGNvb2tlZHBhdChwYXQpCiAgICAgICAgIHJldHVybiBzZWxmLmZpbmRfYWdhaW4odGV4dCkKKworZGVmIF9zZWFyY2hfZGlhbG9nKHBhcmVudCk6CisgICAgcm9vdCA9IFRrKCkKKyAgICByb290LnRpdGxlKCJUZXN0IFNlYXJjaERpYWxvZyIpCisgICAgd2lkdGgsIGhlaWdodCwgeCwgeSA9IGxpc3QobWFwKGludCwgcmUuc3BsaXQoJ1t4K10nLCBwYXJlbnQuZ2VvbWV0cnkoKSkpKQorICAgIHJvb3QuZ2VvbWV0cnkoIislZCslZCIlKHgsIHkgKyAxNTApKQorICAgIHRleHQgPSBUZXh0KHJvb3QpCisgICAgdGV4dC5wYWNrKCkKKyAgICB0ZXh0Lmluc2VydCgiaW5zZXJ0IiwiVGhpcyBpcyBhIHNhbXBsZSBzdHJpbmcuXG4iKjEwKQorCisgICAgZGVmIHNob3dfZmluZCgpOgorICAgICAgICB0ZXh0LnRhZ19hZGQoU0VMLCAiMS4wIiwgRU5EKQorICAgICAgICBzID0gX3NldHVwKHRleHQpCisgICAgICAgIHMub3Blbih0ZXh0KQorICAgICAgICB0ZXh0LnRhZ19yZW1vdmUoU0VMLCAiMS4wIiwgRU5EKQorCisgICAgYnV0dG9uID0gQnV0dG9uKHJvb3QsIHRleHQ9IlNlYXJjaCIsIGNvbW1hbmQ9c2hvd19maW5kKQorICAgIGJ1dHRvbi5wYWNrKCkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBmcm9tIGlkbGVsaWIuaWRsZV90ZXN0Lmh0ZXN0IGltcG9ydCBydW4KKyAgICBydW4oX3NlYXJjaF9kaWFsb2cpCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9TZWFyY2hEaWFsb2dCYXNlLnB5IGIvTGliL2lkbGVsaWIvU2VhcmNoRGlhbG9nQmFzZS5weQppbmRleCBiOGI0OWIyLi41ZmE4NGUyIDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9TZWFyY2hEaWFsb2dCYXNlLnB5CisrKyBiL0xpYi9pZGxlbGliL1NlYXJjaERpYWxvZ0Jhc2UucHkKQEAgLTEsMzQgKzEsNTEgQEAKICcnJ0RlZmluZSBTZWFyY2hEaWFsb2dCYXNlIHVzZWQgYnkgU2VhcmNoLCBSZXBsYWNlLCBhbmQgR3JlcCBkaWFsb2dzLicnJwotZnJvbSB0a2ludGVyIGltcG9ydCAqCisKK2Zyb20gdGtpbnRlciBpbXBvcnQgKFRvcGxldmVsLCBGcmFtZSwgRW50cnksIExhYmVsLCBCdXR0b24sCisgICAgICAgICAgICAgICAgICAgICBDaGVja2J1dHRvbiwgUmFkaW9idXR0b24pCiAKIGNsYXNzIFNlYXJjaERpYWxvZ0Jhc2U6Ci0gICAgJycnQ3JlYXRlIG1vc3Qgb2YgYSBtb2RhbCBzZWFyY2ggZGlhbG9nIChtYWtlX2ZyYW1lLCBjcmVhdGVfd2lkZ2V0cykuCisgICAgJycnQ3JlYXRlIG1vc3Qgb2YgYSAzIG9yIDQgcm93LCAzIGNvbHVtbiBzZWFyY2ggZGlhbG9nLgogCi0gICAgVGhlIHdpZGUgbGVmdCBjb2x1bW4gY29udGFpbnM6Ci0gICAgMSBvciAyIHRleHQgZW50cnkgbGluZXMgKGNyZWF0ZV9lbnRyaWVzLCBtYWtlX2VudHJ5KTsKLSAgICBhIHJvdyBvZiBzdGFuZGFyZCByYWRpb2J1dHRvbnMgKGNyZWF0ZV9vcHRpb25fYnV0dG9ucyk7Ci0gICAgYSByb3cgb2YgZGlhbG9nIHNwZWNpZmljIHJhZGlvYnV0dG9ucyAoY3JlYXRlX290aGVyX2J1dHRvbnMpLgorICAgIFRoZSBsZWZ0IGFuZCB3aWRlIG1pZGRsZSBjb2x1bW4gY29udGFpbjoKKyAgICAxIG9yIDIgbGFiZWxlZCB0ZXh0IGVudHJ5IGxpbmVzIChtYWtlX2VudHJ5LCBjcmVhdGVfZW50cmllcyk7CisgICAgYSByb3cgb2Ygc3RhbmRhcmQgQ2hlY2tidXR0b25zIChtYWtlX2ZyYW1lLCBjcmVhdGVfb3B0aW9uX2J1dHRvbnMpLAorICAgIGVhY2ggb2Ygd2hpY2ggY29ycmVzcG9uZHMgdG8gYSBzZWFyY2ggZW5naW5lIFZhcmlhYmxlOworICAgIGEgcm93IG9mIGRpYWxvZy1zcGVjaWZpYyBDaGVjay9SYWRpb2J1dHRvbnMgKGNyZWF0ZV9vdGhlcl9idXR0b25zKS4KIAogICAgIFRoZSBuYXJyb3cgcmlnaHQgY29sdW1uIGNvbnRhaW5zIGNvbW1hbmQgYnV0dG9ucwotICAgIChjcmVhdGVfY29tbWFuZF9idXR0b25zLCBtYWtlX2J1dHRvbikuCisgICAgKG1ha2VfYnV0dG9uLCBjcmVhdGVfY29tbWFuZF9idXR0b25zKS4KICAgICBUaGVzZSBhcmUgYm91bmQgdG8gZnVuY3Rpb25zIHRoYXQgZXhlY3V0ZSB0aGUgY29tbWFuZC4KIAotICAgIEV4Y2VwdCBmb3IgY29tbWFuZCBidXR0b25zLCB0aGlzIGJhc2UgY2xhc3MgaXMgbm90IGxpbWl0ZWQgdG8KLSAgICBpdGVtcyBjb21tb24gdG8gYWxsIHRocmVlIHN1YmNsYXNzZXMuICBSYXRoZXIsIGl0IGlzIHRoZSBGaW5kIGRpYWxvZwotICAgIG1pbnVzIHRoZSAiRmluZCBOZXh0IiBjb21tYW5kIGFuZCBpdHMgZXhlY3V0aW9uIGZ1bmN0aW9uLgotICAgIFRoZSBvdGhlciBkaWFsb2dzIG92ZXJyaWRlIG1ldGhvZHMgdG8gcmVwbGFjZSBhbmQgYWRkIHdpZGdldHMuCisgICAgRXhjZXB0IGZvciBjb21tYW5kIGJ1dHRvbnMsIHRoaXMgYmFzZSBjbGFzcyBpcyBub3QgbGltaXRlZCB0byBpdGVtcworICAgIGNvbW1vbiB0byBhbGwgdGhyZWUgc3ViY2xhc3Nlcy4gIFJhdGhlciwgaXQgaXMgdGhlIEZpbmQgZGlhbG9nIG1pbnVzCisgICAgdGhlICJGaW5kIE5leHQiIGNvbW1hbmQsIGl0cyBleGVjdXRpb24gZnVuY3Rpb24sIGFuZCB0aGUKKyAgICBkZWZhdWx0X2NvbW1hbmQgYXR0cmlidXRlIG5lZWRlZCBpbiBjcmVhdGVfd2lkZ2V0cy4gVGhlIG90aGVyCisgICAgZGlhbG9ncyBvdmVycmlkZSBhdHRyaWJ1dGVzIGFuZCBtZXRob2RzLCB0aGUgbGF0dGVyIHRvIHJlcGxhY2UgYW5kCisgICAgYWRkIHdpZGdldHMuCiAgICAgJycnCiAKLSAgICB0aXRsZSA9ICJTZWFyY2ggRGlhbG9nIgorICAgIHRpdGxlID0gIlNlYXJjaCBEaWFsb2ciICAjIHJlcGxhY2UgaW4gc3ViY2xhc3NlcwogICAgIGljb24gPSAiU2VhcmNoIgotICAgIG5lZWR3cmFwYnV0dG9uID0gMQorICAgIG5lZWR3cmFwYnV0dG9uID0gMSAgIyBub3QgaW4gRmluZCBpbiBGaWxlcwogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJvb3QsIGVuZ2luZSk6CisgICAgICAgICcnJ0luaXRpYWxpemUgcm9vdCwgZW5naW5lLCBhbmQgdG9wIGF0dHJpYnV0ZXMuCisKKyAgICAgICAgdG9wIChsZXZlbCB3aWRnZXQpOiBzZXQgaW4gY3JlYXRlX3dpZGdldHMoKSBjYWxsZWQgZnJvbSBvcGVuKCkuCisgICAgICAgIHRleHQgKFRleHQgc2VhcmNoZWQpOiBzZXQgaW4gb3BlbigpLCBvbmx5IHVzZWQgaW4gc3ViY2xhc3NlcygpLgorICAgICAgICBlbnQgKHJ5KTogY3JlYXRlZCBpbiBtYWtlX2VudHJ5KCkgY2FsbGVkIGZyb20gY3JlYXRlX2VudHJ5KCkuCisgICAgICAgIHJvdyAob2YgZ3JpZCk6IDAgaW4gY3JlYXRlX3dpZGdldHMoKSwgKzEgaW4gbWFrZV9lbnRyeS9mcmFtZSgpLgorICAgICAgICBkZWZhdWx0X2NvbW1hbmQ6IHNldCBpbiBzdWJjbGFzc2VzLCB1c2VkIGluIGNyZWF0ZV93aWRnZXJzKCkuCisKKyAgICAgICAgdGl0bGUgKG9mIGRpYWxvZyk6IGNsYXNzIGF0dHJpYnV0ZSwgb3ZlcnJpZGUgaW4gc3ViY2xhc3Nlcy4KKyAgICAgICAgaWNvbiAob2YgZGlhbG9nKTogZGl0dG8sIHVzZSB1bmNsZWFyIGlmIGNhbm5vdCBtaW5pbWl6ZSBkaWFsb2cuCisgICAgICAgICcnJwogICAgICAgICBzZWxmLnJvb3QgPSByb290CiAgICAgICAgIHNlbGYuZW5naW5lID0gZW5naW5lCiAgICAgICAgIHNlbGYudG9wID0gTm9uZQogCiAgICAgZGVmIG9wZW4oc2VsZiwgdGV4dCwgc2VhcmNocGhyYXNlPU5vbmUpOgorICAgICAgICAiTWFrZSBkaWFsb2cgdmlzaWJsZSBvbiB0b3Agb2Ygb3RoZXJzIGFuZCByZWFkeSB0byB1c2UuIgogICAgICAgICBzZWxmLnRleHQgPSB0ZXh0CiAgICAgICAgIGlmIG5vdCBzZWxmLnRvcDoKICAgICAgICAgICAgIHNlbGYuY3JlYXRlX3dpZGdldHMoKQpAQCAtNDQsMTEgKzYxLDE3IEBACiAgICAgICAgIHNlbGYudG9wLmdyYWJfc2V0KCkKIAogICAgIGRlZiBjbG9zZShzZWxmLCBldmVudD1Ob25lKToKKyAgICAgICAgIlB1dCBkaWFsb2cgYXdheSBmb3IgbGF0ZXIgdXNlLiIKICAgICAgICAgaWYgc2VsZi50b3A6CiAgICAgICAgICAgICBzZWxmLnRvcC5ncmFiX3JlbGVhc2UoKQogICAgICAgICAgICAgc2VsZi50b3Aud2l0aGRyYXcoKQogCiAgICAgZGVmIGNyZWF0ZV93aWRnZXRzKHNlbGYpOgorICAgICAgICAnJydDcmVhdGUgYmFzaWMgMyByb3cgeCAzIGNvbCBzZWFyY2ggKGZpbmQpIGRpYWxvZy4KKworICAgICAgICBPdGhlciBkaWFsb2dzIG92ZXJyaWRlIHN1YnNpZGlhcnkgY3JlYXRlX3ggbWV0aG9kcyBhcyBuZWVkZWQuCisgICAgICAgIFJlcGxhY2UgYW5kIEZpbmQtaW4tRmlsZXMgYWRkIGFub3RoZXIgZW50cnkgcm93LgorICAgICAgICAnJycKICAgICAgICAgdG9wID0gVG9wbGV2ZWwoc2VsZi5yb290KQogICAgICAgICB0b3AuYmluZCgiPFJldHVybj4iLCBzZWxmLmRlZmF1bHRfY29tbWFuZCkKICAgICAgICAgdG9wLmJpbmQoIjxFc2NhcGU+Iiwgc2VsZi5jbG9zZSkKQEAgLTYxLDI5ICs4NCw4NCBAQAogICAgICAgICBzZWxmLnRvcC5ncmlkX2NvbHVtbmNvbmZpZ3VyZSgwLCBwYWQ9Miwgd2VpZ2h0PTApCiAgICAgICAgIHNlbGYudG9wLmdyaWRfY29sdW1uY29uZmlndXJlKDEsIHBhZD0yLCBtaW5zaXplPTEwMCwgd2VpZ2h0PTEwMCkKIAotICAgICAgICBzZWxmLmNyZWF0ZV9lbnRyaWVzKCkKLSAgICAgICAgc2VsZi5jcmVhdGVfb3B0aW9uX2J1dHRvbnMoKQotICAgICAgICBzZWxmLmNyZWF0ZV9vdGhlcl9idXR0b25zKCkKLSAgICAgICAgcmV0dXJuIHNlbGYuY3JlYXRlX2NvbW1hbmRfYnV0dG9ucygpCisgICAgICAgIHNlbGYuY3JlYXRlX2VudHJpZXMoKSAgIyByb3cgMCAoYW5kIG1heWJlIDEpLCBjb2xzIDAsIDEKKyAgICAgICAgc2VsZi5jcmVhdGVfb3B0aW9uX2J1dHRvbnMoKSAgIyBuZXh0IHJvdywgY29scyAwLCAxCisgICAgICAgIHNlbGYuY3JlYXRlX290aGVyX2J1dHRvbnMoKSAgIyBuZXh0IHJvdywgY29scyAwLCAxCisgICAgICAgIHNlbGYuY3JlYXRlX2NvbW1hbmRfYnV0dG9ucygpICAjIGNvbCAyLCBhbGwgcm93cwogCi0gICAgZGVmIG1ha2VfZW50cnkoc2VsZiwgbGFiZWwsIHZhcik6Ci0gICAgICAgIGwgPSBMYWJlbChzZWxmLnRvcCwgdGV4dD1sYWJlbCkKLSAgICAgICAgbC5ncmlkKHJvdz1zZWxmLnJvdywgY29sdW1uPTAsIHN0aWNreT0ibnciKQotICAgICAgICBlID0gRW50cnkoc2VsZi50b3AsIHRleHR2YXJpYWJsZT12YXIsIGV4cG9ydHNlbGVjdGlvbj0wKQotICAgICAgICBlLmdyaWQocm93PXNlbGYucm93LCBjb2x1bW49MSwgc3RpY2t5PSJud2UiKQorICAgIGRlZiBtYWtlX2VudHJ5KHNlbGYsIGxhYmVsX3RleHQsIHZhcik6CisgICAgICAgICcnJ1JldHVybiAoZW50cnksIGxhYmVsKSwgLgorCisgICAgICAgIGVudHJ5IC0gZ3JpZGRlZCBsYWJlbGVkIEVudHJ5IGZvciB0ZXh0IGVudHJ5LgorICAgICAgICBsYWJlbCAtIExhYmVsIHdpZGdldCwgcmV0dXJuZWQgZm9yIHRlc3RpbmcuCisgICAgICAgICcnJworICAgICAgICBsYWJlbCA9IExhYmVsKHNlbGYudG9wLCB0ZXh0PWxhYmVsX3RleHQpCisgICAgICAgIGxhYmVsLmdyaWQocm93PXNlbGYucm93LCBjb2x1bW49MCwgc3RpY2t5PSJudyIpCisgICAgICAgIGVudHJ5ID0gRW50cnkoc2VsZi50b3AsIHRleHR2YXJpYWJsZT12YXIsIGV4cG9ydHNlbGVjdGlvbj0wKQorICAgICAgICBlbnRyeS5ncmlkKHJvdz1zZWxmLnJvdywgY29sdW1uPTEsIHN0aWNreT0ibndlIikKICAgICAgICAgc2VsZi5yb3cgPSBzZWxmLnJvdyArIDEKLSAgICAgICAgcmV0dXJuIGUKKyAgICAgICAgcmV0dXJuIGVudHJ5LCBsYWJlbAorCisgICAgZGVmIGNyZWF0ZV9lbnRyaWVzKHNlbGYpOgorICAgICAgICAiQ3JlYXRlIG9uZSBvciBtb3JlIGVudHJ5IGxpbmVzIHdpdGggbWFrZV9lbnRyeS4iCisgICAgICAgIHNlbGYuZW50ID0gc2VsZi5tYWtlX2VudHJ5KCJGaW5kOiIsIHNlbGYuZW5naW5lLnBhdHZhcilbMF0KIAogICAgIGRlZiBtYWtlX2ZyYW1lKHNlbGYsbGFiZWx0ZXh0PU5vbmUpOgorICAgICAgICAnJydSZXR1cm4gKGZyYW1lLCBsYWJlbCkuCisKKyAgICAgICAgZnJhbWUgLSBncmlkZGVkIGxhYmVsZWQgRnJhbWUgZm9yIG9wdGlvbiBvciBvdGhlciBidXR0b25zLgorICAgICAgICBsYWJlbCAtIExhYmVsIHdpZGdldCwgcmV0dXJuZWQgZm9yIHRlc3RpbmcuCisgICAgICAgICcnJwogICAgICAgICBpZiBsYWJlbHRleHQ6Ci0gICAgICAgICAgICBsID0gTGFiZWwoc2VsZi50b3AsIHRleHQ9bGFiZWx0ZXh0KQotICAgICAgICAgICAgbC5ncmlkKHJvdz1zZWxmLnJvdywgY29sdW1uPTAsIHN0aWNreT0ibnciKQotICAgICAgICBmID0gRnJhbWUoc2VsZi50b3ApCi0gICAgICAgIGYuZ3JpZChyb3c9c2VsZi5yb3csIGNvbHVtbj0xLCBjb2x1bW5zcGFuPTEsIHN0aWNreT0ibndlIikKKyAgICAgICAgICAgIGxhYmVsID0gTGFiZWwoc2VsZi50b3AsIHRleHQ9bGFiZWx0ZXh0KQorICAgICAgICAgICAgbGFiZWwuZ3JpZChyb3c9c2VsZi5yb3csIGNvbHVtbj0wLCBzdGlja3k9Im53IikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxhYmVsID0gJycKKyAgICAgICAgZnJhbWUgPSBGcmFtZShzZWxmLnRvcCkKKyAgICAgICAgZnJhbWUuZ3JpZChyb3c9c2VsZi5yb3csIGNvbHVtbj0xLCBjb2x1bW5zcGFuPTEsIHN0aWNreT0ibndlIikKICAgICAgICAgc2VsZi5yb3cgPSBzZWxmLnJvdyArIDEKLSAgICAgICAgcmV0dXJuIGYKKyAgICAgICAgcmV0dXJuIGZyYW1lLCBsYWJlbAorCisgICAgZGVmIGNyZWF0ZV9vcHRpb25fYnV0dG9ucyhzZWxmKToKKyAgICAgICAgJycnUmV0dXJuIChmaWxsZWQgZnJhbWUsIG9wdGlvbnMpIGZvciB0ZXN0aW5nLgorCisgICAgICAgIE9wdGlvbnMgaXMgYSBsaXN0IG9mIFNlYXJjaEVuZ2luZSBib29sZWFudmFyLCBsYWJlbCBwYWlycy4KKyAgICAgICAgQSBncmlkZGVkIGZyYW1lIGZyb20gbWFrZV9mcmFtZSBpcyBmaWxsZWQgd2l0aCBhIENoZWNrYnV0dG9uCisgICAgICAgIGZvciBlYWNoIHBhaXIsIGJvdW5kIHRvIHRoZSB2YXIsIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgbGFiZWwuCisgICAgICAgICcnJworICAgICAgICBmcmFtZSA9IHNlbGYubWFrZV9mcmFtZSgiT3B0aW9ucyIpWzBdCisgICAgICAgIGVuZ2luZSA9IHNlbGYuZW5naW5lCisgICAgICAgIG9wdGlvbnMgPSBbKGVuZ2luZS5yZXZhciwgIlJlZ3VsYXIgZXhwcmVzc2lvbiIpLAorICAgICAgICAgICAgICAgICAgIChlbmdpbmUuY2FzZXZhciwgIk1hdGNoIGNhc2UiKSwKKyAgICAgICAgICAgICAgICAgICAoZW5naW5lLndvcmR2YXIsICJXaG9sZSB3b3JkIildCisgICAgICAgIGlmIHNlbGYubmVlZHdyYXBidXR0b246CisgICAgICAgICAgICBvcHRpb25zLmFwcGVuZCgoZW5naW5lLndyYXB2YXIsICJXcmFwIGFyb3VuZCIpKQorICAgICAgICBmb3IgdmFyLCBsYWJlbCBpbiBvcHRpb25zOgorICAgICAgICAgICAgYnRuID0gQ2hlY2tidXR0b24oZnJhbWUsIGFuY2hvcj0idyIsIHZhcmlhYmxlPXZhciwgdGV4dD1sYWJlbCkKKyAgICAgICAgICAgIGJ0bi5wYWNrKHNpZGU9ImxlZnQiLCBmaWxsPSJib3RoIikKKyAgICAgICAgICAgIGlmIHZhci5nZXQoKToKKyAgICAgICAgICAgICAgICBidG4uc2VsZWN0KCkKKyAgICAgICAgcmV0dXJuIGZyYW1lLCBvcHRpb25zCisKKyAgICBkZWYgY3JlYXRlX290aGVyX2J1dHRvbnMoc2VsZik6CisgICAgICAgICcnJ1JldHVybiAoZnJhbWUsIG90aGVycykgZm9yIHRlc3RpbmcuCisKKyAgICAgICAgT3RoZXJzIGlzIGEgbGlzdCBvZiB2YWx1ZSwgbGFiZWwgcGFpcnMuCisgICAgICAgIEEgZ3JpZGRlZCBmcmFtZSBmcm9tIG1ha2VfZnJhbWUgaXMgZmlsbGVkIHdpdGggcmFkaW8gYnV0dG9ucy4KKyAgICAgICAgJycnCisgICAgICAgIGZyYW1lID0gc2VsZi5tYWtlX2ZyYW1lKCJEaXJlY3Rpb24iKVswXQorICAgICAgICB2YXIgPSBzZWxmLmVuZ2luZS5iYWNrdmFyCisgICAgICAgIG90aGVycyA9IFsoMSwgJ1VwJyksICgwLCAnRG93bicpXQorICAgICAgICBmb3IgdmFsLCBsYWJlbCBpbiBvdGhlcnM6CisgICAgICAgICAgICBidG4gPSBSYWRpb2J1dHRvbihmcmFtZSwgYW5jaG9yPSJ3IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlPXZhciwgdmFsdWU9dmFsLCB0ZXh0PWxhYmVsKQorICAgICAgICAgICAgYnRuLnBhY2soc2lkZT0ibGVmdCIsIGZpbGw9ImJvdGgiKQorICAgICAgICAgICAgaWYgdmFyLmdldCgpID09IHZhbDoKKyAgICAgICAgICAgICAgICBidG4uc2VsZWN0KCkKKyAgICAgICAgcmV0dXJuIGZyYW1lLCBvdGhlcnMKIAogICAgIGRlZiBtYWtlX2J1dHRvbihzZWxmLCBsYWJlbCwgY29tbWFuZCwgaXNkZWY9MCk6CisgICAgICAgICJSZXR1cm4gY29tbWFuZCBidXR0b24gZ3JpZGRlZCBpbiBjb21tYW5kIGZyYW1lLiIKICAgICAgICAgYiA9IEJ1dHRvbihzZWxmLmJ1dHRvbmZyYW1lLAogICAgICAgICAgICAgICAgICAgIHRleHQ9bGFiZWwsIGNvbW1hbmQ9Y29tbWFuZCwKICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PWlzZGVmIGFuZCAiYWN0aXZlIiBvciAibm9ybWFsIikKQEAgLTkyLDY2ICsxNzAsMTUgQEAKICAgICAgICAgc2VsZi5idXR0b25mcmFtZS5ncmlkKHJvd3NwYW49cm93cysxKQogICAgICAgICByZXR1cm4gYgogCi0gICAgZGVmIGNyZWF0ZV9lbnRyaWVzKHNlbGYpOgotICAgICAgICBzZWxmLmVudCA9IHNlbGYubWFrZV9lbnRyeSgiRmluZDoiLCBzZWxmLmVuZ2luZS5wYXR2YXIpCi0KLSAgICBkZWYgY3JlYXRlX29wdGlvbl9idXR0b25zKHNlbGYpOgotICAgICAgICBmID0gc2VsZi5tYWtlX2ZyYW1lKCJPcHRpb25zIikKLQotICAgICAgICBidG4gPSBDaGVja2J1dHRvbihmLCBhbmNob3I9InciLAotICAgICAgICAgICAgICAgIHZhcmlhYmxlPXNlbGYuZW5naW5lLnJldmFyLAotICAgICAgICAgICAgICAgIHRleHQ9IlJlZ3VsYXIgZXhwcmVzc2lvbiIpCi0gICAgICAgIGJ0bi5wYWNrKHNpZGU9ImxlZnQiLCBmaWxsPSJib3RoIikKLSAgICAgICAgaWYgc2VsZi5lbmdpbmUuaXNyZSgpOgotICAgICAgICAgICAgYnRuLnNlbGVjdCgpCi0KLSAgICAgICAgYnRuID0gQ2hlY2tidXR0b24oZiwgYW5jaG9yPSJ3IiwKLSAgICAgICAgICAgICAgICB2YXJpYWJsZT1zZWxmLmVuZ2luZS5jYXNldmFyLAotICAgICAgICAgICAgICAgIHRleHQ9Ik1hdGNoIGNhc2UiKQotICAgICAgICBidG4ucGFjayhzaWRlPSJsZWZ0IiwgZmlsbD0iYm90aCIpCi0gICAgICAgIGlmIHNlbGYuZW5naW5lLmlzY2FzZSgpOgotICAgICAgICAgICAgYnRuLnNlbGVjdCgpCi0KLSAgICAgICAgYnRuID0gQ2hlY2tidXR0b24oZiwgYW5jaG9yPSJ3IiwKLSAgICAgICAgICAgICAgICB2YXJpYWJsZT1zZWxmLmVuZ2luZS53b3JkdmFyLAotICAgICAgICAgICAgICAgIHRleHQ9Ildob2xlIHdvcmQiKQotICAgICAgICBidG4ucGFjayhzaWRlPSJsZWZ0IiwgZmlsbD0iYm90aCIpCi0gICAgICAgIGlmIHNlbGYuZW5naW5lLmlzd29yZCgpOgotICAgICAgICAgICAgYnRuLnNlbGVjdCgpCi0KLSAgICAgICAgaWYgc2VsZi5uZWVkd3JhcGJ1dHRvbjoKLSAgICAgICAgICAgIGJ0biA9IENoZWNrYnV0dG9uKGYsIGFuY2hvcj0idyIsCi0gICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlPXNlbGYuZW5naW5lLndyYXB2YXIsCi0gICAgICAgICAgICAgICAgICAgIHRleHQ9IldyYXAgYXJvdW5kIikKLSAgICAgICAgICAgIGJ0bi5wYWNrKHNpZGU9ImxlZnQiLCBmaWxsPSJib3RoIikKLSAgICAgICAgICAgIGlmIHNlbGYuZW5naW5lLmlzd3JhcCgpOgotICAgICAgICAgICAgICAgIGJ0bi5zZWxlY3QoKQotCi0gICAgZGVmIGNyZWF0ZV9vdGhlcl9idXR0b25zKHNlbGYpOgotICAgICAgICBmID0gc2VsZi5tYWtlX2ZyYW1lKCJEaXJlY3Rpb24iKQotCi0gICAgICAgICNsYmwgPSBMYWJlbChmLCB0ZXh0PSJEaXJlY3Rpb246ICIpCi0gICAgICAgICNsYmwucGFjayhzaWRlPSJsZWZ0IikKLQotICAgICAgICBidG4gPSBSYWRpb2J1dHRvbihmLCBhbmNob3I9InciLAotICAgICAgICAgICAgICAgIHZhcmlhYmxlPXNlbGYuZW5naW5lLmJhY2t2YXIsIHZhbHVlPTEsCi0gICAgICAgICAgICAgICAgdGV4dD0iVXAiKQotICAgICAgICBidG4ucGFjayhzaWRlPSJsZWZ0IiwgZmlsbD0iYm90aCIpCi0gICAgICAgIGlmIHNlbGYuZW5naW5lLmlzYmFjaygpOgotICAgICAgICAgICAgYnRuLnNlbGVjdCgpCi0KLSAgICAgICAgYnRuID0gUmFkaW9idXR0b24oZiwgYW5jaG9yPSJ3IiwKLSAgICAgICAgICAgICAgICB2YXJpYWJsZT1zZWxmLmVuZ2luZS5iYWNrdmFyLCB2YWx1ZT0wLAotICAgICAgICAgICAgICAgIHRleHQ9IkRvd24iKQotICAgICAgICBidG4ucGFjayhzaWRlPSJsZWZ0IiwgZmlsbD0iYm90aCIpCi0gICAgICAgIGlmIG5vdCBzZWxmLmVuZ2luZS5pc2JhY2soKToKLSAgICAgICAgICAgIGJ0bi5zZWxlY3QoKQotCiAgICAgZGVmIGNyZWF0ZV9jb21tYW5kX2J1dHRvbnMoc2VsZik6Ci0gICAgICAgICMKLSAgICAgICAgIyBwbGFjZSBidXR0b24gZnJhbWUgb24gdGhlIHJpZ2h0CisgICAgICAgICJQbGFjZSBidXR0b25zIGluIHZlcnRpY2FsIGNvbW1hbmQgZnJhbWUgZ3JpZGRlZCBvbiByaWdodC4iCiAgICAgICAgIGYgPSBzZWxmLmJ1dHRvbmZyYW1lID0gRnJhbWUoc2VsZi50b3ApCiAgICAgICAgIGYuZ3JpZChyb3c9MCxjb2x1bW49MixwYWR4PTIscGFkeT0yLGlwYWR4PTIsaXBhZHk9MikKIAogICAgICAgICBiID0gc2VsZi5tYWtlX2J1dHRvbigiY2xvc2UiLCBzZWxmLmNsb3NlKQogICAgICAgICBiLmxvd2VyKCkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBpbXBvcnQgdW5pdHRlc3QKKyAgICB1bml0dGVzdC5tYWluKAorICAgICAgICAnaWRsZWxpYi5pZGxlX3Rlc3QudGVzdF9zZWFyY2hkaWFsb2diYXNlJywgdmVyYm9zaXR5PTIpCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9TZWFyY2hFbmdpbmUucHkgYi9MaWIvaWRsZWxpYi9TZWFyY2hFbmdpbmUucHkKaW5kZXggOWQzYzRjYi4uMzc4ODNiZiAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvU2VhcmNoRW5naW5lLnB5CisrKyBiL0xpYi9pZGxlbGliL1NlYXJjaEVuZ2luZS5weQpAQCAtODUsNyArODUsNyBAQAogICAgICAgICBleGNlcHQgcmUuZXJyb3IgYXMgd2hhdDoKICAgICAgICAgICAgIGFyZ3MgPSB3aGF0LmFyZ3MKICAgICAgICAgICAgIG1zZyA9IGFyZ3NbMF0KLSAgICAgICAgICAgIGNvbCA9IGFyZ1sxXSBpZiBsZW4oYXJncykgPj0gMiBlbHNlIC0xCisgICAgICAgICAgICBjb2wgPSBhcmdzWzFdIGlmIGxlbihhcmdzKSA+PSAyIGVsc2UgLTEKICAgICAgICAgICAgIHNlbGYucmVwb3J0X2Vycm9yKHBhdCwgbXNnLCBjb2wpCiAgICAgICAgICAgICByZXR1cm4gTm9uZQogICAgICAgICByZXR1cm4gcHJvZwpAQCAtMTA3LDcgKzEwNyw3IEBACiAgICAgICAgIEl0IGRpcmVjdGx5IHJldHVybiB0aGUgcmVzdWx0IG9mIHRoYXQgY2FsbC4KIAogICAgICAgICBUZXh0IGlzIGEgdGV4dCB3aWRnZXQuIFByb2cgaXMgYSBwcmVjb21waWxlZCBwYXR0ZXJuLgotICAgICAgICBUaGUgb2sgcGFyYW1ldGVyaXMgYSBiaXQgY29tcGxpY2F0ZWQgYXMgaXQgaGFzIHR3byBlZmZlY3RzLgorICAgICAgICBUaGUgb2sgcGFyYW1ldGVyIGlzIGEgYml0IGNvbXBsaWNhdGVkIGFzIGl0IGhhcyB0d28gZWZmZWN0cy4KIAogICAgICAgICBJZiB0aGVyZSBpcyBhIHNlbGVjdGlvbiwgdGhlIHNlYXJjaCBiZWdpbiBhdCBlaXRoZXIgZW5kLAogICAgICAgICBkZXBlbmRpbmcgb24gdGhlIGRpcmVjdGlvbiBzZXR0aW5nIGFuZCBvaywgd2l0aCBvayBtZWFuaW5nIHRoYXQKQEAgLTE5MSw3ICsxOTEsNyBAQAogCiAgICAgVGhpcyBpcyBkb25lIGJ5IHNlYXJjaGluZyBmb3J3YXJkcyB1bnRpbCB0aGVyZSBpcyBubyBtYXRjaC4KICAgICBQcm9nOiBjb21waWxlZCByZSBvYmplY3Qgd2l0aCBhIHNlYXJjaCBtZXRob2QgcmV0dXJuaW5nIGEgbWF0Y2guCi0gICAgQ2hhcnM6IGxpbmUgb2YgdGV4dCwgd2l0aG91dCBcbi4KKyAgICBDaGFyczogbGluZSBvZiB0ZXh0LCB3aXRob3V0IFxcbi4KICAgICBDb2w6IHN0b3AgaW5kZXggZm9yIHRoZSBzZWFyY2g7IHRoZSBsaW1pdCBmb3IgbWF0Y2guZW5kKCkuCiAgICAgJycnCiAgICAgbSA9IHByb2cuc2VhcmNoKGNoYXJzKQpAQCAtMjI5LDYgKzIyOSw1IEBACiAgICAgcmV0dXJuIGxpbmUsIGNvbAogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydDsgc3VwcG9ydC51c2VfcmVzb3VyY2VzID0gWydndWknXQogICAgIGltcG9ydCB1bml0dGVzdAogICAgIHVuaXR0ZXN0Lm1haW4oJ2lkbGVsaWIuaWRsZV90ZXN0LnRlc3Rfc2VhcmNoZW5naW5lJywgdmVyYm9zaXR5PTIsIGV4aXQ9RmFsc2UpCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9TdGFja1ZpZXdlci5weSBiL0xpYi9pZGxlbGliL1N0YWNrVmlld2VyLnB5CmluZGV4IDRlZjJkMzEuLmNjYzc1NWMgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL1N0YWNrVmlld2VyLnB5CisrKyBiL0xpYi9pZGxlbGliL1N0YWNrVmlld2VyLnB5CkBAIC0xLDE0ICsxLDE2IEBACiBpbXBvcnQgb3MKIGltcG9ydCBzeXMKIGltcG9ydCBsaW5lY2FjaGUKK2ltcG9ydCByZQoraW1wb3J0IHRraW50ZXIgYXMgdGsKIAogZnJvbSBpZGxlbGliLlRyZWVXaWRnZXQgaW1wb3J0IFRyZWVOb2RlLCBUcmVlSXRlbSwgU2Nyb2xsZWRDYW52YXMKIGZyb20gaWRsZWxpYi5PYmplY3RCcm93c2VyIGltcG9ydCBPYmplY3RUcmVlSXRlbSwgbWFrZV9vYmplY3R0cmVlaXRlbQorZnJvbSBpZGxlbGliLlB5U2hlbGwgaW1wb3J0IFB5U2hlbGxGaWxlTGlzdAogCiBkZWYgU3RhY2tCcm93c2VyKHJvb3QsIGZsaXN0PU5vbmUsIHRiPU5vbmUsIHRvcD1Ob25lKToKICAgICBpZiB0b3AgaXMgTm9uZToKLSAgICAgICAgZnJvbSB0a2ludGVyIGltcG9ydCBUb3BsZXZlbAotICAgICAgICB0b3AgPSBUb3BsZXZlbChyb290KQorICAgICAgICB0b3AgPSB0ay5Ub3BsZXZlbChyb290KQogICAgIHNjID0gU2Nyb2xsZWRDYW52YXModG9wLCBiZz0id2hpdGUiLCBoaWdobGlnaHR0aGlja25lc3M9MCkKICAgICBzYy5mcmFtZS5wYWNrKGV4cGFuZD0xLCBmaWxsPSJib3RoIikKICAgICBpdGVtID0gU3RhY2tUcmVlSXRlbShmbGlzdCwgdGIpCkBAIC0xMDUsMTIgKzEwNyw5IEBACiAgICAgZGVmIElzRXhwYW5kYWJsZShzZWxmKToKICAgICAgICAgcmV0dXJuIGxlbihzZWxmLm9iamVjdCkgPiAwCiAKLSAgICBkZWYga2V5cyhzZWxmKToKLSAgICAgICAgcmV0dXJuIGxpc3Qoc2VsZi5vYmplY3Qua2V5cygpKQotCiAgICAgZGVmIEdldFN1Ykxpc3Qoc2VsZik6CiAgICAgICAgIHN1Ymxpc3QgPSBbXQotICAgICAgICBmb3Iga2V5IGluIHNlbGYua2V5cygpOgorICAgICAgICBmb3Iga2V5IGluIHNlbGYub2JqZWN0LmtleXMoKToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICB2YWx1ZSA9IHNlbGYub2JqZWN0W2tleV0KICAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKQEAgLTEyMCwzICsxMTksMzMgQEAKICAgICAgICAgICAgIGl0ZW0gPSBtYWtlX29iamVjdHRyZWVpdGVtKGtleSArICIgPSIsIHZhbHVlLCBzZXRmdW5jdGlvbikKICAgICAgICAgICAgIHN1Ymxpc3QuYXBwZW5kKGl0ZW0pCiAgICAgICAgIHJldHVybiBzdWJsaXN0CisKKyAgICBkZWYga2V5cyhzZWxmKTogICMgdW51c2VkLCBsZWZ0IGZvciBwb3NzaWJsZSAzcmQgcGFydHkgdXNlCisgICAgICAgIHJldHVybiBsaXN0KHNlbGYub2JqZWN0LmtleXMoKSkKKworZGVmIF9zdGFja192aWV3ZXIocGFyZW50KToKKyAgICByb290ID0gdGsuVGsoKQorICAgIHJvb3QudGl0bGUoIlRlc3QgU3RhY2tWaWV3ZXIiKQorICAgIHdpZHRoLCBoZWlnaHQsIHgsIHkgPSBsaXN0KG1hcChpbnQsIHJlLnNwbGl0KCdbeCtdJywgcGFyZW50Lmdlb21ldHJ5KCkpKSkKKyAgICByb290Lmdlb21ldHJ5KCIrJWQrJWQiJSh4LCB5ICsgMTUwKSkKKyAgICBmbGlzdCA9IFB5U2hlbGxGaWxlTGlzdChyb290KQorICAgIHRyeTogIyB0byBvYnRhaW4gYSB0cmFjZWJhY2sgb2JqZWN0CisgICAgICAgIGludGVudGlvbmFsX25hbWVfZXJyb3IKKyAgICBleGNlcHQgTmFtZUVycm9yOgorICAgICAgICBleGNfdHlwZSwgZXhjX3ZhbHVlLCBleGNfdGIgPSBzeXMuZXhjX2luZm8oKQorCisgICAgIyBpbmplY3Qgc3RhY2sgdHJhY2UgdG8gc3lzCisgICAgc3lzLmxhc3RfdHlwZSA9IGV4Y190eXBlCisgICAgc3lzLmxhc3RfdmFsdWUgPSBleGNfdmFsdWUKKyAgICBzeXMubGFzdF90cmFjZWJhY2sgPSBleGNfdGIKKworICAgIFN0YWNrQnJvd3Nlcihyb290LCBmbGlzdD1mbGlzdCwgdG9wPXJvb3QsIHRiPWV4Y190YikKKworICAgICMgcmVzdG9yZSBzeXMgdG8gb3JpZ2luYWwgc3RhdGUKKyAgICBkZWwgc3lzLmxhc3RfdHlwZQorICAgIGRlbCBzeXMubGFzdF92YWx1ZQorICAgIGRlbCBzeXMubGFzdF90cmFjZWJhY2sKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBmcm9tIGlkbGVsaWIuaWRsZV90ZXN0Lmh0ZXN0IGltcG9ydCBydW4KKyAgICBydW4oX3N0YWNrX3ZpZXdlcikKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL1Rvb2xUaXAucHkgYi9MaWIvaWRsZWxpYi9Ub29sVGlwLnB5CmluZGV4IGIxNzg4MDMuLjk2NDEwN2UgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL1Rvb2xUaXAucHkKKysrIGIvTGliL2lkbGVsaWIvVG9vbFRpcC5weQpAQCAtNzYsMTQgKzc2LDIyIEBACiAgICAgICAgIGZvciBpdGVtIGluIHNlbGYuaXRlbXM6CiAgICAgICAgICAgICBsaXN0Ym94Lmluc2VydChFTkQsIGl0ZW0pCiAKLWRlZiBtYWluKCk6Ci0gICAgIyBUZXN0IGNvZGUKK2RlZiBfdG9vbHRpcChwYXJlbnQpOgogICAgIHJvb3QgPSBUaygpCi0gICAgYiA9IEJ1dHRvbihyb290LCB0ZXh0PSJIZWxsbyIsIGNvbW1hbmQ9cm9vdC5kZXN0cm95KQotICAgIGIucGFjaygpCi0gICAgcm9vdC51cGRhdGUoKQotICAgIHRpcCA9IExpc3Rib3hUb29sVGlwKGIsIFsiSGVsbG8iLCAid29ybGQiXSkKKyAgICByb290LnRpdGxlKCJUZXN0IHRvb2x0aXAiKQorICAgIHdpZHRoLCBoZWlnaHQsIHgsIHkgPSBsaXN0KG1hcChpbnQsIHJlLnNwbGl0KCdbeCtdJywgcGFyZW50Lmdlb21ldHJ5KCkpKSkKKyAgICByb290Lmdlb21ldHJ5KCIrJWQrJWQiJSh4LCB5ICsgMTUwKSkKKyAgICBsYWJlbCA9IExhYmVsKHJvb3QsIHRleHQ9IlBsYWNlIHlvdXIgbW91c2Ugb3ZlciBidXR0b25zIikKKyAgICBsYWJlbC5wYWNrKCkKKyAgICBidXR0b24xID0gQnV0dG9uKHJvb3QsIHRleHQ9IkJ1dHRvbiAxIikKKyAgICBidXR0b24yID0gQnV0dG9uKHJvb3QsIHRleHQ9IkJ1dHRvbiAyIikKKyAgICBidXR0b24xLnBhY2soKQorICAgIGJ1dHRvbjIucGFjaygpCisgICAgVG9vbFRpcChidXR0b24xLCAiVGhpcyBpcyB0b29sdGlwIHRleHQgZm9yIGJ1dHRvbjEuIikKKyAgICBMaXN0Ym94VG9vbFRpcChidXR0b24yLCBbIlRoaXMgaXMiLCJtdWx0aXBsZSBsaW5lIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAidG9vbHRpcCB0ZXh0IiwiZm9yIGJ1dHRvbjIiXSkKICAgICByb290Lm1haW5sb29wKCkKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICBtYWluKCkKKyAgICBmcm9tIGlkbGVsaWIuaWRsZV90ZXN0Lmh0ZXN0IGltcG9ydCBydW4KKyAgICBydW4oX3Rvb2x0aXApCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9UcmVlV2lkZ2V0LnB5IGIvTGliL2lkbGVsaWIvVHJlZVdpZGdldC5weQppbmRleCAyNWJhZTQ4Li5hMTk1NzhmIDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9UcmVlV2lkZ2V0LnB5CisrKyBiL0xpYi9pZGxlbGliL1RyZWVXaWRnZXQucHkKQEAgLTE3MywxMSArMTczLDEyIEBACiAKICAgICBkZWYgZHJhdyhzZWxmLCB4LCB5KToKICAgICAgICAgIyBYWFggVGhpcyBoYXJkLWNvZGVzIHRvbyBtYW55IGdlb21ldHJ5IGNvbnN0YW50cyEKKyAgICAgICAgZHkgPSAyMAogICAgICAgICBzZWxmLngsIHNlbGYueSA9IHgsIHkKICAgICAgICAgc2VsZi5kcmF3aWNvbigpCiAgICAgICAgIHNlbGYuZHJhd3RleHQoKQogICAgICAgICBpZiBzZWxmLnN0YXRlICE9ICdleHBhbmRlZCc6Ci0gICAgICAgICAgICByZXR1cm4geSsxNworICAgICAgICAgICAgcmV0dXJuIHkgKyBkeQogICAgICAgICAjIGRyYXcgY2hpbGRyZW4KICAgICAgICAgaWYgbm90IHNlbGYuY2hpbGRyZW46CiAgICAgICAgICAgICBzdWJsaXN0ID0gc2VsZi5pdGVtLl9HZXRTdWJMaXN0KCkKQEAgLTE4OCw3ICsxODksNyBAQAogICAgICAgICAgICAgICAgIGNoaWxkID0gc2VsZi5fX2NsYXNzX18oc2VsZi5jYW52YXMsIHNlbGYsIGl0ZW0pCiAgICAgICAgICAgICAgICAgc2VsZi5jaGlsZHJlbi5hcHBlbmQoY2hpbGQpCiAgICAgICAgIGN4ID0geCsyMAotICAgICAgICBjeSA9IHkrMTcKKyAgICAgICAgY3kgPSB5ICsgZHkKICAgICAgICAgY3lsYXN0ID0gMAogICAgICAgICBmb3IgY2hpbGQgaW4gc2VsZi5jaGlsZHJlbjoKICAgICAgICAgICAgIGN5bGFzdCA9IGN5CkBAIC0yMjcsNyArMjI4LDcgQEAKIAogICAgIGRlZiBkcmF3dGV4dChzZWxmKToKICAgICAgICAgdGV4dHggPSBzZWxmLngrMjAtMQotICAgICAgICB0ZXh0eSA9IHNlbGYueS0xCisgICAgICAgIHRleHR5ID0gc2VsZi55LTQKICAgICAgICAgbGFiZWx0ZXh0ID0gc2VsZi5pdGVtLkdldExhYmVsVGV4dCgpCiAgICAgICAgIGlmIGxhYmVsdGV4dDoKICAgICAgICAgICAgIGlkID0gc2VsZi5jYW52YXMuY3JlYXRlX3RleHQodGV4dHgsIHRleHR5LCBhbmNob3I9Im53IiwKQEAgLTI0NCwxMSArMjQ1LDExIEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLmVkaXRfZmluaXNoKCkKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgbGFiZWwgPSBzZWxmLmxhYmVsCisgICAgICAgICAgICBzZWxmLmxhYmVsCiAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKICAgICAgICAgICAgICMgcGFkZGluZyBjYXJlZnVsbHkgc2VsZWN0ZWQgKG9uIFdpbmRvd3MpIHRvIG1hdGNoIEVudHJ5IHdpZGdldDoKICAgICAgICAgICAgIHNlbGYubGFiZWwgPSBMYWJlbChzZWxmLmNhbnZhcywgdGV4dD10ZXh0LCBiZD0wLCBwYWR4PTIsIHBhZHk9MikKLSAgICAgICAgdGhlbWUgPSBpZGxlQ29uZi5HZXRPcHRpb24oJ21haW4nLCdUaGVtZScsJ25hbWUnKQorICAgICAgICB0aGVtZSA9IGlkbGVDb25mLkN1cnJlbnRUaGVtZSgpCiAgICAgICAgIGlmIHNlbGYuc2VsZWN0ZWQ6CiAgICAgICAgICAgICBzZWxmLmxhYmVsLmNvbmZpZ3VyZShpZGxlQ29uZi5HZXRIaWdobGlnaHQodGhlbWUsICdoaWxpdGUnKSkKICAgICAgICAgZWxzZToKQEAgLTM4MSw3ICszODIsNyBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBvcy5yZW5hbWUoc2VsZi5wYXRoLCBuZXdwYXRoKQogICAgICAgICAgICAgc2VsZi5wYXRoID0gbmV3cGF0aAotICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcGFzcwogCiAgICAgZGVmIEdldEljb25OYW1lKHNlbGYpOgpAQCAtMzk0LDcgKzM5NSw3IEBACiAgICAgZGVmIEdldFN1Ykxpc3Qoc2VsZik6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG5hbWVzID0gb3MubGlzdGRpcihzZWxmLnBhdGgpCi0gICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICByZXR1cm4gW10KICAgICAgICAgbmFtZXMuc29ydChrZXkgPSBvcy5wYXRoLm5vcm1jYXNlKQogICAgICAgICBzdWJsaXN0ID0gW10KQEAgLTQ0OCwyOSArNDQ5LDE4IEBACiAgICAgICAgIHJldHVybiAiYnJlYWsiCiAKIAotIyBUZXN0aW5nIGZ1bmN0aW9ucwotCi1kZWYgdGVzdCgpOgotICAgIGZyb20gaWRsZWxpYiBpbXBvcnQgUHlTaGVsbAotICAgIHJvb3QgPSBUb3BsZXZlbChQeVNoZWxsLnJvb3QpCi0gICAgcm9vdC5jb25maWd1cmUoYmQ9MCwgYmc9InllbGxvdyIpCi0gICAgcm9vdC5mb2N1c19zZXQoKQorZGVmIF90cmVlX3dpZGdldChwYXJlbnQpOgorICAgIHJvb3QgPSBUaygpCisgICAgcm9vdC50aXRsZSgiVGVzdCBUcmVlV2lkZ2V0IikKKyAgICB3aWR0aCwgaGVpZ2h0LCB4LCB5ID0gbGlzdChtYXAoaW50LCByZS5zcGxpdCgnW3grXScsIHBhcmVudC5nZW9tZXRyeSgpKSkpCisgICAgcm9vdC5nZW9tZXRyeSgiKyVkKyVkIiUoeCwgeSArIDE1MCkpCiAgICAgc2MgPSBTY3JvbGxlZENhbnZhcyhyb290LCBiZz0id2hpdGUiLCBoaWdobGlnaHR0aGlja25lc3M9MCwgdGFrZWZvY3VzPTEpCi0gICAgc2MuZnJhbWUucGFjayhleHBhbmQ9MSwgZmlsbD0iYm90aCIpCi0gICAgaXRlbSA9IEZpbGVUcmVlSXRlbSgiQzovd2luZG93cy9kZXNrdG9wIikKKyAgICBzYy5mcmFtZS5wYWNrKGV4cGFuZD0xLCBmaWxsPSJib3RoIiwgc2lkZT1MRUZUKQorICAgIGl0ZW0gPSBGaWxlVHJlZUl0ZW0ob3MuZ2V0Y3dkKCkpCiAgICAgbm9kZSA9IFRyZWVOb2RlKHNjLmNhbnZhcywgTm9uZSwgaXRlbSkKICAgICBub2RlLmV4cGFuZCgpCi0KLWRlZiB0ZXN0MigpOgotICAgICMgdGVzdCB3L28gc2Nyb2xsaW5nIGNhbnZhcwotICAgIHJvb3QgPSBUaygpCi0gICAgcm9vdC5jb25maWd1cmUoYmQ9MCkKLSAgICBjYW52YXMgPSBDYW52YXMocm9vdCwgYmc9IndoaXRlIiwgaGlnaGxpZ2h0dGhpY2tuZXNzPTApCi0gICAgY2FudmFzLnBhY2soZXhwYW5kPTEsIGZpbGw9ImJvdGgiKQotICAgIGl0ZW0gPSBGaWxlVHJlZUl0ZW0ob3MuY3VyZGlyKQotICAgIG5vZGUgPSBUcmVlTm9kZShjYW52YXMsIE5vbmUsIGl0ZW0pCi0gICAgbm9kZS51cGRhdGUoKQotICAgIGNhbnZhcy5mb2N1c19zZXQoKQorICAgIHJvb3QubWFpbmxvb3AoKQogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3QoKQorICAgIGZyb20gaWRsZWxpYi5pZGxlX3Rlc3QuaHRlc3QgaW1wb3J0IHJ1bgorICAgIHJ1bihfdHJlZV93aWRnZXQpCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9VbmRvRGVsZWdhdG9yLnB5IGIvTGliL2lkbGVsaWIvVW5kb0RlbGVnYXRvci5weQppbmRleCBkMmVmNjM4Li4wNGMxY2Y1IDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9VbmRvRGVsZWdhdG9yLnB5CisrKyBiL0xpYi9pZGxlbGliL1VuZG9EZWxlZ2F0b3IucHkKQEAgLTMzNiwxNyArMzM2LDMwIEBACiAgICAgICAgIHNlbGYuZGVwdGggPSBzZWxmLmRlcHRoICsgaW5jcgogICAgICAgICByZXR1cm4gc2VsZi5kZXB0aAogCi1kZWYgbWFpbigpOgorZGVmIF91bmRvX2RlbGVnYXRvcihwYXJlbnQpOgogICAgIGZyb20gaWRsZWxpYi5QZXJjb2xhdG9yIGltcG9ydCBQZXJjb2xhdG9yCiAgICAgcm9vdCA9IFRrKCkKLSAgICByb290LndtX3Byb3RvY29sKCJXTV9ERUxFVEVfV0lORE9XIiwgcm9vdC5xdWl0KQotICAgIHRleHQgPSBUZXh0KCkKKyAgICByb290LnRpdGxlKCJUZXN0IFVuZG9EZWxlZ2F0b3IiKQorICAgIHdpZHRoLCBoZWlnaHQsIHgsIHkgPSBsaXN0KG1hcChpbnQsIHJlLnNwbGl0KCdbeCtdJywgcGFyZW50Lmdlb21ldHJ5KCkpKSkKKyAgICByb290Lmdlb21ldHJ5KCIrJWQrJWQiJSh4LCB5ICsgMTUwKSkKKworICAgIHRleHQgPSBUZXh0KHJvb3QpCisgICAgdGV4dC5jb25maWcoaGVpZ2h0PTEwKQogICAgIHRleHQucGFjaygpCiAgICAgdGV4dC5mb2N1c19zZXQoKQogICAgIHAgPSBQZXJjb2xhdG9yKHRleHQpCiAgICAgZCA9IFVuZG9EZWxlZ2F0b3IoKQogICAgIHAuaW5zZXJ0ZmlsdGVyKGQpCisKKyAgICB1bmRvID0gQnV0dG9uKHJvb3QsIHRleHQ9IlVuZG8iLCBjb21tYW5kPWxhbWJkYTpkLnVuZG9fZXZlbnQoTm9uZSkpCisgICAgdW5kby5wYWNrKHNpZGU9J2xlZnQnKQorICAgIHJlZG8gPSBCdXR0b24ocm9vdCwgdGV4dD0iUmVkbyIsIGNvbW1hbmQ9bGFtYmRhOmQucmVkb19ldmVudChOb25lKSkKKyAgICByZWRvLnBhY2soc2lkZT0nbGVmdCcpCisgICAgZHVtcCA9IEJ1dHRvbihyb290LCB0ZXh0PSJEdW1wIiwgY29tbWFuZD1sYW1iZGE6ZC5kdW1wX2V2ZW50KE5vbmUpKQorICAgIGR1bXAucGFjayhzaWRlPSdsZWZ0JykKKwogICAgIHJvb3QubWFpbmxvb3AoKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIG1haW4oKQorICAgIGZyb20gaWRsZWxpYi5pZGxlX3Rlc3QuaHRlc3QgaW1wb3J0IHJ1bgorICAgIHJ1bihfdW5kb19kZWxlZ2F0b3IpCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9XaWRnZXRSZWRpcmVjdG9yLnB5IGIvTGliL2lkbGVsaWIvV2lkZ2V0UmVkaXJlY3Rvci5weQppbmRleCBiYTUyNTFmLi5iM2Q3YmZhIDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9XaWRnZXRSZWRpcmVjdG9yLnB5CisrKyBiL0xpYi9pZGxlbGliL1dpZGdldFJlZGlyZWN0b3IucHkKQEAgLTEsMjkgKzEsNDAgQEAKLWZyb20gdGtpbnRlciBpbXBvcnQgKgorZnJvbSB0a2ludGVyIGltcG9ydCBUY2xFcnJvcgogCiBjbGFzcyBXaWRnZXRSZWRpcmVjdG9yOgotCiAgICAgIiIiU3VwcG9ydCBmb3IgcmVkaXJlY3RpbmcgYXJiaXRyYXJ5IHdpZGdldCBzdWJjb21tYW5kcy4KIAotICAgIFNvbWUgVGsgb3BlcmF0aW9ucyBkb24ndCBub3JtYWxseSBwYXNzIHRocm91Z2ggVGtpbnRlci4gIEZvciBleGFtcGxlLCBpZiBhCisgICAgU29tZSBUayBvcGVyYXRpb25zIGRvbid0IG5vcm1hbGx5IHBhc3MgdGhyb3VnaCB0a2ludGVyLiAgRm9yIGV4YW1wbGUsIGlmIGEKICAgICBjaGFyYWN0ZXIgaXMgaW5zZXJ0ZWQgaW50byBhIFRleHQgd2lkZ2V0IGJ5IHByZXNzaW5nIGEga2V5LCBhIGRlZmF1bHQgVGsKICAgICBiaW5kaW5nIHRvIHRoZSB3aWRnZXQncyAnaW5zZXJ0JyBvcGVyYXRpb24gaXMgYWN0aXZhdGVkLCBhbmQgdGhlIFRrIGxpYnJhcnkKLSAgICBwcm9jZXNzZXMgdGhlIGluc2VydCB3aXRob3V0IGNhbGxpbmcgYmFjayBpbnRvIFRraW50ZXIuCisgICAgcHJvY2Vzc2VzIHRoZSBpbnNlcnQgd2l0aG91dCBjYWxsaW5nIGJhY2sgaW50byB0a2ludGVyLgogCi0gICAgQWx0aG91Z2ggYSBiaW5kaW5nIHRvIDxLZXk+IGNvdWxkIGJlIG1hZGUgdmlhIFRraW50ZXIsIHdoYXQgd2UgcmVhbGx5IHdhbnQKLSAgICB0byBkbyBpcyB0byBob29rIHRoZSBUayAnaW5zZXJ0JyBvcGVyYXRpb24gaXRzZWxmLgorICAgIEFsdGhvdWdoIGEgYmluZGluZyB0byA8S2V5PiBjb3VsZCBiZSBtYWRlIHZpYSB0a2ludGVyLCB3aGF0IHdlIHJlYWxseSB3YW50CisgICAgdG8gZG8gaXMgdG8gaG9vayB0aGUgVGsgJ2luc2VydCcgb3BlcmF0aW9uIGl0c2VsZi4gIEZvciBvbmUgdGhpbmcsIHdlIHdhbnQKKyAgICBhIHRleHQuaW5zZXJ0IGNhbGwgaW4gaWRsZSBjb2RlIHRvIGhhdmUgdGhlIHNhbWUgZWZmZWN0IGFzIGEga2V5IHByZXNzLgogCiAgICAgV2hlbiBhIHdpZGdldCBpcyBpbnN0YW50aWF0ZWQsIGEgVGNsIGNvbW1hbmQgaXMgY3JlYXRlZCB3aG9zZSBuYW1lIGlzIHRoZQogICAgIHNhbWUgYXMgdGhlIHBhdGhuYW1lIHdpZGdldC5fdy4gIFRoaXMgY29tbWFuZCBpcyB1c2VkIHRvIGludm9rZSB0aGUgdmFyaW91cwogICAgIHdpZGdldCBvcGVyYXRpb25zLCBlLmcuIGluc2VydCAoZm9yIGEgVGV4dCB3aWRnZXQpLiBXZSBhcmUgZ29pbmcgdG8gaG9vawogICAgIHRoaXMgY29tbWFuZCBhbmQgcHJvdmlkZSBhIGZhY2lsaXR5ICgncmVnaXN0ZXInKSB0byBpbnRlcmNlcHQgdGhlIHdpZGdldAotICAgIG9wZXJhdGlvbi4KKyAgICBvcGVyYXRpb24uICBXZSB3aWxsIGFsc28gaW50ZXJjZXB0IG1ldGhvZCBjYWxscyBvbiB0aGUgdGtpbnRlciBjbGFzcworICAgIGluc3RhbmNlIHRoYXQgcmVwcmVzZW50cyB0aGUgdGsgd2lkZ2V0LgogCi0gICAgSW4gSURMRSwgdGhlIGZ1bmN0aW9uIGJlaW5nIHJlZ2lzdGVyZWQgcHJvdmlkZXMgYWNjZXNzIHRvIHRoZSB0b3Agb2YgYQotICAgIFBlcmNvbGF0b3IgY2hhaW4uICBBdCB0aGUgYm90dG9tIG9mIHRoZSBjaGFpbiBpcyBhIGNhbGwgdG8gdGhlIG9yaWdpbmFsCi0gICAgVGsgd2lkZ2V0IG9wZXJhdGlvbi4KLQorICAgIEluIElETEUsIFdpZGdldFJlZGlyZWN0b3IgaXMgdXNlZCBpbiBQZXJjb2xhdG9yIHRvIGludGVyY2VwdCBUZXh0CisgICAgY29tbWFuZHMuICBUaGUgZnVuY3Rpb24gYmVpbmcgcmVnaXN0ZXJlZCBwcm92aWRlcyBhY2Nlc3MgdG8gdGhlIHRvcAorICAgIG9mIGEgUGVyY29sYXRvciBjaGFpbi4gIEF0IHRoZSBib3R0b20gb2YgdGhlIGNoYWluIGlzIGEgY2FsbCB0byB0aGUKKyAgICBvcmlnaW5hbCBUayB3aWRnZXQgb3BlcmF0aW9uLgogICAgICIiIgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCB3aWRnZXQpOgorICAgICAgICAnJydJbml0aWFsaXplIGF0dHJpYnV0ZXMgYW5kIHNldHVwIHJlZGlyZWN0aW9uLgorCisgICAgICAgIF9vcGVyYXRpb25zOiBkaWN0IG1hcHBpbmcgb3BlcmF0aW9uIG5hbWUgdG8gbmV3IGZ1bmN0aW9uLgorICAgICAgICB3aWRnZXQ6IHRoZSB3aWRnZXQgd2hvc2UgdGNsIGNvbW1hbmQgaXMgdG8gYmUgaW50ZXJjZXB0ZWQuCisgICAgICAgIHRrOiB3aWRnZXQudGssIGEgY29udmVuaWVuY2UgYXR0cmlidXRlLCBwcm9iYWJseSBub3QgbmVlZGVkLgorICAgICAgICBvcmlnOiBuZXcgbmFtZSBvZiB0aGUgb3JpZ2luYWwgdGNsIGNvbW1hbmQuCisKKyAgICAgICAgU2luY2UgcmVuYW1pbmcgdG8gb3JpZyBmYWlscyB3aXRoIFRjbEVycm9yIHdoZW4gb3JpZyBhbHJlYWR5CisgICAgICAgIGV4aXN0cywgb25seSBvbmUgV2lkZ2V0RGlyZWN0b3IgY2FuIGV4aXN0IGZvciBhIGdpdmVuIHdpZGdldC4KKyAgICAgICAgJycnCiAgICAgICAgIHNlbGYuX29wZXJhdGlvbnMgPSB7fQogICAgICAgICBzZWxmLndpZGdldCA9IHdpZGdldCAgICAgICAgICAgICMgd2lkZ2V0IGluc3RhbmNlCiAgICAgICAgIHNlbGYudGsgPSB0ayA9IHdpZGdldC50ayAgICAgICAgIyB3aWRnZXQncyByb290CkBAIC00MCwyNyArNTEsNDUgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYud2lkZ2V0Ll93KQogCiAgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICAiVW5yZWdpc3RlciBvcGVyYXRpb25zIGFuZCByZXZlcnQgcmVkaXJlY3Rpb24gY3JlYXRlZCBieSAuX19pbml0X18uIgogICAgICAgICBmb3Igb3BlcmF0aW9uIGluIGxpc3Qoc2VsZi5fb3BlcmF0aW9ucyk6CiAgICAgICAgICAgICBzZWxmLnVucmVnaXN0ZXIob3BlcmF0aW9uKQotICAgICAgICB3aWRnZXQgPSBzZWxmLndpZGdldDsgZGVsIHNlbGYud2lkZ2V0Ci0gICAgICAgIG9yaWcgPSBzZWxmLm9yaWc7IGRlbCBzZWxmLm9yaWcKKyAgICAgICAgd2lkZ2V0ID0gc2VsZi53aWRnZXQKICAgICAgICAgdGsgPSB3aWRnZXQudGsKICAgICAgICAgdyA9IHdpZGdldC5fdworICAgICAgICAjIFJlc3RvcmUgdGhlIG9yaWdpbmFsIHdpZGdldCBUY2wgY29tbWFuZC4KICAgICAgICAgdGsuZGVsZXRlY29tbWFuZCh3KQotICAgICAgICAjIHJlc3RvcmUgdGhlIG9yaWdpbmFsIHdpZGdldCBUY2wgY29tbWFuZDoKLSAgICAgICAgdGsuY2FsbCgicmVuYW1lIiwgb3JpZywgdykKKyAgICAgICAgdGsuY2FsbCgicmVuYW1lIiwgc2VsZi5vcmlnLCB3KQorICAgICAgICBkZWwgc2VsZi53aWRnZXQsIHNlbGYudGsgICMgU2hvdWxkIG5vdCBiZSBuZWVkZWQKKyAgICAgICAgIyBpZiBpbnN0YW5jZSBpcyBkZWxldGVkIGFmdGVyIGNsb3NlLCBhcyBpbiBQZXJjb2xhdG9yLgogCiAgICAgZGVmIHJlZ2lzdGVyKHNlbGYsIG9wZXJhdGlvbiwgZnVuY3Rpb24pOgorICAgICAgICAnJydSZXR1cm4gT3JpZ2luYWxDb21tYW5kKG9wZXJhdGlvbikgYWZ0ZXIgcmVnaXN0ZXJpbmcgZnVuY3Rpb24uCisKKyAgICAgICAgUmVnaXN0cmF0aW9uIGFkZHMgYW4gb3BlcmF0aW9uOiBmdW5jdGlvbiBwYWlyIHRvIC5fb3BlcmF0aW9ucy4KKyAgICAgICAgSXQgYWxzbyBhZGRzIGFuIHdpZGdldCBmdW5jdGlvbiBhdHRyaWJ1dGUgdGhhdCBtYXNrcyB0aGUgdGtpbnRlcgorICAgICAgICBjbGFzcyBpbnN0YW5jZSBtZXRob2QuICBNZXRob2QgbWFza2luZyBvcGVyYXRlcyBpbmRlcGVuZGVudGx5CisgICAgICAgIGZyb20gY29tbWFuZCBkaXNwYXRjaC4KKworICAgICAgICBJZiBhIHNlY29uZCBmdW5jdGlvbiBpcyByZWdpc3RlcmVkIGZvciB0aGUgc2FtZSBvcGVyYXRpb24sIHRoZQorICAgICAgICBmaXJzdCBmdW5jdGlvbiBpcyByZXBsYWNlZCBpbiBib3RoIHBsYWNlcy4KKyAgICAgICAgJycnCiAgICAgICAgIHNlbGYuX29wZXJhdGlvbnNbb3BlcmF0aW9uXSA9IGZ1bmN0aW9uCiAgICAgICAgIHNldGF0dHIoc2VsZi53aWRnZXQsIG9wZXJhdGlvbiwgZnVuY3Rpb24pCiAgICAgICAgIHJldHVybiBPcmlnaW5hbENvbW1hbmQoc2VsZiwgb3BlcmF0aW9uKQogCiAgICAgZGVmIHVucmVnaXN0ZXIoc2VsZiwgb3BlcmF0aW9uKToKKyAgICAgICAgJycnUmV0dXJuIHRoZSBmdW5jdGlvbiBmb3IgdGhlIG9wZXJhdGlvbiwgb3IgTm9uZS4KKworICAgICAgICBEZWxldGluZyB0aGUgaW5zdGFuY2UgYXR0cmlidXRlIHVubWFza3MgdGhlIGNsYXNzIGF0dHJpYnV0ZS4KKyAgICAgICAgJycnCiAgICAgICAgIGlmIG9wZXJhdGlvbiBpbiBzZWxmLl9vcGVyYXRpb25zOgogICAgICAgICAgICAgZnVuY3Rpb24gPSBzZWxmLl9vcGVyYXRpb25zW29wZXJhdGlvbl0KICAgICAgICAgICAgIGRlbCBzZWxmLl9vcGVyYXRpb25zW29wZXJhdGlvbl0KLSAgICAgICAgICAgIGlmIGhhc2F0dHIoc2VsZi53aWRnZXQsIG9wZXJhdGlvbik6CisgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgZGVsYXR0cihzZWxmLndpZGdldCwgb3BlcmF0aW9uKQorICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbgogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmV0dXJuIE5vbmUKQEAgLTg4LDE0ICsxMTcsMjkgQEAKIAogCiBjbGFzcyBPcmlnaW5hbENvbW1hbmQ6CisgICAgJycnQ2FsbGFibGUgZm9yIG9yaWdpbmFsIHRrIGNvbW1hbmQgdGhhdCBoYXMgYmVlbiByZWRpcmVjdGVkLgorCisgICAgUmV0dXJuZWQgYnkgLnJlZ2lzdGVyOyBjYW4gYmUgdXNlZCBpbiB0aGUgZnVuY3Rpb24gcmVnaXN0ZXJlZC4KKyAgICByZWRpciA9IFdpZGdldFJlZGlyZWN0b3IodGV4dCkKKyAgICBkZWYgbXlfaW5zZXJ0KCphcmdzKToKKyAgICAgICAgcHJpbnQoImluc2VydCIsIGFyZ3MpCisgICAgICAgIG9yaWdpbmFsX2luc2VydCgqYXJncykKKyAgICBvcmlnaW5hbF9pbnNlcnQgPSByZWRpci5yZWdpc3RlcigiaW5zZXJ0IiwgbXlfaW5zZXJ0KQorICAgICcnJwogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlZGlyLCBvcGVyYXRpb24pOgorICAgICAgICAnJydDcmVhdGUgLnRrX2NhbGwgYW5kIC5vcmlnX2FuZF9vcGVyYXRpb24gZm9yIC5fX2NhbGxfXyBtZXRob2QuCisKKyAgICAgICAgLnJlZGlyIGFuZCAub3BlcmF0aW9uIHN0b3JlIHRoZSBpbnB1dCBhcmdzIGZvciBfX3JlcHJfXy4KKyAgICAgICAgLnRrIGFuZCAub3JpZyBjb3B5IGF0dHJpYnV0ZXMgb2YgLnJlZGlyIChwcm9iYWJseSBub3QgbmVlZGVkKS4KKyAgICAgICAgJycnCiAgICAgICAgIHNlbGYucmVkaXIgPSByZWRpcgogICAgICAgICBzZWxmLm9wZXJhdGlvbiA9IG9wZXJhdGlvbgotICAgICAgICBzZWxmLnRrID0gcmVkaXIudGsKLSAgICAgICAgc2VsZi5vcmlnID0gcmVkaXIub3JpZwotICAgICAgICBzZWxmLnRrX2NhbGwgPSBzZWxmLnRrLmNhbGwKLSAgICAgICAgc2VsZi5vcmlnX2FuZF9vcGVyYXRpb24gPSAoc2VsZi5vcmlnLCBzZWxmLm9wZXJhdGlvbikKKyAgICAgICAgc2VsZi50ayA9IHJlZGlyLnRrICAjIHJlZHVuZGFudCB3aXRoIHNlbGYucmVkaXIKKyAgICAgICAgc2VsZi5vcmlnID0gcmVkaXIub3JpZyAgIyByZWR1bmRhbnQgd2l0aCBzZWxmLnJlZGlyCisgICAgICAgICMgVGhlc2UgdHdvIGNvdWxkIGJlIGRlbGV0ZWQgYWZ0ZXIgY2hlY2tpbmcgcmVjaXBpZW50IGNvZGUuCisgICAgICAgIHNlbGYudGtfY2FsbCA9IHJlZGlyLnRrLmNhbGwKKyAgICAgICAgc2VsZi5vcmlnX2FuZF9vcGVyYXRpb24gPSAocmVkaXIub3JpZywgb3BlcmF0aW9uKQogCiAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgICAgICByZXR1cm4gIk9yaWdpbmFsQ29tbWFuZCglciwgJXIpIiAlIChzZWxmLnJlZGlyLCBzZWxmLm9wZXJhdGlvbikKQEAgLTEwNCwyMyArMTQ4LDI3IEBACiAgICAgICAgIHJldHVybiBzZWxmLnRrX2NhbGwoc2VsZi5vcmlnX2FuZF9vcGVyYXRpb24gKyBhcmdzKQogCiAKLWRlZiBtYWluKCk6CitkZWYgX3dpZGdldF9yZWRpcmVjdG9yKHBhcmVudCk6ICAjIGh0ZXN0ICMKKyAgICBmcm9tIHRraW50ZXIgaW1wb3J0IFRrLCBUZXh0CisgICAgaW1wb3J0IHJlCisKICAgICByb290ID0gVGsoKQotICAgIHJvb3Qud21fcHJvdG9jb2woIldNX0RFTEVURV9XSU5ET1ciLCByb290LnF1aXQpCi0gICAgdGV4dCA9IFRleHQoKQorICAgIHJvb3QudGl0bGUoIlRlc3QgV2lkZ2V0UmVkaXJlY3RvciIpCisgICAgd2lkdGgsIGhlaWdodCwgeCwgeSA9IGxpc3QobWFwKGludCwgcmUuc3BsaXQoJ1t4K10nLCBwYXJlbnQuZ2VvbWV0cnkoKSkpKQorICAgIHJvb3QuZ2VvbWV0cnkoIislZCslZCIlKHgsIHkgKyAxNTApKQorICAgIHRleHQgPSBUZXh0KHJvb3QpCiAgICAgdGV4dC5wYWNrKCkKICAgICB0ZXh0LmZvY3VzX3NldCgpCiAgICAgcmVkaXIgPSBXaWRnZXRSZWRpcmVjdG9yKHRleHQpCi0gICAgZ2xvYmFsIHByZXZpb3VzX3RjbF9mY24KICAgICBkZWYgbXlfaW5zZXJ0KCphcmdzKToKICAgICAgICAgcHJpbnQoImluc2VydCIsIGFyZ3MpCi0gICAgICAgIHByZXZpb3VzX3RjbF9mY24oKmFyZ3MpCi0gICAgcHJldmlvdXNfdGNsX2ZjbiA9IHJlZGlyLnJlZ2lzdGVyKCJpbnNlcnQiLCBteV9pbnNlcnQpCisgICAgICAgIG9yaWdpbmFsX2luc2VydCgqYXJncykKKyAgICBvcmlnaW5hbF9pbnNlcnQgPSByZWRpci5yZWdpc3RlcigiaW5zZXJ0IiwgbXlfaW5zZXJ0KQogICAgIHJvb3QubWFpbmxvb3AoKQotICAgIHJlZGlyLnVucmVnaXN0ZXIoImluc2VydCIpICAjIHJ1bnMgYWZ0ZXIgZmlyc3QgJ2Nsb3NlIHdpbmRvdycKLSAgICByZWRpci5jbG9zZSgpCi0gICAgcm9vdC5tYWlubG9vcCgpCi0gICAgcm9vdC5kZXN0cm95KCkKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICBtYWluKCkKKyAgICBpbXBvcnQgdW5pdHRlc3QKKyAgICB1bml0dGVzdC5tYWluKCdpZGxlbGliLmlkbGVfdGVzdC50ZXN0X3dpZGdldHJlZGlyJywKKyAgICAgICAgICAgICAgICAgIHZlcmJvc2l0eT0yLCBleGl0PUZhbHNlKQorICAgIGZyb20gaWRsZWxpYi5pZGxlX3Rlc3QuaHRlc3QgaW1wb3J0IHJ1bgorICAgIHJ1bihfd2lkZ2V0X3JlZGlyZWN0b3IpCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9ab29tSGVpZ2h0LnB5IGIvTGliL2lkbGVsaWIvWm9vbUhlaWdodC5weQppbmRleCBlOGQxNzEwLi5hNWQ2NzllIDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9ab29tSGVpZ2h0LnB5CisrKyBiL0xpYi9pZGxlbGliL1pvb21IZWlnaHQucHkKQEAgLTMyLDcgKzMyLDcgQEAKICAgICAgICAgbmV3eSA9IDAKICAgICAgICAgbmV3aGVpZ2h0ID0gbmV3aGVpZ2h0IC0gNzIKIAotICAgIGVsaWYgbWFjb3N4U3VwcG9ydC5ydW5uaW5nQXNPU1hBcHAoKToKKyAgICBlbGlmIG1hY29zeFN1cHBvcnQuaXNBcXVhVGsoKToKICAgICAgICAgIyBUaGUgJzg4JyBiZWxvdyBpcyBhIG1hZ2ljIG51bWJlciB0aGF0IGF2b2lkcyBwbGFjaW5nIHRoZSBib3R0b20KICAgICAgICAgIyBvZiB0aGUgd2luZG93IGJlbG93IHRoZSBwYW5lbCBvbiBteSBtYWNoaW5lLiBJIGRvbid0IGtub3cgaG93CiAgICAgICAgICMgdG8gY2FsY3VsYXRlIHRoZSBjb3JyZWN0IHZhbHVlIGZvciB0aGlzIHdpdGggdGtpbnRlci4KZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL19faW5pdF9fLnB5IGIvTGliL2lkbGVsaWIvX19pbml0X18ucHkKaW5kZXggN2E4M2RkZS4uNzExZjYxYiAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvX19pbml0X18ucHkKKysrIGIvTGliL2lkbGVsaWIvX19pbml0X18ucHkKQEAgLTEgKzEsOCBAQAotIyBEdW1teSBmaWxlIHRvIG1ha2UgdGhpcyBhIHBhY2thZ2UuCisiIiJUaGUgaWRsZWxpYiBwYWNrYWdlIGltcGxlbWVudHMgdGhlIElkbGUgYXBwbGljYXRpb24uCisKK0lkbGUgaW5jbHVkZXMgYW4gaW50ZXJhY3RpdmUgc2hlbGwgYW5kIGVkaXRvci4KK1VzZSB0aGUgZmlsZXMgbmFtZWQgaWRsZS4qIHRvIHN0YXJ0IElkbGUuCisKK1RoZSBvdGhlciBmaWxlcyBhcmUgcHJpdmF0ZSBpbXBsZW1lbnRhdGlvbnMuICBUaGVpciBkZXRhaWxzIGFyZSBzdWJqZWN0IHRvCitjaGFuZ2UuICBTZWUgUEVQIDQzNCBmb3IgbW9yZS4gIEltcG9ydCB0aGVtIGF0IHlvdXIgb3duIHJpc2suCisiIiIKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL19fbWFpbl9fLnB5IGIvTGliL2lkbGVsaWIvX19tYWluX18ucHkKaW5kZXggMDY2NmYyZi4uMmVkZjVmNyAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvX19tYWluX18ucHkKKysrIGIvTGliL2lkbGVsaWIvX19tYWluX18ucHkKQEAgLTMsNyArMyw2IEBACiAKIFJ1biBJRExFIGFzIHB5dGhvbiAtbSBpZGxlbGliCiAiIiIKLQotCiBpbXBvcnQgaWRsZWxpYi5QeVNoZWxsCiBpZGxlbGliLlB5U2hlbGwubWFpbigpCisjIFRoaXMgZmlsZSBkb2VzIG5vdCB3b3JrIGZvciAyLjc7IFNlZSBpc3N1ZSAyNDIxMi4KZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL2Fib3V0RGlhbG9nLnB5IGIvTGliL2lkbGVsaWIvYWJvdXREaWFsb2cucHkKaW5kZXggN2ZlMWFiOC4uZDg3NmE5NyAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvYWJvdXREaWFsb2cucHkKKysrIGIvTGliL2lkbGVsaWIvYWJvdXREaWFsb2cucHkKQEAgLTIsMjEgKzIsMjUgQEAKIAogIiIiCiAKLWZyb20gdGtpbnRlciBpbXBvcnQgKgogaW1wb3J0IG9zCi0KK2Zyb20gc3lzIGltcG9ydCB2ZXJzaW9uCitmcm9tIHRraW50ZXIgaW1wb3J0ICoKIGZyb20gaWRsZWxpYiBpbXBvcnQgdGV4dFZpZXcKLWZyb20gaWRsZWxpYiBpbXBvcnQgaWRsZXZlcgogCiBjbGFzcyBBYm91dERpYWxvZyhUb3BsZXZlbCk6CiAgICAgIiIiTW9kYWwgYWJvdXQgZGlhbG9nIGZvciBpZGxlCiAKICAgICAiIiIKLSAgICBkZWYgX19pbml0X18oc2VsZixwYXJlbnQsdGl0bGUpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXJlbnQsIHRpdGxlLCBfaHRlc3Q9RmFsc2UpOgorICAgICAgICAiIiIKKyAgICAgICAgX2h0ZXN0IC0gYm9vbCwgY2hhbmdlIGJveCBsb2NhdGlvbiB3aGVuIHJ1bm5pbmcgaHRlc3QKKyAgICAgICAgIiIiCiAgICAgICAgIFRvcGxldmVsLl9faW5pdF9fKHNlbGYsIHBhcmVudCkKICAgICAgICAgc2VsZi5jb25maWd1cmUoYm9yZGVyd2lkdGg9NSkKLSAgICAgICAgc2VsZi5nZW9tZXRyeSgiKyVkKyVkIiAlIChwYXJlbnQud2luZm9fcm9vdHgoKSszMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQud2luZm9fcm9vdHkoKSszMCkpCisgICAgICAgICMgcGxhY2UgZGlhbG9nIGJlbG93IHBhcmVudCBpZiBydW5uaW5nIGh0ZXN0CisgICAgICAgIHNlbGYuZ2VvbWV0cnkoIislZCslZCIgJSAoCisgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQud2luZm9fcm9vdHgoKSszMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudC53aW5mb19yb290eSgpKygzMCBpZiBub3QgX2h0ZXN0IGVsc2UgMTAwKSkpCiAgICAgICAgIHNlbGYuYmcgPSAiIzcwNzA3MCIKICAgICAgICAgc2VsZi5mZyA9ICIjZmZmZmZmIgogICAgICAgICBzZWxmLkNyZWF0ZVdpZGdldHMoKQpAQCAtMzIsNiArMzYsNyBAQAogICAgICAgICBzZWxmLndhaXRfd2luZG93KCkKIAogICAgIGRlZiBDcmVhdGVXaWRnZXRzKHNlbGYpOgorICAgICAgICByZWxlYXNlID0gdmVyc2lvbls6dmVyc2lvbi5pbmRleCgnICcpXQogICAgICAgICBmcmFtZU1haW4gPSBGcmFtZShzZWxmLCBib3JkZXJ3aWR0aD0yLCByZWxpZWY9U1VOS0VOKQogICAgICAgICBmcmFtZUJ1dHRvbnMgPSBGcmFtZShzZWxmKQogICAgICAgICBmcmFtZUJ1dHRvbnMucGFjayhzaWRlPUJPVFRPTSwgZmlsbD1YKQpAQCAtNTcsMTQgKzYyLDE1IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqdXN0aWZ5PUxFRlQsIGZnPXNlbGYuZmcsIGJnPXNlbGYuYmcpCiAgICAgICAgIGxhYmVsRW1haWwuZ3JpZChyb3c9NiwgY29sdW1uPTAsIGNvbHVtbnNwYW49MiwKICAgICAgICAgICAgICAgICAgICAgICAgIHN0aWNreT1XLCBwYWR4PTEwLCBwYWR5PTApCi0gICAgICAgIGxhYmVsV1dXID0gTGFiZWwoZnJhbWVCZywgdGV4dD0nd3d3OiAgaHR0cDovL3d3dy5weXRob24ub3JnL2lkbGUvJywKKyAgICAgICAgbGFiZWxXV1cgPSBMYWJlbChmcmFtZUJnLCB0ZXh0PSdodHRwczovL2RvY3MucHl0aG9uLm9yZy8nICsKKyAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uWzozXSArICcvbGlicmFyeS9pZGxlLmh0bWwnLAogICAgICAgICAgICAgICAgICAgICAgICAgIGp1c3RpZnk9TEVGVCwgZmc9c2VsZi5mZywgYmc9c2VsZi5iZykKICAgICAgICAgbGFiZWxXV1cuZ3JpZChyb3c9NywgY29sdW1uPTAsIGNvbHVtbnNwYW49Miwgc3RpY2t5PVcsIHBhZHg9MTAsIHBhZHk9MCkKICAgICAgICAgRnJhbWUoZnJhbWVCZywgYm9yZGVyd2lkdGg9MSwgcmVsaWVmPVNVTktFTiwKICAgICAgICAgICAgICAgaGVpZ2h0PTIsIGJnPXNlbGYuYmcpLmdyaWQocm93PTgsIGNvbHVtbj0wLCBzdGlja3k9RVcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbnNwYW49MywgcGFkeD01LCBwYWR5PTUpCi0gICAgICAgIGxhYmVsUHl0aG9uVmVyID0gTGFiZWwoZnJhbWVCZywgdGV4dD0nUHl0aG9uIHZlcnNpb246ICAnICsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy52ZXJzaW9uLnNwbGl0KClbMF0sIGZnPXNlbGYuZmcsIGJnPXNlbGYuYmcpCisgICAgICAgIGxhYmVsUHl0aG9uVmVyID0gTGFiZWwoZnJhbWVCZywgdGV4dD0nUHl0aG9uIHZlcnNpb246ICAnICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxlYXNlLCBmZz1zZWxmLmZnLCBiZz1zZWxmLmJnKQogICAgICAgICBsYWJlbFB5dGhvblZlci5ncmlkKHJvdz05LCBjb2x1bW49MCwgc3RpY2t5PVcsIHBhZHg9MTAsIHBhZHk9MCkKICAgICAgICAgdGtWZXIgPSBzZWxmLnRrLmNhbGwoJ2luZm8nLCAncGF0Y2hsZXZlbCcpCiAgICAgICAgIGxhYmVsVGtWZXIgPSBMYWJlbChmcmFtZUJnLCB0ZXh0PSdUayB2ZXJzaW9uOiAgJysKQEAgLTg3LDcgKzkzLDcgQEAKICAgICAgICAgRnJhbWUoZnJhbWVCZywgYm9yZGVyd2lkdGg9MSwgcmVsaWVmPVNVTktFTiwKICAgICAgICAgICAgICAgaGVpZ2h0PTIsIGJnPXNlbGYuYmcpLmdyaWQocm93PTExLCBjb2x1bW49MCwgc3RpY2t5PUVXLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5zcGFuPTMsIHBhZHg9NSwgcGFkeT01KQotICAgICAgICBpZGxlX3YgPSBMYWJlbChmcmFtZUJnLCB0ZXh0PSdJRExFIHZlcnNpb246ICAgJyArIGlkbGV2ZXIuSURMRV9WRVJTSU9OLAorICAgICAgICBpZGxlX3YgPSBMYWJlbChmcmFtZUJnLCB0ZXh0PSdJRExFIHZlcnNpb246ICAgJyArIHJlbGVhc2UsCiAgICAgICAgICAgICAgICAgICAgICAgIGZnPXNlbGYuZmcsIGJnPXNlbGYuYmcpCiAgICAgICAgIGlkbGVfdi5ncmlkKHJvdz0xMiwgY29sdW1uPTAsIHN0aWNreT1XLCBwYWR4PTEwLCBwYWR5PTApCiAgICAgICAgIGlkbGVfYnV0dG9uX2YgPSBGcmFtZShmcmFtZUJnLCBiZz1zZWxmLmJnKQpAQCAtMTM2LDEwICsxNDIsNSBAQAogICAgICAgICBzZWxmLmRlc3Ryb3koKQogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgICMgdGVzdCB0aGUgZGlhbG9nCi0gICAgcm9vdCA9IFRrKCkKLSAgICBkZWYgcnVuKCk6Ci0gICAgICAgIGZyb20gaWRsZWxpYiBpbXBvcnQgYWJvdXREaWFsb2cKLSAgICAgICAgYWJvdXREaWFsb2cuQWJvdXREaWFsb2cocm9vdCwgJ0Fib3V0JykKLSAgICBCdXR0b24ocm9vdCwgdGV4dD0nRGlhbG9nJywgY29tbWFuZD1ydW4pLnBhY2soKQotICAgIHJvb3QubWFpbmxvb3AoKQorICAgIGZyb20gaWRsZWxpYi5pZGxlX3Rlc3QuaHRlc3QgaW1wb3J0IHJ1bgorICAgIHJ1bihBYm91dERpYWxvZykKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL2NvbmZpZy1leHRlbnNpb25zLmRlZiBiL0xpYi9pZGxlbGliL2NvbmZpZy1leHRlbnNpb25zLmRlZgppbmRleCAzOWU2OWNlLi5hMjRiOGM5IDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9jb25maWctZXh0ZW5zaW9ucy5kZWYKKysrIGIvTGliL2lkbGVsaWIvY29uZmlnLWV4dGVuc2lvbnMuZGVmCkBAIC0zLDc1ICszLDM3IEBACiAjIElETEUgcmVhZHMgc2V2ZXJhbCBjb25maWcgZmlsZXMgdG8gZGV0ZXJtaW5lIHVzZXIgcHJlZmVyZW5jZXMuICBUaGlzCiAjIGZpbGUgaXMgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBmaWxlIGZvciBJRExFIGV4dGVuc2lvbnMgc2V0dGluZ3MuCiAjCi0jIEVhY2ggZXh0ZW5zaW9uIG11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgc2VjdGlvbiwgbmFtZWQgYWZ0ZXIgdGhlIGV4dGVuc2lvbgotIyBtb2R1bGUuIFRoaXMgc2VjdGlvbiBtdXN0IGNvbnRhaW4gYW4gJ2VuYWJsZScgaXRlbSAoPTEgdG8gZW5hYmxlIHRoZQotIyBleHRlbnNpb24sID0wIHRvIGRpc2FibGUgaXQpLCBpdCBtYXkgY29udGFpbiAnZW5hYmxlX2VkaXRvcicgb3IgJ2VuYWJsZV9zaGVsbCcKLSMgaXRlbXMsIHRvIGFwcGx5IGl0IG9ubHkgdG8gZWRpdG9yL3NoZWxsIHdpbmRvd3MsIGFuZCBtYXkgYWxzbyBjb250YWluIGFueQotIyBvdGhlciBnZW5lcmFsIGNvbmZpZ3VyYXRpb24gaXRlbXMgZm9yIHRoZSBleHRlbnNpb24uCisjIEVhY2ggZXh0ZW5zaW9uIG11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgc2VjdGlvbiwgbmFtZWQgYWZ0ZXIgdGhlCisjIGV4dGVuc2lvbiBtb2R1bGUuIFRoaXMgc2VjdGlvbiBtdXN0IGNvbnRhaW4gYW4gJ2VuYWJsZScgaXRlbSAoPVRydWUgdG8KKyMgZW5hYmxlIHRoZSBleHRlbnNpb24sID1GYWxzZSB0byBkaXNhYmxlIGl0KSwgaXQgbWF5IGNvbnRhaW4KKyMgJ2VuYWJsZV9lZGl0b3InIG9yICdlbmFibGVfc2hlbGwnIGl0ZW1zLCB0byBhcHBseSBpdCBvbmx5IHRvIGVkaXRvciBpcgorIyBzaGVsbCB3aW5kb3dzLCBhbmQgbWF5IGFsc28gY29udGFpbiBhbnkgb3RoZXIgZ2VuZXJhbCBjb25maWd1cmF0aW9uCisjIGl0ZW1zIGZvciB0aGUgZXh0ZW5zaW9uLiAgT3RoZXIgVHJ1ZS9GYWxzZSB2YWx1ZXMgd2lsbCBhbHNvIGJlCisjIHJlY29nbml6ZWQgYXMgYm9vbGVhbiBieSB0aGUgRXh0ZW5zaW9uIENvbmZpZ3VyYXRpb24gZGlhbG9nLgogIwotIyBFYWNoIGV4dGVuc2lvbiBtdXN0IGRlZmluZSBhdCBsZWFzdCBvbmUgc2VjdGlvbiBuYW1lZCBFeHRlbnNpb25OYW1lX2JpbmRpbmdzCi0jIG9yIEV4dGVuc2lvbk5hbWVfY2ZnQmluZGluZ3MuIElmIHByZXNlbnQsIEV4dGVuc2lvbk5hbWVfYmluZGluZ3MgZGVmaW5lcwotIyB2aXJ0dWFsIGV2ZW50IGJpbmRpbmdzIGZvciB0aGUgZXh0ZW5zaW9uIHRoYXQgYXJlIG5vdCB1c2VyIHJlLWNvbmZpZ3VyYWJsZS4KLSMgSWYgcHJlc2VudCwgRXh0ZW5zaW9uTmFtZV9jZmdCaW5kaW5ncyBkZWZpbmVzIHZpcnR1YWwgZXZlbnQgYmluZGluZ3MgZm9yIHRoZQorIyBFYWNoIGV4dGVuc2lvbiBtdXN0IGRlZmluZSBhdCBsZWFzdCBvbmUgc2VjdGlvbiBuYW1lZAorIyBFeHRlbnNpb25OYW1lX2JpbmRpbmdzIG9yIEV4dGVuc2lvbk5hbWVfY2ZnQmluZGluZ3MuIElmIHByZXNlbnQsCisjIEV4dGVuc2lvbk5hbWVfYmluZGluZ3MgZGVmaW5lcyB2aXJ0dWFsIGV2ZW50IGJpbmRpbmdzIGZvciB0aGUKKyMgZXh0ZW5zaW9uIHRoYXQgYXJlIG5vdCB1c2VyIHJlLWNvbmZpZ3VyYWJsZS4gSWYgcHJlc2VudCwKKyMgRXh0ZW5zaW9uTmFtZV9jZmdCaW5kaW5ncyBkZWZpbmVzIHZpcnR1YWwgZXZlbnQgYmluZGluZ3MgZm9yIHRoZQogIyBleHRlbnNpb24gdGhhdCBtYXkgYmUgc2Vuc2libHkgcmUtY29uZmlndXJlZC4KICMKLSMgSWYgdGhlcmUgYXJlIG5vIGtleWJpbmRpbmdzIGZvciBhIG1lbnVzJyB2aXJ0dWFsIGV2ZW50cywgaW5jbHVkZSBsaW5lcyBsaWtlCi0jIDw8dG9nZ2xlLWNvZGUtY29udGV4dD4+PSAgIChTZWUgW0NvZGVDb250ZXh0XSwgYmVsb3cuKQorIyBJZiB0aGVyZSBhcmUgbm8ga2V5YmluZGluZ3MgZm9yIGEgbWVudXMnIHZpcnR1YWwgZXZlbnRzLCBpbmNsdWRlIGxpbmVzCisjIGxpa2UgPDx0b2dnbGUtY29kZS1jb250ZXh0Pj49ICAoU2VlIFtDb2RlQ29udGV4dF0sIGJlbG93LikKICMKLSMgQ3VycmVudGx5IGl0IGlzIG5lY2Vzc2FyeSB0byBtYW51YWxseSBtb2RpZnkgdGhpcyBmaWxlIHRvIGNoYW5nZSBleHRlbnNpb24KLSMga2V5IGJpbmRpbmdzIGFuZCBkZWZhdWx0IHZhbHVlcy4gVG8gY3VzdG9taXplLCBjcmVhdGUKKyMgQ3VycmVudGx5IGl0IGlzIG5lY2Vzc2FyeSB0byBtYW51YWxseSBtb2RpZnkgdGhpcyBmaWxlIHRvIGNoYW5nZQorIyBleHRlbnNpb24ga2V5IGJpbmRpbmdzIGFuZCBkZWZhdWx0IHZhbHVlcy4gVG8gY3VzdG9taXplLCBjcmVhdGUKICMgfi8uaWRsZXJjL2NvbmZpZy1leHRlbnNpb25zLmNmZyBhbmQgYXBwZW5kIHRoZSBhcHByb3ByaWF0ZSBjdXN0b21pemVkCiAjIHNlY3Rpb24ocykuICBUaG9zZSBzZWN0aW9ucyB3aWxsIG92ZXJyaWRlIHRoZSBkZWZhdWx0cyBpbiB0aGlzIGZpbGUuCiAjCi0jIE5vdGU6IElmIGEga2V5YmluZGluZyBpcyBhbHJlYWR5IGluIHVzZSB3aGVuIHRoZSBleHRlbnNpb24gaXMKLSMgbG9hZGVkLCB0aGUgZXh0ZW5zaW9uJ3MgdmlydHVhbCBldmVudCdzIGtleWJpbmRpbmcgd2lsbCBiZSBzZXQgdG8gJycuCisjIE5vdGU6IElmIGEga2V5YmluZGluZyBpcyBhbHJlYWR5IGluIHVzZSB3aGVuIHRoZSBleHRlbnNpb24gaXMgbG9hZGVkLAorIyB0aGUgZXh0ZW5zaW9uJ3MgdmlydHVhbCBldmVudCdzIGtleWJpbmRpbmcgd2lsbCBiZSBzZXQgdG8gJycuCiAjCiAjIFNlZSBjb25maWcta2V5cy5kZWYgZm9yIG5vdGVzIG9uIHNwZWNpZnlpbmcga2V5cyBhbmQgZXh0ZW5kLnR4dCBmb3IKICMgaW5mb3JtYXRpb24gb24gY3JlYXRpbmcgSURMRSBleHRlbnNpb25zLgogCi1bRm9ybWF0UGFyYWdyYXBoXQotZW5hYmxlPTEKLVtGb3JtYXRQYXJhZ3JhcGhfY2ZnQmluZGluZ3NdCi1mb3JtYXQtcGFyYWdyYXBoPTxBbHQtS2V5LXE+Ci0KLVtBdXRvRXhwYW5kXQotZW5hYmxlPTEKLVtBdXRvRXhwYW5kX2NmZ0JpbmRpbmdzXQotZXhwYW5kLXdvcmQ9PEFsdC1LZXktc2xhc2g+Ci0KLVtab29tSGVpZ2h0XQotZW5hYmxlPTEKLVtab29tSGVpZ2h0X2NmZ0JpbmRpbmdzXQotem9vbS1oZWlnaHQ9PEFsdC1LZXktMj4KLQotW1NjcmlwdEJpbmRpbmddCi1lbmFibGU9MQotZW5hYmxlX3NoZWxsPTAKLWVuYWJsZV9lZGl0b3I9MQotW1NjcmlwdEJpbmRpbmdfY2ZnQmluZGluZ3NdCi1ydW4tbW9kdWxlPTxLZXktRjU+Ci1jaGVjay1tb2R1bGU9PEFsdC1LZXkteD4KLQotW0NhbGxUaXBzXQotZW5hYmxlPTEKLVtDYWxsVGlwc19jZmdCaW5kaW5nc10KLWZvcmNlLW9wZW4tY2FsbHRpcD08Q29udHJvbC1LZXktYmFja3NsYXNoPgotW0NhbGxUaXBzX2JpbmRpbmdzXQotdHJ5LW9wZW4tY2FsbHRpcD08S2V5UmVsZWFzZS1wYXJlbmxlZnQ+Ci1yZWZyZXNoLWNhbGx0aXA9PEtleVJlbGVhc2UtcGFyZW5yaWdodD4gPEtleVJlbGVhc2UtMD4KLQotW1BhcmVuTWF0Y2hdCi1lbmFibGU9MQotc3R5bGU9IGV4cHJlc3Npb24KLWZsYXNoLWRlbGF5PSA1MDAKLWJlbGw9IDEKLVtQYXJlbk1hdGNoX2NmZ0JpbmRpbmdzXQotZmxhc2gtcGFyZW49PENvbnRyb2wtS2V5LTA+Ci1bUGFyZW5NYXRjaF9iaW5kaW5nc10KLXBhcmVuLWNsb3NlZD08S2V5UmVsZWFzZS1wYXJlbnJpZ2h0PiA8S2V5UmVsZWFzZS1icmFja2V0cmlnaHQ+IDxLZXlSZWxlYXNlLWJyYWNlcmlnaHQ+Ci0KIFtBdXRvQ29tcGxldGVdCi1lbmFibGU9MQorZW5hYmxlPVRydWUKIHBvcHVwd2FpdD0yMDAwCiBbQXV0b0NvbXBsZXRlX2NmZ0JpbmRpbmdzXQogZm9yY2Utb3Blbi1jb21wbGV0aW9ucz08Q29udHJvbC1LZXktc3BhY2U+CkBAIC03OSwxOCArNDEsNTkgQEAKIGF1dG9jb21wbGV0ZT08S2V5LVRhYj4KIHRyeS1vcGVuLWNvbXBsZXRpb25zPTxLZXlSZWxlYXNlLXBlcmlvZD4gPEtleVJlbGVhc2Utc2xhc2g+IDxLZXlSZWxlYXNlLWJhY2tzbGFzaD4KIAorW0F1dG9FeHBhbmRdCitlbmFibGU9VHJ1ZQorW0F1dG9FeHBhbmRfY2ZnQmluZGluZ3NdCitleHBhbmQtd29yZD08QWx0LUtleS1zbGFzaD4KKworW0NhbGxUaXBzXQorZW5hYmxlPVRydWUKK1tDYWxsVGlwc19jZmdCaW5kaW5nc10KK2ZvcmNlLW9wZW4tY2FsbHRpcD08Q29udHJvbC1LZXktYmFja3NsYXNoPgorW0NhbGxUaXBzX2JpbmRpbmdzXQordHJ5LW9wZW4tY2FsbHRpcD08S2V5UmVsZWFzZS1wYXJlbmxlZnQ+CityZWZyZXNoLWNhbGx0aXA9PEtleVJlbGVhc2UtcGFyZW5yaWdodD4gPEtleVJlbGVhc2UtMD4KKwogW0NvZGVDb250ZXh0XQotZW5hYmxlPTEKLWVuYWJsZV9zaGVsbD0wCitlbmFibGU9VHJ1ZQorZW5hYmxlX3NoZWxsPUZhbHNlCiBudW1saW5lcz0zCi12aXNpYmxlPTAKK3Zpc2libGU9RmFsc2UKIGJnY29sb3I9TGlnaHRHcmF5CiBmZ2NvbG9yPUJsYWNrCiBbQ29kZUNvbnRleHRfYmluZGluZ3NdCiB0b2dnbGUtY29kZS1jb250ZXh0PQogCi1bUnN0cmlwRXh0ZW5zaW9uXQotZW5hYmxlPTEKLWVuYWJsZV9zaGVsbD0wCi1lbmFibGVfZWRpdG9yPTEKK1tGb3JtYXRQYXJhZ3JhcGhdCitlbmFibGU9VHJ1ZQorbWF4LXdpZHRoPTcyCitbRm9ybWF0UGFyYWdyYXBoX2NmZ0JpbmRpbmdzXQorZm9ybWF0LXBhcmFncmFwaD08QWx0LUtleS1xPgogCitbUGFyZW5NYXRjaF0KK2VuYWJsZT1UcnVlCitzdHlsZT0gZXhwcmVzc2lvbgorZmxhc2gtZGVsYXk9IDUwMAorYmVsbD1UcnVlCitbUGFyZW5NYXRjaF9jZmdCaW5kaW5nc10KK2ZsYXNoLXBhcmVuPTxDb250cm9sLUtleS0wPgorW1BhcmVuTWF0Y2hfYmluZGluZ3NdCitwYXJlbi1jbG9zZWQ9PEtleVJlbGVhc2UtcGFyZW5yaWdodD4gPEtleVJlbGVhc2UtYnJhY2tldHJpZ2h0PiA8S2V5UmVsZWFzZS1icmFjZXJpZ2h0PgorCitbUnN0cmlwRXh0ZW5zaW9uXQorZW5hYmxlPVRydWUKK2VuYWJsZV9zaGVsbD1GYWxzZQorZW5hYmxlX2VkaXRvcj1UcnVlCisKK1tTY3JpcHRCaW5kaW5nXQorZW5hYmxlPVRydWUKK2VuYWJsZV9zaGVsbD1GYWxzZQorZW5hYmxlX2VkaXRvcj1UcnVlCitbU2NyaXB0QmluZGluZ19jZmdCaW5kaW5nc10KK3J1bi1tb2R1bGU9PEtleS1GNT4KK2NoZWNrLW1vZHVsZT08QWx0LUtleS14PgorCitbWm9vbUhlaWdodF0KK2VuYWJsZT1UcnVlCitbWm9vbUhlaWdodF9jZmdCaW5kaW5nc10KK3pvb20taGVpZ2h0PTxBbHQtS2V5LTI+CmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9jb25maWctaGlnaGxpZ2h0LmRlZiBiL0xpYi9pZGxlbGliL2NvbmZpZy1oaWdobGlnaHQuZGVmCmluZGV4IDdkMjBmNzguLjQxNDZlMjggMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL2NvbmZpZy1oaWdobGlnaHQuZGVmCisrKyBiL0xpYi9pZGxlbGliL2NvbmZpZy1oaWdobGlnaHQuZGVmCkBAIC02MiwzICs2MiwzMiBAQAogc3RkZXJyLWJhY2tncm91bmQ9ICNmZmZmZmYKIGNvbnNvbGUtZm9yZWdyb3VuZD0gIzc3MDAwMAogY29uc29sZS1iYWNrZ3JvdW5kPSAjZmZmZmZmCisKK1tJRExFIERhcmtdCitjb21tZW50LWZvcmVncm91bmQgPSAjZGQwMDAwCitjb25zb2xlLWZvcmVncm91bmQgPSAjZmY0ZDRkCitlcnJvci1mb3JlZ3JvdW5kID0gI0ZGRkZGRgoraGlsaXRlLWJhY2tncm91bmQgPSAjN2U3ZTdlCitzdHJpbmctZm9yZWdyb3VuZCA9ICMwMmZmMDIKK3N0ZGVyci1iYWNrZ3JvdW5kID0gIzAwMjI0MAorc3RkZXJyLWZvcmVncm91bmQgPSAjZmZiM2IzCitjb25zb2xlLWJhY2tncm91bmQgPSAjMDAyMjQwCitoaXQtYmFja2dyb3VuZCA9ICNmYmZiZmIKK3N0cmluZy1iYWNrZ3JvdW5kID0gIzAwMjI0MAorbm9ybWFsLWJhY2tncm91bmQgPSAjMDAyMjQwCitoaWxpdGUtZm9yZWdyb3VuZCA9ICNGRkZGRkYKK2tleXdvcmQtZm9yZWdyb3VuZCA9ICNmZjgwMDAKK2Vycm9yLWJhY2tncm91bmQgPSAjYzg2NDY0CitrZXl3b3JkLWJhY2tncm91bmQgPSAjMDAyMjQwCitidWlsdGluLWJhY2tncm91bmQgPSAjMDAyMjQwCiticmVhay1iYWNrZ3JvdW5kID0gIzgwODAwMAorYnVpbHRpbi1mb3JlZ3JvdW5kID0gI2ZmMDBmZgorZGVmaW5pdGlvbi1mb3JlZ3JvdW5kID0gIzVlNWVmZgorc3Rkb3V0LWZvcmVncm91bmQgPSAjYzJkMWZhCitkZWZpbml0aW9uLWJhY2tncm91bmQgPSAjMDAyMjQwCitub3JtYWwtZm9yZWdyb3VuZCA9ICNGRkZGRkYKK2N1cnNvci1mb3JlZ3JvdW5kID0gI2ZmZmZmZgorc3Rkb3V0LWJhY2tncm91bmQgPSAjMDAyMjQwCitoaXQtZm9yZWdyb3VuZCA9ICMwMDIyNDAKK2NvbW1lbnQtYmFja2dyb3VuZCA9ICMwMDIyNDAKK2JyZWFrLWZvcmVncm91bmQgPSAjRkZGRkZGCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9jb25maWcta2V5cy5kZWYgYi9MaWIvaWRsZWxpYi9jb25maWcta2V5cy5kZWYKaW5kZXggZmRjMzViYS4uM2JmY2I2OSAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvY29uZmlnLWtleXMuZGVmCisrKyBiL0xpYi9pZGxlbGliL2NvbmZpZy1rZXlzLmRlZgpAQCAtMTMsMzcgKzEzLDM3IEBACiBwYXN0ZT08Q29udHJvbC1LZXktdj4gPENvbnRyb2wtS2V5LVY+CiBiZWdpbm5pbmctb2YtbGluZT0gPEtleS1Ib21lPgogY2VudGVyLWluc2VydD08Q29udHJvbC1LZXktbD4gPENvbnRyb2wtS2V5LUw+Ci1jbG9zZS1hbGwtd2luZG93cz08Q29udHJvbC1LZXktcT4KK2Nsb3NlLWFsbC13aW5kb3dzPTxDb250cm9sLUtleS1xPiA8Q29udHJvbC1LZXktUT4KIGNsb3NlLXdpbmRvdz08QWx0LUtleS1GND4gPE1ldGEtS2V5LUY0PgogZG8tbm90aGluZz08Q29udHJvbC1LZXktRjEyPgogZW5kLW9mLWZpbGU9PENvbnRyb2wtS2V5LWQ+IDxDb250cm9sLUtleS1EPgogcHl0aG9uLWRvY3M9PEtleS1GMT4KIHB5dGhvbi1jb250ZXh0LWhlbHA9PFNoaWZ0LUtleS1GMT4KLWhpc3RvcnktbmV4dD08QWx0LUtleS1uPiA8TWV0YS1LZXktbj4KLWhpc3RvcnktcHJldmlvdXM9PEFsdC1LZXktcD4gPE1ldGEtS2V5LXA+CitoaXN0b3J5LW5leHQ9PEFsdC1LZXktbj4gPE1ldGEtS2V5LW4+IDxBbHQtS2V5LU4+IDxNZXRhLUtleS1OPgoraGlzdG9yeS1wcmV2aW91cz08QWx0LUtleS1wPiA8TWV0YS1LZXktcD4gPEFsdC1LZXktUD4gPE1ldGEtS2V5LVA+CiBpbnRlcnJ1cHQtZXhlY3V0aW9uPTxDb250cm9sLUtleS1jPiA8Q29udHJvbC1LZXktQz4KIHZpZXctcmVzdGFydD08S2V5LUY2PgogcmVzdGFydC1zaGVsbD08Q29udHJvbC1LZXktRjY+Ci1vcGVuLWNsYXNzLWJyb3dzZXI9PEFsdC1LZXktYz4gPE1ldGEtS2V5LWM+IDxBbHQtS2V5LUM+Ci1vcGVuLW1vZHVsZT08QWx0LUtleS1tPiA8TWV0YS1LZXktbT4gPEFsdC1LZXktTT4KK29wZW4tY2xhc3MtYnJvd3Nlcj08QWx0LUtleS1jPiA8TWV0YS1LZXktYz4gPEFsdC1LZXktQz4gPE1ldGEtS2V5LUM+CitvcGVuLW1vZHVsZT08QWx0LUtleS1tPiA8TWV0YS1LZXktbT4gPEFsdC1LZXktTT4gPE1ldGEtS2V5LU0+CiBvcGVuLW5ldy13aW5kb3c9PENvbnRyb2wtS2V5LW4+IDxDb250cm9sLUtleS1OPgogb3Blbi13aW5kb3ctZnJvbS1maWxlPTxDb250cm9sLUtleS1vPiA8Q29udHJvbC1LZXktTz4KIHBsYWluLW5ld2xpbmUtYW5kLWluZGVudD08Q29udHJvbC1LZXktaj4gPENvbnRyb2wtS2V5LUo+CiBwcmludC13aW5kb3c9PENvbnRyb2wtS2V5LXA+IDxDb250cm9sLUtleS1QPgotcmVkbz08Q29udHJvbC1TaGlmdC1LZXktWj4KK3JlZG89PENvbnRyb2wtU2hpZnQtS2V5LVo+IDxDb250cm9sLVNoaWZ0LUtleS16PgogcmVtb3ZlLXNlbGVjdGlvbj08S2V5LUVzY2FwZT4KLXNhdmUtY29weS1vZi13aW5kb3ctYXMtZmlsZT08QWx0LVNoaWZ0LUtleS1TPgotc2F2ZS13aW5kb3ctYXMtZmlsZT08Q29udHJvbC1TaGlmdC1LZXktUz4KLXNhdmUtd2luZG93PTxDb250cm9sLUtleS1zPgotc2VsZWN0LWFsbD08Q29udHJvbC1LZXktYT4KK3NhdmUtY29weS1vZi13aW5kb3ctYXMtZmlsZT08QWx0LVNoaWZ0LUtleS1TPiA8QWx0LVNoaWZ0LUtleS1zPgorc2F2ZS13aW5kb3ctYXMtZmlsZT08Q29udHJvbC1TaGlmdC1LZXktUz4gPENvbnRyb2wtU2hpZnQtS2V5LXM+CitzYXZlLXdpbmRvdz08Q29udHJvbC1LZXktcz4gPENvbnRyb2wtS2V5LVM+CitzZWxlY3QtYWxsPTxDb250cm9sLUtleS1hPiA8Q29udHJvbC1LZXktQT4KIHRvZ2dsZS1hdXRvLWNvbG9yaW5nPTxDb250cm9sLUtleS1zbGFzaD4KIHVuZG89PENvbnRyb2wtS2V5LXo+IDxDb250cm9sLUtleS1aPgogZmluZD08Q29udHJvbC1LZXktZj4gPENvbnRyb2wtS2V5LUY+Ci1maW5kLWFnYWluPTxDb250cm9sLUtleS1nPiA8S2V5LUYzPgorZmluZC1hZ2Fpbj08Q29udHJvbC1LZXktZz4gPEtleS1GMz4gPENvbnRyb2wtS2V5LUc+CiBmaW5kLWluLWZpbGVzPTxBbHQtS2V5LUYzPiA8TWV0YS1LZXktRjM+CiBmaW5kLXNlbGVjdGlvbj08Q29udHJvbC1LZXktRjM+CiByZXBsYWNlPTxDb250cm9sLUtleS1oPiA8Q29udHJvbC1LZXktSD4KLWdvdG8tbGluZT08QWx0LUtleS1nPiA8TWV0YS1LZXktZz4KK2dvdG8tbGluZT08QWx0LUtleS1nPiA8TWV0YS1LZXktZz4gPEFsdC1LZXktRz4gPE1ldGEtS2V5LUc+CiBzbWFydC1iYWNrc3BhY2U9PEtleS1CYWNrU3BhY2U+CiBuZXdsaW5lLWFuZC1pbmRlbnQ9PEtleS1SZXR1cm4+IDxLZXktS1BfRW50ZXI+CiBzbWFydC1pbmRlbnQ9PEtleS1UYWI+CkBAIC01Myw4ICs1Myw4IEBACiB1bmNvbW1lbnQtcmVnaW9uPTxBbHQtS2V5LTQ+IDxNZXRhLUtleS00PgogdGFiaWZ5LXJlZ2lvbj08QWx0LUtleS01PiA8TWV0YS1LZXktNT4KIHVudGFiaWZ5LXJlZ2lvbj08QWx0LUtleS02PiA8TWV0YS1LZXktNj4KLXRvZ2dsZS10YWJzPTxBbHQtS2V5LXQ+IDxNZXRhLUtleS10PiA8QWx0LUtleS1UPgotY2hhbmdlLWluZGVudHdpZHRoPTxBbHQtS2V5LXU+IDxNZXRhLUtleS11PiA8QWx0LUtleS1VPgordG9nZ2xlLXRhYnM9PEFsdC1LZXktdD4gPE1ldGEtS2V5LXQ+IDxBbHQtS2V5LVQ+IDxNZXRhLUtleS1UPgorY2hhbmdlLWluZGVudHdpZHRoPTxBbHQtS2V5LXU+IDxNZXRhLUtleS11PiA8QWx0LUtleS1VPiA8TWV0YS1LZXktVT4KIGRlbC13b3JkLWxlZnQ9PENvbnRyb2wtS2V5LUJhY2tTcGFjZT4KIGRlbC13b3JkLXJpZ2h0PTxDb250cm9sLUtleS1EZWxldGU+CiAKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL2NvbmZpZy1tYWluLmRlZiBiL0xpYi9pZGxlbGliL2NvbmZpZy1tYWluLmRlZgppbmRleCA5NTQ2ZTJiLi44ZWJiYzFiIDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9jb25maWctbWFpbi5kZWYKKysrIGIvTGliL2lkbGVsaWIvY29uZmlnLW1haW4uZGVmCkBAIC01MywxNCArNTMsMTEgQEAKIFtFZGl0b3JXaW5kb3ddCiB3aWR0aD0gODAKIGhlaWdodD0gNDAKLWZvbnQ9IGNvdXJpZXIKK2ZvbnQ9IFRrRml4ZWRGb250CiBmb250LXNpemU9IDEwCiBmb250LWJvbGQ9IDAKIGVuY29kaW5nPSBub25lCiAKLVtGb3JtYXRQYXJhZ3JhcGhdCi1wYXJhZ3JhcGg9NzAKLQogW0luZGVudF0KIHVzZS1zcGFjZXM9IDEKIG51bS1zcGFjZXM9IDQKQEAgLTY4LDYgKzY1LDggQEAKIFtUaGVtZV0KIGRlZmF1bHQ9IDEKIG5hbWU9IElETEUgQ2xhc3NpYworbmFtZTI9CisjIG5hbWUyIHNldCBpbiB1c2VyIGNvbmZpZy1tYWluLmNmZyBmb3IgdGhlbWVzIGFkZGVkIGFmdGVyIDIwMTUgT2N0IDEKIAogW0tleXNdCiBkZWZhdWx0PSAxCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9jb25maWdEaWFsb2cucHkgYi9MaWIvaWRsZWxpYi9jb25maWdEaWFsb2cucHkKaW5kZXggZWZlNWM0My4uOWIxNjQ1OSAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvY29uZmlnRGlhbG9nLnB5CisrKyBiL0xpYi9pZGxlbGliL2NvbmZpZ0RpYWxvZy5weQpAQCAtMTMsNTM0ICsxMyw1NzYgQEAKIGltcG9ydCB0a2ludGVyLm1lc3NhZ2Vib3ggYXMgdGtNZXNzYWdlQm94CiBpbXBvcnQgdGtpbnRlci5jb2xvcmNob29zZXIgYXMgdGtDb2xvckNob29zZXIKIGltcG9ydCB0a2ludGVyLmZvbnQgYXMgdGtGb250Ci1pbXBvcnQgY29weQogCiBmcm9tIGlkbGVsaWIuY29uZmlnSGFuZGxlciBpbXBvcnQgaWRsZUNvbmYKIGZyb20gaWRsZWxpYi5keW5PcHRpb25NZW51V2lkZ2V0IGltcG9ydCBEeW5PcHRpb25NZW51Ci1mcm9tIGlkbGVsaWIudGFiYmVkcGFnZXMgaW1wb3J0IFRhYmJlZFBhZ2VTZXQKIGZyb20gaWRsZWxpYi5rZXliaW5kaW5nRGlhbG9nIGltcG9ydCBHZXRLZXlzRGlhbG9nCiBmcm9tIGlkbGVsaWIuY29uZmlnU2VjdGlvbk5hbWVEaWFsb2cgaW1wb3J0IEdldENmZ1NlY3Rpb25OYW1lRGlhbG9nCiBmcm9tIGlkbGVsaWIuY29uZmlnSGVscFNvdXJjZUVkaXQgaW1wb3J0IEdldEhlbHBTb3VyY2VEaWFsb2cKK2Zyb20gaWRsZWxpYi50YWJiZWRwYWdlcyBpbXBvcnQgVGFiYmVkUGFnZVNldAorZnJvbSBpZGxlbGliLnRleHRWaWV3IGltcG9ydCB2aWV3X3RleHQKIGZyb20gaWRsZWxpYiBpbXBvcnQgbWFjb3N4U3VwcG9ydAogCiBjbGFzcyBDb25maWdEaWFsb2coVG9wbGV2ZWwpOgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYscGFyZW50LHRpdGxlKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcGFyZW50LCB0aXRsZT0nJywgX2h0ZXN0PUZhbHNlLCBfdXRlc3Q9RmFsc2UpOgorICAgICAgICAiIiIKKyAgICAgICAgX2h0ZXN0IC0gYm9vbCwgY2hhbmdlIGJveCBsb2NhdGlvbiB3aGVuIHJ1bm5pbmcgaHRlc3QKKyAgICAgICAgX3V0ZXN0IC0gYm9vbCwgZG9uJ3Qgd2FpdF93aW5kb3cgd2hlbiBydW5uaW5nIHVuaXR0ZXN0CisgICAgICAgICIiIgogICAgICAgICBUb3BsZXZlbC5fX2luaXRfXyhzZWxmLCBwYXJlbnQpCisgICAgICAgIHNlbGYucGFyZW50ID0gcGFyZW50CisgICAgICAgIGlmIF9odGVzdDoKKyAgICAgICAgICAgIHBhcmVudC5pbnN0YW5jZV9kaWN0ID0ge30KICAgICAgICAgc2VsZi53bV93aXRoZHJhdygpCiAKICAgICAgICAgc2VsZi5jb25maWd1cmUoYm9yZGVyd2lkdGg9NSkKLSAgICAgICAgc2VsZi50aXRsZSgnSURMRSBQcmVmZXJlbmNlcycpCi0gICAgICAgIHNlbGYuZ2VvbWV0cnkoIislZCslZCIgJSAocGFyZW50LndpbmZvX3Jvb3R4KCkrMjAsCi0gICAgICAgICAgICAgICAgcGFyZW50LndpbmZvX3Jvb3R5KCkrMzApKQorICAgICAgICBzZWxmLnRpdGxlKHRpdGxlIG9yICdJRExFIFByZWZlcmVuY2VzJykKKyAgICAgICAgc2VsZi5nZW9tZXRyeSgKKyAgICAgICAgICAgICAgICAiKyVkKyVkIiAlIChwYXJlbnQud2luZm9fcm9vdHgoKSArIDIwLAorICAgICAgICAgICAgICAgIHBhcmVudC53aW5mb19yb290eSgpICsgKDMwIGlmIG5vdCBfaHRlc3QgZWxzZSAxNTApKSkKICAgICAgICAgI1RoZW1lIEVsZW1lbnRzLiBFYWNoIHRoZW1lIGVsZW1lbnQga2V5IGlzIGl0cyBkaXNwbGF5IG5hbWUuCiAgICAgICAgICNUaGUgZmlyc3QgdmFsdWUgb2YgdGhlIHR1cGxlIGlzIHRoZSBzYW1wbGUgYXJlYSB0YWcgbmFtZS4KICAgICAgICAgI1RoZSBzZWNvbmQgdmFsdWUgaXMgdGhlIGRpc3BsYXkgbmFtZSBsaXN0IHNvcnQgaW5kZXguCi0gICAgICAgIHNlbGYudGhlbWVFbGVtZW50cz17J05vcm1hbCBUZXh0JzooJ25vcm1hbCcsJzAwJyksCi0gICAgICAgICAgICAnUHl0aG9uIEtleXdvcmRzJzooJ2tleXdvcmQnLCcwMScpLAotICAgICAgICAgICAgJ1B5dGhvbiBEZWZpbml0aW9ucyc6KCdkZWZpbml0aW9uJywnMDInKSwKLSAgICAgICAgICAgICdQeXRob24gQnVpbHRpbnMnOignYnVpbHRpbicsICcwMycpLAotICAgICAgICAgICAgJ1B5dGhvbiBDb21tZW50cyc6KCdjb21tZW50JywnMDQnKSwKLSAgICAgICAgICAgICdQeXRob24gU3RyaW5ncyc6KCdzdHJpbmcnLCcwNScpLAotICAgICAgICAgICAgJ1NlbGVjdGVkIFRleHQnOignaGlsaXRlJywnMDYnKSwKLSAgICAgICAgICAgICdGb3VuZCBUZXh0JzooJ2hpdCcsJzA3JyksCi0gICAgICAgICAgICAnQ3Vyc29yJzooJ2N1cnNvcicsJzA4JyksCi0gICAgICAgICAgICAnRXJyb3IgVGV4dCc6KCdlcnJvcicsJzA5JyksCi0gICAgICAgICAgICAnU2hlbGwgTm9ybWFsIFRleHQnOignY29uc29sZScsJzEwJyksCi0gICAgICAgICAgICAnU2hlbGwgU3Rkb3V0IFRleHQnOignc3Rkb3V0JywnMTEnKSwKLSAgICAgICAgICAgICdTaGVsbCBTdGRlcnIgVGV4dCc6KCdzdGRlcnInLCcxMicpLAorICAgICAgICBzZWxmLnRoZW1lRWxlbWVudHM9eworICAgICAgICAgICAgJ05vcm1hbCBUZXh0JzogKCdub3JtYWwnLCAnMDAnKSwKKyAgICAgICAgICAgICdQeXRob24gS2V5d29yZHMnOiAoJ2tleXdvcmQnLCAnMDEnKSwKKyAgICAgICAgICAgICdQeXRob24gRGVmaW5pdGlvbnMnOiAoJ2RlZmluaXRpb24nLCAnMDInKSwKKyAgICAgICAgICAgICdQeXRob24gQnVpbHRpbnMnOiAoJ2J1aWx0aW4nLCAnMDMnKSwKKyAgICAgICAgICAgICdQeXRob24gQ29tbWVudHMnOiAoJ2NvbW1lbnQnLCAnMDQnKSwKKyAgICAgICAgICAgICdQeXRob24gU3RyaW5ncyc6ICgnc3RyaW5nJywgJzA1JyksCisgICAgICAgICAgICAnU2VsZWN0ZWQgVGV4dCc6ICgnaGlsaXRlJywgJzA2JyksCisgICAgICAgICAgICAnRm91bmQgVGV4dCc6ICgnaGl0JywgJzA3JyksCisgICAgICAgICAgICAnQ3Vyc29yJzogKCdjdXJzb3InLCAnMDgnKSwKKyAgICAgICAgICAgICdFZGl0b3IgQnJlYWtwb2ludCc6ICgnYnJlYWsnLCAnMDknKSwKKyAgICAgICAgICAgICdTaGVsbCBOb3JtYWwgVGV4dCc6ICgnY29uc29sZScsICcxMCcpLAorICAgICAgICAgICAgJ1NoZWxsIEVycm9yIFRleHQnOiAoJ2Vycm9yJywgJzExJyksCisgICAgICAgICAgICAnU2hlbGwgU3Rkb3V0IFRleHQnOiAoJ3N0ZG91dCcsICcxMicpLAorICAgICAgICAgICAgJ1NoZWxsIFN0ZGVyciBUZXh0JzogKCdzdGRlcnInLCAnMTMnKSwKICAgICAgICAgICAgIH0KICAgICAgICAgc2VsZi5SZXNldENoYW5nZWRJdGVtcygpICNsb2FkIGluaXRpYWwgdmFsdWVzIGluIGNoYW5nZWQgaXRlbXMgZGljdAogICAgICAgICBzZWxmLkNyZWF0ZVdpZGdldHMoKQotICAgICAgICBzZWxmLnJlc2l6YWJsZShoZWlnaHQ9RkFMU0Usd2lkdGg9RkFMU0UpCisgICAgICAgIHNlbGYucmVzaXphYmxlKGhlaWdodD1GQUxTRSwgd2lkdGg9RkFMU0UpCiAgICAgICAgIHNlbGYudHJhbnNpZW50KHBhcmVudCkKICAgICAgICAgc2VsZi5ncmFiX3NldCgpCiAgICAgICAgIHNlbGYucHJvdG9jb2woIldNX0RFTEVURV9XSU5ET1ciLCBzZWxmLkNhbmNlbCkKLSAgICAgICAgc2VsZi5wYXJlbnQgPSBwYXJlbnQKICAgICAgICAgc2VsZi50YWJQYWdlcy5mb2N1c19zZXQoKQogICAgICAgICAja2V5IGJpbmRpbmdzIGZvciB0aGlzIGRpYWxvZwotICAgICAgICAjc2VsZi5iaW5kKCc8RXNjYXBlPicsc2VsZi5DYW5jZWwpICNkaXNtaXNzIGRpYWxvZywgbm8gc2F2ZQotICAgICAgICAjc2VsZi5iaW5kKCc8QWx0LWE+JyxzZWxmLkFwcGx5KSAjYXBwbHkgY2hhbmdlcywgc2F2ZQotICAgICAgICAjc2VsZi5iaW5kKCc8RjE+JyxzZWxmLkhlbHApICNjb250ZXh0IGhlbHAKKyAgICAgICAgI3NlbGYuYmluZCgnPEVzY2FwZT4nLCBzZWxmLkNhbmNlbCkgI2Rpc21pc3MgZGlhbG9nLCBubyBzYXZlCisgICAgICAgICNzZWxmLmJpbmQoJzxBbHQtYT4nLCBzZWxmLkFwcGx5KSAjYXBwbHkgY2hhbmdlcywgc2F2ZQorICAgICAgICAjc2VsZi5iaW5kKCc8RjE+Jywgc2VsZi5IZWxwKSAjY29udGV4dCBoZWxwCiAgICAgICAgIHNlbGYuTG9hZENvbmZpZ3MoKQogICAgICAgICBzZWxmLkF0dGFjaFZhckNhbGxiYWNrcygpICNhdm9pZCBjYWxsYmFja3MgZHVyaW5nIExvYWRDb25maWdzCiAKLSAgICAgICAgc2VsZi53bV9kZWljb25pZnkoKQotICAgICAgICBzZWxmLndhaXRfd2luZG93KCkKKyAgICAgICAgaWYgbm90IF91dGVzdDoKKyAgICAgICAgICAgIHNlbGYud21fZGVpY29uaWZ5KCkKKyAgICAgICAgICAgIHNlbGYud2FpdF93aW5kb3coKQogCiAgICAgZGVmIENyZWF0ZVdpZGdldHMoc2VsZik6CiAgICAgICAgIHNlbGYudGFiUGFnZXMgPSBUYWJiZWRQYWdlU2V0KHNlbGYsCi0gICAgICAgICAgICAgICAgcGFnZV9uYW1lcz1bJ0ZvbnRzL1RhYnMnLCdIaWdobGlnaHRpbmcnLCdLZXlzJywnR2VuZXJhbCddKQotICAgICAgICBmcmFtZUFjdGlvbkJ1dHRvbnMgPSBGcmFtZShzZWxmLHBhZHk9MikKLSAgICAgICAgI2FjdGlvbiBidXR0b25zCi0KLSAgICAgICAgaWYgbWFjb3N4U3VwcG9ydC5ydW5uaW5nQXNPU1hBcHAoKToKLSAgICAgICAgICAgICMgU3VycHJlc3MgdGhlIHBhZHggYW5kIHBhZHkgYXJndW1lbnRzIHdoZW4KLSAgICAgICAgICAgICMgcnVubmluZyBhcyBJRExFLmFwcCwgb3RoZXJ3aXNlIHRoZSB0ZXh0Ci0gICAgICAgICAgICAjIG9uIHRoZXNlIGJ1dHRvbnMgd2lsbCBub3QgYmUgcmVhZGFibGUuCi0gICAgICAgICAgICBleHRyYUt3ZHM9e30KLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGV4dHJhS3dkcz1kaWN0KHBhZHg9NiwgcGFkeT0zKQotCi0jIENvbW1lbnQgb3V0IGJ1dHRvbiBjcmVhdGlvbiBhbmQgcGFja2luZyB1bnRpbCBpbXBsZW1lbnQgc2VsZi5IZWxwCi0jIyAgICAgICAgc2VsZi5idXR0b25IZWxwID0gQnV0dG9uKGZyYW1lQWN0aW9uQnV0dG9ucyx0ZXh0PSdIZWxwJywKLSMjICAgICAgICAgICAgICAgIGNvbW1hbmQ9c2VsZi5IZWxwLHRha2Vmb2N1cz1GQUxTRSwKLSMjICAgICAgICAgICAgICAgICoqZXh0cmFLd2RzKQotICAgICAgICBzZWxmLmJ1dHRvbk9rID0gQnV0dG9uKGZyYW1lQWN0aW9uQnV0dG9ucyx0ZXh0PSdPaycsCi0gICAgICAgICAgICAgICAgY29tbWFuZD1zZWxmLk9rLHRha2Vmb2N1cz1GQUxTRSwKLSAgICAgICAgICAgICAgICAqKmV4dHJhS3dkcykKLSAgICAgICAgc2VsZi5idXR0b25BcHBseSA9IEJ1dHRvbihmcmFtZUFjdGlvbkJ1dHRvbnMsdGV4dD0nQXBwbHknLAotICAgICAgICAgICAgICAgIGNvbW1hbmQ9c2VsZi5BcHBseSx0YWtlZm9jdXM9RkFMU0UsCi0gICAgICAgICAgICAgICAgKipleHRyYUt3ZHMpCi0gICAgICAgIHNlbGYuYnV0dG9uQ2FuY2VsID0gQnV0dG9uKGZyYW1lQWN0aW9uQnV0dG9ucyx0ZXh0PSdDYW5jZWwnLAotICAgICAgICAgICAgICAgIGNvbW1hbmQ9c2VsZi5DYW5jZWwsdGFrZWZvY3VzPUZBTFNFLAotICAgICAgICAgICAgICAgICoqZXh0cmFLd2RzKQorICAgICAgICAgICAgICAgIHBhZ2VfbmFtZXM9WydGb250cy9UYWJzJywgJ0hpZ2hsaWdodGluZycsICdLZXlzJywgJ0dlbmVyYWwnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICdFeHRlbnNpb25zJ10pCisgICAgICAgIHNlbGYudGFiUGFnZXMucGFjayhzaWRlPVRPUCwgZXhwYW5kPVRSVUUsIGZpbGw9Qk9USCkKICAgICAgICAgc2VsZi5DcmVhdGVQYWdlRm9udFRhYigpCiAgICAgICAgIHNlbGYuQ3JlYXRlUGFnZUhpZ2hsaWdodCgpCiAgICAgICAgIHNlbGYuQ3JlYXRlUGFnZUtleXMoKQogICAgICAgICBzZWxmLkNyZWF0ZVBhZ2VHZW5lcmFsKCkKLSMjICAgICAgICBzZWxmLmJ1dHRvbkhlbHAucGFjayhzaWRlPVJJR0hULHBhZHg9NSkKLSAgICAgICAgc2VsZi5idXR0b25Pay5wYWNrKHNpZGU9TEVGVCxwYWR4PTUpCi0gICAgICAgIHNlbGYuYnV0dG9uQXBwbHkucGFjayhzaWRlPUxFRlQscGFkeD01KQotICAgICAgICBzZWxmLmJ1dHRvbkNhbmNlbC5wYWNrKHNpZGU9TEVGVCxwYWR4PTUpCi0gICAgICAgIGZyYW1lQWN0aW9uQnV0dG9ucy5wYWNrKHNpZGU9Qk9UVE9NKQotICAgICAgICBGcmFtZShzZWxmLCBoZWlnaHQ9MiwgYm9yZGVyd2lkdGg9MCkucGFjayhzaWRlPUJPVFRPTSkKLSAgICAgICAgc2VsZi50YWJQYWdlcy5wYWNrKHNpZGU9VE9QLGV4cGFuZD1UUlVFLGZpbGw9Qk9USCkKKyAgICAgICAgc2VsZi5DcmVhdGVQYWdlRXh0ZW5zaW9ucygpCisgICAgICAgIHNlbGYuY3JlYXRlX2FjdGlvbl9idXR0b25zKCkucGFjayhzaWRlPUJPVFRPTSkKKworICAgIGRlZiBjcmVhdGVfYWN0aW9uX2J1dHRvbnMoc2VsZik6CisgICAgICAgIGlmIG1hY29zeFN1cHBvcnQuaXNBcXVhVGsoKToKKyAgICAgICAgICAgICMgQ2hhbmdpbmcgdGhlIGRlZmF1bHQgcGFkZGluZyBvbiBPU1ggcmVzdWx0cyBpbiB1bnJlYWRhYmxlCisgICAgICAgICAgICAjIHRleHQgaW4gdGhlIGJ1dHRvbnMKKyAgICAgICAgICAgIHBhZGRpbmdBcmdzID0ge30KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBhZGRpbmdBcmdzID0geydwYWR4Jzo2LCAncGFkeSc6M30KKyAgICAgICAgb3V0ZXIgPSBGcmFtZShzZWxmLCBwYWR5PTIpCisgICAgICAgIGJ1dHRvbnMgPSBGcmFtZShvdXRlciwgcGFkeT0yKQorICAgICAgICBmb3IgdHh0LCBjbWQgaW4gKAorICAgICAgICAgICAgKCdPaycsIHNlbGYuT2spLAorICAgICAgICAgICAgKCdBcHBseScsIHNlbGYuQXBwbHkpLAorICAgICAgICAgICAgKCdDYW5jZWwnLCBzZWxmLkNhbmNlbCksCisgICAgICAgICAgICAoJ0hlbHAnLCBzZWxmLkhlbHApKToKKyAgICAgICAgICAgIEJ1dHRvbihidXR0b25zLCB0ZXh0PXR4dCwgY29tbWFuZD1jbWQsIHRha2Vmb2N1cz1GQUxTRSwKKyAgICAgICAgICAgICAgICAgICAqKnBhZGRpbmdBcmdzKS5wYWNrKHNpZGU9TEVGVCwgcGFkeD01KQorICAgICAgICAjIGFkZCBzcGFjZSBhYm92ZSBidXR0b25zCisgICAgICAgIEZyYW1lKG91dGVyLCBoZWlnaHQ9MiwgYm9yZGVyd2lkdGg9MCkucGFjayhzaWRlPVRPUCkKKyAgICAgICAgYnV0dG9ucy5wYWNrKHNpZGU9Qk9UVE9NKQorICAgICAgICByZXR1cm4gb3V0ZXIKIAogICAgIGRlZiBDcmVhdGVQYWdlRm9udFRhYihzZWxmKToKLSAgICAgICAgI3RrVmFycwotICAgICAgICBzZWxmLmZvbnRTaXplPVN0cmluZ1ZhcihzZWxmKQotICAgICAgICBzZWxmLmZvbnRCb2xkPUJvb2xlYW5WYXIoc2VsZikKLSAgICAgICAgc2VsZi5mb250TmFtZT1TdHJpbmdWYXIoc2VsZikKLSAgICAgICAgc2VsZi5zcGFjZU51bT1JbnRWYXIoc2VsZikKLSAgICAgICAgc2VsZi5lZGl0Rm9udD10a0ZvbnQuRm9udChzZWxmLCgnY291cmllcicsMTAsJ25vcm1hbCcpKQorICAgICAgICBwYXJlbnQgPSBzZWxmLnBhcmVudAorICAgICAgICBzZWxmLmZvbnRTaXplID0gU3RyaW5nVmFyKHBhcmVudCkKKyAgICAgICAgc2VsZi5mb250Qm9sZCA9IEJvb2xlYW5WYXIocGFyZW50KQorICAgICAgICBzZWxmLmZvbnROYW1lID0gU3RyaW5nVmFyKHBhcmVudCkKKyAgICAgICAgc2VsZi5zcGFjZU51bSA9IEludFZhcihwYXJlbnQpCisgICAgICAgIHNlbGYuZWRpdEZvbnQgPSB0a0ZvbnQuRm9udChwYXJlbnQsICgnY291cmllcicsIDEwLCAnbm9ybWFsJykpCisKICAgICAgICAgIyN3aWRnZXQgY3JlYXRpb24KICAgICAgICAgI2JvZHkgZnJhbWUKLSAgICAgICAgZnJhbWU9c2VsZi50YWJQYWdlcy5wYWdlc1snRm9udHMvVGFicyddLmZyYW1lCisgICAgICAgIGZyYW1lID0gc2VsZi50YWJQYWdlcy5wYWdlc1snRm9udHMvVGFicyddLmZyYW1lCiAgICAgICAgICNib2R5IHNlY3Rpb24gZnJhbWVzCi0gICAgICAgIGZyYW1lRm9udD1MYWJlbEZyYW1lKGZyYW1lLGJvcmRlcndpZHRoPTIscmVsaWVmPUdST09WRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dD0nIEJhc2UgRWRpdG9yIEZvbnQgJykKLSAgICAgICAgZnJhbWVJbmRlbnQ9TGFiZWxGcmFtZShmcmFtZSxib3JkZXJ3aWR0aD0yLHJlbGllZj1HUk9PVkUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dD0nIEluZGVudGF0aW9uIFdpZHRoICcpCisgICAgICAgIGZyYW1lRm9udCA9IExhYmVsRnJhbWUoCisgICAgICAgICAgICAgICAgZnJhbWUsIGJvcmRlcndpZHRoPTIsIHJlbGllZj1HUk9PVkUsIHRleHQ9JyBCYXNlIEVkaXRvciBGb250ICcpCisgICAgICAgIGZyYW1lSW5kZW50ID0gTGFiZWxGcmFtZSgKKyAgICAgICAgICAgICAgICBmcmFtZSwgYm9yZGVyd2lkdGg9MiwgcmVsaWVmPUdST09WRSwgdGV4dD0nIEluZGVudGF0aW9uIFdpZHRoICcpCiAgICAgICAgICNmcmFtZUZvbnQKLSAgICAgICAgZnJhbWVGb250TmFtZT1GcmFtZShmcmFtZUZvbnQpCi0gICAgICAgIGZyYW1lRm9udFBhcmFtPUZyYW1lKGZyYW1lRm9udCkKLSAgICAgICAgbGFiZWxGb250TmFtZVRpdGxlPUxhYmVsKGZyYW1lRm9udE5hbWUsanVzdGlmeT1MRUZULAotICAgICAgICAgICAgICAgIHRleHQ9J0ZvbnQgRmFjZSA6JykKLSAgICAgICAgc2VsZi5saXN0Rm9udE5hbWU9TGlzdGJveChmcmFtZUZvbnROYW1lLGhlaWdodD01LHRha2Vmb2N1cz1GQUxTRSwKLSAgICAgICAgICAgICAgICBleHBvcnRzZWxlY3Rpb249RkFMU0UpCi0gICAgICAgIHNlbGYubGlzdEZvbnROYW1lLmJpbmQoJzxCdXR0b25SZWxlYXNlLTE+JyxzZWxmLk9uTGlzdEZvbnRCdXR0b25SZWxlYXNlKQotICAgICAgICBzY3JvbGxGb250PVNjcm9sbGJhcihmcmFtZUZvbnROYW1lKQorICAgICAgICBmcmFtZUZvbnROYW1lID0gRnJhbWUoZnJhbWVGb250KQorICAgICAgICBmcmFtZUZvbnRQYXJhbSA9IEZyYW1lKGZyYW1lRm9udCkKKyAgICAgICAgbGFiZWxGb250TmFtZVRpdGxlID0gTGFiZWwoCisgICAgICAgICAgICAgICAgZnJhbWVGb250TmFtZSwganVzdGlmeT1MRUZULCB0ZXh0PSdGb250IEZhY2UgOicpCisgICAgICAgIHNlbGYubGlzdEZvbnROYW1lID0gTGlzdGJveCgKKyAgICAgICAgICAgICAgICBmcmFtZUZvbnROYW1lLCBoZWlnaHQ9NSwgdGFrZWZvY3VzPUZBTFNFLCBleHBvcnRzZWxlY3Rpb249RkFMU0UpCisgICAgICAgIHNlbGYubGlzdEZvbnROYW1lLmJpbmQoCisgICAgICAgICAgICAgICAgJzxCdXR0b25SZWxlYXNlLTE+Jywgc2VsZi5Pbkxpc3RGb250QnV0dG9uUmVsZWFzZSkKKyAgICAgICAgc2Nyb2xsRm9udCA9IFNjcm9sbGJhcihmcmFtZUZvbnROYW1lKQogICAgICAgICBzY3JvbGxGb250LmNvbmZpZyhjb21tYW5kPXNlbGYubGlzdEZvbnROYW1lLnl2aWV3KQogICAgICAgICBzZWxmLmxpc3RGb250TmFtZS5jb25maWcoeXNjcm9sbGNvbW1hbmQ9c2Nyb2xsRm9udC5zZXQpCi0gICAgICAgIGxhYmVsRm9udFNpemVUaXRsZT1MYWJlbChmcmFtZUZvbnRQYXJhbSx0ZXh0PSdTaXplIDonKQotICAgICAgICBzZWxmLm9wdE1lbnVGb250U2l6ZT1EeW5PcHRpb25NZW51KGZyYW1lRm9udFBhcmFtLHNlbGYuZm9udFNpemUsTm9uZSwKLSAgICAgICAgICAgIGNvbW1hbmQ9c2VsZi5TZXRGb250U2FtcGxlKQotICAgICAgICBjaGVja0ZvbnRCb2xkPUNoZWNrYnV0dG9uKGZyYW1lRm9udFBhcmFtLHZhcmlhYmxlPXNlbGYuZm9udEJvbGQsCi0gICAgICAgICAgICBvbnZhbHVlPTEsb2ZmdmFsdWU9MCx0ZXh0PSdCb2xkJyxjb21tYW5kPXNlbGYuU2V0Rm9udFNhbXBsZSkKLSAgICAgICAgZnJhbWVGb250U2FtcGxlPUZyYW1lKGZyYW1lRm9udCxyZWxpZWY9U09MSUQsYm9yZGVyd2lkdGg9MSkKLSAgICAgICAgc2VsZi5sYWJlbEZvbnRTYW1wbGU9TGFiZWwoZnJhbWVGb250U2FtcGxlLAotICAgICAgICAgICAgICAgIHRleHQ9J0FhQmJDY0RkRWVcbkZmR2dIaElpSmpLXG4xMjM0NTY3ODkwXG4jOis9KCl7fVtdJywKLSAgICAgICAgICAgICAgICBqdXN0aWZ5PUxFRlQsZm9udD1zZWxmLmVkaXRGb250KQorICAgICAgICBsYWJlbEZvbnRTaXplVGl0bGUgPSBMYWJlbChmcmFtZUZvbnRQYXJhbSwgdGV4dD0nU2l6ZSA6JykKKyAgICAgICAgc2VsZi5vcHRNZW51Rm9udFNpemUgPSBEeW5PcHRpb25NZW51KAorICAgICAgICAgICAgICAgIGZyYW1lRm9udFBhcmFtLCBzZWxmLmZvbnRTaXplLCBOb25lLCBjb21tYW5kPXNlbGYuU2V0Rm9udFNhbXBsZSkKKyAgICAgICAgY2hlY2tGb250Qm9sZCA9IENoZWNrYnV0dG9uKAorICAgICAgICAgICAgICAgIGZyYW1lRm9udFBhcmFtLCB2YXJpYWJsZT1zZWxmLmZvbnRCb2xkLCBvbnZhbHVlPTEsCisgICAgICAgICAgICAgICAgb2ZmdmFsdWU9MCwgdGV4dD0nQm9sZCcsIGNvbW1hbmQ9c2VsZi5TZXRGb250U2FtcGxlKQorICAgICAgICBmcmFtZUZvbnRTYW1wbGUgPSBGcmFtZShmcmFtZUZvbnQsIHJlbGllZj1TT0xJRCwgYm9yZGVyd2lkdGg9MSkKKyAgICAgICAgc2VsZi5sYWJlbEZvbnRTYW1wbGUgPSBMYWJlbCgKKyAgICAgICAgICAgICAgICBmcmFtZUZvbnRTYW1wbGUsIGp1c3RpZnk9TEVGVCwgZm9udD1zZWxmLmVkaXRGb250LAorICAgICAgICAgICAgICAgIHRleHQ9J0FhQmJDY0RkRWVcbkZmR2dIaElpSmpLXG4xMjM0NTY3ODkwXG4jOis9KCl7fVtdJykKICAgICAgICAgI2ZyYW1lSW5kZW50Ci0gICAgICAgIGZyYW1lSW5kZW50U2l6ZT1GcmFtZShmcmFtZUluZGVudCkKLSAgICAgICAgbGFiZWxTcGFjZU51bVRpdGxlPUxhYmVsKGZyYW1lSW5kZW50U2l6ZSwganVzdGlmeT1MRUZULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dD0nUHl0aG9uIFN0YW5kYXJkOiA0IFNwYWNlcyEnKQotICAgICAgICBzZWxmLnNjYWxlU3BhY2VOdW09U2NhbGUoZnJhbWVJbmRlbnRTaXplLCB2YXJpYWJsZT1zZWxmLnNwYWNlTnVtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZW50PSdob3Jpem9udGFsJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpY2tpbnRlcnZhbD0yLCBmcm9tXz0yLCB0bz0xNikKKyAgICAgICAgZnJhbWVJbmRlbnRTaXplID0gRnJhbWUoZnJhbWVJbmRlbnQpCisgICAgICAgIGxhYmVsU3BhY2VOdW1UaXRsZSA9IExhYmVsKAorICAgICAgICAgICAgICAgIGZyYW1lSW5kZW50U2l6ZSwganVzdGlmeT1MRUZULAorICAgICAgICAgICAgICAgIHRleHQ9J1B5dGhvbiBTdGFuZGFyZDogNCBTcGFjZXMhJykKKyAgICAgICAgc2VsZi5zY2FsZVNwYWNlTnVtID0gU2NhbGUoCisgICAgICAgICAgICAgICAgZnJhbWVJbmRlbnRTaXplLCB2YXJpYWJsZT1zZWxmLnNwYWNlTnVtLAorICAgICAgICAgICAgICAgIG9yaWVudD0naG9yaXpvbnRhbCcsIHRpY2tpbnRlcnZhbD0yLCBmcm9tXz0yLCB0bz0xNikKKwogICAgICAgICAjd2lkZ2V0IHBhY2tpbmcKICAgICAgICAgI2JvZHkKLSAgICAgICAgZnJhbWVGb250LnBhY2soc2lkZT1MRUZULHBhZHg9NSxwYWR5PTUsZXhwYW5kPVRSVUUsZmlsbD1CT1RIKQotICAgICAgICBmcmFtZUluZGVudC5wYWNrKHNpZGU9TEVGVCxwYWR4PTUscGFkeT01LGZpbGw9WSkKKyAgICAgICAgZnJhbWVGb250LnBhY2soc2lkZT1MRUZULCBwYWR4PTUsIHBhZHk9NSwgZXhwYW5kPVRSVUUsIGZpbGw9Qk9USCkKKyAgICAgICAgZnJhbWVJbmRlbnQucGFjayhzaWRlPUxFRlQsIHBhZHg9NSwgcGFkeT01LCBmaWxsPVkpCiAgICAgICAgICNmcmFtZUZvbnQKLSAgICAgICAgZnJhbWVGb250TmFtZS5wYWNrKHNpZGU9VE9QLHBhZHg9NSxwYWR5PTUsZmlsbD1YKQotICAgICAgICBmcmFtZUZvbnRQYXJhbS5wYWNrKHNpZGU9VE9QLHBhZHg9NSxwYWR5PTUsZmlsbD1YKQotICAgICAgICBsYWJlbEZvbnROYW1lVGl0bGUucGFjayhzaWRlPVRPUCxhbmNob3I9VykKLSAgICAgICAgc2VsZi5saXN0Rm9udE5hbWUucGFjayhzaWRlPUxFRlQsZXhwYW5kPVRSVUUsZmlsbD1YKQotICAgICAgICBzY3JvbGxGb250LnBhY2soc2lkZT1MRUZULGZpbGw9WSkKLSAgICAgICAgbGFiZWxGb250U2l6ZVRpdGxlLnBhY2soc2lkZT1MRUZULGFuY2hvcj1XKQotICAgICAgICBzZWxmLm9wdE1lbnVGb250U2l6ZS5wYWNrKHNpZGU9TEVGVCxhbmNob3I9VykKLSAgICAgICAgY2hlY2tGb250Qm9sZC5wYWNrKHNpZGU9TEVGVCxhbmNob3I9VyxwYWR4PTIwKQotICAgICAgICBmcmFtZUZvbnRTYW1wbGUucGFjayhzaWRlPVRPUCxwYWR4PTUscGFkeT01LGV4cGFuZD1UUlVFLGZpbGw9Qk9USCkKLSAgICAgICAgc2VsZi5sYWJlbEZvbnRTYW1wbGUucGFjayhleHBhbmQ9VFJVRSxmaWxsPUJPVEgpCisgICAgICAgIGZyYW1lRm9udE5hbWUucGFjayhzaWRlPVRPUCwgcGFkeD01LCBwYWR5PTUsIGZpbGw9WCkKKyAgICAgICAgZnJhbWVGb250UGFyYW0ucGFjayhzaWRlPVRPUCwgcGFkeD01LCBwYWR5PTUsIGZpbGw9WCkKKyAgICAgICAgbGFiZWxGb250TmFtZVRpdGxlLnBhY2soc2lkZT1UT1AsIGFuY2hvcj1XKQorICAgICAgICBzZWxmLmxpc3RGb250TmFtZS5wYWNrKHNpZGU9TEVGVCwgZXhwYW5kPVRSVUUsIGZpbGw9WCkKKyAgICAgICAgc2Nyb2xsRm9udC5wYWNrKHNpZGU9TEVGVCwgZmlsbD1ZKQorICAgICAgICBsYWJlbEZvbnRTaXplVGl0bGUucGFjayhzaWRlPUxFRlQsIGFuY2hvcj1XKQorICAgICAgICBzZWxmLm9wdE1lbnVGb250U2l6ZS5wYWNrKHNpZGU9TEVGVCwgYW5jaG9yPVcpCisgICAgICAgIGNoZWNrRm9udEJvbGQucGFjayhzaWRlPUxFRlQsIGFuY2hvcj1XLCBwYWR4PTIwKQorICAgICAgICBmcmFtZUZvbnRTYW1wbGUucGFjayhzaWRlPVRPUCwgcGFkeD01LCBwYWR5PTUsIGV4cGFuZD1UUlVFLCBmaWxsPUJPVEgpCisgICAgICAgIHNlbGYubGFiZWxGb250U2FtcGxlLnBhY2soZXhwYW5kPVRSVUUsIGZpbGw9Qk9USCkKICAgICAgICAgI2ZyYW1lSW5kZW50Ci0gICAgICAgIGZyYW1lSW5kZW50U2l6ZS5wYWNrKHNpZGU9VE9QLGZpbGw9WCkKLSAgICAgICAgbGFiZWxTcGFjZU51bVRpdGxlLnBhY2soc2lkZT1UT1AsYW5jaG9yPVcscGFkeD01KQotICAgICAgICBzZWxmLnNjYWxlU3BhY2VOdW0ucGFjayhzaWRlPVRPUCxwYWR4PTUsZmlsbD1YKQorICAgICAgICBmcmFtZUluZGVudFNpemUucGFjayhzaWRlPVRPUCwgZmlsbD1YKQorICAgICAgICBsYWJlbFNwYWNlTnVtVGl0bGUucGFjayhzaWRlPVRPUCwgYW5jaG9yPVcsIHBhZHg9NSkKKyAgICAgICAgc2VsZi5zY2FsZVNwYWNlTnVtLnBhY2soc2lkZT1UT1AsIHBhZHg9NSwgZmlsbD1YKQogICAgICAgICByZXR1cm4gZnJhbWUKIAogICAgIGRlZiBDcmVhdGVQYWdlSGlnaGxpZ2h0KHNlbGYpOgotICAgICAgICBzZWxmLmJ1aWx0aW5UaGVtZT1TdHJpbmdWYXIoc2VsZikKLSAgICAgICAgc2VsZi5jdXN0b21UaGVtZT1TdHJpbmdWYXIoc2VsZikKLSAgICAgICAgc2VsZi5mZ0hpbGl0ZT1Cb29sZWFuVmFyKHNlbGYpCi0gICAgICAgIHNlbGYuY29sb3VyPVN0cmluZ1ZhcihzZWxmKQotICAgICAgICBzZWxmLmZvbnROYW1lPVN0cmluZ1ZhcihzZWxmKQotICAgICAgICBzZWxmLnRoZW1lSXNCdWlsdGluPUJvb2xlYW5WYXIoc2VsZikKLSAgICAgICAgc2VsZi5oaWdobGlnaHRUYXJnZXQ9U3RyaW5nVmFyKHNlbGYpCisgICAgICAgIHBhcmVudCA9IHNlbGYucGFyZW50CisgICAgICAgIHNlbGYuYnVpbHRpblRoZW1lID0gU3RyaW5nVmFyKHBhcmVudCkKKyAgICAgICAgc2VsZi5jdXN0b21UaGVtZSA9IFN0cmluZ1ZhcihwYXJlbnQpCisgICAgICAgIHNlbGYuZmdIaWxpdGUgPSBCb29sZWFuVmFyKHBhcmVudCkKKyAgICAgICAgc2VsZi5jb2xvdXIgPSBTdHJpbmdWYXIocGFyZW50KQorICAgICAgICBzZWxmLmZvbnROYW1lID0gU3RyaW5nVmFyKHBhcmVudCkKKyAgICAgICAgc2VsZi50aGVtZUlzQnVpbHRpbiA9IEJvb2xlYW5WYXIocGFyZW50KQorICAgICAgICBzZWxmLmhpZ2hsaWdodFRhcmdldCA9IFN0cmluZ1ZhcihwYXJlbnQpCisKICAgICAgICAgIyN3aWRnZXQgY3JlYXRpb24KICAgICAgICAgI2JvZHkgZnJhbWUKLSAgICAgICAgZnJhbWU9c2VsZi50YWJQYWdlcy5wYWdlc1snSGlnaGxpZ2h0aW5nJ10uZnJhbWUKKyAgICAgICAgZnJhbWUgPSBzZWxmLnRhYlBhZ2VzLnBhZ2VzWydIaWdobGlnaHRpbmcnXS5mcmFtZQogICAgICAgICAjYm9keSBzZWN0aW9uIGZyYW1lcwotICAgICAgICBmcmFtZUN1c3RvbT1MYWJlbEZyYW1lKGZyYW1lLGJvcmRlcndpZHRoPTIscmVsaWVmPUdST09WRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0PScgQ3VzdG9tIEhpZ2hsaWdodGluZyAnKQotICAgICAgICBmcmFtZVRoZW1lPUxhYmVsRnJhbWUoZnJhbWUsYm9yZGVyd2lkdGg9MixyZWxpZWY9R1JPT1ZFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dD0nIEhpZ2hsaWdodGluZyBUaGVtZSAnKQorICAgICAgICBmcmFtZUN1c3RvbSA9IExhYmVsRnJhbWUoZnJhbWUsIGJvcmRlcndpZHRoPTIsIHJlbGllZj1HUk9PVkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0PScgQ3VzdG9tIEhpZ2hsaWdodGluZyAnKQorICAgICAgICBmcmFtZVRoZW1lID0gTGFiZWxGcmFtZShmcmFtZSwgYm9yZGVyd2lkdGg9MiwgcmVsaWVmPUdST09WRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dD0nIEhpZ2hsaWdodGluZyBUaGVtZSAnKQogICAgICAgICAjZnJhbWVDdXN0b20KLSAgICAgICAgc2VsZi50ZXh0SGlnaGxpZ2h0U2FtcGxlPVRleHQoZnJhbWVDdXN0b20scmVsaWVmPVNPTElELGJvcmRlcndpZHRoPTEsCi0gICAgICAgICAgICBmb250PSgnY291cmllcicsMTIsJycpLGN1cnNvcj0naGFuZDInLHdpZHRoPTIxLGhlaWdodD0xMSwKLSAgICAgICAgICAgIHRha2Vmb2N1cz1GQUxTRSxoaWdobGlnaHR0aGlja25lc3M9MCx3cmFwPU5PTkUpCisgICAgICAgIHNlbGYudGV4dEhpZ2hsaWdodFNhbXBsZT1UZXh0KAorICAgICAgICAgICAgICAgIGZyYW1lQ3VzdG9tLCByZWxpZWY9U09MSUQsIGJvcmRlcndpZHRoPTEsCisgICAgICAgICAgICAgICAgZm9udD0oJ2NvdXJpZXInLCAxMiwgJycpLCBjdXJzb3I9J2hhbmQyJywgd2lkdGg9MjEsIGhlaWdodD0xMSwKKyAgICAgICAgICAgICAgICB0YWtlZm9jdXM9RkFMU0UsIGhpZ2hsaWdodHRoaWNrbmVzcz0wLCB3cmFwPU5PTkUpCiAgICAgICAgIHRleHQ9c2VsZi50ZXh0SGlnaGxpZ2h0U2FtcGxlCi0gICAgICAgIHRleHQuYmluZCgnPERvdWJsZS1CdXR0b24tMT4nLGxhbWJkYSBlOiAnYnJlYWsnKQotICAgICAgICB0ZXh0LmJpbmQoJzxCMS1Nb3Rpb24+JyxsYW1iZGEgZTogJ2JyZWFrJykKLSAgICAgICAgdGV4dEFuZFRhZ3M9KCgnI3lvdSBjYW4gY2xpY2sgaGVyZScsJ2NvbW1lbnQnKSwoJ1xuJywnbm9ybWFsJyksCi0gICAgICAgICAgICAoJyN0byBjaG9vc2UgaXRlbXMnLCdjb21tZW50JyksKCdcbicsJ25vcm1hbCcpLCgnZGVmJywna2V5d29yZCcpLAotICAgICAgICAgICAgKCcgJywnbm9ybWFsJyksKCdmdW5jJywnZGVmaW5pdGlvbicpLCgnKHBhcmFtKTonLCdub3JtYWwnKSwKLSAgICAgICAgICAgICgnXG4gICcsJ25vcm1hbCcpLCgnIiIic3RyaW5nIiIiJywnc3RyaW5nJyksKCdcbiAgdmFyMCA9ICcsJ25vcm1hbCcpLAotICAgICAgICAgICAgKCInc3RyaW5nJyIsJ3N0cmluZycpLCgnXG4gIHZhcjEgPSAnLCdub3JtYWwnKSwoIidzZWxlY3RlZCciLCdoaWxpdGUnKSwKLSAgICAgICAgICAgICgnXG4gIHZhcjIgPSAnLCdub3JtYWwnKSwoIidmb3VuZCciLCdoaXQnKSwKLSAgICAgICAgICAgICgnXG4gIHZhcjMgPSAnLCdub3JtYWwnKSwoJ2xpc3QnLCAnYnVpbHRpbicpLCAoJygnLCdub3JtYWwnKSwKLSAgICAgICAgICAgICgnTm9uZScsICdrZXl3b3JkJyksKCcpXG5cbicsJ25vcm1hbCcpLAotICAgICAgICAgICAgKCcgZXJyb3IgJywnZXJyb3InKSwoJyAnLCdub3JtYWwnKSwoJ2N1cnNvciB8JywnY3Vyc29yJyksCi0gICAgICAgICAgICAoJ1xuICcsJ25vcm1hbCcpLCgnc2hlbGwnLCdjb25zb2xlJyksKCcgJywnbm9ybWFsJyksKCdzdGRvdXQnLCdzdGRvdXQnKSwKLSAgICAgICAgICAgICgnICcsJ25vcm1hbCcpLCgnc3RkZXJyJywnc3RkZXJyJyksKCdcbicsJ25vcm1hbCcpKQorICAgICAgICB0ZXh0LmJpbmQoJzxEb3VibGUtQnV0dG9uLTE+JywgbGFtYmRhIGU6ICdicmVhaycpCisgICAgICAgIHRleHQuYmluZCgnPEIxLU1vdGlvbj4nLCBsYW1iZGEgZTogJ2JyZWFrJykKKyAgICAgICAgdGV4dEFuZFRhZ3M9KAorICAgICAgICAgICAgKCcjeW91IGNhbiBjbGljayBoZXJlJywgJ2NvbW1lbnQnKSwgKCdcbicsICdub3JtYWwnKSwKKyAgICAgICAgICAgICgnI3RvIGNob29zZSBpdGVtcycsICdjb21tZW50JyksICgnXG4nLCAnbm9ybWFsJyksCisgICAgICAgICAgICAoJ2RlZicsICdrZXl3b3JkJyksICgnICcsICdub3JtYWwnKSwKKyAgICAgICAgICAgICgnZnVuYycsICdkZWZpbml0aW9uJyksICgnKHBhcmFtKTpcbiAgJywgJ25vcm1hbCcpLAorICAgICAgICAgICAgKCciIiJzdHJpbmciIiInLCAnc3RyaW5nJyksICgnXG4gIHZhcjAgPSAnLCAnbm9ybWFsJyksCisgICAgICAgICAgICAoIidzdHJpbmcnIiwgJ3N0cmluZycpLCAoJ1xuICB2YXIxID0gJywgJ25vcm1hbCcpLAorICAgICAgICAgICAgKCInc2VsZWN0ZWQnIiwgJ2hpbGl0ZScpLCAoJ1xuICB2YXIyID0gJywgJ25vcm1hbCcpLAorICAgICAgICAgICAgKCInZm91bmQnIiwgJ2hpdCcpLCAoJ1xuICB2YXIzID0gJywgJ25vcm1hbCcpLAorICAgICAgICAgICAgKCdsaXN0JywgJ2J1aWx0aW4nKSwgKCcoJywgJ25vcm1hbCcpLAorICAgICAgICAgICAgKCdOb25lJywgJ2tleXdvcmQnKSwgKCcpXG4nLCAnbm9ybWFsJyksCisgICAgICAgICAgICAoJyAgYnJlYWtwb2ludCgibGluZSIpJywgJ2JyZWFrJyksICgnXG5cbicsICdub3JtYWwnKSwKKyAgICAgICAgICAgICgnIGVycm9yICcsICdlcnJvcicpLCAoJyAnLCAnbm9ybWFsJyksCisgICAgICAgICAgICAoJ2N1cnNvciB8JywgJ2N1cnNvcicpLCAoJ1xuICcsICdub3JtYWwnKSwKKyAgICAgICAgICAgICgnc2hlbGwnLCAnY29uc29sZScpLCAoJyAnLCAnbm9ybWFsJyksCisgICAgICAgICAgICAoJ3N0ZG91dCcsICdzdGRvdXQnKSwgKCcgJywgJ25vcm1hbCcpLAorICAgICAgICAgICAgKCdzdGRlcnInLCAnc3RkZXJyJyksICgnXG4nLCAnbm9ybWFsJykpCiAgICAgICAgIGZvciB0eFRhIGluIHRleHRBbmRUYWdzOgotICAgICAgICAgICAgdGV4dC5pbnNlcnQoRU5ELHR4VGFbMF0sdHhUYVsxXSkKKyAgICAgICAgICAgIHRleHQuaW5zZXJ0KEVORCwgdHhUYVswXSwgdHhUYVsxXSkKICAgICAgICAgZm9yIGVsZW1lbnQgaW4gc2VsZi50aGVtZUVsZW1lbnRzOgotICAgICAgICAgICAgdGV4dC50YWdfYmluZChzZWxmLnRoZW1lRWxlbWVudHNbZWxlbWVudF1bMF0sJzxCdXR0b25QcmVzcy0xPicsCi0gICAgICAgICAgICAgICAgbGFtYmRhIGV2ZW50LGVsZW09ZWxlbWVudDogZXZlbnQud2lkZ2V0LndpbmZvX3RvcGxldmVsKCkKLSAgICAgICAgICAgICAgICAuaGlnaGxpZ2h0VGFyZ2V0LnNldChlbGVtKSkKKyAgICAgICAgICAgIGRlZiB0ZW0oZXZlbnQsIGVsZW09ZWxlbWVudCk6CisgICAgICAgICAgICAgICAgZXZlbnQud2lkZ2V0LndpbmZvX3RvcGxldmVsKCkuaGlnaGxpZ2h0VGFyZ2V0LnNldChlbGVtKQorICAgICAgICAgICAgdGV4dC50YWdfYmluZCgKKyAgICAgICAgICAgICAgICAgICAgc2VsZi50aGVtZUVsZW1lbnRzW2VsZW1lbnRdWzBdLCAnPEJ1dHRvblByZXNzLTE+JywgdGVtKQogICAgICAgICB0ZXh0LmNvbmZpZyhzdGF0ZT1ESVNBQkxFRCkKLSAgICAgICAgc2VsZi5mcmFtZUNvbG91clNldD1GcmFtZShmcmFtZUN1c3RvbSxyZWxpZWY9U09MSUQsYm9yZGVyd2lkdGg9MSkKLSAgICAgICAgZnJhbWVGZ0JnPUZyYW1lKGZyYW1lQ3VzdG9tKQotICAgICAgICBidXR0b25TZXRDb2xvdXI9QnV0dG9uKHNlbGYuZnJhbWVDb2xvdXJTZXQsdGV4dD0nQ2hvb3NlIENvbG91ciBmb3IgOicsCi0gICAgICAgICAgICBjb21tYW5kPXNlbGYuR2V0Q29sb3VyLGhpZ2hsaWdodHRoaWNrbmVzcz0wKQotICAgICAgICBzZWxmLm9wdE1lbnVIaWdobGlnaHRUYXJnZXQ9RHluT3B0aW9uTWVudShzZWxmLmZyYW1lQ29sb3VyU2V0LAotICAgICAgICAgICAgc2VsZi5oaWdobGlnaHRUYXJnZXQsTm9uZSxoaWdobGlnaHR0aGlja25lc3M9MCkjLGNvbW1hbmQ9c2VsZi5TZXRIaWdobGlnaHRUYXJnZXRCaW5kaW5nCi0gICAgICAgIHNlbGYucmFkaW9GZz1SYWRpb2J1dHRvbihmcmFtZUZnQmcsdmFyaWFibGU9c2VsZi5mZ0hpbGl0ZSwKLSAgICAgICAgICAgIHZhbHVlPTEsdGV4dD0nRm9yZWdyb3VuZCcsY29tbWFuZD1zZWxmLlNldENvbG91clNhbXBsZUJpbmRpbmcpCi0gICAgICAgIHNlbGYucmFkaW9CZz1SYWRpb2J1dHRvbihmcmFtZUZnQmcsdmFyaWFibGU9c2VsZi5mZ0hpbGl0ZSwKLSAgICAgICAgICAgIHZhbHVlPTAsdGV4dD0nQmFja2dyb3VuZCcsY29tbWFuZD1zZWxmLlNldENvbG91clNhbXBsZUJpbmRpbmcpCisgICAgICAgIHNlbGYuZnJhbWVDb2xvdXJTZXQgPSBGcmFtZShmcmFtZUN1c3RvbSwgcmVsaWVmPVNPTElELCBib3JkZXJ3aWR0aD0xKQorICAgICAgICBmcmFtZUZnQmcgPSBGcmFtZShmcmFtZUN1c3RvbSkKKyAgICAgICAgYnV0dG9uU2V0Q29sb3VyID0gQnV0dG9uKAorICAgICAgICAgICAgICAgIHNlbGYuZnJhbWVDb2xvdXJTZXQsIHRleHQ9J0Nob29zZSBDb2xvdXIgZm9yIDonLAorICAgICAgICAgICAgICAgIGNvbW1hbmQ9c2VsZi5HZXRDb2xvdXIsIGhpZ2hsaWdodHRoaWNrbmVzcz0wKQorICAgICAgICBzZWxmLm9wdE1lbnVIaWdobGlnaHRUYXJnZXQgPSBEeW5PcHRpb25NZW51KAorICAgICAgICAgICAgICAgIHNlbGYuZnJhbWVDb2xvdXJTZXQsIHNlbGYuaGlnaGxpZ2h0VGFyZ2V0LCBOb25lLAorICAgICAgICAgICAgICAgIGhpZ2hsaWdodHRoaWNrbmVzcz0wKSAjLCBjb21tYW5kPXNlbGYuU2V0SGlnaGxpZ2h0VGFyZ2V0QmluZGluZworICAgICAgICBzZWxmLnJhZGlvRmcgPSBSYWRpb2J1dHRvbigKKyAgICAgICAgICAgICAgICBmcmFtZUZnQmcsIHZhcmlhYmxlPXNlbGYuZmdIaWxpdGUsIHZhbHVlPTEsCisgICAgICAgICAgICAgICAgdGV4dD0nRm9yZWdyb3VuZCcsIGNvbW1hbmQ9c2VsZi5TZXRDb2xvdXJTYW1wbGVCaW5kaW5nKQorICAgICAgICBzZWxmLnJhZGlvQmc9UmFkaW9idXR0b24oCisgICAgICAgICAgICAgICAgZnJhbWVGZ0JnLCB2YXJpYWJsZT1zZWxmLmZnSGlsaXRlLCB2YWx1ZT0wLAorICAgICAgICAgICAgICAgIHRleHQ9J0JhY2tncm91bmQnLCBjb21tYW5kPXNlbGYuU2V0Q29sb3VyU2FtcGxlQmluZGluZykKICAgICAgICAgc2VsZi5mZ0hpbGl0ZS5zZXQoMSkKLSAgICAgICAgYnV0dG9uU2F2ZUN1c3RvbVRoZW1lPUJ1dHRvbihmcmFtZUN1c3RvbSwKLSAgICAgICAgICAgIHRleHQ9J1NhdmUgYXMgTmV3IEN1c3RvbSBUaGVtZScsY29tbWFuZD1zZWxmLlNhdmVBc05ld1RoZW1lKQorICAgICAgICBidXR0b25TYXZlQ3VzdG9tVGhlbWUgPSBCdXR0b24oCisgICAgICAgICAgICAgICAgZnJhbWVDdXN0b20sIHRleHQ9J1NhdmUgYXMgTmV3IEN1c3RvbSBUaGVtZScsCisgICAgICAgICAgICAgICAgY29tbWFuZD1zZWxmLlNhdmVBc05ld1RoZW1lKQogICAgICAgICAjZnJhbWVUaGVtZQotICAgICAgICBsYWJlbFR5cGVUaXRsZT1MYWJlbChmcmFtZVRoZW1lLHRleHQ9J1NlbGVjdCA6ICcpCi0gICAgICAgIHNlbGYucmFkaW9UaGVtZUJ1aWx0aW49UmFkaW9idXR0b24oZnJhbWVUaGVtZSx2YXJpYWJsZT1zZWxmLnRoZW1lSXNCdWlsdGluLAotICAgICAgICAgICAgdmFsdWU9MSxjb21tYW5kPXNlbGYuU2V0VGhlbWVUeXBlLHRleHQ9J2EgQnVpbHQtaW4gVGhlbWUnKQotICAgICAgICBzZWxmLnJhZGlvVGhlbWVDdXN0b209UmFkaW9idXR0b24oZnJhbWVUaGVtZSx2YXJpYWJsZT1zZWxmLnRoZW1lSXNCdWlsdGluLAotICAgICAgICAgICAgdmFsdWU9MCxjb21tYW5kPXNlbGYuU2V0VGhlbWVUeXBlLHRleHQ9J2EgQ3VzdG9tIFRoZW1lJykKLSAgICAgICAgc2VsZi5vcHRNZW51VGhlbWVCdWlsdGluPUR5bk9wdGlvbk1lbnUoZnJhbWVUaGVtZSwKLSAgICAgICAgICAgIHNlbGYuYnVpbHRpblRoZW1lLE5vbmUsY29tbWFuZD1Ob25lKQotICAgICAgICBzZWxmLm9wdE1lbnVUaGVtZUN1c3RvbT1EeW5PcHRpb25NZW51KGZyYW1lVGhlbWUsCi0gICAgICAgICAgICBzZWxmLmN1c3RvbVRoZW1lLE5vbmUsY29tbWFuZD1Ob25lKQotICAgICAgICBzZWxmLmJ1dHRvbkRlbGV0ZUN1c3RvbVRoZW1lPUJ1dHRvbihmcmFtZVRoZW1lLHRleHQ9J0RlbGV0ZSBDdXN0b20gVGhlbWUnLAorICAgICAgICBsYWJlbFR5cGVUaXRsZSA9IExhYmVsKGZyYW1lVGhlbWUsIHRleHQ9J1NlbGVjdCA6ICcpCisgICAgICAgIHNlbGYucmFkaW9UaGVtZUJ1aWx0aW4gPSBSYWRpb2J1dHRvbigKKyAgICAgICAgICAgICAgICBmcmFtZVRoZW1lLCB2YXJpYWJsZT1zZWxmLnRoZW1lSXNCdWlsdGluLCB2YWx1ZT0xLAorICAgICAgICAgICAgICAgIGNvbW1hbmQ9c2VsZi5TZXRUaGVtZVR5cGUsIHRleHQ9J2EgQnVpbHQtaW4gVGhlbWUnKQorICAgICAgICBzZWxmLnJhZGlvVGhlbWVDdXN0b20gPSBSYWRpb2J1dHRvbigKKyAgICAgICAgICAgICAgICBmcmFtZVRoZW1lLCB2YXJpYWJsZT1zZWxmLnRoZW1lSXNCdWlsdGluLCB2YWx1ZT0wLAorICAgICAgICAgICAgICAgIGNvbW1hbmQ9c2VsZi5TZXRUaGVtZVR5cGUsIHRleHQ9J2EgQ3VzdG9tIFRoZW1lJykKKyAgICAgICAgc2VsZi5vcHRNZW51VGhlbWVCdWlsdGluID0gRHluT3B0aW9uTWVudSgKKyAgICAgICAgICAgICAgICBmcmFtZVRoZW1lLCBzZWxmLmJ1aWx0aW5UaGVtZSwgTm9uZSwgY29tbWFuZD1Ob25lKQorICAgICAgICBzZWxmLm9wdE1lbnVUaGVtZUN1c3RvbT1EeW5PcHRpb25NZW51KAorICAgICAgICAgICAgICAgIGZyYW1lVGhlbWUsIHNlbGYuY3VzdG9tVGhlbWUsIE5vbmUsIGNvbW1hbmQ9Tm9uZSkKKyAgICAgICAgc2VsZi5idXR0b25EZWxldGVDdXN0b21UaGVtZT1CdXR0b24oCisgICAgICAgICAgICAgICAgZnJhbWVUaGVtZSwgdGV4dD0nRGVsZXRlIEN1c3RvbSBUaGVtZScsCiAgICAgICAgICAgICAgICAgY29tbWFuZD1zZWxmLkRlbGV0ZUN1c3RvbVRoZW1lKQorICAgICAgICBzZWxmLm5ld19jdXN0b21fdGhlbWUgPSBMYWJlbChmcmFtZVRoZW1lLCBiZD0yKQorCiAgICAgICAgICMjd2lkZ2V0IHBhY2tpbmcKICAgICAgICAgI2JvZHkKLSAgICAgICAgZnJhbWVDdXN0b20ucGFjayhzaWRlPUxFRlQscGFkeD01LHBhZHk9NSxleHBhbmQ9VFJVRSxmaWxsPUJPVEgpCi0gICAgICAgIGZyYW1lVGhlbWUucGFjayhzaWRlPUxFRlQscGFkeD01LHBhZHk9NSxmaWxsPVkpCisgICAgICAgIGZyYW1lQ3VzdG9tLnBhY2soc2lkZT1MRUZULCBwYWR4PTUsIHBhZHk9NSwgZXhwYW5kPVRSVUUsIGZpbGw9Qk9USCkKKyAgICAgICAgZnJhbWVUaGVtZS5wYWNrKHNpZGU9TEVGVCwgcGFkeD01LCBwYWR5PTUsIGZpbGw9WSkKICAgICAgICAgI2ZyYW1lQ3VzdG9tCi0gICAgICAgIHNlbGYuZnJhbWVDb2xvdXJTZXQucGFjayhzaWRlPVRPUCxwYWR4PTUscGFkeT01LGV4cGFuZD1UUlVFLGZpbGw9WCkKLSAgICAgICAgZnJhbWVGZ0JnLnBhY2soc2lkZT1UT1AscGFkeD01LHBhZHk9MCkKLSAgICAgICAgc2VsZi50ZXh0SGlnaGxpZ2h0U2FtcGxlLnBhY2soc2lkZT1UT1AscGFkeD01LHBhZHk9NSxleHBhbmQ9VFJVRSwKLSAgICAgICAgICAgIGZpbGw9Qk9USCkKLSAgICAgICAgYnV0dG9uU2V0Q29sb3VyLnBhY2soc2lkZT1UT1AsZXhwYW5kPVRSVUUsZmlsbD1YLHBhZHg9OCxwYWR5PTQpCi0gICAgICAgIHNlbGYub3B0TWVudUhpZ2hsaWdodFRhcmdldC5wYWNrKHNpZGU9VE9QLGV4cGFuZD1UUlVFLGZpbGw9WCxwYWR4PTgscGFkeT0zKQotICAgICAgICBzZWxmLnJhZGlvRmcucGFjayhzaWRlPUxFRlQsYW5jaG9yPUUpCi0gICAgICAgIHNlbGYucmFkaW9CZy5wYWNrKHNpZGU9UklHSFQsYW5jaG9yPVcpCi0gICAgICAgIGJ1dHRvblNhdmVDdXN0b21UaGVtZS5wYWNrKHNpZGU9Qk9UVE9NLGZpbGw9WCxwYWR4PTUscGFkeT01KQorICAgICAgICBzZWxmLmZyYW1lQ29sb3VyU2V0LnBhY2soc2lkZT1UT1AsIHBhZHg9NSwgcGFkeT01LCBleHBhbmQ9VFJVRSwgZmlsbD1YKQorICAgICAgICBmcmFtZUZnQmcucGFjayhzaWRlPVRPUCwgcGFkeD01LCBwYWR5PTApCisgICAgICAgIHNlbGYudGV4dEhpZ2hsaWdodFNhbXBsZS5wYWNrKAorICAgICAgICAgICAgICAgIHNpZGU9VE9QLCBwYWR4PTUsIHBhZHk9NSwgZXhwYW5kPVRSVUUsIGZpbGw9Qk9USCkKKyAgICAgICAgYnV0dG9uU2V0Q29sb3VyLnBhY2soc2lkZT1UT1AsIGV4cGFuZD1UUlVFLCBmaWxsPVgsIHBhZHg9OCwgcGFkeT00KQorICAgICAgICBzZWxmLm9wdE1lbnVIaWdobGlnaHRUYXJnZXQucGFjaygKKyAgICAgICAgICAgICAgICBzaWRlPVRPUCwgZXhwYW5kPVRSVUUsIGZpbGw9WCwgcGFkeD04LCBwYWR5PTMpCisgICAgICAgIHNlbGYucmFkaW9GZy5wYWNrKHNpZGU9TEVGVCwgYW5jaG9yPUUpCisgICAgICAgIHNlbGYucmFkaW9CZy5wYWNrKHNpZGU9UklHSFQsIGFuY2hvcj1XKQorICAgICAgICBidXR0b25TYXZlQ3VzdG9tVGhlbWUucGFjayhzaWRlPUJPVFRPTSwgZmlsbD1YLCBwYWR4PTUsIHBhZHk9NSkKICAgICAgICAgI2ZyYW1lVGhlbWUKLSAgICAgICAgbGFiZWxUeXBlVGl0bGUucGFjayhzaWRlPVRPUCxhbmNob3I9VyxwYWR4PTUscGFkeT01KQotICAgICAgICBzZWxmLnJhZGlvVGhlbWVCdWlsdGluLnBhY2soc2lkZT1UT1AsYW5jaG9yPVcscGFkeD01KQotICAgICAgICBzZWxmLnJhZGlvVGhlbWVDdXN0b20ucGFjayhzaWRlPVRPUCxhbmNob3I9VyxwYWR4PTUscGFkeT0yKQotICAgICAgICBzZWxmLm9wdE1lbnVUaGVtZUJ1aWx0aW4ucGFjayhzaWRlPVRPUCxmaWxsPVgscGFkeD01LHBhZHk9NSkKLSAgICAgICAgc2VsZi5vcHRNZW51VGhlbWVDdXN0b20ucGFjayhzaWRlPVRPUCxmaWxsPVgsYW5jaG9yPVcscGFkeD01LHBhZHk9NSkKLSAgICAgICAgc2VsZi5idXR0b25EZWxldGVDdXN0b21UaGVtZS5wYWNrKHNpZGU9VE9QLGZpbGw9WCxwYWR4PTUscGFkeT01KQorICAgICAgICBsYWJlbFR5cGVUaXRsZS5wYWNrKHNpZGU9VE9QLCBhbmNob3I9VywgcGFkeD01LCBwYWR5PTUpCisgICAgICAgIHNlbGYucmFkaW9UaGVtZUJ1aWx0aW4ucGFjayhzaWRlPVRPUCwgYW5jaG9yPVcsIHBhZHg9NSkKKyAgICAgICAgc2VsZi5yYWRpb1RoZW1lQ3VzdG9tLnBhY2soc2lkZT1UT1AsIGFuY2hvcj1XLCBwYWR4PTUsIHBhZHk9MikKKyAgICAgICAgc2VsZi5vcHRNZW51VGhlbWVCdWlsdGluLnBhY2soc2lkZT1UT1AsIGZpbGw9WCwgcGFkeD01LCBwYWR5PTUpCisgICAgICAgIHNlbGYub3B0TWVudVRoZW1lQ3VzdG9tLnBhY2soc2lkZT1UT1AsIGZpbGw9WCwgYW5jaG9yPVcsIHBhZHg9NSwgcGFkeT01KQorICAgICAgICBzZWxmLmJ1dHRvbkRlbGV0ZUN1c3RvbVRoZW1lLnBhY2soc2lkZT1UT1AsIGZpbGw9WCwgcGFkeD01LCBwYWR5PTUpCisgICAgICAgIHNlbGYubmV3X2N1c3RvbV90aGVtZS5wYWNrKHNpZGU9VE9QLCBmaWxsPVgsIHBhZHk9NSkKICAgICAgICAgcmV0dXJuIGZyYW1lCiAKICAgICBkZWYgQ3JlYXRlUGFnZUtleXMoc2VsZik6Ci0gICAgICAgICN0a1ZhcnMKLSAgICAgICAgc2VsZi5iaW5kaW5nVGFyZ2V0PVN0cmluZ1ZhcihzZWxmKQotICAgICAgICBzZWxmLmJ1aWx0aW5LZXlzPVN0cmluZ1ZhcihzZWxmKQotICAgICAgICBzZWxmLmN1c3RvbUtleXM9U3RyaW5nVmFyKHNlbGYpCi0gICAgICAgIHNlbGYua2V5c0FyZUJ1aWx0aW49Qm9vbGVhblZhcihzZWxmKQotICAgICAgICBzZWxmLmtleUJpbmRpbmc9U3RyaW5nVmFyKHNlbGYpCisgICAgICAgIHBhcmVudCA9IHNlbGYucGFyZW50CisgICAgICAgIHNlbGYuYmluZGluZ1RhcmdldCA9IFN0cmluZ1ZhcihwYXJlbnQpCisgICAgICAgIHNlbGYuYnVpbHRpbktleXMgPSBTdHJpbmdWYXIocGFyZW50KQorICAgICAgICBzZWxmLmN1c3RvbUtleXMgPSBTdHJpbmdWYXIocGFyZW50KQorICAgICAgICBzZWxmLmtleXNBcmVCdWlsdGluID0gQm9vbGVhblZhcihwYXJlbnQpCisgICAgICAgIHNlbGYua2V5QmluZGluZyA9IFN0cmluZ1ZhcihwYXJlbnQpCisKICAgICAgICAgIyN3aWRnZXQgY3JlYXRpb24KICAgICAgICAgI2JvZHkgZnJhbWUKLSAgICAgICAgZnJhbWU9c2VsZi50YWJQYWdlcy5wYWdlc1snS2V5cyddLmZyYW1lCisgICAgICAgIGZyYW1lID0gc2VsZi50YWJQYWdlcy5wYWdlc1snS2V5cyddLmZyYW1lCiAgICAgICAgICNib2R5IHNlY3Rpb24gZnJhbWVzCi0gICAgICAgIGZyYW1lQ3VzdG9tPUxhYmVsRnJhbWUoZnJhbWUsYm9yZGVyd2lkdGg9MixyZWxpZWY9R1JPT1ZFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ9JyBDdXN0b20gS2V5IEJpbmRpbmdzICcpCi0gICAgICAgIGZyYW1lS2V5U2V0cz1MYWJlbEZyYW1lKGZyYW1lLGJvcmRlcndpZHRoPTIscmVsaWVmPUdST09WRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ9JyBLZXkgU2V0ICcpCisgICAgICAgIGZyYW1lQ3VzdG9tID0gTGFiZWxGcmFtZSgKKyAgICAgICAgICAgICAgICBmcmFtZSwgYm9yZGVyd2lkdGg9MiwgcmVsaWVmPUdST09WRSwKKyAgICAgICAgICAgICAgICB0ZXh0PScgQ3VzdG9tIEtleSBCaW5kaW5ncyAnKQorICAgICAgICBmcmFtZUtleVNldHMgPSBMYWJlbEZyYW1lKAorICAgICAgICAgICAgICAgIGZyYW1lLCBib3JkZXJ3aWR0aD0yLCByZWxpZWY9R1JPT1ZFLCB0ZXh0PScgS2V5IFNldCAnKQogICAgICAgICAjZnJhbWVDdXN0b20KLSAgICAgICAgZnJhbWVUYXJnZXQ9RnJhbWUoZnJhbWVDdXN0b20pCi0gICAgICAgIGxhYmVsVGFyZ2V0VGl0bGU9TGFiZWwoZnJhbWVUYXJnZXQsdGV4dD0nQWN0aW9uIC0gS2V5KHMpJykKLSAgICAgICAgc2Nyb2xsVGFyZ2V0WT1TY3JvbGxiYXIoZnJhbWVUYXJnZXQpCi0gICAgICAgIHNjcm9sbFRhcmdldFg9U2Nyb2xsYmFyKGZyYW1lVGFyZ2V0LG9yaWVudD1IT1JJWk9OVEFMKQotICAgICAgICBzZWxmLmxpc3RCaW5kaW5ncz1MaXN0Ym94KGZyYW1lVGFyZ2V0LHRha2Vmb2N1cz1GQUxTRSwKLSAgICAgICAgICAgICAgICBleHBvcnRzZWxlY3Rpb249RkFMU0UpCi0gICAgICAgIHNlbGYubGlzdEJpbmRpbmdzLmJpbmQoJzxCdXR0b25SZWxlYXNlLTE+JyxzZWxmLktleUJpbmRpbmdTZWxlY3RlZCkKKyAgICAgICAgZnJhbWVUYXJnZXQgPSBGcmFtZShmcmFtZUN1c3RvbSkKKyAgICAgICAgbGFiZWxUYXJnZXRUaXRsZSA9IExhYmVsKGZyYW1lVGFyZ2V0LCB0ZXh0PSdBY3Rpb24gLSBLZXkocyknKQorICAgICAgICBzY3JvbGxUYXJnZXRZID0gU2Nyb2xsYmFyKGZyYW1lVGFyZ2V0KQorICAgICAgICBzY3JvbGxUYXJnZXRYID0gU2Nyb2xsYmFyKGZyYW1lVGFyZ2V0LCBvcmllbnQ9SE9SSVpPTlRBTCkKKyAgICAgICAgc2VsZi5saXN0QmluZGluZ3MgPSBMaXN0Ym94KAorICAgICAgICAgICAgICAgIGZyYW1lVGFyZ2V0LCB0YWtlZm9jdXM9RkFMU0UsIGV4cG9ydHNlbGVjdGlvbj1GQUxTRSkKKyAgICAgICAgc2VsZi5saXN0QmluZGluZ3MuYmluZCgnPEJ1dHRvblJlbGVhc2UtMT4nLCBzZWxmLktleUJpbmRpbmdTZWxlY3RlZCkKICAgICAgICAgc2Nyb2xsVGFyZ2V0WS5jb25maWcoY29tbWFuZD1zZWxmLmxpc3RCaW5kaW5ncy55dmlldykKICAgICAgICAgc2Nyb2xsVGFyZ2V0WC5jb25maWcoY29tbWFuZD1zZWxmLmxpc3RCaW5kaW5ncy54dmlldykKICAgICAgICAgc2VsZi5saXN0QmluZGluZ3MuY29uZmlnKHlzY3JvbGxjb21tYW5kPXNjcm9sbFRhcmdldFkuc2V0KQogICAgICAgICBzZWxmLmxpc3RCaW5kaW5ncy5jb25maWcoeHNjcm9sbGNvbW1hbmQ9c2Nyb2xsVGFyZ2V0WC5zZXQpCi0gICAgICAgIHNlbGYuYnV0dG9uTmV3S2V5cz1CdXR0b24oZnJhbWVDdXN0b20sdGV4dD0nR2V0IE5ldyBLZXlzIGZvciBTZWxlY3Rpb24nLAotICAgICAgICAgICAgY29tbWFuZD1zZWxmLkdldE5ld0tleXMsc3RhdGU9RElTQUJMRUQpCisgICAgICAgIHNlbGYuYnV0dG9uTmV3S2V5cyA9IEJ1dHRvbigKKyAgICAgICAgICAgICAgICBmcmFtZUN1c3RvbSwgdGV4dD0nR2V0IE5ldyBLZXlzIGZvciBTZWxlY3Rpb24nLAorICAgICAgICAgICAgICAgIGNvbW1hbmQ9c2VsZi5HZXROZXdLZXlzLCBzdGF0ZT1ESVNBQkxFRCkKICAgICAgICAgI2ZyYW1lS2V5U2V0cwogICAgICAgICBmcmFtZXMgPSBbRnJhbWUoZnJhbWVLZXlTZXRzLCBwYWR4PTIsIHBhZHk9MiwgYm9yZGVyd2lkdGg9MCkKICAgICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDIpXQotICAgICAgICBzZWxmLnJhZGlvS2V5c0J1aWx0aW49UmFkaW9idXR0b24oZnJhbWVzWzBdLHZhcmlhYmxlPXNlbGYua2V5c0FyZUJ1aWx0aW4sCi0gICAgICAgICAgICB2YWx1ZT0xLGNvbW1hbmQ9c2VsZi5TZXRLZXlzVHlwZSx0ZXh0PSdVc2UgYSBCdWlsdC1pbiBLZXkgU2V0JykKLSAgICAgICAgc2VsZi5yYWRpb0tleXNDdXN0b209UmFkaW9idXR0b24oZnJhbWVzWzBdLHZhcmlhYmxlPXNlbGYua2V5c0FyZUJ1aWx0aW4sCi0gICAgICAgICAgICB2YWx1ZT0wLGNvbW1hbmQ9c2VsZi5TZXRLZXlzVHlwZSx0ZXh0PSdVc2UgYSBDdXN0b20gS2V5IFNldCcpCi0gICAgICAgIHNlbGYub3B0TWVudUtleXNCdWlsdGluPUR5bk9wdGlvbk1lbnUoZnJhbWVzWzBdLAotICAgICAgICAgICAgc2VsZi5idWlsdGluS2V5cyxOb25lLGNvbW1hbmQ9Tm9uZSkKLSAgICAgICAgc2VsZi5vcHRNZW51S2V5c0N1c3RvbT1EeW5PcHRpb25NZW51KGZyYW1lc1swXSwKLSAgICAgICAgICAgIHNlbGYuY3VzdG9tS2V5cyxOb25lLGNvbW1hbmQ9Tm9uZSkKLSAgICAgICAgc2VsZi5idXR0b25EZWxldGVDdXN0b21LZXlzPUJ1dHRvbihmcmFtZXNbMV0sdGV4dD0nRGVsZXRlIEN1c3RvbSBLZXkgU2V0JywKKyAgICAgICAgc2VsZi5yYWRpb0tleXNCdWlsdGluID0gUmFkaW9idXR0b24oCisgICAgICAgICAgICAgICAgZnJhbWVzWzBdLCB2YXJpYWJsZT1zZWxmLmtleXNBcmVCdWlsdGluLCB2YWx1ZT0xLAorICAgICAgICAgICAgICAgIGNvbW1hbmQ9c2VsZi5TZXRLZXlzVHlwZSwgdGV4dD0nVXNlIGEgQnVpbHQtaW4gS2V5IFNldCcpCisgICAgICAgIHNlbGYucmFkaW9LZXlzQ3VzdG9tID0gUmFkaW9idXR0b24oCisgICAgICAgICAgICAgICAgZnJhbWVzWzBdLCB2YXJpYWJsZT1zZWxmLmtleXNBcmVCdWlsdGluLCAgdmFsdWU9MCwKKyAgICAgICAgICAgICAgICBjb21tYW5kPXNlbGYuU2V0S2V5c1R5cGUsIHRleHQ9J1VzZSBhIEN1c3RvbSBLZXkgU2V0JykKKyAgICAgICAgc2VsZi5vcHRNZW51S2V5c0J1aWx0aW4gPSBEeW5PcHRpb25NZW51KAorICAgICAgICAgICAgICAgIGZyYW1lc1swXSwgc2VsZi5idWlsdGluS2V5cywgTm9uZSwgY29tbWFuZD1Ob25lKQorICAgICAgICBzZWxmLm9wdE1lbnVLZXlzQ3VzdG9tID0gRHluT3B0aW9uTWVudSgKKyAgICAgICAgICAgICAgICBmcmFtZXNbMF0sIHNlbGYuY3VzdG9tS2V5cywgTm9uZSwgY29tbWFuZD1Ob25lKQorICAgICAgICBzZWxmLmJ1dHRvbkRlbGV0ZUN1c3RvbUtleXMgPSBCdXR0b24oCisgICAgICAgICAgICAgICAgZnJhbWVzWzFdLCB0ZXh0PSdEZWxldGUgQ3VzdG9tIEtleSBTZXQnLAogICAgICAgICAgICAgICAgIGNvbW1hbmQ9c2VsZi5EZWxldGVDdXN0b21LZXlzKQotICAgICAgICBidXR0b25TYXZlQ3VzdG9tS2V5cz1CdXR0b24oZnJhbWVzWzFdLAotICAgICAgICAgICAgICAgIHRleHQ9J1NhdmUgYXMgTmV3IEN1c3RvbSBLZXkgU2V0Jyxjb21tYW5kPXNlbGYuU2F2ZUFzTmV3S2V5U2V0KQorICAgICAgICBidXR0b25TYXZlQ3VzdG9tS2V5cyA9IEJ1dHRvbigKKyAgICAgICAgICAgICAgICBmcmFtZXNbMV0sIHRleHQ9J1NhdmUgYXMgTmV3IEN1c3RvbSBLZXkgU2V0JywKKyAgICAgICAgICAgICAgICBjb21tYW5kPXNlbGYuU2F2ZUFzTmV3S2V5U2V0KQorCiAgICAgICAgICMjd2lkZ2V0IHBhY2tpbmcKICAgICAgICAgI2JvZHkKLSAgICAgICAgZnJhbWVDdXN0b20ucGFjayhzaWRlPUJPVFRPTSxwYWR4PTUscGFkeT01LGV4cGFuZD1UUlVFLGZpbGw9Qk9USCkKLSAgICAgICAgZnJhbWVLZXlTZXRzLnBhY2soc2lkZT1CT1RUT00scGFkeD01LHBhZHk9NSxmaWxsPUJPVEgpCisgICAgICAgIGZyYW1lQ3VzdG9tLnBhY2soc2lkZT1CT1RUT00sIHBhZHg9NSwgcGFkeT01LCBleHBhbmQ9VFJVRSwgZmlsbD1CT1RIKQorICAgICAgICBmcmFtZUtleVNldHMucGFjayhzaWRlPUJPVFRPTSwgcGFkeD01LCBwYWR5PTUsIGZpbGw9Qk9USCkKICAgICAgICAgI2ZyYW1lQ3VzdG9tCi0gICAgICAgIHNlbGYuYnV0dG9uTmV3S2V5cy5wYWNrKHNpZGU9Qk9UVE9NLGZpbGw9WCxwYWR4PTUscGFkeT01KQotICAgICAgICBmcmFtZVRhcmdldC5wYWNrKHNpZGU9TEVGVCxwYWR4PTUscGFkeT01LGV4cGFuZD1UUlVFLGZpbGw9Qk9USCkKKyAgICAgICAgc2VsZi5idXR0b25OZXdLZXlzLnBhY2soc2lkZT1CT1RUT00sIGZpbGw9WCwgcGFkeD01LCBwYWR5PTUpCisgICAgICAgIGZyYW1lVGFyZ2V0LnBhY2soc2lkZT1MRUZULCBwYWR4PTUsIHBhZHk9NSwgZXhwYW5kPVRSVUUsIGZpbGw9Qk9USCkKICAgICAgICAgI2ZyYW1lIHRhcmdldAotICAgICAgICBmcmFtZVRhcmdldC5jb2x1bW5jb25maWd1cmUoMCx3ZWlnaHQ9MSkKLSAgICAgICAgZnJhbWVUYXJnZXQucm93Y29uZmlndXJlKDEsd2VpZ2h0PTEpCi0gICAgICAgIGxhYmVsVGFyZ2V0VGl0bGUuZ3JpZChyb3c9MCxjb2x1bW49MCxjb2x1bW5zcGFuPTIsc3RpY2t5PVcpCi0gICAgICAgIHNlbGYubGlzdEJpbmRpbmdzLmdyaWQocm93PTEsY29sdW1uPTAsc3RpY2t5PU5TRVcpCi0gICAgICAgIHNjcm9sbFRhcmdldFkuZ3JpZChyb3c9MSxjb2x1bW49MSxzdGlja3k9TlMpCi0gICAgICAgIHNjcm9sbFRhcmdldFguZ3JpZChyb3c9Mixjb2x1bW49MCxzdGlja3k9RVcpCisgICAgICAgIGZyYW1lVGFyZ2V0LmNvbHVtbmNvbmZpZ3VyZSgwLCB3ZWlnaHQ9MSkKKyAgICAgICAgZnJhbWVUYXJnZXQucm93Y29uZmlndXJlKDEsIHdlaWdodD0xKQorICAgICAgICBsYWJlbFRhcmdldFRpdGxlLmdyaWQocm93PTAsIGNvbHVtbj0wLCBjb2x1bW5zcGFuPTIsIHN0aWNreT1XKQorICAgICAgICBzZWxmLmxpc3RCaW5kaW5ncy5ncmlkKHJvdz0xLCBjb2x1bW49MCwgc3RpY2t5PU5TRVcpCisgICAgICAgIHNjcm9sbFRhcmdldFkuZ3JpZChyb3c9MSwgY29sdW1uPTEsIHN0aWNreT1OUykKKyAgICAgICAgc2Nyb2xsVGFyZ2V0WC5ncmlkKHJvdz0yLCBjb2x1bW49MCwgc3RpY2t5PUVXKQogICAgICAgICAjZnJhbWVLZXlTZXRzCiAgICAgICAgIHNlbGYucmFkaW9LZXlzQnVpbHRpbi5ncmlkKHJvdz0wLCBjb2x1bW49MCwgc3RpY2t5PVcrTlMpCiAgICAgICAgIHNlbGYucmFkaW9LZXlzQ3VzdG9tLmdyaWQocm93PTEsIGNvbHVtbj0wLCBzdGlja3k9VytOUykKICAgICAgICAgc2VsZi5vcHRNZW51S2V5c0J1aWx0aW4uZ3JpZChyb3c9MCwgY29sdW1uPTEsIHN0aWNreT1OU0VXKQogICAgICAgICBzZWxmLm9wdE1lbnVLZXlzQ3VzdG9tLmdyaWQocm93PTEsIGNvbHVtbj0xLCBzdGlja3k9TlNFVykKLSAgICAgICAgc2VsZi5idXR0b25EZWxldGVDdXN0b21LZXlzLnBhY2soc2lkZT1MRUZULGZpbGw9WCxleHBhbmQ9VHJ1ZSxwYWR4PTIpCi0gICAgICAgIGJ1dHRvblNhdmVDdXN0b21LZXlzLnBhY2soc2lkZT1MRUZULGZpbGw9WCxleHBhbmQ9VHJ1ZSxwYWR4PTIpCisgICAgICAgIHNlbGYuYnV0dG9uRGVsZXRlQ3VzdG9tS2V5cy5wYWNrKHNpZGU9TEVGVCwgZmlsbD1YLCBleHBhbmQ9VHJ1ZSwgcGFkeD0yKQorICAgICAgICBidXR0b25TYXZlQ3VzdG9tS2V5cy5wYWNrKHNpZGU9TEVGVCwgZmlsbD1YLCBleHBhbmQ9VHJ1ZSwgcGFkeD0yKQogICAgICAgICBmcmFtZXNbMF0ucGFjayhzaWRlPVRPUCwgZmlsbD1CT1RILCBleHBhbmQ9VHJ1ZSkKICAgICAgICAgZnJhbWVzWzFdLnBhY2soc2lkZT1UT1AsIGZpbGw9WCwgZXhwYW5kPVRydWUsIHBhZHk9MikKICAgICAgICAgcmV0dXJuIGZyYW1lCiAKICAgICBkZWYgQ3JlYXRlUGFnZUdlbmVyYWwoc2VsZik6Ci0gICAgICAgICN0a1ZhcnMKLSAgICAgICAgc2VsZi53aW5XaWR0aD1TdHJpbmdWYXIoc2VsZikKLSAgICAgICAgc2VsZi53aW5IZWlnaHQ9U3RyaW5nVmFyKHNlbGYpCi0gICAgICAgIHNlbGYucGFyYVdpZHRoPVN0cmluZ1ZhcihzZWxmKQotICAgICAgICBzZWxmLnN0YXJ0dXBFZGl0PUludFZhcihzZWxmKQotICAgICAgICBzZWxmLmF1dG9TYXZlPUludFZhcihzZWxmKQotICAgICAgICBzZWxmLmVuY29kaW5nPVN0cmluZ1ZhcihzZWxmKQotICAgICAgICBzZWxmLnVzZXJIZWxwQnJvd3Nlcj1Cb29sZWFuVmFyKHNlbGYpCi0gICAgICAgIHNlbGYuaGVscEJyb3dzZXI9U3RyaW5nVmFyKHNlbGYpCisgICAgICAgIHBhcmVudCA9IHNlbGYucGFyZW50CisgICAgICAgIHNlbGYud2luV2lkdGggPSBTdHJpbmdWYXIocGFyZW50KQorICAgICAgICBzZWxmLndpbkhlaWdodCA9IFN0cmluZ1ZhcihwYXJlbnQpCisgICAgICAgIHNlbGYuc3RhcnR1cEVkaXQgPSBJbnRWYXIocGFyZW50KQorICAgICAgICBzZWxmLmF1dG9TYXZlID0gSW50VmFyKHBhcmVudCkKKyAgICAgICAgc2VsZi5lbmNvZGluZyA9IFN0cmluZ1ZhcihwYXJlbnQpCisgICAgICAgIHNlbGYudXNlckhlbHBCcm93c2VyID0gQm9vbGVhblZhcihwYXJlbnQpCisgICAgICAgIHNlbGYuaGVscEJyb3dzZXIgPSBTdHJpbmdWYXIocGFyZW50KQorCiAgICAgICAgICN3aWRnZXQgY3JlYXRpb24KICAgICAgICAgI2JvZHkKLSAgICAgICAgZnJhbWU9c2VsZi50YWJQYWdlcy5wYWdlc1snR2VuZXJhbCddLmZyYW1lCisgICAgICAgIGZyYW1lID0gc2VsZi50YWJQYWdlcy5wYWdlc1snR2VuZXJhbCddLmZyYW1lCiAgICAgICAgICNib2R5IHNlY3Rpb24gZnJhbWVzCi0gICAgICAgIGZyYW1lUnVuPUxhYmVsRnJhbWUoZnJhbWUsYm9yZGVyd2lkdGg9MixyZWxpZWY9R1JPT1ZFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ9JyBTdGFydHVwIFByZWZlcmVuY2VzICcpCi0gICAgICAgIGZyYW1lU2F2ZT1MYWJlbEZyYW1lKGZyYW1lLGJvcmRlcndpZHRoPTIscmVsaWVmPUdST09WRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dD0nIEF1dG9zYXZlIFByZWZlcmVuY2VzICcpCi0gICAgICAgIGZyYW1lV2luU2l6ZT1GcmFtZShmcmFtZSxib3JkZXJ3aWR0aD0yLHJlbGllZj1HUk9PVkUpCi0gICAgICAgIGZyYW1lUGFyYVNpemU9RnJhbWUoZnJhbWUsYm9yZGVyd2lkdGg9MixyZWxpZWY9R1JPT1ZFKQotICAgICAgICBmcmFtZUhlbHA9TGFiZWxGcmFtZShmcmFtZSxib3JkZXJ3aWR0aD0yLHJlbGllZj1HUk9PVkUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ9JyBBZGRpdGlvbmFsIEhlbHAgU291cmNlcyAnKQorICAgICAgICBmcmFtZVJ1biA9IExhYmVsRnJhbWUoZnJhbWUsIGJvcmRlcndpZHRoPTIsIHJlbGllZj1HUk9PVkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0PScgU3RhcnR1cCBQcmVmZXJlbmNlcyAnKQorICAgICAgICBmcmFtZVNhdmUgPSBMYWJlbEZyYW1lKGZyYW1lLCBib3JkZXJ3aWR0aD0yLCByZWxpZWY9R1JPT1ZFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ9JyBBdXRvc2F2ZSBQcmVmZXJlbmNlcyAnKQorICAgICAgICBmcmFtZVdpblNpemUgPSBGcmFtZShmcmFtZSwgYm9yZGVyd2lkdGg9MiwgcmVsaWVmPUdST09WRSkKKyAgICAgICAgZnJhbWVIZWxwID0gTGFiZWxGcmFtZShmcmFtZSwgYm9yZGVyd2lkdGg9MiwgcmVsaWVmPUdST09WRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0PScgQWRkaXRpb25hbCBIZWxwIFNvdXJjZXMgJykKICAgICAgICAgI2ZyYW1lUnVuCi0gICAgICAgIGxhYmVsUnVuQ2hvaWNlVGl0bGU9TGFiZWwoZnJhbWVSdW4sdGV4dD0nQXQgU3RhcnR1cCcpCi0gICAgICAgIHJhZGlvU3RhcnR1cEVkaXQ9UmFkaW9idXR0b24oZnJhbWVSdW4sdmFyaWFibGU9c2VsZi5zdGFydHVwRWRpdCwKLSAgICAgICAgICAgIHZhbHVlPTEsY29tbWFuZD1zZWxmLlNldEtleXNUeXBlLHRleHQ9Ik9wZW4gRWRpdCBXaW5kb3ciKQotICAgICAgICByYWRpb1N0YXJ0dXBTaGVsbD1SYWRpb2J1dHRvbihmcmFtZVJ1bix2YXJpYWJsZT1zZWxmLnN0YXJ0dXBFZGl0LAotICAgICAgICAgICAgdmFsdWU9MCxjb21tYW5kPXNlbGYuU2V0S2V5c1R5cGUsdGV4dD0nT3BlbiBTaGVsbCBXaW5kb3cnKQorICAgICAgICBsYWJlbFJ1bkNob2ljZVRpdGxlID0gTGFiZWwoZnJhbWVSdW4sIHRleHQ9J0F0IFN0YXJ0dXAnKQorICAgICAgICByYWRpb1N0YXJ0dXBFZGl0ID0gUmFkaW9idXR0b24oCisgICAgICAgICAgICAgICAgZnJhbWVSdW4sIHZhcmlhYmxlPXNlbGYuc3RhcnR1cEVkaXQsIHZhbHVlPTEsCisgICAgICAgICAgICAgICAgY29tbWFuZD1zZWxmLlNldEtleXNUeXBlLCB0ZXh0PSJPcGVuIEVkaXQgV2luZG93IikKKyAgICAgICAgcmFkaW9TdGFydHVwU2hlbGwgPSBSYWRpb2J1dHRvbigKKyAgICAgICAgICAgICAgICBmcmFtZVJ1biwgdmFyaWFibGU9c2VsZi5zdGFydHVwRWRpdCwgdmFsdWU9MCwKKyAgICAgICAgICAgICAgICBjb21tYW5kPXNlbGYuU2V0S2V5c1R5cGUsIHRleHQ9J09wZW4gU2hlbGwgV2luZG93JykKICAgICAgICAgI2ZyYW1lU2F2ZQotICAgICAgICBsYWJlbFJ1blNhdmVUaXRsZT1MYWJlbChmcmFtZVNhdmUsdGV4dD0nQXQgU3RhcnQgb2YgUnVuIChGNSkgICcpCi0gICAgICAgIHJhZGlvU2F2ZUFzaz1SYWRpb2J1dHRvbihmcmFtZVNhdmUsdmFyaWFibGU9c2VsZi5hdXRvU2F2ZSwKLSAgICAgICAgICAgIHZhbHVlPTAsY29tbWFuZD1zZWxmLlNldEtleXNUeXBlLHRleHQ9IlByb21wdCB0byBTYXZlIikKLSAgICAgICAgcmFkaW9TYXZlQXV0bz1SYWRpb2J1dHRvbihmcmFtZVNhdmUsdmFyaWFibGU9c2VsZi5hdXRvU2F2ZSwKLSAgICAgICAgICAgIHZhbHVlPTEsY29tbWFuZD1zZWxmLlNldEtleXNUeXBlLHRleHQ9J05vIFByb21wdCcpCisgICAgICAgIGxhYmVsUnVuU2F2ZVRpdGxlID0gTGFiZWwoZnJhbWVTYXZlLCB0ZXh0PSdBdCBTdGFydCBvZiBSdW4gKEY1KSAgJykKKyAgICAgICAgcmFkaW9TYXZlQXNrID0gUmFkaW9idXR0b24oCisgICAgICAgICAgICAgICAgZnJhbWVTYXZlLCB2YXJpYWJsZT1zZWxmLmF1dG9TYXZlLCB2YWx1ZT0wLAorICAgICAgICAgICAgICAgIGNvbW1hbmQ9c2VsZi5TZXRLZXlzVHlwZSwgdGV4dD0iUHJvbXB0IHRvIFNhdmUiKQorICAgICAgICByYWRpb1NhdmVBdXRvID0gUmFkaW9idXR0b24oCisgICAgICAgICAgICAgICAgZnJhbWVTYXZlLCB2YXJpYWJsZT1zZWxmLmF1dG9TYXZlLCB2YWx1ZT0xLAorICAgICAgICAgICAgICAgIGNvbW1hbmQ9c2VsZi5TZXRLZXlzVHlwZSwgdGV4dD0nTm8gUHJvbXB0JykKICAgICAgICAgI2ZyYW1lV2luU2l6ZQotICAgICAgICBsYWJlbFdpblNpemVUaXRsZT1MYWJlbChmcmFtZVdpblNpemUsdGV4dD0nSW5pdGlhbCBXaW5kb3cgU2l6ZScrCi0gICAgICAgICAgICAgICAgJyAgKGluIGNoYXJhY3RlcnMpJykKLSAgICAgICAgbGFiZWxXaW5XaWR0aFRpdGxlPUxhYmVsKGZyYW1lV2luU2l6ZSx0ZXh0PSdXaWR0aCcpCi0gICAgICAgIGVudHJ5V2luV2lkdGg9RW50cnkoZnJhbWVXaW5TaXplLHRleHR2YXJpYWJsZT1zZWxmLndpbldpZHRoLAotICAgICAgICAgICAgICAgIHdpZHRoPTMpCi0gICAgICAgIGxhYmVsV2luSGVpZ2h0VGl0bGU9TGFiZWwoZnJhbWVXaW5TaXplLHRleHQ9J0hlaWdodCcpCi0gICAgICAgIGVudHJ5V2luSGVpZ2h0PUVudHJ5KGZyYW1lV2luU2l6ZSx0ZXh0dmFyaWFibGU9c2VsZi53aW5IZWlnaHQsCi0gICAgICAgICAgICAgICAgd2lkdGg9MykKLSAgICAgICAgI3BhcmFncmFwaEZvcm1hdFdpZHRoCi0gICAgICAgIGxhYmVsUGFyYVdpZHRoVGl0bGU9TGFiZWwoZnJhbWVQYXJhU2l6ZSx0ZXh0PSdQYXJhZ3JhcGggcmVmb3JtYXQnKwotICAgICAgICAgICAgICAgICcgd2lkdGggKGluIGNoYXJhY3RlcnMpJykKLSAgICAgICAgZW50cnlQYXJhV2lkdGg9RW50cnkoZnJhbWVQYXJhU2l6ZSx0ZXh0dmFyaWFibGU9c2VsZi5wYXJhV2lkdGgsCi0gICAgICAgICAgICAgICAgd2lkdGg9MykKKyAgICAgICAgbGFiZWxXaW5TaXplVGl0bGUgPSBMYWJlbCgKKyAgICAgICAgICAgICAgICBmcmFtZVdpblNpemUsIHRleHQ9J0luaXRpYWwgV2luZG93IFNpemUgIChpbiBjaGFyYWN0ZXJzKScpCisgICAgICAgIGxhYmVsV2luV2lkdGhUaXRsZSA9IExhYmVsKGZyYW1lV2luU2l6ZSwgdGV4dD0nV2lkdGgnKQorICAgICAgICBlbnRyeVdpbldpZHRoID0gRW50cnkoCisgICAgICAgICAgICAgICAgZnJhbWVXaW5TaXplLCB0ZXh0dmFyaWFibGU9c2VsZi53aW5XaWR0aCwgd2lkdGg9MykKKyAgICAgICAgbGFiZWxXaW5IZWlnaHRUaXRsZSA9IExhYmVsKGZyYW1lV2luU2l6ZSwgdGV4dD0nSGVpZ2h0JykKKyAgICAgICAgZW50cnlXaW5IZWlnaHQgPSBFbnRyeSgKKyAgICAgICAgICAgICAgICBmcmFtZVdpblNpemUsIHRleHR2YXJpYWJsZT1zZWxmLndpbkhlaWdodCwgd2lkdGg9MykKICAgICAgICAgI2ZyYW1lSGVscAotICAgICAgICBmcmFtZUhlbHBMaXN0PUZyYW1lKGZyYW1lSGVscCkKLSAgICAgICAgZnJhbWVIZWxwTGlzdEJ1dHRvbnM9RnJhbWUoZnJhbWVIZWxwTGlzdCkKLSAgICAgICAgc2Nyb2xsSGVscExpc3Q9U2Nyb2xsYmFyKGZyYW1lSGVscExpc3QpCi0gICAgICAgIHNlbGYubGlzdEhlbHA9TGlzdGJveChmcmFtZUhlbHBMaXN0LGhlaWdodD01LHRha2Vmb2N1cz1GQUxTRSwKKyAgICAgICAgZnJhbWVIZWxwTGlzdCA9IEZyYW1lKGZyYW1lSGVscCkKKyAgICAgICAgZnJhbWVIZWxwTGlzdEJ1dHRvbnMgPSBGcmFtZShmcmFtZUhlbHBMaXN0KQorICAgICAgICBzY3JvbGxIZWxwTGlzdCA9IFNjcm9sbGJhcihmcmFtZUhlbHBMaXN0KQorICAgICAgICBzZWxmLmxpc3RIZWxwID0gTGlzdGJveCgKKyAgICAgICAgICAgICAgICBmcmFtZUhlbHBMaXN0LCBoZWlnaHQ9NSwgdGFrZWZvY3VzPUZBTFNFLAogICAgICAgICAgICAgICAgIGV4cG9ydHNlbGVjdGlvbj1GQUxTRSkKICAgICAgICAgc2Nyb2xsSGVscExpc3QuY29uZmlnKGNvbW1hbmQ9c2VsZi5saXN0SGVscC55dmlldykKICAgICAgICAgc2VsZi5saXN0SGVscC5jb25maWcoeXNjcm9sbGNvbW1hbmQ9c2Nyb2xsSGVscExpc3Quc2V0KQotICAgICAgICBzZWxmLmxpc3RIZWxwLmJpbmQoJzxCdXR0b25SZWxlYXNlLTE+JyxzZWxmLkhlbHBTb3VyY2VTZWxlY3RlZCkKLSAgICAgICAgc2VsZi5idXR0b25IZWxwTGlzdEVkaXQ9QnV0dG9uKGZyYW1lSGVscExpc3RCdXR0b25zLHRleHQ9J0VkaXQnLAotICAgICAgICAgICAgICAgIHN0YXRlPURJU0FCTEVELHdpZHRoPTgsY29tbWFuZD1zZWxmLkhlbHBMaXN0SXRlbUVkaXQpCi0gICAgICAgIHNlbGYuYnV0dG9uSGVscExpc3RBZGQ9QnV0dG9uKGZyYW1lSGVscExpc3RCdXR0b25zLHRleHQ9J0FkZCcsCi0gICAgICAgICAgICAgICAgd2lkdGg9OCxjb21tYW5kPXNlbGYuSGVscExpc3RJdGVtQWRkKQotICAgICAgICBzZWxmLmJ1dHRvbkhlbHBMaXN0UmVtb3ZlPUJ1dHRvbihmcmFtZUhlbHBMaXN0QnV0dG9ucyx0ZXh0PSdSZW1vdmUnLAotICAgICAgICAgICAgICAgIHN0YXRlPURJU0FCTEVELHdpZHRoPTgsY29tbWFuZD1zZWxmLkhlbHBMaXN0SXRlbVJlbW92ZSkKKyAgICAgICAgc2VsZi5saXN0SGVscC5iaW5kKCc8QnV0dG9uUmVsZWFzZS0xPicsIHNlbGYuSGVscFNvdXJjZVNlbGVjdGVkKQorICAgICAgICBzZWxmLmJ1dHRvbkhlbHBMaXN0RWRpdCA9IEJ1dHRvbigKKyAgICAgICAgICAgICAgICBmcmFtZUhlbHBMaXN0QnV0dG9ucywgdGV4dD0nRWRpdCcsIHN0YXRlPURJU0FCTEVELAorICAgICAgICAgICAgICAgIHdpZHRoPTgsIGNvbW1hbmQ9c2VsZi5IZWxwTGlzdEl0ZW1FZGl0KQorICAgICAgICBzZWxmLmJ1dHRvbkhlbHBMaXN0QWRkID0gQnV0dG9uKAorICAgICAgICAgICAgICAgIGZyYW1lSGVscExpc3RCdXR0b25zLCB0ZXh0PSdBZGQnLAorICAgICAgICAgICAgICAgIHdpZHRoPTgsIGNvbW1hbmQ9c2VsZi5IZWxwTGlzdEl0ZW1BZGQpCisgICAgICAgIHNlbGYuYnV0dG9uSGVscExpc3RSZW1vdmUgPSBCdXR0b24oCisgICAgICAgICAgICAgICAgZnJhbWVIZWxwTGlzdEJ1dHRvbnMsIHRleHQ9J1JlbW92ZScsIHN0YXRlPURJU0FCTEVELAorICAgICAgICAgICAgICAgIHdpZHRoPTgsIGNvbW1hbmQ9c2VsZi5IZWxwTGlzdEl0ZW1SZW1vdmUpCisKICAgICAgICAgI3dpZGdldCBwYWNraW5nCiAgICAgICAgICNib2R5Ci0gICAgICAgIGZyYW1lUnVuLnBhY2soc2lkZT1UT1AscGFkeD01LHBhZHk9NSxmaWxsPVgpCi0gICAgICAgIGZyYW1lU2F2ZS5wYWNrKHNpZGU9VE9QLHBhZHg9NSxwYWR5PTUsZmlsbD1YKQotICAgICAgICBmcmFtZVdpblNpemUucGFjayhzaWRlPVRPUCxwYWR4PTUscGFkeT01LGZpbGw9WCkKLSAgICAgICAgZnJhbWVQYXJhU2l6ZS5wYWNrKHNpZGU9VE9QLHBhZHg9NSxwYWR5PTUsZmlsbD1YKQotICAgICAgICBmcmFtZUhlbHAucGFjayhzaWRlPVRPUCxwYWR4PTUscGFkeT01LGV4cGFuZD1UUlVFLGZpbGw9Qk9USCkKKyAgICAgICAgZnJhbWVSdW4ucGFjayhzaWRlPVRPUCwgcGFkeD01LCBwYWR5PTUsIGZpbGw9WCkKKyAgICAgICAgZnJhbWVTYXZlLnBhY2soc2lkZT1UT1AsIHBhZHg9NSwgcGFkeT01LCBmaWxsPVgpCisgICAgICAgIGZyYW1lV2luU2l6ZS5wYWNrKHNpZGU9VE9QLCBwYWR4PTUsIHBhZHk9NSwgZmlsbD1YKQorICAgICAgICBmcmFtZUhlbHAucGFjayhzaWRlPVRPUCwgcGFkeD01LCBwYWR5PTUsIGV4cGFuZD1UUlVFLCBmaWxsPUJPVEgpCiAgICAgICAgICNmcmFtZVJ1bgotICAgICAgICBsYWJlbFJ1bkNob2ljZVRpdGxlLnBhY2soc2lkZT1MRUZULGFuY2hvcj1XLHBhZHg9NSxwYWR5PTUpCi0gICAgICAgIHJhZGlvU3RhcnR1cFNoZWxsLnBhY2soc2lkZT1SSUdIVCxhbmNob3I9VyxwYWR4PTUscGFkeT01KQotICAgICAgICByYWRpb1N0YXJ0dXBFZGl0LnBhY2soc2lkZT1SSUdIVCxhbmNob3I9VyxwYWR4PTUscGFkeT01KQorICAgICAgICBsYWJlbFJ1bkNob2ljZVRpdGxlLnBhY2soc2lkZT1MRUZULCBhbmNob3I9VywgcGFkeD01LCBwYWR5PTUpCisgICAgICAgIHJhZGlvU3RhcnR1cFNoZWxsLnBhY2soc2lkZT1SSUdIVCwgYW5jaG9yPVcsIHBhZHg9NSwgcGFkeT01KQorICAgICAgICByYWRpb1N0YXJ0dXBFZGl0LnBhY2soc2lkZT1SSUdIVCwgYW5jaG9yPVcsIHBhZHg9NSwgcGFkeT01KQogICAgICAgICAjZnJhbWVTYXZlCi0gICAgICAgIGxhYmVsUnVuU2F2ZVRpdGxlLnBhY2soc2lkZT1MRUZULGFuY2hvcj1XLHBhZHg9NSxwYWR5PTUpCi0gICAgICAgIHJhZGlvU2F2ZUF1dG8ucGFjayhzaWRlPVJJR0hULGFuY2hvcj1XLHBhZHg9NSxwYWR5PTUpCi0gICAgICAgIHJhZGlvU2F2ZUFzay5wYWNrKHNpZGU9UklHSFQsYW5jaG9yPVcscGFkeD01LHBhZHk9NSkKKyAgICAgICAgbGFiZWxSdW5TYXZlVGl0bGUucGFjayhzaWRlPUxFRlQsIGFuY2hvcj1XLCBwYWR4PTUsIHBhZHk9NSkKKyAgICAgICAgcmFkaW9TYXZlQXV0by5wYWNrKHNpZGU9UklHSFQsIGFuY2hvcj1XLCBwYWR4PTUsIHBhZHk9NSkKKyAgICAgICAgcmFkaW9TYXZlQXNrLnBhY2soc2lkZT1SSUdIVCwgYW5jaG9yPVcsIHBhZHg9NSwgcGFkeT01KQogICAgICAgICAjZnJhbWVXaW5TaXplCi0gICAgICAgIGxhYmVsV2luU2l6ZVRpdGxlLnBhY2soc2lkZT1MRUZULGFuY2hvcj1XLHBhZHg9NSxwYWR5PTUpCi0gICAgICAgIGVudHJ5V2luSGVpZ2h0LnBhY2soc2lkZT1SSUdIVCxhbmNob3I9RSxwYWR4PTEwLHBhZHk9NSkKLSAgICAgICAgbGFiZWxXaW5IZWlnaHRUaXRsZS5wYWNrKHNpZGU9UklHSFQsYW5jaG9yPUUscGFkeT01KQotICAgICAgICBlbnRyeVdpbldpZHRoLnBhY2soc2lkZT1SSUdIVCxhbmNob3I9RSxwYWR4PTEwLHBhZHk9NSkKLSAgICAgICAgbGFiZWxXaW5XaWR0aFRpdGxlLnBhY2soc2lkZT1SSUdIVCxhbmNob3I9RSxwYWR5PTUpCi0gICAgICAgICNwYXJhZ3JhcGhGb3JtYXRXaWR0aAotICAgICAgICBsYWJlbFBhcmFXaWR0aFRpdGxlLnBhY2soc2lkZT1MRUZULGFuY2hvcj1XLHBhZHg9NSxwYWR5PTUpCi0gICAgICAgIGVudHJ5UGFyYVdpZHRoLnBhY2soc2lkZT1SSUdIVCxhbmNob3I9RSxwYWR4PTEwLHBhZHk9NSkKKyAgICAgICAgbGFiZWxXaW5TaXplVGl0bGUucGFjayhzaWRlPUxFRlQsIGFuY2hvcj1XLCBwYWR4PTUsIHBhZHk9NSkKKyAgICAgICAgZW50cnlXaW5IZWlnaHQucGFjayhzaWRlPVJJR0hULCBhbmNob3I9RSwgcGFkeD0xMCwgcGFkeT01KQorICAgICAgICBsYWJlbFdpbkhlaWdodFRpdGxlLnBhY2soc2lkZT1SSUdIVCwgYW5jaG9yPUUsIHBhZHk9NSkKKyAgICAgICAgZW50cnlXaW5XaWR0aC5wYWNrKHNpZGU9UklHSFQsIGFuY2hvcj1FLCBwYWR4PTEwLCBwYWR5PTUpCisgICAgICAgIGxhYmVsV2luV2lkdGhUaXRsZS5wYWNrKHNpZGU9UklHSFQsIGFuY2hvcj1FLCBwYWR5PTUpCiAgICAgICAgICNmcmFtZUhlbHAKLSAgICAgICAgZnJhbWVIZWxwTGlzdEJ1dHRvbnMucGFjayhzaWRlPVJJR0hULHBhZHg9NSxwYWR5PTUsZmlsbD1ZKQotICAgICAgICBmcmFtZUhlbHBMaXN0LnBhY2soc2lkZT1UT1AscGFkeD01LHBhZHk9NSxleHBhbmQ9VFJVRSxmaWxsPUJPVEgpCi0gICAgICAgIHNjcm9sbEhlbHBMaXN0LnBhY2soc2lkZT1SSUdIVCxhbmNob3I9VyxmaWxsPVkpCi0gICAgICAgIHNlbGYubGlzdEhlbHAucGFjayhzaWRlPUxFRlQsYW5jaG9yPUUsZXhwYW5kPVRSVUUsZmlsbD1CT1RIKQotICAgICAgICBzZWxmLmJ1dHRvbkhlbHBMaXN0RWRpdC5wYWNrKHNpZGU9VE9QLGFuY2hvcj1XLHBhZHk9NSkKLSAgICAgICAgc2VsZi5idXR0b25IZWxwTGlzdEFkZC5wYWNrKHNpZGU9VE9QLGFuY2hvcj1XKQotICAgICAgICBzZWxmLmJ1dHRvbkhlbHBMaXN0UmVtb3ZlLnBhY2soc2lkZT1UT1AsYW5jaG9yPVcscGFkeT01KQorICAgICAgICBmcmFtZUhlbHBMaXN0QnV0dG9ucy5wYWNrKHNpZGU9UklHSFQsIHBhZHg9NSwgcGFkeT01LCBmaWxsPVkpCisgICAgICAgIGZyYW1lSGVscExpc3QucGFjayhzaWRlPVRPUCwgcGFkeD01LCBwYWR5PTUsIGV4cGFuZD1UUlVFLCBmaWxsPUJPVEgpCisgICAgICAgIHNjcm9sbEhlbHBMaXN0LnBhY2soc2lkZT1SSUdIVCwgYW5jaG9yPVcsIGZpbGw9WSkKKyAgICAgICAgc2VsZi5saXN0SGVscC5wYWNrKHNpZGU9TEVGVCwgYW5jaG9yPUUsIGV4cGFuZD1UUlVFLCBmaWxsPUJPVEgpCisgICAgICAgIHNlbGYuYnV0dG9uSGVscExpc3RFZGl0LnBhY2soc2lkZT1UT1AsIGFuY2hvcj1XLCBwYWR5PTUpCisgICAgICAgIHNlbGYuYnV0dG9uSGVscExpc3RBZGQucGFjayhzaWRlPVRPUCwgYW5jaG9yPVcpCisgICAgICAgIHNlbGYuYnV0dG9uSGVscExpc3RSZW1vdmUucGFjayhzaWRlPVRPUCwgYW5jaG9yPVcsIHBhZHk9NSkKICAgICAgICAgcmV0dXJuIGZyYW1lCiAKICAgICBkZWYgQXR0YWNoVmFyQ2FsbGJhY2tzKHNlbGYpOgotICAgICAgICBzZWxmLmZvbnRTaXplLnRyYWNlX3ZhcmlhYmxlKCd3JyxzZWxmLlZhckNoYW5nZWRfZm9udFNpemUpCi0gICAgICAgIHNlbGYuZm9udE5hbWUudHJhY2VfdmFyaWFibGUoJ3cnLHNlbGYuVmFyQ2hhbmdlZF9mb250TmFtZSkKLSAgICAgICAgc2VsZi5mb250Qm9sZC50cmFjZV92YXJpYWJsZSgndycsc2VsZi5WYXJDaGFuZ2VkX2ZvbnRCb2xkKQotICAgICAgICBzZWxmLnNwYWNlTnVtLnRyYWNlX3ZhcmlhYmxlKCd3JyxzZWxmLlZhckNoYW5nZWRfc3BhY2VOdW0pCi0gICAgICAgIHNlbGYuY29sb3VyLnRyYWNlX3ZhcmlhYmxlKCd3JyxzZWxmLlZhckNoYW5nZWRfY29sb3VyKQotICAgICAgICBzZWxmLmJ1aWx0aW5UaGVtZS50cmFjZV92YXJpYWJsZSgndycsc2VsZi5WYXJDaGFuZ2VkX2J1aWx0aW5UaGVtZSkKLSAgICAgICAgc2VsZi5jdXN0b21UaGVtZS50cmFjZV92YXJpYWJsZSgndycsc2VsZi5WYXJDaGFuZ2VkX2N1c3RvbVRoZW1lKQotICAgICAgICBzZWxmLnRoZW1lSXNCdWlsdGluLnRyYWNlX3ZhcmlhYmxlKCd3JyxzZWxmLlZhckNoYW5nZWRfdGhlbWVJc0J1aWx0aW4pCi0gICAgICAgIHNlbGYuaGlnaGxpZ2h0VGFyZ2V0LnRyYWNlX3ZhcmlhYmxlKCd3JyxzZWxmLlZhckNoYW5nZWRfaGlnaGxpZ2h0VGFyZ2V0KQotICAgICAgICBzZWxmLmtleUJpbmRpbmcudHJhY2VfdmFyaWFibGUoJ3cnLHNlbGYuVmFyQ2hhbmdlZF9rZXlCaW5kaW5nKQotICAgICAgICBzZWxmLmJ1aWx0aW5LZXlzLnRyYWNlX3ZhcmlhYmxlKCd3JyxzZWxmLlZhckNoYW5nZWRfYnVpbHRpbktleXMpCi0gICAgICAgIHNlbGYuY3VzdG9tS2V5cy50cmFjZV92YXJpYWJsZSgndycsc2VsZi5WYXJDaGFuZ2VkX2N1c3RvbUtleXMpCi0gICAgICAgIHNlbGYua2V5c0FyZUJ1aWx0aW4udHJhY2VfdmFyaWFibGUoJ3cnLHNlbGYuVmFyQ2hhbmdlZF9rZXlzQXJlQnVpbHRpbikKLSAgICAgICAgc2VsZi53aW5XaWR0aC50cmFjZV92YXJpYWJsZSgndycsc2VsZi5WYXJDaGFuZ2VkX3dpbldpZHRoKQotICAgICAgICBzZWxmLndpbkhlaWdodC50cmFjZV92YXJpYWJsZSgndycsc2VsZi5WYXJDaGFuZ2VkX3dpbkhlaWdodCkKLSAgICAgICAgc2VsZi5wYXJhV2lkdGgudHJhY2VfdmFyaWFibGUoJ3cnLHNlbGYuVmFyQ2hhbmdlZF9wYXJhV2lkdGgpCi0gICAgICAgIHNlbGYuc3RhcnR1cEVkaXQudHJhY2VfdmFyaWFibGUoJ3cnLHNlbGYuVmFyQ2hhbmdlZF9zdGFydHVwRWRpdCkKLSAgICAgICAgc2VsZi5hdXRvU2F2ZS50cmFjZV92YXJpYWJsZSgndycsc2VsZi5WYXJDaGFuZ2VkX2F1dG9TYXZlKQotICAgICAgICBzZWxmLmVuY29kaW5nLnRyYWNlX3ZhcmlhYmxlKCd3JyxzZWxmLlZhckNoYW5nZWRfZW5jb2RpbmcpCisgICAgICAgIHNlbGYuZm9udFNpemUudHJhY2VfdmFyaWFibGUoJ3cnLCBzZWxmLlZhckNoYW5nZWRfZm9udCkKKyAgICAgICAgc2VsZi5mb250TmFtZS50cmFjZV92YXJpYWJsZSgndycsIHNlbGYuVmFyQ2hhbmdlZF9mb250KQorICAgICAgICBzZWxmLmZvbnRCb2xkLnRyYWNlX3ZhcmlhYmxlKCd3Jywgc2VsZi5WYXJDaGFuZ2VkX2ZvbnQpCisgICAgICAgIHNlbGYuc3BhY2VOdW0udHJhY2VfdmFyaWFibGUoJ3cnLCBzZWxmLlZhckNoYW5nZWRfc3BhY2VOdW0pCisgICAgICAgIHNlbGYuY29sb3VyLnRyYWNlX3ZhcmlhYmxlKCd3Jywgc2VsZi5WYXJDaGFuZ2VkX2NvbG91cikKKyAgICAgICAgc2VsZi5idWlsdGluVGhlbWUudHJhY2VfdmFyaWFibGUoJ3cnLCBzZWxmLlZhckNoYW5nZWRfYnVpbHRpblRoZW1lKQorICAgICAgICBzZWxmLmN1c3RvbVRoZW1lLnRyYWNlX3ZhcmlhYmxlKCd3Jywgc2VsZi5WYXJDaGFuZ2VkX2N1c3RvbVRoZW1lKQorICAgICAgICBzZWxmLnRoZW1lSXNCdWlsdGluLnRyYWNlX3ZhcmlhYmxlKCd3Jywgc2VsZi5WYXJDaGFuZ2VkX3RoZW1lSXNCdWlsdGluKQorICAgICAgICBzZWxmLmhpZ2hsaWdodFRhcmdldC50cmFjZV92YXJpYWJsZSgndycsIHNlbGYuVmFyQ2hhbmdlZF9oaWdobGlnaHRUYXJnZXQpCisgICAgICAgIHNlbGYua2V5QmluZGluZy50cmFjZV92YXJpYWJsZSgndycsIHNlbGYuVmFyQ2hhbmdlZF9rZXlCaW5kaW5nKQorICAgICAgICBzZWxmLmJ1aWx0aW5LZXlzLnRyYWNlX3ZhcmlhYmxlKCd3Jywgc2VsZi5WYXJDaGFuZ2VkX2J1aWx0aW5LZXlzKQorICAgICAgICBzZWxmLmN1c3RvbUtleXMudHJhY2VfdmFyaWFibGUoJ3cnLCBzZWxmLlZhckNoYW5nZWRfY3VzdG9tS2V5cykKKyAgICAgICAgc2VsZi5rZXlzQXJlQnVpbHRpbi50cmFjZV92YXJpYWJsZSgndycsIHNlbGYuVmFyQ2hhbmdlZF9rZXlzQXJlQnVpbHRpbikKKyAgICAgICAgc2VsZi53aW5XaWR0aC50cmFjZV92YXJpYWJsZSgndycsIHNlbGYuVmFyQ2hhbmdlZF93aW5XaWR0aCkKKyAgICAgICAgc2VsZi53aW5IZWlnaHQudHJhY2VfdmFyaWFibGUoJ3cnLCBzZWxmLlZhckNoYW5nZWRfd2luSGVpZ2h0KQorICAgICAgICBzZWxmLnN0YXJ0dXBFZGl0LnRyYWNlX3ZhcmlhYmxlKCd3Jywgc2VsZi5WYXJDaGFuZ2VkX3N0YXJ0dXBFZGl0KQorICAgICAgICBzZWxmLmF1dG9TYXZlLnRyYWNlX3ZhcmlhYmxlKCd3Jywgc2VsZi5WYXJDaGFuZ2VkX2F1dG9TYXZlKQorICAgICAgICBzZWxmLmVuY29kaW5nLnRyYWNlX3ZhcmlhYmxlKCd3Jywgc2VsZi5WYXJDaGFuZ2VkX2VuY29kaW5nKQogCi0gICAgZGVmIFZhckNoYW5nZWRfZm9udFNpemUoc2VsZiwqcGFyYW1zKToKLSAgICAgICAgdmFsdWU9c2VsZi5mb250U2l6ZS5nZXQoKQotICAgICAgICBzZWxmLkFkZENoYW5nZWRJdGVtKCdtYWluJywnRWRpdG9yV2luZG93JywnZm9udC1zaXplJyx2YWx1ZSkKKyAgICBkZWYgVmFyQ2hhbmdlZF9mb250KHNlbGYsICpwYXJhbXMpOgorICAgICAgICAnJydXaGVuIG9uZSBmb250IGF0dHJpYnV0ZSBjaGFuZ2VzLCBzYXZlIHRoZW0gYWxsLCBhcyB0aGV5IGFyZQorICAgICAgICBub3QgaW5kZXBlbmRlbnQgZnJvbSBlYWNoIG90aGVyLiBJbiBwYXJ0aWN1bGFyLCB3aGVuIHdlIGFyZQorICAgICAgICBvdmVycmlkaW5nIHRoZSBkZWZhdWx0IGZvbnQsIHdlIG5lZWQgdG8gd3JpdGUgb3V0IGV2ZXJ5dGhpbmcuCisgICAgICAgICcnJworICAgICAgICB2YWx1ZSA9IHNlbGYuZm9udE5hbWUuZ2V0KCkKKyAgICAgICAgc2VsZi5BZGRDaGFuZ2VkSXRlbSgnbWFpbicsICdFZGl0b3JXaW5kb3cnLCAnZm9udCcsIHZhbHVlKQorICAgICAgICB2YWx1ZSA9IHNlbGYuZm9udFNpemUuZ2V0KCkKKyAgICAgICAgc2VsZi5BZGRDaGFuZ2VkSXRlbSgnbWFpbicsICdFZGl0b3JXaW5kb3cnLCAnZm9udC1zaXplJywgdmFsdWUpCisgICAgICAgIHZhbHVlID0gc2VsZi5mb250Qm9sZC5nZXQoKQorICAgICAgICBzZWxmLkFkZENoYW5nZWRJdGVtKCdtYWluJywgJ0VkaXRvcldpbmRvdycsICdmb250LWJvbGQnLCB2YWx1ZSkKIAotICAgIGRlZiBWYXJDaGFuZ2VkX2ZvbnROYW1lKHNlbGYsKnBhcmFtcyk6Ci0gICAgICAgIHZhbHVlPXNlbGYuZm9udE5hbWUuZ2V0KCkKLSAgICAgICAgc2VsZi5BZGRDaGFuZ2VkSXRlbSgnbWFpbicsJ0VkaXRvcldpbmRvdycsJ2ZvbnQnLHZhbHVlKQorICAgIGRlZiBWYXJDaGFuZ2VkX3NwYWNlTnVtKHNlbGYsICpwYXJhbXMpOgorICAgICAgICB2YWx1ZSA9IHNlbGYuc3BhY2VOdW0uZ2V0KCkKKyAgICAgICAgc2VsZi5BZGRDaGFuZ2VkSXRlbSgnbWFpbicsICdJbmRlbnQnLCAnbnVtLXNwYWNlcycsIHZhbHVlKQogCi0gICAgZGVmIFZhckNoYW5nZWRfZm9udEJvbGQoc2VsZiwqcGFyYW1zKToKLSAgICAgICAgdmFsdWU9c2VsZi5mb250Qm9sZC5nZXQoKQotICAgICAgICBzZWxmLkFkZENoYW5nZWRJdGVtKCdtYWluJywnRWRpdG9yV2luZG93JywnZm9udC1ib2xkJyx2YWx1ZSkKLQotICAgIGRlZiBWYXJDaGFuZ2VkX3NwYWNlTnVtKHNlbGYsKnBhcmFtcyk6Ci0gICAgICAgIHZhbHVlPXNlbGYuc3BhY2VOdW0uZ2V0KCkKLSAgICAgICAgc2VsZi5BZGRDaGFuZ2VkSXRlbSgnbWFpbicsJ0luZGVudCcsJ251bS1zcGFjZXMnLHZhbHVlKQotCi0gICAgZGVmIFZhckNoYW5nZWRfY29sb3VyKHNlbGYsKnBhcmFtcyk6CisgICAgZGVmIFZhckNoYW5nZWRfY29sb3VyKHNlbGYsICpwYXJhbXMpOgogICAgICAgICBzZWxmLk9uTmV3Q29sb3VyU2V0KCkKIAotICAgIGRlZiBWYXJDaGFuZ2VkX2J1aWx0aW5UaGVtZShzZWxmLCpwYXJhbXMpOgotICAgICAgICB2YWx1ZT1zZWxmLmJ1aWx0aW5UaGVtZS5nZXQoKQotICAgICAgICBzZWxmLkFkZENoYW5nZWRJdGVtKCdtYWluJywnVGhlbWUnLCduYW1lJyx2YWx1ZSkKKyAgICBkZWYgVmFyQ2hhbmdlZF9idWlsdGluVGhlbWUoc2VsZiwgKnBhcmFtcyk6CisgICAgICAgIHZhbHVlID0gc2VsZi5idWlsdGluVGhlbWUuZ2V0KCkKKyAgICAgICAgaWYgdmFsdWUgPT0gJ0lETEUgRGFyayc6CisgICAgICAgICAgICBpZiBpZGxlQ29uZi5HZXRPcHRpb24oJ21haW4nLCAnVGhlbWUnLCAnbmFtZScpICE9ICdJRExFIE5ldyc6CisgICAgICAgICAgICAgICAgc2VsZi5BZGRDaGFuZ2VkSXRlbSgnbWFpbicsICdUaGVtZScsICduYW1lJywgJ0lETEUgQ2xhc3NpYycpCisgICAgICAgICAgICBzZWxmLkFkZENoYW5nZWRJdGVtKCdtYWluJywgJ1RoZW1lJywgJ25hbWUyJywgdmFsdWUpCisgICAgICAgICAgICBzZWxmLm5ld19jdXN0b21fdGhlbWUuY29uZmlnKHRleHQ9J05ldyB0aGVtZSwgc2VlIEhlbHAnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZz0nIzUwMDAwMCcpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLkFkZENoYW5nZWRJdGVtKCdtYWluJywgJ1RoZW1lJywgJ25hbWUnLCB2YWx1ZSkKKyAgICAgICAgICAgIHNlbGYuQWRkQ2hhbmdlZEl0ZW0oJ21haW4nLCAnVGhlbWUnLCAnbmFtZTInLCAnJykKKyAgICAgICAgICAgIHNlbGYubmV3X2N1c3RvbV90aGVtZS5jb25maWcodGV4dD0nJywgZmc9J2JsYWNrJykKICAgICAgICAgc2VsZi5QYWludFRoZW1lU2FtcGxlKCkKIAotICAgIGRlZiBWYXJDaGFuZ2VkX2N1c3RvbVRoZW1lKHNlbGYsKnBhcmFtcyk6Ci0gICAgICAgIHZhbHVlPXNlbGYuY3VzdG9tVGhlbWUuZ2V0KCkKKyAgICBkZWYgVmFyQ2hhbmdlZF9jdXN0b21UaGVtZShzZWxmLCAqcGFyYW1zKToKKyAgICAgICAgdmFsdWUgPSBzZWxmLmN1c3RvbVRoZW1lLmdldCgpCiAgICAgICAgIGlmIHZhbHVlICE9ICctIG5vIGN1c3RvbSB0aGVtZXMgLSc6Ci0gICAgICAgICAgICBzZWxmLkFkZENoYW5nZWRJdGVtKCdtYWluJywnVGhlbWUnLCduYW1lJyx2YWx1ZSkKKyAgICAgICAgICAgIHNlbGYuQWRkQ2hhbmdlZEl0ZW0oJ21haW4nLCAnVGhlbWUnLCAnbmFtZScsIHZhbHVlKQogICAgICAgICAgICAgc2VsZi5QYWludFRoZW1lU2FtcGxlKCkKIAotICAgIGRlZiBWYXJDaGFuZ2VkX3RoZW1lSXNCdWlsdGluKHNlbGYsKnBhcmFtcyk6Ci0gICAgICAgIHZhbHVlPXNlbGYudGhlbWVJc0J1aWx0aW4uZ2V0KCkKLSAgICAgICAgc2VsZi5BZGRDaGFuZ2VkSXRlbSgnbWFpbicsJ1RoZW1lJywnZGVmYXVsdCcsdmFsdWUpCisgICAgZGVmIFZhckNoYW5nZWRfdGhlbWVJc0J1aWx0aW4oc2VsZiwgKnBhcmFtcyk6CisgICAgICAgIHZhbHVlID0gc2VsZi50aGVtZUlzQnVpbHRpbi5nZXQoKQorICAgICAgICBzZWxmLkFkZENoYW5nZWRJdGVtKCdtYWluJywgJ1RoZW1lJywgJ2RlZmF1bHQnLCB2YWx1ZSkKICAgICAgICAgaWYgdmFsdWU6CiAgICAgICAgICAgICBzZWxmLlZhckNoYW5nZWRfYnVpbHRpblRoZW1lKCkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuVmFyQ2hhbmdlZF9jdXN0b21UaGVtZSgpCiAKLSAgICBkZWYgVmFyQ2hhbmdlZF9oaWdobGlnaHRUYXJnZXQoc2VsZiwqcGFyYW1zKToKKyAgICBkZWYgVmFyQ2hhbmdlZF9oaWdobGlnaHRUYXJnZXQoc2VsZiwgKnBhcmFtcyk6CiAgICAgICAgIHNlbGYuU2V0SGlnaGxpZ2h0VGFyZ2V0KCkKIAotICAgIGRlZiBWYXJDaGFuZ2VkX2tleUJpbmRpbmcoc2VsZiwqcGFyYW1zKToKLSAgICAgICAgdmFsdWU9c2VsZi5rZXlCaW5kaW5nLmdldCgpCi0gICAgICAgIGtleVNldD1zZWxmLmN1c3RvbUtleXMuZ2V0KCkKLSAgICAgICAgZXZlbnQ9c2VsZi5saXN0QmluZGluZ3MuZ2V0KEFOQ0hPUikuc3BsaXQoKVswXQorICAgIGRlZiBWYXJDaGFuZ2VkX2tleUJpbmRpbmcoc2VsZiwgKnBhcmFtcyk6CisgICAgICAgIHZhbHVlID0gc2VsZi5rZXlCaW5kaW5nLmdldCgpCisgICAgICAgIGtleVNldCA9IHNlbGYuY3VzdG9tS2V5cy5nZXQoKQorICAgICAgICBldmVudCA9IHNlbGYubGlzdEJpbmRpbmdzLmdldChBTkNIT1IpLnNwbGl0KClbMF0KICAgICAgICAgaWYgaWRsZUNvbmYuSXNDb3JlQmluZGluZyhldmVudCk6CiAgICAgICAgICAgICAjdGhpcyBpcyBhIGNvcmUga2V5YmluZGluZwotICAgICAgICAgICAgc2VsZi5BZGRDaGFuZ2VkSXRlbSgna2V5cycsa2V5U2V0LGV2ZW50LHZhbHVlKQorICAgICAgICAgICAgc2VsZi5BZGRDaGFuZ2VkSXRlbSgna2V5cycsIGtleVNldCwgZXZlbnQsIHZhbHVlKQogICAgICAgICBlbHNlOiAjdGhpcyBpcyBhbiBleHRlbnNpb24ga2V5IGJpbmRpbmcKLSAgICAgICAgICAgIGV4dE5hbWU9aWRsZUNvbmYuR2V0RXh0bk5hbWVGb3JFdmVudChldmVudCkKLSAgICAgICAgICAgIGV4dEtleWJpbmRTZWN0aW9uPWV4dE5hbWUrJ19jZmdCaW5kaW5ncycKLSAgICAgICAgICAgIHNlbGYuQWRkQ2hhbmdlZEl0ZW0oJ2V4dGVuc2lvbnMnLGV4dEtleWJpbmRTZWN0aW9uLGV2ZW50LHZhbHVlKQorICAgICAgICAgICAgZXh0TmFtZSA9IGlkbGVDb25mLkdldEV4dG5OYW1lRm9yRXZlbnQoZXZlbnQpCisgICAgICAgICAgICBleHRLZXliaW5kU2VjdGlvbiA9IGV4dE5hbWUgKyAnX2NmZ0JpbmRpbmdzJworICAgICAgICAgICAgc2VsZi5BZGRDaGFuZ2VkSXRlbSgnZXh0ZW5zaW9ucycsIGV4dEtleWJpbmRTZWN0aW9uLCBldmVudCwgdmFsdWUpCiAKLSAgICBkZWYgVmFyQ2hhbmdlZF9idWlsdGluS2V5cyhzZWxmLCpwYXJhbXMpOgotICAgICAgICB2YWx1ZT1zZWxmLmJ1aWx0aW5LZXlzLmdldCgpCi0gICAgICAgIHNlbGYuQWRkQ2hhbmdlZEl0ZW0oJ21haW4nLCdLZXlzJywnbmFtZScsdmFsdWUpCisgICAgZGVmIFZhckNoYW5nZWRfYnVpbHRpbktleXMoc2VsZiwgKnBhcmFtcyk6CisgICAgICAgIHZhbHVlID0gc2VsZi5idWlsdGluS2V5cy5nZXQoKQorICAgICAgICBzZWxmLkFkZENoYW5nZWRJdGVtKCdtYWluJywgJ0tleXMnLCAnbmFtZScsIHZhbHVlKQogICAgICAgICBzZWxmLkxvYWRLZXlzTGlzdCh2YWx1ZSkKIAotICAgIGRlZiBWYXJDaGFuZ2VkX2N1c3RvbUtleXMoc2VsZiwqcGFyYW1zKToKLSAgICAgICAgdmFsdWU9c2VsZi5jdXN0b21LZXlzLmdldCgpCisgICAgZGVmIFZhckNoYW5nZWRfY3VzdG9tS2V5cyhzZWxmLCAqcGFyYW1zKToKKyAgICAgICAgdmFsdWUgPSBzZWxmLmN1c3RvbUtleXMuZ2V0KCkKICAgICAgICAgaWYgdmFsdWUgIT0gJy0gbm8gY3VzdG9tIGtleXMgLSc6Ci0gICAgICAgICAgICBzZWxmLkFkZENoYW5nZWRJdGVtKCdtYWluJywnS2V5cycsJ25hbWUnLHZhbHVlKQorICAgICAgICAgICAgc2VsZi5BZGRDaGFuZ2VkSXRlbSgnbWFpbicsICdLZXlzJywgJ25hbWUnLCB2YWx1ZSkKICAgICAgICAgICAgIHNlbGYuTG9hZEtleXNMaXN0KHZhbHVlKQogCi0gICAgZGVmIFZhckNoYW5nZWRfa2V5c0FyZUJ1aWx0aW4oc2VsZiwqcGFyYW1zKToKLSAgICAgICAgdmFsdWU9c2VsZi5rZXlzQXJlQnVpbHRpbi5nZXQoKQotICAgICAgICBzZWxmLkFkZENoYW5nZWRJdGVtKCdtYWluJywnS2V5cycsJ2RlZmF1bHQnLHZhbHVlKQorICAgIGRlZiBWYXJDaGFuZ2VkX2tleXNBcmVCdWlsdGluKHNlbGYsICpwYXJhbXMpOgorICAgICAgICB2YWx1ZSA9IHNlbGYua2V5c0FyZUJ1aWx0aW4uZ2V0KCkKKyAgICAgICAgc2VsZi5BZGRDaGFuZ2VkSXRlbSgnbWFpbicsICdLZXlzJywgJ2RlZmF1bHQnLCB2YWx1ZSkKICAgICAgICAgaWYgdmFsdWU6CiAgICAgICAgICAgICBzZWxmLlZhckNoYW5nZWRfYnVpbHRpbktleXMoKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5WYXJDaGFuZ2VkX2N1c3RvbUtleXMoKQogCi0gICAgZGVmIFZhckNoYW5nZWRfd2luV2lkdGgoc2VsZiwqcGFyYW1zKToKLSAgICAgICAgdmFsdWU9c2VsZi53aW5XaWR0aC5nZXQoKQotICAgICAgICBzZWxmLkFkZENoYW5nZWRJdGVtKCdtYWluJywnRWRpdG9yV2luZG93Jywnd2lkdGgnLHZhbHVlKQorICAgIGRlZiBWYXJDaGFuZ2VkX3dpbldpZHRoKHNlbGYsICpwYXJhbXMpOgorICAgICAgICB2YWx1ZSA9IHNlbGYud2luV2lkdGguZ2V0KCkKKyAgICAgICAgc2VsZi5BZGRDaGFuZ2VkSXRlbSgnbWFpbicsICdFZGl0b3JXaW5kb3cnLCAnd2lkdGgnLCB2YWx1ZSkKIAotICAgIGRlZiBWYXJDaGFuZ2VkX3dpbkhlaWdodChzZWxmLCpwYXJhbXMpOgotICAgICAgICB2YWx1ZT1zZWxmLndpbkhlaWdodC5nZXQoKQotICAgICAgICBzZWxmLkFkZENoYW5nZWRJdGVtKCdtYWluJywnRWRpdG9yV2luZG93JywnaGVpZ2h0Jyx2YWx1ZSkKKyAgICBkZWYgVmFyQ2hhbmdlZF93aW5IZWlnaHQoc2VsZiwgKnBhcmFtcyk6CisgICAgICAgIHZhbHVlID0gc2VsZi53aW5IZWlnaHQuZ2V0KCkKKyAgICAgICAgc2VsZi5BZGRDaGFuZ2VkSXRlbSgnbWFpbicsICdFZGl0b3JXaW5kb3cnLCAnaGVpZ2h0JywgdmFsdWUpCiAKLSAgICBkZWYgVmFyQ2hhbmdlZF9wYXJhV2lkdGgoc2VsZiwqcGFyYW1zKToKLSAgICAgICAgdmFsdWU9c2VsZi5wYXJhV2lkdGguZ2V0KCkKLSAgICAgICAgc2VsZi5BZGRDaGFuZ2VkSXRlbSgnbWFpbicsJ0Zvcm1hdFBhcmFncmFwaCcsJ3BhcmFncmFwaCcsdmFsdWUpCisgICAgZGVmIFZhckNoYW5nZWRfc3RhcnR1cEVkaXQoc2VsZiwgKnBhcmFtcyk6CisgICAgICAgIHZhbHVlID0gc2VsZi5zdGFydHVwRWRpdC5nZXQoKQorICAgICAgICBzZWxmLkFkZENoYW5nZWRJdGVtKCdtYWluJywgJ0dlbmVyYWwnLCAnZWRpdG9yLW9uLXN0YXJ0dXAnLCB2YWx1ZSkKIAotICAgIGRlZiBWYXJDaGFuZ2VkX3N0YXJ0dXBFZGl0KHNlbGYsKnBhcmFtcyk6Ci0gICAgICAgIHZhbHVlPXNlbGYuc3RhcnR1cEVkaXQuZ2V0KCkKLSAgICAgICAgc2VsZi5BZGRDaGFuZ2VkSXRlbSgnbWFpbicsJ0dlbmVyYWwnLCdlZGl0b3Itb24tc3RhcnR1cCcsdmFsdWUpCisgICAgZGVmIFZhckNoYW5nZWRfYXV0b1NhdmUoc2VsZiwgKnBhcmFtcyk6CisgICAgICAgIHZhbHVlID0gc2VsZi5hdXRvU2F2ZS5nZXQoKQorICAgICAgICBzZWxmLkFkZENoYW5nZWRJdGVtKCdtYWluJywgJ0dlbmVyYWwnLCAnYXV0b3NhdmUnLCB2YWx1ZSkKIAotICAgIGRlZiBWYXJDaGFuZ2VkX2F1dG9TYXZlKHNlbGYsKnBhcmFtcyk6Ci0gICAgICAgIHZhbHVlPXNlbGYuYXV0b1NhdmUuZ2V0KCkKLSAgICAgICAgc2VsZi5BZGRDaGFuZ2VkSXRlbSgnbWFpbicsJ0dlbmVyYWwnLCdhdXRvc2F2ZScsdmFsdWUpCi0KLSAgICBkZWYgVmFyQ2hhbmdlZF9lbmNvZGluZyhzZWxmLCpwYXJhbXMpOgotICAgICAgICB2YWx1ZT1zZWxmLmVuY29kaW5nLmdldCgpCi0gICAgICAgIHNlbGYuQWRkQ2hhbmdlZEl0ZW0oJ21haW4nLCdFZGl0b3JXaW5kb3cnLCdlbmNvZGluZycsdmFsdWUpCisgICAgZGVmIFZhckNoYW5nZWRfZW5jb2Rpbmcoc2VsZiwgKnBhcmFtcyk6CisgICAgICAgIHZhbHVlID0gc2VsZi5lbmNvZGluZy5nZXQoKQorICAgICAgICBzZWxmLkFkZENoYW5nZWRJdGVtKCdtYWluJywgJ0VkaXRvcldpbmRvdycsICdlbmNvZGluZycsIHZhbHVlKQogCiAgICAgZGVmIFJlc2V0Q2hhbmdlZEl0ZW1zKHNlbGYpOgogICAgICAgICAjV2hlbiBhbnkgY29uZmlnIGl0ZW0gaXMgY2hhbmdlZCBpbiB0aGlzIGRpYWxvZywgYW4gZW50cnkKQEAgLTU0OCwyNCArNTkwLDI1IEBACiAgICAgICAgICNkaWN0aW9uYXJ5LiBUaGUga2V5IHNob3VsZCBiZSB0aGUgY29uZmlnIGZpbGUgc2VjdGlvbiBuYW1lIGFuZCB0aGUKICAgICAgICAgI3ZhbHVlIGEgZGljdGlvbmFyeSwgd2hvc2Uga2V5OnZhbHVlIHBhaXJzIGFyZSBpdGVtPXZhbHVlIHBhaXJzIGZvcgogICAgICAgICAjdGhhdCBjb25maWcgZmlsZSBzZWN0aW9uLgotICAgICAgICBzZWxmLmNoYW5nZWRJdGVtcz17J21haW4nOnt9LCdoaWdobGlnaHQnOnt9LCdrZXlzJzp7fSwnZXh0ZW5zaW9ucyc6e319CisgICAgICAgIHNlbGYuY2hhbmdlZEl0ZW1zID0geydtYWluJzp7fSwgJ2hpZ2hsaWdodCc6e30sICdrZXlzJzp7fSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4dGVuc2lvbnMnOnt9fQogCi0gICAgZGVmIEFkZENoYW5nZWRJdGVtKHNlbGYsdHlwZSxzZWN0aW9uLGl0ZW0sdmFsdWUpOgotICAgICAgICB2YWx1ZT1zdHIodmFsdWUpICNtYWtlIHN1cmUgd2UgdXNlIGEgc3RyaW5nCi0gICAgICAgIGlmIHNlY3Rpb24gbm90IGluIHNlbGYuY2hhbmdlZEl0ZW1zW3R5cGVdOgotICAgICAgICAgICAgc2VsZi5jaGFuZ2VkSXRlbXNbdHlwZV1bc2VjdGlvbl09e30KLSAgICAgICAgc2VsZi5jaGFuZ2VkSXRlbXNbdHlwZV1bc2VjdGlvbl1baXRlbV09dmFsdWUKKyAgICBkZWYgQWRkQ2hhbmdlZEl0ZW0oc2VsZiwgdHlwLCBzZWN0aW9uLCBpdGVtLCB2YWx1ZSk6CisgICAgICAgIHZhbHVlID0gc3RyKHZhbHVlKSAjbWFrZSBzdXJlIHdlIHVzZSBhIHN0cmluZworICAgICAgICBpZiBzZWN0aW9uIG5vdCBpbiBzZWxmLmNoYW5nZWRJdGVtc1t0eXBdOgorICAgICAgICAgICAgc2VsZi5jaGFuZ2VkSXRlbXNbdHlwXVtzZWN0aW9uXSA9IHt9CisgICAgICAgIHNlbGYuY2hhbmdlZEl0ZW1zW3R5cF1bc2VjdGlvbl1baXRlbV0gPSB2YWx1ZQogCiAgICAgZGVmIEdldERlZmF1bHRJdGVtcyhzZWxmKToKLSAgICAgICAgZEl0ZW1zPXsnbWFpbic6e30sJ2hpZ2hsaWdodCc6e30sJ2tleXMnOnt9LCdleHRlbnNpb25zJzp7fX0KKyAgICAgICAgZEl0ZW1zPXsnbWFpbic6e30sICdoaWdobGlnaHQnOnt9LCAna2V5cyc6e30sICdleHRlbnNpb25zJzp7fX0KICAgICAgICAgZm9yIGNvbmZpZ1R5cGUgaW4gZEl0ZW1zOgotICAgICAgICAgICAgc2VjdGlvbnM9aWRsZUNvbmYuR2V0U2VjdGlvbkxpc3QoJ2RlZmF1bHQnLGNvbmZpZ1R5cGUpCisgICAgICAgICAgICBzZWN0aW9ucyA9IGlkbGVDb25mLkdldFNlY3Rpb25MaXN0KCdkZWZhdWx0JywgY29uZmlnVHlwZSkKICAgICAgICAgICAgIGZvciBzZWN0aW9uIGluIHNlY3Rpb25zOgotICAgICAgICAgICAgICAgIGRJdGVtc1tjb25maWdUeXBlXVtzZWN0aW9uXT17fQotICAgICAgICAgICAgICAgIG9wdGlvbnM9aWRsZUNvbmYuZGVmYXVsdENmZ1tjb25maWdUeXBlXS5HZXRPcHRpb25MaXN0KHNlY3Rpb24pCisgICAgICAgICAgICAgICAgZEl0ZW1zW2NvbmZpZ1R5cGVdW3NlY3Rpb25dID0ge30KKyAgICAgICAgICAgICAgICBvcHRpb25zID0gaWRsZUNvbmYuZGVmYXVsdENmZ1tjb25maWdUeXBlXS5HZXRPcHRpb25MaXN0KHNlY3Rpb24pCiAgICAgICAgICAgICAgICAgZm9yIG9wdGlvbiBpbiBvcHRpb25zOgotICAgICAgICAgICAgICAgICAgICBkSXRlbXNbY29uZmlnVHlwZV1bc2VjdGlvbl1bb3B0aW9uXT0oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRsZUNvbmYuZGVmYXVsdENmZ1tjb25maWdUeXBlXS5HZXQoc2VjdGlvbixvcHRpb24pKQorICAgICAgICAgICAgICAgICAgICBkSXRlbXNbY29uZmlnVHlwZV1bc2VjdGlvbl1bb3B0aW9uXSA9ICgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZGxlQ29uZi5kZWZhdWx0Q2ZnW2NvbmZpZ1R5cGVdLkdldChzZWN0aW9uLCBvcHRpb24pKQogICAgICAgICByZXR1cm4gZEl0ZW1zCiAKICAgICBkZWYgU2V0VGhlbWVUeXBlKHNlbGYpOgpAQCAtNTkxLDI2ICs2MzQsMjYgQEAKICAgICAgICAgICAgIHNlbGYuYnV0dG9uRGVsZXRlQ3VzdG9tS2V5cy5jb25maWcoc3RhdGU9Tk9STUFMKQogCiAgICAgZGVmIEdldE5ld0tleXMoc2VsZik6Ci0gICAgICAgIGxpc3RJbmRleD1zZWxmLmxpc3RCaW5kaW5ncy5pbmRleChBTkNIT1IpCi0gICAgICAgIGJpbmRpbmc9c2VsZi5saXN0QmluZGluZ3MuZ2V0KGxpc3RJbmRleCkKLSAgICAgICAgYmluZE5hbWU9YmluZGluZy5zcGxpdCgpWzBdICNmaXJzdCBwYXJ0LCB1cCB0byBmaXJzdCBzcGFjZQorICAgICAgICBsaXN0SW5kZXggPSBzZWxmLmxpc3RCaW5kaW5ncy5pbmRleChBTkNIT1IpCisgICAgICAgIGJpbmRpbmcgPSBzZWxmLmxpc3RCaW5kaW5ncy5nZXQobGlzdEluZGV4KQorICAgICAgICBiaW5kTmFtZSA9IGJpbmRpbmcuc3BsaXQoKVswXSAjZmlyc3QgcGFydCwgdXAgdG8gZmlyc3Qgc3BhY2UKICAgICAgICAgaWYgc2VsZi5rZXlzQXJlQnVpbHRpbi5nZXQoKToKLSAgICAgICAgICAgIGN1cnJlbnRLZXlTZXROYW1lPXNlbGYuYnVpbHRpbktleXMuZ2V0KCkKKyAgICAgICAgICAgIGN1cnJlbnRLZXlTZXROYW1lID0gc2VsZi5idWlsdGluS2V5cy5nZXQoKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgY3VycmVudEtleVNldE5hbWU9c2VsZi5jdXN0b21LZXlzLmdldCgpCi0gICAgICAgIGN1cnJlbnRCaW5kaW5ncz1pZGxlQ29uZi5HZXRDdXJyZW50S2V5U2V0KCkKKyAgICAgICAgICAgIGN1cnJlbnRLZXlTZXROYW1lID0gc2VsZi5jdXN0b21LZXlzLmdldCgpCisgICAgICAgIGN1cnJlbnRCaW5kaW5ncyA9IGlkbGVDb25mLkdldEN1cnJlbnRLZXlTZXQoKQogICAgICAgICBpZiBjdXJyZW50S2V5U2V0TmFtZSBpbiBzZWxmLmNoYW5nZWRJdGVtc1sna2V5cyddOiAjdW5zYXZlZCBjaGFuZ2VzCi0gICAgICAgICAgICBrZXlTZXRDaGFuZ2VzPXNlbGYuY2hhbmdlZEl0ZW1zWydrZXlzJ11bY3VycmVudEtleVNldE5hbWVdCisgICAgICAgICAgICBrZXlTZXRDaGFuZ2VzID0gc2VsZi5jaGFuZ2VkSXRlbXNbJ2tleXMnXVtjdXJyZW50S2V5U2V0TmFtZV0KICAgICAgICAgICAgIGZvciBldmVudCBpbiBrZXlTZXRDaGFuZ2VzOgotICAgICAgICAgICAgICAgIGN1cnJlbnRCaW5kaW5nc1tldmVudF09a2V5U2V0Q2hhbmdlc1tldmVudF0uc3BsaXQoKQorICAgICAgICAgICAgICAgIGN1cnJlbnRCaW5kaW5nc1tldmVudF0gPSBrZXlTZXRDaGFuZ2VzW2V2ZW50XS5zcGxpdCgpCiAgICAgICAgIGN1cnJlbnRLZXlTZXF1ZW5jZXMgPSBsaXN0KGN1cnJlbnRCaW5kaW5ncy52YWx1ZXMoKSkKLSAgICAgICAgbmV3S2V5cz1HZXRLZXlzRGlhbG9nKHNlbGYsJ0dldCBOZXcgS2V5cycsYmluZE5hbWUsCisgICAgICAgIG5ld0tleXMgPSBHZXRLZXlzRGlhbG9nKHNlbGYsICdHZXQgTmV3IEtleXMnLCBiaW5kTmFtZSwKICAgICAgICAgICAgICAgICBjdXJyZW50S2V5U2VxdWVuY2VzKS5yZXN1bHQKICAgICAgICAgaWYgbmV3S2V5czogI25ldyBrZXlzIHdlcmUgc3BlY2lmaWVkCiAgICAgICAgICAgICBpZiBzZWxmLmtleXNBcmVCdWlsdGluLmdldCgpOiAjY3VycmVudCBrZXkgc2V0IGlzIGEgYnVpbHQtaW4KLSAgICAgICAgICAgICAgICBtZXNzYWdlPSgnWW91ciBjaGFuZ2VzIHdpbGwgYmUgc2F2ZWQgYXMgYSBuZXcgQ3VzdG9tIEtleSBTZXQuICcrCi0gICAgICAgICAgICAgICAgICAgICAgICAnRW50ZXIgYSBuYW1lIGZvciB5b3VyIG5ldyBDdXN0b20gS2V5IFNldCBiZWxvdy4nKQotICAgICAgICAgICAgICAgIG5ld0tleVNldD1zZWxmLkdldE5ld0tleXNOYW1lKG1lc3NhZ2UpCisgICAgICAgICAgICAgICAgbWVzc2FnZSA9ICgnWW91ciBjaGFuZ2VzIHdpbGwgYmUgc2F2ZWQgYXMgYSBuZXcgQ3VzdG9tIEtleSBTZXQuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgJyBFbnRlciBhIG5hbWUgZm9yIHlvdXIgbmV3IEN1c3RvbSBLZXkgU2V0IGJlbG93LicpCisgICAgICAgICAgICAgICAgbmV3S2V5U2V0ID0gc2VsZi5HZXROZXdLZXlzTmFtZShtZXNzYWdlKQogICAgICAgICAgICAgICAgIGlmIG5vdCBuZXdLZXlTZXQ6ICN1c2VyIGNhbmNlbGxlZCBjdXN0b20ga2V5IHNldCBjcmVhdGlvbgogICAgICAgICAgICAgICAgICAgICBzZWxmLmxpc3RCaW5kaW5ncy5zZWxlY3Rfc2V0KGxpc3RJbmRleCkKICAgICAgICAgICAgICAgICAgICAgc2VsZi5saXN0QmluZGluZ3Muc2VsZWN0X2FuY2hvcihsaXN0SW5kZXgpCkBAIC02MTgsNyArNjYxLDcgQEAKICAgICAgICAgICAgICAgICBlbHNlOiAjY3JlYXRlIG5ldyBjdXN0b20ga2V5IHNldCBiYXNlZCBvbiBwcmV2aW91c2x5IGFjdGl2ZSBrZXkgc2V0CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuQ3JlYXRlTmV3S2V5U2V0KG5ld0tleVNldCkKICAgICAgICAgICAgIHNlbGYubGlzdEJpbmRpbmdzLmRlbGV0ZShsaXN0SW5kZXgpCi0gICAgICAgICAgICBzZWxmLmxpc3RCaW5kaW5ncy5pbnNlcnQobGlzdEluZGV4LGJpbmROYW1lKycgLSAnK25ld0tleXMpCisgICAgICAgICAgICBzZWxmLmxpc3RCaW5kaW5ncy5pbnNlcnQobGlzdEluZGV4LCBiaW5kTmFtZSsnIC0gJytuZXdLZXlzKQogICAgICAgICAgICAgc2VsZi5saXN0QmluZGluZ3Muc2VsZWN0X3NldChsaXN0SW5kZXgpCiAgICAgICAgICAgICBzZWxmLmxpc3RCaW5kaW5ncy5zZWxlY3RfYW5jaG9yKGxpc3RJbmRleCkKICAgICAgICAgICAgIHNlbGYua2V5QmluZGluZy5zZXQobmV3S2V5cykKQEAgLTYyNiw2NSArNjY5LDY1IEBACiAgICAgICAgICAgICBzZWxmLmxpc3RCaW5kaW5ncy5zZWxlY3Rfc2V0KGxpc3RJbmRleCkKICAgICAgICAgICAgIHNlbGYubGlzdEJpbmRpbmdzLnNlbGVjdF9hbmNob3IobGlzdEluZGV4KQogCi0gICAgZGVmIEdldE5ld0tleXNOYW1lKHNlbGYsbWVzc2FnZSk6Ci0gICAgICAgIHVzZWROYW1lcz0oaWRsZUNvbmYuR2V0U2VjdGlvbkxpc3QoJ3VzZXInLCdrZXlzJykrCi0gICAgICAgICAgICAgICAgaWRsZUNvbmYuR2V0U2VjdGlvbkxpc3QoJ2RlZmF1bHQnLCdrZXlzJykpCi0gICAgICAgIG5ld0tleVNldD1HZXRDZmdTZWN0aW9uTmFtZURpYWxvZyhzZWxmLCdOZXcgQ3VzdG9tIEtleSBTZXQnLAotICAgICAgICAgICAgICAgIG1lc3NhZ2UsdXNlZE5hbWVzKS5yZXN1bHQKKyAgICBkZWYgR2V0TmV3S2V5c05hbWUoc2VsZiwgbWVzc2FnZSk6CisgICAgICAgIHVzZWROYW1lcyA9IChpZGxlQ29uZi5HZXRTZWN0aW9uTGlzdCgndXNlcicsICdrZXlzJykgKworICAgICAgICAgICAgICAgIGlkbGVDb25mLkdldFNlY3Rpb25MaXN0KCdkZWZhdWx0JywgJ2tleXMnKSkKKyAgICAgICAgbmV3S2V5U2V0ID0gR2V0Q2ZnU2VjdGlvbk5hbWVEaWFsb2coCisgICAgICAgICAgICAgICAgc2VsZiwgJ05ldyBDdXN0b20gS2V5IFNldCcsIG1lc3NhZ2UsIHVzZWROYW1lcykucmVzdWx0CiAgICAgICAgIHJldHVybiBuZXdLZXlTZXQKIAogICAgIGRlZiBTYXZlQXNOZXdLZXlTZXQoc2VsZik6Ci0gICAgICAgIG5ld0tleXNOYW1lPXNlbGYuR2V0TmV3S2V5c05hbWUoJ05ldyBLZXkgU2V0IE5hbWU6JykKKyAgICAgICAgbmV3S2V5c05hbWUgPSBzZWxmLkdldE5ld0tleXNOYW1lKCdOZXcgS2V5IFNldCBOYW1lOicpCiAgICAgICAgIGlmIG5ld0tleXNOYW1lOgogICAgICAgICAgICAgc2VsZi5DcmVhdGVOZXdLZXlTZXQobmV3S2V5c05hbWUpCiAKLSAgICBkZWYgS2V5QmluZGluZ1NlbGVjdGVkKHNlbGYsZXZlbnQpOgorICAgIGRlZiBLZXlCaW5kaW5nU2VsZWN0ZWQoc2VsZiwgZXZlbnQpOgogICAgICAgICBzZWxmLmJ1dHRvbk5ld0tleXMuY29uZmlnKHN0YXRlPU5PUk1BTCkKIAotICAgIGRlZiBDcmVhdGVOZXdLZXlTZXQoc2VsZixuZXdLZXlTZXROYW1lKToKKyAgICBkZWYgQ3JlYXRlTmV3S2V5U2V0KHNlbGYsIG5ld0tleVNldE5hbWUpOgogICAgICAgICAjY3JlYXRlcyBuZXcgY3VzdG9tIGtleSBzZXQgYmFzZWQgb24gdGhlIHByZXZpb3VzbHkgYWN0aXZlIGtleSBzZXQsCiAgICAgICAgICNhbmQgbWFrZXMgdGhlIG5ldyBrZXkgc2V0IGFjdGl2ZQogICAgICAgICBpZiBzZWxmLmtleXNBcmVCdWlsdGluLmdldCgpOgotICAgICAgICAgICAgcHJldktleVNldE5hbWU9c2VsZi5idWlsdGluS2V5cy5nZXQoKQorICAgICAgICAgICAgcHJldktleVNldE5hbWUgPSBzZWxmLmJ1aWx0aW5LZXlzLmdldCgpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBwcmV2S2V5U2V0TmFtZT1zZWxmLmN1c3RvbUtleXMuZ2V0KCkKLSAgICAgICAgcHJldktleXM9aWRsZUNvbmYuR2V0Q29yZUtleXMocHJldktleVNldE5hbWUpCi0gICAgICAgIG5ld0tleXM9e30KKyAgICAgICAgICAgIHByZXZLZXlTZXROYW1lID0gc2VsZi5jdXN0b21LZXlzLmdldCgpCisgICAgICAgIHByZXZLZXlzID0gaWRsZUNvbmYuR2V0Q29yZUtleXMocHJldktleVNldE5hbWUpCisgICAgICAgIG5ld0tleXMgPSB7fQogICAgICAgICBmb3IgZXZlbnQgaW4gcHJldktleXM6ICNhZGQga2V5IHNldCB0byBjaGFuZ2VkIGl0ZW1zCi0gICAgICAgICAgICBldmVudE5hbWU9ZXZlbnRbMjotMl0gI3RyaW0gb2ZmIHRoZSBhbmdsZSBicmFja2V0cwotICAgICAgICAgICAgYmluZGluZz0nICcuam9pbihwcmV2S2V5c1tldmVudF0pCi0gICAgICAgICAgICBuZXdLZXlzW2V2ZW50TmFtZV09YmluZGluZworICAgICAgICAgICAgZXZlbnROYW1lID0gZXZlbnRbMjotMl0gI3RyaW0gb2ZmIHRoZSBhbmdsZSBicmFja2V0cworICAgICAgICAgICAgYmluZGluZyA9ICcgJy5qb2luKHByZXZLZXlzW2V2ZW50XSkKKyAgICAgICAgICAgIG5ld0tleXNbZXZlbnROYW1lXSA9IGJpbmRpbmcKICAgICAgICAgI2hhbmRsZSBhbnkgdW5zYXZlZCBjaGFuZ2VzIHRvIHByZXYga2V5IHNldAogICAgICAgICBpZiBwcmV2S2V5U2V0TmFtZSBpbiBzZWxmLmNoYW5nZWRJdGVtc1sna2V5cyddOgotICAgICAgICAgICAga2V5U2V0Q2hhbmdlcz1zZWxmLmNoYW5nZWRJdGVtc1sna2V5cyddW3ByZXZLZXlTZXROYW1lXQorICAgICAgICAgICAga2V5U2V0Q2hhbmdlcyA9IHNlbGYuY2hhbmdlZEl0ZW1zWydrZXlzJ11bcHJldktleVNldE5hbWVdCiAgICAgICAgICAgICBmb3IgZXZlbnQgaW4ga2V5U2V0Q2hhbmdlczoKLSAgICAgICAgICAgICAgICBuZXdLZXlzW2V2ZW50XT1rZXlTZXRDaGFuZ2VzW2V2ZW50XQorICAgICAgICAgICAgICAgIG5ld0tleXNbZXZlbnRdID0ga2V5U2V0Q2hhbmdlc1tldmVudF0KICAgICAgICAgI3NhdmUgdGhlIG5ldyB0aGVtZQotICAgICAgICBzZWxmLlNhdmVOZXdLZXlTZXQobmV3S2V5U2V0TmFtZSxuZXdLZXlzKQorICAgICAgICBzZWxmLlNhdmVOZXdLZXlTZXQobmV3S2V5U2V0TmFtZSwgbmV3S2V5cykKICAgICAgICAgI2NoYW5nZSBndWkgb3ZlciB0byB0aGUgbmV3IGtleSBzZXQKLSAgICAgICAgY3VzdG9tS2V5TGlzdD1pZGxlQ29uZi5HZXRTZWN0aW9uTGlzdCgndXNlcicsJ2tleXMnKQorICAgICAgICBjdXN0b21LZXlMaXN0ID0gaWRsZUNvbmYuR2V0U2VjdGlvbkxpc3QoJ3VzZXInLCAna2V5cycpCiAgICAgICAgIGN1c3RvbUtleUxpc3Quc29ydCgpCi0gICAgICAgIHNlbGYub3B0TWVudUtleXNDdXN0b20uU2V0TWVudShjdXN0b21LZXlMaXN0LG5ld0tleVNldE5hbWUpCisgICAgICAgIHNlbGYub3B0TWVudUtleXNDdXN0b20uU2V0TWVudShjdXN0b21LZXlMaXN0LCBuZXdLZXlTZXROYW1lKQogICAgICAgICBzZWxmLmtleXNBcmVCdWlsdGluLnNldCgwKQogICAgICAgICBzZWxmLlNldEtleXNUeXBlKCkKIAotICAgIGRlZiBMb2FkS2V5c0xpc3Qoc2VsZixrZXlTZXROYW1lKToKLSAgICAgICAgcmVzZWxlY3Q9MAotICAgICAgICBuZXdLZXlTZXQ9MAorICAgIGRlZiBMb2FkS2V5c0xpc3Qoc2VsZiwga2V5U2V0TmFtZSk6CisgICAgICAgIHJlc2VsZWN0ID0gMAorICAgICAgICBuZXdLZXlTZXQgPSAwCiAgICAgICAgIGlmIHNlbGYubGlzdEJpbmRpbmdzLmN1cnNlbGVjdGlvbigpOgotICAgICAgICAgICAgcmVzZWxlY3Q9MQotICAgICAgICAgICAgbGlzdEluZGV4PXNlbGYubGlzdEJpbmRpbmdzLmluZGV4KEFOQ0hPUikKLSAgICAgICAga2V5U2V0PWlkbGVDb25mLkdldEtleVNldChrZXlTZXROYW1lKQorICAgICAgICAgICAgcmVzZWxlY3QgPSAxCisgICAgICAgICAgICBsaXN0SW5kZXggPSBzZWxmLmxpc3RCaW5kaW5ncy5pbmRleChBTkNIT1IpCisgICAgICAgIGtleVNldCA9IGlkbGVDb25mLkdldEtleVNldChrZXlTZXROYW1lKQogICAgICAgICBiaW5kTmFtZXMgPSBsaXN0KGtleVNldC5rZXlzKCkpCiAgICAgICAgIGJpbmROYW1lcy5zb3J0KCkKLSAgICAgICAgc2VsZi5saXN0QmluZGluZ3MuZGVsZXRlKDAsRU5EKQorICAgICAgICBzZWxmLmxpc3RCaW5kaW5ncy5kZWxldGUoMCwgRU5EKQogICAgICAgICBmb3IgYmluZE5hbWUgaW4gYmluZE5hbWVzOgotICAgICAgICAgICAga2V5PScgJy5qb2luKGtleVNldFtiaW5kTmFtZV0pICNtYWtlIGtleShzKSBpbnRvIGEgc3RyaW5nCi0gICAgICAgICAgICBiaW5kTmFtZT1iaW5kTmFtZVsyOi0yXSAjdHJpbSBvZmYgdGhlIGFuZ2xlIGJyYWNrZXRzCisgICAgICAgICAgICBrZXkgPSAnICcuam9pbihrZXlTZXRbYmluZE5hbWVdKSAjbWFrZSBrZXkocykgaW50byBhIHN0cmluZworICAgICAgICAgICAgYmluZE5hbWUgPSBiaW5kTmFtZVsyOi0yXSAjdHJpbSBvZmYgdGhlIGFuZ2xlIGJyYWNrZXRzCiAgICAgICAgICAgICBpZiBrZXlTZXROYW1lIGluIHNlbGYuY2hhbmdlZEl0ZW1zWydrZXlzJ106CiAgICAgICAgICAgICAgICAgI2hhbmRsZSBhbnkgdW5zYXZlZCBjaGFuZ2VzIHRvIHRoaXMga2V5IHNldAogICAgICAgICAgICAgICAgIGlmIGJpbmROYW1lIGluIHNlbGYuY2hhbmdlZEl0ZW1zWydrZXlzJ11ba2V5U2V0TmFtZV06Ci0gICAgICAgICAgICAgICAgICAgIGtleT1zZWxmLmNoYW5nZWRJdGVtc1sna2V5cyddW2tleVNldE5hbWVdW2JpbmROYW1lXQorICAgICAgICAgICAgICAgICAgICBrZXkgPSBzZWxmLmNoYW5nZWRJdGVtc1sna2V5cyddW2tleVNldE5hbWVdW2JpbmROYW1lXQogICAgICAgICAgICAgc2VsZi5saXN0QmluZGluZ3MuaW5zZXJ0KEVORCwgYmluZE5hbWUrJyAtICcra2V5KQogICAgICAgICBpZiByZXNlbGVjdDoKICAgICAgICAgICAgIHNlbGYubGlzdEJpbmRpbmdzLnNlZShsaXN0SW5kZXgpCkBAIC02OTMsOSArNzM2LDkgQEAKIAogICAgIGRlZiBEZWxldGVDdXN0b21LZXlzKHNlbGYpOgogICAgICAgICBrZXlTZXROYW1lPXNlbGYuY3VzdG9tS2V5cy5nZXQoKQotICAgICAgICBpZiBub3QgdGtNZXNzYWdlQm94LmFza3llc25vKCdEZWxldGUgS2V5IFNldCcsJ0FyZSB5b3Ugc3VyZSB5b3Ugd2lzaCAnKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0byBkZWxldGUgdGhlIGtleSBzZXQgJXIgPycgJSAoa2V5U2V0TmFtZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50PXNlbGYpOgorICAgICAgICBkZWxtc2cgPSAnQXJlIHlvdSBzdXJlIHlvdSB3aXNoIHRvIGRlbGV0ZSB0aGUga2V5IHNldCAlciA/JworICAgICAgICBpZiBub3QgdGtNZXNzYWdlQm94LmFza3llc25vKAorICAgICAgICAgICAgICAgICdEZWxldGUgS2V5IFNldCcsICBkZWxtc2cgJSBrZXlTZXROYW1lLCBwYXJlbnQ9c2VsZik6CiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgI3JlbW92ZSBrZXkgc2V0IGZyb20gY29uZmlnCiAgICAgICAgIGlkbGVDb25mLnVzZXJDZmdbJ2tleXMnXS5yZW1vdmVfc2VjdGlvbihrZXlTZXROYW1lKQpAQCAtNzA0LDI1ICs3NDcsMjUgQEAKICAgICAgICAgI3dyaXRlIGNoYW5nZXMKICAgICAgICAgaWRsZUNvbmYudXNlckNmZ1sna2V5cyddLlNhdmUoKQogICAgICAgICAjcmVsb2FkIHVzZXIga2V5IHNldCBsaXN0Ci0gICAgICAgIGl0ZW1MaXN0PWlkbGVDb25mLkdldFNlY3Rpb25MaXN0KCd1c2VyJywna2V5cycpCisgICAgICAgIGl0ZW1MaXN0ID0gaWRsZUNvbmYuR2V0U2VjdGlvbkxpc3QoJ3VzZXInLCAna2V5cycpCiAgICAgICAgIGl0ZW1MaXN0LnNvcnQoKQogICAgICAgICBpZiBub3QgaXRlbUxpc3Q6CiAgICAgICAgICAgICBzZWxmLnJhZGlvS2V5c0N1c3RvbS5jb25maWcoc3RhdGU9RElTQUJMRUQpCi0gICAgICAgICAgICBzZWxmLm9wdE1lbnVLZXlzQ3VzdG9tLlNldE1lbnUoaXRlbUxpc3QsJy0gbm8gY3VzdG9tIGtleXMgLScpCisgICAgICAgICAgICBzZWxmLm9wdE1lbnVLZXlzQ3VzdG9tLlNldE1lbnUoaXRlbUxpc3QsICctIG5vIGN1c3RvbSBrZXlzIC0nKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5vcHRNZW51S2V5c0N1c3RvbS5TZXRNZW51KGl0ZW1MaXN0LGl0ZW1MaXN0WzBdKQorICAgICAgICAgICAgc2VsZi5vcHRNZW51S2V5c0N1c3RvbS5TZXRNZW51KGl0ZW1MaXN0LCBpdGVtTGlzdFswXSkKICAgICAgICAgI3JldmVydCB0byBkZWZhdWx0IGtleSBzZXQKLSAgICAgICAgc2VsZi5rZXlzQXJlQnVpbHRpbi5zZXQoaWRsZUNvbmYuZGVmYXVsdENmZ1snbWFpbiddLkdldCgnS2V5cycsJ2RlZmF1bHQnKSkKLSAgICAgICAgc2VsZi5idWlsdGluS2V5cy5zZXQoaWRsZUNvbmYuZGVmYXVsdENmZ1snbWFpbiddLkdldCgnS2V5cycsJ25hbWUnKSkKKyAgICAgICAgc2VsZi5rZXlzQXJlQnVpbHRpbi5zZXQoaWRsZUNvbmYuZGVmYXVsdENmZ1snbWFpbiddLkdldCgnS2V5cycsICdkZWZhdWx0JykpCisgICAgICAgIHNlbGYuYnVpbHRpbktleXMuc2V0KGlkbGVDb25mLmRlZmF1bHRDZmdbJ21haW4nXS5HZXQoJ0tleXMnLCAnbmFtZScpKQogICAgICAgICAjdXNlciBjYW4ndCBiYWNrIG91dCBvZiB0aGVzZSBjaGFuZ2VzLCB0aGV5IG11c3QgYmUgYXBwbGllZCBub3cKICAgICAgICAgc2VsZi5BcHBseSgpCiAgICAgICAgIHNlbGYuU2V0S2V5c1R5cGUoKQogCiAgICAgZGVmIERlbGV0ZUN1c3RvbVRoZW1lKHNlbGYpOgotICAgICAgICB0aGVtZU5hbWU9c2VsZi5jdXN0b21UaGVtZS5nZXQoKQotICAgICAgICBpZiBub3QgdGtNZXNzYWdlQm94LmFza3llc25vKCdEZWxldGUgVGhlbWUnLCdBcmUgeW91IHN1cmUgeW91IHdpc2ggJysKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndG8gZGVsZXRlIHRoZSB0aGVtZSAlciA/JyAlICh0aGVtZU5hbWUsKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQ9c2VsZik6CisgICAgICAgIHRoZW1lTmFtZSA9IHNlbGYuY3VzdG9tVGhlbWUuZ2V0KCkKKyAgICAgICAgZGVsbXNnID0gJ0FyZSB5b3Ugc3VyZSB5b3Ugd2lzaCB0byBkZWxldGUgdGhlIHRoZW1lICVyID8nCisgICAgICAgIGlmIG5vdCB0a01lc3NhZ2VCb3guYXNreWVzbm8oCisgICAgICAgICAgICAgICAgJ0RlbGV0ZSBUaGVtZScsICBkZWxtc2cgJSB0aGVtZU5hbWUsIHBhcmVudD1zZWxmKToKICAgICAgICAgICAgIHJldHVybgogICAgICAgICAjcmVtb3ZlIHRoZW1lIGZyb20gY29uZmlnCiAgICAgICAgIGlkbGVDb25mLnVzZXJDZmdbJ2hpZ2hsaWdodCddLnJlbW92ZV9zZWN0aW9uKHRoZW1lTmFtZSkKQEAgLTczMSwxNTMgKzc3NCwxNDkgQEAKICAgICAgICAgI3dyaXRlIGNoYW5nZXMKICAgICAgICAgaWRsZUNvbmYudXNlckNmZ1snaGlnaGxpZ2h0J10uU2F2ZSgpCiAgICAgICAgICNyZWxvYWQgdXNlciB0aGVtZSBsaXN0Ci0gICAgICAgIGl0ZW1MaXN0PWlkbGVDb25mLkdldFNlY3Rpb25MaXN0KCd1c2VyJywnaGlnaGxpZ2h0JykKKyAgICAgICAgaXRlbUxpc3QgPSBpZGxlQ29uZi5HZXRTZWN0aW9uTGlzdCgndXNlcicsICdoaWdobGlnaHQnKQogICAgICAgICBpdGVtTGlzdC5zb3J0KCkKICAgICAgICAgaWYgbm90IGl0ZW1MaXN0OgogICAgICAgICAgICAgc2VsZi5yYWRpb1RoZW1lQ3VzdG9tLmNvbmZpZyhzdGF0ZT1ESVNBQkxFRCkKLSAgICAgICAgICAgIHNlbGYub3B0TWVudVRoZW1lQ3VzdG9tLlNldE1lbnUoaXRlbUxpc3QsJy0gbm8gY3VzdG9tIHRoZW1lcyAtJykKKyAgICAgICAgICAgIHNlbGYub3B0TWVudVRoZW1lQ3VzdG9tLlNldE1lbnUoaXRlbUxpc3QsICctIG5vIGN1c3RvbSB0aGVtZXMgLScpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLm9wdE1lbnVUaGVtZUN1c3RvbS5TZXRNZW51KGl0ZW1MaXN0LGl0ZW1MaXN0WzBdKQorICAgICAgICAgICAgc2VsZi5vcHRNZW51VGhlbWVDdXN0b20uU2V0TWVudShpdGVtTGlzdCwgaXRlbUxpc3RbMF0pCiAgICAgICAgICNyZXZlcnQgdG8gZGVmYXVsdCB0aGVtZQotICAgICAgICBzZWxmLnRoZW1lSXNCdWlsdGluLnNldChpZGxlQ29uZi5kZWZhdWx0Q2ZnWydtYWluJ10uR2V0KCdUaGVtZScsJ2RlZmF1bHQnKSkKLSAgICAgICAgc2VsZi5idWlsdGluVGhlbWUuc2V0KGlkbGVDb25mLmRlZmF1bHRDZmdbJ21haW4nXS5HZXQoJ1RoZW1lJywnbmFtZScpKQorICAgICAgICBzZWxmLnRoZW1lSXNCdWlsdGluLnNldChpZGxlQ29uZi5kZWZhdWx0Q2ZnWydtYWluJ10uR2V0KCdUaGVtZScsICdkZWZhdWx0JykpCisgICAgICAgIHNlbGYuYnVpbHRpblRoZW1lLnNldChpZGxlQ29uZi5kZWZhdWx0Q2ZnWydtYWluJ10uR2V0KCdUaGVtZScsICduYW1lJykpCiAgICAgICAgICN1c2VyIGNhbid0IGJhY2sgb3V0IG9mIHRoZXNlIGNoYW5nZXMsIHRoZXkgbXVzdCBiZSBhcHBsaWVkIG5vdwogICAgICAgICBzZWxmLkFwcGx5KCkKICAgICAgICAgc2VsZi5TZXRUaGVtZVR5cGUoKQogCiAgICAgZGVmIEdldENvbG91cihzZWxmKToKLSAgICAgICAgdGFyZ2V0PXNlbGYuaGlnaGxpZ2h0VGFyZ2V0LmdldCgpCi0gICAgICAgIHByZXZDb2xvdXI9c2VsZi5mcmFtZUNvbG91clNldC5jZ2V0KCdiZycpCi0gICAgICAgIHJnYlR1cGxldCwgY29sb3VyU3RyaW5nID0gdGtDb2xvckNob29zZXIuYXNrY29sb3IocGFyZW50PXNlbGYsCi0gICAgICAgICAgICB0aXRsZT0nUGljayBuZXcgY29sb3VyIGZvciA6ICcrdGFyZ2V0LGluaXRpYWxjb2xvcj1wcmV2Q29sb3VyKQotICAgICAgICBpZiBjb2xvdXJTdHJpbmcgYW5kIChjb2xvdXJTdHJpbmchPXByZXZDb2xvdXIpOgorICAgICAgICB0YXJnZXQgPSBzZWxmLmhpZ2hsaWdodFRhcmdldC5nZXQoKQorICAgICAgICBwcmV2Q29sb3VyID0gc2VsZi5mcmFtZUNvbG91clNldC5jZ2V0KCdiZycpCisgICAgICAgIHJnYlR1cGxldCwgY29sb3VyU3RyaW5nID0gdGtDb2xvckNob29zZXIuYXNrY29sb3IoCisgICAgICAgICAgICAgICAgcGFyZW50PXNlbGYsIHRpdGxlPSdQaWNrIG5ldyBjb2xvdXIgZm9yIDogJyt0YXJnZXQsCisgICAgICAgICAgICAgICAgaW5pdGlhbGNvbG9yPXByZXZDb2xvdXIpCisgICAgICAgIGlmIGNvbG91clN0cmluZyBhbmQgKGNvbG91clN0cmluZyAhPSBwcmV2Q29sb3VyKToKICAgICAgICAgICAgICN1c2VyIGRpZG4ndCBjYW5jZWwsIGFuZCB0aGV5IGNob3NlIGEgbmV3IGNvbG91cgotICAgICAgICAgICAgaWYgc2VsZi50aGVtZUlzQnVpbHRpbi5nZXQoKTogI2N1cnJlbnQgdGhlbWUgaXMgYSBidWlsdC1pbgotICAgICAgICAgICAgICAgIG1lc3NhZ2U9KCdZb3VyIGNoYW5nZXMgd2lsbCBiZSBzYXZlZCBhcyBhIG5ldyBDdXN0b20gVGhlbWUuICcrCi0gICAgICAgICAgICAgICAgICAgICAgICAnRW50ZXIgYSBuYW1lIGZvciB5b3VyIG5ldyBDdXN0b20gVGhlbWUgYmVsb3cuJykKLSAgICAgICAgICAgICAgICBuZXdUaGVtZT1zZWxmLkdldE5ld1RoZW1lTmFtZShtZXNzYWdlKQotICAgICAgICAgICAgICAgIGlmIG5vdCBuZXdUaGVtZTogI3VzZXIgY2FuY2VsbGVkIGN1c3RvbSB0aGVtZSBjcmVhdGlvbgorICAgICAgICAgICAgaWYgc2VsZi50aGVtZUlzQnVpbHRpbi5nZXQoKTogICNjdXJyZW50IHRoZW1lIGlzIGEgYnVpbHQtaW4KKyAgICAgICAgICAgICAgICBtZXNzYWdlID0gKCdZb3VyIGNoYW5nZXMgd2lsbCBiZSBzYXZlZCBhcyBhIG5ldyBDdXN0b20gVGhlbWUuICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICdFbnRlciBhIG5hbWUgZm9yIHlvdXIgbmV3IEN1c3RvbSBUaGVtZSBiZWxvdy4nKQorICAgICAgICAgICAgICAgIG5ld1RoZW1lID0gc2VsZi5HZXROZXdUaGVtZU5hbWUobWVzc2FnZSkKKyAgICAgICAgICAgICAgICBpZiBub3QgbmV3VGhlbWU6ICAjdXNlciBjYW5jZWxsZWQgY3VzdG9tIHRoZW1lIGNyZWF0aW9uCiAgICAgICAgICAgICAgICAgICAgIHJldHVybgotICAgICAgICAgICAgICAgIGVsc2U6ICNjcmVhdGUgbmV3IGN1c3RvbSB0aGVtZSBiYXNlZCBvbiBwcmV2aW91c2x5IGFjdGl2ZSB0aGVtZQorICAgICAgICAgICAgICAgIGVsc2U6ICAjY3JlYXRlIG5ldyBjdXN0b20gdGhlbWUgYmFzZWQgb24gcHJldmlvdXNseSBhY3RpdmUgdGhlbWUKICAgICAgICAgICAgICAgICAgICAgc2VsZi5DcmVhdGVOZXdUaGVtZShuZXdUaGVtZSkKICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb2xvdXIuc2V0KGNvbG91clN0cmluZykKLSAgICAgICAgICAgIGVsc2U6ICNjdXJyZW50IHRoZW1lIGlzIHVzZXIgZGVmaW5lZAorICAgICAgICAgICAgZWxzZTogICNjdXJyZW50IHRoZW1lIGlzIHVzZXIgZGVmaW5lZAogICAgICAgICAgICAgICAgIHNlbGYuY29sb3VyLnNldChjb2xvdXJTdHJpbmcpCiAKICAgICBkZWYgT25OZXdDb2xvdXJTZXQoc2VsZik6CiAgICAgICAgIG5ld0NvbG91cj1zZWxmLmNvbG91ci5nZXQoKQotICAgICAgICBzZWxmLmZyYW1lQ29sb3VyU2V0LmNvbmZpZyhiZz1uZXdDb2xvdXIpI3NldCBzYW1wbGUKLSAgICAgICAgaWYgc2VsZi5mZ0hpbGl0ZS5nZXQoKTogcGxhbmU9J2ZvcmVncm91bmQnCi0gICAgICAgIGVsc2U6IHBsYW5lPSdiYWNrZ3JvdW5kJwotICAgICAgICBzYW1wbGVFbGVtZW50PXNlbGYudGhlbWVFbGVtZW50c1tzZWxmLmhpZ2hsaWdodFRhcmdldC5nZXQoKV1bMF0KKyAgICAgICAgc2VsZi5mcmFtZUNvbG91clNldC5jb25maWcoYmc9bmV3Q29sb3VyKSAgI3NldCBzYW1wbGUKKyAgICAgICAgcGxhbmUgPSdmb3JlZ3JvdW5kJyBpZiBzZWxmLmZnSGlsaXRlLmdldCgpIGVsc2UgJ2JhY2tncm91bmQnCisgICAgICAgIHNhbXBsZUVsZW1lbnQgPSBzZWxmLnRoZW1lRWxlbWVudHNbc2VsZi5oaWdobGlnaHRUYXJnZXQuZ2V0KCldWzBdCiAgICAgICAgIHNlbGYudGV4dEhpZ2hsaWdodFNhbXBsZS50YWdfY29uZmlnKHNhbXBsZUVsZW1lbnQsICoqe3BsYW5lOm5ld0NvbG91cn0pCi0gICAgICAgIHRoZW1lPXNlbGYuY3VzdG9tVGhlbWUuZ2V0KCkKLSAgICAgICAgdGhlbWVFbGVtZW50PXNhbXBsZUVsZW1lbnQrJy0nK3BsYW5lCi0gICAgICAgIHNlbGYuQWRkQ2hhbmdlZEl0ZW0oJ2hpZ2hsaWdodCcsdGhlbWUsdGhlbWVFbGVtZW50LG5ld0NvbG91cikKKyAgICAgICAgdGhlbWUgPSBzZWxmLmN1c3RvbVRoZW1lLmdldCgpCisgICAgICAgIHRoZW1lRWxlbWVudCA9IHNhbXBsZUVsZW1lbnQgKyAnLScgKyBwbGFuZQorICAgICAgICBzZWxmLkFkZENoYW5nZWRJdGVtKCdoaWdobGlnaHQnLCB0aGVtZSwgdGhlbWVFbGVtZW50LCBuZXdDb2xvdXIpCiAKLSAgICBkZWYgR2V0TmV3VGhlbWVOYW1lKHNlbGYsbWVzc2FnZSk6Ci0gICAgICAgIHVzZWROYW1lcz0oaWRsZUNvbmYuR2V0U2VjdGlvbkxpc3QoJ3VzZXInLCdoaWdobGlnaHQnKSsKLSAgICAgICAgICAgICAgICBpZGxlQ29uZi5HZXRTZWN0aW9uTGlzdCgnZGVmYXVsdCcsJ2hpZ2hsaWdodCcpKQotICAgICAgICBuZXdUaGVtZT1HZXRDZmdTZWN0aW9uTmFtZURpYWxvZyhzZWxmLCdOZXcgQ3VzdG9tIFRoZW1lJywKLSAgICAgICAgICAgICAgICBtZXNzYWdlLHVzZWROYW1lcykucmVzdWx0CisgICAgZGVmIEdldE5ld1RoZW1lTmFtZShzZWxmLCBtZXNzYWdlKToKKyAgICAgICAgdXNlZE5hbWVzID0gKGlkbGVDb25mLkdldFNlY3Rpb25MaXN0KCd1c2VyJywgJ2hpZ2hsaWdodCcpICsKKyAgICAgICAgICAgICAgICBpZGxlQ29uZi5HZXRTZWN0aW9uTGlzdCgnZGVmYXVsdCcsICdoaWdobGlnaHQnKSkKKyAgICAgICAgbmV3VGhlbWUgPSBHZXRDZmdTZWN0aW9uTmFtZURpYWxvZygKKyAgICAgICAgICAgICAgICBzZWxmLCAnTmV3IEN1c3RvbSBUaGVtZScsIG1lc3NhZ2UsIHVzZWROYW1lcykucmVzdWx0CiAgICAgICAgIHJldHVybiBuZXdUaGVtZQogCiAgICAgZGVmIFNhdmVBc05ld1RoZW1lKHNlbGYpOgotICAgICAgICBuZXdUaGVtZU5hbWU9c2VsZi5HZXROZXdUaGVtZU5hbWUoJ05ldyBUaGVtZSBOYW1lOicpCisgICAgICAgIG5ld1RoZW1lTmFtZSA9IHNlbGYuR2V0TmV3VGhlbWVOYW1lKCdOZXcgVGhlbWUgTmFtZTonKQogICAgICAgICBpZiBuZXdUaGVtZU5hbWU6CiAgICAgICAgICAgICBzZWxmLkNyZWF0ZU5ld1RoZW1lKG5ld1RoZW1lTmFtZSkKIAotICAgIGRlZiBDcmVhdGVOZXdUaGVtZShzZWxmLG5ld1RoZW1lTmFtZSk6CisgICAgZGVmIENyZWF0ZU5ld1RoZW1lKHNlbGYsIG5ld1RoZW1lTmFtZSk6CiAgICAgICAgICNjcmVhdGVzIG5ldyBjdXN0b20gdGhlbWUgYmFzZWQgb24gdGhlIHByZXZpb3VzbHkgYWN0aXZlIHRoZW1lLAogICAgICAgICAjYW5kIG1ha2VzIHRoZSBuZXcgdGhlbWUgYWN0aXZlCiAgICAgICAgIGlmIHNlbGYudGhlbWVJc0J1aWx0aW4uZ2V0KCk6Ci0gICAgICAgICAgICB0aGVtZVR5cGU9J2RlZmF1bHQnCi0gICAgICAgICAgICB0aGVtZU5hbWU9c2VsZi5idWlsdGluVGhlbWUuZ2V0KCkKKyAgICAgICAgICAgIHRoZW1lVHlwZSA9ICdkZWZhdWx0JworICAgICAgICAgICAgdGhlbWVOYW1lID0gc2VsZi5idWlsdGluVGhlbWUuZ2V0KCkKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHRoZW1lVHlwZT0ndXNlcicKLSAgICAgICAgICAgIHRoZW1lTmFtZT1zZWxmLmN1c3RvbVRoZW1lLmdldCgpCi0gICAgICAgIG5ld1RoZW1lPWlkbGVDb25mLkdldFRoZW1lRGljdCh0aGVtZVR5cGUsdGhlbWVOYW1lKQorICAgICAgICAgICAgdGhlbWVUeXBlID0gJ3VzZXInCisgICAgICAgICAgICB0aGVtZU5hbWUgPSBzZWxmLmN1c3RvbVRoZW1lLmdldCgpCisgICAgICAgIG5ld1RoZW1lID0gaWRsZUNvbmYuR2V0VGhlbWVEaWN0KHRoZW1lVHlwZSwgdGhlbWVOYW1lKQogICAgICAgICAjYXBwbHkgYW55IG9mIHRoZSBvbGQgdGhlbWUncyB1bnNhdmVkIGNoYW5nZXMgdG8gdGhlIG5ldyB0aGVtZQogICAgICAgICBpZiB0aGVtZU5hbWUgaW4gc2VsZi5jaGFuZ2VkSXRlbXNbJ2hpZ2hsaWdodCddOgotICAgICAgICAgICAgdGhlbWVDaGFuZ2VzPXNlbGYuY2hhbmdlZEl0ZW1zWydoaWdobGlnaHQnXVt0aGVtZU5hbWVdCisgICAgICAgICAgICB0aGVtZUNoYW5nZXMgPSBzZWxmLmNoYW5nZWRJdGVtc1snaGlnaGxpZ2h0J11bdGhlbWVOYW1lXQogICAgICAgICAgICAgZm9yIGVsZW1lbnQgaW4gdGhlbWVDaGFuZ2VzOgotICAgICAgICAgICAgICAgIG5ld1RoZW1lW2VsZW1lbnRdPXRoZW1lQ2hhbmdlc1tlbGVtZW50XQorICAgICAgICAgICAgICAgIG5ld1RoZW1lW2VsZW1lbnRdID0gdGhlbWVDaGFuZ2VzW2VsZW1lbnRdCiAgICAgICAgICNzYXZlIHRoZSBuZXcgdGhlbWUKLSAgICAgICAgc2VsZi5TYXZlTmV3VGhlbWUobmV3VGhlbWVOYW1lLG5ld1RoZW1lKQorICAgICAgICBzZWxmLlNhdmVOZXdUaGVtZShuZXdUaGVtZU5hbWUsIG5ld1RoZW1lKQogICAgICAgICAjY2hhbmdlIGd1aSBvdmVyIHRvIHRoZSBuZXcgdGhlbWUKLSAgICAgICAgY3VzdG9tVGhlbWVMaXN0PWlkbGVDb25mLkdldFNlY3Rpb25MaXN0KCd1c2VyJywnaGlnaGxpZ2h0JykKKyAgICAgICAgY3VzdG9tVGhlbWVMaXN0ID0gaWRsZUNvbmYuR2V0U2VjdGlvbkxpc3QoJ3VzZXInLCAnaGlnaGxpZ2h0JykKICAgICAgICAgY3VzdG9tVGhlbWVMaXN0LnNvcnQoKQotICAgICAgICBzZWxmLm9wdE1lbnVUaGVtZUN1c3RvbS5TZXRNZW51KGN1c3RvbVRoZW1lTGlzdCxuZXdUaGVtZU5hbWUpCisgICAgICAgIHNlbGYub3B0TWVudVRoZW1lQ3VzdG9tLlNldE1lbnUoY3VzdG9tVGhlbWVMaXN0LCBuZXdUaGVtZU5hbWUpCiAgICAgICAgIHNlbGYudGhlbWVJc0J1aWx0aW4uc2V0KDApCiAgICAgICAgIHNlbGYuU2V0VGhlbWVUeXBlKCkKIAotICAgIGRlZiBPbkxpc3RGb250QnV0dG9uUmVsZWFzZShzZWxmLGV2ZW50KToKKyAgICBkZWYgT25MaXN0Rm9udEJ1dHRvblJlbGVhc2Uoc2VsZiwgZXZlbnQpOgogICAgICAgICBmb250ID0gc2VsZi5saXN0Rm9udE5hbWUuZ2V0KEFOQ0hPUikKICAgICAgICAgc2VsZi5mb250TmFtZS5zZXQoZm9udC5sb3dlcigpKQogICAgICAgICBzZWxmLlNldEZvbnRTYW1wbGUoKQogCi0gICAgZGVmIFNldEZvbnRTYW1wbGUoc2VsZixldmVudD1Ob25lKToKLSAgICAgICAgZm9udE5hbWU9c2VsZi5mb250TmFtZS5nZXQoKQotICAgICAgICBpZiBzZWxmLmZvbnRCb2xkLmdldCgpOgotICAgICAgICAgICAgZm9udFdlaWdodD10a0ZvbnQuQk9MRAotICAgICAgICBlbHNlOgotICAgICAgICAgICAgZm9udFdlaWdodD10a0ZvbnQuTk9STUFMCisgICAgZGVmIFNldEZvbnRTYW1wbGUoc2VsZiwgZXZlbnQ9Tm9uZSk6CisgICAgICAgIGZvbnROYW1lID0gc2VsZi5mb250TmFtZS5nZXQoKQorICAgICAgICBmb250V2VpZ2h0ID0gdGtGb250LkJPTEQgaWYgc2VsZi5mb250Qm9sZC5nZXQoKSBlbHNlIHRrRm9udC5OT1JNQUwKICAgICAgICAgbmV3Rm9udCA9IChmb250TmFtZSwgc2VsZi5mb250U2l6ZS5nZXQoKSwgZm9udFdlaWdodCkKICAgICAgICAgc2VsZi5sYWJlbEZvbnRTYW1wbGUuY29uZmlnKGZvbnQ9bmV3Rm9udCkKICAgICAgICAgc2VsZi50ZXh0SGlnaGxpZ2h0U2FtcGxlLmNvbmZpZ3VyZShmb250PW5ld0ZvbnQpCiAKICAgICBkZWYgU2V0SGlnaGxpZ2h0VGFyZ2V0KHNlbGYpOgotICAgICAgICBpZiBzZWxmLmhpZ2hsaWdodFRhcmdldC5nZXQoKT09J0N1cnNvcic6ICNiZyBub3QgcG9zc2libGUKKyAgICAgICAgaWYgc2VsZi5oaWdobGlnaHRUYXJnZXQuZ2V0KCkgPT0gJ0N1cnNvcic6ICAjYmcgbm90IHBvc3NpYmxlCiAgICAgICAgICAgICBzZWxmLnJhZGlvRmcuY29uZmlnKHN0YXRlPURJU0FCTEVEKQogICAgICAgICAgICAgc2VsZi5yYWRpb0JnLmNvbmZpZyhzdGF0ZT1ESVNBQkxFRCkKICAgICAgICAgICAgIHNlbGYuZmdIaWxpdGUuc2V0KDEpCi0gICAgICAgIGVsc2U6ICNib3RoIGZnIGFuZCBiZyBjYW4gYmUgc2V0CisgICAgICAgIGVsc2U6ICAjYm90aCBmZyBhbmQgYmcgY2FuIGJlIHNldAogICAgICAgICAgICAgc2VsZi5yYWRpb0ZnLmNvbmZpZyhzdGF0ZT1OT1JNQUwpCiAgICAgICAgICAgICBzZWxmLnJhZGlvQmcuY29uZmlnKHN0YXRlPU5PUk1BTCkKICAgICAgICAgICAgIHNlbGYuZmdIaWxpdGUuc2V0KDEpCiAgICAgICAgIHNlbGYuU2V0Q29sb3VyU2FtcGxlKCkKIAotICAgIGRlZiBTZXRDb2xvdXJTYW1wbGVCaW5kaW5nKHNlbGYsKmFyZ3MpOgorICAgIGRlZiBTZXRDb2xvdXJTYW1wbGVCaW5kaW5nKHNlbGYsICphcmdzKToKICAgICAgICAgc2VsZi5TZXRDb2xvdXJTYW1wbGUoKQogCiAgICAgZGVmIFNldENvbG91clNhbXBsZShzZWxmKToKICAgICAgICAgI3NldCB0aGUgY29sb3VyIHNtYXBsZSBhcmVhCi0gICAgICAgIHRhZz1zZWxmLnRoZW1lRWxlbWVudHNbc2VsZi5oaWdobGlnaHRUYXJnZXQuZ2V0KCldWzBdCi0gICAgICAgIGlmIHNlbGYuZmdIaWxpdGUuZ2V0KCk6IHBsYW5lPSdmb3JlZ3JvdW5kJwotICAgICAgICBlbHNlOiBwbGFuZT0nYmFja2dyb3VuZCcKLSAgICAgICAgY29sb3VyPXNlbGYudGV4dEhpZ2hsaWdodFNhbXBsZS50YWdfY2dldCh0YWcscGxhbmUpCisgICAgICAgIHRhZyA9IHNlbGYudGhlbWVFbGVtZW50c1tzZWxmLmhpZ2hsaWdodFRhcmdldC5nZXQoKV1bMF0KKyAgICAgICAgcGxhbmUgPSAnZm9yZWdyb3VuZCcgaWYgc2VsZi5mZ0hpbGl0ZS5nZXQoKSBlbHNlICdiYWNrZ3JvdW5kJworICAgICAgICBjb2xvdXIgPSBzZWxmLnRleHRIaWdobGlnaHRTYW1wbGUudGFnX2NnZXQodGFnLCBwbGFuZSkKICAgICAgICAgc2VsZi5mcmFtZUNvbG91clNldC5jb25maWcoYmc9Y29sb3VyKQogCiAgICAgZGVmIFBhaW50VGhlbWVTYW1wbGUoc2VsZik6Ci0gICAgICAgIGlmIHNlbGYudGhlbWVJc0J1aWx0aW4uZ2V0KCk6ICNhIGRlZmF1bHQgdGhlbWUKLSAgICAgICAgICAgIHRoZW1lPXNlbGYuYnVpbHRpblRoZW1lLmdldCgpCi0gICAgICAgIGVsc2U6ICNhIHVzZXIgdGhlbWUKLSAgICAgICAgICAgIHRoZW1lPXNlbGYuY3VzdG9tVGhlbWUuZ2V0KCkKKyAgICAgICAgaWYgc2VsZi50aGVtZUlzQnVpbHRpbi5nZXQoKTogICNhIGRlZmF1bHQgdGhlbWUKKyAgICAgICAgICAgIHRoZW1lID0gc2VsZi5idWlsdGluVGhlbWUuZ2V0KCkKKyAgICAgICAgZWxzZTogICNhIHVzZXIgdGhlbWUKKyAgICAgICAgICAgIHRoZW1lID0gc2VsZi5jdXN0b21UaGVtZS5nZXQoKQogICAgICAgICBmb3IgZWxlbWVudFRpdGxlIGluIHNlbGYudGhlbWVFbGVtZW50czoKLSAgICAgICAgICAgIGVsZW1lbnQ9c2VsZi50aGVtZUVsZW1lbnRzW2VsZW1lbnRUaXRsZV1bMF0KLSAgICAgICAgICAgIGNvbG91cnM9aWRsZUNvbmYuR2V0SGlnaGxpZ2h0KHRoZW1lLGVsZW1lbnQpCi0gICAgICAgICAgICBpZiBlbGVtZW50PT0nY3Vyc29yJzogI2N1cnNvciBzYW1wbGUgbmVlZHMgc3BlY2lhbCBwYWludGluZwotICAgICAgICAgICAgICAgIGNvbG91cnNbJ2JhY2tncm91bmQnXT1pZGxlQ29uZi5HZXRIaWdobGlnaHQodGhlbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAnbm9ybWFsJywgZmdCZz0nYmcnKQorICAgICAgICAgICAgZWxlbWVudCA9IHNlbGYudGhlbWVFbGVtZW50c1tlbGVtZW50VGl0bGVdWzBdCisgICAgICAgICAgICBjb2xvdXJzID0gaWRsZUNvbmYuR2V0SGlnaGxpZ2h0KHRoZW1lLCBlbGVtZW50KQorICAgICAgICAgICAgaWYgZWxlbWVudCA9PSAnY3Vyc29yJzogI2N1cnNvciBzYW1wbGUgbmVlZHMgc3BlY2lhbCBwYWludGluZworICAgICAgICAgICAgICAgIGNvbG91cnNbJ2JhY2tncm91bmQnXSA9IGlkbGVDb25mLkdldEhpZ2hsaWdodCgKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1lLCAnbm9ybWFsJywgZmdCZz0nYmcnKQogICAgICAgICAgICAgI2hhbmRsZSBhbnkgdW5zYXZlZCBjaGFuZ2VzIHRvIHRoaXMgdGhlbWUKICAgICAgICAgICAgIGlmIHRoZW1lIGluIHNlbGYuY2hhbmdlZEl0ZW1zWydoaWdobGlnaHQnXToKLSAgICAgICAgICAgICAgICB0aGVtZURpY3Q9c2VsZi5jaGFuZ2VkSXRlbXNbJ2hpZ2hsaWdodCddW3RoZW1lXQotICAgICAgICAgICAgICAgIGlmIGVsZW1lbnQrJy1mb3JlZ3JvdW5kJyBpbiB0aGVtZURpY3Q6Ci0gICAgICAgICAgICAgICAgICAgIGNvbG91cnNbJ2ZvcmVncm91bmQnXT10aGVtZURpY3RbZWxlbWVudCsnLWZvcmVncm91bmQnXQotICAgICAgICAgICAgICAgIGlmIGVsZW1lbnQrJy1iYWNrZ3JvdW5kJyBpbiB0aGVtZURpY3Q6Ci0gICAgICAgICAgICAgICAgICAgIGNvbG91cnNbJ2JhY2tncm91bmQnXT10aGVtZURpY3RbZWxlbWVudCsnLWJhY2tncm91bmQnXQorICAgICAgICAgICAgICAgIHRoZW1lRGljdCA9IHNlbGYuY2hhbmdlZEl0ZW1zWydoaWdobGlnaHQnXVt0aGVtZV0KKyAgICAgICAgICAgICAgICBpZiBlbGVtZW50ICsgJy1mb3JlZ3JvdW5kJyBpbiB0aGVtZURpY3Q6CisgICAgICAgICAgICAgICAgICAgIGNvbG91cnNbJ2ZvcmVncm91bmQnXSA9IHRoZW1lRGljdFtlbGVtZW50ICsgJy1mb3JlZ3JvdW5kJ10KKyAgICAgICAgICAgICAgICBpZiBlbGVtZW50ICsgJy1iYWNrZ3JvdW5kJyBpbiB0aGVtZURpY3Q6CisgICAgICAgICAgICAgICAgICAgIGNvbG91cnNbJ2JhY2tncm91bmQnXSA9IHRoZW1lRGljdFtlbGVtZW50ICsgJy1iYWNrZ3JvdW5kJ10KICAgICAgICAgICAgIHNlbGYudGV4dEhpZ2hsaWdodFNhbXBsZS50YWdfY29uZmlnKGVsZW1lbnQsICoqY29sb3VycykKICAgICAgICAgc2VsZi5TZXRDb2xvdXJTYW1wbGUoKQogCi0gICAgZGVmIEhlbHBTb3VyY2VTZWxlY3RlZChzZWxmLGV2ZW50KToKKyAgICBkZWYgSGVscFNvdXJjZVNlbGVjdGVkKHNlbGYsIGV2ZW50KToKICAgICAgICAgc2VsZi5TZXRIZWxwTGlzdEJ1dHRvblN0YXRlcygpCiAKICAgICBkZWYgU2V0SGVscExpc3RCdXR0b25TdGF0ZXMoc2VsZik6Ci0gICAgICAgIGlmIHNlbGYubGlzdEhlbHAuc2l6ZSgpPDE6ICNubyBlbnRyaWVzIGluIGxpc3QKKyAgICAgICAgaWYgc2VsZi5saXN0SGVscC5zaXplKCkgPCAxOiAgI25vIGVudHJpZXMgaW4gbGlzdAogICAgICAgICAgICAgc2VsZi5idXR0b25IZWxwTGlzdEVkaXQuY29uZmlnKHN0YXRlPURJU0FCTEVEKQogICAgICAgICAgICAgc2VsZi5idXR0b25IZWxwTGlzdFJlbW92ZS5jb25maWcoc3RhdGU9RElTQUJMRUQpCiAgICAgICAgIGVsc2U6ICN0aGVyZSBhcmUgc29tZSBlbnRyaWVzCi0gICAgICAgICAgICBpZiBzZWxmLmxpc3RIZWxwLmN1cnNlbGVjdGlvbigpOiAjdGhlcmUgY3VycmVudGx5IGlzIGEgc2VsZWN0aW9uCisgICAgICAgICAgICBpZiBzZWxmLmxpc3RIZWxwLmN1cnNlbGVjdGlvbigpOiAgI3RoZXJlIGN1cnJlbnRseSBpcyBhIHNlbGVjdGlvbgogICAgICAgICAgICAgICAgIHNlbGYuYnV0dG9uSGVscExpc3RFZGl0LmNvbmZpZyhzdGF0ZT1OT1JNQUwpCiAgICAgICAgICAgICAgICAgc2VsZi5idXR0b25IZWxwTGlzdFJlbW92ZS5jb25maWcoc3RhdGU9Tk9STUFMKQogICAgICAgICAgICAgZWxzZTogICN0aGVyZSBjdXJyZW50bHkgaXMgbm90IGEgc2VsZWN0aW9uCkBAIC04ODUsMjggKzkyNCwyOSBAQAogICAgICAgICAgICAgICAgIHNlbGYuYnV0dG9uSGVscExpc3RSZW1vdmUuY29uZmlnKHN0YXRlPURJU0FCTEVEKQogCiAgICAgZGVmIEhlbHBMaXN0SXRlbUFkZChzZWxmKToKLSAgICAgICAgaGVscFNvdXJjZT1HZXRIZWxwU291cmNlRGlhbG9nKHNlbGYsJ05ldyBIZWxwIFNvdXJjZScpLnJlc3VsdAorICAgICAgICBoZWxwU291cmNlID0gR2V0SGVscFNvdXJjZURpYWxvZyhzZWxmLCAnTmV3IEhlbHAgU291cmNlJykucmVzdWx0CiAgICAgICAgIGlmIGhlbHBTb3VyY2U6Ci0gICAgICAgICAgICBzZWxmLnVzZXJIZWxwTGlzdC5hcHBlbmQoIChoZWxwU291cmNlWzBdLGhlbHBTb3VyY2VbMV0pICkKLSAgICAgICAgICAgIHNlbGYubGlzdEhlbHAuaW5zZXJ0KEVORCxoZWxwU291cmNlWzBdKQorICAgICAgICAgICAgc2VsZi51c2VySGVscExpc3QuYXBwZW5kKChoZWxwU291cmNlWzBdLCBoZWxwU291cmNlWzFdKSkKKyAgICAgICAgICAgIHNlbGYubGlzdEhlbHAuaW5zZXJ0KEVORCwgaGVscFNvdXJjZVswXSkKICAgICAgICAgICAgIHNlbGYuVXBkYXRlVXNlckhlbHBDaGFuZ2VkSXRlbXMoKQogICAgICAgICBzZWxmLlNldEhlbHBMaXN0QnV0dG9uU3RhdGVzKCkKIAogICAgIGRlZiBIZWxwTGlzdEl0ZW1FZGl0KHNlbGYpOgotICAgICAgICBpdGVtSW5kZXg9c2VsZi5saXN0SGVscC5pbmRleChBTkNIT1IpCi0gICAgICAgIGhlbHBTb3VyY2U9c2VsZi51c2VySGVscExpc3RbaXRlbUluZGV4XQotICAgICAgICBuZXdIZWxwU291cmNlPUdldEhlbHBTb3VyY2VEaWFsb2coc2VsZiwnRWRpdCBIZWxwIFNvdXJjZScsCi0gICAgICAgICAgICAgICAgbWVudUl0ZW09aGVscFNvdXJjZVswXSxmaWxlUGF0aD1oZWxwU291cmNlWzFdKS5yZXN1bHQKLSAgICAgICAgaWYgKG5vdCBuZXdIZWxwU291cmNlKSBvciAobmV3SGVscFNvdXJjZT09aGVscFNvdXJjZSk6CisgICAgICAgIGl0ZW1JbmRleCA9IHNlbGYubGlzdEhlbHAuaW5kZXgoQU5DSE9SKQorICAgICAgICBoZWxwU291cmNlID0gc2VsZi51c2VySGVscExpc3RbaXRlbUluZGV4XQorICAgICAgICBuZXdIZWxwU291cmNlID0gR2V0SGVscFNvdXJjZURpYWxvZygKKyAgICAgICAgICAgICAgICBzZWxmLCAnRWRpdCBIZWxwIFNvdXJjZScsIG1lbnVJdGVtPWhlbHBTb3VyY2VbMF0sCisgICAgICAgICAgICAgICAgZmlsZVBhdGg9aGVscFNvdXJjZVsxXSkucmVzdWx0CisgICAgICAgIGlmIChub3QgbmV3SGVscFNvdXJjZSkgb3IgKG5ld0hlbHBTb3VyY2UgPT0gaGVscFNvdXJjZSk6CiAgICAgICAgICAgICByZXR1cm4gI25vIGNoYW5nZXMKLSAgICAgICAgc2VsZi51c2VySGVscExpc3RbaXRlbUluZGV4XT1uZXdIZWxwU291cmNlCisgICAgICAgIHNlbGYudXNlckhlbHBMaXN0W2l0ZW1JbmRleF0gPSBuZXdIZWxwU291cmNlCiAgICAgICAgIHNlbGYubGlzdEhlbHAuZGVsZXRlKGl0ZW1JbmRleCkKLSAgICAgICAgc2VsZi5saXN0SGVscC5pbnNlcnQoaXRlbUluZGV4LG5ld0hlbHBTb3VyY2VbMF0pCisgICAgICAgIHNlbGYubGlzdEhlbHAuaW5zZXJ0KGl0ZW1JbmRleCwgbmV3SGVscFNvdXJjZVswXSkKICAgICAgICAgc2VsZi5VcGRhdGVVc2VySGVscENoYW5nZWRJdGVtcygpCiAgICAgICAgIHNlbGYuU2V0SGVscExpc3RCdXR0b25TdGF0ZXMoKQogCiAgICAgZGVmIEhlbHBMaXN0SXRlbVJlbW92ZShzZWxmKToKLSAgICAgICAgaXRlbUluZGV4PXNlbGYubGlzdEhlbHAuaW5kZXgoQU5DSE9SKQorICAgICAgICBpdGVtSW5kZXggPSBzZWxmLmxpc3RIZWxwLmluZGV4KEFOQ0hPUikKICAgICAgICAgZGVsKHNlbGYudXNlckhlbHBMaXN0W2l0ZW1JbmRleF0pCiAgICAgICAgIHNlbGYubGlzdEhlbHAuZGVsZXRlKGl0ZW1JbmRleCkKICAgICAgICAgc2VsZi5VcGRhdGVVc2VySGVscENoYW5nZWRJdGVtcygpCkBAIC05MTUsMTI4ICs5NTUsMTI2IEBACiAgICAgZGVmIFVwZGF0ZVVzZXJIZWxwQ2hhbmdlZEl0ZW1zKHNlbGYpOgogICAgICAgICAiQ2xlYXIgYW5kIHJlYnVpbGQgdGhlIEhlbHBGaWxlcyBzZWN0aW9uIGluIHNlbGYuY2hhbmdlZEl0ZW1zIgogICAgICAgICBzZWxmLmNoYW5nZWRJdGVtc1snbWFpbiddWydIZWxwRmlsZXMnXSA9IHt9Ci0gICAgICAgIGZvciBudW0gaW4gcmFuZ2UoMSxsZW4oc2VsZi51c2VySGVscExpc3QpKzEpOgotICAgICAgICAgICAgc2VsZi5BZGRDaGFuZ2VkSXRlbSgnbWFpbicsJ0hlbHBGaWxlcycsc3RyKG51bSksCisgICAgICAgIGZvciBudW0gaW4gcmFuZ2UoMSwgbGVuKHNlbGYudXNlckhlbHBMaXN0KSArIDEpOgorICAgICAgICAgICAgc2VsZi5BZGRDaGFuZ2VkSXRlbSgKKyAgICAgICAgICAgICAgICAgICAgJ21haW4nLCAnSGVscEZpbGVzJywgc3RyKG51bSksCiAgICAgICAgICAgICAgICAgICAgICc7Jy5qb2luKHNlbGYudXNlckhlbHBMaXN0W251bS0xXVs6Ml0pKQogCiAgICAgZGVmIExvYWRGb250Q2ZnKHNlbGYpOgogICAgICAgICAjI2Jhc2UgZWRpdG9yIGZvbnQgc2VsZWN0aW9uIGxpc3QKLSAgICAgICAgZm9udHM9bGlzdCh0a0ZvbnQuZmFtaWxpZXMoc2VsZikpCisgICAgICAgIGZvbnRzID0gbGlzdCh0a0ZvbnQuZmFtaWxpZXMoc2VsZikpCiAgICAgICAgIGZvbnRzLnNvcnQoKQogICAgICAgICBmb3IgZm9udCBpbiBmb250czoKLSAgICAgICAgICAgIHNlbGYubGlzdEZvbnROYW1lLmluc2VydChFTkQsZm9udCkKLSAgICAgICAgY29uZmlndXJlZEZvbnQ9aWRsZUNvbmYuR2V0T3B0aW9uKCdtYWluJywnRWRpdG9yV2luZG93JywnZm9udCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PSdjb3VyaWVyJykKLSAgICAgICAgbGNfY29uZmlndXJlZEZvbnQgPSBjb25maWd1cmVkRm9udC5sb3dlcigpCi0gICAgICAgIHNlbGYuZm9udE5hbWUuc2V0KGxjX2NvbmZpZ3VyZWRGb250KQorICAgICAgICAgICAgc2VsZi5saXN0Rm9udE5hbWUuaW5zZXJ0KEVORCwgZm9udCkKKyAgICAgICAgY29uZmlndXJlZEZvbnQgPSBpZGxlQ29uZi5HZXRGb250KHNlbGYsICdtYWluJywgJ0VkaXRvcldpbmRvdycpCisgICAgICAgIGZvbnROYW1lID0gY29uZmlndXJlZEZvbnRbMF0ubG93ZXIoKQorICAgICAgICBmb250U2l6ZSA9IGNvbmZpZ3VyZWRGb250WzFdCisgICAgICAgIGZvbnRCb2xkICA9IGNvbmZpZ3VyZWRGb250WzJdPT0nYm9sZCcKKyAgICAgICAgc2VsZi5mb250TmFtZS5zZXQoZm9udE5hbWUpCiAgICAgICAgIGxjX2ZvbnRzID0gW3MubG93ZXIoKSBmb3IgcyBpbiBmb250c10KLSAgICAgICAgaWYgbGNfY29uZmlndXJlZEZvbnQgaW4gbGNfZm9udHM6Ci0gICAgICAgICAgICBjdXJyZW50Rm9udEluZGV4ID0gbGNfZm9udHMuaW5kZXgobGNfY29uZmlndXJlZEZvbnQpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGN1cnJlbnRGb250SW5kZXggPSBsY19mb250cy5pbmRleChmb250TmFtZSkKICAgICAgICAgICAgIHNlbGYubGlzdEZvbnROYW1lLnNlZShjdXJyZW50Rm9udEluZGV4KQogICAgICAgICAgICAgc2VsZi5saXN0Rm9udE5hbWUuc2VsZWN0X3NldChjdXJyZW50Rm9udEluZGV4KQogICAgICAgICAgICAgc2VsZi5saXN0Rm9udE5hbWUuc2VsZWN0X2FuY2hvcihjdXJyZW50Rm9udEluZGV4KQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKICAgICAgICAgIyNmb250IHNpemUgZHJvcGRvd24KLSAgICAgICAgZm9udFNpemU9aWRsZUNvbmYuR2V0T3B0aW9uKCdtYWluJywgJ0VkaXRvcldpbmRvdycsICdmb250LXNpemUnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0naW50JywgZGVmYXVsdD0nMTAnKQotICAgICAgICBzZWxmLm9wdE1lbnVGb250U2l6ZS5TZXRNZW51KCgnNycsJzgnLCc5JywnMTAnLCcxMScsJzEyJywnMTMnLCcxNCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcxNicsJzE4JywnMjAnLCcyMicpLCBmb250U2l6ZSApCisgICAgICAgIHNlbGYub3B0TWVudUZvbnRTaXplLlNldE1lbnUoKCc3JywgJzgnLCAnOScsICcxMCcsICcxMScsICcxMicsICcxMycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcxNCcsICcxNicsICcxOCcsICcyMCcsICcyMicpLCBmb250U2l6ZSApCiAgICAgICAgICMjZm9udFdlaWdodAotICAgICAgICBzZWxmLmZvbnRCb2xkLnNldChpZGxlQ29uZi5HZXRPcHRpb24oJ21haW4nLCdFZGl0b3JXaW5kb3cnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZvbnQtYm9sZCcsZGVmYXVsdD0wLHR5cGU9J2Jvb2wnKSkKKyAgICAgICAgc2VsZi5mb250Qm9sZC5zZXQoZm9udEJvbGQpCiAgICAgICAgICMjZm9udCBzYW1wbGUKICAgICAgICAgc2VsZi5TZXRGb250U2FtcGxlKCkKIAogICAgIGRlZiBMb2FkVGFiQ2ZnKHNlbGYpOgogICAgICAgICAjI2luZGVudCBzaXplcwotICAgICAgICBzcGFjZU51bT1pZGxlQ29uZi5HZXRPcHRpb24oJ21haW4nLCdJbmRlbnQnLCdudW0tc3BhY2VzJywKLSAgICAgICAgICAgICAgICBkZWZhdWx0PTQsdHlwZT0naW50JykKKyAgICAgICAgc3BhY2VOdW0gPSBpZGxlQ29uZi5HZXRPcHRpb24oCisgICAgICAgICAgICAnbWFpbicsICdJbmRlbnQnLCAnbnVtLXNwYWNlcycsIGRlZmF1bHQ9NCwgdHlwZT0naW50JykKICAgICAgICAgc2VsZi5zcGFjZU51bS5zZXQoc3BhY2VOdW0pCiAKICAgICBkZWYgTG9hZFRoZW1lQ2ZnKHNlbGYpOgogICAgICAgICAjI2N1cnJlbnQgdGhlbWUgdHlwZSByYWRpb2J1dHRvbgotICAgICAgICBzZWxmLnRoZW1lSXNCdWlsdGluLnNldChpZGxlQ29uZi5HZXRPcHRpb24oJ21haW4nLCdUaGVtZScsJ2RlZmF1bHQnLAotICAgICAgICAgICAgdHlwZT0nYm9vbCcsZGVmYXVsdD0xKSkKKyAgICAgICAgc2VsZi50aGVtZUlzQnVpbHRpbi5zZXQoaWRsZUNvbmYuR2V0T3B0aW9uKAorICAgICAgICAgICAgICAgICdtYWluJywgJ1RoZW1lJywgJ2RlZmF1bHQnLCB0eXBlPSdib29sJywgZGVmYXVsdD0xKSkKICAgICAgICAgIyNjdXJyZW50bHkgc2V0IHRoZW1lCi0gICAgICAgIGN1cnJlbnRPcHRpb249aWRsZUNvbmYuQ3VycmVudFRoZW1lKCkKKyAgICAgICAgY3VycmVudE9wdGlvbiA9IGlkbGVDb25mLkN1cnJlbnRUaGVtZSgpCiAgICAgICAgICMjbG9hZCBhdmFpbGFibGUgdGhlbWUgb3B0aW9uIG1lbnVzCiAgICAgICAgIGlmIHNlbGYudGhlbWVJc0J1aWx0aW4uZ2V0KCk6ICNkZWZhdWx0IHRoZW1lIHNlbGVjdGVkCi0gICAgICAgICAgICBpdGVtTGlzdD1pZGxlQ29uZi5HZXRTZWN0aW9uTGlzdCgnZGVmYXVsdCcsJ2hpZ2hsaWdodCcpCisgICAgICAgICAgICBpdGVtTGlzdCA9IGlkbGVDb25mLkdldFNlY3Rpb25MaXN0KCdkZWZhdWx0JywgJ2hpZ2hsaWdodCcpCiAgICAgICAgICAgICBpdGVtTGlzdC5zb3J0KCkKLSAgICAgICAgICAgIHNlbGYub3B0TWVudVRoZW1lQnVpbHRpbi5TZXRNZW51KGl0ZW1MaXN0LGN1cnJlbnRPcHRpb24pCi0gICAgICAgICAgICBpdGVtTGlzdD1pZGxlQ29uZi5HZXRTZWN0aW9uTGlzdCgndXNlcicsJ2hpZ2hsaWdodCcpCisgICAgICAgICAgICBzZWxmLm9wdE1lbnVUaGVtZUJ1aWx0aW4uU2V0TWVudShpdGVtTGlzdCwgY3VycmVudE9wdGlvbikKKyAgICAgICAgICAgIGl0ZW1MaXN0ID0gaWRsZUNvbmYuR2V0U2VjdGlvbkxpc3QoJ3VzZXInLCAnaGlnaGxpZ2h0JykKICAgICAgICAgICAgIGl0ZW1MaXN0LnNvcnQoKQogICAgICAgICAgICAgaWYgbm90IGl0ZW1MaXN0OgogICAgICAgICAgICAgICAgIHNlbGYucmFkaW9UaGVtZUN1c3RvbS5jb25maWcoc3RhdGU9RElTQUJMRUQpCiAgICAgICAgICAgICAgICAgc2VsZi5jdXN0b21UaGVtZS5zZXQoJy0gbm8gY3VzdG9tIHRoZW1lcyAtJykKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5vcHRNZW51VGhlbWVDdXN0b20uU2V0TWVudShpdGVtTGlzdCxpdGVtTGlzdFswXSkKKyAgICAgICAgICAgICAgICBzZWxmLm9wdE1lbnVUaGVtZUN1c3RvbS5TZXRNZW51KGl0ZW1MaXN0LCBpdGVtTGlzdFswXSkKICAgICAgICAgZWxzZTogI3VzZXIgdGhlbWUgc2VsZWN0ZWQKLSAgICAgICAgICAgIGl0ZW1MaXN0PWlkbGVDb25mLkdldFNlY3Rpb25MaXN0KCd1c2VyJywnaGlnaGxpZ2h0JykKKyAgICAgICAgICAgIGl0ZW1MaXN0ID0gaWRsZUNvbmYuR2V0U2VjdGlvbkxpc3QoJ3VzZXInLCAnaGlnaGxpZ2h0JykKICAgICAgICAgICAgIGl0ZW1MaXN0LnNvcnQoKQotICAgICAgICAgICAgc2VsZi5vcHRNZW51VGhlbWVDdXN0b20uU2V0TWVudShpdGVtTGlzdCxjdXJyZW50T3B0aW9uKQotICAgICAgICAgICAgaXRlbUxpc3Q9aWRsZUNvbmYuR2V0U2VjdGlvbkxpc3QoJ2RlZmF1bHQnLCdoaWdobGlnaHQnKQorICAgICAgICAgICAgc2VsZi5vcHRNZW51VGhlbWVDdXN0b20uU2V0TWVudShpdGVtTGlzdCwgY3VycmVudE9wdGlvbikKKyAgICAgICAgICAgIGl0ZW1MaXN0ID0gaWRsZUNvbmYuR2V0U2VjdGlvbkxpc3QoJ2RlZmF1bHQnLCAnaGlnaGxpZ2h0JykKICAgICAgICAgICAgIGl0ZW1MaXN0LnNvcnQoKQotICAgICAgICAgICAgc2VsZi5vcHRNZW51VGhlbWVCdWlsdGluLlNldE1lbnUoaXRlbUxpc3QsaXRlbUxpc3RbMF0pCisgICAgICAgICAgICBzZWxmLm9wdE1lbnVUaGVtZUJ1aWx0aW4uU2V0TWVudShpdGVtTGlzdCwgaXRlbUxpc3RbMF0pCiAgICAgICAgIHNlbGYuU2V0VGhlbWVUeXBlKCkKICAgICAgICAgIyNsb2FkIHRoZW1lIGVsZW1lbnQgb3B0aW9uIG1lbnUKICAgICAgICAgdGhlbWVOYW1lcyA9IGxpc3Qoc2VsZi50aGVtZUVsZW1lbnRzLmtleXMoKSkKICAgICAgICAgdGhlbWVOYW1lcy5zb3J0KGtleT1sYW1iZGEgeDogc2VsZi50aGVtZUVsZW1lbnRzW3hdWzFdKQotICAgICAgICBzZWxmLm9wdE1lbnVIaWdobGlnaHRUYXJnZXQuU2V0TWVudSh0aGVtZU5hbWVzLHRoZW1lTmFtZXNbMF0pCisgICAgICAgIHNlbGYub3B0TWVudUhpZ2hsaWdodFRhcmdldC5TZXRNZW51KHRoZW1lTmFtZXMsIHRoZW1lTmFtZXNbMF0pCiAgICAgICAgIHNlbGYuUGFpbnRUaGVtZVNhbXBsZSgpCiAgICAgICAgIHNlbGYuU2V0SGlnaGxpZ2h0VGFyZ2V0KCkKIAogICAgIGRlZiBMb2FkS2V5Q2ZnKHNlbGYpOgogICAgICAgICAjI2N1cnJlbnQga2V5cyB0eXBlIHJhZGlvYnV0dG9uCi0gICAgICAgIHNlbGYua2V5c0FyZUJ1aWx0aW4uc2V0KGlkbGVDb25mLkdldE9wdGlvbignbWFpbicsJ0tleXMnLCdkZWZhdWx0JywKLSAgICAgICAgICAgIHR5cGU9J2Jvb2wnLGRlZmF1bHQ9MSkpCisgICAgICAgIHNlbGYua2V5c0FyZUJ1aWx0aW4uc2V0KGlkbGVDb25mLkdldE9wdGlvbigKKyAgICAgICAgICAgICAgICAnbWFpbicsICdLZXlzJywgJ2RlZmF1bHQnLCB0eXBlPSdib29sJywgZGVmYXVsdD0xKSkKICAgICAgICAgIyNjdXJyZW50bHkgc2V0IGtleXMKLSAgICAgICAgY3VycmVudE9wdGlvbj1pZGxlQ29uZi5DdXJyZW50S2V5cygpCisgICAgICAgIGN1cnJlbnRPcHRpb24gPSBpZGxlQ29uZi5DdXJyZW50S2V5cygpCiAgICAgICAgICMjbG9hZCBhdmFpbGFibGUga2V5c2V0IG9wdGlvbiBtZW51cwogICAgICAgICBpZiBzZWxmLmtleXNBcmVCdWlsdGluLmdldCgpOiAjZGVmYXVsdCB0aGVtZSBzZWxlY3RlZAotICAgICAgICAgICAgaXRlbUxpc3Q9aWRsZUNvbmYuR2V0U2VjdGlvbkxpc3QoJ2RlZmF1bHQnLCdrZXlzJykKKyAgICAgICAgICAgIGl0ZW1MaXN0ID0gaWRsZUNvbmYuR2V0U2VjdGlvbkxpc3QoJ2RlZmF1bHQnLCAna2V5cycpCiAgICAgICAgICAgICBpdGVtTGlzdC5zb3J0KCkKLSAgICAgICAgICAgIHNlbGYub3B0TWVudUtleXNCdWlsdGluLlNldE1lbnUoaXRlbUxpc3QsY3VycmVudE9wdGlvbikKLSAgICAgICAgICAgIGl0ZW1MaXN0PWlkbGVDb25mLkdldFNlY3Rpb25MaXN0KCd1c2VyJywna2V5cycpCisgICAgICAgICAgICBzZWxmLm9wdE1lbnVLZXlzQnVpbHRpbi5TZXRNZW51KGl0ZW1MaXN0LCBjdXJyZW50T3B0aW9uKQorICAgICAgICAgICAgaXRlbUxpc3QgPSBpZGxlQ29uZi5HZXRTZWN0aW9uTGlzdCgndXNlcicsICdrZXlzJykKICAgICAgICAgICAgIGl0ZW1MaXN0LnNvcnQoKQogICAgICAgICAgICAgaWYgbm90IGl0ZW1MaXN0OgogICAgICAgICAgICAgICAgIHNlbGYucmFkaW9LZXlzQ3VzdG9tLmNvbmZpZyhzdGF0ZT1ESVNBQkxFRCkKICAgICAgICAgICAgICAgICBzZWxmLmN1c3RvbUtleXMuc2V0KCctIG5vIGN1c3RvbSBrZXlzIC0nKQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLm9wdE1lbnVLZXlzQ3VzdG9tLlNldE1lbnUoaXRlbUxpc3QsaXRlbUxpc3RbMF0pCisgICAgICAgICAgICAgICAgc2VsZi5vcHRNZW51S2V5c0N1c3RvbS5TZXRNZW51KGl0ZW1MaXN0LCBpdGVtTGlzdFswXSkKICAgICAgICAgZWxzZTogI3VzZXIga2V5IHNldCBzZWxlY3RlZAotICAgICAgICAgICAgaXRlbUxpc3Q9aWRsZUNvbmYuR2V0U2VjdGlvbkxpc3QoJ3VzZXInLCdrZXlzJykKKyAgICAgICAgICAgIGl0ZW1MaXN0ID0gaWRsZUNvbmYuR2V0U2VjdGlvbkxpc3QoJ3VzZXInLCAna2V5cycpCiAgICAgICAgICAgICBpdGVtTGlzdC5zb3J0KCkKLSAgICAgICAgICAgIHNlbGYub3B0TWVudUtleXNDdXN0b20uU2V0TWVudShpdGVtTGlzdCxjdXJyZW50T3B0aW9uKQotICAgICAgICAgICAgaXRlbUxpc3Q9aWRsZUNvbmYuR2V0U2VjdGlvbkxpc3QoJ2RlZmF1bHQnLCdrZXlzJykKKyAgICAgICAgICAgIHNlbGYub3B0TWVudUtleXNDdXN0b20uU2V0TWVudShpdGVtTGlzdCwgY3VycmVudE9wdGlvbikKKyAgICAgICAgICAgIGl0ZW1MaXN0ID0gaWRsZUNvbmYuR2V0U2VjdGlvbkxpc3QoJ2RlZmF1bHQnLCAna2V5cycpCiAgICAgICAgICAgICBpdGVtTGlzdC5zb3J0KCkKLSAgICAgICAgICAgIHNlbGYub3B0TWVudUtleXNCdWlsdGluLlNldE1lbnUoaXRlbUxpc3QsaXRlbUxpc3RbMF0pCisgICAgICAgICAgICBzZWxmLm9wdE1lbnVLZXlzQnVpbHRpbi5TZXRNZW51KGl0ZW1MaXN0LCBpdGVtTGlzdFswXSkKICAgICAgICAgc2VsZi5TZXRLZXlzVHlwZSgpCiAgICAgICAgICMjbG9hZCBrZXlzZXQgZWxlbWVudCBsaXN0Ci0gICAgICAgIGtleVNldE5hbWU9aWRsZUNvbmYuQ3VycmVudEtleXMoKQorICAgICAgICBrZXlTZXROYW1lID0gaWRsZUNvbmYuQ3VycmVudEtleXMoKQogICAgICAgICBzZWxmLkxvYWRLZXlzTGlzdChrZXlTZXROYW1lKQogCiAgICAgZGVmIExvYWRHZW5lcmFsQ2ZnKHNlbGYpOgogICAgICAgICAjc3RhcnR1cCBzdGF0ZQotICAgICAgICBzZWxmLnN0YXJ0dXBFZGl0LnNldChpZGxlQ29uZi5HZXRPcHRpb24oJ21haW4nLCdHZW5lcmFsJywKLSAgICAgICAgICAgICAgICAnZWRpdG9yLW9uLXN0YXJ0dXAnLGRlZmF1bHQ9MSx0eXBlPSdib29sJykpCisgICAgICAgIHNlbGYuc3RhcnR1cEVkaXQuc2V0KGlkbGVDb25mLkdldE9wdGlvbigKKyAgICAgICAgICAgICAgICAnbWFpbicsICdHZW5lcmFsJywgJ2VkaXRvci1vbi1zdGFydHVwJywgZGVmYXVsdD0xLCB0eXBlPSdib29sJykpCiAgICAgICAgICNhdXRvc2F2ZSBzdGF0ZQotICAgICAgICBzZWxmLmF1dG9TYXZlLnNldChpZGxlQ29uZi5HZXRPcHRpb24oJ21haW4nLCAnR2VuZXJhbCcsICdhdXRvc2F2ZScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PTAsIHR5cGU9J2Jvb2wnKSkKKyAgICAgICAgc2VsZi5hdXRvU2F2ZS5zZXQoaWRsZUNvbmYuR2V0T3B0aW9uKAorICAgICAgICAgICAgICAgICdtYWluJywgJ0dlbmVyYWwnLCAnYXV0b3NhdmUnLCBkZWZhdWx0PTAsIHR5cGU9J2Jvb2wnKSkKICAgICAgICAgI2luaXRpYWwgd2luZG93IHNpemUKLSAgICAgICAgc2VsZi53aW5XaWR0aC5zZXQoaWRsZUNvbmYuR2V0T3B0aW9uKCdtYWluJywnRWRpdG9yV2luZG93Jywnd2lkdGgnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0naW50JykpCi0gICAgICAgIHNlbGYud2luSGVpZ2h0LnNldChpZGxlQ29uZi5HZXRPcHRpb24oJ21haW4nLCdFZGl0b3JXaW5kb3cnLCdoZWlnaHQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9J2ludCcpKQotICAgICAgICAjaW5pdGlhbCBwYXJhZ3JhcGggcmVmb3JtYXQgc2l6ZQotICAgICAgICBzZWxmLnBhcmFXaWR0aC5zZXQoaWRsZUNvbmYuR2V0T3B0aW9uKCdtYWluJywnRm9ybWF0UGFyYWdyYXBoJywncGFyYWdyYXBoJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPSdpbnQnKSkKKyAgICAgICAgc2VsZi53aW5XaWR0aC5zZXQoaWRsZUNvbmYuR2V0T3B0aW9uKAorICAgICAgICAgICAgICAgICdtYWluJywgJ0VkaXRvcldpbmRvdycsICd3aWR0aCcsIHR5cGU9J2ludCcpKQorICAgICAgICBzZWxmLndpbkhlaWdodC5zZXQoaWRsZUNvbmYuR2V0T3B0aW9uKAorICAgICAgICAgICAgICAgICdtYWluJywgJ0VkaXRvcldpbmRvdycsICdoZWlnaHQnLCB0eXBlPSdpbnQnKSkKICAgICAgICAgIyBkZWZhdWx0IHNvdXJjZSBlbmNvZGluZwotICAgICAgICBzZWxmLmVuY29kaW5nLnNldChpZGxlQ29uZi5HZXRPcHRpb24oJ21haW4nLCAnRWRpdG9yV2luZG93JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbmNvZGluZycsIGRlZmF1bHQ9J25vbmUnKSkKKyAgICAgICAgc2VsZi5lbmNvZGluZy5zZXQoaWRsZUNvbmYuR2V0T3B0aW9uKAorICAgICAgICAgICAgICAgICdtYWluJywgJ0VkaXRvcldpbmRvdycsICdlbmNvZGluZycsIGRlZmF1bHQ9J25vbmUnKSkKICAgICAgICAgIyBhZGRpdGlvbmFsIGhlbHAgc291cmNlcwogICAgICAgICBzZWxmLnVzZXJIZWxwTGlzdCA9IGlkbGVDb25mLkdldEFsbEV4dHJhSGVscFNvdXJjZXNMaXN0KCkKICAgICAgICAgZm9yIGhlbHBJdGVtIGluIHNlbGYudXNlckhlbHBMaXN0OgotICAgICAgICAgICAgc2VsZi5saXN0SGVscC5pbnNlcnQoRU5ELGhlbHBJdGVtWzBdKQorICAgICAgICAgICAgc2VsZi5saXN0SGVscC5pbnNlcnQoRU5ELCBoZWxwSXRlbVswXSkKICAgICAgICAgc2VsZi5TZXRIZWxwTGlzdEJ1dHRvblN0YXRlcygpCiAKICAgICBkZWYgTG9hZENvbmZpZ3Moc2VsZik6CkBAIC0xMDUzLDggKzEwOTEsOSBAQAogICAgICAgICBzZWxmLkxvYWRLZXlDZmcoKQogICAgICAgICAjIyMgZ2VuZXJhbCBwYWdlCiAgICAgICAgIHNlbGYuTG9hZEdlbmVyYWxDZmcoKQorICAgICAgICAjIG5vdGU6IGV4dGVuc2lvbiBwYWdlIGhhbmRsZWQgc2VwYXJhdGVseQogCi0gICAgZGVmIFNhdmVOZXdLZXlTZXQoc2VsZixrZXlTZXROYW1lLGtleVNldCk6CisgICAgZGVmIFNhdmVOZXdLZXlTZXQoc2VsZiwga2V5U2V0TmFtZSwga2V5U2V0KToKICAgICAgICAgIiIiCiAgICAgICAgIHNhdmUgYSBuZXdseSBjcmVhdGVkIGNvcmUga2V5IHNldC4KICAgICAgICAga2V5U2V0TmFtZSAtIHN0cmluZywgdGhlIG5hbWUgb2YgdGhlIG5ldyBrZXkgc2V0CkBAIC0xMDYzLDEwICsxMTAyLDEwIEBACiAgICAgICAgIGlmIG5vdCBpZGxlQ29uZi51c2VyQ2ZnWydrZXlzJ10uaGFzX3NlY3Rpb24oa2V5U2V0TmFtZSk6CiAgICAgICAgICAgICBpZGxlQ29uZi51c2VyQ2ZnWydrZXlzJ10uYWRkX3NlY3Rpb24oa2V5U2V0TmFtZSkKICAgICAgICAgZm9yIGV2ZW50IGluIGtleVNldDoKLSAgICAgICAgICAgIHZhbHVlPWtleVNldFtldmVudF0KLSAgICAgICAgICAgIGlkbGVDb25mLnVzZXJDZmdbJ2tleXMnXS5TZXRPcHRpb24oa2V5U2V0TmFtZSxldmVudCx2YWx1ZSkKKyAgICAgICAgICAgIHZhbHVlID0ga2V5U2V0W2V2ZW50XQorICAgICAgICAgICAgaWRsZUNvbmYudXNlckNmZ1sna2V5cyddLlNldE9wdGlvbihrZXlTZXROYW1lLCBldmVudCwgdmFsdWUpCiAKLSAgICBkZWYgU2F2ZU5ld1RoZW1lKHNlbGYsdGhlbWVOYW1lLHRoZW1lKToKKyAgICBkZWYgU2F2ZU5ld1RoZW1lKHNlbGYsIHRoZW1lTmFtZSwgdGhlbWUpOgogICAgICAgICAiIiIKICAgICAgICAgc2F2ZSBhIG5ld2x5IGNyZWF0ZWQgdGhlbWUuCiAgICAgICAgIHRoZW1lTmFtZSAtIHN0cmluZywgdGhlIG5hbWUgb2YgdGhlIG5ldyB0aGVtZQpAQCAtMTA3NSwxNiArMTExNCwxNiBAQAogICAgICAgICBpZiBub3QgaWRsZUNvbmYudXNlckNmZ1snaGlnaGxpZ2h0J10uaGFzX3NlY3Rpb24odGhlbWVOYW1lKToKICAgICAgICAgICAgIGlkbGVDb25mLnVzZXJDZmdbJ2hpZ2hsaWdodCddLmFkZF9zZWN0aW9uKHRoZW1lTmFtZSkKICAgICAgICAgZm9yIGVsZW1lbnQgaW4gdGhlbWU6Ci0gICAgICAgICAgICB2YWx1ZT10aGVtZVtlbGVtZW50XQotICAgICAgICAgICAgaWRsZUNvbmYudXNlckNmZ1snaGlnaGxpZ2h0J10uU2V0T3B0aW9uKHRoZW1lTmFtZSxlbGVtZW50LHZhbHVlKQorICAgICAgICAgICAgdmFsdWUgPSB0aGVtZVtlbGVtZW50XQorICAgICAgICAgICAgaWRsZUNvbmYudXNlckNmZ1snaGlnaGxpZ2h0J10uU2V0T3B0aW9uKHRoZW1lTmFtZSwgZWxlbWVudCwgdmFsdWUpCiAKLSAgICBkZWYgU2V0VXNlclZhbHVlKHNlbGYsY29uZmlnVHlwZSxzZWN0aW9uLGl0ZW0sdmFsdWUpOgotICAgICAgICBpZiBpZGxlQ29uZi5kZWZhdWx0Q2ZnW2NvbmZpZ1R5cGVdLmhhc19vcHRpb24oc2VjdGlvbixpdGVtKToKLSAgICAgICAgICAgIGlmIGlkbGVDb25mLmRlZmF1bHRDZmdbY29uZmlnVHlwZV0uR2V0KHNlY3Rpb24saXRlbSk9PXZhbHVlOgorICAgIGRlZiBTZXRVc2VyVmFsdWUoc2VsZiwgY29uZmlnVHlwZSwgc2VjdGlvbiwgaXRlbSwgdmFsdWUpOgorICAgICAgICBpZiBpZGxlQ29uZi5kZWZhdWx0Q2ZnW2NvbmZpZ1R5cGVdLmhhc19vcHRpb24oc2VjdGlvbiwgaXRlbSk6CisgICAgICAgICAgICBpZiBpZGxlQ29uZi5kZWZhdWx0Q2ZnW2NvbmZpZ1R5cGVdLkdldChzZWN0aW9uLCBpdGVtKSA9PSB2YWx1ZToKICAgICAgICAgICAgICAgICAjdGhlIHNldHRpbmcgZXF1YWxzIGEgZGVmYXVsdCBzZXR0aW5nLCByZW1vdmUgaXQgZnJvbSB1c2VyIGNmZwotICAgICAgICAgICAgICAgIHJldHVybiBpZGxlQ29uZi51c2VyQ2ZnW2NvbmZpZ1R5cGVdLlJlbW92ZU9wdGlvbihzZWN0aW9uLGl0ZW0pCisgICAgICAgICAgICAgICAgcmV0dXJuIGlkbGVDb25mLnVzZXJDZmdbY29uZmlnVHlwZV0uUmVtb3ZlT3B0aW9uKHNlY3Rpb24sIGl0ZW0pCiAgICAgICAgICNpZiB3ZSBnb3QgaGVyZSBzZXQgdGhlIG9wdGlvbgotICAgICAgICByZXR1cm4gaWRsZUNvbmYudXNlckNmZ1tjb25maWdUeXBlXS5TZXRPcHRpb24oc2VjdGlvbixpdGVtLHZhbHVlKQorICAgICAgICByZXR1cm4gaWRsZUNvbmYudXNlckNmZ1tjb25maWdUeXBlXS5TZXRPcHRpb24oc2VjdGlvbiwgaXRlbSwgdmFsdWUpCiAKICAgICBkZWYgU2F2ZUFsbENoYW5nZWRDb25maWdzKHNlbGYpOgogICAgICAgICAiU2F2ZSBjb25maWd1cmF0aW9uIGNoYW5nZXMgdG8gdGhlIHVzZXIgY29uZmlnIGZpbGUuIgpAQCAtMTA5OCw3ICsxMTM3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgY2ZnVHlwZUhhc0NoYW5nZXMgPSBUcnVlCiAgICAgICAgICAgICAgICAgZm9yIGl0ZW0gaW4gc2VsZi5jaGFuZ2VkSXRlbXNbY29uZmlnVHlwZV1bc2VjdGlvbl06CiAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gc2VsZi5jaGFuZ2VkSXRlbXNbY29uZmlnVHlwZV1bc2VjdGlvbl1baXRlbV0KLSAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5TZXRVc2VyVmFsdWUoY29uZmlnVHlwZSxzZWN0aW9uLGl0ZW0sdmFsdWUpOgorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLlNldFVzZXJWYWx1ZShjb25maWdUeXBlLCBzZWN0aW9uLCBpdGVtLCB2YWx1ZSk6CiAgICAgICAgICAgICAgICAgICAgICAgICBjZmdUeXBlSGFzQ2hhbmdlcyA9IFRydWUKICAgICAgICAgICAgIGlmIGNmZ1R5cGVIYXNDaGFuZ2VzOgogICAgICAgICAgICAgICAgIGlkbGVDb25mLnVzZXJDZmdbY29uZmlnVHlwZV0uU2F2ZSgpCkBAIC0xMTA2LDYgKzExNDUsNyBAQAogICAgICAgICAgICAgIyBzYXZlIHRoZXNlIGV2ZW4gaWYgdW5jaGFuZ2VkIQogICAgICAgICAgICAgaWRsZUNvbmYudXNlckNmZ1tjb25maWdUeXBlXS5TYXZlKCkKICAgICAgICAgc2VsZi5SZXNldENoYW5nZWRJdGVtcygpICNjbGVhciB0aGUgY2hhbmdlZCBpdGVtcyBkaWN0CisgICAgICAgIHNlbGYuc2F2ZV9hbGxfY2hhbmdlZF9leHRlbnNpb25zKCkgICMgdXNlcyBhIGRpZmZlcmVudCBtZWNoYW5pc20KIAogICAgIGRlZiBEZWFjdGl2YXRlQ3VycmVudENvbmZpZyhzZWxmKToKICAgICAgICAgI0JlZm9yZSBhIGNvbmZpZyBpcyBzYXZlZCwgc29tZSBjbGVhbnVwIG9mIGN1cnJlbnQKQEAgLTExMzcsMTIgKzExNzcsMjQ3IEBACiAgICAgICAgIHNlbGYuQWN0aXZhdGVDb25maWdDaGFuZ2VzKCkKIAogICAgIGRlZiBIZWxwKHNlbGYpOgotICAgICAgICBwYXNzCisgICAgICAgIHBhZ2UgPSBzZWxmLnRhYlBhZ2VzLl9jdXJyZW50X3BhZ2UKKyAgICAgICAgdmlld190ZXh0KHNlbGYsIHRpdGxlPSdIZWxwIGZvciBJRExFIHByZWZlcmVuY2VzJywKKyAgICAgICAgICAgICAgICAgdGV4dD1oZWxwX2NvbW1vbitoZWxwX3BhZ2VzLmdldChwYWdlLCAnJykpCisKKyAgICBkZWYgQ3JlYXRlUGFnZUV4dGVuc2lvbnMoc2VsZik6CisgICAgICAgICIiIlBhcnQgb2YgdGhlIGNvbmZpZyBkaWFsb2cgdXNlZCBmb3IgY29uZmlndXJpbmcgSURMRSBleHRlbnNpb25zLgorCisgICAgICAgIFRoaXMgY29kZSBpcyBnZW5lcmljIC0gaXQgd29ya3MgZm9yIGFueSBhbmQgYWxsIElETEUgZXh0ZW5zaW9ucy4KKworICAgICAgICBJRExFIGV4dGVuc2lvbnMgc2F2ZSB0aGVpciBjb25maWd1cmF0aW9uIG9wdGlvbnMgdXNpbmcgaWRsZUNvbmYuCisgICAgICAgIFRoaXMgY29kZSByZWFkcyB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIHVzaW5nIGlkbGVDb25mLCBzdXBwbGllcyBhCisgICAgICAgIEdVSSBpbnRlcmZhY2UgdG8gY2hhbmdlIHRoZSBjb25maWd1cmF0aW9uIHZhbHVlcywgYW5kIHNhdmVzIHRoZQorICAgICAgICBjaGFuZ2VzIHVzaW5nIGlkbGVDb25mLgorCisgICAgICAgIE5vdCBhbGwgY2hhbmdlcyB0YWtlIGVmZmVjdCBpbW1lZGlhdGVseSAtIHNvbWUgbWF5IHJlcXVpcmUgcmVzdGFydGluZyBJRExFLgorICAgICAgICBUaGlzIGRlcGVuZHMgb24gZWFjaCBleHRlbnNpb24ncyBpbXBsZW1lbnRhdGlvbi4KKworICAgICAgICBBbGwgdmFsdWVzIGFyZSB0cmVhdGVkIGFzIHRleHQsIGFuZCBpdCBpcyB1cCB0byB0aGUgdXNlciB0byBzdXBwbHkKKyAgICAgICAgcmVhc29uYWJsZSB2YWx1ZXMuIFRoZSBvbmx5IGV4Y2VwdGlvbiB0byB0aGlzIGFyZSB0aGUgJ2VuYWJsZSonIG9wdGlvbnMsCisgICAgICAgIHdoaWNoIGFyZSBib29sZWFuLCBhbmQgY2FuIGJlIHRvZ2dsZWQgd2l0aCBhbiBUcnVlL0ZhbHNlIGJ1dHRvbi4KKyAgICAgICAgIiIiCisgICAgICAgIHBhcmVudCA9IHNlbGYucGFyZW50CisgICAgICAgIGZyYW1lID0gc2VsZi50YWJQYWdlcy5wYWdlc1snRXh0ZW5zaW9ucyddLmZyYW1lCisgICAgICAgIHNlbGYuZXh0X2RlZmF1bHRDZmcgPSBpZGxlQ29uZi5kZWZhdWx0Q2ZnWydleHRlbnNpb25zJ10KKyAgICAgICAgc2VsZi5leHRfdXNlckNmZyA9IGlkbGVDb25mLnVzZXJDZmdbJ2V4dGVuc2lvbnMnXQorICAgICAgICBzZWxmLmlzX2ludCA9IHNlbGYucmVnaXN0ZXIoaXNfaW50KQorICAgICAgICBzZWxmLmxvYWRfZXh0ZW5zaW9ucygpCisgICAgICAgICMgY3JlYXRlIHdpZGdldHMgLSBhIGxpc3Rib3ggc2hvd3MgYWxsIGF2YWlsYWJsZSBleHRlbnNpb25zLCB3aXRoIHRoZQorICAgICAgICAjIGNvbnRyb2xzIGZvciB0aGUgZXh0ZW5zaW9uIHNlbGVjdGVkIGluIHRoZSBsaXN0Ym94IHRvIHRoZSByaWdodAorICAgICAgICBzZWxmLmV4dGVuc2lvbl9uYW1lcyA9IFN0cmluZ1ZhcihzZWxmKQorICAgICAgICBmcmFtZS5yb3djb25maWd1cmUoMCwgd2VpZ2h0PTEpCisgICAgICAgIGZyYW1lLmNvbHVtbmNvbmZpZ3VyZSgyLCB3ZWlnaHQ9MSkKKyAgICAgICAgc2VsZi5leHRlbnNpb25fbGlzdCA9IExpc3Rib3goZnJhbWUsIGxpc3R2YXJpYWJsZT1zZWxmLmV4dGVuc2lvbl9uYW1lcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0bW9kZT0nYnJvd3NlJykKKyAgICAgICAgc2VsZi5leHRlbnNpb25fbGlzdC5iaW5kKCc8PExpc3Rib3hTZWxlY3Q+PicsIHNlbGYuZXh0ZW5zaW9uX3NlbGVjdGVkKQorICAgICAgICBzY3JvbGwgPSBTY3JvbGxiYXIoZnJhbWUsIGNvbW1hbmQ9c2VsZi5leHRlbnNpb25fbGlzdC55dmlldykKKyAgICAgICAgc2VsZi5leHRlbnNpb25fbGlzdC55c2Nyb2xsY29tbWFuZD1zY3JvbGwuc2V0CisgICAgICAgIHNlbGYuZGV0YWlsc19mcmFtZSA9IExhYmVsRnJhbWUoZnJhbWUsIHdpZHRoPTI1MCwgaGVpZ2h0PTI1MCkKKyAgICAgICAgc2VsZi5leHRlbnNpb25fbGlzdC5ncmlkKGNvbHVtbj0wLCByb3c9MCwgc3RpY2t5PSdud3MnKQorICAgICAgICBzY3JvbGwuZ3JpZChjb2x1bW49MSwgcm93PTAsIHN0aWNreT0nbnMnKQorICAgICAgICBzZWxmLmRldGFpbHNfZnJhbWUuZ3JpZChjb2x1bW49Miwgcm93PTAsIHN0aWNreT0nbnNldycsIHBhZHg9WzEwLCAwXSkKKyAgICAgICAgZnJhbWUuY29uZmlndXJlKHBhZHg9MTAsIHBhZHk9MTApCisgICAgICAgIHNlbGYuY29uZmlnX2ZyYW1lID0ge30KKyAgICAgICAgc2VsZi5jdXJyZW50X2V4dGVuc2lvbiA9IE5vbmUKKworICAgICAgICBzZWxmLm91dGVyZnJhbWUgPSBzZWxmICAgICAgICAgICAgICAgICAgICAgICMgVEVNUE9SQVJZCisgICAgICAgIHNlbGYudGFiYmVkX3BhZ2Vfc2V0ID0gc2VsZi5leHRlbnNpb25fbGlzdCAgIyBURU1QT1JBUlkKKworICAgICAgICAjIGNyZWF0ZSB0aGUgZnJhbWUgaG9sZGluZyBjb250cm9scyBmb3IgZWFjaCBleHRlbnNpb24KKyAgICAgICAgZXh0X25hbWVzID0gJycKKyAgICAgICAgZm9yIGV4dF9uYW1lIGluIHNvcnRlZChzZWxmLmV4dGVuc2lvbnMpOgorICAgICAgICAgICAgc2VsZi5jcmVhdGVfZXh0ZW5zaW9uX2ZyYW1lKGV4dF9uYW1lKQorICAgICAgICAgICAgZXh0X25hbWVzID0gZXh0X25hbWVzICsgJ3snICsgZXh0X25hbWUgKyAnfSAnCisgICAgICAgIHNlbGYuZXh0ZW5zaW9uX25hbWVzLnNldChleHRfbmFtZXMpCisgICAgICAgIHNlbGYuZXh0ZW5zaW9uX2xpc3Quc2VsZWN0aW9uX3NldCgwKQorICAgICAgICBzZWxmLmV4dGVuc2lvbl9zZWxlY3RlZChOb25lKQorCisgICAgZGVmIGxvYWRfZXh0ZW5zaW9ucyhzZWxmKToKKyAgICAgICAgIkZpbGwgc2VsZi5leHRlbnNpb25zIHdpdGggZGF0YSBmcm9tIHRoZSBkZWZhdWx0IGFuZCB1c2VyIGNvbmZpZ3MuIgorICAgICAgICBzZWxmLmV4dGVuc2lvbnMgPSB7fQorICAgICAgICBmb3IgZXh0X25hbWUgaW4gaWRsZUNvbmYuR2V0RXh0ZW5zaW9ucyhhY3RpdmVfb25seT1GYWxzZSk6CisgICAgICAgICAgICBzZWxmLmV4dGVuc2lvbnNbZXh0X25hbWVdID0gW10KKworICAgICAgICBmb3IgZXh0X25hbWUgaW4gc2VsZi5leHRlbnNpb25zOgorICAgICAgICAgICAgb3B0X2xpc3QgPSBzb3J0ZWQoc2VsZi5leHRfZGVmYXVsdENmZy5HZXRPcHRpb25MaXN0KGV4dF9uYW1lKSkKKworICAgICAgICAgICAgIyBicmluZyAnZW5hYmxlJyBvcHRpb25zIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpc3QKKyAgICAgICAgICAgIGVuYWJsZXMgPSBbb3B0X25hbWUgZm9yIG9wdF9uYW1lIGluIG9wdF9saXN0CisgICAgICAgICAgICAgICAgICAgICAgIGlmIG9wdF9uYW1lLnN0YXJ0c3dpdGgoJ2VuYWJsZScpXQorICAgICAgICAgICAgZm9yIG9wdF9uYW1lIGluIGVuYWJsZXM6CisgICAgICAgICAgICAgICAgb3B0X2xpc3QucmVtb3ZlKG9wdF9uYW1lKQorICAgICAgICAgICAgb3B0X2xpc3QgPSBlbmFibGVzICsgb3B0X2xpc3QKKworICAgICAgICAgICAgZm9yIG9wdF9uYW1lIGluIG9wdF9saXN0OgorICAgICAgICAgICAgICAgIGRlZl9zdHIgPSBzZWxmLmV4dF9kZWZhdWx0Q2ZnLkdldCgKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4dF9uYW1lLCBvcHRfbmFtZSwgcmF3PVRydWUpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBkZWZfb2JqID0geydUcnVlJzpUcnVlLCAnRmFsc2UnOkZhbHNlfVtkZWZfc3RyXQorICAgICAgICAgICAgICAgICAgICBvcHRfdHlwZSA9ICdib29sJworICAgICAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgZGVmX29iaiA9IGludChkZWZfc3RyKQorICAgICAgICAgICAgICAgICAgICAgICAgb3B0X3R5cGUgPSAnaW50JworICAgICAgICAgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZl9vYmogPSBkZWZfc3RyCisgICAgICAgICAgICAgICAgICAgICAgICBvcHRfdHlwZSA9IE5vbmUKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gc2VsZi5leHRfdXNlckNmZy5HZXQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0X25hbWUsIG9wdF9uYW1lLCB0eXBlPW9wdF90eXBlLCByYXc9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PWRlZl9vYmopCisgICAgICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6ICAjIE5lZWQgdGhpcyB1bnRpbCAuR2V0IGZpeGVkCisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gZGVmX29iaiAgIyBiYWQgdmFsdWVzIG92ZXJ3cml0dGVuIGJ5IGVudHJ5CisgICAgICAgICAgICAgICAgdmFyID0gU3RyaW5nVmFyKHNlbGYpCisgICAgICAgICAgICAgICAgdmFyLnNldChzdHIodmFsdWUpKQorCisgICAgICAgICAgICAgICAgc2VsZi5leHRlbnNpb25zW2V4dF9uYW1lXS5hcHBlbmQoeyduYW1lJzogb3B0X25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0eXBlJzogb3B0X3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZWZhdWx0JzogZGVmX3N0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3ZhbHVlJzogdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd2YXInOiB2YXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkKKworICAgIGRlZiBleHRlbnNpb25fc2VsZWN0ZWQoc2VsZiwgZXZlbnQpOgorICAgICAgICBuZXdzZWwgPSBzZWxmLmV4dGVuc2lvbl9saXN0LmN1cnNlbGVjdGlvbigpCisgICAgICAgIGlmIG5ld3NlbDoKKyAgICAgICAgICAgIG5ld3NlbCA9IHNlbGYuZXh0ZW5zaW9uX2xpc3QuZ2V0KG5ld3NlbCkKKyAgICAgICAgaWYgbmV3c2VsIGlzIE5vbmUgb3IgbmV3c2VsICE9IHNlbGYuY3VycmVudF9leHRlbnNpb246CisgICAgICAgICAgICBpZiBzZWxmLmN1cnJlbnRfZXh0ZW5zaW9uOgorICAgICAgICAgICAgICAgIHNlbGYuZGV0YWlsc19mcmFtZS5jb25maWcodGV4dD0nJykKKyAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZ19mcmFtZVtzZWxmLmN1cnJlbnRfZXh0ZW5zaW9uXS5ncmlkX2ZvcmdldCgpCisgICAgICAgICAgICAgICAgc2VsZi5jdXJyZW50X2V4dGVuc2lvbiA9IE5vbmUKKyAgICAgICAgaWYgbmV3c2VsOgorICAgICAgICAgICAgc2VsZi5kZXRhaWxzX2ZyYW1lLmNvbmZpZyh0ZXh0PW5ld3NlbCkKKyAgICAgICAgICAgIHNlbGYuY29uZmlnX2ZyYW1lW25ld3NlbF0uZ3JpZChjb2x1bW49MCwgcm93PTAsIHN0aWNreT0nbnNldycpCisgICAgICAgICAgICBzZWxmLmN1cnJlbnRfZXh0ZW5zaW9uID0gbmV3c2VsCisKKyAgICBkZWYgY3JlYXRlX2V4dGVuc2lvbl9mcmFtZShzZWxmLCBleHRfbmFtZSk6CisgICAgICAgICIiIkNyZWF0ZSBhIGZyYW1lIGhvbGRpbmcgdGhlIHdpZGdldHMgdG8gY29uZmlndXJlIG9uZSBleHRlbnNpb24iIiIKKyAgICAgICAgZiA9IFZlcnRpY2FsU2Nyb2xsZWRGcmFtZShzZWxmLmRldGFpbHNfZnJhbWUsIGhlaWdodD0yNTAsIHdpZHRoPTI1MCkKKyAgICAgICAgc2VsZi5jb25maWdfZnJhbWVbZXh0X25hbWVdID0gZgorICAgICAgICBlbnRyeV9hcmVhID0gZi5pbnRlcmlvcgorICAgICAgICAjIGNyZWF0ZSBhbiBlbnRyeSBmb3IgZWFjaCBjb25maWd1cmF0aW9uIG9wdGlvbgorICAgICAgICBmb3Igcm93LCBvcHQgaW4gZW51bWVyYXRlKHNlbGYuZXh0ZW5zaW9uc1tleHRfbmFtZV0pOgorICAgICAgICAgICAgIyBjcmVhdGUgYSByb3cgd2l0aCBhIGxhYmVsIGFuZCBlbnRyeS9jaGVja2J1dHRvbgorICAgICAgICAgICAgbGFiZWwgPSBMYWJlbChlbnRyeV9hcmVhLCB0ZXh0PW9wdFsnbmFtZSddKQorICAgICAgICAgICAgbGFiZWwuZ3JpZChyb3c9cm93LCBjb2x1bW49MCwgc3RpY2t5PU5XKQorICAgICAgICAgICAgdmFyID0gb3B0Wyd2YXInXQorICAgICAgICAgICAgaWYgb3B0Wyd0eXBlJ10gPT0gJ2Jvb2wnOgorICAgICAgICAgICAgICAgIENoZWNrYnV0dG9uKGVudHJ5X2FyZWEsIHRleHR2YXJpYWJsZT12YXIsIHZhcmlhYmxlPXZhciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbnZhbHVlPSdUcnVlJywgb2ZmdmFsdWU9J0ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2F0b3Jvbj1GQUxTRSwgc2VsZWN0Y29sb3I9JycsIHdpZHRoPTgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICApLmdyaWQocm93PXJvdywgY29sdW1uPTEsIHN0aWNreT1XLCBwYWR4PTcpCisgICAgICAgICAgICBlbGlmIG9wdFsndHlwZSddID09ICdpbnQnOgorICAgICAgICAgICAgICAgIEVudHJ5KGVudHJ5X2FyZWEsIHRleHR2YXJpYWJsZT12YXIsIHZhbGlkYXRlPSdrZXknLAorICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlY29tbWFuZD0oc2VsZi5pc19pbnQsICclUCcpCisgICAgICAgICAgICAgICAgICAgICAgKS5ncmlkKHJvdz1yb3csIGNvbHVtbj0xLCBzdGlja3k9TlNFVywgcGFkeD03KQorCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIEVudHJ5KGVudHJ5X2FyZWEsIHRleHR2YXJpYWJsZT12YXIKKyAgICAgICAgICAgICAgICAgICAgICApLmdyaWQocm93PXJvdywgY29sdW1uPTEsIHN0aWNreT1OU0VXLCBwYWR4PTcpCisgICAgICAgIHJldHVybgorCisgICAgZGVmIHNldF9leHRlbnNpb25fdmFsdWUoc2VsZiwgc2VjdGlvbiwgb3B0KToKKyAgICAgICAgbmFtZSA9IG9wdFsnbmFtZSddCisgICAgICAgIGRlZmF1bHQgPSBvcHRbJ2RlZmF1bHQnXQorICAgICAgICB2YWx1ZSA9IG9wdFsndmFyJ10uZ2V0KCkuc3RyaXAoKSBvciBkZWZhdWx0CisgICAgICAgIG9wdFsndmFyJ10uc2V0KHZhbHVlKQorICAgICAgICAjIGlmIHNlbGYuZGVmYXVsdENmZy5oYXNfc2VjdGlvbihzZWN0aW9uKToKKyAgICAgICAgIyBDdXJyZW50bHksIGFsd2F5cyB0cnVlOyBpZiBub3QsIGluZGVudCB0byByZXR1cm4KKyAgICAgICAgaWYgKHZhbHVlID09IGRlZmF1bHQpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuZXh0X3VzZXJDZmcuUmVtb3ZlT3B0aW9uKHNlY3Rpb24sIG5hbWUpCisgICAgICAgICMgc2V0IHRoZSBvcHRpb24KKyAgICAgICAgcmV0dXJuIHNlbGYuZXh0X3VzZXJDZmcuU2V0T3B0aW9uKHNlY3Rpb24sIG5hbWUsIHZhbHVlKQorCisgICAgZGVmIHNhdmVfYWxsX2NoYW5nZWRfZXh0ZW5zaW9ucyhzZWxmKToKKyAgICAgICAgIiIiU2F2ZSBjb25maWd1cmF0aW9uIGNoYW5nZXMgdG8gdGhlIHVzZXIgY29uZmlnIGZpbGUuIiIiCisgICAgICAgIGhhc19jaGFuZ2VzID0gRmFsc2UKKyAgICAgICAgZm9yIGV4dF9uYW1lIGluIHNlbGYuZXh0ZW5zaW9uczoKKyAgICAgICAgICAgIG9wdGlvbnMgPSBzZWxmLmV4dGVuc2lvbnNbZXh0X25hbWVdCisgICAgICAgICAgICBmb3Igb3B0IGluIG9wdGlvbnM6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5zZXRfZXh0ZW5zaW9uX3ZhbHVlKGV4dF9uYW1lLCBvcHQpOgorICAgICAgICAgICAgICAgICAgICBoYXNfY2hhbmdlcyA9IFRydWUKKyAgICAgICAgaWYgaGFzX2NoYW5nZXM6CisgICAgICAgICAgICBzZWxmLmV4dF91c2VyQ2ZnLlNhdmUoKQorCisKK2hlbHBfY29tbW9uID0gJycnXAorV2hlbiB5b3UgY2xpY2sgZWl0aGVyIHRoZSBBcHBseSBvciBPayBidXR0b25zLCBzZXR0aW5ncyBpbiB0aGlzCitkaWFsb2cgdGhhdCBhcmUgZGlmZmVyZW50IGZyb20gSURMRSdzIGRlZmF1bHQgYXJlIHNhdmVkIGluCithIC5pZGxlcmMgZGlyZWN0b3J5IGluIHlvdXIgaG9tZSBkaXJlY3RvcnkuIEV4Y2VwdCBhcyBub3RlZCwKK3RoZXNlIGNoYW5nZXMgYXBwbHkgdG8gYWxsIHZlcnNpb25zIG9mIElETEUgaW5zdGFsbGVkIG9uIHRoaXMKK21hY2hpbmUuIFNvbWUgZG8gbm90IHRha2UgYWZmZWN0IHVudGlsIElETEUgaXMgcmVzdGFydGVkLgorW0NhbmNlbF0gb25seSBjYW5jZWxzIGNoYW5nZXMgbWFkZSBzaW5jZSB0aGUgbGFzdCBzYXZlLgorJycnCitoZWxwX3BhZ2VzID0geworICAgICdIaWdobGlnaHRpbmcnOicnJworSGlnaGxpZ2h0aW5nOgorVGhlIElETEUgRGFyayBjb2xvciB0aGVtZSBpcyBuZXcgaW4gT2N0b2JlciAyMDE1LiAgSXQgY2FuIG9ubHkKK2JlIHVzZWQgd2l0aCBvbGRlciBJRExFIHJlbGVhc2VzIGlmIGl0IGlzIHNhdmVkIGFzIGEgY3VzdG9tCit0aGVtZSwgd2l0aCBhIGRpZmZlcmVudCBuYW1lLgorJycnCit9CisKKworZGVmIGlzX2ludChzKToKKyAgICAiUmV0dXJuICdzIGlzIGJsYW5rIG9yIHJlcHJlc2VudHMgYW4gaW50JyIKKyAgICBpZiBub3QgczoKKyAgICAgICAgcmV0dXJuIFRydWUKKyAgICB0cnk6CisgICAgICAgIGludChzKQorICAgICAgICByZXR1cm4gVHJ1ZQorICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICByZXR1cm4gRmFsc2UKKworCitjbGFzcyBWZXJ0aWNhbFNjcm9sbGVkRnJhbWUoRnJhbWUpOgorICAgICIiIkEgcHVyZSBUa2ludGVyIHZlcnRpY2FsbHkgc2Nyb2xsYWJsZSBmcmFtZS4KKworICAgICogVXNlIHRoZSAnaW50ZXJpb3InIGF0dHJpYnV0ZSB0byBwbGFjZSB3aWRnZXRzIGluc2lkZSB0aGUgc2Nyb2xsYWJsZSBmcmFtZQorICAgICogQ29uc3RydWN0IGFuZCBwYWNrL3BsYWNlL2dyaWQgbm9ybWFsbHkKKyAgICAqIFRoaXMgZnJhbWUgb25seSBhbGxvd3MgdmVydGljYWwgc2Nyb2xsaW5nCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhcmVudCwgKmFyZ3MsICoqa3cpOgorICAgICAgICBGcmFtZS5fX2luaXRfXyhzZWxmLCBwYXJlbnQsICphcmdzLCAqKmt3KQorCisgICAgICAgICMgY3JlYXRlIGEgY2FudmFzIG9iamVjdCBhbmQgYSB2ZXJ0aWNhbCBzY3JvbGxiYXIgZm9yIHNjcm9sbGluZyBpdAorICAgICAgICB2c2Nyb2xsYmFyID0gU2Nyb2xsYmFyKHNlbGYsIG9yaWVudD1WRVJUSUNBTCkKKyAgICAgICAgdnNjcm9sbGJhci5wYWNrKGZpbGw9WSwgc2lkZT1SSUdIVCwgZXhwYW5kPUZBTFNFKQorICAgICAgICBjYW52YXMgPSBDYW52YXMoc2VsZiwgYmQ9MCwgaGlnaGxpZ2h0dGhpY2tuZXNzPTAsCisgICAgICAgICAgICAgICAgICAgICAgICB5c2Nyb2xsY29tbWFuZD12c2Nyb2xsYmFyLnNldCwgd2lkdGg9MjQwKQorICAgICAgICBjYW52YXMucGFjayhzaWRlPUxFRlQsIGZpbGw9Qk9USCwgZXhwYW5kPVRSVUUpCisgICAgICAgIHZzY3JvbGxiYXIuY29uZmlnKGNvbW1hbmQ9Y2FudmFzLnl2aWV3KQorCisgICAgICAgICMgcmVzZXQgdGhlIHZpZXcKKyAgICAgICAgY2FudmFzLnh2aWV3X21vdmV0bygwKQorICAgICAgICBjYW52YXMueXZpZXdfbW92ZXRvKDApCisKKyAgICAgICAgIyBjcmVhdGUgYSBmcmFtZSBpbnNpZGUgdGhlIGNhbnZhcyB3aGljaCB3aWxsIGJlIHNjcm9sbGVkIHdpdGggaXQKKyAgICAgICAgc2VsZi5pbnRlcmlvciA9IGludGVyaW9yID0gRnJhbWUoY2FudmFzKQorICAgICAgICBpbnRlcmlvcl9pZCA9IGNhbnZhcy5jcmVhdGVfd2luZG93KDAsIDAsIHdpbmRvdz1pbnRlcmlvciwgYW5jaG9yPU5XKQorCisgICAgICAgICMgdHJhY2sgY2hhbmdlcyB0byB0aGUgY2FudmFzIGFuZCBmcmFtZSB3aWR0aCBhbmQgc3luYyB0aGVtLAorICAgICAgICAjIGFsc28gdXBkYXRpbmcgdGhlIHNjcm9sbGJhcgorICAgICAgICBkZWYgX2NvbmZpZ3VyZV9pbnRlcmlvcihldmVudCk6CisgICAgICAgICAgICAjIHVwZGF0ZSB0aGUgc2Nyb2xsYmFycyB0byBtYXRjaCB0aGUgc2l6ZSBvZiB0aGUgaW5uZXIgZnJhbWUKKyAgICAgICAgICAgIHNpemUgPSAoaW50ZXJpb3Iud2luZm9fcmVxd2lkdGgoKSwgaW50ZXJpb3Iud2luZm9fcmVxaGVpZ2h0KCkpCisgICAgICAgICAgICBjYW52YXMuY29uZmlnKHNjcm9sbHJlZ2lvbj0iMCAwICVzICVzIiAlIHNpemUpCisgICAgICAgIGludGVyaW9yLmJpbmQoJzxDb25maWd1cmU+JywgX2NvbmZpZ3VyZV9pbnRlcmlvcikKKworICAgICAgICBkZWYgX2NvbmZpZ3VyZV9jYW52YXMoZXZlbnQpOgorICAgICAgICAgICAgaWYgaW50ZXJpb3Iud2luZm9fcmVxd2lkdGgoKSAhPSBjYW52YXMud2luZm9fd2lkdGgoKToKKyAgICAgICAgICAgICAgICAjIHVwZGF0ZSB0aGUgaW5uZXIgZnJhbWUncyB3aWR0aCB0byBmaWxsIHRoZSBjYW52YXMKKyAgICAgICAgICAgICAgICBjYW52YXMuaXRlbWNvbmZpZ3VyZShpbnRlcmlvcl9pZCwgd2lkdGg9Y2FudmFzLndpbmZvX3dpZHRoKCkpCisgICAgICAgIGNhbnZhcy5iaW5kKCc8Q29uZmlndXJlPicsIF9jb25maWd1cmVfY2FudmFzKQorCisgICAgICAgIHJldHVybgorCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgI3Rlc3QgdGhlIGRpYWxvZwotICAgIHJvb3Q9VGsoKQotICAgIEJ1dHRvbihyb290LHRleHQ9J0RpYWxvZycsCi0gICAgICAgICAgICBjb21tYW5kPWxhbWJkYTpDb25maWdEaWFsb2cocm9vdCwnU2V0dGluZ3MnKSkucGFjaygpCi0gICAgcm9vdC5pbnN0YW5jZV9kaWN0PXt9Ci0gICAgcm9vdC5tYWlubG9vcCgpCisgICAgaW1wb3J0IHVuaXR0ZXN0CisgICAgdW5pdHRlc3QubWFpbignaWRsZWxpYi5pZGxlX3Rlc3QudGVzdF9jb25maWdkaWFsb2cnLAorICAgICAgICAgICAgICAgICAgdmVyYm9zaXR5PTIsIGV4aXQ9RmFsc2UpCisgICAgZnJvbSBpZGxlbGliLmlkbGVfdGVzdC5odGVzdCBpbXBvcnQgcnVuCisgICAgcnVuKENvbmZpZ0RpYWxvZykKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL2NvbmZpZ0hhbmRsZXIucHkgYi9MaWIvaWRsZWxpYi9jb25maWdIYW5kbGVyLnB5CmluZGV4IGE5NzRkNTQuLjUzMWVmYjQgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL2NvbmZpZ0hhbmRsZXIucHkKKysrIGIvTGliL2lkbGVsaWIvY29uZmlnSGFuZGxlci5weQpAQCAtMTUsMTMgKzE1LDE1IEBACiB0aGUgcmV0cmlldmFsIG9mIGNvbmZpZyBpbmZvcm1hdGlvbi4gV2hlbiBhIGRlZmF1bHQgaXMgcmV0dXJuZWQgaW5zdGVhZCBvZgogYSByZXF1ZXN0ZWQgY29uZmlnIHZhbHVlLCBhIG1lc3NhZ2UgaXMgcHJpbnRlZCB0byBzdGRlcnIgdG8gYWlkIGluCiBjb25maWd1cmF0aW9uIHByb2JsZW0gbm90aWZpY2F0aW9uIGFuZCByZXNvbHV0aW9uLgotCiAiIiIKKyMgVE9ET3MgYWRkZWQgT2N0IDIwMTQsIHRqcgorCiBpbXBvcnQgb3MKIGltcG9ydCBzeXMKIAotZnJvbSBpZGxlbGliIGltcG9ydCBtYWNvc3hTdXBwb3J0Ci1mcm9tIGNvbmZpZ3BhcnNlciBpbXBvcnQgQ29uZmlnUGFyc2VyLCBOb09wdGlvbkVycm9yLCBOb1NlY3Rpb25FcnJvcgorZnJvbSBjb25maWdwYXJzZXIgaW1wb3J0IENvbmZpZ1BhcnNlcgorZnJvbSB0a2ludGVyIGltcG9ydCBUa1ZlcnNpb24KK2Zyb20gdGtpbnRlci5mb250IGltcG9ydCBGb250LCBuYW1ldG9mb250CiAKIGNsYXNzIEludmFsaWRDb25maWdUeXBlKEV4Y2VwdGlvbik6IHBhc3MKIGNsYXNzIEludmFsaWRDb25maWdTZXQoRXhjZXB0aW9uKTogcGFzcwpAQCAtMzYsNyArMzgsNyBAQAogICAgICAgICAiIiIKICAgICAgICAgY2ZnRmlsZSAtIHN0cmluZywgZnVsbHkgc3BlY2lmaWVkIGNvbmZpZ3VyYXRpb24gZmlsZSBuYW1lCiAgICAgICAgICIiIgotICAgICAgICBzZWxmLmZpbGU9Y2ZnRmlsZQorICAgICAgICBzZWxmLmZpbGUgPSBjZmdGaWxlCiAgICAgICAgIENvbmZpZ1BhcnNlci5fX2luaXRfXyhzZWxmLCBkZWZhdWx0cz1jZmdEZWZhdWx0cywgc3RyaWN0PUZhbHNlKQogCiAgICAgZGVmIEdldChzZWxmLCBzZWN0aW9uLCBvcHRpb24sIHR5cGU9Tm9uZSwgZGVmYXVsdD1Ob25lLCByYXc9RmFsc2UpOgpAQCAtNDQsMjggKzQ2LDI3IEBACiAgICAgICAgIEdldCBhbiBvcHRpb24gdmFsdWUgZm9yIGdpdmVuIHNlY3Rpb24vb3B0aW9uIG9yIHJldHVybiBkZWZhdWx0LgogICAgICAgICBJZiB0eXBlIGlzIHNwZWNpZmllZCwgcmV0dXJuIGFzIHR5cGUuCiAgICAgICAgICIiIgorICAgICAgICAjIFRPRE8gVXNlIGRlZmF1bHQgYXMgZmFsbGJhY2ssIGF0IGxlYXN0IGlmIG5vdCBOb25lCisgICAgICAgICMgU2hvdWxkIGFsc28gcHJpbnQgV2FybmluZyhmaWxlLCBzZWN0aW9uLCBvcHRpb24pLgorICAgICAgICAjIEN1cnJlbnRseSBtYXkgcmFpc2UgVmFsdWVFcnJvcgogICAgICAgICBpZiBub3Qgc2VsZi5oYXNfb3B0aW9uKHNlY3Rpb24sIG9wdGlvbik6CiAgICAgICAgICAgICByZXR1cm4gZGVmYXVsdAotICAgICAgICBpZiB0eXBlPT0nYm9vbCc6CisgICAgICAgIGlmIHR5cGUgPT0gJ2Jvb2wnOgogICAgICAgICAgICAgcmV0dXJuIHNlbGYuZ2V0Ym9vbGVhbihzZWN0aW9uLCBvcHRpb24pCi0gICAgICAgIGVsaWYgdHlwZT09J2ludCc6CisgICAgICAgIGVsaWYgdHlwZSA9PSAnaW50JzoKICAgICAgICAgICAgIHJldHVybiBzZWxmLmdldGludChzZWN0aW9uLCBvcHRpb24pCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICByZXR1cm4gc2VsZi5nZXQoc2VjdGlvbiwgb3B0aW9uLCByYXc9cmF3KQogCi0gICAgZGVmIEdldE9wdGlvbkxpc3Qoc2VsZixzZWN0aW9uKToKLSAgICAgICAgIiIiCi0gICAgICAgIEdldCBhbiBvcHRpb24gbGlzdCBmb3IgZ2l2ZW4gc2VjdGlvbgotICAgICAgICAiIiIKKyAgICBkZWYgR2V0T3B0aW9uTGlzdChzZWxmLCBzZWN0aW9uKToKKyAgICAgICAgIlJldHVybiBhIGxpc3Qgb2Ygb3B0aW9ucyBmb3IgZ2l2ZW4gc2VjdGlvbiwgZWxzZSBbXS4iCiAgICAgICAgIGlmIHNlbGYuaGFzX3NlY3Rpb24oc2VjdGlvbik6CiAgICAgICAgICAgICByZXR1cm4gc2VsZi5vcHRpb25zKHNlY3Rpb24pCiAgICAgICAgIGVsc2U6ICAjcmV0dXJuIGEgZGVmYXVsdCB2YWx1ZQogICAgICAgICAgICAgcmV0dXJuIFtdCiAKICAgICBkZWYgTG9hZChzZWxmKToKLSAgICAgICAgIiIiCi0gICAgICAgIExvYWQgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBmcm9tIGRpc2sKLSAgICAgICAgIiIiCisgICAgICAgICJMb2FkIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgZnJvbSBkaXNrLiIKICAgICAgICAgc2VsZi5yZWFkKHNlbGYuZmlsZSkKIAogY2xhc3MgSWRsZVVzZXJDb25mUGFyc2VyKElkbGVDb25mUGFyc2VyKToKQEAgLTczLDYxICs3NCw1MCBAQAogICAgIElkbGVDb25maWdQYXJzZXIgc3BlY2lhbGlzZWQgZm9yIHVzZXIgY29uZmlndXJhdGlvbiBoYW5kbGluZy4KICAgICAiIiIKIAotICAgIGRlZiBBZGRTZWN0aW9uKHNlbGYsc2VjdGlvbik6Ci0gICAgICAgICIiIgotICAgICAgICBpZiBzZWN0aW9uIGRvZXNuJ3QgZXhpc3QsIGFkZCBpdAotICAgICAgICAiIiIKKyAgICBkZWYgQWRkU2VjdGlvbihzZWxmLCBzZWN0aW9uKToKKyAgICAgICAgIklmIHNlY3Rpb24gZG9lc24ndCBleGlzdCwgYWRkIGl0LiIKICAgICAgICAgaWYgbm90IHNlbGYuaGFzX3NlY3Rpb24oc2VjdGlvbik6CiAgICAgICAgICAgICBzZWxmLmFkZF9zZWN0aW9uKHNlY3Rpb24pCiAKICAgICBkZWYgUmVtb3ZlRW1wdHlTZWN0aW9ucyhzZWxmKToKLSAgICAgICAgIiIiCi0gICAgICAgIHJlbW92ZSBhbnkgc2VjdGlvbnMgdGhhdCBoYXZlIG5vIG9wdGlvbnMKLSAgICAgICAgIiIiCisgICAgICAgICJSZW1vdmUgYW55IHNlY3Rpb25zIHRoYXQgaGF2ZSBubyBvcHRpb25zLiIKICAgICAgICAgZm9yIHNlY3Rpb24gaW4gc2VsZi5zZWN0aW9ucygpOgogICAgICAgICAgICAgaWYgbm90IHNlbGYuR2V0T3B0aW9uTGlzdChzZWN0aW9uKToKICAgICAgICAgICAgICAgICBzZWxmLnJlbW92ZV9zZWN0aW9uKHNlY3Rpb24pCiAKICAgICBkZWYgSXNFbXB0eShzZWxmKToKLSAgICAgICAgIiIiCi0gICAgICAgIFJlbW92ZSBlbXB0eSBzZWN0aW9ucyBhbmQgdGhlbiByZXR1cm4gMSBpZiBwYXJzZXIgaGFzIG5vIHNlY3Rpb25zCi0gICAgICAgIGxlZnQsIGVsc2UgcmV0dXJuIDAuCi0gICAgICAgICIiIgorICAgICAgICAiUmV0dXJuIFRydWUgaWYgbm8gc2VjdGlvbnMgYWZ0ZXIgcmVtb3ZpbmcgZW1wdHkgc2VjdGlvbnMuIgogICAgICAgICBzZWxmLlJlbW92ZUVtcHR5U2VjdGlvbnMoKQotICAgICAgICBpZiBzZWxmLnNlY3Rpb25zKCk6Ci0gICAgICAgICAgICByZXR1cm4gMAotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgcmV0dXJuIG5vdCBzZWxmLnNlY3Rpb25zKCkKIAotICAgIGRlZiBSZW1vdmVPcHRpb24oc2VsZixzZWN0aW9uLG9wdGlvbik6Ci0gICAgICAgICIiIgotICAgICAgICBJZiBzZWN0aW9uL29wdGlvbiBleGlzdHMsIHJlbW92ZSBpdC4KLSAgICAgICAgUmV0dXJucyAxIGlmIG9wdGlvbiB3YXMgcmVtb3ZlZCwgMCBvdGhlcndpc2UuCisgICAgZGVmIFJlbW92ZU9wdGlvbihzZWxmLCBzZWN0aW9uLCBvcHRpb24pOgorICAgICAgICAiIiJSZXR1cm4gVHJ1ZSBpZiBvcHRpb24gaXMgcmVtb3ZlZCBmcm9tIHNlY3Rpb24sIGVsc2UgRmFsc2UuCisKKyAgICAgICAgRmFsc2UgaWYgZWl0aGVyIHNlY3Rpb24gZG9lcyBub3QgZXhpc3Qgb3IgZGlkIG5vdCBoYXZlIG9wdGlvbi4KICAgICAgICAgIiIiCiAgICAgICAgIGlmIHNlbGYuaGFzX3NlY3Rpb24oc2VjdGlvbik6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5yZW1vdmVfb3B0aW9uKHNlY3Rpb24sb3B0aW9uKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYucmVtb3ZlX29wdGlvbihzZWN0aW9uLCBvcHRpb24pCisgICAgICAgIHJldHVybiBGYWxzZQogCi0gICAgZGVmIFNldE9wdGlvbihzZWxmLHNlY3Rpb24sb3B0aW9uLHZhbHVlKToKKyAgICBkZWYgU2V0T3B0aW9uKHNlbGYsIHNlY3Rpb24sIG9wdGlvbiwgdmFsdWUpOgorICAgICAgICAiIiJSZXR1cm4gVHJ1ZSBpZiBvcHRpb24gaXMgYWRkZWQgb3IgY2hhbmdlZCB0byB2YWx1ZSwgZWxzZSBGYWxzZS4KKworICAgICAgICBBZGQgc2VjdGlvbiBpZiByZXF1aXJlZC4gIEZhbHNlIG1lYW5zIG9wdGlvbiBhbHJlYWR5IGhhZCB2YWx1ZS4KICAgICAgICAgIiIiCi0gICAgICAgIFNldHMgb3B0aW9uIHRvIHZhbHVlLCBhZGRpbmcgc2VjdGlvbiBpZiByZXF1aXJlZC4KLSAgICAgICAgUmV0dXJucyAxIGlmIG9wdGlvbiB3YXMgYWRkZWQgb3IgY2hhbmdlZCwgb3RoZXJ3aXNlIDAuCi0gICAgICAgICIiIgotICAgICAgICBpZiBzZWxmLmhhc19vcHRpb24oc2VjdGlvbixvcHRpb24pOgotICAgICAgICAgICAgaWYgc2VsZi5nZXQoc2VjdGlvbixvcHRpb24pPT12YWx1ZToKLSAgICAgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICBpZiBzZWxmLmhhc19vcHRpb24oc2VjdGlvbiwgb3B0aW9uKToKKyAgICAgICAgICAgIGlmIHNlbGYuZ2V0KHNlY3Rpb24sIG9wdGlvbikgPT0gdmFsdWU6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuc2V0KHNlY3Rpb24sb3B0aW9uLHZhbHVlKQotICAgICAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgICAgICAgICAgc2VsZi5zZXQoc2VjdGlvbiwgb3B0aW9uLCB2YWx1ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgaWYgbm90IHNlbGYuaGFzX3NlY3Rpb24oc2VjdGlvbik6CiAgICAgICAgICAgICAgICAgc2VsZi5hZGRfc2VjdGlvbihzZWN0aW9uKQotICAgICAgICAgICAgc2VsZi5zZXQoc2VjdGlvbixvcHRpb24sdmFsdWUpCi0gICAgICAgICAgICByZXR1cm4gMQorICAgICAgICAgICAgc2VsZi5zZXQoc2VjdGlvbiwgb3B0aW9uLCB2YWx1ZSkKKyAgICAgICAgICAgIHJldHVybiBUcnVlCiAKICAgICBkZWYgUmVtb3ZlRmlsZShzZWxmKToKLSAgICAgICAgIiIiCi0gICAgICAgIFJlbW92ZXMgdGhlIHVzZXIgY29uZmlnIGZpbGUgZnJvbSBkaXNrIGlmIGl0IGV4aXN0cy4KLSAgICAgICAgIiIiCisgICAgICAgICJSZW1vdmUgdXNlciBjb25maWcgZmlsZSBzZWxmLmZpbGUgZnJvbSBkaXNrIGlmIGl0IGV4aXN0cy4iCiAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHNlbGYuZmlsZSk6CiAgICAgICAgICAgICBvcy5yZW1vdmUoc2VsZi5maWxlKQogCkBAIC0xNTEsNjIgKzE0MSw1OSBAQAogICAgICAgICAgICAgc2VsZi5SZW1vdmVGaWxlKCkKIAogY2xhc3MgSWRsZUNvbmY6Ci0gICAgIiIiCi0gICAgaG9sZHMgY29uZmlnIHBhcnNlcnMgZm9yIGFsbCBpZGxlIGNvbmZpZyBmaWxlczoKLSAgICBkZWZhdWx0IGNvbmZpZyBmaWxlcwotICAgICAgICAoaWRsZSBpbnN0YWxsIGRpcikvY29uZmlnLW1haW4uZGVmCi0gICAgICAgIChpZGxlIGluc3RhbGwgZGlyKS9jb25maWctZXh0ZW5zaW9ucy5kZWYKLSAgICAgICAgKGlkbGUgaW5zdGFsbCBkaXIpL2NvbmZpZy1oaWdobGlnaHQuZGVmCi0gICAgICAgIChpZGxlIGluc3RhbGwgZGlyKS9jb25maWcta2V5cy5kZWYKLSAgICB1c2VyIGNvbmZpZyAgZmlsZXMKLSAgICAgICAgKHVzZXIgaG9tZSBkaXIpLy5pZGxlcmMvY29uZmlnLW1haW4uY2ZnCi0gICAgICAgICh1c2VyIGhvbWUgZGlyKS8uaWRsZXJjL2NvbmZpZy1leHRlbnNpb25zLmNmZwotICAgICAgICAodXNlciBob21lIGRpcikvLmlkbGVyYy9jb25maWctaGlnaGxpZ2h0LmNmZwotICAgICAgICAodXNlciBob21lIGRpcikvLmlkbGVyYy9jb25maWcta2V5cy5jZmcKKyAgICAiIiJIb2xkIGNvbmZpZyBwYXJzZXJzIGZvciBhbGwgaWRsZSBjb25maWcgZmlsZXMgaW4gc2luZ2xldG9uIGluc3RhbmNlLgorCisgICAgRGVmYXVsdCBjb25maWcgZmlsZXMsIHNlbGYuZGVmYXVsdENmZyAtLQorICAgICAgICBmb3IgY29uZmlnX3R5cGUgaW4gc2VsZi5jb25maWdfdHlwZXM6CisgICAgICAgICAgICAoaWRsZSBpbnN0YWxsIGRpcikvY29uZmlnLXtjb25maWctdHlwZX0uZGVmCisKKyAgICBVc2VyIGNvbmZpZyBmaWxlcywgc2VsZi51c2VyQ2ZnIC0tCisgICAgICAgIGZvciBjb25maWdfdHlwZSBpbiBzZWxmLmNvbmZpZ190eXBlczoKKyAgICAgICAgKHVzZXIgaG9tZSBkaXIpLy5pZGxlcmMvY29uZmlnLXtjb25maWctdHlwZX0uY2ZnCiAgICAgIiIiCiAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICBzZWxmLmRlZmF1bHRDZmc9e30KLSAgICAgICAgc2VsZi51c2VyQ2ZnPXt9Ci0gICAgICAgIHNlbGYuY2ZnPXt9CisgICAgICAgIHNlbGYuY29uZmlnX3R5cGVzID0gKCdtYWluJywgJ2V4dGVuc2lvbnMnLCAnaGlnaGxpZ2h0JywgJ2tleXMnKQorICAgICAgICBzZWxmLmRlZmF1bHRDZmcgPSB7fQorICAgICAgICBzZWxmLnVzZXJDZmcgPSB7fQorICAgICAgICBzZWxmLmNmZyA9IHt9ICAjIFRPRE8gdXNlIHRvIHNlbGVjdCB1c2VyQ2ZnIHZzIGRlZmF1bHRDZmcKICAgICAgICAgc2VsZi5DcmVhdGVDb25maWdIYW5kbGVycygpCiAgICAgICAgIHNlbGYuTG9hZENmZ0ZpbGVzKCkKLSAgICAgICAgI3NlbGYuTG9hZENmZygpCisKIAogICAgIGRlZiBDcmVhdGVDb25maWdIYW5kbGVycyhzZWxmKToKLSAgICAgICAgIiIiCi0gICAgICAgIHNldCB1cCBhIGRpY3Rpb25hcnkgb2YgY29uZmlnIHBhcnNlcnMgZm9yIGRlZmF1bHQgYW5kIHVzZXIKLSAgICAgICAgY29uZmlndXJhdGlvbnMgcmVzcGVjdGl2ZWx5Ci0gICAgICAgICIiIgorICAgICAgICAiUG9wdWxhdGUgZGVmYXVsdCBhbmQgdXNlciBjb25maWcgcGFyc2VyIGRpY3Rpb25hcmllcy4iCiAgICAgICAgICNidWlsZCBpZGxlIGluc3RhbGwgcGF0aAogICAgICAgICBpZiBfX25hbWVfXyAhPSAnX19tYWluX18nOiAjIHdlIHdlcmUgaW1wb3J0ZWQKICAgICAgICAgICAgIGlkbGVEaXI9b3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKQogICAgICAgICBlbHNlOiAjIHdlIHdlcmUgZXhlYydlZCAoZm9yIHRlc3Rpbmcgb25seSkKICAgICAgICAgICAgIGlkbGVEaXI9b3MucGF0aC5hYnNwYXRoKHN5cy5wYXRoWzBdKQogICAgICAgICB1c2VyRGlyPXNlbGYuR2V0VXNlckNmZ0RpcigpCi0gICAgICAgIGNvbmZpZ1R5cGVzPSgnbWFpbicsJ2V4dGVuc2lvbnMnLCdoaWdobGlnaHQnLCdrZXlzJykKLSAgICAgICAgZGVmQ2ZnRmlsZXM9e30KLSAgICAgICAgdXNyQ2ZnRmlsZXM9e30KLSAgICAgICAgZm9yIGNmZ1R5cGUgaW4gY29uZmlnVHlwZXM6ICNidWlsZCBjb25maWcgZmlsZSBuYW1lcwotICAgICAgICAgICAgZGVmQ2ZnRmlsZXNbY2ZnVHlwZV09b3MucGF0aC5qb2luKGlkbGVEaXIsJ2NvbmZpZy0nK2NmZ1R5cGUrJy5kZWYnKQotICAgICAgICAgICAgdXNyQ2ZnRmlsZXNbY2ZnVHlwZV09b3MucGF0aC5qb2luKHVzZXJEaXIsJ2NvbmZpZy0nK2NmZ1R5cGUrJy5jZmcnKQotICAgICAgICBmb3IgY2ZnVHlwZSBpbiBjb25maWdUeXBlczogI2NyZWF0ZSBjb25maWcgcGFyc2VycwotICAgICAgICAgICAgc2VsZi5kZWZhdWx0Q2ZnW2NmZ1R5cGVdPUlkbGVDb25mUGFyc2VyKGRlZkNmZ0ZpbGVzW2NmZ1R5cGVdKQotICAgICAgICAgICAgc2VsZi51c2VyQ2ZnW2NmZ1R5cGVdPUlkbGVVc2VyQ29uZlBhcnNlcih1c3JDZmdGaWxlc1tjZmdUeXBlXSkKKworICAgICAgICBkZWZDZmdGaWxlcyA9IHt9CisgICAgICAgIHVzckNmZ0ZpbGVzID0ge30KKyAgICAgICAgIyBUT0RPIGVsaW1pbmF0ZSB0aGVzZSB0ZW1wb3JhcmllcyBieSBjb21iaW5pbmcgbG9vcHMKKyAgICAgICAgZm9yIGNmZ1R5cGUgaW4gc2VsZi5jb25maWdfdHlwZXM6ICNidWlsZCBjb25maWcgZmlsZSBuYW1lcworICAgICAgICAgICAgZGVmQ2ZnRmlsZXNbY2ZnVHlwZV0gPSBvcy5wYXRoLmpvaW4oCisgICAgICAgICAgICAgICAgICAgIGlkbGVEaXIsICdjb25maWctJyArIGNmZ1R5cGUgKyAnLmRlZicpCisgICAgICAgICAgICB1c3JDZmdGaWxlc1tjZmdUeXBlXSA9IG9zLnBhdGguam9pbigKKyAgICAgICAgICAgICAgICAgICAgdXNlckRpciwgJ2NvbmZpZy0nICsgY2ZnVHlwZSArICcuY2ZnJykKKyAgICAgICAgZm9yIGNmZ1R5cGUgaW4gc2VsZi5jb25maWdfdHlwZXM6ICNjcmVhdGUgY29uZmlnIHBhcnNlcnMKKyAgICAgICAgICAgIHNlbGYuZGVmYXVsdENmZ1tjZmdUeXBlXSA9IElkbGVDb25mUGFyc2VyKGRlZkNmZ0ZpbGVzW2NmZ1R5cGVdKQorICAgICAgICAgICAgc2VsZi51c2VyQ2ZnW2NmZ1R5cGVdID0gSWRsZVVzZXJDb25mUGFyc2VyKHVzckNmZ0ZpbGVzW2NmZ1R5cGVdKQogCiAgICAgZGVmIEdldFVzZXJDZmdEaXIoc2VsZik6Ci0gICAgICAgICIiIgotICAgICAgICBDcmVhdGVzIChpZiByZXF1aXJlZCkgYW5kIHJldHVybnMgYSBmaWxlc3lzdGVtIGRpcmVjdG9yeSBmb3Igc3RvcmluZwotICAgICAgICB1c2VyIGNvbmZpZyBmaWxlcy4KKyAgICAgICAgIiIiUmV0dXJuIGEgZmlsZXN5c3RlbSBkaXJlY3RvcnkgZm9yIHN0b3JpbmcgdXNlciBjb25maWcgZmlsZXMuCiAKKyAgICAgICAgQ3JlYXRlcyBpdCBpZiByZXF1aXJlZC4KICAgICAgICAgIiIiCiAgICAgICAgIGNmZ0RpciA9ICcuaWRsZXJjJwogICAgICAgICB1c2VyRGlyID0gb3MucGF0aC5leHBhbmR1c2VyKCd+JykKICAgICAgICAgaWYgdXNlckRpciAhPSAnfic6ICMgZXhwYW5kdXNlcigpIGZvdW5kIHVzZXIgaG9tZSBkaXIKICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyh1c2VyRGlyKToKLSAgICAgICAgICAgICAgICB3YXJuID0gKCdcbiBXYXJuaW5nOiBvcy5wYXRoLmV4cGFuZHVzZXIoIn4iKSBwb2ludHMgdG9cbiAnKwotICAgICAgICAgICAgICAgICAgICAgICAgdXNlckRpcisnLFxuIGJ1dCB0aGUgcGF0aCBkb2VzIG5vdCBleGlzdC5cbicpCisgICAgICAgICAgICAgICAgd2FybiA9ICgnXG4gV2FybmluZzogb3MucGF0aC5leHBhbmR1c2VyKCJ+IikgcG9pbnRzIHRvXG4gJyArCisgICAgICAgICAgICAgICAgICAgICAgICB1c2VyRGlyICsgJyxcbiBidXQgdGhlIHBhdGggZG9lcyBub3QgZXhpc3QuJykKICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUod2FybikKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQod2FybiwgZmlsZT1zeXMuc3RkZXJyKQogICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICAgICAgdXNlckRpciA9ICd+JwpAQCAtMjE4LDQ1ICsyMDUsNDQgQEAKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBvcy5ta2Rpcih1c2VyRGlyKQogICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6Ci0gICAgICAgICAgICAgICAgd2FybiA9ICgnXG4gV2FybmluZzogdW5hYmxlIHRvIGNyZWF0ZSB1c2VyIGNvbmZpZyBkaXJlY3RvcnlcbicrCi0gICAgICAgICAgICAgICAgICAgICAgICB1c2VyRGlyKydcbiBDaGVjayBwYXRoIGFuZCBwZXJtaXNzaW9ucy5cbiBFeGl0aW5nIVxuXG4nKQotICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUod2FybikKKyAgICAgICAgICAgICAgICB3YXJuID0gKCdcbiBXYXJuaW5nOiB1bmFibGUgdG8gY3JlYXRlIHVzZXIgY29uZmlnIGRpcmVjdG9yeVxuJyArCisgICAgICAgICAgICAgICAgICAgICAgICB1c2VyRGlyICsgJ1xuIENoZWNrIHBhdGggYW5kIHBlcm1pc3Npb25zLlxuIEV4aXRpbmchXG4nKQorICAgICAgICAgICAgICAgIHByaW50KHdhcm4sIGZpbGU9c3lzLnN0ZGVycikKICAgICAgICAgICAgICAgICByYWlzZSBTeXN0ZW1FeGl0CisgICAgICAgICMgVE9ETyBjb250aW51ZSB3aXRob3V0IHVzZXJESXIgaW5zdGVhZCBvZiBleGl0CiAgICAgICAgIHJldHVybiB1c2VyRGlyCiAKICAgICBkZWYgR2V0T3B0aW9uKHNlbGYsIGNvbmZpZ1R5cGUsIHNlY3Rpb24sIG9wdGlvbiwgZGVmYXVsdD1Ob25lLCB0eXBlPU5vbmUsCiAgICAgICAgICAgICAgICAgICB3YXJuX29uX2RlZmF1bHQ9VHJ1ZSwgcmF3PUZhbHNlKToKLSAgICAgICAgIiIiCi0gICAgICAgIEdldCBhbiBvcHRpb24gdmFsdWUgZm9yIGdpdmVuIGNvbmZpZyB0eXBlIGFuZCBnaXZlbiBnZW5lcmFsCi0gICAgICAgIGNvbmZpZ3VyYXRpb24gc2VjdGlvbi9vcHRpb24gb3IgcmV0dXJuIGEgZGVmYXVsdC4gSWYgdHlwZSBpcyBzcGVjaWZpZWQsCi0gICAgICAgIHJldHVybiBhcyB0eXBlLiBGaXJzdGx5IHRoZSB1c2VyIGNvbmZpZ3VyYXRpb24gaXMgY2hlY2tlZCwgd2l0aCBhCi0gICAgICAgIGZhbGxiYWNrIHRvIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24sIGFuZCBhIGZpbmFsICdjYXRjaCBhbGwnCi0gICAgICAgIGZhbGxiYWNrIHRvIGEgdXNlYWJsZSBwYXNzZWQtaW4gZGVmYXVsdCBpZiB0aGUgb3B0aW9uIGlzbid0IHByZXNlbnQgaW4KLSAgICAgICAgZWl0aGVyIHRoZSB1c2VyIG9yIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24uCi0gICAgICAgIGNvbmZpZ1R5cGUgbXVzdCBiZSBvbmUgb2YgKCdtYWluJywnZXh0ZW5zaW9ucycsJ2hpZ2hsaWdodCcsJ2tleXMnKQotICAgICAgICBJZiBhIGRlZmF1bHQgaXMgcmV0dXJuZWQsIGFuZCB3YXJuX29uX2RlZmF1bHQgaXMgVHJ1ZSwgYSB3YXJuaW5nIGlzCi0gICAgICAgIHByaW50ZWQgdG8gc3RkZXJyLgorICAgICAgICAiIiJSZXR1cm4gYSB2YWx1ZSBmb3IgY29uZmlnVHlwZSBzZWN0aW9uIG9wdGlvbiwgb3IgZGVmYXVsdC4KIAorICAgICAgICBJZiB0eXBlIGlzIG5vdCBOb25lLCByZXR1cm4gYSB2YWx1ZSBvZiB0aGF0IHR5cGUuICBBbHNvIHBhc3MgcmF3CisgICAgICAgIHRvIHRoZSBjb25maWcgcGFyc2VyLiAgRmlyc3QgdHJ5IHRvIHJldHVybiBhIHZhbGlkIHZhbHVlCisgICAgICAgIChpbmNsdWRpbmcgdHlwZSkgZnJvbSBhIHVzZXIgY29uZmlndXJhdGlvbi4gSWYgdGhhdCBmYWlscywgdHJ5CisgICAgICAgIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24uIElmIHRoYXQgZmFpbHMsIHJldHVybiBkZWZhdWx0LCB3aXRoIGEKKyAgICAgICAgZGVmYXVsdCBvZiBOb25lLgorCisgICAgICAgIFdhcm4gaWYgZWl0aGVyIHVzZXIgb3IgZGVmYXVsdCBjb25maWd1cmF0aW9ucyBoYXZlIGFuIGludmFsaWQgdmFsdWUuCisgICAgICAgIFdhcm4gaWYgZGVmYXVsdCBpcyByZXR1cm5lZCBhbmQgd2Fybl9vbl9kZWZhdWx0IGlzIFRydWUuCiAgICAgICAgICIiIgogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBpZiBzZWxmLnVzZXJDZmdbY29uZmlnVHlwZV0uaGFzX29wdGlvbihzZWN0aW9uLG9wdGlvbik6CisgICAgICAgICAgICBpZiBzZWxmLnVzZXJDZmdbY29uZmlnVHlwZV0uaGFzX29wdGlvbihzZWN0aW9uLCBvcHRpb24pOgogICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnVzZXJDZmdbY29uZmlnVHlwZV0uR2V0KHNlY3Rpb24sIG9wdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPXR5cGUsIHJhdz1yYXcpCiAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgogICAgICAgICAgICAgd2FybmluZyA9ICgnXG4gV2FybmluZzogY29uZmlnSGFuZGxlci5weSAtIElkbGVDb25mLkdldE9wdGlvbiAtXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICcgaW52YWxpZCAlciB2YWx1ZSBmb3IgY29uZmlndXJhdGlvbiBvcHRpb24gJXJcbicKLSAgICAgICAgICAgICAgICAgICAgICAgJyBmcm9tIHNlY3Rpb24gJXI6ICVyXG4nICUKKyAgICAgICAgICAgICAgICAgICAgICAgJyBmcm9tIHNlY3Rpb24gJXI6ICVyJyAlCiAgICAgICAgICAgICAgICAgICAgICAgICh0eXBlLCBvcHRpb24sIHNlY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnVzZXJDZmdbY29uZmlnVHlwZV0uR2V0KHNlY3Rpb24sIG9wdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3PXJhdykpKQorICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnVzZXJDZmdbY29uZmlnVHlwZV0uR2V0KHNlY3Rpb24sIG9wdGlvbiwgcmF3PXJhdykpKQogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUod2FybmluZykKKyAgICAgICAgICAgICAgICBwcmludCh3YXJuaW5nLCBmaWxlPXN5cy5zdGRlcnIpCiAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGlmIHNlbGYuZGVmYXVsdENmZ1tjb25maWdUeXBlXS5oYXNfb3B0aW9uKHNlY3Rpb24sb3B0aW9uKToKLSAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5kZWZhdWx0Q2ZnW2NvbmZpZ1R5cGVdLkdldChzZWN0aW9uLCBvcHRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT10eXBlLCByYXc9cmF3KQorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmRlZmF1bHRDZmdbY29uZmlnVHlwZV0uR2V0KAorICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiwgb3B0aW9uLCB0eXBlPXR5cGUsIHJhdz1yYXcpCiAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgogICAgICAgICAgICAgcGFzcwogICAgICAgICAjcmV0dXJuaW5nIGRlZmF1bHQsIHByaW50IHdhcm5pbmcKQEAgLTI2NCwyOSArMjUwLDI4IEBACiAgICAgICAgICAgICB3YXJuaW5nID0gKCdcbiBXYXJuaW5nOiBjb25maWdIYW5kbGVyLnB5IC0gSWRsZUNvbmYuR2V0T3B0aW9uIC1cbicKICAgICAgICAgICAgICAgICAgICAgICAgJyBwcm9ibGVtIHJldHJpZXZpbmcgY29uZmlndXJhdGlvbiBvcHRpb24gJXJcbicKICAgICAgICAgICAgICAgICAgICAgICAgJyBmcm9tIHNlY3Rpb24gJXIuXG4nCi0gICAgICAgICAgICAgICAgICAgICAgICcgcmV0dXJuaW5nIGRlZmF1bHQgdmFsdWU6ICVyXG4nICUKKyAgICAgICAgICAgICAgICAgICAgICAgJyByZXR1cm5pbmcgZGVmYXVsdCB2YWx1ZTogJXInICUKICAgICAgICAgICAgICAgICAgICAgICAgKG9wdGlvbiwgc2VjdGlvbiwgZGVmYXVsdCkpCiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSh3YXJuaW5nKQorICAgICAgICAgICAgICAgIHByaW50KHdhcm5pbmcsIGZpbGU9c3lzLnN0ZGVycikKICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgcmV0dXJuIGRlZmF1bHQKKwogICAgIGRlZiBTZXRPcHRpb24oc2VsZiwgY29uZmlnVHlwZSwgc2VjdGlvbiwgb3B0aW9uLCB2YWx1ZSk6Ci0gICAgICAgICIiIkluIHVzZXIncyBjb25maWcgZmlsZSwgc2V0IHNlY3Rpb24ncyBvcHRpb24gdG8gdmFsdWUuCi0gICAgICAgICIiIgorICAgICAgICAiIiJTZXQgc2VjdGlvbiBvcHRpb24gdG8gdmFsdWUgaW4gdXNlciBjb25maWcgZmlsZS4iIiIKICAgICAgICAgc2VsZi51c2VyQ2ZnW2NvbmZpZ1R5cGVdLlNldE9wdGlvbihzZWN0aW9uLCBvcHRpb24sIHZhbHVlKQogCiAgICAgZGVmIEdldFNlY3Rpb25MaXN0KHNlbGYsIGNvbmZpZ1NldCwgY29uZmlnVHlwZSk6Ci0gICAgICAgICIiIgotICAgICAgICBHZXQgYSBsaXN0IG9mIHNlY3Rpb25zIGZyb20gZWl0aGVyIHRoZSB1c2VyIG9yIGRlZmF1bHQgY29uZmlnIGZvcgotICAgICAgICB0aGUgZ2l2ZW4gY29uZmlnIHR5cGUuCisgICAgICAgICIiIlJldHVybiBzZWN0aW9ucyBmb3IgY29uZmlnU2V0IGNvbmZpZ1R5cGUgY29uZmlndXJhdGlvbi4KKwogICAgICAgICBjb25maWdTZXQgbXVzdCBiZSBlaXRoZXIgJ3VzZXInIG9yICdkZWZhdWx0JwotICAgICAgICBjb25maWdUeXBlIG11c3QgYmUgb25lIG9mICgnbWFpbicsJ2V4dGVuc2lvbnMnLCdoaWdobGlnaHQnLCdrZXlzJykKKyAgICAgICAgY29uZmlnVHlwZSBtdXN0IGJlIGluIHNlbGYuY29uZmlnX3R5cGVzLgogICAgICAgICAiIiIKLSAgICAgICAgaWYgbm90IChjb25maWdUeXBlIGluICgnbWFpbicsJ2V4dGVuc2lvbnMnLCdoaWdobGlnaHQnLCdrZXlzJykpOgorICAgICAgICBpZiBub3QgKGNvbmZpZ1R5cGUgaW4gc2VsZi5jb25maWdfdHlwZXMpOgogICAgICAgICAgICAgcmFpc2UgSW52YWxpZENvbmZpZ1R5cGUoJ0ludmFsaWQgY29uZmlnVHlwZSBzcGVjaWZpZWQnKQogICAgICAgICBpZiBjb25maWdTZXQgPT0gJ3VzZXInOgotICAgICAgICAgICAgY2ZnUGFyc2VyPXNlbGYudXNlckNmZ1tjb25maWdUeXBlXQorICAgICAgICAgICAgY2ZnUGFyc2VyID0gc2VsZi51c2VyQ2ZnW2NvbmZpZ1R5cGVdCiAgICAgICAgIGVsaWYgY29uZmlnU2V0ID09ICdkZWZhdWx0JzoKICAgICAgICAgICAgIGNmZ1BhcnNlcj1zZWxmLmRlZmF1bHRDZmdbY29uZmlnVHlwZV0KICAgICAgICAgZWxzZToKQEAgLTI5NCwyNSArMjc5LDI3IEBACiAgICAgICAgIHJldHVybiBjZmdQYXJzZXIuc2VjdGlvbnMoKQogCiAgICAgZGVmIEdldEhpZ2hsaWdodChzZWxmLCB0aGVtZSwgZWxlbWVudCwgZmdCZz1Ob25lKToKLSAgICAgICAgIiIiCi0gICAgICAgIHJldHVybiBpbmRpdmlkdWFsIGhpZ2hsaWdodGluZyB0aGVtZSBlbGVtZW50cy4KLSAgICAgICAgZmdCZyAtIHN0cmluZyAoJ2ZnJ29yJ2JnJykgb3IgTm9uZSwgaWYgTm9uZSByZXR1cm4gYSBkaWN0aW9uYXJ5Ci0gICAgICAgIGNvbnRhaW5pbmcgZmcgYW5kIGJnIGNvbG91cnMgKGFwcHJvcHJpYXRlIGZvciBwYXNzaW5nIHRvIFRraW50ZXIgaW4sCi0gICAgICAgIGUuZy4sIGEgdGFnX2NvbmZpZyBjYWxsKSwgb3RoZXJ3aXNlIGZnIG9yIGJnIGNvbG91ciBvbmx5IGFzIHNwZWNpZmllZC4KKyAgICAgICAgIiIiUmV0dXJuIGluZGl2aWR1YWwgdGhlbWUgZWxlbWVudCBoaWdobGlnaHQgY29sb3IocykuCisKKyAgICAgICAgZmdCZyAtIHN0cmluZyAoJ2ZnJyBvciAnYmcnKSBvciBOb25lLgorICAgICAgICBJZiBOb25lLCByZXR1cm4gYSBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcgZmcgYW5kIGJnIGNvbG9ycyB3aXRoCisgICAgICAgIGtleXMgJ2ZvcmVncm91bmQnIGFuZCAnYmFja2dyb3VuZCcuICBPdGhlcndpc2UsIG9ubHkgcmV0dXJuCisgICAgICAgIGZnIG9yIGJnIGNvbG9yLCBhcyBzcGVjaWZpZWQuICBDb2xvcnMgYXJlIGludGVuZGVkIHRvIGJlCisgICAgICAgIGFwcHJvcHJpYXRlIGZvciBwYXNzaW5nIHRvIFRraW50ZXIgaW4sIGUuZy4sIGEgdGFnX2NvbmZpZyBjYWxsKS4KICAgICAgICAgIiIiCiAgICAgICAgIGlmIHNlbGYuZGVmYXVsdENmZ1snaGlnaGxpZ2h0J10uaGFzX3NlY3Rpb24odGhlbWUpOgotICAgICAgICAgICAgdGhlbWVEaWN0PXNlbGYuR2V0VGhlbWVEaWN0KCdkZWZhdWx0Jyx0aGVtZSkKKyAgICAgICAgICAgIHRoZW1lRGljdCA9IHNlbGYuR2V0VGhlbWVEaWN0KCdkZWZhdWx0JywgdGhlbWUpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICB0aGVtZURpY3Q9c2VsZi5HZXRUaGVtZURpY3QoJ3VzZXInLHRoZW1lKQotICAgICAgICBmb3JlPXRoZW1lRGljdFtlbGVtZW50KyctZm9yZWdyb3VuZCddCi0gICAgICAgIGlmIGVsZW1lbnQ9PSdjdXJzb3InOiAjdGhlcmUgaXMgbm8gY29uZmlnIHZhbHVlIGZvciBjdXJzb3IgYmcKLSAgICAgICAgICAgIGJhY2s9dGhlbWVEaWN0Wydub3JtYWwtYmFja2dyb3VuZCddCisgICAgICAgICAgICB0aGVtZURpY3QgPSBzZWxmLkdldFRoZW1lRGljdCgndXNlcicsIHRoZW1lKQorICAgICAgICBmb3JlID0gdGhlbWVEaWN0W2VsZW1lbnQgKyAnLWZvcmVncm91bmQnXQorICAgICAgICBpZiBlbGVtZW50ID09ICdjdXJzb3InOiAgIyBUaGVyZSBpcyBubyBjb25maWcgdmFsdWUgZm9yIGN1cnNvciBiZworICAgICAgICAgICAgYmFjayA9IHRoZW1lRGljdFsnbm9ybWFsLWJhY2tncm91bmQnXQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgYmFjaz10aGVtZURpY3RbZWxlbWVudCsnLWJhY2tncm91bmQnXQotICAgICAgICBoaWdobGlnaHQ9eyJmb3JlZ3JvdW5kIjogZm9yZSwiYmFja2dyb3VuZCI6IGJhY2t9Ci0gICAgICAgIGlmIG5vdCBmZ0JnOiAjcmV0dXJuIGRpY3Qgb2YgYm90aCBjb2xvdXJzCisgICAgICAgICAgICBiYWNrID0gdGhlbWVEaWN0W2VsZW1lbnQgKyAnLWJhY2tncm91bmQnXQorICAgICAgICBoaWdobGlnaHQgPSB7ImZvcmVncm91bmQiOiBmb3JlLCAiYmFja2dyb3VuZCI6IGJhY2t9CisgICAgICAgIGlmIG5vdCBmZ0JnOiAgIyBSZXR1cm4gZGljdCBvZiBib3RoIGNvbG9ycwogICAgICAgICAgICAgcmV0dXJuIGhpZ2hsaWdodAotICAgICAgICBlbHNlOiAjcmV0dXJuIHNwZWNpZmllZCBjb2xvdXIgb25seQorICAgICAgICBlbHNlOiAgIyBSZXR1cm4gc3BlY2lmaWVkIGNvbG9yIG9ubHkKICAgICAgICAgICAgIGlmIGZnQmcgPT0gJ2ZnJzoKICAgICAgICAgICAgICAgICByZXR1cm4gaGlnaGxpZ2h0WyJmb3JlZ3JvdW5kIl0KICAgICAgICAgICAgIGlmIGZnQmcgPT0gJ2JnJzoKQEAgLTMyMCwyNiArMzA3LDI2IEBACiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHJhaXNlIEludmFsaWRGZ0JnKCdJbnZhbGlkIGZnQmcgc3BlY2lmaWVkJykKIAotICAgIGRlZiBHZXRUaGVtZURpY3Qoc2VsZix0eXBlLHRoZW1lTmFtZSk6Ci0gICAgICAgICIiIgorICAgIGRlZiBHZXRUaGVtZURpY3Qoc2VsZiwgdHlwZSwgdGhlbWVOYW1lKToKKyAgICAgICAgIiIiUmV0dXJuIHtvcHRpb246dmFsdWV9IGRpY3QgZm9yIGVsZW1lbnRzIGluIHRoZW1lTmFtZS4KKwogICAgICAgICB0eXBlIC0gc3RyaW5nLCAnZGVmYXVsdCcgb3IgJ3VzZXInIHRoZW1lIHR5cGUKICAgICAgICAgdGhlbWVOYW1lIC0gc3RyaW5nLCB0aGVtZSBuYW1lCi0gICAgICAgIFJldHVybnMgYSBkaWN0aW9uYXJ5IHdoaWNoIGhvbGRzIHtvcHRpb246dmFsdWV9IGZvciBlYWNoIGVsZW1lbnQKLSAgICAgICAgaW4gdGhlIHNwZWNpZmllZCB0aGVtZS4gVmFsdWVzIGFyZSBsb2FkZWQgb3ZlciBhIHNldCBvZiB1bHRpbWF0ZSBsYXN0Ci0gICAgICAgIGZhbGxiYWNrIGRlZmF1bHRzIHRvIGd1YXJhbnRlZSB0aGF0IGFsbCB0aGVtZSBlbGVtZW50cyBhcmUgcHJlc2VudCBpbgotICAgICAgICBhIG5ld2x5IGNyZWF0ZWQgdGhlbWUuCisgICAgICAgIFZhbHVlcyBhcmUgbG9hZGVkIG92ZXIgdWx0aW1hdGUgZmFsbGJhY2sgZGVmYXVsdHMgdG8gZ3VhcmFudGVlCisgICAgICAgIHRoYXQgYWxsIHRoZW1lIGVsZW1lbnRzIGFyZSBwcmVzZW50IGluIGEgbmV3bHkgY3JlYXRlZCB0aGVtZS4KICAgICAgICAgIiIiCiAgICAgICAgIGlmIHR5cGUgPT0gJ3VzZXInOgotICAgICAgICAgICAgY2ZnUGFyc2VyPXNlbGYudXNlckNmZ1snaGlnaGxpZ2h0J10KKyAgICAgICAgICAgIGNmZ1BhcnNlciA9IHNlbGYudXNlckNmZ1snaGlnaGxpZ2h0J10KICAgICAgICAgZWxpZiB0eXBlID09ICdkZWZhdWx0JzoKLSAgICAgICAgICAgIGNmZ1BhcnNlcj1zZWxmLmRlZmF1bHRDZmdbJ2hpZ2hsaWdodCddCisgICAgICAgICAgICBjZmdQYXJzZXIgPSBzZWxmLmRlZmF1bHRDZmdbJ2hpZ2hsaWdodCddCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICByYWlzZSBJbnZhbGlkVGhlbWUoJ0ludmFsaWQgdGhlbWUgdHlwZSBzcGVjaWZpZWQnKQotICAgICAgICAjZm9yZWdyb3VuZCBhbmQgYmFja2dyb3VuZCB2YWx1ZXMgYXJlIHByb3ZkZWQgZm9yIGVhY2ggdGhlbWUgZWxlbWVudAotICAgICAgICAjKGFwYXJ0IGZyb20gY3Vyc29yKSBldmVuIHRob3VnaCBhbGwgdGhlc2UgdmFsdWVzIGFyZSBub3QgeWV0IHVzZWQKLSAgICAgICAgI2J5IGlkbGUsIHRvIGFsbG93IGZvciB0aGVpciB1c2UgaW4gdGhlIGZ1dHVyZS4gRGVmYXVsdCB2YWx1ZXMgYXJlCi0gICAgICAgICNnZW5lcmFsbHkgYmxhY2sgYW5kIHdoaXRlLgotICAgICAgICB0aGVtZT17ICdub3JtYWwtZm9yZWdyb3VuZCc6JyMwMDAwMDAnLAorICAgICAgICAjIFByb3ZpZGUgZm9yZWdyb3VuZCBhbmQgYmFja2dyb3VuZCBjb2xvcnMgZm9yIGVhY2ggdGhlbWUKKyAgICAgICAgIyBlbGVtZW50IChvdGhlciB0aGFuIGN1cnNvcikgZXZlbiB0aG91Z2ggc29tZSB2YWx1ZXMgYXJlIG5vdAorICAgICAgICAjIHlldCB1c2VkIGJ5IGlkbGUsIHRvIGFsbG93IGZvciB0aGVpciB1c2UgaW4gdGhlIGZ1dHVyZS4KKyAgICAgICAgIyBEZWZhdWx0IHZhbHVlcyBhcmUgZ2VuZXJhbGx5IGJsYWNrIGFuZCB3aGl0ZS4KKyAgICAgICAgIyBUT0RPIGNvcHkgdGhlbWUgZnJvbSBhIGNsYXNzIGF0dHJpYnV0ZS4KKyAgICAgICAgdGhlbWUgPXsnbm9ybWFsLWZvcmVncm91bmQnOicjMDAwMDAwJywKICAgICAgICAgICAgICAgICAnbm9ybWFsLWJhY2tncm91bmQnOicjZmZmZmZmJywKICAgICAgICAgICAgICAgICAna2V5d29yZC1mb3JlZ3JvdW5kJzonIzAwMDAwMCcsCiAgICAgICAgICAgICAgICAgJ2tleXdvcmQtYmFja2dyb3VuZCc6JyNmZmZmZmYnLApAQCAtMzY5LDUyICszNTYsNzQgQEAKICAgICAgICAgICAgICAgICAnY29uc29sZS1mb3JlZ3JvdW5kJzonIzAwMDAwMCcsCiAgICAgICAgICAgICAgICAgJ2NvbnNvbGUtYmFja2dyb3VuZCc6JyNmZmZmZmYnIH0KICAgICAgICAgZm9yIGVsZW1lbnQgaW4gdGhlbWU6Ci0gICAgICAgICAgICBpZiBub3QgY2ZnUGFyc2VyLmhhc19vcHRpb24odGhlbWVOYW1lLGVsZW1lbnQpOgotICAgICAgICAgICAgICAgICN3ZSBhcmUgZ29pbmcgdG8gcmV0dXJuIGEgZGVmYXVsdCwgcHJpbnQgd2FybmluZwotICAgICAgICAgICAgICAgIHdhcm5pbmc9KCdcbiBXYXJuaW5nOiBjb25maWdIYW5kbGVyLnB5IC0gSWRsZUNvbmYuR2V0VGhlbWVEaWN0JworICAgICAgICAgICAgaWYgbm90IGNmZ1BhcnNlci5oYXNfb3B0aW9uKHRoZW1lTmFtZSwgZWxlbWVudCk6CisgICAgICAgICAgICAgICAgIyBQcmludCB3YXJuaW5nIHRoYXQgd2lsbCByZXR1cm4gYSBkZWZhdWx0IGNvbG9yCisgICAgICAgICAgICAgICAgd2FybmluZyA9ICgnXG4gV2FybmluZzogY29uZmlnSGFuZGxlci5JZGxlQ29uZi5HZXRUaGVtZURpY3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIC1cbiBwcm9ibGVtIHJldHJpZXZpbmcgdGhlbWUgZWxlbWVudCAlcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbiBmcm9tIHRoZW1lICVyLlxuJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgJyByZXR1cm5pbmcgZGVmYXVsdCB2YWx1ZTogJXJcbicgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgJyByZXR1cm5pbmcgZGVmYXVsdCBjb2xvcjogJXInICUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlbGVtZW50LCB0aGVtZU5hbWUsIHRoZW1lW2VsZW1lbnRdKSkKICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUod2FybmluZykKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQod2FybmluZywgZmlsZT1zeXMuc3RkZXJyKQogICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICBjb2xvdXI9Y2ZnUGFyc2VyLkdldCh0aGVtZU5hbWUsZWxlbWVudCxkZWZhdWx0PXRoZW1lW2VsZW1lbnRdKQotICAgICAgICAgICAgdGhlbWVbZWxlbWVudF09Y29sb3VyCisgICAgICAgICAgICB0aGVtZVtlbGVtZW50XSA9IGNmZ1BhcnNlci5HZXQoCisgICAgICAgICAgICAgICAgICAgIHRoZW1lTmFtZSwgZWxlbWVudCwgZGVmYXVsdD10aGVtZVtlbGVtZW50XSkKICAgICAgICAgcmV0dXJuIHRoZW1lCiAKICAgICBkZWYgQ3VycmVudFRoZW1lKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnRseSBhY3RpdmUgdGV4dCBjb2xvciB0aGVtZS4KKworICAgICAgICBpZGxlbGliLmNvbmZpZy1tYWluLmRlZiBpbmNsdWRlcyB0aGlzIHNlY3Rpb24KKyAgICAgICAgW1RoZW1lXQorICAgICAgICBkZWZhdWx0PSAxCisgICAgICAgIG5hbWU9IElETEUgQ2xhc3NpYworICAgICAgICBuYW1lMj0KKyAgICAgICAgIyBuYW1lMiBzZXQgaW4gdXNlciBjb25maWctbWFpbi5jZmcgZm9yIHRoZW1lcyBhZGRlZCBhZnRlciAyMDE1IE9jdCAxCisKKyAgICAgICAgSXRlbSBuYW1lMiBpcyBuZWVkZWQgYmVjYXVzZSBzZXR0aW5nIG5hbWUgdG8gYSBuZXcgYnVpbHRpbgorICAgICAgICBjYXVzZXMgb2xkZXIgSURMRXMgdG8gZGlzcGxheSBtdWx0aXBsZSBlcnJvciBtZXNzYWdlcyBvciBxdWl0LgorICAgICAgICBTZWUgaHR0cHM6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUyNTMxMy4KKyAgICAgICAgV2hlbiBkZWZhdWx0ID0gVHJ1ZSwgbmFtZTIgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIG5hbWUsCisgICAgICAgIHdoaWxlIG9sZGVyIElETEVzIHdpbGwganVzdCB1c2UgbmFtZS4KICAgICAgICAgIiIiCi0gICAgICAgIFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnRseSBhY3RpdmUgdGhlbWUKLSAgICAgICAgIiIiCi0gICAgICAgIHJldHVybiBzZWxmLkdldE9wdGlvbignbWFpbicsJ1RoZW1lJywnbmFtZScsZGVmYXVsdD0nJykKKyAgICAgICAgZGVmYXVsdCA9IHNlbGYuR2V0T3B0aW9uKCdtYWluJywgJ1RoZW1lJywgJ2RlZmF1bHQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0nYm9vbCcsIGRlZmF1bHQ9VHJ1ZSkKKyAgICAgICAgaWYgZGVmYXVsdDoKKyAgICAgICAgICAgIHRoZW1lID0gc2VsZi5HZXRPcHRpb24oJ21haW4nLCAnVGhlbWUnLCAnbmFtZTInLCBkZWZhdWx0PScnKQorICAgICAgICBpZiBkZWZhdWx0IGFuZCBub3QgdGhlbWUgb3Igbm90IGRlZmF1bHQ6CisgICAgICAgICAgICB0aGVtZSA9IHNlbGYuR2V0T3B0aW9uKCdtYWluJywgJ1RoZW1lJywgJ25hbWUnLCBkZWZhdWx0PScnKQorICAgICAgICBzb3VyY2UgPSBzZWxmLmRlZmF1bHRDZmcgaWYgZGVmYXVsdCBlbHNlIHNlbGYudXNlckNmZworICAgICAgICBpZiBzb3VyY2VbJ2hpZ2hsaWdodCddLmhhc19zZWN0aW9uKHRoZW1lKToKKyAgICAgICAgICAgIHJldHVybiB0aGVtZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuICJJRExFIENsYXNzaWMiCiAKICAgICBkZWYgQ3VycmVudEtleXMoc2VsZik6Ci0gICAgICAgICIiIgotICAgICAgICBSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50bHkgYWN0aXZlIGtleSBzZXQKLSAgICAgICAgIiIiCi0gICAgICAgIHJldHVybiBzZWxmLkdldE9wdGlvbignbWFpbicsJ0tleXMnLCduYW1lJyxkZWZhdWx0PScnKQorICAgICAgICAiUmV0dXJuIHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50bHkgYWN0aXZlIGtleSBzZXQuIgorICAgICAgICByZXR1cm4gc2VsZi5HZXRPcHRpb24oJ21haW4nLCAnS2V5cycsICduYW1lJywgZGVmYXVsdD0nJykKIAogICAgIGRlZiBHZXRFeHRlbnNpb25zKHNlbGYsIGFjdGl2ZV9vbmx5PVRydWUsIGVkaXRvcl9vbmx5PUZhbHNlLCBzaGVsbF9vbmx5PUZhbHNlKToKKyAgICAgICAgIiIiUmV0dXJuIGV4dGVuc2lvbnMgaW4gZGVmYXVsdCBhbmQgdXNlciBjb25maWctZXh0ZW5zaW9ucyBmaWxlcy4KKworICAgICAgICBJZiBhY3RpdmVfb25seSBUcnVlLCBvbmx5IHJldHVybiBhY3RpdmUgKGVuYWJsZWQpIGV4dGVuc2lvbnMKKyAgICAgICAgYW5kIG9wdGlvbmFsbHkgb25seSBlZGl0b3Igb3Igc2hlbGwgZXh0ZW5zaW9ucy4KKyAgICAgICAgSWYgYWN0aXZlX29ubHkgRmFsc2UsIHJldHVybiBhbGwgZXh0ZW5zaW9ucy4KICAgICAgICAgIiIiCi0gICAgICAgIEdldHMgYSBsaXN0IG9mIGFsbCBpZGxlIGV4dGVuc2lvbnMgZGVjbGFyZWQgaW4gdGhlIGNvbmZpZyBmaWxlcy4KLSAgICAgICAgYWN0aXZlX29ubHkgLSBib29sZWFuLCBpZiB0cnVlIG9ubHkgcmV0dXJuIGFjdGl2ZSAoZW5hYmxlZCkgZXh0ZW5zaW9ucwotICAgICAgICAiIiIKLSAgICAgICAgZXh0bnM9c2VsZi5SZW1vdmVLZXlCaW5kTmFtZXMoCi0gICAgICAgICAgICAgICAgc2VsZi5HZXRTZWN0aW9uTGlzdCgnZGVmYXVsdCcsJ2V4dGVuc2lvbnMnKSkKLSAgICAgICAgdXNlckV4dG5zPXNlbGYuUmVtb3ZlS2V5QmluZE5hbWVzKAotICAgICAgICAgICAgICAgIHNlbGYuR2V0U2VjdGlvbkxpc3QoJ3VzZXInLCdleHRlbnNpb25zJykpCisgICAgICAgIGV4dG5zID0gc2VsZi5SZW1vdmVLZXlCaW5kTmFtZXMoCisgICAgICAgICAgICAgICAgc2VsZi5HZXRTZWN0aW9uTGlzdCgnZGVmYXVsdCcsICdleHRlbnNpb25zJykpCisgICAgICAgIHVzZXJFeHRucyA9IHNlbGYuUmVtb3ZlS2V5QmluZE5hbWVzKAorICAgICAgICAgICAgICAgIHNlbGYuR2V0U2VjdGlvbkxpc3QoJ3VzZXInLCAnZXh0ZW5zaW9ucycpKQogICAgICAgICBmb3IgZXh0biBpbiB1c2VyRXh0bnM6CiAgICAgICAgICAgICBpZiBleHRuIG5vdCBpbiBleHRuczogI3VzZXIgaGFzIGFkZGVkIG93biBleHRlbnNpb24KICAgICAgICAgICAgICAgICBleHRucy5hcHBlbmQoZXh0bikKICAgICAgICAgaWYgYWN0aXZlX29ubHk6Ci0gICAgICAgICAgICBhY3RpdmVFeHRucz1bXQorICAgICAgICAgICAgYWN0aXZlRXh0bnMgPSBbXQogICAgICAgICAgICAgZm9yIGV4dG4gaW4gZXh0bnM6CiAgICAgICAgICAgICAgICAgaWYgc2VsZi5HZXRPcHRpb24oJ2V4dGVuc2lvbnMnLCBleHRuLCAnZW5hYmxlJywgZGVmYXVsdD1UcnVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9J2Jvb2wnKToKICAgICAgICAgICAgICAgICAgICAgI3RoZSBleHRlbnNpb24gaXMgZW5hYmxlZAotICAgICAgICAgICAgICAgICAgICBpZiBlZGl0b3Jfb25seSBvciBzaGVsbF9vbmx5OgorICAgICAgICAgICAgICAgICAgICBpZiBlZGl0b3Jfb25seSBvciBzaGVsbF9vbmx5OiAgIyBUT0RPIGlmIGJvdGgsIGNvbnRyYWRpY3RvcnkKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGVkaXRvcl9vbmx5OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbiA9ICJlbmFibGVfZWRpdG9yIgogICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKQEAgLTQyOSwxMDYgKzQzOCwxMTAgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHJldHVybiBleHRucwogCi0gICAgZGVmIFJlbW92ZUtleUJpbmROYW1lcyhzZWxmLGV4dG5OYW1lTGlzdCk6Ci0gICAgICAgICNnZXQgcmlkIG9mIGtleWJpbmRpbmcgc2VjdGlvbiBuYW1lcwotICAgICAgICBuYW1lcz1leHRuTmFtZUxpc3QKLSAgICAgICAga2JOYW1lSW5kaWNpZXM9W10KKyAgICBkZWYgUmVtb3ZlS2V5QmluZE5hbWVzKHNlbGYsIGV4dG5OYW1lTGlzdCk6CisgICAgICAgICJSZXR1cm4gZXh0bk5hbWVMaXN0IHdpdGgga2V5YmluZGluZyBzZWN0aW9uIG5hbWVzIHJlbW92ZWQuIgorICAgICAgICAjIFRPRE8gRWFzaWVyIHRvIHJldHVybiBmaWx0ZXJlZCBjb3B5IHdpdGggbGlzdCBjb21wCisgICAgICAgIG5hbWVzID0gZXh0bk5hbWVMaXN0CisgICAgICAgIGtiTmFtZUluZGljaWVzID0gW10KICAgICAgICAgZm9yIG5hbWUgaW4gbmFtZXM6CiAgICAgICAgICAgICBpZiBuYW1lLmVuZHN3aXRoKCgnX2JpbmRpbmdzJywgJ19jZmdCaW5kaW5ncycpKToKICAgICAgICAgICAgICAgICBrYk5hbWVJbmRpY2llcy5hcHBlbmQobmFtZXMuaW5kZXgobmFtZSkpCi0gICAgICAgIGtiTmFtZUluZGljaWVzLnNvcnQoKQotICAgICAgICBrYk5hbWVJbmRpY2llcy5yZXZlcnNlKCkKKyAgICAgICAga2JOYW1lSW5kaWNpZXMuc29ydChyZXZlcnNlPVRydWUpCiAgICAgICAgIGZvciBpbmRleCBpbiBrYk5hbWVJbmRpY2llczogI2RlbGV0ZSBlYWNoIGtleWJpbmRpbmcgc2VjdGlvbiBuYW1lCiAgICAgICAgICAgICBkZWwobmFtZXNbaW5kZXhdKQogICAgICAgICByZXR1cm4gbmFtZXMKIAotICAgIGRlZiBHZXRFeHRuTmFtZUZvckV2ZW50KHNlbGYsdmlydHVhbEV2ZW50KToKKyAgICBkZWYgR2V0RXh0bk5hbWVGb3JFdmVudChzZWxmLCB2aXJ0dWFsRXZlbnQpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIG5hbWUgb2YgdGhlIGV4dGVuc2lvbiBiaW5kaW5nIHZpcnR1YWxFdmVudCwgb3IgTm9uZS4KKworICAgICAgICB2aXJ0dWFsRXZlbnQgLSBzdHJpbmcsIG5hbWUgb2YgdGhlIHZpcnR1YWwgZXZlbnQgdG8gdGVzdCBmb3IsCisgICAgICAgICAgICAgICAgICAgICAgIHdpdGhvdXQgdGhlIGVuY2xvc2luZyAnPDwgPj4nCiAgICAgICAgICIiIgotICAgICAgICBSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBleHRlbnNpb24gdGhhdCB2aXJ0dWFsRXZlbnQgaXMgYm91bmQgaW4sIG9yCi0gICAgICAgIE5vbmUgaWYgbm90IGJvdW5kIGluIGFueSBleHRlbnNpb24uCi0gICAgICAgIHZpcnR1YWxFdmVudCAtIHN0cmluZywgbmFtZSBvZiB0aGUgdmlydHVhbCBldmVudCB0byB0ZXN0IGZvciwgd2l0aG91dAotICAgICAgICAgICAgICAgICAgICAgICB0aGUgZW5jbG9zaW5nICc8PCA+PicKLSAgICAgICAgIiIiCi0gICAgICAgIGV4dE5hbWU9Tm9uZQotICAgICAgICB2RXZlbnQ9Jzw8Jyt2aXJ0dWFsRXZlbnQrJz4+JworICAgICAgICBleHROYW1lID0gTm9uZQorICAgICAgICB2RXZlbnQgPSAnPDwnICsgdmlydHVhbEV2ZW50ICsgJz4+JwogICAgICAgICBmb3IgZXh0biBpbiBzZWxmLkdldEV4dGVuc2lvbnMoYWN0aXZlX29ubHk9MCk6CiAgICAgICAgICAgICBmb3IgZXZlbnQgaW4gc2VsZi5HZXRFeHRlbnNpb25LZXlzKGV4dG4pOgogICAgICAgICAgICAgICAgIGlmIGV2ZW50ID09IHZFdmVudDoKLSAgICAgICAgICAgICAgICAgICAgZXh0TmFtZT1leHRuCisgICAgICAgICAgICAgICAgICAgIGV4dE5hbWUgPSBleHRuICAjIFRPRE8gcmV0dXJuIGhlcmU/CiAgICAgICAgIHJldHVybiBleHROYW1lCiAKLSAgICBkZWYgR2V0RXh0ZW5zaW9uS2V5cyhzZWxmLGV4dGVuc2lvbk5hbWUpOgorICAgIGRlZiBHZXRFeHRlbnNpb25LZXlzKHNlbGYsIGV4dGVuc2lvbk5hbWUpOgorICAgICAgICAiIiJSZXR1cm4gZGljdDoge2NvbmZpZ3VyYWJsZSBleHRlbnNpb25OYW1lIGV2ZW50IDogYWN0aXZlIGtleWJpbmRpbmd9LgorCisgICAgICAgIEV2ZW50cyBjb21lIGZyb20gZGVmYXVsdCBjb25maWcgZXh0ZW5zaW9uX2NmZ0JpbmRpbmdzIHNlY3Rpb24uCisgICAgICAgIEtleWJpbmRpbmdzIGNvbWUgZnJvbSBHZXRDdXJyZW50S2V5U2V0KCkgYWN0aXZlIGtleSBkaWN0LAorICAgICAgICB3aGVyZSBwcmV2aW91c2x5IHVzZWQgYmluZGluZ3MgYXJlIGRpc2FibGVkLgogICAgICAgICAiIiIKLSAgICAgICAgcmV0dXJucyBhIGRpY3Rpb25hcnkgb2YgdGhlIGNvbmZpZ3VyYWJsZSBrZXliaW5kaW5ncyBmb3IgYSBwYXJ0aWN1bGFyCi0gICAgICAgIGV4dGVuc2lvbixhcyB0aGV5IGV4aXN0IGluIHRoZSBkaWN0aW9uYXJ5IHJldHVybmVkIGJ5IEdldEN1cnJlbnRLZXlTZXQ7Ci0gICAgICAgIHRoYXQgaXMsIHdoZXJlIHByZXZpb3VzbHkgdXNlZCBiaW5kaW5ncyBhcmUgZGlzYWJsZWQuCi0gICAgICAgICIiIgotICAgICAgICBrZXlzTmFtZT1leHRlbnNpb25OYW1lKydfY2ZnQmluZGluZ3MnCi0gICAgICAgIGFjdGl2ZUtleXM9c2VsZi5HZXRDdXJyZW50S2V5U2V0KCkKLSAgICAgICAgZXh0S2V5cz17fQorICAgICAgICBrZXlzTmFtZSA9IGV4dGVuc2lvbk5hbWUgKyAnX2NmZ0JpbmRpbmdzJworICAgICAgICBhY3RpdmVLZXlzID0gc2VsZi5HZXRDdXJyZW50S2V5U2V0KCkKKyAgICAgICAgZXh0S2V5cyA9IHt9CiAgICAgICAgIGlmIHNlbGYuZGVmYXVsdENmZ1snZXh0ZW5zaW9ucyddLmhhc19zZWN0aW9uKGtleXNOYW1lKToKLSAgICAgICAgICAgIGV2ZW50TmFtZXM9c2VsZi5kZWZhdWx0Q2ZnWydleHRlbnNpb25zJ10uR2V0T3B0aW9uTGlzdChrZXlzTmFtZSkKKyAgICAgICAgICAgIGV2ZW50TmFtZXMgPSBzZWxmLmRlZmF1bHRDZmdbJ2V4dGVuc2lvbnMnXS5HZXRPcHRpb25MaXN0KGtleXNOYW1lKQogICAgICAgICAgICAgZm9yIGV2ZW50TmFtZSBpbiBldmVudE5hbWVzOgotICAgICAgICAgICAgICAgIGV2ZW50PSc8PCcrZXZlbnROYW1lKyc+PicKLSAgICAgICAgICAgICAgICBiaW5kaW5nPWFjdGl2ZUtleXNbZXZlbnRdCi0gICAgICAgICAgICAgICAgZXh0S2V5c1tldmVudF09YmluZGluZworICAgICAgICAgICAgICAgIGV2ZW50ID0gJzw8JyArIGV2ZW50TmFtZSArICc+PicKKyAgICAgICAgICAgICAgICBiaW5kaW5nID0gYWN0aXZlS2V5c1tldmVudF0KKyAgICAgICAgICAgICAgICBleHRLZXlzW2V2ZW50XSA9IGJpbmRpbmcKICAgICAgICAgcmV0dXJuIGV4dEtleXMKIAogICAgIGRlZiBfX0dldFJhd0V4dGVuc2lvbktleXMoc2VsZixleHRlbnNpb25OYW1lKToKKyAgICAgICAgIiIiUmV0dXJuIGRpY3Qge2NvbmZpZ3VyYWJsZSBleHRlbnNpb25OYW1lIGV2ZW50IDoga2V5YmluZGluZyBsaXN0fS4KKworICAgICAgICBFdmVudHMgY29tZSBmcm9tIGRlZmF1bHQgY29uZmlnIGV4dGVuc2lvbl9jZmdCaW5kaW5ncyBzZWN0aW9uLgorICAgICAgICBLZXliaW5kaW5ncyBsaXN0IGNvbWUgZnJvbSB0aGUgc3BsaXR0aW5nIG9mIEdldE9wdGlvbiwgd2hpY2gKKyAgICAgICAgdHJpZXMgdXNlciBjb25maWcgYmVmb3JlIGRlZmF1bHQgY29uZmlnLgogICAgICAgICAiIiIKLSAgICAgICAgcmV0dXJucyBhIGRpY3Rpb25hcnkgb2YgdGhlIGNvbmZpZ3VyYWJsZSBrZXliaW5kaW5ncyBmb3IgYSBwYXJ0aWN1bGFyCi0gICAgICAgIGV4dGVuc2lvbiwgYXMgZGVmaW5lZCBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlcywgb3IgYW4gZW1wdHkgZGljdGlvbmFyeQotICAgICAgICBpZiBubyBiaW5kaW5ncyBhcmUgZm91bmQKLSAgICAgICAgIiIiCi0gICAgICAgIGtleXNOYW1lPWV4dGVuc2lvbk5hbWUrJ19jZmdCaW5kaW5ncycKLSAgICAgICAgZXh0S2V5cz17fQorICAgICAgICBrZXlzTmFtZSA9IGV4dGVuc2lvbk5hbWUrJ19jZmdCaW5kaW5ncycKKyAgICAgICAgZXh0S2V5cyA9IHt9CiAgICAgICAgIGlmIHNlbGYuZGVmYXVsdENmZ1snZXh0ZW5zaW9ucyddLmhhc19zZWN0aW9uKGtleXNOYW1lKToKLSAgICAgICAgICAgIGV2ZW50TmFtZXM9c2VsZi5kZWZhdWx0Q2ZnWydleHRlbnNpb25zJ10uR2V0T3B0aW9uTGlzdChrZXlzTmFtZSkKKyAgICAgICAgICAgIGV2ZW50TmFtZXMgPSBzZWxmLmRlZmF1bHRDZmdbJ2V4dGVuc2lvbnMnXS5HZXRPcHRpb25MaXN0KGtleXNOYW1lKQogICAgICAgICAgICAgZm9yIGV2ZW50TmFtZSBpbiBldmVudE5hbWVzOgotICAgICAgICAgICAgICAgIGJpbmRpbmc9c2VsZi5HZXRPcHRpb24oJ2V4dGVuc2lvbnMnLGtleXNOYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnROYW1lLGRlZmF1bHQ9JycpLnNwbGl0KCkKLSAgICAgICAgICAgICAgICBldmVudD0nPDwnK2V2ZW50TmFtZSsnPj4nCi0gICAgICAgICAgICAgICAgZXh0S2V5c1tldmVudF09YmluZGluZworICAgICAgICAgICAgICAgIGJpbmRpbmcgPSBzZWxmLkdldE9wdGlvbigKKyAgICAgICAgICAgICAgICAgICAgICAgICdleHRlbnNpb25zJywga2V5c05hbWUsIGV2ZW50TmFtZSwgZGVmYXVsdD0nJykuc3BsaXQoKQorICAgICAgICAgICAgICAgIGV2ZW50ID0gJzw8JyArIGV2ZW50TmFtZSArICc+PicKKyAgICAgICAgICAgICAgICBleHRLZXlzW2V2ZW50XSA9IGJpbmRpbmcKICAgICAgICAgcmV0dXJuIGV4dEtleXMKIAotICAgIGRlZiBHZXRFeHRlbnNpb25CaW5kaW5ncyhzZWxmLGV4dGVuc2lvbk5hbWUpOgorICAgIGRlZiBHZXRFeHRlbnNpb25CaW5kaW5ncyhzZWxmLCBleHRlbnNpb25OYW1lKToKKyAgICAgICAgIiIiUmV0dXJuIGRpY3Qge2V4dGVuc2lvbk5hbWUgZXZlbnQgOiBhY3RpdmUgb3IgZGVmaW5lZCBrZXliaW5kaW5nfS4KKworICAgICAgICBBdWdtZW50IHNlbGYuR2V0RXh0ZW5zaW9uS2V5cyhleHRlbnNpb25OYW1lKSB3aXRoIG1hcHBpbmcgb2Ygbm9uLQorICAgICAgICBjb25maWd1cmFibGUgZXZlbnRzIChmcm9tIGRlZmF1bHQgY29uZmlnKSB0byBHZXRPcHRpb24gc3BsaXRzLAorICAgICAgICBhcyBpbiBzZWxmLl9fR2V0UmF3RXh0ZW5zaW9uS2V5cy4KICAgICAgICAgIiIiCi0gICAgICAgIFJldHVybnMgYSBkaWN0aW9uYXJ5IG9mIGFsbCB0aGUgZXZlbnQgYmluZGluZ3MgZm9yIGEgcGFydGljdWxhcgotICAgICAgICBleHRlbnNpb24uIFRoZSBjb25maWd1cmFibGUga2V5YmluZGluZ3MgYXJlIHJldHVybmVkIGFzIHRoZXkgZXhpc3QgaW4KLSAgICAgICAgdGhlIGRpY3Rpb25hcnkgcmV0dXJuZWQgYnkgR2V0Q3VycmVudEtleVNldDsgdGhhdCBpcywgd2hlcmUgcmUtdXNlZAotICAgICAgICBrZXliaW5kaW5ncyBhcmUgZGlzYWJsZWQuCi0gICAgICAgICIiIgotICAgICAgICBiaW5kc05hbWU9ZXh0ZW5zaW9uTmFtZSsnX2JpbmRpbmdzJwotICAgICAgICBleHRCaW5kcz1zZWxmLkdldEV4dGVuc2lvbktleXMoZXh0ZW5zaW9uTmFtZSkKKyAgICAgICAgYmluZHNOYW1lID0gZXh0ZW5zaW9uTmFtZSArICdfYmluZGluZ3MnCisgICAgICAgIGV4dEJpbmRzID0gc2VsZi5HZXRFeHRlbnNpb25LZXlzKGV4dGVuc2lvbk5hbWUpCiAgICAgICAgICNhZGQgdGhlIG5vbi1jb25maWd1cmFibGUgYmluZGluZ3MKICAgICAgICAgaWYgc2VsZi5kZWZhdWx0Q2ZnWydleHRlbnNpb25zJ10uaGFzX3NlY3Rpb24oYmluZHNOYW1lKToKLSAgICAgICAgICAgIGV2ZW50TmFtZXM9c2VsZi5kZWZhdWx0Q2ZnWydleHRlbnNpb25zJ10uR2V0T3B0aW9uTGlzdChiaW5kc05hbWUpCisgICAgICAgICAgICBldmVudE5hbWVzID0gc2VsZi5kZWZhdWx0Q2ZnWydleHRlbnNpb25zJ10uR2V0T3B0aW9uTGlzdChiaW5kc05hbWUpCiAgICAgICAgICAgICBmb3IgZXZlbnROYW1lIGluIGV2ZW50TmFtZXM6Ci0gICAgICAgICAgICAgICAgYmluZGluZz1zZWxmLkdldE9wdGlvbignZXh0ZW5zaW9ucycsYmluZHNOYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnROYW1lLGRlZmF1bHQ9JycpLnNwbGl0KCkKLSAgICAgICAgICAgICAgICBldmVudD0nPDwnK2V2ZW50TmFtZSsnPj4nCi0gICAgICAgICAgICAgICAgZXh0QmluZHNbZXZlbnRdPWJpbmRpbmcKKyAgICAgICAgICAgICAgICBiaW5kaW5nID0gc2VsZi5HZXRPcHRpb24oCisgICAgICAgICAgICAgICAgICAgICAgICAnZXh0ZW5zaW9ucycsIGJpbmRzTmFtZSwgZXZlbnROYW1lLCBkZWZhdWx0PScnKS5zcGxpdCgpCisgICAgICAgICAgICAgICAgZXZlbnQgPSAnPDwnICsgZXZlbnROYW1lICsgJz4+JworICAgICAgICAgICAgICAgIGV4dEJpbmRzW2V2ZW50XSA9IGJpbmRpbmcKIAogICAgICAgICByZXR1cm4gZXh0QmluZHMKIAogICAgIGRlZiBHZXRLZXlCaW5kaW5nKHNlbGYsIGtleVNldE5hbWUsIGV2ZW50U3RyKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSBrZXliaW5kaW5nIGxpc3QgZm9yIGtleVNldE5hbWUgZXZlbnRTdHIuCisKKyAgICAgICAga2V5U2V0TmFtZSAtIG5hbWUgb2Yga2V5IGJpbmRpbmcgc2V0IChjb25maWcta2V5cyBzZWN0aW9uKS4KKyAgICAgICAgZXZlbnRTdHIgLSB2aXJ0dWFsIGV2ZW50LCBpbmNsdWRpbmcgYnJhY2tldHMsIGFzIGluICc8PGV2ZW50Pj4nLgogICAgICAgICAiIiIKLSAgICAgICAgcmV0dXJucyB0aGUga2V5YmluZGluZyBmb3IgYSBzcGVjaWZpYyBldmVudC4KLSAgICAgICAga2V5U2V0TmFtZSAtIHN0cmluZywgbmFtZSBvZiBrZXkgYmluZGluZyBzZXQKLSAgICAgICAgZXZlbnRTdHIgLSBzdHJpbmcsIHRoZSB2aXJ0dWFsIGV2ZW50IHdlIHdhbnQgdGhlIGJpbmRpbmcgZm9yLAotICAgICAgICAgICAgICAgICAgIHJlcHJlc2VudGVkIGFzIGEgc3RyaW5nLCBlZy4gJzw8ZXZlbnQ+PicKLSAgICAgICAgIiIiCi0gICAgICAgIGV2ZW50TmFtZT1ldmVudFN0clsyOi0yXSAjdHJpbSBvZmYgdGhlIGFuZ2xlIGJyYWNrZXRzCi0gICAgICAgIGJpbmRpbmc9c2VsZi5HZXRPcHRpb24oJ2tleXMnLGtleVNldE5hbWUsZXZlbnROYW1lLGRlZmF1bHQ9JycpLnNwbGl0KCkKKyAgICAgICAgZXZlbnROYW1lID0gZXZlbnRTdHJbMjotMl0gI3RyaW0gb2ZmIHRoZSBhbmdsZSBicmFja2V0cworICAgICAgICBiaW5kaW5nID0gc2VsZi5HZXRPcHRpb24oJ2tleXMnLCBrZXlTZXROYW1lLCBldmVudE5hbWUsIGRlZmF1bHQ9JycpLnNwbGl0KCkKICAgICAgICAgcmV0dXJuIGJpbmRpbmcKIAogICAgIGRlZiBHZXRDdXJyZW50S2V5U2V0KHNlbGYpOgorICAgICAgICAiUmV0dXJuIEN1cnJlbnRLZXlzIHdpdGggJ2RhcndpbicgbW9kaWZpY2F0aW9ucy4iCiAgICAgICAgIHJlc3VsdCA9IHNlbGYuR2V0S2V5U2V0KHNlbGYuQ3VycmVudEtleXMoKSkKIAotICAgICAgICBpZiBtYWNvc3hTdXBwb3J0LnJ1bm5pbmdBc09TWEFwcCgpOgotICAgICAgICAgICAgIyBXZSdyZSB1c2luZyBBcXVhVGssIHJlcGxhY2UgYWxsIGtleWJpbmdpbmdzIHRoYXQgdXNlIHRoZQotICAgICAgICAgICAgIyBBbHQga2V5IGJ5IG9uZXMgdGhhdCB1c2UgdGhlIE9wdGlvbiBrZXkgYmVjYXVzZSB0aGUgZm9ybWVyCi0gICAgICAgICAgICAjIGRvbid0IHdvcmsgcmVsaWFibHkuCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAiZGFyd2luIjoKKyAgICAgICAgICAgICMgT1MgWCBUayB2YXJpYW50cyBkbyBub3Qgc3VwcG9ydCB0aGUgIkFsdCIga2V5Ym9hcmQgbW9kaWZpZXIuCisgICAgICAgICAgICAjIFNvIHJlcGxhY2UgYWxsIGtleWJpbmdpbmdzIHRoYXQgdXNlICJBbHQiIHdpdGggb25lcyB0aGF0CisgICAgICAgICAgICAjIHVzZSB0aGUgIk9wdGlvbiIga2V5Ym9hcmQgbW9kaWZpZXIuCisgICAgICAgICAgICAjIFRPRE8gKE5lZD8pOiB0aGUgIk9wdGlvbiIgbW9kaWZpZXIgZG9lcyBub3Qgd29yayBwcm9wZXJseSBmb3IKKyAgICAgICAgICAgICMgICAgICAgIENvY29hIFRrIGFuZCBYUXVhcnR6IFRrIHNvIHdlIHNob3VsZCBub3QgdXNlIGl0CisgICAgICAgICAgICAjICAgICAgICBpbiBkZWZhdWx0IE9TIFggS2V5U2V0cy4KICAgICAgICAgICAgIGZvciBrLCB2IGluIHJlc3VsdC5pdGVtcygpOgogICAgICAgICAgICAgICAgIHYyID0gWyB4LnJlcGxhY2UoJzxBbHQtJywgJzxPcHRpb24tJykgZm9yIHggaW4gdiBdCiAgICAgICAgICAgICAgICAgaWYgdiAhPSB2MjoKQEAgLTUzNiw0MCArNTQ5LDQzIEBACiAKICAgICAgICAgcmV0dXJuIHJlc3VsdAogCi0gICAgZGVmIEdldEtleVNldChzZWxmLGtleVNldE5hbWUpOgorICAgIGRlZiBHZXRLZXlTZXQoc2VsZiwga2V5U2V0TmFtZSk6CisgICAgICAgICIiIlJldHVybiBldmVudC1rZXkgZGljdCBmb3Iga2V5U2V0TmFtZSBjb3JlIHBsdXMgYWN0aXZlIGV4dGVuc2lvbnMuCisKKyAgICAgICAgSWYgYSBiaW5kaW5nIGRlZmluZWQgaW4gYW4gZXh0ZW5zaW9uIGlzIGFscmVhZHkgaW4gdXNlLCB0aGUKKyAgICAgICAgZXh0ZW5zaW9uIGJpbmRpbmcgaXMgZGlzYWJsZWQgYnkgYmVpbmcgc2V0IHRvICcnCiAgICAgICAgICIiIgotICAgICAgICBSZXR1cm5zIGEgZGljdGlvbmFyeSBvZjogYWxsIHJlcXVlc3RlZCBjb3JlIGtleWJpbmRpbmdzLCBwbHVzIHRoZQotICAgICAgICBrZXliaW5kaW5ncyBmb3IgYWxsIGN1cnJlbnRseSBhY3RpdmUgZXh0ZW5zaW9ucy4gSWYgYSBiaW5kaW5nIGRlZmluZWQKLSAgICAgICAgaW4gYW4gZXh0ZW5zaW9uIGlzIGFscmVhZHkgaW4gdXNlLCB0aGF0IGJpbmRpbmcgaXMgZGlzYWJsZWQuCi0gICAgICAgICIiIgotICAgICAgICBrZXlTZXQ9c2VsZi5HZXRDb3JlS2V5cyhrZXlTZXROYW1lKQotICAgICAgICBhY3RpdmVFeHRucz1zZWxmLkdldEV4dGVuc2lvbnMoYWN0aXZlX29ubHk9MSkKKyAgICAgICAga2V5U2V0ID0gc2VsZi5HZXRDb3JlS2V5cyhrZXlTZXROYW1lKQorICAgICAgICBhY3RpdmVFeHRucyA9IHNlbGYuR2V0RXh0ZW5zaW9ucyhhY3RpdmVfb25seT0xKQogICAgICAgICBmb3IgZXh0biBpbiBhY3RpdmVFeHRuczoKLSAgICAgICAgICAgIGV4dEtleXM9c2VsZi5fX0dldFJhd0V4dGVuc2lvbktleXMoZXh0bikKKyAgICAgICAgICAgIGV4dEtleXMgPSBzZWxmLl9fR2V0UmF3RXh0ZW5zaW9uS2V5cyhleHRuKQogICAgICAgICAgICAgaWYgZXh0S2V5czogI3RoZSBleHRlbnNpb24gZGVmaW5lcyBrZXliaW5kaW5ncwogICAgICAgICAgICAgICAgIGZvciBldmVudCBpbiBleHRLZXlzOgogICAgICAgICAgICAgICAgICAgICBpZiBleHRLZXlzW2V2ZW50XSBpbiBrZXlTZXQudmFsdWVzKCk6CiAgICAgICAgICAgICAgICAgICAgICAgICAjdGhlIGJpbmRpbmcgaXMgYWxyZWFkeSBpbiB1c2UKLSAgICAgICAgICAgICAgICAgICAgICAgIGV4dEtleXNbZXZlbnRdPScnICNkaXNhYmxlIHRoaXMgYmluZGluZwotICAgICAgICAgICAgICAgICAgICBrZXlTZXRbZXZlbnRdPWV4dEtleXNbZXZlbnRdICNhZGQgYmluZGluZworICAgICAgICAgICAgICAgICAgICAgICAgZXh0S2V5c1tldmVudF0gPSAnJyAjZGlzYWJsZSB0aGlzIGJpbmRpbmcKKyAgICAgICAgICAgICAgICAgICAga2V5U2V0W2V2ZW50XSA9IGV4dEtleXNbZXZlbnRdICNhZGQgYmluZGluZwogICAgICAgICByZXR1cm4ga2V5U2V0CiAKLSAgICBkZWYgSXNDb3JlQmluZGluZyhzZWxmLHZpcnR1YWxFdmVudCk6Ci0gICAgICAgICIiIgotICAgICAgICByZXR1cm5zIHRydWUgaWYgdGhlIHZpcnR1YWwgZXZlbnQgaXMgYm91bmQgaW4gdGhlIGNvcmUgaWRsZSBrZXliaW5kaW5ncy4KLSAgICAgICAgdmlydHVhbEV2ZW50IC0gc3RyaW5nLCBuYW1lIG9mIHRoZSB2aXJ0dWFsIGV2ZW50IHRvIHRlc3QgZm9yLCB3aXRob3V0Ci0gICAgICAgICAgICAgICAgICAgICAgIHRoZSBlbmNsb3NpbmcgJzw8ID4+JworICAgIGRlZiBJc0NvcmVCaW5kaW5nKHNlbGYsIHZpcnR1YWxFdmVudCk6CisgICAgICAgICIiIlJldHVybiBUcnVlIGlmIHRoZSB2aXJ0dWFsIGV2ZW50IGlzIG9uZSBvZiB0aGUgY29yZSBpZGxlIGtleSBldmVudHMuCisKKyAgICAgICAgdmlydHVhbEV2ZW50IC0gc3RyaW5nLCBuYW1lIG9mIHRoZSB2aXJ0dWFsIGV2ZW50IHRvIHRlc3QgZm9yLAorICAgICAgICAgICAgICAgICAgICAgICB3aXRob3V0IHRoZSBlbmNsb3NpbmcgJzw8ID4+JwogICAgICAgICAiIiIKICAgICAgICAgcmV0dXJuICgnPDwnK3ZpcnR1YWxFdmVudCsnPj4nKSBpbiBzZWxmLkdldENvcmVLZXlzKCkKIAorIyBUT0RPIG1ha2Uga2V5QmluZGlucyBhIGZpbGUgb3IgY2xhc3MgYXR0cmlidXRlIHVzZWQgZm9yIHRlc3QgYWJvdmUKKyMgYW5kIGNvcGllZCBpbiBmdW5jdGlvbiBiZWxvdworCiAgICAgZGVmIEdldENvcmVLZXlzKHNlbGYsIGtleVNldE5hbWU9Tm9uZSk6Ci0gICAgICAgICIiIgotICAgICAgICByZXR1cm5zIHRoZSByZXF1ZXN0ZWQgc2V0IG9mIGNvcmUga2V5YmluZGluZ3MsIHdpdGggZmFsbGJhY2tzIGlmCi0gICAgICAgIHJlcXVpcmVkLgotICAgICAgICBLZXliaW5kaW5ncyBsb2FkZWQgZnJvbSB0aGUgY29uZmlnIGZpbGUocykgYXJlIGxvYWRlZCBfb3Zlcl8gdGhlc2UKLSAgICAgICAgZGVmYXVsdHMsIHNvIGlmIHRoZXJlIGlzIGEgcHJvYmxlbSBnZXR0aW5nIGFueSBjb3JlIGJpbmRpbmcgdGhlcmUgd2lsbAotICAgICAgICBiZSBhbiAndWx0aW1hdGUgbGFzdCByZXNvcnQgZmFsbGJhY2snIHRvIHRoZSBDVUEtaXNoIGJpbmRpbmdzCi0gICAgICAgIGRlZmluZWQgaGVyZS4KKyAgICAgICAgIiIiUmV0dXJuIGRpY3Qgb2YgY29yZSB2aXJ0dWFsLWtleSBrZXliaW5kaW5ncyBmb3Iga2V5U2V0TmFtZS4KKworICAgICAgICBUaGUgZGVmYXVsdCBrZXlTZXROYW1lIE5vbmUgY29ycmVzcG9uZHMgdG8gdGhlIGtleUJpbmRpbmdzIGJhc2UKKyAgICAgICAgZGljdC4gSWYga2V5U2V0TmFtZSBpcyBub3QgTm9uZSwgYmluZGluZ3MgZnJvbSB0aGUgY29uZmlnCisgICAgICAgIGZpbGUocykgYXJlIGxvYWRlZCBfb3Zlcl8gdGhlc2UgZGVmYXVsdHMsIHNvIGlmIHRoZXJlIGlzIGEKKyAgICAgICAgcHJvYmxlbSBnZXR0aW5nIGFueSBjb3JlIGJpbmRpbmcgdGhlcmUgd2lsbCBiZSBhbiAndWx0aW1hdGUgbGFzdAorICAgICAgICByZXNvcnQgZmFsbGJhY2snIHRvIHRoZSBDVUEtaXNoIGJpbmRpbmdzIGRlZmluZWQgaGVyZS4KICAgICAgICAgIiIiCiAgICAgICAgIGtleUJpbmRpbmdzPXsKICAgICAgICAgICAgICc8PGNvcHk+Pic6IFsnPENvbnRyb2wtYz4nLCAnPENvbnRyb2wtQz4nXSwKQEAgLTYyNCwyMiArNjQwLDI0IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIGlmIGtleVNldE5hbWU6CiAgICAgICAgICAgICBmb3IgZXZlbnQgaW4ga2V5QmluZGluZ3M6Ci0gICAgICAgICAgICAgICAgYmluZGluZz1zZWxmLkdldEtleUJpbmRpbmcoa2V5U2V0TmFtZSxldmVudCkKKyAgICAgICAgICAgICAgICBiaW5kaW5nID0gc2VsZi5HZXRLZXlCaW5kaW5nKGtleVNldE5hbWUsIGV2ZW50KQogICAgICAgICAgICAgICAgIGlmIGJpbmRpbmc6Ci0gICAgICAgICAgICAgICAgICAgIGtleUJpbmRpbmdzW2V2ZW50XT1iaW5kaW5nCisgICAgICAgICAgICAgICAgICAgIGtleUJpbmRpbmdzW2V2ZW50XSA9IGJpbmRpbmcKICAgICAgICAgICAgICAgICBlbHNlOiAjd2UgYXJlIGdvaW5nIHRvIHJldHVybiBhIGRlZmF1bHQsIHByaW50IHdhcm5pbmcKICAgICAgICAgICAgICAgICAgICAgd2FybmluZz0oJ1xuIFdhcm5pbmc6IGNvbmZpZ0hhbmRsZXIucHkgLSBJZGxlQ29uZi5HZXRDb3JlS2V5cycKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIC1cbiBwcm9ibGVtIHJldHJpZXZpbmcga2V5IGJpbmRpbmcgZm9yIGV2ZW50ICVyJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbiBmcm9tIGtleSBzZXQgJXIuXG4nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyByZXR1cm5pbmcgZGVmYXVsdCB2YWx1ZTogJXJcbicgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgcmV0dXJuaW5nIGRlZmF1bHQgdmFsdWU6ICVyJyAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGV2ZW50LCBrZXlTZXROYW1lLCBrZXlCaW5kaW5nc1tldmVudF0pKQogICAgICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKHdhcm5pbmcpCisgICAgICAgICAgICAgICAgICAgICAgICBwcmludCh3YXJuaW5nLCBmaWxlPXN5cy5zdGRlcnIpCiAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICByZXR1cm4ga2V5QmluZGluZ3MKLSAgICBkZWYgR2V0RXh0cmFIZWxwU291cmNlTGlzdChzZWxmLGNvbmZpZ1NldCk6Ci0gICAgICAgICIiIkZldGNoIGxpc3Qgb2YgZXh0cmEgaGVscCBzb3VyY2VzIGZyb20gYSBnaXZlbiBjb25maWdTZXQuCisKKyAgICBkZWYgR2V0RXh0cmFIZWxwU291cmNlTGlzdChzZWxmLCBjb25maWdTZXQpOgorICAgICAgICAiIiJSZXR1cm4gbGlzdCBvZiBleHRyYSBoZWxwIHNvdXJjZXMgZnJvbSBhIGdpdmVuIGNvbmZpZ1NldC4KKwogICAgICAgICBWYWxpZCBjb25maWdTZXRzIGFyZSAndXNlcicgb3IgJ2RlZmF1bHQnLiAgUmV0dXJuIGEgbGlzdCBvZiB0dXBsZXMgb2YKICAgICAgICAgdGhlIGZvcm0gKG1lbnVfaXRlbSAsIHBhdGhfdG9faGVscF9maWxlICwgb3B0aW9uKSwgb3IgcmV0dXJuIHRoZSBlbXB0eQogICAgICAgICBsaXN0LiAgJ29wdGlvbicgaXMgdGhlIHNlcXVlbmNlIG51bWJlciBvZiB0aGUgaGVscCByZXNvdXJjZS4gICdvcHRpb24nCkBAIC02NDcsMTkgKzY2NSwxOSBAQAogICAgICAgICB0aGVyZWZvcmUgdGhlIHJldHVybmVkIGxpc3QgbXVzdCBiZSBzb3J0ZWQgYnkgJ29wdGlvbicuCiAKICAgICAgICAgIiIiCi0gICAgICAgIGhlbHBTb3VyY2VzPVtdCi0gICAgICAgIGlmIGNvbmZpZ1NldD09J3VzZXInOgotICAgICAgICAgICAgY2ZnUGFyc2VyPXNlbGYudXNlckNmZ1snbWFpbiddCi0gICAgICAgIGVsaWYgY29uZmlnU2V0PT0nZGVmYXVsdCc6Ci0gICAgICAgICAgICBjZmdQYXJzZXI9c2VsZi5kZWZhdWx0Q2ZnWydtYWluJ10KKyAgICAgICAgaGVscFNvdXJjZXMgPSBbXQorICAgICAgICBpZiBjb25maWdTZXQgPT0gJ3VzZXInOgorICAgICAgICAgICAgY2ZnUGFyc2VyID0gc2VsZi51c2VyQ2ZnWydtYWluJ10KKyAgICAgICAgZWxpZiBjb25maWdTZXQgPT0gJ2RlZmF1bHQnOgorICAgICAgICAgICAgY2ZnUGFyc2VyID0gc2VsZi5kZWZhdWx0Q2ZnWydtYWluJ10KICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHJhaXNlIEludmFsaWRDb25maWdTZXQoJ0ludmFsaWQgY29uZmlnU2V0IHNwZWNpZmllZCcpCiAgICAgICAgIG9wdGlvbnM9Y2ZnUGFyc2VyLkdldE9wdGlvbkxpc3QoJ0hlbHBGaWxlcycpCiAgICAgICAgIGZvciBvcHRpb24gaW4gb3B0aW9uczoKLSAgICAgICAgICAgIHZhbHVlPWNmZ1BhcnNlci5HZXQoJ0hlbHBGaWxlcycsb3B0aW9uLGRlZmF1bHQ9JzsnKQotICAgICAgICAgICAgaWYgdmFsdWUuZmluZCgnOycpPT0tMTogI21hbGZvcm1lZCBjb25maWcgZW50cnkgd2l0aCBubyAnOycKLSAgICAgICAgICAgICAgICBtZW51SXRlbT0nJyAjbWFrZSB0aGVzZSBlbXB0eQotICAgICAgICAgICAgICAgIGhlbHBQYXRoPScnICNzbyB2YWx1ZSB3b24ndCBiZSBhZGRlZCB0byBsaXN0CisgICAgICAgICAgICB2YWx1ZT1jZmdQYXJzZXIuR2V0KCdIZWxwRmlsZXMnLCBvcHRpb24sIGRlZmF1bHQ9JzsnKQorICAgICAgICAgICAgaWYgdmFsdWUuZmluZCgnOycpID09IC0xOiAjbWFsZm9ybWVkIGNvbmZpZyBlbnRyeSB3aXRoIG5vICc7JworICAgICAgICAgICAgICAgIG1lbnVJdGVtID0gJycgI21ha2UgdGhlc2UgZW1wdHkKKyAgICAgICAgICAgICAgICBoZWxwUGF0aCA9ICcnICNzbyB2YWx1ZSB3b24ndCBiZSBhZGRlZCB0byBsaXN0CiAgICAgICAgICAgICBlbHNlOiAjY29uZmlnIGVudHJ5IGNvbnRhaW5zICc7JyBhcyBleHBlY3RlZAogICAgICAgICAgICAgICAgIHZhbHVlPXZhbHVlLnNwbGl0KCc7JykKICAgICAgICAgICAgICAgICBtZW51SXRlbT12YWx1ZVswXS5zdHJpcCgpCkBAIC02NzAsNDcgKzY4OCw3MyBAQAogICAgICAgICByZXR1cm4gaGVscFNvdXJjZXMKIAogICAgIGRlZiBHZXRBbGxFeHRyYUhlbHBTb3VyY2VzTGlzdChzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIGEgbGlzdCBvZiB0aGUgZGV0YWlscyBvZiBhbGwgYWRkaXRpb25hbCBoZWxwIHNvdXJjZXMuCisKKyAgICAgICAgVHVwbGVzIGluIHRoZSBsaXN0IGFyZSB0aG9zZSBvZiBHZXRFeHRyYUhlbHBTb3VyY2VMaXN0LgogICAgICAgICAiIiIKLSAgICAgICAgUmV0dXJucyBhIGxpc3Qgb2YgdHVwbGVzIGNvbnRhaW5pbmcgdGhlIGRldGFpbHMgb2YgYWxsIGFkZGl0aW9uYWwgaGVscAotICAgICAgICBzb3VyY2VzIGNvbmZpZ3VyZWQsIG9yIGFuIGVtcHR5IGxpc3QgaWYgdGhlcmUgYXJlIG5vbmUuIFR1cGxlcyBhcmUgb2YKLSAgICAgICAgdGhlIGZvcm1hdCByZXR1cm5lZCBieSBHZXRFeHRyYUhlbHBTb3VyY2VMaXN0LgotICAgICAgICAiIiIKLSAgICAgICAgYWxsSGVscFNvdXJjZXM9KCBzZWxmLkdldEV4dHJhSGVscFNvdXJjZUxpc3QoJ2RlZmF1bHQnKSsKKyAgICAgICAgYWxsSGVscFNvdXJjZXMgPSAoc2VsZi5HZXRFeHRyYUhlbHBTb3VyY2VMaXN0KCdkZWZhdWx0JykgKwogICAgICAgICAgICAgICAgIHNlbGYuR2V0RXh0cmFIZWxwU291cmNlTGlzdCgndXNlcicpICkKICAgICAgICAgcmV0dXJuIGFsbEhlbHBTb3VyY2VzCiAKKyAgICBkZWYgR2V0Rm9udChzZWxmLCByb290LCBjb25maWdUeXBlLCBzZWN0aW9uKToKKyAgICAgICAgIiIiUmV0cmlldmUgYSBmb250IGZyb20gY29uZmlndXJhdGlvbiAoZm9udCwgZm9udC1zaXplLCBmb250LWJvbGQpCisgICAgICAgIEludGVyY2VwdCB0aGUgc3BlY2lhbCB2YWx1ZSAnVGtGaXhlZEZvbnQnIGFuZCBzdWJzdGl0dXRlCisgICAgICAgIHRoZSBhY3R1YWwgZm9udCwgZmFjdG9yaW5nIGluIHNvbWUgdHdlYWtzIGlmIG5lZWRlZCBmb3IKKyAgICAgICAgYXBwZWFyYW5jZSBzYWtlcy4KKworICAgICAgICBUaGUgJ3Jvb3QnIHBhcmFtZXRlciBjYW4gbm9ybWFsbHkgYmUgYW55IHZhbGlkIFRraW50ZXIgd2lkZ2V0LgorCisgICAgICAgIFJldHVybiBhIHR1cGxlIChmYW1pbHksIHNpemUsIHdlaWdodCkgc3VpdGFibGUgZm9yIHBhc3NpbmcKKyAgICAgICAgdG8gdGtpbnRlci5Gb250CisgICAgICAgICIiIgorICAgICAgICBmYW1pbHkgPSBzZWxmLkdldE9wdGlvbihjb25maWdUeXBlLCBzZWN0aW9uLCAnZm9udCcsIGRlZmF1bHQ9J2NvdXJpZXInKQorICAgICAgICBzaXplID0gc2VsZi5HZXRPcHRpb24oY29uZmlnVHlwZSwgc2VjdGlvbiwgJ2ZvbnQtc2l6ZScsIHR5cGU9J2ludCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PScxMCcpCisgICAgICAgIGJvbGQgPSBzZWxmLkdldE9wdGlvbihjb25maWdUeXBlLCBzZWN0aW9uLCAnZm9udC1ib2xkJywgZGVmYXVsdD0wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0nYm9vbCcpCisgICAgICAgIGlmIChmYW1pbHkgPT0gJ1RrRml4ZWRGb250Jyk6CisgICAgICAgICAgICBpZiBUa1ZlcnNpb24gPCA4LjU6CisgICAgICAgICAgICAgICAgZmFtaWx5ID0gJ0NvdXJpZXInCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGYgPSBGb250KG5hbWU9J1RrRml4ZWRGb250JywgZXhpc3RzPVRydWUsIHJvb3Q9cm9vdCkKKyAgICAgICAgICAgICAgICBhY3R1YWxGb250ID0gRm9udC5hY3R1YWwoZikKKyAgICAgICAgICAgICAgICBmYW1pbHkgPSBhY3R1YWxGb250WydmYW1pbHknXQorICAgICAgICAgICAgICAgIHNpemUgPSBhY3R1YWxGb250WydzaXplJ10KKyAgICAgICAgICAgICAgICBpZiBzaXplIDwgMDoKKyAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDEwICAjIGlmIGZvbnQgaW4gcGl4ZWxzLCBpZ25vcmUgYWN0dWFsIHNpemUKKyAgICAgICAgICAgICAgICBib2xkID0gYWN0dWFsRm9udFsnd2VpZ2h0J109PSdib2xkJworICAgICAgICByZXR1cm4gKGZhbWlseSwgc2l6ZSwgJ2JvbGQnIGlmIGJvbGQgZWxzZSAnbm9ybWFsJykKKwogICAgIGRlZiBMb2FkQ2ZnRmlsZXMoc2VsZik6Ci0gICAgICAgICIiIgotICAgICAgICBsb2FkIGFsbCBjb25maWd1cmF0aW9uIGZpbGVzLgotICAgICAgICAiIiIKKyAgICAgICAgIkxvYWQgYWxsIGNvbmZpZ3VyYXRpb24gZmlsZXMuIgogICAgICAgICBmb3Iga2V5IGluIHNlbGYuZGVmYXVsdENmZzoKICAgICAgICAgICAgIHNlbGYuZGVmYXVsdENmZ1trZXldLkxvYWQoKQogICAgICAgICAgICAgc2VsZi51c2VyQ2ZnW2tleV0uTG9hZCgpICNzYW1lIGtleXMKIAogICAgIGRlZiBTYXZlVXNlckNmZ0ZpbGVzKHNlbGYpOgotICAgICAgICAiIiIKLSAgICAgICAgd3JpdGUgYWxsIGxvYWRlZCB1c2VyIGNvbmZpZ3VyYXRpb24gZmlsZXMgYmFjayB0byBkaXNrCi0gICAgICAgICIiIgorICAgICAgICAiV3JpdGUgYWxsIGxvYWRlZCB1c2VyIGNvbmZpZ3VyYXRpb24gZmlsZXMgdG8gZGlzay4iCiAgICAgICAgIGZvciBrZXkgaW4gc2VsZi51c2VyQ2ZnOgogICAgICAgICAgICAgc2VsZi51c2VyQ2ZnW2tleV0uU2F2ZSgpCiAKLWlkbGVDb25mPUlkbGVDb25mKCkKIAoraWRsZUNvbmYgPSBJZGxlQ29uZigpCisKKyMgVE9ETyBSZXZpc2UgdGVzdCBvdXRwdXQsIHdyaXRlIGV4cGFuZGVkIHVuaXR0ZXN0CiAjIyMgbW9kdWxlIHRlc3QKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgZGVmIGR1bXBDZmcoY2ZnKToKLSAgICAgICAgcHJpbnQoJ1xuJyxjZmcsJ1xuJykKKyAgICAgICAgcHJpbnQoJ1xuJywgY2ZnLCAnXG4nKQogICAgICAgICBmb3Iga2V5IGluIGNmZzoKLSAgICAgICAgICAgIHNlY3Rpb25zPWNmZ1trZXldLnNlY3Rpb25zKCkKKyAgICAgICAgICAgIHNlY3Rpb25zID0gY2ZnW2tleV0uc2VjdGlvbnMoKQogICAgICAgICAgICAgcHJpbnQoa2V5KQogICAgICAgICAgICAgcHJpbnQoc2VjdGlvbnMpCiAgICAgICAgICAgICBmb3Igc2VjdGlvbiBpbiBzZWN0aW9uczoKLSAgICAgICAgICAgICAgICBvcHRpb25zPWNmZ1trZXldLm9wdGlvbnMoc2VjdGlvbikKKyAgICAgICAgICAgICAgICBvcHRpb25zID0gY2ZnW2tleV0ub3B0aW9ucyhzZWN0aW9uKQogICAgICAgICAgICAgICAgIHByaW50KHNlY3Rpb24pCiAgICAgICAgICAgICAgICAgcHJpbnQob3B0aW9ucykKICAgICAgICAgICAgICAgICBmb3Igb3B0aW9uIGluIG9wdGlvbnM6Ci0gICAgICAgICAgICAgICAgICAgIHByaW50KG9wdGlvbiwgJz0nLCBjZmdba2V5XS5HZXQoc2VjdGlvbixvcHRpb24pKQorICAgICAgICAgICAgICAgICAgICBwcmludChvcHRpb24sICc9JywgY2ZnW2tleV0uR2V0KHNlY3Rpb24sIG9wdGlvbikpCiAgICAgZHVtcENmZyhpZGxlQ29uZi5kZWZhdWx0Q2ZnKQogICAgIGR1bXBDZmcoaWRsZUNvbmYudXNlckNmZykKLSAgICBwcmludChpZGxlQ29uZi51c2VyQ2ZnWydtYWluJ10uR2V0KCdUaGVtZScsJ25hbWUnKSkKKyAgICBwcmludChpZGxlQ29uZi51c2VyQ2ZnWydtYWluJ10uR2V0KCdUaGVtZScsICduYW1lJykpCiAgICAgI3ByaW50IGlkbGVDb25mLnVzZXJDZmdbJ2hpZ2hsaWdodCddLkdldERlZkhpZ2hsaWdodCgnRm9vJywnbm9ybWFsJykKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL2NvbmZpZ0hlbHBTb3VyY2VFZGl0LnB5IGIvTGliL2lkbGVsaWIvY29uZmlnSGVscFNvdXJjZUVkaXQucHkKaW5kZXggMmNjYjQwMC4uMjQyYjA4ZCAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvY29uZmlnSGVscFNvdXJjZUVkaXQucHkKKysrIGIvTGliL2lkbGVsaWIvY29uZmlnSGVscFNvdXJjZUVkaXQucHkKQEAgLTgsMTMgKzgsMTQgQEAKIGltcG9ydCB0a2ludGVyLmZpbGVkaWFsb2cgYXMgdGtGaWxlRGlhbG9nCiAKIGNsYXNzIEdldEhlbHBTb3VyY2VEaWFsb2coVG9wbGV2ZWwpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXJlbnQsIHRpdGxlLCBtZW51SXRlbT0nJywgZmlsZVBhdGg9JycpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXJlbnQsIHRpdGxlLCBtZW51SXRlbT0nJywgZmlsZVBhdGg9JycsIF9odGVzdD1GYWxzZSk6CiAgICAgICAgICIiIkdldCBtZW51IGVudHJ5IGFuZCB1cmwvIGxvY2FsIGZpbGUgbG9jYXRpb24gZm9yIEFkZGl0aW9uYWwgSGVscAogCiAgICAgICAgIFVzZXIgc2VsZWN0cyBhIG5hbWUgZm9yIHRoZSBIZWxwIHJlc291cmNlIGFuZCBwcm92aWRlcyBhIHdlYiB1cmwKICAgICAgICAgb3IgYSBsb2NhbCBmaWxlIGFzIGl0cyBzb3VyY2UuICBUaGUgdXNlciBjYW4gZW50ZXIgYSB1cmwgb3IgYnJvd3NlCiAgICAgICAgIGZvciB0aGUgZmlsZS4KIAorICAgICAgICBfaHRlc3QgLSBib29sLCBjaGFuZ2UgYm94IGxvY2F0aW9uIHdoZW4gcnVubmluZyBodGVzdAogICAgICAgICAiIiIKICAgICAgICAgVG9wbGV2ZWwuX19pbml0X18oc2VsZiwgcGFyZW50KQogICAgICAgICBzZWxmLmNvbmZpZ3VyZShib3JkZXJ3aWR0aD01KQpAQCAtMzEsMTIgKzMyLDE0IEBACiAgICAgICAgIHNlbGYud2l0aGRyYXcoKSAjaGlkZSB3aGlsZSBzZXR0aW5nIGdlb21ldHJ5CiAgICAgICAgICNuZWVkcyB0byBiZSBkb25lIGhlcmUgc28gdGhhdCB0aGUgd2luZm9fcmVxd2lkdGggaXMgdmFsaWQKICAgICAgICAgc2VsZi51cGRhdGVfaWRsZXRhc2tzKCkKLSAgICAgICAgI2NlbnRyZSBkaWFsb2cgb3ZlciBwYXJlbnQ6Ci0gICAgICAgIHNlbGYuZ2VvbWV0cnkoIislZCslZCIgJQotICAgICAgICAgICAgICAgICAgICAgICgocGFyZW50LndpbmZvX3Jvb3R4KCkgKyAoKHBhcmVudC53aW5mb193aWR0aCgpLzIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKHNlbGYud2luZm9fcmVxd2lkdGgoKS8yKSksCi0gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQud2luZm9fcm9vdHkoKSArICgocGFyZW50LndpbmZvX2hlaWdodCgpLzIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKHNlbGYud2luZm9fcmVxaGVpZ2h0KCkvMikpKSkpCisgICAgICAgICNjZW50cmUgZGlhbG9nIG92ZXIgcGFyZW50LiBiZWxvdyBwYXJlbnQgaWYgcnVubmluZyBodGVzdC4KKyAgICAgICAgc2VsZi5nZW9tZXRyeSgKKyAgICAgICAgICAgICAgICAiKyVkKyVkIiAlICgKKyAgICAgICAgICAgICAgICAgICAgcGFyZW50LndpbmZvX3Jvb3R4KCkgKworICAgICAgICAgICAgICAgICAgICAocGFyZW50LndpbmZvX3dpZHRoKCkvMiAtIHNlbGYud2luZm9fcmVxd2lkdGgoKS8yKSwKKyAgICAgICAgICAgICAgICAgICAgcGFyZW50LndpbmZvX3Jvb3R5KCkgKworICAgICAgICAgICAgICAgICAgICAoKHBhcmVudC53aW5mb19oZWlnaHQoKS8yIC0gc2VsZi53aW5mb19yZXFoZWlnaHQoKS8yKQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgX2h0ZXN0IGVsc2UgMTUwKSkpCiAgICAgICAgIHNlbGYuZGVpY29uaWZ5KCkgI2dlb21ldHJ5IHNldCwgdW5oaWRlCiAgICAgICAgIHNlbGYuYmluZCgnPFJldHVybj4nLCBzZWxmLk9rKQogICAgICAgICBzZWxmLndhaXRfd2luZG93KCkKQEAgLTE1OSwxMSArMTYyLDUgQEAKICAgICAgICAgc2VsZi5kZXN0cm95KCkKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICAjdGVzdCB0aGUgZGlhbG9nCi0gICAgcm9vdCA9IFRrKCkKLSAgICBkZWYgcnVuKCk6Ci0gICAgICAgIGtleVNlcSA9ICcnCi0gICAgICAgIGRsZyA9IEdldEhlbHBTb3VyY2VEaWFsb2cocm9vdCwgJ0dldCBIZWxwIFNvdXJjZScpCi0gICAgICAgIHByaW50KGRsZy5yZXN1bHQpCi0gICAgQnV0dG9uKHJvb3QsdGV4dD0nRGlhbG9nJywgY29tbWFuZD1ydW4pLnBhY2soKQotICAgIHJvb3QubWFpbmxvb3AoKQorICAgIGZyb20gaWRsZWxpYi5pZGxlX3Rlc3QuaHRlc3QgaW1wb3J0IHJ1bgorICAgIHJ1bihHZXRIZWxwU291cmNlRGlhbG9nKQpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvY29uZmlnU2VjdGlvbk5hbWVEaWFsb2cucHkgYi9MaWIvaWRsZWxpYi9jb25maWdTZWN0aW9uTmFtZURpYWxvZy5weQppbmRleCBiMDVlMzhlLi41MTM3ODM2IDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9jb25maWdTZWN0aW9uTmFtZURpYWxvZy5weQorKysgYi9MaWIvaWRsZWxpYi9jb25maWdTZWN0aW9uTmFtZURpYWxvZy5weQpAQCAtOCwxMCArOCwxMSBAQAogaW1wb3J0IHRraW50ZXIubWVzc2FnZWJveCBhcyB0a01lc3NhZ2VCb3gKIAogY2xhc3MgR2V0Q2ZnU2VjdGlvbk5hbWVEaWFsb2coVG9wbGV2ZWwpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXJlbnQsIHRpdGxlLCBtZXNzYWdlLCB1c2VkX25hbWVzKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcGFyZW50LCB0aXRsZSwgbWVzc2FnZSwgdXNlZF9uYW1lcywgX2h0ZXN0PUZhbHNlKToKICAgICAgICAgIiIiCiAgICAgICAgIG1lc3NhZ2UgLSBzdHJpbmcsIGluZm9ybWF0aW9uYWwgbWVzc2FnZSB0byBkaXNwbGF5CiAgICAgICAgIHVzZWRfbmFtZXMgLSBzdHJpbmcgY29sbGVjdGlvbiwgbmFtZXMgYWxyZWFkeSBpbiB1c2UgZm9yIHZhbGlkaXR5IGNoZWNrCisgICAgICAgIF9odGVzdCAtIGJvb2wsIGNoYW5nZSBib3ggbG9jYXRpb24gd2hlbiBydW5uaW5nIGh0ZXN0CiAgICAgICAgICIiIgogICAgICAgICBUb3BsZXZlbC5fX2luaXRfXyhzZWxmLCBwYXJlbnQpCiAgICAgICAgIHNlbGYuY29uZmlndXJlKGJvcmRlcndpZHRoPTUpCkBAIC0zMCwxMSArMzEsMTIgQEAKICAgICAgICAgc2VsZi5tZXNzYWdlSW5mby5jb25maWcod2lkdGg9c2VsZi5mcmFtZU1haW4ud2luZm9fcmVxd2lkdGgoKSkKICAgICAgICAgc2VsZi5nZW9tZXRyeSgKICAgICAgICAgICAgICAgICAiKyVkKyVkIiAlICgKLSAgICAgICAgICAgICAgICBwYXJlbnQud2luZm9fcm9vdHgoKSArCi0gICAgICAgICAgICAgICAgKHBhcmVudC53aW5mb193aWR0aCgpLzIgLSBzZWxmLndpbmZvX3JlcXdpZHRoKCkvMiksCi0gICAgICAgICAgICAgICAgcGFyZW50LndpbmZvX3Jvb3R5KCkgKwotICAgICAgICAgICAgICAgIChwYXJlbnQud2luZm9faGVpZ2h0KCkvMiAtIHNlbGYud2luZm9fcmVxaGVpZ2h0KCkvMikKLSAgICAgICAgICAgICAgICApICkgICNjZW50cmUgZGlhbG9nIG92ZXIgcGFyZW50CisgICAgICAgICAgICAgICAgICAgIHBhcmVudC53aW5mb19yb290eCgpICsKKyAgICAgICAgICAgICAgICAgICAgKHBhcmVudC53aW5mb193aWR0aCgpLzIgLSBzZWxmLndpbmZvX3JlcXdpZHRoKCkvMiksCisgICAgICAgICAgICAgICAgICAgIHBhcmVudC53aW5mb19yb290eSgpICsKKyAgICAgICAgICAgICAgICAgICAgKChwYXJlbnQud2luZm9faGVpZ2h0KCkvMiAtIHNlbGYud2luZm9fcmVxaGVpZ2h0KCkvMikKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IF9odGVzdCBlbHNlIDEwMCkKKyAgICAgICAgICAgICAgICApICkgICNjZW50cmUgZGlhbG9nIG92ZXIgcGFyZW50IChvciBiZWxvdyBodGVzdCBib3gpCiAgICAgICAgIHNlbGYuZGVpY29uaWZ5KCkgICNnZW9tZXRyeSBzZXQsIHVuaGlkZQogICAgICAgICBzZWxmLndhaXRfd2luZG93KCkKIApAQCAtOTIsMTUgKzk0LDUgQEAKICAgICBpbXBvcnQgdW5pdHRlc3QKICAgICB1bml0dGVzdC5tYWluKCdpZGxlbGliLmlkbGVfdGVzdC50ZXN0X2NvbmZpZ19uYW1lJywgdmVyYm9zaXR5PTIsIGV4aXQ9RmFsc2UpCiAKLSAgICAjIGFsc28gaHVtYW4gdGVzdCB0aGUgZGlhbG9nCi0gICAgcm9vdCA9IFRrKCkKLSAgICBkZWYgcnVuKCk6Ci0gICAgICAgIGRsZz1HZXRDZmdTZWN0aW9uTmFtZURpYWxvZyhyb290LCdHZXQgTmFtZScsCi0gICAgICAgICAgICAgICAgIkFmdGVyIHRoZSB0ZXh0IGVudGVyZWQgd2l0aCBbT2tdIGlzIHN0cmlwcGVkLCA8bm90aGluZz4sICIKLSAgICAgICAgICAgICAgICAiJ2FiYycsIG9yIG1vcmUgdGhhdCAzMCBjaGFycyBhcmUgZXJyb3JzLiAiCi0gICAgICAgICAgICAgICAgIkNsb3NlIHdpdGggYSB2YWxpZCBlbnRyeSAocHJpbnRlZCksIFtDYW5jZWxdLCBvciBbWF0iLAotICAgICAgICAgICAgICAgIHsnYWJjJ30pCi0gICAgICAgIHByaW50KGRsZy5yZXN1bHQpCi0gICAgTWVzc2FnZShyb290LCB0ZXh0PScnKS5wYWNrKCkgICMgd2lsbCBiZSBuZWVkZWQgZm9yIG9oZXIgZGlhbG9nIHRlc3RzCi0gICAgQnV0dG9uKHJvb3QsIHRleHQ9J0NsaWNrIHRvIGJlZ2luIGRpYWxvZyB0ZXN0JywgY29tbWFuZD1ydW4pLnBhY2soKQotICAgIHJvb3QubWFpbmxvb3AoKQorICAgIGZyb20gaWRsZWxpYi5pZGxlX3Rlc3QuaHRlc3QgaW1wb3J0IHJ1bgorICAgIHJ1bihHZXRDZmdTZWN0aW9uTmFtZURpYWxvZykKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL2R5bk9wdGlvbk1lbnVXaWRnZXQucHkgYi9MaWIvaWRsZWxpYi9keW5PcHRpb25NZW51V2lkZ2V0LnB5CmluZGV4IDkyMmRlOTYuLjUxNWI0YmEgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL2R5bk9wdGlvbk1lbnVXaWRnZXQucHkKKysrIGIvTGliL2lkbGVsaWIvZHluT3B0aW9uTWVudVdpZGdldC5weQpAQCAtMiwxNiArMiwxNSBAQAogT3B0aW9uTWVudSB3aWRnZXQgbW9kaWZpZWQgdG8gYWxsb3cgZHluYW1pYyBtZW51IHJlY29uZmlndXJhdGlvbgogYW5kIHNldHRpbmcgb2YgaGlnaGxpZ2h0dGhpY2tuZXNzCiAiIiIKLWZyb20gdGtpbnRlciBpbXBvcnQgT3B0aW9uTWVudQotZnJvbSB0a2ludGVyIGltcG9ydCBfc2V0aXQKIGltcG9ydCBjb3B5Citmcm9tIHRraW50ZXIgaW1wb3J0IE9wdGlvbk1lbnUsIF9zZXRpdCwgU3RyaW5nVmFyLCBCdXR0b24KIAogY2xhc3MgRHluT3B0aW9uTWVudShPcHRpb25NZW51KToKICAgICAiIiIKICAgICB1bmxpa2UgT3B0aW9uTWVudSwgb3VyIGt3YXJncyBjYW4gaW5jbHVkZSBoaWdobGlnaHR0aGlja25lc3MKICAgICAiIiIKICAgICBkZWYgX19pbml0X18oc2VsZiwgbWFzdGVyLCB2YXJpYWJsZSwgdmFsdWUsICp2YWx1ZXMsICoqa3dhcmdzKToKLSAgICAgICAgI2dldCBhIGNvcHkgb2Yga3dhcmdzIGJlZm9yZSBPcHRpb25NZW51Ll9faW5pdF9fIG11bmdlcyB0aGVtCisgICAgICAgICMgVE9ETyBjb3B5IHZhbHVlIGluc3RlYWQgb2Ygd2hvbGUgZGljdAogICAgICAgICBrd2FyZ3NDb3B5PWNvcHkuY29weShrd2FyZ3MpCiAgICAgICAgIGlmICdoaWdobGlnaHR0aGlja25lc3MnIGluIGxpc3Qoa3dhcmdzLmtleXMoKSk6CiAgICAgICAgICAgICBkZWwoa3dhcmdzWydoaWdobGlnaHR0aGlja25lc3MnXSkKQEAgLTMzLDMgKzMyLDI2IEBACiAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ9X3NldGl0KHNlbGYudmFyaWFibGUsaXRlbSxzZWxmLmNvbW1hbmQpKQogICAgICAgICBpZiB2YWx1ZToKICAgICAgICAgICAgIHNlbGYudmFyaWFibGUuc2V0KHZhbHVlKQorCitkZWYgX2R5bl9vcHRpb25fbWVudShwYXJlbnQpOiAgIyBodGVzdCAjCisgICAgZnJvbSB0a2ludGVyIGltcG9ydCBUb3BsZXZlbAorCisgICAgdG9wID0gVG9wbGV2ZWwoKQorICAgIHRvcC50aXRsZSgiVGV0cyBkeW5hbWljIG9wdGlvbiBtZW51IikKKyAgICB0b3AuZ2VvbWV0cnkoIjIwMHgxMDArJWQrJWQiICUgKHBhcmVudC53aW5mb19yb290eCgpICsgMjAwLAorICAgICAgICAgICAgICAgICAgcGFyZW50LndpbmZvX3Jvb3R5KCkgKyAxNTApKQorICAgIHRvcC5mb2N1c19zZXQoKQorCisgICAgdmFyID0gU3RyaW5nVmFyKHRvcCkKKyAgICB2YXIuc2V0KCJPbGQgb3B0aW9uIHNldCIpICNTZXQgdGhlIGRlZmF1bHQgdmFsdWUKKyAgICBkeW4gPSBEeW5PcHRpb25NZW51KHRvcCx2YXIsICJvbGQxIiwib2xkMiIsIm9sZDMiLCJvbGQ0IikKKyAgICBkeW4ucGFjaygpCisKKyAgICBkZWYgdXBkYXRlKCk6CisgICAgICAgIGR5bi5TZXRNZW51KFsibmV3MSIsIm5ldzIiLCJuZXczIiwibmV3NCJdLCB2YWx1ZT0ibmV3IG9wdGlvbiBzZXQiKQorICAgIGJ1dHRvbiA9IEJ1dHRvbih0b3AsIHRleHQ9IkNoYW5nZSBvcHRpb24gc2V0IiwgY29tbWFuZD11cGRhdGUpCisgICAgYnV0dG9uLnBhY2soKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIGZyb20gaWRsZWxpYi5pZGxlX3Rlc3QuaHRlc3QgaW1wb3J0IHJ1bgorICAgIHJ1bihfZHluX29wdGlvbl9tZW51KQpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvaGVscC5odG1sIGIvTGliL2lkbGVsaWIvaGVscC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxODlmZDQKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvaWRsZWxpYi9oZWxwLmh0bWwKQEAgLTAsMCArMSw3MDkgQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iCisgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KKworCis8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+CisgIDxoZWFkPgorICAgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiAvPgorCisgICAgPHRpdGxlPjI1LjUuIElETEUgJm1kYXNoOyBQeXRob24gMy40LjMgZG9jdW1lbnRhdGlvbjwvdGl0bGU+CisKKyAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL19zdGF0aWMvcHlkb2N0aGVtZS5jc3MiIHR5cGU9InRleHQvY3NzIiAvPgorICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vX3N0YXRpYy9weWdtZW50cy5jc3MiIHR5cGU9InRleHQvY3NzIiAvPgorCisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICAgICAgdmFyIERPQ1VNRU5UQVRJT05fT1BUSU9OUyA9IHsKKyAgICAgICAgVVJMX1JPT1Q6ICAgICcuLi8nLAorICAgICAgICBWRVJTSU9OOiAgICAgJzMuNC4zJywKKyAgICAgICAgQ09MTEFQU0VfSU5ERVg6IGZhbHNlLAorICAgICAgICBGSUxFX1NVRkZJWDogJy5odG1sJywKKyAgICAgICAgSEFTX1NPVVJDRTogIHRydWUKKyAgICAgIH07CisgICAgPC9zY3JpcHQ+CisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi4vX3N0YXRpYy9qcXVlcnkuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4uL19zdGF0aWMvdW5kZXJzY29yZS5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi4vX3N0YXRpYy9kb2N0b29scy5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi4vX3N0YXRpYy9zaWRlYmFyLmpzIj48L3NjcmlwdD4KKyAgICA8bGluayByZWw9InNlYXJjaCIgdHlwZT0iYXBwbGljYXRpb24vb3BlbnNlYXJjaGRlc2NyaXB0aW9uK3htbCIKKyAgICAgICAgICB0aXRsZT0iU2VhcmNoIHdpdGhpbiBQeXRob24gMy40LjMgZG9jdW1lbnRhdGlvbiIKKyAgICAgICAgICBocmVmPSIuLi9fc3RhdGljL29wZW5zZWFyY2gueG1sIi8+CisgICAgPGxpbmsgcmVsPSJhdXRob3IiIHRpdGxlPSJBYm91dCB0aGVzZSBkb2N1bWVudHMiIGhyZWY9Ii4uL2Fib3V0Lmh0bWwiIC8+CisgICAgPGxpbmsgcmVsPSJjb3B5cmlnaHQiIHRpdGxlPSJDb3B5cmlnaHQiIGhyZWY9Ii4uL2NvcHlyaWdodC5odG1sIiAvPgorICAgIDxsaW5rIHJlbD0idG9wIiB0aXRsZT0iUHl0aG9uIDMuNC4zIGRvY3VtZW50YXRpb24iIGhyZWY9Ii4uL2luZGV4Lmh0bWwiIC8+CisgICAgPGxpbmsgcmVsPSJ1cCIgdGl0bGU9IjI1LiBHcmFwaGljYWwgVXNlciBJbnRlcmZhY2VzIHdpdGggVGsiIGhyZWY9InRrLmh0bWwiIC8+CisgICAgPGxpbmsgcmVsPSJuZXh0IiB0aXRsZT0iMjUuNi4gT3RoZXIgR3JhcGhpY2FsIFVzZXIgSW50ZXJmYWNlIFBhY2thZ2VzIiBocmVmPSJvdGhlcmd1aS5odG1sIiAvPgorICAgIDxsaW5rIHJlbD0icHJldiIgdGl0bGU9IjI1LjQuIHRraW50ZXIuc2Nyb2xsZWR0ZXh0IOKAlCBTY3JvbGxlZCBUZXh0IFdpZGdldCIgaHJlZj0idGtpbnRlci5zY3JvbGxlZHRleHQuaHRtbCIgLz4KKyAgICA8bGluayByZWw9InNob3J0Y3V0IGljb24iIHR5cGU9ImltYWdlL3BuZyIgaHJlZj0iLi4vX3N0YXRpYy9weS5wbmciIC8+CisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi4vX3N0YXRpYy9jb3B5YnV0dG9uLmpzIj48L3NjcmlwdD4KKworCisKKworICA8L2hlYWQ+CisgIDxib2R5PgorICAgIDxkaXYgY2xhc3M9InJlbGF0ZWQiPgorICAgICAgPGgzPk5hdmlnYXRpb248L2gzPgorICAgICAgPHVsPgorICAgICAgICA8bGkgY2xhc3M9InJpZ2h0IiBzdHlsZT0ibWFyZ2luLXJpZ2h0OiAxMHB4Ij4KKyAgICAgICAgICA8YSBocmVmPSIuLi9nZW5pbmRleC5odG1sIiB0aXRsZT0iR2VuZXJhbCBJbmRleCIKKyAgICAgICAgICAgICBhY2Nlc3NrZXk9IkkiPmluZGV4PC9hPjwvbGk+CisgICAgICAgIDxsaSBjbGFzcz0icmlnaHQiID4KKyAgICAgICAgICA8YSBocmVmPSIuLi9weS1tb2RpbmRleC5odG1sIiB0aXRsZT0iUHl0aG9uIE1vZHVsZSBJbmRleCIKKyAgICAgICAgICAgICA+bW9kdWxlczwvYT4gfDwvbGk+CisgICAgICAgIDxsaSBjbGFzcz0icmlnaHQiID4KKyAgICAgICAgICA8YSBocmVmPSJvdGhlcmd1aS5odG1sIiB0aXRsZT0iMjUuNi4gT3RoZXIgR3JhcGhpY2FsIFVzZXIgSW50ZXJmYWNlIFBhY2thZ2VzIgorICAgICAgICAgICAgIGFjY2Vzc2tleT0iTiI+bmV4dDwvYT4gfDwvbGk+CisgICAgICAgIDxsaSBjbGFzcz0icmlnaHQiID4KKyAgICAgICAgICA8YSBocmVmPSJ0a2ludGVyLnNjcm9sbGVkdGV4dC5odG1sIiB0aXRsZT0iMjUuNC4gdGtpbnRlci5zY3JvbGxlZHRleHQg4oCUIFNjcm9sbGVkIFRleHQgV2lkZ2V0IgorICAgICAgICAgICAgIGFjY2Vzc2tleT0iUCI+cHJldmlvdXM8L2E+IHw8L2xpPgorICAgICAgICA8bGk+PGltZyBzcmM9Ii4uL19zdGF0aWMvcHkucG5nIiBhbHQ9IiIKKyAgICAgICAgICAgICAgICAgc3R5bGU9InZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IG1hcmdpbi10b3A6IC0xcHgiLz48L2xpPgorICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly93d3cucHl0aG9uLm9yZy8iPlB5dGhvbjwvYT4gJnJhcXVvOzwvbGk+CisgICAgICAgIDxsaT4KKyAgICAgICAgICA8YSBocmVmPSIuLi9pbmRleC5odG1sIj4zLjQuMyBEb2N1bWVudGF0aW9uPC9hPiAmcmFxdW87CisgICAgICAgIDwvbGk+CisKKyAgICAgICAgICA8bGk+PGEgaHJlZj0iaW5kZXguaHRtbCIgPlRoZSBQeXRob24gU3RhbmRhcmQgTGlicmFyeTwvYT4gJnJhcXVvOzwvbGk+CisgICAgICAgICAgPGxpPjxhIGhyZWY9InRrLmh0bWwiIGFjY2Vzc2tleT0iVSI+MjUuIEdyYXBoaWNhbCBVc2VyIEludGVyZmFjZXMgd2l0aCBUazwvYT4gJnJhcXVvOzwvbGk+CisgICAgICA8L3VsPgorICAgIDwvZGl2PgorCisgICAgPGRpdiBjbGFzcz0iZG9jdW1lbnQiPgorICAgICAgPGRpdiBjbGFzcz0iZG9jdW1lbnR3cmFwcGVyIj4KKyAgICAgICAgPGRpdiBjbGFzcz0iYm9keXdyYXBwZXIiPgorICAgICAgICAgIDxkaXYgY2xhc3M9ImJvZHkiPgorCisgIDxkaXYgY2xhc3M9InNlY3Rpb24iIGlkPSJpZGxlIj4KKzxzcGFuIGlkPSJpZDEiPjwvc3Bhbj48aDE+MjUuNS4gSURMRTxhIGNsYXNzPSJoZWFkZXJsaW5rIiBocmVmPSIjaWRsZSIgdGl0bGU9IlBlcm1hbGluayB0byB0aGlzIGhlYWRsaW5lIj7CtjwvYT48L2gxPgorPHAgaWQ9ImluZGV4LTAiPklETEUgaXMgUHl0aG9uJiM4MjE3O3MgSW50ZWdyYXRlZCBEZXZlbG9wbWVudCBhbmQgTGVhcm5pbmcgRW52aXJvbm1lbnQuPC9wPgorPHA+SURMRSBoYXMgdGhlIGZvbGxvd2luZyBmZWF0dXJlczo8L3A+Cis8dWwgY2xhc3M9InNpbXBsZSI+Cis8bGk+Y29kZWQgaW4gMTAwJSBwdXJlIFB5dGhvbiwgdXNpbmcgdGhlIDxhIGNsYXNzPSJyZWZlcmVuY2UgaW50ZXJuYWwiIGhyZWY9InRraW50ZXIuaHRtbCNtb2R1bGUtdGtpbnRlciIgdGl0bGU9InRraW50ZXI6IEludGVyZmFjZSB0byBUY2wvVGsgZm9yIGdyYXBoaWNhbCB1c2VyIGludGVyZmFjZXMiPjx0dCBjbGFzcz0ieHJlZiBweSBweS1tb2QgZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+dGtpbnRlcjwvc3Bhbj48L3R0PjwvYT4gR1VJIHRvb2xraXQ8L2xpPgorPGxpPmNyb3NzLXBsYXRmb3JtOiB3b3JrcyBtb3N0bHkgdGhlIHNhbWUgb24gV2luZG93cywgVW5peCwgYW5kIE1hYyBPUyBYPC9saT4KKzxsaT5QeXRob24gc2hlbGwgd2luZG93IChpbnRlcmFjdGl2ZSBpbnRlcnByZXRlcikgd2l0aCBjb2xvcml6aW5nCitvZiBjb2RlIGlucHV0LCBvdXRwdXQsIGFuZCBlcnJvciBtZXNzYWdlczwvbGk+Cis8bGk+bXVsdGktd2luZG93IHRleHQgZWRpdG9yIHdpdGggbXVsdGlwbGUgdW5kbywgUHl0aG9uIGNvbG9yaXppbmcsCitzbWFydCBpbmRlbnQsIGNhbGwgdGlwcywgYXV0byBjb21wbGV0aW9uLCBhbmQgb3RoZXIgZmVhdHVyZXM8L2xpPgorPGxpPnNlYXJjaCB3aXRoaW4gYW55IHdpbmRvdywgcmVwbGFjZSB3aXRoaW4gZWRpdG9yIHdpbmRvd3MsIGFuZCBzZWFyY2gKK3Rocm91Z2ggbXVsdGlwbGUgZmlsZXMgKGdyZXApPC9saT4KKzxsaT5kZWJ1Z2dlciB3aXRoIHBlcnNpc3RlbnQgYnJlYWtwb2ludHMsIHN0ZXBwaW5nLCBhbmQgdmlld2luZworb2YgZ2xvYmFsIGFuZCBsb2NhbCBuYW1lc3BhY2VzPC9saT4KKzxsaT5jb25maWd1cmF0aW9uLCBicm93c2VycywgYW5kIG90aGVyIGRpYWxvZ3M8L2xpPgorPC91bD4KKzxkaXYgY2xhc3M9InNlY3Rpb24iIGlkPSJtZW51cyI+Cis8aDI+MjUuNS4xLiBNZW51czxhIGNsYXNzPSJoZWFkZXJsaW5rIiBocmVmPSIjbWVudXMiIHRpdGxlPSJQZXJtYWxpbmsgdG8gdGhpcyBoZWFkbGluZSI+wrY8L2E+PC9oMj4KKzxwPklETEUgaGFzIHR3byBtYWluIHdpbmRvdyB0eXBlcywgdGhlIFNoZWxsIHdpbmRvdyBhbmQgdGhlIEVkaXRvciB3aW5kb3cuICBJdCBpcworcG9zc2libGUgdG8gaGF2ZSBtdWx0aXBsZSBlZGl0b3Igd2luZG93cyBzaW11bHRhbmVvdXNseS4gIE91dHB1dCB3aW5kb3dzLCBzdWNoCithcyB1c2VkIGZvciBFZGl0IC8gRmluZCBpbiBGaWxlcywgYXJlIGEgc3VidHlwZSBvZiBlZGl0IHdpbmRvdy4gIFRoZXkgY3VycmVudGx5CitoYXZlIHRoZSBzYW1lIHRvcCBtZW51IGFzIEVkaXRvciB3aW5kb3dzIGJ1dCBhIGRpZmZlcmVudCBkZWZhdWx0IHRpdGxlIGFuZAorY29udGV4dCBtZW51LjwvcD4KKzxwPklETEUmIzgyMTc7cyBtZW51cyBkeW5hbWljYWxseSBjaGFuZ2UgYmFzZWQgb24gd2hpY2ggd2luZG93IGlzIGN1cnJlbnRseSBzZWxlY3RlZC4KK0VhY2ggbWVudSBkb2N1bWVudGVkIGJlbG93IGluZGljYXRlcyB3aGljaCB3aW5kb3cgdHlwZSBpdCBpcyBhc3NvY2lhdGVkIHdpdGguPC9wPgorPGRpdiBjbGFzcz0ic2VjdGlvbiIgaWQ9ImZpbGUtbWVudS1zaGVsbC1hbmQtZWRpdG9yIj4KKzxoMz4yNS41LjEuMS4gRmlsZSBtZW51IChTaGVsbCBhbmQgRWRpdG9yKTxhIGNsYXNzPSJoZWFkZXJsaW5rIiBocmVmPSIjZmlsZS1tZW51LXNoZWxsLWFuZC1lZGl0b3IiIHRpdGxlPSJQZXJtYWxpbmsgdG8gdGhpcyBoZWFkbGluZSI+wrY8L2E+PC9oMz4KKzxkbCBjbGFzcz0iZG9jdXRpbHMiPgorPGR0Pk5ldyBGaWxlPC9kdD4KKzxkZD5DcmVhdGUgYSBuZXcgZmlsZSBlZGl0aW5nIHdpbmRvdy48L2RkPgorPGR0Pk9wZW4uLi48L2R0PgorPGRkPk9wZW4gYW4gZXhpc3RpbmcgZmlsZSB3aXRoIGFuIE9wZW4gZGlhbG9nLjwvZGQ+Cis8ZHQ+UmVjZW50IEZpbGVzPC9kdD4KKzxkZD5PcGVuIGEgbGlzdCBvZiByZWNlbnQgZmlsZXMuICBDbGljayBvbmUgdG8gb3BlbiBpdC48L2RkPgorPGR0Pk9wZW4gTW9kdWxlLi4uPC9kdD4KKzxkZD5PcGVuIGFuIGV4aXN0aW5nIG1vZHVsZSAoc2VhcmNoZXMgc3lzLnBhdGgpLjwvZGQ+Cis8L2RsPgorPGRsIGNsYXNzPSJkb2N1dGlscyIgaWQ9ImluZGV4LTEiPgorPGR0PkNsYXNzIEJyb3dzZXI8L2R0PgorPGRkPlNob3cgZnVuY3Rpb25zLCBjbGFzc2VzLCBhbmQgbWV0aG9kcyBpbiB0aGUgY3VycmVudCBFZGl0b3IgZmlsZSBpbiBhCit0cmVlIHN0cnVjdHVyZS4gIEluIHRoZSBzaGVsbCwgb3BlbiBhIG1vZHVsZSBmaXJzdC48L2RkPgorPGR0PlBhdGggQnJvd3NlcjwvZHQ+Cis8ZGQ+U2hvdyBzeXMucGF0aCBkaXJlY3RvcmllcywgbW9kdWxlcywgZnVuY3Rpb25zLCBjbGFzc2VzIGFuZCBtZXRob2RzIGluIGEKK3RyZWUgc3RydWN0dXJlLjwvZGQ+Cis8ZHQ+U2F2ZTwvZHQ+Cis8ZGQ+U2F2ZSB0aGUgY3VycmVudCB3aW5kb3cgdG8gdGhlIGFzc29jaWF0ZWQgZmlsZSwgaWYgdGhlcmUgaXMgb25lLiAgV2luZG93cwordGhhdCBoYXZlIGJlZW4gY2hhbmdlZCBzaW5jZSBiZWluZyBvcGVuZWQgb3IgbGFzdCBzYXZlZCBoYXZlIGEgKiBiZWZvcmUKK2FuZCBhZnRlciB0aGUgd2luZG93IHRpdGxlLiAgSWYgdGhlcmUgaXMgbm8gYXNzb2NpYXRlZCBmaWxlLAorZG8gU2F2ZSBBcyBpbnN0ZWFkLjwvZGQ+Cis8ZHQ+U2F2ZSBBcy4uLjwvZHQ+Cis8ZGQ+U2F2ZSB0aGUgY3VycmVudCB3aW5kb3cgd2l0aCBhIFNhdmUgQXMgZGlhbG9nLiAgVGhlIGZpbGUgc2F2ZWQgYmVjb21lcyB0aGUKK25ldyBhc3NvY2lhdGVkIGZpbGUgZm9yIHRoZSB3aW5kb3cuPC9kZD4KKzxkdD5TYXZlIENvcHkgQXMuLi48L2R0PgorPGRkPlNhdmUgdGhlIGN1cnJlbnQgd2luZG93IHRvIGRpZmZlcmVudCBmaWxlIHdpdGhvdXQgY2hhbmdpbmcgdGhlIGFzc29jaWF0ZWQKK2ZpbGUuPC9kZD4KKzxkdD5QcmludCBXaW5kb3c8L2R0PgorPGRkPlByaW50IHRoZSBjdXJyZW50IHdpbmRvdyB0byB0aGUgZGVmYXVsdCBwcmludGVyLjwvZGQ+Cis8ZHQ+Q2xvc2U8L2R0PgorPGRkPkNsb3NlIHRoZSBjdXJyZW50IHdpbmRvdyAoYXNrIHRvIHNhdmUgaWYgdW5zYXZlZCkuPC9kZD4KKzxkdD5FeGl0PC9kdD4KKzxkZD5DbG9zZSBhbGwgd2luZG93cyBhbmQgcXVpdCBJRExFIChhc2sgdG8gc2F2ZSB1bnNhdmVkIHdpbmRvd3MpLjwvZGQ+Cis8L2RsPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJzZWN0aW9uIiBpZD0iZWRpdC1tZW51LXNoZWxsLWFuZC1lZGl0b3IiPgorPGgzPjI1LjUuMS4yLiBFZGl0IG1lbnUgKFNoZWxsIGFuZCBFZGl0b3IpPGEgY2xhc3M9ImhlYWRlcmxpbmsiIGhyZWY9IiNlZGl0LW1lbnUtc2hlbGwtYW5kLWVkaXRvciIgdGl0bGU9IlBlcm1hbGluayB0byB0aGlzIGhlYWRsaW5lIj7CtjwvYT48L2gzPgorPGRsIGNsYXNzPSJkb2N1dGlscyI+Cis8ZHQ+VW5kbzwvZHQ+Cis8ZGQ+VW5kbyB0aGUgbGFzdCBjaGFuZ2UgdG8gdGhlIGN1cnJlbnQgd2luZG93LiAgQSBtYXhpbXVtIG9mIDEwMDAgY2hhbmdlcyBtYXkKK2JlIHVuZG9uZS48L2RkPgorPGR0PlJlZG88L2R0PgorPGRkPlJlZG8gdGhlIGxhc3QgdW5kb25lIGNoYW5nZSB0byB0aGUgY3VycmVudCB3aW5kb3cuPC9kZD4KKzxkdD5DdXQ8L2R0PgorPGRkPkNvcHkgc2VsZWN0aW9uIGludG8gdGhlIHN5c3RlbS13aWRlIGNsaXBib2FyZDsgdGhlbiBkZWxldGUgdGhlIHNlbGVjdGlvbi48L2RkPgorPGR0PkNvcHk8L2R0PgorPGRkPkNvcHkgc2VsZWN0aW9uIGludG8gdGhlIHN5c3RlbS13aWRlIGNsaXBib2FyZC48L2RkPgorPGR0PlBhc3RlPC9kdD4KKzxkZD5JbnNlcnQgY29udGVudHMgb2YgdGhlIHN5c3RlbS13aWRlIGNsaXBib2FyZCBpbnRvIHRoZSBjdXJyZW50IHdpbmRvdy48L2RkPgorPC9kbD4KKzxwPlRoZSBjbGlwYm9hcmQgZnVuY3Rpb25zIGFyZSBhbHNvIGF2YWlsYWJsZSBpbiBjb250ZXh0IG1lbnVzLjwvcD4KKzxkbCBjbGFzcz0iZG9jdXRpbHMiPgorPGR0PlNlbGVjdCBBbGw8L2R0PgorPGRkPlNlbGVjdCB0aGUgZW50aXJlIGNvbnRlbnRzIG9mIHRoZSBjdXJyZW50IHdpbmRvdy48L2RkPgorPGR0PkZpbmQuLi48L2R0PgorPGRkPk9wZW4gYSBzZWFyY2ggZGlhbG9nIHdpdGggbWFueSBvcHRpb25zPC9kZD4KKzxkdD5GaW5kIEFnYWluPC9kdD4KKzxkZD5SZXBlYXQgdGhlIGxhc3Qgc2VhcmNoLCBpZiB0aGVyZSBpcyBvbmUuPC9kZD4KKzxkdD5GaW5kIFNlbGVjdGlvbjwvZHQ+Cis8ZGQ+U2VhcmNoIGZvciB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHN0cmluZywgaWYgdGhlcmUgaXMgb25lLjwvZGQ+Cis8ZHQ+RmluZCBpbiBGaWxlcy4uLjwvZHQ+Cis8ZGQ+T3BlbiBhIGZpbGUgc2VhcmNoIGRpYWxvZy4gIFB1dCByZXN1bHRzIGluIGFuIG5ldyBvdXRwdXQgd2luZG93LjwvZGQ+Cis8ZHQ+UmVwbGFjZS4uLjwvZHQ+Cis8ZGQ+T3BlbiBhIHNlYXJjaC1hbmQtcmVwbGFjZSBkaWFsb2cuPC9kZD4KKzxkdD5HbyB0byBMaW5lPC9kdD4KKzxkZD5Nb3ZlIGN1cnNvciB0byB0aGUgbGluZSBudW1iZXIgcmVxdWVzdGVkIGFuZCBtYWtlIHRoYXQgbGluZSB2aXNpYmxlLjwvZGQ+Cis8ZHQ+U2hvdyBDb21wbGV0aW9uczwvZHQ+Cis8ZGQ+T3BlbiBhIHNjcm9sbGFibGUgbGlzdCBhbGxvd2luZyBzZWxlY3Rpb24gb2Yga2V5d29yZHMgYW5kIGF0dHJpYnV0ZXMuIFNlZQorQ29tcGxldGlvbnMgaW4gdGhlIFRpcHMgc2VjdGlvbnMgYmVsb3cuPC9kZD4KKzxkdD5FeHBhbmQgV29yZDwvZHQ+Cis8ZGQ+RXhwYW5kIGEgcHJlZml4IHlvdSBoYXZlIHR5cGVkIHRvIG1hdGNoIGEgZnVsbCB3b3JkIGluIHRoZSBzYW1lIHdpbmRvdzsKK3JlcGVhdCB0byBnZXQgYSBkaWZmZXJlbnQgZXhwYW5zaW9uLjwvZGQ+Cis8ZHQ+U2hvdyBjYWxsIHRpcDwvZHQ+Cis8ZGQ+QWZ0ZXIgYW4gdW5jbG9zZWQgcGFyZW50aGVzaXMgZm9yIGEgZnVuY3Rpb24sIG9wZW4gYSBzbWFsbCB3aW5kb3cgd2l0aAorZnVuY3Rpb24gcGFyYW1ldGVyIGhpbnRzLjwvZGQ+Cis8ZHQ+U2hvdyBzdXJyb3VuZGluZyBwYXJlbnM8L2R0PgorPGRkPkhpZ2hsaWdodCB0aGUgc3Vycm91bmRpbmcgcGFyZW50aGVzaXMuPC9kZD4KKzwvZGw+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InNlY3Rpb24iIGlkPSJmb3JtYXQtbWVudS1lZGl0b3Itd2luZG93LW9ubHkiPgorPGgzPjI1LjUuMS4zLiBGb3JtYXQgbWVudSAoRWRpdG9yIHdpbmRvdyBvbmx5KTxhIGNsYXNzPSJoZWFkZXJsaW5rIiBocmVmPSIjZm9ybWF0LW1lbnUtZWRpdG9yLXdpbmRvdy1vbmx5IiB0aXRsZT0iUGVybWFsaW5rIHRvIHRoaXMgaGVhZGxpbmUiPsK2PC9hPjwvaDM+Cis8ZGwgY2xhc3M9ImRvY3V0aWxzIj4KKzxkdD5JbmRlbnQgUmVnaW9uPC9kdD4KKzxkZD5TaGlmdCBzZWxlY3RlZCBsaW5lcyByaWdodCBieSB0aGUgaW5kZW50IHdpZHRoIChkZWZhdWx0IDQgc3BhY2VzKS48L2RkPgorPGR0PkRlZGVudCBSZWdpb248L2R0PgorPGRkPlNoaWZ0IHNlbGVjdGVkIGxpbmVzIGxlZnQgYnkgdGhlIGluZGVudCB3aWR0aCAoZGVmYXVsdCA0IHNwYWNlcykuPC9kZD4KKzxkdD5Db21tZW50IE91dCBSZWdpb248L2R0PgorPGRkPkluc2VydCAjIyBpbiBmcm9udCBvZiBzZWxlY3RlZCBsaW5lcy48L2RkPgorPGR0PlVuY29tbWVudCBSZWdpb248L2R0PgorPGRkPlJlbW92ZSBsZWFkaW5nICMgb3IgIyMgZnJvbSBzZWxlY3RlZCBsaW5lcy48L2RkPgorPGR0PlRhYmlmeSBSZWdpb248L2R0PgorPGRkPlR1cm4gPGVtPmxlYWRpbmc8L2VtPiBzdHJldGNoZXMgb2Ygc3BhY2VzIGludG8gdGFicy4gKE5vdGU6IFdlIHJlY29tbWVuZCB1c2luZworNCBzcGFjZSBibG9ja3MgdG8gaW5kZW50IFB5dGhvbiBjb2RlLik8L2RkPgorPGR0PlVudGFiaWZ5IFJlZ2lvbjwvZHQ+Cis8ZGQ+VHVybiA8ZW0+YWxsPC9lbT4gdGFicyBpbnRvIHRoZSBjb3JyZWN0IG51bWJlciBvZiBzcGFjZXMuPC9kZD4KKzxkdD5Ub2dnbGUgVGFiczwvZHQ+Cis8ZGQ+T3BlbiBhIGRpYWxvZyB0byBzd2l0Y2ggYmV0d2VlbiBpbmRlbnRpbmcgd2l0aCBzcGFjZXMgYW5kIHRhYnMuPC9kZD4KKzxkdD5OZXcgSW5kZW50IFdpZHRoPC9kdD4KKzxkZD5PcGVuIGEgZGlhbG9nIHRvIGNoYW5nZSBpbmRlbnQgd2lkdGguIFRoZSBhY2NlcHRlZCBkZWZhdWx0IGJ5IHRoZSBQeXRob24KK2NvbW11bml0eSBpcyA0IHNwYWNlcy48L2RkPgorPGR0PkZvcm1hdCBQYXJhZ3JhcGg8L2R0PgorPGRkPlJlZm9ybWF0IHRoZSBjdXJyZW50IGJsYW5rLWxpbmUtZGVsaW1pdGVkIHBhcmFncmFwaCBpbiBjb21tZW50IGJsb2NrIG9yCittdWx0aWxpbmUgc3RyaW5nIG9yIHNlbGVjdGVkIGxpbmUgaW4gYSBzdHJpbmcuICBBbGwgbGluZXMgaW4gdGhlCitwYXJhZ3JhcGggd2lsbCBiZSBmb3JtYXR0ZWQgdG8gbGVzcyB0aGFuIE4gY29sdW1ucywgd2hlcmUgTiBkZWZhdWx0cyB0byA3Mi48L2RkPgorPGR0PlN0cmlwIHRyYWlsaW5nIHdoaXRlc3BhY2U8L2R0PgorPGRkPlJlbW92ZSBhbnkgc3BhY2UgY2hhcmFjdGVycyBhZnRlciB0aGUgbGFzdCBub24tc3BhY2UgY2hhcmFjdGVyIG9mIGEgbGluZS48L2RkPgorPC9kbD4KKzwvZGl2PgorPGRpdiBjbGFzcz0ic2VjdGlvbiIgaWQ9InJ1bi1tZW51LWVkaXRvci13aW5kb3ctb25seSI+Cis8c3BhbiBpZD0iaW5kZXgtMiI+PC9zcGFuPjxoMz4yNS41LjEuNC4gUnVuIG1lbnUgKEVkaXRvciB3aW5kb3cgb25seSk8YSBjbGFzcz0iaGVhZGVybGluayIgaHJlZj0iI3J1bi1tZW51LWVkaXRvci13aW5kb3ctb25seSIgdGl0bGU9IlBlcm1hbGluayB0byB0aGlzIGhlYWRsaW5lIj7CtjwvYT48L2gzPgorPGRsIGNsYXNzPSJkb2N1dGlscyI+Cis8ZHQ+UHl0aG9uIFNoZWxsPC9kdD4KKzxkZD5PcGVuIG9yIHdha2UgdXAgdGhlIFB5dGhvbiBTaGVsbCB3aW5kb3cuPC9kZD4KKzxkdD5DaGVjayBNb2R1bGU8L2R0PgorPGRkPkNoZWNrIHRoZSBzeW50YXggb2YgdGhlIG1vZHVsZSBjdXJyZW50bHkgb3BlbiBpbiB0aGUgRWRpdG9yIHdpbmRvdy4gSWYgdGhlCittb2R1bGUgaGFzIG5vdCBiZWVuIHNhdmVkIElETEUgd2lsbCBlaXRoZXIgcHJvbXB0IHRoZSB1c2VyIHRvIHNhdmUgb3IKK2F1dG9zYXZlLCBhcyBzZWxlY3RlZCBpbiB0aGUgR2VuZXJhbCB0YWIgb2YgdGhlIElkbGUgU2V0dGluZ3MgZGlhbG9nLiAgSWYKK3RoZXJlIGlzIGEgc3ludGF4IGVycm9yLCB0aGUgYXBwcm94aW1hdGUgbG9jYXRpb24gaXMgaW5kaWNhdGVkIGluIHRoZQorRWRpdG9yIHdpbmRvdy48L2RkPgorPGR0PlJ1biBNb2R1bGU8L2R0PgorPGRkPkRvIENoZWNrIE1vZHVsZSAoYWJvdmUpLiAgSWYgbm8gZXJyb3IsIHJlc3RhcnQgdGhlIHNoZWxsIHRvIGNsZWFuIHRoZQorZW52aXJvbm1lbnQsIHRoZW4gZXhlY3V0ZSB0aGUgbW9kdWxlLiAgT3V0cHV0IGlzIGRpc3BsYXllZCBpbiB0aGUgU2hlbGwKK3dpbmRvdy4gIE5vdGUgdGhhdCBvdXRwdXQgcmVxdWlyZXMgdXNlIG9mIDx0dCBjbGFzcz0iZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+cHJpbnQ8L3NwYW4+PC90dD4gb3IgPHR0IGNsYXNzPSJkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj53cml0ZTwvc3Bhbj48L3R0Pi4KK1doZW4gZXhlY3V0aW9uIGlzIGNvbXBsZXRlLCB0aGUgU2hlbGwgcmV0YWlucyBmb2N1cyBhbmQgZGlzcGxheXMgYSBwcm9tcHQuCitBdCB0aGlzIHBvaW50LCBvbmUgbWF5IGludGVyYWN0aXZlbHkgZXhwbG9yZSB0aGUgcmVzdWx0IG9mIGV4ZWN1dGlvbi4KK1RoaXMgaXMgc2ltaWxhciB0byBleGVjdXRpbmcgYSBmaWxlIHdpdGggPHR0IGNsYXNzPSJkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj5weXRob248L3NwYW4+IDxzcGFuIGNsYXNzPSJwcmUiPi1pPC9zcGFuPiA8c3BhbiBjbGFzcz0icHJlIj5maWxlPC9zcGFuPjwvdHQ+IGF0IGEgY29tbWFuZAorbGluZS48L2RkPgorPC9kbD4KKzwvZGl2PgorPGRpdiBjbGFzcz0ic2VjdGlvbiIgaWQ9InNoZWxsLW1lbnUtc2hlbGwtd2luZG93LW9ubHkiPgorPGgzPjI1LjUuMS41LiBTaGVsbCBtZW51IChTaGVsbCB3aW5kb3cgb25seSk8YSBjbGFzcz0iaGVhZGVybGluayIgaHJlZj0iI3NoZWxsLW1lbnUtc2hlbGwtd2luZG93LW9ubHkiIHRpdGxlPSJQZXJtYWxpbmsgdG8gdGhpcyBoZWFkbGluZSI+wrY8L2E+PC9oMz4KKzxkbCBjbGFzcz0iZG9jdXRpbHMiPgorPGR0PlZpZXcgTGFzdCBSZXN0YXJ0PC9kdD4KKzxkZD5TY3JvbGwgdGhlIHNoZWxsIHdpbmRvdyB0byB0aGUgbGFzdCBTaGVsbCByZXN0YXJ0LjwvZGQ+Cis8ZHQ+UmVzdGFydCBTaGVsbDwvZHQ+Cis8ZGQ+UmVzdGFydCB0aGUgc2hlbGwgdG8gY2xlYW4gdGhlIGVudmlyb25tZW50LjwvZGQ+Cis8L2RsPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJzZWN0aW9uIiBpZD0iZGVidWctbWVudS1zaGVsbC13aW5kb3ctb25seSI+Cis8aDM+MjUuNS4xLjYuIERlYnVnIG1lbnUgKFNoZWxsIHdpbmRvdyBvbmx5KTxhIGNsYXNzPSJoZWFkZXJsaW5rIiBocmVmPSIjZGVidWctbWVudS1zaGVsbC13aW5kb3ctb25seSIgdGl0bGU9IlBlcm1hbGluayB0byB0aGlzIGhlYWRsaW5lIj7CtjwvYT48L2gzPgorPGRsIGNsYXNzPSJkb2N1dGlscyI+Cis8ZHQ+R28gdG8gRmlsZS9MaW5lPC9kdD4KKzxkZD5Mb29rIG9uIHRoZSBjdXJyZW50IGxpbmUuIHdpdGggdGhlIGN1cnNvciwgYW5kIHRoZSBsaW5lIGFib3ZlIGZvciBhIGZpbGVuYW1lCithbmQgbGluZSBudW1iZXIuICBJZiBmb3VuZCwgb3BlbiB0aGUgZmlsZSBpZiBub3QgYWxyZWFkeSBvcGVuLCBhbmQgc2hvdyB0aGUKK2xpbmUuICBVc2UgdGhpcyB0byB2aWV3IHNvdXJjZSBsaW5lcyByZWZlcmVuY2VkIGluIGFuIGV4Y2VwdGlvbiB0cmFjZWJhY2sKK2FuZCBsaW5lcyBmb3VuZCBieSBGaW5kIGluIEZpbGVzLiBBbHNvIGF2YWlsYWJsZSBpbiB0aGUgY29udGV4dCBtZW51IG9mCit0aGUgU2hlbGwgd2luZG93IGFuZCBPdXRwdXQgd2luZG93cy48L2RkPgorPC9kbD4KKzxkbCBjbGFzcz0iZG9jdXRpbHMiIGlkPSJpbmRleC0zIj4KKzxkdD5EZWJ1Z2dlciAodG9nZ2xlKTwvZHQ+Cis8ZGQ+V2hlbiBhY3RpdmVkLCBjb2RlIGVudGVyZWQgaW4gdGhlIFNoZWxsIG9yIHJ1biBmcm9tIGFuIEVkaXRvciB3aWxsIHJ1bgordW5kZXIgdGhlIGRlYnVnZ2VyLiAgSW4gdGhlIEVkaXRvciwgYnJlYWtwb2ludHMgY2FuIGJlIHNldCB3aXRoIHRoZSBjb250ZXh0CittZW51LiAgVGhpcyBmZWF0dXJlIGlzIHN0aWxsIGluY29tcGxldGUgYW5kIHNvbWV3aGF0IGV4cGVyaW1lbnRhbC48L2RkPgorPGR0PlN0YWNrIFZpZXdlcjwvZHQ+Cis8ZGQ+U2hvdyB0aGUgc3RhY2sgdHJhY2ViYWNrIG9mIHRoZSBsYXN0IGV4Y2VwdGlvbiBpbiBhIHRyZWUgd2lkZ2V0LCB3aXRoCithY2Nlc3MgdG8gbG9jYWxzIGFuZCBnbG9iYWxzLjwvZGQ+Cis8ZHQ+QXV0by1vcGVuIFN0YWNrIFZpZXdlcjwvZHQ+Cis8ZGQ+VG9nZ2xlIGF1dG9tYXRpY2FsbHkgb3BlbmluZyB0aGUgc3RhY2sgdmlld2VyIG9uIGFuIHVuaGFuZGxlZCBleGNlcHRpb24uPC9kZD4KKzwvZGw+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InNlY3Rpb24iIGlkPSJvcHRpb25zLW1lbnUtc2hlbGwtYW5kLWVkaXRvciI+Cis8aDM+MjUuNS4xLjcuIE9wdGlvbnMgbWVudSAoU2hlbGwgYW5kIEVkaXRvcik8YSBjbGFzcz0iaGVhZGVybGluayIgaHJlZj0iI29wdGlvbnMtbWVudS1zaGVsbC1hbmQtZWRpdG9yIiB0aXRsZT0iUGVybWFsaW5rIHRvIHRoaXMgaGVhZGxpbmUiPsK2PC9hPjwvaDM+Cis8ZGwgY2xhc3M9ImRvY3V0aWxzIj4KKzxkdD5Db25maWd1cmUgSURMRTwvZHQ+Cis8ZGQ+PHAgY2xhc3M9ImZpcnN0Ij5PcGVuIGEgY29uZmlndXJhdGlvbiBkaWFsb2cgYW5kIGNoYW5nZSBwcmVmZXJlbmNlcyBmb3IgdGhlIGZvbGxvd2luZzoKK2ZvbnRzLCBpbmRlbnRhdGlvbiwga2V5YmluZGluZ3MsIHRleHQgY29sb3IgdGhlbWVzLCBzdGFydHVwIHdpbmRvd3MgYW5kCitzaXplLCBhZGRpdGlvbmFsIGhlbHAgc291cmNlcywgYW5kIGV4dGVuc2lvbnMgKHNlZSBiZWxvdykuICBPbiBPUyBYLAorb3BlbiB0aGUgY29uZmlndXJhdGlvbiBkaWFsb2cgYnkgc2VsZWN0aW5nIFByZWZlcmVuY2VzIGluIHRoZSBhcHBsaWNhdGlvbgorbWVudS4gIFRvIHVzZSBhIG5ldyBidWlsdC1pbiBjb2xvciB0aGVtZSAoSURMRSBEYXJrKSB3aXRoIG9sZGVyIElETEVzLAorc2F2ZSBpdCBhcyBhIG5ldyBjdXN0b20gdGhlbWUuPC9wPgorPHAgY2xhc3M9Imxhc3QiPk5vbi1kZWZhdWx0IHVzZXIgc2V0dGluZ3MgYXJlIHNhdmVkIGluIGEgLmlkbGVyYyBkaXJlY3RvcnkgaW4gdGhlIHVzZXImIzgyMTc7cworaG9tZSBkaXJlY3RvcnkuICBQcm9ibGVtcyBjYXVzZWQgYnkgYmFkIHVzZXIgY29uZmlndXJhdGlvbiBmaWxlcyBhcmUgc29sdmVkCitieSBlZGl0aW5nIG9yIGRlbGV0aW5nIG9uZSBvciBtb3JlIG9mIHRoZSBmaWxlcyBpbiAuaWRsZXJjLjwvcD4KKzwvZGQ+Cis8ZHQ+Q29kZSBDb250ZXh0ICh0b2dnbGUpKEVkaXRvciBXaW5kb3cgb25seSk8L2R0PgorPGRkPk9wZW4gYSBwYW5lIGF0IHRoZSB0b3Agb2YgdGhlIGVkaXQgd2luZG93IHdoaWNoIHNob3dzIHRoZSBibG9jayBjb250ZXh0CitvZiB0aGUgY29kZSB3aGljaCBoYXMgc2Nyb2xsZWQgYWJvdmUgdGhlIHRvcCBvZiB0aGUgd2luZG93LjwvZGQ+Cis8L2RsPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJzZWN0aW9uIiBpZD0id2luZG93LW1lbnUtc2hlbGwtYW5kLWVkaXRvciI+Cis8aDM+MjUuNS4xLjguIFdpbmRvdyBtZW51IChTaGVsbCBhbmQgRWRpdG9yKTxhIGNsYXNzPSJoZWFkZXJsaW5rIiBocmVmPSIjd2luZG93LW1lbnUtc2hlbGwtYW5kLWVkaXRvciIgdGl0bGU9IlBlcm1hbGluayB0byB0aGlzIGhlYWRsaW5lIj7CtjwvYT48L2gzPgorPGRsIGNsYXNzPSJkb2N1dGlscyI+Cis8ZHQ+Wm9vbSBIZWlnaHQ8L2R0PgorPGRkPlRvZ2dsZXMgdGhlIHdpbmRvdyBiZXR3ZWVuIG5vcm1hbCBzaXplIGFuZCBtYXhpbXVtIGhlaWdodC4gVGhlIGluaXRpYWwgc2l6ZQorZGVmYXVsdHMgdG8gNDAgbGluZXMgYnkgODAgY2hhcnMgdW5sZXNzIGNoYW5nZWQgb24gdGhlIEdlbmVyYWwgdGFiIG9mIHRoZQorQ29uZmlndXJlIElETEUgZGlhbG9nLjwvZGQ+Cis8L2RsPgorPHA+VGhlIHJlc3Qgb2YgdGhpcyBtZW51IGxpc3RzIHRoZSBuYW1lcyBvZiBhbGwgb3BlbiB3aW5kb3dzOyBzZWxlY3Qgb25lIHRvIGJyaW5nCitpdCB0byB0aGUgZm9yZWdyb3VuZCAoZGVpY29uaWZ5aW5nIGl0IGlmIG5lY2Vzc2FyeSkuPC9wPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJzZWN0aW9uIiBpZD0iaGVscC1tZW51LXNoZWxsLWFuZC1lZGl0b3IiPgorPGgzPjI1LjUuMS45LiBIZWxwIG1lbnUgKFNoZWxsIGFuZCBFZGl0b3IpPGEgY2xhc3M9ImhlYWRlcmxpbmsiIGhyZWY9IiNoZWxwLW1lbnUtc2hlbGwtYW5kLWVkaXRvciIgdGl0bGU9IlBlcm1hbGluayB0byB0aGlzIGhlYWRsaW5lIj7CtjwvYT48L2gzPgorPGRsIGNsYXNzPSJkb2N1dGlscyI+Cis8ZHQ+QWJvdXQgSURMRTwvZHQ+Cis8ZGQ+RGlzcGxheSB2ZXJzaW9uLCBjb3B5cmlnaHQsIGxpY2Vuc2UsIGNyZWRpdHMsIGFuZCBtb3JlLjwvZGQ+Cis8ZHQ+SURMRSBIZWxwPC9kdD4KKzxkZD5EaXNwbGF5IGEgaGVscCBmaWxlIGZvciBJRExFIGRldGFpbGluZyB0aGUgbWVudSBvcHRpb25zLCBiYXNpYyBlZGl0aW5nIGFuZAorbmF2aWdhdGlvbiwgYW5kIG90aGVyIHRpcHMuPC9kZD4KKzxkdD5QeXRob24gRG9jczwvZHQ+Cis8ZGQ+QWNjZXNzIGxvY2FsIFB5dGhvbiBkb2N1bWVudGF0aW9uLCBpZiBpbnN0YWxsZWQsIG9yIHN0YXJ0IGEgd2ViIGJyb3dzZXIKK2FuZCBvcGVuIGRvY3MucHl0aG9uLm9yZyBzaG93aW5nIHRoZSBsYXRlc3QgUHl0aG9uIGRvY3VtZW50YXRpb24uPC9kZD4KKzxkdD5UdXJ0bGUgRGVtbzwvZHQ+Cis8ZGQ+UnVuIHRoZSB0dXJ0bGVkZW1vIG1vZHVsZSB3aXRoIGV4YW1wbGUgcHl0aG9uIGNvZGUgYW5kIHR1cnRsZSBkcmF3aW5ncy48L2RkPgorPC9kbD4KKzxwPkFkZGl0aW9uYWwgaGVscCBzb3VyY2VzIG1heSBiZSBhZGRlZCBoZXJlIHdpdGggdGhlIENvbmZpZ3VyZSBJRExFIGRpYWxvZyB1bmRlcgordGhlIEdlbmVyYWwgdGFiLjwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0ic2VjdGlvbiIgaWQ9ImNvbnRleHQtbWVudXMiPgorPHNwYW4gaWQ9ImluZGV4LTQiPjwvc3Bhbj48aDM+MjUuNS4xLjEwLiBDb250ZXh0IE1lbnVzPGEgY2xhc3M9ImhlYWRlcmxpbmsiIGhyZWY9IiNjb250ZXh0LW1lbnVzIiB0aXRsZT0iUGVybWFsaW5rIHRvIHRoaXMgaGVhZGxpbmUiPsK2PC9hPjwvaDM+Cis8cD5PcGVuIGEgY29udGV4dCBtZW51IGJ5IHJpZ2h0LWNsaWNraW5nIGluIGEgd2luZG93IChDb250cm9sLWNsaWNrIG9uIE9TIFgpLgorQ29udGV4dCBtZW51cyBoYXZlIHRoZSBzdGFuZGFyZCBjbGlwYm9hcmQgZnVuY3Rpb25zIGFsc28gb24gdGhlIEVkaXQgbWVudS48L3A+Cis8ZGwgY2xhc3M9ImRvY3V0aWxzIj4KKzxkdD5DdXQ8L2R0PgorPGRkPkNvcHkgc2VsZWN0aW9uIGludG8gdGhlIHN5c3RlbS13aWRlIGNsaXBib2FyZDsgdGhlbiBkZWxldGUgdGhlIHNlbGVjdGlvbi48L2RkPgorPGR0PkNvcHk8L2R0PgorPGRkPkNvcHkgc2VsZWN0aW9uIGludG8gdGhlIHN5c3RlbS13aWRlIGNsaXBib2FyZC48L2RkPgorPGR0PlBhc3RlPC9kdD4KKzxkZD5JbnNlcnQgY29udGVudHMgb2YgdGhlIHN5c3RlbS13aWRlIGNsaXBib2FyZCBpbnRvIHRoZSBjdXJyZW50IHdpbmRvdy48L2RkPgorPC9kbD4KKzxwPkVkaXRvciB3aW5kb3dzIGFsc28gaGF2ZSBicmVha3BvaW50IGZ1bmN0aW9ucy4gIExpbmVzIHdpdGggYSBicmVha3BvaW50IHNldCBhcmUKK3NwZWNpYWxseSBtYXJrZWQuICBCcmVha3BvaW50cyBvbmx5IGhhdmUgYW4gZWZmZWN0IHdoZW4gcnVubmluZyB1bmRlciB0aGUKK2RlYnVnZ2VyLiAgQnJlYWtwb2ludHMgZm9yIGEgZmlsZSBhcmUgc2F2ZWQgaW4gdGhlIHVzZXImIzgyMTc7cyAuaWRsZXJjIGRpcmVjdG9yeS48L3A+Cis8ZGwgY2xhc3M9ImRvY3V0aWxzIj4KKzxkdD5TZXQgQnJlYWtwb2ludDwvZHQ+Cis8ZGQ+U2V0IGEgYnJlYWtwb2ludCBvbiB0aGUgY3VycmVudCBsaW5lLjwvZGQ+Cis8ZHQ+Q2xlYXIgQnJlYWtwb2ludDwvZHQ+Cis8ZGQ+Q2xlYXIgdGhlIGJyZWFrcG9pbnQgb24gdGhhdCBsaW5lLjwvZGQ+Cis8L2RsPgorPHA+U2hlbGwgYW5kIE91dHB1dCB3aW5kb3dzIGhhdmUgdGhlIGZvbGxvd2luZy48L3A+Cis8ZGwgY2xhc3M9ImRvY3V0aWxzIj4KKzxkdD5HbyB0byBmaWxlL2xpbmU8L2R0PgorPGRkPlNhbWUgYXMgaW4gRGVidWcgbWVudS48L2RkPgorPC9kbD4KKzwvZGl2PgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJzZWN0aW9uIiBpZD0iZWRpdGluZy1hbmQtbmF2aWdhdGlvbiI+Cis8aDI+MjUuNS4yLiBFZGl0aW5nIGFuZCBuYXZpZ2F0aW9uPGEgY2xhc3M9ImhlYWRlcmxpbmsiIGhyZWY9IiNlZGl0aW5nLWFuZC1uYXZpZ2F0aW9uIiB0aXRsZT0iUGVybWFsaW5rIHRvIHRoaXMgaGVhZGxpbmUiPsK2PC9hPjwvaDI+Cis8cD5JbiB0aGlzIHNlY3Rpb24sICYjODIxNjtDJiM4MjE3OyByZWZlcnMgdG8gdGhlIDx0dCBjbGFzcz0ia2JkIGRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPkNvbnRyb2w8L3NwYW4+PC90dD4ga2V5IG9uIFdpbmRvd3MgYW5kIFVuaXggYW5kCit0aGUgPHR0IGNsYXNzPSJrYmQgZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+Q29tbWFuZDwvc3Bhbj48L3R0PiBrZXkgb24gTWFjIE9TWC48L3A+Cis8dWw+Cis8bGk+PHAgY2xhc3M9ImZpcnN0Ij48dHQgY2xhc3M9ImtiZCBkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj5CYWNrc3BhY2U8L3NwYW4+PC90dD4gZGVsZXRlcyB0byB0aGUgbGVmdDsgPHR0IGNsYXNzPSJrYmQgZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+RGVsPC9zcGFuPjwvdHQ+IGRlbGV0ZXMgdG8gdGhlIHJpZ2h0PC9wPgorPC9saT4KKzxsaT48cCBjbGFzcz0iZmlyc3QiPjx0dCBjbGFzcz0ia2JkIGRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPkMtQmFja3NwYWNlPC9zcGFuPjwvdHQ+IGRlbGV0ZSB3b3JkIGxlZnQ7IDx0dCBjbGFzcz0ia2JkIGRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPkMtRGVsPC9zcGFuPjwvdHQ+IGRlbGV0ZSB3b3JkIHRvIHRoZSByaWdodDwvcD4KKzwvbGk+Cis8bGk+PHAgY2xhc3M9ImZpcnN0Ij5BcnJvdyBrZXlzIGFuZCA8dHQgY2xhc3M9ImtiZCBkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj5QYWdlPC9zcGFuPiA8c3BhbiBjbGFzcz0icHJlIj5VcDwvc3Bhbj48L3R0Pi88dHQgY2xhc3M9ImtiZCBkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj5QYWdlPC9zcGFuPiA8c3BhbiBjbGFzcz0icHJlIj5Eb3duPC9zcGFuPjwvdHQ+IHRvIG1vdmUgYXJvdW5kPC9wPgorPC9saT4KKzxsaT48cCBjbGFzcz0iZmlyc3QiPjx0dCBjbGFzcz0ia2JkIGRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPkMtTGVmdEFycm93PC9zcGFuPjwvdHQ+IGFuZCA8dHQgY2xhc3M9ImtiZCBkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj5DLVJpZ2h0QXJyb3c8L3NwYW4+PC90dD4gbW92ZXMgYnkgd29yZHM8L3A+Cis8L2xpPgorPGxpPjxwIGNsYXNzPSJmaXJzdCI+PHR0IGNsYXNzPSJrYmQgZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+SG9tZTwvc3Bhbj48L3R0Pi88dHQgY2xhc3M9ImtiZCBkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj5FbmQ8L3NwYW4+PC90dD4gZ28gdG8gYmVnaW4vZW5kIG9mIGxpbmU8L3A+Cis8L2xpPgorPGxpPjxwIGNsYXNzPSJmaXJzdCI+PHR0IGNsYXNzPSJrYmQgZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+Qy1Ib21lPC9zcGFuPjwvdHQ+Lzx0dCBjbGFzcz0ia2JkIGRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPkMtRW5kPC9zcGFuPjwvdHQ+IGdvIHRvIGJlZ2luL2VuZCBvZiBmaWxlPC9wPgorPC9saT4KKzxsaT48cCBjbGFzcz0iZmlyc3QiPlNvbWUgdXNlZnVsIEVtYWNzIGJpbmRpbmdzIGFyZSBpbmhlcml0ZWQgZnJvbSBUY2wvVGs6PC9wPgorPGJsb2NrcXVvdGU+Cis8ZGl2Pjx1bCBjbGFzcz0ic2ltcGxlIj4KKzxsaT48dHQgY2xhc3M9ImtiZCBkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj5DLWE8L3NwYW4+PC90dD4gYmVnaW5uaW5nIG9mIGxpbmU8L2xpPgorPGxpPjx0dCBjbGFzcz0ia2JkIGRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPkMtZTwvc3Bhbj48L3R0PiBlbmQgb2YgbGluZTwvbGk+Cis8bGk+PHR0IGNsYXNzPSJrYmQgZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+Qy1rPC9zcGFuPjwvdHQ+IGtpbGwgbGluZSAoYnV0IGRvZXNuJiM4MjE3O3QgcHV0IGl0IGluIGNsaXBib2FyZCk8L2xpPgorPGxpPjx0dCBjbGFzcz0ia2JkIGRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPkMtbDwvc3Bhbj48L3R0PiBjZW50ZXIgd2luZG93IGFyb3VuZCB0aGUgaW5zZXJ0aW9uIHBvaW50PC9saT4KKzxsaT48dHQgY2xhc3M9ImtiZCBkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj5DLWI8L3NwYW4+PC90dD4gZ28gYmFja3dhcmRzIG9uZSBjaGFyYWN0ZXIgd2l0aG91dCBkZWxldGluZyAodXN1YWxseSB5b3UgY2FuCithbHNvIHVzZSB0aGUgY3Vyc29yIGtleSBmb3IgdGhpcyk8L2xpPgorPGxpPjx0dCBjbGFzcz0ia2JkIGRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPkMtZjwvc3Bhbj48L3R0PiBnbyBmb3J3YXJkIG9uZSBjaGFyYWN0ZXIgd2l0aG91dCBkZWxldGluZyAodXN1YWxseSB5b3UgY2FuCithbHNvIHVzZSB0aGUgY3Vyc29yIGtleSBmb3IgdGhpcyk8L2xpPgorPGxpPjx0dCBjbGFzcz0ia2JkIGRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPkMtcDwvc3Bhbj48L3R0PiBnbyB1cCBvbmUgbGluZSAodXN1YWxseSB5b3UgY2FuIGFsc28gdXNlIHRoZSBjdXJzb3Iga2V5IGZvcgordGhpcyk8L2xpPgorPGxpPjx0dCBjbGFzcz0ia2JkIGRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPkMtZDwvc3Bhbj48L3R0PiBkZWxldGUgbmV4dCBjaGFyYWN0ZXI8L2xpPgorPC91bD4KKzwvZGl2PjwvYmxvY2txdW90ZT4KKzwvbGk+Cis8L3VsPgorPHA+U3RhbmRhcmQga2V5YmluZGluZ3MgKGxpa2UgPHR0IGNsYXNzPSJrYmQgZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+Qy1jPC9zcGFuPjwvdHQ+IHRvIGNvcHkgYW5kIDx0dCBjbGFzcz0ia2JkIGRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPkMtdjwvc3Bhbj48L3R0PiB0byBwYXN0ZSkKK21heSB3b3JrLiAgS2V5YmluZGluZ3MgYXJlIHNlbGVjdGVkIGluIHRoZSBDb25maWd1cmUgSURMRSBkaWFsb2cuPC9wPgorPGRpdiBjbGFzcz0ic2VjdGlvbiIgaWQ9ImF1dG9tYXRpYy1pbmRlbnRhdGlvbiI+Cis8aDM+MjUuNS4yLjEuIEF1dG9tYXRpYyBpbmRlbnRhdGlvbjxhIGNsYXNzPSJoZWFkZXJsaW5rIiBocmVmPSIjYXV0b21hdGljLWluZGVudGF0aW9uIiB0aXRsZT0iUGVybWFsaW5rIHRvIHRoaXMgaGVhZGxpbmUiPsK2PC9hPjwvaDM+Cis8cD5BZnRlciBhIGJsb2NrLW9wZW5pbmcgc3RhdGVtZW50LCB0aGUgbmV4dCBsaW5lIGlzIGluZGVudGVkIGJ5IDQgc3BhY2VzIChpbiB0aGUKK1B5dGhvbiBTaGVsbCB3aW5kb3cgYnkgb25lIHRhYikuICBBZnRlciBjZXJ0YWluIGtleXdvcmRzIChicmVhaywgcmV0dXJuIGV0Yy4pCit0aGUgbmV4dCBsaW5lIGlzIGRlZGVudGVkLiAgSW4gbGVhZGluZyBpbmRlbnRhdGlvbiwgPHR0IGNsYXNzPSJrYmQgZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+QmFja3NwYWNlPC9zcGFuPjwvdHQ+IGRlbGV0ZXMgdXAKK3RvIDQgc3BhY2VzIGlmIHRoZXkgYXJlIHRoZXJlLiA8dHQgY2xhc3M9ImtiZCBkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj5UYWI8L3NwYW4+PC90dD4gaW5zZXJ0cyBzcGFjZXMgKGluIHRoZSBQeXRob24KK1NoZWxsIHdpbmRvdyBvbmUgdGFiKSwgbnVtYmVyIGRlcGVuZHMgb24gSW5kZW50IHdpZHRoLiBDdXJyZW50bHkgdGFicworYXJlIHJlc3RyaWN0ZWQgdG8gZm91ciBzcGFjZXMgZHVlIHRvIFRjbC9UayBsaW1pdGF0aW9ucy48L3A+Cis8cD5TZWUgYWxzbyB0aGUgaW5kZW50L2RlZGVudCByZWdpb24gY29tbWFuZHMgaW4gdGhlIGVkaXQgbWVudS48L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InNlY3Rpb24iIGlkPSJjb21wbGV0aW9ucyI+Cis8aDM+MjUuNS4yLjIuIENvbXBsZXRpb25zPGEgY2xhc3M9ImhlYWRlcmxpbmsiIGhyZWY9IiNjb21wbGV0aW9ucyIgdGl0bGU9IlBlcm1hbGluayB0byB0aGlzIGhlYWRsaW5lIj7CtjwvYT48L2gzPgorPHA+Q29tcGxldGlvbnMgYXJlIHN1cHBsaWVkIGZvciBmdW5jdGlvbnMsIGNsYXNzZXMsIGFuZCBhdHRyaWJ1dGVzIG9mIGNsYXNzZXMsCitib3RoIGJ1aWx0LWluIGFuZCB1c2VyLWRlZmluZWQuIENvbXBsZXRpb25zIGFyZSBhbHNvIHByb3ZpZGVkIGZvcgorZmlsZW5hbWVzLjwvcD4KKzxwPlRoZSBBdXRvQ29tcGxldGVXaW5kb3cgKEFDVykgd2lsbCBvcGVuIGFmdGVyIGEgcHJlZGVmaW5lZCBkZWxheSAoZGVmYXVsdCBpcwordHdvIHNlY29uZHMpIGFmdGVyIGEgJiM4MjE2Oy4mIzgyMTc7IG9yIChpbiBhIHN0cmluZykgYW4gb3Muc2VwIGlzIHR5cGVkLiBJZiBhZnRlciBvbmUKK29mIHRob3NlIGNoYXJhY3RlcnMgKHBsdXMgemVybyBvciBtb3JlIG90aGVyIGNoYXJhY3RlcnMpIGEgdGFiIGlzIHR5cGVkCit0aGUgQUNXIHdpbGwgb3BlbiBpbW1lZGlhdGVseSBpZiBhIHBvc3NpYmxlIGNvbnRpbnVhdGlvbiBpcyBmb3VuZC48L3A+Cis8cD5JZiB0aGVyZSBpcyBvbmx5IG9uZSBwb3NzaWJsZSBjb21wbGV0aW9uIGZvciB0aGUgY2hhcmFjdGVycyBlbnRlcmVkLCBhCis8dHQgY2xhc3M9ImtiZCBkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj5UYWI8L3NwYW4+PC90dD4gd2lsbCBzdXBwbHkgdGhhdCBjb21wbGV0aW9uIHdpdGhvdXQgb3BlbmluZyB0aGUgQUNXLjwvcD4KKzxwPiYjODIxNjtTaG93IENvbXBsZXRpb25zJiM4MjE3OyB3aWxsIGZvcmNlIG9wZW4gYSBjb21wbGV0aW9ucyB3aW5kb3csIGJ5IGRlZmF1bHQgdGhlCis8dHQgY2xhc3M9ImtiZCBkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj5DLXNwYWNlPC9zcGFuPjwvdHQ+IHdpbGwgb3BlbiBhIGNvbXBsZXRpb25zIHdpbmRvdy4gSW4gYW4gZW1wdHkKK3N0cmluZywgdGhpcyB3aWxsIGNvbnRhaW4gdGhlIGZpbGVzIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4gT24gYQorYmxhbmsgbGluZSwgaXQgd2lsbCBjb250YWluIHRoZSBidWlsdC1pbiBhbmQgdXNlci1kZWZpbmVkIGZ1bmN0aW9ucyBhbmQKK2NsYXNzZXMgaW4gdGhlIGN1cnJlbnQgbmFtZSBzcGFjZXMsIHBsdXMgYW55IG1vZHVsZXMgaW1wb3J0ZWQuIElmIHNvbWUKK2NoYXJhY3RlcnMgaGF2ZSBiZWVuIGVudGVyZWQsIHRoZSBBQ1cgd2lsbCBhdHRlbXB0IHRvIGJlIG1vcmUgc3BlY2lmaWMuPC9wPgorPHA+SWYgYSBzdHJpbmcgb2YgY2hhcmFjdGVycyBpcyB0eXBlZCwgdGhlIEFDVyBzZWxlY3Rpb24gd2lsbCBqdW1wIHRvIHRoZQorZW50cnkgbW9zdCBjbG9zZWx5IG1hdGNoaW5nIHRob3NlIGNoYXJhY3RlcnMuICBFbnRlcmluZyBhIDx0dCBjbGFzcz0ia2JkIGRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPnRhYjwvc3Bhbj48L3R0PiB3aWxsCitjYXVzZSB0aGUgbG9uZ2VzdCBub24tYW1iaWd1b3VzIG1hdGNoIHRvIGJlIGVudGVyZWQgaW4gdGhlIEVkaXRvciB3aW5kb3cgb3IKK1NoZWxsLiAgVHdvIDx0dCBjbGFzcz0ia2JkIGRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPnRhYjwvc3Bhbj48L3R0PiBpbiBhIHJvdyB3aWxsIHN1cHBseSB0aGUgY3VycmVudCBBQ1cgc2VsZWN0aW9uLCBhcword2lsbCByZXR1cm4gb3IgYSBkb3VibGUgY2xpY2suICBDdXJzb3Iga2V5cywgUGFnZSBVcC9Eb3duLCBtb3VzZSBzZWxlY3Rpb24sCithbmQgdGhlIHNjcm9sbCB3aGVlbCBhbGwgb3BlcmF0ZSBvbiB0aGUgQUNXLjwvcD4KKzxwPiYjODIyMDtIaWRkZW4mIzgyMjE7IGF0dHJpYnV0ZXMgY2FuIGJlIGFjY2Vzc2VkIGJ5IHR5cGluZyB0aGUgYmVnaW5uaW5nIG9mIGhpZGRlbgorbmFtZSBhZnRlciBhICYjODIxNjsuJiM4MjE3OywgZS5nLiAmIzgyMTY7XyYjODIxNzsuIFRoaXMgYWxsb3dzIGFjY2VzcyB0byBtb2R1bGVzIHdpdGgKKzx0dCBjbGFzcz0iZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+X19hbGxfXzwvc3Bhbj48L3R0PiBzZXQsIG9yIHRvIGNsYXNzLXByaXZhdGUgYXR0cmlidXRlcy48L3A+Cis8cD5Db21wbGV0aW9ucyBhbmQgdGhlICYjODIxNjtFeHBhbmQgV29yZCYjODIxNzsgZmFjaWxpdHkgY2FuIHNhdmUgYSBsb3Qgb2YgdHlwaW5nITwvcD4KKzxwPkNvbXBsZXRpb25zIGFyZSBjdXJyZW50bHkgbGltaXRlZCB0byB0aG9zZSBpbiB0aGUgbmFtZXNwYWNlcy4gTmFtZXMgaW4KK2FuIEVkaXRvciB3aW5kb3cgd2hpY2ggYXJlIG5vdCB2aWEgPHR0IGNsYXNzPSJkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj5fX21haW5fXzwvc3Bhbj48L3R0PiBhbmQgPGEgY2xhc3M9InJlZmVyZW5jZSBpbnRlcm5hbCIgaHJlZj0ic3lzLmh0bWwjc3lzLm1vZHVsZXMiIHRpdGxlPSJzeXMubW9kdWxlcyI+PHR0IGNsYXNzPSJ4cmVmIHB5IHB5LWRhdGEgZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+c3lzLm1vZHVsZXM8L3NwYW4+PC90dD48L2E+IHdpbGwKK25vdCBiZSBmb3VuZC4gIFJ1biB0aGUgbW9kdWxlIG9uY2Ugd2l0aCB5b3VyIGltcG9ydHMgdG8gY29ycmVjdCB0aGlzIHNpdHVhdGlvbi4KK05vdGUgdGhhdCBJRExFIGl0c2VsZiBwbGFjZXMgcXVpdGUgYSBmZXcgbW9kdWxlcyBpbiBzeXMubW9kdWxlcywgc28KK211Y2ggY2FuIGJlIGZvdW5kIGJ5IGRlZmF1bHQsIGUuZy4gdGhlIHJlIG1vZHVsZS48L3A+Cis8cD5JZiB5b3UgZG9uJiM4MjE3O3QgbGlrZSB0aGUgQUNXIHBvcHBpbmcgdXAgdW5iaWRkZW4sIHNpbXBseSBtYWtlIHRoZSBkZWxheQorbG9uZ2VyIG9yIGRpc2FibGUgdGhlIGV4dGVuc2lvbi48L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InNlY3Rpb24iIGlkPSJjYWxsdGlwcyI+Cis8aDM+MjUuNS4yLjMuIENhbGx0aXBzPGEgY2xhc3M9ImhlYWRlcmxpbmsiIGhyZWY9IiNjYWxsdGlwcyIgdGl0bGU9IlBlcm1hbGluayB0byB0aGlzIGhlYWRsaW5lIj7CtjwvYT48L2gzPgorPHA+QSBjYWxsdGlwIGlzIHNob3duIHdoZW4gb25lIHR5cGVzIDx0dCBjbGFzcz0ia2JkIGRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPig8L3NwYW4+PC90dD4gYWZ0ZXIgdGhlIG5hbWUgb2YgYW4gPGVtPmFjY2Nlc3NpYmxlPC9lbT4KK2Z1bmN0aW9uLiAgQSBuYW1lIGV4cHJlc3Npb24gbWF5IGluY2x1ZGUgZG90cyBhbmQgc3Vic2NyaXB0cy4gIEEgY2FsbHRpcAorcmVtYWlucyB1bnRpbCBpdCBpcyBjbGlja2VkLCB0aGUgY3Vyc29yIGlzIG1vdmVkIG91dCBvZiB0aGUgYXJndW1lbnQgYXJlYSwKK29yIDx0dCBjbGFzcz0ia2JkIGRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPik8L3NwYW4+PC90dD4gaXMgdHlwZWQuICBXaGVuIHRoZSBjdXJzb3IgaXMgaW4gdGhlIGFyZ3VtZW50IHBhcnQgb2YgYSBkZWZpbml0aW9uLAordGhlIG1lbnUgb3Igc2hvcnRjdXQgZGlzcGxheSBhIGNhbGx0aXAuPC9wPgorPHA+QSBjYWxsdGlwIGNvbnNpc3RzIG9mIHRoZSBmdW5jdGlvbiBzaWduYXR1cmUgYW5kIHRoZSBmaXJzdCBsaW5lIG9mIHRoZQorZG9jc3RyaW5nLiAgRm9yIGJ1aWx0aW5zIHdpdGhvdXQgYW4gYWNjZXNzaWJsZSBzaWduYXR1cmUsIHRoZSBjYWxsdGlwCitjb25zaXN0cyBvZiBhbGwgbGluZXMgdXAgdGhlIGZpZnRoIGxpbmUgb3IgdGhlIGZpcnN0IGJsYW5rIGxpbmUuICBUaGVzZQorZGV0YWlscyBtYXkgY2hhbmdlLjwvcD4KKzxwPlRoZSBzZXQgb2YgPGVtPmFjY2Vzc2libGU8L2VtPiBmdW5jdGlvbnMgZGVwZW5kcyBvbiB3aGF0IG1vZHVsZXMgaGF2ZSBiZWVuIGltcG9ydGVkCitpbnRvIHRoZSB1c2VyIHByb2Nlc3MsIGluY2x1ZGluZyB0aG9zZSBpbXBvcnRlZCBieSBJZGxlIGl0c2VsZiwKK2FuZCB3aGF0IGRlZmluaXRpb25zIGhhdmUgYmVlbiBydW4sIGFsbCBzaW5jZSB0aGUgbGFzdCByZXN0YXJ0LjwvcD4KKzxwPkZvciBleGFtcGxlLCByZXN0YXJ0IHRoZSBTaGVsbCBhbmQgZW50ZXIgPHR0IGNsYXNzPSJkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj5pdGVydG9vbHMuY291bnQoPC9zcGFuPjwvdHQ+LiAgQSBjYWxsdGlwCithcHBlYXJzIGJlY2F1c2UgSWRsZSBpbXBvcnRzIGl0ZXJ0b29scyBpbnRvIHRoZSB1c2VyIHByb2Nlc3MgZm9yIGl0cyBvd24gdXNlLgorKFRoaXMgY291bGQgY2hhbmdlLikgIEVudGVyIDx0dCBjbGFzcz0iZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+dHVydGxlLndyaXRlKDwvc3Bhbj48L3R0PiBhbmQgbm90aGluZyBhcHBlYXJzLiAgSWRsZSBkb2VzCitub3QgaW1wb3J0IHR1cnRsZS4gIFRoZSBtZW51IG9yIHNob3J0Y3V0IGRvIG5vdGhpbmcgZWl0aGVyLiAgRW50ZXIKKzx0dCBjbGFzcz0iZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+aW1wb3J0PC9zcGFuPiA8c3BhbiBjbGFzcz0icHJlIj50dXJ0bGU8L3NwYW4+PC90dD4gYW5kIHRoZW4gPHR0IGNsYXNzPSJkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj50dXJ0bGUud3JpdGUoPC9zcGFuPjwvdHQ+IHdpbGwgd29yay48L3A+Cis8cD5JbiBhbiBlZGl0b3IsIGltcG9ydCBzdGF0ZW1lbnRzIGhhdmUgbm8gZWZmZWN0IHVudGlsIG9uZSBydW5zIHRoZSBmaWxlLiAgT25lCittaWdodCB3YW50IHRvIHJ1biBhIGZpbGUgYWZ0ZXIgd3JpdGluZyB0aGUgaW1wb3J0IHN0YXRlbWVudHMgYXQgdGhlIHRvcCwKK29yIGltbWVkaWF0ZWx5IHJ1biBhbiBleGlzdGluZyBmaWxlIGJlZm9yZSBlZGl0aW5nLjwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0ic2VjdGlvbiIgaWQ9InB5dGhvbi1zaGVsbC13aW5kb3ciPgorPGgzPjI1LjUuMi40LiBQeXRob24gU2hlbGwgd2luZG93PGEgY2xhc3M9ImhlYWRlcmxpbmsiIGhyZWY9IiNweXRob24tc2hlbGwtd2luZG93IiB0aXRsZT0iUGVybWFsaW5rIHRvIHRoaXMgaGVhZGxpbmUiPsK2PC9hPjwvaDM+Cis8dWw+Cis8bGk+PHAgY2xhc3M9ImZpcnN0Ij48dHQgY2xhc3M9ImtiZCBkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj5DLWM8L3NwYW4+PC90dD4gaW50ZXJydXB0cyBleGVjdXRpbmcgY29tbWFuZDwvcD4KKzwvbGk+Cis8bGk+PHAgY2xhc3M9ImZpcnN0Ij48dHQgY2xhc3M9ImtiZCBkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj5DLWQ8L3NwYW4+PC90dD4gc2VuZHMgZW5kLW9mLWZpbGU7IGNsb3NlcyB3aW5kb3cgaWYgdHlwZWQgYXQgYSA8dHQgY2xhc3M9ImRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPiZndDsmZ3Q7Jmd0Ozwvc3Bhbj48L3R0PiBwcm9tcHQ8L3A+Cis8L2xpPgorPGxpPjxwIGNsYXNzPSJmaXJzdCI+PHR0IGNsYXNzPSJrYmQgZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+QWx0LS88L3NwYW4+PC90dD4gKEV4cGFuZCB3b3JkKSBpcyBhbHNvIHVzZWZ1bCB0byByZWR1Y2UgdHlwaW5nPC9wPgorPHA+Q29tbWFuZCBoaXN0b3J5PC9wPgorPHVsIGNsYXNzPSJzaW1wbGUiPgorPGxpPjx0dCBjbGFzcz0ia2JkIGRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPkFsdC1wPC9zcGFuPjwvdHQ+IHJldHJpZXZlcyBwcmV2aW91cyBjb21tYW5kIG1hdGNoaW5nIHdoYXQgeW91IGhhdmUgdHlwZWQuIE9uCitPUyBYIHVzZSA8dHQgY2xhc3M9ImtiZCBkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj5DLXA8L3NwYW4+PC90dD4uPC9saT4KKzxsaT48dHQgY2xhc3M9ImtiZCBkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj5BbHQtbjwvc3Bhbj48L3R0PiByZXRyaWV2ZXMgbmV4dC4gT24gT1MgWCB1c2UgPHR0IGNsYXNzPSJrYmQgZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+Qy1uPC9zcGFuPjwvdHQ+LjwvbGk+Cis8bGk+PHR0IGNsYXNzPSJrYmQgZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+UmV0dXJuPC9zcGFuPjwvdHQ+IHdoaWxlIG9uIGFueSBwcmV2aW91cyBjb21tYW5kIHJldHJpZXZlcyB0aGF0IGNvbW1hbmQ8L2xpPgorPC91bD4KKzwvbGk+Cis8L3VsPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJzZWN0aW9uIiBpZD0idGV4dC1jb2xvcnMiPgorPGgzPjI1LjUuMi41LiBUZXh0IGNvbG9yczxhIGNsYXNzPSJoZWFkZXJsaW5rIiBocmVmPSIjdGV4dC1jb2xvcnMiIHRpdGxlPSJQZXJtYWxpbmsgdG8gdGhpcyBoZWFkbGluZSI+wrY8L2E+PC9oMz4KKzxwPklkbGUgZGVmYXVsdHMgdG8gYmxhY2sgb24gd2hpdGUgdGV4dCwgYnV0IGNvbG9ycyB0ZXh0IHdpdGggc3BlY2lhbCBtZWFuaW5ncy4KK0ZvciB0aGUgc2hlbGwsIHRoZXNlIGFyZSBzaGVsbCBvdXRwdXQsIHNoZWxsIGVycm9yLCB1c2VyIG91dHB1dCwgYW5kCit1c2VyIGVycm9yLiAgRm9yIFB5dGhvbiBjb2RlLCBhdCB0aGUgc2hlbGwgcHJvbXB0IG9yIGluIGFuIGVkaXRvciwgdGhlc2UgYXJlCitrZXl3b3JkcywgYnVpbHRpbiBjbGFzcyBhbmQgZnVuY3Rpb24gbmFtZXMsIG5hbWVzIGZvbGxvd2luZyA8dHQgY2xhc3M9ImRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPmNsYXNzPC9zcGFuPjwvdHQ+IGFuZAorPHR0IGNsYXNzPSJkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj5kZWY8L3NwYW4+PC90dD4sIHN0cmluZ3MsIGFuZCBjb21tZW50cy4gRm9yIGFueSB0ZXh0IHdpbmRvdywgdGhlc2UgYXJlIHRoZSBjdXJzb3IgKHdoZW4KK3ByZXNlbnQpLCBmb3VuZCB0ZXh0ICh3aGVuIHBvc3NpYmxlKSwgYW5kIHNlbGVjdGVkIHRleHQuPC9wPgorPHA+VGV4dCBjb2xvcmluZyBpcyBkb25lIGluIHRoZSBiYWNrZ3JvdW5kLCBzbyB1bmNvbG9yaXplZCB0ZXh0IGlzIG9jY2FzaW9uYWxseQordmlzaWJsZS4gIFRvIGNoYW5nZSB0aGUgY29sb3Igc2NoZW1lLCB1c2UgdGhlIENvbmZpZ3VyZSBJRExFIGRpYWxvZworSGlnaGxpZ2h0aW5nIHRhYi4gIFRoZSBtYXJraW5nIG9mIGRlYnVnZ2VyIGJyZWFrcG9pbnQgbGluZXMgaW4gdGhlIGVkaXRvciBhbmQKK3RleHQgaW4gcG9wdXBzIGFuZCBkaWFsb2dzIGlzIG5vdCB1c2VyLWNvbmZpZ3VyYWJsZS48L3A+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0ic2VjdGlvbiIgaWQ9InN0YXJ0dXAtYW5kLWNvZGUtZXhlY3V0aW9uIj4KKzxoMj4yNS41LjMuIFN0YXJ0dXAgYW5kIGNvZGUgZXhlY3V0aW9uPGEgY2xhc3M9ImhlYWRlcmxpbmsiIGhyZWY9IiNzdGFydHVwLWFuZC1jb2RlLWV4ZWN1dGlvbiIgdGl0bGU9IlBlcm1hbGluayB0byB0aGlzIGhlYWRsaW5lIj7CtjwvYT48L2gyPgorPHA+VXBvbiBzdGFydHVwIHdpdGggdGhlIDx0dCBjbGFzcz0iZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+LXM8L3NwYW4+PC90dD4gb3B0aW9uLCBJRExFIHdpbGwgZXhlY3V0ZSB0aGUgZmlsZSByZWZlcmVuY2VkIGJ5Cit0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIDxzcGFuIGNsYXNzPSJ0YXJnZXQiIGlkPSJpbmRleC01Ij48L3NwYW4+PHR0IGNsYXNzPSJ4cmVmIHN0ZCBzdGQtZW52dmFyIGRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPklETEVTVEFSVFVQPC9zcGFuPjwvdHQ+IG9yIDxzcGFuIGNsYXNzPSJ0YXJnZXQiIGlkPSJpbmRleC02Ij48L3NwYW4+PGEgY2xhc3M9InJlZmVyZW5jZSBpbnRlcm5hbCIgaHJlZj0iLi4vdXNpbmcvY21kbGluZS5odG1sI2VudnZhci1QWVRIT05TVEFSVFVQIj48dHQgY2xhc3M9InhyZWYgc3RkIHN0ZC1lbnZ2YXIgZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+UFlUSE9OU1RBUlRVUDwvc3Bhbj48L3R0PjwvYT4uCitJRExFIGZpcnN0IGNoZWNrcyBmb3IgPHR0IGNsYXNzPSJkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj5JRExFU1RBUlRVUDwvc3Bhbj48L3R0PjsgaWYgPHR0IGNsYXNzPSJkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj5JRExFU1RBUlRVUDwvc3Bhbj48L3R0PiBpcyBwcmVzZW50IHRoZSBmaWxlCityZWZlcmVuY2VkIGlzIHJ1bi4gIElmIDx0dCBjbGFzcz0iZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+SURMRVNUQVJUVVA8L3NwYW4+PC90dD4gaXMgbm90IHByZXNlbnQsIElETEUgY2hlY2tzIGZvcgorPHR0IGNsYXNzPSJkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj5QWVRIT05TVEFSVFVQPC9zcGFuPjwvdHQ+LiAgRmlsZXMgcmVmZXJlbmNlZCBieSB0aGVzZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlCitjb252ZW5pZW50IHBsYWNlcyB0byBzdG9yZSBmdW5jdGlvbnMgdGhhdCBhcmUgdXNlZCBmcmVxdWVudGx5IGZyb20gdGhlIElETEUKK3NoZWxsLCBvciBmb3IgZXhlY3V0aW5nIGltcG9ydCBzdGF0ZW1lbnRzIHRvIGltcG9ydCBjb21tb24gbW9kdWxlcy48L3A+Cis8cD5JbiBhZGRpdGlvbiwgPHR0IGNsYXNzPSJkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj5Uazwvc3Bhbj48L3R0PiBhbHNvIGxvYWRzIGEgc3RhcnR1cCBmaWxlIGlmIGl0IGlzIHByZXNlbnQuICBOb3RlIHRoYXQgdGhlCitUayBmaWxlIGlzIGxvYWRlZCB1bmNvbmRpdGlvbmFsbHkuICBUaGlzIGFkZGl0aW9uYWwgZmlsZSBpcyA8dHQgY2xhc3M9ImRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPi5JZGxlLnB5PC9zcGFuPjwvdHQ+IGFuZCBpcworbG9va2VkIGZvciBpbiB0aGUgdXNlciYjODIxNztzIGhvbWUgZGlyZWN0b3J5LiAgU3RhdGVtZW50cyBpbiB0aGlzIGZpbGUgd2lsbCBiZQorZXhlY3V0ZWQgaW4gdGhlIFRrIG5hbWVzcGFjZSwgc28gdGhpcyBmaWxlIGlzIG5vdCB1c2VmdWwgZm9yIGltcG9ydGluZworZnVuY3Rpb25zIHRvIGJlIHVzZWQgZnJvbSBJRExFJiM4MjE3O3MgUHl0aG9uIHNoZWxsLjwvcD4KKzxkaXYgY2xhc3M9InNlY3Rpb24iIGlkPSJjb21tYW5kLWxpbmUtdXNhZ2UiPgorPGgzPjI1LjUuMy4xLiBDb21tYW5kIGxpbmUgdXNhZ2U8YSBjbGFzcz0iaGVhZGVybGluayIgaHJlZj0iI2NvbW1hbmQtbGluZS11c2FnZSIgdGl0bGU9IlBlcm1hbGluayB0byB0aGlzIGhlYWRsaW5lIj7CtjwvYT48L2gzPgorPGRpdiBjbGFzcz0iaGlnaGxpZ2h0LXB5dGhvbjMiPjxkaXYgY2xhc3M9ImhpZ2hsaWdodCI+PHByZT5pZGxlLnB5IFstYyBjb21tYW5kXSBbLWRdIFstZV0gWy1oXSBbLWldIFstciBmaWxlXSBbLXNdIFstdCB0aXRsZV0gWy1dIFthcmddIC4uLgorCistYyBjb21tYW5kICBydW4gY29tbWFuZCBpbiB0aGUgc2hlbGwgd2luZG93CistZCAgICAgICAgICBlbmFibGUgZGVidWdnZXIgYW5kIG9wZW4gc2hlbGwgd2luZG93CistZSAgICAgICAgICBvcGVuIGVkaXRvciB3aW5kb3cKKy1oICAgICAgICAgIHByaW50IGhlbHAgbWVzc2FnZSB3aXRoIGxlZ2FsIGNvbWJpbmF0aW9zIGFuZCBleGl0CistaSAgICAgICAgICBvcGVuIHNoZWxsIHdpbmRvdworLXIgZmlsZSAgICAgcnVuIGZpbGUgaW4gc2hlbGwgd2luZG93CistcyAgICAgICAgICBydW4gJElETEVTVEFSVFVQIG9yICRQWVRIT05TVEFSVFVQIGZpcnN0LCBpbiBzaGVsbCB3aW5kb3cKKy10IHRpdGxlICAgIHNldCB0aXRsZSBvZiBzaGVsbCB3aW5kb3cKKy0gICAgICAgICAgIHJ1biBzdGRpbiBpbiBzaGVsbCAoLSBtdXN0IGJlIGxhc3Qgb3B0aW9uIGJlZm9yZSBhcmdzKQorPC9wcmU+PC9kaXY+Cis8L2Rpdj4KKzxwPklmIHRoZXJlIGFyZSBhcmd1bWVudHM6PC9wPgorPHVsIGNsYXNzPSJzaW1wbGUiPgorPGxpPklmIDx0dCBjbGFzcz0iZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+LTwvc3Bhbj48L3R0PiwgPHR0IGNsYXNzPSJkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj4tYzwvc3Bhbj48L3R0Piwgb3IgPHR0IGNsYXNzPSJkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj5yPC9zcGFuPjwvdHQ+IGlzIHVzZWQsIGFsbCBhcmd1bWVudHMgYXJlIHBsYWNlZCBpbgorPHR0IGNsYXNzPSJkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj5zeXMuYXJndlsxOi4uLl08L3NwYW4+PC90dD4gYW5kIDx0dCBjbGFzcz0iZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+c3lzLmFyZ3ZbMF08L3NwYW4+PC90dD4gaXMgc2V0IHRvIDx0dCBjbGFzcz0iZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+Jyc8L3NwYW4+PC90dD4sIDx0dCBjbGFzcz0iZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+Jy1jJzwvc3Bhbj48L3R0PiwKK29yIDx0dCBjbGFzcz0iZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+Jy1yJzwvc3Bhbj48L3R0Pi4gIE5vIGVkaXRvciB3aW5kb3cgaXMgb3BlbmVkLCBldmVuIGlmIHRoYXQgaXMgdGhlIGRlZmF1bHQKK3NldCBpbiB0aGUgT3B0aW9ucyBkaWFsb2cuPC9saT4KKzxsaT5PdGhlcndpc2UsIGFyZ3VtZW50cyBhcmUgZmlsZXMgb3BlbmVkIGZvciBlZGl0aW5nIGFuZAorPHR0IGNsYXNzPSJkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj5zeXMuYXJndjwvc3Bhbj48L3R0PiByZWZsZWN0cyB0aGUgYXJndW1lbnRzIHBhc3NlZCB0byBJRExFIGl0c2VsZi48L2xpPgorPC91bD4KKzwvZGl2PgorPGRpdiBjbGFzcz0ic2VjdGlvbiIgaWQ9ImlkbGUtY29uc29sZS1kaWZmZXJlbmNlcyI+Cis8aDM+MjUuNS4zLjIuIElETEUtY29uc29sZSBkaWZmZXJlbmNlczxhIGNsYXNzPSJoZWFkZXJsaW5rIiBocmVmPSIjaWRsZS1jb25zb2xlLWRpZmZlcmVuY2VzIiB0aXRsZT0iUGVybWFsaW5rIHRvIHRoaXMgaGVhZGxpbmUiPsK2PC9hPjwvaDM+Cis8cD5BcyBtdWNoIGFzIHBvc3NpYmxlLCB0aGUgcmVzdWx0IG9mIGV4ZWN1dGluZyBQeXRob24gY29kZSB3aXRoIElETEUgaXMgdGhlCitzYW1lIGFzIGV4ZWN1dGluZyB0aGUgc2FtZSBjb2RlIGluIGEgY29uc29sZSB3aW5kb3cuICBIb3dldmVyLCB0aGUgZGlmZmVyZW50CitpbnRlcmZhY2UgYW5kIG9wZXJhdGlvbiBvY2Nhc2lvbmFsbHkgYWZmZWN0cyByZXN1bHRzLjwvcD4KKzxwPkZvciBpbnN0YW5jZSwgSURMRSBub3JtYWxseSBleGVjdXRlcyB1c2VyIGNvZGUgaW4gYSBzZXBhcmF0ZSBwcm9jZXNzIGZyb20KK3RoZSBJRExFIEdVSSBpdHNlbGYuICBUaGUgSURMRSB2ZXJzaW9ucyBvZiBzeXMuc3RkaW4sIC5zdGRvdXQsIGFuZCAuc3RkZXJyIGluIHRoZQorZXhlY3V0aW9uIHByb2Nlc3MgZ2V0IGlucHV0IGZyb20gYW5kIHNlbmQgb3V0cHV0IHRvIHRoZSBHVUkgcHJvY2VzcywKK3doaWNoIGtlZXBzIGNvbnRyb2wgb2YgdGhlIGtleWJvYXJkIGFuZCBzY3JlZW4uICBUaGlzIGlzIG5vcm1hbGx5IHRyYW5zcGFyZW50LAorYnV0IGNvZGUgdGhhdCBhY2Nlc3MgdGhlc2Ugb2JqZWN0IHdpbGwgc2VlIGRpZmZlcmVudCBhdHRyaWJ1dGUgdmFsdWVzLgorQWxzbywgZnVuY3Rpb25zIHRoYXQgZGlyZWN0bHkgYWNjZXNzIHRoZSBrZXlib2FyZCBhbmQgc2NyZWVuIHdpbGwgbm90IHdvcmsuPC9wPgorPHA+V2l0aCBJRExFJiM4MjE3O3MgU2hlbGwsIG9uZSBlbnRlcnMsIGVkaXRzLCBhbmQgcmVjYWxscyBjb21wbGV0ZSBzdGF0ZW1lbnRzLgorU29tZSBjb25zb2xlcyBvbmx5IHdvcmsgd2l0aCBhIHNpbmdsZSBwaHlzaWNhbCBsaW5lIGF0IGEgdGltZS48L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InNlY3Rpb24iIGlkPSJydW5uaW5nLXdpdGhvdXQtYS1zdWJwcm9jZXNzIj4KKzxoMz4yNS41LjMuMy4gUnVubmluZyB3aXRob3V0IGEgc3VicHJvY2VzczxhIGNsYXNzPSJoZWFkZXJsaW5rIiBocmVmPSIjcnVubmluZy13aXRob3V0LWEtc3VicHJvY2VzcyIgdGl0bGU9IlBlcm1hbGluayB0byB0aGlzIGhlYWRsaW5lIj7CtjwvYT48L2gzPgorPHA+QnkgZGVmYXVsdCwgSURMRSBleGVjdXRlcyB1c2VyIGNvZGUgaW4gYSBzZXBhcmF0ZSBzdWJwcm9jZXNzIHZpYSBhIHNvY2tldCwKK3doaWNoIHVzZXMgdGhlIGludGVybmFsIGxvb3BiYWNrIGludGVyZmFjZS4gIFRoaXMgY29ubmVjdGlvbiBpcyBub3QKK2V4dGVybmFsbHkgdmlzaWJsZSBhbmQgbm8gZGF0YSBpcyBzZW50IHRvIG9yIHJlY2VpdmVkIGZyb20gdGhlIEludGVybmV0LgorSWYgZmlyZXdhbGwgc29mdHdhcmUgY29tcGxhaW5zIGFueXdheSwgeW91IGNhbiBpZ25vcmUgaXQuPC9wPgorPHA+SWYgdGhlIGF0dGVtcHQgdG8gbWFrZSB0aGUgc29ja2V0IGNvbm5lY3Rpb24gZmFpbHMsIElkbGUgd2lsbCBub3RpZnkgeW91LgorU3VjaCBmYWlsdXJlcyBhcmUgc29tZXRpbWVzIHRyYW5zaWVudCwgYnV0IGlmIHBlcnNpc3RlbnQsIHRoZSBwcm9ibGVtCittYXkgYmUgZWl0aGVyIGEgZmlyZXdhbGwgYmxvY2tpbmcgdGhlIGNvbm5lY3RvbiBvciBtaXNjb25maWd1cmF0aW9uIG9mCithIHBhcnRpY3VsYXIgc3lzdGVtLiAgVW50aWwgdGhlIHByb2JsZW0gaXMgZml4ZWQsIG9uZSBjYW4gcnVuIElkbGUgd2l0aAordGhlIC1uIGNvbW1hbmQgbGluZSBzd2l0Y2guPC9wPgorPHA+SWYgSURMRSBpcyBzdGFydGVkIHdpdGggdGhlIC1uIGNvbW1hbmQgbGluZSBzd2l0Y2ggaXQgd2lsbCBydW4gaW4gYQorc2luZ2xlIHByb2Nlc3MgYW5kIHdpbGwgbm90IGNyZWF0ZSB0aGUgc3VicHJvY2VzcyB3aGljaCBydW5zIHRoZSBSUEMKK1B5dGhvbiBleGVjdXRpb24gc2VydmVyLiAgVGhpcyBjYW4gYmUgdXNlZnVsIGlmIFB5dGhvbiBjYW5ub3QgY3JlYXRlCit0aGUgc3VicHJvY2VzcyBvciB0aGUgUlBDIHNvY2tldCBpbnRlcmZhY2Ugb24geW91ciBwbGF0Zm9ybS4gIEhvd2V2ZXIsCitpbiB0aGlzIG1vZGUgdXNlciBjb2RlIGlzIG5vdCBpc29sYXRlZCBmcm9tIElETEUgaXRzZWxmLiAgQWxzbywgdGhlCitlbnZpcm9ubWVudCBpcyBub3QgcmVzdGFydGVkIHdoZW4gUnVuL1J1biBNb2R1bGUgKEY1KSBpcyBzZWxlY3RlZC4gIElmCit5b3VyIGNvZGUgaGFzIGJlZW4gbW9kaWZpZWQsIHlvdSBtdXN0IHJlbG9hZCgpIHRoZSBhZmZlY3RlZCBtb2R1bGVzIGFuZAorcmUtaW1wb3J0IGFueSBzcGVjaWZpYyBpdGVtcyAoZS5nLiBmcm9tIGZvbyBpbXBvcnQgYmF6KSBpZiB0aGUgY2hhbmdlcworYXJlIHRvIHRha2UgZWZmZWN0LiAgRm9yIHRoZXNlIHJlYXNvbnMsIGl0IGlzIHByZWZlcmFibGUgdG8gcnVuIElETEUKK3dpdGggdGhlIGRlZmF1bHQgc3VicHJvY2VzcyBpZiBhdCBhbGwgcG9zc2libGUuPC9wPgorPGRpdiBjbGFzcz0iZGVwcmVjYXRlZCI+Cis8cD48c3BhbiBjbGFzcz0idmVyc2lvbm1vZGlmaWVkIj5EZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy40Ljwvc3Bhbj48L3A+Cis8L2Rpdj4KKzwvZGl2PgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJzZWN0aW9uIiBpZD0iaGVscC1hbmQtcHJlZmVyZW5jZXMiPgorPGgyPjI1LjUuNC4gSGVscCBhbmQgcHJlZmVyZW5jZXM8YSBjbGFzcz0iaGVhZGVybGluayIgaHJlZj0iI2hlbHAtYW5kLXByZWZlcmVuY2VzIiB0aXRsZT0iUGVybWFsaW5rIHRvIHRoaXMgaGVhZGxpbmUiPsK2PC9hPjwvaDI+Cis8ZGl2IGNsYXNzPSJzZWN0aW9uIiBpZD0iYWRkaXRpb25hbC1oZWxwLXNvdXJjZXMiPgorPGgzPjI1LjUuNC4xLiBBZGRpdGlvbmFsIGhlbHAgc291cmNlczxhIGNsYXNzPSJoZWFkZXJsaW5rIiBocmVmPSIjYWRkaXRpb25hbC1oZWxwLXNvdXJjZXMiIHRpdGxlPSJQZXJtYWxpbmsgdG8gdGhpcyBoZWFkbGluZSI+wrY8L2E+PC9oMz4KKzxwPklETEUgaW5jbHVkZXMgYSBoZWxwIG1lbnUgZW50cnkgY2FsbGVkICYjODIyMDtQeXRob24gRG9jcyYjODIyMTsgdGhhdCB3aWxsIG9wZW4gdGhlCitleHRlbnNpdmUgc291cmNlcyBvZiBoZWxwLCBpbmNsdWRpbmcgdHV0b3JpYWxzLCBhdmFpbGFibGUgYXQgZG9jcy5weXRob24ub3JnLgorU2VsZWN0ZWQgVVJMcyBjYW4gYmUgYWRkZWQgb3IgcmVtb3ZlZCBmcm9tIHRoZSBoZWxwIG1lbnUgYXQgYW55IHRpbWUgdXNpbmcgdGhlCitDb25maWd1cmUgSURMRSBkaWFsb2cuIFNlZSB0aGUgSURMRSBoZWxwIG9wdGlvbiBpbiB0aGUgaGVscCBtZW51IG9mIElETEUgZm9yCittb3JlIGluZm9ybWF0aW9uLjwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0ic2VjdGlvbiIgaWQ9InNldHRpbmctcHJlZmVyZW5jZXMiPgorPGgzPjI1LjUuNC4yLiBTZXR0aW5nIHByZWZlcmVuY2VzPGEgY2xhc3M9ImhlYWRlcmxpbmsiIGhyZWY9IiNzZXR0aW5nLXByZWZlcmVuY2VzIiB0aXRsZT0iUGVybWFsaW5rIHRvIHRoaXMgaGVhZGxpbmUiPsK2PC9hPjwvaDM+Cis8cD5UaGUgZm9udCBwcmVmZXJlbmNlcywgaGlnaGxpZ2h0aW5nLCBrZXlzLCBhbmQgZ2VuZXJhbCBwcmVmZXJlbmNlcyBjYW4gYmUKK2NoYW5nZWQgdmlhIENvbmZpZ3VyZSBJRExFIG9uIHRoZSBPcHRpb24gbWVudS4gIEtleXMgY2FuIGJlIHVzZXIgZGVmaW5lZDsKK0lETEUgc2hpcHMgd2l0aCBmb3VyIGJ1aWx0IGluIGtleSBzZXRzLiBJbiBhZGRpdGlvbiBhIHVzZXIgY2FuIGNyZWF0ZSBhCitjdXN0b20ga2V5IHNldCBpbiB0aGUgQ29uZmlndXJlIElETEUgZGlhbG9nIHVuZGVyIHRoZSBrZXlzIHRhYi48L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InNlY3Rpb24iIGlkPSJleHRlbnNpb25zIj4KKzxoMz4yNS41LjQuMy4gRXh0ZW5zaW9uczxhIGNsYXNzPSJoZWFkZXJsaW5rIiBocmVmPSIjZXh0ZW5zaW9ucyIgdGl0bGU9IlBlcm1hbGluayB0byB0aGlzIGhlYWRsaW5lIj7CtjwvYT48L2gzPgorPHA+SURMRSBjb250YWlucyBhbiBleHRlbnNpb24gZmFjaWxpdHkuICBQZWZlcmVuY2VzIGZvciBleHRlbnNpb25zIGNhbiBiZQorY2hhbmdlZCB3aXRoIENvbmZpZ3VyZSBFeHRlbnNpb25zLiBTZWUgdGhlIGJlZ2lubmluZyBvZiBjb25maWctZXh0ZW5zaW9ucy5kZWYKK2luIHRoZSBpZGxlbGliIGRpcmVjdG9yeSBmb3IgZnVydGhlciBpbmZvcm1hdGlvbi4gIFRoZSBkZWZhdWx0IGV4dGVuc2lvbnMKK2FyZSBjdXJyZW50bHk6PC9wPgorPHVsIGNsYXNzPSJzaW1wbGUiPgorPGxpPkZvcm1hdFBhcmFncmFwaDwvbGk+Cis8bGk+QXV0b0V4cGFuZDwvbGk+Cis8bGk+Wm9vbUhlaWdodDwvbGk+Cis8bGk+U2NyaXB0QmluZGluZzwvbGk+Cis8bGk+Q2FsbFRpcHM8L2xpPgorPGxpPlBhcmVuTWF0Y2g8L2xpPgorPGxpPkF1dG9Db21wbGV0ZTwvbGk+Cis8bGk+Q29kZUNvbnRleHQ8L2xpPgorPGxpPlJzdHJpcEV4dGVuc2lvbjwvbGk+Cis8L3VsPgorPC9kaXY+Cis8L2Rpdj4KKzwvZGl2PgorCisKKyAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgPC9kaXY+CisgICAgICA8L2Rpdj4KKyAgICAgIDxkaXYgY2xhc3M9InNwaGlueHNpZGViYXIiPgorICAgICAgICA8ZGl2IGNsYXNzPSJzcGhpbnhzaWRlYmFyd3JhcHBlciI+CisgIDxoMz48YSBocmVmPSIuLi9jb250ZW50cy5odG1sIj5UYWJsZSBPZiBDb250ZW50czwvYT48L2gzPgorICA8dWw+Cis8bGk+PGEgY2xhc3M9InJlZmVyZW5jZSBpbnRlcm5hbCIgaHJlZj0iIyI+MjUuNS4gSURMRTwvYT48dWw+Cis8bGk+PGEgY2xhc3M9InJlZmVyZW5jZSBpbnRlcm5hbCIgaHJlZj0iI21lbnVzIj4yNS41LjEuIE1lbnVzPC9hPjx1bD4KKzxsaT48YSBjbGFzcz0icmVmZXJlbmNlIGludGVybmFsIiBocmVmPSIjZmlsZS1tZW51LXNoZWxsLWFuZC1lZGl0b3IiPjI1LjUuMS4xLiBGaWxlIG1lbnUgKFNoZWxsIGFuZCBFZGl0b3IpPC9hPjwvbGk+Cis8bGk+PGEgY2xhc3M9InJlZmVyZW5jZSBpbnRlcm5hbCIgaHJlZj0iI2VkaXQtbWVudS1zaGVsbC1hbmQtZWRpdG9yIj4yNS41LjEuMi4gRWRpdCBtZW51IChTaGVsbCBhbmQgRWRpdG9yKTwvYT48L2xpPgorPGxpPjxhIGNsYXNzPSJyZWZlcmVuY2UgaW50ZXJuYWwiIGhyZWY9IiNmb3JtYXQtbWVudS1lZGl0b3Itd2luZG93LW9ubHkiPjI1LjUuMS4zLiBGb3JtYXQgbWVudSAoRWRpdG9yIHdpbmRvdyBvbmx5KTwvYT48L2xpPgorPGxpPjxhIGNsYXNzPSJyZWZlcmVuY2UgaW50ZXJuYWwiIGhyZWY9IiNydW4tbWVudS1lZGl0b3Itd2luZG93LW9ubHkiPjI1LjUuMS40LiBSdW4gbWVudSAoRWRpdG9yIHdpbmRvdyBvbmx5KTwvYT48L2xpPgorPGxpPjxhIGNsYXNzPSJyZWZlcmVuY2UgaW50ZXJuYWwiIGhyZWY9IiNzaGVsbC1tZW51LXNoZWxsLXdpbmRvdy1vbmx5Ij4yNS41LjEuNS4gU2hlbGwgbWVudSAoU2hlbGwgd2luZG93IG9ubHkpPC9hPjwvbGk+Cis8bGk+PGEgY2xhc3M9InJlZmVyZW5jZSBpbnRlcm5hbCIgaHJlZj0iI2RlYnVnLW1lbnUtc2hlbGwtd2luZG93LW9ubHkiPjI1LjUuMS42LiBEZWJ1ZyBtZW51IChTaGVsbCB3aW5kb3cgb25seSk8L2E+PC9saT4KKzxsaT48YSBjbGFzcz0icmVmZXJlbmNlIGludGVybmFsIiBocmVmPSIjb3B0aW9ucy1tZW51LXNoZWxsLWFuZC1lZGl0b3IiPjI1LjUuMS43LiBPcHRpb25zIG1lbnUgKFNoZWxsIGFuZCBFZGl0b3IpPC9hPjwvbGk+Cis8bGk+PGEgY2xhc3M9InJlZmVyZW5jZSBpbnRlcm5hbCIgaHJlZj0iI3dpbmRvdy1tZW51LXNoZWxsLWFuZC1lZGl0b3IiPjI1LjUuMS44LiBXaW5kb3cgbWVudSAoU2hlbGwgYW5kIEVkaXRvcik8L2E+PC9saT4KKzxsaT48YSBjbGFzcz0icmVmZXJlbmNlIGludGVybmFsIiBocmVmPSIjaGVscC1tZW51LXNoZWxsLWFuZC1lZGl0b3IiPjI1LjUuMS45LiBIZWxwIG1lbnUgKFNoZWxsIGFuZCBFZGl0b3IpPC9hPjwvbGk+Cis8bGk+PGEgY2xhc3M9InJlZmVyZW5jZSBpbnRlcm5hbCIgaHJlZj0iI2NvbnRleHQtbWVudXMiPjI1LjUuMS4xMC4gQ29udGV4dCBNZW51czwvYT48L2xpPgorPC91bD4KKzwvbGk+Cis8bGk+PGEgY2xhc3M9InJlZmVyZW5jZSBpbnRlcm5hbCIgaHJlZj0iI2VkaXRpbmctYW5kLW5hdmlnYXRpb24iPjI1LjUuMi4gRWRpdGluZyBhbmQgbmF2aWdhdGlvbjwvYT48dWw+Cis8bGk+PGEgY2xhc3M9InJlZmVyZW5jZSBpbnRlcm5hbCIgaHJlZj0iI2F1dG9tYXRpYy1pbmRlbnRhdGlvbiI+MjUuNS4yLjEuIEF1dG9tYXRpYyBpbmRlbnRhdGlvbjwvYT48L2xpPgorPGxpPjxhIGNsYXNzPSJyZWZlcmVuY2UgaW50ZXJuYWwiIGhyZWY9IiNjb21wbGV0aW9ucyI+MjUuNS4yLjIuIENvbXBsZXRpb25zPC9hPjwvbGk+Cis8bGk+PGEgY2xhc3M9InJlZmVyZW5jZSBpbnRlcm5hbCIgaHJlZj0iI2NhbGx0aXBzIj4yNS41LjIuMy4gQ2FsbHRpcHM8L2E+PC9saT4KKzxsaT48YSBjbGFzcz0icmVmZXJlbmNlIGludGVybmFsIiBocmVmPSIjcHl0aG9uLXNoZWxsLXdpbmRvdyI+MjUuNS4yLjQuIFB5dGhvbiBTaGVsbCB3aW5kb3c8L2E+PC9saT4KKzxsaT48YSBjbGFzcz0icmVmZXJlbmNlIGludGVybmFsIiBocmVmPSIjdGV4dC1jb2xvcnMiPjI1LjUuMi41LiBUZXh0IGNvbG9yczwvYT48L2xpPgorPC91bD4KKzwvbGk+Cis8bGk+PGEgY2xhc3M9InJlZmVyZW5jZSBpbnRlcm5hbCIgaHJlZj0iI3N0YXJ0dXAtYW5kLWNvZGUtZXhlY3V0aW9uIj4yNS41LjMuIFN0YXJ0dXAgYW5kIGNvZGUgZXhlY3V0aW9uPC9hPjx1bD4KKzxsaT48YSBjbGFzcz0icmVmZXJlbmNlIGludGVybmFsIiBocmVmPSIjY29tbWFuZC1saW5lLXVzYWdlIj4yNS41LjMuMS4gQ29tbWFuZCBsaW5lIHVzYWdlPC9hPjwvbGk+Cis8bGk+PGEgY2xhc3M9InJlZmVyZW5jZSBpbnRlcm5hbCIgaHJlZj0iI2lkbGUtY29uc29sZS1kaWZmZXJlbmNlcyI+MjUuNS4zLjIuIElETEUtY29uc29sZSBkaWZmZXJlbmNlczwvYT48L2xpPgorPGxpPjxhIGNsYXNzPSJyZWZlcmVuY2UgaW50ZXJuYWwiIGhyZWY9IiNydW5uaW5nLXdpdGhvdXQtYS1zdWJwcm9jZXNzIj4yNS41LjMuMy4gUnVubmluZyB3aXRob3V0IGEgc3VicHJvY2VzczwvYT48L2xpPgorPC91bD4KKzwvbGk+Cis8bGk+PGEgY2xhc3M9InJlZmVyZW5jZSBpbnRlcm5hbCIgaHJlZj0iI2hlbHAtYW5kLXByZWZlcmVuY2VzIj4yNS41LjQuIEhlbHAgYW5kIHByZWZlcmVuY2VzPC9hPjx1bD4KKzxsaT48YSBjbGFzcz0icmVmZXJlbmNlIGludGVybmFsIiBocmVmPSIjYWRkaXRpb25hbC1oZWxwLXNvdXJjZXMiPjI1LjUuNC4xLiBBZGRpdGlvbmFsIGhlbHAgc291cmNlczwvYT48L2xpPgorPGxpPjxhIGNsYXNzPSJyZWZlcmVuY2UgaW50ZXJuYWwiIGhyZWY9IiNzZXR0aW5nLXByZWZlcmVuY2VzIj4yNS41LjQuMi4gU2V0dGluZyBwcmVmZXJlbmNlczwvYT48L2xpPgorPGxpPjxhIGNsYXNzPSJyZWZlcmVuY2UgaW50ZXJuYWwiIGhyZWY9IiNleHRlbnNpb25zIj4yNS41LjQuMy4gRXh0ZW5zaW9uczwvYT48L2xpPgorPC91bD4KKzwvbGk+Cis8L3VsPgorPC9saT4KKzwvdWw+CisKKyAgPGg0PlByZXZpb3VzIHRvcGljPC9oND4KKyAgPHAgY2xhc3M9InRvcGxlc3MiPjxhIGhyZWY9InRraW50ZXIuc2Nyb2xsZWR0ZXh0Lmh0bWwiCisgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT0icHJldmlvdXMgY2hhcHRlciI+MjUuNC4gPHR0IGNsYXNzPSJkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj50a2ludGVyLnNjcm9sbGVkdGV4dDwvc3Bhbj48L3R0PiAmIzgyMTI7IFNjcm9sbGVkIFRleHQgV2lkZ2V0PC9hPjwvcD4KKyAgPGg0Pk5leHQgdG9waWM8L2g0PgorICA8cCBjbGFzcz0idG9wbGVzcyI+PGEgaHJlZj0ib3RoZXJndWkuaHRtbCIKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPSJuZXh0IGNoYXB0ZXIiPjI1LjYuIE90aGVyIEdyYXBoaWNhbCBVc2VyIEludGVyZmFjZSBQYWNrYWdlczwvYT48L3A+Cis8aDM+VGhpcyBQYWdlPC9oMz4KKzx1bCBjbGFzcz0idGhpcy1wYWdlLW1lbnUiPgorICA8bGk+PGEgaHJlZj0iLi4vYnVncy5odG1sIj5SZXBvcnQgYSBCdWc8L2E+PC9saT4KKyAgPGxpPjxhIGhyZWY9Ii4uL19zb3VyY2VzL2xpYnJhcnkvaWRsZS50eHQiCisgICAgICAgICByZWw9Im5vZm9sbG93Ij5TaG93IFNvdXJjZTwvYT48L2xpPgorPC91bD4KKworPGRpdiBpZD0ic2VhcmNoYm94IiBzdHlsZT0iZGlzcGxheTogbm9uZSI+CisgIDxoMz5RdWljayBzZWFyY2g8L2gzPgorICAgIDxmb3JtIGNsYXNzPSJzZWFyY2giIGFjdGlvbj0iLi4vc2VhcmNoLmh0bWwiIG1ldGhvZD0iZ2V0Ij4KKyAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJxIiAvPgorICAgICAgPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IkdvIiAvPgorICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iY2hlY2tfa2V5d29yZHMiIHZhbHVlPSJ5ZXMiIC8+CisgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhcmVhIiB2YWx1ZT0iZGVmYXVsdCIgLz4KKyAgICA8L2Zvcm0+CisgICAgPHAgY2xhc3M9InNlYXJjaHRpcCIgc3R5bGU9ImZvbnQtc2l6ZTogOTAlIj4KKyAgICBFbnRlciBzZWFyY2ggdGVybXMgb3IgYSBtb2R1bGUsIGNsYXNzIG9yIGZ1bmN0aW9uIG5hbWUuCisgICAgPC9wPgorPC9kaXY+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+JCgnI3NlYXJjaGJveCcpLnNob3coMCk7PC9zY3JpcHQ+CisgICAgICAgIDwvZGl2PgorICAgICAgPC9kaXY+CisgICAgICA8ZGl2IGNsYXNzPSJjbGVhcmVyIj48L2Rpdj4KKyAgICA8L2Rpdj4KKyAgICA8ZGl2IGNsYXNzPSJyZWxhdGVkIj4KKyAgICAgIDxoMz5OYXZpZ2F0aW9uPC9oMz4KKyAgICAgIDx1bD4KKyAgICAgICAgPGxpIGNsYXNzPSJyaWdodCIgc3R5bGU9Im1hcmdpbi1yaWdodDogMTBweCI+CisgICAgICAgICAgPGEgaHJlZj0iLi4vZ2VuaW5kZXguaHRtbCIgdGl0bGU9IkdlbmVyYWwgSW5kZXgiCisgICAgICAgICAgICAgPmluZGV4PC9hPjwvbGk+CisgICAgICAgIDxsaSBjbGFzcz0icmlnaHQiID4KKyAgICAgICAgICA8YSBocmVmPSIuLi9weS1tb2RpbmRleC5odG1sIiB0aXRsZT0iUHl0aG9uIE1vZHVsZSBJbmRleCIKKyAgICAgICAgICAgICA+bW9kdWxlczwvYT4gfDwvbGk+CisgICAgICAgIDxsaSBjbGFzcz0icmlnaHQiID4KKyAgICAgICAgICA8YSBocmVmPSJvdGhlcmd1aS5odG1sIiB0aXRsZT0iMjUuNi4gT3RoZXIgR3JhcGhpY2FsIFVzZXIgSW50ZXJmYWNlIFBhY2thZ2VzIgorICAgICAgICAgICAgID5uZXh0PC9hPiB8PC9saT4KKyAgICAgICAgPGxpIGNsYXNzPSJyaWdodCIgPgorICAgICAgICAgIDxhIGhyZWY9InRraW50ZXIuc2Nyb2xsZWR0ZXh0Lmh0bWwiIHRpdGxlPSIyNS40LiB0a2ludGVyLnNjcm9sbGVkdGV4dCDigJQgU2Nyb2xsZWQgVGV4dCBXaWRnZXQiCisgICAgICAgICAgICAgPnByZXZpb3VzPC9hPiB8PC9saT4KKyAgICAgICAgPGxpPjxpbWcgc3JjPSIuLi9fc3RhdGljL3B5LnBuZyIgYWx0PSIiCisgICAgICAgICAgICAgICAgIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyBtYXJnaW4tdG9wOiAtMXB4Ii8+PC9saT4KKyAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vd3d3LnB5dGhvbi5vcmcvIj5QeXRob248L2E+ICZyYXF1bzs8L2xpPgorICAgICAgICA8bGk+CisgICAgICAgICAgPGEgaHJlZj0iLi4vaW5kZXguaHRtbCI+My40LjMgRG9jdW1lbnRhdGlvbjwvYT4gJnJhcXVvOworICAgICAgICA8L2xpPgorCisgICAgICAgICAgPGxpPjxhIGhyZWY9ImluZGV4Lmh0bWwiID5UaGUgUHl0aG9uIFN0YW5kYXJkIExpYnJhcnk8L2E+ICZyYXF1bzs8L2xpPgorICAgICAgICAgIDxsaT48YSBocmVmPSJ0ay5odG1sIiA+MjUuIEdyYXBoaWNhbCBVc2VyIEludGVyZmFjZXMgd2l0aCBUazwvYT4gJnJhcXVvOzwvbGk+CisgICAgICA8L3VsPgorICAgIDwvZGl2PgorICAgIDxkaXYgY2xhc3M9ImZvb3RlciI+CisgICAgJmNvcHk7IDxhIGhyZWY9Ii4uL2NvcHlyaWdodC5odG1sIj5Db3B5cmlnaHQ8L2E+IDE5OTAtMjAxNSwgUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgICAgPGJyIC8+CisgICAgVGhlIFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uIGlzIGEgbm9uLXByb2ZpdCBjb3Jwb3JhdGlvbi4KKyAgICA8YSBocmVmPSJodHRwczovL3d3dy5weXRob24ub3JnL3BzZi9kb25hdGlvbnMvIj5QbGVhc2UgZG9uYXRlLjwvYT4KKyAgICA8YnIgLz4KKyAgICBMYXN0IHVwZGF0ZWQgb24gT2N0IDEzLCAyMDE1LgorICAgIDxhIGhyZWY9Ii4uL2J1Z3MuaHRtbCI+Rm91bmQgYSBidWc8L2E+PworICAgIDxiciAvPgorICAgIENyZWF0ZWQgdXNpbmcgPGEgaHJlZj0iaHR0cDovL3NwaGlueC5wb2Nvby5vcmcvIj5TcGhpbng8L2E+IDEuMi4zLgorICAgIDwvZGl2PgorCisgIDwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL2hlbHAucHkgYi9MaWIvaWRsZWxpYi9oZWxwLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzMTU5NmMKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvaWRsZWxpYi9oZWxwLnB5CkBAIC0wLDAgKzEsMjQ5IEBACisiIiIgaGVscC5weTogSW1wbGVtZW50IHRoZSBJZGxlIGhlbHAgbWVudS4KK0NvbnRlbnRzIGFyZSBzdWJqZWN0IHRvIHJldmlzaW9uIGF0IGFueSB0aW1lLCB3aXRob3V0IG5vdGljZS4KKworCitIZWxwID0+IEFib3V0IElETEU6IGRpcGxheSBBYm91dCBJZGxlIGRpYWxvZworCis8dG8gYmUgbW92ZWQgaGVyZSBmcm9tIGFib3V0RGlhbG9nLnB5PgorCisKK0hlbHAgPT4gSURMRSBIZWxwOiBEaXNwbGF5IGhlbHAuaHRtbCB3aXRoIHByb3BlciBmb3JtYXR0aW5nLgorRG9jL2xpYnJhcnkvaWRsZS5yc3QgKFNwaGlueCk9PiBEb2MvYnVpbGQvaHRtbC9saWJyYXJ5L2lkbGUuaHRtbAorKGhlbHAuY29weV9zdHJpcCk9PiBMaWIvaWRsZWxpYi9oZWxwLmh0bWwKKworSGVscFBhcnNlciAtIFBhcnNlIGhlbHAuaHRtbCBhbmQgYW5kIHJlbmRlciB0byB0ayBUZXh0LgorCitIZWxwVGV4dCAtIERpc3BsYXkgZm9ybWF0dGVkIGhlbHAuaHRtbC4KKworSGVscEZyYW1lIC0gQ29udGFpbiB0ZXh0LCBzY3JvbGxiYXIsIGFuZCB0YWJsZS1vZi1jb250ZW50cy4KKyhUaGlzIHdpbGwgYmUgbmVlZGVkIGZvciBkaXNwbGF5IGluIGEgZnV0dXJlIHRhYmJlZCB3aW5kb3cuKQorCitIZWxwV2luZG93IC0gRGlzcGxheSBIZWxwRnJhbWUgaW4gYSBzdGFuZGFsb25lIHdpbmRvdy4KKworY29weV9zdHJpcCAtIENvcHkgaWRsZS5odG1sIHRvIGhlbHAuaHRtbCwgcnN0cmlwcGluZyBlYWNoIGxpbmUuCisKK3Nob3dfaWRsZWhlbHAgLSBDcmVhdGUgSGVscFdpbmRvdy4gIENhbGxlZCBpbiBFZGl0b3JXaW5kb3cuaGVscF9kaWFsb2cuCisiIiIKK2Zyb20gaHRtbC5wYXJzZXIgaW1wb3J0IEhUTUxQYXJzZXIKK2Zyb20gb3MucGF0aCBpbXBvcnQgYWJzcGF0aCwgZGlybmFtZSwgaXNkaXIsIGlzZmlsZSwgam9pbgorZnJvbSB0a2ludGVyIGltcG9ydCBUaywgVG9wbGV2ZWwsIEZyYW1lLCBUZXh0LCBTY3JvbGxiYXIsIE1lbnUsIE1lbnVidXR0b24KK2Zyb20gdGtpbnRlciBpbXBvcnQgZm9udCBhcyB0a2ZvbnQKK2Zyb20gaWRsZWxpYi5jb25maWdIYW5kbGVyIGltcG9ydCBpZGxlQ29uZgorCit1c2VfdHRrID0gRmFsc2UgIyB1bnRpbCBhdmFpbGFibGUgdG8gaW1wb3J0CitpZiB1c2VfdHRrOgorICAgIGZyb20gdGtpbnRlci50dGsgaW1wb3J0IE1lbnVidXR0b24KKworIyMgQWJvdXQgSURMRSAjIworCisKKyMjIElETEUgSGVscCAjIworCitjbGFzcyBIZWxwUGFyc2VyKEhUTUxQYXJzZXIpOgorICAgICIiIlJlbmRlciBoZWxwLmh0bWwgaW50byBhIHRleHQgd2lkZ2V0LgorCisgICAgVGhlIG92ZXJyaWRkZW4gaGFuZGxlX3h5eiBtZXRob2RzIGhhbmRsZSBhIHN1YnNldCBvZiBodG1sIHRhZ3MuCisgICAgVGhlIHN1cHBsaWVkIHRleHQgc2hvdWxkIGhhdmUgdGhlIG5lZWRlZCB0YWcgY29uZmlndXJhdGlvbnMuCisgICAgVGhlIGJlaGF2aW9yIGZvciB1bnN1cHBvcnRlZCB0YWdzLCBzdWNoIGFzIHRhYmxlLCBpcyB1bmRlZmluZWQuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRleHQpOgorICAgICAgICBIVE1MUGFyc2VyLl9faW5pdF9fKHNlbGYsIGNvbnZlcnRfY2hhcnJlZnM9VHJ1ZSkKKyAgICAgICAgc2VsZi50ZXh0ID0gdGV4dCAgICAgICAgICMgdGV4dCB3aWRnZXQgd2UncmUgcmVuZGVyaW5nIGludG8KKyAgICAgICAgc2VsZi50YWdzID0gJycgICAgICAgICAgICMgY3VycmVudCBibG9jayBsZXZlbCB0ZXh0IHRhZ3MgdG8gYXBwbHkKKyAgICAgICAgc2VsZi5jaGFydGFncyA9ICcnICAgICAgICMgY3VycmVudCBjaGFyYWN0ZXIgbGV2ZWwgdGV4dCB0YWdzCisgICAgICAgIHNlbGYuc2hvdyA9IEZhbHNlICAgICAgICAjIHVzZWQgc28gd2UgZXhjbHVkZSBwYWdlIG5hdmlnYXRpb24KKyAgICAgICAgc2VsZi5oZHJsaW5rID0gRmFsc2UgICAgICMgdXNlZCBzbyB3ZSBkb24ndCBzaG93IGhlYWRlciBsaW5rcworICAgICAgICBzZWxmLmxldmVsID0gMCAgICAgICAgICAgIyBpbmRlbnRhdGlvbiBsZXZlbAorICAgICAgICBzZWxmLnByZSA9IEZhbHNlICAgICAgICAgIyBkaXNwbGF5aW5nIHByZWZvcm1hdHRlZCB0ZXh0CisgICAgICAgIHNlbGYuaHByZWZpeCA9ICcnICAgICAgICAjIHByZWZpeCBzdWNoIGFzICcyNS41JyB0byBzdHJpcCBmcm9tIGhlYWRpbmdzCisgICAgICAgIHNlbGYubmVzdGVkX2RsID0gRmFsc2UgICAjIGlmIHdlJ3JlIGluIGEgbmVzdGVkIDxkbD4KKyAgICAgICAgc2VsZi5zaW1wbGVsaXN0ID0gRmFsc2UgICMgc2ltcGxlIGxpc3QgKG5vIGRvdWJsZSBzcGFjaW5nKQorICAgICAgICBzZWxmLnRvYyA9IFtdICAgICAgICAgICAgIyBwYWlyIGhlYWRlcnMgd2l0aCB0ZXh0IGluZGV4ZXMgZm9yIHRvYworICAgICAgICBzZWxmLmhlYWRlciA9ICcnICAgICAgICAgIyB0ZXh0IHdpdGhpbiBoZWFkZXIgdGFncyBmb3IgdG9jCisKKyAgICBkZWYgaW5kZW50KHNlbGYsIGFtdD0xKToKKyAgICAgICAgc2VsZi5sZXZlbCArPSBhbXQKKyAgICAgICAgc2VsZi50YWdzID0gJycgaWYgc2VsZi5sZXZlbCA9PSAwIGVsc2UgJ2wnK3N0cihzZWxmLmxldmVsKQorCisgICAgZGVmIGhhbmRsZV9zdGFydHRhZyhzZWxmLCB0YWcsIGF0dHJzKToKKyAgICAgICAgIkhhbmRsZSBzdGFydHRhZ3MgaW4gaGVscC5odG1sLiIKKyAgICAgICAgY2xhc3NfID0gJycKKyAgICAgICAgZm9yIGEsIHYgaW4gYXR0cnM6CisgICAgICAgICAgICBpZiBhID09ICdjbGFzcyc6CisgICAgICAgICAgICAgICAgY2xhc3NfID0gdgorICAgICAgICBzID0gJycKKyAgICAgICAgaWYgdGFnID09ICdkaXYnIGFuZCBjbGFzc18gPT0gJ3NlY3Rpb24nOgorICAgICAgICAgICAgc2VsZi5zaG93ID0gVHJ1ZSAgICAjIHN0YXJ0IG9mIG1haW4gY29udGVudAorICAgICAgICBlbGlmIHRhZyA9PSAnZGl2JyBhbmQgY2xhc3NfID09ICdzcGhpbnhzaWRlYmFyJzoKKyAgICAgICAgICAgIHNlbGYuc2hvdyA9IEZhbHNlICAgIyBlbmQgb2YgbWFpbiBjb250ZW50CisgICAgICAgIGVsaWYgdGFnID09ICdwJyBhbmQgY2xhc3NfICE9ICdmaXJzdCc6CisgICAgICAgICAgICBzID0gJ1xuXG4nCisgICAgICAgIGVsaWYgdGFnID09ICdzcGFuJyBhbmQgY2xhc3NfID09ICdwcmUnOgorICAgICAgICAgICAgc2VsZi5jaGFydGFncyA9ICdwcmUnCisgICAgICAgIGVsaWYgdGFnID09ICdzcGFuJyBhbmQgY2xhc3NfID09ICd2ZXJzaW9ubW9kaWZpZWQnOgorICAgICAgICAgICAgc2VsZi5jaGFydGFncyA9ICdlbScKKyAgICAgICAgZWxpZiB0YWcgPT0gJ2VtJzoKKyAgICAgICAgICAgIHNlbGYuY2hhcnRhZ3MgPSAnZW0nCisgICAgICAgIGVsaWYgdGFnIGluIFsndWwnLCAnb2wnXToKKyAgICAgICAgICAgIGlmIGNsYXNzXy5maW5kKCdzaW1wbGUnKSAhPSAtMToKKyAgICAgICAgICAgICAgICBzID0gJ1xuJworICAgICAgICAgICAgICAgIHNlbGYuc2ltcGxlbGlzdCA9IFRydWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5zaW1wbGVsaXN0ID0gRmFsc2UKKyAgICAgICAgICAgIHNlbGYuaW5kZW50KCkKKyAgICAgICAgZWxpZiB0YWcgPT0gJ2RsJzoKKyAgICAgICAgICAgIGlmIHNlbGYubGV2ZWwgPiAwOgorICAgICAgICAgICAgICAgIHNlbGYubmVzdGVkX2RsID0gVHJ1ZQorICAgICAgICBlbGlmIHRhZyA9PSAnbGknOgorICAgICAgICAgICAgcyA9ICdcbiogJyBpZiBzZWxmLnNpbXBsZWxpc3QgZWxzZSAnXG5cbiogJworICAgICAgICBlbGlmIHRhZyA9PSAnZHQnOgorICAgICAgICAgICAgcyA9ICdcblxuJyBpZiBub3Qgc2VsZi5uZXN0ZWRfZGwgZWxzZSAnXG4nICAjIGF2b2lkIGV4dHJhIGxpbmUKKyAgICAgICAgICAgIHNlbGYubmVzdGVkX2RsID0gRmFsc2UKKyAgICAgICAgZWxpZiB0YWcgPT0gJ2RkJzoKKyAgICAgICAgICAgIHNlbGYuaW5kZW50KCkKKyAgICAgICAgICAgIHMgPSAnXG4nCisgICAgICAgIGVsaWYgdGFnID09ICdwcmUnOgorICAgICAgICAgICAgc2VsZi5wcmUgPSBUcnVlCisgICAgICAgICAgICBpZiBzZWxmLnNob3c6CisgICAgICAgICAgICAgICAgc2VsZi50ZXh0Lmluc2VydCgnZW5kJywgJ1xuXG4nKQorICAgICAgICAgICAgc2VsZi50YWdzID0gJ3ByZWJsb2NrJworICAgICAgICBlbGlmIHRhZyA9PSAnYScgYW5kIGNsYXNzXyA9PSAnaGVhZGVybGluayc6CisgICAgICAgICAgICBzZWxmLmhkcmxpbmsgPSBUcnVlCisgICAgICAgIGVsaWYgdGFnID09ICdoMSc6CisgICAgICAgICAgICBzZWxmLnRhZ3MgPSB0YWcKKyAgICAgICAgZWxpZiB0YWcgaW4gWydoMicsICdoMyddOgorICAgICAgICAgICAgaWYgc2VsZi5zaG93OgorICAgICAgICAgICAgICAgIHNlbGYuaGVhZGVyID0gJycKKyAgICAgICAgICAgICAgICBzZWxmLnRleHQuaW5zZXJ0KCdlbmQnLCAnXG5cbicpCisgICAgICAgICAgICBzZWxmLnRhZ3MgPSB0YWcKKyAgICAgICAgaWYgc2VsZi5zaG93OgorICAgICAgICAgICAgc2VsZi50ZXh0Lmluc2VydCgnZW5kJywgcywgKHNlbGYudGFncywgc2VsZi5jaGFydGFncykpCisKKyAgICBkZWYgaGFuZGxlX2VuZHRhZyhzZWxmLCB0YWcpOgorICAgICAgICAiSGFuZGxlIGVuZHRhZ3MgaW4gaGVscC5odG1sLiIKKyAgICAgICAgaWYgdGFnIGluIFsnaDEnLCAnaDInLCAnaDMnXToKKyAgICAgICAgICAgIHNlbGYuaW5kZW50KDApICAjIGNsZWFyIHRhZywgcmVzZXQgaW5kZW50CisgICAgICAgICAgICBpZiBzZWxmLnNob3c6CisgICAgICAgICAgICAgICAgc2VsZi50b2MuYXBwZW5kKChzZWxmLmhlYWRlciwgc2VsZi50ZXh0LmluZGV4KCdpbnNlcnQnKSkpCisgICAgICAgIGVsaWYgdGFnIGluIFsnc3BhbicsICdlbSddOgorICAgICAgICAgICAgc2VsZi5jaGFydGFncyA9ICcnCisgICAgICAgIGVsaWYgdGFnID09ICdhJzoKKyAgICAgICAgICAgIHNlbGYuaGRybGluayA9IEZhbHNlCisgICAgICAgIGVsaWYgdGFnID09ICdwcmUnOgorICAgICAgICAgICAgc2VsZi5wcmUgPSBGYWxzZQorICAgICAgICAgICAgc2VsZi50YWdzID0gJycKKyAgICAgICAgZWxpZiB0YWcgaW4gWyd1bCcsICdkZCcsICdvbCddOgorICAgICAgICAgICAgc2VsZi5pbmRlbnQoYW10PS0xKQorCisgICAgZGVmIGhhbmRsZV9kYXRhKHNlbGYsIGRhdGEpOgorICAgICAgICAiSGFuZGxlIGRhdGUgc2VnbWVudHMgaW4gaGVscC5odG1sLiIKKyAgICAgICAgaWYgc2VsZi5zaG93IGFuZCBub3Qgc2VsZi5oZHJsaW5rOgorICAgICAgICAgICAgZCA9IGRhdGEgaWYgc2VsZi5wcmUgZWxzZSBkYXRhLnJlcGxhY2UoJ1xuJywgJyAnKQorICAgICAgICAgICAgaWYgc2VsZi50YWdzID09ICdoMSc6CisgICAgICAgICAgICAgICAgc2VsZi5ocHJlZml4ID0gZFswOmQuaW5kZXgoJyAnKV0KKyAgICAgICAgICAgIGlmIHNlbGYudGFncyBpbiBbJ2gxJywgJ2gyJywgJ2gzJ10gYW5kIHNlbGYuaHByZWZpeCAhPSAnJzoKKyAgICAgICAgICAgICAgICBpZiBkWzA6bGVuKHNlbGYuaHByZWZpeCldID09IHNlbGYuaHByZWZpeDoKKyAgICAgICAgICAgICAgICAgICAgZCA9IGRbbGVuKHNlbGYuaHByZWZpeCk6XS5zdHJpcCgpCisgICAgICAgICAgICAgICAgc2VsZi5oZWFkZXIgKz0gZAorICAgICAgICAgICAgc2VsZi50ZXh0Lmluc2VydCgnZW5kJywgZCwgKHNlbGYudGFncywgc2VsZi5jaGFydGFncykpCisKKworY2xhc3MgSGVscFRleHQoVGV4dCk6CisgICAgIkRpc3BsYXkgaGVscC5odG1sLiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcGFyZW50LCBmaWxlbmFtZSk6CisgICAgICAgICJDb25maWd1cmUgdGFncyBhbmQgZmVlZCBmaWxlIHRvIHBhcnNlci4iCisgICAgICAgIHV3aWRlID0gaWRsZUNvbmYuR2V0T3B0aW9uKCdtYWluJywgJ0VkaXRvcldpbmRvdycsICd3aWR0aCcsIHR5cGU9J2ludCcpCisgICAgICAgIHVoaWdoID0gaWRsZUNvbmYuR2V0T3B0aW9uKCdtYWluJywgJ0VkaXRvcldpbmRvdycsICdoZWlnaHQnLCB0eXBlPSdpbnQnKQorICAgICAgICB1aGlnaCA9IDMgKiB1aGlnaCAvLyA0ICAjIGxpbmVzIGF2ZXJhZ2UgNC8zIG9mIGVkaXRvciBsaW5lIGhlaWdodAorICAgICAgICBUZXh0Ll9faW5pdF9fKHNlbGYsIHBhcmVudCwgd3JhcD0nd29yZCcsIGhpZ2hsaWdodHRoaWNrbmVzcz0wLAorICAgICAgICAgICAgICAgICAgICAgIHBhZHg9NSwgYm9yZGVyd2lkdGg9MCwgd2lkdGg9dXdpZGUsIGhlaWdodD11aGlnaCkKKworICAgICAgICBub3JtYWxmb250ID0gc2VsZi5maW5kZm9udChbJ1RrRGVmYXVsdEZvbnQnLCAnYXJpYWwnLCAnaGVsdmV0aWNhJ10pCisgICAgICAgIGZpeGVkZm9udCA9IHNlbGYuZmluZGZvbnQoWydUa0ZpeGVkRm9udCcsICdtb25hY28nLCAnY291cmllciddKQorICAgICAgICBzZWxmWydmb250J10gPSAobm9ybWFsZm9udCwgMTIpCisgICAgICAgIHNlbGYudGFnX2NvbmZpZ3VyZSgnZW0nLCBmb250PShub3JtYWxmb250LCAxMiwgJ2l0YWxpYycpKQorICAgICAgICBzZWxmLnRhZ19jb25maWd1cmUoJ2gxJywgZm9udD0obm9ybWFsZm9udCwgMjAsICdib2xkJykpCisgICAgICAgIHNlbGYudGFnX2NvbmZpZ3VyZSgnaDInLCBmb250PShub3JtYWxmb250LCAxOCwgJ2JvbGQnKSkKKyAgICAgICAgc2VsZi50YWdfY29uZmlndXJlKCdoMycsIGZvbnQ9KG5vcm1hbGZvbnQsIDE1LCAnYm9sZCcpKQorICAgICAgICBzZWxmLnRhZ19jb25maWd1cmUoJ3ByZScsIGZvbnQ9KGZpeGVkZm9udCwgMTIpLCBiYWNrZ3JvdW5kPScjZjZmNmZmJykKKyAgICAgICAgc2VsZi50YWdfY29uZmlndXJlKCdwcmVibG9jaycsIGZvbnQ9KGZpeGVkZm9udCwgMTApLCBsbWFyZ2luMT0yNSwKKyAgICAgICAgICAgICAgICBib3JkZXJ3aWR0aD0xLCByZWxpZWY9J3NvbGlkJywgYmFja2dyb3VuZD0nI2VlZmZjYycpCisgICAgICAgIHNlbGYudGFnX2NvbmZpZ3VyZSgnbDEnLCBsbWFyZ2luMT0yNSwgbG1hcmdpbjI9MjUpCisgICAgICAgIHNlbGYudGFnX2NvbmZpZ3VyZSgnbDInLCBsbWFyZ2luMT01MCwgbG1hcmdpbjI9NTApCisgICAgICAgIHNlbGYudGFnX2NvbmZpZ3VyZSgnbDMnLCBsbWFyZ2luMT03NSwgbG1hcmdpbjI9NzUpCisgICAgICAgIHNlbGYudGFnX2NvbmZpZ3VyZSgnbDQnLCBsbWFyZ2luMT0xMDAsIGxtYXJnaW4yPTEwMCkKKworICAgICAgICBzZWxmLnBhcnNlciA9IEhlbHBQYXJzZXIoc2VsZikKKyAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCBlbmNvZGluZz0ndXRmLTgnKSBhcyBmOgorICAgICAgICAgICAgY29udGVudHMgPSBmLnJlYWQoKQorICAgICAgICBzZWxmLnBhcnNlci5mZWVkKGNvbnRlbnRzKQorICAgICAgICBzZWxmWydzdGF0ZSddID0gJ2Rpc2FibGVkJworCisgICAgZGVmIGZpbmRmb250KHNlbGYsIG5hbWVzKToKKyAgICAgICAgIlJldHVybiBuYW1lIG9mIGZpcnN0IGZvbnQgZmFtaWx5IGRlcml2ZWQgZnJvbSBuYW1lcy4iCisgICAgICAgIGZvciBuYW1lIGluIG5hbWVzOgorICAgICAgICAgICAgaWYgbmFtZS5sb3dlcigpIGluICh4Lmxvd2VyKCkgZm9yIHggaW4gdGtmb250Lm5hbWVzKHJvb3Q9c2VsZikpOgorICAgICAgICAgICAgICAgIGZvbnQgPSB0a2ZvbnQuRm9udChuYW1lPW5hbWUsIGV4aXN0cz1UcnVlLCByb290PXNlbGYpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZvbnQuYWN0dWFsKClbJ2ZhbWlseSddCisgICAgICAgICAgICBlbGlmIG5hbWUubG93ZXIoKSBpbiAoeC5sb3dlcigpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHggaW4gdGtmb250LmZhbWlsaWVzKHJvb3Q9c2VsZikpOgorICAgICAgICAgICAgICAgIHJldHVybiBuYW1lCisKKworY2xhc3MgSGVscEZyYW1lKEZyYW1lKToKKyAgICAiRGlzcGxheSBodG1sIHRleHQsIHNjcm9sbGJhciwgYW5kIHRvYy4iCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhcmVudCwgZmlsZW5hbWUpOgorICAgICAgICBGcmFtZS5fX2luaXRfXyhzZWxmLCBwYXJlbnQpCisgICAgICAgIHRleHQgPSBIZWxwVGV4dChzZWxmLCBmaWxlbmFtZSkKKyAgICAgICAgc2VsZlsnYmFja2dyb3VuZCddID0gdGV4dFsnYmFja2dyb3VuZCddCisgICAgICAgIHNjcm9sbCA9IFNjcm9sbGJhcihzZWxmLCBjb21tYW5kPXRleHQueXZpZXcpCisgICAgICAgIHRleHRbJ3lzY3JvbGxjb21tYW5kJ10gPSBzY3JvbGwuc2V0CisgICAgICAgIHNlbGYucm93Y29uZmlndXJlKDAsIHdlaWdodD0xKQorICAgICAgICBzZWxmLmNvbHVtbmNvbmZpZ3VyZSgxLCB3ZWlnaHQ9MSkgICMgdGV4dAorICAgICAgICBzZWxmLnRvY19tZW51KHRleHQpLmdyaWQoY29sdW1uPTAsIHJvdz0wLCBzdGlja3k9J253JykKKyAgICAgICAgdGV4dC5ncmlkKGNvbHVtbj0xLCByb3c9MCwgc3RpY2t5PSduc2V3JykKKyAgICAgICAgc2Nyb2xsLmdyaWQoY29sdW1uPTIsIHJvdz0wLCBzdGlja3k9J25zJykKKworICAgIGRlZiB0b2NfbWVudShzZWxmLCB0ZXh0KToKKyAgICAgICAgIkNyZWF0ZSB0YWJsZSBvZiBjb250ZW50cyBhcyBkcm9wLWRvd24gbWVudS4iCisgICAgICAgIHRvYyA9IE1lbnVidXR0b24oc2VsZiwgdGV4dD0nVE9DJykKKyAgICAgICAgZHJvcCA9IE1lbnUodG9jLCB0ZWFyb2ZmPUZhbHNlKQorICAgICAgICBmb3IgbGJsLCBkZXggaW4gdGV4dC5wYXJzZXIudG9jOgorICAgICAgICAgICAgZHJvcC5hZGRfY29tbWFuZChsYWJlbD1sYmwsIGNvbW1hbmQ9bGFtYmRhIGRleD1kZXg6dGV4dC55dmlldyhkZXgpKQorICAgICAgICB0b2NbJ21lbnUnXSA9IGRyb3AKKyAgICAgICAgcmV0dXJuIHRvYworCisKK2NsYXNzIEhlbHBXaW5kb3coVG9wbGV2ZWwpOgorICAgICJEaXNwbGF5IGZyYW1lIHdpdGggcmVuZGVyZWQgaHRtbC4iCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhcmVudCwgZmlsZW5hbWUsIHRpdGxlKToKKyAgICAgICAgVG9wbGV2ZWwuX19pbml0X18oc2VsZiwgcGFyZW50KQorICAgICAgICBzZWxmLndtX3RpdGxlKHRpdGxlKQorICAgICAgICBzZWxmLnByb3RvY29sKCJXTV9ERUxFVEVfV0lORE9XIiwgc2VsZi5kZXN0cm95KQorICAgICAgICBIZWxwRnJhbWUoc2VsZiwgZmlsZW5hbWUpLmdyaWQoY29sdW1uPTAsIHJvdz0wLCBzdGlja3k9J25zZXcnKQorICAgICAgICBzZWxmLmdyaWRfY29sdW1uY29uZmlndXJlKDAsIHdlaWdodD0xKQorICAgICAgICBzZWxmLmdyaWRfcm93Y29uZmlndXJlKDAsIHdlaWdodD0xKQorCisKK2RlZiBjb3B5X3N0cmlwKCk6CisgICAgIkNvcHkgaWRsZS5odG1sIHRvIGlkbGVsaWIvaGVscC5odG1sLCBzdHJpcHBpbmcgdHJhaWxpbmcgd2hpdGVzcGFjZS4iCisgICAgc3JjID0gam9pbihhYnNwYXRoKGRpcm5hbWUoZGlybmFtZShkaXJuYW1lKF9fZmlsZV9fKSkpKSwKKyAgICAgICAgICAgICAgICdEb2MnLCAnYnVpbGQnLCAnaHRtbCcsICdsaWJyYXJ5JywgJ2lkbGUuaHRtbCcpCisgICAgZHN0ID0gam9pbihhYnNwYXRoKGRpcm5hbWUoX19maWxlX18pKSwgJ2hlbHAuaHRtbCcpCisgICAgd2l0aCBvcGVuKHNyYywgJ3JiJykgYXMgaW5uLFwKKyAgICAgICAgIG9wZW4oZHN0LCAnd2InKSBhcyBvdXQ6CisgICAgICAgIGZvciBsaW5lIGluIGlubjoKKyAgICAgICAgICAgIG91dC53cml0ZShsaW5lLnJzdHJpcCgpICsgYidcbicpCisgICAgcHJpbnQoJ2lkbGUuaHRtbCBjb3BpZWQgdG8gaGVscC5odG1sJykKKworZGVmIHNob3dfaWRsZWhlbHAocGFyZW50KToKKyAgICAiQ3JlYXRlIEhlbHBXaW5kb3c7IGNhbGxlZCBmcm9tIElkbGUgSGVscCBldmVudCBoYW5kbGVyLiIKKyAgICBmaWxlbmFtZSA9IGpvaW4oYWJzcGF0aChkaXJuYW1lKF9fZmlsZV9fKSksICdoZWxwLmh0bWwnKQorICAgIGlmIG5vdCBpc2ZpbGUoZmlsZW5hbWUpOgorICAgICAgICAjIHRyeSBjb3B5X3N0cmlwLCBwcmVzZW50IG1lc3NhZ2UKKyAgICAgICAgcmV0dXJuCisgICAgSGVscFdpbmRvdyhwYXJlbnQsIGZpbGVuYW1lLCAnSURMRSBIZWxwJykKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBmcm9tIGlkbGVsaWIuaWRsZV90ZXN0Lmh0ZXN0IGltcG9ydCBydW4KKyAgICBydW4oc2hvd19pZGxlaGVscCkKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL2hlbHAudHh0IGIvTGliL2lkbGVsaWIvaGVscC50eHQKaW5kZXggZmY3ODZjNS4uODlmYmUwYiAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvaGVscC50eHQKKysrIGIvTGliL2lkbGVsaWIvaGVscC50eHQKQEAgLTEsMTQyICsxLDE4OSBAQAorVGhpcyBmaWxlLCBpZGxlbGliL2hlbHAudHh0IGlzIG91dC1vZi1kYXRlIGFuZCBubyBsb25nZXIgdXNlZCBieSBJZGxlLgorSXQgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUsIHBvc3NpYmx5IGluIDMuNgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCiBbU2VlIHRoZSBlbmQgb2YgdGhpcyBmaWxlIGZvciAqKiBUSVBTICoqIG9uIHVzaW5nIElETEUgISFdCiAKLUNsaWNrIG9uIHRoZSBkb3R0ZWQgbGluZSBhdCB0aGUgdG9wIG9mIGEgbWVudSB0byAidGVhciBpdCBvZmYiOiBhCi1zZXBhcmF0ZSB3aW5kb3cgY29udGFpbmluZyB0aGUgbWVudSBpcyBjcmVhdGVkLgorSURMRSBpcyB0aGUgUHl0aG9uIElERSBidWlsdCB3aXRoIHRoZSB0a2ludGVyIEdVSSB0b29sa2l0LgogCi1GaWxlIE1lbnU6CitJRExFIGhhcyB0aGUgZm9sbG93aW5nIGZlYXR1cmVzOgorLWNvZGVkIGluIDEwMCUgcHVyZSBQeXRob24sIHVzaW5nIHRoZSB0a2ludGVyIEdVSSB0b29sa2l0CistY3Jvc3MtcGxhdGZvcm06IHdvcmtzIG9uIFdpbmRvd3MsIFVuaXgsIGFuZCBPUyBYCistbXVsdGktd2luZG93IHRleHQgZWRpdG9yIHdpdGggbXVsdGlwbGUgdW5kbywgUHl0aG9uIGNvbG9yaXppbmcsIHNtYXJ0IGluZGVudCwKK2NhbGwgdGlwcywgYW5kIG1hbnkgb3RoZXIgZmVhdHVyZXMKKy1QeXRob24gc2hlbGwgd2luZG93IChhLmsuYSBpbnRlcmFjdGl2ZSBpbnRlcnByZXRlcikKKy1kZWJ1Z2dlciAobm90IGNvbXBsZXRlLCBidXQgeW91IGNhbiBzZXQgYnJlYWtwb2ludHMsIHZpZXcgYW5kIHN0ZXApCiAKLQlOZXcgRmlsZSAgICAgICAgIC0tIENyZWF0ZSBhIG5ldyBmaWxlIGVkaXRpbmcgd2luZG93Ci0JT3Blbi4uLiAgICAgICAgICAtLSBPcGVuIGFuIGV4aXN0aW5nIGZpbGUKLQlSZWNlbnQgRmlsZXMuLi4gIC0tIE9wZW4gYSBsaXN0IG9mIHJlY2VudCBmaWxlcwotCU9wZW4gTW9kdWxlLi4uICAgLS0gT3BlbiBhbiBleGlzdGluZyBtb2R1bGUgKHNlYXJjaGVzIHN5cy5wYXRoKQotCUNsYXNzIEJyb3dzZXIgICAgLS0gU2hvdyBjbGFzc2VzIGFuZCBtZXRob2RzIGluIGN1cnJlbnQgZmlsZQotCVBhdGggQnJvd3NlciAgICAgLS0gU2hvdyBzeXMucGF0aCBkaXJlY3RvcmllcywgbW9kdWxlcywgY2xhc3NlcworTWVudXM6CisKK0lETEUgaGFzIHR3byB3aW5kb3cgdHlwZXMgdGhlIFNoZWxsIHdpbmRvdyBhbmQgdGhlIEVkaXRvciB3aW5kb3cuIEl0IGlzCitwb3NzaWJsZSB0byBoYXZlIG11bHRpcGxlIGVkaXRvciB3aW5kb3dzIHNpbXVsdGFuZW91c2x5LiBJRExFJ3MKK21lbnVzIGR5bmFtaWNhbGx5IGNoYW5nZSBiYXNlZCBvbiB3aGljaCB3aW5kb3cgaXMgY3VycmVudGx5IHNlbGVjdGVkLiBFYWNoIG1lbnUKK2RvY3VtZW50ZWQgYmVsb3cgaW5kaWNhdGVzIHdoaWNoIHdpbmRvdyB0eXBlIGl0IGlzIGFzc29jaWF0ZWQgd2l0aC4gCisKK0ZpbGUgTWVudSAoU2hlbGwgYW5kIEVkaXRvcik6CisKKyAgICAgICAgTmV3IEZpbGUgICAgICAgICAtLSBDcmVhdGUgYSBuZXcgZmlsZSBlZGl0aW5nIHdpbmRvdworICAgICAgICBPcGVuLi4uICAgICAgICAgIC0tIE9wZW4gYW4gZXhpc3RpbmcgZmlsZQorICAgICAgICBPcGVuIE1vZHVsZS4uLiAgIC0tIE9wZW4gYW4gZXhpc3RpbmcgbW9kdWxlIChzZWFyY2hlcyBzeXMucGF0aCkKKyAgICAgICAgUmVjZW50IEZpbGVzLi4uICAtLSBPcGVuIGEgbGlzdCBvZiByZWNlbnQgZmlsZXMKKyAgICAgICAgQ2xhc3MgQnJvd3NlciAgICAtLSBTaG93IGNsYXNzZXMgYW5kIG1ldGhvZHMgaW4gY3VycmVudCBmaWxlCisgICAgICAgIFBhdGggQnJvd3NlciAgICAgLS0gU2hvdyBzeXMucGF0aCBkaXJlY3RvcmllcywgbW9kdWxlcywgY2xhc3NlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgbWV0aG9kcwotCS0tLQotCVNhdmUgICAgICAgICAgICAgLS0gU2F2ZSBjdXJyZW50IHdpbmRvdyB0byB0aGUgYXNzb2NpYXRlZCBmaWxlICh1bnNhdmVkCi0JCSAgICAgICAgICAgIHdpbmRvd3MgaGF2ZSBhICogYmVmb3JlIGFuZCBhZnRlciB0aGUgd2luZG93IHRpdGxlKQorICAgICAgICAtLS0KKyAgICAgICAgU2F2ZSAgICAgICAgICAgICAtLSBTYXZlIGN1cnJlbnQgd2luZG93IHRvIHRoZSBhc3NvY2lhdGVkIGZpbGUgKHVuc2F2ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3dzIGhhdmUgYSAqIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIHdpbmRvdyB0aXRsZSkKIAotCVNhdmUgQXMuLi4gICAgICAgLS0gU2F2ZSBjdXJyZW50IHdpbmRvdyB0byBuZXcgZmlsZSwgd2hpY2ggYmVjb21lcwotCQkgICAgICAgICAgICB0aGUgYXNzb2NpYXRlZCBmaWxlCi0JU2F2ZSBDb3B5IEFzLi4uICAtLSBTYXZlIGN1cnJlbnQgd2luZG93IHRvIGRpZmZlcmVudCBmaWxlCi0JCSAgICAgICAgICAgIHdpdGhvdXQgY2hhbmdpbmcgdGhlIGFzc29jaWF0ZWQgZmlsZQotCS0tLQotCVByaW50IFdpbmRvdyAgICAgLS0gUHJpbnQgdGhlIGN1cnJlbnQgd2luZG93Ci0JLS0tCi0JQ2xvc2UgICAgICAgICAgICAtLSBDbG9zZSBjdXJyZW50IHdpbmRvdyAoYXNrcyB0byBzYXZlIGlmIHVuc2F2ZWQpCi0JRXhpdCAgICAgICAgICAgICAtLSBDbG9zZSBhbGwgd2luZG93cywgcXVpdCAoYXNrcyB0byBzYXZlIGlmIHVuc2F2ZWQpCisgICAgICAgIFNhdmUgQXMuLi4gICAgICAgLS0gU2F2ZSBjdXJyZW50IHdpbmRvdyB0byBuZXcgZmlsZSwgd2hpY2ggYmVjb21lcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBhc3NvY2lhdGVkIGZpbGUKKyAgICAgICAgU2F2ZSBDb3B5IEFzLi4uICAtLSBTYXZlIGN1cnJlbnQgd2luZG93IHRvIGRpZmZlcmVudCBmaWxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aG91dCBjaGFuZ2luZyB0aGUgYXNzb2NpYXRlZCBmaWxlCisgICAgICAgIC0tLQorICAgICAgICBQcmludCBXaW5kb3cgICAgIC0tIFByaW50IHRoZSBjdXJyZW50IHdpbmRvdworICAgICAgICAtLS0KKyAgICAgICAgQ2xvc2UgICAgICAgICAgICAtLSBDbG9zZSBjdXJyZW50IHdpbmRvdyAoYXNrcyB0byBzYXZlIGlmIHVuc2F2ZWQpCisgICAgICAgIEV4aXQgICAgICAgICAgICAgLS0gQ2xvc2UgYWxsIHdpbmRvd3MsIHF1aXQgKGFza3MgdG8gc2F2ZSBpZiB1bnNhdmVkKQogCi1FZGl0IE1lbnU6CitFZGl0IE1lbnUgKFNoZWxsIGFuZCBFZGl0b3IpOgogCi0JVW5kbyAgICAgICAgICAgICAtLSBVbmRvIGxhc3QgY2hhbmdlIHRvIGN1cnJlbnQgd2luZG93Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKEEgbWF4aW11bSBvZiAxMDAwIGNoYW5nZXMgbWF5IGJlIHVuZG9uZSkKLQlSZWRvICAgICAgICAgICAgIC0tIFJlZG8gbGFzdCB1bmRvbmUgY2hhbmdlIHRvIGN1cnJlbnQgd2luZG93Ci0JLS0tCi0JQ3V0ICAgICAgICAgICAgICAtLSBDb3B5IGEgc2VsZWN0aW9uIGludG8gc3lzdGVtLXdpZGUgY2xpcGJvYXJkLAorICAgICAgICBVbmRvICAgICAgICAgICAgIC0tIFVuZG8gbGFzdCBjaGFuZ2UgdG8gY3VycmVudCB3aW5kb3cKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYSBtYXhpbXVtIG9mIDEwMDAgY2hhbmdlcyBtYXkgYmUgdW5kb25lKQorICAgICAgICBSZWRvICAgICAgICAgICAgIC0tIFJlZG8gbGFzdCB1bmRvbmUgY2hhbmdlIHRvIGN1cnJlbnQgd2luZG93CisgICAgICAgIC0tLQorICAgICAgICBDdXQgICAgICAgICAgICAgIC0tIENvcHkgYSBzZWxlY3Rpb24gaW50byBzeXN0ZW0td2lkZSBjbGlwYm9hcmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbiBkZWxldGUgdGhlIHNlbGVjdGlvbgotCUNvcHkgICAgICAgICAgICAgLS0gQ29weSBzZWxlY3Rpb24gaW50byBzeXN0ZW0td2lkZSBjbGlwYm9hcmQKLQlQYXN0ZSAgICAgICAgICAgIC0tIEluc2VydCBzeXN0ZW0td2lkZSBjbGlwYm9hcmQgaW50byB3aW5kb3cKLQlTZWxlY3QgQWxsICAgICAgIC0tIFNlbGVjdCB0aGUgZW50aXJlIGNvbnRlbnRzIG9mIHRoZSBlZGl0IGJ1ZmZlcgotCS0tLQotCUZpbmQuLi4gICAgICAgICAgLS0gT3BlbiBhIHNlYXJjaCBkaWFsb2cgYm94IHdpdGggbWFueSBvcHRpb25zCi0JRmluZCBBZ2FpbiAgICAgICAtLSBSZXBlYXQgbGFzdCBzZWFyY2gKLQlGaW5kIFNlbGVjdGlvbiAgIC0tIFNlYXJjaCBmb3IgdGhlIHN0cmluZyBpbiB0aGUgc2VsZWN0aW9uCi0JRmluZCBpbiBGaWxlcy4uLiAtLSBPcGVuIGEgc2VhcmNoIGRpYWxvZyBib3ggZm9yIHNlYXJjaGluZyBmaWxlcwotCVJlcGxhY2UuLi4gICAgICAgLS0gT3BlbiBhIHNlYXJjaC1hbmQtcmVwbGFjZSBkaWFsb2cgYm94Ci0JR28gdG8gTGluZSAgICAgICAtLSBBc2sgZm9yIGEgbGluZSBudW1iZXIgYW5kIHNob3cgdGhhdCBsaW5lCi0JU2hvdyBDYWxsdGlwICAgICAtLSBPcGVuIGEgc21hbGwgd2luZG93IHdpdGggZnVuY3Rpb24gcGFyYW0gaGludHMKLQlTaG93IENvbXBsZXRpb25zIC0tIE9wZW4gYSBzY3JvbGwgd2luZG93IGFsbG93aW5nIHNlbGVjdGlvbiBrZXl3b3JkcwotCQkJICAgIGFuZCBhdHRyaWJ1dGVzLiAoc2VlICcqVElQUyonLCBiZWxvdykKLQlTaG93IFBhcmVucwkgLS0gSGlnaGxpZ2h0IHRoZSBzdXJyb3VuZGluZyBwYXJlbnRoZXNpcwotCUV4cGFuZCBXb3JkICAgICAgLS0gRXhwYW5kIHRoZSB3b3JkIHlvdSBoYXZlIHR5cGVkIHRvIG1hdGNoIGFub3RoZXIKLQkJICAgICAgICAgICAgd29yZCBpbiB0aGUgc2FtZSBidWZmZXI7IHJlcGVhdCB0byBnZXQgYQorICAgICAgICBDb3B5ICAgICAgICAgICAgIC0tIENvcHkgc2VsZWN0aW9uIGludG8gc3lzdGVtLXdpZGUgY2xpcGJvYXJkCisgICAgICAgIFBhc3RlICAgICAgICAgICAgLS0gSW5zZXJ0IHN5c3RlbS13aWRlIGNsaXBib2FyZCBpbnRvIHdpbmRvdworICAgICAgICBTZWxlY3QgQWxsICAgICAgIC0tIFNlbGVjdCB0aGUgZW50aXJlIGNvbnRlbnRzIG9mIHRoZSBlZGl0IGJ1ZmZlcgorICAgICAgICAtLS0KKyAgICAgICAgRmluZC4uLiAgICAgICAgICAtLSBPcGVuIGEgc2VhcmNoIGRpYWxvZyBib3ggd2l0aCBtYW55IG9wdGlvbnMKKyAgICAgICAgRmluZCBBZ2FpbiAgICAgICAtLSBSZXBlYXQgbGFzdCBzZWFyY2gKKyAgICAgICAgRmluZCBTZWxlY3Rpb24gICAtLSBTZWFyY2ggZm9yIHRoZSBzdHJpbmcgaW4gdGhlIHNlbGVjdGlvbgorICAgICAgICBGaW5kIGluIEZpbGVzLi4uIC0tIE9wZW4gYSBzZWFyY2ggZGlhbG9nIGJveCBmb3Igc2VhcmNoaW5nIGZpbGVzCisgICAgICAgIFJlcGxhY2UuLi4gICAgICAgLS0gT3BlbiBhIHNlYXJjaC1hbmQtcmVwbGFjZSBkaWFsb2cgYm94CisgICAgICAgIEdvIHRvIExpbmUgICAgICAgLS0gQXNrIGZvciBhIGxpbmUgbnVtYmVyIGFuZCBzaG93IHRoYXQgbGluZQorICAgICAgICBFeHBhbmQgV29yZCAgICAgIC0tIEV4cGFuZCB0aGUgd29yZCB5b3UgaGF2ZSB0eXBlZCB0byBtYXRjaCBhbm90aGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29yZCBpbiB0aGUgc2FtZSBidWZmZXI7IHJlcGVhdCB0byBnZXQgYQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZmZlcmVudCBleHBhbnNpb24KKyAgICAgICAgU2hvdyBDYWxsdGlwICAgICAtLSBBZnRlciBhbiB1bmNsb3NlZCBwYXJlbnRoZXNpcyBmb3IgYSBmdW5jdGlvbiwgb3BlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgc21hbGwgd2luZG93IHdpdGggZnVuY3Rpb24gcGFyYW1ldGVyIGhpbnRzCisgICAgICAgIFNob3cgUGFyZW5zICAgICAgLS0gSGlnaGxpZ2h0IHRoZSBzdXJyb3VuZGluZyBwYXJlbnRoZXNpcworICAgICAgICBTaG93IENvbXBsZXRpb25zIC0tIE9wZW4gYSBzY3JvbGwgd2luZG93IGFsbG93aW5nIHNlbGVjdGlvbiBrZXl3b3JkcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBhdHRyaWJ1dGVzLiAoc2VlICcqVElQUyonLCBiZWxvdykKIAotRm9ybWF0IE1lbnUgKG9ubHkgaW4gRWRpdCB3aW5kb3cpOgorRm9ybWF0IE1lbnUgKEVkaXRvciB3aW5kb3cgb25seSk6CiAKLQlJbmRlbnQgUmVnaW9uICAgICAgIC0tIFNoaWZ0IHNlbGVjdGVkIGxpbmVzIHJpZ2h0IDQgc3BhY2VzCi0JRGVkZW50IFJlZ2lvbiAgICAgICAtLSBTaGlmdCBzZWxlY3RlZCBsaW5lcyBsZWZ0IDQgc3BhY2VzCi0JQ29tbWVudCBPdXQgUmVnaW9uICAtLSBJbnNlcnQgIyMgaW4gZnJvbnQgb2Ygc2VsZWN0ZWQgbGluZXMKLQlVbmNvbW1lbnQgUmVnaW9uICAgIC0tIFJlbW92ZSBsZWFkaW5nICMgb3IgIyMgZnJvbSBzZWxlY3RlZCBsaW5lcwotCVRhYmlmeSBSZWdpb24gICAgICAgLS0gVHVybnMgKmxlYWRpbmcqIHN0cmV0Y2hlcyBvZiBzcGFjZXMgaW50byB0YWJzCi0JCShOb3RlOiBXZSByZWNvbW1lbmQgdXNpbmcgNCBzcGFjZSBibG9ja3MgdG8gaW5kZW50IFB5dGhvbiBjb2RlLikKLQlVbnRhYmlmeSBSZWdpb24gICAgIC0tIFR1cm4gKmFsbCogdGFicyBpbnRvIHRoZSByaWdodCBudW1iZXIgb2Ygc3BhY2VzCi0JTmV3IEluZGVudCBXaWR0aC4uLiAtLSBPcGVuIGRpYWxvZyB0byBjaGFuZ2UgaW5kZW50IHdpZHRoCi0JRm9ybWF0IFBhcmFncmFwaCAgICAtLSBSZWZvcm1hdCB0aGUgY3VycmVudCBibGFuay1saW5lLXNlcGFyYXRlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFncmFwaAorICAgICAgICBJbmRlbnQgUmVnaW9uICAgICAgIC0tIFNoaWZ0IHNlbGVjdGVkIGxpbmVzIHJpZ2h0IGJ5IHRoZSBpbmRlbnQgd2lkdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGVmYXVsdCA0IHNwYWNlcykKKyAgICAgICAgRGVkZW50IFJlZ2lvbiAgICAgICAtLSBTaGlmdCBzZWxlY3RlZCBsaW5lcyBsZWZ0IGJ5IHRoZSBpbmRlbnQgd2lkdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGVmYXVsdCA0IHNwYWNlcykKKyAgICAgICAgQ29tbWVudCBPdXQgUmVnaW9uICAtLSBJbnNlcnQgIyMgaW4gZnJvbnQgb2Ygc2VsZWN0ZWQgbGluZXMKKyAgICAgICAgVW5jb21tZW50IFJlZ2lvbiAgICAtLSBSZW1vdmUgbGVhZGluZyAjIG9yICMjIGZyb20gc2VsZWN0ZWQgbGluZXMKKyAgICAgICAgVGFiaWZ5IFJlZ2lvbiAgICAgICAtLSBUdXJucyAqbGVhZGluZyogc3RyZXRjaGVzIG9mIHNwYWNlcyBpbnRvIHRhYnMuCisgICAgICAgICAgICAgICAgKE5vdGU6IFdlIHJlY29tbWVuZCB1c2luZyA0IHNwYWNlIGJsb2NrcyB0byBpbmRlbnQgUHl0aG9uIGNvZGUuKQorICAgICAgICBVbnRhYmlmeSBSZWdpb24gICAgIC0tIFR1cm4gKmFsbCogdGFicyBpbnRvIHRoZSBjb3JyZW50IG51bWJlciBvZiBzcGFjZXMKKyAgICAgICAgVG9nZ2xlIHRhYnMgICAgICAgICAtLSBPcGVuIGEgZGlhbG9nIHRvIHN3aXRjaCBiZXR3ZWVuIGluZGVudGluZyB3aXRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BhY2VzIGFuZCB0YWJzLgorICAgICAgICBOZXcgSW5kZW50IFdpZHRoLi4uIC0tIE9wZW4gYSBkaWFsb2cgdG8gY2hhbmdlIGluZGVudCB3aWR0aC4gIFRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY2VwdGVkIGRlZmF1bHQgYnkgdGhlIFB5dGhvbiBjb21tdW5pdHkgaXMgNAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYWNlcy4KKyAgICAgICAgRm9ybWF0IFBhcmFncmFwaCAgICAtLSBSZWZvcm1hdCB0aGUgY3VycmVudCBibGFuay1saW5lLXNlcGFyYXRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFncmFwaC4gQWxsIGxpbmVzIGluIHRoZSBwYXJhZ3JhcGggd2lsbCBiZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlZCB0byBsZXNzIHRoYW4gODAgY29sdW1ucy4KKyAgICAgICAgLS0tCisgICAgICAgIFN0cmlwIHRyYWlsaW5nIHdoaXRlc3BhY2UgLS0gUmVtb3ZlZCBhbnkgc3BhY2UgY2hhcmFjdGVycyBhZnRlciB0aGUgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIGxhc3Qgbm9uLXNwYWNlIGNoYXJhY3RlcgogCi1SdW4gTWVudSAob25seSBpbiBFZGl0IHdpbmRvdyk6CitSdW4gTWVudSAoRWRpdG9yIHdpbmRvdyBvbmx5KToKIAotCVB5dGhvbiBTaGVsbCAtLSBPcGVuIG9yIHdha2UgdXAgdGhlIFB5dGhvbiBzaGVsbCB3aW5kb3cKLQktLS0KLQlDaGVjayBNb2R1bGUgLS0gUnVuIGEgc3ludGF4IGNoZWNrIG9uIHRoZSBtb2R1bGUKLQlSdW4gTW9kdWxlICAgLS0gRXhlY3V0ZSB0aGUgY3VycmVudCBmaWxlIGluIHRoZSBfX21haW5fXyBuYW1lc3BhY2UKKyAgICAgICAgUHl0aG9uIFNoZWxsIC0tIE9wZW4gb3Igd2FrZSB1cCB0aGUgUHl0aG9uIHNoZWxsIHdpbmRvdworICAgICAgICAtLS0KKyAgICAgICAgQ2hlY2sgTW9kdWxlIC0tIENoZWNrIHRoZSBzeW50YXggb2YgdGhlIG1vZHVsZSBjdXJyZW50bHkgb3BlbiBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIEVkaXRvciB3aW5kb3cuICBJZiB0aGUgbW9kdWxlIGhhcyBub3QgYmVlbiBzYXZlZCBJRExFCisgICAgICAgICAgICAgICAgICAgICAgICB3aWxsIHByb21wdCB0aGUgdXNlciB0byBzYXZlIHRoZSBjb2RlLgorICAgICAgICBSdW4gTW9kdWxlICAgLS0gUmVzdGFydCB0aGUgc2hlbGwgdG8gY2xlYW4gdGhlIGVudmlyb25tZW50LCB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlIHRoZSBjdXJyZW50bHkgb3BlbiBtb2R1bGUuIElmIHRoZSBtb2R1bGUgaGFzCisgICAgICAgICAgICAgICAgICAgICAgICBub3QgYmVlbiBzYXZlZCBJRExFIHdpbGwgcHJvbXB0IHRoZSB1c2VyIHRvIHNhdmUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBjb2RlLgogCi1TaGVsbCBNZW51IChvbmx5IGluIFNoZWxsIHdpbmRvdyk6CitTaGVsbCBNZW51IChTaGVsbCB3aW5kb3cgb25seSk6CiAKLQlWaWV3IExhc3QgUmVzdGFydCAtLSBTY3JvbGwgdGhlIHNoZWxsIHdpbmRvdyB0byB0aGUgbGFzdCByZXN0YXJ0Ci0JUmVzdGFydCBTaGVsbCAgICAgLS0gUmVzdGFydCB0aGUgaW50ZXJwcmV0ZXIgd2l0aCBhIGZyZXNoIGVudmlyb25tZW50CisgICAgICAgIFZpZXcgTGFzdCBSZXN0YXJ0IC0tIFNjcm9sbCB0aGUgc2hlbGwgd2luZG93IHRvIHRoZSBsYXN0IFNoZWxsIHJlc3RhcnQKKyAgICAgICAgUmVzdGFydCBTaGVsbCAgICAgLS0gUmVzdGFydCB0aGUgc2hlbGwgdG8gY2xlYW4gdGhlIGVudmlyb25tZW50CiAKLURlYnVnIE1lbnUgKG9ubHkgaW4gU2hlbGwgd2luZG93KToKK0RlYnVnIE1lbnUgKFNoZWxsIHdpbmRvdyBvbmx5KToKIAotCUdvIHRvIEZpbGUvTGluZSAgIC0tIGxvb2sgYXJvdW5kIHRoZSBpbnNlcnQgcG9pbnQgZm9yIGEgZmlsZW5hbWUKLQkJICAgICAgICAgICAgIGFuZCBsaW5lIG51bWJlciwgb3BlbiB0aGUgZmlsZSwgYW5kIHNob3cgdGhlIGxpbmUKLQlEZWJ1Z2dlciAodG9nZ2xlKSAtLSBSdW4gY29tbWFuZHMgaW4gdGhlIHNoZWxsIHVuZGVyIHRoZSBkZWJ1Z2dlcgotCVN0YWNrIFZpZXdlciAgICAgIC0tIFNob3cgdGhlIHN0YWNrIHRyYWNlYmFjayBvZiB0aGUgbGFzdCBleGNlcHRpb24KLQlBdXRvLW9wZW4gU3RhY2sgVmlld2VyICh0b2dnbGUpIC0tIE9wZW4gc3RhY2sgdmlld2VyIG9uIHRyYWNlYmFjaworICAgICAgICBHbyB0byBGaWxlL0xpbmUgICAtLSBMb29rIGFyb3VuZCB0aGUgaW5zZXJ0IHBvaW50IGZvciBhIGZpbGVuYW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBsaW5lIG51bWJlciwgb3BlbiB0aGUgZmlsZSwgYW5kIHNob3cgdGhlIGxpbmUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZWZ1bCB0byB2aWV3IHRoZSBzb3VyY2UgbGluZXMgcmVmZXJlbmNlZCBpbiBhbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHRpb24gdHJhY2ViYWNrLiAgQXZhaWxhYmxlIGluIHRoZSBjb250ZXh0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbnUgb2YgdGhlIFNoZWxsIHdpbmRvdy4KKyAgICAgICAgRGVidWdnZXIgKHRvZ2dsZSkgLS0gVGhpcyBmZWF0dXJlIGlzIG5vdCBjb21wbGV0ZSBhbmQgY29uc2lkZXJlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlcmltZW50YWwuIFJ1biBjb21tYW5kcyBpbiB0aGUgc2hlbGwgdW5kZXIgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnZ2VyLgorICAgICAgICBTdGFjayBWaWV3ZXIgICAgICAtLSBTaG93IHRoZSBzdGFjayB0cmFjZWJhY2sgb2YgdGhlIGxhc3QgZXhjZXB0aW9uCisgICAgICAgIEF1dG8tb3BlbiBTdGFjayBWaWV3ZXIgKHRvZ2dsZSkgLS0gVG9nZ2xlIGF1dG9tYXRpY2FsbHkgb3BlbmluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjayB2aWV3ZXIgb24gdW5oYW5kbGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uCiAKLU9wdGlvbnMgTWVudToKK09wdGlvbnMgTWVudSAoU2hlbGwgYW5kIEVkaXRvcik6CiAKLQlDb25maWd1cmUgSURMRSAtLSBPcGVuIGEgY29uZmlndXJhdGlvbiBkaWFsb2cuICBGb250cywgaW5kZW50YXRpb24sCisgICAgICAgIENvbmZpZ3VyZSBJRExFIC0tIE9wZW4gYSBjb25maWd1cmF0aW9uIGRpYWxvZy4gIEZvbnRzLCBpbmRlbnRhdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5YmluZGluZ3MsIGFuZCBjb2xvciB0aGVtZXMgbWF5IGJlIGFsdGVyZWQuCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0dXAgUHJlZmVyZW5jZXMgbWF5IGJlIHNldCwgYW5kIEFkZGl0aW9uYWwgSGVscAotICAgICAgICAgICAgICAgICAgICAgICAgICBTb3VyY2VzIGNhbiBiZSBzcGVjaWZpZWQuCi0JCQkgIAotCQkJICBPbiBPUyBYIHRoaXMgbWVudSBpcyBub3QgcHJlc2VudCwgdXNlCi0JCQkgIG1lbnUgJ0lETEUgLT4gUHJlZmVyZW5jZXMuLi4nIGluc3RlYWQuCi0JLS0tCi0JQ29kZSBDb250ZXh0IC0tCSAgT3BlbiBhIHBhbmUgYXQgdGhlIHRvcCBvZiB0aGUgZWRpdCB3aW5kb3cgd2hpY2gKLQkJCSAgc2hvd3MgdGhlIGJsb2NrIGNvbnRleHQgb2YgdGhlIHNlY3Rpb24gb2YgY29kZQotCQkJICB3aGljaCBpcyBzY3JvbGxpbmcgb2ZmIHRoZSB0b3Agb3IgdGhlIHdpbmRvdy4KLQkJCSAgKE5vdCBwcmVzZW50IGluIFNoZWxsIHdpbmRvdy4pCisgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0dXAgUHJlZmVyZW5jZXMgbWF5IGJlIHNldCwgYW5kIGFkZGl0aW9uYWwgSGVscAorICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VzIGNhbiBiZSBzcGVjaWZpZWQuICBPbiBPUyBYLCBvcGVuIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGRpYWxvZyBieSBzZWxlY3RpbmcgUHJlZmVyZW5jZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIGFwcGxpY2F0aW9uIG1lbnUuCiAKLVdpbmRvd3MgTWVudToKKyAgICAgICAgLS0tCisgICAgICAgIENvZGUgQ29udGV4dCAodG9nZ2xlKSAtLSBPcGVuIGEgcGFuZSBhdCB0aGUgdG9wIG9mIHRoZSBlZGl0IHdpbmRvdworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpY2ggc2hvd3MgdGhlIGJsb2NrIGNvbnRleHQgb2YgdGhlIHNlY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIGNvZGUgd2hpY2ggaXMgc2Nyb2xsaW5nIG9mZiB0aGUgdG9wIG9yIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LiBUaGlzIGlzIG5vdCBwcmVzZW50IGluIHRoZSBTaGVsbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93IG9ubHkgdGhlIEVkaXRvciB3aW5kb3cuCiAKLQlab29tIEhlaWdodCAtLSB0b2dnbGVzIHRoZSB3aW5kb3cgYmV0d2VlbiBjb25maWd1cmVkIHNpemUKLQlhbmQgbWF4aW11bSBoZWlnaHQuCi0JLS0tCi0JVGhlIHJlc3Qgb2YgdGhpcyBtZW51IGxpc3RzIHRoZSBuYW1lcyBvZiBhbGwgb3BlbiB3aW5kb3dzOwotCXNlbGVjdCBvbmUgdG8gYnJpbmcgaXQgdG8gdGhlIGZvcmVncm91bmQgKGRlaWNvbmlmeWluZyBpdCBpZgotCW5lY2Vzc2FyeSkuCitXaW5kb3cgTWVudSAoU2hlbGwgYW5kIEVkaXRvcik6CisKKyAgICAgICAgWm9vbSBIZWlnaHQgLS0gVG9nZ2xlcyB0aGUgd2luZG93IGJldHdlZW4gbm9ybWFsIHNpemUgKDQweDgwIGluaXRpYWwKKyAgICAgICAgc2V0dGluZykgYW5kIG1heGltdW0gaGVpZ2h0LiAgVGhlIGluaXRpYWwgc2l6ZSBpcyBpbiB0aGUgQ29uZmlndXJlCisgICAgICAgIElETEUgZGlhbG9nIHVuZGVyIHRoZSBnZW5lcmFsIHRhYi4KKyAgICAgICAgLS0tCisgICAgICAgIFRoZSByZXN0IG9mIHRoaXMgbWVudSBsaXN0cyB0aGUgbmFtZXMgb2YgYWxsIG9wZW4gd2luZG93czsKKyAgICAgICAgc2VsZWN0IG9uZSB0byBicmluZyBpdCB0byB0aGUgZm9yZWdyb3VuZCAoZGVpY29uaWZ5aW5nIGl0IGlmCisgICAgICAgIG5lY2Vzc2FyeSkuCiAKIEhlbHAgTWVudToKIAotCUFib3V0IElETEUgIC0tIFZlcnNpb24sIGNvcHlyaWdodCwgbGljZW5zZSwgY3JlZGl0cwotCUlETEUgUmVhZG1lIC0tIEJhY2tncm91bmQgZGlzY3Vzc2lvbiBhbmQgY2hhbmdlIGRldGFpbHMKLQktLS0KLQlJRExFIEhlbHAgICAtLSBEaXNwbGF5IHRoaXMgZmlsZQotCVB5dGhvbiBEb2NzIC0tIEFjY2VzcyBsb2NhbCBQeXRob24gZG9jdW1lbnRhdGlvbiwgaWYKLQkJICAgICAgIGluc3RhbGxlZC4gIE90aGVyd2lzZSwgYWNjZXNzIHd3dy5weXRob24ub3JnLgotCS0tLQotCShBZGRpdGlvbmFsIEhlbHAgU291cmNlcyBtYXkgYmUgYWRkZWQgaGVyZSkKKyAgICAgICAgQWJvdXQgSURMRSAgLS0gVmVyc2lvbiwgY29weXJpZ2h0LCBsaWNlbnNlLCBjcmVkaXRzCisgICAgICAgIC0tLQorICAgICAgICBJRExFIEhlbHAgICAtLSBEaXNwbGF5IHRoaXMgZmlsZSB3aGljaCBpcyBhIGhlbHAgZmlsZSBmb3IgSURMRQorICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWxpbmcgdGhlIG1lbnUgb3B0aW9ucywgYmFzaWMgZWRpdGluZyBhbmQgbmF2aWdhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgYW5kIG90aGVyIHRpcHMuCisgICAgICAgIFB5dGhvbiBEb2NzIC0tIEFjY2VzcyBsb2NhbCBQeXRob24gZG9jdW1lbnRhdGlvbiwgaWYKKyAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGVkLiAgT3Igd2lsbCBzdGFydCBhIHdlYiBicm93c2VyIGFuZCBvcGVuCisgICAgICAgICAgICAgICAgICAgICAgIGRvY3MucHl0aG9uLm9yZyBzaG93aW5nIHRoZSBsYXRlc3QgUHl0aG9uIGRvY3VtZW50YXRpb24uCisgICAgICAgIC0tLQorICAgICAgICBBZGRpdGlvbmFsIGhlbHAgc291cmNlcyBtYXkgYmUgYWRkZWQgaGVyZSB3aXRoIHRoZSBDb25maWd1cmUgSURMRQorICAgICAgICBkaWFsb2cgdW5kZXIgdGhlIEdlbmVyYWwgdGFiLgogCi1FZGl0IGNvbnRleHQgbWVudSAoUmlnaHQtY2xpY2sgLyBDb250cm9sLWNsaWNrIG9uIE9TIFggaW4gRWRpdCB3aW5kb3cpOgorRWRpdG9yIGNvbnRleHQgbWVudSAoUmlnaHQtY2xpY2sgLyBDb250cm9sLWNsaWNrIG9uIE9TIFggaW4gRWRpdCB3aW5kb3cpOgogCi0JQ3V0ICAgICAgICAgICAgICAtLSBDb3B5IGEgc2VsZWN0aW9uIGludG8gc3lzdGVtLXdpZGUgY2xpcGJvYXJkLAorICAgICAgICBDdXQgICAgICAgICAgICAgIC0tIENvcHkgYSBzZWxlY3Rpb24gaW50byBzeXN0ZW0td2lkZSBjbGlwYm9hcmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbiBkZWxldGUgdGhlIHNlbGVjdGlvbgotCUNvcHkgICAgICAgICAgICAgLS0gQ29weSBzZWxlY3Rpb24gaW50byBzeXN0ZW0td2lkZSBjbGlwYm9hcmQKLQlQYXN0ZSAgICAgICAgICAgIC0tIEluc2VydCBzeXN0ZW0td2lkZSBjbGlwYm9hcmQgaW50byB3aW5kb3cKLQlTZXQgQnJlYWtwb2ludCAgIC0tIFNldHMgYSBicmVha3BvaW50ICh3aGVuIGRlYnVnZ2VyIG9wZW4pCi0JQ2xlYXIgQnJlYWtwb2ludCAtLSBDbGVhcnMgdGhlIGJyZWFrcG9pbnQgb24gdGhhdCBsaW5lCisgICAgICAgIENvcHkgICAgICAgICAgICAgLS0gQ29weSBzZWxlY3Rpb24gaW50byBzeXN0ZW0td2lkZSBjbGlwYm9hcmQKKyAgICAgICAgUGFzdGUgICAgICAgICAgICAtLSBJbnNlcnQgc3lzdGVtLXdpZGUgY2xpcGJvYXJkIGludG8gd2luZG93CisgICAgICAgIFNldCBCcmVha3BvaW50ICAgLS0gU2V0cyBhIGJyZWFrcG9pbnQuIEJyZWFrcG9pbnRzIGFyZSBvbmx5IGVuYWJsZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIHRoZSBkZWJ1Z2dlciBpcyBvcGVuLgorICAgICAgICBDbGVhciBCcmVha3BvaW50IC0tIENsZWFycyB0aGUgYnJlYWtwb2ludCBvbiB0aGF0IGxpbmUKIAogU2hlbGwgY29udGV4dCBtZW51IChSaWdodC1jbGljayAvIENvbnRyb2wtY2xpY2sgb24gT1MgWCBpbiBTaGVsbCB3aW5kb3cpOgogCi0JQ3V0ICAgICAgICAgICAgICAtLSBDb3B5IGEgc2VsZWN0aW9uIGludG8gc3lzdGVtLXdpZGUgY2xpcGJvYXJkLAorICAgICAgICBDdXQgICAgICAgICAgICAgIC0tIENvcHkgYSBzZWxlY3Rpb24gaW50byBzeXN0ZW0td2lkZSBjbGlwYm9hcmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbiBkZWxldGUgdGhlIHNlbGVjdGlvbgotCUNvcHkgICAgICAgICAgICAgLS0gQ29weSBzZWxlY3Rpb24gaW50byBzeXN0ZW0td2lkZSBjbGlwYm9hcmQKLQlQYXN0ZSAgICAgICAgICAgIC0tIEluc2VydCBzeXN0ZW0td2lkZSBjbGlwYm9hcmQgaW50byB3aW5kb3cKLQktLS0KLQlHbyB0byBmaWxlL2xpbmUgIC0tIFNhbWUgYXMgaW4gRGVidWcgbWVudQorICAgICAgICBDb3B5ICAgICAgICAgICAgIC0tIENvcHkgc2VsZWN0aW9uIGludG8gc3lzdGVtLXdpZGUgY2xpcGJvYXJkCisgICAgICAgIFBhc3RlICAgICAgICAgICAgLS0gSW5zZXJ0IHN5c3RlbS13aWRlIGNsaXBib2FyZCBpbnRvIHdpbmRvdworICAgICAgICAtLS0KKyAgICAgICAgR28gdG8gZmlsZS9saW5lICAtLSBTYW1lIGFzIGluIERlYnVnIG1lbnUKIAogCiAqKiBUSVBTICoqCkBAIC0xNDQsMTU5ICsxOTEsMTgyIEBACiAKIEFkZGl0aW9uYWwgSGVscCBTb3VyY2VzOgogCi0JV2luZG93cyB1c2VycyBjYW4gR29vZ2xlIG9uIHpvcGVzaGVsZi5jaG0gdG8gYWNjZXNzIFpvcGUgaGVscCBmaWxlcyBpbgotCXRoZSBXaW5kb3dzIGhlbHAgZm9ybWF0LiAgVGhlIEFkZGl0aW9uYWwgSGVscCBTb3VyY2VzIGZlYXR1cmUgb2YgdGhlCi0JY29uZmlndXJhdGlvbiBHVUkgc3VwcG9ydHMgLmNobSwgYWxvbmcgd2l0aCBhbnkgb3RoZXIgZmlsZXR5cGVzCi0Jc3VwcG9ydGVkIGJ5IHlvdXIgYnJvd3Nlci4gIFN1cHBseSBhIE1lbnUgSXRlbSB0aXRsZSwgYW5kIGVudGVyIHRoZQotCWxvY2F0aW9uIGluIHRoZSBIZWxwIEZpbGUgUGF0aCBzbG90IG9mIHRoZSBOZXcgSGVscCBTb3VyY2UgZGlhbG9nLiAgVXNlCi0JaHR0cDovLyBhbmQvb3Igd3d3LiB0byBpZGVudGlmeSBleHRlcm5hbCBVUkxzLCBvciBkb3dubG9hZCB0aGUgZmlsZSBhbmQKLQlicm93c2UgZm9yIGl0cyBwYXRoIG9uIHlvdXIgbWFjaGluZSB1c2luZyB0aGUgQnJvd3NlIGJ1dHRvbi4KKyAgICAgICAgV2luZG93cyB1c2VycyBjYW4gR29vZ2xlIG9uIHpvcGVzaGVsZi5jaG0gdG8gYWNjZXNzIFpvcGUgaGVscCBmaWxlcyBpbgorICAgICAgICB0aGUgV2luZG93cyBoZWxwIGZvcm1hdC4gIFRoZSBBZGRpdGlvbmFsIEhlbHAgU291cmNlcyBmZWF0dXJlIG9mIHRoZQorICAgICAgICBjb25maWd1cmF0aW9uIEdVSSBzdXBwb3J0cyAuY2htLCBhbG9uZyB3aXRoIGFueSBvdGhlciBmaWxldHlwZXMKKyAgICAgICAgc3VwcG9ydGVkIGJ5IHlvdXIgYnJvd3Nlci4gIFN1cHBseSBhIE1lbnUgSXRlbSB0aXRsZSwgYW5kIGVudGVyIHRoZQorICAgICAgICBsb2NhdGlvbiBpbiB0aGUgSGVscCBGaWxlIFBhdGggc2xvdCBvZiB0aGUgTmV3IEhlbHAgU291cmNlIGRpYWxvZy4gIFVzZQorICAgICAgICBodHRwOi8vIGFuZC9vciB3d3cuIHRvIGlkZW50aWZ5IGV4dGVybmFsIFVSTHMsIG9yIGRvd25sb2FkIHRoZSBmaWxlIGFuZAorICAgICAgICBicm93c2UgZm9yIGl0cyBwYXRoIG9uIHlvdXIgbWFjaGluZSB1c2luZyB0aGUgQnJvd3NlIGJ1dHRvbi4KIAotCUFsbCB1c2VycyBjYW4gYWNjZXNzIHRoZSBleHRlbnNpdmUgc291cmNlcyBvZiBoZWxwLCBpbmNsdWRpbmcKLQl0dXRvcmlhbHMsIGF2YWlsYWJsZSBhdCB3d3cucHl0aG9uLm9yZy9kb2MuICBTZWxlY3RlZCBVUkxzIGNhbiBiZSBhZGRlZAotCW9yIHJlbW92ZWQgZnJvbSB0aGUgSGVscCBtZW51IGF0IGFueSB0aW1lIHVzaW5nIENvbmZpZ3VyZSBJRExFLgorICAgICAgICBBbGwgdXNlcnMgY2FuIGFjY2VzcyB0aGUgZXh0ZW5zaXZlIHNvdXJjZXMgb2YgaGVscCwgaW5jbHVkaW5nCisgICAgICAgIHR1dG9yaWFscywgYXZhaWxhYmxlIGF0IGRvY3MucHl0aG9uLm9yZy4gIFNlbGVjdGVkIFVSTHMgY2FuIGJlIGFkZGVkCisgICAgICAgIG9yIHJlbW92ZWQgZnJvbSB0aGUgSGVscCBtZW51IGF0IGFueSB0aW1lIHVzaW5nIENvbmZpZ3VyZSBJRExFLgogCiBCYXNpYyBlZGl0aW5nIGFuZCBuYXZpZ2F0aW9uOgogCi0JQmFja3NwYWNlIGRlbGV0ZXMgY2hhciB0byB0aGUgbGVmdDsgREVMIGRlbGV0ZXMgY2hhciB0byB0aGUgcmlnaHQuCi0JQ29udHJvbC1iYWNrc3BhY2UgZGVsZXRlcyB3b3JkIGxlZnQsIENvbnRyb2wtREVMIGRlbGV0ZXMgd29yZCByaWdodC4KLQlBcnJvdyBrZXlzIGFuZCBQYWdlIFVwL0Rvd24gbW92ZSBhcm91bmQuCi0JQ29udHJvbC1sZWZ0L3JpZ2h0IEFycm93IG1vdmVzIGJ5IHdvcmRzIGluIGEgc3RyYW5nZSBidXQgdXNlZnVsIHdheS4KLQlIb21lL0VuZCBnbyB0byBiZWdpbi9lbmQgb2YgbGluZS4KLQlDb250cm9sLUhvbWUvRW5kIGdvIHRvIGJlZ2luL2VuZCBvZiBmaWxlLgotCVNvbWUgdXNlZnVsIEVtYWNzIGJpbmRpbmdzIGFyZSBpbmhlcml0ZWQgZnJvbSBUY2wvVGs6Ci0JCUNvbnRyb2wtYSAgICAgYmVnaW5uaW5nIG9mIGxpbmUKLQkJQ29udHJvbC1lICAgICBlbmQgb2YgbGluZQotCQlDb250cm9sLWsgICAgIGtpbGwgbGluZSAoYnV0IGRvZXNuJ3QgcHV0IGl0IGluIGNsaXBib2FyZCkKLQkJQ29udHJvbC1sICAgICBjZW50ZXIgd2luZG93IGFyb3VuZCB0aGUgaW5zZXJ0aW9uIHBvaW50Ci0JU3RhbmRhcmQgV2luZG93cyBiaW5kaW5ncyBtYXkgd29yayBvbiB0aGF0IHBsYXRmb3JtLgotCUtleWJpbmRpbmdzIGFyZSBzZWxlY3RlZCBpbiB0aGUgU2V0dGluZ3MgRGlhbG9nLCBsb29rIHRoZXJlLgorICAgICAgICBCYWNrc3BhY2UgZGVsZXRlcyBjaGFyIHRvIHRoZSBsZWZ0OyBERUwgZGVsZXRlcyBjaGFyIHRvIHRoZSByaWdodC4KKyAgICAgICAgQ29udHJvbC1iYWNrc3BhY2UgZGVsZXRlcyB3b3JkIGxlZnQsIENvbnRyb2wtREVMIGRlbGV0ZXMgd29yZCByaWdodC4KKyAgICAgICAgQXJyb3cga2V5cyBhbmQgUGFnZSBVcC9Eb3duIG1vdmUgYXJvdW5kLgorICAgICAgICBDb250cm9sLWxlZnQvcmlnaHQgQXJyb3cgbW92ZXMgYnkgd29yZHMgaW4gYSBzdHJhbmdlIGJ1dCB1c2VmdWwgd2F5LgorICAgICAgICBIb21lL0VuZCBnbyB0byBiZWdpbi9lbmQgb2YgbGluZS4KKyAgICAgICAgQ29udHJvbC1Ib21lL0VuZCBnbyB0byBiZWdpbi9lbmQgb2YgZmlsZS4KKyAgICAgICAgU29tZSB1c2VmdWwgRW1hY3MgYmluZGluZ3MgYXJlIGluaGVyaXRlZCBmcm9tIFRjbC9UazoKKyAgICAgICAgICAgICAgICBDb250cm9sLWEgICAgIGJlZ2lubmluZyBvZiBsaW5lCisgICAgICAgICAgICAgICAgQ29udHJvbC1lICAgICBlbmQgb2YgbGluZQorICAgICAgICAgICAgICAgIENvbnRyb2wtayAgICAga2lsbCBsaW5lIChidXQgZG9lc24ndCBwdXQgaXQgaW4gY2xpcGJvYXJkKQorICAgICAgICAgICAgICAgIENvbnRyb2wtbCAgICAgY2VudGVyIHdpbmRvdyBhcm91bmQgdGhlIGluc2VydGlvbiBwb2ludAorICAgICAgICBTdGFuZGFyZCBrZXliaW5kaW5ncyAobGlrZSBDb250cm9sLWMgdG8gY29weSBhbmQgQ29udHJvbC12IHRvCisgICAgICAgIHBhc3RlKSBtYXkgd29yay4gIEtleWJpbmRpbmdzIGFyZSBzZWxlY3RlZCBpbiB0aGUgQ29uZmlndXJlIElETEUKKyAgICAgICAgZGlhbG9nLgogCiBBdXRvbWF0aWMgaW5kZW50YXRpb246CiAKLQlBZnRlciBhIGJsb2NrLW9wZW5pbmcgc3RhdGVtZW50LCB0aGUgbmV4dCBsaW5lIGlzIGluZGVudGVkIGJ5IDQgc3BhY2VzCi0JKGluIHRoZSBQeXRob24gU2hlbGwgd2luZG93IGJ5IG9uZSB0YWIpLiAgQWZ0ZXIgY2VydGFpbiBrZXl3b3JkcwotCShicmVhaywgcmV0dXJuIGV0Yy4pIHRoZSBuZXh0IGxpbmUgaXMgZGVkZW50ZWQuICBJbiBsZWFkaW5nCi0JaW5kZW50YXRpb24sIEJhY2tzcGFjZSBkZWxldGVzIHVwIHRvIDQgc3BhY2VzIGlmIHRoZXkgYXJlIHRoZXJlLiAgVGFiCi0JaW5zZXJ0cyBzcGFjZXMgKGluIHRoZSBQeXRob24gU2hlbGwgd2luZG93IG9uZSB0YWIpLCBudW1iZXIgZGVwZW5kcyBvbgotCUluZGVudCBXaWR0aC4gIChOLkIuIEN1cnJlbnRseSB0YWJzIGFyZSByZXN0cmljdGVkIHRvIGZvdXIgc3BhY2VzIGR1ZQotCXRvIFRjbC9UayBpc3N1ZXMuKQorICAgICAgICBBZnRlciBhIGJsb2NrLW9wZW5pbmcgc3RhdGVtZW50LCB0aGUgbmV4dCBsaW5lIGlzIGluZGVudGVkIGJ5IDQgc3BhY2VzCisgICAgICAgIChpbiB0aGUgUHl0aG9uIFNoZWxsIHdpbmRvdyBieSBvbmUgdGFiKS4gIEFmdGVyIGNlcnRhaW4ga2V5d29yZHMKKyAgICAgICAgKGJyZWFrLCByZXR1cm4gZXRjLikgdGhlIG5leHQgbGluZSBpcyBkZWRlbnRlZC4gIEluIGxlYWRpbmcKKyAgICAgICAgaW5kZW50YXRpb24sIEJhY2tzcGFjZSBkZWxldGVzIHVwIHRvIDQgc3BhY2VzIGlmIHRoZXkgYXJlIHRoZXJlLiAgVGFiCisgICAgICAgIGluc2VydHMgc3BhY2VzIChpbiB0aGUgUHl0aG9uIFNoZWxsIHdpbmRvdyBvbmUgdGFiKSwgbnVtYmVyIGRlcGVuZHMgb24KKyAgICAgICAgSW5kZW50IFdpZHRoLiBDdXJyZW50bHkgdGFicyBhcmUgcmVzdHJpY3RlZCB0byBmb3VyIHNwYWNlcyBkdWUKKyAgICAgICAgdG8gVGNsL1RrIGxpbWl0YXRpb25zLgogCiAgICAgICAgIFNlZSBhbHNvIHRoZSBpbmRlbnQvZGVkZW50IHJlZ2lvbiBjb21tYW5kcyBpbiB0aGUgZWRpdCBtZW51LgogCiBDb21wbGV0aW9uczoKIAotCUNvbXBsZXRpb25zIGFyZSBzdXBwbGllZCBmb3IgZnVuY3Rpb25zLCBjbGFzc2VzLCBhbmQgYXR0cmlidXRlcyBvZgotCWNsYXNzZXMsIGJvdGggYnVpbHQtaW4gYW5kIHVzZXItZGVmaW5lZC4gIENvbXBsZXRpb25zIGFyZSBhbHNvIHByb3ZpZGVkCi0JZm9yIGZpbGVuYW1lcy4KKyAgICAgICAgQ29tcGxldGlvbnMgYXJlIHN1cHBsaWVkIGZvciBmdW5jdGlvbnMsIGNsYXNzZXMsIGFuZCBhdHRyaWJ1dGVzIG9mCisgICAgICAgIGNsYXNzZXMsIGJvdGggYnVpbHQtaW4gYW5kIHVzZXItZGVmaW5lZC4gIENvbXBsZXRpb25zIGFyZSBhbHNvIHByb3ZpZGVkCisgICAgICAgIGZvciBmaWxlbmFtZXMuCiAKLQlUaGUgQXV0b0NvbXBsZXRlV2luZG93IChBQ1cpIHdpbGwgb3BlbiBhZnRlciBhIHByZWRlZmluZWQgZGVsYXkKLQkoZGVmYXVsdCBpcyB0d28gc2Vjb25kcykgYWZ0ZXIgYSAnLicgb3IgKGluIGEgc3RyaW5nKSBhbiBvcy5zZXAgaXMKLQl0eXBlZC4gIElmIGFmdGVyIG9uZSBvZiB0aG9zZSBjaGFyYWN0ZXJzIChwbHVzIHplcm8gb3IgbW9yZSBvdGhlcgotCWNoYXJhY3RlcnMpIHlvdSB0eXBlIGEgVGFiIHRoZSBBQ1cgd2lsbCBvcGVuIGltbWVkaWF0ZWx5IGlmIGEgcG9zc2libGUKLQljb250aW51YXRpb24gaXMgZm91bmQuCisgICAgICAgIFRoZSBBdXRvQ29tcGxldGVXaW5kb3cgKEFDVykgd2lsbCBvcGVuIGFmdGVyIGEgcHJlZGVmaW5lZCBkZWxheQorICAgICAgICAoZGVmYXVsdCBpcyB0d28gc2Vjb25kcykgYWZ0ZXIgYSAnLicgb3IgKGluIGEgc3RyaW5nKSBhbiBvcy5zZXAgaXMKKyAgICAgICAgdHlwZWQuICBJZiBhZnRlciBvbmUgb2YgdGhvc2UgY2hhcmFjdGVycyAocGx1cyB6ZXJvIG9yIG1vcmUgb3RoZXIKKyAgICAgICAgY2hhcmFjdGVycykgYSB0YWIgaXMgdHlwZWQgdGhlIEFDVyB3aWxsIG9wZW4gaW1tZWRpYXRlbHkgaWYgYSBwb3NzaWJsZQorICAgICAgICBjb250aW51YXRpb24gaXMgZm91bmQuCiAKLQlJZiB0aGVyZSBpcyBvbmx5IG9uZSBwb3NzaWJsZSBjb21wbGV0aW9uIGZvciB0aGUgY2hhcmFjdGVycyBlbnRlcmVkLCBhCi0JVGFiIHdpbGwgc3VwcGx5IHRoYXQgY29tcGxldGlvbiB3aXRob3V0IG9wZW5pbmcgdGhlIEFDVy4KKyAgICAgICAgSWYgdGhlcmUgaXMgb25seSBvbmUgcG9zc2libGUgY29tcGxldGlvbiBmb3IgdGhlIGNoYXJhY3RlcnMgZW50ZXJlZCwgYQorICAgICAgICB0YWIgd2lsbCBzdXBwbHkgdGhhdCBjb21wbGV0aW9uIHdpdGhvdXQgb3BlbmluZyB0aGUgQUNXLgogCi0JJ1Nob3cgQ29tcGxldGlvbnMnIHdpbGwgZm9yY2Ugb3BlbiBhIGNvbXBsZXRpb25zIHdpbmRvdy4gIEluIGFuIGVtcHR5Ci0Jc3RyaW5nLCB0aGlzIHdpbGwgY29udGFpbiB0aGUgZmlsZXMgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LiAgT24gYQotCWJsYW5rIGxpbmUsIGl0IHdpbGwgY29udGFpbiB0aGUgYnVpbHQtaW4gYW5kIHVzZXItZGVmaW5lZCBmdW5jdGlvbnMgYW5kCi0JY2xhc3NlcyBpbiB0aGUgY3VycmVudCBuYW1lIHNwYWNlcywgcGx1cyBhbnkgbW9kdWxlcyBpbXBvcnRlZC4gIElmIHNvbWUKLQljaGFyYWN0ZXJzIGhhdmUgYmVlbiBlbnRlcmVkLCB0aGUgQUNXIHdpbGwgYXR0ZW1wdCB0byBiZSBtb3JlIHNwZWNpZmljLgorICAgICAgICAnU2hvdyBDb21wbGV0aW9ucycgd2lsbCBmb3JjZSBvcGVuIGEgY29tcGxldGlvbnMgd2luZG93LCBieSBkZWZhdWx0IHRoZQorICAgICAgICBDb250cm9sLXNwYWNlIGtleXMgd2lsbCBvcGVuIGEgY29tcGxldGlvbnMgd2luZG93LiAgSW4gYW4gZW1wdHkKKyAgICAgICAgc3RyaW5nLCB0aGlzIHdpbGwgY29udGFpbiB0aGUgZmlsZXMgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LiAgT24gYQorICAgICAgICBibGFuayBsaW5lLCBpdCB3aWxsIGNvbnRhaW4gdGhlIGJ1aWx0LWluIGFuZCB1c2VyLWRlZmluZWQgZnVuY3Rpb25zIGFuZAorICAgICAgICBjbGFzc2VzIGluIHRoZSBjdXJyZW50IG5hbWUgc3BhY2VzLCBwbHVzIGFueSBtb2R1bGVzIGltcG9ydGVkLiAgSWYgc29tZQorICAgICAgICBjaGFyYWN0ZXJzIGhhdmUgYmVlbiBlbnRlcmVkLCB0aGUgQUNXIHdpbGwgYXR0ZW1wdCB0byBiZSBtb3JlIHNwZWNpZmljLgogCi0JSWYgc3RyaW5nIG9mIGNoYXJhY3RlcnMgaXMgdHlwZWQsIHRoZSBBQ1cgc2VsZWN0aW9uIHdpbGwganVtcCB0byB0aGUKLQllbnRyeSBtb3N0IGNsb3NlbHkgbWF0Y2hpbmcgdGhvc2UgY2hhcmFjdGVycy4gRW50ZXJpbmcgYSBUYWIgd2lsbCBjYXVzZQotCXRoZSBsb25nZXN0IG5vbi1hbWJpZ3VvdXMgbWF0Y2ggdG8gYmUgZW50ZXJlZCBpbiB0aGUgRWRpdCB3aW5kb3cgb3IKLQlTaGVsbC4gIFR3byBUYWJzIGluIGEgcm93IHdpbGwgc3VwcGx5IHRoZSBjdXJyZW50IEFDVyBzZWxlY3Rpb24sIGFzCi0Jd2lsbCBSZXR1cm4gb3IgYSBkb3VibGUgY2xpY2suICBDdXJzb3Iga2V5cywgUGFnZSBVcC9Eb3duLCBtb3VzZQotCXNlbGVjdGlvbiwgYW5kIHRoZSBzY3JvbGx3aGVlbCBhbGwgb3BlcmF0ZSBvbiB0aGUgQUNXLgorICAgICAgICBJZiBzdHJpbmcgb2YgY2hhcmFjdGVycyBpcyB0eXBlZCwgdGhlIEFDVyBzZWxlY3Rpb24gd2lsbCBqdW1wIHRvIHRoZQorICAgICAgICBlbnRyeSBtb3N0IGNsb3NlbHkgbWF0Y2hpbmcgdGhvc2UgY2hhcmFjdGVycy4gRW50ZXJpbmcgYSB0YWIgd2lsbCBjYXVzZQorICAgICAgICB0aGUgbG9uZ2VzdCBub24tYW1iaWd1b3VzIG1hdGNoIHRvIGJlIGVudGVyZWQgaW4gdGhlIEVkaXQgd2luZG93IG9yCisgICAgICAgIFNoZWxsLiAgVHdvIHRhYnMgaW4gYSByb3cgd2lsbCBzdXBwbHkgdGhlIGN1cnJlbnQgQUNXIHNlbGVjdGlvbiwgYXMKKyAgICAgICAgd2lsbCByZXR1cm4gb3IgYSBkb3VibGUgY2xpY2suICBDdXJzb3Iga2V5cywgUGFnZSBVcC9Eb3duLCBtb3VzZQorICAgICAgICBzZWxlY3Rpb24sIGFuZCB0aGUgc2Nyb2xsIHdoZWVsIGFsbCBvcGVyYXRlIG9uIHRoZSBBQ1cuCiAKLQknSGlkZGVuJyBhdHRyaWJ1dGVzIGNhbiBiZSBhY2Nlc3NlZCBieSB0eXBpbmcgdGhlIGJlZ2lubmluZyBvZiBoaWRkZW4KLQluYW1lIGFmdGVyIGEgJy4nLiAgZS5nLiAnXycuICBUaGlzIGFsbG93cyBhY2Nlc3MgdG8gbW9kdWxlcyB3aXRoCi0JJ19fYWxsX18nIHNldCwgb3IgdG8gY2xhc3MtcHJpdmF0ZSBhdHRyaWJ1dGVzLgorICAgICAgICAiSGlkZGVuIiBhdHRyaWJ1dGVzIGNhbiBiZSBhY2Nlc3NlZCBieSB0eXBpbmcgdGhlIGJlZ2lubmluZyBvZiBoaWRkZW4KKyAgICAgICAgbmFtZSBhZnRlciBhICcuJywgIGUuZy4gJ18nLiAgVGhpcyBhbGxvd3MgYWNjZXNzIHRvIG1vZHVsZXMgd2l0aAorICAgICAgICAnX19hbGxfXycgc2V0LCBvciB0byBjbGFzcy1wcml2YXRlIGF0dHJpYnV0ZXMuCiAKLQlDb21wbGV0aW9ucyBhbmQgdGhlICdFeHBhbmQgV29yZCcgZmFjaWxpdHkgY2FuIHNhdmUgYSBsb3Qgb2YgdHlwaW5nIQorICAgICAgICBDb21wbGV0aW9ucyBhbmQgdGhlICdFeHBhbmQgV29yZCcgZmFjaWxpdHkgY2FuIHNhdmUgYSBsb3Qgb2YgdHlwaW5nIQogCi0JQ29tcGxldGlvbnMgYXJlIGN1cnJlbnRseSBsaW1pdGVkIHRvIHRob3NlIGluIHRoZSBuYW1lc3BhY2VzLiAgTmFtZXMgaW4KLQlhbiBFZGl0IHdpbmRvdyB3aGljaCBhcmUgbm90IHZpYSBfX21haW5fXyBvciBzeXMubW9kdWxlcyB3aWxsIG5vdCBiZQotCWZvdW5kLiAgUnVuIHRoZSBtb2R1bGUgb25jZSB3aXRoIHlvdXIgaW1wb3J0cyB0byBjb3JyZWN0IHRoaXMKLQlzaXR1YXRpb24uICBOb3RlIHRoYXQgSURMRSBpdHNlbGYgcGxhY2VzIHF1aXRlIGEgZmV3IG1vZHVsZXMgaW4KLQlzeXMubW9kdWxlcywgc28gbXVjaCBjYW4gYmUgZm91bmQgYnkgZGVmYXVsdCwgZS5nLiB0aGUgcmUgbW9kdWxlLgorICAgICAgICBDb21wbGV0aW9ucyBhcmUgY3VycmVudGx5IGxpbWl0ZWQgdG8gdGhvc2UgaW4gdGhlIG5hbWVzcGFjZXMuICBOYW1lcyBpbgorICAgICAgICBhbiBFZGl0b3Igd2luZG93IHdoaWNoIGFyZSBub3QgdmlhIF9fbWFpbl9fIG9yIHN5cy5tb2R1bGVzIHdpbGwgbm90IGJlCisgICAgICAgIGZvdW5kLiAgUnVuIHRoZSBtb2R1bGUgb25jZSB3aXRoIHlvdXIgaW1wb3J0cyB0byBjb3JyZWN0IHRoaXMKKyAgICAgICAgc2l0dWF0aW9uLiAgTm90ZSB0aGF0IElETEUgaXRzZWxmIHBsYWNlcyBxdWl0ZSBhIGZldyBtb2R1bGVzIGluCisgICAgICAgIHN5cy5tb2R1bGVzLCBzbyBtdWNoIGNhbiBiZSBmb3VuZCBieSBkZWZhdWx0LCBlLmcuIHRoZSByZSBtb2R1bGUuCiAKLQlJZiB5b3UgZG9uJ3QgbGlrZSB0aGUgQUNXIHBvcHBpbmcgdXAgdW5iaWRkZW4sIHNpbXBseSBtYWtlIHRoZSBkZWxheQotCWxvbmdlciBvciBkaXNhYmxlIHRoZSBleHRlbnNpb24uICBPVE9ILCB5b3UgY291bGQgbWFrZSB0aGUgZGVsYXkgemVyby4KLQotCVlvdSBjb3VsZCBhbHNvIHN3aXRjaCBvZmYgdGhlIENhbGxUaXBzIGV4dGVuc2lvbi4gIChXZSB3aWxsIGJlIGFkZGluZwotCWEgZGVsYXkgdG8gdGhlIGNhbGwgdGlwIHdpbmRvdy4pCisgICAgICAgIElmIHlvdSBkb24ndCBsaWtlIHRoZSBBQ1cgcG9wcGluZyB1cCB1bmJpZGRlbiwgc2ltcGx5IG1ha2UgdGhlIGRlbGF5CisgICAgICAgIGxvbmdlciBvciBkaXNhYmxlIHRoZSBleHRlbnNpb24uICBPciBhbm90aGVyIG9wdGlvbiBpcyB0aGUgZGVsYXkgY291bGQKKyAgICAgICAgYmUgc2V0IHRvIHplcm8uIEFub3RoZXIgYWx0ZXJuYXRpdmUgdG8gcHJldmVudGluZyBBQ1cgcG9wdXBzIGlzIHRvCisgICAgICAgIGRpc2FibGUgdGhlIGNhbGwgdGlwcyBleHRlbnNpb24uCiAKIFB5dGhvbiBTaGVsbCB3aW5kb3c6CiAKLQlDb250cm9sLWMgaW50ZXJydXB0cyBleGVjdXRpbmcgY29tbWFuZC4KLQlDb250cm9sLWQgc2VuZHMgZW5kLW9mLWZpbGU7IGNsb3NlcyB3aW5kb3cgaWYgdHlwZWQgYXQgPj4+IHByb21wdC4KKyAgICAgICAgQ29udHJvbC1jIGludGVycnVwdHMgZXhlY3V0aW5nIGNvbW1hbmQuCisgICAgICAgIENvbnRyb2wtZCBzZW5kcyBlbmQtb2YtZmlsZTsgY2xvc2VzIHdpbmRvdyBpZiB0eXBlZCBhdCA+Pj4gcHJvbXB0LgorICAgICAgICBBbHQtLyBleHBhbmQgd29yZCBpcyBhbHNvIHVzZWZ1bCB0byByZWR1Y2UgdHlwaW5nLgogCiAgICAgQ29tbWFuZCBoaXN0b3J5OgogCi0JQWx0LXAgcmV0cmlldmVzIHByZXZpb3VzIGNvbW1hbmQgbWF0Y2hpbmcgd2hhdCB5b3UgaGF2ZSB0eXBlZC4KLQlBbHQtbiByZXRyaWV2ZXMgbmV4dC4KLQkgICAgICAoVGhlc2UgYXJlIENvbnRyb2wtcCwgQ29udHJvbC1uIG9uIE9TIFgpCi0JUmV0dXJuIHdoaWxlIGN1cnNvciBpcyBvbiBhIHByZXZpb3VzIGNvbW1hbmQgcmV0cmlldmVzIHRoYXQgY29tbWFuZC4KLQlFeHBhbmQgd29yZCBpcyBhbHNvIHVzZWZ1bCB0byByZWR1Y2UgdHlwaW5nLgorICAgICAgICBBbHQtcCByZXRyaWV2ZXMgcHJldmlvdXMgY29tbWFuZCBtYXRjaGluZyB3aGF0IHlvdSBoYXZlIHR5cGVkLiBPbiBPUyBYCisgICAgICAgIHVzZSBDb250cm9sLXAuCisgICAgICAgIEFsdC1uIHJldHJpZXZlcyBuZXh0LiBPbiBPUyBYIHVzZSBDb250cm9sLW4uCisgICAgICAgIFJldHVybiB3aGlsZSBjdXJzb3IgaXMgb24gYSBwcmV2aW91cyBjb21tYW5kIHJldHJpZXZlcyB0aGF0IGNvbW1hbmQuCiAKICAgICBTeW50YXggY29sb3JzOgogCi0JVGhlIGNvbG9yaW5nIGlzIGFwcGxpZWQgaW4gYSBiYWNrZ3JvdW5kICJ0aHJlYWQiLCBzbyB5b3UgbWF5Ci0Jb2NjYXNpb25hbGx5IHNlZSB1bmNvbG9yaXplZCB0ZXh0LiAgVG8gY2hhbmdlIHRoZSBjb2xvcgotCXNjaGVtZSwgdXNlIHRoZSBDb25maWd1cmUgSURMRSAvIEhpZ2hsaWdodGluZyBkaWFsb2cuCisgICAgICAgIFRoZSBjb2xvcmluZyBpcyBhcHBsaWVkIGluIGEgYmFja2dyb3VuZCAidGhyZWFkIiwgc28geW91IG1heQorICAgICAgICBvY2Nhc2lvbmFsbHkgc2VlIHVuY29sb3JpemVkIHRleHQuICBUbyBjaGFuZ2UgdGhlIGNvbG9yCisgICAgICAgIHNjaGVtZSwgdXNlIHRoZSBDb25maWd1cmUgSURMRSAvIEhpZ2hsaWdodGluZyBkaWFsb2cuCiAKICAgICBQeXRob24gZGVmYXVsdCBzeW50YXggY29sb3JzOgogCi0JS2V5d29yZHMJb3JhbmdlCi0JQnVpbHRpbnMJcm95YWwgcHVycGxlCi0JU3RyaW5ncwkJZ3JlZW4KLQlDb21tZW50cwlyZWQKLQlEZWZpbml0aW9ucwlibHVlCisgICAgICAgIEtleXdvcmRzICAgICAgICBvcmFuZ2UKKyAgICAgICAgQnVpbHRpbnMgICAgICAgIHJveWFsIHB1cnBsZQorICAgICAgICBTdHJpbmdzICAgICAgICAgZ3JlZW4KKyAgICAgICAgQ29tbWVudHMgICAgICAgIHJlZAorICAgICAgICBEZWZpbml0aW9ucyAgICAgYmx1ZQogCiAgICAgU2hlbGwgZGVmYXVsdCBjb2xvcnM6CiAKLQlDb25zb2xlIG91dHB1dAlicm93bgotCXN0ZG91dAkJYmx1ZQotCXN0ZGVycgkJcmVkCi0Jc3RkaW4JCWJsYWNrCisgICAgICAgIENvbnNvbGUgb3V0cHV0ICBicm93bgorICAgICAgICBzdGRvdXQgICAgICAgICAgYmx1ZQorICAgICAgICBzdGRlcnIgICAgICAgICAgcmVkCisgICAgICAgIHN0ZGluICAgICAgICAgICBibGFjawogCiBPdGhlciBwcmVmZXJlbmNlczoKIAotCVRoZSBmb250IHByZWZlcmVuY2VzLCBrZXliaW5kaW5nLCBhbmQgc3RhcnR1cCBwcmVmZXJlbmNlcyBjYW4KLQliZSBjaGFuZ2VkIHVzaW5nIHRoZSBTZXR0aW5ncyBkaWFsb2cuCisgICAgICAgIFRoZSBmb250IHByZWZlcmVuY2VzLCBoaWdobGlnaHRpbmcsIGtleXMsIGFuZCBnZW5lcmFsIHByZWZlcmVuY2VzIGNhbgorICAgICAgICBiZSBjaGFuZ2VkIHZpYSB0aGUgQ29uZmlndXJlIElETEUgbWVudSBvcHRpb24uICBCZSBzdXJlIHRvIG5vdGUgdGhhdAorICAgICAgICBrZXlzIGNhbiBiZSB1c2VyIGRlZmluZWQsIElETEUgc2hpcHMgd2l0aCBmb3VyIGJ1aWx0IGluIGtleSBzZXRzLiBJbgorICAgICAgICBhZGRpdGlvbiBhIHVzZXIgY2FuIGNyZWF0ZSBhIGN1c3RvbSBrZXkgc2V0IGluIHRoZSBDb25maWd1cmUgSURMRQorICAgICAgICBkaWFsb2cgdW5kZXIgdGhlIGtleXMgdGFiLgogCiBDb21tYW5kIGxpbmUgdXNhZ2U6CiAKLQlFbnRlciBpZGxlIC1oIGF0IHRoZSBjb21tYW5kIHByb21wdCB0byBnZXQgYSB1c2FnZSBtZXNzYWdlLgorICAgICAgICBFbnRlciBpZGxlIC1oIGF0IHRoZSBjb21tYW5kIHByb21wdCB0byBnZXQgYSB1c2FnZSBtZXNzYWdlLgogCi1SdW5uaW5nIHdpdGhvdXQgYSBzdWJwcm9jZXNzOgorICAgICAgICBpZGxlLnB5IFstYyBjb21tYW5kXSBbLWRdIFstZV0gWy1zXSBbLXQgdGl0bGVdIFthcmddIC4uLgogCi0JSWYgSURMRSBpcyBzdGFydGVkIHdpdGggdGhlIC1uIGNvbW1hbmQgbGluZSBzd2l0Y2ggaXQgd2lsbCBydW4gaW4gYQotCXNpbmdsZSBwcm9jZXNzIGFuZCB3aWxsIG5vdCBjcmVhdGUgdGhlIHN1YnByb2Nlc3Mgd2hpY2ggcnVucyB0aGUgUlBDCi0JUHl0aG9uIGV4ZWN1dGlvbiBzZXJ2ZXIuICBUaGlzIGNhbiBiZSB1c2VmdWwgaWYgUHl0aG9uIGNhbm5vdCBjcmVhdGUKLQl0aGUgc3VicHJvY2VzcyBvciB0aGUgUlBDIHNvY2tldCBpbnRlcmZhY2Ugb24geW91ciBwbGF0Zm9ybS4gIEhvd2V2ZXIsCi0JaW4gdGhpcyBtb2RlIHVzZXIgY29kZSBpcyBub3QgaXNvbGF0ZWQgZnJvbSBJRExFIGl0c2VsZi4gIEFsc28sIHRoZQotCWVudmlyb25tZW50IGlzIG5vdCByZXN0YXJ0ZWQgd2hlbiBSdW4vUnVuIE1vZHVsZSAoRjUpIGlzIHNlbGVjdGVkLiAgSWYKLQl5b3VyIGNvZGUgaGFzIGJlZW4gbW9kaWZpZWQsIHlvdSBtdXN0IHJlbG9hZCgpIHRoZSBhZmZlY3RlZCBtb2R1bGVzIGFuZAotCXJlLWltcG9ydCBhbnkgc3BlY2lmaWMgaXRlbXMgKGUuZy4gZnJvbSBmb28gaW1wb3J0IGJheikgaWYgdGhlIGNoYW5nZXMKLQlhcmUgdG8gdGFrZSBlZmZlY3QuICBGb3IgdGhlc2UgcmVhc29ucywgaXQgaXMgcHJlZmVyYWJsZSB0byBydW4gSURMRQotCXdpdGggdGhlIGRlZmF1bHQgc3VicHJvY2VzcyBpZiBhdCBhbGwgcG9zc2libGUuCisgICAgICAgIC1jIGNvbW1hbmQgIHJ1biB0aGlzIGNvbW1hbmQKKyAgICAgICAgLWQgICAgICAgICAgZW5hYmxlIGRlYnVnZ2VyCisgICAgICAgIC1lICAgICAgICAgIGVkaXQgbW9kZTsgYXJndW1lbnRzIGFyZSBmaWxlcyB0byBiZSBlZGl0ZWQKKyAgICAgICAgLXMgICAgICAgICAgcnVuICRJRExFU1RBUlRVUCBvciAkUFlUSE9OU1RBUlRVUCBmaXJzdAorICAgICAgICAtdCB0aXRsZSAgICBzZXQgdGl0bGUgb2Ygc2hlbGwgd2luZG93CisKKyAgICAgICAgSWYgdGhlcmUgYXJlIGFyZ3VtZW50czoKKyAgICAgICAgMS4gSWYgLWUgaXMgdXNlZCwgYXJndW1lbnRzIGFyZSBmaWxlcyBvcGVuZWQgZm9yIGVkaXRpbmcgYW5kIHN5cy5hcmd2CisgICAgICAgICAgIHJlZmxlY3RzIHRoZSBhcmd1bWVudHMgcGFzc2VkIHRvIElETEUgaXRzZWxmLgorICAgICAgICAyLiBPdGhlcndpc2UsIGlmIC1jIGlzIHVzZWQsIGFsbCBhcmd1bWVudHMgYXJlIHBsYWNlZCBpbgorICAgICAgICAgICBzeXMuYXJndlsxOi4uLl0sIHdpdGggc3lzLmFyZ3ZbMF0gc2V0IHRvIC1jLgorICAgICAgICAzLiBPdGhlcndpc2UsIGlmIG5laXRoZXIgLWUgbm9yIC1jIGlzIHVzZWQsIHRoZSBmaXJzdCBhcmd1bWVudCBpcyBhCisgICAgICAgICAgIHNjcmlwdCB3aGljaCBpcyBleGVjdXRlZCB3aXRoIHRoZSByZW1haW5pbmcgYXJndW1lbnRzIGluCisgICAgICAgICAgIHN5cy5hcmd2WzE6Li4uXSAgYW5kIHN5cy5hcmd2WzBdIHNldCB0byB0aGUgc2NyaXB0IG5hbWUuICBJZiB0aGUKKyAgICAgICAgICAgc2NyaXB0IG5hbWUgaXMgLSwgbm8gc2NyaXB0IGlzIGV4ZWN1dGVkIGJ1dCBhbiBpbnRlcmFjdGl2ZSBQeXRob24KKyAgICAgICAgICAgc2Vzc2lvbiBpcyBzdGFydGVkOyB0aGUgYXJndW1lbnRzIGFyZSBzdGlsbCBhdmFpbGFibGUgaW4gc3lzLmFyZ3YuCisKK1J1bm5pbmcgd2l0aG91dCBhIHN1YnByb2Nlc3M6IChERVBSRUNBVEVEIGluIFB5dGhvbiAzLjQgc2VlIElzc3VlIDE2MTIzKQorCisgICAgICAgIElmIElETEUgaXMgc3RhcnRlZCB3aXRoIHRoZSAtbiBjb21tYW5kIGxpbmUgc3dpdGNoIGl0IHdpbGwgcnVuIGluIGEKKyAgICAgICAgc2luZ2xlIHByb2Nlc3MgYW5kIHdpbGwgbm90IGNyZWF0ZSB0aGUgc3VicHJvY2VzcyB3aGljaCBydW5zIHRoZSBSUEMKKyAgICAgICAgUHl0aG9uIGV4ZWN1dGlvbiBzZXJ2ZXIuICBUaGlzIGNhbiBiZSB1c2VmdWwgaWYgUHl0aG9uIGNhbm5vdCBjcmVhdGUKKyAgICAgICAgdGhlIHN1YnByb2Nlc3Mgb3IgdGhlIFJQQyBzb2NrZXQgaW50ZXJmYWNlIG9uIHlvdXIgcGxhdGZvcm0uICBIb3dldmVyLAorICAgICAgICBpbiB0aGlzIG1vZGUgdXNlciBjb2RlIGlzIG5vdCBpc29sYXRlZCBmcm9tIElETEUgaXRzZWxmLiAgQWxzbywgdGhlCisgICAgICAgIGVudmlyb25tZW50IGlzIG5vdCByZXN0YXJ0ZWQgd2hlbiBSdW4vUnVuIE1vZHVsZSAoRjUpIGlzIHNlbGVjdGVkLiAgSWYKKyAgICAgICAgeW91ciBjb2RlIGhhcyBiZWVuIG1vZGlmaWVkLCB5b3UgbXVzdCByZWxvYWQoKSB0aGUgYWZmZWN0ZWQgbW9kdWxlcyBhbmQKKyAgICAgICAgcmUtaW1wb3J0IGFueSBzcGVjaWZpYyBpdGVtcyAoZS5nLiBmcm9tIGZvbyBpbXBvcnQgYmF6KSBpZiB0aGUgY2hhbmdlcworICAgICAgICBhcmUgdG8gdGFrZSBlZmZlY3QuICBGb3IgdGhlc2UgcmVhc29ucywgaXQgaXMgcHJlZmVyYWJsZSB0byBydW4gSURMRQorICAgICAgICB3aXRoIHRoZSBkZWZhdWx0IHN1YnByb2Nlc3MgaWYgYXQgYWxsIHBvc3NpYmxlLgogCiBFeHRlbnNpb25zOgogCi0JSURMRSBjb250YWlucyBhbiBleHRlbnNpb24gZmFjaWxpdHkuICBTZWUgdGhlIGJlZ2lubmluZyBvZgotCWNvbmZpZy1leHRlbnNpb25zLmRlZiBpbiB0aGUgaWRsZWxpYiBkaXJlY3RvcnkgZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24uCi0JVGhlIGRlZmF1bHQgZXh0ZW5zaW9ucyBhcmUgY3VycmVudGx5OgorICAgICAgICBJRExFIGNvbnRhaW5zIGFuIGV4dGVuc2lvbiBmYWNpbGl0eS4gIFNlZSB0aGUgYmVnaW5uaW5nIG9mCisgICAgICAgIGNvbmZpZy1leHRlbnNpb25zLmRlZiBpbiB0aGUgaWRsZWxpYiBkaXJlY3RvcnkgZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24uCisgICAgICAgIFRoZSBkZWZhdWx0IGV4dGVuc2lvbnMgYXJlIGN1cnJlbnRseToKIAotCQlGb3JtYXRQYXJhZ3JhcGgKLQkJQXV0b0V4cGFuZAotCQlab29tSGVpZ2h0Ci0JCVNjcmlwdEJpbmRpbmcKLQkJQ2FsbFRpcHMKLQkJUGFyZW5NYXRjaAotCQlBdXRvQ29tcGxldGUKLQkJQ29kZUNvbnRleHQKKyAgICAgICAgICAgICAgICBGb3JtYXRQYXJhZ3JhcGgKKyAgICAgICAgICAgICAgICBBdXRvRXhwYW5kCisgICAgICAgICAgICAgICAgWm9vbUhlaWdodAorICAgICAgICAgICAgICAgIFNjcmlwdEJpbmRpbmcKKyAgICAgICAgICAgICAgICBDYWxsVGlwcworICAgICAgICAgICAgICAgIFBhcmVuTWF0Y2gKKyAgICAgICAgICAgICAgICBBdXRvQ29tcGxldGUKKyAgICAgICAgICAgICAgICBDb2RlQ29udGV4dApkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvaWRsZS5iYXQgYi9MaWIvaWRsZWxpYi9pZGxlLmJhdAppbmRleCBlNzdiOTZlLi4zZDYxOWEzIDEwMDc1NQotLS0gYS9MaWIvaWRsZWxpYi9pZGxlLmJhdAorKysgYi9MaWIvaWRsZWxpYi9pZGxlLmJhdApAQCAtMSw0ICsxLDQgQEAKLUBlY2hvIG9mZgotcmVtIFN0YXJ0IElETEUgdXNpbmcgdGhlIGFwcHJvcHJpYXRlIFB5dGhvbiBpbnRlcnByZXRlcgotc2V0IENVUlJESVI9JX5kcDAKLXN0YXJ0ICJJRExFIiAiJUNVUlJESVIlLi5cLi5ccHl0aG9udy5leGUiICIlQ1VSUkRJUiVpZGxlLnB5dyIgJTEgJTIgJTMgJTQgJTUgJTYgJTcgJTggJTkKK0BlY2hvIG9mZg0KK3JlbSBTdGFydCBJRExFIHVzaW5nIHRoZSBhcHByb3ByaWF0ZSBQeXRob24gaW50ZXJwcmV0ZXINCitzZXQgQ1VSUkRJUj0lfmRwMA0KK3N0YXJ0ICJJRExFIiAiJUNVUlJESVIlLi5cLi5ccHl0aG9udy5leGUiICIlQ1VSUkRJUiVpZGxlLnB5dyIgJTEgJTIgJTMgJTQgJTUgJTYgJTcgJTggJTkNCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9pZGxlLnB5dyBiL0xpYi9pZGxlbGliL2lkbGUucHl3CmluZGV4IDBkYjVmZDQuLjE0MmNiMzIgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL2lkbGUucHl3CisrKyBiL0xpYi9pZGxlbGliL2lkbGUucHl3CkBAIC0yLDIwICsyLDE2IEBACiAgICAgaW1wb3J0IGlkbGVsaWIuUHlTaGVsbAogZXhjZXB0IEltcG9ydEVycm9yOgogICAgICMgSURMRSBpcyBub3QgaW5zdGFsbGVkLCBidXQgbWF5YmUgUHlTaGVsbCBpcyBvbiBzeXMucGF0aDoKLSAgICB0cnk6Ci0gICAgICAgIGZyb20gLiBpbXBvcnQgUHlTaGVsbAotICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAgICAgcmFpc2UKLSAgICBlbHNlOgotICAgICAgICBpbXBvcnQgb3MKLSAgICAgICAgaWRsZWRpciA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoUHlTaGVsbC5fX2ZpbGVfXykpCi0gICAgICAgIGlmIGlkbGVkaXIgIT0gb3MuZ2V0Y3dkKCk6Ci0gICAgICAgICAgICAjIFdlJ3JlIG5vdCBpbiB0aGUgSURMRSBkaXJlY3RvcnksIGhlbHAgdGhlIHN1YnByb2Nlc3MgZmluZCBydW4ucHkKLSAgICAgICAgICAgIHB5cGF0aCA9IG9zLmVudmlyb24uZ2V0KCdQWVRIT05QQVRIJywgJycpCi0gICAgICAgICAgICBpZiBweXBhdGg6Ci0gICAgICAgICAgICAgICAgb3MuZW52aXJvblsnUFlUSE9OUEFUSCddID0gcHlwYXRoICsgJzonICsgaWRsZWRpcgotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBvcy5lbnZpcm9uWydQWVRIT05QQVRIJ10gPSBpZGxlZGlyCi0gICAgICAgIFB5U2hlbGwubWFpbigpCisgICAgZnJvbSAuIGltcG9ydCBQeVNoZWxsCisgICAgaW1wb3J0IG9zCisgICAgaWRsZWRpciA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoUHlTaGVsbC5fX2ZpbGVfXykpCisgICAgaWYgaWRsZWRpciAhPSBvcy5nZXRjd2QoKToKKyAgICAgICAgIyBXZSdyZSBub3QgaW4gdGhlIElETEUgZGlyZWN0b3J5LCBoZWxwIHRoZSBzdWJwcm9jZXNzIGZpbmQgcnVuLnB5CisgICAgICAgIHB5cGF0aCA9IG9zLmVudmlyb24uZ2V0KCdQWVRIT05QQVRIJywgJycpCisgICAgICAgIGlmIHB5cGF0aDoKKyAgICAgICAgICAgIG9zLmVudmlyb25bJ1BZVEhPTlBBVEgnXSA9IHB5cGF0aCArICc6JyArIGlkbGVkaXIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG9zLmVudmlyb25bJ1BZVEhPTlBBVEgnXSA9IGlkbGVkaXIKKyAgICBQeVNoZWxsLm1haW4oKQogZWxzZToKICAgICBpZGxlbGliLlB5U2hlbGwubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9pZGxlX3Rlc3QvUkVBRE1FLnR4dCBiL0xpYi9pZGxlbGliL2lkbGVfdGVzdC9SRUFETUUudHh0CmluZGV4IDZiOTI0ODMuLjIzMzk5MjYgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL2lkbGVfdGVzdC9SRUFETUUudHh0CisrKyBiL0xpYi9pZGxlbGliL2lkbGVfdGVzdC9SRUFETUUudHh0CkBAIC0xLDE0ICsxLDI0IEBACiBSRUFETUUgRk9SIElETEUgVEVTVFMgSU4gSURMRUxJQi5JRExFX1RFU1QKIAorMC4gUXVpY2sgU3RhcnQKKworQXV0b21hdGVkIHVuaXQgdGVzdHMgd2VyZSBhZGRlZCBpbiAyLjcgZm9yIFB5dGhvbiAyLnggYW5kIDMuMyBmb3IgUHl0aG9uIDMueC4KK1RvIHJ1biB0aGUgdGVzdHMgZnJvbSBhIGNvbW1hbmQgbGluZToKKworcHl0aG9uIC1tIHRlc3QudGVzdF9pZGxlCisKK0h1bWFuLW1lZGlhdGVkIHRlc3RzIHdlcmUgYWRkZWQgbGF0ZXIgaW4gMi43IGFuZCBpbiAzLjQuCisKK3B5dGhvbiAtbSBpZGxlbGliLmlkbGVfdGVzdC5odGVzdAorCiAKIDEuIFRlc3QgRmlsZXMKIAogVGhlIGlkbGUgZGlyZWN0b3J5LCBpZGxlbGliLCBoYXMgb3ZlciA2MCB4eXoucHkgZmlsZXMuIFRoZSBpZGxlX3Rlc3QKLXN1YmRpcmVjdG9yeSBzaG91bGQgY29udGFpbiBhIHRlc3RfeHl5LnB5IGZvciBlYWNoLiAoRm9yIHRlc3QgbW9kdWxlcywgbWFrZQotJ3h5eicgbG93ZXIgY2FzZSwgYW5kIHBvc3NpYmx5IHNob3J0ZW4gaXQuKSBFYWNoIGZpbGUgc2hvdWxkIHN0YXJ0IHdpdGggdGhlCi1zb21ldGhpbmcgbGlrZSB0aGUgZm9sbG93aW5nIHRlbXBsYXRlLCB3aXRoIHRoZSBibGFua3MgYWZ0ZXIgYWZ0ZXIgJy4nIGFuZCAnYXMnLAotYW5kIGJlZm9yZSBhbmQgYWZ0ZXIgJ18nIGZpbGxlZCBpbi4KLS0tLQorc3ViZGlyZWN0b3J5IHNob3VsZCBjb250YWluIGEgdGVzdF94eXoucHkgZm9yIGVhY2gsIHdoZXJlICd4eXonIGlzIGxvd2VyY2FzZWQKK2V2ZW4gaWYgeHl6LnB5IGlzIG5vdC4gSGVyZSBpcyBhIHBvc3NpYmxlIHRlbXBsYXRlLCB3aXRoIHRoZSBibGFua3MgYWZ0ZXIgYWZ0ZXIKKycuJyBhbmQgJ2FzJywgYW5kIGJlZm9yZSBhbmQgYWZ0ZXIgJ18nIHRvIGJlIGZpbGxlZCBpbi4KKwogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcmVxdWlyZXMKIGltcG9ydCBpZGxlbGliLiBhcwpAQCAtMTgsMzQgKzI4LDMzIEBACiAgICAgZGVmIHRlc3RfKHNlbGYpOgogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHVuaXR0ZXN0Lm1haW4odmVyYm9zaXR5PTIsIGV4aXQ9MikKLS0tLQotSWRsZSB0ZXN0cyBhcmUgcnVuIHdpdGggdW5pdHRlc3Q7IGRvIG5vdCB1c2UgcmVncnRlc3QncyB0ZXN0X21haW4uCisgICAgdW5pdHRlc3QubWFpbih2ZXJib3NpdHk9MikKIAotT25jZSB0ZXN0X3h5eSBpcyB3cml0dGVuLCB0aGUgZm9sbG93aW5nIHNob3VsZCBnbyBhdCB0aGUgZW5kIG9mIHh5eS5weSwKLXdpdGggeHl6IChsb3dlcmNhc2VkKSBhZGRlZCBhZnRlciAndGVzdF8nLgotLS0tCitBZGQgdGhlIGZvbGxvd2luZyBhdCB0aGUgZW5kIG9mIHh5eS5weSwgd2l0aCB0aGUgYXBwcm9wcmlhdGUgbmFtZSBhZGRlZCBhZnRlcgorJ3Rlc3RfJy4gU29tZSBmaWxlcyBhbHJlYWR5IGhhdmUgc29tZXRoaW5nIGxpa2UgdGhpcyBmb3IgaHRlc3QuICBJZiBzbywgaW5zZXJ0Cit0aGUgaW1wb3J0IGFuZCB1bml0dGVzdC5tYWluIGxpbmVzIGJlZm9yZSB0aGUgaHRlc3QgbGluZXMuCisKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0OyBzdXBwb3J0LnVzZV9yZXNvdXJjZXMgPSBbJ2d1aSddCiAgICAgaW1wb3J0IHVuaXR0ZXN0CiAgICAgdW5pdHRlc3QubWFpbignaWRsZWxpYi5pZGxlX3Rlc3QudGVzdF8nLCB2ZXJib3NpdHk9MiwgZXhpdD1GYWxzZSkKLS0tLQogCiAKLTIuIEd1aSBUZXN0cwogCi1HdWkgdGVzdHMgbmVlZCAncmVxdWlyZXMnIGFuZCAndXNlX3Jlc291cmNlcycgZnJvbSB0ZXN0LnN1cHBvcnQKLSh0ZXN0LnRlc3Rfc3VwcG9ydCBpbiAyLjcpLiBBIHRlc3QgaXMgYSBndWkgdGVzdCBpZiBpdCBjcmVhdGVzIGEgVGsgcm9vdCBvcgotbWFzdGVyIG9iamVjdCBlaXRoZXIgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBieSBpbnN0YW50aWF0aW5nIGEgdGtpbnRlciBvcgotaWRsZSBjbGFzcy4gRm9yIHRoZSBiZW5lZml0IG9mIGJ1aWxkYm90IG1hY2hpbmVzIHRoYXQgZG8gbm90IGhhdmUgYSBncmFwaGljcwotc2NyZWVuLCBndWkgdGVzdHMgbXVzdCBiZSAnZ3VhcmRlZCcgYnkgInJlcXVpcmVzKCdndWknKSIgaW4gYSBzZXRVcAotZnVuY3Rpb24gb3IgbWV0aG9kLiBUaGlzIHdpbGwgdHlwaWNhbGx5IGJlIHNldFVwQ2xhc3MuCisyLiBHVUkgVGVzdHMKIAotVG8gYXZvaWQgaW50ZXJmZXJpbmcgd2l0aCBvdGhlciBndWkgdGVzdHMsIGFsbCBndWkgb2JqZWN0cyBtdXN0IGJlIGRlc3Ryb3llZAotYW5kIGRlbGV0ZWQgYnkgdGhlIGVuZCBvZiB0aGUgdGVzdC4gIElmIGEgd2lkZ2V0LCBzdWNoIGFzIGEgVGsgcm9vdCwgaXMgY3JlYXRlZAotaW4gYSBzZXRVcFggZnVuY3Rpb24sIGRlc3Ryb3kgaXQgaW4gdGhlIGNvcnJlc3BvbmRpbmcgdGVhckRvd25YLiAgRm9yIG1vZHVsZQotYW5kIGNsYXNzIGF0dHJpYnV0ZXMsIGFsc28gZGVsZXRlIHRoZSB3aWRnZXQuCi0tLS0KK1doZW4gcnVuIGFzIHBhcnQgb2YgdGhlIFB5dGhvbiB0ZXN0IHN1aXRlLCBJZGxlIGd1aSB0ZXN0cyBuZWVkIHRvIHJ1bgordGVzdC5zdXBwb3J0LnJlcXVpcmVzKCdndWknKSAodGVzdC50ZXN0X3N1cHBvcnQgaW4gMi43KS4gIEEgdGVzdCBpcyBhIGd1aSB0ZXN0CitpZiBpdCBjcmVhdGVzIGEgVGsgcm9vdCBvciBtYXN0ZXIgb2JqZWN0IGVpdGhlciBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGJ5CitpbnN0YW50aWF0aW5nIGEgdGtpbnRlciBvciBpZGxlIGNsYXNzLiAgRm9yIHRoZSBiZW5lZml0IG9mIHRlc3QgcHJvY2Vzc2VzIHRoYXQKK2VpdGhlciBoYXZlIG5vIGdyYXBoaWNhbCBlbnZpcm9ubWVudCBhdmFpbGFibGUgb3IgYXJlIG5vdCBhbGxvd2VkIHRvIHVzZSBpdCwgZ3VpCit0ZXN0cyBtdXN0IGJlICdndWFyZGVkJyBieSAicmVxdWlyZXMoJ2d1aScpIiBpbiBhIHNldFVwIGZ1bmN0aW9uIG9yIG1ldGhvZC4KK1RoaXMgd2lsbCB0eXBpY2FsbHkgYmUgc2V0VXBDbGFzcy4KKworVG8gYXZvaWQgaW50ZXJmZXJpbmcgd2l0aCBvdGhlciBndWkgdGVzdHMsIGFsbCBndWkgb2JqZWN0cyBtdXN0IGJlIGRlc3Ryb3llZCBhbmQKK2RlbGV0ZWQgYnkgdGhlIGVuZCBvZiB0aGUgdGVzdC4gIFdpZGdldHMsIHN1Y2ggYXMgYSBUayByb290LCBjcmVhdGVkIGluIGEgc2V0VXBYCitmdW5jdGlvbiwgc2hvdWxkIGJlIGRlc3Ryb3llZCBpbiB0aGUgY29ycmVzcG9uZGluZyB0ZWFyRG93blguICBNb2R1bGUgYW5kIGNsYXNzCit3aWRnZXQgYXR0cmlidXRlcyBzaG91bGQgYWxzbyBiZSBkZWxldGVkLi4KKwogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBzZXRVcENsYXNzKGNscyk6CiAgICAgICAgIHJlcXVpcmVzKCdndWknKQpAQCAtNTUsNTYgKzY0LDgwIEBACiAgICAgZGVmIHRlYXJEb3duQ2xhc3MoY2xzKToKICAgICAgICAgY2xzLnJvb3QuZGVzdHJveSgpCiAgICAgICAgIGRlbCBjbHMucm9vdAotLS0tCi0KLVN1cHBvcnQucmVxdWlyZXMoJ2d1aScpIHJldHVybnMgdHJ1ZSBpZiBpdCBpcyBlaXRoZXIgY2FsbGVkIGluIGEgbWFpbiBtb2R1bGUKLSh3aGljaCBuZXZlciBoYXBwZW5zIG9uIGJ1aWxkYm90cykgb3IgaWYgdXNlX3Jlc291cmNlcyBjb250YWlucyAnZ3VpJy4KLVVzZV9yZXNvdXJjZXMgaXMgc2V0IGJ5IHRlc3QucmVncnRlc3QgYnV0IG5vdCBieSB1bml0dGVzdC4gU28gd2hlbiBydW5uaW5nCi10ZXN0cyBpbiBhbm90aGVyIG1vZHVsZSB3aXRoIHVuaXR0ZXN0LCB3ZSBzZXQgaXQgb3Vyc2VsdmVzLCBhcyBpbiB0aGUgeHl6LnB5Ci10ZW1wbGF0ZSBhYm92ZS4KLQotU2luY2Ugbm9uLWd1aSB0ZXN0cyBhbHdheXMgcnVuLCBidXQgZ3VpIHRlc3RzIG9ubHkgc29tZXRpbWVzLCB0ZXN0cyBvZiBub24tZ3VpCi1vcGVyYXRpb25zIHNob3VsZCBiZXN0IGF2b2lkIG5lZWRpbmcgYSBndWkuIE1ldGhvZHMgdGhhdCBtYWtlIGluY2lkZW50YWwgdXNlIG9mCi10a2ludGVyICh0aykgdmFyaWFibGVzIGFuZCBtZXNzYWdlYm94ZXMgY2FuIGRvIHRoaXMgYnkgdXNpbmcgdGhlIG1vY2sgY2xhc3NlcyBpbgotaWRsZV90ZXN0L21vY2tfdGsucHkuIFRoZXJlIGlzIGFsc28gYSBtb2NrIHRleHQgdGhhdCB3aWxsIGhhbmRsZSBzb21lIHVzZXMgb2YgdGhlCi10ayBUZXh0IHdpZGdldC4KIAogCi0zLiBSdW5uaW5nIFRlc3RzCitSZXF1aXJlcygnZ3VpJykgY2F1c2VzIHRoZSB0ZXN0KHMpIGl0IGd1YXJkcyB0byBiZSBza2lwcGVkIGlmIGFueSBvZgorYSBmZXcgY29uZGl0aW9ucyBhcmUgbWV0OgorICAgIAorIC0gVGhlIHRlc3RzIGFyZSBiZWluZyBydW4gYnkgcmVncnRlc3QucHksIGFuZCBpdCB3YXMgc3RhcnRlZCB3aXRob3V0IGVuYWJsaW5nCisgICB0aGUgImd1aSIgcmVzb3VyY2Ugd2l0aCB0aGUgIi11IiBjb21tYW5kIGxpbmUgb3B0aW9uLgorICAgCisgLSBUaGUgdGVzdHMgYXJlIGJlaW5nIHJ1biBvbiBXaW5kb3dzIGJ5IGEgc2VydmljZSB0aGF0IGlzIG5vdCBhbGxvd2VkIHRvCisgICBpbnRlcmFjdCB3aXRoIHRoZSBncmFwaGljYWwgZW52aXJvbm1lbnQuCisgICAKKyAtIFRoZSB0ZXN0cyBhcmUgYmVpbmcgcnVuIG9uIE1hYyBPU1ggaW4gYSBwcm9jZXNzIHRoYXQgY2Fubm90IG1ha2UgYSB3aW5kb3cKKyAgIG1hbmFnZXIgY29ubmVjdGlvbi4KKyAgIAorIC0gdGtpbnRlci5UayBjYW5ub3QgYmUgc3VjY2Vzc2Z1bGx5IGluc3RhbnRpYXRlZCBmb3Igc29tZSByZWFzb24uCisgCisgLSB0ZXN0LnN1cHBvcnQudXNlX3Jlc291cmNlcyBoYXMgYmVlbiBzZXQgYnkgc29tZXRoaW5nIG90aGVyIHRoYW4KKyAgIHJlZ3J0ZXN0LnB5IGFuZCBkb2VzIG5vdCBjb250YWluICJndWkiLgorICAgCitUZXN0cyBvZiBub24tZ3VpIG9wZXJhdGlvbnMgc2hvdWxkIGF2b2lkIGNyZWF0aW5nIHRrIHdpZGdldHMuIEluY2lkZW50YWwgdXNlcyBvZgordGsgdmFyaWFibGVzIGFuZCBtZXNzYWdlYm94ZXMgY2FuIGJlIHJlcGxhY2VkIGJ5IHRoZSBtb2NrIGNsYXNzZXMgaW4KK2lkbGVfdGVzdC9tb2NrX3RrLnB5LiBUaGUgbW9jayB0ZXh0IGhhbmRsZXMgc29tZSB1c2VzIG9mIHRoZSB0ayBUZXh0IHdpZGdldC4KIAotQXNzdW1lIHRoYXQgeHl6LnB5IGFuZCB0ZXN0X3h5ei5weSBlbmQgd2l0aCB0aGUgImlmIF9fbmFtZV9fIiBzdGF0ZW1lbnRzIGdpdmVuCi1hYm92ZS4gSW4gSWRsZSwgcHJlc3NpbmcgRjUgaW4gYW4gZWRpdG9yIHdpbmRvdyB3aXRoIGVpdGhlciBsb2FkZWQgd2lsbCBydW4gYWxsCi10ZXN0cyBpbiB0aGUgdGVzdF94eXogZmlsZSB3aXRoIHRoZSB2ZXJzaW9uIG9mIFB5dGhvbiBydW5uaW5nIElkbGUuICBUaGUgdGVzdAotcmVwb3J0IGFuZCBhbnkgdHJhY2ViYWNrcyB3aWxsIGFwcGVhciBpbiB0aGUgU2hlbGwgd2luZG93LiBUaGUgb3B0aW9ucyBpbiB0aGVzZQotImlmIF9fbmFtZV9fIiBzdGF0ZW1lbnRzIGFyZSBhcHByb3ByaWF0ZSBmb3IgZGV2ZWxvcGVycyBydW5uaW5nIChhcyBvcHBvc2VkIHRvCi1pbXBvcnRpbmcpIGVpdGhlciBvZiB0aGUgZmlsZXMgZHVyaW5nIGRldmVsb3BtZW50OiB2ZXJib3NpdHk9MiBsaXN0cyBhbGwgdGVzdAotbWV0aG9kcyBpbiB0aGUgZmlsZTsgZXhpdD1GYWxzZSBhdm9pZHMgYSBzcHVyaW91cyBzeXMuZXhpdCB0cmFjZWJhY2sgdGhhdCB3b3VsZAotb3RoZXJ3aXNlIG9jY3VyIHdoZW4gcnVubmluZyBpbiBJZGxlLiBUaGUgZm9sbG93aW5nIGNvbW1hbmQgbGluZXMgYWxzbyBydW4KLWFsbCB0ZXN0IG1ldGhvZHMsIGluY2x1ZGluZyBndWkgdGVzdHMsIGluIHRlc3RfeHl6LnB5LiAoVGhlIGV4Y2VwdGlvbnMgYXJlIHRoYXQKLWlkbGVsaWIgYW5kIGlkbGVsaWIuaWRsZSBzdGFydCBJZGxlIGFuZCBpZGxlbGliLlB5U2hlbGwgc2hvdWxkIChpc3N1ZSAxODMzMCkuKQogCi1weXRob24gLW0gaWRsZWxpYi54eXogICMgV2l0aCB0aGUgY2FwaXRhbGl6YXRpb24gb2YgdGhlIHh5eiBtb2R1bGUKKzMuIFJ1bm5pbmcgVW5pdCBUZXN0cworCitBc3N1bWUgdGhhdCB4eXoucHkgYW5kIHRlc3RfeHl6LnB5IGJvdGggZW5kIHdpdGggYSB1bml0dGVzdC5tYWluKCkgY2FsbC4KK1J1bm5pbmcgZWl0aGVyIGZyb20gYW4gSWRsZSBlZGl0b3IgcnVucyBhbGwgdGVzdHMgaW4gdGhlIHRlc3RfeHl6IGZpbGUgd2l0aCB0aGUKK3ZlcnNpb24gb2YgUHl0aG9uIHJ1bm5pbmcgSWRsZS4gIFRlc3Qgb3V0cHV0IGFwcGVhcnMgaW4gdGhlIFNoZWxsIHdpbmRvdy4gIFRoZQorJ3ZlcmJvc2l0eT0yJyBvcHRpb24gbGlzdHMgYWxsIHRlc3QgbWV0aG9kcyBpbiB0aGUgZmlsZSwgd2hpY2ggaXMgYXBwcm9wcmlhdGUKK3doZW4gZGV2ZWxvcGluZyB0ZXN0cy4gVGhlICdleGl0PUZhbHNlJyBvcHRpb24gaXMgbmVlZGVkIGluIHh5eC5weSBmaWxlcyB3aGVuIGFuCitodGVzdCBmb2xsb3dzLgorCitUaGUgZm9sbG93aW5nIGNvbW1hbmQgbGluZXMgYWxzbyBydW4gYWxsIHRlc3QgbWV0aG9kcywgaW5jbHVkaW5nCitndWkgdGVzdHMsIGluIHRlc3RfeHl6LnB5LiAoQm90aCAnLW0gaWRsZWxpYicgYW5kICctbSBpZGxlbGliLmlkbGUnIHN0YXJ0CitJZGxlIGFuZCBzbyBjYW5ub3QgcnVuIHRlc3RzLikKKworcHl0aG9uIC1tIGlkbGVsaWIueHl6CiBweXRob24gLW0gaWRsZWxpYi5pZGxlX3Rlc3QudGVzdF94eXoKIAotVG8gcnVuIGFsbCBpZGxlX3Rlc3QvdGVzdF8qLnB5IHRlc3RzLCBlaXRoZXIgaW50ZXJhY3RpdmVseQotKCc+Pj4nLCB3aXRoIHVuaXR0ZXN0IGltcG9ydGVkKSBvciBmcm9tIGEgY29tbWFuZCBsaW5lLCB1c2Ugb25lIG9mIHRoZQotZm9sbG93aW5nLiAoTm90ZXM6IHVuaXR0ZXN0IGRvZXMgbm90IHJ1biBndWkgdGVzdHM7IGluIDIuNywgJ3Rlc3QgJyAod2l0aCB0aGUKLXNwYWNlKSBpcyAndGVzdC5yZWdydGVzdCAnOyB3aGVyZSBwcmVzZW50LCAtdiBhbmQgLXVndWkgY2FuIGJlIG9taXR0ZWQuKQorVGhlIGZvbGxvd2luZyBydW5zIGFsbCBpZGxlX3Rlc3QvdGVzdF8qLnB5IHRlc3RzIGludGVyYWN0aXZlbHkuCiAKLT4+PiB1bml0dGVzdC5tYWluKCdpZGxlbGliLmlkbGVfdGVzdCcsIHZlcmJvc2l0eT0yLCBleGl0PUZhbHNlKQorPj4+IGltcG9ydCB1bml0dGVzdAorPj4+IHVuaXR0ZXN0Lm1haW4oJ2lkbGVsaWIuaWRsZV90ZXN0JywgdmVyYm9zaXR5PTIpCisKK1RoZSBmb2xsb3dpbmcgcnVuIGFsbCBJZGxlIHRlc3RzIGF0IGEgY29tbWFuZCBsaW5lLiAgT3B0aW9uICctdicgaXMgdGhlIHNhbWUgYXMKKyd2ZXJib3NpdHk9MicuICAoRm9yIDIuNywgcmVwbGFjZSAndGVzdCcgaW4gdGhlIHNlY29uZCBsaW5lIHdpdGgKKyd0ZXN0LnJlZ3J0ZXN0Jy4pCisKIHB5dGhvbiAtbSB1bml0dGVzdCAtdiBpZGxlbGliLmlkbGVfdGVzdAogcHl0aG9uIC1tIHRlc3QgLXYgLXVndWkgdGVzdF9pZGxlCiBweXRob24gLW0gdGVzdC50ZXN0X2lkbGUKIAogVGhlIGlkbGUgdGVzdHMgYXJlICdkaXNjb3ZlcmVkJyBieSBpZGxlbGliLmlkbGVfdGVzdC5fX2luaXRfXy5sb2FkX3Rlc3RzLAogd2hpY2ggaXMgYWxzbyBpbXBvcnRlZCBpbnRvIHRlc3QudGVzdF9pZGxlLiBOb3JtYWxseSwgbmVpdGhlciBmaWxlIHNob3VsZCBiZQotY2hhbmdlZCB3aGVuIHdvcmtpbmcgb24gaW5kaXZpZHVhbCB0ZXN0IG1vZHVsZXMuIFRoZSB0aGlyZCBjb21tYW5kIHJ1bnMgcnVucworY2hhbmdlZCB3aGVuIHdvcmtpbmcgb24gaW5kaXZpZHVhbCB0ZXN0IG1vZHVsZXMuIFRoZSB0aGlyZCBjb21tYW5kIHJ1bnMKIHVuaXR0ZXN0IGluZGlyZWN0bHkgdGhyb3VnaCByZWdydGVzdC4gVGhlIHNhbWUgaGFwcGVucyB3aGVuIHRoZSBlbnRpcmUgdGVzdAogc3VpdGUgaXMgcnVuIHdpdGggJ3B5dGhvbiAtbSB0ZXN0Jy4gU28gdGhhdCBjb21tYW5kIG11c3Qgd29yayBmb3IgYnVpbGRib3RzCiB0byBzdGF5IGdyZWVuLiBJZGxlIHRlc3RzIG11c3Qgbm90IGRpc3R1cmIgdGhlIGVudmlyb25tZW50IGluIGEgd2F5IHRoYXQKIG1ha2VzIG90aGVyIHRlc3RzIGZhaWwgKGlzc3VlIDE4MDgxKS4KIAogVG8gcnVuIGFuIGluZGl2aWR1YWwgVGVzdGNhc2Ugb3IgdGVzdCBtZXRob2QsIGV4dGVuZCB0aGUgZG90dGVkIG5hbWUgZ2l2ZW4gdG8KLXVuaXR0ZXN0IG9uIHRoZSBjb21tYW5kIGxpbmUuIChCdXQgZ3VpIHRlc3RzIHdpbGwgbm90IHRoaXMgd2F5LikKK3VuaXR0ZXN0IG9uIHRoZSBjb21tYW5kIGxpbmUuCiAKIHB5dGhvbiAtbSB1bml0dGVzdCAtdiBpZGxlbGliLmlkbGVfdGVzdC50ZXN0X3h5ei5UZXN0X2Nhc2UudGVzdF9tZXRoCisKKworNC4gSHVtYW4tbWVkaWF0ZWQgVGVzdHMKKworSHVtYW4tbWVkaWF0ZWQgdGVzdHMgYXJlIHdpZGdldCB0ZXN0cyB0aGF0IGNhbm5vdCBiZSBhdXRvbWF0ZWQgYnV0IG5lZWQgaHVtYW4KK3ZlcmlmaWNhdGlvbi4gVGhleSBhcmUgY29udGFpbmVkIGluIGlkbGVsaWIvaWRsZV90ZXN0L2h0ZXN0LnB5LCB3aGljaCBoYXMKK2luc3RydWN0aW9ucy4gIChTb21lIG1vZHVsZXMgbmVlZCBhbiBhdXhpbGlhcnkgZnVuY3Rpb24sIGlkZW50aWZpZWQgd2l0aCAjIGh0ZXN0CisjIG9uIHRoZSBoZWFkZXIgbGluZS4pICBUaGUgc2V0IGlzIGFib3V0IGNvbXBsZXRlLCB0aG91Z2ggc29tZSB0ZXN0cyBuZWVkCitpbXByb3ZlbWVudC4gVG8gcnVuIGFsbCBodGVzdHMsIHJ1biB0aGUgaHRlc3QgZmlsZSBmcm9tIGFuIGVkaXRvciBvciBmcm9tIHRoZQorY29tbWFuZCBsaW5lIHdpdGg6CisKK3B5dGhvbiAtbSBpZGxlbGliLmlkbGVfdGVzdC5odGVzdApkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvaWRsZV90ZXN0L2h0ZXN0LnB5IGIvTGliL2lkbGVsaWIvaWRsZV90ZXN0L2h0ZXN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlMjQ1MTgKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvaWRsZWxpYi9pZGxlX3Rlc3QvaHRlc3QucHkKQEAgLTAsMCArMSw0MDEgQEAKKycnJ1J1biBodW1hbiB0ZXN0cyBvZiBJZGxlJ3Mgd2luZG93LCBkaWFsb2csIGFuZCBwb3B1cCB3aWRnZXRzLgorCitydW4oKnRlc3RzKQorQ3JlYXRlIGEgbWFzdGVyIFRrIHdpbmRvdy4gIFdpdGhpbiB0aGF0LCBydW4gZWFjaCBjYWxsYWJsZSBpbiB0ZXN0cworYWZ0ZXIgZmluZGluZyB0aGUgbWF0Y2hpbmcgdGVzdCBzcGVjIGluIHRoaXMgZmlsZS4gIElmIHRlc3RzIGlzIGVtcHR5LAorcnVuIGFuIGh0ZXN0IGZvciBlYWNoIHNwZWMgZGljdCBpbiB0aGlzIGZpbGUgYWZ0ZXIgZmluZGluZyB0aGUgbWF0Y2hpbmcKK2NhbGxhYmxlIGluIHRoZSBtb2R1bGUgbmFtZWQgaW4gdGhlIHNwZWMuICBDbG9zZSB0aGUgd2luZG93IHRvIHNraXAgb3IKK2VuZCB0aGUgdGVzdC4KKworSW4gYSB0ZXN0ZWQgbW9kdWxlLCBsZXQgWCBiZSBhIGdsb2JhbCBuYW1lIGJvdW5kIHRvIGEgY2FsbGFibGUgKGNsYXNzCitvciBmdW5jdGlvbikgd2hvc2UgLl9fbmFtZV9fIGF0dHJ1YnV0ZSBpcyBhbHNvIFggKHRoZSB1c3VhbCBzaXR1YXRpb24pLgorVGhlIGZpcnN0IHBhcmFtZXRlciBvZiBYIG11c3QgYmUgJ3BhcmVudCcuICBXaGVuIGNhbGxlZCwgdGhlIHBhcmVudAorYXJndW1lbnQgd2lsbCBiZSB0aGUgcm9vdCB3aW5kb3cuICBYIG11c3QgY3JlYXRlIGEgY2hpbGQgVG9wbGV2ZWwKK3dpbmRvdyAob3Igc3ViY2xhc3MgdGhlcmVvZikuICBUaGUgVG9wbGV2ZWwgbWF5IGJlIGEgdGVzdCB3aWRnZXQgb3IKK2RpYWxvZywgaW4gd2hpY2ggY2FzZSB0aGUgY2FsbGFibGUgaXMgdGhlIGNvcnJlc29uZGluZyBjbGFzcy4gIE9yIHRoZQorVG9wbGV2ZWwgbWF5IGNvbnRhaW4gdGhlIHdpZGdldCB0byBiZSB0ZXN0ZWQgb3Igc2V0IHVwIGEgY29udGV4dCBpbgord2hpY2ggYSB0ZXN0IHdpZGdldCBpcyBpbnZva2VkLiAgSW4gdGhpcyBsYXR0ZXIgY2FzZSwgdGhlIGNhbGxhYmxlIGlzIGEKK3dyYXBwZXIgZnVuY3Rpb24gdGhhdCBzZXRzIHVwIHRoZSBUb3BsZXZlbCBhbmQgb3RoZXIgb2JqZWN0cy4gIFdyYXBwZXIKK2Z1bmN0aW9uIG5hbWVzLCBzdWNoIGFzIF9lZGl0b3Jfd2luZG93Jywgc2hvdWxkIHN0YXJ0IHdpdGggJ18nLgorCisKK0VuZCB0aGUgbW9kdWxlIHdpdGgKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICA8dW5pdHRlc3QsIGlmIHRoZXJlIGlzIG9uZT4KKyAgICBmcm9tIGlkbGVsaWIuaWRsZV90ZXN0Lmh0ZXN0IGltcG9ydCBydW4KKyAgICBydW4oWCkKKworVG8gaGF2ZSB3cmFwcGVyIGZ1bmN0aW9ucyBhbmQgdGVzdCBpbnZvY2F0aW9uIGNvZGUgaWdub3JlZCBieSBjb3ZlcmFnZXB5CityZXBvcnRzLCBwdXQgJyMgaHRlc3QgIycgb24gdGhlIGRlZiBzdGF0ZW1lbnQgaGVhZGVyIGxpbmUuCisKK2RlZiBfd3JhcHBlcihwYXJlbnQpOiAgIyBodGVzdCAjCisKK0Fsc28gbWFrZSBzdXJlIHRoYXQgdGhlICdpZiBfX25hbWVfXycgbGluZSBtYXRjaGVzIHRoZSBhYm92ZS4gIFRoZW4gaGF2ZQorbWFrZSBzdXJlIHRoYXQgLmNvdmVyYWdlcmMgaW5jbHVkZXMgdGhlIGZvbGxvd2luZy4KKworW3JlcG9ydF0KK2V4Y2x1ZGVfbGluZXMgPQorICAgIC4qIyBodGVzdCAjCisgICAgaWYgX19uYW1lX18gPT0gLl9fbWFpbl9fLjoKKworKFRoZSAiLiIgaW5zdGVhZCBvZiAiJyIgaXMgaW50ZW50aW9uYWwgYW5kIG5lY2Vzc2FyeS4pCisKKworVG8gcnVuIGFueSBYLCB0aGlzIGZpbGUgbXVzdCBjb250YWluIGEgbWF0Y2hpbmcgaW5zdGFuY2Ugb2YgdGhlCitmb2xsb3dpbmcgdGVtcGxhdGUsIHdpdGggWC5fX25hbWVfXyBwcmVwZW5kZWQgdG8gJ19zcGVjJy4KK1doZW4gYWxsIHRlc3RzIGFyZSBydW4sIHRoZSBwcmVmaXggaXMgdXNlIHRvIGdldCBYLgorCitfc3BlYyA9IHsKKyAgICAnZmlsZSc6ICcnLAorICAgICdrd2RzJzogeyd0aXRsZSc6ICcnfSwKKyAgICAnbXNnJzogIiIKKyAgICB9CisKK2ZpbGUgKG5vIC5weSk6IHJ1bigpIGltcG9ydHMgZmlsZS5weS4KK2t3ZHM6IGF1Z21lbnRlZCB3aXRoIHsncGFyZW50Jzpyb290fSBhbmQgcGFzc2VkIHRvIFggYXMgKiprd2RzLgordGl0bGU6IGFuIGV4YW1wbGUga3dkOyBzb21lIHdpZGdldHMgbmVlZCB0aGlzLCBkZWxldGUgaWYgbm90LgorbXNnOiBtYXN0ZXIgd2luZG93IGhpbnRzIGFib3V0IHRlc3RpbmcgdGhlIHdpZGdldC4KKworCitNb2R1bGVzIGFuZCBjbGFzc2VzIG5vdCBiZWluZyB0ZXN0ZWQgYXQgdGhlIG1vbWVudDoKK1B5U2hlbGwuUHlTaGVsbEVkaXRvcldpbmRvdworRGVidWdnZXIuRGVidWdnZXIKK0F1dG9Db21wbGV0ZVdpbmRvdy5BdXRvQ29tcGxldGVXaW5kb3cKK091dHB1dFdpbmRvdy5PdXRwdXRXaW5kb3cgKGluZGlyZWN0bHkgYmVpbmcgdGVzdGVkIHdpdGggZ3JlcCB0ZXN0KQorJycnCisKK2Zyb20gaW1wb3J0bGliIGltcG9ydCBpbXBvcnRfbW9kdWxlCitmcm9tIGlkbGVsaWIubWFjb3N4U3VwcG9ydCBpbXBvcnQgX2luaXRpYWxpemVUa1ZhcmlhbnRUZXN0cworaW1wb3J0IHRraW50ZXIgYXMgdGsKKworQWJvdXREaWFsb2dfc3BlYyA9IHsKKyAgICAnZmlsZSc6ICdhYm91dERpYWxvZycsCisgICAgJ2t3ZHMnOiB7J3RpdGxlJzogJ2Fib3V0RGlhbG9nIHRlc3QnLAorICAgICAgICAgICAgICdfaHRlc3QnOiBUcnVlLAorICAgICAgICAgICAgIH0sCisgICAgJ21zZyc6ICJUZXN0IGV2ZXJ5IGJ1dHRvbi4gRW5zdXJlIFB5dGhvbiwgVEsgYW5kIElETEUgdmVyc2lvbnMgIgorICAgICAgICAgICAiYXJlIGNvcnJlY3RseSBkaXNwbGF5ZWQuXG4gW0Nsb3NlXSB0byBleGl0LiIsCisgICAgfQorCitfY2FsbHRpcF93aW5kb3dfc3BlYyA9IHsKKyAgICAnZmlsZSc6ICdDYWxsVGlwV2luZG93JywKKyAgICAna3dkcyc6IHt9LAorICAgICdtc2cnOiAiVHlwaW5nICcoJyBzaG91bGQgZGlzcGxheSBhIGNhbGx0aXAuXG4iCisgICAgICAgICAgICJUeXBpbmcgJykgc2hvdWxkIGhpZGUgdGhlIGNhbGx0aXAuXG4iCisgICAgfQorCitfY2xhc3NfYnJvd3Nlcl9zcGVjID0geworICAgICdmaWxlJzogJ0NsYXNzQnJvd3NlcicsCisgICAgJ2t3ZHMnOiB7fSwKKyAgICAnbXNnJzogIkluc3BlY3QgbmFtZXMgb2YgbW9kdWxlLCBjbGFzcyh3aXRoIHN1cGVyY2xhc3MgaWYgIgorICAgICAgICAgICAiYXBwbGljYWJsZSksIG1ldGhvZHMgYW5kIGZ1bmN0aW9ucy5cblRvZ2dsZSBuZXN0ZWQgaXRlbXMuXG4iCisgICAgICAgICAgICJEb3VibGUgY2xpY2tpbmcgb24gaXRlbXMgcHJpbnRzIGEgdHJhY2ViYWNrIGZvciBhbiBleGNlcHRpb24gIgorICAgICAgICAgICAidGhhdCBpcyBpZ25vcmVkLiIKKyAgICB9CisKK19jb2xvcl9kZWxlZ2F0b3Jfc3BlYyA9IHsKKyAgICAnZmlsZSc6ICdDb2xvckRlbGVnYXRvcicsCisgICAgJ2t3ZHMnOiB7fSwKKyAgICAnbXNnJzogIlRoZSB0ZXh0IGlzIHNhbXBsZSBQeXRob24gY29kZS5cbiIKKyAgICAgICAgICAgIkVuc3VyZSBjb21wb25lbnRzIGxpa2UgY29tbWVudHMsIGtleXdvcmRzLCBidWlsdGlucyxcbiIKKyAgICAgICAgICAgInN0cmluZywgZGVmaW5pdGlvbnMsIGFuZCBicmVhayBhcmUgY29ycmVjdGx5IGNvbG9yZWQuXG4iCisgICAgICAgICAgICJUaGUgZGVmYXVsdCBjb2xvciBzY2hlbWUgaXMgaW4gaWRsZWxpYi9jb25maWctaGlnaGxpZ2h0LmRlZiIKKyAgICB9CisKK0NvbmZpZ0RpYWxvZ19zcGVjID0geworICAgICdmaWxlJzogJ2NvbmZpZ0RpYWxvZycsCisgICAgJ2t3ZHMnOiB7J3RpdGxlJzogJ0NvbmZpZ0RpYWxvZ1Rlc3QnLAorICAgICAgICAgICAgICdfaHRlc3QnOiBUcnVlLH0sCisgICAgJ21zZyc6ICJJRExFIHByZWZlcmVuY2VzIGRpYWxvZy5cbiIKKyAgICAgICAgICAgIkluIHRoZSAnRm9udHMvVGFicycgdGFiLCBjaGFuZ2luZyBmb250IGZhY2UsIHNob3VsZCB1cGRhdGUgdGhlICIKKyAgICAgICAgICAgImZvbnQgZmFjZSBvZiB0aGUgdGV4dCBpbiB0aGUgYXJlYSBiZWxvdyBpdC5cbkluIHRoZSAiCisgICAgICAgICAgICInSGlnaGxpZ2h0aW5nJyB0YWIsIHRyeSBkaWZmZXJlbnQgY29sb3Igc2NoZW1lcy4gQ2xpY2tpbmcgIgorICAgICAgICAgICAiaXRlbXMgaW4gdGhlIHNhbXBsZSBwcm9ncmFtIHNob3VsZCB1cGRhdGUgdGhlIGNob2ljZXMgYWJvdmUgaXQuIgorICAgICAgICAgICAiXG5JbiB0aGUgJ0tleXMnLCAnR2VuZXJhbCcgYW5kICdFeHRlbnNpb25zJyB0YWJzLCB0ZXN0IHNldHRpbmdzIgorICAgICAgICAgICAib2YgaW50ZXJlc3QuIgorICAgICAgICAgICAiXG5bT2tdIHRvIGNsb3NlIHRoZSBkaWFsb2cuW0FwcGx5XSB0byBhcHBseSB0aGUgc2V0dGluZ3MgYW5kICIKKyAgICAgICAgICAgImFuZCBbQ2FuY2VsXSB0byByZXZlcnQgYWxsIGNoYW5nZXMuXG5SZS1ydW4gdGhlIHRlc3QgdG8gZW5zdXJlICIKKyAgICAgICAgICAgImNoYW5nZXMgbWFkZSBoYXZlIHBlcnNpc3RlZC4iCisgICAgfQorCisjIFRPRE8gSW1wcm92ZSBtZXNzYWdlCitfZHluX29wdGlvbl9tZW51X3NwZWMgPSB7CisgICAgJ2ZpbGUnOiAnZHluT3B0aW9uTWVudVdpZGdldCcsCisgICAgJ2t3ZHMnOiB7fSwKKyAgICAnbXNnJzogIlNlbGVjdCBvbmUgb2YgdGhlIG1hbnkgb3B0aW9ucyBpbiB0aGUgJ29sZCBvcHRpb24gc2V0Jy5cbiIKKyAgICAgICAgICAgIkNsaWNrIHRoZSBidXR0b24gdG8gY2hhbmdlIHRoZSBvcHRpb24gc2V0LlxuIgorICAgICAgICAgICAiU2VsZWN0IG9uZSBvZiB0aGUgbWFueSBvcHRpb25zIGluIHRoZSAnbmV3IG9wdGlvbiBzZXQnLiIKKyAgICB9CisKKyMgVE9ETyBlZGl0IHdyYXBwZXIKK19lZGl0b3Jfd2luZG93X3NwZWMgPSB7CisgICAnZmlsZSc6ICdFZGl0b3JXaW5kb3cnLAorICAgICdrd2RzJzoge30sCisgICAgJ21zZyc6ICJUZXN0IGVkaXRvciBmdW5jdGlvbnMgb2YgaW50ZXJlc3QuXG4iCisgICAgICAgICAgICJCZXN0IHRvIGNsb3NlIGVkaXRvciBmaXJzdC4iCisgICAgfQorCitHZXRDZmdTZWN0aW9uTmFtZURpYWxvZ19zcGVjID0geworICAgICdmaWxlJzogJ2NvbmZpZ1NlY3Rpb25OYW1lRGlhbG9nJywKKyAgICAna3dkcyc6IHsndGl0bGUnOidHZXQgTmFtZScsCisgICAgICAgICAgICAgJ21lc3NhZ2UnOidFbnRlciBzb21ldGhpbmcnLAorICAgICAgICAgICAgICd1c2VkX25hbWVzJzogeydhYmMnfSwKKyAgICAgICAgICAgICAnX2h0ZXN0JzogVHJ1ZX0sCisgICAgJ21zZyc6ICJBZnRlciB0aGUgdGV4dCBlbnRlcmVkIHdpdGggW09rXSBpcyBzdHJpcHBlZCwgPG5vdGhpbmc+LCAiCisgICAgICAgICAgICInYWJjJywgb3IgbW9yZSB0aGF0IDMwIGNoYXJzIGFyZSBlcnJvcnMuXG4iCisgICAgICAgICAgICJDbG9zZSAnR2V0IE5hbWUnIHdpdGggYSB2YWxpZCBlbnRyeSAocHJpbnRlZCB0byBTaGVsbCksICIKKyAgICAgICAgICAgIltDYW5jZWxdLCBvciBbWF0iLAorICAgIH0KKworR2V0SGVscFNvdXJjZURpYWxvZ19zcGVjID0geworICAgICdmaWxlJzogJ2NvbmZpZ0hlbHBTb3VyY2VFZGl0JywKKyAgICAna3dkcyc6IHsndGl0bGUnOiAnR2V0IGhlbHBzb3VyY2UnLAorICAgICAgICAgICAgICdfaHRlc3QnOiBUcnVlfSwKKyAgICAnbXNnJzogIkVudGVyIG1lbnUgaXRlbSBuYW1lIGFuZCBoZWxwIGZpbGUgcGF0aFxuICIKKyAgICAgICAgICAgIjxub3RoaW5nPiBhbmQgbW9yZSB0aGFuIDMwIGNoYXJzIGFyZSBpbnZhbGlkIG1lbnUgaXRlbSBuYW1lcy5cbiIKKyAgICAgICAgICAgIjxub3RoaW5nPiwgZmlsZSBkb2VzIG5vdCBleGlzdCBhcmUgaW52YWxpZCBwYXRoIGl0ZW1zLlxuIgorICAgICAgICAgICAiVGVzdCBmb3IgaW5jb21wbGV0ZSB3ZWIgYWRkcmVzcyBmb3IgaGVscCBmaWxlIHBhdGguXG4iCisgICAgICAgICAgICJBIHZhbGlkIGVudHJ5IHdpbGwgYmUgcHJpbnRlZCB0byBzaGVsbCB3aXRoIFswa10uXG4iCisgICAgICAgICAgICJbQ2FuY2VsXSB3aWxsIHByaW50IE5vbmUgdG8gc2hlbGwiLAorICAgIH0KKworIyBVcGRhdGUgb25jZSBpc3N1ZTIxNTE5IGlzIHJlc29sdmVkLgorR2V0S2V5c0RpYWxvZ19zcGVjID0geworICAgICdmaWxlJzogJ2tleWJpbmRpbmdEaWFsb2cnLAorICAgICdrd2RzJzogeyd0aXRsZSc6ICdUZXN0IGtleWJpbmRpbmdzJywKKyAgICAgICAgICAgICAnYWN0aW9uJzogJ2ZpbmQtYWdhaW4nLAorICAgICAgICAgICAgICdjdXJyZW50S2V5U2VxdWVuY2VzJzogWycnXSAsCisgICAgICAgICAgICAgJ19odGVzdCc6IFRydWUsCisgICAgICAgICAgICAgfSwKKyAgICAnbXNnJzogIlRlc3QgZm9yIGRpZmZlcmVudCBrZXkgbW9kaWZpZXIgc2VxdWVuY2VzLlxuIgorICAgICAgICAgICAiPG5vdGhpbmc+IGlzIGludmFsaWQuXG4iCisgICAgICAgICAgICJObyBtb2RpZmllciBrZXkgaXMgaW52YWxpZC5cbiIKKyAgICAgICAgICAgIlNoaWZ0IGtleSB3aXRoIFthLXpdLFswLTldLCBmdW5jdGlvbiBrZXksIG1vdmUga2V5LCB0YWIsIHNwYWNlIgorICAgICAgICAgICAiaXMgaW52YWxpZC5cbk5vIHZhbGlkaXR5IGNoZWNraW5nIGlmIGFkdmFuY2VkIGtleSBiaW5kaW5nICIKKyAgICAgICAgICAgImVudHJ5IGlzIHVzZWQuIgorICAgIH0KKworX2dyZXBfZGlhbG9nX3NwZWMgPSB7CisgICAgJ2ZpbGUnOiAnR3JlcERpYWxvZycsCisgICAgJ2t3ZHMnOiB7fSwKKyAgICAnbXNnJzogIkNsaWNrIHRoZSAnU2hvdyBHcmVwRGlhbG9nJyBidXR0b24uXG4iCisgICAgICAgICAgICJUZXN0IHRoZSB2YXJpb3VzICdGaW5kLWluLWZpbGVzJyBmdW5jdGlvbnMuXG4iCisgICAgICAgICAgICJUaGUgcmVzdWx0cyBzaG91bGQgYmUgZGlzcGxheWVkIGluIGEgbmV3ICcqT3V0cHV0Kicgd2luZG93LlxuIgorICAgICAgICAgICAiJ1JpZ2h0LWNsaWNrJy0+J0dvdG8gZmlsZS9saW5lJyBhbnl3aGVyZSBpbiB0aGUgc2VhcmNoIHJlc3VsdHMgIgorICAgICAgICAgICAic2hvdWxkIG9wZW4gdGhhdCBmaWxlIFxuaW4gYSBuZXcgRWRpdG9yV2luZG93LiIKKyAgICB9CisKK19pb19iaW5kaW5nX3NwZWMgPSB7CisgICAgJ2ZpbGUnOiAnSU9CaW5kaW5nJywKKyAgICAna3dkcyc6IHt9LAorICAgICdtc2cnOiAiVGVzdCB0aGUgZm9sbG93aW5nIGJpbmRpbmdzLlxuIgorICAgICAgICAgICAiPENvbnRyb2wtbz4gdG8gb3BlbiBmaWxlIGZyb20gZGlhbG9nLlxuIgorICAgICAgICAgICAiRWRpdCB0aGUgZmlsZS5cbiIKKyAgICAgICAgICAgIjxDb250cm9sLXM+IHRvIHNhdmUgdGhlIGZpbGUuXG4iCisgICAgICAgICAgICJDaGVjayB0aGF0IGNoYW5nZXMgd2VyZSBzYXZlZCBieSBvcGVuaW5nIHRoZSBmaWxlIGVsc2V3aGVyZS4iCisgICAgfQorCitfbXVsdGlfY2FsbF9zcGVjID0geworICAgICdmaWxlJzogJ011bHRpQ2FsbCcsCisgICAgJ2t3ZHMnOiB7fSwKKyAgICAnbXNnJzogIlRoZSBmb2xsb3dpbmcgYWN0aW9ucyBzaG91bGQgdHJpZ2dlciBhIHByaW50IHRvIGNvbnNvbGUgb3IgSURMRSIKKyAgICAgICAgICAgIiBTaGVsbC5cbkVudGVyaW5nIGFuZCBsZWF2aW5nIHRoZSB0ZXh0IGFyZWEsIGtleSBlbnRyeSwgIgorICAgICAgICAgICAiPENvbnRyb2wtS2V5PixcbjxBbHQtS2V5LWE+LCA8Q29udHJvbC1LZXktYT4sICIKKyAgICAgICAgICAgIjxBbHQtQ29udHJvbC1LZXktYT4sIFxuPENvbnRyb2wtQnV0dG9uLTE+LCA8QWx0LUJ1dHRvbi0xPiBhbmQgIgorICAgICAgICAgICAiZm9jdXNpbmcgb3V0IG9mIHRoZSB3aW5kb3dcbmFyZSBzZXF1ZW5jZXMgdG8gYmUgdGVzdGVkLiIKKyAgICB9CisKK19tdWx0aXN0YXR1c19iYXJfc3BlYyA9IHsKKyAgICAnZmlsZSc6ICdNdWx0aVN0YXR1c0JhcicsCisgICAgJ2t3ZHMnOiB7fSwKKyAgICAnbXNnJzogIkVuc3VyZSBwcmVzZW5jZSBvZiBtdWx0aS1zdGF0dXMgYmFyIGJlbG93IHRleHQgYXJlYS5cbiIKKyAgICAgICAgICAgIkNsaWNrICdVcGRhdGUgU3RhdHVzJyB0byBjaGFuZ2UgdGhlIG11bHRpLXN0YXR1cyB0ZXh0IgorICAgIH0KKworX29iamVjdF9icm93c2VyX3NwZWMgPSB7CisgICAgJ2ZpbGUnOiAnT2JqZWN0QnJvd3NlcicsCisgICAgJ2t3ZHMnOiB7fSwKKyAgICAnbXNnJzogIkRvdWJsZSBjbGljayBvbiBpdGVtcyB1cHRvIHRoZSBsb3dlc3QgbGV2ZWwuXG4iCisgICAgICAgICAgICJBdHRyaWJ1dGVzIG9mIHRoZSBvYmplY3RzIGFuZCByZWxhdGVkIGluZm9ybWF0aW9uICIKKyAgICAgICAgICAgIndpbGwgYmUgZGlzcGxheWVkIHNpZGUtYnktc2lkZSBhdCBlYWNoIGxldmVsLiIKKyAgICB9CisKK19wYXRoX2Jyb3dzZXJfc3BlYyA9IHsKKyAgICAnZmlsZSc6ICdQYXRoQnJvd3NlcicsCisgICAgJ2t3ZHMnOiB7fSwKKyAgICAnbXNnJzogIlRlc3QgZm9yIGNvcnJlY3QgZGlzcGxheSBvZiBhbGwgcGF0aHMgaW4gc3lzLnBhdGguXG4iCisgICAgICAgICAgICJUb2dnbGUgbmVzdGVkIGl0ZW1zIHVwdG8gdGhlIGxvd2VzdCBsZXZlbC5cbiIKKyAgICAgICAgICAgIkRvdWJsZSBjbGlja2luZyBvbiBhbiBpdGVtIHByaW50cyBhIHRyYWNlYmFja1xuIgorICAgICAgICAgICAiZm9yIGFuIGV4Y2VwdGlvbiB0aGF0IGlzIGlnbm9yZWQuIgorICAgIH0KKworX3BlcmNvbGF0b3Jfc3BlYyA9IHsKKyAgICAnZmlsZSc6ICdQZXJjb2xhdG9yJywKKyAgICAna3dkcyc6IHt9LAorICAgICdtc2cnOiAiVGhlcmUgYXJlIHR3byB0cmFjZXJzIHdoaWNoIGNhbiBiZSB0b2dnbGVkIHVzaW5nIGEgY2hlY2tib3guXG4iCisgICAgICAgICAgICJUb2dnbGluZyBhIHRyYWNlciAnb24nIGJ5IGNoZWNraW5nIGl0IHNob3VsZCBwcmludCB0cmFjZXIiCisgICAgICAgICAgICJvdXRwdXQgdG8gdGhlIGNvbnNvbGUgb3IgdG8gdGhlIElETEUgc2hlbGwuXG4iCisgICAgICAgICAgICJJZiBib3RoIHRoZSB0cmFjZXJzIGFyZSAnb24nLCB0aGUgb3V0cHV0IGZyb20gdGhlIHRyYWNlciB3aGljaCAiCisgICAgICAgICAgICJ3YXMgc3dpdGNoZWQgJ29uJyBsYXRlciwgc2hvdWxkIGJlIHByaW50ZWQgZmlyc3RcbiIKKyAgICAgICAgICAgIlRlc3QgZm9yIGFjdGlvbnMgbGlrZSB0ZXh0IGVudHJ5LCBhbmQgcmVtb3ZhbC4iCisgICAgfQorCitfcmVwbGFjZV9kaWFsb2dfc3BlYyA9IHsKKyAgICAnZmlsZSc6ICdSZXBsYWNlRGlhbG9nJywKKyAgICAna3dkcyc6IHt9LAorICAgICdtc2cnOiAiQ2xpY2sgdGhlICdSZXBsYWNlJyBidXR0b24uXG4iCisgICAgICAgICAgICJUZXN0IHZhcmlvdXMgcmVwbGFjZSBvcHRpb25zIGluIHRoZSAnUmVwbGFjZSBkaWFsb2cnLlxuIgorICAgICAgICAgICAiQ2xpY2sgW0Nsb3NlXSBvciBbWF0gdG8gY2xvc2UgdGhlICdSZXBsYWNlIERpYWxvZycuIgorICAgIH0KKworX3NlYXJjaF9kaWFsb2dfc3BlYyA9IHsKKyAgICAnZmlsZSc6ICdTZWFyY2hEaWFsb2cnLAorICAgICdrd2RzJzoge30sCisgICAgJ21zZyc6ICJDbGljayB0aGUgJ1NlYXJjaCcgYnV0dG9uLlxuIgorICAgICAgICAgICAiVGVzdCB2YXJpb3VzIHNlYXJjaCBvcHRpb25zIGluIHRoZSAnU2VhcmNoIGRpYWxvZycuXG4iCisgICAgICAgICAgICJDbGljayBbQ2xvc2VdIG9yIFtYXSB0byBjbG9zZSB0aGUgJ1NlYXJjaCBEaWFsb2cnLiIKKyAgICB9CisKK19zY3JvbGxlZF9saXN0X3NwZWMgPSB7CisgICAgJ2ZpbGUnOiAnU2Nyb2xsZWRMaXN0JywKKyAgICAna3dkcyc6IHt9LAorICAgICdtc2cnOiAiWW91IHNob3VsZCBzZWUgYSBzY3JvbGxhYmxlIGxpc3Qgb2YgaXRlbXNcbiIKKyAgICAgICAgICAgIlNlbGVjdGluZyAoY2xpY2tpbmcpIG9yIGRvdWJsZSBjbGlja2luZyBhbiBpdGVtICIKKyAgICAgICAgICAgInByaW50cyB0aGUgbmFtZSB0byB0aGUgY29uc29sZSBvciBJZGxlIHNoZWxsLlxuIgorICAgICAgICAgICAiUmlnaHQgY2xpY2tpbmcgYW4gaXRlbSB3aWxsIGRpc3BsYXkgYSBwb3B1cC4iCisgICAgfQorCitzaG93X2lkbGVoZWxwX3NwZWMgPSB7CisgICAgJ2ZpbGUnOiAnaGVscCcsCisgICAgJ2t3ZHMnOiB7fSwKKyAgICAnbXNnJzogIklmIHRoZSBoZWxwIHRleHQgZGlzcGxheXMsIHRoaXMgd29ya3MuXG4iCisgICAgICAgICAgICJUZXh0IGlzIHNlbGVjdGFibGUuIFdpbmRvdyBpcyBzY3JvbGxhYmxlLiIKKyAgICB9CisKK19zdGFja192aWV3ZXJfc3BlYyA9IHsKKyAgICAnZmlsZSc6ICdTdGFja1ZpZXdlcicsCisgICAgJ2t3ZHMnOiB7fSwKKyAgICAnbXNnJzogIkEgc3RhY2t0cmFjZSBmb3IgYSBOYW1lRXJyb3IgZXhjZXB0aW9uLlxuIgorICAgICAgICAgICAiRXhwYW5kICdpZGxlbGliIC4uLicgYW5kICc8bG9jYWxzPicuXG4iCisgICAgICAgICAgICJDaGVjayB0aGF0IGV4Y192YWx1ZSwgZXhjX3RiLCBhbmQgZXhjX3R5cGUgYXJlIGNvcnJlY3QuXG4iCisgICAgfQorCitfdGFiYmVkX3BhZ2VzX3NwZWMgPSB7CisgICAgJ2ZpbGUnOiAndGFiYmVkcGFnZXMnLAorICAgICdrd2RzJzoge30sCisgICAgJ21zZyc6ICJUb2dnbGUgYmV0d2VlbiB0aGUgdHdvIHRhYnMgJ2ZvbycgYW5kICdiYXInXG4iCisgICAgICAgICAgICJBZGQgYSB0YWIgYnkgZW50ZXJpbmcgYSBzdWl0YWJsZSBuYW1lIGZvciBpdC5cbiIKKyAgICAgICAgICAgIlJlbW92ZSBhbiBleGlzdGluZyB0YWIgYnkgZW50ZXJpbmcgaXRzIG5hbWUuXG4iCisgICAgICAgICAgICJSZW1vdmUgYWxsIGV4aXN0aW5nIHRhYnMuXG4iCisgICAgICAgICAgICI8bm90aGluZz4gaXMgYW4gaW52YWxpZCBhZGQgcGFnZSBhbmQgcmVtb3ZlIHBhZ2UgbmFtZS5cbiIKKyAgICB9CisKK1RleHRWaWV3ZXJfc3BlYyA9IHsKKyAgICAnZmlsZSc6ICd0ZXh0VmlldycsCisgICAgJ2t3ZHMnOiB7J3RpdGxlJzogJ1Rlc3QgdGV4dFZpZXcnLAorICAgICAgICAgICAgICd0ZXh0JzonVGhlIHF1aWNrIGJyb3duIGZveCBqdW1wcyBvdmVyIHRoZSBsYXp5IGRvZy5cbicqMzUsCisgICAgICAgICAgICAgJ19odGVzdCc6IFRydWV9LAorICAgICdtc2cnOiAiVGVzdCBmb3IgcmVhZC1vbmx5IHByb3BlcnR5IG9mIHRleHQuXG4iCisgICAgICAgICAgICJUZXh0IGlzIHNlbGVjdGFibGUuIFdpbmRvdyBpcyBzY3JvbGxhYmxlLiIsCisgICAgIH0KKworX3Rvb2x0aXBfc3BlYyA9IHsKKyAgICAnZmlsZSc6ICdUb29sVGlwJywKKyAgICAna3dkcyc6IHt9LAorICAgICdtc2cnOiAiUGxhY2UgbW91c2UgY3Vyc29yIG92ZXIgYm90aCB0aGUgYnV0dG9uc1xuIgorICAgICAgICAgICAiQSB0b29sdGlwIHNob3VsZCBhcHBlYXIgd2l0aCBzb21lIHRleHQuIgorICAgIH0KKworX3RyZWVfd2lkZ2V0X3NwZWMgPSB7CisgICAgJ2ZpbGUnOiAnVHJlZVdpZGdldCcsCisgICAgJ2t3ZHMnOiB7fSwKKyAgICAnbXNnJzogIlRoZSBjYW52YXMgaXMgc2Nyb2xsYWJsZS5cbiIKKyAgICAgICAgICAgIkNsaWNrIG9uIGZvbGRlcnMgdXB0byB0byB0aGUgbG93ZXN0IGxldmVsLiIKKyAgICB9CisKK191bmRvX2RlbGVnYXRvcl9zcGVjID0geworICAgICdmaWxlJzogJ1VuZG9EZWxlZ2F0b3InLAorICAgICdrd2RzJzoge30sCisgICAgJ21zZyc6ICJDbGljayBbVW5kb10gdG8gdW5kbyBhbnkgYWN0aW9uLlxuIgorICAgICAgICAgICAiQ2xpY2sgW1JlZG9dIHRvIHJlZG8gYW55IGFjdGlvbi5cbiIKKyAgICAgICAgICAgIkNsaWNrIFtEdW1wXSB0byBkdW1wIHRoZSBjdXJyZW50IHN0YXRlICIKKyAgICAgICAgICAgImJ5IHByaW50aW5nIHRvIHRoZSBjb25zb2xlIG9yIHRoZSBJRExFIHNoZWxsLlxuIgorICAgIH0KKworX3dpZGdldF9yZWRpcmVjdG9yX3NwZWMgPSB7CisgICAgJ2ZpbGUnOiAnV2lkZ2V0UmVkaXJlY3RvcicsCisgICAgJ2t3ZHMnOiB7fSwKKyAgICAnbXNnJzogIkV2ZXJ5IHRleHQgaW5zZXJ0IHNob3VsZCBiZSBwcmludGVkIHRvIHRoZSBjb25zb2xlLiIKKyAgICAgICAgICAgIm9yIHRoZSBJRExFIHNoZWxsLiIKKyAgICB9CisKK2RlZiBydW4oKnRlc3RzKToKKyAgICByb290ID0gdGsuVGsoKQorICAgIHJvb3QudGl0bGUoJ0lETEUgaHRlc3QnKQorICAgIHJvb3QucmVzaXphYmxlKDAsIDApCisgICAgX2luaXRpYWxpemVUa1ZhcmlhbnRUZXN0cyhyb290KQorCisgICAgIyBhIHNjcm9sbGFibGUgTGFiZWwgbGlrZSBjb25zdGFudCB3aWR0aCB0ZXh0IHdpZGdldC4KKyAgICBmcmFtZUxhYmVsID0gdGsuRnJhbWUocm9vdCwgcGFkeD0xMCkKKyAgICBmcmFtZUxhYmVsLnBhY2soKQorICAgIHRleHQgPSB0ay5UZXh0KGZyYW1lTGFiZWwsIHdyYXA9J3dvcmQnKQorICAgIHRleHQuY29uZmlndXJlKGJnPXJvb3QuY2dldCgnYmcnKSwgcmVsaWVmPSdmbGF0JywgaGVpZ2h0PTQsIHdpZHRoPTcwKQorICAgIHNjcm9sbGJhciA9IHRrLlNjcm9sbGJhcihmcmFtZUxhYmVsLCBjb21tYW5kPXRleHQueXZpZXcpCisgICAgdGV4dC5jb25maWcoeXNjcm9sbGNvbW1hbmQ9c2Nyb2xsYmFyLnNldCkKKyAgICBzY3JvbGxiYXIucGFjayhzaWRlPSdyaWdodCcsIGZpbGw9J3knLCBleHBhbmQ9RmFsc2UpCisgICAgdGV4dC5wYWNrKHNpZGU9J2xlZnQnLCBmaWxsPSdib3RoJywgZXhwYW5kPVRydWUpCisKKyAgICB0ZXN0X2xpc3QgPSBbXSAjIExpc3Qgb2YgdHVwbGVzIG9mIHRoZSBmb3JtIChzcGVjLCBjYWxsYWJsZSB3aWRnZXQpCisgICAgaWYgdGVzdHM6CisgICAgICAgIGZvciB0ZXN0IGluIHRlc3RzOgorICAgICAgICAgICAgdGVzdF9zcGVjID0gZ2xvYmFscygpW3Rlc3QuX19uYW1lX18gKyAnX3NwZWMnXQorICAgICAgICAgICAgdGVzdF9zcGVjWyduYW1lJ10gPSB0ZXN0Ll9fbmFtZV9fCisgICAgICAgICAgICB0ZXN0X2xpc3QuYXBwZW5kKCh0ZXN0X3NwZWMsICB0ZXN0KSkKKyAgICBlbHNlOgorICAgICAgICBmb3IgaywgZCBpbiBnbG9iYWxzKCkuaXRlbXMoKToKKyAgICAgICAgICAgIGlmIGsuZW5kc3dpdGgoJ19zcGVjJyk6CisgICAgICAgICAgICAgICAgdGVzdF9uYW1lID0ga1s6LTVdCisgICAgICAgICAgICAgICAgdGVzdF9zcGVjID0gZAorICAgICAgICAgICAgICAgIHRlc3Rfc3BlY1snbmFtZSddID0gdGVzdF9uYW1lCisgICAgICAgICAgICAgICAgbW9kID0gaW1wb3J0X21vZHVsZSgnaWRsZWxpYi4nICsgdGVzdF9zcGVjWydmaWxlJ10pCisgICAgICAgICAgICAgICAgdGVzdCA9IGdldGF0dHIobW9kLCB0ZXN0X25hbWUpCisgICAgICAgICAgICAgICAgdGVzdF9saXN0LmFwcGVuZCgodGVzdF9zcGVjLCB0ZXN0KSkKKworICAgIHRlc3RfbmFtZSA9IHRrLlN0cmluZ1ZhcignJykKKyAgICBjYWxsYWJsZV9vYmplY3QgPSBOb25lCisgICAgdGVzdF9rd2RzID0gTm9uZQorCisgICAgZGVmIG5leHQoKToKKworICAgICAgICBub25sb2NhbCB0ZXN0X25hbWUsIGNhbGxhYmxlX29iamVjdCwgdGVzdF9rd2RzCisgICAgICAgIGlmIGxlbih0ZXN0X2xpc3QpID09IDE6CisgICAgICAgICAgICBuZXh0X2J1dHRvbi5wYWNrX2ZvcmdldCgpCisgICAgICAgIHRlc3Rfc3BlYywgY2FsbGFibGVfb2JqZWN0ID0gdGVzdF9saXN0LnBvcCgpCisgICAgICAgIHRlc3Rfa3dkcyA9IHRlc3Rfc3BlY1sna3dkcyddCisgICAgICAgIHRlc3Rfa3dkc1sncGFyZW50J10gPSByb290CisgICAgICAgIHRlc3RfbmFtZS5zZXQoJ1Rlc3QgJyArIHRlc3Rfc3BlY1snbmFtZSddKQorCisgICAgICAgIHRleHQuY29uZmlndXJlKHN0YXRlPSdub3JtYWwnKSAjIGVuYWJsZSB0ZXh0IGVkaXRpbmcKKyAgICAgICAgdGV4dC5kZWxldGUoJzEuMCcsJ2VuZCcpCisgICAgICAgIHRleHQuaW5zZXJ0KCIxLjAiLHRlc3Rfc3BlY1snbXNnJ10pCisgICAgICAgIHRleHQuY29uZmlndXJlKHN0YXRlPSdkaXNhYmxlZCcpICMgcHJlc2VydmUgcmVhZC1vbmx5IHByb3BlcnR5CisKKyAgICBkZWYgcnVuX3Rlc3QoKToKKyAgICAgICAgd2lkZ2V0ID0gY2FsbGFibGVfb2JqZWN0KCoqdGVzdF9rd2RzKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBwcmludCh3aWRnZXQucmVzdWx0KQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisKKyAgICBidXR0b24gPSB0ay5CdXR0b24ocm9vdCwgdGV4dHZhcmlhYmxlPXRlc3RfbmFtZSwgY29tbWFuZD1ydW5fdGVzdCkKKyAgICBidXR0b24ucGFjaygpCisgICAgbmV4dF9idXR0b24gPSB0ay5CdXR0b24ocm9vdCwgdGV4dD0iTmV4dCIsIGNvbW1hbmQ9bmV4dCkKKyAgICBuZXh0X2J1dHRvbi5wYWNrKCkKKworICAgIG5leHQoKQorCisgICAgcm9vdC5tYWlubG9vcCgpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgcnVuKCkKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL2lkbGVfdGVzdC9tb2NrX2lkbGUucHkgYi9MaWIvaWRsZWxpYi9pZGxlX3Rlc3QvbW9ja19pZGxlLnB5CmluZGV4IGMzNjRhMjQuLjE2NzJhMzQgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL2lkbGVfdGVzdC9tb2NrX2lkbGUucHkKKysrIGIvTGliL2lkbGVsaWIvaWRsZV90ZXN0L21vY2tfaWRsZS5weQpAQCAtNSw2ICs1LDMzIEBACiAKIGZyb20gaWRsZWxpYi5pZGxlX3Rlc3QubW9ja190ayBpbXBvcnQgVGV4dAogCitjbGFzcyBGdW5jOgorICAgICcnJ01vY2sgZnVuY3Rpb24gY2FwdHVyZXMgYXJncyBhbmQgcmV0dXJucyByZXN1bHQgc2V0IGJ5IHRlc3QuCisKKyAgICBBdHRyaWJ1dGVzOgorICAgIHNlbGYuY2FsbGVkIC0gcmVjb3JkcyBjYWxsIGV2ZW4gaWYgbm8gYXJncywga3dkcyBwYXNzZWQuCisgICAgc2VsZi5yZXN1bHQgLSBzZXQgYnkgaW5pdCwgcmV0dXJuZWQgYnkgY2FsbC4KKyAgICBzZWxmLmFyZ3MgLSBjYXB0dXJlcyBwb3NpdGlvbmFsIGFyZ3VtZW50cy4KKyAgICBzZWxmLmt3ZHMgLSBjYXB0dXJlcyBrZXl3b3JkIGFyZ3VtZW50cy4KKworICAgIE1vc3QgY29tbW9uIHVzZSB3aWxsIHByb2JhYmx5IGJlIHRvIG1vY2sgbWV0aG9kcy4KKyAgICBNb2NrX3RrLlZhciBhbmQgTWJveF9mdW5jIGFyZSBzcGVjaWFsIHZhcmlhbnRzIG9mIHRoaXMuCisgICAgJycnCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlc3VsdD1Ob25lKToKKyAgICAgICAgc2VsZi5jYWxsZWQgPSBGYWxzZQorICAgICAgICBzZWxmLnJlc3VsdCA9IHJlc3VsdAorICAgICAgICBzZWxmLmFyZ3MgPSBOb25lCisgICAgICAgIHNlbGYua3dkcyA9IE5vbmUKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgKmFyZ3MsICoqa3dkcyk6CisgICAgICAgIHNlbGYuY2FsbGVkID0gVHJ1ZQorICAgICAgICBzZWxmLmFyZ3MgPSBhcmdzCisgICAgICAgIHNlbGYua3dkcyA9IGt3ZHMKKyAgICAgICAgaWYgaXNpbnN0YW5jZShzZWxmLnJlc3VsdCwgQmFzZUV4Y2VwdGlvbik6CisgICAgICAgICAgICByYWlzZSBzZWxmLnJlc3VsdAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYucmVzdWx0CisKKwogY2xhc3MgRWRpdG9yOgogICAgICcnJ01pbmltYWxseSBpbWl0YXRlIEVkaXRvcldpbmRvdy5FZGl0b3JXaW5kb3cgY2xhc3MuCiAgICAgJycnCkBAIC0xNyw2ICs0NCw3IEBACiAgICAgICAgIGxhc3QgPSBzZWxmLnRleHQuaW5kZXgoJ2VuZCcpCiAgICAgICAgIHJldHVybiBmaXJzdCwgbGFzdAogCisKIGNsYXNzIFVuZG9EZWxlZ2F0b3I6CiAgICAgJycnTWluaW1hbGx5IGltaXRhdGUgVW5kb0RlbGVnYXRvcixVbmRvRGVsZWdhdG9yIGNsYXNzLgogICAgICcnJwpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvaWRsZV90ZXN0L21vY2tfdGsucHkgYi9MaWIvaWRsZWxpYi9pZGxlX3Rlc3QvbW9ja190ay5weQppbmRleCA3NjJiYmM5Li44NmZlODQ4IDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9pZGxlX3Rlc3QvbW9ja190ay5weQorKysgYi9MaWIvaWRsZWxpYi9pZGxlX3Rlc3QvbW9ja190ay5weQpAQCAtMSw5ICsxLDI3IEBACiAiIiJDbGFzc2VzIHRoYXQgcmVwbGFjZSB0a2ludGVyIGd1aSBvYmplY3RzIHVzZWQgYnkgYW4gb2JqZWN0IGJlaW5nIHRlc3RlZC4KIAotQSBndWkgb2JqZWN0IGlzIGFueXRoaW5nIHdpdGggYSBtYXN0ZXIgb3IgcGFyZW50IHBhcmFtZW50ZXIsIHdoaWNoIGlzIHR5cGljYWxseQotcmVxdWlyZWQgaW4gc3BpdGUgb2Ygd2hhdCB0aGUgZG9jIHN0cmluZ3Mgc2F5LgorQSBndWkgb2JqZWN0IGlzIGFueXRoaW5nIHdpdGggYSBtYXN0ZXIgb3IgcGFyZW50IHBhcmFtZXRlciwgd2hpY2ggaXMKK3R5cGljYWxseSByZXF1aXJlZCBpbiBzcGl0ZSBvZiB3aGF0IHRoZSBkb2Mgc3RyaW5ncyBzYXkuCiAiIiIKIAorY2xhc3MgRXZlbnQ6CisgICAgJycnTWluaW1hbCBtb2NrIHdpdGggYXR0cmlidXRlcyBmb3IgdGVzdGluZyBldmVudCBoYW5kbGVycy4KKworICAgIFRoaXMgaXMgbm90IGEgZ3VpIG9iamVjdCwgYnV0IGlzIHVzZWQgYXMgYW4gYXJndW1lbnQgZm9yIGNhbGxiYWNrcworICAgIHRoYXQgYWNjZXNzIGF0dHJpYnV0ZXMgb2YgdGhlIGV2ZW50IHBhc3NlZC4gSWYgYSBjYWxsYmFjayBpZ25vcmVzCisgICAgdGhlIGV2ZW50LCBvdGhlciB0aGFuIHRoZSBmYWN0IHRoYXQgaXMgaGFwcGVuZWQsIHBhc3MgJ2V2ZW50Jy4KKworICAgIEtleWJvYXJkLCBtb3VzZSwgd2luZG93LCBhbmQgb3RoZXIgc291cmNlcyBnZW5lcmF0ZSBFdmVudCBpbnN0YW5jZXMuCisgICAgRXZlbnQgaW5zdGFuY2VzIGhhdmUgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzOiBzZXJpYWwgKG51bWJlciBvZgorICAgIGV2ZW50KSwgdGltZSAob2YgZXZlbnQpLCB0eXBlIChvZiBldmVudCBhcyBudW1iZXIpLCB3aWRnZXQgKGluIHdoaWNoCisgICAgZXZlbnQgb2NjdXJyZWQpLCBhbmQgeCx5IChwb3NpdGlvbiBvZiBtb3VzZSkuIFRoZXJlIGFyZSBvdGhlcgorICAgIGF0dHJpYnV0ZXMgZm9yIHNwZWNpZmljIGV2ZW50cywgc3VjaCBhcyBrZXljb2RlIGZvciBrZXkgZXZlbnRzLgorICAgIHRraW50ZXIuRXZlbnQuX19kb2NfXyBoYXMgbW9yZSBidXQgaXMgc3RpbGwgbm90IGNvbXBsZXRlLgorICAgICcnJworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqKmt3ZHMpOgorICAgICAgICAiQ3JlYXRlIGV2ZW50IHdpdGggYXR0cmlidXRlcyBuZWVkZWQgZm9yIHRlc3QiCisgICAgICAgIHNlbGYuX19kaWN0X18udXBkYXRlKGt3ZHMpCisKIGNsYXNzIFZhcjoKICAgICAiVXNlIGZvciBTdHJpbmcvSW50L0Jvb2xlYW5WYXI6IGluY29tcGxldGUiCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hc3Rlcj1Ob25lLCB2YWx1ZT1Ob25lLCBuYW1lPU5vbmUpOgpAQCAtMjAsOSArMzgsMTAgQEAKIAogICAgIEluc3RlYWQgb2YgZGlzcGxheWluZyBhIG1lc3NhZ2UgYm94LCB0aGUgbW9jaydzIGNhbGwgbWV0aG9kIHNhdmVzIHRoZQogICAgIGFyZ3VtZW50cyBhcyBpbnN0YW5jZSBhdHRyaWJ1dGVzLCB3aGljaCB0ZXN0IGZ1bmN0aW9ucyBjYW4gdGhlbiBleGFtaW1lLgorICAgIFRoZSB0ZXN0IGNhbiBzZXQgdGhlIHJlc3VsdCByZXR1cm5lZCB0byBhc2sgZnVuY3Rpb24KICAgICAiIiIKLSAgICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgICAgIHNlbGYucmVzdWx0ID0gTm9uZSAgIyBUaGUgcmV0dXJuIGZvciBhbGwgc2hvdyBmdW5jcworICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZXN1bHQ9Tm9uZSk6CisgICAgICAgIHNlbGYucmVzdWx0ID0gcmVzdWx0ICAjIFJldHVybiBOb25lIGZvciBhbGwgc2hvdyBmdW5jcwogICAgIGRlZiBfX2NhbGxfXyhzZWxmLCB0aXRsZSwgbWVzc2FnZSwgKmFyZ3MsICoqa3dkcyk6CiAgICAgICAgICMgU2F2ZSBhbGwgYXJncyBmb3IgcG9zc2libGUgZXhhbWluYXRpb24gYnkgdGVzdGVyCiAgICAgICAgIHNlbGYudGl0bGUgPSB0aXRsZQpAQCAtOTcsNyArMTE2LDcgQEAKICAgICAgICAgIiIiUmV0dXJuIGEgKGxpbmUsIGNoYXIpIHR1cGxlIG9mIGludCBpbmRleGVzIGludG8gc2VsZi5kYXRhLgogCiAgICAgICAgIFRoaXMgaW1wbGVtZW50cyAuaW5kZXggd2l0aG91dCBjb252ZXJ0aW5nIHRoZSByZXN1bHQgYmFjayB0byBhIHN0cmluZy4KLSAgICAgICAgVGhlIHJlc3VsdCBpcyBjb250cmFpbmVkIGJ5IHRoZSBudW1iZXIgb2YgbGluZXMgYW5kIGxpbmVsZW5ndGhzIG9mCisgICAgICAgIFRoZSByZXN1bHQgaXMgY29uc3RyYWluZWQgYnkgdGhlIG51bWJlciBvZiBsaW5lcyBhbmQgbGluZWxlbmd0aHMgb2YKICAgICAgICAgc2VsZi5kYXRhLiBGb3IgbWFueSBpbmRleGVzLCB0aGUgcmVzdWx0IGlzIGluaXRpYWxseSAoMSwgMCkuCiAKICAgICAgICAgVGhlIGlucHV0IGluZGV4IG1heSBoYXZlIGFueSBvZiBzZXZlcmFsIHBvc3NpYmxlIGZvcm1zOgpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvaWRsZV90ZXN0L3Rlc3RfYXV0b2NvbXBsZXRlLnB5IGIvTGliL2lkbGVsaWIvaWRsZV90ZXN0L3Rlc3RfYXV0b2NvbXBsZXRlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhMjE5MmUKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvaWRsZWxpYi9pZGxlX3Rlc3QvdGVzdF9hdXRvY29tcGxldGUucHkKQEAgLTAsMCArMSwxNDMgQEAKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJlcXVpcmVzCitmcm9tIHRraW50ZXIgaW1wb3J0IFRrLCBUZXh0CisKK2ltcG9ydCBpZGxlbGliLkF1dG9Db21wbGV0ZSBhcyBhYworaW1wb3J0IGlkbGVsaWIuQXV0b0NvbXBsZXRlV2luZG93IGFzIGFjdworaW1wb3J0IGlkbGVsaWIubWFjb3N4U3VwcG9ydCBhcyBtYWMKK2Zyb20gaWRsZWxpYi5pZGxlX3Rlc3QubW9ja19pZGxlIGltcG9ydCBGdW5jCitmcm9tIGlkbGVsaWIuaWRsZV90ZXN0Lm1vY2tfdGsgaW1wb3J0IEV2ZW50CisKK2NsYXNzIEF1dG9Db21wbGV0ZVdpbmRvdzoKKyAgICBkZWYgY29tcGxldGUoKToKKyAgICAgICAgcmV0dXJuCisKK2NsYXNzIER1bW15RWRpdHdpbjoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcm9vdCwgdGV4dCk6CisgICAgICAgIHNlbGYucm9vdCA9IHJvb3QKKyAgICAgICAgc2VsZi50ZXh0ID0gdGV4dAorICAgICAgICBzZWxmLmluZGVudHdpZHRoID0gOAorICAgICAgICBzZWxmLnRhYndpZHRoID0gOAorICAgICAgICBzZWxmLmNvbnRleHRfdXNlX3BzMSA9IFRydWUKKworCitjbGFzcyBBdXRvQ29tcGxldGVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBzZXRVcENsYXNzKGNscyk6CisgICAgICAgIHJlcXVpcmVzKCdndWknKQorICAgICAgICBjbHMucm9vdCA9IFRrKCkKKyAgICAgICAgbWFjLnNldHVwQXBwKGNscy5yb290LCBOb25lKQorICAgICAgICBjbHMudGV4dCA9IFRleHQoY2xzLnJvb3QpCisgICAgICAgIGNscy5lZGl0b3IgPSBEdW1teUVkaXR3aW4oY2xzLnJvb3QsIGNscy50ZXh0KQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHRlYXJEb3duQ2xhc3MoY2xzKToKKyAgICAgICAgY2xzLnJvb3QuZGVzdHJveSgpCisgICAgICAgIGRlbCBjbHMudGV4dAorICAgICAgICBkZWwgY2xzLmVkaXRvcgorICAgICAgICBkZWwgY2xzLnJvb3QKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5lZGl0b3IudGV4dC5kZWxldGUoJzEuMCcsICdlbmQnKQorICAgICAgICBzZWxmLmF1dG9jb21wbGV0ZSA9IGFjLkF1dG9Db21wbGV0ZShzZWxmLmVkaXRvcikKKworICAgIGRlZiB0ZXN0X2luaXQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5hdXRvY29tcGxldGUuZWRpdHdpbiwgc2VsZi5lZGl0b3IpCisKKyAgICBkZWYgdGVzdF9tYWtlX2F1dG9jb21wbGV0ZV93aW5kb3coc2VsZik6CisgICAgICAgIHRlc3R3aW4gPSBzZWxmLmF1dG9jb21wbGV0ZS5fbWFrZV9hdXRvY29tcGxldGVfd2luZG93KCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHRlc3R3aW4sIGFjdy5BdXRvQ29tcGxldGVXaW5kb3cpCisKKyAgICBkZWYgdGVzdF9yZW1vdmVfYXV0b2NvbXBsZXRlX3dpbmRvdyhzZWxmKToKKyAgICAgICAgc2VsZi5hdXRvY29tcGxldGUuYXV0b2NvbXBsZXRld2luZG93ID0gKAorICAgICAgICAgICAgc2VsZi5hdXRvY29tcGxldGUuX21ha2VfYXV0b2NvbXBsZXRlX3dpbmRvdygpKQorICAgICAgICBzZWxmLmF1dG9jb21wbGV0ZS5fcmVtb3ZlX2F1dG9jb21wbGV0ZV93aW5kb3coKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzZWxmLmF1dG9jb21wbGV0ZS5hdXRvY29tcGxldGV3aW5kb3cpCisKKyAgICBkZWYgdGVzdF9mb3JjZV9vcGVuX2NvbXBsZXRpb25zX2V2ZW50KHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBmb3JjZV9vcGVuX2NvbXBsZXRpb25zX2V2ZW50IGNhbGxzIF9vcGVuX2NvbXBsZXRpb25zCisgICAgICAgIG9fY3MgPSBGdW5jKCkKKyAgICAgICAgc2VsZi5hdXRvY29tcGxldGUub3Blbl9jb21wbGV0aW9ucyA9IG9fY3MKKyAgICAgICAgc2VsZi5hdXRvY29tcGxldGUuZm9yY2Vfb3Blbl9jb21wbGV0aW9uc19ldmVudCgnZXZlbnQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9fY3MuYXJncywgKFRydWUsIEZhbHNlLCBUcnVlKSkKKworICAgIGRlZiB0ZXN0X3RyeV9vcGVuX2NvbXBsZXRpb25zX2V2ZW50KHNlbGYpOgorICAgICAgICBFcXVhbCA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgYXV0b2NvbXBsZXRlID0gc2VsZi5hdXRvY29tcGxldGUKKyAgICAgICAgdHJ5Y29tcGxldGlvbnMgPSBzZWxmLmF1dG9jb21wbGV0ZS50cnlfb3Blbl9jb21wbGV0aW9uc19ldmVudAorICAgICAgICBvX2NfbCA9IEZ1bmMoKQorICAgICAgICBhdXRvY29tcGxldGUuX29wZW5fY29tcGxldGlvbnNfbGF0ZXIgPSBvX2NfbAorCisgICAgICAgICMgX29wZW5fY29tcGxldGlvbnNfbGF0ZXIgc2hvdWxkIG5vdCBiZSBjYWxsZWQgd2l0aCBubyB0ZXh0IGluIGVkaXRvcgorICAgICAgICB0cnljb21wbGV0aW9ucygnZXZlbnQnKQorICAgICAgICBFcXVhbChvX2NfbC5hcmdzLCBOb25lKQorCisgICAgICAgICMgX29wZW5fY29tcGxldGlvbnNfbGF0ZXIgc2hvdWxkIGJlIGNhbGxlZCB3aXRoIENPTVBMRVRFX0FUVFJJQlVURVMgKDEpCisgICAgICAgIHNlbGYudGV4dC5pbnNlcnQoJzEuMCcsICdyZS4nKQorICAgICAgICB0cnljb21wbGV0aW9ucygnZXZlbnQnKQorICAgICAgICBFcXVhbChvX2NfbC5hcmdzLCAoRmFsc2UsIEZhbHNlLCBGYWxzZSwgMSkpCisKKyAgICAgICAgIyBfb3Blbl9jb21wbGV0aW9uc19sYXRlciBzaG91bGQgYmUgY2FsbGVkIHdpdGggQ09NUExFVEVfRklMRVMgKDIpCisgICAgICAgIHNlbGYudGV4dC5kZWxldGUoJzEuMCcsICdlbmQnKQorICAgICAgICBzZWxmLnRleHQuaW5zZXJ0KCcxLjAnLCAnIi4vTGliLycpCisgICAgICAgIHRyeWNvbXBsZXRpb25zKCdldmVudCcpCisgICAgICAgIEVxdWFsKG9fY19sLmFyZ3MsIChGYWxzZSwgRmFsc2UsIEZhbHNlLCAyKSkKKworICAgIGRlZiB0ZXN0X2F1dG9jb21wbGV0ZV9ldmVudChzZWxmKToKKyAgICAgICAgRXF1YWwgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIGF1dG9jb21wbGV0ZSA9IHNlbGYuYXV0b2NvbXBsZXRlCisKKyAgICAgICAgIyBUZXN0IHRoYXQgdGhlIGF1dG9jb21wbGV0ZSBldmVudCBpcyBpZ25vcmVkIGlmIHVzZXIgaXMgcHJlc3NpbmcgYQorICAgICAgICAjIG1vZGlmaWVyIGtleSBpbiBhZGRpdGlvbiB0byB0aGUgdGFiIGtleQorICAgICAgICBldiA9IEV2ZW50KG1jX3N0YXRlPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGF1dG9jb21wbGV0ZS5hdXRvY29tcGxldGVfZXZlbnQoZXYpKQorICAgICAgICBkZWwgZXYubWNfc3RhdGUKKworICAgICAgICAjIElmIGF1dG9jb21wbGV0ZSB3aW5kb3cgaXMgb3BlbiwgY29tcGxldGUoKSBtZXRob2QgaXMgY2FsbGVkCisgICAgICAgIHNlbGYudGV4dC5pbnNlcnQoJzEuMCcsICdyZS4nKQorICAgICAgICAjIFRoaXMgbXVzdCBjYWxsIGF1dG9jb21wbGV0ZS5fbWFrZV9hdXRvY29tcGxldGVfd2luZG93KCkKKyAgICAgICAgRXF1YWwoc2VsZi5hdXRvY29tcGxldGUuYXV0b2NvbXBsZXRlX2V2ZW50KGV2KSwgJ2JyZWFrJykKKworICAgICAgICAjIElmIGF1dG9jb21wbGV0ZSB3aW5kb3cgaXMgbm90IGFjdGl2ZSBvciBkb2VzIG5vdCBleGlzdCwKKyAgICAgICAgIyBvcGVuX2NvbXBsZXRpb25zIGlzIGNhbGxlZC4gUmV0dXJuIGRlcGVuZHMgb24gaXRzIHJldHVybi4KKyAgICAgICAgYXV0b2NvbXBsZXRlLl9yZW1vdmVfYXV0b2NvbXBsZXRlX3dpbmRvdygpCisgICAgICAgIG9fY3MgPSBGdW5jKCkgICMgLnJlc3VsdCA9IE5vbmUKKyAgICAgICAgYXV0b2NvbXBsZXRlLm9wZW5fY29tcGxldGlvbnMgPSBvX2NzCisgICAgICAgIEVxdWFsKHNlbGYuYXV0b2NvbXBsZXRlLmF1dG9jb21wbGV0ZV9ldmVudChldiksIE5vbmUpCisgICAgICAgIEVxdWFsKG9fY3MuYXJncywgKEZhbHNlLCBUcnVlLCBUcnVlKSkKKyAgICAgICAgb19jcy5yZXN1bHQgPSBUcnVlCisgICAgICAgIEVxdWFsKHNlbGYuYXV0b2NvbXBsZXRlLmF1dG9jb21wbGV0ZV9ldmVudChldiksICdicmVhaycpCisgICAgICAgIEVxdWFsKG9fY3MuYXJncywgKEZhbHNlLCBUcnVlLCBUcnVlKSkKKworICAgIGRlZiB0ZXN0X29wZW5fY29tcGxldGlvbnNfbGF0ZXIoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IGF1dG9jb21wbGV0ZS5fZGVsYXllZF9jb21wbGV0aW9uX2lkIGlzIHNldAorICAgICAgICBwYXNzCisKKyAgICBkZWYgdGVzdF9kZWxheWVkX29wZW5fY29tcGxldGlvbnMoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IGF1dG9jb21wbGV0ZS5fZGVsYXllZF9jb21wbGV0aW9uX2lkIHNldCB0byBOb25lIGFuZCB0aGF0CisgICAgICAgICMgb3Blbl9jb21wbGV0aW9ucyBvbmx5IGNhbGxlZCBpZiBpbnNlcnRpb24gaW5kZXggaXMgdGhlIHNhbWUgYXMKKyAgICAgICAgIyBfZGVsYXllZF9jb21wbGV0aW9uX2luZGV4CisgICAgICAgIHBhc3MKKworICAgIGRlZiB0ZXN0X29wZW5fY29tcGxldGlvbnMoc2VsZik6CisgICAgICAgICMgVGVzdCBjb21wbGV0aW9ucyBvZiBmaWxlcyBhbmQgYXR0cmlidXRlcyBhcyB3ZWxsIGFzIG5vbi1jb21wbGV0aW9uCisgICAgICAgICMgb2YgZXJyb3JzCisgICAgICAgIHBhc3MKKworICAgIGRlZiB0ZXN0X2ZldGNoX2NvbXBsZXRpb25zKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBmZXRjaF9jb21wbGV0aW9ucyByZXR1cm5zIDIgbGlzdHM6CisgICAgICAgICMgRm9yIGF0dHJpYnV0ZSBjb21wbGV0aW9uLCBhIGxhcmdlIGxpc3QgY29udGFpbmluZyBhbGwgdmFyaWFibGVzLCBhbmQKKyAgICAgICAgIyBhIHNtYWxsIGxpc3QgY29udGFpbmluZyBub24tcHJpdmF0ZSB2YXJpYWJsZXMuCisgICAgICAgICMgRm9yIGZpbGUgY29tcGxldGlvbiwgYSBsYXJnZSBsaXN0IGNvbnRhaW5pbmcgYWxsIGZpbGVzIGluIHRoZSBwYXRoLAorICAgICAgICAjIGFuZCBhIHNtYWxsIGxpc3QgY29udGFpbmluZyBmaWxlcyB0aGF0IGRvIG5vdCBzdGFydCB3aXRoICcuJworICAgICAgICBwYXNzCisKKyAgICBkZWYgdGVzdF9nZXRfZW50aXR5KHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBhIG5hbWUgaXMgaW4gdGhlIG5hbWVzcGFjZSBvZiBzeXMubW9kdWxlcyBhbmQKKyAgICAgICAgIyBfX21haW5fXy5fX2RpY3RfXworICAgICAgICBwYXNzCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKHZlcmJvc2l0eT0yKQpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvaWRsZV90ZXN0L3Rlc3RfYXV0b2V4cGFuZC5weSBiL0xpYi9pZGxlbGliL2lkbGVfdGVzdC90ZXN0X2F1dG9leHBhbmQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2NhOTQxZQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9pZGxlbGliL2lkbGVfdGVzdC90ZXN0X2F1dG9leHBhbmQucHkKQEAgLTAsMCArMSwxNDEgQEAKKyIiIlVuaXQgdGVzdHMgZm9yIGlkbGVsaWIuQXV0b0V4cGFuZCIiIgoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcmVxdWlyZXMKK2Zyb20gdGtpbnRlciBpbXBvcnQgVGV4dCwgVGsKKyNmcm9tIGlkbGVsaWIuaWRsZV90ZXN0Lm1vY2tfdGsgaW1wb3J0IFRleHQKK2Zyb20gaWRsZWxpYi5BdXRvRXhwYW5kIGltcG9ydCBBdXRvRXhwYW5kCisKKworY2xhc3MgRHVtbXlfRWRpdHdpbjoKKyAgICAjIEF1dG9FeHBhbmQuX19pbml0X18gb25seSBuZWVkcyAudGV4dAorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0ZXh0KToKKyAgICAgICAgc2VsZi50ZXh0ID0gdGV4dAorCitjbGFzcyBBdXRvRXhwYW5kVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc2V0VXBDbGFzcyhjbHMpOgorICAgICAgICBpZiAndGtpbnRlcicgaW4gc3RyKFRleHQpOgorICAgICAgICAgICAgcmVxdWlyZXMoJ2d1aScpCisgICAgICAgICAgICBjbHMudGsgPSBUaygpCisgICAgICAgICAgICBjbHMudGV4dCA9IFRleHQoY2xzLnRrKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY2xzLnRleHQgPSBUZXh0KCkKKyAgICAgICAgY2xzLmF1dG9fZXhwYW5kID0gQXV0b0V4cGFuZChEdW1teV9FZGl0d2luKGNscy50ZXh0KSkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiB0ZWFyRG93bkNsYXNzKGNscyk6CisgICAgICAgIGlmIGhhc2F0dHIoY2xzLCAndGsnKToKKyAgICAgICAgICAgIGNscy50ay5kZXN0cm95KCkKKyAgICAgICAgICAgIGRlbCBjbHMudGsKKyAgICAgICAgZGVsIGNscy50ZXh0LCBjbHMuYXV0b19leHBhbmQKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi50ZXh0LmRlbGV0ZSgnMS4wJywgJ2VuZCcpCisKKyAgICBkZWYgdGVzdF9nZXRfcHJldndvcmQoc2VsZik6CisgICAgICAgIHRleHQgPSBzZWxmLnRleHQKKyAgICAgICAgcHJldmlvdXMgPSBzZWxmLmF1dG9fZXhwYW5kLmdldHByZXZ3b3JkCisgICAgICAgIGVxdWFsID0gc2VsZi5hc3NlcnRFcXVhbAorCisgICAgICAgIGVxdWFsKHByZXZpb3VzKCksICcnKQorCisgICAgICAgIHRleHQuaW5zZXJ0KCdpbnNlcnQnLCAndCcpCisgICAgICAgIGVxdWFsKHByZXZpb3VzKCksICd0JykKKworICAgICAgICB0ZXh0Lmluc2VydCgnaW5zZXJ0JywgJ2hpcycpCisgICAgICAgIGVxdWFsKHByZXZpb3VzKCksICd0aGlzJykKKworICAgICAgICB0ZXh0Lmluc2VydCgnaW5zZXJ0JywgJyAnKQorICAgICAgICBlcXVhbChwcmV2aW91cygpLCAnJykKKworICAgICAgICB0ZXh0Lmluc2VydCgnaW5zZXJ0JywgJ2lzJykKKyAgICAgICAgZXF1YWwocHJldmlvdXMoKSwgJ2lzJykKKworICAgICAgICB0ZXh0Lmluc2VydCgnaW5zZXJ0JywgJ1xuc2FtcGxlXG5zdHJpbmcnKQorICAgICAgICBlcXVhbChwcmV2aW91cygpLCAnc3RyaW5nJykKKworICAgICAgICB0ZXh0LmRlbGV0ZSgnMy4wJywgJ2luc2VydCcpCisgICAgICAgIGVxdWFsKHByZXZpb3VzKCksICcnKQorCisgICAgICAgIHRleHQuZGVsZXRlKCcxLjAnLCAnZW5kJykKKyAgICAgICAgZXF1YWwocHJldmlvdXMoKSwgJycpCisKKyAgICBkZWYgdGVzdF9iZWZvcmVfb25seShzZWxmKToKKyAgICAgICAgcHJldmlvdXMgPSBzZWxmLmF1dG9fZXhwYW5kLmdldHByZXZ3b3JkCisgICAgICAgIGV4cGFuZCA9IHNlbGYuYXV0b19leHBhbmQuZXhwYW5kX3dvcmRfZXZlbnQKKyAgICAgICAgZXF1YWwgPSBzZWxmLmFzc2VydEVxdWFsCisKKyAgICAgICAgc2VsZi50ZXh0Lmluc2VydCgnaW5zZXJ0JywgJ2FiIGFjIGJ4IGFkIGFiIGEnKQorICAgICAgICBlcXVhbChzZWxmLmF1dG9fZXhwYW5kLmdldHdvcmRzKCksIFsnYWInLCAnYWQnLCAnYWMnLCAnYSddKQorICAgICAgICBleHBhbmQoJ2V2ZW50JykKKyAgICAgICAgZXF1YWwocHJldmlvdXMoKSwgJ2FiJykKKyAgICAgICAgZXhwYW5kKCdldmVudCcpCisgICAgICAgIGVxdWFsKHByZXZpb3VzKCksICdhZCcpCisgICAgICAgIGV4cGFuZCgnZXZlbnQnKQorICAgICAgICBlcXVhbChwcmV2aW91cygpLCAnYWMnKQorICAgICAgICBleHBhbmQoJ2V2ZW50JykKKyAgICAgICAgZXF1YWwocHJldmlvdXMoKSwgJ2EnKQorCisgICAgZGVmIHRlc3RfYWZ0ZXJfb25seShzZWxmKToKKyAgICAgICAgIyBBbHNvIGFkZCBwdW5jdHVhdGlvbiAnbm9pc2UnIHRoYXQgc2hvdWxkIGJlIGlnbm9yZWQuCisgICAgICAgIHRleHQgPSBzZWxmLnRleHQKKyAgICAgICAgcHJldmlvdXMgPSBzZWxmLmF1dG9fZXhwYW5kLmdldHByZXZ3b3JkCisgICAgICAgIGV4cGFuZCA9IHNlbGYuYXV0b19leHBhbmQuZXhwYW5kX3dvcmRfZXZlbnQKKyAgICAgICAgZXF1YWwgPSBzZWxmLmFzc2VydEVxdWFsCisKKyAgICAgICAgdGV4dC5pbnNlcnQoJ2luc2VydCcsICdhLCBbYWJdIGFjOiAoKSBieCIiIGNkIGFjPSBhZCB5YScpCisgICAgICAgIHRleHQubWFya19zZXQoJ2luc2VydCcsICcxLjEnKQorICAgICAgICBlcXVhbChzZWxmLmF1dG9fZXhwYW5kLmdldHdvcmRzKCksIFsnYWInLCAnYWMnLCAnYWQnLCAnYSddKQorICAgICAgICBleHBhbmQoJ2V2ZW50JykKKyAgICAgICAgZXF1YWwocHJldmlvdXMoKSwgJ2FiJykKKyAgICAgICAgZXhwYW5kKCdldmVudCcpCisgICAgICAgIGVxdWFsKHByZXZpb3VzKCksICdhYycpCisgICAgICAgIGV4cGFuZCgnZXZlbnQnKQorICAgICAgICBlcXVhbChwcmV2aW91cygpLCAnYWQnKQorICAgICAgICBleHBhbmQoJ2V2ZW50JykKKyAgICAgICAgZXF1YWwocHJldmlvdXMoKSwgJ2EnKQorCisgICAgZGVmIHRlc3RfYm90aF9iZWZvcmVfYWZ0ZXIoc2VsZik6CisgICAgICAgIHRleHQgPSBzZWxmLnRleHQKKyAgICAgICAgcHJldmlvdXMgPSBzZWxmLmF1dG9fZXhwYW5kLmdldHByZXZ3b3JkCisgICAgICAgIGV4cGFuZCA9IHNlbGYuYXV0b19leHBhbmQuZXhwYW5kX3dvcmRfZXZlbnQKKyAgICAgICAgZXF1YWwgPSBzZWxmLmFzc2VydEVxdWFsCisKKyAgICAgICAgdGV4dC5pbnNlcnQoJ2luc2VydCcsICdhYiB4eSB5elxuJykKKyAgICAgICAgdGV4dC5pbnNlcnQoJ2luc2VydCcsICdhIGFjIGJ5IGFjJykKKworICAgICAgICB0ZXh0Lm1hcmtfc2V0KCdpbnNlcnQnLCAnMi4xJykKKyAgICAgICAgZXF1YWwoc2VsZi5hdXRvX2V4cGFuZC5nZXR3b3JkcygpLCBbJ2FiJywgJ2FjJywgJ2EnXSkKKyAgICAgICAgZXhwYW5kKCdldmVudCcpCisgICAgICAgIGVxdWFsKHByZXZpb3VzKCksICdhYicpCisgICAgICAgIGV4cGFuZCgnZXZlbnQnKQorICAgICAgICBlcXVhbChwcmV2aW91cygpLCAnYWMnKQorICAgICAgICBleHBhbmQoJ2V2ZW50JykKKyAgICAgICAgZXF1YWwocHJldmlvdXMoKSwgJ2EnKQorCisgICAgZGVmIHRlc3Rfb3RoZXJfZXhwYW5kX2Nhc2VzKHNlbGYpOgorICAgICAgICB0ZXh0ID0gc2VsZi50ZXh0CisgICAgICAgIGV4cGFuZCA9IHNlbGYuYXV0b19leHBhbmQuZXhwYW5kX3dvcmRfZXZlbnQKKyAgICAgICAgZXF1YWwgPSBzZWxmLmFzc2VydEVxdWFsCisKKyAgICAgICAgIyBubyBleHBhbnNpb24gY2FuZGlkYXRlIGZvdW5kCisgICAgICAgIGVxdWFsKHNlbGYuYXV0b19leHBhbmQuZ2V0d29yZHMoKSwgW10pCisgICAgICAgIGVxdWFsKGV4cGFuZCgnZXZlbnQnKSwgJ2JyZWFrJykKKworICAgICAgICB0ZXh0Lmluc2VydCgnaW5zZXJ0JywgJ2J4IGN5IGR6IGEnKQorICAgICAgICBlcXVhbChzZWxmLmF1dG9fZXhwYW5kLmdldHdvcmRzKCksIFtdKQorCisgICAgICAgICMgcmVzZXQgc3RhdGUgYnkgc3VjY2Vzc2Z1bGx5IGV4cGFuZGluZyBvbmNlCisgICAgICAgICMgbW92ZSBjdXJzb3IgdG8gYW5vdGhlciBwb3NpdGlvbiBhbmQgZXhwYW5kIGFnYWluCisgICAgICAgIHRleHQuaW5zZXJ0KCdpbnNlcnQnLCAnYWMgeHkgYSBhYyBhZCBhJykKKyAgICAgICAgdGV4dC5tYXJrX3NldCgnaW5zZXJ0JywgJzEuNycpCisgICAgICAgIGV4cGFuZCgnZXZlbnQnKQorICAgICAgICBpbml0aWFsX3N0YXRlID0gc2VsZi5hdXRvX2V4cGFuZC5zdGF0ZQorICAgICAgICB0ZXh0Lm1hcmtfc2V0KCdpbnNlcnQnLCAnMS5lbmQnKQorICAgICAgICBleHBhbmQoJ2V2ZW50JykKKyAgICAgICAgbmV3X3N0YXRlID0gc2VsZi5hdXRvX2V4cGFuZC5zdGF0ZQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGluaXRpYWxfc3RhdGUsIG5ld19zdGF0ZSkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKHZlcmJvc2l0eT0yKQpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvaWRsZV90ZXN0L3Rlc3RfY2FsbHRpcHMucHkgYi9MaWIvaWRsZWxpYi9pZGxlX3Rlc3QvdGVzdF9jYWxsdGlwcy5weQppbmRleCBmMzYzNzY0Li5iMmE3MzNjIDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9pZGxlX3Rlc3QvdGVzdF9jYWxsdGlwcy5weQorKysgYi9MaWIvaWRsZWxpYi9pZGxlX3Rlc3QvdGVzdF9jYWxsdGlwcy5weQpAQCAtNTIsMTEgKzUyLDEyIEBACiAgICAgICAgIGRlZiBndGVzdChvYmosIG91dCk6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpZ25hdHVyZShvYmopLCBvdXQpCiAKLSAgICAgICAgZ3Rlc3QoTGlzdCwgTGlzdC5fX2RvY19fKQorICAgICAgICBpZiBMaXN0Ll9fZG9jX18gaXMgbm90IE5vbmU6CisgICAgICAgICAgICBndGVzdChMaXN0LCBMaXN0Ll9fZG9jX18pCiAgICAgICAgIGd0ZXN0KGxpc3QuX19uZXdfXywKLSAgICAgICAgICAgICAgICdULl9fbmV3X18oUywgLi4uKSAtPiBhIG5ldyBvYmplY3Qgd2l0aCB0eXBlIFMsIGEgc3VidHlwZSBvZiBUJykKKyAgICAgICAgICAgICAgICdDcmVhdGUgYW5kIHJldHVybiBhIG5ldyBvYmplY3QuICBTZWUgaGVscCh0eXBlKSBmb3IgYWNjdXJhdGUgc2lnbmF0dXJlLicpCiAgICAgICAgIGd0ZXN0KGxpc3QuX19pbml0X18sCi0gICAgICAgICAgICAgICAneC5fX2luaXRfXyguLi4pIGluaXRpYWxpemVzIHg7IHNlZSBoZWxwKHR5cGUoeCkpIGZvciBzaWduYXR1cmUnKQorICAgICAgICAgICAgICAgJ0luaXRpYWxpemUgc2VsZi4gIFNlZSBoZWxwKHR5cGUoc2VsZikpIGZvciBhY2N1cmF0ZSBzaWduYXR1cmUuJykKICAgICAgICAgYXBwZW5kX2RvYyA9ICAiTC5hcHBlbmQob2JqZWN0KSAtPiBOb25lIC0tIGFwcGVuZCBvYmplY3QgdG8gZW5kIgogICAgICAgICBndGVzdChsaXN0LmFwcGVuZCwgYXBwZW5kX2RvYykKICAgICAgICAgZ3Rlc3QoW10uYXBwZW5kLCBhcHBlbmRfZG9jKQpAQCAtNjYsMTAgKzY3LDEyIEBACiAgICAgICAgIGd0ZXN0KFNCKCksIGRlZmF1bHRfdGlwKQogCiAgICAgZGVmIHRlc3Rfc2lnbmF0dXJlX3dyYXAoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2lnbmF0dXJlKHRleHR3cmFwLlRleHRXcmFwcGVyKSwgJycnXAorICAgICAgICBpZiB0ZXh0d3JhcC5UZXh0V3JhcHBlci5fX2RvY19fIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaWduYXR1cmUodGV4dHdyYXAuVGV4dFdyYXBwZXIpLCAnJydcCiAod2lkdGg9NzAsIGluaXRpYWxfaW5kZW50PScnLCBzdWJzZXF1ZW50X2luZGVudD0nJywgZXhwYW5kX3RhYnM9VHJ1ZSwKICAgICByZXBsYWNlX3doaXRlc3BhY2U9VHJ1ZSwgZml4X3NlbnRlbmNlX2VuZGluZ3M9RmFsc2UsIGJyZWFrX2xvbmdfd29yZHM9VHJ1ZSwKLSAgICBkcm9wX3doaXRlc3BhY2U9VHJ1ZSwgYnJlYWtfb25faHlwaGVucz1UcnVlLCB0YWJzaXplPTgpJycnKQorICAgIGRyb3Bfd2hpdGVzcGFjZT1UcnVlLCBicmVha19vbl9oeXBoZW5zPVRydWUsIHRhYnNpemU9OCwgKiwgbWF4X2xpbmVzPU5vbmUsCisgICAgcGxhY2Vob2xkZXI9JyBbLi4uXScpJycnKQogCiAgICAgZGVmIHRlc3RfZG9jbGluZV90cnVuY2F0aW9uKHNlbGYpOgogICAgICAgICBkZWYgZigpOiBwYXNzCkBAIC0xMDcsMjAgKzExMCwyMyBAQAogICAgICAgICBkZWYgdDUoYSwgYj1Ob25lLCAqYXJncywgKiprdyk6ICdkb2MnCiAgICAgICAgIHQ1LnRpcCA9ICIoYSwgYj1Ob25lLCAqYXJncywgKiprdykiCiAKKyAgICAgICAgZG9jID0gJ1xuZG9jJyBpZiB0MS5fX2RvY19fIGlzIG5vdCBOb25lIGVsc2UgJycKICAgICAgICAgZm9yIGZ1bmMgaW4gKHQxLCB0MiwgdDMsIHQ0LCB0NSwgVEMpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaWduYXR1cmUoZnVuYyksIGZ1bmMudGlwICsgJ1xuZG9jJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2lnbmF0dXJlKGZ1bmMpLCBmdW5jLnRpcCArIGRvYykKIAogICAgIGRlZiB0ZXN0X21ldGhvZHMoc2VsZik6CisgICAgICAgIGRvYyA9ICdcbmRvYycgaWYgVEMuX19kb2NfXyBpcyBub3QgTm9uZSBlbHNlICcnCiAgICAgICAgIGZvciBtZXRoIGluIChUQy50MSwgVEMudDIsIFRDLnQzLCBUQy50NCwgVEMudDUsIFRDLnQ2LCBUQy5fX2NhbGxfXyk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpZ25hdHVyZShtZXRoKSwgbWV0aC50aXAgKyAiXG5kb2MiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpZ25hdHVyZShUQy5jbSksICIoYSlcbmRvYyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2lnbmF0dXJlKFRDLnNtKSwgIihiKVxuZG9jIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2lnbmF0dXJlKG1ldGgpLCBtZXRoLnRpcCArIGRvYykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaWduYXR1cmUoVEMuY20pLCAiKGEpIiArIGRvYykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaWduYXR1cmUoVEMuc20pLCAiKGIpIiArIGRvYykKIAogICAgIGRlZiB0ZXN0X2JvdW5kX21ldGhvZHMoc2VsZik6CiAgICAgICAgICMgdGVzdCB0aGF0IGZpcnN0IHBhcmFtZXRlciBpcyBjb3JyZWN0bHkgcmVtb3ZlZCBmcm9tIGFyZ3NwZWMKKyAgICAgICAgZG9jID0gJ1xuZG9jJyBpZiBUQy5fX2RvY19fIGlzIG5vdCBOb25lIGVsc2UgJycKICAgICAgICAgZm9yIG1ldGgsIG10aXAgIGluICgodGMudDEsICIoKSIpLCAodGMudDQsICIoKmFyZ3MpIiksICh0Yy50NiwgIihzZWxmKSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0Yy5fX2NhbGxfXywgJyhjaSknKSwgKHRjLCAnKGNpKScpLCAoVEMuY20sICIoYSkiKSwpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaWduYXR1cmUobWV0aCksIG10aXAgKyAiXG5kb2MiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaWduYXR1cmUobWV0aCksIG10aXAgKyBkb2MpCiAKICAgICBkZWYgdGVzdF9zdGFycmVkX3BhcmFtZXRlcihzZWxmKToKICAgICAgICAgIyB0ZXN0IHRoYXQgc3RhcnJlZCBmaXJzdCBwYXJhbWV0ZXIgaXMgKm5vdCogcmVtb3ZlZCBmcm9tIGFyZ3NwZWMKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL2lkbGVfdGVzdC90ZXN0X2NvbmZpZ2RpYWxvZy5weSBiL0xpYi9pZGxlbGliL2lkbGVfdGVzdC90ZXN0X2NvbmZpZ2RpYWxvZy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODgzMTIzCi0tLSAvZGV2L251bGwKKysrIGIvTGliL2lkbGVsaWIvaWRsZV90ZXN0L3Rlc3RfY29uZmlnZGlhbG9nLnB5CkBAIC0wLDAgKzEsMzIgQEAKKycnJ1VuaXR0ZXN0cyBmb3IgaWRsZWxpYi9jb25maWdIYW5kbGVyLnB5CisKK0NvdmVyYWdlOiA0NiUganVzdCBieSBjcmVhdGluZyBkaWFsb2cuIFRoZSBvdGhlciBoYWxmIGlzIGNoYW5nZSBjb2RlLgorCisnJycKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJlcXVpcmVzCitmcm9tIHRraW50ZXIgaW1wb3J0IFRrCitmcm9tIGlkbGVsaWIuY29uZmlnRGlhbG9nIGltcG9ydCBDb25maWdEaWFsb2cKK2Zyb20gaWRsZWxpYi5tYWNvc3hTdXBwb3J0IGltcG9ydCBfaW5pdGlhbGl6ZVRrVmFyaWFudFRlc3RzCisKKworY2xhc3MgQ29uZmlnRGlhbG9nVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc2V0VXBDbGFzcyhjbHMpOgorICAgICAgICByZXF1aXJlcygnZ3VpJykKKyAgICAgICAgY2xzLnJvb3QgPSBUaygpCisgICAgICAgIF9pbml0aWFsaXplVGtWYXJpYW50VGVzdHMoY2xzLnJvb3QpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgdGVhckRvd25DbGFzcyhjbHMpOgorICAgICAgICBjbHMucm9vdC5kZXN0cm95KCkKKyAgICAgICAgZGVsIGNscy5yb290CisKKyAgICBkZWYgdGVzdF9kaWFsb2coc2VsZik6CisgICAgICAgIGQ9Q29uZmlnRGlhbG9nKHNlbGYucm9vdCwgJ1Rlc3QnLCBfdXRlc3Q9VHJ1ZSkKKyAgICAgICAgZC5kZXN0cm95KCkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4odmVyYm9zaXR5PTIpCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9pZGxlX3Rlc3QvdGVzdF9lZGl0b3IucHkgYi9MaWIvaWRsZWxpYi9pZGxlX3Rlc3QvdGVzdF9lZGl0b3IucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTMxZDI2ZAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9pZGxlbGliL2lkbGVfdGVzdC90ZXN0X2VkaXRvci5weQpAQCAtMCwwICsxLDE2IEBACitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGtpbnRlciBpbXBvcnQgVGssIFRleHQKK2Zyb20gaWRsZWxpYi5FZGl0b3JXaW5kb3cgaW1wb3J0IEVkaXRvcldpbmRvdworZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJlcXVpcmVzCisKK2NsYXNzIEVkaXRvcl9mdW5jX3Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2ZpbGVuYW1lX3RvX3VuaWNvZGUoc2VsZik6CisgICAgICAgIGZ1bmMgPSBFZGl0b3JXaW5kb3cuX2ZpbGVuYW1lX3RvX3VuaWNvZGUKKyAgICAgICAgY2xhc3MgZHVtbXkoKTogZmlsZXN5c3RlbWVuY29kaW5nID0gJ3V0Zi04JworICAgICAgICBwYWlycyA9ICgoJ2FiYycsICdhYmMnKSwgKCdhXFUwMDAxMTExMWMnLCAnYVx1ZmZmZGMnKSwKKyAgICAgICAgICAgICAgICAgKGInYWJjJywgJ2FiYycpLCAoYidhXHhmMFx4OTFceDg0XHg5MWMnLCAnYVx1ZmZmZGMnKSkKKyAgICAgICAgZm9yIGlucCwgb3V0IGluIHBhaXJzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmdW5jKGR1bW15LCBpbnApLCBvdXQpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbih2ZXJib3NpdHk9MikKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL2lkbGVfdGVzdC90ZXN0X2Zvcm1hdHBhcmFncmFwaC5weSBiL0xpYi9pZGxlbGliL2lkbGVfdGVzdC90ZXN0X2Zvcm1hdHBhcmFncmFwaC5weQppbmRleCBmNGE3YzJkLi5mNjAzOWU2IDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9pZGxlX3Rlc3QvdGVzdF9mb3JtYXRwYXJhZ3JhcGgucHkKKysrIGIvTGliL2lkbGVsaWIvaWRsZV90ZXN0L3Rlc3RfZm9ybWF0cGFyYWdyYXBoLnB5CkBAIC0yLDcgKzIsNyBAQAogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIGlkbGVsaWIgaW1wb3J0IEZvcm1hdFBhcmFncmFwaCBhcyBmcAogZnJvbSBpZGxlbGliLkVkaXRvcldpbmRvdyBpbXBvcnQgRWRpdG9yV2luZG93Ci1mcm9tIHRraW50ZXIgaW1wb3J0IFRrLCBUZXh0LCBUY2xFcnJvcgorZnJvbSB0a2ludGVyIGltcG9ydCBUaywgVGV4dAogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJlcXVpcmVzCiAKIApAQCAtMjkzLDcgKzI5Myw3IEBACiAgICAgICAgICMgU2V0IGN1cnNvciAoJ2luc2VydCcgbWFyaykgdG8gJzEuMCcsIHdpdGhpbiB0ZXh0LgogICAgICAgICB0ZXh0Lmluc2VydCgnMS4wJywgc2VsZi50ZXN0X3N0cmluZykKICAgICAgICAgdGV4dC5tYXJrX3NldCgnaW5zZXJ0JywgJzEuMCcpCi0gICAgICAgIHNlbGYuZm9ybWF0dGVyKCdQYXJhbWV0ZXJEb2VzTm90aGluZycpCisgICAgICAgIHNlbGYuZm9ybWF0dGVyKCdQYXJhbWV0ZXJEb2VzTm90aGluZycsIGxpbWl0PTcwKQogICAgICAgICByZXN1bHQgPSB0ZXh0LmdldCgnMS4wJywgJ2luc2VydCcpCiAgICAgICAgICMgZmluZCBmdW5jdGlvbiBpbmNsdWRlcyBcbgogICAgICAgICBleHBlY3RlZCA9ICgKQEAgLTMwNSw3ICszMDUsNyBAQAogICAgICAgICAjIFNlbGVjdCBmcm9tIDEuMTEgdG8gbGluZSBlbmQuCiAgICAgICAgIHRleHQuaW5zZXJ0KCcxLjAnLCBzZWxmLnRlc3Rfc3RyaW5nKQogICAgICAgICB0ZXh0LnRhZ19hZGQoJ3NlbCcsICcxLjExJywgJzEuZW5kJykKLSAgICAgICAgc2VsZi5mb3JtYXR0ZXIoJ1BhcmFtZXRlckRvZXNOb3RoaW5nJykKKyAgICAgICAgc2VsZi5mb3JtYXR0ZXIoJ1BhcmFtZXRlckRvZXNOb3RoaW5nJywgbGltaXQ9NzApCiAgICAgICAgIHJlc3VsdCA9IHRleHQuZ2V0KCcxLjAnLCAnaW5zZXJ0JykKICAgICAgICAgIyBzZWxlY3Rpb24gZXhjbHVkZXMgXG4KICAgICAgICAgZXhwZWN0ZWQgPSAoCkBAIC0zMTksNyArMzE5LDcgQEAKICAgICAgICAgIyAgU2VsZWN0IDIgbG9uZyBsaW5lcy4KICAgICAgICAgdGV4dC5pbnNlcnQoJzEuMCcsIHNlbGYubXVsdGlsaW5lX3Rlc3Rfc3RyaW5nKQogICAgICAgICB0ZXh0LnRhZ19hZGQoJ3NlbCcsICcyLjAnLCAnNC4wJykKLSAgICAgICAgc2VsZi5mb3JtYXR0ZXIoJ1BhcmFtZXRlckRvZXNOb3RoaW5nJykKKyAgICAgICAgc2VsZi5mb3JtYXR0ZXIoJ1BhcmFtZXRlckRvZXNOb3RoaW5nJywgbGltaXQ9NzApCiAgICAgICAgIHJlc3VsdCA9IHRleHQuZ2V0KCcyLjAnLCAnaW5zZXJ0JykKICAgICAgICAgZXhwZWN0ZWQgPSAoCiAiICAgIFRoZSBzZWNvbmQgbGluZSdzIGxlbmd0aCBpcyB3YXkgb3ZlciB0aGUgbWF4IHdpZHRoLiBJdCBnb2VzIG9uIGFuZFxuIgpAQCAtMzM0LDcgKzMzNCw3IEBACiAKICAgICAgICAgIyBTZXQgY3Vyc29yICgnaW5zZXJ0JykgdG8gJzEuMCcsIHdpdGhpbiBibG9jay4KICAgICAgICAgdGV4dC5pbnNlcnQoJzEuMCcsIHNlbGYubXVsdGlsaW5lX3Rlc3RfY29tbWVudCkKLSAgICAgICAgc2VsZi5mb3JtYXR0ZXIoJ1BhcmFtZXRlckRvZXNOb3RoaW5nJykKKyAgICAgICAgc2VsZi5mb3JtYXR0ZXIoJ1BhcmFtZXRlckRvZXNOb3RoaW5nJywgbGltaXQ9NzApCiAgICAgICAgIHJlc3VsdCA9IHRleHQuZ2V0KCcxLjAnLCAnaW5zZXJ0JykKICAgICAgICAgZXhwZWN0ZWQgPSAoCiAiIyBUaGUgZmlyc3QgbGluZSBpcyB1bmRlciB0aGUgbWF4IHdpZHRoLiBUaGUgc2Vjb25kIGxpbmUncyBsZW5ndGggaXNcbiIKQEAgLTM0OCw3ICszNDgsNyBAQAogICAgICAgICAjIFNlbGVjdCBsaW5lIDIsIHZlcmlmeSBsaW5lIDEgdW5hZmZlY3RlZC4KICAgICAgICAgdGV4dC5pbnNlcnQoJzEuMCcsIHNlbGYubXVsdGlsaW5lX3Rlc3RfY29tbWVudCkKICAgICAgICAgdGV4dC50YWdfYWRkKCdzZWwnLCAnMi4wJywgJzMuMCcpCi0gICAgICAgIHNlbGYuZm9ybWF0dGVyKCdQYXJhbWV0ZXJEb2VzTm90aGluZycpCisgICAgICAgIHNlbGYuZm9ybWF0dGVyKCdQYXJhbWV0ZXJEb2VzTm90aGluZycsIGxpbWl0PTcwKQogICAgICAgICByZXN1bHQgPSB0ZXh0LmdldCgnMS4wJywgJ2luc2VydCcpCiAgICAgICAgIGV4cGVjdGVkID0gKAogIiMgVGhlIGZpcnN0IGxpbmUgaXMgdW5kZXIgdGhlIG1heCB3aWR0aC5cbiIKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL2lkbGVfdGVzdC90ZXN0X2h5cGVycGFyc2VyLnB5IGIvTGliL2lkbGVsaWIvaWRsZV90ZXN0L3Rlc3RfaHlwZXJwYXJzZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWRmYzc4MwotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9pZGxlbGliL2lkbGVfdGVzdC90ZXN0X2h5cGVycGFyc2VyLnB5CkBAIC0wLDAgKzEsMjczIEBACisiIiJVbml0dGVzdCBmb3IgaWRsZWxpYi5IeXBlclBhcnNlciIiIgoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcmVxdWlyZXMKK2Zyb20gdGtpbnRlciBpbXBvcnQgVGssIFRleHQKK2Zyb20gaWRsZWxpYi5FZGl0b3JXaW5kb3cgaW1wb3J0IEVkaXRvcldpbmRvdworZnJvbSBpZGxlbGliLkh5cGVyUGFyc2VyIGltcG9ydCBIeXBlclBhcnNlcgorCitjbGFzcyBEdW1teUVkaXR3aW46CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRleHQpOgorICAgICAgICBzZWxmLnRleHQgPSB0ZXh0CisgICAgICAgIHNlbGYuaW5kZW50d2lkdGggPSA4CisgICAgICAgIHNlbGYudGFid2lkdGggPSA4CisgICAgICAgIHNlbGYuY29udGV4dF91c2VfcHMxID0gVHJ1ZQorICAgICAgICBzZWxmLm51bV9jb250ZXh0X2xpbmVzID0gNTAsIDUwMCwgMTAwMAorCisgICAgX2J1aWxkX2NoYXJfaW5fc3RyaW5nX2Z1bmMgPSBFZGl0b3JXaW5kb3cuX2J1aWxkX2NoYXJfaW5fc3RyaW5nX2Z1bmMKKyAgICBpc19jaGFyX2luX3N0cmluZyA9IEVkaXRvcldpbmRvdy5pc19jaGFyX2luX3N0cmluZworCisKK2NsYXNzIEh5cGVyUGFyc2VyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgY29kZSA9ICgKKyAgICAgICAgICAgICciIiJUaGlzIGlzIGEgbW9kdWxlIGRvY3N0cmluZyIiIlxuJworICAgICAgICAgICAgJyMgdGhpcyBsaW5lIGlzIGEgY29tbWVudFxuJworICAgICAgICAgICAgJ3ggPSAidGhpcyBpcyBhIHN0cmluZyJcbicKKyAgICAgICAgICAgICJ5ID0gJ3RoaXMgaXMgYWxzbyBhIHN0cmluZydcbiIKKyAgICAgICAgICAgICdsID0gW2kgZm9yIGkgaW4gcmFuZ2UoMTApXVxuJworICAgICAgICAgICAgJ20gPSBbcHkqcHkgZm9yICMgY29tbWVudFxuJworICAgICAgICAgICAgJyAgICAgICBweSBpbiBsXVxuJworICAgICAgICAgICAgJ3guX19sZW5fX1xuJworICAgICAgICAgICAgInogPSAoKHInYXNkZicpKygnYScpKSlcbiIKKyAgICAgICAgICAgICdbeCBmb3IgeCBpblxuJworICAgICAgICAgICAgJ2ZvciA9IEZhbHNlXG4nCisgICAgICAgICAgICAnY2xpY2jDqSA9ICJ0aGlzIGlzIGEgc3RyaW5nIHdpdGggdW5pY29kZSwgd2hhdCBhIGNsaWNow6kiJworICAgICAgICAgICAgKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3MoY2xzKToKKyAgICAgICAgcmVxdWlyZXMoJ2d1aScpCisgICAgICAgIGNscy5yb290ID0gVGsoKQorICAgICAgICBjbHMudGV4dCA9IFRleHQoY2xzLnJvb3QpCisgICAgICAgIGNscy5lZGl0d2luID0gRHVtbXlFZGl0d2luKGNscy50ZXh0KQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHRlYXJEb3duQ2xhc3MoY2xzKToKKyAgICAgICAgZGVsIGNscy50ZXh0LCBjbHMuZWRpdHdpbgorICAgICAgICBjbHMucm9vdC5kZXN0cm95KCkKKyAgICAgICAgZGVsIGNscy5yb290CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYudGV4dC5pbnNlcnQoJ2luc2VydCcsIHNlbGYuY29kZSkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi50ZXh0LmRlbGV0ZSgnMS4wJywgJ2VuZCcpCisgICAgICAgIHNlbGYuZWRpdHdpbi5jb250ZXh0X3VzZV9wczEgPSBUcnVlCisKKyAgICBkZWYgZ2V0X3BhcnNlcihzZWxmLCBpbmRleCk6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm4gYSBwYXJzZXIgb2JqZWN0IHdpdGggaW5kZXggYXQgJ2luZGV4JworICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIEh5cGVyUGFyc2VyKHNlbGYuZWRpdHdpbiwgaW5kZXgpCisKKyAgICBkZWYgdGVzdF9pbml0KHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgdGVzdCBjb3JuZXIgY2FzZXMgaW4gdGhlIGluaXQgbWV0aG9kCisgICAgICAgICIiIgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpIGFzIHZlOgorICAgICAgICAgICAgc2VsZi50ZXh0LnRhZ19hZGQoJ2NvbnNvbGUnLCAnMS4wJywgJzEuZW5kJykKKyAgICAgICAgICAgIHAgPSBzZWxmLmdldF9wYXJzZXIoJzEuNScpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3ByZWNlZGVzJywgc3RyKHZlLmV4Y2VwdGlvbikpCisKKyAgICAgICAgIyB0ZXN0IHdpdGhvdXQgcHMxCisgICAgICAgIHNlbGYuZWRpdHdpbi5jb250ZXh0X3VzZV9wczEgPSBGYWxzZQorCisgICAgICAgICMgbnVtYmVyIG9mIGxpbmVzIGxlc3NlciB0aGFuIDUwCisgICAgICAgIHAgPSBzZWxmLmdldF9wYXJzZXIoJ2VuZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5yYXd0ZXh0LCBzZWxmLnRleHQuZ2V0KCcxLjAnLCAnZW5kJykpCisKKyAgICAgICAgIyBudW1iZXIgb2YgbGluZXMgZ3JlYXRlciB0aGFuIDUwCisgICAgICAgIHNlbGYudGV4dC5pbnNlcnQoJ2VuZCcsIHNlbGYudGV4dC5nZXQoJzEuMCcsICdlbmQnKSo0KQorICAgICAgICBwID0gc2VsZi5nZXRfcGFyc2VyKCc1NC41JykKKworICAgIGRlZiB0ZXN0X2lzX2luX3N0cmluZyhzZWxmKToKKyAgICAgICAgZ2V0ID0gc2VsZi5nZXRfcGFyc2VyCisKKyAgICAgICAgcCA9IGdldCgnMS4wJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShwLmlzX2luX3N0cmluZygpKQorICAgICAgICBwID0gZ2V0KCcxLjQnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocC5pc19pbl9zdHJpbmcoKSkKKyAgICAgICAgcCA9IGdldCgnMi4zJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShwLmlzX2luX3N0cmluZygpKQorICAgICAgICBwID0gZ2V0KCczLjMnKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHAuaXNfaW5fc3RyaW5nKCkpCisgICAgICAgIHAgPSBnZXQoJzMuNycpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwLmlzX2luX3N0cmluZygpKQorICAgICAgICBwID0gZ2V0KCc0LjYnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocC5pc19pbl9zdHJpbmcoKSkKKyAgICAgICAgcCA9IGdldCgnMTIuNTQnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocC5pc19pbl9zdHJpbmcoKSkKKworICAgIGRlZiB0ZXN0X2lzX2luX2NvZGUoc2VsZik6CisgICAgICAgIGdldCA9IHNlbGYuZ2V0X3BhcnNlcgorCisgICAgICAgIHAgPSBnZXQoJzEuMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwLmlzX2luX2NvZGUoKSkKKyAgICAgICAgcCA9IGdldCgnMS4xJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShwLmlzX2luX2NvZGUoKSkKKyAgICAgICAgcCA9IGdldCgnMi41JykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShwLmlzX2luX2NvZGUoKSkKKyAgICAgICAgcCA9IGdldCgnMy40JykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHAuaXNfaW5fY29kZSgpKQorICAgICAgICBwID0gZ2V0KCczLjYnKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHAuaXNfaW5fY29kZSgpKQorICAgICAgICBwID0gZ2V0KCc0LjE0JykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShwLmlzX2luX2NvZGUoKSkKKworICAgIGRlZiB0ZXN0X2dldF9zdXJyb3VuZGluZ19icmFja2V0KHNlbGYpOgorICAgICAgICBnZXQgPSBzZWxmLmdldF9wYXJzZXIKKworICAgICAgICBkZWYgd2l0aG91dF9tdXN0Y2xvc2UocGFyc2VyKToKKyAgICAgICAgICAgICMgYSB1dGlsaXR5IGZ1bmN0aW9uIHRvIGdldCBzdXJyb3VuZGluZyBicmFja2V0CisgICAgICAgICAgICAjIHdpdGggbXVzdGNsb3NlPUZhbHNlCisgICAgICAgICAgICByZXR1cm4gcGFyc2VyLmdldF9zdXJyb3VuZGluZ19icmFja2V0cyhtdXN0Y2xvc2U9RmFsc2UpCisKKyAgICAgICAgZGVmIHdpdGhfbXVzdGNsb3NlKHBhcnNlcik6CisgICAgICAgICAgICAjIGEgdXRpbGl0eSBmdW5jdGlvbiB0byBnZXQgc3Vycm91bmRpbmcgYnJhY2tldAorICAgICAgICAgICAgIyB3aXRoIG11c3RjbG9zZT1UcnVlCisgICAgICAgICAgICByZXR1cm4gcGFyc2VyLmdldF9zdXJyb3VuZGluZ19icmFja2V0cyhtdXN0Y2xvc2U9VHJ1ZSkKKworICAgICAgICBwID0gZ2V0KCczLjInKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh3aXRoX211c3RjbG9zZShwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUod2l0aG91dF9tdXN0Y2xvc2UocCkpCisKKyAgICAgICAgcCA9IGdldCgnNS42JykKKyAgICAgICAgc2VsZi5hc3NlcnRUdXBsZUVxdWFsKHdpdGhvdXRfbXVzdGNsb3NlKHApLCAoJzUuNCcsICc1LjI1JykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHVwbGVFcXVhbCh3aXRob3V0X211c3RjbG9zZShwKSwgd2l0aF9tdXN0Y2xvc2UocCkpCisKKyAgICAgICAgcCA9IGdldCgnNS4yMycpCisgICAgICAgIHNlbGYuYXNzZXJ0VHVwbGVFcXVhbCh3aXRob3V0X211c3RjbG9zZShwKSwgKCc1LjIxJywgJzUuMjQnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUdXBsZUVxdWFsKHdpdGhvdXRfbXVzdGNsb3NlKHApLCB3aXRoX211c3RjbG9zZShwKSkKKworICAgICAgICBwID0gZ2V0KCc2LjE1JykKKyAgICAgICAgc2VsZi5hc3NlcnRUdXBsZUVxdWFsKHdpdGhvdXRfbXVzdGNsb3NlKHApLCAoJzYuNCcsICc2LmVuZCcpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh3aXRoX211c3RjbG9zZShwKSkKKworICAgICAgICBwID0gZ2V0KCc5LmVuZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHdpdGhfbXVzdGNsb3NlKHApKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh3aXRob3V0X211c3RjbG9zZShwKSkKKworICAgIGRlZiB0ZXN0X2dldF9leHByZXNzaW9uKHNlbGYpOgorICAgICAgICBnZXQgPSBzZWxmLmdldF9wYXJzZXIKKworICAgICAgICBwID0gZ2V0KCc0LjInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuZ2V0X2V4cHJlc3Npb24oKSwgJ3kgJykKKworICAgICAgICBwID0gZ2V0KCc0LjcnKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpIGFzIHZlOgorICAgICAgICAgICAgcC5nZXRfZXhwcmVzc2lvbigpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2lzIGluc2lkZSBhIGNvZGUnLCBzdHIodmUuZXhjZXB0aW9uKSkKKworICAgICAgICBwID0gZ2V0KCc1LjI1JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmdldF9leHByZXNzaW9uKCksICdyYW5nZSgxMCknKQorCisgICAgICAgIHAgPSBnZXQoJzYuNycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5nZXRfZXhwcmVzc2lvbigpLCAncHknKQorCisgICAgICAgIHAgPSBnZXQoJzYuOCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5nZXRfZXhwcmVzc2lvbigpLCAnJykKKworICAgICAgICBwID0gZ2V0KCc3LjknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuZ2V0X2V4cHJlc3Npb24oKSwgJ3B5JykKKworICAgICAgICBwID0gZ2V0KCc4LmVuZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5nZXRfZXhwcmVzc2lvbigpLCAneC5fX2xlbl9fJykKKworICAgICAgICBwID0gZ2V0KCc5LjEzJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmdldF9leHByZXNzaW9uKCksICJyJ2FzZGYnIikKKworICAgICAgICBwID0gZ2V0KCc5LjE3JykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKSBhcyB2ZToKKyAgICAgICAgICAgIHAuZ2V0X2V4cHJlc3Npb24oKQorICAgICAgICBzZWxmLmFzc2VydEluKCdpcyBpbnNpZGUgYSBjb2RlJywgc3RyKHZlLmV4Y2VwdGlvbikpCisKKyAgICAgICAgcCA9IGdldCgnMTAuMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5nZXRfZXhwcmVzc2lvbigpLCAnJykKKworICAgICAgICBwID0gZ2V0KCcxMC42JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmdldF9leHByZXNzaW9uKCksICcnKQorCisgICAgICAgIHAgPSBnZXQoJzEwLjExJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmdldF9leHByZXNzaW9uKCksICcnKQorCisgICAgICAgIHAgPSBnZXQoJzExLjMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuZ2V0X2V4cHJlc3Npb24oKSwgJycpCisKKyAgICAgICAgcCA9IGdldCgnMTEuMTEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuZ2V0X2V4cHJlc3Npb24oKSwgJ0ZhbHNlJykKKworICAgICAgICBwID0gZ2V0KCcxMi42JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmdldF9leHByZXNzaW9uKCksICdjbGljaMOpJykKKworICAgIGRlZiB0ZXN0X2VhdF9pZGVudGlmaWVyKHNlbGYpOgorICAgICAgICBkZWYgaXNfdmFsaWRfaWQoY2FuZGlkYXRlKToKKyAgICAgICAgICAgIHJlc3VsdCA9IEh5cGVyUGFyc2VyLl9lYXRfaWRlbnRpZmllcihjYW5kaWRhdGUsIDAsIGxlbihjYW5kaWRhdGUpKQorICAgICAgICAgICAgaWYgcmVzdWx0ID09IGxlbihjYW5kaWRhdGUpOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICBlbGlmIHJlc3VsdCA9PSAwOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBlcnJfbXNnID0gIlVuZXhwZWN0ZWQgcmVzdWx0OiB7fSAoZXhwZWN0ZWQgMCBvciB7fSIuZm9ybWF0KAorICAgICAgICAgICAgICAgICAgICByZXN1bHQsIGxlbihjYW5kaWRhdGUpCisgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbihlcnJfbXNnKQorCisgICAgICAgICMgaW52YWxpZCBmaXJzdCBjaGFyYWN0ZXIgd2hpY2ggaXMgdmFsaWQgZWxzZXdoZXJlIGluIGFuIGlkZW50aWZpZXIKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc192YWxpZF9pZCgnMm5vdGlkJykpCisKKyAgICAgICAgIyBBU0NJSS1vbmx5IHZhbGlkIGlkZW50aWZpZXJzCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc192YWxpZF9pZCgndmFsaWRfaWQnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzX3ZhbGlkX2lkKCdfdmFsaWRfaWQnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzX3ZhbGlkX2lkKCd2YWxpZF9pZF8nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzX3ZhbGlkX2lkKCdfMnZhbGlkX2lkJykpCisKKyAgICAgICAgIyBrZXl3b3JkcyB3aGljaCBzaG91bGQgYmUgImVhdGVuIgorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNfdmFsaWRfaWQoJ1RydWUnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzX3ZhbGlkX2lkKCdGYWxzZScpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNfdmFsaWRfaWQoJ05vbmUnKSkKKworICAgICAgICAjIGtleXdvcmRzIHdoaWNoIHNob3VsZCBub3QgYmUgImVhdGVuIgorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzX3ZhbGlkX2lkKCdmb3InKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc192YWxpZF9pZCgnaW1wb3J0JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNfdmFsaWRfaWQoJ3JldHVybicpKQorCisgICAgICAgICMgdmFsaWQgdW5pY29kZSBpZGVudGlmaWVycworICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNfdmFsaWRfaWQoJ2NsaWNoZScpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNfdmFsaWRfaWQoJ2NsaWNow6knKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzX3ZhbGlkX2lkKCdh2aInKSkKKworICAgICAgICAjIGludmFsaWQgdW5pY29kZSBpZGVudGlmaWVycworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzX3ZhbGlkX2lkKCcyYScpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzX3ZhbGlkX2lkKCfZomEnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc192YWxpZF9pZCgnYcKyJykpCisKKyAgICAgICAgIyB2YWxpZCBpZGVudGlmaWVyIGFmdGVyICJwdW5jdHVhdGlvbiIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChIeXBlclBhcnNlci5fZWF0X2lkZW50aWZpZXIoJysgdmFyJywgMCwgNSksIGxlbigndmFyJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoSHlwZXJQYXJzZXIuX2VhdF9pZGVudGlmaWVyKCcrdmFyJywgMCwgNCksIGxlbigndmFyJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoSHlwZXJQYXJzZXIuX2VhdF9pZGVudGlmaWVyKCcudmFyJywgMCwgNCksIGxlbigndmFyJykpCisKKyAgICAgICAgIyBpbnZhbGlkIGlkZW50aWZpZXJzCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNfdmFsaWRfaWQoJysnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc192YWxpZF9pZCgnICcpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzX3ZhbGlkX2lkKCc6JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNfdmFsaWRfaWQoJz8nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc192YWxpZF9pZCgnXicpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzX3ZhbGlkX2lkKCdcXCcpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzX3ZhbGlkX2lkKCciJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNfdmFsaWRfaWQoJyJhIHN0cmluZyInKSkKKworICAgIGRlZiB0ZXN0X2VhdF9pZGVudGlmaWVyX3ZhcmlvdXNfbGVuZ3RocyhzZWxmKToKKyAgICAgICAgZWF0X2lkID0gSHlwZXJQYXJzZXIuX2VhdF9pZGVudGlmaWVyCisKKyAgICAgICAgZm9yIGxlbmd0aCBpbiByYW5nZSgxLCAyMSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVhdF9pZCgnYScgKiBsZW5ndGgsIDAsIGxlbmd0aCksIGxlbmd0aCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZWF0X2lkKCfDqScgKiBsZW5ndGgsIDAsIGxlbmd0aCksIGxlbmd0aCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZWF0X2lkKCdhJyArICcyJyAqIChsZW5ndGggLSAxKSwgMCwgbGVuZ3RoKSwgbGVuZ3RoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlYXRfaWQoJ8OpJyArICcyJyAqIChsZW5ndGggLSAxKSwgMCwgbGVuZ3RoKSwgbGVuZ3RoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlYXRfaWQoJ8OpJyArICdhJyAqIChsZW5ndGggLSAxKSwgMCwgbGVuZ3RoKSwgbGVuZ3RoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlYXRfaWQoJ8OpJyAqIChsZW5ndGggLSAxKSArICdhJywgMCwgbGVuZ3RoKSwgbGVuZ3RoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlYXRfaWQoJysnICogbGVuZ3RoLCAwLCBsZW5ndGgpLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlYXRfaWQoJzInICsgJ2EnICogKGxlbmd0aCAtIDEpLCAwLCBsZW5ndGgpLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlYXRfaWQoJzInICsgJ8OpJyAqIChsZW5ndGggLSAxKSwgMCwgbGVuZ3RoKSwgMCkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKHZlcmJvc2l0eT0yKQpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvaWRsZV90ZXN0L3Rlc3RfaW8ucHkgYi9MaWIvaWRsZWxpYi9pZGxlX3Rlc3QvdGVzdF9pby5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMGUzYjk4Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL2lkbGVsaWIvaWRsZV90ZXN0L3Rlc3RfaW8ucHkKQEAgLTAsMCArMSwyMzMgQEAKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IGlvCitmcm9tIGlkbGVsaWIuUHlTaGVsbCBpbXBvcnQgUHNldWRvSW5wdXRGaWxlLCBQc2V1ZG9PdXRwdXRGaWxlCisKKworY2xhc3MgUyhzdHIpOgorICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gJyVzOnN0cicgJSB0eXBlKHNlbGYpLl9fbmFtZV9fCisgICAgZGVmIF9fdW5pY29kZV9fKHNlbGYpOgorICAgICAgICByZXR1cm4gJyVzOnVuaWNvZGUnICUgdHlwZShzZWxmKS5fX25hbWVfXworICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gMworICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGl0ZXIoJ2FiYycpCisgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsICphcmdzKToKKyAgICAgICAgcmV0dXJuICclczppdGVtJyAlIHR5cGUoc2VsZikuX19uYW1lX18KKyAgICBkZWYgX19nZXRzbGljZV9fKHNlbGYsICphcmdzKToKKyAgICAgICAgcmV0dXJuICclczpzbGljZScgJSB0eXBlKHNlbGYpLl9fbmFtZV9fCisKK2NsYXNzIE1vY2tTaGVsbDoKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYucmVzZXQoKQorCisgICAgZGVmIHdyaXRlKHNlbGYsICphcmdzKToKKyAgICAgICAgc2VsZi53cml0dGVuLmFwcGVuZChhcmdzKQorCisgICAgZGVmIHJlYWRsaW5lKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5saW5lcy5wb3AoKQorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgcmVzZXQoc2VsZik6CisgICAgICAgIHNlbGYud3JpdHRlbiA9IFtdCisKKyAgICBkZWYgcHVzaChzZWxmLCBsaW5lcyk6CisgICAgICAgIHNlbGYubGluZXMgPSBsaXN0KGxpbmVzKVs6Oi0xXQorCisKK2NsYXNzIFBzZXVkZU91dHB1dEZpbGVzVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfbWlzYyhzZWxmKToKKyAgICAgICAgc2hlbGwgPSBNb2NrU2hlbGwoKQorICAgICAgICBmID0gUHNldWRvT3V0cHV0RmlsZShzaGVsbCwgJ3N0ZG91dCcsICd1dGYtOCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmLCBpby5UZXh0SU9CYXNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZW5jb2RpbmcsICd1dGYtOCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGYuZXJyb3JzKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShmLm5ld2xpbmVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYubmFtZSwgJzxzdGRvdXQ+JykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLmNsb3NlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuaXNhdHR5KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5yZWFkYWJsZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi53cml0YWJsZSgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuc2Vla2FibGUoKSkKKworICAgIGRlZiB0ZXN0X3Vuc3VwcG9ydGVkKHNlbGYpOgorICAgICAgICBzaGVsbCA9IE1vY2tTaGVsbCgpCisgICAgICAgIGYgPSBQc2V1ZG9PdXRwdXRGaWxlKHNoZWxsLCAnc3Rkb3V0JywgJ3V0Zi04JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgZi5maWxlbm8pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIGYudGVsbCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgZi5zZWVrLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBmLnJlYWQsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIGYucmVhZGxpbmUsIDApCisKKyAgICBkZWYgdGVzdF93cml0ZShzZWxmKToKKyAgICAgICAgc2hlbGwgPSBNb2NrU2hlbGwoKQorICAgICAgICBmID0gUHNldWRvT3V0cHV0RmlsZShzaGVsbCwgJ3N0ZG91dCcsICd1dGYtOCcpCisgICAgICAgIGYud3JpdGUoJ3Rlc3QnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNoZWxsLndyaXR0ZW4sIFsoJ3Rlc3QnLCAnc3Rkb3V0JyldKQorICAgICAgICBzaGVsbC5yZXNldCgpCisgICAgICAgIGYud3JpdGUoJ3RceGU4c3QnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNoZWxsLndyaXR0ZW4sIFsoJ3RceGU4c3QnLCAnc3Rkb3V0JyldKQorICAgICAgICBzaGVsbC5yZXNldCgpCisKKyAgICAgICAgZi53cml0ZShTKCd0XHhlOHN0JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2hlbGwud3JpdHRlbiwgWygndFx4ZThzdCcsICdzdGRvdXQnKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShzaGVsbC53cml0dGVuWzBdWzBdKSwgc3RyKQorICAgICAgICBzaGVsbC5yZXNldCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmLndyaXRlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNoZWxsLndyaXR0ZW4sIFtdKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGYud3JpdGUsIGIndGVzdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZi53cml0ZSwgMTIzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNoZWxsLndyaXR0ZW4sIFtdKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGYud3JpdGUsICd0ZXN0JywgJ3NwYW0nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNoZWxsLndyaXR0ZW4sIFtdKQorCisgICAgZGVmIHRlc3Rfd3JpdGVsaW5lcyhzZWxmKToKKyAgICAgICAgc2hlbGwgPSBNb2NrU2hlbGwoKQorICAgICAgICBmID0gUHNldWRvT3V0cHV0RmlsZShzaGVsbCwgJ3N0ZG91dCcsICd1dGYtOCcpCisgICAgICAgIGYud3JpdGVsaW5lcyhbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaGVsbC53cml0dGVuLCBbXSkKKyAgICAgICAgc2hlbGwucmVzZXQoKQorICAgICAgICBmLndyaXRlbGluZXMoWydvbmVcbicsICd0d28nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaGVsbC53cml0dGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsoJ29uZVxuJywgJ3N0ZG91dCcpLCAoJ3R3bycsICdzdGRvdXQnKV0pCisgICAgICAgIHNoZWxsLnJlc2V0KCkKKyAgICAgICAgZi53cml0ZWxpbmVzKFsnb25ceGU4XG4nLCAndHdceGYyJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2hlbGwud3JpdHRlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbKCdvblx4ZThcbicsICdzdGRvdXQnKSwgKCd0d1x4ZjInLCAnc3Rkb3V0JyldKQorICAgICAgICBzaGVsbC5yZXNldCgpCisKKyAgICAgICAgZi53cml0ZWxpbmVzKFtTKCd0XHhlOHN0JyldKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNoZWxsLndyaXR0ZW4sIFsoJ3RceGU4c3QnLCAnc3Rkb3V0JyldKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoc2hlbGwud3JpdHRlblswXVswXSksIHN0cikKKyAgICAgICAgc2hlbGwucmVzZXQoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZi53cml0ZWxpbmVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNoZWxsLndyaXR0ZW4sIFtdKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGYud3JpdGVsaW5lcywgMTIzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNoZWxsLndyaXR0ZW4sIFtdKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGYud3JpdGVsaW5lcywgW2IndGVzdCddKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGYud3JpdGVsaW5lcywgWzEyM10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2hlbGwud3JpdHRlbiwgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZi53cml0ZWxpbmVzLCBbXSwgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2hlbGwud3JpdHRlbiwgW10pCisKKyAgICBkZWYgdGVzdF9jbG9zZShzZWxmKToKKyAgICAgICAgc2hlbGwgPSBNb2NrU2hlbGwoKQorICAgICAgICBmID0gUHNldWRvT3V0cHV0RmlsZShzaGVsbCwgJ3N0ZG91dCcsICd1dGYtOCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5jbG9zZWQpCisgICAgICAgIGYud3JpdGUoJ3Rlc3QnKQorICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuY2xvc2VkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmLndyaXRlLCAneCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2hlbGwud3JpdHRlbiwgWygndGVzdCcsICdzdGRvdXQnKV0pCisgICAgICAgIGYuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGYuY2xvc2UsIDEpCisKKworY2xhc3MgUHNldWRlSW5wdXRGaWxlc1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X21pc2Moc2VsZik6CisgICAgICAgIHNoZWxsID0gTW9ja1NoZWxsKCkKKyAgICAgICAgZiA9IFBzZXVkb0lucHV0RmlsZShzaGVsbCwgJ3N0ZGluJywgJ3V0Zi04JykKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGYsIGlvLlRleHRJT0Jhc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5lbmNvZGluZywgJ3V0Zi04JykKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZi5lcnJvcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGYubmV3bGluZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5uYW1lLCAnPHN0ZGluPicpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5jbG9zZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLmlzYXR0eSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5yZWFkYWJsZSgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYud3JpdGFibGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLnNlZWthYmxlKCkpCisKKyAgICBkZWYgdGVzdF91bnN1cHBvcnRlZChzZWxmKToKKyAgICAgICAgc2hlbGwgPSBNb2NrU2hlbGwoKQorICAgICAgICBmID0gUHNldWRvSW5wdXRGaWxlKHNoZWxsLCAnc3RkaW4nLCAndXRmLTgnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBmLmZpbGVubykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgZi50ZWxsKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBmLnNlZWssIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIGYud3JpdGUsICd4JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgZi53cml0ZWxpbmVzLCBbJ3gnXSkKKworICAgIGRlZiB0ZXN0X3JlYWQoc2VsZik6CisgICAgICAgIHNoZWxsID0gTW9ja1NoZWxsKCkKKyAgICAgICAgZiA9IFBzZXVkb0lucHV0RmlsZShzaGVsbCwgJ3N0ZGluJywgJ3V0Zi04JykKKyAgICAgICAgc2hlbGwucHVzaChbJ29uZVxuJywgJ3R3b1xuJywgJyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCAnb25lXG50d29cbicpCisgICAgICAgIHNoZWxsLnB1c2goWydvbmVcbicsICd0d29cbicsICcnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoLTEpLCAnb25lXG50d29cbicpCisgICAgICAgIHNoZWxsLnB1c2goWydvbmVcbicsICd0d29cbicsICcnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoTm9uZSksICdvbmVcbnR3b1xuJykKKyAgICAgICAgc2hlbGwucHVzaChbJ29uZVxuJywgJ3R3b1xuJywgJ3RocmVlXG4nLCAnJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKDIpLCAnb24nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgzKSwgJ2VcbnQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgxMCksICd3b1xudGhyZWVcbicpCisKKyAgICAgICAgc2hlbGwucHVzaChbJ29uZVxuJywgJ3R3b1xuJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKDApLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmLnJlYWQsIDEuNSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmLnJlYWQsICcxJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmLnJlYWQsIDEsIDEpCisKKyAgICBkZWYgdGVzdF9yZWFkbGluZShzZWxmKToKKyAgICAgICAgc2hlbGwgPSBNb2NrU2hlbGwoKQorICAgICAgICBmID0gUHNldWRvSW5wdXRGaWxlKHNoZWxsLCAnc3RkaW4nLCAndXRmLTgnKQorICAgICAgICBzaGVsbC5wdXNoKFsnb25lXG4nLCAndHdvXG4nLCAndGhyZWVcbicsICdmb3VyXG4nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWRsaW5lKCksICdvbmVcbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkbGluZSgtMSksICd0d29cbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkbGluZShOb25lKSwgJ3RocmVlXG4nKQorICAgICAgICBzaGVsbC5wdXNoKFsnb25lXG50d29cbiddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZGxpbmUoKSwgJ29uZVxuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWRsaW5lKCksICd0d29cbicpCisgICAgICAgIHNoZWxsLnB1c2goWydvbmUnLCAndHdvJywgJ3RocmVlJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkbGluZSgpLCAnb25lJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWRsaW5lKCksICd0d28nKQorICAgICAgICBzaGVsbC5wdXNoKFsnb25lXG4nLCAndHdvXG4nLCAndGhyZWVcbiddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZGxpbmUoMiksICdvbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkbGluZSgxKSwgJ2UnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZGxpbmUoMSksICdcbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkbGluZSgxMCksICd0d29cbicpCisKKyAgICAgICAgc2hlbGwucHVzaChbJ29uZVxuJywgJ3R3b1xuJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkbGluZSgwKSwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZi5yZWFkbGluZXMsIDEuNSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmLnJlYWRsaW5lcywgJzEnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGYucmVhZGxpbmVzLCAxLCAxKQorCisgICAgZGVmIHRlc3RfcmVhZGxpbmVzKHNlbGYpOgorICAgICAgICBzaGVsbCA9IE1vY2tTaGVsbCgpCisgICAgICAgIGYgPSBQc2V1ZG9JbnB1dEZpbGUoc2hlbGwsICdzdGRpbicsICd1dGYtOCcpCisgICAgICAgIHNoZWxsLnB1c2goWydvbmVcbicsICd0d29cbicsICcnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWRsaW5lcygpLCBbJ29uZVxuJywgJ3R3b1xuJ10pCisgICAgICAgIHNoZWxsLnB1c2goWydvbmVcbicsICd0d29cbicsICcnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWRsaW5lcygtMSksIFsnb25lXG4nLCAndHdvXG4nXSkKKyAgICAgICAgc2hlbGwucHVzaChbJ29uZVxuJywgJ3R3b1xuJywgJyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZGxpbmVzKE5vbmUpLCBbJ29uZVxuJywgJ3R3b1xuJ10pCisgICAgICAgIHNoZWxsLnB1c2goWydvbmVcbicsICd0d29cbicsICcnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWRsaW5lcygwKSwgWydvbmVcbicsICd0d29cbiddKQorICAgICAgICBzaGVsbC5wdXNoKFsnb25lXG4nLCAndHdvXG4nLCAnJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkbGluZXMoMyksIFsnb25lXG4nXSkKKyAgICAgICAgc2hlbGwucHVzaChbJ29uZVxuJywgJ3R3b1xuJywgJyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZGxpbmVzKDQpLCBbJ29uZVxuJywgJ3R3b1xuJ10pCisKKyAgICAgICAgc2hlbGwucHVzaChbJ29uZVxuJywgJ3R3b1xuJywgJyddKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGYucmVhZGxpbmVzLCAxLjUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZi5yZWFkbGluZXMsICcxJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmLnJlYWRsaW5lcywgMSwgMSkKKworICAgIGRlZiB0ZXN0X2Nsb3NlKHNlbGYpOgorICAgICAgICBzaGVsbCA9IE1vY2tTaGVsbCgpCisgICAgICAgIGYgPSBQc2V1ZG9JbnB1dEZpbGUoc2hlbGwsICdzdGRpbicsICd1dGYtOCcpCisgICAgICAgIHNoZWxsLnB1c2goWydvbmVcbicsICd0d29cbicsICcnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLmNsb3NlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWRsaW5lKCksICdvbmVcbicpCisgICAgICAgIGYuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuY2xvc2VkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZGxpbmUoKSwgJ3R3b1xuJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmLmNsb3NlLCAxKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9pZGxlX3Rlc3QvdGVzdF9wYXJlbm1hdGNoLnB5IGIvTGliL2lkbGVsaWIvaWRsZV90ZXN0L3Rlc3RfcGFyZW5tYXRjaC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YWJhNGJlCi0tLSAvZGV2L251bGwKKysrIGIvTGliL2lkbGVsaWIvaWRsZV90ZXN0L3Rlc3RfcGFyZW5tYXRjaC5weQpAQCAtMCwwICsxLDEwOSBAQAorIiIiVGVzdCBpZGxlbGliLlBhcmVuTWF0Y2guIiIiCisjIFRoaXMgbXVzdCBjdXJyZW50bHkgYmUgYSBndWkgdGVzdCBiZWNhdXNlIFBhcmVuTWF0Y2ggbWV0aG9kcyB1c2UKKyMgc2V2ZXJhbCB0ZXh0IG1ldGhvZHMgbm90IGRlZmluZWQgb24gaWRsZWxpYi5pZGxlX3Rlc3QubW9ja190ay5UZXh0LgorCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdW5pdHRlc3QubW9jayBpbXBvcnQgTW9jaworZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJlcXVpcmVzCitmcm9tIHRraW50ZXIgaW1wb3J0IFRrLCBUZXh0Citmcm9tIGlkbGVsaWIuUGFyZW5NYXRjaCBpbXBvcnQgUGFyZW5NYXRjaAorCitjbGFzcyBEdW1teUVkaXR3aW46CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRleHQpOgorICAgICAgICBzZWxmLnRleHQgPSB0ZXh0CisgICAgICAgIHNlbGYuaW5kZW50d2lkdGggPSA4CisgICAgICAgIHNlbGYudGFid2lkdGggPSA4CisgICAgICAgIHNlbGYuY29udGV4dF91c2VfcHMxID0gVHJ1ZQorCisKK2NsYXNzIFBhcmVuTWF0Y2hUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBzZXRVcENsYXNzKGNscyk6CisgICAgICAgIHJlcXVpcmVzKCdndWknKQorICAgICAgICBjbHMucm9vdCA9IFRrKCkKKyAgICAgICAgY2xzLnRleHQgPSBUZXh0KGNscy5yb290KQorICAgICAgICBjbHMuZWRpdHdpbiA9IER1bW15RWRpdHdpbihjbHMudGV4dCkKKyAgICAgICAgY2xzLmVkaXR3aW4udGV4dF9mcmFtZSA9IE1vY2soKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHRlYXJEb3duQ2xhc3MoY2xzKToKKyAgICAgICAgZGVsIGNscy50ZXh0LCBjbHMuZWRpdHdpbgorICAgICAgICBjbHMucm9vdC5kZXN0cm95KCkKKyAgICAgICAgZGVsIGNscy5yb290CisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYudGV4dC5kZWxldGUoJzEuMCcsICdlbmQnKQorCisgICAgZGVmIHRlc3RfcGFyZW5fZXhwcmVzc2lvbihzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFRlc3QgUGFyZW5NYXRjaCB3aXRoICdleHByZXNzaW9uJyBzdHlsZS4KKyAgICAgICAgIiIiCisgICAgICAgIHRleHQgPSBzZWxmLnRleHQKKyAgICAgICAgcG0gPSBQYXJlbk1hdGNoKHNlbGYuZWRpdHdpbikKKyAgICAgICAgcG0uc2V0X3N0eWxlKCdleHByZXNzaW9uJykKKworICAgICAgICB0ZXh0Lmluc2VydCgnaW5zZXJ0JywgJ2RlZiBmb29iYXIoYSwgYicpCisgICAgICAgIHBtLmZsYXNoX3BhcmVuX2V2ZW50KCdldmVudCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJzw8cGFyZW5tYXRjaC1jaGVjay1yZXN0b3JlPj4nLCB0ZXh0LmV2ZW50X2luZm8oKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUdXBsZUVxdWFsKHRleHQudGFnX3ByZXZyYW5nZSgncGFyZW4nLCAnZW5kJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnMS4xMCcsICcxLjE1JykpCisgICAgICAgIHRleHQuaW5zZXJ0KCdpbnNlcnQnLCAnKScpCisgICAgICAgIHBtLnJlc3RvcmVfZXZlbnQoKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCc8PHBhcmVubWF0Y2gtY2hlY2stcmVzdG9yZT4+JywgdGV4dC5ldmVudF9pbmZvKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGV4dC50YWdfcHJldnJhbmdlKCdwYXJlbicsICdlbmQnKSwgKCkpCisKKyAgICAgICAgIyBwYXJlbl9jbG9zZWRfZXZlbnQgY2FuIG9ubHkgYmUgdGVzdGVkIGFzIGJlbG93CisgICAgICAgIHBtLnBhcmVuX2Nsb3NlZF9ldmVudCgnZXZlbnQnKQorICAgICAgICBzZWxmLmFzc2VydFR1cGxlRXF1YWwodGV4dC50YWdfcHJldnJhbmdlKCdwYXJlbicsICdlbmQnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnMS4xMCcsICcxLjE2JykpCisKKyAgICBkZWYgdGVzdF9wYXJlbl9kZWZhdWx0KHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgVGVzdCBQYXJlbk1hdGNoIHdpdGggJ2RlZmF1bHQnIHN0eWxlLgorICAgICAgICAiIiIKKyAgICAgICAgdGV4dCA9IHNlbGYudGV4dAorICAgICAgICBwbSA9IFBhcmVuTWF0Y2goc2VsZi5lZGl0d2luKQorICAgICAgICBwbS5zZXRfc3R5bGUoJ2RlZmF1bHQnKQorCisgICAgICAgIHRleHQuaW5zZXJ0KCdpbnNlcnQnLCAnZGVmIGZvb2JhcihhLCBiJykKKyAgICAgICAgcG0uZmxhc2hfcGFyZW5fZXZlbnQoJ2V2ZW50JykKKyAgICAgICAgc2VsZi5hc3NlcnRJbignPDxwYXJlbm1hdGNoLWNoZWNrLXJlc3RvcmU+PicsIHRleHQuZXZlbnRfaW5mbygpKQorICAgICAgICBzZWxmLmFzc2VydFR1cGxlRXF1YWwodGV4dC50YWdfcHJldnJhbmdlKCdwYXJlbicsICdlbmQnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCcxLjEwJywgJzEuMTEnKSkKKyAgICAgICAgdGV4dC5pbnNlcnQoJ2luc2VydCcsICcpJykKKyAgICAgICAgcG0ucmVzdG9yZV9ldmVudCgpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJzw8cGFyZW5tYXRjaC1jaGVjay1yZXN0b3JlPj4nLCB0ZXh0LmV2ZW50X2luZm8oKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXh0LnRhZ19wcmV2cmFuZ2UoJ3BhcmVuJywgJ2VuZCcpLCAoKSkKKworICAgIGRlZiB0ZXN0X3BhcmVuX2Nvcm5lcihzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFRlc3QgY29ybmVyIGNhc2VzIGluIGZsYXNoX3BhcmVuX2V2ZW50IGFuZCBwYXJlbl9jbG9zZWRfZXZlbnQuCisKKyAgICAgICAgVGhlc2UgY2FzZXMgZm9yY2UgY29uZGl0aW9uYWwgZXhwcmVzc2lvbiBhbmQgYWx0ZXJuYXRlIHBhdGhzLgorICAgICAgICAiIiIKKyAgICAgICAgdGV4dCA9IHNlbGYudGV4dAorICAgICAgICBwbSA9IFBhcmVuTWF0Y2goc2VsZi5lZGl0d2luKQorCisgICAgICAgIHRleHQuaW5zZXJ0KCdpbnNlcnQnLCAnIyB0aGlzIGlzIGEgY29tbWVuKScpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHBtLnBhcmVuX2Nsb3NlZF9ldmVudCgnZXZlbnQnKSkKKworICAgICAgICB0ZXh0Lmluc2VydCgnaW5zZXJ0JywgJ1xuZGVmJykKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocG0uZmxhc2hfcGFyZW5fZXZlbnQoJ2V2ZW50JykpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHBtLnBhcmVuX2Nsb3NlZF9ldmVudCgnZXZlbnQnKSkKKworICAgICAgICB0ZXh0Lmluc2VydCgnaW5zZXJ0JywgJyBhLCAqYXJnKScpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHBtLnBhcmVuX2Nsb3NlZF9ldmVudCgnZXZlbnQnKSkKKworICAgIGRlZiB0ZXN0X2hhbmRsZV9yZXN0b3JlX3RpbWVyKHNlbGYpOgorICAgICAgICBwbSA9IFBhcmVuTWF0Y2goc2VsZi5lZGl0d2luKQorICAgICAgICBwbS5yZXN0b3JlX2V2ZW50ID0gTW9jaygpCisgICAgICAgIHBtLmhhbmRsZV9yZXN0b3JlX3RpbWVyKDApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwbS5yZXN0b3JlX2V2ZW50LmNhbGxlZCkKKyAgICAgICAgcG0ucmVzdG9yZV9ldmVudC5yZXNldF9tb2NrKCkKKyAgICAgICAgcG0uaGFuZGxlX3Jlc3RvcmVfdGltZXIoMSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShwbS5yZXN0b3JlX2V2ZW50LmNhbGxlZCkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4odmVyYm9zaXR5PTIpCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9pZGxlX3Rlc3QvdGVzdF9wYXRoYnJvd3Nlci5weSBiL0xpYi9pZGxlbGliL2lkbGVfdGVzdC90ZXN0X3BhdGhicm93c2VyLnB5CmluZGV4IDdhZDdjOTcuLmFmYjg4NmYgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL2lkbGVfdGVzdC90ZXN0X3BhdGhicm93c2VyLnB5CisrKyBiL0xpYi9pZGxlbGliL2lkbGVfdGVzdC90ZXN0X3BhdGhicm93c2VyLnB5CkBAIC0xLDUgKzEsOCBAQAogaW1wb3J0IHVuaXR0ZXN0Ci1pbXBvcnQgaWRsZWxpYi5QYXRoQnJvd3NlciBhcyBQYXRoQnJvd3NlcgoraW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgaWRsZWxpYgorZnJvbSBpZGxlbGliIGltcG9ydCBQYXRoQnJvd3NlcgogCiBjbGFzcyBQYXRoQnJvd3NlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogCkBAIC03LDYgKzEwLDE4IEBACiAgICAgICAgICMgSXNzdWUxNjIyNiAtIG1ha2Ugc3VyZSB0aGF0IGdldHRpbmcgYSBzdWJsaXN0IHdvcmtzCiAgICAgICAgIGQgPSBQYXRoQnJvd3Nlci5EaXJCcm93c2VyVHJlZUl0ZW0oJycpCiAgICAgICAgIGQuR2V0U3ViTGlzdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJycsIGQuR2V0VGV4dCgpKQorCisgICAgICAgIGRpciA9IG9zLnBhdGguc3BsaXQob3MucGF0aC5hYnNwYXRoKGlkbGVsaWIuX19maWxlX18pKVswXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuaXNwYWNrYWdlZGlyKGRpciksIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5pc3BhY2thZ2VkaXIoZGlyICsgJy9JY29ucycpLCBGYWxzZSkKKworICAgIGRlZiB0ZXN0X1BhdGhCcm93c2VyVHJlZUl0ZW0oc2VsZik6CisgICAgICAgIHAgPSBQYXRoQnJvd3Nlci5QYXRoQnJvd3NlclRyZWVJdGVtKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLkdldFRleHQoKSwgJ3N5cy5wYXRoJykKKyAgICAgICAgc3ViID0gcC5HZXRTdWJMaXN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc3ViKSwgbGVuKHN5cy5wYXRoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHN1YlswXSksIFBhdGhCcm93c2VyLkRpckJyb3dzZXJUcmVlSXRlbSkKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICB1bml0dGVzdC5tYWluKHZlcmJvc2l0eT0yLCBleGl0PUZhbHNlKQpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvaWRsZV90ZXN0L3Rlc3Rfc2VhcmNoZGlhbG9nYmFzZS5weSBiL0xpYi9pZGxlbGliL2lkbGVfdGVzdC90ZXN0X3NlYXJjaGRpYWxvZ2Jhc2UucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODAzNmI5MQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9pZGxlbGliL2lkbGVfdGVzdC90ZXN0X3NlYXJjaGRpYWxvZ2Jhc2UucHkKQEAgLTAsMCArMSwxNjUgQEAKKycnJ1VuaXR0ZXN0cyBmb3IgaWRsZWxpYi9TZWFyY2hEaWFsb2dCYXNlLnB5CisKK0NvdmVyYWdlOiA5OSUuIFRoZSBvbmx5IHRoaW5nIG5vdCBjb3ZlcmVkIGlzIGluY29uc2VxdWVudGlhbCAtLQordGVzdGluZyBza2lwcGluZyBvZiBzdWl0ZSB3aGVuIHNlbGYubmVlZHdyYXBidXR0b24gaXMgZmFsc2UuCisKKycnJworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcmVxdWlyZXMKK2Zyb20gdGtpbnRlciBpbXBvcnQgVGssIFRvcGxldmVsLCBGcmFtZSAjIywgQm9vbGVhblZhciwgU3RyaW5nVmFyCitmcm9tIGlkbGVsaWIgaW1wb3J0IFNlYXJjaEVuZ2luZSBhcyBzZQorZnJvbSBpZGxlbGliIGltcG9ydCBTZWFyY2hEaWFsb2dCYXNlIGFzIHNkYgorZnJvbSBpZGxlbGliLmlkbGVfdGVzdC5tb2NrX2lkbGUgaW1wb3J0IEZ1bmMKKyMjIGZyb20gaWRsZWxpYi5pZGxlX3Rlc3QubW9ja190ayBpbXBvcnQgVmFyCisKKyMgVGhlICMjIGltcG9ydHMgYWJvdmUgJiBmb2xsb3dpbmcgY291bGQgaGVscCBtYWtlIHNvbWUgdGVzdHMgZ3VpLWZyZWUuCisjIEhvd2V2ZXIsIHRoZXkgY3VycmVudGx5IG1ha2UgcmFkaW9idXR0b24gdGVzdHMgZmFpbC4KKyMjZGVmIHNldFVwTW9kdWxlKCk6CisjIyAgICAjIFJlcGxhY2UgdGsgb2JqZWN0cyB1c2VkIHRvIGluaXRpYWxpemUgc2UuU2VhcmNoRW5naW5lLgorIyMgICAgc2UuQm9vbGVhblZhciA9IFZhcgorIyMgICAgc2UuU3RyaW5nVmFyID0gVmFyCisjIworIyNkZWYgdGVhckRvd25Nb2R1bGUoKToKKyMjICAgIHNlLkJvb2xlYW5WYXIgPSBCb29sZWFuVmFyCisjIyAgICBzZS5TdHJpbmdWYXIgPSBTdHJpbmdWYXIKKworY2xhc3MgU2VhcmNoRGlhbG9nQmFzZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3MoY2xzKToKKyAgICAgICAgcmVxdWlyZXMoJ2d1aScpCisgICAgICAgIGNscy5yb290ID0gVGsoKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHRlYXJEb3duQ2xhc3MoY2xzKToKKyAgICAgICAgY2xzLnJvb3QuZGVzdHJveSgpCisgICAgICAgIGRlbCBjbHMucm9vdAorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmVuZ2luZSA9IHNlLlNlYXJjaEVuZ2luZShzZWxmLnJvb3QpICAjIE5vbmUgYWxzbyBzZWVtcyB0byB3b3JrCisgICAgICAgIHNlbGYuZGlhbG9nID0gc2RiLlNlYXJjaERpYWxvZ0Jhc2Uocm9vdD1zZWxmLnJvb3QsIGVuZ2luZT1zZWxmLmVuZ2luZSkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi5kaWFsb2cuY2xvc2UoKQorCisgICAgZGVmIHRlc3Rfb3Blbl9hbmRfY2xvc2Uoc2VsZik6CisgICAgICAgICMgb3BlbiBjYWxscyBjcmVhdGVfd2lkZ2V0cywgd2hpY2ggbmVlZHMgZGVmYXVsdF9jb21tYW5kCisgICAgICAgIHNlbGYuZGlhbG9nLmRlZmF1bHRfY29tbWFuZCA9IE5vbmUKKworICAgICAgICAjIFNpbmNlIHRleHQgcGFyYW1ldGVyIG9mIC5vcGVuIGlzIG5vdCB1c2VkIGluIGJhc2UgY2xhc3MsCisgICAgICAgICMgcGFzcyBkdW1teSAndGV4dCcgaW5zdGVhZCBvZiB0ay5UZXh0KCkuCisgICAgICAgIHNlbGYuZGlhbG9nLm9wZW4oJ3RleHQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZGlhbG9nLnRvcC5zdGF0ZSgpLCAnbm9ybWFsJykKKyAgICAgICAgc2VsZi5kaWFsb2cuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZGlhbG9nLnRvcC5zdGF0ZSgpLCAnd2l0aGRyYXduJykKKworICAgICAgICBzZWxmLmRpYWxvZy5vcGVuKCd0ZXh0Jywgc2VhcmNocGhyYXNlPSJoZWxsbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kaWFsb2cuZW50LmdldCgpLCAnaGVsbG8nKQorICAgICAgICBzZWxmLmRpYWxvZy5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfd2lkZ2V0cyhzZWxmKToKKyAgICAgICAgc2VsZi5kaWFsb2cuY3JlYXRlX2VudHJpZXMgPSBGdW5jKCkKKyAgICAgICAgc2VsZi5kaWFsb2cuY3JlYXRlX29wdGlvbl9idXR0b25zID0gRnVuYygpCisgICAgICAgIHNlbGYuZGlhbG9nLmNyZWF0ZV9vdGhlcl9idXR0b25zID0gRnVuYygpCisgICAgICAgIHNlbGYuZGlhbG9nLmNyZWF0ZV9jb21tYW5kX2J1dHRvbnMgPSBGdW5jKCkKKworICAgICAgICBzZWxmLmRpYWxvZy5kZWZhdWx0X2NvbW1hbmQgPSBOb25lCisgICAgICAgIHNlbGYuZGlhbG9nLmNyZWF0ZV93aWRnZXRzKCkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5kaWFsb2cuY3JlYXRlX2VudHJpZXMuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5kaWFsb2cuY3JlYXRlX29wdGlvbl9idXR0b25zLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuZGlhbG9nLmNyZWF0ZV9vdGhlcl9idXR0b25zLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuZGlhbG9nLmNyZWF0ZV9jb21tYW5kX2J1dHRvbnMuY2FsbGVkKQorCisgICAgZGVmIHRlc3RfbWFrZV9lbnRyeShzZWxmKToKKyAgICAgICAgZXF1YWwgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIHNlbGYuZGlhbG9nLnJvdyA9IDAKKyAgICAgICAgc2VsZi5kaWFsb2cudG9wID0gVG9wbGV2ZWwoc2VsZi5yb290KQorICAgICAgICBlbnRyeSwgbGFiZWwgPSBzZWxmLmRpYWxvZy5tYWtlX2VudHJ5KCJUZXN0OiIsICdoZWxsbycpCisgICAgICAgIGVxdWFsKGxhYmVsWyd0ZXh0J10sICdUZXN0OicpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJbihlbnRyeS5nZXQoKSwgJ2hlbGxvJykKKyAgICAgICAgZWdpID0gZW50cnkuZ3JpZF9pbmZvKCkKKyAgICAgICAgZXF1YWwoaW50KGVnaVsncm93J10pLCAwKQorICAgICAgICBlcXVhbChpbnQoZWdpWydjb2x1bW4nXSksIDEpCisgICAgICAgIGVxdWFsKGludChlZ2lbJ3Jvd3NwYW4nXSksIDEpCisgICAgICAgIGVxdWFsKGludChlZ2lbJ2NvbHVtbnNwYW4nXSksIDEpCisgICAgICAgIGVxdWFsKHNlbGYuZGlhbG9nLnJvdywgMSkKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9lbnRyaWVzKHNlbGYpOgorICAgICAgICBzZWxmLmRpYWxvZy5yb3cgPSAwCisgICAgICAgIHNlbGYuZW5naW5lLnNldHBhdCgnaGVsbG8nKQorICAgICAgICBzZWxmLmRpYWxvZy5jcmVhdGVfZW50cmllcygpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oc2VsZi5kaWFsb2cuZW50LmdldCgpLCAnaGVsbG8nKQorCisgICAgZGVmIHRlc3RfbWFrZV9mcmFtZShzZWxmKToKKyAgICAgICAgc2VsZi5kaWFsb2cucm93ID0gMAorICAgICAgICBzZWxmLmRpYWxvZy50b3AgPSBUb3BsZXZlbChzZWxmLnJvb3QpCisgICAgICAgIGZyYW1lLCBsYWJlbCA9IHNlbGYuZGlhbG9nLm1ha2VfZnJhbWUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxhYmVsLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGZyYW1lLCBGcmFtZSkKKworICAgICAgICBmcmFtZSwgbGFiZWwgPSBzZWxmLmRpYWxvZy5tYWtlX2ZyYW1lKCd0ZXN0bGFiZWwnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxhYmVsWyd0ZXh0J10sICd0ZXN0bGFiZWwnKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZnJhbWUsIEZyYW1lKQorCisgICAgZGVmIGJ0bl90ZXN0X3NldHVwKHNlbGYsIG1ldGgpOgorICAgICAgICBzZWxmLmRpYWxvZy50b3AgPSBUb3BsZXZlbChzZWxmLnJvb3QpCisgICAgICAgIHNlbGYuZGlhbG9nLnJvdyA9IDAKKyAgICAgICAgcmV0dXJuIG1ldGgoKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX29wdGlvbl9idXR0b25zKHNlbGYpOgorICAgICAgICBlID0gc2VsZi5lbmdpbmUKKyAgICAgICAgZm9yIHN0YXRlIGluICgwLCAxKToKKyAgICAgICAgICAgIGZvciB2YXIgaW4gKGUucmV2YXIsIGUuY2FzZXZhciwgZS53b3JkdmFyLCBlLndyYXB2YXIpOgorICAgICAgICAgICAgICAgIHZhci5zZXQoc3RhdGUpCisgICAgICAgICAgICBmcmFtZSwgb3B0aW9ucyA9IHNlbGYuYnRuX3Rlc3Rfc2V0dXAoCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZGlhbG9nLmNyZWF0ZV9vcHRpb25fYnV0dG9ucykKKyAgICAgICAgICAgIGZvciBzcGVjLCBidXR0b24gaW4gemlwIChvcHRpb25zLCBmcmFtZS5wYWNrX3NsYXZlcygpKToKKyAgICAgICAgICAgICAgICB2YXIsIGxhYmVsID0gc3BlYworICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnV0dG9uWyd0ZXh0J10sIGxhYmVsKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFyLmdldCgpLCBzdGF0ZSkKKyAgICAgICAgICAgICAgICBpZiBzdGF0ZSA9PSAxOgorICAgICAgICAgICAgICAgICAgICBidXR0b24uZGVzZWxlY3QoKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGJ1dHRvbi5zZWxlY3QoKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFyLmdldCgpLCAxIC0gc3RhdGUpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfb3RoZXJfYnV0dG9ucyhzZWxmKToKKyAgICAgICAgZm9yIHN0YXRlIGluIChGYWxzZSwgVHJ1ZSk6CisgICAgICAgICAgICB2YXIgPSBzZWxmLmVuZ2luZS5iYWNrdmFyCisgICAgICAgICAgICB2YXIuc2V0KHN0YXRlKQorICAgICAgICAgICAgZnJhbWUsIG90aGVycyA9IHNlbGYuYnRuX3Rlc3Rfc2V0dXAoCisgICAgICAgICAgICAgICAgc2VsZi5kaWFsb2cuY3JlYXRlX290aGVyX2J1dHRvbnMpCisgICAgICAgICAgICBidXR0b25zID0gZnJhbWUucGFja19zbGF2ZXMoKQorICAgICAgICAgICAgZm9yIHNwZWMsIGJ1dHRvbiBpbiB6aXAob3RoZXJzLCBidXR0b25zKToKKyAgICAgICAgICAgICAgICB2YWwsIGxhYmVsID0gc3BlYworICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnV0dG9uWyd0ZXh0J10sIGxhYmVsKQorICAgICAgICAgICAgICAgIGlmIHZhbCA9PSBzdGF0ZToKKyAgICAgICAgICAgICAgICAgICAgIyBoaXQgb3RoZXIgYnV0dG9uLCB0aGVuIHRoaXMgb25lCisgICAgICAgICAgICAgICAgICAgICMgaW5kZXhlcyBkZXBlbmQgb24gYnV0dG9uIG9yZGVyCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFyLmdldCgpLCBzdGF0ZSkKKyAgICAgICAgICAgICAgICAgICAgYnV0dG9uc1t2YWxdLnNlbGVjdCgpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFyLmdldCgpLCAxIC0gc3RhdGUpCisgICAgICAgICAgICAgICAgICAgIGJ1dHRvbnNbMS12YWxdLnNlbGVjdCgpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFyLmdldCgpLCBzdGF0ZSkKKworICAgIGRlZiB0ZXN0X21ha2VfYnV0dG9uKHNlbGYpOgorICAgICAgICBzZWxmLmRpYWxvZy50b3AgPSBUb3BsZXZlbChzZWxmLnJvb3QpCisgICAgICAgIHNlbGYuZGlhbG9nLmJ1dHRvbmZyYW1lID0gRnJhbWUoc2VsZi5kaWFsb2cudG9wKQorICAgICAgICBidG4gPSBzZWxmLmRpYWxvZy5tYWtlX2J1dHRvbignVGVzdCcsIHNlbGYuZGlhbG9nLmNsb3NlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ0blsndGV4dCddLCAnVGVzdCcpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfY29tbWFuZF9idXR0b25zKHNlbGYpOgorICAgICAgICBzZWxmLmRpYWxvZy5jcmVhdGVfY29tbWFuZF9idXR0b25zKCkKKyAgICAgICAgIyBMb29rIGZvciBjbG9zZSBidXR0b24gY29tbWFuZCBpbiBidXR0b25mcmFtZQorICAgICAgICBjbG9zZWJ1dHRvbmNvbW1hbmQgPSAnJworICAgICAgICBmb3IgY2hpbGQgaW4gc2VsZi5kaWFsb2cuYnV0dG9uZnJhbWUud2luZm9fY2hpbGRyZW4oKToKKyAgICAgICAgICAgIGlmIGNoaWxkWyd0ZXh0J10gPT0gJ2Nsb3NlJzoKKyAgICAgICAgICAgICAgICBjbG9zZWJ1dHRvbmNvbW1hbmQgPSBjaGlsZFsnY29tbWFuZCddCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2Nsb3NlJywgY2xvc2VidXR0b25jb21tYW5kKQorCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKHZlcmJvc2l0eT0yLCBleGl0PTIpCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9pZGxlX3Rlc3QvdGVzdF9zZWFyY2hlbmdpbmUucHkgYi9MaWIvaWRsZWxpYi9pZGxlX3Rlc3QvdGVzdF9zZWFyY2hlbmdpbmUucHkKaW5kZXggMTI5YTVhMy4uYzc3OTJmYiAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvaWRsZV90ZXN0L3Rlc3Rfc2VhcmNoZW5naW5lLnB5CisrKyBiL0xpYi9pZGxlbGliL2lkbGVfdGVzdC90ZXN0X3NlYXJjaGVuZ2luZS5weQpAQCAtNyw3ICs3LDcgQEAKIAogaW1wb3J0IHJlCiBpbXBvcnQgdW5pdHRlc3QKLWZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCByZXF1aXJlcworIyBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcmVxdWlyZXMKIGZyb20gdGtpbnRlciBpbXBvcnQgIEJvb2xlYW5WYXIsIFN0cmluZ1ZhciwgVGNsRXJyb3IgICMgLFRrLCBUZXh0CiBpbXBvcnQgdGtpbnRlci5tZXNzYWdlYm94IGFzIHRrTWVzc2FnZUJveAogZnJvbSBpZGxlbGliIGltcG9ydCBTZWFyY2hFbmdpbmUgYXMgc2UKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL2lkbGVfdGVzdC90ZXN0X3RleHQucHkgYi9MaWIvaWRsZWxpYi9pZGxlX3Rlc3QvdGVzdF90ZXh0LnB5CmluZGV4IDVhYzJmZDcuLjdlODIzZGYgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL2lkbGVfdGVzdC90ZXN0X3RleHQucHkKKysrIGIvTGliL2lkbGVsaWIvaWRsZV90ZXN0L3Rlc3RfdGV4dC5weQpAQCAtMyw3ICszLDYgQEAKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCByZXF1aXJlcwogCiBmcm9tIF90a2ludGVyIGltcG9ydCBUY2xFcnJvcgotaW1wb3J0IHRraW50ZXIgYXMgdGsKIAogY2xhc3MgVGV4dFRlc3Qob2JqZWN0KToKIApkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvaWRsZV90ZXN0L3Rlc3RfdGV4dHZpZXcucHkgYi9MaWIvaWRsZWxpYi9pZGxlX3Rlc3QvdGVzdF90ZXh0dmlldy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGU1YjgyCi0tLSAvZGV2L251bGwKKysrIGIvTGliL2lkbGVsaWIvaWRsZV90ZXN0L3Rlc3RfdGV4dHZpZXcucHkKQEAgLTAsMCArMSw5NyBAQAorJycnVGVzdCB0aGUgZnVuY3Rpb25zIGFuZCBtYWluIGNsYXNzIG1ldGhvZCBvZiB0ZXh0Vmlldy5weS4KKworU2luY2UgYWxsIG1ldGhvZHMgYW5kIGZ1bmN0aW9ucyBjcmVhdGUgKG9yIGRlc3Ryb3kpIGEgVGV4dFZpZXdlciwgd2hpY2gKK2lzIGEgd2lkZ2V0IGNvbnRhaW5pbmcgbXVsdGlwbGUgd2lkZ2V0cywgYWxsIHRlc3RzIG11c3QgYmUgZ3VpIHRlc3RzLgorVXNpbmcgbW9jayBUZXh0IHdvdWxkIG5vdCBjaGFuZ2UgdGhpcy4gIE90aGVyIG1vY2tzIGFyZSB1c2VkIHRvIHJldHJpZXZlCitpbmZvcm1hdGlvbiBhYm91dCBjYWxscy4KKworVGhlIGNvdmVyYWdlIGlzIGVzc2VudGlhbGx5IDEwMCUuCisnJycKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCByZXF1aXJlcworcmVxdWlyZXMoJ2d1aScpCisKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IG9zCitmcm9tIHRraW50ZXIgaW1wb3J0IFRrCitmcm9tIGlkbGVsaWIgaW1wb3J0IHRleHRWaWV3IGFzIHR2Citmcm9tIGlkbGVsaWIuaWRsZV90ZXN0Lm1vY2tfaWRsZSBpbXBvcnQgRnVuYworZnJvbSBpZGxlbGliLmlkbGVfdGVzdC5tb2NrX3RrIGltcG9ydCBNYm94CisKK2RlZiBzZXRVcE1vZHVsZSgpOgorICAgIGdsb2JhbCByb290CisgICAgcm9vdCA9IFRrKCkKKworZGVmIHRlYXJEb3duTW9kdWxlKCk6CisgICAgZ2xvYmFsIHJvb3QKKyAgICByb290LmRlc3Ryb3koKSAgIyBweWZsYWtlcyBmYWxzZWx5IHNlZXMgcm9vdCBhcyB1bmRlZmluZWQKKyAgICBkZWwgcm9vdAorCisKK2NsYXNzIFRWKHR2LlRleHRWaWV3ZXIpOiAgIyB1c2VkIGJ5IFRleHRWaWV3VGVzdAorICAgIHRyYW5zaWVudCA9IEZ1bmMoKQorICAgIGdyYWJfc2V0ID0gRnVuYygpCisgICAgd2FpdF93aW5kb3cgPSBGdW5jKCkKKworY2xhc3MgVGV4dFZpZXdUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgVFYudHJhbnNpZW50Ll9faW5pdF9fKCkKKyAgICAgICAgVFYuZ3JhYl9zZXQuX19pbml0X18oKQorICAgICAgICBUVi53YWl0X3dpbmRvdy5fX2luaXRfXygpCisKKyAgICBkZWYgdGVzdF9pbml0X21vZGFsKHNlbGYpOgorICAgICAgICB2aWV3ID0gVFYocm9vdCwgJ1RpdGxlJywgJ3Rlc3QgdGV4dCcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShUVi50cmFuc2llbnQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoVFYuZ3JhYl9zZXQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoVFYud2FpdF93aW5kb3cuY2FsbGVkKQorICAgICAgICB2aWV3Lk9rKCkKKworICAgIGRlZiB0ZXN0X2luaXRfbm9ubW9kYWwoc2VsZik6CisgICAgICAgIHZpZXcgPSBUVihyb290LCAnVGl0bGUnLCAndGVzdCB0ZXh0JywgbW9kYWw9RmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoVFYudHJhbnNpZW50LmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShUVi5ncmFiX3NldC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoVFYud2FpdF93aW5kb3cuY2FsbGVkKQorICAgICAgICB2aWV3Lk9rKCkKKworICAgIGRlZiB0ZXN0X29rKHNlbGYpOgorICAgICAgICB2aWV3ID0gVFYocm9vdCwgJ1RpdGxlJywgJ3Rlc3QgdGV4dCcsIG1vZGFsPUZhbHNlKQorICAgICAgICB2aWV3LmRlc3Ryb3kgPSBGdW5jKCkKKyAgICAgICAgdmlldy5PaygpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh2aWV3LmRlc3Ryb3kuY2FsbGVkKQorICAgICAgICBkZWwgdmlldy5kZXN0cm95ICAjIHVubWFzayByZWFsIGZ1bmN0aW9uCisgICAgICAgIHZpZXcuZGVzdHJveQorCisKK2NsYXNzIHRleHR2aWV3VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc2V0VXBDbGFzcyhjbHMpOgorICAgICAgICBjbHMub3JpZ19tYm94ID0gdHYudGtNZXNzYWdlQm94CisgICAgICAgIHR2LnRrTWVzc2FnZUJveCA9IE1ib3gKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiB0ZWFyRG93bkNsYXNzKGNscyk6CisgICAgICAgIHR2LnRrTWVzc2FnZUJveCA9IGNscy5vcmlnX21ib3gKKyAgICAgICAgZGVsIGNscy5vcmlnX21ib3gKKworICAgIGRlZiB0ZXN0X3ZpZXdfdGV4dChzZWxmKToKKyAgICAgICAgIyBJZiBtb2RhbCBUcnVlLCB0a2ludGVyIHdpbGwgZXJyb3Igd2l0aCAnY2FuJ3QgaW52b2tlICJldmVudCIgY29tbWFuZCcKKyAgICAgICAgdmlldyA9IHR2LnZpZXdfdGV4dChyb290LCAnVGl0bGUnLCAndGVzdCB0ZXh0JywgbW9kYWw9RmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh2aWV3LCB0di5UZXh0Vmlld2VyKQorCisgICAgZGVmIHRlc3Rfdmlld19maWxlKHNlbGYpOgorICAgICAgICB0ZXN0X2RpciA9IG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykKKyAgICAgICAgdGVzdGZpbGUgPSBvcy5wYXRoLmpvaW4odGVzdF9kaXIsICd0ZXN0X3RleHR2aWV3LnB5JykKKyAgICAgICAgdmlldyA9IHR2LnZpZXdfZmlsZShyb290LCAnVGl0bGUnLCB0ZXN0ZmlsZSwgbW9kYWw9RmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh2aWV3LCB0di5UZXh0Vmlld2VyKQorICAgICAgICBzZWxmLmFzc2VydEluKCdUZXN0Jywgdmlldy50ZXh0Vmlldy5nZXQoJzEuMCcsICcxLmVuZCcpKQorICAgICAgICB2aWV3Lk9rKCkKKworICAgICAgICAjIE1vY2sgbWVzc2FnZWJveCB3aWxsIGJlIHVzZWQgYW5kIHZpZXdfZmlsZSB3aWxsIG5vdCByZXR1cm4gYW55dGhpbmcKKyAgICAgICAgdGVzdGZpbGUgPSBvcy5wYXRoLmpvaW4odGVzdF9kaXIsICcuLi9ub3R0aGVyZS5weScpCisgICAgICAgIHZpZXcgPSB0di52aWV3X2ZpbGUocm9vdCwgJ1RpdGxlJywgdGVzdGZpbGUsIG1vZGFsPUZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh2aWV3KQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbih2ZXJib3NpdHk9MikKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL2lkbGVfdGVzdC90ZXN0X3dhcm5pbmcucHkgYi9MaWIvaWRsZWxpYi9pZGxlX3Rlc3QvdGVzdF93YXJuaW5nLnB5CmluZGV4IDE4NjI3ZGQuLjU0YWM5OTMgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL2lkbGVfdGVzdC90ZXN0X3dhcm5pbmcucHkKKysrIGIvTGliL2lkbGVsaWIvaWRsZV90ZXN0L3Rlc3Rfd2FybmluZy5weQpAQCAtNjgsNiArNjgsMTUgQEAKICAgICAgICAgICAgICAgICAgICAgJ1Rlc3QnLCBVc2VyV2FybmluZywgJ3Rlc3Rfd2FybmluZy5weScsIDk5LCBmLCAnTGluZSBvZiBjb2RlJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2hlbGxtc2cuc3BsaXRsaW5lcygpLCBmLmdldHZhbHVlKCkuc3BsaXRsaW5lcygpKQogCitjbGFzcyBJbXBvcnRXYXJuVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfaWRsZXZlcihzZWxmKToKKyAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncyhyZWNvcmQ9VHJ1ZSkgYXMgdzoKKyAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcigiYWx3YXlzIikKKyAgICAgICAgICAgIGltcG9ydCBpZGxlbGliLmlkbGV2ZXIKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHcpLCAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3Mod1stMV0uY2F0ZWdvcnksIERlcHJlY2F0aW9uV2FybmluZykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCJ2ZXJzaW9uIiwgc3RyKHdbLTFdLm1lc3NhZ2UpKQorCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgdW5pdHRlc3QubWFpbih2ZXJib3NpdHk9MiwgZXhpdD1GYWxzZSkKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL2lkbGVfdGVzdC90ZXN0X3dpZGdldHJlZGlyLnB5IGIvTGliL2lkbGVsaWIvaWRsZV90ZXN0L3Rlc3Rfd2lkZ2V0cmVkaXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQ0MDU2MQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9pZGxlbGliL2lkbGVfdGVzdC90ZXN0X3dpZGdldHJlZGlyLnB5CkBAIC0wLDAgKzEsMTIyIEBACisiIiJVbml0dGVzdCBmb3IgaWRsZWxpYi5XaWRnZXRSZWRpcmVjdG9yCisKKzEwMCUgY292ZXJhZ2UKKyIiIgorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJlcXVpcmVzCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gaWRsZWxpYi5pZGxlX3Rlc3QubW9ja19pZGxlIGltcG9ydCBGdW5jCitmcm9tIHRraW50ZXIgaW1wb3J0IFRrLCBUZXh0LCBUY2xFcnJvcgorZnJvbSBpZGxlbGliLldpZGdldFJlZGlyZWN0b3IgaW1wb3J0IFdpZGdldFJlZGlyZWN0b3IKKworCitjbGFzcyBJbml0Q2xvc2VUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBzZXRVcENsYXNzKGNscyk6CisgICAgICAgIHJlcXVpcmVzKCdndWknKQorICAgICAgICBjbHMudGsgPSBUaygpCisgICAgICAgIGNscy50ZXh0ID0gVGV4dChjbHMudGspCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgdGVhckRvd25DbGFzcyhjbHMpOgorICAgICAgICBjbHMudGV4dC5kZXN0cm95KCkKKyAgICAgICAgY2xzLnRrLmRlc3Ryb3koKQorICAgICAgICBkZWwgY2xzLnRleHQsIGNscy50aworCisgICAgZGVmIHRlc3RfaW5pdChzZWxmKToKKyAgICAgICAgcmVkaXIgPSBXaWRnZXRSZWRpcmVjdG9yKHNlbGYudGV4dCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWRpci53aWRnZXQsIHNlbGYudGV4dCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWRpci50aywgc2VsZi50ZXh0LnRrKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUY2xFcnJvciwgV2lkZ2V0UmVkaXJlY3Rvciwgc2VsZi50ZXh0KQorICAgICAgICByZWRpci5jbG9zZSgpICAjIHJlc3RvcmUgc2VsZi50aywgc2VsZi50ZXh0CisKKyAgICBkZWYgdGVzdF9jbG9zZShzZWxmKToKKyAgICAgICAgcmVkaXIgPSBXaWRnZXRSZWRpcmVjdG9yKHNlbGYudGV4dCkKKyAgICAgICAgcmVkaXIucmVnaXN0ZXIoJ2luc2VydCcsIEZ1bmMpCisgICAgICAgIHJlZGlyLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWRpci5fb3BlcmF0aW9ucywge30pCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihzZWxmLnRleHQsICd3aWRnZXQnKSkKKworCitjbGFzcyBXaWRnZXRSZWRpcmVjdG9yVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc2V0VXBDbGFzcyhjbHMpOgorICAgICAgICByZXF1aXJlcygnZ3VpJykKKyAgICAgICAgY2xzLnRrID0gVGsoKQorICAgICAgICBjbHMudGV4dCA9IFRleHQoY2xzLnRrKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHRlYXJEb3duQ2xhc3MoY2xzKToKKyAgICAgICAgY2xzLnRleHQuZGVzdHJveSgpCisgICAgICAgIGNscy50ay5kZXN0cm95KCkKKyAgICAgICAgZGVsIGNscy50ZXh0LCBjbHMudGsKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5yZWRpciA9IFdpZGdldFJlZGlyZWN0b3Ioc2VsZi50ZXh0KQorICAgICAgICBzZWxmLmZ1bmMgPSBGdW5jKCkKKyAgICAgICAgc2VsZi5vcmlnX2luc2VydCA9IHNlbGYucmVkaXIucmVnaXN0ZXIoJ2luc2VydCcsIHNlbGYuZnVuYykKKyAgICAgICAgc2VsZi50ZXh0Lmluc2VydCgnaW5zZXJ0JywgJ2FzZGYnKSAgIyBsZWF2ZXMgc2VsZi50ZXh0IGVtcHR5CisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYudGV4dC5kZWxldGUoJzEuMCcsICdlbmQnKQorICAgICAgICBzZWxmLnJlZGlyLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X3JlcHIoc2VsZik6ICAjIHBhcnRseSBmb3IgMTAwJSBjb3ZlcmFnZQorICAgICAgICBzZWxmLmFzc2VydEluKCdSZWRpcmVjdG9yJywgcmVwcihzZWxmLnJlZGlyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignT3JpZ2luYWwnLCByZXByKHNlbGYub3JpZ19pbnNlcnQpKQorCisgICAgZGVmIHRlc3RfcmVnaXN0ZXIoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50ZXh0LmdldCgnMS4wJywgJ2VuZCcpLCAnXG4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYy5hcmdzLCAoJ2luc2VydCcsICdhc2RmJykpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2luc2VydCcsIHNlbGYucmVkaXIuX29wZXJhdGlvbnMpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2luc2VydCcsIHNlbGYudGV4dC5fX2RpY3RfXykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnRleHQuaW5zZXJ0LCBzZWxmLmZ1bmMpCisKKyAgICBkZWYgdGVzdF9vcmlnaW5hbF9jb21tYW5kKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYub3JpZ19pbnNlcnQub3BlcmF0aW9uLCAnaW5zZXJ0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm9yaWdfaW5zZXJ0LnRrX2NhbGwsIHNlbGYudGV4dC50ay5jYWxsKQorICAgICAgICBzZWxmLm9yaWdfaW5zZXJ0KCdpbnNlcnQnLCAnYXNkZicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50ZXh0LmdldCgnMS4wJywgJ2VuZCcpLCAnYXNkZlxuJykKKworICAgIGRlZiB0ZXN0X3VucmVnaXN0ZXIoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHNlbGYucmVkaXIudW5yZWdpc3RlcignaW52YWxpZCBvcGVyYXRpb24gbmFtZScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucmVkaXIudW5yZWdpc3RlcignaW5zZXJ0JyksIHNlbGYuZnVuYykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignaW5zZXJ0Jywgc2VsZi5yZWRpci5fb3BlcmF0aW9ucykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignaW5zZXJ0Jywgc2VsZi50ZXh0Ll9fZGljdF9fKQorCisgICAgZGVmIHRlc3RfdW5yZWdpc3Rlcl9ub19hdHRyaWJ1dGUoc2VsZik6CisgICAgICAgIGRlbCBzZWxmLnRleHQuaW5zZXJ0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5yZWRpci51bnJlZ2lzdGVyKCdpbnNlcnQnKSwgc2VsZi5mdW5jKQorCisgICAgZGVmIHRlc3RfZGlzcGF0Y2hfaW50ZXJjZXB0KHNlbGYpOgorICAgICAgICBzZWxmLmZ1bmMuX19pbml0X18oVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYucmVkaXIuZGlzcGF0Y2goJ2luc2VydCcsIEZhbHNlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmZ1bmMuYXJnc1swXSkKKworICAgIGRlZiB0ZXN0X2Rpc3BhdGNoX2J5cGFzcyhzZWxmKToKKyAgICAgICAgc2VsZi5vcmlnX2luc2VydCgnaW5zZXJ0JywgJ2FzZGYnKQorICAgICAgICAjIHRrLmNhbGwgcmV0dXJucyAnJyB3aGVyZSBQeXRob24gd291bGQgcmV0dXJuIE5vbmUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnJlZGlyLmRpc3BhdGNoKCdkZWxldGUnLCAnMS4wJywgJ2VuZCcpLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnRleHQuZ2V0KCcxLjAnLCAnZW5kJyksICdcbicpCisKKyAgICBkZWYgdGVzdF9kaXNwYXRjaF9lcnJvcihzZWxmKToKKyAgICAgICAgc2VsZi5mdW5jLl9faW5pdF9fKFRjbEVycm9yKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5yZWRpci5kaXNwYXRjaCgnaW5zZXJ0JywgRmFsc2UpLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnJlZGlyLmRpc3BhdGNoKCdpbnZhbGlkJyksICcnKQorCisgICAgZGVmIHRlc3RfY29tbWFuZF9kaXNwYXRjaChzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgLl9faW5pdF9fIGNhdXNlcyByZWRpcmVjdGlvbiBvZiB0ayBjYWxscworICAgICAgICAjIHRocm91Z2ggcmVkaXIuZGlzcGF0Y2gKKyAgICAgICAgc2VsZi50ay5jYWxsKHNlbGYudGV4dC5fdywgJ2luc2VydCcsICdoZWxsbycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jLmFyZ3MsICgnaGVsbG8nLCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50ZXh0LmdldCgnMS4wJywgJ2VuZCcpLCAnXG4nKQorICAgICAgICAjIEVuc3VyZSB0aGF0IGNhbGxlZCB0aHJvdWdoIHJlZGlyIC5kaXNwYXRjaCBhbmQgbm90IHRocm91Z2gKKyAgICAgICAgIyBzZWxmLnRleHQuaW5zZXJ0IGJ5IGhhdmluZyBtb2NrIHJhaXNlIFRjbEVycm9yLgorICAgICAgICBzZWxmLmZ1bmMuX19pbml0X18oVGNsRXJyb3IoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnRrLmNhbGwoc2VsZi50ZXh0Ll93LCAnaW5zZXJ0JywgJ2JvbycpLCAnJykKKworCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbih2ZXJib3NpdHk9MikKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL2lkbGV2ZXIucHkgYi9MaWIvaWRsZWxpYi9pZGxldmVyLnB5CmluZGV4IDlhZDdkODkuLjNlOWY2OWEgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL2lkbGV2ZXIucHkKKysrIGIvTGliL2lkbGVsaWIvaWRsZXZlci5weQpAQCAtMSArMSwxMiBAQAotSURMRV9WRVJTSU9OID0gIjMuMy42IgorIiIiCitUaGUgc2VwYXJhdGUgSWRsZSB2ZXJzaW9uIHdhcyBlbGltaW5hdGVkIHllYXJzIGFnbzsKK2lkbGVsaWIuaWRsZXZlciBpcyBubyBsb25nZXIgdXNlZCBieSBJZGxlCithbmQgd2lsbCBiZSByZW1vdmVkIGluIDMuNiBvciBsYXRlci4gIFVzZQorICAgIGZyb20gc3lzIGltcG9ydCB2ZXJzaW9uCisgICAgSURMRV9WRVJTSU9OID0gdmVyc2lvbls6dmVyc2lvbi5pbmRleCgnICcpXQorIiIiCisjIEtlcHQgZm9yIG5vdyBvbmx5IGZvciBwb3NzaWJsZSBleGlzdGluZyBleHRlbnNpb24gdXNlCitpbXBvcnQgd2FybmluZ3MgYXMgdwordy53YXJuKF9fZG9jX18sIERlcHJlY2F0aW9uV2FybmluZywgc3RhY2tsZXZlbD0yKQorZnJvbSBzeXMgaW1wb3J0IHZlcnNpb24KK0lETEVfVkVSU0lPTiA9IHZlcnNpb25bOnZlcnNpb24uaW5kZXgoJyAnKV0KZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL2tleWJpbmRpbmdEaWFsb2cucHkgYi9MaWIvaWRsZWxpYi9rZXliaW5kaW5nRGlhbG9nLnB5CmluZGV4IDBmMGRhOGMuLmU2NDM4YmYgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL2tleWJpbmRpbmdEaWFsb2cucHkKKysrIGIvTGliL2lkbGVsaWIva2V5YmluZGluZ0RpYWxvZy5weQpAQCAtNCwxNSArNCwxNiBAQAogZnJvbSB0a2ludGVyIGltcG9ydCAqCiBpbXBvcnQgdGtpbnRlci5tZXNzYWdlYm94IGFzIHRrTWVzc2FnZUJveAogaW1wb3J0IHN0cmluZwotZnJvbSBpZGxlbGliIGltcG9ydCBtYWNvc3hTdXBwb3J0CitpbXBvcnQgc3lzCiAKIGNsYXNzIEdldEtleXNEaWFsb2coVG9wbGV2ZWwpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLHBhcmVudCx0aXRsZSxhY3Rpb24sY3VycmVudEtleVNlcXVlbmNlcyk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYscGFyZW50LHRpdGxlLGFjdGlvbixjdXJyZW50S2V5U2VxdWVuY2VzLF9odGVzdD1GYWxzZSk6CiAgICAgICAgICIiIgogICAgICAgICBhY3Rpb24gLSBzdHJpbmcsIHRoZSBuYW1lIG9mIHRoZSB2aXJ0dWFsIGV2ZW50IHRoZXNlIGtleXMgd2lsbCBiZQogICAgICAgICAgICAgICAgICBtYXBwZWQgdG8KICAgICAgICAgY3VycmVudEtleXMgLSBsaXN0LCBhIGxpc3Qgb2YgYWxsIGtleSBzZXF1ZW5jZSBsaXN0cyBjdXJyZW50bHkgbWFwcGVkCiAgICAgICAgICAgICAgICAgIHRvIHZpcnR1YWwgZXZlbnRzLCBmb3Igb3ZlcmxhcCBjaGVja2luZworICAgICAgICBfaHRlc3QgLSBib29sLCBjaGFuZ2UgYm94IGxvY2F0aW9uIHdoZW4gcnVubmluZyBodGVzdAogICAgICAgICAiIiIKICAgICAgICAgVG9wbGV2ZWwuX19pbml0X18oc2VsZiwgcGFyZW50KQogICAgICAgICBzZWxmLmNvbmZpZ3VyZShib3JkZXJ3aWR0aD01KQpAQCAtMzgsMTEgKzM5LDE0IEBACiAgICAgICAgIHNlbGYuTG9hZEZpbmFsS2V5TGlzdCgpCiAgICAgICAgIHNlbGYud2l0aGRyYXcoKSAjaGlkZSB3aGlsZSBzZXR0aW5nIGdlb21ldHJ5CiAgICAgICAgIHNlbGYudXBkYXRlX2lkbGV0YXNrcygpCi0gICAgICAgIHNlbGYuZ2VvbWV0cnkoIislZCslZCIgJQotICAgICAgICAgICAgKChwYXJlbnQud2luZm9fcm9vdHgoKSsoKHBhcmVudC53aW5mb193aWR0aCgpLzIpCi0gICAgICAgICAgICAgICAgLShzZWxmLndpbmZvX3JlcXdpZHRoKCkvMikpLAotICAgICAgICAgICAgICBwYXJlbnQud2luZm9fcm9vdHkoKSsoKHBhcmVudC53aW5mb19oZWlnaHQoKS8yKQotICAgICAgICAgICAgICAgIC0oc2VsZi53aW5mb19yZXFoZWlnaHQoKS8yKSkgKSkgKSAjY2VudHJlIGRpYWxvZyBvdmVyIHBhcmVudAorICAgICAgICBzZWxmLmdlb21ldHJ5KAorICAgICAgICAgICAgICAgICIrJWQrJWQiICUgKAorICAgICAgICAgICAgICAgICAgICBwYXJlbnQud2luZm9fcm9vdHgoKSArCisgICAgICAgICAgICAgICAgICAgIChwYXJlbnQud2luZm9fd2lkdGgoKS8yIC0gc2VsZi53aW5mb19yZXF3aWR0aCgpLzIpLAorICAgICAgICAgICAgICAgICAgICBwYXJlbnQud2luZm9fcm9vdHkoKSArCisgICAgICAgICAgICAgICAgICAgICgocGFyZW50LndpbmZvX2hlaWdodCgpLzIgLSBzZWxmLndpbmZvX3JlcWhlaWdodCgpLzIpCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBfaHRlc3QgZWxzZSAxNTApCisgICAgICAgICAgICAgICAgKSApICAjY2VudHJlIGRpYWxvZyBvdmVyIHBhcmVudCAob3IgYmVsb3cgaHRlc3QgYm94KQogICAgICAgICBzZWxmLmRlaWNvbmlmeSgpICNnZW9tZXRyeSBzZXQsIHVuaGlkZQogICAgICAgICBzZWxmLndhaXRfd2luZG93KCkKIApAQCAtMTMzLDggKzEzNyw3IEBACiAgICAgICAgIG9yZGVyIGlzIGFsc28gaW1wb3J0YW50OiBrZXkgYmluZGluZyBlcXVhbGl0eSBkZXBlbmRzIG9uIGl0LCBzbwogICAgICAgICBjb25maWcta2V5cy5kZWYgbXVzdCB1c2UgdGhlIHNhbWUgb3JkZXJpbmcuCiAgICAgICAgICIiIgotICAgICAgICBpbXBvcnQgc3lzCi0gICAgICAgIGlmIG1hY29zeFN1cHBvcnQucnVubmluZ0FzT1NYQXBwKCk6CisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAiZGFyd2luIjoKICAgICAgICAgICAgIHNlbGYubW9kaWZpZXJzID0gWydTaGlmdCcsICdDb250cm9sJywgJ09wdGlvbicsICdDb21tYW5kJ10KICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYubW9kaWZpZXJzID0gWydDb250cm9sJywgJ0FsdCcsICdTaGlmdCddCkBAIC0yNTksMTEgKzI2Miw1IEBACiAgICAgICAgIHJldHVybiBrZXlzT0sKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICAjdGVzdCB0aGUgZGlhbG9nCi0gICAgcm9vdD1UaygpCi0gICAgZGVmIHJ1bigpOgotICAgICAgICBrZXlTZXE9JycKLSAgICAgICAgZGxnPUdldEtleXNEaWFsb2cocm9vdCwnR2V0IEtleXMnLCdmaW5kLWFnYWluJyxbXSkKLSAgICAgICAgcHJpbnQoZGxnLnJlc3VsdCkKLSAgICBCdXR0b24ocm9vdCx0ZXh0PSdEaWFsb2cnLGNvbW1hbmQ9cnVuKS5wYWNrKCkKLSAgICByb290Lm1haW5sb29wKCkKKyAgICBmcm9tIGlkbGVsaWIuaWRsZV90ZXN0Lmh0ZXN0IGltcG9ydCBydW4KKyAgICBydW4oR2V0S2V5c0RpYWxvZykKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL21hY29zeFN1cHBvcnQucHkgYi9MaWIvaWRsZWxpYi9tYWNvc3hTdXBwb3J0LnB5CmluZGV4IDY3MDY5ZmEuLmI5NmJhZTEgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL21hY29zeFN1cHBvcnQucHkKKysrIGIvTGliL2lkbGVsaWIvbWFjb3N4U3VwcG9ydC5weQpAQCAtMSw0OCArMSw3MCBAQAogIiIiCi1BIG51bWJlciBvZiBmdW5jdGlvbiB0aGF0IGVuaGFuY2UgSURMRSBvbiBNYWNPU1ggd2hlbiBpdCB1c2VkIGFzIGEgbm9ybWFsCi1HVUkgYXBwbGljYXRpb24gKGFzIG9wcG9zZWQgdG8gYW4gWDExIGFwcGxpY2F0aW9uKS4KK0EgbnVtYmVyIG9mIGZ1bmN0aW9ucyB0aGF0IGVuaGFuY2UgSURMRSBvbiBNYWMgT1NYLgogIiIiCiBpbXBvcnQgc3lzCiBpbXBvcnQgdGtpbnRlcgogZnJvbSBvcyBpbXBvcnQgcGF0aAotCi0KLV9hcHBidW5kbGUgPSBOb25lCitpbXBvcnQgd2FybmluZ3MKIAogZGVmIHJ1bm5pbmdBc09TWEFwcCgpOgotICAgICIiIgotICAgIFJldHVybnMgVHJ1ZSBpZiBQeXRob24gaXMgcnVubmluZyBmcm9tIHdpdGhpbiBhbiBhcHAgb24gT1NYLgotICAgIElmIHNvLCB0aGUgdmFyaW91cyBPUyBYIGN1c3RvbWl6YXRpb25zIHdpbGwgYmUgdHJpZ2dlcmVkIGxhdGVyIChtZW51Ci0gICAgZml4dXAsIGV0IGFsKS4gIChPcmlnaW5hbGx5LCB0aGlzIHRlc3Qgd2FzIHN1cHBvc2VkIHRvIGNvbmRpdGlvbgotICAgIGJlaGF2aW9yIG9uIHdoZXRoZXIgSURMRSB3YXMgcnVubmluZyB1bmRlciBBcXVhIFRrIHJhdGhlciB0aGFuCi0gICAgdW5kZXIgWDExIFRrIGJ1dCB0aGF0IGRvZXMgbm90IHdvcmsgc2luY2UgYSBmcmFtZXdvcmsgYnVpbGQKLSAgICBjb3VsZCBiZSBsaW5rZWQgd2l0aCBYMTEuICBGb3Igc2V2ZXJhbCByZWxlYXNlcywgdGhpcyB0ZXN0IGFjdHVhbGx5Ci0gICAgZGlmZmVyZW50aWF0ZXMgYmV0d2VlbiB3aGV0aGVyIElETEUgaXMgcnVubmluZyBmcm9tIGEgZnJhbWV3b3JrIG9yCi0gICAgbm90LiAgQXMgYSBmdXR1cmUgZW5oYW5jZW1lbnQsIGl0IHNob3VsZCBiZSBjb25zaWRlcmVkIHdoZXRoZXIgdGhlcmUKLSAgICBzaG91bGQgYmUgYSBkaWZmZXJlbmNlIGJhc2VkIG9uIGZyYW1ld29yayBhbmQgYW55IG5lZWRlZCBYMTEgYWRhcHRpb25zCi0gICAgc2hvdWxkIGJlIG1hZGUgZGVwZW5kZW50IG9uIGEgbmV3IGZ1bmN0aW9uIHRoYXQgYWN0dWFsbHkgdGVzdHMgZm9yIFgxMS4pCi0gICAgIiIiCi0gICAgZ2xvYmFsIF9hcHBidW5kbGUKLSAgICBpZiBfYXBwYnVuZGxlIGlzIE5vbmU6Ci0gICAgICAgIF9hcHBidW5kbGUgPSBzeXMucGxhdGZvcm0gPT0gJ2RhcndpbicKLSAgICAgICAgaWYgX2FwcGJ1bmRsZToKLSAgICAgICAgICAgIGltcG9ydCBzeXNjb25maWcKLSAgICAgICAgICAgIF9hcHBidW5kbGUgPSBib29sKHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignUFlUSE9ORlJBTUVXT1JLJykpCi0gICAgcmV0dXJuIF9hcHBidW5kbGUKLQotX2NhcmJvbmFxdWF0ayA9IE5vbmUKKyAgICB3YXJuaW5ncy53YXJuKCJydW5uaW5nQXNPU1hBcHAoKSBpcyBkZXByZWNhdGVkLCB1c2UgaXNBcXVhVGsoKSIsCisgICAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcsIHN0YWNrbGV2ZWw9MikKKyAgICByZXR1cm4gaXNBcXVhVGsoKQogCiBkZWYgaXNDYXJib25BcXVhVGsocm9vdCk6CisgICAgd2FybmluZ3Mud2FybigiaXNDYXJib25BcXVhVGsocm9vdCkgaXMgZGVwcmVjYXRlZCwgdXNlIGlzQ2FyYm9uVGsoKSIsCisgICAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcsIHN0YWNrbGV2ZWw9MikKKyAgICByZXR1cm4gaXNDYXJib25UaygpCisKK190a190eXBlID0gTm9uZQorCitkZWYgX2luaXRpYWxpemVUa1ZhcmlhbnRUZXN0cyhyb290KToKKyAgICAiIiIKKyAgICBJbml0aWFsaXplcyBPUyBYIFRrIHZhcmlhbnQgdmFsdWVzIGZvcgorICAgIGlzQXF1YVRrKCksIGlzQ2FyYm9uVGsoKSwgaXNDb2NvYVRrKCksIGFuZCBpc1hRdWFydHooKS4KKyAgICAiIiIKKyAgICBnbG9iYWwgX3RrX3R5cGUKKyAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ2Rhcndpbic6CisgICAgICAgIHdzID0gcm9vdC50ay5jYWxsKCd0aycsICd3aW5kb3dpbmdzeXN0ZW0nKQorICAgICAgICBpZiAneDExJyBpbiB3czoKKyAgICAgICAgICAgIF90a190eXBlID0gInhxdWFydHoiCisgICAgICAgIGVsaWYgJ2FxdWEnIG5vdCBpbiB3czoKKyAgICAgICAgICAgIF90a190eXBlID0gIm90aGVyIgorICAgICAgICBlbGlmICdBcHBLaXQnIGluIHJvb3QudGsuY2FsbCgnd2luZm8nLCAnc2VydmVyJywgJy4nKToKKyAgICAgICAgICAgIF90a190eXBlID0gImNvY29hIgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgX3RrX3R5cGUgPSAiY2FyYm9uIgorICAgIGVsc2U6CisgICAgICAgIF90a190eXBlID0gIm90aGVyIgorCitkZWYgaXNBcXVhVGsoKToKKyAgICAiIiIKKyAgICBSZXR1cm5zIFRydWUgaWYgSURMRSBpcyB1c2luZyBhIG5hdGl2ZSBPUyBYIFRrIChDb2NvYSBvciBDYXJib24pLgorICAgICIiIgorICAgIGFzc2VydCBfdGtfdHlwZSBpcyBub3QgTm9uZQorICAgIHJldHVybiBfdGtfdHlwZSA9PSAiY29jb2EiIG9yIF90a190eXBlID09ICJjYXJib24iCisKK2RlZiBpc0NhcmJvblRrKCk6CiAgICAgIiIiCiAgICAgUmV0dXJucyBUcnVlIGlmIElETEUgaXMgdXNpbmcgYSBDYXJib24gQXF1YSBUayAoaW5zdGVhZCBvZiB0aGUKICAgICBuZXdlciBDb2NvYSBBcXVhIFRrKS4KICAgICAiIiIKLSAgICBnbG9iYWwgX2NhcmJvbmFxdWF0awotICAgIGlmIF9jYXJib25hcXVhdGsgaXMgTm9uZToKLSAgICAgICAgX2NhcmJvbmFxdWF0ayA9IChydW5uaW5nQXNPU1hBcHAoKSBhbmQKLSAgICAgICAgICAgICAgICAgICAgICAgICAnYXF1YScgaW4gcm9vdC50ay5jYWxsKCd0aycsICd3aW5kb3dpbmdzeXN0ZW0nKSBhbmQKLSAgICAgICAgICAgICAgICAgICAgICAgICAnQXBwS2l0JyBub3QgaW4gcm9vdC50ay5jYWxsKCd3aW5mbycsICdzZXJ2ZXInLCAnLicpKQotICAgIHJldHVybiBfY2FyYm9uYXF1YXRrCisgICAgYXNzZXJ0IF90a190eXBlIGlzIG5vdCBOb25lCisgICAgcmV0dXJuIF90a190eXBlID09ICJjYXJib24iCisKK2RlZiBpc0NvY29hVGsoKToKKyAgICAiIiIKKyAgICBSZXR1cm5zIFRydWUgaWYgSURMRSBpcyB1c2luZyBhIENvY29hIEFxdWEgVGsuCisgICAgIiIiCisgICAgYXNzZXJ0IF90a190eXBlIGlzIG5vdCBOb25lCisgICAgcmV0dXJuIF90a190eXBlID09ICJjb2NvYSIKKworZGVmIGlzWFF1YXJ0eigpOgorICAgICIiIgorICAgIFJldHVybnMgVHJ1ZSBpZiBJRExFIGlzIHVzaW5nIGFuIE9TIFggWDExIFRrLgorICAgICIiIgorICAgIGFzc2VydCBfdGtfdHlwZSBpcyBub3QgTm9uZQorICAgIHJldHVybiBfdGtfdHlwZSA9PSAieHF1YXJ0eiIKIAogZGVmIHRrVmVyc2lvbldhcm5pbmcocm9vdCk6CiAgICAgIiIiCkBAIC01Myw4ICs3NSw3IEBACiAgICAgICAgIGNhbiBzdGlsbCBjcmFzaCB1bmV4cGVjdGVkbHkuCiAgICAgIiIiCiAKLSAgICBpZiAocnVubmluZ0FzT1NYQXBwKCkgYW5kCi0gICAgICAgICAgICAoJ0FwcEtpdCcgaW4gcm9vdC50ay5jYWxsKCd3aW5mbycsICdzZXJ2ZXInLCAnLicpKSApOgorICAgIGlmIGlzQ29jb2FUaygpOgogICAgICAgICBwYXRjaGxldmVsID0gcm9vdC50ay5jYWxsKCdpbmZvJywgJ3BhdGNobGV2ZWwnKQogICAgICAgICBpZiBwYXRjaGxldmVsIG5vdCBpbiAoJzguNS43JywgJzguNS45Jyk6CiAgICAgICAgICAgICByZXR1cm4gRmFsc2UKQEAgLTg4LDggKzEwOSw4IEBACiAKIGRlZiBvdmVycmlkZVJvb3RNZW51KHJvb3QsIGZsaXN0KToKICAgICAiIiIKLSAgICBSZXBsYWNlIHRoZSBUayByb290IG1lbnUgYnkgc29tZXRoaW5nIHRoYXQncyBtb3JlIGFwcHJvcHJpYXRlIGZvcgotICAgIElETEUuCisgICAgUmVwbGFjZSB0aGUgVGsgcm9vdCBtZW51IGJ5IHNvbWV0aGluZyB0aGF0IGlzIG1vcmUgYXBwcm9wcmlhdGUgZm9yCisgICAgSURMRSB3aXRoIGFuIEFxdWEgVGsuCiAgICAgIiIiCiAgICAgIyBUaGUgbWVudSB0aGF0IGlzIGF0dGFjaGVkIHRvIHRoZSBUayByb290ICgiLiIpIGlzIGFsc28gdXNlZCBieSBBcXVhVGsgZm9yCiAgICAgIyBhbGwgd2luZG93cyB0aGF0IGRvbid0IHNwZWNpZnkgYSBtZW51IG9mIHRoZWlyIG93bi4gVGhlIGRlZmF1bHQgbWVudWJhcgpAQCAtMTAyLDE3ICsxMjMsMjkgQEAKICAgICAjCiAgICAgIyBEdWUgdG8gYSAobWlzLSlmZWF0dXJlIG9mIFRrQXF1YSB0aGUgdXNlciB3aWxsIGFsc28gc2VlIGFuIGVtcHR5IEhlbHAKICAgICAjIG1lbnUuCi0gICAgZnJvbSB0a2ludGVyIGltcG9ydCBNZW51LCBUZXh0LCBUZXh0Ci0gICAgZnJvbSBpZGxlbGliLkVkaXRvcldpbmRvdyBpbXBvcnQgcHJlcHN0ciwgZ2V0X2FjY2VsZXJhdG9yCisgICAgZnJvbSB0a2ludGVyIGltcG9ydCBNZW51CiAgICAgZnJvbSBpZGxlbGliIGltcG9ydCBCaW5kaW5ncwogICAgIGZyb20gaWRsZWxpYiBpbXBvcnQgV2luZG93TGlzdAotICAgIGZyb20gaWRsZWxpYi5NdWx0aUNhbGwgaW1wb3J0IE11bHRpQ2FsbENyZWF0b3IKIAorICAgIGNsb3NlSXRlbSA9IEJpbmRpbmdzLm1lbnVkZWZzWzBdWzFdWy0yXQorCisgICAgIyBSZW1vdmUgdGhlIGxhc3QgMyBpdGVtcyBvZiB0aGUgZmlsZSBtZW51OiBhIHNlcGFyYXRvciwgY2xvc2Ugd2luZG93IGFuZAorICAgICMgcXVpdC4gQ2xvc2Ugd2luZG93IHdpbGwgYmUgcmVpbnNlcnRlZCBqdXN0IGFib3ZlIHRoZSBzYXZlIGl0ZW0sIHdoZXJlCisgICAgIyBpdCBzaG91bGQgYmUgYWNjb3JkaW5nIHRvIHRoZSBISUcuIFF1aXQgaXMgaW4gdGhlIGFwcGxpY2F0aW9uIG1lbnUuCisgICAgZGVsIEJpbmRpbmdzLm1lbnVkZWZzWzBdWzFdWy0zOl0KKyAgICBCaW5kaW5ncy5tZW51ZGVmc1swXVsxXS5pbnNlcnQoNiwgY2xvc2VJdGVtKQorCisgICAgIyBSZW1vdmUgdGhlICdBYm91dCcgZW50cnkgZnJvbSB0aGUgaGVscCBtZW51LCBpdCBpcyBpbiB0aGUgYXBwbGljYXRpb24KKyAgICAjIG1lbnUKKyAgICBkZWwgQmluZGluZ3MubWVudWRlZnNbLTFdWzFdWzA6Ml0KKyAgICAjIFJlbW92ZSB0aGUgJ0NvbmZpZ3VyZSBJZGxlJyBlbnRyeSBmcm9tIHRoZSBvcHRpb25zIG1lbnUsIGl0IGlzIGluIHRoZQorICAgICMgYXBwbGljYXRpb24gbWVudSBhcyAnUHJlZmVyZW5jZXMnCisgICAgZGVsIEJpbmRpbmdzLm1lbnVkZWZzWy0yXVsxXVswXQogICAgIG1lbnViYXIgPSBNZW51KHJvb3QpCiAgICAgcm9vdC5jb25maWd1cmUobWVudT1tZW51YmFyKQogICAgIG1lbnVkaWN0ID0ge30KIAotICAgIG1lbnVkaWN0Wyd3aW5kb3dzJ10gPSBtZW51ID0gTWVudShtZW51YmFyLCBuYW1lPSd3aW5kb3dzJykKKyAgICBtZW51ZGljdFsnd2luZG93cyddID0gbWVudSA9IE1lbnUobWVudWJhciwgbmFtZT0nd2luZG93cycsIHRlYXJvZmY9MCkKICAgICBtZW51YmFyLmFkZF9jYXNjYWRlKGxhYmVsPSdXaW5kb3cnLCBtZW51PW1lbnUsIHVuZGVybGluZT0wKQogCiAgICAgZGVmIHBvc3R3aW5kb3dzbWVudShtZW51PW1lbnUpOgpAQCAtMTI2LDEwICsxNTksMTQgQEAKICAgICBXaW5kb3dMaXN0LnJlZ2lzdGVyX2NhbGxiYWNrKHBvc3R3aW5kb3dzbWVudSkKIAogICAgIGRlZiBhYm91dF9kaWFsb2coZXZlbnQ9Tm9uZSk6CisgICAgICAgICJIYW5kbGUgSGVscCAnQWJvdXQgSURMRScgZXZlbnQuIgorICAgICAgICAjIFN5bmNocm9uaXplIHdpdGggRWRpdG9yV2luZG93LkVkaXRvcldpbmRvdy5hYm91dF9kaWFsb2cuCiAgICAgICAgIGZyb20gaWRsZWxpYiBpbXBvcnQgYWJvdXREaWFsb2cKICAgICAgICAgYWJvdXREaWFsb2cuQWJvdXREaWFsb2cocm9vdCwgJ0Fib3V0IElETEUnKQogCiAgICAgZGVmIGNvbmZpZ19kaWFsb2coZXZlbnQ9Tm9uZSk6CisgICAgICAgICJIYW5kbGUgT3B0aW9ucyAnQ29uZmlndXJlIElETEUnIGV2ZW50LiIKKyAgICAgICAgIyBTeW5jaHJvbml6ZSB3aXRoIEVkaXRvcldpbmRvdy5FZGl0b3JXaW5kb3cuY29uZmlnX2RpYWxvZy4KICAgICAgICAgZnJvbSBpZGxlbGliIGltcG9ydCBjb25maWdEaWFsb2cKIAogICAgICAgICAjIEVuc3VyZSB0aGF0IHRoZSByb290IG9iamVjdCBoYXMgYW4gaW5zdGFuY2VfZGljdCBhdHRyaWJ1dGUsCkBAIC0xMzcsMTMgKzE3NCwxMyBAQAogICAgICAgICAjIG9uIGFuIEVkaXRvcldpbmRvdyBpbnN0YW5jZSB0aGF0IGlzIHRoZW4gcGFzc2VkIGFzIHRoZSBmaXJzdAogICAgICAgICAjIGFyZ3VtZW50IHRvIENvbmZpZ0RpYWxvZykKICAgICAgICAgcm9vdC5pbnN0YW5jZV9kaWN0ID0gZmxpc3QuaW52ZXJzZWRpY3QKLSAgICAgICAgcm9vdC5pbnN0YW5jZV9kaWN0ID0gZmxpc3QuaW52ZXJzZWRpY3QKICAgICAgICAgY29uZmlnRGlhbG9nLkNvbmZpZ0RpYWxvZyhyb290LCAnU2V0dGluZ3MnKQogCiAgICAgZGVmIGhlbHBfZGlhbG9nKGV2ZW50PU5vbmUpOgotICAgICAgICBmcm9tIGlkbGVsaWIgaW1wb3J0IHRleHRWaWV3Ci0gICAgICAgIGZuID0gcGF0aC5qb2luKHBhdGguYWJzcGF0aChwYXRoLmRpcm5hbWUoX19maWxlX18pKSwgJ2hlbHAudHh0JykKLSAgICAgICAgdGV4dFZpZXcudmlld19maWxlKHJvb3QsICdIZWxwJywgZm4pCisgICAgICAgICJIYW5kbGUgSGVscCAnSURMRSBIZWxwJyBldmVudC4iCisgICAgICAgICMgU3luY2hyb25pemUgd2l0aCBFZGl0b3JXaW5kb3cuRWRpdG9yV2luZG93LmhlbHBfZGlhbG9nLgorICAgICAgICBmcm9tIGlkbGVsaWIgaW1wb3J0IGhlbHAKKyAgICAgICAgaGVscC5zaG93X2lkbGVoZWxwKHJvb3QpCiAKICAgICByb290LmJpbmQoJzw8YWJvdXQtaWRsZT4+JywgYWJvdXRfZGlhbG9nKQogICAgIHJvb3QuYmluZCgnPDxvcGVuLWNvbmZpZy1kaWFsb2c+PicsIGNvbmZpZ19kaWFsb2cpCkBAIC0xNTYsOSArMTkzLDEwIEBACiAgICAgICAgICMgcmlnaHQgdGhpbmcgZm9yIG5vdy4KICAgICAgICAgcm9vdC5jcmVhdGVjb21tYW5kKCdleGl0JywgZmxpc3QuY2xvc2VfYWxsX2NhbGxiYWNrKQogCi0gICAgaWYgaXNDYXJib25BcXVhVGsocm9vdCk6CisgICAgaWYgaXNDYXJib25UaygpOgogICAgICAgICAjIGZvciBDYXJib24gQXF1YVRrLCByZXBsYWNlIHRoZSBkZWZhdWx0IFRrIGFwcGxlIG1lbnUKLSAgICAgICAgbWVudWRpY3RbJ2FwcGxpY2F0aW9uJ10gPSBtZW51ID0gTWVudShtZW51YmFyLCBuYW1lPSdhcHBsZScpCisgICAgICAgIG1lbnVkaWN0WydhcHBsaWNhdGlvbiddID0gbWVudSA9IE1lbnUobWVudWJhciwgbmFtZT0nYXBwbGUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlYXJvZmY9MCkKICAgICAgICAgbWVudWJhci5hZGRfY2FzY2FkZShsYWJlbD0nSURMRScsIG1lbnU9bWVudSkKICAgICAgICAgQmluZGluZ3MubWVudWRlZnMuaW5zZXJ0KDAsCiAgICAgICAgICAgICAoJ2FwcGxpY2F0aW9uJywgWwpAQCAtMTcxLDggKzIwOSw3IEBACiAgICAgICAgICAgICBCaW5kaW5ncy5tZW51ZGVmc1swXVsxXS5hcHBlbmQoCiAgICAgICAgICAgICAgICAgICAgICgnX1ByZWZlcmVuY2VzLi4uLicsICc8PG9wZW4tY29uZmlnLWRpYWxvZz4+JyksCiAgICAgICAgICAgICAgICAgKQotICAgIGVsc2U6Ci0gICAgICAgICMgYXNzdW1lIENvY29hIEFxdWFUaworICAgIGlmIGlzQ29jb2FUaygpOgogICAgICAgICAjIHJlcGxhY2UgZGVmYXVsdCBBYm91dCBkaWFsb2cgd2l0aCBBYm91dCBJRExFIG9uZQogICAgICAgICByb290LmNyZWF0ZWNvbW1hbmQoJ3RrQWJvdXREaWFsb2cnLCBhYm91dF9kaWFsb2cpCiAgICAgICAgICMgcmVwbGFjZSBkZWZhdWx0ICJIZWxwIiBpdGVtIGluIEhlbHAgbWVudQpAQCAtMTgyLDEwICsyMTksMjIgQEAKIAogZGVmIHNldHVwQXBwKHJvb3QsIGZsaXN0KToKICAgICAiIiIKLSAgICBQZXJmb3JtIHNldHVwIGZvciB0aGUgT1NYIGFwcGxpY2F0aW9uIGJ1bmRsZS4KLSAgICAiIiIKLSAgICBpZiBub3QgcnVubmluZ0FzT1NYQXBwKCk6IHJldHVybgorICAgIFBlcmZvcm0gaW5pdGlhbCBPUyBYIGN1c3RvbWl6YXRpb25zIGlmIG5lZWRlZC4KKyAgICBDYWxsZWQgZnJvbSBQeVNoZWxsLm1haW4oKSBhZnRlciBpbml0aWFsIGNhbGxzIHRvIFRrKCkKIAotICAgIGhpZGVUa0NvbnNvbGUocm9vdCkKLSAgICBvdmVycmlkZVJvb3RNZW51KHJvb3QsIGZsaXN0KQotICAgIGFkZE9wZW5FdmVudFN1cHBvcnQocm9vdCwgZmxpc3QpCisgICAgVGhlcmUgYXJlIGN1cnJlbnRseSB0aHJlZSBtYWpvciB2ZXJzaW9ucyBvZiBUayBpbiB1c2Ugb24gT1MgWDoKKyAgICAgICAgMS4gQXF1YSBDb2NvYSBUayAobmF0aXZlIGRlZmF1bHQgc2luY2UgT1MgWCAxMC42KQorICAgICAgICAyLiBBcXVhIENhcmJvbiBUayAob3JpZ2luYWwgbmF0aXZlLCAzMi1iaXQgb25seSwgZGVwcmVjYXRlZCkKKyAgICAgICAgMy4gWDExIChzdXBwb3J0ZWQgYnkgc29tZSB0aGlyZC1wYXJ0eSBkaXN0cmlidXRvcnMsIGRlcHJlY2F0ZWQpCisgICAgVGhlcmUgYXJlIHZhcmlvdXMgZGlmZmVyZW5jZXMgYW1vbmcgdGhlIHRocmVlIHRoYXQgYWZmZWN0IElETEUKKyAgICBiZWhhdmlvciwgcHJpbWFyaWx5IHdpdGggbWVudXMsIG1vdXNlIGtleSBldmVudHMsIGFuZCBhY2NlbGVyYXRvcnMuCisgICAgU29tZSBvbmUtdGltZSBjdXN0b21pemF0aW9ucyBhcmUgcGVyZm9ybWVkIGhlcmUuCisgICAgT3RoZXJzIGFyZSBkeW5hbWljYWxseSB0ZXN0ZWQgdGhyb3VnaG91dCBpZGxlbGliIGJ5IGNhbGxzIHRvIHRoZQorICAgIGlzQXF1YVRrKCksIGlzQ2FyYm9uVGsoKSwgaXNDb2NvYVRrKCksIGlzWFF1YXJ0eigpIGZ1bmN0aW9ucyB3aGljaAorICAgIGFyZSBpbml0aWFsaXplZCBoZXJlIGFzIHdlbGwuCisgICAgIiIiCisgICAgX2luaXRpYWxpemVUa1ZhcmlhbnRUZXN0cyhyb290KQorICAgIGlmIGlzQXF1YVRrKCk6CisgICAgICAgIGhpZGVUa0NvbnNvbGUocm9vdCkKKyAgICAgICAgb3ZlcnJpZGVSb290TWVudShyb290LCBmbGlzdCkKKyAgICAgICAgYWRkT3BlbkV2ZW50U3VwcG9ydChyb290LCBmbGlzdCkKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL3JwYy5weSBiL0xpYi9pZGxlbGliL3JwYy5weQppbmRleCBkZGNlNmU5Li5hYTMzMDQxIDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9ycGMucHkKKysrIGIvTGliL2lkbGVsaWIvcnBjLnB5CkBAIC0yOSw2ICsyOSw3IEBACiAKIGltcG9ydCBzeXMKIGltcG9ydCBvcworaW1wb3J0IGlvCiBpbXBvcnQgc29ja2V0CiBpbXBvcnQgc2VsZWN0CiBpbXBvcnQgc29ja2V0c2VydmVyCkBAIC01MywxNiArNTQsMTUgQEAKICAgICBtcyA9IG1hcnNoYWwuZHVtcHMoY28pCiAgICAgcmV0dXJuIHVucGlja2xlX2NvZGUsIChtcywpCiAKLSMgWFhYIEtCSyAyNEF1ZzAyIGZ1bmN0aW9uIHBpY2tsaW5nIGNhcGFiaWxpdHkgbm90IHVzZWQgaW4gSWRsZQotIyAgZGVmIHVucGlja2xlX2Z1bmN0aW9uKG1zKToKLSMgICAgICByZXR1cm4gbXMKK2RlZiBkdW1wcyhvYmosIHByb3RvY29sPU5vbmUpOgorICAgIGYgPSBpby5CeXRlc0lPKCkKKyAgICBwID0gQ29kZVBpY2tsZXIoZiwgcHJvdG9jb2wpCisgICAgcC5kdW1wKG9iaikKKyAgICByZXR1cm4gZi5nZXR2YWx1ZSgpCiAKLSMgIGRlZiBwaWNrbGVfZnVuY3Rpb24oZm4pOgotIyAgICAgIGFzc2VydCBpc2luc3RhbmNlKGZuLCB0eXBlLkZ1bmN0aW9uVHlwZSkKLSMgICAgICByZXR1cm4gcmVwcihmbikKLQotY29weXJlZy5waWNrbGUodHlwZXMuQ29kZVR5cGUsIHBpY2tsZV9jb2RlLCB1bnBpY2tsZV9jb2RlKQotIyBjb3B5cmVnLnBpY2tsZSh0eXBlcy5GdW5jdGlvblR5cGUsIHBpY2tsZV9mdW5jdGlvbiwgdW5waWNrbGVfZnVuY3Rpb24pCitjbGFzcyBDb2RlUGlja2xlcihwaWNrbGUuUGlja2xlcik6CisgICAgZGlzcGF0Y2hfdGFibGUgPSB7dHlwZXMuQ29kZVR5cGU6IHBpY2tsZV9jb2RlfQorICAgIGRpc3BhdGNoX3RhYmxlLnVwZGF0ZShjb3B5cmVnLmRpc3BhdGNoX3RhYmxlKQogCiBCVUZTSVpFID0gOCoxMDI0CiBMT0NBTEhPU1QgPSAnMTI3LjAuMC4xJwpAQCAtMTk5LDcgKzE5OSw3IEBACiAgICAgICAgICAgICByYWlzZQogICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CiAgICAgICAgICAgICByYWlzZQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXg6CiAgICAgICAgICAgICByZXR1cm4gKCJDQUxMRVhDIiwgZXgpCkBAIC0zMjksNyArMzI5LDcgQEAKICAgICBkZWYgcHV0bWVzc2FnZShzZWxmLCBtZXNzYWdlKToKICAgICAgICAgc2VsZi5kZWJ1ZygicHV0bWVzc2FnZTolZDoiICUgbWVzc2FnZVswXSkKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgcyA9IHBpY2tsZS5kdW1wcyhtZXNzYWdlKQorICAgICAgICAgICAgcyA9IGR1bXBzKG1lc3NhZ2UpCiAgICAgICAgIGV4Y2VwdCBwaWNrbGUuUGlja2xpbmdFcnJvcjoKICAgICAgICAgICAgIHByaW50KCJDYW5ub3QgcGlja2xlOiIsIHJlcHIobWVzc2FnZSksIGZpbGU9c3lzLl9fc3RkZXJyX18pCiAgICAgICAgICAgICByYWlzZQpAQCAtMzQwLDEwICszNDAsNyBAQAogICAgICAgICAgICAgICAgIG4gPSBzZWxmLnNvY2suc2VuZChzWzpCVUZTSVpFXSkKICAgICAgICAgICAgIGV4Y2VwdCAoQXR0cmlidXRlRXJyb3IsIFR5cGVFcnJvcik6CiAgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigic29ja2V0IG5vIGxvbmdlciBleGlzdHMiKQotICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKLSAgICAgICAgICAgICAgICByYWlzZQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzID0gc1tuOl0KKyAgICAgICAgICAgIHMgPSBzW246XQogCiAgICAgYnVmZiA9IGInJwogICAgIGJ1Zm5lZWQgPSA0CkBAIC0zNTcsNyArMzU0LDcgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHMgPSBzZWxmLnNvY2sucmVjdihCVUZTSVpFKQotICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIHJhaXNlIEVPRkVycm9yCiAgICAgICAgICAgICBpZiBsZW4ocykgPT0gMDoKICAgICAgICAgICAgICAgICByYWlzZSBFT0ZFcnJvcgpAQCAtNTM3LDcgKzUzNCw3IEBACiAgICAgICAgICAgICBTb2NrZXRJTy5fX2luaXRfXyhzZWxmLCB3b3JraW5nX3NvY2spCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBwcmludCgiKiogSW52YWxpZCBob3N0OiAiLCBhZGRyZXNzLCBmaWxlPXN5cy5fX3N0ZGVycl9fKQotICAgICAgICAgICAgcmFpc2Ugc29ja2V0LmVycm9yCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yCiAKICAgICBkZWYgZ2V0X3JlbW90ZV9wcm94eShzZWxmLCBvaWQpOgogICAgICAgICByZXR1cm4gUlBDUHJveHkoc2VsZiwgb2lkKQpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvcnVuLnB5IGIvTGliL2lkbGVsaWIvcnVuLnB5CmluZGV4IGMxODU5YjYuLjU5NWU3YmMgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL3J1bi5weQorKysgYi9MaWIvaWRsZWxpYi9ydW4ucHkKQEAgLTEsOCArMSw2IEBACiBpbXBvcnQgc3lzCi1pbXBvcnQgaW8KIGltcG9ydCBsaW5lY2FjaGUKIGltcG9ydCB0aW1lCi1pbXBvcnQgc29ja2V0CiBpbXBvcnQgdHJhY2ViYWNrCiBpbXBvcnQgX3RocmVhZCBhcyB0aHJlYWQKIGltcG9ydCB0aHJlYWRpbmcKQEAgLTE1MCw4ICsxNDgsOCBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZXJ2ZXIgPSBNeVJQQ1NlcnZlcihhZGRyZXNzLCBNeUhhbmRsZXIpCiAgICAgICAgICAgICBicmVhawotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIGVycjoKLSAgICAgICAgICAgIHByaW50KCJJRExFIFN1YnByb2Nlc3M6IHNvY2tldCBlcnJvcjogIiArIGVyci5hcmdzWzFdICsKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgcHJpbnQoIklETEUgU3VicHJvY2VzczogT1NFcnJvcjogIiArIGVyci5hcmdzWzFdICsKICAgICAgICAgICAgICAgICAgICIsIHJldHJ5aW5nLi4uLiIsIGZpbGU9c3lzLl9fc3RkZXJyX18pCiAgICAgICAgICAgICBzb2NrZXRfZXJyb3IgPSBlcnIKICAgICBlbHNlOgpAQCAtMTc2LDcgKzE3NCw3IEBACiAgICAgICAgIHRrTWVzc2FnZUJveC5zaG93ZXJyb3IoIklETEUgU3VicHJvY2VzcyBFcnJvciIsIG1zZywgcGFyZW50PXJvb3QpCiAgICAgZWxzZToKICAgICAgICAgdGtNZXNzYWdlQm94LnNob3dlcnJvcigiSURMRSBTdWJwcm9jZXNzIEVycm9yIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU29ja2V0IEVycm9yOiAlcyIgJSBlcnIuYXJnc1sxXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU29ja2V0IEVycm9yOiAlcyIgJSBlcnIuYXJnc1sxXSwgcGFyZW50PXJvb3QpCiAgICAgcm9vdC5kZXN0cm95KCkKIAogZGVmIHByaW50X2V4Y2VwdGlvbigpOgpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvdGFiYmVkcGFnZXMucHkgYi9MaWIvaWRsZWxpYi90YWJiZWRwYWdlcy5weQppbmRleCAyNTU3NzMyLi45NjVmOWY4IDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi90YWJiZWRwYWdlcy5weQorKysgYi9MaWIvaWRsZWxpYi90YWJiZWRwYWdlcy5weQpAQCAtNDY3LDkgKzQ2NywxMiBAQAogCiAgICAgICAgIHNlbGYuX3RhYl9zZXQuc2V0X3NlbGVjdGVkX3RhYihwYWdlX25hbWUpCiAKLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CitkZWYgX3RhYmJlZF9wYWdlcyhwYXJlbnQpOgogICAgICMgdGVzdCBkaWFsb2cKICAgICByb290PVRrKCkKKyAgICB3aWR0aCwgaGVpZ2h0LCB4LCB5ID0gbGlzdChtYXAoaW50LCByZS5zcGxpdCgnW3grXScsIHBhcmVudC5nZW9tZXRyeSgpKSkpCisgICAgcm9vdC5nZW9tZXRyeSgiKyVkKyVkIiUoeCwgeSArIDE3NSkpCisgICAgcm9vdC50aXRsZSgiVGVzdCB0YWJiZWQgcGFnZXMiKQogICAgIHRhYlBhZ2U9VGFiYmVkUGFnZVNldChyb290LCBwYWdlX25hbWVzPVsnRm9vYmFyJywnQmF6J10sIG5fcm93cz0wLAogICAgICAgICAgICAgICAgICAgICAgICAgICBleHBhbmRfdGFicz1GYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgKQpAQCAtNDg4LDMgKzQ5MSw4IEBACiAgICAgbGFiZWxQZ05hbWUucGFjayhwYWR4PTUpCiAgICAgZW50cnlQZ05hbWUucGFjayhwYWR4PTUpCiAgICAgcm9vdC5tYWlubG9vcCgpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBmcm9tIGlkbGVsaWIuaWRsZV90ZXN0Lmh0ZXN0IGltcG9ydCBydW4KKyAgICBydW4oX3RhYmJlZF9wYWdlcykKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL3Rlc3Rjb2RlLnB5IGIvTGliL2lkbGVsaWIvdGVzdGNvZGUucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1ZWFhNTYuLjAwMDAwMDAKLS0tIGEvTGliL2lkbGVsaWIvdGVzdGNvZGUucHkKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi1pbXBvcnQgc3RyaW5nCi0KLWRlZiBmKCk6Ci0gICAgYSA9IDAKLSAgICBiID0gMQotICAgIGMgPSAyCi0gICAgZCA9IDMKLSAgICBlID0gNAotICAgIGcoKQotCi1kZWYgZygpOgotICAgIGgoKQotCi1kZWYgaCgpOgotICAgIGkoKQotCi1kZWYgaSgpOgotICAgIGooKQotCi1kZWYgaigpOgotICAgIGsoKQotCi1kZWYgaygpOgotICAgIGwoKQotCi1sID0gbGFtYmRhOiB0ZXN0KCkKLQotZGVmIHRlc3QoKToKLSAgICBzdHJpbmcuY2Fwd29yZHMoMSkKLQotZigpCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi90ZXh0Vmlldy5weSBiL0xpYi9pZGxlbGliL3RleHRWaWV3LnB5CmluZGV4IGRkNTA1NDQuLjAxYjJkOGYgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL3RleHRWaWV3LnB5CisrKyBiL0xpYi9pZGxlbGliL3RleHRWaWV3LnB5CkBAIC05LDE1ICs5LDIxIEBACiAgICAgIiIiQSBzaW1wbGUgdGV4dCB2aWV3ZXIgZGlhbG9nIGZvciBJRExFCiAKICAgICAiIiIKLSAgICBkZWYgX19pbml0X18oc2VsZiwgcGFyZW50LCB0aXRsZSwgdGV4dCwgbW9kYWw9VHJ1ZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhcmVudCwgdGl0bGUsIHRleHQsIG1vZGFsPVRydWUsIF9odGVzdD1GYWxzZSk6CiAgICAgICAgICIiIlNob3cgdGhlIGdpdmVuIHRleHQgaW4gYSBzY3JvbGxhYmxlIHdpbmRvdyB3aXRoIGEgJ2Nsb3NlJyBidXR0b24KIAorICAgICAgICBJZiBtb2RhbCBvcHRpb24gc2V0IHRvIEZhbHNlLCB1c2VyIGNhbiBpbnRlcmFjdCB3aXRoIG90aGVyIHdpbmRvd3MsCisgICAgICAgIG90aGVyd2lzZSB0aGV5IHdpbGwgYmUgdW5hYmxlIHRvIGludGVyYWN0IHdpdGggb3RoZXIgd2luZG93cyB1bnRpbAorICAgICAgICB0aGUgdGV4dHZpZXcgd2luZG93IGlzIGNsb3NlZC4KKworICAgICAgICBfaHRlc3QgLSBib29sOyBjaGFuZ2UgYm94IGxvY2F0aW9uIHdoZW4gcnVubmluZyBodGVzdC4KICAgICAgICAgIiIiCiAgICAgICAgIFRvcGxldmVsLl9faW5pdF9fKHNlbGYsIHBhcmVudCkKICAgICAgICAgc2VsZi5jb25maWd1cmUoYm9yZGVyd2lkdGg9NSkKLSAgICAgICAgc2VsZi5nZW9tZXRyeSgiPSVkeCVkKyVkKyVkIiAlICg2MjUsIDUwMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQud2luZm9fcm9vdHgoKSArIDEwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudC53aW5mb19yb290eSgpICsgMTApKQorICAgICAgICAjIHBsYWNlIGRpYWxvZyBiZWxvdyBwYXJlbnQgaWYgcnVubmluZyBodGVzdAorICAgICAgICBzZWxmLmdlb21ldHJ5KCI9JWR4JWQrJWQrJWQiICUgKDc1MCwgNTAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50LndpbmZvX3Jvb3R4KCkgKyAxMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudC53aW5mb19yb290eSgpICsgKDEwIGlmIG5vdCBfaHRlc3QgZWxzZSAxMDApKSkKICAgICAgICAgI2VsZ3VhdmFzIC0gY29uZmlnIHBsYWNlaG9sZGVycyB0aWwgY29uZmlnIHN0dWZmIGNvbXBsZXRlZAogICAgICAgICBzZWxmLmJnID0gJyNmZmZmZmYnCiAgICAgICAgIHNlbGYuZmcgPSAnIzAwMDAwMCcKQEAgLTY2LDMyICs3MiwxNSBAQAogICAgIHRyeToKICAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAncicsIGVuY29kaW5nPWVuY29kaW5nKSBhcyBmaWxlOgogICAgICAgICAgICAgY29udGVudHMgPSBmaWxlLnJlYWQoKQotICAgIGV4Y2VwdCBPU0Vycm9yOgotICAgICAgICBpbXBvcnQgdGtpbnRlci5tZXNzYWdlYm94IGFzIHRrTWVzc2FnZUJveAorICAgIGV4Y2VwdCBJT0Vycm9yOgogICAgICAgICB0a01lc3NhZ2VCb3guc2hvd2Vycm9yKHRpdGxlPSdGaWxlIExvYWQgRXJyb3InLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U9J1VuYWJsZSB0byBsb2FkIGZpbGUgJXIgLicgJSBmaWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQ9cGFyZW50KQogICAgIGVsc2U6CiAgICAgICAgIHJldHVybiB2aWV3X3RleHQocGFyZW50LCB0aXRsZSwgY29udGVudHMsIG1vZGFsKQogCi0KIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgI3Rlc3QgdGhlIGRpYWxvZwotICAgIHJvb3Q9VGsoKQotICAgIHJvb3QudGl0bGUoJ3RleHRWaWV3IHRlc3QnKQotICAgIGZpbGVuYW1lID0gJy4vdGV4dFZpZXcucHknCi0gICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAncicpIGFzIGY6Ci0gICAgICAgIHRleHQgPSBmLnJlYWQoKQotICAgIGJ0bjEgPSBCdXR0b24ocm9vdCwgdGV4dD0ndmlld190ZXh0JywKLSAgICAgICAgICAgICAgICAgIGNvbW1hbmQ9bGFtYmRhOnZpZXdfdGV4dChyb290LCAndmlld190ZXh0JywgdGV4dCkpCi0gICAgYnRuMS5wYWNrKHNpZGU9TEVGVCkKLSAgICBidG4yID0gQnV0dG9uKHJvb3QsIHRleHQ9J3ZpZXdfZmlsZScsCi0gICAgICAgICAgICAgICAgICBjb21tYW5kPWxhbWJkYTp2aWV3X2ZpbGUocm9vdCwgJ3ZpZXdfZmlsZScsIGZpbGVuYW1lKSkKLSAgICBidG4yLnBhY2soc2lkZT1MRUZUKQotICAgIGJ0bjMgPSBCdXR0b24ocm9vdCwgdGV4dD0nbm9ubW9kYWwgdmlld190ZXh0JywKLSAgICAgICAgICAgICAgICAgIGNvbW1hbmQ9bGFtYmRhOnZpZXdfdGV4dChyb290LCAnbm9ubW9kYWwgdmlld190ZXh0JywgdGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RhbD1GYWxzZSkpCi0gICAgYnRuMy5wYWNrKHNpZGU9TEVGVCkKLSAgICBjbG9zZSA9IEJ1dHRvbihyb290LCB0ZXh0PSdDbG9zZScsIGNvbW1hbmQ9cm9vdC5kZXN0cm95KQotICAgIGNsb3NlLnBhY2soc2lkZT1SSUdIVCkKLSAgICByb290Lm1haW5sb29wKCkKKyAgICBpbXBvcnQgdW5pdHRlc3QKKyAgICB1bml0dGVzdC5tYWluKCdpZGxlbGliLmlkbGVfdGVzdC50ZXN0X3RleHR2aWV3JywgdmVyYm9zaXR5PTIsIGV4aXQ9RmFsc2UpCisgICAgZnJvbSBpZGxlbGliLmlkbGVfdGVzdC5odGVzdCBpbXBvcnQgcnVuCisgICAgcnVuKFRleHRWaWV3ZXIpCmRpZmYgLS1naXQgYS9MaWIvaW1hcGxpYi5weSBiL0xpYi9pbWFwbGliLnB5CmluZGV4IGFkNWY0ZTkuLmViMDVkY2IgMTAwNjQ0Ci0tLSBhL0xpYi9pbWFwbGliLnB5CisrKyBiL0xpYi9pbWFwbGliLnB5CkBAIC00NSwxMSArNDUsMTIgQEAKIAogIyBNYXhpbWFsIGxpbmUgbGVuZ3RoIHdoZW4gY2FsbGluZyByZWFkbGluZSgpLiBUaGlzIGlzIHRvIHByZXZlbnQKICMgcmVhZGluZyBhcmJpdHJhcnkgbGVuZ3RoIGxpbmVzLiBSRkMgMzUwMSBhbmQgMjA2MCAoSU1BUCA0cmV2MSkKLSMgZG9uJ3Qgc3BlY2lmeSBhIGxpbmUgbGVuZ3RoLiBSRkMgMjY4MyBob3dldmVyIHN1Z2dlc3RzIGxpbWl0aW5nIGNsaWVudAotIyBjb21tYW5kIGxpbmVzIHRvIDEwMDAgb2N0ZXRzIGFuZCBzZXJ2ZXIgY29tbWFuZCBsaW5lcyB0byA4MDAwIG9jdGV0cy4KLSMgV2UgaGF2ZSBzZWxlY3RlZCAxMDAwMCBmb3Igc29tZSBleHRyYSBtYXJnaW4gYW5kIHNpbmNlIHRoYXQgaXMgc3VwcG9zZWRseQotIyBhbHNvIHdoYXQgVVcgYW5kIFBhbmRhIElNQVAgZG9lcy4KLV9NQVhMSU5FID0gMTAwMDAKKyMgZG9uJ3Qgc3BlY2lmeSBhIGxpbmUgbGVuZ3RoLiBSRkMgMjY4MyBzdWdnZXN0cyBsaW1pdGluZyBjbGllbnQKKyMgY29tbWFuZCBsaW5lcyB0byAxMDAwIG9jdGV0cyBhbmQgdGhhdCBzZXJ2ZXJzIHNob3VsZCBiZSBwcmVwYXJlZAorIyB0byBhY2NlcHQgY29tbWFuZCBsaW5lcyB1cCB0byA4MDAwIG9jdGV0cywgc28gd2UgdXNlZCB0byB1c2UgMTBLIGhlcmUuCisjIEluIHRoZSBtb2Rlcm4gd29ybGQgKGVnOiBnbWFpbCkgdGhlIHJlc3BvbnNlIHRvLCBmb3IgZXhhbXBsZSwgYQorIyBzZWFyY2ggY29tbWFuZCBjYW4gYmUgcXVpdGUgbGFyZ2UsIHNvIHdlIG5vdyB1c2UgMU0uCitfTUFYTElORSA9IDEwMDAwMDAKIAogCiAjICAgICAgIENvbW1hbmRzCkBAIC0xODUsNyArMTg2LDcgQEAKICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzZWxmLnNodXRkb3duKCkKLSAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICByYWlzZQogCkBAIC0yODEsNyArMjgyLDcgQEAKICAgICAgICAgc2VsZi5maWxlLmNsb3NlKCkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5zb2NrLnNodXRkb3duKHNvY2tldC5TSFVUX1JEV1IpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgICMgVGhlIHNlcnZlciBtaWdodCBhbHJlYWR5IGhhdmUgY2xvc2VkIHRoZSBjb25uZWN0aW9uCiAgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVOT1RDT05OOgogICAgICAgICAgICAgICAgIHJhaXNlCkBAIC01NTQsNyArNTU1LDcgQEAKICAgICAgICAgaW1wb3J0IGhtYWMKICAgICAgICAgcHdkID0gKHNlbGYucGFzc3dvcmQuZW5jb2RlKCdBU0NJSScpIGlmIGlzaW5zdGFuY2Uoc2VsZi5wYXNzd29yZCwgc3RyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBzZWxmLnBhc3N3b3JkKQotICAgICAgICByZXR1cm4gc2VsZi51c2VyICsgIiAiICsgaG1hYy5ITUFDKHB3ZCwgY2hhbGxlbmdlKS5oZXhkaWdlc3QoKQorICAgICAgICByZXR1cm4gc2VsZi51c2VyICsgIiAiICsgaG1hYy5ITUFDKHB3ZCwgY2hhbGxlbmdlLCAnbWQ1JykuaGV4ZGlnZXN0KCkKIAogCiAgICAgZGVmIGxvZ291dChzZWxmKToKQEAgLTc0MiwxMiArNzQzLDExIEBACiAgICAgICAgICAgICByYWlzZSBzZWxmLmFib3J0KCdUTFMgbm90IHN1cHBvcnRlZCBieSBzZXJ2ZXInKQogICAgICAgICAjIEdlbmVyYXRlIGEgZGVmYXVsdCBTU0wgY29udGV4dCBpZiBub25lIHdhcyBwYXNzZWQuCiAgICAgICAgIGlmIHNzbF9jb250ZXh0IGlzIE5vbmU6Ci0gICAgICAgICAgICBzc2xfY29udGV4dCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9TU0x2MjMpCi0gICAgICAgICAgICAjIFNTTHYyIGNvbnNpZGVyZWQgaGFybWZ1bC4KLSAgICAgICAgICAgIHNzbF9jb250ZXh0Lm9wdGlvbnMgfD0gc3NsLk9QX05PX1NTTHYyCisgICAgICAgICAgICBzc2xfY29udGV4dCA9IHNzbC5fY3JlYXRlX3N0ZGxpYl9jb250ZXh0KCkKICAgICAgICAgdHlwLCBkYXQgPSBzZWxmLl9zaW1wbGVfY29tbWFuZChuYW1lKQogICAgICAgICBpZiB0eXAgPT0gJ09LJzoKLSAgICAgICAgICAgIHNlbGYuc29jayA9IHNzbF9jb250ZXh0LndyYXBfc29ja2V0KHNlbGYuc29jaykKKyAgICAgICAgICAgIHNlbGYuc29jayA9IHNzbF9jb250ZXh0LndyYXBfc29ja2V0KHNlbGYuc29jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9ob3N0bmFtZT1zZWxmLmhvc3QpCiAgICAgICAgICAgICBzZWxmLmZpbGUgPSBzZWxmLnNvY2subWFrZWZpbGUoJ3JiJykKICAgICAgICAgICAgIHNlbGYuX3Rsc19lc3RhYmxpc2hlZCA9IFRydWUKICAgICAgICAgICAgIHNlbGYuX2dldF9jYXBhYmlsaXRpZXMoKQpAQCAtOTE1LDcgKzkxNSw3IEBACiAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5zZW5kKGRhdGEgKyBDUkxGKQotICAgICAgICBleGNlcHQgKHNvY2tldC5lcnJvciwgT1NFcnJvcikgYXMgdmFsOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyB2YWw6CiAgICAgICAgICAgICByYWlzZSBzZWxmLmFib3J0KCdzb2NrZXQgZXJyb3I6ICVzJyAlIHZhbCkKIAogICAgICAgICBpZiBsaXRlcmFsIGlzIE5vbmU6CkBAIC05NDAsNyArOTQwLDcgQEAKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzZWxmLnNlbmQobGl0ZXJhbCkKICAgICAgICAgICAgICAgICBzZWxmLnNlbmQoQ1JMRikKLSAgICAgICAgICAgIGV4Y2VwdCAoc29ja2V0LmVycm9yLCBPU0Vycm9yKSBhcyB2YWw6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyB2YWw6CiAgICAgICAgICAgICAgICAgcmFpc2Ugc2VsZi5hYm9ydCgnc29ja2V0IGVycm9yOiAlcycgJSB2YWwpCiAKICAgICAgICAgICAgIGlmIG5vdCBsaXRlcmF0b3I6CkBAIC0xMDkwLDcgKzEwOTAsNyBAQAogCiAgICAgICAgICMgUHJvdG9jb2wgbWFuZGF0ZXMgYWxsIGxpbmVzIHRlcm1pbmF0ZWQgYnkgQ1JMRgogICAgICAgICBpZiBub3QgbGluZS5lbmRzd2l0aChiJ1xyXG4nKToKLSAgICAgICAgICAgIHJhaXNlIHNlbGYuYWJvcnQoJ3NvY2tldCBlcnJvcjogdW50ZXJtaW5hdGVkIGxpbmUnKQorICAgICAgICAgICAgcmFpc2Ugc2VsZi5hYm9ydCgnc29ja2V0IGVycm9yOiB1bnRlcm1pbmF0ZWQgbGluZTogJXInICUgbGluZSkKIAogICAgICAgICBsaW5lID0gbGluZVs6LTJdCiAgICAgICAgIGlmIF9fZGVidWdfXzoKQEAgLTEyMTUsMTUgKzEyMTUsMTYgQEAKIAogICAgICAgICAgICAgc2VsZi5rZXlmaWxlID0ga2V5ZmlsZQogICAgICAgICAgICAgc2VsZi5jZXJ0ZmlsZSA9IGNlcnRmaWxlCisgICAgICAgICAgICBpZiBzc2xfY29udGV4dCBpcyBOb25lOgorICAgICAgICAgICAgICAgIHNzbF9jb250ZXh0ID0gc3NsLl9jcmVhdGVfc3RkbGliX2NvbnRleHQoY2VydGZpbGU9Y2VydGZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlmaWxlPWtleWZpbGUpCiAgICAgICAgICAgICBzZWxmLnNzbF9jb250ZXh0ID0gc3NsX2NvbnRleHQKICAgICAgICAgICAgIElNQVA0Ll9faW5pdF9fKHNlbGYsIGhvc3QsIHBvcnQpCiAKICAgICAgICAgZGVmIF9jcmVhdGVfc29ja2V0KHNlbGYpOgogICAgICAgICAgICAgc29jayA9IElNQVA0Ll9jcmVhdGVfc29ja2V0KHNlbGYpCi0gICAgICAgICAgICBpZiBzZWxmLnNzbF9jb250ZXh0OgotICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnNzbF9jb250ZXh0LndyYXBfc29ja2V0KHNvY2spCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVybiBzc2wud3JhcF9zb2NrZXQoc29jaywgc2VsZi5rZXlmaWxlLCBzZWxmLmNlcnRmaWxlKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuc3NsX2NvbnRleHQud3JhcF9zb2NrZXQoc29jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9ob3N0bmFtZT1zZWxmLmhvc3QpCiAKICAgICAgICAgZGVmIG9wZW4oc2VsZiwgaG9zdD0nJywgcG9ydD1JTUFQNF9TU0xfUE9SVCk6CiAgICAgICAgICAgICAiIiJTZXR1cCBjb25uZWN0aW9uIHRvIHJlbW90ZSBzZXJ2ZXIgb24gImhvc3Q6cG9ydCIuCkBAIC0xMzA1LDcgKzEzMDYsNyBAQAogICAgIGRlZiBwcm9jZXNzKHNlbGYsIGRhdGEpOgogICAgICAgICByZXQgPSBzZWxmLm1lY2goc2VsZi5kZWNvZGUoZGF0YSkpCiAgICAgICAgIGlmIHJldCBpcyBOb25lOgotICAgICAgICAgICAgcmV0dXJuICcqJyAgICAgICMgQWJvcnQgY29udmVyc2F0aW9uCisgICAgICAgICAgICByZXR1cm4gYicqJyAgICAgIyBBYm9ydCBjb252ZXJzYXRpb24KICAgICAgICAgcmV0dXJuIHNlbGYuZW5jb2RlKHJldCkKIAogICAgIGRlZiBlbmNvZGUoc2VsZiwgaW5wKToKZGlmZiAtLWdpdCBhL0xpYi9pbWdoZHIucHkgYi9MaWIvaW1naGRyLnB5CmluZGV4IGJkZDQ3ZWUuLmFkZDJlYTggMTAwNjQ0Ci0tLSBhL0xpYi9pbWdoZHIucHkKKysrIGIvTGliL2ltZ2hkci5weQpAQCAtMTQ3LDcgKzE0Nyw3IEBACiAgICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBwcmludCh3aGF0KGZpbGVuYW1lKSkKLSAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgcHJpbnQoJyoqKiBub3QgZm91bmQgKioqJykKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKZGlmZiAtLWdpdCBhL0xpYi9pbXAucHkgYi9MaWIvaW1wLnB5CmluZGV4IDQwODgzODMuLmM5MjJlOTIgMTAwNjQ0Ci0tLSBhL0xpYi9pbXAucHkKKysrIGIvTGliL2ltcC5weQpAQCAtMTYsMTggKzE2LDIwIEBACiAgICAgIyBQbGF0Zm9ybSBkb2Vzbid0IHN1cHBvcnQgZHluYW1pYyBsb2FkaW5nLgogICAgIGxvYWRfZHluYW1pYyA9IE5vbmUKIAotIyBEaXJlY3RseSBleHBvc2VkIGJ5IHRoaXMgbW9kdWxlCi1mcm9tIGltcG9ydGxpYi5fYm9vdHN0cmFwIGltcG9ydCBuZXdfbW9kdWxlCi1mcm9tIGltcG9ydGxpYi5fYm9vdHN0cmFwIGltcG9ydCBjYWNoZV9mcm9tX3NvdXJjZSwgc291cmNlX2Zyb21fY2FjaGUKK2Zyb20gaW1wb3J0bGliLl9ib290c3RyYXAgaW1wb3J0IFNvdXJjZWxlc3NGaWxlTG9hZGVyLCBfRVJSX01TRywgX1NwZWNNZXRob2RzCiAKLQotZnJvbSBpbXBvcnRsaWIgaW1wb3J0IF9ib290c3RyYXAKIGZyb20gaW1wb3J0bGliIGltcG9ydCBtYWNoaW5lcnkKK2Zyb20gaW1wb3J0bGliIGltcG9ydCB1dGlsCitpbXBvcnQgaW1wb3J0bGliCiBpbXBvcnQgb3MKIGltcG9ydCBzeXMKIGltcG9ydCB0b2tlbml6ZQoraW1wb3J0IHR5cGVzCiBpbXBvcnQgd2FybmluZ3MKIAord2FybmluZ3Mud2FybigidGhlIGltcCBtb2R1bGUgaXMgZGVwcmVjYXRlZCBpbiBmYXZvdXIgb2YgaW1wb3J0bGliOyAiCisgICAgICAgICAgICAgICJzZWUgdGhlIG1vZHVsZSdzIGRvY3VtZW50YXRpb24gZm9yIGFsdGVybmF0aXZlIHVzZXMiLAorICAgICAgICAgICAgICBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nKQogCiAjIERFUFJFQ0FURUQKIFNFQVJDSF9FUlJPUiA9IDAKQEAgLTQyLDkgKzQ0LDIzIEBACiBJTVBfSE9PSyA9IDkKIAogCitkZWYgbmV3X21vZHVsZShuYW1lKToKKyAgICAiIiIqKkRFUFJFQ0FURUQqKgorCisgICAgQ3JlYXRlIGEgbmV3IG1vZHVsZS4KKworICAgIFRoZSBtb2R1bGUgaXMgbm90IGVudGVyZWQgaW50byBzeXMubW9kdWxlcy4KKworICAgICIiIgorICAgIHJldHVybiB0eXBlcy5Nb2R1bGVUeXBlKG5hbWUpCisKKwogZGVmIGdldF9tYWdpYygpOgotICAgICIiIlJldHVybiB0aGUgbWFnaWMgbnVtYmVyIGZvciAucHljIG9yIC5weW8gZmlsZXMuIiIiCi0gICAgcmV0dXJuIF9ib290c3RyYXAuX01BR0lDX0JZVEVTCisgICAgIiIiKipERVBSRUNBVEVEKioKKworICAgIFJldHVybiB0aGUgbWFnaWMgbnVtYmVyIGZvciAucHljIG9yIC5weW8gZmlsZXMuCisgICAgIiIiCisgICAgcmV0dXJuIHV0aWwuTUFHSUNfTlVNQkVSCiAKIAogZGVmIGdldF90YWcoKToKQEAgLTUyLDEyICs2OCw0MiBAQAogICAgIHJldHVybiBzeXMuaW1wbGVtZW50YXRpb24uY2FjaGVfdGFnCiAKIAorZGVmIGNhY2hlX2Zyb21fc291cmNlKHBhdGgsIGRlYnVnX292ZXJyaWRlPU5vbmUpOgorICAgICIiIioqREVQUkVDQVRFRCoqCisKKyAgICBHaXZlbiB0aGUgcGF0aCB0byBhIC5weSBmaWxlLCByZXR1cm4gdGhlIHBhdGggdG8gaXRzIC5weWMvLnB5byBmaWxlLgorCisgICAgVGhlIC5weSBmaWxlIGRvZXMgbm90IG5lZWQgdG8gZXhpc3Q7IHRoaXMgc2ltcGx5IHJldHVybnMgdGhlIHBhdGggdG8gdGhlCisgICAgLnB5Yy8ucHlvIGZpbGUgY2FsY3VsYXRlZCBhcyBpZiB0aGUgLnB5IGZpbGUgd2VyZSBpbXBvcnRlZC4gIFRoZSBleHRlbnNpb24KKyAgICB3aWxsIGJlIC5weWMgdW5sZXNzIHN5cy5mbGFncy5vcHRpbWl6ZSBpcyBub24temVybywgdGhlbiBpdCB3aWxsIGJlIC5weW8uCisKKyAgICBJZiBkZWJ1Z19vdmVycmlkZSBpcyBub3QgTm9uZSwgdGhlbiBpdCBtdXN0IGJlIGEgYm9vbGVhbiBhbmQgaXMgdXNlZCBpbgorICAgIHBsYWNlIG9mIHN5cy5mbGFncy5vcHRpbWl6ZS4KKworICAgIElmIHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWcgaXMgTm9uZSB0aGVuIE5vdEltcGxlbWVudGVkRXJyb3IgaXMgcmFpc2VkLgorCisgICAgIiIiCisgICAgcmV0dXJuIHV0aWwuY2FjaGVfZnJvbV9zb3VyY2UocGF0aCwgZGVidWdfb3ZlcnJpZGUpCisKKworZGVmIHNvdXJjZV9mcm9tX2NhY2hlKHBhdGgpOgorICAgICIiIioqREVQUkVDQVRFRCoqCisKKyAgICBHaXZlbiB0aGUgcGF0aCB0byBhIC5weWMuLy5weW8gZmlsZSwgcmV0dXJuIHRoZSBwYXRoIHRvIGl0cyAucHkgZmlsZS4KKworICAgIFRoZSAucHljLy5weW8gZmlsZSBkb2VzIG5vdCBuZWVkIHRvIGV4aXN0OyB0aGlzIHNpbXBseSByZXR1cm5zIHRoZSBwYXRoIHRvCisgICAgdGhlIC5weSBmaWxlIGNhbGN1bGF0ZWQgdG8gY29ycmVzcG9uZCB0byB0aGUgLnB5Yy8ucHlvIGZpbGUuICBJZiBwYXRoIGRvZXMKKyAgICBub3QgY29uZm9ybSB0byBQRVAgMzE0NyBmb3JtYXQsIFZhbHVlRXJyb3Igd2lsbCBiZSByYWlzZWQuIElmCisgICAgc3lzLmltcGxlbWVudGF0aW9uLmNhY2hlX3RhZyBpcyBOb25lIHRoZW4gTm90SW1wbGVtZW50ZWRFcnJvciBpcyByYWlzZWQuCisKKyAgICAiIiIKKyAgICByZXR1cm4gdXRpbC5zb3VyY2VfZnJvbV9jYWNoZShwYXRoKQorCisKIGRlZiBnZXRfc3VmZml4ZXMoKToKLSAgICB3YXJuaW5ncy53YXJuKCdpbXAuZ2V0X3N1ZmZpeGVzKCkgaXMgZGVwcmVjYXRlZDsgdXNlIHRoZSBjb25zdGFudHMgJwotICAgICAgICAgICAgICAgICAgJ2RlZmluZWQgb24gaW1wb3J0bGliLm1hY2hpbmVyeSBpbnN0ZWFkJywKLSAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgMikKKyAgICAiIiIqKkRFUFJFQ0FURUQqKiIiIgogICAgIGV4dGVuc2lvbnMgPSBbKHMsICdyYicsIENfRVhURU5TSU9OKSBmb3IgcyBpbiBtYWNoaW5lcnkuRVhURU5TSU9OX1NVRkZJWEVTXQotICAgIHNvdXJjZSA9IFsocywgJ1UnLCBQWV9TT1VSQ0UpIGZvciBzIGluIG1hY2hpbmVyeS5TT1VSQ0VfU1VGRklYRVNdCisgICAgc291cmNlID0gWyhzLCAncicsIFBZX1NPVVJDRSkgZm9yIHMgaW4gbWFjaGluZXJ5LlNPVVJDRV9TVUZGSVhFU10KICAgICBieXRlY29kZSA9IFsocywgJ3JiJywgUFlfQ09NUElMRUQpIGZvciBzIGluIG1hY2hpbmVyeS5CWVRFQ09ERV9TVUZGSVhFU10KIAogICAgIHJldHVybiBleHRlbnNpb25zICsgc291cmNlICsgYnl0ZWNvZGUKQEAgLTY1LDcgKzExMSwxMSBAQAogCiBjbGFzcyBOdWxsSW1wb3J0ZXI6CiAKLSAgICAiIiJOdWxsIGltcG9ydCBvYmplY3QuIiIiCisgICAgIiIiKipERVBSRUNBVEVEKioKKworICAgIE51bGwgaW1wb3J0IG9iamVjdC4KKworICAgICIiIgogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGgpOgogICAgICAgICBpZiBwYXRoID09ICcnOgpAQCAtODAsNyArMTMwLDcgQEAKIAogY2xhc3MgX0hhY2tlZEdldERhdGE6CiAKLSAgICAiIiJDb21wYXRpYmlpbHR5IHN1cHBvcnQgZm9yICdmaWxlJyBhcmd1bWVudHMgb2YgdmFyaW91cyBsb2FkXyooKQorICAgICIiIkNvbXBhdGliaWxpdHkgc3VwcG9ydCBmb3IgJ2ZpbGUnIGFyZ3VtZW50cyBvZiB2YXJpb3VzIGxvYWRfKigpCiAgICAgZnVuY3Rpb25zLiIiIgogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZ1bGxuYW1lLCBwYXRoLCBmaWxlPU5vbmUpOgpAQCAtMTA2LDQ4ICsxNTYsNDkgQEAKICAgICAgICAgICAgIHJldHVybiBzdXBlcigpLmdldF9kYXRhKHBhdGgpCiAKIAotY2xhc3MgX0xvYWRTb3VyY2VDb21wYXRpYmlsaXR5KF9IYWNrZWRHZXREYXRhLCBfYm9vdHN0cmFwLlNvdXJjZUZpbGVMb2FkZXIpOgorY2xhc3MgX0xvYWRTb3VyY2VDb21wYXRpYmlsaXR5KF9IYWNrZWRHZXREYXRhLCBtYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcik6CiAKICAgICAiIiJDb21wYXRpYmlsaXR5IHN1cHBvcnQgZm9yIGltcGxlbWVudGluZyBsb2FkX3NvdXJjZSgpLiIiIgogCiAKIGRlZiBsb2FkX3NvdXJjZShuYW1lLCBwYXRobmFtZSwgZmlsZT1Ob25lKToKLSAgICBtc2cgPSAoJ2ltcC5sb2FkX3NvdXJjZSgpIGlzIGRlcHJlY2F0ZWQ7IHVzZSAnCi0gICAgICAgICAgICdpbXBvcnRsaWIubWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIobmFtZSwgcGF0aG5hbWUpLmxvYWRfbW9kdWxlKCknCi0gICAgICAgICAgICcgaW5zdGVhZCcpCi0gICAgd2FybmluZ3Mud2Fybihtc2csIERlcHJlY2F0aW9uV2FybmluZywgMikKLSAgICBfTG9hZFNvdXJjZUNvbXBhdGliaWxpdHkobmFtZSwgcGF0aG5hbWUsIGZpbGUpLmxvYWRfbW9kdWxlKG5hbWUpCi0gICAgbW9kdWxlID0gc3lzLm1vZHVsZXNbbmFtZV0KKyAgICBsb2FkZXIgPSBfTG9hZFNvdXJjZUNvbXBhdGliaWxpdHkobmFtZSwgcGF0aG5hbWUsIGZpbGUpCisgICAgc3BlYyA9IHV0aWwuc3BlY19mcm9tX2ZpbGVfbG9jYXRpb24obmFtZSwgcGF0aG5hbWUsIGxvYWRlcj1sb2FkZXIpCisgICAgbWV0aG9kcyA9IF9TcGVjTWV0aG9kcyhzcGVjKQorICAgIGlmIG5hbWUgaW4gc3lzLm1vZHVsZXM6CisgICAgICAgIG1vZHVsZSA9IG1ldGhvZHMuZXhlYyhzeXMubW9kdWxlc1tuYW1lXSkKKyAgICBlbHNlOgorICAgICAgICBtb2R1bGUgPSBtZXRob2RzLmxvYWQoKQogICAgICMgVG8gYWxsb3cgcmVsb2FkaW5nIHRvIHBvdGVudGlhbGx5IHdvcmssIHVzZSBhIG5vbi1oYWNrZWQgbG9hZGVyIHdoaWNoCiAgICAgIyB3b24ndCByZWx5IG9uIGEgbm93LWNsb3NlZCBmaWxlIG9iamVjdC4KLSAgICBtb2R1bGUuX19sb2FkZXJfXyA9IF9ib290c3RyYXAuU291cmNlRmlsZUxvYWRlcihuYW1lLCBwYXRobmFtZSkKKyAgICBtb2R1bGUuX19sb2FkZXJfXyA9IG1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyKG5hbWUsIHBhdGhuYW1lKQorICAgIG1vZHVsZS5fX3NwZWNfXy5sb2FkZXIgPSBtb2R1bGUuX19sb2FkZXJfXwogICAgIHJldHVybiBtb2R1bGUKIAogCi1jbGFzcyBfTG9hZENvbXBpbGVkQ29tcGF0aWJpbGl0eShfSGFja2VkR2V0RGF0YSwKLSAgICAgICAgX2Jvb3RzdHJhcC5Tb3VyY2VsZXNzRmlsZUxvYWRlcik6CitjbGFzcyBfTG9hZENvbXBpbGVkQ29tcGF0aWJpbGl0eShfSGFja2VkR2V0RGF0YSwgU291cmNlbGVzc0ZpbGVMb2FkZXIpOgogCiAgICAgIiIiQ29tcGF0aWJpbGl0eSBzdXBwb3J0IGZvciBpbXBsZW1lbnRpbmcgbG9hZF9jb21waWxlZCgpLiIiIgogCiAKIGRlZiBsb2FkX2NvbXBpbGVkKG5hbWUsIHBhdGhuYW1lLCBmaWxlPU5vbmUpOgotICAgIG1zZyA9ICgnaW1wLmxvYWRfY29tcGlsZWQoKSBpcyBkZXByZWNhdGVkOyB1c2UgJwotICAgICAgICAgICAnaW1wb3J0bGliLm1hY2hpbmVyeS5Tb3VyY2VsZXNzRmlsZUxvYWRlcihuYW1lLCBwYXRobmFtZSkuJwotICAgICAgICAgICAnbG9hZF9tb2R1bGUoKSBpbnN0ZWFkICcpCi0gICAgd2FybmluZ3Mud2Fybihtc2csIERlcHJlY2F0aW9uV2FybmluZywgMikKLSAgICBfTG9hZENvbXBpbGVkQ29tcGF0aWJpbGl0eShuYW1lLCBwYXRobmFtZSwgZmlsZSkubG9hZF9tb2R1bGUobmFtZSkKLSAgICBtb2R1bGUgPSBzeXMubW9kdWxlc1tuYW1lXQorICAgICIiIioqREVQUkVDQVRFRCoqIiIiCisgICAgbG9hZGVyID0gX0xvYWRDb21waWxlZENvbXBhdGliaWxpdHkobmFtZSwgcGF0aG5hbWUsIGZpbGUpCisgICAgc3BlYyA9IHV0aWwuc3BlY19mcm9tX2ZpbGVfbG9jYXRpb24obmFtZSwgcGF0aG5hbWUsIGxvYWRlcj1sb2FkZXIpCisgICAgbWV0aG9kcyA9IF9TcGVjTWV0aG9kcyhzcGVjKQorICAgIGlmIG5hbWUgaW4gc3lzLm1vZHVsZXM6CisgICAgICAgIG1vZHVsZSA9IG1ldGhvZHMuZXhlYyhzeXMubW9kdWxlc1tuYW1lXSkKKyAgICBlbHNlOgorICAgICAgICBtb2R1bGUgPSBtZXRob2RzLmxvYWQoKQogICAgICMgVG8gYWxsb3cgcmVsb2FkaW5nIHRvIHBvdGVudGlhbGx5IHdvcmssIHVzZSBhIG5vbi1oYWNrZWQgbG9hZGVyIHdoaWNoCiAgICAgIyB3b24ndCByZWx5IG9uIGEgbm93LWNsb3NlZCBmaWxlIG9iamVjdC4KLSAgICBtb2R1bGUuX19sb2FkZXJfXyA9IF9ib290c3RyYXAuU291cmNlbGVzc0ZpbGVMb2FkZXIobmFtZSwgcGF0aG5hbWUpCisgICAgbW9kdWxlLl9fbG9hZGVyX18gPSBTb3VyY2VsZXNzRmlsZUxvYWRlcihuYW1lLCBwYXRobmFtZSkKKyAgICBtb2R1bGUuX19zcGVjX18ubG9hZGVyID0gbW9kdWxlLl9fbG9hZGVyX18KICAgICByZXR1cm4gbW9kdWxlCiAKIAogZGVmIGxvYWRfcGFja2FnZShuYW1lLCBwYXRoKToKLSAgICBtc2cgPSAoJ2ltcC5sb2FkX3BhY2thZ2UoKSBpcyBkZXByZWNhdGVkOyB1c2UgZWl0aGVyICcKLSAgICAgICAgICAgJ2ltcG9ydGxpYi5tYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcigpIG9yICcKLSAgICAgICAgICAgJ2ltcG9ydGxpYi5tYWNoaW5lcnkuU291cmNlbGVzc0ZpbGVMb2FkZXIoKSBpbnN0ZWFkJykKLSAgICB3YXJuaW5ncy53YXJuKG1zZywgRGVwcmVjYXRpb25XYXJuaW5nLCAyKQorICAgICIiIioqREVQUkVDQVRFRCoqIiIiCiAgICAgaWYgb3MucGF0aC5pc2RpcihwYXRoKToKICAgICAgICAgZXh0ZW5zaW9ucyA9IChtYWNoaW5lcnkuU09VUkNFX1NVRkZJWEVTWzpdICsKICAgICAgICAgICAgICAgICAgICAgICBtYWNoaW5lcnkuQllURUNPREVfU1VGRklYRVNbOl0pCkBAIC0xNTcsNyArMjA4LDEzIEBACiAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3shcn0gaXMgbm90IGEgcGFja2FnZScuZm9ybWF0KHBhdGgpKQotICAgIHJldHVybiBfYm9vdHN0cmFwLlNvdXJjZUZpbGVMb2FkZXIobmFtZSwgcGF0aCkubG9hZF9tb2R1bGUobmFtZSkKKyAgICBzcGVjID0gdXRpbC5zcGVjX2Zyb21fZmlsZV9sb2NhdGlvbihuYW1lLCBwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zPVtdKQorICAgIG1ldGhvZHMgPSBfU3BlY01ldGhvZHMoc3BlYykKKyAgICBpZiBuYW1lIGluIHN5cy5tb2R1bGVzOgorICAgICAgICByZXR1cm4gbWV0aG9kcy5leGVjKHN5cy5tb2R1bGVzW25hbWVdKQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBtZXRob2RzLmxvYWQoKQogCiAKIGRlZiBsb2FkX21vZHVsZShuYW1lLCBmaWxlLCBmaWxlbmFtZSwgZGV0YWlscyk6CkBAIC0xNjksMzIgKzIyNiwzMCBAQAogCiAgICAgIiIiCiAgICAgc3VmZml4LCBtb2RlLCB0eXBlXyA9IGRldGFpbHMKLSAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6Ci0gICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignaWdub3JlJykKLSAgICAgICAgaWYgbW9kZSBhbmQgKG5vdCBtb2RlLnN0YXJ0c3dpdGgoKCdyJywgJ1UnKSkgb3IgJysnIGluIG1vZGUpOgotICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignaW52YWxpZCBmaWxlIG9wZW4gbW9kZSB7IXJ9Jy5mb3JtYXQobW9kZSkpCi0gICAgICAgIGVsaWYgZmlsZSBpcyBOb25lIGFuZCB0eXBlXyBpbiB7UFlfU09VUkNFLCBQWV9DT01QSUxFRH06Ci0gICAgICAgICAgICBtc2cgPSAnZmlsZSBvYmplY3QgcmVxdWlyZWQgZm9yIGltcG9ydCAodHlwZSBjb2RlIHt9KScuZm9ybWF0KHR5cGVfKQotICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihtc2cpCi0gICAgICAgIGVsaWYgdHlwZV8gPT0gUFlfU09VUkNFOgotICAgICAgICAgICAgcmV0dXJuIGxvYWRfc291cmNlKG5hbWUsIGZpbGVuYW1lLCBmaWxlKQotICAgICAgICBlbGlmIHR5cGVfID09IFBZX0NPTVBJTEVEOgotICAgICAgICAgICAgcmV0dXJuIGxvYWRfY29tcGlsZWQobmFtZSwgZmlsZW5hbWUsIGZpbGUpCi0gICAgICAgIGVsaWYgdHlwZV8gPT0gQ19FWFRFTlNJT04gYW5kIGxvYWRfZHluYW1pYyBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIGlmIGZpbGUgaXMgTm9uZToKLSAgICAgICAgICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICdyYicpIGFzIG9wZW5lZF9maWxlOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbG9hZF9keW5hbWljKG5hbWUsIGZpbGVuYW1lLCBvcGVuZWRfZmlsZSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGxvYWRfZHluYW1pYyhuYW1lLCBmaWxlbmFtZSwgZmlsZSkKLSAgICAgICAgZWxpZiB0eXBlXyA9PSBQS0dfRElSRUNUT1JZOgotICAgICAgICAgICAgcmV0dXJuIGxvYWRfcGFja2FnZShuYW1lLCBmaWxlbmFtZSkKLSAgICAgICAgZWxpZiB0eXBlXyA9PSBDX0JVSUxUSU46Ci0gICAgICAgICAgICByZXR1cm4gaW5pdF9idWlsdGluKG5hbWUpCi0gICAgICAgIGVsaWYgdHlwZV8gPT0gUFlfRlJPWkVOOgotICAgICAgICAgICAgcmV0dXJuIGluaXRfZnJvemVuKG5hbWUpCisgICAgaWYgbW9kZSBhbmQgKG5vdCBtb2RlLnN0YXJ0c3dpdGgoKCdyJywgJ1UnKSkgb3IgJysnIGluIG1vZGUpOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdpbnZhbGlkIGZpbGUgb3BlbiBtb2RlIHshcn0nLmZvcm1hdChtb2RlKSkKKyAgICBlbGlmIGZpbGUgaXMgTm9uZSBhbmQgdHlwZV8gaW4ge1BZX1NPVVJDRSwgUFlfQ09NUElMRUR9OgorICAgICAgICBtc2cgPSAnZmlsZSBvYmplY3QgcmVxdWlyZWQgZm9yIGltcG9ydCAodHlwZSBjb2RlIHt9KScuZm9ybWF0KHR5cGVfKQorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKG1zZykKKyAgICBlbGlmIHR5cGVfID09IFBZX1NPVVJDRToKKyAgICAgICAgcmV0dXJuIGxvYWRfc291cmNlKG5hbWUsIGZpbGVuYW1lLCBmaWxlKQorICAgIGVsaWYgdHlwZV8gPT0gUFlfQ09NUElMRUQ6CisgICAgICAgIHJldHVybiBsb2FkX2NvbXBpbGVkKG5hbWUsIGZpbGVuYW1lLCBmaWxlKQorICAgIGVsaWYgdHlwZV8gPT0gQ19FWFRFTlNJT04gYW5kIGxvYWRfZHluYW1pYyBpcyBub3QgTm9uZToKKyAgICAgICAgaWYgZmlsZSBpcyBOb25lOgorICAgICAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAncmInKSBhcyBvcGVuZWRfZmlsZToKKyAgICAgICAgICAgICAgICByZXR1cm4gbG9hZF9keW5hbWljKG5hbWUsIGZpbGVuYW1lLCBvcGVuZWRfZmlsZSkKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIG1zZyA9ICAiRG9uJ3Qga25vdyBob3cgdG8gaW1wb3J0IHt9ICh0eXBlIGNvZGUge30pIi5mb3JtYXQobmFtZSwgdHlwZV8pCi0gICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcihtc2csIG5hbWU9bmFtZSkKKyAgICAgICAgICAgIHJldHVybiBsb2FkX2R5bmFtaWMobmFtZSwgZmlsZW5hbWUsIGZpbGUpCisgICAgZWxpZiB0eXBlXyA9PSBQS0dfRElSRUNUT1JZOgorICAgICAgICByZXR1cm4gbG9hZF9wYWNrYWdlKG5hbWUsIGZpbGVuYW1lKQorICAgIGVsaWYgdHlwZV8gPT0gQ19CVUlMVElOOgorICAgICAgICByZXR1cm4gaW5pdF9idWlsdGluKG5hbWUpCisgICAgZWxpZiB0eXBlXyA9PSBQWV9GUk9aRU46CisgICAgICAgIHJldHVybiBpbml0X2Zyb3plbihuYW1lKQorICAgIGVsc2U6CisgICAgICAgIG1zZyA9ICAiRG9uJ3Qga25vdyBob3cgdG8gaW1wb3J0IHt9ICh0eXBlIGNvZGUge30pIi5mb3JtYXQobmFtZSwgdHlwZV8pCisgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKG1zZywgbmFtZT1uYW1lKQogCiAKIGRlZiBmaW5kX21vZHVsZShuYW1lLCBwYXRoPU5vbmUpOgpAQCAtMjMwLDU0ICsyODUsMzEgQEAKICAgICAgICAgICAgIGZpbGVfcGF0aCA9IG9zLnBhdGguam9pbihwYWNrYWdlX2RpcmVjdG9yeSwgcGFja2FnZV9maWxlX25hbWUpCiAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShmaWxlX3BhdGgpOgogICAgICAgICAgICAgICAgIHJldHVybiBOb25lLCBwYWNrYWdlX2RpcmVjdG9yeSwgKCcnLCAnJywgUEtHX0RJUkVDVE9SWSkKLSAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgotICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdpZ25vcmUnKQotICAgICAgICAgICAgZm9yIHN1ZmZpeCwgbW9kZSwgdHlwZV8gaW4gZ2V0X3N1ZmZpeGVzKCk6Ci0gICAgICAgICAgICAgICAgZmlsZV9uYW1lID0gbmFtZSArIHN1ZmZpeAotICAgICAgICAgICAgICAgIGZpbGVfcGF0aCA9IG9zLnBhdGguam9pbihlbnRyeSwgZmlsZV9uYW1lKQotICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGZpbGVfcGF0aCk6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBicmVhayAgIyBCcmVhayBvdXQgb2Ygb3V0ZXIgbG9vcCB3aGVuIGJyZWFraW5nIG91dCBvZiBpbm5lciBsb29wLgorICAgICAgICBmb3Igc3VmZml4LCBtb2RlLCB0eXBlXyBpbiBnZXRfc3VmZml4ZXMoKToKKyAgICAgICAgICAgIGZpbGVfbmFtZSA9IG5hbWUgKyBzdWZmaXgKKyAgICAgICAgICAgIGZpbGVfcGF0aCA9IG9zLnBhdGguam9pbihlbnRyeSwgZmlsZV9uYW1lKQorICAgICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoZmlsZV9wYXRoKToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBlbHNlOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgYnJlYWsgICMgQnJlYWsgb3V0IG9mIG91dGVyIGxvb3Agd2hlbiBicmVha2luZyBvdXQgb2YgaW5uZXIgbG9vcC4KICAgICBlbHNlOgotICAgICAgICByYWlzZSBJbXBvcnRFcnJvcihfYm9vdHN0cmFwLl9FUlJfTVNHLmZvcm1hdChuYW1lKSwgbmFtZT1uYW1lKQorICAgICAgICByYWlzZSBJbXBvcnRFcnJvcihfRVJSX01TRy5mb3JtYXQobmFtZSksIG5hbWU9bmFtZSkKIAogICAgIGVuY29kaW5nID0gTm9uZQotICAgIGlmIG1vZGUgPT0gJ1UnOgorICAgIGlmICdiJyBub3QgaW4gbW9kZToKICAgICAgICAgd2l0aCBvcGVuKGZpbGVfcGF0aCwgJ3JiJykgYXMgZmlsZToKICAgICAgICAgICAgIGVuY29kaW5nID0gdG9rZW5pemUuZGV0ZWN0X2VuY29kaW5nKGZpbGUucmVhZGxpbmUpWzBdCiAgICAgZmlsZSA9IG9wZW4oZmlsZV9wYXRoLCBtb2RlLCBlbmNvZGluZz1lbmNvZGluZykKICAgICByZXR1cm4gZmlsZSwgZmlsZV9wYXRoLCAoc3VmZml4LCBtb2RlLCB0eXBlXykKIAogCi1fUkVMT0FESU5HID0ge30KLQogZGVmIHJlbG9hZChtb2R1bGUpOgotICAgICIiIlJlbG9hZCB0aGUgbW9kdWxlIGFuZCByZXR1cm4gaXQuCisgICAgIiIiKipERVBSRUNBVEVEKioKKworICAgIFJlbG9hZCB0aGUgbW9kdWxlIGFuZCByZXR1cm4gaXQuCiAKICAgICBUaGUgbW9kdWxlIG11c3QgaGF2ZSBiZWVuIHN1Y2Nlc3NmdWxseSBpbXBvcnRlZCBiZWZvcmUuCiAKICAgICAiIiIKLSAgICBpZiBub3QgbW9kdWxlIG9yIHR5cGUobW9kdWxlKSAhPSB0eXBlKHN5cyk6Ci0gICAgICAgIHJhaXNlIFR5cGVFcnJvcigicmVsb2FkKCkgYXJndW1lbnQgbXVzdCBiZSBtb2R1bGUiKQotICAgIG5hbWUgPSBtb2R1bGUuX19uYW1lX18KLSAgICBpZiBuYW1lIG5vdCBpbiBzeXMubW9kdWxlczoKLSAgICAgICAgbXNnID0gIm1vZHVsZSB7fSBub3QgaW4gc3lzLm1vZHVsZXMiCi0gICAgICAgIHJhaXNlIEltcG9ydEVycm9yKG1zZy5mb3JtYXQobmFtZSksIG5hbWU9bmFtZSkKLSAgICBpZiBuYW1lIGluIF9SRUxPQURJTkc6Ci0gICAgICAgIHJldHVybiBfUkVMT0FESU5HW25hbWVdCi0gICAgX1JFTE9BRElOR1tuYW1lXSA9IG1vZHVsZQotICAgIHRyeToKLSAgICAgICAgcGFyZW50X25hbWUgPSBuYW1lLnJwYXJ0aXRpb24oJy4nKVswXQotICAgICAgICBpZiBwYXJlbnRfbmFtZSBhbmQgcGFyZW50X25hbWUgbm90IGluIHN5cy5tb2R1bGVzOgotICAgICAgICAgICAgbXNnID0gInBhcmVudCB7IXJ9IG5vdCBpbiBzeXMubW9kdWxlcyIKLSAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKG1zZy5mb3JtYXQocGFyZW50X25hbWUpLCBuYW1lPXBhcmVudF9uYW1lKQotICAgICAgICBtb2R1bGUuX19sb2FkZXJfXy5sb2FkX21vZHVsZShuYW1lKQotICAgICAgICAjIFRoZSBtb2R1bGUgbWF5IGhhdmUgcmVwbGFjZWQgaXRzZWxmIGluIHN5cy5tb2R1bGVzIQotICAgICAgICByZXR1cm4gc3lzLm1vZHVsZXNbbW9kdWxlLl9fbmFtZV9fXQotICAgIGZpbmFsbHk6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGRlbCBfUkVMT0FESU5HW25hbWVdCi0gICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKKyAgICByZXR1cm4gaW1wb3J0bGliLnJlbG9hZChtb2R1bGUpCmRpZmYgLS1naXQgYS9MaWIvaW1wb3J0bGliL19faW5pdF9fLnB5IGIvTGliL2ltcG9ydGxpYi9fX2luaXRfXy5weQppbmRleCAyMmM5MGYyLi4xYmM5OTQ3IDEwMDY0NAotLS0gYS9MaWIvaW1wb3J0bGliL19faW5pdF9fLnB5CisrKyBiL0xpYi9pbXBvcnRsaWIvX19pbml0X18ucHkKQEAgLTEsNSArMSw1IEBACiAiIiJBIHB1cmUgUHl0aG9uIGltcGxlbWVudGF0aW9uIG9mIGltcG9ydC4iIiIKLV9fYWxsX18gPSBbJ19faW1wb3J0X18nLCAnaW1wb3J0X21vZHVsZScsICdpbnZhbGlkYXRlX2NhY2hlcyddCitfX2FsbF9fID0gWydfX2ltcG9ydF9fJywgJ2ltcG9ydF9tb2R1bGUnLCAnaW52YWxpZGF0ZV9jYWNoZXMnLCAncmVsb2FkJ10KIAogIyBCb290c3RyYXAgaGVscCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCkBAIC0yMiw3ICsyMiwxMiBAQAogICAgICMgYSBzZWNvbmQgY29weSBvZiB0aGUgbW9kdWxlLgogICAgIF9ib290c3RyYXAuX19uYW1lX18gPSAnaW1wb3J0bGliLl9ib290c3RyYXAnCiAgICAgX2Jvb3RzdHJhcC5fX3BhY2thZ2VfXyA9ICdpbXBvcnRsaWInCi0gICAgX2Jvb3RzdHJhcC5fX2ZpbGVfXyA9IF9fZmlsZV9fLnJlcGxhY2UoJ19faW5pdF9fLnB5JywgJ19ib290c3RyYXAucHknKQorICAgIHRyeToKKyAgICAgICAgX2Jvb3RzdHJhcC5fX2ZpbGVfXyA9IF9fZmlsZV9fLnJlcGxhY2UoJ19faW5pdF9fLnB5JywgJ19ib290c3RyYXAucHknKQorICAgIGV4Y2VwdCBOYW1lRXJyb3I6CisgICAgICAgICMgX19maWxlX18gaXMgbm90IGd1YXJhbnRlZWQgdG8gYmUgZGVmaW5lZCwgZS5nLiBpZiB0aGlzIGNvZGUgZ2V0cworICAgICAgICAjIGZyb3plbiBieSBhIHRvb2wgbGlrZSBjeF9GcmVlemUuCisgICAgICAgIHBhc3MKICAgICBzeXMubW9kdWxlc1snaW1wb3J0bGliLl9ib290c3RyYXAnXSA9IF9ib290c3RyYXAKIAogIyBUbyBzaW1wbGlmeSBpbXBvcnRzIGluIHRlc3QgY29kZQpAQCAtMzIsNiArMzcsMTAgQEAKICMgRnVsbHkgYm9vdHN0cmFwcGVkIGF0IHRoaXMgcG9pbnQsIGltcG9ydCB3aGF0ZXZlciB5b3UgbGlrZSwgY2lyY3VsYXIKICMgZGVwZW5kZW5jaWVzIGFuZCBzdGFydHVwIG92ZXJoZWFkIG1pbmltaXNhdGlvbiBwZXJtaXR0aW5nIDopCiAKK2ltcG9ydCB0eXBlcworaW1wb3J0IHdhcm5pbmdzCisKKwogIyBQdWJsaWMgQVBJICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCiBmcm9tIC5fYm9vdHN0cmFwIGltcG9ydCBfX2ltcG9ydF9fCkBAIC00NiwyMCArNTUsMTUgQEAKIAogCiBkZWYgZmluZF9sb2FkZXIobmFtZSwgcGF0aD1Ob25lKToKLSAgICAiIiJGaW5kIHRoZSBsb2FkZXIgZm9yIHRoZSBzcGVjaWZpZWQgbW9kdWxlLgorICAgICIiIlJldHVybiB0aGUgbG9hZGVyIGZvciB0aGUgc3BlY2lmaWVkIG1vZHVsZS4KIAotICAgIEZpcnN0LCBzeXMubW9kdWxlcyBpcyBjaGVja2VkIHRvIHNlZSBpZiB0aGUgbW9kdWxlIHdhcyBhbHJlYWR5IGltcG9ydGVkLiBJZgotICAgIHNvLCB0aGVuIHN5cy5tb2R1bGVzW25hbWVdLl9fbG9hZGVyX18gaXMgcmV0dXJuZWQuIElmIHRoYXQgaGFwcGVucyB0byBiZQotICAgIHNldCB0byBOb25lLCB0aGVuIFZhbHVlRXJyb3IgaXMgcmFpc2VkLiBJZiB0aGUgbW9kdWxlIGlzIG5vdCBpbgotICAgIHN5cy5tb2R1bGVzLCB0aGVuIHN5cy5tZXRhX3BhdGggaXMgc2VhcmNoZWQgZm9yIGEgc3VpdGFibGUgbG9hZGVyIHdpdGggdGhlCi0gICAgdmFsdWUgb2YgJ3BhdGgnIGdpdmVuIHRvIHRoZSBmaW5kZXJzLiBOb25lIGlzIHJldHVybmVkIGlmIG5vIGxvYWRlciBjb3VsZAotICAgIGJlIGZvdW5kLgorICAgIFRoaXMgaXMgYSBiYWNrd2FyZC1jb21wYXRpYmxlIHdyYXBwZXIgYXJvdW5kIGZpbmRfc3BlYygpLgogCi0gICAgRG90dGVkIG5hbWVzIGRvIG5vdCBoYXZlIHRoZWlyIHBhcmVudCBwYWNrYWdlcyBpbXBsaWNpdGx5IGltcG9ydGVkLiBZb3Ugd2lsbAotICAgIG1vc3QgbGlrZWx5IG5lZWQgdG8gZXhwbGljaXRseSBpbXBvcnQgYWxsIHBhcmVudCBwYWNrYWdlcyBpbiB0aGUgcHJvcGVyCi0gICAgb3JkZXIgZm9yIGEgc3VibW9kdWxlIHRvIGdldCB0aGUgY29ycmVjdCBsb2FkZXIuCisgICAgVGhpcyBmdW5jdGlvbiBpcyBkZXByZWNhdGVkIGluIGZhdm9yIG9mIGltcG9ydGxpYi51dGlsLmZpbmRfc3BlYygpLgogCiAgICAgIiIiCisgICAgd2FybmluZ3Mud2FybignVXNlIGltcG9ydGxpYi51dGlsLmZpbmRfc3BlYygpIGluc3RlYWQuJywKKyAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgc3RhY2tsZXZlbD0yKQogICAgIHRyeToKICAgICAgICAgbG9hZGVyID0gc3lzLm1vZHVsZXNbbmFtZV0uX19sb2FkZXJfXwogICAgICAgICBpZiBsb2FkZXIgaXMgTm9uZToKQEAgLTY4LDcgKzcyLDIwIEBACiAgICAgICAgICAgICByZXR1cm4gbG9hZGVyCiAgICAgZXhjZXB0IEtleUVycm9yOgogICAgICAgICBwYXNzCi0gICAgcmV0dXJuIF9ib290c3RyYXAuX2ZpbmRfbW9kdWxlKG5hbWUsIHBhdGgpCisgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCd7fS5fX2xvYWRlcl9fIGlzIG5vdCBzZXQnLmZvcm1hdChuYW1lKSkKKworICAgIHNwZWMgPSBfYm9vdHN0cmFwLl9maW5kX3NwZWMobmFtZSwgcGF0aCkKKyAgICAjIFdlIHdvbid0IHdvcnJ5IGFib3V0IG1hbGZvcm1lZCBzcGVjcyAobWlzc2luZyBhdHRyaWJ1dGVzKS4KKyAgICBpZiBzcGVjIGlzIE5vbmU6CisgICAgICAgIHJldHVybiBOb25lCisgICAgaWYgc3BlYy5sb2FkZXIgaXMgTm9uZToKKyAgICAgICAgaWYgc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucyBpcyBOb25lOgorICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoJ3NwZWMgZm9yIHt9IG1pc3NpbmcgbG9hZGVyJy5mb3JtYXQobmFtZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPW5hbWUpCisgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCduYW1lc3BhY2UgcGFja2FnZXMgZG8gbm90IGhhdmUgbG9hZGVycycsCisgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9bmFtZSkKKyAgICByZXR1cm4gc3BlYy5sb2FkZXIKIAogCiBkZWYgaW1wb3J0X21vZHVsZShuYW1lLCBwYWNrYWdlPU5vbmUpOgpAQCAtODIsOSArOTksNTggQEAKICAgICBsZXZlbCA9IDAKICAgICBpZiBuYW1lLnN0YXJ0c3dpdGgoJy4nKToKICAgICAgICAgaWYgbm90IHBhY2thZ2U6Ci0gICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoInJlbGF0aXZlIGltcG9ydHMgcmVxdWlyZSB0aGUgJ3BhY2thZ2UnIGFyZ3VtZW50IikKKyAgICAgICAgICAgIG1zZyA9ICgidGhlICdwYWNrYWdlJyBhcmd1bWVudCBpcyByZXF1aXJlZCB0byBwZXJmb3JtIGEgcmVsYXRpdmUgIgorICAgICAgICAgICAgICAgICAgICJpbXBvcnQgZm9yIHshcn0iKQorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKG1zZy5mb3JtYXQobmFtZSkpCiAgICAgICAgIGZvciBjaGFyYWN0ZXIgaW4gbmFtZToKICAgICAgICAgICAgIGlmIGNoYXJhY3RlciAhPSAnLic6CiAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgIGxldmVsICs9IDEKICAgICByZXR1cm4gX2Jvb3RzdHJhcC5fZ2NkX2ltcG9ydChuYW1lW2xldmVsOl0sIHBhY2thZ2UsIGxldmVsKQorCisKK19SRUxPQURJTkcgPSB7fQorCisKK2RlZiByZWxvYWQobW9kdWxlKToKKyAgICAiIiJSZWxvYWQgdGhlIG1vZHVsZSBhbmQgcmV0dXJuIGl0LgorCisgICAgVGhlIG1vZHVsZSBtdXN0IGhhdmUgYmVlbiBzdWNjZXNzZnVsbHkgaW1wb3J0ZWQgYmVmb3JlLgorCisgICAgIiIiCisgICAgaWYgbm90IG1vZHVsZSBvciBub3QgaXNpbnN0YW5jZShtb2R1bGUsIHR5cGVzLk1vZHVsZVR5cGUpOgorICAgICAgICByYWlzZSBUeXBlRXJyb3IoInJlbG9hZCgpIGFyZ3VtZW50IG11c3QgYmUgbW9kdWxlIikKKyAgICB0cnk6CisgICAgICAgIG5hbWUgPSBtb2R1bGUuX19zcGVjX18ubmFtZQorICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgbmFtZSA9IG1vZHVsZS5fX25hbWVfXworCisgICAgaWYgc3lzLm1vZHVsZXMuZ2V0KG5hbWUpIGlzIG5vdCBtb2R1bGU6CisgICAgICAgIG1zZyA9ICJtb2R1bGUge30gbm90IGluIHN5cy5tb2R1bGVzIgorICAgICAgICByYWlzZSBJbXBvcnRFcnJvcihtc2cuZm9ybWF0KG5hbWUpLCBuYW1lPW5hbWUpCisgICAgaWYgbmFtZSBpbiBfUkVMT0FESU5HOgorICAgICAgICByZXR1cm4gX1JFTE9BRElOR1tuYW1lXQorICAgIF9SRUxPQURJTkdbbmFtZV0gPSBtb2R1bGUKKyAgICB0cnk6CisgICAgICAgIHBhcmVudF9uYW1lID0gbmFtZS5ycGFydGl0aW9uKCcuJylbMF0KKyAgICAgICAgaWYgcGFyZW50X25hbWU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcGFyZW50ID0gc3lzLm1vZHVsZXNbcGFyZW50X25hbWVdCisgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICAgICAgbXNnID0gInBhcmVudCB7IXJ9IG5vdCBpbiBzeXMubW9kdWxlcyIKKyAgICAgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcihtc2cuZm9ybWF0KHBhcmVudF9uYW1lKSwgbmFtZT1wYXJlbnRfbmFtZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcGtncGF0aCA9IHBhcmVudC5fX3BhdGhfXworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcGtncGF0aCA9IE5vbmUKKyAgICAgICAgdGFyZ2V0ID0gbW9kdWxlCisgICAgICAgIHNwZWMgPSBtb2R1bGUuX19zcGVjX18gPSBfYm9vdHN0cmFwLl9maW5kX3NwZWMobmFtZSwgcGtncGF0aCwgdGFyZ2V0KQorICAgICAgICBtZXRob2RzID0gX2Jvb3RzdHJhcC5fU3BlY01ldGhvZHMoc3BlYykKKyAgICAgICAgbWV0aG9kcy5leGVjKG1vZHVsZSkKKyAgICAgICAgIyBUaGUgbW9kdWxlIG1heSBoYXZlIHJlcGxhY2VkIGl0c2VsZiBpbiBzeXMubW9kdWxlcyEKKyAgICAgICAgcmV0dXJuIHN5cy5tb2R1bGVzW25hbWVdCisgICAgZmluYWxseToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGVsIF9SRUxPQURJTkdbbmFtZV0KKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcGFzcwpkaWZmIC0tZ2l0IGEvTGliL2ltcG9ydGxpYi9fYm9vdHN0cmFwLnB5IGIvTGliL2ltcG9ydGxpYi9fYm9vdHN0cmFwLnB5CmluZGV4IGU0MGVjOTIuLjY0YmJiNDYgMTAwNjQ0Ci0tLSBhL0xpYi9pbXBvcnRsaWIvX2Jvb3RzdHJhcC5weQorKysgYi9MaWIvaW1wb3J0bGliL19ib290c3RyYXAucHkKQEAgLTksNyArOSw3IEBACiAjCiAjIElNUE9SVEFOVDogV2hlbmV2ZXIgbWFraW5nIGNoYW5nZXMgdG8gdGhpcyBtb2R1bGUsIGJlIHN1cmUgdG8gcnVuCiAjIGEgdG9wLWxldmVsIG1ha2UgaW4gb3JkZXIgdG8gZ2V0IHRoZSBmcm96ZW4gdmVyc2lvbiBvZiB0aGUgbW9kdWxlCi0jIHVwZGF0ZS4gTm90IGRvaW5nIHNvLCB3aWxsIHJlc3VsdCBpbiB0aGUgTWFrZWZpbGUgdG8gZmFpbCBmb3IKKyMgdXBkYXRlLiBOb3QgZG9pbmcgc28gd2lsbCByZXN1bHQgaW4gdGhlIE1ha2VmaWxlIHRvIGZhaWwgZm9yCiAjIGFsbCBvdGhlcnMgd2hvIGRvbid0IGhhdmUgYSAuL3B5dGhvbiBhcm91bmQgdG8gZnJlZXplIHRoZSBtb2R1bGUKICMgaW4gdGhlIGVhcmx5IHN0YWdlcyBvZiBjb21waWxhdGlvbi4KICMKQEAgLTIwLDEwICsyMCw2IEBACiAjIHJlZmVyZW5jZSBhbnkgaW5qZWN0ZWQgb2JqZWN0cyEgVGhpcyBpbmNsdWRlcyBub3Qgb25seSBnbG9iYWwgY29kZSBidXQgYWxzbwogIyBhbnl0aGluZyBzcGVjaWZpZWQgYXQgdGhlIGNsYXNzIGxldmVsLgogCi0jIFhYWCBNYWtlIHN1cmUgYWxsIHB1YmxpYyBuYW1lcyBoYXZlIG5vIHNpbmdsZSBsZWFkaW5nIHVuZGVyc2NvcmUgYW5kIGFsbAotIyAgICAgb3RoZXJzIGRvLgotCi0KICMgQm9vdHN0cmFwLXJlbGF0ZWQgY29kZSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAogX0NBU0VfSU5TRU5TSVRJVkVfUExBVEZPUk1TID0gJ3dpbicsICdjeWd3aW4nLCAnZGFyd2luJwpAQCAtNDEsNzYgKzM3LDU4IEBACiAgICAgcmV0dXJuIF9yZWxheF9jYXNlCiAKIAotIyBUT0RPOiBFeHBvc2UgZnJvbSBtYXJzaGFsCiBkZWYgX3dfbG9uZyh4KToKLSAgICAiIiJDb252ZXJ0IGEgMzItYml0IGludGVnZXIgdG8gbGl0dGxlLWVuZGlhbi4KLQotICAgIFhYWCBUZW1wb3JhcnkgdW50aWwgbWFyc2hhbCdzIGxvbmcgZnVuY3Rpb25zIGFyZSBleHBvc2VkLgotCi0gICAgIiIiCi0gICAgeCA9IGludCh4KQotICAgIGludF9ieXRlcyA9IFtdCi0gICAgaW50X2J5dGVzLmFwcGVuZCh4ICYgMHhGRikKLSAgICBpbnRfYnl0ZXMuYXBwZW5kKCh4ID4+IDgpICYgMHhGRikKLSAgICBpbnRfYnl0ZXMuYXBwZW5kKCh4ID4+IDE2KSAmIDB4RkYpCi0gICAgaW50X2J5dGVzLmFwcGVuZCgoeCA+PiAyNCkgJiAweEZGKQotICAgIHJldHVybiBieXRlYXJyYXkoaW50X2J5dGVzKQorICAgICIiIkNvbnZlcnQgYSAzMi1iaXQgaW50ZWdlciB0byBsaXR0bGUtZW5kaWFuLiIiIgorICAgIHJldHVybiAoaW50KHgpICYgMHhGRkZGRkZGRikudG9fYnl0ZXMoNCwgJ2xpdHRsZScpCiAKIAotIyBUT0RPOiBFeHBvc2UgZnJvbSBtYXJzaGFsCiBkZWYgX3JfbG9uZyhpbnRfYnl0ZXMpOgotICAgICIiIkNvbnZlcnQgNCBieXRlcyBpbiBsaXR0bGUtZW5kaWFuIHRvIGFuIGludGVnZXIuCi0KLSAgICBYWFggVGVtcG9yYXJ5IHVudGlsIG1hcnNoYWwncyBsb25nIGZ1bmN0aW9uIGFyZSBleHBvc2VkLgotCi0gICAgIiIiCi0gICAgeCA9IGludF9ieXRlc1swXQotICAgIHggfD0gaW50X2J5dGVzWzFdIDw8IDgKLSAgICB4IHw9IGludF9ieXRlc1syXSA8PCAxNgotICAgIHggfD0gaW50X2J5dGVzWzNdIDw8IDI0Ci0gICAgcmV0dXJuIHgKKyAgICAiIiJDb252ZXJ0IDQgYnl0ZXMgaW4gbGl0dGxlLWVuZGlhbiB0byBhbiBpbnRlZ2VyLiIiIgorICAgIHJldHVybiBpbnQuZnJvbV9ieXRlcyhpbnRfYnl0ZXMsICdsaXR0bGUnKQogCiAKIGRlZiBfcGF0aF9qb2luKCpwYXRoX3BhcnRzKToKICAgICAiIiJSZXBsYWNlbWVudCBmb3Igb3MucGF0aC5qb2luKCkuIiIiCi0gICAgbmV3X3BhcnRzID0gW10KLSAgICBmb3IgcGFydCBpbiBwYXRoX3BhcnRzOgotICAgICAgICBpZiBub3QgcGFydDoKLSAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgIG5ld19wYXJ0cy5hcHBlbmQocGFydCkKLSAgICAgICAgaWYgcGFydFstMV0gbm90IGluIHBhdGhfc2VwYXJhdG9yczoKLSAgICAgICAgICAgIG5ld19wYXJ0cy5hcHBlbmQocGF0aF9zZXApCi0gICAgcmV0dXJuICcnLmpvaW4obmV3X3BhcnRzWzotMV0pICAjIERyb3Agc3VwZXJmbHVvdXMgcGF0aCBzZXBhcmF0b3IuCisgICAgcmV0dXJuIHBhdGhfc2VwLmpvaW4oW3BhcnQucnN0cmlwKHBhdGhfc2VwYXJhdG9ycykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHBhcnQgaW4gcGF0aF9wYXJ0cyBpZiBwYXJ0XSkKIAogCiBkZWYgX3BhdGhfc3BsaXQocGF0aCk6CiAgICAgIiIiUmVwbGFjZW1lbnQgZm9yIG9zLnBhdGguc3BsaXQoKS4iIiIKKyAgICBpZiBsZW4ocGF0aF9zZXBhcmF0b3JzKSA9PSAxOgorICAgICAgICBmcm9udCwgXywgdGFpbCA9IHBhdGgucnBhcnRpdGlvbihwYXRoX3NlcCkKKyAgICAgICAgcmV0dXJuIGZyb250LCB0YWlsCiAgICAgZm9yIHggaW4gcmV2ZXJzZWQocGF0aCk6CiAgICAgICAgIGlmIHggaW4gcGF0aF9zZXBhcmF0b3JzOgotICAgICAgICAgICAgc2VwID0geAotICAgICAgICAgICAgYnJlYWsKLSAgICBlbHNlOgotICAgICAgICBzZXAgPSBwYXRoX3NlcAotICAgIGZyb250LCBfLCB0YWlsID0gcGF0aC5ycGFydGl0aW9uKHNlcCkKLSAgICByZXR1cm4gZnJvbnQsIHRhaWwKKyAgICAgICAgICAgIGZyb250LCB0YWlsID0gcGF0aC5yc3BsaXQoeCwgbWF4c3BsaXQ9MSkKKyAgICAgICAgICAgIHJldHVybiBmcm9udCwgdGFpbAorICAgIHJldHVybiAnJywgcGF0aAorCisKK2RlZiBfcGF0aF9zdGF0KHBhdGgpOgorICAgICIiIlN0YXQgdGhlIHBhdGguCisKKyAgICBNYWRlIGEgc2VwYXJhdGUgZnVuY3Rpb24gdG8gbWFrZSBpdCBlYXNpZXIgdG8gb3ZlcnJpZGUgaW4gZXhwZXJpbWVudHMKKyAgICAoZS5nLiBjYWNoZSBzdGF0IHJlc3VsdHMpLgorCisgICAgIiIiCisgICAgcmV0dXJuIF9vcy5zdGF0KHBhdGgpCiAKIAogZGVmIF9wYXRoX2lzX21vZGVfdHlwZShwYXRoLCBtb2RlKToKICAgICAiIiJUZXN0IHdoZXRoZXIgdGhlIHBhdGggaXMgdGhlIHNwZWNpZmllZCBtb2RlIHR5cGUuIiIiCiAgICAgdHJ5OgotICAgICAgICBzdGF0X2luZm8gPSBfb3Muc3RhdChwYXRoKQorICAgICAgICBzdGF0X2luZm8gPSBfcGF0aF9zdGF0KHBhdGgpCiAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIHJldHVybiBGYWxzZQogICAgIHJldHVybiAoc3RhdF9pbmZvLnN0X21vZGUgJiAwbzE3MDAwMCkgPT0gbW9kZQogCiAKLSMgWFhYIENvdWxkIGFsc28gZXhwb3NlIE1vZHVsZXMvZ2V0cGF0aC5jOmlzZmlsZSgpCiBkZWYgX3BhdGhfaXNmaWxlKHBhdGgpOgogICAgICIiIlJlcGxhY2VtZW50IGZvciBvcy5wYXRoLmlzZmlsZS4iIiIKICAgICByZXR1cm4gX3BhdGhfaXNfbW9kZV90eXBlKHBhdGgsIDBvMTAwMDAwKQogCiAKLSMgWFhYIENvdWxkIGFsc28gZXhwb3NlIE1vZHVsZXMvZ2V0cGF0aC5jOmlzZGlyKCkKIGRlZiBfcGF0aF9pc2RpcihwYXRoKToKICAgICAiIiJSZXBsYWNlbWVudCBmb3Igb3MucGF0aC5pc2Rpci4iIiIKICAgICBpZiBub3QgcGF0aDoKQEAgLTE0OCwxNyArMTI2LDMwIEBACiAgICAgbmV3Ll9fZGljdF9fLnVwZGF0ZShvbGQuX19kaWN0X18pCiAKIAorZGVmIF9uZXdfbW9kdWxlKG5hbWUpOgorICAgIHJldHVybiB0eXBlKHN5cykobmFtZSkKKworCiBfY29kZV90eXBlID0gdHlwZShfd3JhcC5fX2NvZGVfXykKIAogCi1kZWYgbmV3X21vZHVsZShuYW1lKToKLSAgICAiIiJDcmVhdGUgYSBuZXcgbW9kdWxlLgogCi0gICAgVGhlIG1vZHVsZSBpcyBub3QgZW50ZXJlZCBpbnRvIHN5cy5tb2R1bGVzLgorY2xhc3MgX01hbmFnZVJlbG9hZDoKIAotICAgICIiIgotICAgIHJldHVybiB0eXBlKF9pbykobmFtZSkKKyAgICAiIiJNYW5hZ2VzIHRoZSBwb3NzaWJsZSBjbGVhbi11cCBvZiBzeXMubW9kdWxlcyBmb3IgbG9hZF9tb2R1bGUoKS4iIiIKIAorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgc2VsZi5fbmFtZSA9IG5hbWUKKworICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIHNlbGYuX2lzX3JlbG9hZCA9IHNlbGYuX25hbWUgaW4gc3lzLm1vZHVsZXMKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqYXJncyk6CisgICAgICAgIGlmIGFueShhcmcgaXMgbm90IE5vbmUgZm9yIGFyZyBpbiBhcmdzKSBhbmQgbm90IHNlbGYuX2lzX3JlbG9hZDoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBkZWwgc3lzLm1vZHVsZXNbc2VsZi5fbmFtZV0KKyAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCiAKICMgTW9kdWxlLWxldmVsIGxvY2tpbmcgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIApAQCAtMjE0LDcgKzIwNSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvdW50ICs9IDEKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCiAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuaGFzX2RlYWRsb2NrKCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBfRGVhZGxvY2tFcnJvcigiZGVhZGxvY2sgZGV0ZWN0ZWQgYnkgJXIiICUgc2VsZikKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIF9EZWFkbG9ja0Vycm9yKCdkZWFkbG9jayBkZXRlY3RlZCBieSAlcicgJSBzZWxmKQogICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLndha2V1cC5hY3F1aXJlKEZhbHNlKToKICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYud2FpdGVycyArPSAxCiAgICAgICAgICAgICAgICAgIyBXYWl0IGZvciBhIHJlbGVhc2UoKSBjYWxsCkBAIC0yMjcsNyArMjE4LDcgQEAKICAgICAgICAgdGlkID0gX3RocmVhZC5nZXRfaWRlbnQoKQogICAgICAgICB3aXRoIHNlbGYubG9jazoKICAgICAgICAgICAgIGlmIHNlbGYub3duZXIgIT0gdGlkOgotICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiY2Fubm90IHJlbGVhc2UgdW4tYWNxdWlyZWQgbG9jayIpCisgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdjYW5ub3QgcmVsZWFzZSB1bi1hY3F1aXJlZCBsb2NrJykKICAgICAgICAgICAgIGFzc2VydCBzZWxmLmNvdW50ID4gMAogICAgICAgICAgICAgc2VsZi5jb3VudCAtPSAxCiAgICAgICAgICAgICBpZiBzZWxmLmNvdW50ID09IDA6CkBAIC0yMzcsNyArMjI4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgc2VsZi53YWtldXAucmVsZWFzZSgpCiAKICAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAgIHJldHVybiAiX01vZHVsZUxvY2soJXIpIGF0ICVkIiAlIChzZWxmLm5hbWUsIGlkKHNlbGYpKQorICAgICAgICByZXR1cm4gJ19Nb2R1bGVMb2NrKHshcn0pIGF0IHt9Jy5mb3JtYXQoc2VsZi5uYW1lLCBpZChzZWxmKSkKIAogCiBjbGFzcyBfRHVtbXlNb2R1bGVMb2NrOgpAQCAtMjU0LDExICsyNDUsMjggQEAKIAogICAgIGRlZiByZWxlYXNlKHNlbGYpOgogICAgICAgICBpZiBzZWxmLmNvdW50ID09IDA6Ci0gICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoImNhbm5vdCByZWxlYXNlIHVuLWFjcXVpcmVkIGxvY2siKQorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdjYW5ub3QgcmVsZWFzZSB1bi1hY3F1aXJlZCBsb2NrJykKICAgICAgICAgc2VsZi5jb3VudCAtPSAxCiAKICAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAgIHJldHVybiAiX0R1bW15TW9kdWxlTG9jayglcikgYXQgJWQiICUgKHNlbGYubmFtZSwgaWQoc2VsZikpCisgICAgICAgIHJldHVybiAnX0R1bW15TW9kdWxlTG9jayh7IXJ9KSBhdCB7fScuZm9ybWF0KHNlbGYubmFtZSwgaWQoc2VsZikpCisKKworY2xhc3MgX01vZHVsZUxvY2tNYW5hZ2VyOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUpOgorICAgICAgICBzZWxmLl9uYW1lID0gbmFtZQorICAgICAgICBzZWxmLl9sb2NrID0gTm9uZQorCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5fbG9jayA9IF9nZXRfbW9kdWxlX2xvY2soc2VsZi5fbmFtZSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIF9pbXAucmVsZWFzZV9sb2NrKCkKKyAgICAgICAgc2VsZi5fbG9jay5hY3F1aXJlKCkKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBzZWxmLl9sb2NrLnJlbGVhc2UoKQogCiAKICMgVGhlIGZvbGxvd2luZyB0d28gZnVuY3Rpb25zIGFyZSBmb3IgY29uc3VtcHRpb24gYnkgUHl0aG9uL2ltcG9ydC5jLgpAQCAtMzE1LDk1ICszMjMsMTA5IEBACiAKICMgRmluZGVyL2xvYWRlciB1dGlsaXR5IGNvZGUgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotIiIiTWFnaWMgd29yZCB0byByZWplY3QgLnB5YyBmaWxlcyBnZW5lcmF0ZWQgYnkgb3RoZXIgUHl0aG9uIHZlcnNpb25zLgotSXQgc2hvdWxkIGNoYW5nZSBmb3IgZWFjaCBpbmNvbXBhdGlibGUgY2hhbmdlIHRvIHRoZSBieXRlY29kZS4KKyMgTWFnaWMgd29yZCB0byByZWplY3QgLnB5YyBmaWxlcyBnZW5lcmF0ZWQgYnkgb3RoZXIgUHl0aG9uIHZlcnNpb25zLgorIyBJdCBzaG91bGQgY2hhbmdlIGZvciBlYWNoIGluY29tcGF0aWJsZSBjaGFuZ2UgdG8gdGhlIGJ5dGVjb2RlLgorIworIyBUaGUgdmFsdWUgb2YgQ1IgYW5kIExGIGlzIGluY29ycG9yYXRlZCBzbyBpZiB5b3UgZXZlciByZWFkIG9yIHdyaXRlCisjIGEgLnB5YyBmaWxlIGluIHRleHQgbW9kZSB0aGUgbWFnaWMgbnVtYmVyIHdpbGwgYmUgd3Jvbmc7IGFsc28sIHRoZQorIyBBcHBsZSBNUFcgY29tcGlsZXIgc3dhcHMgdGhlaXIgdmFsdWVzLCBib3RjaGluZyBzdHJpbmcgY29uc3RhbnRzLgorIworIyBUaGUgbWFnaWMgbnVtYmVycyBtdXN0IGJlIHNwYWNlZCBhcGFydCBhdCBsZWFzdCAyIHZhbHVlcywgYXMgdGhlCisjIC1VIGludGVycGV0ZXIgZmxhZyB3aWxsIGNhdXNlIE1BR0lDKzEgYmVpbmcgdXNlZC4gVGhleSBoYXZlIGJlZW4KKyMgb2RkIG51bWJlcnMgZm9yIHNvbWUgdGltZSBub3cuCisjCisjIFRoZXJlIHdlcmUgYSB2YXJpZXR5IG9mIG9sZCBzY2hlbWVzIGZvciBzZXR0aW5nIHRoZSBtYWdpYyBudW1iZXIuCisjIFRoZSBjdXJyZW50IHdvcmtpbmcgc2NoZW1lIGlzIHRvIGluY3JlbWVudCB0aGUgcHJldmlvdXMgdmFsdWUgYnkKKyMgMTAuCisjCisjIFN0YXJ0aW5nIHdpdGggdGhlIGFkb3B0aW9uIG9mIFBFUCAzMTQ3IGluIFB5dGhvbiAzLjIsIGV2ZXJ5IGJ1bXAgaW4gbWFnaWMKKyMgbnVtYmVyIGFsc28gaW5jbHVkZXMgYSBuZXcgIm1hZ2ljIHRhZyIsIGkuZS4gYSBodW1hbiByZWFkYWJsZSBzdHJpbmcgdXNlZAorIyB0byByZXByZXNlbnQgdGhlIG1hZ2ljIG51bWJlciBpbiBfX3B5Y2FjaGVfXyBkaXJlY3Rvcmllcy4gIFdoZW4geW91IGNoYW5nZQorIyB0aGUgbWFnaWMgbnVtYmVyLCB5b3UgbXVzdCBhbHNvIHNldCBhIG5ldyB1bmlxdWUgbWFnaWMgdGFnLiAgR2VuZXJhbGx5IHRoaXMKKyMgY2FuIGJlIG5hbWVkIGFmdGVyIHRoZSBQeXRob24gbWFqb3IgdmVyc2lvbiBvZiB0aGUgbWFnaWMgbnVtYmVyIGJ1bXAsIGJ1dAorIyBpdCBjYW4gcmVhbGx5IGJlIGFueXRoaW5nLCBhcyBsb25nIGFzIGl0J3MgZGlmZmVyZW50IHRoYW4gYW55dGhpbmcgZWxzZQorIyB0aGF0J3MgY29tZSBiZWZvcmUuICBUaGUgdGFncyBhcmUgaW5jbHVkZWQgaW4gdGhlIGZvbGxvd2luZyB0YWJsZSwgc3RhcnRpbmcKKyMgd2l0aCBQeXRob24gMy4yYTAuCisjCisjIEtub3duIHZhbHVlczoKKyMgIFB5dGhvbiAxLjU6ICAgMjAxMjEKKyMgIFB5dGhvbiAxLjUuMTogMjAxMjEKKyMgICAgIFB5dGhvbiAxLjUuMjogMjAxMjEKKyMgICAgIFB5dGhvbiAxLjY6ICAgNTA0MjgKKyMgICAgIFB5dGhvbiAyLjA6ICAgNTA4MjMKKyMgICAgIFB5dGhvbiAyLjAuMTogNTA4MjMKKyMgICAgIFB5dGhvbiAyLjE6ICAgNjAyMDIKKyMgICAgIFB5dGhvbiAyLjEuMTogNjAyMDIKKyMgICAgIFB5dGhvbiAyLjEuMjogNjAyMDIKKyMgICAgIFB5dGhvbiAyLjI6ICAgNjA3MTcKKyMgICAgIFB5dGhvbiAyLjNhMDogNjIwMTEKKyMgICAgIFB5dGhvbiAyLjNhMDogNjIwMjEKKyMgICAgIFB5dGhvbiAyLjNhMDogNjIwMTEgKCEpCisjICAgICBQeXRob24gMi40YTA6IDYyMDQxCisjICAgICBQeXRob24gMi40YTM6IDYyMDUxCisjICAgICBQeXRob24gMi40YjE6IDYyMDYxCisjICAgICBQeXRob24gMi41YTA6IDYyMDcxCisjICAgICBQeXRob24gMi41YTA6IDYyMDgxIChhc3QtYnJhbmNoKQorIyAgICAgUHl0aG9uIDIuNWEwOiA2MjA5MSAod2l0aCkKKyMgICAgIFB5dGhvbiAyLjVhMDogNjIwOTIgKGNoYW5nZWQgV0lUSF9DTEVBTlVQIG9wY29kZSkKKyMgICAgIFB5dGhvbiAyLjViMzogNjIxMDEgKGZpeCB3cm9uZyBjb2RlOiBmb3IgeCwgaW4gLi4uKQorIyAgICAgUHl0aG9uIDIuNWIzOiA2MjExMSAoZml4IHdyb25nIGNvZGU6IHggKz0geWllbGQpCisjICAgICBQeXRob24gMi41YzE6IDYyMTIxIChmaXggd3JvbmcgbG5vdGFiIHdpdGggZm9yIGxvb3BzIGFuZAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmluZyBjb25zdGFudHMgdGhhdCBzaG91bGQgaGF2ZSBiZWVuIHJlbW92ZWQpCisjICAgICBQeXRob24gMi41YzI6IDYyMTMxIChmaXggd3JvbmcgY29kZTogZm9yIHgsIGluIC4uLiBpbiBsaXN0Y29tcC9nZW5leHApCisjICAgICBQeXRob24gMi42YTA6IDYyMTUxIChwZWVwaG9sZSBvcHRpbWl6YXRpb25zIGFuZCBTVE9SRV9NQVAgb3Bjb2RlKQorIyAgICAgUHl0aG9uIDIuNmExOiA2MjE2MSAoV0lUSF9DTEVBTlVQIG9wdGltaXphdGlvbikKKyMgICAgIFB5dGhvbiAyLjdhMDogNjIxNzEgKG9wdGltaXplIGxpc3QgY29tcHJlaGVuc2lvbnMvY2hhbmdlIExJU1RfQVBQRU5EKQorIyAgICAgUHl0aG9uIDIuN2EwOiA2MjE4MSAob3B0aW1pemUgY29uZGl0aW9uYWwgYnJhbmNoZXM6CisjICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRyb2R1Y2UgUE9QX0pVTVBfSUZfRkFMU0UgYW5kIFBPUF9KVU1QX0lGX1RSVUUpCisjICAgICBQeXRob24gMi43YTAgIDYyMTkxIChpbnRyb2R1Y2UgU0VUVVBfV0lUSCkKKyMgICAgIFB5dGhvbiAyLjdhMCAgNjIyMDEgKGludHJvZHVjZSBCVUlMRF9TRVQpCisjICAgICBQeXRob24gMi43YTAgIDYyMjExIChpbnRyb2R1Y2UgTUFQX0FERCBhbmQgU0VUX0FERCkKKyMgICAgIFB5dGhvbiAzMDAwOiAgIDMwMDAKKyMgICAgICAgICAgICAgICAgICAgIDMwMTAgKHJlbW92ZWQgVU5BUllfQ09OVkVSVCkKKyMgICAgICAgICAgICAgICAgICAgIDMwMjAgKGFkZGVkIEJVSUxEX1NFVCkKKyMgICAgICAgICAgICAgICAgICAgIDMwMzAgKGFkZGVkIGtleXdvcmQtb25seSBwYXJhbWV0ZXJzKQorIyAgICAgICAgICAgICAgICAgICAgMzA0MCAoYWRkZWQgc2lnbmF0dXJlIGFubm90YXRpb25zKQorIyAgICAgICAgICAgICAgICAgICAgMzA1MCAocHJpbnQgYmVjb21lcyBhIGZ1bmN0aW9uKQorIyAgICAgICAgICAgICAgICAgICAgMzA2MCAoUEVQIDMxMTUgbWV0YWNsYXNzIHN5bnRheCkKKyMgICAgICAgICAgICAgICAgICAgIDMwNjEgKHN0cmluZyBsaXRlcmFscyBiZWNvbWUgdW5pY29kZSkKKyMgICAgICAgICAgICAgICAgICAgIDMwNzEgKFBFUCAzMTA5IHJhaXNlIGNoYW5nZXMpCisjICAgICAgICAgICAgICAgICAgICAzMDgxIChQRVAgMzEzNyBtYWtlIF9fZmlsZV9fIGFuZCBfX25hbWVfXyB1bmljb2RlKQorIyAgICAgICAgICAgICAgICAgICAgMzA5MSAoa2lsbCBzdHI4IGludGVybmluZykKKyMgICAgICAgICAgICAgICAgICAgIDMxMDEgKG1lcmdlIGZyb20gMi42YTAsIHNlZSA2MjE1MSkKKyMgICAgICAgICAgICAgICAgICAgIDMxMDMgKF9fZmlsZV9fIHBvaW50cyB0byBzb3VyY2UgZmlsZSkKKyMgICAgIFB5dGhvbiAzLjBhNDogMzExMSAoV0lUSF9DTEVBTlVQIG9wdGltaXphdGlvbikuCisjICAgICBQeXRob24gMy4wYTU6IDMxMzEgKGxleGljYWwgZXhjZXB0aW9uIHN0YWNraW5nLCBpbmNsdWRpbmcgUE9QX0VYQ0VQVCkKKyMgICAgIFB5dGhvbiAzLjFhMDogMzE0MSAob3B0aW1pemUgbGlzdCwgc2V0IGFuZCBkaWN0IGNvbXByZWhlbnNpb25zOgorIyAgICAgICAgICAgICBjaGFuZ2UgTElTVF9BUFBFTkQgYW5kIFNFVF9BREQsIGFkZCBNQVBfQUREKQorIyAgICAgUHl0aG9uIDMuMWEwOiAzMTUxIChvcHRpbWl6ZSBjb25kaXRpb25hbCBicmFuY2hlczoKKyMgICAgICAgICAgICAgaW50cm9kdWNlIFBPUF9KVU1QX0lGX0ZBTFNFIGFuZCBQT1BfSlVNUF9JRl9UUlVFKQorIyAgICAgUHl0aG9uIDMuMmEwOiAzMTYwIChhZGQgU0VUVVBfV0lUSCkKKyMgICAgICAgICAgICAgICAgICAgdGFnOiBjcHl0aG9uLTMyCisjICAgICBQeXRob24gMy4yYTE6IDMxNzAgKGFkZCBEVVBfVE9QX1RXTywgcmVtb3ZlIERVUF9UT1BYIGFuZCBST1RfRk9VUikKKyMgICAgICAgICAgICAgICAgICAgdGFnOiBjcHl0aG9uLTMyCisjICAgICBQeXRob24gMy4yYTIgIDMxODAgKGFkZCBERUxFVEVfREVSRUYpCisjICAgICBQeXRob24gMy4zYTAgIDMxOTAgX19jbGFzc19fIHN1cGVyIGNsb3N1cmUgY2hhbmdlZAorIyAgICAgUHl0aG9uIDMuM2EwICAzMjAwIChfX3F1YWxuYW1lX18gYWRkZWQpCisjICAgICAgICAgICAgICAgICAgICAgIDMyMTAgKGFkZGVkIHNpemUgbW9kdWxvIDIqKjMyIHRvIHRoZSBweWMgaGVhZGVyKQorIyAgICAgUHl0aG9uIDMuM2ExICAzMjIwIChjaGFuZ2VkIFBFUCAzODAgaW1wbGVtZW50YXRpb24pCisjICAgICBQeXRob24gMy4zYTQgIDMyMzAgKHJldmVydCBjaGFuZ2VzIHRvIGltcGxpY2l0IF9fY2xhc3NfXyBjbG9zdXJlKQorIyAgICAgUHl0aG9uIDMuNGExICAzMjUwIChldmFsdWF0ZSBwb3NpdGlvbmFsIGRlZmF1bHQgYXJndW1lbnRzIGJlZm9yZQorIyAgICAgICAgICAgICAgICAgICAgICAgIGtleXdvcmQtb25seSBkZWZhdWx0cykKKyMgICAgIFB5dGhvbiAzLjRhMSAgMzI2MCAoYWRkIExPQURfQ0xBU1NERVJFRjsgYWxsb3cgbG9jYWxzIG9mIGNsYXNzIHRvIG92ZXJyaWRlCisjICAgICAgICAgICAgICAgICAgICAgICAgZnJlZSB2YXJzKQorIyAgICAgUHl0aG9uIDMuNGExICAzMjcwICh2YXJpb3VzIHR3ZWFrcyB0byB0aGUgX19jbGFzc19fIGNsb3N1cmUpCisjICAgICBQeXRob24gMy40YTEgIDMyODAgKHJlbW92ZSBpbXBsaWNpdCBjbGFzcyBhcmd1bWVudCkKKyMgICAgIFB5dGhvbiAzLjRhNCAgMzI5MCAoY2hhbmdlcyB0byBfX3F1YWxuYW1lX18gY29tcHV0YXRpb24pCisjICAgICBQeXRob24gMy40YTQgIDMzMDAgKG1vcmUgY2hhbmdlcyB0byBfX3F1YWxuYW1lX18gY29tcHV0YXRpb24pCisjICAgICBQeXRob24gMy40cmMyIDMzMTAgKGFsdGVyIF9fcXVhbG5hbWVfXyBjb21wdXRhdGlvbikKKyMKKyMgTUFHSUMgbXVzdCBjaGFuZ2Ugd2hlbmV2ZXIgdGhlIGJ5dGVjb2RlIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyIG1heSBubworIyBsb25nZXIgYmUgdW5kZXJzdG9vZCBieSBvbGRlciBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIGV2YWwgbG9vcCAodXN1YWxseQorIyBkdWUgdG8gdGhlIGFkZGl0aW9uIG9mIG5ldyBvcGNvZGVzKS4KIAotVGhlIHZhbHVlIG9mIENSIGFuZCBMRiBpcyBpbmNvcnBvcmF0ZWQgc28gaWYgeW91IGV2ZXIgcmVhZCBvciB3cml0ZQotYSAucHljIGZpbGUgaW4gdGV4dCBtb2RlIHRoZSBtYWdpYyBudW1iZXIgd2lsbCBiZSB3cm9uZzsgYWxzbywgdGhlCi1BcHBsZSBNUFcgY29tcGlsZXIgc3dhcHMgdGhlaXIgdmFsdWVzLCBib3RjaGluZyBzdHJpbmcgY29uc3RhbnRzLgotCi1UaGUgbWFnaWMgbnVtYmVycyBtdXN0IGJlIHNwYWNlZCBhcGFydCBhdCBsZWFzdCAyIHZhbHVlcywgYXMgdGhlCi0tVSBpbnRlcnBldGVyIGZsYWcgd2lsbCBjYXVzZSBNQUdJQysxIGJlaW5nIHVzZWQuIFRoZXkgaGF2ZSBiZWVuCi1vZGQgbnVtYmVycyBmb3Igc29tZSB0aW1lIG5vdy4KLQotVGhlcmUgd2VyZSBhIHZhcmlldHkgb2Ygb2xkIHNjaGVtZXMgZm9yIHNldHRpbmcgdGhlIG1hZ2ljIG51bWJlci4KLVRoZSBjdXJyZW50IHdvcmtpbmcgc2NoZW1lIGlzIHRvIGluY3JlbWVudCB0aGUgcHJldmlvdXMgdmFsdWUgYnkKLTEwLgotCi1TdGFydGluZyB3aXRoIHRoZSBhZG9wdGlvbiBvZiBQRVAgMzE0NyBpbiBQeXRob24gMy4yLCBldmVyeSBidW1wIGluIG1hZ2ljCi1udW1iZXIgYWxzbyBpbmNsdWRlcyBhIG5ldyAibWFnaWMgdGFnIiwgaS5lLiBhIGh1bWFuIHJlYWRhYmxlIHN0cmluZyB1c2VkCi10byByZXByZXNlbnQgdGhlIG1hZ2ljIG51bWJlciBpbiBfX3B5Y2FjaGVfXyBkaXJlY3Rvcmllcy4gIFdoZW4geW91IGNoYW5nZQotdGhlIG1hZ2ljIG51bWJlciwgeW91IG11c3QgYWxzbyBzZXQgYSBuZXcgdW5pcXVlIG1hZ2ljIHRhZy4gIEdlbmVyYWxseSB0aGlzCi1jYW4gYmUgbmFtZWQgYWZ0ZXIgdGhlIFB5dGhvbiBtYWpvciB2ZXJzaW9uIG9mIHRoZSBtYWdpYyBudW1iZXIgYnVtcCwgYnV0Ci1pdCBjYW4gcmVhbGx5IGJlIGFueXRoaW5nLCBhcyBsb25nIGFzIGl0J3MgZGlmZmVyZW50IHRoYW4gYW55dGhpbmcgZWxzZQotdGhhdCdzIGNvbWUgYmVmb3JlLiAgVGhlIHRhZ3MgYXJlIGluY2x1ZGVkIGluIHRoZSBmb2xsb3dpbmcgdGFibGUsIHN0YXJ0aW5nCi13aXRoIFB5dGhvbiAzLjJhMC4KLQotS25vd24gdmFsdWVzOgotIFB5dGhvbiAxLjU6ICAgMjAxMjEKLSBQeXRob24gMS41LjE6IDIwMTIxCi0gICAgUHl0aG9uIDEuNS4yOiAyMDEyMQotICAgIFB5dGhvbiAxLjY6ICAgNTA0MjgKLSAgICBQeXRob24gMi4wOiAgIDUwODIzCi0gICAgUHl0aG9uIDIuMC4xOiA1MDgyMwotICAgIFB5dGhvbiAyLjE6ICAgNjAyMDIKLSAgICBQeXRob24gMi4xLjE6IDYwMjAyCi0gICAgUHl0aG9uIDIuMS4yOiA2MDIwMgotICAgIFB5dGhvbiAyLjI6ICAgNjA3MTcKLSAgICBQeXRob24gMi4zYTA6IDYyMDExCi0gICAgUHl0aG9uIDIuM2EwOiA2MjAyMQotICAgIFB5dGhvbiAyLjNhMDogNjIwMTEgKCEpCi0gICAgUHl0aG9uIDIuNGEwOiA2MjA0MQotICAgIFB5dGhvbiAyLjRhMzogNjIwNTEKLSAgICBQeXRob24gMi40YjE6IDYyMDYxCi0gICAgUHl0aG9uIDIuNWEwOiA2MjA3MQotICAgIFB5dGhvbiAyLjVhMDogNjIwODEgKGFzdC1icmFuY2gpCi0gICAgUHl0aG9uIDIuNWEwOiA2MjA5MSAod2l0aCkKLSAgICBQeXRob24gMi41YTA6IDYyMDkyIChjaGFuZ2VkIFdJVEhfQ0xFQU5VUCBvcGNvZGUpCi0gICAgUHl0aG9uIDIuNWIzOiA2MjEwMSAoZml4IHdyb25nIGNvZGU6IGZvciB4LCBpbiAuLi4pCi0gICAgUHl0aG9uIDIuNWIzOiA2MjExMSAoZml4IHdyb25nIGNvZGU6IHggKz0geWllbGQpCi0gICAgUHl0aG9uIDIuNWMxOiA2MjEyMSAoZml4IHdyb25nIGxub3RhYiB3aXRoIGZvciBsb29wcyBhbmQKLSAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yaW5nIGNvbnN0YW50cyB0aGF0IHNob3VsZCBoYXZlIGJlZW4gcmVtb3ZlZCkKLSAgICBQeXRob24gMi41YzI6IDYyMTMxIChmaXggd3JvbmcgY29kZTogZm9yIHgsIGluIC4uLiBpbiBsaXN0Y29tcC9nZW5leHApCi0gICAgUHl0aG9uIDIuNmEwOiA2MjE1MSAocGVlcGhvbGUgb3B0aW1pemF0aW9ucyBhbmQgU1RPUkVfTUFQIG9wY29kZSkKLSAgICBQeXRob24gMi42YTE6IDYyMTYxIChXSVRIX0NMRUFOVVAgb3B0aW1pemF0aW9uKQotICAgIFB5dGhvbiAzMDAwOiAgIDMwMDAKLSAgICAgICAgICAgICAgICAgICAzMDEwIChyZW1vdmVkIFVOQVJZX0NPTlZFUlQpCi0gICAgICAgICAgICAgICAgICAgMzAyMCAoYWRkZWQgQlVJTERfU0VUKQotICAgICAgICAgICAgICAgICAgIDMwMzAgKGFkZGVkIGtleXdvcmQtb25seSBwYXJhbWV0ZXJzKQotICAgICAgICAgICAgICAgICAgIDMwNDAgKGFkZGVkIHNpZ25hdHVyZSBhbm5vdGF0aW9ucykKLSAgICAgICAgICAgICAgICAgICAzMDUwIChwcmludCBiZWNvbWVzIGEgZnVuY3Rpb24pCi0gICAgICAgICAgICAgICAgICAgMzA2MCAoUEVQIDMxMTUgbWV0YWNsYXNzIHN5bnRheCkKLSAgICAgICAgICAgICAgICAgICAzMDYxIChzdHJpbmcgbGl0ZXJhbHMgYmVjb21lIHVuaWNvZGUpCi0gICAgICAgICAgICAgICAgICAgMzA3MSAoUEVQIDMxMDkgcmFpc2UgY2hhbmdlcykKLSAgICAgICAgICAgICAgICAgICAzMDgxIChQRVAgMzEzNyBtYWtlIF9fZmlsZV9fIGFuZCBfX25hbWVfXyB1bmljb2RlKQotICAgICAgICAgICAgICAgICAgIDMwOTEgKGtpbGwgc3RyOCBpbnRlcm5pbmcpCi0gICAgICAgICAgICAgICAgICAgMzEwMSAobWVyZ2UgZnJvbSAyLjZhMCwgc2VlIDYyMTUxKQotICAgICAgICAgICAgICAgICAgIDMxMDMgKF9fZmlsZV9fIHBvaW50cyB0byBzb3VyY2UgZmlsZSkKLSAgICBQeXRob24gMy4wYTQ6IDMxMTEgKFdJVEhfQ0xFQU5VUCBvcHRpbWl6YXRpb24pLgotICAgIFB5dGhvbiAzLjBhNTogMzEzMSAobGV4aWNhbCBleGNlcHRpb24gc3RhY2tpbmcsIGluY2x1ZGluZyBQT1BfRVhDRVBUKQotICAgIFB5dGhvbiAzLjFhMDogMzE0MSAob3B0aW1pemUgbGlzdCwgc2V0IGFuZCBkaWN0IGNvbXByZWhlbnNpb25zOgotICAgICAgICAgICAgY2hhbmdlIExJU1RfQVBQRU5EIGFuZCBTRVRfQURELCBhZGQgTUFQX0FERCkKLSAgICBQeXRob24gMy4xYTA6IDMxNTEgKG9wdGltaXplIGNvbmRpdGlvbmFsIGJyYW5jaGVzOgotICAgICAgICAgICAgaW50cm9kdWNlIFBPUF9KVU1QX0lGX0ZBTFNFIGFuZCBQT1BfSlVNUF9JRl9UUlVFKQotICAgIFB5dGhvbiAzLjJhMDogMzE2MCAoYWRkIFNFVFVQX1dJVEgpCi0gICAgICAgICAgICAgICAgICB0YWc6IGNweXRob24tMzIKLSAgICBQeXRob24gMy4yYTE6IDMxNzAgKGFkZCBEVVBfVE9QX1RXTywgcmVtb3ZlIERVUF9UT1BYIGFuZCBST1RfRk9VUikKLSAgICAgICAgICAgICAgICAgIHRhZzogY3B5dGhvbi0zMgotICAgIFB5dGhvbiAzLjJhMiAgMzE4MCAoYWRkIERFTEVURV9ERVJFRikKLSAgICBQeXRob24gMy4zYTAgIDMxOTAgX19jbGFzc19fIHN1cGVyIGNsb3N1cmUgY2hhbmdlZAotICAgIFB5dGhvbiAzLjNhMCAgMzIwMCAoX19xdWFsbmFtZV9fIGFkZGVkKQotICAgICAgICAgICAgICAgICAgICAgMzIxMCAoYWRkZWQgc2l6ZSBtb2R1bG8gMioqMzIgdG8gdGhlIHB5YyBoZWFkZXIpCi0gICAgUHl0aG9uIDMuM2ExICAzMjIwIChjaGFuZ2VkIFBFUCAzODAgaW1wbGVtZW50YXRpb24pCi0gICAgUHl0aG9uIDMuM2E0ICAzMjMwIChyZXZlcnQgY2hhbmdlcyB0byBpbXBsaWNpdCBfX2NsYXNzX18gY2xvc3VyZSkKLQotTUFHSUMgbXVzdCBjaGFuZ2Ugd2hlbmV2ZXIgdGhlIGJ5dGVjb2RlIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyIG1heSBubwotbG9uZ2VyIGJlIHVuZGVyc3Rvb2QgYnkgb2xkZXIgaW1wbGVtZW50YXRpb25zIG9mIHRoZSBldmFsIGxvb3AgKHVzdWFsbHkKLWR1ZSB0byB0aGUgYWRkaXRpb24gb2YgbmV3IG9wY29kZXMpLgotCi0iIiIKLV9SQVdfTUFHSUNfTlVNQkVSID0gMzIzMCB8IG9yZCgnXHInKSA8PCAxNiB8IG9yZCgnXG4nKSA8PCAyNAotX01BR0lDX0JZVEVTID0gYnl0ZXMoX1JBV19NQUdJQ19OVU1CRVIgPj4gbiAmIDB4ZmYgZm9yIG4gaW4gcmFuZ2UoMCwgMjUsIDgpKQorTUFHSUNfTlVNQkVSID0gKDMzMTApLnRvX2J5dGVzKDIsICdsaXR0bGUnKSArIGInXHJcbicKK19SQVdfTUFHSUNfTlVNQkVSID0gaW50LmZyb21fYnl0ZXMoTUFHSUNfTlVNQkVSLCAnbGl0dGxlJykgICMgRm9yIGltcG9ydC5jCiAKIF9QWUNBQ0hFID0gJ19fcHljYWNoZV9fJwogCkBAIC00MzEsMTEgKzQ1MywxMSBAQAogICAgIGVsc2U6CiAgICAgICAgIHN1ZmZpeGVzID0gT1BUSU1JWkVEX0JZVEVDT0RFX1NVRkZJWEVTCiAgICAgaGVhZCwgdGFpbCA9IF9wYXRoX3NwbGl0KHBhdGgpCi0gICAgYmFzZV9maWxlbmFtZSwgc2VwLCBfID0gdGFpbC5wYXJ0aXRpb24oJy4nKQorICAgIGJhc2UsIHNlcCwgcmVzdCA9IHRhaWwucnBhcnRpdGlvbignLicpCiAgICAgdGFnID0gc3lzLmltcGxlbWVudGF0aW9uLmNhY2hlX3RhZwogICAgIGlmIHRhZyBpcyBOb25lOgogICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCdzeXMuaW1wbGVtZW50YXRpb24uY2FjaGVfdGFnIGlzIE5vbmUnKQotICAgIGZpbGVuYW1lID0gJycuam9pbihbYmFzZV9maWxlbmFtZSwgc2VwLCB0YWcsIHN1ZmZpeGVzWzBdXSkKKyAgICBmaWxlbmFtZSA9ICcnLmpvaW4oWyhiYXNlIGlmIGJhc2UgZWxzZSByZXN0KSwgc2VwLCB0YWcsIHN1ZmZpeGVzWzBdXSkKICAgICByZXR1cm4gX3BhdGhfam9pbihoZWFkLCBfUFlDQUNIRSwgZmlsZW5hbWUpCiAKIApAQCAtNDgxLDYgKzUwMywxOCBAQAogICAgIHJldHVybiBzb3VyY2VfcGF0aCBpZiBfcGF0aF9pc2ZpbGUoc291cmNlX3BhdGgpIGVsc2UgYnl0ZWNvZGVfcGF0aAogCiAKK2RlZiBfY2FsY19tb2RlKHBhdGgpOgorICAgICIiIkNhbGN1bGF0ZSB0aGUgbW9kZSBwZXJtaXNzaW9ucyBmb3IgYSBieXRlY29kZSBmaWxlLiIiIgorICAgIHRyeToKKyAgICAgICAgbW9kZSA9IF9wYXRoX3N0YXQocGF0aCkuc3RfbW9kZQorICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICBtb2RlID0gMG82NjYKKyAgICAjIFdlIGFsd2F5cyBlbnN1cmUgd3JpdGUgYWNjZXNzIHNvIHdlIGNhbiB1cGRhdGUgY2FjaGVkIGZpbGVzCisgICAgIyBsYXRlciBldmVuIHdoZW4gdGhlIHNvdXJjZSBmaWxlcyBhcmUgcmVhZC1vbmx5IG9uIFdpbmRvd3MgKCM2MDc0KQorICAgIG1vZGUgfD0gMG8yMDAKKyAgICByZXR1cm4gbW9kZQorCisKIGRlZiBfdmVyYm9zZV9tZXNzYWdlKG1lc3NhZ2UsICphcmdzLCB2ZXJib3NpdHk9MSk6CiAgICAgIiIiUHJpbnQgdGhlIG1lc3NhZ2UgdG8gc3RkZXJyIGlmIC12L1BZVEhPTlZFUkJPU0UgaXMgdHVybmVkIG9uLiIiIgogICAgIGlmIHN5cy5mbGFncy52ZXJib3NlID49IHZlcmJvc2l0eToKQEAgLTQ4OSw4NSArNTIzLDYgQEAKICAgICAgICAgcHJpbnQobWVzc2FnZS5mb3JtYXQoKmFyZ3MpLCBmaWxlPXN5cy5zdGRlcnIpCiAKIAotZGVmIHNldF9wYWNrYWdlKGZ4bik6Ci0gICAgIiIiU2V0IF9fcGFja2FnZV9fIG9uIHRoZSByZXR1cm5lZCBtb2R1bGUuIiIiCi0gICAgZGVmIHNldF9wYWNrYWdlX3dyYXBwZXIoKmFyZ3MsICoqa3dhcmdzKToKLSAgICAgICAgbW9kdWxlID0gZnhuKCphcmdzLCAqKmt3YXJncykKLSAgICAgICAgaWYgZ2V0YXR0cihtb2R1bGUsICdfX3BhY2thZ2VfXycsIE5vbmUpIGlzIE5vbmU6Ci0gICAgICAgICAgICBtb2R1bGUuX19wYWNrYWdlX18gPSBtb2R1bGUuX19uYW1lX18KLSAgICAgICAgICAgIGlmIG5vdCBoYXNhdHRyKG1vZHVsZSwgJ19fcGF0aF9fJyk6Ci0gICAgICAgICAgICAgICAgbW9kdWxlLl9fcGFja2FnZV9fID0gbW9kdWxlLl9fcGFja2FnZV9fLnJwYXJ0aXRpb24oJy4nKVswXQotICAgICAgICByZXR1cm4gbW9kdWxlCi0gICAgX3dyYXAoc2V0X3BhY2thZ2Vfd3JhcHBlciwgZnhuKQotICAgIHJldHVybiBzZXRfcGFja2FnZV93cmFwcGVyCi0KLQotZGVmIHNldF9sb2FkZXIoZnhuKToKLSAgICAiIiJTZXQgX19sb2FkZXJfXyBvbiB0aGUgcmV0dXJuZWQgbW9kdWxlLiIiIgotICAgIGRlZiBzZXRfbG9hZGVyX3dyYXBwZXIoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKLSAgICAgICAgbW9kdWxlID0gZnhuKHNlbGYsICphcmdzLCAqKmt3YXJncykKLSAgICAgICAgaWYgbm90IGhhc2F0dHIobW9kdWxlLCAnX19sb2FkZXJfXycpOgotICAgICAgICAgICAgbW9kdWxlLl9fbG9hZGVyX18gPSBzZWxmCi0gICAgICAgIHJldHVybiBtb2R1bGUKLSAgICBfd3JhcChzZXRfbG9hZGVyX3dyYXBwZXIsIGZ4bikKLSAgICByZXR1cm4gc2V0X2xvYWRlcl93cmFwcGVyCi0KLQotZGVmIG1vZHVsZV9mb3JfbG9hZGVyKGZ4bik6Ci0gICAgIiIiRGVjb3JhdG9yIHRvIGhhbmRsZSBzZWxlY3RpbmcgdGhlIHByb3BlciBtb2R1bGUgZm9yIGxvYWRlcnMuCi0KLSAgICBUaGUgZGVjb3JhdGVkIGZ1bmN0aW9uIGlzIHBhc3NlZCB0aGUgbW9kdWxlIHRvIHVzZSBpbnN0ZWFkIG9mIHRoZSBtb2R1bGUKLSAgICBuYW1lLiBUaGUgbW9kdWxlIHBhc3NlZCBpbiB0byB0aGUgZnVuY3Rpb24gaXMgZWl0aGVyIGZyb20gc3lzLm1vZHVsZXMgaWYKLSAgICBpdCBhbHJlYWR5IGV4aXN0cyBvciBpcyBhIG5ldyBtb2R1bGUuIElmIHRoZSBtb2R1bGUgaXMgbmV3LCB0aGVuIF9fbmFtZV9fCi0gICAgaXMgc2V0IHRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgbWV0aG9kLCBfX2xvYWRlcl9fIGlzIHNldCB0byBzZWxmLCBhbmQKLSAgICBfX3BhY2thZ2VfXyBpcyBzZXQgYWNjb3JkaW5nbHkgKGlmIHNlbGYuaXNfcGFja2FnZSgpIGlzIGRlZmluZWQpIHdpbGwgYmUgc2V0Ci0gICAgYmVmb3JlIGl0IGlzIHBhc3NlZCB0byB0aGUgZGVjb3JhdGVkIGZ1bmN0aW9uIChpZiBzZWxmLmlzX3BhY2thZ2UoKSBkb2VzCi0gICAgbm90IHdvcmsgZm9yIHRoZSBtb2R1bGUgaXQgd2lsbCBiZSBzZXQgcG9zdC1sb2FkKS4KLQotICAgIElmIGFuIGV4Y2VwdGlvbiBpcyByYWlzZWQgYW5kIHRoZSBkZWNvcmF0b3IgY3JlYXRlZCB0aGUgbW9kdWxlIGl0IGlzCi0gICAgc3Vic2VxdWVudGx5IHJlbW92ZWQgZnJvbSBzeXMubW9kdWxlcy4KLQotICAgIFRoZSBkZWNvcmF0b3IgYXNzdW1lcyB0aGF0IHRoZSBkZWNvcmF0ZWQgZnVuY3Rpb24gdGFrZXMgdGhlIG1vZHVsZSBuYW1lIGFzCi0gICAgdGhlIHNlY29uZCBhcmd1bWVudC4KLQotICAgICIiIgotICAgIGRlZiBtb2R1bGVfZm9yX2xvYWRlcl93cmFwcGVyKHNlbGYsIGZ1bGxuYW1lLCAqYXJncywgKiprd2FyZ3MpOgotICAgICAgICBtb2R1bGUgPSBzeXMubW9kdWxlcy5nZXQoZnVsbG5hbWUpCi0gICAgICAgIGlzX3JlbG9hZCA9IG1vZHVsZSBpcyBub3QgTm9uZQotICAgICAgICBpZiBub3QgaXNfcmVsb2FkOgotICAgICAgICAgICAgIyBUaGlzIG11c3QgYmUgZG9uZSBiZWZvcmUgb3BlbigpIGlzIGNhbGxlZCBhcyB0aGUgJ2lvJyBtb2R1bGUKLSAgICAgICAgICAgICMgaW1wbGljaXRseSBpbXBvcnRzICdsb2NhbGUnIGFuZCB3b3VsZCBvdGhlcndpc2UgdHJpZ2dlciBhbgotICAgICAgICAgICAgIyBpbmZpbml0ZSBsb29wLgotICAgICAgICAgICAgbW9kdWxlID0gbmV3X21vZHVsZShmdWxsbmFtZSkKLSAgICAgICAgICAgICMgVGhpcyBtdXN0IGJlIGRvbmUgYmVmb3JlIHB1dHRpbmcgdGhlIG1vZHVsZSBpbiBzeXMubW9kdWxlcwotICAgICAgICAgICAgIyAob3RoZXJ3aXNlIGFuIG9wdGltaXphdGlvbiBzaG9ydGN1dCBpbiBpbXBvcnQuYyBiZWNvbWVzIHdyb25nKQotICAgICAgICAgICAgbW9kdWxlLl9faW5pdGlhbGl6aW5nX18gPSBUcnVlCi0gICAgICAgICAgICBzeXMubW9kdWxlc1tmdWxsbmFtZV0gPSBtb2R1bGUKLSAgICAgICAgICAgIG1vZHVsZS5fX2xvYWRlcl9fID0gc2VsZgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGlzX3BhY2thZ2UgPSBzZWxmLmlzX3BhY2thZ2UoZnVsbG5hbWUpCi0gICAgICAgICAgICBleGNlcHQgKEltcG9ydEVycm9yLCBBdHRyaWJ1dGVFcnJvcik6Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBpZiBpc19wYWNrYWdlOgotICAgICAgICAgICAgICAgICAgICBtb2R1bGUuX19wYWNrYWdlX18gPSBmdWxsbmFtZQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIG1vZHVsZS5fX3BhY2thZ2VfXyA9IGZ1bGxuYW1lLnJwYXJ0aXRpb24oJy4nKVswXQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgbW9kdWxlLl9faW5pdGlhbGl6aW5nX18gPSBUcnVlCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgICMgSWYgX19wYWNrYWdlX18gd2FzIG5vdCBzZXQgYWJvdmUsIF9faW1wb3J0X18oKSB3aWxsIGRvIGl0IGxhdGVyLgotICAgICAgICAgICAgcmV0dXJuIGZ4bihzZWxmLCBtb2R1bGUsICphcmdzLCAqKmt3YXJncykKLSAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgaWYgbm90IGlzX3JlbG9hZDoKLSAgICAgICAgICAgICAgICBkZWwgc3lzLm1vZHVsZXNbZnVsbG5hbWVdCi0gICAgICAgICAgICByYWlzZQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgbW9kdWxlLl9faW5pdGlhbGl6aW5nX18gPSBGYWxzZQotICAgIF93cmFwKG1vZHVsZV9mb3JfbG9hZGVyX3dyYXBwZXIsIGZ4bikKLSAgICByZXR1cm4gbW9kdWxlX2Zvcl9sb2FkZXJfd3JhcHBlcgotCi0KIGRlZiBfY2hlY2tfbmFtZShtZXRob2QpOgogICAgICIiIkRlY29yYXRvciB0byB2ZXJpZnkgdGhhdCB0aGUgbW9kdWxlIGJlaW5nIHJlcXVlc3RlZCBtYXRjaGVzIHRoZSBvbmUgdGhlCiAgICAgbG9hZGVyIGNhbiBoYW5kbGUuCkBAIC01ODAsNyArNTM1LDcgQEAKICAgICAgICAgaWYgbmFtZSBpcyBOb25lOgogICAgICAgICAgICAgbmFtZSA9IHNlbGYubmFtZQogICAgICAgICBlbGlmIHNlbGYubmFtZSAhPSBuYW1lOgotICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoImxvYWRlciBjYW5ub3QgaGFuZGxlICVzIiAlIG5hbWUsIG5hbWU9bmFtZSkKKyAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCdsb2FkZXIgY2Fubm90IGhhbmRsZSAlcycgJSBuYW1lLCBuYW1lPW5hbWUpCiAgICAgICAgIHJldHVybiBtZXRob2Qoc2VsZiwgbmFtZSwgKmFyZ3MsICoqa3dhcmdzKQogICAgIF93cmFwKF9jaGVja19uYW1lX3dyYXBwZXIsIG1ldGhvZCkKICAgICByZXR1cm4gX2NoZWNrX25hbWVfd3JhcHBlcgpAQCAtNTkwLDcgKzU0NSw3IEBACiAgICAgIiIiRGVjb3JhdG9yIHRvIHZlcmlmeSB0aGUgbmFtZWQgbW9kdWxlIGlzIGJ1aWx0LWluLiIiIgogICAgIGRlZiBfcmVxdWlyZXNfYnVpbHRpbl93cmFwcGVyKHNlbGYsIGZ1bGxuYW1lKToKICAgICAgICAgaWYgZnVsbG5hbWUgbm90IGluIHN5cy5idWlsdGluX21vZHVsZV9uYW1lczoKLSAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCJ7fSBpcyBub3QgYSBidWlsdC1pbiBtb2R1bGUiLmZvcm1hdChmdWxsbmFtZSksCisgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcigneyFyfSBpcyBub3QgYSBidWlsdC1pbiBtb2R1bGUnLmZvcm1hdChmdWxsbmFtZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPWZ1bGxuYW1lKQogICAgICAgICByZXR1cm4gZnhuKHNlbGYsIGZ1bGxuYW1lKQogICAgIF93cmFwKF9yZXF1aXJlc19idWlsdGluX3dyYXBwZXIsIGZ4bikKQEAgLTYwMSw3ICs1NTYsNyBAQAogICAgICIiIkRlY29yYXRvciB0byB2ZXJpZnkgdGhlIG5hbWVkIG1vZHVsZSBpcyBmcm96ZW4uIiIiCiAgICAgZGVmIF9yZXF1aXJlc19mcm96ZW5fd3JhcHBlcihzZWxmLCBmdWxsbmFtZSk6CiAgICAgICAgIGlmIG5vdCBfaW1wLmlzX2Zyb3plbihmdWxsbmFtZSk6Ci0gICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcigie30gaXMgbm90IGEgZnJvemVuIG1vZHVsZSIuZm9ybWF0KGZ1bGxuYW1lKSwKKyAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCd7IXJ9IGlzIG5vdCBhIGZyb3plbiBtb2R1bGUnLmZvcm1hdChmdWxsbmFtZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPWZ1bGxuYW1lKQogICAgICAgICByZXR1cm4gZnhuKHNlbGYsIGZ1bGxuYW1lKQogICAgIF93cmFwKF9yZXF1aXJlc19mcm96ZW5fd3JhcHBlciwgZnhuKQpAQCAtNjEwLDE3ICs1NjUsNjgyIEBACiAKIGRlZiBfZmluZF9tb2R1bGVfc2hpbShzZWxmLCBmdWxsbmFtZSk6CiAgICAgIiIiVHJ5IHRvIGZpbmQgYSBsb2FkZXIgZm9yIHRoZSBzcGVjaWZpZWQgbW9kdWxlIGJ5IGRlbGVnYXRpbmcgdG8KLSAgICBzZWxmLmZpbmRfbG9hZGVyKCkuIiIiCisgICAgc2VsZi5maW5kX2xvYWRlcigpLgorCisgICAgVGhpcyBtZXRob2QgaXMgZGVwcmVjYXRlZCBpbiBmYXZvciBvZiBmaW5kZXIuZmluZF9zcGVjKCkuCisKKyAgICAiIiIKICAgICAjIENhbGwgZmluZF9sb2FkZXIoKS4gSWYgaXQgcmV0dXJucyBhIHN0cmluZyAoaW5kaWNhdGluZyB0aGlzCiAgICAgIyBpcyBhIG5hbWVzcGFjZSBwYWNrYWdlIHBvcnRpb24pLCBnZW5lcmF0ZSBhIHdhcm5pbmcgYW5kCiAgICAgIyByZXR1cm4gTm9uZS4KICAgICBsb2FkZXIsIHBvcnRpb25zID0gc2VsZi5maW5kX2xvYWRlcihmdWxsbmFtZSkKICAgICBpZiBsb2FkZXIgaXMgTm9uZSBhbmQgbGVuKHBvcnRpb25zKToKLSAgICAgICAgbXNnID0gIk5vdCBpbXBvcnRpbmcgZGlyZWN0b3J5IHt9OiBtaXNzaW5nIF9faW5pdF9fIgorICAgICAgICBtc2cgPSAnTm90IGltcG9ydGluZyBkaXJlY3Rvcnkge306IG1pc3NpbmcgX19pbml0X18nCiAgICAgICAgIF93YXJuaW5ncy53YXJuKG1zZy5mb3JtYXQocG9ydGlvbnNbMF0pLCBJbXBvcnRXYXJuaW5nKQogICAgIHJldHVybiBsb2FkZXIKIAogCitkZWYgX2xvYWRfbW9kdWxlX3NoaW0oc2VsZiwgZnVsbG5hbWUpOgorICAgICIiIkxvYWQgdGhlIHNwZWNpZmllZCBtb2R1bGUgaW50byBzeXMubW9kdWxlcyBhbmQgcmV0dXJuIGl0LgorCisgICAgVGhpcyBtZXRob2QgaXMgZGVwcmVjYXRlZC4gIFVzZSBsb2FkZXIuZXhlY19tb2R1bGUgaW5zdGVhZC4KKworICAgICIiIgorICAgIHNwZWMgPSBzcGVjX2Zyb21fbG9hZGVyKGZ1bGxuYW1lLCBzZWxmKQorICAgIG1ldGhvZHMgPSBfU3BlY01ldGhvZHMoc3BlYykKKyAgICBpZiBmdWxsbmFtZSBpbiBzeXMubW9kdWxlczoKKyAgICAgICAgbW9kdWxlID0gc3lzLm1vZHVsZXNbZnVsbG5hbWVdCisgICAgICAgIG1ldGhvZHMuZXhlYyhtb2R1bGUpCisgICAgICAgIHJldHVybiBzeXMubW9kdWxlc1tmdWxsbmFtZV0KKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gbWV0aG9kcy5sb2FkKCkKKworCitkZWYgX3ZhbGlkYXRlX2J5dGVjb2RlX2hlYWRlcihkYXRhLCBzb3VyY2Vfc3RhdHM9Tm9uZSwgbmFtZT1Ob25lLCBwYXRoPU5vbmUpOgorICAgICIiIlZhbGlkYXRlIHRoZSBoZWFkZXIgb2YgdGhlIHBhc3NlZC1pbiBieXRlY29kZSBhZ2FpbnN0IHNvdXJjZV9zdGF0cyAoaWYKKyAgICBnaXZlbikgYW5kIHJldHVybmluZyB0aGUgYnl0ZWNvZGUgdGhhdCBjYW4gYmUgY29tcGlsZWQgYnkgY29tcGlsZSgpLgorCisgICAgQWxsIG90aGVyIGFyZ3VtZW50cyBhcmUgdXNlZCB0byBlbmhhbmNlIGVycm9yIHJlcG9ydGluZy4KKworICAgIEltcG9ydEVycm9yIGlzIHJhaXNlZCB3aGVuIHRoZSBtYWdpYyBudW1iZXIgaXMgaW5jb3JyZWN0IG9yIHRoZSBieXRlY29kZSBpcworICAgIGZvdW5kIHRvIGJlIHN0YWxlLiBFT0ZFcnJvciBpcyByYWlzZWQgd2hlbiB0aGUgZGF0YSBpcyBmb3VuZCB0byBiZQorICAgIHRydW5jYXRlZC4KKworICAgICIiIgorICAgIGV4Y19kZXRhaWxzID0ge30KKyAgICBpZiBuYW1lIGlzIG5vdCBOb25lOgorICAgICAgICBleGNfZGV0YWlsc1snbmFtZSddID0gbmFtZQorICAgIGVsc2U6CisgICAgICAgICMgVG8gcHJldmVudCBoYXZpbmcgdG8gbWFrZSBhbGwgbWVzc2FnZXMgaGF2ZSBhIGNvbmRpdGlvbmFsIG5hbWUuCisgICAgICAgIG5hbWUgPSAnPGJ5dGVjb2RlPicKKyAgICBpZiBwYXRoIGlzIG5vdCBOb25lOgorICAgICAgICBleGNfZGV0YWlsc1sncGF0aCddID0gcGF0aAorICAgIG1hZ2ljID0gZGF0YVs6NF0KKyAgICByYXdfdGltZXN0YW1wID0gZGF0YVs0OjhdCisgICAgcmF3X3NpemUgPSBkYXRhWzg6MTJdCisgICAgaWYgbWFnaWMgIT0gTUFHSUNfTlVNQkVSOgorICAgICAgICBtZXNzYWdlID0gJ2JhZCBtYWdpYyBudW1iZXIgaW4geyFyfTogeyFyfScuZm9ybWF0KG5hbWUsIG1hZ2ljKQorICAgICAgICBfdmVyYm9zZV9tZXNzYWdlKCd7fScsIG1lc3NhZ2UpCisgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKG1lc3NhZ2UsICoqZXhjX2RldGFpbHMpCisgICAgZWxpZiBsZW4ocmF3X3RpbWVzdGFtcCkgIT0gNDoKKyAgICAgICAgbWVzc2FnZSA9ICdyZWFjaGVkIEVPRiB3aGlsZSByZWFkaW5nIHRpbWVzdGFtcCBpbiB7IXJ9Jy5mb3JtYXQobmFtZSkKKyAgICAgICAgX3ZlcmJvc2VfbWVzc2FnZSgne30nLCBtZXNzYWdlKQorICAgICAgICByYWlzZSBFT0ZFcnJvcihtZXNzYWdlKQorICAgIGVsaWYgbGVuKHJhd19zaXplKSAhPSA0OgorICAgICAgICBtZXNzYWdlID0gJ3JlYWNoZWQgRU9GIHdoaWxlIHJlYWRpbmcgc2l6ZSBvZiBzb3VyY2UgaW4geyFyfScuZm9ybWF0KG5hbWUpCisgICAgICAgIF92ZXJib3NlX21lc3NhZ2UoJ3t9JywgbWVzc2FnZSkKKyAgICAgICAgcmFpc2UgRU9GRXJyb3IobWVzc2FnZSkKKyAgICBpZiBzb3VyY2Vfc3RhdHMgaXMgbm90IE5vbmU6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNvdXJjZV9tdGltZSA9IGludChzb3VyY2Vfc3RhdHNbJ210aW1lJ10pCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIF9yX2xvbmcocmF3X3RpbWVzdGFtcCkgIT0gc291cmNlX210aW1lOgorICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSAnYnl0ZWNvZGUgaXMgc3RhbGUgZm9yIHshcn0nLmZvcm1hdChuYW1lKQorICAgICAgICAgICAgICAgIF92ZXJib3NlX21lc3NhZ2UoJ3t9JywgbWVzc2FnZSkKKyAgICAgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcihtZXNzYWdlLCAqKmV4Y19kZXRhaWxzKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzb3VyY2Vfc2l6ZSA9IHNvdXJjZV9zdGF0c1snc2l6ZSddICYgMHhGRkZGRkZGRgorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBfcl9sb25nKHJhd19zaXplKSAhPSBzb3VyY2Vfc2l6ZToKKyAgICAgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcignYnl0ZWNvZGUgaXMgc3RhbGUgZm9yIHshcn0nLmZvcm1hdChuYW1lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKmV4Y19kZXRhaWxzKQorICAgIHJldHVybiBkYXRhWzEyOl0KKworCitkZWYgX2NvbXBpbGVfYnl0ZWNvZGUoZGF0YSwgbmFtZT1Ob25lLCBieXRlY29kZV9wYXRoPU5vbmUsIHNvdXJjZV9wYXRoPU5vbmUpOgorICAgICIiIkNvbXBpbGUgYnl0ZWNvZGUgYXMgcmV0dXJuZWQgYnkgX3ZhbGlkYXRlX2J5dGVjb2RlX2hlYWRlcigpLiIiIgorICAgIGNvZGUgPSBtYXJzaGFsLmxvYWRzKGRhdGEpCisgICAgaWYgaXNpbnN0YW5jZShjb2RlLCBfY29kZV90eXBlKToKKyAgICAgICAgX3ZlcmJvc2VfbWVzc2FnZSgnY29kZSBvYmplY3QgZnJvbSB7IXJ9JywgYnl0ZWNvZGVfcGF0aCkKKyAgICAgICAgaWYgc291cmNlX3BhdGggaXMgbm90IE5vbmU6CisgICAgICAgICAgICBfaW1wLl9maXhfY29fZmlsZW5hbWUoY29kZSwgc291cmNlX3BhdGgpCisgICAgICAgIHJldHVybiBjb2RlCisgICAgZWxzZToKKyAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoJ05vbi1jb2RlIG9iamVjdCBpbiB7IXJ9Jy5mb3JtYXQoYnl0ZWNvZGVfcGF0aCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9bmFtZSwgcGF0aD1ieXRlY29kZV9wYXRoKQorCitkZWYgX2NvZGVfdG9fYnl0ZWNvZGUoY29kZSwgbXRpbWU9MCwgc291cmNlX3NpemU9MCk6CisgICAgIiIiQ29tcGlsZSBhIGNvZGUgb2JqZWN0IGludG8gYnl0ZWNvZGUgZm9yIHdyaXRpbmcgb3V0IHRvIGEgYnl0ZS1jb21waWxlZAorICAgIGZpbGUuIiIiCisgICAgZGF0YSA9IGJ5dGVhcnJheShNQUdJQ19OVU1CRVIpCisgICAgZGF0YS5leHRlbmQoX3dfbG9uZyhtdGltZSkpCisgICAgZGF0YS5leHRlbmQoX3dfbG9uZyhzb3VyY2Vfc2l6ZSkpCisgICAgZGF0YS5leHRlbmQobWFyc2hhbC5kdW1wcyhjb2RlKSkKKyAgICByZXR1cm4gZGF0YQorCisKK2RlZiBkZWNvZGVfc291cmNlKHNvdXJjZV9ieXRlcyk6CisgICAgIiIiRGVjb2RlIGJ5dGVzIHJlcHJlc2VudGluZyBzb3VyY2UgY29kZSBhbmQgcmV0dXJuIHRoZSBzdHJpbmcuCisKKyAgICBVbml2ZXJzYWwgbmV3bGluZSBzdXBwb3J0IGlzIHVzZWQgaW4gdGhlIGRlY29kaW5nLgorICAgICIiIgorICAgIGltcG9ydCB0b2tlbml6ZSAgIyBUbyBhdm9pZCBib290c3RyYXAgaXNzdWVzLgorICAgIHNvdXJjZV9ieXRlc19yZWFkbGluZSA9IF9pby5CeXRlc0lPKHNvdXJjZV9ieXRlcykucmVhZGxpbmUKKyAgICBlbmNvZGluZyA9IHRva2VuaXplLmRldGVjdF9lbmNvZGluZyhzb3VyY2VfYnl0ZXNfcmVhZGxpbmUpCisgICAgbmV3bGluZV9kZWNvZGVyID0gX2lvLkluY3JlbWVudGFsTmV3bGluZURlY29kZXIoTm9uZSwgVHJ1ZSkKKyAgICByZXR1cm4gbmV3bGluZV9kZWNvZGVyLmRlY29kZShzb3VyY2VfYnl0ZXMuZGVjb2RlKGVuY29kaW5nWzBdKSkKKworCisjIE1vZHVsZSBzcGVjaWZpY2F0aW9ucyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2RlZiBfbW9kdWxlX3JlcHIobW9kdWxlKToKKyAgICAjIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiBNb2R1bGVUeXBlX19yZXByX18oKS4KKyAgICBsb2FkZXIgPSBnZXRhdHRyKG1vZHVsZSwgJ19fbG9hZGVyX18nLCBOb25lKQorICAgIGlmIGhhc2F0dHIobG9hZGVyLCAnbW9kdWxlX3JlcHInKToKKyAgICAgICAgIyBBcyBzb29uIGFzIEJ1aWx0aW5JbXBvcnRlciwgRnJvemVuSW1wb3J0ZXIsIGFuZCBOYW1lc3BhY2VMb2FkZXIKKyAgICAgICAgIyBkcm9wIHRoZWlyIGltcGxlbWVudGF0aW9ucyBmb3IgbW9kdWxlX3JlcHIuIHdlIGNhbiBhZGQgYQorICAgICAgICAjIGRlcHJlY2F0aW9uIHdhcm5pbmcgaGVyZS4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIGxvYWRlci5tb2R1bGVfcmVwcihtb2R1bGUpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICBwYXNzCisgICAgdHJ5OgorICAgICAgICBzcGVjID0gbW9kdWxlLl9fc3BlY19fCisgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICBwYXNzCisgICAgZWxzZToKKyAgICAgICAgaWYgc3BlYyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBfU3BlY01ldGhvZHMoc3BlYykubW9kdWxlX3JlcHIoKQorCisgICAgIyBXZSBjb3VsZCB1c2UgbW9kdWxlLl9fY2xhc3NfXy5fX25hbWVfXyBpbnN0ZWFkIG9mICdtb2R1bGUnIGluIHRoZQorICAgICMgdmFyaW91cyByZXByIHBlcm11dGF0aW9ucy4KKyAgICB0cnk6CisgICAgICAgIG5hbWUgPSBtb2R1bGUuX19uYW1lX18KKyAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgIG5hbWUgPSAnPycKKyAgICB0cnk6CisgICAgICAgIGZpbGVuYW1lID0gbW9kdWxlLl9fZmlsZV9fCisgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICBpZiBsb2FkZXIgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiAnPG1vZHVsZSB7IXJ9PicuZm9ybWF0KG5hbWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gJzxtb2R1bGUgeyFyfSAoeyFyfSk+Jy5mb3JtYXQobmFtZSwgbG9hZGVyKQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiAnPG1vZHVsZSB7IXJ9IGZyb20geyFyfT4nLmZvcm1hdChuYW1lLCBmaWxlbmFtZSkKKworCitjbGFzcyBfaW5zdGFsbGVkX3NhZmVseToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2R1bGUpOgorICAgICAgICBzZWxmLl9tb2R1bGUgPSBtb2R1bGUKKyAgICAgICAgc2VsZi5fc3BlYyA9IG1vZHVsZS5fX3NwZWNfXworCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgIyBUaGlzIG11c3QgYmUgZG9uZSBiZWZvcmUgcHV0dGluZyB0aGUgbW9kdWxlIGluIHN5cy5tb2R1bGVzCisgICAgICAgICMgKG90aGVyd2lzZSBhbiBvcHRpbWl6YXRpb24gc2hvcnRjdXQgaW4gaW1wb3J0LmMgYmVjb21lcworICAgICAgICAjIHdyb25nKQorICAgICAgICBzZWxmLl9zcGVjLl9pbml0aWFsaXppbmcgPSBUcnVlCisgICAgICAgIHN5cy5tb2R1bGVzW3NlbGYuX3NwZWMubmFtZV0gPSBzZWxmLl9tb2R1bGUKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqYXJncyk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNwZWMgPSBzZWxmLl9zcGVjCisgICAgICAgICAgICBpZiBhbnkoYXJnIGlzIG5vdCBOb25lIGZvciBhcmcgaW4gYXJncyk6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBkZWwgc3lzLm1vZHVsZXNbc3BlYy5uYW1lXQorICAgICAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBfdmVyYm9zZV9tZXNzYWdlKCdpbXBvcnQgeyFyfSAjIHshcn0nLCBzcGVjLm5hbWUsIHNwZWMubG9hZGVyKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5fc3BlYy5faW5pdGlhbGl6aW5nID0gRmFsc2UKKworCitjbGFzcyBNb2R1bGVTcGVjOgorICAgICIiIlRoZSBzcGVjaWZpY2F0aW9uIGZvciBhIG1vZHVsZSwgdXNlZCBmb3IgbG9hZGluZy4KKworICAgIEEgbW9kdWxlJ3Mgc3BlYyBpcyB0aGUgc291cmNlIGZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbW9kdWxlLiAgRm9yCisgICAgZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlIG1vZHVsZSwgaW5jbHVkaW5nIHNvdXJjZSwgdXNlIHRoZSBzcGVjJ3MKKyAgICBsb2FkZXIuCisKKyAgICBgbmFtZWAgaXMgdGhlIGFic29sdXRlIG5hbWUgb2YgdGhlIG1vZHVsZS4gIGBsb2FkZXJgIGlzIHRoZSBsb2FkZXIKKyAgICB0byB1c2Ugd2hlbiBsb2FkaW5nIHRoZSBtb2R1bGUuICBgcGFyZW50YCBpcyB0aGUgbmFtZSBvZiB0aGUKKyAgICBwYWNrYWdlIHRoZSBtb2R1bGUgaXMgaW4uICBUaGUgcGFyZW50IGlzIGRlcml2ZWQgZnJvbSB0aGUgbmFtZS4KKworICAgIGBpc19wYWNrYWdlYCBkZXRlcm1pbmVzIGlmIHRoZSBtb2R1bGUgaXMgY29uc2lkZXJlZCBhIHBhY2thZ2Ugb3IKKyAgICBub3QuICBPbiBtb2R1bGVzIHRoaXMgaXMgcmVmbGVjdGVkIGJ5IHRoZSBgX19wYXRoX19gIGF0dHJpYnV0ZS4KKworICAgIGBvcmlnaW5gIGlzIHRoZSBzcGVjaWZpYyBsb2NhdGlvbiB1c2VkIGJ5IHRoZSBsb2FkZXIgZnJvbSB3aGljaCB0bworICAgIGxvYWQgdGhlIG1vZHVsZSwgaWYgdGhhdCBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUuICBXaGVuIGZpbGVuYW1lIGlzCisgICAgc2V0LCBvcmlnaW4gd2lsbCBtYXRjaC4KKworICAgIGBoYXNfbG9jYXRpb25gIGluZGljYXRlcyB0aGF0IGEgc3BlYydzICJvcmlnaW4iIHJlZmxlY3RzIGEgbG9jYXRpb24uCisgICAgV2hlbiB0aGlzIGlzIFRydWUsIGBfX2ZpbGVfX2AgYXR0cmlidXRlIG9mIHRoZSBtb2R1bGUgaXMgc2V0LgorCisgICAgYGNhY2hlZGAgaXMgdGhlIGxvY2F0aW9uIG9mIHRoZSBjYWNoZWQgYnl0ZWNvZGUgZmlsZSwgaWYgYW55LiAgSXQKKyAgICBjb3JyZXNwb25kcyB0byB0aGUgYF9fY2FjaGVkX19gIGF0dHJpYnV0ZS4KKworICAgIGBzdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9uc2AgaXMgdGhlIHNlcXVlbmNlIG9mIHBhdGggZW50cmllcyB0bworICAgIHNlYXJjaCB3aGVuIGltcG9ydGluZyBzdWJtb2R1bGVzLiAgSWYgc2V0LCBpc19wYWNrYWdlIHNob3VsZCBiZQorICAgIFRydWUtLWFuZCBGYWxzZSBvdGhlcndpc2UuCisKKyAgICBQYWNrYWdlcyBhcmUgc2ltcGx5IG1vZHVsZXMgdGhhdCAobWF5KSBoYXZlIHN1Ym1vZHVsZXMuICBJZiBhIHNwZWMKKyAgICBoYXMgYSBub24tTm9uZSB2YWx1ZSBpbiBgc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnNgLCB0aGUgaW1wb3J0CisgICAgc3lzdGVtIHdpbGwgY29uc2lkZXIgbW9kdWxlcyBsb2FkZWQgZnJvbSB0aGUgc3BlYyBhcyBwYWNrYWdlcy4KKworICAgIE9ubHkgZmluZGVycyAoc2VlIGltcG9ydGxpYi5hYmMuTWV0YVBhdGhGaW5kZXIgYW5kCisgICAgaW1wb3J0bGliLmFiYy5QYXRoRW50cnlGaW5kZXIpIHNob3VsZCBtb2RpZnkgTW9kdWxlU3BlYyBpbnN0YW5jZXMuCisKKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBsb2FkZXIsICosIG9yaWdpbj1Ob25lLCBsb2FkZXJfc3RhdGU9Tm9uZSwKKyAgICAgICAgICAgICAgICAgaXNfcGFja2FnZT1Ob25lKToKKyAgICAgICAgc2VsZi5uYW1lID0gbmFtZQorICAgICAgICBzZWxmLmxvYWRlciA9IGxvYWRlcgorICAgICAgICBzZWxmLm9yaWdpbiA9IG9yaWdpbgorICAgICAgICBzZWxmLmxvYWRlcl9zdGF0ZSA9IGxvYWRlcl9zdGF0ZQorICAgICAgICBzZWxmLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zID0gW10gaWYgaXNfcGFja2FnZSBlbHNlIE5vbmUKKworICAgICAgICAjIGZpbGUtbG9jYXRpb24gYXR0cmlidXRlcworICAgICAgICBzZWxmLl9zZXRfZmlsZWF0dHIgPSBGYWxzZQorICAgICAgICBzZWxmLl9jYWNoZWQgPSBOb25lCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIGFyZ3MgPSBbJ25hbWU9eyFyfScuZm9ybWF0KHNlbGYubmFtZSksCisgICAgICAgICAgICAgICAgJ2xvYWRlcj17IXJ9Jy5mb3JtYXQoc2VsZi5sb2FkZXIpXQorICAgICAgICBpZiBzZWxmLm9yaWdpbiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGFyZ3MuYXBwZW5kKCdvcmlnaW49eyFyfScuZm9ybWF0KHNlbGYub3JpZ2luKSkKKyAgICAgICAgaWYgc2VsZi5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGFyZ3MuYXBwZW5kKCdzdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucz17fScKKyAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JtYXQoc2VsZi5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucykpCisgICAgICAgIHJldHVybiAne30oe30pJy5mb3JtYXQoc2VsZi5fX2NsYXNzX18uX19uYW1lX18sICcsICcuam9pbihhcmdzKSkKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBzbXNsID0gc2VsZi5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucworICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gKHNlbGYubmFtZSA9PSBvdGhlci5uYW1lIGFuZAorICAgICAgICAgICAgICAgICAgICBzZWxmLmxvYWRlciA9PSBvdGhlci5sb2FkZXIgYW5kCisgICAgICAgICAgICAgICAgICAgIHNlbGYub3JpZ2luID09IG90aGVyLm9yaWdpbiBhbmQKKyAgICAgICAgICAgICAgICAgICAgc21zbCA9PSBvdGhlci5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucyBhbmQKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5jYWNoZWQgPT0gb3RoZXIuY2FjaGVkIGFuZAorICAgICAgICAgICAgICAgICAgICBzZWxmLmhhc19sb2NhdGlvbiA9PSBvdGhlci5oYXNfbG9jYXRpb24pCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGNhY2hlZChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fY2FjaGVkIGlzIE5vbmU6CisgICAgICAgICAgICBpZiBzZWxmLm9yaWdpbiBpcyBub3QgTm9uZSBhbmQgc2VsZi5fc2V0X2ZpbGVhdHRyOgorICAgICAgICAgICAgICAgIGZpbGVuYW1lID0gc2VsZi5vcmlnaW4KKyAgICAgICAgICAgICAgICBpZiBmaWxlbmFtZS5lbmRzd2l0aCh0dXBsZShTT1VSQ0VfU1VGRklYRVMpKToKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fY2FjaGVkID0gY2FjaGVfZnJvbV9zb3VyY2UoZmlsZW5hbWUpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBOb3RJbXBsZW1lbnRlZEVycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgIGVsaWYgZmlsZW5hbWUuZW5kc3dpdGgodHVwbGUoQllURUNPREVfU1VGRklYRVMpKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fY2FjaGVkID0gZmlsZW5hbWUKKyAgICAgICAgcmV0dXJuIHNlbGYuX2NhY2hlZAorCisgICAgQGNhY2hlZC5zZXR0ZXIKKyAgICBkZWYgY2FjaGVkKHNlbGYsIGNhY2hlZCk6CisgICAgICAgIHNlbGYuX2NhY2hlZCA9IGNhY2hlZAorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHBhcmVudChzZWxmKToKKyAgICAgICAgIiIiVGhlIG5hbWUgb2YgdGhlIG1vZHVsZSdzIHBhcmVudC4iIiIKKyAgICAgICAgaWYgc2VsZi5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucyBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYubmFtZS5ycGFydGl0aW9uKCcuJylbMF0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLm5hbWUKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBoYXNfbG9jYXRpb24oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9zZXRfZmlsZWF0dHIKKworICAgIEBoYXNfbG9jYXRpb24uc2V0dGVyCisgICAgZGVmIGhhc19sb2NhdGlvbihzZWxmLCB2YWx1ZSk6CisgICAgICAgIHNlbGYuX3NldF9maWxlYXR0ciA9IGJvb2wodmFsdWUpCisKKworZGVmIHNwZWNfZnJvbV9sb2FkZXIobmFtZSwgbG9hZGVyLCAqLCBvcmlnaW49Tm9uZSwgaXNfcGFja2FnZT1Ob25lKToKKyAgICAiIiJSZXR1cm4gYSBtb2R1bGUgc3BlYyBiYXNlZCBvbiB2YXJpb3VzIGxvYWRlciBtZXRob2RzLiIiIgorICAgIGlmIGhhc2F0dHIobG9hZGVyLCAnZ2V0X2ZpbGVuYW1lJyk6CisgICAgICAgIGlmIGlzX3BhY2thZ2UgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBzcGVjX2Zyb21fZmlsZV9sb2NhdGlvbihuYW1lLCBsb2FkZXI9bG9hZGVyKQorICAgICAgICBzZWFyY2ggPSBbXSBpZiBpc19wYWNrYWdlIGVsc2UgTm9uZQorICAgICAgICByZXR1cm4gc3BlY19mcm9tX2ZpbGVfbG9jYXRpb24obmFtZSwgbG9hZGVyPWxvYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zPXNlYXJjaCkKKworICAgIGlmIGlzX3BhY2thZ2UgaXMgTm9uZToKKyAgICAgICAgaWYgaGFzYXR0cihsb2FkZXIsICdpc19wYWNrYWdlJyk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaXNfcGFja2FnZSA9IGxvYWRlci5pc19wYWNrYWdlKG5hbWUpCisgICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgICAgICAgICAgaXNfcGFja2FnZSA9IE5vbmUgICMgYWthLCB1bmRlZmluZWQKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgdGhlIGRlZmF1bHQKKyAgICAgICAgICAgIGlzX3BhY2thZ2UgPSBGYWxzZQorCisgICAgcmV0dXJuIE1vZHVsZVNwZWMobmFtZSwgbG9hZGVyLCBvcmlnaW49b3JpZ2luLCBpc19wYWNrYWdlPWlzX3BhY2thZ2UpCisKKworX1BPUFVMQVRFID0gb2JqZWN0KCkKKworCitkZWYgc3BlY19mcm9tX2ZpbGVfbG9jYXRpb24obmFtZSwgbG9jYXRpb249Tm9uZSwgKiwgbG9hZGVyPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnM9X1BPUFVMQVRFKToKKyAgICAiIiJSZXR1cm4gYSBtb2R1bGUgc3BlYyBiYXNlZCBvbiBhIGZpbGUgbG9jYXRpb24uCisKKyAgICBUbyBpbmRpY2F0ZSB0aGF0IHRoZSBtb2R1bGUgaXMgYSBwYWNrYWdlLCBzZXQKKyAgICBzdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucyB0byBhIGxpc3Qgb2YgZGlyZWN0b3J5IHBhdGhzLiAgQW4KKyAgICBlbXB0eSBsaXN0IGlzIHN1ZmZpY2llbnQsIHRob3VnaCBpdHMgbm90IG90aGVyd2lzZSB1c2VmdWwgdG8gdGhlCisgICAgaW1wb3J0IHN5c3RlbS4KKworICAgIFRoZSBsb2FkZXIgbXVzdCB0YWtlIGEgc3BlYyBhcyBpdHMgb25seSBfX2luaXRfXygpIGFyZy4KKworICAgICIiIgorICAgIGlmIGxvY2F0aW9uIGlzIE5vbmU6CisgICAgICAgICMgVGhlIGNhbGxlciBtYXkgc2ltcGx5IHdhbnQgYSBwYXJ0aWFsbHkgcG9wdWxhdGVkIGxvY2F0aW9uLQorICAgICAgICAjIG9yaWVudGVkIHNwZWMuICBTbyB3ZSBzZXQgdGhlIGxvY2F0aW9uIHRvIGEgYm9ndXMgdmFsdWUgYW5kCisgICAgICAgICMgZmlsbCBpbiBhcyBtdWNoIGFzIHdlIGNhbi4KKyAgICAgICAgbG9jYXRpb24gPSAnPHVua25vd24+JworICAgICAgICBpZiBoYXNhdHRyKGxvYWRlciwgJ2dldF9maWxlbmFtZScpOgorICAgICAgICAgICAgIyBFeGVjdXRpb25Mb2FkZXIKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBsb2NhdGlvbiA9IGxvYWRlci5nZXRfZmlsZW5hbWUobmFtZSkKKyAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAjIElmIHRoZSBsb2NhdGlvbiBpcyBvbiB0aGUgZmlsZXN5c3RlbSwgYnV0IGRvZXNuJ3QgYWN0dWFsbHkgZXhpc3QsCisgICAgIyB3ZSBjb3VsZCByZXR1cm4gTm9uZSBoZXJlLCBpbmRpY2F0aW5nIHRoYXQgdGhlIGxvY2F0aW9uIGlzIG5vdAorICAgICMgdmFsaWQuICBIb3dldmVyLCB3ZSBkb24ndCBoYXZlIGEgZ29vZCB3YXkgb2YgdGVzdGluZyBzaW5jZSBhbgorICAgICMgaW5kaXJlY3QgbG9jYXRpb24gKGUuZy4gYSB6aXAgZmlsZSBvciBVUkwpIHdpbGwgbG9vayBsaWtlIGEKKyAgICAjIG5vbi1leGlzdGVudCBmaWxlIHJlbGF0aXZlIHRvIHRoZSBmaWxlc3lzdGVtLgorCisgICAgc3BlYyA9IE1vZHVsZVNwZWMobmFtZSwgbG9hZGVyLCBvcmlnaW49bG9jYXRpb24pCisgICAgc3BlYy5fc2V0X2ZpbGVhdHRyID0gVHJ1ZQorCisgICAgIyBQaWNrIGEgbG9hZGVyIGlmIG9uZSB3YXNuJ3QgcHJvdmlkZWQuCisgICAgaWYgbG9hZGVyIGlzIE5vbmU6CisgICAgICAgIGZvciBsb2FkZXJfY2xhc3MsIHN1ZmZpeGVzIGluIF9nZXRfc3VwcG9ydGVkX2ZpbGVfbG9hZGVycygpOgorICAgICAgICAgICAgaWYgbG9jYXRpb24uZW5kc3dpdGgodHVwbGUoc3VmZml4ZXMpKToKKyAgICAgICAgICAgICAgICBsb2FkZXIgPSBsb2FkZXJfY2xhc3MobmFtZSwgbG9jYXRpb24pCisgICAgICAgICAgICAgICAgc3BlYy5sb2FkZXIgPSBsb2FkZXIKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICMgU2V0IHN1Ym1vZHVsZV9zZWFyY2hfcGF0aHMgYXBwcm9wcmlhdGVseS4KKyAgICBpZiBzdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucyBpcyBfUE9QVUxBVEU6CisgICAgICAgICMgQ2hlY2sgdGhlIGxvYWRlci4KKyAgICAgICAgaWYgaGFzYXR0cihsb2FkZXIsICdpc19wYWNrYWdlJyk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaXNfcGFja2FnZSA9IGxvYWRlci5pc19wYWNrYWdlKG5hbWUpCisgICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBpc19wYWNrYWdlOgorICAgICAgICAgICAgICAgICAgICBzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zID0gW10KKyAgICBlbHNlOgorICAgICAgICBzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zID0gc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMKKyAgICBpZiBzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zID09IFtdOgorICAgICAgICBpZiBsb2NhdGlvbjoKKyAgICAgICAgICAgIGRpcm5hbWUgPSBfcGF0aF9zcGxpdChsb2NhdGlvbilbMF0KKyAgICAgICAgICAgIHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMuYXBwZW5kKGRpcm5hbWUpCisKKyAgICByZXR1cm4gc3BlYworCisKK2RlZiBfc3BlY19mcm9tX21vZHVsZShtb2R1bGUsIGxvYWRlcj1Ob25lLCBvcmlnaW49Tm9uZSk6CisgICAgIyBUaGlzIGZ1bmN0aW9uIGlzIG1lYW50IGZvciB1c2UgaW4gX3NldHVwKCkuCisgICAgdHJ5OgorICAgICAgICBzcGVjID0gbW9kdWxlLl9fc3BlY19fCisgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICBwYXNzCisgICAgZWxzZToKKyAgICAgICAgaWYgc3BlYyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBzcGVjCisKKyAgICBuYW1lID0gbW9kdWxlLl9fbmFtZV9fCisgICAgaWYgbG9hZGVyIGlzIE5vbmU6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGxvYWRlciA9IG1vZHVsZS5fX2xvYWRlcl9fCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICMgbG9hZGVyIHdpbGwgc3RheSBOb25lLgorICAgICAgICAgICAgcGFzcworICAgIHRyeToKKyAgICAgICAgbG9jYXRpb24gPSBtb2R1bGUuX19maWxlX18KKyAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgIGxvY2F0aW9uID0gTm9uZQorICAgIGlmIG9yaWdpbiBpcyBOb25lOgorICAgICAgICBpZiBsb2NhdGlvbiBpcyBOb25lOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG9yaWdpbiA9IGxvYWRlci5fT1JJR0lOCisgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgb3JpZ2luID0gTm9uZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb3JpZ2luID0gbG9jYXRpb24KKyAgICB0cnk6CisgICAgICAgIGNhY2hlZCA9IG1vZHVsZS5fX2NhY2hlZF9fCisgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICBjYWNoZWQgPSBOb25lCisgICAgdHJ5OgorICAgICAgICBzdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucyA9IGxpc3QobW9kdWxlLl9fcGF0aF9fKQorICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMgPSBOb25lCisKKyAgICBzcGVjID0gTW9kdWxlU3BlYyhuYW1lLCBsb2FkZXIsIG9yaWdpbj1vcmlnaW4pCisgICAgc3BlYy5fc2V0X2ZpbGVhdHRyID0gRmFsc2UgaWYgbG9jYXRpb24gaXMgTm9uZSBlbHNlIFRydWUKKyAgICBzcGVjLmNhY2hlZCA9IGNhY2hlZAorICAgIHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMgPSBzdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucworICAgIHJldHVybiBzcGVjCisKKworY2xhc3MgX1NwZWNNZXRob2RzOgorCisgICAgIiIiQ29udmVuaWVuY2Ugd3JhcHBlciBhcm91bmQgc3BlYyBvYmplY3RzIHRvIHByb3ZpZGUgc3BlYy1zcGVjaWZpYworICAgIG1ldGhvZHMuIiIiCisKKyAgICAjIFRoZSB2YXJpb3VzIHNwZWNfZnJvbV8qIGZ1bmN0aW9ucyBjb3VsZCBiZSBtYWRlIGZhY3RvcnkgbWV0aG9kcyBoZXJlLgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNwZWMpOgorICAgICAgICBzZWxmLnNwZWMgPSBzcGVjCisKKyAgICBkZWYgbW9kdWxlX3JlcHIoc2VsZik6CisgICAgICAgICIiIlJldHVybiB0aGUgcmVwciB0byB1c2UgZm9yIHRoZSBtb2R1bGUuIiIiCisgICAgICAgICMgV2UgbW9zdGx5IHJlcGxpY2F0ZSBfbW9kdWxlX3JlcHIoKSB1c2luZyB0aGUgc3BlYyBhdHRyaWJ1dGVzLgorICAgICAgICBzcGVjID0gc2VsZi5zcGVjCisgICAgICAgIG5hbWUgPSAnPycgaWYgc3BlYy5uYW1lIGlzIE5vbmUgZWxzZSBzcGVjLm5hbWUKKyAgICAgICAgaWYgc3BlYy5vcmlnaW4gaXMgTm9uZToKKyAgICAgICAgICAgIGlmIHNwZWMubG9hZGVyIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgcmV0dXJuICc8bW9kdWxlIHshcn0+Jy5mb3JtYXQobmFtZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuICc8bW9kdWxlIHshcn0gKHshcn0pPicuZm9ybWF0KG5hbWUsIHNwZWMubG9hZGVyKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgc3BlYy5oYXNfbG9jYXRpb246CisgICAgICAgICAgICAgICAgcmV0dXJuICc8bW9kdWxlIHshcn0gZnJvbSB7IXJ9PicuZm9ybWF0KG5hbWUsIHNwZWMub3JpZ2luKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gJzxtb2R1bGUgeyFyfSAoe30pPicuZm9ybWF0KHNwZWMubmFtZSwgc3BlYy5vcmlnaW4pCisKKyAgICBkZWYgaW5pdF9tb2R1bGVfYXR0cnMoc2VsZiwgbW9kdWxlLCAqLCBfb3ZlcnJpZGU9RmFsc2UsIF9mb3JjZV9uYW1lPVRydWUpOgorICAgICAgICAiIiJTZXQgdGhlIG1vZHVsZSdzIGF0dHJpYnV0ZXMuCisKKyAgICAgICAgQWxsIG1pc3NpbmcgaW1wb3J0LXJlbGF0ZWQgbW9kdWxlIGF0dHJpYnV0ZXMgd2lsbCBiZSBzZXQuICBIZXJlCisgICAgICAgIGlzIGhvdyB0aGUgc3BlYyBhdHRyaWJ1dGVzIG1hcCBvbnRvIHRoZSBtb2R1bGU6CisKKyAgICAgICAgc3BlYy5uYW1lIC0+IG1vZHVsZS5fX25hbWVfXworICAgICAgICBzcGVjLmxvYWRlciAtPiBtb2R1bGUuX19sb2FkZXJfXworICAgICAgICBzcGVjLnBhcmVudCAtPiBtb2R1bGUuX19wYWNrYWdlX18KKyAgICAgICAgc3BlYyAtPiBtb2R1bGUuX19zcGVjX18KKworICAgICAgICBPcHRpb25hbDoKKyAgICAgICAgc3BlYy5vcmlnaW4gLT4gbW9kdWxlLl9fZmlsZV9fIChpZiBzcGVjLnNldF9maWxlYXR0ciBpcyB0cnVlKQorICAgICAgICBzcGVjLmNhY2hlZCAtPiBtb2R1bGUuX19jYWNoZWRfXyAoaWYgX19maWxlX18gYWxzbyBzZXQpCisgICAgICAgIHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMgLT4gbW9kdWxlLl9fcGF0aF9fIChpZiBzZXQpCisKKyAgICAgICAgIiIiCisgICAgICAgIHNwZWMgPSBzZWxmLnNwZWMKKworICAgICAgICAjIFRoZSBwYXNzZWQgaW4gbW9kdWxlIG1heSBiZSBub3Qgc3VwcG9ydCBhdHRyaWJ1dGUgYXNzaWdubWVudCwKKyAgICAgICAgIyBpbiB3aGljaCBjYXNlIHdlIHNpbXBseSBkb24ndCBzZXQgdGhlIGF0dHJpYnV0ZXMuCisKKyAgICAgICAgIyBfX25hbWVfXworICAgICAgICBpZiAoX292ZXJyaWRlIG9yIF9mb3JjZV9uYW1lIG9yCisgICAgICAgICAgICBnZXRhdHRyKG1vZHVsZSwgJ19fbmFtZV9fJywgTm9uZSkgaXMgTm9uZSk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbW9kdWxlLl9fbmFtZV9fID0gc3BlYy5uYW1lCisgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICMgX19sb2FkZXJfXworICAgICAgICBpZiBfb3ZlcnJpZGUgb3IgZ2V0YXR0cihtb2R1bGUsICdfX2xvYWRlcl9fJywgTm9uZSkgaXMgTm9uZToKKyAgICAgICAgICAgIGxvYWRlciA9IHNwZWMubG9hZGVyCisgICAgICAgICAgICBpZiBsb2FkZXIgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAjIEEgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBoYWNrLgorICAgICAgICAgICAgICAgIGlmIHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGxvYWRlciA9IF9OYW1lc3BhY2VMb2FkZXIuX19uZXdfXyhfTmFtZXNwYWNlTG9hZGVyKQorICAgICAgICAgICAgICAgICAgICBsb2FkZXIuX3BhdGggPSBzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbW9kdWxlLl9fbG9hZGVyX18gPSBsb2FkZXIKKyAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgIyBfX3BhY2thZ2VfXworICAgICAgICBpZiBfb3ZlcnJpZGUgb3IgZ2V0YXR0cihtb2R1bGUsICdfX3BhY2thZ2VfXycsIE5vbmUpIGlzIE5vbmU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbW9kdWxlLl9fcGFja2FnZV9fID0gc3BlYy5wYXJlbnQKKyAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgIyBfX3NwZWNfXworICAgICAgICB0cnk6CisgICAgICAgICAgICBtb2R1bGUuX19zcGVjX18gPSBzcGVjCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICAjIF9fcGF0aF9fCisgICAgICAgIGlmIF9vdmVycmlkZSBvciBnZXRhdHRyKG1vZHVsZSwgJ19fcGF0aF9fJywgTm9uZSkgaXMgTm9uZToKKyAgICAgICAgICAgIGlmIHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBtb2R1bGUuX19wYXRoX18gPSBzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zCisgICAgICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgaWYgc3BlYy5oYXNfbG9jYXRpb246CisgICAgICAgICAgICAjIF9fZmlsZV9fCisgICAgICAgICAgICBpZiBfb3ZlcnJpZGUgb3IgZ2V0YXR0cihtb2R1bGUsICdfX2ZpbGVfXycsIE5vbmUpIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBtb2R1bGUuX19maWxlX18gPSBzcGVjLm9yaWdpbgorICAgICAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICAgICAjIF9fY2FjaGVkX18KKyAgICAgICAgICAgIGlmIF9vdmVycmlkZSBvciBnZXRhdHRyKG1vZHVsZSwgJ19fY2FjaGVkX18nLCBOb25lKSBpcyBOb25lOgorICAgICAgICAgICAgICAgIGlmIHNwZWMuY2FjaGVkIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuX19jYWNoZWRfXyA9IHNwZWMuY2FjaGVkCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiBjcmVhdGUoc2VsZik6CisgICAgICAgICIiIlJldHVybiBhIG5ldyBtb2R1bGUgdG8gYmUgbG9hZGVkLgorCisgICAgICAgIFRoZSBpbXBvcnQtcmVsYXRlZCBtb2R1bGUgYXR0cmlidXRlcyBhcmUgYWxzbyBzZXQgd2l0aCB0aGUKKyAgICAgICAgYXBwcm9wcmlhdGUgdmFsdWVzIGZyb20gdGhlIHNwZWMuCisKKyAgICAgICAgIiIiCisgICAgICAgIHNwZWMgPSBzZWxmLnNwZWMKKyAgICAgICAgIyBUeXBpY2FsbHkgbG9hZGVycyB3aWxsIG5vdCBpbXBsZW1lbnQgY3JlYXRlX21vZHVsZSgpLgorICAgICAgICBpZiBoYXNhdHRyKHNwZWMubG9hZGVyLCAnY3JlYXRlX21vZHVsZScpOgorICAgICAgICAgICAgIyBJZiBjcmVhdGVfbW9kdWxlKCkgcmV0dXJucyBgTm9uZWAgaXQgbWVhbnMgdGhlIGRlZmF1bHQKKyAgICAgICAgICAgICMgbW9kdWxlIGNyZWF0aW9uIHNob3VsZCBiZSB1c2VkLgorICAgICAgICAgICAgbW9kdWxlID0gc3BlYy5sb2FkZXIuY3JlYXRlX21vZHVsZShzcGVjKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbW9kdWxlID0gTm9uZQorICAgICAgICBpZiBtb2R1bGUgaXMgTm9uZToKKyAgICAgICAgICAgICMgVGhpcyBtdXN0IGJlIGRvbmUgYmVmb3JlIG9wZW4oKSBpcyBldmVyIGNhbGxlZCBhcyB0aGUgJ2lvJworICAgICAgICAgICAgIyBtb2R1bGUgaW1wbGljaXRseSBpbXBvcnRzICdsb2NhbGUnIGFuZCB3b3VsZCBvdGhlcndpc2UKKyAgICAgICAgICAgICMgdHJpZ2dlciBhbiBpbmZpbml0ZSBsb29wLgorICAgICAgICAgICAgbW9kdWxlID0gX25ld19tb2R1bGUoc3BlYy5uYW1lKQorICAgICAgICBzZWxmLmluaXRfbW9kdWxlX2F0dHJzKG1vZHVsZSkKKyAgICAgICAgcmV0dXJuIG1vZHVsZQorCisgICAgZGVmIF9leGVjKHNlbGYsIG1vZHVsZSk6CisgICAgICAgICIiIkRvIGV2ZXJ5dGhpbmcgbmVjZXNzYXJ5IHRvIGV4ZWN1dGUgdGhlIG1vZHVsZS4KKworICAgICAgICBUaGUgbmFtZXNwYWNlIG9mIGBtb2R1bGVgIGlzIHVzZWQgYXMgdGhlIHRhcmdldCBvZiBleGVjdXRpb24uCisgICAgICAgIFRoaXMgbWV0aG9kIHVzZXMgdGhlIGxvYWRlcidzIGBleGVjX21vZHVsZSgpYCBtZXRob2QuCisKKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuc3BlYy5sb2FkZXIuZXhlY19tb2R1bGUobW9kdWxlKQorCisgICAgIyBVc2VkIGJ5IGltcG9ydGxpYi5yZWxvYWQoKSBhbmQgX2xvYWRfbW9kdWxlX3NoaW0oKS4KKyAgICBkZWYgZXhlYyhzZWxmLCBtb2R1bGUpOgorICAgICAgICAiIiJFeGVjdXRlIHRoZSBzcGVjIGluIGFuIGV4aXN0aW5nIG1vZHVsZSdzIG5hbWVzcGFjZS4iIiIKKyAgICAgICAgbmFtZSA9IHNlbGYuc3BlYy5uYW1lCisgICAgICAgIF9pbXAuYWNxdWlyZV9sb2NrKCkKKyAgICAgICAgd2l0aCBfTW9kdWxlTG9ja01hbmFnZXIobmFtZSk6CisgICAgICAgICAgICBpZiBzeXMubW9kdWxlcy5nZXQobmFtZSkgaXMgbm90IG1vZHVsZToKKyAgICAgICAgICAgICAgICBtc2cgPSAnbW9kdWxlIHshcn0gbm90IGluIHN5cy5tb2R1bGVzJy5mb3JtYXQobmFtZSkKKyAgICAgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcihtc2csIG5hbWU9bmFtZSkKKyAgICAgICAgICAgIGlmIHNlbGYuc3BlYy5sb2FkZXIgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLnNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoJ21pc3NpbmcgbG9hZGVyJywgbmFtZT1zZWxmLnNwZWMubmFtZSkKKyAgICAgICAgICAgICAgICAjIG5hbWVzcGFjZSBwYWNrYWdlCisgICAgICAgICAgICAgICAgc2VsZi5pbml0X21vZHVsZV9hdHRycyhtb2R1bGUsIF9vdmVycmlkZT1UcnVlKQorICAgICAgICAgICAgICAgIHJldHVybiBtb2R1bGUKKyAgICAgICAgICAgIHNlbGYuaW5pdF9tb2R1bGVfYXR0cnMobW9kdWxlLCBfb3ZlcnJpZGU9VHJ1ZSkKKyAgICAgICAgICAgIGlmIG5vdCBoYXNhdHRyKHNlbGYuc3BlYy5sb2FkZXIsICdleGVjX21vZHVsZScpOgorICAgICAgICAgICAgICAgICMgKGlzc3VlMTk3MTMpIE9uY2UgQnVpbHRpbkltcG9ydGVyIGFuZCBFeHRlbnNpb25GaWxlTG9hZGVyCisgICAgICAgICAgICAgICAgIyBoYXZlIGV4ZWNfbW9kdWxlKCkgaW1wbGVtZW50ZWQsIHdlIGNhbiBhZGQgYSBkZXByZWNhdGlvbgorICAgICAgICAgICAgICAgICMgd2FybmluZyBoZXJlLgorICAgICAgICAgICAgICAgIHNlbGYuc3BlYy5sb2FkZXIubG9hZF9tb2R1bGUobmFtZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5fZXhlYyhtb2R1bGUpCisgICAgICAgIHJldHVybiBzeXMubW9kdWxlc1tuYW1lXQorCisgICAgZGVmIF9sb2FkX2JhY2t3YXJkX2NvbXBhdGlibGUoc2VsZik6CisgICAgICAgICMgKGlzc3VlMTk3MTMpIE9uY2UgQnVpbHRpbkltcG9ydGVyIGFuZCBFeHRlbnNpb25GaWxlTG9hZGVyCisgICAgICAgICMgaGF2ZSBleGVjX21vZHVsZSgpIGltcGxlbWVudGVkLCB3ZSBjYW4gYWRkIGEgZGVwcmVjYXRpb24KKyAgICAgICAgIyB3YXJuaW5nIGhlcmUuCisgICAgICAgIHNwZWMgPSBzZWxmLnNwZWMKKyAgICAgICAgc3BlYy5sb2FkZXIubG9hZF9tb2R1bGUoc3BlYy5uYW1lKQorICAgICAgICAjIFRoZSBtb2R1bGUgbXVzdCBiZSBpbiBzeXMubW9kdWxlcyBhdCB0aGlzIHBvaW50IQorICAgICAgICBtb2R1bGUgPSBzeXMubW9kdWxlc1tzcGVjLm5hbWVdCisgICAgICAgIGlmIGdldGF0dHIobW9kdWxlLCAnX19sb2FkZXJfXycsIE5vbmUpIGlzIE5vbmU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbW9kdWxlLl9fbG9hZGVyX18gPSBzcGVjLmxvYWRlcgorICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgaWYgZ2V0YXR0cihtb2R1bGUsICdfX3BhY2thZ2VfXycsIE5vbmUpIGlzIE5vbmU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgIyBTaW5jZSBtb2R1bGUuX19wYXRoX18gbWF5IG5vdCBsaW5lIHVwIHdpdGgKKyAgICAgICAgICAgICAgICAjIHNwZWMuc3VibW9kdWxlX3NlYXJjaF9wYXRocywgd2UgY2FuJ3QgbmVjZXNzYXJpbHkgcmVseQorICAgICAgICAgICAgICAgICMgb24gc3BlYy5wYXJlbnQgaGVyZS4KKyAgICAgICAgICAgICAgICBtb2R1bGUuX19wYWNrYWdlX18gPSBtb2R1bGUuX19uYW1lX18KKyAgICAgICAgICAgICAgICBpZiBub3QgaGFzYXR0cihtb2R1bGUsICdfX3BhdGhfXycpOgorICAgICAgICAgICAgICAgICAgICBtb2R1bGUuX19wYWNrYWdlX18gPSBzcGVjLm5hbWUucnBhcnRpdGlvbignLicpWzBdCisgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBpZiBnZXRhdHRyKG1vZHVsZSwgJ19fc3BlY19fJywgTm9uZSkgaXMgTm9uZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBtb2R1bGUuX19zcGVjX18gPSBzcGVjCisgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICByZXR1cm4gbW9kdWxlCisKKyAgICBkZWYgX2xvYWRfdW5sb2NrZWQoc2VsZik6CisgICAgICAgICMgQSBoZWxwZXIgZm9yIGRpcmVjdCB1c2UgYnkgdGhlIGltcG9ydCBzeXN0ZW0uCisgICAgICAgIGlmIHNlbGYuc3BlYy5sb2FkZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAjIG5vdCBhIG5hbWVzcGFjZSBwYWNrYWdlCisgICAgICAgICAgICBpZiBub3QgaGFzYXR0cihzZWxmLnNwZWMubG9hZGVyLCAnZXhlY19tb2R1bGUnKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fbG9hZF9iYWNrd2FyZF9jb21wYXRpYmxlKCkKKworICAgICAgICBtb2R1bGUgPSBzZWxmLmNyZWF0ZSgpCisgICAgICAgIHdpdGggX2luc3RhbGxlZF9zYWZlbHkobW9kdWxlKToKKyAgICAgICAgICAgIGlmIHNlbGYuc3BlYy5sb2FkZXIgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLnNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoJ21pc3NpbmcgbG9hZGVyJywgbmFtZT1zZWxmLnNwZWMubmFtZSkKKyAgICAgICAgICAgICAgICAjIEEgbmFtZXNwYWNlIHBhY2thZ2Ugc28gZG8gbm90aGluZy4KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5fZXhlYyhtb2R1bGUpCisKKyAgICAgICAgIyBXZSBkb24ndCBlbnN1cmUgdGhhdCB0aGUgaW1wb3J0LXJlbGF0ZWQgbW9kdWxlIGF0dHJpYnV0ZXMgZ2V0CisgICAgICAgICMgc2V0IGluIHRoZSBzeXMubW9kdWxlcyByZXBsYWNlbWVudCBjYXNlLiAgU3VjaCBtb2R1bGVzIGFyZSBvbgorICAgICAgICAjIHRoZWlyIG93bi4KKyAgICAgICAgcmV0dXJuIHN5cy5tb2R1bGVzW3NlbGYuc3BlYy5uYW1lXQorCisgICAgIyBBIG1ldGhvZCB1c2VkIGR1cmluZyB0ZXN0aW5nIG9mIF9sb2FkX3VubG9ja2VkKCkgYW5kIGJ5CisgICAgIyBfbG9hZF9tb2R1bGVfc2hpbSgpLgorICAgIGRlZiBsb2FkKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gYSBuZXcgbW9kdWxlIG9iamVjdCwgbG9hZGVkIGJ5IHRoZSBzcGVjJ3MgbG9hZGVyLgorCisgICAgICAgIFRoZSBtb2R1bGUgaXMgbm90IGFkZGVkIHRvIGl0cyBwYXJlbnQuCisKKyAgICAgICAgSWYgYSBtb2R1bGUgaXMgYWxyZWFkeSBpbiBzeXMubW9kdWxlcywgdGhhdCBleGlzdGluZyBtb2R1bGUgZ2V0cworICAgICAgICBjbG9iYmVyZWQuCisKKyAgICAgICAgIiIiCisgICAgICAgIF9pbXAuYWNxdWlyZV9sb2NrKCkKKyAgICAgICAgd2l0aCBfTW9kdWxlTG9ja01hbmFnZXIoc2VsZi5zcGVjLm5hbWUpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2xvYWRfdW5sb2NrZWQoKQorCisKK2RlZiBfZml4X3VwX21vZHVsZShucywgbmFtZSwgcGF0aG5hbWUsIGNwYXRobmFtZT1Ob25lKToKKyAgICAjIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBieSBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZU9iamVjdCgpLgorICAgIGxvYWRlciA9IG5zLmdldCgnX19sb2FkZXJfXycpCisgICAgc3BlYyA9IG5zLmdldCgnX19zcGVjX18nKQorICAgIGlmIG5vdCBsb2FkZXI6CisgICAgICAgIGlmIHNwZWM6CisgICAgICAgICAgICBsb2FkZXIgPSBzcGVjLmxvYWRlcgorICAgICAgICBlbGlmIHBhdGhuYW1lID09IGNwYXRobmFtZToKKyAgICAgICAgICAgIGxvYWRlciA9IFNvdXJjZWxlc3NGaWxlTG9hZGVyKG5hbWUsIHBhdGhuYW1lKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9hZGVyID0gU291cmNlRmlsZUxvYWRlcihuYW1lLCBwYXRobmFtZSkKKyAgICBpZiBub3Qgc3BlYzoKKyAgICAgICAgc3BlYyA9IHNwZWNfZnJvbV9maWxlX2xvY2F0aW9uKG5hbWUsIHBhdGhuYW1lLCBsb2FkZXI9bG9hZGVyKQorICAgIHRyeToKKyAgICAgICAgbnNbJ19fc3BlY19fJ10gPSBzcGVjCisgICAgICAgIG5zWydfX2xvYWRlcl9fJ10gPSBsb2FkZXIKKyAgICAgICAgbnNbJ19fZmlsZV9fJ10gPSBwYXRobmFtZQorICAgICAgICBuc1snX19jYWNoZWRfXyddID0gY3BhdGhuYW1lCisgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgIyBOb3QgaW1wb3J0YW50IGVub3VnaCB0byByZXBvcnQuCisgICAgICAgIHBhc3MKIAogCiAjIExvYWRlcnMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCkBAIC02MzQsOSArMTI1NCwyMyBAQAogCiAgICAgIiIiCiAKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIG1vZHVsZV9yZXByKG1vZHVsZSk6CisgICAgICAgICIiIlJldHVybiByZXByIGZvciB0aGUgbW9kdWxlLgorCisgICAgICAgIFRoZSBtZXRob2QgaXMgZGVwcmVjYXRlZC4gIFRoZSBpbXBvcnQgbWFjaGluZXJ5IGRvZXMgdGhlIGpvYiBpdHNlbGYuCisKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiAnPG1vZHVsZSB7IXJ9IChidWlsdC1pbik+Jy5mb3JtYXQobW9kdWxlLl9fbmFtZV9fKQorCiAgICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIG1vZHVsZV9yZXByKGNscywgbW9kdWxlKToKLSAgICAgICAgcmV0dXJuICI8bW9kdWxlICd7fScgKGJ1aWx0LWluKT4iLmZvcm1hdChtb2R1bGUuX19uYW1lX18pCisgICAgZGVmIGZpbmRfc3BlYyhjbHMsIGZ1bGxuYW1lLCBwYXRoPU5vbmUsIHRhcmdldD1Ob25lKToKKyAgICAgICAgaWYgcGF0aCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIGlmIF9pbXAuaXNfYnVpbHRpbihmdWxsbmFtZSk6CisgICAgICAgICAgICByZXR1cm4gc3BlY19mcm9tX2xvYWRlcihmdWxsbmFtZSwgY2xzLCBvcmlnaW49J2J1aWx0LWluJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCiAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgZmluZF9tb2R1bGUoY2xzLCBmdWxsbmFtZSwgcGF0aD1Ob25lKToKQEAgLTY0NCwyNCArMTI3OCwyMyBAQAogCiAgICAgICAgIElmICdwYXRoJyBpcyBldmVyIHNwZWNpZmllZCB0aGVuIHRoZSBzZWFyY2ggaXMgY29uc2lkZXJlZCBhIGZhaWx1cmUuCiAKKyAgICAgICAgVGhpcyBtZXRob2QgaXMgZGVwcmVjYXRlZC4gIFVzZSBmaW5kX3NwZWMoKSBpbnN0ZWFkLgorCiAgICAgICAgICIiIgotICAgICAgICBpZiBwYXRoIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICAgICAgcmV0dXJuIGNscyBpZiBfaW1wLmlzX2J1aWx0aW4oZnVsbG5hbWUpIGVsc2UgTm9uZQorICAgICAgICBzcGVjID0gY2xzLmZpbmRfc3BlYyhmdWxsbmFtZSwgcGF0aCkKKyAgICAgICAgcmV0dXJuIHNwZWMubG9hZGVyIGlmIHNwZWMgaXMgbm90IE5vbmUgZWxzZSBOb25lCiAKICAgICBAY2xhc3NtZXRob2QKLSAgICBAc2V0X3BhY2thZ2UKLSAgICBAc2V0X2xvYWRlcgogICAgIEBfcmVxdWlyZXNfYnVpbHRpbgogICAgIGRlZiBsb2FkX21vZHVsZShjbHMsIGZ1bGxuYW1lKToKICAgICAgICAgIiIiTG9hZCBhIGJ1aWx0LWluIG1vZHVsZS4iIiIKLSAgICAgICAgaXNfcmVsb2FkID0gZnVsbG5hbWUgaW4gc3lzLm1vZHVsZXMKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcmV0dXJuIF9jYWxsX3dpdGhfZnJhbWVzX3JlbW92ZWQoX2ltcC5pbml0X2J1aWx0aW4sIGZ1bGxuYW1lKQotICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICBpZiBub3QgaXNfcmVsb2FkIGFuZCBmdWxsbmFtZSBpbiBzeXMubW9kdWxlczoKLSAgICAgICAgICAgICAgICBkZWwgc3lzLm1vZHVsZXNbZnVsbG5hbWVdCi0gICAgICAgICAgICByYWlzZQorICAgICAgICAjIE9uY2UgYW4gZXhlY19tb2R1bGUoKSBpbXBsZW1lbnRhdGlvbiBpcyBhZGRlZCB3ZSBjYW4gYWxzbworICAgICAgICAjIGFkZCBhIGRlcHJlY2F0aW9uIHdhcm5pbmcgaGVyZS4KKyAgICAgICAgd2l0aCBfTWFuYWdlUmVsb2FkKGZ1bGxuYW1lKToKKyAgICAgICAgICAgIG1vZHVsZSA9IF9jYWxsX3dpdGhfZnJhbWVzX3JlbW92ZWQoX2ltcC5pbml0X2J1aWx0aW4sIGZ1bGxuYW1lKQorICAgICAgICBtb2R1bGUuX19sb2FkZXJfXyA9IGNscworICAgICAgICBtb2R1bGUuX19wYWNrYWdlX18gPSAnJworICAgICAgICByZXR1cm4gbW9kdWxlCiAKICAgICBAY2xhc3NtZXRob2QKICAgICBAX3JlcXVpcmVzX2J1aWx0aW4KQEAgLTY5MSwzMSArMTMyNCw0OCBAQAogCiAgICAgIiIiCiAKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIG1vZHVsZV9yZXByKG0pOgorICAgICAgICAiIiJSZXR1cm4gcmVwciBmb3IgdGhlIG1vZHVsZS4KKworICAgICAgICBUaGUgbWV0aG9kIGlzIGRlcHJlY2F0ZWQuICBUaGUgaW1wb3J0IG1hY2hpbmVyeSBkb2VzIHRoZSBqb2IgaXRzZWxmLgorCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gJzxtb2R1bGUgeyFyfSAoZnJvemVuKT4nLmZvcm1hdChtLl9fbmFtZV9fKQorCiAgICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIG1vZHVsZV9yZXByKGNscywgbSk6Ci0gICAgICAgIHJldHVybiAiPG1vZHVsZSAne30nIChmcm96ZW4pPiIuZm9ybWF0KG0uX19uYW1lX18pCisgICAgZGVmIGZpbmRfc3BlYyhjbHMsIGZ1bGxuYW1lLCBwYXRoPU5vbmUsIHRhcmdldD1Ob25lKToKKyAgICAgICAgaWYgX2ltcC5pc19mcm96ZW4oZnVsbG5hbWUpOgorICAgICAgICAgICAgcmV0dXJuIHNwZWNfZnJvbV9sb2FkZXIoZnVsbG5hbWUsIGNscywgb3JpZ2luPSdmcm96ZW4nKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBmaW5kX21vZHVsZShjbHMsIGZ1bGxuYW1lLCBwYXRoPU5vbmUpOgotICAgICAgICAiIiJGaW5kIGEgZnJvemVuIG1vZHVsZS4iIiIKKyAgICAgICAgIiIiRmluZCBhIGZyb3plbiBtb2R1bGUuCisKKyAgICAgICAgVGhpcyBtZXRob2QgaXMgZGVwcmVjYXRlZC4gIFVzZSBmaW5kX3NwZWMoKSBpbnN0ZWFkLgorCisgICAgICAgICIiIgogICAgICAgICByZXR1cm4gY2xzIGlmIF9pbXAuaXNfZnJvemVuKGZ1bGxuYW1lKSBlbHNlIE5vbmUKIAorICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgZXhlY19tb2R1bGUobW9kdWxlKToKKyAgICAgICAgbmFtZSA9IG1vZHVsZS5fX3NwZWNfXy5uYW1lCisgICAgICAgIGlmIG5vdCBfaW1wLmlzX2Zyb3plbihuYW1lKToKKyAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCd7IXJ9IGlzIG5vdCBhIGZyb3plbiBtb2R1bGUnLmZvcm1hdChuYW1lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9bmFtZSkKKyAgICAgICAgY29kZSA9IF9jYWxsX3dpdGhfZnJhbWVzX3JlbW92ZWQoX2ltcC5nZXRfZnJvemVuX29iamVjdCwgbmFtZSkKKyAgICAgICAgZXhlYyhjb2RlLCBtb2R1bGUuX19kaWN0X18pCisKICAgICBAY2xhc3NtZXRob2QKLSAgICBAc2V0X3BhY2thZ2UKLSAgICBAc2V0X2xvYWRlcgotICAgIEBfcmVxdWlyZXNfZnJvemVuCiAgICAgZGVmIGxvYWRfbW9kdWxlKGNscywgZnVsbG5hbWUpOgotICAgICAgICAiIiJMb2FkIGEgZnJvemVuIG1vZHVsZS4iIiIKLSAgICAgICAgaXNfcmVsb2FkID0gZnVsbG5hbWUgaW4gc3lzLm1vZHVsZXMKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgbSA9IF9jYWxsX3dpdGhfZnJhbWVzX3JlbW92ZWQoX2ltcC5pbml0X2Zyb3plbiwgZnVsbG5hbWUpCi0gICAgICAgICAgICAjIExldCBvdXIgb3duIG1vZHVsZV9yZXByKCkgbWV0aG9kIHByb2R1Y2UgYSBzdWl0YWJsZSByZXByLgotICAgICAgICAgICAgZGVsIG0uX19maWxlX18KLSAgICAgICAgICAgIHJldHVybiBtCi0gICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgIGlmIG5vdCBpc19yZWxvYWQgYW5kIGZ1bGxuYW1lIGluIHN5cy5tb2R1bGVzOgotICAgICAgICAgICAgICAgIGRlbCBzeXMubW9kdWxlc1tmdWxsbmFtZV0KLSAgICAgICAgICAgIHJhaXNlCisgICAgICAgICIiIkxvYWQgYSBmcm96ZW4gbW9kdWxlLgorCisgICAgICAgIFRoaXMgbWV0aG9kIGlzIGRlcHJlY2F0ZWQuICBVc2UgZXhlY19tb2R1bGUoKSBpbnN0ZWFkLgorCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gX2xvYWRfbW9kdWxlX3NoaW0oY2xzLCBmdWxsbmFtZSkKIAogICAgIEBjbGFzc21ldGhvZAogICAgIEBfcmVxdWlyZXNfZnJvemVuCkBAIC03MzgsMjIgKzEzODgsMjEgQEAKIAogY2xhc3MgV2luZG93c1JlZ2lzdHJ5RmluZGVyOgogCi0gICAgIiIiTWV0YSBwYXRoIGZpbmRlciBmb3IgbW9kdWxlcyBkZWNsYXJlZCBpbiB0aGUgV2luZG93cyByZWdpc3RyeS4KLSAgICAiIiIKKyAgICAiIiJNZXRhIHBhdGggZmluZGVyIGZvciBtb2R1bGVzIGRlY2xhcmVkIGluIHRoZSBXaW5kb3dzIHJlZ2lzdHJ5LiIiIgogCiAgICAgUkVHSVNUUllfS0VZID0gKAotICAgICAgICAiU29mdHdhcmVcXFB5dGhvblxcUHl0aG9uQ29yZVxce3N5c192ZXJzaW9ufSIKLSAgICAgICAgIlxcTW9kdWxlc1xce2Z1bGxuYW1lfSIpCisgICAgICAgICdTb2Z0d2FyZVxcUHl0aG9uXFxQeXRob25Db3JlXFx7c3lzX3ZlcnNpb259JworICAgICAgICAnXFxNb2R1bGVzXFx7ZnVsbG5hbWV9JykKICAgICBSRUdJU1RSWV9LRVlfREVCVUcgPSAoCi0gICAgICAgICJTb2Z0d2FyZVxcUHl0aG9uXFxQeXRob25Db3JlXFx7c3lzX3ZlcnNpb259IgotICAgICAgICAiXFxNb2R1bGVzXFx7ZnVsbG5hbWV9XFxEZWJ1ZyIpCisgICAgICAgICdTb2Z0d2FyZVxcUHl0aG9uXFxQeXRob25Db3JlXFx7c3lzX3ZlcnNpb259JworICAgICAgICAnXFxNb2R1bGVzXFx7ZnVsbG5hbWV9XFxEZWJ1ZycpCiAgICAgREVCVUdfQlVJTEQgPSBGYWxzZSAgIyBDaGFuZ2VkIGluIF9zZXR1cCgpCiAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgX29wZW5fcmVnaXN0cnkoY2xzLCBrZXkpOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICByZXR1cm4gX3dpbnJlZy5PcGVuS2V5KF93aW5yZWcuSEtFWV9DVVJSRU5UX1VTRVIsIGtleSkKLSAgICAgICAgZXhjZXB0IFdpbmRvd3NFcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICByZXR1cm4gX3dpbnJlZy5PcGVuS2V5KF93aW5yZWcuSEtFWV9MT0NBTF9NQUNISU5FLCBrZXkpCiAKICAgICBAY2xhc3NtZXRob2QKQEAgLTc2NiwyNCArMTQxNSwzOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c192ZXJzaW9uPXN5cy52ZXJzaW9uWzozXSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgd2l0aCBjbHMuX29wZW5fcmVnaXN0cnkoa2V5KSBhcyBoa2V5OgotICAgICAgICAgICAgICAgIGZpbGVwYXRoID0gX3dpbnJlZy5RdWVyeVZhbHVlKGhrZXksICIiKQotICAgICAgICBleGNlcHQgV2luZG93c0Vycm9yOgorICAgICAgICAgICAgICAgIGZpbGVwYXRoID0gX3dpbnJlZy5RdWVyeVZhbHVlKGhrZXksICcnKQorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHJldHVybiBOb25lCiAgICAgICAgIHJldHVybiBmaWxlcGF0aAogCiAgICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIGZpbmRfbW9kdWxlKGNscywgZnVsbG5hbWUsIHBhdGg9Tm9uZSk6Ci0gICAgICAgICIiIkZpbmQgbW9kdWxlIG5hbWVkIGluIHRoZSByZWdpc3RyeS4iIiIKKyAgICBkZWYgZmluZF9zcGVjKGNscywgZnVsbG5hbWUsIHBhdGg9Tm9uZSwgdGFyZ2V0PU5vbmUpOgogICAgICAgICBmaWxlcGF0aCA9IGNscy5fc2VhcmNoX3JlZ2lzdHJ5KGZ1bGxuYW1lKQogICAgICAgICBpZiBmaWxlcGF0aCBpcyBOb25lOgogICAgICAgICAgICAgcmV0dXJuIE5vbmUKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgX29zLnN0YXQoZmlsZXBhdGgpCisgICAgICAgICAgICBfcGF0aF9zdGF0KGZpbGVwYXRoKQogICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHJldHVybiBOb25lCiAgICAgICAgIGZvciBsb2FkZXIsIHN1ZmZpeGVzIGluIF9nZXRfc3VwcG9ydGVkX2ZpbGVfbG9hZGVycygpOgogICAgICAgICAgICAgaWYgZmlsZXBhdGguZW5kc3dpdGgodHVwbGUoc3VmZml4ZXMpKToKLSAgICAgICAgICAgICAgICByZXR1cm4gbG9hZGVyKGZ1bGxuYW1lLCBmaWxlcGF0aCkKKyAgICAgICAgICAgICAgICBzcGVjID0gc3BlY19mcm9tX2xvYWRlcihmdWxsbmFtZSwgbG9hZGVyKGZ1bGxuYW1lLCBmaWxlcGF0aCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luPWZpbGVwYXRoKQorICAgICAgICAgICAgICAgIHJldHVybiBzcGVjCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZmluZF9tb2R1bGUoY2xzLCBmdWxsbmFtZSwgcGF0aD1Ob25lKToKKyAgICAgICAgIiIiRmluZCBtb2R1bGUgbmFtZWQgaW4gdGhlIHJlZ2lzdHJ5LgorCisgICAgICAgIFRoaXMgbWV0aG9kIGlzIGRlcHJlY2F0ZWQuICBVc2UgZXhlY19tb2R1bGUoKSBpbnN0ZWFkLgorCisgICAgICAgICIiIgorICAgICAgICBzcGVjID0gY2xzLmZpbmRfc3BlYyhmdWxsbmFtZSwgcGF0aCkKKyAgICAgICAgaWYgc3BlYyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBzcGVjLmxvYWRlcgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKIAogCiBjbGFzcyBfTG9hZGVyQmFzaWNzOgpAQCAtNzk5LDc0ICsxNDYyLDE1IEBACiAgICAgICAgIHRhaWxfbmFtZSA9IGZ1bGxuYW1lLnJwYXJ0aXRpb24oJy4nKVsyXQogICAgICAgICByZXR1cm4gZmlsZW5hbWVfYmFzZSA9PSAnX19pbml0X18nIGFuZCB0YWlsX25hbWUgIT0gJ19faW5pdF9fJwogCi0gICAgZGVmIF9ieXRlc19mcm9tX2J5dGVjb2RlKHNlbGYsIGZ1bGxuYW1lLCBkYXRhLCBieXRlY29kZV9wYXRoLCBzb3VyY2Vfc3RhdHMpOgotICAgICAgICAiIiJSZXR1cm4gdGhlIG1hcnNoYWxsZWQgYnl0ZXMgZnJvbSBieXRlY29kZSwgdmVyaWZ5aW5nIHRoZSBtYWdpYwotICAgICAgICBudW1iZXIsIHRpbWVzdGFtcCBhbmQgc291cmNlIHNpemUgYWxvbmcgdGhlIHdheS4KKyAgICBkZWYgZXhlY19tb2R1bGUoc2VsZiwgbW9kdWxlKToKKyAgICAgICAgIiIiRXhlY3V0ZSB0aGUgbW9kdWxlLiIiIgorICAgICAgICBjb2RlID0gc2VsZi5nZXRfY29kZShtb2R1bGUuX19uYW1lX18pCisgICAgICAgIGlmIGNvZGUgaXMgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCdjYW5ub3QgbG9hZCBtb2R1bGUgeyFyfSB3aGVuIGdldF9jb2RlKCkgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JldHVybnMgTm9uZScuZm9ybWF0KG1vZHVsZS5fX25hbWVfXykpCisgICAgICAgIF9jYWxsX3dpdGhfZnJhbWVzX3JlbW92ZWQoZXhlYywgY29kZSwgbW9kdWxlLl9fZGljdF9fKQogCi0gICAgICAgIElmIHNvdXJjZV9zdGF0cyBpcyBOb25lIHRoZW4gc2tpcCB0aGUgdGltZXN0YW1wIGNoZWNrLgotCi0gICAgICAgICIiIgotICAgICAgICBtYWdpYyA9IGRhdGFbOjRdCi0gICAgICAgIHJhd190aW1lc3RhbXAgPSBkYXRhWzQ6OF0KLSAgICAgICAgcmF3X3NpemUgPSBkYXRhWzg6MTJdCi0gICAgICAgIGlmIG1hZ2ljICE9IF9NQUdJQ19CWVRFUzoKLSAgICAgICAgICAgIG1zZyA9ICdiYWQgbWFnaWMgbnVtYmVyIGluIHshcn06IHshcn0nLmZvcm1hdChmdWxsbmFtZSwgbWFnaWMpCi0gICAgICAgICAgICBfdmVyYm9zZV9tZXNzYWdlKG1zZykKLSAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKG1zZywgbmFtZT1mdWxsbmFtZSwgcGF0aD1ieXRlY29kZV9wYXRoKQotICAgICAgICBlbGlmIGxlbihyYXdfdGltZXN0YW1wKSAhPSA0OgotICAgICAgICAgICAgbWVzc2FnZSA9ICdiYWQgdGltZXN0YW1wIGluIHt9Jy5mb3JtYXQoZnVsbG5hbWUpCi0gICAgICAgICAgICBfdmVyYm9zZV9tZXNzYWdlKG1lc3NhZ2UpCi0gICAgICAgICAgICByYWlzZSBFT0ZFcnJvcihtZXNzYWdlKQotICAgICAgICBlbGlmIGxlbihyYXdfc2l6ZSkgIT0gNDoKLSAgICAgICAgICAgIG1lc3NhZ2UgPSAnYmFkIHNpemUgaW4ge30nLmZvcm1hdChmdWxsbmFtZSkKLSAgICAgICAgICAgIF92ZXJib3NlX21lc3NhZ2UobWVzc2FnZSkKLSAgICAgICAgICAgIHJhaXNlIEVPRkVycm9yKG1lc3NhZ2UpCi0gICAgICAgIGlmIHNvdXJjZV9zdGF0cyBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBzb3VyY2VfbXRpbWUgPSBpbnQoc291cmNlX3N0YXRzWydtdGltZSddKQotICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgaWYgX3JfbG9uZyhyYXdfdGltZXN0YW1wKSAhPSBzb3VyY2VfbXRpbWU6Ci0gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSAnYnl0ZWNvZGUgaXMgc3RhbGUgZm9yIHt9Jy5mb3JtYXQoZnVsbG5hbWUpCi0gICAgICAgICAgICAgICAgICAgIF92ZXJib3NlX21lc3NhZ2UobWVzc2FnZSkKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IobWVzc2FnZSwgbmFtZT1mdWxsbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aD1ieXRlY29kZV9wYXRoKQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHNvdXJjZV9zaXplID0gc291cmNlX3N0YXRzWydzaXplJ10gJiAweEZGRkZGRkZGCi0gICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBpZiBfcl9sb25nKHJhd19zaXplKSAhPSBzb3VyY2Vfc2l6ZToKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoCi0gICAgICAgICAgICAgICAgICAgICAgICAiYnl0ZWNvZGUgaXMgc3RhbGUgZm9yIHt9Ii5mb3JtYXQoZnVsbG5hbWUpLAotICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1mdWxsbmFtZSwgcGF0aD1ieXRlY29kZV9wYXRoKQotICAgICAgICAjIENhbid0IHJldHVybiB0aGUgY29kZSBvYmplY3QgYXMgZXJyb3JzIGZyb20gbWFyc2hhbCBsb2FkaW5nIG5lZWQgdG8KLSAgICAgICAgIyBwcm9wYWdhdGUgZXZlbiB3aGVuIHNvdXJjZSBpcyBhdmFpbGFibGUuCi0gICAgICAgIHJldHVybiBkYXRhWzEyOl0KLQotICAgIEBtb2R1bGVfZm9yX2xvYWRlcgotICAgIGRlZiBfbG9hZF9tb2R1bGUoc2VsZiwgbW9kdWxlLCAqLCBzb3VyY2VsZXNzPUZhbHNlKToKLSAgICAgICAgIiIiSGVscGVyIGZvciBsb2FkX21vZHVsZSBhYmxlIHRvIGhhbmRsZSBlaXRoZXIgc291cmNlIG9yIHNvdXJjZWxlc3MKLSAgICAgICAgbG9hZGluZy4iIiIKLSAgICAgICAgbmFtZSA9IG1vZHVsZS5fX25hbWVfXwotICAgICAgICBjb2RlX29iamVjdCA9IHNlbGYuZ2V0X2NvZGUobmFtZSkKLSAgICAgICAgbW9kdWxlLl9fZmlsZV9fID0gc2VsZi5nZXRfZmlsZW5hbWUobmFtZSkKLSAgICAgICAgaWYgbm90IHNvdXJjZWxlc3M6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgbW9kdWxlLl9fY2FjaGVkX18gPSBjYWNoZV9mcm9tX3NvdXJjZShtb2R1bGUuX19maWxlX18pCi0gICAgICAgICAgICBleGNlcHQgTm90SW1wbGVtZW50ZWRFcnJvcjoKLSAgICAgICAgICAgICAgICBtb2R1bGUuX19jYWNoZWRfXyA9IG1vZHVsZS5fX2ZpbGVfXwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgbW9kdWxlLl9fY2FjaGVkX18gPSBtb2R1bGUuX19maWxlX18KLSAgICAgICAgbW9kdWxlLl9fcGFja2FnZV9fID0gbmFtZQotICAgICAgICBpZiBzZWxmLmlzX3BhY2thZ2UobmFtZSk6Ci0gICAgICAgICAgICBtb2R1bGUuX19wYXRoX18gPSBbX3BhdGhfc3BsaXQobW9kdWxlLl9fZmlsZV9fKVswXV0KLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIG1vZHVsZS5fX3BhY2thZ2VfXyA9IG1vZHVsZS5fX3BhY2thZ2VfXy5ycGFydGl0aW9uKCcuJylbMF0KLSAgICAgICAgbW9kdWxlLl9fbG9hZGVyX18gPSBzZWxmCi0gICAgICAgIF9jYWxsX3dpdGhfZnJhbWVzX3JlbW92ZWQoZXhlYywgY29kZV9vYmplY3QsIG1vZHVsZS5fX2RpY3RfXykKLSAgICAgICAgcmV0dXJuIG1vZHVsZQorICAgIGxvYWRfbW9kdWxlID0gX2xvYWRfbW9kdWxlX3NoaW0KIAogCiBjbGFzcyBTb3VyY2VMb2FkZXIoX0xvYWRlckJhc2ljcyk6CkBAIC04NzQsOCArMTQ3OCwxMCBAQAogICAgIGRlZiBwYXRoX210aW1lKHNlbGYsIHBhdGgpOgogICAgICAgICAiIiJPcHRpb25hbCBtZXRob2QgdGhhdCByZXR1cm5zIHRoZSBtb2RpZmljYXRpb24gdGltZSAoYW4gaW50KSBmb3IgdGhlCiAgICAgICAgIHNwZWNpZmllZCBwYXRoLCB3aGVyZSBwYXRoIGlzIGEgc3RyLgorCisgICAgICAgIFJhaXNlcyBJT0Vycm9yIHdoZW4gdGhlIHBhdGggY2Fubm90IGJlIGhhbmRsZWQuCiAgICAgICAgICIiIgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisgICAgICAgIHJhaXNlIElPRXJyb3IKIAogICAgIGRlZiBwYXRoX3N0YXRzKHNlbGYsIHBhdGgpOgogICAgICAgICAiIiJPcHRpb25hbCBtZXRob2QgcmV0dXJuaW5nIGEgbWV0YWRhdGEgZGljdCBmb3IgdGhlIHNwZWNpZmllZCBwYXRoCkBAIC04ODYsNiArMTQ5Miw3IEBACiAgICAgICAgIC0gJ3NpemUnIChvcHRpb25hbCkgaXMgdGhlIHNpemUgaW4gYnl0ZXMgb2YgdGhlIHNvdXJjZSBjb2RlLgogCiAgICAgICAgIEltcGxlbWVudGluZyB0aGlzIG1ldGhvZCBhbGxvd3MgdGhlIGxvYWRlciB0byByZWFkIGJ5dGVjb2RlIGZpbGVzLgorICAgICAgICBSYWlzZXMgSU9FcnJvciB3aGVuIHRoZSBwYXRoIGNhbm5vdCBiZSBoYW5kbGVkLgogICAgICAgICAiIiIKICAgICAgICAgcmV0dXJuIHsnbXRpbWUnOiBzZWxmLnBhdGhfbXRpbWUocGF0aCl9CiAKQEAgLTkwMywzMiArMTUxMCwyNiBAQAogICAgICAgICAiIiJPcHRpb25hbCBtZXRob2Qgd2hpY2ggd3JpdGVzIGRhdGEgKGJ5dGVzKSB0byBhIGZpbGUgcGF0aCAoYSBzdHIpLgogCiAgICAgICAgIEltcGxlbWVudGluZyB0aGlzIG1ldGhvZCBhbGxvd3MgZm9yIHRoZSB3cml0aW5nIG9mIGJ5dGVjb2RlIGZpbGVzLgotCiAgICAgICAgICIiIgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCiAKIAogICAgIGRlZiBnZXRfc291cmNlKHNlbGYsIGZ1bGxuYW1lKToKICAgICAgICAgIiIiQ29uY3JldGUgaW1wbGVtZW50YXRpb24gb2YgSW5zcGVjdExvYWRlci5nZXRfc291cmNlLiIiIgotICAgICAgICBpbXBvcnQgdG9rZW5pemUKICAgICAgICAgcGF0aCA9IHNlbGYuZ2V0X2ZpbGVuYW1lKGZ1bGxuYW1lKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzb3VyY2VfYnl0ZXMgPSBzZWxmLmdldF9kYXRhKHBhdGgpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGV4YzoKLSAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCJzb3VyY2Ugbm90IGF2YWlsYWJsZSB0aHJvdWdoIGdldF9kYXRhKCkiLAorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6CisgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcignc291cmNlIG5vdCBhdmFpbGFibGUgdGhyb3VnaCBnZXRfZGF0YSgpJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9ZnVsbG5hbWUpIGZyb20gZXhjCi0gICAgICAgIHJlYWRzb3VyY2UgPSBfaW8uQnl0ZXNJTyhzb3VyY2VfYnl0ZXMpLnJlYWRsaW5lCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGVuY29kaW5nID0gdG9rZW5pemUuZGV0ZWN0X2VuY29kaW5nKHJlYWRzb3VyY2UpCi0gICAgICAgIGV4Y2VwdCBTeW50YXhFcnJvciBhcyBleGM6Ci0gICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcigiRmFpbGVkIHRvIGRldGVjdCBlbmNvZGluZyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPWZ1bGxuYW1lKSBmcm9tIGV4YwotICAgICAgICBuZXdsaW5lX2RlY29kZXIgPSBfaW8uSW5jcmVtZW50YWxOZXdsaW5lRGVjb2RlcihOb25lLCBUcnVlKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICByZXR1cm4gbmV3bGluZV9kZWNvZGVyLmRlY29kZShzb3VyY2VfYnl0ZXMuZGVjb2RlKGVuY29kaW5nWzBdKSkKLSAgICAgICAgZXhjZXB0IFVuaWNvZGVEZWNvZGVFcnJvciBhcyBleGM6Ci0gICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcigiRmFpbGVkIHRvIGRlY29kZSBzb3VyY2UgZmlsZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPWZ1bGxuYW1lKSBmcm9tIGV4YworICAgICAgICByZXR1cm4gZGVjb2RlX3NvdXJjZShzb3VyY2VfYnl0ZXMpCisKKyAgICBkZWYgc291cmNlX3RvX2NvZGUoc2VsZiwgZGF0YSwgcGF0aCwgKiwgX29wdGltaXplPS0xKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSBjb2RlIG9iamVjdCBjb21waWxlZCBmcm9tIHNvdXJjZS4KKworICAgICAgICBUaGUgJ2RhdGEnIGFyZ3VtZW50IGNhbiBiZSBhbnkgb2JqZWN0IHR5cGUgdGhhdCBjb21waWxlKCkgc3VwcG9ydHMuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gX2NhbGxfd2l0aF9mcmFtZXNfcmVtb3ZlZChjb21waWxlLCBkYXRhLCBwYXRoLCAnZXhlYycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9udF9pbmhlcml0PVRydWUsIG9wdGltaXplPV9vcHRpbWl6ZSkKIAogICAgIGRlZiBnZXRfY29kZShzZWxmLCBmdWxsbmFtZSk6CiAgICAgICAgICIiIkNvbmNyZXRlIGltcGxlbWVudGF0aW9uIG9mIEluc3BlY3RMb2FkZXIuZ2V0X2NvZGUuCkBAIC05NDYsNDUgKzE1NDcsMzQgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzdCA9IHNlbGYucGF0aF9zdGF0cyhzb3VyY2VfcGF0aCkKLSAgICAgICAgICAgIGV4Y2VwdCBOb3RJbXBsZW1lbnRlZEVycm9yOgorICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6CiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBzb3VyY2VfbXRpbWUgPSBpbnQoc3RbJ210aW1lJ10pCiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBkYXRhID0gc2VsZi5nZXRfZGF0YShieXRlY29kZV9wYXRoKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXNfZGF0YSA9IHNlbGYuX2J5dGVzX2Zyb21fYnl0ZWNvZGUoZnVsbG5hbWUsIGRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlY29kZV9wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3QpCisgICAgICAgICAgICAgICAgICAgICAgICBieXRlc19kYXRhID0gX3ZhbGlkYXRlX2J5dGVjb2RlX2hlYWRlcihkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2Vfc3RhdHM9c3QsIG5hbWU9ZnVsbG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg9Ynl0ZWNvZGVfcGF0aCkKICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IChJbXBvcnRFcnJvciwgRU9GRXJyb3IpOgogICAgICAgICAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICAgICAgX3ZlcmJvc2VfbWVzc2FnZSgne30gbWF0Y2hlcyB7fScsIGJ5dGVjb2RlX3BhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlX3BhdGgpCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IG1hcnNoYWwubG9hZHMoYnl0ZXNfZGF0YSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZm91bmQsIF9jb2RlX3R5cGUpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9pbXAuX2ZpeF9jb19maWxlbmFtZShmb3VuZCwgc291cmNlX3BhdGgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZlcmJvc2VfbWVzc2FnZSgnY29kZSBvYmplY3QgZnJvbSB7fScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVjb2RlX3BhdGgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZvdW5kCi0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZyA9ICJOb24tY29kZSBvYmplY3QgaW4ge30iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IobXNnLmZvcm1hdChieXRlY29kZV9wYXRoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPWZ1bGxuYW1lLCBwYXRoPWJ5dGVjb2RlX3BhdGgpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbXBpbGVfYnl0ZWNvZGUoYnl0ZXNfZGF0YSwgbmFtZT1mdWxsbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlY29kZV9wYXRoPWJ5dGVjb2RlX3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlX3BhdGg9c291cmNlX3BhdGgpCiAgICAgICAgIHNvdXJjZV9ieXRlcyA9IHNlbGYuZ2V0X2RhdGEoc291cmNlX3BhdGgpCi0gICAgICAgIGNvZGVfb2JqZWN0ID0gX2NhbGxfd2l0aF9mcmFtZXNfcmVtb3ZlZChjb21waWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VfYnl0ZXMsIHNvdXJjZV9wYXRoLCAnZXhlYycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGRvbnRfaW5oZXJpdD1UcnVlKQorICAgICAgICBjb2RlX29iamVjdCA9IHNlbGYuc291cmNlX3RvX2NvZGUoc291cmNlX2J5dGVzLCBzb3VyY2VfcGF0aCkKICAgICAgICAgX3ZlcmJvc2VfbWVzc2FnZSgnY29kZSBvYmplY3QgZnJvbSB7fScsIHNvdXJjZV9wYXRoKQogICAgICAgICBpZiAobm90IHN5cy5kb250X3dyaXRlX2J5dGVjb2RlIGFuZCBieXRlY29kZV9wYXRoIGlzIG5vdCBOb25lIGFuZAotICAgICAgICAgICAgc291cmNlX210aW1lIGlzIG5vdCBOb25lKToKLSAgICAgICAgICAgIGRhdGEgPSBieXRlYXJyYXkoX01BR0lDX0JZVEVTKQotICAgICAgICAgICAgZGF0YS5leHRlbmQoX3dfbG9uZyhzb3VyY2VfbXRpbWUpKQotICAgICAgICAgICAgZGF0YS5leHRlbmQoX3dfbG9uZyhsZW4oc291cmNlX2J5dGVzKSkpCi0gICAgICAgICAgICBkYXRhLmV4dGVuZChtYXJzaGFsLmR1bXBzKGNvZGVfb2JqZWN0KSkKKyAgICAgICAgICAgICAgICBzb3VyY2VfbXRpbWUgaXMgbm90IE5vbmUpOgorICAgICAgICAgICAgZGF0YSA9IF9jb2RlX3RvX2J5dGVjb2RlKGNvZGVfb2JqZWN0LCBzb3VyY2VfbXRpbWUsCisgICAgICAgICAgICAgICAgICAgIGxlbihzb3VyY2VfYnl0ZXMpKQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHNlbGYuX2NhY2hlX2J5dGVjb2RlKHNvdXJjZV9wYXRoLCBieXRlY29kZV9wYXRoLCBkYXRhKQogICAgICAgICAgICAgICAgIF92ZXJib3NlX21lc3NhZ2UoJ3dyb3RlIHshcn0nLCBieXRlY29kZV9wYXRoKQpAQCAtOTkyLDE2ICsxNTgyLDYgQEAKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgIHJldHVybiBjb2RlX29iamVjdAogCi0gICAgZGVmIGxvYWRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lKToKLSAgICAgICAgIiIiQ29uY3JldGUgaW1wbGVtZW50YXRpb24gb2YgTG9hZGVyLmxvYWRfbW9kdWxlLgotCi0gICAgICAgIFJlcXVpcmVzIEV4ZWN1dGlvbkxvYWRlci5nZXRfZmlsZW5hbWUgYW5kIFJlc291cmNlTG9hZGVyLmdldF9kYXRhIHRvIGJlCi0gICAgICAgIGltcGxlbWVudGVkIHRvIGxvYWQgc291cmNlIGNvZGUuIFVzZSBvZiBieXRlY29kZSBpcyBkaWN0YXRlZCBieSB3aGV0aGVyCi0gICAgICAgIGdldF9jb2RlIHVzZXMvd3JpdGVzIGJ5dGVjb2RlLgotCi0gICAgICAgICIiIgotICAgICAgICByZXR1cm4gc2VsZi5fbG9hZF9tb2R1bGUoZnVsbG5hbWUpCi0KIAogY2xhc3MgRmlsZUxvYWRlcjoKIApAQCAtMTAxNCwxMCArMTU5NCwyMiBAQAogICAgICAgICBzZWxmLm5hbWUgPSBmdWxsbmFtZQogICAgICAgICBzZWxmLnBhdGggPSBwYXRoCiAKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIChzZWxmLl9fY2xhc3NfXyA9PSBvdGhlci5fX2NsYXNzX18gYW5kCisgICAgICAgICAgICAgICAgc2VsZi5fX2RpY3RfXyA9PSBvdGhlci5fX2RpY3RfXykKKworICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGhhc2goc2VsZi5uYW1lKSBeIGhhc2goc2VsZi5wYXRoKQorCiAgICAgQF9jaGVja19uYW1lCiAgICAgZGVmIGxvYWRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lKToKLSAgICAgICAgIiIiTG9hZCBhIG1vZHVsZSBmcm9tIGEgZmlsZS4iIiIKLSAgICAgICAgIyBJc3N1ZSAjMTQ4NTc6IEF2b2lkIHRoZSB6ZXJvLWFyZ3VtZW50IGZvcm0gc28gdGhlIGltcGxlbWVudGF0aW9uCisgICAgICAgICIiIkxvYWQgYSBtb2R1bGUgZnJvbSBhIGZpbGUuCisKKyAgICAgICAgVGhpcyBtZXRob2QgaXMgZGVwcmVjYXRlZC4gIFVzZSBleGVjX21vZHVsZSgpIGluc3RlYWQuCisKKyAgICAgICAgIiIiCisgICAgICAgICMgVGhlIG9ubHkgcmVhc29uIGZvciB0aGlzIG1ldGhvZCBpcyBmb3IgdGhlIG5hbWUgY2hlY2suCisgICAgICAgICMgSXNzdWUgIzE0ODU3OiBBdm9pZCB0aGUgemVyby1hcmd1bWVudCBmb3JtIG9mIHN1cGVyIHNvIHRoZSBpbXBsZW1lbnRhdGlvbgogICAgICAgICAjIG9mIHRoYXQgZm9ybSBjYW4gYmUgdXBkYXRlZCB3aXRob3V0IGJyZWFraW5nIHRoZSBmcm96ZW4gbW9kdWxlCiAgICAgICAgIHJldHVybiBzdXBlcihGaWxlTG9hZGVyLCBzZWxmKS5sb2FkX21vZHVsZShmdWxsbmFtZSkKIApAQCAtMTAzOCwxOCArMTYzMCwxMiBAQAogCiAgICAgZGVmIHBhdGhfc3RhdHMoc2VsZiwgcGF0aCk6CiAgICAgICAgICIiIlJldHVybiB0aGUgbWV0YWRhdGEgZm9yIHRoZSBwYXRoLiIiIgotICAgICAgICBzdCA9IF9vcy5zdGF0KHBhdGgpCisgICAgICAgIHN0ID0gX3BhdGhfc3RhdChwYXRoKQogICAgICAgICByZXR1cm4geydtdGltZSc6IHN0LnN0X210aW1lLCAnc2l6ZSc6IHN0LnN0X3NpemV9CiAKICAgICBkZWYgX2NhY2hlX2J5dGVjb2RlKHNlbGYsIHNvdXJjZV9wYXRoLCBieXRlY29kZV9wYXRoLCBkYXRhKToKICAgICAgICAgIyBBZGFwdCBiZXR3ZWVuIHRoZSB0d28gQVBJcwotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBtb2RlID0gX29zLnN0YXQoc291cmNlX3BhdGgpLnN0X21vZGUKLSAgICAgICAgZXhjZXB0IE9TRXJyb3I6Ci0gICAgICAgICAgICBtb2RlID0gMG82NjYKLSAgICAgICAgIyBXZSBhbHdheXMgZW5zdXJlIHdyaXRlIGFjY2VzcyBzbyB3ZSBjYW4gdXBkYXRlIGNhY2hlZCBmaWxlcwotICAgICAgICAjIGxhdGVyIGV2ZW4gd2hlbiB0aGUgc291cmNlIGZpbGVzIGFyZSByZWFkLW9ubHkgb24gV2luZG93cyAoIzYwNzQpCi0gICAgICAgIG1vZGUgfD0gMG8yMDAKKyAgICAgICAgbW9kZSA9IF9jYWxjX21vZGUoc291cmNlX3BhdGgpCiAgICAgICAgIHJldHVybiBzZWxmLnNldF9kYXRhKGJ5dGVjb2RlX3BhdGgsIGRhdGEsIF9tb2RlPW1vZGUpCiAKICAgICBkZWYgc2V0X2RhdGEoc2VsZiwgcGF0aCwgZGF0YSwgKiwgX21vZGU9MG82NjYpOgpAQCAtMTA4NSwyMCArMTY3MSwxMSBAQAogCiAgICAgIiIiTG9hZGVyIHdoaWNoIGhhbmRsZXMgc291cmNlbGVzcyBmaWxlIGltcG9ydHMuIiIiCiAKLSAgICBkZWYgbG9hZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUpOgotICAgICAgICByZXR1cm4gc2VsZi5fbG9hZF9tb2R1bGUoZnVsbG5hbWUsIHNvdXJjZWxlc3M9VHJ1ZSkKLQogICAgIGRlZiBnZXRfY29kZShzZWxmLCBmdWxsbmFtZSk6CiAgICAgICAgIHBhdGggPSBzZWxmLmdldF9maWxlbmFtZShmdWxsbmFtZSkKICAgICAgICAgZGF0YSA9IHNlbGYuZ2V0X2RhdGEocGF0aCkKLSAgICAgICAgYnl0ZXNfZGF0YSA9IHNlbGYuX2J5dGVzX2Zyb21fYnl0ZWNvZGUoZnVsbG5hbWUsIGRhdGEsIHBhdGgsIE5vbmUpCi0gICAgICAgIGZvdW5kID0gbWFyc2hhbC5sb2FkcyhieXRlc19kYXRhKQotICAgICAgICBpZiBpc2luc3RhbmNlKGZvdW5kLCBfY29kZV90eXBlKToKLSAgICAgICAgICAgIF92ZXJib3NlX21lc3NhZ2UoJ2NvZGUgb2JqZWN0IGZyb20geyFyfScsIHBhdGgpCi0gICAgICAgICAgICByZXR1cm4gZm91bmQKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCJOb24tY29kZSBvYmplY3QgaW4ge30iLmZvcm1hdChwYXRoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9ZnVsbG5hbWUsIHBhdGg9cGF0aCkKKyAgICAgICAgYnl0ZXNfZGF0YSA9IF92YWxpZGF0ZV9ieXRlY29kZV9oZWFkZXIoZGF0YSwgbmFtZT1mdWxsbmFtZSwgcGF0aD1wYXRoKQorICAgICAgICByZXR1cm4gX2NvbXBpbGVfYnl0ZWNvZGUoYnl0ZXNfZGF0YSwgbmFtZT1mdWxsbmFtZSwgYnl0ZWNvZGVfcGF0aD1wYXRoKQogCiAgICAgZGVmIGdldF9zb3VyY2Uoc2VsZiwgZnVsbG5hbWUpOgogICAgICAgICAiIiJSZXR1cm4gTm9uZSBhcyB0aGVyZSBpcyBubyBzb3VyY2UgY29kZS4iIiIKQEAgLTExMjEsMjMgKzE2OTgsMzAgQEAKICAgICAgICAgc2VsZi5uYW1lID0gbmFtZQogICAgICAgICBzZWxmLnBhdGggPSBwYXRoCiAKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIChzZWxmLl9fY2xhc3NfXyA9PSBvdGhlci5fX2NsYXNzX18gYW5kCisgICAgICAgICAgICAgICAgc2VsZi5fX2RpY3RfXyA9PSBvdGhlci5fX2RpY3RfXykKKworICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGhhc2goc2VsZi5uYW1lKSBeIGhhc2goc2VsZi5wYXRoKQorCiAgICAgQF9jaGVja19uYW1lCi0gICAgQHNldF9wYWNrYWdlCi0gICAgQHNldF9sb2FkZXIKICAgICBkZWYgbG9hZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUpOgogICAgICAgICAiIiJMb2FkIGFuIGV4dGVuc2lvbiBtb2R1bGUuIiIiCi0gICAgICAgIGlzX3JlbG9hZCA9IGZ1bGxuYW1lIGluIHN5cy5tb2R1bGVzCi0gICAgICAgIHRyeToKKyAgICAgICAgIyBPbmNlIGFuIGV4ZWNfbW9kdWxlKCkgaW1wbGVtZW50YXRpb24gaXMgYWRkZWQgd2UgY2FuIGFsc28KKyAgICAgICAgIyBhZGQgYSBkZXByZWNhdGlvbiB3YXJuaW5nIGhlcmUuCisgICAgICAgIHdpdGggX01hbmFnZVJlbG9hZChmdWxsbmFtZSk6CiAgICAgICAgICAgICBtb2R1bGUgPSBfY2FsbF93aXRoX2ZyYW1lc19yZW1vdmVkKF9pbXAubG9hZF9keW5hbWljLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdWxsbmFtZSwgc2VsZi5wYXRoKQotICAgICAgICAgICAgX3ZlcmJvc2VfbWVzc2FnZSgnZXh0ZW5zaW9uIG1vZHVsZSBsb2FkZWQgZnJvbSB7IXJ9Jywgc2VsZi5wYXRoKQotICAgICAgICAgICAgaWYgc2VsZi5pc19wYWNrYWdlKGZ1bGxuYW1lKSBhbmQgbm90IGhhc2F0dHIobW9kdWxlLCAnX19wYXRoX18nKToKLSAgICAgICAgICAgICAgICBtb2R1bGUuX19wYXRoX18gPSBbX3BhdGhfc3BsaXQoc2VsZi5wYXRoKVswXV0KLSAgICAgICAgICAgIHJldHVybiBtb2R1bGUKLSAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgaWYgbm90IGlzX3JlbG9hZCBhbmQgZnVsbG5hbWUgaW4gc3lzLm1vZHVsZXM6Ci0gICAgICAgICAgICAgICAgZGVsIHN5cy5tb2R1bGVzW2Z1bGxuYW1lXQotICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgX3ZlcmJvc2VfbWVzc2FnZSgnZXh0ZW5zaW9uIG1vZHVsZSBsb2FkZWQgZnJvbSB7IXJ9Jywgc2VsZi5wYXRoKQorICAgICAgICBpc19wYWNrYWdlID0gc2VsZi5pc19wYWNrYWdlKGZ1bGxuYW1lKQorICAgICAgICBpZiBpc19wYWNrYWdlIGFuZCBub3QgaGFzYXR0cihtb2R1bGUsICdfX3BhdGhfXycpOgorICAgICAgICAgICAgbW9kdWxlLl9fcGF0aF9fID0gW19wYXRoX3NwbGl0KHNlbGYucGF0aClbMF1dCisgICAgICAgIG1vZHVsZS5fX2xvYWRlcl9fID0gc2VsZgorICAgICAgICBtb2R1bGUuX19wYWNrYWdlX18gPSBtb2R1bGUuX19uYW1lX18KKyAgICAgICAgaWYgbm90IGlzX3BhY2thZ2U6CisgICAgICAgICAgICBtb2R1bGUuX19wYWNrYWdlX18gPSBtb2R1bGUuX19wYWNrYWdlX18ucnBhcnRpdGlvbignLicpWzBdCisgICAgICAgIHJldHVybiBtb2R1bGUKIAogICAgIGRlZiBpc19wYWNrYWdlKHNlbGYsIGZ1bGxuYW1lKToKICAgICAgICAgIiIiUmV0dXJuIFRydWUgaWYgdGhlIGV4dGVuc2lvbiBtb2R1bGUgaXMgYSBwYWNrYWdlLiIiIgpAQCAtMTE1Myw2ICsxNzM3LDExIEBACiAgICAgICAgICIiIlJldHVybiBOb25lIGFzIGV4dGVuc2lvbiBtb2R1bGVzIGhhdmUgbm8gc291cmNlIGNvZGUuIiIiCiAgICAgICAgIHJldHVybiBOb25lCiAKKyAgICBAX2NoZWNrX25hbWUKKyAgICBkZWYgZ2V0X2ZpbGVuYW1lKHNlbGYsIGZ1bGxuYW1lKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSBwYXRoIHRvIHRoZSBzb3VyY2UgZmlsZSBhcyBmb3VuZCBieSB0aGUgZmluZGVyLiIiIgorICAgICAgICByZXR1cm4gc2VsZi5wYXRoCisKIAogY2xhc3MgX05hbWVzcGFjZVBhdGg6CiAgICAgIiIiUmVwcmVzZW50cyBhIG5hbWVzcGFjZSBwYWNrYWdlJ3MgcGF0aC4gIEl0IHVzZXMgdGhlIG1vZHVsZSBuYW1lCkBAIC0xMTg1LDExICsxNzc0LDEyIEBACiAgICAgICAgICMgSWYgdGhlIHBhcmVudCdzIHBhdGggaGFzIGNoYW5nZWQsIHJlY2FsY3VsYXRlIF9wYXRoCiAgICAgICAgIHBhcmVudF9wYXRoID0gdHVwbGUoc2VsZi5fZ2V0X3BhcmVudF9wYXRoKCkpICMgTWFrZSBhIGNvcHkKICAgICAgICAgaWYgcGFyZW50X3BhdGggIT0gc2VsZi5fbGFzdF9wYXJlbnRfcGF0aDoKLSAgICAgICAgICAgIGxvYWRlciwgbmV3X3BhdGggPSBzZWxmLl9wYXRoX2ZpbmRlcihzZWxmLl9uYW1lLCBwYXJlbnRfcGF0aCkKKyAgICAgICAgICAgIHNwZWMgPSBzZWxmLl9wYXRoX2ZpbmRlcihzZWxmLl9uYW1lLCBwYXJlbnRfcGF0aCkKICAgICAgICAgICAgICMgTm90ZSB0aGF0IG5vIGNoYW5nZXMgYXJlIG1hZGUgaWYgYSBsb2FkZXIgaXMgcmV0dXJuZWQsIGJ1dCB3ZQogICAgICAgICAgICAgIyAgZG8gcmVtZW1iZXIgdGhlIG5ldyBwYXJlbnQgcGF0aAotICAgICAgICAgICAgaWYgbG9hZGVyIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgc2VsZi5fcGF0aCA9IG5ld19wYXRoCisgICAgICAgICAgICBpZiBzcGVjIGlzIG5vdCBOb25lIGFuZCBzcGVjLmxvYWRlciBpcyBOb25lOgorICAgICAgICAgICAgICAgIGlmIHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnM6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3BhdGggPSBzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zCiAgICAgICAgICAgICBzZWxmLl9sYXN0X3BhcmVudF9wYXRoID0gcGFyZW50X3BhdGggICAgICMgU2F2ZSB0aGUgY29weQogICAgICAgICByZXR1cm4gc2VsZi5fcGF0aAogCkBAIC0xMjAwLDcgKzE3OTAsNyBAQAogICAgICAgICByZXR1cm4gbGVuKHNlbGYuX3JlY2FsY3VsYXRlKCkpCiAKICAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAgIHJldHVybiAiX05hbWVzcGFjZVBhdGgoeyFyfSkiLmZvcm1hdChzZWxmLl9wYXRoKQorICAgICAgICByZXR1cm4gJ19OYW1lc3BhY2VQYXRoKHshcn0pJy5mb3JtYXQoc2VsZi5fcGF0aCkKIAogICAgIGRlZiBfX2NvbnRhaW5zX18oc2VsZiwgaXRlbSk6CiAgICAgICAgIHJldHVybiBpdGVtIGluIHNlbGYuX3JlY2FsY3VsYXRlKCkKQEAgLTEyMDksMjAgKzE3OTksNDEgQEAKICAgICAgICAgc2VsZi5fcGF0aC5hcHBlbmQoaXRlbSkKIAogCi1jbGFzcyBOYW1lc3BhY2VMb2FkZXI6CisjIFdlIHVzZSB0aGlzIGV4Y2x1c2l2ZWx5IGluIGluaXRfbW9kdWxlX2F0dHJzKCkgZm9yIGJhY2t3YXJkLWNvbXBhdGliaWxpdHkuCitjbGFzcyBfTmFtZXNwYWNlTG9hZGVyOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBwYXRoLCBwYXRoX2ZpbmRlcik6CiAgICAgICAgIHNlbGYuX3BhdGggPSBfTmFtZXNwYWNlUGF0aChuYW1lLCBwYXRoLCBwYXRoX2ZpbmRlcikKIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBtb2R1bGVfcmVwcihjbHMsIG1vZHVsZSk6Ci0gICAgICAgIHJldHVybiAiPG1vZHVsZSAne30nIChuYW1lc3BhY2UpPiIuZm9ybWF0KG1vZHVsZS5fX25hbWVfXykKKyAgICAgICAgIiIiUmV0dXJuIHJlcHIgZm9yIHRoZSBtb2R1bGUuCiAKLSAgICBAbW9kdWxlX2Zvcl9sb2FkZXIKLSAgICBkZWYgbG9hZF9tb2R1bGUoc2VsZiwgbW9kdWxlKToKLSAgICAgICAgIiIiTG9hZCBhIG5hbWVzcGFjZSBtb2R1bGUuIiIiCisgICAgICAgIFRoZSBtZXRob2QgaXMgZGVwcmVjYXRlZC4gIFRoZSBpbXBvcnQgbWFjaGluZXJ5IGRvZXMgdGhlIGpvYiBpdHNlbGYuCisKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiAnPG1vZHVsZSB7IXJ9IChuYW1lc3BhY2UpPicuZm9ybWF0KG1vZHVsZS5fX25hbWVfXykKKworICAgIGRlZiBpc19wYWNrYWdlKHNlbGYsIGZ1bGxuYW1lKToKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBnZXRfc291cmNlKHNlbGYsIGZ1bGxuYW1lKToKKyAgICAgICAgcmV0dXJuICcnCisKKyAgICBkZWYgZ2V0X2NvZGUoc2VsZiwgZnVsbG5hbWUpOgorICAgICAgICByZXR1cm4gY29tcGlsZSgnJywgJzxzdHJpbmc+JywgJ2V4ZWMnLCBkb250X2luaGVyaXQ9VHJ1ZSkKKworICAgIGRlZiBleGVjX21vZHVsZShzZWxmLCBtb2R1bGUpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgbG9hZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUpOgorICAgICAgICAiIiJMb2FkIGEgbmFtZXNwYWNlIG1vZHVsZS4KKworICAgICAgICBUaGlzIG1ldGhvZCBpcyBkZXByZWNhdGVkLiAgVXNlIGV4ZWNfbW9kdWxlKCkgaW5zdGVhZC4KKworICAgICAgICAiIiIKKyAgICAgICAgIyBUaGUgaW1wb3J0IHN5c3RlbSBuZXZlciBjYWxscyB0aGlzIG1ldGhvZC4KICAgICAgICAgX3ZlcmJvc2VfbWVzc2FnZSgnbmFtZXNwYWNlIG1vZHVsZSBsb2FkZWQgd2l0aCBwYXRoIHshcn0nLCBzZWxmLl9wYXRoKQotICAgICAgICBtb2R1bGUuX19wYXRoX18gPSBzZWxmLl9wYXRoCi0gICAgICAgIHJldHVybiBtb2R1bGUKKyAgICAgICAgcmV0dXJuIF9sb2FkX21vZHVsZV9zaGltKHNlbGYsIGZ1bGxuYW1lKQogCiAKICMgRmluZGVycyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKQEAgLTEyNjUsNyArMTg3Niw3IEBACiAKICAgICAgICAgIiIiCiAgICAgICAgIGlmIHBhdGggPT0gJyc6Ci0gICAgICAgICAgICBwYXRoID0gJy4nCisgICAgICAgICAgICBwYXRoID0gX29zLmdldGN3ZCgpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGZpbmRlciA9IHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlW3BhdGhdCiAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKQEAgLTEyNzQsNyArMTg4NSwyMiBAQAogICAgICAgICByZXR1cm4gZmluZGVyCiAKICAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgX2dldF9sb2FkZXIoY2xzLCBmdWxsbmFtZSwgcGF0aCk6CisgICAgZGVmIF9sZWdhY3lfZ2V0X3NwZWMoY2xzLCBmdWxsbmFtZSwgZmluZGVyKToKKyAgICAgICAgIyBUaGlzIHdvdWxkIGJlIGEgZ29vZCBwbGFjZSBmb3IgYSBEZXByZWNhdGlvbldhcm5pbmcgaWYKKyAgICAgICAgIyB3ZSBlbmRlZCB1cCBnb2luZyB0aGF0IHJvdXRlLgorICAgICAgICBpZiBoYXNhdHRyKGZpbmRlciwgJ2ZpbmRfbG9hZGVyJyk6CisgICAgICAgICAgICBsb2FkZXIsIHBvcnRpb25zID0gZmluZGVyLmZpbmRfbG9hZGVyKGZ1bGxuYW1lKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9hZGVyID0gZmluZGVyLmZpbmRfbW9kdWxlKGZ1bGxuYW1lKQorICAgICAgICAgICAgcG9ydGlvbnMgPSBbXQorICAgICAgICBpZiBsb2FkZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICByZXR1cm4gc3BlY19mcm9tX2xvYWRlcihmdWxsbmFtZSwgbG9hZGVyKQorICAgICAgICBzcGVjID0gTW9kdWxlU3BlYyhmdWxsbmFtZSwgTm9uZSkKKyAgICAgICAgc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucyA9IHBvcnRpb25zCisgICAgICAgIHJldHVybiBzcGVjCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX2dldF9zcGVjKGNscywgZnVsbG5hbWUsIHBhdGgsIHRhcmdldD1Ob25lKToKICAgICAgICAgIiIiRmluZCB0aGUgbG9hZGVyIG9yIG5hbWVzcGFjZV9wYXRoIGZvciB0aGlzIG1vZHVsZS9wYWNrYWdlIG5hbWUuIiIiCiAgICAgICAgICMgSWYgdGhpcyBlbmRzIHVwIGJlaW5nIGEgbmFtZXNwYWNlIHBhY2thZ2UsIG5hbWVzcGFjZV9wYXRoIGlzCiAgICAgICAgICMgIHRoZSBsaXN0IG9mIHBhdGhzIHRoYXQgd2lsbCBiZWNvbWUgaXRzIF9fcGF0aF9fCkBAIC0xMjg0LDM4ICsxOTEwLDYxIEBACiAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgIGZpbmRlciA9IGNscy5fcGF0aF9pbXBvcnRlcl9jYWNoZShlbnRyeSkKICAgICAgICAgICAgIGlmIGZpbmRlciBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICBpZiBoYXNhdHRyKGZpbmRlciwgJ2ZpbmRfbG9hZGVyJyk6Ci0gICAgICAgICAgICAgICAgICAgIGxvYWRlciwgcG9ydGlvbnMgPSBmaW5kZXIuZmluZF9sb2FkZXIoZnVsbG5hbWUpCisgICAgICAgICAgICAgICAgaWYgaGFzYXR0cihmaW5kZXIsICdmaW5kX3NwZWMnKToKKyAgICAgICAgICAgICAgICAgICAgc3BlYyA9IGZpbmRlci5maW5kX3NwZWMoZnVsbG5hbWUsIHRhcmdldCkKICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBsb2FkZXIgPSBmaW5kZXIuZmluZF9tb2R1bGUoZnVsbG5hbWUpCi0gICAgICAgICAgICAgICAgICAgIHBvcnRpb25zID0gW10KLSAgICAgICAgICAgICAgICBpZiBsb2FkZXIgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgICMgV2UgZm91bmQgYSBsb2FkZXI6IHJldHVybiBpdCBpbW1lZGlhdGVseS4KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxvYWRlciwgbmFtZXNwYWNlX3BhdGgKKyAgICAgICAgICAgICAgICAgICAgc3BlYyA9IGNscy5fbGVnYWN5X2dldF9zcGVjKGZ1bGxuYW1lLCBmaW5kZXIpCisgICAgICAgICAgICAgICAgaWYgc3BlYyBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGlmIHNwZWMubG9hZGVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3BlYworICAgICAgICAgICAgICAgIHBvcnRpb25zID0gc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucworICAgICAgICAgICAgICAgIGlmIHBvcnRpb25zIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCdzcGVjIG1pc3NpbmcgbG9hZGVyJykKICAgICAgICAgICAgICAgICAjIFRoaXMgaXMgcG9zc2libHkgcGFydCBvZiBhIG5hbWVzcGFjZSBwYWNrYWdlLgogICAgICAgICAgICAgICAgICMgIFJlbWVtYmVyIHRoZXNlIHBhdGggZW50cmllcyAoaWYgYW55KSBmb3Igd2hlbiB3ZQogICAgICAgICAgICAgICAgICMgIGNyZWF0ZSBhIG5hbWVzcGFjZSBwYWNrYWdlLCBhbmQgY29udGludWUgaXRlcmF0aW5nCiAgICAgICAgICAgICAgICAgIyAgb24gcGF0aC4KICAgICAgICAgICAgICAgICBuYW1lc3BhY2VfcGF0aC5leHRlbmQocG9ydGlvbnMpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gTm9uZSwgbmFtZXNwYWNlX3BhdGgKKyAgICAgICAgICAgIHNwZWMgPSBNb2R1bGVTcGVjKGZ1bGxuYW1lLCBOb25lKQorICAgICAgICAgICAgc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucyA9IG5hbWVzcGFjZV9wYXRoCisgICAgICAgICAgICByZXR1cm4gc3BlYwogCiAgICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIGZpbmRfbW9kdWxlKGNscywgZnVsbG5hbWUsIHBhdGg9Tm9uZSk6Ci0gICAgICAgICIiIkZpbmQgdGhlIG1vZHVsZSBvbiBzeXMucGF0aCBvciAncGF0aCcgYmFzZWQgb24gc3lzLnBhdGhfaG9va3MgYW5kCisgICAgZGVmIGZpbmRfc3BlYyhjbHMsIGZ1bGxuYW1lLCBwYXRoPU5vbmUsIHRhcmdldD1Ob25lKToKKyAgICAgICAgIiIiZmluZCB0aGUgbW9kdWxlIG9uIHN5cy5wYXRoIG9yICdwYXRoJyBiYXNlZCBvbiBzeXMucGF0aF9ob29rcyBhbmQKICAgICAgICAgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGUuIiIiCiAgICAgICAgIGlmIHBhdGggaXMgTm9uZToKICAgICAgICAgICAgIHBhdGggPSBzeXMucGF0aAotICAgICAgICBsb2FkZXIsIG5hbWVzcGFjZV9wYXRoID0gY2xzLl9nZXRfbG9hZGVyKGZ1bGxuYW1lLCBwYXRoKQotICAgICAgICBpZiBsb2FkZXIgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICByZXR1cm4gbG9hZGVyCi0gICAgICAgIGVsc2U6CisgICAgICAgIHNwZWMgPSBjbHMuX2dldF9zcGVjKGZ1bGxuYW1lLCBwYXRoLCB0YXJnZXQpCisgICAgICAgIGlmIHNwZWMgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIGVsaWYgc3BlYy5sb2FkZXIgaXMgTm9uZToKKyAgICAgICAgICAgIG5hbWVzcGFjZV9wYXRoID0gc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucwogICAgICAgICAgICAgaWYgbmFtZXNwYWNlX3BhdGg6CiAgICAgICAgICAgICAgICAgIyBXZSBmb3VuZCBhdCBsZWFzdCBvbmUgbmFtZXNwYWNlIHBhdGguICBSZXR1cm4gYQotICAgICAgICAgICAgICAgICMgIGxvYWRlciB3aGljaCBjYW4gY3JlYXRlIHRoZSBuYW1lc3BhY2UgcGFja2FnZS4KLSAgICAgICAgICAgICAgICByZXR1cm4gTmFtZXNwYWNlTG9hZGVyKGZ1bGxuYW1lLCBuYW1lc3BhY2VfcGF0aCwgY2xzLl9nZXRfbG9hZGVyKQorICAgICAgICAgICAgICAgICMgIHNwZWMgd2hpY2ggY2FuIGNyZWF0ZSB0aGUgbmFtZXNwYWNlIHBhY2thZ2UuCisgICAgICAgICAgICAgICAgc3BlYy5vcmlnaW4gPSAnbmFtZXNwYWNlJworICAgICAgICAgICAgICAgIHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMgPSBfTmFtZXNwYWNlUGF0aChmdWxsbmFtZSwgbmFtZXNwYWNlX3BhdGgsIGNscy5fZ2V0X3NwZWMpCisgICAgICAgICAgICAgICAgcmV0dXJuIHNwZWMKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBzcGVjCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZmluZF9tb2R1bGUoY2xzLCBmdWxsbmFtZSwgcGF0aD1Ob25lKToKKyAgICAgICAgIiIiZmluZCB0aGUgbW9kdWxlIG9uIHN5cy5wYXRoIG9yICdwYXRoJyBiYXNlZCBvbiBzeXMucGF0aF9ob29rcyBhbmQKKyAgICAgICAgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGUuCisKKyAgICAgICAgVGhpcyBtZXRob2QgaXMgZGVwcmVjYXRlZC4gIFVzZSBmaW5kX3NwZWMoKSBpbnN0ZWFkLgorCisgICAgICAgICIiIgorICAgICAgICBzcGVjID0gY2xzLmZpbmRfc3BlYyhmdWxsbmFtZSwgcGF0aCkKKyAgICAgICAgaWYgc3BlYyBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgcmV0dXJuIHNwZWMubG9hZGVyCiAKIAogY2xhc3MgRmlsZUZpbmRlcjoKQEAgLTEzNDksMTEgKzE5OTgsMjggQEAKIAogICAgIGRlZiBmaW5kX2xvYWRlcihzZWxmLCBmdWxsbmFtZSk6CiAgICAgICAgICIiIlRyeSB0byBmaW5kIGEgbG9hZGVyIGZvciB0aGUgc3BlY2lmaWVkIG1vZHVsZSwgb3IgdGhlIG5hbWVzcGFjZQorICAgICAgICBwYWNrYWdlIHBvcnRpb25zLiBSZXR1cm5zIChsb2FkZXIsIGxpc3Qtb2YtcG9ydGlvbnMpLgorCisgICAgICAgIFRoaXMgbWV0aG9kIGlzIGRlcHJlY2F0ZWQuICBVc2UgZmluZF9zcGVjKCkgaW5zdGVhZC4KKworICAgICAgICAiIiIKKyAgICAgICAgc3BlYyA9IHNlbGYuZmluZF9zcGVjKGZ1bGxuYW1lKQorICAgICAgICBpZiBzcGVjIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gTm9uZSwgW10KKyAgICAgICAgcmV0dXJuIHNwZWMubG9hZGVyLCBzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zIG9yIFtdCisKKyAgICBkZWYgX2dldF9zcGVjKHNlbGYsIGxvYWRlcl9jbGFzcywgZnVsbG5hbWUsIHBhdGgsIHNtc2wsIHRhcmdldCk6CisgICAgICAgIGxvYWRlciA9IGxvYWRlcl9jbGFzcyhmdWxsbmFtZSwgcGF0aCkKKyAgICAgICAgcmV0dXJuIHNwZWNfZnJvbV9maWxlX2xvY2F0aW9uKGZ1bGxuYW1lLCBwYXRoLCBsb2FkZXI9bG9hZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnM9c21zbCkKKworICAgIGRlZiBmaW5kX3NwZWMoc2VsZiwgZnVsbG5hbWUsIHRhcmdldD1Ob25lKToKKyAgICAgICAgIiIiVHJ5IHRvIGZpbmQgYSBsb2FkZXIgZm9yIHRoZSBzcGVjaWZpZWQgbW9kdWxlLCBvciB0aGUgbmFtZXNwYWNlCiAgICAgICAgIHBhY2thZ2UgcG9ydGlvbnMuIFJldHVybnMgKGxvYWRlciwgbGlzdC1vZi1wb3J0aW9ucykuIiIiCiAgICAgICAgIGlzX25hbWVzcGFjZSA9IEZhbHNlCiAgICAgICAgIHRhaWxfbW9kdWxlID0gZnVsbG5hbWUucnBhcnRpdGlvbignLicpWzJdCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIG10aW1lID0gX29zLnN0YXQoc2VsZi5wYXRoKS5zdF9tdGltZQorICAgICAgICAgICAgbXRpbWUgPSBfcGF0aF9zdGF0KHNlbGYucGF0aCBvciBfb3MuZ2V0Y3dkKCkpLnN0X210aW1lCiAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgbXRpbWUgPSAtMQogICAgICAgICBpZiBtdGltZSAhPSBzZWxmLl9wYXRoX210aW1lOgpAQCAtMTM2OSwzMyArMjAzNSwzNCBAQAogICAgICAgICAjIENoZWNrIGlmIHRoZSBtb2R1bGUgaXMgdGhlIG5hbWUgb2YgYSBkaXJlY3RvcnkgKGFuZCB0aHVzIGEgcGFja2FnZSkuCiAgICAgICAgIGlmIGNhY2hlX21vZHVsZSBpbiBjYWNoZToKICAgICAgICAgICAgIGJhc2VfcGF0aCA9IF9wYXRoX2pvaW4oc2VsZi5wYXRoLCB0YWlsX21vZHVsZSkKLSAgICAgICAgICAgIGlmIF9wYXRoX2lzZGlyKGJhc2VfcGF0aCk6Ci0gICAgICAgICAgICAgICAgZm9yIHN1ZmZpeCwgbG9hZGVyIGluIHNlbGYuX2xvYWRlcnM6Ci0gICAgICAgICAgICAgICAgICAgIGluaXRfZmlsZW5hbWUgPSAnX19pbml0X18nICsgc3VmZml4Ci0gICAgICAgICAgICAgICAgICAgIGZ1bGxfcGF0aCA9IF9wYXRoX2pvaW4oYmFzZV9wYXRoLCBpbml0X2ZpbGVuYW1lKQotICAgICAgICAgICAgICAgICAgICBpZiBfcGF0aF9pc2ZpbGUoZnVsbF9wYXRoKToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAobG9hZGVyKGZ1bGxuYW1lLCBmdWxsX3BhdGgpLCBbYmFzZV9wYXRoXSkKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAjIEEgbmFtZXNwYWNlIHBhY2thZ2UsIHJldHVybiB0aGUgcGF0aCBpZiB3ZSBkb24ndCBhbHNvCi0gICAgICAgICAgICAgICAgICAgICMgIGZpbmQgYSBtb2R1bGUgaW4gdGhlIG5leHQgc2VjdGlvbi4KLSAgICAgICAgICAgICAgICAgICAgaXNfbmFtZXNwYWNlID0gVHJ1ZQorICAgICAgICAgICAgZm9yIHN1ZmZpeCwgbG9hZGVyX2NsYXNzIGluIHNlbGYuX2xvYWRlcnM6CisgICAgICAgICAgICAgICAgaW5pdF9maWxlbmFtZSA9ICdfX2luaXRfXycgKyBzdWZmaXgKKyAgICAgICAgICAgICAgICBmdWxsX3BhdGggPSBfcGF0aF9qb2luKGJhc2VfcGF0aCwgaW5pdF9maWxlbmFtZSkKKyAgICAgICAgICAgICAgICBpZiBfcGF0aF9pc2ZpbGUoZnVsbF9wYXRoKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2dldF9zcGVjKGxvYWRlcl9jbGFzcywgZnVsbG5hbWUsIGZ1bGxfcGF0aCwgW2Jhc2VfcGF0aF0sIHRhcmdldCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBJZiBhIG5hbWVzcGFjZSBwYWNrYWdlLCByZXR1cm4gdGhlIHBhdGggaWYgd2UgZG9uJ3QKKyAgICAgICAgICAgICAgICAjICBmaW5kIGEgbW9kdWxlIGluIHRoZSBuZXh0IHNlY3Rpb24uCisgICAgICAgICAgICAgICAgaXNfbmFtZXNwYWNlID0gX3BhdGhfaXNkaXIoYmFzZV9wYXRoKQogICAgICAgICAjIENoZWNrIGZvciBhIGZpbGUgdy8gYSBwcm9wZXIgc3VmZml4IGV4aXN0cy4KLSAgICAgICAgZm9yIHN1ZmZpeCwgbG9hZGVyIGluIHNlbGYuX2xvYWRlcnM6CisgICAgICAgIGZvciBzdWZmaXgsIGxvYWRlcl9jbGFzcyBpbiBzZWxmLl9sb2FkZXJzOgogICAgICAgICAgICAgZnVsbF9wYXRoID0gX3BhdGhfam9pbihzZWxmLnBhdGgsIHRhaWxfbW9kdWxlICsgc3VmZml4KQogICAgICAgICAgICAgX3ZlcmJvc2VfbWVzc2FnZSgndHJ5aW5nIHt9Jy5mb3JtYXQoZnVsbF9wYXRoKSwgdmVyYm9zaXR5PTIpCiAgICAgICAgICAgICBpZiBjYWNoZV9tb2R1bGUgKyBzdWZmaXggaW4gY2FjaGU6CiAgICAgICAgICAgICAgICAgaWYgX3BhdGhfaXNmaWxlKGZ1bGxfcGF0aCk6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAobG9hZGVyKGZ1bGxuYW1lLCBmdWxsX3BhdGgpLCBbXSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2dldF9zcGVjKGxvYWRlcl9jbGFzcywgZnVsbG5hbWUsIGZ1bGxfcGF0aCwgTm9uZSwgdGFyZ2V0KQogICAgICAgICBpZiBpc19uYW1lc3BhY2U6CiAgICAgICAgICAgICBfdmVyYm9zZV9tZXNzYWdlKCdwb3NzaWJsZSBuYW1lc3BhY2UgZm9yIHt9Jy5mb3JtYXQoYmFzZV9wYXRoKSkKLSAgICAgICAgICAgIHJldHVybiAoTm9uZSwgW2Jhc2VfcGF0aF0pCi0gICAgICAgIHJldHVybiAoTm9uZSwgW10pCisgICAgICAgICAgICBzcGVjID0gTW9kdWxlU3BlYyhmdWxsbmFtZSwgTm9uZSkKKyAgICAgICAgICAgIHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMgPSBbYmFzZV9wYXRoXQorICAgICAgICAgICAgcmV0dXJuIHNwZWMKKyAgICAgICAgcmV0dXJuIE5vbmUKIAogICAgIGRlZiBfZmlsbF9jYWNoZShzZWxmKToKICAgICAgICAgIiIiRmlsbCB0aGUgY2FjaGUgb2YgcG90ZW50aWFsIG1vZHVsZXMgYW5kIHBhY2thZ2VzIGZvciB0aGlzIGRpcmVjdG9yeS4iIiIKICAgICAgICAgcGF0aCA9IHNlbGYucGF0aAogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBjb250ZW50cyA9IF9vcy5saXN0ZGlyKHBhdGgpCisgICAgICAgICAgICBjb250ZW50cyA9IF9vcy5saXN0ZGlyKHBhdGggb3IgX29zLmdldGN3ZCgpKQogICAgICAgICBleGNlcHQgKEZpbGVOb3RGb3VuZEVycm9yLCBQZXJtaXNzaW9uRXJyb3IsIE5vdEFEaXJlY3RvcnlFcnJvcik6CiAgICAgICAgICAgICAjIERpcmVjdG9yeSBoYXMgZWl0aGVyIGJlZW4gcmVtb3ZlZCwgdHVybmVkIGludG8gYSBmaWxlLCBvciBtYWRlCiAgICAgICAgICAgICAjIHVucmVhZGFibGUuCkBAIC0xNDIwLDcgKzIwODcsNyBAQAogICAgICAgICAgICAgICAgIGxvd2VyX3N1ZmZpeF9jb250ZW50cy5hZGQobmV3X25hbWUpCiAgICAgICAgICAgICBzZWxmLl9wYXRoX2NhY2hlID0gbG93ZXJfc3VmZml4X2NvbnRlbnRzCiAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKF9DQVNFX0lOU0VOU0lUSVZFX1BMQVRGT1JNUyk6Ci0gICAgICAgICAgICBzZWxmLl9yZWxheGVkX3BhdGhfY2FjaGUgPSBzZXQoZm4ubG93ZXIoKSBmb3IgZm4gaW4gY29udGVudHMpCisgICAgICAgICAgICBzZWxmLl9yZWxheGVkX3BhdGhfY2FjaGUgPSB7Zm4ubG93ZXIoKSBmb3IgZm4gaW4gY29udGVudHN9CiAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgcGF0aF9ob29rKGNscywgKmxvYWRlcl9kZXRhaWxzKToKQEAgLTE0MzUsMTMgKzIxMDIsMTMgQEAKICAgICAgICAgZGVmIHBhdGhfaG9va19mb3JfRmlsZUZpbmRlcihwYXRoKToKICAgICAgICAgICAgICIiIlBhdGggaG9vayBmb3IgaW1wb3J0bGliLm1hY2hpbmVyeS5GaWxlRmluZGVyLiIiIgogICAgICAgICAgICAgaWYgbm90IF9wYXRoX2lzZGlyKHBhdGgpOgotICAgICAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCJvbmx5IGRpcmVjdG9yaWVzIGFyZSBzdXBwb3J0ZWQiLCBwYXRoPXBhdGgpCisgICAgICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoJ29ubHkgZGlyZWN0b3JpZXMgYXJlIHN1cHBvcnRlZCcsIHBhdGg9cGF0aCkKICAgICAgICAgICAgIHJldHVybiBjbHMocGF0aCwgKmxvYWRlcl9kZXRhaWxzKQogCiAgICAgICAgIHJldHVybiBwYXRoX2hvb2tfZm9yX0ZpbGVGaW5kZXIKIAogICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuICJGaWxlRmluZGVyKCVyKSIgJSAoc2VsZi5wYXRoLCkKKyAgICAgICAgcmV0dXJuICdGaWxlRmluZGVyKHshcn0pJy5mb3JtYXQoc2VsZi5wYXRoKQogCiAKICMgSW1wb3J0IGl0c2VsZiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKQEAgLTE0NjgsMTkgKzIxMzUsNTEgQEAKICAgICByZXR1cm4gJ3t9Lnt9Jy5mb3JtYXQoYmFzZSwgbmFtZSkgaWYgbmFtZSBlbHNlIGJhc2UKIAogCi1kZWYgX2ZpbmRfbW9kdWxlKG5hbWUsIHBhdGgpOgorZGVmIF9maW5kX3NwZWNfbGVnYWN5KGZpbmRlciwgbmFtZSwgcGF0aCk6CisgICAgIyBUaGlzIHdvdWxkIGJlIGEgZ29vZCBwbGFjZSBmb3IgYSBEZXByZWNhdGlvbldhcm5pbmcgaWYKKyAgICAjIHdlIGVuZGVkIHVwIGdvaW5nIHRoYXQgcm91dGUuCisgICAgbG9hZGVyID0gZmluZGVyLmZpbmRfbW9kdWxlKG5hbWUsIHBhdGgpCisgICAgaWYgbG9hZGVyIGlzIE5vbmU6CisgICAgICAgIHJldHVybiBOb25lCisgICAgcmV0dXJuIHNwZWNfZnJvbV9sb2FkZXIobmFtZSwgbG9hZGVyKQorCisKK2RlZiBfZmluZF9zcGVjKG5hbWUsIHBhdGgsIHRhcmdldD1Ob25lKToKICAgICAiIiJGaW5kIGEgbW9kdWxlJ3MgbG9hZGVyLiIiIgogICAgIGlmIG5vdCBzeXMubWV0YV9wYXRoOgogICAgICAgICBfd2FybmluZ3Mud2Fybignc3lzLm1ldGFfcGF0aCBpcyBlbXB0eScsIEltcG9ydFdhcm5pbmcpCisgICAgIyBXZSBjaGVjayBzeXMubW9kdWxlcyBoZXJlIGZvciB0aGUgcmVsb2FkIGNhc2UuICBXaGlsZSBhIHBhc3NlZC1pbgorICAgICMgdGFyZ2V0IHdpbGwgdXN1YWxseSBpbmRpY2F0ZSBhIHJlbG9hZCB0aGVyZSBpcyBubyBndWFyYW50ZWUsIHdoZXJlYXMKKyAgICAjIHN5cy5tb2R1bGVzIHByb3ZpZGVzIG9uZS4KKyAgICBpc19yZWxvYWQgPSBuYW1lIGluIHN5cy5tb2R1bGVzCiAgICAgZm9yIGZpbmRlciBpbiBzeXMubWV0YV9wYXRoOgogICAgICAgICB3aXRoIF9JbXBvcnRMb2NrQ29udGV4dCgpOgotICAgICAgICAgICAgbG9hZGVyID0gZmluZGVyLmZpbmRfbW9kdWxlKG5hbWUsIHBhdGgpCi0gICAgICAgIGlmIGxvYWRlciBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICMgVGhlIHBhcmVudCBpbXBvcnQgbWF5IGhhdmUgYWxyZWFkeSBpbXBvcnRlZCB0aGlzIG1vZHVsZS4KLSAgICAgICAgICAgIGlmIG5hbWUgbm90IGluIHN5cy5tb2R1bGVzOgotICAgICAgICAgICAgICAgIHJldHVybiBsb2FkZXIKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBmaW5kX3NwZWMgPSBmaW5kZXIuZmluZF9zcGVjCisgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgc3BlYyA9IF9maW5kX3NwZWNfbGVnYWN5KGZpbmRlciwgbmFtZSwgcGF0aCkKKyAgICAgICAgICAgICAgICBpZiBzcGVjIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVybiBzeXMubW9kdWxlc1tuYW1lXS5fX2xvYWRlcl9fCisgICAgICAgICAgICAgICAgc3BlYyA9IGZpbmRfc3BlYyhuYW1lLCBwYXRoLCB0YXJnZXQpCisgICAgICAgIGlmIHNwZWMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAjIFRoZSBwYXJlbnQgaW1wb3J0IG1heSBoYXZlIGFscmVhZHkgaW1wb3J0ZWQgdGhpcyBtb2R1bGUuCisgICAgICAgICAgICBpZiBub3QgaXNfcmVsb2FkIGFuZCBuYW1lIGluIHN5cy5tb2R1bGVzOgorICAgICAgICAgICAgICAgIG1vZHVsZSA9IHN5cy5tb2R1bGVzW25hbWVdCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBfX3NwZWNfXyA9IG1vZHVsZS5fX3NwZWNfXworICAgICAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgIyBXZSB1c2UgdGhlIGZvdW5kIHNwZWMgc2luY2UgdGhhdCBpcyB0aGUgb25lIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgIyB3ZSB3b3VsZCBoYXZlIHVzZWQgaWYgdGhlIHBhcmVudCBtb2R1bGUgaGFkbid0CisgICAgICAgICAgICAgICAgICAgICMgYmVhdGVuIHVzIHRvIHRoZSBwdW5jaC4KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNwZWMKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBpZiBfX3NwZWNfXyBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNwZWMKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfX3NwZWNfXworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gc3BlYwogICAgIGVsc2U6CiAgICAgICAgIHJldHVybiBOb25lCiAKQEAgLTE0ODgsMjEgKzIxODcsMjIgQEAKIGRlZiBfc2FuaXR5X2NoZWNrKG5hbWUsIHBhY2thZ2UsIGxldmVsKToKICAgICAiIiJWZXJpZnkgYXJndW1lbnRzIGFyZSAic2FuZSIuIiIiCiAgICAgaWYgbm90IGlzaW5zdGFuY2UobmFtZSwgc3RyKToKLSAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJtb2R1bGUgbmFtZSBtdXN0IGJlIHN0ciwgbm90IHt9Ii5mb3JtYXQodHlwZShuYW1lKSkpCisgICAgICAgIHJhaXNlIFR5cGVFcnJvcignbW9kdWxlIG5hbWUgbXVzdCBiZSBzdHIsIG5vdCB7fScuZm9ybWF0KHR5cGUobmFtZSkpKQogICAgIGlmIGxldmVsIDwgMDoKICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignbGV2ZWwgbXVzdCBiZSA+PSAwJykKICAgICBpZiBwYWNrYWdlOgogICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShwYWNrYWdlLCBzdHIpOgotICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJfX3BhY2thZ2VfXyBub3Qgc2V0IHRvIGEgc3RyaW5nIikKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignX19wYWNrYWdlX18gbm90IHNldCB0byBhIHN0cmluZycpCiAgICAgICAgIGVsaWYgcGFja2FnZSBub3QgaW4gc3lzLm1vZHVsZXM6Ci0gICAgICAgICAgICBtc2cgPSAoIlBhcmVudCBtb2R1bGUgeyFyfSBub3QgbG9hZGVkLCBjYW5ub3QgcGVyZm9ybSByZWxhdGl2ZSAiCi0gICAgICAgICAgICAgICAgICAgImltcG9ydCIpCisgICAgICAgICAgICBtc2cgPSAoJ1BhcmVudCBtb2R1bGUgeyFyfSBub3QgbG9hZGVkLCBjYW5ub3QgcGVyZm9ybSByZWxhdGl2ZSAnCisgICAgICAgICAgICAgICAgICAgJ2ltcG9ydCcpCiAgICAgICAgICAgICByYWlzZSBTeXN0ZW1FcnJvcihtc2cuZm9ybWF0KHBhY2thZ2UpKQogICAgIGlmIG5vdCBuYW1lIGFuZCBsZXZlbCA9PSAwOgotICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJFbXB0eSBtb2R1bGUgbmFtZSIpCisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0VtcHR5IG1vZHVsZSBuYW1lJykKIAogCi1fRVJSX01TRyA9ICdObyBtb2R1bGUgbmFtZWQgeyFyfScKK19FUlJfTVNHX1BSRUZJWCA9ICdObyBtb2R1bGUgbmFtZWQgJworX0VSUl9NU0cgPSBfRVJSX01TR19QUkVGSVggKyAneyFyfScKIAogZGVmIF9maW5kX2FuZF9sb2FkX3VubG9ja2VkKG5hbWUsIGltcG9ydF8pOgogICAgIHBhdGggPSBOb25lCkBAIC0xNTEzLDU4ICsyMjEzLDI4IEBACiAgICAgICAgICMgQ3Jhenkgc2lkZS1lZmZlY3RzIQogICAgICAgICBpZiBuYW1lIGluIHN5cy5tb2R1bGVzOgogICAgICAgICAgICAgcmV0dXJuIHN5cy5tb2R1bGVzW25hbWVdCi0gICAgICAgICMgQmFja3dhcmRzLWNvbXBhdGliaWxpdHk7IGJlIG5pY2VyIHRvIHNraXAgdGhlIGRpY3QgbG9va3VwLgogICAgICAgICBwYXJlbnRfbW9kdWxlID0gc3lzLm1vZHVsZXNbcGFyZW50XQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBwYXRoID0gcGFyZW50X21vZHVsZS5fX3BhdGhfXwogICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICBtc2cgPSAoX0VSUl9NU0cgKyAnOyB7fSBpcyBub3QgYSBwYWNrYWdlJykuZm9ybWF0KG5hbWUsIHBhcmVudCkKKyAgICAgICAgICAgIG1zZyA9IChfRVJSX01TRyArICc7IHshcn0gaXMgbm90IGEgcGFja2FnZScpLmZvcm1hdChuYW1lLCBwYXJlbnQpCiAgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcihtc2csIG5hbWU9bmFtZSkKLSAgICBsb2FkZXIgPSBfZmluZF9tb2R1bGUobmFtZSwgcGF0aCkKLSAgICBpZiBsb2FkZXIgaXMgTm9uZToKLSAgICAgICAgZXhjID0gSW1wb3J0RXJyb3IoX0VSUl9NU0cuZm9ybWF0KG5hbWUpLCBuYW1lPW5hbWUpCi0gICAgICAgICMgVE9ETyhicmV0dCk6IHN3aXRjaCB0byBhIHByb3BlciBNb2R1bGVOb3RGb3VuZCBleGNlcHRpb24gaW4gUHl0aG9uCi0gICAgICAgICMgMy40LgotICAgICAgICBleGMuX25vdF9mb3VuZCA9IFRydWUKLSAgICAgICAgcmFpc2UgZXhjCi0gICAgZWxpZiBuYW1lIG5vdCBpbiBzeXMubW9kdWxlczoKLSAgICAgICAgIyBUaGUgcGFyZW50IGltcG9ydCBtYXkgaGF2ZSBhbHJlYWR5IGltcG9ydGVkIHRoaXMgbW9kdWxlLgotICAgICAgICBsb2FkZXIubG9hZF9tb2R1bGUobmFtZSkKLSAgICAgICAgX3ZlcmJvc2VfbWVzc2FnZSgnaW1wb3J0IHshcn0gIyB7IXJ9JywgbmFtZSwgbG9hZGVyKQotICAgICMgQmFja3dhcmRzLWNvbXBhdGliaWxpdHk7IGJlIG5pY2VyIHRvIHNraXAgdGhlIGRpY3QgbG9va3VwLgotICAgIG1vZHVsZSA9IHN5cy5tb2R1bGVzW25hbWVdCisgICAgc3BlYyA9IF9maW5kX3NwZWMobmFtZSwgcGF0aCkKKyAgICBpZiBzcGVjIGlzIE5vbmU6CisgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKF9FUlJfTVNHLmZvcm1hdChuYW1lKSwgbmFtZT1uYW1lKQorICAgIGVsc2U6CisgICAgICAgIG1vZHVsZSA9IF9TcGVjTWV0aG9kcyhzcGVjKS5fbG9hZF91bmxvY2tlZCgpCiAgICAgaWYgcGFyZW50OgogICAgICAgICAjIFNldCB0aGUgbW9kdWxlIGFzIGFuIGF0dHJpYnV0ZSBvbiBpdHMgcGFyZW50LgogICAgICAgICBwYXJlbnRfbW9kdWxlID0gc3lzLm1vZHVsZXNbcGFyZW50XQogICAgICAgICBzZXRhdHRyKHBhcmVudF9tb2R1bGUsIG5hbWUucnBhcnRpdGlvbignLicpWzJdLCBtb2R1bGUpCi0gICAgIyBTZXQgX19wYWNrYWdlX18gaWYgdGhlIGxvYWRlciBkaWQgbm90LgotICAgIGlmIGdldGF0dHIobW9kdWxlLCAnX19wYWNrYWdlX18nLCBOb25lKSBpcyBOb25lOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBtb2R1bGUuX19wYWNrYWdlX18gPSBtb2R1bGUuX19uYW1lX18KLSAgICAgICAgICAgIGlmIG5vdCBoYXNhdHRyKG1vZHVsZSwgJ19fcGF0aF9fJyk6Ci0gICAgICAgICAgICAgICAgbW9kdWxlLl9fcGFja2FnZV9fID0gbW9kdWxlLl9fcGFja2FnZV9fLnJwYXJ0aXRpb24oJy4nKVswXQotICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICBwYXNzCi0gICAgIyBTZXQgbG9hZGVyIGlmIG5lZWQgYmUuCi0gICAgaWYgbm90IGhhc2F0dHIobW9kdWxlLCAnX19sb2FkZXJfXycpOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBtb2R1bGUuX19sb2FkZXJfXyA9IGxvYWRlcgotICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICBwYXNzCiAgICAgcmV0dXJuIG1vZHVsZQogCiAKIGRlZiBfZmluZF9hbmRfbG9hZChuYW1lLCBpbXBvcnRfKToKICAgICAiIiJGaW5kIGFuZCBsb2FkIHRoZSBtb2R1bGUsIGFuZCByZWxlYXNlIHRoZSBpbXBvcnQgbG9jay4iIiIKLSAgICB0cnk6Ci0gICAgICAgIGxvY2sgPSBfZ2V0X21vZHVsZV9sb2NrKG5hbWUpCi0gICAgZmluYWxseToKLSAgICAgICAgX2ltcC5yZWxlYXNlX2xvY2soKQotICAgIGxvY2suYWNxdWlyZSgpCi0gICAgdHJ5OgorICAgIHdpdGggX01vZHVsZUxvY2tNYW5hZ2VyKG5hbWUpOgogICAgICAgICByZXR1cm4gX2ZpbmRfYW5kX2xvYWRfdW5sb2NrZWQobmFtZSwgaW1wb3J0XykKLSAgICBmaW5hbGx5OgotICAgICAgICBsb2NrLnJlbGVhc2UoKQogCiAKIGRlZiBfZ2NkX2ltcG9ydChuYW1lLCBwYWNrYWdlPU5vbmUsIGxldmVsPTApOgpAQCAtMTU4NSw4ICsyMjU1LDggQEAKICAgICBtb2R1bGUgPSBzeXMubW9kdWxlc1tuYW1lXQogICAgIGlmIG1vZHVsZSBpcyBOb25lOgogICAgICAgICBfaW1wLnJlbGVhc2VfbG9jaygpCi0gICAgICAgIG1lc3NhZ2UgPSAoImltcG9ydCBvZiB7fSBoYWx0ZWQ7ICIKLSAgICAgICAgICAgICAgICAgICAgIk5vbmUgaW4gc3lzLm1vZHVsZXMiLmZvcm1hdChuYW1lKSkKKyAgICAgICAgbWVzc2FnZSA9ICgnaW1wb3J0IG9mIHt9IGhhbHRlZDsgJworICAgICAgICAgICAgICAgICAgICdOb25lIGluIHN5cy5tb2R1bGVzJy5mb3JtYXQobmFtZSkpCiAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKG1lc3NhZ2UsIG5hbWU9bmFtZSkKICAgICBfbG9ja191bmxvY2tfbW9kdWxlKG5hbWUpCiAgICAgcmV0dXJuIG1vZHVsZQpAQCAtMTYxNiw5ICsyMjg2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgIyBCYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBkaWN0YXRlcyB3ZSBpZ25vcmUgZmFpbGVkCiAgICAgICAgICAgICAgICAgICAgICMgaW1wb3J0cyB0cmlnZ2VyZWQgYnkgZnJvbWxpc3QgZm9yIG1vZHVsZXMgdGhhdCBkb24ndAogICAgICAgICAgICAgICAgICAgICAjIGV4aXN0LgotICAgICAgICAgICAgICAgICAgICAjIFRPRE8oYnJldHQpOiBJbiBQeXRob24gMy40LCBoYXZlIGltcG9ydCByYWlzZQotICAgICAgICAgICAgICAgICAgICAjICAgTW9kdWxlTm90Rm91bmQgYW5kIGNhdGNoIHRoYXQuCi0gICAgICAgICAgICAgICAgICAgIGlmIGdldGF0dHIoZXhjLCAnX25vdF9mb3VuZCcsIEZhbHNlKToKKyAgICAgICAgICAgICAgICAgICAgaWYgc3RyKGV4Yykuc3RhcnRzd2l0aChfRVJSX01TR19QUkVGSVgpOgogICAgICAgICAgICAgICAgICAgICAgICAgaWYgZXhjLm5hbWUgPT0gZnJvbV9uYW1lOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICAgICAgICAgIHJhaXNlCkBAIC0xNjg2LDYgKzIzNTQsMTMgQEAKICAgICAgICAgcmV0dXJuIF9oYW5kbGVfZnJvbWxpc3QobW9kdWxlLCBmcm9tbGlzdCwgX2djZF9pbXBvcnQpCiAKIAorZGVmIF9idWlsdGluX2Zyb21fbmFtZShuYW1lKToKKyAgICBzcGVjID0gQnVpbHRpbkltcG9ydGVyLmZpbmRfc3BlYyhuYW1lKQorICAgIGlmIHNwZWMgaXMgTm9uZToKKyAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoJ25vIGJ1aWx0LWluIG1vZHVsZSBuYW1lZCAnICsgbmFtZSkKKyAgICBtZXRob2RzID0gX1NwZWNNZXRob2RzKHNwZWMpCisgICAgcmV0dXJuIG1ldGhvZHMuX2xvYWRfdW5sb2NrZWQoKQorCiAKIGRlZiBfc2V0dXAoc3lzX21vZHVsZSwgX2ltcF9tb2R1bGUpOgogICAgICIiIlNldHVwIGltcG9ydGxpYiBieSBpbXBvcnRpbmcgbmVlZGVkIGJ1aWx0LWluIG1vZHVsZXMgYW5kIGluamVjdGluZyB0aGVtCkBAIC0xNzA0LDI0ICsyMzc5LDMxIEBACiAgICAgZWxzZToKICAgICAgICAgQllURUNPREVfU1VGRklYRVMgPSBERUJVR19CWVRFQ09ERV9TVUZGSVhFUwogCisgICAgIyBTZXQgdXAgdGhlIHNwZWMgZm9yIGV4aXN0aW5nIGJ1aWx0aW4vZnJvemVuIG1vZHVsZXMuCiAgICAgbW9kdWxlX3R5cGUgPSB0eXBlKHN5cykKICAgICBmb3IgbmFtZSwgbW9kdWxlIGluIHN5cy5tb2R1bGVzLml0ZW1zKCk6CiAgICAgICAgIGlmIGlzaW5zdGFuY2UobW9kdWxlLCBtb2R1bGVfdHlwZSk6Ci0gICAgICAgICAgICBpZiBub3QgaGFzYXR0cihtb2R1bGUsICdfX2xvYWRlcl9fJyk6Ci0gICAgICAgICAgICAgICAgaWYgbmFtZSBpbiBzeXMuYnVpbHRpbl9tb2R1bGVfbmFtZXM6Ci0gICAgICAgICAgICAgICAgICAgIG1vZHVsZS5fX2xvYWRlcl9fID0gQnVpbHRpbkltcG9ydGVyCi0gICAgICAgICAgICAgICAgZWxpZiBfaW1wLmlzX2Zyb3plbihuYW1lKToKLSAgICAgICAgICAgICAgICAgICAgbW9kdWxlLl9fbG9hZGVyX18gPSBGcm96ZW5JbXBvcnRlcgorICAgICAgICAgICAgaWYgbmFtZSBpbiBzeXMuYnVpbHRpbl9tb2R1bGVfbmFtZXM6CisgICAgICAgICAgICAgICAgbG9hZGVyID0gQnVpbHRpbkltcG9ydGVyCisgICAgICAgICAgICBlbGlmIF9pbXAuaXNfZnJvemVuKG5hbWUpOgorICAgICAgICAgICAgICAgIGxvYWRlciA9IEZyb3plbkltcG9ydGVyCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBzcGVjID0gX3NwZWNfZnJvbV9tb2R1bGUobW9kdWxlLCBsb2FkZXIpCisgICAgICAgICAgICBtZXRob2RzID0gX1NwZWNNZXRob2RzKHNwZWMpCisgICAgICAgICAgICBtZXRob2RzLmluaXRfbW9kdWxlX2F0dHJzKG1vZHVsZSkKIAorICAgICMgRGlyZWN0bHkgbG9hZCBidWlsdC1pbiBtb2R1bGVzIG5lZWRlZCBkdXJpbmcgYm9vdHN0cmFwLgogICAgIHNlbGZfbW9kdWxlID0gc3lzLm1vZHVsZXNbX19uYW1lX19dCiAgICAgZm9yIGJ1aWx0aW5fbmFtZSBpbiAoJ19pbycsICdfd2FybmluZ3MnLCAnYnVpbHRpbnMnLCAnbWFyc2hhbCcpOgogICAgICAgICBpZiBidWlsdGluX25hbWUgbm90IGluIHN5cy5tb2R1bGVzOgotICAgICAgICAgICAgYnVpbHRpbl9tb2R1bGUgPSBCdWlsdGluSW1wb3J0ZXIubG9hZF9tb2R1bGUoYnVpbHRpbl9uYW1lKQorICAgICAgICAgICAgYnVpbHRpbl9tb2R1bGUgPSBfYnVpbHRpbl9mcm9tX25hbWUoYnVpbHRpbl9uYW1lKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgYnVpbHRpbl9tb2R1bGUgPSBzeXMubW9kdWxlc1tidWlsdGluX25hbWVdCiAgICAgICAgIHNldGF0dHIoc2VsZl9tb2R1bGUsIGJ1aWx0aW5fbmFtZSwgYnVpbHRpbl9tb2R1bGUpCiAKLSAgICBvc19kZXRhaWxzID0gKCdwb3NpeCcsIFsnLyddKSwgKCdudCcsIFsnXFwnLCAnLyddKSwgKCdvczInLCBbJ1xcJywgJy8nXSkKKyAgICAjIERpcmVjdGx5IGxvYWQgdGhlIG9zIG1vZHVsZSAobmVlZGVkIGR1cmluZyBib290c3RyYXApLgorICAgIG9zX2RldGFpbHMgPSAoJ3Bvc2l4JywgWycvJ10pLCAoJ250JywgWydcXCcsICcvJ10pCiAgICAgZm9yIGJ1aWx0aW5fb3MsIHBhdGhfc2VwYXJhdG9ycyBpbiBvc19kZXRhaWxzOgogICAgICAgICAjIEFzc3VtcHRpb24gbWFkZSBpbiBfcGF0aF9qb2luKCkKICAgICAgICAgYXNzZXJ0IGFsbChsZW4oc2VwKSA9PSAxIGZvciBzZXAgaW4gcGF0aF9zZXBhcmF0b3JzKQpAQCAtMTczMSwzMiArMjQxMywzMyBAQAogICAgICAgICAgICAgYnJlYWsKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBvc19tb2R1bGUgPSBCdWlsdGluSW1wb3J0ZXIubG9hZF9tb2R1bGUoYnVpbHRpbl9vcykKLSAgICAgICAgICAgICAgICAjIFRPRE86IHJpcCBvdXQgb3MyIGNvZGUgYWZ0ZXIgMy4zIGlzIHJlbGVhc2VkIGFzIHBlciBQRVAgMTEKLSAgICAgICAgICAgICAgICBpZiBidWlsdGluX29zID09ICdvczInIGFuZCAnRU1YIEdDQycgaW4gc3lzLnZlcnNpb246Ci0gICAgICAgICAgICAgICAgICAgIHBhdGhfc2VwID0gcGF0aF9zZXBhcmF0b3JzWzFdCisgICAgICAgICAgICAgICAgb3NfbW9kdWxlID0gX2J1aWx0aW5fZnJvbV9uYW1lKGJ1aWx0aW5fb3MpCiAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgIGVsc2U6CiAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCdpbXBvcnRsaWIgcmVxdWlyZXMgcG9zaXggb3IgbnQnKQorICAgIHNldGF0dHIoc2VsZl9tb2R1bGUsICdfb3MnLCBvc19tb2R1bGUpCisgICAgc2V0YXR0cihzZWxmX21vZHVsZSwgJ3BhdGhfc2VwJywgcGF0aF9zZXApCisgICAgc2V0YXR0cihzZWxmX21vZHVsZSwgJ3BhdGhfc2VwYXJhdG9ycycsICcnLmpvaW4ocGF0aF9zZXBhcmF0b3JzKSkKIAorICAgICMgRGlyZWN0bHkgbG9hZCB0aGUgX3RocmVhZCBtb2R1bGUgKG5lZWRlZCBkdXJpbmcgYm9vdHN0cmFwKS4KICAgICB0cnk6Ci0gICAgICAgIHRocmVhZF9tb2R1bGUgPSBCdWlsdGluSW1wb3J0ZXIubG9hZF9tb2R1bGUoJ190aHJlYWQnKQorICAgICAgICB0aHJlYWRfbW9kdWxlID0gX2J1aWx0aW5fZnJvbV9uYW1lKCdfdGhyZWFkJykKICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgICAgICMgUHl0aG9uIHdhcyBidWlsdCB3aXRob3V0IHRocmVhZHMKICAgICAgICAgdGhyZWFkX21vZHVsZSA9IE5vbmUKLSAgICB3ZWFrcmVmX21vZHVsZSA9IEJ1aWx0aW5JbXBvcnRlci5sb2FkX21vZHVsZSgnX3dlYWtyZWYnKQorICAgIHNldGF0dHIoc2VsZl9tb2R1bGUsICdfdGhyZWFkJywgdGhyZWFkX21vZHVsZSkKIAorICAgICMgRGlyZWN0bHkgbG9hZCB0aGUgX3dlYWtyZWYgbW9kdWxlIChuZWVkZWQgZHVyaW5nIGJvb3RzdHJhcCkuCisgICAgd2Vha3JlZl9tb2R1bGUgPSBfYnVpbHRpbl9mcm9tX25hbWUoJ193ZWFrcmVmJykKKyAgICBzZXRhdHRyKHNlbGZfbW9kdWxlLCAnX3dlYWtyZWYnLCB3ZWFrcmVmX21vZHVsZSkKKworICAgICMgRGlyZWN0bHkgbG9hZCB0aGUgd2lucmVnIG1vZHVsZSAobmVlZGVkIGR1cmluZyBib290c3RyYXApLgogICAgIGlmIGJ1aWx0aW5fb3MgPT0gJ250JzoKLSAgICAgICAgd2lucmVnX21vZHVsZSA9IEJ1aWx0aW5JbXBvcnRlci5sb2FkX21vZHVsZSgnd2lucmVnJykKKyAgICAgICAgd2lucmVnX21vZHVsZSA9IF9idWlsdGluX2Zyb21fbmFtZSgnd2lucmVnJykKICAgICAgICAgc2V0YXR0cihzZWxmX21vZHVsZSwgJ193aW5yZWcnLCB3aW5yZWdfbW9kdWxlKQogCi0gICAgc2V0YXR0cihzZWxmX21vZHVsZSwgJ19vcycsIG9zX21vZHVsZSkKLSAgICBzZXRhdHRyKHNlbGZfbW9kdWxlLCAnX3RocmVhZCcsIHRocmVhZF9tb2R1bGUpCi0gICAgc2V0YXR0cihzZWxmX21vZHVsZSwgJ193ZWFrcmVmJywgd2Vha3JlZl9tb2R1bGUpCi0gICAgc2V0YXR0cihzZWxmX21vZHVsZSwgJ3BhdGhfc2VwJywgcGF0aF9zZXApCi0gICAgc2V0YXR0cihzZWxmX21vZHVsZSwgJ3BhdGhfc2VwYXJhdG9ycycsIHNldChwYXRoX3NlcGFyYXRvcnMpKQogICAgICMgQ29uc3RhbnRzCiAgICAgc2V0YXR0cihzZWxmX21vZHVsZSwgJ19yZWxheF9jYXNlJywgX21ha2VfcmVsYXhfY2FzZSgpKQogICAgIEVYVEVOU0lPTl9TVUZGSVhFUy5leHRlbmQoX2ltcC5leHRlbnNpb25fc3VmZml4ZXMoKSkKZGlmZiAtLWdpdCBhL0xpYi9pbXBvcnRsaWIvYWJjLnB5IGIvTGliL2ltcG9ydGxpYi9hYmMucHkKaW5kZXggMzg3NTY3YS4uNTU4YWJkMyAxMDA2NDQKLS0tIGEvTGliL2ltcG9ydGxpYi9hYmMucHkKKysrIGIvTGliL2ltcG9ydGxpYi9hYmMucHkKQEAgLTgsMTEgKzgsNiBAQAogICAgICAgICByYWlzZQogICAgIF9mcm96ZW5faW1wb3J0bGliID0gTm9uZQogaW1wb3J0IGFiYwotaW1wb3J0IGltcAotaW1wb3J0IG1hcnNoYWwKLWltcG9ydCBzeXMKLWltcG9ydCB0b2tlbml6ZQotaW1wb3J0IHdhcm5pbmdzCiAKIAogZGVmIF9yZWdpc3RlcihhYnN0cmFjdF9jbHMsICpjbGFzc2VzKToKQEAgLTM3LDI4ICszMiwzNyBAQAogICAgIGRlZiBmaW5kX21vZHVsZShzZWxmLCBmdWxsbmFtZSwgcGF0aD1Ob25lKToKICAgICAgICAgIiIiQW4gYWJzdHJhY3QgbWV0aG9kIHRoYXQgc2hvdWxkIGZpbmQgYSBtb2R1bGUuCiAgICAgICAgIFRoZSBmdWxsbmFtZSBpcyBhIHN0ciBhbmQgdGhlIG9wdGlvbmFsIHBhdGggaXMgYSBzdHIgb3IgTm9uZS4KLSAgICAgICAgUmV0dXJucyBhIExvYWRlciBvYmplY3QuCisgICAgICAgIFJldHVybnMgYSBMb2FkZXIgb2JqZWN0IG9yIE5vbmUuCiAgICAgICAgICIiIgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCiAKIAogY2xhc3MgTWV0YVBhdGhGaW5kZXIoRmluZGVyKToKIAogICAgICIiIkFic3RyYWN0IGJhc2UgY2xhc3MgZm9yIGltcG9ydCBmaW5kZXJzIG9uIHN5cy5tZXRhX3BhdGguIiIiCiAKLSAgICBAYWJjLmFic3RyYWN0bWV0aG9kCisgICAgIyBXZSBkb24ndCBkZWZpbmUgZmluZF9zcGVjKCkgaGVyZSBzaW5jZSB0aGF0IHdvdWxkIGJyZWFrCisgICAgIyBoYXNhdHRyIGNoZWNrcyB3ZSBkbyB0byBzdXBwb3J0IGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCisKICAgICBkZWYgZmluZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUsIHBhdGgpOgotICAgICAgICAiIiJBYnN0cmFjdCBtZXRob2Qgd2hpY2gsIHdoZW4gaW1wbGVtZW50ZWQsIHNob3VsZCBmaW5kIGEgbW9kdWxlLgotICAgICAgICBUaGUgZnVsbG5hbWUgaXMgYSBzdHIgYW5kIHRoZSBwYXRoIGlzIGEgc3RyIG9yIE5vbmUuCi0gICAgICAgIFJldHVybnMgYSBMb2FkZXIgb2JqZWN0LgorICAgICAgICAiIiJSZXR1cm4gYSBsb2FkZXIgZm9yIHRoZSBtb2R1bGUuCisKKyAgICAgICAgSWYgbm8gbW9kdWxlIGlzIGZvdW5kLCByZXR1cm4gTm9uZS4gIFRoZSBmdWxsbmFtZSBpcyBhIHN0ciBhbmQKKyAgICAgICAgdGhlIHBhdGggaXMgYSBsaXN0IG9mIHN0cmluZ3Mgb3IgTm9uZS4KKworICAgICAgICBUaGlzIG1ldGhvZCBpcyBkZXByZWNhdGVkIGluIGZhdm9yIG9mIGZpbmRlci5maW5kX3NwZWMoKS4gSWYgZmluZF9zcGVjKCkKKyAgICAgICAgZXhpc3RzIHRoZW4gYmFja3dhcmRzLWNvbXBhdGlibGUgZnVuY3Rpb25hbGl0eSBpcyBwcm92aWRlZCBmb3IgdGhpcworICAgICAgICBtZXRob2QuCisKICAgICAgICAgIiIiCi0gICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKyAgICAgICAgaWYgbm90IGhhc2F0dHIoc2VsZiwgJ2ZpbmRfc3BlYycpOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgZm91bmQgPSBzZWxmLmZpbmRfc3BlYyhmdWxsbmFtZSwgcGF0aCkKKyAgICAgICAgcmV0dXJuIGZvdW5kLmxvYWRlciBpZiBmb3VuZCBpcyBub3QgTm9uZSBlbHNlIE5vbmUKIAogICAgIGRlZiBpbnZhbGlkYXRlX2NhY2hlcyhzZWxmKToKICAgICAgICAgIiIiQW4gb3B0aW9uYWwgbWV0aG9kIGZvciBjbGVhcmluZyB0aGUgZmluZGVyJ3MgY2FjaGUsIGlmIGFueS4KICAgICAgICAgVGhpcyBtZXRob2QgaXMgdXNlZCBieSBpbXBvcnRsaWIuaW52YWxpZGF0ZV9jYWNoZXMoKS4KICAgICAgICAgIiIiCi0gICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAogCiBfcmVnaXN0ZXIoTWV0YVBhdGhGaW5kZXIsIG1hY2hpbmVyeS5CdWlsdGluSW1wb3J0ZXIsIG1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlciwKICAgICAgICAgICBtYWNoaW5lcnkuUGF0aEZpbmRlciwgbWFjaGluZXJ5LldpbmRvd3NSZWdpc3RyeUZpbmRlcikKQEAgLTY4LDE1ICs3MiwzNSBAQAogCiAgICAgIiIiQWJzdHJhY3QgYmFzZSBjbGFzcyBmb3IgcGF0aCBlbnRyeSBmaW5kZXJzIHVzZWQgYnkgUGF0aEZpbmRlci4iIiIKIAotICAgIEBhYmMuYWJzdHJhY3RtZXRob2QKKyAgICAjIFdlIGRvbid0IGRlZmluZSBmaW5kX3NwZWMoKSBoZXJlIHNpbmNlIHRoYXQgd291bGQgYnJlYWsKKyAgICAjIGhhc2F0dHIgY2hlY2tzIHdlIGRvIHRvIHN1cHBvcnQgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KKwogICAgIGRlZiBmaW5kX2xvYWRlcihzZWxmLCBmdWxsbmFtZSk6Ci0gICAgICAgICIiIkFic3RyYWN0IG1ldGhvZCB3aGljaCwgd2hlbiBpbXBsZW1lbnRlZCwgcmV0dXJucyBhIG1vZHVsZSBsb2FkZXIuCi0gICAgICAgIFRoZSBmdWxsbmFtZSBpcyBhIHN0ci4gIFJldHVybnMgYSAyLXR1cGxlIG9mIChMb2FkZXIsIHBvcnRpb24pIHdoZXJlCi0gICAgICAgIHBvcnRpb24gaXMgYSBzZXF1ZW5jZSBvZiBmaWxlIHN5c3RlbSBsb2NhdGlvbnMgY29udHJpYnV0aW5nIHRvIHBhcnQgb2YKLSAgICAgICAgYSBuYW1lc3BhY2UgcGFja2FnZS4gIFRoZSBzZXF1ZW5jZSBtYXkgYmUgZW1wdHkgYW5kIHRoZSBsb2FkZXIgbWF5IGJlCi0gICAgICAgIE5vbmUuCisgICAgICAgICIiIlJldHVybiAobG9hZGVyLCBuYW1lc3BhY2UgcG9ydGlvbikgZm9yIHRoZSBwYXRoIGVudHJ5LgorCisgICAgICAgIFRoZSBmdWxsbmFtZSBpcyBhIHN0ci4gIFRoZSBuYW1lc3BhY2UgcG9ydGlvbiBpcyBhIHNlcXVlbmNlIG9mCisgICAgICAgIHBhdGggZW50cmllcyBjb250cmlidXRpbmcgdG8gcGFydCBvZiBhIG5hbWVzcGFjZSBwYWNrYWdlLiBUaGUKKyAgICAgICAgc2VxdWVuY2UgbWF5IGJlIGVtcHR5LiAgSWYgbG9hZGVyIGlzIG5vdCBOb25lLCB0aGUgcG9ydGlvbiB3aWxsCisgICAgICAgIGJlIGlnbm9yZWQuCisKKyAgICAgICAgVGhlIHBvcnRpb24gd2lsbCBiZSBkaXNjYXJkZWQgaWYgYW5vdGhlciBwYXRoIGVudHJ5IGZpbmRlcgorICAgICAgICBsb2NhdGVzIHRoZSBtb2R1bGUgYXMgYSBub3JtYWwgbW9kdWxlIG9yIHBhY2thZ2UuCisKKyAgICAgICAgVGhpcyBtZXRob2QgaXMgZGVwcmVjYXRlZCBpbiBmYXZvciBvZiBmaW5kZXIuZmluZF9zcGVjKCkuIElmIGZpbmRfc3BlYygpCisgICAgICAgIGlzIHByb3ZpZGVkIHRoYW4gYmFja3dhcmRzLWNvbXBhdGlibGUgZnVuY3Rpb25hbGl0eSBpcyBwcm92aWRlZC4KKwogICAgICAgICAiIiIKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorICAgICAgICBpZiBub3QgaGFzYXR0cihzZWxmLCAnZmluZF9zcGVjJyk6CisgICAgICAgICAgICByZXR1cm4gTm9uZSwgW10KKyAgICAgICAgZm91bmQgPSBzZWxmLmZpbmRfc3BlYyhmdWxsbmFtZSkKKyAgICAgICAgaWYgZm91bmQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBpZiBub3QgZm91bmQuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnM6CisgICAgICAgICAgICAgICAgcG9ydGlvbnMgPSBbXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwb3J0aW9ucyA9IGZvdW5kLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zCisgICAgICAgICAgICByZXR1cm4gZm91bmQubG9hZGVyLCBwb3J0aW9ucworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUsIFtdCiAKICAgICBmaW5kX21vZHVsZSA9IF9ib290c3RyYXAuX2ZpbmRfbW9kdWxlX3NoaW0KIApAQCAtODQsNyArMTA4LDYgQEAKICAgICAgICAgIiIiQW4gb3B0aW9uYWwgbWV0aG9kIGZvciBjbGVhcmluZyB0aGUgZmluZGVyJ3MgY2FjaGUsIGlmIGFueS4KICAgICAgICAgVGhpcyBtZXRob2QgaXMgdXNlZCBieSBQYXRoRmluZGVyLmludmFsaWRhdGVfY2FjaGVzKCkuCiAgICAgICAgICIiIgotICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKIAogX3JlZ2lzdGVyKFBhdGhFbnRyeUZpbmRlciwgbWFjaGluZXJ5LkZpbGVGaW5kZXIpCiAKQEAgLTkzLDE2ICsxMTYsNDkgQEAKIAogICAgICIiIkFic3RyYWN0IGJhc2UgY2xhc3MgZm9yIGltcG9ydCBsb2FkZXJzLiIiIgogCi0gICAgQGFiYy5hYnN0cmFjdG1ldGhvZAotICAgIGRlZiBsb2FkX21vZHVsZShzZWxmLCBmdWxsbmFtZSk6Ci0gICAgICAgICIiIkFic3RyYWN0IG1ldGhvZCB3aGljaCB3aGVuIGltcGxlbWVudGVkIHNob3VsZCBsb2FkIGEgbW9kdWxlLgotICAgICAgICBUaGUgZnVsbG5hbWUgaXMgYSBzdHIuIiIiCi0gICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKyAgICBkZWYgY3JlYXRlX21vZHVsZShzZWxmLCBzcGVjKToKKyAgICAgICAgIiIiUmV0dXJuIGEgbW9kdWxlIHRvIGluaXRpYWxpemUgYW5kIGludG8gd2hpY2ggdG8gbG9hZC4KIAotICAgIEBhYmMuYWJzdHJhY3RtZXRob2QKKyAgICAgICAgVGhpcyBtZXRob2Qgc2hvdWxkIHJhaXNlIEltcG9ydEVycm9yIGlmIGFueXRoaW5nIHByZXZlbnRzIGl0CisgICAgICAgIGZyb20gY3JlYXRpbmcgYSBuZXcgbW9kdWxlLiAgSXQgbWF5IHJldHVybiBOb25lIHRvIGluZGljYXRlCisgICAgICAgIHRoYXQgdGhlIHNwZWMgc2hvdWxkIGNyZWF0ZSB0aGUgbmV3IG1vZHVsZS4KKworICAgICAgICBjcmVhdGVfbW9kdWxlKCkgaXMgb3B0aW9uYWwuCisKKyAgICAgICAgIiIiCisgICAgICAgICMgQnkgZGVmYXVsdCwgZGVmZXIgdG8gX1NwZWNNZXRob2RzLmNyZWF0ZSgpIGZvciB0aGUgbmV3IG1vZHVsZS4KKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICMgV2UgZG9uJ3QgZGVmaW5lIGV4ZWNfbW9kdWxlKCkgaGVyZSBzaW5jZSB0aGF0IHdvdWxkIGJyZWFrCisgICAgIyBoYXNhdHRyIGNoZWNrcyB3ZSBkbyB0byBzdXBwb3J0IGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCisKKyAgICBkZWYgbG9hZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIGxvYWRlZCBtb2R1bGUuCisKKyAgICAgICAgVGhlIG1vZHVsZSBtdXN0IGJlIGFkZGVkIHRvIHN5cy5tb2R1bGVzIGFuZCBoYXZlIGltcG9ydC1yZWxhdGVkCisgICAgICAgIGF0dHJpYnV0ZXMgc2V0IHByb3Blcmx5LiAgVGhlIGZ1bGxuYW1lIGlzIGEgc3RyLgorCisgICAgICAgIEltcG9ydEVycm9yIGlzIHJhaXNlZCBvbiBmYWlsdXJlLgorCisgICAgICAgIFRoaXMgbWV0aG9kIGlzIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgbG9hZGVyLmV4ZWNfbW9kdWxlKCkuIElmCisgICAgICAgIGV4ZWNfbW9kdWxlKCkgZXhpc3RzIHRoZW4gaXQgaXMgdXNlZCB0byBwcm92aWRlIGEgYmFja3dhcmRzLWNvbXBhdGlibGUKKyAgICAgICAgZnVuY3Rpb25hbGl0eSBmb3IgdGhpcyBtZXRob2QuCisKKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCBoYXNhdHRyKHNlbGYsICdleGVjX21vZHVsZScpOgorICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IKKyAgICAgICAgcmV0dXJuIF9ib290c3RyYXAuX2xvYWRfbW9kdWxlX3NoaW0oc2VsZiwgZnVsbG5hbWUpCisKICAgICBkZWYgbW9kdWxlX3JlcHIoc2VsZiwgbW9kdWxlKToKLSAgICAgICAgIiIiQWJzdHJhY3QgbWV0aG9kIHdoaWNoIHdoZW4gaW1wbGVtZW50ZWQgY2FsY3VsYXRlcyBhbmQgcmV0dXJucyB0aGUKLSAgICAgICAgZ2l2ZW4gbW9kdWxlJ3MgcmVwci4iIiIKKyAgICAgICAgIiIiUmV0dXJuIGEgbW9kdWxlJ3MgcmVwci4KKworICAgICAgICBVc2VkIGJ5IHRoZSBtb2R1bGUgdHlwZSB3aGVuIHRoZSBtZXRob2QgZG9lcyBub3QgcmFpc2UKKyAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvci4KKworICAgICAgICBUaGlzIG1ldGhvZCBpcyBkZXByZWNhdGVkLgorCisgICAgICAgICIiIgorICAgICAgICAjIFRoZSBleGNlcHRpb24gd2lsbCBjYXVzZSBNb2R1bGVUeXBlLl9fcmVwcl9fIHRvIGlnbm9yZSB0aGlzIG1ldGhvZC4KICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgogCiAKQEAgLTExOSw3ICsxNzUsNyBAQAogICAgIGRlZiBnZXRfZGF0YShzZWxmLCBwYXRoKToKICAgICAgICAgIiIiQWJzdHJhY3QgbWV0aG9kIHdoaWNoIHdoZW4gaW1wbGVtZW50ZWQgc2hvdWxkIHJldHVybiB0aGUgYnl0ZXMgZm9yCiAgICAgICAgIHRoZSBzcGVjaWZpZWQgcGF0aC4gIFRoZSBwYXRoIG11c3QgYmUgYSBzdHIuIiIiCi0gICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKyAgICAgICAgcmFpc2UgSU9FcnJvcgogCiAKIGNsYXNzIEluc3BlY3RMb2FkZXIoTG9hZGVyKToKQEAgLTEzMSwyNiArMTg3LDQ3IEBACiAKICAgICAiIiIKIAotICAgIEBhYmMuYWJzdHJhY3RtZXRob2QKICAgICBkZWYgaXNfcGFja2FnZShzZWxmLCBmdWxsbmFtZSk6Ci0gICAgICAgICIiIkFic3RyYWN0IG1ldGhvZCB3aGljaCB3aGVuIGltcGxlbWVudGVkIHNob3VsZCByZXR1cm4gd2hldGhlciB0aGUKLSAgICAgICAgbW9kdWxlIGlzIGEgcGFja2FnZS4gIFRoZSBmdWxsbmFtZSBpcyBhIHN0ci4gIFJldHVybnMgYSBib29sLiIiIgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisgICAgICAgICIiIk9wdGlvbmFsIG1ldGhvZCB3aGljaCB3aGVuIGltcGxlbWVudGVkIHNob3VsZCByZXR1cm4gd2hldGhlciB0aGUKKyAgICAgICAgbW9kdWxlIGlzIGEgcGFja2FnZS4gIFRoZSBmdWxsbmFtZSBpcyBhIHN0ci4gIFJldHVybnMgYSBib29sLgogCi0gICAgQGFiYy5hYnN0cmFjdG1ldGhvZAorICAgICAgICBSYWlzZXMgSW1wb3J0RXJyb3IgaWYgdGhlIG1vZHVsZSBjYW5ub3QgYmUgZm91bmQuCisgICAgICAgICIiIgorICAgICAgICByYWlzZSBJbXBvcnRFcnJvcgorCiAgICAgZGVmIGdldF9jb2RlKHNlbGYsIGZ1bGxuYW1lKToKLSAgICAgICAgIiIiQWJzdHJhY3QgbWV0aG9kIHdoaWNoIHdoZW4gaW1wbGVtZW50ZWQgc2hvdWxkIHJldHVybiB0aGUgY29kZSBvYmplY3QKLSAgICAgICAgZm9yIHRoZSBtb2R1bGUuICBUaGUgZnVsbG5hbWUgaXMgYSBzdHIuICBSZXR1cm5zIGEgdHlwZXMuQ29kZVR5cGUuIiIiCi0gICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKyAgICAgICAgIiIiTWV0aG9kIHdoaWNoIHJldHVybnMgdGhlIGNvZGUgb2JqZWN0IGZvciB0aGUgbW9kdWxlLgorCisgICAgICAgIFRoZSBmdWxsbmFtZSBpcyBhIHN0ci4gIFJldHVybnMgYSB0eXBlcy5Db2RlVHlwZSBpZiBwb3NzaWJsZSwgZWxzZQorICAgICAgICByZXR1cm5zIE5vbmUgaWYgYSBjb2RlIG9iamVjdCBkb2VzIG5vdCBtYWtlIHNlbnNlCisgICAgICAgIChlLmcuIGJ1aWx0LWluIG1vZHVsZSkuIFJhaXNlcyBJbXBvcnRFcnJvciBpZiB0aGUgbW9kdWxlIGNhbm5vdCBiZQorICAgICAgICBmb3VuZC4KKyAgICAgICAgIiIiCisgICAgICAgIHNvdXJjZSA9IHNlbGYuZ2V0X3NvdXJjZShmdWxsbmFtZSkKKyAgICAgICAgaWYgc291cmNlIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICByZXR1cm4gc2VsZi5zb3VyY2VfdG9fY29kZShzb3VyY2UpCiAKICAgICBAYWJjLmFic3RyYWN0bWV0aG9kCiAgICAgZGVmIGdldF9zb3VyY2Uoc2VsZiwgZnVsbG5hbWUpOgogICAgICAgICAiIiJBYnN0cmFjdCBtZXRob2Qgd2hpY2ggc2hvdWxkIHJldHVybiB0aGUgc291cmNlIGNvZGUgZm9yIHRoZQotICAgICAgICBtb2R1bGUuICBUaGUgZnVsbG5hbWUgaXMgYSBzdHIuICBSZXR1cm5zIGEgc3RyLiIiIgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisgICAgICAgIG1vZHVsZS4gIFRoZSBmdWxsbmFtZSBpcyBhIHN0ci4gIFJldHVybnMgYSBzdHIuCiAKLV9yZWdpc3RlcihJbnNwZWN0TG9hZGVyLCBtYWNoaW5lcnkuQnVpbHRpbkltcG9ydGVyLCBtYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIsCi0gICAgICAgICAgICBtYWNoaW5lcnkuRXh0ZW5zaW9uRmlsZUxvYWRlcikKKyAgICAgICAgUmFpc2VzIEltcG9ydEVycm9yIGlmIHRoZSBtb2R1bGUgY2Fubm90IGJlIGZvdW5kLgorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IKKworICAgIGRlZiBzb3VyY2VfdG9fY29kZShzZWxmLCBkYXRhLCBwYXRoPSc8c3RyaW5nPicpOgorICAgICAgICAiIiJDb21waWxlICdkYXRhJyBpbnRvIGEgY29kZSBvYmplY3QuCisKKyAgICAgICAgVGhlICdkYXRhJyBhcmd1bWVudCBjYW4gYmUgYW55dGhpbmcgdGhhdCBjb21waWxlKCkgY2FuIGhhbmRsZS4gVGhlJ3BhdGgnCisgICAgICAgIGFyZ3VtZW50IHNob3VsZCBiZSB3aGVyZSB0aGUgZGF0YSB3YXMgcmV0cmlldmVkICh3aGVuIGFwcGxpY2FibGUpLiIiIgorICAgICAgICByZXR1cm4gY29tcGlsZShkYXRhLCBwYXRoLCAnZXhlYycsIGRvbnRfaW5oZXJpdD1UcnVlKQorCisgICAgZXhlY19tb2R1bGUgPSBfYm9vdHN0cmFwLl9Mb2FkZXJCYXNpY3MuZXhlY19tb2R1bGUKKyAgICBsb2FkX21vZHVsZSA9IF9ib290c3RyYXAuX0xvYWRlckJhc2ljcy5sb2FkX21vZHVsZQorCitfcmVnaXN0ZXIoSW5zcGVjdExvYWRlciwgbWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlciwgbWFjaGluZXJ5LkZyb3plbkltcG9ydGVyKQogCiAKIGNsYXNzIEV4ZWN1dGlvbkxvYWRlcihJbnNwZWN0TG9hZGVyKToKQEAgLTE2NSw4ICsyNDIsMjkgQEAKICAgICBAYWJjLmFic3RyYWN0bWV0aG9kCiAgICAgZGVmIGdldF9maWxlbmFtZShzZWxmLCBmdWxsbmFtZSk6CiAgICAgICAgICIiIkFic3RyYWN0IG1ldGhvZCB3aGljaCBzaG91bGQgcmV0dXJuIHRoZSB2YWx1ZSB0aGF0IF9fZmlsZV9fIGlzIHRvIGJlCi0gICAgICAgIHNldCB0by4iIiIKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorICAgICAgICBzZXQgdG8uCisKKyAgICAgICAgUmFpc2VzIEltcG9ydEVycm9yIGlmIHRoZSBtb2R1bGUgY2Fubm90IGJlIGZvdW5kLgorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IKKworICAgIGRlZiBnZXRfY29kZShzZWxmLCBmdWxsbmFtZSk6CisgICAgICAgICIiIk1ldGhvZCB0byByZXR1cm4gdGhlIGNvZGUgb2JqZWN0IGZvciBmdWxsbmFtZS4KKworICAgICAgICBTaG91bGQgcmV0dXJuIE5vbmUgaWYgbm90IGFwcGxpY2FibGUgKGUuZy4gYnVpbHQtaW4gbW9kdWxlKS4KKyAgICAgICAgUmFpc2UgSW1wb3J0RXJyb3IgaWYgdGhlIG1vZHVsZSBjYW5ub3QgYmUgZm91bmQuCisgICAgICAgICIiIgorICAgICAgICBzb3VyY2UgPSBzZWxmLmdldF9zb3VyY2UoZnVsbG5hbWUpCisgICAgICAgIGlmIHNvdXJjZSBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcGF0aCA9IHNlbGYuZ2V0X2ZpbGVuYW1lKGZ1bGxuYW1lKQorICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5zb3VyY2VfdG9fY29kZShzb3VyY2UpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5zb3VyY2VfdG9fY29kZShzb3VyY2UsIHBhdGgpCisKK19yZWdpc3RlcihFeGVjdXRpb25Mb2FkZXIsIG1hY2hpbmVyeS5FeHRlbnNpb25GaWxlTG9hZGVyKQogCiAKIGNsYXNzIEZpbGVMb2FkZXIoX2Jvb3RzdHJhcC5GaWxlTG9hZGVyLCBSZXNvdXJjZUxvYWRlciwgRXhlY3V0aW9uTG9hZGVyKToKQEAgLTE5OCw3ICsyOTYsNyBAQAogICAgIGRlZiBwYXRoX210aW1lKHNlbGYsIHBhdGgpOgogICAgICAgICAiIiJSZXR1cm4gdGhlIChpbnQpIG1vZGlmaWNhdGlvbiB0aW1lIGZvciB0aGUgcGF0aCAoc3RyKS4iIiIKICAgICAgICAgaWYgc2VsZi5wYXRoX3N0YXRzLl9fZnVuY19fIGlzIFNvdXJjZUxvYWRlci5wYXRoX3N0YXRzOgotICAgICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorICAgICAgICAgICAgcmFpc2UgSU9FcnJvcgogICAgICAgICByZXR1cm4gaW50KHNlbGYucGF0aF9zdGF0cyhwYXRoKVsnbXRpbWUnXSkKIAogICAgIGRlZiBwYXRoX3N0YXRzKHNlbGYsIHBhdGgpOgpAQCAtMjA5LDcgKzMwNyw3IEBACiAgICAgICAgIC0gJ3NpemUnIChvcHRpb25hbCkgaXMgdGhlIHNpemUgaW4gYnl0ZXMgb2YgdGhlIHNvdXJjZSBjb2RlLgogICAgICAgICAiIiIKICAgICAgICAgaWYgc2VsZi5wYXRoX210aW1lLl9fZnVuY19fIGlzIFNvdXJjZUxvYWRlci5wYXRoX210aW1lOgotICAgICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorICAgICAgICAgICAgcmFpc2UgSU9FcnJvcgogICAgICAgICByZXR1cm4geydtdGltZSc6IHNlbGYucGF0aF9tdGltZShwYXRoKX0KIAogICAgIGRlZiBzZXRfZGF0YShzZWxmLCBwYXRoLCBkYXRhKToKQEAgLTIyMCwxODUgKzMxOCw2IEBACiAgICAgICAgIEFueSBuZWVkZWQgaW50ZXJtZWRpYXJ5IGRpcmVjdG9yaWVzIGFyZSB0byBiZSBjcmVhdGVkLiBJZiBmb3Igc29tZQogICAgICAgICByZWFzb24gdGhlIGZpbGUgY2Fubm90IGJlIHdyaXR0ZW4gYmVjYXVzZSBvZiBwZXJtaXNzaW9ucywgZmFpbAogICAgICAgICBzaWxlbnRseS4KLQogICAgICAgICAiIiIKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgogCiBfcmVnaXN0ZXIoU291cmNlTG9hZGVyLCBtYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcikKLQotY2xhc3MgUHlMb2FkZXIoU291cmNlTG9hZGVyKToKLQotICAgICIiIkltcGxlbWVudCB0aGUgZGVwcmVjYXRlZCBQeUxvYWRlciBBQkMgaW4gdGVybXMgb2YgU291cmNlTG9hZGVyLgotCi0gICAgVGhpcyBjbGFzcyBoYXMgYmVlbiBkZXByZWNhdGVkISBJdCBpcyBzbGF0ZWQgZm9yIHJlbW92YWwgaW4gUHl0aG9uIDMuNC4KLSAgICBJZiBjb21wYXRpYmlsaXR5IHdpdGggUHl0aG9uIDMuMSBpcyBub3QgbmVlZGVkIHRoZW4gaW1wbGVtZW50IHRoZQotICAgIFNvdXJjZUxvYWRlciBBQkMgaW5zdGVhZCBvZiB0aGlzIGNsYXNzLiBJZiBQeXRob24gMy4xIGNvbXBhdGliaWxpdHkgaXMKLSAgICBuZWVkZWQsIHRoZW4gdXNlIHRoZSBmb2xsb3dpbmcgaWRpb20gdG8gaGF2ZSBhIHNpbmdsZSBjbGFzcyB0aGF0IGlzCi0gICAgY29tcGF0aWJsZSB3aXRoIFB5dGhvbiAzLjEgb253YXJkczo6Ci0KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZnJvbSBpbXBvcnRsaWIuYWJjIGltcG9ydCBTb3VyY2VMb2FkZXIKLSAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgotICAgICAgICAgICAgZnJvbSBpbXBvcnRsaWIuYWJjIGltcG9ydCBQeUxvYWRlciBhcyBTb3VyY2VMb2FkZXIKLQotCi0gICAgICAgIGNsYXNzIEN1c3RvbUxvYWRlcihTb3VyY2VMb2FkZXIpOgotICAgICAgICAgICAgZGVmIGdldF9maWxlbmFtZShzZWxmLCBmdWxsbmFtZSk6Ci0gICAgICAgICAgICAgICAgIyBJbXBsZW1lbnQgLi4uCi0KLSAgICAgICAgICAgIGRlZiBzb3VyY2VfcGF0aChzZWxmLCBmdWxsbmFtZSk6Ci0gICAgICAgICAgICAgICAgJycnSW1wbGVtZW50IHNvdXJjZV9wYXRoIGluIHRlcm1zIG9mIGdldF9maWxlbmFtZS4nJycKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmdldF9maWxlbmFtZShmdWxsbmFtZSkKLSAgICAgICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25lCi0KLSAgICAgICAgICAgIGRlZiBpc19wYWNrYWdlKHNlbGYsIGZ1bGxuYW1lKToKLSAgICAgICAgICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUoc2VsZi5nZXRfZmlsZW5hbWUoZnVsbG5hbWUpKQotICAgICAgICAgICAgICAgIHJldHVybiBvcy5wYXRoLnNwbGl0ZXh0KGZpbGVuYW1lKVswXSA9PSAnX19pbml0X18nCi0KLSAgICAiIiIKLQotICAgIEBhYmMuYWJzdHJhY3RtZXRob2QKLSAgICBkZWYgaXNfcGFja2FnZShzZWxmLCBmdWxsbmFtZSk6Ci0gICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKLQotICAgIEBhYmMuYWJzdHJhY3RtZXRob2QKLSAgICBkZWYgc291cmNlX3BhdGgoc2VsZiwgZnVsbG5hbWUpOgotICAgICAgICAiIiJBYnN0cmFjdCBtZXRob2QuICBBY2NlcHRzIGEgc3RyIG1vZHVsZSBuYW1lIGFuZCByZXR1cm5zIHRoZSBwYXRoIHRvCi0gICAgICAgIHRoZSBzb3VyY2UgY29kZSBmb3IgdGhlIG1vZHVsZS4iIiIKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgotCi0gICAgZGVmIGdldF9maWxlbmFtZShzZWxmLCBmdWxsbmFtZSk6Ci0gICAgICAgICIiIkltcGxlbWVudCBnZXRfZmlsZW5hbWUgaW4gdGVybXMgb2Ygc291cmNlX3BhdGguCi0KLSAgICAgICAgQXMgZ2V0X2ZpbGVuYW1lIHNob3VsZCBvbmx5IHJldHVybiBhIHNvdXJjZSBmaWxlIHBhdGggdGhlcmUgaXMgbm8KLSAgICAgICAgY2hhbmNlIG9mIHRoZSBwYXRoIG5vdCBleGlzdGluZyBidXQgbG9hZGluZyBzdGlsbCBiZWluZyBwb3NzaWJsZSwgc28KLSAgICAgICAgSW1wb3J0RXJyb3Igc2hvdWxkIHByb3BhZ2F0ZSBpbnN0ZWFkIG9mIGJlaW5nIHR1cm5lZCBpbnRvIHJldHVybmluZwotICAgICAgICBOb25lLgotCi0gICAgICAgICIiIgotICAgICAgICB3YXJuaW5ncy53YXJuKCJpbXBvcnRsaWIuYWJjLlB5TG9hZGVyIGlzIGRlcHJlY2F0ZWQgYW5kIGlzICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2xhdGVkIGZvciByZW1vdmFsIGluIFB5dGhvbiAzLjQ7ICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAidXNlIFNvdXJjZUxvYWRlciBpbnN0ZWFkLiAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNlZSB0aGUgaW1wb3J0bGliIGRvY3VtZW50YXRpb24gb24gaG93IHRvIGJlICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tcGF0aWJsZSB3aXRoIFB5dGhvbiAzLjEgb253YXJkcy4iLAotICAgICAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nKQotICAgICAgICBwYXRoID0gc2VsZi5zb3VyY2VfcGF0aChmdWxsbmFtZSkKLSAgICAgICAgaWYgcGF0aCBpcyBOb25lOgotICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IobmFtZT1mdWxsbmFtZSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiBwYXRoCi0KLQotY2xhc3MgUHlQeWNMb2FkZXIoUHlMb2FkZXIpOgotCi0gICAgIiIiQWJzdHJhY3QgYmFzZSBjbGFzcyB0byBhc3Npc3QgaW4gbG9hZGluZyBzb3VyY2UgYW5kIGJ5dGVjb2RlIGJ5Ci0gICAgcmVxdWlyaW5nIG9ubHkgYmFjay1lbmQgc3RvcmFnZSBtZXRob2RzIHRvIGJlIGltcGxlbWVudGVkLgotCi0gICAgVGhpcyBjbGFzcyBoYXMgYmVlbiBkZXByZWNhdGVkISBSZW1vdmFsIGlzIHNsYXRlZCBmb3IgUHl0aG9uIDMuNC4gSW1wbGVtZW50Ci0gICAgdGhlIFNvdXJjZUxvYWRlciBBQkMgaW5zdGVhZC4gSWYgUHl0aG9uIDMuMSBjb21wYXRpYmlsaXR5IGlzIG5lZWRlZCwgc2VlCi0gICAgUHlMb2FkZXIuCi0KLSAgICBUaGUgbWV0aG9kcyBnZXRfY29kZSwgZ2V0X3NvdXJjZSwgYW5kIGxvYWRfbW9kdWxlIGFyZSBpbXBsZW1lbnRlZCBmb3IgdGhlCi0gICAgdXNlci4KLQotICAgICIiIgotCi0gICAgZGVmIGdldF9maWxlbmFtZShzZWxmLCBmdWxsbmFtZSk6Ci0gICAgICAgICIiIlJldHVybiB0aGUgc291cmNlIG9yIGJ5dGVjb2RlIGZpbGUgcGF0aC4iIiIKLSAgICAgICAgcGF0aCA9IHNlbGYuc291cmNlX3BhdGgoZnVsbG5hbWUpCi0gICAgICAgIGlmIHBhdGggaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICByZXR1cm4gcGF0aAotICAgICAgICBwYXRoID0gc2VsZi5ieXRlY29kZV9wYXRoKGZ1bGxuYW1lKQotICAgICAgICBpZiBwYXRoIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgcmV0dXJuIHBhdGgKLSAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoIm5vIHNvdXJjZSBvciBieXRlY29kZSBwYXRoIGF2YWlsYWJsZSBmb3IgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ7MCFyfSIuZm9ybWF0KGZ1bGxuYW1lKSwgbmFtZT1mdWxsbmFtZSkKLQotICAgIGRlZiBnZXRfY29kZShzZWxmLCBmdWxsbmFtZSk6Ci0gICAgICAgICIiIkdldCBhIGNvZGUgb2JqZWN0IGZyb20gc291cmNlIG9yIGJ5dGVjb2RlLiIiIgotICAgICAgICB3YXJuaW5ncy53YXJuKCJpbXBvcnRsaWIuYWJjLlB5UHljTG9hZGVyIGlzIGRlcHJlY2F0ZWQgYW5kIHNsYXRlZCBmb3IgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZW1vdmFsIGluIFB5dGhvbiAzLjQ7IHVzZSBTb3VyY2VMb2FkZXIgaW5zdGVhZC4gIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJZiBQeXRob24gMy4xIGNvbXBhdGliaWxpdHkgaXMgcmVxdWlyZWQsIHNlZSB0aGUgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsYXRlc3QgZG9jdW1lbnRhdGlvbiBmb3IgUHlMb2FkZXIuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZykKLSAgICAgICAgc291cmNlX3RpbWVzdGFtcCA9IHNlbGYuc291cmNlX210aW1lKGZ1bGxuYW1lKQotICAgICAgICAjIFRyeSB0byB1c2UgYnl0ZWNvZGUgaWYgaXQgaXMgYXZhaWxhYmxlLgotICAgICAgICBieXRlY29kZV9wYXRoID0gc2VsZi5ieXRlY29kZV9wYXRoKGZ1bGxuYW1lKQotICAgICAgICBpZiBieXRlY29kZV9wYXRoOgotICAgICAgICAgICAgZGF0YSA9IHNlbGYuZ2V0X2RhdGEoYnl0ZWNvZGVfcGF0aCkKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBtYWdpYyA9IGRhdGFbOjRdCi0gICAgICAgICAgICAgICAgaWYgbGVuKG1hZ2ljKSA8IDQ6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKAotICAgICAgICAgICAgICAgICAgICAgICAgImJhZCBtYWdpYyBudW1iZXIgaW4ge30iLmZvcm1hdChmdWxsbmFtZSksCi0gICAgICAgICAgICAgICAgICAgICAgICBuYW1lPWZ1bGxuYW1lLCBwYXRoPWJ5dGVjb2RlX3BhdGgpCi0gICAgICAgICAgICAgICAgcmF3X3RpbWVzdGFtcCA9IGRhdGFbNDo4XQotICAgICAgICAgICAgICAgIGlmIGxlbihyYXdfdGltZXN0YW1wKSA8IDQ6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIEVPRkVycm9yKCJiYWQgdGltZXN0YW1wIGluIHt9Ii5mb3JtYXQoZnVsbG5hbWUpKQotICAgICAgICAgICAgICAgIHB5Y190aW1lc3RhbXAgPSBfYm9vdHN0cmFwLl9yX2xvbmcocmF3X3RpbWVzdGFtcCkKLSAgICAgICAgICAgICAgICByYXdfc291cmNlX3NpemUgPSBkYXRhWzg6MTJdCi0gICAgICAgICAgICAgICAgaWYgbGVuKHJhd19zb3VyY2Vfc2l6ZSkgIT0gNDoKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgRU9GRXJyb3IoImJhZCBmaWxlIHNpemUgaW4ge30iLmZvcm1hdChmdWxsbmFtZSkpCi0gICAgICAgICAgICAgICAgIyBTb3VyY2Ugc2l6ZSBpcyB1bnVzZWQgYXMgdGhlIEFCQyBkb2VzIG5vdCBwcm92aWRlIGEgd2F5IHRvCi0gICAgICAgICAgICAgICAgIyBnZXQgdGhlIHNpemUgb2YgdGhlIHNvdXJjZSBhaGVhZCBvZiByZWFkaW5nIGl0LgotICAgICAgICAgICAgICAgIGJ5dGVjb2RlID0gZGF0YVsxMjpdCi0gICAgICAgICAgICAgICAgIyBWZXJpZnkgdGhhdCB0aGUgbWFnaWMgbnVtYmVyIGlzIHZhbGlkLgotICAgICAgICAgICAgICAgIGlmIGltcC5nZXRfbWFnaWMoKSAhPSBtYWdpYzoKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoCi0gICAgICAgICAgICAgICAgICAgICAgICAiYmFkIG1hZ2ljIG51bWJlciBpbiB7fSIuZm9ybWF0KGZ1bGxuYW1lKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9ZnVsbG5hbWUsIHBhdGg9Ynl0ZWNvZGVfcGF0aCkKLSAgICAgICAgICAgICAgICAjIFZlcmlmeSB0aGF0IHRoZSBieXRlY29kZSBpcyBub3Qgc3RhbGUgKG9ubHkgbWF0dGVycyB3aGVuCi0gICAgICAgICAgICAgICAgIyB0aGVyZSBpcyBzb3VyY2UgdG8gZmFsbCBiYWNrIG9uLgotICAgICAgICAgICAgICAgIGlmIHNvdXJjZV90aW1lc3RhbXA6Ci0gICAgICAgICAgICAgICAgICAgIGlmIHB5Y190aW1lc3RhbXAgPCBzb3VyY2VfdGltZXN0YW1wOgotICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoImJ5dGVjb2RlIGlzIHN0YWxlIiwgbmFtZT1mdWxsbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg9Ynl0ZWNvZGVfcGF0aCkKLSAgICAgICAgICAgIGV4Y2VwdCAoSW1wb3J0RXJyb3IsIEVPRkVycm9yKToKLSAgICAgICAgICAgICAgICAjIElmIHNvdXJjZSBpcyBhdmFpbGFibGUgZ2l2ZSBpdCBhIHNob3QuCi0gICAgICAgICAgICAgICAgaWYgc291cmNlX3RpbWVzdGFtcCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICMgQnl0ZWNvZGUgc2VlbXMgZmluZSwgc28gdHJ5IHRvIHVzZSBpdC4KLSAgICAgICAgICAgICAgICByZXR1cm4gbWFyc2hhbC5sb2FkcyhieXRlY29kZSkKLSAgICAgICAgZWxpZiBzb3VyY2VfdGltZXN0YW1wIGlzIE5vbmU6Ci0gICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcigibm8gc291cmNlIG9yIGJ5dGVjb2RlIGF2YWlsYWJsZSB0byBjcmVhdGUgY29kZSAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib2JqZWN0IGZvciB7MCFyfSIuZm9ybWF0KGZ1bGxuYW1lKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9ZnVsbG5hbWUpCi0gICAgICAgICMgVXNlIHRoZSBzb3VyY2UuCi0gICAgICAgIHNvdXJjZV9wYXRoID0gc2VsZi5zb3VyY2VfcGF0aChmdWxsbmFtZSkKLSAgICAgICAgaWYgc291cmNlX3BhdGggaXMgTm9uZToKLSAgICAgICAgICAgIG1lc3NhZ2UgPSAiYSBzb3VyY2UgcGF0aCBtdXN0IGV4aXN0IHRvIGxvYWQgezB9Ii5mb3JtYXQoZnVsbG5hbWUpCi0gICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcihtZXNzYWdlLCBuYW1lPWZ1bGxuYW1lKQotICAgICAgICBzb3VyY2UgPSBzZWxmLmdldF9kYXRhKHNvdXJjZV9wYXRoKQotICAgICAgICBjb2RlX29iamVjdCA9IGNvbXBpbGUoc291cmNlLCBzb3VyY2VfcGF0aCwgJ2V4ZWMnLCBkb250X2luaGVyaXQ9VHJ1ZSkKLSAgICAgICAgIyBHZW5lcmF0ZSBieXRlY29kZSBhbmQgd3JpdGUgaXQgb3V0LgotICAgICAgICBpZiBub3Qgc3lzLmRvbnRfd3JpdGVfYnl0ZWNvZGU6Ci0gICAgICAgICAgICBkYXRhID0gYnl0ZWFycmF5KGltcC5nZXRfbWFnaWMoKSkKLSAgICAgICAgICAgIGRhdGEuZXh0ZW5kKF9ib290c3RyYXAuX3dfbG9uZyhzb3VyY2VfdGltZXN0YW1wKSkKLSAgICAgICAgICAgIGRhdGEuZXh0ZW5kKF9ib290c3RyYXAuX3dfbG9uZyhsZW4oc291cmNlKSAmIDB4RkZGRkZGRkYpKQotICAgICAgICAgICAgZGF0YS5leHRlbmQobWFyc2hhbC5kdW1wcyhjb2RlX29iamVjdCkpCi0gICAgICAgICAgICBzZWxmLndyaXRlX2J5dGVjb2RlKGZ1bGxuYW1lLCBkYXRhKQotICAgICAgICByZXR1cm4gY29kZV9vYmplY3QKLQotICAgIEBhYmMuYWJzdHJhY3RtZXRob2QKLSAgICBkZWYgc291cmNlX210aW1lKHNlbGYsIGZ1bGxuYW1lKToKLSAgICAgICAgIiIiQWJzdHJhY3QgbWV0aG9kLiBBY2NlcHRzIGEgc3RyIGZpbGVuYW1lIGFuZCByZXR1cm5zIGFuIGludAotICAgICAgICBtb2RpZmljYXRpb24gdGltZSBmb3IgdGhlIHNvdXJjZSBvZiB0aGUgbW9kdWxlLiIiIgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCi0KLSAgICBAYWJjLmFic3RyYWN0bWV0aG9kCi0gICAgZGVmIGJ5dGVjb2RlX3BhdGgoc2VsZiwgZnVsbG5hbWUpOgotICAgICAgICAiIiJBYnN0cmFjdCBtZXRob2QuIEFjY2VwdHMgYSBzdHIgZmlsZW5hbWUgYW5kIHJldHVybnMgdGhlIHN0ciBwYXRobmFtZQotICAgICAgICB0byB0aGUgYnl0ZWNvZGUgZm9yIHRoZSBtb2R1bGUuIiIiCi0gICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKLQotICAgIEBhYmMuYWJzdHJhY3RtZXRob2QKLSAgICBkZWYgd3JpdGVfYnl0ZWNvZGUoc2VsZiwgZnVsbG5hbWUsIGJ5dGVjb2RlKToKLSAgICAgICAgIiIiQWJzdHJhY3QgbWV0aG9kLiAgQWNjZXB0cyBhIHN0ciBmaWxlbmFtZSBhbmQgYnl0ZXMgb2JqZWN0Ci0gICAgICAgIHJlcHJlc2VudGluZyB0aGUgYnl0ZWNvZGUgZm9yIHRoZSBtb2R1bGUuICBSZXR1cm5zIGEgYm9vbGVhbgotICAgICAgICByZXByZXNlbnRpbmcgd2hldGhlciB0aGUgYnl0ZWNvZGUgd2FzIHdyaXR0ZW4gb3Igbm90LiIiIgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCmRpZmYgLS1naXQgYS9MaWIvaW1wb3J0bGliL21hY2hpbmVyeS5weSBiL0xpYi9pbXBvcnRsaWIvbWFjaGluZXJ5LnB5CmluZGV4IGZmODI2ZTQuLjJlMWIyZDcgMTAwNjQ0Ci0tLSBhL0xpYi9pbXBvcnRsaWIvbWFjaGluZXJ5LnB5CisrKyBiL0xpYi9pbXBvcnRsaWIvbWFjaGluZXJ5LnB5CkBAIC01LDYgKzUsNyBAQAogZnJvbSAuX2Jvb3RzdHJhcCBpbXBvcnQgKFNPVVJDRV9TVUZGSVhFUywgREVCVUdfQllURUNPREVfU1VGRklYRVMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgT1BUSU1JWkVEX0JZVEVDT0RFX1NVRkZJWEVTLCBCWVRFQ09ERV9TVUZGSVhFUywKICAgICAgICAgICAgICAgICAgICAgICAgICBFWFRFTlNJT05fU1VGRklYRVMpCitmcm9tIC5fYm9vdHN0cmFwIGltcG9ydCBNb2R1bGVTcGVjCiBmcm9tIC5fYm9vdHN0cmFwIGltcG9ydCBCdWlsdGluSW1wb3J0ZXIKIGZyb20gLl9ib290c3RyYXAgaW1wb3J0IEZyb3plbkltcG9ydGVyCiBmcm9tIC5fYm9vdHN0cmFwIGltcG9ydCBXaW5kb3dzUmVnaXN0cnlGaW5kZXIKZGlmZiAtLWdpdCBhL0xpYi9pbXBvcnRsaWIvdXRpbC5weSBiL0xpYi9pbXBvcnRsaWIvdXRpbC5weQppbmRleCAxMzE2NDM3Li42ZDczYjFkIDEwMDY0NAotLS0gYS9MaWIvaW1wb3J0bGliL3V0aWwucHkKKysrIGIvTGliL2ltcG9ydGxpYi91dGlsLnB5CkBAIC0xLDkgKzEsMTggQEAKICIiIlV0aWxpdHkgY29kZSBmb3IgY29uc3RydWN0aW5nIGltcG9ydGVycywgZXRjLiIiIgogCi1mcm9tIC5fYm9vdHN0cmFwIGltcG9ydCBtb2R1bGVfZm9yX2xvYWRlcgotZnJvbSAuX2Jvb3RzdHJhcCBpbXBvcnQgc2V0X2xvYWRlcgotZnJvbSAuX2Jvb3RzdHJhcCBpbXBvcnQgc2V0X3BhY2thZ2UKK2Zyb20gLl9ib290c3RyYXAgaW1wb3J0IE1BR0lDX05VTUJFUgorZnJvbSAuX2Jvb3RzdHJhcCBpbXBvcnQgY2FjaGVfZnJvbV9zb3VyY2UKK2Zyb20gLl9ib290c3RyYXAgaW1wb3J0IGRlY29kZV9zb3VyY2UKK2Zyb20gLl9ib290c3RyYXAgaW1wb3J0IHNvdXJjZV9mcm9tX2NhY2hlCitmcm9tIC5fYm9vdHN0cmFwIGltcG9ydCBzcGVjX2Zyb21fbG9hZGVyCitmcm9tIC5fYm9vdHN0cmFwIGltcG9ydCBzcGVjX2Zyb21fZmlsZV9sb2NhdGlvbgogZnJvbSAuX2Jvb3RzdHJhcCBpbXBvcnQgX3Jlc29sdmVfbmFtZQorZnJvbSAuX2Jvb3RzdHJhcCBpbXBvcnQgX2ZpbmRfc3BlYworCitmcm9tIGNvbnRleHRsaWIgaW1wb3J0IGNvbnRleHRtYW5hZ2VyCitpbXBvcnQgZnVuY3Rvb2xzCitpbXBvcnQgc3lzCitpbXBvcnQgd2FybmluZ3MKIAogCiBkZWYgcmVzb2x2ZV9uYW1lKG5hbWUsIHBhY2thZ2UpOgpAQCAtMTksMyArMjgsMTc1IEBACiAgICAgICAgICAgICBicmVhawogICAgICAgICBsZXZlbCArPSAxCiAgICAgcmV0dXJuIF9yZXNvbHZlX25hbWUobmFtZVtsZXZlbDpdLCBwYWNrYWdlLCBsZXZlbCkKKworCitkZWYgX2ZpbmRfc3BlY19mcm9tX3BhdGgobmFtZSwgcGF0aD1Ob25lKToKKyAgICAiIiJSZXR1cm4gdGhlIHNwZWMgZm9yIHRoZSBzcGVjaWZpZWQgbW9kdWxlLgorCisgICAgRmlyc3QsIHN5cy5tb2R1bGVzIGlzIGNoZWNrZWQgdG8gc2VlIGlmIHRoZSBtb2R1bGUgd2FzIGFscmVhZHkgaW1wb3J0ZWQuIElmCisgICAgc28sIHRoZW4gc3lzLm1vZHVsZXNbbmFtZV0uX19zcGVjX18gaXMgcmV0dXJuZWQuIElmIHRoYXQgaGFwcGVucyB0byBiZQorICAgIHNldCB0byBOb25lLCB0aGVuIFZhbHVlRXJyb3IgaXMgcmFpc2VkLiBJZiB0aGUgbW9kdWxlIGlzIG5vdCBpbgorICAgIHN5cy5tb2R1bGVzLCB0aGVuIHN5cy5tZXRhX3BhdGggaXMgc2VhcmNoZWQgZm9yIGEgc3VpdGFibGUgc3BlYyB3aXRoIHRoZQorICAgIHZhbHVlIG9mICdwYXRoJyBnaXZlbiB0byB0aGUgZmluZGVycy4gTm9uZSBpcyByZXR1cm5lZCBpZiBubyBzcGVjIGNvdWxkCisgICAgYmUgZm91bmQuCisKKyAgICBEb3R0ZWQgbmFtZXMgZG8gbm90IGhhdmUgdGhlaXIgcGFyZW50IHBhY2thZ2VzIGltcGxpY2l0bHkgaW1wb3J0ZWQuIFlvdSB3aWxsCisgICAgbW9zdCBsaWtlbHkgbmVlZCB0byBleHBsaWNpdGx5IGltcG9ydCBhbGwgcGFyZW50IHBhY2thZ2VzIGluIHRoZSBwcm9wZXIKKyAgICBvcmRlciBmb3IgYSBzdWJtb2R1bGUgdG8gZ2V0IHRoZSBjb3JyZWN0IHNwZWMuCisKKyAgICAiIiIKKyAgICBpZiBuYW1lIG5vdCBpbiBzeXMubW9kdWxlczoKKyAgICAgICAgcmV0dXJuIF9maW5kX3NwZWMobmFtZSwgcGF0aCkKKyAgICBlbHNlOgorICAgICAgICBtb2R1bGUgPSBzeXMubW9kdWxlc1tuYW1lXQorICAgICAgICBpZiBtb2R1bGUgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNwZWMgPSBtb2R1bGUuX19zcGVjX18KKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigne30uX19zcGVjX18gaXMgbm90IHNldCcuZm9ybWF0KG5hbWUpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgc3BlYyBpcyBOb25lOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3t9Ll9fc3BlY19fIGlzIE5vbmUnLmZvcm1hdChuYW1lKSkKKyAgICAgICAgICAgIHJldHVybiBzcGVjCisKKworZGVmIGZpbmRfc3BlYyhuYW1lLCBwYWNrYWdlPU5vbmUpOgorICAgICIiIlJldHVybiB0aGUgc3BlYyBmb3IgdGhlIHNwZWNpZmllZCBtb2R1bGUuCisKKyAgICBGaXJzdCwgc3lzLm1vZHVsZXMgaXMgY2hlY2tlZCB0byBzZWUgaWYgdGhlIG1vZHVsZSB3YXMgYWxyZWFkeSBpbXBvcnRlZC4gSWYKKyAgICBzbywgdGhlbiBzeXMubW9kdWxlc1tuYW1lXS5fX3NwZWNfXyBpcyByZXR1cm5lZC4gSWYgdGhhdCBoYXBwZW5zIHRvIGJlCisgICAgc2V0IHRvIE5vbmUsIHRoZW4gVmFsdWVFcnJvciBpcyByYWlzZWQuIElmIHRoZSBtb2R1bGUgaXMgbm90IGluCisgICAgc3lzLm1vZHVsZXMsIHRoZW4gc3lzLm1ldGFfcGF0aCBpcyBzZWFyY2hlZCBmb3IgYSBzdWl0YWJsZSBzcGVjIHdpdGggdGhlCisgICAgdmFsdWUgb2YgJ3BhdGgnIGdpdmVuIHRvIHRoZSBmaW5kZXJzLiBOb25lIGlzIHJldHVybmVkIGlmIG5vIHNwZWMgY291bGQKKyAgICBiZSBmb3VuZC4KKworICAgIElmIHRoZSBuYW1lIGlzIGZvciBzdWJtb2R1bGUgKGNvbnRhaW5zIGEgZG90KSwgdGhlIHBhcmVudCBtb2R1bGUgaXMKKyAgICBhdXRvbWF0aWNhbGx5IGltcG9ydGVkLgorCisgICAgVGhlIG5hbWUgYW5kIHBhY2thZ2UgYXJndW1lbnRzIHdvcmsgdGhlIHNhbWUgYXMgaW1wb3J0bGliLmltcG9ydF9tb2R1bGUoKS4KKyAgICBJbiBvdGhlciB3b3JkcywgcmVsYXRpdmUgbW9kdWxlIG5hbWVzICh3aXRoIGxlYWRpbmcgZG90cykgd29yay4KKworICAgICIiIgorICAgIGZ1bGxuYW1lID0gcmVzb2x2ZV9uYW1lKG5hbWUsIHBhY2thZ2UpIGlmIG5hbWUuc3RhcnRzd2l0aCgnLicpIGVsc2UgbmFtZQorICAgIGlmIGZ1bGxuYW1lIG5vdCBpbiBzeXMubW9kdWxlczoKKyAgICAgICAgcGFyZW50X25hbWUgPSBmdWxsbmFtZS5ycGFydGl0aW9uKCcuJylbMF0KKyAgICAgICAgaWYgcGFyZW50X25hbWU6CisgICAgICAgICAgICAjIFVzZSBidWlsdGlucy5fX2ltcG9ydF9fKCkgaW4gY2FzZSBzb21lb25lIHJlcGxhY2VkIGl0LgorICAgICAgICAgICAgcGFyZW50ID0gX19pbXBvcnRfXyhwYXJlbnRfbmFtZSwgZnJvbWxpc3Q9WydfX3BhdGhfXyddKQorICAgICAgICAgICAgcmV0dXJuIF9maW5kX3NwZWMoZnVsbG5hbWUsIHBhcmVudC5fX3BhdGhfXykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBfZmluZF9zcGVjKGZ1bGxuYW1lLCBOb25lKQorICAgIGVsc2U6CisgICAgICAgIG1vZHVsZSA9IHN5cy5tb2R1bGVzW2Z1bGxuYW1lXQorICAgICAgICBpZiBtb2R1bGUgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNwZWMgPSBtb2R1bGUuX19zcGVjX18KKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigne30uX19zcGVjX18gaXMgbm90IHNldCcuZm9ybWF0KG5hbWUpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgc3BlYyBpcyBOb25lOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3t9Ll9fc3BlY19fIGlzIE5vbmUnLmZvcm1hdChuYW1lKSkKKyAgICAgICAgICAgIHJldHVybiBzcGVjCisKKworQGNvbnRleHRtYW5hZ2VyCitkZWYgX21vZHVsZV90b19sb2FkKG5hbWUpOgorICAgIGlzX3JlbG9hZCA9IG5hbWUgaW4gc3lzLm1vZHVsZXMKKworICAgIG1vZHVsZSA9IHN5cy5tb2R1bGVzLmdldChuYW1lKQorICAgIGlmIG5vdCBpc19yZWxvYWQ6CisgICAgICAgICMgVGhpcyBtdXN0IGJlIGRvbmUgYmVmb3JlIG9wZW4oKSBpcyBjYWxsZWQgYXMgdGhlICdpbycgbW9kdWxlCisgICAgICAgICMgaW1wbGljaXRseSBpbXBvcnRzICdsb2NhbGUnIGFuZCB3b3VsZCBvdGhlcndpc2UgdHJpZ2dlciBhbgorICAgICAgICAjIGluZmluaXRlIGxvb3AuCisgICAgICAgIG1vZHVsZSA9IHR5cGUoc3lzKShuYW1lKQorICAgICAgICAjIFRoaXMgbXVzdCBiZSBkb25lIGJlZm9yZSBwdXR0aW5nIHRoZSBtb2R1bGUgaW4gc3lzLm1vZHVsZXMKKyAgICAgICAgIyAob3RoZXJ3aXNlIGFuIG9wdGltaXphdGlvbiBzaG9ydGN1dCBpbiBpbXBvcnQuYyBiZWNvbWVzIHdyb25nKQorICAgICAgICBtb2R1bGUuX19pbml0aWFsaXppbmdfXyA9IFRydWUKKyAgICAgICAgc3lzLm1vZHVsZXNbbmFtZV0gPSBtb2R1bGUKKyAgICB0cnk6CisgICAgICAgIHlpZWxkIG1vZHVsZQorICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgIGlmIG5vdCBpc19yZWxvYWQ6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZGVsIHN5cy5tb2R1bGVzW25hbWVdCisgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgIGZpbmFsbHk6CisgICAgICAgIG1vZHVsZS5fX2luaXRpYWxpemluZ19fID0gRmFsc2UKKworCitkZWYgc2V0X3BhY2thZ2UoZnhuKToKKyAgICAiIiJTZXQgX19wYWNrYWdlX18gb24gdGhlIHJldHVybmVkIG1vZHVsZS4KKworICAgIFRoaXMgZnVuY3Rpb24gaXMgZGVwcmVjYXRlZC4KKworICAgICIiIgorICAgIEBmdW5jdG9vbHMud3JhcHMoZnhuKQorICAgIGRlZiBzZXRfcGFja2FnZV93cmFwcGVyKCphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHdhcm5pbmdzLndhcm4oJ1RoZSBpbXBvcnQgc3lzdGVtIG5vdyB0YWtlcyBjYXJlIG9mIHRoaXMgYXV0b21hdGljYWxseS4nLAorICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgc3RhY2tsZXZlbD0yKQorICAgICAgICBtb2R1bGUgPSBmeG4oKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICBpZiBnZXRhdHRyKG1vZHVsZSwgJ19fcGFja2FnZV9fJywgTm9uZSkgaXMgTm9uZToKKyAgICAgICAgICAgIG1vZHVsZS5fX3BhY2thZ2VfXyA9IG1vZHVsZS5fX25hbWVfXworICAgICAgICAgICAgaWYgbm90IGhhc2F0dHIobW9kdWxlLCAnX19wYXRoX18nKToKKyAgICAgICAgICAgICAgICBtb2R1bGUuX19wYWNrYWdlX18gPSBtb2R1bGUuX19wYWNrYWdlX18ucnBhcnRpdGlvbignLicpWzBdCisgICAgICAgIHJldHVybiBtb2R1bGUKKyAgICByZXR1cm4gc2V0X3BhY2thZ2Vfd3JhcHBlcgorCisKK2RlZiBzZXRfbG9hZGVyKGZ4bik6CisgICAgIiIiU2V0IF9fbG9hZGVyX18gb24gdGhlIHJldHVybmVkIG1vZHVsZS4KKworICAgIFRoaXMgZnVuY3Rpb24gaXMgZGVwcmVjYXRlZC4KKworICAgICIiIgorICAgIEBmdW5jdG9vbHMud3JhcHMoZnhuKQorICAgIGRlZiBzZXRfbG9hZGVyX3dyYXBwZXIoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgd2FybmluZ3Mud2FybignVGhlIGltcG9ydCBzeXN0ZW0gbm93IHRha2VzIGNhcmUgb2YgdGhpcyBhdXRvbWF0aWNhbGx5LicsCisgICAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nLCBzdGFja2xldmVsPTIpCisgICAgICAgIG1vZHVsZSA9IGZ4bihzZWxmLCAqYXJncywgKiprd2FyZ3MpCisgICAgICAgIGlmIGdldGF0dHIobW9kdWxlLCAnX19sb2FkZXJfXycsIE5vbmUpIGlzIE5vbmU6CisgICAgICAgICAgICBtb2R1bGUuX19sb2FkZXJfXyA9IHNlbGYKKyAgICAgICAgcmV0dXJuIG1vZHVsZQorICAgIHJldHVybiBzZXRfbG9hZGVyX3dyYXBwZXIKKworCitkZWYgbW9kdWxlX2Zvcl9sb2FkZXIoZnhuKToKKyAgICAiIiJEZWNvcmF0b3IgdG8gaGFuZGxlIHNlbGVjdGluZyB0aGUgcHJvcGVyIG1vZHVsZSBmb3IgbG9hZGVycy4KKworICAgIFRoZSBkZWNvcmF0ZWQgZnVuY3Rpb24gaXMgcGFzc2VkIHRoZSBtb2R1bGUgdG8gdXNlIGluc3RlYWQgb2YgdGhlIG1vZHVsZQorICAgIG5hbWUuIFRoZSBtb2R1bGUgcGFzc2VkIGluIHRvIHRoZSBmdW5jdGlvbiBpcyBlaXRoZXIgZnJvbSBzeXMubW9kdWxlcyBpZgorICAgIGl0IGFscmVhZHkgZXhpc3RzIG9yIGlzIGEgbmV3IG1vZHVsZS4gSWYgdGhlIG1vZHVsZSBpcyBuZXcsIHRoZW4gX19uYW1lX18KKyAgICBpcyBzZXQgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSBtZXRob2QsIF9fbG9hZGVyX18gaXMgc2V0IHRvIHNlbGYsIGFuZAorICAgIF9fcGFja2FnZV9fIGlzIHNldCBhY2NvcmRpbmdseSAoaWYgc2VsZi5pc19wYWNrYWdlKCkgaXMgZGVmaW5lZCkgd2lsbCBiZSBzZXQKKyAgICBiZWZvcmUgaXQgaXMgcGFzc2VkIHRvIHRoZSBkZWNvcmF0ZWQgZnVuY3Rpb24gKGlmIHNlbGYuaXNfcGFja2FnZSgpIGRvZXMKKyAgICBub3Qgd29yayBmb3IgdGhlIG1vZHVsZSBpdCB3aWxsIGJlIHNldCBwb3N0LWxvYWQpLgorCisgICAgSWYgYW4gZXhjZXB0aW9uIGlzIHJhaXNlZCBhbmQgdGhlIGRlY29yYXRvciBjcmVhdGVkIHRoZSBtb2R1bGUgaXQgaXMKKyAgICBzdWJzZXF1ZW50bHkgcmVtb3ZlZCBmcm9tIHN5cy5tb2R1bGVzLgorCisgICAgVGhlIGRlY29yYXRvciBhc3N1bWVzIHRoYXQgdGhlIGRlY29yYXRlZCBmdW5jdGlvbiB0YWtlcyB0aGUgbW9kdWxlIG5hbWUgYXMKKyAgICB0aGUgc2Vjb25kIGFyZ3VtZW50LgorCisgICAgIiIiCisgICAgd2FybmluZ3Mud2FybignVGhlIGltcG9ydCBzeXN0ZW0gbm93IHRha2VzIGNhcmUgb2YgdGhpcyBhdXRvbWF0aWNhbGx5LicsCisgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcsIHN0YWNrbGV2ZWw9MikKKyAgICBAZnVuY3Rvb2xzLndyYXBzKGZ4bikKKyAgICBkZWYgbW9kdWxlX2Zvcl9sb2FkZXJfd3JhcHBlcihzZWxmLCBmdWxsbmFtZSwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgd2l0aCBfbW9kdWxlX3RvX2xvYWQoZnVsbG5hbWUpIGFzIG1vZHVsZToKKyAgICAgICAgICAgIG1vZHVsZS5fX2xvYWRlcl9fID0gc2VsZgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGlzX3BhY2thZ2UgPSBzZWxmLmlzX3BhY2thZ2UoZnVsbG5hbWUpCisgICAgICAgICAgICBleGNlcHQgKEltcG9ydEVycm9yLCBBdHRyaWJ1dGVFcnJvcik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBpc19wYWNrYWdlOgorICAgICAgICAgICAgICAgICAgICBtb2R1bGUuX19wYWNrYWdlX18gPSBmdWxsbmFtZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5fX3BhY2thZ2VfXyA9IGZ1bGxuYW1lLnJwYXJ0aXRpb24oJy4nKVswXQorICAgICAgICAgICAgIyBJZiBfX3BhY2thZ2VfXyB3YXMgbm90IHNldCBhYm92ZSwgX19pbXBvcnRfXygpIHdpbGwgZG8gaXQgbGF0ZXIuCisgICAgICAgICAgICByZXR1cm4gZnhuKHNlbGYsIG1vZHVsZSwgKmFyZ3MsICoqa3dhcmdzKQorCisgICAgcmV0dXJuIG1vZHVsZV9mb3JfbG9hZGVyX3dyYXBwZXIKZGlmZiAtLWdpdCBhL0xpYi9pbnNwZWN0LnB5IGIvTGliL2luc3BlY3QucHkKaW5kZXggNjgwNjIzZC4uNDI5OGRlNiAxMDA2NDQKLS0tIGEvTGliL2luc3BlY3QucHkKKysrIGIvTGliL2luc3BlY3QucHkKQEAgLTMxLDcgKzMxLDcgQEAKIF9fYXV0aG9yX18gPSAoJ0thLVBpbmcgWWVlIDxwaW5nQGxmdy5vcmc+JywKICAgICAgICAgICAgICAgJ1l1cnkgU2VsaXZhbm92IDx5c2VsaXZhbm92QHNwcnltaXguY29tPicpCiAKLWltcG9ydCBpbXAKK2ltcG9ydCBhc3QKIGltcG9ydCBpbXBvcnRsaWIubWFjaGluZXJ5CiBpbXBvcnQgaXRlcnRvb2xzCiBpbXBvcnQgbGluZWNhY2hlCkBAIC0zOSw2ICszOSw3IEBACiBpbXBvcnQgcmUKIGltcG9ydCBzeXMKIGltcG9ydCB0b2tlbml6ZQoraW1wb3J0IHRva2VuCiBpbXBvcnQgdHlwZXMKIGltcG9ydCB3YXJuaW5ncwogaW1wb3J0IGZ1bmN0b29scwpAQCAtNDgsNyArNDksNyBAQAogCiAjIENyZWF0ZSBjb25zdGFudHMgZm9yIHRoZSBjb21waWxlciBmbGFncyBpbiBJbmNsdWRlL2NvZGUuaAogIyBXZSB0cnkgdG8gZ2V0IHRoZW0gZnJvbSBkaXMgdG8gYXZvaWQgZHVwbGljYXRpb24sIGJ1dCBmYWxsCi0jIGJhY2sgdG8gaGFyZGNvZGluZyBzbyB0aGUgZGVwZW5kZW5jeSBpcyBvcHRpb25hbAorIyBiYWNrIHRvIGhhcmQtY29kaW5nIHNvIHRoZSBkZXBlbmRlbmN5IGlzIG9wdGlvbmFsCiB0cnk6CiAgICAgZnJvbSBkaXMgaW1wb3J0IENPTVBJTEVSX0ZMQUdfTkFNRVMgYXMgX2ZsYWdfbmFtZXMKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKQEAgLTI2OCwyMSArMjY5LDQwIEBACiAgICAgZWxzZToKICAgICAgICAgbXJvID0gKCkKICAgICByZXN1bHRzID0gW10KLSAgICBmb3Iga2V5IGluIGRpcihvYmplY3QpOgotICAgICAgICAjIEZpcnN0IHRyeSB0byBnZXQgdGhlIHZhbHVlIHZpYSBfX2RpY3RfXy4gU29tZSBkZXNjcmlwdG9ycyBkb24ndAotICAgICAgICAjIGxpa2UgY2FsbGluZyB0aGVpciBfX2dldF9fIChzZWUgYnVnICMxNzg1KS4KLSAgICAgICAgZm9yIGJhc2UgaW4gbXJvOgotICAgICAgICAgICAgaWYga2V5IGluIGJhc2UuX19kaWN0X186Ci0gICAgICAgICAgICAgICAgdmFsdWUgPSBiYXNlLl9fZGljdF9fW2tleV0KLSAgICAgICAgICAgICAgICBicmVhawotICAgICAgICBlbHNlOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHZhbHVlID0gZ2V0YXR0cihvYmplY3QsIGtleSkKLSAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICBwcm9jZXNzZWQgPSBzZXQoKQorICAgIG5hbWVzID0gZGlyKG9iamVjdCkKKyAgICAjIDpkZCBhbnkgRHluYW1pY0NsYXNzQXR0cmlidXRlcyB0byB0aGUgbGlzdCBvZiBuYW1lcyBpZiBvYmplY3QgaXMgYSBjbGFzczsKKyAgICAjIHRoaXMgbWF5IHJlc3VsdCBpbiBkdXBsaWNhdGUgZW50cmllcyBpZiwgZm9yIGV4YW1wbGUsIGEgdmlydHVhbAorICAgICMgYXR0cmlidXRlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBhIER5bmFtaWNDbGFzc0F0dHJpYnV0ZSBleGlzdHMKKyAgICB0cnk6CisgICAgICAgIGZvciBiYXNlIGluIG9iamVjdC5fX2Jhc2VzX186CisgICAgICAgICAgICBmb3IgaywgdiBpbiBiYXNlLl9fZGljdF9fLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh2LCB0eXBlcy5EeW5hbWljQ2xhc3NBdHRyaWJ1dGUpOgorICAgICAgICAgICAgICAgICAgICBuYW1lcy5hcHBlbmQoaykKKyAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgIHBhc3MKKyAgICBmb3Iga2V5IGluIG5hbWVzOgorICAgICAgICAjIEZpcnN0IHRyeSB0byBnZXQgdGhlIHZhbHVlIHZpYSBnZXRhdHRyLiAgU29tZSBkZXNjcmlwdG9ycyBkb24ndAorICAgICAgICAjIGxpa2UgY2FsbGluZyB0aGVpciBfX2dldF9fIChzZWUgYnVnICMxNzg1KSwgc28gZmFsbCBiYWNrIHRvCisgICAgICAgICMgbG9va2luZyBpbiB0aGUgX19kaWN0X18uCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHZhbHVlID0gZ2V0YXR0cihvYmplY3QsIGtleSkKKyAgICAgICAgICAgICMgaGFuZGxlIHRoZSBkdXBsaWNhdGUga2V5CisgICAgICAgICAgICBpZiBrZXkgaW4gcHJvY2Vzc2VkOgorICAgICAgICAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIGZvciBiYXNlIGluIG1ybzoKKyAgICAgICAgICAgICAgICBpZiBrZXkgaW4gYmFzZS5fX2RpY3RfXzoKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBiYXNlLl9fZGljdF9fW2tleV0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBjb3VsZCBiZSBhIChjdXJyZW50bHkpIG1pc3Npbmcgc2xvdCBtZW1iZXIsIG9yIGEgYnVnZ3kKKyAgICAgICAgICAgICAgICAjIF9fZGlyX187IGRpc2NhcmQgYW5kIG1vdmUgb24KICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICBpZiBub3QgcHJlZGljYXRlIG9yIHByZWRpY2F0ZSh2YWx1ZSk6CiAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZCgoa2V5LCB2YWx1ZSkpCi0gICAgcmVzdWx0cy5zb3J0KCkKKyAgICAgICAgcHJvY2Vzc2VkLmFkZChrZXkpCisgICAgcmVzdWx0cy5zb3J0KGtleT1sYW1iZGEgcGFpcjogcGFpclswXSkKICAgICByZXR1cm4gcmVzdWx0cwogCiBBdHRyaWJ1dGUgPSBuYW1lZHR1cGxlKCdBdHRyaWJ1dGUnLCAnbmFtZSBraW5kIGRlZmluaW5nX2NsYXNzIG9iamVjdCcpCkBAIC0yOTksNjAgKzMxOSwxMDYgQEAKICAgICAgICAgICAgICAgICdjbGFzcyBtZXRob2QnICAgIGNyZWF0ZWQgdmlhIGNsYXNzbWV0aG9kKCkKICAgICAgICAgICAgICAgICdzdGF0aWMgbWV0aG9kJyAgIGNyZWF0ZWQgdmlhIHN0YXRpY21ldGhvZCgpCiAgICAgICAgICAgICAgICAncHJvcGVydHknICAgICAgICBjcmVhdGVkIHZpYSBwcm9wZXJ0eSgpCi0gICAgICAgICAgICAgICAnbWV0aG9kJyAgICAgICAgICBhbnkgb3RoZXIgZmxhdm9yIG9mIG1ldGhvZAorICAgICAgICAgICAgICAgJ21ldGhvZCcgICAgICAgICAgYW55IG90aGVyIGZsYXZvciBvZiBtZXRob2Qgb3IgZGVzY3JpcHRvcgogICAgICAgICAgICAgICAgJ2RhdGEnICAgICAgICAgICAgbm90IGEgbWV0aG9kCiAKICAgICAgICAgMi4gVGhlIGNsYXNzIHdoaWNoIGRlZmluZWQgdGhpcyBhdHRyaWJ1dGUgKGEgY2xhc3MpLgogCi0gICAgICAgIDMuIFRoZSBvYmplY3QgYXMgb2J0YWluZWQgZGlyZWN0bHkgZnJvbSB0aGUgZGVmaW5pbmcgY2xhc3MncwotICAgICAgICAgICBfX2RpY3RfXywgbm90IHZpYSBnZXRhdHRyLiAgVGhpcyBpcyBlc3BlY2lhbGx5IGltcG9ydGFudCBmb3IKLSAgICAgICAgICAgZGF0YSBhdHRyaWJ1dGVzOiAgQy5kYXRhIGlzIGp1c3QgYSBkYXRhIG9iamVjdCwgYnV0Ci0gICAgICAgICAgIEMuX19kaWN0X19bJ2RhdGEnXSBtYXkgYmUgYSBkYXRhIGRlc2NyaXB0b3Igd2l0aCBhZGRpdGlvbmFsCi0gICAgICAgICAgIGluZm8sIGxpa2UgYSBfX2RvY19fIHN0cmluZy4KKyAgICAgICAgMy4gVGhlIG9iamVjdCBhcyBvYnRhaW5lZCBieSBjYWxsaW5nIGdldGF0dHI7IGlmIHRoaXMgZmFpbHMsIG9yIGlmIHRoZQorICAgICAgICAgICByZXN1bHRpbmcgb2JqZWN0IGRvZXMgbm90IGxpdmUgYW55d2hlcmUgaW4gdGhlIGNsYXNzJyBtcm8gKGluY2x1ZGluZworICAgICAgICAgICBtZXRhY2xhc3NlcykgdGhlbiB0aGUgb2JqZWN0IGlzIGxvb2tlZCB1cCBpbiB0aGUgZGVmaW5pbmcgY2xhc3MncworICAgICAgICAgICBkaWN0IChmb3VuZCBieSB3YWxraW5nIHRoZSBtcm8pLgorCisgICAgSWYgb25lIG9mIHRoZSBpdGVtcyBpbiBkaXIoY2xzKSBpcyBzdG9yZWQgaW4gdGhlIG1ldGFjbGFzcyBpdCB3aWxsIG5vdworICAgIGJlIGRpc2NvdmVyZWQgYW5kIG5vdCBoYXZlIE5vbmUgYmUgbGlzdGVkIGFzIHRoZSBjbGFzcyBpbiB3aGljaCBpdCB3YXMKKyAgICBkZWZpbmVkLiAgQW55IGl0ZW1zIHdob3NlIGhvbWUgY2xhc3MgY2Fubm90IGJlIGRpc2NvdmVyZWQgYXJlIHNraXBwZWQuCiAgICAgIiIiCiAKICAgICBtcm8gPSBnZXRtcm8oY2xzKQorICAgIG1ldGFtcm8gPSBnZXRtcm8odHlwZShjbHMpKSAjIGZvciBhdHRyaWJ1dGVzIHN0b3JlZCBpbiB0aGUgbWV0YWNsYXNzCisgICAgbWV0YW1ybyA9IHR1cGxlKFtjbHMgZm9yIGNscyBpbiBtZXRhbXJvIGlmIGNscyBub3QgaW4gKHR5cGUsIG9iamVjdCldKQorICAgIGNsYXNzX2Jhc2VzID0gKGNscywpICsgbXJvCisgICAgYWxsX2Jhc2VzID0gY2xhc3NfYmFzZXMgKyBtZXRhbXJvCiAgICAgbmFtZXMgPSBkaXIoY2xzKQorICAgICMgOmRkIGFueSBEeW5hbWljQ2xhc3NBdHRyaWJ1dGVzIHRvIHRoZSBsaXN0IG9mIG5hbWVzOworICAgICMgdGhpcyBtYXkgcmVzdWx0IGluIGR1cGxpY2F0ZSBlbnRyaWVzIGlmLCBmb3IgZXhhbXBsZSwgYSB2aXJ0dWFsCisgICAgIyBhdHRyaWJ1dGUgd2l0aCB0aGUgc2FtZSBuYW1lIGFzIGEgRHluYW1pY0NsYXNzQXR0cmlidXRlIGV4aXN0cy4KKyAgICBmb3IgYmFzZSBpbiBtcm86CisgICAgICAgIGZvciBrLCB2IGluIGJhc2UuX19kaWN0X18uaXRlbXMoKToKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodiwgdHlwZXMuRHluYW1pY0NsYXNzQXR0cmlidXRlKToKKyAgICAgICAgICAgICAgICBuYW1lcy5hcHBlbmQoaykKICAgICByZXN1bHQgPSBbXQorICAgIHByb2Nlc3NlZCA9IHNldCgpCisKICAgICBmb3IgbmFtZSBpbiBuYW1lczoKICAgICAgICAgIyBHZXQgdGhlIG9iamVjdCBhc3NvY2lhdGVkIHdpdGggdGhlIG5hbWUsIGFuZCB3aGVyZSBpdCB3YXMgZGVmaW5lZC4KKyAgICAgICAgIyBOb3JtYWwgb2JqZWN0cyB3aWxsIGJlIGxvb2tlZCB1cCB3aXRoIGJvdGggZ2V0YXR0ciBhbmQgZGlyZWN0bHkgaW4KKyAgICAgICAgIyBpdHMgY2xhc3MnIGRpY3QgKGluIGNhc2UgZ2V0YXR0ciBmYWlscyBbYnVnICMxNzg1XSwgYW5kIGFsc28gdG8gbG9vaworICAgICAgICAjIGZvciBhIGRvY3N0cmluZykuCisgICAgICAgICMgRm9yIER5bmFtaWNDbGFzc0F0dHJpYnV0ZXMgb24gdGhlIHNlY29uZCBwYXNzIHdlIG9ubHkgbG9vayBpbiB0aGUKKyAgICAgICAgIyBjbGFzcydzIGRpY3QuCisgICAgICAgICMKICAgICAgICAgIyBHZXR0aW5nIGFuIG9iaiBmcm9tIHRoZSBfX2RpY3RfXyBzb21ldGltZXMgcmV2ZWFscyBtb3JlIHRoYW4KICAgICAgICAgIyB1c2luZyBnZXRhdHRyLiAgU3RhdGljIGFuZCBjbGFzcyBtZXRob2RzIGFyZSBkcmFtYXRpYyBleGFtcGxlcy4KLSAgICAgICAgIyBGdXJ0aGVybW9yZSwgc29tZSBvYmplY3RzIG1heSByYWlzZSBhbiBFeGNlcHRpb24gd2hlbiBmZXRjaGVkIHdpdGgKLSAgICAgICAgIyBnZXRhdHRyKCkuIFRoaXMgaXMgdGhlIGNhc2Ugd2l0aCBzb21lIGRlc2NyaXB0b3JzIChidWcgIzE3ODUpLgotICAgICAgICAjIFRodXMsIHdlIG9ubHkgdXNlIGdldGF0dHIoKSBhcyBhIGxhc3QgcmVzb3J0LgogICAgICAgICBob21lY2xzID0gTm9uZQotICAgICAgICBmb3IgYmFzZSBpbiAoY2xzLCkgKyBtcm86Ci0gICAgICAgICAgICBpZiBuYW1lIGluIGJhc2UuX19kaWN0X186Ci0gICAgICAgICAgICAgICAgb2JqID0gYmFzZS5fX2RpY3RfX1tuYW1lXQotICAgICAgICAgICAgICAgIGhvbWVjbHMgPSBiYXNlCi0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIG9iaiA9IGdldGF0dHIoY2xzLCBuYW1lKQotICAgICAgICAgICAgaG9tZWNscyA9IGdldGF0dHIob2JqLCAiX19vYmpjbGFzc19fIiwgaG9tZWNscykKLQotICAgICAgICAjIENsYXNzaWZ5IHRoZSBvYmplY3QuCi0gICAgICAgIGlmIGlzaW5zdGFuY2Uob2JqLCBzdGF0aWNtZXRob2QpOgotICAgICAgICAgICAga2luZCA9ICJzdGF0aWMgbWV0aG9kIgotICAgICAgICBlbGlmIGlzaW5zdGFuY2Uob2JqLCBjbGFzc21ldGhvZCk6Ci0gICAgICAgICAgICBraW5kID0gImNsYXNzIG1ldGhvZCIKLSAgICAgICAgZWxpZiBpc2luc3RhbmNlKG9iaiwgcHJvcGVydHkpOgotICAgICAgICAgICAga2luZCA9ICJwcm9wZXJ0eSIKLSAgICAgICAgZWxpZiBpc21ldGhvZGRlc2NyaXB0b3Iob2JqKToKLSAgICAgICAgICAgIGtpbmQgPSAibWV0aG9kIgotICAgICAgICBlbGlmIGlzZGF0YWRlc2NyaXB0b3Iob2JqKToKLSAgICAgICAgICAgIGtpbmQgPSAiZGF0YSIKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIG9ial92aWFfZ2V0YXR0ciA9IGdldGF0dHIoY2xzLCBuYW1lKQotICAgICAgICAgICAgaWYgKGlzZnVuY3Rpb24ob2JqX3ZpYV9nZXRhdHRyKSBvcgotICAgICAgICAgICAgICAgIGlzbWV0aG9kZGVzY3JpcHRvcihvYmpfdmlhX2dldGF0dHIpKToKLSAgICAgICAgICAgICAgICBraW5kID0gIm1ldGhvZCIKKyAgICAgICAgZ2V0X29iaiA9IE5vbmUKKyAgICAgICAgZGljdF9vYmogPSBOb25lCisgICAgICAgIGlmIG5hbWUgbm90IGluIHByb2Nlc3NlZDoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpZiBuYW1lID09ICdfX2RpY3RfXyc6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiX19kaWN0X18gaXMgc3BlY2lhbCwgZG9uJ3Qgd2FudCB0aGUgcHJveHkiKQorICAgICAgICAgICAgICAgIGdldF9vYmogPSBnZXRhdHRyKGNscywgbmFtZSkKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAga2luZCA9ICJkYXRhIgotICAgICAgICAgICAgb2JqID0gb2JqX3ZpYV9nZXRhdHRyCi0KKyAgICAgICAgICAgICAgICBob21lY2xzID0gZ2V0YXR0cihnZXRfb2JqLCAiX19vYmpjbGFzc19fIiwgaG9tZWNscykKKyAgICAgICAgICAgICAgICBpZiBob21lY2xzIG5vdCBpbiBjbGFzc19iYXNlczoKKyAgICAgICAgICAgICAgICAgICAgIyBpZiB0aGUgcmVzdWx0aW5nIG9iamVjdCBkb2VzIG5vdCBsaXZlIHNvbWV3aGVyZSBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgIyBtcm8sIGRyb3AgaXQgYW5kIHNlYXJjaCB0aGUgbXJvIG1hbnVhbGx5CisgICAgICAgICAgICAgICAgICAgIGhvbWVjbHMgPSBOb25lCisgICAgICAgICAgICAgICAgICAgIGxhc3RfY2xzID0gTm9uZQorICAgICAgICAgICAgICAgICAgICAjIGZpcnN0IGxvb2sgaW4gdGhlIGNsYXNzZXMKKyAgICAgICAgICAgICAgICAgICAgZm9yIHNyY2hfY2xzIGluIGNsYXNzX2Jhc2VzOgorICAgICAgICAgICAgICAgICAgICAgICAgc3JjaF9vYmogPSBnZXRhdHRyKHNyY2hfY2xzLCBuYW1lLCBOb25lKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgc3JjaF9vYmogaXMgZ2V0X29iajoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0X2NscyA9IHNyY2hfY2xzCisgICAgICAgICAgICAgICAgICAgICMgdGhlbiBjaGVjayB0aGUgbWV0YWNsYXNzZXMKKyAgICAgICAgICAgICAgICAgICAgZm9yIHNyY2hfY2xzIGluIG1ldGFtcm86CisgICAgICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjaF9vYmogPSBzcmNoX2Nscy5fX2dldGF0dHJfXyhjbHMsIG5hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNyY2hfb2JqIGlzIGdldF9vYmo6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdF9jbHMgPSBzcmNoX2NscworICAgICAgICAgICAgICAgICAgICBpZiBsYXN0X2NscyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGhvbWVjbHMgPSBsYXN0X2NscworICAgICAgICBmb3IgYmFzZSBpbiBhbGxfYmFzZXM6CisgICAgICAgICAgICBpZiBuYW1lIGluIGJhc2UuX19kaWN0X186CisgICAgICAgICAgICAgICAgZGljdF9vYmogPSBiYXNlLl9fZGljdF9fW25hbWVdCisgICAgICAgICAgICAgICAgaWYgaG9tZWNscyBub3QgaW4gbWV0YW1ybzoKKyAgICAgICAgICAgICAgICAgICAgaG9tZWNscyA9IGJhc2UKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBpZiBob21lY2xzIGlzIE5vbmU6CisgICAgICAgICAgICAjIHVuYWJsZSB0byBsb2NhdGUgdGhlIGF0dHJpYnV0ZSBhbnl3aGVyZSwgbW9zdCBsaWtlbHkgZHVlIHRvCisgICAgICAgICAgICAjIGJ1Z2d5IGN1c3RvbSBfX2Rpcl9fOyBkaXNjYXJkIGFuZCBtb3ZlIG9uCisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBvYmogPSBnZXRfb2JqIGlmIGdldF9vYmogaXMgbm90IE5vbmUgZWxzZSBkaWN0X29iagorICAgICAgICAjIENsYXNzaWZ5IHRoZSBvYmplY3Qgb3IgaXRzIGRlc2NyaXB0b3IuCisgICAgICAgIGlmIGlzaW5zdGFuY2UoZGljdF9vYmosIHN0YXRpY21ldGhvZCk6CisgICAgICAgICAgICBraW5kID0gInN0YXRpYyBtZXRob2QiCisgICAgICAgICAgICBvYmogPSBkaWN0X29iagorICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZGljdF9vYmosIGNsYXNzbWV0aG9kKToKKyAgICAgICAgICAgIGtpbmQgPSAiY2xhc3MgbWV0aG9kIgorICAgICAgICAgICAgb2JqID0gZGljdF9vYmoKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKGRpY3Rfb2JqLCBwcm9wZXJ0eSk6CisgICAgICAgICAgICBraW5kID0gInByb3BlcnR5IgorICAgICAgICAgICAgb2JqID0gZGljdF9vYmoKKyAgICAgICAgZWxpZiBpc3JvdXRpbmUob2JqKToKKyAgICAgICAgICAgIGtpbmQgPSAibWV0aG9kIgorICAgICAgICBlbHNlOgorICAgICAgICAgICAga2luZCA9ICJkYXRhIgogICAgICAgICByZXN1bHQuYXBwZW5kKEF0dHJpYnV0ZShuYW1lLCBraW5kLCBob21lY2xzLCBvYmopKQotCisgICAgICAgIHByb2Nlc3NlZC5hZGQobmFtZSkKICAgICByZXR1cm4gcmVzdWx0CiAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gY2xhc3MgaGVscGVycwpAQCAtMzYxLDYgKzQyNyw0MCBAQAogICAgICJSZXR1cm4gdHVwbGUgb2YgYmFzZSBjbGFzc2VzIChpbmNsdWRpbmcgY2xzKSBpbiBtZXRob2QgcmVzb2x1dGlvbiBvcmRlci4iCiAgICAgcmV0dXJuIGNscy5fX21yb19fCiAKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gZnVuY3Rpb24gaGVscGVycworCitkZWYgdW53cmFwKGZ1bmMsICosIHN0b3A9Tm9uZSk6CisgICAgIiIiR2V0IHRoZSBvYmplY3Qgd3JhcHBlZCBieSAqZnVuYyouCisKKyAgIEZvbGxvd3MgdGhlIGNoYWluIG9mIDphdHRyOmBfX3dyYXBwZWRfX2AgYXR0cmlidXRlcyByZXR1cm5pbmcgdGhlIGxhc3QKKyAgIG9iamVjdCBpbiB0aGUgY2hhaW4uCisKKyAgICpzdG9wKiBpcyBhbiBvcHRpb25hbCBjYWxsYmFjayBhY2NlcHRpbmcgYW4gb2JqZWN0IGluIHRoZSB3cmFwcGVyIGNoYWluCisgICBhcyBpdHMgc29sZSBhcmd1bWVudCB0aGF0IGFsbG93cyB0aGUgdW53cmFwcGluZyB0byBiZSB0ZXJtaW5hdGVkIGVhcmx5IGlmCisgICB0aGUgY2FsbGJhY2sgcmV0dXJucyBhIHRydWUgdmFsdWUuIElmIHRoZSBjYWxsYmFjayBuZXZlciByZXR1cm5zIGEgdHJ1ZQorICAgdmFsdWUsIHRoZSBsYXN0IG9iamVjdCBpbiB0aGUgY2hhaW4gaXMgcmV0dXJuZWQgYXMgdXN1YWwuIEZvciBleGFtcGxlLAorICAgOmZ1bmM6YHNpZ25hdHVyZWAgdXNlcyB0aGlzIHRvIHN0b3AgdW53cmFwcGluZyBpZiBhbnkgb2JqZWN0IGluIHRoZQorICAgY2hhaW4gaGFzIGEgYGBfX3NpZ25hdHVyZV9fYGAgYXR0cmlidXRlIGRlZmluZWQuCisKKyAgIDpleGM6YFZhbHVlRXJyb3JgIGlzIHJhaXNlZCBpZiBhIGN5Y2xlIGlzIGVuY291bnRlcmVkLgorCisgICAgIiIiCisgICAgaWYgc3RvcCBpcyBOb25lOgorICAgICAgICBkZWYgX2lzX3dyYXBwZXIoZik6CisgICAgICAgICAgICByZXR1cm4gaGFzYXR0cihmLCAnX193cmFwcGVkX18nKQorICAgIGVsc2U6CisgICAgICAgIGRlZiBfaXNfd3JhcHBlcihmKToKKyAgICAgICAgICAgIHJldHVybiBoYXNhdHRyKGYsICdfX3dyYXBwZWRfXycpIGFuZCBub3Qgc3RvcChmKQorICAgIGYgPSBmdW5jICAjIHJlbWVtYmVyIHRoZSBvcmlnaW5hbCBmdW5jIGZvciBlcnJvciByZXBvcnRpbmcKKyAgICBtZW1vID0ge2lkKGYpfSAjIE1lbW9pc2UgYnkgaWQgdG8gdG9sZXJhdGUgbm9uLWhhc2hhYmxlIG9iamVjdHMKKyAgICB3aGlsZSBfaXNfd3JhcHBlcihmdW5jKToKKyAgICAgICAgZnVuYyA9IGZ1bmMuX193cmFwcGVkX18KKyAgICAgICAgaWRfZnVuYyA9IGlkKGZ1bmMpCisgICAgICAgIGlmIGlkX2Z1bmMgaW4gbWVtbzoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3dyYXBwZXIgbG9vcCB3aGVuIHVud3JhcHBpbmcgeyFyfScuZm9ybWF0KGYpKQorICAgICAgICBtZW1vLmFkZChpZF9mdW5jKQorICAgIHJldHVybiBmdW5jCisKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gc291cmNlIGNvZGUgZXh0cmFjdGlvbgogZGVmIGluZGVudHNpemUobGluZSk6CiAgICAgIiIiUmV0dXJuIHRoZSBpbmRlbnQgc2l6ZSwgaW4gc3BhY2VzLCBhdCB0aGUgc3RhcnQgb2YgYSBsaW5lIG9mIHRleHQuIiIiCkBAIC00MTcsOSArNTE3LDEwIEBACiAgICAgICAgICAgICByZXR1cm4gb2JqZWN0Ll9fZmlsZV9fCiAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigneyFyfSBpcyBhIGJ1aWx0LWluIG1vZHVsZScuZm9ybWF0KG9iamVjdCkpCiAgICAgaWYgaXNjbGFzcyhvYmplY3QpOgotICAgICAgICBvYmplY3QgPSBzeXMubW9kdWxlcy5nZXQob2JqZWN0Ll9fbW9kdWxlX18pCi0gICAgICAgIGlmIGhhc2F0dHIob2JqZWN0LCAnX19maWxlX18nKToKLSAgICAgICAgICAgIHJldHVybiBvYmplY3QuX19maWxlX18KKyAgICAgICAgaWYgaGFzYXR0cihvYmplY3QsICdfX21vZHVsZV9fJyk6CisgICAgICAgICAgICBvYmplY3QgPSBzeXMubW9kdWxlcy5nZXQob2JqZWN0Ll9fbW9kdWxlX18pCisgICAgICAgICAgICBpZiBoYXNhdHRyKG9iamVjdCwgJ19fZmlsZV9fJyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdC5fX2ZpbGVfXwogICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ3shcn0gaXMgYSBidWlsdC1pbiBjbGFzcycuZm9ybWF0KG9iamVjdCkpCiAgICAgaWYgaXNtZXRob2Qob2JqZWN0KToKICAgICAgICAgb2JqZWN0ID0gb2JqZWN0Ll9fZnVuY19fCkBAIC00NDAsNiArNTQxLDkgQEAKICAgICAiIiJHZXQgdGhlIG1vZHVsZSBuYW1lLCBzdWZmaXgsIG1vZGUsIGFuZCBtb2R1bGUgdHlwZSBmb3IgYSBnaXZlbiBmaWxlLiIiIgogICAgIHdhcm5pbmdzLndhcm4oJ2luc3BlY3QuZ2V0bW9kdWxlaW5mbygpIGlzIGRlcHJlY2F0ZWQnLCBEZXByZWNhdGlvbldhcm5pbmcsCiAgICAgICAgICAgICAgICAgICAyKQorICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdpZ25vcmUnLCBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICBpbXBvcnQgaW1wCiAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKHBhdGgpCiAgICAgc3VmZml4ZXMgPSBbKC1sZW4oc3VmZml4KSwgc3VmZml4LCBtb2RlLCBtdHlwZSkKICAgICAgICAgICAgICAgICAgICAgZm9yIHN1ZmZpeCwgbW9kZSwgbXR5cGUgaW4gaW1wLmdldF9zdWZmaXhlcygpXQpAQCAtNDc2LDcgKzU4MCw3IEBACiAgICAgaWYgb3MucGF0aC5leGlzdHMoZmlsZW5hbWUpOgogICAgICAgICByZXR1cm4gZmlsZW5hbWUKICAgICAjIG9ubHkgcmV0dXJuIGEgbm9uLWV4aXN0ZW50IGZpbGVuYW1lIGlmIHRoZSBtb2R1bGUgaGFzIGEgUEVQIDMwMiBsb2FkZXIKLSAgICBpZiBoYXNhdHRyKGdldG1vZHVsZShvYmplY3QsIGZpbGVuYW1lKSwgJ19fbG9hZGVyX18nKToKKyAgICBpZiBnZXRhdHRyKGdldG1vZHVsZShvYmplY3QsIGZpbGVuYW1lKSwgJ19fbG9hZGVyX18nLCBOb25lKSBpcyBub3QgTm9uZToKICAgICAgICAgcmV0dXJuIGZpbGVuYW1lCiAgICAgIyBvciBpdCBpcyBpbiB0aGUgbGluZWNhY2hlCiAgICAgaWYgZmlsZW5hbWUgaW4gbGluZWNhY2hlLmNhY2hlOgpAQCAtNTQ1LDE0ICs2NDksMjAgQEAKIAogICAgIFRoZSBhcmd1bWVudCBtYXkgYmUgYSBtb2R1bGUsIGNsYXNzLCBtZXRob2QsIGZ1bmN0aW9uLCB0cmFjZWJhY2ssIGZyYW1lLAogICAgIG9yIGNvZGUgb2JqZWN0LiAgVGhlIHNvdXJjZSBjb2RlIGlzIHJldHVybmVkIGFzIGEgbGlzdCBvZiBhbGwgdGhlIGxpbmVzCi0gICAgaW4gdGhlIGZpbGUgYW5kIHRoZSBsaW5lIG51bWJlciBpbmRleGVzIGEgbGluZSBpbiB0aGF0IGxpc3QuICBBbiBJT0Vycm9yCisgICAgaW4gdGhlIGZpbGUgYW5kIHRoZSBsaW5lIG51bWJlciBpbmRleGVzIGEgbGluZSBpbiB0aGF0IGxpc3QuICBBbiBPU0Vycm9yCiAgICAgaXMgcmFpc2VkIGlmIHRoZSBzb3VyY2UgY29kZSBjYW5ub3QgYmUgcmV0cmlldmVkLiIiIgogCi0gICAgZmlsZSA9IGdldGZpbGUob2JqZWN0KQotICAgIHNvdXJjZWZpbGUgPSBnZXRzb3VyY2VmaWxlKG9iamVjdCkKLSAgICBpZiBub3Qgc291cmNlZmlsZSBhbmQgZmlsZVs6MV0gKyBmaWxlWy0xOl0gIT0gJzw+JzoKLSAgICAgICAgcmFpc2UgSU9FcnJvcignc291cmNlIGNvZGUgbm90IGF2YWlsYWJsZScpCi0gICAgZmlsZSA9IHNvdXJjZWZpbGUgaWYgc291cmNlZmlsZSBlbHNlIGZpbGUKKyAgICBmaWxlID0gZ2V0c291cmNlZmlsZShvYmplY3QpCisgICAgaWYgZmlsZToKKyAgICAgICAgIyBJbnZhbGlkYXRlIGNhY2hlIGlmIG5lZWRlZC4KKyAgICAgICAgbGluZWNhY2hlLmNoZWNrY2FjaGUoZmlsZSkKKyAgICBlbHNlOgorICAgICAgICBmaWxlID0gZ2V0ZmlsZShvYmplY3QpCisgICAgICAgICMgQWxsb3cgZmlsZW5hbWVzIGluIGZvcm0gb2YgIjxzb21ldGhpbmc+IiB0byBwYXNzIHRocm91Z2guCisgICAgICAgICMgYGRvY3Rlc3RgIG1vbmtleXBhdGNoZXMgYGxpbmVjYWNoZWAgbW9kdWxlIHRvIGVuYWJsZQorICAgICAgICAjIGluc3BlY3Rpb24sIHNvIGxldCBgbGluZWNhY2hlLmdldGxpbmVzYCB0byBiZSBjYWxsZWQuCisgICAgICAgIGlmIG5vdCAoZmlsZS5zdGFydHN3aXRoKCc8JykgYW5kIGZpbGUuZW5kc3dpdGgoJz4nKSk6CisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCdzb3VyY2UgY29kZSBub3QgYXZhaWxhYmxlJykKIAogICAgIG1vZHVsZSA9IGdldG1vZHVsZShvYmplY3QsIGZpbGUpCiAgICAgaWYgbW9kdWxlOgpAQCAtNTYwLDcgKzY3MCw3IEBACiAgICAgZWxzZToKICAgICAgICAgbGluZXMgPSBsaW5lY2FjaGUuZ2V0bGluZXMoZmlsZSkKICAgICBpZiBub3QgbGluZXM6Ci0gICAgICAgIHJhaXNlIElPRXJyb3IoJ2NvdWxkIG5vdCBnZXQgc291cmNlIGNvZGUnKQorICAgICAgICByYWlzZSBPU0Vycm9yKCdjb3VsZCBub3QgZ2V0IHNvdXJjZSBjb2RlJykKIAogICAgIGlmIGlzbW9kdWxlKG9iamVjdCk6CiAgICAgICAgIHJldHVybiBsaW5lcywgMApAQCAtNTg2LDcgKzY5Niw3IEBACiAgICAgICAgICAgICBjYW5kaWRhdGVzLnNvcnQoKQogICAgICAgICAgICAgcmV0dXJuIGxpbmVzLCBjYW5kaWRhdGVzWzBdWzFdCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCdjb3VsZCBub3QgZmluZCBjbGFzcyBkZWZpbml0aW9uJykKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoJ2NvdWxkIG5vdCBmaW5kIGNsYXNzIGRlZmluaXRpb24nKQogCiAgICAgaWYgaXNtZXRob2Qob2JqZWN0KToKICAgICAgICAgb2JqZWN0ID0gb2JqZWN0Ll9fZnVuY19fCkBAIC01OTgsMTQgKzcwOCwxNCBAQAogICAgICAgICBvYmplY3QgPSBvYmplY3QuZl9jb2RlCiAgICAgaWYgaXNjb2RlKG9iamVjdCk6CiAgICAgICAgIGlmIG5vdCBoYXNhdHRyKG9iamVjdCwgJ2NvX2ZpcnN0bGluZW5vJyk6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCdjb3VsZCBub3QgZmluZCBmdW5jdGlvbiBkZWZpbml0aW9uJykKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoJ2NvdWxkIG5vdCBmaW5kIGZ1bmN0aW9uIGRlZmluaXRpb24nKQogICAgICAgICBsbnVtID0gb2JqZWN0LmNvX2ZpcnN0bGluZW5vIC0gMQogICAgICAgICBwYXQgPSByZS5jb21waWxlKHInXihccypkZWZccyl8KC4qKD88IVx3KWxhbWJkYSg6fFxzKSl8XihccypAKScpCiAgICAgICAgIHdoaWxlIGxudW0gPiAwOgogICAgICAgICAgICAgaWYgcGF0Lm1hdGNoKGxpbmVzW2xudW1dKTogYnJlYWsKICAgICAgICAgICAgIGxudW0gPSBsbnVtIC0gMQogICAgICAgICByZXR1cm4gbGluZXMsIGxudW0KLSAgICByYWlzZSBJT0Vycm9yKCdjb3VsZCBub3QgZmluZCBjb2RlIG9iamVjdCcpCisgICAgcmFpc2UgT1NFcnJvcignY291bGQgbm90IGZpbmQgY29kZSBvYmplY3QnKQogCiBkZWYgZ2V0Y29tbWVudHMob2JqZWN0KToKICAgICAiIiJHZXQgbGluZXMgb2YgY29tbWVudHMgaW1tZWRpYXRlbHkgcHJlY2VkaW5nIGFuIG9iamVjdCdzIHNvdXJjZSBjb2RlLgpAQCAtNjE0LDcgKzcyNCw3IEBACiAgICAgIiIiCiAgICAgdHJ5OgogICAgICAgICBsaW5lcywgbG51bSA9IGZpbmRzb3VyY2Uob2JqZWN0KQotICAgIGV4Y2VwdCAoSU9FcnJvciwgVHlwZUVycm9yKToKKyAgICBleGNlcHQgKE9TRXJyb3IsIFR5cGVFcnJvcik6CiAgICAgICAgIHJldHVybiBOb25lCiAKICAgICBpZiBpc21vZHVsZShvYmplY3QpOgpAQCAtNzEwLDcgKzgyMCw3IEBACiAgICAgVGhlIGFyZ3VtZW50IG1heSBiZSBhIG1vZHVsZSwgY2xhc3MsIG1ldGhvZCwgZnVuY3Rpb24sIHRyYWNlYmFjaywgZnJhbWUsCiAgICAgb3IgY29kZSBvYmplY3QuICBUaGUgc291cmNlIGNvZGUgaXMgcmV0dXJuZWQgYXMgYSBsaXN0IG9mIHRoZSBsaW5lcwogICAgIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG9iamVjdCBhbmQgdGhlIGxpbmUgbnVtYmVyIGluZGljYXRlcyB3aGVyZSBpbiB0aGUKLSAgICBvcmlnaW5hbCBzb3VyY2UgZmlsZSB0aGUgZmlyc3QgbGluZSBvZiBjb2RlIHdhcyBmb3VuZC4gIEFuIElPRXJyb3IgaXMKKyAgICBvcmlnaW5hbCBzb3VyY2UgZmlsZSB0aGUgZmlyc3QgbGluZSBvZiBjb2RlIHdhcyBmb3VuZC4gIEFuIE9TRXJyb3IgaXMKICAgICByYWlzZWQgaWYgdGhlIHNvdXJjZSBjb2RlIGNhbm5vdCBiZSByZXRyaWV2ZWQuIiIiCiAgICAgbGluZXMsIGxudW0gPSBmaW5kc291cmNlKG9iamVjdCkKIApAQCAtNzIyLDcgKzgzMiw3IEBACiAKICAgICBUaGUgYXJndW1lbnQgbWF5IGJlIGEgbW9kdWxlLCBjbGFzcywgbWV0aG9kLCBmdW5jdGlvbiwgdHJhY2ViYWNrLCBmcmFtZSwKICAgICBvciBjb2RlIG9iamVjdC4gIFRoZSBzb3VyY2UgY29kZSBpcyByZXR1cm5lZCBhcyBhIHNpbmdsZSBzdHJpbmcuICBBbgotICAgIElPRXJyb3IgaXMgcmFpc2VkIGlmIHRoZSBzb3VyY2UgY29kZSBjYW5ub3QgYmUgcmV0cmlldmVkLiIiIgorICAgIE9TRXJyb3IgaXMgcmFpc2VkIGlmIHRoZSBzb3VyY2UgY29kZSBjYW5ub3QgYmUgcmV0cmlldmVkLiIiIgogICAgIGxpbmVzLCBsbnVtID0gZ2V0c291cmNlbGluZXMob2JqZWN0KQogICAgIHJldHVybiAnJy5qb2luKGxpbmVzKQogCkBAIC04MzEsNyArOTQxLDcgQEAKICAgICAnYXJncywgdmFyYXJncywgdmFya3csIGRlZmF1bHRzLCBrd29ubHlhcmdzLCBrd29ubHlkZWZhdWx0cywgYW5ub3RhdGlvbnMnKQogCiBkZWYgZ2V0ZnVsbGFyZ3NwZWMoZnVuYyk6Ci0gICAgIiIiR2V0IHRoZSBuYW1lcyBhbmQgZGVmYXVsdCB2YWx1ZXMgb2YgYSBmdW5jdGlvbidzIGFyZ3VtZW50cy4KKyAgICAiIiJHZXQgdGhlIG5hbWVzIGFuZCBkZWZhdWx0IHZhbHVlcyBvZiBhIGNhbGxhYmxlIG9iamVjdCdzIGFyZ3VtZW50cy4KIAogICAgIEEgdHVwbGUgb2Ygc2V2ZW4gdGhpbmdzIGlzIHJldHVybmVkOgogICAgIChhcmdzLCB2YXJhcmdzLCB2YXJrdywgZGVmYXVsdHMsIGt3b25seWFyZ3MsIGt3b25seWRlZmF1bHRzIGFubm90YXRpb25zKS4KQEAgLTg0NSwxMyArOTU1LDc4IEBACiAgICAgVGhlIGZpcnN0IGZvdXIgaXRlbXMgaW4gdGhlIHR1cGxlIGNvcnJlc3BvbmQgdG8gZ2V0YXJnc3BlYygpLgogICAgICIiIgogCi0gICAgaWYgaXNtZXRob2QoZnVuYyk6Ci0gICAgICAgIGZ1bmMgPSBmdW5jLl9fZnVuY19fCi0gICAgaWYgbm90IGlzZnVuY3Rpb24oZnVuYyk6Ci0gICAgICAgIHJhaXNlIFR5cGVFcnJvcigneyFyfSBpcyBub3QgYSBQeXRob24gZnVuY3Rpb24nLmZvcm1hdChmdW5jKSkKLSAgICBhcmdzLCB2YXJhcmdzLCBrd29ubHlhcmdzLCB2YXJrdyA9IF9nZXRmdWxsYXJncyhmdW5jLl9fY29kZV9fKQotICAgIHJldHVybiBGdWxsQXJnU3BlYyhhcmdzLCB2YXJhcmdzLCB2YXJrdywgZnVuYy5fX2RlZmF1bHRzX18sCi0gICAgICAgICAgICBrd29ubHlhcmdzLCBmdW5jLl9fa3dkZWZhdWx0c19fLCBmdW5jLl9fYW5ub3RhdGlvbnNfXykKKyAgICB0cnk6CisgICAgICAgICMgUmU6IGBza2lwX2JvdW5kX2FyZz1GYWxzZWAKKyAgICAgICAgIworICAgICAgICAjIFRoZXJlIGlzIGEgbm90YWJsZSBkaWZmZXJlbmNlIGluIGJlaGF2aW91ciBiZXR3ZWVuIGdldGZ1bGxhcmdzcGVjCisgICAgICAgICMgYW5kIFNpZ25hdHVyZTogdGhlIGZvcm1lciBhbHdheXMgcmV0dXJucyAnc2VsZicgcGFyYW1ldGVyIGZvciBib3VuZAorICAgICAgICAjIG1ldGhvZHMsIHdoZXJlYXMgdGhlIFNpZ25hdHVyZSBhbHdheXMgc2hvd3MgdGhlIGFjdHVhbCBjYWxsaW5nCisgICAgICAgICMgc2lnbmF0dXJlIG9mIHRoZSBwYXNzZWQgb2JqZWN0LgorICAgICAgICAjCisgICAgICAgICMgVG8gc2ltdWxhdGUgdGhpcyBiZWhhdmlvdXIsIHdlICJ1bmJpbmQiIGJvdW5kIG1ldGhvZHMsIHRvIHRyaWNrCisgICAgICAgICMgaW5zcGVjdC5zaWduYXR1cmUgdG8gYWx3YXlzIHJldHVybiB0aGVpciBmaXJzdCBwYXJhbWV0ZXIgKCJzZWxmIiwKKyAgICAgICAgIyB1c3VhbGx5KQorCisgICAgICAgICMgUmU6IGBmb2xsb3dfd3JhcHBlcl9jaGFpbnM9RmFsc2VgCisgICAgICAgICMKKyAgICAgICAgIyBnZXRmdWxsYXJnc3BlYygpIGhpc3RvcmljYWxseSBpZ25vcmVkIF9fd3JhcHBlZF9fIGF0dHJpYnV0ZXMsCisgICAgICAgICMgc28gd2UgZW5zdXJlIHRoYXQgcmVtYWlucyB0aGUgY2FzZSBpbiAzLjMrCisKKyAgICAgICAgc2lnID0gX3NpZ25hdHVyZV9pbnRlcm5hbChmdW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbGxvd193cmFwcGVyX2NoYWlucz1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza2lwX2JvdW5kX2FyZz1GYWxzZSkKKyAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4OgorICAgICAgICAjIE1vc3Qgb2YgdGhlIHRpbWVzICdzaWduYXR1cmUnIHdpbGwgcmFpc2UgVmFsdWVFcnJvci4KKyAgICAgICAgIyBCdXQsIGl0IGNhbiBhbHNvIHJhaXNlIEF0dHJpYnV0ZUVycm9yLCBhbmQsIG1heWJlIHNvbWV0aGluZworICAgICAgICAjIGVsc2UuIFNvIHRvIGJlIGZ1bGx5IGJhY2t3YXJkcyBjb21wYXRpYmxlLCB3ZSBjYXRjaCBhbGwKKyAgICAgICAgIyBwb3NzaWJsZSBleGNlcHRpb25zIGhlcmUsIGFuZCByZXJhaXNlIGEgVHlwZUVycm9yLgorICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ3Vuc3VwcG9ydGVkIGNhbGxhYmxlJykgZnJvbSBleAorCisgICAgYXJncyA9IFtdCisgICAgdmFyYXJncyA9IE5vbmUKKyAgICB2YXJrdyA9IE5vbmUKKyAgICBrd29ubHlhcmdzID0gW10KKyAgICBkZWZhdWx0cyA9ICgpCisgICAgYW5ub3RhdGlvbnMgPSB7fQorICAgIGRlZmF1bHRzID0gKCkKKyAgICBrd2RlZmF1bHRzID0ge30KKworICAgIGlmIHNpZy5yZXR1cm5fYW5ub3RhdGlvbiBpcyBub3Qgc2lnLmVtcHR5OgorICAgICAgICBhbm5vdGF0aW9uc1sncmV0dXJuJ10gPSBzaWcucmV0dXJuX2Fubm90YXRpb24KKworICAgIGZvciBwYXJhbSBpbiBzaWcucGFyYW1ldGVycy52YWx1ZXMoKToKKyAgICAgICAga2luZCA9IHBhcmFtLmtpbmQKKyAgICAgICAgbmFtZSA9IHBhcmFtLm5hbWUKKworICAgICAgICBpZiBraW5kIGlzIF9QT1NJVElPTkFMX09OTFk6CisgICAgICAgICAgICBhcmdzLmFwcGVuZChuYW1lKQorICAgICAgICBlbGlmIGtpbmQgaXMgX1BPU0lUSU9OQUxfT1JfS0VZV09SRDoKKyAgICAgICAgICAgIGFyZ3MuYXBwZW5kKG5hbWUpCisgICAgICAgICAgICBpZiBwYXJhbS5kZWZhdWx0IGlzIG5vdCBwYXJhbS5lbXB0eToKKyAgICAgICAgICAgICAgICBkZWZhdWx0cyArPSAocGFyYW0uZGVmYXVsdCwpCisgICAgICAgIGVsaWYga2luZCBpcyBfVkFSX1BPU0lUSU9OQUw6CisgICAgICAgICAgICB2YXJhcmdzID0gbmFtZQorICAgICAgICBlbGlmIGtpbmQgaXMgX0tFWVdPUkRfT05MWToKKyAgICAgICAgICAgIGt3b25seWFyZ3MuYXBwZW5kKG5hbWUpCisgICAgICAgICAgICBpZiBwYXJhbS5kZWZhdWx0IGlzIG5vdCBwYXJhbS5lbXB0eToKKyAgICAgICAgICAgICAgICBrd2RlZmF1bHRzW25hbWVdID0gcGFyYW0uZGVmYXVsdAorICAgICAgICBlbGlmIGtpbmQgaXMgX1ZBUl9LRVlXT1JEOgorICAgICAgICAgICAgdmFya3cgPSBuYW1lCisKKyAgICAgICAgaWYgcGFyYW0uYW5ub3RhdGlvbiBpcyBub3QgcGFyYW0uZW1wdHk6CisgICAgICAgICAgICBhbm5vdGF0aW9uc1tuYW1lXSA9IHBhcmFtLmFubm90YXRpb24KKworICAgIGlmIG5vdCBrd2RlZmF1bHRzOgorICAgICAgICAjIGNvbXBhdGliaWxpdHkgd2l0aCAnZnVuYy5fX2t3ZGVmYXVsdHNfXycKKyAgICAgICAga3dkZWZhdWx0cyA9IE5vbmUKKworICAgIGlmIG5vdCBkZWZhdWx0czoKKyAgICAgICAgIyBjb21wYXRpYmlsaXR5IHdpdGggJ2Z1bmMuX19kZWZhdWx0c19fJworICAgICAgICBkZWZhdWx0cyA9IE5vbmUKKworICAgIHJldHVybiBGdWxsQXJnU3BlYyhhcmdzLCB2YXJhcmdzLCB2YXJrdywgZGVmYXVsdHMsCisgICAgICAgICAgICAgICAgICAgICAgIGt3b25seWFyZ3MsIGt3ZGVmYXVsdHMsIGFubm90YXRpb25zKQorCiAKIEFyZ0luZm8gPSBuYW1lZHR1cGxlKCdBcmdJbmZvJywgJ2FyZ3MgdmFyYXJncyBrZXl3b3JkcyBsb2NhbHMnKQogCkBAIC05NTYsNyArMTEzMSw3IEBACiAgICAgZWxpZiBtaXNzaW5nID09IDI6CiAgICAgICAgIHMgPSAie30gYW5kIHt9Ii5mb3JtYXQoKm5hbWVzKQogICAgIGVsc2U6Ci0gICAgICAgIHRhaWwgPSAiLCB7fSBhbmQge30iLmZvcm1hdChuYW1lc1stMjpdKQorICAgICAgICB0YWlsID0gIiwge30gYW5kIHt9Ii5mb3JtYXQoKm5hbWVzWy0yOl0pCiAgICAgICAgIGRlbCBuYW1lc1stMjpdCiAgICAgICAgIHMgPSAiLCAiLmpvaW4obmFtZXMpICsgdGFpbAogICAgIHJhaXNlIFR5cGVFcnJvcigiJXMoKSBtaXNzaW5nICVpIHJlcXVpcmVkICVzIGFyZ3VtZW50JXM6ICVzIiAlCkBAIC0xMDM5LDcgKzEyMTQsNyBAQAogICAgIG1pc3NpbmcgPSAwCiAgICAgZm9yIGt3YXJnIGluIGt3b25seWFyZ3M6CiAgICAgICAgIGlmIGt3YXJnIG5vdCBpbiBhcmcydmFsdWU6Ci0gICAgICAgICAgICBpZiBrd2FyZyBpbiBrd29ubHlkZWZhdWx0czoKKyAgICAgICAgICAgIGlmIGt3b25seWRlZmF1bHRzIGFuZCBrd2FyZyBpbiBrd29ubHlkZWZhdWx0czoKICAgICAgICAgICAgICAgICBhcmcydmFsdWVba3dhcmddID0ga3dvbmx5ZGVmYXVsdHNba3dhcmddCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIG1pc3NpbmcgKz0gMQpAQCAtMTEyNSw3ICsxMzAwLDcgQEAKICAgICAgICAgc3RhcnQgPSBsaW5lbm8gLSAxIC0gY29udGV4dC8vMgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBsaW5lcywgbG51bSA9IGZpbmRzb3VyY2UoZnJhbWUpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIGxpbmVzID0gaW5kZXggPSBOb25lCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzdGFydCA9IG1heChzdGFydCwgMSkKQEAgLTEzMTcsMTMgKzE0OTIsMTUgQEAKIAogX1dyYXBwZXJEZXNjcmlwdG9yID0gdHlwZSh0eXBlLl9fY2FsbF9fKQogX01ldGhvZFdyYXBwZXIgPSB0eXBlKGFsbC5fX2NhbGxfXykKK19DbGFzc01ldGhvZFdyYXBwZXIgPSB0eXBlKGludC5fX2RpY3RfX1snZnJvbV9ieXRlcyddKQogCiBfTm9uVXNlckRlZmluZWRDYWxsYWJsZXMgPSAoX1dyYXBwZXJEZXNjcmlwdG9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NZXRob2RXcmFwcGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9DbGFzc01ldGhvZFdyYXBwZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZXMuQnVpbHRpbkZ1bmN0aW9uVHlwZSkKIAogCi1kZWYgX2dldF91c2VyX2RlZmluZWRfbWV0aG9kKGNscywgbWV0aG9kX25hbWUpOgorZGVmIF9zaWduYXR1cmVfZ2V0X3VzZXJfZGVmaW5lZF9tZXRob2QoY2xzLCBtZXRob2RfbmFtZSk6CiAgICAgdHJ5OgogICAgICAgICBtZXRoID0gZ2V0YXR0cihjbHMsIG1ldGhvZF9uYW1lKQogICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKQEAgLTEzMzUsOCArMTUxMiwzODcgQEAKICAgICAgICAgICAgIHJldHVybiBtZXRoCiAKIAotZGVmIHNpZ25hdHVyZShvYmopOgotICAgICcnJ0dldCBhIHNpZ25hdHVyZSBvYmplY3QgZm9yIHRoZSBwYXNzZWQgY2FsbGFibGUuJycnCitkZWYgX3NpZ25hdHVyZV9nZXRfcGFydGlhbCh3cmFwcGVkX3NpZywgcGFydGlhbCwgZXh0cmFfYXJncz0oKSk6CisgICAgIyBJbnRlcm5hbCBoZWxwZXIgdG8gY2FsY3VsYXRlIGhvdyAnd3JhcHBlZF9zaWcnIHNpZ25hdHVyZSB3aWxsCisgICAgIyBsb29rIGxpa2UgYWZ0ZXIgYXBwbHlpbmcgYSAnZnVuY3Rvb2xzLnBhcnRpYWwnIG9iamVjdCAob3IgYWxpa2UpCisgICAgIyBvbiBpdC4KKworICAgIG9sZF9wYXJhbXMgPSB3cmFwcGVkX3NpZy5wYXJhbWV0ZXJzCisgICAgbmV3X3BhcmFtcyA9IE9yZGVyZWREaWN0KG9sZF9wYXJhbXMuaXRlbXMoKSkKKworICAgIHBhcnRpYWxfYXJncyA9IHBhcnRpYWwuYXJncyBvciAoKQorICAgIHBhcnRpYWxfa2V5d29yZHMgPSBwYXJ0aWFsLmtleXdvcmRzIG9yIHt9CisKKyAgICBpZiBleHRyYV9hcmdzOgorICAgICAgICBwYXJ0aWFsX2FyZ3MgPSBleHRyYV9hcmdzICsgcGFydGlhbF9hcmdzCisKKyAgICB0cnk6CisgICAgICAgIGJhID0gd3JhcHBlZF9zaWcuYmluZF9wYXJ0aWFsKCpwYXJ0aWFsX2FyZ3MsICoqcGFydGlhbF9rZXl3b3JkcykKKyAgICBleGNlcHQgVHlwZUVycm9yIGFzIGV4OgorICAgICAgICBtc2cgPSAncGFydGlhbCBvYmplY3QgeyFyfSBoYXMgaW5jb3JyZWN0IGFyZ3VtZW50cycuZm9ybWF0KHBhcnRpYWwpCisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IobXNnKSBmcm9tIGV4CisKKworICAgIHRyYW5zZm9ybV90b19rd29ubHkgPSBGYWxzZQorICAgIGZvciBwYXJhbV9uYW1lLCBwYXJhbSBpbiBvbGRfcGFyYW1zLml0ZW1zKCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGFyZ192YWx1ZSA9IGJhLmFyZ3VtZW50c1twYXJhbV9uYW1lXQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBwYXJhbS5raW5kIGlzIF9QT1NJVElPTkFMX09OTFk6CisgICAgICAgICAgICAgICAgIyBJZiBwb3NpdGlvbmFsLW9ubHkgcGFyYW1ldGVyIGlzIGJvdW5kIGJ5IHBhcnRpYWwsCisgICAgICAgICAgICAgICAgIyBpdCBlZmZlY3RpdmVseSBkaXNhcHBlYXJzIGZyb20gdGhlIHNpZ25hdHVyZQorICAgICAgICAgICAgICAgIG5ld19wYXJhbXMucG9wKHBhcmFtX25hbWUpCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgcGFyYW0ua2luZCBpcyBfUE9TSVRJT05BTF9PUl9LRVlXT1JEOgorICAgICAgICAgICAgICAgIGlmIHBhcmFtX25hbWUgaW4gcGFydGlhbF9rZXl3b3JkczoKKyAgICAgICAgICAgICAgICAgICAgIyBUaGlzIG1lYW5zIHRoYXQgdGhpcyBwYXJhbWV0ZXIsIGFuZCBhbGwgcGFyYW1ldGVycworICAgICAgICAgICAgICAgICAgICAjIGFmdGVyIGl0IHNob3VsZCBiZSBrZXl3b3JkLW9ubHkgKGFuZCB2YXItcG9zaXRpb25hbAorICAgICAgICAgICAgICAgICAgICAjIHNob3VsZCBiZSByZW1vdmVkKS4gSGVyZSdzIHdoeS4gQ29uc2lkZXIgdGhlIGZvbGxvd2luZworICAgICAgICAgICAgICAgICAgICAjIGZ1bmN0aW9uOgorICAgICAgICAgICAgICAgICAgICAjICAgICBmb28oYSwgYiwgKmFyZ3MsIGMpOgorICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgICAgICAjCisgICAgICAgICAgICAgICAgICAgICMgInBhcnRpYWwoZm9vLCBhPSdzcGFtJykiIHdpbGwgaGF2ZSB0aGUgZm9sbG93aW5nCisgICAgICAgICAgICAgICAgICAgICMgc2lnbmF0dXJlOiAiKCosIGE9J3NwYW0nLCBiLCBjKSIuIEJlY2F1c2UgYXR0ZW1wdGluZworICAgICAgICAgICAgICAgICAgICAjIHRvIGNhbGwgdGhhdCBwYXJ0aWFsIHdpdGggIigxMCwgMjApIiBhcmd1bWVudHMgd2lsbAorICAgICAgICAgICAgICAgICAgICAjIHJhaXNlIGEgVHlwZUVycm9yLCBzYXlpbmcgdGhhdCAiYSIgYXJndW1lbnQgcmVjZWl2ZWQKKyAgICAgICAgICAgICAgICAgICAgIyBtdWx0aXBsZSB2YWx1ZXMuCisgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybV90b19rd29ubHkgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgICMgU2V0IHRoZSBuZXcgZGVmYXVsdCB2YWx1ZQorICAgICAgICAgICAgICAgICAgICBuZXdfcGFyYW1zW3BhcmFtX25hbWVdID0gcGFyYW0ucmVwbGFjZShkZWZhdWx0PWFyZ192YWx1ZSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAjIHdhcyBwYXNzZWQgYXMgYSBwb3NpdGlvbmFsIGFyZ3VtZW50CisgICAgICAgICAgICAgICAgICAgIG5ld19wYXJhbXMucG9wKHBhcmFtLm5hbWUpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGlmIHBhcmFtLmtpbmQgaXMgX0tFWVdPUkRfT05MWToKKyAgICAgICAgICAgICAgICAjIFNldCB0aGUgbmV3IGRlZmF1bHQgdmFsdWUKKyAgICAgICAgICAgICAgICBuZXdfcGFyYW1zW3BhcmFtX25hbWVdID0gcGFyYW0ucmVwbGFjZShkZWZhdWx0PWFyZ192YWx1ZSkKKworICAgICAgICBpZiB0cmFuc2Zvcm1fdG9fa3dvbmx5OgorICAgICAgICAgICAgYXNzZXJ0IHBhcmFtLmtpbmQgaXMgbm90IF9QT1NJVElPTkFMX09OTFkKKworICAgICAgICAgICAgaWYgcGFyYW0ua2luZCBpcyBfUE9TSVRJT05BTF9PUl9LRVlXT1JEOgorICAgICAgICAgICAgICAgIG5ld19wYXJhbSA9IG5ld19wYXJhbXNbcGFyYW1fbmFtZV0ucmVwbGFjZShraW5kPV9LRVlXT1JEX09OTFkpCisgICAgICAgICAgICAgICAgbmV3X3BhcmFtc1twYXJhbV9uYW1lXSA9IG5ld19wYXJhbQorICAgICAgICAgICAgICAgIG5ld19wYXJhbXMubW92ZV90b19lbmQocGFyYW1fbmFtZSkKKyAgICAgICAgICAgIGVsaWYgcGFyYW0ua2luZCBpbiAoX0tFWVdPUkRfT05MWSwgX1ZBUl9LRVlXT1JEKToKKyAgICAgICAgICAgICAgICBuZXdfcGFyYW1zLm1vdmVfdG9fZW5kKHBhcmFtX25hbWUpCisgICAgICAgICAgICBlbGlmIHBhcmFtLmtpbmQgaXMgX1ZBUl9QT1NJVElPTkFMOgorICAgICAgICAgICAgICAgIG5ld19wYXJhbXMucG9wKHBhcmFtLm5hbWUpCisKKyAgICByZXR1cm4gd3JhcHBlZF9zaWcucmVwbGFjZShwYXJhbWV0ZXJzPW5ld19wYXJhbXMudmFsdWVzKCkpCisKKworZGVmIF9zaWduYXR1cmVfYm91bmRfbWV0aG9kKHNpZyk6CisgICAgIyBJbnRlcm5hbCBoZWxwZXIgdG8gdHJhbnNmb3JtIHNpZ25hdHVyZXMgZm9yIHVuYm91bmQKKyAgICAjIGZ1bmN0aW9ucyB0byBib3VuZCBtZXRob2RzCisKKyAgICBwYXJhbXMgPSB0dXBsZShzaWcucGFyYW1ldGVycy52YWx1ZXMoKSkKKworICAgIGlmIG5vdCBwYXJhbXMgb3IgcGFyYW1zWzBdLmtpbmQgaW4gKF9WQVJfS0VZV09SRCwgX0tFWVdPUkRfT05MWSk6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ2ludmFsaWQgbWV0aG9kIHNpZ25hdHVyZScpCisKKyAgICBraW5kID0gcGFyYW1zWzBdLmtpbmQKKyAgICBpZiBraW5kIGluIChfUE9TSVRJT05BTF9PUl9LRVlXT1JELCBfUE9TSVRJT05BTF9PTkxZKToKKyAgICAgICAgIyBEcm9wIGZpcnN0IHBhcmFtZXRlcjoKKyAgICAgICAgIyAnKHAxLCBwMlssIC4uLl0pJyAtPiAnKHAyWywgLi4uXSknCisgICAgICAgIHBhcmFtcyA9IHBhcmFtc1sxOl0KKyAgICBlbHNlOgorICAgICAgICBpZiBraW5kIGlzIG5vdCBfVkFSX1BPU0lUSU9OQUw6CisgICAgICAgICAgICAjIFVubGVzcyB3ZSBhZGQgYSBuZXcgcGFyYW1ldGVyIHR5cGUgd2UgbmV2ZXIKKyAgICAgICAgICAgICMgZ2V0IGhlcmUKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ2ludmFsaWQgYXJndW1lbnQgdHlwZScpCisgICAgICAgICMgSXQncyBhIHZhci1wb3NpdGlvbmFsIHBhcmFtZXRlci4KKyAgICAgICAgIyBEbyBub3RoaW5nLiAnKCphcmdzWywgLi4uXSknIC0+ICcoKmFyZ3NbLCAuLi5dKScKKworICAgIHJldHVybiBzaWcucmVwbGFjZShwYXJhbWV0ZXJzPXBhcmFtcykKKworCitkZWYgX3NpZ25hdHVyZV9pc19idWlsdGluKG9iaik6CisgICAgIyBJbnRlcm5hbCBoZWxwZXIgdG8gdGVzdCBpZiBgb2JqYCBpcyBhIGNhbGxhYmxlIHRoYXQgbWlnaHQKKyAgICAjIHN1cHBvcnQgQXJndW1lbnQgQ2xpbmljJ3MgX190ZXh0X3NpZ25hdHVyZV9fIHByb3RvY29sLgorICAgIHJldHVybiAoaXNidWlsdGluKG9iaikgb3IKKyAgICAgICAgICAgIGlzbWV0aG9kZGVzY3JpcHRvcihvYmopIG9yCisgICAgICAgICAgICBpc2luc3RhbmNlKG9iaiwgX05vblVzZXJEZWZpbmVkQ2FsbGFibGVzKSBvcgorICAgICAgICAgICAgIyBDYW4ndCB0ZXN0ICdpc2luc3RhbmNlKHR5cGUpJyBoZXJlLCBhcyBpdCB3b3VsZAorICAgICAgICAgICAgIyBhbHNvIGJlIFRydWUgZm9yIHJlZ3VsYXIgcHl0aG9uIGNsYXNzZXMKKyAgICAgICAgICAgIG9iaiBpbiAodHlwZSwgb2JqZWN0KSkKKworCitkZWYgX3NpZ25hdHVyZV9pc19mdW5jdGlvbmxpa2Uob2JqKToKKyAgICAjIEludGVybmFsIGhlbHBlciB0byB0ZXN0IGlmIGBvYmpgIGlzIGEgZHVjayB0eXBlIG9mIEZ1bmN0aW9uVHlwZS4KKyAgICAjIEEgZ29vZCBleGFtcGxlIG9mIHN1Y2ggb2JqZWN0cyBhcmUgZnVuY3Rpb25zIGNvbXBpbGVkIHdpdGgKKyAgICAjIEN5dGhvbiwgd2hpY2ggaGF2ZSBhbGwgYXR0cmlidXRlcyB0aGF0IGEgcHVyZSBQeXRob24gZnVuY3Rpb24KKyAgICAjIHdvdWxkIGhhdmUsIGJ1dCBoYXZlIHRoZWlyIGNvZGUgc3RhdGljYWxseSBjb21waWxlZC4KKworICAgIGlmIG5vdCBjYWxsYWJsZShvYmopIG9yIGlzY2xhc3Mob2JqKToKKyAgICAgICAgIyBBbGwgZnVuY3Rpb24tbGlrZSBvYmplY3RzIGFyZSBvYnZpb3VzbHkgY2FsbGFibGVzLAorICAgICAgICAjIGFuZCBub3QgY2xhc3Nlcy4KKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBuYW1lID0gZ2V0YXR0cihvYmosICdfX25hbWVfXycsIE5vbmUpCisgICAgY29kZSA9IGdldGF0dHIob2JqLCAnX19jb2RlX18nLCBOb25lKQorICAgIGRlZmF1bHRzID0gZ2V0YXR0cihvYmosICdfX2RlZmF1bHRzX18nLCBfdm9pZCkgIyBJbXBvcnRhbnQgdG8gdXNlIF92b2lkIC4uLgorICAgIGt3ZGVmYXVsdHMgPSBnZXRhdHRyKG9iaiwgJ19fa3dkZWZhdWx0c19fJywgX3ZvaWQpICMgLi4uIGFuZCBub3QgTm9uZSBoZXJlCisgICAgYW5ub3RhdGlvbnMgPSBnZXRhdHRyKG9iaiwgJ19fYW5ub3RhdGlvbnNfXycsIE5vbmUpCisKKyAgICByZXR1cm4gKGlzaW5zdGFuY2UoY29kZSwgdHlwZXMuQ29kZVR5cGUpIGFuZAorICAgICAgICAgICAgaXNpbnN0YW5jZShuYW1lLCBzdHIpIGFuZAorICAgICAgICAgICAgKGRlZmF1bHRzIGlzIE5vbmUgb3IgaXNpbnN0YW5jZShkZWZhdWx0cywgdHVwbGUpKSBhbmQKKyAgICAgICAgICAgIChrd2RlZmF1bHRzIGlzIE5vbmUgb3IgaXNpbnN0YW5jZShrd2RlZmF1bHRzLCBkaWN0KSkgYW5kCisgICAgICAgICAgICBpc2luc3RhbmNlKGFubm90YXRpb25zLCBkaWN0KSkKKworCitkZWYgX3NpZ25hdHVyZV9nZXRfYm91bmRfcGFyYW0oc3BlYyk6CisgICAgIyBJbnRlcm5hbCBoZWxwZXIgdG8gZ2V0IGZpcnN0IHBhcmFtZXRlciBuYW1lIGZyb20gYQorICAgICMgX190ZXh0X3NpZ25hdHVyZV9fIG9mIGEgYnVpbHRpbiBtZXRob2QsIHdoaWNoIHNob3VsZAorICAgICMgYmUgaW4gdGhlIGZvbGxvd2luZyBmb3JtYXQ6ICcoJHBhcmFtMSwgLi4uKScuCisgICAgIyBBc3N1bXB0aW9ucyBhcmUgdGhhdCB0aGUgZmlyc3QgYXJndW1lbnQgd29uJ3QgaGF2ZQorICAgICMgYSBkZWZhdWx0IHZhbHVlIG9yIGFuIGFubm90YXRpb24uCisKKyAgICBhc3NlcnQgc3BlYy5zdGFydHN3aXRoKCcoJCcpCisKKyAgICBwb3MgPSBzcGVjLmZpbmQoJywnKQorICAgIGlmIHBvcyA9PSAtMToKKyAgICAgICAgcG9zID0gc3BlYy5maW5kKCcpJykKKworICAgIGNwb3MgPSBzcGVjLmZpbmQoJzonKQorICAgIGFzc2VydCBjcG9zID09IC0xIG9yIGNwb3MgPiBwb3MKKworICAgIGNwb3MgPSBzcGVjLmZpbmQoJz0nKQorICAgIGFzc2VydCBjcG9zID09IC0xIG9yIGNwb3MgPiBwb3MKKworICAgIHJldHVybiBzcGVjWzI6cG9zXQorCisKK2RlZiBfc2lnbmF0dXJlX3N0cmlwX25vbl9weXRob25fc3ludGF4KHNpZ25hdHVyZSk6CisgICAgIiIiCisgICAgVGFrZXMgYSBzaWduYXR1cmUgaW4gQXJndW1lbnQgQ2xpbmljJ3MgZXh0ZW5kZWQgc2lnbmF0dXJlIGZvcm1hdC4KKyAgICBSZXR1cm5zIGEgdHVwbGUgb2YgdGhyZWUgdGhpbmdzOgorICAgICAgKiB0aGF0IHNpZ25hdHVyZSByZS1yZW5kZXJlZCBpbiBzdGFuZGFyZCBQeXRob24gc3ludGF4LAorICAgICAgKiB0aGUgaW5kZXggb2YgdGhlICJzZWxmIiBwYXJhbWV0ZXIgKGdlbmVyYWxseSAwKSwgb3IgTm9uZSBpZgorICAgICAgICB0aGUgZnVuY3Rpb24gZG9lcyBub3QgaGF2ZSBhICJzZWxmIiBwYXJhbWV0ZXIsIGFuZAorICAgICAgKiB0aGUgaW5kZXggb2YgdGhlIGxhc3QgInBvc2l0aW9uYWwgb25seSIgcGFyYW1ldGVyLAorICAgICAgICBvciBOb25lIGlmIHRoZSBzaWduYXR1cmUgaGFzIG5vIHBvc2l0aW9uYWwtb25seSBwYXJhbWV0ZXJzLgorICAgICIiIgorCisgICAgaWYgbm90IHNpZ25hdHVyZToKKyAgICAgICAgcmV0dXJuIHNpZ25hdHVyZSwgTm9uZSwgTm9uZQorCisgICAgc2VsZl9wYXJhbWV0ZXIgPSBOb25lCisgICAgbGFzdF9wb3NpdGlvbmFsX29ubHkgPSBOb25lCisKKyAgICBsaW5lcyA9IFtsLmVuY29kZSgnYXNjaWknKSBmb3IgbCBpbiBzaWduYXR1cmUuc3BsaXQoJ1xuJyldCisgICAgZ2VuZXJhdG9yID0gaXRlcihsaW5lcykuX19uZXh0X18KKyAgICB0b2tlbl9zdHJlYW0gPSB0b2tlbml6ZS50b2tlbml6ZShnZW5lcmF0b3IpCisKKyAgICBkZWxheWVkX2NvbW1hID0gRmFsc2UKKyAgICBza2lwX25leHRfY29tbWEgPSBGYWxzZQorICAgIHRleHQgPSBbXQorICAgIGFkZCA9IHRleHQuYXBwZW5kCisKKyAgICBjdXJyZW50X3BhcmFtZXRlciA9IDAKKyAgICBPUCA9IHRva2VuLk9QCisgICAgRVJST1JUT0tFTiA9IHRva2VuLkVSUk9SVE9LRU4KKworICAgICMgdG9rZW4gc3RyZWFtIGFsd2F5cyBzdGFydHMgd2l0aCBFTkNPRElORyB0b2tlbiwgc2tpcCBpdAorICAgIHQgPSBuZXh0KHRva2VuX3N0cmVhbSkKKyAgICBhc3NlcnQgdC50eXBlID09IHRva2VuaXplLkVOQ09ESU5HCisKKyAgICBmb3IgdCBpbiB0b2tlbl9zdHJlYW06CisgICAgICAgIHR5cGUsIHN0cmluZyA9IHQudHlwZSwgdC5zdHJpbmcKKworICAgICAgICBpZiB0eXBlID09IE9QOgorICAgICAgICAgICAgaWYgc3RyaW5nID09ICcsJzoKKyAgICAgICAgICAgICAgICBpZiBza2lwX25leHRfY29tbWE6CisgICAgICAgICAgICAgICAgICAgIHNraXBfbmV4dF9jb21tYSA9IEZhbHNlCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IG5vdCBkZWxheWVkX2NvbW1hCisgICAgICAgICAgICAgICAgICAgIGRlbGF5ZWRfY29tbWEgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfcGFyYW1ldGVyICs9IDEKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpZiBzdHJpbmcgPT0gJy8nOgorICAgICAgICAgICAgICAgIGFzc2VydCBub3Qgc2tpcF9uZXh0X2NvbW1hCisgICAgICAgICAgICAgICAgYXNzZXJ0IGxhc3RfcG9zaXRpb25hbF9vbmx5IGlzIE5vbmUKKyAgICAgICAgICAgICAgICBza2lwX25leHRfY29tbWEgPSBUcnVlCisgICAgICAgICAgICAgICAgbGFzdF9wb3NpdGlvbmFsX29ubHkgPSBjdXJyZW50X3BhcmFtZXRlciAtIDEKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIGlmICh0eXBlID09IEVSUk9SVE9LRU4pIGFuZCAoc3RyaW5nID09ICckJyk6CisgICAgICAgICAgICBhc3NlcnQgc2VsZl9wYXJhbWV0ZXIgaXMgTm9uZQorICAgICAgICAgICAgc2VsZl9wYXJhbWV0ZXIgPSBjdXJyZW50X3BhcmFtZXRlcgorICAgICAgICAgICAgY29udGludWUKKworICAgICAgICBpZiBkZWxheWVkX2NvbW1hOgorICAgICAgICAgICAgZGVsYXllZF9jb21tYSA9IEZhbHNlCisgICAgICAgICAgICBpZiBub3QgKCh0eXBlID09IE9QKSBhbmQgKHN0cmluZyA9PSAnKScpKToKKyAgICAgICAgICAgICAgICBhZGQoJywgJykKKyAgICAgICAgYWRkKHN0cmluZykKKyAgICAgICAgaWYgKHN0cmluZyA9PSAnLCcpOgorICAgICAgICAgICAgYWRkKCcgJykKKyAgICBjbGVhbl9zaWduYXR1cmUgPSAnJy5qb2luKHRleHQpCisgICAgcmV0dXJuIGNsZWFuX3NpZ25hdHVyZSwgc2VsZl9wYXJhbWV0ZXIsIGxhc3RfcG9zaXRpb25hbF9vbmx5CisKKworZGVmIF9zaWduYXR1cmVfZnJvbXN0cihjbHMsIG9iaiwgcywgc2tpcF9ib3VuZF9hcmc9VHJ1ZSk6CisgICAgIyBJbnRlcm5hbCBoZWxwZXIgdG8gcGFyc2UgY29udGVudCBvZiAnX190ZXh0X3NpZ25hdHVyZV9fJworICAgICMgYW5kIHJldHVybiBhIFNpZ25hdHVyZSBiYXNlZCBvbiBpdAorICAgIFBhcmFtZXRlciA9IGNscy5fcGFyYW1ldGVyX2NscworCisgICAgY2xlYW5fc2lnbmF0dXJlLCBzZWxmX3BhcmFtZXRlciwgbGFzdF9wb3NpdGlvbmFsX29ubHkgPSBcCisgICAgICAgIF9zaWduYXR1cmVfc3RyaXBfbm9uX3B5dGhvbl9zeW50YXgocykKKworICAgIHByb2dyYW0gPSAiZGVmIGZvbyIgKyBjbGVhbl9zaWduYXR1cmUgKyAiOiBwYXNzIgorCisgICAgdHJ5OgorICAgICAgICBtb2R1bGUgPSBhc3QucGFyc2UocHJvZ3JhbSkKKyAgICBleGNlcHQgU3ludGF4RXJyb3I6CisgICAgICAgIG1vZHVsZSA9IE5vbmUKKworICAgIGlmIG5vdCBpc2luc3RhbmNlKG1vZHVsZSwgYXN0Lk1vZHVsZSk6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInshcn0gYnVpbHRpbiBoYXMgaW52YWxpZCBzaWduYXR1cmUiLmZvcm1hdChvYmopKQorCisgICAgZiA9IG1vZHVsZS5ib2R5WzBdCisKKyAgICBwYXJhbWV0ZXJzID0gW10KKyAgICBlbXB0eSA9IFBhcmFtZXRlci5lbXB0eQorICAgIGludmFsaWQgPSBvYmplY3QoKQorCisgICAgbW9kdWxlID0gTm9uZQorICAgIG1vZHVsZV9kaWN0ID0ge30KKyAgICBtb2R1bGVfbmFtZSA9IGdldGF0dHIob2JqLCAnX19tb2R1bGVfXycsIE5vbmUpCisgICAgaWYgbW9kdWxlX25hbWU6CisgICAgICAgIG1vZHVsZSA9IHN5cy5tb2R1bGVzLmdldChtb2R1bGVfbmFtZSwgTm9uZSkKKyAgICAgICAgaWYgbW9kdWxlOgorICAgICAgICAgICAgbW9kdWxlX2RpY3QgPSBtb2R1bGUuX19kaWN0X18KKyAgICBzeXNfbW9kdWxlX2RpY3QgPSBzeXMubW9kdWxlcworCisgICAgZGVmIHBhcnNlX25hbWUobm9kZSk6CisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKG5vZGUsIGFzdC5hcmcpCisgICAgICAgIGlmIG5vZGUuYW5ub3RhdGlvbiAhPSBOb25lOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiQW5ub3RhdGlvbnMgYXJlIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkIikKKyAgICAgICAgcmV0dXJuIG5vZGUuYXJnCisKKyAgICBkZWYgd3JhcF92YWx1ZShzKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdmFsdWUgPSBldmFsKHMsIG1vZHVsZV9kaWN0KQorICAgICAgICBleGNlcHQgTmFtZUVycm9yOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHZhbHVlID0gZXZhbChzLCBzeXNfbW9kdWxlX2RpY3QpCisgICAgICAgICAgICBleGNlcHQgTmFtZUVycm9yOgorICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigpCisKKyAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgc3RyKToKKyAgICAgICAgICAgIHJldHVybiBhc3QuU3RyKHZhbHVlKQorICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCAoaW50LCBmbG9hdCkpOgorICAgICAgICAgICAgcmV0dXJuIGFzdC5OdW0odmFsdWUpCisgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIGJ5dGVzKToKKyAgICAgICAgICAgIHJldHVybiBhc3QuQnl0ZXModmFsdWUpCisgICAgICAgIGlmIHZhbHVlIGluIChUcnVlLCBGYWxzZSwgTm9uZSk6CisgICAgICAgICAgICByZXR1cm4gYXN0Lk5hbWVDb25zdGFudCh2YWx1ZSkKKyAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCkKKworICAgIGNsYXNzIFJld3JpdGVTeW1ib2xpY3MoYXN0Lk5vZGVUcmFuc2Zvcm1lcik6CisgICAgICAgIGRlZiB2aXNpdF9BdHRyaWJ1dGUoc2VsZiwgbm9kZSk6CisgICAgICAgICAgICBhID0gW10KKyAgICAgICAgICAgIG4gPSBub2RlCisgICAgICAgICAgICB3aGlsZSBpc2luc3RhbmNlKG4sIGFzdC5BdHRyaWJ1dGUpOgorICAgICAgICAgICAgICAgIGEuYXBwZW5kKG4uYXR0cikKKyAgICAgICAgICAgICAgICBuID0gbi52YWx1ZQorICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UobiwgYXN0Lk5hbWUpOgorICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigpCisgICAgICAgICAgICBhLmFwcGVuZChuLmlkKQorICAgICAgICAgICAgdmFsdWUgPSAiLiIuam9pbihyZXZlcnNlZChhKSkKKyAgICAgICAgICAgIHJldHVybiB3cmFwX3ZhbHVlKHZhbHVlKQorCisgICAgICAgIGRlZiB2aXNpdF9OYW1lKHNlbGYsIG5vZGUpOgorICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uobm9kZS5jdHgsIGFzdC5Mb2FkKToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCkKKyAgICAgICAgICAgIHJldHVybiB3cmFwX3ZhbHVlKG5vZGUuaWQpCisKKyAgICBkZWYgcChuYW1lX25vZGUsIGRlZmF1bHRfbm9kZSwgZGVmYXVsdD1lbXB0eSk6CisgICAgICAgIG5hbWUgPSBwYXJzZV9uYW1lKG5hbWVfbm9kZSkKKyAgICAgICAgaWYgbmFtZSBpcyBpbnZhbGlkOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgaWYgZGVmYXVsdF9ub2RlIGFuZCBkZWZhdWx0X25vZGUgaXMgbm90IF9lbXB0eToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBkZWZhdWx0X25vZGUgPSBSZXdyaXRlU3ltYm9saWNzKCkudmlzaXQoZGVmYXVsdF9ub2RlKQorICAgICAgICAgICAgICAgIG8gPSBhc3QubGl0ZXJhbF9ldmFsKGRlZmF1bHRfbm9kZSkKKyAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgIG8gPSBpbnZhbGlkCisgICAgICAgICAgICBpZiBvIGlzIGludmFsaWQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgICAgIGRlZmF1bHQgPSBvIGlmIG8gaXMgbm90IGludmFsaWQgZWxzZSBkZWZhdWx0CisgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFBhcmFtZXRlcihuYW1lLCBraW5kLCBkZWZhdWx0PWRlZmF1bHQsIGFubm90YXRpb249ZW1wdHkpKQorCisgICAgIyBub24ta2V5d29yZC1vbmx5IHBhcmFtZXRlcnMKKyAgICBhcmdzID0gcmV2ZXJzZWQoZi5hcmdzLmFyZ3MpCisgICAgZGVmYXVsdHMgPSByZXZlcnNlZChmLmFyZ3MuZGVmYXVsdHMpCisgICAgaXRlciA9IGl0ZXJ0b29scy56aXBfbG9uZ2VzdChhcmdzLCBkZWZhdWx0cywgZmlsbHZhbHVlPU5vbmUpCisgICAgaWYgbGFzdF9wb3NpdGlvbmFsX29ubHkgaXMgbm90IE5vbmU6CisgICAgICAgIGtpbmQgPSBQYXJhbWV0ZXIuUE9TSVRJT05BTF9PTkxZCisgICAgZWxzZToKKyAgICAgICAga2luZCA9IFBhcmFtZXRlci5QT1NJVElPTkFMX09SX0tFWVdPUkQKKyAgICBmb3IgaSwgKG5hbWUsIGRlZmF1bHQpIGluIGVudW1lcmF0ZShyZXZlcnNlZChsaXN0KGl0ZXIpKSk6CisgICAgICAgIHAobmFtZSwgZGVmYXVsdCkKKyAgICAgICAgaWYgaSA9PSBsYXN0X3Bvc2l0aW9uYWxfb25seToKKyAgICAgICAgICAgIGtpbmQgPSBQYXJhbWV0ZXIuUE9TSVRJT05BTF9PUl9LRVlXT1JECisKKyAgICAjICphcmdzCisgICAgaWYgZi5hcmdzLnZhcmFyZzoKKyAgICAgICAga2luZCA9IFBhcmFtZXRlci5WQVJfUE9TSVRJT05BTAorICAgICAgICBwKGYuYXJncy52YXJhcmcsIGVtcHR5KQorCisgICAgIyBrZXl3b3JkLW9ubHkgYXJndW1lbnRzCisgICAga2luZCA9IFBhcmFtZXRlci5LRVlXT1JEX09OTFkKKyAgICBmb3IgbmFtZSwgZGVmYXVsdCBpbiB6aXAoZi5hcmdzLmt3b25seWFyZ3MsIGYuYXJncy5rd19kZWZhdWx0cyk6CisgICAgICAgIHAobmFtZSwgZGVmYXVsdCkKKworICAgICMgKiprd2FyZ3MKKyAgICBpZiBmLmFyZ3Mua3dhcmc6CisgICAgICAgIGtpbmQgPSBQYXJhbWV0ZXIuVkFSX0tFWVdPUkQKKyAgICAgICAgcChmLmFyZ3Mua3dhcmcsIGVtcHR5KQorCisgICAgaWYgc2VsZl9wYXJhbWV0ZXIgaXMgbm90IE5vbmU6CisgICAgICAgICMgUG9zc2libHkgc3RyaXAgdGhlIGJvdW5kIGFyZ3VtZW50OgorICAgICAgICAjICAgIC0gV2UgKmFsd2F5cyogc3RyaXAgZmlyc3QgYm91bmQgYXJndW1lbnQgaWYKKyAgICAgICAgIyAgICAgIGl0IGlzIGEgbW9kdWxlLgorICAgICAgICAjICAgIC0gV2UgZG9uJ3Qgc3RyaXAgZmlyc3QgYm91bmQgYXJndW1lbnQgaWYKKyAgICAgICAgIyAgICAgIHNraXBfYm91bmRfYXJnIGlzIEZhbHNlLgorICAgICAgICBhc3NlcnQgcGFyYW1ldGVycworICAgICAgICBfc2VsZiA9IGdldGF0dHIob2JqLCAnX19zZWxmX18nLCBOb25lKQorICAgICAgICBzZWxmX2lzYm91bmQgPSBfc2VsZiBpcyBub3QgTm9uZQorICAgICAgICBzZWxmX2lzbW9kdWxlID0gaXNtb2R1bGUoX3NlbGYpCisgICAgICAgIGlmIHNlbGZfaXNib3VuZCBhbmQgKHNlbGZfaXNtb2R1bGUgb3Igc2tpcF9ib3VuZF9hcmcpOgorICAgICAgICAgICAgcGFyYW1ldGVycy5wb3AoMCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgZm9yIGJ1aWx0aW5zLCBzZWxmIHBhcmFtZXRlciBpcyBhbHdheXMgcG9zaXRpb25hbC1vbmx5IQorICAgICAgICAgICAgcCA9IHBhcmFtZXRlcnNbMF0ucmVwbGFjZShraW5kPVBhcmFtZXRlci5QT1NJVElPTkFMX09OTFkpCisgICAgICAgICAgICBwYXJhbWV0ZXJzWzBdID0gcAorCisgICAgcmV0dXJuIGNscyhwYXJhbWV0ZXJzLCByZXR1cm5fYW5ub3RhdGlvbj1jbHMuZW1wdHkpCisKKworZGVmIF9zaWduYXR1cmVfZnJvbV9idWlsdGluKGNscywgZnVuYywgc2tpcF9ib3VuZF9hcmc9VHJ1ZSk6CisgICAgIyBJbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb24gdG8gZ2V0IHNpZ25hdHVyZSBmb3IKKyAgICAjIGJ1aWx0aW4gY2FsbGFibGVzCisgICAgaWYgbm90IF9zaWduYXR1cmVfaXNfYnVpbHRpbihmdW5jKToKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJ7IXJ9IGlzIG5vdCBhIFB5dGhvbiBidWlsdGluICIKKyAgICAgICAgICAgICAgICAgICAgICAgICJmdW5jdGlvbiIuZm9ybWF0KGZ1bmMpKQorCisgICAgcyA9IGdldGF0dHIoZnVuYywgIl9fdGV4dF9zaWduYXR1cmVfXyIsIE5vbmUpCisgICAgaWYgbm90IHM6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIm5vIHNpZ25hdHVyZSBmb3VuZCBmb3IgYnVpbHRpbiB7IXJ9Ii5mb3JtYXQoZnVuYykpCisKKyAgICByZXR1cm4gX3NpZ25hdHVyZV9mcm9tc3RyKGNscywgZnVuYywgcywgc2tpcF9ib3VuZF9hcmcpCisKKworZGVmIF9zaWduYXR1cmVfaW50ZXJuYWwob2JqLCBmb2xsb3dfd3JhcHBlcl9jaGFpbnM9VHJ1ZSwgc2tpcF9ib3VuZF9hcmc9VHJ1ZSk6CiAKICAgICBpZiBub3QgY2FsbGFibGUob2JqKToKICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCd7IXJ9IGlzIG5vdCBhIGNhbGxhYmxlIG9iamVjdCcuZm9ybWF0KG9iaikpCkBAIC0xMzQ0LDggKzE5MDAsMjUgQEAKICAgICBpZiBpc2luc3RhbmNlKG9iaiwgdHlwZXMuTWV0aG9kVHlwZSk6CiAgICAgICAgICMgSW4gdGhpcyBjYXNlIHdlIHNraXAgdGhlIGZpcnN0IHBhcmFtZXRlciBvZiB0aGUgdW5kZXJseWluZwogICAgICAgICAjIGZ1bmN0aW9uICh1c3VhbGx5IGBzZWxmYCBvciBgY2xzYCkuCi0gICAgICAgIHNpZyA9IHNpZ25hdHVyZShvYmouX19mdW5jX18pCi0gICAgICAgIHJldHVybiBzaWcucmVwbGFjZShwYXJhbWV0ZXJzPXR1cGxlKHNpZy5wYXJhbWV0ZXJzLnZhbHVlcygpKVsxOl0pCisgICAgICAgIHNpZyA9IF9zaWduYXR1cmVfaW50ZXJuYWwob2JqLl9fZnVuY19fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbGxvd193cmFwcGVyX2NoYWlucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza2lwX2JvdW5kX2FyZykKKyAgICAgICAgaWYgc2tpcF9ib3VuZF9hcmc6CisgICAgICAgICAgICByZXR1cm4gX3NpZ25hdHVyZV9ib3VuZF9tZXRob2Qoc2lnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHNpZworCisgICAgIyBXYXMgdGhpcyBmdW5jdGlvbiB3cmFwcGVkIGJ5IGEgZGVjb3JhdG9yPworICAgIGlmIGZvbGxvd193cmFwcGVyX2NoYWluczoKKyAgICAgICAgb2JqID0gdW53cmFwKG9iaiwgc3RvcD0obGFtYmRhIGY6IGhhc2F0dHIoZiwgIl9fc2lnbmF0dXJlX18iKSkpCisgICAgICAgIGlmIGlzaW5zdGFuY2Uob2JqLCB0eXBlcy5NZXRob2RUeXBlKToKKyAgICAgICAgICAgICMgSWYgdGhlIHVud3JhcHBlZCBvYmplY3QgaXMgYSAqbWV0aG9kKiwgd2UgbWlnaHQgd2FudCB0bworICAgICAgICAgICAgIyBza2lwIGl0cyBmaXJzdCBwYXJhbWV0ZXIgKHNlbGYpLgorICAgICAgICAgICAgIyBTZWUgdGVzdF9zaWduYXR1cmVfd3JhcHBlZF9ib3VuZF9tZXRob2QgZm9yIGRldGFpbHMuCisgICAgICAgICAgICByZXR1cm4gX3NpZ25hdHVyZV9pbnRlcm5hbCgKKyAgICAgICAgICAgICAgICBvYmosCisgICAgICAgICAgICAgICAgZm9sbG93X3dyYXBwZXJfY2hhaW5zPWZvbGxvd193cmFwcGVyX2NoYWlucywKKyAgICAgICAgICAgICAgICBza2lwX2JvdW5kX2FyZz1za2lwX2JvdW5kX2FyZykKIAogICAgIHRyeToKICAgICAgICAgc2lnID0gb2JqLl9fc2lnbmF0dXJlX18KQEAgLTEzNTMsNjAgKzE5MjYsNDkgQEAKICAgICAgICAgcGFzcwogICAgIGVsc2U6CiAgICAgICAgIGlmIHNpZyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHNpZywgU2lnbmF0dXJlKToKKyAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoCisgICAgICAgICAgICAgICAgICAgICd1bmV4cGVjdGVkIG9iamVjdCB7IXJ9IGluIF9fc2lnbmF0dXJlX18gJworICAgICAgICAgICAgICAgICAgICAnYXR0cmlidXRlJy5mb3JtYXQoc2lnKSkKICAgICAgICAgICAgIHJldHVybiBzaWcKIAogICAgIHRyeToKLSAgICAgICAgIyBXYXMgdGhpcyBmdW5jdGlvbiB3cmFwcGVkIGJ5IGEgZGVjb3JhdG9yPwotICAgICAgICB3cmFwcGVkID0gb2JqLl9fd3JhcHBlZF9fCisgICAgICAgIHBhcnRpYWxtZXRob2QgPSBvYmouX3BhcnRpYWxtZXRob2QKICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CiAgICAgICAgIHBhc3MKICAgICBlbHNlOgotICAgICAgICByZXR1cm4gc2lnbmF0dXJlKHdyYXBwZWQpCisgICAgICAgIGlmIGlzaW5zdGFuY2UocGFydGlhbG1ldGhvZCwgZnVuY3Rvb2xzLnBhcnRpYWxtZXRob2QpOgorICAgICAgICAgICAgIyBVbmJvdW5kIHBhcnRpYWxtZXRob2QgKHNlZSBmdW5jdG9vbHMucGFydGlhbG1ldGhvZCkKKyAgICAgICAgICAgICMgVGhpcyBtZWFucywgdGhhdCB3ZSBuZWVkIHRvIGNhbGN1bGF0ZSB0aGUgc2lnbmF0dXJlCisgICAgICAgICAgICAjIGFzIGlmIGl0J3MgYSByZWd1bGFyIHBhcnRpYWwgb2JqZWN0LCBidXQgdGFraW5nIGludG8KKyAgICAgICAgICAgICMgYWNjb3VudCB0aGF0IHRoZSBmaXJzdCBwb3NpdGlvbmFsIGFyZ3VtZW50CisgICAgICAgICAgICAjICh1c3VhbGx5IGBzZWxmYCwgb3IgYGNsc2ApIHdpbGwgbm90IGJlIHBhc3NlZAorICAgICAgICAgICAgIyBhdXRvbWF0aWNhbGx5IChhcyBmb3IgYm91bmRtZXRob2RzKQogCi0gICAgaWYgaXNpbnN0YW5jZShvYmosIHR5cGVzLkZ1bmN0aW9uVHlwZSk6CisgICAgICAgICAgICB3cmFwcGVkX3NpZyA9IF9zaWduYXR1cmVfaW50ZXJuYWwocGFydGlhbG1ldGhvZC5mdW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbGxvd193cmFwcGVyX2NoYWlucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza2lwX2JvdW5kX2FyZykKKyAgICAgICAgICAgIHNpZyA9IF9zaWduYXR1cmVfZ2V0X3BhcnRpYWwod3JhcHBlZF9zaWcsIHBhcnRpYWxtZXRob2QsIChOb25lLCkpCisKKyAgICAgICAgICAgIGZpcnN0X3dyYXBwZWRfcGFyYW0gPSB0dXBsZSh3cmFwcGVkX3NpZy5wYXJhbWV0ZXJzLnZhbHVlcygpKVswXQorICAgICAgICAgICAgbmV3X3BhcmFtcyA9IChmaXJzdF93cmFwcGVkX3BhcmFtLCkgKyB0dXBsZShzaWcucGFyYW1ldGVycy52YWx1ZXMoKSkKKworICAgICAgICAgICAgcmV0dXJuIHNpZy5yZXBsYWNlKHBhcmFtZXRlcnM9bmV3X3BhcmFtcykKKworICAgIGlmIGlzZnVuY3Rpb24ob2JqKSBvciBfc2lnbmF0dXJlX2lzX2Z1bmN0aW9ubGlrZShvYmopOgorICAgICAgICAjIElmIGl0J3MgYSBwdXJlIFB5dGhvbiBmdW5jdGlvbiwgb3IgYW4gb2JqZWN0IHRoYXQgaXMgZHVjayB0eXBlCisgICAgICAgICMgb2YgYSBQeXRob24gZnVuY3Rpb24gKEN5dGhvbiBmdW5jdGlvbnMsIGZvciBpbnN0YW5jZSksIHRoZW46CiAgICAgICAgIHJldHVybiBTaWduYXR1cmUuZnJvbV9mdW5jdGlvbihvYmopCiAKKyAgICBpZiBfc2lnbmF0dXJlX2lzX2J1aWx0aW4ob2JqKToKKyAgICAgICAgcmV0dXJuIF9zaWduYXR1cmVfZnJvbV9idWlsdGluKFNpZ25hdHVyZSwgb2JqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2tpcF9ib3VuZF9hcmc9c2tpcF9ib3VuZF9hcmcpCisKICAgICBpZiBpc2luc3RhbmNlKG9iaiwgZnVuY3Rvb2xzLnBhcnRpYWwpOgotICAgICAgICBzaWcgPSBzaWduYXR1cmUob2JqLmZ1bmMpCi0KLSAgICAgICAgbmV3X3BhcmFtcyA9IE9yZGVyZWREaWN0KHNpZy5wYXJhbWV0ZXJzLml0ZW1zKCkpCi0KLSAgICAgICAgcGFydGlhbF9hcmdzID0gb2JqLmFyZ3Mgb3IgKCkKLSAgICAgICAgcGFydGlhbF9rZXl3b3JkcyA9IG9iai5rZXl3b3JkcyBvciB7fQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBiYSA9IHNpZy5iaW5kX3BhcnRpYWwoKnBhcnRpYWxfYXJncywgKipwYXJ0aWFsX2tleXdvcmRzKQotICAgICAgICBleGNlcHQgVHlwZUVycm9yIGFzIGV4OgotICAgICAgICAgICAgbXNnID0gJ3BhcnRpYWwgb2JqZWN0IHshcn0gaGFzIGluY29ycmVjdCBhcmd1bWVudHMnLmZvcm1hdChvYmopCi0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKG1zZykgZnJvbSBleAotCi0gICAgICAgIGZvciBhcmdfbmFtZSwgYXJnX3ZhbHVlIGluIGJhLmFyZ3VtZW50cy5pdGVtcygpOgotICAgICAgICAgICAgcGFyYW0gPSBuZXdfcGFyYW1zW2FyZ19uYW1lXQotICAgICAgICAgICAgaWYgYXJnX25hbWUgaW4gcGFydGlhbF9rZXl3b3JkczoKLSAgICAgICAgICAgICAgICAjIFdlIHNldCBhIG5ldyBkZWZhdWx0IHZhbHVlLCBiZWNhdXNlIHRoZSBmb2xsb3dpbmcgY29kZQotICAgICAgICAgICAgICAgICMgaXMgY29ycmVjdDoKLSAgICAgICAgICAgICAgICAjCi0gICAgICAgICAgICAgICAgIyAgID4+PiBkZWYgZm9vKGEpOiBwcmludChhKQotICAgICAgICAgICAgICAgICMgICA+Pj4gcHJpbnQocGFydGlhbChwYXJ0aWFsKGZvbywgYT0xMCksIGE9MjApKCkpCi0gICAgICAgICAgICAgICAgIyAgIDIwCi0gICAgICAgICAgICAgICAgIyAgID4+PiBwcmludChwYXJ0aWFsKHBhcnRpYWwoZm9vLCBhPTEwKSwgYT0yMCkoYT0zMCkpCi0gICAgICAgICAgICAgICAgIyAgIDMwCi0gICAgICAgICAgICAgICAgIwotICAgICAgICAgICAgICAgICMgU28sIHdpdGggJ3BhcnRpYWwnIG9iamVjdHMsIHBhc3NpbmcgYSBrZXl3b3JkIGFyZ3VtZW50IGlzCi0gICAgICAgICAgICAgICAgIyBsaWtlIHNldHRpbmcgYSBuZXcgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIGNvcnJlc3BvbmRpbmcKLSAgICAgICAgICAgICAgICAjIHBhcmFtZXRlcgotICAgICAgICAgICAgICAgICMKLSAgICAgICAgICAgICAgICAjIFdlIGFsc28gbWFyayB0aGlzIHBhcmFtZXRlciB3aXRoICdfcGFydGlhbF9rd2FyZycKLSAgICAgICAgICAgICAgICAjIGZsYWcuICBMYXRlciwgaW4gJ19iaW5kJywgdGhlICdkZWZhdWx0JyB2YWx1ZSBvZiB0aGlzCi0gICAgICAgICAgICAgICAgIyBwYXJhbWV0ZXIgd2lsbCBiZSBhZGRlZCB0byAna3dhcmdzJywgdG8gc2ltdWxhdGUKLSAgICAgICAgICAgICAgICAjIHRoZSAnZnVuY3Rvb2xzLnBhcnRpYWwnIHJlYWwgY2FsbC4KLSAgICAgICAgICAgICAgICBuZXdfcGFyYW1zW2FyZ19uYW1lXSA9IHBhcmFtLnJlcGxhY2UoZGVmYXVsdD1hcmdfdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9wYXJ0aWFsX2t3YXJnPVRydWUpCi0KLSAgICAgICAgICAgIGVsaWYgKHBhcmFtLmtpbmQgbm90IGluIChfVkFSX0tFWVdPUkQsIF9WQVJfUE9TSVRJT05BTCkgYW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90IHBhcmFtLl9wYXJ0aWFsX2t3YXJnKToKLSAgICAgICAgICAgICAgICBuZXdfcGFyYW1zLnBvcChhcmdfbmFtZSkKLQotICAgICAgICByZXR1cm4gc2lnLnJlcGxhY2UocGFyYW1ldGVycz1uZXdfcGFyYW1zLnZhbHVlcygpKQorICAgICAgICB3cmFwcGVkX3NpZyA9IF9zaWduYXR1cmVfaW50ZXJuYWwob2JqLmZ1bmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2xsb3dfd3JhcHBlcl9jaGFpbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza2lwX2JvdW5kX2FyZykKKyAgICAgICAgcmV0dXJuIF9zaWduYXR1cmVfZ2V0X3BhcnRpYWwod3JhcHBlZF9zaWcsIG9iaikKIAogICAgIHNpZyA9IE5vbmUKICAgICBpZiBpc2luc3RhbmNlKG9iaiwgdHlwZSk6CkBAIC0xNDE0LDMyICsxOTc2LDgwIEBACiAKICAgICAgICAgIyBGaXJzdCwgbGV0J3Mgc2VlIGlmIGl0IGhhcyBhbiBvdmVybG9hZGVkIF9fY2FsbF9fIGRlZmluZWQKICAgICAgICAgIyBpbiBpdHMgbWV0YWNsYXNzCi0gICAgICAgIGNhbGwgPSBfZ2V0X3VzZXJfZGVmaW5lZF9tZXRob2QodHlwZShvYmopLCAnX19jYWxsX18nKQorICAgICAgICBjYWxsID0gX3NpZ25hdHVyZV9nZXRfdXNlcl9kZWZpbmVkX21ldGhvZCh0eXBlKG9iaiksICdfX2NhbGxfXycpCiAgICAgICAgIGlmIGNhbGwgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBzaWcgPSBzaWduYXR1cmUoY2FsbCkKKyAgICAgICAgICAgIHNpZyA9IF9zaWduYXR1cmVfaW50ZXJuYWwoY2FsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9sbG93X3dyYXBwZXJfY2hhaW5zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza2lwX2JvdW5kX2FyZykKICAgICAgICAgZWxzZToKICAgICAgICAgICAgICMgTm93IHdlIGNoZWNrIGlmIHRoZSAnb2JqJyBjbGFzcyBoYXMgYSAnX19uZXdfXycgbWV0aG9kCi0gICAgICAgICAgICBuZXcgPSBfZ2V0X3VzZXJfZGVmaW5lZF9tZXRob2Qob2JqLCAnX19uZXdfXycpCisgICAgICAgICAgICBuZXcgPSBfc2lnbmF0dXJlX2dldF91c2VyX2RlZmluZWRfbWV0aG9kKG9iaiwgJ19fbmV3X18nKQogICAgICAgICAgICAgaWYgbmV3IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgIHNpZyA9IHNpZ25hdHVyZShuZXcpCisgICAgICAgICAgICAgICAgc2lnID0gX3NpZ25hdHVyZV9pbnRlcm5hbChuZXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2xsb3dfd3JhcHBlcl9jaGFpbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza2lwX2JvdW5kX2FyZykKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgIyBGaW5hbGx5LCB3ZSBzaG91bGQgaGF2ZSBhdCBsZWFzdCBfX2luaXRfXyBpbXBsZW1lbnRlZAotICAgICAgICAgICAgICAgIGluaXQgPSBfZ2V0X3VzZXJfZGVmaW5lZF9tZXRob2Qob2JqLCAnX19pbml0X18nKQorICAgICAgICAgICAgICAgIGluaXQgPSBfc2lnbmF0dXJlX2dldF91c2VyX2RlZmluZWRfbWV0aG9kKG9iaiwgJ19faW5pdF9fJykKICAgICAgICAgICAgICAgICBpZiBpbml0IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgICAgICBzaWcgPSBzaWduYXR1cmUoaW5pdCkKKyAgICAgICAgICAgICAgICAgICAgc2lnID0gX3NpZ25hdHVyZV9pbnRlcm5hbChpbml0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbGxvd193cmFwcGVyX2NoYWlucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza2lwX2JvdW5kX2FyZykKKworICAgICAgICBpZiBzaWcgaXMgTm9uZToKKyAgICAgICAgICAgICMgQXQgdGhpcyBwb2ludCB3ZSBrbm93LCB0aGF0IGBvYmpgIGlzIGEgY2xhc3MsIHdpdGggbm8gdXNlci0KKyAgICAgICAgICAgICMgZGVmaW5lZCAnX19pbml0X18nLCAnX19uZXdfXycsIG9yIGNsYXNzLWxldmVsICdfX2NhbGxfXycKKworICAgICAgICAgICAgZm9yIGJhc2UgaW4gb2JqLl9fbXJvX19bOi0xXToKKyAgICAgICAgICAgICAgICAjIFNpbmNlICdfX3RleHRfc2lnbmF0dXJlX18nIGlzIGltcGxlbWVudGVkIGFzIGEKKyAgICAgICAgICAgICAgICAjIGRlc2NyaXB0b3IgdGhhdCBleHRyYWN0cyB0ZXh0IHNpZ25hdHVyZSBmcm9tIHRoZQorICAgICAgICAgICAgICAgICMgY2xhc3MgZG9jc3RyaW5nLCBpZiAnb2JqJyBpcyBkZXJpdmVkIGZyb20gYSBidWlsdGluCisgICAgICAgICAgICAgICAgIyBjbGFzcywgaXRzIG93biAnX190ZXh0X3NpZ25hdHVyZV9fJyBtYXkgYmUgJ05vbmUnLgorICAgICAgICAgICAgICAgICMgVGhlcmVmb3JlLCB3ZSBnbyB0aHJvdWdoIHRoZSBNUk8gKGV4Y2VwdCB0aGUgbGFzdAorICAgICAgICAgICAgICAgICMgY2xhc3MgaW4gdGhlcmUsIHdoaWNoIGlzICdvYmplY3QnKSB0byBmaW5kIHRoZSBmaXJzdAorICAgICAgICAgICAgICAgICMgY2xhc3Mgd2l0aCBub24tZW1wdHkgdGV4dCBzaWduYXR1cmUuCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICB0ZXh0X3NpZyA9IGJhc2UuX190ZXh0X3NpZ25hdHVyZV9fCisgICAgICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgaWYgdGV4dF9zaWc6CisgICAgICAgICAgICAgICAgICAgICAgICAjIElmICdvYmonIGNsYXNzIGhhcyBhIF9fdGV4dF9zaWduYXR1cmVfXyBhdHRyaWJ1dGU6CisgICAgICAgICAgICAgICAgICAgICAgICAjIHJldHVybiBhIHNpZ25hdHVyZSBiYXNlZCBvbiBpdAorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9zaWduYXR1cmVfZnJvbXN0cihTaWduYXR1cmUsIG9iaiwgdGV4dF9zaWcpCisKKyAgICAgICAgICAgICMgTm8gJ19fdGV4dF9zaWduYXR1cmVfXycgd2FzIGZvdW5kIGZvciB0aGUgJ29iaicgY2xhc3MuCisgICAgICAgICAgICAjIExhc3Qgb3B0aW9uIGlzIHRvIGNoZWNrIGlmIGl0cyAnX19pbml0X18nIGlzCisgICAgICAgICAgICAjIG9iamVjdC5fX2luaXRfXyBvciB0eXBlLl9faW5pdF9fLgorICAgICAgICAgICAgaWYgdHlwZSBub3QgaW4gb2JqLl9fbXJvX186CisgICAgICAgICAgICAgICAgIyBXZSBoYXZlIGEgY2xhc3MgKG5vdCBtZXRhY2xhc3MpLCBidXQgbm8gdXNlci1kZWZpbmVkCisgICAgICAgICAgICAgICAgIyBfX2luaXRfXyBvciBfX25ld19fIGZvciBpdAorICAgICAgICAgICAgICAgIGlmIG9iai5fX2luaXRfXyBpcyBvYmplY3QuX19pbml0X186CisgICAgICAgICAgICAgICAgICAgICMgUmV0dXJuIGEgc2lnbmF0dXJlIG9mICdvYmplY3QnIGJ1aWx0aW4uCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzaWduYXR1cmUob2JqZWN0KQorCiAgICAgZWxpZiBub3QgaXNpbnN0YW5jZShvYmosIF9Ob25Vc2VyRGVmaW5lZENhbGxhYmxlcyk6CiAgICAgICAgICMgQW4gb2JqZWN0IHdpdGggX19jYWxsX18KICAgICAgICAgIyBXZSBhbHNvIGNoZWNrIHRoYXQgdGhlICdvYmonIGlzIG5vdCBhbiBpbnN0YW5jZSBvZgogICAgICAgICAjIF9XcmFwcGVyRGVzY3JpcHRvciBvciBfTWV0aG9kV3JhcHBlciB0byBhdm9pZAogICAgICAgICAjIGluZmluaXRlIHJlY3Vyc2lvbiAoYW5kIGV2ZW4gcG90ZW50aWFsIHNlZ2ZhdWx0KQotICAgICAgICBjYWxsID0gX2dldF91c2VyX2RlZmluZWRfbWV0aG9kKHR5cGUob2JqKSwgJ19fY2FsbF9fJykKKyAgICAgICAgY2FsbCA9IF9zaWduYXR1cmVfZ2V0X3VzZXJfZGVmaW5lZF9tZXRob2QodHlwZShvYmopLCAnX19jYWxsX18nKQogICAgICAgICBpZiBjYWxsIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgc2lnID0gc2lnbmF0dXJlKGNhbGwpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2lnID0gX3NpZ25hdHVyZV9pbnRlcm5hbChjYWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9sbG93X3dyYXBwZXJfY2hhaW5zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2tpcF9ib3VuZF9hcmcpCisgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBleDoKKyAgICAgICAgICAgICAgICBtc2cgPSAnbm8gc2lnbmF0dXJlIGZvdW5kIGZvciB7IXJ9Jy5mb3JtYXQob2JqKQorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IobXNnKSBmcm9tIGV4CiAKICAgICBpZiBzaWcgaXMgbm90IE5vbmU6CiAgICAgICAgICMgRm9yIGNsYXNzZXMgYW5kIG9iamVjdHMgd2Ugc2tpcCB0aGUgZmlyc3QgcGFyYW1ldGVyIG9mIHRoZWlyCiAgICAgICAgICMgX19jYWxsX18sIF9fbmV3X18sIG9yIF9faW5pdF9fIG1ldGhvZHMKLSAgICAgICAgcmV0dXJuIHNpZy5yZXBsYWNlKHBhcmFtZXRlcnM9dHVwbGUoc2lnLnBhcmFtZXRlcnMudmFsdWVzKCkpWzE6XSkKKyAgICAgICAgaWYgc2tpcF9ib3VuZF9hcmc6CisgICAgICAgICAgICByZXR1cm4gX3NpZ25hdHVyZV9ib3VuZF9tZXRob2Qoc2lnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHNpZwogCiAgICAgaWYgaXNpbnN0YW5jZShvYmosIHR5cGVzLkJ1aWx0aW5GdW5jdGlvblR5cGUpOgogICAgICAgICAjIFJhaXNlIGEgbmljZXIgZXJyb3IgbWVzc2FnZSBmb3IgYnVpbHRpbnMKQEAgLTE0NDgsNiArMjA1OCwxMCBAQAogCiAgICAgcmFpc2UgVmFsdWVFcnJvcignY2FsbGFibGUgeyFyfSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHNpZ25hdHVyZScuZm9ybWF0KG9iaikpCiAKK2RlZiBzaWduYXR1cmUob2JqKToKKyAgICAnJydHZXQgYSBzaWduYXR1cmUgb2JqZWN0IGZvciB0aGUgcGFzc2VkIGNhbGxhYmxlLicnJworICAgIHJldHVybiBfc2lnbmF0dXJlX2ludGVybmFsKG9iaikKKwogCiBjbGFzcyBfdm9pZDoKICAgICAnJydBIHByaXZhdGUgbWFya2VyIC0gdXNlZCBpbiBQYXJhbWV0ZXIgJiBTaWduYXR1cmUnJycKQEAgLTE0ODYsMTAgKzIxMDAsMTIgQEAKICAgICAgICAgVGhlIG5hbWUgb2YgdGhlIHBhcmFtZXRlciBhcyBhIHN0cmluZy4KICAgICAqIGRlZmF1bHQgOiBvYmplY3QKICAgICAgICAgVGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoZSBwYXJhbWV0ZXIgaWYgc3BlY2lmaWVkLiAgSWYgdGhlCi0gICAgICAgIHBhcmFtZXRlciBoYXMgbm8gZGVmYXVsdCB2YWx1ZSwgdGhpcyBhdHRyaWJ1dGUgaXMgbm90IHNldC4KKyAgICAgICAgcGFyYW1ldGVyIGhhcyBubyBkZWZhdWx0IHZhbHVlLCB0aGlzIGF0dHJpYnV0ZSBpcyBzZXQgdG8KKyAgICAgICAgYFBhcmFtZXRlci5lbXB0eWAuCiAgICAgKiBhbm5vdGF0aW9uCiAgICAgICAgIFRoZSBhbm5vdGF0aW9uIGZvciB0aGUgcGFyYW1ldGVyIGlmIHNwZWNpZmllZC4gIElmIHRoZQotICAgICAgICBwYXJhbWV0ZXIgaGFzIG5vIGFubm90YXRpb24sIHRoaXMgYXR0cmlidXRlIGlzIG5vdCBzZXQuCisgICAgICAgIHBhcmFtZXRlciBoYXMgbm8gYW5ub3RhdGlvbiwgdGhpcyBhdHRyaWJ1dGUgaXMgc2V0IHRvCisgICAgICAgIGBQYXJhbWV0ZXIuZW1wdHlgLgogICAgICoga2luZCA6IHN0cgogICAgICAgICBEZXNjcmliZXMgaG93IGFyZ3VtZW50IHZhbHVlcyBhcmUgYm91bmQgdG8gdGhlIHBhcmFtZXRlci4KICAgICAgICAgUG9zc2libGUgdmFsdWVzOiBgUGFyYW1ldGVyLlBPU0lUSU9OQUxfT05MWWAsCkBAIC0xNDk3LDcgKzIxMTMsNyBAQAogICAgICAgICBgUGFyYW1ldGVyLktFWVdPUkRfT05MWWAsIGBQYXJhbWV0ZXIuVkFSX0tFWVdPUkRgLgogICAgICcnJwogCi0gICAgX19zbG90c19fID0gKCdfbmFtZScsICdfa2luZCcsICdfZGVmYXVsdCcsICdfYW5ub3RhdGlvbicsICdfcGFydGlhbF9rd2FyZycpCisgICAgX19zbG90c19fID0gKCdfbmFtZScsICdfa2luZCcsICdfZGVmYXVsdCcsICdfYW5ub3RhdGlvbicpCiAKICAgICBQT1NJVElPTkFMX09OTFkgICAgICAgICA9IF9QT1NJVElPTkFMX09OTFkKICAgICBQT1NJVElPTkFMX09SX0tFWVdPUkQgICA9IF9QT1NJVElPTkFMX09SX0tFWVdPUkQKQEAgLTE1MDcsOCArMjEyMyw3IEBACiAKICAgICBlbXB0eSA9IF9lbXB0eQogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIGtpbmQsICosIGRlZmF1bHQ9X2VtcHR5LCBhbm5vdGF0aW9uPV9lbXB0eSwKLSAgICAgICAgICAgICAgICAgX3BhcnRpYWxfa3dhcmc9RmFsc2UpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBraW5kLCAqLCBkZWZhdWx0PV9lbXB0eSwgYW5ub3RhdGlvbj1fZW1wdHkpOgogCiAgICAgICAgIGlmIGtpbmQgbm90IGluIChfUE9TSVRJT05BTF9PTkxZLCBfUE9TSVRJT05BTF9PUl9LRVlXT1JELAogICAgICAgICAgICAgICAgICAgICAgICAgX1ZBUl9QT1NJVElPTkFMLCBfS0VZV09SRF9PTkxZLCBfVkFSX0tFWVdPUkQpOgpAQCAtMTUyMiwxOSArMjEzNywxNiBAQAogICAgICAgICBzZWxmLl9kZWZhdWx0ID0gZGVmYXVsdAogICAgICAgICBzZWxmLl9hbm5vdGF0aW9uID0gYW5ub3RhdGlvbgogCi0gICAgICAgIGlmIG5hbWUgaXMgTm9uZToKLSAgICAgICAgICAgIGlmIGtpbmQgIT0gX1BPU0lUSU9OQUxfT05MWToKLSAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJOb25lIGlzIG5vdCBhIHZhbGlkIG5hbWUgZm9yIGEgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vbi1wb3NpdGlvbmFsLW9ubHkgcGFyYW1ldGVyIikKLSAgICAgICAgICAgIHNlbGYuX25hbWUgPSBuYW1lCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBuYW1lID0gc3RyKG5hbWUpCi0gICAgICAgICAgICBpZiBraW5kICE9IF9QT1NJVElPTkFMX09OTFkgYW5kIG5vdCBuYW1lLmlzaWRlbnRpZmllcigpOgotICAgICAgICAgICAgICAgIG1zZyA9ICd7IXJ9IGlzIG5vdCBhIHZhbGlkIHBhcmFtZXRlciBuYW1lJy5mb3JtYXQobmFtZSkKLSAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKG1zZykKLSAgICAgICAgICAgIHNlbGYuX25hbWUgPSBuYW1lCisgICAgICAgIGlmIG5hbWUgaXMgX2VtcHR5OgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignbmFtZSBpcyBhIHJlcXVpcmVkIGF0dHJpYnV0ZSBmb3IgUGFyYW1ldGVyJykKIAotICAgICAgICBzZWxmLl9wYXJ0aWFsX2t3YXJnID0gX3BhcnRpYWxfa3dhcmcKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UobmFtZSwgc3RyKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigibmFtZSBtdXN0IGJlIGEgc3RyLCBub3QgYSB7IXJ9Ii5mb3JtYXQobmFtZSkpCisKKyAgICAgICAgaWYgbm90IG5hbWUuaXNpZGVudGlmaWVyKCk6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCd7IXJ9IGlzIG5vdCBhIHZhbGlkIHBhcmFtZXRlciBuYW1lJy5mb3JtYXQobmFtZSkpCisKKyAgICAgICAgc2VsZi5fbmFtZSA9IG5hbWUKIAogICAgIEBwcm9wZXJ0eQogICAgIGRlZiBuYW1lKHNlbGYpOgpAQCAtMTU1Miw4ICsyMTY0LDggQEAKICAgICBkZWYga2luZChzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYuX2tpbmQKIAotICAgIGRlZiByZXBsYWNlKHNlbGYsICosIG5hbWU9X3ZvaWQsIGtpbmQ9X3ZvaWQsIGFubm90YXRpb249X3ZvaWQsCi0gICAgICAgICAgICAgICAgZGVmYXVsdD1fdm9pZCwgX3BhcnRpYWxfa3dhcmc9X3ZvaWQpOgorICAgIGRlZiByZXBsYWNlKHNlbGYsICosIG5hbWU9X3ZvaWQsIGtpbmQ9X3ZvaWQsCisgICAgICAgICAgICAgICAgYW5ub3RhdGlvbj1fdm9pZCwgZGVmYXVsdD1fdm9pZCk6CiAgICAgICAgICcnJ0NyZWF0ZXMgYSBjdXN0b21pemVkIGNvcHkgb2YgdGhlIFBhcmFtZXRlci4nJycKIAogICAgICAgICBpZiBuYW1lIGlzIF92b2lkOgpAQCAtMTU2OCwyMCArMjE4MCwxMSBAQAogICAgICAgICBpZiBkZWZhdWx0IGlzIF92b2lkOgogICAgICAgICAgICAgZGVmYXVsdCA9IHNlbGYuX2RlZmF1bHQKIAotICAgICAgICBpZiBfcGFydGlhbF9rd2FyZyBpcyBfdm9pZDoKLSAgICAgICAgICAgIF9wYXJ0aWFsX2t3YXJnID0gc2VsZi5fcGFydGlhbF9rd2FyZwotCi0gICAgICAgIHJldHVybiB0eXBlKHNlbGYpKG5hbWUsIGtpbmQsIGRlZmF1bHQ9ZGVmYXVsdCwgYW5ub3RhdGlvbj1hbm5vdGF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICBfcGFydGlhbF9rd2FyZz1fcGFydGlhbF9rd2FyZykKKyAgICAgICAgcmV0dXJuIHR5cGUoc2VsZikobmFtZSwga2luZCwgZGVmYXVsdD1kZWZhdWx0LCBhbm5vdGF0aW9uPWFubm90YXRpb24pCiAKICAgICBkZWYgX19zdHJfXyhzZWxmKToKICAgICAgICAga2luZCA9IHNlbGYua2luZAotCiAgICAgICAgIGZvcm1hdHRlZCA9IHNlbGYuX25hbWUKLSAgICAgICAgaWYga2luZCA9PSBfUE9TSVRJT05BTF9PTkxZOgotICAgICAgICAgICAgaWYgZm9ybWF0dGVkIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgZm9ybWF0dGVkID0gJycKLSAgICAgICAgICAgIGZvcm1hdHRlZCA9ICc8e30+Jy5mb3JtYXQoZm9ybWF0dGVkKQogCiAgICAgICAgICMgQWRkIGFubm90YXRpb24gYW5kIGRlZmF1bHQgdmFsdWUKICAgICAgICAgaWYgc2VsZi5fYW5ub3RhdGlvbiBpcyBub3QgX2VtcHR5OgpAQCAtMTYwMywxNSArMjIwNiwxMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkKHNlbGYpLCBzZWxmLm5hbWUpCiAKICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKLSAgICAgICAgcmV0dXJuIChpc3N1YmNsYXNzKG90aGVyLl9fY2xhc3NfXywgUGFyYW1ldGVyKSBhbmQKLSAgICAgICAgICAgICAgICBzZWxmLl9uYW1lID09IG90aGVyLl9uYW1lIGFuZAorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgUGFyYW1ldGVyKToKKyAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgICAgICByZXR1cm4gKHNlbGYuX25hbWUgPT0gb3RoZXIuX25hbWUgYW5kCiAgICAgICAgICAgICAgICAgc2VsZi5fa2luZCA9PSBvdGhlci5fa2luZCBhbmQKICAgICAgICAgICAgICAgICBzZWxmLl9kZWZhdWx0ID09IG90aGVyLl9kZWZhdWx0IGFuZAogICAgICAgICAgICAgICAgIHNlbGYuX2Fubm90YXRpb24gPT0gb3RoZXIuX2Fubm90YXRpb24pCiAKLSAgICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKLSAgICAgICAgcmV0dXJuIG5vdCBzZWxmLl9fZXFfXyhvdGhlcikKLQogCiBjbGFzcyBCb3VuZEFyZ3VtZW50czoKICAgICAnJydSZXN1bHQgb2YgYFNpZ25hdHVyZS5iaW5kYCBjYWxsLiAgSG9sZHMgdGhlIG1hcHBpbmcgb2YgYXJndW1lbnRzCkBAIC0xNjQyLDEyICsyMjQzLDcgQEAKICAgICBkZWYgYXJncyhzZWxmKToKICAgICAgICAgYXJncyA9IFtdCiAgICAgICAgIGZvciBwYXJhbV9uYW1lLCBwYXJhbSBpbiBzZWxmLl9zaWduYXR1cmUucGFyYW1ldGVycy5pdGVtcygpOgotICAgICAgICAgICAgaWYgKHBhcmFtLmtpbmQgaW4gKF9WQVJfS0VZV09SRCwgX0tFWVdPUkRfT05MWSkgb3IKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbS5fcGFydGlhbF9rd2FyZyk6Ci0gICAgICAgICAgICAgICAgIyBLZXl3b3JkIGFyZ3VtZW50cyBtYXBwZWQgYnkgJ2Z1bmN0b29scy5wYXJ0aWFsJwotICAgICAgICAgICAgICAgICMgKFBhcmFtZXRlci5fcGFydGlhbF9rd2FyZyBpcyBUcnVlKSBhcmUgbWFwcGVkCi0gICAgICAgICAgICAgICAgIyBpbiAnQm91bmRBcmd1bWVudHMua3dhcmdzJywgYWxvbmcgd2l0aCBWQVJfS0VZV09SRCAmCi0gICAgICAgICAgICAgICAgIyBLRVlXT1JEX09OTFkKKyAgICAgICAgICAgIGlmIHBhcmFtLmtpbmQgaW4gKF9WQVJfS0VZV09SRCwgX0tFWVdPUkRfT05MWSk6CiAgICAgICAgICAgICAgICAgYnJlYWsKIAogICAgICAgICAgICAgdHJ5OgpAQCAtMTY3Miw4ICsyMjY4LDcgQEAKICAgICAgICAga3dhcmdzX3N0YXJ0ZWQgPSBGYWxzZQogICAgICAgICBmb3IgcGFyYW1fbmFtZSwgcGFyYW0gaW4gc2VsZi5fc2lnbmF0dXJlLnBhcmFtZXRlcnMuaXRlbXMoKToKICAgICAgICAgICAgIGlmIG5vdCBrd2FyZ3Nfc3RhcnRlZDoKLSAgICAgICAgICAgICAgICBpZiAocGFyYW0ua2luZCBpbiAoX1ZBUl9LRVlXT1JELCBfS0VZV09SRF9PTkxZKSBvcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW0uX3BhcnRpYWxfa3dhcmcpOgorICAgICAgICAgICAgICAgIGlmIHBhcmFtLmtpbmQgaW4gKF9WQVJfS0VZV09SRCwgX0tFWVdPUkRfT05MWSk6CiAgICAgICAgICAgICAgICAgICAgIGt3YXJnc19zdGFydGVkID0gVHJ1ZQogICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgIGlmIHBhcmFtX25hbWUgbm90IGluIHNlbGYuYXJndW1lbnRzOgpAQCAtMTY5OCwxMyArMjI5MywxMSBAQAogICAgICAgICByZXR1cm4ga3dhcmdzCiAKICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKLSAgICAgICAgcmV0dXJuIChpc3N1YmNsYXNzKG90aGVyLl9fY2xhc3NfXywgQm91bmRBcmd1bWVudHMpIGFuZAotICAgICAgICAgICAgICAgIHNlbGYuc2lnbmF0dXJlID09IG90aGVyLnNpZ25hdHVyZSBhbmQKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIEJvdW5kQXJndW1lbnRzKToKKyAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgICAgICByZXR1cm4gKHNlbGYuc2lnbmF0dXJlID09IG90aGVyLnNpZ25hdHVyZSBhbmQKICAgICAgICAgICAgICAgICBzZWxmLmFyZ3VtZW50cyA9PSBvdGhlci5hcmd1bWVudHMpCiAKLSAgICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKLSAgICAgICAgcmV0dXJuIG5vdCBzZWxmLl9fZXFfXyhvdGhlcikKLQogCiBjbGFzcyBTaWduYXR1cmU6CiAgICAgJycnQSBTaWduYXR1cmUgb2JqZWN0IHJlcHJlc2VudHMgdGhlIG92ZXJhbGwgc2lnbmF0dXJlIG9mIGEgZnVuY3Rpb24uCkBAIC0xNzIwLDcgKzIzMTMsNyBAQAogICAgICogcmV0dXJuX2Fubm90YXRpb24gOiBvYmplY3QKICAgICAgICAgVGhlIGFubm90YXRpb24gZm9yIHRoZSByZXR1cm4gdHlwZSBvZiB0aGUgZnVuY3Rpb24gaWYgc3BlY2lmaWVkLgogICAgICAgICBJZiB0aGUgZnVuY3Rpb24gaGFzIG5vIGFubm90YXRpb24gZm9yIGl0cyByZXR1cm4gdHlwZSwgdGhpcwotICAgICAgICBhdHRyaWJ1dGUgaXMgbm90IHNldC4KKyAgICAgICAgYXR0cmlidXRlIGlzIHNldCB0byBgU2lnbmF0dXJlLmVtcHR5YC4KICAgICAqIGJpbmQoKmFyZ3MsICoqa3dhcmdzKSAtPiBCb3VuZEFyZ3VtZW50cwogICAgICAgICBDcmVhdGVzIGEgbWFwcGluZyBmcm9tIHBvc2l0aW9uYWwgYW5kIGtleXdvcmQgYXJndW1lbnRzIHRvCiAgICAgICAgIHBhcmFtZXRlcnMuCkBAIC0xNzQ4LDI0ICsyMzQxLDM3IEBACiAgICAgICAgICAgICBpZiBfX3ZhbGlkYXRlX3BhcmFtZXRlcnNfXzoKICAgICAgICAgICAgICAgICBwYXJhbXMgPSBPcmRlcmVkRGljdCgpCiAgICAgICAgICAgICAgICAgdG9wX2tpbmQgPSBfUE9TSVRJT05BTF9PTkxZCisgICAgICAgICAgICAgICAga2luZF9kZWZhdWx0cyA9IEZhbHNlCiAKICAgICAgICAgICAgICAgICBmb3IgaWR4LCBwYXJhbSBpbiBlbnVtZXJhdGUocGFyYW1ldGVycyk6CiAgICAgICAgICAgICAgICAgICAgIGtpbmQgPSBwYXJhbS5raW5kCisgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBwYXJhbS5uYW1lCisKICAgICAgICAgICAgICAgICAgICAgaWYga2luZCA8IHRvcF9raW5kOgotICAgICAgICAgICAgICAgICAgICAgICAgbXNnID0gJ3dyb25nIHBhcmFtZXRlciBvcmRlcjoge30gYmVmb3JlIHt9JwotICAgICAgICAgICAgICAgICAgICAgICAgbXNnID0gbXNnLmZvcm1hdCh0b3Bfa2luZCwgcGFyYW0ua2luZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZyA9ICd3cm9uZyBwYXJhbWV0ZXIgb3JkZXI6IHshcn0gYmVmb3JlIHshcn0nCisgICAgICAgICAgICAgICAgICAgICAgICBtc2cgPSBtc2cuZm9ybWF0KHRvcF9raW5kLCBraW5kKQogICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihtc2cpCi0gICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGVsaWYga2luZCA+IHRvcF9raW5kOgorICAgICAgICAgICAgICAgICAgICAgICAga2luZF9kZWZhdWx0cyA9IEZhbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICB0b3Bfa2luZCA9IGtpbmQKIAotICAgICAgICAgICAgICAgICAgICBuYW1lID0gcGFyYW0ubmFtZQotICAgICAgICAgICAgICAgICAgICBpZiBuYW1lIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gc3RyKGlkeCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtID0gcGFyYW0ucmVwbGFjZShuYW1lPW5hbWUpCisgICAgICAgICAgICAgICAgICAgIGlmIGtpbmQgaW4gKF9QT1NJVElPTkFMX09OTFksIF9QT1NJVElPTkFMX09SX0tFWVdPUkQpOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgcGFyYW0uZGVmYXVsdCBpcyBfZW1wdHk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYga2luZF9kZWZhdWx0czoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBObyBkZWZhdWx0IGZvciB0aGlzIHBhcmFtZXRlciwgYnV0IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHByZXZpb3VzIHBhcmFtZXRlciBvZiB0aGUgc2FtZSBraW5kIGhhZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGEgZGVmYXVsdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2cgPSAnbm9uLWRlZmF1bHQgYXJndW1lbnQgZm9sbG93cyBkZWZhdWx0ICcgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXJndW1lbnQnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IobXNnKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFRoZXJlIGlzIGEgZGVmYXVsdCBmb3IgdGhpcyBwYXJhbWV0ZXIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAga2luZF9kZWZhdWx0cyA9IFRydWUKIAogICAgICAgICAgICAgICAgICAgICBpZiBuYW1lIGluIHBhcmFtczoKICAgICAgICAgICAgICAgICAgICAgICAgIG1zZyA9ICdkdXBsaWNhdGUgcGFyYW1ldGVyIG5hbWU6IHshcn0nLmZvcm1hdChuYW1lKQogICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihtc2cpCisKICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW25hbWVdID0gcGFyYW0KICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcGFyYW1zID0gT3JkZXJlZERpY3QoKChwYXJhbS5uYW1lLCBwYXJhbSkKQEAgLTE3NzgsOCArMjM4NCwxNCBAQAogICAgIGRlZiBmcm9tX2Z1bmN0aW9uKGNscywgZnVuYyk6CiAgICAgICAgICcnJ0NvbnN0cnVjdHMgU2lnbmF0dXJlIGZvciB0aGUgZ2l2ZW4gcHl0aG9uIGZ1bmN0aW9uJycnCiAKLSAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZnVuYywgdHlwZXMuRnVuY3Rpb25UeXBlKToKLSAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigneyFyfSBpcyBub3QgYSBQeXRob24gZnVuY3Rpb24nLmZvcm1hdChmdW5jKSkKKyAgICAgICAgaXNfZHVja19mdW5jdGlvbiA9IEZhbHNlCisgICAgICAgIGlmIG5vdCBpc2Z1bmN0aW9uKGZ1bmMpOgorICAgICAgICAgICAgaWYgX3NpZ25hdHVyZV9pc19mdW5jdGlvbmxpa2UoZnVuYyk6CisgICAgICAgICAgICAgICAgaXNfZHVja19mdW5jdGlvbiA9IFRydWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBJZiBpdCdzIG5vdCBhIHB1cmUgUHl0aG9uIGZ1bmN0aW9uLCBhbmQgbm90IGEgZHVjayB0eXBlCisgICAgICAgICAgICAgICAgIyBvZiBwdXJlIGZ1bmN0aW9uOgorICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigneyFyfSBpcyBub3QgYSBQeXRob24gZnVuY3Rpb24nLmZvcm1hdChmdW5jKSkKIAogICAgICAgICBQYXJhbWV0ZXIgPSBjbHMuX3BhcmFtZXRlcl9jbHMKIApAQCAtMTgxNiw3ICsyNDI4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PWRlZmF1bHRzW29mZnNldF0pKQogCiAgICAgICAgICMgKmFyZ3MKLSAgICAgICAgaWYgZnVuY19jb2RlLmNvX2ZsYWdzICYgMHgwNDoKKyAgICAgICAgaWYgZnVuY19jb2RlLmNvX2ZsYWdzICYgQ09fVkFSQVJHUzoKICAgICAgICAgICAgIG5hbWUgPSBhcmdfbmFtZXNbcG9zX2NvdW50ICsga2V5d29yZF9vbmx5X2NvdW50XQogICAgICAgICAgICAgYW5ub3RhdGlvbiA9IGFubm90YXRpb25zLmdldChuYW1lLCBfZW1wdHkpCiAgICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChQYXJhbWV0ZXIobmFtZSwgYW5ub3RhdGlvbj1hbm5vdGF0aW9uLApAQCAtMTgzMyw5ICsyNDQ1LDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBraW5kPV9LRVlXT1JEX09OTFksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1kZWZhdWx0KSkKICAgICAgICAgIyAqKmt3YXJncwotICAgICAgICBpZiBmdW5jX2NvZGUuY29fZmxhZ3MgJiAweDA4OgorICAgICAgICBpZiBmdW5jX2NvZGUuY29fZmxhZ3MgJiBDT19WQVJLRVlXT1JEUzoKICAgICAgICAgICAgIGluZGV4ID0gcG9zX2NvdW50ICsga2V5d29yZF9vbmx5X2NvdW50Ci0gICAgICAgICAgICBpZiBmdW5jX2NvZGUuY29fZmxhZ3MgJiAweDA0OgorICAgICAgICAgICAgaWYgZnVuY19jb2RlLmNvX2ZsYWdzICYgQ09fVkFSQVJHUzoKICAgICAgICAgICAgICAgICBpbmRleCArPSAxCiAKICAgICAgICAgICAgIG5hbWUgPSBhcmdfbmFtZXNbaW5kZXhdCkBAIC0xODQzLDkgKzI0NTUsMTUgQEAKICAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFBhcmFtZXRlcihuYW1lLCBhbm5vdGF0aW9uPWFubm90YXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2luZD1fVkFSX0tFWVdPUkQpKQogCisgICAgICAgICMgSXMgJ2Z1bmMnIGlzIGEgcHVyZSBQeXRob24gZnVuY3Rpb24gLSBkb24ndCB2YWxpZGF0ZSB0aGUKKyAgICAgICAgIyBwYXJhbWV0ZXJzIGxpc3QgKGZvciBjb3JyZWN0IG9yZGVyIGFuZCBkZWZhdWx0cyksIGl0IHNob3VsZCBiZSBPSy4KICAgICAgICAgcmV0dXJuIGNscyhwYXJhbWV0ZXJzLAogICAgICAgICAgICAgICAgICAgIHJldHVybl9hbm5vdGF0aW9uPWFubm90YXRpb25zLmdldCgncmV0dXJuJywgX2VtcHR5KSwKLSAgICAgICAgICAgICAgICAgICBfX3ZhbGlkYXRlX3BhcmFtZXRlcnNfXz1GYWxzZSkKKyAgICAgICAgICAgICAgICAgICBfX3ZhbGlkYXRlX3BhcmFtZXRlcnNfXz1pc19kdWNrX2Z1bmN0aW9uKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGZyb21fYnVpbHRpbihjbHMsIGZ1bmMpOgorICAgICAgICByZXR1cm4gX3NpZ25hdHVyZV9mcm9tX2J1aWx0aW4oY2xzLCBmdW5jKQogCiAgICAgQHByb3BlcnR5CiAgICAgZGVmIHBhcmFtZXRlcnMoc2VsZik6CkBAIC0xODcxLDkgKzI0ODksMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuX2Fubm90YXRpb249cmV0dXJuX2Fubm90YXRpb24pCiAKICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKLSAgICAgICAgaWYgKG5vdCBpc3N1YmNsYXNzKHR5cGUob3RoZXIpLCBTaWduYXR1cmUpIG9yCi0gICAgICAgICAgICAgICAgICAgIHNlbGYucmV0dXJuX2Fubm90YXRpb24gIT0gb3RoZXIucmV0dXJuX2Fubm90YXRpb24gb3IKLSAgICAgICAgICAgICAgICAgICAgbGVuKHNlbGYucGFyYW1ldGVycykgIT0gbGVuKG90aGVyLnBhcmFtZXRlcnMpKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIFNpZ25hdHVyZSk6CisgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICAgICAgaWYgKHNlbGYucmV0dXJuX2Fubm90YXRpb24gIT0gb3RoZXIucmV0dXJuX2Fubm90YXRpb24gb3IKKyAgICAgICAgICAgIGxlbihzZWxmLnBhcmFtZXRlcnMpICE9IGxlbihvdGhlci5wYXJhbWV0ZXJzKSk6CiAgICAgICAgICAgICByZXR1cm4gRmFsc2UKIAogICAgICAgICBvdGhlcl9wb3NpdGlvbnMgPSB7cGFyYW06IGlkeApAQCAtMTkwMCw5ICsyNTE5LDYgQEAKIAogICAgICAgICByZXR1cm4gVHJ1ZQogCi0gICAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgIHJldHVybiBub3Qgc2VsZi5fX2VxX18ob3RoZXIpCi0KICAgICBkZWYgX2JpbmQoc2VsZiwgYXJncywga3dhcmdzLCAqLCBwYXJ0aWFsPUZhbHNlKToKICAgICAgICAgJycnUHJpdmF0ZSBtZXRob2QuICBEb24ndCB1c2UgZGlyZWN0bHkuJycnCiAKQEAgLTE5MTIsMTUgKzI1MjgsNiBAQAogICAgICAgICBwYXJhbWV0ZXJzX2V4ID0gKCkKICAgICAgICAgYXJnX3ZhbHMgPSBpdGVyKGFyZ3MpCiAKLSAgICAgICAgaWYgcGFydGlhbDoKLSAgICAgICAgICAgICMgU3VwcG9ydCBmb3IgYmluZGluZyBhcmd1bWVudHMgdG8gJ2Z1bmN0b29scy5wYXJ0aWFsJyBvYmplY3RzLgotICAgICAgICAgICAgIyBTZWUgJ2Z1bmN0b29scy5wYXJ0aWFsJyBjYXNlIGluICdzaWduYXR1cmUoKScgaW1wbGVtZW50YXRpb24KLSAgICAgICAgICAgICMgZm9yIGRldGFpbHMuCi0gICAgICAgICAgICBmb3IgcGFyYW1fbmFtZSwgcGFyYW0gaW4gc2VsZi5wYXJhbWV0ZXJzLml0ZW1zKCk6Ci0gICAgICAgICAgICAgICAgaWYgKHBhcmFtLl9wYXJ0aWFsX2t3YXJnIGFuZCBwYXJhbV9uYW1lIG5vdCBpbiBrd2FyZ3MpOgotICAgICAgICAgICAgICAgICAgICAjIFNpbXVsYXRpbmcgJ2Z1bmN0b29scy5wYXJ0aWFsJyBiZWhhdmlvcgotICAgICAgICAgICAgICAgICAgICBrd2FyZ3NbcGFyYW1fbmFtZV0gPSBwYXJhbS5kZWZhdWx0Ci0KICAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgICMgTGV0J3MgaXRlcmF0ZSB0aHJvdWdoIHRoZSBwb3NpdGlvbmFsIGFyZ3VtZW50cyBhbmQgY29ycmVzcG9uZGluZwogICAgICAgICAgICAgIyBwYXJhbWV0ZXJzCkBAIC0xOTU1LDYgKzI1NjIsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyc19leCA9IChwYXJhbSwpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBObyBkZWZhdWx0LCBub3QgVkFSX0tFWVdPUkQsIG5vdCBWQVJfUE9TSVRJT05BTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICMgbm90IGluIGBrd2FyZ3NgCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiBwYXJ0aWFsOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcnNfZXggPSAocGFyYW0sKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCkBAIC0xOTkzLDE5ICsyNjAyLDE3IEBACiAgICAgICAgICMga2V5d29yZCBhcmd1bWVudHMKICAgICAgICAga3dhcmdzX3BhcmFtID0gTm9uZQogICAgICAgICBmb3IgcGFyYW0gaW4gaXRlcnRvb2xzLmNoYWluKHBhcmFtZXRlcnNfZXgsIHBhcmFtZXRlcnMpOgotICAgICAgICAgICAgaWYgcGFyYW0ua2luZCA9PSBfUE9TSVRJT05BTF9PTkxZOgotICAgICAgICAgICAgICAgICMgVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuIGluIGNhc2Ugb2YgYSBwcm9wZXJseSBidWlsdAotICAgICAgICAgICAgICAgICMgU2lnbmF0dXJlIG9iamVjdCAoYnV0IGxldCdzIGhhdmUgdGhpcyBjaGVjayBoZXJlCi0gICAgICAgICAgICAgICAgIyB0byBlbnN1cmUgY29ycmVjdCBiZWhhdmlvdXIganVzdCBpbiBjYXNlKQotICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigne2FyZyFyfSBwYXJhbWV0ZXIgaXMgcG9zaXRpb25hbCBvbmx5LCAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdidXQgd2FzIHBhc3NlZCBhcyBhIGtleXdvcmQnLiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdChhcmc9cGFyYW0ubmFtZSkpCi0KICAgICAgICAgICAgIGlmIHBhcmFtLmtpbmQgPT0gX1ZBUl9LRVlXT1JEOgogICAgICAgICAgICAgICAgICMgTWVtb3JpemUgdGhhdCB3ZSBoYXZlIGEgJyoqa3dhcmdzJy1saWtlIHBhcmFtZXRlcgogICAgICAgICAgICAgICAgIGt3YXJnc19wYXJhbSA9IHBhcmFtCiAgICAgICAgICAgICAgICAgY29udGludWUKIAorICAgICAgICAgICAgaWYgcGFyYW0ua2luZCA9PSBfVkFSX1BPU0lUSU9OQUw6CisgICAgICAgICAgICAgICAgIyBOYW1lZCBhcmd1bWVudHMgZG9uJ3QgcmVmZXIgdG8gJyphcmdzJy1saWtlIHBhcmFtZXRlcnMuCisgICAgICAgICAgICAgICAgIyBXZSBvbmx5IGFycml2ZSBoZXJlIGlmIHRoZSBwb3NpdGlvbmFsIGFyZ3VtZW50cyBlbmRlZAorICAgICAgICAgICAgICAgICMgYmVmb3JlIHJlYWNoaW5nIHRoZSBsYXN0IHBhcmFtZXRlciBiZWZvcmUgKmFyZ3MuCisgICAgICAgICAgICAgICAgY29udGludWUKKwogICAgICAgICAgICAgcGFyYW1fbmFtZSA9IHBhcmFtLm5hbWUKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBhcmdfdmFsID0ga3dhcmdzLnBvcChwYXJhbV9uYW1lKQpAQCAtMjAyMCw2ICsyNjI3LDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQoYXJnPXBhcmFtX25hbWUpKSBmcm9tIE5vbmUKIAogICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBwYXJhbS5raW5kID09IF9QT1NJVElPTkFMX09OTFk6CisgICAgICAgICAgICAgICAgICAgICMgVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuIGluIGNhc2Ugb2YgYSBwcm9wZXJseSBidWlsdAorICAgICAgICAgICAgICAgICAgICAjIFNpZ25hdHVyZSBvYmplY3QgKGJ1dCBsZXQncyBoYXZlIHRoaXMgY2hlY2sgaGVyZQorICAgICAgICAgICAgICAgICAgICAjIHRvIGVuc3VyZSBjb3JyZWN0IGJlaGF2aW91ciBqdXN0IGluIGNhc2UpCisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigne2FyZyFyfSBwYXJhbWV0ZXIgaXMgcG9zaXRpb25hbCBvbmx5LCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYnV0IHdhcyBwYXNzZWQgYXMgYSBrZXl3b3JkJy4gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0KGFyZz1wYXJhbS5uYW1lKSkKKwogICAgICAgICAgICAgICAgIGFyZ3VtZW50c1twYXJhbV9uYW1lXSA9IGFyZ192YWwKIAogICAgICAgICBpZiBrd2FyZ3M6CkBAIC0yMDMxLDI3ICsyNjQ2LDM3IEBACiAKICAgICAgICAgcmV0dXJuIHNlbGYuX2JvdW5kX2FyZ3VtZW50c19jbHMoc2VsZiwgYXJndW1lbnRzKQogCi0gICAgZGVmIGJpbmQoX19iaW5kX3NlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgZGVmIGJpbmQoKmFyZ3MsICoqa3dhcmdzKToKICAgICAgICAgJycnR2V0IGEgQm91bmRBcmd1bWVudHMgb2JqZWN0LCB0aGF0IG1hcHMgdGhlIHBhc3NlZCBgYXJnc2AKICAgICAgICAgYW5kIGBrd2FyZ3NgIHRvIHRoZSBmdW5jdGlvbidzIHNpZ25hdHVyZS4gIFJhaXNlcyBgVHlwZUVycm9yYAogICAgICAgICBpZiB0aGUgcGFzc2VkIGFyZ3VtZW50cyBjYW4gbm90IGJlIGJvdW5kLgogICAgICAgICAnJycKLSAgICAgICAgcmV0dXJuIF9fYmluZF9zZWxmLl9iaW5kKGFyZ3MsIGt3YXJncykKKyAgICAgICAgcmV0dXJuIGFyZ3NbMF0uX2JpbmQoYXJnc1sxOl0sIGt3YXJncykKIAotICAgIGRlZiBiaW5kX3BhcnRpYWwoX19iaW5kX3NlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgZGVmIGJpbmRfcGFydGlhbCgqYXJncywgKiprd2FyZ3MpOgogICAgICAgICAnJydHZXQgYSBCb3VuZEFyZ3VtZW50cyBvYmplY3QsIHRoYXQgcGFydGlhbGx5IG1hcHMgdGhlCiAgICAgICAgIHBhc3NlZCBgYXJnc2AgYW5kIGBrd2FyZ3NgIHRvIHRoZSBmdW5jdGlvbidzIHNpZ25hdHVyZS4KICAgICAgICAgUmFpc2VzIGBUeXBlRXJyb3JgIGlmIHRoZSBwYXNzZWQgYXJndW1lbnRzIGNhbiBub3QgYmUgYm91bmQuCiAgICAgICAgICcnJwotICAgICAgICByZXR1cm4gX19iaW5kX3NlbGYuX2JpbmQoYXJncywga3dhcmdzLCBwYXJ0aWFsPVRydWUpCisgICAgICAgIHJldHVybiBhcmdzWzBdLl9iaW5kKGFyZ3NbMTpdLCBrd2FyZ3MsIHBhcnRpYWw9VHJ1ZSkKIAogICAgIGRlZiBfX3N0cl9fKHNlbGYpOgogICAgICAgICByZXN1bHQgPSBbXQorICAgICAgICByZW5kZXJfcG9zX29ubHlfc2VwYXJhdG9yID0gRmFsc2UKICAgICAgICAgcmVuZGVyX2t3X29ubHlfc2VwYXJhdG9yID0gVHJ1ZQotICAgICAgICBmb3IgaWR4LCBwYXJhbSBpbiBlbnVtZXJhdGUoc2VsZi5wYXJhbWV0ZXJzLnZhbHVlcygpKToKKyAgICAgICAgZm9yIHBhcmFtIGluIHNlbGYucGFyYW1ldGVycy52YWx1ZXMoKToKICAgICAgICAgICAgIGZvcm1hdHRlZCA9IHN0cihwYXJhbSkKIAogICAgICAgICAgICAga2luZCA9IHBhcmFtLmtpbmQKKworICAgICAgICAgICAgaWYga2luZCA9PSBfUE9TSVRJT05BTF9PTkxZOgorICAgICAgICAgICAgICAgIHJlbmRlcl9wb3Nfb25seV9zZXBhcmF0b3IgPSBUcnVlCisgICAgICAgICAgICBlbGlmIHJlbmRlcl9wb3Nfb25seV9zZXBhcmF0b3I6CisgICAgICAgICAgICAgICAgIyBJdCdzIG5vdCBhIHBvc2l0aW9uYWwtb25seSBwYXJhbWV0ZXIsIGFuZCB0aGUgZmxhZworICAgICAgICAgICAgICAgICMgaXMgc2V0IHRvICdUcnVlJyAodGhlcmUgd2VyZSBwb3Mtb25seSBwYXJhbXMgYmVmb3JlLikKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcvJykKKyAgICAgICAgICAgICAgICByZW5kZXJfcG9zX29ubHlfc2VwYXJhdG9yID0gRmFsc2UKKwogICAgICAgICAgICAgaWYga2luZCA9PSBfVkFSX1BPU0lUSU9OQUw6CiAgICAgICAgICAgICAgICAgIyBPSywgd2UgaGF2ZSBhbiAnKmFyZ3MnLWxpa2UgcGFyYW1ldGVyLCBzbyB3ZSB3b24ndCBuZWVkCiAgICAgICAgICAgICAgICAgIyBhICcqJyB0byBzZXBhcmF0ZSBrZXl3b3JkLW9ubHkgYXJndW1lbnRzCkBAIC0yMDY3LDYgKzI2OTIsMTEgQEAKIAogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChmb3JtYXR0ZWQpCiAKKyAgICAgICAgaWYgcmVuZGVyX3Bvc19vbmx5X3NlcGFyYXRvcjoKKyAgICAgICAgICAgICMgVGhlcmUgd2VyZSBvbmx5IHBvc2l0aW9uYWwtb25seSBwYXJhbWV0ZXJzLCBoZW5jZSB0aGUKKyAgICAgICAgICAgICMgZmxhZyB3YXMgbm90IHJlc2V0IHRvICdGYWxzZScKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJy8nKQorCiAgICAgICAgIHJlbmRlcmVkID0gJyh7fSknLmZvcm1hdCgnLCAnLmpvaW4ocmVzdWx0KSkKIAogICAgICAgICBpZiBzZWxmLnJldHVybl9hbm5vdGF0aW9uIGlzIG5vdCBfZW1wdHk6CkBAIC0yMDc0LDMgKzI3MDQsNjQgQEAKICAgICAgICAgICAgIHJlbmRlcmVkICs9ICcgLT4ge30nLmZvcm1hdChhbm5vKQogCiAgICAgICAgIHJldHVybiByZW5kZXJlZAorCitkZWYgX21haW4oKToKKyAgICAiIiIgTG9naWMgZm9yIGluc3BlY3RpbmcgYW4gb2JqZWN0IGdpdmVuIGF0IGNvbW1hbmQgbGluZSAiIiIKKyAgICBpbXBvcnQgYXJncGFyc2UKKyAgICBpbXBvcnQgaW1wb3J0bGliCisKKyAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKKyAgICAgICAgJ29iamVjdCcsCisgICAgICAgICBoZWxwPSJUaGUgb2JqZWN0IHRvIGJlIGFuYWx5c2VkLiAiCisgICAgICAgICAgICAgICJJdCBzdXBwb3J0cyB0aGUgJ21vZHVsZTpxdWFsbmFtZScgc3ludGF4IikKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAorICAgICAgICAnLWQnLCAnLS1kZXRhaWxzJywgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAgaGVscD0nRGlzcGxheSBpbmZvIGFib3V0IHRoZSBtb2R1bGUgcmF0aGVyIHRoYW4gaXRzIHNvdXJjZSBjb2RlJykKKworICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCisKKyAgICB0YXJnZXQgPSBhcmdzLm9iamVjdAorICAgIG1vZF9uYW1lLCBoYXNfYXR0cnMsIGF0dHJzID0gdGFyZ2V0LnBhcnRpdGlvbigiOiIpCisgICAgdHJ5OgorICAgICAgICBvYmogPSBtb2R1bGUgPSBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZShtb2RfbmFtZSkKKyAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgbXNnID0gIkZhaWxlZCB0byBpbXBvcnQge30gKHt9OiB7fSkiLmZvcm1hdChtb2RfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlKGV4YykuX19uYW1lX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjKQorICAgICAgICBwcmludChtc2csIGZpbGU9c3lzLnN0ZGVycikKKyAgICAgICAgZXhpdCgyKQorCisgICAgaWYgaGFzX2F0dHJzOgorICAgICAgICBwYXJ0cyA9IGF0dHJzLnNwbGl0KCIuIikKKyAgICAgICAgb2JqID0gbW9kdWxlCisgICAgICAgIGZvciBwYXJ0IGluIHBhcnRzOgorICAgICAgICAgICAgb2JqID0gZ2V0YXR0cihvYmosIHBhcnQpCisKKyAgICBpZiBtb2R1bGUuX19uYW1lX18gaW4gc3lzLmJ1aWx0aW5fbW9kdWxlX25hbWVzOgorICAgICAgICBwcmludCgiQ2FuJ3QgZ2V0IGluZm8gZm9yIGJ1aWx0aW4gbW9kdWxlcy4iLCBmaWxlPXN5cy5zdGRlcnIpCisgICAgICAgIGV4aXQoMSkKKworICAgIGlmIGFyZ3MuZGV0YWlsczoKKyAgICAgICAgcHJpbnQoJ1RhcmdldDoge30nLmZvcm1hdCh0YXJnZXQpKQorICAgICAgICBwcmludCgnT3JpZ2luOiB7fScuZm9ybWF0KGdldHNvdXJjZWZpbGUobW9kdWxlKSkpCisgICAgICAgIHByaW50KCdDYWNoZWQ6IHt9Jy5mb3JtYXQobW9kdWxlLl9fY2FjaGVkX18pKQorICAgICAgICBpZiBvYmogaXMgbW9kdWxlOgorICAgICAgICAgICAgcHJpbnQoJ0xvYWRlcjoge30nLmZvcm1hdChyZXByKG1vZHVsZS5fX2xvYWRlcl9fKSkpCisgICAgICAgICAgICBpZiBoYXNhdHRyKG1vZHVsZSwgJ19fcGF0aF9fJyk6CisgICAgICAgICAgICAgICAgcHJpbnQoJ1N1Ym1vZHVsZSBzZWFyY2ggcGF0aDoge30nLmZvcm1hdChtb2R1bGUuX19wYXRoX18pKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIF9fLCBsaW5lbm8gPSBmaW5kc291cmNlKG9iaikKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwcmludCgnTGluZToge30nLmZvcm1hdChsaW5lbm8pKQorCisgICAgICAgIHByaW50KCdcbicpCisgICAgZWxzZToKKyAgICAgICAgcHJpbnQoZ2V0c291cmNlKG9iaikpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvaW8ucHkgYi9MaWIvaW8ucHkKaW5kZXggYmRhNGRlZi4uZTAzZGI5NyAxMDA2NDQKLS0tIGEvTGliL2lvLnB5CisrKyBiL0xpYi9pby5weQpAQCAtNCw3ICs0LDcgQEAKIEF0IHRoZSB0b3Agb2YgdGhlIEkvTyBoaWVyYXJjaHkgaXMgdGhlIGFic3RyYWN0IGJhc2UgY2xhc3MgSU9CYXNlLiBJdAogZGVmaW5lcyB0aGUgYmFzaWMgaW50ZXJmYWNlIHRvIGEgc3RyZWFtLiBOb3RlLCBob3dldmVyLCB0aGF0IHRoZXJlIGlzIG5vCiBzZXBhcmF0aW9uIGJldHdlZW4gcmVhZGluZyBhbmQgd3JpdGluZyB0byBzdHJlYW1zOyBpbXBsZW1lbnRhdGlvbnMgYXJlCi1hbGxvd2VkIHRvIHJhaXNlIGFuIElPRXJyb3IgaWYgdGhleSBkbyBub3Qgc3VwcG9ydCBhIGdpdmVuIG9wZXJhdGlvbi4KK2FsbG93ZWQgdG8gcmFpc2UgYW4gT1NFcnJvciBpZiB0aGV5IGRvIG5vdCBzdXBwb3J0IGEgZ2l2ZW4gb3BlcmF0aW9uLgogCiBFeHRlbmRpbmcgSU9CYXNlIGlzIFJhd0lPQmFzZSB3aGljaCBkZWFscyBzaW1wbHkgd2l0aCB0aGUgcmVhZGluZyBhbmQKIHdyaXRpbmcgb2YgcmF3IGJ5dGVzIHRvIGEgc3RyZWFtLiBGaWxlSU8gc3ViY2xhc3NlcyBSYXdJT0Jhc2UgdG8gcHJvdmlkZQpAQCAtMTksNyArMTksNyBAQAogQW5vdGhlciBJT0Jhc2Ugc3ViY2xhc3MsIFRleHRJT0Jhc2UsIGRlYWxzIHdpdGggdGhlIGVuY29kaW5nIGFuZCBkZWNvZGluZwogb2Ygc3RyZWFtcyBpbnRvIHRleHQuIFRleHRJT1dyYXBwZXIsIHdoaWNoIGV4dGVuZHMgaXQsIGlzIGEgYnVmZmVyZWQgdGV4dAogaW50ZXJmYWNlIHRvIGEgYnVmZmVyZWQgcmF3IHN0cmVhbSAoYEJ1ZmZlcmVkSU9CYXNlYCkuIEZpbmFsbHksIFN0cmluZ0lPCi1pcyBhIGluLW1lbW9yeSBzdHJlYW0gZm9yIHRleHQuCitpcyBhbiBpbi1tZW1vcnkgc3RyZWFtIGZvciB0ZXh0LgogCiBBcmd1bWVudCBuYW1lcyBhcmUgbm90IHBhcnQgb2YgdGhlIHNwZWNpZmljYXRpb24sIGFuZCBvbmx5IHRoZSBhcmd1bWVudHMKIG9mIG9wZW4oKSBhcmUgaW50ZW5kZWQgdG8gYmUgdXNlZCBhcyBrZXl3b3JkIGFyZ3VtZW50cy4KQEAgLTcwLDE2ICs3MCwxNiBAQAogIyBNZXRob2QgZGVzY3JpcHRpb25zIGFuZCBkZWZhdWx0IGltcGxlbWVudGF0aW9ucyBhcmUgaW5oZXJpdGVkIGZyb20gdGhlIEMKICMgdmVyc2lvbiBob3dldmVyLgogY2xhc3MgSU9CYXNlKF9pby5fSU9CYXNlLCBtZXRhY2xhc3M9YWJjLkFCQ01ldGEpOgotICAgIHBhc3MKKyAgICBfX2RvY19fID0gX2lvLl9JT0Jhc2UuX19kb2NfXwogCiBjbGFzcyBSYXdJT0Jhc2UoX2lvLl9SYXdJT0Jhc2UsIElPQmFzZSk6Ci0gICAgcGFzcworICAgIF9fZG9jX18gPSBfaW8uX1Jhd0lPQmFzZS5fX2RvY19fCiAKIGNsYXNzIEJ1ZmZlcmVkSU9CYXNlKF9pby5fQnVmZmVyZWRJT0Jhc2UsIElPQmFzZSk6Ci0gICAgcGFzcworICAgIF9fZG9jX18gPSBfaW8uX0J1ZmZlcmVkSU9CYXNlLl9fZG9jX18KIAogY2xhc3MgVGV4dElPQmFzZShfaW8uX1RleHRJT0Jhc2UsIElPQmFzZSk6Ci0gICAgcGFzcworICAgIF9fZG9jX18gPSBfaW8uX1RleHRJT0Jhc2UuX19kb2NfXwogCiBSYXdJT0Jhc2UucmVnaXN0ZXIoRmlsZUlPKQogCmRpZmYgLS1naXQgYS9MaWIvaXBhZGRyZXNzLnB5IGIvTGliL2lwYWRkcmVzcy5weQppbmRleCBlY2YzZjQ0Li5hYzAzYzM2IDEwMDY0NAotLS0gYS9MaWIvaXBhZGRyZXNzLnB5CisrKyBiL0xpYi9pcGFkZHJlc3MucHkKQEAgLTM4OCw0MCArMzg4LDcgQEAKICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKIAogCi1jbGFzcyBfVG90YWxPcmRlcmluZ01peGluOgotICAgICMgSGVscGVyIHRoYXQgZGVyaXZlcyB0aGUgb3RoZXIgY29tcGFyaXNvbiBvcGVyYXRpb25zIGZyb20KLSAgICAjIF9fbHRfXyBhbmQgX19lcV9fCi0gICAgIyBXZSBhdm9pZCBmdW5jdG9vbHMudG90YWxfb3JkZXJpbmcgYmVjYXVzZSBpdCBkb2Vzbid0IGhhbmRsZQotICAgICMgTm90SW1wbGVtZW50ZWQgY29ycmVjdGx5IHlldCAoaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTEwMDQyKQotICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCi0gICAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgIGVxdWFsID0gc2VsZi5fX2VxX18ob3RoZXIpCi0gICAgICAgIGlmIGVxdWFsIGlzIE5vdEltcGxlbWVudGVkOgotICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCi0gICAgICAgIHJldHVybiBub3QgZXF1YWwKLSAgICBkZWYgX19sdF9fKHNlbGYsIG90aGVyKToKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgotICAgIGRlZiBfX2xlX18oc2VsZiwgb3RoZXIpOgotICAgICAgICBsZXNzID0gc2VsZi5fX2x0X18ob3RoZXIpCi0gICAgICAgIGlmIGxlc3MgaXMgTm90SW1wbGVtZW50ZWQgb3Igbm90IGxlc3M6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5fX2VxX18ob3RoZXIpCi0gICAgICAgIHJldHVybiBsZXNzCi0gICAgZGVmIF9fZ3RfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgIGxlc3MgPSBzZWxmLl9fbHRfXyhvdGhlcikKLSAgICAgICAgaWYgbGVzcyBpcyBOb3RJbXBsZW1lbnRlZDoKLSAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAotICAgICAgICBlcXVhbCA9IHNlbGYuX19lcV9fKG90aGVyKQotICAgICAgICBpZiBlcXVhbCBpcyBOb3RJbXBsZW1lbnRlZDoKLSAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAotICAgICAgICByZXR1cm4gbm90IChsZXNzIG9yIGVxdWFsKQotICAgIGRlZiBfX2dlX18oc2VsZiwgb3RoZXIpOgotICAgICAgICBsZXNzID0gc2VsZi5fX2x0X18ob3RoZXIpCi0gICAgICAgIGlmIGxlc3MgaXMgTm90SW1wbGVtZW50ZWQ6Ci0gICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKLSAgICAgICAgcmV0dXJuIG5vdCBsZXNzCi0KLWNsYXNzIF9JUEFkZHJlc3NCYXNlKF9Ub3RhbE9yZGVyaW5nTWl4aW4pOgorY2xhc3MgX0lQQWRkcmVzc0Jhc2U6CiAKICAgICAiIiJUaGUgbW90aGVyIGNsYXNzLiIiIgogCkBAIC00NzIsNyArNDM5LDcgQEAKICAgICAgICAgIiIiUmV0dXJuIHByZWZpeCBsZW5ndGggZnJvbSB0aGUgYml0d2lzZSBuZXRtYXNrLgogCiAgICAgICAgIEFyZ3M6Ci0gICAgICAgICAgICBpcF9pbnQ6IEFuIGludGVnZXIsIHRoZSBuZXRtYXNrIGluIGF4cGFuZGVkIGJpdHdpc2UgZm9ybWF0CisgICAgICAgICAgICBpcF9pbnQ6IEFuIGludGVnZXIsIHRoZSBuZXRtYXNrIGluIGV4cGFuZGVkIGJpdHdpc2UgZm9ybWF0CiAKICAgICAgICAgUmV0dXJuczoKICAgICAgICAgICAgIEFuIGludGVnZXIsIHRoZSBwcmVmaXggbGVuZ3RoLgpAQCAtNTU0LDYgKzUyMSw3IEBACiAgICAgICAgICAgICBzZWxmLl9yZXBvcnRfaW52YWxpZF9uZXRtYXNrKGlwX3N0cikKIAogCitAZnVuY3Rvb2xzLnRvdGFsX29yZGVyaW5nCiBjbGFzcyBfQmFzZUFkZHJlc3MoX0lQQWRkcmVzc0Jhc2UpOgogCiAgICAgIiIiQSBnZW5lcmljIElQIG9iamVjdC4KQEAgLTU3OCwxMiArNTQ2LDExIEBACiAgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKIAogICAgIGRlZiBfX2x0X18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgX0Jhc2VBZGRyZXNzKToKKyAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAogICAgICAgICBpZiBzZWxmLl92ZXJzaW9uICE9IG90aGVyLl92ZXJzaW9uOgogICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCclcyBhbmQgJXMgYXJlIG5vdCBvZiB0aGUgc2FtZSB2ZXJzaW9uJyAlICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZiwgb3RoZXIpKQotICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgX0Jhc2VBZGRyZXNzKToKLSAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignJXMgYW5kICVzIGFyZSBub3Qgb2YgdGhlIHNhbWUgdHlwZScgJSAoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYsIG90aGVyKSkKICAgICAgICAgaWYgc2VsZi5faXAgIT0gb3RoZXIuX2lwOgogICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2lwIDwgb3RoZXIuX2lwCiAgICAgICAgIHJldHVybiBGYWxzZQpAQCAtNjEzLDYgKzU4MCw3IEBACiAgICAgICAgIHJldHVybiAoc2VsZi5fdmVyc2lvbiwgc2VsZikKIAogCitAZnVuY3Rvb2xzLnRvdGFsX29yZGVyaW5nCiBjbGFzcyBfQmFzZU5ldHdvcmsoX0lQQWRkcmVzc0Jhc2UpOgogCiAgICAgIiIiQSBnZW5lcmljIElQIG5ldHdvcmsgb2JqZWN0LgpAQCAtNjYyLDEyICs2MzAsMTEgQEAKICAgICAgICAgICAgIHJldHVybiBzZWxmLl9hZGRyZXNzX2NsYXNzKGJyb2FkY2FzdCArIG4pCiAKICAgICBkZWYgX19sdF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIF9CYXNlTmV0d29yayk6CisgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKICAgICAgICAgaWYgc2VsZi5fdmVyc2lvbiAhPSBvdGhlci5fdmVyc2lvbjoKICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignJXMgYW5kICVzIGFyZSBub3Qgb2YgdGhlIHNhbWUgdmVyc2lvbicgJSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYsIG90aGVyKSkKLSAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIF9CYXNlTmV0d29yayk6Ci0gICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJyVzIGFuZCAlcyBhcmUgbm90IG9mIHRoZSBzYW1lIHR5cGUnICUgKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLCBvdGhlcikpCiAgICAgICAgIGlmIHNlbGYubmV0d29ya19hZGRyZXNzICE9IG90aGVyLm5ldHdvcmtfYWRkcmVzczoKICAgICAgICAgICAgIHJldHVybiBzZWxmLm5ldHdvcmtfYWRkcmVzcyA8IG90aGVyLm5ldHdvcmtfYWRkcmVzcwogICAgICAgICBpZiBzZWxmLm5ldG1hc2sgIT0gb3RoZXIubmV0bWFzazoKQEAgLTEwMzAsMTMgKzk5NywyNSBAQAogICAgICAgICAiIiJUZXN0IGlmIHRoaXMgYWRkcmVzcyBpcyBhbGxvY2F0ZWQgZm9yIHByaXZhdGUgbmV0d29ya3MuCiAKICAgICAgICAgUmV0dXJuczoKLSAgICAgICAgICAgIEEgYm9vbGVhbiwgVHJ1ZSBpZiB0aGUgYWRkcmVzcyBpcyByZXNlcnZlZCBwZXIgUkZDIDQxOTMuCisgICAgICAgICAgICBBIGJvb2xlYW4sIFRydWUgaWYgdGhlIGFkZHJlc3MgaXMgcmVzZXJ2ZWQgcGVyCisgICAgICAgICAgICBpYW5hLWlwdjQtc3BlY2lhbC1yZWdpc3RyeSBvciBpYW5hLWlwdjYtc3BlY2lhbC1yZWdpc3RyeS4KIAogICAgICAgICAiIiIKICAgICAgICAgcmV0dXJuIChzZWxmLm5ldHdvcmtfYWRkcmVzcy5pc19wcml2YXRlIGFuZAogICAgICAgICAgICAgICAgIHNlbGYuYnJvYWRjYXN0X2FkZHJlc3MuaXNfcHJpdmF0ZSkKIAogICAgIEBwcm9wZXJ0eQorICAgIGRlZiBpc19nbG9iYWwoc2VsZik6CisgICAgICAgICIiIlRlc3QgaWYgdGhpcyBhZGRyZXNzIGlzIGFsbG9jYXRlZCBmb3IgcHVibGljIG5ldHdvcmtzLgorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBBIGJvb2xlYW4sIFRydWUgaWYgdGhlIGFkZHJlc3MgaXMgbm90IHJlc2VydmVkIHBlcgorICAgICAgICAgICAgaWFuYS1pcHY0LXNwZWNpYWwtcmVnaXN0cnkgb3IgaWFuYS1pcHY2LXNwZWNpYWwtcmVnaXN0cnkuCisKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBub3Qgc2VsZi5pc19wcml2YXRlCisKKyAgICBAcHJvcGVydHkKICAgICBkZWYgaXNfdW5zcGVjaWZpZWQoc2VsZik6CiAgICAgICAgICIiIlRlc3QgaWYgdGhlIGFkZHJlc3MgaXMgdW5zcGVjaWZpZWQuCiAKQEAgLTEyNzYsMTkgKzEyNTUsMzAgQEAKICAgICAgICAgcmV0dXJuIHNlbGYgaW4gcmVzZXJ2ZWRfbmV0d29yawogCiAgICAgQHByb3BlcnR5CisgICAgQGZ1bmN0b29scy5scnVfY2FjaGUoKQogICAgIGRlZiBpc19wcml2YXRlKHNlbGYpOgogICAgICAgICAiIiJUZXN0IGlmIHRoaXMgYWRkcmVzcyBpcyBhbGxvY2F0ZWQgZm9yIHByaXZhdGUgbmV0d29ya3MuCiAKICAgICAgICAgUmV0dXJuczoKLSAgICAgICAgICAgIEEgYm9vbGVhbiwgVHJ1ZSBpZiB0aGUgYWRkcmVzcyBpcyByZXNlcnZlZCBwZXIgUkZDIDE5MTguCisgICAgICAgICAgICBBIGJvb2xlYW4sIFRydWUgaWYgdGhlIGFkZHJlc3MgaXMgcmVzZXJ2ZWQgcGVyCisgICAgICAgICAgICBpYW5hLWlwdjQtc3BlY2lhbC1yZWdpc3RyeS4KIAogICAgICAgICAiIiIKLSAgICAgICAgcHJpdmF0ZV8xMCA9IElQdjROZXR3b3JrKCcxMC4wLjAuMC84JykKLSAgICAgICAgcHJpdmF0ZV8xNzIgPSBJUHY0TmV0d29yaygnMTcyLjE2LjAuMC8xMicpCi0gICAgICAgIHByaXZhdGVfMTkyID0gSVB2NE5ldHdvcmsoJzE5Mi4xNjguMC4wLzE2JykKLSAgICAgICAgcmV0dXJuIChzZWxmIGluIHByaXZhdGVfMTAgb3IKLSAgICAgICAgICAgICAgICBzZWxmIGluIHByaXZhdGVfMTcyIG9yCi0gICAgICAgICAgICAgICAgc2VsZiBpbiBwcml2YXRlXzE5MikKKyAgICAgICAgcmV0dXJuIChzZWxmIGluIElQdjROZXR3b3JrKCcwLjAuMC4wLzgnKSBvcgorICAgICAgICAgICAgICAgIHNlbGYgaW4gSVB2NE5ldHdvcmsoJzEwLjAuMC4wLzgnKSBvcgorICAgICAgICAgICAgICAgIHNlbGYgaW4gSVB2NE5ldHdvcmsoJzEyNy4wLjAuMC84Jykgb3IKKyAgICAgICAgICAgICAgICBzZWxmIGluIElQdjROZXR3b3JrKCcxNjkuMjU0LjAuMC8xNicpIG9yCisgICAgICAgICAgICAgICAgc2VsZiBpbiBJUHY0TmV0d29yaygnMTcyLjE2LjAuMC8xMicpIG9yCisgICAgICAgICAgICAgICAgc2VsZiBpbiBJUHY0TmV0d29yaygnMTkyLjAuMC4wLzI5Jykgb3IKKyAgICAgICAgICAgICAgICBzZWxmIGluIElQdjROZXR3b3JrKCcxOTIuMC4wLjE3MC8zMScpIG9yCisgICAgICAgICAgICAgICAgc2VsZiBpbiBJUHY0TmV0d29yaygnMTkyLjAuMi4wLzI0Jykgb3IKKyAgICAgICAgICAgICAgICBzZWxmIGluIElQdjROZXR3b3JrKCcxOTIuMTY4LjAuMC8xNicpIG9yCisgICAgICAgICAgICAgICAgc2VsZiBpbiBJUHY0TmV0d29yaygnMTk4LjE4LjAuMC8xNScpIG9yCisgICAgICAgICAgICAgICAgc2VsZiBpbiBJUHY0TmV0d29yaygnMTk4LjUxLjEwMC4wLzI0Jykgb3IKKyAgICAgICAgICAgICAgICBzZWxmIGluIElQdjROZXR3b3JrKCcyMDMuMC4xMTMuMC8yNCcpIG9yCisgICAgICAgICAgICAgICAgc2VsZiBpbiBJUHY0TmV0d29yaygnMjQwLjAuMC4wLzQnKSBvcgorICAgICAgICAgICAgICAgIHNlbGYgaW4gSVB2NE5ldHdvcmsoJzI1NS4yNTUuMjU1LjI1NS8zMicpKQorCiAKICAgICBAcHJvcGVydHkKICAgICBkZWYgaXNfbXVsdGljYXN0KHNlbGYpOgpAQCAtMTUwNCw2ICsxNDk0LDIxIEBACiAgICAgICAgIGlmIHNlbGYuX3ByZWZpeGxlbiA9PSAoc2VsZi5fbWF4X3ByZWZpeGxlbiAtIDEpOgogICAgICAgICAgICAgc2VsZi5ob3N0cyA9IHNlbGYuX19pdGVyX18KIAorICAgIEBwcm9wZXJ0eQorICAgIEBmdW5jdG9vbHMubHJ1X2NhY2hlKCkKKyAgICBkZWYgaXNfZ2xvYmFsKHNlbGYpOgorICAgICAgICAiIiJUZXN0IGlmIHRoaXMgYWRkcmVzcyBpcyBhbGxvY2F0ZWQgZm9yIHB1YmxpYyBuZXR3b3Jrcy4KKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgQSBib29sZWFuLCBUcnVlIGlmIHRoZSBhZGRyZXNzIGlzIG5vdCByZXNlcnZlZCBwZXIKKyAgICAgICAgICAgIGlhbmEtaXB2NC1zcGVjaWFsLXJlZ2lzdHJ5LgorCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gKG5vdCAoc2VsZi5uZXR3b3JrX2FkZHJlc3MgaW4gSVB2NE5ldHdvcmsoJzEwMC42NC4wLjAvMTAnKSBhbmQKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5icm9hZGNhc3RfYWRkcmVzcyBpbiBJUHY0TmV0d29yaygnMTAwLjY0LjAuMC8xMCcpKSBhbmQKKyAgICAgICAgICAgICAgICBub3Qgc2VsZi5pc19wcml2YXRlKQorCisKIAogY2xhc3MgX0Jhc2VWNjoKIApAQCAtMTg2MCwxNSArMTg2NSwzNiBAQAogICAgICAgICByZXR1cm4gc2VsZiBpbiBzaXRlbG9jYWxfbmV0d29yawogCiAgICAgQHByb3BlcnR5CisgICAgQGZ1bmN0b29scy5scnVfY2FjaGUoKQogICAgIGRlZiBpc19wcml2YXRlKHNlbGYpOgogICAgICAgICAiIiJUZXN0IGlmIHRoaXMgYWRkcmVzcyBpcyBhbGxvY2F0ZWQgZm9yIHByaXZhdGUgbmV0d29ya3MuCiAKICAgICAgICAgUmV0dXJuczoKLSAgICAgICAgICAgIEEgYm9vbGVhbiwgVHJ1ZSBpZiB0aGUgYWRkcmVzcyBpcyByZXNlcnZlZCBwZXIgUkZDIDQxOTMuCisgICAgICAgICAgICBBIGJvb2xlYW4sIFRydWUgaWYgdGhlIGFkZHJlc3MgaXMgcmVzZXJ2ZWQgcGVyCisgICAgICAgICAgICBpYW5hLWlwdjYtc3BlY2lhbC1yZWdpc3RyeS4KIAogICAgICAgICAiIiIKLSAgICAgICAgcHJpdmF0ZV9uZXR3b3JrID0gSVB2Nk5ldHdvcmsoJ2ZjMDA6Oi83JykKLSAgICAgICAgcmV0dXJuIHNlbGYgaW4gcHJpdmF0ZV9uZXR3b3JrCisgICAgICAgIHJldHVybiAoc2VsZiBpbiBJUHY2TmV0d29yaygnOjoxLzEyOCcpIG9yCisgICAgICAgICAgICAgICAgc2VsZiBpbiBJUHY2TmV0d29yaygnOjovMTI4Jykgb3IKKyAgICAgICAgICAgICAgICBzZWxmIGluIElQdjZOZXR3b3JrKCc6OmZmZmY6MDowLzk2Jykgb3IKKyAgICAgICAgICAgICAgICBzZWxmIGluIElQdjZOZXR3b3JrKCcxMDA6Oi82NCcpIG9yCisgICAgICAgICAgICAgICAgc2VsZiBpbiBJUHY2TmV0d29yaygnMjAwMTo6LzIzJykgb3IKKyAgICAgICAgICAgICAgICBzZWxmIGluIElQdjZOZXR3b3JrKCcyMDAxOjI6Oi80OCcpIG9yCisgICAgICAgICAgICAgICAgc2VsZiBpbiBJUHY2TmV0d29yaygnMjAwMTpkYjg6Oi8zMicpIG9yCisgICAgICAgICAgICAgICAgc2VsZiBpbiBJUHY2TmV0d29yaygnMjAwMToxMDo6LzI4Jykgb3IKKyAgICAgICAgICAgICAgICBzZWxmIGluIElQdjZOZXR3b3JrKCdmYzAwOjovNycpIG9yCisgICAgICAgICAgICAgICAgc2VsZiBpbiBJUHY2TmV0d29yaygnZmU4MDo6LzEwJykpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgaXNfZ2xvYmFsKHNlbGYpOgorICAgICAgICAiIiJUZXN0IGlmIHRoaXMgYWRkcmVzcyBpcyBhbGxvY2F0ZWQgZm9yIHB1YmxpYyBuZXR3b3Jrcy4KKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgQSBib29sZWFuLCB0cnVlIGlmIHRoZSBhZGRyZXNzIGlzIG5vdCByZXNlcnZlZCBwZXIKKyAgICAgICAgICAgIGlhbmEtaXB2Ni1zcGVjaWFsLXJlZ2lzdHJ5LgorCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gbm90IHNlbGYuaXNfcHJpdmF0ZQogCiAgICAgQHByb3BlcnR5CiAgICAgZGVmIGlzX3Vuc3BlY2lmaWVkKHNlbGYpOgpAQCAtMjA5Niw2ICsyMTIyLDE4IEBACiAgICAgICAgIGlmIHNlbGYuX3ByZWZpeGxlbiA9PSAoc2VsZi5fbWF4X3ByZWZpeGxlbiAtIDEpOgogICAgICAgICAgICAgc2VsZi5ob3N0cyA9IHNlbGYuX19pdGVyX18KIAorICAgIGRlZiBob3N0cyhzZWxmKToKKyAgICAgICAgIiIiR2VuZXJhdGUgSXRlcmF0b3Igb3ZlciB1c2FibGUgaG9zdHMgaW4gYSBuZXR3b3JrLgorCisgICAgICAgICAgVGhpcyBpcyBsaWtlIF9faXRlcl9fIGV4Y2VwdCBpdCBkb2Vzbid0IHJldHVybiB0aGUKKyAgICAgICAgICBTdWJuZXQtUm91dGVyIGFueWNhc3QgYWRkcmVzcy4KKworICAgICAgICAiIiIKKyAgICAgICAgbmV0d29yayA9IGludChzZWxmLm5ldHdvcmtfYWRkcmVzcykKKyAgICAgICAgYnJvYWRjYXN0ID0gaW50KHNlbGYuYnJvYWRjYXN0X2FkZHJlc3MpCisgICAgICAgIGZvciB4IGluIHJhbmdlKG5ldHdvcmsgKyAxLCBicm9hZGNhc3QgKyAxKToKKyAgICAgICAgICAgIHlpZWxkIHNlbGYuX2FkZHJlc3NfY2xhc3MoeCkKKwogICAgIEBwcm9wZXJ0eQogICAgIGRlZiBpc19zaXRlX2xvY2FsKHNlbGYpOgogICAgICAgICAiIiJUZXN0IGlmIHRoZSBhZGRyZXNzIGlzIHJlc2VydmVkIGZvciBzaXRlLWxvY2FsLgpkaWZmIC0tZ2l0IGEvTGliL2pzb24vX19pbml0X18ucHkgYi9MaWIvanNvbi9fX2luaXRfXy5weQppbmRleCA2ZDliMzBkLi45Mzk4NjY3IDEwMDY0NAotLS0gYS9MaWIvanNvbi9fX2luaXRfXy5weQorKysgYi9MaWIvanNvbi9fX2luaXRfXy5weQpAQCAtMzYsOCArMzYsNyBAQAogUHJldHR5IHByaW50aW5nOjoKIAogICAgID4+PiBpbXBvcnQganNvbgotICAgID4+PiBwcmludChqc29uLmR1bXBzKHsnNCc6IDUsICc2JzogN30sIHNvcnRfa2V5cz1UcnVlLAotICAgIC4uLiAgICAgICAgICAgICAgICAgIGluZGVudD00LCBzZXBhcmF0b3JzPSgnLCcsICc6ICcpKSkKKyAgICA+Pj4gcHJpbnQoanNvbi5kdW1wcyh7JzQnOiA1LCAnNic6IDd9LCBzb3J0X2tleXM9VHJ1ZSwgaW5kZW50PTQpKQogICAgIHsKICAgICAgICAgIjQiOiA1LAogICAgICAgICAiNiI6IDcKQEAgLTE0MywxMyArMTQyLDEyIEBACiAgICAgSWYgYGBpbmRlbnRgYCBpcyBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyLCB0aGVuIEpTT04gYXJyYXkgZWxlbWVudHMgYW5kCiAgICAgb2JqZWN0IG1lbWJlcnMgd2lsbCBiZSBwcmV0dHktcHJpbnRlZCB3aXRoIHRoYXQgaW5kZW50IGxldmVsLiBBbiBpbmRlbnQKICAgICBsZXZlbCBvZiAwIHdpbGwgb25seSBpbnNlcnQgbmV3bGluZXMuIGBgTm9uZWBgIGlzIHRoZSBtb3N0IGNvbXBhY3QKLSAgICByZXByZXNlbnRhdGlvbi4gIFNpbmNlIHRoZSBkZWZhdWx0IGl0ZW0gc2VwYXJhdG9yIGlzIGBgJywgJ2BgLCAgdGhlCi0gICAgb3V0cHV0IG1pZ2h0IGluY2x1ZGUgdHJhaWxpbmcgd2hpdGVzcGFjZSB3aGVuIGBgaW5kZW50YGAgaXMgc3BlY2lmaWVkLgotICAgIFlvdSBjYW4gdXNlIGBgc2VwYXJhdG9ycz0oJywnLCAnOiAnKWBgIHRvIGF2b2lkIHRoaXMuCisgICAgcmVwcmVzZW50YXRpb24uCiAKLSAgICBJZiBgYHNlcGFyYXRvcnNgYCBpcyBhbiBgYChpdGVtX3NlcGFyYXRvciwgZGljdF9zZXBhcmF0b3IpYGAgdHVwbGUKLSAgICB0aGVuIGl0IHdpbGwgYmUgdXNlZCBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IGBgKCcsICcsICc6ICcpYGAgc2VwYXJhdG9ycy4KLSAgICBgYCgnLCcsICc6JylgYCBpcyB0aGUgbW9zdCBjb21wYWN0IEpTT04gcmVwcmVzZW50YXRpb24uCisgICAgSWYgc3BlY2lmaWVkLCBgYHNlcGFyYXRvcnNgYCBzaG91bGQgYmUgYW4gYGAoaXRlbV9zZXBhcmF0b3IsIGtleV9zZXBhcmF0b3IpYGAKKyAgICB0dXBsZS4gIFRoZSBkZWZhdWx0IGlzIGBgKCcsICcsICc6ICcpYGAgaWYgKmluZGVudCogaXMgYGBOb25lYGAgYW5kCisgICAgYGAoJywnLCAnOiAnKWBgIG90aGVyd2lzZS4gIFRvIGdldCB0aGUgbW9zdCBjb21wYWN0IEpTT04gcmVwcmVzZW50YXRpb24sCisgICAgeW91IHNob3VsZCBzcGVjaWZ5IGBgKCcsJywgJzonKWBgIHRvIGVsaW1pbmF0ZSB3aGl0ZXNwYWNlLgogCiAgICAgYGBkZWZhdWx0KG9iailgYCBpcyBhIGZ1bmN0aW9uIHRoYXQgc2hvdWxkIHJldHVybiBhIHNlcmlhbGl6YWJsZSB2ZXJzaW9uCiAgICAgb2Ygb2JqIG9yIHJhaXNlIFR5cGVFcnJvci4gVGhlIGRlZmF1bHQgc2ltcGx5IHJhaXNlcyBUeXBlRXJyb3IuCkBAIC0xODYsNyArMTg0LDcgQEAKICAgICAgICAgZGVmYXVsdD1Ob25lLCBzb3J0X2tleXM9RmFsc2UsICoqa3cpOgogICAgICIiIlNlcmlhbGl6ZSBgYG9iamBgIHRvIGEgSlNPTiBmb3JtYXR0ZWQgYGBzdHJgYC4KIAotICAgIElmIGBgc2tpcGtleXNgYCBpcyBmYWxzZSB0aGVuIGBgZGljdGBgIGtleXMgdGhhdCBhcmUgbm90IGJhc2ljIHR5cGVzCisgICAgSWYgYGBza2lwa2V5c2BgIGlzIHRydWUgdGhlbiBgYGRpY3RgYCBrZXlzIHRoYXQgYXJlIG5vdCBiYXNpYyB0eXBlcwogICAgIChgYHN0cmBgLCBgYGludGBgLCBgYGZsb2F0YGAsIGBgYm9vbGBgLCBgYE5vbmVgYCkgd2lsbCBiZSBza2lwcGVkCiAgICAgaW5zdGVhZCBvZiByYWlzaW5nIGEgYGBUeXBlRXJyb3JgYC4KIApAQCAtMjA2LDEzICsyMDQsMTIgQEAKICAgICBJZiBgYGluZGVudGBgIGlzIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIsIHRoZW4gSlNPTiBhcnJheSBlbGVtZW50cyBhbmQKICAgICBvYmplY3QgbWVtYmVycyB3aWxsIGJlIHByZXR0eS1wcmludGVkIHdpdGggdGhhdCBpbmRlbnQgbGV2ZWwuIEFuIGluZGVudAogICAgIGxldmVsIG9mIDAgd2lsbCBvbmx5IGluc2VydCBuZXdsaW5lcy4gYGBOb25lYGAgaXMgdGhlIG1vc3QgY29tcGFjdAotICAgIHJlcHJlc2VudGF0aW9uLiAgU2luY2UgdGhlIGRlZmF1bHQgaXRlbSBzZXBhcmF0b3IgaXMgYGAnLCAnYGAsICB0aGUKLSAgICBvdXRwdXQgbWlnaHQgaW5jbHVkZSB0cmFpbGluZyB3aGl0ZXNwYWNlIHdoZW4gYGBpbmRlbnRgYCBpcyBzcGVjaWZpZWQuCi0gICAgWW91IGNhbiB1c2UgYGBzZXBhcmF0b3JzPSgnLCcsICc6ICcpYGAgdG8gYXZvaWQgdGhpcy4KKyAgICByZXByZXNlbnRhdGlvbi4KIAotICAgIElmIGBgc2VwYXJhdG9yc2BgIGlzIGFuIGBgKGl0ZW1fc2VwYXJhdG9yLCBkaWN0X3NlcGFyYXRvcilgYCB0dXBsZQotICAgIHRoZW4gaXQgd2lsbCBiZSB1c2VkIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgYGAoJywgJywgJzogJylgYCBzZXBhcmF0b3JzLgotICAgIGBgKCcsJywgJzonKWBgIGlzIHRoZSBtb3N0IGNvbXBhY3QgSlNPTiByZXByZXNlbnRhdGlvbi4KKyAgICBJZiBzcGVjaWZpZWQsIGBgc2VwYXJhdG9yc2BgIHNob3VsZCBiZSBhbiBgYChpdGVtX3NlcGFyYXRvciwga2V5X3NlcGFyYXRvcilgYAorICAgIHR1cGxlLiAgVGhlIGRlZmF1bHQgaXMgYGAoJywgJywgJzogJylgYCBpZiAqaW5kZW50KiBpcyBgYE5vbmVgYCBhbmQKKyAgICBgYCgnLCcsICc6ICcpYGAgb3RoZXJ3aXNlLiAgVG8gZ2V0IHRoZSBtb3N0IGNvbXBhY3QgSlNPTiByZXByZXNlbnRhdGlvbiwKKyAgICB5b3Ugc2hvdWxkIHNwZWNpZnkgYGAoJywnLCAnOicpYGAgdG8gZWxpbWluYXRlIHdoaXRlc3BhY2UuCiAKICAgICBgYGRlZmF1bHQob2JqKWBgIGlzIGEgZnVuY3Rpb24gdGhhdCBzaG91bGQgcmV0dXJuIGEgc2VyaWFsaXphYmxlIHZlcnNpb24KICAgICBvZiBvYmogb3IgcmFpc2UgVHlwZUVycm9yLiBUaGUgZGVmYXVsdCBzaW1wbHkgcmFpc2VzIFR5cGVFcnJvci4KQEAgLTMxMCw2ICszMDcsMTEgQEAKICAgICBUaGUgYGBlbmNvZGluZ2BgIGFyZ3VtZW50IGlzIGlnbm9yZWQgYW5kIGRlcHJlY2F0ZWQuCiAKICAgICAiIiIKKyAgICBpZiBub3QgaXNpbnN0YW5jZShzLCBzdHIpOgorICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ3RoZSBKU09OIG9iamVjdCBtdXN0IGJlIHN0ciwgbm90IHshcn0nLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLl9fY2xhc3NfXy5fX25hbWVfXykpCisgICAgaWYgcy5zdGFydHN3aXRoKHUnXHVmZWZmJyk6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIlVuZXhwZWN0ZWQgVVRGLTggQk9NIChkZWNvZGUgdXNpbmcgdXRmLTgtc2lnKSIpCiAgICAgaWYgKGNscyBpcyBOb25lIGFuZCBvYmplY3RfaG9vayBpcyBOb25lIGFuZAogICAgICAgICAgICAgcGFyc2VfaW50IGlzIE5vbmUgYW5kIHBhcnNlX2Zsb2F0IGlzIE5vbmUgYW5kCiAgICAgICAgICAgICBwYXJzZV9jb25zdGFudCBpcyBOb25lIGFuZCBvYmplY3RfcGFpcnNfaG9vayBpcyBOb25lIGFuZCBub3Qga3cpOgpkaWZmIC0tZ2l0IGEvTGliL2pzb24vZGVjb2Rlci5weSBiL0xpYi9qc29uL2RlY29kZXIucHkKaW5kZXggODBkMzQyMC4uNTllNWY0MSAxMDA2NDQKLS0tIGEvTGliL2pzb24vZGVjb2Rlci5weQorKysgYi9MaWIvanNvbi9kZWNvZGVyLnB5CkBAIC0xLDkgKzEsNiBAQAogIiIiSW1wbGVtZW50YXRpb24gb2YgSlNPTkRlY29kZXIKICIiIgotaW1wb3J0IGJpbmFzY2lpCiBpbXBvcnQgcmUKLWltcG9ydCBzeXMKLWltcG9ydCBzdHJ1Y3QKIAogZnJvbSBqc29uIGltcG9ydCBzY2FubmVyCiB0cnk6CkBAIC0xNSwxNCArMTIsOSBAQAogCiBGTEFHUyA9IHJlLlZFUkJPU0UgfCByZS5NVUxUSUxJTkUgfCByZS5ET1RBTEwKIAotZGVmIF9mbG9hdGNvbnN0YW50cygpOgotICAgIF9CWVRFUyA9IGJpbmFzY2lpLnVuaGV4bGlmeShiJzdGRjgwMDAwMDAwMDAwMDA3RkYwMDAwMDAwMDAwMDAwJykKLSAgICBpZiBzeXMuYnl0ZW9yZGVyICE9ICdiaWcnOgotICAgICAgICBfQllURVMgPSBfQllURVNbOjhdWzo6LTFdICsgX0JZVEVTWzg6XVs6Oi0xXQotICAgIG5hbiwgaW5mID0gc3RydWN0LnVucGFjaygnZGQnLCBfQllURVMpCi0gICAgcmV0dXJuIG5hbiwgaW5mLCAtaW5mCi0KLU5hTiwgUG9zSW5mLCBOZWdJbmYgPSBfZmxvYXRjb25zdGFudHMoKQorTmFOID0gZmxvYXQoJ25hbicpCitQb3NJbmYgPSBmbG9hdCgnaW5mJykKK05lZ0luZiA9IGZsb2F0KCctaW5mJykKIAogCiBkZWYgbGluZWNvbChkb2MsIHBvcyk6CkBAIC0xOTUsOCArMTg3LDggQEAKIAogICAgICAgICB0cnk6CiAgICAgICAgICAgICB2YWx1ZSwgZW5kID0gc2Nhbl9vbmNlKHMsIGVuZCkKLSAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKGVycm1zZygiRXhwZWN0aW5nIG9iamVjdCIsIHMsIGVuZCkpCisgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uIGFzIGVycjoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoZXJybXNnKCJFeHBlY3RpbmcgdmFsdWUiLCBzLCBlcnIudmFsdWUpKSBmcm9tIE5vbmUKICAgICAgICAgcGFpcnNfYXBwZW5kKChrZXksIHZhbHVlKSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgbmV4dGNoYXIgPSBzW2VuZF0KQEAgLTIzOSw4ICsyMzEsOCBAQAogICAgIHdoaWxlIFRydWU6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHZhbHVlLCBlbmQgPSBzY2FuX29uY2UocywgZW5kKQotICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKLSAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoZXJybXNnKCJFeHBlY3Rpbmcgb2JqZWN0IiwgcywgZW5kKSkKKyAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb24gYXMgZXJyOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihlcnJtc2coIkV4cGVjdGluZyB2YWx1ZSIsIHMsIGVyci52YWx1ZSkpIGZyb20gTm9uZQogICAgICAgICBfYXBwZW5kKHZhbHVlKQogICAgICAgICBuZXh0Y2hhciA9IHNbZW5kOmVuZCArIDFdCiAgICAgICAgIGlmIG5leHRjaGFyIGluIF93czoKQEAgLTI1MCw3ICsyNDIsNyBAQAogICAgICAgICBpZiBuZXh0Y2hhciA9PSAnXSc6CiAgICAgICAgICAgICBicmVhawogICAgICAgICBlbGlmIG5leHRjaGFyICE9ICcsJzoKLSAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoZXJybXNnKCJFeHBlY3RpbmcgJywnIGRlbGltaXRlciIsIHMsIGVuZCkpCisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKGVycm1zZygiRXhwZWN0aW5nICcsJyBkZWxpbWl0ZXIiLCBzLCBlbmQgLSAxKSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgaWYgc1tlbmRdIGluIF93czoKICAgICAgICAgICAgICAgICBlbmQgKz0gMQpAQCAtMzY1LDYgKzM1Nyw2IEBACiAgICAgICAgICIiIgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBvYmosIGVuZCA9IHNlbGYuc2Nhbl9vbmNlKHMsIGlkeCkKLSAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJObyBKU09OIG9iamVjdCBjb3VsZCBiZSBkZWNvZGVkIikKKyAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb24gYXMgZXJyOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihlcnJtc2coIkV4cGVjdGluZyB2YWx1ZSIsIHMsIGVyci52YWx1ZSkpIGZyb20gTm9uZQogICAgICAgICByZXR1cm4gb2JqLCBlbmQKZGlmZiAtLWdpdCBhL0xpYi9qc29uL2VuY29kZXIucHkgYi9MaWIvanNvbi9lbmNvZGVyLnB5CmluZGV4IDFkOGIyMGMuLjA1MTM4MzggMTAwNjQ0Ci0tLSBhL0xpYi9qc29uL2VuY29kZXIucHkKKysrIGIvTGliL2pzb24vZW5jb2Rlci5weQpAQCAtMTI1LDE0ICsxMjUsMTIgQEAKICAgICAgICAgSWYgaW5kZW50IGlzIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIsIHRoZW4gSlNPTiBhcnJheQogICAgICAgICBlbGVtZW50cyBhbmQgb2JqZWN0IG1lbWJlcnMgd2lsbCBiZSBwcmV0dHktcHJpbnRlZCB3aXRoIHRoYXQKICAgICAgICAgaW5kZW50IGxldmVsLiAgQW4gaW5kZW50IGxldmVsIG9mIDAgd2lsbCBvbmx5IGluc2VydCBuZXdsaW5lcy4KLSAgICAgICAgTm9uZSBpcyB0aGUgbW9zdCBjb21wYWN0IHJlcHJlc2VudGF0aW9uLiAgU2luY2UgdGhlIGRlZmF1bHQKLSAgICAgICAgaXRlbSBzZXBhcmF0b3IgaXMgJywgJywgIHRoZSBvdXRwdXQgbWlnaHQgaW5jbHVkZSB0cmFpbGluZwotICAgICAgICB3aGl0ZXNwYWNlIHdoZW4gaW5kZW50IGlzIHNwZWNpZmllZC4gIFlvdSBjYW4gdXNlCi0gICAgICAgIHNlcGFyYXRvcnM9KCcsJywgJzogJykgdG8gYXZvaWQgdGhpcy4KKyAgICAgICAgTm9uZSBpcyB0aGUgbW9zdCBjb21wYWN0IHJlcHJlc2VudGF0aW9uLgogCi0gICAgICAgIElmIHNwZWNpZmllZCwgc2VwYXJhdG9ycyBzaG91bGQgYmUgYSAoaXRlbV9zZXBhcmF0b3IsIGtleV9zZXBhcmF0b3IpCi0gICAgICAgIHR1cGxlLiAgVGhlIGRlZmF1bHQgaXMgKCcsICcsICc6ICcpLiAgVG8gZ2V0IHRoZSBtb3N0IGNvbXBhY3QgSlNPTgotICAgICAgICByZXByZXNlbnRhdGlvbiB5b3Ugc2hvdWxkIHNwZWNpZnkgKCcsJywgJzonKSB0byBlbGltaW5hdGUgd2hpdGVzcGFjZS4KKyAgICAgICAgSWYgc3BlY2lmaWVkLCBzZXBhcmF0b3JzIHNob3VsZCBiZSBhbiAoaXRlbV9zZXBhcmF0b3IsIGtleV9zZXBhcmF0b3IpCisgICAgICAgIHR1cGxlLiAgVGhlIGRlZmF1bHQgaXMgKCcsICcsICc6ICcpIGlmICppbmRlbnQqIGlzIGBgTm9uZWBgIGFuZAorICAgICAgICAoJywnLCAnOiAnKSBvdGhlcndpc2UuICBUbyBnZXQgdGhlIG1vc3QgY29tcGFjdCBKU09OIHJlcHJlc2VudGF0aW9uLAorICAgICAgICB5b3Ugc2hvdWxkIHNwZWNpZnkgKCcsJywgJzonKSB0byBlbGltaW5hdGUgd2hpdGVzcGFjZS4KIAogICAgICAgICBJZiBzcGVjaWZpZWQsIGRlZmF1bHQgaXMgYSBmdW5jdGlvbiB0aGF0IGdldHMgY2FsbGVkIGZvciBvYmplY3RzCiAgICAgICAgIHRoYXQgY2FuJ3Qgb3RoZXJ3aXNlIGJlIHNlcmlhbGl6ZWQuICBJdCBzaG91bGQgcmV0dXJuIGEgSlNPTiBlbmNvZGFibGUKQEAgLTE0OCw2ICsxNDYsOCBAQAogICAgICAgICBzZWxmLmluZGVudCA9IGluZGVudAogICAgICAgICBpZiBzZXBhcmF0b3JzIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgc2VsZi5pdGVtX3NlcGFyYXRvciwgc2VsZi5rZXlfc2VwYXJhdG9yID0gc2VwYXJhdG9ycworICAgICAgICBlbGlmIGluZGVudCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuaXRlbV9zZXBhcmF0b3IgPSAnLCcKICAgICAgICAgaWYgZGVmYXVsdCBpcyBub3QgTm9uZToKICAgICAgICAgICAgIHNlbGYuZGVmYXVsdCA9IGRlZmF1bHQKIApAQCAtMTc1LDYgKzE3NSw3IEBACiAgICAgZGVmIGVuY29kZShzZWxmLCBvKToKICAgICAgICAgIiIiUmV0dXJuIGEgSlNPTiBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBQeXRob24gZGF0YSBzdHJ1Y3R1cmUuCiAKKyAgICAgICAgPj4+IGZyb20ganNvbi5lbmNvZGVyIGltcG9ydCBKU09ORW5jb2RlcgogICAgICAgICA+Pj4gSlNPTkVuY29kZXIoKS5lbmNvZGUoeyJmb28iOiBbImJhciIsICJiYXoiXX0pCiAgICAgICAgICd7ImZvbyI6IFsiYmFyIiwgImJheiJdfScKIApAQCAtMjk4LDkgKzI5OSwxMyBAQAogICAgICAgICAgICAgZWxpZiB2YWx1ZSBpcyBGYWxzZToKICAgICAgICAgICAgICAgICB5aWVsZCBidWYgKyAnZmFsc2UnCiAgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGludCk6Ci0gICAgICAgICAgICAgICAgeWllbGQgYnVmICsgc3RyKHZhbHVlKQorICAgICAgICAgICAgICAgICMgU3ViY2xhc3NlcyBvZiBpbnQvZmxvYXQgbWF5IG92ZXJyaWRlIF9fc3RyX18sIGJ1dCB3ZSBzdGlsbAorICAgICAgICAgICAgICAgICMgd2FudCB0byBlbmNvZGUgdGhlbSBhcyBpbnRlZ2Vycy9mbG9hdHMgaW4gSlNPTi4gT25lIGV4YW1wbGUKKyAgICAgICAgICAgICAgICAjIHdpdGhpbiB0aGUgc3RhbmRhcmQgbGlicmFyeSBpcyBJbnRFbnVtLgorICAgICAgICAgICAgICAgIHlpZWxkIGJ1ZiArIHN0cihpbnQodmFsdWUpKQogICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBmbG9hdCk6Ci0gICAgICAgICAgICAgICAgeWllbGQgYnVmICsgX2Zsb2F0c3RyKHZhbHVlKQorICAgICAgICAgICAgICAgICMgc2VlIGNvbW1lbnQgYWJvdmUgZm9yIGludAorICAgICAgICAgICAgICAgIHlpZWxkIGJ1ZiArIF9mbG9hdHN0cihmbG9hdCh2YWx1ZSkpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHlpZWxkIGJ1ZgogICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIChsaXN0LCB0dXBsZSkpOgpAQCAtMzA5LDggKzMxNCw3IEBACiAgICAgICAgICAgICAgICAgICAgIGNodW5rcyA9IF9pdGVyZW5jb2RlX2RpY3QodmFsdWUsIF9jdXJyZW50X2luZGVudF9sZXZlbCkKICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICBjaHVua3MgPSBfaXRlcmVuY29kZSh2YWx1ZSwgX2N1cnJlbnRfaW5kZW50X2xldmVsKQotICAgICAgICAgICAgICAgIGZvciBjaHVuayBpbiBjaHVua3M6Ci0gICAgICAgICAgICAgICAgICAgIHlpZWxkIGNodW5rCisgICAgICAgICAgICAgICAgeWllbGQgZnJvbSBjaHVua3MKICAgICAgICAgaWYgbmV3bGluZV9pbmRlbnQgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBfY3VycmVudF9pbmRlbnRfbGV2ZWwgLT0gMQogICAgICAgICAgICAgeWllbGQgJ1xuJyArIF9pbmRlbnQgKiBfY3VycmVudF9pbmRlbnRfbGV2ZWwKQEAgLTM0Nyw3ICszNTEsOCBAQAogICAgICAgICAgICAgIyBKYXZhU2NyaXB0IGlzIHdlYWtseSB0eXBlZCBmb3IgdGhlc2UsIHNvIGl0IG1ha2VzIHNlbnNlIHRvCiAgICAgICAgICAgICAjIGFsc28gYWxsb3cgdGhlbS4gIE1hbnkgZW5jb2RlcnMgc2VlbSB0byBkbyBzb21ldGhpbmcgbGlrZSB0aGlzLgogICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKGtleSwgZmxvYXQpOgotICAgICAgICAgICAgICAgIGtleSA9IF9mbG9hdHN0cihrZXkpCisgICAgICAgICAgICAgICAgIyBzZWUgY29tbWVudCBmb3IgaW50L2Zsb2F0IGluIF9tYWtlX2l0ZXJlbmNvZGUKKyAgICAgICAgICAgICAgICBrZXkgPSBfZmxvYXRzdHIoZmxvYXQoa2V5KSkKICAgICAgICAgICAgIGVsaWYga2V5IGlzIFRydWU6CiAgICAgICAgICAgICAgICAga2V5ID0gJ3RydWUnCiAgICAgICAgICAgICBlbGlmIGtleSBpcyBGYWxzZToKQEAgLTM1NSw3ICszNjAsOCBAQAogICAgICAgICAgICAgZWxpZiBrZXkgaXMgTm9uZToKICAgICAgICAgICAgICAgICBrZXkgPSAnbnVsbCcKICAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShrZXksIGludCk6Ci0gICAgICAgICAgICAgICAga2V5ID0gc3RyKGtleSkKKyAgICAgICAgICAgICAgICAjIHNlZSBjb21tZW50IGZvciBpbnQvZmxvYXQgaW4gX21ha2VfaXRlcmVuY29kZQorICAgICAgICAgICAgICAgIGtleSA9IHN0cihpbnQoa2V5KSkKICAgICAgICAgICAgIGVsaWYgX3NraXBrZXlzOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICBlbHNlOgpAQCAtMzc1LDkgKzM4MSwxMSBAQAogICAgICAgICAgICAgZWxpZiB2YWx1ZSBpcyBGYWxzZToKICAgICAgICAgICAgICAgICB5aWVsZCAnZmFsc2UnCiAgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGludCk6Ci0gICAgICAgICAgICAgICAgeWllbGQgc3RyKHZhbHVlKQorICAgICAgICAgICAgICAgICMgc2VlIGNvbW1lbnQgZm9yIGludC9mbG9hdCBpbiBfbWFrZV9pdGVyZW5jb2RlCisgICAgICAgICAgICAgICAgeWllbGQgc3RyKGludCh2YWx1ZSkpCiAgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGZsb2F0KToKLSAgICAgICAgICAgICAgICB5aWVsZCBfZmxvYXRzdHIodmFsdWUpCisgICAgICAgICAgICAgICAgIyBzZWUgY29tbWVudCBmb3IgaW50L2Zsb2F0IGluIF9tYWtlX2l0ZXJlbmNvZGUKKyAgICAgICAgICAgICAgICB5aWVsZCBfZmxvYXRzdHIoZmxvYXQodmFsdWUpKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCAobGlzdCwgdHVwbGUpKToKICAgICAgICAgICAgICAgICAgICAgY2h1bmtzID0gX2l0ZXJlbmNvZGVfbGlzdCh2YWx1ZSwgX2N1cnJlbnRfaW5kZW50X2xldmVsKQpAQCAtMzg1LDggKzM5Myw3IEBACiAgICAgICAgICAgICAgICAgICAgIGNodW5rcyA9IF9pdGVyZW5jb2RlX2RpY3QodmFsdWUsIF9jdXJyZW50X2luZGVudF9sZXZlbCkKICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICBjaHVua3MgPSBfaXRlcmVuY29kZSh2YWx1ZSwgX2N1cnJlbnRfaW5kZW50X2xldmVsKQotICAgICAgICAgICAgICAgIGZvciBjaHVuayBpbiBjaHVua3M6Ci0gICAgICAgICAgICAgICAgICAgIHlpZWxkIGNodW5rCisgICAgICAgICAgICAgICAgeWllbGQgZnJvbSBjaHVua3MKICAgICAgICAgaWYgbmV3bGluZV9pbmRlbnQgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBfY3VycmVudF9pbmRlbnRfbGV2ZWwgLT0gMQogICAgICAgICAgICAgeWllbGQgJ1xuJyArIF9pbmRlbnQgKiBfY3VycmVudF9pbmRlbnRfbGV2ZWwKQEAgLTQwNCwxNSArNDExLDE1IEBACiAgICAgICAgIGVsaWYgbyBpcyBGYWxzZToKICAgICAgICAgICAgIHlpZWxkICdmYWxzZScKICAgICAgICAgZWxpZiBpc2luc3RhbmNlKG8sIGludCk6Ci0gICAgICAgICAgICB5aWVsZCBzdHIobykKKyAgICAgICAgICAgICMgc2VlIGNvbW1lbnQgZm9yIGludC9mbG9hdCBpbiBfbWFrZV9pdGVyZW5jb2RlCisgICAgICAgICAgICB5aWVsZCBzdHIoaW50KG8pKQogICAgICAgICBlbGlmIGlzaW5zdGFuY2UobywgZmxvYXQpOgotICAgICAgICAgICAgeWllbGQgX2Zsb2F0c3RyKG8pCisgICAgICAgICAgICAjIHNlZSBjb21tZW50IGZvciBpbnQvZmxvYXQgaW4gX21ha2VfaXRlcmVuY29kZQorICAgICAgICAgICAgeWllbGQgX2Zsb2F0c3RyKGZsb2F0KG8pKQogICAgICAgICBlbGlmIGlzaW5zdGFuY2UobywgKGxpc3QsIHR1cGxlKSk6Ci0gICAgICAgICAgICBmb3IgY2h1bmsgaW4gX2l0ZXJlbmNvZGVfbGlzdChvLCBfY3VycmVudF9pbmRlbnRfbGV2ZWwpOgotICAgICAgICAgICAgICAgIHlpZWxkIGNodW5rCisgICAgICAgICAgICB5aWVsZCBmcm9tIF9pdGVyZW5jb2RlX2xpc3QobywgX2N1cnJlbnRfaW5kZW50X2xldmVsKQogICAgICAgICBlbGlmIGlzaW5zdGFuY2UobywgZGljdCk6Ci0gICAgICAgICAgICBmb3IgY2h1bmsgaW4gX2l0ZXJlbmNvZGVfZGljdChvLCBfY3VycmVudF9pbmRlbnRfbGV2ZWwpOgotICAgICAgICAgICAgICAgIHlpZWxkIGNodW5rCisgICAgICAgICAgICB5aWVsZCBmcm9tIF9pdGVyZW5jb2RlX2RpY3QobywgX2N1cnJlbnRfaW5kZW50X2xldmVsKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgaWYgbWFya2VycyBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICBtYXJrZXJpZCA9IGlkKG8pCkBAIC00MjAsOCArNDI3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkIikKICAgICAgICAgICAgICAgICBtYXJrZXJzW21hcmtlcmlkXSA9IG8KICAgICAgICAgICAgIG8gPSBfZGVmYXVsdChvKQotICAgICAgICAgICAgZm9yIGNodW5rIGluIF9pdGVyZW5jb2RlKG8sIF9jdXJyZW50X2luZGVudF9sZXZlbCk6Ci0gICAgICAgICAgICAgICAgeWllbGQgY2h1bmsKKyAgICAgICAgICAgIHlpZWxkIGZyb20gX2l0ZXJlbmNvZGUobywgX2N1cnJlbnRfaW5kZW50X2xldmVsKQogICAgICAgICAgICAgaWYgbWFya2VycyBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICBkZWwgbWFya2Vyc1ttYXJrZXJpZF0KICAgICByZXR1cm4gX2l0ZXJlbmNvZGUKZGlmZiAtLWdpdCBhL0xpYi9qc29uL3NjYW5uZXIucHkgYi9MaWIvanNvbi9zY2FubmVyLnB5CmluZGV4IDIzZWVmNjEuLjg2NDI2Y2QgMTAwNjQ0Ci0tLSBhL0xpYi9qc29uL3NjYW5uZXIucHkKKysrIGIvTGliL2pzb24vc2Nhbm5lci5weQpAQCAtMjksNyArMjksNyBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBuZXh0Y2hhciA9IHN0cmluZ1tpZHhdCiAgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgotICAgICAgICAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvbgorICAgICAgICAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvbihpZHgpCiAKICAgICAgICAgaWYgbmV4dGNoYXIgPT0gJyInOgogICAgICAgICAgICAgcmV0dXJuIHBhcnNlX3N0cmluZyhzdHJpbmcsIGlkeCArIDEsIHN0cmljdCkKQEAgLTYwLDcgKzYwLDcgQEAKICAgICAgICAgZWxpZiBuZXh0Y2hhciA9PSAnLScgYW5kIHN0cmluZ1tpZHg6aWR4ICsgOV0gPT0gJy1JbmZpbml0eSc6CiAgICAgICAgICAgICByZXR1cm4gcGFyc2VfY29uc3RhbnQoJy1JbmZpbml0eScpLCBpZHggKyA5CiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uCisgICAgICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uKGlkeCkKIAogICAgIGRlZiBzY2FuX29uY2Uoc3RyaW5nLCBpZHgpOgogICAgICAgICB0cnk6CmRpZmYgLS1naXQgYS9MaWIvanNvbi90b29sLnB5IGIvTGliL2pzb24vdG9vbC5weQppbmRleCBlY2Y5YzQ3Li43ZGI0NTI4IDEwMDY0NAotLS0gYS9MaWIvanNvbi90b29sLnB5CisrKyBiL0xpYi9qc29uL3Rvb2wucHkKQEAgLTMxLDggKzMxLDcgQEAKICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IgYXMgZToKICAgICAgICAgICAgIHJhaXNlIFN5c3RlbUV4aXQoZSkKICAgICB3aXRoIG91dGZpbGU6Ci0gICAgICAgIGpzb24uZHVtcChvYmosIG91dGZpbGUsIHNvcnRfa2V5cz1UcnVlLAotICAgICAgICAgICAgICAgICAgaW5kZW50PTQsIHNlcGFyYXRvcnM9KCcsJywgJzogJykpCisgICAgICAgIGpzb24uZHVtcChvYmosIG91dGZpbGUsIHNvcnRfa2V5cz1UcnVlLCBpbmRlbnQ9NCkKICAgICAgICAgb3V0ZmlsZS53cml0ZSgnXG4nKQogCiAKZGlmZiAtLWdpdCBhL0xpYi9rZXl3b3JkLnB5IGIvTGliL2tleXdvcmQucHkKaW5kZXggZGFkMzljYy4uNmUxZTg4MiAxMDA3NTUKLS0tIGEvTGliL2tleXdvcmQucHkKKysrIGIvTGliL2tleXdvcmQucHkKQEAgLTYwLDYgKzYwLDEyIEBACiAgICAgaWYgbGVuKGFyZ3MpID4gMTogb3B0ZmlsZSA9IGFyZ3NbMV0KICAgICBlbHNlOiBvcHRmaWxlID0gIkxpYi9rZXl3b3JkLnB5IgogCisgICAgIyBsb2FkIHRoZSBvdXRwdXQgc2tlbGV0b24gZnJvbSB0aGUgdGFyZ2V0LCB0YWtpbmcgY2FyZSB0byBwcmVzZXJ2ZSBpdHMKKyAgICAjIG5ld2xpbmUgY29udmVudGlvbi4KKyAgICB3aXRoIG9wZW4ob3B0ZmlsZSwgbmV3bGluZT0nJykgYXMgZnA6CisgICAgICAgIGZvcm1hdCA9IGZwLnJlYWRsaW5lcygpCisgICAgbmwgPSBmb3JtYXRbMF1bbGVuKGZvcm1hdFswXS5zdHJpcCgpKTpdIGlmIGZvcm1hdCBlbHNlICdcbicKKwogICAgICMgc2NhbiB0aGUgc291cmNlIGZpbGUgZm9yIGtleXdvcmRzCiAgICAgd2l0aCBvcGVuKGlwdGZpbGUpIGFzIGZwOgogICAgICAgICBzdHJwcm9nID0gcmUuY29tcGlsZSgnIihbXiJdKykiJykKQEAgLTY4LDI2ICs3NCwyMSBAQAogICAgICAgICAgICAgaWYgJ3sxLCAiJyBpbiBsaW5lOgogICAgICAgICAgICAgICAgIG1hdGNoID0gc3RycHJvZy5zZWFyY2gobGluZSkKICAgICAgICAgICAgICAgICBpZiBtYXRjaDoKLSAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCIgICAgICAgICciICsgbWF0Y2guZ3JvdXAoMSkgKyAiJyxcbiIpCisgICAgICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgiICAgICAgICAnIiArIG1hdGNoLmdyb3VwKDEpICsgIicsIiArIG5sKQogICAgIGxpbmVzLnNvcnQoKQogCi0gICAgIyBsb2FkIHRoZSBvdXRwdXQgc2tlbGV0b24gZnJvbSB0aGUgdGFyZ2V0Ci0gICAgd2l0aCBvcGVuKG9wdGZpbGUpIGFzIGZwOgotICAgICAgICBmb3JtYXQgPSBmcC5yZWFkbGluZXMoKQotCi0gICAgIyBpbnNlcnQgdGhlIGxpbmVzIG9mIGtleXdvcmRzCisgICAgIyBpbnNlcnQgdGhlIGxpbmVzIG9mIGtleXdvcmRzIGludG8gdGhlIHNrZWxldG9uCiAgICAgdHJ5OgotICAgICAgICBzdGFydCA9IGZvcm1hdC5pbmRleCgiIy0tc3RhcnQga2V5d29yZHMtLVxuIikgKyAxCi0gICAgICAgIGVuZCA9IGZvcm1hdC5pbmRleCgiIy0tZW5kIGtleXdvcmRzLS1cbiIpCisgICAgICAgIHN0YXJ0ID0gZm9ybWF0LmluZGV4KCIjLS1zdGFydCBrZXl3b3Jkcy0tIiArIG5sKSArIDEKKyAgICAgICAgZW5kID0gZm9ybWF0LmluZGV4KCIjLS1lbmQga2V5d29yZHMtLSIgKyBubCkKICAgICAgICAgZm9ybWF0W3N0YXJ0OmVuZF0gPSBsaW5lcwogICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgogICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJ0YXJnZXQgZG9lcyBub3QgY29udGFpbiBmb3JtYXQgbWFya2Vyc1xuIikKICAgICAgICAgc3lzLmV4aXQoMSkKIAogICAgICMgd3JpdGUgdGhlIG91dHB1dCBmaWxlCi0gICAgZnAgPSBvcGVuKG9wdGZpbGUsICd3JykKLSAgICBmcC53cml0ZSgnJy5qb2luKGZvcm1hdCkpCi0gICAgZnAuY2xvc2UoKQorICAgIHdpdGggb3BlbihvcHRmaWxlLCAndycsIG5ld2xpbmU9JycpIGFzIGZwOgorICAgICAgICBmcC53cml0ZWxpbmVzKGZvcm1hdCkKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICBtYWluKCkKZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL0dyYW1tYXIudHh0IGIvTGliL2xpYjJ0bzMvR3JhbW1hci50eHQKaW5kZXggMWUxZjI0Yy4uZTY2N2JjZCAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvR3JhbW1hci50eHQKKysrIGIvTGliL2xpYjJ0bzMvR3JhbW1hci50eHQKQEAgLTU2LDcgKzU2LDcgQEAKIGV4cHJfc3RtdDogdGVzdGxpc3Rfc3Rhcl9leHByIChhdWdhc3NpZ24gKHlpZWxkX2V4cHJ8dGVzdGxpc3QpIHwKICAgICAgICAgICAgICAgICAgICAgICgnPScgKHlpZWxkX2V4cHJ8dGVzdGxpc3Rfc3Rhcl9leHByKSkqKQogdGVzdGxpc3Rfc3Rhcl9leHByOiAodGVzdHxzdGFyX2V4cHIpICgnLCcgKHRlc3R8c3Rhcl9leHByKSkqIFsnLCddCi1hdWdhc3NpZ246ICgnKz0nIHwgJy09JyB8ICcqPScgfCAnLz0nIHwgJyU9JyB8ICcmPScgfCAnfD0nIHwgJ149JyB8CithdWdhc3NpZ246ICgnKz0nIHwgJy09JyB8ICcqPScgfCAnQD0nIHwgJy89JyB8ICclPScgfCAnJj0nIHwgJ3w9JyB8ICdePScgfAogICAgICAgICAgICAgJzw8PScgfCAnPj49JyB8ICcqKj0nIHwgJy8vPScpCiAjIEZvciBub3JtYWwgYXNzaWdubWVudHMsIGFkZGl0aW9uYWwgcmVzdHJpY3Rpb25zIGVuZm9yY2VkIGJ5IHRoZSBpbnRlcnByZXRlcgogcHJpbnRfc3RtdDogJ3ByaW50JyAoIFsgdGVzdCAoJywnIHRlc3QpKiBbJywnXSBdIHwKQEAgLTExOSw3ICsxMTksNyBAQAogYW5kX2V4cHI6IHNoaWZ0X2V4cHIgKCcmJyBzaGlmdF9leHByKSoKIHNoaWZ0X2V4cHI6IGFyaXRoX2V4cHIgKCgnPDwnfCc+PicpIGFyaXRoX2V4cHIpKgogYXJpdGhfZXhwcjogdGVybSAoKCcrJ3wnLScpIHRlcm0pKgotdGVybTogZmFjdG9yICgoJyonfCcvJ3wnJSd8Jy8vJykgZmFjdG9yKSoKK3Rlcm06IGZhY3RvciAoKCcqJ3wnQCd8Jy8nfCclJ3wnLy8nKSBmYWN0b3IpKgogZmFjdG9yOiAoJysnfCctJ3wnficpIGZhY3RvciB8IHBvd2VyCiBwb3dlcjogYXRvbSB0cmFpbGVyKiBbJyoqJyBmYWN0b3JdCiBhdG9tOiAoJygnIFt5aWVsZF9leHByfHRlc3RsaXN0X2dleHBdICcpJyB8CkBAIC0xNTUsNCArMTU1LDUgQEAKICMgbm90IHVzZWQgaW4gZ3JhbW1hciwgYnV0IG1heSBhcHBlYXIgaW4gIm5vZGUiIHBhc3NlZCBmcm9tIFBhcnNlciB0byBDb21waWxlcgogZW5jb2RpbmdfZGVjbDogTkFNRQogCi15aWVsZF9leHByOiAneWllbGQnIFt0ZXN0bGlzdF0KK3lpZWxkX2V4cHI6ICd5aWVsZCcgW3lpZWxkX2FyZ10KK3lpZWxkX2FyZzogJ2Zyb20nIHRlc3QgfCB0ZXN0bGlzdApkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvYnRtX3V0aWxzLnB5IGIvTGliL2xpYjJ0bzMvYnRtX3V0aWxzLnB5CmluZGV4IDIyNzZkYzkuLjMzOTc1MGUgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL2J0bV91dGlscy5weQorKysgYi9MaWIvbGliMnRvMy9idG1fdXRpbHMucHkKQEAgLTk2LDggKzk2LDcgQEAKICAgICBkZWYgbGVhdmVzKHNlbGYpOgogICAgICAgICAiR2VuZXJhdG9yIHRoYXQgcmV0dXJucyB0aGUgbGVhdmVzIG9mIHRoZSB0cmVlIgogICAgICAgICBmb3IgY2hpbGQgaW4gc2VsZi5jaGlsZHJlbjoKLSAgICAgICAgICAgIGZvciB4IGluIGNoaWxkLmxlYXZlcygpOgotICAgICAgICAgICAgICAgIHlpZWxkIHgKKyAgICAgICAgICAgIHlpZWxkIGZyb20gY2hpbGQubGVhdmVzKCkKICAgICAgICAgaWYgbm90IHNlbGYuY2hpbGRyZW46CiAgICAgICAgICAgICB5aWVsZCBzZWxmCiAKQEAgLTI3Nyw3ICsyNzYsNiBAQAogICAgIHN1Yi1pdGVyYWJsZXMiIiIKICAgICBmb3IgeCBpbiBzZXF1ZW5jZToKICAgICAgICAgaWYgaXNpbnN0YW5jZSh4LCAobGlzdCwgdHVwbGUpKToKLSAgICAgICAgICAgIGZvciB5IGluIHJlY190ZXN0KHgsIHRlc3RfZnVuYyk6Ci0gICAgICAgICAgICAgICAgeWllbGQgeQorICAgICAgICAgICAgeWllbGQgZnJvbSByZWNfdGVzdCh4LCB0ZXN0X2Z1bmMpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICB5aWVsZCB0ZXN0X2Z1bmMoeCkKZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL2ZpeGVyX3V0aWwucHkgYi9MaWIvbGliMnRvMy9maXhlcl91dGlsLnB5CmluZGV4IDYwZDIxOWYuLjQ0NTAyYmYgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL2ZpeGVyX3V0aWwucHkKKysrIGIvTGliL2xpYjJ0bzMvZml4ZXJfdXRpbC5weQpAQCAtMTI5LDYgKzEyOSwyOSBAQAogICAgIGltcCA9IE5vZGUoc3ltcy5pbXBvcnRfZnJvbSwgY2hpbGRyZW4pCiAgICAgcmV0dXJuIGltcAogCitkZWYgSW1wb3J0QW5kQ2FsbChub2RlLCByZXN1bHRzLCBuYW1lcyk6CisgICAgIiIiUmV0dXJucyBhbiBpbXBvcnQgc3RhdGVtZW50IGFuZCBjYWxscyBhIG1ldGhvZAorICAgIG9mIHRoZSBtb2R1bGU6CisKKyAgICBpbXBvcnQgbW9kdWxlCisgICAgbW9kdWxlLm5hbWUoKSIiIgorICAgIG9iaiA9IHJlc3VsdHNbIm9iaiJdLmNsb25lKCkKKyAgICBpZiBvYmoudHlwZSA9PSBzeW1zLmFyZ2xpc3Q6CisgICAgICAgIG5ld2FyZ2xpc3QgPSBvYmouY2xvbmUoKQorICAgIGVsc2U6CisgICAgICAgIG5ld2FyZ2xpc3QgPSBOb2RlKHN5bXMuYXJnbGlzdCwgW29iai5jbG9uZSgpXSkKKyAgICBhZnRlciA9IHJlc3VsdHNbImFmdGVyIl0KKyAgICBpZiBhZnRlcjoKKyAgICAgICAgYWZ0ZXIgPSBbbi5jbG9uZSgpIGZvciBuIGluIGFmdGVyXQorICAgIG5ldyA9IE5vZGUoc3ltcy5wb3dlciwKKyAgICAgICAgICAgICAgIEF0dHIoTmFtZShuYW1lc1swXSksIE5hbWUobmFtZXNbMV0pKSArCisgICAgICAgICAgICAgICBbTm9kZShzeW1zLnRyYWlsZXIsCisgICAgICAgICAgICAgICAgICAgICBbcmVzdWx0c1sibHBhciJdLmNsb25lKCksCisgICAgICAgICAgICAgICAgICAgICAgbmV3YXJnbGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzWyJycGFyIl0uY2xvbmUoKV0pXSArIGFmdGVyKQorICAgIG5ldy5wcmVmaXggPSBub2RlLnByZWZpeAorICAgIHJldHVybiBuZXcKKwogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyMjIERldGVybWluZSB3aGV0aGVyIGEgbm9kZSByZXByZXNlbnRzIGEgZ2l2ZW4gbGl0ZXJhbApAQCAtMTY0LDggKzE4Nyw4IEBACiAgICAgcmV0dXJuIE5vZGUoc3ltcy5hdG9tLCBbTFBhcmVuKCksIG5vZGUsIFJQYXJlbigpXSkKIAogCi1jb25zdW1pbmdfY2FsbHMgPSBzZXQoWyJzb3J0ZWQiLCAibGlzdCIsICJzZXQiLCAiYW55IiwgImFsbCIsICJ0dXBsZSIsICJzdW0iLAotICAgICAgICAgICAgICAgICAgICAgICAibWluIiwgIm1heCIsICJlbnVtZXJhdGUiXSkKK2NvbnN1bWluZ19jYWxscyA9IHsic29ydGVkIiwgImxpc3QiLCAic2V0IiwgImFueSIsICJhbGwiLCAidHVwbGUiLCAic3VtIiwKKyAgICAgICAgICAgICAgICAgICAibWluIiwgIm1heCIsICJlbnVtZXJhdGUifQogCiBkZWYgYXR0cl9jaGFpbihvYmosIGF0dHIpOgogICAgICIiIkZvbGxvdyBhbiBhdHRyaWJ1dGUgY2hhaW4uCkBAIC0zMzYsNyArMzU5LDcgQEAKICAgICByb290Lmluc2VydF9jaGlsZChpbnNlcnRfcG9zLCBOb2RlKHN5bXMuc2ltcGxlX3N0bXQsIGNoaWxkcmVuKSkKIAogCi1fZGVmX3N5bXMgPSBzZXQoW3N5bXMuY2xhc3NkZWYsIHN5bXMuZnVuY2RlZl0pCitfZGVmX3N5bXMgPSB7c3ltcy5jbGFzc2RlZiwgc3ltcy5mdW5jZGVmfQogZGVmIGZpbmRfYmluZGluZyhuYW1lLCBub2RlLCBwYWNrYWdlPU5vbmUpOgogICAgICIiIiBSZXR1cm5zIHRoZSBub2RlIHdoaWNoIGJpbmRzIHZhcmlhYmxlIG5hbWUsIG90aGVyd2lzZSBOb25lLgogICAgICAgICBJZiBvcHRpb25hbCBhcmd1bWVudCBwYWNrYWdlIGlzIHN1cHBsaWVkLCBvbmx5IGltcG9ydHMgd2lsbApAQCAtMzc5LDcgKzQwMiw3IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIHJldAogICAgIHJldHVybiBOb25lCiAKLV9ibG9ja19zeW1zID0gc2V0KFtzeW1zLmZ1bmNkZWYsIHN5bXMuY2xhc3NkZWYsIHN5bXMudHJhaWxlcl0pCitfYmxvY2tfc3ltcyA9IHtzeW1zLmZ1bmNkZWYsIHN5bXMuY2xhc3NkZWYsIHN5bXMudHJhaWxlcn0KIGRlZiBfZmluZChuYW1lLCBub2RlKToKICAgICBub2RlcyA9IFtub2RlXQogICAgIHdoaWxlIG5vZGVzOgpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2Fzc2VydHMucHkgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfYXNzZXJ0cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YmNlYzg4Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2Fzc2VydHMucHkKQEAgLTAsMCArMSwzNCBAQAorIiIiRml4ZXIgdGhhdCByZXBsYWNlcyBkZXByZWNhdGVkIHVuaXR0ZXN0IG1ldGhvZCBuYW1lcy4iIiIKKworIyBBdXRob3I6IEV6aW8gTWVsb3R0aQorCitmcm9tIC4uZml4ZXJfYmFzZSBpbXBvcnQgQmFzZUZpeAorZnJvbSAuLmZpeGVyX3V0aWwgaW1wb3J0IE5hbWUKKworTkFNRVMgPSBkaWN0KAorICAgIGFzc2VydF89ImFzc2VydFRydWUiLAorICAgIGFzc2VydEVxdWFscz0iYXNzZXJ0RXF1YWwiLAorICAgIGFzc2VydE5vdEVxdWFscz0iYXNzZXJ0Tm90RXF1YWwiLAorICAgIGFzc2VydEFsbW9zdEVxdWFscz0iYXNzZXJ0QWxtb3N0RXF1YWwiLAorICAgIGFzc2VydE5vdEFsbW9zdEVxdWFscz0iYXNzZXJ0Tm90QWxtb3N0RXF1YWwiLAorICAgIGFzc2VydFJlZ2V4cE1hdGNoZXM9ImFzc2VydFJlZ2V4IiwKKyAgICBhc3NlcnRSYWlzZXNSZWdleHA9ImFzc2VydFJhaXNlc1JlZ2V4IiwKKyAgICBmYWlsVW5sZXNzRXF1YWw9ImFzc2VydEVxdWFsIiwKKyAgICBmYWlsSWZFcXVhbD0iYXNzZXJ0Tm90RXF1YWwiLAorICAgIGZhaWxVbmxlc3NBbG1vc3RFcXVhbD0iYXNzZXJ0QWxtb3N0RXF1YWwiLAorICAgIGZhaWxJZkFsbW9zdEVxdWFsPSJhc3NlcnROb3RBbG1vc3RFcXVhbCIsCisgICAgZmFpbFVubGVzcz0iYXNzZXJ0VHJ1ZSIsCisgICAgZmFpbFVubGVzc1JhaXNlcz0iYXNzZXJ0UmFpc2VzIiwKKyAgICBmYWlsSWY9ImFzc2VydEZhbHNlIiwKKykKKworCitjbGFzcyBGaXhBc3NlcnRzKEJhc2VGaXgpOgorCisgICAgUEFUVEVSTiA9ICIiIgorICAgICAgICAgICAgICBwb3dlcjwgYW55KyB0cmFpbGVyPCAnLicgbWV0aD0oJXMpPiBhbnkqID4KKyAgICAgICAgICAgICAgIiIiICUgJ3wnLmpvaW4obWFwKHJlcHIsIE5BTUVTKSkKKworICAgIGRlZiB0cmFuc2Zvcm0oc2VsZiwgbm9kZSwgcmVzdWx0cyk6CisgICAgICAgIG5hbWUgPSByZXN1bHRzWyJtZXRoIl1bMF0KKyAgICAgICAgbmFtZS5yZXBsYWNlKE5hbWUoTkFNRVNbc3RyKG5hbWUpXSwgcHJlZml4PW5hbWUucHJlZml4KSkKZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9kaWN0LnB5IGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2RpY3QucHkKaW5kZXggNGNjMzcxNy4uOTYzZjk1MiAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2RpY3QucHkKKysrIGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2RpY3QucHkKQEAgLTM2LDcgKzM2LDcgQEAKIGZyb20gLi4gaW1wb3J0IGZpeGVyX3V0aWwKIAogCi1pdGVyX2V4ZW1wdCA9IGZpeGVyX3V0aWwuY29uc3VtaW5nX2NhbGxzIHwgc2V0KFsiaXRlciJdKQoraXRlcl9leGVtcHQgPSBmaXhlcl91dGlsLmNvbnN1bWluZ19jYWxscyB8IHsiaXRlciJ9CiAKIAogY2xhc3MgRml4RGljdChmaXhlcl9iYXNlLkJhc2VGaXgpOgpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2V4aXRmdW5jLnB5IGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2V4aXRmdW5jLnB5CmluZGV4IDlhZmMyZmEuLjJlNDc4ODcgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9leGl0ZnVuYy5weQorKysgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfZXhpdGZ1bmMucHkKQEAgLTM1LDcgKzM1LDcgQEAKICAgICAgICAgc2VsZi5zeXNfaW1wb3J0ID0gTm9uZQogCiAgICAgZGVmIHRyYW5zZm9ybShzZWxmLCBub2RlLCByZXN1bHRzKToKLSAgICAgICAgIyBGaXJzdCwgZmluZCBhIHRoZSBzeXMgaW1wb3J0LiBXZSdsbCBqdXN0IGhvcGUgaXQncyBnbG9iYWwgc2NvcGUuCisgICAgICAgICMgRmlyc3QsIGZpbmQgdGhlIHN5cyBpbXBvcnQuIFdlJ2xsIGp1c3QgaG9wZSBpdCdzIGdsb2JhbCBzY29wZS4KICAgICAgICAgaWYgInN5c19pbXBvcnQiIGluIHJlc3VsdHM6CiAgICAgICAgICAgICBpZiBzZWxmLnN5c19pbXBvcnQgaXMgTm9uZToKICAgICAgICAgICAgICAgICBzZWxmLnN5c19pbXBvcnQgPSByZXN1bHRzWyJzeXNfaW1wb3J0Il0KZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9pbnB1dC5weSBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9pbnB1dC5weQppbmRleCAxMjZkYTFiLi45Y2Y5YTQ4IDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy9maXhlcy9maXhfaW5wdXQucHkKKysrIGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2lucHV0LnB5CkBAIC0xNyw3ICsxNyw3IEBACiAgICAgICAgICAgICAgICIiIgogCiAgICAgZGVmIHRyYW5zZm9ybShzZWxmLCBub2RlLCByZXN1bHRzKToKLSAgICAgICAgIyBJZiB3ZSdyZSBhbHJlYWR5IHdyYXBwZWQgaW4gYSBldmFsKCkgY2FsbCwgd2UncmUgZG9uZS4KKyAgICAgICAgIyBJZiB3ZSdyZSBhbHJlYWR5IHdyYXBwZWQgaW4gYW4gZXZhbCgpIGNhbGwsIHdlJ3JlIGRvbmUuCiAgICAgICAgIGlmIGNvbnRleHQubWF0Y2gobm9kZS5wYXJlbnQucGFyZW50KToKICAgICAgICAgICAgIHJldHVybgogCmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy9maXhlcy9maXhfaW50ZXJuLnB5IGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2ludGVybi5weQppbmRleCA2YmUxMWNkLi5mYjI5NzNjIDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy9maXhlcy9maXhfaW50ZXJuLnB5CisrKyBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9pbnRlcm4ucHkKQEAgLTYsOSArNiw4IEBACiBpbnRlcm4ocykgLT4gc3lzLmludGVybihzKSIiIgogCiAjIExvY2FsIGltcG9ydHMKLWZyb20gLi4gaW1wb3J0IHB5dHJlZQogZnJvbSAuLiBpbXBvcnQgZml4ZXJfYmFzZQotZnJvbSAuLmZpeGVyX3V0aWwgaW1wb3J0IE5hbWUsIEF0dHIsIHRvdWNoX2ltcG9ydAorZnJvbSAuLmZpeGVyX3V0aWwgaW1wb3J0IEltcG9ydEFuZENhbGwsIHRvdWNoX2ltcG9ydAogCiAKIGNsYXNzIEZpeEludGVybihmaXhlcl9iYXNlLkJhc2VGaXgpOgpAQCAtMjYsMjEgKzI1LDcgQEAKICAgICAiIiIKIAogICAgIGRlZiB0cmFuc2Zvcm0oc2VsZiwgbm9kZSwgcmVzdWx0cyk6Ci0gICAgICAgIHN5bXMgPSBzZWxmLnN5bXMKLSAgICAgICAgb2JqID0gcmVzdWx0c1sib2JqIl0uY2xvbmUoKQotICAgICAgICBpZiBvYmoudHlwZSA9PSBzeW1zLmFyZ2xpc3Q6Ci0gICAgICAgICAgICBuZXdhcmdsaXN0ID0gb2JqLmNsb25lKCkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIG5ld2FyZ2xpc3QgPSBweXRyZWUuTm9kZShzeW1zLmFyZ2xpc3QsIFtvYmouY2xvbmUoKV0pCi0gICAgICAgIGFmdGVyID0gcmVzdWx0c1siYWZ0ZXIiXQotICAgICAgICBpZiBhZnRlcjoKLSAgICAgICAgICAgIGFmdGVyID0gW24uY2xvbmUoKSBmb3IgbiBpbiBhZnRlcl0KLSAgICAgICAgbmV3ID0gcHl0cmVlLk5vZGUoc3ltcy5wb3dlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0cihOYW1lKCJzeXMiKSwgTmFtZSgiaW50ZXJuIikpICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgW3B5dHJlZS5Ob2RlKHN5bXMudHJhaWxlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZXN1bHRzWyJscGFyIl0uY2xvbmUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdhcmdsaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHNbInJwYXIiXS5jbG9uZSgpXSldICsgYWZ0ZXIpCi0gICAgICAgIG5ldy5wcmVmaXggPSBub2RlLnByZWZpeAorICAgICAgICBuYW1lcyA9ICgnc3lzJywgJ2ludGVybicpCisgICAgICAgIG5ldyA9IEltcG9ydEFuZENhbGwobm9kZSwgcmVzdWx0cywgbmFtZXMpCiAgICAgICAgIHRvdWNoX2ltcG9ydChOb25lLCAnc3lzJywgbm9kZSkKICAgICAgICAgcmV0dXJuIG5ldwpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X21ldGFjbGFzcy5weSBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9tZXRhY2xhc3MucHkKaW5kZXggZDRmOTlhMy4uZjNmODcwOCAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X21ldGFjbGFzcy5weQorKysgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfbWV0YWNsYXNzLnB5CkBAIC0xMTQsNyArMTE0LDcgQEAKICAgICAgICAgICAgICAgICBsZWZ0X25vZGUgPSBleHByX25vZGUuY2hpbGRyZW5bMF0KICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGxlZnRfbm9kZSwgTGVhZikgYW5kIFwKICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRfbm9kZS52YWx1ZSA9PSAnX19tZXRhY2xhc3NfXyc6Ci0gICAgICAgICAgICAgICAgICAgICMgV2UgZm91bmQgYSBhc3NpZ25tZW50IHRvIF9fbWV0YWNsYXNzX18uCisgICAgICAgICAgICAgICAgICAgICMgV2UgZm91bmQgYW4gYXNzaWdubWVudCB0byBfX21ldGFjbGFzc19fLgogICAgICAgICAgICAgICAgICAgICBmaXh1cF9zaW1wbGVfc3RtdChub2RlLCBpLCBzaW1wbGVfbm9kZSkKICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlX3RyYWlsaW5nX25ld2xpbmUoc2ltcGxlX25vZGUpCiAgICAgICAgICAgICAgICAgICAgIHlpZWxkIChub2RlLCBpLCBzaW1wbGVfbm9kZSkKZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9yZWxvYWQucHkgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfcmVsb2FkLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4NTUzNTcKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfcmVsb2FkLnB5CkBAIC0wLDAgKzEsMjggQEAKKyIiIkZpeGVyIGZvciByZWxvYWQoKS4KKworcmVsb2FkKHMpIC0+IGltcC5yZWxvYWQocykiIiIKKworIyBMb2NhbCBpbXBvcnRzCitmcm9tIC4uIGltcG9ydCBmaXhlcl9iYXNlCitmcm9tIC4uZml4ZXJfdXRpbCBpbXBvcnQgSW1wb3J0QW5kQ2FsbCwgdG91Y2hfaW1wb3J0CisKKworY2xhc3MgRml4UmVsb2FkKGZpeGVyX2Jhc2UuQmFzZUZpeCk6CisgICAgQk1fY29tcGF0aWJsZSA9IFRydWUKKyAgICBvcmRlciA9ICJwcmUiCisKKyAgICBQQVRURVJOID0gIiIiCisgICAgcG93ZXI8ICdyZWxvYWQnCisgICAgICAgICAgIHRyYWlsZXI8IGxwYXI9JygnCisgICAgICAgICAgICAgICAgICAgICggbm90KGFyZ2xpc3QgfCBhcmd1bWVudDxhbnkgJz0nIGFueT4pIG9iaj1hbnkKKyAgICAgICAgICAgICAgICAgICAgICB8IG9iaj1hcmdsaXN0PChub3QgYXJndW1lbnQ8YW55ICc9JyBhbnk+KSBhbnkgJywnPiApCisgICAgICAgICAgICAgICAgICAgIHJwYXI9JyknID4KKyAgICAgICAgICAgYWZ0ZXI9YW55KgorICAgID4KKyAgICAiIiIKKworICAgIGRlZiB0cmFuc2Zvcm0oc2VsZiwgbm9kZSwgcmVzdWx0cyk6CisgICAgICAgIG5hbWVzID0gKCdpbXAnLCAncmVsb2FkJykKKyAgICAgICAgbmV3ID0gSW1wb3J0QW5kQ2FsbChub2RlLCByZXN1bHRzLCBuYW1lcykKKyAgICAgICAgdG91Y2hfaW1wb3J0KE5vbmUsICdpbXAnLCBub2RlKQorICAgICAgICByZXR1cm4gbmV3CmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy9tYWluLnB5IGIvTGliL2xpYjJ0bzMvbWFpbi5weQppbmRleCBmOWNjMThiLi4xYTFkZjAxIDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy9tYWluLnB5CisrKyBiL0xpYi9saWIydG8zL21haW4ucHkKQEAgLTIsNyArMiw3IEBACiBNYWluIHByb2dyYW0gZm9yIDJ0bzMuCiAiIiIKIAotZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB3aXRoX3N0YXRlbWVudAorZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB3aXRoX3N0YXRlbWVudCwgcHJpbnRfZnVuY3Rpb24KIAogaW1wb3J0IHN5cwogaW1wb3J0IG9zCkBAIC05MCwxMSArOTAsMTEgQEAKICAgICAgICAgICAgIGlmIG9zLnBhdGgubGV4aXN0cyhiYWNrdXApOgogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgb3MucmVtb3ZlKGJhY2t1cCkKLSAgICAgICAgICAgICAgICBleGNlcHQgb3MuZXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKICAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2dfbWVzc2FnZSgiQ2FuJ3QgcmVtb3ZlIGJhY2t1cCAlcyIsIGJhY2t1cCkKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBvcy5yZW5hbWUoZmlsZW5hbWUsIGJhY2t1cCkKLSAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBlcnI6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgICAgICAgICAgICAgc2VsZi5sb2dfbWVzc2FnZSgiQ2FuJ3QgcmVuYW1lICVzIHRvICVzIiwgZmlsZW5hbWUsIGJhY2t1cCkKICAgICAgICAgIyBBY3R1YWxseSB3cml0ZSB0aGUgbmV3IGZpbGUKICAgICAgICAgd3JpdGUgPSBzdXBlcihTdGRvdXRSZWZhY3RvcmluZ1Rvb2wsIHNlbGYpLndyaXRlX2ZpbGUKZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL3BhdGNvbXAucHkgYi9MaWIvbGliMnRvMy9wYXRjb21wLnB5CmluZGV4IDBhMjU5ZTkuLjIwMTJlYzQgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL3BhdGNvbXAucHkKKysrIGIvTGliL2xpYjJ0bzMvcGF0Y29tcC5weQpAQCAtMzIsNyArMzIsNyBAQAogCiBkZWYgdG9rZW5pemVfd3JhcHBlcihpbnB1dCk6CiAgICAgIiIiVG9rZW5pemVzIGEgc3RyaW5nIHN1cHByZXNzaW5nIHNpZ25pZmljYW50IHdoaXRlc3BhY2UuIiIiCi0gICAgc2tpcCA9IHNldCgodG9rZW4uTkVXTElORSwgdG9rZW4uSU5ERU5ULCB0b2tlbi5ERURFTlQpKQorICAgIHNraXAgPSB7dG9rZW4uTkVXTElORSwgdG9rZW4uSU5ERU5ULCB0b2tlbi5ERURFTlR9CiAgICAgdG9rZW5zID0gdG9rZW5pemUuZ2VuZXJhdGVfdG9rZW5zKGlvLlN0cmluZ0lPKGlucHV0KS5yZWFkbGluZSkKICAgICBmb3IgcXVpbnR1cGxlIGluIHRva2VuczoKICAgICAgICAgdHlwZSwgdmFsdWUsIHN0YXJ0LCBlbmQsIGxpbmVfdGV4dCA9IHF1aW50dXBsZQpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvcGdlbjIvY29udi5weSBiL0xpYi9saWIydG8zL3BnZW4yL2NvbnYucHkKaW5kZXggYmY0OTc2Mi4uZWQwY2FjNSAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvcGdlbjIvY29udi5weQorKysgYi9MaWIvbGliMnRvMy9wZ2VuMi9jb252LnB5CkBAIC02MCw3ICs2MCw3IEBACiAgICAgICAgICIiIgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmID0gb3BlbihmaWxlbmFtZSkKLSAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZXJyOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgICAgICAgICBwcmludCgiQ2FuJ3Qgb3BlbiAlczogJXMiICUgKGZpbGVuYW1lLCBlcnIpKQogICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgIHNlbGYuc3ltYm9sMm51bWJlciA9IHt9CkBAIC0xMTEsNyArMTExLDcgQEAKICAgICAgICAgIiIiCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGYgPSBvcGVuKGZpbGVuYW1lKQotICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlcnI6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKICAgICAgICAgICAgIHByaW50KCJDYW4ndCBvcGVuICVzOiAlcyIgJSAoZmlsZW5hbWUsIGVycikpCiAgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgIyBUaGUgY29kZSBiZWxvdyBlc3NlbnRpYWxseSB1c2VzIGYncyBpdGVyYXRvci1uZXNzIQpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvcGdlbjIvZHJpdmVyLnB5IGIvTGliL2xpYjJ0bzMvcGdlbjIvZHJpdmVyLnB5CmluZGV4IDRjNjExYzYuLjNjY2M2OWQgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL3BnZW4yL2RyaXZlci5weQorKysgYi9MaWIvbGliMnRvMy9wZ2VuMi9kcml2ZXIucHkKQEAgLTEyMyw3ICsxMjMsNyBAQAogICAgICAgICAgICAgbG9nZ2VyLmluZm8oIldyaXRpbmcgZ3JhbW1hciB0YWJsZXMgdG8gJXMiLCBncCkKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBnLmR1bXAoZ3ApCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygiV3JpdGluZyBmYWlsZWQ6IitzdHIoZSkpCiAgICAgZWxzZToKICAgICAgICAgZyA9IGdyYW1tYXIuR3JhbW1hcigpCmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy9wZ2VuMi9ncmFtbWFyLnB5IGIvTGliL2xpYjJ0bzMvcGdlbjIvZ3JhbW1hci5weQppbmRleCAxNGM1ZjcwLi5iNDQ4MWQxIDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy9wZ2VuMi9ncmFtbWFyLnB5CisrKyBiL0xpYi9saWIydG8zL3BnZW4yL2dyYW1tYXIucHkKQEAgLTg2LDE1ICs4NiwxMyBAQAogCiAgICAgZGVmIGR1bXAoc2VsZiwgZmlsZW5hbWUpOgogICAgICAgICAiIiJEdW1wIHRoZSBncmFtbWFyIHRhYmxlcyB0byBhIHBpY2tsZSBmaWxlLiIiIgotICAgICAgICBmID0gb3BlbihmaWxlbmFtZSwgIndiIikKLSAgICAgICAgcGlja2xlLmR1bXAoc2VsZi5fX2RpY3RfXywgZiwgMikKLSAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSwgIndiIikgYXMgZjoKKyAgICAgICAgICAgIHBpY2tsZS5kdW1wKHNlbGYuX19kaWN0X18sIGYsIDIpCiAKICAgICBkZWYgbG9hZChzZWxmLCBmaWxlbmFtZSk6CiAgICAgICAgICIiIkxvYWQgdGhlIGdyYW1tYXIgdGFibGVzIGZyb20gYSBwaWNrbGUgZmlsZS4iIiIKLSAgICAgICAgZiA9IG9wZW4oZmlsZW5hbWUsICJyYiIpCi0gICAgICAgIGQgPSBwaWNrbGUubG9hZChmKQotICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAicmIiKSBhcyBmOgorICAgICAgICAgICAgZCA9IHBpY2tsZS5sb2FkKGYpCiAgICAgICAgIHNlbGYuX19kaWN0X18udXBkYXRlKGQpCiAKICAgICBkZWYgY29weShzZWxmKToKQEAgLTE1MSw2ICsxNDksNyBAQAogeyBMQlJBQ0UKIH0gUkJSQUNFCiBAIEFUCitAPSBBVEVRVUFMCiA9PSBFUUVRVUFMCiAhPSBOT1RFUVVBTAogPD4gTk9URVFVQUwKZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL3BnZW4yL3Rva2VuLnB5IGIvTGliL2xpYjJ0bzMvcGdlbjIvdG9rZW4ucHkKaW5kZXggNmE2ZDBiNi4uNzU5OTM5NiAxMDA3NTUKLS0tIGEvTGliL2xpYjJ0bzMvcGdlbjIvdG9rZW4ucHkKKysrIGIvTGliL2xpYjJ0bzMvcGdlbjIvdG9rZW4ucHkKQEAgLTU3LDEyICs1NywxMyBAQAogRE9VQkxFU0xBU0ggPSA0OAogRE9VQkxFU0xBU0hFUVVBTCA9IDQ5CiBBVCA9IDUwCi1PUCA9IDUxCi1DT01NRU5UID0gNTIKLU5MID0gNTMKLVJBUlJPVyA9IDU0Ci1FUlJPUlRPS0VOID0gNTUKLU5fVE9LRU5TID0gNTYKK0FURVFVQUwgPSA1MQorT1AgPSA1MgorQ09NTUVOVCA9IDUzCitOTCA9IDU0CitSQVJST1cgPSA1NQorRVJST1JUT0tFTiA9IDU2CitOX1RPS0VOUyA9IDU3CiBOVF9PRkZTRVQgPSAyNTYKICMtLWVuZCBjb25zdGFudHMtLQogCmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy9wZ2VuMi90b2tlbml6ZS5weSBiL0xpYi9saWIydG8zL3BnZW4yL3Rva2VuaXplLnB5CmluZGV4IDFiYjkzMWUuLjNkZDFlZTkgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL3BnZW4yL3Rva2VuaXplLnB5CisrKyBiL0xpYi9saWIydG8zL3BnZW4yL3Rva2VuaXplLnB5CkBAIC04NCw3ICs4NCw3IEBACiAjIHJlY29nbml6ZWQgYXMgdHdvIGluc3RhbmNlcyBvZiA9KS4KIE9wZXJhdG9yID0gZ3JvdXAociJcKlwqPT8iLCByIj4+PT8iLCByIjw8PT8iLCByIjw+IiwgciIhPSIsCiAgICAgICAgICAgICAgICAgIHIiLy89PyIsIHIiLT4iLAotICAgICAgICAgICAgICAgICByIlsrXC0qLyUmfF49PD5dPT8iLAorICAgICAgICAgICAgICAgICByIlsrXC0qLyUmQHxePTw+XT0/IiwKICAgICAgICAgICAgICAgICAgciJ+IikKIAogQnJhY2tldCA9ICdbXVsoKXt9XScKZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL3B5dHJlZS5weSBiL0xpYi9saWIydG8zL3B5dHJlZS5weQppbmRleCAxN2NiZjBhLi5hZDM1OTJjIDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy9weXRyZWUucHkKKysrIGIvTGliL2xpYjJ0bzMvcHl0cmVlLnB5CkBAIC02NCwxNiArNjQsNiBAQAogCiAgICAgX19oYXNoX18gPSBOb25lICMgRm9yIFB5MyBjb21wYXRpYmlsaXR5LgogCi0gICAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgICIiIgotICAgICAgICBDb21wYXJlIHR3byBub2RlcyBmb3IgaW5lcXVhbGl0eS4KLQotICAgICAgICBUaGlzIGNhbGxzIHRoZSBtZXRob2QgX2VxKCkuCi0gICAgICAgICIiIgotICAgICAgICBpZiBzZWxmLl9fY2xhc3NfXyBpcyBub3Qgb3RoZXIuX19jbGFzc19fOgotICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCi0gICAgICAgIHJldHVybiBub3Qgc2VsZi5fZXEob3RoZXIpCi0KICAgICBkZWYgX2VxKHNlbGYsIG90aGVyKToKICAgICAgICAgIiIiCiAgICAgICAgIENvbXBhcmUgdHdvIG5vZGVzIGZvciBlcXVhbGl0eS4KQEAgLTE5NCw4ICsxODQsNyBAQAogCiAgICAgZGVmIGxlYXZlcyhzZWxmKToKICAgICAgICAgZm9yIGNoaWxkIGluIHNlbGYuY2hpbGRyZW46Ci0gICAgICAgICAgICBmb3IgeCBpbiBjaGlsZC5sZWF2ZXMoKToKLSAgICAgICAgICAgICAgICB5aWVsZCB4CisgICAgICAgICAgICB5aWVsZCBmcm9tIGNoaWxkLmxlYXZlcygpCiAKICAgICBkZWYgZGVwdGgoc2VsZik6CiAgICAgICAgIGlmIHNlbGYucGFyZW50IGlzIE5vbmU6CkBAIC0yNzQsMTYgKzI2MywxNCBAQAogICAgIGRlZiBwb3N0X29yZGVyKHNlbGYpOgogICAgICAgICAiIiJSZXR1cm4gYSBwb3N0LW9yZGVyIGl0ZXJhdG9yIGZvciB0aGUgdHJlZS4iIiIKICAgICAgICAgZm9yIGNoaWxkIGluIHNlbGYuY2hpbGRyZW46Ci0gICAgICAgICAgICBmb3Igbm9kZSBpbiBjaGlsZC5wb3N0X29yZGVyKCk6Ci0gICAgICAgICAgICAgICAgeWllbGQgbm9kZQorICAgICAgICAgICAgeWllbGQgZnJvbSBjaGlsZC5wb3N0X29yZGVyKCkKICAgICAgICAgeWllbGQgc2VsZgogCiAgICAgZGVmIHByZV9vcmRlcihzZWxmKToKICAgICAgICAgIiIiUmV0dXJuIGEgcHJlLW9yZGVyIGl0ZXJhdG9yIGZvciB0aGUgdHJlZS4iIiIKICAgICAgICAgeWllbGQgc2VsZgogICAgICAgICBmb3IgY2hpbGQgaW4gc2VsZi5jaGlsZHJlbjoKLSAgICAgICAgICAgIGZvciBub2RlIGluIGNoaWxkLnByZV9vcmRlcigpOgotICAgICAgICAgICAgICAgIHlpZWxkIG5vZGUKKyAgICAgICAgICAgIHlpZWxkIGZyb20gY2hpbGQucHJlX29yZGVyKCkKIAogICAgIGRlZiBfcHJlZml4X2dldHRlcihzZWxmKToKICAgICAgICAgIiIiCmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy9yZWZhY3Rvci5weSBiL0xpYi9saWIydG8zL3JlZmFjdG9yLnB5CmluZGV4IDIwMWUxOTMuLmFkZjk5OTYgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL3JlZmFjdG9yLnB5CisrKyBiL0xpYi9saWIydG8zL3JlZmFjdG9yLnB5CkBAIC01Nyw3ICs1Nyw3IEBACiAgICAgICAgICMgQWx3YXlzIHJldHVybiBsZWFmcwogICAgICAgICBpZiBwYXQudHlwZSBpcyBOb25lOgogICAgICAgICAgICAgcmFpc2UgX0V2ZXJ5Tm9kZQotICAgICAgICByZXR1cm4gc2V0KFtwYXQudHlwZV0pCisgICAgICAgIHJldHVybiB7cGF0LnR5cGV9CiAKICAgICBpZiBpc2luc3RhbmNlKHBhdCwgcHl0cmVlLk5lZ2F0ZWRQYXR0ZXJuKToKICAgICAgICAgaWYgcGF0LmNvbnRlbnQ6CkBAIC0xMzMsNyArMTMzLDcgQEAKICAgICBkZWYgYWR2YW5jZSgpOgogICAgICAgICB0b2sgPSBuZXh0KGdlbikKICAgICAgICAgcmV0dXJuIHRva1swXSwgdG9rWzFdCi0gICAgaWdub3JlID0gZnJvemVuc2V0KCh0b2tlbi5ORVdMSU5FLCB0b2tlbml6ZS5OTCwgdG9rZW4uQ09NTUVOVCkpCisgICAgaWdub3JlID0gZnJvemVuc2V0KHt0b2tlbi5ORVdMSU5FLCB0b2tlbml6ZS5OTCwgdG9rZW4uQ09NTUVOVH0pCiAgICAgZmVhdHVyZXMgPSBzZXQoKQogICAgIHRyeToKICAgICAgICAgd2hpbGUgVHJ1ZToKQEAgLTI1NSw3ICsyNTUsNyBAQAogICAgICAgICAgICAgZml4ZXIgPSBmaXhfY2xhc3Moc2VsZi5vcHRpb25zLCBzZWxmLmZpeGVyX2xvZykKICAgICAgICAgICAgIGlmIGZpeGVyLmV4cGxpY2l0IGFuZCBzZWxmLmV4cGxpY2l0IGlzIG5vdCBUcnVlIGFuZCBcCiAgICAgICAgICAgICAgICAgICAgIGZpeF9tb2RfcGF0aCBub3QgaW4gc2VsZi5leHBsaWNpdDoKLSAgICAgICAgICAgICAgICBzZWxmLmxvZ19tZXNzYWdlKCJTa2lwcGluZyBpbXBsaWNpdCBmaXhlcjogJXMiLCBmaXhfbmFtZSkKKyAgICAgICAgICAgICAgICBzZWxmLmxvZ19tZXNzYWdlKCJTa2lwcGluZyBvcHRpb25hbCBmaXhlcjogJXMiLCBmaXhfbmFtZSkKICAgICAgICAgICAgICAgICBjb250aW51ZQogCiAgICAgICAgICAgICBzZWxmLmxvZ19kZWJ1ZygiQWRkaW5nIHRyYW5zZm9ybWF0aW9uOiAlcyIsIGZpeF9uYW1lKQpAQCAtMzI2LDcgKzMyNiw3IEBACiAgICAgICAgICIiIgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmID0gb3BlbihmaWxlbmFtZSwgInJiIikKLSAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZXJyOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgICAgICAgICBzZWxmLmxvZ19lcnJvcigiQ2FuJ3Qgb3BlbiAlczogJXMiLCBmaWxlbmFtZSwgZXJyKQogICAgICAgICAgICAgcmV0dXJuIE5vbmUsIE5vbmUKICAgICAgICAgdHJ5OgpAQCAtNTM0LDEyICs1MzQsMTIgQEAKICAgICAgICAgIiIiCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGYgPSBfb3Blbl93aXRoX2VuY29kaW5nKGZpbGVuYW1lLCAidyIsIGVuY29kaW5nPWVuY29kaW5nKQotICAgICAgICBleGNlcHQgb3MuZXJyb3IgYXMgZXJyOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgICAgICAgICBzZWxmLmxvZ19lcnJvcigiQ2FuJ3QgY3JlYXRlICVzOiAlcyIsIGZpbGVuYW1lLCBlcnIpCiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZi53cml0ZShfdG9fc3lzdGVtX25ld2xpbmVzKG5ld190ZXh0KSkKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yIGFzIGVycjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgogICAgICAgICAgICAgc2VsZi5sb2dfZXJyb3IoIkNhbid0IHdyaXRlICVzOiAlcyIsIGZpbGVuYW1lLCBlcnIpCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBmLmNsb3NlKCkKZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL3Rlc3RzL19faW5pdF9fLnB5IGIvTGliL2xpYjJ0bzMvdGVzdHMvX19pbml0X18ucHkKaW5kZXggY2ZhZWEwZC4uYzUxNjZmYyAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvdGVzdHMvX19pbml0X18ucHkKKysrIGIvTGliL2xpYjJ0bzMvdGVzdHMvX19pbml0X18ucHkKQEAgLTEsMjQgKzEsOSBAQAotIiIiTWFrZSB0ZXN0cy8gaW50byBhIHBhY2thZ2UuIFRoaXMgYWxsb3dzIHVzIHRvICJpbXBvcnQgdGVzdHMiIGFuZAotaGF2ZSB0ZXN0cy5hbGxfdGVzdHMgYmUgYSBUZXN0U3VpdGUgcmVwcmVzZW50aW5nIGFsbCB0ZXN0IGNhc2VzCi1mcm9tIGFsbCB0ZXN0XyoucHkgZmlsZXMgaW4gdGVzdHMvLiIiIgogIyBBdXRob3I6IENvbGxpbiBXaW50ZXIKIAogaW1wb3J0IG9zCi1pbXBvcnQgb3MucGF0aAogaW1wb3J0IHVuaXR0ZXN0Ci1pbXBvcnQgdHlwZXMKIAotZnJvbSAuIGltcG9ydCBzdXBwb3J0Citmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgbG9hZF9wYWNrYWdlX3Rlc3RzCiAKLWFsbF90ZXN0cyA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCi0KLXRlc3RzX2RpciA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAnLi4nLCAndGVzdHMnKQotdGVzdHMgPSBbdFswOi0zXSBmb3IgdCBpbiBvcy5saXN0ZGlyKHRlc3RzX2RpcikKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIHQuc3RhcnRzd2l0aCgndGVzdF8nKSBhbmQgdC5lbmRzd2l0aCgnLnB5JyldCi0KLWxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQotCi1mb3IgdCBpbiB0ZXN0czoKLSAgICBfX2ltcG9ydF9fKCIiLGdsb2JhbHMoKSxsb2NhbHMoKSxbdF0sbGV2ZWw9MSkKLSAgICBtb2QgPSBnbG9iYWxzKClbdF0KLSAgICBhbGxfdGVzdHMuYWRkVGVzdHMobG9hZGVyLmxvYWRUZXN0c0Zyb21Nb2R1bGUobW9kKSkKK2RlZiBsb2FkX3Rlc3RzKCphcmdzKToKKyAgICByZXR1cm4gbG9hZF9wYWNrYWdlX3Rlc3RzKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICphcmdzKQpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvdGVzdHMvX19tYWluX18ucHkgYi9MaWIvbGliMnRvMy90ZXN0cy9fX21haW5fXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGEyM2EyCi0tLSAvZGV2L251bGwKKysrIGIvTGliL2xpYjJ0bzMvdGVzdHMvX19tYWluX18ucHkKQEAgLTAsMCArMSw0IEBACitmcm9tIC4gaW1wb3J0IGxvYWRfdGVzdHMKK2ltcG9ydCB1bml0dGVzdAorCit1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL3Rlc3RzL3B5dHJlZV9pZGVtcG90ZW5jeS5weSBiL0xpYi9saWIydG8zL3Rlc3RzL3B5dHJlZV9pZGVtcG90ZW5jeS5weQppbmRleCBhMDJiYmZlLi5jNjM1OWJmIDEwMDc1NQotLS0gYS9MaWIvbGliMnRvMy90ZXN0cy9weXRyZWVfaWRlbXBvdGVuY3kucHkKKysrIGIvTGliL2xpYjJ0bzMvdGVzdHMvcHl0cmVlX2lkZW1wb3RlbmN5LnB5CkBAIC00LDYgKzQsOCBAQAogCiAiIiJNYWluIHByb2dyYW0gZm9yIHRlc3RpbmcgdGhlIGluZnJhc3RydWN0dXJlLiIiIgogCitmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCisKIF9fYXV0aG9yX18gPSAiR3VpZG8gdmFuIFJvc3N1bSA8Z3VpZG9AcHl0aG9uLm9yZz4iCiAKICMgU3VwcG9ydCBpbXBvcnRzIChuZWVkIHRvIGJlIGltcG9ydGVkIGZpcnN0KQpAQCAtNTMsNyArNTUsNyBAQAogICAgIGZvciBkaXIgaW4gc3lzLnBhdGg6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG5hbWVzID0gb3MubGlzdGRpcihkaXIpCi0gICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICBwcmludCgiU2Nhbm5pbmciLCBkaXIsICIuLi4iLCBmaWxlPXN5cy5zdGRlcnIpCiAgICAgICAgIGZvciBuYW1lIGluIG5hbWVzOgpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvdGVzdHMvdGVzdF9hbGxfZml4ZXJzLnB5IGIvTGliL2xpYjJ0bzMvdGVzdHMvdGVzdF9hbGxfZml4ZXJzLnB5CmluZGV4IGY2NGIzZDkuLjE1MDc5ZmUgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL3Rlc3RzL3Rlc3RfYWxsX2ZpeGVycy5weQorKysgYi9MaWIvbGliMnRvMy90ZXN0cy90ZXN0X2FsbF9maXhlcnMucHkKQEAgLTcsMTIgKzcsMTQgQEAKIAogIyBQeXRob24gaW1wb3J0cwogaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgdGVzdC5zdXBwb3J0CiAKICMgTG9jYWwgaW1wb3J0cwogZnJvbSBsaWIydG8zIGltcG9ydCByZWZhY3RvcgogZnJvbSAuIGltcG9ydCBzdXBwb3J0CiAKIAorQHRlc3Quc3VwcG9ydC5yZXF1aXJlc19yZXNvdXJjZSgnY3B1JykKIGNsYXNzIFRlc3RfYWxsKHN1cHBvcnQuVGVzdENhc2UpOgogCiAgICAgZGVmIHNldFVwKHNlbGYpOgpAQCAtMjEsMyArMjMsNiBAQAogICAgIGRlZiB0ZXN0X2FsbF9wcm9qZWN0X2ZpbGVzKHNlbGYpOgogICAgICAgICBmb3IgZmlsZXBhdGggaW4gc3VwcG9ydC5hbGxfcHJvamVjdF9maWxlcygpOgogICAgICAgICAgICAgc2VsZi5yZWZhY3Rvci5yZWZhY3Rvcl9maWxlKGZpbGVwYXRoKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvdGVzdHMvdGVzdF9maXhlcnMucHkgYi9MaWIvbGliMnRvMy90ZXN0cy90ZXN0X2ZpeGVycy5weQppbmRleCAyZjA4ZjkzLi4wNmIwMDMzIDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy90ZXN0cy90ZXN0X2ZpeGVycy5weQorKysgYi9MaWIvbGliMnRvMy90ZXN0cy90ZXN0X2ZpeGVycy5weQpAQCAtMjgyLDYgKzI4Miw2NSBAQAogICAgICAgICBiID0gIiIiZigqYXJncywgKiprd2RzKSIiIgogICAgICAgICBzZWxmLmNoZWNrKGEsIGIpCiAKK2NsYXNzIFRlc3RfcmVsb2FkKEZpeGVyVGVzdENhc2UpOgorICAgIGZpeGVyID0gInJlbG9hZCIKKworICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICBiID0gIiIicmVsb2FkKGEpIiIiCisgICAgICAgIGEgPSAiIiJpbXBvcnQgaW1wXG5pbXAucmVsb2FkKGEpIiIiCisgICAgICAgIHNlbGYuY2hlY2soYiwgYSkKKworICAgIGRlZiB0ZXN0X2NvbW1lbnQoc2VsZik6CisgICAgICAgIGIgPSAiIiJyZWxvYWQoIGEgKSAjIGNvbW1lbnQiIiIKKyAgICAgICAgYSA9ICIiImltcG9ydCBpbXBcbmltcC5yZWxvYWQoIGEgKSAjIGNvbW1lbnQiIiIKKyAgICAgICAgc2VsZi5jaGVjayhiLCBhKQorCisgICAgICAgICMgUEVQIDggY29tbWVudHMKKyAgICAgICAgYiA9ICIiInJlbG9hZCggYSApICAjIGNvbW1lbnQiIiIKKyAgICAgICAgYSA9ICIiImltcG9ydCBpbXBcbmltcC5yZWxvYWQoIGEgKSAgIyBjb21tZW50IiIiCisgICAgICAgIHNlbGYuY2hlY2soYiwgYSkKKworICAgIGRlZiB0ZXN0X3NwYWNlKHNlbGYpOgorICAgICAgICBiID0gIiIicmVsb2FkKCBhICkiIiIKKyAgICAgICAgYSA9ICIiImltcG9ydCBpbXBcbmltcC5yZWxvYWQoIGEgKSIiIgorICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCisKKyAgICAgICAgYiA9ICIiInJlbG9hZCggYSkiIiIKKyAgICAgICAgYSA9ICIiImltcG9ydCBpbXBcbmltcC5yZWxvYWQoIGEpIiIiCisgICAgICAgIHNlbGYuY2hlY2soYiwgYSkKKworICAgICAgICBiID0gIiIicmVsb2FkKGEgKSIiIgorICAgICAgICBhID0gIiIiaW1wb3J0IGltcFxuaW1wLnJlbG9hZChhICkiIiIKKyAgICAgICAgc2VsZi5jaGVjayhiLCBhKQorCisgICAgZGVmIHRlc3RfdW5jaGFuZ2VkKHNlbGYpOgorICAgICAgICBzID0gIiIicmVsb2FkKGE9MSkiIiIKKyAgICAgICAgc2VsZi51bmNoYW5nZWQocykKKworICAgICAgICBzID0gIiIicmVsb2FkKGYsIGcpIiIiCisgICAgICAgIHNlbGYudW5jaGFuZ2VkKHMpCisKKyAgICAgICAgcyA9ICIiInJlbG9hZChmLCAqaCkiIiIKKyAgICAgICAgc2VsZi51bmNoYW5nZWQocykKKworICAgICAgICBzID0gIiIicmVsb2FkKGYsICpoLCAqKmkpIiIiCisgICAgICAgIHNlbGYudW5jaGFuZ2VkKHMpCisKKyAgICAgICAgcyA9ICIiInJlbG9hZChmLCAqKmkpIiIiCisgICAgICAgIHNlbGYudW5jaGFuZ2VkKHMpCisKKyAgICAgICAgcyA9ICIiInJlbG9hZCgqaCwgKippKSIiIgorICAgICAgICBzZWxmLnVuY2hhbmdlZChzKQorCisgICAgICAgIHMgPSAiIiJyZWxvYWQoKmgpIiIiCisgICAgICAgIHNlbGYudW5jaGFuZ2VkKHMpCisKKyAgICAgICAgcyA9ICIiInJlbG9hZCgqKmkpIiIiCisgICAgICAgIHNlbGYudW5jaGFuZ2VkKHMpCisKKyAgICAgICAgcyA9ICIiInJlbG9hZCgpIiIiCisgICAgICAgIHNlbGYudW5jaGFuZ2VkKHMpCisKIGNsYXNzIFRlc3RfaW50ZXJuKEZpeGVyVGVzdENhc2UpOgogICAgIGZpeGVyID0gImludGVybiIKIApAQCAtNDU3NiwzICs0NjM1LDUzIEBACiAgICAgZGVmIHRlc3RfdW5jaGFuZ2VkKHNlbGYpOgogICAgICAgICBzID0gIiIiZihzeXMuZXhpdGZ1bmMpIiIiCiAgICAgICAgIHNlbGYudW5jaGFuZ2VkKHMpCisKKworY2xhc3MgVGVzdF9hc3NlcnRzKEZpeGVyVGVzdENhc2UpOgorCisgICAgZml4ZXIgPSAiYXNzZXJ0cyIKKworICAgIGRlZiB0ZXN0X2RlcHJlY2F0ZWRfbmFtZXMoc2VsZik6CisgICAgICAgIHRlc3RzID0gWworICAgICAgICAgICAgKCdzZWxmLmFzc2VydF8oVHJ1ZSknLCAnc2VsZi5hc3NlcnRUcnVlKFRydWUpJyksCisgICAgICAgICAgICAoJ3NlbGYuYXNzZXJ0RXF1YWxzKDIsIDIpJywgJ3NlbGYuYXNzZXJ0RXF1YWwoMiwgMiknKSwKKyAgICAgICAgICAgICgnc2VsZi5hc3NlcnROb3RFcXVhbHMoMiwgMyknLCAnc2VsZi5hc3NlcnROb3RFcXVhbCgyLCAzKScpLAorICAgICAgICAgICAgKCdzZWxmLmFzc2VydEFsbW9zdEVxdWFscygyLCAzKScsICdzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDIsIDMpJyksCisgICAgICAgICAgICAoJ3NlbGYuYXNzZXJ0Tm90QWxtb3N0RXF1YWxzKDIsIDgpJywgJ3NlbGYuYXNzZXJ0Tm90QWxtb3N0RXF1YWwoMiwgOCknKSwKKyAgICAgICAgICAgICgnc2VsZi5mYWlsVW5sZXNzRXF1YWwoMiwgMiknLCAnc2VsZi5hc3NlcnRFcXVhbCgyLCAyKScpLAorICAgICAgICAgICAgKCdzZWxmLmZhaWxJZkVxdWFsKDIsIDMpJywgJ3NlbGYuYXNzZXJ0Tm90RXF1YWwoMiwgMyknKSwKKyAgICAgICAgICAgICgnc2VsZi5mYWlsVW5sZXNzQWxtb3N0RXF1YWwoMiwgMyknLCAnc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgyLCAzKScpLAorICAgICAgICAgICAgKCdzZWxmLmZhaWxJZkFsbW9zdEVxdWFsKDIsIDgpJywgJ3NlbGYuYXNzZXJ0Tm90QWxtb3N0RXF1YWwoMiwgOCknKSwKKyAgICAgICAgICAgICgnc2VsZi5mYWlsVW5sZXNzKFRydWUpJywgJ3NlbGYuYXNzZXJ0VHJ1ZShUcnVlKScpLAorICAgICAgICAgICAgKCdzZWxmLmZhaWxVbmxlc3NSYWlzZXMoZm9vKScsICdzZWxmLmFzc2VydFJhaXNlcyhmb28pJyksCisgICAgICAgICAgICAoJ3NlbGYuZmFpbElmKEZhbHNlKScsICdzZWxmLmFzc2VydEZhbHNlKEZhbHNlKScpLAorICAgICAgICBdCisgICAgICAgIGZvciBiLCBhIGluIHRlc3RzOgorICAgICAgICAgICAgc2VsZi5jaGVjayhiLCBhKQorCisgICAgZGVmIHRlc3RfdmFyaWFudHMoc2VsZik6CisgICAgICAgIGIgPSAnZXEgPSBzZWxmLmFzc2VydEVxdWFscycKKyAgICAgICAgYSA9ICdlcSA9IHNlbGYuYXNzZXJ0RXF1YWwnCisgICAgICAgIHNlbGYuY2hlY2soYiwgYSkKKyAgICAgICAgYiA9ICdzZWxmLmFzc2VydEVxdWFscygyLCAzLCBtc2c9ImZhaWwiKScKKyAgICAgICAgYSA9ICdzZWxmLmFzc2VydEVxdWFsKDIsIDMsIG1zZz0iZmFpbCIpJworICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCisgICAgICAgIGIgPSAnc2VsZi5hc3NlcnRFcXVhbHMoMiwgMywgbXNnPSJmYWlsIikgIyBmb28nCisgICAgICAgIGEgPSAnc2VsZi5hc3NlcnRFcXVhbCgyLCAzLCBtc2c9ImZhaWwiKSAjIGZvbycKKyAgICAgICAgc2VsZi5jaGVjayhiLCBhKQorICAgICAgICBiID0gJ3NlbGYuYXNzZXJ0RXF1YWxzICgyLCAzKScKKyAgICAgICAgYSA9ICdzZWxmLmFzc2VydEVxdWFsICgyLCAzKScKKyAgICAgICAgc2VsZi5jaGVjayhiLCBhKQorICAgICAgICBiID0gJyAgc2VsZi5hc3NlcnRFcXVhbHMgKDIsIDMpJworICAgICAgICBhID0gJyAgc2VsZi5hc3NlcnRFcXVhbCAoMiwgMyknCisgICAgICAgIHNlbGYuY2hlY2soYiwgYSkKKyAgICAgICAgYiA9ICd3aXRoIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhFeHBsb3Npb24pOiBleHBsb2RlKCknCisgICAgICAgIGEgPSAnd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhFeHBsb3Npb24pOiBleHBsb2RlKCknCisgICAgICAgIHNlbGYuY2hlY2soYiwgYSkKKyAgICAgICAgYiA9ICd3aXRoIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhFeHBsb3Npb24pIGFzIGNtOiBleHBsb2RlKCknCisgICAgICAgIGEgPSAnd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhFeHBsb3Npb24pIGFzIGNtOiBleHBsb2RlKCknCisgICAgICAgIHNlbGYuY2hlY2soYiwgYSkKKworICAgIGRlZiB0ZXN0X3VuY2hhbmdlZChzZWxmKToKKyAgICAgICAgc2VsZi51bmNoYW5nZWQoJ3NlbGYuYXNzZXJ0RXF1YWxzT25TYXR1cmRheScpCisgICAgICAgIHNlbGYudW5jaGFuZ2VkKCdzZWxmLmFzc2VydEVxdWFsc09uU2F0dXJkYXkoMywgNSknKQpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvdGVzdHMvdGVzdF9wYXJzZXIucHkgYi9MaWIvbGliMnRvMy90ZXN0cy90ZXN0X3BhcnNlci5weQppbmRleCBhMzgzYTE0Li41YmI5ZDJiIDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy90ZXN0cy90ZXN0X3BhcnNlci5weQorKysgYi9MaWIvbGliMnRvMy90ZXN0cy90ZXN0X3BhcnNlci5weQpAQCAtNDgsNiArNDgsMTkgQEAKICAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCJTeW50YXggc2hvdWxkbid0IGhhdmUgYmVlbiB2YWxpZCIpCiAKIAorY2xhc3MgVGVzdE1hdHJpeE11bHRpcGxpY2F0aW9uKEdyYW1tYXJUZXN0KToKKyAgICBkZWYgdGVzdF9tYXRyaXhfbXVsdGlwbGljYXRpb25fb3BlcmF0b3Ioc2VsZik6CisgICAgICAgIHNlbGYudmFsaWRhdGUoImEgQCBiIikKKyAgICAgICAgc2VsZi52YWxpZGF0ZSgiYSBAPSBiIikKKworCitjbGFzcyBUZXN0WWllbGRGcm9tKEdyYW1tYXJUZXN0KToKKyAgICBkZWYgdGVzdF9tYXRyaXhfbXVsdGlwbGljYXRpb25fb3BlcmF0b3Ioc2VsZik6CisgICAgICAgIHNlbGYudmFsaWRhdGUoInlpZWxkIGZyb20geCIpCisgICAgICAgIHNlbGYudmFsaWRhdGUoIih5aWVsZCBmcm9tIHgpICsgeSIpCisgICAgICAgIHNlbGYuaW52YWxpZF9zeW50YXgoInlpZWxkIGZyb20iKQorCisKIGNsYXNzIFRlc3RSYWlzZUNoYW5nZXMoR3JhbW1hclRlc3QpOgogICAgIGRlZiB0ZXN0XzJ4X3N0eWxlXzEoc2VsZik6CiAgICAgICAgIHNlbGYudmFsaWRhdGUoInJhaXNlIikKQEAgLTc3LDcgKzkwLDcgQEAKICAgICAgICAgc2VsZi5pbnZhbGlkX3N5bnRheCgicmFpc2UgRSBmcm9tIikKIAogCi0jIEFkYXB0YXRlZCBmcm9tIFB5dGhvbiAzJ3MgTGliL3Rlc3QvdGVzdF9ncmFtbWFyLnB5OkdyYW1tYXJUZXN0cy50ZXN0RnVuY2RlZgorIyBBZGFwdGVkIGZyb20gUHl0aG9uIDMncyBMaWIvdGVzdC90ZXN0X2dyYW1tYXIucHk6R3JhbW1hclRlc3RzLnRlc3RGdW5jZGVmCiBjbGFzcyBUZXN0RnVuY3Rpb25Bbm5vdGF0aW9ucyhHcmFtbWFyVGVzdCk6CiAgICAgZGVmIHRlc3RfMShzZWxmKToKICAgICAgICAgc2VsZi52YWxpZGF0ZSgiIiJkZWYgZih4KSAtPiBsaXN0OiBwYXNzIiIiKQpkaWZmIC0tZ2l0IGEvTGliL2xpbmVjYWNoZS5weSBiL0xpYi9saW5lY2FjaGUucHkKaW5kZXggYzNmMmMzZi4uODg0Y2JmNCAxMDA2NDQKLS0tIGEvTGliL2xpbmVjYWNoZS5weQorKysgYi9MaWIvbGluZWNhY2hlLnB5CkBAIC0xLDQgKzEsNCBAQAotIiIiQ2FjaGUgbGluZXMgZnJvbSBmaWxlcy4KKyIiIkNhY2hlIGxpbmVzIGZyb20gUHl0aG9uIHNvdXJjZSBmaWxlcy4KIAogVGhpcyBpcyBpbnRlbmRlZCB0byByZWFkIGxpbmVzIGZyb20gbW9kdWxlcyBpbXBvcnRlZCAtLSBoZW5jZSBpZiBhIGZpbGVuYW1lCiBpcyBub3QgZm91bmQsIGl0IHdpbGwgbG9vayBkb3duIHRoZSBtb2R1bGUgc2VhcmNoIHBhdGggZm9yIGEgZmlsZSBieQpAQCAtMzIsMTMgKzMyLDE3IEBACiAKIAogZGVmIGdldGxpbmVzKGZpbGVuYW1lLCBtb2R1bGVfZ2xvYmFscz1Ob25lKToKLSAgICAiIiJHZXQgdGhlIGxpbmVzIGZvciBhIGZpbGUgZnJvbSB0aGUgY2FjaGUuCisgICAgIiIiR2V0IHRoZSBsaW5lcyBmb3IgYSBQeXRob24gc291cmNlIGZpbGUgZnJvbSB0aGUgY2FjaGUuCiAgICAgVXBkYXRlIHRoZSBjYWNoZSBpZiBpdCBkb2Vzbid0IGNvbnRhaW4gYW4gZW50cnkgZm9yIHRoaXMgZmlsZSBhbHJlYWR5LiIiIgogCiAgICAgaWYgZmlsZW5hbWUgaW4gY2FjaGU6CiAgICAgICAgIHJldHVybiBjYWNoZVtmaWxlbmFtZV1bMl0KLSAgICBlbHNlOgorCisgICAgdHJ5OgogICAgICAgICByZXR1cm4gdXBkYXRlY2FjaGUoZmlsZW5hbWUsIG1vZHVsZV9nbG9iYWxzKQorICAgIGV4Y2VwdCBNZW1vcnlFcnJvcjoKKyAgICAgICAgY2xlYXJjYWNoZSgpCisgICAgICAgIHJldHVybiBbXQogCiAKIGRlZiBjaGVja2NhY2hlKGZpbGVuYW1lPU5vbmUpOgpAQCAtNTksNyArNjMsNyBAQAogICAgICAgICAgICAgY29udGludWUgICAjIG5vLW9wIGZvciBmaWxlcyBsb2FkZWQgdmlhIGEgX19sb2FkZXJfXwogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzdGF0ID0gb3Muc3RhdChmdWxsbmFtZSkKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIGRlbCBjYWNoZVtmaWxlbmFtZV0KICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgIGlmIHNpemUgIT0gc3RhdC5zdF9zaXplIG9yIG10aW1lICE9IHN0YXQuc3RfbXRpbWU6CkBAIC05MSw3ICs5NSw3IEBACiAgICAgICAgICAgICBpZiBuYW1lIGFuZCBnZXRfc291cmNlOgogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGdldF9zb3VyY2UobmFtZSkKLSAgICAgICAgICAgICAgICBleGNlcHQgKEltcG9ydEVycm9yLCBJT0Vycm9yKToKKyAgICAgICAgICAgICAgICBleGNlcHQgKEltcG9ydEVycm9yLCBPU0Vycm9yKToKICAgICAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgIGlmIGRhdGEgaXMgTm9uZToKQEAgLTExOCwxNCArMTIyLDE0IEBACiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc3RhdCA9IG9zLnN0YXQoZnVsbG5hbWUpCiAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHJldHVybiBbXQogICAgIHRyeToKICAgICAgICAgd2l0aCB0b2tlbml6ZS5vcGVuKGZ1bGxuYW1lKSBhcyBmcDoKICAgICAgICAgICAgIGxpbmVzID0gZnAucmVhZGxpbmVzKCkKLSAgICBleGNlcHQgSU9FcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcmV0dXJuIFtdCiAgICAgaWYgbGluZXMgYW5kIG5vdCBsaW5lc1stMV0uZW5kc3dpdGgoJ1xuJyk6CiAgICAgICAgIGxpbmVzWy0xXSArPSAnXG4nCmRpZmYgLS1naXQgYS9MaWIvbG9jYWxlLnB5IGIvTGliL2xvY2FsZS5weQppbmRleCA3Y2ZlYTYxLi43ZmY0MzU2IDEwMDY0NAotLS0gYS9MaWIvbG9jYWxlLnB5CisrKyBiL0xpYi9sb2NhbGUucHkKQEAgLTM0NCwxNCArMzQ0LDMyIEBACiAgICAgIyBDb252ZXJ0IHRoZSBlbmNvZGluZyB0byBhIEMgbGliIGNvbXBhdGlibGUgZW5jb2Rpbmcgc3RyaW5nCiAgICAgbm9ybV9lbmNvZGluZyA9IGVuY29kaW5ncy5ub3JtYWxpemVfZW5jb2RpbmcoZW5jb2RpbmcpCiAgICAgI3ByaW50KCdub3JtIGVuY29kaW5nOiAlcicgJSBub3JtX2VuY29kaW5nKQotICAgIG5vcm1fZW5jb2RpbmcgPSBlbmNvZGluZ3MuYWxpYXNlcy5hbGlhc2VzLmdldChub3JtX2VuY29kaW5nLAorICAgIG5vcm1fZW5jb2RpbmcgPSBlbmNvZGluZ3MuYWxpYXNlcy5hbGlhc2VzLmdldChub3JtX2VuY29kaW5nLmxvd2VyKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1fZW5jb2RpbmcpCiAgICAgI3ByaW50KCdhbGlhc2VkIGVuY29kaW5nOiAlcicgJSBub3JtX2VuY29kaW5nKQotICAgIGVuY29kaW5nID0gbG9jYWxlX2VuY29kaW5nX2FsaWFzLmdldChub3JtX2VuY29kaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3JtX2VuY29kaW5nKQorICAgIGVuY29kaW5nID0gbm9ybV9lbmNvZGluZworICAgIG5vcm1fZW5jb2RpbmcgPSBub3JtX2VuY29kaW5nLmxvd2VyKCkKKyAgICBpZiBub3JtX2VuY29kaW5nIGluIGxvY2FsZV9lbmNvZGluZ19hbGlhczoKKyAgICAgICAgZW5jb2RpbmcgPSBsb2NhbGVfZW5jb2RpbmdfYWxpYXNbbm9ybV9lbmNvZGluZ10KKyAgICBlbHNlOgorICAgICAgICBub3JtX2VuY29kaW5nID0gbm9ybV9lbmNvZGluZy5yZXBsYWNlKCdfJywgJycpCisgICAgICAgIG5vcm1fZW5jb2RpbmcgPSBub3JtX2VuY29kaW5nLnJlcGxhY2UoJy0nLCAnJykKKyAgICAgICAgaWYgbm9ybV9lbmNvZGluZyBpbiBsb2NhbGVfZW5jb2RpbmdfYWxpYXM6CisgICAgICAgICAgICBlbmNvZGluZyA9IGxvY2FsZV9lbmNvZGluZ19hbGlhc1tub3JtX2VuY29kaW5nXQogICAgICNwcmludCgnZm91bmQgZW5jb2RpbmcgJXInICUgZW5jb2RpbmcpCiAgICAgcmV0dXJuIGxhbmduYW1lICsgJy4nICsgZW5jb2RpbmcKIAorZGVmIF9hcHBlbmRfbW9kaWZpZXIoY29kZSwgbW9kaWZpZXIpOgorICAgIGlmIG1vZGlmaWVyID09ICdldXJvJzoKKyAgICAgICAgaWYgJy4nIG5vdCBpbiBjb2RlOgorICAgICAgICAgICAgcmV0dXJuIGNvZGUgKyAnLklTTzg4NTktMTUnCisgICAgICAgIF8sIF8sIGVuY29kaW5nID0gY29kZS5wYXJ0aXRpb24oJy4nKQorICAgICAgICBpZiBlbmNvZGluZyBpbiAoJ0lTTzg4NTktMTUnLCAnVVRGLTgnKToKKyAgICAgICAgICAgIHJldHVybiBjb2RlCisgICAgICAgIGlmIGVuY29kaW5nID09ICdJU084ODU5LTEnOgorICAgICAgICAgICAgcmV0dXJuIF9yZXBsYWNlX2VuY29kaW5nKGNvZGUsICdJU084ODU5LTE1JykKKyAgICByZXR1cm4gY29kZSArICdAJyArIG1vZGlmaWVyCisKIGRlZiBub3JtYWxpemUobG9jYWxlbmFtZSk6CiAKICAgICAiIiIgUmV0dXJucyBhIG5vcm1hbGl6ZWQgbG9jYWxlIGNvZGUgZm9yIHRoZSBnaXZlbiBsb2NhbGUKQEAgLTQwMyw3ICs0MjEsNyBAQAogICAgICAgICBpZiBjb2RlIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgI3ByaW50KCdsb29rdXAgd2l0aG91dCBtb2RpZmllciBzdWNjZWVkZWQnKQogICAgICAgICAgICAgaWYgJ0AnIG5vdCBpbiBjb2RlOgotICAgICAgICAgICAgICAgIHJldHVybiBjb2RlICsgJ0AnICsgbW9kaWZpZXIKKyAgICAgICAgICAgICAgICByZXR1cm4gX2FwcGVuZF9tb2RpZmllcihjb2RlLCBtb2RpZmllcikKICAgICAgICAgICAgIGlmIGNvZGUuc3BsaXQoJ0AnLCAxKVsxXS5sb3dlcigpID09IG1vZGlmaWVyOgogICAgICAgICAgICAgICAgIHJldHVybiBjb2RlCiAgICAgICAgICNwcmludCgnc2Vjb25kIGxvb2t1cCBmYWlsZWQnKQpAQCAtNDI3LDcgKzQ0NSw4IEBACiAgICAgICAgICAgICBpZiBjb2RlIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgICNwcmludCgnbG9va3VwIHdpdGhvdXQgbW9kaWZpZXIgYW5kIGVuY29kaW5nIHN1Y2NlZWRlZCcpCiAgICAgICAgICAgICAgICAgaWYgJ0AnIG5vdCBpbiBjb2RlOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3JlcGxhY2VfZW5jb2RpbmcoY29kZSwgZW5jb2RpbmcpICsgJ0AnICsgbW9kaWZpZXIKKyAgICAgICAgICAgICAgICAgICAgY29kZSA9IF9yZXBsYWNlX2VuY29kaW5nKGNvZGUsIGVuY29kaW5nKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2FwcGVuZF9tb2RpZmllcihjb2RlLCBtb2RpZmllcikKICAgICAgICAgICAgICAgICBjb2RlLCBkZWZtb2QgPSBjb2RlLnNwbGl0KCdAJywgMSkKICAgICAgICAgICAgICAgICBpZiBkZWZtb2QubG93ZXIoKSA9PSBtb2RpZmllcjoKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9yZXBsYWNlX2VuY29kaW5nKGNvZGUsIGVuY29kaW5nKSArICdAJyArIGRlZm1vZApAQCAtNTg2LDggKzYwNSw4IEBACiAgICAgIyBPbiBXaW4zMiwgdGhpcyB3aWxsIHJldHVybiB0aGUgQU5TSSBjb2RlIHBhZ2UKICAgICBkZWYgZ2V0cHJlZmVycmVkZW5jb2RpbmcoZG9fc2V0bG9jYWxlID0gVHJ1ZSk6CiAgICAgICAgICIiIlJldHVybiB0aGUgY2hhcnNldCB0aGF0IHRoZSB1c2VyIGlzIGxpa2VseSB1c2luZy4iIiIKLSAgICAgICAgaW1wb3J0IF9sb2NhbGUKLSAgICAgICAgcmV0dXJuIF9sb2NhbGUuX2dldGRlZmF1bHRsb2NhbGUoKVsxXQorICAgICAgICBpbXBvcnQgX2Jvb3Rsb2NhbGUKKyAgICAgICAgcmV0dXJuIF9ib290bG9jYWxlLmdldHByZWZlcnJlZGVuY29kaW5nKEZhbHNlKQogZWxzZToKICAgICAjIE9uIFVuaXgsIGlmIENPREVTRVQgaXMgYXZhaWxhYmxlLCB1c2UgdGhhdC4KICAgICB0cnk6CkBAIC02MDYsMjcgKzYyNSwxNiBAQAogICAgICAgICBkZWYgZ2V0cHJlZmVycmVkZW5jb2RpbmcoZG9fc2V0bG9jYWxlID0gVHJ1ZSk6CiAgICAgICAgICAgICAiIiJSZXR1cm4gdGhlIGNoYXJzZXQgdGhhdCB0aGUgdXNlciBpcyBsaWtlbHkgdXNpbmcsCiAgICAgICAgICAgICBhY2NvcmRpbmcgdG8gdGhlIHN5c3RlbSBjb25maWd1cmF0aW9uLiIiIgorICAgICAgICAgICAgaW1wb3J0IF9ib290bG9jYWxlCiAgICAgICAgICAgICBpZiBkb19zZXRsb2NhbGU6CiAgICAgICAgICAgICAgICAgb2xkbG9jID0gc2V0bG9jYWxlKExDX0NUWVBFKQogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgc2V0bG9jYWxlKExDX0NUWVBFLCAiIikKICAgICAgICAgICAgICAgICBleGNlcHQgRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBubF9sYW5naW5mbyhDT0RFU0VUKQotICAgICAgICAgICAgICAgIGlmIG5vdCByZXN1bHQgYW5kIHN5cy5wbGF0Zm9ybSA9PSAnZGFyd2luJzoKLSAgICAgICAgICAgICAgICAgICAgIyBubF9sYW5naW5mbyBjYW4gcmV0dXJuIGFuIGVtcHR5IHN0cmluZwotICAgICAgICAgICAgICAgICAgICAjIHdoZW4gdGhlIHNldHRpbmcgaGFzIGFuIGludmFsaWQgdmFsdWUuCi0gICAgICAgICAgICAgICAgICAgICMgRGVmYXVsdCB0byBVVEYtOCBpbiB0aGF0IGNhc2UgYmVjYXVzZQotICAgICAgICAgICAgICAgICAgICAjIFVURi04IGlzIHRoZSBkZWZhdWx0IGNoYXJzZXQgb24gT1NYIGFuZAotICAgICAgICAgICAgICAgICAgICAjIHJldHVybmluZyBub3RoaW5nIHdpbGwgY3Jhc2ggdGhlCi0gICAgICAgICAgICAgICAgICAgICMgaW50ZXJwcmV0ZXIuCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9ICdVVEYtOCcKKyAgICAgICAgICAgIHJlc3VsdCA9IF9ib290bG9jYWxlLmdldHByZWZlcnJlZGVuY29kaW5nKEZhbHNlKQorICAgICAgICAgICAgaWYgZG9fc2V0bG9jYWxlOgogICAgICAgICAgICAgICAgIHNldGxvY2FsZShMQ19DVFlQRSwgb2xkbG9jKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBubF9sYW5naW5mbyhDT0RFU0VUKQotICAgICAgICAgICAgICAgIGlmIG5vdCByZXN1bHQgYW5kIHN5cy5wbGF0Zm9ybSA9PSAnZGFyd2luJzoKLSAgICAgICAgICAgICAgICAgICAgIyBTZWUgYWJvdmUgZm9yIGV4cGxhbmF0aW9uCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9ICdVVEYtOCcKICAgICAgICAgICAgIHJldHVybiByZXN1bHQKIAogCkBAIC02NTQsNiArNjYyLDE0IEBACiAgICAgJ2ppcyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAnSklTNycsCiAgICAgJ2ppczcnOiAgICAgICAgICAgICAgICAgICAgICAgICAnSklTNycsCiAgICAgJ2FqZWMnOiAgICAgICAgICAgICAgICAgICAgICAgICAnZXVjSlAnLAorICAgICdrb2k4Yyc6ICAgICAgICAgICAgICAgICAgICAgICAgJ0tPSTgtQycsCisgICAgJ21pY3Jvc29mdGNwMTI1MSc6ICAgICAgICAgICAgICAnQ1AxMjUxJywKKyAgICAnbWljcm9zb2Z0Y3AxMjU1JzogICAgICAgICAgICAgICdDUDEyNTUnLAorICAgICdtaWNyb3NvZnRjcDEyNTYnOiAgICAgICAgICAgICAgJ0NQMTI1NicsCisgICAgJzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICAnSVNPODg1OS0xJywKKyAgICAnODg1OTInOiAgICAgICAgICAgICAgICAgICAgICAgICdJU084ODU5LTInLAorICAgICc4ODU5NSc6ICAgICAgICAgICAgICAgICAgICAgICAgJ0lTTzg4NTktNScsCisgICAgJzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICAnSVNPODg1OS0xNScsCiAKICAgICAjIE1hcHBpbmdzIGZyb20gUHl0aG9uIGNvZGVjIG5hbWVzIHRvIEMgbGliIGVuY29kaW5nIG5hbWVzCiAgICAgJ2FzY2lpJzogICAgICAgICAgICAgICAgICAgICAgICAnSVNPODg1OS0xJywKQEAgLTY4MSwxMCArNjk3LDE4IEBACiAgICAgJ3V0Zl84JzogICAgICAgICAgICAgICAgICAgICAgICAnVVRGLTgnLAogICAgICdrb2k4X3InOiAgICAgICAgICAgICAgICAgICAgICAgJ0tPSTgtUicsCiAgICAgJ2tvaThfdSc6ICAgICAgICAgICAgICAgICAgICAgICAnS09JOC1VJywKKyAgICAnY3AxMjUxJzogICAgICAgICAgICAgICAgICAgICAgICdDUDEyNTEnLAorICAgICdjcDEyNTUnOiAgICAgICAgICAgICAgICAgICAgICAgJ0NQMTI1NScsCisgICAgJ2NwMTI1Nic6ICAgICAgICAgICAgICAgICAgICAgICAnQ1AxMjU2JywKKwogICAgICMgWFhYIFRoaXMgbGlzdCBpcyBzdGlsbCBpbmNvbXBsZXRlLiBJZiB5b3Uga25vdyBtb3JlCiAgICAgIyBtYXBwaW5ncywgcGxlYXNlIGZpbGUgYSBidWcgcmVwb3J0LiBUaGFua3MuCiB9CiAKK2ZvciBrLCB2IGluIHNvcnRlZChsb2NhbGVfZW5jb2RpbmdfYWxpYXMuaXRlbXMoKSk6CisgICAgayA9IGsucmVwbGFjZSgnXycsICcnKQorICAgIGxvY2FsZV9lbmNvZGluZ19hbGlhcy5zZXRkZWZhdWx0KGssIHYpCisKICMKICMgVGhlIGxvY2FsZV9hbGlhcyB0YWJsZSBtYXBzIGxvd2VyY2FzZSBhbGlhcyBuYW1lcyB0byBDIGxvY2FsZSBuYW1lcwogIyAoY2FzZS1zZW5zaXRpdmUpLiBFbmNvZGluZ3MgYXJlIGFsd2F5cyBzZXBhcmF0ZWQgZnJvbSB0aGUgbG9jYWxlCkBAIC03OTMsNDQwICs4MTcsMjM3IEBACiAjICAgIHVwZGF0ZWQgJ3NyX2NzJyAtPiAnc3JfUlMuVVRGLTgnIHRvICdzcl9DUy5VVEYtOCcKICMgICAgdXBkYXRlZCAnc3JfY3MudXRmOEBsYXRuJyAtPiAnc3JfUlMuVVRGLThAbGF0aW4nIHRvICdzcl9DUy5VVEYtOEBsYXRpbicKICMgICAgdXBkYXRlZCAnc3JfY3NAbGF0bicgLT4gJ3NyX1JTLlVURi04QGxhdGluJyB0byAnc3JfQ1MuVVRGLThAbGF0aW4nCisjCisjIFNTIDIwMTQtMTAtMDE6CisjIFVwZGF0ZWQgYWxpYXMgbWFwcGluZyB3aXRoIGdsaWJjIDIuMTkgc3VwcG9ydGVkIGxvY2FsZXMuCiAKIGxvY2FsZV9hbGlhcyA9IHsKICAgICAnYTMnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2F6X0FaLktPSTgtQycsCiAgICAgJ2EzX2F6JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhel9BWi5LT0k4LUMnLAotICAgICdhM19hei5rb2k4Yyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAnYXpfQVouS09JOC1DJywKICAgICAnYTNfYXoua29pYyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2F6X0FaLktPSTgtQycsCisgICAgJ2FhX2RqJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhYV9ESi5JU084ODU5LTEnLAorICAgICdhYV9lcic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYWFfRVIuVVRGLTgnLAorICAgICdhYV9ldCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYWFfRVQuVVRGLTgnLAogICAgICdhZic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYWZfWkEuSVNPODg1OS0xJywKICAgICAnYWZfemEnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FmX1pBLklTTzg4NTktMScsCi0gICAgJ2FmX3phLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdhZl9aQS5JU084ODU5LTEnLAogICAgICdhbSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYW1fRVQuVVRGLTgnLAogICAgICdhbV9ldCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYW1fRVQuVVRGLTgnLAogICAgICdhbWVyaWNhbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZW5fVVMuSVNPODg1OS0xJywKLSAgICAnYW1lcmljYW4uaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgJ2VuX1VTLklTTzg4NTktMScsCisgICAgJ2FuX2VzJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhbl9FUy5JU084ODU5LTE1JywKICAgICAnYXInOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FyX0FBLklTTzg4NTktNicsCiAgICAgJ2FyX2FhJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhcl9BQS5JU084ODU5LTYnLAotICAgICdhcl9hYS5pc284ODU5Nic6ICAgICAgICAgICAgICAgICAgICAgICAnYXJfQUEuSVNPODg1OS02JywKICAgICAnYXJfYWUnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FyX0FFLklTTzg4NTktNicsCi0gICAgJ2FyX2FlLmlzbzg4NTk2JzogICAgICAgICAgICAgICAgICAgICAgICdhcl9BRS5JU084ODU5LTYnLAogICAgICdhcl9iaCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXJfQkguSVNPODg1OS02JywKLSAgICAnYXJfYmguaXNvODg1OTYnOiAgICAgICAgICAgICAgICAgICAgICAgJ2FyX0JILklTTzg4NTktNicsCiAgICAgJ2FyX2R6JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhcl9EWi5JU084ODU5LTYnLAotICAgICdhcl9kei5pc284ODU5Nic6ICAgICAgICAgICAgICAgICAgICAgICAnYXJfRFouSVNPODg1OS02JywKICAgICAnYXJfZWcnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FyX0VHLklTTzg4NTktNicsCi0gICAgJ2FyX2VnLmlzbzg4NTk2JzogICAgICAgICAgICAgICAgICAgICAgICdhcl9FRy5JU084ODU5LTYnLAogICAgICdhcl9pbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXJfSU4uVVRGLTgnLAogICAgICdhcl9pcSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXJfSVEuSVNPODg1OS02JywKLSAgICAnYXJfaXEuaXNvODg1OTYnOiAgICAgICAgICAgICAgICAgICAgICAgJ2FyX0lRLklTTzg4NTktNicsCiAgICAgJ2FyX2pvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhcl9KTy5JU084ODU5LTYnLAotICAgICdhcl9qby5pc284ODU5Nic6ICAgICAgICAgICAgICAgICAgICAgICAnYXJfSk8uSVNPODg1OS02JywKICAgICAnYXJfa3cnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FyX0tXLklTTzg4NTktNicsCi0gICAgJ2FyX2t3Lmlzbzg4NTk2JzogICAgICAgICAgICAgICAgICAgICAgICdhcl9LVy5JU084ODU5LTYnLAogICAgICdhcl9sYic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXJfTEIuSVNPODg1OS02JywKLSAgICAnYXJfbGIuaXNvODg1OTYnOiAgICAgICAgICAgICAgICAgICAgICAgJ2FyX0xCLklTTzg4NTktNicsCiAgICAgJ2FyX2x5JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhcl9MWS5JU084ODU5LTYnLAotICAgICdhcl9seS5pc284ODU5Nic6ICAgICAgICAgICAgICAgICAgICAgICAnYXJfTFkuSVNPODg1OS02JywKICAgICAnYXJfbWEnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FyX01BLklTTzg4NTktNicsCi0gICAgJ2FyX21hLmlzbzg4NTk2JzogICAgICAgICAgICAgICAgICAgICAgICdhcl9NQS5JU084ODU5LTYnLAogICAgICdhcl9vbSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXJfT00uSVNPODg1OS02JywKLSAgICAnYXJfb20uaXNvODg1OTYnOiAgICAgICAgICAgICAgICAgICAgICAgJ2FyX09NLklTTzg4NTktNicsCiAgICAgJ2FyX3FhJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhcl9RQS5JU084ODU5LTYnLAotICAgICdhcl9xYS5pc284ODU5Nic6ICAgICAgICAgICAgICAgICAgICAgICAnYXJfUUEuSVNPODg1OS02JywKICAgICAnYXJfc2EnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FyX1NBLklTTzg4NTktNicsCi0gICAgJ2FyX3NhLmlzbzg4NTk2JzogICAgICAgICAgICAgICAgICAgICAgICdhcl9TQS5JU084ODU5LTYnLAogICAgICdhcl9zZCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXJfU0QuSVNPODg1OS02JywKLSAgICAnYXJfc2QuaXNvODg1OTYnOiAgICAgICAgICAgICAgICAgICAgICAgJ2FyX1NELklTTzg4NTktNicsCiAgICAgJ2FyX3N5JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhcl9TWS5JU084ODU5LTYnLAotICAgICdhcl9zeS5pc284ODU5Nic6ICAgICAgICAgICAgICAgICAgICAgICAnYXJfU1kuSVNPODg1OS02JywKICAgICAnYXJfdG4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FyX1ROLklTTzg4NTktNicsCi0gICAgJ2FyX3RuLmlzbzg4NTk2JzogICAgICAgICAgICAgICAgICAgICAgICdhcl9UTi5JU084ODU5LTYnLAogICAgICdhcl95ZSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXJfWUUuSVNPODg1OS02JywKLSAgICAnYXJfeWUuaXNvODg1OTYnOiAgICAgICAgICAgICAgICAgICAgICAgJ2FyX1lFLklTTzg4NTktNicsCiAgICAgJ2FyYWJpYyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhcl9BQS5JU084ODU5LTYnLAotICAgICdhcmFiaWMuaXNvODg1OTYnOiAgICAgICAgICAgICAgICAgICAgICAnYXJfQUEuSVNPODg1OS02JywKICAgICAnYXMnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FzX0lOLlVURi04JywKICAgICAnYXNfaW4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FzX0lOLlVURi04JywKKyAgICAnYXN0X2VzJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FzdF9FUy5JU084ODU5LTE1JywKKyAgICAnYXljX3BlJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2F5Y19QRS5VVEYtOCcsCiAgICAgJ2F6JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhel9BWi5JU084ODU5LTlFJywKICAgICAnYXpfYXonOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2F6X0FaLklTTzg4NTktOUUnLAogICAgICdhel9hei5pc284ODU5OWUnOiAgICAgICAgICAgICAgICAgICAgICAnYXpfQVouSVNPODg1OS05RScsCiAgICAgJ2JlJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiZV9CWS5DUDEyNTEnLAogICAgICdiZUBsYXRpbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmVfQlkuVVRGLThAbGF0aW4nLAorICAgICdiZV9iZy51dGY4JzogICAgICAgICAgICAgICAgICAgICAgICAgICAnYmdfQkcuVVRGLTgnLAogICAgICdiZV9ieSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmVfQlkuQ1AxMjUxJywKLSAgICAnYmVfYnkuY3AxMjUxJzogICAgICAgICAgICAgICAgICAgICAgICAgJ2JlX0JZLkNQMTI1MScsCi0gICAgJ2JlX2J5Lm1pY3Jvc29mdGNwMTI1MSc6ICAgICAgICAgICAgICAgICdiZV9CWS5DUDEyNTEnLAotICAgICdiZV9ieS51dGY4QGxhdGluJzogICAgICAgICAgICAgICAgICAgICAnYmVfQlkuVVRGLThAbGF0aW4nLAogICAgICdiZV9ieUBsYXRpbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAnYmVfQlkuVVRGLThAbGF0aW4nLAorICAgICdiZW1fem0nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmVtX1pNLlVURi04JywKKyAgICAnYmVyX2R6JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Jlcl9EWi5VVEYtOCcsCisgICAgJ2Jlcl9tYSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiZXJfTUEuVVRGLTgnLAogICAgICdiZyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmdfQkcuQ1AxMjUxJywKICAgICAnYmdfYmcnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JnX0JHLkNQMTI1MScsCi0gICAgJ2JnX2JnLmNwMTI1MSc6ICAgICAgICAgICAgICAgICAgICAgICAgICdiZ19CRy5DUDEyNTEnLAotICAgICdiZ19iZy5pc284ODU5NSc6ICAgICAgICAgICAgICAgICAgICAgICAnYmdfQkcuSVNPODg1OS01JywKLSAgICAnYmdfYmcua29pOHInOiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JnX0JHLktPSTgtUicsCi0gICAgJ2JnX2JnLm1pY3Jvc29mdGNwMTI1MSc6ICAgICAgICAgICAgICAgICdiZ19CRy5DUDEyNTEnLAorICAgICdiaG9faW4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmhvX0lOLlVURi04JywKKyAgICAnYm5fYmQnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JuX0JELlVURi04JywKICAgICAnYm5faW4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JuX0lOLlVURi04JywKKyAgICAnYm9fY24nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JvX0NOLlVURi04JywKICAgICAnYm9faW4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JvX0lOLlVURi04JywKICAgICAnYm9rbWFsJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25iX05PLklTTzg4NTktMScsCiAgICAgJ2Jva21ceGU1bCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICduYl9OTy5JU084ODU5LTEnLAogICAgICdicic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYnJfRlIuSVNPODg1OS0xJywKICAgICAnYnJfZnInOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JyX0ZSLklTTzg4NTktMScsCi0gICAgJ2JyX2ZyLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdicl9GUi5JU084ODU5LTEnLAotICAgICdicl9mci5pc284ODU5MTQnOiAgICAgICAgICAgICAgICAgICAgICAnYnJfRlIuSVNPODg1OS0xNCcsCi0gICAgJ2JyX2ZyLmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICdicl9GUi5JU084ODU5LTE1JywKLSAgICAnYnJfZnIuaXNvODg1OTE1QGV1cm8nOiAgICAgICAgICAgICAgICAgJ2JyX0ZSLklTTzg4NTktMTUnLAotICAgICdicl9mci51dGY4QGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAnYnJfRlIuVVRGLTgnLAotICAgICdicl9mckBldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnYnJfRlIuSVNPODg1OS0xNScsCisgICAgJ2JyeF9pbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdicnhfSU4uVVRGLTgnLAogICAgICdicyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYnNfQkEuSVNPODg1OS0yJywKICAgICAnYnNfYmEnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JzX0JBLklTTzg4NTktMicsCi0gICAgJ2JzX2JhLmlzbzg4NTkyJzogICAgICAgICAgICAgICAgICAgICAgICdic19CQS5JU084ODU5LTInLAogICAgICdidWxnYXJpYW4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmdfQkcuQ1AxMjUxJywKKyAgICAnYnluX2VyJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2J5bl9FUi5VVEYtOCcsCiAgICAgJ2MnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDJywKICAgICAnYy1mcmVuY2gnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZyX0NBLklTTzg4NTktMScsCi0gICAgJ2MtZnJlbmNoLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICdmcl9DQS5JU084ODU5LTEnLAogICAgICdjLmFzY2lpJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQycsCiAgICAgJ2MuZW4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDJywKICAgICAnYy5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VuX1VTLklTTzg4NTktMScsCisgICAgJ2MudXRmOCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbl9VUy5VVEYtOCcsCiAgICAgJ2NfYyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDJywKICAgICAnY19jLmMnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0MnLAogICAgICdjYSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2FfRVMuSVNPODg1OS0xJywKICAgICAnY2FfYWQnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NhX0FELklTTzg4NTktMScsCi0gICAgJ2NhX2FkLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdjYV9BRC5JU084ODU5LTEnLAotICAgICdjYV9hZC5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAnY2FfQUQuSVNPODg1OS0xNScsCi0gICAgJ2NhX2FkLmlzbzg4NTkxNUBldXJvJzogICAgICAgICAgICAgICAgICdjYV9BRC5JU084ODU5LTE1JywKLSAgICAnY2FfYWQudXRmOEBldXJvJzogICAgICAgICAgICAgICAgICAgICAgJ2NhX0FELlVURi04JywKLSAgICAnY2FfYWRAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NhX0FELklTTzg4NTktMTUnLAogICAgICdjYV9lcyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2FfRVMuSVNPODg1OS0xJywKLSAgICAnY2FfZXMuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2NhX0VTLklTTzg4NTktMScsCi0gICAgJ2NhX2VzLmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICdjYV9FUy5JU084ODU5LTE1JywKLSAgICAnY2FfZXMuaXNvODg1OTE1QGV1cm8nOiAgICAgICAgICAgICAgICAgJ2NhX0VTLklTTzg4NTktMTUnLAotICAgICdjYV9lcy51dGY4QGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAnY2FfRVMuVVRGLTgnLAotICAgICdjYV9lc0BldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnY2FfRVMuSVNPODg1OS0xNScsCisgICAgJ2NhX2VzQHZhbGVuY2lhJzogICAgICAgICAgICAgICAgICAgICAgICdjYV9FUy5JU084ODU5LTE1QHZhbGVuY2lhJywKICAgICAnY2FfZnInOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NhX0ZSLklTTzg4NTktMScsCi0gICAgJ2NhX2ZyLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdjYV9GUi5JU084ODU5LTEnLAotICAgICdjYV9mci5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAnY2FfRlIuSVNPODg1OS0xNScsCi0gICAgJ2NhX2ZyLmlzbzg4NTkxNUBldXJvJzogICAgICAgICAgICAgICAgICdjYV9GUi5JU084ODU5LTE1JywKLSAgICAnY2FfZnIudXRmOEBldXJvJzogICAgICAgICAgICAgICAgICAgICAgJ2NhX0ZSLlVURi04JywKLSAgICAnY2FfZnJAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NhX0ZSLklTTzg4NTktMTUnLAogICAgICdjYV9pdCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2FfSVQuSVNPODg1OS0xJywKLSAgICAnY2FfaXQuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2NhX0lULklTTzg4NTktMScsCi0gICAgJ2NhX2l0Lmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICdjYV9JVC5JU084ODU5LTE1JywKLSAgICAnY2FfaXQuaXNvODg1OTE1QGV1cm8nOiAgICAgICAgICAgICAgICAgJ2NhX0lULklTTzg4NTktMTUnLAotICAgICdjYV9pdC51dGY4QGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAnY2FfSVQuVVRGLTgnLAotICAgICdjYV9pdEBldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnY2FfSVQuSVNPODg1OS0xNScsCiAgICAgJ2NhdGFsYW4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjYV9FUy5JU084ODU5LTEnLAogICAgICdjZXh0ZW5kJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZW5fVVMuSVNPODg1OS0xJywKLSAgICAnY2V4dGVuZC5lbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VuX1VTLklTTzg4NTktMScsCiAgICAgJ2NoaW5lc2Utcyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICd6aF9DTi5ldWNDTicsCiAgICAgJ2NoaW5lc2UtdCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICd6aF9UVy5ldWNUVycsCisgICAgJ2NyaF91YSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjcmhfVUEuVVRGLTgnLAogICAgICdjcm9hdGlhbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaHJfSFIuSVNPODg1OS0yJywKICAgICAnY3MnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NzX0NaLklTTzg4NTktMicsCiAgICAgJ2NzX2NzJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjc19DWi5JU084ODU5LTInLAotICAgICdjc19jcy5pc284ODU5Mic6ICAgICAgICAgICAgICAgICAgICAgICAnY3NfQ1ouSVNPODg1OS0yJywKICAgICAnY3NfY3onOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NzX0NaLklTTzg4NTktMicsCi0gICAgJ2NzX2N6Lmlzbzg4NTkyJzogICAgICAgICAgICAgICAgICAgICAgICdjc19DWi5JU084ODU5LTInLAorICAgICdjc2JfcGwnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY3NiX1BMLlVURi04JywKKyAgICAnY3ZfcnUnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2N2X1JVLlVURi04JywKICAgICAnY3knOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2N5X0dCLklTTzg4NTktMScsCiAgICAgJ2N5X2diJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjeV9HQi5JU084ODU5LTEnLAotICAgICdjeV9nYi5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnY3lfR0IuSVNPODg1OS0xJywKLSAgICAnY3lfZ2IuaXNvODg1OTE0JzogICAgICAgICAgICAgICAgICAgICAgJ2N5X0dCLklTTzg4NTktMTQnLAotICAgICdjeV9nYi5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAnY3lfR0IuSVNPODg1OS0xNScsCi0gICAgJ2N5X2diQGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdjeV9HQi5JU084ODU5LTE1JywKICAgICAnY3onOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NzX0NaLklTTzg4NTktMicsCiAgICAgJ2N6X2N6JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjc19DWi5JU084ODU5LTInLAogICAgICdjemVjaCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY3NfQ1ouSVNPODg1OS0yJywKICAgICAnZGEnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RhX0RLLklTTzg4NTktMScsCi0gICAgJ2RhLmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICAgICdkYV9ESy5JU084ODU5LTE1JywKICAgICAnZGFfZGsnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RhX0RLLklTTzg4NTktMScsCi0gICAgJ2RhX2RrLjg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICAgICdkYV9ESy5JU084ODU5LTEnLAotICAgICdkYV9kay44ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAgICAnZGFfREsuSVNPODg1OS0xNScsCi0gICAgJ2RhX2RrLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdkYV9ESy5JU084ODU5LTEnLAotICAgICdkYV9kay5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAnZGFfREsuSVNPODg1OS0xNScsCi0gICAgJ2RhX2RrQGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdkYV9ESy5JU084ODU5LTE1JywKICAgICAnZGFuaXNoJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RhX0RLLklTTzg4NTktMScsCi0gICAgJ2RhbmlzaC5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICdkYV9ESy5JU084ODU5LTEnLAogICAgICdkYW5zayc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGFfREsuSVNPODg1OS0xJywKICAgICAnZGUnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RlX0RFLklTTzg4NTktMScsCi0gICAgJ2RlLmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICAgICdkZV9ERS5JU084ODU5LTE1JywKICAgICAnZGVfYXQnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RlX0FULklTTzg4NTktMScsCi0gICAgJ2RlX2F0Lmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdkZV9BVC5JU084ODU5LTEnLAotICAgICdkZV9hdC5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAnZGVfQVQuSVNPODg1OS0xNScsCi0gICAgJ2RlX2F0Lmlzbzg4NTkxNUBldXJvJzogICAgICAgICAgICAgICAgICdkZV9BVC5JU084ODU5LTE1JywKLSAgICAnZGVfYXQudXRmOEBldXJvJzogICAgICAgICAgICAgICAgICAgICAgJ2RlX0FULlVURi04JywKLSAgICAnZGVfYXRAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RlX0FULklTTzg4NTktMTUnLAogICAgICdkZV9iZSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGVfQkUuSVNPODg1OS0xJywKLSAgICAnZGVfYmUuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2RlX0JFLklTTzg4NTktMScsCi0gICAgJ2RlX2JlLmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICdkZV9CRS5JU084ODU5LTE1JywKLSAgICAnZGVfYmUuaXNvODg1OTE1QGV1cm8nOiAgICAgICAgICAgICAgICAgJ2RlX0JFLklTTzg4NTktMTUnLAotICAgICdkZV9iZS51dGY4QGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAnZGVfQkUuVVRGLTgnLAotICAgICdkZV9iZUBldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnZGVfQkUuSVNPODg1OS0xNScsCiAgICAgJ2RlX2NoJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZV9DSC5JU084ODU5LTEnLAotICAgICdkZV9jaC5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnZGVfQ0guSVNPODg1OS0xJywKLSAgICAnZGVfY2guaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgJ2RlX0NILklTTzg4NTktMTUnLAotICAgICdkZV9jaEBldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnZGVfQ0guSVNPODg1OS0xNScsCiAgICAgJ2RlX2RlJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZV9ERS5JU084ODU5LTEnLAotICAgICdkZV9kZS44ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAnZGVfREUuSVNPODg1OS0xJywKLSAgICAnZGVfZGUuODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgICAgJ2RlX0RFLklTTzg4NTktMTUnLAotICAgICdkZV9kZS44ODU5MTVAZXVybyc6ICAgICAgICAgICAgICAgICAgICAnZGVfREUuSVNPODg1OS0xNScsCi0gICAgJ2RlX2RlLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdkZV9ERS5JU084ODU5LTEnLAotICAgICdkZV9kZS5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAnZGVfREUuSVNPODg1OS0xNScsCi0gICAgJ2RlX2RlLmlzbzg4NTkxNUBldXJvJzogICAgICAgICAgICAgICAgICdkZV9ERS5JU084ODU5LTE1JywKLSAgICAnZGVfZGUudXRmOEBldXJvJzogICAgICAgICAgICAgICAgICAgICAgJ2RlX0RFLlVURi04JywKLSAgICAnZGVfZGVAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RlX0RFLklTTzg4NTktMTUnLAorICAgICdkZV9saS51dGY4JzogICAgICAgICAgICAgICAgICAgICAgICAgICAnZGVfTEkuVVRGLTgnLAogICAgICdkZV9sdSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGVfTFUuSVNPODg1OS0xJywKLSAgICAnZGVfbHUuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2RlX0xVLklTTzg4NTktMScsCi0gICAgJ2RlX2x1Lmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICdkZV9MVS5JU084ODU5LTE1JywKLSAgICAnZGVfbHUuaXNvODg1OTE1QGV1cm8nOiAgICAgICAgICAgICAgICAgJ2RlX0xVLklTTzg4NTktMTUnLAotICAgICdkZV9sdS51dGY4QGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAnZGVfTFUuVVRGLTgnLAotICAgICdkZV9sdUBldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnZGVfTFUuSVNPODg1OS0xNScsCiAgICAgJ2RldXRzY2gnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZV9ERS5JU084ODU5LTEnLAorICAgICdkb2lfaW4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZG9pX0lOLlVURi04JywKICAgICAnZHV0Y2gnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25sX05MLklTTzg4NTktMScsCiAgICAgJ2R1dGNoLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdubF9CRS5JU084ODU5LTEnLAorICAgICdkdl9tdic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZHZfTVYuVVRGLTgnLAorICAgICdkel9idCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZHpfQlQuVVRGLTgnLAogICAgICdlZSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZWVfRUUuSVNPODg1OS00JywKICAgICAnZWVfZWUnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VlX0VFLklTTzg4NTktNCcsCi0gICAgJ2VlX2VlLmlzbzg4NTk0JzogICAgICAgICAgICAgICAgICAgICAgICdlZV9FRS5JU084ODU5LTQnLAogICAgICdlZXN0aSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXRfRUUuSVNPODg1OS0xJywKICAgICAnZWwnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VsX0dSLklTTzg4NTktNycsCisgICAgJ2VsX2N5JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbF9DWS5JU084ODU5LTcnLAogICAgICdlbF9ncic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZWxfR1IuSVNPODg1OS03JywKLSAgICAnZWxfZ3IuaXNvODg1OTcnOiAgICAgICAgICAgICAgICAgICAgICAgJ2VsX0dSLklTTzg4NTktNycsCiAgICAgJ2VsX2dyQGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbF9HUi5JU084ODU5LTE1JywKICAgICAnZW4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VuX1VTLklTTzg4NTktMScsCi0gICAgJ2VuLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICAgICdlbl9VUy5JU084ODU5LTEnLAorICAgICdlbl9hZyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZW5fQUcuVVRGLTgnLAogICAgICdlbl9hdSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZW5fQVUuSVNPODg1OS0xJywKLSAgICAnZW5fYXUuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2VuX0FVLklTTzg4NTktMScsCiAgICAgJ2VuX2JlJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbl9CRS5JU084ODU5LTEnLAotICAgICdlbl9iZUBldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnZW5fQkUuSVNPODg1OS0xNScsCiAgICAgJ2VuX2J3JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbl9CVy5JU084ODU5LTEnLAotICAgICdlbl9idy5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnZW5fQlcuSVNPODg1OS0xJywKICAgICAnZW5fY2EnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VuX0NBLklTTzg4NTktMScsCi0gICAgJ2VuX2NhLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdlbl9DQS5JU084ODU5LTEnLAorICAgICdlbl9kayc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZW5fREsuSVNPODg1OS0xJywKKyAgICAnZW5fZGwudXRmOCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VuX0RMLlVURi04JywKICAgICAnZW5fZ2InOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VuX0dCLklTTzg4NTktMScsCi0gICAgJ2VuX2diLjg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICAgICdlbl9HQi5JU084ODU5LTEnLAotICAgICdlbl9nYi5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnZW5fR0IuSVNPODg1OS0xJywKLSAgICAnZW5fZ2IuaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgJ2VuX0dCLklTTzg4NTktMTUnLAotICAgICdlbl9nYkBldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnZW5fR0IuSVNPODg1OS0xNScsCiAgICAgJ2VuX2hrJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbl9ISy5JU084ODU5LTEnLAotICAgICdlbl9oay5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnZW5fSEsuSVNPODg1OS0xJywKICAgICAnZW5faWUnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VuX0lFLklTTzg4NTktMScsCi0gICAgJ2VuX2llLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdlbl9JRS5JU084ODU5LTEnLAotICAgICdlbl9pZS5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAnZW5fSUUuSVNPODg1OS0xNScsCi0gICAgJ2VuX2llLmlzbzg4NTkxNUBldXJvJzogICAgICAgICAgICAgICAgICdlbl9JRS5JU084ODU5LTE1JywKLSAgICAnZW5faWUudXRmOEBldXJvJzogICAgICAgICAgICAgICAgICAgICAgJ2VuX0lFLlVURi04JywKLSAgICAnZW5faWVAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VuX0lFLklTTzg4NTktMTUnLAogICAgICdlbl9pbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZW5fSU4uSVNPODg1OS0xJywKKyAgICAnZW5fbmcnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VuX05HLlVURi04JywKICAgICAnZW5fbnonOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VuX05aLklTTzg4NTktMScsCi0gICAgJ2VuX256Lmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdlbl9OWi5JU084ODU5LTEnLAogICAgICdlbl9waCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZW5fUEguSVNPODg1OS0xJywKLSAgICAnZW5fcGguaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2VuX1BILklTTzg4NTktMScsCiAgICAgJ2VuX3NnJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbl9TRy5JU084ODU5LTEnLAotICAgICdlbl9zZy5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnZW5fU0cuSVNPODg1OS0xJywKICAgICAnZW5fdWsnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VuX0dCLklTTzg4NTktMScsCiAgICAgJ2VuX3VzJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbl9VUy5JU084ODU5LTEnLAotICAgICdlbl91cy44ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAnZW5fVVMuSVNPODg1OS0xJywKLSAgICAnZW5fdXMuODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgICAgJ2VuX1VTLklTTzg4NTktMTUnLAotICAgICdlbl91cy5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnZW5fVVMuSVNPODg1OS0xJywKLSAgICAnZW5fdXMuaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgJ2VuX1VTLklTTzg4NTktMTUnLAotICAgICdlbl91cy5pc284ODU5MTVAZXVybyc6ICAgICAgICAgICAgICAgICAnZW5fVVMuSVNPODg1OS0xNScsCi0gICAgJ2VuX3VzQGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbl9VUy5JU084ODU5LTE1JywKICAgICAnZW5fdXNAZXVyb0BldXJvJzogICAgICAgICAgICAgICAgICAgICAgJ2VuX1VTLklTTzg4NTktMTUnLAogICAgICdlbl96YSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZW5fWkEuSVNPODg1OS0xJywKLSAgICAnZW5femEuODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VuX1pBLklTTzg4NTktMScsCi0gICAgJ2VuX3phLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdlbl9aQS5JU084ODU5LTEnLAotICAgICdlbl96YS5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAnZW5fWkEuSVNPODg1OS0xNScsCi0gICAgJ2VuX3phQGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbl9aQS5JU084ODU5LTE1JywKKyAgICAnZW5fem0nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VuX1pNLlVURi04JywKICAgICAnZW5fencnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VuX1pXLklTTzg4NTktMScsCi0gICAgJ2VuX3p3Lmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdlbl9aVy5JU084ODU5LTEnLAorICAgICdlbl96dy51dGY4JzogICAgICAgICAgICAgICAgICAgICAgICAgICAnZW5fWlMuVVRGLTgnLAogICAgICdlbmdfZ2InOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZW5fR0IuSVNPODg1OS0xJywKLSAgICAnZW5nX2diLjg4NTknOiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VuX0dCLklTTzg4NTktMScsCiAgICAgJ2VuZ2xpc2gnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbl9FTi5JU084ODU5LTEnLAotICAgICdlbmdsaXNoLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAnZW5fRU4uSVNPODg1OS0xJywKICAgICAnZW5nbGlzaF91ayc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VuX0dCLklTTzg4NTktMScsCi0gICAgJ2VuZ2xpc2hfdWsuODg1OSc6ICAgICAgICAgICAgICAgICAgICAgICdlbl9HQi5JU084ODU5LTEnLAogICAgICdlbmdsaXNoX3VuaXRlZC1zdGF0ZXMnOiAgICAgICAgICAgICAgICAnZW5fVVMuSVNPODg1OS0xJywKICAgICAnZW5nbGlzaF91bml0ZWQtc3RhdGVzLjQzNyc6ICAgICAgICAgICAgJ0MnLAogICAgICdlbmdsaXNoX3VzJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnZW5fVVMuSVNPODg1OS0xJywKLSAgICAnZW5nbGlzaF91cy44ODU5JzogICAgICAgICAgICAgICAgICAgICAgJ2VuX1VTLklTTzg4NTktMScsCi0gICAgJ2VuZ2xpc2hfdXMuYXNjaWknOiAgICAgICAgICAgICAgICAgICAgICdlbl9VUy5JU084ODU5LTEnLAogICAgICdlbyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZW9fWFguSVNPODg1OS0zJywKKyAgICAnZW8udXRmOCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VvLlVURi04JywKICAgICAnZW9fZW8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VvX0VPLklTTzg4NTktMycsCi0gICAgJ2VvX2VvLmlzbzg4NTkzJzogICAgICAgICAgICAgICAgICAgICAgICdlb19FTy5JU084ODU5LTMnLAorICAgICdlb191cy51dGY4JzogICAgICAgICAgICAgICAgICAgICAgICAgICAnZW9fVVMuVVRGLTgnLAogICAgICdlb194eCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZW9fWFguSVNPODg1OS0zJywKLSAgICAnZW9feHguaXNvODg1OTMnOiAgICAgICAgICAgICAgICAgICAgICAgJ2VvX1hYLklTTzg4NTktMycsCiAgICAgJ2VzJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlc19FUy5JU084ODU5LTEnLAogICAgICdlc19hcic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXNfQVIuSVNPODg1OS0xJywKLSAgICAnZXNfYXIuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2VzX0FSLklTTzg4NTktMScsCiAgICAgJ2VzX2JvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlc19CTy5JU084ODU5LTEnLAotICAgICdlc19iby5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnZXNfQk8uSVNPODg1OS0xJywKICAgICAnZXNfY2wnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VzX0NMLklTTzg4NTktMScsCi0gICAgJ2VzX2NsLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdlc19DTC5JU084ODU5LTEnLAogICAgICdlc19jbyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXNfQ08uSVNPODg1OS0xJywKLSAgICAnZXNfY28uaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2VzX0NPLklTTzg4NTktMScsCiAgICAgJ2VzX2NyJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlc19DUi5JU084ODU5LTEnLAotICAgICdlc19jci5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnZXNfQ1IuSVNPODg1OS0xJywKKyAgICAnZXNfY3UnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VzX0NVLlVURi04JywKICAgICAnZXNfZG8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VzX0RPLklTTzg4NTktMScsCi0gICAgJ2VzX2RvLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdlc19ETy5JU084ODU5LTEnLAogICAgICdlc19lYyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXNfRUMuSVNPODg1OS0xJywKLSAgICAnZXNfZWMuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2VzX0VDLklTTzg4NTktMScsCiAgICAgJ2VzX2VzJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlc19FUy5JU084ODU5LTEnLAotICAgICdlc19lcy44ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAnZXNfRVMuSVNPODg1OS0xJywKLSAgICAnZXNfZXMuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2VzX0VTLklTTzg4NTktMScsCi0gICAgJ2VzX2VzLmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICdlc19FUy5JU084ODU5LTE1JywKLSAgICAnZXNfZXMuaXNvODg1OTE1QGV1cm8nOiAgICAgICAgICAgICAgICAgJ2VzX0VTLklTTzg4NTktMTUnLAotICAgICdlc19lcy51dGY4QGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAnZXNfRVMuVVRGLTgnLAotICAgICdlc19lc0BldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnZXNfRVMuSVNPODg1OS0xNScsCiAgICAgJ2VzX2d0JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlc19HVC5JU084ODU5LTEnLAotICAgICdlc19ndC5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnZXNfR1QuSVNPODg1OS0xJywKICAgICAnZXNfaG4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VzX0hOLklTTzg4NTktMScsCi0gICAgJ2VzX2huLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdlc19ITi5JU084ODU5LTEnLAogICAgICdlc19teCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXNfTVguSVNPODg1OS0xJywKLSAgICAnZXNfbXguaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2VzX01YLklTTzg4NTktMScsCiAgICAgJ2VzX25pJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlc19OSS5JU084ODU5LTEnLAotICAgICdlc19uaS5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnZXNfTkkuSVNPODg1OS0xJywKICAgICAnZXNfcGEnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VzX1BBLklTTzg4NTktMScsCi0gICAgJ2VzX3BhLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdlc19QQS5JU084ODU5LTEnLAotICAgICdlc19wYS5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAnZXNfUEEuSVNPODg1OS0xNScsCi0gICAgJ2VzX3BhQGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdlc19QQS5JU084ODU5LTE1JywKICAgICAnZXNfcGUnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VzX1BFLklTTzg4NTktMScsCi0gICAgJ2VzX3BlLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdlc19QRS5JU084ODU5LTEnLAotICAgICdlc19wZS5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAnZXNfUEUuSVNPODg1OS0xNScsCi0gICAgJ2VzX3BlQGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdlc19QRS5JU084ODU5LTE1JywKICAgICAnZXNfcHInOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VzX1BSLklTTzg4NTktMScsCi0gICAgJ2VzX3ByLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdlc19QUi5JU084ODU5LTEnLAogICAgICdlc19weSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXNfUFkuSVNPODg1OS0xJywKLSAgICAnZXNfcHkuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2VzX1BZLklTTzg4NTktMScsCi0gICAgJ2VzX3B5Lmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICdlc19QWS5JU084ODU5LTE1JywKLSAgICAnZXNfcHlAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VzX1BZLklTTzg4NTktMTUnLAogICAgICdlc19zdic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXNfU1YuSVNPODg1OS0xJywKLSAgICAnZXNfc3YuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2VzX1NWLklTTzg4NTktMScsCi0gICAgJ2VzX3N2Lmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICdlc19TVi5JU084ODU5LTE1JywKLSAgICAnZXNfc3ZAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VzX1NWLklTTzg4NTktMTUnLAogICAgICdlc191cyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXNfVVMuSVNPODg1OS0xJywKLSAgICAnZXNfdXMuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2VzX1VTLklTTzg4NTktMScsCiAgICAgJ2VzX3V5JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlc19VWS5JU084ODU5LTEnLAotICAgICdlc191eS5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnZXNfVVkuSVNPODg1OS0xJywKLSAgICAnZXNfdXkuaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgJ2VzX1VZLklTTzg4NTktMTUnLAotICAgICdlc191eUBldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnZXNfVVkuSVNPODg1OS0xNScsCiAgICAgJ2VzX3ZlJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlc19WRS5JU084ODU5LTEnLAotICAgICdlc192ZS5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnZXNfVkUuSVNPODg1OS0xJywKLSAgICAnZXNfdmUuaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgJ2VzX1ZFLklTTzg4NTktMTUnLAotICAgICdlc192ZUBldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnZXNfVkUuSVNPODg1OS0xNScsCiAgICAgJ2VzdG9uaWFuJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICdldF9FRS5JU084ODU5LTEnLAogICAgICdldCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXRfRUUuSVNPODg1OS0xNScsCiAgICAgJ2V0X2VlJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdldF9FRS5JU084ODU5LTE1JywKLSAgICAnZXRfZWUuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2V0X0VFLklTTzg4NTktMScsCi0gICAgJ2V0X2VlLmlzbzg4NTkxMyc6ICAgICAgICAgICAgICAgICAgICAgICdldF9FRS5JU084ODU5LTEzJywKLSAgICAnZXRfZWUuaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgJ2V0X0VFLklTTzg4NTktMTUnLAotICAgICdldF9lZS5pc284ODU5NCc6ICAgICAgICAgICAgICAgICAgICAgICAnZXRfRUUuSVNPODg1OS00JywKLSAgICAnZXRfZWVAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V0X0VFLklTTzg4NTktMTUnLAogICAgICdldSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXVfRVMuSVNPODg1OS0xJywKICAgICAnZXVfZXMnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V1X0VTLklTTzg4NTktMScsCi0gICAgJ2V1X2VzLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdldV9FUy5JU084ODU5LTEnLAotICAgICdldV9lcy5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAnZXVfRVMuSVNPODg1OS0xNScsCi0gICAgJ2V1X2VzLmlzbzg4NTkxNUBldXJvJzogICAgICAgICAgICAgICAgICdldV9FUy5JU084ODU5LTE1JywKLSAgICAnZXVfZXMudXRmOEBldXJvJzogICAgICAgICAgICAgICAgICAgICAgJ2V1X0VTLlVURi04JywKLSAgICAnZXVfZXNAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V1X0VTLklTTzg4NTktMTUnLAorICAgICdldV9mcic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXVfRlIuSVNPODg1OS0xJywKICAgICAnZmEnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZhX0lSLlVURi04JywKICAgICAnZmFfaXInOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZhX0lSLlVURi04JywKICAgICAnZmFfaXIuaXNpcmkzMzQyJzogICAgICAgICAgICAgICAgICAgICAgJ2ZhX0lSLklTSVJJLTMzNDInLAorICAgICdmZl9zbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZmZfU04uVVRGLTgnLAogICAgICdmaSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZmlfRkkuSVNPODg1OS0xNScsCi0gICAgJ2ZpLmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICAgICdmaV9GSS5JU084ODU5LTE1JywKICAgICAnZmlfZmknOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpX0ZJLklTTzg4NTktMTUnLAotICAgICdmaV9maS44ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAnZmlfRkkuSVNPODg1OS0xJywKLSAgICAnZmlfZmkuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2ZpX0ZJLklTTzg4NTktMScsCi0gICAgJ2ZpX2ZpLmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICdmaV9GSS5JU084ODU5LTE1JywKLSAgICAnZmlfZmkuaXNvODg1OTE1QGV1cm8nOiAgICAgICAgICAgICAgICAgJ2ZpX0ZJLklTTzg4NTktMTUnLAotICAgICdmaV9maS51dGY4QGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAnZmlfRkkuVVRGLTgnLAotICAgICdmaV9maUBldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnZmlfRkkuSVNPODg1OS0xNScsCisgICAgJ2ZpbF9waCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmaWxfUEguVVRGLTgnLAogICAgICdmaW5uaXNoJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZmlfRkkuSVNPODg1OS0xJywKLSAgICAnZmlubmlzaC5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgJ2ZpX0ZJLklTTzg4NTktMScsCiAgICAgJ2ZvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmb19GTy5JU084ODU5LTEnLAogICAgICdmb19mbyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZm9fRk8uSVNPODg1OS0xJywKLSAgICAnZm9fZm8uaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2ZvX0ZPLklTTzg4NTktMScsCi0gICAgJ2ZvX2ZvLmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICdmb19GTy5JU084ODU5LTE1JywKLSAgICAnZm9fZm9AZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZvX0ZPLklTTzg4NTktMTUnLAogICAgICdmcic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZnJfRlIuSVNPODg1OS0xJywKLSAgICAnZnIuaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgICAgJ2ZyX0ZSLklTTzg4NTktMTUnLAogICAgICdmcl9iZSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZnJfQkUuSVNPODg1OS0xJywKLSAgICAnZnJfYmUuODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZyX0JFLklTTzg4NTktMScsCi0gICAgJ2ZyX2JlLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdmcl9CRS5JU084ODU5LTEnLAotICAgICdmcl9iZS5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAnZnJfQkUuSVNPODg1OS0xNScsCi0gICAgJ2ZyX2JlLmlzbzg4NTkxNUBldXJvJzogICAgICAgICAgICAgICAgICdmcl9CRS5JU084ODU5LTE1JywKLSAgICAnZnJfYmUudXRmOEBldXJvJzogICAgICAgICAgICAgICAgICAgICAgJ2ZyX0JFLlVURi04JywKLSAgICAnZnJfYmVAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZyX0JFLklTTzg4NTktMTUnLAogICAgICdmcl9jYSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZnJfQ0EuSVNPODg1OS0xJywKLSAgICAnZnJfY2EuODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZyX0NBLklTTzg4NTktMScsCi0gICAgJ2ZyX2NhLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdmcl9DQS5JU084ODU5LTEnLAotICAgICdmcl9jYS5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAnZnJfQ0EuSVNPODg1OS0xNScsCi0gICAgJ2ZyX2NhQGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdmcl9DQS5JU084ODU5LTE1JywKICAgICAnZnJfY2gnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZyX0NILklTTzg4NTktMScsCi0gICAgJ2ZyX2NoLjg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICAgICdmcl9DSC5JU084ODU5LTEnLAotICAgICdmcl9jaC5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnZnJfQ0guSVNPODg1OS0xJywKLSAgICAnZnJfY2guaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgJ2ZyX0NILklTTzg4NTktMTUnLAotICAgICdmcl9jaEBldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnZnJfQ0guSVNPODg1OS0xNScsCiAgICAgJ2ZyX2ZyJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmcl9GUi5JU084ODU5LTEnLAotICAgICdmcl9mci44ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAnZnJfRlIuSVNPODg1OS0xJywKLSAgICAnZnJfZnIuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2ZyX0ZSLklTTzg4NTktMScsCi0gICAgJ2ZyX2ZyLmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICdmcl9GUi5JU084ODU5LTE1JywKLSAgICAnZnJfZnIuaXNvODg1OTE1QGV1cm8nOiAgICAgICAgICAgICAgICAgJ2ZyX0ZSLklTTzg4NTktMTUnLAotICAgICdmcl9mci51dGY4QGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAnZnJfRlIuVVRGLTgnLAotICAgICdmcl9mckBldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnZnJfRlIuSVNPODg1OS0xNScsCiAgICAgJ2ZyX2x1JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmcl9MVS5JU084ODU5LTEnLAotICAgICdmcl9sdS44ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAnZnJfTFUuSVNPODg1OS0xJywKLSAgICAnZnJfbHUuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2ZyX0xVLklTTzg4NTktMScsCi0gICAgJ2ZyX2x1Lmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICdmcl9MVS5JU084ODU5LTE1JywKLSAgICAnZnJfbHUuaXNvODg1OTE1QGV1cm8nOiAgICAgICAgICAgICAgICAgJ2ZyX0xVLklTTzg4NTktMTUnLAotICAgICdmcl9sdS51dGY4QGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAnZnJfTFUuVVRGLTgnLAotICAgICdmcl9sdUBldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnZnJfTFUuSVNPODg1OS0xNScsCiAgICAgJ2ZyYW5ceGU3YWlzJzogICAgICAgICAgICAgICAgICAgICAgICAgICdmcl9GUi5JU084ODU5LTEnLAogICAgICdmcmVfZnInOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZnJfRlIuSVNPODg1OS0xJywKLSAgICAnZnJlX2ZyLjg4NTknOiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZyX0ZSLklTTzg4NTktMScsCiAgICAgJ2ZyZW5jaCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmcl9GUi5JU084ODU5LTEnLAogICAgICdmcmVuY2guaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAnZnJfQ0guSVNPODg1OS0xJywKICAgICAnZnJlbmNoX2ZyYW5jZSc6ICAgICAgICAgICAgICAgICAgICAgICAgJ2ZyX0ZSLklTTzg4NTktMScsCi0gICAgJ2ZyZW5jaF9mcmFuY2UuODg1OSc6ICAgICAgICAgICAgICAgICAgICdmcl9GUi5JU084ODU5LTEnLAorICAgICdmdXJfaXQnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZnVyX0lULlVURi04JywKKyAgICAnZnlfZGUnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Z5X0RFLlVURi04JywKKyAgICAnZnlfbmwnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Z5X05MLlVURi04JywKICAgICAnZ2EnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2dhX0lFLklTTzg4NTktMScsCiAgICAgJ2dhX2llJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdnYV9JRS5JU084ODU5LTEnLAotICAgICdnYV9pZS5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnZ2FfSUUuSVNPODg1OS0xJywKLSAgICAnZ2FfaWUuaXNvODg1OTE0JzogICAgICAgICAgICAgICAgICAgICAgJ2dhX0lFLklTTzg4NTktMTQnLAotICAgICdnYV9pZS5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAnZ2FfSUUuSVNPODg1OS0xNScsCi0gICAgJ2dhX2llLmlzbzg4NTkxNUBldXJvJzogICAgICAgICAgICAgICAgICdnYV9JRS5JU084ODU5LTE1JywKLSAgICAnZ2FfaWUudXRmOEBldXJvJzogICAgICAgICAgICAgICAgICAgICAgJ2dhX0lFLlVURi04JywKLSAgICAnZ2FfaWVAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2dhX0lFLklTTzg4NTktMTUnLAogICAgICdnYWxlZ28nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZ2xfRVMuSVNPODg1OS0xJywKICAgICAnZ2FsaWNpYW4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2dsX0VTLklTTzg4NTktMScsCiAgICAgJ2dkJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdnZF9HQi5JU084ODU5LTEnLAogICAgICdnZF9nYic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZ2RfR0IuSVNPODg1OS0xJywKLSAgICAnZ2RfZ2IuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2dkX0dCLklTTzg4NTktMScsCi0gICAgJ2dkX2diLmlzbzg4NTkxNCc6ICAgICAgICAgICAgICAgICAgICAgICdnZF9HQi5JU084ODU5LTE0JywKLSAgICAnZ2RfZ2IuaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgJ2dkX0dCLklTTzg4NTktMTUnLAotICAgICdnZF9nYkBldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnZ2RfR0IuSVNPODg1OS0xNScsCiAgICAgJ2dlcl9kZSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZV9ERS5JU084ODU5LTEnLAotICAgICdnZXJfZGUuODg1OSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAnZGVfREUuSVNPODg1OS0xJywKICAgICAnZ2VybWFuJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RlX0RFLklTTzg4NTktMScsCiAgICAgJ2dlcm1hbi5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICdkZV9DSC5JU084ODU5LTEnLAogICAgICdnZXJtYW5fZ2VybWFueSc6ICAgICAgICAgICAgICAgICAgICAgICAnZGVfREUuSVNPODg1OS0xJywKLSAgICAnZ2VybWFuX2dlcm1hbnkuODg1OSc6ICAgICAgICAgICAgICAgICAgJ2RlX0RFLklTTzg4NTktMScsCisgICAgJ2dlel9lcic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdnZXpfRVIuVVRGLTgnLAorICAgICdnZXpfZXQnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZ2V6X0VULlVURi04JywKICAgICAnZ2wnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2dsX0VTLklTTzg4NTktMScsCiAgICAgJ2dsX2VzJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdnbF9FUy5JU084ODU5LTEnLAotICAgICdnbF9lcy5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnZ2xfRVMuSVNPODg1OS0xJywKLSAgICAnZ2xfZXMuaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgJ2dsX0VTLklTTzg4NTktMTUnLAotICAgICdnbF9lcy5pc284ODU5MTVAZXVybyc6ICAgICAgICAgICAgICAgICAnZ2xfRVMuSVNPODg1OS0xNScsCi0gICAgJ2dsX2VzLnV0ZjhAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICdnbF9FUy5VVEYtOCcsCi0gICAgJ2dsX2VzQGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdnbF9FUy5JU084ODU5LTE1JywKICAgICAnZ3JlZWsnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VsX0dSLklTTzg4NTktNycsCi0gICAgJ2dyZWVrLmlzbzg4NTk3JzogICAgICAgICAgICAgICAgICAgICAgICdlbF9HUi5JU084ODU5LTcnLAogICAgICdndV9pbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZ3VfSU4uVVRGLTgnLAogICAgICdndic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZ3ZfR0IuSVNPODg1OS0xJywKICAgICAnZ3ZfZ2InOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2d2X0dCLklTTzg4NTktMScsCi0gICAgJ2d2X2diLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdndl9HQi5JU084ODU5LTEnLAotICAgICdndl9nYi5pc284ODU5MTQnOiAgICAgICAgICAgICAgICAgICAgICAnZ3ZfR0IuSVNPODg1OS0xNCcsCi0gICAgJ2d2X2diLmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICdndl9HQi5JU084ODU5LTE1JywKLSAgICAnZ3ZfZ2JAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2d2X0dCLklTTzg4NTktMTUnLAorICAgICdoYV9uZyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaGFfTkcuVVRGLTgnLAogICAgICdoZSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaGVfSUwuSVNPODg1OS04JywKICAgICAnaGVfaWwnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2hlX0lMLklTTzg4NTktOCcsCi0gICAgJ2hlX2lsLmNwMTI1NSc6ICAgICAgICAgICAgICAgICAgICAgICAgICdoZV9JTC5DUDEyNTUnLAotICAgICdoZV9pbC5pc284ODU5OCc6ICAgICAgICAgICAgICAgICAgICAgICAnaGVfSUwuSVNPODg1OS04JywKLSAgICAnaGVfaWwubWljcm9zb2Z0Y3AxMjU1JzogICAgICAgICAgICAgICAgJ2hlX0lMLkNQMTI1NScsCiAgICAgJ2hlYnJldyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdoZV9JTC5JU084ODU5LTgnLAotICAgICdoZWJyZXcuaXNvODg1OTgnOiAgICAgICAgICAgICAgICAgICAgICAnaGVfSUwuSVNPODg1OS04JywKICAgICAnaGknOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2hpX0lOLklTQ0lJLURFVicsCiAgICAgJ2hpX2luJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdoaV9JTi5JU0NJSS1ERVYnLAogICAgICdoaV9pbi5pc2NpaWRldic6ICAgICAgICAgICAgICAgICAgICAgICAnaGlfSU4uSVNDSUktREVWJywKQEAgLTEyMzQsMjMgKzEwNTUsMjUgQEAKICAgICAnaG5lX2luJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2huZV9JTi5VVEYtOCcsCiAgICAgJ2hyJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdocl9IUi5JU084ODU5LTInLAogICAgICdocl9ocic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaHJfSFIuSVNPODg1OS0yJywKLSAgICAnaHJfaHIuaXNvODg1OTInOiAgICAgICAgICAgICAgICAgICAgICAgJ2hyX0hSLklTTzg4NTktMicsCiAgICAgJ2hydmF0c2tpJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICdocl9IUi5JU084ODU5LTInLAorICAgICdoc2JfZGUnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaHNiX0RFLklTTzg4NTktMicsCisgICAgJ2h0X2h0JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdodF9IVC5VVEYtOCcsCiAgICAgJ2h1JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdodV9IVS5JU084ODU5LTInLAogICAgICdodV9odSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaHVfSFUuSVNPODg1OS0yJywKLSAgICAnaHVfaHUuaXNvODg1OTInOiAgICAgICAgICAgICAgICAgICAgICAgJ2h1X0hVLklTTzg4NTktMicsCiAgICAgJ2h1bmdhcmlhbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICdodV9IVS5JU084ODU5LTInLAorICAgICdoeV9hbSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaHlfQU0uVVRGLTgnLAorICAgICdoeV9hbS5hcm1zY2lpOCc6ICAgICAgICAgICAgICAgICAgICAgICAnaHlfQU0uQVJNU0NJSV84JywKKyAgICAnaWEnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lhLlVURi04JywKKyAgICAnaWFfZnInOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lhX0ZSLlVURi04JywKICAgICAnaWNlbGFuZGljJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lzX0lTLklTTzg4NTktMScsCi0gICAgJ2ljZWxhbmRpYy5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICdpc19JUy5JU084ODU5LTEnLAogICAgICdpZCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaWRfSUQuSVNPODg1OS0xJywKICAgICAnaWRfaWQnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lkX0lELklTTzg4NTktMScsCisgICAgJ2lnX25nJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpZ19ORy5VVEYtOCcsCisgICAgJ2lrX2NhJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpa19DQS5VVEYtOCcsCiAgICAgJ2luJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpZF9JRC5JU084ODU5LTEnLAogICAgICdpbl9pZCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaWRfSUQuSVNPODg1OS0xJywKICAgICAnaXMnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lzX0lTLklTTzg4NTktMScsCiAgICAgJ2lzX2lzJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpc19JUy5JU084ODU5LTEnLAotICAgICdpc19pcy5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnaXNfSVMuSVNPODg1OS0xJywKLSAgICAnaXNfaXMuaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgJ2lzX0lTLklTTzg4NTktMTUnLAotICAgICdpc19pc0BldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnaXNfSVMuSVNPODg1OS0xNScsCiAgICAgJ2lzby04ODU5LTEnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbl9VUy5JU084ODU5LTEnLAogICAgICdpc28tODg1OS0xNSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAnZW5fVVMuSVNPODg1OS0xNScsCiAgICAgJ2lzbzg4NTktMSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbl9VUy5JU084ODU5LTEnLApAQCAtMTI1OCw3NyArMTA4MSw1NSBAQAogICAgICdpc29fODg1OV8xJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnZW5fVVMuSVNPODg1OS0xJywKICAgICAnaXNvXzg4NTlfMTUnOiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VuX1VTLklTTzg4NTktMTUnLAogICAgICdpdCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaXRfSVQuSVNPODg1OS0xJywKLSAgICAnaXQuaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgICAgJ2l0X0lULklTTzg4NTktMTUnLAogICAgICdpdF9jaCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaXRfQ0guSVNPODg1OS0xJywKLSAgICAnaXRfY2guaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2l0X0NILklTTzg4NTktMScsCi0gICAgJ2l0X2NoLmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICdpdF9DSC5JU084ODU5LTE1JywKLSAgICAnaXRfY2hAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2l0X0NILklTTzg4NTktMTUnLAogICAgICdpdF9pdCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaXRfSVQuSVNPODg1OS0xJywKLSAgICAnaXRfaXQuODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2l0X0lULklTTzg4NTktMScsCi0gICAgJ2l0X2l0Lmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdpdF9JVC5JU084ODU5LTEnLAotICAgICdpdF9pdC5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAnaXRfSVQuSVNPODg1OS0xNScsCi0gICAgJ2l0X2l0Lmlzbzg4NTkxNUBldXJvJzogICAgICAgICAgICAgICAgICdpdF9JVC5JU084ODU5LTE1JywKLSAgICAnaXRfaXQudXRmOEBldXJvJzogICAgICAgICAgICAgICAgICAgICAgJ2l0X0lULlVURi04JywKLSAgICAnaXRfaXRAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2l0X0lULklTTzg4NTktMTUnLAogICAgICdpdGFsaWFuJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaXRfSVQuSVNPODg1OS0xJywKLSAgICAnaXRhbGlhbi5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgJ2l0X0lULklTTzg4NTktMScsCiAgICAgJ2l1JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpdV9DQS5OVU5BQ09NLTgnLAogICAgICdpdV9jYSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaXVfQ0EuTlVOQUNPTS04JywKICAgICAnaXVfY2EubnVuYWNvbTgnOiAgICAgICAgICAgICAgICAgICAgICAgJ2l1X0NBLk5VTkFDT00tOCcsCiAgICAgJ2l3JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdoZV9JTC5JU084ODU5LTgnLAogICAgICdpd19pbCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaGVfSUwuSVNPODg1OS04JywKLSAgICAnaXdfaWwuaXNvODg1OTgnOiAgICAgICAgICAgICAgICAgICAgICAgJ2hlX0lMLklTTzg4NTktOCcsCisgICAgJ2l3X2lsLnV0ZjgnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdpd19JTC5VVEYtOCcsCiAgICAgJ2phJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdqYV9KUC5ldWNKUCcsCi0gICAgJ2phLmppcyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdqYV9KUC5KSVM3JywKLSAgICAnamEuc2ppcyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2phX0pQLlNKSVMnLAogICAgICdqYV9qcCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnamFfSlAuZXVjSlAnLAotICAgICdqYV9qcC5hamVjJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnamFfSlAuZXVjSlAnLAogICAgICdqYV9qcC5ldWMnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnamFfSlAuZXVjSlAnLAotICAgICdqYV9qcC5ldWNqcCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAnamFfSlAuZXVjSlAnLAotICAgICdqYV9qcC5pc28tMjAyMi1qcCc6ICAgICAgICAgICAgICAgICAgICAnamFfSlAuSklTNycsCi0gICAgJ2phX2pwLmlzbzIwMjJqcCc6ICAgICAgICAgICAgICAgICAgICAgICdqYV9KUC5KSVM3JywKLSAgICAnamFfanAuamlzJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2phX0pQLkpJUzcnLAotICAgICdqYV9qcC5qaXM3JzogICAgICAgICAgICAgICAgICAgICAgICAgICAnamFfSlAuSklTNycsCiAgICAgJ2phX2pwLm1zY29kZSc6ICAgICAgICAgICAgICAgICAgICAgICAgICdqYV9KUC5TSklTJywKICAgICAnamFfanAucGNrJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2phX0pQLlNKSVMnLAotICAgICdqYV9qcC5zamlzJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnamFfSlAuU0pJUycsCi0gICAgJ2phX2pwLnVqaXMnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdqYV9KUC5ldWNKUCcsCiAgICAgJ2phcGFuJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdqYV9KUC5ldWNKUCcsCiAgICAgJ2phcGFuZXNlJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICdqYV9KUC5ldWNKUCcsCiAgICAgJ2phcGFuZXNlLWV1Yyc6ICAgICAgICAgICAgICAgICAgICAgICAgICdqYV9KUC5ldWNKUCcsCiAgICAgJ2phcGFuZXNlLmV1Yyc6ICAgICAgICAgICAgICAgICAgICAgICAgICdqYV9KUC5ldWNKUCcsCi0gICAgJ2phcGFuZXNlLnNqaXMnOiAgICAgICAgICAgICAgICAgICAgICAgICdqYV9KUC5TSklTJywKICAgICAnanBfanAnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2phX0pQLmV1Y0pQJywKICAgICAna2EnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2thX0dFLkdFT1JHSUFOLUFDQURFTVknLAogICAgICdrYV9nZSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAna2FfR0UuR0VPUkdJQU4tQUNBREVNWScsCiAgICAgJ2thX2dlLmdlb3JnaWFuYWNhZGVteSc6ICAgICAgICAgICAgICAgICdrYV9HRS5HRU9SR0lBTi1BQ0FERU1ZJywKICAgICAna2FfZ2UuZ2VvcmdpYW5wcyc6ICAgICAgICAgICAgICAgICAgICAgJ2thX0dFLkdFT1JHSUFOLVBTJywKICAgICAna2FfZ2UuZ2VvcmdpYW5ycyc6ICAgICAgICAgICAgICAgICAgICAgJ2thX0dFLkdFT1JHSUFOLUFDQURFTVknLAorICAgICdra19reic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAna2tfS1ouUksxMDQ4JywKICAgICAna2wnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2tsX0dMLklTTzg4NTktMScsCiAgICAgJ2tsX2dsJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdrbF9HTC5JU084ODU5LTEnLAotICAgICdrbF9nbC5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAna2xfR0wuSVNPODg1OS0xJywKLSAgICAna2xfZ2wuaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgJ2tsX0dMLklTTzg4NTktMTUnLAotICAgICdrbF9nbEBldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAna2xfR0wuSVNPODg1OS0xNScsCiAgICAgJ2ttX2toJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdrbV9LSC5VVEYtOCcsCiAgICAgJ2tuJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdrbl9JTi5VVEYtOCcsCiAgICAgJ2tuX2luJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdrbl9JTi5VVEYtOCcsCiAgICAgJ2tvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdrb19LUi5ldWNLUicsCiAgICAgJ2tvX2tyJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdrb19LUi5ldWNLUicsCiAgICAgJ2tvX2tyLmV1Yyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICdrb19LUi5ldWNLUicsCi0gICAgJ2tvX2tyLmV1Y2tyJzogICAgICAgICAgICAgICAgICAgICAgICAgICdrb19LUi5ldWNLUicsCisgICAgJ2tva19pbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdrb2tfSU4uVVRGLTgnLAogICAgICdrb3JlYW4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAna29fS1IuZXVjS1InLAogICAgICdrb3JlYW4uZXVjJzogICAgICAgICAgICAgICAgICAgICAgICAgICAna29fS1IuZXVjS1InLAogICAgICdrcyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAna3NfSU4uVVRGLTgnLAogICAgICdrc19pbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAna3NfSU4uVVRGLTgnLAotICAgICdrc19pbkBkZXZhbmFnYXJpJzogICAgICAgICAgICAgICAgICAgICAna3NfSU4uVVRGLThAZGV2YW5hZ2FyaScsCisgICAgJ2tzX2luQGRldmFuYWdhcmkudXRmOCc6ICAgICAgICAgICAgICAgICdrc19JTi5VVEYtOEBkZXZhbmFnYXJpJywKKyAgICAna3VfdHInOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2t1X1RSLklTTzg4NTktOScsCiAgICAgJ2t3JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdrd19HQi5JU084ODU5LTEnLAogICAgICdrd19nYic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAna3dfR0IuSVNPODg1OS0xJywKLSAgICAna3dfZ2IuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2t3X0dCLklTTzg4NTktMScsCi0gICAgJ2t3X2diLmlzbzg4NTkxNCc6ICAgICAgICAgICAgICAgICAgICAgICdrd19HQi5JU084ODU5LTE0JywKLSAgICAna3dfZ2IuaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgJ2t3X0dCLklTTzg4NTktMTUnLAotICAgICdrd19nYkBldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAna3dfR0IuSVNPODg1OS0xNScsCiAgICAgJ2t5JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdreV9LRy5VVEYtOCcsCiAgICAgJ2t5X2tnJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdreV9LRy5VVEYtOCcsCisgICAgJ2xiX2x1JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdsYl9MVS5VVEYtOCcsCisgICAgJ2xnX3VnJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdsZ19VRy5JU084ODU5LTEwJywKKyAgICAnbGlfYmUnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xpX0JFLlVURi04JywKKyAgICAnbGlfbmwnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xpX05MLlVURi04JywKKyAgICAnbGlqX2l0JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xpal9JVC5VVEYtOCcsCiAgICAgJ2xpdGh1YW5pYW4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdsdF9MVC5JU084ODU5LTEzJywKICAgICAnbG8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xvX0xBLk1VTEVMQU8tMScsCiAgICAgJ2xvX2xhJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdsb19MQS5NVUxFTEFPLTEnLApAQCAtMTMzNywxNTcgKzExMzgsMTAyIEBACiAgICAgJ2xvX2xhLm11bGVsYW8xJzogICAgICAgICAgICAgICAgICAgICAgICdsb19MQS5NVUxFTEFPLTEnLAogICAgICdsdCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbHRfTFQuSVNPODg1OS0xMycsCiAgICAgJ2x0X2x0JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdsdF9MVC5JU084ODU5LTEzJywKLSAgICAnbHRfbHQuaXNvODg1OTEzJzogICAgICAgICAgICAgICAgICAgICAgJ2x0X0xULklTTzg4NTktMTMnLAotICAgICdsdF9sdC5pc284ODU5NCc6ICAgICAgICAgICAgICAgICAgICAgICAnbHRfTFQuSVNPODg1OS00JywKICAgICAnbHYnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2x2X0xWLklTTzg4NTktMTMnLAogICAgICdsdl9sdic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbHZfTFYuSVNPODg1OS0xMycsCi0gICAgJ2x2X2x2Lmlzbzg4NTkxMyc6ICAgICAgICAgICAgICAgICAgICAgICdsdl9MVi5JU084ODU5LTEzJywKLSAgICAnbHZfbHYuaXNvODg1OTQnOiAgICAgICAgICAgICAgICAgICAgICAgJ2x2X0xWLklTTzg4NTktNCcsCisgICAgJ21hZ19pbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtYWdfSU4uVVRGLTgnLAogICAgICdtYWknOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWFpX0lOLlVURi04JywKICAgICAnbWFpX2luJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21haV9JTi5VVEYtOCcsCisgICAgJ21nX21nJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtZ19NRy5JU084ODU5LTE1JywKKyAgICAnbWhyX3J1JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21ocl9SVS5VVEYtOCcsCiAgICAgJ21pJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtaV9OWi5JU084ODU5LTEnLAogICAgICdtaV9ueic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWlfTlouSVNPODg1OS0xJywKLSAgICAnbWlfbnouaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ21pX05aLklTTzg4NTktMScsCiAgICAgJ21rJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdta19NSy5JU084ODU5LTUnLAogICAgICdta19tayc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWtfTUsuSVNPODg1OS01JywKLSAgICAnbWtfbWsuY3AxMjUxJzogICAgICAgICAgICAgICAgICAgICAgICAgJ21rX01LLkNQMTI1MScsCi0gICAgJ21rX21rLmlzbzg4NTk1JzogICAgICAgICAgICAgICAgICAgICAgICdta19NSy5JU084ODU5LTUnLAotICAgICdta19tay5taWNyb3NvZnRjcDEyNTEnOiAgICAgICAgICAgICAgICAnbWtfTUsuQ1AxMjUxJywKICAgICAnbWwnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21sX0lOLlVURi04JywKICAgICAnbWxfaW4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21sX0lOLlVURi04JywKKyAgICAnbW5fbW4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21uX01OLlVURi04JywKKyAgICAnbW5pX2luJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21uaV9JTi5VVEYtOCcsCiAgICAgJ21yJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtcl9JTi5VVEYtOCcsCiAgICAgJ21yX2luJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtcl9JTi5VVEYtOCcsCiAgICAgJ21zJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtc19NWS5JU084ODU5LTEnLAogICAgICdtc19teSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbXNfTVkuSVNPODg1OS0xJywKLSAgICAnbXNfbXkuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ21zX01ZLklTTzg4NTktMScsCiAgICAgJ210JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtdF9NVC5JU084ODU5LTMnLAogICAgICdtdF9tdCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbXRfTVQuSVNPODg1OS0zJywKLSAgICAnbXRfbXQuaXNvODg1OTMnOiAgICAgICAgICAgICAgICAgICAgICAgJ210X01ULklTTzg4NTktMycsCisgICAgJ215X21tJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdteV9NTS5VVEYtOCcsCisgICAgJ25hbl90d0BsYXRpbic6ICAgICAgICAgICAgICAgICAgICAgICAgICduYW5fVFcuVVRGLThAbGF0aW4nLAogICAgICduYic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbmJfTk8uSVNPODg1OS0xJywKICAgICAnbmJfbm8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25iX05PLklTTzg4NTktMScsCi0gICAgJ25iX25vLjg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICAgICduYl9OTy5JU084ODU5LTEnLAotICAgICduYl9uby5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnbmJfTk8uSVNPODg1OS0xJywKLSAgICAnbmJfbm8uaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgJ25iX05PLklTTzg4NTktMTUnLAotICAgICduYl9ub0BldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnbmJfTk8uSVNPODg1OS0xNScsCisgICAgJ25kc19kZSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICduZHNfREUuVVRGLTgnLAorICAgICduZHNfbmwnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbmRzX05MLlVURi04JywKICAgICAnbmVfbnAnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25lX05QLlVURi04JywKKyAgICAnbmhuX214JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25obl9NWC5VVEYtOCcsCisgICAgJ25pdV9udSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICduaXVfTlUuVVRGLTgnLAorICAgICduaXVfbnonOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbml1X05aLlVURi04JywKICAgICAnbmwnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25sX05MLklTTzg4NTktMScsCi0gICAgJ25sLmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICAgICdubF9OTC5JU084ODU5LTE1JywKKyAgICAnbmxfYXcnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25sX0FXLlVURi04JywKICAgICAnbmxfYmUnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25sX0JFLklTTzg4NTktMScsCi0gICAgJ25sX2JlLjg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICAgICdubF9CRS5JU084ODU5LTEnLAotICAgICdubF9iZS5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnbmxfQkUuSVNPODg1OS0xJywKLSAgICAnbmxfYmUuaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgJ25sX0JFLklTTzg4NTktMTUnLAotICAgICdubF9iZS5pc284ODU5MTVAZXVybyc6ICAgICAgICAgICAgICAgICAnbmxfQkUuSVNPODg1OS0xNScsCi0gICAgJ25sX2JlLnV0ZjhAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICdubF9CRS5VVEYtOCcsCi0gICAgJ25sX2JlQGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdubF9CRS5JU084ODU5LTE1JywKICAgICAnbmxfbmwnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25sX05MLklTTzg4NTktMScsCi0gICAgJ25sX25sLjg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICAgICdubF9OTC5JU084ODU5LTEnLAotICAgICdubF9ubC5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnbmxfTkwuSVNPODg1OS0xJywKLSAgICAnbmxfbmwuaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgJ25sX05MLklTTzg4NTktMTUnLAotICAgICdubF9ubC5pc284ODU5MTVAZXVybyc6ICAgICAgICAgICAgICAgICAnbmxfTkwuSVNPODg1OS0xNScsCi0gICAgJ25sX25sLnV0ZjhAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICdubF9OTC5VVEYtOCcsCi0gICAgJ25sX25sQGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdubF9OTC5JU084ODU5LTE1JywKICAgICAnbm4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25uX05PLklTTzg4NTktMScsCiAgICAgJ25uX25vJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdubl9OTy5JU084ODU5LTEnLAotICAgICdubl9uby44ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAnbm5fTk8uSVNPODg1OS0xJywKLSAgICAnbm5fbm8uaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ25uX05PLklTTzg4NTktMScsCi0gICAgJ25uX25vLmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICdubl9OTy5JU084ODU5LTE1JywKLSAgICAnbm5fbm9AZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25uX05PLklTTzg4NTktMTUnLAogICAgICdubyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbm9fTk8uSVNPODg1OS0xJywKICAgICAnbm9Abnlub3Jzayc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ255X05PLklTTzg4NTktMScsCiAgICAgJ25vX25vJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdub19OTy5JU084ODU5LTEnLAotICAgICdub19uby44ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAnbm9fTk8uSVNPODg1OS0xJywKLSAgICAnbm9fbm8uaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ25vX05PLklTTzg4NTktMScsCi0gICAgJ25vX25vLmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICdub19OTy5JU084ODU5LTE1JywKICAgICAnbm9fbm8uaXNvODg1OTFAYm9rbWFsJzogICAgICAgICAgICAgICAgJ25vX05PLklTTzg4NTktMScsCiAgICAgJ25vX25vLmlzbzg4NTkxQG55bm9yc2snOiAgICAgICAgICAgICAgICdub19OTy5JU084ODU5LTEnLAotICAgICdub19ub0BldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnbm9fTk8uSVNPODg1OS0xNScsCiAgICAgJ25vcndlZ2lhbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICdub19OTy5JU084ODU5LTEnLAotICAgICdub3J3ZWdpYW4uaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAnbm9fTk8uSVNPODg1OS0xJywKICAgICAnbnInOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25yX1pBLklTTzg4NTktMScsCiAgICAgJ25yX3phJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICducl9aQS5JU084ODU5LTEnLAotICAgICducl96YS5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnbnJfWkEuSVNPODg1OS0xJywKICAgICAnbnNvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25zb19aQS5JU084ODU5LTE1JywKICAgICAnbnNvX3phJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25zb19aQS5JU084ODU5LTE1JywKLSAgICAnbnNvX3phLmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgJ25zb19aQS5JU084ODU5LTE1JywKICAgICAnbnknOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ255X05PLklTTzg4NTktMScsCiAgICAgJ255X25vJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdueV9OTy5JU084ODU5LTEnLAotICAgICdueV9uby44ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAnbnlfTk8uSVNPODg1OS0xJywKLSAgICAnbnlfbm8uaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ255X05PLklTTzg4NTktMScsCi0gICAgJ255X25vLmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICdueV9OTy5JU084ODU5LTE1JywKLSAgICAnbnlfbm9AZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ255X05PLklTTzg4NTktMTUnLAogICAgICdueW5vcnNrJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbm5fTk8uSVNPODg1OS0xJywKICAgICAnb2MnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29jX0ZSLklTTzg4NTktMScsCiAgICAgJ29jX2ZyJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvY19GUi5JU084ODU5LTEnLAotICAgICdvY19mci5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnb2NfRlIuSVNPODg1OS0xJywKLSAgICAnb2NfZnIuaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgJ29jX0ZSLklTTzg4NTktMTUnLAotICAgICdvY19mckBldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnb2NfRlIuSVNPODg1OS0xNScsCisgICAgJ29tX2V0JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvbV9FVC5VVEYtOCcsCisgICAgJ29tX2tlJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvbV9LRS5JU084ODU5LTEnLAogICAgICdvcic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3JfSU4uVVRGLTgnLAogICAgICdvcl9pbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3JfSU4uVVRGLTgnLAorICAgICdvc19ydSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3NfUlUuVVRGLTgnLAogICAgICdwYSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFfSU4uVVRGLTgnLAogICAgICdwYV9pbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFfSU4uVVRGLTgnLAorICAgICdwYV9wayc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFfUEsuVVRGLTgnLAorICAgICdwYXBfYW4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFwX0FOLlVURi04JywKICAgICAncGQnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BkX1VTLklTTzg4NTktMScsCiAgICAgJ3BkX2RlJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwZF9ERS5JU084ODU5LTEnLAotICAgICdwZF9kZS5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAncGRfREUuSVNPODg1OS0xJywKLSAgICAncGRfZGUuaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgJ3BkX0RFLklTTzg4NTktMTUnLAotICAgICdwZF9kZUBldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAncGRfREUuSVNPODg1OS0xNScsCiAgICAgJ3BkX3VzJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwZF9VUy5JU084ODU5LTEnLAotICAgICdwZF91cy5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAncGRfVVMuSVNPODg1OS0xJywKLSAgICAncGRfdXMuaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgJ3BkX1VTLklTTzg4NTktMTUnLAotICAgICdwZF91c0BldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAncGRfVVMuSVNPODg1OS0xNScsCiAgICAgJ3BoJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwaF9QSC5JU084ODU5LTEnLAogICAgICdwaF9waCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGhfUEguSVNPODg1OS0xJywKLSAgICAncGhfcGguaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ3BoX1BILklTTzg4NTktMScsCiAgICAgJ3BsJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwbF9QTC5JU084ODU5LTInLAogICAgICdwbF9wbCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGxfUEwuSVNPODg1OS0yJywKLSAgICAncGxfcGwuaXNvODg1OTInOiAgICAgICAgICAgICAgICAgICAgICAgJ3BsX1BMLklTTzg4NTktMicsCiAgICAgJ3BvbGlzaCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwbF9QTC5JU084ODU5LTInLAogICAgICdwb3J0dWd1ZXNlJzogICAgICAgICAgICAgICAgICAgICAgICAgICAncHRfUFQuSVNPODg1OS0xJywKLSAgICAncG9ydHVndWVzZS5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgJ3B0X1BULklTTzg4NTktMScsCiAgICAgJ3BvcnR1Z3Vlc2VfYnJhemlsJzogICAgICAgICAgICAgICAgICAgICdwdF9CUi5JU084ODU5LTEnLAotICAgICdwb3J0dWd1ZXNlX2JyYXppbC44ODU5JzogICAgICAgICAgICAgICAncHRfQlIuSVNPODg1OS0xJywKICAgICAncG9zaXgnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0MnLAogICAgICdwb3NpeC11dGYyJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnQycsCiAgICAgJ3BwJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwcF9BTi5JU084ODU5LTEnLAogICAgICdwcF9hbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncHBfQU4uSVNPODg1OS0xJywKLSAgICAncHBfYW4uaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ3BwX0FOLklTTzg4NTktMScsCisgICAgJ3BzX2FmJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwc19BRi5VVEYtOCcsCiAgICAgJ3B0JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwdF9QVC5JU084ODU5LTEnLAotICAgICdwdC5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAgICAncHRfUFQuSVNPODg1OS0xNScsCiAgICAgJ3B0X2JyJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwdF9CUi5JU084ODU5LTEnLAotICAgICdwdF9ici44ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAncHRfQlIuSVNPODg1OS0xJywKLSAgICAncHRfYnIuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ3B0X0JSLklTTzg4NTktMScsCi0gICAgJ3B0X2JyLmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICdwdF9CUi5JU084ODU5LTE1JywKLSAgICAncHRfYnJAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3B0X0JSLklTTzg4NTktMTUnLAogICAgICdwdF9wdCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncHRfUFQuSVNPODg1OS0xJywKLSAgICAncHRfcHQuODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgICAgJ3B0X1BULklTTzg4NTktMScsCi0gICAgJ3B0X3B0Lmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdwdF9QVC5JU084ODU5LTEnLAotICAgICdwdF9wdC5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAncHRfUFQuSVNPODg1OS0xNScsCi0gICAgJ3B0X3B0Lmlzbzg4NTkxNUBldXJvJzogICAgICAgICAgICAgICAgICdwdF9QVC5JU084ODU5LTE1JywKLSAgICAncHRfcHQudXRmOEBldXJvJzogICAgICAgICAgICAgICAgICAgICAgJ3B0X1BULlVURi04JywKLSAgICAncHRfcHRAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3B0X1BULklTTzg4NTktMTUnLAogICAgICdybyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncm9fUk8uSVNPODg1OS0yJywKICAgICAncm9fcm8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JvX1JPLklTTzg4NTktMicsCi0gICAgJ3JvX3JvLmlzbzg4NTkyJzogICAgICAgICAgICAgICAgICAgICAgICdyb19STy5JU084ODU5LTInLAogICAgICdyb21hbmlhbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncm9fUk8uSVNPODg1OS0yJywKICAgICAncnUnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J1X1JVLlVURi04JywKLSAgICAncnUua29pOHInOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J1X1JVLktPSTgtUicsCiAgICAgJ3J1X3J1JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydV9SVS5VVEYtOCcsCi0gICAgJ3J1X3J1LmNwMTI1MSc6ICAgICAgICAgICAgICAgICAgICAgICAgICdydV9SVS5DUDEyNTEnLAotICAgICdydV9ydS5pc284ODU5NSc6ICAgICAgICAgICAgICAgICAgICAgICAncnVfUlUuSVNPODg1OS01JywKLSAgICAncnVfcnUua29pOHInOiAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J1X1JVLktPSTgtUicsCi0gICAgJ3J1X3J1Lm1pY3Jvc29mdGNwMTI1MSc6ICAgICAgICAgICAgICAgICdydV9SVS5DUDEyNTEnLAogICAgICdydV91YSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnVfVUEuS09JOC1VJywKLSAgICAncnVfdWEuY3AxMjUxJzogICAgICAgICAgICAgICAgICAgICAgICAgJ3J1X1VBLkNQMTI1MScsCi0gICAgJ3J1X3VhLmtvaTh1JzogICAgICAgICAgICAgICAgICAgICAgICAgICdydV9VQS5LT0k4LVUnLAotICAgICdydV91YS5taWNyb3NvZnRjcDEyNTEnOiAgICAgICAgICAgICAgICAncnVfVUEuQ1AxMjUxJywKICAgICAncnVtYW5pYW4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JvX1JPLklTTzg4NTktMicsCiAgICAgJ3J1c3NpYW4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydV9SVS5JU084ODU5LTUnLAogICAgICdydyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncndfUlcuSVNPODg1OS0xJywKICAgICAncndfcncnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J3X1JXLklTTzg4NTktMScsCi0gICAgJ3J3X3J3Lmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdyd19SVy5JU084ODU5LTEnLAorICAgICdzYV9pbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2FfSU4uVVRGLTgnLAorICAgICdzYXRfaW4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2F0X0lOLlVURi04JywKKyAgICAnc2NfaXQnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NjX0lULlVURi04JywKICAgICAnc2QnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NkX0lOLlVURi04JywKLSAgICAnc2RAZGV2YW5hZ2FyaSc6ICAgICAgICAgICAgICAgICAgICAgICAgJ3NkX0lOLlVURi04QGRldmFuYWdhcmknLAogICAgICdzZF9pbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2RfSU4uVVRGLTgnLAotICAgICdzZF9pbkBkZXZhbmFnYXJpJzogICAgICAgICAgICAgICAgICAgICAnc2RfSU4uVVRGLThAZGV2YW5hZ2FyaScsCisgICAgJ3NkX2luQGRldmFuYWdhcmkudXRmOCc6ICAgICAgICAgICAgICAgICdzZF9JTi5VVEYtOEBkZXZhbmFnYXJpJywKKyAgICAnc2RfcGsnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NkX1BLLlVURi04JywKICAgICAnc2Vfbm8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NlX05PLlVURi04JywKICAgICAnc2VyYm9jcm9hdGlhbic6ICAgICAgICAgICAgICAgICAgICAgICAgJ3NyX1JTLlVURi04QGxhdGluJywKICAgICAnc2gnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NyX1JTLlVURi04QGxhdGluJywKQEAgLTE0OTYsNDIgKzEyNDIsMzggQEAKICAgICAnc2hfaHIuaXNvODg1OTInOiAgICAgICAgICAgICAgICAgICAgICAgJ2hyX0hSLklTTzg4NTktMicsCiAgICAgJ3NoX3NwJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzcl9DUy5JU084ODU5LTInLAogICAgICdzaF95dSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3JfUlMuVVRGLThAbGF0aW4nLAorICAgICdzaHNfY2EnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2hzX0NBLlVURi04JywKICAgICAnc2knOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NpX0xLLlVURi04JywKICAgICAnc2lfbGsnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NpX0xLLlVURi04JywKKyAgICAnc2lkX2V0JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NpZF9FVC5VVEYtOCcsCiAgICAgJ3NpbmhhbGEnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzaV9MSy5VVEYtOCcsCiAgICAgJ3NrJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdza19TSy5JU084ODU5LTInLAogICAgICdza19zayc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2tfU0suSVNPODg1OS0yJywKLSAgICAnc2tfc2suaXNvODg1OTInOiAgICAgICAgICAgICAgICAgICAgICAgJ3NrX1NLLklTTzg4NTktMicsCiAgICAgJ3NsJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzbF9TSS5JU084ODU5LTInLAogICAgICdzbF9jcyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2xfQ1MuSVNPODg1OS0yJywKICAgICAnc2xfc2knOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NsX1NJLklTTzg4NTktMicsCi0gICAgJ3NsX3NpLmlzbzg4NTkyJzogICAgICAgICAgICAgICAgICAgICAgICdzbF9TSS5JU084ODU5LTInLAogICAgICdzbG92YWsnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2tfU0suSVNPODg1OS0yJywKICAgICAnc2xvdmVuZSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NsX1NJLklTTzg4NTktMicsCiAgICAgJ3Nsb3Zlbmlhbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzbF9TSS5JU084ODU5LTInLAorICAgICdzb19kaic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc29fREouSVNPODg1OS0xJywKKyAgICAnc29fZXQnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NvX0VULlVURi04JywKKyAgICAnc29fa2UnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NvX0tFLklTTzg4NTktMScsCisgICAgJ3NvX3NvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzb19TTy5JU084ODU5LTEnLAogICAgICdzcCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3JfQ1MuSVNPODg1OS01JywKICAgICAnc3BfeXUnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NyX0NTLklTTzg4NTktNScsCiAgICAgJ3NwYW5pc2gnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlc19FUy5JU084ODU5LTEnLAotICAgICdzcGFuaXNoLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAnZXNfRVMuSVNPODg1OS0xJywKICAgICAnc3BhbmlzaF9zcGFpbic6ICAgICAgICAgICAgICAgICAgICAgICAgJ2VzX0VTLklTTzg4NTktMScsCi0gICAgJ3NwYW5pc2hfc3BhaW4uODg1OSc6ICAgICAgICAgICAgICAgICAgICdlc19FUy5JU084ODU5LTEnLAogICAgICdzcSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3FfQUwuSVNPODg1OS0yJywKICAgICAnc3FfYWwnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NxX0FMLklTTzg4NTktMicsCi0gICAgJ3NxX2FsLmlzbzg4NTkyJzogICAgICAgICAgICAgICAgICAgICAgICdzcV9BTC5JU084ODU5LTInLAorICAgICdzcV9tayc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3FfTUsuVVRGLTgnLAogICAgICdzcic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3JfUlMuVVRGLTgnLAogICAgICdzckBjeXJpbGxpYyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAnc3JfUlMuVVRGLTgnLAotICAgICdzckBsYXRpbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3JfUlMuVVRGLThAbGF0aW4nLAogICAgICdzckBsYXRuJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3JfQ1MuVVRGLThAbGF0aW4nLAogICAgICdzcl9jcyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3JfQ1MuVVRGLTgnLAotICAgICdzcl9jcy5pc284ODU5Mic6ICAgICAgICAgICAgICAgICAgICAgICAnc3JfQ1MuSVNPODg1OS0yJywKICAgICAnc3JfY3MuaXNvODg1OTJAbGF0bic6ICAgICAgICAgICAgICAgICAgJ3NyX0NTLklTTzg4NTktMicsCi0gICAgJ3NyX2NzLmlzbzg4NTk1JzogICAgICAgICAgICAgICAgICAgICAgICdzcl9DUy5JU084ODU5LTUnLAotICAgICdzcl9jcy51dGY4QGxhdG4nOiAgICAgICAgICAgICAgICAgICAgICAnc3JfQ1MuVVRGLThAbGF0aW4nLAogICAgICdzcl9jc0BsYXRuJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnc3JfQ1MuVVRGLThAbGF0aW4nLAogICAgICdzcl9tZSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3JfTUUuVVRGLTgnLAogICAgICdzcl9ycyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3JfUlMuVVRGLTgnLAotICAgICdzcl9ycy51dGY4QGxhdG4nOiAgICAgICAgICAgICAgICAgICAgICAnc3JfUlMuVVRGLThAbGF0aW4nLAotICAgICdzcl9yc0BsYXRpbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAnc3JfUlMuVVRGLThAbGF0aW4nLAogICAgICdzcl9yc0BsYXRuJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnc3JfUlMuVVRGLThAbGF0aW4nLAogICAgICdzcl9zcCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3JfQ1MuSVNPODg1OS0yJywKICAgICAnc3JfeXUnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NyX1JTLlVURi04QGxhdGluJywKQEAgLTE1NDAsNzkgKzEyODIsNjQgQEAKICAgICAnc3JfeXUuaXNvODg1OTUnOiAgICAgICAgICAgICAgICAgICAgICAgJ3NyX0NTLklTTzg4NTktNScsCiAgICAgJ3NyX3l1Lmlzbzg4NTk1QGN5cmlsbGljJzogICAgICAgICAgICAgICdzcl9DUy5JU084ODU5LTUnLAogICAgICdzcl95dS5taWNyb3NvZnRjcDEyNTFAY3lyaWxsaWMnOiAgICAgICAnc3JfQ1MuQ1AxMjUxJywKKyAgICAnc3JfeXUudXRmOCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NyX1JTLlVURi04JywKICAgICAnc3JfeXUudXRmOEBjeXJpbGxpYyc6ICAgICAgICAgICAgICAgICAgJ3NyX1JTLlVURi04JywKICAgICAnc3JfeXVAY3lyaWxsaWMnOiAgICAgICAgICAgICAgICAgICAgICAgJ3NyX1JTLlVURi04JywKICAgICAnc3MnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NzX1pBLklTTzg4NTktMScsCiAgICAgJ3NzX3phJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzc19aQS5JU084ODU5LTEnLAotICAgICdzc196YS5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnc3NfWkEuSVNPODg1OS0xJywKICAgICAnc3QnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N0X1pBLklTTzg4NTktMScsCiAgICAgJ3N0X3phJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzdF9aQS5JU084ODU5LTEnLAotICAgICdzdF96YS5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnc3RfWkEuSVNPODg1OS0xJywKICAgICAnc3YnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N2X1NFLklTTzg4NTktMScsCi0gICAgJ3N2Lmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICAgICdzdl9TRS5JU084ODU5LTE1JywKICAgICAnc3ZfZmknOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N2X0ZJLklTTzg4NTktMScsCi0gICAgJ3N2X2ZpLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdzdl9GSS5JU084ODU5LTEnLAotICAgICdzdl9maS5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAnc3ZfRkkuSVNPODg1OS0xNScsCi0gICAgJ3N2X2ZpLmlzbzg4NTkxNUBldXJvJzogICAgICAgICAgICAgICAgICdzdl9GSS5JU084ODU5LTE1JywKLSAgICAnc3ZfZmkudXRmOEBldXJvJzogICAgICAgICAgICAgICAgICAgICAgJ3N2X0ZJLlVURi04JywKLSAgICAnc3ZfZmlAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N2X0ZJLklTTzg4NTktMTUnLAogICAgICdzdl9zZSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3ZfU0UuSVNPODg1OS0xJywKLSAgICAnc3Zfc2UuODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N2X1NFLklTTzg4NTktMScsCi0gICAgJ3N2X3NlLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdzdl9TRS5JU084ODU5LTEnLAotICAgICdzdl9zZS5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAnc3ZfU0UuSVNPODg1OS0xNScsCi0gICAgJ3N2X3NlQGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdzdl9TRS5JU084ODU5LTE1JywKKyAgICAnc3dfa2UnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N3X0tFLlVURi04JywKKyAgICAnc3dfdHonOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N3X1RaLlVURi04JywKICAgICAnc3dlZGlzaCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N2X1NFLklTTzg4NTktMScsCi0gICAgJ3N3ZWRpc2guaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICdzdl9TRS5JU084ODU5LTEnLAorICAgICdzemxfcGwnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3psX1BMLlVURi04JywKICAgICAndGEnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RhX0lOLlRTQ0lJLTAnLAogICAgICd0YV9pbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGFfSU4uVFNDSUktMCcsCiAgICAgJ3RhX2luLnRzY2lpJzogICAgICAgICAgICAgICAgICAgICAgICAgICd0YV9JTi5UU0NJSS0wJywKICAgICAndGFfaW4udHNjaWkwJzogICAgICAgICAgICAgICAgICAgICAgICAgJ3RhX0lOLlRTQ0lJLTAnLAorICAgICd0YV9sayc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGFfTEsuVVRGLTgnLAogICAgICd0ZSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGVfSU4uVVRGLTgnLAorICAgICd0ZV9pbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGVfSU4uVVRGLTgnLAogICAgICd0Zyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGdfVEouS09JOC1DJywKICAgICAndGdfdGonOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RnX1RKLktPSTgtQycsCi0gICAgJ3RnX3RqLmtvaThjJzogICAgICAgICAgICAgICAgICAgICAgICAgICd0Z19USi5LT0k4LUMnLAogICAgICd0aCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGhfVEguSVNPODg1OS0xMScsCiAgICAgJ3RoX3RoJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0aF9USC5JU084ODU5LTExJywKLSAgICAndGhfdGguaXNvODg1OTExJzogICAgICAgICAgICAgICAgICAgICAgJ3RoX1RILklTTzg4NTktMTEnLAogICAgICd0aF90aC50YWN0aXMnOiAgICAgICAgICAgICAgICAgICAgICAgICAndGhfVEguVElTNjIwJywKICAgICAndGhfdGgudGlzNjIwJzogICAgICAgICAgICAgICAgICAgICAgICAgJ3RoX1RILlRJUzYyMCcsCiAgICAgJ3RoYWknOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0aF9USC5JU084ODU5LTExJywKKyAgICAndGlfZXInOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RpX0VSLlVURi04JywKKyAgICAndGlfZXQnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RpX0VULlVURi04JywKKyAgICAndGlnX2VyJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RpZ19FUi5VVEYtOCcsCisgICAgJ3RrX3RtJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0a19UTS5VVEYtOCcsCiAgICAgJ3RsJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0bF9QSC5JU084ODU5LTEnLAogICAgICd0bF9waCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGxfUEguSVNPODg1OS0xJywKLSAgICAndGxfcGguaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ3RsX1BILklTTzg4NTktMScsCiAgICAgJ3RuJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0bl9aQS5JU084ODU5LTE1JywKICAgICAndG5femEnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RuX1pBLklTTzg4NTktMTUnLAotICAgICd0bl96YS5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAndG5fWkEuSVNPODg1OS0xNScsCiAgICAgJ3RyJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0cl9UUi5JU084ODU5LTknLAorICAgICd0cl9jeSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndHJfQ1kuSVNPODg1OS05JywKICAgICAndHJfdHInOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RyX1RSLklTTzg4NTktOScsCi0gICAgJ3RyX3RyLmlzbzg4NTk5JzogICAgICAgICAgICAgICAgICAgICAgICd0cl9UUi5JU084ODU5LTknLAogICAgICd0cyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndHNfWkEuSVNPODg1OS0xJywKICAgICAndHNfemEnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RzX1pBLklTTzg4NTktMScsCi0gICAgJ3RzX3phLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICd0c19aQS5JU084ODU5LTEnLAogICAgICd0dCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndHRfUlUuVEFUQVItQ1lSJywKICAgICAndHRfcnUnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3R0X1JVLlRBVEFSLUNZUicsCi0gICAgJ3R0X3J1LmtvaThjJzogICAgICAgICAgICAgICAgICAgICAgICAgICd0dF9SVS5LT0k4LUMnLAogICAgICd0dF9ydS50YXRhcmN5cic6ICAgICAgICAgICAgICAgICAgICAgICAndHRfUlUuVEFUQVItQ1lSJywKKyAgICAndHRfcnVAaXF0ZWxpZic6ICAgICAgICAgICAgICAgICAgICAgICAgJ3R0X1JVLlVURi04QGlxdGVsaWYnLAogICAgICd0dXJraXNoJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndHJfVFIuSVNPODg1OS05JywKLSAgICAndHVya2lzaC5pc284ODU5OSc6ICAgICAgICAgICAgICAgICAgICAgJ3RyX1RSLklTTzg4NTktOScsCisgICAgJ3VnX2NuJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1Z19DTi5VVEYtOCcsCiAgICAgJ3VrJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1a19VQS5LT0k4LVUnLAogICAgICd1a191YSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndWtfVUEuS09JOC1VJywKLSAgICAndWtfdWEuY3AxMjUxJzogICAgICAgICAgICAgICAgICAgICAgICAgJ3VrX1VBLkNQMTI1MScsCi0gICAgJ3VrX3VhLmlzbzg4NTk1JzogICAgICAgICAgICAgICAgICAgICAgICd1a19VQS5JU084ODU5LTUnLAotICAgICd1a191YS5rb2k4dSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAndWtfVUEuS09JOC1VJywKLSAgICAndWtfdWEubWljcm9zb2Z0Y3AxMjUxJzogICAgICAgICAgICAgICAgJ3VrX1VBLkNQMTI1MScsCiAgICAgJ3VuaXYnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbl9VUy51dGYnLAogICAgICd1bml2ZXJzYWwnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZW5fVVMudXRmJywKICAgICAndW5pdmVyc2FsLnV0ZjhAdWNzNCc6ICAgICAgICAgICAgICAgICAgJ2VuX1VTLlVURi04JywKKyAgICAndW5tX3VzJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3VubV9VUy5VVEYtOCcsCiAgICAgJ3VyJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1cl9QSy5DUDEyNTYnLAogICAgICd1cl9pbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXJfSU4uVVRGLTgnLAogICAgICd1cl9wayc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXJfUEsuQ1AxMjU2JywKLSAgICAndXJfcGsuY3AxMjU2JzogICAgICAgICAgICAgICAgICAgICAgICAgJ3VyX1BLLkNQMTI1NicsCi0gICAgJ3VyX3BrLm1pY3Jvc29mdGNwMTI1Nic6ICAgICAgICAgICAgICAgICd1cl9QSy5DUDEyNTYnLAogICAgICd1eic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXpfVVouVVRGLTgnLAogICAgICd1el91eic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXpfVVouVVRGLTgnLAotICAgICd1el91ei5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAndXpfVVouSVNPODg1OS0xJywKLSAgICAndXpfdXoudXRmOEBjeXJpbGxpYyc6ICAgICAgICAgICAgICAgICAgJ3V6X1VaLlVURi04JywKICAgICAndXpfdXpAY3lyaWxsaWMnOiAgICAgICAgICAgICAgICAgICAgICAgJ3V6X1VaLlVURi04JywKICAgICAndmUnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3ZlX1pBLlVURi04JywKICAgICAndmVfemEnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3ZlX1pBLlVURi04JywKQEAgLTE2MjQsMzUgKzEzNTEsMjggQEAKICAgICAndmlfdm4udmlzY2lpMTExJzogICAgICAgICAgICAgICAgICAgICAgJ3ZpX1ZOLlZJU0NJSScsCiAgICAgJ3dhJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3YV9CRS5JU084ODU5LTEnLAogICAgICd3YV9iZSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2FfQkUuSVNPODg1OS0xJywKLSAgICAnd2FfYmUuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ3dhX0JFLklTTzg4NTktMScsCi0gICAgJ3dhX2JlLmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICd3YV9CRS5JU084ODU5LTE1JywKLSAgICAnd2FfYmUuaXNvODg1OTE1QGV1cm8nOiAgICAgICAgICAgICAgICAgJ3dhX0JFLklTTzg4NTktMTUnLAotICAgICd3YV9iZUBldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnd2FfQkUuSVNPODg1OS0xNScsCisgICAgJ3dhZV9jaCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3YWVfQ0guVVRGLTgnLAorICAgICd3YWxfZXQnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2FsX0VULlVURi04JywKKyAgICAnd29fc24nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dvX1NOLlVURi04JywKICAgICAneGgnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3hoX1pBLklTTzg4NTktMScsCiAgICAgJ3hoX3phJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd4aF9aQS5JU084ODU5LTEnLAotICAgICd4aF96YS5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAneGhfWkEuSVNPODg1OS0xJywKICAgICAneWknOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3lpX1VTLkNQMTI1NScsCiAgICAgJ3lpX3VzJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd5aV9VUy5DUDEyNTUnLAotICAgICd5aV91cy5jcDEyNTUnOiAgICAgICAgICAgICAgICAgICAgICAgICAneWlfVVMuQ1AxMjU1JywKLSAgICAneWlfdXMubWljcm9zb2Z0Y3AxMjU1JzogICAgICAgICAgICAgICAgJ3lpX1VTLkNQMTI1NScsCisgICAgJ3lvX25nJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd5b19ORy5VVEYtOCcsCisgICAgJ3l1ZV9oayc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd5dWVfSEsuVVRGLTgnLAogICAgICd6aCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnemhfQ04uZXVjQ04nLAogICAgICd6aF9jbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnemhfQ04uZ2IyMzEyJywKICAgICAnemhfY24uYmlnNSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3poX1RXLmJpZzUnLAogICAgICd6aF9jbi5ldWMnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnemhfQ04uZXVjQ04nLAotICAgICd6aF9jbi5nYjE4MDMwJzogICAgICAgICAgICAgICAgICAgICAgICAnemhfQ04uZ2IxODAzMCcsCi0gICAgJ3poX2NuLmdiMjMxMic6ICAgICAgICAgICAgICAgICAgICAgICAgICd6aF9DTi5nYjIzMTInLAotICAgICd6aF9jbi5nYmsnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnemhfQ04uZ2JrJywKICAgICAnemhfaGsnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3poX0hLLmJpZzVoa3NjcycsCi0gICAgJ3poX2hrLmJpZzUnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICd6aF9ISy5iaWc1JywKICAgICAnemhfaGsuYmlnNWhrJzogICAgICAgICAgICAgICAgICAgICAgICAgJ3poX0hLLmJpZzVoa3NjcycsCi0gICAgJ3poX2hrLmJpZzVoa3Njcyc6ICAgICAgICAgICAgICAgICAgICAgICd6aF9ISy5iaWc1aGtzY3MnLAorICAgICd6aF9zZyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnemhfU0cuR0IyMzEyJywKKyAgICAnemhfc2cuZ2JrJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3poX1NHLkdCSycsCiAgICAgJ3poX3R3JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd6aF9UVy5iaWc1JywKLSAgICAnemhfdHcuYmlnNSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3poX1RXLmJpZzUnLAogICAgICd6aF90dy5ldWMnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnemhfVFcuZXVjVFcnLAogICAgICd6aF90dy5ldWN0dyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAnemhfVFcuZXVjVFcnLAogICAgICd6dSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnenVfWkEuSVNPODg1OS0xJywKICAgICAnenVfemEnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3p1X1pBLklTTzg4NTktMScsCi0gICAgJ3p1X3phLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICd6dV9aQS5JU084ODU5LTEnLAogfQogCiAjCmRpZmYgLS1naXQgYS9MaWIvbG9nZ2luZy9fX2luaXRfXy5weSBiL0xpYi9sb2dnaW5nL19faW5pdF9fLnB5CmluZGV4IDlmNDM2ZjMuLjY3ZDlkMmUgMTAwNjQ0Ci0tLSBhL0xpYi9sb2dnaW5nL19faW5pdF9fLnB5CisrKyBiL0xpYi9sb2dnaW5nL19faW5pdF9fLnB5CkBAIC0xLDQgKzEsNCBAQAotIyBDb3B5cmlnaHQgMjAwMS0yMDEzIGJ5IFZpbmF5IFNhamlwLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIyBDb3B5cmlnaHQgMjAwMS0yMDE0IGJ5IFZpbmF5IFNhamlwLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogIwogIyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMKICMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLApAQCAtMTgsMTIgKzE4LDEzIEBACiBMb2dnaW5nIHBhY2thZ2UgZm9yIFB5dGhvbi4gQmFzZWQgb24gUEVQIDI4MiBhbmQgY29tbWVudHMgdGhlcmV0byBpbgogY29tcC5sYW5nLnB5dGhvbi4KIAotQ29weXJpZ2h0IChDKSAyMDAxLTIwMTMgVmluYXkgU2FqaXAuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCitDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNCBWaW5heSBTYWppcC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KIAogVG8gdXNlLCBzaW1wbHkgJ2ltcG9ydCBsb2dnaW5nJyBhbmQgbG9nIGF3YXkhCiAiIiIKIAotaW1wb3J0IHN5cywgb3MsIHRpbWUsIGlvLCB0cmFjZWJhY2ssIHdhcm5pbmdzLCB3ZWFrcmVmCitpbXBvcnQgc3lzLCBvcywgdGltZSwgaW8sIHRyYWNlYmFjaywgd2FybmluZ3MsIHdlYWtyZWYsIGNvbGxlY3Rpb25zCisKIGZyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQogCiBfX2FsbF9fID0gWydCQVNJQ19GT1JNQVQnLCAnQnVmZmVyaW5nRm9ybWF0dGVyJywgJ0NSSVRJQ0FMJywgJ0RFQlVHJywgJ0VSUk9SJywKQEAgLTQyLDYgKzQzLDcgQEAKIAogX19hdXRob3JfXyAgPSAiVmluYXkgU2FqaXAgPHZpbmF5X3NhamlwQHJlZC1kb3ZlLmNvbT4iCiBfX3N0YXR1c19fICA9ICJwcm9kdWN0aW9uIgorIyBUaGUgZm9sbG93aW5nIG1vZHVsZSBhdHRyaWJ1dGVzIGFyZSBubyBsb25nZXIgdXBkYXRlZC4KIF9fdmVyc2lvbl9fID0gIjAuNS4xLjIiCiBfX2RhdGVfXyAgICA9ICIwNyBGZWJydWFyeSAyMDEwIgogCkBAIC01MCwzNCArNTIsNiBAQAogIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAjCi0jIF9zcmNmaWxlIGlzIHVzZWQgd2hlbiB3YWxraW5nIHRoZSBzdGFjayB0byBjaGVjayB3aGVuIHdlJ3ZlIGdvdCB0aGUgZmlyc3QKLSMgY2FsbGVyIHN0YWNrIGZyYW1lLgotIwotaWYgaGFzYXR0cihzeXMsICdmcm96ZW4nKTogI3N1cHBvcnQgZm9yIHB5MmV4ZQotICAgIF9zcmNmaWxlID0gImxvZ2dpbmclc19faW5pdF9fJXMiICUgKG9zLnNlcCwgX19maWxlX19bLTQ6XSkKLWVsc2U6Ci0gICAgX3NyY2ZpbGUgPSBfX2ZpbGVfXwotX3NyY2ZpbGUgPSBvcy5wYXRoLm5vcm1jYXNlKF9zcmNmaWxlKQotCi0KLWlmIGhhc2F0dHIoc3lzLCAnX2dldGZyYW1lJyk6Ci0gICAgY3VycmVudGZyYW1lID0gbGFtYmRhOiBzeXMuX2dldGZyYW1lKDMpCi1lbHNlOiAjcHJhZ21hOiBubyBjb3ZlcgotICAgIGRlZiBjdXJyZW50ZnJhbWUoKToKLSAgICAgICAgIiIiUmV0dXJuIHRoZSBmcmFtZSBvYmplY3QgZm9yIHRoZSBjYWxsZXIncyBzdGFjayBmcmFtZS4iIiIKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uCi0gICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgIHJldHVybiBzeXMuZXhjX2luZm8oKVsyXS50Yl9mcmFtZS5mX2JhY2sKLQotIyBfc3JjZmlsZSBpcyBvbmx5IHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBzeXMuX2dldGZyYW1lKCkuCi0jIFRvIHByb3ZpZGUgY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIHZlcnNpb25zIG9mIFB5dGhvbiwgc2V0IF9zcmNmaWxlCi0jIHRvIE5vbmUgaWYgX2dldGZyYW1lKCkgaXMgbm90IGF2YWlsYWJsZTsgdGhpcyB2YWx1ZSB3aWxsIHByZXZlbnQKLSMgZmluZENhbGxlcigpIGZyb20gYmVpbmcgY2FsbGVkLgotI2lmIG5vdCBoYXNhdHRyKHN5cywgIl9nZXRmcmFtZSIpOgotIyAgICBfc3JjZmlsZSA9IE5vbmUKLQotIwogI19zdGFydFRpbWUgaXMgdXNlZCBhcyB0aGUgYmFzZSB3aGVuIGNhbGN1bGF0aW5nIHRoZSByZWxhdGl2ZSB0aW1lIG9mIGV2ZW50cwogIwogX3N0YXJ0VGltZSA9IHRpbWUudGltZSgpCkBAIC0xMjMsMjAgKzk3LDIyIEBACiBERUJVRyA9IDEwCiBOT1RTRVQgPSAwCiAKLV9sZXZlbE5hbWVzID0gewotICAgIENSSVRJQ0FMIDogJ0NSSVRJQ0FMJywKLSAgICBFUlJPUiA6ICdFUlJPUicsCi0gICAgV0FSTklORyA6ICdXQVJOSU5HJywKLSAgICBJTkZPIDogJ0lORk8nLAotICAgIERFQlVHIDogJ0RFQlVHJywKLSAgICBOT1RTRVQgOiAnTk9UU0VUJywKLSAgICAnQ1JJVElDQUwnIDogQ1JJVElDQUwsCi0gICAgJ0VSUk9SJyA6IEVSUk9SLAotICAgICdXQVJOJyA6IFdBUk5JTkcsCi0gICAgJ1dBUk5JTkcnIDogV0FSTklORywKLSAgICAnSU5GTycgOiBJTkZPLAotICAgICdERUJVRycgOiBERUJVRywKLSAgICAnTk9UU0VUJyA6IE5PVFNFVCwKK19sZXZlbFRvTmFtZSA9IHsKKyAgICBDUklUSUNBTDogJ0NSSVRJQ0FMJywKKyAgICBFUlJPUjogJ0VSUk9SJywKKyAgICBXQVJOSU5HOiAnV0FSTklORycsCisgICAgSU5GTzogJ0lORk8nLAorICAgIERFQlVHOiAnREVCVUcnLAorICAgIE5PVFNFVDogJ05PVFNFVCcsCit9CitfbmFtZVRvTGV2ZWwgPSB7CisgICAgJ0NSSVRJQ0FMJzogQ1JJVElDQUwsCisgICAgJ0VSUk9SJzogRVJST1IsCisgICAgJ1dBUk4nOiBXQVJOSU5HLAorICAgICdXQVJOSU5HJzogV0FSTklORywKKyAgICAnSU5GTyc6IElORk8sCisgICAgJ0RFQlVHJzogREVCVUcsCisgICAgJ05PVFNFVCc6IE5PVFNFVCwKIH0KIAogZGVmIGdldExldmVsTmFtZShsZXZlbCk6CkBAIC0xNTMsNyArMTI5LDggQEAKIAogICAgIE90aGVyd2lzZSwgdGhlIHN0cmluZyAiTGV2ZWwgJXMiICUgbGV2ZWwgaXMgcmV0dXJuZWQuCiAgICAgIiIiCi0gICAgcmV0dXJuIF9sZXZlbE5hbWVzLmdldChsZXZlbCwgKCJMZXZlbCAlcyIgJSBsZXZlbCkpCisgICAgIyBTZWUgSXNzdWUgIzIyMzg2IGZvciB0aGUgcmVhc29uIGZvciB0aGlzIGNvbnZvbHV0ZWQgZXhwcmVzc2lvbgorICAgIHJldHVybiBfbGV2ZWxUb05hbWUuZ2V0KGxldmVsLCBfbmFtZVRvTGV2ZWwuZ2V0KGxldmVsLCAoIkxldmVsICVzIiAlIGxldmVsKSkpCiAKIGRlZiBhZGRMZXZlbE5hbWUobGV2ZWwsIGxldmVsTmFtZSk6CiAgICAgIiIiCkBAIC0xNjMsMTggKzE0MCw1MiBAQAogICAgICIiIgogICAgIF9hY3F1aXJlTG9jaygpCiAgICAgdHJ5OiAgICAjdW5saWtlbHkgdG8gY2F1c2UgYW4gZXhjZXB0aW9uLCBidXQgeW91IG5ldmVyIGtub3cuLi4KLSAgICAgICAgX2xldmVsTmFtZXNbbGV2ZWxdID0gbGV2ZWxOYW1lCi0gICAgICAgIF9sZXZlbE5hbWVzW2xldmVsTmFtZV0gPSBsZXZlbAorICAgICAgICBfbGV2ZWxUb05hbWVbbGV2ZWxdID0gbGV2ZWxOYW1lCisgICAgICAgIF9uYW1lVG9MZXZlbFtsZXZlbE5hbWVdID0gbGV2ZWwKICAgICBmaW5hbGx5OgogICAgICAgICBfcmVsZWFzZUxvY2soKQogCitpZiBoYXNhdHRyKHN5cywgJ19nZXRmcmFtZScpOgorICAgIGN1cnJlbnRmcmFtZSA9IGxhbWJkYTogc3lzLl9nZXRmcmFtZSgzKQorZWxzZTogI3ByYWdtYTogbm8gY292ZXIKKyAgICBkZWYgY3VycmVudGZyYW1lKCk6CisgICAgICAgICIiIlJldHVybiB0aGUgZnJhbWUgb2JqZWN0IGZvciB0aGUgY2FsbGVyJ3Mgc3RhY2sgZnJhbWUuIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbgorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgcmV0dXJuIHN5cy5leGNfaW5mbygpWzJdLnRiX2ZyYW1lLmZfYmFjaworCisjCisjIF9zcmNmaWxlIGlzIHVzZWQgd2hlbiB3YWxraW5nIHRoZSBzdGFjayB0byBjaGVjayB3aGVuIHdlJ3ZlIGdvdCB0aGUgZmlyc3QKKyMgY2FsbGVyIHN0YWNrIGZyYW1lLCBieSBza2lwcGluZyBmcmFtZXMgd2hvc2UgZmlsZW5hbWUgaXMgdGhhdCBvZiB0aGlzCisjIG1vZHVsZSdzIHNvdXJjZS4gSXQgdGhlcmVmb3JlIHNob3VsZCBjb250YWluIHRoZSBmaWxlbmFtZSBvZiB0aGlzIG1vZHVsZSdzCisjIHNvdXJjZSBmaWxlLgorIworIyBPcmRpbmFyaWx5IHdlIHdvdWxkIHVzZSBfX2ZpbGVfXyBmb3IgdGhpcywgYnV0IGZyb3plbiBtb2R1bGVzIGRvbid0IGFsd2F5cworIyBoYXZlIF9fZmlsZV9fIHNldCwgZm9yIHNvbWUgcmVhc29uIChzZWUgSXNzdWUgIzIxNzM2KS4gVGh1cywgd2UgZ2V0IHRoZQorIyBmaWxlbmFtZSBmcm9tIGEgaGFuZHkgY29kZSBvYmplY3QgZnJvbSBhIGZ1bmN0aW9uIGRlZmluZWQgaW4gdGhpcyBtb2R1bGUuCisjIChUaGVyZSdzIG5vIHBhcnRpY3VsYXIgcmVhc29uIGZvciBwaWNraW5nIGFkZExldmVsTmFtZS4pCisjCisKK19zcmNmaWxlID0gb3MucGF0aC5ub3JtY2FzZShhZGRMZXZlbE5hbWUuX19jb2RlX18uY29fZmlsZW5hbWUpCisKKyMgX3NyY2ZpbGUgaXMgb25seSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggc3lzLl9nZXRmcmFtZSgpLgorIyBUbyBwcm92aWRlIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciB2ZXJzaW9ucyBvZiBQeXRob24sIHNldCBfc3JjZmlsZQorIyB0byBOb25lIGlmIF9nZXRmcmFtZSgpIGlzIG5vdCBhdmFpbGFibGU7IHRoaXMgdmFsdWUgd2lsbCBwcmV2ZW50CisjIGZpbmRDYWxsZXIoKSBmcm9tIGJlaW5nIGNhbGxlZC4gWW91IGNhbiBhbHNvIGRvIHRoaXMgaWYgeW91IHdhbnQgdG8gYXZvaWQKKyMgdGhlIG92ZXJoZWFkIG9mIGZldGNoaW5nIGNhbGxlciBpbmZvcm1hdGlvbiwgZXZlbiB3aGVuIF9nZXRmcmFtZSgpIGlzCisjIGF2YWlsYWJsZS4KKyNpZiBub3QgaGFzYXR0cihzeXMsICdfZ2V0ZnJhbWUnKToKKyMgICAgX3NyY2ZpbGUgPSBOb25lCisKKwogZGVmIF9jaGVja0xldmVsKGxldmVsKToKICAgICBpZiBpc2luc3RhbmNlKGxldmVsLCBpbnQpOgogICAgICAgICBydiA9IGxldmVsCiAgICAgZWxpZiBzdHIobGV2ZWwpID09IGxldmVsOgotICAgICAgICBpZiBsZXZlbCBub3QgaW4gX2xldmVsTmFtZXM6CisgICAgICAgIGlmIGxldmVsIG5vdCBpbiBfbmFtZVRvTGV2ZWw6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJVbmtub3duIGxldmVsOiAlciIgJSBsZXZlbCkKLSAgICAgICAgcnYgPSBfbGV2ZWxOYW1lc1tsZXZlbF0KKyAgICAgICAgcnYgPSBfbmFtZVRvTGV2ZWxbbGV2ZWxdCiAgICAgZWxzZToKICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJMZXZlbCBub3QgYW4gaW50ZWdlciBvciBhIHZhbGlkIHN0cmluZzogJXIiICUgbGV2ZWwpCiAgICAgcmV0dXJuIHJ2CkBAIC0yNTAsNyArMjYxLDEzIEBACiAgICAgICAgICMgJ1ZhbHVlIGlzICVkJyBpbnN0ZWFkIG9mICdWYWx1ZSBpcyAwJy4KICAgICAgICAgIyBGb3IgdGhlIHVzZSBjYXNlIG9mIHBhc3NpbmcgYSBkaWN0aW9uYXJ5LCB0aGlzIHNob3VsZCBub3QgYmUgYQogICAgICAgICAjIHByb2JsZW0uCi0gICAgICAgIGlmIGFyZ3MgYW5kIGxlbihhcmdzKSA9PSAxIGFuZCBpc2luc3RhbmNlKGFyZ3NbMF0sIGRpY3QpIGFuZCBhcmdzWzBdOgorICAgICAgICAjIElzc3VlICMyMTE3MjogYSByZXF1ZXN0IHdhcyBtYWRlIHRvIHJlbGF4IHRoZSBpc2luc3RhbmNlIGNoZWNrCisgICAgICAgICMgdG8gaGFzYXR0cihhcmdzWzBdLCAnX19nZXRpdGVtX18nKS4gSG93ZXZlciwgdGhlIGRvY3Mgb24gc3RyaW5nCisgICAgICAgICMgZm9ybWF0dGluZyBzdGlsbCBzZWVtIHRvIHN1Z2dlc3QgYSBtYXBwaW5nIG9iamVjdCBpcyByZXF1aXJlZC4KKyAgICAgICAgIyBUaHVzLCB3aGlsZSBub3QgcmVtb3ZpbmcgdGhlIGlzaW5zdGFuY2UgY2hlY2ssIGl0IGRvZXMgbm93IGxvb2sKKyAgICAgICAgIyBmb3IgY29sbGVjdGlvbnMuTWFwcGluZyByYXRoZXIgdGhhbiwgYXMgYmVmb3JlLCBkaWN0LgorICAgICAgICBpZiAoYXJncyBhbmQgbGVuKGFyZ3MpID09IDEgYW5kIGlzaW5zdGFuY2UoYXJnc1swXSwgY29sbGVjdGlvbnMuTWFwcGluZykKKyAgICAgICAgICAgIGFuZCBhcmdzWzBdKToKICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdCiAgICAgICAgIHNlbGYuYXJncyA9IGFyZ3MKICAgICAgICAgc2VsZi5sZXZlbG5hbWUgPSBnZXRMZXZlbE5hbWUobGV2ZWwpCkBAIC03MDgsMTYgKzcyNSwxNyBAQAogICAgIFJlbW92ZSBhIGhhbmRsZXIgcmVmZXJlbmNlIGZyb20gdGhlIGludGVybmFsIGNsZWFudXAgbGlzdC4KICAgICAiIiIKICAgICAjIFRoaXMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCBkdXJpbmcgbW9kdWxlIHRlYXJkb3duLCB3aGVuIGdsb2JhbHMgYXJlCi0gICAgIyBzZXQgdG8gTm9uZS4gSWYgX2FjcXVpcmVMb2NrIGlzIE5vbmUsIGFzc3VtZSB0aGlzIGlzIHRoZSBjYXNlIGFuZCBkbwotICAgICMgbm90aGluZy4KLSAgICBpZiAoX2FjcXVpcmVMb2NrIGlzIG5vdCBOb25lIGFuZCBfaGFuZGxlckxpc3QgaXMgbm90IE5vbmUgYW5kCi0gICAgICAgIF9yZWxlYXNlTG9jayBpcyBub3QgTm9uZSk6Ci0gICAgICAgIF9hY3F1aXJlTG9jaygpCisgICAgIyBzZXQgdG8gTm9uZS4gSXQgY2FuIGFsc28gYmUgY2FsbGVkIGZyb20gYW5vdGhlciB0aHJlYWQuIFNvIHdlIG5lZWQgdG8KKyAgICAjIHByZS1lbXB0aXZlbHkgZ3JhYiB0aGUgbmVjZXNzYXJ5IGdsb2JhbHMgYW5kIGNoZWNrIGlmIHRoZXkncmUgTm9uZSwKKyAgICAjIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zIGFuZCBmYWlsdXJlcyBkdXJpbmcgaW50ZXJwcmV0ZXIgc2h1dGRvd24uCisgICAgYWNxdWlyZSwgcmVsZWFzZSwgaGFuZGxlcnMgPSBfYWNxdWlyZUxvY2ssIF9yZWxlYXNlTG9jaywgX2hhbmRsZXJMaXN0CisgICAgaWYgYWNxdWlyZSBhbmQgcmVsZWFzZSBhbmQgaGFuZGxlcnM6CisgICAgICAgIGFjcXVpcmUoKQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBpZiB3ciBpbiBfaGFuZGxlckxpc3Q6Ci0gICAgICAgICAgICAgICAgX2hhbmRsZXJMaXN0LnJlbW92ZSh3cikKKyAgICAgICAgICAgIGlmIHdyIGluIGhhbmRsZXJzOgorICAgICAgICAgICAgICAgIGhhbmRsZXJzLnJlbW92ZSh3cikKICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIF9yZWxlYXNlTG9jaygpCisgICAgICAgICAgICByZWxlYXNlKCkKIAogZGVmIF9hZGRIYW5kbGVyUmVmKGhhbmRsZXIpOgogICAgICIiIgpAQCAtODgyLDE2ICs5MDAsMzcgQEAKICAgICAgICAgVGhlIHJlY29yZCB3aGljaCB3YXMgYmVpbmcgcHJvY2Vzc2VkIGlzIHBhc3NlZCBpbiB0byB0aGlzIG1ldGhvZC4KICAgICAgICAgIiIiCiAgICAgICAgIGlmIHJhaXNlRXhjZXB0aW9ucyBhbmQgc3lzLnN0ZGVycjogICMgc2VlIGlzc3VlIDEzODA3Ci0gICAgICAgICAgICBlaSA9IHN5cy5leGNfaW5mbygpCisgICAgICAgICAgICB0LCB2LCB0YiA9IHN5cy5leGNfaW5mbygpCiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4Y2VwdGlvbihlaVswXSwgZWlbMV0sIGVpWzJdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9uZSwgc3lzLnN0ZGVycikKLSAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCdMb2dnZWQgZnJvbSBmaWxlICVzLCBsaW5lICVzXG4nICUgKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjb3JkLmZpbGVuYW1lLCByZWNvcmQubGluZW5vKSkKLSAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOiAjcHJhZ21hOiBubyBjb3ZlcgorICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJy0tLSBMb2dnaW5nIGVycm9yIC0tLVxuJykKKyAgICAgICAgICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjZXB0aW9uKHQsIHYsIHRiLCBOb25lLCBzeXMuc3RkZXJyKQorICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJ0NhbGwgc3RhY2s6XG4nKQorICAgICAgICAgICAgICAgICMgV2FsayB0aGUgc3RhY2sgZnJhbWUgdXAgdW50aWwgd2UncmUgb3V0IG9mIGxvZ2dpbmcsCisgICAgICAgICAgICAgICAgIyBzbyBhcyB0byBwcmludCB0aGUgY2FsbGluZyBjb250ZXh0LgorICAgICAgICAgICAgICAgIGZyYW1lID0gdGIudGJfZnJhbWUKKyAgICAgICAgICAgICAgICB3aGlsZSAoZnJhbWUgYW5kIG9zLnBhdGguZGlybmFtZShmcmFtZS5mX2NvZGUuY29fZmlsZW5hbWUpID09CisgICAgICAgICAgICAgICAgICAgICAgIF9fcGF0aF9fWzBdKToKKyAgICAgICAgICAgICAgICAgICAgZnJhbWUgPSBmcmFtZS5mX2JhY2sKKyAgICAgICAgICAgICAgICBpZiBmcmFtZToKKyAgICAgICAgICAgICAgICAgICAgdHJhY2ViYWNrLnByaW50X3N0YWNrKGZyYW1lLCBmaWxlPXN5cy5zdGRlcnIpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgIyBjb3VsZG4ndCBmaW5kIHRoZSByaWdodCBzdGFjayBmcmFtZSwgZm9yIHNvbWUgcmVhc29uCisgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJ0xvZ2dlZCBmcm9tIGZpbGUgJXMsIGxpbmUgJXNcbicgJSAoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjb3JkLmZpbGVuYW1lLCByZWNvcmQubGluZW5vKSkKKyAgICAgICAgICAgICAgICAjIElzc3VlIDE4NjcxOiBvdXRwdXQgbG9nZ2luZyBtZXNzYWdlIGFuZCBhcmd1bWVudHMKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJ01lc3NhZ2U6ICVyXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FyZ3VtZW50czogJXNcbicgJSAocmVjb3JkLm1zZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNvcmQuYXJncykpCisgICAgICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnVW5hYmxlIHRvIHByaW50IHRoZSBtZXNzYWdlIGFuZCBhcmd1bWVudHMnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAtIHBvc3NpYmxlIGZvcm1hdHRpbmcgZXJyb3IuXG5Vc2UgdGhlJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgdHJhY2ViYWNrIGFib3ZlIHRvIGhlbHAgZmluZCB0aGUgZXJyb3IuXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjogI3ByYWdtYTogbm8gY292ZXIKICAgICAgICAgICAgICAgICBwYXNzICAgICMgc2VlIGlzc3VlIDU5NzEKICAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgZGVsIGVpCisgICAgICAgICAgICAgICAgZGVsIHQsIHYsIHRiCiAKIGNsYXNzIFN0cmVhbUhhbmRsZXIoSGFuZGxlcik6CiAgICAgIiIiCkBAIC05NDEsOSArOTgwLDcgQEAKICAgICAgICAgICAgIHN0cmVhbS53cml0ZShtc2cpCiAgICAgICAgICAgICBzdHJlYW0ud3JpdGUoc2VsZi50ZXJtaW5hdG9yKQogICAgICAgICAgICAgc2VsZi5mbHVzaCgpCi0gICAgICAgIGV4Y2VwdCAoS2V5Ym9hcmRJbnRlcnJ1cHQsIFN5c3RlbUV4aXQpOiAjcHJhZ21hOiBubyBjb3ZlcgotICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgZXhjZXB0OgorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgICAgICAgc2VsZi5oYW5kbGVFcnJvcihyZWNvcmQpCiAKIGNsYXNzIEZpbGVIYW5kbGVyKFN0cmVhbUhhbmRsZXIpOgpAQCAtOTc0LDE0ICsxMDExLDE5IEBACiAgICAgICAgICIiIgogICAgICAgICBzZWxmLmFjcXVpcmUoKQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBpZiBzZWxmLnN0cmVhbToKLSAgICAgICAgICAgICAgICBzZWxmLmZsdXNoKCkKLSAgICAgICAgICAgICAgICBpZiBoYXNhdHRyKHNlbGYuc3RyZWFtLCAiY2xvc2UiKToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5zdHJlYW0uY2xvc2UoKQotICAgICAgICAgICAgICAgIHNlbGYuc3RyZWFtID0gTm9uZQotICAgICAgICAgICAgIyBJc3N1ZSAjMTk1MjM6IGNhbGwgdW5jb25kaXRpb25hbGx5IHRvCi0gICAgICAgICAgICAjIHByZXZlbnQgYSBoYW5kbGVyIGxlYWsgd2hlbiBkZWxheSBpcyBzZXQKLSAgICAgICAgICAgIFN0cmVhbUhhbmRsZXIuY2xvc2Uoc2VsZikKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLnN0cmVhbToKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5mbHVzaCgpCisgICAgICAgICAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0gPSBzZWxmLnN0cmVhbQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zdHJlYW0gPSBOb25lCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBoYXNhdHRyKHN0cmVhbSwgImNsb3NlIik6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLmNsb3NlKCkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgIyBJc3N1ZSAjMTk1MjM6IGNhbGwgdW5jb25kaXRpb25hbGx5IHRvCisgICAgICAgICAgICAgICAgIyBwcmV2ZW50IGEgaGFuZGxlciBsZWFrIHdoZW4gZGVsYXkgaXMgc2V0CisgICAgICAgICAgICAgICAgU3RyZWFtSGFuZGxlci5jbG9zZShzZWxmKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgc2VsZi5yZWxlYXNlKCkKIApAQCAtMTY4Niw3ICsxNzI4LDcgQEAKICAgICBfYWNxdWlyZUxvY2soKQogICAgIHRyeToKICAgICAgICAgaWYgbGVuKHJvb3QuaGFuZGxlcnMpID09IDA6Ci0gICAgICAgICAgICBoYW5kbGVycyA9IGt3YXJncy5nZXQoImhhbmRsZXJzIikKKyAgICAgICAgICAgIGhhbmRsZXJzID0ga3dhcmdzLnBvcCgiaGFuZGxlcnMiLCBOb25lKQogICAgICAgICAgICAgaWYgaGFuZGxlcnMgaXMgTm9uZToKICAgICAgICAgICAgICAgICBpZiAic3RyZWFtIiBpbiBrd2FyZ3MgYW5kICJmaWxlbmFtZSIgaW4ga3dhcmdzOgogICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCInc3RyZWFtJyBhbmQgJ2ZpbGVuYW1lJyBzaG91bGQgbm90IGJlICIKQEAgLTE2OTYsMjggKzE3MzgsMzEgQEAKICAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiJ3N0cmVhbScgb3IgJ2ZpbGVuYW1lJyBzaG91bGQgbm90IGJlICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3BlY2lmaWVkIHRvZ2V0aGVyIHdpdGggJ2hhbmRsZXJzJyIpCiAgICAgICAgICAgICBpZiBoYW5kbGVycyBpcyBOb25lOgotICAgICAgICAgICAgICAgIGZpbGVuYW1lID0ga3dhcmdzLmdldCgiZmlsZW5hbWUiKQorICAgICAgICAgICAgICAgIGZpbGVuYW1lID0ga3dhcmdzLnBvcCgiZmlsZW5hbWUiLCBOb25lKQorICAgICAgICAgICAgICAgIG1vZGUgPSBrd2FyZ3MucG9wKCJmaWxlbW9kZSIsICdhJykKICAgICAgICAgICAgICAgICBpZiBmaWxlbmFtZToKLSAgICAgICAgICAgICAgICAgICAgbW9kZSA9IGt3YXJncy5nZXQoImZpbGVtb2RlIiwgJ2EnKQogICAgICAgICAgICAgICAgICAgICBoID0gRmlsZUhhbmRsZXIoZmlsZW5hbWUsIG1vZGUpCiAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgc3RyZWFtID0ga3dhcmdzLmdldCgic3RyZWFtIikKKyAgICAgICAgICAgICAgICAgICAgc3RyZWFtID0ga3dhcmdzLnBvcCgic3RyZWFtIiwgTm9uZSkKICAgICAgICAgICAgICAgICAgICAgaCA9IFN0cmVhbUhhbmRsZXIoc3RyZWFtKQogICAgICAgICAgICAgICAgIGhhbmRsZXJzID0gW2hdCi0gICAgICAgICAgICBkZnMgPSBrd2FyZ3MuZ2V0KCJkYXRlZm10IiwgTm9uZSkKLSAgICAgICAgICAgIHN0eWxlID0ga3dhcmdzLmdldCgic3R5bGUiLCAnJScpCisgICAgICAgICAgICBkZnMgPSBrd2FyZ3MucG9wKCJkYXRlZm10IiwgTm9uZSkKKyAgICAgICAgICAgIHN0eWxlID0ga3dhcmdzLnBvcCgic3R5bGUiLCAnJScpCiAgICAgICAgICAgICBpZiBzdHlsZSBub3QgaW4gX1NUWUxFUzoKICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdTdHlsZSBtdXN0IGJlIG9uZSBvZjogJXMnICUgJywnLmpvaW4oCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfU1RZTEVTLmtleXMoKSkpCi0gICAgICAgICAgICBmcyA9IGt3YXJncy5nZXQoImZvcm1hdCIsIF9TVFlMRVNbc3R5bGVdWzFdKQorICAgICAgICAgICAgZnMgPSBrd2FyZ3MucG9wKCJmb3JtYXQiLCBfU1RZTEVTW3N0eWxlXVsxXSkKICAgICAgICAgICAgIGZtdCA9IEZvcm1hdHRlcihmcywgZGZzLCBzdHlsZSkKICAgICAgICAgICAgIGZvciBoIGluIGhhbmRsZXJzOgogICAgICAgICAgICAgICAgIGlmIGguZm9ybWF0dGVyIGlzIE5vbmU6CiAgICAgICAgICAgICAgICAgICAgIGguc2V0Rm9ybWF0dGVyKGZtdCkKICAgICAgICAgICAgICAgICByb290LmFkZEhhbmRsZXIoaCkKLSAgICAgICAgICAgIGxldmVsID0ga3dhcmdzLmdldCgibGV2ZWwiKQorICAgICAgICAgICAgbGV2ZWwgPSBrd2FyZ3MucG9wKCJsZXZlbCIsIE5vbmUpCiAgICAgICAgICAgICBpZiBsZXZlbCBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICByb290LnNldExldmVsKGxldmVsKQorICAgICAgICAgICAgaWYga3dhcmdzOgorICAgICAgICAgICAgICAgIGtleXMgPSAnLCAnLmpvaW4oa3dhcmdzLmtleXMoKSkKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdVbnJlY29nbmlzZWQgYXJndW1lbnQocyk6ICVzJyAlIGtleXMpCiAgICAgZmluYWxseToKICAgICAgICAgX3JlbGVhc2VMb2NrKCkKIApAQCAtMTgzNiw3ICsxODgxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgaC5hY3F1aXJlKCkKICAgICAgICAgICAgICAgICAgICAgaC5mbHVzaCgpCiAgICAgICAgICAgICAgICAgICAgIGguY2xvc2UoKQotICAgICAgICAgICAgICAgIGV4Y2VwdCAoSU9FcnJvciwgVmFsdWVFcnJvcik6CisgICAgICAgICAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBWYWx1ZUVycm9yKToKICAgICAgICAgICAgICAgICAgICAgIyBJZ25vcmUgZXJyb3JzIHdoaWNoIG1pZ2h0IGJlIGNhdXNlZAogICAgICAgICAgICAgICAgICAgICAjIGJlY2F1c2UgaGFuZGxlcnMgaGF2ZSBiZWVuIGNsb3NlZCBidXQKICAgICAgICAgICAgICAgICAgICAgIyByZWZlcmVuY2VzIHRvIHRoZW0gYXJlIHN0aWxsIGFyb3VuZCBhdApAQCAtMTg0NCw3ICsxODg5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgICAgIGgucmVsZWFzZSgpCi0gICAgICAgIGV4Y2VwdDoKKyAgICAgICAgZXhjZXB0OiAjIGlnbm9yZSBldmVyeXRoaW5nLCBhcyB3ZSdyZSBzaHV0dGluZyBkb3duCiAgICAgICAgICAgICBpZiByYWlzZUV4Y2VwdGlvbnM6CiAgICAgICAgICAgICAgICAgcmFpc2UKICAgICAgICAgICAgICNlbHNlLCBzd2FsbG93CmRpZmYgLS1naXQgYS9MaWIvbG9nZ2luZy9jb25maWcucHkgYi9MaWIvbG9nZ2luZy9jb25maWcucHkKaW5kZXggMTg4MDYxNC4uODk1ZmIyNiAxMDA2NDQKLS0tIGEvTGliL2xvZ2dpbmcvY29uZmlnLnB5CisrKyBiL0xpYi9sb2dnaW5nL2NvbmZpZy5weQpAQCAtMSw0ICsxLDQgQEAKLSMgQ29weXJpZ2h0IDIwMDEtMjAxMyBieSBWaW5heSBTYWppcC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMgQ29weXJpZ2h0IDIwMDEtMjAxNCBieSBWaW5heSBTYWppcC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICMKICMgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzCiAjIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwKQEAgLTE5LDEzICsxOSwxOSBAQAogaXMgYmFzZWQgb24gUEVQIDI4MiBhbmQgY29tbWVudHMgdGhlcmV0byBpbiBjb21wLmxhbmcucHl0aG9uLCBhbmQgaW5mbHVlbmNlZAogYnkgQXBhY2hlJ3MgbG9nNGogc3lzdGVtLgogCi1Db3B5cmlnaHQgKEMpIDIwMDEtMjAxMyBWaW5heSBTYWppcC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KK0NvcHlyaWdodCAoQykgMjAwMS0yMDE0IFZpbmF5IFNhamlwLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogCiBUbyB1c2UsIHNpbXBseSAnaW1wb3J0IGxvZ2dpbmcnIGFuZCBsb2cgYXdheSEKICIiIgogCi1pbXBvcnQgc3lzLCBsb2dnaW5nLCBsb2dnaW5nLmhhbmRsZXJzLCBzb2NrZXQsIHN0cnVjdCwgdHJhY2ViYWNrLCByZQoraW1wb3J0IGVycm5vCiBpbXBvcnQgaW8KK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgbG9nZ2luZy5oYW5kbGVycworaW1wb3J0IHJlCitpbXBvcnQgc3RydWN0CitpbXBvcnQgc3lzCitpbXBvcnQgdHJhY2ViYWNrCiAKIHRyeToKICAgICBpbXBvcnQgX3RocmVhZCBhcyB0aHJlYWQKQEAgLTM4LDEwICs0NCw3IEBACiAKIERFRkFVTFRfTE9HR0lOR19DT05GSUdfUE9SVCA9IDkwMzAKIAotaWYgc3lzLnBsYXRmb3JtID09ICJ3aW4zMiI6Ci0gICAgUkVTRVRfRVJST1IgPSAxMDA1NCAgICNXU0FFQ09OTlJFU0VUCi1lbHNlOgotICAgIFJFU0VUX0VSUk9SID0gMTA0ICAgICAjRUNPTk5SRVNFVAorUkVTRVRfRVJST1IgPSBlcnJuby5FQ09OTlJFU0VUCiAKICMKICMgICBUaGUgZm9sbG93aW5nIGNvZGUgaW1wbGVtZW50cyBhIHNvY2tldCBsaXN0ZW5lciBmb3Igb24tdGhlLWZseQpAQCAtNjEsMTEgKzY0LDE0IEBACiAgICAgIiIiCiAgICAgaW1wb3J0IGNvbmZpZ3BhcnNlcgogCi0gICAgY3AgPSBjb25maWdwYXJzZXIuQ29uZmlnUGFyc2VyKGRlZmF1bHRzKQotICAgIGlmIGhhc2F0dHIoZm5hbWUsICdyZWFkbGluZScpOgotICAgICAgICBjcC5yZWFkX2ZpbGUoZm5hbWUpCisgICAgaWYgaXNpbnN0YW5jZShmbmFtZSwgY29uZmlncGFyc2VyLlJhd0NvbmZpZ1BhcnNlcik6CisgICAgICAgIGNwID0gZm5hbWUKICAgICBlbHNlOgotICAgICAgICBjcC5yZWFkKGZuYW1lKQorICAgICAgICBjcCA9IGNvbmZpZ3BhcnNlci5Db25maWdQYXJzZXIoZGVmYXVsdHMpCisgICAgICAgIGlmIGhhc2F0dHIoZm5hbWUsICdyZWFkbGluZScpOgorICAgICAgICAgICAgY3AucmVhZF9maWxlKGZuYW1lKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY3AucmVhZChmbmFtZSkKIAogICAgIGZvcm1hdHRlcnMgPSBfY3JlYXRlX2Zvcm1hdHRlcnMoY3ApCiAKQEAgLTE0MSw3ICsxNDcsNyBAQAogICAgICAgICBoID0ga2xhc3MoKmFyZ3MpCiAgICAgICAgIGlmICJsZXZlbCIgaW4gc2VjdGlvbjoKICAgICAgICAgICAgIGxldmVsID0gc2VjdGlvblsibGV2ZWwiXQotICAgICAgICAgICAgaC5zZXRMZXZlbChsb2dnaW5nLl9sZXZlbE5hbWVzW2xldmVsXSkKKyAgICAgICAgICAgIGguc2V0TGV2ZWwobGV2ZWwpCiAgICAgICAgIGlmIGxlbihmbXQpOgogICAgICAgICAgICAgaC5zZXRGb3JtYXR0ZXIoZm9ybWF0dGVyc1tmbXRdKQogICAgICAgICBpZiBpc3N1YmNsYXNzKGtsYXNzLCBsb2dnaW5nLmhhbmRsZXJzLk1lbW9yeUhhbmRsZXIpOgpAQCAtMTg4LDcgKzE5NCw3IEBACiAgICAgbG9nID0gcm9vdAogICAgIGlmICJsZXZlbCIgaW4gc2VjdGlvbjoKICAgICAgICAgbGV2ZWwgPSBzZWN0aW9uWyJsZXZlbCJdCi0gICAgICAgIGxvZy5zZXRMZXZlbChsb2dnaW5nLl9sZXZlbE5hbWVzW2xldmVsXSkKKyAgICAgICAgbG9nLnNldExldmVsKGxldmVsKQogICAgIGZvciBoIGluIHJvb3QuaGFuZGxlcnNbOl06CiAgICAgICAgIHJvb3QucmVtb3ZlSGFuZGxlcihoKQogICAgIGhsaXN0ID0gc2VjdGlvblsiaGFuZGxlcnMiXQpAQCAtMjM0LDcgKzI0MCw3IEBACiAgICAgICAgICAgICBleGlzdGluZy5yZW1vdmUocW4pCiAgICAgICAgIGlmICJsZXZlbCIgaW4gc2VjdGlvbjoKICAgICAgICAgICAgIGxldmVsID0gc2VjdGlvblsibGV2ZWwiXQotICAgICAgICAgICAgbG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuX2xldmVsTmFtZXNbbGV2ZWxdKQorICAgICAgICAgICAgbG9nZ2VyLnNldExldmVsKGxldmVsKQogICAgICAgICBmb3IgaCBpbiBsb2dnZXIuaGFuZGxlcnNbOl06CiAgICAgICAgICAgICBsb2dnZXIucmVtb3ZlSGFuZGxlcihoKQogICAgICAgICBsb2dnZXIucHJvcGFnYXRlID0gcHJvcGFnYXRlCkBAIC0yNzEsNiArMjc3LDMwIEBACiAgICAgcmV0dXJuIFRydWUKIAogCitjbGFzcyBDb252ZXJ0aW5nTWl4aW4ob2JqZWN0KToKKyAgICAiIiJGb3IgQ29udmVydGluZ1hYWCdzLCB0aGlzIG1peGluIGNsYXNzIHByb3ZpZGVzIGNvbW1vbiBmdW5jdGlvbnMiIiIKKworICAgIGRlZiBjb252ZXJ0X3dpdGhfa2V5KHNlbGYsIGtleSwgdmFsdWUsIHJlcGxhY2U9VHJ1ZSk6CisgICAgICAgIHJlc3VsdCA9IHNlbGYuY29uZmlndXJhdG9yLmNvbnZlcnQodmFsdWUpCisgICAgICAgICNJZiB0aGUgY29udmVydGVkIHZhbHVlIGlzIGRpZmZlcmVudCwgc2F2ZSBmb3IgbmV4dCB0aW1lCisgICAgICAgIGlmIHZhbHVlIGlzIG5vdCByZXN1bHQ6CisgICAgICAgICAgICBpZiByZXBsYWNlOgorICAgICAgICAgICAgICAgIHNlbGZba2V5XSA9IHJlc3VsdAorICAgICAgICAgICAgaWYgdHlwZShyZXN1bHQpIGluIChDb252ZXJ0aW5nRGljdCwgQ29udmVydGluZ0xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udmVydGluZ1R1cGxlKToKKyAgICAgICAgICAgICAgICByZXN1bHQucGFyZW50ID0gc2VsZgorICAgICAgICAgICAgICAgIHJlc3VsdC5rZXkgPSBrZXkKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVmIGNvbnZlcnQoc2VsZiwgdmFsdWUpOgorICAgICAgICByZXN1bHQgPSBzZWxmLmNvbmZpZ3VyYXRvci5jb252ZXJ0KHZhbHVlKQorICAgICAgICBpZiB2YWx1ZSBpcyBub3QgcmVzdWx0OgorICAgICAgICAgICAgaWYgdHlwZShyZXN1bHQpIGluIChDb252ZXJ0aW5nRGljdCwgQ29udmVydGluZ0xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udmVydGluZ1R1cGxlKToKKyAgICAgICAgICAgICAgICByZXN1bHQucGFyZW50ID0gc2VsZgorICAgICAgICByZXR1cm4gcmVzdWx0CisKKwogIyBUaGUgQ29udmVydGluZ1hYWCBjbGFzc2VzIGFyZSB3cmFwcGVycyBhcm91bmQgc3RhbmRhcmQgUHl0aG9uIGNvbnRhaW5lcnMsCiAjIGFuZCB0aGV5IHNlcnZlIHRvIGNvbnZlcnQgYW55IHN1aXRhYmxlIHZhbHVlcyBpbiB0aGUgY29udGFpbmVyLiBUaGUKICMgY29udmVyc2lvbiBjb252ZXJ0cyBiYXNlIGRpY3RzLCBsaXN0cyBhbmQgdHVwbGVzIHRvIHRoZWlyIHdyYXBwZWQKQEAgLTI4MCw3NyArMzEwLDM3IEBACiAjIEVhY2ggd3JhcHBlciBzaG91bGQgaGF2ZSBhIGNvbmZpZ3VyYXRvciBhdHRyaWJ1dGUgaG9sZGluZyB0aGUgYWN0dWFsCiAjIGNvbmZpZ3VyYXRvciB0byB1c2UgZm9yIGNvbnZlcnNpb24uCiAKLWNsYXNzIENvbnZlcnRpbmdEaWN0KGRpY3QpOgorY2xhc3MgQ29udmVydGluZ0RpY3QoZGljdCwgQ29udmVydGluZ01peGluKToKICAgICAiIiJBIGNvbnZlcnRpbmcgZGljdGlvbmFyeSB3cmFwcGVyLiIiIgogCiAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGtleSk6CiAgICAgICAgIHZhbHVlID0gZGljdC5fX2dldGl0ZW1fXyhzZWxmLCBrZXkpCi0gICAgICAgIHJlc3VsdCA9IHNlbGYuY29uZmlndXJhdG9yLmNvbnZlcnQodmFsdWUpCi0gICAgICAgICNJZiB0aGUgY29udmVydGVkIHZhbHVlIGlzIGRpZmZlcmVudCwgc2F2ZSBmb3IgbmV4dCB0aW1lCi0gICAgICAgIGlmIHZhbHVlIGlzIG5vdCByZXN1bHQ6Ci0gICAgICAgICAgICBzZWxmW2tleV0gPSByZXN1bHQKLSAgICAgICAgICAgIGlmIHR5cGUocmVzdWx0KSBpbiAoQ29udmVydGluZ0RpY3QsIENvbnZlcnRpbmdMaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb252ZXJ0aW5nVHVwbGUpOgotICAgICAgICAgICAgICAgIHJlc3VsdC5wYXJlbnQgPSBzZWxmCi0gICAgICAgICAgICAgICAgcmVzdWx0LmtleSA9IGtleQotICAgICAgICByZXR1cm4gcmVzdWx0CisgICAgICAgIHJldHVybiBzZWxmLmNvbnZlcnRfd2l0aF9rZXkoa2V5LCB2YWx1ZSkKIAogICAgIGRlZiBnZXQoc2VsZiwga2V5LCBkZWZhdWx0PU5vbmUpOgogICAgICAgICB2YWx1ZSA9IGRpY3QuZ2V0KHNlbGYsIGtleSwgZGVmYXVsdCkKLSAgICAgICAgcmVzdWx0ID0gc2VsZi5jb25maWd1cmF0b3IuY29udmVydCh2YWx1ZSkKLSAgICAgICAgI0lmIHRoZSBjb252ZXJ0ZWQgdmFsdWUgaXMgZGlmZmVyZW50LCBzYXZlIGZvciBuZXh0IHRpbWUKLSAgICAgICAgaWYgdmFsdWUgaXMgbm90IHJlc3VsdDoKLSAgICAgICAgICAgIHNlbGZba2V5XSA9IHJlc3VsdAotICAgICAgICAgICAgaWYgdHlwZShyZXN1bHQpIGluIChDb252ZXJ0aW5nRGljdCwgQ29udmVydGluZ0xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnZlcnRpbmdUdXBsZSk6Ci0gICAgICAgICAgICAgICAgcmVzdWx0LnBhcmVudCA9IHNlbGYKLSAgICAgICAgICAgICAgICByZXN1bHQua2V5ID0ga2V5Ci0gICAgICAgIHJldHVybiByZXN1bHQKKyAgICAgICAgcmV0dXJuIHNlbGYuY29udmVydF93aXRoX2tleShrZXksIHZhbHVlKQogCiAgICAgZGVmIHBvcChzZWxmLCBrZXksIGRlZmF1bHQ9Tm9uZSk6CiAgICAgICAgIHZhbHVlID0gZGljdC5wb3Aoc2VsZiwga2V5LCBkZWZhdWx0KQotICAgICAgICByZXN1bHQgPSBzZWxmLmNvbmZpZ3VyYXRvci5jb252ZXJ0KHZhbHVlKQotICAgICAgICBpZiB2YWx1ZSBpcyBub3QgcmVzdWx0OgotICAgICAgICAgICAgaWYgdHlwZShyZXN1bHQpIGluIChDb252ZXJ0aW5nRGljdCwgQ29udmVydGluZ0xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnZlcnRpbmdUdXBsZSk6Ci0gICAgICAgICAgICAgICAgcmVzdWx0LnBhcmVudCA9IHNlbGYKLSAgICAgICAgICAgICAgICByZXN1bHQua2V5ID0ga2V5Ci0gICAgICAgIHJldHVybiByZXN1bHQKKyAgICAgICAgcmV0dXJuIHNlbGYuY29udmVydF93aXRoX2tleShrZXksIHZhbHVlLCByZXBsYWNlPUZhbHNlKQogCi1jbGFzcyBDb252ZXJ0aW5nTGlzdChsaXN0KToKK2NsYXNzIENvbnZlcnRpbmdMaXN0KGxpc3QsIENvbnZlcnRpbmdNaXhpbik6CiAgICAgIiIiQSBjb252ZXJ0aW5nIGxpc3Qgd3JhcHBlci4iIiIKICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwga2V5KToKICAgICAgICAgdmFsdWUgPSBsaXN0Ll9fZ2V0aXRlbV9fKHNlbGYsIGtleSkKLSAgICAgICAgcmVzdWx0ID0gc2VsZi5jb25maWd1cmF0b3IuY29udmVydCh2YWx1ZSkKLSAgICAgICAgI0lmIHRoZSBjb252ZXJ0ZWQgdmFsdWUgaXMgZGlmZmVyZW50LCBzYXZlIGZvciBuZXh0IHRpbWUKLSAgICAgICAgaWYgdmFsdWUgaXMgbm90IHJlc3VsdDoKLSAgICAgICAgICAgIHNlbGZba2V5XSA9IHJlc3VsdAotICAgICAgICAgICAgaWYgdHlwZShyZXN1bHQpIGluIChDb252ZXJ0aW5nRGljdCwgQ29udmVydGluZ0xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnZlcnRpbmdUdXBsZSk6Ci0gICAgICAgICAgICAgICAgcmVzdWx0LnBhcmVudCA9IHNlbGYKLSAgICAgICAgICAgICAgICByZXN1bHQua2V5ID0ga2V5Ci0gICAgICAgIHJldHVybiByZXN1bHQKKyAgICAgICAgcmV0dXJuIHNlbGYuY29udmVydF93aXRoX2tleShrZXksIHZhbHVlKQogCiAgICAgZGVmIHBvcChzZWxmLCBpZHg9LTEpOgogICAgICAgICB2YWx1ZSA9IGxpc3QucG9wKHNlbGYsIGlkeCkKLSAgICAgICAgcmVzdWx0ID0gc2VsZi5jb25maWd1cmF0b3IuY29udmVydCh2YWx1ZSkKLSAgICAgICAgaWYgdmFsdWUgaXMgbm90IHJlc3VsdDoKLSAgICAgICAgICAgIGlmIHR5cGUocmVzdWx0KSBpbiAoQ29udmVydGluZ0RpY3QsIENvbnZlcnRpbmdMaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb252ZXJ0aW5nVHVwbGUpOgotICAgICAgICAgICAgICAgIHJlc3VsdC5wYXJlbnQgPSBzZWxmCi0gICAgICAgIHJldHVybiByZXN1bHQKKyAgICAgICAgcmV0dXJuIHNlbGYuY29udmVydCh2YWx1ZSkKIAotY2xhc3MgQ29udmVydGluZ1R1cGxlKHR1cGxlKToKK2NsYXNzIENvbnZlcnRpbmdUdXBsZSh0dXBsZSwgQ29udmVydGluZ01peGluKToKICAgICAiIiJBIGNvbnZlcnRpbmcgdHVwbGUgd3JhcHBlci4iIiIKICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwga2V5KToKICAgICAgICAgdmFsdWUgPSB0dXBsZS5fX2dldGl0ZW1fXyhzZWxmLCBrZXkpCi0gICAgICAgIHJlc3VsdCA9IHNlbGYuY29uZmlndXJhdG9yLmNvbnZlcnQodmFsdWUpCi0gICAgICAgIGlmIHZhbHVlIGlzIG5vdCByZXN1bHQ6Ci0gICAgICAgICAgICBpZiB0eXBlKHJlc3VsdCkgaW4gKENvbnZlcnRpbmdEaWN0LCBDb252ZXJ0aW5nTGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udmVydGluZ1R1cGxlKToKLSAgICAgICAgICAgICAgICByZXN1bHQucGFyZW50ID0gc2VsZgotICAgICAgICAgICAgICAgIHJlc3VsdC5rZXkgPSBrZXkKLSAgICAgICAgcmV0dXJuIHJlc3VsdAorICAgICAgICAjIENhbid0IHJlcGxhY2UgYSB0dXBsZSBlbnRyeS4KKyAgICAgICAgcmV0dXJuIHNlbGYuY29udmVydF93aXRoX2tleShrZXksIHZhbHVlLCByZXBsYWNlPUZhbHNlKQogCiBjbGFzcyBCYXNlQ29uZmlndXJhdG9yKG9iamVjdCk6CiAgICAgIiIiCkBAIC03MjksNiArNzE5LDcgQEAKICAgICAgICAgICAgICAgICAnYWRkcmVzcycgaW4gY29uZmlnOgogICAgICAgICAgICAgICAgIGNvbmZpZ1snYWRkcmVzcyddID0gc2VsZi5hc190dXBsZShjb25maWdbJ2FkZHJlc3MnXSkKICAgICAgICAgICAgIGZhY3RvcnkgPSBrbGFzcworICAgICAgICBwcm9wcyA9IGNvbmZpZy5wb3AoJy4nLCBOb25lKQogICAgICAgICBrd2FyZ3MgPSBkaWN0KFsoaywgY29uZmlnW2tdKSBmb3IgayBpbiBjb25maWcgaWYgdmFsaWRfaWRlbnQoayldKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICByZXN1bHQgPSBmYWN0b3J5KCoqa3dhcmdzKQpAQCAtNzQ3LDYgKzczOCw5IEBACiAgICAgICAgICAgICByZXN1bHQuc2V0TGV2ZWwobG9nZ2luZy5fY2hlY2tMZXZlbChsZXZlbCkpCiAgICAgICAgIGlmIGZpbHRlcnM6CiAgICAgICAgICAgICBzZWxmLmFkZF9maWx0ZXJzKHJlc3VsdCwgZmlsdGVycykKKyAgICAgICAgaWYgcHJvcHM6CisgICAgICAgICAgICBmb3IgbmFtZSwgdmFsdWUgaW4gcHJvcHMuaXRlbXMoKToKKyAgICAgICAgICAgICAgICBzZXRhdHRyKHJlc3VsdCwgbmFtZSwgdmFsdWUpCiAgICAgICAgIHJldHVybiByZXN1bHQKIAogICAgIGRlZiBhZGRfaGFuZGxlcnMoc2VsZiwgbG9nZ2VyLCBoYW5kbGVycyk6CkBAIC03OTUsNyArNzg5LDcgQEAKICAgICBkaWN0Q29uZmlnQ2xhc3MoY29uZmlnKS5jb25maWd1cmUoKQogCiAKLWRlZiBsaXN0ZW4ocG9ydD1ERUZBVUxUX0xPR0dJTkdfQ09ORklHX1BPUlQpOgorZGVmIGxpc3Rlbihwb3J0PURFRkFVTFRfTE9HR0lOR19DT05GSUdfUE9SVCwgdmVyaWZ5PU5vbmUpOgogICAgICIiIgogICAgIFN0YXJ0IHVwIGEgc29ja2V0IHNlcnZlciBvbiB0aGUgc3BlY2lmaWVkIHBvcnQsIGFuZCBsaXN0ZW4gZm9yIG5ldwogICAgIGNvbmZpZ3VyYXRpb25zLgpAQCAtODA0LDYgKzc5OCwxNSBAQAogICAgIFJldHVybnMgYSBUaHJlYWQgb2JqZWN0IG9uIHdoaWNoIHlvdSBjYW4gY2FsbCBzdGFydCgpIHRvIHN0YXJ0IHRoZSBzZXJ2ZXIsCiAgICAgYW5kIHdoaWNoIHlvdSBjYW4gam9pbigpIHdoZW4gYXBwcm9wcmlhdGUuIFRvIHN0b3AgdGhlIHNlcnZlciwgY2FsbAogICAgIHN0b3BMaXN0ZW5pbmcoKS4KKworICAgIFVzZSB0aGUgYGB2ZXJpZnlgYCBhcmd1bWVudCB0byB2ZXJpZnkgYW55IGJ5dGVzIHJlY2VpdmVkIGFjcm9zcyB0aGUgd2lyZQorICAgIGZyb20gYSBjbGllbnQuIElmIHNwZWNpZmllZCwgaXQgc2hvdWxkIGJlIGEgY2FsbGFibGUgd2hpY2ggcmVjZWl2ZXMgYQorICAgIHNpbmdsZSBhcmd1bWVudCAtIHRoZSBieXRlcyBvZiBjb25maWd1cmF0aW9uIGRhdGEgcmVjZWl2ZWQgYWNyb3NzIHRoZQorICAgIG5ldHdvcmsgLSBhbmQgaXQgc2hvdWxkIHJldHVybiBlaXRoZXIgYGBOb25lYGAsIHRvIGluZGljYXRlIHRoYXQgdGhlCisgICAgcGFzc2VkIGluIGJ5dGVzIGNvdWxkIG5vdCBiZSB2ZXJpZmllZCBhbmQgc2hvdWxkIGJlIGRpc2NhcmRlZCwgb3IgYQorICAgIGJ5dGUgc3RyaW5nIHdoaWNoIGlzIHRoZW4gcGFzc2VkIHRvIHRoZSBjb25maWd1cmF0aW9uIG1hY2hpbmVyeSBhcworICAgIG5vcm1hbC4gTm90ZSB0aGF0IHlvdSBjYW4gcmV0dXJuIHRyYW5zZm9ybWVkIGJ5dGVzLCBlLmcuIGJ5IGRlY3J5cHRpbmcKKyAgICB0aGUgYnl0ZXMgcGFzc2VkIGluLgogICAgICIiIgogICAgIGlmIG5vdCB0aHJlYWQ6ICNwcmFnbWE6IG5vIGNvdmVyCiAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoImxpc3RlbigpIG5lZWRzIHRocmVhZGluZyB0byB3b3JrIikKQEAgLTgzMSwzMSArODM0LDI4IEBACiAgICAgICAgICAgICAgICAgICAgIGNodW5rID0gc2VsZi5jb25uZWN0aW9uLnJlY3Yoc2xlbikKICAgICAgICAgICAgICAgICAgICAgd2hpbGUgbGVuKGNodW5rKSA8IHNsZW46CiAgICAgICAgICAgICAgICAgICAgICAgICBjaHVuayA9IGNodW5rICsgY29ubi5yZWN2KHNsZW4gLSBsZW4oY2h1bmspKQotICAgICAgICAgICAgICAgICAgICBjaHVuayA9IGNodW5rLmRlY29kZSgidXRmLTgiKQotICAgICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbXBvcnQganNvbgotICAgICAgICAgICAgICAgICAgICAgICAgZCA9anNvbi5sb2FkcyhjaHVuaykKLSAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGQsIGRpY3QpCi0gICAgICAgICAgICAgICAgICAgICAgICBkaWN0Q29uZmlnKGQpCi0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgICAgICAgICAgICAgICNBcHBseSBuZXcgY29uZmlndXJhdGlvbi4KLQotICAgICAgICAgICAgICAgICAgICAgICAgZmlsZSA9IGlvLlN0cmluZ0lPKGNodW5rKQorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLnNlcnZlci52ZXJpZnkgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBjaHVuayA9IHNlbGYuc2VydmVyLnZlcmlmeShjaHVuaykKKyAgICAgICAgICAgICAgICAgICAgaWYgY2h1bmsgaXMgbm90IE5vbmU6ICAgIyB2ZXJpZmllZCwgY2FuIHByb2Nlc3MKKyAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rID0gY2h1bmsuZGVjb2RlKCJ1dGYtOCIpCiAgICAgICAgICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZUNvbmZpZyhmaWxlKQotICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IChLZXlib2FyZEludGVycnVwdCwgU3lzdGVtRXhpdCk6ICNwcmFnbWE6IG5vIGNvdmVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBvcnQganNvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQgPWpzb24ubG9hZHMoY2h1bmspCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoZCwgZGljdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWN0Q29uZmlnKGQpCisgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICNBcHBseSBuZXcgY29uZmlndXJhdGlvbi4KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUgPSBpby5TdHJpbmdJTyhjaHVuaykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVDb25maWcoZmlsZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKCkKICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5zZXJ2ZXIucmVhZHk6CiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNlcnZlci5yZWFkeS5zZXQoKQotICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBlOgotICAgICAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGUuYXJncywgdHVwbGUpOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IFJFU0VUX0VSUk9SOgogICAgICAgICAgICAgICAgICAgICByYWlzZQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIGVycmNvZGUgPSBlLmFyZ3NbMF0KLSAgICAgICAgICAgICAgICAgICAgaWYgZXJyY29kZSAhPSBSRVNFVF9FUlJPUjoKLSAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCiAKICAgICBjbGFzcyBDb25maWdTb2NrZXRSZWNlaXZlcihUaHJlYWRpbmdUQ1BTZXJ2ZXIpOgogICAgICAgICAiIiIKQEAgLTg2NSwxMyArODY1LDE0IEBACiAgICAgICAgIGFsbG93X3JldXNlX2FkZHJlc3MgPSAxCiAKICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGhvc3Q9J2xvY2FsaG9zdCcsIHBvcnQ9REVGQVVMVF9MT0dHSU5HX0NPTkZJR19QT1JULAotICAgICAgICAgICAgICAgICAgICAgaGFuZGxlcj1Ob25lLCByZWFkeT1Ob25lKToKKyAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXI9Tm9uZSwgcmVhZHk9Tm9uZSwgdmVyaWZ5PU5vbmUpOgogICAgICAgICAgICAgVGhyZWFkaW5nVENQU2VydmVyLl9faW5pdF9fKHNlbGYsIChob3N0LCBwb3J0KSwgaGFuZGxlcikKICAgICAgICAgICAgIGxvZ2dpbmcuX2FjcXVpcmVMb2NrKCkKICAgICAgICAgICAgIHNlbGYuYWJvcnQgPSAwCiAgICAgICAgICAgICBsb2dnaW5nLl9yZWxlYXNlTG9jaygpCiAgICAgICAgICAgICBzZWxmLnRpbWVvdXQgPSAxCiAgICAgICAgICAgICBzZWxmLnJlYWR5ID0gcmVhZHkKKyAgICAgICAgICAgIHNlbGYudmVyaWZ5ID0gdmVyaWZ5CiAKICAgICAgICAgZGVmIHNlcnZlX3VudGlsX3N0b3BwZWQoc2VsZik6CiAgICAgICAgICAgICBpbXBvcnQgc2VsZWN0CkBAIC04ODksMTYgKzg5MCwxOCBAQAogCiAgICAgY2xhc3MgU2VydmVyKHRocmVhZGluZy5UaHJlYWQpOgogCi0gICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCByY3ZyLCBoZGxyLCBwb3J0KToKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJjdnIsIGhkbHIsIHBvcnQsIHZlcmlmeSk6CiAgICAgICAgICAgICBzdXBlcihTZXJ2ZXIsIHNlbGYpLl9faW5pdF9fKCkKICAgICAgICAgICAgIHNlbGYucmN2ciA9IHJjdnIKICAgICAgICAgICAgIHNlbGYuaGRsciA9IGhkbHIKICAgICAgICAgICAgIHNlbGYucG9ydCA9IHBvcnQKKyAgICAgICAgICAgIHNlbGYudmVyaWZ5ID0gdmVyaWZ5CiAgICAgICAgICAgICBzZWxmLnJlYWR5ID0gdGhyZWFkaW5nLkV2ZW50KCkKIAogICAgICAgICBkZWYgcnVuKHNlbGYpOgogICAgICAgICAgICAgc2VydmVyID0gc2VsZi5yY3ZyKHBvcnQ9c2VsZi5wb3J0LCBoYW5kbGVyPXNlbGYuaGRsciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkeT1zZWxmLnJlYWR5KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWR5PXNlbGYucmVhZHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyaWZ5PXNlbGYudmVyaWZ5KQogICAgICAgICAgICAgaWYgc2VsZi5wb3J0ID09IDA6CiAgICAgICAgICAgICAgICAgc2VsZi5wb3J0ID0gc2VydmVyLnNlcnZlcl9hZGRyZXNzWzFdCiAgICAgICAgICAgICBzZWxmLnJlYWR5LnNldCgpCkBAIC05MDgsNyArOTExLDcgQEAKICAgICAgICAgICAgIGxvZ2dpbmcuX3JlbGVhc2VMb2NrKCkKICAgICAgICAgICAgIHNlcnZlci5zZXJ2ZV91bnRpbF9zdG9wcGVkKCkKIAotICAgIHJldHVybiBTZXJ2ZXIoQ29uZmlnU29ja2V0UmVjZWl2ZXIsIENvbmZpZ1N0cmVhbUhhbmRsZXIsIHBvcnQpCisgICAgcmV0dXJuIFNlcnZlcihDb25maWdTb2NrZXRSZWNlaXZlciwgQ29uZmlnU3RyZWFtSGFuZGxlciwgcG9ydCwgdmVyaWZ5KQogCiBkZWYgc3RvcExpc3RlbmluZygpOgogICAgICIiIgpkaWZmIC0tZ2l0IGEvTGliL2xvZ2dpbmcvaGFuZGxlcnMucHkgYi9MaWIvbG9nZ2luZy9oYW5kbGVycy5weQppbmRleCBkZGVjN2RkLi4xM2E4ZmIyIDEwMDY0NAotLS0gYS9MaWIvbG9nZ2luZy9oYW5kbGVycy5weQorKysgYi9MaWIvbG9nZ2luZy9oYW5kbGVycy5weQpAQCAtMSw0ICsxLDQgQEAKLSMgQ29weXJpZ2h0IDIwMDEtMjAxMyBieSBWaW5heSBTYWppcC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMgQ29weXJpZ2h0IDIwMDEtMjAxNSBieSBWaW5heSBTYWppcC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICMKICMgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzCiAjIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwKQEAgLTE4LDEzICsxOCwxMiBAQAogQWRkaXRpb25hbCBoYW5kbGVycyBmb3IgdGhlIGxvZ2dpbmcgcGFja2FnZSBmb3IgUHl0aG9uLiBUaGUgY29yZSBwYWNrYWdlIGlzCiBiYXNlZCBvbiBQRVAgMjgyIGFuZCBjb21tZW50cyB0aGVyZXRvIGluIGNvbXAubGFuZy5weXRob24uCiAKLUNvcHlyaWdodCAoQykgMjAwMS0yMDEzIFZpbmF5IFNhamlwLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorQ29weXJpZ2h0IChDKSAyMDAxLTIwMTUgVmluYXkgU2FqaXAuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAKIFRvIHVzZSwgc2ltcGx5ICdpbXBvcnQgbG9nZ2luZy5oYW5kbGVycycgYW5kIGxvZyBhd2F5IQogIiIiCiAKLWltcG9ydCBlcnJubywgbG9nZ2luZywgc29ja2V0LCBvcywgcGlja2xlLCBzdHJ1Y3QsIHRpbWUsIHJlCi1mcm9tIGNvZGVjcyBpbXBvcnQgQk9NX1VURjgKK2ltcG9ydCBsb2dnaW5nLCBzb2NrZXQsIG9zLCBwaWNrbGUsIHN0cnVjdCwgdGltZSwgcmUKIGZyb20gc3RhdCBpbXBvcnQgU1RfREVWLCBTVF9JTk8sIFNUX01USU1FCiBpbXBvcnQgcXVldWUKIHRyeToKQEAgLTcyLDkgKzcxLDcgQEAKICAgICAgICAgICAgIGlmIHNlbGYuc2hvdWxkUm9sbG92ZXIocmVjb3JkKToKICAgICAgICAgICAgICAgICBzZWxmLmRvUm9sbG92ZXIoKQogICAgICAgICAgICAgbG9nZ2luZy5GaWxlSGFuZGxlci5lbWl0KHNlbGYsIHJlY29yZCkKLSAgICAgICAgZXhjZXB0IChLZXlib2FyZEludGVycnVwdCwgU3lzdGVtRXhpdCk6ICNwcmFnbWE6IG5vIGNvdmVyCi0gICAgICAgICAgICByYWlzZQotICAgICAgICBleGNlcHQ6CisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgICAgICBzZWxmLmhhbmRsZUVycm9yKHJlY29yZCkKIAogICAgIGRlZiByb3RhdGlvbl9maWxlbmFtZShzZWxmLCBkZWZhdWx0X25hbWUpOgpAQCAtMjAxLDExICsxOTgsMTIgQEAKICAgICBJZiBiYWNrdXBDb3VudCBpcyA+IDAsIHdoZW4gcm9sbG92ZXIgaXMgZG9uZSwgbm8gbW9yZSB0aGFuIGJhY2t1cENvdW50CiAgICAgZmlsZXMgYXJlIGtlcHQgLSB0aGUgb2xkZXN0IG9uZXMgYXJlIGRlbGV0ZWQuCiAgICAgIiIiCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVuYW1lLCB3aGVuPSdoJywgaW50ZXJ2YWw9MSwgYmFja3VwQ291bnQ9MCwgZW5jb2Rpbmc9Tm9uZSwgZGVsYXk9RmFsc2UsIHV0Yz1GYWxzZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVuYW1lLCB3aGVuPSdoJywgaW50ZXJ2YWw9MSwgYmFja3VwQ291bnQ9MCwgZW5jb2Rpbmc9Tm9uZSwgZGVsYXk9RmFsc2UsIHV0Yz1GYWxzZSwgYXRUaW1lPU5vbmUpOgogICAgICAgICBCYXNlUm90YXRpbmdIYW5kbGVyLl9faW5pdF9fKHNlbGYsIGZpbGVuYW1lLCAnYScsIGVuY29kaW5nLCBkZWxheSkKICAgICAgICAgc2VsZi53aGVuID0gd2hlbi51cHBlcigpCiAgICAgICAgIHNlbGYuYmFja3VwQ291bnQgPSBiYWNrdXBDb3VudAogICAgICAgICBzZWxmLnV0YyA9IHV0YworICAgICAgICBzZWxmLmF0VGltZSA9IGF0VGltZQogICAgICAgICAjIENhbGN1bGF0ZSB0aGUgcmVhbCByb2xsb3ZlciBpbnRlcnZhbCwgd2hpY2ggaXMganVzdCB0aGUgbnVtYmVyIG9mCiAgICAgICAgICMgc2Vjb25kcyBiZXR3ZWVuIHJvbGxvdmVycy4gIEFsc28gc2V0IHRoZSBmaWxlbmFtZSBzdWZmaXggdXNlZCB3aGVuCiAgICAgICAgICMgYSByb2xsb3ZlciBvY2N1cnMuICBDdXJyZW50ICd3aGVuJyBldmVudHMgc3VwcG9ydGVkOgpAQCAtMjc1LDkgKzI3MywyMiBAQAogICAgICAgICAgICAgY3VycmVudEhvdXIgPSB0WzNdCiAgICAgICAgICAgICBjdXJyZW50TWludXRlID0gdFs0XQogICAgICAgICAgICAgY3VycmVudFNlY29uZCA9IHRbNV0KLSAgICAgICAgICAgICMgciBpcyB0aGUgbnVtYmVyIG9mIHNlY29uZHMgbGVmdCBiZXR3ZWVuIG5vdyBhbmQgbWlkbmlnaHQKLSAgICAgICAgICAgIHIgPSBfTUlETklHSFQgLSAoKGN1cnJlbnRIb3VyICogNjAgKyBjdXJyZW50TWludXRlKSAqIDYwICsKLSAgICAgICAgICAgICAgICAgICAgY3VycmVudFNlY29uZCkKKyAgICAgICAgICAgIGN1cnJlbnREYXkgPSB0WzZdCisgICAgICAgICAgICAjIHIgaXMgdGhlIG51bWJlciBvZiBzZWNvbmRzIGxlZnQgYmV0d2VlbiBub3cgYW5kIHRoZSBuZXh0IHJvdGF0aW9uCisgICAgICAgICAgICBpZiBzZWxmLmF0VGltZSBpcyBOb25lOgorICAgICAgICAgICAgICAgIHJvdGF0ZV90cyA9IF9NSUROSUdIVAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByb3RhdGVfdHMgPSAoKHNlbGYuYXRUaW1lLmhvdXIgKiA2MCArIHNlbGYuYXRUaW1lLm1pbnV0ZSkqNjAgKworICAgICAgICAgICAgICAgICAgICBzZWxmLmF0VGltZS5zZWNvbmQpCisKKyAgICAgICAgICAgIHIgPSByb3RhdGVfdHMgLSAoKGN1cnJlbnRIb3VyICogNjAgKyBjdXJyZW50TWludXRlKSAqIDYwICsKKyAgICAgICAgICAgICAgICBjdXJyZW50U2Vjb25kKQorICAgICAgICAgICAgaWYgciA8IDA6CisgICAgICAgICAgICAgICAgIyBSb3RhdGUgdGltZSBpcyBiZWZvcmUgdGhlIGN1cnJlbnQgdGltZSAoZm9yIGV4YW1wbGUgd2hlbgorICAgICAgICAgICAgICAgICMgc2VsZi5yb3RhdGVBdCBpcyAxMzo0NSBhbmQgaXQgbm93IDE0OjE1KSwgcm90YXRpb24gaXMKKyAgICAgICAgICAgICAgICAjIHRvbW9ycm93LgorICAgICAgICAgICAgICAgIHIgKz0gX01JRE5JR0hUCisgICAgICAgICAgICAgICAgY3VycmVudERheSA9IChjdXJyZW50RGF5ICsgMSkgJSA3CiAgICAgICAgICAgICByZXN1bHQgPSBjdXJyZW50VGltZSArIHIKICAgICAgICAgICAgICMgSWYgd2UgYXJlIHJvbGxpbmcgb3ZlciBvbiBhIGNlcnRhaW4gZGF5LCBhZGQgaW4gdGhlIG51bWJlciBvZiBkYXlzIHVudGlsCiAgICAgICAgICAgICAjIHRoZSBuZXh0IHJvbGxvdmVyLCBidXQgb2Zmc2V0IGJ5IDEgc2luY2Ugd2UganVzdCBjYWxjdWxhdGVkIHRoZSB0aW1lCkBAIC0yOTUsNyArMzA2LDcgQEAKICAgICAgICAgICAgICMgVGhpcyBpcyBiZWNhdXNlIHRoZSBhYm92ZSB0aW1lIGNhbGN1bGF0aW9uIHRha2VzIHVzIHRvIG1pZG5pZ2h0IG9uIHRoaXMKICAgICAgICAgICAgICMgZGF5LCBpLmUuIHRoZSBzdGFydCBvZiB0aGUgbmV4dCBkYXkuCiAgICAgICAgICAgICBpZiBzZWxmLndoZW4uc3RhcnRzd2l0aCgnVycpOgotICAgICAgICAgICAgICAgIGRheSA9IHRbNl0gIyAwIGlzIE1vbmRheQorICAgICAgICAgICAgICAgIGRheSA9IGN1cnJlbnREYXkgIyAwIGlzIE1vbmRheQogICAgICAgICAgICAgICAgIGlmIGRheSAhPSBzZWxmLmRheU9mV2VlazoKICAgICAgICAgICAgICAgICAgICAgaWYgZGF5IDwgc2VsZi5kYXlPZldlZWs6CiAgICAgICAgICAgICAgICAgICAgICAgICBkYXlzVG9XYWl0ID0gc2VsZi5kYXlPZldlZWsgLSBkYXkKQEAgLTQ0NCwxNyArNDU1LDE1IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgICMgc3RhdCB0aGUgZmlsZSBieSBwYXRoLCBjaGVja2luZyBmb3IgZXhpc3RlbmNlCiAgICAgICAgICAgICBzcmVzID0gb3Muc3RhdChzZWxmLmJhc2VGaWxlbmFtZSkKLSAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgotICAgICAgICAgICAgaWYgZXJyLmVycm5vID09IGVycm5vLkVOT0VOVDoKLSAgICAgICAgICAgICAgICBzcmVzID0gTm9uZQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICBleGNlcHQgRmlsZU5vdEZvdW5kRXJyb3I6CisgICAgICAgICAgICBzcmVzID0gTm9uZQogICAgICAgICAjIGNvbXBhcmUgZmlsZSBzeXN0ZW0gc3RhdCB3aXRoIHRoYXQgb2Ygb3VyIHN0cmVhbSBmaWxlIGhhbmRsZQogICAgICAgICBpZiBub3Qgc3JlcyBvciBzcmVzW1NUX0RFVl0gIT0gc2VsZi5kZXYgb3Igc3Jlc1tTVF9JTk9dICE9IHNlbGYuaW5vOgogICAgICAgICAgICAgaWYgc2VsZi5zdHJlYW0gaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAgIyB3ZSBoYXZlIGFuIG9wZW4gZmlsZSBoYW5kbGUsIGNsZWFuIGl0IHVwCiAgICAgICAgICAgICAgICAgc2VsZi5zdHJlYW0uZmx1c2goKQogICAgICAgICAgICAgICAgIHNlbGYuc3RyZWFtLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBzZWxmLnN0cmVhbSA9IE5vbmUgICMgU2VlIElzc3VlICMyMTc0MjogX29wZW4gKCkgbWlnaHQgZmFpbC4KICAgICAgICAgICAgICAgICAjIG9wZW4gYSBuZXcgZmlsZSBoYW5kbGUgYW5kIGdldCBuZXcgc3RhdCBpbmZvIGZyb20gdGhhdCBmZAogICAgICAgICAgICAgICAgIHNlbGYuc3RyZWFtID0gc2VsZi5fb3BlbigpCiAgICAgICAgICAgICAgICAgc2VsZi5fc3RhdHN0cmVhbSgpCkBAIC00ODUsNiArNDk0LDEwIEBACiAgICAgICAgIGxvZ2dpbmcuSGFuZGxlci5fX2luaXRfXyhzZWxmKQogICAgICAgICBzZWxmLmhvc3QgPSBob3N0CiAgICAgICAgIHNlbGYucG9ydCA9IHBvcnQKKyAgICAgICAgaWYgcG9ydCBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5hZGRyZXNzID0gaG9zdAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hZGRyZXNzID0gKGhvc3QsIHBvcnQpCiAgICAgICAgIHNlbGYuc29jayA9IE5vbmUKICAgICAgICAgc2VsZi5jbG9zZU9uRXJyb3IgPSBGYWxzZQogICAgICAgICBzZWxmLnJldHJ5VGltZSA9IE5vbmUKQEAgLTUwMCwxNSArNTEzLDE3IEBACiAgICAgICAgIEEgZmFjdG9yeSBtZXRob2Qgd2hpY2ggYWxsb3dzIHN1YmNsYXNzZXMgdG8gZGVmaW5lIHRoZSBwcmVjaXNlCiAgICAgICAgIHR5cGUgb2Ygc29ja2V0IHRoZXkgd2FudC4KICAgICAgICAgIiIiCi0gICAgICAgIHMgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCi0gICAgICAgIGlmIGhhc2F0dHIocywgJ3NldHRpbWVvdXQnKToKLSAgICAgICAgICAgIHMuc2V0dGltZW91dCh0aW1lb3V0KQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzLmNvbm5lY3QoKHNlbGYuaG9zdCwgc2VsZi5wb3J0KSkKLSAgICAgICAgICAgIHJldHVybiBzCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6Ci0gICAgICAgICAgICBzLmNsb3NlKCkKLSAgICAgICAgICAgIHJhaXNlCisgICAgICAgIGlmIHNlbGYucG9ydCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJlc3VsdCA9IHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbihzZWxmLmFkZHJlc3MsIHRpbWVvdXQ9dGltZW91dCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJlc3VsdCA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX1VOSVgsIHNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAgICAgIHJlc3VsdC5zZXR0aW1lb3V0KHRpbWVvdXQpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmVzdWx0LmNvbm5lY3Qoc2VsZi5hZGRyZXNzKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgcmVzdWx0LmNsb3NlKCkgICMgSXNzdWUgMTkxODIKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICByZXR1cm4gcmVzdWx0CiAKICAgICBkZWYgY3JlYXRlU29ja2V0KHNlbGYpOgogICAgICAgICAiIiIKQEAgLTUyOCw3ICs1NDMsNyBAQAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHNlbGYuc29jayA9IHNlbGYubWFrZVNvY2tldCgpCiAgICAgICAgICAgICAgICAgc2VsZi5yZXRyeVRpbWUgPSBOb25lICMgbmV4dCB0aW1lLCBubyBkZWxheSBiZWZvcmUgdHJ5aW5nCi0gICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgI0NyZWF0aW9uIGZhaWxlZCwgc28gc2V0IHRoZSByZXRyeSB0aW1lIGFuZCByZXR1cm4uCiAgICAgICAgICAgICAgICAgaWYgc2VsZi5yZXRyeVRpbWUgaXMgTm9uZToKICAgICAgICAgICAgICAgICAgICAgc2VsZi5yZXRyeVBlcmlvZCA9IHNlbGYucmV0cnlTdGFydApAQCAtNTUyLDE2ICs1NjcsOCBAQAogICAgICAgICAjYnV0IGFyZSBzdGlsbCB1bmFibGUgdG8gY29ubmVjdC4KICAgICAgICAgaWYgc2VsZi5zb2NrOgogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGlmIGhhc2F0dHIoc2VsZi5zb2NrLCAic2VuZGFsbCIpOgotICAgICAgICAgICAgICAgICAgICBzZWxmLnNvY2suc2VuZGFsbChzKQotICAgICAgICAgICAgICAgIGVsc2U6ICNwcmFnbWE6IG5vIGNvdmVyCi0gICAgICAgICAgICAgICAgICAgIHNlbnRzb2ZhciA9IDAKLSAgICAgICAgICAgICAgICAgICAgbGVmdCA9IGxlbihzKQotICAgICAgICAgICAgICAgICAgICB3aGlsZSBsZWZ0ID4gMDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbnQgPSBzZWxmLnNvY2suc2VuZChzW3NlbnRzb2ZhcjpdKQotICAgICAgICAgICAgICAgICAgICAgICAgc2VudHNvZmFyID0gc2VudHNvZmFyICsgc2VudAotICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCA9IGxlZnQgLSBzZW50Ci0gICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOiAjcHJhZ21hOiBubyBjb3ZlcgorICAgICAgICAgICAgICAgIHNlbGYuc29jay5zZW5kYWxsKHMpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjogI3ByYWdtYTogbm8gY292ZXIKICAgICAgICAgICAgICAgICBzZWxmLnNvY2suY2xvc2UoKQogICAgICAgICAgICAgICAgIHNlbGYuc29jayA9IE5vbmUgICMgc28gd2UgY2FuIGNhbGwgY3JlYXRlU29ja2V0IG5leHQgdGltZQogCkBAIC02MTEsOSArNjE4LDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcyA9IHNlbGYubWFrZVBpY2tsZShyZWNvcmQpCiAgICAgICAgICAgICBzZWxmLnNlbmQocykKLSAgICAgICAgZXhjZXB0IChLZXlib2FyZEludGVycnVwdCwgU3lzdGVtRXhpdCk6ICNwcmFnbWE6IG5vIGNvdmVyCi0gICAgICAgICAgICByYWlzZQotICAgICAgICBleGNlcHQ6CisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgICAgICBzZWxmLmhhbmRsZUVycm9yKHJlY29yZCkKIAogICAgIGRlZiBjbG9zZShzZWxmKToKQEAgLTYyMiw5ICs2MjcsMTAgQEAKICAgICAgICAgIiIiCiAgICAgICAgIHNlbGYuYWNxdWlyZSgpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIGlmIHNlbGYuc29jazoKLSAgICAgICAgICAgICAgICBzZWxmLnNvY2suY2xvc2UoKQorICAgICAgICAgICAgc29jayA9IHNlbGYuc29jaworICAgICAgICAgICAgaWYgc29jazoKICAgICAgICAgICAgICAgICBzZWxmLnNvY2sgPSBOb25lCisgICAgICAgICAgICAgICAgc29jay5jbG9zZSgpCiAgICAgICAgICAgICBsb2dnaW5nLkhhbmRsZXIuY2xvc2Uoc2VsZikKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIHNlbGYucmVsZWFzZSgpCkBAIC02NTIsNyArNjU4LDExIEBACiAgICAgICAgIFRoZSBmYWN0b3J5IG1ldGhvZCBvZiBTb2NrZXRIYW5kbGVyIGlzIGhlcmUgb3ZlcnJpZGRlbiB0byBjcmVhdGUKICAgICAgICAgYSBVRFAgc29ja2V0IChTT0NLX0RHUkFNKS4KICAgICAgICAgIiIiCi0gICAgICAgIHMgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19ER1JBTSkKKyAgICAgICAgaWYgc2VsZi5wb3J0IGlzIE5vbmU6CisgICAgICAgICAgICBmYW1pbHkgPSBzb2NrZXQuQUZfVU5JWAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZmFtaWx5ID0gc29ja2V0LkFGX0lORVQKKyAgICAgICAgcyA9IHNvY2tldC5zb2NrZXQoZmFtaWx5LCBzb2NrZXQuU09DS19ER1JBTSkKICAgICAgICAgcmV0dXJuIHMKIAogICAgIGRlZiBzZW5kKHNlbGYsIHMpOgpAQCAtNjY1LDcgKzY3NSw3IEBACiAgICAgICAgICIiIgogICAgICAgICBpZiBzZWxmLnNvY2sgaXMgTm9uZToKICAgICAgICAgICAgIHNlbGYuY3JlYXRlU29ja2V0KCkKLSAgICAgICAgc2VsZi5zb2NrLnNlbmR0byhzLCAoc2VsZi5ob3N0LCBzZWxmLnBvcnQpKQorICAgICAgICBzZWxmLnNvY2suc2VuZHRvKHMsIHNlbGYuYWRkcmVzcykKIAogY2xhc3MgU3lzTG9nSGFuZGxlcihsb2dnaW5nLkhhbmRsZXIpOgogICAgICIiIgpAQCAtNzc3LDcgKzc4NywxMSBAQAogCiAgICAgICAgIElmIGFkZHJlc3MgaXMgc3BlY2lmaWVkIGFzIGEgc3RyaW5nLCBhIFVOSVggc29ja2V0IGlzIHVzZWQuIFRvIGxvZyB0byBhCiAgICAgICAgIGxvY2FsIHN5c2xvZ2QsICJTeXNMb2dIYW5kbGVyKGFkZHJlc3M9Ii9kZXYvbG9nIikiIGNhbiBiZSB1c2VkLgotICAgICAgICBJZiBmYWNpbGl0eSBpcyBub3Qgc3BlY2lmaWVkLCBMT0dfVVNFUiBpcyB1c2VkLgorICAgICAgICBJZiBmYWNpbGl0eSBpcyBub3Qgc3BlY2lmaWVkLCBMT0dfVVNFUiBpcyB1c2VkLiBJZiBzb2NrdHlwZSBpcworICAgICAgICBzcGVjaWZpZWQgYXMgc29ja2V0LlNPQ0tfREdSQU0gb3Igc29ja2V0LlNPQ0tfU1RSRUFNLCB0aGF0IHNwZWNpZmljCisgICAgICAgIHNvY2tldCB0eXBlIHdpbGwgYmUgdXNlZC4gRm9yIFVuaXggc29ja2V0cywgeW91IGNhbiBhbHNvIHNwZWNpZnkgYQorICAgICAgICBzb2NrdHlwZSBvZiBOb25lLCBpbiB3aGljaCBjYXNlIHNvY2tldC5TT0NLX0RHUkFNIHdpbGwgYmUgdXNlZCwgZmFsbGluZworICAgICAgICBiYWNrIHRvIHNvY2tldC5TT0NLX1NUUkVBTS4KICAgICAgICAgIiIiCiAgICAgICAgIGxvZ2dpbmcuSGFuZGxlci5fX2luaXRfXyhzZWxmKQogCkBAIC04MDcsNyArODIxLDcgQEAKICAgICAgICAgICAgIHNlbGYuc29ja2V0LmNvbm5lY3QoYWRkcmVzcykKICAgICAgICAgICAgICMgaXQgd29ya2VkLCBzbyBzZXQgc2VsZi5zb2NrdHlwZSB0byB0aGUgdXNlZCB0eXBlCiAgICAgICAgICAgICBzZWxmLnNvY2t0eXBlID0gdXNlX3NvY2t0eXBlCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgc2VsZi5zb2NrZXQuY2xvc2UoKQogICAgICAgICAgICAgaWYgc2VsZi5zb2NrdHlwZSBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICAjIHVzZXIgZGlkbid0IHNwZWNpZnkgZmFsbGluZyBiYWNrLCBzbyBmYWlsCkBAIC04MTgsNyArODMyLDcgQEAKICAgICAgICAgICAgICAgICBzZWxmLnNvY2tldC5jb25uZWN0KGFkZHJlc3MpCiAgICAgICAgICAgICAgICAgIyBpdCB3b3JrZWQsIHNvIHNldCBzZWxmLnNvY2t0eXBlIHRvIHRoZSB1c2VkIHR5cGUKICAgICAgICAgICAgICAgICBzZWxmLnNvY2t0eXBlID0gdXNlX3NvY2t0eXBlCi0gICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgc2VsZi5zb2NrZXQuY2xvc2UoKQogICAgICAgICAgICAgICAgIHJhaXNlCiAKQEAgLTg2NiwyNiArODgwLDI1IEBACiAgICAgICAgIFRoZSByZWNvcmQgaXMgZm9ybWF0dGVkLCBhbmQgdGhlbiBzZW50IHRvIHRoZSBzeXNsb2cgc2VydmVyLiBJZgogICAgICAgICBleGNlcHRpb24gaW5mb3JtYXRpb24gaXMgcHJlc2VudCwgaXQgaXMgTk9UIHNlbnQgdG8gdGhlIHNlcnZlci4KICAgICAgICAgIiIiCi0gICAgICAgIG1zZyA9IHNlbGYuZm9ybWF0KHJlY29yZCkKLSAgICAgICAgaWYgc2VsZi5pZGVudDoKLSAgICAgICAgICAgIG1zZyA9IHNlbGYuaWRlbnQgKyBtc2cKLSAgICAgICAgaWYgc2VsZi5hcHBlbmRfbnVsOgotICAgICAgICAgICAgbXNnICs9ICdcMDAwJwotICAgICAgICAiIiIKLSAgICAgICAgV2UgbmVlZCB0byBjb252ZXJ0IHJlY29yZCBsZXZlbCB0byBsb3dlcmNhc2UsIG1heWJlIHRoaXMgd2lsbAotICAgICAgICBjaGFuZ2UgaW4gdGhlIGZ1dHVyZS4KLSAgICAgICAgIiIiCi0gICAgICAgIHByaW8gPSAnPCVkPicgJSBzZWxmLmVuY29kZVByaW9yaXR5KHNlbGYuZmFjaWxpdHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWFwUHJpb3JpdHkocmVjb3JkLmxldmVsbmFtZSkpCi0gICAgICAgIHByaW8gPSBwcmlvLmVuY29kZSgndXRmLTgnKQotICAgICAgICAjIE1lc3NhZ2UgaXMgYSBzdHJpbmcuIENvbnZlcnQgdG8gYnl0ZXMgYXMgcmVxdWlyZWQgYnkgUkZDIDU0MjQKLSAgICAgICAgbXNnID0gbXNnLmVuY29kZSgndXRmLTgnKQotICAgICAgICBtc2cgPSBwcmlvICsgbXNnCiAgICAgICAgIHRyeToKKyAgICAgICAgICAgIG1zZyA9IHNlbGYuZm9ybWF0KHJlY29yZCkKKyAgICAgICAgICAgIGlmIHNlbGYuaWRlbnQ6CisgICAgICAgICAgICAgICAgbXNnID0gc2VsZi5pZGVudCArIG1zZworICAgICAgICAgICAgaWYgc2VsZi5hcHBlbmRfbnVsOgorICAgICAgICAgICAgICAgIG1zZyArPSAnXDAwMCcKKworICAgICAgICAgICAgIyBXZSBuZWVkIHRvIGNvbnZlcnQgcmVjb3JkIGxldmVsIHRvIGxvd2VyY2FzZSwgbWF5YmUgdGhpcyB3aWxsCisgICAgICAgICAgICAjIGNoYW5nZSBpbiB0aGUgZnV0dXJlLgorICAgICAgICAgICAgcHJpbyA9ICc8JWQ+JyAlIHNlbGYuZW5jb2RlUHJpb3JpdHkoc2VsZi5mYWNpbGl0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWFwUHJpb3JpdHkocmVjb3JkLmxldmVsbmFtZSkpCisgICAgICAgICAgICBwcmlvID0gcHJpby5lbmNvZGUoJ3V0Zi04JykKKyAgICAgICAgICAgICMgTWVzc2FnZSBpcyBhIHN0cmluZy4gQ29udmVydCB0byBieXRlcyBhcyByZXF1aXJlZCBieSBSRkMgNTQyNAorICAgICAgICAgICAgbXNnID0gbXNnLmVuY29kZSgndXRmLTgnKQorICAgICAgICAgICAgbXNnID0gcHJpbyArIG1zZwogICAgICAgICAgICAgaWYgc2VsZi51bml4c29ja2V0OgogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgc2VsZi5zb2NrZXQuc2VuZChtc2cpCi0gICAgICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgc2VsZi5zb2NrZXQuY2xvc2UoKQogICAgICAgICAgICAgICAgICAgICBzZWxmLl9jb25uZWN0X3VuaXhzb2NrZXQoc2VsZi5hZGRyZXNzKQogICAgICAgICAgICAgICAgICAgICBzZWxmLnNvY2tldC5zZW5kKG1zZykKQEAgLTg5Myw5ICs5MDYsNyBAQAogICAgICAgICAgICAgICAgIHNlbGYuc29ja2V0LnNlbmR0byhtc2csIHNlbGYuYWRkcmVzcykKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgc2VsZi5zb2NrZXQuc2VuZGFsbChtc2cpCi0gICAgICAgIGV4Y2VwdCAoS2V5Ym9hcmRJbnRlcnJ1cHQsIFN5c3RlbUV4aXQpOiAjcHJhZ21hOiBubyBjb3ZlcgotICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgZXhjZXB0OgorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgICAgICAgc2VsZi5oYW5kbGVFcnJvcihyZWNvcmQpCiAKIGNsYXNzIFNNVFBIYW5kbGVyKGxvZ2dpbmcuSGFuZGxlcik6CkBAIC05MjEsMTEgKzkzMiwxMSBAQAogICAgICAgICBkZWZhdWx0IGlzIG9uZSBzZWNvbmQpLgogICAgICAgICAiIiIKICAgICAgICAgbG9nZ2luZy5IYW5kbGVyLl9faW5pdF9fKHNlbGYpCi0gICAgICAgIGlmIGlzaW5zdGFuY2UobWFpbGhvc3QsIHR1cGxlKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShtYWlsaG9zdCwgKGxpc3QsIHR1cGxlKSk6CiAgICAgICAgICAgICBzZWxmLm1haWxob3N0LCBzZWxmLm1haWxwb3J0ID0gbWFpbGhvc3QKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYubWFpbGhvc3QsIHNlbGYubWFpbHBvcnQgPSBtYWlsaG9zdCwgTm9uZQotICAgICAgICBpZiBpc2luc3RhbmNlKGNyZWRlbnRpYWxzLCB0dXBsZSk6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoY3JlZGVudGlhbHMsIChsaXN0LCB0dXBsZSkpOgogICAgICAgICAgICAgc2VsZi51c2VybmFtZSwgc2VsZi5wYXNzd29yZCA9IGNyZWRlbnRpYWxzCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLnVzZXJuYW1lID0gTm9uZQpAQCAtOTU0LDI4ICs5NjUsMjggQEAKICAgICAgICAgIiIiCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGltcG9ydCBzbXRwbGliCi0gICAgICAgICAgICBmcm9tIGVtYWlsLnV0aWxzIGltcG9ydCBmb3JtYXRkYXRlCisgICAgICAgICAgICBmcm9tIGVtYWlsLm1lc3NhZ2UgaW1wb3J0IEVtYWlsTWVzc2FnZQorICAgICAgICAgICAgaW1wb3J0IGVtYWlsLnV0aWxzCisKICAgICAgICAgICAgIHBvcnQgPSBzZWxmLm1haWxwb3J0CiAgICAgICAgICAgICBpZiBub3QgcG9ydDoKICAgICAgICAgICAgICAgICBwb3J0ID0gc210cGxpYi5TTVRQX1BPUlQKICAgICAgICAgICAgIHNtdHAgPSBzbXRwbGliLlNNVFAoc2VsZi5tYWlsaG9zdCwgcG9ydCwgdGltZW91dD1zZWxmLnRpbWVvdXQpCi0gICAgICAgICAgICBtc2cgPSBzZWxmLmZvcm1hdChyZWNvcmQpCi0gICAgICAgICAgICBtc2cgPSAiRnJvbTogJXNcclxuVG86ICVzXHJcblN1YmplY3Q6ICVzXHJcbkRhdGU6ICVzXHJcblxyXG4lcyIgJSAoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5mcm9tYWRkciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLCIuam9pbihzZWxmLnRvYWRkcnMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2V0U3ViamVjdChyZWNvcmQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdGRhdGUoKSwgbXNnKQorICAgICAgICAgICAgbXNnID0gRW1haWxNZXNzYWdlKCkKKyAgICAgICAgICAgIG1zZ1snRnJvbSddID0gc2VsZi5mcm9tYWRkcgorICAgICAgICAgICAgbXNnWydUbyddID0gJywnLmpvaW4oc2VsZi50b2FkZHJzKQorICAgICAgICAgICAgbXNnWydTdWJqZWN0J10gPSBzZWxmLmdldFN1YmplY3QocmVjb3JkKQorICAgICAgICAgICAgbXNnWydEYXRlJ10gPSBlbWFpbC51dGlscy5sb2NhbHRpbWUoKQorICAgICAgICAgICAgbXNnLnNldF9jb250ZW50KHNlbGYuZm9ybWF0KHJlY29yZCkpCiAgICAgICAgICAgICBpZiBzZWxmLnVzZXJuYW1lOgogICAgICAgICAgICAgICAgIGlmIHNlbGYuc2VjdXJlIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgICAgICBzbXRwLmVobG8oKQogICAgICAgICAgICAgICAgICAgICBzbXRwLnN0YXJ0dGxzKCpzZWxmLnNlY3VyZSkKICAgICAgICAgICAgICAgICAgICAgc210cC5laGxvKCkKICAgICAgICAgICAgICAgICBzbXRwLmxvZ2luKHNlbGYudXNlcm5hbWUsIHNlbGYucGFzc3dvcmQpCi0gICAgICAgICAgICBzbXRwLnNlbmRtYWlsKHNlbGYuZnJvbWFkZHIsIHNlbGYudG9hZGRycywgbXNnKQorICAgICAgICAgICAgc210cC5zZW5kX21lc3NhZ2UobXNnKQogICAgICAgICAgICAgc210cC5xdWl0KCkKLSAgICAgICAgZXhjZXB0IChLZXlib2FyZEludGVycnVwdCwgU3lzdGVtRXhpdCk6ICNwcmFnbWE6IG5vIGNvdmVyCi0gICAgICAgICAgICByYWlzZQotICAgICAgICBleGNlcHQ6CisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgICAgICBzZWxmLmhhbmRsZUVycm9yKHJlY29yZCkKIAogY2xhc3MgTlRFdmVudExvZ0hhbmRsZXIobG9nZ2luZy5IYW5kbGVyKToKQEAgLTEwNjAsOSArMTA3MSw3IEBACiAgICAgICAgICAgICAgICAgdHlwZSA9IHNlbGYuZ2V0RXZlbnRUeXBlKHJlY29yZCkKICAgICAgICAgICAgICAgICBtc2cgPSBzZWxmLmZvcm1hdChyZWNvcmQpCiAgICAgICAgICAgICAgICAgc2VsZi5fd2VsdS5SZXBvcnRFdmVudChzZWxmLmFwcG5hbWUsIGlkLCBjYXQsIHR5cGUsIFttc2ddKQotICAgICAgICAgICAgZXhjZXB0IChLZXlib2FyZEludGVycnVwdCwgU3lzdGVtRXhpdCk6ICNwcmFnbWE6IG5vIGNvdmVyCi0gICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVFcnJvcihyZWNvcmQpCiAKICAgICBkZWYgY2xvc2Uoc2VsZik6CkBAIC0xMDgzLDcgKzEwOTIsOCBAQAogICAgIEEgY2xhc3Mgd2hpY2ggc2VuZHMgcmVjb3JkcyB0byBhIFdlYiBzZXJ2ZXIsIHVzaW5nIGVpdGhlciBHRVQgb3IKICAgICBQT1NUIHNlbWFudGljcy4KICAgICAiIiIKLSAgICBkZWYgX19pbml0X18oc2VsZiwgaG9zdCwgdXJsLCBtZXRob2Q9IkdFVCIsIHNlY3VyZT1GYWxzZSwgY3JlZGVudGlhbHM9Tm9uZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGhvc3QsIHVybCwgbWV0aG9kPSJHRVQiLCBzZWN1cmU9RmFsc2UsIGNyZWRlbnRpYWxzPU5vbmUsCisgICAgICAgICAgICAgICAgIGNvbnRleHQ9Tm9uZSk6CiAgICAgICAgICIiIgogICAgICAgICBJbml0aWFsaXplIHRoZSBpbnN0YW5jZSB3aXRoIHRoZSBob3N0LCB0aGUgcmVxdWVzdCBVUkwsIGFuZCB0aGUgbWV0aG9kCiAgICAgICAgICgiR0VUIiBvciAiUE9TVCIpCkBAIC0xMDkyLDExICsxMTAyLDE1IEBACiAgICAgICAgIG1ldGhvZCA9IG1ldGhvZC51cHBlcigpCiAgICAgICAgIGlmIG1ldGhvZCBub3QgaW4gWyJHRVQiLCAiUE9TVCJdOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigibWV0aG9kIG11c3QgYmUgR0VUIG9yIFBPU1QiKQorICAgICAgICBpZiBub3Qgc2VjdXJlIGFuZCBjb250ZXh0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiY29udGV4dCBwYXJhbWV0ZXIgb25seSBtYWtlcyBzZW5zZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aXRoIHNlY3VyZT1UcnVlIikKICAgICAgICAgc2VsZi5ob3N0ID0gaG9zdAogICAgICAgICBzZWxmLnVybCA9IHVybAogICAgICAgICBzZWxmLm1ldGhvZCA9IG1ldGhvZAogICAgICAgICBzZWxmLnNlY3VyZSA9IHNlY3VyZQogICAgICAgICBzZWxmLmNyZWRlbnRpYWxzID0gY3JlZGVudGlhbHMKKyAgICAgICAgc2VsZi5jb250ZXh0ID0gY29udGV4dAogCiAgICAgZGVmIG1hcExvZ1JlY29yZChzZWxmLCByZWNvcmQpOgogICAgICAgICAiIiIKQEAgLTExMTYsNyArMTEzMCw3IEBACiAgICAgICAgICAgICBpbXBvcnQgaHR0cC5jbGllbnQsIHVybGxpYi5wYXJzZQogICAgICAgICAgICAgaG9zdCA9IHNlbGYuaG9zdAogICAgICAgICAgICAgaWYgc2VsZi5zZWN1cmU6Ci0gICAgICAgICAgICAgICAgaCA9IGh0dHAuY2xpZW50LkhUVFBTQ29ubmVjdGlvbihob3N0KQorICAgICAgICAgICAgICAgIGggPSBodHRwLmNsaWVudC5IVFRQU0Nvbm5lY3Rpb24oaG9zdCwgY29udGV4dD1zZWxmLmNvbnRleHQpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIGggPSBodHRwLmNsaWVudC5IVFRQQ29ubmVjdGlvbihob3N0KQogICAgICAgICAgICAgdXJsID0gc2VsZi51cmwKQEAgLTExNDcsOSArMTE2MSw3IEBACiAgICAgICAgICAgICBpZiBzZWxmLm1ldGhvZCA9PSAiUE9TVCI6CiAgICAgICAgICAgICAgICAgaC5zZW5kKGRhdGEuZW5jb2RlKCd1dGYtOCcpKQogICAgICAgICAgICAgaC5nZXRyZXNwb25zZSgpICAgICNjYW4ndCBkbyBhbnl0aGluZyB3aXRoIHRoZSByZXN1bHQKLSAgICAgICAgZXhjZXB0IChLZXlib2FyZEludGVycnVwdCwgU3lzdGVtRXhpdCk6ICNwcmFnbWE6IG5vIGNvdmVyCi0gICAgICAgICAgICByYWlzZQotICAgICAgICBleGNlcHQ6CisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgICAgICBzZWxmLmhhbmRsZUVycm9yKHJlY29yZCkKIAogY2xhc3MgQnVmZmVyaW5nSGFuZGxlcihsb2dnaW5nLkhhbmRsZXIpOgpAQCAtMTIwNCw4ICsxMjE2LDEwIEBACiAKICAgICAgICAgVGhpcyB2ZXJzaW9uIGp1c3QgZmx1c2hlcyBhbmQgY2hhaW5zIHRvIHRoZSBwYXJlbnQgY2xhc3MnIGNsb3NlKCkuCiAgICAgICAgICIiIgotICAgICAgICBzZWxmLmZsdXNoKCkKLSAgICAgICAgbG9nZ2luZy5IYW5kbGVyLmNsb3NlKHNlbGYpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuZmx1c2goKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgbG9nZ2luZy5IYW5kbGVyLmNsb3NlKHNlbGYpCiAKIGNsYXNzIE1lbW9yeUhhbmRsZXIoQnVmZmVyaW5nSGFuZGxlcik6CiAgICAgIiIiCkBAIC0xMjU5LDEzICsxMjczLDE1IEBACiAgICAgICAgICIiIgogICAgICAgICBGbHVzaCwgc2V0IHRoZSB0YXJnZXQgdG8gTm9uZSBhbmQgbG9zZSB0aGUgYnVmZmVyLgogICAgICAgICAiIiIKLSAgICAgICAgc2VsZi5mbHVzaCgpCi0gICAgICAgIHNlbGYuYWNxdWlyZSgpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYudGFyZ2V0ID0gTm9uZQotICAgICAgICAgICAgQnVmZmVyaW5nSGFuZGxlci5jbG9zZShzZWxmKQorICAgICAgICAgICAgc2VsZi5mbHVzaCgpCiAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBzZWxmLnJlbGVhc2UoKQorICAgICAgICAgICAgc2VsZi5hY3F1aXJlKCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLnRhcmdldCA9IE5vbmUKKyAgICAgICAgICAgICAgICBCdWZmZXJpbmdIYW5kbGVyLmNsb3NlKHNlbGYpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHNlbGYucmVsZWFzZSgpCiAKIAogY2xhc3MgUXVldWVIYW5kbGVyKGxvZ2dpbmcuSGFuZGxlcik6CkBAIC0xMzI5LDkgKzEzNDUsNyBAQAogICAgICAgICAiIiIKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5lbnF1ZXVlKHNlbGYucHJlcGFyZShyZWNvcmQpKQotICAgICAgICBleGNlcHQgKEtleWJvYXJkSW50ZXJydXB0LCBTeXN0ZW1FeGl0KTogI3ByYWdtYTogbm8gY292ZXIKLSAgICAgICAgICAgIHJhaXNlCi0gICAgICAgIGV4Y2VwdDoKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKICAgICAgICAgICAgIHNlbGYuaGFuZGxlRXJyb3IocmVjb3JkKQogCiBpZiB0aHJlYWRpbmc6CmRpZmYgLS1naXQgYS9MaWIvbHptYS5weSBiL0xpYi9sem1hLnB5CmluZGV4IDFhODk4ODcuLmYxZDM5NTggMTAwNjQ0Ci0tLSBhL0xpYi9sem1hLnB5CisrKyBiL0xpYi9sem1hLnB5CkBAIC01NCw5ICs1NCw5IEBACiAgICAgICAgIGJ5dGVzIG9iamVjdCksIGluIHdoaWNoIGNhc2UgdGhlIG5hbWVkIGZpbGUgaXMgb3BlbmVkLCBvciBpdCBjYW4KICAgICAgICAgYmUgYW4gZXhpc3RpbmcgZmlsZSBvYmplY3QgdG8gcmVhZCBmcm9tIG9yIHdyaXRlIHRvLgogCi0gICAgICAgIG1vZGUgY2FuIGJlICJyIiBmb3IgcmVhZGluZyAoZGVmYXVsdCksICJ3IiBmb3IgKG92ZXIpd3JpdGluZywgb3IKLSAgICAgICAgImEiIGZvciBhcHBlbmRpbmcuIFRoZXNlIGNhbiBlcXVpdmFsZW50bHkgYmUgZ2l2ZW4gYXMgInJiIiwgIndiIiwKLSAgICAgICAgYW5kICJhYiIgcmVzcGVjdGl2ZWx5LgorICAgICAgICBtb2RlIGNhbiBiZSAiciIgZm9yIHJlYWRpbmcgKGRlZmF1bHQpLCAidyIgZm9yIChvdmVyKXdyaXRpbmcsCisgICAgICAgICJ4IiBmb3IgY3JlYXRpbmcgZXhjbHVzaXZlbHksIG9yICJhIiBmb3IgYXBwZW5kaW5nLiBUaGVzZSBjYW4KKyAgICAgICAgZXF1aXZhbGVudGx5IGJlIGdpdmVuIGFzICJyYiIsICJ3YiIsICJ4YiIgYW5kICJhYiIgcmVzcGVjdGl2ZWx5LgogCiAgICAgICAgIGZvcm1hdCBzcGVjaWZpZXMgdGhlIGNvbnRhaW5lciBmb3JtYXQgdG8gdXNlIGZvciB0aGUgZmlsZS4KICAgICAgICAgSWYgbW9kZSBpcyAiciIsIHRoaXMgZGVmYXVsdHMgdG8gRk9STUFUX0FVVE8uIE90aGVyd2lzZSwgdGhlCkBAIC0xMTAsOCArMTEwLDkgQEAKICAgICAgICAgICAgICMgc3RyZWFtIHdpbGwgbmVlZCBhIHNlcGFyYXRlIGRlY29tcHJlc3NvciBvYmplY3QuCiAgICAgICAgICAgICBzZWxmLl9pbml0X2FyZ3MgPSB7ImZvcm1hdCI6Zm9ybWF0LCAiZmlsdGVycyI6ZmlsdGVyc30KICAgICAgICAgICAgIHNlbGYuX2RlY29tcHJlc3NvciA9IExaTUFEZWNvbXByZXNzb3IoKipzZWxmLl9pbml0X2FyZ3MpCi0gICAgICAgICAgICBzZWxmLl9idWZmZXIgPSBOb25lCi0gICAgICAgIGVsaWYgbW9kZSBpbiAoInciLCAid2IiLCAiYSIsICJhYiIpOgorICAgICAgICAgICAgc2VsZi5fYnVmZmVyID0gYiIiCisgICAgICAgICAgICBzZWxmLl9idWZmZXJfb2Zmc2V0ID0gMAorICAgICAgICBlbGlmIG1vZGUgaW4gKCJ3IiwgIndiIiwgImEiLCAiYWIiLCAieCIsICJ4YiIpOgogICAgICAgICAgICAgaWYgZm9ybWF0IGlzIE5vbmU6CiAgICAgICAgICAgICAgICAgZm9ybWF0ID0gRk9STUFUX1haCiAgICAgICAgICAgICBtb2RlX2NvZGUgPSBfTU9ERV9XUklURQpAQCAtMTQzLDcgKzE0NCw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGlmIHNlbGYuX21vZGUgaW4gKF9NT0RFX1JFQUQsIF9NT0RFX1JFQURfRU9GKToKICAgICAgICAgICAgICAgICBzZWxmLl9kZWNvbXByZXNzb3IgPSBOb25lCi0gICAgICAgICAgICAgICAgc2VsZi5fYnVmZmVyID0gTm9uZQorICAgICAgICAgICAgICAgIHNlbGYuX2J1ZmZlciA9IGIiIgogICAgICAgICAgICAgZWxpZiBzZWxmLl9tb2RlID09IF9NT0RFX1dSSVRFOgogICAgICAgICAgICAgICAgIHNlbGYuX2ZwLndyaXRlKHNlbGYuX2NvbXByZXNzb3IuZmx1c2goKSkKICAgICAgICAgICAgICAgICBzZWxmLl9jb21wcmVzc29yID0gTm9uZQpAQCAtMTg3LDE1ICsxODgsMTggQEAKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkkvTyBvcGVyYXRpb24gb24gY2xvc2VkIGZpbGUiKQogCiAgICAgZGVmIF9jaGVja19jYW5fcmVhZChzZWxmKToKLSAgICAgICAgaWYgbm90IHNlbGYucmVhZGFibGUoKToKKyAgICAgICAgaWYgc2VsZi5fbW9kZSBub3QgaW4gKF9NT0RFX1JFQUQsIF9NT0RFX1JFQURfRU9GKToKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX25vdF9jbG9zZWQoKQogICAgICAgICAgICAgcmFpc2UgaW8uVW5zdXBwb3J0ZWRPcGVyYXRpb24oIkZpbGUgbm90IG9wZW4gZm9yIHJlYWRpbmciKQogCiAgICAgZGVmIF9jaGVja19jYW5fd3JpdGUoc2VsZik6Ci0gICAgICAgIGlmIG5vdCBzZWxmLndyaXRhYmxlKCk6CisgICAgICAgIGlmIHNlbGYuX21vZGUgIT0gX01PREVfV1JJVEU6CisgICAgICAgICAgICBzZWxmLl9jaGVja19ub3RfY2xvc2VkKCkKICAgICAgICAgICAgIHJhaXNlIGlvLlVuc3VwcG9ydGVkT3BlcmF0aW9uKCJGaWxlIG5vdCBvcGVuIGZvciB3cml0aW5nIikKIAogICAgIGRlZiBfY2hlY2tfY2FuX3NlZWsoc2VsZik6Ci0gICAgICAgIGlmIG5vdCBzZWxmLnJlYWRhYmxlKCk6CisgICAgICAgIGlmIHNlbGYuX21vZGUgbm90IGluIChfTU9ERV9SRUFELCBfTU9ERV9SRUFEX0VPRik6CisgICAgICAgICAgICBzZWxmLl9jaGVja19ub3RfY2xvc2VkKCkKICAgICAgICAgICAgIHJhaXNlIGlvLlVuc3VwcG9ydGVkT3BlcmF0aW9uKCJTZWVraW5nIGlzIG9ubHkgc3VwcG9ydGVkICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvbiBmaWxlcyBvcGVuIGZvciByZWFkaW5nIikKICAgICAgICAgaWYgbm90IHNlbGYuX2ZwLnNlZWthYmxlKCk6CkBAIC0yMDQsMTYgKzIwOCwxMyBAQAogCiAgICAgIyBGaWxsIHRoZSByZWFkYWhlYWQgYnVmZmVyIGlmIGl0IGlzIGVtcHR5LiBSZXR1cm5zIEZhbHNlIG9uIEVPRi4KICAgICBkZWYgX2ZpbGxfYnVmZmVyKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9tb2RlID09IF9NT0RFX1JFQURfRU9GOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgICMgRGVwZW5kaW5nIG9uIHRoZSBpbnB1dCBkYXRhLCBvdXIgY2FsbCB0byB0aGUgZGVjb21wcmVzc29yIG1heSBub3QKICAgICAgICAgIyByZXR1cm4gYW55IGRhdGEuIEluIHRoaXMgY2FzZSwgdHJ5IGFnYWluIGFmdGVyIHJlYWRpbmcgYW5vdGhlciBibG9jay4KLSAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgIGlmIHNlbGYuX2J1ZmZlcjoKLSAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQotCi0gICAgICAgICAgICBpZiBzZWxmLl9kZWNvbXByZXNzb3IudW51c2VkX2RhdGE6Ci0gICAgICAgICAgICAgICAgcmF3YmxvY2sgPSBzZWxmLl9kZWNvbXByZXNzb3IudW51c2VkX2RhdGEKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmF3YmxvY2sgPSBzZWxmLl9mcC5yZWFkKF9CVUZGRVJfU0laRSkKKyAgICAgICAgd2hpbGUgc2VsZi5fYnVmZmVyX29mZnNldCA9PSBsZW4oc2VsZi5fYnVmZmVyKToKKyAgICAgICAgICAgIHJhd2Jsb2NrID0gKHNlbGYuX2RlY29tcHJlc3Nvci51bnVzZWRfZGF0YSBvcgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZnAucmVhZChfQlVGRkVSX1NJWkUpKQogCiAgICAgICAgICAgICBpZiBub3QgcmF3YmxvY2s6CiAgICAgICAgICAgICAgICAgaWYgc2VsZi5fZGVjb21wcmVzc29yLmVvZjoKQEAgLTIzNiwzMCArMjM3LDQ4IEBACiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBzZWxmLl9idWZmZXIgPSBzZWxmLl9kZWNvbXByZXNzb3IuZGVjb21wcmVzcyhyYXdibG9jaykKKyAgICAgICAgICAgIHNlbGYuX2J1ZmZlcl9vZmZzZXQgPSAwCisgICAgICAgIHJldHVybiBUcnVlCiAKICAgICAjIFJlYWQgZGF0YSB1bnRpbCBFT0YuCiAgICAgIyBJZiByZXR1cm5fZGF0YSBpcyBmYWxzZSwgY29uc3VtZSB0aGUgZGF0YSB3aXRob3V0IHJldHVybmluZyBpdC4KICAgICBkZWYgX3JlYWRfYWxsKHNlbGYsIHJldHVybl9kYXRhPVRydWUpOgorICAgICAgICAjIFRoZSBsb29wIGFzc3VtZXMgdGhhdCBfYnVmZmVyX29mZnNldCBpcyAwLiBFbnN1cmUgdGhhdCB0aGlzIGlzIHRydWUuCisgICAgICAgIHNlbGYuX2J1ZmZlciA9IHNlbGYuX2J1ZmZlcltzZWxmLl9idWZmZXJfb2Zmc2V0Ol0KKyAgICAgICAgc2VsZi5fYnVmZmVyX29mZnNldCA9IDAKKwogICAgICAgICBibG9ja3MgPSBbXQogICAgICAgICB3aGlsZSBzZWxmLl9maWxsX2J1ZmZlcigpOgogICAgICAgICAgICAgaWYgcmV0dXJuX2RhdGE6CiAgICAgICAgICAgICAgICAgYmxvY2tzLmFwcGVuZChzZWxmLl9idWZmZXIpCiAgICAgICAgICAgICBzZWxmLl9wb3MgKz0gbGVuKHNlbGYuX2J1ZmZlcikKLSAgICAgICAgICAgIHNlbGYuX2J1ZmZlciA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYuX2J1ZmZlciA9IGIiIgogICAgICAgICBpZiByZXR1cm5fZGF0YToKICAgICAgICAgICAgIHJldHVybiBiIiIuam9pbihibG9ja3MpCiAKICAgICAjIFJlYWQgYSBibG9jayBvZiB1cCB0byBuIGJ5dGVzLgogICAgICMgSWYgcmV0dXJuX2RhdGEgaXMgZmFsc2UsIGNvbnN1bWUgdGhlIGRhdGEgd2l0aG91dCByZXR1cm5pbmcgaXQuCiAgICAgZGVmIF9yZWFkX2Jsb2NrKHNlbGYsIG4sIHJldHVybl9kYXRhPVRydWUpOgorICAgICAgICAjIElmIHdlIGhhdmUgZW5vdWdoIGRhdGEgYnVmZmVyZWQsIHJldHVybiBpbW1lZGlhdGVseS4KKyAgICAgICAgZW5kID0gc2VsZi5fYnVmZmVyX29mZnNldCArIG4KKyAgICAgICAgaWYgZW5kIDw9IGxlbihzZWxmLl9idWZmZXIpOgorICAgICAgICAgICAgZGF0YSA9IHNlbGYuX2J1ZmZlcltzZWxmLl9idWZmZXJfb2Zmc2V0IDogZW5kXQorICAgICAgICAgICAgc2VsZi5fYnVmZmVyX29mZnNldCA9IGVuZAorICAgICAgICAgICAgc2VsZi5fcG9zICs9IGxlbihkYXRhKQorICAgICAgICAgICAgcmV0dXJuIGRhdGEgaWYgcmV0dXJuX2RhdGEgZWxzZSBOb25lCisKKyAgICAgICAgIyBUaGUgbG9vcCBhc3N1bWVzIHRoYXQgX2J1ZmZlcl9vZmZzZXQgaXMgMC4gRW5zdXJlIHRoYXQgdGhpcyBpcyB0cnVlLgorICAgICAgICBzZWxmLl9idWZmZXIgPSBzZWxmLl9idWZmZXJbc2VsZi5fYnVmZmVyX29mZnNldDpdCisgICAgICAgIHNlbGYuX2J1ZmZlcl9vZmZzZXQgPSAwCisKICAgICAgICAgYmxvY2tzID0gW10KICAgICAgICAgd2hpbGUgbiA+IDAgYW5kIHNlbGYuX2ZpbGxfYnVmZmVyKCk6CiAgICAgICAgICAgICBpZiBuIDwgbGVuKHNlbGYuX2J1ZmZlcik6CiAgICAgICAgICAgICAgICAgZGF0YSA9IHNlbGYuX2J1ZmZlcls6bl0KLSAgICAgICAgICAgICAgICBzZWxmLl9idWZmZXIgPSBzZWxmLl9idWZmZXJbbjpdCisgICAgICAgICAgICAgICAgc2VsZi5fYnVmZmVyX29mZnNldCA9IG4KICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgZGF0YSA9IHNlbGYuX2J1ZmZlcgotICAgICAgICAgICAgICAgIHNlbGYuX2J1ZmZlciA9IE5vbmUKKyAgICAgICAgICAgICAgICBzZWxmLl9idWZmZXIgPSBiIiIKICAgICAgICAgICAgIGlmIHJldHVybl9kYXRhOgogICAgICAgICAgICAgICAgIGJsb2Nrcy5hcHBlbmQoZGF0YSkKICAgICAgICAgICAgIHNlbGYuX3BvcyArPSBsZW4oZGF0YSkKQEAgLTI3NCw5ICsyOTMsOSBAQAogICAgICAgICBUaGUgZXhhY3QgbnVtYmVyIG9mIGJ5dGVzIHJldHVybmVkIGlzIHVuc3BlY2lmaWVkLgogICAgICAgICAiIiIKICAgICAgICAgc2VsZi5fY2hlY2tfY2FuX3JlYWQoKQotICAgICAgICBpZiBzZWxmLl9tb2RlID09IF9NT0RFX1JFQURfRU9GIG9yIG5vdCBzZWxmLl9maWxsX2J1ZmZlcigpOgorICAgICAgICBpZiBub3Qgc2VsZi5fZmlsbF9idWZmZXIoKToKICAgICAgICAgICAgIHJldHVybiBiIiIKLSAgICAgICAgcmV0dXJuIHNlbGYuX2J1ZmZlcgorICAgICAgICByZXR1cm4gc2VsZi5fYnVmZmVyW3NlbGYuX2J1ZmZlcl9vZmZzZXQ6XQogCiAgICAgZGVmIHJlYWQoc2VsZiwgc2l6ZT0tMSk6CiAgICAgICAgICIiIlJlYWQgdXAgdG8gc2l6ZSB1bmNvbXByZXNzZWQgYnl0ZXMgZnJvbSB0aGUgZmlsZS4KQEAgLTI4NSw3ICszMDQsNyBAQAogICAgICAgICBSZXR1cm5zIGIiIiBpZiB0aGUgZmlsZSBpcyBhbHJlYWR5IGF0IEVPRi4KICAgICAgICAgIiIiCiAgICAgICAgIHNlbGYuX2NoZWNrX2Nhbl9yZWFkKCkKLSAgICAgICAgaWYgc2VsZi5fbW9kZSA9PSBfTU9ERV9SRUFEX0VPRiBvciBzaXplID09IDA6CisgICAgICAgIGlmIHNpemUgPT0gMDoKICAgICAgICAgICAgIHJldHVybiBiIiIKICAgICAgICAgZWxpZiBzaXplIDwgMDoKICAgICAgICAgICAgIHJldHVybiBzZWxmLl9yZWFkX2FsbCgpCkBAIC0zMDIsMTggKzMyMSw0MCBAQAogICAgICAgICAjIHRoaXMgZG9lcyBub3QgZ2l2ZSBlbm91Z2ggZGF0YSBmb3IgdGhlIGRlY29tcHJlc3NvciB0byBtYWtlIHByb2dyZXNzLgogICAgICAgICAjIEluIHRoaXMgY2FzZSB3ZSBtYWtlIG11bHRpcGxlIHJlYWRzLCB0byBhdm9pZCByZXR1cm5pbmcgYiIiLgogICAgICAgICBzZWxmLl9jaGVja19jYW5fcmVhZCgpCi0gICAgICAgIGlmIChzaXplID09IDAgb3Igc2VsZi5fbW9kZSA9PSBfTU9ERV9SRUFEX0VPRiBvcgotICAgICAgICAgICAgbm90IHNlbGYuX2ZpbGxfYnVmZmVyKCkpOgorICAgICAgICBpZiAoc2l6ZSA9PSAwIG9yCisgICAgICAgICAgICAjIE9ubHkgY2FsbCBfZmlsbF9idWZmZXIoKSBpZiB0aGUgYnVmZmVyIGlzIGFjdHVhbGx5IGVtcHR5LgorICAgICAgICAgICAgIyBUaGlzIGdpdmVzIGEgc2lnbmlmaWNhbnQgc3BlZWR1cCBpZiAqc2l6ZSogaXMgc21hbGwuCisgICAgICAgICAgICAoc2VsZi5fYnVmZmVyX29mZnNldCA9PSBsZW4oc2VsZi5fYnVmZmVyKSBhbmQgbm90IHNlbGYuX2ZpbGxfYnVmZmVyKCkpKToKICAgICAgICAgICAgIHJldHVybiBiIiIKLSAgICAgICAgaWYgMCA8IHNpemUgPCBsZW4oc2VsZi5fYnVmZmVyKToKLSAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9idWZmZXJbOnNpemVdCi0gICAgICAgICAgICBzZWxmLl9idWZmZXIgPSBzZWxmLl9idWZmZXJbc2l6ZTpdCisgICAgICAgIGlmIHNpemUgPiAwOgorICAgICAgICAgICAgZGF0YSA9IHNlbGYuX2J1ZmZlcltzZWxmLl9idWZmZXJfb2Zmc2V0IDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fYnVmZmVyX29mZnNldCArIHNpemVdCisgICAgICAgICAgICBzZWxmLl9idWZmZXJfb2Zmc2V0ICs9IGxlbihkYXRhKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgZGF0YSA9IHNlbGYuX2J1ZmZlcgotICAgICAgICAgICAgc2VsZi5fYnVmZmVyID0gTm9uZQorICAgICAgICAgICAgZGF0YSA9IHNlbGYuX2J1ZmZlcltzZWxmLl9idWZmZXJfb2Zmc2V0Ol0KKyAgICAgICAgICAgIHNlbGYuX2J1ZmZlciA9IGIiIgorICAgICAgICAgICAgc2VsZi5fYnVmZmVyX29mZnNldCA9IDAKICAgICAgICAgc2VsZi5fcG9zICs9IGxlbihkYXRhKQogICAgICAgICByZXR1cm4gZGF0YQogCisgICAgZGVmIHJlYWRsaW5lKHNlbGYsIHNpemU9LTEpOgorICAgICAgICAiIiJSZWFkIGEgbGluZSBvZiB1bmNvbXByZXNzZWQgYnl0ZXMgZnJvbSB0aGUgZmlsZS4KKworICAgICAgICBUaGUgdGVybWluYXRpbmcgbmV3bGluZSAoaWYgcHJlc2VudCkgaXMgcmV0YWluZWQuIElmIHNpemUgaXMKKyAgICAgICAgbm9uLW5lZ2F0aXZlLCBubyBtb3JlIHRoYW4gc2l6ZSBieXRlcyB3aWxsIGJlIHJlYWQgKGluIHdoaWNoCisgICAgICAgIGNhc2UgdGhlIGxpbmUgbWF5IGJlIGluY29tcGxldGUpLiBSZXR1cm5zIGInJyBpZiBhbHJlYWR5IGF0IEVPRi4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX2NoZWNrX2Nhbl9yZWFkKCkKKyAgICAgICAgIyBTaG9ydGN1dCBmb3IgdGhlIGNvbW1vbiBjYXNlIC0gdGhlIHdob2xlIGxpbmUgaXMgaW4gdGhlIGJ1ZmZlci4KKyAgICAgICAgaWYgc2l6ZSA8IDA6CisgICAgICAgICAgICBlbmQgPSBzZWxmLl9idWZmZXIuZmluZChiIlxuIiwgc2VsZi5fYnVmZmVyX29mZnNldCkgKyAxCisgICAgICAgICAgICBpZiBlbmQgPiAwOgorICAgICAgICAgICAgICAgIGxpbmUgPSBzZWxmLl9idWZmZXJbc2VsZi5fYnVmZmVyX29mZnNldCA6IGVuZF0KKyAgICAgICAgICAgICAgICBzZWxmLl9idWZmZXJfb2Zmc2V0ID0gZW5kCisgICAgICAgICAgICAgICAgc2VsZi5fcG9zICs9IGxlbihsaW5lKQorICAgICAgICAgICAgICAgIHJldHVybiBsaW5lCisgICAgICAgIHJldHVybiBpby5CdWZmZXJlZElPQmFzZS5yZWFkbGluZShzZWxmLCBzaXplKQorCiAgICAgZGVmIHdyaXRlKHNlbGYsIGRhdGEpOgogICAgICAgICAiIiJXcml0ZSBhIGJ5dGVzIG9iamVjdCB0byB0aGUgZmlsZS4KIApAQCAtMzMzLDcgKzM3NCw4IEBACiAgICAgICAgIHNlbGYuX21vZGUgPSBfTU9ERV9SRUFECiAgICAgICAgIHNlbGYuX3BvcyA9IDAKICAgICAgICAgc2VsZi5fZGVjb21wcmVzc29yID0gTFpNQURlY29tcHJlc3NvcigqKnNlbGYuX2luaXRfYXJncykKLSAgICAgICAgc2VsZi5fYnVmZmVyID0gTm9uZQorICAgICAgICBzZWxmLl9idWZmZXIgPSBiIiIKKyAgICAgICAgc2VsZi5fYnVmZmVyX29mZnNldCA9IDAKIAogICAgIGRlZiBzZWVrKHNlbGYsIG9mZnNldCwgd2hlbmNlPTApOgogICAgICAgICAiIiJDaGFuZ2UgdGhlIGZpbGUgcG9zaXRpb24uCkBAIC0zNzIsOCArNDE0LDcgQEAKICAgICAgICAgICAgIG9mZnNldCAtPSBzZWxmLl9wb3MKIAogICAgICAgICAjIFJlYWQgYW5kIGRpc2NhcmQgZGF0YSB1bnRpbCB3ZSByZWFjaCB0aGUgZGVzaXJlZCBwb3NpdGlvbi4KLSAgICAgICAgaWYgc2VsZi5fbW9kZSAhPSBfTU9ERV9SRUFEX0VPRjoKLSAgICAgICAgICAgIHNlbGYuX3JlYWRfYmxvY2sob2Zmc2V0LCByZXR1cm5fZGF0YT1GYWxzZSkKKyAgICAgICAgc2VsZi5fcmVhZF9ibG9jayhvZmZzZXQsIHJldHVybl9kYXRhPUZhbHNlKQogCiAgICAgICAgIHJldHVybiBzZWxmLl9wb3MKIApAQCAtMzg4LDIzICs0MjksMjUgQEAKICAgICAgICAgIGVuY29kaW5nPU5vbmUsIGVycm9ycz1Ob25lLCBuZXdsaW5lPU5vbmUpOgogICAgICIiIk9wZW4gYW4gTFpNQS1jb21wcmVzc2VkIGZpbGUgaW4gYmluYXJ5IG9yIHRleHQgbW9kZS4KIAotICAgIGZpbGVuYW1lIGNhbiBiZSBlaXRoZXIgYW4gYWN0dWFsIGZpbGUgbmFtZSAoZ2l2ZW4gYXMgYSBzdHIgb3IgYnl0ZXMgb2JqZWN0KSwKLSAgICBpbiB3aGljaCBjYXNlIHRoZSBuYW1lZCBmaWxlIGlzIG9wZW5lZCwgb3IgaXQgY2FuIGJlIGFuIGV4aXN0aW5nIGZpbGUgb2JqZWN0Ci0gICAgdG8gcmVhZCBmcm9tIG9yIHdyaXRlIHRvLgorICAgIGZpbGVuYW1lIGNhbiBiZSBlaXRoZXIgYW4gYWN0dWFsIGZpbGUgbmFtZSAoZ2l2ZW4gYXMgYSBzdHIgb3IgYnl0ZXMKKyAgICBvYmplY3QpLCBpbiB3aGljaCBjYXNlIHRoZSBuYW1lZCBmaWxlIGlzIG9wZW5lZCwgb3IgaXQgY2FuIGJlIGFuCisgICAgZXhpc3RpbmcgZmlsZSBvYmplY3QgdG8gcmVhZCBmcm9tIG9yIHdyaXRlIHRvLgogCi0gICAgVGhlIG1vZGUgYXJndW1lbnQgY2FuIGJlICJyIiwgInJiIiAoZGVmYXVsdCksICJ3IiwgIndiIiwgImEiLCBvciAiYWIiIGZvcgotICAgIGJpbmFyeSBtb2RlLCBvciAicnQiLCAid3QiIG9yICJhdCIgZm9yIHRleHQgbW9kZS4KKyAgICBUaGUgbW9kZSBhcmd1bWVudCBjYW4gYmUgInIiLCAicmIiIChkZWZhdWx0KSwgInciLCAid2IiLCAieCIsICJ4YiIsCisgICAgImEiLCBvciAiYWIiIGZvciBiaW5hcnkgbW9kZSwgb3IgInJ0IiwgInd0IiwgInh0Iiwgb3IgImF0IiBmb3IgdGV4dAorICAgIG1vZGUuCiAKLSAgICBUaGUgZm9ybWF0LCBjaGVjaywgcHJlc2V0IGFuZCBmaWx0ZXJzIGFyZ3VtZW50cyBzcGVjaWZ5IHRoZSBjb21wcmVzc2lvbgotICAgIHNldHRpbmdzLCBhcyBmb3IgTFpNQUNvbXByZXNzb3IsIExaTUFEZWNvbXByZXNzb3IgYW5kIExaTUFGaWxlLgorICAgIFRoZSBmb3JtYXQsIGNoZWNrLCBwcmVzZXQgYW5kIGZpbHRlcnMgYXJndW1lbnRzIHNwZWNpZnkgdGhlCisgICAgY29tcHJlc3Npb24gc2V0dGluZ3MsIGFzIGZvciBMWk1BQ29tcHJlc3NvciwgTFpNQURlY29tcHJlc3NvciBhbmQKKyAgICBMWk1BRmlsZS4KIAotICAgIEZvciBiaW5hcnkgbW9kZSwgdGhpcyBmdW5jdGlvbiBpcyBlcXVpdmFsZW50IHRvIHRoZSBMWk1BRmlsZSBjb25zdHJ1Y3RvcjoKLSAgICBMWk1BRmlsZShmaWxlbmFtZSwgbW9kZSwgLi4uKS4gSW4gdGhpcyBjYXNlLCB0aGUgZW5jb2RpbmcsIGVycm9ycyBhbmQKLSAgICBuZXdsaW5lIGFyZ3VtZW50cyBtdXN0IG5vdCBiZSBwcm92aWRlZC4KKyAgICBGb3IgYmluYXJ5IG1vZGUsIHRoaXMgZnVuY3Rpb24gaXMgZXF1aXZhbGVudCB0byB0aGUgTFpNQUZpbGUKKyAgICBjb25zdHJ1Y3RvcjogTFpNQUZpbGUoZmlsZW5hbWUsIG1vZGUsIC4uLikuIEluIHRoaXMgY2FzZSwgdGhlCisgICAgZW5jb2RpbmcsIGVycm9ycyBhbmQgbmV3bGluZSBhcmd1bWVudHMgbXVzdCBub3QgYmUgcHJvdmlkZWQuCiAKICAgICBGb3IgdGV4dCBtb2RlLCBhIExaTUFGaWxlIG9iamVjdCBpcyBjcmVhdGVkLCBhbmQgd3JhcHBlZCBpbiBhbgotICAgIGlvLlRleHRJT1dyYXBwZXIgaW5zdGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIGVuY29kaW5nLCBlcnJvciBoYW5kbGluZwotICAgIGJlaGF2aW9yLCBhbmQgbGluZSBlbmRpbmcocykuCisgICAgaW8uVGV4dElPV3JhcHBlciBpbnN0YW5jZSB3aXRoIHRoZSBzcGVjaWZpZWQgZW5jb2RpbmcsIGVycm9yCisgICAgaGFuZGxpbmcgYmVoYXZpb3IsIGFuZCBsaW5lIGVuZGluZyhzKS4KIAogICAgICIiIgogICAgIGlmICJ0IiBpbiBtb2RlOgpAQCAtNDM0LDcgKzQ3Nyw3IEBACiAgICAgUmVmZXIgdG8gTFpNQUNvbXByZXNzb3IncyBkb2NzdHJpbmcgZm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlCiAgICAgb3B0aW9uYWwgYXJndW1lbnRzICpmb3JtYXQqLCAqY2hlY2sqLCAqcHJlc2V0KiBhbmQgKmZpbHRlcnMqLgogCi0gICAgRm9yIGluY3JlbWVudGFsIGNvbXByZXNzaW9uLCB1c2UgYW4gTFpNQUNvbXByZXNzb3Igb2JqZWN0IGluc3RlYWQuCisgICAgRm9yIGluY3JlbWVudGFsIGNvbXByZXNzaW9uLCB1c2UgYW4gTFpNQUNvbXByZXNzb3IgaW5zdGVhZC4KICAgICAiIiIKICAgICBjb21wID0gTFpNQUNvbXByZXNzb3IoZm9ybWF0LCBjaGVjaywgcHJlc2V0LCBmaWx0ZXJzKQogICAgIHJldHVybiBjb21wLmNvbXByZXNzKGRhdGEpICsgY29tcC5mbHVzaCgpCkBAIC00NDYsNyArNDg5LDcgQEAKICAgICBSZWZlciB0byBMWk1BRGVjb21wcmVzc29yJ3MgZG9jc3RyaW5nIGZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZQogICAgIG9wdGlvbmFsIGFyZ3VtZW50cyAqZm9ybWF0KiwgKmNoZWNrKiBhbmQgKmZpbHRlcnMqLgogCi0gICAgRm9yIGluY3JlbWVudGFsIGRlY29tcHJlc3Npb24sIHVzZSBhIExaTUFEZWNvbXByZXNzb3Igb2JqZWN0IGluc3RlYWQuCisgICAgRm9yIGluY3JlbWVudGFsIGRlY29tcHJlc3Npb24sIHVzZSBhbiBMWk1BRGVjb21wcmVzc29yIGluc3RlYWQuCiAgICAgIiIiCiAgICAgcmVzdWx0cyA9IFtdCiAgICAgd2hpbGUgVHJ1ZToKZGlmZiAtLWdpdCBhL0xpYi9tYWNwYXRoLnB5IGIvTGliL21hY3BhdGgucHkKaW5kZXggMTYxNWQ5MS4uNWNhMDA5NyAxMDA2NDQKLS0tIGEvTGliL21hY3BhdGgucHkKKysrIGIvTGliL21hY3BhdGgucHkKQEAgLTUzLDcgKzUzLDcgQEAKICAgICBjb2xvbiA9IF9nZXRfY29sb24ocykKICAgICBwYXRoID0gcwogICAgIGZvciB0IGluIHA6Ci0gICAgICAgIGlmIChub3Qgcykgb3IgaXNhYnModCk6CisgICAgICAgIGlmIChub3QgcGF0aCkgb3IgaXNhYnModCk6CiAgICAgICAgICAgICBwYXRoID0gdAogICAgICAgICAgICAgY29udGludWUKICAgICAgICAgaWYgdFs6MV0gPT0gY29sb246CkBAIC0xMjcsNyArMTI3LDcgQEAKIAogICAgIHRyeToKICAgICAgICAgc3QgPSBvcy5sc3RhdChwYXRoKQotICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgcmV0dXJuIFRydWUKIApkaWZmIC0tZ2l0IGEvTGliL21haWxib3gucHkgYi9MaWIvbWFpbGJveC5weQppbmRleCAzYjY0YzJlLi40ZTQyYWQyIDEwMDY0NAotLS0gYS9MaWIvbWFpbGJveC5weQorKysgYi9MaWIvbWFpbGJveC5weQpAQCAtNiw3ICs2LDYgQEAKICMgb3IgcmV0dXJuaW5nIGZyb20gYSBmbHVzaCgpIG1ldGhvZC4gIFNlZSBmdW5jdGlvbnMgX3N5bmNfZmx1c2goKSBhbmQKICMgX3N5bmNfY2xvc2UoKS4KIAotaW1wb3J0IHN5cwogaW1wb3J0IG9zCiBpbXBvcnQgdGltZQogaW1wb3J0IGNhbGVuZGFyCkBAIC0yMCw5ICsxOSw2IEBACiBpbXBvcnQgaW8KIGltcG9ydCBjb250ZXh0bGliCiB0cnk6Ci0gICAgaWYgc3lzLnBsYXRmb3JtID09ICdvczJlbXgnOgotICAgICAgICAjIE9TLzIgRU1YIGZjbnRsKCkgbm90IGFkZXF1YXRlCi0gICAgICAgIHJhaXNlIEltcG9ydEVycm9yCiAgICAgaW1wb3J0IGZjbnRsCiBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgZmNudGwgPSBOb25lCkBAIC0xMDcsNyArMTAzLDcgQEAKIAogICAgIGRlZiBpdGVydmFsdWVzKHNlbGYpOgogICAgICAgICAiIiJSZXR1cm4gYW4gaXRlcmF0b3Igb3ZlciBhbGwgbWVzc2FnZXMuIiIiCi0gICAgICAgIGZvciBrZXkgaW4gc2VsZi5rZXlzKCk6CisgICAgICAgIGZvciBrZXkgaW4gc2VsZi5pdGVya2V5cygpOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHZhbHVlID0gc2VsZltrZXldCiAgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CkBAIC0xMjMsNyArMTE5LDcgQEAKIAogICAgIGRlZiBpdGVyaXRlbXMoc2VsZik6CiAgICAgICAgICIiIlJldHVybiBhbiBpdGVyYXRvciBvdmVyIChrZXksIG1lc3NhZ2UpIHR1cGxlcy4iIiIKLSAgICAgICAgZm9yIGtleSBpbiBzZWxmLmtleXMoKToKKyAgICAgICAgZm9yIGtleSBpbiBzZWxmLml0ZXJrZXlzKCk6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgdmFsdWUgPSBzZWxmW2tleV0KICAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKQEAgLTE1OCw3ICsxNTQsNyBAQAogCiAgICAgZGVmIHBvcGl0ZW0oc2VsZik6CiAgICAgICAgICIiIkRlbGV0ZSBhbiBhcmJpdHJhcnkgKGtleSwgbWVzc2FnZSkgcGFpciBhbmQgcmV0dXJuIGl0LiIiIgotICAgICAgICBmb3Iga2V5IGluIHNlbGYua2V5cygpOgorICAgICAgICBmb3Iga2V5IGluIHNlbGYuaXRlcmtleXMoKToKICAgICAgICAgICAgIHJldHVybiAoa2V5LCBzZWxmLnBvcChrZXkpKSAgICAgIyBUaGlzIGlzIG9ubHkgcnVuIG9uY2UuCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICByYWlzZSBLZXlFcnJvcignTm8gbWVzc2FnZXMgaW4gbWFpbGJveCcpCkBAIC0xNjYsNyArMTYyLDcgQEAKICAgICBkZWYgdXBkYXRlKHNlbGYsIGFyZz1Ob25lKToKICAgICAgICAgIiIiQ2hhbmdlIHRoZSBtZXNzYWdlcyB0aGF0IGNvcnJlc3BvbmQgdG8gY2VydGFpbiBrZXlzLiIiIgogICAgICAgICBpZiBoYXNhdHRyKGFyZywgJ2l0ZXJpdGVtcycpOgotICAgICAgICAgICAgc291cmNlID0gYXJnLml0ZW1zKCkKKyAgICAgICAgICAgIHNvdXJjZSA9IGFyZy5pdGVyaXRlbXMoKQogICAgICAgICBlbGlmIGhhc2F0dHIoYXJnLCAnaXRlbXMnKToKICAgICAgICAgICAgIHNvdXJjZSA9IGFyZy5pdGVtcygpCiAgICAgICAgIGVsc2U6CkBAIC0zMzksMTEgKzMzNSw4IEBACiAgICAgICAgICMgVGhpcyBvdmVycmlkZXMgYW4gaW5hcHBsaWNhYmxlIGltcGxlbWVudGF0aW9uIGluIHRoZSBzdXBlcmNsYXNzLgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLnJlbW92ZShrZXkpCi0gICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgZXhjZXB0IChLZXlFcnJvciwgRmlsZU5vdEZvdW5kRXJyb3IpOgogICAgICAgICAgICAgcGFzcwotICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgotICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FTk9FTlQ6Ci0gICAgICAgICAgICAgICAgcmFpc2UKIAogICAgIGRlZiBfX3NldGl0ZW1fXyhzZWxmLCBrZXksIG1lc3NhZ2UpOgogICAgICAgICAiIiJSZXBsYWNlIHRoZSBrZXllZCBtZXNzYWdlOyByYWlzZSBLZXlFcnJvciBpZiBpdCBkb2Vzbid0IGV4aXN0LiIiIgpAQCAtMzc1LDE0ICszNjgsMTEgQEAKICAgICBkZWYgZ2V0X21lc3NhZ2Uoc2VsZiwga2V5KToKICAgICAgICAgIiIiUmV0dXJuIGEgTWVzc2FnZSByZXByZXNlbnRhdGlvbiBvciByYWlzZSBhIEtleUVycm9yLiIiIgogICAgICAgICBzdWJwYXRoID0gc2VsZi5fbG9va3VwKGtleSkKLSAgICAgICAgZiA9IG9wZW4ob3MucGF0aC5qb2luKHNlbGYuX3BhdGgsIHN1YnBhdGgpLCAncmInKQotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oc2VsZi5fcGF0aCwgc3VicGF0aCksICdyYicpIGFzIGY6CiAgICAgICAgICAgICBpZiBzZWxmLl9mYWN0b3J5OgogICAgICAgICAgICAgICAgIG1zZyA9IHNlbGYuX2ZhY3RvcnkoZikKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgbXNnID0gTWFpbGRpck1lc3NhZ2UoZikKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGYuY2xvc2UoKQogICAgICAgICBzdWJkaXIsIG5hbWUgPSBvcy5wYXRoLnNwbGl0KHN1YnBhdGgpCiAgICAgICAgIG1zZy5zZXRfc3ViZGlyKHN1YmRpcikKICAgICAgICAgaWYgc2VsZi5jb2xvbiBpbiBuYW1lOgpAQCAtMzkyLDExICszODIsOCBAQAogCiAgICAgZGVmIGdldF9ieXRlcyhzZWxmLCBrZXkpOgogICAgICAgICAiIiJSZXR1cm4gYSBieXRlcyByZXByZXNlbnRhdGlvbiBvciByYWlzZSBhIEtleUVycm9yLiIiIgotICAgICAgICBmID0gb3Blbihvcy5wYXRoLmpvaW4oc2VsZi5fcGF0aCwgc2VsZi5fbG9va3VwKGtleSkpLCAncmInKQotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oc2VsZi5fcGF0aCwgc2VsZi5fbG9va3VwKGtleSkpLCAncmInKSBhcyBmOgogICAgICAgICAgICAgcmV0dXJuIGYucmVhZCgpLnJlcGxhY2UobGluZXNlcCwgYidcbicpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBmLmNsb3NlKCkKIAogICAgIGRlZiBnZXRfZmlsZShzZWxmLCBrZXkpOgogICAgICAgICAiIiJSZXR1cm4gYSBmaWxlLWxpa2UgcmVwcmVzZW50YXRpb24gb3IgcmFpc2UgYSBLZXlFcnJvci4iIiIKQEAgLTUwOCwxNiArNDk1LDEyIEBACiAgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5fcGF0aCwgJ3RtcCcsIHVuaXEpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG9zLnN0YXQocGF0aCkKLSAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKLSAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gZXJybm8uRU5PRU5UOgotICAgICAgICAgICAgICAgIE1haWxkaXIuX2NvdW50ICs9IDEKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBfY3JlYXRlX2NhcmVmdWxseShwYXRoKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6Ci0gICAgICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRUVYSVNUOgotICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgZXhjZXB0IEZpbGVOb3RGb3VuZEVycm9yOgorICAgICAgICAgICAgTWFpbGRpci5fY291bnQgKz0gMQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJldHVybiBfY3JlYXRlX2NhcmVmdWxseShwYXRoKQorICAgICAgICAgICAgZXhjZXB0IEZpbGVFeGlzdHNFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCiAKICAgICAgICAgIyBGYWxsIHRocm91Z2ggdG8gaGVyZSBpZiBzdGF0IHN1Y2NlZWRlZCBvciBvcGVuIHJhaXNlZCBFRVhJU1QuCiAgICAgICAgIHJhaXNlIEV4dGVybmFsQ2xhc2hFcnJvcignTmFtZSBjbGFzaCBwcmV2ZW50ZWQgZmlsZSBjcmVhdGlvbjogJXMnICUKQEAgLTU3Niw3ICs1NTksNyBAQAogICAgIGRlZiBuZXh0KHNlbGYpOgogICAgICAgICAiIiJSZXR1cm4gdGhlIG5leHQgbWVzc2FnZSBpbiBhIG9uZS10aW1lIGl0ZXJhdGlvbi4iIiIKICAgICAgICAgaWYgbm90IGhhc2F0dHIoc2VsZiwgJ19vbmV0aW1lX2tleXMnKToKLSAgICAgICAgICAgIHNlbGYuX29uZXRpbWVfa2V5cyA9IGl0ZXIoc2VsZi5rZXlzKCkpCisgICAgICAgICAgICBzZWxmLl9vbmV0aW1lX2tleXMgPSBzZWxmLml0ZXJrZXlzKCkKICAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZltuZXh0KHNlbGYuX29uZXRpbWVfa2V5cyldCkBAIC01OTQsNyArNTc3LDcgQEAKICAgICAgICAgTWFpbGJveC5fX2luaXRfXyhzZWxmLCBwYXRoLCBmYWN0b3J5LCBjcmVhdGUpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGYgPSBvcGVuKHNlbGYuX3BhdGgsICdyYisnKQotICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FTk9FTlQ6CiAgICAgICAgICAgICAgICAgaWYgY3JlYXRlOgogICAgICAgICAgICAgICAgICAgICBmID0gb3BlbihzZWxmLl9wYXRoLCAnd2IrJykKQEAgLTYzNyw4ICs2MjAsNyBAQAogICAgIGRlZiBpdGVya2V5cyhzZWxmKToKICAgICAgICAgIiIiUmV0dXJuIGFuIGl0ZXJhdG9yIG92ZXIga2V5cy4iIiIKICAgICAgICAgc2VsZi5fbG9va3VwKCkKLSAgICAgICAgZm9yIGtleSBpbiBzZWxmLl90b2Mua2V5cygpOgotICAgICAgICAgICAgeWllbGQga2V5CisgICAgICAgIHlpZWxkIGZyb20gc2VsZi5fdG9jLmtleXMoKQogCiAgICAgZGVmIF9fY29udGFpbnNfXyhzZWxmLCBrZXkpOgogICAgICAgICAiIiJSZXR1cm4gVHJ1ZSBpZiB0aGUga2V5ZWQgbWVzc2FnZSBleGlzdHMsIEZhbHNlIG90aGVyd2lzZS4iIiIKQEAgLTcxNiwxMyArNjk4LDkgQEAKICAgICAgICAgb3MuY2htb2QobmV3X2ZpbGUubmFtZSwgbW9kZSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgb3MucmVuYW1lKG5ld19maWxlLm5hbWUsIHNlbGYuX3BhdGgpCi0gICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6Ci0gICAgICAgICAgICBpZiBlLmVycm5vID09IGVycm5vLkVFWElTVCBvciBcCi0gICAgICAgICAgICAgIChvcy5uYW1lID09ICdvczInIGFuZCBlLmVycm5vID09IGVycm5vLkVBQ0NFUyk6Ci0gICAgICAgICAgICAgICAgb3MucmVtb3ZlKHNlbGYuX3BhdGgpCi0gICAgICAgICAgICAgICAgb3MucmVuYW1lKG5ld19maWxlLm5hbWUsIHNlbGYuX3BhdGgpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgIGV4Y2VwdCBGaWxlRXhpc3RzRXJyb3I6CisgICAgICAgICAgICBvcy5yZW1vdmUoc2VsZi5fcGF0aCkKKyAgICAgICAgICAgIG9zLnJlbmFtZShuZXdfZmlsZS5uYW1lLCBzZWxmLl9wYXRoKQogICAgICAgICBzZWxmLl9maWxlID0gb3BlbihzZWxmLl9wYXRoLCAncmIrJykKICAgICAgICAgc2VsZi5fdG9jID0gbmV3X3RvYwogICAgICAgICBzZWxmLl9wZW5kaW5nID0gRmFsc2UKQEAgLTc0NCwxMCArNzIyLDE0IEBACiAKICAgICBkZWYgY2xvc2Uoc2VsZik6CiAgICAgICAgICIiIkZsdXNoIGFuZCBjbG9zZSB0aGUgbWFpbGJveC4iIiIKLSAgICAgICAgc2VsZi5mbHVzaCgpCi0gICAgICAgIGlmIHNlbGYuX2xvY2tlZDoKLSAgICAgICAgICAgIHNlbGYudW5sb2NrKCkKLSAgICAgICAgc2VsZi5fZmlsZS5jbG9zZSgpICAjIFN5bmMgaGFzIGJlZW4gZG9uZSBieSBzZWxmLmZsdXNoKCkgYWJvdmUuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuZmx1c2goKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGlmIHNlbGYuX2xvY2tlZDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi51bmxvY2soKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBzZWxmLl9maWxlLmNsb3NlKCkgICMgU3luYyBoYXMgYmVlbiBkb25lIGJ5IHNlbGYuZmx1c2goKSBhYm92ZS4KIAogICAgIGRlZiBfbG9va3VwKHNlbGYsIGtleT1Ob25lKToKICAgICAgICAgIiIiUmV0dXJuIChzdGFydCwgc3RvcCkgb3IgcmFpc2UgS2V5RXJyb3IuIiIiCkBAIC05OTksNyArOTgxLDcgQEAKICAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLl9wYXRoLCBzdHIoa2V5KSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZiA9IG9wZW4ocGF0aCwgJ3JiKycpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICBpZiBlLmVycm5vID09IGVycm5vLkVOT0VOVDoKICAgICAgICAgICAgICAgICByYWlzZSBLZXlFcnJvcignTm8gbWVzc2FnZSB3aXRoIGtleTogJXMnICUga2V5KQogICAgICAgICAgICAgZWxzZToKQEAgLTEwMTMsNyArOTk1LDcgQEAKICAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLl9wYXRoLCBzdHIoa2V5KSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZiA9IG9wZW4ocGF0aCwgJ3JiKycpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICBpZiBlLmVycm5vID09IGVycm5vLkVOT0VOVDoKICAgICAgICAgICAgICAgICByYWlzZSBLZXlFcnJvcignTm8gbWVzc2FnZSB3aXRoIGtleTogJXMnICUga2V5KQogICAgICAgICAgICAgZWxzZToKQEAgLTEwMzksMTIgKzEwMjEsMTIgQEAKICAgICAgICAgICAgICAgICBmID0gb3Blbihvcy5wYXRoLmpvaW4oc2VsZi5fcGF0aCwgc3RyKGtleSkpLCAncmIrJykKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgZiA9IG9wZW4ob3MucGF0aC5qb2luKHNlbGYuX3BhdGgsIHN0cihrZXkpKSwgJ3JiJykKLSAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gZXJybm8uRU5PRU5UOgogICAgICAgICAgICAgICAgIHJhaXNlIEtleUVycm9yKCdObyBtZXNzYWdlIHdpdGgga2V5OiAlcycgJSBrZXkpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBmOgogICAgICAgICAgICAgaWYgc2VsZi5fbG9ja2VkOgogICAgICAgICAgICAgICAgIF9sb2NrX2ZpbGUoZikKICAgICAgICAgICAgIHRyeToKQEAgLTEwNTIsOCArMTAzNCw2IEBACiAgICAgICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgICAgIGlmIHNlbGYuX2xvY2tlZDoKICAgICAgICAgICAgICAgICAgICAgX3VubG9ja19maWxlKGYpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBmLmNsb3NlKCkKICAgICAgICAgZm9yIG5hbWUsIGtleV9saXN0IGluIHNlbGYuZ2V0X3NlcXVlbmNlcygpLml0ZW1zKCk6CiAgICAgICAgICAgICBpZiBrZXkgaW4ga2V5X2xpc3Q6CiAgICAgICAgICAgICAgICAgbXNnLmFkZF9zZXF1ZW5jZShuYW1lKQpAQCAtMTA2NiwxMiArMTA0NiwxMiBAQAogICAgICAgICAgICAgICAgIGYgPSBvcGVuKG9zLnBhdGguam9pbihzZWxmLl9wYXRoLCBzdHIoa2V5KSksICdyYisnKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBmID0gb3Blbihvcy5wYXRoLmpvaW4oc2VsZi5fcGF0aCwgc3RyKGtleSkpLCAncmInKQotICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FTk9FTlQ6CiAgICAgICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IoJ05vIG1lc3NhZ2Ugd2l0aCBrZXk6ICVzJyAlIGtleSkKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIGY6CiAgICAgICAgICAgICBpZiBzZWxmLl9sb2NrZWQ6CiAgICAgICAgICAgICAgICAgX2xvY2tfZmlsZShmKQogICAgICAgICAgICAgdHJ5OgpAQCAtMTA3OSwxNCArMTA1OSwxMiBAQAogICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICBpZiBzZWxmLl9sb2NrZWQ6CiAgICAgICAgICAgICAgICAgICAgIF91bmxvY2tfZmlsZShmKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgZi5jbG9zZSgpCiAKICAgICBkZWYgZ2V0X2ZpbGUoc2VsZiwga2V5KToKICAgICAgICAgIiIiUmV0dXJuIGEgZmlsZS1saWtlIHJlcHJlc2VudGF0aW9uIG9yIHJhaXNlIGEgS2V5RXJyb3IuIiIiCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGYgPSBvcGVuKG9zLnBhdGguam9pbihzZWxmLl9wYXRoLCBzdHIoa2V5KSksICdyYicpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICBpZiBlLmVycm5vID09IGVycm5vLkVOT0VOVDoKICAgICAgICAgICAgICAgICByYWlzZSBLZXlFcnJvcignTm8gbWVzc2FnZSB3aXRoIGtleTogJXMnICUga2V5KQogICAgICAgICAgICAgZWxzZToKQEAgLTExMDQsNyArMTA4Miw3IEBACiAKICAgICBkZWYgX19sZW5fXyhzZWxmKToKICAgICAgICAgIiIiUmV0dXJuIGEgY291bnQgb2YgbWVzc2FnZXMgaW4gdGhlIG1haWxib3guIiIiCi0gICAgICAgIHJldHVybiBsZW4obGlzdChzZWxmLmtleXMoKSkpCisgICAgICAgIHJldHVybiBsZW4obGlzdChzZWxmLml0ZXJrZXlzKCkpKQogCiAgICAgZGVmIGxvY2soc2VsZik6CiAgICAgICAgICIiIkxvY2sgdGhlIG1haWxib3guIiIiCkBAIC0xMjE4LDcgKzExOTYsNyBAQAogICAgICAgICBzZXF1ZW5jZXMgPSBzZWxmLmdldF9zZXF1ZW5jZXMoKQogICAgICAgICBwcmV2ID0gMAogICAgICAgICBjaGFuZ2VzID0gW10KLSAgICAgICAgZm9yIGtleSBpbiBzZWxmLmtleXMoKToKKyAgICAgICAgZm9yIGtleSBpbiBzZWxmLml0ZXJrZXlzKCk6CiAgICAgICAgICAgICBpZiBrZXkgLSAxICE9IHByZXY6CiAgICAgICAgICAgICAgICAgY2hhbmdlcy5hcHBlbmQoKGtleSwgcHJldiArIDEpKQogICAgICAgICAgICAgICAgIGlmIGhhc2F0dHIob3MsICdsaW5rJyk6CkBAIC0yMDA2LDcgKzE5ODQsNyBAQAogICAgICAgICByZXR1cm4gcmVzdWx0CiAKICAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgotICAgICAgICAiIiJDb250ZXh0IG1hbmFnZXIgcHJvdG9jb2wgc3VwcG9ydC4iIiIKKyAgICAgICAgIiIiQ29udGV4dCBtYW5hZ2VtZW50IHByb3RvY29sIHN1cHBvcnQuIiIiCiAgICAgICAgIHJldHVybiBzZWxmCiAKICAgICBkZWYgX19leGl0X18oc2VsZiwgKmV4Yyk6CkBAIC0yMDc5LDcgKzIwNTcsNyBAQAogICAgICAgICBpZiBmY250bDoKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBmY250bC5sb2NrZihmLCBmY250bC5MT0NLX0VYIHwgZmNudGwuTE9DS19OQikKLSAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gaW4gKGVycm5vLkVBR0FJTiwgZXJybm8uRUFDQ0VTLCBlcnJuby5FUk9GUyk6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEV4dGVybmFsQ2xhc2hFcnJvcignbG9ja2Y6IGxvY2sgdW5hdmFpbGFibGU6ICVzJyAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmLm5hbWUpCkBAIC0yMDg5LDcgKzIwNjcsNyBAQAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHByZV9sb2NrID0gX2NyZWF0ZV90ZW1wb3JhcnkoZi5uYW1lICsgJy5sb2NrJykKICAgICAgICAgICAgICAgICBwcmVfbG9jay5jbG9zZSgpCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgICAgICBpZiBlLmVycm5vIGluIChlcnJuby5FQUNDRVMsIGVycm5vLkVST0ZTKToKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICAjIFdpdGhvdXQgd3JpdGUgYWNjZXNzLCBqdXN0IHNraXAgZG90bG9ja2luZy4KICAgICAgICAgICAgICAgICBlbHNlOgpAQCAtMjEwMiwxNCArMjA4MCwxMCBAQAogICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgIG9zLnJlbmFtZShwcmVfbG9jay5uYW1lLCBmLm5hbWUgKyAnLmxvY2snKQogICAgICAgICAgICAgICAgICAgICBkb3Rsb2NrX2RvbmUgPSBUcnVlCi0gICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgotICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gZXJybm8uRUVYSVNUIG9yIFwKLSAgICAgICAgICAgICAgICAgIChvcy5uYW1lID09ICdvczInIGFuZCBlLmVycm5vID09IGVycm5vLkVBQ0NFUyk6Ci0gICAgICAgICAgICAgICAgICAgIG9zLnJlbW92ZShwcmVfbG9jay5uYW1lKQotICAgICAgICAgICAgICAgICAgICByYWlzZSBFeHRlcm5hbENsYXNoRXJyb3IoJ2RvdCBsb2NrIHVuYXZhaWxhYmxlOiAlcycgJQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZi5uYW1lKQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICBleGNlcHQgRmlsZUV4aXN0c0Vycm9yOgorICAgICAgICAgICAgICAgIG9zLnJlbW92ZShwcmVfbG9jay5uYW1lKQorICAgICAgICAgICAgICAgIHJhaXNlIEV4dGVybmFsQ2xhc2hFcnJvcignZG90IGxvY2sgdW5hdmFpbGFibGU6ICVzJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYubmFtZSkKICAgICBleGNlcHQ6CiAgICAgICAgIGlmIGZjbnRsOgogICAgICAgICAgICAgZmNudGwubG9ja2YoZiwgZmNudGwuTE9DS19VTikKZGlmZiAtLWdpdCBhL0xpYi9tYWlsY2FwLnB5IGIvTGliL21haWxjYXAucHkKaW5kZXggMGMwYjE5Yy4uOTdlMzAzNSAxMDA2NDQKLS0tIGEvTGliL21haWxjYXAucHkKKysrIGIvTGliL21haWxjYXAucHkKQEAgLTIwLDcgKzIwLDcgQEAKICAgICBmb3IgbWFpbGNhcCBpbiBsaXN0bWFpbGNhcGZpbGVzKCk6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGZwID0gb3BlbihtYWlsY2FwLCAncicpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgIHdpdGggZnA6CiAgICAgICAgICAgICBtb3JlY2FwcyA9IHJlYWRtYWlsY2FwZmlsZShmcCkKZGlmZiAtLWdpdCBhL0xpYi9taW1ldHlwZXMucHkgYi9MaWIvbWltZXR5cGVzLnB5CmluZGV4IGNkZWJmN2EuLmQ2NDcyNmIgMTAwNjQ0Ci0tLSBhL0xpYi9taW1ldHlwZXMucHkKKysrIGIvTGliL21pbWV0eXBlcy5weQpAQCAtMjQ2LDcgKzI0Niw4IEBACiAgICAgICAgICAgICAgICAgZXhjZXB0IEVudmlyb25tZW50RXJyb3I6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgeWllbGQgY3R5cGUKKyAgICAgICAgICAgICAgICAgICAgaWYgJ1wwJyBub3QgaW4gY3R5cGU6CisgICAgICAgICAgICAgICAgICAgICAgICB5aWVsZCBjdHlwZQogICAgICAgICAgICAgICAgIGkgKz0gMQogCiAgICAgICAgIHdpdGggX3dpbnJlZy5PcGVuS2V5KF93aW5yZWcuSEtFWV9DTEFTU0VTX1JPT1QsICcnKSBhcyBoa2NyOgpAQCAtMzYxLDcgKzM2Miw3IEBACiBkZWYgcmVhZF9taW1lX3R5cGVzKGZpbGUpOgogICAgIHRyeToKICAgICAgICAgZiA9IG9wZW4oZmlsZSkKLSAgICBleGNlcHQgSU9FcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcmV0dXJuIE5vbmUKICAgICB3aXRoIGY6CiAgICAgICAgIGRiID0gTWltZVR5cGVzKCkKZGlmZiAtLWdpdCBhL0xpYi9tb2R1bGVmaW5kZXIucHkgYi9MaWIvbW9kdWxlZmluZGVyLnB5CmluZGV4IDI2NGIwZjAuLmI3NzhlNjAgMTAwNjQ0Ci0tLSBhL0xpYi9tb2R1bGVmaW5kZXIucHkKKysrIGIvTGliL21vZHVsZWZpbmRlci5weQpAQCAtMSwxMyArMSwxNyBAQAogIiIiRmluZCBtb2R1bGVzIHVzZWQgYnkgYSBzY3JpcHQsIHVzaW5nIGludHJvc3BlY3Rpb24uIiIiCiAKIGltcG9ydCBkaXMKLWltcG9ydCBpbXAKK2ltcG9ydCBpbXBvcnRsaWIuX2Jvb3RzdHJhcAogaW1wb3J0IGltcG9ydGxpYi5tYWNoaW5lcnkKIGltcG9ydCBtYXJzaGFsCiBpbXBvcnQgb3MKIGltcG9ydCBzeXMKIGltcG9ydCB0eXBlcwogaW1wb3J0IHN0cnVjdAoraW1wb3J0IHdhcm5pbmdzCit3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdpZ25vcmUnLCBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nKQorICAgIGltcG9ydCBpbXAKIAogIyBYWFggQ2xlYW4gdXAgb25jZSBzdHI4J3MgY3N0b3IgbWF0Y2hlcyBieXRlcy4KIExPQURfQ09OU1QgPSBieXRlcyhbZGlzLm9wbmFtZS5pbmRleCgnTE9BRF9DT05TVCcpXSkKQEAgLTIyOSw3ICsyMzMsNyBAQAogICAgICAgICBmb3IgZGlyIGluIG0uX19wYXRoX186CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgbmFtZXMgPSBvcy5saXN0ZGlyKGRpcikKLSAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIHNlbGYubXNnKDIsICJjYW4ndCBsaXN0IGRpcmVjdG9yeSIsIGRpcikKICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgZm9yIG5hbWUgaW4gbmFtZXM6CkBAIC0yODQsMTEgKzI4OCwxMiBAQAogICAgICAgICBpZiB0eXBlID09IGltcC5QWV9TT1VSQ0U6CiAgICAgICAgICAgICBjbyA9IGNvbXBpbGUoZnAucmVhZCgpKydcbicsIHBhdGhuYW1lLCAnZXhlYycpCiAgICAgICAgIGVsaWYgdHlwZSA9PSBpbXAuUFlfQ09NUElMRUQ6Ci0gICAgICAgICAgICBpZiBmcC5yZWFkKDQpICE9IGltcC5nZXRfbWFnaWMoKToKLSAgICAgICAgICAgICAgICBzZWxmLm1zZ291dCgyLCAicmFpc2UgSW1wb3J0RXJyb3I6IEJhZCBtYWdpYyBudW1iZXIiLCBwYXRobmFtZSkKLSAgICAgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcigiQmFkIG1hZ2ljIG51bWJlciBpbiAlcyIgJSBwYXRobmFtZSkKLSAgICAgICAgICAgIGZwLnJlYWQoOCkgICMgU2tpcCBtdGltZSBhbmQgc2l6ZS4KLSAgICAgICAgICAgIGNvID0gbWFyc2hhbC5sb2FkKGZwKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG1hcnNoYWxfZGF0YSA9IGltcG9ydGxpYi5fYm9vdHN0cmFwLl92YWxpZGF0ZV9ieXRlY29kZV9oZWFkZXIoZnAucmVhZCgpKQorICAgICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yIGFzIGV4YzoKKyAgICAgICAgICAgICAgICBzZWxmLm1zZ291dCgyLCAicmFpc2UgSW1wb3J0RXJyb3I6ICIgKyBzdHIoZXhjKSwgcGF0aG5hbWUpCisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIGNvID0gbWFyc2hhbC5sb2FkcyhtYXJzaGFsX2RhdGEpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBjbyA9IE5vbmUKICAgICAgICAgbSA9IHNlbGYuYWRkX21vZHVsZShmcW5hbWUpCkBAIC01NjMsMTEgKzU2OCwxMiBAQAogICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShjb25zdHNbaV0sIHR5cGUoY28pKToKICAgICAgICAgICAgICAgICBjb25zdHNbaV0gPSBzZWxmLnJlcGxhY2VfcGF0aHNfaW5fY29kZShjb25zdHNbaV0pCiAKLSAgICAgICAgcmV0dXJuIHR5cGVzLkNvZGVUeXBlKGNvLmNvX2FyZ2NvdW50LCBjby5jb19ubG9jYWxzLCBjby5jb19zdGFja3NpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY28uY29fZmxhZ3MsIGNvLmNvX2NvZGUsIHR1cGxlKGNvbnN0cyksIGNvLmNvX25hbWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvLmNvX3Zhcm5hbWVzLCBuZXdfZmlsZW5hbWUsIGNvLmNvX25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY28uY29fZmlyc3RsaW5lbm8sIGNvLmNvX2xub3RhYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjby5jb19mcmVldmFycywgY28uY29fY2VsbHZhcnMpCisgICAgICAgIHJldHVybiB0eXBlcy5Db2RlVHlwZShjby5jb19hcmdjb3VudCwgY28uY29fa3dvbmx5YXJnY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjby5jb19ubG9jYWxzLCBjby5jb19zdGFja3NpemUsIGNvLmNvX2ZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY28uY29fY29kZSwgdHVwbGUoY29uc3RzKSwgY28uY29fbmFtZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjby5jb192YXJuYW1lcywgbmV3X2ZpbGVuYW1lLCBjby5jb19uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY28uY29fZmlyc3RsaW5lbm8sIGNvLmNvX2xub3RhYiwgY28uY29fZnJlZXZhcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjby5jb19jZWxsdmFycykKIAogCiBkZWYgdGVzdCgpOgpkaWZmIC0tZ2l0IGEvTGliL21zaWxpYi9zY2hlbWEucHkgYi9MaWIvbXNpbGliL3NjaGVtYS5weQppbmRleCBhOWUxNjc5Li43MGZlMTM4IDEwMDY0NAotLS0gYS9MaWIvbXNpbGliL3NjaGVtYS5weQorKysgYi9MaWIvbXNpbGliL3NjaGVtYS5weQpAQCAtNzMzLDcgKzczMyw3IEBACiAoJ0N1c3RvbUFjdGlvbicsJ1NvdXJjZScsJ1knLE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsICdDdXN0b21Tb3VyY2UnLE5vbmUsICdUaGUgdGFibGUgcmVmZXJlbmNlIG9mIHRoZSBzb3VyY2Ugb2YgdGhlIGNvZGUuJywpLAogKCdDdXN0b21BY3Rpb24nLCdUYXJnZXQnLCdZJyxOb25lLCBOb25lLCBOb25lLCBOb25lLCAnRm9ybWF0dGVkJyxOb25lLCAnRXhjZWN1dGlvbiBwYXJhbWV0ZXIsIGRlcGVuZHMgb24gdGhlIHR5cGUgb2YgY3VzdG9tIGFjdGlvbicsKSwKICgnRHJMb2NhdG9yJywnU2lnbmF0dXJlXycsJ04nLE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsICdJZGVudGlmaWVyJyxOb25lLCAnVGhlIFNpZ25hdHVyZV8gcmVwcmVzZW50cyBhIHVuaXF1ZSBmaWxlIHNpZ25hdHVyZSBhbmQgaXMgYWxzbyB0aGUgZm9yZWlnbiBrZXkgaW4gdGhlIFNpZ25hdHVyZSB0YWJsZS4nLCksCi0oJ0RyTG9jYXRvcicsJ1BhdGgnLCdZJyxOb25lLCBOb25lLCBOb25lLCBOb25lLCAnQW55UGF0aCcsTm9uZSwgJ1RoZSBwYXRoIG9uIHRoZSB1c2VyIHN5c3RlbS4gVGhpcyBpcyBhIGVpdGhlciBhIHN1YnBhdGggYmVsb3cgdGhlIHZhbHVlIG9mIHRoZSBQYXJlbnQgb3IgYSBmdWxsIHBhdGguIFRoZSBwYXRoIG1heSBjb250YWluIHByb3BlcnRpZXMgZW5jbG9zZWQgd2l0aGluIFsgXSB0aGF0IHdpbGwgYmUgZXhwYW5kZWQuJywpLAorKCdEckxvY2F0b3InLCdQYXRoJywnWScsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgJ0FueVBhdGgnLE5vbmUsICdUaGUgcGF0aCBvbiB0aGUgdXNlciBzeXN0ZW0uIFRoaXMgaXMgZWl0aGVyIGEgc3VicGF0aCBiZWxvdyB0aGUgdmFsdWUgb2YgdGhlIFBhcmVudCBvciBhIGZ1bGwgcGF0aC4gVGhlIHBhdGggbWF5IGNvbnRhaW4gcHJvcGVydGllcyBlbmNsb3NlZCB3aXRoaW4gWyBdIHRoYXQgd2lsbCBiZSBleHBhbmRlZC4nLCksCiAoJ0RyTG9jYXRvcicsJ0RlcHRoJywnWScsMCwzMjc2NyxOb25lLCBOb25lLCBOb25lLCBOb25lLCAnVGhlIGRlcHRoIGJlbG93IHRoZSBwYXRoIHRvIHdoaWNoIHRoZSBTaWduYXR1cmVfIGlzIHJlY3Vyc2l2ZWx5IHNlYXJjaGVkLiBJZiBhYnNlbnQsIHRoZSBkZXB0aCBpcyBhc3N1bWVkIHRvIGJlIDAuJywpLAogKCdEckxvY2F0b3InLCdQYXJlbnQnLCdZJyxOb25lLCBOb25lLCBOb25lLCBOb25lLCAnSWRlbnRpZmllcicsTm9uZSwgJ1RoZSBwYXJlbnQgZmlsZSBzaWduYXR1cmUuIEl0IGlzIGFsc28gYSBmb3JlaWduIGtleSBpbiB0aGUgU2lnbmF0dXJlIHRhYmxlLiBJZiBudWxsIGFuZCB0aGUgUGF0aCBjb2x1bW4gZG9lcyBub3QgZXhwYW5kIHRvIGEgZnVsbCBwYXRoLCB0aGVuIGFsbCB0aGUgZml4ZWQgZHJpdmVzIG9mIHRoZSB1c2VyIHN5c3RlbSBhcmUgc2VhcmNoZWQgdXNpbmcgdGhlIFBhdGguJywpLAogKCdEdXBsaWNhdGVGaWxlJywnRmlsZV8nLCdOJyxOb25lLCBOb25lLCAnRmlsZScsMSwnSWRlbnRpZmllcicsTm9uZSwgJ0ZvcmVpZ24ga2V5IHJlZmVyZW5jaW5nIHRoZSBzb3VyY2UgZmlsZSB0byBiZSBkdXBsaWNhdGVkLicsKSwKZGlmZiAtLWdpdCBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvX19pbml0X18ucHkgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL19faW5pdF9fLnB5CmluZGV4IDFmM2U2N2MuLjg2ZGY2MzggMTAwNjQ0Ci0tLSBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvX19pbml0X18ucHkKKysrIGIvTGliL211bHRpcHJvY2Vzc2luZy9fX2luaXRfXy5weQpAQCAtOCwyNjAgKzgsMzEgQEAKICMgc3VicGFja2FnZSAnbXVsdGlwcm9jZXNzaW5nLmR1bW15JyBoYXMgdGhlIHNhbWUgQVBJIGJ1dCBpcyBhIHNpbXBsZQogIyB3cmFwcGVyIGZvciAndGhyZWFkaW5nJy4KICMKLSMgVHJ5IGNhbGxpbmcgYG11bHRpcHJvY2Vzc2luZy5kb2MubWFpbigpYCB0byByZWFkIHRoZSBodG1sCi0jIGRvY3VtZW50YXRpb24gaW4gYSB3ZWJicm93c2VyLgotIwotIwogIyBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOCwgUiBPdWRrZXJrCiAjIExpY2Vuc2VkIHRvIFBTRiB1bmRlciBhIENvbnRyaWJ1dG9yIEFncmVlbWVudC4KICMKIAotX192ZXJzaW9uX18gPSAnMC43MGExJwotCi1fX2FsbF9fID0gWwotICAgICdQcm9jZXNzJywgJ2N1cnJlbnRfcHJvY2VzcycsICdhY3RpdmVfY2hpbGRyZW4nLCAnZnJlZXplX3N1cHBvcnQnLAotICAgICdNYW5hZ2VyJywgJ1BpcGUnLCAnY3B1X2NvdW50JywgJ2xvZ190b19zdGRlcnInLCAnZ2V0X2xvZ2dlcicsCi0gICAgJ2FsbG93X2Nvbm5lY3Rpb25fcGlja2xpbmcnLCAnQnVmZmVyVG9vU2hvcnQnLCAnVGltZW91dEVycm9yJywKLSAgICAnTG9jaycsICdSTG9jaycsICdTZW1hcGhvcmUnLCAnQm91bmRlZFNlbWFwaG9yZScsICdDb25kaXRpb24nLAotICAgICdFdmVudCcsICdCYXJyaWVyJywgJ1F1ZXVlJywgJ1NpbXBsZVF1ZXVlJywgJ0pvaW5hYmxlUXVldWUnLCAnUG9vbCcsCi0gICAgJ1ZhbHVlJywgJ0FycmF5JywgJ1Jhd1ZhbHVlJywgJ1Jhd0FycmF5JywgJ1NVQkRFQlVHJywgJ1NVQldBUk5JTkcnLAotICAgIF0KLQotX19hdXRob3JfXyA9ICdSLiBPdWRrZXJrIChyLm0ub3Vka2Vya0BnbWFpbC5jb20pJwotCi0jCi0jIEltcG9ydHMKLSMKLQotaW1wb3J0IG9zCiBpbXBvcnQgc3lzCi0KLWZyb20gbXVsdGlwcm9jZXNzaW5nLnByb2Nlc3MgaW1wb3J0IFByb2Nlc3MsIGN1cnJlbnRfcHJvY2VzcywgYWN0aXZlX2NoaWxkcmVuCi1mcm9tIG11bHRpcHJvY2Vzc2luZy51dGlsIGltcG9ydCBTVUJERUJVRywgU1VCV0FSTklORworZnJvbSAuIGltcG9ydCBjb250ZXh0CiAKICMKLSMgRXhjZXB0aW9ucworIyBDb3B5IHN0dWZmIGZyb20gZGVmYXVsdCBjb250ZXh0CiAjCiAKLWNsYXNzIFByb2Nlc3NFcnJvcihFeGNlcHRpb24pOgotICAgIHBhc3MKLQotY2xhc3MgQnVmZmVyVG9vU2hvcnQoUHJvY2Vzc0Vycm9yKToKLSAgICBwYXNzCi0KLWNsYXNzIFRpbWVvdXRFcnJvcihQcm9jZXNzRXJyb3IpOgotICAgIHBhc3MKLQotY2xhc3MgQXV0aGVudGljYXRpb25FcnJvcihQcm9jZXNzRXJyb3IpOgotICAgIHBhc3MKLQotaW1wb3J0IF9tdWx0aXByb2Nlc3NpbmcKK2dsb2JhbHMoKS51cGRhdGUoKG5hbWUsIGdldGF0dHIoY29udGV4dC5fZGVmYXVsdF9jb250ZXh0LCBuYW1lKSkKKyAgICAgICAgICAgICAgICAgZm9yIG5hbWUgaW4gY29udGV4dC5fZGVmYXVsdF9jb250ZXh0Ll9fYWxsX18pCitfX2FsbF9fID0gY29udGV4dC5fZGVmYXVsdF9jb250ZXh0Ll9fYWxsX18KIAogIwotIyBEZWZpbml0aW9ucyBub3QgZGVwZW5kaW5nIG9uIG5hdGl2ZSBzZW1hcGhvcmVzCisjIFhYWCBUaGVzZSBzaG91bGQgbm90IHJlYWxseSBiZSBkb2N1bWVudGVkIG9yIHB1YmxpYy4KICMKIAotZGVmIE1hbmFnZXIoKToKLSAgICAnJycKLSAgICBSZXR1cm5zIGEgbWFuYWdlciBhc3NvY2lhdGVkIHdpdGggYSBydW5uaW5nIHNlcnZlciBwcm9jZXNzCi0KLSAgICBUaGUgbWFuYWdlcnMgbWV0aG9kcyBzdWNoIGFzIGBMb2NrKClgLCBgQ29uZGl0aW9uKClgIGFuZCBgUXVldWUoKWAKLSAgICBjYW4gYmUgdXNlZCB0byBjcmVhdGUgc2hhcmVkIG9iamVjdHMuCi0gICAgJycnCi0gICAgZnJvbSBtdWx0aXByb2Nlc3NpbmcubWFuYWdlcnMgaW1wb3J0IFN5bmNNYW5hZ2VyCi0gICAgbSA9IFN5bmNNYW5hZ2VyKCkKLSAgICBtLnN0YXJ0KCkKLSAgICByZXR1cm4gbQotCi1kZWYgUGlwZShkdXBsZXg9VHJ1ZSk6Ci0gICAgJycnCi0gICAgUmV0dXJucyB0d28gY29ubmVjdGlvbiBvYmplY3QgY29ubmVjdGVkIGJ5IGEgcGlwZQotICAgICcnJwotICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nLmNvbm5lY3Rpb24gaW1wb3J0IFBpcGUKLSAgICByZXR1cm4gUGlwZShkdXBsZXgpCi0KLWRlZiBjcHVfY291bnQoKToKLSAgICAnJycKLSAgICBSZXR1cm5zIHRoZSBudW1iZXIgb2YgQ1BVcyBpbiB0aGUgc3lzdGVtCi0gICAgJycnCi0gICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIG51bSA9IGludChvcy5lbnZpcm9uWydOVU1CRVJfT0ZfUFJPQ0VTU09SUyddKQotICAgICAgICBleGNlcHQgKFZhbHVlRXJyb3IsIEtleUVycm9yKToKLSAgICAgICAgICAgIG51bSA9IDAKLSAgICBlbGlmICdic2QnIGluIHN5cy5wbGF0Zm9ybSBvciBzeXMucGxhdGZvcm0gPT0gJ2Rhcndpbic6Ci0gICAgICAgIGNvbW0gPSAnL3NiaW4vc3lzY3RsIC1uIGh3Lm5jcHUnCi0gICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnZGFyd2luJzoKLSAgICAgICAgICAgIGNvbW0gPSAnL3VzcicgKyBjb21tCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHdpdGggb3MucG9wZW4oY29tbSkgYXMgcDoKLSAgICAgICAgICAgICAgICBudW0gPSBpbnQocC5yZWFkKCkpCi0gICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgotICAgICAgICAgICAgbnVtID0gMAotICAgIGVsc2U6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIG51bSA9IG9zLnN5c2NvbmYoJ1NDX05QUk9DRVNTT1JTX09OTE4nKQotICAgICAgICBleGNlcHQgKFZhbHVlRXJyb3IsIE9TRXJyb3IsIEF0dHJpYnV0ZUVycm9yKToKLSAgICAgICAgICAgIG51bSA9IDAKLQotICAgIGlmIG51bSA+PSAxOgotICAgICAgICByZXR1cm4gbnVtCi0gICAgZWxzZToKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcignY2Fubm90IGRldGVybWluZSBudW1iZXIgb2YgY3B1cycpCi0KLWRlZiBmcmVlemVfc3VwcG9ydCgpOgotICAgICcnJwotICAgIENoZWNrIHdoZXRoZXIgdGhpcyBpcyBhIGZha2UgZm9ya2VkIHByb2Nlc3MgaW4gYSBmcm96ZW4gZXhlY3V0YWJsZS4KLSAgICBJZiBzbyB0aGVuIHJ1biBjb2RlIHNwZWNpZmllZCBieSBjb21tYW5kbGluZSBhbmQgZXhpdC4KLSAgICAnJycKLSAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJyBhbmQgZ2V0YXR0cihzeXMsICdmcm96ZW4nLCBGYWxzZSk6Ci0gICAgICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nLmZvcmtpbmcgaW1wb3J0IGZyZWV6ZV9zdXBwb3J0Ci0gICAgICAgIGZyZWV6ZV9zdXBwb3J0KCkKLQotZGVmIGdldF9sb2dnZXIoKToKLSAgICAnJycKLSAgICBSZXR1cm4gcGFja2FnZSBsb2dnZXIgLS0gaWYgaXQgZG9lcyBub3QgYWxyZWFkeSBleGlzdCB0aGVuIGl0IGlzIGNyZWF0ZWQKLSAgICAnJycKLSAgICBmcm9tIG11bHRpcHJvY2Vzc2luZy51dGlsIGltcG9ydCBnZXRfbG9nZ2VyCi0gICAgcmV0dXJuIGdldF9sb2dnZXIoKQotCi1kZWYgbG9nX3RvX3N0ZGVycihsZXZlbD1Ob25lKToKLSAgICAnJycKLSAgICBUdXJuIG9uIGxvZ2dpbmcgYW5kIGFkZCBhIGhhbmRsZXIgd2hpY2ggcHJpbnRzIHRvIHN0ZGVycgotICAgICcnJwotICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nLnV0aWwgaW1wb3J0IGxvZ190b19zdGRlcnIKLSAgICByZXR1cm4gbG9nX3RvX3N0ZGVycihsZXZlbCkKLQotZGVmIGFsbG93X2Nvbm5lY3Rpb25fcGlja2xpbmcoKToKLSAgICAnJycKLSAgICBJbnN0YWxsIHN1cHBvcnQgZm9yIHNlbmRpbmcgY29ubmVjdGlvbnMgYW5kIHNvY2tldHMgYmV0d2VlbiBwcm9jZXNzZXMKLSAgICAnJycKLSAgICAjIFRoaXMgaXMgdW5kb2N1bWVudGVkLiAgSW4gcHJldmlvdXMgdmVyc2lvbnMgb2YgbXVsdGlwcm9jZXNzaW5nCi0gICAgIyBpdHMgb25seSBlZmZlY3Qgd2FzIHRvIG1ha2Ugc29ja2V0IG9iamVjdHMgaW5oZXJpdGFibGUgb24gV2luZG93cy4KLSAgICBpbXBvcnQgbXVsdGlwcm9jZXNzaW5nLmNvbm5lY3Rpb24KK1NVQkRFQlVHID0gNQorU1VCV0FSTklORyA9IDI1CiAKICMKLSMgRGVmaW5pdGlvbnMgZGVwZW5kaW5nIG9uIG5hdGl2ZSBzZW1hcGhvcmVzCisjIEFsaWFzIGZvciBtYWluIG1vZHVsZSAtLSB3aWxsIGJlIHJlc2V0IGJ5IGJvb3RzdHJhcHBpbmcgY2hpbGQgcHJvY2Vzc2VzCiAjCiAKLWRlZiBMb2NrKCk6Ci0gICAgJycnCi0gICAgUmV0dXJucyBhIG5vbi1yZWN1cnNpdmUgbG9jayBvYmplY3QKLSAgICAnJycKLSAgICBmcm9tIG11bHRpcHJvY2Vzc2luZy5zeW5jaHJvbml6ZSBpbXBvcnQgTG9jawotICAgIHJldHVybiBMb2NrKCkKLQotZGVmIFJMb2NrKCk6Ci0gICAgJycnCi0gICAgUmV0dXJucyBhIHJlY3Vyc2l2ZSBsb2NrIG9iamVjdAotICAgICcnJwotICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nLnN5bmNocm9uaXplIGltcG9ydCBSTG9jawotICAgIHJldHVybiBSTG9jaygpCi0KLWRlZiBDb25kaXRpb24obG9jaz1Ob25lKToKLSAgICAnJycKLSAgICBSZXR1cm5zIGEgY29uZGl0aW9uIG9iamVjdAotICAgICcnJwotICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nLnN5bmNocm9uaXplIGltcG9ydCBDb25kaXRpb24KLSAgICByZXR1cm4gQ29uZGl0aW9uKGxvY2spCi0KLWRlZiBTZW1hcGhvcmUodmFsdWU9MSk6Ci0gICAgJycnCi0gICAgUmV0dXJucyBhIHNlbWFwaG9yZSBvYmplY3QKLSAgICAnJycKLSAgICBmcm9tIG11bHRpcHJvY2Vzc2luZy5zeW5jaHJvbml6ZSBpbXBvcnQgU2VtYXBob3JlCi0gICAgcmV0dXJuIFNlbWFwaG9yZSh2YWx1ZSkKLQotZGVmIEJvdW5kZWRTZW1hcGhvcmUodmFsdWU9MSk6Ci0gICAgJycnCi0gICAgUmV0dXJucyBhIGJvdW5kZWQgc2VtYXBob3JlIG9iamVjdAotICAgICcnJwotICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nLnN5bmNocm9uaXplIGltcG9ydCBCb3VuZGVkU2VtYXBob3JlCi0gICAgcmV0dXJuIEJvdW5kZWRTZW1hcGhvcmUodmFsdWUpCi0KLWRlZiBFdmVudCgpOgotICAgICcnJwotICAgIFJldHVybnMgYW4gZXZlbnQgb2JqZWN0Ci0gICAgJycnCi0gICAgZnJvbSBtdWx0aXByb2Nlc3Npbmcuc3luY2hyb25pemUgaW1wb3J0IEV2ZW50Ci0gICAgcmV0dXJuIEV2ZW50KCkKLQotZGVmIEJhcnJpZXIocGFydGllcywgYWN0aW9uPU5vbmUsIHRpbWVvdXQ9Tm9uZSk6Ci0gICAgJycnCi0gICAgUmV0dXJucyBhIGJhcnJpZXIgb2JqZWN0Ci0gICAgJycnCi0gICAgZnJvbSBtdWx0aXByb2Nlc3Npbmcuc3luY2hyb25pemUgaW1wb3J0IEJhcnJpZXIKLSAgICByZXR1cm4gQmFycmllcihwYXJ0aWVzLCBhY3Rpb24sIHRpbWVvdXQpCi0KLWRlZiBRdWV1ZShtYXhzaXplPTApOgotICAgICcnJwotICAgIFJldHVybnMgYSBxdWV1ZSBvYmplY3QKLSAgICAnJycKLSAgICBmcm9tIG11bHRpcHJvY2Vzc2luZy5xdWV1ZXMgaW1wb3J0IFF1ZXVlCi0gICAgcmV0dXJuIFF1ZXVlKG1heHNpemUpCi0KLWRlZiBKb2luYWJsZVF1ZXVlKG1heHNpemU9MCk6Ci0gICAgJycnCi0gICAgUmV0dXJucyBhIHF1ZXVlIG9iamVjdAotICAgICcnJwotICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nLnF1ZXVlcyBpbXBvcnQgSm9pbmFibGVRdWV1ZQotICAgIHJldHVybiBKb2luYWJsZVF1ZXVlKG1heHNpemUpCi0KLWRlZiBTaW1wbGVRdWV1ZSgpOgotICAgICcnJwotICAgIFJldHVybnMgYSBxdWV1ZSBvYmplY3QKLSAgICAnJycKLSAgICBmcm9tIG11bHRpcHJvY2Vzc2luZy5xdWV1ZXMgaW1wb3J0IFNpbXBsZVF1ZXVlCi0gICAgcmV0dXJuIFNpbXBsZVF1ZXVlKCkKLQotZGVmIFBvb2wocHJvY2Vzc2VzPU5vbmUsIGluaXRpYWxpemVyPU5vbmUsIGluaXRhcmdzPSgpLCBtYXh0YXNrc3BlcmNoaWxkPU5vbmUpOgotICAgICcnJwotICAgIFJldHVybnMgYSBwcm9jZXNzIHBvb2wgb2JqZWN0Ci0gICAgJycnCi0gICAgZnJvbSBtdWx0aXByb2Nlc3NpbmcucG9vbCBpbXBvcnQgUG9vbAotICAgIHJldHVybiBQb29sKHByb2Nlc3NlcywgaW5pdGlhbGl6ZXIsIGluaXRhcmdzLCBtYXh0YXNrc3BlcmNoaWxkKQotCi1kZWYgUmF3VmFsdWUodHlwZWNvZGVfb3JfdHlwZSwgKmFyZ3MpOgotICAgICcnJwotICAgIFJldHVybnMgYSBzaGFyZWQgb2JqZWN0Ci0gICAgJycnCi0gICAgZnJvbSBtdWx0aXByb2Nlc3Npbmcuc2hhcmVkY3R5cGVzIGltcG9ydCBSYXdWYWx1ZQotICAgIHJldHVybiBSYXdWYWx1ZSh0eXBlY29kZV9vcl90eXBlLCAqYXJncykKLQotZGVmIFJhd0FycmF5KHR5cGVjb2RlX29yX3R5cGUsIHNpemVfb3JfaW5pdGlhbGl6ZXIpOgotICAgICcnJwotICAgIFJldHVybnMgYSBzaGFyZWQgYXJyYXkKLSAgICAnJycKLSAgICBmcm9tIG11bHRpcHJvY2Vzc2luZy5zaGFyZWRjdHlwZXMgaW1wb3J0IFJhd0FycmF5Ci0gICAgcmV0dXJuIFJhd0FycmF5KHR5cGVjb2RlX29yX3R5cGUsIHNpemVfb3JfaW5pdGlhbGl6ZXIpCi0KLWRlZiBWYWx1ZSh0eXBlY29kZV9vcl90eXBlLCAqYXJncywgbG9jaz1UcnVlKToKLSAgICAnJycKLSAgICBSZXR1cm5zIGEgc3luY2hyb25pemVkIHNoYXJlZCBvYmplY3QKLSAgICAnJycKLSAgICBmcm9tIG11bHRpcHJvY2Vzc2luZy5zaGFyZWRjdHlwZXMgaW1wb3J0IFZhbHVlCi0gICAgcmV0dXJuIFZhbHVlKHR5cGVjb2RlX29yX3R5cGUsICphcmdzLCBsb2NrPWxvY2spCi0KLWRlZiBBcnJheSh0eXBlY29kZV9vcl90eXBlLCBzaXplX29yX2luaXRpYWxpemVyLCAqLCBsb2NrPVRydWUpOgotICAgICcnJwotICAgIFJldHVybnMgYSBzeW5jaHJvbml6ZWQgc2hhcmVkIGFycmF5Ci0gICAgJycnCi0gICAgZnJvbSBtdWx0aXByb2Nlc3Npbmcuc2hhcmVkY3R5cGVzIGltcG9ydCBBcnJheQotICAgIHJldHVybiBBcnJheSh0eXBlY29kZV9vcl90eXBlLCBzaXplX29yX2luaXRpYWxpemVyLCBsb2NrPWxvY2spCi0KLSMKLSMKLSMKLQotaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6Ci0KLSAgICBkZWYgc2V0X2V4ZWN1dGFibGUoZXhlY3V0YWJsZSk6Ci0gICAgICAgICcnJwotICAgICAgICBTZXRzIHRoZSBwYXRoIHRvIGEgcHl0aG9uLmV4ZSBvciBweXRob253LmV4ZSBiaW5hcnkgdXNlZCB0byBydW4KLSAgICAgICAgY2hpbGQgcHJvY2Vzc2VzIG9uIFdpbmRvd3MgaW5zdGVhZCBvZiBzeXMuZXhlY3V0YWJsZS4KLSAgICAgICAgVXNlZnVsIGZvciBwZW9wbGUgZW1iZWRkaW5nIFB5dGhvbi4KLSAgICAgICAgJycnCi0gICAgICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nLmZvcmtpbmcgaW1wb3J0IHNldF9leGVjdXRhYmxlCi0gICAgICAgIHNldF9leGVjdXRhYmxlKGV4ZWN1dGFibGUpCi0KLSAgICBfX2FsbF9fICs9IFsnc2V0X2V4ZWN1dGFibGUnXQoraWYgJ19fbWFpbl9fJyBpbiBzeXMubW9kdWxlczoKKyAgICBzeXMubW9kdWxlc1snX19tcF9tYWluX18nXSA9IHN5cy5tb2R1bGVzWydfX21haW5fXyddCmRpZmYgLS1naXQgYS9MaWIvbXVsdGlwcm9jZXNzaW5nL2Nvbm5lY3Rpb24ucHkgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL2Nvbm5lY3Rpb24ucHkKaW5kZXggMjI1ODlkMC4uMWViMWE4ZCAxMDA2NDQKLS0tIGEvTGliL211bHRpcHJvY2Vzc2luZy9jb25uZWN0aW9uLnB5CisrKyBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvY29ubmVjdGlvbi5weQpAQCAtMTIsMjIgKzEyLDIzIEBACiBpbXBvcnQgaW8KIGltcG9ydCBvcwogaW1wb3J0IHN5cwotaW1wb3J0IHBpY2tsZQotaW1wb3J0IHNlbGVjdAogaW1wb3J0IHNvY2tldAogaW1wb3J0IHN0cnVjdAotaW1wb3J0IGVycm5vCiBpbXBvcnQgdGltZQogaW1wb3J0IHRlbXBmaWxlCiBpbXBvcnQgaXRlcnRvb2xzCiAKIGltcG9ydCBfbXVsdGlwcm9jZXNzaW5nCi1mcm9tIG11bHRpcHJvY2Vzc2luZyBpbXBvcnQgY3VycmVudF9wcm9jZXNzLCBBdXRoZW50aWNhdGlvbkVycm9yLCBCdWZmZXJUb29TaG9ydAotZnJvbSBtdWx0aXByb2Nlc3NpbmcudXRpbCBpbXBvcnQgZ2V0X3RlbXBfZGlyLCBGaW5hbGl6ZSwgc3ViX2RlYnVnLCBkZWJ1ZwotZnJvbSBtdWx0aXByb2Nlc3NpbmcuZm9ya2luZyBpbXBvcnQgRm9ya2luZ1BpY2tsZXIKKworZnJvbSAuIGltcG9ydCByZWR1Y3Rpb24KK2Zyb20gLiBpbXBvcnQgdXRpbAorCitmcm9tIC4gaW1wb3J0IEF1dGhlbnRpY2F0aW9uRXJyb3IsIEJ1ZmZlclRvb1Nob3J0Citmcm9tIC5yZWR1Y3Rpb24gaW1wb3J0IEZvcmtpbmdQaWNrbGVyCisKIHRyeToKICAgICBpbXBvcnQgX3dpbmFwaQotICAgIGZyb20gX3dpbmFwaSBpbXBvcnQgV0FJVF9PQkpFQ1RfMCwgV0FJVF9USU1FT1VULCBJTkZJTklURQorICAgIGZyb20gX3dpbmFwaSBpbXBvcnQgV0FJVF9PQkpFQ1RfMCwgV0FJVF9BQkFORE9ORURfMCwgV0FJVF9USU1FT1VULCBJTkZJTklURQogZXhjZXB0IEltcG9ydEVycm9yOgogICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgogICAgICAgICByYWlzZQpAQCAtNzIsMTAgKzczLDEwIEBACiAgICAgaWYgZmFtaWx5ID09ICdBRl9JTkVUJzoKICAgICAgICAgcmV0dXJuICgnbG9jYWxob3N0JywgMCkKICAgICBlbGlmIGZhbWlseSA9PSAnQUZfVU5JWCc6Ci0gICAgICAgIHJldHVybiB0ZW1wZmlsZS5ta3RlbXAocHJlZml4PSdsaXN0ZW5lci0nLCBkaXI9Z2V0X3RlbXBfZGlyKCkpCisgICAgICAgIHJldHVybiB0ZW1wZmlsZS5ta3RlbXAocHJlZml4PSdsaXN0ZW5lci0nLCBkaXI9dXRpbC5nZXRfdGVtcF9kaXIoKSkKICAgICBlbGlmIGZhbWlseSA9PSAnQUZfUElQRSc6CiAgICAgICAgIHJldHVybiB0ZW1wZmlsZS5ta3RlbXAocHJlZml4PXInXFwuXHBpcGVccHljLSVkLSVkLScgJQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvcy5nZXRwaWQoKSwgbmV4dChfbW1hcF9jb3VudGVyKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9zLmdldHBpZCgpLCBuZXh0KF9tbWFwX2NvdW50ZXIpKSwgZGlyPSIiKQogICAgIGVsc2U6CiAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3VucmVjb2duaXplZCBmYW1pbHknKQogCkBAIC0xMzIsMjIgKzEzMywyMiBAQAogCiAgICAgZGVmIF9jaGVja19jbG9zZWQoc2VsZik6CiAgICAgICAgIGlmIHNlbGYuX2hhbmRsZSBpcyBOb25lOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigiaGFuZGxlIGlzIGNsb3NlZCIpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJoYW5kbGUgaXMgY2xvc2VkIikKIAogICAgIGRlZiBfY2hlY2tfcmVhZGFibGUoc2VsZik6CiAgICAgICAgIGlmIG5vdCBzZWxmLl9yZWFkYWJsZToKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoImNvbm5lY3Rpb24gaXMgd3JpdGUtb25seSIpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJjb25uZWN0aW9uIGlzIHdyaXRlLW9ubHkiKQogCiAgICAgZGVmIF9jaGVja193cml0YWJsZShzZWxmKToKICAgICAgICAgaWYgbm90IHNlbGYuX3dyaXRhYmxlOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigiY29ubmVjdGlvbiBpcyByZWFkLW9ubHkiKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigiY29ubmVjdGlvbiBpcyByZWFkLW9ubHkiKQogCiAgICAgZGVmIF9iYWRfbWVzc2FnZV9sZW5ndGgoc2VsZik6CiAgICAgICAgIGlmIHNlbGYuX3dyaXRhYmxlOgogICAgICAgICAgICAgc2VsZi5fcmVhZGFibGUgPSBGYWxzZQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5jbG9zZSgpCi0gICAgICAgIHJhaXNlIElPRXJyb3IoImJhZCBtZXNzYWdlIGxlbmd0aCIpCisgICAgICAgIHJhaXNlIE9TRXJyb3IoImJhZCBtZXNzYWdlIGxlbmd0aCIpCiAKICAgICBAcHJvcGVydHkKICAgICBkZWYgY2xvc2VkKHNlbGYpOgpAQCAtMjAyLDkgKzIwMyw3IEBACiAgICAgICAgICIiIlNlbmQgYSAocGlja2xhYmxlKSBvYmplY3QiIiIKICAgICAgICAgc2VsZi5fY2hlY2tfY2xvc2VkKCkKICAgICAgICAgc2VsZi5fY2hlY2tfd3JpdGFibGUoKQotICAgICAgICBidWYgPSBpby5CeXRlc0lPKCkKLSAgICAgICAgRm9ya2luZ1BpY2tsZXIoYnVmLCBwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCkuZHVtcChvYmopCi0gICAgICAgIHNlbGYuX3NlbmRfYnl0ZXMoYnVmLmdldGJ1ZmZlcigpKQorICAgICAgICBzZWxmLl9zZW5kX2J5dGVzKEZvcmtpbmdQaWNrbGVyLmR1bXBzKG9iaikpCiAKICAgICBkZWYgcmVjdl9ieXRlcyhzZWxmLCBtYXhsZW5ndGg9Tm9uZSk6CiAgICAgICAgICIiIgpAQCAtMjIxLDcgKzIyMCw3IEBACiAKICAgICBkZWYgcmVjdl9ieXRlc19pbnRvKHNlbGYsIGJ1Ziwgb2Zmc2V0PTApOgogICAgICAgICAiIiIKLSAgICAgICAgUmVjZWl2ZSBieXRlcyBkYXRhIGludG8gYSB3cml0ZWFibGUgYnVmZmVyLWxpa2Ugb2JqZWN0LgorICAgICAgICBSZWNlaXZlIGJ5dGVzIGRhdGEgaW50byBhIHdyaXRlYWJsZSBieXRlcy1saWtlIG9iamVjdC4KICAgICAgICAgUmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVhZC4KICAgICAgICAgIiIiCiAgICAgICAgIHNlbGYuX2NoZWNrX2Nsb3NlZCgpCkBAIC0yNDksNyArMjQ4LDcgQEAKICAgICAgICAgc2VsZi5fY2hlY2tfY2xvc2VkKCkKICAgICAgICAgc2VsZi5fY2hlY2tfcmVhZGFibGUoKQogICAgICAgICBidWYgPSBzZWxmLl9yZWN2X2J5dGVzKCkKLSAgICAgICAgcmV0dXJuIHBpY2tsZS5sb2FkcyhidWYuZ2V0YnVmZmVyKCkpCisgICAgICAgIHJldHVybiBGb3JraW5nUGlja2xlci5sb2FkcyhidWYuZ2V0YnVmZmVyKCkpCiAKICAgICBkZWYgcG9sbChzZWxmLCB0aW1lb3V0PTAuMCk6CiAgICAgICAgICIiIldoZXRoZXIgdGhlcmUgaXMgYW55IGlucHV0IGF2YWlsYWJsZSB0byBiZSByZWFkIiIiCkBAIC0zMTcsNyArMzE2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZgogICAgICAgICAgICAgICAgICAgICAgICAgZWxpZiBlcnIgPT0gX3dpbmFwaS5FUlJPUl9NT1JFX0RBVEE6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2dldF9tb3JlX2RhdGEob3YsIG1heHNpemUpCi0gICAgICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgICAgICAgICBpZiBlLndpbmVycm9yID09IF93aW5hcGkuRVJST1JfQlJPS0VOX1BJUEU6CiAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBFT0ZFcnJvcgogICAgICAgICAgICAgICAgICAgICBlbHNlOgpAQCAtMzg5LDcgKzM4OCw3IEBACiAgICAgICAgICAgICAgICAgaWYgcmVtYWluaW5nID09IHNpemU6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEVPRkVycm9yCiAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigiZ290IGVuZCBvZiBmaWxlIGR1cmluZyBtZXNzYWdlIikKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigiZ290IGVuZCBvZiBmaWxlIGR1cmluZyBtZXNzYWdlIikKICAgICAgICAgICAgIGJ1Zi53cml0ZShjaHVuaykKICAgICAgICAgICAgIHJlbWFpbmluZyAtPSBuCiAgICAgICAgIHJldHVybiBidWYKQEAgLTQ1OSw3ICs0NTgsNyBAQAogICAgICAgICBSZXR1cm5zIGEgYENvbm5lY3Rpb25gIG9iamVjdC4KICAgICAgICAgJycnCiAgICAgICAgIGlmIHNlbGYuX2xpc3RlbmVyIGlzIE5vbmU6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCdsaXN0ZW5lciBpcyBjbG9zZWQnKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcignbGlzdGVuZXIgaXMgY2xvc2VkJykKICAgICAgICAgYyA9IHNlbGYuX2xpc3RlbmVyLmFjY2VwdCgpCiAgICAgICAgIGlmIHNlbGYuX2F1dGhrZXk6CiAgICAgICAgICAgICBkZWxpdmVyX2NoYWxsZW5nZShjLCBzZWxmLl9hdXRoa2V5KQpAQCAtNDcwLDkgKzQ2OSwxMCBAQAogICAgICAgICAnJycKICAgICAgICAgQ2xvc2UgdGhlIGJvdW5kIHNvY2tldCBvciBuYW1lZCBwaXBlIG9mIGBzZWxmYC4KICAgICAgICAgJycnCi0gICAgICAgIGlmIHNlbGYuX2xpc3RlbmVyIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgc2VsZi5fbGlzdGVuZXIuY2xvc2UoKQorICAgICAgICBsaXN0ZW5lciA9IHNlbGYuX2xpc3RlbmVyCisgICAgICAgIGlmIGxpc3RlbmVyIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgc2VsZi5fbGlzdGVuZXIgPSBOb25lCisgICAgICAgICAgICBsaXN0ZW5lci5jbG9zZSgpCiAKICAgICBhZGRyZXNzID0gcHJvcGVydHkobGFtYmRhIHNlbGY6IHNlbGYuX2xpc3RlbmVyLl9hZGRyZXNzKQogICAgIGxhc3RfYWNjZXB0ZWQgPSBwcm9wZXJ0eShsYW1iZGEgc2VsZjogc2VsZi5fbGlzdGVuZXIuX2xhc3RfYWNjZXB0ZWQpCkBAIC01NDUsNyArNTQ1LDkgQEAKICAgICAgICAgICAgIF93aW5hcGkuRklMRV9GTEFHX0ZJUlNUX1BJUEVfSU5TVEFOQ0UsCiAgICAgICAgICAgICBfd2luYXBpLlBJUEVfVFlQRV9NRVNTQUdFIHwgX3dpbmFwaS5QSVBFX1JFQURNT0RFX01FU1NBR0UgfAogICAgICAgICAgICAgX3dpbmFwaS5QSVBFX1dBSVQsCi0gICAgICAgICAgICAxLCBvYnNpemUsIGlic2l6ZSwgX3dpbmFwaS5OTVBXQUlUX1dBSVRfRk9SRVZFUiwgX3dpbmFwaS5OVUxMCisgICAgICAgICAgICAxLCBvYnNpemUsIGlic2l6ZSwgX3dpbmFwaS5OTVBXQUlUX1dBSVRfRk9SRVZFUiwKKyAgICAgICAgICAgICMgZGVmYXVsdCBzZWN1cml0eSBkZXNjcmlwdG9yOiB0aGUgaGFuZGxlIGNhbm5vdCBiZSBpbmhlcml0ZWQKKyAgICAgICAgICAgIF93aW5hcGkuTlVMTAogICAgICAgICAgICAgKQogICAgICAgICBoMiA9IF93aW5hcGkuQ3JlYXRlRmlsZSgKICAgICAgICAgICAgIGFkZHJlc3MsIGFjY2VzcywgMCwgX3dpbmFwaS5OVUxMLCBfd2luYXBpLk9QRU5fRVhJU1RJTkcsCkBAIC01OTAsNyArNTkyLDcgQEAKICAgICAgICAgc2VsZi5fbGFzdF9hY2NlcHRlZCA9IE5vbmUKIAogICAgICAgICBpZiBmYW1pbHkgPT0gJ0FGX1VOSVgnOgotICAgICAgICAgICAgc2VsZi5fdW5saW5rID0gRmluYWxpemUoCisgICAgICAgICAgICBzZWxmLl91bmxpbmsgPSB1dGlsLkZpbmFsaXplKAogICAgICAgICAgICAgICAgIHNlbGYsIG9zLnVubGluaywgYXJncz0oYWRkcmVzcywpLCBleGl0cHJpb3JpdHk9MAogICAgICAgICAgICAgICAgICkKICAgICAgICAgZWxzZToKQEAgLTYwOCw5ICs2MTAsMTMgQEAKICAgICAgICAgcmV0dXJuIENvbm5lY3Rpb24ocy5kZXRhY2goKSkKIAogICAgIGRlZiBjbG9zZShzZWxmKToKLSAgICAgICAgc2VsZi5fc29ja2V0LmNsb3NlKCkKLSAgICAgICAgaWYgc2VsZi5fdW5saW5rIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgc2VsZi5fdW5saW5rKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5fc29ja2V0LmNsb3NlKCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHVubGluayA9IHNlbGYuX3VubGluaworICAgICAgICAgICAgaWYgdW5saW5rIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHNlbGYuX3VubGluayA9IE5vbmUKKyAgICAgICAgICAgICAgICB1bmxpbmsoKQogCiAKIGRlZiBTb2NrZXRDbGllbnQoYWRkcmVzcyk6CkBAIC02MzgsOCArNjQ0LDggQEAKICAgICAgICAgICAgIHNlbGYuX2hhbmRsZV9xdWV1ZSA9IFtzZWxmLl9uZXdfaGFuZGxlKGZpcnN0PVRydWUpXQogCiAgICAgICAgICAgICBzZWxmLl9sYXN0X2FjY2VwdGVkID0gTm9uZQotICAgICAgICAgICAgc3ViX2RlYnVnKCdsaXN0ZW5lciBjcmVhdGVkIHdpdGggYWRkcmVzcz0lcicsIHNlbGYuX2FkZHJlc3MpCi0gICAgICAgICAgICBzZWxmLmNsb3NlID0gRmluYWxpemUoCisgICAgICAgICAgICB1dGlsLnN1Yl9kZWJ1ZygnbGlzdGVuZXIgY3JlYXRlZCB3aXRoIGFkZHJlc3M9JXInLCBzZWxmLl9hZGRyZXNzKQorICAgICAgICAgICAgc2VsZi5jbG9zZSA9IHV0aWwuRmluYWxpemUoCiAgICAgICAgICAgICAgICAgc2VsZiwgUGlwZUxpc3RlbmVyLl9maW5hbGl6ZV9waXBlX2xpc3RlbmVyLAogICAgICAgICAgICAgICAgIGFyZ3M9KHNlbGYuX2hhbmRsZV9xdWV1ZSwgc2VsZi5fYWRkcmVzcyksIGV4aXRwcmlvcml0eT0wCiAgICAgICAgICAgICAgICAgKQpAQCAtNjgxLDcgKzY4Nyw3IEBACiAKICAgICAgICAgQHN0YXRpY21ldGhvZAogICAgICAgICBkZWYgX2ZpbmFsaXplX3BpcGVfbGlzdGVuZXIocXVldWUsIGFkZHJlc3MpOgotICAgICAgICAgICAgc3ViX2RlYnVnKCdjbG9zaW5nIGxpc3RlbmVyIHdpdGggYWRkcmVzcz0lcicsIGFkZHJlc3MpCisgICAgICAgICAgICB1dGlsLnN1Yl9kZWJ1ZygnY2xvc2luZyBsaXN0ZW5lciB3aXRoIGFkZHJlc3M9JXInLCBhZGRyZXNzKQogICAgICAgICAgICAgZm9yIGhhbmRsZSBpbiBxdWV1ZToKICAgICAgICAgICAgICAgICBfd2luYXBpLkNsb3NlSGFuZGxlKGhhbmRsZSkKIApAQCAtNjk4LDcgKzcwNCw3IEBACiAgICAgICAgICAgICAgICAgICAgIDAsIF93aW5hcGkuTlVMTCwgX3dpbmFwaS5PUEVOX0VYSVNUSU5HLAogICAgICAgICAgICAgICAgICAgICBfd2luYXBpLkZJTEVfRkxBR19PVkVSTEFQUEVELCBfd2luYXBpLk5VTEwKICAgICAgICAgICAgICAgICAgICAgKQotICAgICAgICAgICAgZXhjZXB0IFdpbmRvd3NFcnJvciBhcyBlOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgICAgICBpZiBlLndpbmVycm9yIG5vdCBpbiAoX3dpbmFwaS5FUlJPUl9TRU1fVElNRU9VVCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3dpbmFwaS5FUlJPUl9QSVBFX0JVU1kpIG9yIF9jaGVja190aW1lb3V0KHQpOgogICAgICAgICAgICAgICAgICAgICByYWlzZQpAQCAtNzI3LDcgKzczMyw3IEBACiAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoYXV0aGtleSwgYnl0ZXMpCiAgICAgbWVzc2FnZSA9IG9zLnVyYW5kb20oTUVTU0FHRV9MRU5HVEgpCiAgICAgY29ubmVjdGlvbi5zZW5kX2J5dGVzKENIQUxMRU5HRSArIG1lc3NhZ2UpCi0gICAgZGlnZXN0ID0gaG1hYy5uZXcoYXV0aGtleSwgbWVzc2FnZSkuZGlnZXN0KCkKKyAgICBkaWdlc3QgPSBobWFjLm5ldyhhdXRoa2V5LCBtZXNzYWdlLCAnbWQ1JykuZGlnZXN0KCkKICAgICByZXNwb25zZSA9IGNvbm5lY3Rpb24ucmVjdl9ieXRlcygyNTYpICAgICAgICAjIHJlamVjdCBsYXJnZSBtZXNzYWdlCiAgICAgaWYgcmVzcG9uc2UgPT0gZGlnZXN0OgogICAgICAgICBjb25uZWN0aW9uLnNlbmRfYnl0ZXMoV0VMQ09NRSkKQEAgLTc0MSw3ICs3NDcsNyBAQAogICAgIG1lc3NhZ2UgPSBjb25uZWN0aW9uLnJlY3ZfYnl0ZXMoMjU2KSAgICAgICAgICMgcmVqZWN0IGxhcmdlIG1lc3NhZ2UKICAgICBhc3NlcnQgbWVzc2FnZVs6bGVuKENIQUxMRU5HRSldID09IENIQUxMRU5HRSwgJ21lc3NhZ2UgPSAlcicgJSBtZXNzYWdlCiAgICAgbWVzc2FnZSA9IG1lc3NhZ2VbbGVuKENIQUxMRU5HRSk6XQotICAgIGRpZ2VzdCA9IGhtYWMubmV3KGF1dGhrZXksIG1lc3NhZ2UpLmRpZ2VzdCgpCisgICAgZGlnZXN0ID0gaG1hYy5uZXcoYXV0aGtleSwgbWVzc2FnZSwgJ21kNScpLmRpZ2VzdCgpCiAgICAgY29ubmVjdGlvbi5zZW5kX2J5dGVzKGRpZ2VzdCkKICAgICByZXNwb25zZSA9IGNvbm5lY3Rpb24ucmVjdl9ieXRlcygyNTYpICAgICAgICAjIHJlamVjdCBsYXJnZSBtZXNzYWdlCiAgICAgaWYgcmVzcG9uc2UgIT0gV0VMQ09NRToKQEAgLTg0Myw3ICs4NDksNyBAQAogICAgICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgICAgICBvdiwgZXJyID0gX3dpbmFwaS5SZWFkRmlsZShmaWxlbm8oKSwgMCwgVHJ1ZSkKICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKLSAgICAgICAgICAgICAgICAgICAgICAgIGVyciA9IGUud2luZXJyb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIG92LCBlcnIgPSBOb25lLCBlLndpbmVycm9yCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiBlcnIgbm90IGluIF9yZWFkeV9lcnJvcnM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKICAgICAgICAgICAgICAgICAgICAgaWYgZXJyID09IF93aW5hcGkuRVJST1JfSU9fUEVORElORzoKQEAgLTg1Miw3ICs4NTgsMTYgQEAKICAgICAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgICAgICMgSWYgby5maWxlbm8oKSBpcyBhbiBvdmVybGFwcGVkIHBpcGUgaGFuZGxlIGFuZAogICAgICAgICAgICAgICAgICAgICAgICAgIyBlcnIgPT0gMCB0aGVuIHRoZXJlIGlzIGEgemVybyBsZW5ndGggbWVzc2FnZQotICAgICAgICAgICAgICAgICAgICAgICAgIyBpbiB0aGUgcGlwZSwgYnV0IGl0IEhBUyBOT1QgYmVlbiBjb25zdW1lZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICMgaW4gdGhlIHBpcGUsIGJ1dCBpdCBIQVMgTk9UIGJlZW4gY29uc3VtZWQuLi4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG92IGFuZCBzeXMuZ2V0d2luZG93c3ZlcnNpb24oKVs6Ml0gPj0gKDYsIDIpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgLi4uIGV4Y2VwdCBvbiBXaW5kb3dzIDggYW5kIGxhdGVyLCB3aGVyZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgdGhlIG1lc3NhZ2UgSEFTIGJlZW4gY29uc3VtZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfLCBlcnIgPSBvdi5HZXRPdmVybGFwcGVkUmVzdWx0KEZhbHNlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyciA9IGUud2luZXJyb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgZXJyIGFuZCBoYXNhdHRyKG8sICdfZ290X2VtcHR5X21lc3NhZ2UnKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgby5fZ290X2VtcHR5X21lc3NhZ2UgPSBUcnVlCiAgICAgICAgICAgICAgICAgICAgICAgICByZWFkeV9vYmplY3RzLmFkZChvKQogICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dCA9IDAKIApAQCAtODg0LDI4ICs4OTksMTUgQEAKIAogZWxzZToKIAotICAgIGlmIGhhc2F0dHIoc2VsZWN0LCAncG9sbCcpOgotICAgICAgICBkZWYgX3BvbGwoZmRzLCB0aW1lb3V0KToKLSAgICAgICAgICAgIGlmIHRpbWVvdXQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgdGltZW91dCA9IGludCh0aW1lb3V0ICogMTAwMCkgICMgdGltZW91dCBpcyBpbiBtaWxsaXNlY29uZHMKLSAgICAgICAgICAgIGZkX21hcCA9IHt9Ci0gICAgICAgICAgICBwb2xsc3RlciA9IHNlbGVjdC5wb2xsKCkKLSAgICAgICAgICAgIGZvciBmZCBpbiBmZHM6Ci0gICAgICAgICAgICAgICAgcG9sbHN0ZXIucmVnaXN0ZXIoZmQsIHNlbGVjdC5QT0xMSU4pCi0gICAgICAgICAgICAgICAgaWYgaGFzYXR0cihmZCwgJ2ZpbGVubycpOgotICAgICAgICAgICAgICAgICAgICBmZF9tYXBbZmQuZmlsZW5vKCldID0gZmQKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBmZF9tYXBbZmRdID0gZmQKLSAgICAgICAgICAgIGxzID0gW10KLSAgICAgICAgICAgIGZvciBmZCwgZXZlbnQgaW4gcG9sbHN0ZXIucG9sbCh0aW1lb3V0KToKLSAgICAgICAgICAgICAgICBpZiBldmVudCAmIHNlbGVjdC5QT0xMTlZBTDoKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignaW52YWxpZCBmaWxlIGRlc2NyaXB0b3IgJWknICUgZmQpCi0gICAgICAgICAgICAgICAgbHMuYXBwZW5kKGZkX21hcFtmZF0pCi0gICAgICAgICAgICByZXR1cm4gbHMKLSAgICBlbHNlOgotICAgICAgICBkZWYgX3BvbGwoZmRzLCB0aW1lb3V0KToKLSAgICAgICAgICAgIHJldHVybiBzZWxlY3Quc2VsZWN0KGZkcywgW10sIFtdLCB0aW1lb3V0KVswXQorICAgIGltcG9ydCBzZWxlY3RvcnMKIAorICAgICMgcG9sbC9zZWxlY3QgaGF2ZSB0aGUgYWR2YW50YWdlIG9mIG5vdCByZXF1aXJpbmcgYW55IGV4dHJhIGZpbGUKKyAgICAjIGRlc2NyaXB0b3IsIGNvbnRyYXJpbHkgdG8gZXBvbGwva3F1ZXVlIChhbHNvLCB0aGV5IHJlcXVpcmUgYSBzaW5nbGUKKyAgICAjIHN5c2NhbGwpLgorICAgIGlmIGhhc2F0dHIoc2VsZWN0b3JzLCAnUG9sbFNlbGVjdG9yJyk6CisgICAgICAgIF9XYWl0U2VsZWN0b3IgPSBzZWxlY3RvcnMuUG9sbFNlbGVjdG9yCisgICAgZWxzZToKKyAgICAgICAgX1dhaXRTZWxlY3RvciA9IHNlbGVjdG9ycy5TZWxlY3RTZWxlY3RvcgogCiAgICAgZGVmIHdhaXQob2JqZWN0X2xpc3QsIHRpbWVvdXQ9Tm9uZSk6CiAgICAgICAgICcnJwpAQCAtOTEzLDM0ICs5MTUsNTQgQEAKIAogICAgICAgICBSZXR1cm5zIGxpc3Qgb2YgdGhvc2Ugb2JqZWN0cyBpbiBvYmplY3RfbGlzdCB3aGljaCBhcmUgcmVhZHkvcmVhZGFibGUuCiAgICAgICAgICcnJwotICAgICAgICBpZiB0aW1lb3V0IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgaWYgdGltZW91dCA8PSAwOgotICAgICAgICAgICAgICAgIHJldHVybiBfcG9sbChvYmplY3RfbGlzdCwgMCkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgZGVhZGxpbmUgPSB0aW1lLnRpbWUoKSArIHRpbWVvdXQKLSAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICByZXR1cm4gX3BvbGwob2JqZWN0X2xpc3QsIHRpbWVvdXQpCi0gICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgotICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRUlOVFI6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgIHdpdGggX1dhaXRTZWxlY3RvcigpIGFzIHNlbGVjdG9yOgorICAgICAgICAgICAgZm9yIG9iaiBpbiBvYmplY3RfbGlzdDoKKyAgICAgICAgICAgICAgICBzZWxlY3Rvci5yZWdpc3RlcihvYmosIHNlbGVjdG9ycy5FVkVOVF9SRUFEKQorCiAgICAgICAgICAgICBpZiB0aW1lb3V0IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgIHRpbWVvdXQgPSBkZWFkbGluZSAtIHRpbWUudGltZSgpCisgICAgICAgICAgICAgICAgZGVhZGxpbmUgPSB0aW1lLnRpbWUoKSArIHRpbWVvdXQKKworICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICByZWFkeSA9IHNlbGVjdG9yLnNlbGVjdCh0aW1lb3V0KQorICAgICAgICAgICAgICAgIGlmIHJlYWR5OgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gW2tleS5maWxlb2JqIGZvciAoa2V5LCBldmVudHMpIGluIHJlYWR5XQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGlmIHRpbWVvdXQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0ID0gZGVhZGxpbmUgLSB0aW1lLnRpbWUoKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGltZW91dCA8IDA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlYWR5CiAKICMKICMgTWFrZSBjb25uZWN0aW9uIGFuZCBzb2NrZXQgb2JqZWN0cyBzaGFyYWJsZSBpZiBwb3NzaWJsZQogIwogCiBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKLSAgICBmcm9tIC4gaW1wb3J0IHJlZHVjdGlvbgotICAgIEZvcmtpbmdQaWNrbGVyLnJlZ2lzdGVyKHNvY2tldC5zb2NrZXQsIHJlZHVjdGlvbi5yZWR1Y2Vfc29ja2V0KQotICAgIEZvcmtpbmdQaWNrbGVyLnJlZ2lzdGVyKENvbm5lY3Rpb24sIHJlZHVjdGlvbi5yZWR1Y2VfY29ubmVjdGlvbikKLSAgICBGb3JraW5nUGlja2xlci5yZWdpc3RlcihQaXBlQ29ubmVjdGlvbiwgcmVkdWN0aW9uLnJlZHVjZV9waXBlX2Nvbm5lY3Rpb24pCisgICAgZGVmIHJlZHVjZV9jb25uZWN0aW9uKGNvbm4pOgorICAgICAgICBoYW5kbGUgPSBjb25uLmZpbGVubygpCisgICAgICAgIHdpdGggc29ja2V0LmZyb21mZChoYW5kbGUsIHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pIGFzIHM6CisgICAgICAgICAgICBmcm9tIC4gaW1wb3J0IHJlc291cmNlX3NoYXJlcgorICAgICAgICAgICAgZHMgPSByZXNvdXJjZV9zaGFyZXIuRHVwU29ja2V0KHMpCisgICAgICAgICAgICByZXR1cm4gcmVidWlsZF9jb25uZWN0aW9uLCAoZHMsIGNvbm4ucmVhZGFibGUsIGNvbm4ud3JpdGFibGUpCisgICAgZGVmIHJlYnVpbGRfY29ubmVjdGlvbihkcywgcmVhZGFibGUsIHdyaXRhYmxlKToKKyAgICAgICAgc29jayA9IGRzLmRldGFjaCgpCisgICAgICAgIHJldHVybiBDb25uZWN0aW9uKHNvY2suZGV0YWNoKCksIHJlYWRhYmxlLCB3cml0YWJsZSkKKyAgICByZWR1Y3Rpb24ucmVnaXN0ZXIoQ29ubmVjdGlvbiwgcmVkdWNlX2Nvbm5lY3Rpb24pCisKKyAgICBkZWYgcmVkdWNlX3BpcGVfY29ubmVjdGlvbihjb25uKToKKyAgICAgICAgYWNjZXNzID0gKChfd2luYXBpLkZJTEVfR0VORVJJQ19SRUFEIGlmIGNvbm4ucmVhZGFibGUgZWxzZSAwKSB8CisgICAgICAgICAgICAgICAgICAoX3dpbmFwaS5GSUxFX0dFTkVSSUNfV1JJVEUgaWYgY29ubi53cml0YWJsZSBlbHNlIDApKQorICAgICAgICBkaCA9IHJlZHVjdGlvbi5EdXBIYW5kbGUoY29ubi5maWxlbm8oKSwgYWNjZXNzKQorICAgICAgICByZXR1cm4gcmVidWlsZF9waXBlX2Nvbm5lY3Rpb24sIChkaCwgY29ubi5yZWFkYWJsZSwgY29ubi53cml0YWJsZSkKKyAgICBkZWYgcmVidWlsZF9waXBlX2Nvbm5lY3Rpb24oZGgsIHJlYWRhYmxlLCB3cml0YWJsZSk6CisgICAgICAgIGhhbmRsZSA9IGRoLmRldGFjaCgpCisgICAgICAgIHJldHVybiBQaXBlQ29ubmVjdGlvbihoYW5kbGUsIHJlYWRhYmxlLCB3cml0YWJsZSkKKyAgICByZWR1Y3Rpb24ucmVnaXN0ZXIoUGlwZUNvbm5lY3Rpb24sIHJlZHVjZV9waXBlX2Nvbm5lY3Rpb24pCisKIGVsc2U6Ci0gICAgdHJ5OgotICAgICAgICBmcm9tIC4gaW1wb3J0IHJlZHVjdGlvbgotICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAgICAgcGFzcwotICAgIGVsc2U6Ci0gICAgICAgIEZvcmtpbmdQaWNrbGVyLnJlZ2lzdGVyKHNvY2tldC5zb2NrZXQsIHJlZHVjdGlvbi5yZWR1Y2Vfc29ja2V0KQotICAgICAgICBGb3JraW5nUGlja2xlci5yZWdpc3RlcihDb25uZWN0aW9uLCByZWR1Y3Rpb24ucmVkdWNlX2Nvbm5lY3Rpb24pCisgICAgZGVmIHJlZHVjZV9jb25uZWN0aW9uKGNvbm4pOgorICAgICAgICBkZiA9IHJlZHVjdGlvbi5EdXBGZChjb25uLmZpbGVubygpKQorICAgICAgICByZXR1cm4gcmVidWlsZF9jb25uZWN0aW9uLCAoZGYsIGNvbm4ucmVhZGFibGUsIGNvbm4ud3JpdGFibGUpCisgICAgZGVmIHJlYnVpbGRfY29ubmVjdGlvbihkZiwgcmVhZGFibGUsIHdyaXRhYmxlKToKKyAgICAgICAgZmQgPSBkZi5kZXRhY2goKQorICAgICAgICByZXR1cm4gQ29ubmVjdGlvbihmZCwgcmVhZGFibGUsIHdyaXRhYmxlKQorICAgIHJlZHVjdGlvbi5yZWdpc3RlcihDb25uZWN0aW9uLCByZWR1Y2VfY29ubmVjdGlvbikKZGlmZiAtLWdpdCBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvY29udGV4dC5weSBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvY29udGV4dC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Mzg0OWY5Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL211bHRpcHJvY2Vzc2luZy9jb250ZXh0LnB5CkBAIC0wLDAgKzEsMzQ4IEBACitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB0aHJlYWRpbmcKKworZnJvbSAuIGltcG9ydCBwcm9jZXNzCisKK19fYWxsX18gPSBbXSAgICAgICAgICAgICMgdGhpbmdzIGFyZSBjb3BpZWQgZnJvbSBoZXJlIHRvIF9faW5pdF9fLnB5CisKKyMKKyMgRXhjZXB0aW9ucworIworCitjbGFzcyBQcm9jZXNzRXJyb3IoRXhjZXB0aW9uKToKKyAgICBwYXNzCisKK2NsYXNzIEJ1ZmZlclRvb1Nob3J0KFByb2Nlc3NFcnJvcik6CisgICAgcGFzcworCitjbGFzcyBUaW1lb3V0RXJyb3IoUHJvY2Vzc0Vycm9yKToKKyAgICBwYXNzCisKK2NsYXNzIEF1dGhlbnRpY2F0aW9uRXJyb3IoUHJvY2Vzc0Vycm9yKToKKyAgICBwYXNzCisKKyMKKyMgQmFzZSB0eXBlIGZvciBjb250ZXh0cworIworCitjbGFzcyBCYXNlQ29udGV4dChvYmplY3QpOgorCisgICAgUHJvY2Vzc0Vycm9yID0gUHJvY2Vzc0Vycm9yCisgICAgQnVmZmVyVG9vU2hvcnQgPSBCdWZmZXJUb29TaG9ydAorICAgIFRpbWVvdXRFcnJvciA9IFRpbWVvdXRFcnJvcgorICAgIEF1dGhlbnRpY2F0aW9uRXJyb3IgPSBBdXRoZW50aWNhdGlvbkVycm9yCisKKyAgICBjdXJyZW50X3Byb2Nlc3MgPSBzdGF0aWNtZXRob2QocHJvY2Vzcy5jdXJyZW50X3Byb2Nlc3MpCisgICAgYWN0aXZlX2NoaWxkcmVuID0gc3RhdGljbWV0aG9kKHByb2Nlc3MuYWN0aXZlX2NoaWxkcmVuKQorCisgICAgZGVmIGNwdV9jb3VudChzZWxmKToKKyAgICAgICAgJycnUmV0dXJucyB0aGUgbnVtYmVyIG9mIENQVXMgaW4gdGhlIHN5c3RlbScnJworICAgICAgICBudW0gPSBvcy5jcHVfY291bnQoKQorICAgICAgICBpZiBudW0gaXMgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ2Nhbm5vdCBkZXRlcm1pbmUgbnVtYmVyIG9mIGNwdXMnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIG51bQorCisgICAgZGVmIE1hbmFnZXIoc2VsZik6CisgICAgICAgICcnJ1JldHVybnMgYSBtYW5hZ2VyIGFzc29jaWF0ZWQgd2l0aCBhIHJ1bm5pbmcgc2VydmVyIHByb2Nlc3MKKworICAgICAgICBUaGUgbWFuYWdlcnMgbWV0aG9kcyBzdWNoIGFzIGBMb2NrKClgLCBgQ29uZGl0aW9uKClgIGFuZCBgUXVldWUoKWAKKyAgICAgICAgY2FuIGJlIHVzZWQgdG8gY3JlYXRlIHNoYXJlZCBvYmplY3RzLgorICAgICAgICAnJycKKyAgICAgICAgZnJvbSAubWFuYWdlcnMgaW1wb3J0IFN5bmNNYW5hZ2VyCisgICAgICAgIG0gPSBTeW5jTWFuYWdlcihjdHg9c2VsZi5nZXRfY29udGV4dCgpKQorICAgICAgICBtLnN0YXJ0KCkKKyAgICAgICAgcmV0dXJuIG0KKworICAgIGRlZiBQaXBlKHNlbGYsIGR1cGxleD1UcnVlKToKKyAgICAgICAgJycnUmV0dXJucyB0d28gY29ubmVjdGlvbiBvYmplY3QgY29ubmVjdGVkIGJ5IGEgcGlwZScnJworICAgICAgICBmcm9tIC5jb25uZWN0aW9uIGltcG9ydCBQaXBlCisgICAgICAgIHJldHVybiBQaXBlKGR1cGxleCkKKworICAgIGRlZiBMb2NrKHNlbGYpOgorICAgICAgICAnJydSZXR1cm5zIGEgbm9uLXJlY3Vyc2l2ZSBsb2NrIG9iamVjdCcnJworICAgICAgICBmcm9tIC5zeW5jaHJvbml6ZSBpbXBvcnQgTG9jaworICAgICAgICByZXR1cm4gTG9jayhjdHg9c2VsZi5nZXRfY29udGV4dCgpKQorCisgICAgZGVmIFJMb2NrKHNlbGYpOgorICAgICAgICAnJydSZXR1cm5zIGEgcmVjdXJzaXZlIGxvY2sgb2JqZWN0JycnCisgICAgICAgIGZyb20gLnN5bmNocm9uaXplIGltcG9ydCBSTG9jaworICAgICAgICByZXR1cm4gUkxvY2soY3R4PXNlbGYuZ2V0X2NvbnRleHQoKSkKKworICAgIGRlZiBDb25kaXRpb24oc2VsZiwgbG9jaz1Ob25lKToKKyAgICAgICAgJycnUmV0dXJucyBhIGNvbmRpdGlvbiBvYmplY3QnJycKKyAgICAgICAgZnJvbSAuc3luY2hyb25pemUgaW1wb3J0IENvbmRpdGlvbgorICAgICAgICByZXR1cm4gQ29uZGl0aW9uKGxvY2ssIGN0eD1zZWxmLmdldF9jb250ZXh0KCkpCisKKyAgICBkZWYgU2VtYXBob3JlKHNlbGYsIHZhbHVlPTEpOgorICAgICAgICAnJydSZXR1cm5zIGEgc2VtYXBob3JlIG9iamVjdCcnJworICAgICAgICBmcm9tIC5zeW5jaHJvbml6ZSBpbXBvcnQgU2VtYXBob3JlCisgICAgICAgIHJldHVybiBTZW1hcGhvcmUodmFsdWUsIGN0eD1zZWxmLmdldF9jb250ZXh0KCkpCisKKyAgICBkZWYgQm91bmRlZFNlbWFwaG9yZShzZWxmLCB2YWx1ZT0xKToKKyAgICAgICAgJycnUmV0dXJucyBhIGJvdW5kZWQgc2VtYXBob3JlIG9iamVjdCcnJworICAgICAgICBmcm9tIC5zeW5jaHJvbml6ZSBpbXBvcnQgQm91bmRlZFNlbWFwaG9yZQorICAgICAgICByZXR1cm4gQm91bmRlZFNlbWFwaG9yZSh2YWx1ZSwgY3R4PXNlbGYuZ2V0X2NvbnRleHQoKSkKKworICAgIGRlZiBFdmVudChzZWxmKToKKyAgICAgICAgJycnUmV0dXJucyBhbiBldmVudCBvYmplY3QnJycKKyAgICAgICAgZnJvbSAuc3luY2hyb25pemUgaW1wb3J0IEV2ZW50CisgICAgICAgIHJldHVybiBFdmVudChjdHg9c2VsZi5nZXRfY29udGV4dCgpKQorCisgICAgZGVmIEJhcnJpZXIoc2VsZiwgcGFydGllcywgYWN0aW9uPU5vbmUsIHRpbWVvdXQ9Tm9uZSk6CisgICAgICAgICcnJ1JldHVybnMgYSBiYXJyaWVyIG9iamVjdCcnJworICAgICAgICBmcm9tIC5zeW5jaHJvbml6ZSBpbXBvcnQgQmFycmllcgorICAgICAgICByZXR1cm4gQmFycmllcihwYXJ0aWVzLCBhY3Rpb24sIHRpbWVvdXQsIGN0eD1zZWxmLmdldF9jb250ZXh0KCkpCisKKyAgICBkZWYgUXVldWUoc2VsZiwgbWF4c2l6ZT0wKToKKyAgICAgICAgJycnUmV0dXJucyBhIHF1ZXVlIG9iamVjdCcnJworICAgICAgICBmcm9tIC5xdWV1ZXMgaW1wb3J0IFF1ZXVlCisgICAgICAgIHJldHVybiBRdWV1ZShtYXhzaXplLCBjdHg9c2VsZi5nZXRfY29udGV4dCgpKQorCisgICAgZGVmIEpvaW5hYmxlUXVldWUoc2VsZiwgbWF4c2l6ZT0wKToKKyAgICAgICAgJycnUmV0dXJucyBhIHF1ZXVlIG9iamVjdCcnJworICAgICAgICBmcm9tIC5xdWV1ZXMgaW1wb3J0IEpvaW5hYmxlUXVldWUKKyAgICAgICAgcmV0dXJuIEpvaW5hYmxlUXVldWUobWF4c2l6ZSwgY3R4PXNlbGYuZ2V0X2NvbnRleHQoKSkKKworICAgIGRlZiBTaW1wbGVRdWV1ZShzZWxmKToKKyAgICAgICAgJycnUmV0dXJucyBhIHF1ZXVlIG9iamVjdCcnJworICAgICAgICBmcm9tIC5xdWV1ZXMgaW1wb3J0IFNpbXBsZVF1ZXVlCisgICAgICAgIHJldHVybiBTaW1wbGVRdWV1ZShjdHg9c2VsZi5nZXRfY29udGV4dCgpKQorCisgICAgZGVmIFBvb2woc2VsZiwgcHJvY2Vzc2VzPU5vbmUsIGluaXRpYWxpemVyPU5vbmUsIGluaXRhcmdzPSgpLAorICAgICAgICAgICAgIG1heHRhc2tzcGVyY2hpbGQ9Tm9uZSk6CisgICAgICAgICcnJ1JldHVybnMgYSBwcm9jZXNzIHBvb2wgb2JqZWN0JycnCisgICAgICAgIGZyb20gLnBvb2wgaW1wb3J0IFBvb2wKKyAgICAgICAgcmV0dXJuIFBvb2wocHJvY2Vzc2VzLCBpbml0aWFsaXplciwgaW5pdGFyZ3MsIG1heHRhc2tzcGVyY2hpbGQsCisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ9c2VsZi5nZXRfY29udGV4dCgpKQorCisgICAgZGVmIFJhd1ZhbHVlKHNlbGYsIHR5cGVjb2RlX29yX3R5cGUsICphcmdzKToKKyAgICAgICAgJycnUmV0dXJucyBhIHNoYXJlZCBvYmplY3QnJycKKyAgICAgICAgZnJvbSAuc2hhcmVkY3R5cGVzIGltcG9ydCBSYXdWYWx1ZQorICAgICAgICByZXR1cm4gUmF3VmFsdWUodHlwZWNvZGVfb3JfdHlwZSwgKmFyZ3MpCisKKyAgICBkZWYgUmF3QXJyYXkoc2VsZiwgdHlwZWNvZGVfb3JfdHlwZSwgc2l6ZV9vcl9pbml0aWFsaXplcik6CisgICAgICAgICcnJ1JldHVybnMgYSBzaGFyZWQgYXJyYXknJycKKyAgICAgICAgZnJvbSAuc2hhcmVkY3R5cGVzIGltcG9ydCBSYXdBcnJheQorICAgICAgICByZXR1cm4gUmF3QXJyYXkodHlwZWNvZGVfb3JfdHlwZSwgc2l6ZV9vcl9pbml0aWFsaXplcikKKworICAgIGRlZiBWYWx1ZShzZWxmLCB0eXBlY29kZV9vcl90eXBlLCAqYXJncywgbG9jaz1UcnVlKToKKyAgICAgICAgJycnUmV0dXJucyBhIHN5bmNocm9uaXplZCBzaGFyZWQgb2JqZWN0JycnCisgICAgICAgIGZyb20gLnNoYXJlZGN0eXBlcyBpbXBvcnQgVmFsdWUKKyAgICAgICAgcmV0dXJuIFZhbHVlKHR5cGVjb2RlX29yX3R5cGUsICphcmdzLCBsb2NrPWxvY2ssCisgICAgICAgICAgICAgICAgICAgICBjdHg9c2VsZi5nZXRfY29udGV4dCgpKQorCisgICAgZGVmIEFycmF5KHNlbGYsIHR5cGVjb2RlX29yX3R5cGUsIHNpemVfb3JfaW5pdGlhbGl6ZXIsICosIGxvY2s9VHJ1ZSk6CisgICAgICAgICcnJ1JldHVybnMgYSBzeW5jaHJvbml6ZWQgc2hhcmVkIGFycmF5JycnCisgICAgICAgIGZyb20gLnNoYXJlZGN0eXBlcyBpbXBvcnQgQXJyYXkKKyAgICAgICAgcmV0dXJuIEFycmF5KHR5cGVjb2RlX29yX3R5cGUsIHNpemVfb3JfaW5pdGlhbGl6ZXIsIGxvY2s9bG9jaywKKyAgICAgICAgICAgICAgICAgICAgIGN0eD1zZWxmLmdldF9jb250ZXh0KCkpCisKKyAgICBkZWYgZnJlZXplX3N1cHBvcnQoc2VsZik6CisgICAgICAgICcnJ0NoZWNrIHdoZXRoZXIgdGhpcyBpcyBhIGZha2UgZm9ya2VkIHByb2Nlc3MgaW4gYSBmcm96ZW4gZXhlY3V0YWJsZS4KKyAgICAgICAgSWYgc28gdGhlbiBydW4gY29kZSBzcGVjaWZpZWQgYnkgY29tbWFuZGxpbmUgYW5kIGV4aXQuCisgICAgICAgICcnJworICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJyBhbmQgZ2V0YXR0cihzeXMsICdmcm96ZW4nLCBGYWxzZSk6CisgICAgICAgICAgICBmcm9tIC5zcGF3biBpbXBvcnQgZnJlZXplX3N1cHBvcnQKKyAgICAgICAgICAgIGZyZWV6ZV9zdXBwb3J0KCkKKworICAgIGRlZiBnZXRfbG9nZ2VyKHNlbGYpOgorICAgICAgICAnJydSZXR1cm4gcGFja2FnZSBsb2dnZXIgLS0gaWYgaXQgZG9lcyBub3QgYWxyZWFkeSBleGlzdCB0aGVuCisgICAgICAgIGl0IGlzIGNyZWF0ZWQuCisgICAgICAgICcnJworICAgICAgICBmcm9tIC51dGlsIGltcG9ydCBnZXRfbG9nZ2VyCisgICAgICAgIHJldHVybiBnZXRfbG9nZ2VyKCkKKworICAgIGRlZiBsb2dfdG9fc3RkZXJyKHNlbGYsIGxldmVsPU5vbmUpOgorICAgICAgICAnJydUdXJuIG9uIGxvZ2dpbmcgYW5kIGFkZCBhIGhhbmRsZXIgd2hpY2ggcHJpbnRzIHRvIHN0ZGVycicnJworICAgICAgICBmcm9tIC51dGlsIGltcG9ydCBsb2dfdG9fc3RkZXJyCisgICAgICAgIHJldHVybiBsb2dfdG9fc3RkZXJyKGxldmVsKQorCisgICAgZGVmIGFsbG93X2Nvbm5lY3Rpb25fcGlja2xpbmcoc2VsZik6CisgICAgICAgICcnJ0luc3RhbGwgc3VwcG9ydCBmb3Igc2VuZGluZyBjb25uZWN0aW9ucyBhbmQgc29ja2V0cworICAgICAgICBiZXR3ZWVuIHByb2Nlc3NlcworICAgICAgICAnJycKKyAgICAgICAgIyBUaGlzIGlzIHVuZG9jdW1lbnRlZC4gIEluIHByZXZpb3VzIHZlcnNpb25zIG9mIG11bHRpcHJvY2Vzc2luZworICAgICAgICAjIGl0cyBvbmx5IGVmZmVjdCB3YXMgdG8gbWFrZSBzb2NrZXQgb2JqZWN0cyBpbmhlcml0YWJsZSBvbiBXaW5kb3dzLgorICAgICAgICBmcm9tIC4gaW1wb3J0IGNvbm5lY3Rpb24KKworICAgIGRlZiBzZXRfZXhlY3V0YWJsZShzZWxmLCBleGVjdXRhYmxlKToKKyAgICAgICAgJycnU2V0cyB0aGUgcGF0aCB0byBhIHB5dGhvbi5leGUgb3IgcHl0aG9udy5leGUgYmluYXJ5IHVzZWQgdG8gcnVuCisgICAgICAgIGNoaWxkIHByb2Nlc3NlcyBpbnN0ZWFkIG9mIHN5cy5leGVjdXRhYmxlIHdoZW4gdXNpbmcgdGhlICdzcGF3bicKKyAgICAgICAgc3RhcnQgbWV0aG9kLiAgVXNlZnVsIGZvciBwZW9wbGUgZW1iZWRkaW5nIFB5dGhvbi4KKyAgICAgICAgJycnCisgICAgICAgIGZyb20gLnNwYXduIGltcG9ydCBzZXRfZXhlY3V0YWJsZQorICAgICAgICBzZXRfZXhlY3V0YWJsZShleGVjdXRhYmxlKQorCisgICAgZGVmIHNldF9mb3Jrc2VydmVyX3ByZWxvYWQoc2VsZiwgbW9kdWxlX25hbWVzKToKKyAgICAgICAgJycnU2V0IGxpc3Qgb2YgbW9kdWxlIG5hbWVzIHRvIHRyeSB0byBsb2FkIGluIGZvcmtzZXJ2ZXIgcHJvY2Vzcy4KKyAgICAgICAgVGhpcyBpcyByZWFsbHkganVzdCBhIGhpbnQuCisgICAgICAgICcnJworICAgICAgICBmcm9tIC5mb3Jrc2VydmVyIGltcG9ydCBzZXRfZm9ya3NlcnZlcl9wcmVsb2FkCisgICAgICAgIHNldF9mb3Jrc2VydmVyX3ByZWxvYWQobW9kdWxlX25hbWVzKQorCisgICAgZGVmIGdldF9jb250ZXh0KHNlbGYsIG1ldGhvZD1Ob25lKToKKyAgICAgICAgaWYgbWV0aG9kIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gc2VsZgorICAgICAgICB0cnk6CisgICAgICAgICAgICBjdHggPSBfY29uY3JldGVfY29udGV4dHNbbWV0aG9kXQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdjYW5ub3QgZmluZCBjb250ZXh0IGZvciAlcicgJSBtZXRob2QpCisgICAgICAgIGN0eC5fY2hlY2tfYXZhaWxhYmxlKCkKKyAgICAgICAgcmV0dXJuIGN0eAorCisgICAgZGVmIGdldF9zdGFydF9tZXRob2Qoc2VsZiwgYWxsb3dfbm9uZT1GYWxzZSk6CisgICAgICAgIHJldHVybiBzZWxmLl9uYW1lCisKKyAgICBkZWYgc2V0X3N0YXJ0X21ldGhvZChzZWxmLCBtZXRob2Q9Tm9uZSk6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ2Nhbm5vdCBzZXQgc3RhcnQgbWV0aG9kIG9mIGNvbmNyZXRlIGNvbnRleHQnKQorCisgICAgZGVmIF9jaGVja19hdmFpbGFibGUoc2VsZik6CisgICAgICAgIHBhc3MKKworIworIyBUeXBlIG9mIGRlZmF1bHQgY29udGV4dCAtLSB1bmRlcmx5aW5nIGNvbnRleHQgY2FuIGJlIHNldCBhdCBtb3N0IG9uY2UKKyMKKworY2xhc3MgUHJvY2Vzcyhwcm9jZXNzLkJhc2VQcm9jZXNzKToKKyAgICBfc3RhcnRfbWV0aG9kID0gTm9uZQorICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgX1BvcGVuKHByb2Nlc3Nfb2JqKToKKyAgICAgICAgcmV0dXJuIF9kZWZhdWx0X2NvbnRleHQuZ2V0X2NvbnRleHQoKS5Qcm9jZXNzLl9Qb3Blbihwcm9jZXNzX29iaikKKworY2xhc3MgRGVmYXVsdENvbnRleHQoQmFzZUNvbnRleHQpOgorICAgIFByb2Nlc3MgPSBQcm9jZXNzCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29udGV4dCk6CisgICAgICAgIHNlbGYuX2RlZmF1bHRfY29udGV4dCA9IGNvbnRleHQKKyAgICAgICAgc2VsZi5fYWN0dWFsX2NvbnRleHQgPSBOb25lCisKKyAgICBkZWYgZ2V0X2NvbnRleHQoc2VsZiwgbWV0aG9kPU5vbmUpOgorICAgICAgICBpZiBtZXRob2QgaXMgTm9uZToKKyAgICAgICAgICAgIGlmIHNlbGYuX2FjdHVhbF9jb250ZXh0IGlzIE5vbmU6CisgICAgICAgICAgICAgICAgc2VsZi5fYWN0dWFsX2NvbnRleHQgPSBzZWxmLl9kZWZhdWx0X2NvbnRleHQKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9hY3R1YWxfY29udGV4dAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHN1cGVyKCkuZ2V0X2NvbnRleHQobWV0aG9kKQorCisgICAgZGVmIHNldF9zdGFydF9tZXRob2Qoc2VsZiwgbWV0aG9kLCBmb3JjZT1GYWxzZSk6CisgICAgICAgIGlmIHNlbGYuX2FjdHVhbF9jb250ZXh0IGlzIG5vdCBOb25lIGFuZCBub3QgZm9yY2U6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ2NvbnRleHQgaGFzIGFscmVhZHkgYmVlbiBzZXQnKQorICAgICAgICBpZiBtZXRob2QgaXMgTm9uZSBhbmQgZm9yY2U6CisgICAgICAgICAgICBzZWxmLl9hY3R1YWxfY29udGV4dCA9IE5vbmUKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLl9hY3R1YWxfY29udGV4dCA9IHNlbGYuZ2V0X2NvbnRleHQobWV0aG9kKQorCisgICAgZGVmIGdldF9zdGFydF9tZXRob2Qoc2VsZiwgYWxsb3dfbm9uZT1GYWxzZSk6CisgICAgICAgIGlmIHNlbGYuX2FjdHVhbF9jb250ZXh0IGlzIE5vbmU6CisgICAgICAgICAgICBpZiBhbGxvd19ub25lOgorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgICAgICBzZWxmLl9hY3R1YWxfY29udGV4dCA9IHNlbGYuX2RlZmF1bHRfY29udGV4dAorICAgICAgICByZXR1cm4gc2VsZi5fYWN0dWFsX2NvbnRleHQuX25hbWUKKworICAgIGRlZiBnZXRfYWxsX3N0YXJ0X21ldGhvZHMoc2VsZik6CisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgorICAgICAgICAgICAgcmV0dXJuIFsnc3Bhd24nXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZnJvbSAuIGltcG9ydCByZWR1Y3Rpb24KKyAgICAgICAgICAgIGlmIHJlZHVjdGlvbi5IQVZFX1NFTkRfSEFORExFOgorICAgICAgICAgICAgICAgIHJldHVybiBbJ2ZvcmsnLCAnc3Bhd24nLCAnZm9ya3NlcnZlciddCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBbJ2ZvcmsnLCAnc3Bhd24nXQorCitEZWZhdWx0Q29udGV4dC5fX2FsbF9fID0gbGlzdCh4IGZvciB4IGluIGRpcihEZWZhdWx0Q29udGV4dCkgaWYgeFswXSAhPSAnXycpCisKKyMKKyMgQ29udGV4dCB0eXBlcyBmb3IgZml4ZWQgc3RhcnQgbWV0aG9kCisjCisKK2lmIHN5cy5wbGF0Zm9ybSAhPSAnd2luMzInOgorCisgICAgY2xhc3MgRm9ya1Byb2Nlc3MocHJvY2Vzcy5CYXNlUHJvY2Vzcyk6CisgICAgICAgIF9zdGFydF9tZXRob2QgPSAnZm9yaycKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgX1BvcGVuKHByb2Nlc3Nfb2JqKToKKyAgICAgICAgICAgIGZyb20gLnBvcGVuX2ZvcmsgaW1wb3J0IFBvcGVuCisgICAgICAgICAgICByZXR1cm4gUG9wZW4ocHJvY2Vzc19vYmopCisKKyAgICBjbGFzcyBTcGF3blByb2Nlc3MocHJvY2Vzcy5CYXNlUHJvY2Vzcyk6CisgICAgICAgIF9zdGFydF9tZXRob2QgPSAnc3Bhd24nCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIF9Qb3Blbihwcm9jZXNzX29iaik6CisgICAgICAgICAgICBmcm9tIC5wb3Blbl9zcGF3bl9wb3NpeCBpbXBvcnQgUG9wZW4KKyAgICAgICAgICAgIHJldHVybiBQb3Blbihwcm9jZXNzX29iaikKKworICAgIGNsYXNzIEZvcmtTZXJ2ZXJQcm9jZXNzKHByb2Nlc3MuQmFzZVByb2Nlc3MpOgorICAgICAgICBfc3RhcnRfbWV0aG9kID0gJ2ZvcmtzZXJ2ZXInCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIF9Qb3Blbihwcm9jZXNzX29iaik6CisgICAgICAgICAgICBmcm9tIC5wb3Blbl9mb3Jrc2VydmVyIGltcG9ydCBQb3BlbgorICAgICAgICAgICAgcmV0dXJuIFBvcGVuKHByb2Nlc3Nfb2JqKQorCisgICAgY2xhc3MgRm9ya0NvbnRleHQoQmFzZUNvbnRleHQpOgorICAgICAgICBfbmFtZSA9ICdmb3JrJworICAgICAgICBQcm9jZXNzID0gRm9ya1Byb2Nlc3MKKworICAgIGNsYXNzIFNwYXduQ29udGV4dChCYXNlQ29udGV4dCk6CisgICAgICAgIF9uYW1lID0gJ3NwYXduJworICAgICAgICBQcm9jZXNzID0gU3Bhd25Qcm9jZXNzCisKKyAgICBjbGFzcyBGb3JrU2VydmVyQ29udGV4dChCYXNlQ29udGV4dCk6CisgICAgICAgIF9uYW1lID0gJ2ZvcmtzZXJ2ZXInCisgICAgICAgIFByb2Nlc3MgPSBGb3JrU2VydmVyUHJvY2VzcworICAgICAgICBkZWYgX2NoZWNrX2F2YWlsYWJsZShzZWxmKToKKyAgICAgICAgICAgIGZyb20gLiBpbXBvcnQgcmVkdWN0aW9uCisgICAgICAgICAgICBpZiBub3QgcmVkdWN0aW9uLkhBVkVfU0VORF9IQU5ETEU6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignZm9ya3NlcnZlciBzdGFydCBtZXRob2Qgbm90IGF2YWlsYWJsZScpCisKKyAgICBfY29uY3JldGVfY29udGV4dHMgPSB7CisgICAgICAgICdmb3JrJzogRm9ya0NvbnRleHQoKSwKKyAgICAgICAgJ3NwYXduJzogU3Bhd25Db250ZXh0KCksCisgICAgICAgICdmb3Jrc2VydmVyJzogRm9ya1NlcnZlckNvbnRleHQoKSwKKyAgICB9CisgICAgX2RlZmF1bHRfY29udGV4dCA9IERlZmF1bHRDb250ZXh0KF9jb25jcmV0ZV9jb250ZXh0c1snZm9yayddKQorCitlbHNlOgorCisgICAgY2xhc3MgU3Bhd25Qcm9jZXNzKHByb2Nlc3MuQmFzZVByb2Nlc3MpOgorICAgICAgICBfc3RhcnRfbWV0aG9kID0gJ3NwYXduJworICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBfUG9wZW4ocHJvY2Vzc19vYmopOgorICAgICAgICAgICAgZnJvbSAucG9wZW5fc3Bhd25fd2luMzIgaW1wb3J0IFBvcGVuCisgICAgICAgICAgICByZXR1cm4gUG9wZW4ocHJvY2Vzc19vYmopCisKKyAgICBjbGFzcyBTcGF3bkNvbnRleHQoQmFzZUNvbnRleHQpOgorICAgICAgICBfbmFtZSA9ICdzcGF3bicKKyAgICAgICAgUHJvY2VzcyA9IFNwYXduUHJvY2VzcworCisgICAgX2NvbmNyZXRlX2NvbnRleHRzID0geworICAgICAgICAnc3Bhd24nOiBTcGF3bkNvbnRleHQoKSwKKyAgICB9CisgICAgX2RlZmF1bHRfY29udGV4dCA9IERlZmF1bHRDb250ZXh0KF9jb25jcmV0ZV9jb250ZXh0c1snc3Bhd24nXSkKKworIworIyBGb3JjZSB0aGUgc3RhcnQgbWV0aG9kCisjCisKK2RlZiBfZm9yY2Vfc3RhcnRfbWV0aG9kKG1ldGhvZCk6CisgICAgX2RlZmF1bHRfY29udGV4dC5fYWN0dWFsX2NvbnRleHQgPSBfY29uY3JldGVfY29udGV4dHNbbWV0aG9kXQorCisjCisjIENoZWNrIHRoYXQgdGhlIGN1cnJlbnQgdGhyZWFkIGlzIHNwYXduaW5nIGEgY2hpbGQgcHJvY2VzcworIworCitfdGxzID0gdGhyZWFkaW5nLmxvY2FsKCkKKworZGVmIGdldF9zcGF3bmluZ19wb3BlbigpOgorICAgIHJldHVybiBnZXRhdHRyKF90bHMsICdzcGF3bmluZ19wb3BlbicsIE5vbmUpCisKK2RlZiBzZXRfc3Bhd25pbmdfcG9wZW4ocG9wZW4pOgorICAgIF90bHMuc3Bhd25pbmdfcG9wZW4gPSBwb3BlbgorCitkZWYgYXNzZXJ0X3NwYXduaW5nKG9iaik6CisgICAgaWYgZ2V0X3NwYXduaW5nX3BvcGVuKCkgaXMgTm9uZToKKyAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKAorICAgICAgICAgICAgJyVzIG9iamVjdHMgc2hvdWxkIG9ubHkgYmUgc2hhcmVkIGJldHdlZW4gcHJvY2Vzc2VzJworICAgICAgICAgICAgJyB0aHJvdWdoIGluaGVyaXRhbmNlJyAlIHR5cGUob2JqKS5fX25hbWVfXworICAgICAgICAgICAgKQpkaWZmIC0tZ2l0IGEvTGliL211bHRpcHJvY2Vzc2luZy9kdW1teS9fX2luaXRfXy5weSBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvZHVtbXkvX19pbml0X18ucHkKaW5kZXggZTMxZmM2MS4uMTM1ZGI3ZiAxMDA2NDQKLS0tIGEvTGliL211bHRpcHJvY2Vzc2luZy9kdW1teS9fX2luaXRfXy5weQorKysgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL2R1bW15L19faW5pdF9fLnB5CkBAIC00LDMyICs0LDcgQEAKICMgbXVsdGlwcm9jZXNzaW5nL2R1bW15L19faW5pdF9fLnB5CiAjCiAjIENvcHlyaWdodCAoYykgMjAwNi0yMDA4LCBSIE91ZGtlcmsKLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotIyBhcmUgbWV0OgotIwotIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBhdXRob3Igbm9yIHRoZSBuYW1lcyBvZiBhbnkgY29udHJpYnV0b3JzIG1heSBiZQotIyAgICB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotIyAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKLSMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0jIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0jIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0jIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0jIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0jIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotIyBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotIyBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0jIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSMgU1VDSCBEQU1BR0UuCisjIExpY2Vuc2VkIHRvIFBTRiB1bmRlciBhIENvbnRyaWJ1dG9yIEFncmVlbWVudC4KICMKIAogX19hbGxfXyA9IFsKQEAgLTQ3LDcgKzIyLDcgQEAKIGltcG9ydCB3ZWFrcmVmCiBpbXBvcnQgYXJyYXkKIAotZnJvbSBtdWx0aXByb2Nlc3NpbmcuZHVtbXkuY29ubmVjdGlvbiBpbXBvcnQgUGlwZQorZnJvbSAuY29ubmVjdGlvbiBpbXBvcnQgUGlwZQogZnJvbSB0aHJlYWRpbmcgaW1wb3J0IExvY2ssIFJMb2NrLCBTZW1hcGhvcmUsIEJvdW5kZWRTZW1hcGhvcmUKIGZyb20gdGhyZWFkaW5nIGltcG9ydCBFdmVudCwgQ29uZGl0aW9uLCBCYXJyaWVyCiBmcm9tIHF1ZXVlIGltcG9ydCBRdWV1ZQpAQCAtMTI5LDcgKzEwNCw3IEBACiAgICAgICAgIHNlbGYuX3ZhbHVlID0gdmFsdWUKICAgICB2YWx1ZSA9IHByb3BlcnR5KF9nZXQsIF9zZXQpCiAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgICAgICByZXR1cm4gJzwlciglciwgJXIpPiclKHR5cGUoc2VsZikuX19uYW1lX18sc2VsZi5fdHlwZWNvZGUsc2VsZi5fdmFsdWUpCisgICAgICAgIHJldHVybiAnPCVzKCVyLCAlcik+JyUodHlwZShzZWxmKS5fX25hbWVfXyxzZWxmLl90eXBlY29kZSxzZWxmLl92YWx1ZSkKIAogZGVmIE1hbmFnZXIoKToKICAgICByZXR1cm4gc3lzLm1vZHVsZXNbX19uYW1lX19dCkBAIC0xMzgsNyArMTEzLDcgQEAKICAgICBwYXNzCiAKIGRlZiBQb29sKHByb2Nlc3Nlcz1Ob25lLCBpbml0aWFsaXplcj1Ob25lLCBpbml0YXJncz0oKSk6Ci0gICAgZnJvbSBtdWx0aXByb2Nlc3NpbmcucG9vbCBpbXBvcnQgVGhyZWFkUG9vbAorICAgIGZyb20gLi5wb29sIGltcG9ydCBUaHJlYWRQb29sCiAgICAgcmV0dXJuIFRocmVhZFBvb2wocHJvY2Vzc2VzLCBpbml0aWFsaXplciwgaW5pdGFyZ3MpCiAKIEpvaW5hYmxlUXVldWUgPSBRdWV1ZQpkaWZmIC0tZ2l0IGEvTGliL211bHRpcHJvY2Vzc2luZy9kdW1teS9jb25uZWN0aW9uLnB5IGIvTGliL211bHRpcHJvY2Vzc2luZy9kdW1teS9jb25uZWN0aW9uLnB5CmluZGV4IDg3NGVjOGUuLjY5NGVmOTYgMTAwNjQ0Ci0tLSBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvZHVtbXkvY29ubmVjdGlvbi5weQorKysgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL2R1bW15L2Nvbm5lY3Rpb24ucHkKQEAgLTQsMzIgKzQsNyBAQAogIyBtdWx0aXByb2Nlc3NpbmcvZHVtbXkvY29ubmVjdGlvbi5weQogIwogIyBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOCwgUiBPdWRrZXJrCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSMgYXJlIG1ldDoKLSMKLSMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0jICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0jIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgYXV0aG9yIG5vciB0aGUgbmFtZXMgb2YgYW55IGNvbnRyaWJ1dG9ycyBtYXkgYmUKLSMgICAgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSMgICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECi0jIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotIyBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotIyBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotIyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSMgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSMgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotIyBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0jIFNVQ0ggREFNQUdFLgorIyBMaWNlbnNlZCB0byBQU0YgdW5kZXIgYSBDb250cmlidXRvciBBZ3JlZW1lbnQuCiAjCiAKIF9fYWxsX18gPSBbICdDbGllbnQnLCAnTGlzdGVuZXInLCAnUGlwZScgXQpkaWZmIC0tZ2l0IGEvTGliL211bHRpcHJvY2Vzc2luZy9mb3JraW5nLnB5IGIvTGliL211bHRpcHJvY2Vzc2luZy9mb3JraW5nLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NDk5NzhhLi4wMDAwMDAwCi0tLSBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvZm9ya2luZy5weQorKysgL2Rldi9udWxsCkBAIC0xLDQ3NCArMCwwIEBACi0jCi0jIE1vZHVsZSBmb3Igc3RhcnRpbmcgYSBwcm9jZXNzIG9iamVjdCB1c2luZyBvcy5mb3JrKCkgb3IgQ3JlYXRlUHJvY2VzcygpCi0jCi0jIG11bHRpcHJvY2Vzc2luZy9mb3JraW5nLnB5Ci0jCi0jIENvcHlyaWdodCAoYykgMjAwNi0yMDA4LCBSIE91ZGtlcmsKLSMgTGljZW5zZWQgdG8gUFNGIHVuZGVyIGEgQ29udHJpYnV0b3IgQWdyZWVtZW50LgotIwotCi1pbXBvcnQgb3MKLWltcG9ydCBzeXMKLWltcG9ydCBzaWduYWwKLWltcG9ydCBlcnJubwotCi1mcm9tIG11bHRpcHJvY2Vzc2luZyBpbXBvcnQgdXRpbCwgcHJvY2VzcwotCi1fX2FsbF9fID0gWydQb3BlbicsICdhc3NlcnRfc3Bhd25pbmcnLCAnZHVwbGljYXRlJywgJ2Nsb3NlJywgJ0ZvcmtpbmdQaWNrbGVyJ10KLQotIwotIyBDaGVjayB0aGF0IHRoZSBjdXJyZW50IHRocmVhZCBpcyBzcGF3bmluZyBhIGNoaWxkIHByb2Nlc3MKLSMKLQotZGVmIGFzc2VydF9zcGF3bmluZyhzZWxmKToKLSAgICBpZiBub3QgUG9wZW4udGhyZWFkX2lzX3NwYXduaW5nKCk6Ci0gICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigKLSAgICAgICAgICAgICclcyBvYmplY3RzIHNob3VsZCBvbmx5IGJlIHNoYXJlZCBiZXR3ZWVuIHByb2Nlc3NlcycKLSAgICAgICAgICAgICcgdGhyb3VnaCBpbmhlcml0YW5jZScgJSB0eXBlKHNlbGYpLl9fbmFtZV9fCi0gICAgICAgICAgICApCi0KLSMKLSMgVHJ5IG1ha2luZyBzb21lIGNhbGxhYmxlIHR5cGVzIHBpY2tsYWJsZQotIwotCi1mcm9tIHBpY2tsZSBpbXBvcnQgUGlja2xlcgotZnJvbSBjb3B5cmVnIGltcG9ydCBkaXNwYXRjaF90YWJsZQotCi1jbGFzcyBGb3JraW5nUGlja2xlcihQaWNrbGVyKToKLSAgICBfZXh0cmFfcmVkdWNlcnMgPSB7fQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncyk6Ci0gICAgICAgIFBpY2tsZXIuX19pbml0X18oc2VsZiwgKmFyZ3MpCi0gICAgICAgIHNlbGYuZGlzcGF0Y2hfdGFibGUgPSBkaXNwYXRjaF90YWJsZS5jb3B5KCkKLSAgICAgICAgc2VsZi5kaXNwYXRjaF90YWJsZS51cGRhdGUoc2VsZi5fZXh0cmFfcmVkdWNlcnMpCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIHJlZ2lzdGVyKGNscywgdHlwZSwgcmVkdWNlKToKLSAgICAgICAgY2xzLl9leHRyYV9yZWR1Y2Vyc1t0eXBlXSA9IHJlZHVjZQotCi1kZWYgX3JlZHVjZV9tZXRob2QobSk6Ci0gICAgaWYgbS5fX3NlbGZfXyBpcyBOb25lOgotICAgICAgICByZXR1cm4gZ2V0YXR0ciwgKG0uX19jbGFzc19fLCBtLl9fZnVuY19fLl9fbmFtZV9fKQotICAgIGVsc2U6Ci0gICAgICAgIHJldHVybiBnZXRhdHRyLCAobS5fX3NlbGZfXywgbS5fX2Z1bmNfXy5fX25hbWVfXykKLWNsYXNzIF9DOgotICAgIGRlZiBmKHNlbGYpOgotICAgICAgICBwYXNzCi1Gb3JraW5nUGlja2xlci5yZWdpc3Rlcih0eXBlKF9DKCkuZiksIF9yZWR1Y2VfbWV0aG9kKQotCi0KLWRlZiBfcmVkdWNlX21ldGhvZF9kZXNjcmlwdG9yKG0pOgotICAgIHJldHVybiBnZXRhdHRyLCAobS5fX29iamNsYXNzX18sIG0uX19uYW1lX18pCi1Gb3JraW5nUGlja2xlci5yZWdpc3Rlcih0eXBlKGxpc3QuYXBwZW5kKSwgX3JlZHVjZV9tZXRob2RfZGVzY3JpcHRvcikKLUZvcmtpbmdQaWNrbGVyLnJlZ2lzdGVyKHR5cGUoaW50Ll9fYWRkX18pLCBfcmVkdWNlX21ldGhvZF9kZXNjcmlwdG9yKQotCi10cnk6Ci0gICAgZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHBhcnRpYWwKLWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICBwYXNzCi1lbHNlOgotICAgIGRlZiBfcmVkdWNlX3BhcnRpYWwocCk6Ci0gICAgICAgIHJldHVybiBfcmVidWlsZF9wYXJ0aWFsLCAocC5mdW5jLCBwLmFyZ3MsIHAua2V5d29yZHMgb3Ige30pCi0gICAgZGVmIF9yZWJ1aWxkX3BhcnRpYWwoZnVuYywgYXJncywga2V5d29yZHMpOgotICAgICAgICByZXR1cm4gcGFydGlhbChmdW5jLCAqYXJncywgKiprZXl3b3JkcykKLSAgICBGb3JraW5nUGlja2xlci5yZWdpc3RlcihwYXJ0aWFsLCBfcmVkdWNlX3BhcnRpYWwpCi0KLSMKLSMgVW5peAotIwotCi1pZiBzeXMucGxhdGZvcm0gIT0gJ3dpbjMyJzoKLSAgICBkdXBsaWNhdGUgPSBvcy5kdXAKLSAgICBjbG9zZSA9IG9zLmNsb3NlCi0KLSAgICAjCi0gICAgIyBXZSBkZWZpbmUgYSBQb3BlbiBjbGFzcyBzaW1pbGFyIHRvIHRoZSBvbmUgZnJvbSBzdWJwcm9jZXNzLCBidXQKLSAgICAjIHdob3NlIGNvbnN0cnVjdG9yIHRha2VzIGEgcHJvY2VzcyBvYmplY3QgYXMgaXRzIGFyZ3VtZW50LgotICAgICMKLQotICAgIGNsYXNzIFBvcGVuKG9iamVjdCk6Ci0KLSAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHByb2Nlc3Nfb2JqKToKLSAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQotICAgICAgICAgICAgc3lzLnN0ZGVyci5mbHVzaCgpCi0gICAgICAgICAgICBzZWxmLnJldHVybmNvZGUgPSBOb25lCi0KLSAgICAgICAgICAgIHIsIHcgPSBvcy5waXBlKCkKLSAgICAgICAgICAgIHNlbGYuc2VudGluZWwgPSByCi0KLSAgICAgICAgICAgIHNlbGYucGlkID0gb3MuZm9yaygpCi0gICAgICAgICAgICBpZiBzZWxmLnBpZCA9PSAwOgotICAgICAgICAgICAgICAgIG9zLmNsb3NlKHIpCi0gICAgICAgICAgICAgICAgaWYgJ3JhbmRvbScgaW4gc3lzLm1vZHVsZXM6Ci0gICAgICAgICAgICAgICAgICAgIGltcG9ydCByYW5kb20KLSAgICAgICAgICAgICAgICAgICAgcmFuZG9tLnNlZWQoKQotICAgICAgICAgICAgICAgIGNvZGUgPSBwcm9jZXNzX29iai5fYm9vdHN0cmFwKCkKLSAgICAgICAgICAgICAgICBvcy5fZXhpdChjb2RlKQotCi0gICAgICAgICAgICAjIGB3YCB3aWxsIGJlIGNsb3NlZCB3aGVuIHRoZSBjaGlsZCBleGl0cywgYXQgd2hpY2ggcG9pbnQgYHJgCi0gICAgICAgICAgICAjIHdpbGwgYmVjb21lIHJlYWR5IGZvciByZWFkaW5nICh1c2luZyBlLmcuIHNlbGVjdCgpKS4KLSAgICAgICAgICAgIG9zLmNsb3NlKHcpCi0gICAgICAgICAgICB1dGlsLkZpbmFsaXplKHNlbGYsIG9zLmNsb3NlLCAociwpKQotCi0gICAgICAgIGRlZiBwb2xsKHNlbGYsIGZsYWc9b3MuV05PSEFORyk6Ci0gICAgICAgICAgICBpZiBzZWxmLnJldHVybmNvZGUgaXMgTm9uZToKLSAgICAgICAgICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBwaWQsIHN0cyA9IG9zLndhaXRwaWQoc2VsZi5waWQsIGZsYWcpCi0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBlOgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FSU5UUjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgICAgICAgICAgICAgIyBDaGlsZCBwcm9jZXNzIG5vdCB5ZXQgY3JlYXRlZC4gU2VlICMxNzMxNzE3Ci0gICAgICAgICAgICAgICAgICAgICAgICAjIGUuZXJybm8gPT0gZXJybm8uRUNISUxEID09IDEwCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQotICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICBpZiBwaWQgPT0gc2VsZi5waWQ6Ci0gICAgICAgICAgICAgICAgICAgIGlmIG9zLldJRlNJR05BTEVEKHN0cyk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJldHVybmNvZGUgPSAtb3MuV1RFUk1TSUcoc3RzKQotICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IG9zLldJRkVYSVRFRChzdHMpCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJldHVybmNvZGUgPSBvcy5XRVhJVFNUQVRVUyhzdHMpCi0gICAgICAgICAgICByZXR1cm4gc2VsZi5yZXR1cm5jb2RlCi0KLSAgICAgICAgZGVmIHdhaXQoc2VsZiwgdGltZW91dD1Ob25lKToKLSAgICAgICAgICAgIGlmIHNlbGYucmV0dXJuY29kZSBpcyBOb25lOgotICAgICAgICAgICAgICAgIGlmIHRpbWVvdXQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nLmNvbm5lY3Rpb24gaW1wb3J0IHdhaXQKLSAgICAgICAgICAgICAgICAgICAgaWYgbm90IHdhaXQoW3NlbGYuc2VudGluZWxdLCB0aW1lb3V0KToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25lCi0gICAgICAgICAgICAgICAgIyBUaGlzIHNob3VsZG4ndCBibG9jayBpZiB3YWl0KCkgcmV0dXJuZWQgc3VjY2Vzc2Z1bGx5LgotICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnBvbGwob3MuV05PSEFORyBpZiB0aW1lb3V0ID09IDAuMCBlbHNlIDApCi0gICAgICAgICAgICByZXR1cm4gc2VsZi5yZXR1cm5jb2RlCi0KLSAgICAgICAgZGVmIHRlcm1pbmF0ZShzZWxmKToKLSAgICAgICAgICAgIGlmIHNlbGYucmV0dXJuY29kZSBpcyBOb25lOgotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgb3Mua2lsbChzZWxmLnBpZCwgc2lnbmFsLlNJR1RFUk0pCi0gICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgIGlmIHNlbGYud2FpdCh0aW1lb3V0PTAuMSkgaXMgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgdGhyZWFkX2lzX3NwYXduaW5nKCk6Ci0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLQotIwotIyBXaW5kb3dzCi0jCi0KLWVsc2U6Ci0gICAgaW1wb3J0IF90aHJlYWQKLSAgICBpbXBvcnQgbXN2Y3J0Ci0gICAgaW1wb3J0IF93aW5hcGkKLQotICAgIGZyb20gcGlja2xlIGltcG9ydCBsb2FkLCBISUdIRVNUX1BST1RPQ09MCi0KLSAgICBkZWYgZHVtcChvYmosIGZpbGUsIHByb3RvY29sPU5vbmUpOgotICAgICAgICBGb3JraW5nUGlja2xlcihmaWxlLCBwcm90b2NvbCkuZHVtcChvYmopCi0KLSAgICAjCi0gICAgIwotICAgICMKLQotICAgIFRFUk1JTkFURSA9IDB4MTAwMDAKLSAgICBXSU5FWEUgPSAoc3lzLnBsYXRmb3JtID09ICd3aW4zMicgYW5kIGdldGF0dHIoc3lzLCAnZnJvemVuJywgRmFsc2UpKQotICAgIFdJTlNFUlZJQ0UgPSBzeXMuZXhlY3V0YWJsZS5sb3dlcigpLmVuZHN3aXRoKCJweXRob25zZXJ2aWNlLmV4ZSIpCi0KLSAgICBjbG9zZSA9IF93aW5hcGkuQ2xvc2VIYW5kbGUKLQotICAgICMKLSAgICAjIF9weXRob25fZXhlIGlzIHRoZSBhc3N1bWVkIHBhdGggdG8gdGhlIHB5dGhvbiBleGVjdXRhYmxlLgotICAgICMgUGVvcGxlIGVtYmVkZGluZyBQeXRob24gd2FudCB0byBtb2RpZnkgaXQuCi0gICAgIwotCi0gICAgaWYgV0lOU0VSVklDRToKLSAgICAgICAgX3B5dGhvbl9leGUgPSBvcy5wYXRoLmpvaW4oc3lzLmV4ZWNfcHJlZml4LCAncHl0aG9uLmV4ZScpCi0gICAgZWxzZToKLSAgICAgICAgX3B5dGhvbl9leGUgPSBzeXMuZXhlY3V0YWJsZQotCi0gICAgZGVmIHNldF9leGVjdXRhYmxlKGV4ZSk6Ci0gICAgICAgIGdsb2JhbCBfcHl0aG9uX2V4ZQotICAgICAgICBfcHl0aG9uX2V4ZSA9IGV4ZQotCi0gICAgIwotICAgICMKLSAgICAjCi0KLSAgICBkZWYgZHVwbGljYXRlKGhhbmRsZSwgdGFyZ2V0X3Byb2Nlc3M9Tm9uZSwgaW5oZXJpdGFibGU9RmFsc2UpOgotICAgICAgICBpZiB0YXJnZXRfcHJvY2VzcyBpcyBOb25lOgotICAgICAgICAgICAgdGFyZ2V0X3Byb2Nlc3MgPSBfd2luYXBpLkdldEN1cnJlbnRQcm9jZXNzKCkKLSAgICAgICAgcmV0dXJuIF93aW5hcGkuRHVwbGljYXRlSGFuZGxlKAotICAgICAgICAgICAgX3dpbmFwaS5HZXRDdXJyZW50UHJvY2VzcygpLCBoYW5kbGUsIHRhcmdldF9wcm9jZXNzLAotICAgICAgICAgICAgMCwgaW5oZXJpdGFibGUsIF93aW5hcGkuRFVQTElDQVRFX1NBTUVfQUNDRVNTCi0gICAgICAgICAgICApCi0KLSAgICAjCi0gICAgIyBXZSBkZWZpbmUgYSBQb3BlbiBjbGFzcyBzaW1pbGFyIHRvIHRoZSBvbmUgZnJvbSBzdWJwcm9jZXNzLCBidXQKLSAgICAjIHdob3NlIGNvbnN0cnVjdG9yIHRha2VzIGEgcHJvY2VzcyBvYmplY3QgYXMgaXRzIGFyZ3VtZW50LgotICAgICMKLQotICAgIGNsYXNzIFBvcGVuKG9iamVjdCk6Ci0gICAgICAgICcnJwotICAgICAgICBTdGFydCBhIHN1YnByb2Nlc3MgdG8gcnVuIHRoZSBjb2RlIG9mIGEgcHJvY2VzcyBvYmplY3QKLSAgICAgICAgJycnCi0gICAgICAgIF90bHMgPSBfdGhyZWFkLl9sb2NhbCgpCi0KLSAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHByb2Nlc3Nfb2JqKToKLSAgICAgICAgICAgIGNtZCA9ICcgJy5qb2luKCciJXMiJyAlIHggZm9yIHggaW4gZ2V0X2NvbW1hbmRfbGluZSgpKQotICAgICAgICAgICAgcHJlcF9kYXRhID0gZ2V0X3ByZXBhcmF0aW9uX2RhdGEocHJvY2Vzc19vYmouX25hbWUpCi0KLSAgICAgICAgICAgICMgY3JlYXRlIHBpcGUgZm9yIGNvbW11bmljYXRpb24gd2l0aCBjaGlsZAotICAgICAgICAgICAgcmZkLCB3ZmQgPSBvcy5waXBlKCkKLQotICAgICAgICAgICAgIyBnZXQgaGFuZGxlIGZvciByZWFkIGVuZCBvZiB0aGUgcGlwZSBhbmQgbWFrZSBpdCBpbmhlcml0YWJsZQotICAgICAgICAgICAgcmhhbmRsZSA9IGR1cGxpY2F0ZShtc3ZjcnQuZ2V0X29zZmhhbmRsZShyZmQpLCBpbmhlcml0YWJsZT1UcnVlKQotICAgICAgICAgICAgb3MuY2xvc2UocmZkKQotCi0gICAgICAgICAgICB3aXRoIG9wZW4od2ZkLCAnd2InLCBjbG9zZWZkPVRydWUpIGFzIHRvX2NoaWxkOgotICAgICAgICAgICAgICAgICMgc3RhcnQgcHJvY2VzcwotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgaHAsIGh0LCBwaWQsIHRpZCA9IF93aW5hcGkuQ3JlYXRlUHJvY2VzcygKLSAgICAgICAgICAgICAgICAgICAgICAgIF9weXRob25fZXhlLCBjbWQgKyAoJyAlcycgJSByaGFuZGxlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUsIE5vbmUsIDEsIDAsIE5vbmUsIE5vbmUsIE5vbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICkKLSAgICAgICAgICAgICAgICAgICAgX3dpbmFwaS5DbG9zZUhhbmRsZShodCkKLSAgICAgICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgICAgICBjbG9zZShyaGFuZGxlKQotCi0gICAgICAgICAgICAgICAgIyBzZXQgYXR0cmlidXRlcyBvZiBzZWxmCi0gICAgICAgICAgICAgICAgc2VsZi5waWQgPSBwaWQKLSAgICAgICAgICAgICAgICBzZWxmLnJldHVybmNvZGUgPSBOb25lCi0gICAgICAgICAgICAgICAgc2VsZi5faGFuZGxlID0gaHAKLSAgICAgICAgICAgICAgICBzZWxmLnNlbnRpbmVsID0gaW50KGhwKQotICAgICAgICAgICAgICAgIHV0aWwuRmluYWxpemUoc2VsZiwgX3dpbmFwaS5DbG9zZUhhbmRsZSwgKHNlbGYuc2VudGluZWwsKSkKLQotICAgICAgICAgICAgICAgICMgc2VuZCBpbmZvcm1hdGlvbiB0byBjaGlsZAotICAgICAgICAgICAgICAgIFBvcGVuLl90bHMucHJvY2Vzc19oYW5kbGUgPSBpbnQoaHApCi0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBkdW1wKHByZXBfZGF0YSwgdG9fY2hpbGQsIEhJR0hFU1RfUFJPVE9DT0wpCi0gICAgICAgICAgICAgICAgICAgIGR1bXAocHJvY2Vzc19vYmosIHRvX2NoaWxkLCBISUdIRVNUX1BST1RPQ09MKQotICAgICAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgICAgIGRlbCBQb3Blbi5fdGxzLnByb2Nlc3NfaGFuZGxlCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgdGhyZWFkX2lzX3NwYXduaW5nKCk6Ci0gICAgICAgICAgICByZXR1cm4gZ2V0YXR0cihQb3Blbi5fdGxzLCAncHJvY2Vzc19oYW5kbGUnLCBOb25lKSBpcyBub3QgTm9uZQotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGR1cGxpY2F0ZV9mb3JfY2hpbGQoaGFuZGxlKToKLSAgICAgICAgICAgIHJldHVybiBkdXBsaWNhdGUoaGFuZGxlLCBQb3Blbi5fdGxzLnByb2Nlc3NfaGFuZGxlKQotCi0gICAgICAgIGRlZiB3YWl0KHNlbGYsIHRpbWVvdXQ9Tm9uZSk6Ci0gICAgICAgICAgICBpZiBzZWxmLnJldHVybmNvZGUgaXMgTm9uZToKLSAgICAgICAgICAgICAgICBpZiB0aW1lb3V0IGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgIG1zZWNzID0gX3dpbmFwaS5JTkZJTklURQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIG1zZWNzID0gbWF4KDAsIGludCh0aW1lb3V0ICogMTAwMCArIDAuNSkpCi0KLSAgICAgICAgICAgICAgICByZXMgPSBfd2luYXBpLldhaXRGb3JTaW5nbGVPYmplY3QoaW50KHNlbGYuX2hhbmRsZSksIG1zZWNzKQotICAgICAgICAgICAgICAgIGlmIHJlcyA9PSBfd2luYXBpLldBSVRfT0JKRUNUXzA6Ci0gICAgICAgICAgICAgICAgICAgIGNvZGUgPSBfd2luYXBpLkdldEV4aXRDb2RlUHJvY2VzcyhzZWxmLl9oYW5kbGUpCi0gICAgICAgICAgICAgICAgICAgIGlmIGNvZGUgPT0gVEVSTUlOQVRFOgotICAgICAgICAgICAgICAgICAgICAgICAgY29kZSA9IC1zaWduYWwuU0lHVEVSTQotICAgICAgICAgICAgICAgICAgICBzZWxmLnJldHVybmNvZGUgPSBjb2RlCi0KLSAgICAgICAgICAgIHJldHVybiBzZWxmLnJldHVybmNvZGUKLQotICAgICAgICBkZWYgcG9sbChzZWxmKToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLndhaXQodGltZW91dD0wKQotCi0gICAgICAgIGRlZiB0ZXJtaW5hdGUoc2VsZik6Ci0gICAgICAgICAgICBpZiBzZWxmLnJldHVybmNvZGUgaXMgTm9uZToKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIF93aW5hcGkuVGVybWluYXRlUHJvY2VzcyhpbnQoc2VsZi5faGFuZGxlKSwgVEVSTUlOQVRFKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgotICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLndhaXQodGltZW91dD0xLjApIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgICAgICByYWlzZQotCi0gICAgIwotICAgICMKLSAgICAjCi0KLSAgICBkZWYgaXNfZm9ya2luZyhhcmd2KToKLSAgICAgICAgJycnCi0gICAgICAgIFJldHVybiB3aGV0aGVyIGNvbW1hbmRsaW5lIGluZGljYXRlcyB3ZSBhcmUgZm9ya2luZwotICAgICAgICAnJycKLSAgICAgICAgaWYgbGVuKGFyZ3YpID49IDIgYW5kIGFyZ3ZbMV0gPT0gJy0tbXVsdGlwcm9jZXNzaW5nLWZvcmsnOgotICAgICAgICAgICAgYXNzZXJ0IGxlbihhcmd2KSA9PSAzCi0gICAgICAgICAgICByZXR1cm4gVHJ1ZQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0KLQotICAgIGRlZiBmcmVlemVfc3VwcG9ydCgpOgotICAgICAgICAnJycKLSAgICAgICAgUnVuIGNvZGUgZm9yIHByb2Nlc3Mgb2JqZWN0IGlmIHRoaXMgaW4gbm90IHRoZSBtYWluIHByb2Nlc3MKLSAgICAgICAgJycnCi0gICAgICAgIGlmIGlzX2Zvcmtpbmcoc3lzLmFyZ3YpOgotICAgICAgICAgICAgbWFpbigpCi0gICAgICAgICAgICBzeXMuZXhpdCgpCi0KLQotICAgIGRlZiBnZXRfY29tbWFuZF9saW5lKCk6Ci0gICAgICAgICcnJwotICAgICAgICBSZXR1cm5zIHByZWZpeCBvZiBjb21tYW5kIGxpbmUgdXNlZCBmb3Igc3Bhd25pbmcgYSBjaGlsZCBwcm9jZXNzCi0gICAgICAgICcnJwotICAgICAgICBpZiBnZXRhdHRyKHByb2Nlc3MuY3VycmVudF9wcm9jZXNzKCksICdfaW5oZXJpdGluZycsIEZhbHNlKToKLSAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignJycKLSAgICAgICAgICAgIEF0dGVtcHQgdG8gc3RhcnQgYSBuZXcgcHJvY2VzcyBiZWZvcmUgdGhlIGN1cnJlbnQgcHJvY2VzcwotICAgICAgICAgICAgaGFzIGZpbmlzaGVkIGl0cyBib290c3RyYXBwaW5nIHBoYXNlLgotCi0gICAgICAgICAgICBUaGlzIHByb2JhYmx5IG1lYW5zIHRoYXQgeW91IGFyZSBvbiBXaW5kb3dzIGFuZCB5b3UgaGF2ZQotICAgICAgICAgICAgZm9yZ290dGVuIHRvIHVzZSB0aGUgcHJvcGVyIGlkaW9tIGluIHRoZSBtYWluIG1vZHVsZToKLQotICAgICAgICAgICAgICAgIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgICAgICAgICAgICAgICAgIGZyZWV6ZV9zdXBwb3J0KCkKLSAgICAgICAgICAgICAgICAgICAgLi4uCi0KLSAgICAgICAgICAgIFRoZSAiZnJlZXplX3N1cHBvcnQoKSIgbGluZSBjYW4gYmUgb21pdHRlZCBpZiB0aGUgcHJvZ3JhbQotICAgICAgICAgICAgaXMgbm90IGdvaW5nIHRvIGJlIGZyb3plbiB0byBwcm9kdWNlIGEgV2luZG93cyBleGVjdXRhYmxlLicnJykKLQotICAgICAgICBpZiBnZXRhdHRyKHN5cywgJ2Zyb3plbicsIEZhbHNlKToKLSAgICAgICAgICAgIHJldHVybiBbc3lzLmV4ZWN1dGFibGUsICctLW11bHRpcHJvY2Vzc2luZy1mb3JrJ10KLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHByb2cgPSAnZnJvbSBtdWx0aXByb2Nlc3NpbmcuZm9ya2luZyBpbXBvcnQgbWFpbjsgbWFpbigpJwotICAgICAgICAgICAgb3B0cyA9IHV0aWwuX2FyZ3NfZnJvbV9pbnRlcnByZXRlcl9mbGFncygpCi0gICAgICAgICAgICByZXR1cm4gW19weXRob25fZXhlXSArIG9wdHMgKyBbJy1jJywgcHJvZywgJy0tbXVsdGlwcm9jZXNzaW5nLWZvcmsnXQotCi0KLSAgICBkZWYgbWFpbigpOgotICAgICAgICAnJycKLSAgICAgICAgUnVuIGNvZGUgc3BlY2lmaWVkIGJ5IGRhdGEgcmVjZWl2ZWQgb3ZlciBwaXBlCi0gICAgICAgICcnJwotICAgICAgICBhc3NlcnQgaXNfZm9ya2luZyhzeXMuYXJndikKLQotICAgICAgICBoYW5kbGUgPSBpbnQoc3lzLmFyZ3ZbLTFdKQotICAgICAgICBmZCA9IG1zdmNydC5vcGVuX29zZmhhbmRsZShoYW5kbGUsIG9zLk9fUkRPTkxZKQotICAgICAgICBmcm9tX3BhcmVudCA9IG9zLmZkb3BlbihmZCwgJ3JiJykKLQotICAgICAgICBwcm9jZXNzLmN1cnJlbnRfcHJvY2VzcygpLl9pbmhlcml0aW5nID0gVHJ1ZQotICAgICAgICBwcmVwYXJhdGlvbl9kYXRhID0gbG9hZChmcm9tX3BhcmVudCkKLSAgICAgICAgcHJlcGFyZShwcmVwYXJhdGlvbl9kYXRhKQotICAgICAgICBzZWxmID0gbG9hZChmcm9tX3BhcmVudCkKLSAgICAgICAgcHJvY2Vzcy5jdXJyZW50X3Byb2Nlc3MoKS5faW5oZXJpdGluZyA9IEZhbHNlCi0KLSAgICAgICAgZnJvbV9wYXJlbnQuY2xvc2UoKQotCi0gICAgICAgIGV4aXRjb2RlID0gc2VsZi5fYm9vdHN0cmFwKCkKLSAgICAgICAgc3lzLmV4aXQoZXhpdGNvZGUpCi0KLQotICAgIGRlZiBnZXRfcHJlcGFyYXRpb25fZGF0YShuYW1lKToKLSAgICAgICAgJycnCi0gICAgICAgIFJldHVybiBpbmZvIGFib3V0IHBhcmVudCBuZWVkZWQgYnkgY2hpbGQgdG8gdW5waWNrbGUgcHJvY2VzcyBvYmplY3QKLSAgICAgICAgJycnCi0gICAgICAgIGZyb20gLnV0aWwgaW1wb3J0IF9sb2dnZXIsIF9sb2dfdG9fc3RkZXJyCi0KLSAgICAgICAgZCA9IGRpY3QoCi0gICAgICAgICAgICBuYW1lPW5hbWUsCi0gICAgICAgICAgICBzeXNfcGF0aD1zeXMucGF0aCwKLSAgICAgICAgICAgIHN5c19hcmd2PXN5cy5hcmd2LAotICAgICAgICAgICAgbG9nX3RvX3N0ZGVycj1fbG9nX3RvX3N0ZGVyciwKLSAgICAgICAgICAgIG9yaWdfZGlyPXByb2Nlc3MuT1JJR0lOQUxfRElSLAotICAgICAgICAgICAgYXV0aGtleT1wcm9jZXNzLmN1cnJlbnRfcHJvY2VzcygpLmF1dGhrZXksCi0gICAgICAgICAgICApCi0KLSAgICAgICAgaWYgX2xvZ2dlciBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIGRbJ2xvZ19sZXZlbCddID0gX2xvZ2dlci5nZXRFZmZlY3RpdmVMZXZlbCgpCi0KLSAgICAgICAgaWYgbm90IFdJTkVYRSBhbmQgbm90IFdJTlNFUlZJQ0U6Ci0gICAgICAgICAgICBtYWluX3BhdGggPSBnZXRhdHRyKHN5cy5tb2R1bGVzWydfX21haW5fXyddLCAnX19maWxlX18nLCBOb25lKQotICAgICAgICAgICAgaWYgbm90IG1haW5fcGF0aCBhbmQgc3lzLmFyZ3ZbMF0gbm90IGluICgnJywgJy1jJyk6Ci0gICAgICAgICAgICAgICAgbWFpbl9wYXRoID0gc3lzLmFyZ3ZbMF0KLSAgICAgICAgICAgIGlmIG1haW5fcGF0aCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2FicyhtYWluX3BhdGgpIGFuZCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLk9SSUdJTkFMX0RJUiBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgbWFpbl9wYXRoID0gb3MucGF0aC5qb2luKHByb2Nlc3MuT1JJR0lOQUxfRElSLCBtYWluX3BhdGgpCi0gICAgICAgICAgICAgICAgZFsnbWFpbl9wYXRoJ10gPSBvcy5wYXRoLm5vcm1wYXRoKG1haW5fcGF0aCkKLQotICAgICAgICByZXR1cm4gZAotCi0jCi0jIFByZXBhcmUgY3VycmVudCBwcm9jZXNzCi0jCi0KLW9sZF9tYWluX21vZHVsZXMgPSBbXQotCi1kZWYgcHJlcGFyZShkYXRhKToKLSAgICAnJycKLSAgICBUcnkgdG8gZ2V0IGN1cnJlbnQgcHJvY2VzcyByZWFkeSB0byB1bnBpY2tsZSBwcm9jZXNzIG9iamVjdAotICAgICcnJwotICAgIG9sZF9tYWluX21vZHVsZXMuYXBwZW5kKHN5cy5tb2R1bGVzWydfX21haW5fXyddKQotCi0gICAgaWYgJ25hbWUnIGluIGRhdGE6Ci0gICAgICAgIHByb2Nlc3MuY3VycmVudF9wcm9jZXNzKCkubmFtZSA9IGRhdGFbJ25hbWUnXQotCi0gICAgaWYgJ2F1dGhrZXknIGluIGRhdGE6Ci0gICAgICAgIHByb2Nlc3MuY3VycmVudF9wcm9jZXNzKCkuX2F1dGhrZXkgPSBkYXRhWydhdXRoa2V5J10KLQotICAgIGlmICdsb2dfdG9fc3RkZXJyJyBpbiBkYXRhIGFuZCBkYXRhWydsb2dfdG9fc3RkZXJyJ106Ci0gICAgICAgIHV0aWwubG9nX3RvX3N0ZGVycigpCi0KLSAgICBpZiAnbG9nX2xldmVsJyBpbiBkYXRhOgotICAgICAgICB1dGlsLmdldF9sb2dnZXIoKS5zZXRMZXZlbChkYXRhWydsb2dfbGV2ZWwnXSkKLQotICAgIGlmICdzeXNfcGF0aCcgaW4gZGF0YToKLSAgICAgICAgc3lzLnBhdGggPSBkYXRhWydzeXNfcGF0aCddCi0KLSAgICBpZiAnc3lzX2FyZ3YnIGluIGRhdGE6Ci0gICAgICAgIHN5cy5hcmd2ID0gZGF0YVsnc3lzX2FyZ3YnXQotCi0gICAgaWYgJ2RpcicgaW4gZGF0YToKLSAgICAgICAgb3MuY2hkaXIoZGF0YVsnZGlyJ10pCi0KLSAgICBpZiAnb3JpZ19kaXInIGluIGRhdGE6Ci0gICAgICAgIHByb2Nlc3MuT1JJR0lOQUxfRElSID0gZGF0YVsnb3JpZ19kaXInXQotCi0gICAgaWYgJ21haW5fcGF0aCcgaW4gZGF0YToKLSAgICAgICAgIyBYWFggKG5jb2dobGFuKTogVGhlIGZvbGxvd2luZyBjb2RlIG1ha2VzIHNldmVyYWwgYm9ndXMKLSAgICAgICAgIyBhc3N1bXB0aW9ucyByZWdhcmRpbmcgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIF9fZmlsZV9fCi0gICAgICAgICMgYW5kIGEgbW9kdWxlJ3MgcmVhbCBuYW1lLiBTZWUgUEVQIDMwMiBhbmQgaXNzdWUgIzEwODQ1Ci0gICAgICAgIG1haW5fcGF0aCA9IGRhdGFbJ21haW5fcGF0aCddCi0gICAgICAgIG1haW5fbmFtZSA9IG9zLnBhdGguc3BsaXRleHQob3MucGF0aC5iYXNlbmFtZShtYWluX3BhdGgpKVswXQotICAgICAgICBpZiBtYWluX25hbWUgPT0gJ19faW5pdF9fJzoKLSAgICAgICAgICAgIG1haW5fbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUob3MucGF0aC5kaXJuYW1lKG1haW5fcGF0aCkpCi0KLSAgICAgICAgaWYgbWFpbl9uYW1lID09ICdfX21haW5fXyc6Ci0gICAgICAgICAgICBtYWluX21vZHVsZSA9IHN5cy5tb2R1bGVzWydfX21haW5fXyddCi0gICAgICAgICAgICBtYWluX21vZHVsZS5fX2ZpbGVfXyA9IG1haW5fcGF0aAotICAgICAgICBlbGlmIG1haW5fbmFtZSAhPSAnaXB5dGhvbic6Ci0gICAgICAgICAgICAjIE1haW4gbW9kdWxlcyBub3QgYWN0dWFsbHkgY2FsbGVkIF9fbWFpbl9fLnB5IG1heQotICAgICAgICAgICAgIyBjb250YWluIGFkZGl0aW9uYWwgY29kZSB0aGF0IHNob3VsZCBzdGlsbCBiZSBleGVjdXRlZAotICAgICAgICAgICAgaW1wb3J0IGltcAotCi0gICAgICAgICAgICBpZiBtYWluX3BhdGggaXMgTm9uZToKLSAgICAgICAgICAgICAgICBkaXJzID0gTm9uZQotICAgICAgICAgICAgZWxpZiBvcy5wYXRoLmJhc2VuYW1lKG1haW5fcGF0aCkuc3RhcnRzd2l0aCgnX19pbml0X18ucHknKToKLSAgICAgICAgICAgICAgICBkaXJzID0gW29zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUobWFpbl9wYXRoKSldCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGRpcnMgPSBbb3MucGF0aC5kaXJuYW1lKG1haW5fcGF0aCldCi0KLSAgICAgICAgICAgIGFzc2VydCBtYWluX25hbWUgbm90IGluIHN5cy5tb2R1bGVzLCBtYWluX25hbWUKLSAgICAgICAgICAgIGZpbGUsIHBhdGhfbmFtZSwgZXRjID0gaW1wLmZpbmRfbW9kdWxlKG1haW5fbmFtZSwgZGlycykKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAjIFdlIHdvdWxkIGxpa2UgdG8gZG8gImltcC5sb2FkX21vZHVsZSgnX19tYWluX18nLCAuLi4pIgotICAgICAgICAgICAgICAgICMgaGVyZS4gIEhvd2V2ZXIsIHRoYXQgd291bGQgY2F1c2UgJ2lmIF9fbmFtZV9fID09Ci0gICAgICAgICAgICAgICAgIyAiX19tYWluX18iJyBjbGF1c2VzIHRvIGJlIGV4ZWN1dGVkLgotICAgICAgICAgICAgICAgIG1haW5fbW9kdWxlID0gaW1wLmxvYWRfbW9kdWxlKAotICAgICAgICAgICAgICAgICAgICAnX19wYXJlbnRzX21haW5fXycsIGZpbGUsIHBhdGhfbmFtZSwgZXRjCi0gICAgICAgICAgICAgICAgICAgICkKLSAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgaWYgZmlsZToKLSAgICAgICAgICAgICAgICAgICAgZmlsZS5jbG9zZSgpCi0KLSAgICAgICAgICAgIHN5cy5tb2R1bGVzWydfX21haW5fXyddID0gbWFpbl9tb2R1bGUKLSAgICAgICAgICAgIG1haW5fbW9kdWxlLl9fbmFtZV9fID0gJ19fbWFpbl9fJwotCi0gICAgICAgICAgICAjIFRyeSB0byBtYWtlIHRoZSBwb3RlbnRpYWxseSBwaWNrbGFibGUgb2JqZWN0cyBpbgotICAgICAgICAgICAgIyBzeXMubW9kdWxlc1snX19tYWluX18nXSByZWFsaXplIHRoZXkgYXJlIGluIHRoZSBtYWluCi0gICAgICAgICAgICAjIG1vZHVsZSAtLSBzb21ld2hhdCB1Z2x5LgotICAgICAgICAgICAgZm9yIG9iaiBpbiBsaXN0KG1haW5fbW9kdWxlLl9fZGljdF9fLnZhbHVlcygpKToKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIGlmIG9iai5fX21vZHVsZV9fID09ICdfX3BhcmVudHNfbWFpbl9fJzoKLSAgICAgICAgICAgICAgICAgICAgICAgIG9iai5fX21vZHVsZV9fID0gJ19fbWFpbl9fJwotICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246Ci0gICAgICAgICAgICAgICAgICAgIHBhc3MKZGlmZiAtLWdpdCBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvZm9ya3NlcnZlci5weSBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvZm9ya3NlcnZlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODc1MTdlCi0tLSAvZGV2L251bGwKKysrIGIvTGliL211bHRpcHJvY2Vzc2luZy9mb3Jrc2VydmVyLnB5CkBAIC0wLDAgKzEsMjY3IEBACitpbXBvcnQgZXJybm8KK2ltcG9ydCBvcworaW1wb3J0IHNlbGVjdG9ycworaW1wb3J0IHNpZ25hbAoraW1wb3J0IHNvY2tldAoraW1wb3J0IHN0cnVjdAoraW1wb3J0IHN5cworaW1wb3J0IHRocmVhZGluZworCitmcm9tIC4gaW1wb3J0IGNvbm5lY3Rpb24KK2Zyb20gLiBpbXBvcnQgcHJvY2VzcworZnJvbSAuIGltcG9ydCByZWR1Y3Rpb24KK2Zyb20gLiBpbXBvcnQgc2VtYXBob3JlX3RyYWNrZXIKK2Zyb20gLiBpbXBvcnQgc3Bhd24KK2Zyb20gLiBpbXBvcnQgdXRpbAorCitfX2FsbF9fID0gWydlbnN1cmVfcnVubmluZycsICdnZXRfaW5oZXJpdGVkX2ZkcycsICdjb25uZWN0X3RvX25ld19wcm9jZXNzJywKKyAgICAgICAgICAgJ3NldF9mb3Jrc2VydmVyX3ByZWxvYWQnXQorCisjCisjCisjCisKK01BWEZEU19UT19TRU5EID0gMjU2CitVTlNJR05FRF9TVFJVQ1QgPSBzdHJ1Y3QuU3RydWN0KCdRJykgICAgICMgbGFyZ2UgZW5vdWdoIGZvciBwaWRfdAorCisjCisjIEZvcmtzZXJ2ZXIgY2xhc3MKKyMKKworY2xhc3MgRm9ya1NlcnZlcihvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLl9mb3Jrc2VydmVyX2FkZHJlc3MgPSBOb25lCisgICAgICAgIHNlbGYuX2ZvcmtzZXJ2ZXJfYWxpdmVfZmQgPSBOb25lCisgICAgICAgIHNlbGYuX2luaGVyaXRlZF9mZHMgPSBOb25lCisgICAgICAgIHNlbGYuX2xvY2sgPSB0aHJlYWRpbmcuTG9jaygpCisgICAgICAgIHNlbGYuX3ByZWxvYWRfbW9kdWxlcyA9IFsnX19tYWluX18nXQorCisgICAgZGVmIHNldF9mb3Jrc2VydmVyX3ByZWxvYWQoc2VsZiwgbW9kdWxlc19uYW1lcyk6CisgICAgICAgICcnJ1NldCBsaXN0IG9mIG1vZHVsZSBuYW1lcyB0byB0cnkgdG8gbG9hZCBpbiBmb3Jrc2VydmVyIHByb2Nlc3MuJycnCisgICAgICAgIGlmIG5vdCBhbGwodHlwZShtb2QpIGlzIHN0ciBmb3IgbW9kIGluIHNlbGYuX3ByZWxvYWRfbW9kdWxlcyk6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ21vZHVsZV9uYW1lcyBtdXN0IGJlIGEgbGlzdCBvZiBzdHJpbmdzJykKKyAgICAgICAgc2VsZi5fcHJlbG9hZF9tb2R1bGVzID0gbW9kdWxlc19uYW1lcworCisgICAgZGVmIGdldF9pbmhlcml0ZWRfZmRzKHNlbGYpOgorICAgICAgICAnJydSZXR1cm4gbGlzdCBvZiBmZHMgaW5oZXJpdGVkIGZyb20gcGFyZW50IHByb2Nlc3MuCisKKyAgICAgICAgVGhpcyByZXR1cm5zIE5vbmUgaWYgdGhlIGN1cnJlbnQgcHJvY2VzcyB3YXMgbm90IHN0YXJ0ZWQgYnkgZm9yaworICAgICAgICBzZXJ2ZXIuCisgICAgICAgICcnJworICAgICAgICByZXR1cm4gc2VsZi5faW5oZXJpdGVkX2ZkcworCisgICAgZGVmIGNvbm5lY3RfdG9fbmV3X3Byb2Nlc3Moc2VsZiwgZmRzKToKKyAgICAgICAgJycnUmVxdWVzdCBmb3Jrc2VydmVyIHRvIGNyZWF0ZSBhIGNoaWxkIHByb2Nlc3MuCisKKyAgICAgICAgUmV0dXJucyBhIHBhaXIgb2YgZmRzIChzdGF0dXNfciwgZGF0YV93KS4gIFRoZSBjYWxsaW5nIHByb2Nlc3MgY2FuIHJlYWQKKyAgICAgICAgdGhlIGNoaWxkIHByb2Nlc3MncyBwaWQgYW5kIChldmVudHVhbGx5KSBpdHMgcmV0dXJuY29kZSBmcm9tIHN0YXR1c19yLgorICAgICAgICBUaGUgY2FsbGluZyBwcm9jZXNzIHNob3VsZCB3cml0ZSB0byBkYXRhX3cgdGhlIHBpY2tsZWQgcHJlcGFyYXRpb24gYW5kCisgICAgICAgIHByb2Nlc3MgZGF0YS4KKyAgICAgICAgJycnCisgICAgICAgIHNlbGYuZW5zdXJlX3J1bm5pbmcoKQorICAgICAgICBpZiBsZW4oZmRzKSArIDQgPj0gTUFYRkRTX1RPX1NFTkQ6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCd0b28gbWFueSBmZHMnKQorICAgICAgICB3aXRoIHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX1VOSVgpIGFzIGNsaWVudDoKKyAgICAgICAgICAgIGNsaWVudC5jb25uZWN0KHNlbGYuX2ZvcmtzZXJ2ZXJfYWRkcmVzcykKKyAgICAgICAgICAgIHBhcmVudF9yLCBjaGlsZF93ID0gb3MucGlwZSgpCisgICAgICAgICAgICBjaGlsZF9yLCBwYXJlbnRfdyA9IG9zLnBpcGUoKQorICAgICAgICAgICAgYWxsZmRzID0gW2NoaWxkX3IsIGNoaWxkX3csIHNlbGYuX2ZvcmtzZXJ2ZXJfYWxpdmVfZmQsCisgICAgICAgICAgICAgICAgICAgICAgc2VtYXBob3JlX3RyYWNrZXIuZ2V0ZmQoKV0KKyAgICAgICAgICAgIGFsbGZkcyArPSBmZHMKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZWR1Y3Rpb24uc2VuZGZkcyhjbGllbnQsIGFsbGZkcykKKyAgICAgICAgICAgICAgICByZXR1cm4gcGFyZW50X3IsIHBhcmVudF93CisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgb3MuY2xvc2UocGFyZW50X3IpCisgICAgICAgICAgICAgICAgb3MuY2xvc2UocGFyZW50X3cpCisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgb3MuY2xvc2UoY2hpbGRfcikKKyAgICAgICAgICAgICAgICBvcy5jbG9zZShjaGlsZF93KQorCisgICAgZGVmIGVuc3VyZV9ydW5uaW5nKHNlbGYpOgorICAgICAgICAnJydNYWtlIHN1cmUgdGhhdCBhIGZvcmsgc2VydmVyIGlzIHJ1bm5pbmcuCisKKyAgICAgICAgVGhpcyBjYW4gYmUgY2FsbGVkIGZyb20gYW55IHByb2Nlc3MuICBOb3RlIHRoYXQgdXN1YWxseSBhIGNoaWxkCisgICAgICAgIHByb2Nlc3Mgd2lsbCBqdXN0IHJldXNlIHRoZSBmb3Jrc2VydmVyIHN0YXJ0ZWQgYnkgaXRzIHBhcmVudCwgc28KKyAgICAgICAgZW5zdXJlX3J1bm5pbmcoKSB3aWxsIGRvIG5vdGhpbmcuCisgICAgICAgICcnJworICAgICAgICB3aXRoIHNlbGYuX2xvY2s6CisgICAgICAgICAgICBzZW1hcGhvcmVfdHJhY2tlci5lbnN1cmVfcnVubmluZygpCisgICAgICAgICAgICBpZiBzZWxmLl9mb3Jrc2VydmVyX2FsaXZlX2ZkIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICAgICBjbWQgPSAoJ2Zyb20gbXVsdGlwcm9jZXNzaW5nLmZvcmtzZXJ2ZXIgaW1wb3J0IG1haW47ICcgKworICAgICAgICAgICAgICAgICAgICdtYWluKCVkLCAlZCwgJXIsICoqJXIpJykKKworICAgICAgICAgICAgaWYgc2VsZi5fcHJlbG9hZF9tb2R1bGVzOgorICAgICAgICAgICAgICAgIGRlc2lyZWRfa2V5cyA9IHsnbWFpbl9wYXRoJywgJ3N5c19wYXRoJ30KKyAgICAgICAgICAgICAgICBkYXRhID0gc3Bhd24uZ2V0X3ByZXBhcmF0aW9uX2RhdGEoJ2lnbm9yZScpCisgICAgICAgICAgICAgICAgZGF0YSA9IGRpY3QoKHgseSkgZm9yICh4LHkpIGluIGRhdGEuaXRlbXMoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHggaW4gZGVzaXJlZF9rZXlzKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBkYXRhID0ge30KKworICAgICAgICAgICAgd2l0aCBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9VTklYKSBhcyBsaXN0ZW5lcjoKKyAgICAgICAgICAgICAgICBhZGRyZXNzID0gY29ubmVjdGlvbi5hcmJpdHJhcnlfYWRkcmVzcygnQUZfVU5JWCcpCisgICAgICAgICAgICAgICAgbGlzdGVuZXIuYmluZChhZGRyZXNzKQorICAgICAgICAgICAgICAgIG9zLmNobW9kKGFkZHJlc3MsIDBvNjAwKQorICAgICAgICAgICAgICAgIGxpc3RlbmVyLmxpc3RlbigxMDApCisKKyAgICAgICAgICAgICAgICAjIGFsbCBjbGllbnQgcHJvY2Vzc2VzIG93biB0aGUgd3JpdGUgZW5kIG9mIHRoZSAiYWxpdmUiIHBpcGU7CisgICAgICAgICAgICAgICAgIyB3aGVuIHRoZXkgYWxsIHRlcm1pbmF0ZSB0aGUgcmVhZCBlbmQgYmVjb21lcyByZWFkeS4KKyAgICAgICAgICAgICAgICBhbGl2ZV9yLCBhbGl2ZV93ID0gb3MucGlwZSgpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBmZHNfdG9fcGFzcyA9IFtsaXN0ZW5lci5maWxlbm8oKSwgYWxpdmVfcl0KKyAgICAgICAgICAgICAgICAgICAgY21kICU9IChsaXN0ZW5lci5maWxlbm8oKSwgYWxpdmVfciwgc2VsZi5fcHJlbG9hZF9tb2R1bGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEpCisgICAgICAgICAgICAgICAgICAgIGV4ZSA9IHNwYXduLmdldF9leGVjdXRhYmxlKCkKKyAgICAgICAgICAgICAgICAgICAgYXJncyA9IFtleGVdICsgdXRpbC5fYXJnc19mcm9tX2ludGVycHJldGVyX2ZsYWdzKCkKKyAgICAgICAgICAgICAgICAgICAgYXJncyArPSBbJy1jJywgY21kXQorICAgICAgICAgICAgICAgICAgICBwaWQgPSB1dGlsLnNwYXdudl9wYXNzZmRzKGV4ZSwgYXJncywgZmRzX3RvX3Bhc3MpCisgICAgICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgICAgICBvcy5jbG9zZShhbGl2ZV93KQorICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgICAgIG9zLmNsb3NlKGFsaXZlX3IpCisgICAgICAgICAgICAgICAgc2VsZi5fZm9ya3NlcnZlcl9hZGRyZXNzID0gYWRkcmVzcworICAgICAgICAgICAgICAgIHNlbGYuX2ZvcmtzZXJ2ZXJfYWxpdmVfZmQgPSBhbGl2ZV93CisKKyMKKyMKKyMKKworZGVmIG1haW4obGlzdGVuZXJfZmQsIGFsaXZlX3IsIHByZWxvYWQsIG1haW5fcGF0aD1Ob25lLCBzeXNfcGF0aD1Ob25lKToKKyAgICAnJydSdW4gZm9ya3NlcnZlci4nJycKKyAgICBpZiBwcmVsb2FkOgorICAgICAgICBpZiAnX19tYWluX18nIGluIHByZWxvYWQgYW5kIG1haW5fcGF0aCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHByb2Nlc3MuY3VycmVudF9wcm9jZXNzKCkuX2luaGVyaXRpbmcgPSBUcnVlCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc3Bhd24uaW1wb3J0X21haW5fcGF0aChtYWluX3BhdGgpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIGRlbCBwcm9jZXNzLmN1cnJlbnRfcHJvY2VzcygpLl9pbmhlcml0aW5nCisgICAgICAgIGZvciBtb2RuYW1lIGluIHByZWxvYWQ6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgX19pbXBvcnRfXyhtb2RuYW1lKQorICAgICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICMgY2xvc2Ugc3lzLnN0ZGluCisgICAgaWYgc3lzLnN0ZGluIGlzIG5vdCBOb25lOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzeXMuc3RkaW4uY2xvc2UoKQorICAgICAgICAgICAgc3lzLnN0ZGluID0gb3Blbihvcy5kZXZudWxsKQorICAgICAgICBleGNlcHQgKE9TRXJyb3IsIFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgcGFzcworCisgICAgIyBpZ25vcmluZyBTSUdDSExEIG1lYW5zIG5vIG5lZWQgdG8gcmVhcCB6b21iaWUgcHJvY2Vzc2VzCisgICAgaGFuZGxlciA9IHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0NITEQsIHNpZ25hbC5TSUdfSUdOKQorICAgIHdpdGggc29ja2V0LnNvY2tldChzb2NrZXQuQUZfVU5JWCwgZmlsZW5vPWxpc3RlbmVyX2ZkKSBhcyBsaXN0ZW5lciwgXAorICAgICAgICAgc2VsZWN0b3JzLkRlZmF1bHRTZWxlY3RvcigpIGFzIHNlbGVjdG9yOgorICAgICAgICBfZm9ya3NlcnZlci5fZm9ya3NlcnZlcl9hZGRyZXNzID0gbGlzdGVuZXIuZ2V0c29ja25hbWUoKQorCisgICAgICAgIHNlbGVjdG9yLnJlZ2lzdGVyKGxpc3RlbmVyLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCkKKyAgICAgICAgc2VsZWN0b3IucmVnaXN0ZXIoYWxpdmVfciwgc2VsZWN0b3JzLkVWRU5UX1JFQUQpCisKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgICAgICByZmRzID0gW2tleS5maWxlb2JqIGZvciAoa2V5LCBldmVudHMpIGluIHNlbGVjdG9yLnNlbGVjdCgpXQorICAgICAgICAgICAgICAgICAgICBpZiByZmRzOgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgICAgIGlmIGFsaXZlX3IgaW4gcmZkczoKKyAgICAgICAgICAgICAgICAgICAgIyBFT0YgYmVjYXVzZSBubyBtb3JlIGNsaWVudCBwcm9jZXNzZXMgbGVmdAorICAgICAgICAgICAgICAgICAgICBhc3NlcnQgb3MucmVhZChhbGl2ZV9yLCAxKSA9PSBiJycKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgU3lzdGVtRXhpdAorCisgICAgICAgICAgICAgICAgYXNzZXJ0IGxpc3RlbmVyIGluIHJmZHMKKyAgICAgICAgICAgICAgICB3aXRoIGxpc3RlbmVyLmFjY2VwdCgpWzBdIGFzIHM6CisgICAgICAgICAgICAgICAgICAgIGNvZGUgPSAxCisgICAgICAgICAgICAgICAgICAgIGlmIG9zLmZvcmsoKSA9PSAwOgorICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9zZXJ2ZV9vbmUocywgbGlzdGVuZXIsIGFsaXZlX3IsIGhhbmRsZXIpCisgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5leGNlcHRob29rKCpzeXMuZXhjX2luZm8oKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLmZsdXNoKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MuX2V4aXQoY29kZSkKKworICAgICAgICAgICAgZXhjZXB0IEludGVycnVwdGVkRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVDT05OQUJPUlRFRDoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKworZGVmIF9zZXJ2ZV9vbmUocywgbGlzdGVuZXIsIGFsaXZlX3IsIGhhbmRsZXIpOgorICAgICMgY2xvc2UgdW5uZWNlc3Nhcnkgc3R1ZmYgYW5kIHJlc2V0IFNJR0NITEQgaGFuZGxlcgorICAgIGxpc3RlbmVyLmNsb3NlKCkKKyAgICBvcy5jbG9zZShhbGl2ZV9yKQorICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0NITEQsIGhhbmRsZXIpCisKKyAgICAjIHJlY2VpdmUgZmRzIGZyb20gcGFyZW50IHByb2Nlc3MKKyAgICBmZHMgPSByZWR1Y3Rpb24ucmVjdmZkcyhzLCBNQVhGRFNfVE9fU0VORCArIDEpCisgICAgcy5jbG9zZSgpCisgICAgYXNzZXJ0IGxlbihmZHMpIDw9IE1BWEZEU19UT19TRU5ECisgICAgKGNoaWxkX3IsIGNoaWxkX3csIF9mb3Jrc2VydmVyLl9mb3Jrc2VydmVyX2FsaXZlX2ZkLAorICAgICBzdGZkLCAqX2ZvcmtzZXJ2ZXIuX2luaGVyaXRlZF9mZHMpID0gZmRzCisgICAgc2VtYXBob3JlX3RyYWNrZXIuX3NlbWFwaG9yZV90cmFja2VyLl9mZCA9IHN0ZmQKKworICAgICMgc2VuZCBwaWQgdG8gY2xpZW50IHByb2Nlc3NlcworICAgIHdyaXRlX3Vuc2lnbmVkKGNoaWxkX3csIG9zLmdldHBpZCgpKQorCisgICAgIyByZXNlZWQgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IKKyAgICBpZiAncmFuZG9tJyBpbiBzeXMubW9kdWxlczoKKyAgICAgICAgaW1wb3J0IHJhbmRvbQorICAgICAgICByYW5kb20uc2VlZCgpCisKKyAgICAjIHJ1biBwcm9jZXNzIG9iamVjdCByZWNlaXZlZCBvdmVyIHBpcGUKKyAgICBjb2RlID0gc3Bhd24uX21haW4oY2hpbGRfcikKKworICAgICMgd3JpdGUgdGhlIGV4aXQgY29kZSB0byB0aGUgcGlwZQorICAgIHdyaXRlX3Vuc2lnbmVkKGNoaWxkX3csIGNvZGUpCisKKyMKKyMgUmVhZCBhbmQgd3JpdGUgdW5zaWduZWQgbnVtYmVycworIworCitkZWYgcmVhZF91bnNpZ25lZChmZCk6CisgICAgZGF0YSA9IGInJworICAgIGxlbmd0aCA9IFVOU0lHTkVEX1NUUlVDVC5zaXplCisgICAgd2hpbGUgbGVuKGRhdGEpIDwgbGVuZ3RoOgorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHMgPSBvcy5yZWFkKGZkLCBsZW5ndGggLSBsZW4oZGF0YSkpCisgICAgICAgICAgICBleGNlcHQgSW50ZXJydXB0ZWRFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGlmIG5vdCBzOgorICAgICAgICAgICAgcmFpc2UgRU9GRXJyb3IoJ3VuZXhwZWN0ZWQgRU9GJykKKyAgICAgICAgZGF0YSArPSBzCisgICAgcmV0dXJuIFVOU0lHTkVEX1NUUlVDVC51bnBhY2soZGF0YSlbMF0KKworZGVmIHdyaXRlX3Vuc2lnbmVkKGZkLCBuKToKKyAgICBtc2cgPSBVTlNJR05FRF9TVFJVQ1QucGFjayhuKQorICAgIHdoaWxlIG1zZzoKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBuYnl0ZXMgPSBvcy53cml0ZShmZCwgbXNnKQorICAgICAgICAgICAgZXhjZXB0IEludGVycnVwdGVkRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBpZiBuYnl0ZXMgPT0gMDoKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignc2hvdWxkIG5vdCBnZXQgaGVyZScpCisgICAgICAgIG1zZyA9IG1zZ1tuYnl0ZXM6XQorCisjCisjCisjCisKK19mb3Jrc2VydmVyID0gRm9ya1NlcnZlcigpCitlbnN1cmVfcnVubmluZyA9IF9mb3Jrc2VydmVyLmVuc3VyZV9ydW5uaW5nCitnZXRfaW5oZXJpdGVkX2ZkcyA9IF9mb3Jrc2VydmVyLmdldF9pbmhlcml0ZWRfZmRzCitjb25uZWN0X3RvX25ld19wcm9jZXNzID0gX2ZvcmtzZXJ2ZXIuY29ubmVjdF90b19uZXdfcHJvY2Vzcworc2V0X2ZvcmtzZXJ2ZXJfcHJlbG9hZCA9IF9mb3Jrc2VydmVyLnNldF9mb3Jrc2VydmVyX3ByZWxvYWQKZGlmZiAtLWdpdCBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvaGVhcC5weSBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvaGVhcC5weQppbmRleCBlNjNmZGI4Li4zNDRhNDVmIDEwMDY0NAotLS0gYS9MaWIvbXVsdGlwcm9jZXNzaW5nL2hlYXAucHkKKysrIGIvTGliL211bHRpcHJvY2Vzc2luZy9oZWFwLnB5CkBAIC0xMSwxMiArMTEsMTIgQEAKIGltcG9ydCBtbWFwCiBpbXBvcnQgb3MKIGltcG9ydCBzeXMKK2ltcG9ydCB0ZW1wZmlsZQogaW1wb3J0IHRocmVhZGluZwotaW1wb3J0IGl0ZXJ0b29scwogCi1pbXBvcnQgX211bHRpcHJvY2Vzc2luZwotZnJvbSBtdWx0aXByb2Nlc3NpbmcudXRpbCBpbXBvcnQgRmluYWxpemUsIGluZm8KLWZyb20gbXVsdGlwcm9jZXNzaW5nLmZvcmtpbmcgaW1wb3J0IGFzc2VydF9zcGF3bmluZworZnJvbSAuIGltcG9ydCBjb250ZXh0Citmcm9tIC4gaW1wb3J0IHJlZHVjdGlvbgorZnJvbSAuIGltcG9ydCB1dGlsCiAKIF9fYWxsX18gPSBbJ0J1ZmZlcldyYXBwZXInXQogCkBAIC0zMCwxNyArMzAsMjUgQEAKIAogICAgIGNsYXNzIEFyZW5hKG9iamVjdCk6CiAKLSAgICAgICAgX2NvdW50ZXIgPSBpdGVydG9vbHMuY291bnQoKQorICAgICAgICBfcmFuZCA9IHRlbXBmaWxlLl9SYW5kb21OYW1lU2VxdWVuY2UoKQogCiAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzaXplKToKICAgICAgICAgICAgIHNlbGYuc2l6ZSA9IHNpemUKLSAgICAgICAgICAgIHNlbGYubmFtZSA9ICdweW0tJWQtJWQnICUgKG9zLmdldHBpZCgpLCBuZXh0KEFyZW5hLl9jb3VudGVyKSkKLSAgICAgICAgICAgIHNlbGYuYnVmZmVyID0gbW1hcC5tbWFwKC0xLCBzZWxmLnNpemUsIHRhZ25hbWU9c2VsZi5uYW1lKQotICAgICAgICAgICAgYXNzZXJ0IF93aW5hcGkuR2V0TGFzdEVycm9yKCkgPT0gMCwgJ3RhZ25hbWUgYWxyZWFkeSBpbiB1c2UnCisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgxMDApOgorICAgICAgICAgICAgICAgIG5hbWUgPSAncHltLSVkLSVzJyAlIChvcy5nZXRwaWQoKSwgbmV4dChzZWxmLl9yYW5kKSkKKyAgICAgICAgICAgICAgICBidWYgPSBtbWFwLm1tYXAoLTEsIHNpemUsIHRhZ25hbWU9bmFtZSkKKyAgICAgICAgICAgICAgICBpZiBfd2luYXBpLkdldExhc3RFcnJvcigpID09IDA6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgIyBXZSBoYXZlIHJlb3BlbmVkIGEgcHJlZXhpc3RpbmcgbW1hcC4KKyAgICAgICAgICAgICAgICBidWYuY2xvc2UoKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZSBGaWxlRXhpc3RzRXJyb3IoJ0Nhbm5vdCBmaW5kIG5hbWUgZm9yIG5ldyBtbWFwJykKKyAgICAgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKKyAgICAgICAgICAgIHNlbGYuYnVmZmVyID0gYnVmCiAgICAgICAgICAgICBzZWxmLl9zdGF0ZSA9IChzZWxmLnNpemUsIHNlbGYubmFtZSkKIAogICAgICAgICBkZWYgX19nZXRzdGF0ZV9fKHNlbGYpOgotICAgICAgICAgICAgYXNzZXJ0X3NwYXduaW5nKHNlbGYpCisgICAgICAgICAgICBjb250ZXh0LmFzc2VydF9zcGF3bmluZyhzZWxmKQogICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3N0YXRlCiAKICAgICAgICAgZGVmIF9fc2V0c3RhdGVfXyhzZWxmLCBzdGF0ZSk6CkBAIC01MiwxMCArNjAsMjggQEAKIAogICAgIGNsYXNzIEFyZW5hKG9iamVjdCk6CiAKLSAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNpemUpOgotICAgICAgICAgICAgc2VsZi5idWZmZXIgPSBtbWFwLm1tYXAoLTEsIHNpemUpCisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzaXplLCBmZD0tMSk6CiAgICAgICAgICAgICBzZWxmLnNpemUgPSBzaXplCi0gICAgICAgICAgICBzZWxmLm5hbWUgPSBOb25lCisgICAgICAgICAgICBzZWxmLmZkID0gZmQKKyAgICAgICAgICAgIGlmIGZkID09IC0xOgorICAgICAgICAgICAgICAgIHNlbGYuZmQsIG5hbWUgPSB0ZW1wZmlsZS5ta3N0ZW1wKAorICAgICAgICAgICAgICAgICAgICAgcHJlZml4PSdweW0tJWQtJyVvcy5nZXRwaWQoKSwgZGlyPXV0aWwuZ2V0X3RlbXBfZGlyKCkpCisgICAgICAgICAgICAgICAgb3MudW5saW5rKG5hbWUpCisgICAgICAgICAgICAgICAgdXRpbC5GaW5hbGl6ZShzZWxmLCBvcy5jbG9zZSwgKHNlbGYuZmQsKSkKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4oc2VsZi5mZCwgJ3diJywgY2xvc2VmZD1GYWxzZSkgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgZi53cml0ZShiJ1wwJypzaXplKQorICAgICAgICAgICAgc2VsZi5idWZmZXIgPSBtbWFwLm1tYXAoc2VsZi5mZCwgc2VsZi5zaXplKQorCisgICAgZGVmIHJlZHVjZV9hcmVuYShhKToKKyAgICAgICAgaWYgYS5mZCA9PSAtMToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0FyZW5hIGlzIHVucGlja2xhYmxlIGJlY2F1c2UgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZm9ya2luZyB3YXMgZW5hYmxlZCB3aGVuIGl0IHdhcyBjcmVhdGVkJykKKyAgICAgICAgcmV0dXJuIHJlYnVpbGRfYXJlbmEsIChhLnNpemUsIHJlZHVjdGlvbi5EdXBGZChhLmZkKSkKKworICAgIGRlZiByZWJ1aWxkX2FyZW5hKHNpemUsIGR1cGZkKToKKyAgICAgICAgcmV0dXJuIEFyZW5hKHNpemUsIGR1cGZkLmRldGFjaCgpKQorCisgICAgcmVkdWN0aW9uLnJlZ2lzdGVyKEFyZW5hLCByZWR1Y2VfYXJlbmEpCiAKICMKICMgQ2xhc3MgYWxsb3dpbmcgYWxsb2NhdGlvbiBvZiBjaHVua3Mgb2YgbWVtb3J5IGZyb20gYXJlbmFzCkBAIC05MCw3ICsxMTYsNyBAQAogICAgICAgICBpZiBpID09IGxlbihzZWxmLl9sZW5ndGhzKToKICAgICAgICAgICAgIGxlbmd0aCA9IHNlbGYuX3JvdW5kdXAobWF4KHNlbGYuX3NpemUsIHNpemUpLCBtbWFwLlBBR0VTSVpFKQogICAgICAgICAgICAgc2VsZi5fc2l6ZSAqPSAyCi0gICAgICAgICAgICBpbmZvKCdhbGxvY2F0aW5nIGEgbmV3IG1tYXAgb2YgbGVuZ3RoICVkJywgbGVuZ3RoKQorICAgICAgICAgICAgdXRpbC5pbmZvKCdhbGxvY2F0aW5nIGEgbmV3IG1tYXAgb2YgbGVuZ3RoICVkJywgbGVuZ3RoKQogICAgICAgICAgICAgYXJlbmEgPSBBcmVuYShsZW5ndGgpCiAgICAgICAgICAgICBzZWxmLl9hcmVuYXMuYXBwZW5kKGFyZW5hKQogICAgICAgICAgICAgcmV0dXJuIChhcmVuYSwgMCwgbGVuZ3RoKQpAQCAtMjE2LDcgKzI0Miw3IEBACiAgICAgICAgIGFzc2VydCAwIDw9IHNpemUgPCBzeXMubWF4c2l6ZQogICAgICAgICBibG9jayA9IEJ1ZmZlcldyYXBwZXIuX2hlYXAubWFsbG9jKHNpemUpCiAgICAgICAgIHNlbGYuX3N0YXRlID0gKGJsb2NrLCBzaXplKQotICAgICAgICBGaW5hbGl6ZShzZWxmLCBCdWZmZXJXcmFwcGVyLl9oZWFwLmZyZWUsIGFyZ3M9KGJsb2NrLCkpCisgICAgICAgIHV0aWwuRmluYWxpemUoc2VsZiwgQnVmZmVyV3JhcHBlci5faGVhcC5mcmVlLCBhcmdzPShibG9jaywpKQogCiAgICAgZGVmIGNyZWF0ZV9tZW1vcnl2aWV3KHNlbGYpOgogICAgICAgICAoYXJlbmEsIHN0YXJ0LCBzdG9wKSwgc2l6ZSA9IHNlbGYuX3N0YXRlCmRpZmYgLS1naXQgYS9MaWIvbXVsdGlwcm9jZXNzaW5nL21hbmFnZXJzLnB5IGIvTGliL211bHRpcHJvY2Vzc2luZy9tYW5hZ2Vycy5weQppbmRleCA5NjA1NmIwLi42NmQ0NmZjIDEwMDY0NAotLS0gYS9MaWIvbXVsdGlwcm9jZXNzaW5nL21hbmFnZXJzLnB5CisrKyBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvbWFuYWdlcnMucHkKQEAgLTE5LDExICsxOSwxNiBAQAogaW1wb3J0IGFycmF5CiBpbXBvcnQgcXVldWUKIAotZnJvbSB0cmFjZWJhY2sgaW1wb3J0IGZvcm1hdF9leGMKLWZyb20gbXVsdGlwcm9jZXNzaW5nIGltcG9ydCBQcm9jZXNzLCBjdXJyZW50X3Byb2Nlc3MsIGFjdGl2ZV9jaGlsZHJlbiwgUG9vbCwgdXRpbCwgY29ubmVjdGlvbgotZnJvbSBtdWx0aXByb2Nlc3NpbmcucHJvY2VzcyBpbXBvcnQgQXV0aGVudGljYXRpb25TdHJpbmcKLWZyb20gbXVsdGlwcm9jZXNzaW5nLmZvcmtpbmcgaW1wb3J0IFBvcGVuLCBGb3JraW5nUGlja2xlcgogZnJvbSB0aW1lIGltcG9ydCB0aW1lIGFzIF90aW1lCitmcm9tIHRyYWNlYmFjayBpbXBvcnQgZm9ybWF0X2V4YworCitmcm9tIC4gaW1wb3J0IGNvbm5lY3Rpb24KK2Zyb20gLiBpbXBvcnQgY29udGV4dAorZnJvbSAuIGltcG9ydCBwb29sCitmcm9tIC4gaW1wb3J0IHByb2Nlc3MKK2Zyb20gLiBpbXBvcnQgcmVkdWN0aW9uCitmcm9tIC4gaW1wb3J0IHV0aWwKK2Zyb20gLiBpbXBvcnQgZ2V0X2NvbnRleHQKIAogIwogIyBSZWdpc3RlciBzb21lIHRoaW5ncyBmb3IgcGlja2xpbmcKQEAgLTMxLDE2ICszNiwxNCBAQAogCiBkZWYgcmVkdWNlX2FycmF5KGEpOgogICAgIHJldHVybiBhcnJheS5hcnJheSwgKGEudHlwZWNvZGUsIGEudG9ieXRlcygpKQotRm9ya2luZ1BpY2tsZXIucmVnaXN0ZXIoYXJyYXkuYXJyYXksIHJlZHVjZV9hcnJheSkKK3JlZHVjdGlvbi5yZWdpc3RlcihhcnJheS5hcnJheSwgcmVkdWNlX2FycmF5KQogCiB2aWV3X3R5cGVzID0gW3R5cGUoZ2V0YXR0cih7fSwgbmFtZSkoKSkgZm9yIG5hbWUgaW4gKCdpdGVtcycsJ2tleXMnLCd2YWx1ZXMnKV0KIGlmIHZpZXdfdHlwZXNbMF0gaXMgbm90IGxpc3Q6ICAgICAgICMgb25seSBuZWVkZWQgaW4gUHkzLjAKICAgICBkZWYgcmVidWlsZF9hc19saXN0KG9iaik6CiAgICAgICAgIHJldHVybiBsaXN0LCAobGlzdChvYmopLCkKICAgICBmb3Igdmlld190eXBlIGluIHZpZXdfdHlwZXM6Ci0gICAgICAgIEZvcmtpbmdQaWNrbGVyLnJlZ2lzdGVyKHZpZXdfdHlwZSwgcmVidWlsZF9hc19saXN0KQotICAgICAgICBpbXBvcnQgY29weXJlZwotICAgICAgICBjb3B5cmVnLnBpY2tsZSh2aWV3X3R5cGUsIHJlYnVpbGRfYXNfbGlzdCkKKyAgICAgICAgcmVkdWN0aW9uLnJlZ2lzdGVyKHZpZXdfdHlwZSwgcmVidWlsZF9hc19saXN0KQogCiAjCiAjIFR5cGUgZm9yIGlkZW50aWZ5aW5nIHNoYXJlZCBvYmplY3RzCkBAIC0xMzAsNyArMTMzLDcgQEAKICAgICBkZWYgX19pbml0X18oc2VsZiwgcmVnaXN0cnksIGFkZHJlc3MsIGF1dGhrZXksIHNlcmlhbGl6ZXIpOgogICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShhdXRoa2V5LCBieXRlcykKICAgICAgICAgc2VsZi5yZWdpc3RyeSA9IHJlZ2lzdHJ5Ci0gICAgICAgIHNlbGYuYXV0aGtleSA9IEF1dGhlbnRpY2F0aW9uU3RyaW5nKGF1dGhrZXkpCisgICAgICAgIHNlbGYuYXV0aGtleSA9IHByb2Nlc3MuQXV0aGVudGljYXRpb25TdHJpbmcoYXV0aGtleSkKICAgICAgICAgTGlzdGVuZXIsIENsaWVudCA9IGxpc3RlbmVyX2NsaWVudFtzZXJpYWxpemVyXQogCiAgICAgICAgICMgZG8gYXV0aGVudGljYXRpb24gbGF0ZXIKQEAgLTE0Niw3ICsxNDksNyBAQAogICAgICAgICBSdW4gdGhlIHNlcnZlciBmb3JldmVyCiAgICAgICAgICcnJwogICAgICAgICBzZWxmLnN0b3BfZXZlbnQgPSB0aHJlYWRpbmcuRXZlbnQoKQotICAgICAgICBjdXJyZW50X3Byb2Nlc3MoKS5fbWFuYWdlcl9zZXJ2ZXIgPSBzZWxmCisgICAgICAgIHByb2Nlc3MuY3VycmVudF9wcm9jZXNzKCkuX21hbmFnZXJfc2VydmVyID0gc2VsZgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBhY2NlcHRlciA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PXNlbGYuYWNjZXB0ZXIpCiAgICAgICAgICAgICBhY2NlcHRlci5kYWVtb24gPSBUcnVlCkBAIC0xNjcsNyArMTcwLDcgQEAKICAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBjID0gc2VsZi5saXN0ZW5lci5hY2NlcHQoKQotICAgICAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBJT0Vycm9yKToKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICB0ID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9c2VsZi5oYW5kbGVfcmVxdWVzdCwgYXJncz0oYywpKQogICAgICAgICAgICAgdC5kYWVtb24gPSBUcnVlCkBAIC00MzYsMTUgKzQzOSwxNyBAQAogICAgIF9yZWdpc3RyeSA9IHt9CiAgICAgX1NlcnZlciA9IFNlcnZlcgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGFkZHJlc3M9Tm9uZSwgYXV0aGtleT1Ob25lLCBzZXJpYWxpemVyPSdwaWNrbGUnKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYWRkcmVzcz1Ob25lLCBhdXRoa2V5PU5vbmUsIHNlcmlhbGl6ZXI9J3BpY2tsZScsCisgICAgICAgICAgICAgICAgIGN0eD1Ob25lKToKICAgICAgICAgaWYgYXV0aGtleSBpcyBOb25lOgotICAgICAgICAgICAgYXV0aGtleSA9IGN1cnJlbnRfcHJvY2VzcygpLmF1dGhrZXkKKyAgICAgICAgICAgIGF1dGhrZXkgPSBwcm9jZXNzLmN1cnJlbnRfcHJvY2VzcygpLmF1dGhrZXkKICAgICAgICAgc2VsZi5fYWRkcmVzcyA9IGFkZHJlc3MgICAgICMgWFhYIG5vdCBmaW5hbCBhZGRyZXNzIGlmIGVnICgnJywgMCkKLSAgICAgICAgc2VsZi5fYXV0aGtleSA9IEF1dGhlbnRpY2F0aW9uU3RyaW5nKGF1dGhrZXkpCisgICAgICAgIHNlbGYuX2F1dGhrZXkgPSBwcm9jZXNzLkF1dGhlbnRpY2F0aW9uU3RyaW5nKGF1dGhrZXkpCiAgICAgICAgIHNlbGYuX3N0YXRlID0gU3RhdGUoKQogICAgICAgICBzZWxmLl9zdGF0ZS52YWx1ZSA9IFN0YXRlLklOSVRJQUwKICAgICAgICAgc2VsZi5fc2VyaWFsaXplciA9IHNlcmlhbGl6ZXIKICAgICAgICAgc2VsZi5fTGlzdGVuZXIsIHNlbGYuX0NsaWVudCA9IGxpc3RlbmVyX2NsaWVudFtzZXJpYWxpemVyXQorICAgICAgICBzZWxmLl9jdHggPSBjdHggb3IgZ2V0X2NvbnRleHQoKQogCiAgICAgZGVmIGdldF9zZXJ2ZXIoc2VsZik6CiAgICAgICAgICcnJwpAQCAtNDc2LDcgKzQ4MSw3IEBACiAgICAgICAgIHJlYWRlciwgd3JpdGVyID0gY29ubmVjdGlvbi5QaXBlKGR1cGxleD1GYWxzZSkKIAogICAgICAgICAjIHNwYXduIHByb2Nlc3Mgd2hpY2ggcnVucyBhIHNlcnZlcgotICAgICAgICBzZWxmLl9wcm9jZXNzID0gUHJvY2VzcygKKyAgICAgICAgc2VsZi5fcHJvY2VzcyA9IHNlbGYuX2N0eC5Qcm9jZXNzKAogICAgICAgICAgICAgdGFyZ2V0PXR5cGUoc2VsZikuX3J1bl9zZXJ2ZXIsCiAgICAgICAgICAgICBhcmdzPShzZWxmLl9yZWdpc3RyeSwgc2VsZi5fYWRkcmVzcywgc2VsZi5fYXV0aGtleSwKICAgICAgICAgICAgICAgICAgIHNlbGYuX3NlcmlhbGl6ZXIsIHdyaXRlciwgaW5pdGlhbGl6ZXIsIGluaXRhcmdzKSwKQEAgLTY5MSwxMSArNjk2LDExIEBACiAgICAgICAgIHNlbGYuX0NsaWVudCA9IGxpc3RlbmVyX2NsaWVudFtzZXJpYWxpemVyXVsxXQogCiAgICAgICAgIGlmIGF1dGhrZXkgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBzZWxmLl9hdXRoa2V5ID0gQXV0aGVudGljYXRpb25TdHJpbmcoYXV0aGtleSkKKyAgICAgICAgICAgIHNlbGYuX2F1dGhrZXkgPSBwcm9jZXNzLkF1dGhlbnRpY2F0aW9uU3RyaW5nKGF1dGhrZXkpCiAgICAgICAgIGVsaWYgc2VsZi5fbWFuYWdlciBpcyBub3QgTm9uZToKICAgICAgICAgICAgIHNlbGYuX2F1dGhrZXkgPSBzZWxmLl9tYW5hZ2VyLl9hdXRoa2V5CiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLl9hdXRoa2V5ID0gY3VycmVudF9wcm9jZXNzKCkuYXV0aGtleQorICAgICAgICAgICAgc2VsZi5fYXV0aGtleSA9IHByb2Nlc3MuY3VycmVudF9wcm9jZXNzKCkuYXV0aGtleQogCiAgICAgICAgIGlmIGluY3JlZjoKICAgICAgICAgICAgIHNlbGYuX2luY3JlZigpCkBAIC03MDQsNyArNzA5LDcgQEAKIAogICAgIGRlZiBfY29ubmVjdChzZWxmKToKICAgICAgICAgdXRpbC5kZWJ1ZygnbWFraW5nIGNvbm5lY3Rpb24gdG8gbWFuYWdlcicpCi0gICAgICAgIG5hbWUgPSBjdXJyZW50X3Byb2Nlc3MoKS5uYW1lCisgICAgICAgIG5hbWUgPSBwcm9jZXNzLmN1cnJlbnRfcHJvY2VzcygpLm5hbWUKICAgICAgICAgaWYgdGhyZWFkaW5nLmN1cnJlbnRfdGhyZWFkKCkubmFtZSAhPSAnTWFpblRocmVhZCc6CiAgICAgICAgICAgICBuYW1lICs9ICd8JyArIHRocmVhZGluZy5jdXJyZW50X3RocmVhZCgpLm5hbWUKICAgICAgICAgY29ubiA9IHNlbGYuX0NsaWVudChzZWxmLl90b2tlbi5hZGRyZXNzLCBhdXRoa2V5PXNlbGYuX2F1dGhrZXkpCkBAIC03OTgsNyArODAzLDcgQEAKIAogICAgIGRlZiBfX3JlZHVjZV9fKHNlbGYpOgogICAgICAgICBrd2RzID0ge30KLSAgICAgICAgaWYgUG9wZW4udGhyZWFkX2lzX3NwYXduaW5nKCk6CisgICAgICAgIGlmIGNvbnRleHQuZ2V0X3NwYXduaW5nX3BvcGVuKCkgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBrd2RzWydhdXRoa2V5J10gPSBzZWxmLl9hdXRoa2V5CiAKICAgICAgICAgaWYgZ2V0YXR0cihzZWxmLCAnX2lzYXV0bycsIEZhbHNlKToKQEAgLTgzNSwxNCArODQwLDE0IEBACiAKICAgICBJZiBwb3NzaWJsZSB0aGUgc2hhcmVkIG9iamVjdCBpcyByZXR1cm5lZCwgb3Igb3RoZXJ3aXNlIGEgcHJveHkgZm9yIGl0LgogICAgICcnJwotICAgIHNlcnZlciA9IGdldGF0dHIoY3VycmVudF9wcm9jZXNzKCksICdfbWFuYWdlcl9zZXJ2ZXInLCBOb25lKQorICAgIHNlcnZlciA9IGdldGF0dHIocHJvY2Vzcy5jdXJyZW50X3Byb2Nlc3MoKSwgJ19tYW5hZ2VyX3NlcnZlcicsIE5vbmUpCiAKICAgICBpZiBzZXJ2ZXIgYW5kIHNlcnZlci5hZGRyZXNzID09IHRva2VuLmFkZHJlc3M6CiAgICAgICAgIHJldHVybiBzZXJ2ZXIuaWRfdG9fb2JqW3Rva2VuLmlkXVswXQogICAgIGVsc2U6CiAgICAgICAgIGluY3JlZiA9ICgKICAgICAgICAgICAgIGt3ZHMucG9wKCdpbmNyZWYnLCBUcnVlKSBhbmQKLSAgICAgICAgICAgIG5vdCBnZXRhdHRyKGN1cnJlbnRfcHJvY2VzcygpLCAnX2luaGVyaXRpbmcnLCBGYWxzZSkKKyAgICAgICAgICAgIG5vdCBnZXRhdHRyKHByb2Nlc3MuY3VycmVudF9wcm9jZXNzKCksICdfaW5oZXJpdGluZycsIEZhbHNlKQogICAgICAgICAgICAgKQogICAgICAgICByZXR1cm4gZnVuYyh0b2tlbiwgc2VyaWFsaXplciwgaW5jcmVmPWluY3JlZiwgKiprd2RzKQogCkBAIC04ODksNyArODk0LDcgQEAKICAgICBpZiBhdXRoa2V5IGlzIE5vbmUgYW5kIG1hbmFnZXIgaXMgbm90IE5vbmU6CiAgICAgICAgIGF1dGhrZXkgPSBtYW5hZ2VyLl9hdXRoa2V5CiAgICAgaWYgYXV0aGtleSBpcyBOb25lOgotICAgICAgICBhdXRoa2V5ID0gY3VycmVudF9wcm9jZXNzKCkuYXV0aGtleQorICAgICAgICBhdXRoa2V5ID0gcHJvY2Vzcy5jdXJyZW50X3Byb2Nlc3MoKS5hdXRoa2V5CiAKICAgICBQcm94eVR5cGUgPSBNYWtlUHJveHlUeXBlKCdBdXRvUHJveHlbJXNdJyAlIHRva2VuLnR5cGVpZCwgZXhwb3NlZCkKICAgICBwcm94eSA9IFByb3h5VHlwZSh0b2tlbiwgc2VyaWFsaXplciwgbWFuYWdlcj1tYW5hZ2VyLCBhdXRoa2V5PWF1dGhrZXksCkBAIC0xMDcyLDE3ICsxMDc3LDIyIEBACiAgICAgKSkKIAogCi1Qb29sUHJveHkgPSBNYWtlUHJveHlUeXBlKCdQb29sUHJveHknLCAoCitCYXNlUG9vbFByb3h5ID0gTWFrZVByb3h5VHlwZSgnUG9vbFByb3h5JywgKAogICAgICdhcHBseScsICdhcHBseV9hc3luYycsICdjbG9zZScsICdpbWFwJywgJ2ltYXBfdW5vcmRlcmVkJywgJ2pvaW4nLAotICAgICdtYXAnLCAnbWFwX2FzeW5jJywgJ3N0YXJtYXAnLCAnc3Rhcm1hcF9hc3luYycsICd0ZXJtaW5hdGUnCisgICAgJ21hcCcsICdtYXBfYXN5bmMnLCAnc3Rhcm1hcCcsICdzdGFybWFwX2FzeW5jJywgJ3Rlcm1pbmF0ZScsCiAgICAgKSkKLVBvb2xQcm94eS5fbWV0aG9kX3RvX3R5cGVpZF8gPSB7CitCYXNlUG9vbFByb3h5Ll9tZXRob2RfdG9fdHlwZWlkXyA9IHsKICAgICAnYXBwbHlfYXN5bmMnOiAnQXN5bmNSZXN1bHQnLAogICAgICdtYXBfYXN5bmMnOiAnQXN5bmNSZXN1bHQnLAogICAgICdzdGFybWFwX2FzeW5jJzogJ0FzeW5jUmVzdWx0JywKICAgICAnaW1hcCc6ICdJdGVyYXRvcicsCiAgICAgJ2ltYXBfdW5vcmRlcmVkJzogJ0l0ZXJhdG9yJwogICAgIH0KK2NsYXNzIFBvb2xQcm94eShCYXNlUG9vbFByb3h5KToKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZgorICAgIGRlZiBfX2V4aXRfXyhzZWxmLCBleGNfdHlwZSwgZXhjX3ZhbCwgZXhjX3RiKToKKyAgICAgICAgc2VsZi50ZXJtaW5hdGUoKQogCiAjCiAjIERlZmluaXRpb24gb2YgU3luY01hbmFnZXIKQEAgLTExMDksNyArMTExOSw3IEBACiAgICAgICAgICAgICAgICAgICAgICBBY3F1aXJlclByb3h5KQogU3luY01hbmFnZXIucmVnaXN0ZXIoJ0NvbmRpdGlvbicsIHRocmVhZGluZy5Db25kaXRpb24sIENvbmRpdGlvblByb3h5KQogU3luY01hbmFnZXIucmVnaXN0ZXIoJ0JhcnJpZXInLCB0aHJlYWRpbmcuQmFycmllciwgQmFycmllclByb3h5KQotU3luY01hbmFnZXIucmVnaXN0ZXIoJ1Bvb2wnLCBQb29sLCBQb29sUHJveHkpCitTeW5jTWFuYWdlci5yZWdpc3RlcignUG9vbCcsIHBvb2wuUG9vbCwgUG9vbFByb3h5KQogU3luY01hbmFnZXIucmVnaXN0ZXIoJ2xpc3QnLCBsaXN0LCBMaXN0UHJveHkpCiBTeW5jTWFuYWdlci5yZWdpc3RlcignZGljdCcsIGRpY3QsIERpY3RQcm94eSkKIFN5bmNNYW5hZ2VyLnJlZ2lzdGVyKCdWYWx1ZScsIFZhbHVlLCBWYWx1ZVByb3h5KQpkaWZmIC0tZ2l0IGEvTGliL211bHRpcHJvY2Vzc2luZy9wb29sLnB5IGIvTGliL211bHRpcHJvY2Vzc2luZy9wb29sLnB5CmluZGV4IDBmMmRhYjQuLmRiNmUzZTEgMTAwNjQ0Ci0tLSBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvcG9vbC5weQorKysgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL3Bvb2wucHkKQEAgLTcsNyArNyw3IEBACiAjIExpY2Vuc2VkIHRvIFBTRiB1bmRlciBhIENvbnRyaWJ1dG9yIEFncmVlbWVudC4KICMKIAotX19hbGxfXyA9IFsnUG9vbCddCitfX2FsbF9fID0gWydQb29sJywgJ1RocmVhZFBvb2wnXQogCiAjCiAjIEltcG9ydHMKQEAgLTE3LDEwICsxNywxNCBAQAogaW1wb3J0IHF1ZXVlCiBpbXBvcnQgaXRlcnRvb2xzCiBpbXBvcnQgY29sbGVjdGlvbnMKK2ltcG9ydCBvcwogaW1wb3J0IHRpbWUKK2ltcG9ydCB0cmFjZWJhY2sKIAotZnJvbSBtdWx0aXByb2Nlc3NpbmcgaW1wb3J0IFByb2Nlc3MsIGNwdV9jb3VudCwgVGltZW91dEVycm9yCi1mcm9tIG11bHRpcHJvY2Vzc2luZy51dGlsIGltcG9ydCBGaW5hbGl6ZSwgZGVidWcKKyMgSWYgdGhyZWFkaW5nIGlzIGF2YWlsYWJsZSB0aGVuIFRocmVhZFBvb2wgc2hvdWxkIGJlIHByb3ZpZGVkLiAgVGhlcmVmb3JlCisjIHdlIGF2b2lkIHRvcC1sZXZlbCBpbXBvcnRzIHdoaWNoIGFyZSBsaWFibGUgdG8gZmFpbCBvbiBzb21lIHN5c3RlbXMuCitmcm9tIC4gaW1wb3J0IHV0aWwKK2Zyb20gLiBpbXBvcnQgZ2V0X2NvbnRleHQsIFRpbWVvdXRFcnJvcgogCiAjCiAjIENvbnN0YW50cyByZXByZXNlbnRpbmcgdGhlIHN0YXRlIG9mIGEgcG9vbApAQCAtNDMsNiArNDcsMjkgQEAKICAgICByZXR1cm4gbGlzdChpdGVydG9vbHMuc3Rhcm1hcChhcmdzWzBdLCBhcmdzWzFdKSkKIAogIworIyBIYWNrIHRvIGVtYmVkIHN0cmluZ2lmaWNhdGlvbiBvZiByZW1vdGUgdHJhY2ViYWNrIGluIGxvY2FsIHRyYWNlYmFjaworIworCitjbGFzcyBSZW1vdGVUcmFjZWJhY2soRXhjZXB0aW9uKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGIpOgorICAgICAgICBzZWxmLnRiID0gdGIKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYudGIKKworY2xhc3MgRXhjZXB0aW9uV2l0aFRyYWNlYmFjazoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZXhjLCB0Yik6CisgICAgICAgIHRiID0gdHJhY2ViYWNrLmZvcm1hdF9leGNlcHRpb24odHlwZShleGMpLCBleGMsIHRiKQorICAgICAgICB0YiA9ICcnLmpvaW4odGIpCisgICAgICAgIHNlbGYuZXhjID0gZXhjCisgICAgICAgIHNlbGYudGIgPSAnXG4iIiJcbiVzIiIiJyAlIHRiCisgICAgZGVmIF9fcmVkdWNlX18oc2VsZik6CisgICAgICAgIHJldHVybiByZWJ1aWxkX2V4YywgKHNlbGYuZXhjLCBzZWxmLnRiKQorCitkZWYgcmVidWlsZF9leGMoZXhjLCB0Yik6CisgICAgZXhjLl9fY2F1c2VfXyA9IFJlbW90ZVRyYWNlYmFjayh0YikKKyAgICByZXR1cm4gZXhjCisKKyMKICMgQ29kZSBydW4gYnkgd29ya2VyIHByb2Nlc3NlcwogIwogCkBAIC02Myw3ICs5MCw4IEBACiAgICAgICAgIHJldHVybiAiPE1heWJlRW5jb2RpbmdFcnJvcjogJXM+IiAlIHN0cihzZWxmKQogCiAKLWRlZiB3b3JrZXIoaW5xdWV1ZSwgb3V0cXVldWUsIGluaXRpYWxpemVyPU5vbmUsIGluaXRhcmdzPSgpLCBtYXh0YXNrcz1Ob25lKToKK2RlZiB3b3JrZXIoaW5xdWV1ZSwgb3V0cXVldWUsIGluaXRpYWxpemVyPU5vbmUsIGluaXRhcmdzPSgpLCBtYXh0YXNrcz1Ob25lLAorICAgICAgICAgICB3cmFwX2V4Y2VwdGlvbj1GYWxzZSk6CiAgICAgYXNzZXJ0IG1heHRhc2tzIGlzIE5vbmUgb3IgKHR5cGUobWF4dGFza3MpID09IGludCBhbmQgbWF4dGFza3MgPiAwKQogICAgIHB1dCA9IG91dHF1ZXVlLnB1dAogICAgIGdldCA9IGlucXVldWUuZ2V0CkBAIC03OCwyOCArMTA2LDMwIEBACiAgICAgd2hpbGUgbWF4dGFza3MgaXMgTm9uZSBvciAobWF4dGFza3MgYW5kIGNvbXBsZXRlZCA8IG1heHRhc2tzKToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgdGFzayA9IGdldCgpCi0gICAgICAgIGV4Y2VwdCAoRU9GRXJyb3IsIElPRXJyb3IpOgotICAgICAgICAgICAgZGVidWcoJ3dvcmtlciBnb3QgRU9GRXJyb3Igb3IgSU9FcnJvciAtLSBleGl0aW5nJykKKyAgICAgICAgZXhjZXB0IChFT0ZFcnJvciwgT1NFcnJvcik6CisgICAgICAgICAgICB1dGlsLmRlYnVnKCd3b3JrZXIgZ290IEVPRkVycm9yIG9yIE9TRXJyb3IgLS0gZXhpdGluZycpCiAgICAgICAgICAgICBicmVhawogCiAgICAgICAgIGlmIHRhc2sgaXMgTm9uZToKLSAgICAgICAgICAgIGRlYnVnKCd3b3JrZXIgZ290IHNlbnRpbmVsIC0tIGV4aXRpbmcnKQorICAgICAgICAgICAgdXRpbC5kZWJ1Zygnd29ya2VyIGdvdCBzZW50aW5lbCAtLSBleGl0aW5nJykKICAgICAgICAgICAgIGJyZWFrCiAKICAgICAgICAgam9iLCBpLCBmdW5jLCBhcmdzLCBrd2RzID0gdGFzawogICAgICAgICB0cnk6CiAgICAgICAgICAgICByZXN1bHQgPSAoVHJ1ZSwgZnVuYygqYXJncywgKiprd2RzKSkKICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgaWYgd3JhcF9leGNlcHRpb246CisgICAgICAgICAgICAgICAgZSA9IEV4Y2VwdGlvbldpdGhUcmFjZWJhY2soZSwgZS5fX3RyYWNlYmFja19fKQogICAgICAgICAgICAgcmVzdWx0ID0gKEZhbHNlLCBlKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBwdXQoKGpvYiwgaSwgcmVzdWx0KSkKICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICAgICAgICAgd3JhcHBlZCA9IE1heWJlRW5jb2RpbmdFcnJvcihlLCByZXN1bHRbMV0pCi0gICAgICAgICAgICBkZWJ1ZygiUG9zc2libGUgZW5jb2RpbmcgZXJyb3Igd2hpbGUgc2VuZGluZyByZXN1bHQ6ICVzIiAlICgKKyAgICAgICAgICAgIHV0aWwuZGVidWcoIlBvc3NpYmxlIGVuY29kaW5nIGVycm9yIHdoaWxlIHNlbmRpbmcgcmVzdWx0OiAlcyIgJSAoCiAgICAgICAgICAgICAgICAgd3JhcHBlZCkpCiAgICAgICAgICAgICBwdXQoKGpvYiwgaSwgKEZhbHNlLCB3cmFwcGVkKSkpCiAgICAgICAgIGNvbXBsZXRlZCArPSAxCi0gICAgZGVidWcoJ3dvcmtlciBleGl0aW5nIGFmdGVyICVkIHRhc2tzJyAlIGNvbXBsZXRlZCkKKyAgICB1dGlsLmRlYnVnKCd3b3JrZXIgZXhpdGluZyBhZnRlciAlZCB0YXNrcycgJSBjb21wbGV0ZWQpCiAKICMKICMgQ2xhc3MgcmVwcmVzZW50aW5nIGEgcHJvY2VzcyBwb29sCkBAIC0xMDksMTAgKzEzOSwxNCBAQAogICAgICcnJwogICAgIENsYXNzIHdoaWNoIHN1cHBvcnRzIGFuIGFzeW5jIHZlcnNpb24gb2YgYXBwbHlpbmcgZnVuY3Rpb25zIHRvIGFyZ3VtZW50cy4KICAgICAnJycKLSAgICBQcm9jZXNzID0gUHJvY2VzcworICAgIF93cmFwX2V4Y2VwdGlvbiA9IFRydWUKKworICAgIGRlZiBQcm9jZXNzKHNlbGYsICphcmdzLCAqKmt3ZHMpOgorICAgICAgICByZXR1cm4gc2VsZi5fY3R4LlByb2Nlc3MoKmFyZ3MsICoqa3dkcykKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwcm9jZXNzZXM9Tm9uZSwgaW5pdGlhbGl6ZXI9Tm9uZSwgaW5pdGFyZ3M9KCksCi0gICAgICAgICAgICAgICAgIG1heHRhc2tzcGVyY2hpbGQ9Tm9uZSk6CisgICAgICAgICAgICAgICAgIG1heHRhc2tzcGVyY2hpbGQ9Tm9uZSwgY29udGV4dD1Ob25lKToKKyAgICAgICAgc2VsZi5fY3R4ID0gY29udGV4dCBvciBnZXRfY29udGV4dCgpCiAgICAgICAgIHNlbGYuX3NldHVwX3F1ZXVlcygpCiAgICAgICAgIHNlbGYuX3Rhc2txdWV1ZSA9IHF1ZXVlLlF1ZXVlKCkKICAgICAgICAgc2VsZi5fY2FjaGUgPSB7fQpAQCAtMTIyLDEwICsxNTYsNyBAQAogICAgICAgICBzZWxmLl9pbml0YXJncyA9IGluaXRhcmdzCiAKICAgICAgICAgaWYgcHJvY2Vzc2VzIGlzIE5vbmU6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgcHJvY2Vzc2VzID0gY3B1X2NvdW50KCkKLSAgICAgICAgICAgIGV4Y2VwdCBOb3RJbXBsZW1lbnRlZEVycm9yOgotICAgICAgICAgICAgICAgIHByb2Nlc3NlcyA9IDEKKyAgICAgICAgICAgIHByb2Nlc3NlcyA9IG9zLmNwdV9jb3VudCgpIG9yIDEKICAgICAgICAgaWYgcHJvY2Vzc2VzIDwgMToKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIk51bWJlciBvZiBwcm9jZXNzZXMgbXVzdCBiZSBhdCBsZWFzdCAxIikKIApAQCAtMTYyLDcgKzE5Myw3IEBACiAgICAgICAgIHNlbGYuX3Jlc3VsdF9oYW5kbGVyLl9zdGF0ZSA9IFJVTgogICAgICAgICBzZWxmLl9yZXN1bHRfaGFuZGxlci5zdGFydCgpCiAKLSAgICAgICAgc2VsZi5fdGVybWluYXRlID0gRmluYWxpemUoCisgICAgICAgIHNlbGYuX3Rlcm1pbmF0ZSA9IHV0aWwuRmluYWxpemUoCiAgICAgICAgICAgICBzZWxmLCBzZWxmLl90ZXJtaW5hdGVfcG9vbCwKICAgICAgICAgICAgIGFyZ3M9KHNlbGYuX3Rhc2txdWV1ZSwgc2VsZi5faW5xdWV1ZSwgc2VsZi5fb3V0cXVldWUsIHNlbGYuX3Bvb2wsCiAgICAgICAgICAgICAgICAgICBzZWxmLl93b3JrZXJfaGFuZGxlciwgc2VsZi5fdGFza19oYW5kbGVyLApAQCAtMTc5LDcgKzIxMCw3IEBACiAgICAgICAgICAgICB3b3JrZXIgPSBzZWxmLl9wb29sW2ldCiAgICAgICAgICAgICBpZiB3b3JrZXIuZXhpdGNvZGUgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAgIyB3b3JrZXIgZXhpdGVkCi0gICAgICAgICAgICAgICAgZGVidWcoJ2NsZWFuaW5nIHVwIHdvcmtlciAlZCcgJSBpKQorICAgICAgICAgICAgICAgIHV0aWwuZGVidWcoJ2NsZWFuaW5nIHVwIHdvcmtlciAlZCcgJSBpKQogICAgICAgICAgICAgICAgIHdvcmtlci5qb2luKCkKICAgICAgICAgICAgICAgICBjbGVhbmVkID0gVHJ1ZQogICAgICAgICAgICAgICAgIGRlbCBzZWxmLl9wb29sW2ldCkBAIC0xOTMsMTMgKzIyNCwxNCBAQAogICAgICAgICAgICAgdyA9IHNlbGYuUHJvY2Vzcyh0YXJnZXQ9d29ya2VyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzPShzZWxmLl9pbnF1ZXVlLCBzZWxmLl9vdXRxdWV1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5faW5pdGlhbGl6ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2luaXRhcmdzLCBzZWxmLl9tYXh0YXNrc3BlcmNoaWxkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9pbml0YXJncywgc2VsZi5fbWF4dGFza3NwZXJjaGlsZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fd3JhcF9leGNlcHRpb24pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgc2VsZi5fcG9vbC5hcHBlbmQodykKICAgICAgICAgICAgIHcubmFtZSA9IHcubmFtZS5yZXBsYWNlKCdQcm9jZXNzJywgJ1Bvb2xXb3JrZXInKQogICAgICAgICAgICAgdy5kYWVtb24gPSBUcnVlCiAgICAgICAgICAgICB3LnN0YXJ0KCkKLSAgICAgICAgICAgIGRlYnVnKCdhZGRlZCB3b3JrZXInKQorICAgICAgICAgICAgdXRpbC5kZWJ1ZygnYWRkZWQgd29ya2VyJykKIAogICAgIGRlZiBfbWFpbnRhaW5fcG9vbChzZWxmKToKICAgICAgICAgIiIiQ2xlYW4gdXAgYW55IGV4aXRlZCB3b3JrZXJzIGFuZCBzdGFydCByZXBsYWNlbWVudHMgZm9yIHRoZW0uCkBAIC0yMDgsOSArMjQwLDggQEAKICAgICAgICAgICAgIHNlbGYuX3JlcG9wdWxhdGVfcG9vbCgpCiAKICAgICBkZWYgX3NldHVwX3F1ZXVlcyhzZWxmKToKLSAgICAgICAgZnJvbSAucXVldWVzIGltcG9ydCBTaW1wbGVRdWV1ZQotICAgICAgICBzZWxmLl9pbnF1ZXVlID0gU2ltcGxlUXVldWUoKQotICAgICAgICBzZWxmLl9vdXRxdWV1ZSA9IFNpbXBsZVF1ZXVlKCkKKyAgICAgICAgc2VsZi5faW5xdWV1ZSA9IHNlbGYuX2N0eC5TaW1wbGVRdWV1ZSgpCisgICAgICAgIHNlbGYuX291dHF1ZXVlID0gc2VsZi5fY3R4LlNpbXBsZVF1ZXVlKCkKICAgICAgICAgc2VsZi5fcXVpY2tfcHV0ID0gc2VsZi5faW5xdWV1ZS5fd3JpdGVyLnNlbmQKICAgICAgICAgc2VsZi5fcXVpY2tfZ2V0ID0gc2VsZi5fb3V0cXVldWUuX3JlYWRlci5yZWN2CiAKQEAgLTMzNiw0OSArMzY3LDU4IEBACiAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMSkKICAgICAgICAgIyBzZW5kIHNlbnRpbmVsIHRvIHN0b3Agd29ya2VycwogICAgICAgICBwb29sLl90YXNrcXVldWUucHV0KE5vbmUpCi0gICAgICAgIGRlYnVnKCd3b3JrZXIgaGFuZGxlciBleGl0aW5nJykKKyAgICAgICAgdXRpbC5kZWJ1Zygnd29ya2VyIGhhbmRsZXIgZXhpdGluZycpCiAKICAgICBAc3RhdGljbWV0aG9kCiAgICAgZGVmIF9oYW5kbGVfdGFza3ModGFza3F1ZXVlLCBwdXQsIG91dHF1ZXVlLCBwb29sLCBjYWNoZSk6CiAgICAgICAgIHRocmVhZCA9IHRocmVhZGluZy5jdXJyZW50X3RocmVhZCgpCiAKICAgICAgICAgZm9yIHRhc2tzZXEsIHNldF9sZW5ndGggaW4gaXRlcih0YXNrcXVldWUuZ2V0LCBOb25lKToKKyAgICAgICAgICAgIHRhc2sgPSBOb25lCiAgICAgICAgICAgICBpID0gLTEKLSAgICAgICAgICAgIGZvciBpLCB0YXNrIGluIGVudW1lcmF0ZSh0YXNrc2VxKToKLSAgICAgICAgICAgICAgICBpZiB0aHJlYWQuX3N0YXRlOgotICAgICAgICAgICAgICAgICAgICBkZWJ1ZygndGFzayBoYW5kbGVyIGZvdW5kIHRocmVhZC5fc3RhdGUgIT0gUlVOJykKLSAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIHB1dCh0YXNrKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKLSAgICAgICAgICAgICAgICAgICAgam9iLCBpbmQgPSB0YXNrWzoyXQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGZvciBpLCB0YXNrIGluIGVudW1lcmF0ZSh0YXNrc2VxKToKKyAgICAgICAgICAgICAgICAgICAgaWYgdGhyZWFkLl9zdGF0ZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHV0aWwuZGVidWcoJ3Rhc2sgaGFuZGxlciBmb3VuZCB0aHJlYWQuX3N0YXRlICE9IFJVTicpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYWNoZVtqb2JdLl9zZXQoaW5kLCAoRmFsc2UsIGUpKQotICAgICAgICAgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgcHV0KHRhc2spCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGpvYiwgaW5kID0gdGFza1s6Ml0KKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZVtqb2JdLl9zZXQoaW5kLCAoRmFsc2UsIGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBpZiBzZXRfbGVuZ3RoOgorICAgICAgICAgICAgICAgICAgICAgICAgdXRpbC5kZWJ1ZygnZG9pbmcgc2V0X2xlbmd0aCgpJykKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldF9sZW5ndGgoaSsxKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4OgorICAgICAgICAgICAgICAgIGpvYiwgaW5kID0gdGFza1s6Ml0gaWYgdGFzayBlbHNlICgwLCAwKQorICAgICAgICAgICAgICAgIGlmIGpvYiBpbiBjYWNoZToKKyAgICAgICAgICAgICAgICAgICAgY2FjaGVbam9iXS5fc2V0KGluZCArIDEsIChGYWxzZSwgZXgpKQogICAgICAgICAgICAgICAgIGlmIHNldF9sZW5ndGg6Ci0gICAgICAgICAgICAgICAgICAgIGRlYnVnKCdkb2luZyBzZXRfbGVuZ3RoKCknKQorICAgICAgICAgICAgICAgICAgICB1dGlsLmRlYnVnKCdkb2luZyBzZXRfbGVuZ3RoKCknKQogICAgICAgICAgICAgICAgICAgICBzZXRfbGVuZ3RoKGkrMSkKLSAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgYnJlYWsKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGRlYnVnKCd0YXNrIGhhbmRsZXIgZ290IHNlbnRpbmVsJykKKyAgICAgICAgICAgIHV0aWwuZGVidWcoJ3Rhc2sgaGFuZGxlciBnb3Qgc2VudGluZWwnKQogCiAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgIyB0ZWxsIHJlc3VsdCBoYW5kbGVyIHRvIGZpbmlzaCB3aGVuIGNhY2hlIGlzIGVtcHR5Ci0gICAgICAgICAgICBkZWJ1ZygndGFzayBoYW5kbGVyIHNlbmRpbmcgc2VudGluZWwgdG8gcmVzdWx0IGhhbmRsZXInKQorICAgICAgICAgICAgdXRpbC5kZWJ1ZygndGFzayBoYW5kbGVyIHNlbmRpbmcgc2VudGluZWwgdG8gcmVzdWx0IGhhbmRsZXInKQogICAgICAgICAgICAgb3V0cXVldWUucHV0KE5vbmUpCiAKICAgICAgICAgICAgICMgdGVsbCB3b3JrZXJzIHRoZXJlIGlzIG5vIG1vcmUgd29yawotICAgICAgICAgICAgZGVidWcoJ3Rhc2sgaGFuZGxlciBzZW5kaW5nIHNlbnRpbmVsIHRvIHdvcmtlcnMnKQorICAgICAgICAgICAgdXRpbC5kZWJ1ZygndGFzayBoYW5kbGVyIHNlbmRpbmcgc2VudGluZWwgdG8gd29ya2VycycpCiAgICAgICAgICAgICBmb3IgcCBpbiBwb29sOgogICAgICAgICAgICAgICAgIHB1dChOb25lKQotICAgICAgICBleGNlcHQgSU9FcnJvcjoKLSAgICAgICAgICAgIGRlYnVnKCd0YXNrIGhhbmRsZXIgZ290IElPRXJyb3Igd2hlbiBzZW5kaW5nIHNlbnRpbmVscycpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgdXRpbC5kZWJ1ZygndGFzayBoYW5kbGVyIGdvdCBPU0Vycm9yIHdoZW4gc2VuZGluZyBzZW50aW5lbHMnKQogCi0gICAgICAgIGRlYnVnKCd0YXNrIGhhbmRsZXIgZXhpdGluZycpCisgICAgICAgIHV0aWwuZGVidWcoJ3Rhc2sgaGFuZGxlciBleGl0aW5nJykKIAogICAgIEBzdGF0aWNtZXRob2QKICAgICBkZWYgX2hhbmRsZV9yZXN1bHRzKG91dHF1ZXVlLCBnZXQsIGNhY2hlKToKQEAgLTM4NywxNyArNDI3LDE3IEBACiAgICAgICAgIHdoaWxlIDE6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgdGFzayA9IGdldCgpCi0gICAgICAgICAgICBleGNlcHQgKElPRXJyb3IsIEVPRkVycm9yKToKLSAgICAgICAgICAgICAgICBkZWJ1ZygncmVzdWx0IGhhbmRsZXIgZ290IEVPRkVycm9yL0lPRXJyb3IgLS0gZXhpdGluZycpCisgICAgICAgICAgICBleGNlcHQgKE9TRXJyb3IsIEVPRkVycm9yKToKKyAgICAgICAgICAgICAgICB1dGlsLmRlYnVnKCdyZXN1bHQgaGFuZGxlciBnb3QgRU9GRXJyb3IvT1NFcnJvciAtLSBleGl0aW5nJykKICAgICAgICAgICAgICAgICByZXR1cm4KIAogICAgICAgICAgICAgaWYgdGhyZWFkLl9zdGF0ZToKICAgICAgICAgICAgICAgICBhc3NlcnQgdGhyZWFkLl9zdGF0ZSA9PSBURVJNSU5BVEUKLSAgICAgICAgICAgICAgICBkZWJ1ZygncmVzdWx0IGhhbmRsZXIgZm91bmQgdGhyZWFkLl9zdGF0ZT1URVJNSU5BVEUnKQorICAgICAgICAgICAgICAgIHV0aWwuZGVidWcoJ3Jlc3VsdCBoYW5kbGVyIGZvdW5kIHRocmVhZC5fc3RhdGU9VEVSTUlOQVRFJykKICAgICAgICAgICAgICAgICBicmVhawogCiAgICAgICAgICAgICBpZiB0YXNrIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgZGVidWcoJ3Jlc3VsdCBoYW5kbGVyIGdvdCBzZW50aW5lbCcpCisgICAgICAgICAgICAgICAgdXRpbC5kZWJ1ZygncmVzdWx0IGhhbmRsZXIgZ290IHNlbnRpbmVsJykKICAgICAgICAgICAgICAgICBicmVhawogCiAgICAgICAgICAgICBqb2IsIGksIG9iaiA9IHRhc2sKQEAgLTQwOSwxMiArNDQ5LDEyIEBACiAgICAgICAgIHdoaWxlIGNhY2hlIGFuZCB0aHJlYWQuX3N0YXRlICE9IFRFUk1JTkFURToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICB0YXNrID0gZ2V0KCkKLSAgICAgICAgICAgIGV4Y2VwdCAoSU9FcnJvciwgRU9GRXJyb3IpOgotICAgICAgICAgICAgICAgIGRlYnVnKCdyZXN1bHQgaGFuZGxlciBnb3QgRU9GRXJyb3IvSU9FcnJvciAtLSBleGl0aW5nJykKKyAgICAgICAgICAgIGV4Y2VwdCAoT1NFcnJvciwgRU9GRXJyb3IpOgorICAgICAgICAgICAgICAgIHV0aWwuZGVidWcoJ3Jlc3VsdCBoYW5kbGVyIGdvdCBFT0ZFcnJvci9PU0Vycm9yIC0tIGV4aXRpbmcnKQogICAgICAgICAgICAgICAgIHJldHVybgogCiAgICAgICAgICAgICBpZiB0YXNrIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgZGVidWcoJ3Jlc3VsdCBoYW5kbGVyIGlnbm9yaW5nIGV4dHJhIHNlbnRpbmVsJykKKyAgICAgICAgICAgICAgICB1dGlsLmRlYnVnKCdyZXN1bHQgaGFuZGxlciBpZ25vcmluZyBleHRyYSBzZW50aW5lbCcpCiAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgIGpvYiwgaSwgb2JqID0gdGFzawogICAgICAgICAgICAgdHJ5OgpAQCAtNDIzLDcgKzQ2Myw3IEBACiAgICAgICAgICAgICAgICAgcGFzcwogCiAgICAgICAgIGlmIGhhc2F0dHIob3V0cXVldWUsICdfcmVhZGVyJyk6Ci0gICAgICAgICAgICBkZWJ1ZygnZW5zdXJpbmcgdGhhdCBvdXRxdWV1ZSBpcyBub3QgZnVsbCcpCisgICAgICAgICAgICB1dGlsLmRlYnVnKCdlbnN1cmluZyB0aGF0IG91dHF1ZXVlIGlzIG5vdCBmdWxsJykKICAgICAgICAgICAgICMgSWYgd2UgZG9uJ3QgbWFrZSByb29tIGF2YWlsYWJsZSBpbiBvdXRxdWV1ZSB0aGVuCiAgICAgICAgICAgICAjIGF0dGVtcHRzIHRvIGFkZCB0aGUgc2VudGluZWwgKE5vbmUpIHRvIG91dHF1ZXVlIG1heQogICAgICAgICAgICAgIyBibG9jay4gIFRoZXJlIGlzIGd1YXJhbnRlZWQgdG8gYmUgbm8gbW9yZSB0aGFuIDIgc2VudGluZWxzLgpAQCAtNDMyLDEwICs0NzIsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgaWYgbm90IG91dHF1ZXVlLl9yZWFkZXIucG9sbCgpOgogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgICAgICAgICAgZ2V0KCkKLSAgICAgICAgICAgIGV4Y2VwdCAoSU9FcnJvciwgRU9GRXJyb3IpOgorICAgICAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBFT0ZFcnJvcik6CiAgICAgICAgICAgICAgICAgcGFzcwogCi0gICAgICAgIGRlYnVnKCdyZXN1bHQgaGFuZGxlciBleGl0aW5nOiBsZW4oY2FjaGUpPSVzLCB0aHJlYWQuX3N0YXRlPSVzJywKKyAgICAgICAgdXRpbC5kZWJ1ZygncmVzdWx0IGhhbmRsZXIgZXhpdGluZzogbGVuKGNhY2hlKT0lcywgdGhyZWFkLl9zdGF0ZT0lcycsCiAgICAgICAgICAgICAgIGxlbihjYWNoZSksIHRocmVhZC5fc3RhdGUpCiAKICAgICBAc3RhdGljbWV0aG9kCkBAIC00NTMsMTkgKzQ5MywxOSBAQAogICAgICAgICAgICAgICApCiAKICAgICBkZWYgY2xvc2Uoc2VsZik6Ci0gICAgICAgIGRlYnVnKCdjbG9zaW5nIHBvb2wnKQorICAgICAgICB1dGlsLmRlYnVnKCdjbG9zaW5nIHBvb2wnKQogICAgICAgICBpZiBzZWxmLl9zdGF0ZSA9PSBSVU46CiAgICAgICAgICAgICBzZWxmLl9zdGF0ZSA9IENMT1NFCiAgICAgICAgICAgICBzZWxmLl93b3JrZXJfaGFuZGxlci5fc3RhdGUgPSBDTE9TRQogCiAgICAgZGVmIHRlcm1pbmF0ZShzZWxmKToKLSAgICAgICAgZGVidWcoJ3Rlcm1pbmF0aW5nIHBvb2wnKQorICAgICAgICB1dGlsLmRlYnVnKCd0ZXJtaW5hdGluZyBwb29sJykKICAgICAgICAgc2VsZi5fc3RhdGUgPSBURVJNSU5BVEUKICAgICAgICAgc2VsZi5fd29ya2VyX2hhbmRsZXIuX3N0YXRlID0gVEVSTUlOQVRFCiAgICAgICAgIHNlbGYuX3Rlcm1pbmF0ZSgpCiAKICAgICBkZWYgam9pbihzZWxmKToKLSAgICAgICAgZGVidWcoJ2pvaW5pbmcgcG9vbCcpCisgICAgICAgIHV0aWwuZGVidWcoJ2pvaW5pbmcgcG9vbCcpCiAgICAgICAgIGFzc2VydCBzZWxmLl9zdGF0ZSBpbiAoQ0xPU0UsIFRFUk1JTkFURSkKICAgICAgICAgc2VsZi5fd29ya2VyX2hhbmRsZXIuam9pbigpCiAgICAgICAgIHNlbGYuX3Rhc2tfaGFuZGxlci5qb2luKCkKQEAgLTQ3Niw3ICs1MTYsNyBAQAogICAgIEBzdGF0aWNtZXRob2QKICAgICBkZWYgX2hlbHBfc3R1ZmZfZmluaXNoKGlucXVldWUsIHRhc2tfaGFuZGxlciwgc2l6ZSk6CiAgICAgICAgICMgdGFza19oYW5kbGVyIG1heSBiZSBibG9ja2VkIHRyeWluZyB0byBwdXQgaXRlbXMgb24gaW5xdWV1ZQotICAgICAgICBkZWJ1ZygncmVtb3ZpbmcgdGFza3MgZnJvbSBpbnF1ZXVlIHVudGlsIHRhc2sgaGFuZGxlciBmaW5pc2hlZCcpCisgICAgICAgIHV0aWwuZGVidWcoJ3JlbW92aW5nIHRhc2tzIGZyb20gaW5xdWV1ZSB1bnRpbCB0YXNrIGhhbmRsZXIgZmluaXNoZWQnKQogICAgICAgICBpbnF1ZXVlLl9ybG9jay5hY3F1aXJlKCkKICAgICAgICAgd2hpbGUgdGFza19oYW5kbGVyLmlzX2FsaXZlKCkgYW5kIGlucXVldWUuX3JlYWRlci5wb2xsKCk6CiAgICAgICAgICAgICBpbnF1ZXVlLl9yZWFkZXIucmVjdigpCkBAIC00ODYsMTIgKzUyNiwxMiBAQAogICAgIGRlZiBfdGVybWluYXRlX3Bvb2woY2xzLCB0YXNrcXVldWUsIGlucXVldWUsIG91dHF1ZXVlLCBwb29sLAogICAgICAgICAgICAgICAgICAgICAgICAgd29ya2VyX2hhbmRsZXIsIHRhc2tfaGFuZGxlciwgcmVzdWx0X2hhbmRsZXIsIGNhY2hlKToKICAgICAgICAgIyB0aGlzIGlzIGd1YXJhbnRlZWQgdG8gb25seSBiZSBjYWxsZWQgb25jZQotICAgICAgICBkZWJ1ZygnZmluYWxpemluZyBwb29sJykKKyAgICAgICAgdXRpbC5kZWJ1ZygnZmluYWxpemluZyBwb29sJykKIAogICAgICAgICB3b3JrZXJfaGFuZGxlci5fc3RhdGUgPSBURVJNSU5BVEUKICAgICAgICAgdGFza19oYW5kbGVyLl9zdGF0ZSA9IFRFUk1JTkFURQogCi0gICAgICAgIGRlYnVnKCdoZWxwaW5nIHRhc2sgaGFuZGxlci93b3JrZXJzIHRvIGZpbmlzaCcpCisgICAgICAgIHV0aWwuZGVidWcoJ2hlbHBpbmcgdGFzayBoYW5kbGVyL3dvcmtlcnMgdG8gZmluaXNoJykKICAgICAgICAgY2xzLl9oZWxwX3N0dWZmX2ZpbmlzaChpbnF1ZXVlLCB0YXNrX2hhbmRsZXIsIGxlbihwb29sKSkKIAogICAgICAgICBhc3NlcnQgcmVzdWx0X2hhbmRsZXIuaXNfYWxpdmUoKSBvciBsZW4oY2FjaGUpID09IDAKQEAgLTUwMSwzMSArNTQxLDMxIEBACiAKICAgICAgICAgIyBXZSBtdXN0IHdhaXQgZm9yIHRoZSB3b3JrZXIgaGFuZGxlciB0byBleGl0IGJlZm9yZSB0ZXJtaW5hdGluZwogICAgICAgICAjIHdvcmtlcnMgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHdvcmtlcnMgdG8gYmUgcmVzdGFydGVkIGJlaGluZCBvdXIgYmFjay4KLSAgICAgICAgZGVidWcoJ2pvaW5pbmcgd29ya2VyIGhhbmRsZXInKQorICAgICAgICB1dGlsLmRlYnVnKCdqb2luaW5nIHdvcmtlciBoYW5kbGVyJykKICAgICAgICAgaWYgdGhyZWFkaW5nLmN1cnJlbnRfdGhyZWFkKCkgaXMgbm90IHdvcmtlcl9oYW5kbGVyOgogICAgICAgICAgICAgd29ya2VyX2hhbmRsZXIuam9pbigpCiAKICAgICAgICAgIyBUZXJtaW5hdGUgd29ya2VycyB3aGljaCBoYXZlbid0IGFscmVhZHkgZmluaXNoZWQuCiAgICAgICAgIGlmIHBvb2wgYW5kIGhhc2F0dHIocG9vbFswXSwgJ3Rlcm1pbmF0ZScpOgotICAgICAgICAgICAgZGVidWcoJ3Rlcm1pbmF0aW5nIHdvcmtlcnMnKQorICAgICAgICAgICAgdXRpbC5kZWJ1ZygndGVybWluYXRpbmcgd29ya2VycycpCiAgICAgICAgICAgICBmb3IgcCBpbiBwb29sOgogICAgICAgICAgICAgICAgIGlmIHAuZXhpdGNvZGUgaXMgTm9uZToKICAgICAgICAgICAgICAgICAgICAgcC50ZXJtaW5hdGUoKQogCi0gICAgICAgIGRlYnVnKCdqb2luaW5nIHRhc2sgaGFuZGxlcicpCisgICAgICAgIHV0aWwuZGVidWcoJ2pvaW5pbmcgdGFzayBoYW5kbGVyJykKICAgICAgICAgaWYgdGhyZWFkaW5nLmN1cnJlbnRfdGhyZWFkKCkgaXMgbm90IHRhc2tfaGFuZGxlcjoKICAgICAgICAgICAgIHRhc2tfaGFuZGxlci5qb2luKCkKIAotICAgICAgICBkZWJ1Zygnam9pbmluZyByZXN1bHQgaGFuZGxlcicpCisgICAgICAgIHV0aWwuZGVidWcoJ2pvaW5pbmcgcmVzdWx0IGhhbmRsZXInKQogICAgICAgICBpZiB0aHJlYWRpbmcuY3VycmVudF90aHJlYWQoKSBpcyBub3QgcmVzdWx0X2hhbmRsZXI6CiAgICAgICAgICAgICByZXN1bHRfaGFuZGxlci5qb2luKCkKIAogICAgICAgICBpZiBwb29sIGFuZCBoYXNhdHRyKHBvb2xbMF0sICd0ZXJtaW5hdGUnKToKLSAgICAgICAgICAgIGRlYnVnKCdqb2luaW5nIHBvb2wgd29ya2VycycpCisgICAgICAgICAgICB1dGlsLmRlYnVnKCdqb2luaW5nIHBvb2wgd29ya2VycycpCiAgICAgICAgICAgICBmb3IgcCBpbiBwb29sOgogICAgICAgICAgICAgICAgIGlmIHAuaXNfYWxpdmUoKToKICAgICAgICAgICAgICAgICAgICAgIyB3b3JrZXIgaGFzIG5vdCB5ZXQgZXhpdGVkCi0gICAgICAgICAgICAgICAgICAgIGRlYnVnKCdjbGVhbmluZyB1cCB3b3JrZXIgJWQnICUgcC5waWQpCisgICAgICAgICAgICAgICAgICAgIHV0aWwuZGVidWcoJ2NsZWFuaW5nIHVwIHdvcmtlciAlZCcgJSBwLnBpZCkKICAgICAgICAgICAgICAgICAgICAgcC5qb2luKCkKIAogICAgIGRlZiBfX2VudGVyX18oc2VsZik6CkBAIC03MTAsOCArNzUwLDEyIEBACiAjCiAKIGNsYXNzIFRocmVhZFBvb2woUG9vbCk6CisgICAgX3dyYXBfZXhjZXB0aW9uID0gRmFsc2UKIAotICAgIGZyb20gLmR1bW15IGltcG9ydCBQcm9jZXNzCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBQcm9jZXNzKCphcmdzLCAqKmt3ZHMpOgorICAgICAgICBmcm9tIC5kdW1teSBpbXBvcnQgUHJvY2VzcworICAgICAgICByZXR1cm4gUHJvY2VzcygqYXJncywgKiprd2RzKQogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHByb2Nlc3Nlcz1Ob25lLCBpbml0aWFsaXplcj1Ob25lLCBpbml0YXJncz0oKSk6CiAgICAgICAgIFBvb2wuX19pbml0X18oc2VsZiwgcHJvY2Vzc2VzLCBpbml0aWFsaXplciwgaW5pdGFyZ3MpCmRpZmYgLS1naXQgYS9MaWIvbXVsdGlwcm9jZXNzaW5nL3BvcGVuX2ZvcmsucHkgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL3BvcGVuX2ZvcmsucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzY3ZTcyZQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvcG9wZW5fZm9yay5weQpAQCAtMCwwICsxLDgzIEBACitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCBzaWduYWwKK2ltcG9ydCBlcnJubworCitmcm9tIC4gaW1wb3J0IHV0aWwKKworX19hbGxfXyA9IFsnUG9wZW4nXQorCisjCisjIFN0YXJ0IGNoaWxkIHByb2Nlc3MgdXNpbmcgZm9yaworIworCitjbGFzcyBQb3BlbihvYmplY3QpOgorICAgIG1ldGhvZCA9ICdmb3JrJworCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHByb2Nlc3Nfb2JqKToKKyAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCisgICAgICAgIHN5cy5zdGRlcnIuZmx1c2goKQorICAgICAgICBzZWxmLnJldHVybmNvZGUgPSBOb25lCisgICAgICAgIHNlbGYuX2xhdW5jaChwcm9jZXNzX29iaikKKworICAgIGRlZiBkdXBsaWNhdGVfZm9yX2NoaWxkKHNlbGYsIGZkKToKKyAgICAgICAgcmV0dXJuIGZkCisKKyAgICBkZWYgcG9sbChzZWxmLCBmbGFnPW9zLldOT0hBTkcpOgorICAgICAgICBpZiBzZWxmLnJldHVybmNvZGUgaXMgTm9uZToKKyAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBwaWQsIHN0cyA9IG9zLndhaXRwaWQoc2VsZi5waWQsIGZsYWcpCisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FSU5UUjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICMgQ2hpbGQgcHJvY2VzcyBub3QgeWV0IGNyZWF0ZWQuIFNlZSAjMTczMTcxNworICAgICAgICAgICAgICAgICAgICAjIGUuZXJybm8gPT0gZXJybm8uRUNISUxEID09IDEwCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGlmIHBpZCA9PSBzZWxmLnBpZDoKKyAgICAgICAgICAgICAgICBpZiBvcy5XSUZTSUdOQUxFRChzdHMpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnJldHVybmNvZGUgPSAtb3MuV1RFUk1TSUcoc3RzKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGFzc2VydCBvcy5XSUZFWElURUQoc3RzKQorICAgICAgICAgICAgICAgICAgICBzZWxmLnJldHVybmNvZGUgPSBvcy5XRVhJVFNUQVRVUyhzdHMpCisgICAgICAgIHJldHVybiBzZWxmLnJldHVybmNvZGUKKworICAgIGRlZiB3YWl0KHNlbGYsIHRpbWVvdXQ9Tm9uZSk6CisgICAgICAgIGlmIHNlbGYucmV0dXJuY29kZSBpcyBOb25lOgorICAgICAgICAgICAgaWYgdGltZW91dCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBmcm9tIG11bHRpcHJvY2Vzc2luZy5jb25uZWN0aW9uIGltcG9ydCB3YWl0CisgICAgICAgICAgICAgICAgaWYgbm90IHdhaXQoW3NlbGYuc2VudGluZWxdLCB0aW1lb3V0KToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgICAgICMgVGhpcyBzaG91bGRuJ3QgYmxvY2sgaWYgd2FpdCgpIHJldHVybmVkIHN1Y2Nlc3NmdWxseS4KKyAgICAgICAgICAgIHJldHVybiBzZWxmLnBvbGwob3MuV05PSEFORyBpZiB0aW1lb3V0ID09IDAuMCBlbHNlIDApCisgICAgICAgIHJldHVybiBzZWxmLnJldHVybmNvZGUKKworICAgIGRlZiB0ZXJtaW5hdGUoc2VsZik6CisgICAgICAgIGlmIHNlbGYucmV0dXJuY29kZSBpcyBOb25lOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG9zLmtpbGwoc2VsZi5waWQsIHNpZ25hbC5TSUdURVJNKQorICAgICAgICAgICAgZXhjZXB0IFByb2Nlc3NMb29rdXBFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICBpZiBzZWxmLndhaXQodGltZW91dD0wLjEpIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlCisKKyAgICBkZWYgX2xhdW5jaChzZWxmLCBwcm9jZXNzX29iaik6CisgICAgICAgIGNvZGUgPSAxCisgICAgICAgIHBhcmVudF9yLCBjaGlsZF93ID0gb3MucGlwZSgpCisgICAgICAgIHNlbGYucGlkID0gb3MuZm9yaygpCisgICAgICAgIGlmIHNlbGYucGlkID09IDA6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgb3MuY2xvc2UocGFyZW50X3IpCisgICAgICAgICAgICAgICAgaWYgJ3JhbmRvbScgaW4gc3lzLm1vZHVsZXM6CisgICAgICAgICAgICAgICAgICAgIGltcG9ydCByYW5kb20KKyAgICAgICAgICAgICAgICAgICAgcmFuZG9tLnNlZWQoKQorICAgICAgICAgICAgICAgIGNvZGUgPSBwcm9jZXNzX29iai5fYm9vdHN0cmFwKCkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgb3MuX2V4aXQoY29kZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG9zLmNsb3NlKGNoaWxkX3cpCisgICAgICAgICAgICB1dGlsLkZpbmFsaXplKHNlbGYsIG9zLmNsb3NlLCAocGFyZW50X3IsKSkKKyAgICAgICAgICAgIHNlbGYuc2VudGluZWwgPSBwYXJlbnRfcgpkaWZmIC0tZ2l0IGEvTGliL211bHRpcHJvY2Vzc2luZy9wb3Blbl9mb3Jrc2VydmVyLnB5IGIvTGliL211bHRpcHJvY2Vzc2luZy9wb3Blbl9mb3Jrc2VydmVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3OTIxOTQKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL3BvcGVuX2ZvcmtzZXJ2ZXIucHkKQEAgLTAsMCArMSw2OSBAQAoraW1wb3J0IGlvCitpbXBvcnQgb3MKKworZnJvbSAuIGltcG9ydCByZWR1Y3Rpb24KK2lmIG5vdCByZWR1Y3Rpb24uSEFWRV9TRU5EX0hBTkRMRToKKyAgICByYWlzZSBJbXBvcnRFcnJvcignTm8gc3VwcG9ydCBmb3Igc2VuZGluZyBmZHMgYmV0d2VlbiBwcm9jZXNzZXMnKQorZnJvbSAuIGltcG9ydCBjb250ZXh0Citmcm9tIC4gaW1wb3J0IGZvcmtzZXJ2ZXIKK2Zyb20gLiBpbXBvcnQgcG9wZW5fZm9yaworZnJvbSAuIGltcG9ydCBzcGF3bgorZnJvbSAuIGltcG9ydCB1dGlsCisKKworX19hbGxfXyA9IFsnUG9wZW4nXQorCisjCisjIFdyYXBwZXIgZm9yIGFuIGZkIHVzZWQgd2hpbGUgbGF1bmNoaW5nIGEgcHJvY2VzcworIworCitjbGFzcyBfRHVwRmQob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaW5kKToKKyAgICAgICAgc2VsZi5pbmQgPSBpbmQKKyAgICBkZWYgZGV0YWNoKHNlbGYpOgorICAgICAgICByZXR1cm4gZm9ya3NlcnZlci5nZXRfaW5oZXJpdGVkX2ZkcygpW3NlbGYuaW5kXQorCisjCisjIFN0YXJ0IGNoaWxkIHByb2Nlc3MgdXNpbmcgYSBzZXJ2ZXIgcHJvY2VzcworIworCitjbGFzcyBQb3Blbihwb3Blbl9mb3JrLlBvcGVuKToKKyAgICBtZXRob2QgPSAnZm9ya3NlcnZlcicKKyAgICBEdXBGZCA9IF9EdXBGZAorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHByb2Nlc3Nfb2JqKToKKyAgICAgICAgc2VsZi5fZmRzID0gW10KKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhwcm9jZXNzX29iaikKKworICAgIGRlZiBkdXBsaWNhdGVfZm9yX2NoaWxkKHNlbGYsIGZkKToKKyAgICAgICAgc2VsZi5fZmRzLmFwcGVuZChmZCkKKyAgICAgICAgcmV0dXJuIGxlbihzZWxmLl9mZHMpIC0gMQorCisgICAgZGVmIF9sYXVuY2goc2VsZiwgcHJvY2Vzc19vYmopOgorICAgICAgICBwcmVwX2RhdGEgPSBzcGF3bi5nZXRfcHJlcGFyYXRpb25fZGF0YShwcm9jZXNzX29iai5fbmFtZSkKKyAgICAgICAgYnVmID0gaW8uQnl0ZXNJTygpCisgICAgICAgIGNvbnRleHQuc2V0X3NwYXduaW5nX3BvcGVuKHNlbGYpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlZHVjdGlvbi5kdW1wKHByZXBfZGF0YSwgYnVmKQorICAgICAgICAgICAgcmVkdWN0aW9uLmR1bXAocHJvY2Vzc19vYmosIGJ1ZikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGNvbnRleHQuc2V0X3NwYXduaW5nX3BvcGVuKE5vbmUpCisKKyAgICAgICAgc2VsZi5zZW50aW5lbCwgdyA9IGZvcmtzZXJ2ZXIuY29ubmVjdF90b19uZXdfcHJvY2VzcyhzZWxmLl9mZHMpCisgICAgICAgIHV0aWwuRmluYWxpemUoc2VsZiwgb3MuY2xvc2UsIChzZWxmLnNlbnRpbmVsLCkpCisgICAgICAgIHdpdGggb3Blbih3LCAnd2InLCBjbG9zZWZkPVRydWUpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKGJ1Zi5nZXRidWZmZXIoKSkKKyAgICAgICAgc2VsZi5waWQgPSBmb3Jrc2VydmVyLnJlYWRfdW5zaWduZWQoc2VsZi5zZW50aW5lbCkKKworICAgIGRlZiBwb2xsKHNlbGYsIGZsYWc9b3MuV05PSEFORyk6CisgICAgICAgIGlmIHNlbGYucmV0dXJuY29kZSBpcyBOb25lOgorICAgICAgICAgICAgZnJvbSBtdWx0aXByb2Nlc3NpbmcuY29ubmVjdGlvbiBpbXBvcnQgd2FpdAorICAgICAgICAgICAgdGltZW91dCA9IDAgaWYgZmxhZyA9PSBvcy5XTk9IQU5HIGVsc2UgTm9uZQorICAgICAgICAgICAgaWYgbm90IHdhaXQoW3NlbGYuc2VudGluZWxdLCB0aW1lb3V0KToKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYucmV0dXJuY29kZSA9IGZvcmtzZXJ2ZXIucmVhZF91bnNpZ25lZChzZWxmLnNlbnRpbmVsKQorICAgICAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBFT0ZFcnJvcik6CisgICAgICAgICAgICAgICAgIyBUaGUgcHJvY2VzcyBlbmRlZCBhYm5vcm1hbGx5IHBlcmhhcHMgYmVjYXVzZSBvZiBhIHNpZ25hbAorICAgICAgICAgICAgICAgIHNlbGYucmV0dXJuY29kZSA9IDI1NQorICAgICAgICByZXR1cm4gc2VsZi5yZXR1cm5jb2RlCmRpZmYgLS1naXQgYS9MaWIvbXVsdGlwcm9jZXNzaW5nL3BvcGVuX3NwYXduX3Bvc2l4LnB5IGIvTGliL211bHRpcHJvY2Vzc2luZy9wb3Blbl9zcGF3bl9wb3NpeC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjBhOGQ2Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL211bHRpcHJvY2Vzc2luZy9wb3Blbl9zcGF3bl9wb3NpeC5weQpAQCAtMCwwICsxLDY5IEBACitpbXBvcnQgaW8KK2ltcG9ydCBvcworCitmcm9tIC4gaW1wb3J0IGNvbnRleHQKK2Zyb20gLiBpbXBvcnQgcG9wZW5fZm9yaworZnJvbSAuIGltcG9ydCByZWR1Y3Rpb24KK2Zyb20gLiBpbXBvcnQgc3Bhd24KK2Zyb20gLiBpbXBvcnQgdXRpbAorCitfX2FsbF9fID0gWydQb3BlbiddCisKKworIworIyBXcmFwcGVyIGZvciBhbiBmZCB1c2VkIHdoaWxlIGxhdW5jaGluZyBhIHByb2Nlc3MKKyMKKworY2xhc3MgX0R1cEZkKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZkKToKKyAgICAgICAgc2VsZi5mZCA9IGZkCisgICAgZGVmIGRldGFjaChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZmQKKworIworIyBTdGFydCBjaGlsZCBwcm9jZXNzIHVzaW5nIGEgZnJlc2ggaW50ZXJwcmV0ZXIKKyMKKworY2xhc3MgUG9wZW4ocG9wZW5fZm9yay5Qb3Blbik6CisgICAgbWV0aG9kID0gJ3NwYXduJworICAgIER1cEZkID0gX0R1cEZkCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcHJvY2Vzc19vYmopOgorICAgICAgICBzZWxmLl9mZHMgPSBbXQorICAgICAgICBzdXBlcigpLl9faW5pdF9fKHByb2Nlc3Nfb2JqKQorCisgICAgZGVmIGR1cGxpY2F0ZV9mb3JfY2hpbGQoc2VsZiwgZmQpOgorICAgICAgICBzZWxmLl9mZHMuYXBwZW5kKGZkKQorICAgICAgICByZXR1cm4gZmQKKworICAgIGRlZiBfbGF1bmNoKHNlbGYsIHByb2Nlc3Nfb2JqKToKKyAgICAgICAgZnJvbSAuIGltcG9ydCBzZW1hcGhvcmVfdHJhY2tlcgorICAgICAgICB0cmFja2VyX2ZkID0gc2VtYXBob3JlX3RyYWNrZXIuZ2V0ZmQoKQorICAgICAgICBzZWxmLl9mZHMuYXBwZW5kKHRyYWNrZXJfZmQpCisgICAgICAgIHByZXBfZGF0YSA9IHNwYXduLmdldF9wcmVwYXJhdGlvbl9kYXRhKHByb2Nlc3Nfb2JqLl9uYW1lKQorICAgICAgICBmcCA9IGlvLkJ5dGVzSU8oKQorICAgICAgICBjb250ZXh0LnNldF9zcGF3bmluZ19wb3BlbihzZWxmKQorICAgICAgICB0cnk6CisgICAgICAgICAgICByZWR1Y3Rpb24uZHVtcChwcmVwX2RhdGEsIGZwKQorICAgICAgICAgICAgcmVkdWN0aW9uLmR1bXAocHJvY2Vzc19vYmosIGZwKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgY29udGV4dC5zZXRfc3Bhd25pbmdfcG9wZW4oTm9uZSkKKworICAgICAgICBwYXJlbnRfciA9IGNoaWxkX3cgPSBjaGlsZF9yID0gcGFyZW50X3cgPSBOb25lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHBhcmVudF9yLCBjaGlsZF93ID0gb3MucGlwZSgpCisgICAgICAgICAgICBjaGlsZF9yLCBwYXJlbnRfdyA9IG9zLnBpcGUoKQorICAgICAgICAgICAgY21kID0gc3Bhd24uZ2V0X2NvbW1hbmRfbGluZSh0cmFja2VyX2ZkPXRyYWNrZXJfZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpcGVfaGFuZGxlPWNoaWxkX3IpCisgICAgICAgICAgICBzZWxmLl9mZHMuZXh0ZW5kKFtjaGlsZF9yLCBjaGlsZF93XSkKKyAgICAgICAgICAgIHNlbGYucGlkID0gdXRpbC5zcGF3bnZfcGFzc2ZkcyhzcGF3bi5nZXRfZXhlY3V0YWJsZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZCwgc2VsZi5fZmRzKQorICAgICAgICAgICAgc2VsZi5zZW50aW5lbCA9IHBhcmVudF9yCisgICAgICAgICAgICB3aXRoIG9wZW4ocGFyZW50X3csICd3YicsIGNsb3NlZmQ9RmFsc2UpIGFzIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZShmcC5nZXRidWZmZXIoKSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGlmIHBhcmVudF9yIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHV0aWwuRmluYWxpemUoc2VsZiwgb3MuY2xvc2UsIChwYXJlbnRfciwpKQorICAgICAgICAgICAgZm9yIGZkIGluIChjaGlsZF9yLCBjaGlsZF93LCBwYXJlbnRfdyk6CisgICAgICAgICAgICAgICAgaWYgZmQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIG9zLmNsb3NlKGZkKQpkaWZmIC0tZ2l0IGEvTGliL211bHRpcHJvY2Vzc2luZy9wb3Blbl9zcGF3bl93aW4zMi5weSBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvcG9wZW5fc3Bhd25fd2luMzIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I1MzA2OAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvcG9wZW5fc3Bhd25fd2luMzIucHkKQEAgLTAsMCArMSw5OSBAQAoraW1wb3J0IG9zCitpbXBvcnQgbXN2Y3J0CitpbXBvcnQgc2lnbmFsCitpbXBvcnQgc3lzCitpbXBvcnQgX3dpbmFwaQorCitmcm9tIC4gaW1wb3J0IGNvbnRleHQKK2Zyb20gLiBpbXBvcnQgc3Bhd24KK2Zyb20gLiBpbXBvcnQgcmVkdWN0aW9uCitmcm9tIC4gaW1wb3J0IHV0aWwKKworX19hbGxfXyA9IFsnUG9wZW4nXQorCisjCisjCisjCisKK1RFUk1JTkFURSA9IDB4MTAwMDAKK1dJTkVYRSA9IChzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJyBhbmQgZ2V0YXR0cihzeXMsICdmcm96ZW4nLCBGYWxzZSkpCitXSU5TRVJWSUNFID0gc3lzLmV4ZWN1dGFibGUubG93ZXIoKS5lbmRzd2l0aCgicHl0aG9uc2VydmljZS5leGUiKQorCisjCisjIFdlIGRlZmluZSBhIFBvcGVuIGNsYXNzIHNpbWlsYXIgdG8gdGhlIG9uZSBmcm9tIHN1YnByb2Nlc3MsIGJ1dAorIyB3aG9zZSBjb25zdHJ1Y3RvciB0YWtlcyBhIHByb2Nlc3Mgb2JqZWN0IGFzIGl0cyBhcmd1bWVudC4KKyMKKworY2xhc3MgUG9wZW4ob2JqZWN0KToKKyAgICAnJycKKyAgICBTdGFydCBhIHN1YnByb2Nlc3MgdG8gcnVuIHRoZSBjb2RlIG9mIGEgcHJvY2VzcyBvYmplY3QKKyAgICAnJycKKyAgICBtZXRob2QgPSAnc3Bhd24nCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcHJvY2Vzc19vYmopOgorICAgICAgICBwcmVwX2RhdGEgPSBzcGF3bi5nZXRfcHJlcGFyYXRpb25fZGF0YShwcm9jZXNzX29iai5fbmFtZSkKKworICAgICAgICAjIHJlYWQgZW5kIG9mIHBpcGUgd2lsbCBiZSAic3RvbGVuIiBieSB0aGUgY2hpbGQgcHJvY2VzcworICAgICAgICAjIC0tIHNlZSBzcGF3bl9tYWluKCkgaW4gc3Bhd24ucHkuCisgICAgICAgIHJoYW5kbGUsIHdoYW5kbGUgPSBfd2luYXBpLkNyZWF0ZVBpcGUoTm9uZSwgMCkKKyAgICAgICAgd2ZkID0gbXN2Y3J0Lm9wZW5fb3NmaGFuZGxlKHdoYW5kbGUsIDApCisgICAgICAgIGNtZCA9IHNwYXduLmdldF9jb21tYW5kX2xpbmUocGFyZW50X3BpZD1vcy5nZXRwaWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXBlX2hhbmRsZT1yaGFuZGxlKQorICAgICAgICBjbWQgPSAnICcuam9pbignIiVzIicgJSB4IGZvciB4IGluIGNtZCkKKworICAgICAgICB3aXRoIG9wZW4od2ZkLCAnd2InLCBjbG9zZWZkPVRydWUpIGFzIHRvX2NoaWxkOgorICAgICAgICAgICAgIyBzdGFydCBwcm9jZXNzCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaHAsIGh0LCBwaWQsIHRpZCA9IF93aW5hcGkuQ3JlYXRlUHJvY2VzcygKKyAgICAgICAgICAgICAgICAgICAgc3Bhd24uZ2V0X2V4ZWN1dGFibGUoKSwgY21kLAorICAgICAgICAgICAgICAgICAgICBOb25lLCBOb25lLCBGYWxzZSwgMCwgTm9uZSwgTm9uZSwgTm9uZSkKKyAgICAgICAgICAgICAgICBfd2luYXBpLkNsb3NlSGFuZGxlKGh0KQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIF93aW5hcGkuQ2xvc2VIYW5kbGUocmhhbmRsZSkKKyAgICAgICAgICAgICAgICByYWlzZQorCisgICAgICAgICAgICAjIHNldCBhdHRyaWJ1dGVzIG9mIHNlbGYKKyAgICAgICAgICAgIHNlbGYucGlkID0gcGlkCisgICAgICAgICAgICBzZWxmLnJldHVybmNvZGUgPSBOb25lCisgICAgICAgICAgICBzZWxmLl9oYW5kbGUgPSBocAorICAgICAgICAgICAgc2VsZi5zZW50aW5lbCA9IGludChocCkKKyAgICAgICAgICAgIHV0aWwuRmluYWxpemUoc2VsZiwgX3dpbmFwaS5DbG9zZUhhbmRsZSwgKHNlbGYuc2VudGluZWwsKSkKKworICAgICAgICAgICAgIyBzZW5kIGluZm9ybWF0aW9uIHRvIGNoaWxkCisgICAgICAgICAgICBjb250ZXh0LnNldF9zcGF3bmluZ19wb3BlbihzZWxmKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJlZHVjdGlvbi5kdW1wKHByZXBfZGF0YSwgdG9fY2hpbGQpCisgICAgICAgICAgICAgICAgcmVkdWN0aW9uLmR1bXAocHJvY2Vzc19vYmosIHRvX2NoaWxkKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBjb250ZXh0LnNldF9zcGF3bmluZ19wb3BlbihOb25lKQorCisgICAgZGVmIGR1cGxpY2F0ZV9mb3JfY2hpbGQoc2VsZiwgaGFuZGxlKToKKyAgICAgICAgYXNzZXJ0IHNlbGYgaXMgY29udGV4dC5nZXRfc3Bhd25pbmdfcG9wZW4oKQorICAgICAgICByZXR1cm4gcmVkdWN0aW9uLmR1cGxpY2F0ZShoYW5kbGUsIHNlbGYuc2VudGluZWwpCisKKyAgICBkZWYgd2FpdChzZWxmLCB0aW1lb3V0PU5vbmUpOgorICAgICAgICBpZiBzZWxmLnJldHVybmNvZGUgaXMgTm9uZToKKyAgICAgICAgICAgIGlmIHRpbWVvdXQgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBtc2VjcyA9IF93aW5hcGkuSU5GSU5JVEUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbXNlY3MgPSBtYXgoMCwgaW50KHRpbWVvdXQgKiAxMDAwICsgMC41KSkKKworICAgICAgICAgICAgcmVzID0gX3dpbmFwaS5XYWl0Rm9yU2luZ2xlT2JqZWN0KGludChzZWxmLl9oYW5kbGUpLCBtc2VjcykKKyAgICAgICAgICAgIGlmIHJlcyA9PSBfd2luYXBpLldBSVRfT0JKRUNUXzA6CisgICAgICAgICAgICAgICAgY29kZSA9IF93aW5hcGkuR2V0RXhpdENvZGVQcm9jZXNzKHNlbGYuX2hhbmRsZSkKKyAgICAgICAgICAgICAgICBpZiBjb2RlID09IFRFUk1JTkFURToKKyAgICAgICAgICAgICAgICAgICAgY29kZSA9IC1zaWduYWwuU0lHVEVSTQorICAgICAgICAgICAgICAgIHNlbGYucmV0dXJuY29kZSA9IGNvZGUKKworICAgICAgICByZXR1cm4gc2VsZi5yZXR1cm5jb2RlCisKKyAgICBkZWYgcG9sbChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYud2FpdCh0aW1lb3V0PTApCisKKyAgICBkZWYgdGVybWluYXRlKHNlbGYpOgorICAgICAgICBpZiBzZWxmLnJldHVybmNvZGUgaXMgTm9uZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBfd2luYXBpLlRlcm1pbmF0ZVByb2Nlc3MoaW50KHNlbGYuX2hhbmRsZSksIFRFUk1JTkFURSkKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgIGlmIHNlbGYud2FpdCh0aW1lb3V0PTEuMCkgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKZGlmZiAtLWdpdCBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvcHJvY2Vzcy5weSBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvcHJvY2Vzcy5weQppbmRleCAzZDMyYWRkLi42ODk1OWJmIDEwMDY0NAotLS0gYS9MaWIvbXVsdGlwcm9jZXNzaW5nL3Byb2Nlc3MucHkKKysrIGIvTGliL211bHRpcHJvY2Vzc2luZy9wcm9jZXNzLnB5CkBAIC03LDcgKzcsNyBAQAogIyBMaWNlbnNlZCB0byBQU0YgdW5kZXIgYSBDb250cmlidXRvciBBZ3JlZW1lbnQuCiAjCiAKLV9fYWxsX18gPSBbJ1Byb2Nlc3MnLCAnY3VycmVudF9wcm9jZXNzJywgJ2FjdGl2ZV9jaGlsZHJlbiddCitfX2FsbF9fID0gWydCYXNlUHJvY2VzcycsICdjdXJyZW50X3Byb2Nlc3MnLCAnYWN0aXZlX2NoaWxkcmVuJ10KIAogIwogIyBJbXBvcnRzCkBAIC00Myw3ICs0Myw3IEBACiAgICAgUmV0dXJuIGxpc3Qgb2YgcHJvY2VzcyBvYmplY3RzIGNvcnJlc3BvbmRpbmcgdG8gbGl2ZSBjaGlsZCBwcm9jZXNzZXMKICAgICAnJycKICAgICBfY2xlYW51cCgpCi0gICAgcmV0dXJuIGxpc3QoX2N1cnJlbnRfcHJvY2Vzcy5fY2hpbGRyZW4pCisgICAgcmV0dXJuIGxpc3QoX2NoaWxkcmVuKQogCiAjCiAjCkBAIC01MSwzMyArNTEsMjkgQEAKIAogZGVmIF9jbGVhbnVwKCk6CiAgICAgIyBjaGVjayBmb3IgcHJvY2Vzc2VzIHdoaWNoIGhhdmUgZmluaXNoZWQKLSAgICBmb3IgcCBpbiBsaXN0KF9jdXJyZW50X3Byb2Nlc3MuX2NoaWxkcmVuKToKKyAgICBmb3IgcCBpbiBsaXN0KF9jaGlsZHJlbik6CiAgICAgICAgIGlmIHAuX3BvcGVuLnBvbGwoKSBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIF9jdXJyZW50X3Byb2Nlc3MuX2NoaWxkcmVuLmRpc2NhcmQocCkKKyAgICAgICAgICAgIF9jaGlsZHJlbi5kaXNjYXJkKHApCiAKICMKICMgVGhlIGBQcm9jZXNzYCBjbGFzcwogIwogCi1jbGFzcyBQcm9jZXNzKG9iamVjdCk6CitjbGFzcyBCYXNlUHJvY2VzcyhvYmplY3QpOgogICAgICcnJwogICAgIFByb2Nlc3Mgb2JqZWN0cyByZXByZXNlbnQgYWN0aXZpdHkgdGhhdCBpcyBydW4gaW4gYSBzZXBhcmF0ZSBwcm9jZXNzCiAKLSAgICBUaGUgY2xhc3MgaXMgYW5hbGFnb3VzIHRvIGB0aHJlYWRpbmcuVGhyZWFkYAorICAgIFRoZSBjbGFzcyBpcyBhbmFsb2dvdXMgdG8gYHRocmVhZGluZy5UaHJlYWRgCiAgICAgJycnCi0gICAgX1BvcGVuID0gTm9uZQorICAgIGRlZiBfUG9wZW4oc2VsZik6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBncm91cD1Ob25lLCB0YXJnZXQ9Tm9uZSwgbmFtZT1Ob25lLCBhcmdzPSgpLCBrd2FyZ3M9e30sCiAgICAgICAgICAgICAgICAgICosIGRhZW1vbj1Ob25lKToKICAgICAgICAgYXNzZXJ0IGdyb3VwIGlzIE5vbmUsICdncm91cCBhcmd1bWVudCBtdXN0IGJlIE5vbmUgZm9yIG5vdycKLSAgICAgICAgY291bnQgPSBuZXh0KF9jdXJyZW50X3Byb2Nlc3MuX2NvdW50ZXIpCisgICAgICAgIGNvdW50ID0gbmV4dChfcHJvY2Vzc19jb3VudGVyKQogICAgICAgICBzZWxmLl9pZGVudGl0eSA9IF9jdXJyZW50X3Byb2Nlc3MuX2lkZW50aXR5ICsgKGNvdW50LCkKLSAgICAgICAgc2VsZi5fYXV0aGtleSA9IF9jdXJyZW50X3Byb2Nlc3MuX2F1dGhrZXkKLSAgICAgICAgaWYgZGFlbW9uIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgc2VsZi5fZGFlbW9uaWMgPSBkYWVtb24KLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuX2RhZW1vbmljID0gX2N1cnJlbnRfcHJvY2Vzcy5fZGFlbW9uaWMKLSAgICAgICAgc2VsZi5fdGVtcGRpciA9IF9jdXJyZW50X3Byb2Nlc3MuX3RlbXBkaXIKKyAgICAgICAgc2VsZi5fY29uZmlnID0gX2N1cnJlbnRfcHJvY2Vzcy5fY29uZmlnLmNvcHkoKQogICAgICAgICBzZWxmLl9wYXJlbnRfcGlkID0gb3MuZ2V0cGlkKCkKICAgICAgICAgc2VsZi5fcG9wZW4gPSBOb25lCiAgICAgICAgIHNlbGYuX3RhcmdldCA9IHRhcmdldApAQCAtODUsNiArODEsOCBAQAogICAgICAgICBzZWxmLl9rd2FyZ3MgPSBkaWN0KGt3YXJncykKICAgICAgICAgc2VsZi5fbmFtZSA9IG5hbWUgb3IgdHlwZShzZWxmKS5fX25hbWVfXyArICctJyArIFwKICAgICAgICAgICAgICAgICAgICAgICc6Jy5qb2luKHN0cihpKSBmb3IgaSBpbiBzZWxmLl9pZGVudGl0eSkKKyAgICAgICAgaWYgZGFlbW9uIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5kYWVtb24gPSBkYWVtb24KICAgICAgICAgX2RhbmdsaW5nLmFkZChzZWxmKQogCiAgICAgZGVmIHJ1bihzZWxmKToKQEAgLTEwMSwxNiArOTksMTIgQEAKICAgICAgICAgYXNzZXJ0IHNlbGYuX3BvcGVuIGlzIE5vbmUsICdjYW5ub3Qgc3RhcnQgYSBwcm9jZXNzIHR3aWNlJwogICAgICAgICBhc3NlcnQgc2VsZi5fcGFyZW50X3BpZCA9PSBvcy5nZXRwaWQoKSwgXAogICAgICAgICAgICAgICAgJ2NhbiBvbmx5IHN0YXJ0IGEgcHJvY2VzcyBvYmplY3QgY3JlYXRlZCBieSBjdXJyZW50IHByb2Nlc3MnCi0gICAgICAgIGFzc2VydCBub3QgX2N1cnJlbnRfcHJvY2Vzcy5fZGFlbW9uaWMsIFwKKyAgICAgICAgYXNzZXJ0IG5vdCBfY3VycmVudF9wcm9jZXNzLl9jb25maWcuZ2V0KCdkYWVtb24nKSwgXAogICAgICAgICAgICAgICAgJ2RhZW1vbmljIHByb2Nlc3NlcyBhcmUgbm90IGFsbG93ZWQgdG8gaGF2ZSBjaGlsZHJlbicKICAgICAgICAgX2NsZWFudXAoKQotICAgICAgICBpZiBzZWxmLl9Qb3BlbiBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIFBvcGVuID0gc2VsZi5fUG9wZW4KLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGZyb20gLmZvcmtpbmcgaW1wb3J0IFBvcGVuCi0gICAgICAgIHNlbGYuX3BvcGVuID0gUG9wZW4oc2VsZikKKyAgICAgICAgc2VsZi5fcG9wZW4gPSBzZWxmLl9Qb3BlbihzZWxmKQogICAgICAgICBzZWxmLl9zZW50aW5lbCA9IHNlbGYuX3BvcGVuLnNlbnRpbmVsCi0gICAgICAgIF9jdXJyZW50X3Byb2Nlc3MuX2NoaWxkcmVuLmFkZChzZWxmKQorICAgICAgICBfY2hpbGRyZW4uYWRkKHNlbGYpCiAKICAgICBkZWYgdGVybWluYXRlKHNlbGYpOgogICAgICAgICAnJycKQEAgLTEyNiw3ICsxMjAsNyBAQAogICAgICAgICBhc3NlcnQgc2VsZi5fcG9wZW4gaXMgbm90IE5vbmUsICdjYW4gb25seSBqb2luIGEgc3RhcnRlZCBwcm9jZXNzJwogICAgICAgICByZXMgPSBzZWxmLl9wb3Blbi53YWl0KHRpbWVvdXQpCiAgICAgICAgIGlmIHJlcyBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIF9jdXJyZW50X3Byb2Nlc3MuX2NoaWxkcmVuLmRpc2NhcmQoc2VsZikKKyAgICAgICAgICAgIF9jaGlsZHJlbi5kaXNjYXJkKHNlbGYpCiAKICAgICBkZWYgaXNfYWxpdmUoc2VsZik6CiAgICAgICAgICcnJwpAQCAtMTU0LDcgKzE0OCw3IEBACiAgICAgICAgICcnJwogICAgICAgICBSZXR1cm4gd2hldGhlciBwcm9jZXNzIGlzIGEgZGFlbW9uCiAgICAgICAgICcnJwotICAgICAgICByZXR1cm4gc2VsZi5fZGFlbW9uaWMKKyAgICAgICAgcmV0dXJuIHNlbGYuX2NvbmZpZy5nZXQoJ2RhZW1vbicsIEZhbHNlKQogCiAgICAgQGRhZW1vbi5zZXR0ZXIKICAgICBkZWYgZGFlbW9uKHNlbGYsIGRhZW1vbmljKToKQEAgLTE2MiwxOCArMTU2LDE4IEBACiAgICAgICAgIFNldCB3aGV0aGVyIHByb2Nlc3MgaXMgYSBkYWVtb24KICAgICAgICAgJycnCiAgICAgICAgIGFzc2VydCBzZWxmLl9wb3BlbiBpcyBOb25lLCAncHJvY2VzcyBoYXMgYWxyZWFkeSBzdGFydGVkJwotICAgICAgICBzZWxmLl9kYWVtb25pYyA9IGRhZW1vbmljCisgICAgICAgIHNlbGYuX2NvbmZpZ1snZGFlbW9uJ10gPSBkYWVtb25pYwogCiAgICAgQHByb3BlcnR5CiAgICAgZGVmIGF1dGhrZXkoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLl9hdXRoa2V5CisgICAgICAgIHJldHVybiBzZWxmLl9jb25maWdbJ2F1dGhrZXknXQogCiAgICAgQGF1dGhrZXkuc2V0dGVyCiAgICAgZGVmIGF1dGhrZXkoc2VsZiwgYXV0aGtleSk6CiAgICAgICAgICcnJwogICAgICAgICBTZXQgYXV0aG9yaXphdGlvbiBrZXkgb2YgcHJvY2VzcwogICAgICAgICAnJycKLSAgICAgICAgc2VsZi5fYXV0aGtleSA9IEF1dGhlbnRpY2F0aW9uU3RyaW5nKGF1dGhrZXkpCisgICAgICAgIHNlbGYuX2NvbmZpZ1snYXV0aGtleSddID0gQXV0aGVudGljYXRpb25TdHJpbmcoYXV0aGtleSkKIAogICAgIEBwcm9wZXJ0eQogICAgIGRlZiBleGl0Y29kZShzZWxmKToKQEAgLTIyNywxNyArMjIxLDE5IEBACiAgICAgICAgICAgICAgICAgc3RhdHVzID0gJ3N0b3BwZWRbJXNdJyAlIF9leGl0Y29kZV90b19uYW1lLmdldChzdGF0dXMsIHN0YXR1cykKIAogICAgICAgICByZXR1cm4gJzwlcyglcywgJXMlcyk+JyAlICh0eXBlKHNlbGYpLl9fbmFtZV9fLCBzZWxmLl9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMsIHNlbGYuX2RhZW1vbmljIGFuZCAnIGRhZW1vbicgb3IgJycpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cywgc2VsZi5kYWVtb24gYW5kICcgZGFlbW9uJyBvciAnJykKIAogICAgICMjCiAKICAgICBkZWYgX2Jvb3RzdHJhcChzZWxmKToKLSAgICAgICAgZnJvbSAuIGltcG9ydCB1dGlsCi0gICAgICAgIGdsb2JhbCBfY3VycmVudF9wcm9jZXNzCisgICAgICAgIGZyb20gLiBpbXBvcnQgdXRpbCwgY29udGV4dAorICAgICAgICBnbG9iYWwgX2N1cnJlbnRfcHJvY2VzcywgX3Byb2Nlc3NfY291bnRlciwgX2NoaWxkcmVuCiAKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgc2VsZi5fY2hpbGRyZW4gPSBzZXQoKQotICAgICAgICAgICAgc2VsZi5fY291bnRlciA9IGl0ZXJ0b29scy5jb3VudCgxKQorICAgICAgICAgICAgaWYgc2VsZi5fc3RhcnRfbWV0aG9kIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGNvbnRleHQuX2ZvcmNlX3N0YXJ0X21ldGhvZChzZWxmLl9zdGFydF9tZXRob2QpCisgICAgICAgICAgICBfcHJvY2Vzc19jb3VudGVyID0gaXRlcnRvb2xzLmNvdW50KDEpCisgICAgICAgICAgICBfY2hpbGRyZW4gPSBzZXQoKQogICAgICAgICAgICAgaWYgc3lzLnN0ZGluIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZGluLmNsb3NlKCkKQEAgLTI4NSw4ICsyODEsOCBAQAogCiBjbGFzcyBBdXRoZW50aWNhdGlvblN0cmluZyhieXRlcyk6CiAgICAgZGVmIF9fcmVkdWNlX18oc2VsZik6Ci0gICAgICAgIGZyb20gLmZvcmtpbmcgaW1wb3J0IFBvcGVuCi0gICAgICAgIGlmIG5vdCBQb3Blbi50aHJlYWRfaXNfc3Bhd25pbmcoKToKKyAgICAgICAgZnJvbSAuY29udGV4dCBpbXBvcnQgZ2V0X3NwYXduaW5nX3BvcGVuCisgICAgICAgIGlmIGdldF9zcGF3bmluZ19wb3BlbigpIGlzIE5vbmU6CiAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoCiAgICAgICAgICAgICAgICAgJ1BpY2tsaW5nIGFuIEF1dGhlbnRpY2F0aW9uU3RyaW5nIG9iamVjdCBpcyAnCiAgICAgICAgICAgICAgICAgJ2Rpc2FsbG93ZWQgZm9yIHNlY3VyaXR5IHJlYXNvbnMnCkBAIC0yOTcsMjAgKzI5MywyOSBAQAogIyBDcmVhdGUgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgbWFpbiBwcm9jZXNzCiAjCiAKLWNsYXNzIF9NYWluUHJvY2VzcyhQcm9jZXNzKToKK2NsYXNzIF9NYWluUHJvY2VzcyhCYXNlUHJvY2Vzcyk6CiAKICAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgIHNlbGYuX2lkZW50aXR5ID0gKCkKLSAgICAgICAgc2VsZi5fZGFlbW9uaWMgPSBGYWxzZQogICAgICAgICBzZWxmLl9uYW1lID0gJ01haW5Qcm9jZXNzJwogICAgICAgICBzZWxmLl9wYXJlbnRfcGlkID0gTm9uZQogICAgICAgICBzZWxmLl9wb3BlbiA9IE5vbmUKLSAgICAgICAgc2VsZi5fY291bnRlciA9IGl0ZXJ0b29scy5jb3VudCgxKQotICAgICAgICBzZWxmLl9jaGlsZHJlbiA9IHNldCgpCi0gICAgICAgIHNlbGYuX2F1dGhrZXkgPSBBdXRoZW50aWNhdGlvblN0cmluZyhvcy51cmFuZG9tKDMyKSkKLSAgICAgICAgc2VsZi5fdGVtcGRpciA9IE5vbmUKKyAgICAgICAgc2VsZi5fY29uZmlnID0geydhdXRoa2V5JzogQXV0aGVudGljYXRpb25TdHJpbmcob3MudXJhbmRvbSgzMikpLAorICAgICAgICAgICAgICAgICAgICAgICAgJ3NlbXByZWZpeCc6ICcvbXAnfQorICAgICAgICAjIE5vdGUgdGhhdCBzb21lIHZlcnNpb25zIG9mIEZyZWVCU0Qgb25seSBhbGxvdyBuYW1lZAorICAgICAgICAjIHNlbWFwaG9yZXMgdG8gaGF2ZSBuYW1lcyBvZiB1cCB0byAxNCBjaGFyYWN0ZXJzLiAgVGhlcmVmb3JlCisgICAgICAgICMgd2UgY2hvb3NlIGEgc2hvcnQgcHJlZml4LgorICAgICAgICAjCisgICAgICAgICMgT24gTWFjT1NYIGluIGEgc2FuZGJveCBpdCBtYXkgYmUgbmVjZXNzYXJ5IHRvIHVzZSBhCisgICAgICAgICMgZGlmZmVyZW50IHByZWZpeCAtLSBzZWUgIzE5NDc4LgorICAgICAgICAjCisgICAgICAgICMgRXZlcnl0aGluZyBpbiBzZWxmLl9jb25maWcgd2lsbCBiZSBpbmhlcml0ZWQgYnkgZGVzY2VuZGFudAorICAgICAgICAjIHByb2Nlc3Nlcy4KKwogCiBfY3VycmVudF9wcm9jZXNzID0gX01haW5Qcm9jZXNzKCkKK19wcm9jZXNzX2NvdW50ZXIgPSBpdGVydG9vbHMuY291bnQoMSkKK19jaGlsZHJlbiA9IHNldCgpCiBkZWwgX01haW5Qcm9jZXNzCiAKICMKZGlmZiAtLWdpdCBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvcXVldWVzLnB5IGIvTGliL211bHRpcHJvY2Vzc2luZy9xdWV1ZXMucHkKaW5kZXggMzcyNzFmYi4uMjkzYWQ3NiAxMDA2NDQKLS0tIGEvTGliL211bHRpcHJvY2Vzc2luZy9xdWV1ZXMucHkKKysrIGIvTGliL211bHRpcHJvY2Vzc2luZy9xdWV1ZXMucHkKQEAgLTE4LDExICsxOCwxNCBAQAogaW1wb3J0IGVycm5vCiAKIGZyb20gcXVldWUgaW1wb3J0IEVtcHR5LCBGdWxsCisKIGltcG9ydCBfbXVsdGlwcm9jZXNzaW5nCi1mcm9tIG11bHRpcHJvY2Vzc2luZy5jb25uZWN0aW9uIGltcG9ydCBQaXBlCi1mcm9tIG11bHRpcHJvY2Vzc2luZy5zeW5jaHJvbml6ZSBpbXBvcnQgTG9jaywgQm91bmRlZFNlbWFwaG9yZSwgU2VtYXBob3JlLCBDb25kaXRpb24KLWZyb20gbXVsdGlwcm9jZXNzaW5nLnV0aWwgaW1wb3J0IGRlYnVnLCBpbmZvLCBGaW5hbGl6ZSwgcmVnaXN0ZXJfYWZ0ZXJfZm9yawotZnJvbSBtdWx0aXByb2Nlc3NpbmcuZm9ya2luZyBpbXBvcnQgYXNzZXJ0X3NwYXduaW5nCisKK2Zyb20gLiBpbXBvcnQgY29ubmVjdGlvbgorZnJvbSAuIGltcG9ydCBjb250ZXh0CisKK2Zyb20gLnV0aWwgaW1wb3J0IGRlYnVnLCBpbmZvLCBGaW5hbGl6ZSwgcmVnaXN0ZXJfYWZ0ZXJfZm9yaywgaXNfZXhpdGluZworZnJvbSAucmVkdWN0aW9uIGltcG9ydCBGb3JraW5nUGlja2xlcgogCiAjCiAjIFF1ZXVlIHR5cGUgdXNpbmcgYSBwaXBlLCBidWZmZXIgYW5kIHRocmVhZApAQCAtMzAsMTggKzMzLDE5IEBACiAKIGNsYXNzIFF1ZXVlKG9iamVjdCk6CiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbWF4c2l6ZT0wKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWF4c2l6ZT0wLCAqLCBjdHgpOgogICAgICAgICBpZiBtYXhzaXplIDw9IDA6Ci0gICAgICAgICAgICBtYXhzaXplID0gX211bHRpcHJvY2Vzc2luZy5TZW1Mb2NrLlNFTV9WQUxVRV9NQVgKKyAgICAgICAgICAgICMgQ2FuIHJhaXNlIEltcG9ydEVycm9yIChzZWUgaXNzdWVzICMzNzcwIGFuZCAjMjM0MDApCisgICAgICAgICAgICBmcm9tIC5zeW5jaHJvbml6ZSBpbXBvcnQgU0VNX1ZBTFVFX01BWCBhcyBtYXhzaXplCiAgICAgICAgIHNlbGYuX21heHNpemUgPSBtYXhzaXplCi0gICAgICAgIHNlbGYuX3JlYWRlciwgc2VsZi5fd3JpdGVyID0gUGlwZShkdXBsZXg9RmFsc2UpCi0gICAgICAgIHNlbGYuX3Jsb2NrID0gTG9jaygpCisgICAgICAgIHNlbGYuX3JlYWRlciwgc2VsZi5fd3JpdGVyID0gY29ubmVjdGlvbi5QaXBlKGR1cGxleD1GYWxzZSkKKyAgICAgICAgc2VsZi5fcmxvY2sgPSBjdHguTG9jaygpCiAgICAgICAgIHNlbGYuX29waWQgPSBvcy5nZXRwaWQoKQogICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKICAgICAgICAgICAgIHNlbGYuX3dsb2NrID0gTm9uZQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5fd2xvY2sgPSBMb2NrKCkKLSAgICAgICAgc2VsZi5fc2VtID0gQm91bmRlZFNlbWFwaG9yZShtYXhzaXplKQorICAgICAgICAgICAgc2VsZi5fd2xvY2sgPSBjdHguTG9jaygpCisgICAgICAgIHNlbGYuX3NlbSA9IGN0eC5Cb3VuZGVkU2VtYXBob3JlKG1heHNpemUpCiAgICAgICAgICMgRm9yIHVzZSBieSBjb25jdXJyZW50LmZ1dHVyZXMKICAgICAgICAgc2VsZi5faWdub3JlX2VwaXBlID0gRmFsc2UKIApAQCAtNTEsNyArNTUsNyBAQAogICAgICAgICAgICAgcmVnaXN0ZXJfYWZ0ZXJfZm9yayhzZWxmLCBRdWV1ZS5fYWZ0ZXJfZm9yaykKIAogICAgIGRlZiBfX2dldHN0YXRlX18oc2VsZik6Ci0gICAgICAgIGFzc2VydF9zcGF3bmluZyhzZWxmKQorICAgICAgICBjb250ZXh0LmFzc2VydF9zcGF3bmluZyhzZWxmKQogICAgICAgICByZXR1cm4gKHNlbGYuX2lnbm9yZV9lcGlwZSwgc2VsZi5fbWF4c2l6ZSwgc2VsZi5fcmVhZGVyLCBzZWxmLl93cml0ZXIsCiAgICAgICAgICAgICAgICAgc2VsZi5fcmxvY2ssIHNlbGYuX3dsb2NrLCBzZWxmLl9zZW0sIHNlbGYuX29waWQpCiAKQEAgLTY5LDggKzczLDggQEAKICAgICAgICAgc2VsZi5fam9pbmNhbmNlbGxlZCA9IEZhbHNlCiAgICAgICAgIHNlbGYuX2Nsb3NlZCA9IEZhbHNlCiAgICAgICAgIHNlbGYuX2Nsb3NlID0gTm9uZQotICAgICAgICBzZWxmLl9zZW5kID0gc2VsZi5fd3JpdGVyLnNlbmQKLSAgICAgICAgc2VsZi5fcmVjdiA9IHNlbGYuX3JlYWRlci5yZWN2CisgICAgICAgIHNlbGYuX3NlbmRfYnl0ZXMgPSBzZWxmLl93cml0ZXIuc2VuZF9ieXRlcworICAgICAgICBzZWxmLl9yZWN2X2J5dGVzID0gc2VsZi5fcmVhZGVyLnJlY3ZfYnl0ZXMKICAgICAgICAgc2VsZi5fcG9sbCA9IHNlbGYuX3JlYWRlci5wb2xsCiAKICAgICBkZWYgcHV0KHNlbGYsIG9iaiwgYmxvY2s9VHJ1ZSwgdGltZW91dD1Ob25lKToKQEAgLTg5LDE0ICs5Myw5IEBACiAKICAgICBkZWYgZ2V0KHNlbGYsIGJsb2NrPVRydWUsIHRpbWVvdXQ9Tm9uZSk6CiAgICAgICAgIGlmIGJsb2NrIGFuZCB0aW1lb3V0IGlzIE5vbmU6Ci0gICAgICAgICAgICBzZWxmLl9ybG9jay5hY3F1aXJlKCkKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICByZXMgPSBzZWxmLl9yZWN2KCkKLSAgICAgICAgICAgICAgICBzZWxmLl9zZW0ucmVsZWFzZSgpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJlcwotICAgICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgICAgICBzZWxmLl9ybG9jay5yZWxlYXNlKCkKLQorICAgICAgICAgICAgd2l0aCBzZWxmLl9ybG9jazoKKyAgICAgICAgICAgICAgICByZXMgPSBzZWxmLl9yZWN2X2J5dGVzKCkKKyAgICAgICAgICAgIHNlbGYuX3NlbS5yZWxlYXNlKCkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGlmIGJsb2NrOgogICAgICAgICAgICAgICAgIGRlYWRsaW5lID0gdGltZS50aW1lKCkgKyB0aW1lb3V0CkBAIC0xMDksMTEgKzEwOCwxMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRW1wdHkKICAgICAgICAgICAgICAgICBlbGlmIG5vdCBzZWxmLl9wb2xsKCk6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEVtcHR5Ci0gICAgICAgICAgICAgICAgcmVzID0gc2VsZi5fcmVjdigpCisgICAgICAgICAgICAgICAgcmVzID0gc2VsZi5fcmVjdl9ieXRlcygpCiAgICAgICAgICAgICAgICAgc2VsZi5fc2VtLnJlbGVhc2UoKQotICAgICAgICAgICAgICAgIHJldHVybiByZXMKICAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgc2VsZi5fcmxvY2sucmVsZWFzZSgpCisgICAgICAgICMgdW5zZXJpYWxpemUgdGhlIGRhdGEgYWZ0ZXIgaGF2aW5nIHJlbGVhc2VkIHRoZSBsb2NrCisgICAgICAgIHJldHVybiBGb3JraW5nUGlja2xlci5sb2FkcyhyZXMpCiAKICAgICBkZWYgcXNpemUoc2VsZik6CiAgICAgICAgICMgUmFpc2VzIE5vdEltcGxlbWVudGVkRXJyb3Igb24gTWFjIE9TWCBiZWNhdXNlIG9mIGJyb2tlbiBzZW1fZ2V0dmFsdWUoKQpAQCAtMTMzLDkgKzEzMywxMyBAQAogCiAgICAgZGVmIGNsb3NlKHNlbGYpOgogICAgICAgICBzZWxmLl9jbG9zZWQgPSBUcnVlCi0gICAgICAgIHNlbGYuX3JlYWRlci5jbG9zZSgpCi0gICAgICAgIGlmIHNlbGYuX2Nsb3NlOgotICAgICAgICAgICAgc2VsZi5fY2xvc2UoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl9yZWFkZXIuY2xvc2UoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgY2xvc2UgPSBzZWxmLl9jbG9zZQorICAgICAgICAgICAgaWYgY2xvc2U6CisgICAgICAgICAgICAgICAgc2VsZi5fY2xvc2UgPSBOb25lCisgICAgICAgICAgICAgICAgY2xvc2UoKQogCiAgICAgZGVmIGpvaW5fdGhyZWFkKHNlbGYpOgogICAgICAgICBkZWJ1ZygnUXVldWUuam9pbl90aHJlYWQoKScpCkBAIC0xNTgsNyArMTYyLDcgQEAKICAgICAgICAgc2VsZi5fYnVmZmVyLmNsZWFyKCkKICAgICAgICAgc2VsZi5fdGhyZWFkID0gdGhyZWFkaW5nLlRocmVhZCgKICAgICAgICAgICAgIHRhcmdldD1RdWV1ZS5fZmVlZCwKLSAgICAgICAgICAgIGFyZ3M9KHNlbGYuX2J1ZmZlciwgc2VsZi5fbm90ZW1wdHksIHNlbGYuX3NlbmQsCisgICAgICAgICAgICBhcmdzPShzZWxmLl9idWZmZXIsIHNlbGYuX25vdGVtcHR5LCBzZWxmLl9zZW5kX2J5dGVzLAogICAgICAgICAgICAgICAgICAgc2VsZi5fd2xvY2ssIHNlbGYuX3dyaXRlci5jbG9zZSwgc2VsZi5faWdub3JlX2VwaXBlKSwKICAgICAgICAgICAgIG5hbWU9J1F1ZXVlRmVlZGVyVGhyZWFkJwogICAgICAgICAgICAgKQpAQCAtMjEwLDEwICsyMTQsOCBAQAogICAgICAgICAgICAgbm90ZW1wdHkucmVsZWFzZSgpCiAKICAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIF9mZWVkKGJ1ZmZlciwgbm90ZW1wdHksIHNlbmQsIHdyaXRlbG9jaywgY2xvc2UsIGlnbm9yZV9lcGlwZSk6CisgICAgZGVmIF9mZWVkKGJ1ZmZlciwgbm90ZW1wdHksIHNlbmRfYnl0ZXMsIHdyaXRlbG9jaywgY2xvc2UsIGlnbm9yZV9lcGlwZSk6CiAgICAgICAgIGRlYnVnKCdzdGFydGluZyB0aHJlYWQgdG8gZmVlZCBkYXRhIHRvIHBpcGUnKQotICAgICAgICBmcm9tIC51dGlsIGltcG9ydCBpc19leGl0aW5nCi0KICAgICAgICAgbmFjcXVpcmUgPSBub3RlbXB0eS5hY3F1aXJlCiAgICAgICAgIG5yZWxlYXNlID0gbm90ZW1wdHkucmVsZWFzZQogICAgICAgICBud2FpdCA9IG5vdGVtcHR5LndhaXQKQEAgLTI0MSwxMiArMjQzLDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2UoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybgogCisgICAgICAgICAgICAgICAgICAgICAgICAjIHNlcmlhbGl6ZSB0aGUgZGF0YSBiZWZvcmUgYWNxdWlyaW5nIHRoZSBsb2NrCisgICAgICAgICAgICAgICAgICAgICAgICBvYmogPSBGb3JraW5nUGlja2xlci5kdW1wcyhvYmopCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiB3YWNxdWlyZSBpcyBOb25lOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmQob2JqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRfYnl0ZXMob2JqKQogICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YWNxdWlyZSgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW5kKG9iaikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VuZF9ieXRlcyhvYmopCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JlbGVhc2UoKQogICAgICAgICAgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgpAQCAtMjc5LDEwICsyODMsMTAgQEAKIAogY2xhc3MgSm9pbmFibGVRdWV1ZShRdWV1ZSk6CiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbWF4c2l6ZT0wKToKLSAgICAgICAgUXVldWUuX19pbml0X18oc2VsZiwgbWF4c2l6ZSkKLSAgICAgICAgc2VsZi5fdW5maW5pc2hlZF90YXNrcyA9IFNlbWFwaG9yZSgwKQotICAgICAgICBzZWxmLl9jb25kID0gQ29uZGl0aW9uKCkKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWF4c2l6ZT0wLCAqLCBjdHgpOgorICAgICAgICBRdWV1ZS5fX2luaXRfXyhzZWxmLCBtYXhzaXplLCBjdHg9Y3R4KQorICAgICAgICBzZWxmLl91bmZpbmlzaGVkX3Rhc2tzID0gY3R4LlNlbWFwaG9yZSgwKQorICAgICAgICBzZWxmLl9jb25kID0gY3R4LkNvbmRpdGlvbigpCiAKICAgICBkZWYgX19nZXRzdGF0ZV9fKHNlbGYpOgogICAgICAgICByZXR1cm4gUXVldWUuX19nZXRzdGF0ZV9fKHNlbGYpICsgKHNlbGYuX2NvbmQsIHNlbGYuX3VuZmluaXNoZWRfdGFza3MpCkBAIC0zMzIsNDggKzMzNiwzNyBAQAogCiBjbGFzcyBTaW1wbGVRdWV1ZShvYmplY3QpOgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICBzZWxmLl9yZWFkZXIsIHNlbGYuX3dyaXRlciA9IFBpcGUoZHVwbGV4PUZhbHNlKQotICAgICAgICBzZWxmLl9ybG9jayA9IExvY2soKQorICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqLCBjdHgpOgorICAgICAgICBzZWxmLl9yZWFkZXIsIHNlbGYuX3dyaXRlciA9IGNvbm5lY3Rpb24uUGlwZShkdXBsZXg9RmFsc2UpCisgICAgICAgIHNlbGYuX3Jsb2NrID0gY3R4LkxvY2soKQogICAgICAgICBzZWxmLl9wb2xsID0gc2VsZi5fcmVhZGVyLnBvbGwKICAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6CiAgICAgICAgICAgICBzZWxmLl93bG9jayA9IE5vbmUKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuX3dsb2NrID0gTG9jaygpCi0gICAgICAgIHNlbGYuX21ha2VfbWV0aG9kcygpCisgICAgICAgICAgICBzZWxmLl93bG9jayA9IGN0eC5Mb2NrKCkKIAogICAgIGRlZiBlbXB0eShzZWxmKToKICAgICAgICAgcmV0dXJuIG5vdCBzZWxmLl9wb2xsKCkKIAogICAgIGRlZiBfX2dldHN0YXRlX18oc2VsZik6Ci0gICAgICAgIGFzc2VydF9zcGF3bmluZyhzZWxmKQorICAgICAgICBjb250ZXh0LmFzc2VydF9zcGF3bmluZyhzZWxmKQogICAgICAgICByZXR1cm4gKHNlbGYuX3JlYWRlciwgc2VsZi5fd3JpdGVyLCBzZWxmLl9ybG9jaywgc2VsZi5fd2xvY2spCiAKICAgICBkZWYgX19zZXRzdGF0ZV9fKHNlbGYsIHN0YXRlKToKICAgICAgICAgKHNlbGYuX3JlYWRlciwgc2VsZi5fd3JpdGVyLCBzZWxmLl9ybG9jaywgc2VsZi5fd2xvY2spID0gc3RhdGUKLSAgICAgICAgc2VsZi5fbWFrZV9tZXRob2RzKCkKIAotICAgIGRlZiBfbWFrZV9tZXRob2RzKHNlbGYpOgotICAgICAgICByZWN2ID0gc2VsZi5fcmVhZGVyLnJlY3YKLSAgICAgICAgcmFjcXVpcmUsIHJyZWxlYXNlID0gc2VsZi5fcmxvY2suYWNxdWlyZSwgc2VsZi5fcmxvY2sucmVsZWFzZQotICAgICAgICBkZWYgZ2V0KCk6Ci0gICAgICAgICAgICByYWNxdWlyZSgpCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlY3YoKQotICAgICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgICAgICBycmVsZWFzZSgpCi0gICAgICAgIHNlbGYuZ2V0ID0gZ2V0CisgICAgZGVmIGdldChzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLl9ybG9jazoKKyAgICAgICAgICAgIHJlcyA9IHNlbGYuX3JlYWRlci5yZWN2X2J5dGVzKCkKKyAgICAgICAgIyB1bnNlcmlhbGl6ZSB0aGUgZGF0YSBhZnRlciBoYXZpbmcgcmVsZWFzZWQgdGhlIGxvY2sKKyAgICAgICAgcmV0dXJuIEZvcmtpbmdQaWNrbGVyLmxvYWRzKHJlcykKIAorICAgIGRlZiBwdXQoc2VsZiwgb2JqKToKKyAgICAgICAgIyBzZXJpYWxpemUgdGhlIGRhdGEgYmVmb3JlIGFjcXVpcmluZyB0aGUgbG9jaworICAgICAgICBvYmogPSBGb3JraW5nUGlja2xlci5kdW1wcyhvYmopCiAgICAgICAgIGlmIHNlbGYuX3dsb2NrIGlzIE5vbmU6CiAgICAgICAgICAgICAjIHdyaXRlcyB0byBhIG1lc3NhZ2Ugb3JpZW50ZWQgd2luMzIgcGlwZSBhcmUgYXRvbWljCi0gICAgICAgICAgICBzZWxmLnB1dCA9IHNlbGYuX3dyaXRlci5zZW5kCisgICAgICAgICAgICBzZWxmLl93cml0ZXIuc2VuZF9ieXRlcyhvYmopCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZW5kID0gc2VsZi5fd3JpdGVyLnNlbmQKLSAgICAgICAgICAgIHdhY3F1aXJlLCB3cmVsZWFzZSA9IHNlbGYuX3dsb2NrLmFjcXVpcmUsIHNlbGYuX3dsb2NrLnJlbGVhc2UKLSAgICAgICAgICAgIGRlZiBwdXQob2JqKToKLSAgICAgICAgICAgICAgICB3YWNxdWlyZSgpCi0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VuZChvYmopCi0gICAgICAgICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgICAgICAgICAgd3JlbGVhc2UoKQotICAgICAgICAgICAgc2VsZi5wdXQgPSBwdXQKKyAgICAgICAgICAgIHdpdGggc2VsZi5fd2xvY2s6CisgICAgICAgICAgICAgICAgc2VsZi5fd3JpdGVyLnNlbmRfYnl0ZXMob2JqKQpkaWZmIC0tZ2l0IGEvTGliL211bHRpcHJvY2Vzc2luZy9yZWR1Y3Rpb24ucHkgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL3JlZHVjdGlvbi5weQppbmRleCA2NTZmYThmLi44ZjIwOWI0IDEwMDY0NAotLS0gYS9MaWIvbXVsdGlwcm9jZXNzaW5nL3JlZHVjdGlvbi5weQorKysgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL3JlZHVjdGlvbi5weQpAQCAtMSw2ICsxLDUgQEAKICMKLSMgTW9kdWxlIHRvIGFsbG93IGNvbm5lY3Rpb24gYW5kIHNvY2tldCBvYmplY3RzIHRvIGJlIHRyYW5zZmVycmVkCi0jIGJldHdlZW4gcHJvY2Vzc2VzCisjIE1vZHVsZSB3aGljaCBkZWFscyB3aXRoIHBpY2tsaW5nIG9mIG9iamVjdHMuCiAjCiAjIG11bHRpcHJvY2Vzc2luZy9yZWR1Y3Rpb24ucHkKICMKQEAgLTgsMjcgKzcsNTYgQEAKICMgTGljZW5zZWQgdG8gUFNGIHVuZGVyIGEgQ29udHJpYnV0b3IgQWdyZWVtZW50LgogIwogCi1fX2FsbF9fID0gWydyZWR1Y2Vfc29ja2V0JywgJ3JlZHVjZV9jb25uZWN0aW9uJywgJ3NlbmRfaGFuZGxlJywgJ3JlY3ZfaGFuZGxlJ10KLQoraW1wb3J0IGNvcHlyZWcKK2ltcG9ydCBmdW5jdG9vbHMKK2ltcG9ydCBpbwogaW1wb3J0IG9zCi1pbXBvcnQgc3lzCitpbXBvcnQgcGlja2xlCiBpbXBvcnQgc29ja2V0Ci1pbXBvcnQgdGhyZWFkaW5nCi1pbXBvcnQgc3RydWN0Ci1pbXBvcnQgc2lnbmFsCitpbXBvcnQgc3lzCiAKLWZyb20gbXVsdGlwcm9jZXNzaW5nIGltcG9ydCBjdXJyZW50X3Byb2Nlc3MKLWZyb20gbXVsdGlwcm9jZXNzaW5nLnV0aWwgaW1wb3J0IHJlZ2lzdGVyX2FmdGVyX2ZvcmssIGRlYnVnLCBzdWJfZGVidWcKLWZyb20gbXVsdGlwcm9jZXNzaW5nLnV0aWwgaW1wb3J0IGlzX2V4aXRpbmcsIHN1Yl93YXJuaW5nCitmcm9tIC4gaW1wb3J0IGNvbnRleHQKIAorX19hbGxfXyA9IFsnc2VuZF9oYW5kbGUnLCAncmVjdl9oYW5kbGUnLCAnRm9ya2luZ1BpY2tsZXInLCAncmVnaXN0ZXInLCAnZHVtcCddCisKKworSEFWRV9TRU5EX0hBTkRMRSA9IChzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJyBvcgorICAgICAgICAgICAgICAgICAgICAoaGFzYXR0cihzb2NrZXQsICdDTVNHX0xFTicpIGFuZAorICAgICAgICAgICAgICAgICAgICAgaGFzYXR0cihzb2NrZXQsICdTQ01fUklHSFRTJykgYW5kCisgICAgICAgICAgICAgICAgICAgICBoYXNhdHRyKHNvY2tldC5zb2NrZXQsICdzZW5kbXNnJykpKQogCiAjCi0jCisjIFBpY2tsZXIgc3ViY2xhc3MKICMKIAotaWYgbm90KHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInIG9yIChoYXNhdHRyKHNvY2tldCwgJ0NNU0dfTEVOJykgYW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2F0dHIoc29ja2V0LCAnU0NNX1JJR0hUUycpKSk6Ci0gICAgcmFpc2UgSW1wb3J0RXJyb3IoJ3BpY2tsaW5nIG9mIGNvbm5lY3Rpb25zIG5vdCBzdXBwb3J0ZWQnKQorY2xhc3MgRm9ya2luZ1BpY2tsZXIocGlja2xlLlBpY2tsZXIpOgorICAgICcnJ1BpY2tsZXIgc3ViY2xhc3MgdXNlZCBieSBtdWx0aXByb2Nlc3NpbmcuJycnCisgICAgX2V4dHJhX3JlZHVjZXJzID0ge30KKyAgICBfY29weXJlZ19kaXNwYXRjaF90YWJsZSA9IGNvcHlyZWcuZGlzcGF0Y2hfdGFibGUKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncyk6CisgICAgICAgIHN1cGVyKCkuX19pbml0X18oKmFyZ3MpCisgICAgICAgIHNlbGYuZGlzcGF0Y2hfdGFibGUgPSBzZWxmLl9jb3B5cmVnX2Rpc3BhdGNoX3RhYmxlLmNvcHkoKQorICAgICAgICBzZWxmLmRpc3BhdGNoX3RhYmxlLnVwZGF0ZShzZWxmLl9leHRyYV9yZWR1Y2VycykKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiByZWdpc3RlcihjbHMsIHR5cGUsIHJlZHVjZSk6CisgICAgICAgICcnJ1JlZ2lzdGVyIGEgcmVkdWNlIGZ1bmN0aW9uIGZvciBhIHR5cGUuJycnCisgICAgICAgIGNscy5fZXh0cmFfcmVkdWNlcnNbdHlwZV0gPSByZWR1Y2UKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBkdW1wcyhjbHMsIG9iaiwgcHJvdG9jb2w9Tm9uZSk6CisgICAgICAgIGJ1ZiA9IGlvLkJ5dGVzSU8oKQorICAgICAgICBjbHMoYnVmLCBwcm90b2NvbCkuZHVtcChvYmopCisgICAgICAgIHJldHVybiBidWYuZ2V0YnVmZmVyKCkKKworICAgIGxvYWRzID0gcGlja2xlLmxvYWRzCisKK3JlZ2lzdGVyID0gRm9ya2luZ1BpY2tsZXIucmVnaXN0ZXIKKworZGVmIGR1bXAob2JqLCBmaWxlLCBwcm90b2NvbD1Ob25lKToKKyAgICAnJydSZXBsYWNlbWVudCBmb3IgcGlja2xlLmR1bXAoKSB1c2luZyBGb3JraW5nUGlja2xlci4nJycKKyAgICBGb3JraW5nUGlja2xlcihmaWxlLCBwcm90b2NvbCkuZHVtcChvYmopCiAKICMKICMgUGxhdGZvcm0gc3BlY2lmaWMgZGVmaW5pdGlvbnMKQEAgLTM2LDIwICs2NCw0NCBAQAogCiBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKICAgICAjIFdpbmRvd3MKLSAgICBfX2FsbF9fICs9IFsncmVkdWNlX3BpcGVfY29ubmVjdGlvbiddCisgICAgX19hbGxfXyArPSBbJ0R1cEhhbmRsZScsICdkdXBsaWNhdGUnLCAnc3RlYWxfaGFuZGxlJ10KICAgICBpbXBvcnQgX3dpbmFwaQogCisgICAgZGVmIGR1cGxpY2F0ZShoYW5kbGUsIHRhcmdldF9wcm9jZXNzPU5vbmUsIGluaGVyaXRhYmxlPUZhbHNlKToKKyAgICAgICAgJycnRHVwbGljYXRlIGEgaGFuZGxlLiAgKHRhcmdldF9wcm9jZXNzIGlzIGEgaGFuZGxlIG5vdCBhIHBpZCEpJycnCisgICAgICAgIGlmIHRhcmdldF9wcm9jZXNzIGlzIE5vbmU6CisgICAgICAgICAgICB0YXJnZXRfcHJvY2VzcyA9IF93aW5hcGkuR2V0Q3VycmVudFByb2Nlc3MoKQorICAgICAgICByZXR1cm4gX3dpbmFwaS5EdXBsaWNhdGVIYW5kbGUoCisgICAgICAgICAgICBfd2luYXBpLkdldEN1cnJlbnRQcm9jZXNzKCksIGhhbmRsZSwgdGFyZ2V0X3Byb2Nlc3MsCisgICAgICAgICAgICAwLCBpbmhlcml0YWJsZSwgX3dpbmFwaS5EVVBMSUNBVEVfU0FNRV9BQ0NFU1MpCisKKyAgICBkZWYgc3RlYWxfaGFuZGxlKHNvdXJjZV9waWQsIGhhbmRsZSk6CisgICAgICAgICcnJ1N0ZWFsIGEgaGFuZGxlIGZyb20gcHJvY2VzcyBpZGVudGlmaWVkIGJ5IHNvdXJjZV9waWQuJycnCisgICAgICAgIHNvdXJjZV9wcm9jZXNzX2hhbmRsZSA9IF93aW5hcGkuT3BlblByb2Nlc3MoCisgICAgICAgICAgICBfd2luYXBpLlBST0NFU1NfRFVQX0hBTkRMRSwgRmFsc2UsIHNvdXJjZV9waWQpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBfd2luYXBpLkR1cGxpY2F0ZUhhbmRsZSgKKyAgICAgICAgICAgICAgICBzb3VyY2VfcHJvY2Vzc19oYW5kbGUsIGhhbmRsZSwKKyAgICAgICAgICAgICAgICBfd2luYXBpLkdldEN1cnJlbnRQcm9jZXNzKCksIDAsIEZhbHNlLAorICAgICAgICAgICAgICAgIF93aW5hcGkuRFVQTElDQVRFX1NBTUVfQUNDRVNTIHwgX3dpbmFwaS5EVVBMSUNBVEVfQ0xPU0VfU09VUkNFKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgX3dpbmFwaS5DbG9zZUhhbmRsZShzb3VyY2VfcHJvY2Vzc19oYW5kbGUpCisKICAgICBkZWYgc2VuZF9oYW5kbGUoY29ubiwgaGFuZGxlLCBkZXN0aW5hdGlvbl9waWQpOgorICAgICAgICAnJydTZW5kIGEgaGFuZGxlIG92ZXIgYSBsb2NhbCBjb25uZWN0aW9uLicnJwogICAgICAgICBkaCA9IER1cEhhbmRsZShoYW5kbGUsIF93aW5hcGkuRFVQTElDQVRFX1NBTUVfQUNDRVNTLCBkZXN0aW5hdGlvbl9waWQpCiAgICAgICAgIGNvbm4uc2VuZChkaCkKIAogICAgIGRlZiByZWN2X2hhbmRsZShjb25uKToKKyAgICAgICAgJycnUmVjZWl2ZSBhIGhhbmRsZSBvdmVyIGEgbG9jYWwgY29ubmVjdGlvbi4nJycKICAgICAgICAgcmV0dXJuIGNvbm4ucmVjdigpLmRldGFjaCgpCiAKICAgICBjbGFzcyBEdXBIYW5kbGUob2JqZWN0KToKKyAgICAgICAgJycnUGlja2xhYmxlIHdyYXBwZXIgZm9yIGEgaGFuZGxlLicnJwogICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgaGFuZGxlLCBhY2Nlc3MsIHBpZD1Ob25lKToKLSAgICAgICAgICAgICMgZHVwbGljYXRlIGhhbmRsZSBmb3IgcHJvY2VzcyB3aXRoIGdpdmVuIHBpZAogICAgICAgICAgICAgaWYgcGlkIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgIyBXZSBqdXN0IGR1cGxpY2F0ZSB0aGUgaGFuZGxlIGluIHRoZSBjdXJyZW50IHByb2Nlc3MgYW5kCisgICAgICAgICAgICAgICAgIyBsZXQgdGhlIHJlY2VpdmluZyBwcm9jZXNzIHN0ZWFsIHRoZSBoYW5kbGUuCiAgICAgICAgICAgICAgICAgcGlkID0gb3MuZ2V0cGlkKCkKICAgICAgICAgICAgIHByb2MgPSBfd2luYXBpLk9wZW5Qcm9jZXNzKF93aW5hcGkuUFJPQ0VTU19EVVBfSEFORExFLCBGYWxzZSwgcGlkKQogICAgICAgICAgICAgdHJ5OgpAQCAtNjIsOSArMTE0LDEyIEBACiAgICAgICAgICAgICBzZWxmLl9waWQgPSBwaWQKIAogICAgICAgICBkZWYgZGV0YWNoKHNlbGYpOgorICAgICAgICAgICAgJycnR2V0IHRoZSBoYW5kbGUuICBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBvbmNlLicnJwogICAgICAgICAgICAgIyByZXRyaWV2ZSBoYW5kbGUgZnJvbSBwcm9jZXNzIHdoaWNoIGN1cnJlbnRseSBvd25zIGl0CiAgICAgICAgICAgICBpZiBzZWxmLl9waWQgPT0gb3MuZ2V0cGlkKCk6CisgICAgICAgICAgICAgICAgIyBUaGUgaGFuZGxlIGhhcyBhbHJlYWR5IGJlZW4gZHVwbGljYXRlZCBmb3IgdGhpcyBwcm9jZXNzLgogICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9oYW5kbGUKKyAgICAgICAgICAgICMgV2UgbXVzdCBzdGVhbCB0aGUgaGFuZGxlIGZyb20gdGhlIHByb2Nlc3Mgd2hvc2UgcGlkIGlzIHNlbGYuX3BpZC4KICAgICAgICAgICAgIHByb2MgPSBfd2luYXBpLk9wZW5Qcm9jZXNzKF93aW5hcGkuUFJPQ0VTU19EVVBfSEFORExFLCBGYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3BpZCkKICAgICAgICAgICAgIHRyeToKQEAgLTc0LDIwNyArMTI5LDExMiBAQAogICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICBfd2luYXBpLkNsb3NlSGFuZGxlKHByb2MpCiAKLSAgICBjbGFzcyBEdXBTb2NrZXQob2JqZWN0KToKLSAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNvY2spOgotICAgICAgICAgICAgbmV3X3NvY2sgPSBzb2NrLmR1cCgpCi0gICAgICAgICAgICBkZWYgc2VuZChjb25uLCBwaWQpOgotICAgICAgICAgICAgICAgIHNoYXJlID0gbmV3X3NvY2suc2hhcmUocGlkKQotICAgICAgICAgICAgICAgIGNvbm4uc2VuZF9ieXRlcyhzaGFyZSkKLSAgICAgICAgICAgIHNlbGYuX2lkID0gcmVzb3VyY2Vfc2hhcmVyLnJlZ2lzdGVyKHNlbmQsIG5ld19zb2NrLmNsb3NlKQotCi0gICAgICAgIGRlZiBkZXRhY2goc2VsZik6Ci0gICAgICAgICAgICBjb25uID0gcmVzb3VyY2Vfc2hhcmVyLmdldF9jb25uZWN0aW9uKHNlbGYuX2lkKQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHNoYXJlID0gY29ubi5yZWN2X2J5dGVzKCkKLSAgICAgICAgICAgICAgICByZXR1cm4gc29ja2V0LmZyb21zaGFyZShzaGFyZSkKLSAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgY29ubi5jbG9zZSgpCi0KLSAgICBkZWYgcmVkdWNlX3NvY2tldChzKToKLSAgICAgICAgcmV0dXJuIHJlYnVpbGRfc29ja2V0LCAoRHVwU29ja2V0KHMpLCkKLQotICAgIGRlZiByZWJ1aWxkX3NvY2tldChkcyk6Ci0gICAgICAgIHJldHVybiBkcy5kZXRhY2goKQotCi0gICAgZGVmIHJlZHVjZV9jb25uZWN0aW9uKGNvbm4pOgotICAgICAgICBoYW5kbGUgPSBjb25uLmZpbGVubygpCi0gICAgICAgIHdpdGggc29ja2V0LmZyb21mZChoYW5kbGUsIHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pIGFzIHM6Ci0gICAgICAgICAgICBkcyA9IER1cFNvY2tldChzKQotICAgICAgICAgICAgcmV0dXJuIHJlYnVpbGRfY29ubmVjdGlvbiwgKGRzLCBjb25uLnJlYWRhYmxlLCBjb25uLndyaXRhYmxlKQotCi0gICAgZGVmIHJlYnVpbGRfY29ubmVjdGlvbihkcywgcmVhZGFibGUsIHdyaXRhYmxlKToKLSAgICAgICAgZnJvbSAuY29ubmVjdGlvbiBpbXBvcnQgQ29ubmVjdGlvbgotICAgICAgICBzb2NrID0gZHMuZGV0YWNoKCkKLSAgICAgICAgcmV0dXJuIENvbm5lY3Rpb24oc29jay5kZXRhY2goKSwgcmVhZGFibGUsIHdyaXRhYmxlKQotCi0gICAgZGVmIHJlZHVjZV9waXBlX2Nvbm5lY3Rpb24oY29ubik6Ci0gICAgICAgIGFjY2VzcyA9ICgoX3dpbmFwaS5GSUxFX0dFTkVSSUNfUkVBRCBpZiBjb25uLnJlYWRhYmxlIGVsc2UgMCkgfAotICAgICAgICAgICAgICAgICAgKF93aW5hcGkuRklMRV9HRU5FUklDX1dSSVRFIGlmIGNvbm4ud3JpdGFibGUgZWxzZSAwKSkKLSAgICAgICAgZGggPSBEdXBIYW5kbGUoY29ubi5maWxlbm8oKSwgYWNjZXNzKQotICAgICAgICByZXR1cm4gcmVidWlsZF9waXBlX2Nvbm5lY3Rpb24sIChkaCwgY29ubi5yZWFkYWJsZSwgY29ubi53cml0YWJsZSkKLQotICAgIGRlZiByZWJ1aWxkX3BpcGVfY29ubmVjdGlvbihkaCwgcmVhZGFibGUsIHdyaXRhYmxlKToKLSAgICAgICAgZnJvbSAuY29ubmVjdGlvbiBpbXBvcnQgUGlwZUNvbm5lY3Rpb24KLSAgICAgICAgaGFuZGxlID0gZGguZGV0YWNoKCkKLSAgICAgICAgcmV0dXJuIFBpcGVDb25uZWN0aW9uKGhhbmRsZSwgcmVhZGFibGUsIHdyaXRhYmxlKQotCiBlbHNlOgogICAgICMgVW5peAorICAgIF9fYWxsX18gKz0gWydEdXBGZCcsICdzZW5kZmRzJywgJ3JlY3ZmZHMnXQorICAgIGltcG9ydCBhcnJheQogCiAgICAgIyBPbiBNYWNPU1ggd2Ugc2hvdWxkIGFja25vd2xlZGdlIHJlY2VpcHQgb2YgZmRzIC0tIHNlZSBJc3N1ZTE0NjY5CiAgICAgQUNLTk9XTEVER0UgPSBzeXMucGxhdGZvcm0gPT0gJ2RhcndpbicKIAotICAgIGRlZiBzZW5kX2hhbmRsZShjb25uLCBoYW5kbGUsIGRlc3RpbmF0aW9uX3BpZCk6Ci0gICAgICAgIHdpdGggc29ja2V0LmZyb21mZChjb25uLmZpbGVubygpLCBzb2NrZXQuQUZfVU5JWCwgc29ja2V0LlNPQ0tfU1RSRUFNKSBhcyBzOgotICAgICAgICAgICAgcy5zZW5kbXNnKFtiJ3gnXSwgWyhzb2NrZXQuU09MX1NPQ0tFVCwgc29ja2V0LlNDTV9SSUdIVFMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdC5wYWNrKCJAaSIsIGhhbmRsZSkpXSkKLSAgICAgICAgaWYgQUNLTk9XTEVER0UgYW5kIGNvbm4ucmVjdl9ieXRlcygpICE9IGInQUNLJzoKKyAgICBkZWYgc2VuZGZkcyhzb2NrLCBmZHMpOgorICAgICAgICAnJydTZW5kIGFuIGFycmF5IG9mIGZkcyBvdmVyIGFuIEFGX1VOSVggc29ja2V0LicnJworICAgICAgICBmZHMgPSBhcnJheS5hcnJheSgnaScsIGZkcykKKyAgICAgICAgbXNnID0gYnl0ZXMoW2xlbihmZHMpICUgMjU2XSkKKyAgICAgICAgc29jay5zZW5kbXNnKFttc2ddLCBbKHNvY2tldC5TT0xfU09DS0VULCBzb2NrZXQuU0NNX1JJR0hUUywgZmRzKV0pCisgICAgICAgIGlmIEFDS05PV0xFREdFIGFuZCBzb2NrLnJlY3YoMSkgIT0gYidBJzoKICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignZGlkIG5vdCByZWNlaXZlIGFja25vd2xlZGdlbWVudCBvZiBmZCcpCiAKLSAgICBkZWYgcmVjdl9oYW5kbGUoY29ubik6Ci0gICAgICAgIHNpemUgPSBzdHJ1Y3QuY2FsY3NpemUoIkBpIikKKyAgICBkZWYgcmVjdmZkcyhzb2NrLCBzaXplKToKKyAgICAgICAgJycnUmVjZWl2ZSBhbiBhcnJheSBvZiBmZHMgb3ZlciBhbiBBRl9VTklYIHNvY2tldC4nJycKKyAgICAgICAgYSA9IGFycmF5LmFycmF5KCdpJykKKyAgICAgICAgYnl0ZXNfc2l6ZSA9IGEuaXRlbXNpemUgKiBzaXplCisgICAgICAgIG1zZywgYW5jZGF0YSwgZmxhZ3MsIGFkZHIgPSBzb2NrLnJlY3Ztc2coMSwgc29ja2V0LkNNU0dfTEVOKGJ5dGVzX3NpemUpKQorICAgICAgICBpZiBub3QgbXNnIGFuZCBub3QgYW5jZGF0YToKKyAgICAgICAgICAgIHJhaXNlIEVPRkVycm9yCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIEFDS05PV0xFREdFOgorICAgICAgICAgICAgICAgIHNvY2suc2VuZChiJ0EnKQorICAgICAgICAgICAgaWYgbGVuKGFuY2RhdGEpICE9IDE6CisgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdyZWNlaXZlZCAlZCBpdGVtcyBvZiBhbmNkYXRhJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbihhbmNkYXRhKSkKKyAgICAgICAgICAgIGNtc2dfbGV2ZWwsIGNtc2dfdHlwZSwgY21zZ19kYXRhID0gYW5jZGF0YVswXQorICAgICAgICAgICAgaWYgKGNtc2dfbGV2ZWwgPT0gc29ja2V0LlNPTF9TT0NLRVQgYW5kCisgICAgICAgICAgICAgICAgY21zZ190eXBlID09IHNvY2tldC5TQ01fUklHSFRTKToKKyAgICAgICAgICAgICAgICBpZiBsZW4oY21zZ19kYXRhKSAlIGEuaXRlbXNpemUgIT0gMDoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcgorICAgICAgICAgICAgICAgIGEuZnJvbWJ5dGVzKGNtc2dfZGF0YSkKKyAgICAgICAgICAgICAgICBhc3NlcnQgbGVuKGEpICUgMjU2ID09IG1zZ1swXQorICAgICAgICAgICAgICAgIHJldHVybiBsaXN0KGEpCisgICAgICAgIGV4Y2VwdCAoVmFsdWVFcnJvciwgSW5kZXhFcnJvcik6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignSW52YWxpZCBkYXRhIHJlY2VpdmVkJykKKworICAgIGRlZiBzZW5kX2hhbmRsZShjb25uLCBoYW5kbGUsIGRlc3RpbmF0aW9uX3BpZCk6CisgICAgICAgICcnJ1NlbmQgYSBoYW5kbGUgb3ZlciBhIGxvY2FsIGNvbm5lY3Rpb24uJycnCiAgICAgICAgIHdpdGggc29ja2V0LmZyb21mZChjb25uLmZpbGVubygpLCBzb2NrZXQuQUZfVU5JWCwgc29ja2V0LlNPQ0tfU1RSRUFNKSBhcyBzOgotICAgICAgICAgICAgbXNnLCBhbmNkYXRhLCBmbGFncywgYWRkciA9IHMucmVjdm1zZygxLCBzb2NrZXQuQ01TR19MRU4oc2l6ZSkpCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgaWYgQUNLTk9XTEVER0U6Ci0gICAgICAgICAgICAgICAgICAgIGNvbm4uc2VuZF9ieXRlcyhiJ0FDSycpCi0gICAgICAgICAgICAgICAgY21zZ19sZXZlbCwgY21zZ190eXBlLCBjbXNnX2RhdGEgPSBhbmNkYXRhWzBdCi0gICAgICAgICAgICAgICAgaWYgKGNtc2dfbGV2ZWwgPT0gc29ja2V0LlNPTF9TT0NLRVQgYW5kCi0gICAgICAgICAgICAgICAgICAgIGNtc2dfdHlwZSA9PSBzb2NrZXQuU0NNX1JJR0hUUyk6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBzdHJ1Y3QudW5wYWNrKCJAaSIsIGNtc2dfZGF0YVs6c2l6ZV0pWzBdCi0gICAgICAgICAgICBleGNlcHQgKFZhbHVlRXJyb3IsIEluZGV4RXJyb3IsIHN0cnVjdC5lcnJvcik6Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdJbnZhbGlkIGRhdGEgcmVjZWl2ZWQnKQorICAgICAgICAgICAgc2VuZGZkcyhzLCBbaGFuZGxlXSkKIAotICAgIGNsYXNzIER1cEZkKG9iamVjdCk6Ci0gICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmZCk6Ci0gICAgICAgICAgICBuZXdfZmQgPSBvcy5kdXAoZmQpCi0gICAgICAgICAgICBkZWYgc2VuZChjb25uLCBwaWQpOgotICAgICAgICAgICAgICAgIHNlbmRfaGFuZGxlKGNvbm4sIG5ld19mZCwgcGlkKQotICAgICAgICAgICAgZGVmIGNsb3NlKCk6Ci0gICAgICAgICAgICAgICAgb3MuY2xvc2UobmV3X2ZkKQotICAgICAgICAgICAgc2VsZi5faWQgPSByZXNvdXJjZV9zaGFyZXIucmVnaXN0ZXIoc2VuZCwgY2xvc2UpCisgICAgZGVmIHJlY3ZfaGFuZGxlKGNvbm4pOgorICAgICAgICAnJydSZWNlaXZlIGEgaGFuZGxlIG92ZXIgYSBsb2NhbCBjb25uZWN0aW9uLicnJworICAgICAgICB3aXRoIHNvY2tldC5mcm9tZmQoY29ubi5maWxlbm8oKSwgc29ja2V0LkFGX1VOSVgsIHNvY2tldC5TT0NLX1NUUkVBTSkgYXMgczoKKyAgICAgICAgICAgIHJldHVybiByZWN2ZmRzKHMsIDEpWzBdCiAKLSAgICAgICAgZGVmIGRldGFjaChzZWxmKToKLSAgICAgICAgICAgIGNvbm4gPSByZXNvdXJjZV9zaGFyZXIuZ2V0X2Nvbm5lY3Rpb24oc2VsZi5faWQpCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlY3ZfaGFuZGxlKGNvbm4pCi0gICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgIGNvbm4uY2xvc2UoKQorICAgIGRlZiBEdXBGZChmZCk6CisgICAgICAgICcnJ1JldHVybiBhIHdyYXBwZXIgZm9yIGFuIGZkLicnJworICAgICAgICBwb3Blbl9vYmogPSBjb250ZXh0LmdldF9zcGF3bmluZ19wb3BlbigpCisgICAgICAgIGlmIHBvcGVuX29iaiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBwb3Blbl9vYmouRHVwRmQocG9wZW5fb2JqLmR1cGxpY2F0ZV9mb3JfY2hpbGQoZmQpKQorICAgICAgICBlbGlmIEhBVkVfU0VORF9IQU5ETEU6CisgICAgICAgICAgICBmcm9tIC4gaW1wb3J0IHJlc291cmNlX3NoYXJlcgorICAgICAgICAgICAgcmV0dXJuIHJlc291cmNlX3NoYXJlci5EdXBGZChmZCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1NDTV9SSUdIVFMgYXBwZWFycyBub3QgdG8gYmUgYXZhaWxhYmxlJykKIAotICAgIGRlZiByZWR1Y2Vfc29ja2V0KHMpOgorIworIyBUcnkgbWFraW5nIHNvbWUgY2FsbGFibGUgdHlwZXMgcGlja2xhYmxlCisjCisKK2RlZiBfcmVkdWNlX21ldGhvZChtKToKKyAgICBpZiBtLl9fc2VsZl9fIGlzIE5vbmU6CisgICAgICAgIHJldHVybiBnZXRhdHRyLCAobS5fX2NsYXNzX18sIG0uX19mdW5jX18uX19uYW1lX18pCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIGdldGF0dHIsIChtLl9fc2VsZl9fLCBtLl9fZnVuY19fLl9fbmFtZV9fKQorY2xhc3MgX0M6CisgICAgZGVmIGYoc2VsZik6CisgICAgICAgIHBhc3MKK3JlZ2lzdGVyKHR5cGUoX0MoKS5mKSwgX3JlZHVjZV9tZXRob2QpCisKKworZGVmIF9yZWR1Y2VfbWV0aG9kX2Rlc2NyaXB0b3IobSk6CisgICAgcmV0dXJuIGdldGF0dHIsIChtLl9fb2JqY2xhc3NfXywgbS5fX25hbWVfXykKK3JlZ2lzdGVyKHR5cGUobGlzdC5hcHBlbmQpLCBfcmVkdWNlX21ldGhvZF9kZXNjcmlwdG9yKQorcmVnaXN0ZXIodHlwZShpbnQuX19hZGRfXyksIF9yZWR1Y2VfbWV0aG9kX2Rlc2NyaXB0b3IpCisKKworZGVmIF9yZWR1Y2VfcGFydGlhbChwKToKKyAgICByZXR1cm4gX3JlYnVpbGRfcGFydGlhbCwgKHAuZnVuYywgcC5hcmdzLCBwLmtleXdvcmRzIG9yIHt9KQorZGVmIF9yZWJ1aWxkX3BhcnRpYWwoZnVuYywgYXJncywga2V5d29yZHMpOgorICAgIHJldHVybiBmdW5jdG9vbHMucGFydGlhbChmdW5jLCAqYXJncywgKiprZXl3b3JkcykKK3JlZ2lzdGVyKGZ1bmN0b29scy5wYXJ0aWFsLCBfcmVkdWNlX3BhcnRpYWwpCisKKyMKKyMgTWFrZSBzb2NrZXRzIHBpY2tsYWJsZQorIworCitpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKKyAgICBkZWYgX3JlZHVjZV9zb2NrZXQocyk6CisgICAgICAgIGZyb20gLnJlc291cmNlX3NoYXJlciBpbXBvcnQgRHVwU29ja2V0CisgICAgICAgIHJldHVybiBfcmVidWlsZF9zb2NrZXQsIChEdXBTb2NrZXQocyksKQorICAgIGRlZiBfcmVidWlsZF9zb2NrZXQoZHMpOgorICAgICAgICByZXR1cm4gZHMuZGV0YWNoKCkKKyAgICByZWdpc3Rlcihzb2NrZXQuc29ja2V0LCBfcmVkdWNlX3NvY2tldCkKKworZWxzZToKKyAgICBkZWYgX3JlZHVjZV9zb2NrZXQocyk6CiAgICAgICAgIGRmID0gRHVwRmQocy5maWxlbm8oKSkKLSAgICAgICAgcmV0dXJuIHJlYnVpbGRfc29ja2V0LCAoZGYsIHMuZmFtaWx5LCBzLnR5cGUsIHMucHJvdG8pCi0KLSAgICBkZWYgcmVidWlsZF9zb2NrZXQoZGYsIGZhbWlseSwgdHlwZSwgcHJvdG8pOgorICAgICAgICByZXR1cm4gX3JlYnVpbGRfc29ja2V0LCAoZGYsIHMuZmFtaWx5LCBzLnR5cGUsIHMucHJvdG8pCisgICAgZGVmIF9yZWJ1aWxkX3NvY2tldChkZiwgZmFtaWx5LCB0eXBlLCBwcm90byk6CiAgICAgICAgIGZkID0gZGYuZGV0YWNoKCkKLSAgICAgICAgcyA9IHNvY2tldC5mcm9tZmQoZmQsIGZhbWlseSwgdHlwZSwgcHJvdG8pCi0gICAgICAgIG9zLmNsb3NlKGZkKQotICAgICAgICByZXR1cm4gcwotCi0gICAgZGVmIHJlZHVjZV9jb25uZWN0aW9uKGNvbm4pOgotICAgICAgICBkZiA9IER1cEZkKGNvbm4uZmlsZW5vKCkpCi0gICAgICAgIHJldHVybiByZWJ1aWxkX2Nvbm5lY3Rpb24sIChkZiwgY29ubi5yZWFkYWJsZSwgY29ubi53cml0YWJsZSkKLQotICAgIGRlZiByZWJ1aWxkX2Nvbm5lY3Rpb24oZGYsIHJlYWRhYmxlLCB3cml0YWJsZSk6Ci0gICAgICAgIGZyb20gLmNvbm5lY3Rpb24gaW1wb3J0IENvbm5lY3Rpb24KLSAgICAgICAgZmQgPSBkZi5kZXRhY2goKQotICAgICAgICByZXR1cm4gQ29ubmVjdGlvbihmZCwgcmVhZGFibGUsIHdyaXRhYmxlKQotCi0jCi0jIFNlcnZlciB3aGljaCBzaGFyZXMgcmVnaXN0ZXJlZCByZXNvdXJjZXMgd2l0aCBjbGllbnRzCi0jCi0KLWNsYXNzIFJlc291cmNlU2hhcmVyKG9iamVjdCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICBzZWxmLl9rZXkgPSAwCi0gICAgICAgIHNlbGYuX2NhY2hlID0ge30KLSAgICAgICAgc2VsZi5fb2xkX2xvY2tzID0gW10KLSAgICAgICAgc2VsZi5fbG9jayA9IHRocmVhZGluZy5Mb2NrKCkKLSAgICAgICAgc2VsZi5fbGlzdGVuZXIgPSBOb25lCi0gICAgICAgIHNlbGYuX2FkZHJlc3MgPSBOb25lCi0gICAgICAgIHNlbGYuX3RocmVhZCA9IE5vbmUKLSAgICAgICAgcmVnaXN0ZXJfYWZ0ZXJfZm9yayhzZWxmLCBSZXNvdXJjZVNoYXJlci5fYWZ0ZXJmb3JrKQotCi0gICAgZGVmIHJlZ2lzdGVyKHNlbGYsIHNlbmQsIGNsb3NlKToKLSAgICAgICAgd2l0aCBzZWxmLl9sb2NrOgotICAgICAgICAgICAgaWYgc2VsZi5fYWRkcmVzcyBpcyBOb25lOgotICAgICAgICAgICAgICAgIHNlbGYuX3N0YXJ0KCkKLSAgICAgICAgICAgIHNlbGYuX2tleSArPSAxCi0gICAgICAgICAgICBzZWxmLl9jYWNoZVtzZWxmLl9rZXldID0gKHNlbmQsIGNsb3NlKQotICAgICAgICAgICAgcmV0dXJuIChzZWxmLl9hZGRyZXNzLCBzZWxmLl9rZXkpCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIGdldF9jb25uZWN0aW9uKGlkZW50KToKLSAgICAgICAgZnJvbSAuY29ubmVjdGlvbiBpbXBvcnQgQ2xpZW50Ci0gICAgICAgIGFkZHJlc3MsIGtleSA9IGlkZW50Ci0gICAgICAgIGMgPSBDbGllbnQoYWRkcmVzcywgYXV0aGtleT1jdXJyZW50X3Byb2Nlc3MoKS5hdXRoa2V5KQotICAgICAgICBjLnNlbmQoKGtleSwgb3MuZ2V0cGlkKCkpKQotICAgICAgICByZXR1cm4gYwotCi0gICAgZGVmIHN0b3Aoc2VsZiwgdGltZW91dD1Ob25lKToKLSAgICAgICAgZnJvbSAuY29ubmVjdGlvbiBpbXBvcnQgQ2xpZW50Ci0gICAgICAgIHdpdGggc2VsZi5fbG9jazoKLSAgICAgICAgICAgIGlmIHNlbGYuX2FkZHJlc3MgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgYyA9IENsaWVudChzZWxmLl9hZGRyZXNzLCBhdXRoa2V5PWN1cnJlbnRfcHJvY2VzcygpLmF1dGhrZXkpCi0gICAgICAgICAgICAgICAgYy5zZW5kKE5vbmUpCi0gICAgICAgICAgICAgICAgYy5jbG9zZSgpCi0gICAgICAgICAgICAgICAgc2VsZi5fdGhyZWFkLmpvaW4odGltZW91dCkKLSAgICAgICAgICAgICAgICBpZiBzZWxmLl90aHJlYWQuaXNfYWxpdmUoKToKLSAgICAgICAgICAgICAgICAgICAgc3ViX3dhcm4oJ1Jlc291cmNlU2hhcmVyIHRocmVhZCBkaWQgbm90IHN0b3Agd2hlbiBhc2tlZCcpCi0gICAgICAgICAgICAgICAgc2VsZi5fbGlzdGVuZXIuY2xvc2UoKQotICAgICAgICAgICAgICAgIHNlbGYuX3RocmVhZCA9IE5vbmUKLSAgICAgICAgICAgICAgICBzZWxmLl9hZGRyZXNzID0gTm9uZQotICAgICAgICAgICAgICAgIHNlbGYuX2xpc3RlbmVyID0gTm9uZQotICAgICAgICAgICAgICAgIGZvciBrZXksIChzZW5kLCBjbG9zZSkgaW4gc2VsZi5fY2FjaGUuaXRlbXMoKToKLSAgICAgICAgICAgICAgICAgICAgY2xvc2UoKQotICAgICAgICAgICAgICAgIHNlbGYuX2NhY2hlLmNsZWFyKCkKLQotICAgIGRlZiBfYWZ0ZXJmb3JrKHNlbGYpOgotICAgICAgICBmb3Iga2V5LCAoc2VuZCwgY2xvc2UpIGluIHNlbGYuX2NhY2hlLml0ZW1zKCk6Ci0gICAgICAgICAgICBjbG9zZSgpCi0gICAgICAgIHNlbGYuX2NhY2hlLmNsZWFyKCkKLSAgICAgICAgIyBJZiBzZWxmLl9sb2NrIHdhcyBsb2NrZWQgYXQgdGhlIHRpbWUgb2YgdGhlIGZvcmssIGl0IG1heSBiZSBicm9rZW4KLSAgICAgICAgIyAtLSBzZWUgaXNzdWUgNjcyMS4gIFJlcGxhY2UgaXQgd2l0aG91dCBsZXR0aW5nIGl0IGJlIGdjJ2VkLgotICAgICAgICBzZWxmLl9vbGRfbG9ja3MuYXBwZW5kKHNlbGYuX2xvY2spCi0gICAgICAgIHNlbGYuX2xvY2sgPSB0aHJlYWRpbmcuTG9jaygpCi0gICAgICAgIGlmIHNlbGYuX2xpc3RlbmVyIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgc2VsZi5fbGlzdGVuZXIuY2xvc2UoKQotICAgICAgICBzZWxmLl9saXN0ZW5lciA9IE5vbmUKLSAgICAgICAgc2VsZi5fYWRkcmVzcyA9IE5vbmUKLSAgICAgICAgc2VsZi5fdGhyZWFkID0gTm9uZQotCi0gICAgZGVmIF9zdGFydChzZWxmKToKLSAgICAgICAgZnJvbSAuY29ubmVjdGlvbiBpbXBvcnQgTGlzdGVuZXIKLSAgICAgICAgYXNzZXJ0IHNlbGYuX2xpc3RlbmVyIGlzIE5vbmUKLSAgICAgICAgZGVidWcoJ3N0YXJ0aW5nIGxpc3RlbmVyIGFuZCB0aHJlYWQgZm9yIHNlbmRpbmcgaGFuZGxlcycpCi0gICAgICAgIHNlbGYuX2xpc3RlbmVyID0gTGlzdGVuZXIoYXV0aGtleT1jdXJyZW50X3Byb2Nlc3MoKS5hdXRoa2V5KQotICAgICAgICBzZWxmLl9hZGRyZXNzID0gc2VsZi5fbGlzdGVuZXIuYWRkcmVzcwotICAgICAgICB0ID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9c2VsZi5fc2VydmUpCi0gICAgICAgIHQuZGFlbW9uID0gVHJ1ZQotICAgICAgICB0LnN0YXJ0KCkKLSAgICAgICAgc2VsZi5fdGhyZWFkID0gdAotCi0gICAgZGVmIF9zZXJ2ZShzZWxmKToKLSAgICAgICAgaWYgaGFzYXR0cihzaWduYWwsICdwdGhyZWFkX3NpZ21hc2snKToKLSAgICAgICAgICAgIHNpZ25hbC5wdGhyZWFkX3NpZ21hc2soc2lnbmFsLlNJR19CTE9DSywgcmFuZ2UoMSwgc2lnbmFsLk5TSUcpKQotICAgICAgICB3aGlsZSAxOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGNvbm4gPSBzZWxmLl9saXN0ZW5lci5hY2NlcHQoKQotICAgICAgICAgICAgICAgIG1zZyA9IGNvbm4ucmVjdigpCi0gICAgICAgICAgICAgICAgaWYgbXNnIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAga2V5LCBkZXN0aW5hdGlvbl9waWQgPSBtc2cKLSAgICAgICAgICAgICAgICBzZW5kLCBjbG9zZSA9IHNlbGYuX2NhY2hlLnBvcChrZXkpCi0gICAgICAgICAgICAgICAgc2VuZChjb25uLCBkZXN0aW5hdGlvbl9waWQpCi0gICAgICAgICAgICAgICAgY2xvc2UoKQotICAgICAgICAgICAgICAgIGNvbm4uY2xvc2UoKQotICAgICAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgICAgIGlmIG5vdCBpc19leGl0aW5nKCk6Ci0gICAgICAgICAgICAgICAgICAgIGltcG9ydCB0cmFjZWJhY2sKLSAgICAgICAgICAgICAgICAgICAgc3ViX3dhcm5pbmcoCi0gICAgICAgICAgICAgICAgICAgICAgICAndGhyZWFkIGZvciBzaGFyaW5nIGhhbmRsZXMgcmFpc2VkIGV4Y2VwdGlvbiA6XG4nICsKLSAgICAgICAgICAgICAgICAgICAgICAgICctJyo3OSArICdcbicgKyB0cmFjZWJhY2suZm9ybWF0X2V4YygpICsgJy0nKjc5Ci0gICAgICAgICAgICAgICAgICAgICAgICApCi0KLXJlc291cmNlX3NoYXJlciA9IFJlc291cmNlU2hhcmVyKCkKKyAgICAgICAgcmV0dXJuIHNvY2tldC5zb2NrZXQoZmFtaWx5LCB0eXBlLCBwcm90bywgZmlsZW5vPWZkKQorICAgIHJlZ2lzdGVyKHNvY2tldC5zb2NrZXQsIF9yZWR1Y2Vfc29ja2V0KQpkaWZmIC0tZ2l0IGEvTGliL211bHRpcHJvY2Vzc2luZy9yZXNvdXJjZV9zaGFyZXIucHkgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL3Jlc291cmNlX3NoYXJlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTQ2ZmM2Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL211bHRpcHJvY2Vzc2luZy9yZXNvdXJjZV9zaGFyZXIucHkKQEAgLTAsMCArMSwxNTggQEAKKyMKKyMgV2UgdXNlIGEgYmFja2dyb3VuZCB0aHJlYWQgZm9yIHNoYXJpbmcgZmRzIG9uIFVuaXgsIGFuZCBmb3Igc2hhcmluZyBzb2NrZXRzIG9uCisjIFdpbmRvd3MuCisjCisjIEEgY2xpZW50IHdoaWNoIHdhbnRzIHRvIHBpY2tsZSBhIHJlc291cmNlIHJlZ2lzdGVycyBpdCB3aXRoIHRoZSByZXNvdXJjZQorIyBzaGFyZXIgYW5kIGdldHMgYW4gaWRlbnRpZmllciBpbiByZXR1cm4uICBUaGUgdW5waWNrbGluZyBwcm9jZXNzIHdpbGwgY29ubmVjdAorIyB0byB0aGUgcmVzb3VyY2Ugc2hhcmVyLCBzZW5kcyB0aGUgaWRlbnRpZmllciBhbmQgaXRzIHBpZCwgYW5kIHRoZW4gcmVjZWl2ZXMKKyMgdGhlIHJlc291cmNlLgorIworCitpbXBvcnQgb3MKK2ltcG9ydCBzaWduYWwKK2ltcG9ydCBzb2NrZXQKK2ltcG9ydCBzeXMKK2ltcG9ydCB0aHJlYWRpbmcKKworZnJvbSAuIGltcG9ydCBwcm9jZXNzCitmcm9tIC4gaW1wb3J0IHJlZHVjdGlvbgorZnJvbSAuIGltcG9ydCB1dGlsCisKK19fYWxsX18gPSBbJ3N0b3AnXQorCisKK2lmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgorICAgIF9fYWxsX18gKz0gWydEdXBTb2NrZXQnXQorCisgICAgY2xhc3MgRHVwU29ja2V0KG9iamVjdCk6CisgICAgICAgICcnJ1BpY2tsYWJsZSB3cmFwcGVyIGZvciBhIHNvY2tldC4nJycKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNvY2spOgorICAgICAgICAgICAgbmV3X3NvY2sgPSBzb2NrLmR1cCgpCisgICAgICAgICAgICBkZWYgc2VuZChjb25uLCBwaWQpOgorICAgICAgICAgICAgICAgIHNoYXJlID0gbmV3X3NvY2suc2hhcmUocGlkKQorICAgICAgICAgICAgICAgIGNvbm4uc2VuZF9ieXRlcyhzaGFyZSkKKyAgICAgICAgICAgIHNlbGYuX2lkID0gX3Jlc291cmNlX3NoYXJlci5yZWdpc3RlcihzZW5kLCBuZXdfc29jay5jbG9zZSkKKworICAgICAgICBkZWYgZGV0YWNoKHNlbGYpOgorICAgICAgICAgICAgJycnR2V0IHRoZSBzb2NrZXQuICBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBvbmNlLicnJworICAgICAgICAgICAgd2l0aCBfcmVzb3VyY2Vfc2hhcmVyLmdldF9jb25uZWN0aW9uKHNlbGYuX2lkKSBhcyBjb25uOgorICAgICAgICAgICAgICAgIHNoYXJlID0gY29ubi5yZWN2X2J5dGVzKCkKKyAgICAgICAgICAgICAgICByZXR1cm4gc29ja2V0LmZyb21zaGFyZShzaGFyZSkKKworZWxzZToKKyAgICBfX2FsbF9fICs9IFsnRHVwRmQnXQorCisgICAgY2xhc3MgRHVwRmQob2JqZWN0KToKKyAgICAgICAgJycnV3JhcHBlciBmb3IgZmQgd2hpY2ggY2FuIGJlIHVzZWQgYXQgYW55IHRpbWUuJycnCisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmZCk6CisgICAgICAgICAgICBuZXdfZmQgPSBvcy5kdXAoZmQpCisgICAgICAgICAgICBkZWYgc2VuZChjb25uLCBwaWQpOgorICAgICAgICAgICAgICAgIHJlZHVjdGlvbi5zZW5kX2hhbmRsZShjb25uLCBuZXdfZmQsIHBpZCkKKyAgICAgICAgICAgIGRlZiBjbG9zZSgpOgorICAgICAgICAgICAgICAgIG9zLmNsb3NlKG5ld19mZCkKKyAgICAgICAgICAgIHNlbGYuX2lkID0gX3Jlc291cmNlX3NoYXJlci5yZWdpc3RlcihzZW5kLCBjbG9zZSkKKworICAgICAgICBkZWYgZGV0YWNoKHNlbGYpOgorICAgICAgICAgICAgJycnR2V0IHRoZSBmZC4gIFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uY2UuJycnCisgICAgICAgICAgICB3aXRoIF9yZXNvdXJjZV9zaGFyZXIuZ2V0X2Nvbm5lY3Rpb24oc2VsZi5faWQpIGFzIGNvbm46CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlZHVjdGlvbi5yZWN2X2hhbmRsZShjb25uKQorCisKK2NsYXNzIF9SZXNvdXJjZVNoYXJlcihvYmplY3QpOgorICAgICcnJ01hbmFnZXIgZm9yIHJlc291Y2VzIHVzaW5nIGJhY2tncm91bmQgdGhyZWFkLicnJworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5fa2V5ID0gMAorICAgICAgICBzZWxmLl9jYWNoZSA9IHt9CisgICAgICAgIHNlbGYuX29sZF9sb2NrcyA9IFtdCisgICAgICAgIHNlbGYuX2xvY2sgPSB0aHJlYWRpbmcuTG9jaygpCisgICAgICAgIHNlbGYuX2xpc3RlbmVyID0gTm9uZQorICAgICAgICBzZWxmLl9hZGRyZXNzID0gTm9uZQorICAgICAgICBzZWxmLl90aHJlYWQgPSBOb25lCisgICAgICAgIHV0aWwucmVnaXN0ZXJfYWZ0ZXJfZm9yayhzZWxmLCBfUmVzb3VyY2VTaGFyZXIuX2FmdGVyZm9yaykKKworICAgIGRlZiByZWdpc3RlcihzZWxmLCBzZW5kLCBjbG9zZSk6CisgICAgICAgICcnJ1JlZ2lzdGVyIHJlc291cmNlLCByZXR1cm5pbmcgYW4gaWRlbnRpZmllci4nJycKKyAgICAgICAgd2l0aCBzZWxmLl9sb2NrOgorICAgICAgICAgICAgaWYgc2VsZi5fYWRkcmVzcyBpcyBOb25lOgorICAgICAgICAgICAgICAgIHNlbGYuX3N0YXJ0KCkKKyAgICAgICAgICAgIHNlbGYuX2tleSArPSAxCisgICAgICAgICAgICBzZWxmLl9jYWNoZVtzZWxmLl9rZXldID0gKHNlbmQsIGNsb3NlKQorICAgICAgICAgICAgcmV0dXJuIChzZWxmLl9hZGRyZXNzLCBzZWxmLl9rZXkpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGdldF9jb25uZWN0aW9uKGlkZW50KToKKyAgICAgICAgJycnUmV0dXJuIGNvbm5lY3Rpb24gZnJvbSB3aGljaCB0byByZWNlaXZlIGlkZW50aWZpZWQgcmVzb3VyY2UuJycnCisgICAgICAgIGZyb20gLmNvbm5lY3Rpb24gaW1wb3J0IENsaWVudAorICAgICAgICBhZGRyZXNzLCBrZXkgPSBpZGVudAorICAgICAgICBjID0gQ2xpZW50KGFkZHJlc3MsIGF1dGhrZXk9cHJvY2Vzcy5jdXJyZW50X3Byb2Nlc3MoKS5hdXRoa2V5KQorICAgICAgICBjLnNlbmQoKGtleSwgb3MuZ2V0cGlkKCkpKQorICAgICAgICByZXR1cm4gYworCisgICAgZGVmIHN0b3Aoc2VsZiwgdGltZW91dD1Ob25lKToKKyAgICAgICAgJycnU3RvcCB0aGUgYmFja2dyb3VuZCB0aHJlYWQgYW5kIGNsZWFyIHJlZ2lzdGVyZWQgcmVzb3VyY2VzLicnJworICAgICAgICBmcm9tIC5jb25uZWN0aW9uIGltcG9ydCBDbGllbnQKKyAgICAgICAgd2l0aCBzZWxmLl9sb2NrOgorICAgICAgICAgICAgaWYgc2VsZi5fYWRkcmVzcyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBjID0gQ2xpZW50KHNlbGYuX2FkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRoa2V5PXByb2Nlc3MuY3VycmVudF9wcm9jZXNzKCkuYXV0aGtleSkKKyAgICAgICAgICAgICAgICBjLnNlbmQoTm9uZSkKKyAgICAgICAgICAgICAgICBjLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBzZWxmLl90aHJlYWQuam9pbih0aW1lb3V0KQorICAgICAgICAgICAgICAgIGlmIHNlbGYuX3RocmVhZC5pc19hbGl2ZSgpOgorICAgICAgICAgICAgICAgICAgICB1dGlsLnN1Yl93YXJuaW5nKCdfUmVzb3VyY2VTaGFyZXIgdGhyZWFkIGRpZCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25vdCBzdG9wIHdoZW4gYXNrZWQnKQorICAgICAgICAgICAgICAgIHNlbGYuX2xpc3RlbmVyLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBzZWxmLl90aHJlYWQgPSBOb25lCisgICAgICAgICAgICAgICAgc2VsZi5fYWRkcmVzcyA9IE5vbmUKKyAgICAgICAgICAgICAgICBzZWxmLl9saXN0ZW5lciA9IE5vbmUKKyAgICAgICAgICAgICAgICBmb3Iga2V5LCAoc2VuZCwgY2xvc2UpIGluIHNlbGYuX2NhY2hlLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgICAgIGNsb3NlKCkKKyAgICAgICAgICAgICAgICBzZWxmLl9jYWNoZS5jbGVhcigpCisKKyAgICBkZWYgX2FmdGVyZm9yayhzZWxmKToKKyAgICAgICAgZm9yIGtleSwgKHNlbmQsIGNsb3NlKSBpbiBzZWxmLl9jYWNoZS5pdGVtcygpOgorICAgICAgICAgICAgY2xvc2UoKQorICAgICAgICBzZWxmLl9jYWNoZS5jbGVhcigpCisgICAgICAgICMgSWYgc2VsZi5fbG9jayB3YXMgbG9ja2VkIGF0IHRoZSB0aW1lIG9mIHRoZSBmb3JrLCBpdCBtYXkgYmUgYnJva2VuCisgICAgICAgICMgLS0gc2VlIGlzc3VlIDY3MjEuICBSZXBsYWNlIGl0IHdpdGhvdXQgbGV0dGluZyBpdCBiZSBnYydlZC4KKyAgICAgICAgc2VsZi5fb2xkX2xvY2tzLmFwcGVuZChzZWxmLl9sb2NrKQorICAgICAgICBzZWxmLl9sb2NrID0gdGhyZWFkaW5nLkxvY2soKQorICAgICAgICBpZiBzZWxmLl9saXN0ZW5lciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2xpc3RlbmVyLmNsb3NlKCkKKyAgICAgICAgc2VsZi5fbGlzdGVuZXIgPSBOb25lCisgICAgICAgIHNlbGYuX2FkZHJlc3MgPSBOb25lCisgICAgICAgIHNlbGYuX3RocmVhZCA9IE5vbmUKKworICAgIGRlZiBfc3RhcnQoc2VsZik6CisgICAgICAgIGZyb20gLmNvbm5lY3Rpb24gaW1wb3J0IExpc3RlbmVyCisgICAgICAgIGFzc2VydCBzZWxmLl9saXN0ZW5lciBpcyBOb25lCisgICAgICAgIHV0aWwuZGVidWcoJ3N0YXJ0aW5nIGxpc3RlbmVyIGFuZCB0aHJlYWQgZm9yIHNlbmRpbmcgaGFuZGxlcycpCisgICAgICAgIHNlbGYuX2xpc3RlbmVyID0gTGlzdGVuZXIoYXV0aGtleT1wcm9jZXNzLmN1cnJlbnRfcHJvY2VzcygpLmF1dGhrZXkpCisgICAgICAgIHNlbGYuX2FkZHJlc3MgPSBzZWxmLl9saXN0ZW5lci5hZGRyZXNzCisgICAgICAgIHQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1zZWxmLl9zZXJ2ZSkKKyAgICAgICAgdC5kYWVtb24gPSBUcnVlCisgICAgICAgIHQuc3RhcnQoKQorICAgICAgICBzZWxmLl90aHJlYWQgPSB0CisKKyAgICBkZWYgX3NlcnZlKHNlbGYpOgorICAgICAgICBpZiBoYXNhdHRyKHNpZ25hbCwgJ3B0aHJlYWRfc2lnbWFzaycpOgorICAgICAgICAgICAgc2lnbmFsLnB0aHJlYWRfc2lnbWFzayhzaWduYWwuU0lHX0JMT0NLLCByYW5nZSgxLCBzaWduYWwuTlNJRykpCisgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLl9saXN0ZW5lci5hY2NlcHQoKSBhcyBjb25uOgorICAgICAgICAgICAgICAgICAgICBtc2cgPSBjb25uLnJlY3YoKQorICAgICAgICAgICAgICAgICAgICBpZiBtc2cgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgIGtleSwgZGVzdGluYXRpb25fcGlkID0gbXNnCisgICAgICAgICAgICAgICAgICAgIHNlbmQsIGNsb3NlID0gc2VsZi5fY2FjaGUucG9wKGtleSkKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgc2VuZChjb25uLCBkZXN0aW5hdGlvbl9waWQpCisgICAgICAgICAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZSgpCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgaWYgbm90IHV0aWwuaXNfZXhpdGluZygpOgorICAgICAgICAgICAgICAgICAgICBzeXMuZXhjZXB0aG9vaygqc3lzLmV4Y19pbmZvKCkpCisKKworX3Jlc291cmNlX3NoYXJlciA9IF9SZXNvdXJjZVNoYXJlcigpCitzdG9wID0gX3Jlc291cmNlX3NoYXJlci5zdG9wCmRpZmYgLS1naXQgYS9MaWIvbXVsdGlwcm9jZXNzaW5nL3NlbWFwaG9yZV90cmFja2VyLnB5IGIvTGliL211bHRpcHJvY2Vzc2luZy9zZW1hcGhvcmVfdHJhY2tlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTc3MzhlCi0tLSAvZGV2L251bGwKKysrIGIvTGliL211bHRpcHJvY2Vzc2luZy9zZW1hcGhvcmVfdHJhY2tlci5weQpAQCAtMCwwICsxLDE0MyBAQAorIworIyBPbiBVbml4IHdlIHJ1biBhIHNlcnZlciBwcm9jZXNzIHdoaWNoIGtlZXBzIHRyYWNrIG9mIHVubGlua2VkCisjIHNlbWFwaG9yZXMuIFRoZSBzZXJ2ZXIgaWdub3JlcyBTSUdJTlQgYW5kIFNJR1RFUk0gYW5kIHJlYWRzIGZyb20gYQorIyBwaXBlLiAgRXZlcnkgb3RoZXIgcHJvY2VzcyBvZiB0aGUgcHJvZ3JhbSBoYXMgYSBjb3B5IG9mIHRoZSB3cml0YWJsZQorIyBlbmQgb2YgdGhlIHBpcGUsIHNvIHdlIGdldCBFT0Ygd2hlbiBhbGwgb3RoZXIgcHJvY2Vzc2VzIGhhdmUgZXhpdGVkLgorIyBUaGVuIHRoZSBzZXJ2ZXIgcHJvY2VzcyB1bmxpbmtzIGFueSByZW1haW5pbmcgc2VtYXBob3JlIG5hbWVzLgorIworIyBUaGlzIGlzIGltcG9ydGFudCBiZWNhdXNlIHRoZSBzeXN0ZW0gb25seSBzdXBwb3J0cyBhIGxpbWl0ZWQgbnVtYmVyCisjIG9mIG5hbWVkIHNlbWFwaG9yZXMsIGFuZCB0aGV5IHdpbGwgbm90IGJlIGF1dG9tYXRpY2FsbHkgcmVtb3ZlZCB0aWxsCisjIHRoZSBuZXh0IHJlYm9vdC4gIFdpdGhvdXQgdGhpcyBzZW1hcGhvcmUgdHJhY2tlciBwcm9jZXNzLCAia2lsbGFsbAorIyBweXRob24iIHdvdWxkIHByb2JhYmx5IGxlYXZlIHVubGlua2VkIHNlbWFwaG9yZXMuCisjCisKK2ltcG9ydCBvcworaW1wb3J0IHNpZ25hbAoraW1wb3J0IHN5cworaW1wb3J0IHRocmVhZGluZworaW1wb3J0IHdhcm5pbmdzCitpbXBvcnQgX211bHRpcHJvY2Vzc2luZworCitmcm9tIC4gaW1wb3J0IHNwYXduCitmcm9tIC4gaW1wb3J0IHV0aWwKKworX19hbGxfXyA9IFsnZW5zdXJlX3J1bm5pbmcnLCAncmVnaXN0ZXInLCAndW5yZWdpc3RlciddCisKKworY2xhc3MgU2VtYXBob3JlVHJhY2tlcihvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLl9sb2NrID0gdGhyZWFkaW5nLkxvY2soKQorICAgICAgICBzZWxmLl9mZCA9IE5vbmUKKworICAgIGRlZiBnZXRmZChzZWxmKToKKyAgICAgICAgc2VsZi5lbnN1cmVfcnVubmluZygpCisgICAgICAgIHJldHVybiBzZWxmLl9mZAorCisgICAgZGVmIGVuc3VyZV9ydW5uaW5nKHNlbGYpOgorICAgICAgICAnJydNYWtlIHN1cmUgdGhhdCBzZW1hcGhvcmUgdHJhY2tlciBwcm9jZXNzIGlzIHJ1bm5pbmcuCisKKyAgICAgICAgVGhpcyBjYW4gYmUgcnVuIGZyb20gYW55IHByb2Nlc3MuICBVc3VhbGx5IGEgY2hpbGQgcHJvY2VzcyB3aWxsIHVzZQorICAgICAgICB0aGUgc2VtYXBob3JlIGNyZWF0ZWQgYnkgaXRzIHBhcmVudC4nJycKKyAgICAgICAgd2l0aCBzZWxmLl9sb2NrOgorICAgICAgICAgICAgaWYgc2VsZi5fZmQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBmZHNfdG9fcGFzcyA9IFtdCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZmRzX3RvX3Bhc3MuYXBwZW5kKHN5cy5zdGRlcnIuZmlsZW5vKCkpCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGNtZCA9ICdmcm9tIG11bHRpcHJvY2Vzc2luZy5zZW1hcGhvcmVfdHJhY2tlciBpbXBvcnQgbWFpbjttYWluKCVkKScKKyAgICAgICAgICAgIHIsIHcgPSBvcy5waXBlKCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBmZHNfdG9fcGFzcy5hcHBlbmQocikKKyAgICAgICAgICAgICAgICAjIHByb2Nlc3Mgd2lsbCBvdXQgbGl2ZSB1cywgc28gbm8gbmVlZCB0byB3YWl0IG9uIHBpZAorICAgICAgICAgICAgICAgIGV4ZSA9IHNwYXduLmdldF9leGVjdXRhYmxlKCkKKyAgICAgICAgICAgICAgICBhcmdzID0gW2V4ZV0gKyB1dGlsLl9hcmdzX2Zyb21faW50ZXJwcmV0ZXJfZmxhZ3MoKQorICAgICAgICAgICAgICAgIGFyZ3MgKz0gWyctYycsIGNtZCAlIHJdCisgICAgICAgICAgICAgICAgdXRpbC5zcGF3bnZfcGFzc2ZkcyhleGUsIGFyZ3MsIGZkc190b19wYXNzKQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIG9zLmNsb3NlKHcpCisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5fZmQgPSB3CisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIG9zLmNsb3NlKHIpCisKKyAgICBkZWYgcmVnaXN0ZXIoc2VsZiwgbmFtZSk6CisgICAgICAgICcnJ1JlZ2lzdGVyIG5hbWUgb2Ygc2VtYXBob3JlIHdpdGggc2VtYXBob3JlIHRyYWNrZXIuJycnCisgICAgICAgIHNlbGYuX3NlbmQoJ1JFR0lTVEVSJywgbmFtZSkKKworICAgIGRlZiB1bnJlZ2lzdGVyKHNlbGYsIG5hbWUpOgorICAgICAgICAnJydVbnJlZ2lzdGVyIG5hbWUgb2Ygc2VtYXBob3JlIHdpdGggc2VtYXBob3JlIHRyYWNrZXIuJycnCisgICAgICAgIHNlbGYuX3NlbmQoJ1VOUkVHSVNURVInLCBuYW1lKQorCisgICAgZGVmIF9zZW5kKHNlbGYsIGNtZCwgbmFtZSk6CisgICAgICAgIHNlbGYuZW5zdXJlX3J1bm5pbmcoKQorICAgICAgICBtc2cgPSAnezB9OnsxfVxuJy5mb3JtYXQoY21kLCBuYW1lKS5lbmNvZGUoJ2FzY2lpJykKKyAgICAgICAgaWYgbGVuKG5hbWUpID4gNTEyOgorICAgICAgICAgICAgIyBwb3NpeCBndWFyYW50ZWVzIHRoYXQgd3JpdGVzIHRvIGEgcGlwZSBvZiBsZXNzIHRoYW4gUElQRV9CVUYKKyAgICAgICAgICAgICMgYnl0ZXMgYXJlIGF0b21pYywgYW5kIHRoYXQgUElQRV9CVUYgPj0gNTEyCisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCduYW1lIHRvbyBsb25nJykKKyAgICAgICAgbmJ5dGVzID0gb3Mud3JpdGUoc2VsZi5fZmQsIG1zZykKKyAgICAgICAgYXNzZXJ0IG5ieXRlcyA9PSBsZW4obXNnKQorCisKK19zZW1hcGhvcmVfdHJhY2tlciA9IFNlbWFwaG9yZVRyYWNrZXIoKQorZW5zdXJlX3J1bm5pbmcgPSBfc2VtYXBob3JlX3RyYWNrZXIuZW5zdXJlX3J1bm5pbmcKK3JlZ2lzdGVyID0gX3NlbWFwaG9yZV90cmFja2VyLnJlZ2lzdGVyCit1bnJlZ2lzdGVyID0gX3NlbWFwaG9yZV90cmFja2VyLnVucmVnaXN0ZXIKK2dldGZkID0gX3NlbWFwaG9yZV90cmFja2VyLmdldGZkCisKKworZGVmIG1haW4oZmQpOgorICAgICcnJ1J1biBzZW1hcGhvcmUgdHJhY2tlci4nJycKKyAgICAjIHByb3RlY3QgdGhlIHByb2Nlc3MgZnJvbSBeQyBhbmQgImtpbGxhbGwgcHl0aG9uIiBldGMKKyAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdJTlQsIHNpZ25hbC5TSUdfSUdOKQorICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR1RFUk0sIHNpZ25hbC5TSUdfSUdOKQorCisgICAgZm9yIGYgaW4gKHN5cy5zdGRpbiwgc3lzLnN0ZG91dCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgcGFzcworCisgICAgY2FjaGUgPSBzZXQoKQorICAgIHRyeToKKyAgICAgICAgIyBrZWVwIHRyYWNrIG9mIHJlZ2lzdGVyZWQvdW5yZWdpc3RlcmVkIHNlbWFwaG9yZXMKKyAgICAgICAgd2l0aCBvcGVuKGZkLCAncmInKSBhcyBmOgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGNtZCwgbmFtZSA9IGxpbmUuc3RyaXAoKS5zcGxpdChiJzonKQorICAgICAgICAgICAgICAgICAgICBpZiBjbWQgPT0gYidSRUdJU1RFUic6CisgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZS5hZGQobmFtZSkKKyAgICAgICAgICAgICAgICAgICAgZWxpZiBjbWQgPT0gYidVTlJFR0lTVEVSJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlLnJlbW92ZShuYW1lKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCd1bnJlY29nbml6ZWQgY29tbWFuZCAlcicgJSBjbWQpCisgICAgICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgc3lzLmV4Y2VwdGhvb2soKnN5cy5leGNfaW5mbygpKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgZmluYWxseToKKyAgICAgICAgIyBhbGwgcHJvY2Vzc2VzIGhhdmUgdGVybWluYXRlZDsgY2xlYW51cCBhbnkgcmVtYWluaW5nIHNlbWFwaG9yZXMKKyAgICAgICAgaWYgY2FjaGU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgd2FybmluZ3Mud2Fybignc2VtYXBob3JlX3RyYWNrZXI6IFRoZXJlIGFwcGVhciB0byBiZSAlZCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbGVha2VkIHNlbWFwaG9yZXMgdG8gY2xlYW4gdXAgYXQgc2h1dGRvd24nICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbihjYWNoZSkpCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZm9yIG5hbWUgaW4gY2FjaGU6CisgICAgICAgICAgICAjIEZvciBzb21lIHJlYXNvbiB0aGUgcHJvY2VzcyB3aGljaCBjcmVhdGVkIGFuZCByZWdpc3RlcmVkIHRoaXMKKyAgICAgICAgICAgICMgc2VtYXBob3JlIGhhcyBmYWlsZWQgdG8gdW5yZWdpc3RlciBpdC4gUHJlc3VtYWJseSBpdCBoYXMgZGllZC4KKyAgICAgICAgICAgICMgV2UgdGhlcmVmb3JlIHVubGluayBpdC4KKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBuYW1lID0gbmFtZS5kZWNvZGUoJ2FzY2lpJykKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIF9tdWx0aXByb2Nlc3Npbmcuc2VtX3VubGluayhuYW1lKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgICAgICAgICAgd2FybmluZ3Mud2Fybignc2VtYXBob3JlX3RyYWNrZXI6ICVyOiAlcycgJSAobmFtZSwgZSkpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHBhc3MKZGlmZiAtLWdpdCBhL0xpYi9tdWx0aXByb2Nlc3Npbmcvc2hhcmVkY3R5cGVzLnB5IGIvTGliL211bHRpcHJvY2Vzc2luZy9zaGFyZWRjdHlwZXMucHkKaW5kZXggYTM1OGVkNC4uMGMxNzgyNSAxMDA2NDQKLS0tIGEvTGliL211bHRpcHJvY2Vzc2luZy9zaGFyZWRjdHlwZXMucHkKKysrIGIvTGliL211bHRpcHJvY2Vzc2luZy9zaGFyZWRjdHlwZXMucHkKQEAgLTEwLDggKzEwLDExIEBACiBpbXBvcnQgY3R5cGVzCiBpbXBvcnQgd2Vha3JlZgogCi1mcm9tIG11bHRpcHJvY2Vzc2luZyBpbXBvcnQgaGVhcCwgUkxvY2sKLWZyb20gbXVsdGlwcm9jZXNzaW5nLmZvcmtpbmcgaW1wb3J0IGFzc2VydF9zcGF3bmluZywgRm9ya2luZ1BpY2tsZXIKK2Zyb20gLiBpbXBvcnQgaGVhcAorZnJvbSAuIGltcG9ydCBnZXRfY29udGV4dAorCitmcm9tIC5jb250ZXh0IGltcG9ydCBhc3NlcnRfc3Bhd25pbmcKK2Zyb20gLnJlZHVjdGlvbiBpbXBvcnQgRm9ya2luZ1BpY2tsZXIKIAogX19hbGxfXyA9IFsnUmF3VmFsdWUnLCAnUmF3QXJyYXknLCAnVmFsdWUnLCAnQXJyYXknLCAnY29weScsICdzeW5jaHJvbml6ZWQnXQogCkBAIC02Myw3ICs2Niw3IEBACiAgICAgICAgIHJlc3VsdC5fX2luaXRfXygqc2l6ZV9vcl9pbml0aWFsaXplcikKICAgICAgICAgcmV0dXJuIHJlc3VsdAogCi1kZWYgVmFsdWUodHlwZWNvZGVfb3JfdHlwZSwgKmFyZ3MsIGxvY2s9VHJ1ZSk6CitkZWYgVmFsdWUodHlwZWNvZGVfb3JfdHlwZSwgKmFyZ3MsIGxvY2s9VHJ1ZSwgY3R4PU5vbmUpOgogICAgICcnJwogICAgIFJldHVybiBhIHN5bmNocm9uaXphdGlvbiB3cmFwcGVyIGZvciBhIFZhbHVlCiAgICAgJycnCkBAIC03MSwxMiArNzQsMTMgQEAKICAgICBpZiBsb2NrIGlzIEZhbHNlOgogICAgICAgICByZXR1cm4gb2JqCiAgICAgaWYgbG9jayBpbiAoVHJ1ZSwgTm9uZSk6Ci0gICAgICAgIGxvY2sgPSBSTG9jaygpCisgICAgICAgIGN0eCA9IGN0eCBvciBnZXRfY29udGV4dCgpCisgICAgICAgIGxvY2sgPSBjdHguUkxvY2soKQogICAgIGlmIG5vdCBoYXNhdHRyKGxvY2ssICdhY3F1aXJlJyk6CiAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKCInJXInIGhhcyBubyBtZXRob2QgJ2FjcXVpcmUnIiAlIGxvY2spCi0gICAgcmV0dXJuIHN5bmNocm9uaXplZChvYmosIGxvY2spCisgICAgcmV0dXJuIHN5bmNocm9uaXplZChvYmosIGxvY2ssIGN0eD1jdHgpCiAKLWRlZiBBcnJheSh0eXBlY29kZV9vcl90eXBlLCBzaXplX29yX2luaXRpYWxpemVyLCAqLCBsb2NrPVRydWUpOgorZGVmIEFycmF5KHR5cGVjb2RlX29yX3R5cGUsIHNpemVfb3JfaW5pdGlhbGl6ZXIsICosIGxvY2s9VHJ1ZSwgY3R4PU5vbmUpOgogICAgICcnJwogICAgIFJldHVybiBhIHN5bmNocm9uaXphdGlvbiB3cmFwcGVyIGZvciBhIFJhd0FycmF5CiAgICAgJycnCkBAIC04NCwyNSArODgsMjcgQEAKICAgICBpZiBsb2NrIGlzIEZhbHNlOgogICAgICAgICByZXR1cm4gb2JqCiAgICAgaWYgbG9jayBpbiAoVHJ1ZSwgTm9uZSk6Ci0gICAgICAgIGxvY2sgPSBSTG9jaygpCisgICAgICAgIGN0eCA9IGN0eCBvciBnZXRfY29udGV4dCgpCisgICAgICAgIGxvY2sgPSBjdHguUkxvY2soKQogICAgIGlmIG5vdCBoYXNhdHRyKGxvY2ssICdhY3F1aXJlJyk6CiAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKCInJXInIGhhcyBubyBtZXRob2QgJ2FjcXVpcmUnIiAlIGxvY2spCi0gICAgcmV0dXJuIHN5bmNocm9uaXplZChvYmosIGxvY2spCisgICAgcmV0dXJuIHN5bmNocm9uaXplZChvYmosIGxvY2ssIGN0eD1jdHgpCiAKIGRlZiBjb3B5KG9iaik6CiAgICAgbmV3X29iaiA9IF9uZXdfdmFsdWUodHlwZShvYmopKQogICAgIGN0eXBlcy5wb2ludGVyKG5ld19vYmopWzBdID0gb2JqCiAgICAgcmV0dXJuIG5ld19vYmoKIAotZGVmIHN5bmNocm9uaXplZChvYmosIGxvY2s9Tm9uZSk6CitkZWYgc3luY2hyb25pemVkKG9iaiwgbG9jaz1Ob25lLCBjdHg9Tm9uZSk6CiAgICAgYXNzZXJ0IG5vdCBpc2luc3RhbmNlKG9iaiwgU3luY2hyb25pemVkQmFzZSksICdvYmplY3QgYWxyZWFkeSBzeW5jaHJvbml6ZWQnCisgICAgY3R4ID0gY3R4IG9yIGdldF9jb250ZXh0KCkKIAogICAgIGlmIGlzaW5zdGFuY2Uob2JqLCBjdHlwZXMuX1NpbXBsZUNEYXRhKToKLSAgICAgICAgcmV0dXJuIFN5bmNocm9uaXplZChvYmosIGxvY2spCisgICAgICAgIHJldHVybiBTeW5jaHJvbml6ZWQob2JqLCBsb2NrLCBjdHgpCiAgICAgZWxpZiBpc2luc3RhbmNlKG9iaiwgY3R5cGVzLkFycmF5KToKICAgICAgICAgaWYgb2JqLl90eXBlXyBpcyBjdHlwZXMuY19jaGFyOgotICAgICAgICAgICAgcmV0dXJuIFN5bmNocm9uaXplZFN0cmluZyhvYmosIGxvY2spCi0gICAgICAgIHJldHVybiBTeW5jaHJvbml6ZWRBcnJheShvYmosIGxvY2spCisgICAgICAgICAgICByZXR1cm4gU3luY2hyb25pemVkU3RyaW5nKG9iaiwgbG9jaywgY3R4KQorICAgICAgICByZXR1cm4gU3luY2hyb25pemVkQXJyYXkob2JqLCBsb2NrLCBjdHgpCiAgICAgZWxzZToKICAgICAgICAgY2xzID0gdHlwZShvYmopCiAgICAgICAgIHRyeToKQEAgLTExMiw3ICsxMTgsNyBAQAogICAgICAgICAgICAgZCA9IGRpY3QoKG5hbWUsIG1ha2VfcHJvcGVydHkobmFtZSkpIGZvciBuYW1lIGluIG5hbWVzKQogICAgICAgICAgICAgY2xhc3NuYW1lID0gJ1N5bmNocm9uaXplZCcgKyBjbHMuX19uYW1lX18KICAgICAgICAgICAgIHNjbHMgPSBjbGFzc19jYWNoZVtjbHNdID0gdHlwZShjbGFzc25hbWUsIChTeW5jaHJvbml6ZWRCYXNlLCksIGQpCi0gICAgICAgIHJldHVybiBzY2xzKG9iaiwgbG9jaykKKyAgICAgICAgcmV0dXJuIHNjbHMob2JqLCBsb2NrLCBjdHgpCiAKICMKICMgRnVuY3Rpb25zIGZvciBwaWNrbGluZy91bnBpY2tsaW5nCkBAIC0xNzIsOSArMTc4LDEzIEBACiAKIGNsYXNzIFN5bmNocm9uaXplZEJhc2Uob2JqZWN0KToKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvYmosIGxvY2s9Tm9uZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG9iaiwgbG9jaz1Ob25lLCBjdHg9Tm9uZSk6CiAgICAgICAgIHNlbGYuX29iaiA9IG9iagotICAgICAgICBzZWxmLl9sb2NrID0gbG9jayBvciBSTG9jaygpCisgICAgICAgIGlmIGxvY2s6CisgICAgICAgICAgICBzZWxmLl9sb2NrID0gbG9jaworICAgICAgICBlbHNlOgorICAgICAgICAgICAgY3R4ID0gY3R4IG9yIGdldF9jb250ZXh0KGZvcmNlPVRydWUpCisgICAgICAgICAgICBzZWxmLl9sb2NrID0gY3R4LlJMb2NrKCkKICAgICAgICAgc2VsZi5hY3F1aXJlID0gc2VsZi5fbG9jay5hY3F1aXJlCiAgICAgICAgIHNlbGYucmVsZWFzZSA9IHNlbGYuX2xvY2sucmVsZWFzZQogCmRpZmYgLS1naXQgYS9MaWIvbXVsdGlwcm9jZXNzaW5nL3NwYXduLnB5IGIvTGliL211bHRpcHJvY2Vzc2luZy9zcGF3bi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzZlNDc5Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL211bHRpcHJvY2Vzc2luZy9zcGF3bi5weQpAQCAtMCwwICsxLDI4NyBAQAorIworIyBDb2RlIHVzZWQgdG8gc3RhcnQgcHJvY2Vzc2VzIHdoZW4gdXNpbmcgdGhlIHNwYXduIG9yIGZvcmtzZXJ2ZXIKKyMgc3RhcnQgbWV0aG9kcy4KKyMKKyMgbXVsdGlwcm9jZXNzaW5nL3NwYXduLnB5CisjCisjIENvcHlyaWdodCAoYykgMjAwNi0yMDA4LCBSIE91ZGtlcmsKKyMgTGljZW5zZWQgdG8gUFNGIHVuZGVyIGEgQ29udHJpYnV0b3IgQWdyZWVtZW50LgorIworCitpbXBvcnQgb3MKK2ltcG9ydCBwaWNrbGUKK2ltcG9ydCBzeXMKK2ltcG9ydCBydW5weQoraW1wb3J0IHR5cGVzCisKK2Zyb20gLiBpbXBvcnQgZ2V0X3N0YXJ0X21ldGhvZCwgc2V0X3N0YXJ0X21ldGhvZAorZnJvbSAuIGltcG9ydCBwcm9jZXNzCitmcm9tIC4gaW1wb3J0IHV0aWwKKworX19hbGxfXyA9IFsnX21haW4nLCAnZnJlZXplX3N1cHBvcnQnLCAnc2V0X2V4ZWN1dGFibGUnLCAnZ2V0X2V4ZWN1dGFibGUnLAorICAgICAgICAgICAnZ2V0X3ByZXBhcmF0aW9uX2RhdGEnLCAnZ2V0X2NvbW1hbmRfbGluZScsICdpbXBvcnRfbWFpbl9wYXRoJ10KKworIworIyBfcHl0aG9uX2V4ZSBpcyB0aGUgYXNzdW1lZCBwYXRoIHRvIHRoZSBweXRob24gZXhlY3V0YWJsZS4KKyMgUGVvcGxlIGVtYmVkZGluZyBQeXRob24gd2FudCB0byBtb2RpZnkgaXQuCisjCisKK2lmIHN5cy5wbGF0Zm9ybSAhPSAnd2luMzInOgorICAgIFdJTkVYRSA9IEZhbHNlCisgICAgV0lOU0VSVklDRSA9IEZhbHNlCitlbHNlOgorICAgIFdJTkVYRSA9IChzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJyBhbmQgZ2V0YXR0cihzeXMsICdmcm96ZW4nLCBGYWxzZSkpCisgICAgV0lOU0VSVklDRSA9IHN5cy5leGVjdXRhYmxlLmxvd2VyKCkuZW5kc3dpdGgoInB5dGhvbnNlcnZpY2UuZXhlIikKKworaWYgV0lOU0VSVklDRToKKyAgICBfcHl0aG9uX2V4ZSA9IG9zLnBhdGguam9pbihzeXMuZXhlY19wcmVmaXgsICdweXRob24uZXhlJykKK2Vsc2U6CisgICAgX3B5dGhvbl9leGUgPSBzeXMuZXhlY3V0YWJsZQorCitkZWYgc2V0X2V4ZWN1dGFibGUoZXhlKToKKyAgICBnbG9iYWwgX3B5dGhvbl9leGUKKyAgICBfcHl0aG9uX2V4ZSA9IGV4ZQorCitkZWYgZ2V0X2V4ZWN1dGFibGUoKToKKyAgICByZXR1cm4gX3B5dGhvbl9leGUKKworIworIworIworCitkZWYgaXNfZm9ya2luZyhhcmd2KToKKyAgICAnJycKKyAgICBSZXR1cm4gd2hldGhlciBjb21tYW5kbGluZSBpbmRpY2F0ZXMgd2UgYXJlIGZvcmtpbmcKKyAgICAnJycKKyAgICBpZiBsZW4oYXJndikgPj0gMiBhbmQgYXJndlsxXSA9PSAnLS1tdWx0aXByb2Nlc3NpbmctZm9yayc6CisgICAgICAgIHJldHVybiBUcnVlCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKworZGVmIGZyZWV6ZV9zdXBwb3J0KCk6CisgICAgJycnCisgICAgUnVuIGNvZGUgZm9yIHByb2Nlc3Mgb2JqZWN0IGlmIHRoaXMgaW4gbm90IHRoZSBtYWluIHByb2Nlc3MKKyAgICAnJycKKyAgICBpZiBpc19mb3JraW5nKHN5cy5hcmd2KToKKyAgICAgICAga3dkcyA9IHt9CisgICAgICAgIGZvciBhcmcgaW4gc3lzLmFyZ3ZbMjpdOgorICAgICAgICAgICAgbmFtZSwgdmFsdWUgPSBhcmcuc3BsaXQoJz0nKQorICAgICAgICAgICAgaWYgdmFsdWUgPT0gJ05vbmUnOgorICAgICAgICAgICAgICAgIGt3ZHNbbmFtZV0gPSBOb25lCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGt3ZHNbbmFtZV0gPSBpbnQodmFsdWUpCisgICAgICAgIHNwYXduX21haW4oKiprd2RzKQorICAgICAgICBzeXMuZXhpdCgpCisKKworZGVmIGdldF9jb21tYW5kX2xpbmUoKiprd2RzKToKKyAgICAnJycKKyAgICBSZXR1cm5zIHByZWZpeCBvZiBjb21tYW5kIGxpbmUgdXNlZCBmb3Igc3Bhd25pbmcgYSBjaGlsZCBwcm9jZXNzCisgICAgJycnCisgICAgaWYgZ2V0YXR0cihzeXMsICdmcm96ZW4nLCBGYWxzZSk6CisgICAgICAgIHJldHVybiAoW3N5cy5leGVjdXRhYmxlLCAnLS1tdWx0aXByb2Nlc3NpbmctZm9yayddICsKKyAgICAgICAgICAgICAgICBbJyVzPSVyJyAlIGl0ZW0gZm9yIGl0ZW0gaW4ga3dkcy5pdGVtcygpXSkKKyAgICBlbHNlOgorICAgICAgICBwcm9nID0gJ2Zyb20gbXVsdGlwcm9jZXNzaW5nLnNwYXduIGltcG9ydCBzcGF3bl9tYWluOyBzcGF3bl9tYWluKCVzKScKKyAgICAgICAgcHJvZyAlPSAnLCAnLmpvaW4oJyVzPSVyJyAlIGl0ZW0gZm9yIGl0ZW0gaW4ga3dkcy5pdGVtcygpKQorICAgICAgICBvcHRzID0gdXRpbC5fYXJnc19mcm9tX2ludGVycHJldGVyX2ZsYWdzKCkKKyAgICAgICAgcmV0dXJuIFtfcHl0aG9uX2V4ZV0gKyBvcHRzICsgWyctYycsIHByb2csICctLW11bHRpcHJvY2Vzc2luZy1mb3JrJ10KKworCitkZWYgc3Bhd25fbWFpbihwaXBlX2hhbmRsZSwgcGFyZW50X3BpZD1Ob25lLCB0cmFja2VyX2ZkPU5vbmUpOgorICAgICcnJworICAgIFJ1biBjb2RlIHNwZWNpZmVkIGJ5IGRhdGEgcmVjZWl2ZWQgb3ZlciBwaXBlCisgICAgJycnCisgICAgYXNzZXJ0IGlzX2Zvcmtpbmcoc3lzLmFyZ3YpCisgICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6CisgICAgICAgIGltcG9ydCBtc3ZjcnQKKyAgICAgICAgZnJvbSAucmVkdWN0aW9uIGltcG9ydCBzdGVhbF9oYW5kbGUKKyAgICAgICAgbmV3X2hhbmRsZSA9IHN0ZWFsX2hhbmRsZShwYXJlbnRfcGlkLCBwaXBlX2hhbmRsZSkKKyAgICAgICAgZmQgPSBtc3ZjcnQub3Blbl9vc2ZoYW5kbGUobmV3X2hhbmRsZSwgb3MuT19SRE9OTFkpCisgICAgZWxzZToKKyAgICAgICAgZnJvbSAuIGltcG9ydCBzZW1hcGhvcmVfdHJhY2tlcgorICAgICAgICBzZW1hcGhvcmVfdHJhY2tlci5fc2VtYXBob3JlX3RyYWNrZXIuX2ZkID0gdHJhY2tlcl9mZAorICAgICAgICBmZCA9IHBpcGVfaGFuZGxlCisgICAgZXhpdGNvZGUgPSBfbWFpbihmZCkKKyAgICBzeXMuZXhpdChleGl0Y29kZSkKKworCitkZWYgX21haW4oZmQpOgorICAgIHdpdGggb3MuZmRvcGVuKGZkLCAncmInLCBjbG9zZWZkPVRydWUpIGFzIGZyb21fcGFyZW50OgorICAgICAgICBwcm9jZXNzLmN1cnJlbnRfcHJvY2VzcygpLl9pbmhlcml0aW5nID0gVHJ1ZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBwcmVwYXJhdGlvbl9kYXRhID0gcGlja2xlLmxvYWQoZnJvbV9wYXJlbnQpCisgICAgICAgICAgICBwcmVwYXJlKHByZXBhcmF0aW9uX2RhdGEpCisgICAgICAgICAgICBzZWxmID0gcGlja2xlLmxvYWQoZnJvbV9wYXJlbnQpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBkZWwgcHJvY2Vzcy5jdXJyZW50X3Byb2Nlc3MoKS5faW5oZXJpdGluZworICAgIHJldHVybiBzZWxmLl9ib290c3RyYXAoKQorCisKK2RlZiBfY2hlY2tfbm90X2ltcG9ydGluZ19tYWluKCk6CisgICAgaWYgZ2V0YXR0cihwcm9jZXNzLmN1cnJlbnRfcHJvY2VzcygpLCAnX2luaGVyaXRpbmcnLCBGYWxzZSk6CisgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignJycKKyAgICAgICAgQW4gYXR0ZW1wdCBoYXMgYmVlbiBtYWRlIHRvIHN0YXJ0IGEgbmV3IHByb2Nlc3MgYmVmb3JlIHRoZQorICAgICAgICBjdXJyZW50IHByb2Nlc3MgaGFzIGZpbmlzaGVkIGl0cyBib290c3RyYXBwaW5nIHBoYXNlLgorCisgICAgICAgIFRoaXMgcHJvYmFibHkgbWVhbnMgdGhhdCB5b3UgYXJlIG5vdCB1c2luZyBmb3JrIHRvIHN0YXJ0IHlvdXIKKyAgICAgICAgY2hpbGQgcHJvY2Vzc2VzIGFuZCB5b3UgaGF2ZSBmb3Jnb3R0ZW4gdG8gdXNlIHRoZSBwcm9wZXIgaWRpb20KKyAgICAgICAgaW4gdGhlIG1haW4gbW9kdWxlOgorCisgICAgICAgICAgICBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgICAgICAgICAgICAgIGZyZWV6ZV9zdXBwb3J0KCkKKyAgICAgICAgICAgICAgICAuLi4KKworICAgICAgICBUaGUgImZyZWV6ZV9zdXBwb3J0KCkiIGxpbmUgY2FuIGJlIG9taXR0ZWQgaWYgdGhlIHByb2dyYW0KKyAgICAgICAgaXMgbm90IGdvaW5nIHRvIGJlIGZyb3plbiB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUuJycnKQorCisKK2RlZiBnZXRfcHJlcGFyYXRpb25fZGF0YShuYW1lKToKKyAgICAnJycKKyAgICBSZXR1cm4gaW5mbyBhYm91dCBwYXJlbnQgbmVlZGVkIGJ5IGNoaWxkIHRvIHVucGlja2xlIHByb2Nlc3Mgb2JqZWN0CisgICAgJycnCisgICAgX2NoZWNrX25vdF9pbXBvcnRpbmdfbWFpbigpCisgICAgZCA9IGRpY3QoCisgICAgICAgIGxvZ190b19zdGRlcnI9dXRpbC5fbG9nX3RvX3N0ZGVyciwKKyAgICAgICAgYXV0aGtleT1wcm9jZXNzLmN1cnJlbnRfcHJvY2VzcygpLmF1dGhrZXksCisgICAgICAgICkKKworICAgIGlmIHV0aWwuX2xvZ2dlciBpcyBub3QgTm9uZToKKyAgICAgICAgZFsnbG9nX2xldmVsJ10gPSB1dGlsLl9sb2dnZXIuZ2V0RWZmZWN0aXZlTGV2ZWwoKQorCisgICAgc3lzX3BhdGg9c3lzLnBhdGguY29weSgpCisgICAgdHJ5OgorICAgICAgICBpID0gc3lzX3BhdGguaW5kZXgoJycpCisgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgIHBhc3MKKyAgICBlbHNlOgorICAgICAgICBzeXNfcGF0aFtpXSA9IHByb2Nlc3MuT1JJR0lOQUxfRElSCisKKyAgICBkLnVwZGF0ZSgKKyAgICAgICAgbmFtZT1uYW1lLAorICAgICAgICBzeXNfcGF0aD1zeXNfcGF0aCwKKyAgICAgICAgc3lzX2FyZ3Y9c3lzLmFyZ3YsCisgICAgICAgIG9yaWdfZGlyPXByb2Nlc3MuT1JJR0lOQUxfRElSLAorICAgICAgICBkaXI9b3MuZ2V0Y3dkKCksCisgICAgICAgIHN0YXJ0X21ldGhvZD1nZXRfc3RhcnRfbWV0aG9kKCksCisgICAgICAgICkKKworICAgICMgRmlndXJlIG91dCB3aGV0aGVyIHRvIGluaXRpYWxpc2UgbWFpbiBpbiB0aGUgc3VicHJvY2VzcyBhcyBhIG1vZHVsZQorICAgICMgb3IgdGhyb3VnaCBkaXJlY3QgZXhlY3V0aW9uIChvciB0byBsZWF2ZSBpdCBhbG9uZSBlbnRpcmVseSkKKyAgICBtYWluX21vZHVsZSA9IHN5cy5tb2R1bGVzWydfX21haW5fXyddCisgICAgbWFpbl9tb2RfbmFtZSA9IGdldGF0dHIobWFpbl9tb2R1bGUuX19zcGVjX18sICJuYW1lIiwgTm9uZSkKKyAgICBpZiBtYWluX21vZF9uYW1lIGlzIG5vdCBOb25lOgorICAgICAgICBkWydpbml0X21haW5fZnJvbV9uYW1lJ10gPSBtYWluX21vZF9uYW1lCisgICAgZWxpZiBzeXMucGxhdGZvcm0gIT0gJ3dpbjMyJyBvciAobm90IFdJTkVYRSBhbmQgbm90IFdJTlNFUlZJQ0UpOgorICAgICAgICBtYWluX3BhdGggPSBnZXRhdHRyKG1haW5fbW9kdWxlLCAnX19maWxlX18nLCBOb25lKQorICAgICAgICBpZiBtYWluX3BhdGggaXMgbm90IE5vbmU6CisgICAgICAgICAgICBpZiAobm90IG9zLnBhdGguaXNhYnMobWFpbl9wYXRoKSBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3MuT1JJR0lOQUxfRElSIGlzIG5vdCBOb25lKToKKyAgICAgICAgICAgICAgICBtYWluX3BhdGggPSBvcy5wYXRoLmpvaW4ocHJvY2Vzcy5PUklHSU5BTF9ESVIsIG1haW5fcGF0aCkKKyAgICAgICAgICAgIGRbJ2luaXRfbWFpbl9mcm9tX3BhdGgnXSA9IG9zLnBhdGgubm9ybXBhdGgobWFpbl9wYXRoKQorCisgICAgcmV0dXJuIGQKKworIworIyBQcmVwYXJlIGN1cnJlbnQgcHJvY2VzcworIworCitvbGRfbWFpbl9tb2R1bGVzID0gW10KKworZGVmIHByZXBhcmUoZGF0YSk6CisgICAgJycnCisgICAgVHJ5IHRvIGdldCBjdXJyZW50IHByb2Nlc3MgcmVhZHkgdG8gdW5waWNrbGUgcHJvY2VzcyBvYmplY3QKKyAgICAnJycKKyAgICBpZiAnbmFtZScgaW4gZGF0YToKKyAgICAgICAgcHJvY2Vzcy5jdXJyZW50X3Byb2Nlc3MoKS5uYW1lID0gZGF0YVsnbmFtZSddCisKKyAgICBpZiAnYXV0aGtleScgaW4gZGF0YToKKyAgICAgICAgcHJvY2Vzcy5jdXJyZW50X3Byb2Nlc3MoKS5hdXRoa2V5ID0gZGF0YVsnYXV0aGtleSddCisKKyAgICBpZiAnbG9nX3RvX3N0ZGVycicgaW4gZGF0YSBhbmQgZGF0YVsnbG9nX3RvX3N0ZGVyciddOgorICAgICAgICB1dGlsLmxvZ190b19zdGRlcnIoKQorCisgICAgaWYgJ2xvZ19sZXZlbCcgaW4gZGF0YToKKyAgICAgICAgdXRpbC5nZXRfbG9nZ2VyKCkuc2V0TGV2ZWwoZGF0YVsnbG9nX2xldmVsJ10pCisKKyAgICBpZiAnc3lzX3BhdGgnIGluIGRhdGE6CisgICAgICAgIHN5cy5wYXRoID0gZGF0YVsnc3lzX3BhdGgnXQorCisgICAgaWYgJ3N5c19hcmd2JyBpbiBkYXRhOgorICAgICAgICBzeXMuYXJndiA9IGRhdGFbJ3N5c19hcmd2J10KKworICAgIGlmICdkaXInIGluIGRhdGE6CisgICAgICAgIG9zLmNoZGlyKGRhdGFbJ2RpciddKQorCisgICAgaWYgJ29yaWdfZGlyJyBpbiBkYXRhOgorICAgICAgICBwcm9jZXNzLk9SSUdJTkFMX0RJUiA9IGRhdGFbJ29yaWdfZGlyJ10KKworICAgIGlmICdzdGFydF9tZXRob2QnIGluIGRhdGE6CisgICAgICAgIHNldF9zdGFydF9tZXRob2QoZGF0YVsnc3RhcnRfbWV0aG9kJ10pCisKKyAgICBpZiAnaW5pdF9tYWluX2Zyb21fbmFtZScgaW4gZGF0YToKKyAgICAgICAgX2ZpeHVwX21haW5fZnJvbV9uYW1lKGRhdGFbJ2luaXRfbWFpbl9mcm9tX25hbWUnXSkKKyAgICBlbGlmICdpbml0X21haW5fZnJvbV9wYXRoJyBpbiBkYXRhOgorICAgICAgICBfZml4dXBfbWFpbl9mcm9tX3BhdGgoZGF0YVsnaW5pdF9tYWluX2Zyb21fcGF0aCddKQorCisjIE11bHRpcHJvY2Vzc2luZyBtb2R1bGUgaGVscGVycyB0byBmaXggdXAgdGhlIG1haW4gbW9kdWxlIGluCisjIHNwYXduZWQgc3VicHJvY2Vzc2VzCitkZWYgX2ZpeHVwX21haW5fZnJvbV9uYW1lKG1vZF9uYW1lKToKKyAgICAjIF9fbWFpbl9fLnB5IGZpbGVzIGZvciBwYWNrYWdlcywgZGlyZWN0b3JpZXMsIHppcCBhcmNoaXZlcywgZXRjLCBydW4KKyAgICAjIHRoZWlyICJtYWluIG9ubHkiIGNvZGUgdW5jb25kaXRpb25hbGx5LCBzbyB3ZSBkb24ndCBldmVuIHRyeSB0bworICAgICMgcG9wdWxhdGUgYW55dGhpbmcgaW4gX19tYWluX18sIG5vciBkbyB3ZSBtYWtlIGFueSBjaGFuZ2VzIHRvCisgICAgIyBfX21haW5fXyBhdHRyaWJ1dGVzCisgICAgY3VycmVudF9tYWluID0gc3lzLm1vZHVsZXNbJ19fbWFpbl9fJ10KKyAgICBpZiBtb2RfbmFtZSA9PSAiX19tYWluX18iIG9yIG1vZF9uYW1lLmVuZHN3aXRoKCIuX19tYWluX18iKToKKyAgICAgICAgcmV0dXJuCisKKyAgICAjIElmIHRoaXMgcHJvY2VzcyB3YXMgZm9ya2VkLCBfX21haW5fXyBtYXkgYWxyZWFkeSBiZSBwb3B1bGF0ZWQKKyAgICBpZiBnZXRhdHRyKGN1cnJlbnRfbWFpbi5fX3NwZWNfXywgIm5hbWUiLCBOb25lKSA9PSBtb2RfbmFtZToKKyAgICAgICAgcmV0dXJuCisKKyAgICAjIE90aGVyd2lzZSwgX19tYWluX18gbWF5IGNvbnRhaW4gc29tZSBub24tbWFpbiBjb2RlIHdoZXJlIHdlIG5lZWQgdG8KKyAgICAjIHN1cHBvcnQgdW5waWNrbGluZyBpdCBwcm9wZXJseS4gV2UgcmVydW4gaXQgYXMgX19tcF9tYWluX18gYW5kIG1ha2UKKyAgICAjIHRoZSBub3JtYWwgX19tYWluX18gYW4gYWxpYXMgdG8gdGhhdAorICAgIG9sZF9tYWluX21vZHVsZXMuYXBwZW5kKGN1cnJlbnRfbWFpbikKKyAgICBtYWluX21vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUoIl9fbXBfbWFpbl9fIikKKyAgICBtYWluX2NvbnRlbnQgPSBydW5weS5ydW5fbW9kdWxlKG1vZF9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVuX25hbWU9Il9fbXBfbWFpbl9fIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdGVyX3N5cz1UcnVlKQorICAgIG1haW5fbW9kdWxlLl9fZGljdF9fLnVwZGF0ZShtYWluX2NvbnRlbnQpCisgICAgc3lzLm1vZHVsZXNbJ19fbWFpbl9fJ10gPSBzeXMubW9kdWxlc1snX19tcF9tYWluX18nXSA9IG1haW5fbW9kdWxlCisKKworZGVmIF9maXh1cF9tYWluX2Zyb21fcGF0aChtYWluX3BhdGgpOgorICAgICMgSWYgdGhpcyBwcm9jZXNzIHdhcyBmb3JrZWQsIF9fbWFpbl9fIG1heSBhbHJlYWR5IGJlIHBvcHVsYXRlZAorICAgIGN1cnJlbnRfbWFpbiA9IHN5cy5tb2R1bGVzWydfX21haW5fXyddCisKKyAgICAjIFVuZm9ydHVuYXRlbHksIHRoZSBtYWluIGlweXRob24gbGF1bmNoIHNjcmlwdCBoaXN0b3JpY2FsbHkgaGFkIG5vCisgICAgIyAiaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJyIgZ3VhcmQsIHNvIHdlIHdvcmsgYXJvdW5kIHRoYXQKKyAgICAjIGJ5IHRyZWF0aW5nIGl0IGxpa2UgYSBfX21haW5fXy5weSBmaWxlCisgICAgIyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2lweXRob24vaXB5dGhvbi9pc3N1ZXMvNDY5OAorICAgIG1haW5fbmFtZSA9IG9zLnBhdGguc3BsaXRleHQob3MucGF0aC5iYXNlbmFtZShtYWluX3BhdGgpKVswXQorICAgIGlmIG1haW5fbmFtZSA9PSAnaXB5dGhvbic6CisgICAgICAgIHJldHVybgorCisgICAgIyBPdGhlcndpc2UsIGlmIF9fZmlsZV9fIGFscmVhZHkgaGFzIHRoZSBzZXR0aW5nIHdlIGV4cGVjdCwKKyAgICAjIHRoZXJlJ3Mgbm90aGluZyBtb3JlIHRvIGRvCisgICAgaWYgZ2V0YXR0cihjdXJyZW50X21haW4sICdfX2ZpbGVfXycsIE5vbmUpID09IG1haW5fcGF0aDoKKyAgICAgICAgcmV0dXJuCisKKyAgICAjIElmIHRoZSBwYXJlbnQgcHJvY2VzcyBoYXMgc2VudCBhIHBhdGggdGhyb3VnaCByYXRoZXIgdGhhbiBhIG1vZHVsZQorICAgICMgbmFtZSB3ZSBhc3N1bWUgaXQgaXMgYW4gZXhlY3V0YWJsZSBzY3JpcHQgdGhhdCBtYXkgY29udGFpbgorICAgICMgbm9uLW1haW4gY29kZSB0aGF0IG5lZWRzIHRvIGJlIGV4ZWN1dGVkCisgICAgb2xkX21haW5fbW9kdWxlcy5hcHBlbmQoY3VycmVudF9tYWluKQorICAgIG1haW5fbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZSgiX19tcF9tYWluX18iKQorICAgIG1haW5fY29udGVudCA9IHJ1bnB5LnJ1bl9wYXRoKG1haW5fcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW5fbmFtZT0iX19tcF9tYWluX18iKQorICAgIG1haW5fbW9kdWxlLl9fZGljdF9fLnVwZGF0ZShtYWluX2NvbnRlbnQpCisgICAgc3lzLm1vZHVsZXNbJ19fbWFpbl9fJ10gPSBzeXMubW9kdWxlc1snX19tcF9tYWluX18nXSA9IG1haW5fbW9kdWxlCisKKworZGVmIGltcG9ydF9tYWluX3BhdGgobWFpbl9wYXRoKToKKyAgICAnJycKKyAgICBTZXQgc3lzLm1vZHVsZXNbJ19fbWFpbl9fJ10gdG8gbW9kdWxlIGF0IG1haW5fcGF0aAorICAgICcnJworICAgIF9maXh1cF9tYWluX2Zyb21fcGF0aChtYWluX3BhdGgpCmRpZmYgLS1naXQgYS9MaWIvbXVsdGlwcm9jZXNzaW5nL3N5bmNocm9uaXplLnB5IGIvTGliL211bHRpcHJvY2Vzc2luZy9zeW5jaHJvbml6ZS5weQppbmRleCAwZmFjYTc4Li5kZWExY2JkIDEwMDY0NAotLS0gYS9MaWIvbXVsdGlwcm9jZXNzaW5nL3N5bmNocm9uaXplLnB5CisrKyBiL0xpYi9tdWx0aXByb2Nlc3Npbmcvc3luY2hyb25pemUucHkKQEAgLTEzLDE4ICsxMywyMCBAQAogCiBpbXBvcnQgdGhyZWFkaW5nCiBpbXBvcnQgc3lzCi0KK2ltcG9ydCB0ZW1wZmlsZQogaW1wb3J0IF9tdWx0aXByb2Nlc3NpbmcKLWZyb20gbXVsdGlwcm9jZXNzaW5nLnByb2Nlc3MgaW1wb3J0IGN1cnJlbnRfcHJvY2VzcwotZnJvbSBtdWx0aXByb2Nlc3NpbmcudXRpbCBpbXBvcnQgcmVnaXN0ZXJfYWZ0ZXJfZm9yaywgZGVidWcKLWZyb20gbXVsdGlwcm9jZXNzaW5nLmZvcmtpbmcgaW1wb3J0IGFzc2VydF9zcGF3bmluZywgUG9wZW4KKwogZnJvbSB0aW1lIGltcG9ydCB0aW1lIGFzIF90aW1lCiAKK2Zyb20gLiBpbXBvcnQgY29udGV4dAorZnJvbSAuIGltcG9ydCBwcm9jZXNzCitmcm9tIC4gaW1wb3J0IHV0aWwKKwogIyBUcnkgdG8gaW1wb3J0IHRoZSBtcC5zeW5jaHJvbml6ZSBtb2R1bGUgY2xlYW5seSwgaWYgaXQgZmFpbHMKICMgcmFpc2UgSW1wb3J0RXJyb3IgZm9yIHBsYXRmb3JtcyBsYWNraW5nIGEgd29ya2luZyBzZW1fb3BlbiBpbXBsZW1lbnRhdGlvbi4KICMgU2VlIGlzc3VlIDM3NzAKIHRyeToKLSAgICBmcm9tIF9tdWx0aXByb2Nlc3NpbmcgaW1wb3J0IFNlbUxvY2sKKyAgICBmcm9tIF9tdWx0aXByb2Nlc3NpbmcgaW1wb3J0IFNlbUxvY2ssIHNlbV91bmxpbmsKIGV4Y2VwdCAoSW1wb3J0RXJyb3IpOgogICAgIHJhaXNlIEltcG9ydEVycm9yKCJUaGlzIHBsYXRmb3JtIGxhY2tzIGEgZnVuY3Rpb25pbmcgc2VtX29wZW4iICsKICAgICAgICAgICAgICAgICAgICAgICAiIGltcGxlbWVudGF0aW9uLCB0aGVyZWZvcmUsIHRoZSByZXF1aXJlZCIgKwpAQCAtNDQsMTUgKzQ2LDQ3IEBACiAKIGNsYXNzIFNlbUxvY2sob2JqZWN0KToKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBraW5kLCB2YWx1ZSwgbWF4dmFsdWUpOgotICAgICAgICBzbCA9IHNlbGYuX3NlbWxvY2sgPSBfbXVsdGlwcm9jZXNzaW5nLlNlbUxvY2soa2luZCwgdmFsdWUsIG1heHZhbHVlKQotICAgICAgICBkZWJ1ZygnY3JlYXRlZCBzZW1sb2NrIHdpdGggaGFuZGxlICVzJyAlIHNsLmhhbmRsZSkKKyAgICBfcmFuZCA9IHRlbXBmaWxlLl9SYW5kb21OYW1lU2VxdWVuY2UoKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGtpbmQsIHZhbHVlLCBtYXh2YWx1ZSwgKiwgY3R4KToKKyAgICAgICAgaWYgY3R4IGlzIE5vbmU6CisgICAgICAgICAgICBjdHggPSBjb250ZXh0Ll9kZWZhdWx0X2NvbnRleHQuZ2V0X2NvbnRleHQoKQorICAgICAgICBuYW1lID0gY3R4LmdldF9zdGFydF9tZXRob2QoKQorICAgICAgICB1bmxpbmtfbm93ID0gc3lzLnBsYXRmb3JtID09ICd3aW4zMicgb3IgbmFtZSA9PSAnZm9yaycKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTAwKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzbCA9IHNlbGYuX3NlbWxvY2sgPSBfbXVsdGlwcm9jZXNzaW5nLlNlbUxvY2soCisgICAgICAgICAgICAgICAgICAgIGtpbmQsIHZhbHVlLCBtYXh2YWx1ZSwgc2VsZi5fbWFrZV9uYW1lKCksCisgICAgICAgICAgICAgICAgICAgIHVubGlua19ub3cpCisgICAgICAgICAgICBleGNlcHQgRmlsZUV4aXN0c0Vycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIEZpbGVFeGlzdHNFcnJvcignY2Fubm90IGZpbmQgbmFtZSBmb3Igc2VtYXBob3JlJykKKworICAgICAgICB1dGlsLmRlYnVnKCdjcmVhdGVkIHNlbWxvY2sgd2l0aCBoYW5kbGUgJXMnICUgc2wuaGFuZGxlKQogICAgICAgICBzZWxmLl9tYWtlX21ldGhvZHMoKQogCiAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSAhPSAnd2luMzInOgogICAgICAgICAgICAgZGVmIF9hZnRlcl9mb3JrKG9iaik6CiAgICAgICAgICAgICAgICAgb2JqLl9zZW1sb2NrLl9hZnRlcl9mb3JrKCkKLSAgICAgICAgICAgIHJlZ2lzdGVyX2FmdGVyX2Zvcmsoc2VsZiwgX2FmdGVyX2ZvcmspCisgICAgICAgICAgICB1dGlsLnJlZ2lzdGVyX2FmdGVyX2Zvcmsoc2VsZiwgX2FmdGVyX2ZvcmspCisKKyAgICAgICAgaWYgc2VsZi5fc2VtbG9jay5uYW1lIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgIyBXZSBvbmx5IGdldCBoZXJlIGlmIHdlIGFyZSBvbiBVbml4IHdpdGggZm9ya2luZworICAgICAgICAgICAgIyBkaXNhYmxlZC4gIFdoZW4gdGhlIG9iamVjdCBpcyBnYXJiYWdlIGNvbGxlY3RlZCBvciB0aGUKKyAgICAgICAgICAgICMgcHJvY2VzcyBzaHV0cyBkb3duIHdlIHVubGluayB0aGUgc2VtYXBob3JlIG5hbWUKKyAgICAgICAgICAgIGZyb20gLnNlbWFwaG9yZV90cmFja2VyIGltcG9ydCByZWdpc3RlcgorICAgICAgICAgICAgcmVnaXN0ZXIoc2VsZi5fc2VtbG9jay5uYW1lKQorICAgICAgICAgICAgdXRpbC5GaW5hbGl6ZShzZWxmLCBTZW1Mb2NrLl9jbGVhbnVwLCAoc2VsZi5fc2VtbG9jay5uYW1lLCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXRwcmlvcml0eT0wKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBfY2xlYW51cChuYW1lKToKKyAgICAgICAgZnJvbSAuc2VtYXBob3JlX3RyYWNrZXIgaW1wb3J0IHVucmVnaXN0ZXIKKyAgICAgICAgc2VtX3VubGluayhuYW1lKQorICAgICAgICB1bnJlZ2lzdGVyKG5hbWUpCiAKICAgICBkZWYgX21ha2VfbWV0aG9kcyhzZWxmKToKICAgICAgICAgc2VsZi5hY3F1aXJlID0gc2VsZi5fc2VtbG9jay5hY3F1aXJlCkBAIC02NSwyMyArOTksMzIgQEAKICAgICAgICAgcmV0dXJuIHNlbGYuX3NlbWxvY2suX19leGl0X18oKmFyZ3MpCiAKICAgICBkZWYgX19nZXRzdGF0ZV9fKHNlbGYpOgotICAgICAgICBhc3NlcnRfc3Bhd25pbmcoc2VsZikKKyAgICAgICAgY29udGV4dC5hc3NlcnRfc3Bhd25pbmcoc2VsZikKICAgICAgICAgc2wgPSBzZWxmLl9zZW1sb2NrCi0gICAgICAgIHJldHVybiAoUG9wZW4uZHVwbGljYXRlX2Zvcl9jaGlsZChzbC5oYW5kbGUpLCBzbC5raW5kLCBzbC5tYXh2YWx1ZSkKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6CisgICAgICAgICAgICBoID0gY29udGV4dC5nZXRfc3Bhd25pbmdfcG9wZW4oKS5kdXBsaWNhdGVfZm9yX2NoaWxkKHNsLmhhbmRsZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGggPSBzbC5oYW5kbGUKKyAgICAgICAgcmV0dXJuIChoLCBzbC5raW5kLCBzbC5tYXh2YWx1ZSwgc2wubmFtZSkKIAogICAgIGRlZiBfX3NldHN0YXRlX18oc2VsZiwgc3RhdGUpOgogICAgICAgICBzZWxmLl9zZW1sb2NrID0gX211bHRpcHJvY2Vzc2luZy5TZW1Mb2NrLl9yZWJ1aWxkKCpzdGF0ZSkKLSAgICAgICAgZGVidWcoJ3JlY3JlYXRlZCBibG9ja2VyIHdpdGggaGFuZGxlICVyJyAlIHN0YXRlWzBdKQorICAgICAgICB1dGlsLmRlYnVnKCdyZWNyZWF0ZWQgYmxvY2tlciB3aXRoIGhhbmRsZSAlcicgJSBzdGF0ZVswXSkKICAgICAgICAgc2VsZi5fbWFrZV9tZXRob2RzKCkKIAorICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgX21ha2VfbmFtZSgpOgorICAgICAgICByZXR1cm4gJyVzLSVzJyAlIChwcm9jZXNzLmN1cnJlbnRfcHJvY2VzcygpLl9jb25maWdbJ3NlbXByZWZpeCddLAorICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0KFNlbUxvY2suX3JhbmQpKQorCiAjCiAjIFNlbWFwaG9yZQogIwogCiBjbGFzcyBTZW1hcGhvcmUoU2VtTG9jayk6CiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWU9MSk6Ci0gICAgICAgIFNlbUxvY2suX19pbml0X18oc2VsZiwgU0VNQVBIT1JFLCB2YWx1ZSwgU0VNX1ZBTFVFX01BWCkKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWU9MSwgKiwgY3R4KToKKyAgICAgICAgU2VtTG9jay5fX2luaXRfXyhzZWxmLCBTRU1BUEhPUkUsIHZhbHVlLCBTRU1fVkFMVUVfTUFYLCBjdHg9Y3R4KQogCiAgICAgZGVmIGdldF92YWx1ZShzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYuX3NlbWxvY2suX2dldF92YWx1ZSgpCkBAIC05OSw4ICsxNDIsOCBAQAogCiBjbGFzcyBCb3VuZGVkU2VtYXBob3JlKFNlbWFwaG9yZSk6CiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWU9MSk6Ci0gICAgICAgIFNlbUxvY2suX19pbml0X18oc2VsZiwgU0VNQVBIT1JFLCB2YWx1ZSwgdmFsdWUpCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlPTEsICosIGN0eCk6CisgICAgICAgIFNlbUxvY2suX19pbml0X18oc2VsZiwgU0VNQVBIT1JFLCB2YWx1ZSwgdmFsdWUsIGN0eD1jdHgpCiAKICAgICBkZWYgX19yZXByX18oc2VsZik6CiAgICAgICAgIHRyeToKQEAgLTExNiwxMyArMTU5LDEzIEBACiAKIGNsYXNzIExvY2soU2VtTG9jayk6CiAKLSAgICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgICAgIFNlbUxvY2suX19pbml0X18oc2VsZiwgU0VNQVBIT1JFLCAxLCAxKQorICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqLCBjdHgpOgorICAgICAgICBTZW1Mb2NrLl9faW5pdF9fKHNlbGYsIFNFTUFQSE9SRSwgMSwgMSwgY3R4PWN0eCkKIAogICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgaWYgc2VsZi5fc2VtbG9jay5faXNfbWluZSgpOgotICAgICAgICAgICAgICAgIG5hbWUgPSBjdXJyZW50X3Byb2Nlc3MoKS5uYW1lCisgICAgICAgICAgICAgICAgbmFtZSA9IHByb2Nlc3MuY3VycmVudF9wcm9jZXNzKCkubmFtZQogICAgICAgICAgICAgICAgIGlmIHRocmVhZGluZy5jdXJyZW50X3RocmVhZCgpLm5hbWUgIT0gJ01haW5UaHJlYWQnOgogICAgICAgICAgICAgICAgICAgICBuYW1lICs9ICd8JyArIHRocmVhZGluZy5jdXJyZW50X3RocmVhZCgpLm5hbWUKICAgICAgICAgICAgIGVsaWYgc2VsZi5fc2VtbG9jay5fZ2V0X3ZhbHVlKCkgPT0gMToKQEAgLTE0MSwxMyArMTg0LDEzIEBACiAKIGNsYXNzIFJMb2NrKFNlbUxvY2spOgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICBTZW1Mb2NrLl9faW5pdF9fKHNlbGYsIFJFQ1VSU0lWRV9NVVRFWCwgMSwgMSkKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKiwgY3R4KToKKyAgICAgICAgU2VtTG9jay5fX2luaXRfXyhzZWxmLCBSRUNVUlNJVkVfTVVURVgsIDEsIDEsIGN0eD1jdHgpCiAKICAgICBkZWYgX19yZXByX18oc2VsZik6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGlmIHNlbGYuX3NlbWxvY2suX2lzX21pbmUoKToKLSAgICAgICAgICAgICAgICBuYW1lID0gY3VycmVudF9wcm9jZXNzKCkubmFtZQorICAgICAgICAgICAgICAgIG5hbWUgPSBwcm9jZXNzLmN1cnJlbnRfcHJvY2VzcygpLm5hbWUKICAgICAgICAgICAgICAgICBpZiB0aHJlYWRpbmcuY3VycmVudF90aHJlYWQoKS5uYW1lICE9ICdNYWluVGhyZWFkJzoKICAgICAgICAgICAgICAgICAgICAgbmFtZSArPSAnfCcgKyB0aHJlYWRpbmcuY3VycmVudF90aHJlYWQoKS5uYW1lCiAgICAgICAgICAgICAgICAgY291bnQgPSBzZWxmLl9zZW1sb2NrLl9jb3VudCgpCkBAIC0xNjcsMTUgKzIxMCwxNSBAQAogCiBjbGFzcyBDb25kaXRpb24ob2JqZWN0KToKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb2NrPU5vbmUpOgotICAgICAgICBzZWxmLl9sb2NrID0gbG9jayBvciBSTG9jaygpCi0gICAgICAgIHNlbGYuX3NsZWVwaW5nX2NvdW50ID0gU2VtYXBob3JlKDApCi0gICAgICAgIHNlbGYuX3dva2VuX2NvdW50ID0gU2VtYXBob3JlKDApCi0gICAgICAgIHNlbGYuX3dhaXRfc2VtYXBob3JlID0gU2VtYXBob3JlKDApCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxvY2s9Tm9uZSwgKiwgY3R4KToKKyAgICAgICAgc2VsZi5fbG9jayA9IGxvY2sgb3IgY3R4LlJMb2NrKCkKKyAgICAgICAgc2VsZi5fc2xlZXBpbmdfY291bnQgPSBjdHguU2VtYXBob3JlKDApCisgICAgICAgIHNlbGYuX3dva2VuX2NvdW50ID0gY3R4LlNlbWFwaG9yZSgwKQorICAgICAgICBzZWxmLl93YWl0X3NlbWFwaG9yZSA9IGN0eC5TZW1hcGhvcmUoMCkKICAgICAgICAgc2VsZi5fbWFrZV9tZXRob2RzKCkKIAogICAgIGRlZiBfX2dldHN0YXRlX18oc2VsZik6Ci0gICAgICAgIGFzc2VydF9zcGF3bmluZyhzZWxmKQorICAgICAgICBjb250ZXh0LmFzc2VydF9zcGF3bmluZyhzZWxmKQogICAgICAgICByZXR1cm4gKHNlbGYuX2xvY2ssIHNlbGYuX3NsZWVwaW5nX2NvdW50LAogICAgICAgICAgICAgICAgIHNlbGYuX3dva2VuX2NvdW50LCBzZWxmLl93YWl0X3NlbWFwaG9yZSkKIApAQCAtMjg5LDkgKzMzMiw5IEBACiAKIGNsYXNzIEV2ZW50KG9iamVjdCk6CiAKLSAgICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgICAgIHNlbGYuX2NvbmQgPSBDb25kaXRpb24oTG9jaygpKQotICAgICAgICBzZWxmLl9mbGFnID0gU2VtYXBob3JlKDApCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICosIGN0eCk6CisgICAgICAgIHNlbGYuX2NvbmQgPSBjdHguQ29uZGl0aW9uKGN0eC5Mb2NrKCkpCisgICAgICAgIHNlbGYuX2ZsYWcgPSBjdHguU2VtYXBob3JlKDApCiAKICAgICBkZWYgaXNfc2V0KHNlbGYpOgogICAgICAgICBzZWxmLl9jb25kLmFjcXVpcmUoKQpAQCAtMzQwLDExICszODMsMTEgQEAKIAogY2xhc3MgQmFycmllcih0aHJlYWRpbmcuQmFycmllcik6CiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgcGFydGllcywgYWN0aW9uPU5vbmUsIHRpbWVvdXQ9Tm9uZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhcnRpZXMsIGFjdGlvbj1Ob25lLCB0aW1lb3V0PU5vbmUsICosIGN0eCk6CiAgICAgICAgIGltcG9ydCBzdHJ1Y3QKLSAgICAgICAgZnJvbSBtdWx0aXByb2Nlc3NpbmcuaGVhcCBpbXBvcnQgQnVmZmVyV3JhcHBlcgorICAgICAgICBmcm9tIC5oZWFwIGltcG9ydCBCdWZmZXJXcmFwcGVyCiAgICAgICAgIHdyYXBwZXIgPSBCdWZmZXJXcmFwcGVyKHN0cnVjdC5jYWxjc2l6ZSgnaScpICogMikKLSAgICAgICAgY29uZCA9IENvbmRpdGlvbigpCisgICAgICAgIGNvbmQgPSBjdHguQ29uZGl0aW9uKCkKICAgICAgICAgc2VsZi5fX3NldHN0YXRlX18oKHBhcnRpZXMsIGFjdGlvbiwgdGltZW91dCwgY29uZCwgd3JhcHBlcikpCiAgICAgICAgIHNlbGYuX3N0YXRlID0gMAogICAgICAgICBzZWxmLl9jb3VudCA9IDAKZGlmZiAtLWdpdCBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvdXRpbC5weSBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvdXRpbC5weQppbmRleCBmNTg2MmI0Li4wYjY5NWU0IDEwMDY0NAotLS0gYS9MaWIvbXVsdGlwcm9jZXNzaW5nL3V0aWwucHkKKysrIGIvTGliL211bHRpcHJvY2Vzc2luZy91dGlsLnB5CkBAIC03LDggKzcsNiBAQAogIyBMaWNlbnNlZCB0byBQU0YgdW5kZXIgYSBDb250cmlidXRvciBBZ3JlZW1lbnQuCiAjCiAKLWltcG9ydCBzeXMKLWltcG9ydCBmdW5jdG9vbHMKIGltcG9ydCBvcwogaW1wb3J0IGl0ZXJ0b29scwogaW1wb3J0IHdlYWtyZWYKQEAgLTE3LDEzICsxNSwxMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIyBjbGVhbnVwIGZ1bmN0aW9uIGJlZm9yZSBtdWx0aXByb2Nlc3NpbmcgZG9lcwogZnJvbSBzdWJwcm9jZXNzIGltcG9ydCBfYXJnc19mcm9tX2ludGVycHJldGVyX2ZsYWdzCiAKLWZyb20gbXVsdGlwcm9jZXNzaW5nLnByb2Nlc3MgaW1wb3J0IGN1cnJlbnRfcHJvY2VzcywgYWN0aXZlX2NoaWxkcmVuCitmcm9tIC4gaW1wb3J0IHByb2Nlc3MKIAogX19hbGxfXyA9IFsKICAgICAnc3ViX2RlYnVnJywgJ2RlYnVnJywgJ2luZm8nLCAnc3ViX3dhcm5pbmcnLCAnZ2V0X2xvZ2dlcicsCiAgICAgJ2xvZ190b19zdGRlcnInLCAnZ2V0X3RlbXBfZGlyJywgJ3JlZ2lzdGVyX2FmdGVyX2ZvcmsnLAogICAgICdpc19leGl0aW5nJywgJ0ZpbmFsaXplJywgJ0ZvcmtBd2FyZVRocmVhZExvY2snLCAnRm9ya0F3YXJlTG9jYWwnLAotICAgICdTVUJERUJVRycsICdTVUJXQVJOSU5HJywKKyAgICAnY2xvc2VfYWxsX2Zkc19leGNlcHQnLCAnU1VCREVCVUcnLCAnU1VCV0FSTklORycsCiAgICAgXQogCiAjCkBAIC03MSw4ICs2OSw2IEBACiAKICAgICAgICAgICAgIF9sb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcihMT0dHRVJfTkFNRSkKICAgICAgICAgICAgIF9sb2dnZXIucHJvcGFnYXRlID0gMAotICAgICAgICAgICAgbG9nZ2luZy5hZGRMZXZlbE5hbWUoU1VCREVCVUcsICdTVUJERUJVRycpCi0gICAgICAgICAgICBsb2dnaW5nLmFkZExldmVsTmFtZShTVUJXQVJOSU5HLCAnU1VCV0FSTklORycpCiAKICAgICAgICAgICAgICMgWFhYIG11bHRpcHJvY2Vzc2luZyBzaG91bGQgY2xlYW51cCBiZWZvcmUgbG9nZ2luZwogICAgICAgICAgICAgaWYgaGFzYXR0cihhdGV4aXQsICd1bnJlZ2lzdGVyJyk6CkBAIC0xMTEsMTMgKzEwNywxNCBAQAogCiBkZWYgZ2V0X3RlbXBfZGlyKCk6CiAgICAgIyBnZXQgbmFtZSBvZiBhIHRlbXAgZGlyZWN0b3J5IHdoaWNoIHdpbGwgYmUgYXV0b21hdGljYWxseSBjbGVhbmVkIHVwCi0gICAgaWYgY3VycmVudF9wcm9jZXNzKCkuX3RlbXBkaXIgaXMgTm9uZToKKyAgICB0ZW1wZGlyID0gcHJvY2Vzcy5jdXJyZW50X3Byb2Nlc3MoKS5fY29uZmlnLmdldCgndGVtcGRpcicpCisgICAgaWYgdGVtcGRpciBpcyBOb25lOgogICAgICAgICBpbXBvcnQgc2h1dGlsLCB0ZW1wZmlsZQogICAgICAgICB0ZW1wZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9J3B5bXAtJykKICAgICAgICAgaW5mbygnY3JlYXRlZCB0ZW1wIGRpcmVjdG9yeSAlcycsIHRlbXBkaXIpCiAgICAgICAgIEZpbmFsaXplKE5vbmUsIHNodXRpbC5ybXRyZWUsIGFyZ3M9W3RlbXBkaXJdLCBleGl0cHJpb3JpdHk9LTEwMCkKLSAgICAgICAgY3VycmVudF9wcm9jZXNzKCkuX3RlbXBkaXIgPSB0ZW1wZGlyCi0gICAgcmV0dXJuIGN1cnJlbnRfcHJvY2VzcygpLl90ZW1wZGlyCisgICAgICAgIHByb2Nlc3MuY3VycmVudF9wcm9jZXNzKCkuX2NvbmZpZ1sndGVtcGRpciddID0gdGVtcGRpcgorICAgIHJldHVybiB0ZW1wZGlyCiAKICMKICMgU3VwcG9ydCBmb3IgcmVpbml0aWFsaXphdGlvbiBvZiBvYmplY3RzIHdoZW4gYm9vdHN0cmFwcGluZyBhIGNoaWxkIHByb2Nlc3MKQEAgLTI3Myw4ICsyNzAsOCBAQAogX2V4aXRpbmcgPSBGYWxzZQogCiBkZWYgX2V4aXRfZnVuY3Rpb24oaW5mbz1pbmZvLCBkZWJ1Zz1kZWJ1ZywgX3J1bl9maW5hbGl6ZXJzPV9ydW5fZmluYWxpemVycywKLSAgICAgICAgICAgICAgICAgICBhY3RpdmVfY2hpbGRyZW49YWN0aXZlX2NoaWxkcmVuLAotICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfcHJvY2Vzcz1jdXJyZW50X3Byb2Nlc3MpOgorICAgICAgICAgICAgICAgICAgIGFjdGl2ZV9jaGlsZHJlbj1wcm9jZXNzLmFjdGl2ZV9jaGlsZHJlbiwKKyAgICAgICAgICAgICAgICAgICBjdXJyZW50X3Byb2Nlc3M9cHJvY2Vzcy5jdXJyZW50X3Byb2Nlc3MpOgogICAgICMgV2UgaG9sZCBvbiB0byByZWZlcmVuY2VzIHRvIGZ1bmN0aW9ucyBpbiB0aGUgYXJnbGlzdCBkdWUgdG8gdGhlCiAgICAgIyBzaXR1YXRpb24gZGVzY3JpYmVkIGJlbG93LCB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhZnRlciB0aGlzCiAgICAgIyBtb2R1bGUncyBnbG9iYWxzIGFyZSBkZXN0cm95ZWQuCkBAIC0zMDMsNyArMzAwLDcgQEAKICAgICAgICAgICAgICMgIzkyMDcuCiAKICAgICAgICAgICAgIGZvciBwIGluIGFjdGl2ZV9jaGlsZHJlbigpOgotICAgICAgICAgICAgICAgIGlmIHAuX2RhZW1vbmljOgorICAgICAgICAgICAgICAgIGlmIHAuZGFlbW9uOgogICAgICAgICAgICAgICAgICAgICBpbmZvKCdjYWxsaW5nIHRlcm1pbmF0ZSgpIGZvciBkYWVtb24gJXMnLCBwLm5hbWUpCiAgICAgICAgICAgICAgICAgICAgIHAuX3BvcGVuLnRlcm1pbmF0ZSgpCiAKQEAgLTMzNSwzICszMzIsMzYgQEAKICAgICAgICAgcmVnaXN0ZXJfYWZ0ZXJfZm9yayhzZWxmLCBsYW1iZGEgb2JqIDogb2JqLl9fZGljdF9fLmNsZWFyKCkpCiAgICAgZGVmIF9fcmVkdWNlX18oc2VsZik6CiAgICAgICAgIHJldHVybiB0eXBlKHNlbGYpLCAoKQorCisjCisjIENsb3NlIGZkcyBleGNlcHQgdGhvc2Ugc3BlY2lmaWVkCisjCisKK3RyeToKKyAgICBNQVhGRCA9IG9zLnN5c2NvbmYoIlNDX09QRU5fTUFYIikKK2V4Y2VwdCBFeGNlcHRpb246CisgICAgTUFYRkQgPSAyNTYKKworZGVmIGNsb3NlX2FsbF9mZHNfZXhjZXB0KGZkcyk6CisgICAgZmRzID0gbGlzdChmZHMpICsgWy0xLCBNQVhGRF0KKyAgICBmZHMuc29ydCgpCisgICAgYXNzZXJ0IGZkc1stMV0gPT0gTUFYRkQsICdmZCB0b28gbGFyZ2UnCisgICAgZm9yIGkgaW4gcmFuZ2UobGVuKGZkcykgLSAxKToKKyAgICAgICAgb3MuY2xvc2VyYW5nZShmZHNbaV0rMSwgZmRzW2krMV0pCisKKyMKKyMgU3RhcnQgYSBwcm9ncmFtIHdpdGggb25seSBzcGVjaWZpZWQgZmRzIGtlcHQgb3BlbgorIworCitkZWYgc3Bhd252X3Bhc3NmZHMocGF0aCwgYXJncywgcGFzc2Zkcyk6CisgICAgaW1wb3J0IF9wb3NpeHN1YnByb2Nlc3MKKyAgICBwYXNzZmRzID0gc29ydGVkKHBhc3NmZHMpCisgICAgZXJycGlwZV9yZWFkLCBlcnJwaXBlX3dyaXRlID0gb3MucGlwZSgpCisgICAgdHJ5OgorICAgICAgICByZXR1cm4gX3Bvc2l4c3VicHJvY2Vzcy5mb3JrX2V4ZWMoCisgICAgICAgICAgICBhcmdzLCBbb3MuZnNlbmNvZGUocGF0aCldLCBUcnVlLCBwYXNzZmRzLCBOb25lLCBOb25lLAorICAgICAgICAgICAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgZXJycGlwZV9yZWFkLCBlcnJwaXBlX3dyaXRlLAorICAgICAgICAgICAgRmFsc2UsIEZhbHNlLCBOb25lKQorICAgIGZpbmFsbHk6CisgICAgICAgIG9zLmNsb3NlKGVycnBpcGVfcmVhZCkKKyAgICAgICAgb3MuY2xvc2UoZXJycGlwZV93cml0ZSkKZGlmZiAtLWdpdCBhL0xpYi9uZXRyYy5weSBiL0xpYi9uZXRyYy5weQppbmRleCAyYWE0OGYzLi5iYmIzZDIzIDEwMDY0NAotLS0gYS9MaWIvbmV0cmMucHkKKysrIGIvTGliL25ldHJjLnB5CkBAIC0zLDggKzMsNiBAQAogIyBNb2R1bGUgYW5kIGRvY3VtZW50YXRpb24gYnkgRXJpYyBTLiBSYXltb25kLCAyMSBEZWMgMTk5OAogCiBpbXBvcnQgb3MsIHNobGV4LCBzdGF0Ci1pZiBvcy5uYW1lID09ICdwb3NpeCc6Ci0gICAgaW1wb3J0IHB3ZAogCiBfX2FsbF9fID0gWyJuZXRyYyIsICJOZXRyY1BhcnNlRXJyb3IiXQogCkBAIC0yOCw3ICsyNiw3IEBACiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgZmlsZSA9IG9zLnBhdGguam9pbihvcy5lbnZpcm9uWydIT01FJ10sICIubmV0cmMiKQogICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgotICAgICAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoIkNvdWxkIG5vdCBmaW5kIC5uZXRyYzogJEhPTUUgaXMgbm90IHNldCIpCisgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigiQ291bGQgbm90IGZpbmQgLm5ldHJjOiAkSE9NRSBpcyBub3Qgc2V0IikKICAgICAgICAgc2VsZi5ob3N0cyA9IHt9CiAgICAgICAgIHNlbGYubWFjcm9zID0ge30KICAgICAgICAgd2l0aCBvcGVuKGZpbGUpIGFzIGZwOgpAQCAtOTIsNiArOTAsNyBAQAogICAgICAgICAgICAgICAgICAgICBpZiBvcy5uYW1lID09ICdwb3NpeCcgYW5kIGRlZmF1bHRfbmV0cmM6CiAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wID0gb3MuZnN0YXQoZnAuZmlsZW5vKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiBwcm9wLnN0X3VpZCAhPSBvcy5nZXR1aWQoKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBvcnQgcHdkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3duZXIgPSBwd2QuZ2V0cHd1aWQocHJvcC5zdF91aWQpWzBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgpkaWZmIC0tZ2l0IGEvTGliL25udHBsaWIucHkgYi9MaWIvbm50cGxpYi5weQppbmRleCAwMmNjMzdjLi5hNzVmYWFkIDEwMDY0NAotLS0gYS9MaWIvbm50cGxpYi5weQorKysgYi9MaWIvbm50cGxpYi5weQpAQCAtODAsMTMgKzgwLDEzIEBACiBmcm9tIHNvY2tldCBpbXBvcnQgX0dMT0JBTF9ERUZBVUxUX1RJTUVPVVQKIAogX19hbGxfXyA9IFsiTk5UUCIsCi0gICAgICAgICAgICJOTlRQUmVwbHlFcnJvciIsICJOTlRQVGVtcG9yYXJ5RXJyb3IiLCAiTk5UUFBlcm1hbmVudEVycm9yIiwKLSAgICAgICAgICAgIk5OVFBQcm90b2NvbEVycm9yIiwgIk5OVFBEYXRhRXJyb3IiLAorICAgICAgICAgICAiTk5UUEVycm9yIiwgIk5OVFBSZXBseUVycm9yIiwgIk5OVFBUZW1wb3JhcnlFcnJvciIsCisgICAgICAgICAgICJOTlRQUGVybWFuZW50RXJyb3IiLCAiTk5UUFByb3RvY29sRXJyb3IiLCAiTk5UUERhdGFFcnJvciIsCiAgICAgICAgICAgICJkZWNvZGVfaGVhZGVyIiwKICAgICAgICAgICAgXQogCiAjIG1heGltYWwgbGluZSBsZW5ndGggd2hlbiBjYWxsaW5nIHJlYWRsaW5lKCkuIFRoaXMgaXMgdG8gcHJldmVudAotIyByZWFkaW5nIGFyYml0cmFyeSBsZW5naHQgbGluZXMuIFJGQyAzOTc3IGxpbWl0cyBOTlRQIGxpbmUgbGVuZ3RoIHRvCisjIHJlYWRpbmcgYXJiaXRyYXJ5IGxlbmd0aCBsaW5lcy4gUkZDIDM5NzcgbGltaXRzIE5OVFAgbGluZSBsZW5ndGggdG8KICMgNTEyIGNoYXJhY3RlcnMsIGluY2x1ZGluZyBDUkxGLiBXZSBoYXZlIHNlbGVjdGVkIDIwNDgganVzdCB0byBiZSBvbgogIyB0aGUgc2FmZSBzaWRlLgogX01BWExJTkUgPSAyMDQ4CkBAIC0yMDEsNyArMjAxLDcgQEAKICAgICByZXR1cm4gZm10CiAKIGRlZiBfcGFyc2Vfb3ZlcnZpZXcobGluZXMsIGZtdCwgZGF0YV9wcm9jZXNzX2Z1bmM9Tm9uZSk6Ci0gICAgIiIiUGFyc2UgdGhlIHJlc3BvbnNlIHRvIGEgT1ZFUiBvciBYT1ZFUiBjb21tYW5kIGFjY29yZGluZyB0byB0aGUKKyAgICAiIiJQYXJzZSB0aGUgcmVzcG9uc2UgdG8gYW4gT1ZFUiBvciBYT1ZFUiBjb21tYW5kIGFjY29yZGluZyB0byB0aGUKICAgICBvdmVydmlldyBmb3JtYXQgYGZtdGAuIiIiCiAgICAgbl9kZWZhdWx0cyA9IGxlbihfREVGQVVMVF9PVkVSVklFV19GTVQpCiAgICAgb3ZlcnZpZXcgPSBbXQpAQCAtMjc5LDcgKzI3OSw3IEBACiAKIGlmIF9oYXZlX3NzbDoKIAotICAgIGRlZiBfZW5jcnlwdF9vbihzb2NrLCBjb250ZXh0KToKKyAgICBkZWYgX2VuY3J5cHRfb24oc29jaywgY29udGV4dCwgaG9zdG5hbWUpOgogICAgICAgICAiIiJXcmFwIGEgc29ja2V0IGluIFNTTC9UTFMuIEFyZ3VtZW50czoKICAgICAgICAgLSBzb2NrOiBTb2NrZXQgdG8gd3JhcAogICAgICAgICAtIGNvbnRleHQ6IFNTTCBjb250ZXh0IHRvIHVzZSBmb3IgdGhlIGVuY3J5cHRlZCBjb25uZWN0aW9uCkBAIC0yODgsMTAgKzI4OCw4IEBACiAgICAgICAgICIiIgogICAgICAgICAjIEdlbmVyYXRlIGEgZGVmYXVsdCBTU0wgY29udGV4dCBpZiBub25lIHdhcyBwYXNzZWQuCiAgICAgICAgIGlmIGNvbnRleHQgaXMgTm9uZToKLSAgICAgICAgICAgIGNvbnRleHQgPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfU1NMdjIzKQotICAgICAgICAgICAgIyBTU0x2MiBjb25zaWRlcmVkIGhhcm1mdWwuCi0gICAgICAgICAgICBjb250ZXh0Lm9wdGlvbnMgfD0gc3NsLk9QX05PX1NTTHYyCi0gICAgICAgIHJldHVybiBjb250ZXh0LndyYXBfc29ja2V0KHNvY2spCisgICAgICAgICAgICBjb250ZXh0ID0gc3NsLl9jcmVhdGVfc3RkbGliX2NvbnRleHQoKQorICAgICAgICByZXR1cm4gY29udGV4dC53cmFwX3NvY2tldChzb2NrLCBzZXJ2ZXJfaG9zdG5hbWU9aG9zdG5hbWUpCiAKIAogIyBUaGUgY2xhc3NlcyB0aGVtc2VsdmVzCkBAIC0zNjYsNyArMzY0LDcgQEAKICAgICAgICAgaWYgaXNfY29ubmVjdGVkKCk6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc2VsZi5xdWl0KCkKLSAgICAgICAgICAgIGV4Y2VwdCAoc29ja2V0LmVycm9yLCBFT0ZFcnJvcik6CisgICAgICAgICAgICBleGNlcHQgKE9TRXJyb3IsIEVPRkVycm9yKToKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgICAgIGlmIGlzX2Nvbm5lY3RlZCgpOgpAQCAtOTU2LDcgKzk1NCw3IEBACiAgICAgICAgICAgICAgICAgaWYgYXV0aDoKICAgICAgICAgICAgICAgICAgICAgdXNlciA9IGF1dGhbMF0KICAgICAgICAgICAgICAgICAgICAgcGFzc3dvcmQgPSBhdXRoWzJdCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgIyBQZXJmb3JtIE5OVFAgYXV0aGVudGljYXRpb24gaWYgbmVlZGVkLgogICAgICAgICBpZiBub3QgdXNlcjoKQEAgLTEwMDcsNyArMTAwNSw3IEBACiAgICAgICAgICAgICByZXNwID0gc2VsZi5fc2hvcnRjbWQoJ1NUQVJUVExTJykKICAgICAgICAgICAgIGlmIHJlc3Auc3RhcnRzd2l0aCgnMzgyJyk6CiAgICAgICAgICAgICAgICAgc2VsZi5maWxlLmNsb3NlKCkKLSAgICAgICAgICAgICAgICBzZWxmLnNvY2sgPSBfZW5jcnlwdF9vbihzZWxmLnNvY2ssIGNvbnRleHQpCisgICAgICAgICAgICAgICAgc2VsZi5zb2NrID0gX2VuY3J5cHRfb24oc2VsZi5zb2NrLCBjb250ZXh0LCBzZWxmLmhvc3QpCiAgICAgICAgICAgICAgICAgc2VsZi5maWxlID0gc2VsZi5zb2NrLm1ha2VmaWxlKCJyd2IiKQogICAgICAgICAgICAgICAgIHNlbGYudGxzX29uID0gVHJ1ZQogICAgICAgICAgICAgICAgICMgQ2FwYWJpbGl0aWVzIG1heSBjaGFuZ2UgYWZ0ZXIgVExTIHN0YXJ0cyB1cCwgc28gYXNrIGZvciB0aGVtCkBAIC0xMDQzLDExICsxMDQxLDE4IEBACiAgICAgICAgIHNlbGYuaG9zdCA9IGhvc3QKICAgICAgICAgc2VsZi5wb3J0ID0gcG9ydAogICAgICAgICBzZWxmLnNvY2sgPSBzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb24oKGhvc3QsIHBvcnQpLCB0aW1lb3V0KQotICAgICAgICBmaWxlID0gc2VsZi5zb2NrLm1ha2VmaWxlKCJyd2IiKQotICAgICAgICBfTk5UUEJhc2UuX19pbml0X18oc2VsZiwgZmlsZSwgaG9zdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlcm1vZGUsIHRpbWVvdXQpCi0gICAgICAgIGlmIHVzZXIgb3IgdXNlbmV0cmM6Ci0gICAgICAgICAgICBzZWxmLmxvZ2luKHVzZXIsIHBhc3N3b3JkLCB1c2VuZXRyYykKKyAgICAgICAgZmlsZSA9IE5vbmUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZmlsZSA9IHNlbGYuc29jay5tYWtlZmlsZSgicndiIikKKyAgICAgICAgICAgIF9OTlRQQmFzZS5fX2luaXRfXyhzZWxmLCBmaWxlLCBob3N0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlcm1vZGUsIHRpbWVvdXQpCisgICAgICAgICAgICBpZiB1c2VyIG9yIHVzZW5ldHJjOgorICAgICAgICAgICAgICAgIHNlbGYubG9naW4odXNlciwgcGFzc3dvcmQsIHVzZW5ldHJjKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBpZiBmaWxlOgorICAgICAgICAgICAgICAgIGZpbGUuY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5zb2NrLmNsb3NlKCkKKyAgICAgICAgICAgIHJhaXNlCiAKICAgICBkZWYgX2Nsb3NlKHNlbGYpOgogICAgICAgICB0cnk6CkBAIC0xMDY3LDEyICsxMDcyLDE5IEBACiAgICAgICAgICAgICBpbiBkZWZhdWx0IHBvcnQgYW5kIHRoZSBgc3NsX2NvbnRleHRgIGFyZ3VtZW50IGZvciBTU0wgY29ubmVjdGlvbnMuCiAgICAgICAgICAgICAiIiIKICAgICAgICAgICAgIHNlbGYuc29jayA9IHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbigoaG9zdCwgcG9ydCksIHRpbWVvdXQpCi0gICAgICAgICAgICBzZWxmLnNvY2sgPSBfZW5jcnlwdF9vbihzZWxmLnNvY2ssIHNzbF9jb250ZXh0KQotICAgICAgICAgICAgZmlsZSA9IHNlbGYuc29jay5tYWtlZmlsZSgicndiIikKLSAgICAgICAgICAgIF9OTlRQQmFzZS5fX2luaXRfXyhzZWxmLCBmaWxlLCBob3N0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlcm1vZGU9cmVhZGVybW9kZSwgdGltZW91dD10aW1lb3V0KQotICAgICAgICAgICAgaWYgdXNlciBvciB1c2VuZXRyYzoKLSAgICAgICAgICAgICAgICBzZWxmLmxvZ2luKHVzZXIsIHBhc3N3b3JkLCB1c2VuZXRyYykKKyAgICAgICAgICAgIGZpbGUgPSBOb25lCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5zb2NrID0gX2VuY3J5cHRfb24oc2VsZi5zb2NrLCBzc2xfY29udGV4dCwgaG9zdCkKKyAgICAgICAgICAgICAgICBmaWxlID0gc2VsZi5zb2NrLm1ha2VmaWxlKCJyd2IiKQorICAgICAgICAgICAgICAgIF9OTlRQQmFzZS5fX2luaXRfXyhzZWxmLCBmaWxlLCBob3N0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXJtb2RlPXJlYWRlcm1vZGUsIHRpbWVvdXQ9dGltZW91dCkKKyAgICAgICAgICAgICAgICBpZiB1c2VyIG9yIHVzZW5ldHJjOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZ2luKHVzZXIsIHBhc3N3b3JkLCB1c2VuZXRyYykKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBpZiBmaWxlOgorICAgICAgICAgICAgICAgICAgICBmaWxlLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBzZWxmLnNvY2suY2xvc2UoKQorICAgICAgICAgICAgICAgIHJhaXNlCiAKICAgICAgICAgZGVmIF9jbG9zZShzZWxmKToKICAgICAgICAgICAgIHRyeToKQEAgLTEwODYsNyArMTA5OCw2IEBACiAjIFRlc3QgcmV0cmlldmFsIHdoZW4gcnVuIGFzIGEgc2NyaXB0LgogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICBpbXBvcnQgYXJncGFyc2UKLSAgICBmcm9tIGVtYWlsLnV0aWxzIGltcG9ydCBwYXJzZWRhdGUKIAogICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKGRlc2NyaXB0aW9uPSIiIlwKICAgICAgICAgbm50cGxpYiBidWlsdC1pbiBkZW1vIC0gZGlzcGxheSB0aGUgbGF0ZXN0IGFydGljbGVzIGluIGEgbmV3c2dyb3VwIiIiKQpkaWZmIC0tZ2l0IGEvTGliL250cGF0aC5weSBiL0xpYi9udHBhdGgucHkKaW5kZXggMzAzZTU4Ni4uOTkyOTcwYSAxMDA2NDQKLS0tIGEvTGliL250cGF0aC5weQorKysgYi9MaWIvbnRwYXRoLnB5CkBAIC0xNyw3ICsxNyw3IEBACiAgICAgICAgICAgICJpc21vdW50IiwgImV4cGFuZHVzZXIiLCJleHBhbmR2YXJzIiwibm9ybXBhdGgiLCJhYnNwYXRoIiwKICAgICAgICAgICAgInNwbGl0dW5jIiwiY3VyZGlyIiwicGFyZGlyIiwic2VwIiwicGF0aHNlcCIsImRlZnBhdGgiLCJhbHRzZXAiLAogICAgICAgICAgICAiZXh0c2VwIiwiZGV2bnVsbCIsInJlYWxwYXRoIiwic3VwcG9ydHNfdW5pY29kZV9maWxlbmFtZXMiLCJyZWxwYXRoIiwKLSAgICAgICAgICAgInNhbWVmaWxlIiwgInNhbWVvcGVuZmlsZSIsXQorICAgICAgICAgICAic2FtZWZpbGUiLCAic2FtZW9wZW5maWxlIiwgInNhbWVzdGF0IixdCiAKICMgc3RyaW5ncyByZXByZXNlbnRpbmcgdmFyaW91cyBwYXRoLXJlbGF0ZWQgYml0cyBhbmQgcGllY2VzCiAjIFRoZXNlIGFyZSBwcmltYXJpbHkgZm9yIGV4cG9ydDsgaW50ZXJuYWxseSwgdGhleSBhcmUgaGFyZGNvZGVkLgpAQCAtMzAsOSArMzAsNiBAQAogZGVmcGF0aCA9ICcuO0M6XFxiaW4nCiBpZiAnY2UnIGluIHN5cy5idWlsdGluX21vZHVsZV9uYW1lczoKICAgICBkZWZwYXRoID0gJ1xcV2luZG93cycKLWVsaWYgJ29zMicgaW4gc3lzLmJ1aWx0aW5fbW9kdWxlX25hbWVzOgotICAgICMgT1MvMiB3LyBWQUNQUAotICAgIGFsdHNlcCA9ICcvJwogZGV2bnVsbCA9ICdudWwnCiAKIGRlZiBfZ2V0X2VtcHR5KHBhdGgpOgpAQCAtMjYwLDEyICsyNTcsMTEgQEAKIAogZGVmIGlzbGluayhwYXRoKToKICAgICAiIiJUZXN0IHdoZXRoZXIgYSBwYXRoIGlzIGEgc3ltYm9saWMgbGluay4KLSAgICBUaGlzIHdpbGwgYWx3YXlzIHJldHVybiBmYWxzZSBmb3IgV2luZG93cyBwcmlvciB0byA2LjAKLSAgICBhbmQgZm9yIE9TLzIuCisgICAgVGhpcyB3aWxsIGFsd2F5cyByZXR1cm4gZmFsc2UgZm9yIFdpbmRvd3MgcHJpb3IgdG8gNi4wLgogICAgICIiIgogICAgIHRyeToKICAgICAgICAgc3QgPSBvcy5sc3RhdChwYXRoKQotICAgIGV4Y2VwdCAob3MuZXJyb3IsIEF0dHJpYnV0ZUVycm9yKToKKyAgICBleGNlcHQgKE9TRXJyb3IsIEF0dHJpYnV0ZUVycm9yKToKICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgcmV0dXJuIHN0YXQuU19JU0xOSyhzdC5zdF9tb2RlKQogCkBAIC0yNzUsMjAgKzI3MSwzOSBAQAogICAgICIiIlRlc3Qgd2hldGhlciBhIHBhdGggZXhpc3RzLiAgUmV0dXJucyBUcnVlIGZvciBicm9rZW4gc3ltYm9saWMgbGlua3MiIiIKICAgICB0cnk6CiAgICAgICAgIHN0ID0gb3MubHN0YXQocGF0aCkKLSAgICBleGNlcHQgKG9zLmVycm9yLCBXaW5kb3dzRXJyb3IpOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICByZXR1cm4gRmFsc2UKICAgICByZXR1cm4gVHJ1ZQogCi0jIElzIGEgcGF0aCBhIG1vdW50IHBvaW50PyAgRWl0aGVyIGEgcm9vdCAod2l0aCBvciB3aXRob3V0IGRyaXZlIGxldHRlcikKLSMgb3IgYW4gVU5DIHBhdGggd2l0aCBhdCBtb3N0IGEgLyBvciBcIGFmdGVyIHRoZSBtb3VudCBwb2ludC4KLQorIyBJcyBhIHBhdGggYSBtb3VudCBwb2ludD8KKyMgQW55IGRyaXZlIGxldHRlciByb290IChlZyBjOlwpCisjIEFueSBzaGFyZSBVTkMgKGVnIFxcc2VydmVyXHNoYXJlKQorIyBBbnkgdm9sdW1lIG1vdW50ZWQgb24gYSBmaWxlc3lzdGVtIGZvbGRlcgorIworIyBObyBvbmUgbWV0aG9kIGRldGVjdHMgYWxsIHRocmVlIHNpdHVhdGlvbnMuIEhpc3RvcmljYWxseSB3ZSd2ZSBsZXhpY2FsbHkKKyMgZGV0ZWN0ZWQgZHJpdmUgbGV0dGVyIHJvb3RzIGFuZCBzaGFyZSBVTkNzLiBUaGUgY2Fub25pY2FsIGFwcHJvYWNoIHRvCisjIGRldGVjdGluZyBtb3VudGVkIHZvbHVtZXMgKHF1ZXJ5aW5nIHRoZSByZXBhcnNlIHRhZykgZmFpbHMgZm9yIHRoZSBtb3N0CisjIGNvbW1vbiBjYXNlOiBkcml2ZSBsZXR0ZXIgcm9vdHMuIFRoZSBhbHRlcm5hdGl2ZSB3aGljaCB1c2VzIEdldFZvbHVtZVBhdGhOYW1lCisjIGZhaWxzIGlmIHRoZSBkcml2ZSBsZXR0ZXIgaXMgdGhlIHJlc3VsdCBvZiBhIFNVQlNULgordHJ5OgorICAgIGZyb20gbnQgaW1wb3J0IF9nZXR2b2x1bWVwYXRobmFtZQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIF9nZXR2b2x1bWVwYXRobmFtZSA9IE5vbmUKIGRlZiBpc21vdW50KHBhdGgpOgotICAgICIiIlRlc3Qgd2hldGhlciBhIHBhdGggaXMgYSBtb3VudCBwb2ludCAoZGVmaW5lZCBhcyByb290IG9mIGRyaXZlKSIiIgorICAgICIiIlRlc3Qgd2hldGhlciBhIHBhdGggaXMgYSBtb3VudCBwb2ludCAoYSBkcml2ZSByb290LCB0aGUgcm9vdCBvZiBhCisgICAgc2hhcmUsIG9yIGEgbW91bnRlZCB2b2x1bWUpIiIiCiAgICAgc2VwcyA9IF9nZXRfYm90aHNlcHMocGF0aCkKKyAgICBwYXRoID0gYWJzcGF0aChwYXRoKQogICAgIHJvb3QsIHJlc3QgPSBzcGxpdGRyaXZlKHBhdGgpCiAgICAgaWYgcm9vdCBhbmQgcm9vdFswXSBpbiBzZXBzOgogICAgICAgICByZXR1cm4gKG5vdCByZXN0KSBvciAocmVzdCBpbiBzZXBzKQotICAgIHJldHVybiByZXN0IGluIHNlcHMKKyAgICBpZiByZXN0IGluIHNlcHM6CisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBpZiBfZ2V0dm9sdW1lcGF0aG5hbWU6CisgICAgICAgIHJldHVybiBwYXRoLnJzdHJpcChzZXBzKSA9PSBfZ2V0dm9sdW1lcGF0aG5hbWUocGF0aCkucnN0cmlwKHNlcHMpCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIEZhbHNlCiAKIAogIyBFeHBhbmQgcGF0aHMgYmVnaW5uaW5nIHdpdGggJ34nIG9yICd+dXNlcicuCkBAIC0zODUsNyArNDAwLDcgQEAKICAgICAgICAgICAgICAgICBpbmRleCA9IHBhdGguaW5kZXgoYykKICAgICAgICAgICAgICAgICByZXMgKz0gYyArIHBhdGhbOmluZGV4ICsgMV0KICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgotICAgICAgICAgICAgICAgIHJlcyArPSBwYXRoCisgICAgICAgICAgICAgICAgcmVzICs9IGMgKyBwYXRoCiAgICAgICAgICAgICAgICAgaW5kZXggPSBwYXRobGVuIC0gMQogICAgICAgICBlbGlmIGMgPT0gcGVyY2VudDogICMgdmFyaWFibGUgb3IgJyUnCiAgICAgICAgICAgICBpZiBwYXRoW2luZGV4ICsgMTppbmRleCArIDJdID09IHBlcmNlbnQ6CkBAIC01MzAsNyArNTQ1LDcgQEAKICAgICAgICAgaWYgcGF0aDogIyBFbXB0eSBwYXRoIG11c3QgcmV0dXJuIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgcGF0aCA9IF9nZXRmdWxscGF0aG5hbWUocGF0aCkKLSAgICAgICAgICAgIGV4Y2VwdCBXaW5kb3dzRXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICBwYXNzICMgQmFkIHBhdGggLSByZXR1cm4gdW5jaGFuZ2VkLgogICAgICAgICBlbGlmIGlzaW5zdGFuY2UocGF0aCwgYnl0ZXMpOgogICAgICAgICAgICAgcGF0aCA9IG9zLmdldGN3ZGIoKQpAQCAtNTk4LDIzICs2MTMsNiBAQAogICAgIGRlZiBfZ2V0ZmluYWxwYXRobmFtZShmKToKICAgICAgICAgcmV0dXJuIG5vcm1jYXNlKGFic3BhdGgoZikpCiAKLWRlZiBzYW1lZmlsZShmMSwgZjIpOgotICAgICJUZXN0IHdoZXRoZXIgdHdvIHBhdGhuYW1lcyByZWZlcmVuY2UgdGhlIHNhbWUgYWN0dWFsIGZpbGUiCi0gICAgcmV0dXJuIF9nZXRmaW5hbHBhdGhuYW1lKGYxKSA9PSBfZ2V0ZmluYWxwYXRobmFtZShmMikKLQotCi10cnk6Ci0gICAgZnJvbSBudCBpbXBvcnQgX2dldGZpbGVpbmZvcm1hdGlvbgotZXhjZXB0IEltcG9ydEVycm9yOgotICAgICMgT24gb3RoZXIgb3BlcmF0aW5nIHN5c3RlbXMsIGp1c3QgcmV0dXJuIHRoZSBmZCBhbmQgc2VlIHRoYXQKLSAgICAjIGl0IGNvbXBhcmVzIGVxdWFsIGluIHNhbWVvcGVuZmlsZS4KLSAgICBkZWYgX2dldGZpbGVpbmZvcm1hdGlvbihmZCk6Ci0gICAgICAgIHJldHVybiBmZAotCi1kZWYgc2FtZW9wZW5maWxlKGYxLCBmMik6Ci0gICAgIiIiVGVzdCB3aGV0aGVyIHR3byBmaWxlIG9iamVjdHMgcmVmZXJlbmNlIHRoZSBzYW1lIGZpbGUiIiIKLSAgICByZXR1cm4gX2dldGZpbGVpbmZvcm1hdGlvbihmMSkgPT0gX2dldGZpbGVpbmZvcm1hdGlvbihmMikKLQogCiB0cnk6CiAgICAgIyBUaGUgZ2VuZXJpY3BhdGguaXNkaXIgaW1wbGVtZW50YXRpb24gdXNlcyBvcy5zdGF0IGFuZCBjaGVja3MgdGhlIG1vZGUKZGlmZiAtLWdpdCBhL0xpYi9udHVybDJwYXRoLnB5IGIvTGliL250dXJsMnBhdGgucHkKaW5kZXggNTExZGNlYy4uMzZkYzc2NSAxMDA2NDQKLS0tIGEvTGliL250dXJsMnBhdGgucHkKKysrIGIvTGliL250dXJsMnBhdGgucHkKQEAgLTQsOSArNCwxMSBAQAogICAgICIiIk9TLXNwZWNpZmljIGNvbnZlcnNpb24gZnJvbSBhIHJlbGF0aXZlIFVSTCBvZiB0aGUgJ2ZpbGUnIHNjaGVtZQogICAgIHRvIGEgZmlsZSBzeXN0ZW0gcGF0aDsgbm90IHJlY29tbWVuZGVkIGZvciBnZW5lcmFsIHVzZS4iIiIKICAgICAjIGUuZy4KLSAgICAjIC8vL0N8L2Zvby9iYXIvc3BhbS5mb28KLSAgICAjIGJlY29tZXMKLSAgICAjIEM6XGZvb1xiYXJcc3BhbS5mb28KKyAgICAjICAgLy8vQ3wvZm9vL2Jhci9zcGFtLmZvbworICAgICMgYW5kCisgICAgIyAgIC8vL0M6L2Zvby9iYXIvc3BhbS5mb28KKyAgICAjIGJlY29tZQorICAgICMgICBDOlxmb29cYmFyXHNwYW0uZm9vCiAgICAgaW1wb3J0IHN0cmluZywgdXJsbGliLnBhcnNlCiAgICAgIyBXaW5kb3dzIGl0c2VsZiB1c2VzICI6IiBldmVuIGluIFVSTHMuCiAgICAgdXJsID0gdXJsLnJlcGxhY2UoJzonLCAnfCcpCkBAIC0yMyw3ICsyNSw3IEBACiAgICAgY29tcCA9IHVybC5zcGxpdCgnfCcpCiAgICAgaWYgbGVuKGNvbXApICE9IDIgb3IgY29tcFswXVstMV0gbm90IGluIHN0cmluZy5hc2NpaV9sZXR0ZXJzOgogICAgICAgICBlcnJvciA9ICdCYWQgVVJMOiAnICsgdXJsCi0gICAgICAgIHJhaXNlIElPRXJyb3IoZXJyb3IpCisgICAgICAgIHJhaXNlIE9TRXJyb3IoZXJyb3IpCiAgICAgZHJpdmUgPSBjb21wWzBdWy0xXS51cHBlcigpCiAgICAgY29tcG9uZW50cyA9IGNvbXBbMV0uc3BsaXQoJy8nKQogICAgIHBhdGggPSBkcml2ZSArICc6JwpAQCAtMzksOSArNDEsOSBAQAogICAgICIiIk9TLXNwZWNpZmljIGNvbnZlcnNpb24gZnJvbSBhIGZpbGUgc3lzdGVtIHBhdGggdG8gYSByZWxhdGl2ZSBVUkwKICAgICBvZiB0aGUgJ2ZpbGUnIHNjaGVtZTsgbm90IHJlY29tbWVuZGVkIGZvciBnZW5lcmFsIHVzZS4iIiIKICAgICAjIGUuZy4KLSAgICAjIEM6XGZvb1xiYXJcc3BhbS5mb28KKyAgICAjICAgQzpcZm9vXGJhclxzcGFtLmZvbwogICAgICMgYmVjb21lcwotICAgICMgLy8vQ3wvZm9vL2Jhci9zcGFtLmZvbworICAgICMgICAvLy9DOi9mb28vYmFyL3NwYW0uZm9vCiAgICAgaW1wb3J0IHVybGxpYi5wYXJzZQogICAgIGlmIG5vdCAnOicgaW4gcDoKICAgICAgICAgIyBObyBkcml2ZSBzcGVjaWZpZXIsIGp1c3QgY29udmVydCBzbGFzaGVzIGFuZCBxdW90ZSB0aGUgbmFtZQpAQCAtNTUsNyArNTcsNyBAQAogICAgIGNvbXAgPSBwLnNwbGl0KCc6JykKICAgICBpZiBsZW4oY29tcCkgIT0gMiBvciBsZW4oY29tcFswXSkgPiAxOgogICAgICAgICBlcnJvciA9ICdCYWQgcGF0aDogJyArIHAKLSAgICAgICAgcmFpc2UgSU9FcnJvcihlcnJvcikKKyAgICAgICAgcmFpc2UgT1NFcnJvcihlcnJvcikKIAogICAgIGRyaXZlID0gdXJsbGliLnBhcnNlLnF1b3RlKGNvbXBbMF0udXBwZXIoKSkKICAgICBjb21wb25lbnRzID0gY29tcFsxXS5zcGxpdCgnXFwnKQpkaWZmIC0tZ2l0IGEvTGliL251bWJlcnMucHkgYi9MaWIvbnVtYmVycy5weQppbmRleCBiMjA2NDU3Li43ZWVkYzYzIDEwMDY0NAotLS0gYS9MaWIvbnVtYmVycy5weQorKysgYi9MaWIvbnVtYmVycy5weQpAQCAtMTQxLDExICsxNDEsNiBAQAogICAgICAgICAiIiJzZWxmID09IG90aGVyIiIiCiAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKIAotICAgIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgotICAgICAgICAiIiJzZWxmICE9IG90aGVyIiIiCi0gICAgICAgICMgVGhlIGRlZmF1bHQgX19uZV9fIGRvZXNuJ3QgbmVnYXRlIF9fZXFfXyB1bnRpbCAzLjAuCi0gICAgICAgIHJldHVybiBub3QgKHNlbGYgPT0gb3RoZXIpCi0KIENvbXBsZXgucmVnaXN0ZXIoY29tcGxleCkKIAogCmRpZmYgLS1naXQgYS9MaWIvb3Bjb2RlLnB5IGIvTGliL29wY29kZS5weQppbmRleCBhNjM5ZmUzLi4wYmQxZWU2IDEwMDY0NAotLS0gYS9MaWIvb3Bjb2RlLnB5CisrKyBiL0xpYi9vcGNvZGUucHkKQEAgLTgsNiArOCwxOSBAQAogICAgICAgICAgICAiaGFzbG9jYWwiLCAiaGFzY29tcGFyZSIsICJoYXNmcmVlIiwgIm9wbmFtZSIsICJvcG1hcCIsCiAgICAgICAgICAgICJIQVZFX0FSR1VNRU5UIiwgIkVYVEVOREVEX0FSRyIsICJoYXNuYXJncyJdCiAKKyMgSXQncyBhIGNoaWNrZW4tYW5kLWVnZyBJJ20gYWZyYWlkOgorIyBXZSdyZSBpbXBvcnRlZCBiZWZvcmUgX29wY29kZSdzIG1hZGUuCisjIFdpdGggZXhjZXB0aW9uIHVuaGVlZGVkCisjIChzdGFja19lZmZlY3QgaXMgbm90IG5lZWRlZCkKKyMgQm90aCBvdXIgY2hpY2tlbnMgYW5kIGVnZ3MgYXJlIGFsbGF5ZWQuCisjICAgICAtLUxhcnJ5IEhhc3RpbmdzLCAyMDEzLzExLzIzCisKK3RyeToKKyAgICBmcm9tIF9vcGNvZGUgaW1wb3J0IHN0YWNrX2VmZmVjdAorICAgIF9fYWxsX18uYXBwZW5kKCdzdGFja19lZmZlY3QnKQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHBhc3MKKwogY21wX29wID0gKCc8JywgJzw9JywgJz09JywgJyE9JywgJz4nLCAnPj0nLCAnaW4nLCAnbm90IGluJywgJ2lzJywKICAgICAgICAgJ2lzIG5vdCcsICdleGNlcHRpb24gbWF0Y2gnLCAnQkFEJykKIApAQCAtODQsNyArOTcsNiBAQAogZGVmX29wKCdCSU5BUllfT1InLCA2NikKIGRlZl9vcCgnSU5QTEFDRV9QT1dFUicsIDY3KQogZGVmX29wKCdHRVRfSVRFUicsIDY4KQotZGVmX29wKCdTVE9SRV9MT0NBTFMnLCA2OSkKIAogZGVmX29wKCdQUklOVF9FWFBSJywgNzApCiBkZWZfb3AoJ0xPQURfQlVJTERfQ0xBU1MnLCA3MSkKQEAgLTE3OSw2ICsxOTEsOSBAQAogZGVmX29wKCdTRVRfQUREJywgMTQ2KQogZGVmX29wKCdNQVBfQUREJywgMTQ3KQogCitkZWZfb3AoJ0xPQURfQ0xBU1NERVJFRicsIDE0OCkKK2hhc2ZyZWUuYXBwZW5kKDE0OCkKKwogZGVmX29wKCdFWFRFTkRFRF9BUkcnLCAxNDQpCiBFWFRFTkRFRF9BUkcgPSAxNDQKIApkaWZmIC0tZ2l0IGEvTGliL29wZXJhdG9yLnB5IGIvTGliL29wZXJhdG9yLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2MDM0OWYKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvb3BlcmF0b3IucHkKQEAgLTAsMCArMSw0MTEgQEAKKyIiIgorT3BlcmF0b3IgSW50ZXJmYWNlCisKK1RoaXMgbW9kdWxlIGV4cG9ydHMgYSBzZXQgb2YgZnVuY3Rpb25zIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGludHJpbnNpYworb3BlcmF0b3JzIG9mIFB5dGhvbi4gIEZvciBleGFtcGxlLCBvcGVyYXRvci5hZGQoeCwgeSkgaXMgZXF1aXZhbGVudAordG8gdGhlIGV4cHJlc3Npb24geCt5LiAgVGhlIGZ1bmN0aW9uIG5hbWVzIGFyZSB0aG9zZSB1c2VkIGZvciBzcGVjaWFsCittZXRob2RzOyB2YXJpYW50cyB3aXRob3V0IGxlYWRpbmcgYW5kIHRyYWlsaW5nICdfXycgYXJlIGFsc28gcHJvdmlkZWQKK2ZvciBjb252ZW5pZW5jZS4KKworVGhpcyBpcyB0aGUgcHVyZSBQeXRob24gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZHVsZS4KKyIiIgorCitfX2FsbF9fID0gWydhYnMnLCAnYWRkJywgJ2FuZF8nLCAnYXR0cmdldHRlcicsICdjb25jYXQnLCAnY29udGFpbnMnLCAnY291bnRPZicsCisgICAgICAgICAgICdkZWxpdGVtJywgJ2VxJywgJ2Zsb29yZGl2JywgJ2dlJywgJ2dldGl0ZW0nLCAnZ3QnLCAnaWFkZCcsICdpYW5kJywKKyAgICAgICAgICAgJ2ljb25jYXQnLCAnaWZsb29yZGl2JywgJ2lsc2hpZnQnLCAnaW1vZCcsICdpbXVsJywgJ2luZGV4JywKKyAgICAgICAgICAgJ2luZGV4T2YnLCAnaW52JywgJ2ludmVydCcsICdpb3InLCAnaXBvdycsICdpcnNoaWZ0JywgJ2lzXycsCisgICAgICAgICAgICdpc19ub3QnLCAnaXN1YicsICdpdGVtZ2V0dGVyJywgJ2l0cnVlZGl2JywgJ2l4b3InLCAnbGUnLAorICAgICAgICAgICAnbGVuZ3RoX2hpbnQnLCAnbHNoaWZ0JywgJ2x0JywgJ21ldGhvZGNhbGxlcicsICdtb2QnLCAnbXVsJywgJ25lJywKKyAgICAgICAgICAgJ25lZycsICdub3RfJywgJ29yXycsICdwb3MnLCAncG93JywgJ3JzaGlmdCcsICdzZXRpdGVtJywgJ3N1YicsCisgICAgICAgICAgICd0cnVlZGl2JywgJ3RydXRoJywgJ3hvciddCisKK2Zyb20gYnVpbHRpbnMgaW1wb3J0IGFicyBhcyBfYWJzCisKKworIyBDb21wYXJpc29uIE9wZXJhdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiMKKworZGVmIGx0KGEsIGIpOgorICAgICJTYW1lIGFzIGEgPCBiLiIKKyAgICByZXR1cm4gYSA8IGIKKworZGVmIGxlKGEsIGIpOgorICAgICJTYW1lIGFzIGEgPD0gYi4iCisgICAgcmV0dXJuIGEgPD0gYgorCitkZWYgZXEoYSwgYik6CisgICAgIlNhbWUgYXMgYSA9PSBiLiIKKyAgICByZXR1cm4gYSA9PSBiCisKK2RlZiBuZShhLCBiKToKKyAgICAiU2FtZSBhcyBhICE9IGIuIgorICAgIHJldHVybiBhICE9IGIKKworZGVmIGdlKGEsIGIpOgorICAgICJTYW1lIGFzIGEgPj0gYi4iCisgICAgcmV0dXJuIGEgPj0gYgorCitkZWYgZ3QoYSwgYik6CisgICAgIlNhbWUgYXMgYSA+IGIuIgorICAgIHJldHVybiBhID4gYgorCisjIExvZ2ljYWwgT3BlcmF0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIworCitkZWYgbm90XyhhKToKKyAgICAiU2FtZSBhcyBub3QgYS4iCisgICAgcmV0dXJuIG5vdCBhCisKK2RlZiB0cnV0aChhKToKKyAgICAiUmV0dXJuIFRydWUgaWYgYSBpcyB0cnVlLCBGYWxzZSBvdGhlcndpc2UuIgorICAgIHJldHVybiBUcnVlIGlmIGEgZWxzZSBGYWxzZQorCitkZWYgaXNfKGEsIGIpOgorICAgICJTYW1lIGFzIGEgaXMgYi4iCisgICAgcmV0dXJuIGEgaXMgYgorCitkZWYgaXNfbm90KGEsIGIpOgorICAgICJTYW1lIGFzIGEgaXMgbm90IGIuIgorICAgIHJldHVybiBhIGlzIG5vdCBiCisKKyMgTWF0aGVtYXRpY2FsL0JpdHdpc2UgT3BlcmF0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiojCisKK2RlZiBhYnMoYSk6CisgICAgIlNhbWUgYXMgYWJzKGEpLiIKKyAgICByZXR1cm4gX2FicyhhKQorCitkZWYgYWRkKGEsIGIpOgorICAgICJTYW1lIGFzIGEgKyBiLiIKKyAgICByZXR1cm4gYSArIGIKKworZGVmIGFuZF8oYSwgYik6CisgICAgIlNhbWUgYXMgYSAmIGIuIgorICAgIHJldHVybiBhICYgYgorCitkZWYgZmxvb3JkaXYoYSwgYik6CisgICAgIlNhbWUgYXMgYSAvLyBiLiIKKyAgICByZXR1cm4gYSAvLyBiCisKK2RlZiBpbmRleChhKToKKyAgICAiU2FtZSBhcyBhLl9faW5kZXhfXygpLiIKKyAgICByZXR1cm4gYS5fX2luZGV4X18oKQorCitkZWYgaW52KGEpOgorICAgICJTYW1lIGFzIH5hLiIKKyAgICByZXR1cm4gfmEKK2ludmVydCA9IGludgorCitkZWYgbHNoaWZ0KGEsIGIpOgorICAgICJTYW1lIGFzIGEgPDwgYi4iCisgICAgcmV0dXJuIGEgPDwgYgorCitkZWYgbW9kKGEsIGIpOgorICAgICJTYW1lIGFzIGEgJSBiLiIKKyAgICByZXR1cm4gYSAlIGIKKworZGVmIG11bChhLCBiKToKKyAgICAiU2FtZSBhcyBhICogYi4iCisgICAgcmV0dXJuIGEgKiBiCisKK2RlZiBuZWcoYSk6CisgICAgIlNhbWUgYXMgLWEuIgorICAgIHJldHVybiAtYQorCitkZWYgb3JfKGEsIGIpOgorICAgICJTYW1lIGFzIGEgfCBiLiIKKyAgICByZXR1cm4gYSB8IGIKKworZGVmIHBvcyhhKToKKyAgICAiU2FtZSBhcyArYS4iCisgICAgcmV0dXJuICthCisKK2RlZiBwb3coYSwgYik6CisgICAgIlNhbWUgYXMgYSAqKiBiLiIKKyAgICByZXR1cm4gYSAqKiBiCisKK2RlZiByc2hpZnQoYSwgYik6CisgICAgIlNhbWUgYXMgYSA+PiBiLiIKKyAgICByZXR1cm4gYSA+PiBiCisKK2RlZiBzdWIoYSwgYik6CisgICAgIlNhbWUgYXMgYSAtIGIuIgorICAgIHJldHVybiBhIC0gYgorCitkZWYgdHJ1ZWRpdihhLCBiKToKKyAgICAiU2FtZSBhcyBhIC8gYi4iCisgICAgcmV0dXJuIGEgLyBiCisKK2RlZiB4b3IoYSwgYik6CisgICAgIlNhbWUgYXMgYSBeIGIuIgorICAgIHJldHVybiBhIF4gYgorCisjIFNlcXVlbmNlIE9wZXJhdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIworCitkZWYgY29uY2F0KGEsIGIpOgorICAgICJTYW1lIGFzIGEgKyBiLCBmb3IgYSBhbmQgYiBzZXF1ZW5jZXMuIgorICAgIGlmIG5vdCBoYXNhdHRyKGEsICdfX2dldGl0ZW1fXycpOgorICAgICAgICBtc2cgPSAiJyVzJyBvYmplY3QgY2FuJ3QgYmUgY29uY2F0ZW5hdGVkIiAlIHR5cGUoYSkuX19uYW1lX18KKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKG1zZykKKyAgICByZXR1cm4gYSArIGIKKworZGVmIGNvbnRhaW5zKGEsIGIpOgorICAgICJTYW1lIGFzIGIgaW4gYSAobm90ZSByZXZlcnNlZCBvcGVyYW5kcykuIgorICAgIHJldHVybiBiIGluIGEKKworZGVmIGNvdW50T2YoYSwgYik6CisgICAgIlJldHVybiB0aGUgbnVtYmVyIG9mIHRpbWVzIGIgb2NjdXJzIGluIGEuIgorICAgIGNvdW50ID0gMAorICAgIGZvciBpIGluIGE6CisgICAgICAgIGlmIGkgPT0gYjoKKyAgICAgICAgICAgIGNvdW50ICs9IDEKKyAgICByZXR1cm4gY291bnQKKworZGVmIGRlbGl0ZW0oYSwgYik6CisgICAgIlNhbWUgYXMgZGVsIGFbYl0uIgorICAgIGRlbCBhW2JdCisKK2RlZiBnZXRpdGVtKGEsIGIpOgorICAgICJTYW1lIGFzIGFbYl0uIgorICAgIHJldHVybiBhW2JdCisKK2RlZiBpbmRleE9mKGEsIGIpOgorICAgICJSZXR1cm4gdGhlIGZpcnN0IGluZGV4IG9mIGIgaW4gYS4iCisgICAgZm9yIGksIGogaW4gZW51bWVyYXRlKGEpOgorICAgICAgICBpZiBqID09IGI6CisgICAgICAgICAgICByZXR1cm4gaQorICAgIGVsc2U6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3NlcXVlbmNlLmluZGV4KHgpOiB4IG5vdCBpbiBzZXF1ZW5jZScpCisKK2RlZiBzZXRpdGVtKGEsIGIsIGMpOgorICAgICJTYW1lIGFzIGFbYl0gPSBjLiIKKyAgICBhW2JdID0gYworCitkZWYgbGVuZ3RoX2hpbnQob2JqLCBkZWZhdWx0PTApOgorICAgICIiIgorICAgIFJldHVybiBhbiBlc3RpbWF0ZSBvZiB0aGUgbnVtYmVyIG9mIGl0ZW1zIGluIG9iai4KKyAgICBUaGlzIGlzIHVzZWZ1bCBmb3IgcHJlc2l6aW5nIGNvbnRhaW5lcnMgd2hlbiBidWlsZGluZyBmcm9tIGFuIGl0ZXJhYmxlLgorCisgICAgSWYgdGhlIG9iamVjdCBzdXBwb3J0cyBsZW4oKSwgdGhlIHJlc3VsdCB3aWxsIGJlIGV4YWN0LiBPdGhlcndpc2UsIGl0IG1heQorICAgIG92ZXItIG9yIHVuZGVyLWVzdGltYXRlIGJ5IGFuIGFyYml0cmFyeSBhbW91bnQuIFRoZSByZXN1bHQgd2lsbCBiZSBhbgorICAgIGludGVnZXIgPj0gMC4KKyAgICAiIiIKKyAgICBpZiBub3QgaXNpbnN0YW5jZShkZWZhdWx0LCBpbnQpOgorICAgICAgICBtc2cgPSAoIiclcycgb2JqZWN0IGNhbm5vdCBiZSBpbnRlcnByZXRlZCBhcyBhbiBpbnRlZ2VyIiAlCisgICAgICAgICAgICAgICB0eXBlKGRlZmF1bHQpLl9fbmFtZV9fKQorICAgICAgICByYWlzZSBUeXBlRXJyb3IobXNnKQorCisgICAgdHJ5OgorICAgICAgICByZXR1cm4gbGVuKG9iaikKKyAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICBwYXNzCisKKyAgICB0cnk6CisgICAgICAgIGhpbnQgPSB0eXBlKG9iaikuX19sZW5ndGhfaGludF9fCisgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICByZXR1cm4gZGVmYXVsdAorCisgICAgdHJ5OgorICAgICAgICB2YWwgPSBoaW50KG9iaikKKyAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICByZXR1cm4gZGVmYXVsdAorICAgIGlmIHZhbCBpcyBOb3RJbXBsZW1lbnRlZDoKKyAgICAgICAgcmV0dXJuIGRlZmF1bHQKKyAgICBpZiBub3QgaXNpbnN0YW5jZSh2YWwsIGludCk6CisgICAgICAgIG1zZyA9ICgnX19sZW5ndGhfaGludF9fIG11c3QgYmUgaW50ZWdlciwgbm90ICVzJyAlCisgICAgICAgICAgICAgICB0eXBlKHZhbCkuX19uYW1lX18pCisgICAgICAgIHJhaXNlIFR5cGVFcnJvcihtc2cpCisgICAgaWYgdmFsIDwgMDoKKyAgICAgICAgbXNnID0gJ19fbGVuZ3RoX2hpbnRfXygpIHNob3VsZCByZXR1cm4gPj0gMCcKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihtc2cpCisgICAgcmV0dXJuIHZhbAorCisjIEdlbmVyYWxpemVkIExvb2t1cCBPYmplY3RzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIworCitjbGFzcyBhdHRyZ2V0dGVyOgorICAgICIiIgorICAgIFJldHVybiBhIGNhbGxhYmxlIG9iamVjdCB0aGF0IGZldGNoZXMgdGhlIGdpdmVuIGF0dHJpYnV0ZShzKSBmcm9tIGl0cyBvcGVyYW5kLgorICAgIEFmdGVyIGYgPSBhdHRyZ2V0dGVyKCduYW1lJyksIHRoZSBjYWxsIGYocikgcmV0dXJucyByLm5hbWUuCisgICAgQWZ0ZXIgZyA9IGF0dHJnZXR0ZXIoJ25hbWUnLCAnZGF0ZScpLCB0aGUgY2FsbCBnKHIpIHJldHVybnMgKHIubmFtZSwgci5kYXRlKS4KKyAgICBBZnRlciBoID0gYXR0cmdldHRlcignbmFtZS5maXJzdCcsICduYW1lLmxhc3QnKSwgdGhlIGNhbGwgaChyKSByZXR1cm5zCisgICAgKHIubmFtZS5maXJzdCwgci5uYW1lLmxhc3QpLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhdHRyLCAqYXR0cnMpOgorICAgICAgICBpZiBub3QgYXR0cnM6CisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShhdHRyLCBzdHIpOgorICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignYXR0cmlidXRlIG5hbWUgbXVzdCBiZSBhIHN0cmluZycpCisgICAgICAgICAgICBuYW1lcyA9IGF0dHIuc3BsaXQoJy4nKQorICAgICAgICAgICAgZGVmIGZ1bmMob2JqKToKKyAgICAgICAgICAgICAgICBmb3IgbmFtZSBpbiBuYW1lczoKKyAgICAgICAgICAgICAgICAgICAgb2JqID0gZ2V0YXR0cihvYmosIG5hbWUpCisgICAgICAgICAgICAgICAgcmV0dXJuIG9iagorICAgICAgICAgICAgc2VsZi5fY2FsbCA9IGZ1bmMKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGdldHRlcnMgPSB0dXBsZShtYXAoYXR0cmdldHRlciwgKGF0dHIsKSArIGF0dHJzKSkKKyAgICAgICAgICAgIGRlZiBmdW5jKG9iaik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHR1cGxlKGdldHRlcihvYmopIGZvciBnZXR0ZXIgaW4gZ2V0dGVycykKKyAgICAgICAgICAgIHNlbGYuX2NhbGwgPSBmdW5jCisKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgb2JqKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2NhbGwob2JqKQorCitjbGFzcyBpdGVtZ2V0dGVyOgorICAgICIiIgorICAgIFJldHVybiBhIGNhbGxhYmxlIG9iamVjdCB0aGF0IGZldGNoZXMgdGhlIGdpdmVuIGl0ZW0ocykgZnJvbSBpdHMgb3BlcmFuZC4KKyAgICBBZnRlciBmID0gaXRlbWdldHRlcigyKSwgdGhlIGNhbGwgZihyKSByZXR1cm5zIHJbMl0uCisgICAgQWZ0ZXIgZyA9IGl0ZW1nZXR0ZXIoMiwgNSwgMyksIHRoZSBjYWxsIGcocikgcmV0dXJucyAoclsyXSwgcls1XSwgclszXSkKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaXRlbSwgKml0ZW1zKToKKyAgICAgICAgaWYgbm90IGl0ZW1zOgorICAgICAgICAgICAgZGVmIGZ1bmMob2JqKToKKyAgICAgICAgICAgICAgICByZXR1cm4gb2JqW2l0ZW1dCisgICAgICAgICAgICBzZWxmLl9jYWxsID0gZnVuYworICAgICAgICBlbHNlOgorICAgICAgICAgICAgaXRlbXMgPSAoaXRlbSwpICsgaXRlbXMKKyAgICAgICAgICAgIGRlZiBmdW5jKG9iaik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHR1cGxlKG9ialtpXSBmb3IgaSBpbiBpdGVtcykKKyAgICAgICAgICAgIHNlbGYuX2NhbGwgPSBmdW5jCisKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgb2JqKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2NhbGwob2JqKQorCitjbGFzcyBtZXRob2RjYWxsZXI6CisgICAgIiIiCisgICAgUmV0dXJuIGEgY2FsbGFibGUgb2JqZWN0IHRoYXQgY2FsbHMgdGhlIGdpdmVuIG1ldGhvZCBvbiBpdHMgb3BlcmFuZC4KKyAgICBBZnRlciBmID0gbWV0aG9kY2FsbGVyKCduYW1lJyksIHRoZSBjYWxsIGYocikgcmV0dXJucyByLm5hbWUoKS4KKyAgICBBZnRlciBnID0gbWV0aG9kY2FsbGVyKCduYW1lJywgJ2RhdGUnLCBmb289MSksIHRoZSBjYWxsIGcocikgcmV0dXJucworICAgIHIubmFtZSgnZGF0ZScsIGZvbz0xKS4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXygqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBpZiBsZW4oYXJncykgPCAyOgorICAgICAgICAgICAgbXNnID0gIm1ldGhvZGNhbGxlciBuZWVkcyBhdCBsZWFzdCBvbmUgYXJndW1lbnQsIHRoZSBtZXRob2QgbmFtZSIKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcihtc2cpCisgICAgICAgIHNlbGYgPSBhcmdzWzBdCisgICAgICAgIHNlbGYuX25hbWUgPSBhcmdzWzFdCisgICAgICAgIHNlbGYuX2FyZ3MgPSBhcmdzWzI6XQorICAgICAgICBzZWxmLl9rd2FyZ3MgPSBrd2FyZ3MKKworICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBvYmopOgorICAgICAgICByZXR1cm4gZ2V0YXR0cihvYmosIHNlbGYuX25hbWUpKCpzZWxmLl9hcmdzLCAqKnNlbGYuX2t3YXJncykKKworIyBJbi1wbGFjZSBPcGVyYXRpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiMKKworZGVmIGlhZGQoYSwgYik6CisgICAgIlNhbWUgYXMgYSArPSBiLiIKKyAgICBhICs9IGIKKyAgICByZXR1cm4gYQorCitkZWYgaWFuZChhLCBiKToKKyAgICAiU2FtZSBhcyBhICY9IGIuIgorICAgIGEgJj0gYgorICAgIHJldHVybiBhCisKK2RlZiBpY29uY2F0KGEsIGIpOgorICAgICJTYW1lIGFzIGEgKz0gYiwgZm9yIGEgYW5kIGIgc2VxdWVuY2VzLiIKKyAgICBpZiBub3QgaGFzYXR0cihhLCAnX19nZXRpdGVtX18nKToKKyAgICAgICAgbXNnID0gIiclcycgb2JqZWN0IGNhbid0IGJlIGNvbmNhdGVuYXRlZCIgJSB0eXBlKGEpLl9fbmFtZV9fCisgICAgICAgIHJhaXNlIFR5cGVFcnJvcihtc2cpCisgICAgYSArPSBiCisgICAgcmV0dXJuIGEKKworZGVmIGlmbG9vcmRpdihhLCBiKToKKyAgICAiU2FtZSBhcyBhIC8vPSBiLiIKKyAgICBhIC8vPSBiCisgICAgcmV0dXJuIGEKKworZGVmIGlsc2hpZnQoYSwgYik6CisgICAgIlNhbWUgYXMgYSA8PD0gYi4iCisgICAgYSA8PD0gYgorICAgIHJldHVybiBhCisKK2RlZiBpbW9kKGEsIGIpOgorICAgICJTYW1lIGFzIGEgJT0gYi4iCisgICAgYSAlPSBiCisgICAgcmV0dXJuIGEKKworZGVmIGltdWwoYSwgYik6CisgICAgIlNhbWUgYXMgYSAqPSBiLiIKKyAgICBhICo9IGIKKyAgICByZXR1cm4gYQorCitkZWYgaW9yKGEsIGIpOgorICAgICJTYW1lIGFzIGEgfD0gYi4iCisgICAgYSB8PSBiCisgICAgcmV0dXJuIGEKKworZGVmIGlwb3coYSwgYik6CisgICAgIlNhbWUgYXMgYSAqKj0gYi4iCisgICAgYSAqKj1iCisgICAgcmV0dXJuIGEKKworZGVmIGlyc2hpZnQoYSwgYik6CisgICAgIlNhbWUgYXMgYSA+Pj0gYi4iCisgICAgYSA+Pj0gYgorICAgIHJldHVybiBhCisKK2RlZiBpc3ViKGEsIGIpOgorICAgICJTYW1lIGFzIGEgLT0gYi4iCisgICAgYSAtPSBiCisgICAgcmV0dXJuIGEKKworZGVmIGl0cnVlZGl2KGEsIGIpOgorICAgICJTYW1lIGFzIGEgLz0gYi4iCisgICAgYSAvPSBiCisgICAgcmV0dXJuIGEKKworZGVmIGl4b3IoYSwgYik6CisgICAgIlNhbWUgYXMgYSBePSBiLiIKKyAgICBhIF49IGIKKyAgICByZXR1cm4gYQorCisKK3RyeToKKyAgICBmcm9tIF9vcGVyYXRvciBpbXBvcnQgKgorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHBhc3MKK2Vsc2U6CisgICAgZnJvbSBfb3BlcmF0b3IgaW1wb3J0IF9fZG9jX18KKworIyBBbGwgb2YgdGhlc2UgIl9fZnVuY19fID0gZnVuYyIgYXNzaWdubWVudHMgaGF2ZSB0byBoYXBwZW4gYWZ0ZXIgaW1wb3J0aW5nCisjIGZyb20gX29wZXJhdG9yIHRvIG1ha2Ugc3VyZSB0aGV5J3JlIHNldCB0byB0aGUgcmlnaHQgZnVuY3Rpb24KK19fbHRfXyA9IGx0CitfX2xlX18gPSBsZQorX19lcV9fID0gZXEKK19fbmVfXyA9IG5lCitfX2dlX18gPSBnZQorX19ndF9fID0gZ3QKK19fbm90X18gPSBub3RfCitfX2Fic19fID0gYWJzCitfX2FkZF9fID0gYWRkCitfX2FuZF9fID0gYW5kXworX19mbG9vcmRpdl9fID0gZmxvb3JkaXYKK19faW5kZXhfXyA9IGluZGV4CitfX2ludl9fID0gaW52CitfX2ludmVydF9fID0gaW52ZXJ0CitfX2xzaGlmdF9fID0gbHNoaWZ0CitfX21vZF9fID0gbW9kCitfX211bF9fID0gbXVsCitfX25lZ19fID0gbmVnCitfX29yX18gPSBvcl8KK19fcG9zX18gPSBwb3MKK19fcG93X18gPSBwb3cKK19fcnNoaWZ0X18gPSByc2hpZnQKK19fc3ViX18gPSBzdWIKK19fdHJ1ZWRpdl9fID0gdHJ1ZWRpdgorX194b3JfXyA9IHhvcgorX19jb25jYXRfXyA9IGNvbmNhdAorX19jb250YWluc19fID0gY29udGFpbnMKK19fZGVsaXRlbV9fID0gZGVsaXRlbQorX19nZXRpdGVtX18gPSBnZXRpdGVtCitfX3NldGl0ZW1fXyA9IHNldGl0ZW0KK19faWFkZF9fID0gaWFkZAorX19pYW5kX18gPSBpYW5kCitfX2ljb25jYXRfXyA9IGljb25jYXQKK19faWZsb29yZGl2X18gPSBpZmxvb3JkaXYKK19faWxzaGlmdF9fID0gaWxzaGlmdAorX19pbW9kX18gPSBpbW9kCitfX2ltdWxfXyA9IGltdWwKK19faW9yX18gPSBpb3IKK19faXBvd19fID0gaXBvdworX19pcnNoaWZ0X18gPSBpcnNoaWZ0CitfX2lzdWJfXyA9IGlzdWIKK19faXRydWVkaXZfXyA9IGl0cnVlZGl2CitfX2l4b3JfXyA9IGl4b3IKZGlmZiAtLWdpdCBhL0xpYi9vcy5weSBiL0xpYi9vcy5weQppbmRleCBiNDJjY2JhLi4yN2IyNDFhIDEwMDY0NAotLS0gYS9MaWIvb3MucHkKKysrIGIvTGliL29zLnB5CkBAIC0xLDkgKzEsOSBAQAotciIiIk9TIHJvdXRpbmVzIGZvciBNYWMsIE5ULCBvciBQb3NpeCBkZXBlbmRpbmcgb24gd2hhdCBzeXN0ZW0gd2UncmUgb24uCityIiIiT1Mgcm91dGluZXMgZm9yIE5UIG9yIFBvc2l4IGRlcGVuZGluZyBvbiB3aGF0IHN5c3RlbSB3ZSdyZSBvbi4KIAogVGhpcyBleHBvcnRzOgotICAtIGFsbCBmdW5jdGlvbnMgZnJvbSBwb3NpeCwgbnQsIG9zMiwgb3IgY2UsIGUuZy4gdW5saW5rLCBzdGF0LCBldGMuCisgIC0gYWxsIGZ1bmN0aW9ucyBmcm9tIHBvc2l4LCBudCBvciBjZSwgZS5nLiB1bmxpbmssIHN0YXQsIGV0Yy4KICAgLSBvcy5wYXRoIGlzIGVpdGhlciBwb3NpeHBhdGggb3IgbnRwYXRoCi0gIC0gb3MubmFtZSBpcyBlaXRoZXIgJ3Bvc2l4JywgJ250JywgJ29zMicgb3IgJ2NlJy4KKyAgLSBvcy5uYW1lIGlzIGVpdGhlciAncG9zaXgnLCAnbnQnIG9yICdjZScuCiAgIC0gb3MuY3VyZGlyIGlzIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgY3VycmVudCBkaXJlY3RvcnkgKCcuJyBvciAnOicpCiAgIC0gb3MucGFyZGlyIGlzIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgcGFyZW50IGRpcmVjdG9yeSAoJy4uJyBvciAnOjonKQogICAtIG9zLnNlcCBpcyB0aGUgKG9yIGEgbW9zdCBjb21tb24pIHBhdGhuYW1lIHNlcGFyYXRvciAoJy8nIG9yICc6JyBvciAnXFwnKQpAQCAtODEsMzAgKzgxLDYgQEAKICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgICAgIHBhc3MKIAotZWxpZiAnb3MyJyBpbiBfbmFtZXM6Ci0gICAgbmFtZSA9ICdvczInCi0gICAgbGluZXNlcCA9ICdcclxuJwotICAgIGZyb20gb3MyIGltcG9ydCAqCi0gICAgdHJ5OgotICAgICAgICBmcm9tIG9zMiBpbXBvcnQgX2V4aXQKLSAgICAgICAgX19hbGxfXy5hcHBlbmQoJ19leGl0JykKLSAgICBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgICAgIHBhc3MKLSAgICBpZiBzeXMudmVyc2lvbi5maW5kKCdFTVggR0NDJykgPT0gLTE6Ci0gICAgICAgIGltcG9ydCBudHBhdGggYXMgcGF0aAotICAgIGVsc2U6Ci0gICAgICAgIGltcG9ydCBvczJlbXhwYXRoIGFzIHBhdGgKLSAgICAgICAgZnJvbSBfZW14X2xpbmsgaW1wb3J0IGxpbmsKLQotICAgIGltcG9ydCBvczIKLSAgICBfX2FsbF9fLmV4dGVuZChfZ2V0X2V4cG9ydHNfbGlzdChvczIpKQotICAgIGRlbCBvczIKLQotICAgIHRyeToKLSAgICAgICAgZnJvbSBvczIgaW1wb3J0IF9oYXZlX2Z1bmN0aW9ucwotICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAgICAgcGFzcwotCiBlbGlmICdjZScgaW4gX25hbWVzOgogICAgIG5hbWUgPSAnY2UnCiAgICAgbGluZXNlcCA9ICdcclxuJwpAQCAtMjM0LDcgKzIxMCw3IEBACiAjIChJbnNwaXJlZCBieSBFcmljIFJheW1vbmQ7IHRoZSBkb2Mgc3RyaW5ncyBhcmUgbW9zdGx5IGhpcykKIAogZGVmIG1ha2VkaXJzKG5hbWUsIG1vZGU9MG83NzcsIGV4aXN0X29rPUZhbHNlKToKLSAgICAiIiJtYWtlZGlycyhwYXRoIFssIG1vZGU9MG83NzddWywgZXhpc3Rfb2s9RmFsc2VdKQorICAgICIiIm1ha2VkaXJzKG5hbWUgWywgbW9kZT0wbzc3N11bLCBleGlzdF9vaz1GYWxzZV0pCiAKICAgICBTdXBlci1ta2RpcjsgY3JlYXRlIGEgbGVhZiBkaXJlY3RvcnkgYW5kIGFsbCBpbnRlcm1lZGlhdGUgb25lcy4gIFdvcmtzIGxpa2UKICAgICBta2RpciwgZXhjZXB0IHRoYXQgYW55IGludGVybWVkaWF0ZSBwYXRoIHNlZ21lbnQgKG5vdCBqdXN0IHRoZSByaWdodG1vc3QpCkBAIC0yNDksMTAgKzIyNSw5IEBACiAgICAgaWYgaGVhZCBhbmQgdGFpbCBhbmQgbm90IHBhdGguZXhpc3RzKGhlYWQpOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBtYWtlZGlycyhoZWFkLCBtb2RlLCBleGlzdF9vaykKLSAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKLSAgICAgICAgICAgICMgYmUgaGFwcHkgaWYgc29tZW9uZSBhbHJlYWR5IGNyZWF0ZWQgdGhlIHBhdGgKLSAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRUVYSVNUOgotICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgIGV4Y2VwdCBGaWxlRXhpc3RzRXJyb3I6CisgICAgICAgICAgICAjIERlZmVhdHMgcmFjZSBjb25kaXRpb24gd2hlbiBhbm90aGVyIHRocmVhZCBjcmVhdGVkIHRoZSBwYXRoCisgICAgICAgICAgICBwYXNzCiAgICAgICAgIGNkaXIgPSBjdXJkaXIKICAgICAgICAgaWYgaXNpbnN0YW5jZSh0YWlsLCBieXRlcyk6CiAgICAgICAgICAgICBjZGlyID0gYnl0ZXMoY3VyZGlyLCAnQVNDSUknKQpAQCAtMjYwLDEyICsyMzUsMTQgQEAKICAgICAgICAgICAgIHJldHVybgogICAgIHRyeToKICAgICAgICAgbWtkaXIobmFtZSwgbW9kZSkKLSAgICBleGNlcHQgT1NFcnJvciBhcyBlOgotICAgICAgICBpZiBub3QgZXhpc3Rfb2sgb3IgZS5lcnJubyAhPSBlcnJuby5FRVhJU1Qgb3Igbm90IHBhdGguaXNkaXIobmFtZSk6CisgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICMgQ2Fubm90IHJlbHkgb24gY2hlY2tpbmcgZm9yIEVFWElTVCwgc2luY2UgdGhlIG9wZXJhdGluZyBzeXN0ZW0KKyAgICAgICAgIyBjb3VsZCBnaXZlIHByaW9yaXR5IHRvIG90aGVyIGVycm9ycyBsaWtlIEVBQ0NFUyBvciBFUk9GUworICAgICAgICBpZiBub3QgZXhpc3Rfb2sgb3Igbm90IHBhdGguaXNkaXIobmFtZSk6CiAgICAgICAgICAgICByYWlzZQogCiBkZWYgcmVtb3ZlZGlycyhuYW1lKToKLSAgICAiIiJyZW1vdmVkaXJzKHBhdGgpCisgICAgIiIicmVtb3ZlZGlycyhuYW1lKQogCiAgICAgU3VwZXItcm1kaXI7IHJlbW92ZSBhIGxlYWYgZGlyZWN0b3J5IGFuZCBhbGwgZW1wdHkgaW50ZXJtZWRpYXRlCiAgICAgb25lcy4gIFdvcmtzIGxpa2Ugcm1kaXIgZXhjZXB0IHRoYXQsIGlmIHRoZSBsZWFmIGRpcmVjdG9yeSBpcwpAQCAtMjgyLDcgKzI1OSw3IEBACiAgICAgd2hpbGUgaGVhZCBhbmQgdGFpbDoKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcm1kaXIoaGVhZCkKLSAgICAgICAgZXhjZXB0IGVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgIGhlYWQsIHRhaWwgPSBwYXRoLnNwbGl0KGhlYWQpCiAKQEAgLTI5Myw3ICsyNzAsNyBAQAogICAgIGVtcHR5LiAgV29ya3MgbGlrZSByZW5hbWUsIGV4Y2VwdCBjcmVhdGlvbiBvZiBhbnkgaW50ZXJtZWRpYXRlCiAgICAgZGlyZWN0b3JpZXMgbmVlZGVkIHRvIG1ha2UgdGhlIG5ldyBwYXRobmFtZSBnb29kIGlzIGF0dGVtcHRlZAogICAgIGZpcnN0LiAgQWZ0ZXIgdGhlIHJlbmFtZSwgZGlyZWN0b3JpZXMgY29ycmVzcG9uZGluZyB0byByaWdodG1vc3QKLSAgICBwYXRoIHNlZ21lbnRzIG9mIHRoZSBvbGQgbmFtZSB3aWxsIGJlIHBydW5lZCB3YXkgdW50aWwgZWl0aGVyIHRoZQorICAgIHBhdGggc2VnbWVudHMgb2YgdGhlIG9sZCBuYW1lIHdpbGwgYmUgcHJ1bmVkIHVudGlsIGVpdGhlciB0aGUKICAgICB3aG9sZSBwYXRoIGlzIGNvbnN1bWVkIG9yIGEgbm9uZW1wdHkgZGlyZWN0b3J5IGlzIGZvdW5kLgogCiAgICAgTm90ZTogdGhpcyBmdW5jdGlvbiBjYW4gZmFpbCB3aXRoIHRoZSBuZXcgZGlyZWN0b3J5IHN0cnVjdHVyZSBtYWRlCkBAIC0zMDksNyArMjg2LDcgQEAKICAgICBpZiBoZWFkIGFuZCB0YWlsOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICByZW1vdmVkaXJzKGhlYWQpCi0gICAgICAgIGV4Y2VwdCBlcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBwYXNzCiAKIF9fYWxsX18uZXh0ZW5kKFsibWFrZWRpcnMiLCAicmVtb3ZlZGlycyIsICJyZW5hbWVzIl0pCkBAIC0zMzcsMTUgKzMxNCwxNiBAQAogCiAgICAgV2hlbiB0b3Bkb3duIGlzIHRydWUsIHRoZSBjYWxsZXIgY2FuIG1vZGlmeSB0aGUgZGlybmFtZXMgbGlzdCBpbi1wbGFjZQogICAgIChlLmcuLCB2aWEgZGVsIG9yIHNsaWNlIGFzc2lnbm1lbnQpLCBhbmQgd2FsayB3aWxsIG9ubHkgcmVjdXJzZSBpbnRvIHRoZQotICAgIHN1YmRpcmVjdG9yaWVzIHdob3NlIG5hbWVzIHJlbWFpbiBpbiBkaXJuYW1lczsgdGhpcyBjYW4gYmUgdXNlZCB0byBwcnVuZQotICAgIHRoZSBzZWFyY2gsIG9yIHRvIGltcG9zZSBhIHNwZWNpZmljIG9yZGVyIG9mIHZpc2l0aW5nLiAgTW9kaWZ5aW5nCi0gICAgZGlybmFtZXMgd2hlbiB0b3Bkb3duIGlzIGZhbHNlIGlzIGluZWZmZWN0aXZlLCBzaW5jZSB0aGUgZGlyZWN0b3JpZXMgaW4KLSAgICBkaXJuYW1lcyBoYXZlIGFscmVhZHkgYmVlbiBnZW5lcmF0ZWQgYnkgdGhlIHRpbWUgZGlybmFtZXMgaXRzZWxmIGlzCi0gICAgZ2VuZXJhdGVkLgorICAgIHN1YmRpcmVjdG9yaWVzIHdob3NlIG5hbWVzIHJlbWFpbiBpbiBkaXJuYW1lczsgdGhpcyBjYW4gYmUgdXNlZCB0byBwcnVuZSB0aGUKKyAgICBzZWFyY2gsIG9yIHRvIGltcG9zZSBhIHNwZWNpZmljIG9yZGVyIG9mIHZpc2l0aW5nLiAgTW9kaWZ5aW5nIGRpcm5hbWVzIHdoZW4KKyAgICB0b3Bkb3duIGlzIGZhbHNlIGlzIGluZWZmZWN0aXZlLCBzaW5jZSB0aGUgZGlyZWN0b3JpZXMgaW4gZGlybmFtZXMgaGF2ZQorICAgIGFscmVhZHkgYmVlbiBnZW5lcmF0ZWQgYnkgdGhlIHRpbWUgZGlybmFtZXMgaXRzZWxmIGlzIGdlbmVyYXRlZC4gTm8gbWF0dGVyCisgICAgdGhlIHZhbHVlIG9mIHRvcGRvd24sIHRoZSBsaXN0IG9mIHN1YmRpcmVjdG9yaWVzIGlzIHJldHJpZXZlZCBiZWZvcmUgdGhlCisgICAgdHVwbGVzIGZvciB0aGUgZGlyZWN0b3J5IGFuZCBpdHMgc3ViZGlyZWN0b3JpZXMgYXJlIGdlbmVyYXRlZC4KIAogICAgIEJ5IGRlZmF1bHQgZXJyb3JzIGZyb20gdGhlIG9zLmxpc3RkaXIoKSBjYWxsIGFyZSBpZ25vcmVkLiAgSWYKICAgICBvcHRpb25hbCBhcmcgJ29uZXJyb3InIGlzIHNwZWNpZmllZCwgaXQgc2hvdWxkIGJlIGEgZnVuY3Rpb247IGl0Ci0gICAgd2lsbCBiZSBjYWxsZWQgd2l0aCBvbmUgYXJndW1lbnQsIGFuIG9zLmVycm9yIGluc3RhbmNlLiAgSXQgY2FuCisgICAgd2lsbCBiZSBjYWxsZWQgd2l0aCBvbmUgYXJndW1lbnQsIGFuIE9TRXJyb3IgaW5zdGFuY2UuICBJdCBjYW4KICAgICByZXBvcnQgdGhlIGVycm9yIHRvIGNvbnRpbnVlIHdpdGggdGhlIHdhbGssIG9yIHJhaXNlIHRoZSBleGNlcHRpb24KICAgICB0byBhYm9ydCB0aGUgd2Fsay4gIE5vdGUgdGhhdCB0aGUgZmlsZW5hbWUgaXMgYXZhaWxhYmxlIGFzIHRoZQogICAgIGZpbGVuYW1lIGF0dHJpYnV0ZSBvZiB0aGUgZXhjZXB0aW9uIG9iamVjdC4KQEAgLTM2OSw2ICszNDcsNyBAQAogICAgICAgICBwcmludCgiYnl0ZXMgaW4iLCBsZW4oZmlsZXMpLCAibm9uLWRpcmVjdG9yeSBmaWxlcyIpCiAgICAgICAgIGlmICdDVlMnIGluIGRpcnM6CiAgICAgICAgICAgICBkaXJzLnJlbW92ZSgnQ1ZTJykgICMgZG9uJ3QgdmlzaXQgQ1ZTIGRpcmVjdG9yaWVzCisKICAgICAiIiIKIAogICAgIGlzbGluaywgam9pbiwgaXNkaXIgPSBwYXRoLmlzbGluaywgcGF0aC5qb2luLCBwYXRoLmlzZGlyCkBAIC0zNzksMTAgKzM1OCwxMCBAQAogICAgICMgbWlub3IgcmVhc29uIHdoZW4gKHNheSkgYSB0aG91c2FuZCByZWFkYWJsZSBkaXJlY3RvcmllcyBhcmUgc3RpbGwKICAgICAjIGxlZnQgdG8gdmlzaXQuICBUaGF0IGxvZ2ljIGlzIGNvcGllZCBoZXJlLgogICAgIHRyeToKLSAgICAgICAgIyBOb3RlIHRoYXQgbGlzdGRpciBhbmQgZXJyb3IgYXJlIGdsb2JhbHMgaW4gdGhpcyBtb2R1bGUgZHVlCisgICAgICAgICMgTm90ZSB0aGF0IGxpc3RkaXIgaXMgZ2xvYmFsIGluIHRoaXMgbW9kdWxlIGR1ZQogICAgICAgICAjIHRvIGVhcmxpZXIgaW1wb3J0LSouCiAgICAgICAgIG5hbWVzID0gbGlzdGRpcih0b3ApCi0gICAgZXhjZXB0IGVycm9yIGFzIGVycjoKKyAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgICAgIGlmIG9uZXJyb3IgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBvbmVycm9yKGVycikKICAgICAgICAgcmV0dXJuCkBAIC00ODQsNyArNDYzLDcgQEAKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBvcmlnX3N0ID0gc3RhdChuYW1lLCBkaXJfZmQ9dG9wZmQsIGZvbGxvd19zeW1saW5rcz1mb2xsb3dfc3ltbGlua3MpCiAgICAgICAgICAgICAgICAgZGlyZmQgPSBvcGVuKG5hbWUsIE9fUkRPTkxZLCBkaXJfZmQ9dG9wZmQpCi0gICAgICAgICAgICBleGNlcHQgZXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgogICAgICAgICAgICAgICAgIGlmIG9uZXJyb3IgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAgICAgIG9uZXJyb3IoZXJyKQogICAgICAgICAgICAgICAgIHJldHVybgpAQCAtNTc5LDcgKzU1OCw3IEBACiAgICAgICAgIGZ1bGxuYW1lID0gcGF0aC5qb2luKGRpciwgZmlsZSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZXhlY19mdW5jKGZ1bGxuYW1lLCAqYXJncmVzdCkKLSAgICAgICAgZXhjZXB0IGVycm9yIGFzIGU6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICBsYXN0X2V4YyA9IGUKICAgICAgICAgICAgIHRiID0gc3lzLmV4Y19pbmZvKClbMl0KICAgICAgICAgICAgIGlmIChlLmVycm5vICE9IGVycm5vLkVOT0VOVCBhbmQgZS5lcnJubyAhPSBlcnJuby5FTk9URElSCkBAIC02MzYsNyArNjE1LDcgQEAKIAogCiAjIENoYW5nZSBlbnZpcm9uIHRvIGF1dG9tYXRpY2FsbHkgY2FsbCBwdXRlbnYoKSwgdW5zZXRlbnYgaWYgdGhleSBleGlzdC4KLWZyb20gY29sbGVjdGlvbnMuYWJjIGltcG9ydCBNdXRhYmxlTWFwcGluZworZnJvbSBfY29sbGVjdGlvbnNfYWJjIGltcG9ydCBNdXRhYmxlTWFwcGluZwogCiBjbGFzcyBfRW52aXJvbihNdXRhYmxlTWFwcGluZyk6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRhdGEsIGVuY29kZWtleSwgZGVjb2Rla2V5LCBlbmNvZGV2YWx1ZSwgZGVjb2RldmFsdWUsIHB1dGVudiwgdW5zZXRlbnYpOgpAQCAtNjk2LDE3ICs2NzUsMTkgQEAKIGV4Y2VwdCBOYW1lRXJyb3I6CiAgICAgX3B1dGVudiA9IGxhbWJkYSBrZXksIHZhbHVlOiBOb25lCiBlbHNlOgotICAgIF9fYWxsX18uYXBwZW5kKCJwdXRlbnYiKQorICAgIGlmICJwdXRlbnYiIG5vdCBpbiBfX2FsbF9fOgorICAgICAgICBfX2FsbF9fLmFwcGVuZCgicHV0ZW52IikKIAogdHJ5OgogICAgIF91bnNldGVudiA9IHVuc2V0ZW52CiBleGNlcHQgTmFtZUVycm9yOgogICAgIF91bnNldGVudiA9IGxhbWJkYSBrZXk6IF9wdXRlbnYoa2V5LCAiIikKIGVsc2U6Ci0gICAgX19hbGxfXy5hcHBlbmQoInVuc2V0ZW52IikKKyAgICBpZiAidW5zZXRlbnYiIG5vdCBpbiBfX2FsbF9fOgorICAgICAgICBfX2FsbF9fLmFwcGVuZCgidW5zZXRlbnYiKQogCiBkZWYgX2NyZWF0ZWVudmlyb24oKToKLSAgICBpZiBuYW1lIGluICgnb3MyJywgJ250Jyk6CisgICAgaWYgbmFtZSA9PSAnbnQnOgogICAgICAgICAjIFdoZXJlIEVudiBWYXIgTmFtZXMgTXVzdCBCZSBVUFBFUkNBU0UKICAgICAgICAgZGVmIGNoZWNrX3N0cih2YWx1ZSk6CiAgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZSh2YWx1ZSwgc3RyKToKQEAgLTc0Niw3ICs3MjcsNyBAQAogICAgIGtleSwgZGVmYXVsdCBhbmQgdGhlIHJlc3VsdCBhcmUgc3RyLiIiIgogICAgIHJldHVybiBlbnZpcm9uLmdldChrZXksIGRlZmF1bHQpCiAKLXN1cHBvcnRzX2J5dGVzX2Vudmlyb24gPSBuYW1lIG5vdCBpbiAoJ29zMicsICdudCcpCitzdXBwb3J0c19ieXRlc19lbnZpcm9uID0gKG5hbWUgIT0gJ250JykKIF9fYWxsX18uZXh0ZW5kKCgiZ2V0ZW52IiwgInN1cHBvcnRzX2J5dGVzX2Vudmlyb24iKSkKIAogaWYgc3VwcG9ydHNfYnl0ZXNfZW52aXJvbjoKQEAgLTg0NSw3ICs4MjYsNyBAQAogICAgICAgICAgICAgICAgIGVsaWYgV0lGRVhJVEVEKHN0cyk6CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBXRVhJVFNUQVRVUyhzdHMpCiAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgZXJyb3IoIk5vdCBzdG9wcGVkLCBzaWduYWxlZCBvciBleGl0ZWQ/Pz8iKQorICAgICAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJOb3Qgc3RvcHBlZCwgc2lnbmFsZWQgb3IgZXhpdGVkPz8/IikKIAogICAgIGRlZiBzcGF3bnYobW9kZSwgZmlsZSwgYXJncyk6CiAgICAgICAgICIiInNwYXdudihtb2RlLCBmaWxlLCBhcmdzKSAtPiBpbnRlZ2VyCkBAIC04ODgsNiArODY5LDEwIEBACiBvdGhlcndpc2UgcmV0dXJuIC1TSUcsIHdoZXJlIFNJRyBpcyB0aGUgc2lnbmFsIHRoYXQga2lsbGVkIGl0LiAiIiIKICAgICAgICAgcmV0dXJuIF9zcGF3bnZlZihtb2RlLCBmaWxlLCBhcmdzLCBlbnYsIGV4ZWN2cGUpCiAKKworICAgIF9fYWxsX18uZXh0ZW5kKFsic3Bhd252IiwgInNwYXdudmUiLCAic3Bhd252cCIsICJzcGF3bnZwZSJdKQorCisKIGlmIF9leGlzdHMoInNwYXdudiIpOgogICAgICMgVGhlc2UgYXJlbid0IHN1cHBsaWVkIGJ5IHRoZSBiYXNpYyBXaW5kb3dzIGNvZGUKICAgICAjIGJ1dCBjYW4gYmUgZWFzaWx5IGltcGxlbWVudGVkIGluIFB5dGhvbgpAQCAtOTEzLDcgKzg5OCw3IEBACiAgICAgICAgIHJldHVybiBzcGF3bnZlKG1vZGUsIGZpbGUsIGFyZ3NbOi0xXSwgZW52KQogCiAKLSAgICBfX2FsbF9fLmV4dGVuZChbInNwYXdudiIsICJzcGF3bnZlIiwgInNwYXdubCIsICJzcGF3bmxlIixdKQorICAgIF9fYWxsX18uZXh0ZW5kKFsic3Bhd25sIiwgInNwYXdubGUiXSkKIAogCiBpZiBfZXhpc3RzKCJzcGF3bnZwIik6CkBAIC05NDEsMzQgKzkyNiw4IEBACiAgICAgICAgIHJldHVybiBzcGF3bnZwZShtb2RlLCBmaWxlLCBhcmdzWzotMV0sIGVudikKIAogCi0gICAgX19hbGxfXy5leHRlbmQoWyJzcGF3bnZwIiwgInNwYXdudnBlIiwgInNwYXdubHAiLCAic3Bhd25scGUiLF0pCisgICAgX19hbGxfXy5leHRlbmQoWyJzcGF3bmxwIiwgInNwYXdubHBlIl0pCiAKLWltcG9ydCBjb3B5cmVnIGFzIF9jb3B5cmVnCi0KLWRlZiBfbWFrZV9zdGF0X3Jlc3VsdCh0dXAsIGRpY3QpOgotICAgIHJldHVybiBzdGF0X3Jlc3VsdCh0dXAsIGRpY3QpCi0KLWRlZiBfcGlja2xlX3N0YXRfcmVzdWx0KHNyKToKLSAgICAodHlwZSwgYXJncykgPSBzci5fX3JlZHVjZV9fKCkKLSAgICByZXR1cm4gKF9tYWtlX3N0YXRfcmVzdWx0LCBhcmdzKQotCi10cnk6Ci0gICAgX2NvcHlyZWcucGlja2xlKHN0YXRfcmVzdWx0LCBfcGlja2xlX3N0YXRfcmVzdWx0LCBfbWFrZV9zdGF0X3Jlc3VsdCkKLWV4Y2VwdCBOYW1lRXJyb3I6ICMgc3RhdF9yZXN1bHQgbWF5IG5vdCBleGlzdAotICAgIHBhc3MKLQotZGVmIF9tYWtlX3N0YXR2ZnNfcmVzdWx0KHR1cCwgZGljdCk6Ci0gICAgcmV0dXJuIHN0YXR2ZnNfcmVzdWx0KHR1cCwgZGljdCkKLQotZGVmIF9waWNrbGVfc3RhdHZmc19yZXN1bHQoc3IpOgotICAgICh0eXBlLCBhcmdzKSA9IHNyLl9fcmVkdWNlX18oKQotICAgIHJldHVybiAoX21ha2Vfc3RhdHZmc19yZXN1bHQsIGFyZ3MpCi0KLXRyeToKLSAgICBfY29weXJlZy5waWNrbGUoc3RhdHZmc19yZXN1bHQsIF9waWNrbGVfc3RhdHZmc19yZXN1bHQsCi0gICAgICAgICAgICAgICAgICAgICBfbWFrZV9zdGF0dmZzX3Jlc3VsdCkKLWV4Y2VwdCBOYW1lRXJyb3I6ICMgc3RhdHZmc19yZXN1bHQgbWF5IG5vdCBleGlzdAotICAgIHBhc3MKIAogIyBTdXBwbHkgb3MucG9wZW4oKQogZGVmIHBvcGVuKGNtZCwgbW9kZT0iciIsIGJ1ZmZlcmluZz0tMSk6CmRpZmYgLS1naXQgYS9MaWIvb3MyZW14cGF0aC5weSBiL0xpYi9vczJlbXhwYXRoLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwY2NiZjhhLi4wMDAwMDAwCi0tLSBhL0xpYi9vczJlbXhwYXRoLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTU4ICswLDAgQEAKLSMgTW9kdWxlICdvczJlbXhwYXRoJyAtLSBjb21tb24gb3BlcmF0aW9ucyBvbiBPUy8yIHBhdGhuYW1lcwotIiIiQ29tbW9uIHBhdGhuYW1lIG1hbmlwdWxhdGlvbnMsIE9TLzIgRU1YIHZlcnNpb24uCi0KLUluc3RlYWQgb2YgaW1wb3J0aW5nIHRoaXMgbW9kdWxlIGRpcmVjdGx5LCBpbXBvcnQgb3MgYW5kIHJlZmVyIHRvIHRoaXMKLW1vZHVsZSBhcyBvcy5wYXRoLgotIiIiCi0KLWltcG9ydCBvcwotaW1wb3J0IHN0YXQKLWZyb20gZ2VuZXJpY3BhdGggaW1wb3J0ICoKLWZyb20gbnRwYXRoIGltcG9ydCAoZXhwYW5kdXNlciwgZXhwYW5kdmFycywgaXNhYnMsIGlzbGluaywgc3BsaXRkcml2ZSwKLSAgICAgICAgICAgICAgICAgICAgc3BsaXRleHQsIHNwbGl0KQotCi1fX2FsbF9fID0gWyJub3JtY2FzZSIsImlzYWJzIiwiam9pbiIsInNwbGl0ZHJpdmUiLCJzcGxpdCIsInNwbGl0ZXh0IiwKLSAgICAgICAgICAgImJhc2VuYW1lIiwiZGlybmFtZSIsImNvbW1vbnByZWZpeCIsImdldHNpemUiLCJnZXRtdGltZSIsCi0gICAgICAgICAgICJnZXRhdGltZSIsImdldGN0aW1lIiwgImlzbGluayIsImV4aXN0cyIsImxleGlzdHMiLCJpc2RpciIsImlzZmlsZSIsCi0gICAgICAgICAgICJpc21vdW50IiwiZXhwYW5kdXNlciIsImV4cGFuZHZhcnMiLCJub3JtcGF0aCIsImFic3BhdGgiLAotICAgICAgICAgICAic3BsaXR1bmMiLCJjdXJkaXIiLCJwYXJkaXIiLCJzZXAiLCJwYXRoc2VwIiwiZGVmcGF0aCIsImFsdHNlcCIsCi0gICAgICAgICAgICJleHRzZXAiLCJkZXZudWxsIiwicmVhbHBhdGgiLCJzdXBwb3J0c191bmljb2RlX2ZpbGVuYW1lcyJdCi0KLSMgc3RyaW5ncyByZXByZXNlbnRpbmcgdmFyaW91cyBwYXRoLXJlbGF0ZWQgYml0cyBhbmQgcGllY2VzCi1jdXJkaXIgPSAnLicKLXBhcmRpciA9ICcuLicKLWV4dHNlcCA9ICcuJwotc2VwID0gJy8nCi1hbHRzZXAgPSAnXFwnCi1wYXRoc2VwID0gJzsnCi1kZWZwYXRoID0gJy47QzpcXGJpbicKLWRldm51bGwgPSAnbnVsJwotCi0jIE5vcm1hbGl6ZSB0aGUgY2FzZSBvZiBhIHBhdGhuYW1lIGFuZCBtYXAgc2xhc2hlcyB0byBiYWNrc2xhc2hlcy4KLSMgT3RoZXIgbm9ybWFsaXphdGlvbnMgKHN1Y2ggYXMgb3B0aW1pemluZyAnLi4vJyBhd2F5KSBhcmUgbm90IGRvbmUKLSMgKHRoaXMgaXMgZG9uZSBieSBub3JtcGF0aCkuCi0KLWRlZiBub3JtY2FzZShzKToKLSAgICAiIiJOb3JtYWxpemUgY2FzZSBvZiBwYXRobmFtZS4KLQotICAgIE1ha2VzIGFsbCBjaGFyYWN0ZXJzIGxvd2VyY2FzZSBhbmQgYWxsIGFsdHNlcHMgaW50byBzZXBzLiIiIgotICAgIGlmIG5vdCBpc2luc3RhbmNlKHMsIChieXRlcywgc3RyKSk6Ci0gICAgICAgIHJhaXNlIFR5cGVFcnJvcigibm9ybWNhc2UoKSBhcmd1bWVudCBtdXN0IGJlIHN0ciBvciBieXRlcywgIgotICAgICAgICAgICAgICAgICAgICAgICAgIm5vdCAne30nIi5mb3JtYXQocy5fX2NsYXNzX18uX19uYW1lX18pKQotICAgIHJldHVybiBzLnJlcGxhY2UoJ1xcJywgJy8nKS5sb3dlcigpCi0KLQotIyBKb2luIHR3byAob3IgbW9yZSkgcGF0aHMuCi0KLWRlZiBqb2luKGEsICpwKToKLSAgICAiIiJKb2luIHR3byBvciBtb3JlIHBhdGhuYW1lIGNvbXBvbmVudHMsIGluc2VydGluZyBzZXAgYXMgbmVlZGVkIiIiCi0gICAgcGF0aCA9IGEKLSAgICBmb3IgYiBpbiBwOgotICAgICAgICBpZiBpc2FicyhiKToKLSAgICAgICAgICAgIHBhdGggPSBiCi0gICAgICAgIGVsaWYgcGF0aCA9PSAnJyBvciBwYXRoWy0xOl0gaW4gJy9cXDonOgotICAgICAgICAgICAgcGF0aCA9IHBhdGggKyBiCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBwYXRoID0gcGF0aCArICcvJyArIGIKLSAgICByZXR1cm4gcGF0aAotCi0KLSMgUGFyc2UgVU5DIHBhdGhzCi1kZWYgc3BsaXR1bmMocCk6Ci0gICAgIiIiU3BsaXQgYSBwYXRobmFtZSBpbnRvIFVOQyBtb3VudCBwb2ludCBhbmQgcmVsYXRpdmUgcGF0aCBzcGVjaWZpZXJzLgotCi0gICAgUmV0dXJuIGEgMi10dXBsZSAodW5jLCByZXN0KTsgZWl0aGVyIHBhcnQgbWF5IGJlIGVtcHR5LgotICAgIElmIHVuYyBpcyBub3QgZW1wdHksIGl0IGhhcyB0aGUgZm9ybSAnLy9ob3N0L21vdW50JyAob3Igc2ltaWxhcgotICAgIHVzaW5nIGJhY2tzbGFzaGVzKS4gIHVuYytyZXN0IGlzIGFsd2F5cyB0aGUgaW5wdXQgcGF0aC4KLSAgICBQYXRocyBjb250YWluaW5nIGRyaXZlIGxldHRlcnMgbmV2ZXIgaGF2ZSBhbiBVTkMgcGFydC4KLSAgICAiIiIKLSAgICBpZiBwWzE6Ml0gPT0gJzonOgotICAgICAgICByZXR1cm4gJycsIHAgIyBEcml2ZSBsZXR0ZXIgcHJlc2VudAotICAgIGZpcnN0VHdvID0gcFswOjJdCi0gICAgaWYgZmlyc3RUd28gPT0gJy8nICogMiBvciBmaXJzdFR3byA9PSAnXFwnICogMjoKLSAgICAgICAgIyBpcyBhIFVOQyBwYXRoOgotICAgICAgICAjIHZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2IGVxdWl2YWxlbnQgdG8gZHJpdmUgbGV0dGVyCi0gICAgICAgICMgXFxtYWNoaW5lXG1vdW50cG9pbnRcZGlyZWN0b3JpZXMuLi4KLSAgICAgICAgIyAgICAgICAgICAgZGlyZWN0b3J5IF5eXl5eXl5eXl5eXl5eXgotICAgICAgICBub3JtcCA9IG5vcm1jYXNlKHApCi0gICAgICAgIGluZGV4ID0gbm9ybXAuZmluZCgnLycsIDIpCi0gICAgICAgIGlmIGluZGV4ID09IC0xOgotICAgICAgICAgICAgIyNyYWlzZSBSdW50aW1lRXJyb3IsICdpbGxlZ2FsIFVOQyBwYXRoOiAiJyArIHAgKyAnIicKLSAgICAgICAgICAgIHJldHVybiAoIiIsIHApCi0gICAgICAgIGluZGV4ID0gbm9ybXAuZmluZCgnLycsIGluZGV4ICsgMSkKLSAgICAgICAgaWYgaW5kZXggPT0gLTE6Ci0gICAgICAgICAgICBpbmRleCA9IGxlbihwKQotICAgICAgICByZXR1cm4gcFs6aW5kZXhdLCBwW2luZGV4Ol0KLSAgICByZXR1cm4gJycsIHAKLQotCi0jIFJldHVybiB0aGUgdGFpbCAoYmFzZW5hbWUpIHBhcnQgb2YgYSBwYXRoLgotCi1kZWYgYmFzZW5hbWUocCk6Ci0gICAgIiIiUmV0dXJucyB0aGUgZmluYWwgY29tcG9uZW50IG9mIGEgcGF0aG5hbWUiIiIKLSAgICByZXR1cm4gc3BsaXQocClbMV0KLQotCi0jIFJldHVybiB0aGUgaGVhZCAoZGlybmFtZSkgcGFydCBvZiBhIHBhdGguCi0KLWRlZiBkaXJuYW1lKHApOgotICAgICIiIlJldHVybnMgdGhlIGRpcmVjdG9yeSBjb21wb25lbnQgb2YgYSBwYXRobmFtZSIiIgotICAgIHJldHVybiBzcGxpdChwKVswXQotCi0KLSMgYWxpYXMgZXhpc3RzIHRvIGxleGlzdHMKLWxleGlzdHMgPSBleGlzdHMKLQotCi0jIElzIGEgcGF0aCBhIGRpcmVjdG9yeT8KLQotIyBJcyBhIHBhdGggYSBtb3VudCBwb2ludD8gIEVpdGhlciBhIHJvb3QgKHdpdGggb3Igd2l0aG91dCBkcml2ZSBsZXR0ZXIpCi0jIG9yIGFuIFVOQyBwYXRoIHdpdGggYXQgbW9zdCBhIC8gb3IgXCBhZnRlciB0aGUgbW91bnQgcG9pbnQuCi0KLWRlZiBpc21vdW50KHBhdGgpOgotICAgICIiIlRlc3Qgd2hldGhlciBhIHBhdGggaXMgYSBtb3VudCBwb2ludCAoZGVmaW5lZCBhcyByb290IG9mIGRyaXZlKSIiIgotICAgIHVuYywgcmVzdCA9IHNwbGl0dW5jKHBhdGgpCi0gICAgaWYgdW5jOgotICAgICAgICByZXR1cm4gcmVzdCBpbiAoIiIsICIvIiwgIlxcIikKLSAgICBwID0gc3BsaXRkcml2ZShwYXRoKVsxXQotICAgIHJldHVybiBsZW4ocCkgPT0gMSBhbmQgcFswXSBpbiAnL1xcJwotCi0KLSMgTm9ybWFsaXplIGEgcGF0aCwgZS5nLiBBLy9CLCBBLy4vQiBhbmQgQS9mb28vLi4vQiBhbGwgYmVjb21lIEEvQi4KLQotZGVmIG5vcm1wYXRoKHBhdGgpOgotICAgICIiIk5vcm1hbGl6ZSBwYXRoLCBlbGltaW5hdGluZyBkb3VibGUgc2xhc2hlcywgZXRjLiIiIgotICAgIHBhdGggPSBwYXRoLnJlcGxhY2UoJ1xcJywgJy8nKQotICAgIHByZWZpeCwgcGF0aCA9IHNwbGl0ZHJpdmUocGF0aCkKLSAgICB3aGlsZSBwYXRoWzoxXSA9PSAnLyc6Ci0gICAgICAgIHByZWZpeCA9IHByZWZpeCArICcvJwotICAgICAgICBwYXRoID0gcGF0aFsxOl0KLSAgICBjb21wcyA9IHBhdGguc3BsaXQoJy8nKQotICAgIGkgPSAwCi0gICAgd2hpbGUgaSA8IGxlbihjb21wcyk6Ci0gICAgICAgIGlmIGNvbXBzW2ldID09ICcuJzoKLSAgICAgICAgICAgIGRlbCBjb21wc1tpXQotICAgICAgICBlbGlmIGNvbXBzW2ldID09ICcuLicgYW5kIGkgPiAwIGFuZCBjb21wc1tpLTFdIG5vdCBpbiAoJycsICcuLicpOgotICAgICAgICAgICAgZGVsIGNvbXBzW2ktMTppKzFdCi0gICAgICAgICAgICBpID0gaSAtIDEKLSAgICAgICAgZWxpZiBjb21wc1tpXSA9PSAnJyBhbmQgaSA+IDAgYW5kIGNvbXBzW2ktMV0gIT0gJyc6Ci0gICAgICAgICAgICBkZWwgY29tcHNbaV0KLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGkgPSBpICsgMQotICAgICMgSWYgdGhlIHBhdGggaXMgbm93IGVtcHR5LCBzdWJzdGl0dXRlICcuJwotICAgIGlmIG5vdCBwcmVmaXggYW5kIG5vdCBjb21wczoKLSAgICAgICAgY29tcHMuYXBwZW5kKCcuJykKLSAgICByZXR1cm4gcHJlZml4ICsgJy8nLmpvaW4oY29tcHMpCi0KLQotIyBSZXR1cm4gYW4gYWJzb2x1dGUgcGF0aC4KLWRlZiBhYnNwYXRoKHBhdGgpOgotICAgICIiIlJldHVybiB0aGUgYWJzb2x1dGUgdmVyc2lvbiBvZiBhIHBhdGgiIiIKLSAgICBpZiBub3QgaXNhYnMocGF0aCk6Ci0gICAgICAgIHBhdGggPSBqb2luKG9zLmdldGN3ZCgpLCBwYXRoKQotICAgIHJldHVybiBub3JtcGF0aChwYXRoKQotCi0jIHJlYWxwYXRoIGlzIGEgbm8tb3Agb24gc3lzdGVtcyB3aXRob3V0IGlzbGluayBzdXBwb3J0Ci1yZWFscGF0aCA9IGFic3BhdGgKLQotc3VwcG9ydHNfdW5pY29kZV9maWxlbmFtZXMgPSBGYWxzZQpkaWZmIC0tZ2l0IGEvTGliL3BhdGhsaWIucHkgYi9MaWIvcGF0aGxpYi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MThhYzhkCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3BhdGhsaWIucHkKQEAgLTAsMCArMSwxMjkxIEBACitpbXBvcnQgZm5tYXRjaAoraW1wb3J0IGZ1bmN0b29scworaW1wb3J0IGlvCitpbXBvcnQgbnRwYXRoCitpbXBvcnQgb3MKK2ltcG9ydCBwb3NpeHBhdGgKK2ltcG9ydCByZQoraW1wb3J0IHN5cworZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgU2VxdWVuY2UKK2Zyb20gY29udGV4dGxpYiBpbXBvcnQgY29udGV4dG1hbmFnZXIKK2Zyb20gZXJybm8gaW1wb3J0IEVJTlZBTCwgRU5PRU5ULCBFTk9URElSCitmcm9tIG9wZXJhdG9yIGltcG9ydCBhdHRyZ2V0dGVyCitmcm9tIHN0YXQgaW1wb3J0IFNfSVNESVIsIFNfSVNMTkssIFNfSVNSRUcsIFNfSVNTT0NLLCBTX0lTQkxLLCBTX0lTQ0hSLCBTX0lTRklGTworZnJvbSB1cmxsaWIucGFyc2UgaW1wb3J0IHF1b3RlX2Zyb21fYnl0ZXMgYXMgdXJscXVvdGVfZnJvbV9ieXRlcworCisKK3N1cHBvcnRzX3N5bWxpbmtzID0gVHJ1ZQoraWYgb3MubmFtZSA9PSAnbnQnOgorICAgIGltcG9ydCBudAorICAgIGlmIHN5cy5nZXR3aW5kb3dzdmVyc2lvbigpWzoyXSA+PSAoNiwgMCk6CisgICAgICAgIGZyb20gbnQgaW1wb3J0IF9nZXRmaW5hbHBhdGhuYW1lCisgICAgZWxzZToKKyAgICAgICAgc3VwcG9ydHNfc3ltbGlua3MgPSBGYWxzZQorICAgICAgICBfZ2V0ZmluYWxwYXRobmFtZSA9IE5vbmUKK2Vsc2U6CisgICAgbnQgPSBOb25lCisKKworX19hbGxfXyA9IFsKKyAgICAiUHVyZVBhdGgiLCAiUHVyZVBvc2l4UGF0aCIsICJQdXJlV2luZG93c1BhdGgiLAorICAgICJQYXRoIiwgIlBvc2l4UGF0aCIsICJXaW5kb3dzUGF0aCIsCisgICAgXQorCisjCisjIEludGVybmFscworIworCitkZWYgX2lzX3dpbGRjYXJkX3BhdHRlcm4ocGF0KToKKyAgICAjIFdoZXRoZXIgdGhpcyBwYXR0ZXJuIG5lZWRzIGFjdHVhbCBtYXRjaGluZyB1c2luZyBmbm1hdGNoLCBvciBjYW4KKyAgICAjIGJlIGxvb2tlZCB1cCBkaXJlY3RseSBhcyBhIGZpbGUuCisgICAgcmV0dXJuICIqIiBpbiBwYXQgb3IgIj8iIGluIHBhdCBvciAiWyIgaW4gcGF0CisKKworY2xhc3MgX0ZsYXZvdXIob2JqZWN0KToKKyAgICAiIiJBIGZsYXZvdXIgaW1wbGVtZW50cyBhIHBhcnRpY3VsYXIgKHBsYXRmb3JtLXNwZWNpZmljKSBzZXQgb2YgcGF0aAorICAgIHNlbWFudGljcy4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5qb2luID0gc2VsZi5zZXAuam9pbgorCisgICAgZGVmIHBhcnNlX3BhcnRzKHNlbGYsIHBhcnRzKToKKyAgICAgICAgcGFyc2VkID0gW10KKyAgICAgICAgc2VwID0gc2VsZi5zZXAKKyAgICAgICAgYWx0c2VwID0gc2VsZi5hbHRzZXAKKyAgICAgICAgZHJ2ID0gcm9vdCA9ICcnCisgICAgICAgIGl0ID0gcmV2ZXJzZWQocGFydHMpCisgICAgICAgIGZvciBwYXJ0IGluIGl0OgorICAgICAgICAgICAgaWYgbm90IHBhcnQ6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGFsdHNlcDoKKyAgICAgICAgICAgICAgICBwYXJ0ID0gcGFydC5yZXBsYWNlKGFsdHNlcCwgc2VwKQorICAgICAgICAgICAgZHJ2LCByb290LCByZWwgPSBzZWxmLnNwbGl0cm9vdChwYXJ0KQorICAgICAgICAgICAgaWYgc2VwIGluIHJlbDoKKyAgICAgICAgICAgICAgICBmb3IgeCBpbiByZXZlcnNlZChyZWwuc3BsaXQoc2VwKSk6CisgICAgICAgICAgICAgICAgICAgIGlmIHggYW5kIHggIT0gJy4nOgorICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VkLmFwcGVuZChzeXMuaW50ZXJuKHgpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiByZWwgYW5kIHJlbCAhPSAnLic6CisgICAgICAgICAgICAgICAgICAgIHBhcnNlZC5hcHBlbmQoc3lzLmludGVybihyZWwpKQorICAgICAgICAgICAgaWYgZHJ2IG9yIHJvb3Q6CisgICAgICAgICAgICAgICAgaWYgbm90IGRydjoKKyAgICAgICAgICAgICAgICAgICAgIyBJZiBubyBkcml2ZSBpcyBwcmVzZW50LCB0cnkgdG8gZmluZCBvbmUgaW4gdGhlIHByZXZpb3VzCisgICAgICAgICAgICAgICAgICAgICMgcGFydHMuIFRoaXMgbWFrZXMgdGhlIHJlc3VsdCBvZiBwYXJzaW5nIGUuZy4KKyAgICAgICAgICAgICAgICAgICAgIyAoIkM6IiwgIi8iLCAiYSIpIHJlYXNvbmFibHkgaW50dWl0aXZlLgorICAgICAgICAgICAgICAgICAgICBmb3IgcGFydCBpbiBpdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBwYXJ0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBhbHRzZXA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydCA9IHBhcnQucmVwbGFjZShhbHRzZXAsIHNlcCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRydiA9IHNlbGYuc3BsaXRyb290KHBhcnQpWzBdCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBkcnY6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBpZiBkcnYgb3Igcm9vdDoKKyAgICAgICAgICAgIHBhcnNlZC5hcHBlbmQoZHJ2ICsgcm9vdCkKKyAgICAgICAgcGFyc2VkLnJldmVyc2UoKQorICAgICAgICByZXR1cm4gZHJ2LCByb290LCBwYXJzZWQKKworICAgIGRlZiBqb2luX3BhcnNlZF9wYXJ0cyhzZWxmLCBkcnYsIHJvb3QsIHBhcnRzLCBkcnYyLCByb290MiwgcGFydHMyKToKKyAgICAgICAgIiIiCisgICAgICAgIEpvaW4gdGhlIHR3byBwYXRocyByZXByZXNlbnRlZCBieSB0aGUgcmVzcGVjdGl2ZQorICAgICAgICAoZHJpdmUsIHJvb3QsIHBhcnRzKSB0dXBsZXMuICBSZXR1cm4gYSBuZXcgKGRyaXZlLCByb290LCBwYXJ0cykgdHVwbGUuCisgICAgICAgICIiIgorICAgICAgICBpZiByb290MjoKKyAgICAgICAgICAgIGlmIG5vdCBkcnYyIGFuZCBkcnY6CisgICAgICAgICAgICAgICAgcmV0dXJuIGRydiwgcm9vdDIsIFtkcnYgKyByb290Ml0gKyBwYXJ0czJbMTpdCisgICAgICAgIGVsaWYgZHJ2MjoKKyAgICAgICAgICAgIGlmIGRydjIgPT0gZHJ2IG9yIHNlbGYuY2FzZWZvbGQoZHJ2MikgPT0gc2VsZi5jYXNlZm9sZChkcnYpOgorICAgICAgICAgICAgICAgICMgU2FtZSBkcml2ZSA9PiBzZWNvbmQgcGF0aCBpcyByZWxhdGl2ZSB0byB0aGUgZmlyc3QKKyAgICAgICAgICAgICAgICByZXR1cm4gZHJ2LCByb290LCBwYXJ0cyArIHBhcnRzMlsxOl0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgU2Vjb25kIHBhdGggaXMgbm9uLWFuY2hvcmVkIChjb21tb24gY2FzZSkKKyAgICAgICAgICAgIHJldHVybiBkcnYsIHJvb3QsIHBhcnRzICsgcGFydHMyCisgICAgICAgIHJldHVybiBkcnYyLCByb290MiwgcGFydHMyCisKKworY2xhc3MgX1dpbmRvd3NGbGF2b3VyKF9GbGF2b3VyKToKKyAgICAjIFJlZmVyZW5jZSBmb3IgV2luZG93cyBwYXRocyBjYW4gYmUgZm91bmQgYXQKKyAgICAjIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9hYTM2NTI0NyUyOHY9dnMuODUlMjkuYXNweAorCisgICAgc2VwID0gJ1xcJworICAgIGFsdHNlcCA9ICcvJworICAgIGhhc19kcnYgPSBUcnVlCisgICAgcGF0aG1vZCA9IG50cGF0aAorCisgICAgaXNfc3VwcG9ydGVkID0gKG9zLm5hbWUgPT0gJ250JykKKworICAgIGRyaXZlX2xldHRlcnMgPSAoCisgICAgICAgIHNldChjaHIoeCkgZm9yIHggaW4gcmFuZ2Uob3JkKCdhJyksIG9yZCgneicpICsgMSkpIHwKKyAgICAgICAgc2V0KGNocih4KSBmb3IgeCBpbiByYW5nZShvcmQoJ0EnKSwgb3JkKCdaJykgKyAxKSkKKyAgICApCisgICAgZXh0X25hbWVzcGFjZV9wcmVmaXggPSAnXFxcXD9cXCcKKworICAgIHJlc2VydmVkX25hbWVzID0gKAorICAgICAgICB7J0NPTicsICdQUk4nLCAnQVVYJywgJ05VTCd9IHwKKyAgICAgICAgeydDT00lZCcgJSBpIGZvciBpIGluIHJhbmdlKDEsIDEwKX0gfAorICAgICAgICB7J0xQVCVkJyAlIGkgZm9yIGkgaW4gcmFuZ2UoMSwgMTApfQorICAgICAgICApCisKKyAgICAjIEludGVyZXN0aW5nIGZpbmRpbmdzIGFib3V0IGV4dGVuZGVkIHBhdGhzOgorICAgICMgLSAnXFw/XGM6XGEnLCAnLy8/L2M6XGEnIGFuZCAnLy8/L2M6L2EnIGFyZSBhbGwgc3VwcG9ydGVkCisgICAgIyAgIGJ1dCAnXFw/XGM6L2EnIGlzIG5vdAorICAgICMgLSBleHRlbmRlZCBwYXRocyBhcmUgYWx3YXlzIGFic29sdXRlOyAicmVsYXRpdmUiIGV4dGVuZGVkIHBhdGhzIHdpbGwKKyAgICAjICAgZmFpbC4KKworICAgIGRlZiBzcGxpdHJvb3Qoc2VsZiwgcGFydCwgc2VwPXNlcCk6CisgICAgICAgIGZpcnN0ID0gcGFydFswOjFdCisgICAgICAgIHNlY29uZCA9IHBhcnRbMToyXQorICAgICAgICBpZiAoc2Vjb25kID09IHNlcCBhbmQgZmlyc3QgPT0gc2VwKToKKyAgICAgICAgICAgICMgWFhYIGV4dGVuZGVkIHBhdGhzIHNob3VsZCBhbHNvIGRpc2FibGUgdGhlIGNvbGxhcHNpbmcgb2YgIi4iCisgICAgICAgICAgICAjIGNvbXBvbmVudHMgKGFjY29yZGluZyB0byBNU0ROIGRvY3MpLgorICAgICAgICAgICAgcHJlZml4LCBwYXJ0ID0gc2VsZi5fc3BsaXRfZXh0ZW5kZWRfcGF0aChwYXJ0KQorICAgICAgICAgICAgZmlyc3QgPSBwYXJ0WzA6MV0KKyAgICAgICAgICAgIHNlY29uZCA9IHBhcnRbMToyXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJlZml4ID0gJycKKyAgICAgICAgdGhpcmQgPSBwYXJ0WzI6M10KKyAgICAgICAgaWYgKHNlY29uZCA9PSBzZXAgYW5kIGZpcnN0ID09IHNlcCBhbmQgdGhpcmQgIT0gc2VwKToKKyAgICAgICAgICAgICMgaXMgYSBVTkMgcGF0aDoKKyAgICAgICAgICAgICMgdnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2IHJvb3QKKyAgICAgICAgICAgICMgXFxtYWNoaW5lXG1vdW50cG9pbnRcZGlyZWN0b3J5XGV0Y1wuLi4KKyAgICAgICAgICAgICMgICAgICAgICAgICBkaXJlY3RvcnkgXl5eXl5eXl5eXl5eXl4KKyAgICAgICAgICAgIGluZGV4ID0gcGFydC5maW5kKHNlcCwgMikKKyAgICAgICAgICAgIGlmIGluZGV4ICE9IC0xOgorICAgICAgICAgICAgICAgIGluZGV4MiA9IHBhcnQuZmluZChzZXAsIGluZGV4ICsgMSkKKyAgICAgICAgICAgICAgICAjIGEgVU5DIHBhdGggY2FuJ3QgaGF2ZSB0d28gc2xhc2hlcyBpbiBhIHJvdworICAgICAgICAgICAgICAgICMgKGFmdGVyIHRoZSBpbml0aWFsIHR3bykKKyAgICAgICAgICAgICAgICBpZiBpbmRleDIgIT0gaW5kZXggKyAxOgorICAgICAgICAgICAgICAgICAgICBpZiBpbmRleDIgPT0gLTE6CisgICAgICAgICAgICAgICAgICAgICAgICBpbmRleDIgPSBsZW4ocGFydCkKKyAgICAgICAgICAgICAgICAgICAgaWYgcHJlZml4OgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByZWZpeCArIHBhcnRbMTppbmRleDJdLCBzZXAsIHBhcnRbaW5kZXgyKzE6XQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnRbOmluZGV4Ml0sIHNlcCwgcGFydFtpbmRleDIrMTpdCisgICAgICAgIGRydiA9IHJvb3QgPSAnJworICAgICAgICBpZiBzZWNvbmQgPT0gJzonIGFuZCBmaXJzdCBpbiBzZWxmLmRyaXZlX2xldHRlcnM6CisgICAgICAgICAgICBkcnYgPSBwYXJ0WzoyXQorICAgICAgICAgICAgcGFydCA9IHBhcnRbMjpdCisgICAgICAgICAgICBmaXJzdCA9IHRoaXJkCisgICAgICAgIGlmIGZpcnN0ID09IHNlcDoKKyAgICAgICAgICAgIHJvb3QgPSBmaXJzdAorICAgICAgICAgICAgcGFydCA9IHBhcnQubHN0cmlwKHNlcCkKKyAgICAgICAgcmV0dXJuIHByZWZpeCArIGRydiwgcm9vdCwgcGFydAorCisgICAgZGVmIGNhc2Vmb2xkKHNlbGYsIHMpOgorICAgICAgICByZXR1cm4gcy5sb3dlcigpCisKKyAgICBkZWYgY2FzZWZvbGRfcGFydHMoc2VsZiwgcGFydHMpOgorICAgICAgICByZXR1cm4gW3AubG93ZXIoKSBmb3IgcCBpbiBwYXJ0c10KKworICAgIGRlZiByZXNvbHZlKHNlbGYsIHBhdGgpOgorICAgICAgICBzID0gc3RyKHBhdGgpCisgICAgICAgIGlmIG5vdCBzOgorICAgICAgICAgICAgcmV0dXJuIG9zLmdldGN3ZCgpCisgICAgICAgIGlmIF9nZXRmaW5hbHBhdGhuYW1lIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2V4dF90b19ub3JtYWwoX2dldGZpbmFscGF0aG5hbWUocykpCisgICAgICAgICMgTWVhbnMgZmFsbGJhY2sgb24gYWJzb2x1dGUKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBfc3BsaXRfZXh0ZW5kZWRfcGF0aChzZWxmLCBzLCBleHRfcHJlZml4PWV4dF9uYW1lc3BhY2VfcHJlZml4KToKKyAgICAgICAgcHJlZml4ID0gJycKKyAgICAgICAgaWYgcy5zdGFydHN3aXRoKGV4dF9wcmVmaXgpOgorICAgICAgICAgICAgcHJlZml4ID0gc1s6NF0KKyAgICAgICAgICAgIHMgPSBzWzQ6XQorICAgICAgICAgICAgaWYgcy5zdGFydHN3aXRoKCdVTkNcXCcpOgorICAgICAgICAgICAgICAgIHByZWZpeCArPSBzWzozXQorICAgICAgICAgICAgICAgIHMgPSAnXFwnICsgc1szOl0KKyAgICAgICAgcmV0dXJuIHByZWZpeCwgcworCisgICAgZGVmIF9leHRfdG9fbm9ybWFsKHNlbGYsIHMpOgorICAgICAgICAjIFR1cm4gYmFjayBhbiBleHRlbmRlZCBwYXRoIGludG8gYSBub3JtYWwgRE9TLWxpa2UgcGF0aAorICAgICAgICByZXR1cm4gc2VsZi5fc3BsaXRfZXh0ZW5kZWRfcGF0aChzKVsxXQorCisgICAgZGVmIGlzX3Jlc2VydmVkKHNlbGYsIHBhcnRzKToKKyAgICAgICAgIyBOT1RFOiB0aGUgcnVsZXMgZm9yIHJlc2VydmVkIG5hbWVzIHNlZW0gc29tZXdoYXQgY29tcGxpY2F0ZWQKKyAgICAgICAgIyAoZS5nLiByIi4uXE5VTCIgaXMgcmVzZXJ2ZWQgYnV0IG5vdCByImZvb1xOVUwiKS4KKyAgICAgICAgIyBXZSBlcnIgb24gdGhlIHNpZGUgb2YgY2F1dGlvbiBhbmQgcmV0dXJuIFRydWUgZm9yIHBhdGhzIHdoaWNoIGFyZQorICAgICAgICAjIG5vdCBjb25zaWRlcmVkIHJlc2VydmVkIGJ5IFdpbmRvd3MuCisgICAgICAgIGlmIG5vdCBwYXJ0czoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBpZiBwYXJ0c1swXS5zdGFydHN3aXRoKCdcXFxcJyk6CisgICAgICAgICAgICAjIFVOQyBwYXRocyBhcmUgbmV2ZXIgcmVzZXJ2ZWQKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICByZXR1cm4gcGFydHNbLTFdLnBhcnRpdGlvbignLicpWzBdLnVwcGVyKCkgaW4gc2VsZi5yZXNlcnZlZF9uYW1lcworCisgICAgZGVmIG1ha2VfdXJpKHNlbGYsIHBhdGgpOgorICAgICAgICAjIFVuZGVyIFdpbmRvd3MsIGZpbGUgVVJJcyB1c2UgdGhlIFVURi04IGVuY29kaW5nLgorICAgICAgICBkcml2ZSA9IHBhdGguZHJpdmUKKyAgICAgICAgaWYgbGVuKGRyaXZlKSA9PSAyIGFuZCBkcml2ZVsxXSA9PSAnOic6CisgICAgICAgICAgICAjIEl0J3MgYSBwYXRoIG9uIGEgbG9jYWwgZHJpdmUgPT4gJ2ZpbGU6Ly8vYzovYS9iJworICAgICAgICAgICAgcmVzdCA9IHBhdGguYXNfcG9zaXgoKVsyOl0ubHN0cmlwKCcvJykKKyAgICAgICAgICAgIHJldHVybiAnZmlsZTovLy8lcy8lcycgJSAoCisgICAgICAgICAgICAgICAgZHJpdmUsIHVybHF1b3RlX2Zyb21fYnl0ZXMocmVzdC5lbmNvZGUoJ3V0Zi04JykpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBJdCdzIGEgcGF0aCBvbiBhIG5ldHdvcmsgZHJpdmUgPT4gJ2ZpbGU6Ly9ob3N0L3NoYXJlL2EvYicKKyAgICAgICAgICAgIHJldHVybiAnZmlsZTonICsgdXJscXVvdGVfZnJvbV9ieXRlcyhwYXRoLmFzX3Bvc2l4KCkuZW5jb2RlKCd1dGYtOCcpKQorCisKK2NsYXNzIF9Qb3NpeEZsYXZvdXIoX0ZsYXZvdXIpOgorICAgIHNlcCA9ICcvJworICAgIGFsdHNlcCA9ICcnCisgICAgaGFzX2RydiA9IEZhbHNlCisgICAgcGF0aG1vZCA9IHBvc2l4cGF0aAorCisgICAgaXNfc3VwcG9ydGVkID0gKG9zLm5hbWUgIT0gJ250JykKKworICAgIGRlZiBzcGxpdHJvb3Qoc2VsZiwgcGFydCwgc2VwPXNlcCk6CisgICAgICAgIGlmIHBhcnQgYW5kIHBhcnRbMF0gPT0gc2VwOgorICAgICAgICAgICAgc3RyaXBwZWRfcGFydCA9IHBhcnQubHN0cmlwKHNlcCkKKyAgICAgICAgICAgICMgQWNjb3JkaW5nIHRvIFBPU0lYIHBhdGggcmVzb2x1dGlvbjoKKyAgICAgICAgICAgICMgaHR0cDovL3B1YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzAwOTY5NTM5OS9iYXNlZGVmcy94YmRfY2hhcDA0Lmh0bWwjdGFnXzA0XzExCisgICAgICAgICAgICAjICJBIHBhdGhuYW1lIHRoYXQgYmVnaW5zIHdpdGggdHdvIHN1Y2Nlc3NpdmUgc2xhc2hlcyBtYXkgYmUKKyAgICAgICAgICAgICMgaW50ZXJwcmV0ZWQgaW4gYW4gaW1wbGVtZW50YXRpb24tZGVmaW5lZCBtYW5uZXIsIGFsdGhvdWdoIG1vcmUKKyAgICAgICAgICAgICMgdGhhbiB0d28gbGVhZGluZyBzbGFzaGVzIHNoYWxsIGJlIHRyZWF0ZWQgYXMgYSBzaW5nbGUgc2xhc2giLgorICAgICAgICAgICAgaWYgbGVuKHBhcnQpIC0gbGVuKHN0cmlwcGVkX3BhcnQpID09IDI6CisgICAgICAgICAgICAgICAgcmV0dXJuICcnLCBzZXAgKiAyLCBzdHJpcHBlZF9wYXJ0CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiAnJywgc2VwLCBzdHJpcHBlZF9wYXJ0CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gJycsICcnLCBwYXJ0CisKKyAgICBkZWYgY2FzZWZvbGQoc2VsZiwgcyk6CisgICAgICAgIHJldHVybiBzCisKKyAgICBkZWYgY2FzZWZvbGRfcGFydHMoc2VsZiwgcGFydHMpOgorICAgICAgICByZXR1cm4gcGFydHMKKworICAgIGRlZiByZXNvbHZlKHNlbGYsIHBhdGgpOgorICAgICAgICBzZXAgPSBzZWxmLnNlcAorICAgICAgICBhY2Nlc3NvciA9IHBhdGguX2FjY2Vzc29yCisgICAgICAgIHNlZW4gPSB7fQorICAgICAgICBkZWYgX3Jlc29sdmUocGF0aCwgcmVzdCk6CisgICAgICAgICAgICBpZiByZXN0LnN0YXJ0c3dpdGgoc2VwKToKKyAgICAgICAgICAgICAgICBwYXRoID0gJycKKworICAgICAgICAgICAgZm9yIG5hbWUgaW4gcmVzdC5zcGxpdChzZXApOgorICAgICAgICAgICAgICAgIGlmIG5vdCBuYW1lIG9yIG5hbWUgPT0gJy4nOgorICAgICAgICAgICAgICAgICAgICAjIGN1cnJlbnQgZGlyCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgaWYgbmFtZSA9PSAnLi4nOgorICAgICAgICAgICAgICAgICAgICAjIHBhcmVudCBkaXIKKyAgICAgICAgICAgICAgICAgICAgcGF0aCwgXywgXyA9IHBhdGgucnBhcnRpdGlvbihzZXApCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgbmV3cGF0aCA9IHBhdGggKyBzZXAgKyBuYW1lCisgICAgICAgICAgICAgICAgaWYgbmV3cGF0aCBpbiBzZWVuOgorICAgICAgICAgICAgICAgICAgICAjIEFscmVhZHkgc2VlbiB0aGlzIHBhdGgKKyAgICAgICAgICAgICAgICAgICAgcGF0aCA9IHNlZW5bbmV3cGF0aF0KKyAgICAgICAgICAgICAgICAgICAgaWYgcGF0aCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgICMgdXNlIGNhY2hlZCB2YWx1ZQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgIyBUaGUgc3ltbGluayBpcyBub3QgcmVzb2x2ZWQsIHNvIHdlIG11c3QgaGF2ZSBhIHN5bWxpbmsgbG9vcC4KKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJTeW1saW5rIGxvb3AgZnJvbSAlciIgJSBuZXdwYXRoKQorICAgICAgICAgICAgICAgICMgUmVzb2x2ZSB0aGUgc3ltYm9saWMgbGluaworICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0ID0gYWNjZXNzb3IucmVhZGxpbmsobmV3cGF0aCkKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IEVJTlZBTDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAgICAgICAgICMgTm90IGEgc3ltbGluaworICAgICAgICAgICAgICAgICAgICBwYXRoID0gbmV3cGF0aAorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNlZW5bbmV3cGF0aF0gPSBOb25lICMgbm90IHJlc29sdmVkIHN5bWxpbmsKKyAgICAgICAgICAgICAgICAgICAgcGF0aCA9IF9yZXNvbHZlKHBhdGgsIHRhcmdldCkKKyAgICAgICAgICAgICAgICAgICAgc2VlbltuZXdwYXRoXSA9IHBhdGggIyByZXNvbHZlZCBzeW1saW5rCisKKyAgICAgICAgICAgIHJldHVybiBwYXRoCisgICAgICAgICMgTk9URTogYWNjb3JkaW5nIHRvIFBPU0lYLCBnZXRjd2QoKSBjYW5ub3QgY29udGFpbiBwYXRoIGNvbXBvbmVudHMKKyAgICAgICAgIyB3aGljaCBhcmUgc3ltbGlua3MuCisgICAgICAgIGJhc2UgPSAnJyBpZiBwYXRoLmlzX2Fic29sdXRlKCkgZWxzZSBvcy5nZXRjd2QoKQorICAgICAgICByZXR1cm4gX3Jlc29sdmUoYmFzZSwgc3RyKHBhdGgpKSBvciBzZXAKKworICAgIGRlZiBpc19yZXNlcnZlZChzZWxmLCBwYXJ0cyk6CisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIG1ha2VfdXJpKHNlbGYsIHBhdGgpOgorICAgICAgICAjIFdlIHJlcHJlc2VudCB0aGUgcGF0aCB1c2luZyB0aGUgbG9jYWwgZmlsZXN5c3RlbSBlbmNvZGluZywKKyAgICAgICAgIyBmb3IgcG9ydGFiaWxpdHkgdG8gb3RoZXIgYXBwbGljYXRpb25zLgorICAgICAgICBicGF0aCA9IGJ5dGVzKHBhdGgpCisgICAgICAgIHJldHVybiAnZmlsZTovLycgKyB1cmxxdW90ZV9mcm9tX2J5dGVzKGJwYXRoKQorCisKK193aW5kb3dzX2ZsYXZvdXIgPSBfV2luZG93c0ZsYXZvdXIoKQorX3Bvc2l4X2ZsYXZvdXIgPSBfUG9zaXhGbGF2b3VyKCkKKworCitjbGFzcyBfQWNjZXNzb3I6CisgICAgIiIiQW4gYWNjZXNzb3IgaW1wbGVtZW50cyBhIHBhcnRpY3VsYXIgKHN5c3RlbS1zcGVjaWZpYyBvciBub3QpIHdheSBvZgorICAgIGFjY2Vzc2luZyBwYXRocyBvbiB0aGUgZmlsZXN5c3RlbS4iIiIKKworCitjbGFzcyBfTm9ybWFsQWNjZXNzb3IoX0FjY2Vzc29yKToKKworICAgIGRlZiBfd3JhcF9zdHJmdW5jKHN0cmZ1bmMpOgorICAgICAgICBAZnVuY3Rvb2xzLndyYXBzKHN0cmZ1bmMpCisgICAgICAgIGRlZiB3cmFwcGVkKHBhdGhvYmosICphcmdzKToKKyAgICAgICAgICAgIHJldHVybiBzdHJmdW5jKHN0cihwYXRob2JqKSwgKmFyZ3MpCisgICAgICAgIHJldHVybiBzdGF0aWNtZXRob2Qod3JhcHBlZCkKKworICAgIGRlZiBfd3JhcF9iaW5hcnlfc3RyZnVuYyhzdHJmdW5jKToKKyAgICAgICAgQGZ1bmN0b29scy53cmFwcyhzdHJmdW5jKQorICAgICAgICBkZWYgd3JhcHBlZChwYXRob2JqQSwgcGF0aG9iakIsICphcmdzKToKKyAgICAgICAgICAgIHJldHVybiBzdHJmdW5jKHN0cihwYXRob2JqQSksIHN0cihwYXRob2JqQiksICphcmdzKQorICAgICAgICByZXR1cm4gc3RhdGljbWV0aG9kKHdyYXBwZWQpCisKKyAgICBzdGF0ID0gX3dyYXBfc3RyZnVuYyhvcy5zdGF0KQorCisgICAgbHN0YXQgPSBfd3JhcF9zdHJmdW5jKG9zLmxzdGF0KQorCisgICAgb3BlbiA9IF93cmFwX3N0cmZ1bmMob3Mub3BlbikKKworICAgIGxpc3RkaXIgPSBfd3JhcF9zdHJmdW5jKG9zLmxpc3RkaXIpCisKKyAgICBjaG1vZCA9IF93cmFwX3N0cmZ1bmMob3MuY2htb2QpCisKKyAgICBpZiBoYXNhdHRyKG9zLCAibGNobW9kIik6CisgICAgICAgIGxjaG1vZCA9IF93cmFwX3N0cmZ1bmMob3MubGNobW9kKQorICAgIGVsc2U6CisgICAgICAgIGRlZiBsY2htb2Qoc2VsZiwgcGF0aG9iaiwgbW9kZSk6CisgICAgICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCJsY2htb2QoKSBub3QgYXZhaWxhYmxlIG9uIHRoaXMgc3lzdGVtIikKKworICAgIG1rZGlyID0gX3dyYXBfc3RyZnVuYyhvcy5ta2RpcikKKworICAgIHVubGluayA9IF93cmFwX3N0cmZ1bmMob3MudW5saW5rKQorCisgICAgcm1kaXIgPSBfd3JhcF9zdHJmdW5jKG9zLnJtZGlyKQorCisgICAgcmVuYW1lID0gX3dyYXBfYmluYXJ5X3N0cmZ1bmMob3MucmVuYW1lKQorCisgICAgcmVwbGFjZSA9IF93cmFwX2JpbmFyeV9zdHJmdW5jKG9zLnJlcGxhY2UpCisKKyAgICBpZiBudDoKKyAgICAgICAgaWYgc3VwcG9ydHNfc3ltbGlua3M6CisgICAgICAgICAgICBzeW1saW5rID0gX3dyYXBfYmluYXJ5X3N0cmZ1bmMob3Muc3ltbGluaykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGRlZiBzeW1saW5rKGEsIGIsIHRhcmdldF9pc19kaXJlY3RvcnkpOgorICAgICAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoInN5bWxpbmsoKSBub3QgYXZhaWxhYmxlIG9uIHRoaXMgc3lzdGVtIikKKyAgICBlbHNlOgorICAgICAgICAjIFVuZGVyIFBPU0lYLCBvcy5zeW1saW5rKCkgdGFrZXMgdHdvIGFyZ3MKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgc3ltbGluayhhLCBiLCB0YXJnZXRfaXNfZGlyZWN0b3J5KToKKyAgICAgICAgICAgIHJldHVybiBvcy5zeW1saW5rKHN0cihhKSwgc3RyKGIpKQorCisgICAgdXRpbWUgPSBfd3JhcF9zdHJmdW5jKG9zLnV0aW1lKQorCisgICAgIyBIZWxwZXIgZm9yIHJlc29sdmUoKQorICAgIGRlZiByZWFkbGluayhzZWxmLCBwYXRoKToKKyAgICAgICAgcmV0dXJuIG9zLnJlYWRsaW5rKHBhdGgpCisKKworX25vcm1hbF9hY2Nlc3NvciA9IF9Ob3JtYWxBY2Nlc3NvcigpCisKKworIworIyBHbG9iYmluZyBoZWxwZXJzCisjCisKK0Bjb250ZXh0bWFuYWdlcgorZGVmIF9jYWNoZWQoZnVuYyk6CisgICAgdHJ5OgorICAgICAgICBmdW5jLl9fY2FjaGVkX18KKyAgICAgICAgeWllbGQgZnVuYworICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgY2FjaGUgPSB7fQorICAgICAgICBkZWYgd3JhcHBlcigqYXJncyk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGNhY2hlW2FyZ3NdCisgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICAgICAgdmFsdWUgPSBjYWNoZVthcmdzXSA9IGZ1bmMoKmFyZ3MpCisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlCisgICAgICAgIHdyYXBwZXIuX19jYWNoZWRfXyA9IFRydWUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgeWllbGQgd3JhcHBlcgorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgY2FjaGUuY2xlYXIoKQorCitkZWYgX21ha2Vfc2VsZWN0b3IocGF0dGVybl9wYXJ0cyk6CisgICAgcGF0ID0gcGF0dGVybl9wYXJ0c1swXQorICAgIGNoaWxkX3BhcnRzID0gcGF0dGVybl9wYXJ0c1sxOl0KKyAgICBpZiBwYXQgPT0gJyoqJzoKKyAgICAgICAgY2xzID0gX1JlY3Vyc2l2ZVdpbGRjYXJkU2VsZWN0b3IKKyAgICBlbGlmICcqKicgaW4gcGF0OgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJJbnZhbGlkIHBhdHRlcm46ICcqKicgY2FuIG9ubHkgYmUgYW4gZW50aXJlIHBhdGggY29tcG9uZW50IikKKyAgICBlbGlmIF9pc193aWxkY2FyZF9wYXR0ZXJuKHBhdCk6CisgICAgICAgIGNscyA9IF9XaWxkY2FyZFNlbGVjdG9yCisgICAgZWxzZToKKyAgICAgICAgY2xzID0gX1ByZWNpc2VTZWxlY3RvcgorICAgIHJldHVybiBjbHMocGF0LCBjaGlsZF9wYXJ0cykKKworaWYgaGFzYXR0cihmdW5jdG9vbHMsICJscnVfY2FjaGUiKToKKyAgICBfbWFrZV9zZWxlY3RvciA9IGZ1bmN0b29scy5scnVfY2FjaGUoKShfbWFrZV9zZWxlY3RvcikKKworCitjbGFzcyBfU2VsZWN0b3I6CisgICAgIiIiQSBzZWxlY3RvciBtYXRjaGVzIGEgc3BlY2lmaWMgZ2xvYiBwYXR0ZXJuIHBhcnQgYWdhaW5zdCB0aGUgY2hpbGRyZW4KKyAgICBvZiBhIGdpdmVuIHBhdGguIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY2hpbGRfcGFydHMpOgorICAgICAgICBzZWxmLmNoaWxkX3BhcnRzID0gY2hpbGRfcGFydHMKKyAgICAgICAgaWYgY2hpbGRfcGFydHM6CisgICAgICAgICAgICBzZWxmLnN1Y2Nlc3NvciA9IF9tYWtlX3NlbGVjdG9yKGNoaWxkX3BhcnRzKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5zdWNjZXNzb3IgPSBfVGVybWluYXRpbmdTZWxlY3RvcigpCisKKyAgICBkZWYgc2VsZWN0X2Zyb20oc2VsZiwgcGFyZW50X3BhdGgpOgorICAgICAgICAiIiJJdGVyYXRlIG92ZXIgYWxsIGNoaWxkIHBhdGhzIG9mIGBwYXJlbnRfcGF0aGAgbWF0Y2hlZCBieSB0aGlzCisgICAgICAgIHNlbGVjdG9yLiAgVGhpcyBjYW4gY29udGFpbiBwYXJlbnRfcGF0aCBpdHNlbGYuIiIiCisgICAgICAgIHBhdGhfY2xzID0gdHlwZShwYXJlbnRfcGF0aCkKKyAgICAgICAgaXNfZGlyID0gcGF0aF9jbHMuaXNfZGlyCisgICAgICAgIGV4aXN0cyA9IHBhdGhfY2xzLmV4aXN0cworICAgICAgICBsaXN0ZGlyID0gcGFyZW50X3BhdGguX2FjY2Vzc29yLmxpc3RkaXIKKyAgICAgICAgcmV0dXJuIHNlbGYuX3NlbGVjdF9mcm9tKHBhcmVudF9wYXRoLCBpc19kaXIsIGV4aXN0cywgbGlzdGRpcikKKworCitjbGFzcyBfVGVybWluYXRpbmdTZWxlY3RvcjoKKworICAgIGRlZiBfc2VsZWN0X2Zyb20oc2VsZiwgcGFyZW50X3BhdGgsIGlzX2RpciwgZXhpc3RzLCBsaXN0ZGlyKToKKyAgICAgICAgeWllbGQgcGFyZW50X3BhdGgKKworCitjbGFzcyBfUHJlY2lzZVNlbGVjdG9yKF9TZWxlY3Rvcik6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgY2hpbGRfcGFydHMpOgorICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCisgICAgICAgIF9TZWxlY3Rvci5fX2luaXRfXyhzZWxmLCBjaGlsZF9wYXJ0cykKKworICAgIGRlZiBfc2VsZWN0X2Zyb20oc2VsZiwgcGFyZW50X3BhdGgsIGlzX2RpciwgZXhpc3RzLCBsaXN0ZGlyKToKKyAgICAgICAgaWYgbm90IGlzX2RpcihwYXJlbnRfcGF0aCk6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgcGF0aCA9IHBhcmVudF9wYXRoLl9tYWtlX2NoaWxkX3JlbHBhdGgoc2VsZi5uYW1lKQorICAgICAgICBpZiBleGlzdHMocGF0aCk6CisgICAgICAgICAgICBmb3IgcCBpbiBzZWxmLnN1Y2Nlc3Nvci5fc2VsZWN0X2Zyb20ocGF0aCwgaXNfZGlyLCBleGlzdHMsIGxpc3RkaXIpOgorICAgICAgICAgICAgICAgIHlpZWxkIHAKKworCitjbGFzcyBfV2lsZGNhcmRTZWxlY3RvcihfU2VsZWN0b3IpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdCwgY2hpbGRfcGFydHMpOgorICAgICAgICBzZWxmLnBhdCA9IHJlLmNvbXBpbGUoZm5tYXRjaC50cmFuc2xhdGUocGF0KSkKKyAgICAgICAgX1NlbGVjdG9yLl9faW5pdF9fKHNlbGYsIGNoaWxkX3BhcnRzKQorCisgICAgZGVmIF9zZWxlY3RfZnJvbShzZWxmLCBwYXJlbnRfcGF0aCwgaXNfZGlyLCBleGlzdHMsIGxpc3RkaXIpOgorICAgICAgICBpZiBub3QgaXNfZGlyKHBhcmVudF9wYXRoKToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBjZiA9IHBhcmVudF9wYXRoLl9mbGF2b3VyLmNhc2Vmb2xkCisgICAgICAgIGZvciBuYW1lIGluIGxpc3RkaXIocGFyZW50X3BhdGgpOgorICAgICAgICAgICAgY2FzZWZvbGRlZCA9IGNmKG5hbWUpCisgICAgICAgICAgICBpZiBzZWxmLnBhdC5tYXRjaChjYXNlZm9sZGVkKToKKyAgICAgICAgICAgICAgICBwYXRoID0gcGFyZW50X3BhdGguX21ha2VfY2hpbGRfcmVscGF0aChuYW1lKQorICAgICAgICAgICAgICAgIGZvciBwIGluIHNlbGYuc3VjY2Vzc29yLl9zZWxlY3RfZnJvbShwYXRoLCBpc19kaXIsIGV4aXN0cywgbGlzdGRpcik6CisgICAgICAgICAgICAgICAgICAgIHlpZWxkIHAKKworCitjbGFzcyBfUmVjdXJzaXZlV2lsZGNhcmRTZWxlY3RvcihfU2VsZWN0b3IpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdCwgY2hpbGRfcGFydHMpOgorICAgICAgICBfU2VsZWN0b3IuX19pbml0X18oc2VsZiwgY2hpbGRfcGFydHMpCisKKyAgICBkZWYgX2l0ZXJhdGVfZGlyZWN0b3JpZXMoc2VsZiwgcGFyZW50X3BhdGgsIGlzX2RpciwgbGlzdGRpcik6CisgICAgICAgIHlpZWxkIHBhcmVudF9wYXRoCisgICAgICAgIGZvciBuYW1lIGluIGxpc3RkaXIocGFyZW50X3BhdGgpOgorICAgICAgICAgICAgcGF0aCA9IHBhcmVudF9wYXRoLl9tYWtlX2NoaWxkX3JlbHBhdGgobmFtZSkKKyAgICAgICAgICAgIGlmIGlzX2RpcihwYXRoKToKKyAgICAgICAgICAgICAgICBmb3IgcCBpbiBzZWxmLl9pdGVyYXRlX2RpcmVjdG9yaWVzKHBhdGgsIGlzX2RpciwgbGlzdGRpcik6CisgICAgICAgICAgICAgICAgICAgIHlpZWxkIHAKKworICAgIGRlZiBfc2VsZWN0X2Zyb20oc2VsZiwgcGFyZW50X3BhdGgsIGlzX2RpciwgZXhpc3RzLCBsaXN0ZGlyKToKKyAgICAgICAgaWYgbm90IGlzX2RpcihwYXJlbnRfcGF0aCk6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgd2l0aCBfY2FjaGVkKGxpc3RkaXIpIGFzIGxpc3RkaXI6CisgICAgICAgICAgICB5aWVsZGVkID0gc2V0KCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzdWNjZXNzb3Jfc2VsZWN0ID0gc2VsZi5zdWNjZXNzb3IuX3NlbGVjdF9mcm9tCisgICAgICAgICAgICAgICAgZm9yIHN0YXJ0aW5nX3BvaW50IGluIHNlbGYuX2l0ZXJhdGVfZGlyZWN0b3JpZXMocGFyZW50X3BhdGgsIGlzX2RpciwgbGlzdGRpcik6CisgICAgICAgICAgICAgICAgICAgIGZvciBwIGluIHN1Y2Nlc3Nvcl9zZWxlY3Qoc3RhcnRpbmdfcG9pbnQsIGlzX2RpciwgZXhpc3RzLCBsaXN0ZGlyKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHAgbm90IGluIHlpZWxkZWQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeWllbGQgcAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlpZWxkZWQuYWRkKHApCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHlpZWxkZWQuY2xlYXIoKQorCisKKyMKKyMgUHVibGljIEFQSQorIworCitjbGFzcyBfUGF0aFBhcmVudHMoU2VxdWVuY2UpOgorICAgICIiIlRoaXMgb2JqZWN0IHByb3ZpZGVzIHNlcXVlbmNlLWxpa2UgYWNjZXNzIHRvIHRoZSBsb2dpY2FsIGFuY2VzdG9ycworICAgIG9mIGEgcGF0aC4gIERvbid0IHRyeSB0byBjb25zdHJ1Y3QgaXQgeW91cnNlbGYuIiIiCisgICAgX19zbG90c19fID0gKCdfcGF0aGNscycsICdfZHJ2JywgJ19yb290JywgJ19wYXJ0cycpCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcGF0aCk6CisgICAgICAgICMgV2UgZG9uJ3Qgc3RvcmUgdGhlIGluc3RhbmNlIHRvIGF2b2lkIHJlZmVyZW5jZSBjeWNsZXMKKyAgICAgICAgc2VsZi5fcGF0aGNscyA9IHR5cGUocGF0aCkKKyAgICAgICAgc2VsZi5fZHJ2ID0gcGF0aC5fZHJ2CisgICAgICAgIHNlbGYuX3Jvb3QgPSBwYXRoLl9yb290CisgICAgICAgIHNlbGYuX3BhcnRzID0gcGF0aC5fcGFydHMKKworICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9kcnYgb3Igc2VsZi5fcm9vdDoKKyAgICAgICAgICAgIHJldHVybiBsZW4oc2VsZi5fcGFydHMpIC0gMQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIGxlbihzZWxmLl9wYXJ0cykKKworICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBpZHgpOgorICAgICAgICBpZiBpZHggPCAwIG9yIGlkeCA+PSBsZW4oc2VsZik6CisgICAgICAgICAgICByYWlzZSBJbmRleEVycm9yKGlkeCkKKyAgICAgICAgcmV0dXJuIHNlbGYuX3BhdGhjbHMuX2Zyb21fcGFyc2VkX3BhcnRzKHNlbGYuX2Rydiwgc2VsZi5fcm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3BhcnRzWzotaWR4IC0gMV0pCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiPHt9LnBhcmVudHM+Ii5mb3JtYXQoc2VsZi5fcGF0aGNscy5fX25hbWVfXykKKworCitjbGFzcyBQdXJlUGF0aChvYmplY3QpOgorICAgICIiIlB1cmVQYXRoIHJlcHJlc2VudHMgYSBmaWxlc3lzdGVtIHBhdGggYW5kIG9mZmVycyBvcGVyYXRpb25zIHdoaWNoCisgICAgZG9uJ3QgaW1wbHkgYW55IGFjdHVhbCBmaWxlc3lzdGVtIEkvTy4gIERlcGVuZGluZyBvbiB5b3VyIHN5c3RlbSwKKyAgICBpbnN0YW50aWF0aW5nIGEgUHVyZVBhdGggd2lsbCByZXR1cm4gZWl0aGVyIGEgUHVyZVBvc2l4UGF0aCBvciBhCisgICAgUHVyZVdpbmRvd3NQYXRoIG9iamVjdC4gIFlvdSBjYW4gYWxzbyBpbnN0YW50aWF0ZSBlaXRoZXIgb2YgdGhlc2UgY2xhc3NlcworICAgIGRpcmVjdGx5LCByZWdhcmRsZXNzIG9mIHlvdXIgc3lzdGVtLgorICAgICIiIgorICAgIF9fc2xvdHNfXyA9ICgKKyAgICAgICAgJ19kcnYnLCAnX3Jvb3QnLCAnX3BhcnRzJywKKyAgICAgICAgJ19zdHInLCAnX2hhc2gnLCAnX3BwYXJ0cycsICdfY2FjaGVkX2NwYXJ0cycsCisgICAgKQorCisgICAgZGVmIF9fbmV3X18oY2xzLCAqYXJncyk6CisgICAgICAgICIiIkNvbnN0cnVjdCBhIFB1cmVQYXRoIGZyb20gb25lIG9yIHNldmVyYWwgc3RyaW5ncyBhbmQgb3IgZXhpc3RpbmcKKyAgICAgICAgUHVyZVBhdGggb2JqZWN0cy4gIFRoZSBzdHJpbmdzIGFuZCBwYXRoIG9iamVjdHMgYXJlIGNvbWJpbmVkIHNvIGFzCisgICAgICAgIHRvIHlpZWxkIGEgY2Fub25pY2FsaXplZCBwYXRoLCB3aGljaCBpcyBpbmNvcnBvcmF0ZWQgaW50byB0aGUKKyAgICAgICAgbmV3IFB1cmVQYXRoIG9iamVjdC4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIGNscyBpcyBQdXJlUGF0aDoKKyAgICAgICAgICAgIGNscyA9IFB1cmVXaW5kb3dzUGF0aCBpZiBvcy5uYW1lID09ICdudCcgZWxzZSBQdXJlUG9zaXhQYXRoCisgICAgICAgIHJldHVybiBjbHMuX2Zyb21fcGFydHMoYXJncykKKworICAgIGRlZiBfX3JlZHVjZV9fKHNlbGYpOgorICAgICAgICAjIFVzaW5nIHRoZSBwYXJ0cyB0dXBsZSBoZWxwcyBzaGFyZSBpbnRlcm5lZCBwYXRoIHBhcnRzCisgICAgICAgICMgd2hlbiBwaWNrbGluZyByZWxhdGVkIHBhdGhzLgorICAgICAgICByZXR1cm4gKHNlbGYuX19jbGFzc19fLCB0dXBsZShzZWxmLl9wYXJ0cykpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX3BhcnNlX2FyZ3MoY2xzLCBhcmdzKToKKyAgICAgICAgIyBUaGlzIGlzIHVzZWZ1bCB3aGVuIHlvdSBkb24ndCB3YW50IHRvIGNyZWF0ZSBhbiBpbnN0YW5jZSwganVzdAorICAgICAgICAjIGNhbm9uaWNhbGl6ZSBzb21lIGNvbnN0cnVjdG9yIGFyZ3VtZW50cy4KKyAgICAgICAgcGFydHMgPSBbXQorICAgICAgICBmb3IgYSBpbiBhcmdzOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShhLCBQdXJlUGF0aCk6CisgICAgICAgICAgICAgICAgcGFydHMgKz0gYS5fcGFydHMKKyAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShhLCBzdHIpOgorICAgICAgICAgICAgICAgICMgRm9yY2UtY2FzdCBzdHIgc3ViY2xhc3NlcyB0byBzdHIgKGlzc3VlICMyMTEyNykKKyAgICAgICAgICAgICAgICBwYXJ0cy5hcHBlbmQoc3RyKGEpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoCisgICAgICAgICAgICAgICAgICAgICJhcmd1bWVudCBzaG91bGQgYmUgYSBwYXRoIG9yIHN0ciBvYmplY3QsIG5vdCAlciIKKyAgICAgICAgICAgICAgICAgICAgJSB0eXBlKGEpKQorICAgICAgICByZXR1cm4gY2xzLl9mbGF2b3VyLnBhcnNlX3BhcnRzKHBhcnRzKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9mcm9tX3BhcnRzKGNscywgYXJncywgaW5pdD1UcnVlKToKKyAgICAgICAgIyBXZSBuZWVkIHRvIGNhbGwgX3BhcnNlX2FyZ3Mgb24gdGhlIGluc3RhbmNlLCBzbyBhcyB0byBnZXQgdGhlCisgICAgICAgICMgcmlnaHQgZmxhdm91ci4KKyAgICAgICAgc2VsZiA9IG9iamVjdC5fX25ld19fKGNscykKKyAgICAgICAgZHJ2LCByb290LCBwYXJ0cyA9IHNlbGYuX3BhcnNlX2FyZ3MoYXJncykKKyAgICAgICAgc2VsZi5fZHJ2ID0gZHJ2CisgICAgICAgIHNlbGYuX3Jvb3QgPSByb290CisgICAgICAgIHNlbGYuX3BhcnRzID0gcGFydHMKKyAgICAgICAgaWYgaW5pdDoKKyAgICAgICAgICAgIHNlbGYuX2luaXQoKQorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9mcm9tX3BhcnNlZF9wYXJ0cyhjbHMsIGRydiwgcm9vdCwgcGFydHMsIGluaXQ9VHJ1ZSk6CisgICAgICAgIHNlbGYgPSBvYmplY3QuX19uZXdfXyhjbHMpCisgICAgICAgIHNlbGYuX2RydiA9IGRydgorICAgICAgICBzZWxmLl9yb290ID0gcm9vdAorICAgICAgICBzZWxmLl9wYXJ0cyA9IHBhcnRzCisgICAgICAgIGlmIGluaXQ6CisgICAgICAgICAgICBzZWxmLl9pbml0KCkKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfZm9ybWF0X3BhcnNlZF9wYXJ0cyhjbHMsIGRydiwgcm9vdCwgcGFydHMpOgorICAgICAgICBpZiBkcnYgb3Igcm9vdDoKKyAgICAgICAgICAgIHJldHVybiBkcnYgKyByb290ICsgY2xzLl9mbGF2b3VyLmpvaW4ocGFydHNbMTpdKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIGNscy5fZmxhdm91ci5qb2luKHBhcnRzKQorCisgICAgZGVmIF9pbml0KHNlbGYpOgorICAgICAgICAjIE92ZXJyaWRlbiBpbiBjb25jcmV0ZSBQYXRoCisgICAgICAgIHBhc3MKKworICAgIGRlZiBfbWFrZV9jaGlsZChzZWxmLCBhcmdzKToKKyAgICAgICAgZHJ2LCByb290LCBwYXJ0cyA9IHNlbGYuX3BhcnNlX2FyZ3MoYXJncykKKyAgICAgICAgZHJ2LCByb290LCBwYXJ0cyA9IHNlbGYuX2ZsYXZvdXIuam9pbl9wYXJzZWRfcGFydHMoCisgICAgICAgICAgICBzZWxmLl9kcnYsIHNlbGYuX3Jvb3QsIHNlbGYuX3BhcnRzLCBkcnYsIHJvb3QsIHBhcnRzKQorICAgICAgICByZXR1cm4gc2VsZi5fZnJvbV9wYXJzZWRfcGFydHMoZHJ2LCByb290LCBwYXJ0cykKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgcGF0aCwgc3VpdGFibGUgZm9yCisgICAgICAgIHBhc3NpbmcgdG8gc3lzdGVtIGNhbGxzLiIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fc3RyCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHNlbGYuX3N0ciA9IHNlbGYuX2Zvcm1hdF9wYXJzZWRfcGFydHMoc2VsZi5fZHJ2LCBzZWxmLl9yb290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9wYXJ0cykgb3IgJy4nCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fc3RyCisKKyAgICBkZWYgYXNfcG9zaXgoc2VsZik6CisgICAgICAgICIiIlJldHVybiB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBwYXRoIHdpdGggZm9yd2FyZCAoLykKKyAgICAgICAgc2xhc2hlcy4iIiIKKyAgICAgICAgZiA9IHNlbGYuX2ZsYXZvdXIKKyAgICAgICAgcmV0dXJuIHN0cihzZWxmKS5yZXBsYWNlKGYuc2VwLCAnLycpCisKKyAgICBkZWYgX19ieXRlc19fKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIGJ5dGVzIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBwYXRoLiAgVGhpcyBpcyBvbmx5CisgICAgICAgIHJlY29tbWVuZGVkIHRvIHVzZSB1bmRlciBVbml4LiIiIgorICAgICAgICByZXR1cm4gb3MuZnNlbmNvZGUoc3RyKHNlbGYpKQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gInt9KHshcn0pIi5mb3JtYXQoc2VsZi5fX2NsYXNzX18uX19uYW1lX18sIHNlbGYuYXNfcG9zaXgoKSkKKworICAgIGRlZiBhc191cmkoc2VsZik6CisgICAgICAgICIiIlJldHVybiB0aGUgcGF0aCBhcyBhICdmaWxlJyBVUkkuIiIiCisgICAgICAgIGlmIG5vdCBzZWxmLmlzX2Fic29sdXRlKCk6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJyZWxhdGl2ZSBwYXRoIGNhbid0IGJlIGV4cHJlc3NlZCBhcyBhIGZpbGUgVVJJIikKKyAgICAgICAgcmV0dXJuIHNlbGYuX2ZsYXZvdXIubWFrZV91cmkoc2VsZikKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBfY3BhcnRzKHNlbGYpOgorICAgICAgICAjIENhY2hlZCBjYXNlZm9sZGVkIHBhcnRzLCBmb3IgaGFzaGluZyBhbmQgY29tcGFyaXNvbgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fY2FjaGVkX2NwYXJ0cworICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBzZWxmLl9jYWNoZWRfY3BhcnRzID0gc2VsZi5fZmxhdm91ci5jYXNlZm9sZF9wYXJ0cyhzZWxmLl9wYXJ0cykKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9jYWNoZWRfY3BhcnRzCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIFB1cmVQYXRoKToKKyAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgICAgICByZXR1cm4gc2VsZi5fY3BhcnRzID09IG90aGVyLl9jcGFydHMgYW5kIHNlbGYuX2ZsYXZvdXIgaXMgb3RoZXIuX2ZsYXZvdXIKKworICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2hhc2gKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgc2VsZi5faGFzaCA9IGhhc2godHVwbGUoc2VsZi5fY3BhcnRzKSkKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9oYXNoCisKKyAgICBkZWYgX19sdF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIFB1cmVQYXRoKSBvciBzZWxmLl9mbGF2b3VyIGlzIG5vdCBvdGhlci5fZmxhdm91cjoKKyAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgICAgICByZXR1cm4gc2VsZi5fY3BhcnRzIDwgb3RoZXIuX2NwYXJ0cworCisgICAgZGVmIF9fbGVfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBQdXJlUGF0aCkgb3Igc2VsZi5fZmxhdm91ciBpcyBub3Qgb3RoZXIuX2ZsYXZvdXI6CisgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICAgICAgcmV0dXJuIHNlbGYuX2NwYXJ0cyA8PSBvdGhlci5fY3BhcnRzCisKKyAgICBkZWYgX19ndF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIFB1cmVQYXRoKSBvciBzZWxmLl9mbGF2b3VyIGlzIG5vdCBvdGhlci5fZmxhdm91cjoKKyAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgICAgICByZXR1cm4gc2VsZi5fY3BhcnRzID4gb3RoZXIuX2NwYXJ0cworCisgICAgZGVmIF9fZ2VfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBQdXJlUGF0aCkgb3Igc2VsZi5fZmxhdm91ciBpcyBub3Qgb3RoZXIuX2ZsYXZvdXI6CisgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICAgICAgcmV0dXJuIHNlbGYuX2NwYXJ0cyA+PSBvdGhlci5fY3BhcnRzCisKKyAgICBkcml2ZSA9IHByb3BlcnR5KGF0dHJnZXR0ZXIoJ19kcnYnKSwKKyAgICAgICAgICAgICAgICAgICAgIGRvYz0iIiJUaGUgZHJpdmUgcHJlZml4IChsZXR0ZXIgb3IgVU5DIHBhdGgpLCBpZiBhbnkuIiIiKQorCisgICAgcm9vdCA9IHByb3BlcnR5KGF0dHJnZXR0ZXIoJ19yb290JyksCisgICAgICAgICAgICAgICAgICAgIGRvYz0iIiJUaGUgcm9vdCBvZiB0aGUgcGF0aCwgaWYgYW55LiIiIikKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBhbmNob3Ioc2VsZik6CisgICAgICAgICIiIlRoZSBjb25jYXRlbmF0aW9uIG9mIHRoZSBkcml2ZSBhbmQgcm9vdCwgb3IgJycuIiIiCisgICAgICAgIGFuY2hvciA9IHNlbGYuX2RydiArIHNlbGYuX3Jvb3QKKyAgICAgICAgcmV0dXJuIGFuY2hvcgorCisgICAgQHByb3BlcnR5CisgICAgZGVmIG5hbWUoc2VsZik6CisgICAgICAgICIiIlRoZSBmaW5hbCBwYXRoIGNvbXBvbmVudCwgaWYgYW55LiIiIgorICAgICAgICBwYXJ0cyA9IHNlbGYuX3BhcnRzCisgICAgICAgIGlmIGxlbihwYXJ0cykgPT0gKDEgaWYgKHNlbGYuX2RydiBvciBzZWxmLl9yb290KSBlbHNlIDApOgorICAgICAgICAgICAgcmV0dXJuICcnCisgICAgICAgIHJldHVybiBwYXJ0c1stMV0KKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBzdWZmaXgoc2VsZik6CisgICAgICAgICIiIlRoZSBmaW5hbCBjb21wb25lbnQncyBsYXN0IHN1ZmZpeCwgaWYgYW55LiIiIgorICAgICAgICBuYW1lID0gc2VsZi5uYW1lCisgICAgICAgIGkgPSBuYW1lLnJmaW5kKCcuJykKKyAgICAgICAgaWYgMCA8IGkgPCBsZW4obmFtZSkgLSAxOgorICAgICAgICAgICAgcmV0dXJuIG5hbWVbaTpdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gJycKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBzdWZmaXhlcyhzZWxmKToKKyAgICAgICAgIiIiQSBsaXN0IG9mIHRoZSBmaW5hbCBjb21wb25lbnQncyBzdWZmaXhlcywgaWYgYW55LiIiIgorICAgICAgICBuYW1lID0gc2VsZi5uYW1lCisgICAgICAgIGlmIG5hbWUuZW5kc3dpdGgoJy4nKToKKyAgICAgICAgICAgIHJldHVybiBbXQorICAgICAgICBuYW1lID0gbmFtZS5sc3RyaXAoJy4nKQorICAgICAgICByZXR1cm4gWycuJyArIHN1ZmZpeCBmb3Igc3VmZml4IGluIG5hbWUuc3BsaXQoJy4nKVsxOl1dCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgc3RlbShzZWxmKToKKyAgICAgICAgIiIiVGhlIGZpbmFsIHBhdGggY29tcG9uZW50LCBtaW51cyBpdHMgbGFzdCBzdWZmaXguIiIiCisgICAgICAgIG5hbWUgPSBzZWxmLm5hbWUKKyAgICAgICAgaSA9IG5hbWUucmZpbmQoJy4nKQorICAgICAgICBpZiAwIDwgaSA8IGxlbihuYW1lKSAtIDE6CisgICAgICAgICAgICByZXR1cm4gbmFtZVs6aV0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBuYW1lCisKKyAgICBkZWYgd2l0aF9uYW1lKHNlbGYsIG5hbWUpOgorICAgICAgICAiIiJSZXR1cm4gYSBuZXcgcGF0aCB3aXRoIHRoZSBmaWxlIG5hbWUgY2hhbmdlZC4iIiIKKyAgICAgICAgaWYgbm90IHNlbGYubmFtZToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIiVyIGhhcyBhbiBlbXB0eSBuYW1lIiAlIChzZWxmLCkpCisgICAgICAgIGRydiwgcm9vdCwgcGFydHMgPSBzZWxmLl9mbGF2b3VyLnBhcnNlX3BhcnRzKChuYW1lLCkpCisgICAgICAgIGlmIChub3QgbmFtZSBvciBuYW1lWy0xXSBpbiBbc2VsZi5fZmxhdm91ci5zZXAsIHNlbGYuX2ZsYXZvdXIuYWx0c2VwXQorICAgICAgICAgICAgb3IgZHJ2IG9yIHJvb3Qgb3IgbGVuKHBhcnRzKSAhPSAxKToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkludmFsaWQgbmFtZSAlciIgJSAobmFtZSkpCisgICAgICAgIHJldHVybiBzZWxmLl9mcm9tX3BhcnNlZF9wYXJ0cyhzZWxmLl9kcnYsIHNlbGYuX3Jvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9wYXJ0c1s6LTFdICsgW25hbWVdKQorCisgICAgZGVmIHdpdGhfc3VmZml4KHNlbGYsIHN1ZmZpeCk6CisgICAgICAgICIiIlJldHVybiBhIG5ldyBwYXRoIHdpdGggdGhlIGZpbGUgc3VmZml4IGNoYW5nZWQgKG9yIGFkZGVkLCBpZiBub25lKS4iIiIKKyAgICAgICAgIyBYWFggaWYgc3VmZml4IGlzIE5vbmUsIHNob3VsZCB0aGUgY3VycmVudCBzdWZmaXggYmUgcmVtb3ZlZD8KKyAgICAgICAgZiA9IHNlbGYuX2ZsYXZvdXIKKyAgICAgICAgaWYgZi5zZXAgaW4gc3VmZml4IG9yIGYuYWx0c2VwIGFuZCBmLmFsdHNlcCBpbiBzdWZmaXg6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJJbnZhbGlkIHN1ZmZpeCAlciIgJSAoc3VmZml4KSkKKyAgICAgICAgaWYgc3VmZml4IGFuZCBub3Qgc3VmZml4LnN0YXJ0c3dpdGgoJy4nKSBvciBzdWZmaXggPT0gJy4nOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiSW52YWxpZCBzdWZmaXggJXIiICUgKHN1ZmZpeCkpCisgICAgICAgIG5hbWUgPSBzZWxmLm5hbWUKKyAgICAgICAgaWYgbm90IG5hbWU6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCIlciBoYXMgYW4gZW1wdHkgbmFtZSIgJSAoc2VsZiwpKQorICAgICAgICBvbGRfc3VmZml4ID0gc2VsZi5zdWZmaXgKKyAgICAgICAgaWYgbm90IG9sZF9zdWZmaXg6CisgICAgICAgICAgICBuYW1lID0gbmFtZSArIHN1ZmZpeAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbmFtZSA9IG5hbWVbOi1sZW4ob2xkX3N1ZmZpeCldICsgc3VmZml4CisgICAgICAgIHJldHVybiBzZWxmLl9mcm9tX3BhcnNlZF9wYXJ0cyhzZWxmLl9kcnYsIHNlbGYuX3Jvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9wYXJ0c1s6LTFdICsgW25hbWVdKQorCisgICAgZGVmIHJlbGF0aXZlX3RvKHNlbGYsICpvdGhlcik6CisgICAgICAgICIiIlJldHVybiB0aGUgcmVsYXRpdmUgcGF0aCB0byBhbm90aGVyIHBhdGggaWRlbnRpZmllZCBieSB0aGUgcGFzc2VkCisgICAgICAgIGFyZ3VtZW50cy4gIElmIHRoZSBvcGVyYXRpb24gaXMgbm90IHBvc3NpYmxlIChiZWNhdXNlIHRoaXMgaXMgbm90CisgICAgICAgIGEgc3VicGF0aCBvZiB0aGUgb3RoZXIgcGF0aCksIHJhaXNlIFZhbHVlRXJyb3IuCisgICAgICAgICIiIgorICAgICAgICAjIEZvciB0aGUgcHVycG9zZSBvZiB0aGlzIG1ldGhvZCwgZHJpdmUgYW5kIHJvb3QgYXJlIGNvbnNpZGVyZWQKKyAgICAgICAgIyBzZXBhcmF0ZSBwYXJ0cywgaS5lLjoKKyAgICAgICAgIyAgIFBhdGgoJ2M6LycpLnJlbGF0aXZlX3RvKCdjOicpICBnaXZlcyBQYXRoKCcvJykKKyAgICAgICAgIyAgIFBhdGgoJ2M6LycpLnJlbGF0aXZlX3RvKCcvJykgICByYWlzZSBWYWx1ZUVycm9yCisgICAgICAgIGlmIG5vdCBvdGhlcjoKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigibmVlZCBhdCBsZWFzdCBvbmUgYXJndW1lbnQiKQorICAgICAgICBwYXJ0cyA9IHNlbGYuX3BhcnRzCisgICAgICAgIGRydiA9IHNlbGYuX2RydgorICAgICAgICByb290ID0gc2VsZi5fcm9vdAorICAgICAgICBpZiByb290OgorICAgICAgICAgICAgYWJzX3BhcnRzID0gW2Rydiwgcm9vdF0gKyBwYXJ0c1sxOl0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFic19wYXJ0cyA9IHBhcnRzCisgICAgICAgIHRvX2RydiwgdG9fcm9vdCwgdG9fcGFydHMgPSBzZWxmLl9wYXJzZV9hcmdzKG90aGVyKQorICAgICAgICBpZiB0b19yb290OgorICAgICAgICAgICAgdG9fYWJzX3BhcnRzID0gW3RvX2RydiwgdG9fcm9vdF0gKyB0b19wYXJ0c1sxOl0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHRvX2Fic19wYXJ0cyA9IHRvX3BhcnRzCisgICAgICAgIG4gPSBsZW4odG9fYWJzX3BhcnRzKQorICAgICAgICBjZiA9IHNlbGYuX2ZsYXZvdXIuY2FzZWZvbGRfcGFydHMKKyAgICAgICAgaWYgKHJvb3Qgb3IgZHJ2KSBpZiBuID09IDAgZWxzZSBjZihhYnNfcGFydHNbOm5dKSAhPSBjZih0b19hYnNfcGFydHMpOgorICAgICAgICAgICAgZm9ybWF0dGVkID0gc2VsZi5fZm9ybWF0X3BhcnNlZF9wYXJ0cyh0b19kcnYsIHRvX3Jvb3QsIHRvX3BhcnRzKQorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigieyFyfSBkb2VzIG5vdCBzdGFydCB3aXRoIHshcn0iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JtYXQoc3RyKHNlbGYpLCBzdHIoZm9ybWF0dGVkKSkpCisgICAgICAgIHJldHVybiBzZWxmLl9mcm9tX3BhcnNlZF9wYXJ0cygnJywgcm9vdCBpZiBuID09IDEgZWxzZSAnJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic19wYXJ0c1tuOl0pCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgcGFydHMoc2VsZik6CisgICAgICAgICIiIkFuIG9iamVjdCBwcm92aWRpbmcgc2VxdWVuY2UtbGlrZSBhY2Nlc3MgdG8gdGhlCisgICAgICAgIGNvbXBvbmVudHMgaW4gdGhlIGZpbGVzeXN0ZW0gcGF0aC4iIiIKKyAgICAgICAgIyBXZSBjYWNoZSB0aGUgdHVwbGUgdG8gYXZvaWQgYnVpbGRpbmcgYSBuZXcgb25lIGVhY2ggdGltZSAucGFydHMKKyAgICAgICAgIyBpcyBhY2Nlc3NlZC4gIFhYWCBpcyB0aGlzIG5lY2Vzc2FyeT8KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3BwYXJ0cworICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBzZWxmLl9wcGFydHMgPSB0dXBsZShzZWxmLl9wYXJ0cykKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9wcGFydHMKKworICAgIGRlZiBqb2lucGF0aChzZWxmLCAqYXJncyk6CisgICAgICAgICIiIkNvbWJpbmUgdGhpcyBwYXRoIHdpdGggb25lIG9yIHNldmVyYWwgYXJndW1lbnRzLCBhbmQgcmV0dXJuIGEKKyAgICAgICAgbmV3IHBhdGggcmVwcmVzZW50aW5nIGVpdGhlciBhIHN1YnBhdGggKGlmIGFsbCBhcmd1bWVudHMgYXJlIHJlbGF0aXZlCisgICAgICAgIHBhdGhzKSBvciBhIHRvdGFsbHkgZGlmZmVyZW50IHBhdGggKGlmIG9uZSBvZiB0aGUgYXJndW1lbnRzIGlzCisgICAgICAgIGFuY2hvcmVkKS4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9tYWtlX2NoaWxkKGFyZ3MpCisKKyAgICBkZWYgX190cnVlZGl2X18oc2VsZiwga2V5KToKKyAgICAgICAgcmV0dXJuIHNlbGYuX21ha2VfY2hpbGQoKGtleSwpKQorCisgICAgZGVmIF9fcnRydWVkaXZfXyhzZWxmLCBrZXkpOgorICAgICAgICByZXR1cm4gc2VsZi5fZnJvbV9wYXJ0cyhba2V5XSArIHNlbGYuX3BhcnRzKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHBhcmVudChzZWxmKToKKyAgICAgICAgIiIiVGhlIGxvZ2ljYWwgcGFyZW50IG9mIHRoZSBwYXRoLiIiIgorICAgICAgICBkcnYgPSBzZWxmLl9kcnYKKyAgICAgICAgcm9vdCA9IHNlbGYuX3Jvb3QKKyAgICAgICAgcGFydHMgPSBzZWxmLl9wYXJ0cworICAgICAgICBpZiBsZW4ocGFydHMpID09IDEgYW5kIChkcnYgb3Igcm9vdCk6CisgICAgICAgICAgICByZXR1cm4gc2VsZgorICAgICAgICByZXR1cm4gc2VsZi5fZnJvbV9wYXJzZWRfcGFydHMoZHJ2LCByb290LCBwYXJ0c1s6LTFdKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHBhcmVudHMoc2VsZik6CisgICAgICAgICIiIkEgc2VxdWVuY2Ugb2YgdGhpcyBwYXRoJ3MgbG9naWNhbCBwYXJlbnRzLiIiIgorICAgICAgICByZXR1cm4gX1BhdGhQYXJlbnRzKHNlbGYpCisKKyAgICBkZWYgaXNfYWJzb2x1dGUoc2VsZik6CisgICAgICAgICIiIlRydWUgaWYgdGhlIHBhdGggaXMgYWJzb2x1dGUgKGhhcyBib3RoIGEgcm9vdCBhbmQsIGlmIGFwcGxpY2FibGUsCisgICAgICAgIGEgZHJpdmUpLiIiIgorICAgICAgICBpZiBub3Qgc2VsZi5fcm9vdDoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICByZXR1cm4gbm90IHNlbGYuX2ZsYXZvdXIuaGFzX2RydiBvciBib29sKHNlbGYuX2RydikKKworICAgIGRlZiBpc19yZXNlcnZlZChzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIFRydWUgaWYgdGhlIHBhdGggY29udGFpbnMgb25lIG9mIHRoZSBzcGVjaWFsIG5hbWVzIHJlc2VydmVkCisgICAgICAgIGJ5IHRoZSBzeXN0ZW0sIGlmIGFueS4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX2ZsYXZvdXIuaXNfcmVzZXJ2ZWQoc2VsZi5fcGFydHMpCisKKyAgICBkZWYgbWF0Y2goc2VsZiwgcGF0aF9wYXR0ZXJuKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybiBUcnVlIGlmIHRoaXMgcGF0aCBtYXRjaGVzIHRoZSBnaXZlbiBwYXR0ZXJuLgorICAgICAgICAiIiIKKyAgICAgICAgY2YgPSBzZWxmLl9mbGF2b3VyLmNhc2Vmb2xkCisgICAgICAgIHBhdGhfcGF0dGVybiA9IGNmKHBhdGhfcGF0dGVybikKKyAgICAgICAgZHJ2LCByb290LCBwYXRfcGFydHMgPSBzZWxmLl9mbGF2b3VyLnBhcnNlX3BhcnRzKChwYXRoX3BhdHRlcm4sKSkKKyAgICAgICAgaWYgbm90IHBhdF9wYXJ0czoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImVtcHR5IHBhdHRlcm4iKQorICAgICAgICBpZiBkcnYgYW5kIGRydiAhPSBjZihzZWxmLl9kcnYpOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGlmIHJvb3QgYW5kIHJvb3QgIT0gY2Yoc2VsZi5fcm9vdCk6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcGFydHMgPSBzZWxmLl9jcGFydHMKKyAgICAgICAgaWYgZHJ2IG9yIHJvb3Q6CisgICAgICAgICAgICBpZiBsZW4ocGF0X3BhcnRzKSAhPSBsZW4ocGFydHMpOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgcGF0X3BhcnRzID0gcGF0X3BhcnRzWzE6XQorICAgICAgICBlbGlmIGxlbihwYXRfcGFydHMpID4gbGVuKHBhcnRzKToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBmb3IgcGFydCwgcGF0IGluIHppcChyZXZlcnNlZChwYXJ0cyksIHJldmVyc2VkKHBhdF9wYXJ0cykpOgorICAgICAgICAgICAgaWYgbm90IGZubWF0Y2guZm5tYXRjaGNhc2UocGFydCwgcGF0KToKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIFRydWUKKworCitjbGFzcyBQdXJlUG9zaXhQYXRoKFB1cmVQYXRoKToKKyAgICBfZmxhdm91ciA9IF9wb3NpeF9mbGF2b3VyCisgICAgX19zbG90c19fID0gKCkKKworCitjbGFzcyBQdXJlV2luZG93c1BhdGgoUHVyZVBhdGgpOgorICAgIF9mbGF2b3VyID0gX3dpbmRvd3NfZmxhdm91cgorICAgIF9fc2xvdHNfXyA9ICgpCisKKworIyBGaWxlc3lzdGVtLWFjY2Vzc2luZyBjbGFzc2VzCisKKworY2xhc3MgUGF0aChQdXJlUGF0aCk6CisgICAgX19zbG90c19fID0gKAorICAgICAgICAnX2FjY2Vzc29yJywKKyAgICAgICAgJ19jbG9zZWQnLAorICAgICkKKworICAgIGRlZiBfX25ld19fKGNscywgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgaWYgY2xzIGlzIFBhdGg6CisgICAgICAgICAgICBjbHMgPSBXaW5kb3dzUGF0aCBpZiBvcy5uYW1lID09ICdudCcgZWxzZSBQb3NpeFBhdGgKKyAgICAgICAgc2VsZiA9IGNscy5fZnJvbV9wYXJ0cyhhcmdzLCBpbml0PUZhbHNlKQorICAgICAgICBpZiBub3Qgc2VsZi5fZmxhdm91ci5pc19zdXBwb3J0ZWQ6CisgICAgICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCJjYW5ub3QgaW5zdGFudGlhdGUgJXIgb24geW91ciBzeXN0ZW0iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKGNscy5fX25hbWVfXywpKQorICAgICAgICBzZWxmLl9pbml0KCkKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfaW5pdChzZWxmLAorICAgICAgICAgICAgICAjIFByaXZhdGUgbm9uLWNvbnN0cnVjdG9yIGFyZ3VtZW50cworICAgICAgICAgICAgICB0ZW1wbGF0ZT1Ob25lLAorICAgICAgICAgICAgICApOgorICAgICAgICBzZWxmLl9jbG9zZWQgPSBGYWxzZQorICAgICAgICBpZiB0ZW1wbGF0ZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2FjY2Vzc29yID0gdGVtcGxhdGUuX2FjY2Vzc29yCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9hY2Nlc3NvciA9IF9ub3JtYWxfYWNjZXNzb3IKKworICAgIGRlZiBfbWFrZV9jaGlsZF9yZWxwYXRoKHNlbGYsIHBhcnQpOgorICAgICAgICAjIFRoaXMgaXMgYW4gb3B0aW1pemF0aW9uIHVzZWQgZm9yIGRpciB3YWxraW5nLiAgYHBhcnRgIG11c3QgYmUKKyAgICAgICAgIyBhIHNpbmdsZSBwYXJ0IHJlbGF0aXZlIHRvIHRoaXMgcGF0aC4KKyAgICAgICAgcGFydHMgPSBzZWxmLl9wYXJ0cyArIFtwYXJ0XQorICAgICAgICByZXR1cm4gc2VsZi5fZnJvbV9wYXJzZWRfcGFydHMoc2VsZi5fZHJ2LCBzZWxmLl9yb290LCBwYXJ0cykKKworICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIGlmIHNlbGYuX2Nsb3NlZDoKKyAgICAgICAgICAgIHNlbGYuX3JhaXNlX2Nsb3NlZCgpCisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgdCwgdiwgdGIpOgorICAgICAgICBzZWxmLl9jbG9zZWQgPSBUcnVlCisKKyAgICBkZWYgX3JhaXNlX2Nsb3NlZChzZWxmKToKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiSS9PIG9wZXJhdGlvbiBvbiBjbG9zZWQgcGF0aCIpCisKKyAgICBkZWYgX29wZW5lcihzZWxmLCBuYW1lLCBmbGFncywgbW9kZT0wbzY2Nik6CisgICAgICAgICMgQSBzdHViIGZvciB0aGUgb3BlbmVyIGFyZ3VtZW50IHRvIGJ1aWx0LWluIG9wZW4oKQorICAgICAgICByZXR1cm4gc2VsZi5fYWNjZXNzb3Iub3BlbihzZWxmLCBmbGFncywgbW9kZSkKKworICAgIGRlZiBfcmF3X29wZW4oc2VsZiwgZmxhZ3MsIG1vZGU9MG83NzcpOgorICAgICAgICAiIiIKKyAgICAgICAgT3BlbiB0aGUgZmlsZSBwb2ludGVkIGJ5IHRoaXMgcGF0aCBhbmQgcmV0dXJuIGEgZmlsZSBkZXNjcmlwdG9yLAorICAgICAgICBhcyBvcy5vcGVuKCkgZG9lcy4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuX2Nsb3NlZDoKKyAgICAgICAgICAgIHNlbGYuX3JhaXNlX2Nsb3NlZCgpCisgICAgICAgIHJldHVybiBzZWxmLl9hY2Nlc3Nvci5vcGVuKHNlbGYsIGZsYWdzLCBtb2RlKQorCisgICAgIyBQdWJsaWMgQVBJCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgY3dkKGNscyk6CisgICAgICAgICIiIlJldHVybiBhIG5ldyBwYXRoIHBvaW50aW5nIHRvIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5CisgICAgICAgIChhcyByZXR1cm5lZCBieSBvcy5nZXRjd2QoKSkuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gY2xzKG9zLmdldGN3ZCgpKQorCisgICAgZGVmIGl0ZXJkaXIoc2VsZik6CisgICAgICAgICIiIkl0ZXJhdGUgb3ZlciB0aGUgZmlsZXMgaW4gdGhpcyBkaXJlY3RvcnkuICBEb2VzIG5vdCB5aWVsZCBhbnkKKyAgICAgICAgcmVzdWx0IGZvciB0aGUgc3BlY2lhbCBwYXRocyAnLicgYW5kICcuLicuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl9jbG9zZWQ6CisgICAgICAgICAgICBzZWxmLl9yYWlzZV9jbG9zZWQoKQorICAgICAgICBmb3IgbmFtZSBpbiBzZWxmLl9hY2Nlc3Nvci5saXN0ZGlyKHNlbGYpOgorICAgICAgICAgICAgaWYgbmFtZSBpbiB7Jy4nLCAnLi4nfToKKyAgICAgICAgICAgICAgICAjIFlpZWxkaW5nIGEgcGF0aCBvYmplY3QgZm9yIHRoZXNlIG1ha2VzIGxpdHRsZSBzZW5zZQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICB5aWVsZCBzZWxmLl9tYWtlX2NoaWxkX3JlbHBhdGgobmFtZSkKKyAgICAgICAgICAgIGlmIHNlbGYuX2Nsb3NlZDoKKyAgICAgICAgICAgICAgICBzZWxmLl9yYWlzZV9jbG9zZWQoKQorCisgICAgZGVmIGdsb2Ioc2VsZiwgcGF0dGVybik6CisgICAgICAgICIiIkl0ZXJhdGUgb3ZlciB0aGlzIHN1YnRyZWUgYW5kIHlpZWxkIGFsbCBleGlzdGluZyBmaWxlcyAob2YgYW55CisgICAgICAgIGtpbmQsIGluY2x1ZGluZyBkaXJlY3RvcmllcykgbWF0Y2hpbmcgdGhlIGdpdmVuIHBhdHRlcm4uCisgICAgICAgICIiIgorICAgICAgICBwYXR0ZXJuID0gc2VsZi5fZmxhdm91ci5jYXNlZm9sZChwYXR0ZXJuKQorICAgICAgICBkcnYsIHJvb3QsIHBhdHRlcm5fcGFydHMgPSBzZWxmLl9mbGF2b3VyLnBhcnNlX3BhcnRzKChwYXR0ZXJuLCkpCisgICAgICAgIGlmIGRydiBvciByb290OgorICAgICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigiTm9uLXJlbGF0aXZlIHBhdHRlcm5zIGFyZSB1bnN1cHBvcnRlZCIpCisgICAgICAgIHNlbGVjdG9yID0gX21ha2Vfc2VsZWN0b3IodHVwbGUocGF0dGVybl9wYXJ0cykpCisgICAgICAgIGZvciBwIGluIHNlbGVjdG9yLnNlbGVjdF9mcm9tKHNlbGYpOgorICAgICAgICAgICAgeWllbGQgcAorCisgICAgZGVmIHJnbG9iKHNlbGYsIHBhdHRlcm4pOgorICAgICAgICAiIiJSZWN1cnNpdmVseSB5aWVsZCBhbGwgZXhpc3RpbmcgZmlsZXMgKG9mIGFueSBraW5kLCBpbmNsdWRpbmcKKyAgICAgICAgZGlyZWN0b3JpZXMpIG1hdGNoaW5nIHRoZSBnaXZlbiBwYXR0ZXJuLCBhbnl3aGVyZSBpbiB0aGlzIHN1YnRyZWUuCisgICAgICAgICIiIgorICAgICAgICBwYXR0ZXJuID0gc2VsZi5fZmxhdm91ci5jYXNlZm9sZChwYXR0ZXJuKQorICAgICAgICBkcnYsIHJvb3QsIHBhdHRlcm5fcGFydHMgPSBzZWxmLl9mbGF2b3VyLnBhcnNlX3BhcnRzKChwYXR0ZXJuLCkpCisgICAgICAgIGlmIGRydiBvciByb290OgorICAgICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigiTm9uLXJlbGF0aXZlIHBhdHRlcm5zIGFyZSB1bnN1cHBvcnRlZCIpCisgICAgICAgIHNlbGVjdG9yID0gX21ha2Vfc2VsZWN0b3IoKCIqKiIsKSArIHR1cGxlKHBhdHRlcm5fcGFydHMpKQorICAgICAgICBmb3IgcCBpbiBzZWxlY3Rvci5zZWxlY3RfZnJvbShzZWxmKToKKyAgICAgICAgICAgIHlpZWxkIHAKKworICAgIGRlZiBhYnNvbHV0ZShzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIGFuIGFic29sdXRlIHZlcnNpb24gb2YgdGhpcyBwYXRoLiAgVGhpcyBmdW5jdGlvbiB3b3JrcworICAgICAgICBldmVuIGlmIHRoZSBwYXRoIGRvZXNuJ3QgcG9pbnQgdG8gYW55dGhpbmcuCisKKyAgICAgICAgTm8gbm9ybWFsaXphdGlvbiBpcyBkb25lLCBpLmUuIGFsbCAnLicgYW5kICcuLicgd2lsbCBiZSBrZXB0IGFsb25nLgorICAgICAgICBVc2UgcmVzb2x2ZSgpIHRvIGdldCB0aGUgY2Fub25pY2FsIHBhdGggdG8gYSBmaWxlLgorICAgICAgICAiIiIKKyAgICAgICAgIyBYWFggdW50ZXN0ZWQgeWV0IQorICAgICAgICBpZiBzZWxmLl9jbG9zZWQ6CisgICAgICAgICAgICBzZWxmLl9yYWlzZV9jbG9zZWQoKQorICAgICAgICBpZiBzZWxmLmlzX2Fic29sdXRlKCk6CisgICAgICAgICAgICByZXR1cm4gc2VsZgorICAgICAgICAjIEZJWE1FIHRoaXMgbXVzdCBkZWZlciB0byB0aGUgc3BlY2lmaWMgZmxhdm91ciAoYW5kLCB1bmRlciBXaW5kb3dzLAorICAgICAgICAjIHVzZSBudC5fZ2V0ZnVsbHBhdGhuYW1lKCkpCisgICAgICAgIG9iaiA9IHNlbGYuX2Zyb21fcGFydHMoW29zLmdldGN3ZCgpXSArIHNlbGYuX3BhcnRzLCBpbml0PUZhbHNlKQorICAgICAgICBvYmouX2luaXQodGVtcGxhdGU9c2VsZikKKyAgICAgICAgcmV0dXJuIG9iagorCisgICAgZGVmIHJlc29sdmUoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBNYWtlIHRoZSBwYXRoIGFic29sdXRlLCByZXNvbHZpbmcgYWxsIHN5bWxpbmtzIG9uIHRoZSB3YXkgYW5kIGFsc28KKyAgICAgICAgbm9ybWFsaXppbmcgaXQgKGZvciBleGFtcGxlIHR1cm5pbmcgc2xhc2hlcyBpbnRvIGJhY2tzbGFzaGVzIHVuZGVyCisgICAgICAgIFdpbmRvd3MpLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5fY2xvc2VkOgorICAgICAgICAgICAgc2VsZi5fcmFpc2VfY2xvc2VkKCkKKyAgICAgICAgcyA9IHNlbGYuX2ZsYXZvdXIucmVzb2x2ZShzZWxmKQorICAgICAgICBpZiBzIGlzIE5vbmU6CisgICAgICAgICAgICAjIE5vIHN5bWxpbmsgcmVzb2x1dGlvbiA9PiBmb3IgY29uc2lzdGVuY3ksIHJhaXNlIGFuIGVycm9yIGlmCisgICAgICAgICAgICAjIHRoZSBwYXRoIGRvZXNuJ3QgZXhpc3Qgb3IgaXMgZm9yYmlkZGVuCisgICAgICAgICAgICBzZWxmLnN0YXQoKQorICAgICAgICAgICAgcyA9IHN0cihzZWxmLmFic29sdXRlKCkpCisgICAgICAgICMgTm93IHdlIGhhdmUgbm8gc3ltbGlua3MgaW4gdGhlIHBhdGgsIGl0J3Mgc2FmZSB0byBub3JtYWxpemUgaXQuCisgICAgICAgIG5vcm1lZCA9IHNlbGYuX2ZsYXZvdXIucGF0aG1vZC5ub3JtcGF0aChzKQorICAgICAgICBvYmogPSBzZWxmLl9mcm9tX3BhcnRzKChub3JtZWQsKSwgaW5pdD1GYWxzZSkKKyAgICAgICAgb2JqLl9pbml0KHRlbXBsYXRlPXNlbGYpCisgICAgICAgIHJldHVybiBvYmoKKworICAgIGRlZiBzdGF0KHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIHRoZSByZXN1bHQgb2YgdGhlIHN0YXQoKSBzeXN0ZW0gY2FsbCBvbiB0aGlzIHBhdGgsIGxpa2UKKyAgICAgICAgb3Muc3RhdCgpIGRvZXMuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gc2VsZi5fYWNjZXNzb3Iuc3RhdChzZWxmKQorCisgICAgZGVmIG93bmVyKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIHRoZSBsb2dpbiBuYW1lIG9mIHRoZSBmaWxlIG93bmVyLgorICAgICAgICAiIiIKKyAgICAgICAgaW1wb3J0IHB3ZAorICAgICAgICByZXR1cm4gcHdkLmdldHB3dWlkKHNlbGYuc3RhdCgpLnN0X3VpZCkucHdfbmFtZQorCisgICAgZGVmIGdyb3VwKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIHRoZSBncm91cCBuYW1lIG9mIHRoZSBmaWxlIGdpZC4KKyAgICAgICAgIiIiCisgICAgICAgIGltcG9ydCBncnAKKyAgICAgICAgcmV0dXJuIGdycC5nZXRncmdpZChzZWxmLnN0YXQoKS5zdF9naWQpLmdyX25hbWUKKworICAgIGRlZiBvcGVuKHNlbGYsIG1vZGU9J3InLCBidWZmZXJpbmc9LTEsIGVuY29kaW5nPU5vbmUsCisgICAgICAgICAgICAgZXJyb3JzPU5vbmUsIG5ld2xpbmU9Tm9uZSk6CisgICAgICAgICIiIgorICAgICAgICBPcGVuIHRoZSBmaWxlIHBvaW50ZWQgYnkgdGhpcyBwYXRoIGFuZCByZXR1cm4gYSBmaWxlIG9iamVjdCwgYXMKKyAgICAgICAgdGhlIGJ1aWx0LWluIG9wZW4oKSBmdW5jdGlvbiBkb2VzLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5fY2xvc2VkOgorICAgICAgICAgICAgc2VsZi5fcmFpc2VfY2xvc2VkKCkKKyAgICAgICAgcmV0dXJuIGlvLm9wZW4oc3RyKHNlbGYpLCBtb2RlLCBidWZmZXJpbmcsIGVuY29kaW5nLCBlcnJvcnMsIG5ld2xpbmUsCisgICAgICAgICAgICAgICAgICAgICAgIG9wZW5lcj1zZWxmLl9vcGVuZXIpCisKKyAgICBkZWYgdG91Y2goc2VsZiwgbW9kZT0wbzY2NiwgZXhpc3Rfb2s9VHJ1ZSk6CisgICAgICAgICIiIgorICAgICAgICBDcmVhdGUgdGhpcyBmaWxlIHdpdGggdGhlIGdpdmVuIGFjY2VzcyBtb2RlLCBpZiBpdCBkb2Vzbid0IGV4aXN0LgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5fY2xvc2VkOgorICAgICAgICAgICAgc2VsZi5fcmFpc2VfY2xvc2VkKCkKKyAgICAgICAgaWYgZXhpc3Rfb2s6CisgICAgICAgICAgICAjIEZpcnN0IHRyeSB0byBidW1wIG1vZGlmaWNhdGlvbiB0aW1lCisgICAgICAgICAgICAjIEltcGxlbWVudGF0aW9uIG5vdGU6IEdOVSB0b3VjaCB1c2VzIHRoZSBVVElNRV9OT1cgb3B0aW9uIG9mCisgICAgICAgICAgICAjIHRoZSB1dGltZW5zYXQoKSAvIGZ1dGltZW5zKCkgZnVuY3Rpb25zLgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuX2FjY2Vzc29yLnV0aW1lKHNlbGYsIE5vbmUpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICAjIEF2b2lkIGV4Y2VwdGlvbiBjaGFpbmluZworICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGZsYWdzID0gb3MuT19DUkVBVCB8IG9zLk9fV1JPTkxZCisgICAgICAgIGlmIG5vdCBleGlzdF9vazoKKyAgICAgICAgICAgIGZsYWdzIHw9IG9zLk9fRVhDTAorICAgICAgICBmZCA9IHNlbGYuX3Jhd19vcGVuKGZsYWdzLCBtb2RlKQorICAgICAgICBvcy5jbG9zZShmZCkKKworICAgIGRlZiBta2RpcihzZWxmLCBtb2RlPTBvNzc3LCBwYXJlbnRzPUZhbHNlKToKKyAgICAgICAgaWYgc2VsZi5fY2xvc2VkOgorICAgICAgICAgICAgc2VsZi5fcmFpc2VfY2xvc2VkKCkKKyAgICAgICAgaWYgbm90IHBhcmVudHM6CisgICAgICAgICAgICBzZWxmLl9hY2Nlc3Nvci5ta2RpcihzZWxmLCBtb2RlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuX2FjY2Vzc29yLm1rZGlyKHNlbGYsIG1vZGUpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gRU5PRU5UOgorICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgICAgIHNlbGYucGFyZW50Lm1rZGlyKHBhcmVudHM9VHJ1ZSkKKyAgICAgICAgICAgICAgICBzZWxmLl9hY2Nlc3Nvci5ta2RpcihzZWxmLCBtb2RlKQorCisgICAgZGVmIGNobW9kKHNlbGYsIG1vZGUpOgorICAgICAgICAiIiIKKyAgICAgICAgQ2hhbmdlIHRoZSBwZXJtaXNzaW9ucyBvZiB0aGUgcGF0aCwgbGlrZSBvcy5jaG1vZCgpLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5fY2xvc2VkOgorICAgICAgICAgICAgc2VsZi5fcmFpc2VfY2xvc2VkKCkKKyAgICAgICAgc2VsZi5fYWNjZXNzb3IuY2htb2Qoc2VsZiwgbW9kZSkKKworICAgIGRlZiBsY2htb2Qoc2VsZiwgbW9kZSk6CisgICAgICAgICIiIgorICAgICAgICBMaWtlIGNobW9kKCksIGV4Y2VwdCBpZiB0aGUgcGF0aCBwb2ludHMgdG8gYSBzeW1saW5rLCB0aGUgc3ltbGluaydzCisgICAgICAgIHBlcm1pc3Npb25zIGFyZSBjaGFuZ2VkLCByYXRoZXIgdGhhbiBpdHMgdGFyZ2V0J3MuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl9jbG9zZWQ6CisgICAgICAgICAgICBzZWxmLl9yYWlzZV9jbG9zZWQoKQorICAgICAgICBzZWxmLl9hY2Nlc3Nvci5sY2htb2Qoc2VsZiwgbW9kZSkKKworICAgIGRlZiB1bmxpbmsoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBSZW1vdmUgdGhpcyBmaWxlIG9yIGxpbmsuCisgICAgICAgIElmIHRoZSBwYXRoIGlzIGEgZGlyZWN0b3J5LCB1c2Ugcm1kaXIoKSBpbnN0ZWFkLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5fY2xvc2VkOgorICAgICAgICAgICAgc2VsZi5fcmFpc2VfY2xvc2VkKCkKKyAgICAgICAgc2VsZi5fYWNjZXNzb3IudW5saW5rKHNlbGYpCisKKyAgICBkZWYgcm1kaXIoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBSZW1vdmUgdGhpcyBkaXJlY3RvcnkuICBUaGUgZGlyZWN0b3J5IG11c3QgYmUgZW1wdHkuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl9jbG9zZWQ6CisgICAgICAgICAgICBzZWxmLl9yYWlzZV9jbG9zZWQoKQorICAgICAgICBzZWxmLl9hY2Nlc3Nvci5ybWRpcihzZWxmKQorCisgICAgZGVmIGxzdGF0KHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgTGlrZSBzdGF0KCksIGV4Y2VwdCBpZiB0aGUgcGF0aCBwb2ludHMgdG8gYSBzeW1saW5rLCB0aGUgc3ltbGluaydzCisgICAgICAgIHN0YXR1cyBpbmZvcm1hdGlvbiBpcyByZXR1cm5lZCwgcmF0aGVyIHRoYW4gaXRzIHRhcmdldCdzLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5fY2xvc2VkOgorICAgICAgICAgICAgc2VsZi5fcmFpc2VfY2xvc2VkKCkKKyAgICAgICAgcmV0dXJuIHNlbGYuX2FjY2Vzc29yLmxzdGF0KHNlbGYpCisKKyAgICBkZWYgcmVuYW1lKHNlbGYsIHRhcmdldCk6CisgICAgICAgICIiIgorICAgICAgICBSZW5hbWUgdGhpcyBwYXRoIHRvIHRoZSBnaXZlbiBwYXRoLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5fY2xvc2VkOgorICAgICAgICAgICAgc2VsZi5fcmFpc2VfY2xvc2VkKCkKKyAgICAgICAgc2VsZi5fYWNjZXNzb3IucmVuYW1lKHNlbGYsIHRhcmdldCkKKworICAgIGRlZiByZXBsYWNlKHNlbGYsIHRhcmdldCk6CisgICAgICAgICIiIgorICAgICAgICBSZW5hbWUgdGhpcyBwYXRoIHRvIHRoZSBnaXZlbiBwYXRoLCBjbG9iYmVyaW5nIHRoZSBleGlzdGluZworICAgICAgICBkZXN0aW5hdGlvbiBpZiBpdCBleGlzdHMuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl9jbG9zZWQ6CisgICAgICAgICAgICBzZWxmLl9yYWlzZV9jbG9zZWQoKQorICAgICAgICBzZWxmLl9hY2Nlc3Nvci5yZXBsYWNlKHNlbGYsIHRhcmdldCkKKworICAgIGRlZiBzeW1saW5rX3RvKHNlbGYsIHRhcmdldCwgdGFyZ2V0X2lzX2RpcmVjdG9yeT1GYWxzZSk6CisgICAgICAgICIiIgorICAgICAgICBNYWtlIHRoaXMgcGF0aCBhIHN5bWxpbmsgcG9pbnRpbmcgdG8gdGhlIGdpdmVuIHBhdGguCisgICAgICAgIE5vdGUgdGhlIG9yZGVyIG9mIGFyZ3VtZW50cyAoc2VsZiwgdGFyZ2V0KSBpcyB0aGUgcmV2ZXJzZSBvZiBvcy5zeW1saW5rJ3MuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl9jbG9zZWQ6CisgICAgICAgICAgICBzZWxmLl9yYWlzZV9jbG9zZWQoKQorICAgICAgICBzZWxmLl9hY2Nlc3Nvci5zeW1saW5rKHRhcmdldCwgc2VsZiwgdGFyZ2V0X2lzX2RpcmVjdG9yeSkKKworICAgICMgQ29udmVuaWVuY2UgZnVuY3Rpb25zIGZvciBxdWVyeWluZyB0aGUgc3RhdCByZXN1bHRzCisKKyAgICBkZWYgZXhpc3RzKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgV2hldGhlciB0aGlzIHBhdGggZXhpc3RzLgorICAgICAgICAiIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5zdGF0KCkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGlmIGUuZXJybm8gbm90IGluIChFTk9FTlQsIEVOT1RESVIpOgorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBpc19kaXIoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBXaGV0aGVyIHRoaXMgcGF0aCBpcyBhIGRpcmVjdG9yeS4KKyAgICAgICAgIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBTX0lTRElSKHNlbGYuc3RhdCgpLnN0X21vZGUpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICBpZiBlLmVycm5vIG5vdCBpbiAoRU5PRU5ULCBFTk9URElSKToKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgIyBQYXRoIGRvZXNuJ3QgZXhpc3Qgb3IgaXMgYSBicm9rZW4gc3ltbGluaworICAgICAgICAgICAgIyAoc2VlIGh0dHBzOi8vYml0YnVja2V0Lm9yZy9waXRyb3UvcGF0aGxpYi9pc3N1ZS8xMi8pCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBpc19maWxlKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgV2hldGhlciB0aGlzIHBhdGggaXMgYSByZWd1bGFyIGZpbGUgKGFsc28gVHJ1ZSBmb3Igc3ltbGlua3MgcG9pbnRpbmcKKyAgICAgICAgdG8gcmVndWxhciBmaWxlcykuCisgICAgICAgICIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gU19JU1JFRyhzZWxmLnN0YXQoKS5zdF9tb2RlKQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgaWYgZS5lcnJubyBub3QgaW4gKEVOT0VOVCwgRU5PVERJUik6CisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICMgUGF0aCBkb2Vzbid0IGV4aXN0IG9yIGlzIGEgYnJva2VuIHN5bWxpbmsKKyAgICAgICAgICAgICMgKHNlZSBodHRwczovL2JpdGJ1Y2tldC5vcmcvcGl0cm91L3BhdGhsaWIvaXNzdWUvMTIvKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgaXNfc3ltbGluayhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFdoZXRoZXIgdGhpcyBwYXRoIGlzIGEgc3ltYm9saWMgbGluay4KKyAgICAgICAgIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBTX0lTTE5LKHNlbGYubHN0YXQoKS5zdF9tb2RlKQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgaWYgZS5lcnJubyBub3QgaW4gKEVOT0VOVCwgRU5PVERJUik6CisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICMgUGF0aCBkb2Vzbid0IGV4aXN0CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBpc19ibG9ja19kZXZpY2Uoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBXaGV0aGVyIHRoaXMgcGF0aCBpcyBhIGJsb2NrIGRldmljZS4KKyAgICAgICAgIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBTX0lTQkxLKHNlbGYuc3RhdCgpLnN0X21vZGUpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICBpZiBlLmVycm5vIG5vdCBpbiAoRU5PRU5ULCBFTk9URElSKToKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgIyBQYXRoIGRvZXNuJ3QgZXhpc3Qgb3IgaXMgYSBicm9rZW4gc3ltbGluaworICAgICAgICAgICAgIyAoc2VlIGh0dHBzOi8vYml0YnVja2V0Lm9yZy9waXRyb3UvcGF0aGxpYi9pc3N1ZS8xMi8pCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBpc19jaGFyX2RldmljZShzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFdoZXRoZXIgdGhpcyBwYXRoIGlzIGEgY2hhcmFjdGVyIGRldmljZS4KKyAgICAgICAgIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBTX0lTQ0hSKHNlbGYuc3RhdCgpLnN0X21vZGUpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICBpZiBlLmVycm5vIG5vdCBpbiAoRU5PRU5ULCBFTk9URElSKToKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgIyBQYXRoIGRvZXNuJ3QgZXhpc3Qgb3IgaXMgYSBicm9rZW4gc3ltbGluaworICAgICAgICAgICAgIyAoc2VlIGh0dHBzOi8vYml0YnVja2V0Lm9yZy9waXRyb3UvcGF0aGxpYi9pc3N1ZS8xMi8pCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBpc19maWZvKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgV2hldGhlciB0aGlzIHBhdGggaXMgYSBGSUZPLgorICAgICAgICAiIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIFNfSVNGSUZPKHNlbGYuc3RhdCgpLnN0X21vZGUpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICBpZiBlLmVycm5vIG5vdCBpbiAoRU5PRU5ULCBFTk9URElSKToKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgIyBQYXRoIGRvZXNuJ3QgZXhpc3Qgb3IgaXMgYSBicm9rZW4gc3ltbGluaworICAgICAgICAgICAgIyAoc2VlIGh0dHBzOi8vYml0YnVja2V0Lm9yZy9waXRyb3UvcGF0aGxpYi9pc3N1ZS8xMi8pCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBpc19zb2NrZXQoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBXaGV0aGVyIHRoaXMgcGF0aCBpcyBhIHNvY2tldC4KKyAgICAgICAgIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBTX0lTU09DSyhzZWxmLnN0YXQoKS5zdF9tb2RlKQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgaWYgZS5lcnJubyBub3QgaW4gKEVOT0VOVCwgRU5PVERJUik6CisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICMgUGF0aCBkb2Vzbid0IGV4aXN0IG9yIGlzIGEgYnJva2VuIHN5bWxpbmsKKyAgICAgICAgICAgICMgKHNlZSBodHRwczovL2JpdGJ1Y2tldC5vcmcvcGl0cm91L3BhdGhsaWIvaXNzdWUvMTIvKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKworY2xhc3MgUG9zaXhQYXRoKFBhdGgsIFB1cmVQb3NpeFBhdGgpOgorICAgIF9fc2xvdHNfXyA9ICgpCisKK2NsYXNzIFdpbmRvd3NQYXRoKFBhdGgsIFB1cmVXaW5kb3dzUGF0aCk6CisgICAgX19zbG90c19fID0gKCkKZGlmZiAtLWdpdCBhL0xpYi9wZGIucHkgYi9MaWIvcGRiLnB5CmluZGV4IDgwY2JhOWQuLjdkNThjMmEgMTAwNzU1Ci0tLSBhL0xpYi9wZGIucHkKKysrIGIvTGliL3BkYi5weQpAQCAtOTIsMjEgKzkyLDE0IEBACiAgICAgY3JlID0gcmUuY29tcGlsZShyJ2RlZlxzKyVzXHMqWyhdJyAlIHJlLmVzY2FwZShmdW5jbmFtZSkpCiAgICAgdHJ5OgogICAgICAgICBmcCA9IG9wZW4oZmlsZW5hbWUpCi0gICAgZXhjZXB0IElPRXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIHJldHVybiBOb25lCiAgICAgIyBjb25zdW1lciBvZiB0aGlzIGluZm8gZXhwZWN0cyB0aGUgZmlyc3QgbGluZSB0byBiZSAxCi0gICAgbGluZW5vID0gMQotICAgIGFuc3dlciA9IE5vbmUKLSAgICB3aGlsZSBUcnVlOgotICAgICAgICBsaW5lID0gZnAucmVhZGxpbmUoKQotICAgICAgICBpZiBsaW5lID09ICcnOgotICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgaWYgY3JlLm1hdGNoKGxpbmUpOgotICAgICAgICAgICAgYW5zd2VyID0gZnVuY25hbWUsIGZpbGVuYW1lLCBsaW5lbm8KLSAgICAgICAgICAgIGJyZWFrCi0gICAgICAgIGxpbmVubyArPSAxCi0gICAgZnAuY2xvc2UoKQotICAgIHJldHVybiBhbnN3ZXIKKyAgICB3aXRoIGZwOgorICAgICAgICBmb3IgbGluZW5vLCBsaW5lIGluIGVudW1lcmF0ZShmcCwgc3RhcnQ9MSk6CisgICAgICAgICAgICBpZiBjcmUubWF0Y2gobGluZSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmNuYW1lLCBmaWxlbmFtZSwgbGluZW5vCisgICAgcmV0dXJuIE5vbmUKIAogZGVmIGdldHNvdXJjZWxpbmVzKG9iaik6CiAgICAgbGluZXMsIGxpbmVubyA9IGluc3BlY3QuZmluZHNvdXJjZShvYmopCkBAIC0xNzAsMTIgKzE2MywxMiBAQAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oZW52SG9tZSwgIi5wZGJyYyIpKSBhcyByY0ZpbGU6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYucmNMaW5lcy5leHRlbmQocmNGaWxlKQotICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHdpdGggb3BlbigiLnBkYnJjIikgYXMgcmNGaWxlOgogICAgICAgICAgICAgICAgIHNlbGYucmNMaW5lcy5leHRlbmQocmNGaWxlKQotICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBwYXNzCiAKICAgICAgICAgc2VsZi5jb21tYW5kcyA9IHt9ICMgYXNzb2NpYXRlcyBhIGNvbW1hbmQgbGlzdCB0byBicmVha3BvaW50IG51bWJlcnMKQEAgLTMwNCw4ICsyOTcsMTYgQEAKICAgICAgICAgICAgIHJldHVybgogICAgICAgICBleGNfdHlwZSwgZXhjX3ZhbHVlLCBleGNfdHJhY2ViYWNrID0gZXhjX2luZm8KICAgICAgICAgZnJhbWUuZl9sb2NhbHNbJ19fZXhjZXB0aW9uX18nXSA9IGV4Y190eXBlLCBleGNfdmFsdWUKLSAgICAgICAgc2VsZi5tZXNzYWdlKHRyYWNlYmFjay5mb3JtYXRfZXhjZXB0aW9uX29ubHkoZXhjX3R5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y192YWx1ZSlbLTFdLnN0cmlwKCkpCisKKyAgICAgICAgIyBBbiAnSW50ZXJuYWwgU3RvcEl0ZXJhdGlvbicgZXhjZXB0aW9uIGlzIGFuIGV4Y2VwdGlvbiBkZWJ1ZyBldmVudAorICAgICAgICAjIGlzc3VlZCBieSB0aGUgaW50ZXJwcmV0ZXIgd2hlbiBoYW5kbGluZyBhIHN1YmdlbmVyYXRvciBydW4gd2l0aAorICAgICAgICAjICd5aWVsZCBmcm9tJyBvciBhIGdlbmVyYXRvciBjb250cm9sZWQgYnkgYSBmb3IgbG9vcC4gTm8gZXhjZXB0aW9uIGhhcworICAgICAgICAjIGFjdHVhbGx5IG9jY3VycmVkIGluIHRoaXMgY2FzZS4gVGhlIGRlYnVnZ2VyIHVzZXMgdGhpcyBkZWJ1ZyBldmVudCB0bworICAgICAgICAjIHN0b3Agd2hlbiB0aGUgZGVidWdnZWUgaXMgcmV0dXJuaW5nIGZyb20gc3VjaCBnZW5lcmF0b3JzLgorICAgICAgICBwcmVmaXggPSAnSW50ZXJuYWwgJyBpZiAobm90IGV4Y190cmFjZWJhY2sKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBleGNfdHlwZSBpcyBTdG9wSXRlcmF0aW9uKSBlbHNlICcnCisgICAgICAgIHNlbGYubWVzc2FnZSgnJXMlcycgJSAocHJlZml4LAorICAgICAgICAgICAgdHJhY2ViYWNrLmZvcm1hdF9leGNlcHRpb25fb25seShleGNfdHlwZSwgZXhjX3ZhbHVlKVstMV0uc3RyaXAoKSkpCiAgICAgICAgIHNlbGYuaW50ZXJhY3Rpb24oZnJhbWUsIGV4Y190cmFjZWJhY2spCiAKICAgICAjIEdlbmVyYWwgaW50ZXJhY3Rpb24gZnVuY3Rpb24KQEAgLTY3Miw3ICs2NzMsNyBAQAogICAgICAgICAgICAgIyBub3cgc2V0IHRoZSBicmVhayBwb2ludAogICAgICAgICAgICAgZXJyID0gc2VsZi5zZXRfYnJlYWsoZmlsZW5hbWUsIGxpbmUsIHRlbXBvcmFyeSwgY29uZCwgZnVuY25hbWUpCiAgICAgICAgICAgICBpZiBlcnI6Ci0gICAgICAgICAgICAgICAgc2VsZi5lcnJvcihlcnIsIGZpbGU9c2VsZi5zdGRvdXQpCisgICAgICAgICAgICAgICAgc2VsZi5lcnJvcihlcnIpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIGJwID0gc2VsZi5nZXRfYnJlYWtzKGZpbGVuYW1lLCBsaW5lKVstMV0KICAgICAgICAgICAgICAgICBzZWxmLm1lc3NhZ2UoIkJyZWFrcG9pbnQgJWQgYXQgJXM6JWQiICUKQEAgLTExNjMsMTUgKzExNjQsMTMgQEAKICAgICAgICAgICAgIHJldHVybiBfcnN0cignKiogcmFpc2VkICVzICoqJyAlIGVycikKIAogICAgIGRlZiBkb19wKHNlbGYsIGFyZyk6Ci0gICAgICAgICIiInAocmludCkgZXhwcmVzc2lvbgorICAgICAgICAiIiJwIGV4cHJlc3Npb24KICAgICAgICAgUHJpbnQgdGhlIHZhbHVlIG9mIHRoZSBleHByZXNzaW9uLgogICAgICAgICAiIiIKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5tZXNzYWdlKHJlcHIoc2VsZi5fZ2V0dmFsKGFyZykpKQogICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICBwYXNzCi0gICAgIyBtYWtlICJwcmludCIgYW4gYWxpYXMgb2YgInAiIHNpbmNlIHByaW50IGlzbid0IGEgUHl0aG9uIHN0YXRlbWVudCBhbnltb3JlCi0gICAgZG9fcHJpbnQgPSBkb19wCiAKICAgICBkZWYgZG9fcHAoc2VsZiwgYXJnKToKICAgICAgICAgIiIicHAgZXhwcmVzc2lvbgpAQCAtMTI0NSw3ICsxMjQ0LDcgQEAKICAgICAgICAgYnJlYWtsaXN0ID0gc2VsZi5nZXRfZmlsZV9icmVha3MoZmlsZW5hbWUpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGxpbmVzLCBsaW5lbm8gPSBnZXRzb3VyY2VsaW5lcyhzZWxmLmN1cmZyYW1lKQotICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlcnI6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKICAgICAgICAgICAgIHNlbGYuZXJyb3IoZXJyKQogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIHNlbGYuX3ByaW50X2xpbmVzKGxpbmVzLCBsaW5lbm8sIGJyZWFrbGlzdCwgc2VsZi5jdXJmcmFtZSkKQEAgLTEyNjEsNyArMTI2MCw3IEBACiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgdHJ5OgogICAgICAgICAgICAgbGluZXMsIGxpbmVubyA9IGdldHNvdXJjZWxpbmVzKG9iaikKLSAgICAgICAgZXhjZXB0IChJT0Vycm9yLCBUeXBlRXJyb3IpIGFzIGVycjoKKyAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBUeXBlRXJyb3IpIGFzIGVycjoKICAgICAgICAgICAgIHNlbGYuZXJyb3IoZXJyKQogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIHNlbGYuX3ByaW50X2xpbmVzKGxpbmVzLCBsaW5lbm8pCkBAIC0xMzkyLDcgKzEzOTEsNyBAQAogICAgICAgICBwbGFjZWQgaW4gdGhlIC5wZGJyYyBmaWxlKToKIAogICAgICAgICAjIFByaW50IGluc3RhbmNlIHZhcmlhYmxlcyAodXNhZ2UgInBpIGNsYXNzSW5zdCIpCi0gICAgICAgIGFsaWFzIHBpIGZvciBrIGluICUxLl9fZGljdF9fLmtleXMoKTogcHJpbnQgIiUxLiIsaywiPSIsJTEuX19kaWN0X19ba10KKyAgICAgICAgYWxpYXMgcGkgZm9yIGsgaW4gJTEuX19kaWN0X18ua2V5cygpOiBwcmludCgiJTEuIixrLCI9IiwlMS5fX2RpY3RfX1trXSkKICAgICAgICAgIyBQcmludCBpbnN0YW5jZSB2YXJpYWJsZXMgaW4gc2VsZgogICAgICAgICBhbGlhcyBwcyBwaSBzZWxmCiAgICAgICAgICIiIgpAQCAtMTU1MCw3ICsxNTQ5LDcgQEAKICAgICAgICAgJ2hlbHAnLCAnd2hlcmUnLCAnZG93bicsICd1cCcsICdicmVhaycsICd0YnJlYWsnLCAnY2xlYXInLCAnZGlzYWJsZScsCiAgICAgICAgICdlbmFibGUnLCAnaWdub3JlJywgJ2NvbmRpdGlvbicsICdjb21tYW5kcycsICdzdGVwJywgJ25leHQnLCAndW50aWwnLAogICAgICAgICAnanVtcCcsICdyZXR1cm4nLCAncmV0dmFsJywgJ3J1bicsICdjb250aW51ZScsICdsaXN0JywgJ2xvbmdsaXN0JywKLSAgICAgICAgJ2FyZ3MnLCAncHJpbnQnLCAncHAnLCAnd2hhdGlzJywgJ3NvdXJjZScsICdkaXNwbGF5JywgJ3VuZGlzcGxheScsCisgICAgICAgICdhcmdzJywgJ3AnLCAncHAnLCAnd2hhdGlzJywgJ3NvdXJjZScsICdkaXNwbGF5JywgJ3VuZGlzcGxheScsCiAgICAgICAgICdpbnRlcmFjdCcsICdhbGlhcycsICd1bmFsaWFzJywgJ2RlYnVnJywgJ3F1aXQnLAogICAgIF0KIApAQCAtMTY3MCw2ICsxNjY5LDkgQEAKICAgICAgICAgICAgICMgSW4gbW9zdCBjYXNlcyBTeXN0ZW1FeGl0IGRvZXMgbm90IHdhcnJhbnQgYSBwb3N0LW1vcnRlbSBzZXNzaW9uLgogICAgICAgICAgICAgcHJpbnQoIlRoZSBwcm9ncmFtIGV4aXRlZCB2aWEgc3lzLmV4aXQoKS4gRXhpdCBzdGF0dXM6IiwgZW5kPScgJykKICAgICAgICAgICAgIHByaW50KHN5cy5leGNfaW5mbygpWzFdKQorICAgICAgICBleGNlcHQgU3ludGF4RXJyb3I6CisgICAgICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKCkKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCiAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoKQogICAgICAgICAgICAgcHJpbnQoIlVuY2F1Z2h0IGV4Y2VwdGlvbi4gRW50ZXJpbmcgcG9zdCBtb3J0ZW0gZGVidWdnaW5nIikKZGlmZiAtLWdpdCBhL0xpYi9waWNrbGUucHkgYi9MaWIvcGlja2xlLnB5CmluZGV4IDM4NmZmYmEuLjNiMTM5ODQgMTAwNjQ0Ci0tLSBhL0xpYi9waWNrbGUucHkKKysrIGIvTGliL3BpY2tsZS5weQpAQCAtMjMsMTIgKzIzLDEzIEBACiAKICIiIgogCi1mcm9tIHR5cGVzIGltcG9ydCBGdW5jdGlvblR5cGUsIEJ1aWx0aW5GdW5jdGlvblR5cGUKK2Zyb20gdHlwZXMgaW1wb3J0IEZ1bmN0aW9uVHlwZQogZnJvbSBjb3B5cmVnIGltcG9ydCBkaXNwYXRjaF90YWJsZQogZnJvbSBjb3B5cmVnIGltcG9ydCBfZXh0ZW5zaW9uX3JlZ2lzdHJ5LCBfaW52ZXJ0ZWRfcmVnaXN0cnksIF9leHRlbnNpb25fY2FjaGUKLWltcG9ydCBtYXJzaGFsCitmcm9tIGl0ZXJ0b29scyBpbXBvcnQgaXNsaWNlCiBpbXBvcnQgc3lzCi1pbXBvcnQgc3RydWN0Citmcm9tIHN5cyBpbXBvcnQgbWF4c2l6ZQorZnJvbSBzdHJ1Y3QgaW1wb3J0IHBhY2ssIHVucGFjawogaW1wb3J0IHJlCiBpbXBvcnQgaW8KIGltcG9ydCBjb2RlY3MKQEAgLTQxLDI4ICs0MiwyNCBAQAogYnl0ZXNfdHlwZXMgPSAoYnl0ZXMsIGJ5dGVhcnJheSkKIAogIyBUaGVzZSBhcmUgcHVyZWx5IGluZm9ybWF0aW9uYWw7IG5vIGNvZGUgdXNlcyB0aGVzZS4KLWZvcm1hdF92ZXJzaW9uID0gIjMuMCIgICAgICAgICAgICAgICAgICAjIEZpbGUgZm9ybWF0IHZlcnNpb24gd2Ugd3JpdGUKK2Zvcm1hdF92ZXJzaW9uID0gIjQuMCIgICAgICAgICAgICAgICAgICAjIEZpbGUgZm9ybWF0IHZlcnNpb24gd2Ugd3JpdGUKIGNvbXBhdGlibGVfZm9ybWF0cyA9IFsiMS4wIiwgICAgICAgICAgICAjIE9yaWdpbmFsIHByb3RvY29sIDAKICAgICAgICAgICAgICAgICAgICAgICAiMS4xIiwgICAgICAgICAgICAjIFByb3RvY29sIDAgd2l0aCBJTlNUIGFkZGVkCiAgICAgICAgICAgICAgICAgICAgICAgIjEuMiIsICAgICAgICAgICAgIyBPcmlnaW5hbCBwcm90b2NvbCAxCiAgICAgICAgICAgICAgICAgICAgICAgIjEuMyIsICAgICAgICAgICAgIyBQcm90b2NvbCAxIHdpdGggQklORkxPQVQgYWRkZWQKICAgICAgICAgICAgICAgICAgICAgICAiMi4wIiwgICAgICAgICAgICAjIFByb3RvY29sIDIKICAgICAgICAgICAgICAgICAgICAgICAiMy4wIiwgICAgICAgICAgICAjIFByb3RvY29sIDMKKyAgICAgICAgICAgICAgICAgICAgICAiNC4wIiwgICAgICAgICAgICAjIFByb3RvY29sIDQKICAgICAgICAgICAgICAgICAgICAgICBdICAgICAgICAgICAgICAgICAjIE9sZCBmb3JtYXQgdmVyc2lvbnMgd2UgY2FuIHJlYWQKIAogIyBUaGlzIGlzIHRoZSBoaWdoZXN0IHByb3RvY29sIG51bWJlciB3ZSBrbm93IGhvdyB0byByZWFkLgotSElHSEVTVF9QUk9UT0NPTCA9IDMKK0hJR0hFU1RfUFJPVE9DT0wgPSA0CiAKICMgVGhlIHByb3RvY29sIHdlIHdyaXRlIGJ5IGRlZmF1bHQuICBNYXkgYmUgbGVzcyB0aGFuIEhJR0hFU1RfUFJPVE9DT0wuCiAjIFdlIGludGVudGlvbmFsbHkgd3JpdGUgYSBwcm90b2NvbCB0aGF0IFB5dGhvbiAyLnggY2Fubm90IHJlYWQ7CiAjIHRoZXJlIGFyZSB0b28gbWFueSBpc3N1ZXMgd2l0aCB0aGF0LgogREVGQVVMVF9QUk9UT0NPTCA9IDMKIAotIyBXaHkgdXNlIHN0cnVjdC5wYWNrKCkgZm9yIHBpY2tsaW5nIGJ1dCBtYXJzaGFsLmxvYWRzKCkgZm9yCi0jIHVucGlja2xpbmc/ICBzdHJ1Y3QucGFjaygpIGlzIDQwJSBmYXN0ZXIgdGhhbiBtYXJzaGFsLmR1bXBzKCksIGJ1dAotIyBtYXJzaGFsLmxvYWRzKCkgaXMgdHdpY2UgYXMgZmFzdCBhcyBzdHJ1Y3QudW5wYWNrKCkhCi1tbG9hZHMgPSBtYXJzaGFsLmxvYWRzCi0KIGNsYXNzIFBpY2tsZUVycm9yKEV4Y2VwdGlvbik6CiAgICAgIiIiQSBjb21tb24gYmFzZSBjbGFzcyBmb3IgdGhlIG90aGVyIHBpY2tsaW5nIGV4Y2VwdGlvbnMuIiIiCiAgICAgcGFzcwpAQCAtMTY4LDcgKzE2NSwxODMgQEAKIEJJTkJZVEVTICAgICAgID0gYidCJyAgICMgcHVzaCBieXRlczsgY291bnRlZCBiaW5hcnkgc3RyaW5nIGFyZ3VtZW50CiBTSE9SVF9CSU5CWVRFUyA9IGInQycgICAjICAiICAgICAiICAgOyAgICAiICAgICAgIiAgICAgICAiICAgICAgIiA8IDI1NiBieXRlcwogCi1fX2FsbF9fLmV4dGVuZChbeCBmb3IgeCBpbiBkaXIoKSBpZiByZS5tYXRjaCgiW0EtWl1bQS1aMC05X10rJCIseCldKQorIyBQcm90b2NvbCA0CitTSE9SVF9CSU5VTklDT0RFID0gYidceDhjJyAgIyBwdXNoIHNob3J0IHN0cmluZzsgVVRGLTggbGVuZ3RoIDwgMjU2IGJ5dGVzCitCSU5VTklDT0RFOCAgICAgID0gYidceDhkJyAgIyBwdXNoIHZlcnkgbG9uZyBzdHJpbmcKK0JJTkJZVEVTOCAgICAgICAgPSBiJ1x4OGUnICAjIHB1c2ggdmVyeSBsb25nIGJ5dGVzIHN0cmluZworRU1QVFlfU0VUICAgICAgICA9IGInXHg4ZicgICMgcHVzaCBlbXB0eSBzZXQgb24gdGhlIHN0YWNrCitBRERJVEVNUyAgICAgICAgID0gYidceDkwJyAgIyBtb2RpZnkgc2V0IGJ5IGFkZGluZyB0b3Btb3N0IHN0YWNrIGl0ZW1zCitGUk9aRU5TRVQgICAgICAgID0gYidceDkxJyAgIyBidWlsZCBmcm96ZW5zZXQgZnJvbSB0b3Btb3N0IHN0YWNrIGl0ZW1zCitORVdPQkpfRVggICAgICAgID0gYidceDkyJyAgIyBsaWtlIE5FV09CSiBidXQgd29yayB3aXRoIGtleXdvcmQgb25seSBhcmd1bWVudHMKK1NUQUNLX0dMT0JBTCAgICAgPSBiJ1x4OTMnICAjIHNhbWUgYXMgR0xPQkFMIGJ1dCB1c2luZyBuYW1lcyBvbiB0aGUgc3RhY2tzCitNRU1PSVpFICAgICAgICAgID0gYidceDk0JyAgIyBzdG9yZSB0b3Agb2YgdGhlIHN0YWNrIGluIG1lbW8KK0ZSQU1FICAgICAgICAgICAgPSBiJ1x4OTUnICAjIGluZGljYXRlIHRoZSBiZWdpbm5pbmcgb2YgYSBuZXcgZnJhbWUKKworX19hbGxfXy5leHRlbmQoW3ggZm9yIHggaW4gZGlyKCkgaWYgcmUubWF0Y2goIltBLVpdW0EtWjAtOV9dKyQiLCB4KV0pCisKKworY2xhc3MgX0ZyYW1lcjoKKworICAgIF9GUkFNRV9TSVpFX1RBUkdFVCA9IDY0ICogMTAyNAorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVfd3JpdGUpOgorICAgICAgICBzZWxmLmZpbGVfd3JpdGUgPSBmaWxlX3dyaXRlCisgICAgICAgIHNlbGYuY3VycmVudF9mcmFtZSA9IE5vbmUKKworICAgIGRlZiBzdGFydF9mcmFtaW5nKHNlbGYpOgorICAgICAgICBzZWxmLmN1cnJlbnRfZnJhbWUgPSBpby5CeXRlc0lPKCkKKworICAgIGRlZiBlbmRfZnJhbWluZyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5jdXJyZW50X2ZyYW1lIGFuZCBzZWxmLmN1cnJlbnRfZnJhbWUudGVsbCgpID4gMDoKKyAgICAgICAgICAgIHNlbGYuY29tbWl0X2ZyYW1lKGZvcmNlPVRydWUpCisgICAgICAgICAgICBzZWxmLmN1cnJlbnRfZnJhbWUgPSBOb25lCisKKyAgICBkZWYgY29tbWl0X2ZyYW1lKHNlbGYsIGZvcmNlPUZhbHNlKToKKyAgICAgICAgaWYgc2VsZi5jdXJyZW50X2ZyYW1lOgorICAgICAgICAgICAgZiA9IHNlbGYuY3VycmVudF9mcmFtZQorICAgICAgICAgICAgaWYgZi50ZWxsKCkgPj0gc2VsZi5fRlJBTUVfU0laRV9UQVJHRVQgb3IgZm9yY2U6CisgICAgICAgICAgICAgICAgd2l0aCBmLmdldGJ1ZmZlcigpIGFzIGRhdGE6CisgICAgICAgICAgICAgICAgICAgIG4gPSBsZW4oZGF0YSkKKyAgICAgICAgICAgICAgICAgICAgd3JpdGUgPSBzZWxmLmZpbGVfd3JpdGUKKyAgICAgICAgICAgICAgICAgICAgd3JpdGUoRlJBTUUpCisgICAgICAgICAgICAgICAgICAgIHdyaXRlKHBhY2soIjxRIiwgbikpCisgICAgICAgICAgICAgICAgICAgIHdyaXRlKGRhdGEpCisgICAgICAgICAgICAgICAgZi5zZWVrKDApCisgICAgICAgICAgICAgICAgZi50cnVuY2F0ZSgpCisKKyAgICBkZWYgd3JpdGUoc2VsZiwgZGF0YSk6CisgICAgICAgIGlmIHNlbGYuY3VycmVudF9mcmFtZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmN1cnJlbnRfZnJhbWUud3JpdGUoZGF0YSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmZpbGVfd3JpdGUoZGF0YSkKKworCitjbGFzcyBfVW5mcmFtZXI6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZV9yZWFkLCBmaWxlX3JlYWRsaW5lLCBmaWxlX3RlbGw9Tm9uZSk6CisgICAgICAgIHNlbGYuZmlsZV9yZWFkID0gZmlsZV9yZWFkCisgICAgICAgIHNlbGYuZmlsZV9yZWFkbGluZSA9IGZpbGVfcmVhZGxpbmUKKyAgICAgICAgc2VsZi5jdXJyZW50X2ZyYW1lID0gTm9uZQorCisgICAgZGVmIHJlYWQoc2VsZiwgbik6CisgICAgICAgIGlmIHNlbGYuY3VycmVudF9mcmFtZToKKyAgICAgICAgICAgIGRhdGEgPSBzZWxmLmN1cnJlbnRfZnJhbWUucmVhZChuKQorICAgICAgICAgICAgaWYgbm90IGRhdGEgYW5kIG4gIT0gMDoKKyAgICAgICAgICAgICAgICBzZWxmLmN1cnJlbnRfZnJhbWUgPSBOb25lCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuZmlsZV9yZWFkKG4pCisgICAgICAgICAgICBpZiBsZW4oZGF0YSkgPCBuOgorICAgICAgICAgICAgICAgIHJhaXNlIFVucGlja2xpbmdFcnJvcigKKyAgICAgICAgICAgICAgICAgICAgInBpY2tsZSBleGhhdXN0ZWQgYmVmb3JlIGVuZCBvZiBmcmFtZSIpCisgICAgICAgICAgICByZXR1cm4gZGF0YQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuZmlsZV9yZWFkKG4pCisKKyAgICBkZWYgcmVhZGxpbmUoc2VsZik6CisgICAgICAgIGlmIHNlbGYuY3VycmVudF9mcmFtZToKKyAgICAgICAgICAgIGRhdGEgPSBzZWxmLmN1cnJlbnRfZnJhbWUucmVhZGxpbmUoKQorICAgICAgICAgICAgaWYgbm90IGRhdGE6CisgICAgICAgICAgICAgICAgc2VsZi5jdXJyZW50X2ZyYW1lID0gTm9uZQorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmZpbGVfcmVhZGxpbmUoKQorICAgICAgICAgICAgaWYgZGF0YVstMV0gIT0gYidcbidbMF06CisgICAgICAgICAgICAgICAgcmFpc2UgVW5waWNrbGluZ0Vycm9yKAorICAgICAgICAgICAgICAgICAgICAicGlja2xlIGV4aGF1c3RlZCBiZWZvcmUgZW5kIG9mIGZyYW1lIikKKyAgICAgICAgICAgIHJldHVybiBkYXRhCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5maWxlX3JlYWRsaW5lKCkKKworICAgIGRlZiBsb2FkX2ZyYW1lKHNlbGYsIGZyYW1lX3NpemUpOgorICAgICAgICBpZiBzZWxmLmN1cnJlbnRfZnJhbWUgYW5kIHNlbGYuY3VycmVudF9mcmFtZS5yZWFkKCkgIT0gYicnOgorICAgICAgICAgICAgcmFpc2UgVW5waWNrbGluZ0Vycm9yKAorICAgICAgICAgICAgICAgICJiZWdpbm5pbmcgb2YgYSBuZXcgZnJhbWUgYmVmb3JlIGVuZCBvZiBjdXJyZW50IGZyYW1lIikKKyAgICAgICAgc2VsZi5jdXJyZW50X2ZyYW1lID0gaW8uQnl0ZXNJTyhzZWxmLmZpbGVfcmVhZChmcmFtZV9zaXplKSkKKworCisjIFRvb2xzIHVzZWQgZm9yIHBpY2tsaW5nLgorCitkZWYgX2dldGF0dHJpYnV0ZShvYmosIG5hbWUsIGFsbG93X3F1YWxuYW1lPUZhbHNlKToKKyAgICBkb3R0ZWRfcGF0aCA9IG5hbWUuc3BsaXQoIi4iKQorICAgIGlmIG5vdCBhbGxvd19xdWFsbmFtZSBhbmQgbGVuKGRvdHRlZF9wYXRoKSA+IDE6CisgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKCJDYW4ndCBnZXQgcXVhbGlmaWVkIGF0dHJpYnV0ZSB7IXJ9IG9uIHshcn07ICIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidXNlIHByb3RvY29scyA+PSA0IHRvIGVuYWJsZSBzdXBwb3J0IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KG5hbWUsIG9iaikpCisgICAgZm9yIHN1YnBhdGggaW4gZG90dGVkX3BhdGg6CisgICAgICAgIGlmIHN1YnBhdGggPT0gJzxsb2NhbHM+JzoKKyAgICAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKCJDYW4ndCBnZXQgbG9jYWwgYXR0cmlidXRlIHshcn0gb24geyFyfSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JtYXQobmFtZSwgb2JqKSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb2JqID0gZ2V0YXR0cihvYmosIHN1YnBhdGgpCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKCJDYW4ndCBnZXQgYXR0cmlidXRlIHshcn0gb24geyFyfSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JtYXQobmFtZSwgb2JqKSkKKyAgICByZXR1cm4gb2JqCisKK2RlZiB3aGljaG1vZHVsZShvYmosIG5hbWUsIGFsbG93X3F1YWxuYW1lPUZhbHNlKToKKyAgICAiIiJGaW5kIHRoZSBtb2R1bGUgYW4gb2JqZWN0IGJlbG9uZyB0by4iIiIKKyAgICBtb2R1bGVfbmFtZSA9IGdldGF0dHIob2JqLCAnX19tb2R1bGVfXycsIE5vbmUpCisgICAgaWYgbW9kdWxlX25hbWUgaXMgbm90IE5vbmU6CisgICAgICAgIHJldHVybiBtb2R1bGVfbmFtZQorICAgICMgUHJvdGVjdCB0aGUgaXRlcmF0aW9uIGJ5IHVzaW5nIGEgbGlzdCBjb3B5IG9mIHN5cy5tb2R1bGVzIGFnYWluc3QgZHluYW1pYworICAgICMgbW9kdWxlcyB0aGF0IHRyaWdnZXIgaW1wb3J0cyBvZiBvdGhlciBtb2R1bGVzIHVwb24gY2FsbHMgdG8gZ2V0YXR0ci4KKyAgICBmb3IgbW9kdWxlX25hbWUsIG1vZHVsZSBpbiBsaXN0KHN5cy5tb2R1bGVzLml0ZW1zKCkpOgorICAgICAgICBpZiBtb2R1bGVfbmFtZSA9PSAnX19tYWluX18nIG9yIG1vZHVsZSBpcyBOb25lOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgX2dldGF0dHJpYnV0ZShtb2R1bGUsIG5hbWUsIGFsbG93X3F1YWxuYW1lKSBpcyBvYmo6CisgICAgICAgICAgICAgICAgcmV0dXJuIG1vZHVsZV9uYW1lCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICByZXR1cm4gJ19fbWFpbl9fJworCitkZWYgZW5jb2RlX2xvbmcoeCk6CisgICAgciIiIkVuY29kZSBhIGxvbmcgdG8gYSB0d28ncyBjb21wbGVtZW50IGxpdHRsZS1lbmRpYW4gYmluYXJ5IHN0cmluZy4KKyAgICBOb3RlIHRoYXQgMCBpcyBhIHNwZWNpYWwgY2FzZSwgcmV0dXJuaW5nIGFuIGVtcHR5IHN0cmluZywgdG8gc2F2ZSBhCisgICAgYnl0ZSBpbiB0aGUgTE9ORzEgcGlja2xpbmcgY29udGV4dC4KKworICAgID4+PiBlbmNvZGVfbG9uZygwKQorICAgIGInJworICAgID4+PiBlbmNvZGVfbG9uZygyNTUpCisgICAgYidceGZmXHgwMCcKKyAgICA+Pj4gZW5jb2RlX2xvbmcoMzI3NjcpCisgICAgYidceGZmXHg3ZicKKyAgICA+Pj4gZW5jb2RlX2xvbmcoLTI1NikKKyAgICBiJ1x4MDBceGZmJworICAgID4+PiBlbmNvZGVfbG9uZygtMzI3NjgpCisgICAgYidceDAwXHg4MCcKKyAgICA+Pj4gZW5jb2RlX2xvbmcoLTEyOCkKKyAgICBiJ1x4ODAnCisgICAgPj4+IGVuY29kZV9sb25nKDEyNykKKyAgICBiJ1x4N2YnCisgICAgPj4+CisgICAgIiIiCisgICAgaWYgeCA9PSAwOgorICAgICAgICByZXR1cm4gYicnCisgICAgbmJ5dGVzID0gKHguYml0X2xlbmd0aCgpID4+IDMpICsgMQorICAgIHJlc3VsdCA9IHgudG9fYnl0ZXMobmJ5dGVzLCBieXRlb3JkZXI9J2xpdHRsZScsIHNpZ25lZD1UcnVlKQorICAgIGlmIHggPCAwIGFuZCBuYnl0ZXMgPiAxOgorICAgICAgICBpZiByZXN1bHRbLTFdID09IDB4ZmYgYW5kIChyZXN1bHRbLTJdICYgMHg4MCkgIT0gMDoKKyAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdFs6LTFdCisgICAgcmV0dXJuIHJlc3VsdAorCitkZWYgZGVjb2RlX2xvbmcoZGF0YSk6CisgICAgciIiIkRlY29kZSBhIGxvbmcgZnJvbSBhIHR3bydzIGNvbXBsZW1lbnQgbGl0dGxlLWVuZGlhbiBiaW5hcnkgc3RyaW5nLgorCisgICAgPj4+IGRlY29kZV9sb25nKGInJykKKyAgICAwCisgICAgPj4+IGRlY29kZV9sb25nKGIiXHhmZlx4MDAiKQorICAgIDI1NQorICAgID4+PiBkZWNvZGVfbG9uZyhiIlx4ZmZceDdmIikKKyAgICAzMjc2NworICAgID4+PiBkZWNvZGVfbG9uZyhiIlx4MDBceGZmIikKKyAgICAtMjU2CisgICAgPj4+IGRlY29kZV9sb25nKGIiXHgwMFx4ODAiKQorICAgIC0zMjc2OAorICAgID4+PiBkZWNvZGVfbG9uZyhiIlx4ODAiKQorICAgIC0xMjgKKyAgICA+Pj4gZGVjb2RlX2xvbmcoYiJceDdmIikKKyAgICAxMjcKKyAgICAiIiIKKyAgICByZXR1cm4gaW50LmZyb21fYnl0ZXMoZGF0YSwgYnl0ZW9yZGVyPSdsaXR0bGUnLCBzaWduZWQ9VHJ1ZSkKKwogCiAjIFBpY2tsaW5nIG1hY2hpbmVyeQogCkBAIC0xNzcsMjQgKzM1MCwyNSBAQAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlLCBwcm90b2NvbD1Ob25lLCAqLCBmaXhfaW1wb3J0cz1UcnVlKToKICAgICAgICAgIiIiVGhpcyB0YWtlcyBhIGJpbmFyeSBmaWxlIGZvciB3cml0aW5nIGEgcGlja2xlIGRhdGEgc3RyZWFtLgogCi0gICAgICAgIFRoZSBvcHRpb25hbCBwcm90b2NvbCBhcmd1bWVudCB0ZWxscyB0aGUgcGlja2xlciB0byB1c2UgdGhlCi0gICAgICAgIGdpdmVuIHByb3RvY29sOyBzdXBwb3J0ZWQgcHJvdG9jb2xzIGFyZSAwLCAxLCAyLCAzLiAgVGhlIGRlZmF1bHQKLSAgICAgICAgcHJvdG9jb2wgaXMgMzsgYSBiYWNrd2FyZC1pbmNvbXBhdGlibGUgcHJvdG9jb2wgZGVzaWduZWQgZm9yCi0gICAgICAgIFB5dGhvbiAzLjAuCisgICAgICAgIFRoZSBvcHRpb25hbCAqcHJvdG9jb2wqIGFyZ3VtZW50IHRlbGxzIHRoZSBwaWNrbGVyIHRvIHVzZSB0aGUKKyAgICAgICAgZ2l2ZW4gcHJvdG9jb2w7IHN1cHBvcnRlZCBwcm90b2NvbHMgYXJlIDAsIDEsIDIsIDMgYW5kIDQuICBUaGUKKyAgICAgICAgZGVmYXVsdCBwcm90b2NvbCBpcyAzOyBhIGJhY2t3YXJkLWluY29tcGF0aWJsZSBwcm90b2NvbCBkZXNpZ25lZAorICAgICAgICBmb3IgUHl0aG9uIDMuCiAKICAgICAgICAgU3BlY2lmeWluZyBhIG5lZ2F0aXZlIHByb3RvY29sIHZlcnNpb24gc2VsZWN0cyB0aGUgaGlnaGVzdAogICAgICAgICBwcm90b2NvbCB2ZXJzaW9uIHN1cHBvcnRlZC4gIFRoZSBoaWdoZXIgdGhlIHByb3RvY29sIHVzZWQsIHRoZQogICAgICAgICBtb3JlIHJlY2VudCB0aGUgdmVyc2lvbiBvZiBQeXRob24gbmVlZGVkIHRvIHJlYWQgdGhlIHBpY2tsZQogICAgICAgICBwcm9kdWNlZC4KIAotICAgICAgICBUaGUgZmlsZSBhcmd1bWVudCBtdXN0IGhhdmUgYSB3cml0ZSgpIG1ldGhvZCB0aGF0IGFjY2VwdHMgYSBzaW5nbGUKLSAgICAgICAgYnl0ZXMgYXJndW1lbnQuIEl0IGNhbiB0aHVzIGJlIGEgZmlsZSBvYmplY3Qgb3BlbmVkIGZvciBiaW5hcnkKLSAgICAgICAgd3JpdGluZywgYSBpby5CeXRlc0lPIGluc3RhbmNlLCBvciBhbnkgb3RoZXIgY3VzdG9tIG9iamVjdCB0aGF0Ci0gICAgICAgIG1lZXRzIHRoaXMgaW50ZXJmYWNlLgorICAgICAgICBUaGUgKmZpbGUqIGFyZ3VtZW50IG11c3QgaGF2ZSBhIHdyaXRlKCkgbWV0aG9kIHRoYXQgYWNjZXB0cyBhCisgICAgICAgIHNpbmdsZSBieXRlcyBhcmd1bWVudC4gSXQgY2FuIHRodXMgYmUgYSBmaWxlIG9iamVjdCBvcGVuZWQgZm9yCisgICAgICAgIGJpbmFyeSB3cml0aW5nLCBhbiBpby5CeXRlc0lPIGluc3RhbmNlLCBvciBhbnkgb3RoZXIgY3VzdG9tCisgICAgICAgIG9iamVjdCB0aGF0IG1lZXRzIHRoaXMgaW50ZXJmYWNlLgogCi0gICAgICAgIElmIGZpeF9pbXBvcnRzIGlzIFRydWUgYW5kIHByb3RvY29sIGlzIGxlc3MgdGhhbiAzLCBwaWNrbGUgd2lsbCB0cnkgdG8KLSAgICAgICAgbWFwIHRoZSBuZXcgUHl0aG9uIDMueCBuYW1lcyB0byB0aGUgb2xkIG1vZHVsZSBuYW1lcyB1c2VkIGluIFB5dGhvbgotICAgICAgICAyLngsIHNvIHRoYXQgdGhlIHBpY2tsZSBkYXRhIHN0cmVhbSBpcyByZWFkYWJsZSB3aXRoIFB5dGhvbiAyLnguCisgICAgICAgIElmICpmaXhfaW1wb3J0cyogaXMgVHJ1ZSBhbmQgKnByb3RvY29sKiBpcyBsZXNzIHRoYW4gMywgcGlja2xlCisgICAgICAgIHdpbGwgdHJ5IHRvIG1hcCB0aGUgbmV3IFB5dGhvbiAzIG5hbWVzIHRvIHRoZSBvbGQgbW9kdWxlIG5hbWVzCisgICAgICAgIHVzZWQgaW4gUHl0aG9uIDIsIHNvIHRoYXQgdGhlIHBpY2tsZSBkYXRhIHN0cmVhbSBpcyByZWFkYWJsZQorICAgICAgICB3aXRoIFB5dGhvbiAyLgogICAgICAgICAiIiIKICAgICAgICAgaWYgcHJvdG9jb2wgaXMgTm9uZToKICAgICAgICAgICAgIHByb3RvY29sID0gREVGQVVMVF9QUk9UT0NPTApAQCAtMjAzLDkgKzM3NywxMSBAQAogICAgICAgICBlbGlmIG5vdCAwIDw9IHByb3RvY29sIDw9IEhJR0hFU1RfUFJPVE9DT0w6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJwaWNrbGUgcHJvdG9jb2wgbXVzdCBiZSA8PSAlZCIgJSBISUdIRVNUX1BST1RPQ09MKQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmLndyaXRlID0gZmlsZS53cml0ZQorICAgICAgICAgICAgc2VsZi5fZmlsZV93cml0ZSA9IGZpbGUud3JpdGUKICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgogICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJmaWxlIG11c3QgaGF2ZSBhICd3cml0ZScgYXR0cmlidXRlIikKKyAgICAgICAgc2VsZi5mcmFtZXIgPSBfRnJhbWVyKHNlbGYuX2ZpbGVfd3JpdGUpCisgICAgICAgIHNlbGYud3JpdGUgPSBzZWxmLmZyYW1lci53cml0ZQogICAgICAgICBzZWxmLm1lbW8gPSB7fQogICAgICAgICBzZWxmLnByb3RvID0gaW50KHByb3RvY29sKQogICAgICAgICBzZWxmLmJpbiA9IHByb3RvY29sID49IDEKQEAgLTIxNiwxMCArMzkyLDkgQEAKICAgICAgICAgIiIiQ2xlYXJzIHRoZSBwaWNrbGVyJ3MgIm1lbW8iLgogCiAgICAgICAgIFRoZSBtZW1vIGlzIHRoZSBkYXRhIHN0cnVjdHVyZSB0aGF0IHJlbWVtYmVycyB3aGljaCBvYmplY3RzIHRoZQotICAgICAgICBwaWNrbGVyIGhhcyBhbHJlYWR5IHNlZW4sIHNvIHRoYXQgc2hhcmVkIG9yIHJlY3Vyc2l2ZSBvYmplY3RzIGFyZQotICAgICAgICBwaWNrbGVkIGJ5IHJlZmVyZW5jZSBhbmQgbm90IGJ5IHZhbHVlLiAgVGhpcyBtZXRob2QgaXMgdXNlZnVsIHdoZW4KLSAgICAgICAgcmUtdXNpbmcgcGlja2xlcnMuCi0KKyAgICAgICAgcGlja2xlciBoYXMgYWxyZWFkeSBzZWVuLCBzbyB0aGF0IHNoYXJlZCBvciByZWN1cnNpdmUgb2JqZWN0cworICAgICAgICBhcmUgcGlja2xlZCBieSByZWZlcmVuY2UgYW5kIG5vdCBieSB2YWx1ZS4gIFRoaXMgbWV0aG9kIGlzCisgICAgICAgIHVzZWZ1bCB3aGVuIHJlLXVzaW5nIHBpY2tsZXJzLgogICAgICAgICAiIiIKICAgICAgICAgc2VsZi5tZW1vLmNsZWFyKCkKIApAQCAtMjI3LDEzICs0MDIsMTYgQEAKICAgICAgICAgIiIiV3JpdGUgYSBwaWNrbGVkIHJlcHJlc2VudGF0aW9uIG9mIG9iaiB0byB0aGUgb3BlbiBmaWxlLiIiIgogICAgICAgICAjIENoZWNrIHdoZXRoZXIgUGlja2xlciB3YXMgaW5pdGlhbGl6ZWQgY29ycmVjdGx5LiBUaGlzIGlzCiAgICAgICAgICMgb25seSBuZWVkZWQgdG8gbWltaWMgdGhlIGJlaGF2aW9yIG9mIF9waWNrbGUuUGlja2xlci5kdW1wKCkuCi0gICAgICAgIGlmIG5vdCBoYXNhdHRyKHNlbGYsICJ3cml0ZSIpOgorICAgICAgICBpZiBub3QgaGFzYXR0cihzZWxmLCAiX2ZpbGVfd3JpdGUiKToKICAgICAgICAgICAgIHJhaXNlIFBpY2tsaW5nRXJyb3IoIlBpY2tsZXIuX19pbml0X18oKSB3YXMgbm90IGNhbGxlZCBieSAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlcy5fX2luaXRfXygpIiAlIChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywpKQogICAgICAgICBpZiBzZWxmLnByb3RvID49IDI6Ci0gICAgICAgICAgICBzZWxmLndyaXRlKFBST1RPICsgYnl0ZXMoW3NlbGYucHJvdG9dKSkKKyAgICAgICAgICAgIHNlbGYud3JpdGUoUFJPVE8gKyBwYWNrKCI8QiIsIHNlbGYucHJvdG8pKQorICAgICAgICBpZiBzZWxmLnByb3RvID49IDQ6CisgICAgICAgICAgICBzZWxmLmZyYW1lci5zdGFydF9mcmFtaW5nKCkKICAgICAgICAgc2VsZi5zYXZlKG9iaikKICAgICAgICAgc2VsZi53cml0ZShTVE9QKQorICAgICAgICBzZWxmLmZyYW1lci5lbmRfZnJhbWluZygpCiAKICAgICBkZWYgbWVtb2l6ZShzZWxmLCBvYmopOgogICAgICAgICAiIiJTdG9yZSBhbiBvYmplY3QgaW4gdGhlIG1lbW8uIiIiCkBAIC0yNTMsMzEgKzQzMSwzNSBAQAogICAgICAgICBpZiBzZWxmLmZhc3Q6CiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgYXNzZXJ0IGlkKG9iaikgbm90IGluIHNlbGYubWVtbwotICAgICAgICBtZW1vX2xlbiA9IGxlbihzZWxmLm1lbW8pCi0gICAgICAgIHNlbGYud3JpdGUoc2VsZi5wdXQobWVtb19sZW4pKQotICAgICAgICBzZWxmLm1lbW9baWQob2JqKV0gPSBtZW1vX2xlbiwgb2JqCisgICAgICAgIGlkeCA9IGxlbihzZWxmLm1lbW8pCisgICAgICAgIHNlbGYud3JpdGUoc2VsZi5wdXQoaWR4KSkKKyAgICAgICAgc2VsZi5tZW1vW2lkKG9iaildID0gaWR4LCBvYmoKIAogICAgICMgUmV0dXJuIGEgUFVUIChCSU5QVVQsIExPTkdfQklOUFVUKSBvcGNvZGUgc3RyaW5nLCB3aXRoIGFyZ3VtZW50IGkuCi0gICAgZGVmIHB1dChzZWxmLCBpLCBwYWNrPXN0cnVjdC5wYWNrKToKLSAgICAgICAgaWYgc2VsZi5iaW46Ci0gICAgICAgICAgICBpZiBpIDwgMjU2OgotICAgICAgICAgICAgICAgIHJldHVybiBCSU5QVVQgKyBieXRlcyhbaV0pCisgICAgZGVmIHB1dChzZWxmLCBpZHgpOgorICAgICAgICBpZiBzZWxmLnByb3RvID49IDQ6CisgICAgICAgICAgICByZXR1cm4gTUVNT0laRQorICAgICAgICBlbGlmIHNlbGYuYmluOgorICAgICAgICAgICAgaWYgaWR4IDwgMjU2OgorICAgICAgICAgICAgICAgIHJldHVybiBCSU5QVVQgKyBwYWNrKCI8QiIsIGlkeCkKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIExPTkdfQklOUFVUICsgcGFjaygiPEkiLCBpKQotCi0gICAgICAgIHJldHVybiBQVVQgKyByZXByKGkpLmVuY29kZSgiYXNjaWkiKSArIGInXG4nCisgICAgICAgICAgICAgICAgcmV0dXJuIExPTkdfQklOUFVUICsgcGFjaygiPEkiLCBpZHgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gUFVUICsgcmVwcihpZHgpLmVuY29kZSgiYXNjaWkiKSArIGInXG4nCiAKICAgICAjIFJldHVybiBhIEdFVCAoQklOR0VULCBMT05HX0JJTkdFVCkgb3Bjb2RlIHN0cmluZywgd2l0aCBhcmd1bWVudCBpLgotICAgIGRlZiBnZXQoc2VsZiwgaSwgcGFjaz1zdHJ1Y3QucGFjayk6CisgICAgZGVmIGdldChzZWxmLCBpKToKICAgICAgICAgaWYgc2VsZi5iaW46CiAgICAgICAgICAgICBpZiBpIDwgMjU2OgotICAgICAgICAgICAgICAgIHJldHVybiBCSU5HRVQgKyBieXRlcyhbaV0pCisgICAgICAgICAgICAgICAgcmV0dXJuIEJJTkdFVCArIHBhY2soIjxCIiwgaSkKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcmV0dXJuIExPTkdfQklOR0VUICsgcGFjaygiPEkiLCBpKQogCiAgICAgICAgIHJldHVybiBHRVQgKyByZXByKGkpLmVuY29kZSgiYXNjaWkiKSArIGInXG4nCiAKICAgICBkZWYgc2F2ZShzZWxmLCBvYmosIHNhdmVfcGVyc2lzdGVudF9pZD1UcnVlKToKKyAgICAgICAgc2VsZi5mcmFtZXIuY29tbWl0X2ZyYW1lKCkKKwogICAgICAgICAjIENoZWNrIGZvciBwZXJzaXN0ZW50IGlkIChkZWZpbmVkIGJ5IGEgc3ViY2xhc3MpCiAgICAgICAgIHBpZCA9IHNlbGYucGVyc2lzdGVudF9pZChvYmopCiAgICAgICAgIGlmIHBpZCBpcyBub3QgTm9uZSBhbmQgc2F2ZV9wZXJzaXN0ZW50X2lkOgpAQCAtMjg2LDIwICs0NjgsMjAgQEAKIAogICAgICAgICAjIENoZWNrIHRoZSBtZW1vCiAgICAgICAgIHggPSBzZWxmLm1lbW8uZ2V0KGlkKG9iaikpCi0gICAgICAgIGlmIHg6CisgICAgICAgIGlmIHggaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBzZWxmLndyaXRlKHNlbGYuZ2V0KHhbMF0pKQogICAgICAgICAgICAgcmV0dXJuCiAKICAgICAgICAgIyBDaGVjayB0aGUgdHlwZSBkaXNwYXRjaCB0YWJsZQogICAgICAgICB0ID0gdHlwZShvYmopCiAgICAgICAgIGYgPSBzZWxmLmRpc3BhdGNoLmdldCh0KQotICAgICAgICBpZiBmOgorICAgICAgICBpZiBmIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgZihzZWxmLCBvYmopICMgQ2FsbCB1bmJvdW5kIG1ldGhvZCB3aXRoIGV4cGxpY2l0IHNlbGYKICAgICAgICAgICAgIHJldHVybgogCiAgICAgICAgICMgQ2hlY2sgcHJpdmF0ZSBkaXNwYXRjaCB0YWJsZSBpZiBhbnksIG9yIGVsc2UgY29weXJlZy5kaXNwYXRjaF90YWJsZQogICAgICAgICByZWR1Y2UgPSBnZXRhdHRyKHNlbGYsICdkaXNwYXRjaF90YWJsZScsIGRpc3BhdGNoX3RhYmxlKS5nZXQodCkKLSAgICAgICAgaWYgcmVkdWNlOgorICAgICAgICBpZiByZWR1Y2UgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBydiA9IHJlZHVjZShvYmopCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAjIENoZWNrIGZvciBhIGNsYXNzIHdpdGggYSBjdXN0b20gbWV0YWNsYXNzOyB0cmVhdCBhcyByZWd1bGFyIGNsYXNzCkBAIC0zMTMsMTEgKzQ5NSwxMSBAQAogCiAgICAgICAgICAgICAjIENoZWNrIGZvciBhIF9fcmVkdWNlX2V4X18gbWV0aG9kLCBmYWxsIGJhY2sgdG8gX19yZWR1Y2VfXwogICAgICAgICAgICAgcmVkdWNlID0gZ2V0YXR0cihvYmosICJfX3JlZHVjZV9leF9fIiwgTm9uZSkKLSAgICAgICAgICAgIGlmIHJlZHVjZToKKyAgICAgICAgICAgIGlmIHJlZHVjZSBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICBydiA9IHJlZHVjZShzZWxmLnByb3RvKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICByZWR1Y2UgPSBnZXRhdHRyKG9iaiwgIl9fcmVkdWNlX18iLCBOb25lKQotICAgICAgICAgICAgICAgIGlmIHJlZHVjZToKKyAgICAgICAgICAgICAgICBpZiByZWR1Y2UgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAgICAgIHJ2ID0gcmVkdWNlKCkKICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICByYWlzZSBQaWNrbGluZ0Vycm9yKCJDYW4ndCBwaWNrbGUgJXIgb2JqZWN0OiAlciIgJQpAQCAtMzUzLDI0ICs1MzUsMzMgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYud3JpdGUoUEVSU0lEICsgc3RyKHBpZCkuZW5jb2RlKCJhc2NpaSIpICsgYidcbicpCiAKLSAgICBkZWYgc2F2ZV9yZWR1Y2Uoc2VsZiwgZnVuYywgYXJncywgc3RhdGU9Tm9uZSwKLSAgICAgICAgICAgICAgICAgICAgbGlzdGl0ZW1zPU5vbmUsIGRpY3RpdGVtcz1Ob25lLCBvYmo9Tm9uZSk6CisgICAgZGVmIHNhdmVfcmVkdWNlKHNlbGYsIGZ1bmMsIGFyZ3MsIHN0YXRlPU5vbmUsIGxpc3RpdGVtcz1Ob25lLAorICAgICAgICAgICAgICAgICAgICBkaWN0aXRlbXM9Tm9uZSwgb2JqPU5vbmUpOgogICAgICAgICAjIFRoaXMgQVBJIGlzIGNhbGxlZCBieSBzb21lIHN1YmNsYXNzZXMKIAotICAgICAgICAjIEFzc2VydCB0aGF0IGFyZ3MgaXMgYSB0dXBsZQogICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShhcmdzLCB0dXBsZSk6Ci0gICAgICAgICAgICByYWlzZSBQaWNrbGluZ0Vycm9yKCJhcmdzIGZyb20gc2F2ZV9yZWR1Y2UoKSBzaG91bGQgYmUgYSB0dXBsZSIpCi0KLSAgICAgICAgIyBBc3NlcnQgdGhhdCBmdW5jIGlzIGNhbGxhYmxlCisgICAgICAgICAgICByYWlzZSBQaWNrbGluZ0Vycm9yKCJhcmdzIGZyb20gc2F2ZV9yZWR1Y2UoKSBtdXN0IGJlIGEgdHVwbGUiKQogICAgICAgICBpZiBub3QgY2FsbGFibGUoZnVuYyk6Ci0gICAgICAgICAgICByYWlzZSBQaWNrbGluZ0Vycm9yKCJmdW5jIGZyb20gc2F2ZV9yZWR1Y2UoKSBzaG91bGQgYmUgY2FsbGFibGUiKQorICAgICAgICAgICAgcmFpc2UgUGlja2xpbmdFcnJvcigiZnVuYyBmcm9tIHNhdmVfcmVkdWNlKCkgbXVzdCBiZSBjYWxsYWJsZSIpCiAKICAgICAgICAgc2F2ZSA9IHNlbGYuc2F2ZQogICAgICAgICB3cml0ZSA9IHNlbGYud3JpdGUKIAotICAgICAgICAjIFByb3RvY29sIDIgc3BlY2lhbCBjYXNlOiBpZiBmdW5jJ3MgbmFtZSBpcyBfX25ld29ial9fLCB1c2UgTkVXT0JKCi0gICAgICAgIGlmIHNlbGYucHJvdG8gPj0gMiBhbmQgZ2V0YXR0cihmdW5jLCAiX19uYW1lX18iLCAiIikgPT0gIl9fbmV3b2JqX18iOgotICAgICAgICAgICAgIyBBIF9fcmVkdWNlX18gaW1wbGVtZW50YXRpb24gY2FuIGRpcmVjdCBwcm90b2NvbCAyIHRvCisgICAgICAgIGZ1bmNfbmFtZSA9IGdldGF0dHIoZnVuYywgIl9fbmFtZV9fIiwgIiIpCisgICAgICAgIGlmIHNlbGYucHJvdG8gPj0gNCBhbmQgZnVuY19uYW1lID09ICJfX25ld29ial9leF9fIjoKKyAgICAgICAgICAgIGNscywgYXJncywga3dhcmdzID0gYXJncworICAgICAgICAgICAgaWYgbm90IGhhc2F0dHIoY2xzLCAiX19uZXdfXyIpOgorICAgICAgICAgICAgICAgIHJhaXNlIFBpY2tsaW5nRXJyb3IoImFyZ3NbMF0gZnJvbSB7fSBhcmdzIGhhcyBubyBfX25ld19fIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1hdChmdW5jX25hbWUpKQorICAgICAgICAgICAgaWYgb2JqIGlzIG5vdCBOb25lIGFuZCBjbHMgaXMgbm90IG9iai5fX2NsYXNzX186CisgICAgICAgICAgICAgICAgcmFpc2UgUGlja2xpbmdFcnJvcigiYXJnc1swXSBmcm9tIHt9IGFyZ3MgaGFzIHRoZSB3cm9uZyBjbGFzcyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JtYXQoZnVuY19uYW1lKSkKKyAgICAgICAgICAgIHNhdmUoY2xzKQorICAgICAgICAgICAgc2F2ZShhcmdzKQorICAgICAgICAgICAgc2F2ZShrd2FyZ3MpCisgICAgICAgICAgICB3cml0ZShORVdPQkpfRVgpCisgICAgICAgIGVsaWYgc2VsZi5wcm90byA+PSAyIGFuZCBmdW5jX25hbWUgPT0gIl9fbmV3b2JqX18iOgorICAgICAgICAgICAgIyBBIF9fcmVkdWNlX18gaW1wbGVtZW50YXRpb24gY2FuIGRpcmVjdCBwcm90b2NvbCAyIG9yIG5ld2VyIHRvCiAgICAgICAgICAgICAjIHVzZSB0aGUgbW9yZSBlZmZpY2llbnQgTkVXT0JKIG9wY29kZSwgd2hpbGUgc3RpbGwKICAgICAgICAgICAgICMgYWxsb3dpbmcgcHJvdG9jb2wgMCBhbmQgMSB0byB3b3JrIG5vcm1hbGx5LiAgRm9yIHRoaXMgdG8KICAgICAgICAgICAgICMgd29yaywgdGhlIGZ1bmN0aW9uIHJldHVybmVkIGJ5IF9fcmVkdWNlX18gc2hvdWxkIGJlCkBAIC00MTMsNyArNjA0LDEzIEBACiAgICAgICAgICAgICB3cml0ZShSRURVQ0UpCiAKICAgICAgICAgaWYgb2JqIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgc2VsZi5tZW1vaXplKG9iaikKKyAgICAgICAgICAgICMgSWYgdGhlIG9iamVjdCBpcyBhbHJlYWR5IGluIHRoZSBtZW1vLCB0aGlzIG1lYW5zIGl0IGlzCisgICAgICAgICAgICAjIHJlY3Vyc2l2ZS4gSW4gdGhpcyBjYXNlLCB0aHJvdyBhd2F5IGV2ZXJ5dGhpbmcgd2UgcHV0IG9uIHRoZQorICAgICAgICAgICAgIyBzdGFjaywgYW5kIGZldGNoIHRoZSBvYmplY3QgYmFjayBmcm9tIHRoZSBtZW1vLgorICAgICAgICAgICAgaWYgaWQob2JqKSBpbiBzZWxmLm1lbW86CisgICAgICAgICAgICAgICAgd3JpdGUoUE9QICsgc2VsZi5nZXQoc2VsZi5tZW1vW2lkKG9iaildWzBdKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5tZW1vaXplKG9iaikKIAogICAgICAgICAjIE1vcmUgbmV3IHNwZWNpYWwgY2FzZXMgKHRoYXQgd29yayB3aXRoIG9sZGVyIHByb3RvY29scyBhcwogICAgICAgICAjIHdlbGwpOiB3aGVuIF9fcmVkdWNlX18gcmV0dXJucyBhIHR1cGxlIHdpdGggNCBvciA1IGl0ZW1zLApAQCAtNDM4LDIyICs2MzUsMTQgQEAKICAgICAgICAgc2VsZi53cml0ZShOT05FKQogICAgIGRpc3BhdGNoW3R5cGUoTm9uZSldID0gc2F2ZV9ub25lCiAKLSAgICBkZWYgc2F2ZV9lbGxpcHNpcyhzZWxmLCBvYmopOgotICAgICAgICBzZWxmLnNhdmVfZ2xvYmFsKEVsbGlwc2lzLCAnRWxsaXBzaXMnKQotICAgIGRpc3BhdGNoW3R5cGUoRWxsaXBzaXMpXSA9IHNhdmVfZWxsaXBzaXMKLQotICAgIGRlZiBzYXZlX25vdGltcGxlbWVudGVkKHNlbGYsIG9iaik6Ci0gICAgICAgIHNlbGYuc2F2ZV9nbG9iYWwoTm90SW1wbGVtZW50ZWQsICdOb3RJbXBsZW1lbnRlZCcpCi0gICAgZGlzcGF0Y2hbdHlwZShOb3RJbXBsZW1lbnRlZCldID0gc2F2ZV9ub3RpbXBsZW1lbnRlZAotCiAgICAgZGVmIHNhdmVfYm9vbChzZWxmLCBvYmopOgogICAgICAgICBpZiBzZWxmLnByb3RvID49IDI6Ci0gICAgICAgICAgICBzZWxmLndyaXRlKG9iaiBhbmQgTkVXVFJVRSBvciBORVdGQUxTRSkKKyAgICAgICAgICAgIHNlbGYud3JpdGUoTkVXVFJVRSBpZiBvYmogZWxzZSBORVdGQUxTRSkKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYud3JpdGUob2JqIGFuZCBUUlVFIG9yIEZBTFNFKQorICAgICAgICAgICAgc2VsZi53cml0ZShUUlVFIGlmIG9iaiBlbHNlIEZBTFNFKQogICAgIGRpc3BhdGNoW2Jvb2xdID0gc2F2ZV9ib29sCiAKLSAgICBkZWYgc2F2ZV9sb25nKHNlbGYsIG9iaiwgcGFjaz1zdHJ1Y3QucGFjayk6CisgICAgZGVmIHNhdmVfbG9uZyhzZWxmLCBvYmopOgogICAgICAgICBpZiBzZWxmLmJpbjoKICAgICAgICAgICAgICMgSWYgdGhlIGludCBpcyBzbWFsbCBlbm91Z2ggdG8gZml0IGluIGEgc2lnbmVkIDQtYnl0ZSAyJ3MtY29tcAogICAgICAgICAgICAgIyBmb3JtYXQsIHdlIGNhbiBzdG9yZSBpdCBtb3JlIGVmZmljaWVudGx5IHRoYW4gdGhlIGdlbmVyYWwKQEAgLTQ2MSw5MyArNjUwLDk1IEBACiAgICAgICAgICAgICAjIEZpcnN0IG9uZS0gYW5kIHR3by1ieXRlIHVuc2lnbmVkIGludHM6CiAgICAgICAgICAgICBpZiBvYmogPj0gMDoKICAgICAgICAgICAgICAgICBpZiBvYmogPD0gMHhmZjoKLSAgICAgICAgICAgICAgICAgICAgc2VsZi53cml0ZShCSU5JTlQxICsgYnl0ZXMoW29ial0pKQorICAgICAgICAgICAgICAgICAgICBzZWxmLndyaXRlKEJJTklOVDEgKyBwYWNrKCI8QiIsIG9iaikpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybgogICAgICAgICAgICAgICAgIGlmIG9iaiA8PSAweGZmZmY6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoQklOSU5UMiArIGJ5dGVzKFtvYmomMHhmZiwgb2JqPj44XSkpCisgICAgICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoQklOSU5UMiArIHBhY2soIjxIIiwgb2JqKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgICAgICAjIE5leHQgY2hlY2sgZm9yIDQtYnl0ZSBzaWduZWQgaW50czoKLSAgICAgICAgICAgIGhpZ2hfYml0cyA9IG9iaiA+PiAzMSAgIyBub3RlIHRoYXQgUHl0aG9uIHNoaWZ0IHNpZ24tZXh0ZW5kcwotICAgICAgICAgICAgaWYgaGlnaF9iaXRzID09IDAgb3IgaGlnaF9iaXRzID09IC0xOgotICAgICAgICAgICAgICAgICMgQWxsIGhpZ2ggYml0cyBhcmUgY29waWVzIG9mIGJpdCAyKiozMSwgc28gdGhlIHZhbHVlCi0gICAgICAgICAgICAgICAgIyBmaXRzIGluIGEgNC1ieXRlIHNpZ25lZCBpbnQuCisgICAgICAgICAgICBpZiAtMHg4MDAwMDAwMCA8PSBvYmogPD0gMHg3ZmZmZmZmZjoKICAgICAgICAgICAgICAgICBzZWxmLndyaXRlKEJJTklOVCArIHBhY2soIjxpIiwgb2JqKSkKICAgICAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgaWYgc2VsZi5wcm90byA+PSAyOgogICAgICAgICAgICAgZW5jb2RlZCA9IGVuY29kZV9sb25nKG9iaikKICAgICAgICAgICAgIG4gPSBsZW4oZW5jb2RlZCkKICAgICAgICAgICAgIGlmIG4gPCAyNTY6Ci0gICAgICAgICAgICAgICAgc2VsZi53cml0ZShMT05HMSArIGJ5dGVzKFtuXSkgKyBlbmNvZGVkKQorICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoTE9ORzEgKyBwYWNrKCI8QiIsIG4pICsgZW5jb2RlZCkKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgc2VsZi53cml0ZShMT05HNCArIHBhY2soIjxpIiwgbikgKyBlbmNvZGVkKQogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIHNlbGYud3JpdGUoTE9ORyArIHJlcHIob2JqKS5lbmNvZGUoImFzY2lpIikgKyBiJ0xcbicpCiAgICAgZGlzcGF0Y2hbaW50XSA9IHNhdmVfbG9uZwogCi0gICAgZGVmIHNhdmVfZmxvYXQoc2VsZiwgb2JqLCBwYWNrPXN0cnVjdC5wYWNrKToKKyAgICBkZWYgc2F2ZV9mbG9hdChzZWxmLCBvYmopOgogICAgICAgICBpZiBzZWxmLmJpbjoKICAgICAgICAgICAgIHNlbGYud3JpdGUoQklORkxPQVQgKyBwYWNrKCc+ZCcsIG9iaikpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLndyaXRlKEZMT0FUICsgcmVwcihvYmopLmVuY29kZSgiYXNjaWkiKSArIGInXG4nKQogICAgIGRpc3BhdGNoW2Zsb2F0XSA9IHNhdmVfZmxvYXQKIAotICAgIGRlZiBzYXZlX2J5dGVzKHNlbGYsIG9iaiwgcGFjaz1zdHJ1Y3QucGFjayk6CisgICAgZGVmIHNhdmVfYnl0ZXMoc2VsZiwgb2JqKToKICAgICAgICAgaWYgc2VsZi5wcm90byA8IDM6Ci0gICAgICAgICAgICBpZiBsZW4ob2JqKSA9PSAwOgorICAgICAgICAgICAgaWYgbm90IG9iajogIyBieXRlcyBvYmplY3QgaXMgZW1wdHkKICAgICAgICAgICAgICAgICBzZWxmLnNhdmVfcmVkdWNlKGJ5dGVzLCAoKSwgb2JqPW9iaikKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgc2VsZi5zYXZlX3JlZHVjZShjb2RlY3MuZW5jb2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cihvYmosICdsYXRpbjEnKSwgJ2xhdGluMScpLCBvYmo9b2JqKQogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIG4gPSBsZW4ob2JqKQotICAgICAgICBpZiBuIDwgMjU2OgotICAgICAgICAgICAgc2VsZi53cml0ZShTSE9SVF9CSU5CWVRFUyArIGJ5dGVzKFtuXSkgKyBieXRlcyhvYmopKQorICAgICAgICBpZiBuIDw9IDB4ZmY6CisgICAgICAgICAgICBzZWxmLndyaXRlKFNIT1JUX0JJTkJZVEVTICsgcGFjaygiPEIiLCBuKSArIG9iaikKKyAgICAgICAgZWxpZiBuID4gMHhmZmZmZmZmZiBhbmQgc2VsZi5wcm90byA+PSA0OgorICAgICAgICAgICAgc2VsZi53cml0ZShCSU5CWVRFUzggKyBwYWNrKCI8USIsIG4pICsgb2JqKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi53cml0ZShCSU5CWVRFUyArIHBhY2soIjxJIiwgbikgKyBieXRlcyhvYmopKQorICAgICAgICAgICAgc2VsZi53cml0ZShCSU5CWVRFUyArIHBhY2soIjxJIiwgbikgKyBvYmopCiAgICAgICAgIHNlbGYubWVtb2l6ZShvYmopCiAgICAgZGlzcGF0Y2hbYnl0ZXNdID0gc2F2ZV9ieXRlcwogCi0gICAgZGVmIHNhdmVfc3RyKHNlbGYsIG9iaiwgcGFjaz1zdHJ1Y3QucGFjayk6CisgICAgZGVmIHNhdmVfc3RyKHNlbGYsIG9iaik6CiAgICAgICAgIGlmIHNlbGYuYmluOgogICAgICAgICAgICAgZW5jb2RlZCA9IG9iai5lbmNvZGUoJ3V0Zi04JywgJ3N1cnJvZ2F0ZXBhc3MnKQogICAgICAgICAgICAgbiA9IGxlbihlbmNvZGVkKQotICAgICAgICAgICAgc2VsZi53cml0ZShCSU5VTklDT0RFICsgcGFjaygiPEkiLCBuKSArIGVuY29kZWQpCisgICAgICAgICAgICBpZiBuIDw9IDB4ZmYgYW5kIHNlbGYucHJvdG8gPj0gNDoKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlKFNIT1JUX0JJTlVOSUNPREUgKyBwYWNrKCI8QiIsIG4pICsgZW5jb2RlZCkKKyAgICAgICAgICAgIGVsaWYgbiA+IDB4ZmZmZmZmZmYgYW5kIHNlbGYucHJvdG8gPj0gNDoKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlKEJJTlVOSUNPREU4ICsgcGFjaygiPFEiLCBuKSArIGVuY29kZWQpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoQklOVU5JQ09ERSArIHBhY2soIjxJIiwgbikgKyBlbmNvZGVkKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgb2JqID0gb2JqLnJlcGxhY2UoIlxcIiwgIlxcdTAwNWMiKQogICAgICAgICAgICAgb2JqID0gb2JqLnJlcGxhY2UoIlxuIiwgIlxcdTAwMGEiKQotICAgICAgICAgICAgc2VsZi53cml0ZShVTklDT0RFICsgYnl0ZXMob2JqLmVuY29kZSgncmF3LXVuaWNvZGUtZXNjYXBlJykpICsKKyAgICAgICAgICAgIHNlbGYud3JpdGUoVU5JQ09ERSArIG9iai5lbmNvZGUoJ3Jhdy11bmljb2RlLWVzY2FwZScpICsKICAgICAgICAgICAgICAgICAgICAgICAgYidcbicpCiAgICAgICAgIHNlbGYubWVtb2l6ZShvYmopCiAgICAgZGlzcGF0Y2hbc3RyXSA9IHNhdmVfc3RyCiAKICAgICBkZWYgc2F2ZV90dXBsZShzZWxmLCBvYmopOgotICAgICAgICB3cml0ZSA9IHNlbGYud3JpdGUKLSAgICAgICAgcHJvdG8gPSBzZWxmLnByb3RvCi0KLSAgICAgICAgbiA9IGxlbihvYmopCi0gICAgICAgIGlmIG4gPT0gMDoKLSAgICAgICAgICAgIGlmIHByb3RvOgotICAgICAgICAgICAgICAgIHdyaXRlKEVNUFRZX1RVUExFKQorICAgICAgICBpZiBub3Qgb2JqOiAjIHR1cGxlIGlzIGVtcHR5CisgICAgICAgICAgICBpZiBzZWxmLmJpbjoKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlKEVNUFRZX1RVUExFKQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICB3cml0ZShNQVJLICsgVFVQTEUpCisgICAgICAgICAgICAgICAgc2VsZi53cml0ZShNQVJLICsgVFVQTEUpCiAgICAgICAgICAgICByZXR1cm4KIAorICAgICAgICBuID0gbGVuKG9iaikKICAgICAgICAgc2F2ZSA9IHNlbGYuc2F2ZQogICAgICAgICBtZW1vID0gc2VsZi5tZW1vCi0gICAgICAgIGlmIG4gPD0gMyBhbmQgcHJvdG8gPj0gMjoKKyAgICAgICAgaWYgbiA8PSAzIGFuZCBzZWxmLnByb3RvID49IDI6CiAgICAgICAgICAgICBmb3IgZWxlbWVudCBpbiBvYmo6CiAgICAgICAgICAgICAgICAgc2F2ZShlbGVtZW50KQogICAgICAgICAgICAgIyBTdWJ0bGUuICBTYW1lIGFzIGluIHRoZSBiaWcgY29tbWVudCBiZWxvdy4KICAgICAgICAgICAgIGlmIGlkKG9iaikgaW4gbWVtbzoKICAgICAgICAgICAgICAgICBnZXQgPSBzZWxmLmdldChtZW1vW2lkKG9iaildWzBdKQotICAgICAgICAgICAgICAgIHdyaXRlKFBPUCAqIG4gKyBnZXQpCisgICAgICAgICAgICAgICAgc2VsZi53cml0ZShQT1AgKiBuICsgZ2V0KQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICB3cml0ZShfdHVwbGVzaXplMmNvZGVbbl0pCisgICAgICAgICAgICAgICAgc2VsZi53cml0ZShfdHVwbGVzaXplMmNvZGVbbl0pCiAgICAgICAgICAgICAgICAgc2VsZi5tZW1vaXplKG9iaikKICAgICAgICAgICAgIHJldHVybgogCiAgICAgICAgICMgcHJvdG8gMCBvciBwcm90byAxIGFuZCB0dXBsZSBpc24ndCBlbXB0eSwgb3IgcHJvdG8gPiAxIGFuZCB0dXBsZQogICAgICAgICAjIGhhcyBtb3JlIHRoYW4gMyBlbGVtZW50cy4KKyAgICAgICAgd3JpdGUgPSBzZWxmLndyaXRlCiAgICAgICAgIHdyaXRlKE1BUkspCiAgICAgICAgIGZvciBlbGVtZW50IGluIG9iajoKICAgICAgICAgICAgIHNhdmUoZWxlbWVudCkKQEAgLTU2MSwyNSArNzUyLDIzIEBACiAgICAgICAgICAgICAjIGNvdWxkIGhhdmUgYmVlbiBkb25lIGluIHRoZSAiZm9yIGVsZW1lbnQiIGxvb3AgaW5zdGVhZCwgYnV0CiAgICAgICAgICAgICAjIHJlY3Vyc2l2ZSB0dXBsZXMgYXJlIGEgcmFyZSB0aGluZy4KICAgICAgICAgICAgIGdldCA9IHNlbGYuZ2V0KG1lbW9baWQob2JqKV1bMF0pCi0gICAgICAgICAgICBpZiBwcm90bzoKKyAgICAgICAgICAgIGlmIHNlbGYuYmluOgogICAgICAgICAgICAgICAgIHdyaXRlKFBPUF9NQVJLICsgZ2V0KQogICAgICAgICAgICAgZWxzZTogICAjIHByb3RvIDAgLS0gUE9QX01BUksgbm90IGF2YWlsYWJsZQogICAgICAgICAgICAgICAgIHdyaXRlKFBPUCAqIChuKzEpICsgZ2V0KQogICAgICAgICAgICAgcmV0dXJuCiAKICAgICAgICAgIyBObyByZWN1cnNpb24uCi0gICAgICAgIHNlbGYud3JpdGUoVFVQTEUpCisgICAgICAgIHdyaXRlKFRVUExFKQogICAgICAgICBzZWxmLm1lbW9pemUob2JqKQogCiAgICAgZGlzcGF0Y2hbdHVwbGVdID0gc2F2ZV90dXBsZQogCiAgICAgZGVmIHNhdmVfbGlzdChzZWxmLCBvYmopOgotICAgICAgICB3cml0ZSA9IHNlbGYud3JpdGUKLQogICAgICAgICBpZiBzZWxmLmJpbjoKLSAgICAgICAgICAgIHdyaXRlKEVNUFRZX0xJU1QpCisgICAgICAgICAgICBzZWxmLndyaXRlKEVNUFRZX0xJU1QpCiAgICAgICAgIGVsc2U6ICAgIyBwcm90byAwIC0tIGNhbid0IHVzZSBFTVBUWV9MSVNUCi0gICAgICAgICAgICB3cml0ZShNQVJLICsgTElTVCkKKyAgICAgICAgICAgIHNlbGYud3JpdGUoTUFSSyArIExJU1QpCiAKICAgICAgICAgc2VsZi5tZW1vaXplKG9iaikKICAgICAgICAgc2VsZi5fYmF0Y2hfYXBwZW5kcyhvYmopCkBAIC01OTksMTcgKzc4OCw5IEBACiAgICAgICAgICAgICAgICAgd3JpdGUoQVBQRU5EKQogICAgICAgICAgICAgcmV0dXJuCiAKLSAgICAgICAgaXRlbXMgPSBpdGVyKGl0ZW1zKQotICAgICAgICByID0gcmFuZ2Uoc2VsZi5fQkFUQ0hTSVpFKQotICAgICAgICB3aGlsZSBpdGVtcyBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHRtcCA9IFtdCi0gICAgICAgICAgICBmb3IgaSBpbiByOgotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgeCA9IG5leHQoaXRlbXMpCi0gICAgICAgICAgICAgICAgICAgIHRtcC5hcHBlbmQoeCkKLSAgICAgICAgICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKLSAgICAgICAgICAgICAgICAgICAgaXRlbXMgPSBOb25lCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGl0ID0gaXRlcihpdGVtcykKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIHRtcCA9IGxpc3QoaXNsaWNlKGl0LCBzZWxmLl9CQVRDSFNJWkUpKQogICAgICAgICAgICAgbiA9IGxlbih0bXApCiAgICAgICAgICAgICBpZiBuID4gMToKICAgICAgICAgICAgICAgICB3cml0ZShNQVJLKQpAQCAtNjIwLDE0ICs4MDEsMTQgQEAKICAgICAgICAgICAgICAgICBzYXZlKHRtcFswXSkKICAgICAgICAgICAgICAgICB3cml0ZShBUFBFTkQpCiAgICAgICAgICAgICAjIGVsc2UgdG1wIGlzIGVtcHR5LCBhbmQgd2UncmUgZG9uZQorICAgICAgICAgICAgaWYgbiA8IHNlbGYuX0JBVENIU0laRToKKyAgICAgICAgICAgICAgICByZXR1cm4KIAogICAgIGRlZiBzYXZlX2RpY3Qoc2VsZiwgb2JqKToKLSAgICAgICAgd3JpdGUgPSBzZWxmLndyaXRlCi0KICAgICAgICAgaWYgc2VsZi5iaW46Ci0gICAgICAgICAgICB3cml0ZShFTVBUWV9ESUNUKQorICAgICAgICAgICAgc2VsZi53cml0ZShFTVBUWV9ESUNUKQogICAgICAgICBlbHNlOiAgICMgcHJvdG8gMCAtLSBjYW4ndCB1c2UgRU1QVFlfRElDVAotICAgICAgICAgICAgd3JpdGUoTUFSSyArIERJQ1QpCisgICAgICAgICAgICBzZWxmLndyaXRlKE1BUksgKyBESUNUKQogCiAgICAgICAgIHNlbGYubWVtb2l6ZShvYmopCiAgICAgICAgIHNlbGYuX2JhdGNoX3NldGl0ZW1zKG9iai5pdGVtcygpKQpAQCAtNjQ4LDE2ICs4MjksOSBAQAogICAgICAgICAgICAgICAgIHdyaXRlKFNFVElURU0pCiAgICAgICAgICAgICByZXR1cm4KIAotICAgICAgICBpdGVtcyA9IGl0ZXIoaXRlbXMpCi0gICAgICAgIHIgPSByYW5nZShzZWxmLl9CQVRDSFNJWkUpCi0gICAgICAgIHdoaWxlIGl0ZW1zIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgdG1wID0gW10KLSAgICAgICAgICAgIGZvciBpIGluIHI6Ci0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICB0bXAuYXBwZW5kKG5leHQoaXRlbXMpKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgotICAgICAgICAgICAgICAgICAgICBpdGVtcyA9IE5vbmUKLSAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgaXQgPSBpdGVyKGl0ZW1zKQorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgdG1wID0gbGlzdChpc2xpY2UoaXQsIHNlbGYuX0JBVENIU0laRSkpCiAgICAgICAgICAgICBuID0gbGVuKHRtcCkKICAgICAgICAgICAgIGlmIG4gPiAxOgogICAgICAgICAgICAgICAgIHdyaXRlKE1BUkspCkBAIC02NzEsNTUgKzg0NSwxMDkgQEAKICAgICAgICAgICAgICAgICBzYXZlKHYpCiAgICAgICAgICAgICAgICAgd3JpdGUoU0VUSVRFTSkKICAgICAgICAgICAgICMgZWxzZSB0bXAgaXMgZW1wdHksIGFuZCB3ZSdyZSBkb25lCisgICAgICAgICAgICBpZiBuIDwgc2VsZi5fQkFUQ0hTSVpFOgorICAgICAgICAgICAgICAgIHJldHVybgogCi0gICAgZGVmIHNhdmVfZ2xvYmFsKHNlbGYsIG9iaiwgbmFtZT1Ob25lLCBwYWNrPXN0cnVjdC5wYWNrKToKKyAgICBkZWYgc2F2ZV9zZXQoc2VsZiwgb2JqKToKKyAgICAgICAgc2F2ZSA9IHNlbGYuc2F2ZQorICAgICAgICB3cml0ZSA9IHNlbGYud3JpdGUKKworICAgICAgICBpZiBzZWxmLnByb3RvIDwgNDoKKyAgICAgICAgICAgIHNlbGYuc2F2ZV9yZWR1Y2Uoc2V0LCAobGlzdChvYmopLCksIG9iaj1vYmopCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICB3cml0ZShFTVBUWV9TRVQpCisgICAgICAgIHNlbGYubWVtb2l6ZShvYmopCisKKyAgICAgICAgaXQgPSBpdGVyKG9iaikKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIGJhdGNoID0gbGlzdChpc2xpY2UoaXQsIHNlbGYuX0JBVENIU0laRSkpCisgICAgICAgICAgICBuID0gbGVuKGJhdGNoKQorICAgICAgICAgICAgaWYgbiA+IDA6CisgICAgICAgICAgICAgICAgd3JpdGUoTUFSSykKKyAgICAgICAgICAgICAgICBmb3IgaXRlbSBpbiBiYXRjaDoKKyAgICAgICAgICAgICAgICAgICAgc2F2ZShpdGVtKQorICAgICAgICAgICAgICAgIHdyaXRlKEFERElURU1TKQorICAgICAgICAgICAgaWYgbiA8IHNlbGYuX0JBVENIU0laRToKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICBkaXNwYXRjaFtzZXRdID0gc2F2ZV9zZXQKKworICAgIGRlZiBzYXZlX2Zyb3plbnNldChzZWxmLCBvYmopOgorICAgICAgICBzYXZlID0gc2VsZi5zYXZlCisgICAgICAgIHdyaXRlID0gc2VsZi53cml0ZQorCisgICAgICAgIGlmIHNlbGYucHJvdG8gPCA0OgorICAgICAgICAgICAgc2VsZi5zYXZlX3JlZHVjZShmcm96ZW5zZXQsIChsaXN0KG9iaiksKSwgb2JqPW9iaikKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHdyaXRlKE1BUkspCisgICAgICAgIGZvciBpdGVtIGluIG9iajoKKyAgICAgICAgICAgIHNhdmUoaXRlbSkKKworICAgICAgICBpZiBpZChvYmopIGluIHNlbGYubWVtbzoKKyAgICAgICAgICAgICMgSWYgdGhlIG9iamVjdCBpcyBhbHJlYWR5IGluIHRoZSBtZW1vLCB0aGlzIG1lYW5zIGl0IGlzCisgICAgICAgICAgICAjIHJlY3Vyc2l2ZS4gSW4gdGhpcyBjYXNlLCB0aHJvdyBhd2F5IGV2ZXJ5dGhpbmcgd2UgcHV0IG9uIHRoZQorICAgICAgICAgICAgIyBzdGFjaywgYW5kIGZldGNoIHRoZSBvYmplY3QgYmFjayBmcm9tIHRoZSBtZW1vLgorICAgICAgICAgICAgd3JpdGUoUE9QX01BUksgKyBzZWxmLmdldChzZWxmLm1lbW9baWQob2JqKV1bMF0pKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgd3JpdGUoRlJPWkVOU0VUKQorICAgICAgICBzZWxmLm1lbW9pemUob2JqKQorICAgIGRpc3BhdGNoW2Zyb3plbnNldF0gPSBzYXZlX2Zyb3plbnNldAorCisgICAgZGVmIHNhdmVfZ2xvYmFsKHNlbGYsIG9iaiwgbmFtZT1Ob25lKToKICAgICAgICAgd3JpdGUgPSBzZWxmLndyaXRlCiAgICAgICAgIG1lbW8gPSBzZWxmLm1lbW8KIAorICAgICAgICBpZiBuYW1lIGlzIE5vbmUgYW5kIHNlbGYucHJvdG8gPj0gNDoKKyAgICAgICAgICAgIG5hbWUgPSBnZXRhdHRyKG9iaiwgJ19fcXVhbG5hbWVfXycsIE5vbmUpCiAgICAgICAgIGlmIG5hbWUgaXMgTm9uZToKICAgICAgICAgICAgIG5hbWUgPSBvYmouX19uYW1lX18KIAotICAgICAgICBtb2R1bGUgPSBnZXRhdHRyKG9iaiwgIl9fbW9kdWxlX18iLCBOb25lKQotICAgICAgICBpZiBtb2R1bGUgaXMgTm9uZToKLSAgICAgICAgICAgIG1vZHVsZSA9IHdoaWNobW9kdWxlKG9iaiwgbmFtZSkKLQorICAgICAgICBtb2R1bGVfbmFtZSA9IHdoaWNobW9kdWxlKG9iaiwgbmFtZSwgYWxsb3dfcXVhbG5hbWU9c2VsZi5wcm90byA+PSA0KQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBfX2ltcG9ydF9fKG1vZHVsZSwgbGV2ZWw9MCkKLSAgICAgICAgICAgIG1vZCA9IHN5cy5tb2R1bGVzW21vZHVsZV0KLSAgICAgICAgICAgIGtsYXNzID0gZ2V0YXR0cihtb2QsIG5hbWUpCisgICAgICAgICAgICBfX2ltcG9ydF9fKG1vZHVsZV9uYW1lLCBsZXZlbD0wKQorICAgICAgICAgICAgbW9kdWxlID0gc3lzLm1vZHVsZXNbbW9kdWxlX25hbWVdCisgICAgICAgICAgICBvYmoyID0gX2dldGF0dHJpYnV0ZShtb2R1bGUsIG5hbWUsIGFsbG93X3F1YWxuYW1lPXNlbGYucHJvdG8gPj0gNCkKICAgICAgICAgZXhjZXB0IChJbXBvcnRFcnJvciwgS2V5RXJyb3IsIEF0dHJpYnV0ZUVycm9yKToKICAgICAgICAgICAgIHJhaXNlIFBpY2tsaW5nRXJyb3IoCiAgICAgICAgICAgICAgICAgIkNhbid0IHBpY2tsZSAlcjogaXQncyBub3QgZm91bmQgYXMgJXMuJXMiICUKLSAgICAgICAgICAgICAgICAob2JqLCBtb2R1bGUsIG5hbWUpKQorICAgICAgICAgICAgICAgIChvYmosIG1vZHVsZV9uYW1lLCBuYW1lKSkKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGlmIGtsYXNzIGlzIG5vdCBvYmo6CisgICAgICAgICAgICBpZiBvYmoyIGlzIG5vdCBvYmo6CiAgICAgICAgICAgICAgICAgcmFpc2UgUGlja2xpbmdFcnJvcigKICAgICAgICAgICAgICAgICAgICAgIkNhbid0IHBpY2tsZSAlcjogaXQncyBub3QgdGhlIHNhbWUgb2JqZWN0IGFzICVzLiVzIiAlCi0gICAgICAgICAgICAgICAgICAgIChvYmosIG1vZHVsZSwgbmFtZSkpCisgICAgICAgICAgICAgICAgICAgIChvYmosIG1vZHVsZV9uYW1lLCBuYW1lKSkKIAogICAgICAgICBpZiBzZWxmLnByb3RvID49IDI6Ci0gICAgICAgICAgICBjb2RlID0gX2V4dGVuc2lvbl9yZWdpc3RyeS5nZXQoKG1vZHVsZSwgbmFtZSkpCisgICAgICAgICAgICBjb2RlID0gX2V4dGVuc2lvbl9yZWdpc3RyeS5nZXQoKG1vZHVsZV9uYW1lLCBuYW1lKSkKICAgICAgICAgICAgIGlmIGNvZGU6CiAgICAgICAgICAgICAgICAgYXNzZXJ0IGNvZGUgPiAwCiAgICAgICAgICAgICAgICAgaWYgY29kZSA8PSAweGZmOgotICAgICAgICAgICAgICAgICAgICB3cml0ZShFWFQxICsgYnl0ZXMoW2NvZGVdKSkKKyAgICAgICAgICAgICAgICAgICAgd3JpdGUoRVhUMSArIHBhY2soIjxCIiwgY29kZSkpCiAgICAgICAgICAgICAgICAgZWxpZiBjb2RlIDw9IDB4ZmZmZjoKLSAgICAgICAgICAgICAgICAgICAgd3JpdGUoRVhUMiArIGJ5dGVzKFtjb2RlJjB4ZmYsIGNvZGU+PjhdKSkKKyAgICAgICAgICAgICAgICAgICAgd3JpdGUoRVhUMiArIHBhY2soIjxIIiwgY29kZSkpCiAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgd3JpdGUoRVhUNCArIHBhY2soIjxpIiwgY29kZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgICMgTm9uLUFTQ0lJIGlkZW50aWZpZXJzIGFyZSBzdXBwb3J0ZWQgb25seSB3aXRoIHByb3RvY29scyA+PSAzLgotICAgICAgICBpZiBzZWxmLnByb3RvID49IDM6Ci0gICAgICAgICAgICB3cml0ZShHTE9CQUwgKyBieXRlcyhtb2R1bGUsICJ1dGYtOCIpICsgYidcbicgKworICAgICAgICBpZiBzZWxmLnByb3RvID49IDQ6CisgICAgICAgICAgICBzZWxmLnNhdmUobW9kdWxlX25hbWUpCisgICAgICAgICAgICBzZWxmLnNhdmUobmFtZSkKKyAgICAgICAgICAgIHdyaXRlKFNUQUNLX0dMT0JBTCkKKyAgICAgICAgZWxpZiBzZWxmLnByb3RvID49IDM6CisgICAgICAgICAgICB3cml0ZShHTE9CQUwgKyBieXRlcyhtb2R1bGVfbmFtZSwgInV0Zi04IikgKyBiJ1xuJyArCiAgICAgICAgICAgICAgICAgICBieXRlcyhuYW1lLCAidXRmLTgiKSArIGInXG4nKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgaWYgc2VsZi5maXhfaW1wb3J0czoKLSAgICAgICAgICAgICAgICBpZiAobW9kdWxlLCBuYW1lKSBpbiBfY29tcGF0X3BpY2tsZS5SRVZFUlNFX05BTUVfTUFQUElORzoKLSAgICAgICAgICAgICAgICAgICAgbW9kdWxlLCBuYW1lID0gX2NvbXBhdF9waWNrbGUuUkVWRVJTRV9OQU1FX01BUFBJTkdbKG1vZHVsZSwgbmFtZSldCi0gICAgICAgICAgICAgICAgaWYgbW9kdWxlIGluIF9jb21wYXRfcGlja2xlLlJFVkVSU0VfSU1QT1JUX01BUFBJTkc6Ci0gICAgICAgICAgICAgICAgICAgIG1vZHVsZSA9IF9jb21wYXRfcGlja2xlLlJFVkVSU0VfSU1QT1JUX01BUFBJTkdbbW9kdWxlXQorICAgICAgICAgICAgICAgIHJfbmFtZV9tYXBwaW5nID0gX2NvbXBhdF9waWNrbGUuUkVWRVJTRV9OQU1FX01BUFBJTkcKKyAgICAgICAgICAgICAgICByX2ltcG9ydF9tYXBwaW5nID0gX2NvbXBhdF9waWNrbGUuUkVWRVJTRV9JTVBPUlRfTUFQUElORworICAgICAgICAgICAgICAgIGlmIChtb2R1bGVfbmFtZSwgbmFtZSkgaW4gcl9uYW1lX21hcHBpbmc6CisgICAgICAgICAgICAgICAgICAgIG1vZHVsZV9uYW1lLCBuYW1lID0gcl9uYW1lX21hcHBpbmdbKG1vZHVsZV9uYW1lLCBuYW1lKV0KKyAgICAgICAgICAgICAgICBlbGlmIG1vZHVsZV9uYW1lIGluIHJfaW1wb3J0X21hcHBpbmc6CisgICAgICAgICAgICAgICAgICAgIG1vZHVsZV9uYW1lID0gcl9pbXBvcnRfbWFwcGluZ1ttb2R1bGVfbmFtZV0KICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICB3cml0ZShHTE9CQUwgKyBieXRlcyhtb2R1bGUsICJhc2NpaSIpICsgYidcbicgKworICAgICAgICAgICAgICAgIHdyaXRlKEdMT0JBTCArIGJ5dGVzKG1vZHVsZV9uYW1lLCAiYXNjaWkiKSArIGInXG4nICsKICAgICAgICAgICAgICAgICAgICAgICBieXRlcyhuYW1lLCAiYXNjaWkiKSArIGInXG4nKQogICAgICAgICAgICAgZXhjZXB0IFVuaWNvZGVFbmNvZGVFcnJvcjoKICAgICAgICAgICAgICAgICByYWlzZSBQaWNrbGluZ0Vycm9yKApAQCAtNzM4LDU4ICs5NjYsOCBAQAogICAgICAgICByZXR1cm4gc2VsZi5zYXZlX2dsb2JhbChvYmopCiAKICAgICBkaXNwYXRjaFtGdW5jdGlvblR5cGVdID0gc2F2ZV9nbG9iYWwKLSAgICBkaXNwYXRjaFtCdWlsdGluRnVuY3Rpb25UeXBlXSA9IHNhdmVfZ2xvYmFsCiAgICAgZGlzcGF0Y2hbdHlwZV0gPSBzYXZlX3R5cGUKIAotIyBQaWNrbGluZyBoZWxwZXJzCi0KLWRlZiBfa2VlcF9hbGl2ZSh4LCBtZW1vKToKLSAgICAiIiJLZWVwcyBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IHggaW4gdGhlIG1lbW8uCi0KLSAgICBCZWNhdXNlIHdlIHJlbWVtYmVyIG9iamVjdHMgYnkgdGhlaXIgaWQsIHdlIGhhdmUKLSAgICB0byBhc3N1cmUgdGhhdCBwb3NzaWJseSB0ZW1wb3Jhcnkgb2JqZWN0cyBhcmUga2VwdAotICAgIGFsaXZlIGJ5IHJlZmVyZW5jaW5nIHRoZW0uCi0gICAgV2Ugc3RvcmUgYSByZWZlcmVuY2UgYXQgdGhlIGlkIG9mIHRoZSBtZW1vLCB3aGljaCBzaG91bGQKLSAgICBub3JtYWxseSBub3QgYmUgdXNlZCB1bmxlc3Mgc29tZW9uZSB0cmllcyB0byBkZWVwY29weQotICAgIHRoZSBtZW1vIGl0c2VsZi4uLgotICAgICIiIgotICAgIHRyeToKLSAgICAgICAgbWVtb1tpZChtZW1vKV0uYXBwZW5kKHgpCi0gICAgZXhjZXB0IEtleUVycm9yOgotICAgICAgICAjIGFoYSwgdGhpcyBpcyB0aGUgZmlyc3Qgb25lIDotKQotICAgICAgICBtZW1vW2lkKG1lbW8pXT1beF0KLQotCi0jIEEgY2FjaGUgZm9yIHdoaWNobW9kdWxlKCksIG1hcHBpbmcgYSBmdW5jdGlvbiBvYmplY3QgdG8gdGhlIG5hbWUgb2YKLSMgdGhlIG1vZHVsZSBpbiB3aGljaCB0aGUgZnVuY3Rpb24gd2FzIGZvdW5kLgotCi1jbGFzc21hcCA9IHt9ICMgY2FsbGVkIGNsYXNzbWFwIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eQotCi1kZWYgd2hpY2htb2R1bGUoZnVuYywgZnVuY25hbWUpOgotICAgICIiIkZpZ3VyZSBvdXQgdGhlIG1vZHVsZSBpbiB3aGljaCBhIGZ1bmN0aW9uIG9jY3Vycy4KLQotICAgIFNlYXJjaCBzeXMubW9kdWxlcyBmb3IgdGhlIG1vZHVsZS4KLSAgICBDYWNoZSBpbiBjbGFzc21hcC4KLSAgICBSZXR1cm4gYSBtb2R1bGUgbmFtZS4KLSAgICBJZiB0aGUgZnVuY3Rpb24gY2Fubm90IGJlIGZvdW5kLCByZXR1cm4gIl9fbWFpbl9fIi4KLSAgICAiIiIKLSAgICAjIFB5dGhvbiBmdW5jdGlvbnMgc2hvdWxkIGFsd2F5cyBnZXQgYW4gX19tb2R1bGVfXyBmcm9tIHRoZWlyIGdsb2JhbHMuCi0gICAgbW9kID0gZ2V0YXR0cihmdW5jLCAiX19tb2R1bGVfXyIsIE5vbmUpCi0gICAgaWYgbW9kIGlzIG5vdCBOb25lOgotICAgICAgICByZXR1cm4gbW9kCi0gICAgaWYgZnVuYyBpbiBjbGFzc21hcDoKLSAgICAgICAgcmV0dXJuIGNsYXNzbWFwW2Z1bmNdCi0KLSAgICBmb3IgbmFtZSwgbW9kdWxlIGluIGxpc3Qoc3lzLm1vZHVsZXMuaXRlbXMoKSk6Ci0gICAgICAgIGlmIG1vZHVsZSBpcyBOb25lOgotICAgICAgICAgICAgY29udGludWUgIyBza2lwIGR1bW15IHBhY2thZ2UgZW50cmllcwotICAgICAgICBpZiBuYW1lICE9ICdfX21haW5fXycgYW5kIGdldGF0dHIobW9kdWxlLCBmdW5jbmFtZSwgTm9uZSkgaXMgZnVuYzoKLSAgICAgICAgICAgIGJyZWFrCi0gICAgZWxzZToKLSAgICAgICAgbmFtZSA9ICdfX21haW5fXycKLSAgICBjbGFzc21hcFtmdW5jXSA9IG5hbWUKLSAgICByZXR1cm4gbmFtZQotCiAKICMgVW5waWNrbGluZyBtYWNoaW5lcnkKIApAQCAtNzk5LDggKzk3NywxNCBAQAogICAgICAgICAgICAgICAgICBlbmNvZGluZz0iQVNDSUkiLCBlcnJvcnM9InN0cmljdCIpOgogICAgICAgICAiIiJUaGlzIHRha2VzIGEgYmluYXJ5IGZpbGUgZm9yIHJlYWRpbmcgYSBwaWNrbGUgZGF0YSBzdHJlYW0uCiAKLSAgICAgICAgVGhlIHByb3RvY29sIHZlcnNpb24gb2YgdGhlIHBpY2tsZSBpcyBkZXRlY3RlZCBhdXRvbWF0aWNhbGx5LCBzbyBubwotICAgICAgICBwcm90byBhcmd1bWVudCBpcyBuZWVkZWQuCisgICAgICAgIFRoZSBwcm90b2NvbCB2ZXJzaW9uIG9mIHRoZSBwaWNrbGUgaXMgZGV0ZWN0ZWQgYXV0b21hdGljYWxseSwgc28KKyAgICAgICAgbm8gcHJvdG8gYXJndW1lbnQgaXMgbmVlZGVkLgorCisgICAgICAgIFRoZSBhcmd1bWVudCAqZmlsZSogbXVzdCBoYXZlIHR3byBtZXRob2RzLCBhIHJlYWQoKSBtZXRob2QgdGhhdAorICAgICAgICB0YWtlcyBhbiBpbnRlZ2VyIGFyZ3VtZW50LCBhbmQgYSByZWFkbGluZSgpIG1ldGhvZCB0aGF0IHJlcXVpcmVzCisgICAgICAgIG5vIGFyZ3VtZW50cy4gIEJvdGggbWV0aG9kcyBzaG91bGQgcmV0dXJuIGJ5dGVzLiAgVGh1cyAqZmlsZSoKKyAgICAgICAgY2FuIGJlIGEgYmluYXJ5IGZpbGUgb2JqZWN0IG9wZW5lZCBmb3IgcmVhZGluZywgYW4gaW8uQnl0ZXNJTworICAgICAgICBvYmplY3QsIG9yIGFueSBvdGhlciBjdXN0b20gb2JqZWN0IHRoYXQgbWVldHMgdGhpcyBpbnRlcmZhY2UuCiAKICAgICAgICAgVGhlIGZpbGUtbGlrZSBvYmplY3QgbXVzdCBoYXZlIHR3byBtZXRob2RzLCBhIHJlYWQoKSBtZXRob2QKICAgICAgICAgdGhhdCB0YWtlcyBhbiBpbnRlZ2VyIGFyZ3VtZW50LCBhbmQgYSByZWFkbGluZSgpIG1ldGhvZCB0aGF0CkBAIC04MDksMTYgKzk5MywxNyBAQAogICAgICAgICByZWFkaW5nLCBhIEJ5dGVzSU8gb2JqZWN0LCBvciBhbnkgb3RoZXIgY3VzdG9tIG9iamVjdCB0aGF0CiAgICAgICAgIG1lZXRzIHRoaXMgaW50ZXJmYWNlLgogCi0gICAgICAgIE9wdGlvbmFsIGtleXdvcmQgYXJndW1lbnRzIGFyZSAqZml4X2ltcG9ydHMqLCAqZW5jb2RpbmcqIGFuZCAqZXJyb3JzKiwKLSAgICAgICAgd2hpY2ggYXJlIHVzZWQgdG8gY29udHJvbCBjb21wYXRpYmxpdHkgc3VwcG9ydCBmb3IgcGlja2xlIHN0cmVhbQotICAgICAgICBnZW5lcmF0ZWQgYnkgUHl0aG9uIDIueC4gIElmICpmaXhfaW1wb3J0cyogaXMgVHJ1ZSwgcGlja2xlIHdpbGwgdHJ5IHRvCi0gICAgICAgIG1hcCB0aGUgb2xkIFB5dGhvbiAyLnggbmFtZXMgdG8gdGhlIG5ldyBuYW1lcyB1c2VkIGluIFB5dGhvbiAzLnguICBUaGUKLSAgICAgICAgKmVuY29kaW5nKiBhbmQgKmVycm9ycyogdGVsbCBwaWNrbGUgaG93IHRvIGRlY29kZSA4LWJpdCBzdHJpbmcKLSAgICAgICAgaW5zdGFuY2VzIHBpY2tsZWQgYnkgUHl0aG9uIDIueDsgdGhlc2UgZGVmYXVsdCB0byAnQVNDSUknIGFuZAotICAgICAgICAnc3RyaWN0JywgcmVzcGVjdGl2ZWx5LgorICAgICAgICBPcHRpb25hbCBrZXl3b3JkIGFyZ3VtZW50cyBhcmUgKmZpeF9pbXBvcnRzKiwgKmVuY29kaW5nKiBhbmQKKyAgICAgICAgKmVycm9ycyosIHdoaWNoIGFyZSB1c2VkIHRvIGNvbnRyb2wgY29tcGF0aWJsaXR5IHN1cHBvcnQgZm9yCisgICAgICAgIHBpY2tsZSBzdHJlYW0gZ2VuZXJhdGVkIGJ5IFB5dGhvbiAyLiAgSWYgKmZpeF9pbXBvcnRzKiBpcyBUcnVlLAorICAgICAgICBwaWNrbGUgd2lsbCB0cnkgdG8gbWFwIHRoZSBvbGQgUHl0aG9uIDIgbmFtZXMgdG8gdGhlIG5ldyBuYW1lcworICAgICAgICB1c2VkIGluIFB5dGhvbiAzLiAgVGhlICplbmNvZGluZyogYW5kICplcnJvcnMqIHRlbGwgcGlja2xlIGhvdworICAgICAgICB0byBkZWNvZGUgOC1iaXQgc3RyaW5nIGluc3RhbmNlcyBwaWNrbGVkIGJ5IFB5dGhvbiAyOyB0aGVzZQorICAgICAgICBkZWZhdWx0IHRvICdBU0NJSScgYW5kICdzdHJpY3QnLCByZXNwZWN0aXZlbHkuICplbmNvZGluZyogY2FuIGJlCisgICAgICAgICdieXRlcycgdG8gcmVhZCB0aGVzZXMgOC1iaXQgc3RyaW5nIGluc3RhbmNlcyBhcyBieXRlcyBvYmplY3RzLgogICAgICAgICAiIiIKLSAgICAgICAgc2VsZi5yZWFkbGluZSA9IGZpbGUucmVhZGxpbmUKLSAgICAgICAgc2VsZi5yZWFkID0gZmlsZS5yZWFkCisgICAgICAgIHNlbGYuX2ZpbGVfcmVhZGxpbmUgPSBmaWxlLnJlYWRsaW5lCisgICAgICAgIHNlbGYuX2ZpbGVfcmVhZCA9IGZpbGUucmVhZAogICAgICAgICBzZWxmLm1lbW8gPSB7fQogICAgICAgICBzZWxmLmVuY29kaW5nID0gZW5jb2RpbmcKICAgICAgICAgc2VsZi5lcnJvcnMgPSBlcnJvcnMKQEAgLTgzMiwxNiArMTAxNywyMCBAQAogICAgICAgICAiIiIKICAgICAgICAgIyBDaGVjayB3aGV0aGVyIFVucGlja2xlciB3YXMgaW5pdGlhbGl6ZWQgY29ycmVjdGx5LiBUaGlzIGlzCiAgICAgICAgICMgb25seSBuZWVkZWQgdG8gbWltaWMgdGhlIGJlaGF2aW9yIG9mIF9waWNrbGUuVW5waWNrbGVyLmR1bXAoKS4KLSAgICAgICAgaWYgbm90IGhhc2F0dHIoc2VsZiwgInJlYWQiKToKKyAgICAgICAgaWYgbm90IGhhc2F0dHIoc2VsZiwgIl9maWxlX3JlYWQiKToKICAgICAgICAgICAgIHJhaXNlIFVucGlja2xpbmdFcnJvcigiVW5waWNrbGVyLl9faW5pdF9fKCkgd2FzIG5vdCBjYWxsZWQgYnkgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlcy5fX2luaXRfXygpIiAlIChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywpKQorICAgICAgICBzZWxmLl91bmZyYW1lciA9IF9VbmZyYW1lcihzZWxmLl9maWxlX3JlYWQsIHNlbGYuX2ZpbGVfcmVhZGxpbmUpCisgICAgICAgIHNlbGYucmVhZCA9IHNlbGYuX3VuZnJhbWVyLnJlYWQKKyAgICAgICAgc2VsZi5yZWFkbGluZSA9IHNlbGYuX3VuZnJhbWVyLnJlYWRsaW5lCiAgICAgICAgIHNlbGYubWFyayA9IG9iamVjdCgpICMgYW55IG5ldyB1bmlxdWUgb2JqZWN0CiAgICAgICAgIHNlbGYuc3RhY2sgPSBbXQogICAgICAgICBzZWxmLmFwcGVuZCA9IHNlbGYuc3RhY2suYXBwZW5kCisgICAgICAgIHNlbGYucHJvdG8gPSAwCiAgICAgICAgIHJlYWQgPSBzZWxmLnJlYWQKICAgICAgICAgZGlzcGF0Y2ggPSBzZWxmLmRpc3BhdGNoCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICB3aGlsZSBUcnVlOgogICAgICAgICAgICAgICAgIGtleSA9IHJlYWQoMSkKICAgICAgICAgICAgICAgICBpZiBub3Qga2V5OgogICAgICAgICAgICAgICAgICAgICByYWlzZSBFT0ZFcnJvcgpAQCAtODcxLDEyICsxMDYwLDE5IEBACiAgICAgZGlzcGF0Y2ggPSB7fQogCiAgICAgZGVmIGxvYWRfcHJvdG8oc2VsZik6Ci0gICAgICAgIHByb3RvID0gb3JkKHNlbGYucmVhZCgxKSkKKyAgICAgICAgcHJvdG8gPSBzZWxmLnJlYWQoMSlbMF0KICAgICAgICAgaWYgbm90IDAgPD0gcHJvdG8gPD0gSElHSEVTVF9QUk9UT0NPTDoKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInVuc3VwcG9ydGVkIHBpY2tsZSBwcm90b2NvbDogJWQiICUgcHJvdG8pCiAgICAgICAgIHNlbGYucHJvdG8gPSBwcm90bwogICAgIGRpc3BhdGNoW1BST1RPWzBdXSA9IGxvYWRfcHJvdG8KIAorICAgIGRlZiBsb2FkX2ZyYW1lKHNlbGYpOgorICAgICAgICBmcmFtZV9zaXplLCA9IHVucGFjaygnPFEnLCBzZWxmLnJlYWQoOCkpCisgICAgICAgIGlmIGZyYW1lX3NpemUgPiBzeXMubWF4c2l6ZToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImZyYW1lIHNpemUgPiBzeXMubWF4c2l6ZTogJWQiICUgZnJhbWVfc2l6ZSkKKyAgICAgICAgc2VsZi5fdW5mcmFtZXIubG9hZF9mcmFtZShmcmFtZV9zaXplKQorICAgIGRpc3BhdGNoW0ZSQU1FWzBdXSA9IGxvYWRfZnJhbWUKKwogICAgIGRlZiBsb2FkX3BlcnNpZChzZWxmKToKICAgICAgICAgcGlkID0gc2VsZi5yZWFkbGluZSgpWzotMV0uZGVjb2RlKCJhc2NpaSIpCiAgICAgICAgIHNlbGYuYXBwZW5kKHNlbGYucGVyc2lzdGVudF9sb2FkKHBpZCkpCkBAIC05MDYsNDMgKzExMDIsNDAgQEAKICAgICAgICAgZWxpZiBkYXRhID09IFRSVUVbMTpdOgogICAgICAgICAgICAgdmFsID0gVHJ1ZQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHZhbCA9IGludChkYXRhLCAwKQotICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6Ci0gICAgICAgICAgICAgICAgdmFsID0gaW50KGRhdGEsIDApCisgICAgICAgICAgICB2YWwgPSBpbnQoZGF0YSwgMCkKICAgICAgICAgc2VsZi5hcHBlbmQodmFsKQogICAgIGRpc3BhdGNoW0lOVFswXV0gPSBsb2FkX2ludAogCiAgICAgZGVmIGxvYWRfYmluaW50KHNlbGYpOgotICAgICAgICBzZWxmLmFwcGVuZChtbG9hZHMoYidpJyArIHNlbGYucmVhZCg0KSkpCisgICAgICAgIHNlbGYuYXBwZW5kKHVucGFjaygnPGknLCBzZWxmLnJlYWQoNCkpWzBdKQogICAgIGRpc3BhdGNoW0JJTklOVFswXV0gPSBsb2FkX2JpbmludAogCiAgICAgZGVmIGxvYWRfYmluaW50MShzZWxmKToKLSAgICAgICAgc2VsZi5hcHBlbmQob3JkKHNlbGYucmVhZCgxKSkpCisgICAgICAgIHNlbGYuYXBwZW5kKHNlbGYucmVhZCgxKVswXSkKICAgICBkaXNwYXRjaFtCSU5JTlQxWzBdXSA9IGxvYWRfYmluaW50MQogCiAgICAgZGVmIGxvYWRfYmluaW50MihzZWxmKToKLSAgICAgICAgc2VsZi5hcHBlbmQobWxvYWRzKGInaScgKyBzZWxmLnJlYWQoMikgKyBiJ1wwMDBcMDAwJykpCisgICAgICAgIHNlbGYuYXBwZW5kKHVucGFjaygnPEgnLCBzZWxmLnJlYWQoMikpWzBdKQogICAgIGRpc3BhdGNoW0JJTklOVDJbMF1dID0gbG9hZF9iaW5pbnQyCiAKICAgICBkZWYgbG9hZF9sb25nKHNlbGYpOgotICAgICAgICB2YWwgPSBzZWxmLnJlYWRsaW5lKClbOi0xXS5kZWNvZGUoImFzY2lpIikKLSAgICAgICAgaWYgdmFsIGFuZCB2YWxbLTFdID09ICdMJzoKKyAgICAgICAgdmFsID0gc2VsZi5yZWFkbGluZSgpWzotMV0KKyAgICAgICAgaWYgdmFsIGFuZCB2YWxbLTFdID09IGInTCdbMF06CiAgICAgICAgICAgICB2YWwgPSB2YWxbOi0xXQogICAgICAgICBzZWxmLmFwcGVuZChpbnQodmFsLCAwKSkKICAgICBkaXNwYXRjaFtMT05HWzBdXSA9IGxvYWRfbG9uZwogCiAgICAgZGVmIGxvYWRfbG9uZzEoc2VsZik6Ci0gICAgICAgIG4gPSBvcmQoc2VsZi5yZWFkKDEpKQorICAgICAgICBuID0gc2VsZi5yZWFkKDEpWzBdCiAgICAgICAgIGRhdGEgPSBzZWxmLnJlYWQobikKICAgICAgICAgc2VsZi5hcHBlbmQoZGVjb2RlX2xvbmcoZGF0YSkpCiAgICAgZGlzcGF0Y2hbTE9ORzFbMF1dID0gbG9hZF9sb25nMQogCiAgICAgZGVmIGxvYWRfbG9uZzQoc2VsZik6Ci0gICAgICAgIG4gPSBtbG9hZHMoYidpJyArIHNlbGYucmVhZCg0KSkKKyAgICAgICAgbiwgPSB1bnBhY2soJzxpJywgc2VsZi5yZWFkKDQpKQogICAgICAgICBpZiBuIDwgMDoKICAgICAgICAgICAgICMgQ29ycnVwdCBvciBob3N0aWxlIHBpY2tsZSAtLSB3ZSBuZXZlciB3cml0ZSBvbmUgbGlrZSB0aGlzCi0gICAgICAgICAgICByYWlzZSBVbnBpY2tsaW5nRXJyb3IoIkxPTkcgcGlja2xlIGhhcyBuZWdhdGl2ZSBieXRlIGNvdW50Iik7CisgICAgICAgICAgICByYWlzZSBVbnBpY2tsaW5nRXJyb3IoIkxPTkcgcGlja2xlIGhhcyBuZWdhdGl2ZSBieXRlIGNvdW50IikKICAgICAgICAgZGF0YSA9IHNlbGYucmVhZChuKQogICAgICAgICBzZWxmLmFwcGVuZChkZWNvZGVfbG9uZyhkYXRhKSkKICAgICBkaXNwYXRjaFtMT05HNFswXV0gPSBsb2FkX2xvbmc0CkBAIC05NTEsMzkgKzExNDQsNDMgQEAKICAgICAgICAgc2VsZi5hcHBlbmQoZmxvYXQoc2VsZi5yZWFkbGluZSgpWzotMV0pKQogICAgIGRpc3BhdGNoW0ZMT0FUWzBdXSA9IGxvYWRfZmxvYXQKIAotICAgIGRlZiBsb2FkX2JpbmZsb2F0KHNlbGYsIHVucGFjaz1zdHJ1Y3QudW5wYWNrKToKKyAgICBkZWYgbG9hZF9iaW5mbG9hdChzZWxmKToKICAgICAgICAgc2VsZi5hcHBlbmQodW5wYWNrKCc+ZCcsIHNlbGYucmVhZCg4KSlbMF0pCiAgICAgZGlzcGF0Y2hbQklORkxPQVRbMF1dID0gbG9hZF9iaW5mbG9hdAogCi0gICAgZGVmIGxvYWRfc3RyaW5nKHNlbGYpOgotICAgICAgICBvcmlnID0gc2VsZi5yZWFkbGluZSgpCi0gICAgICAgIHJlcCA9IG9yaWdbOi0xXQotICAgICAgICBmb3IgcSBpbiAoYiciJywgYiInIik6ICMgZG91YmxlIG9yIHNpbmdsZSBxdW90ZQotICAgICAgICAgICAgaWYgcmVwLnN0YXJ0c3dpdGgocSk6Ci0gICAgICAgICAgICAgICAgaWYgbGVuKHJlcCkgPCAyIG9yIG5vdCByZXAuZW5kc3dpdGgocSk6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImluc2VjdXJlIHN0cmluZyBwaWNrbGUiKQotICAgICAgICAgICAgICAgIHJlcCA9IHJlcFtsZW4ocSk6LWxlbihxKV0KLSAgICAgICAgICAgICAgICBicmVhaworICAgIGRlZiBfZGVjb2RlX3N0cmluZyhzZWxmLCB2YWx1ZSk6CisgICAgICAgICMgVXNlZCB0byBhbGxvdyBzdHJpbmdzIGZyb20gUHl0aG9uIDIgdG8gYmUgZGVjb2RlZCBlaXRoZXIgYXMKKyAgICAgICAgIyBieXRlcyBvciBVbmljb2RlIHN0cmluZ3MuICBUaGlzIHNob3VsZCBiZSB1c2VkIG9ubHkgd2l0aCB0aGUKKyAgICAgICAgIyBTVFJJTkcsIEJJTlNUUklORyBhbmQgU0hPUlRfQklOU1RSSU5HIG9wY29kZXMuCisgICAgICAgIGlmIHNlbGYuZW5jb2RpbmcgPT0gImJ5dGVzIjoKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiaW5zZWN1cmUgc3RyaW5nIHBpY2tsZTogJXIiICUgb3JpZykKLSAgICAgICAgc2VsZi5hcHBlbmQoY29kZWNzLmVzY2FwZV9kZWNvZGUocmVwKVswXQotICAgICAgICAgICAgICAgICAgICAuZGVjb2RlKHNlbGYuZW5jb2RpbmcsIHNlbGYuZXJyb3JzKSkKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZS5kZWNvZGUoc2VsZi5lbmNvZGluZywgc2VsZi5lcnJvcnMpCisKKyAgICBkZWYgbG9hZF9zdHJpbmcoc2VsZik6CisgICAgICAgIGRhdGEgPSBzZWxmLnJlYWRsaW5lKClbOi0xXQorICAgICAgICAjIFN0cmlwIG91dGVybW9zdCBxdW90ZXMKKyAgICAgICAgaWYgbGVuKGRhdGEpID49IDIgYW5kIGRhdGFbMF0gPT0gZGF0YVstMV0gYW5kIGRhdGFbMF0gaW4gYiciXCcnOgorICAgICAgICAgICAgZGF0YSA9IGRhdGFbMTotMV0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIFVucGlja2xpbmdFcnJvcigidGhlIFNUUklORyBvcGNvZGUgYXJndW1lbnQgbXVzdCBiZSBxdW90ZWQiKQorICAgICAgICBzZWxmLmFwcGVuZChzZWxmLl9kZWNvZGVfc3RyaW5nKGNvZGVjcy5lc2NhcGVfZGVjb2RlKGRhdGEpWzBdKSkKICAgICBkaXNwYXRjaFtTVFJJTkdbMF1dID0gbG9hZF9zdHJpbmcKIAogICAgIGRlZiBsb2FkX2JpbnN0cmluZyhzZWxmKToKICAgICAgICAgIyBEZXByZWNhdGVkIEJJTlNUUklORyB1c2VzIHNpZ25lZCAzMi1iaXQgbGVuZ3RoCi0gICAgICAgIGxlbiA9IG1sb2FkcyhiJ2knICsgc2VsZi5yZWFkKDQpKQorICAgICAgICBsZW4sID0gdW5wYWNrKCc8aScsIHNlbGYucmVhZCg0KSkKICAgICAgICAgaWYgbGVuIDwgMDoKLSAgICAgICAgICAgIHJhaXNlIFVucGlja2xpbmdFcnJvcigiQklOU1RSSU5HIHBpY2tsZSBoYXMgbmVnYXRpdmUgYnl0ZSBjb3VudCIpOworICAgICAgICAgICAgcmFpc2UgVW5waWNrbGluZ0Vycm9yKCJCSU5TVFJJTkcgcGlja2xlIGhhcyBuZWdhdGl2ZSBieXRlIGNvdW50IikKICAgICAgICAgZGF0YSA9IHNlbGYucmVhZChsZW4pCi0gICAgICAgIHZhbHVlID0gc3RyKGRhdGEsIHNlbGYuZW5jb2RpbmcsIHNlbGYuZXJyb3JzKQotICAgICAgICBzZWxmLmFwcGVuZCh2YWx1ZSkKKyAgICAgICAgc2VsZi5hcHBlbmQoc2VsZi5fZGVjb2RlX3N0cmluZyhkYXRhKSkKICAgICBkaXNwYXRjaFtCSU5TVFJJTkdbMF1dID0gbG9hZF9iaW5zdHJpbmcKIAotICAgIGRlZiBsb2FkX2JpbmJ5dGVzKHNlbGYsIHVucGFjaz1zdHJ1Y3QudW5wYWNrLCBtYXhzaXplPXN5cy5tYXhzaXplKToKKyAgICBkZWYgbG9hZF9iaW5ieXRlcyhzZWxmKToKICAgICAgICAgbGVuLCA9IHVucGFjaygnPEknLCBzZWxmLnJlYWQoNCkpCiAgICAgICAgIGlmIGxlbiA+IG1heHNpemU6Ci0gICAgICAgICAgICByYWlzZSBVbnBpY2tsaW5nRXJyb3IoIkJJTkJZVEVTIGV4Y2VlZHMgc3lzdGVtJ3MgbWF4aW11bSBzaXplIG9mICVkIGJ5dGVzIiAlIG1heHNpemUpOworICAgICAgICAgICAgcmFpc2UgVW5waWNrbGluZ0Vycm9yKCJCSU5CWVRFUyBleGNlZWRzIHN5c3RlbSdzIG1heGltdW0gc2l6ZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9mICVkIGJ5dGVzIiAlIG1heHNpemUpCiAgICAgICAgIHNlbGYuYXBwZW5kKHNlbGYucmVhZChsZW4pKQogICAgIGRpc3BhdGNoW0JJTkJZVEVTWzBdXSA9IGxvYWRfYmluYnl0ZXMKIApAQCAtOTkxLDI1ICsxMTg4LDQ2IEBACiAgICAgICAgIHNlbGYuYXBwZW5kKHN0cihzZWxmLnJlYWRsaW5lKClbOi0xXSwgJ3Jhdy11bmljb2RlLWVzY2FwZScpKQogICAgIGRpc3BhdGNoW1VOSUNPREVbMF1dID0gbG9hZF91bmljb2RlCiAKLSAgICBkZWYgbG9hZF9iaW51bmljb2RlKHNlbGYsIHVucGFjaz1zdHJ1Y3QudW5wYWNrLCBtYXhzaXplPXN5cy5tYXhzaXplKToKKyAgICBkZWYgbG9hZF9iaW51bmljb2RlKHNlbGYpOgogICAgICAgICBsZW4sID0gdW5wYWNrKCc8SScsIHNlbGYucmVhZCg0KSkKICAgICAgICAgaWYgbGVuID4gbWF4c2l6ZToKLSAgICAgICAgICAgIHJhaXNlIFVucGlja2xpbmdFcnJvcigiQklOVU5JQ09ERSBleGNlZWRzIHN5c3RlbSdzIG1heGltdW0gc2l6ZSBvZiAlZCBieXRlcyIgJSBtYXhzaXplKTsKKyAgICAgICAgICAgIHJhaXNlIFVucGlja2xpbmdFcnJvcigiQklOVU5JQ09ERSBleGNlZWRzIHN5c3RlbSdzIG1heGltdW0gc2l6ZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9mICVkIGJ5dGVzIiAlIG1heHNpemUpCiAgICAgICAgIHNlbGYuYXBwZW5kKHN0cihzZWxmLnJlYWQobGVuKSwgJ3V0Zi04JywgJ3N1cnJvZ2F0ZXBhc3MnKSkKICAgICBkaXNwYXRjaFtCSU5VTklDT0RFWzBdXSA9IGxvYWRfYmludW5pY29kZQogCisgICAgZGVmIGxvYWRfYmludW5pY29kZTgoc2VsZik6CisgICAgICAgIGxlbiwgPSB1bnBhY2soJzxRJywgc2VsZi5yZWFkKDgpKQorICAgICAgICBpZiBsZW4gPiBtYXhzaXplOgorICAgICAgICAgICAgcmFpc2UgVW5waWNrbGluZ0Vycm9yKCJCSU5VTklDT0RFOCBleGNlZWRzIHN5c3RlbSdzIG1heGltdW0gc2l6ZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9mICVkIGJ5dGVzIiAlIG1heHNpemUpCisgICAgICAgIHNlbGYuYXBwZW5kKHN0cihzZWxmLnJlYWQobGVuKSwgJ3V0Zi04JywgJ3N1cnJvZ2F0ZXBhc3MnKSkKKyAgICBkaXNwYXRjaFtCSU5VTklDT0RFOFswXV0gPSBsb2FkX2JpbnVuaWNvZGU4CisKKyAgICBkZWYgbG9hZF9iaW5ieXRlczgoc2VsZik6CisgICAgICAgIGxlbiwgPSB1bnBhY2soJzxRJywgc2VsZi5yZWFkKDgpKQorICAgICAgICBpZiBsZW4gPiBtYXhzaXplOgorICAgICAgICAgICAgcmFpc2UgVW5waWNrbGluZ0Vycm9yKCJCSU5CWVRFUzggZXhjZWVkcyBzeXN0ZW0ncyBtYXhpbXVtIHNpemUgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvZiAlZCBieXRlcyIgJSBtYXhzaXplKQorICAgICAgICBzZWxmLmFwcGVuZChzZWxmLnJlYWQobGVuKSkKKyAgICBkaXNwYXRjaFtCSU5CWVRFUzhbMF1dID0gbG9hZF9iaW5ieXRlczgKKwogICAgIGRlZiBsb2FkX3Nob3J0X2JpbnN0cmluZyhzZWxmKToKLSAgICAgICAgbGVuID0gb3JkKHNlbGYucmVhZCgxKSkKLSAgICAgICAgZGF0YSA9IGJ5dGVzKHNlbGYucmVhZChsZW4pKQotICAgICAgICB2YWx1ZSA9IHN0cihkYXRhLCBzZWxmLmVuY29kaW5nLCBzZWxmLmVycm9ycykKLSAgICAgICAgc2VsZi5hcHBlbmQodmFsdWUpCisgICAgICAgIGxlbiA9IHNlbGYucmVhZCgxKVswXQorICAgICAgICBkYXRhID0gc2VsZi5yZWFkKGxlbikKKyAgICAgICAgc2VsZi5hcHBlbmQoc2VsZi5fZGVjb2RlX3N0cmluZyhkYXRhKSkKICAgICBkaXNwYXRjaFtTSE9SVF9CSU5TVFJJTkdbMF1dID0gbG9hZF9zaG9ydF9iaW5zdHJpbmcKIAogICAgIGRlZiBsb2FkX3Nob3J0X2JpbmJ5dGVzKHNlbGYpOgotICAgICAgICBsZW4gPSBvcmQoc2VsZi5yZWFkKDEpKQotICAgICAgICBzZWxmLmFwcGVuZChieXRlcyhzZWxmLnJlYWQobGVuKSkpCisgICAgICAgIGxlbiA9IHNlbGYucmVhZCgxKVswXQorICAgICAgICBzZWxmLmFwcGVuZChzZWxmLnJlYWQobGVuKSkKICAgICBkaXNwYXRjaFtTSE9SVF9CSU5CWVRFU1swXV0gPSBsb2FkX3Nob3J0X2JpbmJ5dGVzCiAKKyAgICBkZWYgbG9hZF9zaG9ydF9iaW51bmljb2RlKHNlbGYpOgorICAgICAgICBsZW4gPSBzZWxmLnJlYWQoMSlbMF0KKyAgICAgICAgc2VsZi5hcHBlbmQoc3RyKHNlbGYucmVhZChsZW4pLCAndXRmLTgnLCAnc3Vycm9nYXRlcGFzcycpKQorICAgIGRpc3BhdGNoW1NIT1JUX0JJTlVOSUNPREVbMF1dID0gbG9hZF9zaG9ydF9iaW51bmljb2RlCisKICAgICBkZWYgbG9hZF90dXBsZShzZWxmKToKICAgICAgICAgayA9IHNlbGYubWFya2VyKCkKICAgICAgICAgc2VsZi5zdGFja1trOl0gPSBbdHVwbGUoc2VsZi5zdGFja1trKzE6XSldCkBAIC0xMDM5LDYgKzEyNTcsMTUgQEAKICAgICAgICAgc2VsZi5hcHBlbmQoe30pCiAgICAgZGlzcGF0Y2hbRU1QVFlfRElDVFswXV0gPSBsb2FkX2VtcHR5X2RpY3Rpb25hcnkKIAorICAgIGRlZiBsb2FkX2VtcHR5X3NldChzZWxmKToKKyAgICAgICAgc2VsZi5hcHBlbmQoc2V0KCkpCisgICAgZGlzcGF0Y2hbRU1QVFlfU0VUWzBdXSA9IGxvYWRfZW1wdHlfc2V0CisKKyAgICBkZWYgbG9hZF9mcm96ZW5zZXQoc2VsZik6CisgICAgICAgIGsgPSBzZWxmLm1hcmtlcigpCisgICAgICAgIHNlbGYuc3RhY2tbazpdID0gW2Zyb3plbnNldChzZWxmLnN0YWNrW2srMTpdKV0KKyAgICBkaXNwYXRjaFtGUk9aRU5TRVRbMF1dID0gbG9hZF9mcm96ZW5zZXQKKwogICAgIGRlZiBsb2FkX2xpc3Qoc2VsZik6CiAgICAgICAgIGsgPSBzZWxmLm1hcmtlcigpCiAgICAgICAgIHNlbGYuc3RhY2tbazpdID0gW3NlbGYuc3RhY2tbaysxOl1dCkBAIC0xMDQ2LDEyICsxMjczLDkgQEAKIAogICAgIGRlZiBsb2FkX2RpY3Qoc2VsZik6CiAgICAgICAgIGsgPSBzZWxmLm1hcmtlcigpCi0gICAgICAgIGQgPSB7fQogICAgICAgICBpdGVtcyA9IHNlbGYuc3RhY2tbaysxOl0KLSAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKGl0ZW1zKSwgMik6Ci0gICAgICAgICAgICBrZXkgPSBpdGVtc1tpXQotICAgICAgICAgICAgdmFsdWUgPSBpdGVtc1tpKzFdCi0gICAgICAgICAgICBkW2tleV0gPSB2YWx1ZQorICAgICAgICBkID0ge2l0ZW1zW2ldOiBpdGVtc1tpKzFdCisgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKGl0ZW1zKSwgMil9CiAgICAgICAgIHNlbGYuc3RhY2tbazpdID0gW2RdCiAgICAgZGlzcGF0Y2hbRElDVFswXV0gPSBsb2FkX2RpY3QKIApAQCAtMTA5MCwxMSArMTMxNCwxOSBAQAogCiAgICAgZGVmIGxvYWRfbmV3b2JqKHNlbGYpOgogICAgICAgICBhcmdzID0gc2VsZi5zdGFjay5wb3AoKQotICAgICAgICBjbHMgPSBzZWxmLnN0YWNrWy0xXQorICAgICAgICBjbHMgPSBzZWxmLnN0YWNrLnBvcCgpCiAgICAgICAgIG9iaiA9IGNscy5fX25ld19fKGNscywgKmFyZ3MpCi0gICAgICAgIHNlbGYuc3RhY2tbLTFdID0gb2JqCisgICAgICAgIHNlbGYuYXBwZW5kKG9iaikKICAgICBkaXNwYXRjaFtORVdPQkpbMF1dID0gbG9hZF9uZXdvYmoKIAorICAgIGRlZiBsb2FkX25ld29ial9leChzZWxmKToKKyAgICAgICAga3dhcmdzID0gc2VsZi5zdGFjay5wb3AoKQorICAgICAgICBhcmdzID0gc2VsZi5zdGFjay5wb3AoKQorICAgICAgICBjbHMgPSBzZWxmLnN0YWNrLnBvcCgpCisgICAgICAgIG9iaiA9IGNscy5fX25ld19fKGNscywgKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICBzZWxmLmFwcGVuZChvYmopCisgICAgZGlzcGF0Y2hbTkVXT0JKX0VYWzBdXSA9IGxvYWRfbmV3b2JqX2V4CisKICAgICBkZWYgbG9hZF9nbG9iYWwoc2VsZik6CiAgICAgICAgIG1vZHVsZSA9IHNlbGYucmVhZGxpbmUoKVs6LTFdLmRlY29kZSgidXRmLTgiKQogICAgICAgICBuYW1lID0gc2VsZi5yZWFkbGluZSgpWzotMV0uZGVjb2RlKCJ1dGYtOCIpCkBAIC0xMTAyLDE4ICsxMzM0LDI2IEBACiAgICAgICAgIHNlbGYuYXBwZW5kKGtsYXNzKQogICAgIGRpc3BhdGNoW0dMT0JBTFswXV0gPSBsb2FkX2dsb2JhbAogCisgICAgZGVmIGxvYWRfc3RhY2tfZ2xvYmFsKHNlbGYpOgorICAgICAgICBuYW1lID0gc2VsZi5zdGFjay5wb3AoKQorICAgICAgICBtb2R1bGUgPSBzZWxmLnN0YWNrLnBvcCgpCisgICAgICAgIGlmIHR5cGUobmFtZSkgaXMgbm90IHN0ciBvciB0eXBlKG1vZHVsZSkgaXMgbm90IHN0cjoKKyAgICAgICAgICAgIHJhaXNlIFVucGlja2xpbmdFcnJvcigiU1RBQ0tfR0xPQkFMIHJlcXVpcmVzIHN0ciIpCisgICAgICAgIHNlbGYuYXBwZW5kKHNlbGYuZmluZF9jbGFzcyhtb2R1bGUsIG5hbWUpKQorICAgIGRpc3BhdGNoW1NUQUNLX0dMT0JBTFswXV0gPSBsb2FkX3N0YWNrX2dsb2JhbAorCiAgICAgZGVmIGxvYWRfZXh0MShzZWxmKToKLSAgICAgICAgY29kZSA9IG9yZChzZWxmLnJlYWQoMSkpCisgICAgICAgIGNvZGUgPSBzZWxmLnJlYWQoMSlbMF0KICAgICAgICAgc2VsZi5nZXRfZXh0ZW5zaW9uKGNvZGUpCiAgICAgZGlzcGF0Y2hbRVhUMVswXV0gPSBsb2FkX2V4dDEKIAogICAgIGRlZiBsb2FkX2V4dDIoc2VsZik6Ci0gICAgICAgIGNvZGUgPSBtbG9hZHMoYidpJyArIHNlbGYucmVhZCgyKSArIGInXDAwMFwwMDAnKQorICAgICAgICBjb2RlLCA9IHVucGFjaygnPEgnLCBzZWxmLnJlYWQoMikpCiAgICAgICAgIHNlbGYuZ2V0X2V4dGVuc2lvbihjb2RlKQogICAgIGRpc3BhdGNoW0VYVDJbMF1dID0gbG9hZF9leHQyCiAKICAgICBkZWYgbG9hZF9leHQ0KHNlbGYpOgotICAgICAgICBjb2RlID0gbWxvYWRzKGInaScgKyBzZWxmLnJlYWQoNCkpCisgICAgICAgIGNvZGUsID0gdW5wYWNrKCc8aScsIHNlbGYucmVhZCg0KSkKICAgICAgICAgc2VsZi5nZXRfZXh0ZW5zaW9uKGNvZGUpCiAgICAgZGlzcGF0Y2hbRVhUNFswXV0gPSBsb2FkX2V4dDQKIApAQCAtMTEyNyw3ICsxMzY3LDcgQEAKICAgICAgICAgaWYgbm90IGtleToKICAgICAgICAgICAgIGlmIGNvZGUgPD0gMDogIyBub3RlIHRoYXQgMCBpcyBmb3JiaWRkZW4KICAgICAgICAgICAgICAgICAjIENvcnJ1cHQgb3IgaG9zdGlsZSBwaWNrbGUuCi0gICAgICAgICAgICAgICAgcmFpc2UgVW5waWNrbGluZ0Vycm9yKCJFWFQgc3BlY2lmaWVzIGNvZGUgPD0gMCIpOworICAgICAgICAgICAgICAgIHJhaXNlIFVucGlja2xpbmdFcnJvcigiRVhUIHNwZWNpZmllcyBjb2RlIDw9IDAiKQogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigidW5yZWdpc3RlcmVkIGV4dGVuc2lvbiBjb2RlICVkIiAlIGNvZGUpCiAgICAgICAgIG9iaiA9IHNlbGYuZmluZF9jbGFzcygqa2V5KQogICAgICAgICBfZXh0ZW5zaW9uX2NhY2hlW2NvZGVdID0gb2JqCkBAIC0xMTM4LDI0ICsxMzc4LDE3IEBACiAgICAgICAgIGlmIHNlbGYucHJvdG8gPCAzIGFuZCBzZWxmLmZpeF9pbXBvcnRzOgogICAgICAgICAgICAgaWYgKG1vZHVsZSwgbmFtZSkgaW4gX2NvbXBhdF9waWNrbGUuTkFNRV9NQVBQSU5HOgogICAgICAgICAgICAgICAgIG1vZHVsZSwgbmFtZSA9IF9jb21wYXRfcGlja2xlLk5BTUVfTUFQUElOR1sobW9kdWxlLCBuYW1lKV0KLSAgICAgICAgICAgIGlmIG1vZHVsZSBpbiBfY29tcGF0X3BpY2tsZS5JTVBPUlRfTUFQUElORzoKKyAgICAgICAgICAgIGVsaWYgbW9kdWxlIGluIF9jb21wYXRfcGlja2xlLklNUE9SVF9NQVBQSU5HOgogICAgICAgICAgICAgICAgIG1vZHVsZSA9IF9jb21wYXRfcGlja2xlLklNUE9SVF9NQVBQSU5HW21vZHVsZV0KICAgICAgICAgX19pbXBvcnRfXyhtb2R1bGUsIGxldmVsPTApCi0gICAgICAgIG1vZCA9IHN5cy5tb2R1bGVzW21vZHVsZV0KLSAgICAgICAga2xhc3MgPSBnZXRhdHRyKG1vZCwgbmFtZSkKLSAgICAgICAgcmV0dXJuIGtsYXNzCisgICAgICAgIHJldHVybiBfZ2V0YXR0cmlidXRlKHN5cy5tb2R1bGVzW21vZHVsZV0sIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93X3F1YWxuYW1lPXNlbGYucHJvdG8gPj0gNCkKIAogICAgIGRlZiBsb2FkX3JlZHVjZShzZWxmKToKICAgICAgICAgc3RhY2sgPSBzZWxmLnN0YWNrCiAgICAgICAgIGFyZ3MgPSBzdGFjay5wb3AoKQogICAgICAgICBmdW5jID0gc3RhY2tbLTFdCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHZhbHVlID0gZnVuYygqYXJncykKLSAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgcHJpbnQoc3lzLmV4Y19pbmZvKCkpCi0gICAgICAgICAgICBwcmludChmdW5jLCBhcmdzKQotICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgc3RhY2tbLTFdID0gdmFsdWUKKyAgICAgICAgc3RhY2tbLTFdID0gZnVuYygqYXJncykKICAgICBkaXNwYXRjaFtSRURVQ0VbMF1dID0gbG9hZF9yZWR1Y2UKIAogICAgIGRlZiBsb2FkX3BvcChzZWxmKToKQEAgLTExODEsNyArMTQxNCw3IEBACiAgICAgICAgIHNlbGYuYXBwZW5kKHNlbGYubWVtb1tpXSkKICAgICBkaXNwYXRjaFtCSU5HRVRbMF1dID0gbG9hZF9iaW5nZXQKIAotICAgIGRlZiBsb2FkX2xvbmdfYmluZ2V0KHNlbGYsIHVucGFjaz1zdHJ1Y3QudW5wYWNrKToKKyAgICBkZWYgbG9hZF9sb25nX2JpbmdldChzZWxmKToKICAgICAgICAgaSwgPSB1bnBhY2soJzxJJywgc2VsZi5yZWFkKDQpKQogICAgICAgICBzZWxmLmFwcGVuZChzZWxmLm1lbW9baV0pCiAgICAgZGlzcGF0Y2hbTE9OR19CSU5HRVRbMF1dID0gbG9hZF9sb25nX2JpbmdldApAQCAtMTIwMCwxMyArMTQzMywxOCBAQAogICAgICAgICBzZWxmLm1lbW9baV0gPSBzZWxmLnN0YWNrWy0xXQogICAgIGRpc3BhdGNoW0JJTlBVVFswXV0gPSBsb2FkX2JpbnB1dAogCi0gICAgZGVmIGxvYWRfbG9uZ19iaW5wdXQoc2VsZiwgdW5wYWNrPXN0cnVjdC51bnBhY2ssIG1heHNpemU9c3lzLm1heHNpemUpOgorICAgIGRlZiBsb2FkX2xvbmdfYmlucHV0KHNlbGYpOgogICAgICAgICBpLCA9IHVucGFjaygnPEknLCBzZWxmLnJlYWQoNCkpCiAgICAgICAgIGlmIGkgPiBtYXhzaXplOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigibmVnYXRpdmUgTE9OR19CSU5QVVQgYXJndW1lbnQiKQogICAgICAgICBzZWxmLm1lbW9baV0gPSBzZWxmLnN0YWNrWy0xXQogICAgIGRpc3BhdGNoW0xPTkdfQklOUFVUWzBdXSA9IGxvYWRfbG9uZ19iaW5wdXQKIAorICAgIGRlZiBsb2FkX21lbW9pemUoc2VsZik6CisgICAgICAgIG1lbW8gPSBzZWxmLm1lbW8KKyAgICAgICAgbWVtb1tsZW4obWVtbyldID0gc2VsZi5zdGFja1stMV0KKyAgICBkaXNwYXRjaFtNRU1PSVpFWzBdXSA9IGxvYWRfbWVtb2l6ZQorCiAgICAgZGVmIGxvYWRfYXBwZW5kKHNlbGYpOgogICAgICAgICBzdGFjayA9IHNlbGYuc3RhY2sKICAgICAgICAgdmFsdWUgPSBzdGFjay5wb3AoKQpAQCAtMTI0NiwxMiArMTQ4NCwyNiBAQAogICAgICAgICBkZWwgc3RhY2tbbWFyazpdCiAgICAgZGlzcGF0Y2hbU0VUSVRFTVNbMF1dID0gbG9hZF9zZXRpdGVtcwogCisgICAgZGVmIGxvYWRfYWRkaXRlbXMoc2VsZik6CisgICAgICAgIHN0YWNrID0gc2VsZi5zdGFjaworICAgICAgICBtYXJrID0gc2VsZi5tYXJrZXIoKQorICAgICAgICBzZXRfb2JqID0gc3RhY2tbbWFyayAtIDFdCisgICAgICAgIGl0ZW1zID0gc3RhY2tbbWFyayArIDE6XQorICAgICAgICBpZiBpc2luc3RhbmNlKHNldF9vYmosIHNldCk6CisgICAgICAgICAgICBzZXRfb2JqLnVwZGF0ZShpdGVtcykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFkZCA9IHNldF9vYmouYWRkCisgICAgICAgICAgICBmb3IgaXRlbSBpbiBpdGVtczoKKyAgICAgICAgICAgICAgICBhZGQoaXRlbSkKKyAgICAgICAgZGVsIHN0YWNrW21hcms6XQorICAgIGRpc3BhdGNoW0FERElURU1TWzBdXSA9IGxvYWRfYWRkaXRlbXMKKwogICAgIGRlZiBsb2FkX2J1aWxkKHNlbGYpOgogICAgICAgICBzdGFjayA9IHNlbGYuc3RhY2sKICAgICAgICAgc3RhdGUgPSBzdGFjay5wb3AoKQogICAgICAgICBpbnN0ID0gc3RhY2tbLTFdCiAgICAgICAgIHNldHN0YXRlID0gZ2V0YXR0cihpbnN0LCAiX19zZXRzdGF0ZV9fIiwgTm9uZSkKLSAgICAgICAgaWYgc2V0c3RhdGU6CisgICAgICAgIGlmIHNldHN0YXRlIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgc2V0c3RhdGUoc3RhdGUpCiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgc2xvdHN0YXRlID0gTm9uZQpAQCAtMTI3OSw4NiArMTUzMSw0NiBAQAogICAgICAgICByYWlzZSBfU3RvcCh2YWx1ZSkKICAgICBkaXNwYXRjaFtTVE9QWzBdXSA9IGxvYWRfc3RvcAogCi0jIEVuY29kZS9kZWNvZGUgaW50cy4KLQotZGVmIGVuY29kZV9sb25nKHgpOgotICAgIHIiIiJFbmNvZGUgYSBsb25nIHRvIGEgdHdvJ3MgY29tcGxlbWVudCBsaXR0bGUtZW5kaWFuIGJpbmFyeSBzdHJpbmcuCi0gICAgTm90ZSB0aGF0IDAgaXMgYSBzcGVjaWFsIGNhc2UsIHJldHVybmluZyBhbiBlbXB0eSBzdHJpbmcsIHRvIHNhdmUgYQotICAgIGJ5dGUgaW4gdGhlIExPTkcxIHBpY2tsaW5nIGNvbnRleHQuCi0KLSAgICA+Pj4gZW5jb2RlX2xvbmcoMCkKLSAgICBiJycKLSAgICA+Pj4gZW5jb2RlX2xvbmcoMjU1KQotICAgIGInXHhmZlx4MDAnCi0gICAgPj4+IGVuY29kZV9sb25nKDMyNzY3KQotICAgIGInXHhmZlx4N2YnCi0gICAgPj4+IGVuY29kZV9sb25nKC0yNTYpCi0gICAgYidceDAwXHhmZicKLSAgICA+Pj4gZW5jb2RlX2xvbmcoLTMyNzY4KQotICAgIGInXHgwMFx4ODAnCi0gICAgPj4+IGVuY29kZV9sb25nKC0xMjgpCi0gICAgYidceDgwJwotICAgID4+PiBlbmNvZGVfbG9uZygxMjcpCi0gICAgYidceDdmJwotICAgID4+PgotICAgICIiIgotICAgIGlmIHggPT0gMDoKLSAgICAgICAgcmV0dXJuIGInJwotICAgIG5ieXRlcyA9ICh4LmJpdF9sZW5ndGgoKSA+PiAzKSArIDEKLSAgICByZXN1bHQgPSB4LnRvX2J5dGVzKG5ieXRlcywgYnl0ZW9yZGVyPSdsaXR0bGUnLCBzaWduZWQ9VHJ1ZSkKLSAgICBpZiB4IDwgMCBhbmQgbmJ5dGVzID4gMToKLSAgICAgICAgaWYgcmVzdWx0Wy0xXSA9PSAweGZmIGFuZCAocmVzdWx0Wy0yXSAmIDB4ODApICE9IDA6Ci0gICAgICAgICAgICByZXN1bHQgPSByZXN1bHRbOi0xXQotICAgIHJldHVybiByZXN1bHQKLQotZGVmIGRlY29kZV9sb25nKGRhdGEpOgotICAgIHIiIiJEZWNvZGUgYW4gaW50IGZyb20gYSB0d28ncyBjb21wbGVtZW50IGxpdHRsZS1lbmRpYW4gYmluYXJ5IHN0cmluZy4KLQotICAgID4+PiBkZWNvZGVfbG9uZyhiJycpCi0gICAgMAotICAgID4+PiBkZWNvZGVfbG9uZyhiIlx4ZmZceDAwIikKLSAgICAyNTUKLSAgICA+Pj4gZGVjb2RlX2xvbmcoYiJceGZmXHg3ZiIpCi0gICAgMzI3NjcKLSAgICA+Pj4gZGVjb2RlX2xvbmcoYiJceDAwXHhmZiIpCi0gICAgLTI1NgotICAgID4+PiBkZWNvZGVfbG9uZyhiIlx4MDBceDgwIikKLSAgICAtMzI3NjgKLSAgICA+Pj4gZGVjb2RlX2xvbmcoYiJceDgwIikKLSAgICAtMTI4Ci0gICAgPj4+IGRlY29kZV9sb25nKGIiXHg3ZiIpCi0gICAgMTI3Ci0gICAgIiIiCi0gICAgcmV0dXJuIGludC5mcm9tX2J5dGVzKGRhdGEsIGJ5dGVvcmRlcj0nbGl0dGxlJywgc2lnbmVkPVRydWUpCiAKICMgU2hvcnRoYW5kcwogCi1kZWYgZHVtcChvYmosIGZpbGUsIHByb3RvY29sPU5vbmUsICosIGZpeF9pbXBvcnRzPVRydWUpOgotICAgIFBpY2tsZXIoZmlsZSwgcHJvdG9jb2wsIGZpeF9pbXBvcnRzPWZpeF9pbXBvcnRzKS5kdW1wKG9iaikKK2RlZiBfZHVtcChvYmosIGZpbGUsIHByb3RvY29sPU5vbmUsICosIGZpeF9pbXBvcnRzPVRydWUpOgorICAgIF9QaWNrbGVyKGZpbGUsIHByb3RvY29sLCBmaXhfaW1wb3J0cz1maXhfaW1wb3J0cykuZHVtcChvYmopCiAKLWRlZiBkdW1wcyhvYmosIHByb3RvY29sPU5vbmUsICosIGZpeF9pbXBvcnRzPVRydWUpOgorZGVmIF9kdW1wcyhvYmosIHByb3RvY29sPU5vbmUsICosIGZpeF9pbXBvcnRzPVRydWUpOgogICAgIGYgPSBpby5CeXRlc0lPKCkKLSAgICBQaWNrbGVyKGYsIHByb3RvY29sLCBmaXhfaW1wb3J0cz1maXhfaW1wb3J0cykuZHVtcChvYmopCisgICAgX1BpY2tsZXIoZiwgcHJvdG9jb2wsIGZpeF9pbXBvcnRzPWZpeF9pbXBvcnRzKS5kdW1wKG9iaikKICAgICByZXMgPSBmLmdldHZhbHVlKCkKICAgICBhc3NlcnQgaXNpbnN0YW5jZShyZXMsIGJ5dGVzX3R5cGVzKQogICAgIHJldHVybiByZXMKIAotZGVmIGxvYWQoZmlsZSwgKiwgZml4X2ltcG9ydHM9VHJ1ZSwgZW5jb2Rpbmc9IkFTQ0lJIiwgZXJyb3JzPSJzdHJpY3QiKToKLSAgICByZXR1cm4gVW5waWNrbGVyKGZpbGUsIGZpeF9pbXBvcnRzPWZpeF9pbXBvcnRzLAorZGVmIF9sb2FkKGZpbGUsICosIGZpeF9pbXBvcnRzPVRydWUsIGVuY29kaW5nPSJBU0NJSSIsIGVycm9ycz0ic3RyaWN0Iik6CisgICAgcmV0dXJuIF9VbnBpY2tsZXIoZmlsZSwgZml4X2ltcG9ydHM9Zml4X2ltcG9ydHMsCiAgICAgICAgICAgICAgICAgICAgICBlbmNvZGluZz1lbmNvZGluZywgZXJyb3JzPWVycm9ycykubG9hZCgpCiAKLWRlZiBsb2FkcyhzLCAqLCBmaXhfaW1wb3J0cz1UcnVlLCBlbmNvZGluZz0iQVNDSUkiLCBlcnJvcnM9InN0cmljdCIpOgorZGVmIF9sb2FkcyhzLCAqLCBmaXhfaW1wb3J0cz1UcnVlLCBlbmNvZGluZz0iQVNDSUkiLCBlcnJvcnM9InN0cmljdCIpOgogICAgIGlmIGlzaW5zdGFuY2Uocywgc3RyKToKICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJDYW4ndCBsb2FkIHBpY2tsZSBmcm9tIHVuaWNvZGUgc3RyaW5nIikKICAgICBmaWxlID0gaW8uQnl0ZXNJTyhzKQotICAgIHJldHVybiBVbnBpY2tsZXIoZmlsZSwgZml4X2ltcG9ydHM9Zml4X2ltcG9ydHMsCi0gICAgICAgICAgICAgICAgICAgICBlbmNvZGluZz1lbmNvZGluZywgZXJyb3JzPWVycm9ycykubG9hZCgpCisgICAgcmV0dXJuIF9VbnBpY2tsZXIoZmlsZSwgZml4X2ltcG9ydHM9Zml4X2ltcG9ydHMsCisgICAgICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc9ZW5jb2RpbmcsIGVycm9ycz1lcnJvcnMpLmxvYWQoKQogCiAjIFVzZSB0aGUgZmFzdGVyIF9waWNrbGUgaWYgcG9zc2libGUKIHRyeToKLSAgICBmcm9tIF9waWNrbGUgaW1wb3J0ICoKKyAgICBmcm9tIF9waWNrbGUgaW1wb3J0ICgKKyAgICAgICAgUGlja2xlRXJyb3IsCisgICAgICAgIFBpY2tsaW5nRXJyb3IsCisgICAgICAgIFVucGlja2xpbmdFcnJvciwKKyAgICAgICAgUGlja2xlciwKKyAgICAgICAgVW5waWNrbGVyLAorICAgICAgICBkdW1wLAorICAgICAgICBkdW1wcywKKyAgICAgICAgbG9hZCwKKyAgICAgICAgbG9hZHMKKyAgICApCiBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgUGlja2xlciwgVW5waWNrbGVyID0gX1BpY2tsZXIsIF9VbnBpY2tsZXIKKyAgICBkdW1wLCBkdW1wcywgbG9hZCwgbG9hZHMgPSBfZHVtcCwgX2R1bXBzLCBfbG9hZCwgX2xvYWRzCiAKICMgRG9jdGVzdAogZGVmIF90ZXN0KCk6CmRpZmYgLS1naXQgYS9MaWIvcGlja2xldG9vbHMucHkgYi9MaWIvcGlja2xldG9vbHMucHkKaW5kZXggNjEyZmE4Zi4uY2Y1ZGY0MSAxMDA2NDQKLS0tIGEvTGliL3BpY2tsZXRvb2xzLnB5CisrKyBiL0xpYi9waWNrbGV0b29scy5weQpAQCAtMTEsNiArMTEsNyBAQAogJycnCiAKIGltcG9ydCBjb2RlY3MKK2ltcG9ydCBpbwogaW1wb3J0IHBpY2tsZQogaW1wb3J0IHJlCiBpbXBvcnQgc3lzCkBAIC0zNCwxMTkgKzM1LDExOCBAQAogIyAgIGJ5IGEgbGF0ZXIgR0VULgogCiAKLSIiIgotIkEgcGlja2xlIiBpcyBhIHByb2dyYW0gZm9yIGEgdmlydHVhbCBwaWNrbGUgbWFjaGluZSAoUE0sIGJ1dCBtb3JlIGFjY3VyYXRlbHkKLWNhbGxlZCBhbiB1bnBpY2tsaW5nIG1hY2hpbmUpLiAgSXQncyBhIHNlcXVlbmNlIG9mIG9wY29kZXMsIGludGVycHJldGVkIGJ5IHRoZQotUE0sIGJ1aWxkaW5nIGFuIGFyYml0cmFyaWx5IGNvbXBsZXggUHl0aG9uIG9iamVjdC4KKyMgIkEgcGlja2xlIiBpcyBhIHByb2dyYW0gZm9yIGEgdmlydHVhbCBwaWNrbGUgbWFjaGluZSAoUE0sIGJ1dCBtb3JlIGFjY3VyYXRlbHkKKyMgY2FsbGVkIGFuIHVucGlja2xpbmcgbWFjaGluZSkuICBJdCdzIGEgc2VxdWVuY2Ugb2Ygb3Bjb2RlcywgaW50ZXJwcmV0ZWQgYnkgdGhlCisjIFBNLCBidWlsZGluZyBhbiBhcmJpdHJhcmlseSBjb21wbGV4IFB5dGhvbiBvYmplY3QuCisjCisjIEZvciB0aGUgbW9zdCBwYXJ0LCB0aGUgUE0gaXMgdmVyeSBzaW1wbGU6ICB0aGVyZSBhcmUgbm8gbG9vcGluZywgdGVzdGluZywgb3IKKyMgY29uZGl0aW9uYWwgaW5zdHJ1Y3Rpb25zLCBubyBhcml0aG1ldGljIGFuZCBubyBmdW5jdGlvbiBjYWxscy4gIE9wY29kZXMgYXJlCisjIGV4ZWN1dGVkIG9uY2UgZWFjaCwgZnJvbSBmaXJzdCB0byBsYXN0LCB1bnRpbCBhIFNUT1Agb3Bjb2RlIGlzIHJlYWNoZWQuCisjCisjIFRoZSBQTSBoYXMgdHdvIGRhdGEgYXJlYXMsICJ0aGUgc3RhY2siIGFuZCAidGhlIG1lbW8iLgorIworIyBNYW55IG9wY29kZXMgcHVzaCBQeXRob24gb2JqZWN0cyBvbnRvIHRoZSBzdGFjazsgZS5nLiwgSU5UIHB1c2hlcyBhIFB5dGhvbgorIyBpbnRlZ2VyIG9iamVjdCBvbiB0aGUgc3RhY2ssIHdob3NlIHZhbHVlIGlzIGdvdHRlbiBmcm9tIGEgZGVjaW1hbCBzdHJpbmcKKyMgbGl0ZXJhbCBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlIElOVCBvcGNvZGUgaW4gdGhlIHBpY2tsZSBieXRlc3RyZWFtLiAgT3RoZXIKKyMgb3Bjb2RlcyB0YWtlIFB5dGhvbiBvYmplY3RzIG9mZiB0aGUgc3RhY2suICBUaGUgcmVzdWx0IG9mIHVucGlja2xpbmcgaXMKKyMgd2hhdGV2ZXIgb2JqZWN0IGlzIGxlZnQgb24gdGhlIHN0YWNrIHdoZW4gdGhlIGZpbmFsIFNUT1Agb3Bjb2RlIGlzIGV4ZWN1dGVkLgorIworIyBUaGUgbWVtbyBpcyBzaW1wbHkgYW4gYXJyYXkgb2Ygb2JqZWN0cywgb3IgaXQgY2FuIGJlIGltcGxlbWVudGVkIGFzIGEgZGljdAorIyBtYXBwaW5nIGxpdHRsZSBpbnRlZ2VycyB0byBvYmplY3RzLiAgVGhlIG1lbW8gc2VydmVzIGFzIHRoZSBQTSdzICJsb25nIHRlcm0KKyMgbWVtb3J5IiwgYW5kIHRoZSBsaXR0bGUgaW50ZWdlcnMgaW5kZXhpbmcgdGhlIG1lbW8gYXJlIGFraW4gdG8gdmFyaWFibGUKKyMgbmFtZXMuICBTb21lIG9wY29kZXMgcG9wIGEgc3RhY2sgb2JqZWN0IGludG8gdGhlIG1lbW8gYXQgYSBnaXZlbiBpbmRleCwKKyMgYW5kIG90aGVycyBwdXNoIGEgbWVtbyBvYmplY3QgYXQgYSBnaXZlbiBpbmRleCBvbnRvIHRoZSBzdGFjayBhZ2Fpbi4KKyMKKyMgQXQgaGVhcnQsIHRoYXQncyBhbGwgdGhlIFBNIGhhcy4gIFN1YnRsZXRpZXMgYXJpc2UgZm9yIHRoZXNlIHJlYXNvbnM6CisjCisjICsgT2JqZWN0IGlkZW50aXR5LiAgT2JqZWN0cyBjYW4gYmUgYXJiaXRyYXJpbHkgY29tcGxleCwgYW5kIHN1Ym9iamVjdHMKKyMgICBtYXkgYmUgc2hhcmVkIChmb3IgZXhhbXBsZSwgdGhlIGxpc3QgW2EsIGFdIHJlZmVycyB0byB0aGUgc2FtZSBvYmplY3QgYQorIyAgIHR3aWNlKS4gIEl0IGNhbiBiZSB2aXRhbCB0aGF0IHVucGlja2xpbmcgcmVjcmVhdGUgYW4gaXNvbW9ycGhpYyBvYmplY3QKKyMgICBncmFwaCwgZmFpdGhmdWxseSByZXByb2R1Y2luZyBzaGFyaW5nLgorIworIyArIFJlY3Vyc2l2ZSBvYmplY3RzLiAgRm9yIGV4YW1wbGUsIGFmdGVyICJMID0gW107IEwuYXBwZW5kKEwpIiwgTCBpcyBhCisjICAgbGlzdCwgYW5kIExbMF0gaXMgdGhlIHNhbWUgbGlzdC4gIFRoaXMgaXMgcmVsYXRlZCB0byB0aGUgb2JqZWN0IGlkZW50aXR5CisjICAgcG9pbnQsIGFuZCBzb21lIHNlcXVlbmNlcyBvZiBwaWNrbGUgb3Bjb2RlcyBhcmUgc3VidGxlIGluIG9yZGVyIHRvCisjICAgZ2V0IHRoZSByaWdodCByZXN1bHQgaW4gYWxsIGNhc2VzLgorIworIyArIFRoaW5ncyBwaWNrbGUgZG9lc24ndCBrbm93IGV2ZXJ5dGhpbmcgYWJvdXQuICBFeGFtcGxlcyBvZiB0aGluZ3MgcGlja2xlCisjICAgZG9lcyBrbm93IGV2ZXJ5dGhpbmcgYWJvdXQgYXJlIFB5dGhvbidzIGJ1aWx0aW4gc2NhbGFyIGFuZCBjb250YWluZXIKKyMgICB0eXBlcywgbGlrZSBpbnRzIGFuZCB0dXBsZXMuICBUaGV5IGdlbmVyYWxseSBoYXZlIG9wY29kZXMgZGVkaWNhdGVkIHRvCisjICAgdGhlbS4gIEZvciB0aGluZ3MgbGlrZSBtb2R1bGUgcmVmZXJlbmNlcyBhbmQgaW5zdGFuY2VzIG9mIHVzZXItZGVmaW5lZAorIyAgIGNsYXNzZXMsIHBpY2tsZSdzIGtub3dsZWRnZSBpcyBsaW1pdGVkLiAgSGlzdG9yaWNhbGx5LCBtYW55IGVuaGFuY2VtZW50cworIyAgIGhhdmUgYmVlbiBtYWRlIHRvIHRoZSBwaWNrbGUgcHJvdG9jb2wgaW4gb3JkZXIgdG8gZG8gYSBiZXR0ZXIgKGZhc3RlciwKKyMgICBhbmQvb3IgbW9yZSBjb21wYWN0KSBqb2Igb24gdGhvc2UuCisjCisjICsgQmFja3dhcmQgY29tcGF0aWJpbGl0eSBhbmQgbWljcm8tb3B0aW1pemF0aW9uLiAgQXMgZXhwbGFpbmVkIGJlbG93LAorIyAgIHBpY2tsZSBvcGNvZGVzIG5ldmVyIGdvIGF3YXksIG5vdCBldmVuIHdoZW4gYmV0dGVyIHdheXMgdG8gZG8gYSB0aGluZworIyAgIGdldCBpbnZlbnRlZC4gIFRoZSByZXBlcnRvaXJlIG9mIHRoZSBQTSBqdXN0IGtlZXBzIGdyb3dpbmcgb3ZlciB0aW1lLgorIyAgIEZvciBleGFtcGxlLCBwcm90b2NvbCAwIGhhZCB0d28gb3Bjb2RlcyBmb3IgYnVpbGRpbmcgUHl0aG9uIGludGVnZXJzIChJTlQKKyMgICBhbmQgTE9ORyksIHByb3RvY29sIDEgYWRkZWQgdGhyZWUgbW9yZSBmb3IgbW9yZS1lZmZpY2llbnQgcGlja2xpbmcgb2Ygc2hvcnQKKyMgICBpbnRlZ2VycywgYW5kIHByb3RvY29sIDIgYWRkZWQgdHdvIG1vcmUgZm9yIG1vcmUtZWZmaWNpZW50IHBpY2tsaW5nIG9mCisjICAgbG9uZyBpbnRlZ2VycyAoYmVmb3JlIHByb3RvY29sIDIsIHRoZSBvbmx5IHdheXMgdG8gcGlja2xlIGEgUHl0aG9uIGxvbmcKKyMgICB0b29rIHRpbWUgcXVhZHJhdGljIGluIHRoZSBudW1iZXIgb2YgZGlnaXRzLCBmb3IgYm90aCBwaWNrbGluZyBhbmQKKyMgICB1bnBpY2tsaW5nKS4gICJPcGNvZGUgYmxvYXQiIGlzbid0IHNvIG11Y2ggYSBzdWJ0bGV0eSBhcyBhIHNvdXJjZSBvZgorIyAgIHdlYXJ5aW5nIGNvbXBsaWNhdGlvbi4KKyMKKyMKKyMgUGlja2xlIHByb3RvY29sczoKKyMKKyMgRm9yIGNvbXBhdGliaWxpdHksIHRoZSBtZWFuaW5nIG9mIGEgcGlja2xlIG9wY29kZSBuZXZlciBjaGFuZ2VzLiAgSW5zdGVhZCBuZXcKKyMgcGlja2xlIG9wY29kZXMgZ2V0IGFkZGVkLCBhbmQgZWFjaCB2ZXJzaW9uJ3MgdW5waWNrbGVyIGNhbiBoYW5kbGUgYWxsIHRoZQorIyBwaWNrbGUgb3Bjb2RlcyBpbiBhbGwgcHJvdG9jb2wgdmVyc2lvbnMgdG8gZGF0ZS4gIFNvIG9sZCBwaWNrbGVzIGNvbnRpbnVlIHRvCisjIGJlIHJlYWRhYmxlIGZvcmV2ZXIuICBUaGUgcGlja2xlciBjYW4gZ2VuZXJhbGx5IGJlIHRvbGQgdG8gcmVzdHJpY3QgaXRzZWxmIHRvCisjIHRoZSBzdWJzZXQgb2Ygb3Bjb2RlcyBhdmFpbGFibGUgdW5kZXIgcHJldmlvdXMgcHJvdG9jb2wgdmVyc2lvbnMgdG9vLCBzbyB0aGF0CisjIHVzZXJzIGNhbiBjcmVhdGUgcGlja2xlcyB1bmRlciB0aGUgY3VycmVudCB2ZXJzaW9uIHJlYWRhYmxlIGJ5IG9sZGVyCisjIHZlcnNpb25zLiAgSG93ZXZlciwgYSBwaWNrbGUgZG9lcyBub3QgY29udGFpbiBpdHMgdmVyc2lvbiBudW1iZXIgZW1iZWRkZWQKKyMgd2l0aGluIGl0LiAgSWYgYW4gb2xkZXIgdW5waWNrbGVyIHRyaWVzIHRvIHJlYWQgYSBwaWNrbGUgdXNpbmcgYSBsYXRlcgorIyBwcm90b2NvbCwgdGhlIHJlc3VsdCBpcyBtb3N0IGxpa2VseSBhbiBleGNlcHRpb24gZHVlIHRvIHNlZWluZyBhbiB1bmtub3duIChpbgorIyB0aGUgb2xkZXIgdW5waWNrbGVyKSBvcGNvZGUuCisjCisjIFRoZSBvcmlnaW5hbCBwaWNrbGUgdXNlZCB3aGF0J3Mgbm93IGNhbGxlZCAicHJvdG9jb2wgMCIsIGFuZCB3aGF0IHdhcyBjYWxsZWQKKyMgInRleHQgbW9kZSIgYmVmb3JlIFB5dGhvbiAyLjMuICBUaGUgZW50aXJlIHBpY2tsZSBieXRlc3RyZWFtIGlzIG1hZGUgdXAgb2YKKyMgcHJpbnRhYmxlIDctYml0IEFTQ0lJIGNoYXJhY3RlcnMsIHBsdXMgdGhlIG5ld2xpbmUgY2hhcmFjdGVyLCBpbiBwcm90b2NvbCAwLgorIyBUaGF0J3Mgd2h5IGl0IHdhcyBjYWxsZWQgdGV4dCBtb2RlLiAgUHJvdG9jb2wgMCBpcyBzbWFsbCBhbmQgZWxlZ2FudCwgYnV0CisjIHNvbWV0aW1lcyBwYWluZnVsbHkgaW5lZmZpY2llbnQuCisjCisjIFRoZSBzZWNvbmQgbWFqb3Igc2V0IG9mIGFkZGl0aW9ucyBpcyBub3cgY2FsbGVkICJwcm90b2NvbCAxIiwgYW5kIHdhcyBjYWxsZWQKKyMgImJpbmFyeSBtb2RlIiBiZWZvcmUgUHl0aG9uIDIuMy4gIFRoaXMgYWRkZWQgbWFueSBvcGNvZGVzIHdpdGggYXJndW1lbnRzCisjIGNvbnNpc3Rpbmcgb2YgYXJiaXRyYXJ5IGJ5dGVzLCBpbmNsdWRpbmcgTlVMIGJ5dGVzIGFuZCB1bnByaW50YWJsZSAiaGlnaCBiaXQiCisjIGJ5dGVzLiAgQmluYXJ5IG1vZGUgcGlja2xlcyBjYW4gYmUgc3Vic3RhbnRpYWxseSBzbWFsbGVyIHRoYW4gZXF1aXZhbGVudAorIyB0ZXh0IG1vZGUgcGlja2xlcywgYW5kIHNvbWV0aW1lcyBmYXN0ZXIgdG9vOyBlLmcuLCBCSU5JTlQgcmVwcmVzZW50cyBhIDQtYnl0ZQorIyBpbnQgYXMgNCBieXRlcyBmb2xsb3dpbmcgdGhlIG9wY29kZSwgd2hpY2ggaXMgY2hlYXBlciB0byB1bnBpY2tsZSB0aGFuIHRoZQorIyAocGVyaGFwcykgMTEtY2hhcmFjdGVyIGRlY2ltYWwgc3RyaW5nIGF0dGFjaGVkIHRvIElOVC4gIFByb3RvY29sIDEgYWxzbyBhZGRlZAorIyBhIG51bWJlciBvZiBvcGNvZGVzIHRoYXQgb3BlcmF0ZSBvbiBtYW55IHN0YWNrIGVsZW1lbnRzIGF0IG9uY2UgKGxpa2UgQVBQRU5EUworIyBhbmQgU0VUSVRFTVMpLCBhbmQgInNob3J0Y3V0IiBvcGNvZGVzIChsaWtlIEVNUFRZX0RJQ1QgYW5kIEVNUFRZX1RVUExFKS4KKyMKKyMgVGhlIHRoaXJkIG1ham9yIHNldCBvZiBhZGRpdGlvbnMgY2FtZSBpbiBQeXRob24gMi4zLCBhbmQgaXMgY2FsbGVkICJwcm90b2NvbAorIyAyIi4gIFRoaXMgYWRkZWQ6CisjCisjIC0gQSBiZXR0ZXIgd2F5IHRvIHBpY2tsZSBpbnN0YW5jZXMgb2YgbmV3LXN0eWxlIGNsYXNzZXMgKE5FV09CSikuCisjCisjIC0gQSB3YXkgZm9yIGEgcGlja2xlIHRvIGlkZW50aWZ5IGl0cyBwcm90b2NvbCAoUFJPVE8pLgorIworIyAtIFRpbWUtIGFuZCBzcGFjZS0gZWZmaWNpZW50IHBpY2tsaW5nIG9mIGxvbmcgaW50cyAoTE9OR3sxLDR9KS4KKyMKKyMgLSBTaG9ydGN1dHMgZm9yIHNtYWxsIHR1cGxlcyAoVFVQTEV7MSwyLDN9fS4KKyMKKyMgLSBEZWRpY2F0ZWQgb3Bjb2RlcyBmb3IgYm9vbHMgKE5FV1RSVUUsIE5FV0ZBTFNFKS4KKyMKKyMgLSBUaGUgImV4dGVuc2lvbiByZWdpc3RyeSIsIGEgdmVjdG9yIG9mIHBvcHVsYXIgb2JqZWN0cyB0aGF0IGNhbiBiZSBwdXNoZWQKKyMgICBlZmZpY2llbnRseSBieSBpbmRleCAoRVhUezEsMiw0fSkuICBUaGlzIGlzIGFraW4gdG8gdGhlIG1lbW8gYW5kIEdFVCwgYnV0CisjICAgdGhlIHJlZ2lzdHJ5IGNvbnRlbnRzIGFyZSBwcmVkZWZpbmVkICh0aGVyZSdzIG5vdGhpbmcgYWtpbiB0byB0aGUgbWVtbydzCisjICAgUFVUKS4KKyMKKyMgQW5vdGhlciBpbmRlcGVuZGVudCBjaGFuZ2Ugd2l0aCBQeXRob24gMi4zIGlzIHRoZSBhYmFuZG9ubWVudCBvZiBhbnkKKyMgcHJldGVuc2UgdGhhdCBpdCBtaWdodCBiZSBzYWZlIHRvIGxvYWQgcGlja2xlcyByZWNlaXZlZCBmcm9tIHVudHJ1c3RlZAorIyBwYXJ0aWVzIC0tIG5vIHN1ZmZpY2llbnQgc2VjdXJpdHkgYW5hbHlzaXMgaGFzIGJlZW4gZG9uZSB0byBndWFyYW50ZWUKKyMgdGhpcyBhbmQgdGhlcmUgaXNuJ3QgYSB1c2UgY2FzZSB0aGF0IHdhcnJhbnRzIHRoZSBleHBlbnNlIG9mIHN1Y2ggYW4KKyMgYW5hbHlzaXMuCisjCisjIFRvIHRoaXMgZW5kLCBhbGwgdGVzdHMgZm9yIF9fc2FmZV9mb3JfdW5waWNrbGluZ19fIG9yIGZvcgorIyBjb3B5cmVnLnNhZmVfY29uc3RydWN0b3JzIGFyZSByZW1vdmVkIGZyb20gdGhlIHVucGlja2xpbmcgY29kZS4KKyMgUmVmZXJlbmNlcyB0byB0aGVzZSB2YXJpYWJsZXMgaW4gdGhlIGRlc2NyaXB0aW9ucyBiZWxvdyBhcmUgdG8gYmUgc2VlbgorIyBhcyBkZXNjcmliaW5nIHVucGlja2xpbmcgaW4gUHl0aG9uIDIuMiBhbmQgYmVmb3JlLgogCi1Gb3IgdGhlIG1vc3QgcGFydCwgdGhlIFBNIGlzIHZlcnkgc2ltcGxlOiAgdGhlcmUgYXJlIG5vIGxvb3BpbmcsIHRlc3RpbmcsIG9yCi1jb25kaXRpb25hbCBpbnN0cnVjdGlvbnMsIG5vIGFyaXRobWV0aWMgYW5kIG5vIGZ1bmN0aW9uIGNhbGxzLiAgT3Bjb2RlcyBhcmUKLWV4ZWN1dGVkIG9uY2UgZWFjaCwgZnJvbSBmaXJzdCB0byBsYXN0LCB1bnRpbCBhIFNUT1Agb3Bjb2RlIGlzIHJlYWNoZWQuCi0KLVRoZSBQTSBoYXMgdHdvIGRhdGEgYXJlYXMsICJ0aGUgc3RhY2siIGFuZCAidGhlIG1lbW8iLgotCi1NYW55IG9wY29kZXMgcHVzaCBQeXRob24gb2JqZWN0cyBvbnRvIHRoZSBzdGFjazsgZS5nLiwgSU5UIHB1c2hlcyBhIFB5dGhvbgotaW50ZWdlciBvYmplY3Qgb24gdGhlIHN0YWNrLCB3aG9zZSB2YWx1ZSBpcyBnb3R0ZW4gZnJvbSBhIGRlY2ltYWwgc3RyaW5nCi1saXRlcmFsIGltbWVkaWF0ZWx5IGZvbGxvd2luZyB0aGUgSU5UIG9wY29kZSBpbiB0aGUgcGlja2xlIGJ5dGVzdHJlYW0uICBPdGhlcgotb3Bjb2RlcyB0YWtlIFB5dGhvbiBvYmplY3RzIG9mZiB0aGUgc3RhY2suICBUaGUgcmVzdWx0IG9mIHVucGlja2xpbmcgaXMKLXdoYXRldmVyIG9iamVjdCBpcyBsZWZ0IG9uIHRoZSBzdGFjayB3aGVuIHRoZSBmaW5hbCBTVE9QIG9wY29kZSBpcyBleGVjdXRlZC4KLQotVGhlIG1lbW8gaXMgc2ltcGx5IGFuIGFycmF5IG9mIG9iamVjdHMsIG9yIGl0IGNhbiBiZSBpbXBsZW1lbnRlZCBhcyBhIGRpY3QKLW1hcHBpbmcgbGl0dGxlIGludGVnZXJzIHRvIG9iamVjdHMuICBUaGUgbWVtbyBzZXJ2ZXMgYXMgdGhlIFBNJ3MgImxvbmcgdGVybQotbWVtb3J5IiwgYW5kIHRoZSBsaXR0bGUgaW50ZWdlcnMgaW5kZXhpbmcgdGhlIG1lbW8gYXJlIGFraW4gdG8gdmFyaWFibGUKLW5hbWVzLiAgU29tZSBvcGNvZGVzIHBvcCBhIHN0YWNrIG9iamVjdCBpbnRvIHRoZSBtZW1vIGF0IGEgZ2l2ZW4gaW5kZXgsCi1hbmQgb3RoZXJzIHB1c2ggYSBtZW1vIG9iamVjdCBhdCBhIGdpdmVuIGluZGV4IG9udG8gdGhlIHN0YWNrIGFnYWluLgotCi1BdCBoZWFydCwgdGhhdCdzIGFsbCB0aGUgUE0gaGFzLiAgU3VidGxldGllcyBhcmlzZSBmb3IgdGhlc2UgcmVhc29uczoKLQotKyBPYmplY3QgaWRlbnRpdHkuICBPYmplY3RzIGNhbiBiZSBhcmJpdHJhcmlseSBjb21wbGV4LCBhbmQgc3Vib2JqZWN0cwotICBtYXkgYmUgc2hhcmVkIChmb3IgZXhhbXBsZSwgdGhlIGxpc3QgW2EsIGFdIHJlZmVycyB0byB0aGUgc2FtZSBvYmplY3QgYQotICB0d2ljZSkuICBJdCBjYW4gYmUgdml0YWwgdGhhdCB1bnBpY2tsaW5nIHJlY3JlYXRlIGFuIGlzb21vcnBoaWMgb2JqZWN0Ci0gIGdyYXBoLCBmYWl0aGZ1bGx5IHJlcHJvZHVjaW5nIHNoYXJpbmcuCi0KLSsgUmVjdXJzaXZlIG9iamVjdHMuICBGb3IgZXhhbXBsZSwgYWZ0ZXIgIkwgPSBbXTsgTC5hcHBlbmQoTCkiLCBMIGlzIGEKLSAgbGlzdCwgYW5kIExbMF0gaXMgdGhlIHNhbWUgbGlzdC4gIFRoaXMgaXMgcmVsYXRlZCB0byB0aGUgb2JqZWN0IGlkZW50aXR5Ci0gIHBvaW50LCBhbmQgc29tZSBzZXF1ZW5jZXMgb2YgcGlja2xlIG9wY29kZXMgYXJlIHN1YnRsZSBpbiBvcmRlciB0bwotICBnZXQgdGhlIHJpZ2h0IHJlc3VsdCBpbiBhbGwgY2FzZXMuCi0KLSsgVGhpbmdzIHBpY2tsZSBkb2Vzbid0IGtub3cgZXZlcnl0aGluZyBhYm91dC4gIEV4YW1wbGVzIG9mIHRoaW5ncyBwaWNrbGUKLSAgZG9lcyBrbm93IGV2ZXJ5dGhpbmcgYWJvdXQgYXJlIFB5dGhvbidzIGJ1aWx0aW4gc2NhbGFyIGFuZCBjb250YWluZXIKLSAgdHlwZXMsIGxpa2UgaW50cyBhbmQgdHVwbGVzLiAgVGhleSBnZW5lcmFsbHkgaGF2ZSBvcGNvZGVzIGRlZGljYXRlZCB0bwotICB0aGVtLiAgRm9yIHRoaW5ncyBsaWtlIG1vZHVsZSByZWZlcmVuY2VzIGFuZCBpbnN0YW5jZXMgb2YgdXNlci1kZWZpbmVkCi0gIGNsYXNzZXMsIHBpY2tsZSdzIGtub3dsZWRnZSBpcyBsaW1pdGVkLiAgSGlzdG9yaWNhbGx5LCBtYW55IGVuaGFuY2VtZW50cwotICBoYXZlIGJlZW4gbWFkZSB0byB0aGUgcGlja2xlIHByb3RvY29sIGluIG9yZGVyIHRvIGRvIGEgYmV0dGVyIChmYXN0ZXIsCi0gIGFuZC9vciBtb3JlIGNvbXBhY3QpIGpvYiBvbiB0aG9zZS4KLQotKyBCYWNrd2FyZCBjb21wYXRpYmlsaXR5IGFuZCBtaWNyby1vcHRpbWl6YXRpb24uICBBcyBleHBsYWluZWQgYmVsb3csCi0gIHBpY2tsZSBvcGNvZGVzIG5ldmVyIGdvIGF3YXksIG5vdCBldmVuIHdoZW4gYmV0dGVyIHdheXMgdG8gZG8gYSB0aGluZwotICBnZXQgaW52ZW50ZWQuICBUaGUgcmVwZXJ0b2lyZSBvZiB0aGUgUE0ganVzdCBrZWVwcyBncm93aW5nIG92ZXIgdGltZS4KLSAgRm9yIGV4YW1wbGUsIHByb3RvY29sIDAgaGFkIHR3byBvcGNvZGVzIGZvciBidWlsZGluZyBQeXRob24gaW50ZWdlcnMgKElOVAotICBhbmQgTE9ORyksIHByb3RvY29sIDEgYWRkZWQgdGhyZWUgbW9yZSBmb3IgbW9yZS1lZmZpY2llbnQgcGlja2xpbmcgb2Ygc2hvcnQKLSAgaW50ZWdlcnMsIGFuZCBwcm90b2NvbCAyIGFkZGVkIHR3byBtb3JlIGZvciBtb3JlLWVmZmljaWVudCBwaWNrbGluZyBvZgotICBsb25nIGludGVnZXJzIChiZWZvcmUgcHJvdG9jb2wgMiwgdGhlIG9ubHkgd2F5cyB0byBwaWNrbGUgYSBQeXRob24gbG9uZwotICB0b29rIHRpbWUgcXVhZHJhdGljIGluIHRoZSBudW1iZXIgb2YgZGlnaXRzLCBmb3IgYm90aCBwaWNrbGluZyBhbmQKLSAgdW5waWNrbGluZykuICAiT3Bjb2RlIGJsb2F0IiBpc24ndCBzbyBtdWNoIGEgc3VidGxldHkgYXMgYSBzb3VyY2Ugb2YKLSAgd2VhcnlpbmcgY29tcGxpY2F0aW9uLgotCi0KLVBpY2tsZSBwcm90b2NvbHM6Ci0KLUZvciBjb21wYXRpYmlsaXR5LCB0aGUgbWVhbmluZyBvZiBhIHBpY2tsZSBvcGNvZGUgbmV2ZXIgY2hhbmdlcy4gIEluc3RlYWQgbmV3Ci1waWNrbGUgb3Bjb2RlcyBnZXQgYWRkZWQsIGFuZCBlYWNoIHZlcnNpb24ncyB1bnBpY2tsZXIgY2FuIGhhbmRsZSBhbGwgdGhlCi1waWNrbGUgb3Bjb2RlcyBpbiBhbGwgcHJvdG9jb2wgdmVyc2lvbnMgdG8gZGF0ZS4gIFNvIG9sZCBwaWNrbGVzIGNvbnRpbnVlIHRvCi1iZSByZWFkYWJsZSBmb3JldmVyLiAgVGhlIHBpY2tsZXIgY2FuIGdlbmVyYWxseSBiZSB0b2xkIHRvIHJlc3RyaWN0IGl0c2VsZiB0bwotdGhlIHN1YnNldCBvZiBvcGNvZGVzIGF2YWlsYWJsZSB1bmRlciBwcmV2aW91cyBwcm90b2NvbCB2ZXJzaW9ucyB0b28sIHNvIHRoYXQKLXVzZXJzIGNhbiBjcmVhdGUgcGlja2xlcyB1bmRlciB0aGUgY3VycmVudCB2ZXJzaW9uIHJlYWRhYmxlIGJ5IG9sZGVyCi12ZXJzaW9ucy4gIEhvd2V2ZXIsIGEgcGlja2xlIGRvZXMgbm90IGNvbnRhaW4gaXRzIHZlcnNpb24gbnVtYmVyIGVtYmVkZGVkCi13aXRoaW4gaXQuICBJZiBhbiBvbGRlciB1bnBpY2tsZXIgdHJpZXMgdG8gcmVhZCBhIHBpY2tsZSB1c2luZyBhIGxhdGVyCi1wcm90b2NvbCwgdGhlIHJlc3VsdCBpcyBtb3N0IGxpa2VseSBhbiBleGNlcHRpb24gZHVlIHRvIHNlZWluZyBhbiB1bmtub3duIChpbgotdGhlIG9sZGVyIHVucGlja2xlcikgb3Bjb2RlLgotCi1UaGUgb3JpZ2luYWwgcGlja2xlIHVzZWQgd2hhdCdzIG5vdyBjYWxsZWQgInByb3RvY29sIDAiLCBhbmQgd2hhdCB3YXMgY2FsbGVkCi0idGV4dCBtb2RlIiBiZWZvcmUgUHl0aG9uIDIuMy4gIFRoZSBlbnRpcmUgcGlja2xlIGJ5dGVzdHJlYW0gaXMgbWFkZSB1cCBvZgotcHJpbnRhYmxlIDctYml0IEFTQ0lJIGNoYXJhY3RlcnMsIHBsdXMgdGhlIG5ld2xpbmUgY2hhcmFjdGVyLCBpbiBwcm90b2NvbCAwLgotVGhhdCdzIHdoeSBpdCB3YXMgY2FsbGVkIHRleHQgbW9kZS4gIFByb3RvY29sIDAgaXMgc21hbGwgYW5kIGVsZWdhbnQsIGJ1dAotc29tZXRpbWVzIHBhaW5mdWxseSBpbmVmZmljaWVudC4KLQotVGhlIHNlY29uZCBtYWpvciBzZXQgb2YgYWRkaXRpb25zIGlzIG5vdyBjYWxsZWQgInByb3RvY29sIDEiLCBhbmQgd2FzIGNhbGxlZAotImJpbmFyeSBtb2RlIiBiZWZvcmUgUHl0aG9uIDIuMy4gIFRoaXMgYWRkZWQgbWFueSBvcGNvZGVzIHdpdGggYXJndW1lbnRzCi1jb25zaXN0aW5nIG9mIGFyYml0cmFyeSBieXRlcywgaW5jbHVkaW5nIE5VTCBieXRlcyBhbmQgdW5wcmludGFibGUgImhpZ2ggYml0IgotYnl0ZXMuICBCaW5hcnkgbW9kZSBwaWNrbGVzIGNhbiBiZSBzdWJzdGFudGlhbGx5IHNtYWxsZXIgdGhhbiBlcXVpdmFsZW50Ci10ZXh0IG1vZGUgcGlja2xlcywgYW5kIHNvbWV0aW1lcyBmYXN0ZXIgdG9vOyBlLmcuLCBCSU5JTlQgcmVwcmVzZW50cyBhIDQtYnl0ZQotaW50IGFzIDQgYnl0ZXMgZm9sbG93aW5nIHRoZSBvcGNvZGUsIHdoaWNoIGlzIGNoZWFwZXIgdG8gdW5waWNrbGUgdGhhbiB0aGUKLShwZXJoYXBzKSAxMS1jaGFyYWN0ZXIgZGVjaW1hbCBzdHJpbmcgYXR0YWNoZWQgdG8gSU5ULiAgUHJvdG9jb2wgMSBhbHNvIGFkZGVkCi1hIG51bWJlciBvZiBvcGNvZGVzIHRoYXQgb3BlcmF0ZSBvbiBtYW55IHN0YWNrIGVsZW1lbnRzIGF0IG9uY2UgKGxpa2UgQVBQRU5EUwotYW5kIFNFVElURU1TKSwgYW5kICJzaG9ydGN1dCIgb3Bjb2RlcyAobGlrZSBFTVBUWV9ESUNUIGFuZCBFTVBUWV9UVVBMRSkuCi0KLVRoZSB0aGlyZCBtYWpvciBzZXQgb2YgYWRkaXRpb25zIGNhbWUgaW4gUHl0aG9uIDIuMywgYW5kIGlzIGNhbGxlZCAicHJvdG9jb2wKLTIiLiAgVGhpcyBhZGRlZDoKLQotLSBBIGJldHRlciB3YXkgdG8gcGlja2xlIGluc3RhbmNlcyBvZiBuZXctc3R5bGUgY2xhc3NlcyAoTkVXT0JKKS4KLQotLSBBIHdheSBmb3IgYSBwaWNrbGUgdG8gaWRlbnRpZnkgaXRzIHByb3RvY29sIChQUk9UTykuCi0KLS0gVGltZS0gYW5kIHNwYWNlLSBlZmZpY2llbnQgcGlja2xpbmcgb2YgbG9uZyBpbnRzIChMT05HezEsNH0pLgotCi0tIFNob3J0Y3V0cyBmb3Igc21hbGwgdHVwbGVzIChUVVBMRXsxLDIsM319LgotCi0tIERlZGljYXRlZCBvcGNvZGVzIGZvciBib29scyAoTkVXVFJVRSwgTkVXRkFMU0UpLgotCi0tIFRoZSAiZXh0ZW5zaW9uIHJlZ2lzdHJ5IiwgYSB2ZWN0b3Igb2YgcG9wdWxhciBvYmplY3RzIHRoYXQgY2FuIGJlIHB1c2hlZAotICBlZmZpY2llbnRseSBieSBpbmRleCAoRVhUezEsMiw0fSkuICBUaGlzIGlzIGFraW4gdG8gdGhlIG1lbW8gYW5kIEdFVCwgYnV0Ci0gIHRoZSByZWdpc3RyeSBjb250ZW50cyBhcmUgcHJlZGVmaW5lZCAodGhlcmUncyBub3RoaW5nIGFraW4gdG8gdGhlIG1lbW8ncwotICBQVVQpLgotCi1Bbm90aGVyIGluZGVwZW5kZW50IGNoYW5nZSB3aXRoIFB5dGhvbiAyLjMgaXMgdGhlIGFiYW5kb25tZW50IG9mIGFueQotcHJldGVuc2UgdGhhdCBpdCBtaWdodCBiZSBzYWZlIHRvIGxvYWQgcGlja2xlcyByZWNlaXZlZCBmcm9tIHVudHJ1c3RlZAotcGFydGllcyAtLSBubyBzdWZmaWNpZW50IHNlY3VyaXR5IGFuYWx5c2lzIGhhcyBiZWVuIGRvbmUgdG8gZ3VhcmFudGVlCi10aGlzIGFuZCB0aGVyZSBpc24ndCBhIHVzZSBjYXNlIHRoYXQgd2FycmFudHMgdGhlIGV4cGVuc2Ugb2Ygc3VjaCBhbgotYW5hbHlzaXMuCi0KLVRvIHRoaXMgZW5kLCBhbGwgdGVzdHMgZm9yIF9fc2FmZV9mb3JfdW5waWNrbGluZ19fIG9yIGZvcgotY29weXJlZy5zYWZlX2NvbnN0cnVjdG9ycyBhcmUgcmVtb3ZlZCBmcm9tIHRoZSB1bnBpY2tsaW5nIGNvZGUuCi1SZWZlcmVuY2VzIHRvIHRoZXNlIHZhcmlhYmxlcyBpbiB0aGUgZGVzY3JpcHRpb25zIGJlbG93IGFyZSB0byBiZSBzZWVuCi1hcyBkZXNjcmliaW5nIHVucGlja2xpbmcgaW4gUHl0aG9uIDIuMiBhbmQgYmVmb3JlLgotIiIiCiAKICMgTWV0YS1ydWxlOiAgRGVzY3JpcHRpb25zIGFyZSBzdG9yZWQgaW4gaW5zdGFuY2VzIG9mIGRlc2NyaXB0b3Igb2JqZWN0cywKICMgd2l0aCBwbGFpbiBjb25zdHJ1Y3RvcnMuICBObyBtZXRhLWxhbmd1YWdlIGlzIGRlZmluZWQgZnJvbSB3aGljaApAQCAtMTY5LDYgKzE2OSw3IEBACiBUQUtFTl9GUk9NX0FSR1VNRU5UMSAgPSAtMiAgICMgbnVtIGJ5dGVzIGlzIDEtYnl0ZSB1bnNpZ25lZCBpbnQKIFRBS0VOX0ZST01fQVJHVU1FTlQ0ICA9IC0zICAgIyBudW0gYnl0ZXMgaXMgNC1ieXRlIHNpZ25lZCBsaXR0bGUtZW5kaWFuIGludAogVEFLRU5fRlJPTV9BUkdVTUVOVDRVID0gLTQgICAjIG51bSBieXRlcyBpcyA0LWJ5dGUgdW5zaWduZWQgbGl0dGxlLWVuZGlhbiBpbnQKK1RBS0VOX0ZST01fQVJHVU1FTlQ4VSA9IC01ICAgIyBudW0gYnl0ZXMgaXMgOC1ieXRlIHVuc2lnbmVkIGxpdHRsZS1lbmRpYW4gaW50CiAKIGNsYXNzIEFyZ3VtZW50RGVzY3JpcHRvcihvYmplY3QpOgogICAgIF9fc2xvdHNfXyA9ICgKQEAgLTE3Niw3ICsxNzcsNyBAQAogICAgICAgICAnbmFtZScsCiAKICAgICAgICAgIyBsZW5ndGggb2YgYXJndW1lbnQsIGluIGJ5dGVzOyBhbiBpbnQ7IFVQX1RPX05FV0xJTkUgYW5kCi0gICAgICAgICMgVEFLRU5fRlJPTV9BUkdVTUVOVHsxLDR9IGFyZSBuZWdhdGl2ZSB2YWx1ZXMgZm9yIHZhcmlhYmxlLWxlbmd0aAorICAgICAgICAjIFRBS0VOX0ZST01fQVJHVU1FTlR7MSw0LDh9IGFyZSBuZWdhdGl2ZSB2YWx1ZXMgZm9yIHZhcmlhYmxlLWxlbmd0aAogICAgICAgICAjIGNhc2VzCiAgICAgICAgICduJywKIApAQCAtMTk3LDcgKzE5OCw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuIGluIChVUF9UT19ORVdMSU5FLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEFLRU5fRlJPTV9BUkdVTUVOVDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQUtFTl9GUk9NX0FSR1VNRU5UNCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRBS0VOX0ZST01fQVJHVU1FTlQ0VSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQUtFTl9GUk9NX0FSR1VNRU5UNFUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQUtFTl9GUk9NX0FSR1VNRU5UOFUpKQogICAgICAgICBzZWxmLm4gPSBuCiAKICAgICAgICAgc2VsZi5yZWFkZXIgPSByZWFkZXIKQEAgLTI4OSw2ICsyOTEsMjcgQEAKICAgICAgICAgICAgIGRvYz0iRm91ci1ieXRlIHVuc2lnbmVkIGludGVnZXIsIGxpdHRsZS1lbmRpYW4uIikKIAogCitkZWYgcmVhZF91aW50OChmKToKKyAgICByIiIiCisgICAgPj4+IGltcG9ydCBpbworICAgID4+PiByZWFkX3VpbnQ4KGlvLkJ5dGVzSU8oYidceGZmXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCcpKQorICAgIDI1NQorICAgID4+PiByZWFkX3VpbnQ4KGlvLkJ5dGVzSU8oYidceGZmJyAqIDgpKSA9PSAyKio2NC0xCisgICAgVHJ1ZQorICAgICIiIgorCisgICAgZGF0YSA9IGYucmVhZCg4KQorICAgIGlmIGxlbihkYXRhKSA9PSA4OgorICAgICAgICByZXR1cm4gX3VucGFjaygiPFEiLCBkYXRhKVswXQorICAgIHJhaXNlIFZhbHVlRXJyb3IoIm5vdCBlbm91Z2ggZGF0YSBpbiBzdHJlYW0gdG8gcmVhZCB1aW50OCIpCisKK3VpbnQ4ID0gQXJndW1lbnREZXNjcmlwdG9yKAorICAgICAgICAgICAgbmFtZT0ndWludDgnLAorICAgICAgICAgICAgbj04LAorICAgICAgICAgICAgcmVhZGVyPXJlYWRfdWludDgsCisgICAgICAgICAgICBkb2M9IkVpZ2h0LWJ5dGUgdW5zaWduZWQgaW50ZWdlciwgbGl0dGxlLWVuZGlhbi4iKQorCisKIGRlZiByZWFkX3N0cmluZ25sKGYsIGRlY29kZT1UcnVlLCBzdHJpcHF1b3Rlcz1UcnVlKToKICAgICByIiIiCiAgICAgPj4+IGltcG9ydCBpbwpAQCAtMzgyLDYgKzQwNSwzNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIHNpbmdsZSBibGFuayBzZXBhcmF0aW5nIHRoZSB0d28gc3RyaW5ncy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIiKQogCisKK2RlZiByZWFkX3N0cmluZzEoZik6CisgICAgciIiIgorICAgID4+PiBpbXBvcnQgaW8KKyAgICA+Pj4gcmVhZF9zdHJpbmcxKGlvLkJ5dGVzSU8oYiJceDAwIikpCisgICAgJycKKyAgICA+Pj4gcmVhZF9zdHJpbmcxKGlvLkJ5dGVzSU8oYiJceDAzYWJjZGVmIikpCisgICAgJ2FiYycKKyAgICAiIiIKKworICAgIG4gPSByZWFkX3VpbnQxKGYpCisgICAgYXNzZXJ0IG4gPj0gMAorICAgIGRhdGEgPSBmLnJlYWQobikKKyAgICBpZiBsZW4oZGF0YSkgPT0gbjoKKyAgICAgICAgcmV0dXJuIGRhdGEuZGVjb2RlKCJsYXRpbi0xIikKKyAgICByYWlzZSBWYWx1ZUVycm9yKCJleHBlY3RlZCAlZCBieXRlcyBpbiBhIHN0cmluZzEsIGJ1dCBvbmx5ICVkIHJlbWFpbiIgJQorICAgICAgICAgICAgICAgICAgICAgKG4sIGxlbihkYXRhKSkpCisKK3N0cmluZzEgPSBBcmd1bWVudERlc2NyaXB0b3IoCisgICAgICAgICAgICAgIG5hbWU9InN0cmluZzEiLAorICAgICAgICAgICAgICBuPVRBS0VOX0ZST01fQVJHVU1FTlQxLAorICAgICAgICAgICAgICByZWFkZXI9cmVhZF9zdHJpbmcxLAorICAgICAgICAgICAgICBkb2M9IiIiQSBjb3VudGVkIHN0cmluZy4KKworICAgICAgICAgICAgICBUaGUgZmlyc3QgYXJndW1lbnQgaXMgYSAxLWJ5dGUgdW5zaWduZWQgaW50IGdpdmluZyB0aGUgbnVtYmVyCisgICAgICAgICAgICAgIG9mIGJ5dGVzIGluIHRoZSBzdHJpbmcsIGFuZCB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzIHRoYXQgbWFueQorICAgICAgICAgICAgICBieXRlcy4KKyAgICAgICAgICAgICAgIiIiKQorCisKIGRlZiByZWFkX3N0cmluZzQoZik6CiAgICAgciIiIgogICAgID4+PiBpbXBvcnQgaW8KQEAgLTQxNiwyOCArNDY5LDI4IEBACiAgICAgICAgICAgICAgICIiIikKIAogCi1kZWYgcmVhZF9zdHJpbmcxKGYpOgorZGVmIHJlYWRfYnl0ZXMxKGYpOgogICAgIHIiIiIKICAgICA+Pj4gaW1wb3J0IGlvCi0gICAgPj4+IHJlYWRfc3RyaW5nMShpby5CeXRlc0lPKGIiXHgwMCIpKQotICAgICcnCi0gICAgPj4+IHJlYWRfc3RyaW5nMShpby5CeXRlc0lPKGIiXHgwM2FiY2RlZiIpKQotICAgICdhYmMnCisgICAgPj4+IHJlYWRfYnl0ZXMxKGlvLkJ5dGVzSU8oYiJceDAwIikpCisgICAgYicnCisgICAgPj4+IHJlYWRfYnl0ZXMxKGlvLkJ5dGVzSU8oYiJceDAzYWJjZGVmIikpCisgICAgYidhYmMnCiAgICAgIiIiCiAKICAgICBuID0gcmVhZF91aW50MShmKQogICAgIGFzc2VydCBuID49IDAKICAgICBkYXRhID0gZi5yZWFkKG4pCiAgICAgaWYgbGVuKGRhdGEpID09IG46Ci0gICAgICAgIHJldHVybiBkYXRhLmRlY29kZSgibGF0aW4tMSIpCi0gICAgcmFpc2UgVmFsdWVFcnJvcigiZXhwZWN0ZWQgJWQgYnl0ZXMgaW4gYSBzdHJpbmcxLCBidXQgb25seSAlZCByZW1haW4iICUKKyAgICAgICAgcmV0dXJuIGRhdGEKKyAgICByYWlzZSBWYWx1ZUVycm9yKCJleHBlY3RlZCAlZCBieXRlcyBpbiBhIGJ5dGVzMSwgYnV0IG9ubHkgJWQgcmVtYWluIiAlCiAgICAgICAgICAgICAgICAgICAgICAobiwgbGVuKGRhdGEpKSkKIAotc3RyaW5nMSA9IEFyZ3VtZW50RGVzY3JpcHRvcigKLSAgICAgICAgICAgICAgbmFtZT0ic3RyaW5nMSIsCitieXRlczEgPSBBcmd1bWVudERlc2NyaXB0b3IoCisgICAgICAgICAgICAgIG5hbWU9ImJ5dGVzMSIsCiAgICAgICAgICAgICAgIG49VEFLRU5fRlJPTV9BUkdVTUVOVDEsCi0gICAgICAgICAgICAgIHJlYWRlcj1yZWFkX3N0cmluZzEsCi0gICAgICAgICAgICAgIGRvYz0iIiJBIGNvdW50ZWQgc3RyaW5nLgorICAgICAgICAgICAgICByZWFkZXI9cmVhZF9ieXRlczEsCisgICAgICAgICAgICAgIGRvYz0iIiJBIGNvdW50ZWQgYnl0ZXMgc3RyaW5nLgogCiAgICAgICAgICAgICAgIFRoZSBmaXJzdCBhcmd1bWVudCBpcyBhIDEtYnl0ZSB1bnNpZ25lZCBpbnQgZ2l2aW5nIHRoZSBudW1iZXIKICAgICAgICAgICAgICAgb2YgYnl0ZXMgaW4gdGhlIHN0cmluZywgYW5kIHRoZSBzZWNvbmQgYXJndW1lbnQgaXMgdGhhdCBtYW55CkBAIC00ODcsNiArNTQwLDcgQEAKICAgICAiIiIKIAogICAgIG4gPSByZWFkX3VpbnQ0KGYpCisgICAgYXNzZXJ0IG4gPj0gMAogICAgIGlmIG4gPiBzeXMubWF4c2l6ZToKICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiYnl0ZXM0IGJ5dGUgY291bnQgPiBzeXMubWF4c2l6ZTogJWQiICUgbikKICAgICBkYXRhID0gZi5yZWFkKG4pCkBAIC01MDYsNiArNTYwLDQwIEBACiAgICAgICAgICAgICAgICIiIikKIAogCitkZWYgcmVhZF9ieXRlczgoZik6CisgICAgciIiIgorICAgID4+PiBpbXBvcnQgaW8sIHN0cnVjdCwgc3lzCisgICAgPj4+IHJlYWRfYnl0ZXM4KGlvLkJ5dGVzSU8oYiJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMGFiYyIpKQorICAgIGInJworICAgID4+PiByZWFkX2J5dGVzOChpby5CeXRlc0lPKGIiXHgwM1x4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBhYmNkZWYiKSkKKyAgICBiJ2FiYycKKyAgICA+Pj4gYmlnc2l6ZTggPSBzdHJ1Y3QucGFjaygiPFEiLCBzeXMubWF4c2l6ZS8vMykKKyAgICA+Pj4gcmVhZF9ieXRlczgoaW8uQnl0ZXNJTyhiaWdzaXplOCArIGIiYWJjZGVmIikpICAjZG9jdGVzdDogK0VMTElQU0lTCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgIC4uLgorICAgIFZhbHVlRXJyb3I6IGV4cGVjdGVkIC4uLiBieXRlcyBpbiBhIGJ5dGVzOCwgYnV0IG9ubHkgNiByZW1haW4KKyAgICAiIiIKKworICAgIG4gPSByZWFkX3VpbnQ4KGYpCisgICAgYXNzZXJ0IG4gPj0gMAorICAgIGlmIG4gPiBzeXMubWF4c2l6ZToKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiYnl0ZXM4IGJ5dGUgY291bnQgPiBzeXMubWF4c2l6ZTogJWQiICUgbikKKyAgICBkYXRhID0gZi5yZWFkKG4pCisgICAgaWYgbGVuKGRhdGEpID09IG46CisgICAgICAgIHJldHVybiBkYXRhCisgICAgcmFpc2UgVmFsdWVFcnJvcigiZXhwZWN0ZWQgJWQgYnl0ZXMgaW4gYSBieXRlczgsIGJ1dCBvbmx5ICVkIHJlbWFpbiIgJQorICAgICAgICAgICAgICAgICAgICAgKG4sIGxlbihkYXRhKSkpCisKK2J5dGVzOCA9IEFyZ3VtZW50RGVzY3JpcHRvcigKKyAgICAgICAgICAgICAgbmFtZT0iYnl0ZXM4IiwKKyAgICAgICAgICAgICAgbj1UQUtFTl9GUk9NX0FSR1VNRU5UOFUsCisgICAgICAgICAgICAgIHJlYWRlcj1yZWFkX2J5dGVzOCwKKyAgICAgICAgICAgICAgZG9jPSIiIkEgY291bnRlZCBieXRlcyBzdHJpbmcuCisKKyAgICAgICAgICAgICAgVGhlIGZpcnN0IGFyZ3VtZW50IGlzIGEgOC1ieXRlIGxpdHRsZS1lbmRpYW4gdW5zaWduZWQgaW50IGdpdmluZworICAgICAgICAgICAgICB0aGUgbnVtYmVyIG9mIGJ5dGVzLCBhbmQgdGhlIHNlY29uZCBhcmd1bWVudCBpcyB0aGF0IG1hbnkgYnl0ZXMuCisgICAgICAgICAgICAgICIiIikKKwogZGVmIHJlYWRfdW5pY29kZXN0cmluZ25sKGYpOgogICAgIHIiIiIKICAgICA+Pj4gaW1wb3J0IGlvCkBAIC01MzEsNiArNjE5LDQ2IEBACiAgICAgICAgICAgICAgICAgICAgICAgZXNjYXBlIHNlcXVlbmNlcy4KICAgICAgICAgICAgICAgICAgICAgICAiIiIpCiAKKworZGVmIHJlYWRfdW5pY29kZXN0cmluZzEoZik6CisgICAgciIiIgorICAgID4+PiBpbXBvcnQgaW8KKyAgICA+Pj4gcyA9ICdhYmNkXHVhYmNkJworICAgID4+PiBlbmMgPSBzLmVuY29kZSgndXRmLTgnKQorICAgID4+PiBlbmMKKyAgICBiJ2FiY2RceGVhXHhhZlx4OGQnCisgICAgPj4+IG4gPSBieXRlcyhbbGVuKGVuYyldKSAgIyBsaXR0bGUtZW5kaWFuIDEtYnl0ZSBsZW5ndGgKKyAgICA+Pj4gdCA9IHJlYWRfdW5pY29kZXN0cmluZzEoaW8uQnl0ZXNJTyhuICsgZW5jICsgYidqdW5rJykpCisgICAgPj4+IHMgPT0gdAorICAgIFRydWUKKworICAgID4+PiByZWFkX3VuaWNvZGVzdHJpbmcxKGlvLkJ5dGVzSU8obiArIGVuY1s6LTFdKSkKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgLi4uCisgICAgVmFsdWVFcnJvcjogZXhwZWN0ZWQgNyBieXRlcyBpbiBhIHVuaWNvZGVzdHJpbmcxLCBidXQgb25seSA2IHJlbWFpbgorICAgICIiIgorCisgICAgbiA9IHJlYWRfdWludDEoZikKKyAgICBhc3NlcnQgbiA+PSAwCisgICAgZGF0YSA9IGYucmVhZChuKQorICAgIGlmIGxlbihkYXRhKSA9PSBuOgorICAgICAgICByZXR1cm4gc3RyKGRhdGEsICd1dGYtOCcsICdzdXJyb2dhdGVwYXNzJykKKyAgICByYWlzZSBWYWx1ZUVycm9yKCJleHBlY3RlZCAlZCBieXRlcyBpbiBhIHVuaWNvZGVzdHJpbmcxLCBidXQgb25seSAlZCAiCisgICAgICAgICAgICAgICAgICAgICAicmVtYWluIiAlIChuLCBsZW4oZGF0YSkpKQorCit1bmljb2Rlc3RyaW5nMSA9IEFyZ3VtZW50RGVzY3JpcHRvcigKKyAgICAgICAgICAgICAgICAgICAgbmFtZT0idW5pY29kZXN0cmluZzEiLAorICAgICAgICAgICAgICAgICAgICBuPVRBS0VOX0ZST01fQVJHVU1FTlQxLAorICAgICAgICAgICAgICAgICAgICByZWFkZXI9cmVhZF91bmljb2Rlc3RyaW5nMSwKKyAgICAgICAgICAgICAgICAgICAgZG9jPSIiIkEgY291bnRlZCBVbmljb2RlIHN0cmluZy4KKworICAgICAgICAgICAgICAgICAgICBUaGUgZmlyc3QgYXJndW1lbnQgaXMgYSAxLWJ5dGUgbGl0dGxlLWVuZGlhbiBzaWduZWQgaW50CisgICAgICAgICAgICAgICAgICAgIGdpdmluZyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBzdHJpbmcsIGFuZCB0aGUgc2Vjb25kCisgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50LS0gdGhlIFVURi04IGVuY29kaW5nIG9mIHRoZSBVbmljb2RlIHN0cmluZyAtLQorICAgICAgICAgICAgICAgICAgICBjb250YWlucyB0aGF0IG1hbnkgYnl0ZXMuCisgICAgICAgICAgICAgICAgICAgICIiIikKKworCiBkZWYgcmVhZF91bmljb2Rlc3RyaW5nNChmKToKICAgICByIiIiCiAgICAgPj4+IGltcG9ydCBpbwpAQCAtNTUwLDYgKzY3OCw3IEBACiAgICAgIiIiCiAKICAgICBuID0gcmVhZF91aW50NChmKQorICAgIGFzc2VydCBuID49IDAKICAgICBpZiBuID4gc3lzLm1heHNpemU6CiAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInVuaWNvZGVzdHJpbmc0IGJ5dGUgY291bnQgPiBzeXMubWF4c2l6ZTogJWQiICUgbikKICAgICBkYXRhID0gZi5yZWFkKG4pCkBAIC01NzEsNiArNzAwLDQ3IEBACiAgICAgICAgICAgICAgICAgICAgICIiIikKIAogCitkZWYgcmVhZF91bmljb2Rlc3RyaW5nOChmKToKKyAgICByIiIiCisgICAgPj4+IGltcG9ydCBpbworICAgID4+PiBzID0gJ2FiY2RcdWFiY2QnCisgICAgPj4+IGVuYyA9IHMuZW5jb2RlKCd1dGYtOCcpCisgICAgPj4+IGVuYworICAgIGInYWJjZFx4ZWFceGFmXHg4ZCcKKyAgICA+Pj4gbiA9IGJ5dGVzKFtsZW4oZW5jKV0pICsgYnl0ZXMoNykgICMgbGl0dGxlLWVuZGlhbiA4LWJ5dGUgbGVuZ3RoCisgICAgPj4+IHQgPSByZWFkX3VuaWNvZGVzdHJpbmc4KGlvLkJ5dGVzSU8obiArIGVuYyArIGInanVuaycpKQorICAgID4+PiBzID09IHQKKyAgICBUcnVlCisKKyAgICA+Pj4gcmVhZF91bmljb2Rlc3RyaW5nOChpby5CeXRlc0lPKG4gKyBlbmNbOi0xXSkpCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgIC4uLgorICAgIFZhbHVlRXJyb3I6IGV4cGVjdGVkIDcgYnl0ZXMgaW4gYSB1bmljb2Rlc3RyaW5nOCwgYnV0IG9ubHkgNiByZW1haW4KKyAgICAiIiIKKworICAgIG4gPSByZWFkX3VpbnQ4KGYpCisgICAgYXNzZXJ0IG4gPj0gMAorICAgIGlmIG4gPiBzeXMubWF4c2l6ZToKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigidW5pY29kZXN0cmluZzggYnl0ZSBjb3VudCA+IHN5cy5tYXhzaXplOiAlZCIgJSBuKQorICAgIGRhdGEgPSBmLnJlYWQobikKKyAgICBpZiBsZW4oZGF0YSkgPT0gbjoKKyAgICAgICAgcmV0dXJuIHN0cihkYXRhLCAndXRmLTgnLCAnc3Vycm9nYXRlcGFzcycpCisgICAgcmFpc2UgVmFsdWVFcnJvcigiZXhwZWN0ZWQgJWQgYnl0ZXMgaW4gYSB1bmljb2Rlc3RyaW5nOCwgYnV0IG9ubHkgJWQgIgorICAgICAgICAgICAgICAgICAgICAgInJlbWFpbiIgJSAobiwgbGVuKGRhdGEpKSkKKwordW5pY29kZXN0cmluZzggPSBBcmd1bWVudERlc2NyaXB0b3IoCisgICAgICAgICAgICAgICAgICAgIG5hbWU9InVuaWNvZGVzdHJpbmc4IiwKKyAgICAgICAgICAgICAgICAgICAgbj1UQUtFTl9GUk9NX0FSR1VNRU5UOFUsCisgICAgICAgICAgICAgICAgICAgIHJlYWRlcj1yZWFkX3VuaWNvZGVzdHJpbmc4LAorICAgICAgICAgICAgICAgICAgICBkb2M9IiIiQSBjb3VudGVkIFVuaWNvZGUgc3RyaW5nLgorCisgICAgICAgICAgICAgICAgICAgIFRoZSBmaXJzdCBhcmd1bWVudCBpcyBhIDgtYnl0ZSBsaXR0bGUtZW5kaWFuIHNpZ25lZCBpbnQKKyAgICAgICAgICAgICAgICAgICAgZ2l2aW5nIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIHN0cmluZywgYW5kIHRoZSBzZWNvbmQKKyAgICAgICAgICAgICAgICAgICAgYXJndW1lbnQtLSB0aGUgVVRGLTggZW5jb2Rpbmcgb2YgdGhlIFVuaWNvZGUgc3RyaW5nIC0tCisgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zIHRoYXQgbWFueSBieXRlcy4KKyAgICAgICAgICAgICAgICAgICAgIiIiKQorCisKIGRlZiByZWFkX2RlY2ltYWxubF9zaG9ydChmKToKICAgICByIiIiCiAgICAgPj4+IGltcG9ydCBpbwpAQCAtNzk5LDEwMyArOTY5LDEwNyBAQAogICAgICAgICByZXR1cm4gc2VsZi5uYW1lCiAKIAotcHlpbnQgPSBTdGFja09iamVjdCgKLSAgICAgICAgICAgIG5hbWU9J2ludCcsCi0gICAgICAgICAgICBvYnR5cGU9aW50LAotICAgICAgICAgICAgZG9jPSJBIHNob3J0IChhcyBvcHBvc2VkIHRvIGxvbmcpIFB5dGhvbiBpbnRlZ2VyIG9iamVjdC4iKQotCi1weWxvbmcgPSBTdGFja09iamVjdCgKLSAgICAgICAgICAgICBuYW1lPSdsb25nJywKLSAgICAgICAgICAgICBvYnR5cGU9aW50LAotICAgICAgICAgICAgIGRvYz0iQSBsb25nIChhcyBvcHBvc2VkIHRvIHNob3J0KSBQeXRob24gaW50ZWdlciBvYmplY3QuIikKK3B5aW50ID0gcHlsb25nID0gU3RhY2tPYmplY3QoCisgICAgbmFtZT0naW50JywKKyAgICBvYnR5cGU9aW50LAorICAgIGRvYz0iQSBQeXRob24gaW50ZWdlciBvYmplY3QuIikKIAogcHlpbnRlZ2VyX29yX2Jvb2wgPSBTdGFja09iamVjdCgKLSAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9J2ludF9vcl9ib29sJywKLSAgICAgICAgICAgICAgICAgICAgICAgIG9idHlwZT0oaW50LCBib29sKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGRvYz0iQSBQeXRob24gaW50ZWdlciBvYmplY3QgKHNob3J0IG9yIGxvbmcpLCBvciAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImEgUHl0aG9uIGJvb2wuIikKKyAgICBuYW1lPSdpbnRfb3JfYm9vbCcsCisgICAgb2J0eXBlPShpbnQsIGJvb2wpLAorICAgIGRvYz0iQSBQeXRob24gaW50ZWdlciBvciBib29sZWFuIG9iamVjdC4iKQogCiBweWJvb2wgPSBTdGFja09iamVjdCgKLSAgICAgICAgICAgICBuYW1lPSdib29sJywKLSAgICAgICAgICAgICBvYnR5cGU9KGJvb2wsKSwKLSAgICAgICAgICAgICBkb2M9IkEgUHl0aG9uIGJvb2wgb2JqZWN0LiIpCisgICAgbmFtZT0nYm9vbCcsCisgICAgb2J0eXBlPWJvb2wsCisgICAgZG9jPSJBIFB5dGhvbiBib29sZWFuIG9iamVjdC4iKQogCiBweWZsb2F0ID0gU3RhY2tPYmplY3QoCi0gICAgICAgICAgICAgIG5hbWU9J2Zsb2F0JywKLSAgICAgICAgICAgICAgb2J0eXBlPWZsb2F0LAotICAgICAgICAgICAgICBkb2M9IkEgUHl0aG9uIGZsb2F0IG9iamVjdC4iKQorICAgIG5hbWU9J2Zsb2F0JywKKyAgICBvYnR5cGU9ZmxvYXQsCisgICAgZG9jPSJBIFB5dGhvbiBmbG9hdCBvYmplY3QuIikKIAotcHlzdHJpbmcgPSBTdGFja09iamVjdCgKLSAgICAgICAgICAgICAgIG5hbWU9J3N0cmluZycsCi0gICAgICAgICAgICAgICBvYnR5cGU9Ynl0ZXMsCi0gICAgICAgICAgICAgICBkb2M9IkEgUHl0aG9uICg4LWJpdCkgc3RyaW5nIG9iamVjdC4iKQorcHlieXRlc19vcl9zdHIgPSBweXN0cmluZyA9IFN0YWNrT2JqZWN0KAorICAgIG5hbWU9J2J5dGVzX29yX3N0cicsCisgICAgb2J0eXBlPShieXRlcywgc3RyKSwKKyAgICBkb2M9IkEgUHl0aG9uIGJ5dGVzIG9yIChVbmljb2RlKSBzdHJpbmcgb2JqZWN0LiIpCiAKIHB5Ynl0ZXMgPSBTdGFja09iamVjdCgKLSAgICAgICAgICAgICAgIG5hbWU9J2J5dGVzJywKLSAgICAgICAgICAgICAgIG9idHlwZT1ieXRlcywKLSAgICAgICAgICAgICAgIGRvYz0iQSBQeXRob24gYnl0ZXMgb2JqZWN0LiIpCisgICAgbmFtZT0nYnl0ZXMnLAorICAgIG9idHlwZT1ieXRlcywKKyAgICBkb2M9IkEgUHl0aG9uIGJ5dGVzIG9iamVjdC4iKQogCiBweXVuaWNvZGUgPSBTdGFja09iamVjdCgKLSAgICAgICAgICAgICAgICBuYW1lPSdzdHInLAotICAgICAgICAgICAgICAgIG9idHlwZT1zdHIsCi0gICAgICAgICAgICAgICAgZG9jPSJBIFB5dGhvbiAoVW5pY29kZSkgc3RyaW5nIG9iamVjdC4iKQorICAgIG5hbWU9J3N0cicsCisgICAgb2J0eXBlPXN0ciwKKyAgICBkb2M9IkEgUHl0aG9uIChVbmljb2RlKSBzdHJpbmcgb2JqZWN0LiIpCiAKIHB5bm9uZSA9IFN0YWNrT2JqZWN0KAotICAgICAgICAgICAgIG5hbWU9Ik5vbmUiLAotICAgICAgICAgICAgIG9idHlwZT10eXBlKE5vbmUpLAotICAgICAgICAgICAgIGRvYz0iVGhlIFB5dGhvbiBOb25lIG9iamVjdC4iKQorICAgIG5hbWU9Ik5vbmUiLAorICAgIG9idHlwZT10eXBlKE5vbmUpLAorICAgIGRvYz0iVGhlIFB5dGhvbiBOb25lIG9iamVjdC4iKQogCiBweXR1cGxlID0gU3RhY2tPYmplY3QoCi0gICAgICAgICAgICAgIG5hbWU9InR1cGxlIiwKLSAgICAgICAgICAgICAgb2J0eXBlPXR1cGxlLAotICAgICAgICAgICAgICBkb2M9IkEgUHl0aG9uIHR1cGxlIG9iamVjdC4iKQorICAgIG5hbWU9InR1cGxlIiwKKyAgICBvYnR5cGU9dHVwbGUsCisgICAgZG9jPSJBIFB5dGhvbiB0dXBsZSBvYmplY3QuIikKIAogcHlsaXN0ID0gU3RhY2tPYmplY3QoCi0gICAgICAgICAgICAgbmFtZT0ibGlzdCIsCi0gICAgICAgICAgICAgb2J0eXBlPWxpc3QsCi0gICAgICAgICAgICAgZG9jPSJBIFB5dGhvbiBsaXN0IG9iamVjdC4iKQorICAgIG5hbWU9Imxpc3QiLAorICAgIG9idHlwZT1saXN0LAorICAgIGRvYz0iQSBQeXRob24gbGlzdCBvYmplY3QuIikKIAogcHlkaWN0ID0gU3RhY2tPYmplY3QoCi0gICAgICAgICAgICAgbmFtZT0iZGljdCIsCi0gICAgICAgICAgICAgb2J0eXBlPWRpY3QsCi0gICAgICAgICAgICAgZG9jPSJBIFB5dGhvbiBkaWN0IG9iamVjdC4iKQorICAgIG5hbWU9ImRpY3QiLAorICAgIG9idHlwZT1kaWN0LAorICAgIGRvYz0iQSBQeXRob24gZGljdCBvYmplY3QuIikKKworcHlzZXQgPSBTdGFja09iamVjdCgKKyAgICBuYW1lPSJzZXQiLAorICAgIG9idHlwZT1zZXQsCisgICAgZG9jPSJBIFB5dGhvbiBzZXQgb2JqZWN0LiIpCisKK3B5ZnJvemVuc2V0ID0gU3RhY2tPYmplY3QoCisgICAgbmFtZT0iZnJvemVuc2V0IiwKKyAgICBvYnR5cGU9c2V0LAorICAgIGRvYz0iQSBQeXRob24gZnJvemVuc2V0IG9iamVjdC4iKQogCiBhbnlvYmplY3QgPSBTdGFja09iamVjdCgKLSAgICAgICAgICAgICAgICBuYW1lPSdhbnknLAotICAgICAgICAgICAgICAgIG9idHlwZT1vYmplY3QsCi0gICAgICAgICAgICAgICAgZG9jPSJBbnkga2luZCBvZiBvYmplY3Qgd2hhdHNvZXZlci4iKQorICAgIG5hbWU9J2FueScsCisgICAgb2J0eXBlPW9iamVjdCwKKyAgICBkb2M9IkFueSBraW5kIG9mIG9iamVjdCB3aGF0c29ldmVyLiIpCiAKIG1hcmtvYmplY3QgPSBTdGFja09iamVjdCgKLSAgICAgICAgICAgICAgICAgbmFtZT0ibWFyayIsCi0gICAgICAgICAgICAgICAgIG9idHlwZT1TdGFja09iamVjdCwKLSAgICAgICAgICAgICAgICAgZG9jPSIiIidUaGUgbWFyaycgaXMgYSB1bmlxdWUgb2JqZWN0LgorICAgIG5hbWU9Im1hcmsiLAorICAgIG9idHlwZT1TdGFja09iamVjdCwKKyAgICBkb2M9IiIiJ1RoZSBtYXJrJyBpcyBhIHVuaXF1ZSBvYmplY3QuCiAKLSAgICAgICAgICAgICAgICAgT3Bjb2RlcyB0aGF0IG9wZXJhdGUgb24gYSB2YXJpYWJsZSBudW1iZXIgb2Ygb2JqZWN0cwotICAgICAgICAgICAgICAgICBnZW5lcmFsbHkgZG9uJ3QgZW1iZWQgdGhlIGNvdW50IG9mIG9iamVjdHMgaW4gdGhlIG9wY29kZSwKLSAgICAgICAgICAgICAgICAgb3IgcHVsbCBpdCBvZmYgdGhlIHN0YWNrLiAgSW5zdGVhZCB0aGUgTUFSSyBvcGNvZGUgaXMgdXNlZAotICAgICAgICAgICAgICAgICB0byBwdXNoIGEgc3BlY2lhbCBtYXJrZXIgb2JqZWN0IG9uIHRoZSBzdGFjaywgYW5kIHRoZW4KLSAgICAgICAgICAgICAgICAgc29tZSBvdGhlciBvcGNvZGVzIGdyYWIgYWxsIHRoZSBvYmplY3RzIGZyb20gdGhlIHRvcCBvZgotICAgICAgICAgICAgICAgICB0aGUgc3RhY2sgZG93biB0byAoYnV0IG5vdCBpbmNsdWRpbmcpIHRoZSB0b3Btb3N0IG1hcmtlcgotICAgICAgICAgICAgICAgICBvYmplY3QuCi0gICAgICAgICAgICAgICAgICIiIikKK09wY29kZXMgdGhhdCBvcGVyYXRlIG9uIGEgdmFyaWFibGUgbnVtYmVyIG9mIG9iamVjdHMKK2dlbmVyYWxseSBkb24ndCBlbWJlZCB0aGUgY291bnQgb2Ygb2JqZWN0cyBpbiB0aGUgb3Bjb2RlLAorb3IgcHVsbCBpdCBvZmYgdGhlIHN0YWNrLiAgSW5zdGVhZCB0aGUgTUFSSyBvcGNvZGUgaXMgdXNlZAordG8gcHVzaCBhIHNwZWNpYWwgbWFya2VyIG9iamVjdCBvbiB0aGUgc3RhY2ssIGFuZCB0aGVuCitzb21lIG90aGVyIG9wY29kZXMgZ3JhYiBhbGwgdGhlIG9iamVjdHMgZnJvbSB0aGUgdG9wIG9mCit0aGUgc3RhY2sgZG93biB0byAoYnV0IG5vdCBpbmNsdWRpbmcpIHRoZSB0b3Btb3N0IG1hcmtlcgorb2JqZWN0LgorIiIiKQogCiBzdGFja3NsaWNlID0gU3RhY2tPYmplY3QoCi0gICAgICAgICAgICAgICAgIG5hbWU9InN0YWNrc2xpY2UiLAotICAgICAgICAgICAgICAgICBvYnR5cGU9U3RhY2tPYmplY3QsCi0gICAgICAgICAgICAgICAgIGRvYz0iIiJBbiBvYmplY3QgcmVwcmVzZW50aW5nIGEgY29udGlndW91cyBzbGljZSBvZiB0aGUgc3RhY2suCisgICAgbmFtZT0ic3RhY2tzbGljZSIsCisgICAgb2J0eXBlPVN0YWNrT2JqZWN0LAorICAgIGRvYz0iIiJBbiBvYmplY3QgcmVwcmVzZW50aW5nIGEgY29udGlndW91cyBzbGljZSBvZiB0aGUgc3RhY2suCiAKLSAgICAgICAgICAgICAgICAgVGhpcyBpcyB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggbWFya29iamVjdCwgdG8gcmVwcmVzZW50IGFsbAotICAgICAgICAgICAgICAgICBvZiB0aGUgc3RhY2sgZm9sbG93aW5nIHRoZSB0b3Btb3N0IG1hcmtvYmplY3QuICBGb3IgZXhhbXBsZSwKLSAgICAgICAgICAgICAgICAgdGhlIFBPUF9NQVJLIG9wY29kZSBjaGFuZ2VzIHRoZSBzdGFjayBmcm9tCitUaGlzIGlzIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBtYXJrb2JqZWN0LCB0byByZXByZXNlbnQgYWxsCitvZiB0aGUgc3RhY2sgZm9sbG93aW5nIHRoZSB0b3Btb3N0IG1hcmtvYmplY3QuICBGb3IgZXhhbXBsZSwKK3RoZSBQT1BfTUFSSyBvcGNvZGUgY2hhbmdlcyB0aGUgc3RhY2sgZnJvbQogCi0gICAgICAgICAgICAgICAgICAgICBbLi4uLCBtYXJrb2JqZWN0LCBzdGFja3NsaWNlXQotICAgICAgICAgICAgICAgICB0bwotICAgICAgICAgICAgICAgICAgICAgWy4uLl0KKyAgICBbLi4uLCBtYXJrb2JqZWN0LCBzdGFja3NsaWNlXQordG8KKyAgICBbLi4uXQogCi0gICAgICAgICAgICAgICAgIE5vIG1hdHRlciBob3cgbWFueSBvYmplY3QgYXJlIG9uIHRoZSBzdGFjayBhZnRlciB0aGUgdG9wbW9zdAotICAgICAgICAgICAgICAgICBtYXJrb2JqZWN0LCBQT1BfTUFSSyBnZXRzIHJpZCBvZiBhbGwgb2YgdGhlbSAoaW5jbHVkaW5nIHRoZQotICAgICAgICAgICAgICAgICB0b3Btb3N0IG1hcmtvYmplY3QgdG9vKS4KLSAgICAgICAgICAgICAgICAgIiIiKQorTm8gbWF0dGVyIGhvdyBtYW55IG9iamVjdCBhcmUgb24gdGhlIHN0YWNrIGFmdGVyIHRoZSB0b3Btb3N0CittYXJrb2JqZWN0LCBQT1BfTUFSSyBnZXRzIHJpZCBvZiBhbGwgb2YgdGhlbSAoaW5jbHVkaW5nIHRoZQordG9wbW9zdCBtYXJrb2JqZWN0IHRvbykuCisiIiIpCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBEZXNjcmlwdG9ycyBmb3IgcGlja2xlIG9wY29kZXMuCkBAIC0xMDMyLDcgKzEyMDYsNyBAQAogICAgICAgY29kZT0nTCcsCiAgICAgICBhcmc9ZGVjaW1hbG5sX2xvbmcsCiAgICAgICBzdGFja19iZWZvcmU9W10sCi0gICAgICBzdGFja19hZnRlcj1bcHlsb25nXSwKKyAgICAgIHN0YWNrX2FmdGVyPVtweWludF0sCiAgICAgICBwcm90bz0wLAogICAgICAgZG9jPSIiIlB1c2ggYSBsb25nIGludGVnZXIuCiAKQEAgLTEwNTAsNyArMTIyNCw3IEBACiAgICAgICBjb2RlPSdceDhhJywKICAgICAgIGFyZz1sb25nMSwKICAgICAgIHN0YWNrX2JlZm9yZT1bXSwKLSAgICAgIHN0YWNrX2FmdGVyPVtweWxvbmddLAorICAgICAgc3RhY2tfYWZ0ZXI9W3B5aW50XSwKICAgICAgIHByb3RvPTIsCiAgICAgICBkb2M9IiIiTG9uZyBpbnRlZ2VyIHVzaW5nIG9uZS1ieXRlIGxlbmd0aC4KIApAQCAtMTA2MSw3ICsxMjM1LDcgQEAKICAgICAgIGNvZGU9J1x4OGInLAogICAgICAgYXJnPWxvbmc0LAogICAgICAgc3RhY2tfYmVmb3JlPVtdLAotICAgICAgc3RhY2tfYWZ0ZXI9W3B5bG9uZ10sCisgICAgICBzdGFja19hZnRlcj1bcHlpbnRdLAogICAgICAgcHJvdG89MiwKICAgICAgIGRvYz0iIiJMb25nIGludGVnZXIgdXNpbmcgZm91bmQtYnl0ZSBsZW5ndGguCiAKQEAgLTEwNzQsNDUgKzEyNDgsNTAgQEAKICAgICAgIGNvZGU9J1MnLAogICAgICAgYXJnPXN0cmluZ25sLAogICAgICAgc3RhY2tfYmVmb3JlPVtdLAotICAgICAgc3RhY2tfYWZ0ZXI9W3B5c3RyaW5nXSwKKyAgICAgIHN0YWNrX2FmdGVyPVtweWJ5dGVzX29yX3N0cl0sCiAgICAgICBwcm90bz0wLAogICAgICAgZG9jPSIiIlB1c2ggYSBQeXRob24gc3RyaW5nIG9iamVjdC4KIAogICAgICAgVGhlIGFyZ3VtZW50IGlzIGEgcmVwci1zdHlsZSBzdHJpbmcsIHdpdGggYnJhY2tldGluZyBxdW90ZSBjaGFyYWN0ZXJzLAogICAgICAgYW5kIHBlcmhhcHMgZW1iZWRkZWQgZXNjYXBlcy4gIFRoZSBhcmd1bWVudCBleHRlbmRzIHVudGlsIHRoZSBuZXh0Ci0gICAgICBuZXdsaW5lIGNoYXJhY3Rlci4gIChBY3R1YWxseSwgdGhleSBhcmUgZGVjb2RlZCBpbnRvIGEgc3RyIGluc3RhbmNlCisgICAgICBuZXdsaW5lIGNoYXJhY3Rlci4gIFRoZXNlIGFyZSB1c3VhbGx5IGRlY29kZWQgaW50byBhIHN0ciBpbnN0YW5jZQogICAgICAgdXNpbmcgdGhlIGVuY29kaW5nIGdpdmVuIHRvIHRoZSBVbnBpY2tsZXIgY29uc3RydWN0b3IuIG9yIHRoZSBkZWZhdWx0LAotICAgICAgJ0FTQ0lJJy4pCisgICAgICAnQVNDSUknLiAgSWYgdGhlIGVuY29kaW5nIGdpdmVuIHdhcyAnYnl0ZXMnIGhvd2V2ZXIsIHRoZXkgd2lsbCBiZQorICAgICAgZGVjb2RlZCBhcyBieXRlcyBvYmplY3QgaW5zdGVhZC4KICAgICAgICIiIiksCiAKICAgICBJKG5hbWU9J0JJTlNUUklORycsCiAgICAgICBjb2RlPSdUJywKICAgICAgIGFyZz1zdHJpbmc0LAogICAgICAgc3RhY2tfYmVmb3JlPVtdLAotICAgICAgc3RhY2tfYWZ0ZXI9W3B5c3RyaW5nXSwKKyAgICAgIHN0YWNrX2FmdGVyPVtweWJ5dGVzX29yX3N0cl0sCiAgICAgICBwcm90bz0xLAogICAgICAgZG9jPSIiIlB1c2ggYSBQeXRob24gc3RyaW5nIG9iamVjdC4KIAotICAgICAgVGhlcmUgYXJlIHR3byBhcmd1bWVudHM6ICB0aGUgZmlyc3QgaXMgYSA0LWJ5dGUgbGl0dGxlLWVuZGlhbiBzaWduZWQgaW50Ci0gICAgICBnaXZpbmcgdGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgc3RyaW5nLCBhbmQgdGhlIHNlY29uZCBpcyB0aGF0IG1hbnkKLSAgICAgIGJ5dGVzLCB3aGljaCBhcmUgdGFrZW4gbGl0ZXJhbGx5IGFzIHRoZSBzdHJpbmcgY29udGVudC4gIChBY3R1YWxseSwKLSAgICAgIHRoZXkgYXJlIGRlY29kZWQgaW50byBhIHN0ciBpbnN0YW5jZSB1c2luZyB0aGUgZW5jb2RpbmcgZ2l2ZW4gdG8gdGhlCi0gICAgICBVbnBpY2tsZXIgY29uc3RydWN0b3IuIG9yIHRoZSBkZWZhdWx0LCAnQVNDSUknLikKKyAgICAgIFRoZXJlIGFyZSB0d28gYXJndW1lbnRzOiB0aGUgZmlyc3QgaXMgYSA0LWJ5dGUgbGl0dGxlLWVuZGlhbgorICAgICAgc2lnbmVkIGludCBnaXZpbmcgdGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgc3RyaW5nLCBhbmQgdGhlCisgICAgICBzZWNvbmQgaXMgdGhhdCBtYW55IGJ5dGVzLCB3aGljaCBhcmUgdGFrZW4gbGl0ZXJhbGx5IGFzIHRoZSBzdHJpbmcKKyAgICAgIGNvbnRlbnQuICBUaGVzZSBhcmUgdXN1YWxseSBkZWNvZGVkIGludG8gYSBzdHIgaW5zdGFuY2UgdXNpbmcgdGhlCisgICAgICBlbmNvZGluZyBnaXZlbiB0byB0aGUgVW5waWNrbGVyIGNvbnN0cnVjdG9yLiBvciB0aGUgZGVmYXVsdCwKKyAgICAgICdBU0NJSScuICBJZiB0aGUgZW5jb2RpbmcgZ2l2ZW4gd2FzICdieXRlcycgaG93ZXZlciwgdGhleSB3aWxsIGJlCisgICAgICBkZWNvZGVkIGFzIGJ5dGVzIG9iamVjdCBpbnN0ZWFkLgogICAgICAgIiIiKSwKIAogICAgIEkobmFtZT0nU0hPUlRfQklOU1RSSU5HJywKICAgICAgIGNvZGU9J1UnLAogICAgICAgYXJnPXN0cmluZzEsCiAgICAgICBzdGFja19iZWZvcmU9W10sCi0gICAgICBzdGFja19hZnRlcj1bcHlzdHJpbmddLAorICAgICAgc3RhY2tfYWZ0ZXI9W3B5Ynl0ZXNfb3Jfc3RyXSwKICAgICAgIHByb3RvPTEsCiAgICAgICBkb2M9IiIiUHVzaCBhIFB5dGhvbiBzdHJpbmcgb2JqZWN0LgogCi0gICAgICBUaGVyZSBhcmUgdHdvIGFyZ3VtZW50czogIHRoZSBmaXJzdCBpcyBhIDEtYnl0ZSB1bnNpZ25lZCBpbnQgZ2l2aW5nCi0gICAgICB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBzdHJpbmcsIGFuZCB0aGUgc2Vjb25kIGlzIHRoYXQgbWFueSBieXRlcywKLSAgICAgIHdoaWNoIGFyZSB0YWtlbiBsaXRlcmFsbHkgYXMgdGhlIHN0cmluZyBjb250ZW50LiAgKEFjdHVhbGx5LCB0aGV5Ci0gICAgICBhcmUgZGVjb2RlZCBpbnRvIGEgc3RyIGluc3RhbmNlIHVzaW5nIHRoZSBlbmNvZGluZyBnaXZlbiB0byB0aGUKLSAgICAgIFVucGlja2xlciBjb25zdHJ1Y3Rvci4gb3IgdGhlIGRlZmF1bHQsICdBU0NJSScuKQorICAgICAgVGhlcmUgYXJlIHR3byBhcmd1bWVudHM6IHRoZSBmaXJzdCBpcyBhIDEtYnl0ZSB1bnNpZ25lZCBpbnQgZ2l2aW5nCisgICAgICB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBzdHJpbmcsIGFuZCB0aGUgc2Vjb25kIGlzIHRoYXQgbWFueQorICAgICAgYnl0ZXMsIHdoaWNoIGFyZSB0YWtlbiBsaXRlcmFsbHkgYXMgdGhlIHN0cmluZyBjb250ZW50LiAgVGhlc2UgYXJlCisgICAgICB1c3VhbGx5IGRlY29kZWQgaW50byBhIHN0ciBpbnN0YW5jZSB1c2luZyB0aGUgZW5jb2RpbmcgZ2l2ZW4gdG8KKyAgICAgIHRoZSBVbnBpY2tsZXIgY29uc3RydWN0b3IuIG9yIHRoZSBkZWZhdWx0LCAnQVNDSUknLiAgSWYgdGhlCisgICAgICBlbmNvZGluZyBnaXZlbiB3YXMgJ2J5dGVzJyBob3dldmVyLCB0aGV5IHdpbGwgYmUgZGVjb2RlZCBhcyBieXRlcworICAgICAgb2JqZWN0IGluc3RlYWQuCiAgICAgICAiIiIpLAogCiAgICAgIyBCeXRlcyAocHJvdG9jb2wgMyBvbmx5OyBvbGRlciBwcm90b2NvbHMgZG9uJ3Qgc3VwcG9ydCBieXRlcyBhdCBhbGwpCkBAIC0xMTQzLDYgKzEzMjIsMTkgQEAKICAgICAgIGxpdGVyYWxseSBhcyB0aGUgc3RyaW5nIGNvbnRlbnQuCiAgICAgICAiIiIpLAogCisgICAgSShuYW1lPSdCSU5CWVRFUzgnLAorICAgICAgY29kZT0nXHg4ZScsCisgICAgICBhcmc9Ynl0ZXM4LAorICAgICAgc3RhY2tfYmVmb3JlPVtdLAorICAgICAgc3RhY2tfYWZ0ZXI9W3B5Ynl0ZXNdLAorICAgICAgcHJvdG89NCwKKyAgICAgIGRvYz0iIiJQdXNoIGEgUHl0aG9uIGJ5dGVzIG9iamVjdC4KKworICAgICAgVGhlcmUgYXJlIHR3byBhcmd1bWVudHM6ICB0aGUgZmlyc3QgaXMgYSA4LWJ5dGUgdW5zaWduZWQgaW50IGdpdmluZworICAgICAgdGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgc3RyaW5nLCBhbmQgdGhlIHNlY29uZCBpcyB0aGF0IG1hbnkgYnl0ZXMsCisgICAgICB3aGljaCBhcmUgdGFrZW4gbGl0ZXJhbGx5IGFzIHRoZSBzdHJpbmcgY29udGVudC4KKyAgICAgICIiIiksCisKICAgICAjIFdheXMgdG8gc3BlbGwgTm9uZS4KIAogICAgIEkobmFtZT0nTk9ORScsCkBAIC0xMTkxLDYgKzEzODMsMTkgQEAKICAgICAgIHVudGlsIHRoZSBuZXh0IG5ld2xpbmUgY2hhcmFjdGVyLgogICAgICAgIiIiKSwKIAorICAgIEkobmFtZT0nU0hPUlRfQklOVU5JQ09ERScsCisgICAgICBjb2RlPSdceDhjJywKKyAgICAgIGFyZz11bmljb2Rlc3RyaW5nMSwKKyAgICAgIHN0YWNrX2JlZm9yZT1bXSwKKyAgICAgIHN0YWNrX2FmdGVyPVtweXVuaWNvZGVdLAorICAgICAgcHJvdG89NCwKKyAgICAgIGRvYz0iIiJQdXNoIGEgUHl0aG9uIFVuaWNvZGUgc3RyaW5nIG9iamVjdC4KKworICAgICAgVGhlcmUgYXJlIHR3byBhcmd1bWVudHM6ICB0aGUgZmlyc3QgaXMgYSAxLWJ5dGUgbGl0dGxlLWVuZGlhbiBzaWduZWQgaW50CisgICAgICBnaXZpbmcgdGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgc3RyaW5nLiAgVGhlIHNlY29uZCBpcyB0aGF0IG1hbnkKKyAgICAgIGJ5dGVzLCBhbmQgaXMgdGhlIFVURi04IGVuY29kaW5nIG9mIHRoZSBVbmljb2RlIHN0cmluZy4KKyAgICAgICIiIiksCisKICAgICBJKG5hbWU9J0JJTlVOSUNPREUnLAogICAgICAgY29kZT0nWCcsCiAgICAgICBhcmc9dW5pY29kZXN0cmluZzQsCkBAIC0xMjA0LDYgKzE0MDksMTkgQEAKICAgICAgIGJ5dGVzLCBhbmQgaXMgdGhlIFVURi04IGVuY29kaW5nIG9mIHRoZSBVbmljb2RlIHN0cmluZy4KICAgICAgICIiIiksCiAKKyAgICBJKG5hbWU9J0JJTlVOSUNPREU4JywKKyAgICAgIGNvZGU9J1x4OGQnLAorICAgICAgYXJnPXVuaWNvZGVzdHJpbmc4LAorICAgICAgc3RhY2tfYmVmb3JlPVtdLAorICAgICAgc3RhY2tfYWZ0ZXI9W3B5dW5pY29kZV0sCisgICAgICBwcm90bz00LAorICAgICAgZG9jPSIiIlB1c2ggYSBQeXRob24gVW5pY29kZSBzdHJpbmcgb2JqZWN0LgorCisgICAgICBUaGVyZSBhcmUgdHdvIGFyZ3VtZW50czogIHRoZSBmaXJzdCBpcyBhIDgtYnl0ZSBsaXR0bGUtZW5kaWFuIHNpZ25lZCBpbnQKKyAgICAgIGdpdmluZyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBzdHJpbmcuICBUaGUgc2Vjb25kIGlzIHRoYXQgbWFueQorICAgICAgYnl0ZXMsIGFuZCBpcyB0aGUgVVRGLTggZW5jb2Rpbmcgb2YgdGhlIFVuaWNvZGUgc3RyaW5nLgorICAgICAgIiIiKSwKKwogICAgICMgV2F5cyB0byBzcGVsbCBmbG9hdHMuCiAKICAgICBJKG5hbWU9J0ZMT0FUJywKQEAgLTE0MjksNiArMTY0Nyw1NCBAQAogICAgICAgMSwgMiwgLi4uLCBuLCBhbmQgaW4gdGhhdCBvcmRlci4KICAgICAgICIiIiksCiAKKyAgICAjIFdheXMgdG8gYnVpbGQgc2V0cworCisgICAgSShuYW1lPSdFTVBUWV9TRVQnLAorICAgICAgY29kZT0nXHg4ZicsCisgICAgICBhcmc9Tm9uZSwKKyAgICAgIHN0YWNrX2JlZm9yZT1bXSwKKyAgICAgIHN0YWNrX2FmdGVyPVtweXNldF0sCisgICAgICBwcm90bz00LAorICAgICAgZG9jPSJQdXNoIGFuIGVtcHR5IHNldC4iKSwKKworICAgIEkobmFtZT0nQURESVRFTVMnLAorICAgICAgY29kZT0nXHg5MCcsCisgICAgICBhcmc9Tm9uZSwKKyAgICAgIHN0YWNrX2JlZm9yZT1bcHlzZXQsIG1hcmtvYmplY3QsIHN0YWNrc2xpY2VdLAorICAgICAgc3RhY2tfYWZ0ZXI9W3B5c2V0XSwKKyAgICAgIHByb3RvPTQsCisgICAgICBkb2M9IiIiQWRkIGFuIGFyYml0cmFyeSBudW1iZXIgb2YgaXRlbXMgdG8gYW4gZXhpc3Rpbmcgc2V0LgorCisgICAgICBUaGUgc2xpY2Ugb2YgdGhlIHN0YWNrIGZvbGxvd2luZyB0aGUgdG9wbW9zdCBtYXJrb2JqZWN0IGlzIHRha2VuIGFzCisgICAgICBhIHNlcXVlbmNlIG9mIGl0ZW1zLCBhZGRlZCB0byB0aGUgc2V0IGltbWVkaWF0ZWx5IHVuZGVyIHRoZSB0b3Btb3N0CisgICAgICBtYXJrb2JqZWN0LiAgRXZlcnl0aGluZyBhdCBhbmQgYWZ0ZXIgdGhlIHRvcG1vc3QgbWFya29iamVjdCBpcyBwb3BwZWQsCisgICAgICBsZWF2aW5nIHRoZSBtdXRhdGVkIHNldCBhdCB0aGUgdG9wIG9mIHRoZSBzdGFjay4KKworICAgICAgU3RhY2sgYmVmb3JlOiAgLi4uIHB5c2V0IG1hcmtvYmplY3QgaXRlbV8xIC4uLiBpdGVtX24KKyAgICAgIFN0YWNrIGFmdGVyOiAgIC4uLiBweXNldAorCisgICAgICB3aGVyZSBweXNldCBoYXMgYmVlbiBtb2RpZmllZCB2aWEgcHlzZXQuYWRkKGl0ZW1faSkgPSBpdGVtX2kgZm9yIGkgaW4KKyAgICAgIDEsIDIsIC4uLiwgbiwgYW5kIGluIHRoYXQgb3JkZXIuCisgICAgICAiIiIpLAorCisgICAgIyBXYXkgdG8gYnVpbGQgZnJvemVuc2V0cworCisgICAgSShuYW1lPSdGUk9aRU5TRVQnLAorICAgICAgY29kZT0nXHg5MScsCisgICAgICBhcmc9Tm9uZSwKKyAgICAgIHN0YWNrX2JlZm9yZT1bbWFya29iamVjdCwgc3RhY2tzbGljZV0sCisgICAgICBzdGFja19hZnRlcj1bcHlmcm96ZW5zZXRdLAorICAgICAgcHJvdG89NCwKKyAgICAgIGRvYz0iIiJCdWlsZCBhIGZyb3plbnNldCBvdXQgb2YgdGhlIHRvcG1vc3Qgc2xpY2UsIGFmdGVyIG1hcmtvYmplY3QuCisKKyAgICAgIEFsbCB0aGUgc3RhY2sgZW50cmllcyBmb2xsb3dpbmcgdGhlIHRvcG1vc3QgbWFya29iamVjdCBhcmUgcGxhY2VkIGludG8KKyAgICAgIGEgc2luZ2xlIFB5dGhvbiBmcm96ZW5zZXQsIHdoaWNoIHNpbmdsZSBmcm96ZW5zZXQgb2JqZWN0IHJlcGxhY2VzIGFsbAorICAgICAgb2YgdGhlIHN0YWNrIGZyb20gdGhlIHRvcG1vc3QgbWFya29iamVjdCBvbndhcmQuICBGb3IgZXhhbXBsZSwKKworICAgICAgU3RhY2sgYmVmb3JlOiAuLi4gbWFya29iamVjdCAxIDIgMworICAgICAgU3RhY2sgYWZ0ZXI6ICAuLi4gZnJvemVuc2V0KHsxLCAyLCAzfSkKKyAgICAgICIiIiksCisKICAgICAjIFN0YWNrIG1hbmlwdWxhdGlvbi4KIAogICAgIEkobmFtZT0nUE9QJywKQEAgLTE1NTAsNiArMTgxNiwxOCBAQAogICAgICAgdW5zaWduZWQgbGl0dGxlLWVuZGlhbiBpbnRlZ2VyIGZvbGxvd2luZy4KICAgICAgICIiIiksCiAKKyAgICBJKG5hbWU9J01FTU9JWkUnLAorICAgICAgY29kZT0nXHg5NCcsCisgICAgICBhcmc9Tm9uZSwKKyAgICAgIHN0YWNrX2JlZm9yZT1bYW55b2JqZWN0XSwKKyAgICAgIHN0YWNrX2FmdGVyPVthbnlvYmplY3RdLAorICAgICAgcHJvdG89NCwKKyAgICAgIGRvYz0iIiJTdG9yZSB0aGUgc3RhY2sgdG9wIGludG8gdGhlIG1lbW8uICBUaGUgc3RhY2sgaXMgbm90IHBvcHBlZC4KKworICAgICAgVGhlIGluZGV4IG9mIHRoZSBtZW1vIGxvY2F0aW9uIHRvIHdyaXRlIGlzIHRoZSBudW1iZXIgb2YKKyAgICAgIGVsZW1lbnRzIGN1cnJlbnRseSBwcmVzZW50IGluIHRoZSBtZW1vLgorICAgICAgIiIiKSwKKwogICAgICMgQWNjZXNzIHRoZSBleHRlbnNpb24gcmVnaXN0cnkgKHByZWRlZmluZWQgb2JqZWN0cykuICBBa2luIHRvIHRoZSBHRVQKICAgICAjIGZhbWlseS4KIApAQCAtMTYxNSw2ICsxODkzLDE1IEBACiAgICAgICBzdGFjaywgc28gdW5waWNrbGluZyBzdWJjbGFzc2VzIGNhbiBvdmVycmlkZSB0aGlzIGZvcm0gb2YgbG9va3VwLgogICAgICAgIiIiKSwKIAorICAgIEkobmFtZT0nU1RBQ0tfR0xPQkFMJywKKyAgICAgIGNvZGU9J1x4OTMnLAorICAgICAgYXJnPU5vbmUsCisgICAgICBzdGFja19iZWZvcmU9W3B5dW5pY29kZSwgcHl1bmljb2RlXSwKKyAgICAgIHN0YWNrX2FmdGVyPVthbnlvYmplY3RdLAorICAgICAgcHJvdG89NCwKKyAgICAgIGRvYz0iIiJQdXNoIGEgZ2xvYmFsIG9iamVjdCAobW9kdWxlLmF0dHIpIG9uIHRoZSBzdGFjay4KKyAgICAgICIiIiksCisKICAgICAjIFdheXMgdG8gYnVpbGQgb2JqZWN0cyBvZiBjbGFzc2VzIHBpY2tsZSBkb2Vzbid0IGtub3cgYWJvdXQgZGlyZWN0bHkKICAgICAjICh1c2VyLWRlZmluZWQgY2xhc3NlcykuICBJIGRlc3BhaXIgb2YgZG9jdW1lbnRpbmcgdGhpcyBhY2N1cmF0ZWx5CiAgICAgIyBhbmQgY29tcHJlaGVuc2libHkgLS0geW91IHJlYWxseSBoYXZlIHRvIHJlYWQgdGhlIHBpY2tsZSBjb2RlIHRvCkBAIC0xNzcxLDYgKzIwNTgsMjEgQEAKICAgICAgIG9udG8gdGhlIHN0YWNrLgogICAgICAgIiIiKSwKIAorICAgIEkobmFtZT0nTkVXT0JKX0VYJywKKyAgICAgIGNvZGU9J1x4OTInLAorICAgICAgYXJnPU5vbmUsCisgICAgICBzdGFja19iZWZvcmU9W2FueW9iamVjdCwgYW55b2JqZWN0LCBhbnlvYmplY3RdLAorICAgICAgc3RhY2tfYWZ0ZXI9W2FueW9iamVjdF0sCisgICAgICBwcm90bz00LAorICAgICAgZG9jPSIiIkJ1aWxkIGFuIG9iamVjdCBpbnN0YW5jZS4KKworICAgICAgVGhlIHN0YWNrIGJlZm9yZSBzaG91bGQgYmUgdGhvdWdodCBvZiBhcyBjb250YWluaW5nIGEgY2xhc3MKKyAgICAgIG9iamVjdCBmb2xsb3dlZCBieSBhbiBhcmd1bWVudCB0dXBsZSBhbmQgYnkgYSBrZXl3b3JkIGFyZ3VtZW50IGRpY3QKKyAgICAgICh0aGUgZGljdCBiZWluZyB0aGUgc3RhY2sgdG9wKS4gIENhbGwgdGhlc2UgY2xzIGFuZCBhcmdzLiAgVGhleSBhcmUKKyAgICAgIHBvcHBlZCBvZmYgdGhlIHN0YWNrLCBhbmQgdGhlIHZhbHVlIHJldHVybmVkIGJ5CisgICAgICBjbHMuX19uZXdfXyhjbHMsICphcmdzLCAqa3dhcmdzKSBpcyAgcHVzaGVkIGJhY2sgIG9udG8gdGhlIHN0YWNrLgorICAgICAgIiIiKSwKKwogICAgICMgTWFjaGluZSBjb250cm9sLgogCiAgICAgSShuYW1lPSdQUk9UTycsCkBAIC0xNzk4LDYgKzIxMDAsMjAgQEAKICAgICAgIGVtcHR5IHRoZW4uCiAgICAgICAiIiIpLAogCisgICAgIyBGcmFtaW5nIHN1cHBvcnQuCisKKyAgICBJKG5hbWU9J0ZSQU1FJywKKyAgICAgIGNvZGU9J1x4OTUnLAorICAgICAgYXJnPXVpbnQ4LAorICAgICAgc3RhY2tfYmVmb3JlPVtdLAorICAgICAgc3RhY2tfYWZ0ZXI9W10sCisgICAgICBwcm90bz00LAorICAgICAgZG9jPSIiIkluZGljYXRlIHRoZSBiZWdpbm5pbmcgb2YgYSBuZXcgZnJhbWUuCisKKyAgICAgIFRoZSB1bnBpY2tsZXIgbWF5IHVzZSB0aGlzIG9wY29kZSB0byBzYWZlbHkgcHJlZmV0Y2ggZGF0YSBmcm9tIGl0cworICAgICAgdW5kZXJseWluZyBzdHJlYW0uCisgICAgICAiIiIpLAorCiAgICAgIyBXYXlzIHRvIGRlYWwgd2l0aCBwZXJzaXN0ZW50IElEcy4KIAogICAgIEkobmFtZT0nUEVSU0lEJywKQEAgLTE5MDQsNiArMjIyMCwzOCBAQAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIEEgcGlja2xlIG9wY29kZSBnZW5lcmF0b3IuCiAKK2RlZiBfZ2Vub3BzKGRhdGEsIHlpZWxkX2VuZF9wb3M9RmFsc2UpOgorICAgIGlmIGlzaW5zdGFuY2UoZGF0YSwgYnl0ZXNfdHlwZXMpOgorICAgICAgICBkYXRhID0gaW8uQnl0ZXNJTyhkYXRhKQorCisgICAgaWYgaGFzYXR0cihkYXRhLCAidGVsbCIpOgorICAgICAgICBnZXRwb3MgPSBkYXRhLnRlbGwKKyAgICBlbHNlOgorICAgICAgICBnZXRwb3MgPSBsYW1iZGE6IE5vbmUKKworICAgIHdoaWxlIFRydWU6CisgICAgICAgIHBvcyA9IGdldHBvcygpCisgICAgICAgIGNvZGUgPSBkYXRhLnJlYWQoMSkKKyAgICAgICAgb3Bjb2RlID0gY29kZTJvcC5nZXQoY29kZS5kZWNvZGUoImxhdGluLTEiKSkKKyAgICAgICAgaWYgb3Bjb2RlIGlzIE5vbmU6CisgICAgICAgICAgICBpZiBjb2RlID09IGIiIjoKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJwaWNrbGUgZXhoYXVzdGVkIGJlZm9yZSBzZWVpbmcgU1RPUCIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImF0IHBvc2l0aW9uICVzLCBvcGNvZGUgJXIgdW5rbm93biIgJSAoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPHVua25vd24+IiBpZiBwb3MgaXMgTm9uZSBlbHNlIHBvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUpKQorICAgICAgICBpZiBvcGNvZGUuYXJnIGlzIE5vbmU6CisgICAgICAgICAgICBhcmcgPSBOb25lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBhcmcgPSBvcGNvZGUuYXJnLnJlYWRlcihkYXRhKQorICAgICAgICBpZiB5aWVsZF9lbmRfcG9zOgorICAgICAgICAgICAgeWllbGQgb3Bjb2RlLCBhcmcsIHBvcywgZ2V0cG9zKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHlpZWxkIG9wY29kZSwgYXJnLCBwb3MKKyAgICAgICAgaWYgY29kZSA9PSBiJy4nOgorICAgICAgICAgICAgYXNzZXJ0IG9wY29kZS5uYW1lID09ICdTVE9QJworICAgICAgICAgICAgYnJlYWsKKwogZGVmIGdlbm9wcyhwaWNrbGUpOgogICAgICIiIkdlbmVyYXRlIGFsbCB0aGUgb3Bjb2RlcyBpbiBhIHBpY2tsZS4KIApAQCAtMTkyNyw2MiArMjI3NSw2OSBAQAogICAgIHVzZWQuICBFbHNlICh0aGUgcGlja2xlIGRvZXNuJ3QgaGF2ZSBhIHRlbGwoKSwgYW5kIGl0J3Mgbm90IG9idmlvdXMgaG93CiAgICAgdG8gcXVlcnkgaXRzIGN1cnJlbnQgcG9zaXRpb24pIHBvcyBpcyBOb25lLgogICAgICIiIgotCi0gICAgaWYgaXNpbnN0YW5jZShwaWNrbGUsIGJ5dGVzX3R5cGVzKToKLSAgICAgICAgaW1wb3J0IGlvCi0gICAgICAgIHBpY2tsZSA9IGlvLkJ5dGVzSU8ocGlja2xlKQotCi0gICAgaWYgaGFzYXR0cihwaWNrbGUsICJ0ZWxsIik6Ci0gICAgICAgIGdldHBvcyA9IHBpY2tsZS50ZWxsCi0gICAgZWxzZToKLSAgICAgICAgZ2V0cG9zID0gbGFtYmRhOiBOb25lCi0KLSAgICB3aGlsZSBUcnVlOgotICAgICAgICBwb3MgPSBnZXRwb3MoKQotICAgICAgICBjb2RlID0gcGlja2xlLnJlYWQoMSkKLSAgICAgICAgb3Bjb2RlID0gY29kZTJvcC5nZXQoY29kZS5kZWNvZGUoImxhdGluLTEiKSkKLSAgICAgICAgaWYgb3Bjb2RlIGlzIE5vbmU6Ci0gICAgICAgICAgICBpZiBjb2RlID09IGIiIjoKLSAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJwaWNrbGUgZXhoYXVzdGVkIGJlZm9yZSBzZWVpbmcgU1RPUCIpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImF0IHBvc2l0aW9uICVzLCBvcGNvZGUgJXIgdW5rbm93biIgJSAoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3MgaXMgTm9uZSBhbmQgIjx1bmtub3duPiIgb3IgcG9zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZSkpCi0gICAgICAgIGlmIG9wY29kZS5hcmcgaXMgTm9uZToKLSAgICAgICAgICAgIGFyZyA9IE5vbmUKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGFyZyA9IG9wY29kZS5hcmcucmVhZGVyKHBpY2tsZSkKLSAgICAgICAgeWllbGQgb3Bjb2RlLCBhcmcsIHBvcwotICAgICAgICBpZiBjb2RlID09IGInLic6Ci0gICAgICAgICAgICBhc3NlcnQgb3Bjb2RlLm5hbWUgPT0gJ1NUT1AnCi0gICAgICAgICAgICBicmVhaworICAgIHJldHVybiBfZ2Vub3BzKHBpY2tsZSkKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIEEgcGlja2xlIG9wdGltaXplci4KIAogZGVmIG9wdGltaXplKHApOgogICAgICdPcHRpbWl6ZSBhIHBpY2tsZSBzdHJpbmcgYnkgcmVtb3ZpbmcgdW51c2VkIFBVVCBvcGNvZGVzJwotICAgIGdldHMgPSBzZXQoKSAgICAgICAgICAgICMgc2V0IG9mIGFyZ3MgdXNlZCBieSBhIEdFVCBvcGNvZGUKLSAgICBwdXRzID0gW10gICAgICAgICAgICAgICAjIChhcmcsIHN0YXJ0cG9zLCBzdG9wcG9zKSBmb3IgdGhlIFBVVCBvcGNvZGVzCi0gICAgcHJldnBvcyA9IE5vbmUgICAgICAgICAgIyBzZXQgdG8gcG9zIGlmIHByZXZpb3VzIG9wY29kZSB3YXMgYSBQVVQKLSAgICBmb3Igb3Bjb2RlLCBhcmcsIHBvcyBpbiBnZW5vcHMocCk6Ci0gICAgICAgIGlmIHByZXZwb3MgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBwdXRzLmFwcGVuZCgocHJldmFyZywgcHJldnBvcywgcG9zKSkKLSAgICAgICAgICAgIHByZXZwb3MgPSBOb25lCisgICAgcHV0ID0gJ1BVVCcKKyAgICBnZXQgPSAnR0VUJworICAgIG9sZGlkcyA9IHNldCgpICAgICAgICAgICMgc2V0IG9mIGFsbCBQVVQgaWRzCisgICAgbmV3aWRzID0ge30gICAgICAgICAgICAgIyBzZXQgb2YgaWRzIHVzZWQgYnkgYSBHRVQgb3Bjb2RlCisgICAgb3Bjb2RlcyA9IFtdICAgICAgICAgICAgIyAob3AsIGlkeCkgb3IgKHBvcywgZW5kX3BvcykKKyAgICBwcm90byA9IDAKKyAgICBwcm90b2hlYWRlciA9IGInJworICAgIGZvciBvcGNvZGUsIGFyZywgcG9zLCBlbmRfcG9zIGluIF9nZW5vcHMocCwgeWllbGRfZW5kX3Bvcz1UcnVlKToKICAgICAgICAgaWYgJ1BVVCcgaW4gb3Bjb2RlLm5hbWU6Ci0gICAgICAgICAgICBwcmV2YXJnLCBwcmV2cG9zID0gYXJnLCBwb3MKKyAgICAgICAgICAgIG9sZGlkcy5hZGQoYXJnKQorICAgICAgICAgICAgb3Bjb2Rlcy5hcHBlbmQoKHB1dCwgYXJnKSkKKyAgICAgICAgZWxpZiBvcGNvZGUubmFtZSA9PSAnTUVNT0laRSc6CisgICAgICAgICAgICBpZHggPSBsZW4ob2xkaWRzKQorICAgICAgICAgICAgb2xkaWRzLmFkZChpZHgpCisgICAgICAgICAgICBvcGNvZGVzLmFwcGVuZCgocHV0LCBpZHgpKQorICAgICAgICBlbGlmICdGUkFNRScgaW4gb3Bjb2RlLm5hbWU6CisgICAgICAgICAgICBwYXNzCiAgICAgICAgIGVsaWYgJ0dFVCcgaW4gb3Bjb2RlLm5hbWU6Ci0gICAgICAgICAgICBnZXRzLmFkZChhcmcpCisgICAgICAgICAgICBpZiBvcGNvZGUucHJvdG8gPiBwcm90bzoKKyAgICAgICAgICAgICAgICBwcm90byA9IG9wY29kZS5wcm90bworICAgICAgICAgICAgbmV3aWRzW2FyZ10gPSBOb25lCisgICAgICAgICAgICBvcGNvZGVzLmFwcGVuZCgoZ2V0LCBhcmcpKQorICAgICAgICBlbGlmIG9wY29kZS5uYW1lID09ICdQUk9UTyc6CisgICAgICAgICAgICBpZiBhcmcgPiBwcm90bzoKKyAgICAgICAgICAgICAgICBwcm90byA9IGFyZworICAgICAgICAgICAgaWYgcG9zID09IDA6CisgICAgICAgICAgICAgICAgcHJvdG9oZWFkZXIgPSBwW3BvczogZW5kX3Bvc10KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgb3Bjb2Rlcy5hcHBlbmQoKHBvcywgZW5kX3BvcykpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBvcGNvZGVzLmFwcGVuZCgocG9zLCBlbmRfcG9zKSkKKyAgICBkZWwgb2xkaWRzCiAKLSAgICAjIENvcHkgdGhlIHBpY2tsZSBzdHJpbmcgZXhjZXB0IGZvciBQVVRTIHdpdGhvdXQgYSBjb3JyZXNwb25kaW5nIEdFVAotICAgIHMgPSBbXQotICAgIGkgPSAwCi0gICAgZm9yIGFyZywgc3RhcnQsIHN0b3AgaW4gcHV0czoKLSAgICAgICAgaiA9IHN0b3AgaWYgKGFyZyBpbiBnZXRzKSBlbHNlIHN0YXJ0Ci0gICAgICAgIHMuYXBwZW5kKHBbaTpqXSkKLSAgICAgICAgaSA9IHN0b3AKLSAgICBzLmFwcGVuZChwW2k6XSkKLSAgICByZXR1cm4gYicnLmpvaW4ocykKKyAgICAjIENvcHkgdGhlIG9wY29kZXMgZXhjZXB0IGZvciBQVVRTIHdpdGhvdXQgYSBjb3JyZXNwb25kaW5nIEdFVAorICAgIG91dCA9IGlvLkJ5dGVzSU8oKQorICAgICMgV3JpdGUgdGhlIFBST1RPIGhlYWRlciBiZWZvcmUgYW55IGZyYW1pbmcKKyAgICBvdXQud3JpdGUocHJvdG9oZWFkZXIpCisgICAgcGlja2xlciA9IHBpY2tsZS5fUGlja2xlcihvdXQsIHByb3RvKQorICAgIGlmIHByb3RvID49IDQ6CisgICAgICAgIHBpY2tsZXIuZnJhbWVyLnN0YXJ0X2ZyYW1pbmcoKQorICAgIGlkeCA9IDAKKyAgICBmb3Igb3AsIGFyZyBpbiBvcGNvZGVzOgorICAgICAgICBpZiBvcCBpcyBwdXQ6CisgICAgICAgICAgICBpZiBhcmcgbm90IGluIG5ld2lkczoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgZGF0YSA9IHBpY2tsZXIucHV0KGlkeCkKKyAgICAgICAgICAgIG5ld2lkc1thcmddID0gaWR4CisgICAgICAgICAgICBpZHggKz0gMQorICAgICAgICBlbGlmIG9wIGlzIGdldDoKKyAgICAgICAgICAgIGRhdGEgPSBwaWNrbGVyLmdldChuZXdpZHNbYXJnXSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGRhdGEgPSBwW29wOmFyZ10KKyAgICAgICAgcGlja2xlci5mcmFtZXIuY29tbWl0X2ZyYW1lKCkKKyAgICAgICAgcGlja2xlci53cml0ZShkYXRhKQorICAgIHBpY2tsZXIuZnJhbWVyLmVuZF9mcmFtaW5nKCkKKyAgICByZXR1cm4gb3V0LmdldHZhbHVlKCkKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIEEgc3ltYm9saWMgcGlja2xlIGRpc2Fzc2VtYmxlci4KQEAgLTIwODIsMTcgKzI0MzcsMjAgQEAKICAgICAgICAgICAgICAgICBlcnJvcm1zZyA9IG1hcmttc2cgPSAibm8gTUFSSyBleGlzdHMgb24gc3RhY2siCiAKICAgICAgICAgIyBDaGVjayBmb3IgY29ycmVjdCBtZW1vIHVzYWdlLgotICAgICAgICBpZiBvcGNvZGUubmFtZSBpbiAoIlBVVCIsICJCSU5QVVQiLCAiTE9OR19CSU5QVVQiKToKLSAgICAgICAgICAgIGFzc2VydCBhcmcgaXMgbm90IE5vbmUKLSAgICAgICAgICAgIGlmIGFyZyBpbiBtZW1vOgorICAgICAgICBpZiBvcGNvZGUubmFtZSBpbiAoIlBVVCIsICJCSU5QVVQiLCAiTE9OR19CSU5QVVQiLCAiTUVNT0laRSIpOgorICAgICAgICAgICAgaWYgb3Bjb2RlLm5hbWUgPT0gIk1FTU9JWkUiOgorICAgICAgICAgICAgICAgIG1lbW9faWR4ID0gbGVuKG1lbW8pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGFzc2VydCBhcmcgaXMgbm90IE5vbmUKKyAgICAgICAgICAgICAgICBtZW1vX2lkeCA9IGFyZworICAgICAgICAgICAgaWYgbWVtb19pZHggaW4gbWVtbzoKICAgICAgICAgICAgICAgICBlcnJvcm1zZyA9ICJtZW1vIGtleSAlciBhbHJlYWR5IGRlZmluZWQiICUgYXJnCiAgICAgICAgICAgICBlbGlmIG5vdCBzdGFjazoKICAgICAgICAgICAgICAgICBlcnJvcm1zZyA9ICJzdGFjayBpcyBlbXB0eSAtLSBjYW4ndCBzdG9yZSBpbnRvIG1lbW8iCiAgICAgICAgICAgICBlbGlmIHN0YWNrWy0xXSBpcyBtYXJrb2JqZWN0OgogICAgICAgICAgICAgICAgIGVycm9ybXNnID0gImNhbid0IHN0b3JlIG1hcmtvYmplY3QgaW4gdGhlIG1lbW8iCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIG1lbW9bYXJnXSA9IHN0YWNrWy0xXQotCisgICAgICAgICAgICAgICAgbWVtb1ttZW1vX2lkeF0gPSBzdGFja1stMV0KICAgICAgICAgZWxpZiBvcGNvZGUubmFtZSBpbiAoIkdFVCIsICJCSU5HRVQiLCAiTE9OR19CSU5HRVQiKToKICAgICAgICAgICAgIGlmIGFyZyBpbiBtZW1vOgogICAgICAgICAgICAgICAgIGFzc2VydCBsZW4oYWZ0ZXIpID09IDEKZGlmZiAtLWdpdCBhL0xpYi9wa2d1dGlsLnB5IGIvTGliL3BrZ3V0aWwucHkKaW5kZXggMjBlNjQ5OC4uYTU0ZTk0NyAxMDA2NDQKLS0tIGEvTGliL3BrZ3V0aWwucHkKKysrIGIvTGliL3BrZ3V0aWwucHkKQEAgLTEsMTIgKzEsMTQgQEAKICIiIlV0aWxpdGllcyB0byBzdXBwb3J0IHBhY2thZ2VzLiIiIgogCi1pbXBvcnQgb3MKLWltcG9ydCBzeXMKK2Zyb20gZnVuY3Rvb2xzIGltcG9ydCBzaW5nbGVkaXNwYXRjaCBhcyBzaW1wbGVnZW5lcmljCiBpbXBvcnQgaW1wb3J0bGliCi1pbXBvcnQgaW1wCitpbXBvcnQgaW1wb3J0bGliLnV0aWwKK2ltcG9ydCBpbXBvcnRsaWIubWFjaGluZXJ5CitpbXBvcnQgb3MKIGltcG9ydCBvcy5wYXRoCi1mcm9tIHdhcm5pbmdzIGltcG9ydCB3YXJuCitpbXBvcnQgc3lzCiBmcm9tIHR5cGVzIGltcG9ydCBNb2R1bGVUeXBlCitpbXBvcnQgd2FybmluZ3MKIAogX19hbGxfXyA9IFsKICAgICAnZ2V0X2ltcG9ydGVyJywgJ2l0ZXJfaW1wb3J0ZXJzJywgJ2dldF9sb2FkZXInLCAnZmluZF9sb2FkZXInLApAQCAtMTQsNTkgKzE2LDM0IEBACiAgICAgJ0ltcEltcG9ydGVyJywgJ0ltcExvYWRlcicsICdyZWFkX2NvZGUnLCAnZXh0ZW5kX3BhdGgnLAogXQogCisKK2RlZiBfZ2V0X3NwZWMoZmluZGVyLCBuYW1lKToKKyAgICAiIiJSZXR1cm4gdGhlIGZpbmRlci1zcGVjaWZpYyBtb2R1bGUgc3BlYy4iIiIKKyAgICAjIFdvcmtzIHdpdGggbGVnYWN5IGZpbmRlcnMuCisgICAgdHJ5OgorICAgICAgICBmaW5kX3NwZWMgPSBmaW5kZXIuZmluZF9zcGVjCisgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICBsb2FkZXIgPSBmaW5kZXIuZmluZF9tb2R1bGUobmFtZSkKKyAgICAgICAgaWYgbG9hZGVyIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICByZXR1cm4gaW1wb3J0bGliLnV0aWwuc3BlY19mcm9tX2xvYWRlcihuYW1lLCBsb2FkZXIpCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIGZpbmRfc3BlYyhuYW1lKQorCisKIGRlZiByZWFkX2NvZGUoc3RyZWFtKToKICAgICAjIFRoaXMgaGVscGVyIGlzIG5lZWRlZCBpbiBvcmRlciBmb3IgdGhlIFBFUCAzMDIgZW11bGF0aW9uIHRvCiAgICAgIyBjb3JyZWN0bHkgaGFuZGxlIGNvbXBpbGVkIGZpbGVzCiAgICAgaW1wb3J0IG1hcnNoYWwKIAogICAgIG1hZ2ljID0gc3RyZWFtLnJlYWQoNCkKLSAgICBpZiBtYWdpYyAhPSBpbXAuZ2V0X21hZ2ljKCk6CisgICAgaWYgbWFnaWMgIT0gaW1wb3J0bGliLnV0aWwuTUFHSUNfTlVNQkVSOgogICAgICAgICByZXR1cm4gTm9uZQogCiAgICAgc3RyZWFtLnJlYWQoOCkgIyBTa2lwIHRpbWVzdGFtcCBhbmQgc2l6ZQogICAgIHJldHVybiBtYXJzaGFsLmxvYWQoc3RyZWFtKQogCiAKLWRlZiBzaW1wbGVnZW5lcmljKGZ1bmMpOgotICAgICIiIk1ha2UgYSB0cml2aWFsIHNpbmdsZS1kaXNwYXRjaCBnZW5lcmljIGZ1bmN0aW9uIiIiCi0gICAgcmVnaXN0cnkgPSB7fQotICAgIGRlZiB3cmFwcGVyKCphcmdzLCAqKmt3KToKLSAgICAgICAgb2IgPSBhcmdzWzBdCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGNscyA9IG9iLl9fY2xhc3NfXwotICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICBjbHMgPSB0eXBlKG9iKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBtcm8gPSBjbHMuX19tcm9fXwotICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgY2xhc3MgY2xzKGNscywgb2JqZWN0KToKLSAgICAgICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgICAgIG1ybyA9IGNscy5fX21yb19fWzE6XQotICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKLSAgICAgICAgICAgICAgICBtcm8gPSBvYmplY3QsICAgIyBtdXN0IGJlIGFuIEV4dGVuc2lvbkNsYXNzIG9yIHNvbWUgc3VjaCAgOigKLSAgICAgICAgZm9yIHQgaW4gbXJvOgotICAgICAgICAgICAgaWYgdCBpbiByZWdpc3RyeToKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVnaXN0cnlbdF0oKmFyZ3MsICoqa3cpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gZnVuYygqYXJncywgKiprdykKLSAgICB0cnk6Ci0gICAgICAgIHdyYXBwZXIuX19uYW1lX18gPSBmdW5jLl9fbmFtZV9fCi0gICAgZXhjZXB0IChUeXBlRXJyb3IsIEF0dHJpYnV0ZUVycm9yKToKLSAgICAgICAgcGFzcyAgICAjIFB5dGhvbiAyLjMgZG9lc24ndCBhbGxvdyBmdW5jdGlvbnMgdG8gYmUgcmVuYW1lZAotCi0gICAgZGVmIHJlZ2lzdGVyKHR5cCwgZnVuYz1Ob25lKToKLSAgICAgICAgaWYgZnVuYyBpcyBOb25lOgotICAgICAgICAgICAgcmV0dXJuIGxhbWJkYSBmOiByZWdpc3Rlcih0eXAsIGYpCi0gICAgICAgIHJlZ2lzdHJ5W3R5cF0gPSBmdW5jCi0gICAgICAgIHJldHVybiBmdW5jCi0KLSAgICB3cmFwcGVyLl9fZGljdF9fID0gZnVuYy5fX2RpY3RfXwotICAgIHdyYXBwZXIuX19kb2NfXyA9IGZ1bmMuX19kb2NfXwotICAgIHdyYXBwZXIucmVnaXN0ZXIgPSByZWdpc3RlcgotICAgIHJldHVybiB3cmFwcGVyCi0KLQogZGVmIHdhbGtfcGFja2FnZXMocGF0aD1Ob25lLCBwcmVmaXg9JycsIG9uZXJyb3I9Tm9uZSk6CiAgICAgIiIiWWllbGRzIChtb2R1bGVfbG9hZGVyLCBuYW1lLCBpc3BrZykgZm9yIGFsbCBtb2R1bGVzIHJlY3Vyc2l2ZWx5CiAgICAgb24gcGF0aCwgb3IsIGlmIHBhdGggaXMgTm9uZSwgYWxsIGFjY2Vzc2libGUgbW9kdWxlcy4KQEAgLTEyMSw4ICs5OCw3IEBACiAgICAgICAgICAgICAgICAgIyBkb24ndCB0cmF2ZXJzZSBwYXRoIGl0ZW1zIHdlJ3ZlIHNlZW4gYmVmb3JlCiAgICAgICAgICAgICAgICAgcGF0aCA9IFtwIGZvciBwIGluIHBhdGggaWYgbm90IHNlZW4ocCldCiAKLSAgICAgICAgICAgICAgICBmb3IgaXRlbSBpbiB3YWxrX3BhY2thZ2VzKHBhdGgsIG5hbWUrJy4nLCBvbmVycm9yKToKLSAgICAgICAgICAgICAgICAgICAgeWllbGQgaXRlbQorICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gd2Fsa19wYWNrYWdlcyhwYXRoLCBuYW1lKycuJywgb25lcnJvcikKIAogCiBkZWYgaXRlcl9tb2R1bGVzKHBhdGg9Tm9uZSwgcHJlZml4PScnKToKQEAgLTE0OSwxMyArMTI1LDEyIEBACiAgICAgICAgICAgICAgICAgeWllbGQgaSwgbmFtZSwgaXNwa2cKIAogCi0jQHNpbXBsZWdlbmVyaWMKK0BzaW1wbGVnZW5lcmljCiBkZWYgaXRlcl9pbXBvcnRlcl9tb2R1bGVzKGltcG9ydGVyLCBwcmVmaXg9JycpOgogICAgIGlmIG5vdCBoYXNhdHRyKGltcG9ydGVyLCAnaXRlcl9tb2R1bGVzJyk6CiAgICAgICAgIHJldHVybiBbXQogICAgIHJldHVybiBpbXBvcnRlci5pdGVyX21vZHVsZXMocHJlZml4KQogCi1pdGVyX2ltcG9ydGVyX21vZHVsZXMgPSBzaW1wbGVnZW5lcmljKGl0ZXJfaW1wb3J0ZXJfbW9kdWxlcykKIAogIyBJbXBsZW1lbnQgYSBmaWxlIHdhbGtlciBmb3IgdGhlIG5vcm1hbCBpbXBvcnRsaWIgcGF0aCBob29rCiBkZWYgX2l0ZXJfZmlsZV9maW5kZXJfbW9kdWxlcyhpbXBvcnRlciwgcHJlZml4PScnKToKQEAgLTIwMSw2ICsxNzYsMTMgQEAKIGl0ZXJfaW1wb3J0ZXJfbW9kdWxlcy5yZWdpc3RlcigKICAgICBpbXBvcnRsaWIubWFjaGluZXJ5LkZpbGVGaW5kZXIsIF9pdGVyX2ZpbGVfZmluZGVyX21vZHVsZXMpCiAKKworZGVmIF9pbXBvcnRfaW1wKCk6CisgICAgZ2xvYmFsIGltcAorICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdpZ25vcmUnLCBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICBpbXAgPSBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZSgnaW1wJykKKwogY2xhc3MgSW1wSW1wb3J0ZXI6CiAgICAgIiIiUEVQIDMwMiBJbXBvcnRlciB0aGF0IHdyYXBzIFB5dGhvbidzICJjbGFzc2ljIiBpbXBvcnQgYWxnb3JpdGhtCiAKQEAgLTIxMyw4ICsxOTUsMTAgQEAKICAgICAiIiIKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXRoPU5vbmUpOgotICAgICAgICB3YXJuKCJUaGlzIGVtdWxhdGlvbiBpcyBkZXByZWNhdGVkLCB1c2UgJ2ltcG9ydGxpYicgaW5zdGVhZCIsCisgICAgICAgIGdsb2JhbCBpbXAKKyAgICAgICAgd2FybmluZ3Mud2FybigiVGhpcyBlbXVsYXRpb24gaXMgZGVwcmVjYXRlZCwgdXNlICdpbXBvcnRsaWInIGluc3RlYWQiLAogICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgX2ltcG9ydF9pbXAoKQogICAgICAgICBzZWxmLnBhdGggPSBwYXRoCiAKICAgICBkZWYgZmluZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUsIHBhdGg9Tm9uZSk6CkBAIC0yNzksOCArMjYzLDkgQEAKICAgICBjb2RlID0gc291cmNlID0gTm9uZQogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZ1bGxuYW1lLCBmaWxlLCBmaWxlbmFtZSwgZXRjKToKLSAgICAgICAgd2FybigiVGhpcyBlbXVsYXRpb24gaXMgZGVwcmVjYXRlZCwgdXNlICdpbXBvcnRsaWInIGluc3RlYWQiLAotICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgd2FybmluZ3Mud2FybigiVGhpcyBlbXVsYXRpb24gaXMgZGVwcmVjYXRlZCwgdXNlICdpbXBvcnRsaWInIGluc3RlYWQiLAorICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgX2ltcG9ydF9pbXAoKQogICAgICAgICBzZWxmLmZpbGUgPSBmaWxlCiAgICAgICAgIHNlbGYuZmlsZW5hbWUgPSBmaWxlbmFtZQogICAgICAgICBzZWxmLmZ1bGxuYW1lID0gZnVsbG5hbWUKQEAgLTM1MCwxNiArMzM1LDE2IEBACiAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmlsZS5jbG9zZSgpCiAgICAgICAgICAgICBlbGlmIG1vZF90eXBlPT1pbXAuUFlfQ09NUElMRUQ6CiAgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoc2VsZi5maWxlbmFtZVs6LTFdKToKLSAgICAgICAgICAgICAgICAgICAgZiA9IG9wZW4oc2VsZi5maWxlbmFtZVs6LTFdLCAncicpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuc291cmNlID0gZi5yZWFkKCkKLSAgICAgICAgICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICAgICAgICAgIHdpdGggb3BlbihzZWxmLmZpbGVuYW1lWzotMV0sICdyJykgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc291cmNlID0gZi5yZWFkKCkKICAgICAgICAgICAgIGVsaWYgbW9kX3R5cGU9PWltcC5QS0dfRElSRUNUT1JZOgogICAgICAgICAgICAgICAgIHNlbGYuc291cmNlID0gc2VsZi5fZ2V0X2RlbGVnYXRlKCkuZ2V0X3NvdXJjZSgpCiAgICAgICAgIHJldHVybiBzZWxmLnNvdXJjZQogCi0KICAgICBkZWYgX2dldF9kZWxlZ2F0ZShzZWxmKToKLSAgICAgICAgcmV0dXJuIEltcEltcG9ydGVyKHNlbGYuZmlsZW5hbWUpLmZpbmRfbW9kdWxlKCdfX2luaXRfXycpCisgICAgICAgIGZpbmRlciA9IEltcEltcG9ydGVyKHNlbGYuZmlsZW5hbWUpCisgICAgICAgIHNwZWMgPSBfZ2V0X3NwZWMoZmluZGVyLCAnX19pbml0X18nKQorICAgICAgICByZXR1cm4gc3BlYy5sb2FkZXIKIAogICAgIGRlZiBnZXRfZmlsZW5hbWUoc2VsZiwgZnVsbG5hbWU9Tm9uZSk6CiAgICAgICAgIGZ1bGxuYW1lID0gc2VsZi5fZml4X25hbWUoZnVsbG5hbWUpCkBAIC00NTYsMTIgKzQ0MSwxMiBAQAogICAgICAgICBpZiBwYXRoIGlzIE5vbmU6CiAgICAgICAgICAgICByZXR1cm4KICAgICBlbHNlOgotICAgICAgICBmb3IgaW1wb3J0ZXIgaW4gc3lzLm1ldGFfcGF0aDoKLSAgICAgICAgICAgIHlpZWxkIGltcG9ydGVyCisgICAgICAgIHlpZWxkIGZyb20gc3lzLm1ldGFfcGF0aAogICAgICAgICBwYXRoID0gc3lzLnBhdGgKICAgICBmb3IgaXRlbSBpbiBwYXRoOgogICAgICAgICB5aWVsZCBnZXRfaW1wb3J0ZXIoaXRlbSkKIAorCiBkZWYgZ2V0X2xvYWRlcihtb2R1bGVfb3JfbmFtZSk6CiAgICAgIiIiR2V0IGEgUEVQIDMwMiAibG9hZGVyIiBvYmplY3QgZm9yIG1vZHVsZV9vcl9uYW1lCiAKQEAgLTQ3MSwxMSArNDU2LDE1IEBACiAgICAgIiIiCiAgICAgaWYgbW9kdWxlX29yX25hbWUgaW4gc3lzLm1vZHVsZXM6CiAgICAgICAgIG1vZHVsZV9vcl9uYW1lID0gc3lzLm1vZHVsZXNbbW9kdWxlX29yX25hbWVdCisgICAgICAgIGlmIG1vZHVsZV9vcl9uYW1lIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gTm9uZQogICAgIGlmIGlzaW5zdGFuY2UobW9kdWxlX29yX25hbWUsIE1vZHVsZVR5cGUpOgogICAgICAgICBtb2R1bGUgPSBtb2R1bGVfb3JfbmFtZQogICAgICAgICBsb2FkZXIgPSBnZXRhdHRyKG1vZHVsZSwgJ19fbG9hZGVyX18nLCBOb25lKQogICAgICAgICBpZiBsb2FkZXIgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICByZXR1cm4gbG9hZGVyCisgICAgICAgIGlmIGdldGF0dHIobW9kdWxlLCAnX19zcGVjX18nLCBOb25lKSBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKICAgICAgICAgZnVsbG5hbWUgPSBtb2R1bGUuX19uYW1lX18KICAgICBlbHNlOgogICAgICAgICBmdWxsbmFtZSA9IG1vZHVsZV9vcl9uYW1lCkBAIC00ODUsMjkgKzQ3NCwyMiBAQAogZGVmIGZpbmRfbG9hZGVyKGZ1bGxuYW1lKToKICAgICAiIiJGaW5kIGEgUEVQIDMwMiAibG9hZGVyIiBvYmplY3QgZm9yIGZ1bGxuYW1lCiAKLSAgICBUaGlzIGlzIHMgY29udmVuaWVuY2Ugd3JhcHBlciBhcm91bmQgOmZ1bmM6YGltcG9ydGxpYi5maW5kX2xvYWRlcmAgdGhhdAotICAgIHNldHMgdGhlICpwYXRoKiBhcmd1bWVudCBjb3JyZWN0bHkgd2hlbiBzZWFyY2hpbmcgZm9yIHN1Ym1vZHVsZXMsIGFuZAotICAgIGFsc28gZW5zdXJlcyBwYXJlbnQgcGFja2FnZXMgKGlmIGFueSkgYXJlIGltcG9ydGVkIGJlZm9yZSBzZWFyY2hpbmcgZm9yCi0gICAgc3VibW9kdWxlcy4KKyAgICBUaGlzIGlzIGEgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd3JhcHBlciBhcm91bmQKKyAgICBpbXBvcnRsaWIudXRpbC5maW5kX3NwZWMgdGhhdCBjb252ZXJ0cyBtb3N0IGZhaWx1cmVzIHRvIEltcG9ydEVycm9yCisgICAgYW5kIG9ubHkgcmV0dXJucyB0aGUgbG9hZGVyIHJhdGhlciB0aGFuIHRoZSBmdWxsIHNwZWMKICAgICAiIiIKICAgICBpZiBmdWxsbmFtZS5zdGFydHN3aXRoKCcuJyk6CiAgICAgICAgIG1zZyA9ICJSZWxhdGl2ZSBtb2R1bGUgbmFtZSB7IXJ9IG5vdCBzdXBwb3J0ZWQiLmZvcm1hdChmdWxsbmFtZSkKICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IobXNnKQotICAgIHBhdGggPSBOb25lCi0gICAgcGtnX25hbWUgPSBmdWxsbmFtZS5ycGFydGl0aW9uKCIuIilbMF0KLSAgICBpZiBwa2dfbmFtZToKLSAgICAgICAgcGtnID0gaW1wb3J0bGliLmltcG9ydF9tb2R1bGUocGtnX25hbWUpCi0gICAgICAgIHBhdGggPSBnZXRhdHRyKHBrZywgIl9fcGF0aF9fIiwgTm9uZSkKLSAgICAgICAgaWYgcGF0aCBpcyBOb25lOgotICAgICAgICAgICAgcmV0dXJuIE5vbmUKICAgICB0cnk6Ci0gICAgICAgIHJldHVybiBpbXBvcnRsaWIuZmluZF9sb2FkZXIoZnVsbG5hbWUsIHBhdGgpCisgICAgICAgIHNwZWMgPSBpbXBvcnRsaWIudXRpbC5maW5kX3NwZWMoZnVsbG5hbWUpCiAgICAgZXhjZXB0IChJbXBvcnRFcnJvciwgQXR0cmlidXRlRXJyb3IsIFR5cGVFcnJvciwgVmFsdWVFcnJvcikgYXMgZXg6CiAgICAgICAgICMgVGhpcyBoYWNrIGZpeGVzIGFuIGltcGVkYW5jZSBtaXNtYXRjaCBiZXR3ZWVuIHBrZ3V0aWwgYW5kCiAgICAgICAgICMgaW1wb3J0bGliLCB3aGVyZSB0aGUgbGF0dGVyIHJhaXNlcyBvdGhlciBlcnJvcnMgZm9yIGNhc2VzIHdoZXJlCiAgICAgICAgICMgcGtndXRpbCBwcmV2aW91c2x5IHJhaXNlZCBJbXBvcnRFcnJvcgogICAgICAgICBtc2cgPSAiRXJyb3Igd2hpbGUgZmluZGluZyBsb2FkZXIgZm9yIHshcn0gKHt9OiB7fSkiCiAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKG1zZy5mb3JtYXQoZnVsbG5hbWUsIHR5cGUoZXgpLCBleCkpIGZyb20gZXgKKyAgICByZXR1cm4gc3BlYy5sb2FkZXIgaWYgc3BlYyBpcyBub3QgTm9uZSBlbHNlIE5vbmUKIAogCiBkZWYgZXh0ZW5kX3BhdGgocGF0aCwgbmFtZSk6CkBAIC01NjksMTMgKzU1MSwxNCBAQAogCiAgICAgICAgIGZpbmRlciA9IGdldF9pbXBvcnRlcihkaXIpCiAgICAgICAgIGlmIGZpbmRlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHBvcnRpb25zID0gW10KKyAgICAgICAgICAgIGlmIGhhc2F0dHIoZmluZGVyLCAnZmluZF9zcGVjJyk6CisgICAgICAgICAgICAgICAgc3BlYyA9IGZpbmRlci5maW5kX3NwZWMoZmluYWxfbmFtZSkKKyAgICAgICAgICAgICAgICBpZiBzcGVjIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBwb3J0aW9ucyA9IHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMgb3IgW10KICAgICAgICAgICAgICMgSXMgdGhpcyBmaW5kZXIgUEVQIDQyMCBjb21wbGlhbnQ/Ci0gICAgICAgICAgICBpZiBoYXNhdHRyKGZpbmRlciwgJ2ZpbmRfbG9hZGVyJyk6Ci0gICAgICAgICAgICAgICAgbG9hZGVyLCBwb3J0aW9ucyA9IGZpbmRlci5maW5kX2xvYWRlcihmaW5hbF9uYW1lKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAjIE5vLCBubyBuZWVkIHRvIGNhbGwgaXQKLSAgICAgICAgICAgICAgICBsb2FkZXIgPSBOb25lCi0gICAgICAgICAgICAgICAgcG9ydGlvbnMgPSBbXQorICAgICAgICAgICAgZWxpZiBoYXNhdHRyKGZpbmRlciwgJ2ZpbmRfbG9hZGVyJyk6CisgICAgICAgICAgICAgICAgXywgcG9ydGlvbnMgPSBmaW5kZXIuZmluZF9sb2FkZXIoZmluYWxfbmFtZSkKIAogICAgICAgICAgICAgZm9yIHBvcnRpb24gaW4gcG9ydGlvbnM6CiAgICAgICAgICAgICAgICAgIyBYWFggVGhpcyBtYXkgc3RpbGwgYWRkIGR1cGxpY2F0ZSBlbnRyaWVzIHRvIHBhdGggb24KQEAgLTU4OSwxOSArNTcyLDIwIEBACiAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKHBrZ2ZpbGUpOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGYgPSBvcGVuKHBrZ2ZpbGUpCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBtc2c6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBtc2c6CiAgICAgICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiQ2FuJ3Qgb3BlbiAlczogJXNcbiIgJQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBrZ2ZpbGUsIG1zZykpCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGY6Ci0gICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnJzdHJpcCgnXG4nKQotICAgICAgICAgICAgICAgICAgICBpZiBub3QgbGluZSBvciBsaW5lLnN0YXJ0c3dpdGgoJyMnKToKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgICAgIHBhdGguYXBwZW5kKGxpbmUpICMgRG9uJ3QgY2hlY2sgZm9yIGV4aXN0ZW5jZSEKLSAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgICAgICB3aXRoIGY6CisgICAgICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5yc3RyaXAoJ1xuJykKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBsaW5lIG9yIGxpbmUuc3RhcnRzd2l0aCgnIycpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICAgICBwYXRoLmFwcGVuZChsaW5lKSAjIERvbid0IGNoZWNrIGZvciBleGlzdGVuY2UhCiAKICAgICByZXR1cm4gcGF0aAogCisKIGRlZiBnZXRfZGF0YShwYWNrYWdlLCByZXNvdXJjZSk6CiAgICAgIiIiR2V0IGEgcmVzb3VyY2UgZnJvbSBhIHBhY2thZ2UuCiAKQEAgLTYyNCwxMCArNjA4LDE1IEBACiAgICAgd2hpY2ggZG9lcyBub3Qgc3VwcG9ydCBnZXRfZGF0YSgpLCB0aGVuIE5vbmUgaXMgcmV0dXJuZWQuCiAgICAgIiIiCiAKLSAgICBsb2FkZXIgPSBnZXRfbG9hZGVyKHBhY2thZ2UpCisgICAgc3BlYyA9IGltcG9ydGxpYi51dGlsLmZpbmRfc3BlYyhwYWNrYWdlKQorICAgIGlmIHNwZWMgaXMgTm9uZToKKyAgICAgICAgcmV0dXJuIE5vbmUKKyAgICBsb2FkZXIgPSBzcGVjLmxvYWRlcgogICAgIGlmIGxvYWRlciBpcyBOb25lIG9yIG5vdCBoYXNhdHRyKGxvYWRlciwgJ2dldF9kYXRhJyk6CiAgICAgICAgIHJldHVybiBOb25lCi0gICAgbW9kID0gc3lzLm1vZHVsZXMuZ2V0KHBhY2thZ2UpIG9yIGxvYWRlci5sb2FkX21vZHVsZShwYWNrYWdlKQorICAgICMgWFhYIG5lZWRzIHRlc3QKKyAgICBtb2QgPSAoc3lzLm1vZHVsZXMuZ2V0KHBhY2thZ2UpIG9yCisgICAgICAgICAgIGltcG9ydGxpYi5fYm9vdHN0cmFwLl9TcGVjTWV0aG9kcyhzcGVjKS5sb2FkKCkpCiAgICAgaWYgbW9kIGlzIE5vbmUgb3Igbm90IGhhc2F0dHIobW9kLCAnX19maWxlX18nKToKICAgICAgICAgcmV0dXJuIE5vbmUKIApkaWZmIC0tZ2l0IGEvTGliL3BsYXQtb3MyZW14L0lOLnB5IGIvTGliL3BsYXQtb3MyZW14L0lOLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTNhZTI0Li4wMDAwMDAwCi0tLSBhL0xpYi9wbGF0LW9zMmVteC9JTi5weQorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLSMgR2VuZXJhdGVkIGJ5IGgycHkgZnJvbSBmOi9lbXgvaW5jbHVkZS9uZXRpbmV0L2luLmgKLQotIyBJbmNsdWRlZCBmcm9tIHN5cy9wYXJhbS5oCi1QQUdFX1NJWkUgPSAweDEwMDAKLUhaID0gMTAwCi1NQVhOQU1MRU4gPSAyNjAKLU1BWFBBVEhMRU4gPSAyNjAKLWRlZiBodG9ubChYKTogcmV0dXJuIF9zd2FwbChYKQotCi1kZWYgbnRvaGwoWCk6IHJldHVybiBfc3dhcGwoWCkKLQotZGVmIGh0b25zKFgpOiByZXR1cm4gX3N3YXBzKFgpCi0KLWRlZiBudG9ocyhYKTogcmV0dXJuIF9zd2FwcyhYKQotCi1JUFBST1RPX0lQID0gMAotSVBQUk9UT19JQ01QID0gMQotSVBQUk9UT19JR01QID0gMgotSVBQUk9UT19HR1AgPSAzCi1JUFBST1RPX1RDUCA9IDYKLUlQUFJPVE9fRUdQID0gOAotSVBQUk9UT19QVVAgPSAxMgotSVBQUk9UT19VRFAgPSAxNwotSVBQUk9UT19JRFAgPSAyMgotSVBQUk9UT19UUCA9IDI5Ci1JUFBST1RPX0VPTiA9IDgwCi1JUFBST1RPX1JBVyA9IDI1NQotSVBQUk9UT19NQVggPSAyNTYKLUlQUE9SVF9SRVNFUlZFRCA9IDEwMjQKLUlQUE9SVF9VU0VSUkVTRVJWRUQgPSA1MDAwCi1kZWYgSU5fQ0xBU1NBKGkpOiByZXR1cm4gKCgoaW50KShpKSAmIDB4ODAwMDAwMDApID09IDApCi0KLUlOX0NMQVNTQV9ORVQgPSAweGZmMDAwMDAwCi1JTl9DTEFTU0FfTlNISUZUID0gMjQKLUlOX0NMQVNTQV9IT1NUID0gMHgwMGZmZmZmZgotSU5fQ0xBU1NBX01BWCA9IDEyOAotZGVmIElOX0NMQVNTQihpKTogcmV0dXJuICgoKGludCkoaSkgJiAweGMwMDAwMDAwKSA9PSAweDgwMDAwMDAwKQotCi1JTl9DTEFTU0JfTkVUID0gMHhmZmZmMDAwMAotSU5fQ0xBU1NCX05TSElGVCA9IDE2Ci1JTl9DTEFTU0JfSE9TVCA9IDB4MDAwMGZmZmYKLUlOX0NMQVNTQl9NQVggPSA2NTUzNgotZGVmIElOX0NMQVNTQyhpKTogcmV0dXJuICgoKGludCkoaSkgJiAweGUwMDAwMDAwKSA9PSAweGMwMDAwMDAwKQotCi1JTl9DTEFTU0NfTkVUID0gMHhmZmZmZmYwMAotSU5fQ0xBU1NDX05TSElGVCA9IDgKLUlOX0NMQVNTQ19IT1NUID0gMHgwMDAwMDBmZgotZGVmIElOX0NMQVNTRChpKTogcmV0dXJuICgoKGludCkoaSkgJiAweGYwMDAwMDAwKSA9PSAweGUwMDAwMDAwKQotCi1JTl9DTEFTU0RfTkVUID0gMHhmMDAwMDAwMAotSU5fQ0xBU1NEX05TSElGVCA9IDI4Ci1JTl9DTEFTU0RfSE9TVCA9IDB4MGZmZmZmZmYKLWRlZiBJTl9NVUxUSUNBU1QoaSk6IHJldHVybiBJTl9DTEFTU0QoaSkKLQotZGVmIElOX0VYUEVSSU1FTlRBTChpKTogcmV0dXJuICgoKGludCkoaSkgJiAweGUwMDAwMDAwKSA9PSAweGUwMDAwMDAwKQotCi1kZWYgSU5fQkFEQ0xBU1MoaSk6IHJldHVybiAoKChpbnQpKGkpICYgMHhmMDAwMDAwMCkgPT0gMHhmMDAwMDAwMCkKLQotSU5BRERSX0FOWSA9IDB4MDAwMDAwMDAKLUlOQUREUl9MT09QQkFDSyA9IDB4N2YwMDAwMDEKLUlOQUREUl9CUk9BRENBU1QgPSAweGZmZmZmZmZmCi1JTkFERFJfTk9ORSA9IDB4ZmZmZmZmZmYKLUlOQUREUl9VTlNQRUNfR1JPVVAgPSAweGUwMDAwMDAwCi1JTkFERFJfQUxMSE9TVFNfR1JPVVAgPSAweGUwMDAwMDAxCi1JTkFERFJfTUFYX0xPQ0FMX0dST1VQID0gMHhlMDAwMDBmZgotSU5fTE9PUEJBQ0tORVQgPSAxMjcKLUlQX09QVElPTlMgPSAxCi1JUF9NVUxUSUNBU1RfSUYgPSAyCi1JUF9NVUxUSUNBU1RfVFRMID0gMwotSVBfTVVMVElDQVNUX0xPT1AgPSA0Ci1JUF9BRERfTUVNQkVSU0hJUCA9IDUKLUlQX0RST1BfTUVNQkVSU0hJUCA9IDYKLUlQX0hEUklOQ0wgPSAyCi1JUF9UT1MgPSAzCi1JUF9UVEwgPSA0Ci1JUF9SRUNWT1BUUyA9IDUKLUlQX1JFQ1ZSRVRPUFRTID0gNgotSVBfUkVDVkRTVEFERFIgPSA3Ci1JUF9SRVRPUFRTID0gOAotSVBfREVGQVVMVF9NVUxUSUNBU1RfVFRMID0gMQotSVBfREVGQVVMVF9NVUxUSUNBU1RfTE9PUCA9IDEKLUlQX01BWF9NRU1CRVJTSElQUyA9IDIwCmRpZmYgLS1naXQgYS9MaWIvcGxhdC1vczJlbXgvU09DS0VULnB5IGIvTGliL3BsYXQtb3MyZW14L1NPQ0tFVC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGFjNTk0YS4uMDAwMDAwMAotLS0gYS9MaWIvcGxhdC1vczJlbXgvU09DS0VULnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTA2ICswLDAgQEAKLSMgR2VuZXJhdGVkIGJ5IGgycHkgZnJvbSBmOi9lbXgvaW5jbHVkZS9zeXMvc29ja2V0LmgKLQotIyBJbmNsdWRlZCBmcm9tIHN5cy90eXBlcy5oCi1GRF9TRVRTSVpFID0gMjU2Ci0KLSMgSW5jbHVkZWQgZnJvbSBzeXMvdWlvLmgKLUZSRUFEID0gMQotRldSSVRFID0gMgotU09DS19TVFJFQU0gPSAxCi1TT0NLX0RHUkFNID0gMgotU09DS19SQVcgPSAzCi1TT0NLX1JETSA9IDQKLVNPQ0tfU0VRUEFDS0VUID0gNQotU09fREVCVUcgPSAweDAwMDEKLVNPX0FDQ0VQVENPTk4gPSAweDAwMDIKLVNPX1JFVVNFQUREUiA9IDB4MDAwNAotU09fS0VFUEFMSVZFID0gMHgwMDA4Ci1TT19ET05UUk9VVEUgPSAweDAwMTAKLVNPX0JST0FEQ0FTVCA9IDB4MDAyMAotU09fVVNFTE9PUEJBQ0sgPSAweDAwNDAKLVNPX0xJTkdFUiA9IDB4MDA4MAotU09fT09CSU5MSU5FID0gMHgwMTAwCi1TT19MX0JST0FEQ0FTVCA9IDB4MDIwMAotU09fUkNWX1NIVVRET1dOID0gMHgwNDAwCi1TT19TTkRfU0hVVERPV04gPSAweDA4MDAKLVNPX1NOREJVRiA9IDB4MTAwMQotU09fUkNWQlVGID0gMHgxMDAyCi1TT19TTkRMT1dBVCA9IDB4MTAwMwotU09fUkNWTE9XQVQgPSAweDEwMDQKLVNPX1NORFRJTUVPID0gMHgxMDA1Ci1TT19SQ1ZUSU1FTyA9IDB4MTAwNgotU09fRVJST1IgPSAweDEwMDcKLVNPX1RZUEUgPSAweDEwMDgKLVNPX09QVElPTlMgPSAweDEwMTAKLVNPTF9TT0NLRVQgPSAweGZmZmYKLUFGX1VOU1BFQyA9IDAKLUFGX1VOSVggPSAxCi1BRl9JTkVUID0gMgotQUZfSU1QTElOSyA9IDMKLUFGX1BVUCA9IDQKLUFGX0NIQU9TID0gNQotQUZfTlMgPSA2Ci1BRl9OQlMgPSA3Ci1BRl9JU08gPSA3Ci1BRl9PU0kgPSBBRl9JU08KLUFGX0VDTUEgPSA4Ci1BRl9EQVRBS0lUID0gOQotQUZfQ0NJVFQgPSAxMAotQUZfU05BID0gMTEKLUFGX0RFQ25ldCA9IDEyCi1BRl9ETEkgPSAxMwotQUZfTEFUID0gMTQKLUFGX0hZTElOSyA9IDE1Ci1BRl9BUFBMRVRBTEsgPSAxNgotQUZfTkIgPSAxNwotQUZfTkVUQklPUyA9IEFGX05CCi1BRl9PUzIgPSBBRl9VTklYCi1BRl9NQVggPSAxOAotUEZfVU5TUEVDID0gQUZfVU5TUEVDCi1QRl9VTklYID0gQUZfVU5JWAotUEZfSU5FVCA9IEFGX0lORVQKLVBGX0lNUExJTksgPSBBRl9JTVBMSU5LCi1QRl9QVVAgPSBBRl9QVVAKLVBGX0NIQU9TID0gQUZfQ0hBT1MKLVBGX05TID0gQUZfTlMKLVBGX05CUyA9IEFGX05CUwotUEZfSVNPID0gQUZfSVNPCi1QRl9PU0kgPSBBRl9JU08KLVBGX0VDTUEgPSBBRl9FQ01BCi1QRl9EQVRBS0lUID0gQUZfREFUQUtJVAotUEZfQ0NJVFQgPSBBRl9DQ0lUVAotUEZfU05BID0gQUZfU05BCi1QRl9ERUNuZXQgPSBBRl9ERUNuZXQKLVBGX0RMSSA9IEFGX0RMSQotUEZfTEFUID0gQUZfTEFUCi1QRl9IWUxJTksgPSBBRl9IWUxJTksKLVBGX0FQUExFVEFMSyA9IEFGX0FQUExFVEFMSwotUEZfTkIgPSBBRl9OQgotUEZfTkVUQklPUyA9IEFGX05CCi1QRl9PUzIgPSBBRl9VTklYCi1QRl9NQVggPSBBRl9NQVgKLVNPTUFYQ09OTiA9IDUKLU1TR19PT0IgPSAweDEKLU1TR19QRUVLID0gMHgyCi1NU0dfRE9OVFJPVVRFID0gMHg0Ci1NU0dfRU9SID0gMHg4Ci1NU0dfVFJVTkMgPSAweDEwCi1NU0dfQ1RSVU5DID0gMHgyMAotTVNHX1dBSVRBTEwgPSAweDQwCi1NU0dfTUFYSU9WTEVOID0gMTYKLVNDTV9SSUdIVFMgPSAweDAxCi1NVF9GUkVFID0gMAotTVRfREFUQSA9IDEKLU1UX0hFQURFUiA9IDIKLU1UX1NPQ0tFVCA9IDMKLU1UX1BDQiA9IDQKLU1UX1JUQUJMRSA9IDUKLU1UX0hUQUJMRSA9IDYKLU1UX0FUQUJMRSA9IDcKLU1UX1NPTkFNRSA9IDgKLU1UX1pPTUJJRSA9IDkKLU1UX1NPT1BUUyA9IDEwCi1NVF9GVEFCTEUgPSAxMQotTVRfUklHSFRTID0gMTIKLU1UX0lGQUREUiA9IDEzCi1NQVhTT0NLRVRTID0gMjA0OApkaWZmIC0tZ2l0IGEvTGliL3BsYXQtb3MyZW14L19lbXhfbGluay5weSBiL0xpYi9wbGF0LW9zMmVteC9fZW14X2xpbmsucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxZTZiNTQuLjAwMDAwMDAKLS0tIGEvTGliL3BsYXQtb3MyZW14L19lbXhfbGluay5weQorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLSMgX2VteF9saW5rLnB5Ci0KLSMgV3JpdHRlbiBieSBBbmRyZXcgSSBNYWNJbnR5cmUsIERlY2VtYmVyIDIwMDIuCi0KLSIiIl9lbXhfbGluay5weSBpcyBhIHNpbXBsaXN0aWMgZW11bGF0aW9uIG9mIHRoZSBVbml4IGxpbmsoMikgbGlicmFyeSByb3V0aW5lCi1mb3IgY3JlYXRpbmcgc28tY2FsbGVkIGhhcmQgbGlua3MuICBJdCBpcyBpbnRlbmRlZCB0byBiZSBpbXBvcnRlZCBpbnRvCi10aGUgb3MgbW9kdWxlIGluIHBsYWNlIG9mIHRoZSB1bmltcGxlbWVudGVkIChvbiBPUy8yKSBQb3NpeCBsaW5rKCkKLWZ1bmN0aW9uIChvcy5saW5rKCkpLgotCi1XZSBkbyB0aGlzIG9uIE9TLzIgYnkgaW1wbGVtZW50aW5nIGEgZmlsZSBjb3B5LCB3aXRoIGxpbmsoMikgc2VtYW50aWNzOi0KLSAgLSB0aGUgdGFyZ2V0IGNhbm5vdCBhbHJlYWR5IGV4aXN0OwotICAtIHdlIGhvcGUgdGhhdCB0aGUgYWN0dWFsIGZpbGUgb3BlbiAoaWYgc3VjY2Vzc2Z1bCkgaXMgYWN0dWFsbHkKLSAgICBhdG9taWMuLi4KLQotTGltaXRhdGlvbnMgb2YgdGhpcyBhcHByb2FjaC9pbXBsZW1lbnRhdGlvbiBpbmNsdWRlOi0KLSAgLSBubyBzdXBwb3J0IGZvciBjb3JyZWN0IGxpbmsgY291bnRzIChFTVggc3RhdCh0YXJnZXQpLnN0X25saW5rCi0gICAgaXMgYWx3YXlzIDEpOwotICAtIHRocmVhZCBzYWZldHkgdW5kZWZpbmVkOwotICAtIGRlZmF1bHQgZmlsZSBwZXJtaXNzaW9ucyAocit3KSB1c2VkLCBjYW4ndCBiZSBvdmVyLXJpZGRlbjsKLSAgLSBpbXBsZW1lbnRlZCBpbiBQeXRob24gc28gY29tcGFyYXRpdmVseSBzbG93LCBlc3BlY2lhbGx5IGZvciBsYXJnZQotICAgIHNvdXJjZSBmaWxlczsKLSAgLSBuZWVkIHN1ZmZpY2llbnQgZnJlZSBkaXNrIHNwYWNlIHRvIHN0b3JlIHRoZSBjb3B5LgotCi1CZWhhdmlvdXI6LQotICAtIGFueSBleGNlcHRpb24gc2hvdWxkIHByb3BhZ2F0ZSB0byB0aGUgY2FsbGVyOwotICAtIHdhbnQgdGFyZ2V0IHRvIGJlIGFuIGV4YWN0IGNvcHkgb2YgdGhlIHNvdXJjZSwgc28gdXNlIGJpbmFyeSBtb2RlOwotICAtIHJldHVybnMgTm9uZSwgc2FtZSBhcyBvcy5saW5rKCkgd2hpY2ggaXMgaW1wbGVtZW50ZWQgaW4gcG9zaXhtb2R1bGUuYzsKLSAgLSB0YXJnZXQgcmVtb3ZlZCBpbiB0aGUgZXZlbnQgb2YgYSBmYWlsdXJlIHdoZXJlIHBvc3NpYmxlOwotICAtIGdpdmVuIHRoZSBtb3RpdmF0aW9uIHRvIHdyaXRlIHRoaXMgZW11bGF0aW9uIGNhbWUgZnJvbSB0cnlpbmcgdG8KLSAgICBzdXBwb3J0IGEgVW5peCByZXNvdXJjZSBsb2NrIGltcGxlbWVudGF0aW9uLCB3aGVyZSBtaW5pbWFsIG92ZXJoZWFkCi0gICAgZHVyaW5nIGNyZWF0aW9uIG9mIHRoZSB0YXJnZXQgaXMgZGVzaXJhYmxlIGFuZCB0aGUgZmlsZXMgYXJlIHNtYWxsLAotICAgIHdlIHJlYWQgYSBzb3VyY2UgYmxvY2sgYmVmb3JlIGF0dGVtcHRpbmcgdG8gY3JlYXRlIHRoZSB0YXJnZXQgc28gdGhhdAotICAgIHdlJ3JlIHJlYWR5IHRvIGltbWVkaWF0ZWx5IHdyaXRlIHNvbWUgZGF0YSBpbnRvIGl0LgotIiIiCi0KLWltcG9ydCBvcwotaW1wb3J0IGVycm5vCi0KLV9fYWxsX18gPSBbJ2xpbmsnXQotCi1kZWYgbGluayhzb3VyY2UsIHRhcmdldCk6Ci0gICAgIiIibGluayhzb3VyY2UsIHRhcmdldCkgLT4gTm9uZQotCi0gICAgQXR0ZW1wdCB0byBoYXJkIGxpbmsgdGhlIHNvdXJjZSBmaWxlIHRvIHRoZSB0YXJnZXQgZmlsZSBuYW1lLgotICAgIE9uIE9TLzIsIHRoaXMgY3JlYXRlcyBhIGNvbXBsZXRlIGNvcHkgb2YgdGhlIHNvdXJjZSBmaWxlLgotICAgICIiIgotCi0gICAgcyA9IG9zLm9wZW4oc291cmNlLCBvcy5PX1JET05MWSB8IG9zLk9fQklOQVJZKQotICAgIGlmIG9zLmlzYXR0eShzKToKLSAgICAgICAgcmFpc2UgT1NFcnJvcihlcnJuby5FWERFViwgJ0Nyb3NzLWRldmljZSBsaW5rJykKLSAgICBkYXRhID0gb3MucmVhZChzLCAxMDI0KQotCi0gICAgdHJ5OgotICAgICAgICB0ID0gb3Mub3Blbih0YXJnZXQsIG9zLk9fV1JPTkxZIHwgb3MuT19CSU5BUlkgfCBvcy5PX0NSRUFUIHwgb3MuT19FWENMKQotICAgIGV4Y2VwdCBPU0Vycm9yOgotICAgICAgICBvcy5jbG9zZShzKQotICAgICAgICByYWlzZQotCi0gICAgdHJ5OgotICAgICAgICB3aGlsZSBkYXRhOgotICAgICAgICAgICAgb3Mud3JpdGUodCwgZGF0YSkKLSAgICAgICAgICAgIGRhdGEgPSBvcy5yZWFkKHMsIDEwMjQpCi0gICAgZXhjZXB0IE9TRXJyb3I6Ci0gICAgICAgIG9zLmNsb3NlKHMpCi0gICAgICAgIG9zLmNsb3NlKHQpCi0gICAgICAgIG9zLnVubGluayh0YXJnZXQpCi0gICAgICAgIHJhaXNlCi0KLSAgICBvcy5jbG9zZShzKQotICAgIG9zLmNsb3NlKHQpCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgaW1wb3J0IHN5cwotICAgIHRyeToKLSAgICAgICAgbGluayhzeXMuYXJndlsxXSwgc3lzLmFyZ3ZbMl0pCi0gICAgZXhjZXB0IEluZGV4RXJyb3I6Ci0gICAgICAgIHByaW50KCdVc2FnZTogZW14X2xpbmsgPHNvdXJjZT4gPHRhcmdldD4nKQotICAgIGV4Y2VwdCBPU0Vycm9yOgotICAgICAgICBwcmludCgnZW14X2xpbms6ICVzJyAlIHN0cihzeXMuZXhjX2luZm8oKVsxXSkpCmRpZmYgLS1naXQgYS9MaWIvcGxhdC1vczJlbXgvZ3JwLnB5IGIvTGliL3BsYXQtb3MyZW14L2dycC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWU2M2VmOC4uMDAwMDAwMAotLS0gYS9MaWIvcGxhdC1vczJlbXgvZ3JwLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTgyICswLDAgQEAKLSMgdGhpcyBtb2R1bGUgaXMgYW4gT1MvMiBvcmllbnRlZCByZXBsYWNlbWVudCBmb3IgdGhlIGdycCBzdGFuZGFyZAotIyBleHRlbnNpb24gbW9kdWxlLgotCi0jIHdyaXR0ZW4gYnkgQW5kcmV3IE1hY0ludHlyZSwgQXByaWwgMjAwMS4KLSMgdXBkYXRlZCBKdWx5IDIwMDMsIGFkZGluZyBmaWVsZCBhY2Nlc3NvciBzdXBwb3J0Ci0KLSMgbm90ZSB0aGF0IHRoaXMgaW1wbGVtZW50YXRpb24gY2hlY2tzIHdoZXRoZXIgIjoiIG9yICI7IiBhcyB1c2VkIGFzCi0jIHRoZSBmaWVsZCBzZXBhcmF0b3IgY2hhcmFjdGVyLgotCi0iIiJSZXBsYWNlbWVudCBmb3IgZ3JwIHN0YW5kYXJkIGV4dGVuc2lvbiBtb2R1bGUsIGludGVuZGVkIGZvciB1c2Ugb24KLU9TLzIgYW5kIHNpbWlsYXIgc3lzdGVtcyB3aGljaCBkb24ndCBub3JtYWxseSBoYXZlIGFuIC9ldGMvZ3JvdXAgZmlsZS4KLQotVGhlIHN0YW5kYXJkIFVuaXggZ3JvdXAgZGF0YWJhc2UgaXMgYW4gQVNDSUkgdGV4dCBmaWxlIHdpdGggNCBmaWVsZHMgcGVyCi1yZWNvcmQgKGxpbmUpLCBzZXBhcmF0ZWQgYnkgYSBjb2xvbjoKLSAgLSBncm91cCBuYW1lIChzdHJpbmcpCi0gIC0gZ3JvdXAgcGFzc3dvcmQgKG9wdGlvbmFsIGVuY3J5cHRlZCBzdHJpbmcpCi0gIC0gZ3JvdXAgaWQgKGludGVnZXIpCi0gIC0gZ3JvdXAgbWVtYmVycyAoY29tbWEgZGVsaW1pdGVkIGxpc3Qgb2YgdXNlcmlkcywgd2l0aCBubyBzcGFjZXMpCi0KLU5vdGUgdGhhdCBtZW1iZXJzIGFyZSBvbmx5IGluY2x1ZGVkIGluIHRoZSBncm91cCBmaWxlIGZvciBncm91cHMgdGhhdAotYXJlbid0IHRoZWlyIHByaW1hcnkgZ3JvdXBzLgotKHNlZSB0aGUgc2VjdGlvbiA4LjIgb2YgdGhlIFB5dGhvbiBMaWJyYXJ5IFJlZmVyZW5jZSkKLQotVGhpcyBpbXBsZW1lbnRhdGlvbiBkaWZmZXJzIGZyb20gdGhlIHN0YW5kYXJkIFVuaXggaW1wbGVtZW50YXRpb24gYnkKLWFsbG93aW5nIHVzZSBvZiB0aGUgcGxhdGZvcm0ncyBuYXRpdmUgcGF0aCBzZXBhcmF0b3IgY2hhcmFjdGVyIC0gJzsnIG9uIE9TLzIsCi1ET1MgYW5kIE1TLVdpbmRvd3MgLSBhcyB0aGUgZmllbGQgc2VwYXJhdG9yIGluIGFkZGl0aW9uIHRvIHRoZSBVbml4Ci1zdGFuZGFyZCAiOiIuCi0KLVRoZSBtb2R1bGUgbG9va3MgZm9yIHRoZSBncm91cCBkYXRhYmFzZSBhdCB0aGUgZm9sbG93aW5nIGxvY2F0aW9ucwotKGluIG9yZGVyIGZpcnN0IHRvIGxhc3QpOgotICAtICR7RVRDX0dST1VQfSAgICAgICAgICAgICAgKG9yICVFVENfR1JPVVAlKQotICAtICR7RVRDfS9ncm91cCAgICAgICAgICAgICAgKG9yICVFVEMlL2dyb3VwKQotICAtICR7UFlUSE9OSE9NRX0vRXRjL2dyb3VwICAgKG9yICVQWVRIT05IT01FJS9FdGMvZ3JvdXApCi0KLUNsYXNzZXMKLS0tLS0tLS0KLQotTm9uZQotCi1GdW5jdGlvbnMKLS0tLS0tLS0tLQotCi1nZXRncmdpZChnaWQpIC0gIHJldHVybiB0aGUgcmVjb3JkIGZvciBncm91cC1pZCBnaWQgYXMgYSA0LXR1cGxlCi0KLWdldGdybmFtKG5hbWUpIC0gcmV0dXJuIHRoZSByZWNvcmQgZm9yIGdyb3VwICduYW1lJyBhcyBhIDQtdHVwbGUKLQotZ2V0Z3JhbGwoKSAtICAgICByZXR1cm4gYSBsaXN0IG9mIDQtdHVwbGVzLCBlYWNoIHR1cGxlIGJlaW5nIG9uZSByZWNvcmQKLSAgICAgICAgICAgICAgICAgKE5PVEU6IHRoZSBvcmRlciBpcyBhcmJpdHJhcnkpCi0KLUF0dHJpYnV0ZXMKLS0tLS0tLS0tLS0KLQotZ3JvdXBfZmlsZSAtICAgICB0aGUgcGF0aCBvZiB0aGUgZ3JvdXAgZGF0YWJhc2UgZmlsZQotCi0iIiIKLQotaW1wb3J0IG9zCi0KLSMgdHJ5IGFuZCBmaW5kIHRoZSBncm91cCBmaWxlCi1fX2dyb3VwX3BhdGggPSBbXQotaWYgJ0VUQ19HUk9VUCcgaW4gb3MuZW52aXJvbjoKLSAgICBfX2dyb3VwX3BhdGguYXBwZW5kKG9zLmVudmlyb25bJ0VUQ19HUk9VUCddKQotaWYgJ0VUQycgaW4gb3MuZW52aXJvbjoKLSAgICBfX2dyb3VwX3BhdGguYXBwZW5kKCclcy9ncm91cCcgJSBvcy5lbnZpcm9uWydFVEMnXSkKLWlmICdQWVRIT05IT01FJyBpbiBvcy5lbnZpcm9uOgotICAgIF9fZ3JvdXBfcGF0aC5hcHBlbmQoJyVzL0V0Yy9ncm91cCcgJSBvcy5lbnZpcm9uWydQWVRIT05IT01FJ10pCi0KLWdyb3VwX2ZpbGUgPSBOb25lCi1mb3IgX19pIGluIF9fZ3JvdXBfcGF0aDoKLSAgICB0cnk6Ci0gICAgICAgIF9fZiA9IG9wZW4oX19pLCAncicpCi0gICAgICAgIF9fZi5jbG9zZSgpCi0gICAgICAgIGdyb3VwX2ZpbGUgPSBfX2kKLSAgICAgICAgYnJlYWsKLSAgICBleGNlcHQ6Ci0gICAgICAgIHBhc3MKLQotIyBkZWNpZGUgd2hhdCBmaWVsZCBzZXBhcmF0b3Igd2UgY2FuIHRyeSB0byB1c2UgLSBVbml4IHN0YW5kYXJkLCB3aXRoCi0jIHRoZSBwbGF0Zm9ybSdzIHBhdGggc2VwYXJhdG9yIGFzIGFuIG9wdGlvbi4gIE5vIHNwZWNpYWwgZmllbGQgY29udmVyc2lvbgotIyBoYW5kbGVycyBhcmUgcmVxdWlyZWQgZm9yIHRoZSBncm91cCBmaWxlLgotX19maWVsZF9zZXAgPSBbJzonXQotaWYgb3MucGF0aHNlcDoKLSAgICBpZiBvcy5wYXRoc2VwICE9ICc6JzoKLSAgICAgICAgX19maWVsZF9zZXAuYXBwZW5kKG9zLnBhdGhzZXApCi0KLSMgaGVscGVyIHJvdXRpbmUgdG8gaWRlbnRpZnkgd2hpY2ggc2VwYXJhdG9yIGNoYXJhY3RlciBpcyBpbiB1c2UKLWRlZiBfX2dldF9maWVsZF9zZXAocmVjb3JkKToKLSAgICBmcyA9IE5vbmUKLSAgICBmb3IgYyBpbiBfX2ZpZWxkX3NlcDoKLSAgICAgICAgIyB0aGVyZSBzaG91bGQgYmUgMyBkZWxpbWl0ZXIgY2hhcmFjdGVycyAoZm9yIDQgZmllbGRzKQotICAgICAgICBpZiByZWNvcmQuY291bnQoYykgPT0gMzoKLSAgICAgICAgICAgIGZzID0gYwotICAgICAgICAgICAgYnJlYWsKLSAgICBpZiBmczoKLSAgICAgICAgcmV0dXJuIGZzCi0gICAgZWxzZToKLSAgICAgICAgcmFpc2UgS2V5RXJyb3IoJz4+IGdyb3VwIGRhdGFiYXNlIGZpZWxkcyBub3QgZGVsaW1pdGVkIDw8JykKLQotIyBjbGFzcyB0byBtYXRjaCB0aGUgbmV3IHJlY29yZCBmaWVsZCBuYW1lIGFjY2Vzc29ycy4KLSMgdGhlIHJlc3VsdGluZyBvYmplY3QgaXMgaW50ZW5kZWQgdG8gYmVoYXZlIGxpa2UgYSByZWFkLW9ubHkgdHVwbGUsCi0jIHdpdGggZWFjaCBtZW1iZXIgYWxzbyBhY2Nlc3NpYmxlIGJ5IGEgZmllbGQgbmFtZS4KLWNsYXNzIEdyb3VwOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBwYXNzd2QsIGdpZCwgbWVtKToKLSAgICAgICAgc2VsZi5fX2RpY3RfX1snZ3JfbmFtZSddID0gbmFtZQotICAgICAgICBzZWxmLl9fZGljdF9fWydncl9wYXNzd2QnXSA9IHBhc3N3ZAotICAgICAgICBzZWxmLl9fZGljdF9fWydncl9naWQnXSA9IGdpZAotICAgICAgICBzZWxmLl9fZGljdF9fWydncl9tZW0nXSA9IG1lbQotICAgICAgICBzZWxmLl9fZGljdF9fWydfcmVjb3JkJ10gPSAoc2VsZi5ncl9uYW1lLCBzZWxmLmdyX3Bhc3N3ZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ3JfZ2lkLCBzZWxmLmdyX21lbSkKLQotICAgIGRlZiBfX2xlbl9fKHNlbGYpOgotICAgICAgICByZXR1cm4gNAotCi0gICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGtleSk6Ci0gICAgICAgIHJldHVybiBzZWxmLl9yZWNvcmRba2V5XQotCi0gICAgZGVmIF9fc2V0YXR0cl9fKHNlbGYsIG5hbWUsIHZhbHVlKToKLSAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IoJ2F0dHJpYnV0ZSByZWFkLW9ubHk6ICVzJyAlIG5hbWUpCi0KLSAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAgIHJldHVybiBzdHIoc2VsZi5fcmVjb3JkKQotCi0gICAgZGVmIF9fY21wX18oc2VsZiwgb3RoZXIpOgotICAgICAgICB0aGlzID0gc3RyKHNlbGYuX3JlY29yZCkKLSAgICAgICAgaWYgdGhpcyA9PSBvdGhlcjoKLSAgICAgICAgICAgIHJldHVybiAwCi0gICAgICAgIGVsaWYgdGhpcyA8IG90aGVyOgotICAgICAgICAgICAgcmV0dXJuIC0xCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gMQotCi0KLSMgcmVhZCB0aGUgd2hvbGUgZmlsZSwgcGFyc2luZyBlYWNoIGVudHJ5IGludG8gdHVwbGUgZm9ybQotIyB3aXRoIGRpY3Rpb25hcmllcyB0byBzcGVlZCByZWNhbGwgYnkgR0lEIG9yIGdyb3VwIG5hbWUKLWRlZiBfX3JlYWRfZ3JvdXBfZmlsZSgpOgotICAgIGlmIGdyb3VwX2ZpbGU6Ci0gICAgICAgIGdyb3VwID0gb3Blbihncm91cF9maWxlLCAncicpCi0gICAgZWxzZToKLSAgICAgICAgcmFpc2UgS2V5RXJyb3IoJz4+IG5vIGdyb3VwIGRhdGFiYXNlIDw8JykKLSAgICBnaWR4ID0ge30KLSAgICBuYW14ID0ge30KLSAgICBzZXAgPSBOb25lCi0gICAgd2hpbGUgMToKLSAgICAgICAgZW50cnkgPSBncm91cC5yZWFkbGluZSgpLnN0cmlwKCkKLSAgICAgICAgaWYgbGVuKGVudHJ5KSA+IDM6Ci0gICAgICAgICAgICBpZiBzZXAgaXMgTm9uZToKLSAgICAgICAgICAgICAgICBzZXAgPSBfX2dldF9maWVsZF9zZXAoZW50cnkpCi0gICAgICAgICAgICBmaWVsZHMgPSBlbnRyeS5zcGxpdChzZXApCi0gICAgICAgICAgICBmaWVsZHNbMl0gPSBpbnQoZmllbGRzWzJdKQotICAgICAgICAgICAgZmllbGRzWzNdID0gW2Yuc3RyaXAoKSBmb3IgZiBpbiBmaWVsZHNbM10uc3BsaXQoJywnKV0KLSAgICAgICAgICAgIHJlY29yZCA9IEdyb3VwKCpmaWVsZHMpCi0gICAgICAgICAgICBpZiBmaWVsZHNbMl0gbm90IGluIGdpZHg6Ci0gICAgICAgICAgICAgICAgZ2lkeFtmaWVsZHNbMl1dID0gcmVjb3JkCi0gICAgICAgICAgICBpZiBmaWVsZHNbMF0gbm90IGluIG5hbXg6Ci0gICAgICAgICAgICAgICAgbmFteFtmaWVsZHNbMF1dID0gcmVjb3JkCi0gICAgICAgIGVsaWYgbGVuKGVudHJ5KSA+IDA6Ci0gICAgICAgICAgICBwYXNzICAgICAgICAgICAgICAgICAgICAgICAgICMgc2tpcCBlbXB0eSBvciBtYWxmb3JtZWQgcmVjb3JkcwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgYnJlYWsKLSAgICBncm91cC5jbG9zZSgpCi0gICAgaWYgbGVuKGdpZHgpID09IDA6Ci0gICAgICAgIHJhaXNlIEtleUVycm9yCi0gICAgcmV0dXJuIChnaWR4LCBuYW14KQotCi0jIHJldHVybiB0aGUgZ3JvdXAgZGF0YWJhc2UgZW50cnkgYnkgR0lECi1kZWYgZ2V0Z3JnaWQoZ2lkKToKLSAgICBnLCBuID0gX19yZWFkX2dyb3VwX2ZpbGUoKQotICAgIHJldHVybiBnW2dpZF0KLQotIyByZXR1cm4gdGhlIGdyb3VwIGRhdGFiYXNlIGVudHJ5IGJ5IGdyb3VwIG5hbWUKLWRlZiBnZXRncm5hbShuYW1lKToKLSAgICBnLCBuID0gX19yZWFkX2dyb3VwX2ZpbGUoKQotICAgIHJldHVybiBuW25hbWVdCi0KLSMgcmV0dXJuIGFsbCB0aGUgZ3JvdXAgZGF0YWJhc2UgZW50cmllcwotZGVmIGdldGdyYWxsKCk6Ci0gICAgZywgbiA9IF9fcmVhZF9ncm91cF9maWxlKCkKLSAgICByZXR1cm4gZy52YWx1ZXMoKQotCi0jIHRlc3QgaGFybmVzcwotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICBnZXRncmFsbCgpCmRpZmYgLS1naXQgYS9MaWIvcGxhdC1vczJlbXgvcHdkLnB5IGIvTGliL3BsYXQtb3MyZW14L3B3ZC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmNiMDc3Zi4uMDAwMDAwMAotLS0gYS9MaWIvcGxhdC1vczJlbXgvcHdkLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjA4ICswLDAgQEAKLSMgdGhpcyBtb2R1bGUgaXMgYW4gT1MvMiBvcmllbnRlZCByZXBsYWNlbWVudCBmb3IgdGhlIHB3ZCBzdGFuZGFyZAotIyBleHRlbnNpb24gbW9kdWxlLgotCi0jIHdyaXR0ZW4gYnkgQW5kcmV3IE1hY0ludHlyZSwgQXByaWwgMjAwMS4KLSMgdXBkYXRlZCBKdWx5IDIwMDMsIGFkZGluZyBmaWVsZCBhY2Nlc3NvciBzdXBwb3J0Ci0KLSMgbm90ZSB0aGF0IHRoaXMgaW1wbGVtZW50YXRpb24gY2hlY2tzIHdoZXRoZXIgIjoiIG9yICI7IiBhcyB1c2VkIGFzCi0jIHRoZSBmaWVsZCBzZXBhcmF0b3IgY2hhcmFjdGVyLiAgUGF0aCBjb252ZXJzaW9ucyBhcmUgYXJlIGFwcGxpZWQgd2hlbgotIyB0aGUgZGF0YWJhc2UgdXNlcyAiOiIgYXMgdGhlIGZpZWxkIHNlcGFyYXRvciBjaGFyYWN0ZXIuCi0KLSIiIlJlcGxhY2VtZW50IGZvciBwd2Qgc3RhbmRhcmQgZXh0ZW5zaW9uIG1vZHVsZSwgaW50ZW5kZWQgZm9yIHVzZSBvbgotT1MvMiBhbmQgc2ltaWxhciBzeXN0ZW1zIHdoaWNoIGRvbid0IG5vcm1hbGx5IGhhdmUgYW4gL2V0Yy9wYXNzd2QgZmlsZS4KLQotVGhlIHN0YW5kYXJkIFVuaXggcGFzc3dvcmQgZGF0YWJhc2UgaXMgYW4gQVNDSUkgdGV4dCBmaWxlIHdpdGggNyBmaWVsZHMKLXBlciByZWNvcmQgKGxpbmUpLCBzZXBhcmF0ZWQgYnkgYSBjb2xvbjoKLSAgLSB1c2VyIG5hbWUgKHN0cmluZykKLSAgLSBwYXNzd29yZCAoZW5jcnlwdGVkIHN0cmluZywgb3IgIioiIG9yICIiKQotICAtIHVzZXIgaWQgKGludGVnZXIpCi0gIC0gZ3JvdXAgaWQgKGludGVnZXIpCi0gIC0gZGVzY3JpcHRpb24gKHVzdWFsbHkgdXNlcidzIG5hbWUpCi0gIC0gaG9tZSBkaXJlY3RvcnkgKHBhdGggdG8gdXNlcidzIGhvbWUgZGlyZWN0b3J5KQotICAtIHNoZWxsIChwYXRoIHRvIHRoZSB1c2VyJ3MgbG9naW4gc2hlbGwpCi0KLShzZWUgdGhlIHNlY3Rpb24gOC4xIG9mIHRoZSBQeXRob24gTGlicmFyeSBSZWZlcmVuY2UpCi0KLVRoaXMgaW1wbGVtZW50YXRpb24gZGlmZmVycyBmcm9tIHRoZSBzdGFuZGFyZCBVbml4IGltcGxlbWVudGF0aW9uIGJ5Ci1hbGxvd2luZyB1c2Ugb2YgdGhlIHBsYXRmb3JtJ3MgbmF0aXZlIHBhdGggc2VwYXJhdG9yIGNoYXJhY3RlciAtICc7JyBvbiBPUy8yLAotRE9TIGFuZCBNUy1XaW5kb3dzIC0gYXMgdGhlIGZpZWxkIHNlcGFyYXRvciBpbiBhZGRpdGlvbiB0byB0aGUgVW5peAotc3RhbmRhcmQgIjoiLiAgQWRkaXRpb25hbGx5LCB3aGVuICI6IiBpcyB0aGUgc2VwYXJhdG9yIHBhdGggY29udmVyc2lvbnMKLWFyZSBhcHBsaWVkIHRvIGRlYWwgd2l0aCBhbnkgbXVuZ2luZyBvZiB0aGUgZHJpdmUgbGV0dGVyIHJlZmVyZW5jZS4KLQotVGhlIG1vZHVsZSBsb29rcyBmb3IgdGhlIHBhc3N3b3JkIGRhdGFiYXNlIGF0IHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zCi0oaW4gb3JkZXIgZmlyc3QgdG8gbGFzdCk6Ci0gIC0gJHtFVENfUEFTU1dEfSAgICAgICAgICAgICAob3IgJUVUQ19QQVNTV0QlKQotICAtICR7RVRDfS9wYXNzd2QgICAgICAgICAgICAgKG9yICVFVEMlL3Bhc3N3ZCkKLSAgLSAke1BZVEhPTkhPTUV9L0V0Yy9wYXNzd2QgIChvciAlUFlUSE9OSE9NRSUvRXRjL3Bhc3N3ZCkKLQotQ2xhc3NlcwotLS0tLS0tLQotCi1Ob25lCi0KLUZ1bmN0aW9ucwotLS0tLS0tLS0tCi0KLWdldHB3dWlkKHVpZCkgLSAgcmV0dXJuIHRoZSByZWNvcmQgZm9yIHVzZXItaWQgdWlkIGFzIGEgNy10dXBsZQotCi1nZXRwd25hbShuYW1lKSAtIHJldHVybiB0aGUgcmVjb3JkIGZvciB1c2VyICduYW1lJyBhcyBhIDctdHVwbGUKLQotZ2V0cHdhbGwoKSAtICAgICByZXR1cm4gYSBsaXN0IG9mIDctdHVwbGVzLCBlYWNoIHR1cGxlIGJlaW5nIG9uZSByZWNvcmQKLSAgICAgICAgICAgICAgICAgKE5PVEU6IHRoZSBvcmRlciBpcyBhcmJpdHJhcnkpCi0KLUF0dHJpYnV0ZXMKLS0tLS0tLS0tLS0KLQotcGFzc3dkX2ZpbGUgLSAgICB0aGUgcGF0aCBvZiB0aGUgcGFzc3dvcmQgZGF0YWJhc2UgZmlsZQotCi0iIiIKLQotaW1wb3J0IG9zCi0KLSMgdHJ5IGFuZCBmaW5kIHRoZSBwYXNzd2QgZmlsZQotX19wYXNzd2RfcGF0aCA9IFtdCi1pZiAnRVRDX1BBU1NXRCcgaW4gb3MuZW52aXJvbjoKLSAgICBfX3Bhc3N3ZF9wYXRoLmFwcGVuZChvcy5lbnZpcm9uWydFVENfUEFTU1dEJ10pCi1pZiAnRVRDJyBpbiBvcy5lbnZpcm9uOgotICAgIF9fcGFzc3dkX3BhdGguYXBwZW5kKCclcy9wYXNzd2QnICUgb3MuZW52aXJvblsnRVRDJ10pCi1pZiAnUFlUSE9OSE9NRScgaW4gb3MuZW52aXJvbjoKLSAgICBfX3Bhc3N3ZF9wYXRoLmFwcGVuZCgnJXMvRXRjL3Bhc3N3ZCcgJSBvcy5lbnZpcm9uWydQWVRIT05IT01FJ10pCi0KLXBhc3N3ZF9maWxlID0gTm9uZQotZm9yIF9faSBpbiBfX3Bhc3N3ZF9wYXRoOgotICAgIHRyeToKLSAgICAgICAgX19mID0gb3BlbihfX2ksICdyJykKLSAgICAgICAgX19mLmNsb3NlKCkKLSAgICAgICAgcGFzc3dkX2ZpbGUgPSBfX2kKLSAgICAgICAgYnJlYWsKLSAgICBleGNlcHQ6Ci0gICAgICAgIHBhc3MKLQotIyBwYXRoIGNvbnZlcnNpb24gaGFuZGxlcnMKLWRlZiBfX251bGxwYXRoY29udihwYXRoKToKLSAgICByZXR1cm4gcGF0aC5yZXBsYWNlKG9zLmFsdHNlcCwgb3Muc2VwKQotCi1kZWYgX191bml4cGF0aGNvbnYocGF0aCk6Ci0gICAgIyB0d28ga25vd24gZHJpdmUgbGV0dGVyIHZhcmlhdGlvbnM6ICJ4OyIgYW5kICIkeCIKLSAgICBpZiBwYXRoWzBdID09ICckJzoKLSAgICAgICAgY29udiA9IHBhdGhbMV0gKyAnOicgKyBwYXRoWzI6XQotICAgIGVsaWYgcGF0aFsxXSA9PSAnOyc6Ci0gICAgICAgIGNvbnYgPSBwYXRoWzBdICsgJzonICsgcGF0aFsyOl0KLSAgICBlbHNlOgotICAgICAgICBjb252ID0gcGF0aAotICAgIHJldHVybiBjb252LnJlcGxhY2Uob3MuYWx0c2VwLCBvcy5zZXApCi0KLSMgZGVjaWRlIHdoYXQgZmllbGQgc2VwYXJhdG9yIHdlIGNhbiB0cnkgdG8gdXNlIC0gVW5peCBzdGFuZGFyZCwgd2l0aAotIyB0aGUgcGxhdGZvcm0ncyBwYXRoIHNlcGFyYXRvciBhcyBhbiBvcHRpb24uICBObyBzcGVjaWFsIGZpZWxkIGNvbnZlcnNpb24KLSMgaGFuZGxlciBpcyByZXF1aXJlZCB3aGVuIHVzaW5nIHRoZSBwbGF0Zm9ybSdzIHBhdGggc2VwYXJhdG9yIGFzIGZpZWxkCi0jIHNlcGFyYXRvciwgYnV0IGFyZSByZXF1aXJlZCBmb3IgdGhlIGhvbWUgZGlyZWN0b3J5IGFuZCBzaGVsbCBmaWVsZHMgd2hlbgotIyB1c2luZyB0aGUgc3RhbmRhcmQgVW5peCAoIjoiKSBmaWVsZCBzZXBhcmF0b3IuCi1fX2ZpZWxkX3NlcCA9IHsnOic6IF9fdW5peHBhdGhjb252fQotaWYgb3MucGF0aHNlcDoKLSAgICBpZiBvcy5wYXRoc2VwICE9ICc6JzoKLSAgICAgICAgX19maWVsZF9zZXBbb3MucGF0aHNlcF0gPSBfX251bGxwYXRoY29udgotCi0jIGhlbHBlciByb3V0aW5lIHRvIGlkZW50aWZ5IHdoaWNoIHNlcGFyYXRvciBjaGFyYWN0ZXIgaXMgaW4gdXNlCi1kZWYgX19nZXRfZmllbGRfc2VwKHJlY29yZCk6Ci0gICAgZnMgPSBOb25lCi0gICAgZm9yIGMgaW4gX19maWVsZF9zZXAua2V5cygpOgotICAgICAgICAjIHRoZXJlIHNob3VsZCBiZSA2IGRlbGltaXRlciBjaGFyYWN0ZXJzIChmb3IgNyBmaWVsZHMpCi0gICAgICAgIGlmIHJlY29yZC5jb3VudChjKSA9PSA2OgotICAgICAgICAgICAgZnMgPSBjCi0gICAgICAgICAgICBicmVhawotICAgIGlmIGZzOgotICAgICAgICByZXR1cm4gZnMKLSAgICBlbHNlOgotICAgICAgICByYWlzZSBLZXlFcnJvcignPj4gcGFzc3dkIGRhdGFiYXNlIGZpZWxkcyBub3QgZGVsaW1pdGVkIDw8JykKLQotIyBjbGFzcyB0byBtYXRjaCB0aGUgbmV3IHJlY29yZCBmaWVsZCBuYW1lIGFjY2Vzc29ycy4KLSMgdGhlIHJlc3VsdGluZyBvYmplY3QgaXMgaW50ZW5kZWQgdG8gYmVoYXZlIGxpa2UgYSByZWFkLW9ubHkgdHVwbGUsCi0jIHdpdGggZWFjaCBtZW1iZXIgYWxzbyBhY2Nlc3NpYmxlIGJ5IGEgZmllbGQgbmFtZS4KLWNsYXNzIFBhc3N3ZDoKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgcGFzc3dkLCB1aWQsIGdpZCwgZ2Vjb3MsIGRpciwgc2hlbGwpOgotICAgICAgICBzZWxmLl9fZGljdF9fWydwd19uYW1lJ10gPSBuYW1lCi0gICAgICAgIHNlbGYuX19kaWN0X19bJ3B3X3Bhc3N3ZCddID0gcGFzc3dkCi0gICAgICAgIHNlbGYuX19kaWN0X19bJ3B3X3VpZCddID0gdWlkCi0gICAgICAgIHNlbGYuX19kaWN0X19bJ3B3X2dpZCddID0gZ2lkCi0gICAgICAgIHNlbGYuX19kaWN0X19bJ3B3X2dlY29zJ10gPSBnZWNvcwotICAgICAgICBzZWxmLl9fZGljdF9fWydwd19kaXInXSA9IGRpcgotICAgICAgICBzZWxmLl9fZGljdF9fWydwd19zaGVsbCddID0gc2hlbGwKLSAgICAgICAgc2VsZi5fX2RpY3RfX1snX3JlY29yZCddID0gKHNlbGYucHdfbmFtZSwgc2VsZi5wd19wYXNzd2QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnB3X3VpZCwgc2VsZi5wd19naWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnB3X2dlY29zLCBzZWxmLnB3X2RpciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucHdfc2hlbGwpCi0KLSAgICBkZWYgX19sZW5fXyhzZWxmKToKLSAgICAgICAgcmV0dXJuIDcKLQotICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBrZXkpOgotICAgICAgICByZXR1cm4gc2VsZi5fcmVjb3JkW2tleV0KLQotICAgIGRlZiBfX3NldGF0dHJfXyhzZWxmLCBuYW1lLCB2YWx1ZSk6Ci0gICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKCdhdHRyaWJ1dGUgcmVhZC1vbmx5OiAlcycgJSBuYW1lKQotCi0gICAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgICAgICByZXR1cm4gc3RyKHNlbGYuX3JlY29yZCkKLQotICAgIGRlZiBfX2NtcF9fKHNlbGYsIG90aGVyKToKLSAgICAgICAgdGhpcyA9IHN0cihzZWxmLl9yZWNvcmQpCi0gICAgICAgIGlmIHRoaXMgPT0gb3RoZXI6Ci0gICAgICAgICAgICByZXR1cm4gMAotICAgICAgICBlbGlmIHRoaXMgPCBvdGhlcjoKLSAgICAgICAgICAgIHJldHVybiAtMQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIDEKLQotCi0jIHJlYWQgdGhlIHdob2xlIGZpbGUsIHBhcnNpbmcgZWFjaCBlbnRyeSBpbnRvIHR1cGxlIGZvcm0KLSMgd2l0aCBkaWN0aW9uYXJpZXMgdG8gc3BlZWQgcmVjYWxsIGJ5IFVJRCBvciBwYXNzd2QgbmFtZQotZGVmIF9fcmVhZF9wYXNzd2RfZmlsZSgpOgotICAgIGlmIHBhc3N3ZF9maWxlOgotICAgICAgICBwYXNzd2QgPSBvcGVuKHBhc3N3ZF9maWxlLCAncicpCi0gICAgZWxzZToKLSAgICAgICAgcmFpc2UgS2V5RXJyb3IoJz4+IG5vIHBhc3N3b3JkIGRhdGFiYXNlIDw8JykKLSAgICB1aWR4ID0ge30KLSAgICBuYW14ID0ge30KLSAgICBzZXAgPSBOb25lCi0gICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgZW50cnkgPSBwYXNzd2QucmVhZGxpbmUoKS5zdHJpcCgpCi0gICAgICAgIGlmIGxlbihlbnRyeSkgPiA2OgotICAgICAgICAgICAgaWYgc2VwIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgc2VwID0gX19nZXRfZmllbGRfc2VwKGVudHJ5KQotICAgICAgICAgICAgZmllbGRzID0gZW50cnkuc3BsaXQoc2VwKQotICAgICAgICAgICAgZm9yIGkgaW4gKDIsIDMpOgotICAgICAgICAgICAgICAgIGZpZWxkc1tpXSA9IGludChmaWVsZHNbaV0pCi0gICAgICAgICAgICBmb3IgaSBpbiAoNSwgNik6Ci0gICAgICAgICAgICAgICAgZmllbGRzW2ldID0gX19maWVsZF9zZXBbc2VwXShmaWVsZHNbaV0pCi0gICAgICAgICAgICByZWNvcmQgPSBQYXNzd2QoKmZpZWxkcykKLSAgICAgICAgICAgIGlmIGZpZWxkc1syXSBub3QgaW4gdWlkeDoKLSAgICAgICAgICAgICAgICB1aWR4W2ZpZWxkc1syXV0gPSByZWNvcmQKLSAgICAgICAgICAgIGlmIGZpZWxkc1swXSBub3QgaW4gbmFteDoKLSAgICAgICAgICAgICAgICBuYW14W2ZpZWxkc1swXV0gPSByZWNvcmQKLSAgICAgICAgZWxpZiBsZW4oZW50cnkpID4gMDoKLSAgICAgICAgICAgIHBhc3MgICAgICAgICAgICAgICAgICAgICAgICAgIyBza2lwIGVtcHR5IG9yIG1hbGZvcm1lZCByZWNvcmRzCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBicmVhawotICAgIHBhc3N3ZC5jbG9zZSgpCi0gICAgaWYgbGVuKHVpZHgpID09IDA6Ci0gICAgICAgIHJhaXNlIEtleUVycm9yCi0gICAgcmV0dXJuICh1aWR4LCBuYW14KQotCi0jIHJldHVybiB0aGUgcGFzc3dkIGRhdGFiYXNlIGVudHJ5IGJ5IFVJRAotZGVmIGdldHB3dWlkKHVpZCk6Ci0gICAgdSwgbiA9IF9fcmVhZF9wYXNzd2RfZmlsZSgpCi0gICAgcmV0dXJuIHVbdWlkXQotCi0jIHJldHVybiB0aGUgcGFzc3dkIGRhdGFiYXNlIGVudHJ5IGJ5IHBhc3N3ZCBuYW1lCi1kZWYgZ2V0cHduYW0obmFtZSk6Ci0gICAgdSwgbiA9IF9fcmVhZF9wYXNzd2RfZmlsZSgpCi0gICAgcmV0dXJuIG5bbmFtZV0KLQotIyByZXR1cm4gYWxsIHRoZSBwYXNzd2QgZGF0YWJhc2UgZW50cmllcwotZGVmIGdldHB3YWxsKCk6Ci0gICAgdSwgbiA9IF9fcmVhZF9wYXNzd2RfZmlsZSgpCi0gICAgcmV0dXJuIG4udmFsdWVzKCkKLQotIyB0ZXN0IGhhcm5lc3MKLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgZ2V0cHdhbGwoKQpkaWZmIC0tZ2l0IGEvTGliL3BsYXQtb3MyZW14L3JlZ2VuIGIvTGliL3BsYXQtb3MyZW14L3JlZ2VuCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAzZWNkMmE4Li4wMDAwMDAwCi0tLSBhL0xpYi9wbGF0LW9zMmVteC9yZWdlbgorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotIyEgL2Jpbi9zaAotZXhwb3J0IElOQ0xVREU9JENfSU5DTFVERV9QQVRICi1zZXQgLXYKLXB5dGhvbi5leGUgLi4vLi4vVG9vbHMvc2NyaXB0cy9oMnB5LnB5ICRDX0lOQ0xVREVfUEFUSC9mY250bC5oCi1weXRob24uZXhlIC4uLy4uL1Rvb2xzL3NjcmlwdHMvaDJweS5weSAkQ19JTkNMVURFX1BBVEgvc3lzL3NvY2tldC5oCi1weXRob24uZXhlIC4uLy4uL1Rvb2xzL3NjcmlwdHMvaDJweS5weSAtaSAnKHVfbG9uZyknICRDX0lOQ0xVREVfUEFUSC9uZXRpbmV0L2luLmgKLSNweXRob24uZXhlIC4uLy4uL1Rvb2xzL3NjcmlwdHMvaDJweS5weSAkQ19JTkNMVURFX1BBVEgvdGVybWlvcy5oCmRpZmYgLS1naXQgYS9MaWIvcGxhdGZvcm0ucHkgYi9MaWIvcGxhdGZvcm0ucHkKaW5kZXggMDMwZWYyYS4uYWQ0MjVhMSAxMDA3NTUKLS0tIGEvTGliL3BsYXRmb3JtLnB5CisrKyBiL0xpYi9wbGF0Zm9ybS5weQpAQCAtMjYsMTIgKzI2LDE0IEBACiAjICAgICAgQmV0YW5jb3VydCwgUmFuZGFsbCBIb3BwZXIsIEthcmwgUHV0bGFuZCwgSm9obiBGYXJyZWxsLCBHcmVnCiAjICAgICAgQW5kcnVrLCBKdXN0IHZhbiBSb3NzdW0sIFRob21hcyBIZWxsZXIsIE1hcmsgUi4gTGV2aW5zb24sIE1hcmsKICMgICAgICBIYW1tb25kLCBCaWxsIFR1dHQsIEhhbnMgTm93YWssIFV3ZSBaZXNzaW4gKE9wZW5WTVMgc3VwcG9ydCksCi0jICAgICAgQ29saW4gS29uZywgVHJlbnQgTWljaywgR3VpZG8gdmFuIFJvc3N1bSwgQW50aG9ueSBCYXh0ZXIKKyMgICAgICBDb2xpbiBLb25nLCBUcmVudCBNaWNrLCBHdWlkbyB2YW4gUm9zc3VtLCBBbnRob255IEJheHRlciwgU3RldmUKKyMgICAgICBEb3dlcgogIwogIyAgICBIaXN0b3J5OgogIwogIyAgICA8c2VlIENWUyBhbmQgU1ZOIGNoZWNraW4gbWVzc2FnZXMgZm9yIGhpc3Rvcnk+CiAjCisjICAgIDEuMC44IC0gY2hhbmdlZCBXaW5kb3dzIHN1cHBvcnQgdG8gcmVhZCB2ZXJzaW9uIGZyb20ga2VybmVsMzIuZGxsCiAjICAgIDEuMC43IC0gYWRkZWQgREVWX05VTEwKICMgICAgMS4wLjYgLSBhZGRlZCBsaW51eF9kaXN0cmlidXRpb24oKQogIyAgICAxLjAuNSAtIGZpeGVkIEphdmEgc3VwcG9ydCB0byBhbGxvdyBydW5uaW5nIHRoZSBtb2R1bGUgb24gSnl0aG9uCkBAIC0xMjIsNyArMTI0LDcgQEAKIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKICAgICAjIG9zLmRldm51bGwgd2FzIGFkZGVkIGluIFB5dGhvbiAyLjQsIHNvIGVtdWxhdGUgaXQgZm9yIGVhcmxpZXIKICAgICAjIFB5dGhvbiB2ZXJzaW9ucwotICAgIGlmIHN5cy5wbGF0Zm9ybSBpbiAoJ2RvcycsJ3dpbjMyJywnd2luMTYnLCdvczInKToKKyAgICBpZiBzeXMucGxhdGZvcm0gaW4gKCdkb3MnLCAnd2luMzInLCAnd2luMTYnKToKICAgICAgICAgIyBVc2UgdGhlIG9sZCBDUC9NIE5VTCBhcyBkZXZpY2UgbmFtZQogICAgICAgICBERVZfTlVMTCA9ICdOVUwnCiAgICAgZWxzZToKQEAgLTE0MSw3ICsxNDMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3wnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyJyhsaWJjKF9cdyspP1wuc28oPzpcLihcZFswLTkuXSopKT8pJywgcmUuQVNDSUkpCiAKLWRlZiBsaWJjX3ZlcihleGVjdXRhYmxlPXN5cy5leGVjdXRhYmxlLGxpYj0nJyx2ZXJzaW9uPScnLAorZGVmIGxpYmNfdmVyKGV4ZWN1dGFibGU9c3lzLmV4ZWN1dGFibGUsIGxpYj0nJywgdmVyc2lvbj0nJywKIAogICAgICAgICAgICAgIGNodW5rc2l6ZT0xNjM4NCk6CiAKQEAgLTE2MywxMiArMTY1LDEyIEBACiAgICAgICAgICMgaGVyZSB0byB3b3JrIGFyb3VuZCBwcm9ibGVtcyB3aXRoIEN5Z3dpbiBub3QgYmVpbmcKICAgICAgICAgIyBhYmxlIHRvIG9wZW4gc3ltbGlua3MgZm9yIHJlYWRpbmcKICAgICAgICAgZXhlY3V0YWJsZSA9IG9zLnBhdGgucmVhbHBhdGgoZXhlY3V0YWJsZSkKLSAgICBmID0gb3BlbihleGVjdXRhYmxlLCdyYicpCisgICAgZiA9IG9wZW4oZXhlY3V0YWJsZSwgJ3JiJykKICAgICBiaW5hcnkgPSBmLnJlYWQoY2h1bmtzaXplKQogICAgIHBvcyA9IDAKICAgICB3aGlsZSAxOgogICAgICAgICBpZiBiJ2xpYmMnIGluIGJpbmFyeSBvciBiJ0dMSUJDJyBpbiBiaW5hcnk6Ci0gICAgICAgICAgICBtID0gX2xpYmNfc2VhcmNoLnNlYXJjaChiaW5hcnkscG9zKQorICAgICAgICAgICAgbSA9IF9saWJjX3NlYXJjaC5zZWFyY2goYmluYXJ5LCBwb3MpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBtID0gTm9uZQogICAgICAgICBpZiBub3QgbToKQEAgLTE3Nyw3ICsxNzksNyBAQAogICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICBwb3MgPSAwCiAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICBsaWJjaW5pdCxnbGliYyxnbGliY3ZlcnNpb24sc28sdGhyZWFkcyxzb3ZlcnNpb24gPSBbCisgICAgICAgIGxpYmNpbml0LCBnbGliYywgZ2xpYmN2ZXJzaW9uLCBzbywgdGhyZWFkcywgc292ZXJzaW9uID0gWwogICAgICAgICAgICAgcy5kZWNvZGUoJ2xhdGluMScpIGlmIHMgaXMgbm90IE5vbmUgZWxzZSBzCiAgICAgICAgICAgICBmb3IgcyBpbiBtLmdyb3VwcygpXQogICAgICAgICBpZiBsaWJjaW5pdCBhbmQgbm90IGxpYjoKQEAgLTE5Nyw5ICsxOTksOSBAQAogICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uID0gdmVyc2lvbiArIHRocmVhZHMKICAgICAgICAgcG9zID0gbS5lbmQoKQogICAgIGYuY2xvc2UoKQotICAgIHJldHVybiBsaWIsdmVyc2lvbgorICAgIHJldHVybiBsaWIsIHZlcnNpb24KIAotZGVmIF9kaXN0X3RyeV9oYXJkZXIoZGlzdG5hbWUsdmVyc2lvbixpZCk6CitkZWYgX2Rpc3RfdHJ5X2hhcmRlcihkaXN0bmFtZSwgdmVyc2lvbiwgaWQpOgogCiAgICAgIiIiIFRyaWVzIHNvbWUgc3BlY2lhbCB0cmlja3MgdG8gZ2V0IHRoZSBkaXN0cmlidXRpb24KICAgICAgICAgaW5mb3JtYXRpb24gaW4gY2FzZSB0aGUgZGVmYXVsdCBtZXRob2QgZmFpbHMuCkBAIC0yMTQsNyArMjE2LDcgQEAKICAgICAgICAgZm9yIGxpbmUgaW4gb3BlbignL3Zhci9hZG0vaW5zdC1sb2cvaW5mbycpOgogICAgICAgICAgICAgdHYgPSBsaW5lLnNwbGl0KCkKICAgICAgICAgICAgIGlmIGxlbih0dikgPT0gMjoKLSAgICAgICAgICAgICAgICB0YWcsdmFsdWUgPSB0dgorICAgICAgICAgICAgICAgIHRhZywgdmFsdWUgPSB0dgogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgaWYgdGFnID09ICdNSU5fRElTVF9WRVJTSU9OJzoKQEAgLTIyMiw3ICsyMjQsNyBAQAogICAgICAgICAgICAgZWxpZiB0YWcgPT0gJ0RJU1RfSURFTlQnOgogICAgICAgICAgICAgICAgIHZhbHVlcyA9IHZhbHVlLnNwbGl0KCctJykKICAgICAgICAgICAgICAgICBpZCA9IHZhbHVlc1syXQotICAgICAgICByZXR1cm4gZGlzdG5hbWUsdmVyc2lvbixpZAorICAgICAgICByZXR1cm4gZGlzdG5hbWUsIHZlcnNpb24sIGlkCiAKICAgICBpZiBvcy5wYXRoLmV4aXN0cygnL2V0Yy8uaW5zdGFsbGVkJyk6CiAgICAgICAgICMgQ2FsZGVyYSBPcGVuTGludXggaGFzIHNvbWUgaW5mb3MgaW4gdGhhdCBmaWxlICh0aGFua3MgdG8gQ29saW4gS29uZykKQEAgLTIzMSw3ICsyMzMsNyBAQAogICAgICAgICAgICAgaWYgbGVuKHBrZykgPj0gMiBhbmQgcGtnWzBdID09ICdPcGVuTGludXgnOgogICAgICAgICAgICAgICAgICMgWFhYIGRvZXMgQ2FsZGVyYSBzdXBwb3J0IG5vbiBJbnRlbCBwbGF0Zm9ybXMgPyBJZiB5ZXMsCiAgICAgICAgICAgICAgICAgIyAgICAgd2hlcmUgY2FuIHdlIGZpbmQgdGhlIG5lZWRlZCBpZCA/Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdPcGVuTGludXgnLHBrZ1sxXSxpZAorICAgICAgICAgICAgICAgIHJldHVybiAnT3BlbkxpbnV4JywgcGtnWzFdLCBpZAogCiAgICAgaWYgb3MucGF0aC5pc2RpcignL3Vzci9saWIvc2V0dXAnKToKICAgICAgICAgIyBDaGVjayBmb3Igc2xhY2t3YXJlIHZlcnNpb24gdGFnIGZpbGUgKHRoYW5rcyB0byBHcmVnIEFuZHJ1aykKQEAgLTI0Myw5ICsyNDUsOSBAQAogICAgICAgICAgICAgdmVyZmlsZXMuc29ydCgpCiAgICAgICAgICAgICBkaXN0bmFtZSA9ICdzbGFja3dhcmUnCiAgICAgICAgICAgICB2ZXJzaW9uID0gdmVyZmlsZXNbLTFdWzE0Ol0KLSAgICAgICAgICAgIHJldHVybiBkaXN0bmFtZSx2ZXJzaW9uLGlkCisgICAgICAgICAgICByZXR1cm4gZGlzdG5hbWUsIHZlcnNpb24sIGlkCiAKLSAgICByZXR1cm4gZGlzdG5hbWUsdmVyc2lvbixpZAorICAgIHJldHVybiBkaXN0bmFtZSwgdmVyc2lvbiwgaWQKIAogX3JlbGVhc2VfZmlsZW5hbWUgPSByZS5jb21waWxlKHInKFx3KylbLV9dKHJlbGVhc2V8dmVyc2lvbiknLCByZS5BU0NJSSkKIF9sc2JfcmVsZWFzZV92ZXJzaW9uID0gcmUuY29tcGlsZShyJyguKyknCkBAIC0zMTQsMjUgKzMxNiwyNSBAQAogICAgICAgICBkaXN0cmlidXRpb24gcmVhZCBmcm9tIHRoZSBPUyBpcyByZXR1cm5lZC4gT3RoZXJ3aXNlIHRoZSBzaG9ydAogICAgICAgICBuYW1lIHRha2VuIGZyb20gc3VwcG9ydGVkX2Rpc3RzIGlzIHVzZWQuCiAKLSAgICAgICAgUmV0dXJucyBhIHR1cGxlIChkaXN0bmFtZSx2ZXJzaW9uLGlkKSB3aGljaCBkZWZhdWx0IHRvIHRoZQorICAgICAgICBSZXR1cm5zIGEgdHVwbGUgKGRpc3RuYW1lLCB2ZXJzaW9uLCBpZCkgd2hpY2ggZGVmYXVsdCB0byB0aGUKICAgICAgICAgYXJncyBnaXZlbiBhcyBwYXJhbWV0ZXJzLgogCiAgICAgIiIiCiAgICAgdHJ5OgogICAgICAgICBldGMgPSBvcy5saXN0ZGlyKF9VTklYQ09ORkRJUikKLSAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICMgUHJvYmFibHkgbm90IGEgVW5peCBzeXN0ZW0KLSAgICAgICAgcmV0dXJuIGRpc3RuYW1lLHZlcnNpb24saWQKKyAgICAgICAgcmV0dXJuIGRpc3RuYW1lLCB2ZXJzaW9uLCBpZAogICAgIGV0Yy5zb3J0KCkKICAgICBmb3IgZmlsZSBpbiBldGM6CiAgICAgICAgIG0gPSBfcmVsZWFzZV9maWxlbmFtZS5tYXRjaChmaWxlKQogICAgICAgICBpZiBtIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgX2Rpc3RuYW1lLGR1bW15ID0gbS5ncm91cHMoKQorICAgICAgICAgICAgX2Rpc3RuYW1lLCBkdW1teSA9IG0uZ3JvdXBzKCkKICAgICAgICAgICAgIGlmIF9kaXN0bmFtZSBpbiBzdXBwb3J0ZWRfZGlzdHM6CiAgICAgICAgICAgICAgICAgZGlzdG5hbWUgPSBfZGlzdG5hbWUKICAgICAgICAgICAgICAgICBicmVhawogICAgIGVsc2U6Ci0gICAgICAgIHJldHVybiBfZGlzdF90cnlfaGFyZGVyKGRpc3RuYW1lLHZlcnNpb24saWQpCisgICAgICAgIHJldHVybiBfZGlzdF90cnlfaGFyZGVyKGRpc3RuYW1lLCB2ZXJzaW9uLCBpZCkKIAogICAgICMgUmVhZCB0aGUgZmlyc3QgbGluZQogICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oX1VOSVhDT05GRElSLCBmaWxlKSwgJ3InLApAQCAtMzUwLDcgKzM1Miw3IEBACiAKICMgVG8gbWFpbnRhaW4gYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CiAKLWRlZiBkaXN0KGRpc3RuYW1lPScnLHZlcnNpb249JycsaWQ9JycsCitkZWYgZGlzdChkaXN0bmFtZT0nJywgdmVyc2lvbj0nJywgaWQ9JycsCiAKICAgICAgICAgIHN1cHBvcnRlZF9kaXN0cz1fc3VwcG9ydGVkX2Rpc3RzKToKIApAQCAtMzYwLDcgKzM2Miw3IEBACiAgICAgICAgIC9ldGMgYW5kIHRoZW4gcmV2ZXJ0cyB0byBfZGlzdF90cnlfaGFyZGVyKCkgaW4gY2FzZSBubwogICAgICAgICBzdWl0YWJsZSBmaWxlcyBhcmUgZm91bmQuCiAKLSAgICAgICAgUmV0dXJucyBhIHR1cGxlIChkaXN0bmFtZSx2ZXJzaW9uLGlkKSB3aGljaCBkZWZhdWx0IHRvIHRoZQorICAgICAgICBSZXR1cm5zIGEgdHVwbGUgKGRpc3RuYW1lLCB2ZXJzaW9uLCBpZCkgd2hpY2ggZGVmYXVsdCB0byB0aGUKICAgICAgICAgYXJncyBnaXZlbiBhcyBwYXJhbWV0ZXJzLgogCiAgICAgIiIiCkBAIC0zODUsMTEgKzM4NywxMSBAQAogICAgIGlmIGJ1aWxkOgogICAgICAgICBsLmFwcGVuZChidWlsZCkKICAgICB0cnk6Ci0gICAgICAgIGludHMgPSBtYXAoaW50LGwpCisgICAgICAgIGludHMgPSBtYXAoaW50LCBsKQogICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgogICAgICAgICBzdHJpbmdzID0gbAogICAgIGVsc2U6Ci0gICAgICAgIHN0cmluZ3MgPSBsaXN0KG1hcChzdHIsaW50cykpCisgICAgICAgIHN0cmluZ3MgPSBsaXN0KG1hcChzdHIsIGludHMpKQogICAgIHZlcnNpb24gPSAnLicuam9pbihzdHJpbmdzWzozXSkKICAgICByZXR1cm4gdmVyc2lvbgogCkBAIC00MDgsNDYgKzQxMCw0MyBAQAogCiBkZWYgX3N5c2NtZF92ZXIoc3lzdGVtPScnLCByZWxlYXNlPScnLCB2ZXJzaW9uPScnLAogCi0gICAgICAgICAgICAgICBzdXBwb3J0ZWRfcGxhdGZvcm1zPSgnd2luMzInLCd3aW4xNicsJ2RvcycsJ29zMicpKToKKyAgICAgICAgICAgICAgIHN1cHBvcnRlZF9wbGF0Zm9ybXM9KCd3aW4zMicsICd3aW4xNicsICdkb3MnKSk6CiAKICAgICAiIiIgVHJpZXMgdG8gZmlndXJlIG91dCB0aGUgT1MgdmVyc2lvbiB1c2VkIGFuZCByZXR1cm5zCi0gICAgICAgIGEgdHVwbGUgKHN5c3RlbSxyZWxlYXNlLHZlcnNpb24pLgorICAgICAgICBhIHR1cGxlIChzeXN0ZW0sIHJlbGVhc2UsIHZlcnNpb24pLgogCiAgICAgICAgIEl0IHVzZXMgdGhlICJ2ZXIiIHNoZWxsIGNvbW1hbmQgZm9yIHRoaXMgd2hpY2ggaXMga25vd24KLSAgICAgICAgdG8gZXhpc3RzIG9uIFdpbmRvd3MsIERPUyBhbmQgT1MvMi4gWFhYIE90aGVycyB0b28gPworICAgICAgICB0byBleGlzdHMgb24gV2luZG93cywgRE9TLiBYWFggT3RoZXJzIHRvbyA/CiAKICAgICAgICAgSW4gY2FzZSB0aGlzIGZhaWxzLCB0aGUgZ2l2ZW4gcGFyYW1ldGVycyBhcmUgdXNlZCBhcwogICAgICAgICBkZWZhdWx0cy4KIAogICAgICIiIgogICAgIGlmIHN5cy5wbGF0Zm9ybSBub3QgaW4gc3VwcG9ydGVkX3BsYXRmb3JtczoKLSAgICAgICAgcmV0dXJuIHN5c3RlbSxyZWxlYXNlLHZlcnNpb24KKyAgICAgICAgcmV0dXJuIHN5c3RlbSwgcmVsZWFzZSwgdmVyc2lvbgogCiAgICAgIyBUcnkgc29tZSBjb21tb24gY21kIHN0cmluZ3MKLSAgICBmb3IgY21kIGluICgndmVyJywnY29tbWFuZCAvYyB2ZXInLCdjbWQgL2MgdmVyJyk6CisgICAgZm9yIGNtZCBpbiAoJ3ZlcicsICdjb21tYW5kIC9jIHZlcicsICdjbWQgL2MgdmVyJyk6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHBpcGUgPSBwb3BlbihjbWQpCiAgICAgICAgICAgICBpbmZvID0gcGlwZS5yZWFkKCkKICAgICAgICAgICAgIGlmIHBpcGUuY2xvc2UoKToKLSAgICAgICAgICAgICAgICByYWlzZSBvcy5lcnJvcignY29tbWFuZCBmYWlsZWQnKQorICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoJ2NvbW1hbmQgZmFpbGVkJykKICAgICAgICAgICAgICMgWFhYIEhvdyBjYW4gSSBzdXBwcmVzcyBzaGVsbCBlcnJvcnMgZnJvbSBiZWluZyB3cml0dGVuCiAgICAgICAgICAgICAjICAgICB0byBzdGRlcnIgPwotICAgICAgICBleGNlcHQgb3MuZXJyb3IgYXMgd2h5OgotICAgICAgICAgICAgI3ByaW50ICdDb21tYW5kICVzIGZhaWxlZDogJXMnICUgKGNtZCx3aHkpCi0gICAgICAgICAgICBjb250aW51ZQotICAgICAgICBleGNlcHQgSU9FcnJvciBhcyB3aHk6Ci0gICAgICAgICAgICAjcHJpbnQgJ0NvbW1hbmQgJXMgZmFpbGVkOiAlcycgJSAoY21kLHdoeSkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgd2h5OgorICAgICAgICAgICAgI3ByaW50ICdDb21tYW5kICVzIGZhaWxlZDogJXMnICUgKGNtZCwgd2h5KQogICAgICAgICAgICAgY29udGludWUKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGJyZWFrCiAgICAgZWxzZToKLSAgICAgICAgcmV0dXJuIHN5c3RlbSxyZWxlYXNlLHZlcnNpb24KKyAgICAgICAgcmV0dXJuIHN5c3RlbSwgcmVsZWFzZSwgdmVyc2lvbgogCiAgICAgIyBQYXJzZSB0aGUgb3V0cHV0CiAgICAgaW5mbyA9IGluZm8uc3RyaXAoKQogICAgIG0gPSBfdmVyX291dHB1dC5tYXRjaChpbmZvKQogICAgIGlmIG0gaXMgbm90IE5vbmU6Ci0gICAgICAgIHN5c3RlbSxyZWxlYXNlLHZlcnNpb24gPSBtLmdyb3VwcygpCisgICAgICAgIHN5c3RlbSwgcmVsZWFzZSwgdmVyc2lvbiA9IG0uZ3JvdXBzKCkKICAgICAgICAgIyBTdHJpcCB0cmFpbGluZyBkb3RzIGZyb20gdmVyc2lvbiBhbmQgcmVsZWFzZQogICAgICAgICBpZiByZWxlYXNlWy0xXSA9PSAnLic6CiAgICAgICAgICAgICByZWxlYXNlID0gcmVsZWFzZVs6LTFdCkBAIC00NTYsMjQ3ICs0NTUsMTQzIEBACiAgICAgICAgICMgTm9ybWFsaXplIHRoZSB2ZXJzaW9uIGFuZCBidWlsZCBzdHJpbmdzIChlbGltaW5hdGluZyBhZGRpdGlvbmFsCiAgICAgICAgICMgemVyb3MpCiAgICAgICAgIHZlcnNpb24gPSBfbm9ybV92ZXJzaW9uKHZlcnNpb24pCi0gICAgcmV0dXJuIHN5c3RlbSxyZWxlYXNlLHZlcnNpb24KKyAgICByZXR1cm4gc3lzdGVtLCByZWxlYXNlLCB2ZXJzaW9uCiAKLWRlZiBfd2luMzJfZ2V0dmFsdWUoa2V5LG5hbWUsZGVmYXVsdD0nJyk6CitfV0lOMzJfQ0xJRU5UX1JFTEVBU0VTID0geworICAgICg1LCAwKTogIjIwMDAiLAorICAgICg1LCAxKTogIlhQIiwKKyAgICAjIFN0cmljdGx5LCA1LjIgY2xpZW50IGlzIFhQIDY0LWJpdCwgYnV0IHBsYXRmb3JtLnB5IGhpc3RvcmljYWxseQorICAgICMgaGFzIGFsd2F5cyBjYWxsZWQgaXQgMjAwMyBTZXJ2ZXIKKyAgICAoNSwgMik6ICIyMDAzU2VydmVyIiwKKyAgICAoNSwgTm9uZSk6ICJwb3N0MjAwMyIsCiAKLSAgICAiIiIgUmVhZCBhIHZhbHVlIGZvciBuYW1lIGZyb20gdGhlIHJlZ2lzdHJ5IGtleS4KKyAgICAoNiwgMCk6ICJWaXN0YSIsCisgICAgKDYsIDEpOiAiNyIsCisgICAgKDYsIDIpOiAiOCIsCisgICAgKDYsIDMpOiAiOC4xIiwKKyAgICAoNiwgTm9uZSk6ICJwb3N0OC4xIiwKIAotICAgICAgICBJbiBjYXNlIHRoaXMgZmFpbHMsIGRlZmF1bHQgaXMgcmV0dXJuZWQuCisgICAgKDEwLCAwKTogIjEwIiwKKyAgICAoMTAsIE5vbmUpOiAicG9zdDEwIiwKK30KIAotICAgICIiIgorIyBTZXJ2ZXIgcmVsZWFzZSBuYW1lIGxvb2t1cCB3aWxsIGRlZmF1bHQgdG8gY2xpZW50IG5hbWVzIGlmIG5lY2Vzc2FyeQorX1dJTjMyX1NFUlZFUl9SRUxFQVNFUyA9IHsKKyAgICAoNSwgMik6ICIyMDAzU2VydmVyIiwKKworICAgICg2LCAwKTogIjIwMDhTZXJ2ZXIiLAorICAgICg2LCAxKTogIjIwMDhTZXJ2ZXJSMiIsCisgICAgKDYsIDIpOiAiMjAxMlNlcnZlciIsCisgICAgKDYsIDMpOiAiMjAxMlNlcnZlclIyIiwKKyAgICAoNiwgTm9uZSk6ICJwb3N0MjAxMlNlcnZlclIyIiwKK30KKworZGVmIF9nZXRfcmVhbF93aW52ZXIobWFqLCBtaW4sIGJ1aWxkKToKKyAgICBpZiBtYWogPCA2IG9yIChtYWogPT0gNiBhbmQgbWluIDwgMik6CisgICAgICAgIHJldHVybiBtYWosIG1pbiwgYnVpbGQKKworICAgIGZyb20gY3R5cGVzIGltcG9ydCAoY19idWZmZXIsIFBPSU5URVIsIGJ5cmVmLCBjcmVhdGVfdW5pY29kZV9idWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUsIFdpbkRMTCkKKyAgICBmcm9tIGN0eXBlcy53aW50eXBlcyBpbXBvcnQgRFdPUkQsIEhBTkRMRQorCisgICAgY2xhc3MgVlNfRklYRURGSUxFSU5GTyhTdHJ1Y3R1cmUpOgorICAgICAgICBfZmllbGRzXyA9IFsKKyAgICAgICAgICAgICgiZHdTaWduYXR1cmUiLCBEV09SRCksCisgICAgICAgICAgICAoImR3U3RydWNWZXJzaW9uIiwgRFdPUkQpLAorICAgICAgICAgICAgKCJkd0ZpbGVWZXJzaW9uTVMiLCBEV09SRCksCisgICAgICAgICAgICAoImR3RmlsZVZlcnNpb25MUyIsIERXT1JEKSwKKyAgICAgICAgICAgICgiZHdQcm9kdWN0VmVyc2lvbk1TIiwgRFdPUkQpLAorICAgICAgICAgICAgKCJkd1Byb2R1Y3RWZXJzaW9uTFMiLCBEV09SRCksCisgICAgICAgICAgICAoImR3RmlsZUZsYWdzTWFzayIsIERXT1JEKSwKKyAgICAgICAgICAgICgiZHdGaWxlRmxhZ3MiLCBEV09SRCksCisgICAgICAgICAgICAoImR3RmlsZU9TIiwgRFdPUkQpLAorICAgICAgICAgICAgKCJkd0ZpbGVUeXBlIiwgRFdPUkQpLAorICAgICAgICAgICAgKCJkd0ZpbGVTdWJ0eXBlIiwgRFdPUkQpLAorICAgICAgICAgICAgKCJkd0ZpbGVEYXRlTVMiLCBEV09SRCksCisgICAgICAgICAgICAoImR3RmlsZURhdGVMUyIsIERXT1JEKSwKKyAgICAgICAgXQorCisgICAga2VybmVsMzIgPSBXaW5ETEwoJ2tlcm5lbDMyJykKKyAgICB2ZXJzaW9uID0gV2luRExMKCd2ZXJzaW9uJykKKworICAgICMgV2Ugd2lsbCBpbW1lZGlhdGVseSBkb3VibGUgdGhlIGxlbmd0aCB1cCB0byBNQVhfUEFUSCwgYnV0IHRoZQorICAgICMgcGF0aCBtYXkgYmUgbG9uZ2VyLCBzbyB3ZSByZXRyeSB1bnRpbCB0aGUgcmV0dXJuZWQgc3RyaW5nIGlzCisgICAgIyBzaG9ydGVyIHRoYW4gb3VyIGJ1ZmZlci4KKyAgICBuYW1lX2xlbiA9IGFjdHVhbF9sZW4gPSAxMzAKKyAgICB3aGlsZSBhY3R1YWxfbGVuID09IG5hbWVfbGVuOgorICAgICAgICBuYW1lX2xlbiAqPSAyCisgICAgICAgIG5hbWUgPSBjcmVhdGVfdW5pY29kZV9idWZmZXIobmFtZV9sZW4pCisgICAgICAgIGFjdHVhbF9sZW4gPSBrZXJuZWwzMi5HZXRNb2R1bGVGaWxlTmFtZVcoSEFORExFKGtlcm5lbDMyLl9oYW5kbGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsIGxlbihuYW1lKSkKKyAgICAgICAgaWYgbm90IGFjdHVhbF9sZW46CisgICAgICAgICAgICByZXR1cm4gbWFqLCBtaW4sIGJ1aWxkCisKKyAgICBzaXplID0gdmVyc2lvbi5HZXRGaWxlVmVyc2lvbkluZm9TaXplVyhuYW1lLCBOb25lKQorICAgIGlmIG5vdCBzaXplOgorICAgICAgICByZXR1cm4gbWFqLCBtaW4sIGJ1aWxkCisKKyAgICB2ZXJfYmxvY2sgPSBjX2J1ZmZlcihzaXplKQorICAgIGlmIChub3QgdmVyc2lvbi5HZXRGaWxlVmVyc2lvbkluZm9XKG5hbWUsIE5vbmUsIHNpemUsIHZlcl9ibG9jaykgb3IKKyAgICAgICAgbm90IHZlcl9ibG9jayk6CisgICAgICAgIHJldHVybiBtYWosIG1pbiwgYnVpbGQKKworICAgIHB2aSA9IFBPSU5URVIoVlNfRklYRURGSUxFSU5GTykoKQorICAgIGlmIG5vdCB2ZXJzaW9uLlZlclF1ZXJ5VmFsdWVXKHZlcl9ibG9jaywgIiIsIGJ5cmVmKHB2aSksIGJ5cmVmKERXT1JEKCkpKToKKyAgICAgICAgcmV0dXJuIG1haiwgbWluLCBidWlsZAorCisgICAgbWFqID0gcHZpLmNvbnRlbnRzLmR3UHJvZHVjdFZlcnNpb25NUyA+PiAxNgorICAgIG1pbiA9IHB2aS5jb250ZW50cy5kd1Byb2R1Y3RWZXJzaW9uTVMgJiAweEZGRkYKKyAgICBidWlsZCA9IHB2aS5jb250ZW50cy5kd1Byb2R1Y3RWZXJzaW9uTFMgPj4gMTYKKworICAgIHJldHVybiBtYWosIG1pbiwgYnVpbGQKKworZGVmIHdpbjMyX3ZlcihyZWxlYXNlPScnLCB2ZXJzaW9uPScnLCBjc2Q9JycsIHB0eXBlPScnKToKICAgICB0cnk6Ci0gICAgICAgICMgVXNlIHdpbjMyYXBpIGlmIGF2YWlsYWJsZQotICAgICAgICBmcm9tIHdpbjMyYXBpIGltcG9ydCBSZWdRdWVyeVZhbHVlRXgKKyAgICAgICAgZnJvbSBzeXMgaW1wb3J0IGdldHdpbmRvd3N2ZXJzaW9uCiAgICAgZXhjZXB0IEltcG9ydEVycm9yOgotICAgICAgICAjIE9uIFB5dGhvbiAyLjAgYW5kIGxhdGVyLCBlbXVsYXRlIHVzaW5nIHdpbnJlZwotICAgICAgICBpbXBvcnQgd2lucmVnCi0gICAgICAgIFJlZ1F1ZXJ5VmFsdWVFeCA9IHdpbnJlZy5RdWVyeVZhbHVlRXgKKyAgICAgICAgcmV0dXJuIHJlbGVhc2UsIHZlcnNpb24sIGNzZCwgcHR5cGUKICAgICB0cnk6Ci0gICAgICAgIHJldHVybiBSZWdRdWVyeVZhbHVlRXgoa2V5LG5hbWUpCi0gICAgZXhjZXB0OgotICAgICAgICByZXR1cm4gZGVmYXVsdAotCi1kZWYgd2luMzJfdmVyKHJlbGVhc2U9JycsdmVyc2lvbj0nJyxjc2Q9JycscHR5cGU9JycpOgotCi0gICAgIiIiIEdldCBhZGRpdGlvbmFsIHZlcnNpb24gaW5mb3JtYXRpb24gZnJvbSB0aGUgV2luZG93cyBSZWdpc3RyeQotICAgICAgICBhbmQgcmV0dXJuIGEgdHVwbGUgKHZlcnNpb24sY3NkLHB0eXBlKSByZWZlcnJpbmcgdG8gdmVyc2lvbgotICAgICAgICBudW1iZXIsIENTRCBsZXZlbCAoc2VydmljZSBwYWNrKSwgYW5kIE9TIHR5cGUgKG11bHRpL3NpbmdsZQotICAgICAgICBwcm9jZXNzb3IpLgotCi0gICAgICAgIEFzIGEgaGludDogcHR5cGUgcmV0dXJucyAnVW5pcHJvY2Vzc29yIEZyZWUnIG9uIHNpbmdsZQotICAgICAgICBwcm9jZXNzb3IgTlQgbWFjaGluZXMgYW5kICdNdWx0aXByb2Nlc3NvciBGcmVlJyBvbiBtdWx0aQotICAgICAgICBwcm9jZXNzb3IgbWFjaGluZXMuIFRoZSAnRnJlZScgcmVmZXJzIHRvIHRoZSBPUyB2ZXJzaW9uIGJlaW5nCi0gICAgICAgIGZyZWUgb2YgZGVidWdnaW5nIGNvZGUuIEl0IGNvdWxkIGFsc28gc3RhdGUgJ0NoZWNrZWQnIHdoaWNoCi0gICAgICAgIG1lYW5zIHRoZSBPUyB2ZXJzaW9uIHVzZXMgZGVidWdnaW5nIGNvZGUsIGkuZS4gY29kZSB0aGF0Ci0gICAgICAgIGNoZWNrcyBhcmd1bWVudHMsIHJhbmdlcywgZXRjLiAoVGhvbWFzIEhlbGxlcikuCi0KLSAgICAgICAgTm90ZTogdGhpcyBmdW5jdGlvbiB3b3JrcyBiZXN0IHdpdGggTWFyayBIYW1tb25kJ3Mgd2luMzIKLSAgICAgICAgcGFja2FnZSBpbnN0YWxsZWQsIGJ1dCBhbHNvIG9uIFB5dGhvbiAyLjMgYW5kIGxhdGVyLiBJdAotICAgICAgICBvYnZpb3VzbHkgb25seSBydW5zIG9uIFdpbjMyIGNvbXBhdGlibGUgcGxhdGZvcm1zLgotCi0gICAgIiIiCi0gICAgIyBYWFggSXMgdGhlcmUgYW55IHdheSB0byBmaW5kIG91dCB0aGUgcHJvY2Vzc29yIHR5cGUgb24gV2luWFggPwotICAgICMgWFhYIElzIHdpbjMyIGF2YWlsYWJsZSBvbiBXaW5kb3dzIENFID8KLSAgICAjCi0gICAgIyBBZGFwdGVkIGZyb20gY29kZSBwb3N0ZWQgYnkgS2FybCBQdXRsYW5kIHRvIGNvbXAubGFuZy5weXRob24uCi0gICAgIwotICAgICMgVGhlIG1hcHBpbmdzIGJldHdlZW4gcmVnLiB2YWx1ZXMgYW5kIHJlbGVhc2UgbmFtZXMgY2FuIGJlIGZvdW5kCi0gICAgIyBoZXJlOiBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2xpYnJhcnkvZW4tdXMvc3lzaW5mby9iYXNlL29zdmVyc2lvbmluZm9fc3RyLmFzcAotCi0gICAgIyBJbXBvcnQgdGhlIG5lZWRlZCBBUElzCi0gICAgdHJ5OgotICAgICAgICBpbXBvcnQgd2luMzJhcGkKLSAgICAgICAgZnJvbSB3aW4zMmFwaSBpbXBvcnQgUmVnUXVlcnlWYWx1ZUV4LCBSZWdPcGVuS2V5RXgsIFwKLSAgICAgICAgICAgICBSZWdDbG9zZUtleSwgR2V0VmVyc2lvbkV4Ci0gICAgICAgIGZyb20gd2luMzJjb24gaW1wb3J0IEhLRVlfTE9DQUxfTUFDSElORSwgVkVSX1BMQVRGT1JNX1dJTjMyX05ULCBcCi0gICAgICAgICAgICAgVkVSX1BMQVRGT1JNX1dJTjMyX1dJTkRPV1MsIFZFUl9OVF9XT1JLU1RBVElPTgorICAgICAgICBmcm9tIHdpbnJlZyBpbXBvcnQgT3BlbktleUV4LCBRdWVyeVZhbHVlRXgsIENsb3NlS2V5LCBIS0VZX0xPQ0FMX01BQ0hJTkUKICAgICBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgICAgICMgRW11bGF0ZSB0aGUgd2luMzJhcGkgbW9kdWxlIHVzaW5nIFB5dGhvbiBBUElzCisgICAgICAgIGZyb20gX3dpbnJlZyBpbXBvcnQgT3BlbktleUV4LCBRdWVyeVZhbHVlRXgsIENsb3NlS2V5LCBIS0VZX0xPQ0FMX01BQ0hJTkUKKworICAgIHdpbnZlciA9IGdldHdpbmRvd3N2ZXJzaW9uKCkKKyAgICBtYWosIG1pbiwgYnVpbGQgPSBfZ2V0X3JlYWxfd2ludmVyKCp3aW52ZXJbOjNdKQorICAgIHZlcnNpb24gPSAnezB9LnsxfS57Mn0nLmZvcm1hdChtYWosIG1pbiwgYnVpbGQpCisKKyAgICByZWxlYXNlID0gKF9XSU4zMl9DTElFTlRfUkVMRUFTRVMuZ2V0KChtYWosIG1pbikpIG9yCisgICAgICAgICAgICAgICBfV0lOMzJfQ0xJRU5UX1JFTEVBU0VTLmdldCgobWFqLCBOb25lKSkgb3IKKyAgICAgICAgICAgICAgIHJlbGVhc2UpCisKKyAgICAjIGdldHdpbmRvd3N2ZXJzaW9uKCkgcmVmbGVjdCB0aGUgY29tcGF0aWJpbGl0eSBtb2RlIFB5dGhvbiBpcworICAgICMgcnVubmluZyB1bmRlciwgYW5kIHNvIHRoZSBzZXJ2aWNlIHBhY2sgdmFsdWUgaXMgb25seSBnb2luZyB0byBiZQorICAgICMgdmFsaWQgaWYgdGhlIHZlcnNpb25zIG1hdGNoLgorICAgIGlmIHdpbnZlcls6Ml0gPT0gKG1haiwgbWluKToKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgc3lzLmdldHdpbmRvd3N2ZXJzaW9uCisgICAgICAgICAgICBjc2QgPSAnU1B7fScuZm9ybWF0KHdpbnZlci5zZXJ2aWNlX3BhY2tfbWFqb3IpCiAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICAgICAgICAgICMgTm8gZW11bGF0aW9uIHBvc3NpYmxlLCBzbyByZXR1cm4gdGhlIGRlZmF1bHRzLi4uCi0gICAgICAgICAgICByZXR1cm4gcmVsZWFzZSx2ZXJzaW9uLGNzZCxwdHlwZQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgIyBFbXVsYXRpb24gdXNpbmcgd2lucmVnIChhZGRlZCBpbiBQeXRob24gMi4wKSBhbmQKLSAgICAgICAgICAgICMgc3lzLmdldHdpbmRvd3N2ZXJzaW9uKCkgKGFkZGVkIGluIFB5dGhvbiAyLjMpCi0gICAgICAgICAgICBpbXBvcnQgd2lucmVnCi0gICAgICAgICAgICBHZXRWZXJzaW9uRXggPSBzeXMuZ2V0d2luZG93c3ZlcnNpb24KLSAgICAgICAgICAgIFJlZ1F1ZXJ5VmFsdWVFeCA9IHdpbnJlZy5RdWVyeVZhbHVlRXgKLSAgICAgICAgICAgIFJlZ09wZW5LZXlFeCA9IHdpbnJlZy5PcGVuS2V5RXgKLSAgICAgICAgICAgIFJlZ0Nsb3NlS2V5ID0gd2lucmVnLkNsb3NlS2V5Ci0gICAgICAgICAgICBIS0VZX0xPQ0FMX01BQ0hJTkUgPSB3aW5yZWcuSEtFWV9MT0NBTF9NQUNISU5FCi0gICAgICAgICAgICBWRVJfUExBVEZPUk1fV0lOMzJfV0lORE9XUyA9IDEKLSAgICAgICAgICAgIFZFUl9QTEFURk9STV9XSU4zMl9OVCA9IDIKLSAgICAgICAgICAgIFZFUl9OVF9XT1JLU1RBVElPTiA9IDEKLSAgICAgICAgICAgIFZFUl9OVF9TRVJWRVIgPSAzCi0gICAgICAgICAgICBSRUdfU1ogPSAxCisgICAgICAgICAgICBpZiBjc2RbOjEzXSA9PSAnU2VydmljZSBQYWNrICc6CisgICAgICAgICAgICAgICAgY3NkID0gJ1NQJyArIGNzZFsxMzpdCiAKLSAgICAjIEZpbmQgb3V0IHRoZSByZWdpc3RyeSBrZXkgYW5kIHNvbWUgZ2VuZXJhbCB2ZXJzaW9uIGluZm9zCi0gICAgd2ludmVyID0gR2V0VmVyc2lvbkV4KCkKLSAgICBtYWosbWluLGJ1aWxkbm8scGxhdCxjc2QgPSB3aW52ZXIKLSAgICB2ZXJzaW9uID0gJyVpLiVpLiVpJyAlIChtYWosbWluLGJ1aWxkbm8gJiAweEZGRkYpCi0gICAgaWYgaGFzYXR0cih3aW52ZXIsICJzZXJ2aWNlX3BhY2siKToKLSAgICAgICAgaWYgd2ludmVyLnNlcnZpY2VfcGFjayAhPSAiIjoKLSAgICAgICAgICAgIGNzZCA9ICdTUCVzJyAlIHdpbnZlci5zZXJ2aWNlX3BhY2tfbWFqb3IKLSAgICBlbHNlOgotICAgICAgICBpZiBjc2RbOjEzXSA9PSAnU2VydmljZSBQYWNrICc6Ci0gICAgICAgICAgICBjc2QgPSAnU1AnICsgY3NkWzEzOl0KKyAgICAjIFZFUl9OVF9TRVJWRVIgPSAzCisgICAgaWYgZ2V0YXR0cih3aW52ZXIsICdwcm9kdWN0X3R5cGUnLCBOb25lKSA9PSAzOgorICAgICAgICByZWxlYXNlID0gKF9XSU4zMl9TRVJWRVJfUkVMRUFTRVMuZ2V0KChtYWosIG1pbikpIG9yCisgICAgICAgICAgICAgICAgICAgX1dJTjMyX1NFUlZFUl9SRUxFQVNFUy5nZXQoKG1haiwgTm9uZSkpIG9yCisgICAgICAgICAgICAgICAgICAgcmVsZWFzZSkKIAotICAgIGlmIHBsYXQgPT0gVkVSX1BMQVRGT1JNX1dJTjMyX1dJTkRPV1M6Ci0gICAgICAgIHJlZ2tleSA9ICdTT0ZUV0FSRVxcTWljcm9zb2Z0XFxXaW5kb3dzXFxDdXJyZW50VmVyc2lvbicKLSAgICAgICAgIyBUcnkgdG8gZ3Vlc3MgdGhlIHJlbGVhc2UgbmFtZQotICAgICAgICBpZiBtYWogPT0gNDoKLSAgICAgICAgICAgIGlmIG1pbiA9PSAwOgotICAgICAgICAgICAgICAgIHJlbGVhc2UgPSAnOTUnCi0gICAgICAgICAgICBlbGlmIG1pbiA9PSAxMDoKLSAgICAgICAgICAgICAgICByZWxlYXNlID0gJzk4JwotICAgICAgICAgICAgZWxpZiBtaW4gPT0gOTA6Ci0gICAgICAgICAgICAgICAgcmVsZWFzZSA9ICdNZScKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmVsZWFzZSA9ICdwb3N0TWUnCi0gICAgICAgIGVsaWYgbWFqID09IDU6Ci0gICAgICAgICAgICByZWxlYXNlID0gJzIwMDAnCi0KLSAgICBlbGlmIHBsYXQgPT0gVkVSX1BMQVRGT1JNX1dJTjMyX05UOgotICAgICAgICByZWdrZXkgPSAnU09GVFdBUkVcXE1pY3Jvc29mdFxcV2luZG93cyBOVFxcQ3VycmVudFZlcnNpb24nCi0gICAgICAgIGlmIG1haiA8PSA0OgotICAgICAgICAgICAgcmVsZWFzZSA9ICdOVCcKLSAgICAgICAgZWxpZiBtYWogPT0gNToKLSAgICAgICAgICAgIGlmIG1pbiA9PSAwOgotICAgICAgICAgICAgICAgIHJlbGVhc2UgPSAnMjAwMCcKLSAgICAgICAgICAgIGVsaWYgbWluID09IDE6Ci0gICAgICAgICAgICAgICAgcmVsZWFzZSA9ICdYUCcKLSAgICAgICAgICAgIGVsaWYgbWluID09IDI6Ci0gICAgICAgICAgICAgICAgcmVsZWFzZSA9ICcyMDAzU2VydmVyJwotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByZWxlYXNlID0gJ3Bvc3QyMDAzJwotICAgICAgICBlbGlmIG1haiA9PSA2OgotICAgICAgICAgICAgaWYgaGFzYXR0cih3aW52ZXIsICJwcm9kdWN0X3R5cGUiKToKLSAgICAgICAgICAgICAgICBwcm9kdWN0X3R5cGUgPSB3aW52ZXIucHJvZHVjdF90eXBlCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHByb2R1Y3RfdHlwZSA9IFZFUl9OVF9XT1JLU1RBVElPTgotICAgICAgICAgICAgICAgICMgV2l0aG91dCBhbiBPU1ZFUlNJT05JTkZPRVggY2FwYWJsZSBzeXMuZ2V0d2luZG93c3ZlcnNpb24oKSwKLSAgICAgICAgICAgICAgICAjIG9yIGhlbHAgZnJvbSB0aGUgcmVnaXN0cnksIHdlIGNhbm5vdCBwcm9wZXJseSBpZGVudGlmeQotICAgICAgICAgICAgICAgICMgbm9uLXdvcmtzdGF0aW9uIHZlcnNpb25zLgotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAga2V5ID0gUmVnT3BlbktleUV4KEhLRVlfTE9DQUxfTUFDSElORSwgcmVna2V5KQotICAgICAgICAgICAgICAgICAgICBuYW1lLCB0eXBlID0gUmVnUXVlcnlWYWx1ZUV4KGtleSwgIlByb2R1Y3ROYW1lIikKLSAgICAgICAgICAgICAgICAgICAgIyBEaXNjYXJkIGFueSB0eXBlIHRoYXQgaXNuJ3QgUkVHX1NaCi0gICAgICAgICAgICAgICAgICAgIGlmIHR5cGUgPT0gUkVHX1NaIGFuZCBuYW1lLmZpbmQoIlNlcnZlciIpICE9IC0xOgotICAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjdF90eXBlID0gVkVSX05UX1NFUlZFUgotICAgICAgICAgICAgICAgIGV4Y2VwdCBXaW5kb3dzRXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgICMgVXNlIGRlZmF1bHQgb2YgVkVSX05UX1dPUktTVEFUSU9OCi0gICAgICAgICAgICAgICAgICAgIHBhc3MKLQotICAgICAgICAgICAgaWYgbWluID09IDA6Ci0gICAgICAgICAgICAgICAgaWYgcHJvZHVjdF90eXBlID09IFZFUl9OVF9XT1JLU1RBVElPTjoKLSAgICAgICAgICAgICAgICAgICAgcmVsZWFzZSA9ICdWaXN0YScKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICByZWxlYXNlID0gJzIwMDhTZXJ2ZXInCi0gICAgICAgICAgICBlbGlmIG1pbiA9PSAxOgotICAgICAgICAgICAgICAgIGlmIHByb2R1Y3RfdHlwZSA9PSBWRVJfTlRfV09SS1NUQVRJT046Ci0gICAgICAgICAgICAgICAgICAgIHJlbGVhc2UgPSAnNycKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICByZWxlYXNlID0gJzIwMDhTZXJ2ZXJSMicKLSAgICAgICAgICAgIGVsaWYgbWluID09IDI6Ci0gICAgICAgICAgICAgICAgaWYgcHJvZHVjdF90eXBlID09IFZFUl9OVF9XT1JLU1RBVElPTjoKLSAgICAgICAgICAgICAgICAgICAgcmVsZWFzZSA9ICc4JwotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHJlbGVhc2UgPSAnMjAxMlNlcnZlcicKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmVsZWFzZSA9ICdwb3N0MjAxMlNlcnZlcicKLQotICAgIGVsc2U6Ci0gICAgICAgIGlmIG5vdCByZWxlYXNlOgotICAgICAgICAgICAgIyBFLmcuIFdpbjMuMSB3aXRoIHdpbjMycwotICAgICAgICAgICAgcmVsZWFzZSA9ICclaS4laScgJSAobWFqLG1pbikKLSAgICAgICAgcmV0dXJuIHJlbGVhc2UsdmVyc2lvbixjc2QscHR5cGUKLQotICAgICMgT3BlbiB0aGUgcmVnaXN0cnkga2V5CisgICAga2V5ID0gTm9uZQogICAgIHRyeToKLSAgICAgICAga2V5Q3VyVmVyID0gUmVnT3BlbktleUV4KEhLRVlfTE9DQUxfTUFDSElORSwgcmVna2V5KQotICAgICAgICAjIEdldCBhIHZhbHVlIHRvIG1ha2Ugc3VyZSB0aGUga2V5IGV4aXN0cy4uLgotICAgICAgICBSZWdRdWVyeVZhbHVlRXgoa2V5Q3VyVmVyLCAnU3lzdGVtUm9vdCcpCisgICAgICAgIGtleSA9IE9wZW5LZXlFeChIS0VZX0xPQ0FMX01BQ0hJTkUsCisgICAgICAgICAgICAgICAgICAgICAgICByJ1NPRlRXQVJFXE1pY3Jvc29mdFxXaW5kb3dzIE5UXEN1cnJlbnRWZXJzaW9uJykKKyAgICAgICAgcHR5cGUgPSBRdWVyeVZhbHVlRXgoa2V5LCAnQ3VycmVudFR5cGUnKVswXQogICAgIGV4Y2VwdDoKLSAgICAgICAgcmV0dXJuIHJlbGVhc2UsdmVyc2lvbixjc2QscHR5cGUKKyAgICAgICAgcGFzcworICAgIGZpbmFsbHk6CisgICAgICAgIGlmIGtleToKKyAgICAgICAgICAgIENsb3NlS2V5KGtleSkKIAotICAgICMgUGFyc2UgdmFsdWVzCi0gICAgI3N1YnZlcnNpb24gPSBfd2luMzJfZ2V0dmFsdWUoa2V5Q3VyVmVyLAotICAgICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1N1YlZlcnNpb25OdW1iZXInLAotICAgICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCcnLDEpKVswXQotICAgICNpZiBzdWJ2ZXJzaW9uOgotICAgICMgICByZWxlYXNlID0gcmVsZWFzZSArIHN1YnZlcnNpb24gIyA5NWEsIDk1YiwgZXRjLgotICAgIGJ1aWxkID0gX3dpbjMyX2dldHZhbHVlKGtleUN1clZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQ3VycmVudEJ1aWxkTnVtYmVyJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJycsMSkpWzBdCi0gICAgcHR5cGUgPSBfd2luMzJfZ2V0dmFsdWUoa2V5Q3VyVmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0N1cnJlbnRUeXBlJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChwdHlwZSwxKSlbMF0KKyAgICByZXR1cm4gcmVsZWFzZSwgdmVyc2lvbiwgY3NkLCBwdHlwZQogCi0gICAgIyBOb3JtYWxpemUgdmVyc2lvbgotICAgIHZlcnNpb24gPSBfbm9ybV92ZXJzaW9uKHZlcnNpb24sYnVpbGQpCi0KLSAgICAjIENsb3NlIGtleQotICAgIFJlZ0Nsb3NlS2V5KGtleUN1clZlcikKLSAgICByZXR1cm4gcmVsZWFzZSx2ZXJzaW9uLGNzZCxwdHlwZQotCi1kZWYgX21hY192ZXJfbG9va3VwKHNlbGVjdG9ycyxkZWZhdWx0PU5vbmUpOgotCi0gICAgZnJvbSBfZ2VzdGFsdCBpbXBvcnQgZ2VzdGFsdAotICAgIGwgPSBbXQotICAgIGFwcGVuZCA9IGwuYXBwZW5kCi0gICAgZm9yIHNlbGVjdG9yIGluIHNlbGVjdG9yczoKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgYXBwZW5kKGdlc3RhbHQoc2VsZWN0b3IpKQotICAgICAgICBleGNlcHQgKFJ1bnRpbWVFcnJvciwgT1NFcnJvcik6Ci0gICAgICAgICAgICBhcHBlbmQoZGVmYXVsdCkKLSAgICByZXR1cm4gbAotCi1kZWYgX2JjZDJzdHIoYmNkKToKLQotICAgIHJldHVybiBoZXgoYmNkKVsyOl0KLQotZGVmIF9tYWNfdmVyX2dlc3RhbHQoKToKLSAgICAiIiIKLSAgICAgICAgVGhhbmtzIHRvIE1hcmsgUi4gTGV2aW5zb24gZm9yIG1haWxpbmcgZG9jdW1lbnRhdGlvbiBsaW5rcyBhbmQKLSAgICAgICAgY29kZSBleGFtcGxlcyBmb3IgdGhpcyBmdW5jdGlvbi4gRG9jdW1lbnRhdGlvbiBmb3IgdGhlCi0gICAgICAgIGdlc3RhbHQoKSBBUEkgaXMgYXZhaWxhYmxlIG9ubGluZSBhdDoKLQotICAgICAgICAgICBodHRwOi8vd3d3LnJnYXJvcy5ubC9nZXN0YWx0LwotICAgICIiIgotICAgICMgQ2hlY2sgd2hldGhlciB0aGUgdmVyc2lvbiBpbmZvIG1vZHVsZSBpcyBhdmFpbGFibGUKLSAgICB0cnk6Ci0gICAgICAgIGltcG9ydCBfZ2VzdGFsdAotICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAgICAgcmV0dXJuIE5vbmUKLSAgICAjIEdldCB0aGUgaW5mb3MKLSAgICBzeXN2LCBzeXNhID0gX21hY192ZXJfbG9va3VwKCgnc3lzdicsJ3N5c2EnKSkKLSAgICAjIERlY29kZSB0aGUgaW5mb3MKLSAgICBpZiBzeXN2OgotICAgICAgICBtYWpvciA9IChzeXN2ICYgMHhGRjAwKSA+PiA4Ci0gICAgICAgIG1pbm9yID0gKHN5c3YgJiAweDAwRjApID4+IDQKLSAgICAgICAgcGF0Y2ggPSAoc3lzdiAmIDB4MDAwRikKLQotICAgICAgICBpZiAobWFqb3IsIG1pbm9yKSA+PSAoMTAsIDQpOgotICAgICAgICAgICAgIyB0aGUgJ3N5c3YnIGdlc3RhbGQgY2Fubm90IHJldHVybiBwYXRjaGxldmVscwotICAgICAgICAgICAgIyBoaWdoZXIgdGhhbiA5LiBBcHBsZSBpbnRyb2R1Y2VkIDMgbmV3Ci0gICAgICAgICAgICAjIGdlc3RhbHQgY29kZXMgaW4gMTAuNCB0byBkZWFsIHdpdGggdGhpcwotICAgICAgICAgICAgIyBpc3N1ZSAobmVlZGVkIGJlY2F1c2UgcGF0Y2ggbGV2ZWxzIGNhbgotICAgICAgICAgICAgIyBydW4gaGlnaGVyIHRoYW4gOSwgc3VjaCBhcyAxMC40LjExKQotICAgICAgICAgICAgbWFqb3IsbWlub3IscGF0Y2ggPSBfbWFjX3Zlcl9sb29rdXAoKCdzeXMxJywnc3lzMicsJ3N5czMnKSkKLSAgICAgICAgICAgIHJlbGVhc2UgPSAnJWkuJWkuJWknICUobWFqb3IsIG1pbm9yLCBwYXRjaCkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJlbGVhc2UgPSAnJXMuJWkuJWknICUgKF9iY2Qyc3RyKG1ham9yKSxtaW5vcixwYXRjaCkKLQotICAgIGlmIHN5c2E6Ci0gICAgICAgIG1hY2hpbmUgPSB7MHgxOiAnNjhrJywKLSAgICAgICAgICAgICAgICAgICAweDI6ICdQb3dlclBDJywKLSAgICAgICAgICAgICAgICAgICAweGE6ICdpMzg2J30uZ2V0KHN5c2EsJycpCi0KLSAgICB2ZXJzaW9uaW5mbz0oJycsICcnLCAnJykKLSAgICByZXR1cm4gcmVsZWFzZSx2ZXJzaW9uaW5mbyxtYWNoaW5lCiAKIGRlZiBfbWFjX3Zlcl94bWwoKToKICAgICBmbiA9ICcvU3lzdGVtL0xpYnJhcnkvQ29yZVNlcnZpY2VzL1N5c3RlbVZlcnNpb24ucGxpc3QnCkBAIC03MDgsMTggKzYwMywxOSBAQAogICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICAgICAgcmV0dXJuIE5vbmUKIAotICAgIHBsID0gcGxpc3RsaWIucmVhZFBsaXN0KGZuKQorICAgIHdpdGggb3BlbihmbiwgJ3JiJykgYXMgZjoKKyAgICAgICAgcGwgPSBwbGlzdGxpYi5sb2FkKGYpCiAgICAgcmVsZWFzZSA9IHBsWydQcm9kdWN0VmVyc2lvbiddCi0gICAgdmVyc2lvbmluZm89KCcnLCAnJywgJycpCisgICAgdmVyc2lvbmluZm8gPSAoJycsICcnLCAnJykKICAgICBtYWNoaW5lID0gb3MudW5hbWUoKS5tYWNoaW5lCiAgICAgaWYgbWFjaGluZSBpbiAoJ3BwYycsICdQb3dlciBNYWNpbnRvc2gnKToKLSAgICAgICAgIyBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBnZXN0YWx0IGJhc2VkIGNvZGUKKyAgICAgICAgIyBDYW5vbmljYWwgbmFtZQogICAgICAgICBtYWNoaW5lID0gJ1Bvd2VyUEMnCiAKLSAgICByZXR1cm4gcmVsZWFzZSx2ZXJzaW9uaW5mbyxtYWNoaW5lCisgICAgcmV0dXJuIHJlbGVhc2UsIHZlcnNpb25pbmZvLCBtYWNoaW5lCiAKIAotZGVmIG1hY192ZXIocmVsZWFzZT0nJyx2ZXJzaW9uaW5mbz0oJycsJycsJycpLG1hY2hpbmU9JycpOgorZGVmIG1hY192ZXIocmVsZWFzZT0nJywgdmVyc2lvbmluZm89KCcnLCAnJywgJycpLCBtYWNoaW5lPScnKToKIAogICAgICIiIiBHZXQgTWFjT1MgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgcmV0dXJuIGl0IGFzIHR1cGxlIChyZWxlYXNlLAogICAgICAgICB2ZXJzaW9uaW5mbywgbWFjaGluZSkgd2l0aCB2ZXJzaW9uaW5mbyBiZWluZyBhIHR1cGxlICh2ZXJzaW9uLApAQCAtNzM1LDE2ICs2MzEsMTAgQEAKICAgICBpZiBpbmZvIGlzIG5vdCBOb25lOgogICAgICAgICByZXR1cm4gaW5mbwogCi0gICAgIyBJZiB0aGF0IGRvZXNuJ3Qgd29yayBmb3Igc29tZSByZWFzb24gZmFsbCBiYWNrIHRvIHJlYWRpbmcgdGhlCi0gICAgIyBpbmZvcm1hdGlvbiB1c2luZyBnZXN0YWx0IGNhbGxzLgotICAgIGluZm8gPSBfbWFjX3Zlcl9nZXN0YWx0KCkKLSAgICBpZiBpbmZvIGlzIG5vdCBOb25lOgotICAgICAgICByZXR1cm4gaW5mbwotCiAgICAgIyBJZiB0aGF0IGFsc28gZG9lc24ndCB3b3JrIHJldHVybiB0aGUgZGVmYXVsdCB2YWx1ZXMKLSAgICByZXR1cm4gcmVsZWFzZSx2ZXJzaW9uaW5mbyxtYWNoaW5lCisgICAgcmV0dXJuIHJlbGVhc2UsIHZlcnNpb25pbmZvLCBtYWNoaW5lCiAKLWRlZiBfamF2YV9nZXRwcm9wKG5hbWUsZGVmYXVsdCk6CitkZWYgX2phdmFfZ2V0cHJvcChuYW1lLCBkZWZhdWx0KToKIAogICAgIGZyb20gamF2YS5sYW5nIGltcG9ydCBTeXN0ZW0KICAgICB0cnk6CkBAIC03NTUsMTMgKzY0NSwxMyBAQAogICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKICAgICAgICAgcmV0dXJuIGRlZmF1bHQKIAotZGVmIGphdmFfdmVyKHJlbGVhc2U9JycsdmVuZG9yPScnLHZtaW5mbz0oJycsJycsJycpLG9zaW5mbz0oJycsJycsJycpKToKK2RlZiBqYXZhX3ZlcihyZWxlYXNlPScnLCB2ZW5kb3I9JycsIHZtaW5mbz0oJycsICcnLCAnJyksIG9zaW5mbz0oJycsICcnLCAnJykpOgogCiAgICAgIiIiIFZlcnNpb24gaW50ZXJmYWNlIGZvciBKeXRob24uCiAKLSAgICAgICAgUmV0dXJucyBhIHR1cGxlIChyZWxlYXNlLHZlbmRvcix2bWluZm8sb3NpbmZvKSB3aXRoIHZtaW5mbyBiZWluZwotICAgICAgICBhIHR1cGxlICh2bV9uYW1lLHZtX3JlbGVhc2Usdm1fdmVuZG9yKSBhbmQgb3NpbmZvIGJlaW5nIGEKLSAgICAgICAgdHVwbGUgKG9zX25hbWUsb3NfdmVyc2lvbixvc19hcmNoKS4KKyAgICAgICAgUmV0dXJucyBhIHR1cGxlIChyZWxlYXNlLCB2ZW5kb3IsIHZtaW5mbywgb3NpbmZvKSB3aXRoIHZtaW5mbyBiZWluZworICAgICAgICBhIHR1cGxlICh2bV9uYW1lLCB2bV9yZWxlYXNlLCB2bV92ZW5kb3IpIGFuZCBvc2luZm8gYmVpbmcgYQorICAgICAgICB0dXBsZSAob3NfbmFtZSwgb3NfdmVyc2lvbiwgb3NfYXJjaCkuCiAKICAgICAgICAgVmFsdWVzIHdoaWNoIGNhbm5vdCBiZSBkZXRlcm1pbmVkIGFyZSBzZXQgdG8gdGhlIGRlZmF1bHRzCiAgICAgICAgIGdpdmVuIGFzIHBhcmFtZXRlcnMgKHdoaWNoIGFsbCBkZWZhdWx0IHRvICcnKS4KQEAgLTc3MSw3ICs2NjEsNyBAQAogICAgIHRyeToKICAgICAgICAgaW1wb3J0IGphdmEubGFuZwogICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAgICAgcmV0dXJuIHJlbGVhc2UsdmVuZG9yLHZtaW5mbyxvc2luZm8KKyAgICAgICAgcmV0dXJuIHJlbGVhc2UsIHZlbmRvciwgdm1pbmZvLCBvc2luZm8KIAogICAgIHZlbmRvciA9IF9qYXZhX2dldHByb3AoJ2phdmEudmVuZG9yJywgdmVuZG9yKQogICAgIHJlbGVhc2UgPSBfamF2YV9nZXRwcm9wKCdqYXZhLnZlcnNpb24nLCByZWxlYXNlKQpAQCAtNzkwLDkgKzY4MCw5IEBACiAKICMjIyBTeXN0ZW0gbmFtZSBhbGlhc2luZwogCi1kZWYgc3lzdGVtX2FsaWFzKHN5c3RlbSxyZWxlYXNlLHZlcnNpb24pOgorZGVmIHN5c3RlbV9hbGlhcyhzeXN0ZW0sIHJlbGVhc2UsIHZlcnNpb24pOgogCi0gICAgIiIiIFJldHVybnMgKHN5c3RlbSxyZWxlYXNlLHZlcnNpb24pIGFsaWFzZWQgdG8gY29tbW9uCisgICAgIiIiIFJldHVybnMgKHN5c3RlbSwgcmVsZWFzZSwgdmVyc2lvbikgYWxpYXNlZCB0byBjb21tb24KICAgICAgICAgbWFya2V0aW5nIG5hbWVzIHVzZWQgZm9yIHNvbWUgc3lzdGVtcy4KIAogICAgICAgICBJdCBhbHNvIGRvZXMgc29tZSByZW9yZGVyaW5nIG9mIHRoZSBpbmZvcm1hdGlvbiBpbiBzb21lIGNhc2VzCkBAIC04MDIsMTMgKzY5MiwxMyBAQAogICAgIGlmIHN5c3RlbSA9PSAnUmhhcHNvZHknOgogICAgICAgICAjIEFwcGxlJ3MgQlNEIGRlcml2YXRpdmUKICAgICAgICAgIyBYWFggSG93IGNhbiB3ZSBkZXRlcm1pbmUgdGhlIG1hcmtldGluZyByZWxlYXNlIG51bWJlciA/Ci0gICAgICAgIHJldHVybiAnTWFjT1MgWCBTZXJ2ZXInLHN5c3RlbStyZWxlYXNlLHZlcnNpb24KKyAgICAgICAgcmV0dXJuICdNYWNPUyBYIFNlcnZlcicsIHN5c3RlbStyZWxlYXNlLCB2ZXJzaW9uCiAKICAgICBlbGlmIHN5c3RlbSA9PSAnU3VuT1MnOgogICAgICAgICAjIFN1bidzIE9TCiAgICAgICAgIGlmIHJlbGVhc2UgPCAnNSc6CiAgICAgICAgICAgICAjIFRoZXNlIHJlbGVhc2VzIHVzZSB0aGUgb2xkIG5hbWUgU3VuT1MKLSAgICAgICAgICAgIHJldHVybiBzeXN0ZW0scmVsZWFzZSx2ZXJzaW9uCisgICAgICAgICAgICByZXR1cm4gc3lzdGVtLCByZWxlYXNlLCB2ZXJzaW9uCiAgICAgICAgICMgTW9kaWZ5IHJlbGVhc2UgKG1hcmtldGluZyByZWxlYXNlID0gU3VuT1MgcmVsZWFzZSAtIDMpCiAgICAgICAgIGwgPSByZWxlYXNlLnNwbGl0KCcuJykKICAgICAgICAgaWYgbDoKQEAgLTgzNiwxMSArNzI2LDExIEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICB2ZXJzaW9uID0gJzY0Yml0JwogCi0gICAgZWxpZiBzeXN0ZW0gaW4gKCd3aW4zMicsJ3dpbjE2Jyk6CisgICAgZWxpZiBzeXN0ZW0gaW4gKCd3aW4zMicsICd3aW4xNicpOgogICAgICAgICAjIEluIGNhc2Ugb25lIG9mIHRoZSBvdGhlciB0cmlja3MKICAgICAgICAgc3lzdGVtID0gJ1dpbmRvd3MnCiAKLSAgICByZXR1cm4gc3lzdGVtLHJlbGVhc2UsdmVyc2lvbgorICAgIHJldHVybiBzeXN0ZW0sIHJlbGVhc2UsIHZlcnNpb24KIAogIyMjIFZhcmlvdXMgaW50ZXJuYWwgaGVscGVycwogCkBAIC04NTMsMjEgKzc0MywyMSBAQAogICAgIHBsYXRmb3JtID0gJy0nLmpvaW4oeC5zdHJpcCgpIGZvciB4IGluIGZpbHRlcihsZW4sIGFyZ3MpKQogCiAgICAgIyBDbGVhbnVwIHNvbWUgcG9zc2libGUgZmlsZW5hbWUgb2JzdGFjbGVzLi4uCi0gICAgcGxhdGZvcm0gPSBwbGF0Zm9ybS5yZXBsYWNlKCcgJywnXycpCi0gICAgcGxhdGZvcm0gPSBwbGF0Zm9ybS5yZXBsYWNlKCcvJywnLScpCi0gICAgcGxhdGZvcm0gPSBwbGF0Zm9ybS5yZXBsYWNlKCdcXCcsJy0nKQotICAgIHBsYXRmb3JtID0gcGxhdGZvcm0ucmVwbGFjZSgnOicsJy0nKQotICAgIHBsYXRmb3JtID0gcGxhdGZvcm0ucmVwbGFjZSgnOycsJy0nKQotICAgIHBsYXRmb3JtID0gcGxhdGZvcm0ucmVwbGFjZSgnIicsJy0nKQotICAgIHBsYXRmb3JtID0gcGxhdGZvcm0ucmVwbGFjZSgnKCcsJy0nKQotICAgIHBsYXRmb3JtID0gcGxhdGZvcm0ucmVwbGFjZSgnKScsJy0nKQorICAgIHBsYXRmb3JtID0gcGxhdGZvcm0ucmVwbGFjZSgnICcsICdfJykKKyAgICBwbGF0Zm9ybSA9IHBsYXRmb3JtLnJlcGxhY2UoJy8nLCAnLScpCisgICAgcGxhdGZvcm0gPSBwbGF0Zm9ybS5yZXBsYWNlKCdcXCcsICctJykKKyAgICBwbGF0Zm9ybSA9IHBsYXRmb3JtLnJlcGxhY2UoJzonLCAnLScpCisgICAgcGxhdGZvcm0gPSBwbGF0Zm9ybS5yZXBsYWNlKCc7JywgJy0nKQorICAgIHBsYXRmb3JtID0gcGxhdGZvcm0ucmVwbGFjZSgnIicsICctJykKKyAgICBwbGF0Zm9ybSA9IHBsYXRmb3JtLnJlcGxhY2UoJygnLCAnLScpCisgICAgcGxhdGZvcm0gPSBwbGF0Zm9ybS5yZXBsYWNlKCcpJywgJy0nKQogCiAgICAgIyBObyBuZWVkIHRvIHJlcG9ydCAndW5rbm93bicgaW5mb3JtYXRpb24uLi4KLSAgICBwbGF0Zm9ybSA9IHBsYXRmb3JtLnJlcGxhY2UoJ3Vua25vd24nLCcnKQorICAgIHBsYXRmb3JtID0gcGxhdGZvcm0ucmVwbGFjZSgndW5rbm93bicsICcnKQogCiAgICAgIyBGb2xkICctLSdzIGFuZCByZW1vdmUgdHJhaWxpbmcgJy0nCiAgICAgd2hpbGUgMToKLSAgICAgICAgY2xlYW5lZCA9IHBsYXRmb3JtLnJlcGxhY2UoJy0tJywnLScpCisgICAgICAgIGNsZWFuZWQgPSBwbGF0Zm9ybS5yZXBsYWNlKCctLScsICctJykKICAgICAgICAgaWYgY2xlYW5lZCA9PSBwbGF0Zm9ybToKICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgIHBsYXRmb3JtID0gY2xlYW5lZApAQCAtODg3LDcgKzc3Nyw3IEBACiAgICAgICAgIHJldHVybiBkZWZhdWx0CiAgICAgdHJ5OgogICAgICAgICByZXR1cm4gc29ja2V0LmdldGhvc3RuYW1lKCkKLSAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAjIFN0aWxsIG5vdCB3b3JraW5nLi4uCiAgICAgICAgIHJldHVybiBkZWZhdWx0CiAKQEAgLTg5OSwxOSArNzg5LDE5IEBACiAgICAgZmlsZXBhdGggPSBvcy5wYXRoLmFic3BhdGgoZmlsZXBhdGgpCiAgICAgd2hpbGUgb3MucGF0aC5pc2xpbmsoZmlsZXBhdGgpOgogICAgICAgICBmaWxlcGF0aCA9IG9zLnBhdGgubm9ybXBhdGgoCi0gICAgICAgICAgICBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKGZpbGVwYXRoKSxvcy5yZWFkbGluayhmaWxlcGF0aCkpKQorICAgICAgICAgICAgb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShmaWxlcGF0aCksIG9zLnJlYWRsaW5rKGZpbGVwYXRoKSkpCiAgICAgcmV0dXJuIGZpbGVwYXRoCiAKLWRlZiBfc3lzY21kX3VuYW1lKG9wdGlvbixkZWZhdWx0PScnKToKK2RlZiBfc3lzY21kX3VuYW1lKG9wdGlvbiwgZGVmYXVsdD0nJyk6CiAKICAgICAiIiIgSW50ZXJmYWNlIHRvIHRoZSBzeXN0ZW0ncyB1bmFtZSBjb21tYW5kLgogICAgICIiIgotICAgIGlmIHN5cy5wbGF0Zm9ybSBpbiAoJ2RvcycsJ3dpbjMyJywnd2luMTYnLCdvczInKToKKyAgICBpZiBzeXMucGxhdGZvcm0gaW4gKCdkb3MnLCAnd2luMzInLCAnd2luMTYnKToKICAgICAgICAgIyBYWFggT3RoZXJzIHRvbyA/CiAgICAgICAgIHJldHVybiBkZWZhdWx0CiAgICAgdHJ5OgogICAgICAgICBmID0gb3MucG9wZW4oJ3VuYW1lICVzIDI+ICVzJyAlIChvcHRpb24sIERFVl9OVUxMKSkKLSAgICBleGNlcHQgKEF0dHJpYnV0ZUVycm9yLG9zLmVycm9yKToKKyAgICBleGNlcHQgKEF0dHJpYnV0ZUVycm9yLCBPU0Vycm9yKToKICAgICAgICAgcmV0dXJuIGRlZmF1bHQKICAgICBvdXRwdXQgPSBmLnJlYWQoKS5zdHJpcCgpCiAgICAgcmMgPSBmLmNsb3NlKCkKQEAgLTkyMCw3ICs4MTAsNyBAQAogICAgIGVsc2U6CiAgICAgICAgIHJldHVybiBvdXRwdXQKIAotZGVmIF9zeXNjbWRfZmlsZSh0YXJnZXQsZGVmYXVsdD0nJyk6CitkZWYgX3N5c2NtZF9maWxlKHRhcmdldCwgZGVmYXVsdD0nJyk6CiAKICAgICAiIiIgSW50ZXJmYWNlIHRvIHRoZSBzeXN0ZW0ncyBmaWxlIGNvbW1hbmQuCiAKQEAgLTkyOSw3ICs4MTksNyBAQAogICAgICAgICBkZWZhdWx0IGluIGNhc2UgdGhlIGNvbW1hbmQgc2hvdWxkIGZhaWwuCiAKICAgICAiIiIKLSAgICBpZiBzeXMucGxhdGZvcm0gaW4gKCdkb3MnLCd3aW4zMicsJ3dpbjE2Jywnb3MyJyk6CisgICAgaWYgc3lzLnBsYXRmb3JtIGluICgnZG9zJywgJ3dpbjMyJywgJ3dpbjE2Jyk6CiAgICAgICAgICMgWFhYIE90aGVycyB0b28gPwogICAgICAgICByZXR1cm4gZGVmYXVsdAogICAgIHRhcmdldCA9IF9mb2xsb3dfc3ltbGlua3ModGFyZ2V0KQpAQCAtOTM3LDcgKzgyNyw3IEBACiAgICAgICAgIHByb2MgPSBzdWJwcm9jZXNzLlBvcGVuKFsnZmlsZScsIHRhcmdldF0sCiAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKQogCi0gICAgZXhjZXB0IChBdHRyaWJ1dGVFcnJvcixvcy5lcnJvcik6CisgICAgZXhjZXB0IChBdHRyaWJ1dGVFcnJvciwgT1NFcnJvcik6CiAgICAgICAgIHJldHVybiBkZWZhdWx0CiAgICAgb3V0cHV0ID0gcHJvYy5jb21tdW5pY2F0ZSgpWzBdLmRlY29kZSgnbGF0aW4tMScpCiAgICAgcmMgPSBwcm9jLndhaXQoKQpAQCAtOTUxLDE3ICs4NDEsMTcgQEAKICMgRGVmYXVsdCB2YWx1ZXMgZm9yIGFyY2hpdGVjdHVyZTsgbm9uLWVtcHR5IHN0cmluZ3Mgb3ZlcnJpZGUgdGhlCiAjIGRlZmF1bHRzIGdpdmVuIGFzIHBhcmFtZXRlcnMKIF9kZWZhdWx0X2FyY2hpdGVjdHVyZSA9IHsKLSAgICAnd2luMzInOiAoJycsJ1dpbmRvd3NQRScpLAotICAgICd3aW4xNic6ICgnJywnV2luZG93cycpLAotICAgICdkb3MnOiAoJycsJ01TRE9TJyksCisgICAgJ3dpbjMyJzogKCcnLCAnV2luZG93c1BFJyksCisgICAgJ3dpbjE2JzogKCcnLCAnV2luZG93cycpLAorICAgICdkb3MnOiAoJycsICdNU0RPUycpLAogfQogCi1kZWYgYXJjaGl0ZWN0dXJlKGV4ZWN1dGFibGU9c3lzLmV4ZWN1dGFibGUsYml0cz0nJyxsaW5rYWdlPScnKToKK2RlZiBhcmNoaXRlY3R1cmUoZXhlY3V0YWJsZT1zeXMuZXhlY3V0YWJsZSwgYml0cz0nJywgbGlua2FnZT0nJyk6CiAKICAgICAiIiIgUXVlcmllcyB0aGUgZ2l2ZW4gZXhlY3V0YWJsZSAoZGVmYXVsdHMgdG8gdGhlIFB5dGhvbiBpbnRlcnByZXRlcgogICAgICAgICBiaW5hcnkpIGZvciB2YXJpb3VzIGFyY2hpdGVjdHVyZSBpbmZvcm1hdGlvbi4KIAotICAgICAgICBSZXR1cm5zIGEgdHVwbGUgKGJpdHMsbGlua2FnZSkgd2hpY2ggY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQKKyAgICAgICAgUmV0dXJucyBhIHR1cGxlIChiaXRzLCBsaW5rYWdlKSB3aGljaCBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dAogICAgICAgICB0aGUgYml0IGFyY2hpdGVjdHVyZSBhbmQgdGhlIGxpbmthZ2UgZm9ybWF0IHVzZWQgZm9yIHRoZQogICAgICAgICBleGVjdXRhYmxlLiBCb3RoIHZhbHVlcyBhcmUgcmV0dXJuZWQgYXMgc3RyaW5ncy4KIApAQCAtOTk5LDE2ICs4ODksMTYgQEAKICAgICAgICAgIyAiZmlsZSIgY29tbWFuZCBkaWQgbm90IHJldHVybiBhbnl0aGluZzsgd2UnbGwgdHJ5IHRvIHByb3ZpZGUKICAgICAgICAgIyBzb21lIHNlbnNpYmxlIGRlZmF1bHRzIHRoZW4uLi4KICAgICAgICAgaWYgc3lzLnBsYXRmb3JtIGluIF9kZWZhdWx0X2FyY2hpdGVjdHVyZToKLSAgICAgICAgICAgIGIsbCA9IF9kZWZhdWx0X2FyY2hpdGVjdHVyZVtzeXMucGxhdGZvcm1dCisgICAgICAgICAgICBiLCBsID0gX2RlZmF1bHRfYXJjaGl0ZWN0dXJlW3N5cy5wbGF0Zm9ybV0KICAgICAgICAgICAgIGlmIGI6CiAgICAgICAgICAgICAgICAgYml0cyA9IGIKICAgICAgICAgICAgIGlmIGw6CiAgICAgICAgICAgICAgICAgbGlua2FnZSA9IGwKLSAgICAgICAgcmV0dXJuIGJpdHMsbGlua2FnZQorICAgICAgICByZXR1cm4gYml0cywgbGlua2FnZQogCiAgICAgaWYgJ2V4ZWN1dGFibGUnIG5vdCBpbiBmaWxlb3V0OgogICAgICAgICAjIEZvcm1hdCBub3Qgc3VwcG9ydGVkCi0gICAgICAgIHJldHVybiBiaXRzLGxpbmthZ2UKKyAgICAgICAgcmV0dXJuIGJpdHMsIGxpbmthZ2UKIAogICAgICMgQml0cwogICAgIGlmICczMi1iaXQnIGluIGZpbGVvdXQ6CkBAIC0xMDM2LDcgKzkyNiw3IEBACiAgICAgICAgICMgWFhYIHRoZSBBLk9VVCBmb3JtYXQgYWxzbyBmYWxscyB1bmRlciB0aGlzIGNsYXNzLi4uCiAgICAgICAgIHBhc3MKIAotICAgIHJldHVybiBiaXRzLGxpbmthZ2UKKyAgICByZXR1cm4gYml0cywgbGlua2FnZQogCiAjIyMgUG9ydGFibGUgdW5hbWUoKSBpbnRlcmZhY2UKIApAQCAtMTA0OCw3ICs5MzgsNyBAQAogZGVmIHVuYW1lKCk6CiAKICAgICAiIiIgRmFpcmx5IHBvcnRhYmxlIHVuYW1lIGludGVyZmFjZS4gUmV0dXJucyBhIHR1cGxlCi0gICAgICAgIG9mIHN0cmluZ3MgKHN5c3RlbSxub2RlLHJlbGVhc2UsdmVyc2lvbixtYWNoaW5lLHByb2Nlc3NvcikKKyAgICAgICAgb2Ygc3RyaW5ncyAoc3lzdGVtLCBub2RlLCByZWxlYXNlLCB2ZXJzaW9uLCBtYWNoaW5lLCBwcm9jZXNzb3IpCiAgICAgICAgIGlkZW50aWZ5aW5nIHRoZSB1bmRlcmx5aW5nIHBsYXRmb3JtLgogCiAgICAgICAgIE5vdGUgdGhhdCB1bmxpa2UgdGhlIG9zLnVuYW1lIGZ1bmN0aW9uIHRoaXMgYWxzbyByZXR1cm5zCkBAIC0xMDY3LDcgKzk1Nyw3IEBACiAKICAgICAjIEdldCBzb21lIGluZm9zIGZyb20gdGhlIGJ1aWx0aW4gb3MudW5hbWUgQVBJLi4uCiAgICAgdHJ5OgotICAgICAgICBzeXN0ZW0sbm9kZSxyZWxlYXNlLHZlcnNpb24sbWFjaGluZSA9IG9zLnVuYW1lKCkKKyAgICAgICAgc3lzdGVtLCBub2RlLCByZWxlYXNlLCB2ZXJzaW9uLCBtYWNoaW5lID0gb3MudW5hbWUoKQogICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKICAgICAgICAgbm9fb3NfdW5hbWUgPSAxCiAKQEAgLTEwODUsNyArOTc1LDcgQEAKIAogICAgICAgICAjIFRyeSB3aW4zMl92ZXIoKSBvbiB3aW4zMiBwbGF0Zm9ybXMKICAgICAgICAgaWYgc3lzdGVtID09ICd3aW4zMic6Ci0gICAgICAgICAgICByZWxlYXNlLHZlcnNpb24sY3NkLHB0eXBlID0gd2luMzJfdmVyKCkKKyAgICAgICAgICAgIHJlbGVhc2UsIHZlcnNpb24sIGNzZCwgcHR5cGUgPSB3aW4zMl92ZXIoKQogICAgICAgICAgICAgaWYgcmVsZWFzZSBhbmQgdmVyc2lvbjoKICAgICAgICAgICAgICAgICB1c2Vfc3lzY21kX3ZlciA9IDAKICAgICAgICAgICAgICMgVHJ5IHRvIHVzZSB0aGUgUFJPQ0VTU09SXyogZW52aXJvbm1lbnQgdmFyaWFibGVzCkBAIC0xMTA0LDcgKzk5NCw3IEBACiAgICAgICAgICMgVHJ5IHRoZSAndmVyJyBzeXN0ZW0gY29tbWFuZCBhdmFpbGFibGUgb24gc29tZQogICAgICAgICAjIHBsYXRmb3JtcwogICAgICAgICBpZiB1c2Vfc3lzY21kX3ZlcjoKLSAgICAgICAgICAgIHN5c3RlbSxyZWxlYXNlLHZlcnNpb24gPSBfc3lzY21kX3ZlcihzeXN0ZW0pCisgICAgICAgICAgICBzeXN0ZW0sIHJlbGVhc2UsIHZlcnNpb24gPSBfc3lzY21kX3ZlcihzeXN0ZW0pCiAgICAgICAgICAgICAjIE5vcm1hbGl6ZSBzeXN0ZW0gdG8gd2hhdCB3aW4zMl92ZXIoKSBub3JtYWxseSByZXR1cm5zCiAgICAgICAgICAgICAjIChfc3lzY21kX3ZlcigpIHRlbmRzIHRvIHJldHVybiB0aGUgdmVuZG9yIG5hbWUgYXMgd2VsbCkKICAgICAgICAgICAgIGlmIHN5c3RlbSA9PSAnTWljcm9zb2Z0IFdpbmRvd3MnOgpAQCAtMTEyMiw3ICsxMDEyLDcgQEAKIAogICAgICAgICAjIEluIGNhc2Ugd2Ugc3RpbGwgZG9uJ3Qga25vdyBhbnl0aGluZyB1c2VmdWwsIHdlJ2xsIHRyeSB0bwogICAgICAgICAjIGhlbHAgb3Vyc2VsdmVzCi0gICAgICAgIGlmIHN5c3RlbSBpbiAoJ3dpbjMyJywnd2luMTYnKToKKyAgICAgICAgaWYgc3lzdGVtIGluICgnd2luMzInLCAnd2luMTYnKToKICAgICAgICAgICAgIGlmIG5vdCB2ZXJzaW9uOgogICAgICAgICAgICAgICAgIGlmIHN5c3RlbSA9PSAnd2luMzInOgogICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uID0gJzMyYml0JwpAQCAtMTEzMSw3ICsxMDIxLDcgQEAKICAgICAgICAgICAgIHN5c3RlbSA9ICdXaW5kb3dzJwogCiAgICAgICAgIGVsaWYgc3lzdGVtWzo0XSA9PSAnamF2YSc6Ci0gICAgICAgICAgICByZWxlYXNlLHZlbmRvcix2bWluZm8sb3NpbmZvID0gamF2YV92ZXIoKQorICAgICAgICAgICAgcmVsZWFzZSwgdmVuZG9yLCB2bWluZm8sIG9zaW5mbyA9IGphdmFfdmVyKCkKICAgICAgICAgICAgIHN5c3RlbSA9ICdKYXZhJwogICAgICAgICAgICAgdmVyc2lvbiA9ICcsICcuam9pbih2bWluZm8pCiAgICAgICAgICAgICBpZiBub3QgdmVyc2lvbjoKQEAgLTExNDksMTQgKzEwMzksMTQgQEAKICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgogICAgICAgICAgICAgcGFzcwogICAgICAgICBlbHNlOgotICAgICAgICAgICAgY3NpZCwgY3B1X251bWJlciA9IHZtc19saWIuZ2V0c3lpKCdTWUkkX0NQVScsMCkKKyAgICAgICAgICAgIGNzaWQsIGNwdV9udW1iZXIgPSB2bXNfbGliLmdldHN5aSgnU1lJJF9DUFUnLCAwKQogICAgICAgICAgICAgaWYgKGNwdV9udW1iZXIgPj0gMTI4KToKICAgICAgICAgICAgICAgICBwcm9jZXNzb3IgPSAnQWxwaGEnCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHByb2Nlc3NvciA9ICdWQVgnCiAgICAgaWYgbm90IHByb2Nlc3NvcjoKICAgICAgICAgIyBHZXQgcHJvY2Vzc29yIGluZm9ybWF0aW9uIGZyb20gdGhlIHVuYW1lIHN5c3RlbSBjb21tYW5kCi0gICAgICAgIHByb2Nlc3NvciA9IF9zeXNjbWRfdW5hbWUoJy1wJywnJykKKyAgICAgICAgcHJvY2Vzc29yID0gX3N5c2NtZF91bmFtZSgnLXAnLCAnJykKIAogICAgICNJZiBhbnkgdW5rbm93bnMgc3RpbGwgZXhpc3QsIHJlcGxhY2UgdGhlbSB3aXRoICcncywgd2hpY2ggYXJlIG1vcmUgcG9ydGFibGUKICAgICBpZiBzeXN0ZW0gPT0gJ3Vua25vd24nOgpAQCAtMTE3Nyw3ICsxMDY3LDggQEAKICAgICAgICAgc3lzdGVtID0gJ1dpbmRvd3MnCiAgICAgICAgIHJlbGVhc2UgPSAnVmlzdGEnCiAKLSAgICBfdW5hbWVfY2FjaGUgPSB1bmFtZV9yZXN1bHQoc3lzdGVtLG5vZGUscmVsZWFzZSx2ZXJzaW9uLG1hY2hpbmUscHJvY2Vzc29yKQorICAgIF91bmFtZV9jYWNoZSA9IHVuYW1lX3Jlc3VsdChzeXN0ZW0sIG5vZGUsIHJlbGVhc2UsIHZlcnNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hY2hpbmUsIHByb2Nlc3NvcikKICAgICByZXR1cm4gX3VuYW1lX2NhY2hlCiAKICMjIyBEaXJlY3QgaW50ZXJmYWNlcyB0byBzb21lIG9mIHRoZSB1bmFtZSgpIHJldHVybiB2YWx1ZXMKQEAgLTE0NzQsNTcgKzEzNjUsNTggQEAKIAogICAgICMgR2V0IHVuYW1lIGluZm9ybWF0aW9uIGFuZCB0aGVuIGFwcGx5IHBsYXRmb3JtIHNwZWNpZmljIGNvc21ldGljcwogICAgICMgdG8gaXQuLi4KLSAgICBzeXN0ZW0sbm9kZSxyZWxlYXNlLHZlcnNpb24sbWFjaGluZSxwcm9jZXNzb3IgPSB1bmFtZSgpCisgICAgc3lzdGVtLCBub2RlLCByZWxlYXNlLCB2ZXJzaW9uLCBtYWNoaW5lLCBwcm9jZXNzb3IgPSB1bmFtZSgpCiAgICAgaWYgbWFjaGluZSA9PSBwcm9jZXNzb3I6CiAgICAgICAgIHByb2Nlc3NvciA9ICcnCiAgICAgaWYgYWxpYXNlZDoKLSAgICAgICAgc3lzdGVtLHJlbGVhc2UsdmVyc2lvbiA9IHN5c3RlbV9hbGlhcyhzeXN0ZW0scmVsZWFzZSx2ZXJzaW9uKQorICAgICAgICBzeXN0ZW0sIHJlbGVhc2UsIHZlcnNpb24gPSBzeXN0ZW1fYWxpYXMoc3lzdGVtLCByZWxlYXNlLCB2ZXJzaW9uKQogCiAgICAgaWYgc3lzdGVtID09ICdXaW5kb3dzJzoKICAgICAgICAgIyBNUyBwbGF0Zm9ybXMKLSAgICAgICAgcmVsLHZlcnMsY3NkLHB0eXBlID0gd2luMzJfdmVyKHZlcnNpb24pCisgICAgICAgIHJlbCwgdmVycywgY3NkLCBwdHlwZSA9IHdpbjMyX3Zlcih2ZXJzaW9uKQogICAgICAgICBpZiB0ZXJzZToKLSAgICAgICAgICAgIHBsYXRmb3JtID0gX3BsYXRmb3JtKHN5c3RlbSxyZWxlYXNlKQorICAgICAgICAgICAgcGxhdGZvcm0gPSBfcGxhdGZvcm0oc3lzdGVtLCByZWxlYXNlKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgcGxhdGZvcm0gPSBfcGxhdGZvcm0oc3lzdGVtLHJlbGVhc2UsdmVyc2lvbixjc2QpCisgICAgICAgICAgICBwbGF0Zm9ybSA9IF9wbGF0Zm9ybShzeXN0ZW0sIHJlbGVhc2UsIHZlcnNpb24sIGNzZCkKIAogICAgIGVsaWYgc3lzdGVtIGluICgnTGludXgnLCk6CiAgICAgICAgICMgTGludXggYmFzZWQgc3lzdGVtcwotICAgICAgICBkaXN0bmFtZSxkaXN0dmVyc2lvbixkaXN0aWQgPSBkaXN0KCcnKQorICAgICAgICBkaXN0bmFtZSwgZGlzdHZlcnNpb24sIGRpc3RpZCA9IGRpc3QoJycpCiAgICAgICAgIGlmIGRpc3RuYW1lIGFuZCBub3QgdGVyc2U6Ci0gICAgICAgICAgICBwbGF0Zm9ybSA9IF9wbGF0Zm9ybShzeXN0ZW0scmVsZWFzZSxtYWNoaW5lLHByb2Nlc3NvciwKKyAgICAgICAgICAgIHBsYXRmb3JtID0gX3BsYXRmb3JtKHN5c3RlbSwgcmVsZWFzZSwgbWFjaGluZSwgcHJvY2Vzc29yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dpdGgnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdG5hbWUsZGlzdHZlcnNpb24sZGlzdGlkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdG5hbWUsIGRpc3R2ZXJzaW9uLCBkaXN0aWQpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAjIElmIHRoZSBkaXN0cmlidXRpb24gbmFtZSBpcyB1bmtub3duIGNoZWNrIGZvciBsaWJjIHZzLiBnbGliYwotICAgICAgICAgICAgbGliY25hbWUsbGliY3ZlcnNpb24gPSBsaWJjX3ZlcihzeXMuZXhlY3V0YWJsZSkKLSAgICAgICAgICAgIHBsYXRmb3JtID0gX3BsYXRmb3JtKHN5c3RlbSxyZWxlYXNlLG1hY2hpbmUscHJvY2Vzc29yLAorICAgICAgICAgICAgbGliY25hbWUsIGxpYmN2ZXJzaW9uID0gbGliY192ZXIoc3lzLmV4ZWN1dGFibGUpCisgICAgICAgICAgICBwbGF0Zm9ybSA9IF9wbGF0Zm9ybShzeXN0ZW0sIHJlbGVhc2UsIG1hY2hpbmUsIHByb2Nlc3NvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3aXRoJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYmNuYW1lK2xpYmN2ZXJzaW9uKQogICAgIGVsaWYgc3lzdGVtID09ICdKYXZhJzoKICAgICAgICAgIyBKYXZhIHBsYXRmb3JtcwotICAgICAgICByLHYsdm1pbmZvLChvc19uYW1lLG9zX3ZlcnNpb24sb3NfYXJjaCkgPSBqYXZhX3ZlcigpCisgICAgICAgIHIsIHYsIHZtaW5mbywgKG9zX25hbWUsIG9zX3ZlcnNpb24sIG9zX2FyY2gpID0gamF2YV92ZXIoKQogICAgICAgICBpZiB0ZXJzZSBvciBub3Qgb3NfbmFtZToKLSAgICAgICAgICAgIHBsYXRmb3JtID0gX3BsYXRmb3JtKHN5c3RlbSxyZWxlYXNlLHZlcnNpb24pCisgICAgICAgICAgICBwbGF0Zm9ybSA9IF9wbGF0Zm9ybShzeXN0ZW0sIHJlbGVhc2UsIHZlcnNpb24pCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBwbGF0Zm9ybSA9IF9wbGF0Zm9ybShzeXN0ZW0scmVsZWFzZSx2ZXJzaW9uLAorICAgICAgICAgICAgcGxhdGZvcm0gPSBfcGxhdGZvcm0oc3lzdGVtLCByZWxlYXNlLCB2ZXJzaW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29uJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zX25hbWUsb3NfdmVyc2lvbixvc19hcmNoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3NfbmFtZSwgb3NfdmVyc2lvbiwgb3NfYXJjaCkKIAogICAgIGVsaWYgc3lzdGVtID09ICdNYWNPUyc6CiAgICAgICAgICMgTWFjT1MgcGxhdGZvcm1zCiAgICAgICAgIGlmIHRlcnNlOgotICAgICAgICAgICAgcGxhdGZvcm0gPSBfcGxhdGZvcm0oc3lzdGVtLHJlbGVhc2UpCisgICAgICAgICAgICBwbGF0Zm9ybSA9IF9wbGF0Zm9ybShzeXN0ZW0sIHJlbGVhc2UpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBwbGF0Zm9ybSA9IF9wbGF0Zm9ybShzeXN0ZW0scmVsZWFzZSxtYWNoaW5lKQorICAgICAgICAgICAgcGxhdGZvcm0gPSBfcGxhdGZvcm0oc3lzdGVtLCByZWxlYXNlLCBtYWNoaW5lKQogCiAgICAgZWxzZToKICAgICAgICAgIyBHZW5lcmljIGhhbmRsZXIKICAgICAgICAgaWYgdGVyc2U6Ci0gICAgICAgICAgICBwbGF0Zm9ybSA9IF9wbGF0Zm9ybShzeXN0ZW0scmVsZWFzZSkKKyAgICAgICAgICAgIHBsYXRmb3JtID0gX3BsYXRmb3JtKHN5c3RlbSwgcmVsZWFzZSkKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGJpdHMsbGlua2FnZSA9IGFyY2hpdGVjdHVyZShzeXMuZXhlY3V0YWJsZSkKLSAgICAgICAgICAgIHBsYXRmb3JtID0gX3BsYXRmb3JtKHN5c3RlbSxyZWxlYXNlLG1hY2hpbmUscHJvY2Vzc29yLGJpdHMsbGlua2FnZSkKKyAgICAgICAgICAgIGJpdHMsIGxpbmthZ2UgPSBhcmNoaXRlY3R1cmUoc3lzLmV4ZWN1dGFibGUpCisgICAgICAgICAgICBwbGF0Zm9ybSA9IF9wbGF0Zm9ybShzeXN0ZW0sIHJlbGVhc2UsIG1hY2hpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzb3IsIGJpdHMsIGxpbmthZ2UpCiAKICAgICBfcGxhdGZvcm1fY2FjaGVbKGFsaWFzZWQsIHRlcnNlKV0gPSBwbGF0Zm9ybQogICAgIHJldHVybiBwbGF0Zm9ybQpAQCAtMTUzNSw1ICsxNDI3LDUgQEAKICAgICAjIERlZmF1bHQgaXMgdG8gcHJpbnQgdGhlIGFsaWFzZWQgdmVyYm9zZSBwbGF0Zm9ybSBzdHJpbmcKICAgICB0ZXJzZSA9ICgndGVyc2UnIGluIHN5cy5hcmd2IG9yICctLXRlcnNlJyBpbiBzeXMuYXJndikKICAgICBhbGlhc2VkID0gKG5vdCAnbm9uYWxpYXNlZCcgaW4gc3lzLmFyZ3YgYW5kIG5vdCAnLS1ub25hbGlhc2VkJyBpbiBzeXMuYXJndikKLSAgICBwcmludChwbGF0Zm9ybShhbGlhc2VkLHRlcnNlKSkKKyAgICBwcmludChwbGF0Zm9ybShhbGlhc2VkLCB0ZXJzZSkpCiAgICAgc3lzLmV4aXQoMCkKZGlmZiAtLWdpdCBhL0xpYi9wbGlzdGxpYi5weSBiL0xpYi9wbGlzdGxpYi5weQppbmRleCAyYjBiNjM0Li5iOTk0NmZkIDEwMDY0NAotLS0gYS9MaWIvcGxpc3RsaWIucHkKKysrIGIvTGliL3BsaXN0bGliLnB5CkBAIC00LDI1ICs0LDIwIEBACiBiYXNpYyBvYmplY3QgdHlwZXMsIGxpa2UgZGljdGlvbmFyaWVzLCBsaXN0cywgbnVtYmVycyBhbmQgc3RyaW5ncy4KIFVzdWFsbHkgdGhlIHRvcCBsZXZlbCBvYmplY3QgaXMgYSBkaWN0aW9uYXJ5LgogCi1UbyB3cml0ZSBvdXQgYSBwbGlzdCBmaWxlLCB1c2UgdGhlIHdyaXRlUGxpc3Qocm9vdE9iamVjdCwgcGF0aE9yRmlsZSkKLWZ1bmN0aW9uLiAncm9vdE9iamVjdCcgaXMgdGhlIHRvcCBsZXZlbCBvYmplY3QsICdwYXRoT3JGaWxlJyBpcyBhCi1maWxlbmFtZSBvciBhICh3cml0YWJsZSkgZmlsZSBvYmplY3QuCitUbyB3cml0ZSBvdXQgYSBwbGlzdCBmaWxlLCB1c2UgdGhlIGR1bXAodmFsdWUsIGZpbGUpCitmdW5jdGlvbi4gJ3ZhbHVlJyBpcyB0aGUgdG9wIGxldmVsIG9iamVjdCwgJ2ZpbGUnIGlzCithICh3cml0YWJsZSkgZmlsZSBvYmplY3QuCiAKLVRvIHBhcnNlIGEgcGxpc3QgZnJvbSBhIGZpbGUsIHVzZSB0aGUgcmVhZFBsaXN0KHBhdGhPckZpbGUpIGZ1bmN0aW9uLAotd2l0aCBhIGZpbGUgbmFtZSBvciBhIChyZWFkYWJsZSkgZmlsZSBvYmplY3QgYXMgdGhlIG9ubHkgYXJndW1lbnQuIEl0CitUbyBwYXJzZSBhIHBsaXN0IGZyb20gYSBmaWxlLCB1c2UgdGhlIGxvYWQoZmlsZSkgZnVuY3Rpb24sCit3aXRoIGEgKHJlYWRhYmxlKSBmaWxlIG9iamVjdCBhcyB0aGUgb25seSBhcmd1bWVudC4gSXQKIHJldHVybnMgdGhlIHRvcCBsZXZlbCBvYmplY3QgKGFnYWluLCB1c3VhbGx5IGEgZGljdGlvbmFyeSkuCiAKLVRvIHdvcmsgd2l0aCBwbGlzdCBkYXRhIGluIGJ5dGVzIG9iamVjdHMsIHlvdSBjYW4gdXNlIHJlYWRQbGlzdEZyb21CeXRlcygpCi1hbmQgd3JpdGVQbGlzdFRvQnl0ZXMoKS4KK1RvIHdvcmsgd2l0aCBwbGlzdCBkYXRhIGluIGJ5dGVzIG9iamVjdHMsIHlvdSBjYW4gdXNlIGxvYWRzKCkKK2FuZCBkdW1wcygpLgogCiBWYWx1ZXMgY2FuIGJlIHN0cmluZ3MsIGludGVnZXJzLCBmbG9hdHMsIGJvb2xlYW5zLCB0dXBsZXMsIGxpc3RzLAotZGljdGlvbmFyaWVzIChidXQgb25seSB3aXRoIHN0cmluZyBrZXlzKSwgRGF0YSBvciBkYXRldGltZS5kYXRldGltZSBvYmplY3RzLgotU3RyaW5nIHZhbHVlcyAoaW5jbHVkaW5nIGRpY3Rpb25hcnkga2V5cykgaGF2ZSB0byBiZSB1bmljb2RlIHN0cmluZ3MgLS0gdGhleQotd2lsbCBiZSB3cml0dGVuIG91dCBhcyBVVEYtOC4KLQotVGhlIDxkYXRhPiBwbGlzdCB0eXBlIGlzIHN1cHBvcnRlZCB0aHJvdWdoIHRoZSBEYXRhIGNsYXNzLiBUaGlzIGlzIGEKLXRoaW4gd3JhcHBlciBhcm91bmQgYSBQeXRob24gYnl0ZXMgb2JqZWN0LiBVc2UgJ0RhdGEnIGlmIHlvdXIgc3RyaW5ncwotY29udGFpbiBjb250cm9sIGNoYXJhY3RlcnMuCitkaWN0aW9uYXJpZXMgKGJ1dCBvbmx5IHdpdGggc3RyaW5nIGtleXMpLCBEYXRhLCBieXRlcywgYnl0ZWFycmF5LCBvcgorZGF0ZXRpbWUuZGF0ZXRpbWUgb2JqZWN0cy4KIAogR2VuZXJhdGUgUGxpc3QgZXhhbXBsZToKIApAQCAtMzcsMjI2ICszMiw0OCBAQAogICAgICAgICAgICAgYVRydWVWYWx1ZSA9IFRydWUsCiAgICAgICAgICAgICBhRmFsc2VWYWx1ZSA9IEZhbHNlLAogICAgICAgICApLAotICAgICAgICBzb21lRGF0YSA9IERhdGEoYiI8YmluYXJ5IGd1bms+IiksCi0gICAgICAgIHNvbWVNb3JlRGF0YSA9IERhdGEoYiI8bG90cyBvZiBiaW5hcnkgZ3Vuaz4iICogMTApLAorICAgICAgICBzb21lRGF0YSA9IGIiPGJpbmFyeSBndW5rPiIsCisgICAgICAgIHNvbWVNb3JlRGF0YSA9IGIiPGxvdHMgb2YgYmluYXJ5IGd1bms+IiAqIDEwLAogICAgICAgICBhRGF0ZSA9IGRhdGV0aW1lLmRhdGV0aW1lLmZyb210aW1lc3RhbXAodGltZS5ta3RpbWUodGltZS5nbXRpbWUoKSkpLAogICAgICkKLSAgICB3cml0ZVBsaXN0KHBsLCBmaWxlTmFtZSkKKyAgICB3aXRoIG9wZW4oZmlsZU5hbWUsICd3YicpIGFzIGZwOgorICAgICAgICBkdW1wKHBsLCBmcCkKIAogUGFyc2UgUGxpc3QgZXhhbXBsZToKIAotICAgIHBsID0gcmVhZFBsaXN0KHBhdGhPckZpbGUpCi0gICAgcHJpbnQgcGxbImFLZXkiXQorICAgIHdpdGggb3BlbihmaWxlTmFtZSwgJ3JiJykgYXMgZnA6CisgICAgICAgIHBsID0gbG9hZChmcCkKKyAgICBwcmludChwbFsiYUtleSJdKQogIiIiCi0KLQogX19hbGxfXyA9IFsKICAgICAicmVhZFBsaXN0IiwgIndyaXRlUGxpc3QiLCAicmVhZFBsaXN0RnJvbUJ5dGVzIiwgIndyaXRlUGxpc3RUb0J5dGVzIiwKLSAgICAiUGxpc3QiLCAiRGF0YSIsICJEaWN0IgorICAgICJQbGlzdCIsICJEYXRhIiwgIkRpY3QiLCAiRk1UX1hNTCIsICJGTVRfQklOQVJZIiwKKyAgICAibG9hZCIsICJkdW1wIiwgImxvYWRzIiwgImR1bXBzIgogXQotIyBOb3RlOiB0aGUgUGxpc3QgYW5kIERpY3QgY2xhc3NlcyBoYXZlIGJlZW4gZGVwcmVjYXRlZC4KIAogaW1wb3J0IGJpbmFzY2lpCitpbXBvcnQgY29kZWNzCitpbXBvcnQgY29udGV4dGxpYgogaW1wb3J0IGRhdGV0aW1lCitpbXBvcnQgZW51bQogZnJvbSBpbyBpbXBvcnQgQnl0ZXNJTworaW1wb3J0IGl0ZXJ0b29scworaW1wb3J0IG9zCiBpbXBvcnQgcmUKK2ltcG9ydCBzdHJ1Y3QKK2Zyb20gd2FybmluZ3MgaW1wb3J0IHdhcm4KK2Zyb20geG1sLnBhcnNlcnMuZXhwYXQgaW1wb3J0IFBhcnNlckNyZWF0ZQogCiAKLWRlZiByZWFkUGxpc3QocGF0aE9yRmlsZSk6Ci0gICAgIiIiUmVhZCBhIC5wbGlzdCBmaWxlLiAncGF0aE9yRmlsZScgbWF5IGVpdGhlciBiZSBhIGZpbGUgbmFtZSBvciBhCi0gICAgKHJlYWRhYmxlKSBmaWxlIG9iamVjdC4gUmV0dXJuIHRoZSB1bnBhY2tlZCByb290IG9iamVjdCAod2hpY2gKLSAgICB1c3VhbGx5IGlzIGEgZGljdGlvbmFyeSkuCi0gICAgIiIiCi0gICAgZGlkT3BlbiA9IEZhbHNlCi0gICAgdHJ5OgotICAgICAgICBpZiBpc2luc3RhbmNlKHBhdGhPckZpbGUsIHN0cik6Ci0gICAgICAgICAgICBwYXRoT3JGaWxlID0gb3BlbihwYXRoT3JGaWxlLCAncmInKQotICAgICAgICAgICAgZGlkT3BlbiA9IFRydWUKLSAgICAgICAgcCA9IFBsaXN0UGFyc2VyKCkKLSAgICAgICAgcm9vdE9iamVjdCA9IHAucGFyc2UocGF0aE9yRmlsZSkKLSAgICBmaW5hbGx5OgotICAgICAgICBpZiBkaWRPcGVuOgotICAgICAgICAgICAgcGF0aE9yRmlsZS5jbG9zZSgpCi0gICAgcmV0dXJuIHJvb3RPYmplY3QKK1BsaXN0Rm9ybWF0ID0gZW51bS5FbnVtKCdQbGlzdEZvcm1hdCcsICdGTVRfWE1MIEZNVF9CSU5BUlknLCBtb2R1bGU9X19uYW1lX18pCitnbG9iYWxzKCkudXBkYXRlKFBsaXN0Rm9ybWF0Ll9fbWVtYmVyc19fKQogCiAKLWRlZiB3cml0ZVBsaXN0KHJvb3RPYmplY3QsIHBhdGhPckZpbGUpOgotICAgICIiIldyaXRlICdyb290T2JqZWN0JyB0byBhIC5wbGlzdCBmaWxlLiAncGF0aE9yRmlsZScgbWF5IGVpdGhlciBiZSBhCi0gICAgZmlsZSBuYW1lIG9yIGEgKHdyaXRhYmxlKSBmaWxlIG9iamVjdC4KLSAgICAiIiIKLSAgICBkaWRPcGVuID0gRmFsc2UKLSAgICB0cnk6Ci0gICAgICAgIGlmIGlzaW5zdGFuY2UocGF0aE9yRmlsZSwgc3RyKToKLSAgICAgICAgICAgIHBhdGhPckZpbGUgPSBvcGVuKHBhdGhPckZpbGUsICd3YicpCi0gICAgICAgICAgICBkaWRPcGVuID0gVHJ1ZQotICAgICAgICB3cml0ZXIgPSBQbGlzdFdyaXRlcihwYXRoT3JGaWxlKQotICAgICAgICB3cml0ZXIud3JpdGVsbigiPHBsaXN0IHZlcnNpb249XCIxLjBcIj4iKQotICAgICAgICB3cml0ZXIud3JpdGVWYWx1ZShyb290T2JqZWN0KQotICAgICAgICB3cml0ZXIud3JpdGVsbigiPC9wbGlzdD4iKQotICAgIGZpbmFsbHk6Ci0gICAgICAgIGlmIGRpZE9wZW46Ci0gICAgICAgICAgICBwYXRoT3JGaWxlLmNsb3NlKCkKLQotCi1kZWYgcmVhZFBsaXN0RnJvbUJ5dGVzKGRhdGEpOgotICAgICIiIlJlYWQgYSBwbGlzdCBkYXRhIGZyb20gYSBieXRlcyBvYmplY3QuIFJldHVybiB0aGUgcm9vdCBvYmplY3QuCi0gICAgIiIiCi0gICAgcmV0dXJuIHJlYWRQbGlzdChCeXRlc0lPKGRhdGEpKQotCi0KLWRlZiB3cml0ZVBsaXN0VG9CeXRlcyhyb290T2JqZWN0KToKLSAgICAiIiJSZXR1cm4gJ3Jvb3RPYmplY3QnIGFzIGEgcGxpc3QtZm9ybWF0dGVkIGJ5dGVzIG9iamVjdC4KLSAgICAiIiIKLSAgICBmID0gQnl0ZXNJTygpCi0gICAgd3JpdGVQbGlzdChyb290T2JqZWN0LCBmKQotICAgIHJldHVybiBmLmdldHZhbHVlKCkKLQotCi1jbGFzcyBEdW1iWE1MV3JpdGVyOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlLCBpbmRlbnRMZXZlbD0wLCBpbmRlbnQ9Ilx0Iik6Ci0gICAgICAgIHNlbGYuZmlsZSA9IGZpbGUKLSAgICAgICAgc2VsZi5zdGFjayA9IFtdCi0gICAgICAgIHNlbGYuaW5kZW50TGV2ZWwgPSBpbmRlbnRMZXZlbAotICAgICAgICBzZWxmLmluZGVudCA9IGluZGVudAotCi0gICAgZGVmIGJlZ2luRWxlbWVudChzZWxmLCBlbGVtZW50KToKLSAgICAgICAgc2VsZi5zdGFjay5hcHBlbmQoZWxlbWVudCkKLSAgICAgICAgc2VsZi53cml0ZWxuKCI8JXM+IiAlIGVsZW1lbnQpCi0gICAgICAgIHNlbGYuaW5kZW50TGV2ZWwgKz0gMQotCi0gICAgZGVmIGVuZEVsZW1lbnQoc2VsZiwgZWxlbWVudCk6Ci0gICAgICAgIGFzc2VydCBzZWxmLmluZGVudExldmVsID4gMAotICAgICAgICBhc3NlcnQgc2VsZi5zdGFjay5wb3AoKSA9PSBlbGVtZW50Ci0gICAgICAgIHNlbGYuaW5kZW50TGV2ZWwgLT0gMQotICAgICAgICBzZWxmLndyaXRlbG4oIjwvJXM+IiAlIGVsZW1lbnQpCi0KLSAgICBkZWYgc2ltcGxlRWxlbWVudChzZWxmLCBlbGVtZW50LCB2YWx1ZT1Ob25lKToKLSAgICAgICAgaWYgdmFsdWUgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICB2YWx1ZSA9IF9lc2NhcGUodmFsdWUpCi0gICAgICAgICAgICBzZWxmLndyaXRlbG4oIjwlcz4lczwvJXM+IiAlIChlbGVtZW50LCB2YWx1ZSwgZWxlbWVudCkpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLndyaXRlbG4oIjwlcy8+IiAlIGVsZW1lbnQpCi0KLSAgICBkZWYgd3JpdGVsbihzZWxmLCBsaW5lKToKLSAgICAgICAgaWYgbGluZToKLSAgICAgICAgICAgICMgcGxpc3QgaGFzIGZpeGVkIGVuY29kaW5nIG9mIHV0Zi04Ci0gICAgICAgICAgICBpZiBpc2luc3RhbmNlKGxpbmUsIHN0cik6Ci0gICAgICAgICAgICAgICAgbGluZSA9IGxpbmUuZW5jb2RlKCd1dGYtOCcpCi0gICAgICAgICAgICBzZWxmLmZpbGUud3JpdGUoc2VsZi5pbmRlbnRMZXZlbCAqIHNlbGYuaW5kZW50KQotICAgICAgICAgICAgc2VsZi5maWxlLndyaXRlKGxpbmUpCi0gICAgICAgIHNlbGYuZmlsZS53cml0ZShiJ1xuJykKLQotCi0jIENvbnRlbnRzIHNob3VsZCBjb25mb3JtIHRvIGEgc3Vic2V0IG9mIElTTyA4NjAxCi0jIChpbiBwYXJ0aWN1bGFyLCBZWVlZICctJyBNTSAnLScgREQgJ1QnIEhIICc6JyBNTSAnOicgU1MgJ1onLiAgU21hbGxlciB1bml0cyBtYXkgYmUgb21pdHRlZCB3aXRoCi0jICBhIGxvc3Mgb2YgcHJlY2lzaW9uKQotX2RhdGVQYXJzZXIgPSByZS5jb21waWxlKHIiKD9QPHllYXI+XGRcZFxkXGQpKD86LSg/UDxtb250aD5cZFxkKSg/Oi0oP1A8ZGF5PlxkXGQpKD86VCg/UDxob3VyPlxkXGQpKD86Oig/UDxtaW51dGU+XGRcZCkoPzo6KD9QPHNlY29uZD5cZFxkKSk/KT8pPyk/KT9aIiwgcmUuQVNDSUkpCi0KLWRlZiBfZGF0ZUZyb21TdHJpbmcocyk6Ci0gICAgb3JkZXIgPSAoJ3llYXInLCAnbW9udGgnLCAnZGF5JywgJ2hvdXInLCAnbWludXRlJywgJ3NlY29uZCcpCi0gICAgZ2QgPSBfZGF0ZVBhcnNlci5tYXRjaChzKS5ncm91cGRpY3QoKQotICAgIGxzdCA9IFtdCi0gICAgZm9yIGtleSBpbiBvcmRlcjoKLSAgICAgICAgdmFsID0gZ2Rba2V5XQotICAgICAgICBpZiB2YWwgaXMgTm9uZToKLSAgICAgICAgICAgIGJyZWFrCi0gICAgICAgIGxzdC5hcHBlbmQoaW50KHZhbCkpCi0gICAgcmV0dXJuIGRhdGV0aW1lLmRhdGV0aW1lKCpsc3QpCi0KLWRlZiBfZGF0ZVRvU3RyaW5nKGQpOgotICAgIHJldHVybiAnJTA0ZC0lMDJkLSUwMmRUJTAyZDolMDJkOiUwMmRaJyAlICgKLSAgICAgICAgZC55ZWFyLCBkLm1vbnRoLCBkLmRheSwKLSAgICAgICAgZC5ob3VyLCBkLm1pbnV0ZSwgZC5zZWNvbmQKLSAgICApCi0KLQotIyBSZWdleCB0byBmaW5kIGFueSBjb250cm9sIGNoYXJzLCBleGNlcHQgZm9yIFx0IFxuIGFuZCBccgotX2NvbnRyb2xDaGFyUGF0ID0gcmUuY29tcGlsZSgKLSAgICByIltceDAwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1x4MDhceDBiXHgwY1x4MGVceDBmIgotICAgIHIiXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZl0iKQotCi1kZWYgX2VzY2FwZSh0ZXh0KToKLSAgICBtID0gX2NvbnRyb2xDaGFyUGF0LnNlYXJjaCh0ZXh0KQotICAgIGlmIG0gaXMgbm90IE5vbmU6Ci0gICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInN0cmluZ3MgY2FuJ3QgY29udGFpbnMgY29udHJvbCBjaGFyYWN0ZXJzOyAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgInVzZSBwbGlzdGxpYi5EYXRhIGluc3RlYWQiKQotICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoIlxyXG4iLCAiXG4iKSAgICAgICAjIGNvbnZlcnQgRE9TIGxpbmUgZW5kaW5ncwotICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoIlxyIiwgIlxuIikgICAgICAgICAjIGNvbnZlcnQgTWFjIGxpbmUgZW5kaW5ncwotICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoIiYiLCAiJmFtcDsiKSAgICAgICAjIGVzY2FwZSAnJicKLSAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKCI8IiwgIiZsdDsiKSAgICAgICAgIyBlc2NhcGUgJzwnCi0gICAgdGV4dCA9IHRleHQucmVwbGFjZSgiPiIsICImZ3Q7IikgICAgICAgICMgZXNjYXBlICc+JwotICAgIHJldHVybiB0ZXh0Ci0KLQotUExJU1RIRUFERVIgPSBiIiIiXAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRE9DVFlQRSBwbGlzdCBQVUJMSUMgIi0vL0FwcGxlLy9EVEQgUExJU1QgMS4wLy9FTiIgImh0dHA6Ly93d3cuYXBwbGUuY29tL0RURHMvUHJvcGVydHlMaXN0LTEuMC5kdGQiPgotIiIiCi0KLWNsYXNzIFBsaXN0V3JpdGVyKER1bWJYTUxXcml0ZXIpOgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGUsIGluZGVudExldmVsPTAsIGluZGVudD1iIlx0Iiwgd3JpdGVIZWFkZXI9MSk6Ci0gICAgICAgIGlmIHdyaXRlSGVhZGVyOgotICAgICAgICAgICAgZmlsZS53cml0ZShQTElTVEhFQURFUikKLSAgICAgICAgRHVtYlhNTFdyaXRlci5fX2luaXRfXyhzZWxmLCBmaWxlLCBpbmRlbnRMZXZlbCwgaW5kZW50KQotCi0gICAgZGVmIHdyaXRlVmFsdWUoc2VsZiwgdmFsdWUpOgotICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCBzdHIpOgotICAgICAgICAgICAgc2VsZi5zaW1wbGVFbGVtZW50KCJzdHJpbmciLCB2YWx1ZSkKLSAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBib29sKToKLSAgICAgICAgICAgICMgbXVzdCBzd2l0Y2ggZm9yIGJvb2wgYmVmb3JlIGludCwgYXMgYm9vbCBpcyBhCi0gICAgICAgICAgICAjIHN1YmNsYXNzIG9mIGludC4uLgotICAgICAgICAgICAgaWYgdmFsdWU6Ci0gICAgICAgICAgICAgICAgc2VsZi5zaW1wbGVFbGVtZW50KCJ0cnVlIikKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5zaW1wbGVFbGVtZW50KCJmYWxzZSIpCi0gICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgaW50KToKLSAgICAgICAgICAgIHNlbGYuc2ltcGxlRWxlbWVudCgiaW50ZWdlciIsICIlZCIgJSB2YWx1ZSkKLSAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBmbG9hdCk6Ci0gICAgICAgICAgICBzZWxmLnNpbXBsZUVsZW1lbnQoInJlYWwiLCByZXByKHZhbHVlKSkKLSAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBkaWN0KToKLSAgICAgICAgICAgIHNlbGYud3JpdGVEaWN0KHZhbHVlKQotICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIERhdGEpOgotICAgICAgICAgICAgc2VsZi53cml0ZURhdGEodmFsdWUpCi0gICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgZGF0ZXRpbWUuZGF0ZXRpbWUpOgotICAgICAgICAgICAgc2VsZi5zaW1wbGVFbGVtZW50KCJkYXRlIiwgX2RhdGVUb1N0cmluZyh2YWx1ZSkpCi0gICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgKHR1cGxlLCBsaXN0KSk6Ci0gICAgICAgICAgICBzZWxmLndyaXRlQXJyYXkodmFsdWUpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoInVuc3VwcG9ydGVkIHR5cGU6ICVzIiAlIHR5cGUodmFsdWUpKQotCi0gICAgZGVmIHdyaXRlRGF0YShzZWxmLCBkYXRhKToKLSAgICAgICAgc2VsZi5iZWdpbkVsZW1lbnQoImRhdGEiKQotICAgICAgICBzZWxmLmluZGVudExldmVsIC09IDEKLSAgICAgICAgbWF4bGluZWxlbmd0aCA9IG1heCgxNiwgNzYgLSBsZW4oc2VsZi5pbmRlbnQucmVwbGFjZShiIlx0IiwgYiIgIiAqIDgpICoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaW5kZW50TGV2ZWwpKQotICAgICAgICBmb3IgbGluZSBpbiBkYXRhLmFzQmFzZTY0KG1heGxpbmVsZW5ndGgpLnNwbGl0KGIiXG4iKToKLSAgICAgICAgICAgIGlmIGxpbmU6Ci0gICAgICAgICAgICAgICAgc2VsZi53cml0ZWxuKGxpbmUpCi0gICAgICAgIHNlbGYuaW5kZW50TGV2ZWwgKz0gMQotICAgICAgICBzZWxmLmVuZEVsZW1lbnQoImRhdGEiKQotCi0gICAgZGVmIHdyaXRlRGljdChzZWxmLCBkKToKLSAgICAgICAgaWYgZDoKLSAgICAgICAgICAgIHNlbGYuYmVnaW5FbGVtZW50KCJkaWN0IikKLSAgICAgICAgICAgIGl0ZW1zID0gc29ydGVkKGQuaXRlbXMoKSkKLSAgICAgICAgICAgIGZvciBrZXksIHZhbHVlIGluIGl0ZW1zOgotICAgICAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGtleSwgc3RyKToKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJrZXlzIG11c3QgYmUgc3RyaW5ncyIpCi0gICAgICAgICAgICAgICAgc2VsZi5zaW1wbGVFbGVtZW50KCJrZXkiLCBrZXkpCi0gICAgICAgICAgICAgICAgc2VsZi53cml0ZVZhbHVlKHZhbHVlKQotICAgICAgICAgICAgc2VsZi5lbmRFbGVtZW50KCJkaWN0IikKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuc2ltcGxlRWxlbWVudCgiZGljdCIpCi0KLSAgICBkZWYgd3JpdGVBcnJheShzZWxmLCBhcnJheSk6Ci0gICAgICAgIGlmIGFycmF5OgotICAgICAgICAgICAgc2VsZi5iZWdpbkVsZW1lbnQoImFycmF5IikKLSAgICAgICAgICAgIGZvciB2YWx1ZSBpbiBhcnJheToKLSAgICAgICAgICAgICAgICBzZWxmLndyaXRlVmFsdWUodmFsdWUpCi0gICAgICAgICAgICBzZWxmLmVuZEVsZW1lbnQoImFycmF5IikKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuc2ltcGxlRWxlbWVudCgiYXJyYXkiKQorIworIworIyBEZXByZWNhdGVkIGZ1bmN0aW9uYWxpdHkKKyMKKyMKIAogCiBjbGFzcyBfSW50ZXJuYWxEaWN0KGRpY3QpOgpAQCAtMjY0LDE5ICs4MSwxOCBAQAogICAgICMgVGhpcyBjbGFzcyBpcyBuZWVkZWQgd2hpbGUgRGljdCBpcyBzY2hlZHVsZWQgZm9yIGRlcHJlY2F0aW9uOgogICAgICMgd2Ugb25seSBuZWVkIHRvIHdhcm4gd2hlbiBhICp1c2VyKiBpbnN0YW50aWF0ZXMgRGljdCBvciB3aGVuCiAgICAgIyB0aGUgImF0dHJpYnV0ZSBub3RhdGlvbiBmb3IgZGljdCBrZXlzIiBpcyB1c2VkLgorICAgIF9fc2xvdHNfXyA9ICgpCiAKICAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwgYXR0cik6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHZhbHVlID0gc2VsZlthdHRyXQogICAgICAgICBleGNlcHQgS2V5RXJyb3I6CiAgICAgICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcihhdHRyKQotICAgICAgICBmcm9tIHdhcm5pbmdzIGltcG9ydCB3YXJuCiAgICAgICAgIHdhcm4oIkF0dHJpYnV0ZSBhY2Nlc3MgZnJvbSBwbGlzdCBkaWN0cyBpcyBkZXByZWNhdGVkLCB1c2UgZFtrZXldICIKICAgICAgICAgICAgICAibm90YXRpb24gaW5zdGVhZCIsIERlcHJlY2F0aW9uV2FybmluZywgMikKICAgICAgICAgcmV0dXJuIHZhbHVlCiAKICAgICBkZWYgX19zZXRhdHRyX18oc2VsZiwgYXR0ciwgdmFsdWUpOgotICAgICAgICBmcm9tIHdhcm5pbmdzIGltcG9ydCB3YXJuCiAgICAgICAgIHdhcm4oIkF0dHJpYnV0ZSBhY2Nlc3MgZnJvbSBwbGlzdCBkaWN0cyBpcyBkZXByZWNhdGVkLCB1c2UgZFtrZXldICIKICAgICAgICAgICAgICAibm90YXRpb24gaW5zdGVhZCIsIERlcHJlY2F0aW9uV2FybmluZywgMikKICAgICAgICAgc2VsZlthdHRyXSA9IHZhbHVlCkBAIC0yODYsNTYgKzEwMiwxMTEgQEAKICAgICAgICAgICAgIGRlbCBzZWxmW2F0dHJdCiAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKICAgICAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKGF0dHIpCi0gICAgICAgIGZyb20gd2FybmluZ3MgaW1wb3J0IHdhcm4KICAgICAgICAgd2FybigiQXR0cmlidXRlIGFjY2VzcyBmcm9tIHBsaXN0IGRpY3RzIGlzIGRlcHJlY2F0ZWQsIHVzZSBkW2tleV0gIgogICAgICAgICAgICAgICJub3RhdGlvbiBpbnN0ZWFkIiwgRGVwcmVjYXRpb25XYXJuaW5nLCAyKQogCisKIGNsYXNzIERpY3QoX0ludGVybmFsRGljdCk6CiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgKiprd2FyZ3MpOgotICAgICAgICBmcm9tIHdhcm5pbmdzIGltcG9ydCB3YXJuCiAgICAgICAgIHdhcm4oIlRoZSBwbGlzdGxpYi5EaWN0IGNsYXNzIGlzIGRlcHJlY2F0ZWQsIHVzZSBidWlsdGluIGRpY3QgaW5zdGVhZCIsCiAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nLCAyKQogICAgICAgICBzdXBlcigpLl9faW5pdF9fKCoqa3dhcmdzKQogCiAKLWNsYXNzIFBsaXN0KF9JbnRlcm5hbERpY3QpOgorQGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIKK2RlZiBfbWF5YmVfb3BlbihwYXRoT3JGaWxlLCBtb2RlKToKKyAgICBpZiBpc2luc3RhbmNlKHBhdGhPckZpbGUsIHN0cik6CisgICAgICAgIHdpdGggb3BlbihwYXRoT3JGaWxlLCBtb2RlKSBhcyBmcDoKKyAgICAgICAgICAgIHlpZWxkIGZwCiAKLSAgICAiIiJUaGlzIGNsYXNzIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSByZWFkUGxpc3QoKSBhbmQgd3JpdGVQbGlzdCgpCisgICAgZWxzZToKKyAgICAgICAgeWllbGQgcGF0aE9yRmlsZQorCisKK2NsYXNzIFBsaXN0KF9JbnRlcm5hbERpY3QpOgorICAgICIiIlRoaXMgY2xhc3MgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIGR1bXAoKSBhbmQgbG9hZCgpCiAgICAgZnVuY3Rpb25zIGluc3RlYWQsIHRvZ2V0aGVyIHdpdGggcmVndWxhciBkaWN0IG9iamVjdHMuCiAgICAgIiIiCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgKiprd2FyZ3MpOgotICAgICAgICBmcm9tIHdhcm5pbmdzIGltcG9ydCB3YXJuCi0gICAgICAgIHdhcm4oIlRoZSBQbGlzdCBjbGFzcyBpcyBkZXByZWNhdGVkLCB1c2UgdGhlIHJlYWRQbGlzdCgpIGFuZCAiCi0gICAgICAgICAgICAgIndyaXRlUGxpc3QoKSBmdW5jdGlvbnMgaW5zdGVhZCIsIERlcHJlY2F0aW9uV2FybmluZywgMikKKyAgICAgICAgd2FybigiVGhlIFBsaXN0IGNsYXNzIGlzIGRlcHJlY2F0ZWQsIHVzZSB0aGUgbG9hZCgpIGFuZCAiCisgICAgICAgICAgICAgImR1bXAoKSBmdW5jdGlvbnMgaW5zdGVhZCIsIERlcHJlY2F0aW9uV2FybmluZywgMikKICAgICAgICAgc3VwZXIoKS5fX2luaXRfXygqKmt3YXJncykKIAorICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBmcm9tRmlsZShjbHMsIHBhdGhPckZpbGUpOgotICAgICAgICAiIiJEZXByZWNhdGVkLiBVc2UgdGhlIHJlYWRQbGlzdCgpIGZ1bmN0aW9uIGluc3RlYWQuIiIiCi0gICAgICAgIHJvb3RPYmplY3QgPSByZWFkUGxpc3QocGF0aE9yRmlsZSkKKyAgICAgICAgIiIiRGVwcmVjYXRlZC4gVXNlIHRoZSBsb2FkKCkgZnVuY3Rpb24gaW5zdGVhZC4iIiIKKyAgICAgICAgd2l0aCBfbWF5YmVfb3BlbihwYXRoT3JGaWxlLCAncmInKSBhcyBmcDoKKyAgICAgICAgICAgIHZhbHVlID0gbG9hZChmcCkKICAgICAgICAgcGxpc3QgPSBjbHMoKQotICAgICAgICBwbGlzdC51cGRhdGUocm9vdE9iamVjdCkKKyAgICAgICAgcGxpc3QudXBkYXRlKHZhbHVlKQogICAgICAgICByZXR1cm4gcGxpc3QKLSAgICBmcm9tRmlsZSA9IGNsYXNzbWV0aG9kKGZyb21GaWxlKQogCiAgICAgZGVmIHdyaXRlKHNlbGYsIHBhdGhPckZpbGUpOgotICAgICAgICAiIiJEZXByZWNhdGVkLiBVc2UgdGhlIHdyaXRlUGxpc3QoKSBmdW5jdGlvbiBpbnN0ZWFkLiIiIgotICAgICAgICB3cml0ZVBsaXN0KHNlbGYsIHBhdGhPckZpbGUpCisgICAgICAgICIiIkRlcHJlY2F0ZWQuIFVzZSB0aGUgZHVtcCgpIGZ1bmN0aW9uIGluc3RlYWQuIiIiCisgICAgICAgIHdpdGggX21heWJlX29wZW4ocGF0aE9yRmlsZSwgJ3diJykgYXMgZnA6CisgICAgICAgICAgICBkdW1wKHNlbGYsIGZwKQogCiAKLWRlZiBfZW5jb2RlQmFzZTY0KHMsIG1heGxpbmVsZW5ndGg9NzYpOgotICAgICMgY29waWVkIGZyb20gYmFzZTY0LmVuY29kZWJ5dGVzKCksIHdpdGggYWRkZWQgbWF4bGluZWxlbmd0aCBhcmd1bWVudAotICAgIG1heGJpbnNpemUgPSAobWF4bGluZWxlbmd0aC8vNCkqMwotICAgIHBpZWNlcyA9IFtdCi0gICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKHMpLCBtYXhiaW5zaXplKToKLSAgICAgICAgY2h1bmsgPSBzW2kgOiBpICsgbWF4Ymluc2l6ZV0KLSAgICAgICAgcGllY2VzLmFwcGVuZChiaW5hc2NpaS5iMmFfYmFzZTY0KGNodW5rKSkKLSAgICByZXR1cm4gYicnLmpvaW4ocGllY2VzKQorZGVmIHJlYWRQbGlzdChwYXRoT3JGaWxlKToKKyAgICAiIiIKKyAgICBSZWFkIGEgLnBsaXN0IGZyb20gYSBwYXRoIG9yIGZpbGUuIHBhdGhPckZpbGUgc2hvdWxkIGVpdGhlcgorICAgIGJlIGEgZmlsZSBuYW1lLCBvciBhIHJlYWRhYmxlIGJpbmFyeSBmaWxlIG9iamVjdC4KKworICAgIFRoaXMgZnVuY3Rpb24gaXMgZGVwcmVjYXRlZCwgdXNlIGxvYWQgaW5zdGVhZC4KKyAgICAiIiIKKyAgICB3YXJuKCJUaGUgcmVhZFBsaXN0IGZ1bmN0aW9uIGlzIGRlcHJlY2F0ZWQsIHVzZSBsb2FkKCkgaW5zdGVhZCIsCisgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgMikKKworICAgIHdpdGggX21heWJlX29wZW4ocGF0aE9yRmlsZSwgJ3JiJykgYXMgZnA6CisgICAgICAgIHJldHVybiBsb2FkKGZwLCBmbXQ9Tm9uZSwgdXNlX2J1aWx0aW5fdHlwZXM9RmFsc2UsCisgICAgICAgICAgICBkaWN0X3R5cGU9X0ludGVybmFsRGljdCkKKworZGVmIHdyaXRlUGxpc3QodmFsdWUsIHBhdGhPckZpbGUpOgorICAgICIiIgorICAgIFdyaXRlICd2YWx1ZScgdG8gYSAucGxpc3QgZmlsZS4gJ3BhdGhPckZpbGUnIG1heSBlaXRoZXIgYmUgYQorICAgIGZpbGUgbmFtZSBvciBhICh3cml0YWJsZSkgZmlsZSBvYmplY3QuCisKKyAgICBUaGlzIGZ1bmN0aW9uIGlzIGRlcHJlY2F0ZWQsIHVzZSBkdW1wIGluc3RlYWQuCisgICAgIiIiCisgICAgd2FybigiVGhlIHdyaXRlUGxpc3QgZnVuY3Rpb24gaXMgZGVwcmVjYXRlZCwgdXNlIGR1bXAoKSBpbnN0ZWFkIiwKKyAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nLCAyKQorICAgIHdpdGggX21heWJlX29wZW4ocGF0aE9yRmlsZSwgJ3diJykgYXMgZnA6CisgICAgICAgIGR1bXAodmFsdWUsIGZwLCBmbXQ9Rk1UX1hNTCwgc29ydF9rZXlzPVRydWUsIHNraXBrZXlzPUZhbHNlKQorCisKK2RlZiByZWFkUGxpc3RGcm9tQnl0ZXMoZGF0YSk6CisgICAgIiIiCisgICAgUmVhZCBhIHBsaXN0IGRhdGEgZnJvbSBhIGJ5dGVzIG9iamVjdC4gUmV0dXJuIHRoZSByb290IG9iamVjdC4KKworICAgIFRoaXMgZnVuY3Rpb24gaXMgZGVwcmVjYXRlZCwgdXNlIGxvYWRzIGluc3RlYWQuCisgICAgIiIiCisgICAgd2FybigiVGhlIHJlYWRQbGlzdEZyb21CeXRlcyBmdW5jdGlvbiBpcyBkZXByZWNhdGVkLCB1c2UgbG9hZHMoKSBpbnN0ZWFkIiwKKyAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nLCAyKQorICAgIHJldHVybiBsb2FkKEJ5dGVzSU8oZGF0YSksIGZtdD1Ob25lLCB1c2VfYnVpbHRpbl90eXBlcz1GYWxzZSwKKyAgICAgICAgZGljdF90eXBlPV9JbnRlcm5hbERpY3QpCisKKworZGVmIHdyaXRlUGxpc3RUb0J5dGVzKHZhbHVlKToKKyAgICAiIiIKKyAgICBSZXR1cm4gJ3ZhbHVlJyBhcyBhIHBsaXN0LWZvcm1hdHRlZCBieXRlcyBvYmplY3QuCisKKyAgICBUaGlzIGZ1bmN0aW9uIGlzIGRlcHJlY2F0ZWQsIHVzZSBkdW1wcyBpbnN0ZWFkLgorICAgICIiIgorICAgIHdhcm4oIlRoZSB3cml0ZVBsaXN0VG9CeXRlcyBmdW5jdGlvbiBpcyBkZXByZWNhdGVkLCB1c2UgZHVtcHMoKSBpbnN0ZWFkIiwKKyAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nLCAyKQorICAgIGYgPSBCeXRlc0lPKCkKKyAgICBkdW1wKHZhbHVlLCBmLCBmbXQ9Rk1UX1hNTCwgc29ydF9rZXlzPVRydWUsIHNraXBrZXlzPUZhbHNlKQorICAgIHJldHVybiBmLmdldHZhbHVlKCkKKwogCiBjbGFzcyBEYXRhOgorICAgICIiIgorICAgIFdyYXBwZXIgZm9yIGJpbmFyeSBkYXRhLgogCi0gICAgIiIiV3JhcHBlciBmb3IgYmluYXJ5IGRhdGEuIiIiCisgICAgVGhpcyBjbGFzcyBpcyBkZXByZWNhdGVkLCB1c2UgYSBieXRlcyBvYmplY3QgaW5zdGVhZC4KKyAgICAiIiIKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkYXRhKToKICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZGF0YSwgYnl0ZXMpOgpAQCAtMzQ2LDEwICsyMTcsMTAgQEAKICAgICBkZWYgZnJvbUJhc2U2NChjbHMsIGRhdGEpOgogICAgICAgICAjIGJhc2U2NC5kZWNvZGVieXRlcyBqdXN0IGNhbGxzIGJpbmFzY2lpLmEyYl9iYXNlNjQ7CiAgICAgICAgICMgaXQgc2VlbXMgb3ZlcmtpbGwgdG8gdXNlIGJvdGggYmFzZTY0IGFuZCBiaW5hc2NpaS4KLSAgICAgICAgcmV0dXJuIGNscyhiaW5hc2NpaS5hMmJfYmFzZTY0KGRhdGEpKQorICAgICAgICByZXR1cm4gY2xzKF9kZWNvZGVfYmFzZTY0KGRhdGEpKQogCiAgICAgZGVmIGFzQmFzZTY0KHNlbGYsIG1heGxpbmVsZW5ndGg9NzYpOgotICAgICAgICByZXR1cm4gX2VuY29kZUJhc2U2NChzZWxmLmRhdGEsIG1heGxpbmVsZW5ndGgpCisgICAgICAgIHJldHVybiBfZW5jb2RlX2Jhc2U2NChzZWxmLmRhdGEsIG1heGxpbmVsZW5ndGgpCiAKICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKICAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgc2VsZi5fX2NsYXNzX18pOgpAQCAtMzYyLDQzICsyMzMsMTE5IEBACiAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgICAgICByZXR1cm4gIiVzKCVzKSIgJSAoc2VsZi5fX2NsYXNzX18uX19uYW1lX18sIHJlcHIoc2VsZi5kYXRhKSkKIAotY2xhc3MgUGxpc3RQYXJzZXI6CisjCisjCisjIEVuZCBvZiBkZXByZWNhdGVkIGZ1bmN0aW9uYWxpdHkKKyMKKyMKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKworIworIyBYTUwgc3VwcG9ydAorIworCisKKyMgWE1MICdoZWFkZXInCitQTElTVEhFQURFUiA9IGIiIiJcCis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCFET0NUWVBFIHBsaXN0IFBVQkxJQyAiLS8vQXBwbGUvL0RURCBQTElTVCAxLjAvL0VOIiAiaHR0cDovL3d3dy5hcHBsZS5jb20vRFREcy9Qcm9wZXJ0eUxpc3QtMS4wLmR0ZCI+CisiIiIKKworCisjIFJlZ2V4IHRvIGZpbmQgYW55IGNvbnRyb2wgY2hhcnMsIGV4Y2VwdCBmb3IgXHQgXG4gYW5kIFxyCitfY29udHJvbENoYXJQYXQgPSByZS5jb21waWxlKAorICAgIHIiW1x4MDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XHgwOFx4MGJceDBjXHgwZVx4MGYiCisgICAgciJceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmXSIpCisKK2RlZiBfZW5jb2RlX2Jhc2U2NChzLCBtYXhsaW5lbGVuZ3RoPTc2KToKKyAgICAjIGNvcGllZCBmcm9tIGJhc2U2NC5lbmNvZGVieXRlcygpLCB3aXRoIGFkZGVkIG1heGxpbmVsZW5ndGggYXJndW1lbnQKKyAgICBtYXhiaW5zaXplID0gKG1heGxpbmVsZW5ndGgvLzQpKjMKKyAgICBwaWVjZXMgPSBbXQorICAgIGZvciBpIGluIHJhbmdlKDAsIGxlbihzKSwgbWF4Ymluc2l6ZSk6CisgICAgICAgIGNodW5rID0gc1tpIDogaSArIG1heGJpbnNpemVdCisgICAgICAgIHBpZWNlcy5hcHBlbmQoYmluYXNjaWkuYjJhX2Jhc2U2NChjaHVuaykpCisgICAgcmV0dXJuIGInJy5qb2luKHBpZWNlcykKKworZGVmIF9kZWNvZGVfYmFzZTY0KHMpOgorICAgIGlmIGlzaW5zdGFuY2Uocywgc3RyKToKKyAgICAgICAgcmV0dXJuIGJpbmFzY2lpLmEyYl9iYXNlNjQocy5lbmNvZGUoInV0Zi04IikpCisKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gYmluYXNjaWkuYTJiX2Jhc2U2NChzKQorCisjIENvbnRlbnRzIHNob3VsZCBjb25mb3JtIHRvIGEgc3Vic2V0IG9mIElTTyA4NjAxCisjIChpbiBwYXJ0aWN1bGFyLCBZWVlZICctJyBNTSAnLScgREQgJ1QnIEhIICc6JyBNTSAnOicgU1MgJ1onLiAgU21hbGxlciB1bml0cworIyBtYXkgYmUgb21pdHRlZCB3aXRoICMgIGEgbG9zcyBvZiBwcmVjaXNpb24pCitfZGF0ZVBhcnNlciA9IHJlLmNvbXBpbGUociIoP1A8eWVhcj5cZFxkXGRcZCkoPzotKD9QPG1vbnRoPlxkXGQpKD86LSg/UDxkYXk+XGRcZCkoPzpUKD9QPGhvdXI+XGRcZCkoPzo6KD9QPG1pbnV0ZT5cZFxkKSg/OjooP1A8c2Vjb25kPlxkXGQpKT8pPyk/KT8pP1oiLCByZS5BU0NJSSkKKworCitkZWYgX2RhdGVfZnJvbV9zdHJpbmcocyk6CisgICAgb3JkZXIgPSAoJ3llYXInLCAnbW9udGgnLCAnZGF5JywgJ2hvdXInLCAnbWludXRlJywgJ3NlY29uZCcpCisgICAgZ2QgPSBfZGF0ZVBhcnNlci5tYXRjaChzKS5ncm91cGRpY3QoKQorICAgIGxzdCA9IFtdCisgICAgZm9yIGtleSBpbiBvcmRlcjoKKyAgICAgICAgdmFsID0gZ2Rba2V5XQorICAgICAgICBpZiB2YWwgaXMgTm9uZToKKyAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGxzdC5hcHBlbmQoaW50KHZhbCkpCisgICAgcmV0dXJuIGRhdGV0aW1lLmRhdGV0aW1lKCpsc3QpCisKKworZGVmIF9kYXRlX3RvX3N0cmluZyhkKToKKyAgICByZXR1cm4gJyUwNGQtJTAyZC0lMDJkVCUwMmQ6JTAyZDolMDJkWicgJSAoCisgICAgICAgIGQueWVhciwgZC5tb250aCwgZC5kYXksCisgICAgICAgIGQuaG91ciwgZC5taW51dGUsIGQuc2Vjb25kCisgICAgKQorCitkZWYgX2VzY2FwZSh0ZXh0KToKKyAgICBtID0gX2NvbnRyb2xDaGFyUGF0LnNlYXJjaCh0ZXh0KQorICAgIGlmIG0gaXMgbm90IE5vbmU6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInN0cmluZ3MgY2FuJ3QgY29udGFpbnMgY29udHJvbCBjaGFyYWN0ZXJzOyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgInVzZSBieXRlcyBpbnN0ZWFkIikKKyAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKCJcclxuIiwgIlxuIikgICAgICAgIyBjb252ZXJ0IERPUyBsaW5lIGVuZGluZ3MKKyAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKCJcciIsICJcbiIpICAgICAgICAgIyBjb252ZXJ0IE1hYyBsaW5lIGVuZGluZ3MKKyAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKCImIiwgIiZhbXA7IikgICAgICAgIyBlc2NhcGUgJyYnCisgICAgdGV4dCA9IHRleHQucmVwbGFjZSgiPCIsICImbHQ7IikgICAgICAgICMgZXNjYXBlICc8JworICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoIj4iLCAiJmd0OyIpICAgICAgICAjIGVzY2FwZSAnPicKKyAgICByZXR1cm4gdGV4dAorCitjbGFzcyBfUGxpc3RQYXJzZXI6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHVzZV9idWlsdGluX3R5cGVzLCBkaWN0X3R5cGUpOgogICAgICAgICBzZWxmLnN0YWNrID0gW10KLSAgICAgICAgc2VsZi5jdXJyZW50S2V5ID0gTm9uZQorICAgICAgICBzZWxmLmN1cnJlbnRfa2V5ID0gTm9uZQogICAgICAgICBzZWxmLnJvb3QgPSBOb25lCisgICAgICAgIHNlbGYuX3VzZV9idWlsdGluX3R5cGVzID0gdXNlX2J1aWx0aW5fdHlwZXMKKyAgICAgICAgc2VsZi5fZGljdF90eXBlID0gZGljdF90eXBlCiAKICAgICBkZWYgcGFyc2Uoc2VsZiwgZmlsZW9iaik6Ci0gICAgICAgIGZyb20geG1sLnBhcnNlcnMuZXhwYXQgaW1wb3J0IFBhcnNlckNyZWF0ZQogICAgICAgICBzZWxmLnBhcnNlciA9IFBhcnNlckNyZWF0ZSgpCi0gICAgICAgIHNlbGYucGFyc2VyLlN0YXJ0RWxlbWVudEhhbmRsZXIgPSBzZWxmLmhhbmRsZUJlZ2luRWxlbWVudAotICAgICAgICBzZWxmLnBhcnNlci5FbmRFbGVtZW50SGFuZGxlciA9IHNlbGYuaGFuZGxlRW5kRWxlbWVudAotICAgICAgICBzZWxmLnBhcnNlci5DaGFyYWN0ZXJEYXRhSGFuZGxlciA9IHNlbGYuaGFuZGxlRGF0YQorICAgICAgICBzZWxmLnBhcnNlci5TdGFydEVsZW1lbnRIYW5kbGVyID0gc2VsZi5oYW5kbGVfYmVnaW5fZWxlbWVudAorICAgICAgICBzZWxmLnBhcnNlci5FbmRFbGVtZW50SGFuZGxlciA9IHNlbGYuaGFuZGxlX2VuZF9lbGVtZW50CisgICAgICAgIHNlbGYucGFyc2VyLkNoYXJhY3RlckRhdGFIYW5kbGVyID0gc2VsZi5oYW5kbGVfZGF0YQogICAgICAgICBzZWxmLnBhcnNlci5QYXJzZUZpbGUoZmlsZW9iaikKICAgICAgICAgcmV0dXJuIHNlbGYucm9vdAogCi0gICAgZGVmIGhhbmRsZUJlZ2luRWxlbWVudChzZWxmLCBlbGVtZW50LCBhdHRycyk6CisgICAgZGVmIGhhbmRsZV9iZWdpbl9lbGVtZW50KHNlbGYsIGVsZW1lbnQsIGF0dHJzKToKICAgICAgICAgc2VsZi5kYXRhID0gW10KICAgICAgICAgaGFuZGxlciA9IGdldGF0dHIoc2VsZiwgImJlZ2luXyIgKyBlbGVtZW50LCBOb25lKQogICAgICAgICBpZiBoYW5kbGVyIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgaGFuZGxlcihhdHRycykKIAotICAgIGRlZiBoYW5kbGVFbmRFbGVtZW50KHNlbGYsIGVsZW1lbnQpOgorICAgIGRlZiBoYW5kbGVfZW5kX2VsZW1lbnQoc2VsZiwgZWxlbWVudCk6CiAgICAgICAgIGhhbmRsZXIgPSBnZXRhdHRyKHNlbGYsICJlbmRfIiArIGVsZW1lbnQsIE5vbmUpCiAgICAgICAgIGlmIGhhbmRsZXIgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBoYW5kbGVyKCkKIAotICAgIGRlZiBoYW5kbGVEYXRhKHNlbGYsIGRhdGEpOgorICAgIGRlZiBoYW5kbGVfZGF0YShzZWxmLCBkYXRhKToKICAgICAgICAgc2VsZi5kYXRhLmFwcGVuZChkYXRhKQogCi0gICAgZGVmIGFkZE9iamVjdChzZWxmLCB2YWx1ZSk6Ci0gICAgICAgIGlmIHNlbGYuY3VycmVudEtleSBpcyBub3QgTm9uZToKKyAgICBkZWYgYWRkX29iamVjdChzZWxmLCB2YWx1ZSk6CisgICAgICAgIGlmIHNlbGYuY3VycmVudF9rZXkgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShzZWxmLnN0YWNrWy0xXSwgdHlwZSh7fSkpOgogICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInVuZXhwZWN0ZWQgZWxlbWVudCBhdCBsaW5lICVkIiAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnBhcnNlci5DdXJyZW50TGluZU51bWJlcikKLSAgICAgICAgICAgIHNlbGYuc3RhY2tbLTFdW3NlbGYuY3VycmVudEtleV0gPSB2YWx1ZQotICAgICAgICAgICAgc2VsZi5jdXJyZW50S2V5ID0gTm9uZQorICAgICAgICAgICAgc2VsZi5zdGFja1stMV1bc2VsZi5jdXJyZW50X2tleV0gPSB2YWx1ZQorICAgICAgICAgICAgc2VsZi5jdXJyZW50X2tleSA9IE5vbmUKICAgICAgICAgZWxpZiBub3Qgc2VsZi5zdGFjazoKICAgICAgICAgICAgICMgdGhpcyBpcyB0aGUgcm9vdCBvYmplY3QKICAgICAgICAgICAgIHNlbGYucm9vdCA9IHZhbHVlCkBAIC00MDgsNyArMzU1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucGFyc2VyLkN1cnJlbnRMaW5lTnVtYmVyKQogICAgICAgICAgICAgc2VsZi5zdGFja1stMV0uYXBwZW5kKHZhbHVlKQogCi0gICAgZGVmIGdldERhdGEoc2VsZik6CisgICAgZGVmIGdldF9kYXRhKHNlbGYpOgogICAgICAgICBkYXRhID0gJycuam9pbihzZWxmLmRhdGEpCiAgICAgICAgIHNlbGYuZGF0YSA9IFtdCiAgICAgICAgIHJldHVybiBkYXRhCkBAIC00MTYsMzkgKzM2Myw2NjMgQEAKICAgICAjIGVsZW1lbnQgaGFuZGxlcnMKIAogICAgIGRlZiBiZWdpbl9kaWN0KHNlbGYsIGF0dHJzKToKLSAgICAgICAgZCA9IF9JbnRlcm5hbERpY3QoKQotICAgICAgICBzZWxmLmFkZE9iamVjdChkKQorICAgICAgICBkID0gc2VsZi5fZGljdF90eXBlKCkKKyAgICAgICAgc2VsZi5hZGRfb2JqZWN0KGQpCiAgICAgICAgIHNlbGYuc3RhY2suYXBwZW5kKGQpCisKICAgICBkZWYgZW5kX2RpY3Qoc2VsZik6Ci0gICAgICAgIGlmIHNlbGYuY3VycmVudEtleToKKyAgICAgICAgaWYgc2VsZi5jdXJyZW50X2tleToKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIm1pc3NpbmcgdmFsdWUgZm9yIGtleSAnJXMnIGF0IGxpbmUgJWQiICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYuY3VycmVudEtleSxzZWxmLnBhcnNlci5DdXJyZW50TGluZU51bWJlcikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLmN1cnJlbnRfa2V5LHNlbGYucGFyc2VyLkN1cnJlbnRMaW5lTnVtYmVyKSkKICAgICAgICAgc2VsZi5zdGFjay5wb3AoKQogCiAgICAgZGVmIGVuZF9rZXkoc2VsZik6Ci0gICAgICAgIGlmIHNlbGYuY3VycmVudEtleSBvciBub3QgaXNpbnN0YW5jZShzZWxmLnN0YWNrWy0xXSwgdHlwZSh7fSkpOgorICAgICAgICBpZiBzZWxmLmN1cnJlbnRfa2V5IG9yIG5vdCBpc2luc3RhbmNlKHNlbGYuc3RhY2tbLTFdLCB0eXBlKHt9KSk6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ1bmV4cGVjdGVkIGtleSBhdCBsaW5lICVkIiAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucGFyc2VyLkN1cnJlbnRMaW5lTnVtYmVyKQotICAgICAgICBzZWxmLmN1cnJlbnRLZXkgPSBzZWxmLmdldERhdGEoKQorICAgICAgICBzZWxmLmN1cnJlbnRfa2V5ID0gc2VsZi5nZXRfZGF0YSgpCiAKICAgICBkZWYgYmVnaW5fYXJyYXkoc2VsZiwgYXR0cnMpOgogICAgICAgICBhID0gW10KLSAgICAgICAgc2VsZi5hZGRPYmplY3QoYSkKKyAgICAgICAgc2VsZi5hZGRfb2JqZWN0KGEpCiAgICAgICAgIHNlbGYuc3RhY2suYXBwZW5kKGEpCisKICAgICBkZWYgZW5kX2FycmF5KHNlbGYpOgogICAgICAgICBzZWxmLnN0YWNrLnBvcCgpCiAKICAgICBkZWYgZW5kX3RydWUoc2VsZik6Ci0gICAgICAgIHNlbGYuYWRkT2JqZWN0KFRydWUpCisgICAgICAgIHNlbGYuYWRkX29iamVjdChUcnVlKQorCiAgICAgZGVmIGVuZF9mYWxzZShzZWxmKToKLSAgICAgICAgc2VsZi5hZGRPYmplY3QoRmFsc2UpCisgICAgICAgIHNlbGYuYWRkX29iamVjdChGYWxzZSkKKwogICAgIGRlZiBlbmRfaW50ZWdlcihzZWxmKToKLSAgICAgICAgc2VsZi5hZGRPYmplY3QoaW50KHNlbGYuZ2V0RGF0YSgpKSkKKyAgICAgICAgc2VsZi5hZGRfb2JqZWN0KGludChzZWxmLmdldF9kYXRhKCkpKQorCiAgICAgZGVmIGVuZF9yZWFsKHNlbGYpOgotICAgICAgICBzZWxmLmFkZE9iamVjdChmbG9hdChzZWxmLmdldERhdGEoKSkpCisgICAgICAgIHNlbGYuYWRkX29iamVjdChmbG9hdChzZWxmLmdldF9kYXRhKCkpKQorCiAgICAgZGVmIGVuZF9zdHJpbmcoc2VsZik6Ci0gICAgICAgIHNlbGYuYWRkT2JqZWN0KHNlbGYuZ2V0RGF0YSgpKQorICAgICAgICBzZWxmLmFkZF9vYmplY3Qoc2VsZi5nZXRfZGF0YSgpKQorCiAgICAgZGVmIGVuZF9kYXRhKHNlbGYpOgotICAgICAgICBzZWxmLmFkZE9iamVjdChEYXRhLmZyb21CYXNlNjQoc2VsZi5nZXREYXRhKCkuZW5jb2RlKCJ1dGYtOCIpKSkKKyAgICAgICAgaWYgc2VsZi5fdXNlX2J1aWx0aW5fdHlwZXM6CisgICAgICAgICAgICBzZWxmLmFkZF9vYmplY3QoX2RlY29kZV9iYXNlNjQoc2VsZi5nZXRfZGF0YSgpKSkKKworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hZGRfb2JqZWN0KERhdGEuZnJvbUJhc2U2NChzZWxmLmdldF9kYXRhKCkpKQorCiAgICAgZGVmIGVuZF9kYXRlKHNlbGYpOgotICAgICAgICBzZWxmLmFkZE9iamVjdChfZGF0ZUZyb21TdHJpbmcoc2VsZi5nZXREYXRhKCkpKQorICAgICAgICBzZWxmLmFkZF9vYmplY3QoX2RhdGVfZnJvbV9zdHJpbmcoc2VsZi5nZXRfZGF0YSgpKSkKKworCitjbGFzcyBfRHVtYlhNTFdyaXRlcjoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZSwgaW5kZW50X2xldmVsPTAsIGluZGVudD0iXHQiKToKKyAgICAgICAgc2VsZi5maWxlID0gZmlsZQorICAgICAgICBzZWxmLnN0YWNrID0gW10KKyAgICAgICAgc2VsZi5faW5kZW50X2xldmVsID0gaW5kZW50X2xldmVsCisgICAgICAgIHNlbGYuaW5kZW50ID0gaW5kZW50CisKKyAgICBkZWYgYmVnaW5fZWxlbWVudChzZWxmLCBlbGVtZW50KToKKyAgICAgICAgc2VsZi5zdGFjay5hcHBlbmQoZWxlbWVudCkKKyAgICAgICAgc2VsZi53cml0ZWxuKCI8JXM+IiAlIGVsZW1lbnQpCisgICAgICAgIHNlbGYuX2luZGVudF9sZXZlbCArPSAxCisKKyAgICBkZWYgZW5kX2VsZW1lbnQoc2VsZiwgZWxlbWVudCk6CisgICAgICAgIGFzc2VydCBzZWxmLl9pbmRlbnRfbGV2ZWwgPiAwCisgICAgICAgIGFzc2VydCBzZWxmLnN0YWNrLnBvcCgpID09IGVsZW1lbnQKKyAgICAgICAgc2VsZi5faW5kZW50X2xldmVsIC09IDEKKyAgICAgICAgc2VsZi53cml0ZWxuKCI8LyVzPiIgJSBlbGVtZW50KQorCisgICAgZGVmIHNpbXBsZV9lbGVtZW50KHNlbGYsIGVsZW1lbnQsIHZhbHVlPU5vbmUpOgorICAgICAgICBpZiB2YWx1ZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHZhbHVlID0gX2VzY2FwZSh2YWx1ZSkKKyAgICAgICAgICAgIHNlbGYud3JpdGVsbigiPCVzPiVzPC8lcz4iICUgKGVsZW1lbnQsIHZhbHVlLCBlbGVtZW50KSkKKworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi53cml0ZWxuKCI8JXMvPiIgJSBlbGVtZW50KQorCisgICAgZGVmIHdyaXRlbG4oc2VsZiwgbGluZSk6CisgICAgICAgIGlmIGxpbmU6CisgICAgICAgICAgICAjIHBsaXN0IGhhcyBmaXhlZCBlbmNvZGluZyBvZiB1dGYtOAorCisgICAgICAgICAgICAjIFhYWDogaXMgdGhpcyB0ZXN0IG5lZWRlZD8KKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UobGluZSwgc3RyKToKKyAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5lbmNvZGUoJ3V0Zi04JykKKyAgICAgICAgICAgIHNlbGYuZmlsZS53cml0ZShzZWxmLl9pbmRlbnRfbGV2ZWwgKiBzZWxmLmluZGVudCkKKyAgICAgICAgICAgIHNlbGYuZmlsZS53cml0ZShsaW5lKQorICAgICAgICBzZWxmLmZpbGUud3JpdGUoYidcbicpCisKKworY2xhc3MgX1BsaXN0V3JpdGVyKF9EdW1iWE1MV3JpdGVyKToKKyAgICBkZWYgX19pbml0X18oCisgICAgICAgICAgICBzZWxmLCBmaWxlLCBpbmRlbnRfbGV2ZWw9MCwgaW5kZW50PWIiXHQiLCB3cml0ZUhlYWRlcj0xLAorICAgICAgICAgICAgc29ydF9rZXlzPVRydWUsIHNraXBrZXlzPUZhbHNlKToKKworICAgICAgICBpZiB3cml0ZUhlYWRlcjoKKyAgICAgICAgICAgIGZpbGUud3JpdGUoUExJU1RIRUFERVIpCisgICAgICAgIF9EdW1iWE1MV3JpdGVyLl9faW5pdF9fKHNlbGYsIGZpbGUsIGluZGVudF9sZXZlbCwgaW5kZW50KQorICAgICAgICBzZWxmLl9zb3J0X2tleXMgPSBzb3J0X2tleXMKKyAgICAgICAgc2VsZi5fc2tpcGtleXMgPSBza2lwa2V5cworCisgICAgZGVmIHdyaXRlKHNlbGYsIHZhbHVlKToKKyAgICAgICAgc2VsZi53cml0ZWxuKCI8cGxpc3QgdmVyc2lvbj1cIjEuMFwiPiIpCisgICAgICAgIHNlbGYud3JpdGVfdmFsdWUodmFsdWUpCisgICAgICAgIHNlbGYud3JpdGVsbigiPC9wbGlzdD4iKQorCisgICAgZGVmIHdyaXRlX3ZhbHVlKHNlbGYsIHZhbHVlKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgc3RyKToKKyAgICAgICAgICAgIHNlbGYuc2ltcGxlX2VsZW1lbnQoInN0cmluZyIsIHZhbHVlKQorCisgICAgICAgIGVsaWYgdmFsdWUgaXMgVHJ1ZToKKyAgICAgICAgICAgIHNlbGYuc2ltcGxlX2VsZW1lbnQoInRydWUiKQorCisgICAgICAgIGVsaWYgdmFsdWUgaXMgRmFsc2U6CisgICAgICAgICAgICBzZWxmLnNpbXBsZV9lbGVtZW50KCJmYWxzZSIpCisKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBpbnQpOgorICAgICAgICAgICAgaWYgLTEgPDwgNjMgPD0gdmFsdWUgPCAxIDw8IDY0OgorICAgICAgICAgICAgICAgIHNlbGYuc2ltcGxlX2VsZW1lbnQoImludGVnZXIiLCAiJWQiICUgdmFsdWUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIE92ZXJmbG93RXJyb3IodmFsdWUpCisKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBmbG9hdCk6CisgICAgICAgICAgICBzZWxmLnNpbXBsZV9lbGVtZW50KCJyZWFsIiwgcmVwcih2YWx1ZSkpCisKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBkaWN0KToKKyAgICAgICAgICAgIHNlbGYud3JpdGVfZGljdCh2YWx1ZSkKKworICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIERhdGEpOgorICAgICAgICAgICAgc2VsZi53cml0ZV9kYXRhKHZhbHVlKQorCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgKGJ5dGVzLCBieXRlYXJyYXkpKToKKyAgICAgICAgICAgIHNlbGYud3JpdGVfYnl0ZXModmFsdWUpCisKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBkYXRldGltZS5kYXRldGltZSk6CisgICAgICAgICAgICBzZWxmLnNpbXBsZV9lbGVtZW50KCJkYXRlIiwgX2RhdGVfdG9fc3RyaW5nKHZhbHVlKSkKKworICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsICh0dXBsZSwgbGlzdCkpOgorICAgICAgICAgICAgc2VsZi53cml0ZV9hcnJheSh2YWx1ZSkKKworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJ1bnN1cHBvcnRlZCB0eXBlOiAlcyIgJSB0eXBlKHZhbHVlKSkKKworICAgIGRlZiB3cml0ZV9kYXRhKHNlbGYsIGRhdGEpOgorICAgICAgICBzZWxmLndyaXRlX2J5dGVzKGRhdGEuZGF0YSkKKworICAgIGRlZiB3cml0ZV9ieXRlcyhzZWxmLCBkYXRhKToKKyAgICAgICAgc2VsZi5iZWdpbl9lbGVtZW50KCJkYXRhIikKKyAgICAgICAgc2VsZi5faW5kZW50X2xldmVsIC09IDEKKyAgICAgICAgbWF4bGluZWxlbmd0aCA9IG1heCgKKyAgICAgICAgICAgIDE2LAorICAgICAgICAgICAgNzYgLSBsZW4oc2VsZi5pbmRlbnQucmVwbGFjZShiIlx0IiwgYiIgIiAqIDgpICogc2VsZi5faW5kZW50X2xldmVsKSkKKworICAgICAgICBmb3IgbGluZSBpbiBfZW5jb2RlX2Jhc2U2NChkYXRhLCBtYXhsaW5lbGVuZ3RoKS5zcGxpdChiIlxuIik6CisgICAgICAgICAgICBpZiBsaW5lOgorICAgICAgICAgICAgICAgIHNlbGYud3JpdGVsbihsaW5lKQorICAgICAgICBzZWxmLl9pbmRlbnRfbGV2ZWwgKz0gMQorICAgICAgICBzZWxmLmVuZF9lbGVtZW50KCJkYXRhIikKKworICAgIGRlZiB3cml0ZV9kaWN0KHNlbGYsIGQpOgorICAgICAgICBpZiBkOgorICAgICAgICAgICAgc2VsZi5iZWdpbl9lbGVtZW50KCJkaWN0IikKKyAgICAgICAgICAgIGlmIHNlbGYuX3NvcnRfa2V5czoKKyAgICAgICAgICAgICAgICBpdGVtcyA9IHNvcnRlZChkLml0ZW1zKCkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGl0ZW1zID0gZC5pdGVtcygpCisKKyAgICAgICAgICAgIGZvciBrZXksIHZhbHVlIGluIGl0ZW1zOgorICAgICAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGtleSwgc3RyKToKKyAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5fc2tpcGtleXM6CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoImtleXMgbXVzdCBiZSBzdHJpbmdzIikKKyAgICAgICAgICAgICAgICBzZWxmLnNpbXBsZV9lbGVtZW50KCJrZXkiLCBrZXkpCisgICAgICAgICAgICAgICAgc2VsZi53cml0ZV92YWx1ZSh2YWx1ZSkKKyAgICAgICAgICAgIHNlbGYuZW5kX2VsZW1lbnQoImRpY3QiKQorCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnNpbXBsZV9lbGVtZW50KCJkaWN0IikKKworICAgIGRlZiB3cml0ZV9hcnJheShzZWxmLCBhcnJheSk6CisgICAgICAgIGlmIGFycmF5OgorICAgICAgICAgICAgc2VsZi5iZWdpbl9lbGVtZW50KCJhcnJheSIpCisgICAgICAgICAgICBmb3IgdmFsdWUgaW4gYXJyYXk6CisgICAgICAgICAgICAgICAgc2VsZi53cml0ZV92YWx1ZSh2YWx1ZSkKKyAgICAgICAgICAgIHNlbGYuZW5kX2VsZW1lbnQoImFycmF5IikKKworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5zaW1wbGVfZWxlbWVudCgiYXJyYXkiKQorCisKK2RlZiBfaXNfZm10X3htbChoZWFkZXIpOgorICAgIHByZWZpeGVzID0gKGInPD94bWwnLCBiJzxwbGlzdCcpCisKKyAgICBmb3IgcGZ4IGluIHByZWZpeGVzOgorICAgICAgICBpZiBoZWFkZXIuc3RhcnRzd2l0aChwZngpOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICMgQWxzbyBjaGVjayBmb3IgYWx0ZXJuYXRpdmUgWE1MIGVuY29kaW5ncywgdGhpcyBpcyBzbGlnaHRseQorICAgICMgb3ZlcmtpbGwgYmVjYXVzZSB0aGUgQXBwbGUgdG9vbHMgKGFuZCBwbGlzdGxpYikgd2lsbCBub3QKKyAgICAjIGdlbmVyYXRlIGZpbGVzIHdpdGggdGhlc2UgZW5jb2RpbmdzLgorICAgIGZvciBib20sIGVuY29kaW5nIGluICgKKyAgICAgICAgICAgICAgICAoY29kZWNzLkJPTV9VVEY4LCAidXRmLTgiKSwKKyAgICAgICAgICAgICAgICAoY29kZWNzLkJPTV9VVEYxNl9CRSwgInV0Zi0xNi1iZSIpLAorICAgICAgICAgICAgICAgIChjb2RlY3MuQk9NX1VURjE2X0xFLCAidXRmLTE2LWxlIiksCisgICAgICAgICAgICAgICAgIyBleHBhdCBkb2VzIG5vdCBzdXBwb3J0IHV0Zi0zMgorICAgICAgICAgICAgICAgICMoY29kZWNzLkJPTV9VVEYzMl9CRSwgInV0Zi0zMi1iZSIpLAorICAgICAgICAgICAgICAgICMoY29kZWNzLkJPTV9VVEYzMl9MRSwgInV0Zi0zMi1sZSIpLAorICAgICAgICAgICAgKToKKyAgICAgICAgaWYgbm90IGhlYWRlci5zdGFydHN3aXRoKGJvbSk6CisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIGZvciBzdGFydCBpbiBwcmVmaXhlczoKKyAgICAgICAgICAgIHByZWZpeCA9IGJvbSArIHN0YXJ0LmRlY29kZSgnYXNjaWknKS5lbmNvZGUoZW5jb2RpbmcpCisgICAgICAgICAgICBpZiBoZWFkZXJbOmxlbihwcmVmaXgpXSA9PSBwcmVmaXg6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgIHJldHVybiBGYWxzZQorCisjCisjIEJpbmFyeSBQbGlzdAorIworCisKK2NsYXNzIEludmFsaWRGaWxlRXhjZXB0aW9uIChWYWx1ZUVycm9yKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWVzc2FnZT0iSW52YWxpZCBmaWxlIik6CisgICAgICAgIFZhbHVlRXJyb3IuX19pbml0X18oc2VsZiwgbWVzc2FnZSkKKworX0JJTkFSWV9GT1JNQVQgPSB7MTogJ0InLCAyOiAnSCcsIDQ6ICdMJywgODogJ1EnfQorCitjbGFzcyBfQmluYXJ5UGxpc3RQYXJzZXI6CisgICAgIiIiCisgICAgUmVhZCBvciB3cml0ZSBhIGJpbmFyeSBwbGlzdCBmaWxlLCBmb2xsb3dpbmcgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBiaW5hcnkKKyAgICBmb3JtYXQuICBSYWlzZSBJbnZhbGlkRmlsZUV4Y2VwdGlvbiBpbiBjYXNlIG9mIGVycm9yLCBvdGhlcndpc2UgcmV0dXJuIHRoZQorICAgIHJvb3Qgb2JqZWN0LgorCisgICAgc2VlIGFsc286IGh0dHA6Ly9vcGVuc291cmNlLmFwcGxlLmNvbS9zb3VyY2UvQ0YvQ0YtNzQ0LjE4L0NGQmluYXJ5UExpc3QuYworICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB1c2VfYnVpbHRpbl90eXBlcywgZGljdF90eXBlKToKKyAgICAgICAgc2VsZi5fdXNlX2J1aWx0aW5fdHlwZXMgPSB1c2VfYnVpbHRpbl90eXBlcworICAgICAgICBzZWxmLl9kaWN0X3R5cGUgPSBkaWN0X3R5cGUKKworICAgIGRlZiBwYXJzZShzZWxmLCBmcCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgVGhlIGJhc2ljIGZpbGUgZm9ybWF0OgorICAgICAgICAgICAgIyBIRUFERVIKKyAgICAgICAgICAgICMgb2JqZWN0Li4uCisgICAgICAgICAgICAjIHJlZmlkLT5vZmZzZXQuLi4KKyAgICAgICAgICAgICMgVFJBSUxFUgorICAgICAgICAgICAgc2VsZi5fZnAgPSBmcAorICAgICAgICAgICAgc2VsZi5fZnAuc2VlaygtMzIsIG9zLlNFRUtfRU5EKQorICAgICAgICAgICAgdHJhaWxlciA9IHNlbGYuX2ZwLnJlYWQoMzIpCisgICAgICAgICAgICBpZiBsZW4odHJhaWxlcikgIT0gMzI6CisgICAgICAgICAgICAgICAgcmFpc2UgSW52YWxpZEZpbGVFeGNlcHRpb24oKQorICAgICAgICAgICAgKAorICAgICAgICAgICAgICAgIG9mZnNldF9zaXplLCBzZWxmLl9yZWZfc2l6ZSwgbnVtX29iamVjdHMsIHRvcF9vYmplY3QsCisgICAgICAgICAgICAgICAgb2Zmc2V0X3RhYmxlX29mZnNldAorICAgICAgICAgICAgKSA9IHN0cnVjdC51bnBhY2soJz42eEJCUVFRJywgdHJhaWxlcikKKyAgICAgICAgICAgIHNlbGYuX2ZwLnNlZWsob2Zmc2V0X3RhYmxlX29mZnNldCkKKyAgICAgICAgICAgIHNlbGYuX29iamVjdF9vZmZzZXRzID0gc2VsZi5fcmVhZF9pbnRzKG51bV9vYmplY3RzLCBvZmZzZXRfc2l6ZSkKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9yZWFkX29iamVjdChzZWxmLl9vYmplY3Rfb2Zmc2V0c1t0b3Bfb2JqZWN0XSkKKworICAgICAgICBleGNlcHQgKE9TRXJyb3IsIEluZGV4RXJyb3IsIHN0cnVjdC5lcnJvcik6CisgICAgICAgICAgICByYWlzZSBJbnZhbGlkRmlsZUV4Y2VwdGlvbigpCisKKyAgICBkZWYgX2dldF9zaXplKHNlbGYsIHRva2VuTCk6CisgICAgICAgICIiIiByZXR1cm4gdGhlIHNpemUgb2YgdGhlIG5leHQgb2JqZWN0LiIiIgorICAgICAgICBpZiB0b2tlbkwgPT0gMHhGOgorICAgICAgICAgICAgbSA9IHNlbGYuX2ZwLnJlYWQoMSlbMF0gJiAweDMKKyAgICAgICAgICAgIHMgPSAxIDw8IG0KKyAgICAgICAgICAgIGYgPSAnPicgKyBfQklOQVJZX0ZPUk1BVFtzXQorICAgICAgICAgICAgcmV0dXJuIHN0cnVjdC51bnBhY2soZiwgc2VsZi5fZnAucmVhZChzKSlbMF0KKworICAgICAgICByZXR1cm4gdG9rZW5MCisKKyAgICBkZWYgX3JlYWRfaW50cyhzZWxmLCBuLCBzaXplKToKKyAgICAgICAgZGF0YSA9IHNlbGYuX2ZwLnJlYWQoc2l6ZSAqIG4pCisgICAgICAgIGlmIHNpemUgaW4gX0JJTkFSWV9GT1JNQVQ6CisgICAgICAgICAgICByZXR1cm4gc3RydWN0LnVucGFjaygnPicgKyBfQklOQVJZX0ZPUk1BVFtzaXplXSAqIG4sIGRhdGEpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gdHVwbGUoaW50LmZyb21fYnl0ZXMoZGF0YVtpOiBpICsgc2l6ZV0sICdiaWcnKQorICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDAsIHNpemUgKiBuLCBzaXplKSkKKworICAgIGRlZiBfcmVhZF9yZWZzKHNlbGYsIG4pOgorICAgICAgICByZXR1cm4gc2VsZi5fcmVhZF9pbnRzKG4sIHNlbGYuX3JlZl9zaXplKQorCisgICAgZGVmIF9yZWFkX29iamVjdChzZWxmLCBvZmZzZXQpOgorICAgICAgICAiIiIKKyAgICAgICAgcmVhZCB0aGUgb2JqZWN0IGF0IG9mZnNldC4KKworICAgICAgICBNYXkgcmVjdXJzaXZlbHkgcmVhZCBzdWItb2JqZWN0cyAoY29udGVudCBvZiBhbiBhcnJheS9kaWN0L3NldCkKKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX2ZwLnNlZWsob2Zmc2V0KQorICAgICAgICB0b2tlbiA9IHNlbGYuX2ZwLnJlYWQoMSlbMF0KKyAgICAgICAgdG9rZW5ILCB0b2tlbkwgPSB0b2tlbiAmIDB4RjAsIHRva2VuICYgMHgwRgorCisgICAgICAgIGlmIHRva2VuID09IDB4MDA6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgIGVsaWYgdG9rZW4gPT0gMHgwODoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIGVsaWYgdG9rZW4gPT0gMHgwOToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgIyBUaGUgcmVmZXJlbmNlZCBzb3VyY2UgY29kZSBhbHNvIG1lbnRpb25zIFVSTCAoMHgwYywgMHgwZCkgYW5kCisgICAgICAgICMgVVVJRCAoMHgwZSksIGJ1dCBuZWl0aGVyIGNhbiBiZSBnZW5lcmF0ZWQgdXNpbmcgdGhlIENvY29hIGxpYnJhcmllcy4KKworICAgICAgICBlbGlmIHRva2VuID09IDB4MGY6CisgICAgICAgICAgICByZXR1cm4gYicnCisKKyAgICAgICAgZWxpZiB0b2tlbkggPT0gMHgxMDogICMgaW50CisgICAgICAgICAgICByZXR1cm4gaW50LmZyb21fYnl0ZXMoc2VsZi5fZnAucmVhZCgxIDw8IHRva2VuTCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JpZycsIHNpZ25lZD10b2tlbkwgPj0gMykKKworICAgICAgICBlbGlmIHRva2VuID09IDB4MjI6ICMgcmVhbAorICAgICAgICAgICAgcmV0dXJuIHN0cnVjdC51bnBhY2soJz5mJywgc2VsZi5fZnAucmVhZCg0KSlbMF0KKworICAgICAgICBlbGlmIHRva2VuID09IDB4MjM6ICMgcmVhbAorICAgICAgICAgICAgcmV0dXJuIHN0cnVjdC51bnBhY2soJz5kJywgc2VsZi5fZnAucmVhZCg4KSlbMF0KKworICAgICAgICBlbGlmIHRva2VuID09IDB4MzM6ICAjIGRhdGUKKyAgICAgICAgICAgIGYgPSBzdHJ1Y3QudW5wYWNrKCc+ZCcsIHNlbGYuX2ZwLnJlYWQoOCkpWzBdCisgICAgICAgICAgICAjIHRpbWVzdGFtcCAwIG9mIGJpbmFyeSBwbGlzdHMgY29ycmVzcG9uZHMgdG8gMS8xLzIwMDEKKyAgICAgICAgICAgICMgKHllYXIgb2YgTWFjIE9TIFggMTAuMCksIGluc3RlYWQgb2YgMS8xLzE5NzAuCisgICAgICAgICAgICByZXR1cm4gZGF0ZXRpbWUuZGF0ZXRpbWUudXRjZnJvbXRpbWVzdGFtcChmICsgKDMxICogMzY1ICsgOCkgKiA4NjQwMCkKKworICAgICAgICBlbGlmIHRva2VuSCA9PSAweDQwOiAgIyBkYXRhCisgICAgICAgICAgICBzID0gc2VsZi5fZ2V0X3NpemUodG9rZW5MKQorICAgICAgICAgICAgaWYgc2VsZi5fdXNlX2J1aWx0aW5fdHlwZXM6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2ZwLnJlYWQocykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIERhdGEoc2VsZi5fZnAucmVhZChzKSkKKworICAgICAgICBlbGlmIHRva2VuSCA9PSAweDUwOiAgIyBhc2NpaSBzdHJpbmcKKyAgICAgICAgICAgIHMgPSBzZWxmLl9nZXRfc2l6ZSh0b2tlbkwpCisgICAgICAgICAgICByZXN1bHQgPSAgc2VsZi5fZnAucmVhZChzKS5kZWNvZGUoJ2FzY2lpJykKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQKKworICAgICAgICBlbGlmIHRva2VuSCA9PSAweDYwOiAgIyB1bmljb2RlIHN0cmluZworICAgICAgICAgICAgcyA9IHNlbGYuX2dldF9zaXplKHRva2VuTCkKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9mcC5yZWFkKHMgKiAyKS5kZWNvZGUoJ3V0Zi0xNmJlJykKKworICAgICAgICAjIHRva2VuSCA9PSAweDgwIGlzIGRvY3VtZW50ZWQgYXMgJ1VJRCcgYW5kIGFwcGVhcnMgdG8gYmUgdXNlZCBmb3IKKyAgICAgICAgIyBrZXllZC1hcmNoaXZpbmcsIG5vdCBpbiBwbGlzdHMuCisKKyAgICAgICAgZWxpZiB0b2tlbkggPT0gMHhBMDogICMgYXJyYXkKKyAgICAgICAgICAgIHMgPSBzZWxmLl9nZXRfc2l6ZSh0b2tlbkwpCisgICAgICAgICAgICBvYmpfcmVmcyA9IHNlbGYuX3JlYWRfcmVmcyhzKQorICAgICAgICAgICAgcmV0dXJuIFtzZWxmLl9yZWFkX29iamVjdChzZWxmLl9vYmplY3Rfb2Zmc2V0c1t4XSkKKyAgICAgICAgICAgICAgICBmb3IgeCBpbiBvYmpfcmVmc10KKworICAgICAgICAjIHRva2VuSCA9PSAweEIwIGlzIGRvY3VtZW50ZWQgYXMgJ29yZHNldCcsIGJ1dCBpcyBub3QgYWN0dWFsbHkKKyAgICAgICAgIyBpbXBsZW1lbnRlZCBpbiB0aGUgQXBwbGUgcmVmZXJlbmNlIGNvZGUuCisKKyAgICAgICAgIyB0b2tlbkggPT0gMHhDMCBpcyBkb2N1bWVudGVkIGFzICdzZXQnLCBidXQgc2V0cyBjYW5ub3QgYmUgdXNlZCBpbgorICAgICAgICAjIHBsaXN0cy4KKworICAgICAgICBlbGlmIHRva2VuSCA9PSAweEQwOiAgIyBkaWN0CisgICAgICAgICAgICBzID0gc2VsZi5fZ2V0X3NpemUodG9rZW5MKQorICAgICAgICAgICAga2V5X3JlZnMgPSBzZWxmLl9yZWFkX3JlZnMocykKKyAgICAgICAgICAgIG9ial9yZWZzID0gc2VsZi5fcmVhZF9yZWZzKHMpCisgICAgICAgICAgICByZXN1bHQgPSBzZWxmLl9kaWN0X3R5cGUoKQorICAgICAgICAgICAgZm9yIGssIG8gaW4gemlwKGtleV9yZWZzLCBvYmpfcmVmcyk6CisgICAgICAgICAgICAgICAgcmVzdWx0W3NlbGYuX3JlYWRfb2JqZWN0KHNlbGYuX29iamVjdF9vZmZzZXRzW2tdKQorICAgICAgICAgICAgICAgICAgICBdID0gc2VsZi5fcmVhZF9vYmplY3Qoc2VsZi5fb2JqZWN0X29mZnNldHNbb10pCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICAgICAgcmFpc2UgSW52YWxpZEZpbGVFeGNlcHRpb24oKQorCitkZWYgX2NvdW50X3RvX3NpemUoY291bnQpOgorICAgIGlmIGNvdW50IDwgMSA8PCA4OgorICAgICAgICByZXR1cm4gMQorCisgICAgZWxpZiBjb3VudCA8IDEgPDwgMTY6CisgICAgICAgIHJldHVybiAyCisKKyAgICBlbGlmIGNvdW50IDw8IDEgPDwgMzI6CisgICAgICAgIHJldHVybiA0CisKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gOAorCitjbGFzcyBfQmluYXJ5UGxpc3RXcml0ZXIgKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZwLCBzb3J0X2tleXMsIHNraXBrZXlzKToKKyAgICAgICAgc2VsZi5fZnAgPSBmcAorICAgICAgICBzZWxmLl9zb3J0X2tleXMgPSBzb3J0X2tleXMKKyAgICAgICAgc2VsZi5fc2tpcGtleXMgPSBza2lwa2V5cworCisgICAgZGVmIHdyaXRlKHNlbGYsIHZhbHVlKToKKworICAgICAgICAjIEZsYXR0ZW5lZCBvYmplY3QgbGlzdDoKKyAgICAgICAgc2VsZi5fb2JqbGlzdCA9IFtdCisKKyAgICAgICAgIyBNYXBwaW5ncyBmcm9tIG9iamVjdC0+b2JqZWN0aWQKKyAgICAgICAgIyBGaXJzdCBkaWN0IGhhcyAodHlwZShvYmplY3QpLCBvYmplY3QpIGFzIHRoZSBrZXksCisgICAgICAgICMgc2Vjb25kIGRpY3QgaXMgdXNlZCB3aGVuIG9iamVjdCBpcyBub3QgaGFzaGFibGUgYW5kCisgICAgICAgICMgaGFzIGlkKG9iamVjdCkgYXMgdGhlIGtleS4KKyAgICAgICAgc2VsZi5fb2JqdGFibGUgPSB7fQorICAgICAgICBzZWxmLl9vYmppZHRhYmxlID0ge30KKworICAgICAgICAjIENyZWF0ZSBsaXN0IG9mIGFsbCBvYmplY3RzIGluIHRoZSBwbGlzdAorICAgICAgICBzZWxmLl9mbGF0dGVuKHZhbHVlKQorCisgICAgICAgICMgU2l6ZSBvZiBvYmplY3QgcmVmZXJlbmNlcyBpbiBzZXJpYWxpemVkIGNvbnRhaW5lcnMKKyAgICAgICAgIyBkZXBlbmRzIG9uIHRoZSBudW1iZXIgb2Ygb2JqZWN0cyBpbiB0aGUgcGxpc3QuCisgICAgICAgIG51bV9vYmplY3RzID0gbGVuKHNlbGYuX29iamxpc3QpCisgICAgICAgIHNlbGYuX29iamVjdF9vZmZzZXRzID0gWzBdKm51bV9vYmplY3RzCisgICAgICAgIHNlbGYuX3JlZl9zaXplID0gX2NvdW50X3RvX3NpemUobnVtX29iamVjdHMpCisKKyAgICAgICAgc2VsZi5fcmVmX2Zvcm1hdCA9IF9CSU5BUllfRk9STUFUW3NlbGYuX3JlZl9zaXplXQorCisgICAgICAgICMgV3JpdGUgZmlsZSBoZWFkZXIKKyAgICAgICAgc2VsZi5fZnAud3JpdGUoYidicGxpc3QwMCcpCisKKyAgICAgICAgIyBXcml0ZSBvYmplY3QgbGlzdAorICAgICAgICBmb3Igb2JqIGluIHNlbGYuX29iamxpc3Q6CisgICAgICAgICAgICBzZWxmLl93cml0ZV9vYmplY3Qob2JqKQorCisgICAgICAgICMgV3JpdGUgcmVmbnVtLT5vYmplY3Qgb2Zmc2V0IHRhYmxlCisgICAgICAgIHRvcF9vYmplY3QgPSBzZWxmLl9nZXRyZWZudW0odmFsdWUpCisgICAgICAgIG9mZnNldF90YWJsZV9vZmZzZXQgPSBzZWxmLl9mcC50ZWxsKCkKKyAgICAgICAgb2Zmc2V0X3NpemUgPSBfY291bnRfdG9fc2l6ZShvZmZzZXRfdGFibGVfb2Zmc2V0KQorICAgICAgICBvZmZzZXRfZm9ybWF0ID0gJz4nICsgX0JJTkFSWV9GT1JNQVRbb2Zmc2V0X3NpemVdICogbnVtX29iamVjdHMKKyAgICAgICAgc2VsZi5fZnAud3JpdGUoc3RydWN0LnBhY2sob2Zmc2V0X2Zvcm1hdCwgKnNlbGYuX29iamVjdF9vZmZzZXRzKSkKKworICAgICAgICAjIFdyaXRlIHRyYWlsZXIKKyAgICAgICAgc29ydF92ZXJzaW9uID0gMAorICAgICAgICB0cmFpbGVyID0gKAorICAgICAgICAgICAgc29ydF92ZXJzaW9uLCBvZmZzZXRfc2l6ZSwgc2VsZi5fcmVmX3NpemUsIG51bV9vYmplY3RzLAorICAgICAgICAgICAgdG9wX29iamVjdCwgb2Zmc2V0X3RhYmxlX29mZnNldAorICAgICAgICApCisgICAgICAgIHNlbGYuX2ZwLndyaXRlKHN0cnVjdC5wYWNrKCc+NXhCQkJRUVEnLCAqdHJhaWxlcikpCisKKyAgICBkZWYgX2ZsYXR0ZW4oc2VsZiwgdmFsdWUpOgorICAgICAgICAjIEZpcnN0IGNoZWNrIGlmIHRoZSBvYmplY3QgaXMgaW4gdGhlIG9iamVjdCB0YWJsZSwgbm90IHVzZWQgZm9yCisgICAgICAgICMgY29udGFpbmVycyB0byBlbnN1cmUgdGhhdCB0d28gc3ViY29udGFpbmVycyB3aXRoIHRoZSBzYW1lIGNvbnRlbnRzCisgICAgICAgICMgd2lsbCBiZSBzZXJpYWxpemVkIGFzIGRpc3RpbmN0IHZhbHVlcy4KKyAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgKAorICAgICAgICAgICAgICAgIHN0ciwgaW50LCBmbG9hdCwgZGF0ZXRpbWUuZGF0ZXRpbWUsIGJ5dGVzLCBieXRlYXJyYXkpKToKKyAgICAgICAgICAgIGlmICh0eXBlKHZhbHVlKSwgdmFsdWUpIGluIHNlbGYuX29ianRhYmxlOgorICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgRGF0YSk6CisgICAgICAgICAgICBpZiAodHlwZSh2YWx1ZS5kYXRhKSwgdmFsdWUuZGF0YSkgaW4gc2VsZi5fb2JqdGFibGU6CisgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgIyBBZGQgdG8gb2JqZWN0cmVmZXJlbmNlIG1hcAorICAgICAgICByZWZudW0gPSBsZW4oc2VsZi5fb2JqbGlzdCkKKyAgICAgICAgc2VsZi5fb2JqbGlzdC5hcHBlbmQodmFsdWUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIERhdGEpOgorICAgICAgICAgICAgICAgIHNlbGYuX29ianRhYmxlWyh0eXBlKHZhbHVlLmRhdGEpLCB2YWx1ZS5kYXRhKV0gPSByZWZudW0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5fb2JqdGFibGVbKHR5cGUodmFsdWUpLCB2YWx1ZSldID0gcmVmbnVtCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBzZWxmLl9vYmppZHRhYmxlW2lkKHZhbHVlKV0gPSByZWZudW0KKworICAgICAgICAjIEFuZCBmaW5hbGx5IHJlY3Vyc2UgaW50byBjb250YWluZXJzCisgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIGRpY3QpOgorICAgICAgICAgICAga2V5cyA9IFtdCisgICAgICAgICAgICB2YWx1ZXMgPSBbXQorICAgICAgICAgICAgaXRlbXMgPSB2YWx1ZS5pdGVtcygpCisgICAgICAgICAgICBpZiBzZWxmLl9zb3J0X2tleXM6CisgICAgICAgICAgICAgICAgaXRlbXMgPSBzb3J0ZWQoaXRlbXMpCisKKyAgICAgICAgICAgIGZvciBrLCB2IGluIGl0ZW1zOgorICAgICAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGssIHN0cik6CisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuX3NraXBrZXlzOgorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJrZXlzIG11c3QgYmUgc3RyaW5ncyIpCisgICAgICAgICAgICAgICAga2V5cy5hcHBlbmQoaykKKyAgICAgICAgICAgICAgICB2YWx1ZXMuYXBwZW5kKHYpCisKKyAgICAgICAgICAgIGZvciBvIGluIGl0ZXJ0b29scy5jaGFpbihrZXlzLCB2YWx1ZXMpOgorICAgICAgICAgICAgICAgIHNlbGYuX2ZsYXR0ZW4obykKKworICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIChsaXN0LCB0dXBsZSkpOgorICAgICAgICAgICAgZm9yIG8gaW4gdmFsdWU6CisgICAgICAgICAgICAgICAgc2VsZi5fZmxhdHRlbihvKQorCisgICAgZGVmIF9nZXRyZWZudW0oc2VsZiwgdmFsdWUpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCBEYXRhKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fb2JqdGFibGVbKHR5cGUodmFsdWUuZGF0YSksIHZhbHVlLmRhdGEpXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fb2JqdGFibGVbKHR5cGUodmFsdWUpLCB2YWx1ZSldCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fb2JqaWR0YWJsZVtpZCh2YWx1ZSldCisKKyAgICBkZWYgX3dyaXRlX3NpemUoc2VsZiwgdG9rZW4sIHNpemUpOgorICAgICAgICBpZiBzaXplIDwgMTU6CisgICAgICAgICAgICBzZWxmLl9mcC53cml0ZShzdHJ1Y3QucGFjaygnPkInLCB0b2tlbiB8IHNpemUpKQorCisgICAgICAgIGVsaWYgc2l6ZSA8IDEgPDwgODoKKyAgICAgICAgICAgIHNlbGYuX2ZwLndyaXRlKHN0cnVjdC5wYWNrKCc+QkJCJywgdG9rZW4gfCAweEYsIDB4MTAsIHNpemUpKQorCisgICAgICAgIGVsaWYgc2l6ZSA8IDEgPDwgMTY6CisgICAgICAgICAgICBzZWxmLl9mcC53cml0ZShzdHJ1Y3QucGFjaygnPkJCSCcsIHRva2VuIHwgMHhGLCAweDExLCBzaXplKSkKKworICAgICAgICBlbGlmIHNpemUgPCAxIDw8IDMyOgorICAgICAgICAgICAgc2VsZi5fZnAud3JpdGUoc3RydWN0LnBhY2soJz5CQkwnLCB0b2tlbiB8IDB4RiwgMHgxMiwgc2l6ZSkpCisKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX2ZwLndyaXRlKHN0cnVjdC5wYWNrKCc+QkJRJywgdG9rZW4gfCAweEYsIDB4MTMsIHNpemUpKQorCisgICAgZGVmIF93cml0ZV9vYmplY3Qoc2VsZiwgdmFsdWUpOgorICAgICAgICByZWYgPSBzZWxmLl9nZXRyZWZudW0odmFsdWUpCisgICAgICAgIHNlbGYuX29iamVjdF9vZmZzZXRzW3JlZl0gPSBzZWxmLl9mcC50ZWxsKCkKKyAgICAgICAgaWYgdmFsdWUgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2ZwLndyaXRlKGInXHgwMCcpCisKKyAgICAgICAgZWxpZiB2YWx1ZSBpcyBGYWxzZToKKyAgICAgICAgICAgIHNlbGYuX2ZwLndyaXRlKGInXHgwOCcpCisKKyAgICAgICAgZWxpZiB2YWx1ZSBpcyBUcnVlOgorICAgICAgICAgICAgc2VsZi5fZnAud3JpdGUoYidceDA5JykKKworICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGludCk6CisgICAgICAgICAgICBpZiB2YWx1ZSA8IDA6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9mcC53cml0ZShzdHJ1Y3QucGFjaygnPkJxJywgMHgxMywgdmFsdWUpKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBzdHJ1Y3QuZXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIE92ZXJmbG93RXJyb3IodmFsdWUpIGZyb20gTm9uZQorICAgICAgICAgICAgZWxpZiB2YWx1ZSA8IDEgPDwgODoKKyAgICAgICAgICAgICAgICBzZWxmLl9mcC53cml0ZShzdHJ1Y3QucGFjaygnPkJCJywgMHgxMCwgdmFsdWUpKQorICAgICAgICAgICAgZWxpZiB2YWx1ZSA8IDEgPDwgMTY6CisgICAgICAgICAgICAgICAgc2VsZi5fZnAud3JpdGUoc3RydWN0LnBhY2soJz5CSCcsIDB4MTEsIHZhbHVlKSkKKyAgICAgICAgICAgIGVsaWYgdmFsdWUgPCAxIDw8IDMyOgorICAgICAgICAgICAgICAgIHNlbGYuX2ZwLndyaXRlKHN0cnVjdC5wYWNrKCc+QkwnLCAweDEyLCB2YWx1ZSkpCisgICAgICAgICAgICBlbGlmIHZhbHVlIDwgMSA8PCA2MzoKKyAgICAgICAgICAgICAgICBzZWxmLl9mcC53cml0ZShzdHJ1Y3QucGFjaygnPkJRJywgMHgxMywgdmFsdWUpKQorICAgICAgICAgICAgZWxpZiB2YWx1ZSA8IDEgPDwgNjQ6CisgICAgICAgICAgICAgICAgc2VsZi5fZnAud3JpdGUoYidceDE0JyArIHZhbHVlLnRvX2J5dGVzKDE2LCAnYmlnJywgc2lnbmVkPVRydWUpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZSBPdmVyZmxvd0Vycm9yKHZhbHVlKQorCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgZmxvYXQpOgorICAgICAgICAgICAgc2VsZi5fZnAud3JpdGUoc3RydWN0LnBhY2soJz5CZCcsIDB4MjMsIHZhbHVlKSkKKworICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGRhdGV0aW1lLmRhdGV0aW1lKToKKyAgICAgICAgICAgIGYgPSAodmFsdWUgLSBkYXRldGltZS5kYXRldGltZSgyMDAxLCAxLCAxKSkudG90YWxfc2Vjb25kcygpCisgICAgICAgICAgICBzZWxmLl9mcC53cml0ZShzdHJ1Y3QucGFjaygnPkJkJywgMHgzMywgZikpCisKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBEYXRhKToKKyAgICAgICAgICAgIHNlbGYuX3dyaXRlX3NpemUoMHg0MCwgbGVuKHZhbHVlLmRhdGEpKQorICAgICAgICAgICAgc2VsZi5fZnAud3JpdGUodmFsdWUuZGF0YSkKKworICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIChieXRlcywgYnl0ZWFycmF5KSk6CisgICAgICAgICAgICBzZWxmLl93cml0ZV9zaXplKDB4NDAsIGxlbih2YWx1ZSkpCisgICAgICAgICAgICBzZWxmLl9mcC53cml0ZSh2YWx1ZSkKKworICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIHN0cik6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgdCA9IHZhbHVlLmVuY29kZSgnYXNjaWknKQorICAgICAgICAgICAgICAgIHNlbGYuX3dyaXRlX3NpemUoMHg1MCwgbGVuKHZhbHVlKSkKKyAgICAgICAgICAgIGV4Y2VwdCBVbmljb2RlRW5jb2RlRXJyb3I6CisgICAgICAgICAgICAgICAgdCA9IHZhbHVlLmVuY29kZSgndXRmLTE2YmUnKQorICAgICAgICAgICAgICAgIHNlbGYuX3dyaXRlX3NpemUoMHg2MCwgbGVuKHZhbHVlKSkKKworICAgICAgICAgICAgc2VsZi5fZnAud3JpdGUodCkKKworICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIChsaXN0LCB0dXBsZSkpOgorICAgICAgICAgICAgcmVmcyA9IFtzZWxmLl9nZXRyZWZudW0obykgZm9yIG8gaW4gdmFsdWVdCisgICAgICAgICAgICBzID0gbGVuKHJlZnMpCisgICAgICAgICAgICBzZWxmLl93cml0ZV9zaXplKDB4QTAsIHMpCisgICAgICAgICAgICBzZWxmLl9mcC53cml0ZShzdHJ1Y3QucGFjaygnPicgKyBzZWxmLl9yZWZfZm9ybWF0ICogcywgKnJlZnMpKQorCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgZGljdCk6CisgICAgICAgICAgICBrZXlSZWZzLCB2YWxSZWZzID0gW10sIFtdCisKKyAgICAgICAgICAgIGlmIHNlbGYuX3NvcnRfa2V5czoKKyAgICAgICAgICAgICAgICByb290SXRlbXMgPSBzb3J0ZWQodmFsdWUuaXRlbXMoKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcm9vdEl0ZW1zID0gdmFsdWUuaXRlbXMoKQorCisgICAgICAgICAgICBmb3IgaywgdiBpbiByb290SXRlbXM6CisgICAgICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uoaywgc3RyKToKKyAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5fc2tpcGtleXM6CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoImtleXMgbXVzdCBiZSBzdHJpbmdzIikKKyAgICAgICAgICAgICAgICBrZXlSZWZzLmFwcGVuZChzZWxmLl9nZXRyZWZudW0oaykpCisgICAgICAgICAgICAgICAgdmFsUmVmcy5hcHBlbmQoc2VsZi5fZ2V0cmVmbnVtKHYpKQorCisgICAgICAgICAgICBzID0gbGVuKGtleVJlZnMpCisgICAgICAgICAgICBzZWxmLl93cml0ZV9zaXplKDB4RDAsIHMpCisgICAgICAgICAgICBzZWxmLl9mcC53cml0ZShzdHJ1Y3QucGFjaygnPicgKyBzZWxmLl9yZWZfZm9ybWF0ICogcywgKmtleVJlZnMpKQorICAgICAgICAgICAgc2VsZi5fZnAud3JpdGUoc3RydWN0LnBhY2soJz4nICsgc2VsZi5fcmVmX2Zvcm1hdCAqIHMsICp2YWxSZWZzKSkKKworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKHZhbHVlKQorCisKK2RlZiBfaXNfZm10X2JpbmFyeShoZWFkZXIpOgorICAgIHJldHVybiBoZWFkZXJbOjhdID09IGInYnBsaXN0MDAnCisKKworIworIyBHZW5lcmljIGJpdHMKKyMKKworX0ZPUk1BVFM9eworICAgIEZNVF9YTUw6IGRpY3QoCisgICAgICAgIGRldGVjdD1faXNfZm10X3htbCwKKyAgICAgICAgcGFyc2VyPV9QbGlzdFBhcnNlciwKKyAgICAgICAgd3JpdGVyPV9QbGlzdFdyaXRlciwKKyAgICApLAorICAgIEZNVF9CSU5BUlk6IGRpY3QoCisgICAgICAgIGRldGVjdD1faXNfZm10X2JpbmFyeSwKKyAgICAgICAgcGFyc2VyPV9CaW5hcnlQbGlzdFBhcnNlciwKKyAgICAgICAgd3JpdGVyPV9CaW5hcnlQbGlzdFdyaXRlciwKKyAgICApCit9CisKKworZGVmIGxvYWQoZnAsICosIGZtdD1Ob25lLCB1c2VfYnVpbHRpbl90eXBlcz1UcnVlLCBkaWN0X3R5cGU9ZGljdCk6CisgICAgIiIiUmVhZCBhIC5wbGlzdCBmaWxlLiAnZnAnIHNob3VsZCBiZSAocmVhZGFibGUpIGZpbGUgb2JqZWN0LgorICAgIFJldHVybiB0aGUgdW5wYWNrZWQgcm9vdCBvYmplY3QgKHdoaWNoIHVzdWFsbHkgaXMgYSBkaWN0aW9uYXJ5KS4KKyAgICAiIiIKKyAgICBpZiBmbXQgaXMgTm9uZToKKyAgICAgICAgaGVhZGVyID0gZnAucmVhZCgzMikKKyAgICAgICAgZnAuc2VlaygwKQorICAgICAgICBmb3IgaW5mbyBpbiBfRk9STUFUUy52YWx1ZXMoKToKKyAgICAgICAgICAgIGlmIGluZm9bJ2RldGVjdCddKGhlYWRlcik6CisgICAgICAgICAgICAgICAgUCA9IGluZm9bJ3BhcnNlciddCisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgSW52YWxpZEZpbGVFeGNlcHRpb24oKQorCisgICAgZWxzZToKKyAgICAgICAgUCA9IF9GT1JNQVRTW2ZtdF1bJ3BhcnNlciddCisKKyAgICBwID0gUCh1c2VfYnVpbHRpbl90eXBlcz11c2VfYnVpbHRpbl90eXBlcywgZGljdF90eXBlPWRpY3RfdHlwZSkKKyAgICByZXR1cm4gcC5wYXJzZShmcCkKKworCitkZWYgbG9hZHModmFsdWUsICosIGZtdD1Ob25lLCB1c2VfYnVpbHRpbl90eXBlcz1UcnVlLCBkaWN0X3R5cGU9ZGljdCk6CisgICAgIiIiUmVhZCBhIC5wbGlzdCBmaWxlIGZyb20gYSBieXRlcyBvYmplY3QuCisgICAgUmV0dXJuIHRoZSB1bnBhY2tlZCByb290IG9iamVjdCAod2hpY2ggdXN1YWxseSBpcyBhIGRpY3Rpb25hcnkpLgorICAgICIiIgorICAgIGZwID0gQnl0ZXNJTyh2YWx1ZSkKKyAgICByZXR1cm4gbG9hZCgKKyAgICAgICAgZnAsIGZtdD1mbXQsIHVzZV9idWlsdGluX3R5cGVzPXVzZV9idWlsdGluX3R5cGVzLCBkaWN0X3R5cGU9ZGljdF90eXBlKQorCisKK2RlZiBkdW1wKHZhbHVlLCBmcCwgKiwgZm10PUZNVF9YTUwsIHNvcnRfa2V5cz1UcnVlLCBza2lwa2V5cz1GYWxzZSk6CisgICAgIiIiV3JpdGUgJ3ZhbHVlJyB0byBhIC5wbGlzdCBmaWxlLiAnZnAnIHNob3VsZCBiZSBhICh3cml0YWJsZSkKKyAgICBmaWxlIG9iamVjdC4KKyAgICAiIiIKKyAgICBpZiBmbXQgbm90IGluIF9GT1JNQVRTOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJVbnN1cHBvcnRlZCBmb3JtYXQ6ICVyIiUoZm10LCkpCisKKyAgICB3cml0ZXIgPSBfRk9STUFUU1tmbXRdWyJ3cml0ZXIiXShmcCwgc29ydF9rZXlzPXNvcnRfa2V5cywgc2tpcGtleXM9c2tpcGtleXMpCisgICAgd3JpdGVyLndyaXRlKHZhbHVlKQorCisKK2RlZiBkdW1wcyh2YWx1ZSwgKiwgZm10PUZNVF9YTUwsIHNraXBrZXlzPUZhbHNlLCBzb3J0X2tleXM9VHJ1ZSk6CisgICAgIiIiUmV0dXJuIGEgYnl0ZXMgb2JqZWN0IHdpdGggdGhlIGNvbnRlbnRzIGZvciBhIC5wbGlzdCBmaWxlLgorICAgICIiIgorICAgIGZwID0gQnl0ZXNJTygpCisgICAgZHVtcCh2YWx1ZSwgZnAsIGZtdD1mbXQsIHNraXBrZXlzPXNraXBrZXlzLCBzb3J0X2tleXM9c29ydF9rZXlzKQorICAgIHJldHVybiBmcC5nZXR2YWx1ZSgpCmRpZmYgLS1naXQgYS9MaWIvcG9wbGliLnB5IGIvTGliL3BvcGxpYi5weQppbmRleCA0M2Y4MzA1Li40OTE1NjI4IDEwMDY0NAotLS0gYS9MaWIvcG9wbGliLnB5CisrKyBiL0xpYi9wb3BsaWIucHkKQEAgLTEzLDcgKzEzLDE1IEBACiAKICMgSW1wb3J0cwogCi1pbXBvcnQgcmUsIHNvY2tldAoraW1wb3J0IGVycm5vCitpbXBvcnQgcmUKK2ltcG9ydCBzb2NrZXQKKwordHJ5OgorICAgIGltcG9ydCBzc2wKKyAgICBIQVZFX1NTTCA9IFRydWUKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBIQVZFX1NTTCA9IEZhbHNlCiAKIF9fYWxsX18gPSBbIlBPUDMiLCJlcnJvcl9wcm90byJdCiAKQEAgLTMzLDcgKzQxLDcgQEAKIENSTEYgPSBDUitMRgogCiAjIG1heGltYWwgbGluZSBsZW5ndGggd2hlbiBjYWxsaW5nIHJlYWRsaW5lKCkuIFRoaXMgaXMgdG8gcHJldmVudAotIyByZWFkaW5nIGFyYml0cmFyeSBsZW5naHQgbGluZXMuIFJGQyAxOTM5IGxpbWl0cyBQT1AzIGxpbmUgbGVuZ3RoIHRvCisjIHJlYWRpbmcgYXJiaXRyYXJ5IGxlbmd0aCBsaW5lcy4gUkZDIDE5MzkgbGltaXRzIFBPUDMgbGluZSBsZW5ndGggdG8KICMgNTEyIGNoYXJhY3RlcnMsIGluY2x1ZGluZyBDUkxGLiBXZSBoYXZlIHNlbGVjdGVkIDIwNDgganVzdCB0byBiZSBvbgogIyB0aGUgc2FmZSBzaWRlLgogX01BWExJTkUgPSAyMDQ4CkBAIC02MSw2ICs2OSw4IEBACiAgICAgICAgICAgICBBUE9QIG5hbWUgZGlnZXN0ICAgICAgICBhcG9wKG5hbWUsIGRpZ2VzdCkKICAgICAgICAgICAgIFRPUCBtc2cgbiAgICAgICAgICAgICAgIHRvcChtc2csIG4pCiAgICAgICAgICAgICBVSURMIFttc2ddICAgICAgICAgICAgICB1aWRsKG1zZyA9IE5vbmUpCisgICAgICAgICAgICBDQVBBICAgICAgICAgICAgICAgICAgICBjYXBhKCkKKyAgICAgICAgICAgIFNUTFMgICAgICAgICAgICAgICAgICAgIHN0bHMoKQogCiAgICAgUmFpc2VzIG9uZSBleGNlcHRpb246ICdlcnJvcl9wcm90bycuCiAKQEAgLTg3LDYgKzk3LDcgQEAKICAgICAgICAgICAgICAgICAgdGltZW91dD1zb2NrZXQuX0dMT0JBTF9ERUZBVUxUX1RJTUVPVVQpOgogICAgICAgICBzZWxmLmhvc3QgPSBob3N0CiAgICAgICAgIHNlbGYucG9ydCA9IHBvcnQKKyAgICAgICAgc2VsZi5fdGxzX2VzdGFibGlzaGVkID0gRmFsc2UKICAgICAgICAgc2VsZi5zb2NrID0gc2VsZi5fY3JlYXRlX3NvY2tldCh0aW1lb3V0KQogICAgICAgICBzZWxmLmZpbGUgPSBzZWxmLnNvY2subWFrZWZpbGUoJ3JiJykKICAgICAgICAgc2VsZi5fZGVidWdnaW5nID0gMApAQCAtMTI1LDcgKzEzNiw3IEBACiAgICAgICAgICMgc28gb25seSBwb3NzaWJpbGl0aWVzIGFyZSAuLi5MRiwgLi4uQ1JMRiwgQ1IuLi5MRgogICAgICAgICBpZiBsaW5lWy0yOl0gPT0gQ1JMRjoKICAgICAgICAgICAgIHJldHVybiBsaW5lWzotMl0sIG9jdGV0cwotICAgICAgICBpZiBsaW5lWzBdID09IENSOgorICAgICAgICBpZiBsaW5lWzoxXSA9PSBDUjoKICAgICAgICAgICAgIHJldHVybiBsaW5lWzE6LTFdLCBvY3RldHMKICAgICAgICAgcmV0dXJuIGxpbmVbOi0xXSwgb2N0ZXRzCiAKQEAgLTI2NSwxMSArMjc2LDIzIEBACiAKICAgICBkZWYgY2xvc2Uoc2VsZik6CiAgICAgICAgICIiIkNsb3NlIHRoZSBjb25uZWN0aW9uIHdpdGhvdXQgYXNzdW1pbmcgYW55dGhpbmcgYWJvdXQgaXQuIiIiCi0gICAgICAgIGlmIHNlbGYuZmlsZSBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHNlbGYuZmlsZS5jbG9zZSgpCi0gICAgICAgIGlmIHNlbGYuc29jayBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHNlbGYuc29jay5jbG9zZSgpCi0gICAgICAgIHNlbGYuZmlsZSA9IHNlbGYuc29jayA9IE5vbmUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZmlsZSA9IHNlbGYuZmlsZQorICAgICAgICAgICAgc2VsZi5maWxlID0gTm9uZQorICAgICAgICAgICAgaWYgZmlsZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBmaWxlLmNsb3NlKCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNvY2sgPSBzZWxmLnNvY2sKKyAgICAgICAgICAgIHNlbGYuc29jayA9IE5vbmUKKyAgICAgICAgICAgIGlmIHNvY2sgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBzb2NrLnNodXRkb3duKHNvY2tldC5TSFVUX1JEV1IpCisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICAgICAgIyBUaGUgc2VydmVyIG1pZ2h0IGFscmVhZHkgaGF2ZSBjbG9zZWQgdGhlIGNvbm5lY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FTk9UQ09OTjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICAgICAgc29jay5jbG9zZSgpCiAKICAgICAjX19kZWxfXyA9IHF1aXQKIApAQCAtMzI0LDIxICszNDcsNzEgQEAKICAgICAgICAgICAgIHJldHVybiBzZWxmLl9zaG9ydGNtZCgnVUlETCAlcycgJSB3aGljaCkKICAgICAgICAgcmV0dXJuIHNlbGYuX2xvbmdjbWQoJ1VJREwnKQogCi10cnk6Ci0gICAgaW1wb3J0IHNzbAotZXhjZXB0IEltcG9ydEVycm9yOgotICAgIHBhc3MKLWVsc2U6CisKKyAgICBkZWYgY2FwYShzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIHNlcnZlciBjYXBhYmlsaXRpZXMgKFJGQyAyNDQ5KSBhcyBhIGRpY3Rpb25hcnkKKyAgICAgICAgPj4+IGM9cG9wbGliLlBPUDMoJ2xvY2FsaG9zdCcpCisgICAgICAgID4+PiBjLmNhcGEoKQorICAgICAgICB7J0lNUExFTUVOVEFUSU9OJzogWydDeXJ1cycsICdQT1AzJywgJ3NlcnZlcicsICd2Mi4yLjEyJ10sCisgICAgICAgICAnVE9QJzogW10sICdMT0dJTi1ERUxBWSc6IFsnMCddLCAnQVVUSC1SRVNQLUNPREUnOiBbXSwKKyAgICAgICAgICdFWFBJUkUnOiBbJ05FVkVSJ10sICdVU0VSJzogW10sICdTVExTJzogW10sICdQSVBFTElOSU5HJzogW10sCisgICAgICAgICAnVUlETCc6IFtdLCAnUkVTUC1DT0RFUyc6IFtdfQorICAgICAgICA+Pj4KKworICAgICAgICBSZWFsbHksIGFjY29yZGluZyB0byBSRkMgMjQ0OSwgdGhlIGN5cnVzIGZvbGtzIHNob3VsZCBhdm9pZAorICAgICAgICBoYXZpbmcgdGhlIGltcGxlbWVudGF0aW9uIHNwbGl0IGludG8gbXVsdGlwbGUgYXJndW1lbnRzLi4uCisgICAgICAgICIiIgorICAgICAgICBkZWYgX3BhcnNlY2FwKGxpbmUpOgorICAgICAgICAgICAgbHN0ID0gbGluZS5kZWNvZGUoJ2FzY2lpJykuc3BsaXQoKQorICAgICAgICAgICAgcmV0dXJuIGxzdFswXSwgbHN0WzE6XQorCisgICAgICAgIGNhcHMgPSB7fQorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXNwID0gc2VsZi5fbG9uZ2NtZCgnQ0FQQScpCisgICAgICAgICAgICByYXdjYXBzID0gcmVzcFsxXQorICAgICAgICAgICAgZm9yIGNhcGxpbmUgaW4gcmF3Y2FwczoKKyAgICAgICAgICAgICAgICBjYXBubSwgY2FwYXJncyA9IF9wYXJzZWNhcChjYXBsaW5lKQorICAgICAgICAgICAgICAgIGNhcHNbY2Fwbm1dID0gY2FwYXJncworICAgICAgICBleGNlcHQgZXJyb3JfcHJvdG8gYXMgX2VycjoKKyAgICAgICAgICAgIHJhaXNlIGVycm9yX3Byb3RvKCctRVJSIENBUEEgbm90IHN1cHBvcnRlZCBieSBzZXJ2ZXInKQorICAgICAgICByZXR1cm4gY2FwcworCisKKyAgICBkZWYgc3RscyhzZWxmLCBjb250ZXh0PU5vbmUpOgorICAgICAgICAiIiJTdGFydCBhIFRMUyBzZXNzaW9uIG9uIHRoZSBhY3RpdmUgY29ubmVjdGlvbiBhcyBzcGVjaWZpZWQgaW4gUkZDIDI1OTUuCisKKyAgICAgICAgICAgICAgICBjb250ZXh0IC0gYSBzc2wuU1NMQ29udGV4dAorICAgICAgICAiIiIKKyAgICAgICAgaWYgbm90IEhBVkVfU1NMOgorICAgICAgICAgICAgcmFpc2UgZXJyb3JfcHJvdG8oJy1FUlIgVExTIHN1cHBvcnQgbWlzc2luZycpCisgICAgICAgIGlmIHNlbGYuX3Rsc19lc3RhYmxpc2hlZDoKKyAgICAgICAgICAgIHJhaXNlIGVycm9yX3Byb3RvKCctRVJSIFRMUyBzZXNzaW9uIGFscmVhZHkgZXN0YWJsaXNoZWQnKQorICAgICAgICBjYXBzID0gc2VsZi5jYXBhKCkKKyAgICAgICAgaWYgbm90ICdTVExTJyBpbiBjYXBzOgorICAgICAgICAgICAgcmFpc2UgZXJyb3JfcHJvdG8oJy1FUlIgU1RMUyBub3Qgc3VwcG9ydGVkIGJ5IHNlcnZlcicpCisgICAgICAgIGlmIGNvbnRleHQgaXMgTm9uZToKKyAgICAgICAgICAgIGNvbnRleHQgPSBzc2wuX2NyZWF0ZV9zdGRsaWJfY29udGV4dCgpCisgICAgICAgIHJlc3AgPSBzZWxmLl9zaG9ydGNtZCgnU1RMUycpCisgICAgICAgIHNlbGYuc29jayA9IGNvbnRleHQud3JhcF9zb2NrZXQoc2VsZi5zb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9ob3N0bmFtZT1zZWxmLmhvc3QpCisgICAgICAgIHNlbGYuZmlsZSA9IHNlbGYuc29jay5tYWtlZmlsZSgncmInKQorICAgICAgICBzZWxmLl90bHNfZXN0YWJsaXNoZWQgPSBUcnVlCisgICAgICAgIHJldHVybiByZXNwCisKKworaWYgSEFWRV9TU0w6CiAKICAgICBjbGFzcyBQT1AzX1NTTChQT1AzKToKICAgICAgICAgIiIiUE9QMyBjbGllbnQgY2xhc3Mgb3ZlciBTU0wgY29ubmVjdGlvbgogCi0gICAgICAgIEluc3RhbnRpYXRlIHdpdGg6IFBPUDNfU1NMKGhvc3RuYW1lLCBwb3J0PTk5NSwga2V5ZmlsZT1Ob25lLCBjZXJ0ZmlsZT1Ob25lKQorICAgICAgICBJbnN0YW50aWF0ZSB3aXRoOiBQT1AzX1NTTChob3N0bmFtZSwgcG9ydD05OTUsIGtleWZpbGU9Tm9uZSwgY2VydGZpbGU9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dD1Ob25lKQogCiAgICAgICAgICAgICAgICBob3N0bmFtZSAtIHRoZSBob3N0bmFtZSBvZiB0aGUgcG9wMyBvdmVyIHNzbCBzZXJ2ZXIKICAgICAgICAgICAgICAgIHBvcnQgLSBwb3J0IG51bWJlcgogICAgICAgICAgICAgICAga2V5ZmlsZSAtIFBFTSBmb3JtYXR0ZWQgZmlsZSB0aGF0IGNvbnRhaW5zIHlvdXIgcHJpdmF0ZSBrZXkKICAgICAgICAgICAgICAgIGNlcnRmaWxlIC0gUEVNIGZvcm1hdHRlZCBjZXJ0aWZpY2F0ZSBjaGFpbiBmaWxlCisgICAgICAgICAgICAgICBjb250ZXh0IC0gYSBzc2wuU1NMQ29udGV4dAogCiAgICAgICAgIFNlZSB0aGUgbWV0aG9kcyBvZiB0aGUgcGFyZW50IGNsYXNzIFBPUDMgZm9yIG1vcmUgZG9jdW1lbnRhdGlvbi4KICAgICAgICAgIiIiCkBAIC0zNTMsMTcgKzQyNiwyNSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2x1c2l2ZSIpCiAgICAgICAgICAgICBzZWxmLmtleWZpbGUgPSBrZXlmaWxlCiAgICAgICAgICAgICBzZWxmLmNlcnRmaWxlID0gY2VydGZpbGUKKyAgICAgICAgICAgIGlmIGNvbnRleHQgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBjb250ZXh0ID0gc3NsLl9jcmVhdGVfc3RkbGliX2NvbnRleHQoY2VydGZpbGU9Y2VydGZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleWZpbGU9a2V5ZmlsZSkKICAgICAgICAgICAgIHNlbGYuY29udGV4dCA9IGNvbnRleHQKICAgICAgICAgICAgIFBPUDMuX19pbml0X18oc2VsZiwgaG9zdCwgcG9ydCwgdGltZW91dCkKIAogICAgICAgICBkZWYgX2NyZWF0ZV9zb2NrZXQoc2VsZiwgdGltZW91dCk6CiAgICAgICAgICAgICBzb2NrID0gUE9QMy5fY3JlYXRlX3NvY2tldChzZWxmLCB0aW1lb3V0KQotICAgICAgICAgICAgaWYgc2VsZi5jb250ZXh0IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgIHNvY2sgPSBzZWxmLmNvbnRleHQud3JhcF9zb2NrZXQoc29jaykKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc29jayA9IHNzbC53cmFwX3NvY2tldChzb2NrLCBzZWxmLmtleWZpbGUsIHNlbGYuY2VydGZpbGUpCisgICAgICAgICAgICBzb2NrID0gc2VsZi5jb250ZXh0LndyYXBfc29ja2V0KHNvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9ob3N0bmFtZT1zZWxmLmhvc3QpCiAgICAgICAgICAgICByZXR1cm4gc29jawogCisgICAgICAgIGRlZiBzdGxzKHNlbGYsIGtleWZpbGU9Tm9uZSwgY2VydGZpbGU9Tm9uZSwgY29udGV4dD1Ob25lKToKKyAgICAgICAgICAgICIiIlRoZSBtZXRob2QgdW5jb25kaXRpb25hbGx5IHJhaXNlcyBhbiBleGNlcHRpb24gc2luY2UgdGhlCisgICAgICAgICAgICBTVExTIGNvbW1hbmQgZG9lc24ndCBtYWtlIGFueSBzZW5zZSBvbiBhbiBhbHJlYWR5IGVzdGFibGlzaGVkCisgICAgICAgICAgICBTU0wvVExTIHNlc3Npb24uCisgICAgICAgICAgICAiIiIKKyAgICAgICAgICAgIHJhaXNlIGVycm9yX3Byb3RvKCctRVJSIFRMUyBzZXNzaW9uIGFscmVhZHkgZXN0YWJsaXNoZWQnKQorCiAgICAgX19hbGxfXy5hcHBlbmQoIlBPUDNfU1NMIikKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKZGlmZiAtLWdpdCBhL0xpYi9wb3NpeHBhdGgucHkgYi9MaWIvcG9zaXhwYXRoLnB5CmluZGV4IGZkNjNmOTcuLjBhYTUzZmUgMTAwNjQ0Ci0tLSBhL0xpYi9wb3NpeHBhdGgucHkKKysrIGIvTGliL3Bvc2l4cGF0aC5weQpAQCAtNDgsNyArNDgsNiBAQAogCiBkZWYgbm9ybWNhc2Uocyk6CiAgICAgIiIiTm9ybWFsaXplIGNhc2Ugb2YgcGF0aG5hbWUuICBIYXMgbm8gZWZmZWN0IHVuZGVyIFBvc2l4IiIiCi0gICAgIyBUT0RPOiBvbiBNYWMgT1MgWCwgdGhpcyBzaG91bGQgcmVhbGx5IHJldHVybiBzLmxvd2VyKCkuCiAgICAgaWYgbm90IGlzaW5zdGFuY2UocywgKGJ5dGVzLCBzdHIpKToKICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJub3JtY2FzZSgpIGFyZ3VtZW50IG11c3QgYmUgc3RyIG9yIGJ5dGVzLCAiCiAgICAgICAgICAgICAgICAgICAgICAgICAibm90ICd7fSciLmZvcm1hdChzLl9fY2xhc3NfXy5fX25hbWVfXykpCkBAIC04NCwxMiArODMsMTAgQEAKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcGF0aCArPSBzZXAgKyBiCiAgICAgZXhjZXB0IFR5cGVFcnJvcjoKLSAgICAgICAgdmFsaWRfdHlwZXMgPSBhbGwoaXNpbnN0YW5jZShzLCAoc3RyLCBieXRlcywgYnl0ZWFycmF5KSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHMgaW4gKGEsICkgKyBwKQotICAgICAgICBpZiB2YWxpZF90eXBlczoKKyAgICAgICAgaWYgYWxsKGlzaW5zdGFuY2UocywgKHN0ciwgYnl0ZXMpKSBmb3IgcyBpbiAoYSwpICsgcCk6CiAgICAgICAgICAgICAjIE11c3QgaGF2ZSBhIG1peHR1cmUgb2YgdGV4dCBhbmQgYmluYXJ5IGRhdGEKICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiQ2FuJ3QgbWl4IHN0cmluZ3MgYW5kIGJ5dGVzIGluIHBhdGggIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21wb25lbnRzLiIpIGZyb20gTm9uZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21wb25lbnRzIikgZnJvbSBOb25lCiAgICAgICAgIHJhaXNlCiAgICAgcmV0dXJuIHBhdGgKIApAQCAtMTYyLDcgKzE1OSw3IEBACiAgICAgIiIiVGVzdCB3aGV0aGVyIGEgcGF0aCBpcyBhIHN5bWJvbGljIGxpbmsiIiIKICAgICB0cnk6CiAgICAgICAgIHN0ID0gb3MubHN0YXQocGF0aCkKLSAgICBleGNlcHQgKG9zLmVycm9yLCBBdHRyaWJ1dGVFcnJvcik6CisgICAgZXhjZXB0IChPU0Vycm9yLCBBdHRyaWJ1dGVFcnJvcik6CiAgICAgICAgIHJldHVybiBGYWxzZQogICAgIHJldHVybiBzdGF0LlNfSVNMTksoc3Quc3RfbW9kZSkKIApAQCAtMTcyLDU2ICsxNjksMzUgQEAKICAgICAiIiJUZXN0IHdoZXRoZXIgYSBwYXRoIGV4aXN0cy4gIFJldHVybnMgVHJ1ZSBmb3IgYnJva2VuIHN5bWJvbGljIGxpbmtzIiIiCiAgICAgdHJ5OgogICAgICAgICBvcy5sc3RhdChwYXRoKQotICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgcmV0dXJuIFRydWUKIAogCi0jIEFyZSB0d28gZmlsZW5hbWVzIHJlYWxseSBwb2ludGluZyB0byB0aGUgc2FtZSBmaWxlPwotCi1kZWYgc2FtZWZpbGUoZjEsIGYyKToKLSAgICAiIiJUZXN0IHdoZXRoZXIgdHdvIHBhdGhuYW1lcyByZWZlcmVuY2UgdGhlIHNhbWUgYWN0dWFsIGZpbGUiIiIKLSAgICBzMSA9IG9zLnN0YXQoZjEpCi0gICAgczIgPSBvcy5zdGF0KGYyKQotICAgIHJldHVybiBzYW1lc3RhdChzMSwgczIpCi0KLQotIyBBcmUgdHdvIG9wZW4gZmlsZXMgcmVhbGx5IHJlZmVyZW5jaW5nIHRoZSBzYW1lIGZpbGU/Ci0jIChOb3QgbmVjZXNzYXJpbHkgdGhlIHNhbWUgZmlsZSBkZXNjcmlwdG9yISkKLQotZGVmIHNhbWVvcGVuZmlsZShmcDEsIGZwMik6Ci0gICAgIiIiVGVzdCB3aGV0aGVyIHR3byBvcGVuIGZpbGUgb2JqZWN0cyByZWZlcmVuY2UgdGhlIHNhbWUgZmlsZSIiIgotICAgIHMxID0gb3MuZnN0YXQoZnAxKQotICAgIHMyID0gb3MuZnN0YXQoZnAyKQotICAgIHJldHVybiBzYW1lc3RhdChzMSwgczIpCi0KLQotIyBBcmUgdHdvIHN0YXQgYnVmZmVycyAob2J0YWluZWQgZnJvbSBzdGF0LCBmc3RhdCBvciBsc3RhdCkKLSMgZGVzY3JpYmluZyB0aGUgc2FtZSBmaWxlPwotCi1kZWYgc2FtZXN0YXQoczEsIHMyKToKLSAgICAiIiJUZXN0IHdoZXRoZXIgdHdvIHN0YXQgYnVmZmVycyByZWZlcmVuY2UgdGhlIHNhbWUgZmlsZSIiIgotICAgIHJldHVybiBzMS5zdF9pbm8gPT0gczIuc3RfaW5vIGFuZCBcCi0gICAgICAgICAgIHMxLnN0X2RldiA9PSBzMi5zdF9kZXYKLQotCiAjIElzIGEgcGF0aCBhIG1vdW50IHBvaW50PwogIyAoRG9lcyB0aGlzIHdvcmsgZm9yIGFsbCBVTklYZXM/ICBJcyBpdCBldmVuIGd1YXJhbnRlZWQgdG8gd29yayBieSBQb3NpeD8pCiAKIGRlZiBpc21vdW50KHBhdGgpOgogICAgICIiIlRlc3Qgd2hldGhlciBhIHBhdGggaXMgYSBtb3VudCBwb2ludCIiIgotICAgIGlmIGlzbGluayhwYXRoKToKLSAgICAgICAgIyBBIHN5bWxpbmsgY2FuIG5ldmVyIGJlIGEgbW91bnQgcG9pbnQKLSAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgdHJ5OgogICAgICAgICBzMSA9IG9zLmxzdGF0KHBhdGgpCi0gICAgICAgIGlmIGlzaW5zdGFuY2UocGF0aCwgYnl0ZXMpOgotICAgICAgICAgICAgcGFyZW50ID0gam9pbihwYXRoLCBiJy4uJykKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHBhcmVudCA9IGpvaW4ocGF0aCwgJy4uJykKKyAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgIyBJdCBkb2Vzbid0IGV4aXN0IC0tIHNvIG5vdCBhIG1vdW50IHBvaW50LiA6LSkKKyAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgZWxzZToKKyAgICAgICAgIyBBIHN5bWxpbmsgY2FuIG5ldmVyIGJlIGEgbW91bnQgcG9pbnQKKyAgICAgICAgaWYgc3RhdC5TX0lTTE5LKHMxLnN0X21vZGUpOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBpZiBpc2luc3RhbmNlKHBhdGgsIGJ5dGVzKToKKyAgICAgICAgcGFyZW50ID0gam9pbihwYXRoLCBiJy4uJykKKyAgICBlbHNlOgorICAgICAgICBwYXJlbnQgPSBqb2luKHBhdGgsICcuLicpCisgICAgdHJ5OgogICAgICAgICBzMiA9IG9zLmxzdGF0KHBhcmVudCkKLSAgICBleGNlcHQgb3MuZXJyb3I6Ci0gICAgICAgIHJldHVybiBGYWxzZSAjIEl0IGRvZXNuJ3QgZXhpc3QgLS0gc28gbm90IGEgbW91bnQgcG9pbnQgOi0pCisgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgIHJldHVybiBGYWxzZQorCiAgICAgZGV2MSA9IHMxLnN0X2RldgogICAgIGRldjIgPSBzMi5zdF9kZXYKICAgICBpZiBkZXYxICE9IGRldjI6CmRpZmYgLS1naXQgYS9MaWIvcHByaW50LnB5IGIvTGliL3BwcmludC5weQppbmRleCAyMmJlMGI0Yi4uMmNiZmZlZCAxMDA2NDQKLS0tIGEvTGliL3BwcmludC5weQorKysgYi9MaWIvcHByaW50LnB5CkBAIC0zNCw2ICszNCw3IEBACiAKICIiIgogCitpbXBvcnQgcmUKIGltcG9ydCBzeXMgYXMgX3N5cwogZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgT3JkZXJlZERpY3QgYXMgX09yZGVyZWREaWN0CiBmcm9tIGlvIGltcG9ydCBTdHJpbmdJTyBhcyBfU3RyaW5nSU8KQEAgLTQxLDIyICs0MiwxOSBAQAogX19hbGxfXyA9IFsicHByaW50IiwicGZvcm1hdCIsImlzcmVhZGFibGUiLCJpc3JlY3Vyc2l2ZSIsInNhZmVyZXByIiwKICAgICAgICAgICAgIlByZXR0eVByaW50ZXIiXQogCi0jIGNhY2hlIHRoZXNlIGZvciBmYXN0ZXIgYWNjZXNzOgotX2NvbW1ham9pbiA9ICIsICIuam9pbgotX2lkID0gaWQKLV9sZW4gPSBsZW4KLV90eXBlID0gdHlwZQogCi0KLWRlZiBwcHJpbnQob2JqZWN0LCBzdHJlYW09Tm9uZSwgaW5kZW50PTEsIHdpZHRoPTgwLCBkZXB0aD1Ob25lKToKK2RlZiBwcHJpbnQob2JqZWN0LCBzdHJlYW09Tm9uZSwgaW5kZW50PTEsIHdpZHRoPTgwLCBkZXB0aD1Ob25lLCAqLAorICAgICAgICAgICBjb21wYWN0PUZhbHNlKToKICAgICAiIiJQcmV0dHktcHJpbnQgYSBQeXRob24gb2JqZWN0IHRvIGEgc3RyZWFtIFtkZWZhdWx0IGlzIHN5cy5zdGRvdXRdLiIiIgogICAgIHByaW50ZXIgPSBQcmV0dHlQcmludGVyKAotICAgICAgICBzdHJlYW09c3RyZWFtLCBpbmRlbnQ9aW5kZW50LCB3aWR0aD13aWR0aCwgZGVwdGg9ZGVwdGgpCisgICAgICAgIHN0cmVhbT1zdHJlYW0sIGluZGVudD1pbmRlbnQsIHdpZHRoPXdpZHRoLCBkZXB0aD1kZXB0aCwKKyAgICAgICAgY29tcGFjdD1jb21wYWN0KQogICAgIHByaW50ZXIucHByaW50KG9iamVjdCkKIAotZGVmIHBmb3JtYXQob2JqZWN0LCBpbmRlbnQ9MSwgd2lkdGg9ODAsIGRlcHRoPU5vbmUpOgorZGVmIHBmb3JtYXQob2JqZWN0LCBpbmRlbnQ9MSwgd2lkdGg9ODAsIGRlcHRoPU5vbmUsICosIGNvbXBhY3Q9RmFsc2UpOgogICAgICIiIkZvcm1hdCBhIFB5dGhvbiBvYmplY3QgaW50byBhIHByZXR0eS1wcmludGVkIHJlcHJlc2VudGF0aW9uLiIiIgotICAgIHJldHVybiBQcmV0dHlQcmludGVyKGluZGVudD1pbmRlbnQsIHdpZHRoPXdpZHRoLCBkZXB0aD1kZXB0aCkucGZvcm1hdChvYmplY3QpCisgICAgcmV0dXJuIFByZXR0eVByaW50ZXIoaW5kZW50PWluZGVudCwgd2lkdGg9d2lkdGgsIGRlcHRoPWRlcHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhY3Q9Y29tcGFjdCkucGZvcm1hdChvYmplY3QpCiAKIGRlZiBzYWZlcmVwcihvYmplY3QpOgogICAgICIiIlZlcnNpb24gb2YgcmVwcigpIHdoaWNoIGNhbiBoYW5kbGUgcmVjdXJzaXZlIGRhdGEgc3RydWN0dXJlcy4iIiIKQEAgLTEwMSw3ICs5OSw4IEBACiAgICAgcmV0dXJuIF9zYWZlX2tleSh0WzBdKSwgX3NhZmVfa2V5KHRbMV0pCiAKIGNsYXNzIFByZXR0eVByaW50ZXI6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGluZGVudD0xLCB3aWR0aD04MCwgZGVwdGg9Tm9uZSwgc3RyZWFtPU5vbmUpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpbmRlbnQ9MSwgd2lkdGg9ODAsIGRlcHRoPU5vbmUsIHN0cmVhbT1Ob25lLCAqLAorICAgICAgICAgICAgICAgICBjb21wYWN0PUZhbHNlKToKICAgICAgICAgIiIiSGFuZGxlIHByZXR0eSBwcmludGluZyBvcGVyYXRpb25zIG9udG8gYSBzdHJlYW0gdXNpbmcgYSBzZXQgb2YKICAgICAgICAgY29uZmlndXJlZCBwYXJhbWV0ZXJzLgogCkBAIC0xMTgsNiArMTE3LDkgQEAKICAgICAgICAgICAgIFRoZSBkZXNpcmVkIG91dHB1dCBzdHJlYW0uICBJZiBvbWl0dGVkIChvciBmYWxzZSksIHRoZSBzdGFuZGFyZAogICAgICAgICAgICAgb3V0cHV0IHN0cmVhbSBhdmFpbGFibGUgYXQgY29uc3RydWN0aW9uIHdpbGwgYmUgdXNlZC4KIAorICAgICAgICBjb21wYWN0CisgICAgICAgICAgICBJZiB0cnVlLCBzZXZlcmFsIGl0ZW1zIHdpbGwgYmUgY29tYmluZWQgaW4gb25lIGxpbmUuCisKICAgICAgICAgIiIiCiAgICAgICAgIGluZGVudCA9IGludChpbmRlbnQpCiAgICAgICAgIHdpZHRoID0gaW50KHdpZHRoKQpAQCAtMTMxLDYgKzEzMyw3IEBACiAgICAgICAgICAgICBzZWxmLl9zdHJlYW0gPSBzdHJlYW0KICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuX3N0cmVhbSA9IF9zeXMuc3Rkb3V0CisgICAgICAgIHNlbGYuX2NvbXBhY3QgPSBib29sKGNvbXBhY3QpCiAKICAgICBkZWYgcHByaW50KHNlbGYsIG9iamVjdCk6CiAgICAgICAgIHNlbGYuX2Zvcm1hdChvYmplY3QsIHNlbGYuX3N0cmVhbSwgMCwgMCwge30sIDApCkBAIC0xNTAsMjggKzE1MywyNSBAQAogCiAgICAgZGVmIF9mb3JtYXQoc2VsZiwgb2JqZWN0LCBzdHJlYW0sIGluZGVudCwgYWxsb3dhbmNlLCBjb250ZXh0LCBsZXZlbCk6CiAgICAgICAgIGxldmVsID0gbGV2ZWwgKyAxCi0gICAgICAgIG9iamlkID0gX2lkKG9iamVjdCkKKyAgICAgICAgb2JqaWQgPSBpZChvYmplY3QpCiAgICAgICAgIGlmIG9iamlkIGluIGNvbnRleHQ6CiAgICAgICAgICAgICBzdHJlYW0ud3JpdGUoX3JlY3Vyc2lvbihvYmplY3QpKQogICAgICAgICAgICAgc2VsZi5fcmVjdXJzaXZlID0gVHJ1ZQogICAgICAgICAgICAgc2VsZi5fcmVhZGFibGUgPSBGYWxzZQogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIHJlcCA9IHNlbGYuX3JlcHIob2JqZWN0LCBjb250ZXh0LCBsZXZlbCAtIDEpCi0gICAgICAgIHR5cCA9IF90eXBlKG9iamVjdCkKLSAgICAgICAgc2VwTGluZXMgPSBfbGVuKHJlcCkgPiAoc2VsZi5fd2lkdGggLSAxIC0gaW5kZW50IC0gYWxsb3dhbmNlKQorICAgICAgICB0eXAgPSB0eXBlKG9iamVjdCkKKyAgICAgICAgbWF4X3dpZHRoID0gc2VsZi5fd2lkdGggLSAxIC0gaW5kZW50IC0gYWxsb3dhbmNlCisgICAgICAgIHNlcExpbmVzID0gbGVuKHJlcCkgPiBtYXhfd2lkdGgKICAgICAgICAgd3JpdGUgPSBzdHJlYW0ud3JpdGUKIAotICAgICAgICBpZiBzZWxmLl9kZXB0aCBhbmQgbGV2ZWwgPiBzZWxmLl9kZXB0aDoKLSAgICAgICAgICAgIHdyaXRlKHJlcCkKLSAgICAgICAgICAgIHJldHVybgotCiAgICAgICAgIGlmIHNlcExpbmVzOgogICAgICAgICAgICAgciA9IGdldGF0dHIodHlwLCAiX19yZXByX18iLCBOb25lKQogICAgICAgICAgICAgaWYgaXNzdWJjbGFzcyh0eXAsIGRpY3QpOgogICAgICAgICAgICAgICAgIHdyaXRlKCd7JykKICAgICAgICAgICAgICAgICBpZiBzZWxmLl9pbmRlbnRfcGVyX2xldmVsID4gMToKICAgICAgICAgICAgICAgICAgICAgd3JpdGUoKHNlbGYuX2luZGVudF9wZXJfbGV2ZWwgLSAxKSAqICcgJykKLSAgICAgICAgICAgICAgICBsZW5ndGggPSBfbGVuKG9iamVjdCkKKyAgICAgICAgICAgICAgICBsZW5ndGggPSBsZW4ob2JqZWN0KQogICAgICAgICAgICAgICAgIGlmIGxlbmd0aDoKICAgICAgICAgICAgICAgICAgICAgY29udGV4dFtvYmppZF0gPSAxCiAgICAgICAgICAgICAgICAgICAgIGluZGVudCA9IGluZGVudCArIHNlbGYuX2luZGVudF9wZXJfbGV2ZWwKQEAgLTE4MywxMyArMTgzLDEzIEBACiAgICAgICAgICAgICAgICAgICAgIHJlcCA9IHNlbGYuX3JlcHIoa2V5LCBjb250ZXh0LCBsZXZlbCkKICAgICAgICAgICAgICAgICAgICAgd3JpdGUocmVwKQogICAgICAgICAgICAgICAgICAgICB3cml0ZSgnOiAnKQotICAgICAgICAgICAgICAgICAgICBzZWxmLl9mb3JtYXQoZW50LCBzdHJlYW0sIGluZGVudCArIF9sZW4ocmVwKSArIDIsCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2Zvcm1hdChlbnQsIHN0cmVhbSwgaW5kZW50ICsgbGVuKHJlcCkgKyAyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93YW5jZSArIDEsIGNvbnRleHQsIGxldmVsKQogICAgICAgICAgICAgICAgICAgICBpZiBsZW5ndGggPiAxOgogICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGtleSwgZW50IGluIGl0ZW1zWzE6XToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXAgPSBzZWxmLl9yZXByKGtleSwgY29udGV4dCwgbGV2ZWwpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGUoJyxcbiVzJXM6ICcgJSAoJyAnKmluZGVudCwgcmVwKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9mb3JtYXQoZW50LCBzdHJlYW0sIGluZGVudCArIF9sZW4ocmVwKSArIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZm9ybWF0KGVudCwgc3RyZWFtLCBpbmRlbnQgKyBsZW4ocmVwKSArIDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd2FuY2UgKyAxLCBjb250ZXh0LCBsZXZlbCkKICAgICAgICAgICAgICAgICAgICAgaW5kZW50ID0gaW5kZW50IC0gc2VsZi5faW5kZW50X3Blcl9sZXZlbAogICAgICAgICAgICAgICAgICAgICBkZWwgY29udGV4dFtvYmppZF0KQEAgLTIwMSw3ICsyMDEsNyBAQAogICAgICAgICAgICAgICAgIChpc3N1YmNsYXNzKHR5cCwgc2V0KSBhbmQgciBpcyBzZXQuX19yZXByX18pIG9yCiAgICAgICAgICAgICAgICAgKGlzc3ViY2xhc3ModHlwLCBmcm96ZW5zZXQpIGFuZCByIGlzIGZyb3plbnNldC5fX3JlcHJfXykKICAgICAgICAgICAgICAgICk6Ci0gICAgICAgICAgICAgICAgbGVuZ3RoID0gX2xlbihvYmplY3QpCisgICAgICAgICAgICAgICAgbGVuZ3RoID0gbGVuKG9iamVjdCkKICAgICAgICAgICAgICAgICBpZiBpc3N1YmNsYXNzKHR5cCwgbGlzdCk6CiAgICAgICAgICAgICAgICAgICAgIHdyaXRlKCdbJykKICAgICAgICAgICAgICAgICAgICAgZW5kY2hhciA9ICddJwpAQCAtMjI1LDIzICsyMjUsNzcgQEAKICAgICAgICAgICAgICAgICAgICAgd3JpdGUoKHNlbGYuX2luZGVudF9wZXJfbGV2ZWwgLSAxKSAqICcgJykKICAgICAgICAgICAgICAgICBpZiBsZW5ndGg6CiAgICAgICAgICAgICAgICAgICAgIGNvbnRleHRbb2JqaWRdID0gMQotICAgICAgICAgICAgICAgICAgICBpbmRlbnQgPSBpbmRlbnQgKyBzZWxmLl9pbmRlbnRfcGVyX2xldmVsCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuX2Zvcm1hdChvYmplY3RbMF0sIHN0cmVhbSwgaW5kZW50LCBhbGxvd2FuY2UgKyAxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dCwgbGV2ZWwpCi0gICAgICAgICAgICAgICAgICAgIGlmIGxlbmd0aCA+IDE6Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgZW50IGluIG9iamVjdFsxOl06Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGUoJyxcbicgKyAnICcqaW5kZW50KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2Zvcm1hdChlbnQsIHN0cmVhbSwgaW5kZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dhbmNlICsgMSwgY29udGV4dCwgbGV2ZWwpCi0gICAgICAgICAgICAgICAgICAgIGluZGVudCA9IGluZGVudCAtIHNlbGYuX2luZGVudF9wZXJfbGV2ZWwKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fZm9ybWF0X2l0ZW1zKG9iamVjdCwgc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZW50ICsgc2VsZi5faW5kZW50X3Blcl9sZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93YW5jZSArIDEsIGNvbnRleHQsIGxldmVsKQogICAgICAgICAgICAgICAgICAgICBkZWwgY29udGV4dFtvYmppZF0KICAgICAgICAgICAgICAgICBpZiBpc3N1YmNsYXNzKHR5cCwgdHVwbGUpIGFuZCBsZW5ndGggPT0gMToKICAgICAgICAgICAgICAgICAgICAgd3JpdGUoJywnKQogICAgICAgICAgICAgICAgIHdyaXRlKGVuZGNoYXIpCiAgICAgICAgICAgICAgICAgcmV0dXJuCiAKKyAgICAgICAgICAgIGlmIGlzc3ViY2xhc3ModHlwLCBzdHIpIGFuZCBsZW4ob2JqZWN0KSA+IDAgYW5kIHIgaXMgc3RyLl9fcmVwcl9fOgorICAgICAgICAgICAgICAgIGNodW5rcyA9IFtdCisgICAgICAgICAgICAgICAgbGluZXMgPSBvYmplY3Quc3BsaXRsaW5lcyhUcnVlKQorICAgICAgICAgICAgICAgIGlmIGxldmVsID09IDE6CisgICAgICAgICAgICAgICAgICAgIGluZGVudCArPSAxCisgICAgICAgICAgICAgICAgICAgIG1heF93aWR0aCAtPSAyCisgICAgICAgICAgICAgICAgZm9yIGksIGxpbmUgaW4gZW51bWVyYXRlKGxpbmVzKToKKyAgICAgICAgICAgICAgICAgICAgcmVwID0gcmVwcihsaW5lKQorICAgICAgICAgICAgICAgICAgICBpZiBsZW4ocmVwKSA8PSBtYXhfd2lkdGg6CisgICAgICAgICAgICAgICAgICAgICAgICBjaHVua3MuYXBwZW5kKHJlcCkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICMgQSBsaXN0IG9mIGFsdGVybmF0aW5nIChub24tc3BhY2UsIHNwYWNlKSBzdHJpbmdzCisgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0cyA9IHJlLnNwbGl0KHInKFxzKyknLCBsaW5lKSArIFsnJ10KKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgPSAnJworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKHBhcnRzKSwgMik6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydCA9IHBhcnRzW2ldICsgcGFydHNbaSsxXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZSA9IGN1cnJlbnQgKyBwYXJ0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbGVuKHJlcHIoY2FuZGlkYXRlKSkgPiBtYXhfd2lkdGg6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGN1cnJlbnQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaHVua3MuYXBwZW5kKHJlcHIoY3VycmVudCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBwYXJ0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudCA9IGNhbmRpZGF0ZQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgY3VycmVudDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaHVua3MuYXBwZW5kKHJlcHIoY3VycmVudCkpCisgICAgICAgICAgICAgICAgaWYgbGVuKGNodW5rcykgPT0gMToKKyAgICAgICAgICAgICAgICAgICAgd3JpdGUocmVwKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICAgICBpZiBsZXZlbCA9PSAxOgorICAgICAgICAgICAgICAgICAgICB3cml0ZSgnKCcpCisgICAgICAgICAgICAgICAgZm9yIGksIHJlcCBpbiBlbnVtZXJhdGUoY2h1bmtzKToKKyAgICAgICAgICAgICAgICAgICAgaWYgaSA+IDA6CisgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZSgnXG4nICsgJyAnKmluZGVudCkKKyAgICAgICAgICAgICAgICAgICAgd3JpdGUocmVwKQorICAgICAgICAgICAgICAgIGlmIGxldmVsID09IDE6CisgICAgICAgICAgICAgICAgICAgIHdyaXRlKCcpJykKKyAgICAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgd3JpdGUocmVwKQogCisgICAgZGVmIF9mb3JtYXRfaXRlbXMoc2VsZiwgaXRlbXMsIHN0cmVhbSwgaW5kZW50LCBhbGxvd2FuY2UsIGNvbnRleHQsIGxldmVsKToKKyAgICAgICAgd3JpdGUgPSBzdHJlYW0ud3JpdGUKKyAgICAgICAgZGVsaW1ubCA9ICcsXG4nICsgJyAnICogaW5kZW50CisgICAgICAgIGRlbGltID0gJycKKyAgICAgICAgd2lkdGggPSBtYXhfd2lkdGggPSBzZWxmLl93aWR0aCAtIGluZGVudCAtIGFsbG93YW5jZSArIDIKKyAgICAgICAgZm9yIGVudCBpbiBpdGVtczoKKyAgICAgICAgICAgIGlmIHNlbGYuX2NvbXBhY3Q6CisgICAgICAgICAgICAgICAgcmVwID0gc2VsZi5fcmVwcihlbnQsIGNvbnRleHQsIGxldmVsKQorICAgICAgICAgICAgICAgIHcgPSBsZW4ocmVwKSArIDIKKyAgICAgICAgICAgICAgICBpZiB3aWR0aCA8IHc6CisgICAgICAgICAgICAgICAgICAgIHdpZHRoID0gbWF4X3dpZHRoCisgICAgICAgICAgICAgICAgICAgIGlmIGRlbGltOgorICAgICAgICAgICAgICAgICAgICAgICAgZGVsaW0gPSBkZWxpbW5sCisgICAgICAgICAgICAgICAgaWYgd2lkdGggPj0gdzoKKyAgICAgICAgICAgICAgICAgICAgd2lkdGggLT0gdworICAgICAgICAgICAgICAgICAgICB3cml0ZShkZWxpbSkKKyAgICAgICAgICAgICAgICAgICAgZGVsaW0gPSAnLCAnCisgICAgICAgICAgICAgICAgICAgIHdyaXRlKHJlcCkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHdyaXRlKGRlbGltKQorICAgICAgICAgICAgZGVsaW0gPSBkZWxpbW5sCisgICAgICAgICAgICBzZWxmLl9mb3JtYXQoZW50LCBzdHJlYW0sIGluZGVudCwgYWxsb3dhbmNlLCBjb250ZXh0LCBsZXZlbCkKKwogICAgIGRlZiBfcmVwcihzZWxmLCBvYmplY3QsIGNvbnRleHQsIGxldmVsKToKICAgICAgICAgcmVwciwgcmVhZGFibGUsIHJlY3Vyc2l2ZSA9IHNlbGYuZm9ybWF0KG9iamVjdCwgY29udGV4dC5jb3B5KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9kZXB0aCwgbGV2ZWwpCkBAIC0yNjIsNyArMzE2LDcgQEAKICMgUmV0dXJuIHRyaXBsZSAocmVwcl9zdHJpbmcsIGlzcmVhZGFibGUsIGlzcmVjdXJzaXZlKS4KIAogZGVmIF9zYWZlX3JlcHIob2JqZWN0LCBjb250ZXh0LCBtYXhsZXZlbHMsIGxldmVsKToKLSAgICB0eXAgPSBfdHlwZShvYmplY3QpCisgICAgdHlwID0gdHlwZShvYmplY3QpCiAgICAgaWYgdHlwIGlzIHN0cjoKICAgICAgICAgaWYgJ2xvY2FsZScgbm90IGluIF9zeXMubW9kdWxlczoKICAgICAgICAgICAgIHJldHVybiByZXByKG9iamVjdCksIFRydWUsIEZhbHNlCkBAIC0yODYsNyArMzQwLDcgQEAKICAgICBpZiBpc3N1YmNsYXNzKHR5cCwgZGljdCkgYW5kIHIgaXMgZGljdC5fX3JlcHJfXzoKICAgICAgICAgaWYgbm90IG9iamVjdDoKICAgICAgICAgICAgIHJldHVybiAie30iLCBUcnVlLCBGYWxzZQotICAgICAgICBvYmppZCA9IF9pZChvYmplY3QpCisgICAgICAgIG9iamlkID0gaWQob2JqZWN0KQogICAgICAgICBpZiBtYXhsZXZlbHMgYW5kIGxldmVsID49IG1heGxldmVsczoKICAgICAgICAgICAgIHJldHVybiAiey4uLn0iLCBGYWxzZSwgb2JqaWQgaW4gY29udGV4dAogICAgICAgICBpZiBvYmppZCBpbiBjb250ZXh0OgpAQCAtMzA3LDcgKzM2MSw3IEBACiAgICAgICAgICAgICBpZiBrcmVjdXIgb3IgdnJlY3VyOgogICAgICAgICAgICAgICAgIHJlY3Vyc2l2ZSA9IFRydWUKICAgICAgICAgZGVsIGNvbnRleHRbb2JqaWRdCi0gICAgICAgIHJldHVybiAieyVzfSIgJSBfY29tbWFqb2luKGNvbXBvbmVudHMpLCByZWFkYWJsZSwgcmVjdXJzaXZlCisgICAgICAgIHJldHVybiAieyVzfSIgJSAiLCAiLmpvaW4oY29tcG9uZW50cyksIHJlYWRhYmxlLCByZWN1cnNpdmUKIAogICAgIGlmIChpc3N1YmNsYXNzKHR5cCwgbGlzdCkgYW5kIHIgaXMgbGlzdC5fX3JlcHJfXykgb3IgXAogICAgICAgIChpc3N1YmNsYXNzKHR5cCwgdHVwbGUpIGFuZCByIGlzIHR1cGxlLl9fcmVwcl9fKToKQEAgLTMxNSwxMyArMzY5LDEzIEBACiAgICAgICAgICAgICBpZiBub3Qgb2JqZWN0OgogICAgICAgICAgICAgICAgIHJldHVybiAiW10iLCBUcnVlLCBGYWxzZQogICAgICAgICAgICAgZm9ybWF0ID0gIlslc10iCi0gICAgICAgIGVsaWYgX2xlbihvYmplY3QpID09IDE6CisgICAgICAgIGVsaWYgbGVuKG9iamVjdCkgPT0gMToKICAgICAgICAgICAgIGZvcm1hdCA9ICIoJXMsKSIKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGlmIG5vdCBvYmplY3Q6CiAgICAgICAgICAgICAgICAgcmV0dXJuICIoKSIsIFRydWUsIEZhbHNlCiAgICAgICAgICAgICBmb3JtYXQgPSAiKCVzKSIKLSAgICAgICAgb2JqaWQgPSBfaWQob2JqZWN0KQorICAgICAgICBvYmppZCA9IGlkKG9iamVjdCkKICAgICAgICAgaWYgbWF4bGV2ZWxzIGFuZCBsZXZlbCA+PSBtYXhsZXZlbHM6CiAgICAgICAgICAgICByZXR1cm4gZm9ybWF0ICUgIi4uLiIsIEZhbHNlLCBvYmppZCBpbiBjb250ZXh0CiAgICAgICAgIGlmIG9iamlkIGluIGNvbnRleHQ6CkBAIC0zNDAsNyArMzk0LDcgQEAKICAgICAgICAgICAgIGlmIG9yZWN1cjoKICAgICAgICAgICAgICAgICByZWN1cnNpdmUgPSBUcnVlCiAgICAgICAgIGRlbCBjb250ZXh0W29iamlkXQotICAgICAgICByZXR1cm4gZm9ybWF0ICUgX2NvbW1ham9pbihjb21wb25lbnRzKSwgcmVhZGFibGUsIHJlY3Vyc2l2ZQorICAgICAgICByZXR1cm4gZm9ybWF0ICUgIiwgIi5qb2luKGNvbXBvbmVudHMpLCByZWFkYWJsZSwgcmVjdXJzaXZlCiAKICAgICByZXAgPSByZXByKG9iamVjdCkKICAgICByZXR1cm4gcmVwLCAocmVwIGFuZCBub3QgcmVwLnN0YXJ0c3dpdGgoJzwnKSksIEZhbHNlCkBAIC0zNDgsNyArNDAyLDcgQEAKIAogZGVmIF9yZWN1cnNpb24ob2JqZWN0KToKICAgICByZXR1cm4gKCI8UmVjdXJzaW9uIG9uICVzIHdpdGggaWQ9JXM+IgotICAgICAgICAgICAgJSAoX3R5cGUob2JqZWN0KS5fX25hbWVfXywgX2lkKG9iamVjdCkpKQorICAgICAgICAgICAgJSAodHlwZShvYmplY3QpLl9fbmFtZV9fLCBpZChvYmplY3QpKSkKIAogCiBkZWYgX3BlcmZjaGVjayhvYmplY3Q9Tm9uZSk6CmRpZmYgLS1naXQgYS9MaWIvcHJvZmlsZS5weSBiL0xpYi9wcm9maWxlLnB5CmluZGV4IDc0M2U3N2QuLjVkMGU5NjggMTAwNzU1Ci0tLSBhL0xpYi9wcm9maWxlLnB5CisrKyBiL0xpYi9wcm9maWxlLnB5CkBAIC00MCw2ICs0MCw0MCBAQAogIyAgICAgICByZXR1cm4gaV9jb3VudAogI2l0aW1lcyA9IGludGVnZXJfdGltZXIgIyByZXBsYWNlIHdpdGggQyBjb2RlZCB0aW1lciByZXR1cm5pbmcgaW50ZWdlcnMKIAorY2xhc3MgX1V0aWxzOgorICAgICIiIlN1cHBvcnQgY2xhc3MgZm9yIHV0aWxpdHkgZnVuY3Rpb25zIHdoaWNoIGFyZSBzaGFyZWQgYnkKKyAgICBwcm9maWxlLnB5IGFuZCBjUHJvZmlsZS5weSBtb2R1bGVzLgorICAgIE5vdCBzdXBwb3NlZCB0byBiZSB1c2VkIGRpcmVjdGx5LgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHByb2ZpbGVyKToKKyAgICAgICAgc2VsZi5wcm9maWxlciA9IHByb2ZpbGVyCisKKyAgICBkZWYgcnVuKHNlbGYsIHN0YXRlbWVudCwgZmlsZW5hbWUsIHNvcnQpOgorICAgICAgICBwcm9mID0gc2VsZi5wcm9maWxlcigpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHByb2YucnVuKHN0YXRlbWVudCkKKyAgICAgICAgZXhjZXB0IFN5c3RlbUV4aXQ6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLl9zaG93KHByb2YsIGZpbGVuYW1lLCBzb3J0KQorCisgICAgZGVmIHJ1bmN0eChzZWxmLCBzdGF0ZW1lbnQsIGdsb2JhbHMsIGxvY2FscywgZmlsZW5hbWUsIHNvcnQpOgorICAgICAgICBwcm9mID0gc2VsZi5wcm9maWxlcigpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHByb2YucnVuY3R4KHN0YXRlbWVudCwgZ2xvYmFscywgbG9jYWxzKQorICAgICAgICBleGNlcHQgU3lzdGVtRXhpdDoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYuX3Nob3cocHJvZiwgZmlsZW5hbWUsIHNvcnQpCisKKyAgICBkZWYgX3Nob3coc2VsZiwgcHJvZiwgZmlsZW5hbWUsIHNvcnQpOgorICAgICAgICBpZiBmaWxlbmFtZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHByb2YuZHVtcF9zdGF0cyhmaWxlbmFtZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByb2YucHJpbnRfc3RhdHMoc29ydCkKKworCiAjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICMgVGhlIGZvbGxvd2luZyBhcmUgdGhlIHN0YXRpYyBtZW1iZXIgZnVuY3Rpb25zIGZvciB0aGUgcHJvZmlsZXIgY2xhc3MKICMgTm90ZSB0aGF0IGFuIGluc3RhbmNlIG9mIFByb2ZpbGUoKSBpcyAqbm90KiBuZWVkZWQgdG8gY2FsbCB0aGVtLgpAQCAtNTYsMTUgKzkwLDcgQEAKICAgICBzdGFuZGFyZCBuYW1lIHN0cmluZyAoZmlsZS9saW5lL2Z1bmN0aW9uLW5hbWUpIHRoYXQgaXMgcHJlc2VudGVkIGluCiAgICAgZWFjaCBsaW5lLgogICAgICIiIgotICAgIHByb2YgPSBQcm9maWxlKCkKLSAgICB0cnk6Ci0gICAgICAgIHByb2YgPSBwcm9mLnJ1bihzdGF0ZW1lbnQpCi0gICAgZXhjZXB0IFN5c3RlbUV4aXQ6Ci0gICAgICAgIHBhc3MKLSAgICBpZiBmaWxlbmFtZSBpcyBub3QgTm9uZToKLSAgICAgICAgcHJvZi5kdW1wX3N0YXRzKGZpbGVuYW1lKQotICAgIGVsc2U6Ci0gICAgICAgIHJldHVybiBwcm9mLnByaW50X3N0YXRzKHNvcnQpCisgICAgcmV0dXJuIF9VdGlscyhQcm9maWxlKS5ydW4oc3RhdGVtZW50LCBmaWxlbmFtZSwgc29ydCkKIAogZGVmIHJ1bmN0eChzdGF0ZW1lbnQsIGdsb2JhbHMsIGxvY2FscywgZmlsZW5hbWU9Tm9uZSwgc29ydD0tMSk6CiAgICAgIiIiUnVuIHN0YXRlbWVudCB1bmRlciBwcm9maWxlciwgc3VwcGx5aW5nIHlvdXIgb3duIGdsb2JhbHMgYW5kIGxvY2FscywKQEAgLTcyLDE2ICs5OCw4IEBACiAKICAgICBzdGF0ZW1lbnQgYW5kIGZpbGVuYW1lIGhhdmUgdGhlIHNhbWUgc2VtYW50aWNzIGFzIHByb2ZpbGUucnVuCiAgICAgIiIiCi0gICAgcHJvZiA9IFByb2ZpbGUoKQotICAgIHRyeToKLSAgICAgICAgcHJvZiA9IHByb2YucnVuY3R4KHN0YXRlbWVudCwgZ2xvYmFscywgbG9jYWxzKQotICAgIGV4Y2VwdCBTeXN0ZW1FeGl0OgotICAgICAgICBwYXNzCisgICAgcmV0dXJuIF9VdGlscyhQcm9maWxlKS5ydW5jdHgoc3RhdGVtZW50LCBnbG9iYWxzLCBsb2NhbHMsIGZpbGVuYW1lLCBzb3J0KQogCi0gICAgaWYgZmlsZW5hbWUgaXMgbm90IE5vbmU6Ci0gICAgICAgIHByb2YuZHVtcF9zdGF0cyhmaWxlbmFtZSkKLSAgICBlbHNlOgotICAgICAgICByZXR1cm4gcHJvZi5wcmludF9zdGF0cyhzb3J0KQogCiBjbGFzcyBQcm9maWxlOgogICAgICIiIlByb2ZpbGVyIGNsYXNzLgpAQCAtMzczLDEwICszOTEsOSBAQAogICAgICAgICAgICAgICAgICAgcHJpbnRfc3RhdHMoKQogCiAgICAgZGVmIGR1bXBfc3RhdHMoc2VsZiwgZmlsZSk6Ci0gICAgICAgIGYgPSBvcGVuKGZpbGUsICd3YicpCi0gICAgICAgIHNlbGYuY3JlYXRlX3N0YXRzKCkKLSAgICAgICAgbWFyc2hhbC5kdW1wKHNlbGYuc3RhdHMsIGYpCi0gICAgICAgIGYuY2xvc2UoKQorICAgICAgICB3aXRoIG9wZW4oZmlsZSwgJ3diJykgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuY3JlYXRlX3N0YXRzKCkKKyAgICAgICAgICAgIG1hcnNoYWwuZHVtcChzZWxmLnN0YXRzLCBmKQogCiAgICAgZGVmIGNyZWF0ZV9zdGF0cyhzZWxmKToKICAgICAgICAgc2VsZi5zaW11bGF0ZV9jbWRfY29tcGxldGUoKQpkaWZmIC0tZ2l0IGEvTGliL3BzdGF0cy5weSBiL0xpYi9wc3RhdHMucHkKaW5kZXggNmE3NzYwNS4uZTFlYzM1NSAxMDA2NDQKLS0tIGEvTGliL3BzdGF0cy5weQorKysgYi9MaWIvcHN0YXRzLnB5CkBAIC05Myw5ICs5Myw4IEBACiAgICAgICAgICAgICBzZWxmLnN0YXRzID0ge30KICAgICAgICAgICAgIHJldHVybgogICAgICAgICBlbGlmIGlzaW5zdGFuY2UoYXJnLCBzdHIpOgotICAgICAgICAgICAgZiA9IG9wZW4oYXJnLCAncmInKQotICAgICAgICAgICAgc2VsZi5zdGF0cyA9IG1hcnNoYWwubG9hZChmKQotICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICB3aXRoIG9wZW4oYXJnLCAncmInKSBhcyBmOgorICAgICAgICAgICAgICAgIHNlbGYuc3RhdHMgPSBtYXJzaGFsLmxvYWQoZikKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBmaWxlX3N0YXRzID0gb3Muc3RhdChhcmcpCiAgICAgICAgICAgICAgICAgYXJnID0gdGltZS5jdGltZShmaWxlX3N0YXRzLnN0X210aW1lKSArICIgICAgIiArIGFyZwpAQCAtMTQ5LDExICsxNDgsOCBAQAogCiAgICAgZGVmIGR1bXBfc3RhdHMoc2VsZiwgZmlsZW5hbWUpOgogICAgICAgICAiIiJXcml0ZSB0aGUgcHJvZmlsZSBkYXRhIHRvIGEgZmlsZSB3ZSBrbm93IGhvdyB0byBsb2FkIGJhY2suIiIiCi0gICAgICAgIGYgPSBvcGVuKGZpbGVuYW1lLCAnd2InKQotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSwgJ3diJykgYXMgZjoKICAgICAgICAgICAgIG1hcnNoYWwuZHVtcChzZWxmLnN0YXRzLCBmKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgZi5jbG9zZSgpCiAKICAgICAjIGxpc3QgdGhlIHR1cGxlIGluZGljZXMgYW5kIGRpcmVjdGlvbnMgZm9yIHNvcnRpbmcsCiAgICAgIyBhbG9uZyB3aXRoIHNvbWUgcHJpbnRhYmxlIGRlc2NyaXB0aW9uCkBAIC02MTIsNyArNjA4LDcgQEAKICAgICAgICAgICAgIGlmIGxpbmU6CiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBzZWxmLnN0YXRzID0gU3RhdHMobGluZSkKLSAgICAgICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlcnI6CisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgogICAgICAgICAgICAgICAgICAgICBwcmludChlcnIuYXJnc1sxXSwgZmlsZT1zZWxmLnN0cmVhbSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlcnI6CmRpZmYgLS1naXQgYS9MaWIvcHR5LnB5IGIvTGliL3B0eS5weQppbmRleCAzY2NmNjE5Li5lODQxZjEyIDEwMDY0NAotLS0gYS9MaWIvcHR5LnB5CisrKyBiL0xpYi9wdHkucHkKQEAgLTQ3LDI3ICs0NywxNiBAQAogICAgIHJldHVybiBfb3Blbl90ZXJtaW5hbCgpCiAKIGRlZiBfb3Blbl90ZXJtaW5hbCgpOgotICAgICIiIk9wZW4gcHR5IG1hc3RlciBhbmQgcmV0dXJuIChtYXN0ZXJfZmQsIHR0eV9uYW1lKS4KLSAgICBTR0kgYW5kIGdlbmVyaWMgQlNEIHZlcnNpb24sIGZvciB3aGVuIG9wZW5wdHkoKSBmYWlscy4iIiIKLSAgICB0cnk6Ci0gICAgICAgIGltcG9ydCBzZ2kKLSAgICBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgICAgIHBhc3MKLSAgICBlbHNlOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICB0dHlfbmFtZSwgbWFzdGVyX2ZkID0gc2dpLl9nZXRwdHkob3MuT19SRFdSLCAwbzY2NiwgMCkKLSAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgbXNnOgotICAgICAgICAgICAgcmFpc2Ugb3MuZXJyb3IobXNnKQotICAgICAgICByZXR1cm4gbWFzdGVyX2ZkLCB0dHlfbmFtZQorICAgICIiIk9wZW4gcHR5IG1hc3RlciBhbmQgcmV0dXJuIChtYXN0ZXJfZmQsIHR0eV9uYW1lKS4iIiIKICAgICBmb3IgeCBpbiAncHFyc3R1dnd4eXpQUVJTVCc6CiAgICAgICAgIGZvciB5IGluICcwMTIzNDU2Nzg5YWJjZGVmJzoKICAgICAgICAgICAgIHB0eV9uYW1lID0gJy9kZXYvcHR5JyArIHggKyB5CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgZmQgPSBvcy5vcGVuKHB0eV9uYW1lLCBvcy5PX1JEV1IpCi0gICAgICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgcmV0dXJuIChmZCwgJy9kZXYvdHR5JyArIHggKyB5KQotICAgIHJhaXNlIG9zLmVycm9yKCdvdXQgb2YgcHR5IGRldmljZXMnKQorICAgIHJhaXNlIE9TRXJyb3IoJ291dCBvZiBwdHkgZGV2aWNlcycpCiAKIGRlZiBzbGF2ZV9vcGVuKHR0eV9uYW1lKToKICAgICAiIiJzbGF2ZV9vcGVuKHR0eV9uYW1lKSAtPiBzbGF2ZV9mZApAQCAtODMsNyArNzIsNyBAQAogICAgIHRyeToKICAgICAgICAgaW9jdGwocmVzdWx0LCBJX1BVU0gsICJwdGVtIikKICAgICAgICAgaW9jdGwocmVzdWx0LCBJX1BVU0gsICJsZHRlcm0iKQotICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICBwYXNzCiAgICAgcmV0dXJuIHJlc3VsdAogCkBAIC0xNzMsOCArMTYyLDkgQEAKICAgICAgICAgcmVzdG9yZSA9IDAKICAgICB0cnk6CiAgICAgICAgIF9jb3B5KG1hc3Rlcl9mZCwgbWFzdGVyX3JlYWQsIHN0ZGluX3JlYWQpCi0gICAgZXhjZXB0IChJT0Vycm9yLCBPU0Vycm9yKToKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgaWYgcmVzdG9yZToKICAgICAgICAgICAgIHR0eS50Y3NldGF0dHIoU1RESU5fRklMRU5PLCB0dHkuVENTQUZMVVNILCBtb2RlKQogCiAgICAgb3MuY2xvc2UobWFzdGVyX2ZkKQorICAgIHJldHVybiBvcy53YWl0cGlkKHBpZCwgMClbMV0KZGlmZiAtLWdpdCBhL0xpYi9weV9jb21waWxlLnB5IGIvTGliL3B5X2NvbXBpbGUucHkKaW5kZXggNjJkNjlhZC4uZjY1ZWVhZiAxMDA2NDQKLS0tIGEvTGliL3B5X2NvbXBpbGUucHkKKysrIGIvTGliL3B5X2NvbXBpbGUucHkKQEAgLTMsMTcgKzMsMTQgQEAKIFRoaXMgbW9kdWxlIGhhcyBpbnRpbWF0ZSBrbm93bGVkZ2Ugb2YgdGhlIGZvcm1hdCBvZiAucHljIGZpbGVzLgogIiIiCiAKLWltcG9ydCBidWlsdGlucwotaW1wb3J0IGVycm5vCi1pbXBvcnQgaW1wCi1pbXBvcnQgbWFyc2hhbAoraW1wb3J0IGltcG9ydGxpYi5fYm9vdHN0cmFwCitpbXBvcnQgaW1wb3J0bGliLm1hY2hpbmVyeQoraW1wb3J0IGltcG9ydGxpYi51dGlsCiBpbXBvcnQgb3MKK2ltcG9ydCBvcy5wYXRoCiBpbXBvcnQgc3lzCi1pbXBvcnQgdG9rZW5pemUKIGltcG9ydCB0cmFjZWJhY2sKIAotTUFHSUMgPSBpbXAuZ2V0X21hZ2ljKCkKLQogX19hbGxfXyA9IFsiY29tcGlsZSIsICJtYWluIiwgIlB5Q29tcGlsZUVycm9yIl0KIAogCkBAIC02NSwxMyArNjIsNiBAQAogICAgICAgICByZXR1cm4gc2VsZi5tc2cKIAogCi1kZWYgd3JfbG9uZyhmLCB4KToKLSAgICAiIiJJbnRlcm5hbDsgd3JpdGUgYSAzMi1iaXQgaW50IHRvIGEgZmlsZSBpbiBsaXR0bGUtZW5kaWFuIG9yZGVyLiIiIgotICAgIGYud3JpdGUoYnl0ZXMoW3ggICAgICAgICAmIDB4ZmYsCi0gICAgICAgICAgICAgICAgICAgKHggPj4gOCkgICYgMHhmZiwKLSAgICAgICAgICAgICAgICAgICAoeCA+PiAxNikgJiAweGZmLAotICAgICAgICAgICAgICAgICAgICh4ID4+IDI0KSAmIDB4ZmZdKSkKLQogZGVmIGNvbXBpbGUoZmlsZSwgY2ZpbGU9Tm9uZSwgZGZpbGU9Tm9uZSwgZG9yYWlzZT1GYWxzZSwgb3B0aW1pemU9LTEpOgogICAgICIiIkJ5dGUtY29tcGlsZSBvbmUgUHl0aG9uIHNvdXJjZSBmaWxlIHRvIFB5dGhvbiBieXRlY29kZS4KIApAQCAtMTA3LDE4ICs5NywzMSBAQAogICAgIFNlZSBjb21waWxlYWxsLnB5IGZvciBhIHNjcmlwdC9tb2R1bGUgdGhhdCB1c2VzIHRoaXMgbW9kdWxlIHRvCiAgICAgYnl0ZS1jb21waWxlIGFsbCBpbnN0YWxsZWQgZmlsZXMgKG9yIGFsbCBmaWxlcyBpbiBzZWxlY3RlZAogICAgIGRpcmVjdG9yaWVzKS4KKworICAgIERvIG5vdGUgdGhhdCBGaWxlRXhpc3RzRXJyb3IgaXMgcmFpc2VkIGlmIGNmaWxlIGVuZHMgdXAgcG9pbnRpbmcgYXQgYQorICAgIG5vbi1yZWd1bGFyIGZpbGUgb3Igc3ltbGluay4gQmVjYXVzZSB0aGUgY29tcGlsYXRpb24gdXNlcyBhIGZpbGUgcmVuYW1pbmcsCisgICAgdGhlIHJlc3VsdGluZyBmaWxlIHdvdWxkIGJlIHJlZ3VsYXIgYW5kIHRodXMgbm90IHRoZSBzYW1lIHR5cGUgb2YgZmlsZSBhcworICAgIGl0IHdhcyBwcmV2aW91c2x5LgogICAgICIiIgotICAgIHdpdGggdG9rZW5pemUub3BlbihmaWxlKSBhcyBmOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzdCA9IG9zLmZzdGF0KGYuZmlsZW5vKCkpCi0gICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICAgICAgICAgIHN0ID0gb3Muc3RhdChmaWxlKQotICAgICAgICB0aW1lc3RhbXAgPSBpbnQoc3Quc3RfbXRpbWUpCi0gICAgICAgIHNpemUgPSBzdC5zdF9zaXplICYgMHhGRkZGRkZGRgotICAgICAgICBjb2Rlc3RyaW5nID0gZi5yZWFkKCkKKyAgICBpZiBjZmlsZSBpcyBOb25lOgorICAgICAgICBpZiBvcHRpbWl6ZSA+PSAwOgorICAgICAgICAgICAgY2ZpbGUgPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z19vdmVycmlkZT1ub3Qgb3B0aW1pemUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjZmlsZSA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKGZpbGUpCisgICAgaWYgb3MucGF0aC5pc2xpbmsoY2ZpbGUpOgorICAgICAgICBtc2cgPSAoJ3t9IGlzIGEgc3ltbGluayBhbmQgd2lsbCBiZSBjaGFuZ2VkIGludG8gYSByZWd1bGFyIGZpbGUgaWYgJworICAgICAgICAgICAgICAgJ2ltcG9ydCB3cml0ZXMgYSBieXRlLWNvbXBpbGVkIGZpbGUgdG8gaXQnKQorICAgICAgICByYWlzZSBGaWxlRXhpc3RzRXJyb3IobXNnLmZvcm1hdChjZmlsZSkpCisgICAgZWxpZiBvcy5wYXRoLmV4aXN0cyhjZmlsZSkgYW5kIG5vdCBvcy5wYXRoLmlzZmlsZShjZmlsZSk6CisgICAgICAgIG1zZyA9ICgne30gaXMgYSBub24tcmVndWxhciBmaWxlIGFuZCB3aWxsIGJlIGNoYW5nZWQgaW50byBhIHJlZ3VsYXIgJworICAgICAgICAgICAgICAgJ29uZSBpZiBpbXBvcnQgd3JpdGVzIGEgYnl0ZS1jb21waWxlZCBmaWxlIHRvIGl0JykKKyAgICAgICAgcmFpc2UgRmlsZUV4aXN0c0Vycm9yKG1zZy5mb3JtYXQoY2ZpbGUpKQorICAgIGxvYWRlciA9IGltcG9ydGxpYi5tYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcignPHB5X2NvbXBpbGU+JywgZmlsZSkKKyAgICBzb3VyY2VfYnl0ZXMgPSBsb2FkZXIuZ2V0X2RhdGEoZmlsZSkKICAgICB0cnk6Ci0gICAgICAgIGNvZGVvYmplY3QgPSBidWlsdGlucy5jb21waWxlKGNvZGVzdHJpbmcsIGRmaWxlIG9yIGZpbGUsICdleGVjJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW1pemU9b3B0aW1pemUpCisgICAgICAgIGNvZGUgPSBsb2FkZXIuc291cmNlX3RvX2NvZGUoc291cmNlX2J5dGVzLCBkZmlsZSBvciBmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9vcHRpbWl6ZT1vcHRpbWl6ZSkKICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGVycjoKICAgICAgICAgcHlfZXhjID0gUHlDb21waWxlRXJyb3IoZXJyLl9fY2xhc3NfXywgZXJyLCBkZmlsZSBvciBmaWxlKQogICAgICAgICBpZiBkb3JhaXNlOgpAQCAtMTI2LDI4ICsxMjksMjAgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUocHlfZXhjLm1zZyArICdcbicpCiAgICAgICAgICAgICByZXR1cm4KLSAgICBpZiBjZmlsZSBpcyBOb25lOgotICAgICAgICBpZiBvcHRpbWl6ZSA+PSAwOgotICAgICAgICAgICAgY2ZpbGUgPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2UoZmlsZSwgZGVidWdfb3ZlcnJpZGU9bm90IG9wdGltaXplKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgY2ZpbGUgPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2UoZmlsZSkKICAgICB0cnk6CiAgICAgICAgIGRpcm5hbWUgPSBvcy5wYXRoLmRpcm5hbWUoY2ZpbGUpCiAgICAgICAgIGlmIGRpcm5hbWU6CiAgICAgICAgICAgICBvcy5tYWtlZGlycyhkaXJuYW1lKQotICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycm9yOgotICAgICAgICBpZiBlcnJvci5lcnJubyAhPSBlcnJuby5FRVhJU1Q6Ci0gICAgICAgICAgICByYWlzZQotICAgIHdpdGggb3BlbihjZmlsZSwgJ3diJykgYXMgZmM6Ci0gICAgICAgIGZjLndyaXRlKGInXDBcMFwwXDAnKQotICAgICAgICB3cl9sb25nKGZjLCB0aW1lc3RhbXApCi0gICAgICAgIHdyX2xvbmcoZmMsIHNpemUpCi0gICAgICAgIG1hcnNoYWwuZHVtcChjb2Rlb2JqZWN0LCBmYykKLSAgICAgICAgZmMuZmx1c2goKQotICAgICAgICBmYy5zZWVrKDAsIDApCi0gICAgICAgIGZjLndyaXRlKE1BR0lDKQorICAgIGV4Y2VwdCBGaWxlRXhpc3RzRXJyb3I6CisgICAgICAgIHBhc3MKKyAgICBzb3VyY2Vfc3RhdHMgPSBsb2FkZXIucGF0aF9zdGF0cyhmaWxlKQorICAgIGJ5dGVjb2RlID0gaW1wb3J0bGliLl9ib290c3RyYXAuX2NvZGVfdG9fYnl0ZWNvZGUoCisgICAgICAgICAgICBjb2RlLCBzb3VyY2Vfc3RhdHNbJ210aW1lJ10sIHNvdXJjZV9zdGF0c1snc2l6ZSddKQorICAgIG1vZGUgPSBpbXBvcnRsaWIuX2Jvb3RzdHJhcC5fY2FsY19tb2RlKGZpbGUpCisgICAgaW1wb3J0bGliLl9ib290c3RyYXAuX3dyaXRlX2F0b21pYyhjZmlsZSwgYnl0ZWNvZGUsIG1vZGUpCiAgICAgcmV0dXJuIGNmaWxlCiAKKwogZGVmIG1haW4oYXJncz1Ob25lKToKICAgICAiIiJDb21waWxlIHNldmVyYWwgc291cmNlIGZpbGVzLgogCkBAIC0xNzMsNyArMTY4LDcgQEAKICAgICAgICAgICAgIGV4Y2VwdCBQeUNvbXBpbGVFcnJvciBhcyBlcnJvcjoKICAgICAgICAgICAgICAgICBydiA9IDEKICAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCIlc1xuIiAlIGVycm9yLm1zZykKLSAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGVycm9yOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyb3I6CiAgICAgICAgICAgICAgICAgcnYgPSAxCiAgICAgICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiJXNcbiIgJSBlcnJvcikKICAgICBlbHNlOgpAQCAtMTgzLDcgKzE3OCw3IEBACiAgICAgICAgICAgICBleGNlcHQgUHlDb21waWxlRXJyb3IgYXMgZXJyb3I6CiAgICAgICAgICAgICAgICAgIyByZXR1cm4gdmFsdWUgdG8gaW5kaWNhdGUgYXQgbGVhc3Qgb25lIGZhaWx1cmUKICAgICAgICAgICAgICAgICBydiA9IDEKLSAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKGVycm9yLm1zZykKKyAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCIlc1xuIiAlIGVycm9yLm1zZykKICAgICByZXR1cm4gcnYKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKZGlmZiAtLWdpdCBhL0xpYi9weWNsYnIucHkgYi9MaWIvcHljbGJyLnB5CmluZGV4IDllYzA1ZWUuLmRkNThhZGEgMTAwNjQ0Ci0tLSBhL0xpYi9weWNsYnIucHkKKysrIGIvTGliL3B5Y2xici5weQpAQCAtNDIsNyArNDIsNyBAQAogaW1wb3J0IGlvCiBpbXBvcnQgb3MKIGltcG9ydCBzeXMKLWltcG9ydCBpbXBvcnRsaWIKK2ltcG9ydCBpbXBvcnRsaWIudXRpbAogaW1wb3J0IHRva2VuaXplCiBmcm9tIHRva2VuIGltcG9ydCBOQU1FLCBERURFTlQsIE9QCiBmcm9tIG9wZXJhdG9yIGltcG9ydCBpdGVtZ2V0dGVyCkBAIC0xNDAsMTMgKzE0MCwxNCBAQAogICAgICAgICBzZWFyY2hfcGF0aCA9IHBhdGgKICAgICBlbHNlOgogICAgICAgICBzZWFyY2hfcGF0aCA9IHBhdGggKyBzeXMucGF0aAotICAgIGxvYWRlciA9IGltcG9ydGxpYi5maW5kX2xvYWRlcihmdWxsbW9kdWxlLCBzZWFyY2hfcGF0aCkKLSAgICBmbmFtZSA9IGxvYWRlci5nZXRfZmlsZW5hbWUoZnVsbG1vZHVsZSkKKyAgICAjIFhYWCBUaGlzIHdpbGwgY2hhbmdlIG9uY2UgaXNzdWUxOTk0NCBsYW5kcy4KKyAgICBzcGVjID0gaW1wb3J0bGliLnV0aWwuX2ZpbmRfc3BlY19mcm9tX3BhdGgoZnVsbG1vZHVsZSwgc2VhcmNoX3BhdGgpCisgICAgZm5hbWUgPSBzcGVjLmxvYWRlci5nZXRfZmlsZW5hbWUoZnVsbG1vZHVsZSkKICAgICBfbW9kdWxlc1tmdWxsbW9kdWxlXSA9IGRpY3QKLSAgICBpZiBsb2FkZXIuaXNfcGFja2FnZShmdWxsbW9kdWxlKToKKyAgICBpZiBzcGVjLmxvYWRlci5pc19wYWNrYWdlKGZ1bGxtb2R1bGUpOgogICAgICAgICBkaWN0WydfX3BhdGhfXyddID0gW29zLnBhdGguZGlybmFtZShmbmFtZSldCiAgICAgdHJ5OgotICAgICAgICBzb3VyY2UgPSBsb2FkZXIuZ2V0X3NvdXJjZShmdWxsbW9kdWxlKQorICAgICAgICBzb3VyY2UgPSBzcGVjLmxvYWRlci5nZXRfc291cmNlKGZ1bGxtb2R1bGUpCiAgICAgICAgIGlmIHNvdXJjZSBpcyBOb25lOgogICAgICAgICAgICAgcmV0dXJuIGRpY3QKICAgICBleGNlcHQgKEF0dHJpYnV0ZUVycm9yLCBJbXBvcnRFcnJvcik6CmRpZmYgLS1naXQgYS9MaWIvcHlkb2MucHkgYi9MaWIvcHlkb2MucHkKaW5kZXggYzlkODQzNi4uZjQyMjk5ZiAxMDA3NTUKLS0tIGEvTGliL3B5ZG9jLnB5CisrKyBiL0xpYi9weWRvYy5weQpAQCAtMSw4ICsxLDkgQEAKICMhL3Vzci9iaW4vZW52IHB5dGhvbjMKICIiIkdlbmVyYXRlIFB5dGhvbiBkb2N1bWVudGF0aW9uIGluIEhUTUwgb3IgdGV4dCBmb3IgaW50ZXJhY3RpdmUgdXNlLgogCi1JbiB0aGUgUHl0aG9uIGludGVycHJldGVyLCBkbyAiZnJvbSBweWRvYyBpbXBvcnQgaGVscCIgdG8gcHJvdmlkZQotaGVscC4gIENhbGxpbmcgaGVscCh0aGluZykgb24gYSBQeXRob24gb2JqZWN0IGRvY3VtZW50cyB0aGUgb2JqZWN0LgorQXQgdGhlIFB5dGhvbiBpbnRlcmFjdGl2ZSBwcm9tcHQsIGNhbGxpbmcgaGVscCh0aGluZykgb24gYSBQeXRob24gb2JqZWN0Citkb2N1bWVudHMgdGhlIG9iamVjdCwgYW5kIGNhbGxpbmcgaGVscCgpIHN0YXJ0cyB1cCBhbiBpbnRlcmFjdGl2ZQoraGVscCBzZXNzaW9uLgogCiBPciwgYXQgdGhlIHNoZWxsIGNvbW1hbmQgbGluZSBvdXRzaWRlIG9mIFB5dGhvbjoKIApAQCAtNDQsMTYgKzQ1LDE2IEBACiAiIiIKIAogIyBLbm93biBidWdzIHRoYXQgY2FuJ3QgYmUgZml4ZWQgaGVyZToKLSMgICAtIGltcC5sb2FkX21vZHVsZSgpIGNhbm5vdCBiZSBwcmV2ZW50ZWQgZnJvbSBjbG9iYmVyaW5nIGV4aXN0aW5nCi0jICAgICBsb2FkZWQgbW9kdWxlcywgc28gY2FsbGluZyBzeW5vcHNpcygpIG9uIGEgYmluYXJ5IG1vZHVsZSBmaWxlCi0jICAgICBjaGFuZ2VzIHRoZSBjb250ZW50cyBvZiBhbnkgZXhpc3RpbmcgbW9kdWxlIHdpdGggdGhlIHNhbWUgbmFtZS4KKyMgICAtIHN5bm9wc2lzKCkgY2Fubm90IGJlIHByZXZlbnRlZCBmcm9tIGNsb2JiZXJpbmcgZXhpc3RpbmcKKyMgICAgIGxvYWRlZCBtb2R1bGVzLgogIyAgIC0gSWYgdGhlIF9fZmlsZV9fIGF0dHJpYnV0ZSBvbiBhIG1vZHVsZSBpcyBhIHJlbGF0aXZlIHBhdGggYW5kCiAjICAgICB0aGUgY3VycmVudCBkaXJlY3RvcnkgaXMgY2hhbmdlZCB3aXRoIG9zLmNoZGlyKCksIGFuIGluY29ycmVjdAogIyAgICAgcGF0aCB3aWxsIGJlIGRpc3BsYXllZC4KIAogaW1wb3J0IGJ1aWx0aW5zCi1pbXBvcnQgaW1wCitpbXBvcnQgaW1wb3J0bGliLl9ib290c3RyYXAKIGltcG9ydCBpbXBvcnRsaWIubWFjaGluZXJ5CitpbXBvcnQgaW1wb3J0bGliLnV0aWwKIGltcG9ydCBpbnNwZWN0CiBpbXBvcnQgaW8KIGltcG9ydCBvcwpAQCAtNjMsMTAgKzY0LDExIEBACiBpbXBvcnQgc3lzCiBpbXBvcnQgdGltZQogaW1wb3J0IHRva2VuaXplCitpbXBvcnQgdXJsbGliLnBhcnNlCiBpbXBvcnQgd2FybmluZ3MKIGZyb20gY29sbGVjdGlvbnMgaW1wb3J0IGRlcXVlCiBmcm9tIHJlcHJsaWIgaW1wb3J0IFJlcHIKLWZyb20gdHJhY2ViYWNrIGltcG9ydCBleHRyYWN0X3RiLCBmb3JtYXRfZXhjZXB0aW9uX29ubHkKK2Zyb20gdHJhY2ViYWNrIGltcG9ydCBmb3JtYXRfZXhjZXB0aW9uX29ubHkKIAogCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBjb21tb24gcm91dGluZXMKQEAgLTEzNyw2ICsxMzksMTkgQEAKICAgICAgICAgICAgIGluc3BlY3QuaXNidWlsdGluKG9iaikgb3IKICAgICAgICAgICAgIGluc3BlY3QuaXNtZXRob2RkZXNjcmlwdG9yKG9iaikpCiAKK2RlZiBfaXNfYm91bmRfbWV0aG9kKGZuKToKKyAgICAiIiIKKyAgICBSZXR1cm5zIFRydWUgaWYgZm4gaXMgYSBib3VuZCBtZXRob2QsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlcgorICAgIGZuIHdhcyBpbXBsZW1lbnRlZCBpbiBQeXRob24gb3IgaW4gQy4KKyAgICAiIiIKKyAgICBpZiBpbnNwZWN0LmlzbWV0aG9kKGZuKToKKyAgICAgICAgcmV0dXJuIFRydWUKKyAgICBpZiBpbnNwZWN0LmlzYnVpbHRpbihmbik6CisgICAgICAgIHNlbGYgPSBnZXRhdHRyKGZuLCAnX19zZWxmX18nLCBOb25lKQorICAgICAgICByZXR1cm4gbm90IChpbnNwZWN0LmlzbW9kdWxlKHNlbGYpIG9yIChzZWxmIGlzIE5vbmUpKQorICAgIHJldHVybiBGYWxzZQorCisKIGRlZiBhbGxtZXRob2RzKGNsKToKICAgICBtZXRob2RzID0ge30KICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBpbnNwZWN0LmdldG1lbWJlcnMoY2wsIF9pc19zb21lX21ldGhvZCk6CkBAIC0xNjcsOCArMTgyLDkgQEAKIGRlZiB2aXNpYmxlbmFtZShuYW1lLCBhbGw9Tm9uZSwgb2JqPU5vbmUpOgogICAgICIiIkRlY2lkZSB3aGV0aGVyIHRvIHNob3cgZG9jdW1lbnRhdGlvbiBvbiBhIHZhcmlhYmxlLiIiIgogICAgICMgQ2VydGFpbiBzcGVjaWFsIG5hbWVzIGFyZSByZWR1bmRhbnQgb3IgaW50ZXJuYWwuCisgICAgIyBYWFggUmVtb3ZlIF9faW5pdGlhbGl6aW5nX18/CiAgICAgaWYgbmFtZSBpbiB7J19fYXV0aG9yX18nLCAnX19idWlsdGluc19fJywgJ19fY2FjaGVkX18nLCAnX19jcmVkaXRzX18nLAotICAgICAgICAgICAgICAgICdfX2RhdGVfXycsICdfX2RvY19fJywgJ19fZmlsZV9fJywgJ19faW5pdGlhbGl6aW5nX18nLAorICAgICAgICAgICAgICAgICdfX2RhdGVfXycsICdfX2RvY19fJywgJ19fZmlsZV9fJywgJ19fc3BlY19fJywKICAgICAgICAgICAgICAgICAnX19sb2FkZXJfXycsICdfX21vZHVsZV9fJywgJ19fbmFtZV9fJywgJ19fcGFja2FnZV9fJywKICAgICAgICAgICAgICAgICAnX19wYXRoX18nLCAnX19xdWFsbmFtZV9fJywgJ19fc2xvdHNfXycsICdfX3ZlcnNpb25fXyd9OgogICAgICAgICByZXR1cm4gMApAQCAtMjI0LDM0ICsyNDAsMzggQEAKICAgICBtdGltZSA9IG9zLnN0YXQoZmlsZW5hbWUpLnN0X210aW1lCiAgICAgbGFzdHVwZGF0ZSwgcmVzdWx0ID0gY2FjaGUuZ2V0KGZpbGVuYW1lLCAoTm9uZSwgTm9uZSkpCiAgICAgaWYgbGFzdHVwZGF0ZSBpcyBOb25lIG9yIGxhc3R1cGRhdGUgPCBtdGltZToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZmlsZSA9IHRva2VuaXplLm9wZW4oZmlsZW5hbWUpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yOgotICAgICAgICAgICAgIyBtb2R1bGUgY2FuJ3QgYmUgb3BlbmVkLCBzbyBza2lwIGl0Ci0gICAgICAgICAgICByZXR1cm4gTm9uZQotICAgICAgICBiaW5hcnlfc3VmZml4ZXMgPSBpbXBvcnRsaWIubWFjaGluZXJ5LkJZVEVDT0RFX1NVRkZJWEVTWzpdCi0gICAgICAgIGJpbmFyeV9zdWZmaXhlcyArPSBpbXBvcnRsaWIubWFjaGluZXJ5LkVYVEVOU0lPTl9TVUZGSVhFU1s6XQotICAgICAgICBpZiBhbnkoZmlsZW5hbWUuZW5kc3dpdGgoeCkgZm9yIHggaW4gYmluYXJ5X3N1ZmZpeGVzKToKLSAgICAgICAgICAgICMgYmluYXJ5IG1vZHVsZXMgaGF2ZSB0byBiZSBpbXBvcnRlZAotICAgICAgICAgICAgZmlsZS5jbG9zZSgpCi0gICAgICAgICAgICBpZiBhbnkoZmlsZW5hbWUuZW5kc3dpdGgoeCkgZm9yIHggaW4KLSAgICAgICAgICAgICAgICAgICAgaW1wb3J0bGliLm1hY2hpbmVyeS5CWVRFQ09ERV9TVUZGSVhFUyk6Ci0gICAgICAgICAgICAgICAgbG9hZGVyID0gaW1wb3J0bGliLm1hY2hpbmVyeS5Tb3VyY2VsZXNzRmlsZUxvYWRlcignX190ZW1wX18nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGxvYWRlciA9IGltcG9ydGxpYi5tYWNoaW5lcnkuRXh0ZW5zaW9uRmlsZUxvYWRlcignX190ZW1wX18nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSkKKyAgICAgICAgIyBMb29rIGZvciBiaW5hcnkgc3VmZml4ZXMgZmlyc3QsIGZhbGxpbmcgYmFjayB0byBzb3VyY2UuCisgICAgICAgIGlmIGZpbGVuYW1lLmVuZHN3aXRoKHR1cGxlKGltcG9ydGxpYi5tYWNoaW5lcnkuQllURUNPREVfU1VGRklYRVMpKToKKyAgICAgICAgICAgIGxvYWRlcl9jbHMgPSBpbXBvcnRsaWIubWFjaGluZXJ5LlNvdXJjZWxlc3NGaWxlTG9hZGVyCisgICAgICAgIGVsaWYgZmlsZW5hbWUuZW5kc3dpdGgodHVwbGUoaW1wb3J0bGliLm1hY2hpbmVyeS5FWFRFTlNJT05fU1VGRklYRVMpKToKKyAgICAgICAgICAgIGxvYWRlcl9jbHMgPSBpbXBvcnRsaWIubWFjaGluZXJ5LkV4dGVuc2lvbkZpbGVMb2FkZXIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxvYWRlcl9jbHMgPSBOb25lCisgICAgICAgICMgTm93IGhhbmRsZSB0aGUgY2hvaWNlLgorICAgICAgICBpZiBsb2FkZXJfY2xzIGlzIE5vbmU6CisgICAgICAgICAgICAjIE11c3QgYmUgYSBzb3VyY2UgZmlsZS4KICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBtb2R1bGUgPSBsb2FkZXIubG9hZF9tb2R1bGUoJ19fdGVtcF9fJykKKyAgICAgICAgICAgICAgICBmaWxlID0gdG9rZW5pemUub3BlbihmaWxlbmFtZSkKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgICMgbW9kdWxlIGNhbid0IGJlIG9wZW5lZCwgc28gc2tpcCBpdAorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgICAgICAjIHRleHQgbW9kdWxlcyBjYW4gYmUgZGlyZWN0bHkgZXhhbWluZWQKKyAgICAgICAgICAgIHdpdGggZmlsZToKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBzb3VyY2Vfc3lub3BzaXMoZmlsZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgTXVzdCBiZSBhIGJpbmFyeSBtb2R1bGUsIHdoaWNoIGhhcyB0byBiZSBpbXBvcnRlZC4KKyAgICAgICAgICAgIGxvYWRlciA9IGxvYWRlcl9jbHMoJ19fdGVtcF9fJywgZmlsZW5hbWUpCisgICAgICAgICAgICAjIFhYWCBXZSBwcm9iYWJseSBkb24ndCBuZWVkIHRvIHBhc3MgaW4gdGhlIGxvYWRlciBoZXJlLgorICAgICAgICAgICAgc3BlYyA9IGltcG9ydGxpYi51dGlsLnNwZWNfZnJvbV9maWxlX2xvY2F0aW9uKCdfX3RlbXBfXycsIGZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlcj1sb2FkZXIpCisgICAgICAgICAgICBfc3BlYyA9IGltcG9ydGxpYi5fYm9vdHN0cmFwLl9TcGVjTWV0aG9kcyhzcGVjKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG1vZHVsZSA9IF9zcGVjLmxvYWQoKQogICAgICAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAgICAgIHJldHVybiBOb25lCi0gICAgICAgICAgICByZXN1bHQgPSAobW9kdWxlLl9fZG9jX18gb3IgJycpLnNwbGl0bGluZXMoKVswXQogICAgICAgICAgICAgZGVsIHN5cy5tb2R1bGVzWydfX3RlbXBfXyddCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAjIHRleHQgbW9kdWxlcyBjYW4gYmUgZGlyZWN0bHkgZXhhbWluZWQKLSAgICAgICAgICAgIHJlc3VsdCA9IHNvdXJjZV9zeW5vcHNpcyhmaWxlKQotICAgICAgICAgICAgZmlsZS5jbG9zZSgpCi0KKyAgICAgICAgICAgIHJlc3VsdCA9IG1vZHVsZS5fX2RvY19fLnNwbGl0bGluZXMoKVswXSBpZiBtb2R1bGUuX19kb2NfXyBlbHNlIE5vbmUKKyAgICAgICAgIyBDYWNoZSB0aGUgcmVzdWx0LgogICAgICAgICBjYWNoZVtmaWxlbmFtZV0gPSAobXRpbWUsIHJlc3VsdCkKICAgICByZXR1cm4gcmVzdWx0CiAKQEAgLTI2NywyMCArMjg3LDIyIEBACiAKIGRlZiBpbXBvcnRmaWxlKHBhdGgpOgogICAgICIiIkltcG9ydCBhIFB5dGhvbiBzb3VyY2UgZmlsZSBvciBjb21waWxlZCBmaWxlIGdpdmVuIGl0cyBwYXRoLiIiIgotICAgIG1hZ2ljID0gaW1wLmdldF9tYWdpYygpCisgICAgbWFnaWMgPSBpbXBvcnRsaWIudXRpbC5NQUdJQ19OVU1CRVIKICAgICB3aXRoIG9wZW4ocGF0aCwgJ3JiJykgYXMgZmlsZToKLSAgICAgICAgaWYgZmlsZS5yZWFkKGxlbihtYWdpYykpID09IG1hZ2ljOgotICAgICAgICAgICAga2luZCA9IGltcC5QWV9DT01QSUxFRAotICAgICAgICBlbHNlOgotICAgICAgICAgICAga2luZCA9IGltcC5QWV9TT1VSQ0UKLSAgICAgICAgZmlsZS5zZWVrKDApCi0gICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5iYXNlbmFtZShwYXRoKQotICAgICAgICBuYW1lLCBleHQgPSBvcy5wYXRoLnNwbGl0ZXh0KGZpbGVuYW1lKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBtb2R1bGUgPSBpbXAubG9hZF9tb2R1bGUobmFtZSwgZmlsZSwgcGF0aCwgKGV4dCwgJ3InLCBraW5kKSkKLSAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgcmFpc2UgRXJyb3JEdXJpbmdJbXBvcnQocGF0aCwgc3lzLmV4Y19pbmZvKCkpCi0gICAgcmV0dXJuIG1vZHVsZQorICAgICAgICBpc19ieXRlY29kZSA9IG1hZ2ljID09IGZpbGUucmVhZChsZW4obWFnaWMpKQorICAgIGZpbGVuYW1lID0gb3MucGF0aC5iYXNlbmFtZShwYXRoKQorICAgIG5hbWUsIGV4dCA9IG9zLnBhdGguc3BsaXRleHQoZmlsZW5hbWUpCisgICAgaWYgaXNfYnl0ZWNvZGU6CisgICAgICAgIGxvYWRlciA9IGltcG9ydGxpYi5fYm9vdHN0cmFwLlNvdXJjZWxlc3NGaWxlTG9hZGVyKG5hbWUsIHBhdGgpCisgICAgZWxzZToKKyAgICAgICAgbG9hZGVyID0gaW1wb3J0bGliLl9ib290c3RyYXAuU291cmNlRmlsZUxvYWRlcihuYW1lLCBwYXRoKQorICAgICMgWFhYIFdlIHByb2JhYmx5IGRvbid0IG5lZWQgdG8gcGFzcyBpbiB0aGUgbG9hZGVyIGhlcmUuCisgICAgc3BlYyA9IGltcG9ydGxpYi51dGlsLnNwZWNfZnJvbV9maWxlX2xvY2F0aW9uKG5hbWUsIHBhdGgsIGxvYWRlcj1sb2FkZXIpCisgICAgX3NwZWMgPSBpbXBvcnRsaWIuX2Jvb3RzdHJhcC5fU3BlY01ldGhvZHMoc3BlYykKKyAgICB0cnk6CisgICAgICAgIHJldHVybiBfc3BlYy5sb2FkKCkKKyAgICBleGNlcHQ6CisgICAgICAgIHJhaXNlIEVycm9yRHVyaW5nSW1wb3J0KHBhdGgsIHN5cy5leGNfaW5mbygpKQogCiBkZWYgc2FmZWltcG9ydChwYXRoLCBmb3JjZWxvYWQ9MCwgY2FjaGU9e30pOgogICAgICIiIkltcG9ydCBhIG1vZHVsZTsgaGFuZGxlIGVycm9yczsgcmV0dXJuIE5vbmUgaWYgdGhlIG1vZHVsZSBpc24ndCBmb3VuZC4KQEAgLTU3NCwxMCArNTk2LDE1IEBACiAgICAgICAgICAgICBlbGlmIHBlcDoKICAgICAgICAgICAgICAgICB1cmwgPSAnaHR0cDovL3d3dy5weXRob24ub3JnL2Rldi9wZXBzL3BlcC0lMDRkLycgJSBpbnQocGVwKQogICAgICAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKCc8YSBocmVmPSIlcyI+JXM8L2E+JyAlICh1cmwsIGVzY2FwZShhbGwpKSkKKyAgICAgICAgICAgIGVsaWYgc2VsZmRvdDoKKyAgICAgICAgICAgICAgICAjIENyZWF0ZSBhIGxpbmsgZm9yIG1ldGhvZHMgbGlrZSAnc2VsZi5tZXRob2QoLi4uKScKKyAgICAgICAgICAgICAgICAjIGFuZCB1c2UgPHN0cm9uZz4gZm9yIGF0dHJpYnV0ZXMgbGlrZSAnc2VsZi5hdHRyJworICAgICAgICAgICAgICAgIGlmIHRleHRbZW5kOmVuZCsxXSA9PSAnKCc6CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKCdzZWxmLicgKyBzZWxmLm5hbWVsaW5rKG5hbWUsIG1ldGhvZHMpKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKCdzZWxmLjxzdHJvbmc+JXM8L3N0cm9uZz4nICUgbmFtZSkKICAgICAgICAgICAgIGVsaWYgdGV4dFtlbmQ6ZW5kKzFdID09ICcoJzoKICAgICAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChzZWxmLm5hbWVsaW5rKG5hbWUsIG1ldGhvZHMsIGZ1bmNzLCBjbGFzc2VzKSkKLSAgICAgICAgICAgIGVsaWYgc2VsZmRvdDoKLSAgICAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZCgnc2VsZi48c3Ryb25nPiVzPC9zdHJvbmc+JyAlIG5hbWUpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKHNlbGYubmFtZWxpbmsobmFtZSwgY2xhc3NlcykpCiAgICAgICAgICAgICBoZXJlID0gZW5kCkBAIC02MjIsMTAgKzY0OSw3IEBACiAgICAgICAgIGhlYWQgPSAnPGJpZz48YmlnPjxzdHJvbmc+JXM8L3N0cm9uZz48L2JpZz48L2JpZz4nICUgbGlua2VkbmFtZQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBwYXRoID0gaW5zcGVjdC5nZXRhYnNmaWxlKG9iamVjdCkKLSAgICAgICAgICAgIHVybCA9IHBhdGgKLSAgICAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgotICAgICAgICAgICAgICAgIGltcG9ydCBudHVybDJwYXRoCi0gICAgICAgICAgICAgICAgdXJsID0gbnR1cmwycGF0aC5wYXRobmFtZTJ1cmwocGF0aCkKKyAgICAgICAgICAgIHVybCA9IHVybGxpYi5wYXJzZS5xdW90ZShwYXRoKQogICAgICAgICAgICAgZmlsZWxpbmsgPSBzZWxmLmZpbGVsaW5rKHVybCwgcGF0aCkKICAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKICAgICAgICAgICAgIGZpbGVsaW5rID0gJyhidWlsdC1pbiknCkBAIC04OTEsNyArOTE1LDcgQEAKICAgICAgICAgYW5jaG9yID0gKGNsIGFuZCBjbC5fX25hbWVfXyBvciAnJykgKyAnLScgKyBuYW1lCiAgICAgICAgIG5vdGUgPSAnJwogICAgICAgICBza2lwZG9jcyA9IDAKLSAgICAgICAgaWYgaW5zcGVjdC5pc21ldGhvZChvYmplY3QpOgorICAgICAgICBpZiBfaXNfYm91bmRfbWV0aG9kKG9iamVjdCk6CiAgICAgICAgICAgICBpbWNsYXNzID0gb2JqZWN0Ll9fc2VsZl9fLl9fY2xhc3NfXwogICAgICAgICAgICAgaWYgY2w6CiAgICAgICAgICAgICAgICAgaWYgaW1jbGFzcyBpcyBub3QgY2w6CkBAIC05MDIsNyArOTI2LDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5fX3NlbGZfXy5fX2NsYXNzX18sIG1vZCkKICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICBub3RlID0gJyB1bmJvdW5kICVzIG1ldGhvZCcgJSBzZWxmLmNsYXNzbGluayhpbWNsYXNzLG1vZCkKLSAgICAgICAgICAgIG9iamVjdCA9IG9iamVjdC5fX2Z1bmNfXwogCiAgICAgICAgIGlmIG5hbWUgPT0gcmVhbG5hbWU6CiAgICAgICAgICAgICB0aXRsZSA9ICc8YSBuYW1lPSIlcyI+PHN0cm9uZz4lczwvc3Ryb25nPjwvYT4nICUgKGFuY2hvciwgcmVhbG5hbWUpCkBAIC05MTYsMjMgKzkzOSwyNCBAQAogICAgICAgICAgICAgICAgIHJlYWxsaW5rID0gcmVhbG5hbWUKICAgICAgICAgICAgIHRpdGxlID0gJzxhIG5hbWU9IiVzIj48c3Ryb25nPiVzPC9zdHJvbmc+PC9hPiA9ICVzJyAlICgKICAgICAgICAgICAgICAgICBhbmNob3IsIG5hbWUsIHJlYWxsaW5rKQotICAgICAgICBpZiBpbnNwZWN0LmlzZnVuY3Rpb24ob2JqZWN0KToKLSAgICAgICAgICAgIGFyZ3MsIHZhcmFyZ3MsIGt3b25seWFyZ3MsIGt3ZGVmYXVsdHMsIHZhcmt3LCBkZWZhdWx0cywgYW5uID0gXAotICAgICAgICAgICAgICAgIGluc3BlY3QuZ2V0ZnVsbGFyZ3NwZWMob2JqZWN0KQotICAgICAgICAgICAgYXJnc3BlYyA9IGluc3BlY3QuZm9ybWF0YXJnc3BlYygKLSAgICAgICAgICAgICAgICBhcmdzLCB2YXJhcmdzLCBrd29ubHlhcmdzLCBrd2RlZmF1bHRzLCB2YXJrdywgZGVmYXVsdHMsIGFubiwKLSAgICAgICAgICAgICAgICBmb3JtYXR2YWx1ZT1zZWxmLmZvcm1hdHZhbHVlLAotICAgICAgICAgICAgICAgIGZvcm1hdGFubm90YXRpb249aW5zcGVjdC5mb3JtYXRhbm5vdGF0aW9ucmVsYXRpdmV0byhvYmplY3QpKQotICAgICAgICAgICAgaWYgcmVhbG5hbWUgPT0gJzxsYW1iZGE+JzoKLSAgICAgICAgICAgICAgICB0aXRsZSA9ICc8c3Ryb25nPiVzPC9zdHJvbmc+IDxlbT5sYW1iZGE8L2VtPiAnICUgbmFtZQotICAgICAgICAgICAgICAgICMgWFhYIGxhbWJkYSdzIHdvbid0IHVzdWFsbHkgaGF2ZSBmdW5jX2Fubm90YXRpb25zWydyZXR1cm4nXQotICAgICAgICAgICAgICAgICMgc2luY2UgdGhlIHN5bnRheCBkb2Vzbid0IHN1cHBvcnQgYnV0IGl0IGlzIHBvc3NpYmxlLgotICAgICAgICAgICAgICAgICMgU28gcmVtb3ZpbmcgcGFyZW50aGVzZXMgaXNuJ3QgdHJ1bHkgc2FmZS4KLSAgICAgICAgICAgICAgICBhcmdzcGVjID0gYXJnc3BlY1sxOi0xXSAjIHJlbW92ZSBwYXJlbnRoZXNlcwotICAgICAgICBlbHNlOgorICAgICAgICBhcmdzcGVjID0gTm9uZQorICAgICAgICBpZiBpbnNwZWN0Lmlzcm91dGluZShvYmplY3QpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNpZ25hdHVyZSA9IGluc3BlY3Quc2lnbmF0dXJlKG9iamVjdCkKKyAgICAgICAgICAgIGV4Y2VwdCAoVmFsdWVFcnJvciwgVHlwZUVycm9yKToKKyAgICAgICAgICAgICAgICBzaWduYXR1cmUgPSBOb25lCisgICAgICAgICAgICBpZiBzaWduYXR1cmU6CisgICAgICAgICAgICAgICAgYXJnc3BlYyA9IHN0cihzaWduYXR1cmUpCisgICAgICAgICAgICAgICAgaWYgcmVhbG5hbWUgPT0gJzxsYW1iZGE+JzoKKyAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSAnPHN0cm9uZz4lczwvc3Ryb25nPiA8ZW0+bGFtYmRhPC9lbT4gJyAlIG5hbWUKKyAgICAgICAgICAgICAgICAgICAgIyBYWFggbGFtYmRhJ3Mgd29uJ3QgdXN1YWxseSBoYXZlIGZ1bmNfYW5ub3RhdGlvbnNbJ3JldHVybiddCisgICAgICAgICAgICAgICAgICAgICMgc2luY2UgdGhlIHN5bnRheCBkb2Vzbid0IHN1cHBvcnQgYnV0IGl0IGlzIHBvc3NpYmxlLgorICAgICAgICAgICAgICAgICAgICAjIFNvIHJlbW92aW5nIHBhcmVudGhlc2VzIGlzbid0IHRydWx5IHNhZmUuCisgICAgICAgICAgICAgICAgICAgIGFyZ3NwZWMgPSBhcmdzcGVjWzE6LTFdICMgcmVtb3ZlIHBhcmVudGhlc2VzCisgICAgICAgIGlmIG5vdCBhcmdzcGVjOgogICAgICAgICAgICAgYXJnc3BlYyA9ICcoLi4uKScKIAotICAgICAgICBkZWNsID0gdGl0bGUgKyBhcmdzcGVjICsgKG5vdGUgYW5kIHNlbGYuZ3JleSgKKyAgICAgICAgZGVjbCA9IHRpdGxlICsgc2VsZi5lc2NhcGUoYXJnc3BlYykgKyAobm90ZSBhbmQgc2VsZi5ncmV5KAogICAgICAgICAgICAgICAgJzxmb250IGZhY2U9ImhlbHZldGljYSwgYXJpYWwiPiVzPC9mb250PicgJSBub3RlKSkKIAogICAgICAgICBpZiBza2lwZG9jczoKQEAgLTEyMzYsOCArMTI2MCwxMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgZG9jID0gZ2V0ZG9jKHZhbHVlKQogICAgICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICAgICAgZG9jID0gTm9uZQotICAgICAgICAgICAgICAgICAgICBwdXNoKHNlbGYuZG9jb3RoZXIoZ2V0YXR0cihvYmplY3QsIG5hbWUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSwgbW9kLCBtYXhsZW49NzAsIGRvYz1kb2MpICsgJ1xuJykKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgb2JqID0gZ2V0YXR0cihvYmplY3QsIG5hbWUpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIG9iaiA9IGhvbWVjbHMuX19kaWN0X19bbmFtZV0KKyAgICAgICAgICAgICAgICAgICAgcHVzaChzZWxmLmRvY290aGVyKG9iaiwgbmFtZSwgbW9kLCBtYXhsZW49NzAsIGRvYz1kb2MpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nKQogICAgICAgICAgICAgcmV0dXJuIGF0dHJzCiAKICAgICAgICAgYXR0cnMgPSBbKG5hbWUsIGtpbmQsIGNscywgdmFsdWUpCkBAIC0xMjU5LDcgKzEyODcsNiBAQAogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICB0YWcgPSAiaW5oZXJpdGVkIGZyb20gJXMiICUgY2xhc3NuYW1lKHRoaXNjbGFzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5fX21vZHVsZV9fKQotCiAgICAgICAgICAgICAjIFNvcnQgYXR0cnMgYnkgbmFtZS4KICAgICAgICAgICAgIGF0dHJzLnNvcnQoKQogCkBAIC0xMjc0LDYgKzEzMDEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbWJkYSB0OiB0WzFdID09ICdkYXRhIGRlc2NyaXB0b3InKQogICAgICAgICAgICAgYXR0cnMgPSBzcGlsbGRhdGEoIkRhdGEgYW5kIG90aGVyIGF0dHJpYnV0ZXMgJXM6XG4iICUgdGFnLCBhdHRycywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbWJkYSB0OiB0WzFdID09ICdkYXRhJykKKwogICAgICAgICAgICAgYXNzZXJ0IGF0dHJzID09IFtdCiAgICAgICAgICAgICBhdHRycyA9IGluaGVyaXRlZAogCkBAIC0xMjkyLDcgKzEzMjAsNyBAQAogICAgICAgICBuYW1lID0gbmFtZSBvciByZWFsbmFtZQogICAgICAgICBub3RlID0gJycKICAgICAgICAgc2tpcGRvY3MgPSAwCi0gICAgICAgIGlmIGluc3BlY3QuaXNtZXRob2Qob2JqZWN0KToKKyAgICAgICAgaWYgX2lzX2JvdW5kX21ldGhvZChvYmplY3QpOgogICAgICAgICAgICAgaW1jbGFzcyA9IG9iamVjdC5fX3NlbGZfXy5fX2NsYXNzX18KICAgICAgICAgICAgIGlmIGNsOgogICAgICAgICAgICAgICAgIGlmIGltY2xhc3MgaXMgbm90IGNsOgpAQCAtMTMwMyw3ICsxMzMxLDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5fX3NlbGZfXy5fX2NsYXNzX18sIG1vZCkKICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICBub3RlID0gJyB1bmJvdW5kICVzIG1ldGhvZCcgJSBjbGFzc25hbWUoaW1jbGFzcyxtb2QpCi0gICAgICAgICAgICBvYmplY3QgPSBvYmplY3QuX19mdW5jX18KIAogICAgICAgICBpZiBuYW1lID09IHJlYWxuYW1lOgogICAgICAgICAgICAgdGl0bGUgPSBzZWxmLmJvbGQocmVhbG5hbWUpCkBAIC0xMzEyLDIwICsxMzM5LDIyIEBACiAgICAgICAgICAgICAgICAgY2wuX19kaWN0X19bcmVhbG5hbWVdIGlzIG9iamVjdCk6CiAgICAgICAgICAgICAgICAgc2tpcGRvY3MgPSAxCiAgICAgICAgICAgICB0aXRsZSA9IHNlbGYuYm9sZChuYW1lKSArICcgPSAnICsgcmVhbG5hbWUKLSAgICAgICAgaWYgaW5zcGVjdC5pc2Z1bmN0aW9uKG9iamVjdCk6Ci0gICAgICAgICAgICBhcmdzLCB2YXJhcmdzLCB2YXJrdywgZGVmYXVsdHMsIGt3b25seWFyZ3MsIGt3ZGVmYXVsdHMsIGFubiA9IFwKLSAgICAgICAgICAgICAgaW5zcGVjdC5nZXRmdWxsYXJnc3BlYyhvYmplY3QpCi0gICAgICAgICAgICBhcmdzcGVjID0gaW5zcGVjdC5mb3JtYXRhcmdzcGVjKAotICAgICAgICAgICAgICAgIGFyZ3MsIHZhcmFyZ3MsIHZhcmt3LCBkZWZhdWx0cywga3dvbmx5YXJncywga3dkZWZhdWx0cywgYW5uLAotICAgICAgICAgICAgICAgIGZvcm1hdHZhbHVlPXNlbGYuZm9ybWF0dmFsdWUsCi0gICAgICAgICAgICAgICAgZm9ybWF0YW5ub3RhdGlvbj1pbnNwZWN0LmZvcm1hdGFubm90YXRpb25yZWxhdGl2ZXRvKG9iamVjdCkpCi0gICAgICAgICAgICBpZiByZWFsbmFtZSA9PSAnPGxhbWJkYT4nOgotICAgICAgICAgICAgICAgIHRpdGxlID0gc2VsZi5ib2xkKG5hbWUpICsgJyBsYW1iZGEgJwotICAgICAgICAgICAgICAgICMgWFhYIGxhbWJkYSdzIHdvbid0IHVzdWFsbHkgaGF2ZSBmdW5jX2Fubm90YXRpb25zWydyZXR1cm4nXQotICAgICAgICAgICAgICAgICMgc2luY2UgdGhlIHN5bnRheCBkb2Vzbid0IHN1cHBvcnQgYnV0IGl0IGlzIHBvc3NpYmxlLgotICAgICAgICAgICAgICAgICMgU28gcmVtb3ZpbmcgcGFyZW50aGVzZXMgaXNuJ3QgdHJ1bHkgc2FmZS4KLSAgICAgICAgICAgICAgICBhcmdzcGVjID0gYXJnc3BlY1sxOi0xXSAjIHJlbW92ZSBwYXJlbnRoZXNlcwotICAgICAgICBlbHNlOgorICAgICAgICBhcmdzcGVjID0gTm9uZQorCisgICAgICAgIGlmIGluc3BlY3QuaXNyb3V0aW5lKG9iamVjdCk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2lnbmF0dXJlID0gaW5zcGVjdC5zaWduYXR1cmUob2JqZWN0KQorICAgICAgICAgICAgZXhjZXB0IChWYWx1ZUVycm9yLCBUeXBlRXJyb3IpOgorICAgICAgICAgICAgICAgIHNpZ25hdHVyZSA9IE5vbmUKKyAgICAgICAgICAgIGlmIHNpZ25hdHVyZToKKyAgICAgICAgICAgICAgICBhcmdzcGVjID0gc3RyKHNpZ25hdHVyZSkKKyAgICAgICAgICAgICAgICBpZiByZWFsbmFtZSA9PSAnPGxhbWJkYT4nOgorICAgICAgICAgICAgICAgICAgICB0aXRsZSA9IHNlbGYuYm9sZChuYW1lKSArICcgbGFtYmRhICcKKyAgICAgICAgICAgICAgICAgICAgIyBYWFggbGFtYmRhJ3Mgd29uJ3QgdXN1YWxseSBoYXZlIGZ1bmNfYW5ub3RhdGlvbnNbJ3JldHVybiddCisgICAgICAgICAgICAgICAgICAgICMgc2luY2UgdGhlIHN5bnRheCBkb2Vzbid0IHN1cHBvcnQgYnV0IGl0IGlzIHBvc3NpYmxlLgorICAgICAgICAgICAgICAgICAgICAjIFNvIHJlbW92aW5nIHBhcmVudGhlc2VzIGlzbid0IHRydWx5IHNhZmUuCisgICAgICAgICAgICAgICAgICAgIGFyZ3NwZWMgPSBhcmdzcGVjWzE6LTFdICMgcmVtb3ZlIHBhcmVudGhlc2VzCisgICAgICAgIGlmIG5vdCBhcmdzcGVjOgogICAgICAgICAgICAgYXJnc3BlYyA9ICcoLi4uKScKICAgICAgICAgZGVjbCA9IHRpdGxlICsgYXJnc3BlYyArIG5vdGUKIApAQCAtMTM4Myw2ICsxNDEyLDggQEAKIAogZGVmIGdldHBhZ2VyKCk6CiAgICAgIiIiRGVjaWRlIHdoYXQgbWV0aG9kIHRvIHVzZSBmb3IgcGFnaW5nIHRocm91Z2ggdGV4dC4iIiIKKyAgICBpZiBub3QgaGFzYXR0cihzeXMuc3RkaW4sICJpc2F0dHkiKToKKyAgICAgICAgcmV0dXJuIHBsYWlucGFnZXIKICAgICBpZiBub3QgaGFzYXR0cihzeXMuc3Rkb3V0LCAiaXNhdHR5Iik6CiAgICAgICAgIHJldHVybiBwbGFpbnBhZ2VyCiAgICAgaWYgbm90IHN5cy5zdGRpbi5pc2F0dHkoKSBvciBub3Qgc3lzLnN0ZG91dC5pc2F0dHkoKToKQEAgLTEzOTYsNyArMTQyNyw3IEBACiAgICAgICAgICAgICByZXR1cm4gbGFtYmRhIHRleHQ6IHBpcGVwYWdlcih0ZXh0LCBvcy5lbnZpcm9uWydQQUdFUiddKQogICAgIGlmIG9zLmVudmlyb24uZ2V0KCdURVJNJykgaW4gKCdkdW1iJywgJ2VtYWNzJyk6CiAgICAgICAgIHJldHVybiBwbGFpbnBhZ2VyCi0gICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMicgb3Igc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ29zMicpOgorICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgogICAgICAgICByZXR1cm4gbGFtYmRhIHRleHQ6IHRlbXBmaWxlcGFnZXIocGxhaW4odGV4dCksICdtb3JlIDwnKQogICAgIGlmIGhhc2F0dHIob3MsICdzeXN0ZW0nKSBhbmQgb3Muc3lzdGVtKCcobGVzcykgMj4vZGV2L251bGwnKSA9PSAwOgogICAgICAgICByZXR1cm4gbGFtYmRhIHRleHQ6IHBpcGVwYWdlcih0ZXh0LCAnbGVzcycpCkBAIC0xNDE4LDQwICsxNDQ5LDY0IEBACiAKIGRlZiBwaXBlcGFnZXIodGV4dCwgY21kKToKICAgICAiIiJQYWdlIHRocm91Z2ggdGV4dCBieSBmZWVkaW5nIGl0IHRvIGFub3RoZXIgcHJvZ3JhbS4iIiIKLSAgICBwaXBlID0gb3MucG9wZW4oY21kLCAndycpCisgICAgaW1wb3J0IHN1YnByb2Nlc3MKKyAgICBwcm9jID0gc3VicHJvY2Vzcy5Qb3BlbihjbWQsIHNoZWxsPVRydWUsIHN0ZGluPXN1YnByb2Nlc3MuUElQRSkKICAgICB0cnk6Ci0gICAgICAgIHBpcGUud3JpdGUodGV4dCkKLSAgICAgICAgcGlwZS5jbG9zZSgpCi0gICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgIHdpdGggaW8uVGV4dElPV3JhcHBlcihwcm9jLnN0ZGluLCBlcnJvcnM9J2JhY2tzbGFzaHJlcGxhY2UnKSBhcyBwaXBlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHBpcGUud3JpdGUodGV4dCkKKyAgICAgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKKyAgICAgICAgICAgICAgICAjIFdlJ3ZlIGhlcmVieSBhYmFuZG9uZWQgd2hhdGV2ZXIgdGV4dCBoYXNuJ3QgYmVlbiB3cml0dGVuLAorICAgICAgICAgICAgICAgICMgYnV0IHRoZSBwYWdlciBpcyBzdGlsbCBpbiBjb250cm9sIG9mIHRoZSB0ZXJtaW5hbC4KKyAgICAgICAgICAgICAgICBwYXNzCisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIHBhc3MgIyBJZ25vcmUgYnJva2VuIHBpcGVzIGNhdXNlZCBieSBxdWl0dGluZyB0aGUgcGFnZXIgcHJvZ3JhbS4KKyAgICB3aGlsZSBUcnVlOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBwcm9jLndhaXQoKQorICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAgICAgICAgIyBJZ25vcmUgY3RsLWMgbGlrZSB0aGUgcGFnZXIgaXRzZWxmIGRvZXMuICBPdGhlcndpc2UgdGhlIHBhZ2VyIGlzCisgICAgICAgICAgICAjIGxlZnQgcnVubmluZyBhbmQgdGhlIHRlcm1pbmFsIGlzIGluIHJhdyBtb2RlIGFuZCB1bnVzYWJsZS4KKyAgICAgICAgICAgIHBhc3MKIAogZGVmIHRlbXBmaWxlcGFnZXIodGV4dCwgY21kKToKICAgICAiIiJQYWdlIHRocm91Z2ggdGV4dCBieSBpbnZva2luZyBhIHByb2dyYW0gb24gYSB0ZW1wb3JhcnkgZmlsZS4iIiIKICAgICBpbXBvcnQgdGVtcGZpbGUKICAgICBmaWxlbmFtZSA9IHRlbXBmaWxlLm1rdGVtcCgpCi0gICAgZmlsZSA9IG9wZW4oZmlsZW5hbWUsICd3JykKLSAgICBmaWxlLndyaXRlKHRleHQpCi0gICAgZmlsZS5jbG9zZSgpCisgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAndycsIGVycm9ycz0nYmFja3NsYXNocmVwbGFjZScpIGFzIGZpbGU6CisgICAgICAgIGZpbGUud3JpdGUodGV4dCkKICAgICB0cnk6CiAgICAgICAgIG9zLnN5c3RlbShjbWQgKyAnICInICsgZmlsZW5hbWUgKyAnIicpCiAgICAgZmluYWxseToKICAgICAgICAgb3MudW5saW5rKGZpbGVuYW1lKQogCitkZWYgX2VzY2FwZV9zdGRvdXQodGV4dCk6CisgICAgIyBFc2NhcGUgbm9uLWVuY29kYWJsZSBjaGFyYWN0ZXJzIHRvIGF2b2lkIGVuY29kaW5nIGVycm9ycyBsYXRlcgorICAgIGVuY29kaW5nID0gZ2V0YXR0cihzeXMuc3Rkb3V0LCAnZW5jb2RpbmcnLCBOb25lKSBvciAndXRmLTgnCisgICAgcmV0dXJuIHRleHQuZW5jb2RlKGVuY29kaW5nLCAnYmFja3NsYXNocmVwbGFjZScpLmRlY29kZShlbmNvZGluZykKKwogZGVmIHR0eXBhZ2VyKHRleHQpOgogICAgICIiIlBhZ2UgdGhyb3VnaCB0ZXh0IG9uIGEgdGV4dCB0ZXJtaW5hbC4iIiIKLSAgICBsaW5lcyA9IHBsYWluKHRleHQpLnNwbGl0KCdcbicpCisgICAgbGluZXMgPSBwbGFpbihfZXNjYXBlX3N0ZG91dCh0ZXh0KSkuc3BsaXQoJ1xuJykKICAgICB0cnk6CiAgICAgICAgIGltcG9ydCB0dHkKICAgICAgICAgZmQgPSBzeXMuc3RkaW4uZmlsZW5vKCkKICAgICAgICAgb2xkID0gdHR5LnRjZ2V0YXR0cihmZCkKICAgICAgICAgdHR5LnNldGNicmVhayhmZCkKICAgICAgICAgZ2V0Y2hhciA9IGxhbWJkYTogc3lzLnN0ZGluLnJlYWQoMSkKLSAgICBleGNlcHQgKEltcG9ydEVycm9yLCBBdHRyaWJ1dGVFcnJvcik6CisgICAgZXhjZXB0IChJbXBvcnRFcnJvciwgQXR0cmlidXRlRXJyb3IsIGlvLlVuc3VwcG9ydGVkT3BlcmF0aW9uKToKICAgICAgICAgdHR5ID0gTm9uZQogICAgICAgICBnZXRjaGFyID0gbGFtYmRhOiBzeXMuc3RkaW4ucmVhZGxpbmUoKVs6LTFdWzoxXQogCiAgICAgdHJ5OgotICAgICAgICByID0gaW5jID0gb3MuZW52aXJvbi5nZXQoJ0xJTkVTJywgMjUpIC0gMQorICAgICAgICB0cnk6CisgICAgICAgICAgICBoID0gaW50KG9zLmVudmlyb24uZ2V0KCdMSU5FUycsIDApKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIGggPSAwCisgICAgICAgIGlmIGggPD0gMToKKyAgICAgICAgICAgIGggPSAyNQorICAgICAgICByID0gaW5jID0gaCAtIDEKICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgnXG4nLmpvaW4obGluZXNbOmluY10pICsgJ1xuJykKICAgICAgICAgd2hpbGUgbGluZXNbcjpdOgogICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgnLS0gbW9yZSAtLScpCkBAIC0xNDc3LDcgKzE1MzIsNyBAQAogCiBkZWYgcGxhaW5wYWdlcih0ZXh0KToKICAgICAiIiJTaW1wbHkgcHJpbnQgdW5mb3JtYXR0ZWQgdGV4dC4gIFRoaXMgaXMgdGhlIHVsdGltYXRlIGZhbGxiYWNrLiIiIgotICAgIHN5cy5zdGRvdXQud3JpdGUocGxhaW4odGV4dCkpCisgICAgc3lzLnN0ZG91dC53cml0ZShwbGFpbihfZXNjYXBlX3N0ZG91dCh0ZXh0KSkpCiAKIGRlZiBkZXNjcmliZSh0aGluZyk6CiAgICAgIiIiUHJvZHVjZSBhIHNob3J0IGRlc2NyaXB0aW9uIG9mIHRoZSBnaXZlbiB0aGluZy4iIiIKQEAgLTE1MzUsNyArMTU5MCw3IEBACiAgICAgIiIiR2l2ZW4gYW4gb2JqZWN0IG9yIGEgcGF0aCB0byBhbiBvYmplY3QsIGdldCB0aGUgb2JqZWN0IGFuZCBpdHMgbmFtZS4iIiIKICAgICBpZiBpc2luc3RhbmNlKHRoaW5nLCBzdHIpOgogICAgICAgICBvYmplY3QgPSBsb2NhdGUodGhpbmcsIGZvcmNlbG9hZCkKLSAgICAgICAgaWYgbm90IG9iamVjdDoKKyAgICAgICAgaWYgb2JqZWN0IGlzIE5vbmU6CiAgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcignbm8gUHl0aG9uIGRvY3VtZW50YXRpb24gZm91bmQgZm9yICVyJyAlIHRoaW5nKQogICAgICAgICByZXR1cm4gb2JqZWN0LCB0aGluZwogICAgIGVsc2U6CkBAIC0xNjA1LDcgKzE2NjAsNyBAQAogICAgICMgaW4gcHlkb2NfZGF0YS90b3BpY3MucHkuCiAgICAgIwogICAgICMgQ0FVVElPTjogaWYgeW91IGNoYW5nZSBvbmUgb2YgdGhlc2UgZGljdGlvbmFyaWVzLCBiZSBzdXJlIHRvIGFkYXB0IHRoZQotICAgICMgICAgICAgICAgbGlzdCBvZiBuZWVkZWQgbGFiZWxzIGluIERvYy90b29scy9zcGhpbnhleHQvcHlzcGVjaWZpYy5weSBhbmQKKyAgICAjICAgICAgICAgIGxpc3Qgb2YgbmVlZGVkIGxhYmVscyBpbiBEb2MvdG9vbHMvcHlzcGVjaWZpYy5weSBhbmQKICAgICAjICAgICAgICAgIHJlZ2VuZXJhdGUgdGhlIHB5ZG9jX2RhdGEvdG9waWNzLnB5IGZpbGUgYnkgcnVubmluZwogICAgICMgICAgICAgICAgICAgIG1ha2UgcHlkb2MtdG9waWNzCiAgICAgIyAgICAgICAgICBpbiBEb2MvIGFuZCBjb3B5aW5nIHRoZSBvdXRwdXQgZmlsZSBpbnRvIHRoZSBMaWIvIGRpcmVjdG9yeS4KQEAgLTE3MDUsNyArMTc2MCw2IEBACiAgICAgICAgICdUUkFDRUJBQ0tTJzogJ1RZUEVTJywKICAgICAgICAgJ05PTkUnOiAoJ2JsdGluLW51bGwtb2JqZWN0JywgJycpLAogICAgICAgICAnRUxMSVBTSVMnOiAoJ2JsdGluLWVsbGlwc2lzLW9iamVjdCcsICdTTElDSU5HUycpLAotICAgICAgICAnRklMRVMnOiAoJ2JsdGluLWZpbGUtb2JqZWN0cycsICcnKSwKICAgICAgICAgJ1NQRUNJQUxBVFRSSUJVVEVTJzogKCdzcGVjaWFsYXR0cnMnLCAnJyksCiAgICAgICAgICdDTEFTU0VTJzogKCd0eXBlcycsICdjbGFzcyBTUEVDSUFMTUVUSE9EUyBQUklWQVRFTkFNRVMnKSwKICAgICAgICAgJ01PRFVMRVMnOiAoJ3R5cGVzbW9kdWxlcycsICdpbXBvcnQnKSwKQEAgLTE4NDEsNyArMTg5NSw3IEBACiAKICAgICBkZWYgaW50cm8oc2VsZik6CiAgICAgICAgIHNlbGYub3V0cHV0LndyaXRlKCcnJwotV2VsY29tZSB0byBQeXRob24gJXMhICBUaGlzIGlzIHRoZSBpbnRlcmFjdGl2ZSBoZWxwIHV0aWxpdHkuCitXZWxjb21lIHRvIFB5dGhvbiAlcydzIGhlbHAgdXRpbGl0eSEKIAogSWYgdGhpcyBpcyB5b3VyIGZpcnN0IHRpbWUgdXNpbmcgUHl0aG9uLCB5b3Ugc2hvdWxkIGRlZmluaXRlbHkgY2hlY2sgb3V0CiB0aGUgdHV0b3JpYWwgb24gdGhlIEludGVybmV0IGF0IGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvJXMvdHV0b3JpYWwvLgpAQCAtMTg1MCwxMCArMTkwNCwxMCBAQAogUHl0aG9uIHByb2dyYW1zIGFuZCB1c2luZyBQeXRob24gbW9kdWxlcy4gIFRvIHF1aXQgdGhpcyBoZWxwIHV0aWxpdHkgYW5kCiByZXR1cm4gdG8gdGhlIGludGVycHJldGVyLCBqdXN0IHR5cGUgInF1aXQiLgogCi1UbyBnZXQgYSBsaXN0IG9mIGF2YWlsYWJsZSBtb2R1bGVzLCBrZXl3b3Jkcywgb3IgdG9waWNzLCB0eXBlICJtb2R1bGVzIiwKLSJrZXl3b3JkcyIsIG9yICJ0b3BpY3MiLiAgRWFjaCBtb2R1bGUgYWxzbyBjb21lcyB3aXRoIGEgb25lLWxpbmUgc3VtbWFyeQotb2Ygd2hhdCBpdCBkb2VzOyB0byBsaXN0IHRoZSBtb2R1bGVzIHdob3NlIHN1bW1hcmllcyBjb250YWluIGEgZ2l2ZW4gd29yZAotc3VjaCBhcyAic3BhbSIsIHR5cGUgIm1vZHVsZXMgc3BhbSIuCitUbyBnZXQgYSBsaXN0IG9mIGF2YWlsYWJsZSBtb2R1bGVzLCBrZXl3b3Jkcywgc3ltYm9scywgb3IgdG9waWNzLCB0eXBlCisibW9kdWxlcyIsICJrZXl3b3JkcyIsICJzeW1ib2xzIiwgb3IgInRvcGljcyIuICBFYWNoIG1vZHVsZSBhbHNvIGNvbWVzCit3aXRoIGEgb25lLWxpbmUgc3VtbWFyeSBvZiB3aGF0IGl0IGRvZXM7IHRvIGxpc3QgdGhlIG1vZHVsZXMgd2hvc2UgbmFtZQorb3Igc3VtbWFyeSBjb250YWluIGEgZ2l2ZW4gc3RyaW5nIHN1Y2ggYXMgInNwYW0iLCB0eXBlICJtb2R1bGVzIHNwYW0iLgogJycnICUgdHVwbGUoW3N5cy52ZXJzaW9uWzozXV0qMikpCiAKICAgICBkZWYgbGlzdChzZWxmLCBpdGVtcywgY29sdW1ucz00LCB3aWR0aD04MCk6CkBAIC0xOTE3LDExICsxOTcxLDEwIEBACiAgICAgICAgIGlmIG1vcmVfeHJlZnM6CiAgICAgICAgICAgICB4cmVmcyA9ICh4cmVmcyBvciAnJykgKyAnICcgKyBtb3JlX3hyZWZzCiAgICAgICAgIGlmIHhyZWZzOgotICAgICAgICAgICAgaW1wb3J0IGZvcm1hdHRlcgotICAgICAgICAgICAgYnVmZmVyID0gaW8uU3RyaW5nSU8oKQotICAgICAgICAgICAgZm9ybWF0dGVyLkR1bWJXcml0ZXIoYnVmZmVyKS5zZW5kX2Zsb3dpbmdfZGF0YSgKLSAgICAgICAgICAgICAgICAnUmVsYXRlZCBoZWxwIHRvcGljczogJyArICcsICcuam9pbih4cmVmcy5zcGxpdCgpKSArICdcbicpCi0gICAgICAgICAgICBzZWxmLm91dHB1dC53cml0ZSgnXG4lc1xuJyAlIGJ1ZmZlci5nZXR2YWx1ZSgpKQorICAgICAgICAgICAgaW1wb3J0IHRleHR3cmFwCisgICAgICAgICAgICB0ZXh0ID0gJ1JlbGF0ZWQgaGVscCB0b3BpY3M6ICcgKyAnLCAnLmpvaW4oeHJlZnMuc3BsaXQoKSkgKyAnXG4nCisgICAgICAgICAgICB3cmFwcGVkX3RleHQgPSB0ZXh0d3JhcC53cmFwKHRleHQsIDcyKQorICAgICAgICAgICAgc2VsZi5vdXRwdXQud3JpdGUoJ1xuJXNcbicgJSAnJy5qb2luKHdyYXBwZWRfdGV4dCkpCiAKICAgICBkZWYgX2dldHRvcGljKHNlbGYsIHRvcGljLCBtb3JlX3hyZWZzPScnKToKICAgICAgICAgIiIiUmV0dXJuIHVuYnVmZmVyZWQgdHVwbGUgb2YgKHRvcGljLCB4cmVmcykuCkBAIC0xOTU4LDkgKzIwMTEsMTAgQEAKICAgICBkZWYgbGlzdG1vZHVsZXMoc2VsZiwga2V5PScnKToKICAgICAgICAgaWYga2V5OgogICAgICAgICAgICAgc2VsZi5vdXRwdXQud3JpdGUoJycnCi1IZXJlIGlzIGEgbGlzdCBvZiBtYXRjaGluZyBtb2R1bGVzLiAgRW50ZXIgYW55IG1vZHVsZSBuYW1lIHRvIGdldCBtb3JlIGhlbHAuCitIZXJlIGlzIGEgbGlzdCBvZiBtb2R1bGVzIHdob3NlIG5hbWUgb3Igc3VtbWFyeSBjb250YWlucyAne30nLgorSWYgdGhlcmUgYXJlIGFueSwgZW50ZXIgYSBtb2R1bGUgbmFtZSB0byBnZXQgbW9yZSBoZWxwLgogCi0nJycpCisnJycuZm9ybWF0KGtleSkpCiAgICAgICAgICAgICBhcHJvcG9zKGtleSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYub3V0cHV0LndyaXRlKCcnJwpAQCAtMTk3OSwzNSArMjAzMywxMSBAQAogICAgICAgICAgICAgc2VsZi5saXN0KG1vZHVsZXMua2V5cygpKQogICAgICAgICAgICAgc2VsZi5vdXRwdXQud3JpdGUoJycnCiBFbnRlciBhbnkgbW9kdWxlIG5hbWUgdG8gZ2V0IG1vcmUgaGVscC4gIE9yLCB0eXBlICJtb2R1bGVzIHNwYW0iIHRvIHNlYXJjaAotZm9yIG1vZHVsZXMgd2hvc2UgZGVzY3JpcHRpb25zIGNvbnRhaW4gdGhlIHdvcmQgInNwYW0iLgorZm9yIG1vZHVsZXMgd2hvc2UgbmFtZSBvciBzdW1tYXJ5IGNvbnRhaW4gdGhlIHN0cmluZyAic3BhbSIuCiAnJycpCiAKIGhlbHAgPSBIZWxwZXIoKQogCi1jbGFzcyBTY2FubmVyOgotICAgICIiIkEgZ2VuZXJpYyB0cmVlIGl0ZXJhdG9yLiIiIgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCByb290cywgY2hpbGRyZW4sIGRlc2NlbmRwKToKLSAgICAgICAgc2VsZi5yb290cyA9IHJvb3RzWzpdCi0gICAgICAgIHNlbGYuc3RhdGUgPSBbXQotICAgICAgICBzZWxmLmNoaWxkcmVuID0gY2hpbGRyZW4KLSAgICAgICAgc2VsZi5kZXNjZW5kcCA9IGRlc2NlbmRwCi0KLSAgICBkZWYgbmV4dChzZWxmKToKLSAgICAgICAgaWYgbm90IHNlbGYuc3RhdGU6Ci0gICAgICAgICAgICBpZiBub3Qgc2VsZi5yb290czoKLSAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQotICAgICAgICAgICAgcm9vdCA9IHNlbGYucm9vdHMucG9wKDApCi0gICAgICAgICAgICBzZWxmLnN0YXRlID0gWyhyb290LCBzZWxmLmNoaWxkcmVuKHJvb3QpKV0KLSAgICAgICAgbm9kZSwgY2hpbGRyZW4gPSBzZWxmLnN0YXRlWy0xXQotICAgICAgICBpZiBub3QgY2hpbGRyZW46Ci0gICAgICAgICAgICBzZWxmLnN0YXRlLnBvcCgpCi0gICAgICAgICAgICByZXR1cm4gc2VsZi5uZXh0KCkKLSAgICAgICAgY2hpbGQgPSBjaGlsZHJlbi5wb3AoMCkKLSAgICAgICAgaWYgc2VsZi5kZXNjZW5kcChjaGlsZCk6Ci0gICAgICAgICAgICBzZWxmLnN0YXRlLmFwcGVuZCgoY2hpbGQsIHNlbGYuY2hpbGRyZW4oY2hpbGQpKSkKLSAgICAgICAgcmV0dXJuIGNoaWxkCi0KLQogY2xhc3MgTW9kdWxlU2Nhbm5lcjoKICAgICAiIiJBbiBpbnRlcnJ1cHRpYmxlIHNjYW5uZXIgdGhhdCBzZWFyY2hlcyBtb2R1bGUgc3lub3BzZXMuIiIiCiAKQEAgLTIwMzYsMTAgKzIwNjYsMTEgQEAKICAgICAgICAgICAgICAgICBjYWxsYmFjayhOb25lLCBtb2RuYW1lLCAnJykKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBsb2FkZXIgPSBpbXBvcnRlci5maW5kX21vZHVsZShtb2RuYW1lKQorICAgICAgICAgICAgICAgICAgICBzcGVjID0gcGtndXRpbC5fZ2V0X3NwZWMoaW1wb3J0ZXIsIG1vZG5hbWUpCiAgICAgICAgICAgICAgICAgZXhjZXB0IFN5bnRheEVycm9yOgogICAgICAgICAgICAgICAgICAgICAjIHJhaXNlZCBieSB0ZXN0cyBmb3IgYmFkIGNvZGluZyBjb29raWVzIG9yIEJPTQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGxvYWRlciA9IHNwZWMubG9hZGVyCiAgICAgICAgICAgICAgICAgaWYgaGFzYXR0cihsb2FkZXIsICdnZXRfc291cmNlJyk6CiAgICAgICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSA9IGxvYWRlci5nZXRfc291cmNlKG1vZG5hbWUpCkBAIC0yMDUzLDEzICsyMDg0LDE0IEBACiAgICAgICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoID0gTm9uZQogICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIF9zcGVjID0gaW1wb3J0bGliLl9ib290c3RyYXAuX1NwZWNNZXRob2RzKHNwZWMpCiAgICAgICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZSA9IGxvYWRlci5sb2FkX21vZHVsZShtb2RuYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlID0gX3NwZWMubG9hZCgpCiAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG9uZXJyb3I6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25lcnJvcihtb2RuYW1lKQogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgICAgICAgICAgZGVzYyA9IChtb2R1bGUuX19kb2NfXyBvciAnJykuc3BsaXRsaW5lcygpWzBdCisgICAgICAgICAgICAgICAgICAgIGRlc2MgPSBtb2R1bGUuX19kb2NfXy5zcGxpdGxpbmVzKClbMF0gaWYgbW9kdWxlLl9fZG9jX18gZWxzZSAnJwogICAgICAgICAgICAgICAgICAgICBwYXRoID0gZ2V0YXR0cihtb2R1bGUsJ19fZmlsZV9fJyxOb25lKQogICAgICAgICAgICAgICAgIG5hbWUgPSBtb2RuYW1lICsgJyAtICcgKyBkZXNjCiAgICAgICAgICAgICAgICAgaWYgbmFtZS5sb3dlcigpLmZpbmQoa2V5KSA+PSAwOgpAQCAtMjMyMyw3ICsyMzU1LDkgQEAKIAogICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CiAgICAgICAgICAgICB3YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncygnaWdub3JlJykgIyBpZ25vcmUgcHJvYmxlbXMgZHVyaW5nIGltcG9ydAotICAgICAgICAgICAgTW9kdWxlU2Nhbm5lcigpLnJ1bihjYWxsYmFjaywga2V5KQorICAgICAgICAgICAgZGVmIG9uZXJyb3IobW9kbmFtZSk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgTW9kdWxlU2Nhbm5lcigpLnJ1bihjYWxsYmFjaywga2V5LCBvbmVycm9yPW9uZXJyb3IpCiAKICAgICAgICAgIyBmb3JtYXQgcGFnZQogICAgICAgICBkZWYgYmx0aW5saW5rKG5hbWUpOgpAQCAtMjM0MSw3ICsyMzc1LDcgQEAKIAogICAgIGRlZiBodG1sX2dldGZpbGUocGF0aCk6CiAgICAgICAgICIiIkdldCBhbmQgZGlzcGxheSBhIHNvdXJjZSBmaWxlIGxpc3Rpbmcgc2FmZWx5LiIiIgotICAgICAgICBwYXRoID0gcGF0aC5yZXBsYWNlKCclMjAnLCAnICcpCisgICAgICAgIHBhdGggPSB1cmxsaWIucGFyc2UudW5xdW90ZShwYXRoKQogICAgICAgICB3aXRoIHRva2VuaXplLm9wZW4ocGF0aCkgYXMgZnA6CiAgICAgICAgICAgICBsaW5lcyA9IGh0bWwuZXNjYXBlKGZwLnJlYWQoKSkKICAgICAgICAgYm9keSA9ICc8cHJlPiVzPC9wcmU+JyAlIGxpbmVzCmRpZmYgLS1naXQgYS9MaWIvcHlkb2NfZGF0YS90b3BpY3MucHkgYi9MaWIvcHlkb2NfZGF0YS90b3BpY3MucHkKaW5kZXggZTJmZDM4MC4uOGM1NTc3NyAxMDA2NDQKLS0tIGEvTGliL3B5ZG9jX2RhdGEvdG9waWNzLnB5CisrKyBiL0xpYi9weWRvY19kYXRhL3RvcGljcy5weQpAQCAtMSw3OSArMSw3OSBAQAogIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KLSMgQXV0b2dlbmVyYXRlZCBieSBTcGhpbnggb24gU3VuIEZlYiAyMyAwODoxMzoyNSAyMDE0Ci10b3BpY3MgPSB7J2Fzc2VydCc6ICdcblRoZSAiYXNzZXJ0IiBzdGF0ZW1lbnRcbioqKioqKioqKioqKioqKioqKioqKipcblxuQXNzZXJ0IHN0YXRlbWVudHMgYXJlIGEgY29udmVuaWVudCB3YXkgdG8gaW5zZXJ0IGRlYnVnZ2luZyBhc3NlcnRpb25zXG5pbnRvIGEgcHJvZ3JhbTpcblxuICAgYXNzZXJ0X3N0bXQgOjo9ICJhc3NlcnQiIGV4cHJlc3Npb24gWyIsIiBleHByZXNzaW9uXVxuXG5UaGUgc2ltcGxlIGZvcm0sICJhc3NlcnQgZXhwcmVzc2lvbiIsIGlzIGVxdWl2YWxlbnQgdG9cblxuICAgaWYgX19kZWJ1Z19fOlxuICAgICAgaWYgbm90IGV4cHJlc3Npb246IHJhaXNlIEFzc2VydGlvbkVycm9yXG5cblRoZSBleHRlbmRlZCBmb3JtLCAiYXNzZXJ0IGV4cHJlc3Npb24xLCBleHByZXNzaW9uMiIsIGlzIGVxdWl2YWxlbnQgdG9cblxuICAgaWYgX19kZWJ1Z19fOlxuICAgICAgaWYgbm90IGV4cHJlc3Npb24xOiByYWlzZSBBc3NlcnRpb25FcnJvcihleHByZXNzaW9uMilcblxuVGhlc2UgZXF1aXZhbGVuY2VzIGFzc3VtZSB0aGF0ICJfX2RlYnVnX18iIGFuZCAiQXNzZXJ0aW9uRXJyb3IiIHJlZmVyXG50byB0aGUgYnVpbHQtaW4gdmFyaWFibGVzIHdpdGggdGhvc2UgbmFtZXMuICBJbiB0aGUgY3VycmVudFxuaW1wbGVtZW50YXRpb24sIHRoZSBidWlsdC1pbiB2YXJpYWJsZSAiX19kZWJ1Z19fIiBpcyAiVHJ1ZSIgdW5kZXJcbm5vcm1hbCBjaXJjdW1zdGFuY2VzLCAiRmFsc2UiIHdoZW4gb3B0aW1pemF0aW9uIGlzIHJlcXVlc3RlZCAoY29tbWFuZFxubGluZSBvcHRpb24gLU8pLiAgVGhlIGN1cnJlbnQgY29kZSBnZW5lcmF0b3IgZW1pdHMgbm8gY29kZSBmb3IgYW5cbmFzc2VydCBzdGF0ZW1lbnQgd2hlbiBvcHRpbWl6YXRpb24gaXMgcmVxdWVzdGVkIGF0IGNvbXBpbGUgdGltZS4gIE5vdGVcbnRoYXQgaXQgaXMgdW5uZWNlc3NhcnkgdG8gaW5jbHVkZSB0aGUgc291cmNlIGNvZGUgZm9yIHRoZSBleHByZXNzaW9uXG50aGF0IGZhaWxlZCBpbiB0aGUgZXJyb3IgbWVzc2FnZTsgaXQgd2lsbCBiZSBkaXNwbGF5ZWQgYXMgcGFydCBvZiB0aGVcbnN0YWNrIHRyYWNlLlxuXG5Bc3NpZ25tZW50cyB0byAiX19kZWJ1Z19fIiBhcmUgaWxsZWdhbC4gIFRoZSB2YWx1ZSBmb3IgdGhlIGJ1aWx0LWluXG52YXJpYWJsZSBpcyBkZXRlcm1pbmVkIHdoZW4gdGhlIGludGVycHJldGVyIHN0YXJ0cy5cbicsCi0gJ2Fzc2lnbm1lbnQnOiAnXG5Bc3NpZ25tZW50IHN0YXRlbWVudHNcbioqKioqKioqKioqKioqKioqKioqKlxuXG5Bc3NpZ25tZW50IHN0YXRlbWVudHMgYXJlIHVzZWQgdG8gKHJlKWJpbmQgbmFtZXMgdG8gdmFsdWVzIGFuZCB0b1xubW9kaWZ5IGF0dHJpYnV0ZXMgb3IgaXRlbXMgb2YgbXV0YWJsZSBvYmplY3RzOlxuXG4gICBhc3NpZ25tZW50X3N0bXQgOjo9ICh0YXJnZXRfbGlzdCAiPSIpKyAoZXhwcmVzc2lvbl9saXN0IHwgeWllbGRfZXhwcmVzc2lvbilcbiAgIHRhcmdldF9saXN0ICAgICA6Oj0gdGFyZ2V0ICgiLCIgdGFyZ2V0KSogWyIsIl1cbiAgIHRhcmdldCAgICAgICAgICA6Oj0gaWRlbnRpZmllclxuICAgICAgICAgICAgICB8ICIoIiB0YXJnZXRfbGlzdCAiKSJcbiAgICAgICAgICAgICAgfCAiWyIgdGFyZ2V0X2xpc3QgIl0iXG4gICAgICAgICAgICAgIHwgYXR0cmlidXRlcmVmXG4gICAgICAgICAgICAgIHwgc3Vic2NyaXB0aW9uXG4gICAgICAgICAgICAgIHwgc2xpY2luZ1xuICAgICAgICAgICAgICB8ICIqIiB0YXJnZXRcblxuKFNlZSBzZWN0aW9uICpQcmltYXJpZXMqIGZvciB0aGUgc3ludGF4IGRlZmluaXRpb25zIGZvciB0aGUgbGFzdCB0aHJlZVxuc3ltYm9scy4pXG5cbkFuIGFzc2lnbm1lbnQgc3RhdGVtZW50IGV2YWx1YXRlcyB0aGUgZXhwcmVzc2lvbiBsaXN0IChyZW1lbWJlciB0aGF0XG50aGlzIGNhbiBiZSBhIHNpbmdsZSBleHByZXNzaW9uIG9yIGEgY29tbWEtc2VwYXJhdGVkIGxpc3QsIHRoZSBsYXR0ZXJcbnlpZWxkaW5nIGEgdHVwbGUpIGFuZCBhc3NpZ25zIHRoZSBzaW5nbGUgcmVzdWx0aW5nIG9iamVjdCB0byBlYWNoIG9mXG50aGUgdGFyZ2V0IGxpc3RzLCBmcm9tIGxlZnQgdG8gcmlnaHQuXG5cbkFzc2lnbm1lbnQgaXMgZGVmaW5lZCByZWN1cnNpdmVseSBkZXBlbmRpbmcgb24gdGhlIGZvcm0gb2YgdGhlIHRhcmdldFxuKGxpc3QpLiBXaGVuIGEgdGFyZ2V0IGlzIHBhcnQgb2YgYSBtdXRhYmxlIG9iamVjdCAoYW4gYXR0cmlidXRlXG5yZWZlcmVuY2UsIHN1YnNjcmlwdGlvbiBvciBzbGljaW5nKSwgdGhlIG11dGFibGUgb2JqZWN0IG11c3RcbnVsdGltYXRlbHkgcGVyZm9ybSB0aGUgYXNzaWdubWVudCBhbmQgZGVjaWRlIGFib3V0IGl0cyB2YWxpZGl0eSwgYW5kXG5tYXkgcmFpc2UgYW4gZXhjZXB0aW9uIGlmIHRoZSBhc3NpZ25tZW50IGlzIHVuYWNjZXB0YWJsZS4gIFRoZSBydWxlc1xub2JzZXJ2ZWQgYnkgdmFyaW91cyB0eXBlcyBhbmQgdGhlIGV4Y2VwdGlvbnMgcmFpc2VkIGFyZSBnaXZlbiB3aXRoIHRoZVxuZGVmaW5pdGlvbiBvZiB0aGUgb2JqZWN0IHR5cGVzIChzZWUgc2VjdGlvbiAqVGhlIHN0YW5kYXJkIHR5cGVcbmhpZXJhcmNoeSopLlxuXG5Bc3NpZ25tZW50IG9mIGFuIG9iamVjdCB0byBhIHRhcmdldCBsaXN0LCBvcHRpb25hbGx5IGVuY2xvc2VkIGluXG5wYXJlbnRoZXNlcyBvciBzcXVhcmUgYnJhY2tldHMsIGlzIHJlY3Vyc2l2ZWx5IGRlZmluZWQgYXMgZm9sbG93cy5cblxuKiBJZiB0aGUgdGFyZ2V0IGxpc3QgaXMgYSBzaW5nbGUgdGFyZ2V0OiBUaGUgb2JqZWN0IGlzIGFzc2lnbmVkIHRvXG4gIHRoYXQgdGFyZ2V0LlxuXG4qIElmIHRoZSB0YXJnZXQgbGlzdCBpcyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHRhcmdldHM6IFRoZVxuICBvYmplY3QgbXVzdCBiZSBhbiBpdGVyYWJsZSB3aXRoIHRoZSBzYW1lIG51bWJlciBvZiBpdGVtcyBhcyB0aGVyZVxuICBhcmUgdGFyZ2V0cyBpbiB0aGUgdGFyZ2V0IGxpc3QsIGFuZCB0aGUgaXRlbXMgYXJlIGFzc2lnbmVkLCBmcm9tXG4gIGxlZnQgdG8gcmlnaHQsIHRvIHRoZSBjb3JyZXNwb25kaW5nIHRhcmdldHMuXG5cbiAgKiBJZiB0aGUgdGFyZ2V0IGxpc3QgY29udGFpbnMgb25lIHRhcmdldCBwcmVmaXhlZCB3aXRoIGFuXG4gICAgYXN0ZXJpc2ssIGNhbGxlZCBhICJzdGFycmVkIiB0YXJnZXQ6IFRoZSBvYmplY3QgbXVzdCBiZSBhIHNlcXVlbmNlXG4gICAgd2l0aCBhdCBsZWFzdCBhcyBtYW55IGl0ZW1zIGFzIHRoZXJlIGFyZSB0YXJnZXRzIGluIHRoZSB0YXJnZXRcbiAgICBsaXN0LCBtaW51cyBvbmUuICBUaGUgZmlyc3QgaXRlbXMgb2YgdGhlIHNlcXVlbmNlIGFyZSBhc3NpZ25lZCxcbiAgICBmcm9tIGxlZnQgdG8gcmlnaHQsIHRvIHRoZSB0YXJnZXRzIGJlZm9yZSB0aGUgc3RhcnJlZCB0YXJnZXQuICBUaGVcbiAgICBmaW5hbCBpdGVtcyBvZiB0aGUgc2VxdWVuY2UgYXJlIGFzc2lnbmVkIHRvIHRoZSB0YXJnZXRzIGFmdGVyIHRoZVxuICAgIHN0YXJyZWQgdGFyZ2V0LiAgQSBsaXN0IG9mIHRoZSByZW1haW5pbmcgaXRlbXMgaW4gdGhlIHNlcXVlbmNlIGlzXG4gICAgdGhlbiBhc3NpZ25lZCB0byB0aGUgc3RhcnJlZCB0YXJnZXQgKHRoZSBsaXN0IGNhbiBiZSBlbXB0eSkuXG5cbiAgKiBFbHNlOiBUaGUgb2JqZWN0IG11c3QgYmUgYSBzZXF1ZW5jZSB3aXRoIHRoZSBzYW1lIG51bWJlciBvZlxuICAgIGl0ZW1zIGFzIHRoZXJlIGFyZSB0YXJnZXRzIGluIHRoZSB0YXJnZXQgbGlzdCwgYW5kIHRoZSBpdGVtcyBhcmVcbiAgICBhc3NpZ25lZCwgZnJvbSBsZWZ0IHRvIHJpZ2h0LCB0byB0aGUgY29ycmVzcG9uZGluZyB0YXJnZXRzLlxuXG5Bc3NpZ25tZW50IG9mIGFuIG9iamVjdCB0byBhIHNpbmdsZSB0YXJnZXQgaXMgcmVjdXJzaXZlbHkgZGVmaW5lZCBhc1xuZm9sbG93cy5cblxuKiBJZiB0aGUgdGFyZ2V0IGlzIGFuIGlkZW50aWZpZXIgKG5hbWUpOlxuXG4gICogSWYgdGhlIG5hbWUgZG9lcyBub3Qgb2NjdXIgaW4gYSAiZ2xvYmFsIiBvciAibm9ubG9jYWwiIHN0YXRlbWVudFxuICAgIGluIHRoZSBjdXJyZW50IGNvZGUgYmxvY2s6IHRoZSBuYW1lIGlzIGJvdW5kIHRvIHRoZSBvYmplY3QgaW4gdGhlXG4gICAgY3VycmVudCBsb2NhbCBuYW1lc3BhY2UuXG5cbiAgKiBPdGhlcndpc2U6IHRoZSBuYW1lIGlzIGJvdW5kIHRvIHRoZSBvYmplY3QgaW4gdGhlIGdsb2JhbFxuICAgIG5hbWVzcGFjZSBvciB0aGUgb3V0ZXIgbmFtZXNwYWNlIGRldGVybWluZWQgYnkgIm5vbmxvY2FsIixcbiAgICByZXNwZWN0aXZlbHkuXG5cbiAgVGhlIG5hbWUgaXMgcmVib3VuZCBpZiBpdCB3YXMgYWxyZWFkeSBib3VuZC4gIFRoaXMgbWF5IGNhdXNlIHRoZVxuICByZWZlcmVuY2UgY291bnQgZm9yIHRoZSBvYmplY3QgcHJldmlvdXNseSBib3VuZCB0byB0aGUgbmFtZSB0byByZWFjaFxuICB6ZXJvLCBjYXVzaW5nIHRoZSBvYmplY3QgdG8gYmUgZGVhbGxvY2F0ZWQgYW5kIGl0cyBkZXN0cnVjdG9yIChpZiBpdFxuICBoYXMgb25lKSB0byBiZSBjYWxsZWQuXG5cbiogSWYgdGhlIHRhcmdldCBpcyBhIHRhcmdldCBsaXN0IGVuY2xvc2VkIGluIHBhcmVudGhlc2VzIG9yIGluXG4gIHNxdWFyZSBicmFja2V0czogVGhlIG9iamVjdCBtdXN0IGJlIGFuIGl0ZXJhYmxlIHdpdGggdGhlIHNhbWUgbnVtYmVyXG4gIG9mIGl0ZW1zIGFzIHRoZXJlIGFyZSB0YXJnZXRzIGluIHRoZSB0YXJnZXQgbGlzdCwgYW5kIGl0cyBpdGVtcyBhcmVcbiAgYXNzaWduZWQsIGZyb20gbGVmdCB0byByaWdodCwgdG8gdGhlIGNvcnJlc3BvbmRpbmcgdGFyZ2V0cy5cblxuKiBJZiB0aGUgdGFyZ2V0IGlzIGFuIGF0dHJpYnV0ZSByZWZlcmVuY2U6IFRoZSBwcmltYXJ5IGV4cHJlc3Npb24gaW5cbiAgdGhlIHJlZmVyZW5jZSBpcyBldmFsdWF0ZWQuICBJdCBzaG91bGQgeWllbGQgYW4gb2JqZWN0IHdpdGhcbiAgYXNzaWduYWJsZSBhdHRyaWJ1dGVzOyBpZiB0aGlzIGlzIG5vdCB0aGUgY2FzZSwgIlR5cGVFcnJvciIgaXNcbiAgcmFpc2VkLiAgVGhhdCBvYmplY3QgaXMgdGhlbiBhc2tlZCB0byBhc3NpZ24gdGhlIGFzc2lnbmVkIG9iamVjdCB0b1xuICB0aGUgZ2l2ZW4gYXR0cmlidXRlOyBpZiBpdCBjYW5ub3QgcGVyZm9ybSB0aGUgYXNzaWdubWVudCwgaXQgcmFpc2VzXG4gIGFuIGV4Y2VwdGlvbiAodXN1YWxseSBidXQgbm90IG5lY2Vzc2FyaWx5ICJBdHRyaWJ1dGVFcnJvciIpLlxuXG4gIE5vdGU6IElmIHRoZSBvYmplY3QgaXMgYSBjbGFzcyBpbnN0YW5jZSBhbmQgdGhlIGF0dHJpYnV0ZSByZWZlcmVuY2VcbiAgb2NjdXJzIG9uIGJvdGggc2lkZXMgb2YgdGhlIGFzc2lnbm1lbnQgb3BlcmF0b3IsIHRoZSBSSFMgZXhwcmVzc2lvbixcbiAgImEueCIgY2FuIGFjY2VzcyBlaXRoZXIgYW4gaW5zdGFuY2UgYXR0cmlidXRlIG9yIChpZiBubyBpbnN0YW5jZVxuICBhdHRyaWJ1dGUgZXhpc3RzKSBhIGNsYXNzIGF0dHJpYnV0ZS4gIFRoZSBMSFMgdGFyZ2V0ICJhLngiIGlzIGFsd2F5c1xuICBzZXQgYXMgYW4gaW5zdGFuY2UgYXR0cmlidXRlLCBjcmVhdGluZyBpdCBpZiBuZWNlc3NhcnkuICBUaHVzLCB0aGVcbiAgdHdvIG9jY3VycmVuY2VzIG9mICJhLngiIGRvIG5vdCBuZWNlc3NhcmlseSByZWZlciB0byB0aGUgc2FtZVxuICBhdHRyaWJ1dGU6IGlmIHRoZSBSSFMgZXhwcmVzc2lvbiByZWZlcnMgdG8gYSBjbGFzcyBhdHRyaWJ1dGUsIHRoZVxuICBMSFMgY3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBhdHRyaWJ1dGUgYXMgdGhlIHRhcmdldCBvZiB0aGVcbiAgYXNzaWdubWVudDpcblxuICAgICBjbGFzcyBDbHM6XG4gICAgICAgICB4ID0gMyAgICAgICAgICAgICAjIGNsYXNzIHZhcmlhYmxlXG4gICAgIGluc3QgPSBDbHMoKVxuICAgICBpbnN0LnggPSBpbnN0LnggKyAxICAgIyB3cml0ZXMgaW5zdC54IGFzIDQgbGVhdmluZyBDbHMueCBhcyAzXG5cbiAgVGhpcyBkZXNjcmlwdGlvbiBkb2VzIG5vdCBuZWNlc3NhcmlseSBhcHBseSB0byBkZXNjcmlwdG9yXG4gIGF0dHJpYnV0ZXMsIHN1Y2ggYXMgcHJvcGVydGllcyBjcmVhdGVkIHdpdGggInByb3BlcnR5KCkiLlxuXG4qIElmIHRoZSB0YXJnZXQgaXMgYSBzdWJzY3JpcHRpb246IFRoZSBwcmltYXJ5IGV4cHJlc3Npb24gaW4gdGhlXG4gIHJlZmVyZW5jZSBpcyBldmFsdWF0ZWQuICBJdCBzaG91bGQgeWllbGQgZWl0aGVyIGEgbXV0YWJsZSBzZXF1ZW5jZVxuICBvYmplY3QgKHN1Y2ggYXMgYSBsaXN0KSBvciBhIG1hcHBpbmcgb2JqZWN0IChzdWNoIGFzIGEgZGljdGlvbmFyeSkuXG4gIE5leHQsIHRoZSBzdWJzY3JpcHQgZXhwcmVzc2lvbiBpcyBldmFsdWF0ZWQuXG5cbiAgSWYgdGhlIHByaW1hcnkgaXMgYSBtdXRhYmxlIHNlcXVlbmNlIG9iamVjdCAoc3VjaCBhcyBhIGxpc3QpLCB0aGVcbiAgc3Vic2NyaXB0IG11c3QgeWllbGQgYW4gaW50ZWdlci4gIElmIGl0IGlzIG5lZ2F0aXZlLCB0aGUgc2VxdWVuY2VcJ3NcbiAgbGVuZ3RoIGlzIGFkZGVkIHRvIGl0LiAgVGhlIHJlc3VsdGluZyB2YWx1ZSBtdXN0IGJlIGEgbm9ubmVnYXRpdmVcbiAgaW50ZWdlciBsZXNzIHRoYW4gdGhlIHNlcXVlbmNlXCdzIGxlbmd0aCwgYW5kIHRoZSBzZXF1ZW5jZSBpcyBhc2tlZFxuICB0byBhc3NpZ24gdGhlIGFzc2lnbmVkIG9iamVjdCB0byBpdHMgaXRlbSB3aXRoIHRoYXQgaW5kZXguICBJZiB0aGVcbiAgaW5kZXggaXMgb3V0IG9mIHJhbmdlLCAiSW5kZXhFcnJvciIgaXMgcmFpc2VkIChhc3NpZ25tZW50IHRvIGFcbiAgc3Vic2NyaXB0ZWQgc2VxdWVuY2UgY2Fubm90IGFkZCBuZXcgaXRlbXMgdG8gYSBsaXN0KS5cblxuICBJZiB0aGUgcHJpbWFyeSBpcyBhIG1hcHBpbmcgb2JqZWN0IChzdWNoIGFzIGEgZGljdGlvbmFyeSksIHRoZVxuICBzdWJzY3JpcHQgbXVzdCBoYXZlIGEgdHlwZSBjb21wYXRpYmxlIHdpdGggdGhlIG1hcHBpbmdcJ3Mga2V5IHR5cGUsXG4gIGFuZCB0aGUgbWFwcGluZyBpcyB0aGVuIGFza2VkIHRvIGNyZWF0ZSBhIGtleS9kYXR1bSBwYWlyIHdoaWNoIG1hcHNcbiAgdGhlIHN1YnNjcmlwdCB0byB0aGUgYXNzaWduZWQgb2JqZWN0LiAgVGhpcyBjYW4gZWl0aGVyIHJlcGxhY2UgYW5cbiAgZXhpc3Rpbmcga2V5L3ZhbHVlIHBhaXIgd2l0aCB0aGUgc2FtZSBrZXkgdmFsdWUsIG9yIGluc2VydCBhIG5ld1xuICBrZXkvdmFsdWUgcGFpciAoaWYgbm8ga2V5IHdpdGggdGhlIHNhbWUgdmFsdWUgZXhpc3RlZCkuXG5cbiAgRm9yIHVzZXItZGVmaW5lZCBvYmplY3RzLCB0aGUgIl9fc2V0aXRlbV9fKCkiIG1ldGhvZCBpcyBjYWxsZWQgd2l0aFxuICBhcHByb3ByaWF0ZSBhcmd1bWVudHMuXG5cbiogSWYgdGhlIHRhcmdldCBpcyBhIHNsaWNpbmc6IFRoZSBwcmltYXJ5IGV4cHJlc3Npb24gaW4gdGhlXG4gIHJlZmVyZW5jZSBpcyBldmFsdWF0ZWQuICBJdCBzaG91bGQgeWllbGQgYSBtdXRhYmxlIHNlcXVlbmNlIG9iamVjdFxuICAoc3VjaCBhcyBhIGxpc3QpLiAgVGhlIGFzc2lnbmVkIG9iamVjdCBzaG91bGQgYmUgYSBzZXF1ZW5jZSBvYmplY3RcbiAgb2YgdGhlIHNhbWUgdHlwZS4gIE5leHQsIHRoZSBsb3dlciBhbmQgdXBwZXIgYm91bmQgZXhwcmVzc2lvbnMgYXJlXG4gIGV2YWx1YXRlZCwgaW5zb2ZhciB0aGV5IGFyZSBwcmVzZW50OyBkZWZhdWx0cyBhcmUgemVybyBhbmQgdGhlXG4gIHNlcXVlbmNlXCdzIGxlbmd0aC4gIFRoZSBib3VuZHMgc2hvdWxkIGV2YWx1YXRlIHRvIGludGVnZXJzLiBJZlxuICBlaXRoZXIgYm91bmQgaXMgbmVnYXRpdmUsIHRoZSBzZXF1ZW5jZVwncyBsZW5ndGggaXMgYWRkZWQgdG8gaXQuICBUaGVcbiAgcmVzdWx0aW5nIGJvdW5kcyBhcmUgY2xpcHBlZCB0byBsaWUgYmV0d2VlbiB6ZXJvIGFuZCB0aGUgc2VxdWVuY2VcJ3NcbiAgbGVuZ3RoLCBpbmNsdXNpdmUuICBGaW5hbGx5LCB0aGUgc2VxdWVuY2Ugb2JqZWN0IGlzIGFza2VkIHRvIHJlcGxhY2VcbiAgdGhlIHNsaWNlIHdpdGggdGhlIGl0ZW1zIG9mIHRoZSBhc3NpZ25lZCBzZXF1ZW5jZS4gIFRoZSBsZW5ndGggb2ZcbiAgdGhlIHNsaWNlIG1heSBiZSBkaWZmZXJlbnQgZnJvbSB0aGUgbGVuZ3RoIG9mIHRoZSBhc3NpZ25lZCBzZXF1ZW5jZSxcbiAgdGh1cyBjaGFuZ2luZyB0aGUgbGVuZ3RoIG9mIHRoZSB0YXJnZXQgc2VxdWVuY2UsIGlmIHRoZSBvYmplY3RcbiAgYWxsb3dzIGl0LlxuXG4qKkNQeXRob24gaW1wbGVtZW50YXRpb24gZGV0YWlsOioqIEluIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uLCB0aGVcbnN5bnRheCBmb3IgdGFyZ2V0cyBpcyB0YWtlbiB0byBiZSB0aGUgc2FtZSBhcyBmb3IgZXhwcmVzc2lvbnMsIGFuZFxuaW52YWxpZCBzeW50YXggaXMgcmVqZWN0ZWQgZHVyaW5nIHRoZSBjb2RlIGdlbmVyYXRpb24gcGhhc2UsIGNhdXNpbmdcbmxlc3MgZGV0YWlsZWQgZXJyb3IgbWVzc2FnZXMuXG5cbldBUk5JTkc6IEFsdGhvdWdoIHRoZSBkZWZpbml0aW9uIG9mIGFzc2lnbm1lbnQgaW1wbGllcyB0aGF0IG92ZXJsYXBzXG5iZXR3ZWVuIHRoZSBsZWZ0LWhhbmQgc2lkZSBhbmQgdGhlIHJpZ2h0LWhhbmQgc2lkZSBhcmUgXCdzYWZlXCcgKGZvclxuZXhhbXBsZSAiYSwgYiA9IGIsIGEiIHN3YXBzIHR3byB2YXJpYWJsZXMpLCBvdmVybGFwcyAqd2l0aGluKiB0aGVcbmNvbGxlY3Rpb24gb2YgYXNzaWduZWQtdG8gdmFyaWFibGVzIGFyZSBub3Qgc2FmZSEgIEZvciBpbnN0YW5jZSwgdGhlXG5mb2xsb3dpbmcgcHJvZ3JhbSBwcmludHMgIlswLCAyXSI6XG5cbiAgIHggPSBbMCwgMV1cbiAgIGkgPSAwXG4gICBpLCB4W2ldID0gMSwgMlxuICAgcHJpbnQoeClcblxuU2VlIGFsc286ICoqUEVQIDMxMzIqKiAtIEV4dGVuZGVkIEl0ZXJhYmxlIFVucGFja2luZ1xuXG4gICAgIFRoZSBzcGVjaWZpY2F0aW9uIGZvciB0aGUgIip0YXJnZXQiIGZlYXR1cmUuXG5cblxuQXVnbWVudGVkIGFzc2lnbm1lbnQgc3RhdGVtZW50c1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5BdWdtZW50ZWQgYXNzaWdubWVudCBpcyB0aGUgY29tYmluYXRpb24sIGluIGEgc2luZ2xlIHN0YXRlbWVudCwgb2YgYVxuYmluYXJ5IG9wZXJhdGlvbiBhbmQgYW4gYXNzaWdubWVudCBzdGF0ZW1lbnQ6XG5cbiAgIGF1Z21lbnRlZF9hc3NpZ25tZW50X3N0bXQgOjo9IGF1Z3RhcmdldCBhdWdvcCAoZXhwcmVzc2lvbl9saXN0IHwgeWllbGRfZXhwcmVzc2lvbilcbiAgIGF1Z3RhcmdldCAgICAgICAgICAgICAgICAgOjo9IGlkZW50aWZpZXIgfCBhdHRyaWJ1dGVyZWYgfCBzdWJzY3JpcHRpb24gfCBzbGljaW5nXG4gICBhdWdvcCAgICAgICAgICAgICAgICAgICAgIDo6PSAiKz0iIHwgIi09IiB8ICIqPSIgfCAiLz0iIHwgIi8vPSIgfCAiJT0iIHwgIioqPSJcbiAgICAgICAgICAgICB8ICI+Pj0iIHwgIjw8PSIgfCAiJj0iIHwgIl49IiB8ICJ8PSJcblxuKFNlZSBzZWN0aW9uICpQcmltYXJpZXMqIGZvciB0aGUgc3ludGF4IGRlZmluaXRpb25zIGZvciB0aGUgbGFzdCB0aHJlZVxuc3ltYm9scy4pXG5cbkFuIGF1Z21lbnRlZCBhc3NpZ25tZW50IGV2YWx1YXRlcyB0aGUgdGFyZ2V0ICh3aGljaCwgdW5saWtlIG5vcm1hbFxuYXNzaWdubWVudCBzdGF0ZW1lbnRzLCBjYW5ub3QgYmUgYW4gdW5wYWNraW5nKSBhbmQgdGhlIGV4cHJlc3Npb25cbmxpc3QsIHBlcmZvcm1zIHRoZSBiaW5hcnkgb3BlcmF0aW9uIHNwZWNpZmljIHRvIHRoZSB0eXBlIG9mIGFzc2lnbm1lbnRcbm9uIHRoZSB0d28gb3BlcmFuZHMsIGFuZCBhc3NpZ25zIHRoZSByZXN1bHQgdG8gdGhlIG9yaWdpbmFsIHRhcmdldC5cblRoZSB0YXJnZXQgaXMgb25seSBldmFsdWF0ZWQgb25jZS5cblxuQW4gYXVnbWVudGVkIGFzc2lnbm1lbnQgZXhwcmVzc2lvbiBsaWtlICJ4ICs9IDEiIGNhbiBiZSByZXdyaXR0ZW4gYXNcbiJ4ID0geCArIDEiIHRvIGFjaGlldmUgYSBzaW1pbGFyLCBidXQgbm90IGV4YWN0bHkgZXF1YWwgZWZmZWN0LiBJbiB0aGVcbmF1Z21lbnRlZCB2ZXJzaW9uLCAieCIgaXMgb25seSBldmFsdWF0ZWQgb25jZS4gQWxzbywgd2hlbiBwb3NzaWJsZSxcbnRoZSBhY3R1YWwgb3BlcmF0aW9uIGlzIHBlcmZvcm1lZCAqaW4tcGxhY2UqLCBtZWFuaW5nIHRoYXQgcmF0aGVyIHRoYW5cbmNyZWF0aW5nIGEgbmV3IG9iamVjdCBhbmQgYXNzaWduaW5nIHRoYXQgdG8gdGhlIHRhcmdldCwgdGhlIG9sZCBvYmplY3RcbmlzIG1vZGlmaWVkIGluc3RlYWQuXG5cbldpdGggdGhlIGV4Y2VwdGlvbiBvZiBhc3NpZ25pbmcgdG8gdHVwbGVzIGFuZCBtdWx0aXBsZSB0YXJnZXRzIGluIGFcbnNpbmdsZSBzdGF0ZW1lbnQsIHRoZSBhc3NpZ25tZW50IGRvbmUgYnkgYXVnbWVudGVkIGFzc2lnbm1lbnRcbnN0YXRlbWVudHMgaXMgaGFuZGxlZCB0aGUgc2FtZSB3YXkgYXMgbm9ybWFsIGFzc2lnbm1lbnRzLiBTaW1pbGFybHksXG53aXRoIHRoZSBleGNlcHRpb24gb2YgdGhlIHBvc3NpYmxlICppbi1wbGFjZSogYmVoYXZpb3IsIHRoZSBiaW5hcnlcbm9wZXJhdGlvbiBwZXJmb3JtZWQgYnkgYXVnbWVudGVkIGFzc2lnbm1lbnQgaXMgdGhlIHNhbWUgYXMgdGhlIG5vcm1hbFxuYmluYXJ5IG9wZXJhdGlvbnMuXG5cbkZvciB0YXJnZXRzIHdoaWNoIGFyZSBhdHRyaWJ1dGUgcmVmZXJlbmNlcywgdGhlIHNhbWUgKmNhdmVhdCBhYm91dFxuY2xhc3MgYW5kIGluc3RhbmNlIGF0dHJpYnV0ZXMqIGFwcGxpZXMgYXMgZm9yIHJlZ3VsYXIgYXNzaWdubWVudHMuXG4nLAotICdhdG9tLWlkZW50aWZpZXJzJzogJ1xuSWRlbnRpZmllcnMgKE5hbWVzKVxuKioqKioqKioqKioqKioqKioqKlxuXG5BbiBpZGVudGlmaWVyIG9jY3VycmluZyBhcyBhbiBhdG9tIGlzIGEgbmFtZS4gIFNlZSBzZWN0aW9uXG4qSWRlbnRpZmllcnMgYW5kIGtleXdvcmRzKiBmb3IgbGV4aWNhbCBkZWZpbml0aW9uIGFuZCBzZWN0aW9uICpOYW1pbmdcbmFuZCBiaW5kaW5nKiBmb3IgZG9jdW1lbnRhdGlvbiBvZiBuYW1pbmcgYW5kIGJpbmRpbmcuXG5cbldoZW4gdGhlIG5hbWUgaXMgYm91bmQgdG8gYW4gb2JqZWN0LCBldmFsdWF0aW9uIG9mIHRoZSBhdG9tIHlpZWxkc1xudGhhdCBvYmplY3QuIFdoZW4gYSBuYW1lIGlzIG5vdCBib3VuZCwgYW4gYXR0ZW1wdCB0byBldmFsdWF0ZSBpdFxucmFpc2VzIGEgIk5hbWVFcnJvciIgZXhjZXB0aW9uLlxuXG4qKlByaXZhdGUgbmFtZSBtYW5nbGluZzoqKiBXaGVuIGFuIGlkZW50aWZpZXIgdGhhdCB0ZXh0dWFsbHkgb2NjdXJzIGluXG5hIGNsYXNzIGRlZmluaXRpb24gYmVnaW5zIHdpdGggdHdvIG9yIG1vcmUgdW5kZXJzY29yZSBjaGFyYWN0ZXJzIGFuZFxuZG9lcyBub3QgZW5kIGluIHR3byBvciBtb3JlIHVuZGVyc2NvcmVzLCBpdCBpcyBjb25zaWRlcmVkIGEgKnByaXZhdGVcbm5hbWUqIG9mIHRoYXQgY2xhc3MuIFByaXZhdGUgbmFtZXMgYXJlIHRyYW5zZm9ybWVkIHRvIGEgbG9uZ2VyIGZvcm1cbmJlZm9yZSBjb2RlIGlzIGdlbmVyYXRlZCBmb3IgdGhlbS4gIFRoZSB0cmFuc2Zvcm1hdGlvbiBpbnNlcnRzIHRoZVxuY2xhc3MgbmFtZSwgd2l0aCBsZWFkaW5nIHVuZGVyc2NvcmVzIHJlbW92ZWQgYW5kIGEgc2luZ2xlIHVuZGVyc2NvcmVcbmluc2VydGVkLCBpbiBmcm9udCBvZiB0aGUgbmFtZS4gIEZvciBleGFtcGxlLCB0aGUgaWRlbnRpZmllciAiX19zcGFtIlxub2NjdXJyaW5nIGluIGEgY2xhc3MgbmFtZWQgIkhhbSIgd2lsbCBiZSB0cmFuc2Zvcm1lZCB0byAiX0hhbV9fc3BhbSIuXG5UaGlzIHRyYW5zZm9ybWF0aW9uIGlzIGluZGVwZW5kZW50IG9mIHRoZSBzeW50YWN0aWNhbCBjb250ZXh0IGluIHdoaWNoXG50aGUgaWRlbnRpZmllciBpcyB1c2VkLiAgSWYgdGhlIHRyYW5zZm9ybWVkIG5hbWUgaXMgZXh0cmVtZWx5IGxvbmdcbihsb25nZXIgdGhhbiAyNTUgY2hhcmFjdGVycyksIGltcGxlbWVudGF0aW9uIGRlZmluZWQgdHJ1bmNhdGlvbiBtYXlcbmhhcHBlbi4gSWYgdGhlIGNsYXNzIG5hbWUgY29uc2lzdHMgb25seSBvZiB1bmRlcnNjb3Jlcywgbm9cbnRyYW5zZm9ybWF0aW9uIGlzIGRvbmUuXG4nLAotICdhdG9tLWxpdGVyYWxzJzogIlxuTGl0ZXJhbHNcbioqKioqKioqXG5cblB5dGhvbiBzdXBwb3J0cyBzdHJpbmcgYW5kIGJ5dGVzIGxpdGVyYWxzIGFuZCB2YXJpb3VzIG51bWVyaWNcbmxpdGVyYWxzOlxuXG4gICBsaXRlcmFsIDo6PSBzdHJpbmdsaXRlcmFsIHwgYnl0ZXNsaXRlcmFsXG4gICAgICAgICAgICAgICB8IGludGVnZXIgfCBmbG9hdG51bWJlciB8IGltYWdudW1iZXJcblxuRXZhbHVhdGlvbiBvZiBhIGxpdGVyYWwgeWllbGRzIGFuIG9iamVjdCBvZiB0aGUgZ2l2ZW4gdHlwZSAoc3RyaW5nLFxuYnl0ZXMsIGludGVnZXIsIGZsb2F0aW5nIHBvaW50IG51bWJlciwgY29tcGxleCBudW1iZXIpIHdpdGggdGhlIGdpdmVuXG52YWx1ZS4gIFRoZSB2YWx1ZSBtYXkgYmUgYXBwcm94aW1hdGVkIGluIHRoZSBjYXNlIG9mIGZsb2F0aW5nIHBvaW50XG5hbmQgaW1hZ2luYXJ5IChjb21wbGV4KSBsaXRlcmFscy4gIFNlZSBzZWN0aW9uICpMaXRlcmFscyogZm9yIGRldGFpbHMuXG5cbkFsbCBsaXRlcmFscyBjb3JyZXNwb25kIHRvIGltbXV0YWJsZSBkYXRhIHR5cGVzLCBhbmQgaGVuY2UgdGhlXG5vYmplY3QncyBpZGVudGl0eSBpcyBsZXNzIGltcG9ydGFudCB0aGFuIGl0cyB2YWx1ZS4gIE11bHRpcGxlXG5ldmFsdWF0aW9ucyBvZiBsaXRlcmFscyB3aXRoIHRoZSBzYW1lIHZhbHVlIChlaXRoZXIgdGhlIHNhbWVcbm9jY3VycmVuY2UgaW4gdGhlIHByb2dyYW0gdGV4dCBvciBhIGRpZmZlcmVudCBvY2N1cnJlbmNlKSBtYXkgb2J0YWluXG50aGUgc2FtZSBvYmplY3Qgb3IgYSBkaWZmZXJlbnQgb2JqZWN0IHdpdGggdGhlIHNhbWUgdmFsdWUuXG4iLAotICdhdHRyaWJ1dGUtYWNjZXNzJzogJ1xuQ3VzdG9taXppbmcgYXR0cmlidXRlIGFjY2Vzc1xuKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG5UaGUgZm9sbG93aW5nIG1ldGhvZHMgY2FuIGJlIGRlZmluZWQgdG8gY3VzdG9taXplIHRoZSBtZWFuaW5nIG9mXG5hdHRyaWJ1dGUgYWNjZXNzICh1c2Ugb2YsIGFzc2lnbm1lbnQgdG8sIG9yIGRlbGV0aW9uIG9mICJ4Lm5hbWUiKSBmb3JcbmNsYXNzIGluc3RhbmNlcy5cblxub2JqZWN0Ll9fZ2V0YXR0cl9fKHNlbGYsIG5hbWUpXG5cbiAgIENhbGxlZCB3aGVuIGFuIGF0dHJpYnV0ZSBsb29rdXAgaGFzIG5vdCBmb3VuZCB0aGUgYXR0cmlidXRlIGluIHRoZVxuICAgdXN1YWwgcGxhY2VzIChpLmUuIGl0IGlzIG5vdCBhbiBpbnN0YW5jZSBhdHRyaWJ1dGUgbm9yIGlzIGl0IGZvdW5kXG4gICBpbiB0aGUgY2xhc3MgdHJlZSBmb3IgInNlbGYiKS4gICJuYW1lIiBpcyB0aGUgYXR0cmlidXRlIG5hbWUuIFRoaXNcbiAgIG1ldGhvZCBzaG91bGQgcmV0dXJuIHRoZSAoY29tcHV0ZWQpIGF0dHJpYnV0ZSB2YWx1ZSBvciByYWlzZSBhblxuICAgIkF0dHJpYnV0ZUVycm9yIiBleGNlcHRpb24uXG5cbiAgIE5vdGUgdGhhdCBpZiB0aGUgYXR0cmlidXRlIGlzIGZvdW5kIHRocm91Z2ggdGhlIG5vcm1hbCBtZWNoYW5pc20sXG4gICAiX19nZXRhdHRyX18oKSIgaXMgbm90IGNhbGxlZC4gIChUaGlzIGlzIGFuIGludGVudGlvbmFsIGFzeW1tZXRyeVxuICAgYmV0d2VlbiAiX19nZXRhdHRyX18oKSIgYW5kICJfX3NldGF0dHJfXygpIi4pIFRoaXMgaXMgZG9uZSBib3RoIGZvclxuICAgZWZmaWNpZW5jeSByZWFzb25zIGFuZCBiZWNhdXNlIG90aGVyd2lzZSAiX19nZXRhdHRyX18oKSIgd291bGQgaGF2ZVxuICAgbm8gd2F5IHRvIGFjY2VzcyBvdGhlciBhdHRyaWJ1dGVzIG9mIHRoZSBpbnN0YW5jZS4gIE5vdGUgdGhhdCBhdFxuICAgbGVhc3QgZm9yIGluc3RhbmNlIHZhcmlhYmxlcywgeW91IGNhbiBmYWtlIHRvdGFsIGNvbnRyb2wgYnkgbm90XG4gICBpbnNlcnRpbmcgYW55IHZhbHVlcyBpbiB0aGUgaW5zdGFuY2UgYXR0cmlidXRlIGRpY3Rpb25hcnkgKGJ1dFxuICAgaW5zdGVhZCBpbnNlcnRpbmcgdGhlbSBpbiBhbm90aGVyIG9iamVjdCkuICBTZWUgdGhlXG4gICAiX19nZXRhdHRyaWJ1dGVfXygpIiBtZXRob2QgYmVsb3cgZm9yIGEgd2F5IHRvIGFjdHVhbGx5IGdldCB0b3RhbFxuICAgY29udHJvbCBvdmVyIGF0dHJpYnV0ZSBhY2Nlc3MuXG5cbm9iamVjdC5fX2dldGF0dHJpYnV0ZV9fKHNlbGYsIG5hbWUpXG5cbiAgIENhbGxlZCB1bmNvbmRpdGlvbmFsbHkgdG8gaW1wbGVtZW50IGF0dHJpYnV0ZSBhY2Nlc3NlcyBmb3JcbiAgIGluc3RhbmNlcyBvZiB0aGUgY2xhc3MuIElmIHRoZSBjbGFzcyBhbHNvIGRlZmluZXMgIl9fZ2V0YXR0cl9fKCkiLFxuICAgdGhlIGxhdHRlciB3aWxsIG5vdCBiZSBjYWxsZWQgdW5sZXNzICJfX2dldGF0dHJpYnV0ZV9fKCkiIGVpdGhlclxuICAgY2FsbHMgaXQgZXhwbGljaXRseSBvciByYWlzZXMgYW4gIkF0dHJpYnV0ZUVycm9yIi4gVGhpcyBtZXRob2RcbiAgIHNob3VsZCByZXR1cm4gdGhlIChjb21wdXRlZCkgYXR0cmlidXRlIHZhbHVlIG9yIHJhaXNlIGFuXG4gICAiQXR0cmlidXRlRXJyb3IiIGV4Y2VwdGlvbi4gSW4gb3JkZXIgdG8gYXZvaWQgaW5maW5pdGUgcmVjdXJzaW9uIGluXG4gICB0aGlzIG1ldGhvZCwgaXRzIGltcGxlbWVudGF0aW9uIHNob3VsZCBhbHdheXMgY2FsbCB0aGUgYmFzZSBjbGFzc1xuICAgbWV0aG9kIHdpdGggdGhlIHNhbWUgbmFtZSB0byBhY2Nlc3MgYW55IGF0dHJpYnV0ZXMgaXQgbmVlZHMsIGZvclxuICAgZXhhbXBsZSwgIm9iamVjdC5fX2dldGF0dHJpYnV0ZV9fKHNlbGYsIG5hbWUpIi5cblxuICAgTm90ZTogVGhpcyBtZXRob2QgbWF5IHN0aWxsIGJlIGJ5cGFzc2VkIHdoZW4gbG9va2luZyB1cCBzcGVjaWFsXG4gICAgIG1ldGhvZHMgYXMgdGhlIHJlc3VsdCBvZiBpbXBsaWNpdCBpbnZvY2F0aW9uIHZpYSBsYW5ndWFnZSBzeW50YXhcbiAgICAgb3IgYnVpbHQtaW4gZnVuY3Rpb25zLiBTZWUgKlNwZWNpYWwgbWV0aG9kIGxvb2t1cCouXG5cbm9iamVjdC5fX3NldGF0dHJfXyhzZWxmLCBuYW1lLCB2YWx1ZSlcblxuICAgQ2FsbGVkIHdoZW4gYW4gYXR0cmlidXRlIGFzc2lnbm1lbnQgaXMgYXR0ZW1wdGVkLiAgVGhpcyBpcyBjYWxsZWRcbiAgIGluc3RlYWQgb2YgdGhlIG5vcm1hbCBtZWNoYW5pc20gKGkuZS4gc3RvcmUgdGhlIHZhbHVlIGluIHRoZVxuICAgaW5zdGFuY2UgZGljdGlvbmFyeSkuICpuYW1lKiBpcyB0aGUgYXR0cmlidXRlIG5hbWUsICp2YWx1ZSogaXMgdGhlXG4gICB2YWx1ZSB0byBiZSBhc3NpZ25lZCB0byBpdC5cblxuICAgSWYgIl9fc2V0YXR0cl9fKCkiIHdhbnRzIHRvIGFzc2lnbiB0byBhbiBpbnN0YW5jZSBhdHRyaWJ1dGUsIGl0XG4gICBzaG91bGQgY2FsbCB0aGUgYmFzZSBjbGFzcyBtZXRob2Qgd2l0aCB0aGUgc2FtZSBuYW1lLCBmb3IgZXhhbXBsZSxcbiAgICJvYmplY3QuX19zZXRhdHRyX18oc2VsZiwgbmFtZSwgdmFsdWUpIi5cblxub2JqZWN0Ll9fZGVsYXR0cl9fKHNlbGYsIG5hbWUpXG5cbiAgIExpa2UgIl9fc2V0YXR0cl9fKCkiIGJ1dCBmb3IgYXR0cmlidXRlIGRlbGV0aW9uIGluc3RlYWQgb2ZcbiAgIGFzc2lnbm1lbnQuICBUaGlzIHNob3VsZCBvbmx5IGJlIGltcGxlbWVudGVkIGlmICJkZWwgb2JqLm5hbWUiIGlzXG4gICBtZWFuaW5nZnVsIGZvciB0aGUgb2JqZWN0LlxuXG5vYmplY3QuX19kaXJfXyhzZWxmKVxuXG4gICBDYWxsZWQgd2hlbiAiZGlyKCkiIGlzIGNhbGxlZCBvbiB0aGUgb2JqZWN0LiBBIHNlcXVlbmNlIG11c3QgYmVcbiAgIHJldHVybmVkLiAiZGlyKCkiIGNvbnZlcnRzIHRoZSByZXR1cm5lZCBzZXF1ZW5jZSB0byBhIGxpc3QgYW5kXG4gICBzb3J0cyBpdC5cblxuXG5JbXBsZW1lbnRpbmcgRGVzY3JpcHRvcnNcbj09PT09PT09PT09PT09PT09PT09PT09PVxuXG5UaGUgZm9sbG93aW5nIG1ldGhvZHMgb25seSBhcHBseSB3aGVuIGFuIGluc3RhbmNlIG9mIHRoZSBjbGFzc1xuY29udGFpbmluZyB0aGUgbWV0aG9kIChhIHNvLWNhbGxlZCAqZGVzY3JpcHRvciogY2xhc3MpIGFwcGVhcnMgaW4gYW5cbipvd25lciogY2xhc3MgKHRoZSBkZXNjcmlwdG9yIG11c3QgYmUgaW4gZWl0aGVyIHRoZSBvd25lclwncyBjbGFzc1xuZGljdGlvbmFyeSBvciBpbiB0aGUgY2xhc3MgZGljdGlvbmFyeSBmb3Igb25lIG9mIGl0cyBwYXJlbnRzKS4gIEluIHRoZVxuZXhhbXBsZXMgYmVsb3csICJ0aGUgYXR0cmlidXRlIiByZWZlcnMgdG8gdGhlIGF0dHJpYnV0ZSB3aG9zZSBuYW1lIGlzXG50aGUga2V5IG9mIHRoZSBwcm9wZXJ0eSBpbiB0aGUgb3duZXIgY2xhc3NcJyAiX19kaWN0X18iLlxuXG5vYmplY3QuX19nZXRfXyhzZWxmLCBpbnN0YW5jZSwgb3duZXIpXG5cbiAgIENhbGxlZCB0byBnZXQgdGhlIGF0dHJpYnV0ZSBvZiB0aGUgb3duZXIgY2xhc3MgKGNsYXNzIGF0dHJpYnV0ZVxuICAgYWNjZXNzKSBvciBvZiBhbiBpbnN0YW5jZSBvZiB0aGF0IGNsYXNzIChpbnN0YW5jZSBhdHRyaWJ1dGVcbiAgIGFjY2VzcykuICpvd25lciogaXMgYWx3YXlzIHRoZSBvd25lciBjbGFzcywgd2hpbGUgKmluc3RhbmNlKiBpcyB0aGVcbiAgIGluc3RhbmNlIHRoYXQgdGhlIGF0dHJpYnV0ZSB3YXMgYWNjZXNzZWQgdGhyb3VnaCwgb3IgIk5vbmUiIHdoZW5cbiAgIHRoZSBhdHRyaWJ1dGUgaXMgYWNjZXNzZWQgdGhyb3VnaCB0aGUgKm93bmVyKi4gIFRoaXMgbWV0aG9kIHNob3VsZFxuICAgcmV0dXJuIHRoZSAoY29tcHV0ZWQpIGF0dHJpYnV0ZSB2YWx1ZSBvciByYWlzZSBhbiAiQXR0cmlidXRlRXJyb3IiXG4gICBleGNlcHRpb24uXG5cbm9iamVjdC5fX3NldF9fKHNlbGYsIGluc3RhbmNlLCB2YWx1ZSlcblxuICAgQ2FsbGVkIHRvIHNldCB0aGUgYXR0cmlidXRlIG9uIGFuIGluc3RhbmNlICppbnN0YW5jZSogb2YgdGhlIG93bmVyXG4gICBjbGFzcyB0byBhIG5ldyB2YWx1ZSwgKnZhbHVlKi5cblxub2JqZWN0Ll9fZGVsZXRlX18oc2VsZiwgaW5zdGFuY2UpXG5cbiAgIENhbGxlZCB0byBkZWxldGUgdGhlIGF0dHJpYnV0ZSBvbiBhbiBpbnN0YW5jZSAqaW5zdGFuY2UqIG9mIHRoZVxuICAgb3duZXIgY2xhc3MuXG5cblxuSW52b2tpbmcgRGVzY3JpcHRvcnNcbj09PT09PT09PT09PT09PT09PT09XG5cbkluIGdlbmVyYWwsIGEgZGVzY3JpcHRvciBpcyBhbiBvYmplY3QgYXR0cmlidXRlIHdpdGggImJpbmRpbmdcbmJlaGF2aW9yIiwgb25lIHdob3NlIGF0dHJpYnV0ZSBhY2Nlc3MgaGFzIGJlZW4gb3ZlcnJpZGRlbiBieSBtZXRob2RzXG5pbiB0aGUgZGVzY3JpcHRvciBwcm90b2NvbDogICJfX2dldF9fKCkiLCAiX19zZXRfXygpIiwgYW5kXG4iX19kZWxldGVfXygpIi4gSWYgYW55IG9mIHRob3NlIG1ldGhvZHMgYXJlIGRlZmluZWQgZm9yIGFuIG9iamVjdCwgaXRcbmlzIHNhaWQgdG8gYmUgYSBkZXNjcmlwdG9yLlxuXG5UaGUgZGVmYXVsdCBiZWhhdmlvciBmb3IgYXR0cmlidXRlIGFjY2VzcyBpcyB0byBnZXQsIHNldCwgb3IgZGVsZXRlXG50aGUgYXR0cmlidXRlIGZyb20gYW4gb2JqZWN0XCdzIGRpY3Rpb25hcnkuIEZvciBpbnN0YW5jZSwgImEueCIgaGFzIGFcbmxvb2t1cCBjaGFpbiBzdGFydGluZyB3aXRoICJhLl9fZGljdF9fW1wneFwnXSIsIHRoZW5cbiJ0eXBlKGEpLl9fZGljdF9fW1wneFwnXSIsIGFuZCBjb250aW51aW5nIHRocm91Z2ggdGhlIGJhc2UgY2xhc3NlcyBvZlxuInR5cGUoYSkiIGV4Y2x1ZGluZyBtZXRhY2xhc3Nlcy5cblxuSG93ZXZlciwgaWYgdGhlIGxvb2tlZC11cCB2YWx1ZSBpcyBhbiBvYmplY3QgZGVmaW5pbmcgb25lIG9mIHRoZVxuZGVzY3JpcHRvciBtZXRob2RzLCB0aGVuIFB5dGhvbiBtYXkgb3ZlcnJpZGUgdGhlIGRlZmF1bHQgYmVoYXZpb3IgYW5kXG5pbnZva2UgdGhlIGRlc2NyaXB0b3IgbWV0aG9kIGluc3RlYWQuICBXaGVyZSB0aGlzIG9jY3VycyBpbiB0aGVcbnByZWNlZGVuY2UgY2hhaW4gZGVwZW5kcyBvbiB3aGljaCBkZXNjcmlwdG9yIG1ldGhvZHMgd2VyZSBkZWZpbmVkIGFuZFxuaG93IHRoZXkgd2VyZSBjYWxsZWQuXG5cblRoZSBzdGFydGluZyBwb2ludCBmb3IgZGVzY3JpcHRvciBpbnZvY2F0aW9uIGlzIGEgYmluZGluZywgImEueCIuIEhvd1xudGhlIGFyZ3VtZW50cyBhcmUgYXNzZW1ibGVkIGRlcGVuZHMgb24gImEiOlxuXG5EaXJlY3QgQ2FsbFxuICAgVGhlIHNpbXBsZXN0IGFuZCBsZWFzdCBjb21tb24gY2FsbCBpcyB3aGVuIHVzZXIgY29kZSBkaXJlY3RseVxuICAgaW52b2tlcyBhIGRlc2NyaXB0b3IgbWV0aG9kOiAgICAieC5fX2dldF9fKGEpIi5cblxuSW5zdGFuY2UgQmluZGluZ1xuICAgSWYgYmluZGluZyB0byBhbiBvYmplY3QgaW5zdGFuY2UsICJhLngiIGlzIHRyYW5zZm9ybWVkIGludG8gdGhlXG4gICBjYWxsOiAidHlwZShhKS5fX2RpY3RfX1tcJ3hcJ10uX19nZXRfXyhhLCB0eXBlKGEpKSIuXG5cbkNsYXNzIEJpbmRpbmdcbiAgIElmIGJpbmRpbmcgdG8gYSBjbGFzcywgIkEueCIgaXMgdHJhbnNmb3JtZWQgaW50byB0aGUgY2FsbDpcbiAgICJBLl9fZGljdF9fW1wneFwnXS5fX2dldF9fKE5vbmUsIEEpIi5cblxuU3VwZXIgQmluZGluZ1xuICAgSWYgImEiIGlzIGFuIGluc3RhbmNlIG9mICJzdXBlciIsIHRoZW4gdGhlIGJpbmRpbmcgInN1cGVyKEIsXG4gICBvYmopLm0oKSIgc2VhcmNoZXMgIm9iai5fX2NsYXNzX18uX19tcm9fXyIgZm9yIHRoZSBiYXNlIGNsYXNzICJBIlxuICAgaW1tZWRpYXRlbHkgcHJlY2VkaW5nICJCIiBhbmQgdGhlbiBpbnZva2VzIHRoZSBkZXNjcmlwdG9yIHdpdGggdGhlXG4gICBjYWxsOiAiQS5fX2RpY3RfX1tcJ21cJ10uX19nZXRfXyhvYmosIG9iai5fX2NsYXNzX18pIi5cblxuRm9yIGluc3RhbmNlIGJpbmRpbmdzLCB0aGUgcHJlY2VkZW5jZSBvZiBkZXNjcmlwdG9yIGludm9jYXRpb24gZGVwZW5kc1xub24gdGhlIHdoaWNoIGRlc2NyaXB0b3IgbWV0aG9kcyBhcmUgZGVmaW5lZC4gIEEgZGVzY3JpcHRvciBjYW4gZGVmaW5lXG5hbnkgY29tYmluYXRpb24gb2YgIl9fZ2V0X18oKSIsICJfX3NldF9fKCkiIGFuZCAiX19kZWxldGVfXygpIi4gIElmIGl0XG5kb2VzIG5vdCBkZWZpbmUgIl9fZ2V0X18oKSIsIHRoZW4gYWNjZXNzaW5nIHRoZSBhdHRyaWJ1dGUgd2lsbCByZXR1cm5cbnRoZSBkZXNjcmlwdG9yIG9iamVjdCBpdHNlbGYgdW5sZXNzIHRoZXJlIGlzIGEgdmFsdWUgaW4gdGhlIG9iamVjdFwnc1xuaW5zdGFuY2UgZGljdGlvbmFyeS4gIElmIHRoZSBkZXNjcmlwdG9yIGRlZmluZXMgIl9fc2V0X18oKSIgYW5kL29yXG4iX19kZWxldGVfXygpIiwgaXQgaXMgYSBkYXRhIGRlc2NyaXB0b3I7IGlmIGl0IGRlZmluZXMgbmVpdGhlciwgaXQgaXNcbmEgbm9uLWRhdGEgZGVzY3JpcHRvci4gIE5vcm1hbGx5LCBkYXRhIGRlc2NyaXB0b3JzIGRlZmluZSBib3RoXG4iX19nZXRfXygpIiBhbmQgIl9fc2V0X18oKSIsIHdoaWxlIG5vbi1kYXRhIGRlc2NyaXB0b3JzIGhhdmUganVzdCB0aGVcbiJfX2dldF9fKCkiIG1ldGhvZC4gIERhdGEgZGVzY3JpcHRvcnMgd2l0aCAiX19zZXRfXygpIiBhbmQgIl9fZ2V0X18oKSJcbmRlZmluZWQgYWx3YXlzIG92ZXJyaWRlIGEgcmVkZWZpbml0aW9uIGluIGFuIGluc3RhbmNlIGRpY3Rpb25hcnkuICBJblxuY29udHJhc3QsIG5vbi1kYXRhIGRlc2NyaXB0b3JzIGNhbiBiZSBvdmVycmlkZGVuIGJ5IGluc3RhbmNlcy5cblxuUHl0aG9uIG1ldGhvZHMgKGluY2x1ZGluZyAic3RhdGljbWV0aG9kKCkiIGFuZCAiY2xhc3NtZXRob2QoKSIpIGFyZVxuaW1wbGVtZW50ZWQgYXMgbm9uLWRhdGEgZGVzY3JpcHRvcnMuICBBY2NvcmRpbmdseSwgaW5zdGFuY2VzIGNhblxucmVkZWZpbmUgYW5kIG92ZXJyaWRlIG1ldGhvZHMuICBUaGlzIGFsbG93cyBpbmRpdmlkdWFsIGluc3RhbmNlcyB0b1xuYWNxdWlyZSBiZWhhdmlvcnMgdGhhdCBkaWZmZXIgZnJvbSBvdGhlciBpbnN0YW5jZXMgb2YgdGhlIHNhbWUgY2xhc3MuXG5cblRoZSAicHJvcGVydHkoKSIgZnVuY3Rpb24gaXMgaW1wbGVtZW50ZWQgYXMgYSBkYXRhIGRlc2NyaXB0b3IuXG5BY2NvcmRpbmdseSwgaW5zdGFuY2VzIGNhbm5vdCBvdmVycmlkZSB0aGUgYmVoYXZpb3Igb2YgYSBwcm9wZXJ0eS5cblxuXG5fX3Nsb3RzX19cbj09PT09PT09PVxuXG5CeSBkZWZhdWx0LCBpbnN0YW5jZXMgb2YgY2xhc3NlcyBoYXZlIGEgZGljdGlvbmFyeSBmb3IgYXR0cmlidXRlXG5zdG9yYWdlLiAgVGhpcyB3YXN0ZXMgc3BhY2UgZm9yIG9iamVjdHMgaGF2aW5nIHZlcnkgZmV3IGluc3RhbmNlXG52YXJpYWJsZXMuICBUaGUgc3BhY2UgY29uc3VtcHRpb24gY2FuIGJlY29tZSBhY3V0ZSB3aGVuIGNyZWF0aW5nIGxhcmdlXG5udW1iZXJzIG9mIGluc3RhbmNlcy5cblxuVGhlIGRlZmF1bHQgY2FuIGJlIG92ZXJyaWRkZW4gYnkgZGVmaW5pbmcgKl9fc2xvdHNfXyogaW4gYSBjbGFzc1xuZGVmaW5pdGlvbi4gVGhlICpfX3Nsb3RzX18qIGRlY2xhcmF0aW9uIHRha2VzIGEgc2VxdWVuY2Ugb2YgaW5zdGFuY2VcbnZhcmlhYmxlcyBhbmQgcmVzZXJ2ZXMganVzdCBlbm91Z2ggc3BhY2UgaW4gZWFjaCBpbnN0YW5jZSB0byBob2xkIGFcbnZhbHVlIGZvciBlYWNoIHZhcmlhYmxlLiAgU3BhY2UgaXMgc2F2ZWQgYmVjYXVzZSAqX19kaWN0X18qIGlzIG5vdFxuY3JlYXRlZCBmb3IgZWFjaCBpbnN0YW5jZS5cblxub2JqZWN0Ll9fc2xvdHNfX1xuXG4gICBUaGlzIGNsYXNzIHZhcmlhYmxlIGNhbiBiZSBhc3NpZ25lZCBhIHN0cmluZywgaXRlcmFibGUsIG9yIHNlcXVlbmNlXG4gICBvZiBzdHJpbmdzIHdpdGggdmFyaWFibGUgbmFtZXMgdXNlZCBieSBpbnN0YW5jZXMuICBJZiBkZWZpbmVkIGluIGFcbiAgIGNsYXNzLCAqX19zbG90c19fKiByZXNlcnZlcyBzcGFjZSBmb3IgdGhlIGRlY2xhcmVkIHZhcmlhYmxlcyBhbmRcbiAgIHByZXZlbnRzIHRoZSBhdXRvbWF0aWMgY3JlYXRpb24gb2YgKl9fZGljdF9fKiBhbmQgKl9fd2Vha3JlZl9fKiBmb3JcbiAgIGVhY2ggaW5zdGFuY2UuXG5cblxuTm90ZXMgb24gdXNpbmcgKl9fc2xvdHNfXypcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiogV2hlbiBpbmhlcml0aW5nIGZyb20gYSBjbGFzcyB3aXRob3V0ICpfX3Nsb3RzX18qLCB0aGUgKl9fZGljdF9fKlxuICBhdHRyaWJ1dGUgb2YgdGhhdCBjbGFzcyB3aWxsIGFsd2F5cyBiZSBhY2Nlc3NpYmxlLCBzbyBhICpfX3Nsb3RzX18qXG4gIGRlZmluaXRpb24gaW4gdGhlIHN1YmNsYXNzIGlzIG1lYW5pbmdsZXNzLlxuXG4qIFdpdGhvdXQgYSAqX19kaWN0X18qIHZhcmlhYmxlLCBpbnN0YW5jZXMgY2Fubm90IGJlIGFzc2lnbmVkIG5ld1xuICB2YXJpYWJsZXMgbm90IGxpc3RlZCBpbiB0aGUgKl9fc2xvdHNfXyogZGVmaW5pdGlvbi4gIEF0dGVtcHRzIHRvXG4gIGFzc2lnbiB0byBhbiB1bmxpc3RlZCB2YXJpYWJsZSBuYW1lIHJhaXNlcyAiQXR0cmlidXRlRXJyb3IiLiBJZlxuICBkeW5hbWljIGFzc2lnbm1lbnQgb2YgbmV3IHZhcmlhYmxlcyBpcyBkZXNpcmVkLCB0aGVuIGFkZFxuICAiXCdfX2RpY3RfX1wnIiB0byB0aGUgc2VxdWVuY2Ugb2Ygc3RyaW5ncyBpbiB0aGUgKl9fc2xvdHNfXypcbiAgZGVjbGFyYXRpb24uXG5cbiogV2l0aG91dCBhICpfX3dlYWtyZWZfXyogdmFyaWFibGUgZm9yIGVhY2ggaW5zdGFuY2UsIGNsYXNzZXNcbiAgZGVmaW5pbmcgKl9fc2xvdHNfXyogZG8gbm90IHN1cHBvcnQgd2VhayByZWZlcmVuY2VzIHRvIGl0c1xuICBpbnN0YW5jZXMuIElmIHdlYWsgcmVmZXJlbmNlIHN1cHBvcnQgaXMgbmVlZGVkLCB0aGVuIGFkZFxuICAiXCdfX3dlYWtyZWZfX1wnIiB0byB0aGUgc2VxdWVuY2Ugb2Ygc3RyaW5ncyBpbiB0aGUgKl9fc2xvdHNfXypcbiAgZGVjbGFyYXRpb24uXG5cbiogKl9fc2xvdHNfXyogYXJlIGltcGxlbWVudGVkIGF0IHRoZSBjbGFzcyBsZXZlbCBieSBjcmVhdGluZ1xuICBkZXNjcmlwdG9ycyAoKkltcGxlbWVudGluZyBEZXNjcmlwdG9ycyopIGZvciBlYWNoIHZhcmlhYmxlIG5hbWUuICBBc1xuICBhIHJlc3VsdCwgY2xhc3MgYXR0cmlidXRlcyBjYW5ub3QgYmUgdXNlZCB0byBzZXQgZGVmYXVsdCB2YWx1ZXMgZm9yXG4gIGluc3RhbmNlIHZhcmlhYmxlcyBkZWZpbmVkIGJ5ICpfX3Nsb3RzX18qOyBvdGhlcndpc2UsIHRoZSBjbGFzc1xuICBhdHRyaWJ1dGUgd291bGQgb3ZlcndyaXRlIHRoZSBkZXNjcmlwdG9yIGFzc2lnbm1lbnQuXG5cbiogVGhlIGFjdGlvbiBvZiBhICpfX3Nsb3RzX18qIGRlY2xhcmF0aW9uIGlzIGxpbWl0ZWQgdG8gdGhlIGNsYXNzXG4gIHdoZXJlIGl0IGlzIGRlZmluZWQuICBBcyBhIHJlc3VsdCwgc3ViY2xhc3NlcyB3aWxsIGhhdmUgYSAqX19kaWN0X18qXG4gIHVubGVzcyB0aGV5IGFsc28gZGVmaW5lICpfX3Nsb3RzX18qICh3aGljaCBtdXN0IG9ubHkgY29udGFpbiBuYW1lc1xuICBvZiBhbnkgKmFkZGl0aW9uYWwqIHNsb3RzKS5cblxuKiBJZiBhIGNsYXNzIGRlZmluZXMgYSBzbG90IGFsc28gZGVmaW5lZCBpbiBhIGJhc2UgY2xhc3MsIHRoZVxuICBpbnN0YW5jZSB2YXJpYWJsZSBkZWZpbmVkIGJ5IHRoZSBiYXNlIGNsYXNzIHNsb3QgaXMgaW5hY2Nlc3NpYmxlXG4gIChleGNlcHQgYnkgcmV0cmlldmluZyBpdHMgZGVzY3JpcHRvciBkaXJlY3RseSBmcm9tIHRoZSBiYXNlIGNsYXNzKS5cbiAgVGhpcyByZW5kZXJzIHRoZSBtZWFuaW5nIG9mIHRoZSBwcm9ncmFtIHVuZGVmaW5lZC4gIEluIHRoZSBmdXR1cmUsIGFcbiAgY2hlY2sgbWF5IGJlIGFkZGVkIHRvIHByZXZlbnQgdGhpcy5cblxuKiBOb25lbXB0eSAqX19zbG90c19fKiBkb2VzIG5vdCB3b3JrIGZvciBjbGFzc2VzIGRlcml2ZWQgZnJvbVxuICAidmFyaWFibGUtbGVuZ3RoIiBidWlsdC1pbiB0eXBlcyBzdWNoIGFzICJpbnQiLCAiYnl0ZXMiIGFuZCAidHVwbGUiLlxuXG4qIEFueSBub24tc3RyaW5nIGl0ZXJhYmxlIG1heSBiZSBhc3NpZ25lZCB0byAqX19zbG90c19fKi4gTWFwcGluZ3NcbiAgbWF5IGFsc28gYmUgdXNlZDsgaG93ZXZlciwgaW4gdGhlIGZ1dHVyZSwgc3BlY2lhbCBtZWFuaW5nIG1heSBiZVxuICBhc3NpZ25lZCB0byB0aGUgdmFsdWVzIGNvcnJlc3BvbmRpbmcgdG8gZWFjaCBrZXkuXG5cbiogKl9fY2xhc3NfXyogYXNzaWdubWVudCB3b3JrcyBvbmx5IGlmIGJvdGggY2xhc3NlcyBoYXZlIHRoZSBzYW1lXG4gICpfX3Nsb3RzX18qLlxuJywKLSAnYXR0cmlidXRlLXJlZmVyZW5jZXMnOiAnXG5BdHRyaWJ1dGUgcmVmZXJlbmNlc1xuKioqKioqKioqKioqKioqKioqKipcblxuQW4gYXR0cmlidXRlIHJlZmVyZW5jZSBpcyBhIHByaW1hcnkgZm9sbG93ZWQgYnkgYSBwZXJpb2QgYW5kIGEgbmFtZTpcblxuICAgYXR0cmlidXRlcmVmIDo6PSBwcmltYXJ5ICIuIiBpZGVudGlmaWVyXG5cblRoZSBwcmltYXJ5IG11c3QgZXZhbHVhdGUgdG8gYW4gb2JqZWN0IG9mIGEgdHlwZSB0aGF0IHN1cHBvcnRzXG5hdHRyaWJ1dGUgcmVmZXJlbmNlcywgd2hpY2ggbW9zdCBvYmplY3RzIGRvLiAgVGhpcyBvYmplY3QgaXMgdGhlblxuYXNrZWQgdG8gcHJvZHVjZSB0aGUgYXR0cmlidXRlIHdob3NlIG5hbWUgaXMgdGhlIGlkZW50aWZpZXIgKHdoaWNoIGNhblxuYmUgY3VzdG9taXplZCBieSBvdmVycmlkaW5nIHRoZSAiX19nZXRhdHRyX18oKSIgbWV0aG9kKS4gIElmIHRoaXNcbmF0dHJpYnV0ZSBpcyBub3QgYXZhaWxhYmxlLCB0aGUgZXhjZXB0aW9uICJBdHRyaWJ1dGVFcnJvciIgaXMgcmFpc2VkLlxuT3RoZXJ3aXNlLCB0aGUgdHlwZSBhbmQgdmFsdWUgb2YgdGhlIG9iamVjdCBwcm9kdWNlZCBpcyBkZXRlcm1pbmVkIGJ5XG50aGUgb2JqZWN0LiAgTXVsdGlwbGUgZXZhbHVhdGlvbnMgb2YgdGhlIHNhbWUgYXR0cmlidXRlIHJlZmVyZW5jZSBtYXlcbnlpZWxkIGRpZmZlcmVudCBvYmplY3RzLlxuJywKLSAnYXVnYXNzaWduJzogJ1xuQXVnbWVudGVkIGFzc2lnbm1lbnQgc3RhdGVtZW50c1xuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG5BdWdtZW50ZWQgYXNzaWdubWVudCBpcyB0aGUgY29tYmluYXRpb24sIGluIGEgc2luZ2xlIHN0YXRlbWVudCwgb2YgYVxuYmluYXJ5IG9wZXJhdGlvbiBhbmQgYW4gYXNzaWdubWVudCBzdGF0ZW1lbnQ6XG5cbiAgIGF1Z21lbnRlZF9hc3NpZ25tZW50X3N0bXQgOjo9IGF1Z3RhcmdldCBhdWdvcCAoZXhwcmVzc2lvbl9saXN0IHwgeWllbGRfZXhwcmVzc2lvbilcbiAgIGF1Z3RhcmdldCAgICAgICAgICAgICAgICAgOjo9IGlkZW50aWZpZXIgfCBhdHRyaWJ1dGVyZWYgfCBzdWJzY3JpcHRpb24gfCBzbGljaW5nXG4gICBhdWdvcCAgICAgICAgICAgICAgICAgICAgIDo6PSAiKz0iIHwgIi09IiB8ICIqPSIgfCAiLz0iIHwgIi8vPSIgfCAiJT0iIHwgIioqPSJcbiAgICAgICAgICAgICB8ICI+Pj0iIHwgIjw8PSIgfCAiJj0iIHwgIl49IiB8ICJ8PSJcblxuKFNlZSBzZWN0aW9uICpQcmltYXJpZXMqIGZvciB0aGUgc3ludGF4IGRlZmluaXRpb25zIGZvciB0aGUgbGFzdCB0aHJlZVxuc3ltYm9scy4pXG5cbkFuIGF1Z21lbnRlZCBhc3NpZ25tZW50IGV2YWx1YXRlcyB0aGUgdGFyZ2V0ICh3aGljaCwgdW5saWtlIG5vcm1hbFxuYXNzaWdubWVudCBzdGF0ZW1lbnRzLCBjYW5ub3QgYmUgYW4gdW5wYWNraW5nKSBhbmQgdGhlIGV4cHJlc3Npb25cbmxpc3QsIHBlcmZvcm1zIHRoZSBiaW5hcnkgb3BlcmF0aW9uIHNwZWNpZmljIHRvIHRoZSB0eXBlIG9mIGFzc2lnbm1lbnRcbm9uIHRoZSB0d28gb3BlcmFuZHMsIGFuZCBhc3NpZ25zIHRoZSByZXN1bHQgdG8gdGhlIG9yaWdpbmFsIHRhcmdldC5cblRoZSB0YXJnZXQgaXMgb25seSBldmFsdWF0ZWQgb25jZS5cblxuQW4gYXVnbWVudGVkIGFzc2lnbm1lbnQgZXhwcmVzc2lvbiBsaWtlICJ4ICs9IDEiIGNhbiBiZSByZXdyaXR0ZW4gYXNcbiJ4ID0geCArIDEiIHRvIGFjaGlldmUgYSBzaW1pbGFyLCBidXQgbm90IGV4YWN0bHkgZXF1YWwgZWZmZWN0LiBJbiB0aGVcbmF1Z21lbnRlZCB2ZXJzaW9uLCAieCIgaXMgb25seSBldmFsdWF0ZWQgb25jZS4gQWxzbywgd2hlbiBwb3NzaWJsZSxcbnRoZSBhY3R1YWwgb3BlcmF0aW9uIGlzIHBlcmZvcm1lZCAqaW4tcGxhY2UqLCBtZWFuaW5nIHRoYXQgcmF0aGVyIHRoYW5cbmNyZWF0aW5nIGEgbmV3IG9iamVjdCBhbmQgYXNzaWduaW5nIHRoYXQgdG8gdGhlIHRhcmdldCwgdGhlIG9sZCBvYmplY3RcbmlzIG1vZGlmaWVkIGluc3RlYWQuXG5cbldpdGggdGhlIGV4Y2VwdGlvbiBvZiBhc3NpZ25pbmcgdG8gdHVwbGVzIGFuZCBtdWx0aXBsZSB0YXJnZXRzIGluIGFcbnNpbmdsZSBzdGF0ZW1lbnQsIHRoZSBhc3NpZ25tZW50IGRvbmUgYnkgYXVnbWVudGVkIGFzc2lnbm1lbnRcbnN0YXRlbWVudHMgaXMgaGFuZGxlZCB0aGUgc2FtZSB3YXkgYXMgbm9ybWFsIGFzc2lnbm1lbnRzLiBTaW1pbGFybHksXG53aXRoIHRoZSBleGNlcHRpb24gb2YgdGhlIHBvc3NpYmxlICppbi1wbGFjZSogYmVoYXZpb3IsIHRoZSBiaW5hcnlcbm9wZXJhdGlvbiBwZXJmb3JtZWQgYnkgYXVnbWVudGVkIGFzc2lnbm1lbnQgaXMgdGhlIHNhbWUgYXMgdGhlIG5vcm1hbFxuYmluYXJ5IG9wZXJhdGlvbnMuXG5cbkZvciB0YXJnZXRzIHdoaWNoIGFyZSBhdHRyaWJ1dGUgcmVmZXJlbmNlcywgdGhlIHNhbWUgKmNhdmVhdCBhYm91dFxuY2xhc3MgYW5kIGluc3RhbmNlIGF0dHJpYnV0ZXMqIGFwcGxpZXMgYXMgZm9yIHJlZ3VsYXIgYXNzaWdubWVudHMuXG4nLAotICdiaW5hcnknOiAnXG5CaW5hcnkgYXJpdGhtZXRpYyBvcGVyYXRpb25zXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cblRoZSBiaW5hcnkgYXJpdGhtZXRpYyBvcGVyYXRpb25zIGhhdmUgdGhlIGNvbnZlbnRpb25hbCBwcmlvcml0eVxubGV2ZWxzLiAgTm90ZSB0aGF0IHNvbWUgb2YgdGhlc2Ugb3BlcmF0aW9ucyBhbHNvIGFwcGx5IHRvIGNlcnRhaW4gbm9uLVxubnVtZXJpYyB0eXBlcy4gIEFwYXJ0IGZyb20gdGhlIHBvd2VyIG9wZXJhdG9yLCB0aGVyZSBhcmUgb25seSB0d29cbmxldmVscywgb25lIGZvciBtdWx0aXBsaWNhdGl2ZSBvcGVyYXRvcnMgYW5kIG9uZSBmb3IgYWRkaXRpdmVcbm9wZXJhdG9yczpcblxuICAgbV9leHByIDo6PSB1X2V4cHIgfCBtX2V4cHIgIioiIHVfZXhwciB8IG1fZXhwciAiLy8iIHVfZXhwciB8IG1fZXhwciAiLyIgdV9leHByXG4gICAgICAgICAgICAgIHwgbV9leHByICIlIiB1X2V4cHJcbiAgIGFfZXhwciA6Oj0gbV9leHByIHwgYV9leHByICIrIiBtX2V4cHIgfCBhX2V4cHIgIi0iIG1fZXhwclxuXG5UaGUgIioiIChtdWx0aXBsaWNhdGlvbikgb3BlcmF0b3IgeWllbGRzIHRoZSBwcm9kdWN0IG9mIGl0cyBhcmd1bWVudHMuXG5UaGUgYXJndW1lbnRzIG11c3QgZWl0aGVyIGJvdGggYmUgbnVtYmVycywgb3Igb25lIGFyZ3VtZW50IG11c3QgYmUgYW5cbmludGVnZXIgYW5kIHRoZSBvdGhlciBtdXN0IGJlIGEgc2VxdWVuY2UuIEluIHRoZSBmb3JtZXIgY2FzZSwgdGhlXG5udW1iZXJzIGFyZSBjb252ZXJ0ZWQgdG8gYSBjb21tb24gdHlwZSBhbmQgdGhlbiBtdWx0aXBsaWVkIHRvZ2V0aGVyLlxuSW4gdGhlIGxhdHRlciBjYXNlLCBzZXF1ZW5jZSByZXBldGl0aW9uIGlzIHBlcmZvcm1lZDsgYSBuZWdhdGl2ZVxucmVwZXRpdGlvbiBmYWN0b3IgeWllbGRzIGFuIGVtcHR5IHNlcXVlbmNlLlxuXG5UaGUgIi8iIChkaXZpc2lvbikgYW5kICIvLyIgKGZsb29yIGRpdmlzaW9uKSBvcGVyYXRvcnMgeWllbGQgdGhlXG5xdW90aWVudCBvZiB0aGVpciBhcmd1bWVudHMuICBUaGUgbnVtZXJpYyBhcmd1bWVudHMgYXJlIGZpcnN0XG5jb252ZXJ0ZWQgdG8gYSBjb21tb24gdHlwZS4gRGl2aXNpb24gb2YgaW50ZWdlcnMgeWllbGRzIGEgZmxvYXQsIHdoaWxlXG5mbG9vciBkaXZpc2lvbiBvZiBpbnRlZ2VycyByZXN1bHRzIGluIGFuIGludGVnZXI7IHRoZSByZXN1bHQgaXMgdGhhdFxub2YgbWF0aGVtYXRpY2FsIGRpdmlzaW9uIHdpdGggdGhlIFwnZmxvb3JcJyBmdW5jdGlvbiBhcHBsaWVkIHRvIHRoZVxucmVzdWx0LiAgRGl2aXNpb24gYnkgemVybyByYWlzZXMgdGhlICJaZXJvRGl2aXNpb25FcnJvciIgZXhjZXB0aW9uLlxuXG5UaGUgIiUiIChtb2R1bG8pIG9wZXJhdG9yIHlpZWxkcyB0aGUgcmVtYWluZGVyIGZyb20gdGhlIGRpdmlzaW9uIG9mXG50aGUgZmlyc3QgYXJndW1lbnQgYnkgdGhlIHNlY29uZC4gIFRoZSBudW1lcmljIGFyZ3VtZW50cyBhcmUgZmlyc3RcbmNvbnZlcnRlZCB0byBhIGNvbW1vbiB0eXBlLiAgQSB6ZXJvIHJpZ2h0IGFyZ3VtZW50IHJhaXNlcyB0aGVcbiJaZXJvRGl2aXNpb25FcnJvciIgZXhjZXB0aW9uLiAgVGhlIGFyZ3VtZW50cyBtYXkgYmUgZmxvYXRpbmcgcG9pbnRcbm51bWJlcnMsIGUuZy4sICIzLjE0JTAuNyIgZXF1YWxzICIwLjM0IiAoc2luY2UgIjMuMTQiIGVxdWFscyAiNCowLjcgK1xuMC4zNCIuKSAgVGhlIG1vZHVsbyBvcGVyYXRvciBhbHdheXMgeWllbGRzIGEgcmVzdWx0IHdpdGggdGhlIHNhbWUgc2lnblxuYXMgaXRzIHNlY29uZCBvcGVyYW5kIChvciB6ZXJvKTsgdGhlIGFic29sdXRlIHZhbHVlIG9mIHRoZSByZXN1bHQgaXNcbnN0cmljdGx5IHNtYWxsZXIgdGhhbiB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgdGhlIHNlY29uZCBvcGVyYW5kIFsxXS5cblxuVGhlIGZsb29yIGRpdmlzaW9uIGFuZCBtb2R1bG8gb3BlcmF0b3JzIGFyZSBjb25uZWN0ZWQgYnkgdGhlIGZvbGxvd2luZ1xuaWRlbnRpdHk6ICJ4ID09ICh4Ly95KSp5ICsgKHgleSkiLiAgRmxvb3IgZGl2aXNpb24gYW5kIG1vZHVsbyBhcmUgYWxzb1xuY29ubmVjdGVkIHdpdGggdGhlIGJ1aWx0LWluIGZ1bmN0aW9uICJkaXZtb2QoKSI6ICJkaXZtb2QoeCwgeSkgPT1cbih4Ly95LCB4JXkpIi4gWzJdLlxuXG5JbiBhZGRpdGlvbiB0byBwZXJmb3JtaW5nIHRoZSBtb2R1bG8gb3BlcmF0aW9uIG9uIG51bWJlcnMsIHRoZSAiJSJcbm9wZXJhdG9yIGlzIGFsc28gb3ZlcmxvYWRlZCBieSBzdHJpbmcgb2JqZWN0cyB0byBwZXJmb3JtIG9sZC1zdHlsZVxuc3RyaW5nIGZvcm1hdHRpbmcgKGFsc28ga25vd24gYXMgaW50ZXJwb2xhdGlvbikuICBUaGUgc3ludGF4IGZvclxuc3RyaW5nIGZvcm1hdHRpbmcgaXMgZGVzY3JpYmVkIGluIHRoZSBQeXRob24gTGlicmFyeSBSZWZlcmVuY2UsXG5zZWN0aW9uICpwcmludGYtc3R5bGUgU3RyaW5nIEZvcm1hdHRpbmcqLlxuXG5UaGUgZmxvb3IgZGl2aXNpb24gb3BlcmF0b3IsIHRoZSBtb2R1bG8gb3BlcmF0b3IsIGFuZCB0aGUgImRpdm1vZCgpIlxuZnVuY3Rpb24gYXJlIG5vdCBkZWZpbmVkIGZvciBjb21wbGV4IG51bWJlcnMuICBJbnN0ZWFkLCBjb252ZXJ0IHRvIGFcbmZsb2F0aW5nIHBvaW50IG51bWJlciB1c2luZyB0aGUgImFicygpIiBmdW5jdGlvbiBpZiBhcHByb3ByaWF0ZS5cblxuVGhlICIrIiAoYWRkaXRpb24pIG9wZXJhdG9yIHlpZWxkcyB0aGUgc3VtIG9mIGl0cyBhcmd1bWVudHMuICBUaGVcbmFyZ3VtZW50cyBtdXN0IGVpdGhlciBib3RoIGJlIG51bWJlcnMgb3IgYm90aCBzZXF1ZW5jZXMgb2YgdGhlIHNhbWVcbnR5cGUuICBJbiB0aGUgZm9ybWVyIGNhc2UsIHRoZSBudW1iZXJzIGFyZSBjb252ZXJ0ZWQgdG8gYSBjb21tb24gdHlwZVxuYW5kIHRoZW4gYWRkZWQgdG9nZXRoZXIuICBJbiB0aGUgbGF0dGVyIGNhc2UsIHRoZSBzZXF1ZW5jZXMgYXJlXG5jb25jYXRlbmF0ZWQuXG5cblRoZSAiLSIgKHN1YnRyYWN0aW9uKSBvcGVyYXRvciB5aWVsZHMgdGhlIGRpZmZlcmVuY2Ugb2YgaXRzIGFyZ3VtZW50cy5cblRoZSBudW1lcmljIGFyZ3VtZW50cyBhcmUgZmlyc3QgY29udmVydGVkIHRvIGEgY29tbW9uIHR5cGUuXG4nLAotICdiaXR3aXNlJzogJ1xuQmluYXJ5IGJpdHdpc2Ugb3BlcmF0aW9uc1xuKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG5FYWNoIG9mIHRoZSB0aHJlZSBiaXR3aXNlIG9wZXJhdGlvbnMgaGFzIGEgZGlmZmVyZW50IHByaW9yaXR5IGxldmVsOlxuXG4gICBhbmRfZXhwciA6Oj0gc2hpZnRfZXhwciB8IGFuZF9leHByICImIiBzaGlmdF9leHByXG4gICB4b3JfZXhwciA6Oj0gYW5kX2V4cHIgfCB4b3JfZXhwciAiXiIgYW5kX2V4cHJcbiAgIG9yX2V4cHIgIDo6PSB4b3JfZXhwciB8IG9yX2V4cHIgInwiIHhvcl9leHByXG5cblRoZSAiJiIgb3BlcmF0b3IgeWllbGRzIHRoZSBiaXR3aXNlIEFORCBvZiBpdHMgYXJndW1lbnRzLCB3aGljaCBtdXN0XG5iZSBpbnRlZ2Vycy5cblxuVGhlICJeIiBvcGVyYXRvciB5aWVsZHMgdGhlIGJpdHdpc2UgWE9SIChleGNsdXNpdmUgT1IpIG9mIGl0c1xuYXJndW1lbnRzLCB3aGljaCBtdXN0IGJlIGludGVnZXJzLlxuXG5UaGUgInwiIG9wZXJhdG9yIHlpZWxkcyB0aGUgYml0d2lzZSAoaW5jbHVzaXZlKSBPUiBvZiBpdHMgYXJndW1lbnRzLFxud2hpY2ggbXVzdCBiZSBpbnRlZ2Vycy5cbicsCi0gJ2JsdGluLWNvZGUtb2JqZWN0cyc6ICdcbkNvZGUgT2JqZWN0c1xuKioqKioqKioqKioqXG5cbkNvZGUgb2JqZWN0cyBhcmUgdXNlZCBieSB0aGUgaW1wbGVtZW50YXRpb24gdG8gcmVwcmVzZW50ICJwc2V1ZG8tXG5jb21waWxlZCIgZXhlY3V0YWJsZSBQeXRob24gY29kZSBzdWNoIGFzIGEgZnVuY3Rpb24gYm9keS4gVGhleSBkaWZmZXJcbmZyb20gZnVuY3Rpb24gb2JqZWN0cyBiZWNhdXNlIHRoZXkgZG9uXCd0IGNvbnRhaW4gYSByZWZlcmVuY2UgdG8gdGhlaXJcbmdsb2JhbCBleGVjdXRpb24gZW52aXJvbm1lbnQuICBDb2RlIG9iamVjdHMgYXJlIHJldHVybmVkIGJ5IHRoZSBidWlsdC1cbmluICJjb21waWxlKCkiIGZ1bmN0aW9uIGFuZCBjYW4gYmUgZXh0cmFjdGVkIGZyb20gZnVuY3Rpb24gb2JqZWN0c1xudGhyb3VnaCB0aGVpciAiX19jb2RlX18iIGF0dHJpYnV0ZS4gU2VlIGFsc28gdGhlICJjb2RlIiBtb2R1bGUuXG5cbkEgY29kZSBvYmplY3QgY2FuIGJlIGV4ZWN1dGVkIG9yIGV2YWx1YXRlZCBieSBwYXNzaW5nIGl0IChpbnN0ZWFkIG9mIGFcbnNvdXJjZSBzdHJpbmcpIHRvIHRoZSAiZXhlYygpIiBvciAiZXZhbCgpIiAgYnVpbHQtaW4gZnVuY3Rpb25zLlxuXG5TZWUgKlRoZSBzdGFuZGFyZCB0eXBlIGhpZXJhcmNoeSogZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4nLAotICdibHRpbi1lbGxpcHNpcy1vYmplY3QnOiAnXG5UaGUgRWxsaXBzaXMgT2JqZWN0XG4qKioqKioqKioqKioqKioqKioqXG5cblRoaXMgb2JqZWN0IGlzIGNvbW1vbmx5IHVzZWQgYnkgc2xpY2luZyAoc2VlICpTbGljaW5ncyopLiAgSXQgc3VwcG9ydHNcbm5vIHNwZWNpYWwgb3BlcmF0aW9ucy4gIFRoZXJlIGlzIGV4YWN0bHkgb25lIGVsbGlwc2lzIG9iamVjdCwgbmFtZWRcbiJFbGxpcHNpcyIgKGEgYnVpbHQtaW4gbmFtZSkuICAidHlwZShFbGxpcHNpcykoKSIgcHJvZHVjZXMgdGhlXG4iRWxsaXBzaXMiIHNpbmdsZXRvbi5cblxuSXQgaXMgd3JpdHRlbiBhcyAiRWxsaXBzaXMiIG9yICIuLi4iLlxuJywKLSAnYmx0aW4tbnVsbC1vYmplY3QnOiAnXG5UaGUgTnVsbCBPYmplY3RcbioqKioqKioqKioqKioqKlxuXG5UaGlzIG9iamVjdCBpcyByZXR1cm5lZCBieSBmdW5jdGlvbnMgdGhhdCBkb25cJ3QgZXhwbGljaXRseSByZXR1cm4gYVxudmFsdWUuICBJdCBzdXBwb3J0cyBubyBzcGVjaWFsIG9wZXJhdGlvbnMuICBUaGVyZSBpcyBleGFjdGx5IG9uZSBudWxsXG5vYmplY3QsIG5hbWVkICJOb25lIiAoYSBidWlsdC1pbiBuYW1lKS4gICJ0eXBlKE5vbmUpKCkiIHByb2R1Y2VzIHRoZVxuc2FtZSBzaW5nbGV0b24uXG5cbkl0IGlzIHdyaXR0ZW4gYXMgIk5vbmUiLlxuJywKLSAnYmx0aW4tdHlwZS1vYmplY3RzJzogJ1xuVHlwZSBPYmplY3RzXG4qKioqKioqKioqKipcblxuVHlwZSBvYmplY3RzIHJlcHJlc2VudCB0aGUgdmFyaW91cyBvYmplY3QgdHlwZXMuICBBbiBvYmplY3RcJ3MgdHlwZSBpc1xuYWNjZXNzZWQgYnkgdGhlIGJ1aWx0LWluIGZ1bmN0aW9uICJ0eXBlKCkiLiAgVGhlcmUgYXJlIG5vIHNwZWNpYWxcbm9wZXJhdGlvbnMgb24gdHlwZXMuICBUaGUgc3RhbmRhcmQgbW9kdWxlICJ0eXBlcyIgZGVmaW5lcyBuYW1lcyBmb3JcbmFsbCBzdGFuZGFyZCBidWlsdC1pbiB0eXBlcy5cblxuVHlwZXMgYXJlIHdyaXR0ZW4gbGlrZSB0aGlzOiAiPGNsYXNzIFwnaW50XCc+Ii5cbicsCi0gJ2Jvb2xlYW5zJzogJ1xuQm9vbGVhbiBvcGVyYXRpb25zXG4qKioqKioqKioqKioqKioqKipcblxuICAgb3JfdGVzdCAgOjo9IGFuZF90ZXN0IHwgb3JfdGVzdCAib3IiIGFuZF90ZXN0XG4gICBhbmRfdGVzdCA6Oj0gbm90X3Rlc3QgfCBhbmRfdGVzdCAiYW5kIiBub3RfdGVzdFxuICAgbm90X3Rlc3QgOjo9IGNvbXBhcmlzb24gfCAibm90IiBub3RfdGVzdFxuXG5JbiB0aGUgY29udGV4dCBvZiBCb29sZWFuIG9wZXJhdGlvbnMsIGFuZCBhbHNvIHdoZW4gZXhwcmVzc2lvbnMgYXJlXG51c2VkIGJ5IGNvbnRyb2wgZmxvdyBzdGF0ZW1lbnRzLCB0aGUgZm9sbG93aW5nIHZhbHVlcyBhcmUgaW50ZXJwcmV0ZWRcbmFzIGZhbHNlOiAiRmFsc2UiLCAiTm9uZSIsIG51bWVyaWMgemVybyBvZiBhbGwgdHlwZXMsIGFuZCBlbXB0eVxuc3RyaW5ncyBhbmQgY29udGFpbmVycyAoaW5jbHVkaW5nIHN0cmluZ3MsIHR1cGxlcywgbGlzdHMsXG5kaWN0aW9uYXJpZXMsIHNldHMgYW5kIGZyb3plbnNldHMpLiAgQWxsIG90aGVyIHZhbHVlcyBhcmUgaW50ZXJwcmV0ZWRcbmFzIHRydWUuICBVc2VyLWRlZmluZWQgb2JqZWN0cyBjYW4gY3VzdG9taXplIHRoZWlyIHRydXRoIHZhbHVlIGJ5XG5wcm92aWRpbmcgYSAiX19ib29sX18oKSIgbWV0aG9kLlxuXG5UaGUgb3BlcmF0b3IgIm5vdCIgeWllbGRzICJUcnVlIiBpZiBpdHMgYXJndW1lbnQgaXMgZmFsc2UsICJGYWxzZSJcbm90aGVyd2lzZS5cblxuVGhlIGV4cHJlc3Npb24gInggYW5kIHkiIGZpcnN0IGV2YWx1YXRlcyAqeCo7IGlmICp4KiBpcyBmYWxzZSwgaXRzXG52YWx1ZSBpcyByZXR1cm5lZDsgb3RoZXJ3aXNlLCAqeSogaXMgZXZhbHVhdGVkIGFuZCB0aGUgcmVzdWx0aW5nIHZhbHVlXG5pcyByZXR1cm5lZC5cblxuVGhlIGV4cHJlc3Npb24gInggb3IgeSIgZmlyc3QgZXZhbHVhdGVzICp4KjsgaWYgKngqIGlzIHRydWUsIGl0cyB2YWx1ZVxuaXMgcmV0dXJuZWQ7IG90aGVyd2lzZSwgKnkqIGlzIGV2YWx1YXRlZCBhbmQgdGhlIHJlc3VsdGluZyB2YWx1ZSBpc1xucmV0dXJuZWQuXG5cbihOb3RlIHRoYXQgbmVpdGhlciAiYW5kIiBub3IgIm9yIiByZXN0cmljdCB0aGUgdmFsdWUgYW5kIHR5cGUgdGhleVxucmV0dXJuIHRvICJGYWxzZSIgYW5kICJUcnVlIiwgYnV0IHJhdGhlciByZXR1cm4gdGhlIGxhc3QgZXZhbHVhdGVkXG5hcmd1bWVudC4gIFRoaXMgaXMgc29tZXRpbWVzIHVzZWZ1bCwgZS5nLiwgaWYgInMiIGlzIGEgc3RyaW5nIHRoYXRcbnNob3VsZCBiZSByZXBsYWNlZCBieSBhIGRlZmF1bHQgdmFsdWUgaWYgaXQgaXMgZW1wdHksIHRoZSBleHByZXNzaW9uXG4icyBvciBcJ2Zvb1wnIiB5aWVsZHMgdGhlIGRlc2lyZWQgdmFsdWUuICBCZWNhdXNlICJub3QiIGhhcyB0byBpbnZlbnQgYVxudmFsdWUgYW55d2F5LCBpdCBkb2VzIG5vdCBib3RoZXIgdG8gcmV0dXJuIGEgdmFsdWUgb2YgdGhlIHNhbWUgdHlwZSBhc1xuaXRzIGFyZ3VtZW50LCBzbyBlLmcuLCAibm90IFwnZm9vXCciIHlpZWxkcyAiRmFsc2UiLCBub3QgIlwnXCciLilcbicsCi0gJ2JyZWFrJzogJ1xuVGhlICJicmVhayIgc3RhdGVtZW50XG4qKioqKioqKioqKioqKioqKioqKipcblxuICAgYnJlYWtfc3RtdCA6Oj0gImJyZWFrIlxuXG4iYnJlYWsiIG1heSBvbmx5IG9jY3VyIHN5bnRhY3RpY2FsbHkgbmVzdGVkIGluIGEgImZvciIgb3IgIndoaWxlIlxubG9vcCwgYnV0IG5vdCBuZXN0ZWQgaW4gYSBmdW5jdGlvbiBvciBjbGFzcyBkZWZpbml0aW9uIHdpdGhpbiB0aGF0XG5sb29wLlxuXG5JdCB0ZXJtaW5hdGVzIHRoZSBuZWFyZXN0IGVuY2xvc2luZyBsb29wLCBza2lwcGluZyB0aGUgb3B0aW9uYWwgImVsc2UiXG5jbGF1c2UgaWYgdGhlIGxvb3AgaGFzIG9uZS5cblxuSWYgYSAiZm9yIiBsb29wIGlzIHRlcm1pbmF0ZWQgYnkgImJyZWFrIiwgdGhlIGxvb3AgY29udHJvbCB0YXJnZXRcbmtlZXBzIGl0cyBjdXJyZW50IHZhbHVlLlxuXG5XaGVuICJicmVhayIgcGFzc2VzIGNvbnRyb2wgb3V0IG9mIGEgInRyeSIgc3RhdGVtZW50IHdpdGggYSAiZmluYWxseSJcbmNsYXVzZSwgdGhhdCAiZmluYWxseSIgY2xhdXNlIGlzIGV4ZWN1dGVkIGJlZm9yZSByZWFsbHkgbGVhdmluZyB0aGVcbmxvb3AuXG4nLAotICdjYWxsYWJsZS10eXBlcyc6ICdcbkVtdWxhdGluZyBjYWxsYWJsZSBvYmplY3RzXG4qKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG5vYmplY3QuX19jYWxsX18oc2VsZlssIGFyZ3MuLi5dKVxuXG4gICBDYWxsZWQgd2hlbiB0aGUgaW5zdGFuY2UgaXMgImNhbGxlZCIgYXMgYSBmdW5jdGlvbjsgaWYgdGhpcyBtZXRob2RcbiAgIGlzIGRlZmluZWQsICJ4KGFyZzEsIGFyZzIsIC4uLikiIGlzIGEgc2hvcnRoYW5kIGZvclxuICAgInguX19jYWxsX18oYXJnMSwgYXJnMiwgLi4uKSIuXG4nLAotICdjYWxscyc6ICdcbkNhbGxzXG4qKioqKlxuXG5BIGNhbGwgY2FsbHMgYSBjYWxsYWJsZSBvYmplY3QgKGUuZy4sIGEgKmZ1bmN0aW9uKikgd2l0aCBhIHBvc3NpYmx5XG5lbXB0eSBzZXJpZXMgb2YgKmFyZ3VtZW50cyo6XG5cbiAgIGNhbGwgICAgICAgICAgICAgICAgIDo6PSBwcmltYXJ5ICIoIiBbYXJndW1lbnRfbGlzdCBbIiwiXSB8IGNvbXByZWhlbnNpb25dICIpIlxuICAgYXJndW1lbnRfbGlzdCAgICAgICAgOjo9IHBvc2l0aW9uYWxfYXJndW1lbnRzIFsiLCIga2V5d29yZF9hcmd1bWVudHNdXG4gICAgICAgICAgICAgICAgICAgICAgIFsiLCIgIioiIGV4cHJlc3Npb25dIFsiLCIga2V5d29yZF9hcmd1bWVudHNdXG4gICAgICAgICAgICAgICAgICAgICAgIFsiLCIgIioqIiBleHByZXNzaW9uXVxuICAgICAgICAgICAgICAgICAgICAgfCBrZXl3b3JkX2FyZ3VtZW50cyBbIiwiICIqIiBleHByZXNzaW9uXVxuICAgICAgICAgICAgICAgICAgICAgICBbIiwiIGtleXdvcmRfYXJndW1lbnRzXSBbIiwiICIqKiIgZXhwcmVzc2lvbl1cbiAgICAgICAgICAgICAgICAgICAgIHwgIioiIGV4cHJlc3Npb24gWyIsIiBrZXl3b3JkX2FyZ3VtZW50c10gWyIsIiAiKioiIGV4cHJlc3Npb25dXG4gICAgICAgICAgICAgICAgICAgICB8ICIqKiIgZXhwcmVzc2lvblxuICAgcG9zaXRpb25hbF9hcmd1bWVudHMgOjo9IGV4cHJlc3Npb24gKCIsIiBleHByZXNzaW9uKSpcbiAgIGtleXdvcmRfYXJndW1lbnRzICAgIDo6PSBrZXl3b3JkX2l0ZW0gKCIsIiBrZXl3b3JkX2l0ZW0pKlxuICAga2V5d29yZF9pdGVtICAgICAgICAgOjo9IGlkZW50aWZpZXIgIj0iIGV4cHJlc3Npb25cblxuQSB0cmFpbGluZyBjb21tYSBtYXkgYmUgcHJlc2VudCBhZnRlciB0aGUgcG9zaXRpb25hbCBhbmQga2V5d29yZFxuYXJndW1lbnRzIGJ1dCBkb2VzIG5vdCBhZmZlY3QgdGhlIHNlbWFudGljcy5cblxuVGhlIHByaW1hcnkgbXVzdCBldmFsdWF0ZSB0byBhIGNhbGxhYmxlIG9iamVjdCAodXNlci1kZWZpbmVkXG5mdW5jdGlvbnMsIGJ1aWx0LWluIGZ1bmN0aW9ucywgbWV0aG9kcyBvZiBidWlsdC1pbiBvYmplY3RzLCBjbGFzc1xub2JqZWN0cywgbWV0aG9kcyBvZiBjbGFzcyBpbnN0YW5jZXMsIGFuZCBhbGwgb2JqZWN0cyBoYXZpbmcgYVxuIl9fY2FsbF9fKCkiIG1ldGhvZCBhcmUgY2FsbGFibGUpLiAgQWxsIGFyZ3VtZW50IGV4cHJlc3Npb25zIGFyZVxuZXZhbHVhdGVkIGJlZm9yZSB0aGUgY2FsbCBpcyBhdHRlbXB0ZWQuICBQbGVhc2UgcmVmZXIgdG8gc2VjdGlvblxuKkZ1bmN0aW9uIGRlZmluaXRpb25zKiBmb3IgdGhlIHN5bnRheCBvZiBmb3JtYWwgKnBhcmFtZXRlciogbGlzdHMuXG5cbklmIGtleXdvcmQgYXJndW1lbnRzIGFyZSBwcmVzZW50LCB0aGV5IGFyZSBmaXJzdCBjb252ZXJ0ZWQgdG9cbnBvc2l0aW9uYWwgYXJndW1lbnRzLCBhcyBmb2xsb3dzLiAgRmlyc3QsIGEgbGlzdCBvZiB1bmZpbGxlZCBzbG90cyBpc1xuY3JlYXRlZCBmb3IgdGhlIGZvcm1hbCBwYXJhbWV0ZXJzLiAgSWYgdGhlcmUgYXJlIE4gcG9zaXRpb25hbFxuYXJndW1lbnRzLCB0aGV5IGFyZSBwbGFjZWQgaW4gdGhlIGZpcnN0IE4gc2xvdHMuICBOZXh0LCBmb3IgZWFjaFxua2V5d29yZCBhcmd1bWVudCwgdGhlIGlkZW50aWZpZXIgaXMgdXNlZCB0byBkZXRlcm1pbmUgdGhlXG5jb3JyZXNwb25kaW5nIHNsb3QgKGlmIHRoZSBpZGVudGlmaWVyIGlzIHRoZSBzYW1lIGFzIHRoZSBmaXJzdCBmb3JtYWxcbnBhcmFtZXRlciBuYW1lLCB0aGUgZmlyc3Qgc2xvdCBpcyB1c2VkLCBhbmQgc28gb24pLiAgSWYgdGhlIHNsb3QgaXNcbmFscmVhZHkgZmlsbGVkLCBhICJUeXBlRXJyb3IiIGV4Y2VwdGlvbiBpcyByYWlzZWQuIE90aGVyd2lzZSwgdGhlXG52YWx1ZSBvZiB0aGUgYXJndW1lbnQgaXMgcGxhY2VkIGluIHRoZSBzbG90LCBmaWxsaW5nIGl0IChldmVuIGlmIHRoZVxuZXhwcmVzc2lvbiBpcyAiTm9uZSIsIGl0IGZpbGxzIHRoZSBzbG90KS4gIFdoZW4gYWxsIGFyZ3VtZW50cyBoYXZlXG5iZWVuIHByb2Nlc3NlZCwgdGhlIHNsb3RzIHRoYXQgYXJlIHN0aWxsIHVuZmlsbGVkIGFyZSBmaWxsZWQgd2l0aCB0aGVcbmNvcnJlc3BvbmRpbmcgZGVmYXVsdCB2YWx1ZSBmcm9tIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uLiAgKERlZmF1bHRcbnZhbHVlcyBhcmUgY2FsY3VsYXRlZCwgb25jZSwgd2hlbiB0aGUgZnVuY3Rpb24gaXMgZGVmaW5lZDsgdGh1cywgYVxubXV0YWJsZSBvYmplY3Qgc3VjaCBhcyBhIGxpc3Qgb3IgZGljdGlvbmFyeSB1c2VkIGFzIGRlZmF1bHQgdmFsdWUgd2lsbFxuYmUgc2hhcmVkIGJ5IGFsbCBjYWxscyB0aGF0IGRvblwndCBzcGVjaWZ5IGFuIGFyZ3VtZW50IHZhbHVlIGZvciB0aGVcbmNvcnJlc3BvbmRpbmcgc2xvdDsgdGhpcyBzaG91bGQgdXN1YWxseSBiZSBhdm9pZGVkLikgIElmIHRoZXJlIGFyZSBhbnlcbnVuZmlsbGVkIHNsb3RzIGZvciB3aGljaCBubyBkZWZhdWx0IHZhbHVlIGlzIHNwZWNpZmllZCwgYSAiVHlwZUVycm9yIlxuZXhjZXB0aW9uIGlzIHJhaXNlZC4gIE90aGVyd2lzZSwgdGhlIGxpc3Qgb2YgZmlsbGVkIHNsb3RzIGlzIHVzZWQgYXNcbnRoZSBhcmd1bWVudCBsaXN0IGZvciB0aGUgY2FsbC5cblxuKipDUHl0aG9uIGltcGxlbWVudGF0aW9uIGRldGFpbDoqKiBBbiBpbXBsZW1lbnRhdGlvbiBtYXkgcHJvdmlkZVxuYnVpbHQtaW4gZnVuY3Rpb25zIHdob3NlIHBvc2l0aW9uYWwgcGFyYW1ldGVycyBkbyBub3QgaGF2ZSBuYW1lcywgZXZlblxuaWYgdGhleSBhcmUgXCduYW1lZFwnIGZvciB0aGUgcHVycG9zZSBvZiBkb2N1bWVudGF0aW9uLCBhbmQgd2hpY2hcbnRoZXJlZm9yZSBjYW5ub3QgYmUgc3VwcGxpZWQgYnkga2V5d29yZC4gIEluIENQeXRob24sIHRoaXMgaXMgdGhlIGNhc2VcbmZvciBmdW5jdGlvbnMgaW1wbGVtZW50ZWQgaW4gQyB0aGF0IHVzZSAiUHlBcmdfUGFyc2VUdXBsZSgpIiB0byBwYXJzZVxudGhlaXIgYXJndW1lbnRzLlxuXG5JZiB0aGVyZSBhcmUgbW9yZSBwb3NpdGlvbmFsIGFyZ3VtZW50cyB0aGFuIHRoZXJlIGFyZSBmb3JtYWwgcGFyYW1ldGVyXG5zbG90cywgYSAiVHlwZUVycm9yIiBleGNlcHRpb24gaXMgcmFpc2VkLCB1bmxlc3MgYSBmb3JtYWwgcGFyYW1ldGVyXG51c2luZyB0aGUgc3ludGF4ICIqaWRlbnRpZmllciIgaXMgcHJlc2VudDsgaW4gdGhpcyBjYXNlLCB0aGF0IGZvcm1hbFxucGFyYW1ldGVyIHJlY2VpdmVzIGEgdHVwbGUgY29udGFpbmluZyB0aGUgZXhjZXNzIHBvc2l0aW9uYWwgYXJndW1lbnRzXG4ob3IgYW4gZW1wdHkgdHVwbGUgaWYgdGhlcmUgd2VyZSBubyBleGNlc3MgcG9zaXRpb25hbCBhcmd1bWVudHMpLlxuXG5JZiBhbnkga2V5d29yZCBhcmd1bWVudCBkb2VzIG5vdCBjb3JyZXNwb25kIHRvIGEgZm9ybWFsIHBhcmFtZXRlclxubmFtZSwgYSAiVHlwZUVycm9yIiBleGNlcHRpb24gaXMgcmFpc2VkLCB1bmxlc3MgYSBmb3JtYWwgcGFyYW1ldGVyXG51c2luZyB0aGUgc3ludGF4ICIqKmlkZW50aWZpZXIiIGlzIHByZXNlbnQ7IGluIHRoaXMgY2FzZSwgdGhhdCBmb3JtYWxcbnBhcmFtZXRlciByZWNlaXZlcyBhIGRpY3Rpb25hcnkgY29udGFpbmluZyB0aGUgZXhjZXNzIGtleXdvcmRcbmFyZ3VtZW50cyAodXNpbmcgdGhlIGtleXdvcmRzIGFzIGtleXMgYW5kIHRoZSBhcmd1bWVudCB2YWx1ZXMgYXNcbmNvcnJlc3BvbmRpbmcgdmFsdWVzKSwgb3IgYSAobmV3KSBlbXB0eSBkaWN0aW9uYXJ5IGlmIHRoZXJlIHdlcmUgbm9cbmV4Y2VzcyBrZXl3b3JkIGFyZ3VtZW50cy5cblxuSWYgdGhlIHN5bnRheCAiKmV4cHJlc3Npb24iIGFwcGVhcnMgaW4gdGhlIGZ1bmN0aW9uIGNhbGwsICJleHByZXNzaW9uIlxubXVzdCBldmFsdWF0ZSB0byBhbiBpdGVyYWJsZS4gIEVsZW1lbnRzIGZyb20gdGhpcyBpdGVyYWJsZSBhcmUgdHJlYXRlZFxuYXMgaWYgdGhleSB3ZXJlIGFkZGl0aW9uYWwgcG9zaXRpb25hbCBhcmd1bWVudHM7IGlmIHRoZXJlIGFyZVxucG9zaXRpb25hbCBhcmd1bWVudHMgKngxKiwgLi4uLCAqeE4qLCBhbmQgImV4cHJlc3Npb24iIGV2YWx1YXRlcyB0byBhXG5zZXF1ZW5jZSAqeTEqLCAuLi4sICp5TSosIHRoaXMgaXMgZXF1aXZhbGVudCB0byBhIGNhbGwgd2l0aCBNK05cbnBvc2l0aW9uYWwgYXJndW1lbnRzICp4MSosIC4uLiwgKnhOKiwgKnkxKiwgLi4uLCAqeU0qLlxuXG5BIGNvbnNlcXVlbmNlIG9mIHRoaXMgaXMgdGhhdCBhbHRob3VnaCB0aGUgIipleHByZXNzaW9uIiBzeW50YXggbWF5XG5hcHBlYXIgKmFmdGVyKiBzb21lIGtleXdvcmQgYXJndW1lbnRzLCBpdCBpcyBwcm9jZXNzZWQgKmJlZm9yZSogdGhlXG5rZXl3b3JkIGFyZ3VtZW50cyAoYW5kIHRoZSAiKipleHByZXNzaW9uIiBhcmd1bWVudCwgaWYgYW55IC0tIHNlZVxuYmVsb3cpLiAgU286XG5cbiAgID4+PiBkZWYgZihhLCBiKTpcbiAgIC4uLiAgcHJpbnQoYSwgYilcbiAgIC4uLlxuICAgPj4+IGYoYj0xLCAqKDIsKSlcbiAgIDIgMVxuICAgPj4+IGYoYT0xLCAqKDIsKSlcbiAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KTpcbiAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgMSwgaW4gP1xuICAgVHlwZUVycm9yOiBmKCkgZ290IG11bHRpcGxlIHZhbHVlcyBmb3Iga2V5d29yZCBhcmd1bWVudCBcJ2FcJ1xuICAgPj4+IGYoMSwgKigyLCkpXG4gICAxIDJcblxuSXQgaXMgdW51c3VhbCBmb3IgYm90aCBrZXl3b3JkIGFyZ3VtZW50cyBhbmQgdGhlICIqZXhwcmVzc2lvbiIgc3ludGF4XG50byBiZSB1c2VkIGluIHRoZSBzYW1lIGNhbGwsIHNvIGluIHByYWN0aWNlIHRoaXMgY29uZnVzaW9uIGRvZXMgbm90XG5hcmlzZS5cblxuSWYgdGhlIHN5bnRheCAiKipleHByZXNzaW9uIiBhcHBlYXJzIGluIHRoZSBmdW5jdGlvbiBjYWxsLFxuImV4cHJlc3Npb24iIG11c3QgZXZhbHVhdGUgdG8gYSBtYXBwaW5nLCB0aGUgY29udGVudHMgb2Ygd2hpY2ggYXJlXG50cmVhdGVkIGFzIGFkZGl0aW9uYWwga2V5d29yZCBhcmd1bWVudHMuICBJbiB0aGUgY2FzZSBvZiBhIGtleXdvcmRcbmFwcGVhcmluZyBpbiBib3RoICJleHByZXNzaW9uIiBhbmQgYXMgYW4gZXhwbGljaXQga2V5d29yZCBhcmd1bWVudCwgYVxuIlR5cGVFcnJvciIgZXhjZXB0aW9uIGlzIHJhaXNlZC5cblxuRm9ybWFsIHBhcmFtZXRlcnMgdXNpbmcgdGhlIHN5bnRheCAiKmlkZW50aWZpZXIiIG9yICIqKmlkZW50aWZpZXIiXG5jYW5ub3QgYmUgdXNlZCBhcyBwb3NpdGlvbmFsIGFyZ3VtZW50IHNsb3RzIG9yIGFzIGtleXdvcmQgYXJndW1lbnRcbm5hbWVzLlxuXG5BIGNhbGwgYWx3YXlzIHJldHVybnMgc29tZSB2YWx1ZSwgcG9zc2libHkgIk5vbmUiLCB1bmxlc3MgaXQgcmFpc2VzIGFuXG5leGNlcHRpb24uICBIb3cgdGhpcyB2YWx1ZSBpcyBjb21wdXRlZCBkZXBlbmRzIG9uIHRoZSB0eXBlIG9mIHRoZVxuY2FsbGFibGUgb2JqZWN0LlxuXG5JZiBpdCBpcy0tLVxuXG5hIHVzZXItZGVmaW5lZCBmdW5jdGlvbjpcbiAgIFRoZSBjb2RlIGJsb2NrIGZvciB0aGUgZnVuY3Rpb24gaXMgZXhlY3V0ZWQsIHBhc3NpbmcgaXQgdGhlXG4gICBhcmd1bWVudCBsaXN0LiAgVGhlIGZpcnN0IHRoaW5nIHRoZSBjb2RlIGJsb2NrIHdpbGwgZG8gaXMgYmluZCB0aGVcbiAgIGZvcm1hbCBwYXJhbWV0ZXJzIHRvIHRoZSBhcmd1bWVudHM7IHRoaXMgaXMgZGVzY3JpYmVkIGluIHNlY3Rpb25cbiAgICpGdW5jdGlvbiBkZWZpbml0aW9ucyouICBXaGVuIHRoZSBjb2RlIGJsb2NrIGV4ZWN1dGVzIGEgInJldHVybiJcbiAgIHN0YXRlbWVudCwgdGhpcyBzcGVjaWZpZXMgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgZnVuY3Rpb24gY2FsbC5cblxuYSBidWlsdC1pbiBmdW5jdGlvbiBvciBtZXRob2Q6XG4gICBUaGUgcmVzdWx0IGlzIHVwIHRvIHRoZSBpbnRlcnByZXRlcjsgc2VlICpCdWlsdC1pbiBGdW5jdGlvbnMqIGZvclxuICAgdGhlIGRlc2NyaXB0aW9ucyBvZiBidWlsdC1pbiBmdW5jdGlvbnMgYW5kIG1ldGhvZHMuXG5cbmEgY2xhc3Mgb2JqZWN0OlxuICAgQSBuZXcgaW5zdGFuY2Ugb2YgdGhhdCBjbGFzcyBpcyByZXR1cm5lZC5cblxuYSBjbGFzcyBpbnN0YW5jZSBtZXRob2Q6XG4gICBUaGUgY29ycmVzcG9uZGluZyB1c2VyLWRlZmluZWQgZnVuY3Rpb24gaXMgY2FsbGVkLCB3aXRoIGFuIGFyZ3VtZW50XG4gICBsaXN0IHRoYXQgaXMgb25lIGxvbmdlciB0aGFuIHRoZSBhcmd1bWVudCBsaXN0IG9mIHRoZSBjYWxsOiB0aGVcbiAgIGluc3RhbmNlIGJlY29tZXMgdGhlIGZpcnN0IGFyZ3VtZW50LlxuXG5hIGNsYXNzIGluc3RhbmNlOlxuICAgVGhlIGNsYXNzIG11c3QgZGVmaW5lIGEgIl9fY2FsbF9fKCkiIG1ldGhvZDsgdGhlIGVmZmVjdCBpcyB0aGVuIHRoZVxuICAgc2FtZSBhcyBpZiB0aGF0IG1ldGhvZCB3YXMgY2FsbGVkLlxuJywKLSAnY2xhc3MnOiAnXG5DbGFzcyBkZWZpbml0aW9uc1xuKioqKioqKioqKioqKioqKipcblxuQSBjbGFzcyBkZWZpbml0aW9uIGRlZmluZXMgYSBjbGFzcyBvYmplY3QgKHNlZSBzZWN0aW9uICpUaGUgc3RhbmRhcmRcbnR5cGUgaGllcmFyY2h5Kik6XG5cbiAgIGNsYXNzZGVmICAgIDo6PSBbZGVjb3JhdG9yc10gImNsYXNzIiBjbGFzc25hbWUgW2luaGVyaXRhbmNlXSAiOiIgc3VpdGVcbiAgIGluaGVyaXRhbmNlIDo6PSAiKCIgW3BhcmFtZXRlcl9saXN0XSAiKSJcbiAgIGNsYXNzbmFtZSAgIDo6PSBpZGVudGlmaWVyXG5cbkEgY2xhc3MgZGVmaW5pdGlvbiBpcyBhbiBleGVjdXRhYmxlIHN0YXRlbWVudC4gIFRoZSBpbmhlcml0YW5jZSBsaXN0XG51c3VhbGx5IGdpdmVzIGEgbGlzdCBvZiBiYXNlIGNsYXNzZXMgKHNlZSAqQ3VzdG9taXppbmcgY2xhc3MgY3JlYXRpb24qXG5mb3IgbW9yZSBhZHZhbmNlZCB1c2VzKSwgc28gZWFjaCBpdGVtIGluIHRoZSBsaXN0IHNob3VsZCBldmFsdWF0ZSB0byBhXG5jbGFzcyBvYmplY3Qgd2hpY2ggYWxsb3dzIHN1YmNsYXNzaW5nLiAgQ2xhc3NlcyB3aXRob3V0IGFuIGluaGVyaXRhbmNlXG5saXN0IGluaGVyaXQsIGJ5IGRlZmF1bHQsIGZyb20gdGhlIGJhc2UgY2xhc3MgIm9iamVjdCI7IGhlbmNlLFxuXG4gICBjbGFzcyBGb286XG4gICAgICAgcGFzc1xuXG5pcyBlcXVpdmFsZW50IHRvXG5cbiAgIGNsYXNzIEZvbyhvYmplY3QpOlxuICAgICAgIHBhc3NcblxuVGhlIGNsYXNzXCdzIHN1aXRlIGlzIHRoZW4gZXhlY3V0ZWQgaW4gYSBuZXcgZXhlY3V0aW9uIGZyYW1lIChzZWVcbipOYW1pbmcgYW5kIGJpbmRpbmcqKSwgdXNpbmcgYSBuZXdseSBjcmVhdGVkIGxvY2FsIG5hbWVzcGFjZSBhbmQgdGhlXG5vcmlnaW5hbCBnbG9iYWwgbmFtZXNwYWNlLiAoVXN1YWxseSwgdGhlIHN1aXRlIGNvbnRhaW5zIG1vc3RseVxuZnVuY3Rpb24gZGVmaW5pdGlvbnMuKSAgV2hlbiB0aGUgY2xhc3NcJ3Mgc3VpdGUgZmluaXNoZXMgZXhlY3V0aW9uLCBpdHNcbmV4ZWN1dGlvbiBmcmFtZSBpcyBkaXNjYXJkZWQgYnV0IGl0cyBsb2NhbCBuYW1lc3BhY2UgaXMgc2F2ZWQuIFs0XSBBXG5jbGFzcyBvYmplY3QgaXMgdGhlbiBjcmVhdGVkIHVzaW5nIHRoZSBpbmhlcml0YW5jZSBsaXN0IGZvciB0aGUgYmFzZVxuY2xhc3NlcyBhbmQgdGhlIHNhdmVkIGxvY2FsIG5hbWVzcGFjZSBmb3IgdGhlIGF0dHJpYnV0ZSBkaWN0aW9uYXJ5LlxuVGhlIGNsYXNzIG5hbWUgaXMgYm91bmQgdG8gdGhpcyBjbGFzcyBvYmplY3QgaW4gdGhlIG9yaWdpbmFsIGxvY2FsXG5uYW1lc3BhY2UuXG5cbkNsYXNzIGNyZWF0aW9uIGNhbiBiZSBjdXN0b21pemVkIGhlYXZpbHkgdXNpbmcgKm1ldGFjbGFzc2VzKi5cblxuQ2xhc3NlcyBjYW4gYWxzbyBiZSBkZWNvcmF0ZWQ6IGp1c3QgbGlrZSB3aGVuIGRlY29yYXRpbmcgZnVuY3Rpb25zLFxuXG4gICBAZjEoYXJnKVxuICAgQGYyXG4gICBjbGFzcyBGb286IHBhc3NcblxuaXMgZXF1aXZhbGVudCB0b1xuXG4gICBjbGFzcyBGb286IHBhc3NcbiAgIEZvbyA9IGYxKGFyZykoZjIoRm9vKSlcblxuVGhlIGV2YWx1YXRpb24gcnVsZXMgZm9yIHRoZSBkZWNvcmF0b3IgZXhwcmVzc2lvbnMgYXJlIHRoZSBzYW1lIGFzIGZvclxuZnVuY3Rpb24gZGVjb3JhdG9ycy4gIFRoZSByZXN1bHQgbXVzdCBiZSBhIGNsYXNzIG9iamVjdCwgd2hpY2ggaXMgdGhlblxuYm91bmQgdG8gdGhlIGNsYXNzIG5hbWUuXG5cbioqUHJvZ3JhbW1lclwncyBub3RlOioqIFZhcmlhYmxlcyBkZWZpbmVkIGluIHRoZSBjbGFzcyBkZWZpbml0aW9uIGFyZVxuY2xhc3MgYXR0cmlidXRlczsgdGhleSBhcmUgc2hhcmVkIGJ5IGluc3RhbmNlcy4gIEluc3RhbmNlIGF0dHJpYnV0ZXNcbmNhbiBiZSBzZXQgaW4gYSBtZXRob2Qgd2l0aCAic2VsZi5uYW1lID0gdmFsdWUiLiAgQm90aCBjbGFzcyBhbmRcbmluc3RhbmNlIGF0dHJpYnV0ZXMgYXJlIGFjY2Vzc2libGUgdGhyb3VnaCB0aGUgbm90YXRpb24gIiJzZWxmLm5hbWUiIixcbmFuZCBhbiBpbnN0YW5jZSBhdHRyaWJ1dGUgaGlkZXMgYSBjbGFzcyBhdHRyaWJ1dGUgd2l0aCB0aGUgc2FtZSBuYW1lXG53aGVuIGFjY2Vzc2VkIGluIHRoaXMgd2F5LiAgQ2xhc3MgYXR0cmlidXRlcyBjYW4gYmUgdXNlZCBhcyBkZWZhdWx0c1xuZm9yIGluc3RhbmNlIGF0dHJpYnV0ZXMsIGJ1dCB1c2luZyBtdXRhYmxlIHZhbHVlcyB0aGVyZSBjYW4gbGVhZCB0b1xudW5leHBlY3RlZCByZXN1bHRzLiAgKkRlc2NyaXB0b3JzKiBjYW4gYmUgdXNlZCB0byBjcmVhdGUgaW5zdGFuY2VcbnZhcmlhYmxlcyB3aXRoIGRpZmZlcmVudCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLlxuXG5TZWUgYWxzbzogKipQRVAgMzExNSoqIC0gTWV0YWNsYXNzZXMgaW4gUHl0aG9uIDMgKipQRVAgMzEyOSoqIC1cbiAgQ2xhc3MgRGVjb3JhdG9yc1xuXG4tWyBGb290bm90ZXMgXS1cblxuWzFdIFRoZSBleGNlcHRpb24gaXMgcHJvcGFnYXRlZCB0byB0aGUgaW52b2NhdGlvbiBzdGFjayB1bmxlc3NcbiAgICB0aGVyZSBpcyBhICJmaW5hbGx5IiBjbGF1c2Ugd2hpY2ggaGFwcGVucyB0byByYWlzZSBhbm90aGVyXG4gICAgZXhjZXB0aW9uLiBUaGF0IG5ldyBleGNlcHRpb24gY2F1c2VzIHRoZSBvbGQgb25lIHRvIGJlIGxvc3QuXG5cblsyXSBDdXJyZW50bHksIGNvbnRyb2wgImZsb3dzIG9mZiB0aGUgZW5kIiBleGNlcHQgaW4gdGhlIGNhc2Ugb2ZcbiAgICBhbiBleGNlcHRpb24gb3IgdGhlIGV4ZWN1dGlvbiBvZiBhICJyZXR1cm4iLCAiY29udGludWUiLCBvclxuICAgICJicmVhayIgc3RhdGVtZW50LlxuXG5bM10gQSBzdHJpbmcgbGl0ZXJhbCBhcHBlYXJpbmcgYXMgdGhlIGZpcnN0IHN0YXRlbWVudCBpbiB0aGVcbiAgICBmdW5jdGlvbiBib2R5IGlzIHRyYW5zZm9ybWVkIGludG8gdGhlIGZ1bmN0aW9uXCdzICJfX2RvY19fIlxuICAgIGF0dHJpYnV0ZSBhbmQgdGhlcmVmb3JlIHRoZSBmdW5jdGlvblwncyAqZG9jc3RyaW5nKi5cblxuWzRdIEEgc3RyaW5nIGxpdGVyYWwgYXBwZWFyaW5nIGFzIHRoZSBmaXJzdCBzdGF0ZW1lbnQgaW4gdGhlIGNsYXNzXG4gICAgYm9keSBpcyB0cmFuc2Zvcm1lZCBpbnRvIHRoZSBuYW1lc3BhY2VcJ3MgIl9fZG9jX18iIGl0ZW0gYW5kXG4gICAgdGhlcmVmb3JlIHRoZSBjbGFzc1wncyAqZG9jc3RyaW5nKi5cbicsCi0gJ2NvbXBhcmlzb25zJzogJ1xuQ29tcGFyaXNvbnNcbioqKioqKioqKioqXG5cblVubGlrZSBDLCBhbGwgY29tcGFyaXNvbiBvcGVyYXRpb25zIGluIFB5dGhvbiBoYXZlIHRoZSBzYW1lIHByaW9yaXR5LFxud2hpY2ggaXMgbG93ZXIgdGhhbiB0aGF0IG9mIGFueSBhcml0aG1ldGljLCBzaGlmdGluZyBvciBiaXR3aXNlXG5vcGVyYXRpb24uICBBbHNvIHVubGlrZSBDLCBleHByZXNzaW9ucyBsaWtlICJhIDwgYiA8IGMiIGhhdmUgdGhlXG5pbnRlcnByZXRhdGlvbiB0aGF0IGlzIGNvbnZlbnRpb25hbCBpbiBtYXRoZW1hdGljczpcblxuICAgY29tcGFyaXNvbiAgICA6Oj0gb3JfZXhwciAoIGNvbXBfb3BlcmF0b3Igb3JfZXhwciApKlxuICAgY29tcF9vcGVyYXRvciA6Oj0gIjwiIHwgIj4iIHwgIj09IiB8ICI+PSIgfCAiPD0iIHwgIiE9IlxuICAgICAgICAgICAgICAgICAgICAgfCAiaXMiIFsibm90Il0gfCBbIm5vdCJdICJpbiJcblxuQ29tcGFyaXNvbnMgeWllbGQgYm9vbGVhbiB2YWx1ZXM6ICJUcnVlIiBvciAiRmFsc2UiLlxuXG5Db21wYXJpc29ucyBjYW4gYmUgY2hhaW5lZCBhcmJpdHJhcmlseSwgZS5nLiwgInggPCB5IDw9IHoiIGlzXG5lcXVpdmFsZW50IHRvICJ4IDwgeSBhbmQgeSA8PSB6IiwgZXhjZXB0IHRoYXQgInkiIGlzIGV2YWx1YXRlZCBvbmx5XG5vbmNlIChidXQgaW4gYm90aCBjYXNlcyAieiIgaXMgbm90IGV2YWx1YXRlZCBhdCBhbGwgd2hlbiAieCA8IHkiIGlzXG5mb3VuZCB0byBiZSBmYWxzZSkuXG5cbkZvcm1hbGx5LCBpZiAqYSosICpiKiwgKmMqLCAuLi4sICp5KiwgKnoqIGFyZSBleHByZXNzaW9ucyBhbmQgKm9wMSosXG4qb3AyKiwgLi4uLCAqb3BOKiBhcmUgY29tcGFyaXNvbiBvcGVyYXRvcnMsIHRoZW4gImEgb3AxIGIgb3AyIGMgLi4uIHlcbm9wTiB6IiBpcyBlcXVpdmFsZW50IHRvICJhIG9wMSBiIGFuZCBiIG9wMiBjIGFuZCAuLi4geSBvcE4geiIsIGV4Y2VwdFxudGhhdCBlYWNoIGV4cHJlc3Npb24gaXMgZXZhbHVhdGVkIGF0IG1vc3Qgb25jZS5cblxuTm90ZSB0aGF0ICJhIG9wMSBiIG9wMiBjIiBkb2VzblwndCBpbXBseSBhbnkga2luZCBvZiBjb21wYXJpc29uIGJldHdlZW5cbiphKiBhbmQgKmMqLCBzbyB0aGF0LCBlLmcuLCAieCA8IHkgPiB6IiBpcyBwZXJmZWN0bHkgbGVnYWwgKHRob3VnaFxucGVyaGFwcyBub3QgcHJldHR5KS5cblxuVGhlIG9wZXJhdG9ycyAiPCIsICI+IiwgIj09IiwgIj49IiwgIjw9IiwgYW5kICIhPSIgY29tcGFyZSB0aGUgdmFsdWVzXG5vZiB0d28gb2JqZWN0cy4gIFRoZSBvYmplY3RzIG5lZWQgbm90IGhhdmUgdGhlIHNhbWUgdHlwZS4gSWYgYm90aCBhcmVcbm51bWJlcnMsIHRoZXkgYXJlIGNvbnZlcnRlZCB0byBhIGNvbW1vbiB0eXBlLiAgT3RoZXJ3aXNlLCB0aGUgIj09IiBhbmRcbiIhPSIgb3BlcmF0b3JzICphbHdheXMqIGNvbnNpZGVyIG9iamVjdHMgb2YgZGlmZmVyZW50IHR5cGVzIHRvIGJlXG51bmVxdWFsLCB3aGlsZSB0aGUgIjwiLCAiPiIsICI+PSIgYW5kICI8PSIgb3BlcmF0b3JzIHJhaXNlIGFcbiJUeXBlRXJyb3IiIHdoZW4gY29tcGFyaW5nIG9iamVjdHMgb2YgZGlmZmVyZW50IHR5cGVzIHRoYXQgZG8gbm90XG5pbXBsZW1lbnQgdGhlc2Ugb3BlcmF0b3JzIGZvciB0aGUgZ2l2ZW4gcGFpciBvZiB0eXBlcy4gIFlvdSBjYW5cbmNvbnRyb2wgY29tcGFyaXNvbiBiZWhhdmlvciBvZiBvYmplY3RzIG9mIG5vbi1idWlsdC1pbiB0eXBlcyBieVxuZGVmaW5pbmcgcmljaCBjb21wYXJpc29uIG1ldGhvZHMgbGlrZSAiX19ndF9fKCkiLCBkZXNjcmliZWQgaW4gc2VjdGlvblxuKkJhc2ljIGN1c3RvbWl6YXRpb24qLlxuXG5Db21wYXJpc29uIG9mIG9iamVjdHMgb2YgdGhlIHNhbWUgdHlwZSBkZXBlbmRzIG9uIHRoZSB0eXBlOlxuXG4qIE51bWJlcnMgYXJlIGNvbXBhcmVkIGFyaXRobWV0aWNhbGx5LlxuXG4qIFRoZSB2YWx1ZXMgImZsb2F0KFwnTmFOXCcpIiBhbmQgIkRlY2ltYWwoXCdOYU5cJykiIGFyZSBzcGVjaWFsLiBUaGVcbiAgYXJlIGlkZW50aWNhbCB0byB0aGVtc2VsdmVzLCAieCBpcyB4IiBidXQgYXJlIG5vdCBlcXVhbCB0b1xuICB0aGVtc2VsdmVzLCAieCAhPSB4Ii4gIEFkZGl0aW9uYWxseSwgY29tcGFyaW5nIGFueSB2YWx1ZSB0byBhXG4gIG5vdC1hLW51bWJlciB2YWx1ZSB3aWxsIHJldHVybiAiRmFsc2UiLiAgRm9yIGV4YW1wbGUsIGJvdGggIjMgPFxuICBmbG9hdChcJ05hTlwnKSIgYW5kICJmbG9hdChcJ05hTlwnKSA8IDMiIHdpbGwgcmV0dXJuICJGYWxzZSIuXG5cbiogQnl0ZXMgb2JqZWN0cyBhcmUgY29tcGFyZWQgbGV4aWNvZ3JhcGhpY2FsbHkgdXNpbmcgdGhlIG51bWVyaWNcbiAgdmFsdWVzIG9mIHRoZWlyIGVsZW1lbnRzLlxuXG4qIFN0cmluZ3MgYXJlIGNvbXBhcmVkIGxleGljb2dyYXBoaWNhbGx5IHVzaW5nIHRoZSBudW1lcmljXG4gIGVxdWl2YWxlbnRzICh0aGUgcmVzdWx0IG9mIHRoZSBidWlsdC1pbiBmdW5jdGlvbiAib3JkKCkiKSBvZiB0aGVpclxuICBjaGFyYWN0ZXJzLiBbM10gU3RyaW5nIGFuZCBieXRlcyBvYmplY3QgY2FuXCd0IGJlIGNvbXBhcmVkIVxuXG4qIFR1cGxlcyBhbmQgbGlzdHMgYXJlIGNvbXBhcmVkIGxleGljb2dyYXBoaWNhbGx5IHVzaW5nIGNvbXBhcmlzb25cbiAgb2YgY29ycmVzcG9uZGluZyBlbGVtZW50cy4gIFRoaXMgbWVhbnMgdGhhdCB0byBjb21wYXJlIGVxdWFsLCBlYWNoXG4gIGVsZW1lbnQgbXVzdCBjb21wYXJlIGVxdWFsIGFuZCB0aGUgdHdvIHNlcXVlbmNlcyBtdXN0IGJlIG9mIHRoZSBzYW1lXG4gIHR5cGUgYW5kIGhhdmUgdGhlIHNhbWUgbGVuZ3RoLlxuXG4gIElmIG5vdCBlcXVhbCwgdGhlIHNlcXVlbmNlcyBhcmUgb3JkZXJlZCB0aGUgc2FtZSBhcyB0aGVpciBmaXJzdFxuICBkaWZmZXJpbmcgZWxlbWVudHMuICBGb3IgZXhhbXBsZSwgIlsxLDIseF0gPD0gWzEsMix5XSIgaGFzIHRoZSBzYW1lXG4gIHZhbHVlIGFzICJ4IDw9IHkiLiAgSWYgdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudCBkb2VzIG5vdCBleGlzdCwgdGhlXG4gIHNob3J0ZXIgc2VxdWVuY2UgaXMgb3JkZXJlZCBmaXJzdCAoZm9yIGV4YW1wbGUsICJbMSwyXSA8IFsxLDIsM10iKS5cblxuKiBNYXBwaW5ncyAoZGljdGlvbmFyaWVzKSBjb21wYXJlIGVxdWFsIGlmIGFuZCBvbmx5IGlmIHRoZXkgaGF2ZSB0aGVcbiAgc2FtZSAiKGtleSwgdmFsdWUpIiBwYWlycy4gT3JkZXIgY29tcGFyaXNvbnMgIihcJzxcJywgXCc8PVwnLCBcJz49XCcsXG4gIFwnPlwnKSIgcmFpc2UgIlR5cGVFcnJvciIuXG5cbiogU2V0cyBhbmQgZnJvemVuc2V0cyBkZWZpbmUgY29tcGFyaXNvbiBvcGVyYXRvcnMgdG8gbWVhbiBzdWJzZXQgYW5kXG4gIHN1cGVyc2V0IHRlc3RzLiAgVGhvc2UgcmVsYXRpb25zIGRvIG5vdCBkZWZpbmUgdG90YWwgb3JkZXJpbmdzICh0aGVcbiAgdHdvIHNldHMgInsxLDJ9IiBhbmQgezIsM30gYXJlIG5vdCBlcXVhbCwgbm9yIHN1YnNldHMgb2Ygb25lXG4gIGFub3RoZXIsIG5vciBzdXBlcnNldHMgb2Ygb25lIGFub3RoZXIpLiAgQWNjb3JkaW5nbHksIHNldHMgYXJlIG5vdFxuICBhcHByb3ByaWF0ZSBhcmd1bWVudHMgZm9yIGZ1bmN0aW9ucyB3aGljaCBkZXBlbmQgb24gdG90YWwgb3JkZXJpbmcuXG4gIEZvciBleGFtcGxlLCAibWluKCkiLCAibWF4KCkiLCBhbmQgInNvcnRlZCgpIiBwcm9kdWNlIHVuZGVmaW5lZFxuICByZXN1bHRzIGdpdmVuIGEgbGlzdCBvZiBzZXRzIGFzIGlucHV0cy5cblxuKiBNb3N0IG90aGVyIG9iamVjdHMgb2YgYnVpbHQtaW4gdHlwZXMgY29tcGFyZSB1bmVxdWFsIHVubGVzcyB0aGV5XG4gIGFyZSB0aGUgc2FtZSBvYmplY3Q7IHRoZSBjaG9pY2Ugd2hldGhlciBvbmUgb2JqZWN0IGlzIGNvbnNpZGVyZWRcbiAgc21hbGxlciBvciBsYXJnZXIgdGhhbiBhbm90aGVyIG9uZSBpcyBtYWRlIGFyYml0cmFyaWx5IGJ1dFxuICBjb25zaXN0ZW50bHkgd2l0aGluIG9uZSBleGVjdXRpb24gb2YgYSBwcm9ncmFtLlxuXG5Db21wYXJpc29uIG9mIG9iamVjdHMgb2YgdGhlIGRpZmZlcmluZyB0eXBlcyBkZXBlbmRzIG9uIHdoZXRoZXIgZWl0aGVyXG5vZiB0aGUgdHlwZXMgcHJvdmlkZSBleHBsaWNpdCBzdXBwb3J0IGZvciB0aGUgY29tcGFyaXNvbi4gIE1vc3Rcbm51bWVyaWMgdHlwZXMgY2FuIGJlIGNvbXBhcmVkIHdpdGggb25lIGFub3RoZXIuICBXaGVuIGNyb3NzLXR5cGVcbmNvbXBhcmlzb24gaXMgbm90IHN1cHBvcnRlZCwgdGhlIGNvbXBhcmlzb24gbWV0aG9kIHJldHVybnNcbiJOb3RJbXBsZW1lbnRlZCIuXG5cblRoZSBvcGVyYXRvcnMgImluIiBhbmQgIm5vdCBpbiIgdGVzdCBmb3IgbWVtYmVyc2hpcC4gICJ4IGluIHMiXG5ldmFsdWF0ZXMgdG8gdHJ1ZSBpZiAqeCogaXMgYSBtZW1iZXIgb2YgKnMqLCBhbmQgZmFsc2Ugb3RoZXJ3aXNlLiAgInhcbm5vdCBpbiBzIiByZXR1cm5zIHRoZSBuZWdhdGlvbiBvZiAieCBpbiBzIi4gIEFsbCBidWlsdC1pbiBzZXF1ZW5jZXNcbmFuZCBzZXQgdHlwZXMgc3VwcG9ydCB0aGlzIGFzIHdlbGwgYXMgZGljdGlvbmFyeSwgZm9yIHdoaWNoICJpbiIgdGVzdHNcbndoZXRoZXIgYSB0aGUgZGljdGlvbmFyeSBoYXMgYSBnaXZlbiBrZXkuIEZvciBjb250YWluZXIgdHlwZXMgc3VjaCBhc1xubGlzdCwgdHVwbGUsIHNldCwgZnJvemVuc2V0LCBkaWN0LCBvciBjb2xsZWN0aW9ucy5kZXF1ZSwgdGhlXG5leHByZXNzaW9uICJ4IGluIHkiIGlzIGVxdWl2YWxlbnQgdG8gImFueSh4IGlzIGUgb3IgeCA9PSBlIGZvciBlIGluXG55KSIuXG5cbkZvciB0aGUgc3RyaW5nIGFuZCBieXRlcyB0eXBlcywgInggaW4geSIgaXMgdHJ1ZSBpZiBhbmQgb25seSBpZiAqeCogaXNcbmEgc3Vic3RyaW5nIG9mICp5Ki4gIEFuIGVxdWl2YWxlbnQgdGVzdCBpcyAieS5maW5kKHgpICE9IC0xIi4gIEVtcHR5XG5zdHJpbmdzIGFyZSBhbHdheXMgY29uc2lkZXJlZCB0byBiZSBhIHN1YnN0cmluZyBvZiBhbnkgb3RoZXIgc3RyaW5nLFxuc28gIiIiIGluICJhYmMiIiB3aWxsIHJldHVybiAiVHJ1ZSIuXG5cbkZvciB1c2VyLWRlZmluZWQgY2xhc3NlcyB3aGljaCBkZWZpbmUgdGhlICJfX2NvbnRhaW5zX18oKSIgbWV0aG9kLCAieFxuaW4geSIgaXMgdHJ1ZSBpZiBhbmQgb25seSBpZiAieS5fX2NvbnRhaW5zX18oeCkiIGlzIHRydWUuXG5cbkZvciB1c2VyLWRlZmluZWQgY2xhc3NlcyB3aGljaCBkbyBub3QgZGVmaW5lICJfX2NvbnRhaW5zX18oKSIgYnV0IGRvXG5kZWZpbmUgIl9faXRlcl9fKCkiLCAieCBpbiB5IiBpcyB0cnVlIGlmIHNvbWUgdmFsdWUgInoiIHdpdGggInggPT0geiJcbmlzIHByb2R1Y2VkIHdoaWxlIGl0ZXJhdGluZyBvdmVyICJ5Ii4gIElmIGFuIGV4Y2VwdGlvbiBpcyByYWlzZWRcbmR1cmluZyB0aGUgaXRlcmF0aW9uLCBpdCBpcyBhcyBpZiAiaW4iIHJhaXNlZCB0aGF0IGV4Y2VwdGlvbi5cblxuTGFzdGx5LCB0aGUgb2xkLXN0eWxlIGl0ZXJhdGlvbiBwcm90b2NvbCBpcyB0cmllZDogaWYgYSBjbGFzcyBkZWZpbmVzXG4iX19nZXRpdGVtX18oKSIsICJ4IGluIHkiIGlzIHRydWUgaWYgYW5kIG9ubHkgaWYgdGhlcmUgaXMgYSBub24tXG5uZWdhdGl2ZSBpbnRlZ2VyIGluZGV4ICppKiBzdWNoIHRoYXQgInggPT0geVtpXSIsIGFuZCBhbGwgbG93ZXJcbmludGVnZXIgaW5kaWNlcyBkbyBub3QgcmFpc2UgIkluZGV4RXJyb3IiIGV4Y2VwdGlvbi4gIChJZiBhbnkgb3RoZXJcbmV4Y2VwdGlvbiBpcyByYWlzZWQsIGl0IGlzIGFzIGlmICJpbiIgcmFpc2VkIHRoYXQgZXhjZXB0aW9uKS5cblxuVGhlIG9wZXJhdG9yICJub3QgaW4iIGlzIGRlZmluZWQgdG8gaGF2ZSB0aGUgaW52ZXJzZSB0cnVlIHZhbHVlIG9mXG4iaW4iLlxuXG5UaGUgb3BlcmF0b3JzICJpcyIgYW5kICJpcyBub3QiIHRlc3QgZm9yIG9iamVjdCBpZGVudGl0eTogInggaXMgeSIgaXNcbnRydWUgaWYgYW5kIG9ubHkgaWYgKngqIGFuZCAqeSogYXJlIHRoZSBzYW1lIG9iamVjdC4gICJ4IGlzIG5vdCB5IlxueWllbGRzIHRoZSBpbnZlcnNlIHRydXRoIHZhbHVlLiBbNF1cbicsCi0gJ2NvbXBvdW5kJzogJ1xuQ29tcG91bmQgc3RhdGVtZW50c1xuKioqKioqKioqKioqKioqKioqKlxuXG5Db21wb3VuZCBzdGF0ZW1lbnRzIGNvbnRhaW4gKGdyb3VwcyBvZikgb3RoZXIgc3RhdGVtZW50czsgdGhleSBhZmZlY3Rcbm9yIGNvbnRyb2wgdGhlIGV4ZWN1dGlvbiBvZiB0aG9zZSBvdGhlciBzdGF0ZW1lbnRzIGluIHNvbWUgd2F5LiAgSW5cbmdlbmVyYWwsIGNvbXBvdW5kIHN0YXRlbWVudHMgc3BhbiBtdWx0aXBsZSBsaW5lcywgYWx0aG91Z2ggaW4gc2ltcGxlXG5pbmNhcm5hdGlvbnMgYSB3aG9sZSBjb21wb3VuZCBzdGF0ZW1lbnQgbWF5IGJlIGNvbnRhaW5lZCBpbiBvbmUgbGluZS5cblxuVGhlICJpZiIsICJ3aGlsZSIgYW5kICJmb3IiIHN0YXRlbWVudHMgaW1wbGVtZW50IHRyYWRpdGlvbmFsIGNvbnRyb2xcbmZsb3cgY29uc3RydWN0cy4gICJ0cnkiIHNwZWNpZmllcyBleGNlcHRpb24gaGFuZGxlcnMgYW5kL29yIGNsZWFudXBcbmNvZGUgZm9yIGEgZ3JvdXAgb2Ygc3RhdGVtZW50cywgd2hpbGUgdGhlICJ3aXRoIiBzdGF0ZW1lbnQgYWxsb3dzIHRoZVxuZXhlY3V0aW9uIG9mIGluaXRpYWxpemF0aW9uIGFuZCBmaW5hbGl6YXRpb24gY29kZSBhcm91bmQgYSBibG9jayBvZlxuY29kZS4gIEZ1bmN0aW9uIGFuZCBjbGFzcyBkZWZpbml0aW9ucyBhcmUgYWxzbyBzeW50YWN0aWNhbGx5IGNvbXBvdW5kXG5zdGF0ZW1lbnRzLlxuXG5Db21wb3VuZCBzdGF0ZW1lbnRzIGNvbnNpc3Qgb2Ygb25lIG9yIG1vcmUgXCdjbGF1c2VzLlwnICBBIGNsYXVzZVxuY29uc2lzdHMgb2YgYSBoZWFkZXIgYW5kIGEgXCdzdWl0ZS5cJyAgVGhlIGNsYXVzZSBoZWFkZXJzIG9mIGFcbnBhcnRpY3VsYXIgY29tcG91bmQgc3RhdGVtZW50IGFyZSBhbGwgYXQgdGhlIHNhbWUgaW5kZW50YXRpb24gbGV2ZWwuXG5FYWNoIGNsYXVzZSBoZWFkZXIgYmVnaW5zIHdpdGggYSB1bmlxdWVseSBpZGVudGlmeWluZyBrZXl3b3JkIGFuZCBlbmRzXG53aXRoIGEgY29sb24uICBBIHN1aXRlIGlzIGEgZ3JvdXAgb2Ygc3RhdGVtZW50cyBjb250cm9sbGVkIGJ5IGFcbmNsYXVzZS4gIEEgc3VpdGUgY2FuIGJlIG9uZSBvciBtb3JlIHNlbWljb2xvbi1zZXBhcmF0ZWQgc2ltcGxlXG5zdGF0ZW1lbnRzIG9uIHRoZSBzYW1lIGxpbmUgYXMgdGhlIGhlYWRlciwgZm9sbG93aW5nIHRoZSBoZWFkZXJcJ3NcbmNvbG9uLCBvciBpdCBjYW4gYmUgb25lIG9yIG1vcmUgaW5kZW50ZWQgc3RhdGVtZW50cyBvbiBzdWJzZXF1ZW50XG5saW5lcy4gIE9ubHkgdGhlIGxhdHRlciBmb3JtIG9mIHN1aXRlIGNhbiBjb250YWluIG5lc3RlZCBjb21wb3VuZFxuc3RhdGVtZW50czsgdGhlIGZvbGxvd2luZyBpcyBpbGxlZ2FsLCBtb3N0bHkgYmVjYXVzZSBpdCB3b3VsZG5cJ3QgYmVcbmNsZWFyIHRvIHdoaWNoICJpZiIgY2xhdXNlIGEgZm9sbG93aW5nICJlbHNlIiBjbGF1c2Ugd291bGQgYmVsb25nOlxuXG4gICBpZiB0ZXN0MTogaWYgdGVzdDI6IHByaW50KHgpXG5cbkFsc28gbm90ZSB0aGF0IHRoZSBzZW1pY29sb24gYmluZHMgdGlnaHRlciB0aGFuIHRoZSBjb2xvbiBpbiB0aGlzXG5jb250ZXh0LCBzbyB0aGF0IGluIHRoZSBmb2xsb3dpbmcgZXhhbXBsZSwgZWl0aGVyIGFsbCBvciBub25lIG9mIHRoZVxuInByaW50KCkiIGNhbGxzIGFyZSBleGVjdXRlZDpcblxuICAgaWYgeCA8IHkgPCB6OiBwcmludCh4KTsgcHJpbnQoeSk7IHByaW50KHopXG5cblN1bW1hcml6aW5nOlxuXG4gICBjb21wb3VuZF9zdG10IDo6PSBpZl9zdG10XG4gICAgICAgICAgICAgICAgICAgICB8IHdoaWxlX3N0bXRcbiAgICAgICAgICAgICAgICAgICAgIHwgZm9yX3N0bXRcbiAgICAgICAgICAgICAgICAgICAgIHwgdHJ5X3N0bXRcbiAgICAgICAgICAgICAgICAgICAgIHwgd2l0aF9zdG10XG4gICAgICAgICAgICAgICAgICAgICB8IGZ1bmNkZWZcbiAgICAgICAgICAgICAgICAgICAgIHwgY2xhc3NkZWZcbiAgIHN1aXRlICAgICAgICAgOjo9IHN0bXRfbGlzdCBORVdMSU5FIHwgTkVXTElORSBJTkRFTlQgc3RhdGVtZW50KyBERURFTlRcbiAgIHN0YXRlbWVudCAgICAgOjo9IHN0bXRfbGlzdCBORVdMSU5FIHwgY29tcG91bmRfc3RtdFxuICAgc3RtdF9saXN0ICAgICA6Oj0gc2ltcGxlX3N0bXQgKCI7IiBzaW1wbGVfc3RtdCkqIFsiOyJdXG5cbk5vdGUgdGhhdCBzdGF0ZW1lbnRzIGFsd2F5cyBlbmQgaW4gYSAiTkVXTElORSIgcG9zc2libHkgZm9sbG93ZWQgYnkgYVxuIkRFREVOVCIuICBBbHNvIG5vdGUgdGhhdCBvcHRpb25hbCBjb250aW51YXRpb24gY2xhdXNlcyBhbHdheXMgYmVnaW5cbndpdGggYSBrZXl3b3JkIHRoYXQgY2Fubm90IHN0YXJ0IGEgc3RhdGVtZW50LCB0aHVzIHRoZXJlIGFyZSBub1xuYW1iaWd1aXRpZXMgKHRoZSBcJ2RhbmdsaW5nICJlbHNlIlwnIHByb2JsZW0gaXMgc29sdmVkIGluIFB5dGhvbiBieVxucmVxdWlyaW5nIG5lc3RlZCAiaWYiIHN0YXRlbWVudHMgdG8gYmUgaW5kZW50ZWQpLlxuXG5UaGUgZm9ybWF0dGluZyBvZiB0aGUgZ3JhbW1hciBydWxlcyBpbiB0aGUgZm9sbG93aW5nIHNlY3Rpb25zIHBsYWNlc1xuZWFjaCBjbGF1c2Ugb24gYSBzZXBhcmF0ZSBsaW5lIGZvciBjbGFyaXR5LlxuXG5cblRoZSAiaWYiIHN0YXRlbWVudFxuPT09PT09PT09PT09PT09PT09XG5cblRoZSAiaWYiIHN0YXRlbWVudCBpcyB1c2VkIGZvciBjb25kaXRpb25hbCBleGVjdXRpb246XG5cbiAgIGlmX3N0bXQgOjo9ICJpZiIgZXhwcmVzc2lvbiAiOiIgc3VpdGVcbiAgICAgICAgICAgICAgICggImVsaWYiIGV4cHJlc3Npb24gIjoiIHN1aXRlICkqXG4gICAgICAgICAgICAgICBbImVsc2UiICI6IiBzdWl0ZV1cblxuSXQgc2VsZWN0cyBleGFjdGx5IG9uZSBvZiB0aGUgc3VpdGVzIGJ5IGV2YWx1YXRpbmcgdGhlIGV4cHJlc3Npb25zIG9uZVxuYnkgb25lIHVudGlsIG9uZSBpcyBmb3VuZCB0byBiZSB0cnVlIChzZWUgc2VjdGlvbiAqQm9vbGVhbiBvcGVyYXRpb25zKlxuZm9yIHRoZSBkZWZpbml0aW9uIG9mIHRydWUgYW5kIGZhbHNlKTsgdGhlbiB0aGF0IHN1aXRlIGlzIGV4ZWN1dGVkXG4oYW5kIG5vIG90aGVyIHBhcnQgb2YgdGhlICJpZiIgc3RhdGVtZW50IGlzIGV4ZWN1dGVkIG9yIGV2YWx1YXRlZCkuXG5JZiBhbGwgZXhwcmVzc2lvbnMgYXJlIGZhbHNlLCB0aGUgc3VpdGUgb2YgdGhlICJlbHNlIiBjbGF1c2UsIGlmXG5wcmVzZW50LCBpcyBleGVjdXRlZC5cblxuXG5UaGUgIndoaWxlIiBzdGF0ZW1lbnRcbj09PT09PT09PT09PT09PT09PT09PVxuXG5UaGUgIndoaWxlIiBzdGF0ZW1lbnQgaXMgdXNlZCBmb3IgcmVwZWF0ZWQgZXhlY3V0aW9uIGFzIGxvbmcgYXMgYW5cbmV4cHJlc3Npb24gaXMgdHJ1ZTpcblxuICAgd2hpbGVfc3RtdCA6Oj0gIndoaWxlIiBleHByZXNzaW9uICI6IiBzdWl0ZVxuICAgICAgICAgICAgICAgICAgWyJlbHNlIiAiOiIgc3VpdGVdXG5cblRoaXMgcmVwZWF0ZWRseSB0ZXN0cyB0aGUgZXhwcmVzc2lvbiBhbmQsIGlmIGl0IGlzIHRydWUsIGV4ZWN1dGVzIHRoZVxuZmlyc3Qgc3VpdGU7IGlmIHRoZSBleHByZXNzaW9uIGlzIGZhbHNlICh3aGljaCBtYXkgYmUgdGhlIGZpcnN0IHRpbWVcbml0IGlzIHRlc3RlZCkgdGhlIHN1aXRlIG9mIHRoZSAiZWxzZSIgY2xhdXNlLCBpZiBwcmVzZW50LCBpcyBleGVjdXRlZFxuYW5kIHRoZSBsb29wIHRlcm1pbmF0ZXMuXG5cbkEgImJyZWFrIiBzdGF0ZW1lbnQgZXhlY3V0ZWQgaW4gdGhlIGZpcnN0IHN1aXRlIHRlcm1pbmF0ZXMgdGhlIGxvb3BcbndpdGhvdXQgZXhlY3V0aW5nIHRoZSAiZWxzZSIgY2xhdXNlXCdzIHN1aXRlLiAgQSAiY29udGludWUiIHN0YXRlbWVudFxuZXhlY3V0ZWQgaW4gdGhlIGZpcnN0IHN1aXRlIHNraXBzIHRoZSByZXN0IG9mIHRoZSBzdWl0ZSBhbmQgZ29lcyBiYWNrXG50byB0ZXN0aW5nIHRoZSBleHByZXNzaW9uLlxuXG5cblRoZSAiZm9yIiBzdGF0ZW1lbnRcbj09PT09PT09PT09PT09PT09PT1cblxuVGhlICJmb3IiIHN0YXRlbWVudCBpcyB1c2VkIHRvIGl0ZXJhdGUgb3ZlciB0aGUgZWxlbWVudHMgb2YgYSBzZXF1ZW5jZVxuKHN1Y2ggYXMgYSBzdHJpbmcsIHR1cGxlIG9yIGxpc3QpIG9yIG90aGVyIGl0ZXJhYmxlIG9iamVjdDpcblxuICAgZm9yX3N0bXQgOjo9ICJmb3IiIHRhcmdldF9saXN0ICJpbiIgZXhwcmVzc2lvbl9saXN0ICI6IiBzdWl0ZVxuICAgICAgICAgICAgICAgIFsiZWxzZSIgIjoiIHN1aXRlXVxuXG5UaGUgZXhwcmVzc2lvbiBsaXN0IGlzIGV2YWx1YXRlZCBvbmNlOyBpdCBzaG91bGQgeWllbGQgYW4gaXRlcmFibGVcbm9iamVjdC4gIEFuIGl0ZXJhdG9yIGlzIGNyZWF0ZWQgZm9yIHRoZSByZXN1bHQgb2YgdGhlXG4iZXhwcmVzc2lvbl9saXN0Ii4gIFRoZSBzdWl0ZSBpcyB0aGVuIGV4ZWN1dGVkIG9uY2UgZm9yIGVhY2ggaXRlbVxucHJvdmlkZWQgYnkgdGhlIGl0ZXJhdG9yLCBpbiB0aGUgb3JkZXIgb2YgYXNjZW5kaW5nIGluZGljZXMuICBFYWNoXG5pdGVtIGluIHR1cm4gaXMgYXNzaWduZWQgdG8gdGhlIHRhcmdldCBsaXN0IHVzaW5nIHRoZSBzdGFuZGFyZCBydWxlc1xuZm9yIGFzc2lnbm1lbnRzIChzZWUgKkFzc2lnbm1lbnQgc3RhdGVtZW50cyopLCBhbmQgdGhlbiB0aGUgc3VpdGUgaXNcbmV4ZWN1dGVkLiAgV2hlbiB0aGUgaXRlbXMgYXJlIGV4aGF1c3RlZCAod2hpY2ggaXMgaW1tZWRpYXRlbHkgd2hlbiB0aGVcbnNlcXVlbmNlIGlzIGVtcHR5IG9yIGFuIGl0ZXJhdG9yIHJhaXNlcyBhICJTdG9wSXRlcmF0aW9uIiBleGNlcHRpb24pLFxudGhlIHN1aXRlIGluIHRoZSAiZWxzZSIgY2xhdXNlLCBpZiBwcmVzZW50LCBpcyBleGVjdXRlZCwgYW5kIHRoZSBsb29wXG50ZXJtaW5hdGVzLlxuXG5BICJicmVhayIgc3RhdGVtZW50IGV4ZWN1dGVkIGluIHRoZSBmaXJzdCBzdWl0ZSB0ZXJtaW5hdGVzIHRoZSBsb29wXG53aXRob3V0IGV4ZWN1dGluZyB0aGUgImVsc2UiIGNsYXVzZVwncyBzdWl0ZS4gIEEgImNvbnRpbnVlIiBzdGF0ZW1lbnRcbmV4ZWN1dGVkIGluIHRoZSBmaXJzdCBzdWl0ZSBza2lwcyB0aGUgcmVzdCBvZiB0aGUgc3VpdGUgYW5kIGNvbnRpbnVlc1xud2l0aCB0aGUgbmV4dCBpdGVtLCBvciB3aXRoIHRoZSAiZWxzZSIgY2xhdXNlIGlmIHRoZXJlIHdhcyBubyBuZXh0XG5pdGVtLlxuXG5UaGUgc3VpdGUgbWF5IGFzc2lnbiB0byB0aGUgdmFyaWFibGUocykgaW4gdGhlIHRhcmdldCBsaXN0OyB0aGlzIGRvZXNcbm5vdCBhZmZlY3QgdGhlIG5leHQgaXRlbSBhc3NpZ25lZCB0byBpdC5cblxuTmFtZXMgaW4gdGhlIHRhcmdldCBsaXN0IGFyZSBub3QgZGVsZXRlZCB3aGVuIHRoZSBsb29wIGlzIGZpbmlzaGVkLFxuYnV0IGlmIHRoZSBzZXF1ZW5jZSBpcyBlbXB0eSwgaXQgd2lsbCBub3QgaGF2ZSBiZWVuIGFzc2lnbmVkIHRvIGF0IGFsbFxuYnkgdGhlIGxvb3AuICBIaW50OiB0aGUgYnVpbHQtaW4gZnVuY3Rpb24gInJhbmdlKCkiIHJldHVybnMgYW5cbml0ZXJhdG9yIG9mIGludGVnZXJzIHN1aXRhYmxlIHRvIGVtdWxhdGUgdGhlIGVmZmVjdCBvZiBQYXNjYWxcJ3MgImZvciBpXG46PSBhIHRvIGIgZG8iOyBlLmcuLCAibGlzdChyYW5nZSgzKSkiIHJldHVybnMgdGhlIGxpc3QgIlswLCAxLCAyXSIuXG5cbk5vdGU6IFRoZXJlIGlzIGEgc3VidGxldHkgd2hlbiB0aGUgc2VxdWVuY2UgaXMgYmVpbmcgbW9kaWZpZWQgYnkgdGhlXG4gIGxvb3AgKHRoaXMgY2FuIG9ubHkgb2NjdXIgZm9yIG11dGFibGUgc2VxdWVuY2VzLCBpLmUuIGxpc3RzKS4gIEFuXG4gIGludGVybmFsIGNvdW50ZXIgaXMgdXNlZCB0byBrZWVwIHRyYWNrIG9mIHdoaWNoIGl0ZW0gaXMgdXNlZCBuZXh0LFxuICBhbmQgdGhpcyBpcyBpbmNyZW1lbnRlZCBvbiBlYWNoIGl0ZXJhdGlvbi4gIFdoZW4gdGhpcyBjb3VudGVyIGhhc1xuICByZWFjaGVkIHRoZSBsZW5ndGggb2YgdGhlIHNlcXVlbmNlIHRoZSBsb29wIHRlcm1pbmF0ZXMuICBUaGlzIG1lYW5zXG4gIHRoYXQgaWYgdGhlIHN1aXRlIGRlbGV0ZXMgdGhlIGN1cnJlbnQgKG9yIGEgcHJldmlvdXMpIGl0ZW0gZnJvbSB0aGVcbiAgc2VxdWVuY2UsIHRoZSBuZXh0IGl0ZW0gd2lsbCBiZSBza2lwcGVkIChzaW5jZSBpdCBnZXRzIHRoZSBpbmRleCBvZlxuICB0aGUgY3VycmVudCBpdGVtIHdoaWNoIGhhcyBhbHJlYWR5IGJlZW4gdHJlYXRlZCkuICBMaWtld2lzZSwgaWYgdGhlXG4gIHN1aXRlIGluc2VydHMgYW4gaXRlbSBpbiB0aGUgc2VxdWVuY2UgYmVmb3JlIHRoZSBjdXJyZW50IGl0ZW0sIHRoZVxuICBjdXJyZW50IGl0ZW0gd2lsbCBiZSB0cmVhdGVkIGFnYWluIHRoZSBuZXh0IHRpbWUgdGhyb3VnaCB0aGUgbG9vcC5cbiAgVGhpcyBjYW4gbGVhZCB0byBuYXN0eSBidWdzIHRoYXQgY2FuIGJlIGF2b2lkZWQgYnkgbWFraW5nIGFcbiAgdGVtcG9yYXJ5IGNvcHkgdXNpbmcgYSBzbGljZSBvZiB0aGUgd2hvbGUgc2VxdWVuY2UsIGUuZy4sXG5cbiAgICAgZm9yIHggaW4gYVs6XTpcbiAgICAgICAgIGlmIHggPCAwOiBhLnJlbW92ZSh4KVxuXG5cblRoZSAidHJ5IiBzdGF0ZW1lbnRcbj09PT09PT09PT09PT09PT09PT1cblxuVGhlICJ0cnkiIHN0YXRlbWVudCBzcGVjaWZpZXMgZXhjZXB0aW9uIGhhbmRsZXJzIGFuZC9vciBjbGVhbnVwIGNvZGVcbmZvciBhIGdyb3VwIG9mIHN0YXRlbWVudHM6XG5cbiAgIHRyeV9zdG10ICA6Oj0gdHJ5MV9zdG10IHwgdHJ5Ml9zdG10XG4gICB0cnkxX3N0bXQgOjo9ICJ0cnkiICI6IiBzdWl0ZVxuICAgICAgICAgICAgICAgICAoImV4Y2VwdCIgW2V4cHJlc3Npb24gWyJhcyIgdGFyZ2V0XV0gIjoiIHN1aXRlKStcbiAgICAgICAgICAgICAgICAgWyJlbHNlIiAiOiIgc3VpdGVdXG4gICAgICAgICAgICAgICAgIFsiZmluYWxseSIgIjoiIHN1aXRlXVxuICAgdHJ5Ml9zdG10IDo6PSAidHJ5IiAiOiIgc3VpdGVcbiAgICAgICAgICAgICAgICAgImZpbmFsbHkiICI6IiBzdWl0ZVxuXG5UaGUgImV4Y2VwdCIgY2xhdXNlKHMpIHNwZWNpZnkgb25lIG9yIG1vcmUgZXhjZXB0aW9uIGhhbmRsZXJzLiBXaGVuIG5vXG5leGNlcHRpb24gb2NjdXJzIGluIHRoZSAidHJ5IiBjbGF1c2UsIG5vIGV4Y2VwdGlvbiBoYW5kbGVyIGlzXG5leGVjdXRlZC4gV2hlbiBhbiBleGNlcHRpb24gb2NjdXJzIGluIHRoZSAidHJ5IiBzdWl0ZSwgYSBzZWFyY2ggZm9yIGFuXG5leGNlcHRpb24gaGFuZGxlciBpcyBzdGFydGVkLiAgVGhpcyBzZWFyY2ggaW5zcGVjdHMgdGhlIGV4Y2VwdCBjbGF1c2VzXG5pbiB0dXJuIHVudGlsIG9uZSBpcyBmb3VuZCB0aGF0IG1hdGNoZXMgdGhlIGV4Y2VwdGlvbi4gIEFuIGV4cHJlc3Npb24tXG5sZXNzIGV4Y2VwdCBjbGF1c2UsIGlmIHByZXNlbnQsIG11c3QgYmUgbGFzdDsgaXQgbWF0Y2hlcyBhbnlcbmV4Y2VwdGlvbi4gIEZvciBhbiBleGNlcHQgY2xhdXNlIHdpdGggYW4gZXhwcmVzc2lvbiwgdGhhdCBleHByZXNzaW9uXG5pcyBldmFsdWF0ZWQsIGFuZCB0aGUgY2xhdXNlIG1hdGNoZXMgdGhlIGV4Y2VwdGlvbiBpZiB0aGUgcmVzdWx0aW5nXG5vYmplY3QgaXMgImNvbXBhdGlibGUiIHdpdGggdGhlIGV4Y2VwdGlvbi4gIEFuIG9iamVjdCBpcyBjb21wYXRpYmxlXG53aXRoIGFuIGV4Y2VwdGlvbiBpZiBpdCBpcyB0aGUgY2xhc3Mgb3IgYSBiYXNlIGNsYXNzIG9mIHRoZSBleGNlcHRpb25cbm9iamVjdCBvciBhIHR1cGxlIGNvbnRhaW5pbmcgYW4gaXRlbSBjb21wYXRpYmxlIHdpdGggdGhlIGV4Y2VwdGlvbi5cblxuSWYgbm8gZXhjZXB0IGNsYXVzZSBtYXRjaGVzIHRoZSBleGNlcHRpb24sIHRoZSBzZWFyY2ggZm9yIGFuIGV4Y2VwdGlvblxuaGFuZGxlciBjb250aW51ZXMgaW4gdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIG9uIHRoZSBpbnZvY2F0aW9uIHN0YWNrLlxuWzFdXG5cbklmIHRoZSBldmFsdWF0aW9uIG9mIGFuIGV4cHJlc3Npb24gaW4gdGhlIGhlYWRlciBvZiBhbiBleGNlcHQgY2xhdXNlXG5yYWlzZXMgYW4gZXhjZXB0aW9uLCB0aGUgb3JpZ2luYWwgc2VhcmNoIGZvciBhIGhhbmRsZXIgaXMgY2FuY2VsZWQgYW5kXG5hIHNlYXJjaCBzdGFydHMgZm9yIHRoZSBuZXcgZXhjZXB0aW9uIGluIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCBvblxudGhlIGNhbGwgc3RhY2sgKGl0IGlzIHRyZWF0ZWQgYXMgaWYgdGhlIGVudGlyZSAidHJ5IiBzdGF0ZW1lbnQgcmFpc2VkXG50aGUgZXhjZXB0aW9uKS5cblxuV2hlbiBhIG1hdGNoaW5nIGV4Y2VwdCBjbGF1c2UgaXMgZm91bmQsIHRoZSBleGNlcHRpb24gaXMgYXNzaWduZWQgdG9cbnRoZSB0YXJnZXQgc3BlY2lmaWVkIGFmdGVyIHRoZSAiYXMiIGtleXdvcmQgaW4gdGhhdCBleGNlcHQgY2xhdXNlLCBpZlxucHJlc2VudCwgYW5kIHRoZSBleGNlcHQgY2xhdXNlXCdzIHN1aXRlIGlzIGV4ZWN1dGVkLiAgQWxsIGV4Y2VwdFxuY2xhdXNlcyBtdXN0IGhhdmUgYW4gZXhlY3V0YWJsZSBibG9jay4gIFdoZW4gdGhlIGVuZCBvZiB0aGlzIGJsb2NrIGlzXG5yZWFjaGVkLCBleGVjdXRpb24gY29udGludWVzIG5vcm1hbGx5IGFmdGVyIHRoZSBlbnRpcmUgdHJ5IHN0YXRlbWVudC5cbihUaGlzIG1lYW5zIHRoYXQgaWYgdHdvIG5lc3RlZCBoYW5kbGVycyBleGlzdCBmb3IgdGhlIHNhbWUgZXhjZXB0aW9uLFxuYW5kIHRoZSBleGNlcHRpb24gb2NjdXJzIGluIHRoZSB0cnkgY2xhdXNlIG9mIHRoZSBpbm5lciBoYW5kbGVyLCB0aGVcbm91dGVyIGhhbmRsZXIgd2lsbCBub3QgaGFuZGxlIHRoZSBleGNlcHRpb24uKVxuXG5XaGVuIGFuIGV4Y2VwdGlvbiBoYXMgYmVlbiBhc3NpZ25lZCB1c2luZyAiYXMgdGFyZ2V0IiwgaXQgaXMgY2xlYXJlZFxuYXQgdGhlIGVuZCBvZiB0aGUgZXhjZXB0IGNsYXVzZS4gIFRoaXMgaXMgYXMgaWZcblxuICAgZXhjZXB0IEUgYXMgTjpcbiAgICAgICBmb29cblxud2FzIHRyYW5zbGF0ZWQgdG9cblxuICAgZXhjZXB0IEUgYXMgTjpcbiAgICAgICB0cnk6XG4gICAgICAgICAgIGZvb1xuICAgICAgIGZpbmFsbHk6XG4gICAgICAgICAgIGRlbCBOXG5cblRoaXMgbWVhbnMgdGhlIGV4Y2VwdGlvbiBtdXN0IGJlIGFzc2lnbmVkIHRvIGEgZGlmZmVyZW50IG5hbWUgdG8gYmVcbmFibGUgdG8gcmVmZXIgdG8gaXQgYWZ0ZXIgdGhlIGV4Y2VwdCBjbGF1c2UuICBFeGNlcHRpb25zIGFyZSBjbGVhcmVkXG5iZWNhdXNlIHdpdGggdGhlIHRyYWNlYmFjayBhdHRhY2hlZCB0byB0aGVtLCB0aGV5IGZvcm0gYSByZWZlcmVuY2VcbmN5Y2xlIHdpdGggdGhlIHN0YWNrIGZyYW1lLCBrZWVwaW5nIGFsbCBsb2NhbHMgaW4gdGhhdCBmcmFtZSBhbGl2ZVxudW50aWwgdGhlIG5leHQgZ2FyYmFnZSBjb2xsZWN0aW9uIG9jY3Vycy5cblxuQmVmb3JlIGFuIGV4Y2VwdCBjbGF1c2VcJ3Mgc3VpdGUgaXMgZXhlY3V0ZWQsIGRldGFpbHMgYWJvdXQgdGhlXG5leGNlcHRpb24gYXJlIHN0b3JlZCBpbiB0aGUgInN5cyIgbW9kdWxlIGFuZCBjYW4gYmUgYWNjZXNzIHZpYVxuInN5cy5leGNfaW5mbygpIi4gInN5cy5leGNfaW5mbygpIiByZXR1cm5zIGEgMy10dXBsZSBjb25zaXN0aW5nIG9mIHRoZVxuZXhjZXB0aW9uIGNsYXNzLCB0aGUgZXhjZXB0aW9uIGluc3RhbmNlIGFuZCBhIHRyYWNlYmFjayBvYmplY3QgKHNlZVxuc2VjdGlvbiAqVGhlIHN0YW5kYXJkIHR5cGUgaGllcmFyY2h5KikgaWRlbnRpZnlpbmcgdGhlIHBvaW50IGluIHRoZVxucHJvZ3JhbSB3aGVyZSB0aGUgZXhjZXB0aW9uIG9jY3VycmVkLiAgInN5cy5leGNfaW5mbygpIiB2YWx1ZXMgYXJlXG5yZXN0b3JlZCB0byB0aGVpciBwcmV2aW91cyB2YWx1ZXMgKGJlZm9yZSB0aGUgY2FsbCkgd2hlbiByZXR1cm5pbmdcbmZyb20gYSBmdW5jdGlvbiB0aGF0IGhhbmRsZWQgYW4gZXhjZXB0aW9uLlxuXG5UaGUgb3B0aW9uYWwgImVsc2UiIGNsYXVzZSBpcyBleGVjdXRlZCBpZiBhbmQgd2hlbiBjb250cm9sIGZsb3dzIG9mZlxudGhlIGVuZCBvZiB0aGUgInRyeSIgY2xhdXNlLiBbMl0gRXhjZXB0aW9ucyBpbiB0aGUgImVsc2UiIGNsYXVzZSBhcmVcbm5vdCBoYW5kbGVkIGJ5IHRoZSBwcmVjZWRpbmcgImV4Y2VwdCIgY2xhdXNlcy5cblxuSWYgImZpbmFsbHkiIGlzIHByZXNlbnQsIGl0IHNwZWNpZmllcyBhIFwnY2xlYW51cFwnIGhhbmRsZXIuICBUaGUgInRyeSJcbmNsYXVzZSBpcyBleGVjdXRlZCwgaW5jbHVkaW5nIGFueSAiZXhjZXB0IiBhbmQgImVsc2UiIGNsYXVzZXMuICBJZiBhblxuZXhjZXB0aW9uIG9jY3VycyBpbiBhbnkgb2YgdGhlIGNsYXVzZXMgYW5kIGlzIG5vdCBoYW5kbGVkLCB0aGVcbmV4Y2VwdGlvbiBpcyB0ZW1wb3JhcmlseSBzYXZlZC4gVGhlICJmaW5hbGx5IiBjbGF1c2UgaXMgZXhlY3V0ZWQuICBJZlxudGhlcmUgaXMgYSBzYXZlZCBleGNlcHRpb24gaXQgaXMgcmUtcmFpc2VkIGF0IHRoZSBlbmQgb2YgdGhlICJmaW5hbGx5IlxuY2xhdXNlLiAgSWYgdGhlICJmaW5hbGx5IiBjbGF1c2UgcmFpc2VzIGFub3RoZXIgZXhjZXB0aW9uLCB0aGUgc2F2ZWRcbmV4Y2VwdGlvbiBpcyBzZXQgYXMgdGhlIGNvbnRleHQgb2YgdGhlIG5ldyBleGNlcHRpb24uIElmIHRoZSAiZmluYWxseSJcbmNsYXVzZSBleGVjdXRlcyBhICJyZXR1cm4iIG9yICJicmVhayIgc3RhdGVtZW50LCB0aGUgc2F2ZWQgZXhjZXB0aW9uXG5pcyBkaXNjYXJkZWQ6XG5cbiAgIGRlZiBmKCk6XG4gICAgICAgdHJ5OlxuICAgICAgICAgICAxLzBcbiAgICAgICBmaW5hbGx5OlxuICAgICAgICAgICByZXR1cm4gNDJcblxuICAgPj4+IGYoKVxuICAgNDJcblxuVGhlIGV4Y2VwdGlvbiBpbmZvcm1hdGlvbiBpcyBub3QgYXZhaWxhYmxlIHRvIHRoZSBwcm9ncmFtIGR1cmluZ1xuZXhlY3V0aW9uIG9mIHRoZSAiZmluYWxseSIgY2xhdXNlLlxuXG5XaGVuIGEgInJldHVybiIsICJicmVhayIgb3IgImNvbnRpbnVlIiBzdGF0ZW1lbnQgaXMgZXhlY3V0ZWQgaW4gdGhlXG4idHJ5IiBzdWl0ZSBvZiBhICJ0cnkiLi4uImZpbmFsbHkiIHN0YXRlbWVudCwgdGhlICJmaW5hbGx5IiBjbGF1c2UgaXNcbmFsc28gZXhlY3V0ZWQgXCdvbiB0aGUgd2F5IG91dC5cJyBBICJjb250aW51ZSIgc3RhdGVtZW50IGlzIGlsbGVnYWwgaW5cbnRoZSAiZmluYWxseSIgY2xhdXNlLiAoVGhlIHJlYXNvbiBpcyBhIHByb2JsZW0gd2l0aCB0aGUgY3VycmVudFxuaW1wbGVtZW50YXRpb24gLS0tIHRoaXMgcmVzdHJpY3Rpb24gbWF5IGJlIGxpZnRlZCBpbiB0aGUgZnV0dXJlKS5cblxuQWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvbiBleGNlcHRpb25zIGNhbiBiZSBmb3VuZCBpbiBzZWN0aW9uXG4qRXhjZXB0aW9ucyosIGFuZCBpbmZvcm1hdGlvbiBvbiB1c2luZyB0aGUgInJhaXNlIiBzdGF0ZW1lbnQgdG9cbmdlbmVyYXRlIGV4Y2VwdGlvbnMgbWF5IGJlIGZvdW5kIGluIHNlY3Rpb24gKlRoZSByYWlzZSBzdGF0ZW1lbnQqLlxuXG5cblRoZSAid2l0aCIgc3RhdGVtZW50XG49PT09PT09PT09PT09PT09PT09PVxuXG5UaGUgIndpdGgiIHN0YXRlbWVudCBpcyB1c2VkIHRvIHdyYXAgdGhlIGV4ZWN1dGlvbiBvZiBhIGJsb2NrIHdpdGhcbm1ldGhvZHMgZGVmaW5lZCBieSBhIGNvbnRleHQgbWFuYWdlciAoc2VlIHNlY3Rpb24gKldpdGggU3RhdGVtZW50XG5Db250ZXh0IE1hbmFnZXJzKikuIFRoaXMgYWxsb3dzIGNvbW1vbiAidHJ5Ii4uLiJleGNlcHQiLi4uImZpbmFsbHkiXG51c2FnZSBwYXR0ZXJucyB0byBiZSBlbmNhcHN1bGF0ZWQgZm9yIGNvbnZlbmllbnQgcmV1c2UuXG5cbiAgIHdpdGhfc3RtdCA6Oj0gIndpdGgiIHdpdGhfaXRlbSAoIiwiIHdpdGhfaXRlbSkqICI6IiBzdWl0ZVxuICAgd2l0aF9pdGVtIDo6PSBleHByZXNzaW9uIFsiYXMiIHRhcmdldF1cblxuVGhlIGV4ZWN1dGlvbiBvZiB0aGUgIndpdGgiIHN0YXRlbWVudCB3aXRoIG9uZSAiaXRlbSIgcHJvY2VlZHMgYXNcbmZvbGxvd3M6XG5cbjEuIFRoZSBjb250ZXh0IGV4cHJlc3Npb24gKHRoZSBleHByZXNzaW9uIGdpdmVuIGluIHRoZSAid2l0aF9pdGVtIilcbiAgIGlzIGV2YWx1YXRlZCB0byBvYnRhaW4gYSBjb250ZXh0IG1hbmFnZXIuXG5cbjIuIFRoZSBjb250ZXh0IG1hbmFnZXJcJ3MgIl9fZXhpdF9fKCkiIGlzIGxvYWRlZCBmb3IgbGF0ZXIgdXNlLlxuXG4zLiBUaGUgY29udGV4dCBtYW5hZ2VyXCdzICJfX2VudGVyX18oKSIgbWV0aG9kIGlzIGludm9rZWQuXG5cbjQuIElmIGEgdGFyZ2V0IHdhcyBpbmNsdWRlZCBpbiB0aGUgIndpdGgiIHN0YXRlbWVudCwgdGhlIHJldHVyblxuICAgdmFsdWUgZnJvbSAiX19lbnRlcl9fKCkiIGlzIGFzc2lnbmVkIHRvIGl0LlxuXG4gICBOb3RlOiBUaGUgIndpdGgiIHN0YXRlbWVudCBndWFyYW50ZWVzIHRoYXQgaWYgdGhlICJfX2VudGVyX18oKSJcbiAgICAgbWV0aG9kIHJldHVybnMgd2l0aG91dCBhbiBlcnJvciwgdGhlbiAiX19leGl0X18oKSIgd2lsbCBhbHdheXMgYmVcbiAgICAgY2FsbGVkLiBUaHVzLCBpZiBhbiBlcnJvciBvY2N1cnMgZHVyaW5nIHRoZSBhc3NpZ25tZW50IHRvIHRoZVxuICAgICB0YXJnZXQgbGlzdCwgaXQgd2lsbCBiZSB0cmVhdGVkIHRoZSBzYW1lIGFzIGFuIGVycm9yIG9jY3VycmluZ1xuICAgICB3aXRoaW4gdGhlIHN1aXRlIHdvdWxkIGJlLiBTZWUgc3RlcCA2IGJlbG93LlxuXG41LiBUaGUgc3VpdGUgaXMgZXhlY3V0ZWQuXG5cbjYuIFRoZSBjb250ZXh0IG1hbmFnZXJcJ3MgIl9fZXhpdF9fKCkiIG1ldGhvZCBpcyBpbnZva2VkLiAgSWYgYW5cbiAgIGV4Y2VwdGlvbiBjYXVzZWQgdGhlIHN1aXRlIHRvIGJlIGV4aXRlZCwgaXRzIHR5cGUsIHZhbHVlLCBhbmRcbiAgIHRyYWNlYmFjayBhcmUgcGFzc2VkIGFzIGFyZ3VtZW50cyB0byAiX19leGl0X18oKSIuIE90aGVyd2lzZSwgdGhyZWVcbiAgICJOb25lIiBhcmd1bWVudHMgYXJlIHN1cHBsaWVkLlxuXG4gICBJZiB0aGUgc3VpdGUgd2FzIGV4aXRlZCBkdWUgdG8gYW4gZXhjZXB0aW9uLCBhbmQgdGhlIHJldHVybiB2YWx1ZVxuICAgZnJvbSB0aGUgIl9fZXhpdF9fKCkiIG1ldGhvZCB3YXMgZmFsc2UsIHRoZSBleGNlcHRpb24gaXMgcmVyYWlzZWQuXG4gICBJZiB0aGUgcmV0dXJuIHZhbHVlIHdhcyB0cnVlLCB0aGUgZXhjZXB0aW9uIGlzIHN1cHByZXNzZWQsIGFuZFxuICAgZXhlY3V0aW9uIGNvbnRpbnVlcyB3aXRoIHRoZSBzdGF0ZW1lbnQgZm9sbG93aW5nIHRoZSAid2l0aCJcbiAgIHN0YXRlbWVudC5cblxuICAgSWYgdGhlIHN1aXRlIHdhcyBleGl0ZWQgZm9yIGFueSByZWFzb24gb3RoZXIgdGhhbiBhbiBleGNlcHRpb24sIHRoZVxuICAgcmV0dXJuIHZhbHVlIGZyb20gIl9fZXhpdF9fKCkiIGlzIGlnbm9yZWQsIGFuZCBleGVjdXRpb24gcHJvY2VlZHNcbiAgIGF0IHRoZSBub3JtYWwgbG9jYXRpb24gZm9yIHRoZSBraW5kIG9mIGV4aXQgdGhhdCB3YXMgdGFrZW4uXG5cbldpdGggbW9yZSB0aGFuIG9uZSBpdGVtLCB0aGUgY29udGV4dCBtYW5hZ2VycyBhcmUgcHJvY2Vzc2VkIGFzIGlmXG5tdWx0aXBsZSAid2l0aCIgc3RhdGVtZW50cyB3ZXJlIG5lc3RlZDpcblxuICAgd2l0aCBBKCkgYXMgYSwgQigpIGFzIGI6XG4gICAgICAgc3VpdGVcblxuaXMgZXF1aXZhbGVudCB0b1xuXG4gICB3aXRoIEEoKSBhcyBhOlxuICAgICAgIHdpdGggQigpIGFzIGI6XG4gICAgICAgICAgIHN1aXRlXG5cbkNoYW5nZWQgaW4gdmVyc2lvbiAzLjE6IFN1cHBvcnQgZm9yIG11bHRpcGxlIGNvbnRleHQgZXhwcmVzc2lvbnMuXG5cblNlZSBhbHNvOiAqKlBFUCAwMzQzKiogLSBUaGUgIndpdGgiIHN0YXRlbWVudFxuXG4gICAgIFRoZSBzcGVjaWZpY2F0aW9uLCBiYWNrZ3JvdW5kLCBhbmQgZXhhbXBsZXMgZm9yIHRoZSBQeXRob24gIndpdGgiXG4gICAgIHN0YXRlbWVudC5cblxuXG5GdW5jdGlvbiBkZWZpbml0aW9uc1xuPT09PT09PT09PT09PT09PT09PT1cblxuQSBmdW5jdGlvbiBkZWZpbml0aW9uIGRlZmluZXMgYSB1c2VyLWRlZmluZWQgZnVuY3Rpb24gb2JqZWN0IChzZWVcbnNlY3Rpb24gKlRoZSBzdGFuZGFyZCB0eXBlIGhpZXJhcmNoeSopOlxuXG4gICBmdW5jZGVmICAgICAgICA6Oj0gW2RlY29yYXRvcnNdICJkZWYiIGZ1bmNuYW1lICIoIiBbcGFyYW1ldGVyX2xpc3RdICIpIiBbIi0+IiBleHByZXNzaW9uXSAiOiIgc3VpdGVcbiAgIGRlY29yYXRvcnMgICAgIDo6PSBkZWNvcmF0b3IrXG4gICBkZWNvcmF0b3IgICAgICA6Oj0gIkAiIGRvdHRlZF9uYW1lIFsiKCIgW3BhcmFtZXRlcl9saXN0IFsiLCJdXSAiKSJdIE5FV0xJTkVcbiAgIGRvdHRlZF9uYW1lICAgIDo6PSBpZGVudGlmaWVyICgiLiIgaWRlbnRpZmllcikqXG4gICBwYXJhbWV0ZXJfbGlzdCA6Oj0gKGRlZnBhcmFtZXRlciAiLCIpKlxuICAgICAgICAgICAgICAgICAgICAgICggIioiIFtwYXJhbWV0ZXJdICgiLCIgZGVmcGFyYW1ldGVyKSogWyIsIiAiKioiIHBhcmFtZXRlcl1cbiAgICAgICAgICAgICAgICAgICAgICB8ICIqKiIgcGFyYW1ldGVyXG4gICAgICAgICAgICAgICAgICAgICAgfCBkZWZwYXJhbWV0ZXIgWyIsIl0gKVxuICAgcGFyYW1ldGVyICAgICAgOjo9IGlkZW50aWZpZXIgWyI6IiBleHByZXNzaW9uXVxuICAgZGVmcGFyYW1ldGVyICAgOjo9IHBhcmFtZXRlciBbIj0iIGV4cHJlc3Npb25dXG4gICBmdW5jbmFtZSAgICAgICA6Oj0gaWRlbnRpZmllclxuXG5BIGZ1bmN0aW9uIGRlZmluaXRpb24gaXMgYW4gZXhlY3V0YWJsZSBzdGF0ZW1lbnQuICBJdHMgZXhlY3V0aW9uIGJpbmRzXG50aGUgZnVuY3Rpb24gbmFtZSBpbiB0aGUgY3VycmVudCBsb2NhbCBuYW1lc3BhY2UgdG8gYSBmdW5jdGlvbiBvYmplY3RcbihhIHdyYXBwZXIgYXJvdW5kIHRoZSBleGVjdXRhYmxlIGNvZGUgZm9yIHRoZSBmdW5jdGlvbikuICBUaGlzXG5mdW5jdGlvbiBvYmplY3QgY29udGFpbnMgYSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgZ2xvYmFsIG5hbWVzcGFjZVxuYXMgdGhlIGdsb2JhbCBuYW1lc3BhY2UgdG8gYmUgdXNlZCB3aGVuIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQuXG5cblRoZSBmdW5jdGlvbiBkZWZpbml0aW9uIGRvZXMgbm90IGV4ZWN1dGUgdGhlIGZ1bmN0aW9uIGJvZHk7IHRoaXMgZ2V0c1xuZXhlY3V0ZWQgb25seSB3aGVuIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQuIFszXVxuXG5BIGZ1bmN0aW9uIGRlZmluaXRpb24gbWF5IGJlIHdyYXBwZWQgYnkgb25lIG9yIG1vcmUgKmRlY29yYXRvcipcbmV4cHJlc3Npb25zLiBEZWNvcmF0b3IgZXhwcmVzc2lvbnMgYXJlIGV2YWx1YXRlZCB3aGVuIHRoZSBmdW5jdGlvbiBpc1xuZGVmaW5lZCwgaW4gdGhlIHNjb3BlIHRoYXQgY29udGFpbnMgdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24uICBUaGVcbnJlc3VsdCBtdXN0IGJlIGEgY2FsbGFibGUsIHdoaWNoIGlzIGludm9rZWQgd2l0aCB0aGUgZnVuY3Rpb24gb2JqZWN0XG5hcyB0aGUgb25seSBhcmd1bWVudC4gVGhlIHJldHVybmVkIHZhbHVlIGlzIGJvdW5kIHRvIHRoZSBmdW5jdGlvbiBuYW1lXG5pbnN0ZWFkIG9mIHRoZSBmdW5jdGlvbiBvYmplY3QuICBNdWx0aXBsZSBkZWNvcmF0b3JzIGFyZSBhcHBsaWVkIGluXG5uZXN0ZWQgZmFzaGlvbi4gRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgY29kZVxuXG4gICBAZjEoYXJnKVxuICAgQGYyXG4gICBkZWYgZnVuYygpOiBwYXNzXG5cbmlzIGVxdWl2YWxlbnQgdG9cblxuICAgZGVmIGZ1bmMoKTogcGFzc1xuICAgZnVuYyA9IGYxKGFyZykoZjIoZnVuYykpXG5cbldoZW4gb25lIG9yIG1vcmUgKnBhcmFtZXRlcnMqIGhhdmUgdGhlIGZvcm0gKnBhcmFtZXRlciogIj0iXG4qZXhwcmVzc2lvbiosIHRoZSBmdW5jdGlvbiBpcyBzYWlkIHRvIGhhdmUgImRlZmF1bHQgcGFyYW1ldGVyIHZhbHVlcy4iXG5Gb3IgYSBwYXJhbWV0ZXIgd2l0aCBhIGRlZmF1bHQgdmFsdWUsIHRoZSBjb3JyZXNwb25kaW5nICphcmd1bWVudCogbWF5XG5iZSBvbWl0dGVkIGZyb20gYSBjYWxsLCBpbiB3aGljaCBjYXNlIHRoZSBwYXJhbWV0ZXJcJ3MgZGVmYXVsdCB2YWx1ZSBpc1xuc3Vic3RpdHV0ZWQuICBJZiBhIHBhcmFtZXRlciBoYXMgYSBkZWZhdWx0IHZhbHVlLCBhbGwgZm9sbG93aW5nXG5wYXJhbWV0ZXJzIHVwIHVudGlsIHRoZSAiIioiIiBtdXN0IGFsc28gaGF2ZSBhIGRlZmF1bHQgdmFsdWUgLS0tIHRoaXNcbmlzIGEgc3ludGFjdGljIHJlc3RyaWN0aW9uIHRoYXQgaXMgbm90IGV4cHJlc3NlZCBieSB0aGUgZ3JhbW1hci5cblxuKipEZWZhdWx0IHBhcmFtZXRlciB2YWx1ZXMgYXJlIGV2YWx1YXRlZCB3aGVuIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uXG5pcyBleGVjdXRlZC4qKiBUaGlzIG1lYW5zIHRoYXQgdGhlIGV4cHJlc3Npb24gaXMgZXZhbHVhdGVkIG9uY2UsIHdoZW5cbnRoZSBmdW5jdGlvbiBpcyBkZWZpbmVkLCBhbmQgdGhhdCB0aGUgc2FtZSAicHJlLWNvbXB1dGVkIiB2YWx1ZSBpc1xudXNlZCBmb3IgZWFjaCBjYWxsLiAgVGhpcyBpcyBlc3BlY2lhbGx5IGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHdoZW4gYVxuZGVmYXVsdCBwYXJhbWV0ZXIgaXMgYSBtdXRhYmxlIG9iamVjdCwgc3VjaCBhcyBhIGxpc3Qgb3IgYSBkaWN0aW9uYXJ5OlxuaWYgdGhlIGZ1bmN0aW9uIG1vZGlmaWVzIHRoZSBvYmplY3QgKGUuZy4gYnkgYXBwZW5kaW5nIGFuIGl0ZW0gdG8gYVxubGlzdCksIHRoZSBkZWZhdWx0IHZhbHVlIGlzIGluIGVmZmVjdCBtb2RpZmllZC4gVGhpcyBpcyBnZW5lcmFsbHkgbm90XG53aGF0IHdhcyBpbnRlbmRlZC4gIEEgd2F5IGFyb3VuZCB0aGlzIGlzIHRvIHVzZSAiTm9uZSIgYXMgdGhlIGRlZmF1bHQsXG5hbmQgZXhwbGljaXRseSB0ZXN0IGZvciBpdCBpbiB0aGUgYm9keSBvZiB0aGUgZnVuY3Rpb24sIGUuZy46XG5cbiAgIGRlZiB3aGF0c19vbl90aGVfdGVsbHkocGVuZ3Vpbj1Ob25lKTpcbiAgICAgICBpZiBwZW5ndWluIGlzIE5vbmU6XG4gICAgICAgICAgIHBlbmd1aW4gPSBbXVxuICAgICAgIHBlbmd1aW4uYXBwZW5kKCJwcm9wZXJ0eSBvZiB0aGUgem9vIilcbiAgICAgICByZXR1cm4gcGVuZ3VpblxuXG5GdW5jdGlvbiBjYWxsIHNlbWFudGljcyBhcmUgZGVzY3JpYmVkIGluIG1vcmUgZGV0YWlsIGluIHNlY3Rpb25cbipDYWxscyouIEEgZnVuY3Rpb24gY2FsbCBhbHdheXMgYXNzaWducyB2YWx1ZXMgdG8gYWxsIHBhcmFtZXRlcnNcbm1lbnRpb25lZCBpbiB0aGUgcGFyYW1ldGVyIGxpc3QsIGVpdGhlciBmcm9tIHBvc2l0aW9uIGFyZ3VtZW50cywgZnJvbVxua2V5d29yZCBhcmd1bWVudHMsIG9yIGZyb20gZGVmYXVsdCB2YWx1ZXMuICBJZiB0aGUgZm9ybVxuIiIqaWRlbnRpZmllciIiIGlzIHByZXNlbnQsIGl0IGlzIGluaXRpYWxpemVkIHRvIGEgdHVwbGUgcmVjZWl2aW5nIGFueVxuZXhjZXNzIHBvc2l0aW9uYWwgcGFyYW1ldGVycywgZGVmYXVsdGluZyB0byB0aGUgZW1wdHkgdHVwbGUuICBJZiB0aGVcbmZvcm0gIiIqKmlkZW50aWZpZXIiIiBpcyBwcmVzZW50LCBpdCBpcyBpbml0aWFsaXplZCB0byBhIG5ld1xuZGljdGlvbmFyeSByZWNlaXZpbmcgYW55IGV4Y2VzcyBrZXl3b3JkIGFyZ3VtZW50cywgZGVmYXVsdGluZyB0byBhIG5ld1xuZW1wdHkgZGljdGlvbmFyeS4gUGFyYW1ldGVycyBhZnRlciAiIioiIiBvciAiIippZGVudGlmaWVyIiIgYXJlXG5rZXl3b3JkLW9ubHkgcGFyYW1ldGVycyBhbmQgbWF5IG9ubHkgYmUgcGFzc2VkIHVzZWQga2V5d29yZCBhcmd1bWVudHMuXG5cblBhcmFtZXRlcnMgbWF5IGhhdmUgYW5ub3RhdGlvbnMgb2YgdGhlIGZvcm0gIiI6IGV4cHJlc3Npb24iIiBmb2xsb3dpbmdcbnRoZSBwYXJhbWV0ZXIgbmFtZS4gIEFueSBwYXJhbWV0ZXIgbWF5IGhhdmUgYW4gYW5ub3RhdGlvbiBldmVuIHRob3NlXG5vZiB0aGUgZm9ybSAiKmlkZW50aWZpZXIiIG9yICIqKmlkZW50aWZpZXIiLiAgRnVuY3Rpb25zIG1heSBoYXZlXG4icmV0dXJuIiBhbm5vdGF0aW9uIG9mIHRoZSBmb3JtICIiLT4gZXhwcmVzc2lvbiIiIGFmdGVyIHRoZSBwYXJhbWV0ZXJcbmxpc3QuICBUaGVzZSBhbm5vdGF0aW9ucyBjYW4gYmUgYW55IHZhbGlkIFB5dGhvbiBleHByZXNzaW9uIGFuZCBhcmVcbmV2YWx1YXRlZCB3aGVuIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uIGlzIGV4ZWN1dGVkLiAgQW5ub3RhdGlvbnMgbWF5XG5iZSBldmFsdWF0ZWQgaW4gYSBkaWZmZXJlbnQgb3JkZXIgdGhhbiB0aGV5IGFwcGVhciBpbiB0aGUgc291cmNlIGNvZGUuXG5UaGUgcHJlc2VuY2Ugb2YgYW5ub3RhdGlvbnMgZG9lcyBub3QgY2hhbmdlIHRoZSBzZW1hbnRpY3Mgb2YgYVxuZnVuY3Rpb24uICBUaGUgYW5ub3RhdGlvbiB2YWx1ZXMgYXJlIGF2YWlsYWJsZSBhcyB2YWx1ZXMgb2YgYVxuZGljdGlvbmFyeSBrZXllZCBieSB0aGUgcGFyYW1ldGVyc1wnIG5hbWVzIGluIHRoZSAiX19hbm5vdGF0aW9uc19fIlxuYXR0cmlidXRlIG9mIHRoZSBmdW5jdGlvbiBvYmplY3QuXG5cbkl0IGlzIGFsc28gcG9zc2libGUgdG8gY3JlYXRlIGFub255bW91cyBmdW5jdGlvbnMgKGZ1bmN0aW9ucyBub3QgYm91bmRcbnRvIGEgbmFtZSksIGZvciBpbW1lZGlhdGUgdXNlIGluIGV4cHJlc3Npb25zLiAgVGhpcyB1c2VzIGxhbWJkYVxuZXhwcmVzc2lvbnMsIGRlc2NyaWJlZCBpbiBzZWN0aW9uICpMYW1iZGFzKi4gIE5vdGUgdGhhdCB0aGUgbGFtYmRhXG5leHByZXNzaW9uIGlzIG1lcmVseSBhIHNob3J0aGFuZCBmb3IgYSBzaW1wbGlmaWVkIGZ1bmN0aW9uIGRlZmluaXRpb247XG5hIGZ1bmN0aW9uIGRlZmluZWQgaW4gYSAiImRlZiIiIHN0YXRlbWVudCBjYW4gYmUgcGFzc2VkIGFyb3VuZCBvclxuYXNzaWduZWQgdG8gYW5vdGhlciBuYW1lIGp1c3QgbGlrZSBhIGZ1bmN0aW9uIGRlZmluZWQgYnkgYSBsYW1iZGFcbmV4cHJlc3Npb24uICBUaGUgIiJkZWYiIiBmb3JtIGlzIGFjdHVhbGx5IG1vcmUgcG93ZXJmdWwgc2luY2UgaXRcbmFsbG93cyB0aGUgZXhlY3V0aW9uIG9mIG11bHRpcGxlIHN0YXRlbWVudHMgYW5kIGFubm90YXRpb25zLlxuXG4qKlByb2dyYW1tZXJcJ3Mgbm90ZToqKiBGdW5jdGlvbnMgYXJlIGZpcnN0LWNsYXNzIG9iamVjdHMuICBBICIiZGVmIiJcbnN0YXRlbWVudCBleGVjdXRlZCBpbnNpZGUgYSBmdW5jdGlvbiBkZWZpbml0aW9uIGRlZmluZXMgYSBsb2NhbFxuZnVuY3Rpb24gdGhhdCBjYW4gYmUgcmV0dXJuZWQgb3IgcGFzc2VkIGFyb3VuZC4gIEZyZWUgdmFyaWFibGVzIHVzZWRcbmluIHRoZSBuZXN0ZWQgZnVuY3Rpb24gY2FuIGFjY2VzcyB0aGUgbG9jYWwgdmFyaWFibGVzIG9mIHRoZSBmdW5jdGlvblxuY29udGFpbmluZyB0aGUgZGVmLiAgU2VlIHNlY3Rpb24gKk5hbWluZyBhbmQgYmluZGluZyogZm9yIGRldGFpbHMuXG5cblNlZSBhbHNvOiAqKlBFUCAzMTA3KiogLSBGdW5jdGlvbiBBbm5vdGF0aW9uc1xuXG4gICAgIFRoZSBvcmlnaW5hbCBzcGVjaWZpY2F0aW9uIGZvciBmdW5jdGlvbiBhbm5vdGF0aW9ucy5cblxuXG5DbGFzcyBkZWZpbml0aW9uc1xuPT09PT09PT09PT09PT09PT1cblxuQSBjbGFzcyBkZWZpbml0aW9uIGRlZmluZXMgYSBjbGFzcyBvYmplY3QgKHNlZSBzZWN0aW9uICpUaGUgc3RhbmRhcmRcbnR5cGUgaGllcmFyY2h5Kik6XG5cbiAgIGNsYXNzZGVmICAgIDo6PSBbZGVjb3JhdG9yc10gImNsYXNzIiBjbGFzc25hbWUgW2luaGVyaXRhbmNlXSAiOiIgc3VpdGVcbiAgIGluaGVyaXRhbmNlIDo6PSAiKCIgW3BhcmFtZXRlcl9saXN0XSAiKSJcbiAgIGNsYXNzbmFtZSAgIDo6PSBpZGVudGlmaWVyXG5cbkEgY2xhc3MgZGVmaW5pdGlvbiBpcyBhbiBleGVjdXRhYmxlIHN0YXRlbWVudC4gIFRoZSBpbmhlcml0YW5jZSBsaXN0XG51c3VhbGx5IGdpdmVzIGEgbGlzdCBvZiBiYXNlIGNsYXNzZXMgKHNlZSAqQ3VzdG9taXppbmcgY2xhc3MgY3JlYXRpb24qXG5mb3IgbW9yZSBhZHZhbmNlZCB1c2VzKSwgc28gZWFjaCBpdGVtIGluIHRoZSBsaXN0IHNob3VsZCBldmFsdWF0ZSB0byBhXG5jbGFzcyBvYmplY3Qgd2hpY2ggYWxsb3dzIHN1YmNsYXNzaW5nLiAgQ2xhc3NlcyB3aXRob3V0IGFuIGluaGVyaXRhbmNlXG5saXN0IGluaGVyaXQsIGJ5IGRlZmF1bHQsIGZyb20gdGhlIGJhc2UgY2xhc3MgIm9iamVjdCI7IGhlbmNlLFxuXG4gICBjbGFzcyBGb286XG4gICAgICAgcGFzc1xuXG5pcyBlcXVpdmFsZW50IHRvXG5cbiAgIGNsYXNzIEZvbyhvYmplY3QpOlxuICAgICAgIHBhc3NcblxuVGhlIGNsYXNzXCdzIHN1aXRlIGlzIHRoZW4gZXhlY3V0ZWQgaW4gYSBuZXcgZXhlY3V0aW9uIGZyYW1lIChzZWVcbipOYW1pbmcgYW5kIGJpbmRpbmcqKSwgdXNpbmcgYSBuZXdseSBjcmVhdGVkIGxvY2FsIG5hbWVzcGFjZSBhbmQgdGhlXG5vcmlnaW5hbCBnbG9iYWwgbmFtZXNwYWNlLiAoVXN1YWxseSwgdGhlIHN1aXRlIGNvbnRhaW5zIG1vc3RseVxuZnVuY3Rpb24gZGVmaW5pdGlvbnMuKSAgV2hlbiB0aGUgY2xhc3NcJ3Mgc3VpdGUgZmluaXNoZXMgZXhlY3V0aW9uLCBpdHNcbmV4ZWN1dGlvbiBmcmFtZSBpcyBkaXNjYXJkZWQgYnV0IGl0cyBsb2NhbCBuYW1lc3BhY2UgaXMgc2F2ZWQuIFs0XSBBXG5jbGFzcyBvYmplY3QgaXMgdGhlbiBjcmVhdGVkIHVzaW5nIHRoZSBpbmhlcml0YW5jZSBsaXN0IGZvciB0aGUgYmFzZVxuY2xhc3NlcyBhbmQgdGhlIHNhdmVkIGxvY2FsIG5hbWVzcGFjZSBmb3IgdGhlIGF0dHJpYnV0ZSBkaWN0aW9uYXJ5LlxuVGhlIGNsYXNzIG5hbWUgaXMgYm91bmQgdG8gdGhpcyBjbGFzcyBvYmplY3QgaW4gdGhlIG9yaWdpbmFsIGxvY2FsXG5uYW1lc3BhY2UuXG5cbkNsYXNzIGNyZWF0aW9uIGNhbiBiZSBjdXN0b21pemVkIGhlYXZpbHkgdXNpbmcgKm1ldGFjbGFzc2VzKi5cblxuQ2xhc3NlcyBjYW4gYWxzbyBiZSBkZWNvcmF0ZWQ6IGp1c3QgbGlrZSB3aGVuIGRlY29yYXRpbmcgZnVuY3Rpb25zLFxuXG4gICBAZjEoYXJnKVxuICAgQGYyXG4gICBjbGFzcyBGb286IHBhc3NcblxuaXMgZXF1aXZhbGVudCB0b1xuXG4gICBjbGFzcyBGb286IHBhc3NcbiAgIEZvbyA9IGYxKGFyZykoZjIoRm9vKSlcblxuVGhlIGV2YWx1YXRpb24gcnVsZXMgZm9yIHRoZSBkZWNvcmF0b3IgZXhwcmVzc2lvbnMgYXJlIHRoZSBzYW1lIGFzIGZvclxuZnVuY3Rpb24gZGVjb3JhdG9ycy4gIFRoZSByZXN1bHQgbXVzdCBiZSBhIGNsYXNzIG9iamVjdCwgd2hpY2ggaXMgdGhlblxuYm91bmQgdG8gdGhlIGNsYXNzIG5hbWUuXG5cbioqUHJvZ3JhbW1lclwncyBub3RlOioqIFZhcmlhYmxlcyBkZWZpbmVkIGluIHRoZSBjbGFzcyBkZWZpbml0aW9uIGFyZVxuY2xhc3MgYXR0cmlidXRlczsgdGhleSBhcmUgc2hhcmVkIGJ5IGluc3RhbmNlcy4gIEluc3RhbmNlIGF0dHJpYnV0ZXNcbmNhbiBiZSBzZXQgaW4gYSBtZXRob2Qgd2l0aCAic2VsZi5uYW1lID0gdmFsdWUiLiAgQm90aCBjbGFzcyBhbmRcbmluc3RhbmNlIGF0dHJpYnV0ZXMgYXJlIGFjY2Vzc2libGUgdGhyb3VnaCB0aGUgbm90YXRpb24gIiJzZWxmLm5hbWUiIixcbmFuZCBhbiBpbnN0YW5jZSBhdHRyaWJ1dGUgaGlkZXMgYSBjbGFzcyBhdHRyaWJ1dGUgd2l0aCB0aGUgc2FtZSBuYW1lXG53aGVuIGFjY2Vzc2VkIGluIHRoaXMgd2F5LiAgQ2xhc3MgYXR0cmlidXRlcyBjYW4gYmUgdXNlZCBhcyBkZWZhdWx0c1xuZm9yIGluc3RhbmNlIGF0dHJpYnV0ZXMsIGJ1dCB1c2luZyBtdXRhYmxlIHZhbHVlcyB0aGVyZSBjYW4gbGVhZCB0b1xudW5leHBlY3RlZCByZXN1bHRzLiAgKkRlc2NyaXB0b3JzKiBjYW4gYmUgdXNlZCB0byBjcmVhdGUgaW5zdGFuY2VcbnZhcmlhYmxlcyB3aXRoIGRpZmZlcmVudCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLlxuXG5TZWUgYWxzbzogKipQRVAgMzExNSoqIC0gTWV0YWNsYXNzZXMgaW4gUHl0aG9uIDMgKipQRVAgMzEyOSoqIC1cbiAgQ2xhc3MgRGVjb3JhdG9yc1xuXG4tWyBGb290bm90ZXMgXS1cblxuWzFdIFRoZSBleGNlcHRpb24gaXMgcHJvcGFnYXRlZCB0byB0aGUgaW52b2NhdGlvbiBzdGFjayB1bmxlc3NcbiAgICB0aGVyZSBpcyBhICJmaW5hbGx5IiBjbGF1c2Ugd2hpY2ggaGFwcGVucyB0byByYWlzZSBhbm90aGVyXG4gICAgZXhjZXB0aW9uLiBUaGF0IG5ldyBleGNlcHRpb24gY2F1c2VzIHRoZSBvbGQgb25lIHRvIGJlIGxvc3QuXG5cblsyXSBDdXJyZW50bHksIGNvbnRyb2wgImZsb3dzIG9mZiB0aGUgZW5kIiBleGNlcHQgaW4gdGhlIGNhc2Ugb2ZcbiAgICBhbiBleGNlcHRpb24gb3IgdGhlIGV4ZWN1dGlvbiBvZiBhICJyZXR1cm4iLCAiY29udGludWUiLCBvclxuICAgICJicmVhayIgc3RhdGVtZW50LlxuXG5bM10gQSBzdHJpbmcgbGl0ZXJhbCBhcHBlYXJpbmcgYXMgdGhlIGZpcnN0IHN0YXRlbWVudCBpbiB0aGVcbiAgICBmdW5jdGlvbiBib2R5IGlzIHRyYW5zZm9ybWVkIGludG8gdGhlIGZ1bmN0aW9uXCdzICJfX2RvY19fIlxuICAgIGF0dHJpYnV0ZSBhbmQgdGhlcmVmb3JlIHRoZSBmdW5jdGlvblwncyAqZG9jc3RyaW5nKi5cblxuWzRdIEEgc3RyaW5nIGxpdGVyYWwgYXBwZWFyaW5nIGFzIHRoZSBmaXJzdCBzdGF0ZW1lbnQgaW4gdGhlIGNsYXNzXG4gICAgYm9keSBpcyB0cmFuc2Zvcm1lZCBpbnRvIHRoZSBuYW1lc3BhY2VcJ3MgIl9fZG9jX18iIGl0ZW0gYW5kXG4gICAgdGhlcmVmb3JlIHRoZSBjbGFzc1wncyAqZG9jc3RyaW5nKi5cbicsCi0gJ2NvbnRleHQtbWFuYWdlcnMnOiAnXG5XaXRoIFN0YXRlbWVudCBDb250ZXh0IE1hbmFnZXJzXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cbkEgKmNvbnRleHQgbWFuYWdlciogaXMgYW4gb2JqZWN0IHRoYXQgZGVmaW5lcyB0aGUgcnVudGltZSBjb250ZXh0IHRvXG5iZSBlc3RhYmxpc2hlZCB3aGVuIGV4ZWN1dGluZyBhICJ3aXRoIiBzdGF0ZW1lbnQuIFRoZSBjb250ZXh0IG1hbmFnZXJcbmhhbmRsZXMgdGhlIGVudHJ5IGludG8sIGFuZCB0aGUgZXhpdCBmcm9tLCB0aGUgZGVzaXJlZCBydW50aW1lIGNvbnRleHRcbmZvciB0aGUgZXhlY3V0aW9uIG9mIHRoZSBibG9jayBvZiBjb2RlLiAgQ29udGV4dCBtYW5hZ2VycyBhcmUgbm9ybWFsbHlcbmludm9rZWQgdXNpbmcgdGhlICJ3aXRoIiBzdGF0ZW1lbnQgKGRlc2NyaWJlZCBpbiBzZWN0aW9uICpUaGUgd2l0aFxuc3RhdGVtZW50KiksIGJ1dCBjYW4gYWxzbyBiZSB1c2VkIGJ5IGRpcmVjdGx5IGludm9raW5nIHRoZWlyIG1ldGhvZHMuXG5cblR5cGljYWwgdXNlcyBvZiBjb250ZXh0IG1hbmFnZXJzIGluY2x1ZGUgc2F2aW5nIGFuZCByZXN0b3JpbmcgdmFyaW91c1xua2luZHMgb2YgZ2xvYmFsIHN0YXRlLCBsb2NraW5nIGFuZCB1bmxvY2tpbmcgcmVzb3VyY2VzLCBjbG9zaW5nIG9wZW5lZFxuZmlsZXMsIGV0Yy5cblxuRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gY29udGV4dCBtYW5hZ2Vycywgc2VlICpDb250ZXh0IE1hbmFnZXIgVHlwZXMqLlxuXG5vYmplY3QuX19lbnRlcl9fKHNlbGYpXG5cbiAgIEVudGVyIHRoZSBydW50aW1lIGNvbnRleHQgcmVsYXRlZCB0byB0aGlzIG9iamVjdC4gVGhlICJ3aXRoIlxuICAgc3RhdGVtZW50IHdpbGwgYmluZCB0aGlzIG1ldGhvZFwncyByZXR1cm4gdmFsdWUgdG8gdGhlIHRhcmdldChzKVxuICAgc3BlY2lmaWVkIGluIHRoZSAiYXMiIGNsYXVzZSBvZiB0aGUgc3RhdGVtZW50LCBpZiBhbnkuXG5cbm9iamVjdC5fX2V4aXRfXyhzZWxmLCBleGNfdHlwZSwgZXhjX3ZhbHVlLCB0cmFjZWJhY2spXG5cbiAgIEV4aXQgdGhlIHJ1bnRpbWUgY29udGV4dCByZWxhdGVkIHRvIHRoaXMgb2JqZWN0LiBUaGUgcGFyYW1ldGVyc1xuICAgZGVzY3JpYmUgdGhlIGV4Y2VwdGlvbiB0aGF0IGNhdXNlZCB0aGUgY29udGV4dCB0byBiZSBleGl0ZWQuIElmIHRoZVxuICAgY29udGV4dCB3YXMgZXhpdGVkIHdpdGhvdXQgYW4gZXhjZXB0aW9uLCBhbGwgdGhyZWUgYXJndW1lbnRzIHdpbGxcbiAgIGJlICJOb25lIi5cblxuICAgSWYgYW4gZXhjZXB0aW9uIGlzIHN1cHBsaWVkLCBhbmQgdGhlIG1ldGhvZCB3aXNoZXMgdG8gc3VwcHJlc3MgdGhlXG4gICBleGNlcHRpb24gKGkuZS4sIHByZXZlbnQgaXQgZnJvbSBiZWluZyBwcm9wYWdhdGVkKSwgaXQgc2hvdWxkXG4gICByZXR1cm4gYSB0cnVlIHZhbHVlLiBPdGhlcndpc2UsIHRoZSBleGNlcHRpb24gd2lsbCBiZSBwcm9jZXNzZWRcbiAgIG5vcm1hbGx5IHVwb24gZXhpdCBmcm9tIHRoaXMgbWV0aG9kLlxuXG4gICBOb3RlIHRoYXQgIl9fZXhpdF9fKCkiIG1ldGhvZHMgc2hvdWxkIG5vdCByZXJhaXNlIHRoZSBwYXNzZWQtaW5cbiAgIGV4Y2VwdGlvbjsgdGhpcyBpcyB0aGUgY2FsbGVyXCdzIHJlc3BvbnNpYmlsaXR5LlxuXG5TZWUgYWxzbzogKipQRVAgMDM0MyoqIC0gVGhlICJ3aXRoIiBzdGF0ZW1lbnRcblxuICAgICBUaGUgc3BlY2lmaWNhdGlvbiwgYmFja2dyb3VuZCwgYW5kIGV4YW1wbGVzIGZvciB0aGUgUHl0aG9uICJ3aXRoIlxuICAgICBzdGF0ZW1lbnQuXG4nLAotICdjb250aW51ZSc6ICdcblRoZSAiY29udGludWUiIHN0YXRlbWVudFxuKioqKioqKioqKioqKioqKioqKioqKioqXG5cbiAgIGNvbnRpbnVlX3N0bXQgOjo9ICJjb250aW51ZSJcblxuImNvbnRpbnVlIiBtYXkgb25seSBvY2N1ciBzeW50YWN0aWNhbGx5IG5lc3RlZCBpbiBhICJmb3IiIG9yICJ3aGlsZSJcbmxvb3AsIGJ1dCBub3QgbmVzdGVkIGluIGEgZnVuY3Rpb24gb3IgY2xhc3MgZGVmaW5pdGlvbiBvciAiZmluYWxseSJcbmNsYXVzZSB3aXRoaW4gdGhhdCBsb29wLiAgSXQgY29udGludWVzIHdpdGggdGhlIG5leHQgY3ljbGUgb2YgdGhlXG5uZWFyZXN0IGVuY2xvc2luZyBsb29wLlxuXG5XaGVuICJjb250aW51ZSIgcGFzc2VzIGNvbnRyb2wgb3V0IG9mIGEgInRyeSIgc3RhdGVtZW50IHdpdGggYVxuImZpbmFsbHkiIGNsYXVzZSwgdGhhdCAiZmluYWxseSIgY2xhdXNlIGlzIGV4ZWN1dGVkIGJlZm9yZSByZWFsbHlcbnN0YXJ0aW5nIHRoZSBuZXh0IGxvb3AgY3ljbGUuXG4nLAotICdjb252ZXJzaW9ucyc6ICdcbkFyaXRobWV0aWMgY29udmVyc2lvbnNcbioqKioqKioqKioqKioqKioqKioqKipcblxuV2hlbiBhIGRlc2NyaXB0aW9uIG9mIGFuIGFyaXRobWV0aWMgb3BlcmF0b3IgYmVsb3cgdXNlcyB0aGUgcGhyYXNlXG4idGhlIG51bWVyaWMgYXJndW1lbnRzIGFyZSBjb252ZXJ0ZWQgdG8gYSBjb21tb24gdHlwZSwiIHRoaXMgbWVhbnNcbnRoYXQgdGhlIG9wZXJhdG9yIGltcGxlbWVudGF0aW9uIGZvciBidWlsdC1pbiB0eXBlcyB3b3JrcyB0aGF0IHdheTpcblxuKiBJZiBlaXRoZXIgYXJndW1lbnQgaXMgYSBjb21wbGV4IG51bWJlciwgdGhlIG90aGVyIGlzIGNvbnZlcnRlZCB0b1xuICBjb21wbGV4O1xuXG4qIG90aGVyd2lzZSwgaWYgZWl0aGVyIGFyZ3VtZW50IGlzIGEgZmxvYXRpbmcgcG9pbnQgbnVtYmVyLCB0aGVcbiAgb3RoZXIgaXMgY29udmVydGVkIHRvIGZsb2F0aW5nIHBvaW50O1xuXG4qIG90aGVyd2lzZSwgYm90aCBtdXN0IGJlIGludGVnZXJzIGFuZCBubyBjb252ZXJzaW9uIGlzIG5lY2Vzc2FyeS5cblxuU29tZSBhZGRpdGlvbmFsIHJ1bGVzIGFwcGx5IGZvciBjZXJ0YWluIG9wZXJhdG9ycyAoZS5nLiwgYSBzdHJpbmcgbGVmdFxuYXJndW1lbnQgdG8gdGhlIFwnJVwnIG9wZXJhdG9yKS4gIEV4dGVuc2lvbnMgbXVzdCBkZWZpbmUgdGhlaXIgb3duXG5jb252ZXJzaW9uIGJlaGF2aW9yLlxuJywKLSAnY3VzdG9taXphdGlvbic6ICdcbkJhc2ljIGN1c3RvbWl6YXRpb25cbioqKioqKioqKioqKioqKioqKipcblxub2JqZWN0Ll9fbmV3X18oY2xzWywgLi4uXSlcblxuICAgQ2FsbGVkIHRvIGNyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiBjbGFzcyAqY2xzKi4gICJfX25ld19fKCkiIGlzIGFcbiAgIHN0YXRpYyBtZXRob2QgKHNwZWNpYWwtY2FzZWQgc28geW91IG5lZWQgbm90IGRlY2xhcmUgaXQgYXMgc3VjaClcbiAgIHRoYXQgdGFrZXMgdGhlIGNsYXNzIG9mIHdoaWNoIGFuIGluc3RhbmNlIHdhcyByZXF1ZXN0ZWQgYXMgaXRzXG4gICBmaXJzdCBhcmd1bWVudC4gIFRoZSByZW1haW5pbmcgYXJndW1lbnRzIGFyZSB0aG9zZSBwYXNzZWQgdG8gdGhlXG4gICBvYmplY3QgY29uc3RydWN0b3IgZXhwcmVzc2lvbiAodGhlIGNhbGwgdG8gdGhlIGNsYXNzKS4gIFRoZSByZXR1cm5cbiAgIHZhbHVlIG9mICJfX25ld19fKCkiIHNob3VsZCBiZSB0aGUgbmV3IG9iamVjdCBpbnN0YW5jZSAodXN1YWxseSBhblxuICAgaW5zdGFuY2Ugb2YgKmNscyopLlxuXG4gICBUeXBpY2FsIGltcGxlbWVudGF0aW9ucyBjcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIGNsYXNzIGJ5XG4gICBpbnZva2luZyB0aGUgc3VwZXJjbGFzc1wncyAiX19uZXdfXygpIiBtZXRob2QgdXNpbmdcbiAgICJzdXBlcihjdXJyZW50Y2xhc3MsIGNscykuX19uZXdfXyhjbHNbLCAuLi5dKSIgd2l0aCBhcHByb3ByaWF0ZVxuICAgYXJndW1lbnRzIGFuZCB0aGVuIG1vZGlmeWluZyB0aGUgbmV3bHktY3JlYXRlZCBpbnN0YW5jZSBhc1xuICAgbmVjZXNzYXJ5IGJlZm9yZSByZXR1cm5pbmcgaXQuXG5cbiAgIElmICJfX25ld19fKCkiIHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgKmNscyosIHRoZW4gdGhlIG5ld1xuICAgaW5zdGFuY2VcJ3MgIl9faW5pdF9fKCkiIG1ldGhvZCB3aWxsIGJlIGludm9rZWQgbGlrZVxuICAgIl9faW5pdF9fKHNlbGZbLCAuLi5dKSIsIHdoZXJlICpzZWxmKiBpcyB0aGUgbmV3IGluc3RhbmNlIGFuZCB0aGVcbiAgIHJlbWFpbmluZyBhcmd1bWVudHMgYXJlIHRoZSBzYW1lIGFzIHdlcmUgcGFzc2VkIHRvICJfX25ld19fKCkiLlxuXG4gICBJZiAiX19uZXdfXygpIiBkb2VzIG5vdCByZXR1cm4gYW4gaW5zdGFuY2Ugb2YgKmNscyosIHRoZW4gdGhlIG5ld1xuICAgaW5zdGFuY2VcJ3MgIl9faW5pdF9fKCkiIG1ldGhvZCB3aWxsIG5vdCBiZSBpbnZva2VkLlxuXG4gICAiX19uZXdfXygpIiBpcyBpbnRlbmRlZCBtYWlubHkgdG8gYWxsb3cgc3ViY2xhc3NlcyBvZiBpbW11dGFibGVcbiAgIHR5cGVzIChsaWtlIGludCwgc3RyLCBvciB0dXBsZSkgdG8gY3VzdG9taXplIGluc3RhbmNlIGNyZWF0aW9uLiAgSXRcbiAgIGlzIGFsc28gY29tbW9ubHkgb3ZlcnJpZGRlbiBpbiBjdXN0b20gbWV0YWNsYXNzZXMgaW4gb3JkZXIgdG9cbiAgIGN1c3RvbWl6ZSBjbGFzcyBjcmVhdGlvbi5cblxub2JqZWN0Ll9faW5pdF9fKHNlbGZbLCAuLi5dKVxuXG4gICBDYWxsZWQgd2hlbiB0aGUgaW5zdGFuY2UgaXMgY3JlYXRlZC4gIFRoZSBhcmd1bWVudHMgYXJlIHRob3NlXG4gICBwYXNzZWQgdG8gdGhlIGNsYXNzIGNvbnN0cnVjdG9yIGV4cHJlc3Npb24uICBJZiBhIGJhc2UgY2xhc3MgaGFzIGFuXG4gICAiX19pbml0X18oKSIgbWV0aG9kLCB0aGUgZGVyaXZlZCBjbGFzc1wncyAiX19pbml0X18oKSIgbWV0aG9kLCBpZlxuICAgYW55LCBtdXN0IGV4cGxpY2l0bHkgY2FsbCBpdCB0byBlbnN1cmUgcHJvcGVyIGluaXRpYWxpemF0aW9uIG9mIHRoZVxuICAgYmFzZSBjbGFzcyBwYXJ0IG9mIHRoZSBpbnN0YW5jZTsgZm9yIGV4YW1wbGU6XG4gICAiQmFzZUNsYXNzLl9faW5pdF9fKHNlbGYsIFthcmdzLi4uXSkiLiAgQXMgYSBzcGVjaWFsIGNvbnN0cmFpbnQgb25cbiAgIGNvbnN0cnVjdG9ycywgbm8gdmFsdWUgbWF5IGJlIHJldHVybmVkOyBkb2luZyBzbyB3aWxsIGNhdXNlIGFcbiAgICJUeXBlRXJyb3IiIHRvIGJlIHJhaXNlZCBhdCBydW50aW1lLlxuXG5vYmplY3QuX19kZWxfXyhzZWxmKVxuXG4gICBDYWxsZWQgd2hlbiB0aGUgaW5zdGFuY2UgaXMgYWJvdXQgdG8gYmUgZGVzdHJveWVkLiAgVGhpcyBpcyBhbHNvXG4gICBjYWxsZWQgYSBkZXN0cnVjdG9yLiAgSWYgYSBiYXNlIGNsYXNzIGhhcyBhICJfX2RlbF9fKCkiIG1ldGhvZCwgdGhlXG4gICBkZXJpdmVkIGNsYXNzXCdzICJfX2RlbF9fKCkiIG1ldGhvZCwgaWYgYW55LCBtdXN0IGV4cGxpY2l0bHkgY2FsbCBpdFxuICAgdG8gZW5zdXJlIHByb3BlciBkZWxldGlvbiBvZiB0aGUgYmFzZSBjbGFzcyBwYXJ0IG9mIHRoZSBpbnN0YW5jZS5cbiAgIE5vdGUgdGhhdCBpdCBpcyBwb3NzaWJsZSAodGhvdWdoIG5vdCByZWNvbW1lbmRlZCEpIGZvciB0aGVcbiAgICJfX2RlbF9fKCkiIG1ldGhvZCB0byBwb3N0cG9uZSBkZXN0cnVjdGlvbiBvZiB0aGUgaW5zdGFuY2UgYnlcbiAgIGNyZWF0aW5nIGEgbmV3IHJlZmVyZW5jZSB0byBpdC4gIEl0IG1heSB0aGVuIGJlIGNhbGxlZCBhdCBhIGxhdGVyXG4gICB0aW1lIHdoZW4gdGhpcyBuZXcgcmVmZXJlbmNlIGlzIGRlbGV0ZWQuICBJdCBpcyBub3QgZ3VhcmFudGVlZCB0aGF0XG4gICAiX19kZWxfXygpIiBtZXRob2RzIGFyZSBjYWxsZWQgZm9yIG9iamVjdHMgdGhhdCBzdGlsbCBleGlzdCB3aGVuXG4gICB0aGUgaW50ZXJwcmV0ZXIgZXhpdHMuXG5cbiAgIE5vdGU6ICJkZWwgeCIgZG9lc25cJ3QgZGlyZWN0bHkgY2FsbCAieC5fX2RlbF9fKCkiIC0tLSB0aGUgZm9ybWVyXG4gICAgIGRlY3JlbWVudHMgdGhlIHJlZmVyZW5jZSBjb3VudCBmb3IgIngiIGJ5IG9uZSwgYW5kIHRoZSBsYXR0ZXIgaXNcbiAgICAgb25seSBjYWxsZWQgd2hlbiAieCJcJ3MgcmVmZXJlbmNlIGNvdW50IHJlYWNoZXMgemVyby4gIFNvbWUgY29tbW9uXG4gICAgIHNpdHVhdGlvbnMgdGhhdCBtYXkgcHJldmVudCB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIGFuIG9iamVjdCBmcm9tXG4gICAgIGdvaW5nIHRvIHplcm8gaW5jbHVkZTogY2lyY3VsYXIgcmVmZXJlbmNlcyBiZXR3ZWVuIG9iamVjdHMgKGUuZy4sXG4gICAgIGEgZG91Ymx5LWxpbmtlZCBsaXN0IG9yIGEgdHJlZSBkYXRhIHN0cnVjdHVyZSB3aXRoIHBhcmVudCBhbmRcbiAgICAgY2hpbGQgcG9pbnRlcnMpOyBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IG9uIHRoZSBzdGFjayBmcmFtZSBvZlxuICAgICBhIGZ1bmN0aW9uIHRoYXQgY2F1Z2h0IGFuIGV4Y2VwdGlvbiAodGhlIHRyYWNlYmFjayBzdG9yZWQgaW5cbiAgICAgInN5cy5leGNfaW5mbygpWzJdIiBrZWVwcyB0aGUgc3RhY2sgZnJhbWUgYWxpdmUpOyBvciBhIHJlZmVyZW5jZVxuICAgICB0byB0aGUgb2JqZWN0IG9uIHRoZSBzdGFjayBmcmFtZSB0aGF0IHJhaXNlZCBhbiB1bmhhbmRsZWRcbiAgICAgZXhjZXB0aW9uIGluIGludGVyYWN0aXZlIG1vZGUgKHRoZSB0cmFjZWJhY2sgc3RvcmVkIGluXG4gICAgICJzeXMubGFzdF90cmFjZWJhY2siIGtlZXBzIHRoZSBzdGFjayBmcmFtZSBhbGl2ZSkuICBUaGUgZmlyc3RcbiAgICAgc2l0dWF0aW9uIGNhbiBvbmx5IGJlIHJlbWVkaWVkIGJ5IGV4cGxpY2l0bHkgYnJlYWtpbmcgdGhlIGN5Y2xlcztcbiAgICAgdGhlIGxhdHRlciB0d28gc2l0dWF0aW9ucyBjYW4gYmUgcmVzb2x2ZWQgYnkgc3RvcmluZyAiTm9uZSIgaW5cbiAgICAgInN5cy5sYXN0X3RyYWNlYmFjayIuIENpcmN1bGFyIHJlZmVyZW5jZXMgd2hpY2ggYXJlIGdhcmJhZ2UgYXJlXG4gICAgIGRldGVjdGVkIHdoZW4gdGhlIG9wdGlvbiBjeWNsZSBkZXRlY3RvciBpcyBlbmFibGVkIChpdFwncyBvbiBieVxuICAgICBkZWZhdWx0KSwgYnV0IGNhbiBvbmx5IGJlIGNsZWFuZWQgdXAgaWYgdGhlcmUgYXJlIG5vIFB5dGhvbi1cbiAgICAgbGV2ZWwgIl9fZGVsX18oKSIgbWV0aG9kcyBpbnZvbHZlZC4gUmVmZXIgdG8gdGhlIGRvY3VtZW50YXRpb25cbiAgICAgZm9yIHRoZSAiZ2MiIG1vZHVsZSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBob3cgIl9fZGVsX18oKSJcbiAgICAgbWV0aG9kcyBhcmUgaGFuZGxlZCBieSB0aGUgY3ljbGUgZGV0ZWN0b3IsIHBhcnRpY3VsYXJseSB0aGVcbiAgICAgZGVzY3JpcHRpb24gb2YgdGhlICJnYXJiYWdlIiB2YWx1ZS5cblxuICAgV2FybmluZzogRHVlIHRvIHRoZSBwcmVjYXJpb3VzIGNpcmN1bXN0YW5jZXMgdW5kZXIgd2hpY2hcbiAgICAgIl9fZGVsX18oKSIgbWV0aG9kcyBhcmUgaW52b2tlZCwgZXhjZXB0aW9ucyB0aGF0IG9jY3VyIGR1cmluZ1xuICAgICB0aGVpciBleGVjdXRpb24gYXJlIGlnbm9yZWQsIGFuZCBhIHdhcm5pbmcgaXMgcHJpbnRlZCB0b1xuICAgICAic3lzLnN0ZGVyciIgaW5zdGVhZC4gQWxzbywgd2hlbiAiX19kZWxfXygpIiBpcyBpbnZva2VkIGluXG4gICAgIHJlc3BvbnNlIHRvIGEgbW9kdWxlIGJlaW5nIGRlbGV0ZWQgKGUuZy4sIHdoZW4gZXhlY3V0aW9uIG9mIHRoZVxuICAgICBwcm9ncmFtIGlzIGRvbmUpLCBvdGhlciBnbG9iYWxzIHJlZmVyZW5jZWQgYnkgdGhlICJfX2RlbF9fKCkiXG4gICAgIG1ldGhvZCBtYXkgYWxyZWFkeSBoYXZlIGJlZW4gZGVsZXRlZCBvciBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZ1xuICAgICB0b3JuIGRvd24gKGUuZy4gdGhlIGltcG9ydCBtYWNoaW5lcnkgc2h1dHRpbmcgZG93bikuICBGb3IgdGhpc1xuICAgICByZWFzb24sICJfX2RlbF9fKCkiIG1ldGhvZHMgc2hvdWxkIGRvIHRoZSBhYnNvbHV0ZSBtaW5pbXVtIG5lZWRlZFxuICAgICB0byBtYWludGFpbiBleHRlcm5hbCBpbnZhcmlhbnRzLiAgU3RhcnRpbmcgd2l0aCB2ZXJzaW9uIDEuNSxcbiAgICAgUHl0aG9uIGd1YXJhbnRlZXMgdGhhdCBnbG9iYWxzIHdob3NlIG5hbWUgYmVnaW5zIHdpdGggYSBzaW5nbGVcbiAgICAgdW5kZXJzY29yZSBhcmUgZGVsZXRlZCBmcm9tIHRoZWlyIG1vZHVsZSBiZWZvcmUgb3RoZXIgZ2xvYmFscyBhcmVcbiAgICAgZGVsZXRlZDsgaWYgbm8gb3RoZXIgcmVmZXJlbmNlcyB0byBzdWNoIGdsb2JhbHMgZXhpc3QsIHRoaXMgbWF5XG4gICAgIGhlbHAgaW4gYXNzdXJpbmcgdGhhdCBpbXBvcnRlZCBtb2R1bGVzIGFyZSBzdGlsbCBhdmFpbGFibGUgYXQgdGhlXG4gICAgIHRpbWUgd2hlbiB0aGUgIl9fZGVsX18oKSIgbWV0aG9kIGlzIGNhbGxlZC5cblxub2JqZWN0Ll9fcmVwcl9fKHNlbGYpXG5cbiAgIENhbGxlZCBieSB0aGUgInJlcHIoKSIgYnVpbHQtaW4gZnVuY3Rpb24gdG8gY29tcHV0ZSB0aGUgIm9mZmljaWFsIlxuICAgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFuIG9iamVjdC4gIElmIGF0IGFsbCBwb3NzaWJsZSwgdGhpc1xuICAgc2hvdWxkIGxvb2sgbGlrZSBhIHZhbGlkIFB5dGhvbiBleHByZXNzaW9uIHRoYXQgY291bGQgYmUgdXNlZCB0b1xuICAgcmVjcmVhdGUgYW4gb2JqZWN0IHdpdGggdGhlIHNhbWUgdmFsdWUgKGdpdmVuIGFuIGFwcHJvcHJpYXRlXG4gICBlbnZpcm9ubWVudCkuICBJZiB0aGlzIGlzIG5vdCBwb3NzaWJsZSwgYSBzdHJpbmcgb2YgdGhlIGZvcm1cbiAgICI8Li4uc29tZSB1c2VmdWwgZGVzY3JpcHRpb24uLi4+IiBzaG91bGQgYmUgcmV0dXJuZWQuIFRoZSByZXR1cm5cbiAgIHZhbHVlIG11c3QgYmUgYSBzdHJpbmcgb2JqZWN0LiBJZiBhIGNsYXNzIGRlZmluZXMgIl9fcmVwcl9fKCkiIGJ1dFxuICAgbm90ICJfX3N0cl9fKCkiLCB0aGVuICJfX3JlcHJfXygpIiBpcyBhbHNvIHVzZWQgd2hlbiBhbiAiaW5mb3JtYWwiXG4gICBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgaW5zdGFuY2VzIG9mIHRoYXQgY2xhc3MgaXMgcmVxdWlyZWQuXG5cbiAgIFRoaXMgaXMgdHlwaWNhbGx5IHVzZWQgZm9yIGRlYnVnZ2luZywgc28gaXQgaXMgaW1wb3J0YW50IHRoYXQgdGhlXG4gICByZXByZXNlbnRhdGlvbiBpcyBpbmZvcm1hdGlvbi1yaWNoIGFuZCB1bmFtYmlndW91cy5cblxub2JqZWN0Ll9fc3RyX18oc2VsZilcblxuICAgQ2FsbGVkIGJ5ICJzdHIob2JqZWN0KSIgYW5kIHRoZSBidWlsdC1pbiBmdW5jdGlvbnMgImZvcm1hdCgpIiBhbmRcbiAgICJwcmludCgpIiB0byBjb21wdXRlIHRoZSAiaW5mb3JtYWwiIG9yIG5pY2VseSBwcmludGFibGUgc3RyaW5nXG4gICByZXByZXNlbnRhdGlvbiBvZiBhbiBvYmplY3QuICBUaGUgcmV0dXJuIHZhbHVlIG11c3QgYmUgYSAqc3RyaW5nKlxuICAgb2JqZWN0LlxuXG4gICBUaGlzIG1ldGhvZCBkaWZmZXJzIGZyb20gIm9iamVjdC5fX3JlcHJfXygpIiBpbiB0aGF0IHRoZXJlIGlzIG5vXG4gICBleHBlY3RhdGlvbiB0aGF0ICJfX3N0cl9fKCkiIHJldHVybiBhIHZhbGlkIFB5dGhvbiBleHByZXNzaW9uOiBhXG4gICBtb3JlIGNvbnZlbmllbnQgb3IgY29uY2lzZSByZXByZXNlbnRhdGlvbiBjYW4gYmUgdXNlZC5cblxuICAgVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZGVmaW5lZCBieSB0aGUgYnVpbHQtaW4gdHlwZSAib2JqZWN0IlxuICAgY2FsbHMgIm9iamVjdC5fX3JlcHJfXygpIi5cblxub2JqZWN0Ll9fYnl0ZXNfXyhzZWxmKVxuXG4gICBDYWxsZWQgYnkgImJ5dGVzKCkiIHRvIGNvbXB1dGUgYSBieXRlLXN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhblxuICAgb2JqZWN0LiBUaGlzIHNob3VsZCByZXR1cm4gYSAiYnl0ZXMiIG9iamVjdC5cblxub2JqZWN0Ll9fZm9ybWF0X18oc2VsZiwgZm9ybWF0X3NwZWMpXG5cbiAgIENhbGxlZCBieSB0aGUgImZvcm1hdCgpIiBidWlsdC1pbiBmdW5jdGlvbiAoYW5kIGJ5IGV4dGVuc2lvbiwgdGhlXG4gICAic3RyLmZvcm1hdCgpIiBtZXRob2Qgb2YgY2xhc3MgInN0ciIpIHRvIHByb2R1Y2UgYSAiZm9ybWF0dGVkIlxuICAgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFuIG9iamVjdC4gVGhlICJmb3JtYXRfc3BlYyIgYXJndW1lbnQgaXMgYVxuICAgc3RyaW5nIHRoYXQgY29udGFpbnMgYSBkZXNjcmlwdGlvbiBvZiB0aGUgZm9ybWF0dGluZyBvcHRpb25zXG4gICBkZXNpcmVkLiBUaGUgaW50ZXJwcmV0YXRpb24gb2YgdGhlICJmb3JtYXRfc3BlYyIgYXJndW1lbnQgaXMgdXAgdG9cbiAgIHRoZSB0eXBlIGltcGxlbWVudGluZyAiX19mb3JtYXRfXygpIiwgaG93ZXZlciBtb3N0IGNsYXNzZXMgd2lsbFxuICAgZWl0aGVyIGRlbGVnYXRlIGZvcm1hdHRpbmcgdG8gb25lIG9mIHRoZSBidWlsdC1pbiB0eXBlcywgb3IgdXNlIGFcbiAgIHNpbWlsYXIgZm9ybWF0dGluZyBvcHRpb24gc3ludGF4LlxuXG4gICBTZWUgKkZvcm1hdCBTcGVjaWZpY2F0aW9uIE1pbmktTGFuZ3VhZ2UqIGZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZVxuICAgc3RhbmRhcmQgZm9ybWF0dGluZyBzeW50YXguXG5cbiAgIFRoZSByZXR1cm4gdmFsdWUgbXVzdCBiZSBhIHN0cmluZyBvYmplY3QuXG5cbm9iamVjdC5fX2x0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19sZV9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fZXFfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX25lX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ndF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fZ2VfXyhzZWxmLCBvdGhlcilcblxuICAgVGhlc2UgYXJlIHRoZSBzby1jYWxsZWQgInJpY2ggY29tcGFyaXNvbiIgbWV0aG9kcy4gVGhlXG4gICBjb3JyZXNwb25kZW5jZSBiZXR3ZWVuIG9wZXJhdG9yIHN5bWJvbHMgYW5kIG1ldGhvZCBuYW1lcyBpcyBhc1xuICAgZm9sbG93czogIng8eSIgY2FsbHMgInguX19sdF9fKHkpIiwgIng8PXkiIGNhbGxzICJ4Ll9fbGVfXyh5KSIsXG4gICAieD09eSIgY2FsbHMgInguX19lcV9fKHkpIiwgInghPXkiIGNhbGxzICJ4Ll9fbmVfXyh5KSIsICJ4PnkiIGNhbGxzXG4gICAieC5fX2d0X18oeSkiLCBhbmQgIng+PXkiIGNhbGxzICJ4Ll9fZ2VfXyh5KSIuXG5cbiAgIEEgcmljaCBjb21wYXJpc29uIG1ldGhvZCBtYXkgcmV0dXJuIHRoZSBzaW5nbGV0b24gIk5vdEltcGxlbWVudGVkIlxuICAgaWYgaXQgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBvcGVyYXRpb24gZm9yIGEgZ2l2ZW4gcGFpciBvZlxuICAgYXJndW1lbnRzLiBCeSBjb252ZW50aW9uLCAiRmFsc2UiIGFuZCAiVHJ1ZSIgYXJlIHJldHVybmVkIGZvciBhXG4gICBzdWNjZXNzZnVsIGNvbXBhcmlzb24uIEhvd2V2ZXIsIHRoZXNlIG1ldGhvZHMgY2FuIHJldHVybiBhbnkgdmFsdWUsXG4gICBzbyBpZiB0aGUgY29tcGFyaXNvbiBvcGVyYXRvciBpcyB1c2VkIGluIGEgQm9vbGVhbiBjb250ZXh0IChlLmcuLFxuICAgaW4gdGhlIGNvbmRpdGlvbiBvZiBhbiAiaWYiIHN0YXRlbWVudCksIFB5dGhvbiB3aWxsIGNhbGwgImJvb2woKSJcbiAgIG9uIHRoZSB2YWx1ZSB0byBkZXRlcm1pbmUgaWYgdGhlIHJlc3VsdCBpcyB0cnVlIG9yIGZhbHNlLlxuXG4gICBUaGVyZSBhcmUgbm8gaW1wbGllZCByZWxhdGlvbnNoaXBzIGFtb25nIHRoZSBjb21wYXJpc29uIG9wZXJhdG9ycy5cbiAgIFRoZSB0cnV0aCBvZiAieD09eSIgZG9lcyBub3QgaW1wbHkgdGhhdCAieCE9eSIgaXMgZmFsc2UuXG4gICBBY2NvcmRpbmdseSwgd2hlbiBkZWZpbmluZyAiX19lcV9fKCkiLCBvbmUgc2hvdWxkIGFsc28gZGVmaW5lXG4gICAiX19uZV9fKCkiIHNvIHRoYXQgdGhlIG9wZXJhdG9ycyB3aWxsIGJlaGF2ZSBhcyBleHBlY3RlZC4gIFNlZSB0aGVcbiAgIHBhcmFncmFwaCBvbiAiX19oYXNoX18oKSIgZm9yIHNvbWUgaW1wb3J0YW50IG5vdGVzIG9uIGNyZWF0aW5nXG4gICAqaGFzaGFibGUqIG9iamVjdHMgd2hpY2ggc3VwcG9ydCBjdXN0b20gY29tcGFyaXNvbiBvcGVyYXRpb25zIGFuZFxuICAgYXJlIHVzYWJsZSBhcyBkaWN0aW9uYXJ5IGtleXMuXG5cbiAgIFRoZXJlIGFyZSBubyBzd2FwcGVkLWFyZ3VtZW50IHZlcnNpb25zIG9mIHRoZXNlIG1ldGhvZHMgKHRvIGJlIHVzZWRcbiAgIHdoZW4gdGhlIGxlZnQgYXJndW1lbnQgZG9lcyBub3Qgc3VwcG9ydCB0aGUgb3BlcmF0aW9uIGJ1dCB0aGUgcmlnaHRcbiAgIGFyZ3VtZW50IGRvZXMpOyByYXRoZXIsICJfX2x0X18oKSIgYW5kICJfX2d0X18oKSIgYXJlIGVhY2ggb3RoZXJcJ3NcbiAgIHJlZmxlY3Rpb24sICJfX2xlX18oKSIgYW5kICJfX2dlX18oKSIgYXJlIGVhY2ggb3RoZXJcJ3MgcmVmbGVjdGlvbixcbiAgIGFuZCAiX19lcV9fKCkiIGFuZCAiX19uZV9fKCkiIGFyZSB0aGVpciBvd24gcmVmbGVjdGlvbi5cblxuICAgQXJndW1lbnRzIHRvIHJpY2ggY29tcGFyaXNvbiBtZXRob2RzIGFyZSBuZXZlciBjb2VyY2VkLlxuXG4gICBUbyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlIG9yZGVyaW5nIG9wZXJhdGlvbnMgZnJvbSBhIHNpbmdsZSByb290XG4gICBvcGVyYXRpb24sIHNlZSAiZnVuY3Rvb2xzLnRvdGFsX29yZGVyaW5nKCkiLlxuXG5vYmplY3QuX19oYXNoX18oc2VsZilcblxuICAgQ2FsbGVkIGJ5IGJ1aWx0LWluIGZ1bmN0aW9uICJoYXNoKCkiIGFuZCBmb3Igb3BlcmF0aW9ucyBvbiBtZW1iZXJzXG4gICBvZiBoYXNoZWQgY29sbGVjdGlvbnMgaW5jbHVkaW5nICJzZXQiLCAiZnJvemVuc2V0IiwgYW5kICJkaWN0Ii5cbiAgICJfX2hhc2hfXygpIiBzaG91bGQgcmV0dXJuIGFuIGludGVnZXIuICBUaGUgb25seSByZXF1aXJlZCBwcm9wZXJ0eVxuICAgaXMgdGhhdCBvYmplY3RzIHdoaWNoIGNvbXBhcmUgZXF1YWwgaGF2ZSB0aGUgc2FtZSBoYXNoIHZhbHVlOyBpdCBpc1xuICAgYWR2aXNlZCB0byBzb21laG93IG1peCB0b2dldGhlciAoZS5nLiB1c2luZyBleGNsdXNpdmUgb3IpIHRoZSBoYXNoXG4gICB2YWx1ZXMgZm9yIHRoZSBjb21wb25lbnRzIG9mIHRoZSBvYmplY3QgdGhhdCBhbHNvIHBsYXkgYSBwYXJ0IGluXG4gICBjb21wYXJpc29uIG9mIG9iamVjdHMuXG5cbiAgIE5vdGU6ICJoYXNoKCkiIHRydW5jYXRlcyB0aGUgdmFsdWUgcmV0dXJuZWQgZnJvbSBhbiBvYmplY3RcJ3NcbiAgICAgY3VzdG9tICJfX2hhc2hfXygpIiBtZXRob2QgdG8gdGhlIHNpemUgb2YgYSAiUHlfc3NpemVfdCIuICBUaGlzXG4gICAgIGlzIHR5cGljYWxseSA4IGJ5dGVzIG9uIDY0LWJpdCBidWlsZHMgYW5kIDQgYnl0ZXMgb24gMzItYml0XG4gICAgIGJ1aWxkcy4gSWYgYW4gb2JqZWN0XCdzICAgIl9faGFzaF9fKCkiIG11c3QgaW50ZXJvcGVyYXRlIG9uIGJ1aWxkc1xuICAgICBvZiBkaWZmZXJlbnQgYml0IHNpemVzLCBiZSBzdXJlIHRvIGNoZWNrIHRoZSB3aWR0aCBvbiBhbGxcbiAgICAgc3VwcG9ydGVkIGJ1aWxkcy4gIEFuIGVhc3kgd2F5IHRvIGRvIHRoaXMgaXMgd2l0aCAicHl0aG9uIC1jXG4gICAgICJpbXBvcnQgc3lzOyBwcmludChzeXMuaGFzaF9pbmZvLndpZHRoKSIiXG5cbiAgIElmIGEgY2xhc3MgZG9lcyBub3QgZGVmaW5lIGFuICJfX2VxX18oKSIgbWV0aG9kIGl0IHNob3VsZCBub3RcbiAgIGRlZmluZSBhICJfX2hhc2hfXygpIiBvcGVyYXRpb24gZWl0aGVyOyBpZiBpdCBkZWZpbmVzICJfX2VxX18oKSJcbiAgIGJ1dCBub3QgIl9faGFzaF9fKCkiLCBpdHMgaW5zdGFuY2VzIHdpbGwgbm90IGJlIHVzYWJsZSBhcyBpdGVtcyBpblxuICAgaGFzaGFibGUgY29sbGVjdGlvbnMuICBJZiBhIGNsYXNzIGRlZmluZXMgbXV0YWJsZSBvYmplY3RzIGFuZFxuICAgaW1wbGVtZW50cyBhbiAiX19lcV9fKCkiIG1ldGhvZCwgaXQgc2hvdWxkIG5vdCBpbXBsZW1lbnRcbiAgICJfX2hhc2hfXygpIiwgc2luY2UgdGhlIGltcGxlbWVudGF0aW9uIG9mIGhhc2hhYmxlIGNvbGxlY3Rpb25zXG4gICByZXF1aXJlcyB0aGF0IGEga2V5XCdzIGhhc2ggdmFsdWUgaXMgaW1tdXRhYmxlIChpZiB0aGUgb2JqZWN0XCdzIGhhc2hcbiAgIHZhbHVlIGNoYW5nZXMsIGl0IHdpbGwgYmUgaW4gdGhlIHdyb25nIGhhc2ggYnVja2V0KS5cblxuICAgVXNlci1kZWZpbmVkIGNsYXNzZXMgaGF2ZSAiX19lcV9fKCkiIGFuZCAiX19oYXNoX18oKSIgbWV0aG9kcyBieVxuICAgZGVmYXVsdDsgd2l0aCB0aGVtLCBhbGwgb2JqZWN0cyBjb21wYXJlIHVuZXF1YWwgKGV4Y2VwdCB3aXRoXG4gICB0aGVtc2VsdmVzKSBhbmQgInguX19oYXNoX18oKSIgcmV0dXJucyBhbiBhcHByb3ByaWF0ZSB2YWx1ZSBzdWNoXG4gICB0aGF0ICJ4ID09IHkiIGltcGxpZXMgYm90aCB0aGF0ICJ4IGlzIHkiIGFuZCAiaGFzaCh4KSA9PSBoYXNoKHkpIi5cblxuICAgQSBjbGFzcyB0aGF0IG92ZXJyaWRlcyAiX19lcV9fKCkiIGFuZCBkb2VzIG5vdCBkZWZpbmUgIl9faGFzaF9fKCkiXG4gICB3aWxsIGhhdmUgaXRzICJfX2hhc2hfXygpIiBpbXBsaWNpdGx5IHNldCB0byAiTm9uZSIuICBXaGVuIHRoZVxuICAgIl9faGFzaF9fKCkiIG1ldGhvZCBvZiBhIGNsYXNzIGlzICJOb25lIiwgaW5zdGFuY2VzIG9mIHRoZSBjbGFzc1xuICAgd2lsbCByYWlzZSBhbiBhcHByb3ByaWF0ZSAiVHlwZUVycm9yIiB3aGVuIGEgcHJvZ3JhbSBhdHRlbXB0cyB0b1xuICAgcmV0cmlldmUgdGhlaXIgaGFzaCB2YWx1ZSwgYW5kIHdpbGwgYWxzbyBiZSBjb3JyZWN0bHkgaWRlbnRpZmllZCBhc1xuICAgdW5oYXNoYWJsZSB3aGVuIGNoZWNraW5nICJpc2luc3RhbmNlKG9iaiwgY29sbGVjdGlvbnMuSGFzaGFibGUiKS5cblxuICAgSWYgYSBjbGFzcyB0aGF0IG92ZXJyaWRlcyAiX19lcV9fKCkiIG5lZWRzIHRvIHJldGFpbiB0aGVcbiAgIGltcGxlbWVudGF0aW9uIG9mICJfX2hhc2hfXygpIiBmcm9tIGEgcGFyZW50IGNsYXNzLCB0aGUgaW50ZXJwcmV0ZXJcbiAgIG11c3QgYmUgdG9sZCB0aGlzIGV4cGxpY2l0bHkgYnkgc2V0dGluZyAiX19oYXNoX18gPVxuICAgPFBhcmVudENsYXNzPi5fX2hhc2hfXyIuXG5cbiAgIElmIGEgY2xhc3MgdGhhdCBkb2VzIG5vdCBvdmVycmlkZSAiX19lcV9fKCkiIHdpc2hlcyB0byBzdXBwcmVzc1xuICAgaGFzaCBzdXBwb3J0LCBpdCBzaG91bGQgaW5jbHVkZSAiX19oYXNoX18gPSBOb25lIiBpbiB0aGUgY2xhc3NcbiAgIGRlZmluaXRpb24uIEEgY2xhc3Mgd2hpY2ggZGVmaW5lcyBpdHMgb3duICJfX2hhc2hfXygpIiB0aGF0XG4gICBleHBsaWNpdGx5IHJhaXNlcyBhICJUeXBlRXJyb3IiIHdvdWxkIGJlIGluY29ycmVjdGx5IGlkZW50aWZpZWQgYXNcbiAgIGhhc2hhYmxlIGJ5IGFuICJpc2luc3RhbmNlKG9iaiwgY29sbGVjdGlvbnMuSGFzaGFibGUpIiBjYWxsLlxuXG4gICBOb3RlOiBCeSBkZWZhdWx0LCB0aGUgIl9faGFzaF9fKCkiIHZhbHVlcyBvZiBzdHIsIGJ5dGVzIGFuZFxuICAgICBkYXRldGltZSBvYmplY3RzIGFyZSAic2FsdGVkIiB3aXRoIGFuIHVucHJlZGljdGFibGUgcmFuZG9tIHZhbHVlLlxuICAgICBBbHRob3VnaCB0aGV5IHJlbWFpbiBjb25zdGFudCB3aXRoaW4gYW4gaW5kaXZpZHVhbCBQeXRob25cbiAgICAgcHJvY2VzcywgdGhleSBhcmUgbm90IHByZWRpY3RhYmxlIGJldHdlZW4gcmVwZWF0ZWQgaW52b2NhdGlvbnMgb2ZcbiAgICAgUHl0aG9uLlRoaXMgaXMgaW50ZW5kZWQgdG8gcHJvdmlkZSBwcm90ZWN0aW9uIGFnYWluc3QgYSBkZW5pYWwtXG4gICAgIG9mLXNlcnZpY2UgY2F1c2VkIGJ5IGNhcmVmdWxseS1jaG9zZW4gaW5wdXRzIHRoYXQgZXhwbG9pdCB0aGVcbiAgICAgd29yc3QgY2FzZSBwZXJmb3JtYW5jZSBvZiBhIGRpY3QgaW5zZXJ0aW9uLCBPKG5eMikgY29tcGxleGl0eS5cbiAgICAgU2VlIGh0dHA6Ly93d3cub2NlcnQub3JnL2Fkdmlzb3JpZXMvb2NlcnQtMjAxMS0wMDMuaHRtbCBmb3JcbiAgICAgZGV0YWlscy5DaGFuZ2luZyBoYXNoIHZhbHVlcyBhZmZlY3RzIHRoZSBpdGVyYXRpb24gb3JkZXIgb2ZcbiAgICAgZGljdHMsIHNldHMgYW5kIG90aGVyIG1hcHBpbmdzLiAgUHl0aG9uIGhhcyBuZXZlciBtYWRlIGd1YXJhbnRlZXNcbiAgICAgYWJvdXQgdGhpcyBvcmRlcmluZyAoYW5kIGl0IHR5cGljYWxseSB2YXJpZXMgYmV0d2VlbiAzMi1iaXQgYW5kXG4gICAgIDY0LWJpdCBidWlsZHMpLlNlZSBhbHNvICJQWVRIT05IQVNIU0VFRCIuXG5cbiAgIENoYW5nZWQgaW4gdmVyc2lvbiAzLjM6IEhhc2ggcmFuZG9taXphdGlvbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQuXG5cbm9iamVjdC5fX2Jvb2xfXyhzZWxmKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IHRydXRoIHZhbHVlIHRlc3RpbmcgYW5kIHRoZSBidWlsdC1pbiBvcGVyYXRpb25cbiAgICJib29sKCkiOyBzaG91bGQgcmV0dXJuICJGYWxzZSIgb3IgIlRydWUiLiAgV2hlbiB0aGlzIG1ldGhvZCBpcyBub3RcbiAgIGRlZmluZWQsICJfX2xlbl9fKCkiIGlzIGNhbGxlZCwgaWYgaXQgaXMgZGVmaW5lZCwgYW5kIHRoZSBvYmplY3QgaXNcbiAgIGNvbnNpZGVyZWQgdHJ1ZSBpZiBpdHMgcmVzdWx0IGlzIG5vbnplcm8uICBJZiBhIGNsYXNzIGRlZmluZXNcbiAgIG5laXRoZXIgIl9fbGVuX18oKSIgbm9yICJfX2Jvb2xfXygpIiwgYWxsIGl0cyBpbnN0YW5jZXMgYXJlXG4gICBjb25zaWRlcmVkIHRydWUuXG4nLAotICdkZWJ1Z2dlcic6ICdcbiJwZGIiIC0tLSBUaGUgUHl0aG9uIERlYnVnZ2VyXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG5UaGUgbW9kdWxlICJwZGIiIGRlZmluZXMgYW4gaW50ZXJhY3RpdmUgc291cmNlIGNvZGUgZGVidWdnZXIgZm9yXG5QeXRob24gcHJvZ3JhbXMuICBJdCBzdXBwb3J0cyBzZXR0aW5nIChjb25kaXRpb25hbCkgYnJlYWtwb2ludHMgYW5kXG5zaW5nbGUgc3RlcHBpbmcgYXQgdGhlIHNvdXJjZSBsaW5lIGxldmVsLCBpbnNwZWN0aW9uIG9mIHN0YWNrIGZyYW1lcyxcbnNvdXJjZSBjb2RlIGxpc3RpbmcsIGFuZCBldmFsdWF0aW9uIG9mIGFyYml0cmFyeSBQeXRob24gY29kZSBpbiB0aGVcbmNvbnRleHQgb2YgYW55IHN0YWNrIGZyYW1lLiAgSXQgYWxzbyBzdXBwb3J0cyBwb3N0LW1vcnRlbSBkZWJ1Z2dpbmdcbmFuZCBjYW4gYmUgY2FsbGVkIHVuZGVyIHByb2dyYW0gY29udHJvbC5cblxuVGhlIGRlYnVnZ2VyIGlzIGV4dGVuc2libGUgLS0gaXQgaXMgYWN0dWFsbHkgZGVmaW5lZCBhcyB0aGUgY2xhc3NcbiJQZGIiLiBUaGlzIGlzIGN1cnJlbnRseSB1bmRvY3VtZW50ZWQgYnV0IGVhc2lseSB1bmRlcnN0b29kIGJ5IHJlYWRpbmdcbnRoZSBzb3VyY2UuICBUaGUgZXh0ZW5zaW9uIGludGVyZmFjZSB1c2VzIHRoZSBtb2R1bGVzICJiZGIiIGFuZCAiY21kIi5cblxuVGhlIGRlYnVnZ2VyXCdzIHByb21wdCBpcyAiKFBkYikiLiBUeXBpY2FsIHVzYWdlIHRvIHJ1biBhIHByb2dyYW0gdW5kZXJcbmNvbnRyb2wgb2YgdGhlIGRlYnVnZ2VyIGlzOlxuXG4gICA+Pj4gaW1wb3J0IHBkYlxuICAgPj4+IGltcG9ydCBteW1vZHVsZVxuICAgPj4+IHBkYi5ydW4oXCdteW1vZHVsZS50ZXN0KClcJylcbiAgID4gPHN0cmluZz4oMCk/KClcbiAgIChQZGIpIGNvbnRpbnVlXG4gICA+IDxzdHJpbmc+KDEpPygpXG4gICAoUGRiKSBjb250aW51ZVxuICAgTmFtZUVycm9yOiBcJ3NwYW1cJ1xuICAgPiA8c3RyaW5nPigxKT8oKVxuICAgKFBkYilcblxuQ2hhbmdlZCBpbiB2ZXJzaW9uIDMuMzogVGFiLWNvbXBsZXRpb24gdmlhIHRoZSAicmVhZGxpbmUiIG1vZHVsZSBpc1xuYXZhaWxhYmxlIGZvciBjb21tYW5kcyBhbmQgY29tbWFuZCBhcmd1bWVudHMsIGUuZy4gdGhlIGN1cnJlbnQgZ2xvYmFsXG5hbmQgbG9jYWwgbmFtZXMgYXJlIG9mZmVyZWQgYXMgYXJndW1lbnRzIG9mIHRoZSAicHJpbnQiIGNvbW1hbmQuXG5cbiJwZGIucHkiIGNhbiBhbHNvIGJlIGludm9rZWQgYXMgYSBzY3JpcHQgdG8gZGVidWcgb3RoZXIgc2NyaXB0cy4gIEZvclxuZXhhbXBsZTpcblxuICAgcHl0aG9uMyAtbSBwZGIgbXlzY3JpcHQucHlcblxuV2hlbiBpbnZva2VkIGFzIGEgc2NyaXB0LCBwZGIgd2lsbCBhdXRvbWF0aWNhbGx5IGVudGVyIHBvc3QtbW9ydGVtXG5kZWJ1Z2dpbmcgaWYgdGhlIHByb2dyYW0gYmVpbmcgZGVidWdnZWQgZXhpdHMgYWJub3JtYWxseS4gIEFmdGVyIHBvc3QtXG5tb3J0ZW0gZGVidWdnaW5nIChvciBhZnRlciBub3JtYWwgZXhpdCBvZiB0aGUgcHJvZ3JhbSksIHBkYiB3aWxsXG5yZXN0YXJ0IHRoZSBwcm9ncmFtLiAgQXV0b21hdGljIHJlc3RhcnRpbmcgcHJlc2VydmVzIHBkYlwncyBzdGF0ZSAoc3VjaFxuYXMgYnJlYWtwb2ludHMpIGFuZCBpbiBtb3N0IGNhc2VzIGlzIG1vcmUgdXNlZnVsIHRoYW4gcXVpdHRpbmcgdGhlXG5kZWJ1Z2dlciB1cG9uIHByb2dyYW1cJ3MgZXhpdC5cblxuTmV3IGluIHZlcnNpb24gMy4yOiAicGRiLnB5IiBub3cgYWNjZXB0cyBhICItYyIgb3B0aW9uIHRoYXQgZXhlY3V0ZXNcbmNvbW1hbmRzIGFzIGlmIGdpdmVuIGluIGEgIi5wZGJyYyIgZmlsZSwgc2VlICpEZWJ1Z2dlciBDb21tYW5kcyouXG5cblRoZSB0eXBpY2FsIHVzYWdlIHRvIGJyZWFrIGludG8gdGhlIGRlYnVnZ2VyIGZyb20gYSBydW5uaW5nIHByb2dyYW0gaXNcbnRvIGluc2VydFxuXG4gICBpbXBvcnQgcGRiOyBwZGIuc2V0X3RyYWNlKClcblxuYXQgdGhlIGxvY2F0aW9uIHlvdSB3YW50IHRvIGJyZWFrIGludG8gdGhlIGRlYnVnZ2VyLiAgWW91IGNhbiB0aGVuXG5zdGVwIHRocm91Z2ggdGhlIGNvZGUgZm9sbG93aW5nIHRoaXMgc3RhdGVtZW50LCBhbmQgY29udGludWUgcnVubmluZ1xud2l0aG91dCB0aGUgZGVidWdnZXIgdXNpbmcgdGhlICJjb250aW51ZSIgY29tbWFuZC5cblxuVGhlIHR5cGljYWwgdXNhZ2UgdG8gaW5zcGVjdCBhIGNyYXNoZWQgcHJvZ3JhbSBpczpcblxuICAgPj4+IGltcG9ydCBwZGJcbiAgID4+PiBpbXBvcnQgbXltb2R1bGVcbiAgID4+PiBteW1vZHVsZS50ZXN0KClcbiAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KTpcbiAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgMSwgaW4gP1xuICAgICBGaWxlICIuL215bW9kdWxlLnB5IiwgbGluZSA0LCBpbiB0ZXN0XG4gICAgICAgdGVzdDIoKVxuICAgICBGaWxlICIuL215bW9kdWxlLnB5IiwgbGluZSAzLCBpbiB0ZXN0MlxuICAgICAgIHByaW50KHNwYW0pXG4gICBOYW1lRXJyb3I6IHNwYW1cbiAgID4+PiBwZGIucG0oKVxuICAgPiAuL215bW9kdWxlLnB5KDMpdGVzdDIoKVxuICAgLT4gcHJpbnQoc3BhbSlcbiAgIChQZGIpXG5cblRoZSBtb2R1bGUgZGVmaW5lcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczsgZWFjaCBlbnRlcnMgdGhlIGRlYnVnZ2VyXG5pbiBhIHNsaWdodGx5IGRpZmZlcmVudCB3YXk6XG5cbnBkYi5ydW4oc3RhdGVtZW50LCBnbG9iYWxzPU5vbmUsIGxvY2Fscz1Ob25lKVxuXG4gICBFeGVjdXRlIHRoZSAqc3RhdGVtZW50KiAoZ2l2ZW4gYXMgYSBzdHJpbmcgb3IgYSBjb2RlIG9iamVjdCkgdW5kZXJcbiAgIGRlYnVnZ2VyIGNvbnRyb2wuICBUaGUgZGVidWdnZXIgcHJvbXB0IGFwcGVhcnMgYmVmb3JlIGFueSBjb2RlIGlzXG4gICBleGVjdXRlZDsgeW91IGNhbiBzZXQgYnJlYWtwb2ludHMgYW5kIHR5cGUgImNvbnRpbnVlIiwgb3IgeW91IGNhblxuICAgc3RlcCB0aHJvdWdoIHRoZSBzdGF0ZW1lbnQgdXNpbmcgInN0ZXAiIG9yICJuZXh0IiAoYWxsIHRoZXNlXG4gICBjb21tYW5kcyBhcmUgZXhwbGFpbmVkIGJlbG93KS4gIFRoZSBvcHRpb25hbCAqZ2xvYmFscyogYW5kICpsb2NhbHMqXG4gICBhcmd1bWVudHMgc3BlY2lmeSB0aGUgZW52aXJvbm1lbnQgaW4gd2hpY2ggdGhlIGNvZGUgaXMgZXhlY3V0ZWQ7IGJ5XG4gICBkZWZhdWx0IHRoZSBkaWN0aW9uYXJ5IG9mIHRoZSBtb2R1bGUgIl9fbWFpbl9fIiBpcyB1c2VkLiAgKFNlZSB0aGVcbiAgIGV4cGxhbmF0aW9uIG9mIHRoZSBidWlsdC1pbiAiZXhlYygpIiBvciAiZXZhbCgpIiBmdW5jdGlvbnMuKVxuXG5wZGIucnVuZXZhbChleHByZXNzaW9uLCBnbG9iYWxzPU5vbmUsIGxvY2Fscz1Ob25lKVxuXG4gICBFdmFsdWF0ZSB0aGUgKmV4cHJlc3Npb24qIChnaXZlbiBhcyBhIHN0cmluZyBvciBhIGNvZGUgb2JqZWN0KVxuICAgdW5kZXIgZGVidWdnZXIgY29udHJvbC4gIFdoZW4gInJ1bmV2YWwoKSIgcmV0dXJucywgaXQgcmV0dXJucyB0aGVcbiAgIHZhbHVlIG9mIHRoZSBleHByZXNzaW9uLiAgT3RoZXJ3aXNlIHRoaXMgZnVuY3Rpb24gaXMgc2ltaWxhciB0b1xuICAgInJ1bigpIi5cblxucGRiLnJ1bmNhbGwoZnVuY3Rpb24sICphcmdzLCAqKmt3ZHMpXG5cbiAgIENhbGwgdGhlICpmdW5jdGlvbiogKGEgZnVuY3Rpb24gb3IgbWV0aG9kIG9iamVjdCwgbm90IGEgc3RyaW5nKVxuICAgd2l0aCB0aGUgZ2l2ZW4gYXJndW1lbnRzLiAgV2hlbiAicnVuY2FsbCgpIiByZXR1cm5zLCBpdCByZXR1cm5zXG4gICB3aGF0ZXZlciB0aGUgZnVuY3Rpb24gY2FsbCByZXR1cm5lZC4gIFRoZSBkZWJ1Z2dlciBwcm9tcHQgYXBwZWFyc1xuICAgYXMgc29vbiBhcyB0aGUgZnVuY3Rpb24gaXMgZW50ZXJlZC5cblxucGRiLnNldF90cmFjZSgpXG5cbiAgIEVudGVyIHRoZSBkZWJ1Z2dlciBhdCB0aGUgY2FsbGluZyBzdGFjayBmcmFtZS4gIFRoaXMgaXMgdXNlZnVsIHRvXG4gICBoYXJkLWNvZGUgYSBicmVha3BvaW50IGF0IGEgZ2l2ZW4gcG9pbnQgaW4gYSBwcm9ncmFtLCBldmVuIGlmIHRoZVxuICAgY29kZSBpcyBub3Qgb3RoZXJ3aXNlIGJlaW5nIGRlYnVnZ2VkIChlLmcuIHdoZW4gYW4gYXNzZXJ0aW9uXG4gICBmYWlscykuXG5cbnBkYi5wb3N0X21vcnRlbSh0cmFjZWJhY2s9Tm9uZSlcblxuICAgRW50ZXIgcG9zdC1tb3J0ZW0gZGVidWdnaW5nIG9mIHRoZSBnaXZlbiAqdHJhY2ViYWNrKiBvYmplY3QuICBJZiBub1xuICAgKnRyYWNlYmFjayogaXMgZ2l2ZW4sIGl0IHVzZXMgdGhlIG9uZSBvZiB0aGUgZXhjZXB0aW9uIHRoYXQgaXNcbiAgIGN1cnJlbnRseSBiZWluZyBoYW5kbGVkIChhbiBleGNlcHRpb24gbXVzdCBiZSBiZWluZyBoYW5kbGVkIGlmIHRoZVxuICAgZGVmYXVsdCBpcyB0byBiZSB1c2VkKS5cblxucGRiLnBtKClcblxuICAgRW50ZXIgcG9zdC1tb3J0ZW0gZGVidWdnaW5nIG9mIHRoZSB0cmFjZWJhY2sgZm91bmQgaW5cbiAgICJzeXMubGFzdF90cmFjZWJhY2siLlxuXG5UaGUgInJ1bioiIGZ1bmN0aW9ucyBhbmQgInNldF90cmFjZSgpIiBhcmUgYWxpYXNlcyBmb3IgaW5zdGFudGlhdGluZ1xudGhlICJQZGIiIGNsYXNzIGFuZCBjYWxsaW5nIHRoZSBtZXRob2Qgb2YgdGhlIHNhbWUgbmFtZS4gIElmIHlvdSB3YW50XG50byBhY2Nlc3MgZnVydGhlciBmZWF0dXJlcywgeW91IGhhdmUgdG8gZG8gdGhpcyB5b3Vyc2VsZjpcblxuY2xhc3MgY2xhc3MgcGRiLlBkYihjb21wbGV0ZWtleT1cJ3RhYlwnLCBzdGRpbj1Ob25lLCBzdGRvdXQ9Tm9uZSwgc2tpcD1Ob25lLCBub3NpZ2ludD1GYWxzZSlcblxuICAgIlBkYiIgaXMgdGhlIGRlYnVnZ2VyIGNsYXNzLlxuXG4gICBUaGUgKmNvbXBsZXRla2V5KiwgKnN0ZGluKiBhbmQgKnN0ZG91dCogYXJndW1lbnRzIGFyZSBwYXNzZWQgdG8gdGhlXG4gICB1bmRlcmx5aW5nICJjbWQuQ21kIiBjbGFzczsgc2VlIHRoZSBkZXNjcmlwdGlvbiB0aGVyZS5cblxuICAgVGhlICpza2lwKiBhcmd1bWVudCwgaWYgZ2l2ZW4sIG11c3QgYmUgYW4gaXRlcmFibGUgb2YgZ2xvYi1zdHlsZVxuICAgbW9kdWxlIG5hbWUgcGF0dGVybnMuICBUaGUgZGVidWdnZXIgd2lsbCBub3Qgc3RlcCBpbnRvIGZyYW1lcyB0aGF0XG4gICBvcmlnaW5hdGUgaW4gYSBtb2R1bGUgdGhhdCBtYXRjaGVzIG9uZSBvZiB0aGVzZSBwYXR0ZXJucy4gWzFdXG5cbiAgIEJ5IGRlZmF1bHQsIFBkYiBzZXRzIGEgaGFuZGxlciBmb3IgdGhlIFNJR0lOVCBzaWduYWwgKHdoaWNoIGlzIHNlbnRcbiAgIHdoZW4gdGhlIHVzZXIgcHJlc3NlcyBDdHJsLUMgb24gdGhlIGNvbnNvbGUpIHdoZW4geW91IGdpdmUgYVxuICAgImNvbnRpbnVlIiBjb21tYW5kLiBUaGlzIGFsbG93cyB5b3UgdG8gYnJlYWsgaW50byB0aGUgZGVidWdnZXJcbiAgIGFnYWluIGJ5IHByZXNzaW5nIEN0cmwtQy4gIElmIHlvdSB3YW50IFBkYiBub3QgdG8gdG91Y2ggdGhlIFNJR0lOVFxuICAgaGFuZGxlciwgc2V0ICpub3NpZ2ludCogdG90IHRydWUuXG5cbiAgIEV4YW1wbGUgY2FsbCB0byBlbmFibGUgdHJhY2luZyB3aXRoICpza2lwKjpcblxuICAgICAgaW1wb3J0IHBkYjsgcGRiLlBkYihza2lwPVtcJ2RqYW5nby4qXCddKS5zZXRfdHJhY2UoKVxuXG4gICBOZXcgaW4gdmVyc2lvbiAzLjE6IFRoZSAqc2tpcCogYXJndW1lbnQuXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDMuMjogVGhlICpub3NpZ2ludCogYXJndW1lbnQuICBQcmV2aW91c2x5LCBhIFNJR0lOVFxuICAgaGFuZGxlciB3YXMgbmV2ZXIgc2V0IGJ5IFBkYi5cblxuICAgcnVuKHN0YXRlbWVudCwgZ2xvYmFscz1Ob25lLCBsb2NhbHM9Tm9uZSlcbiAgIHJ1bmV2YWwoZXhwcmVzc2lvbiwgZ2xvYmFscz1Ob25lLCBsb2NhbHM9Tm9uZSlcbiAgIHJ1bmNhbGwoZnVuY3Rpb24sICphcmdzLCAqKmt3ZHMpXG4gICBzZXRfdHJhY2UoKVxuXG4gICAgICBTZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZSBmdW5jdGlvbnMgZXhwbGFpbmVkIGFib3ZlLlxuXG5cbkRlYnVnZ2VyIENvbW1hbmRzXG49PT09PT09PT09PT09PT09PVxuXG5UaGUgY29tbWFuZHMgcmVjb2duaXplZCBieSB0aGUgZGVidWdnZXIgYXJlIGxpc3RlZCBiZWxvdy4gIE1vc3RcbmNvbW1hbmRzIGNhbiBiZSBhYmJyZXZpYXRlZCB0byBvbmUgb3IgdHdvIGxldHRlcnMgYXMgaW5kaWNhdGVkOyBlLmcuXG4iaChlbHApIiBtZWFucyB0aGF0IGVpdGhlciAiaCIgb3IgImhlbHAiIGNhbiBiZSB1c2VkIHRvIGVudGVyIHRoZSBoZWxwXG5jb21tYW5kIChidXQgbm90ICJoZSIgb3IgImhlbCIsIG5vciAiSCIgb3IgIkhlbHAiIG9yICJIRUxQIikuXG5Bcmd1bWVudHMgdG8gY29tbWFuZHMgbXVzdCBiZSBzZXBhcmF0ZWQgYnkgd2hpdGVzcGFjZSAoc3BhY2VzIG9yXG50YWJzKS4gIE9wdGlvbmFsIGFyZ3VtZW50cyBhcmUgZW5jbG9zZWQgaW4gc3F1YXJlIGJyYWNrZXRzICgiW10iKSBpblxudGhlIGNvbW1hbmQgc3ludGF4OyB0aGUgc3F1YXJlIGJyYWNrZXRzIG11c3Qgbm90IGJlIHR5cGVkLlxuQWx0ZXJuYXRpdmVzIGluIHRoZSBjb21tYW5kIHN5bnRheCBhcmUgc2VwYXJhdGVkIGJ5IGEgdmVydGljYWwgYmFyXG4oInwiKS5cblxuRW50ZXJpbmcgYSBibGFuayBsaW5lIHJlcGVhdHMgdGhlIGxhc3QgY29tbWFuZCBlbnRlcmVkLiAgRXhjZXB0aW9uOiBpZlxudGhlIGxhc3QgY29tbWFuZCB3YXMgYSAibGlzdCIgY29tbWFuZCwgdGhlIG5leHQgMTEgbGluZXMgYXJlIGxpc3RlZC5cblxuQ29tbWFuZHMgdGhhdCB0aGUgZGVidWdnZXIgZG9lc25cJ3QgcmVjb2duaXplIGFyZSBhc3N1bWVkIHRvIGJlIFB5dGhvblxuc3RhdGVtZW50cyBhbmQgYXJlIGV4ZWN1dGVkIGluIHRoZSBjb250ZXh0IG9mIHRoZSBwcm9ncmFtIGJlaW5nXG5kZWJ1Z2dlZC4gIFB5dGhvbiBzdGF0ZW1lbnRzIGNhbiBhbHNvIGJlIHByZWZpeGVkIHdpdGggYW4gZXhjbGFtYXRpb25cbnBvaW50ICgiISIpLiAgVGhpcyBpcyBhIHBvd2VyZnVsIHdheSB0byBpbnNwZWN0IHRoZSBwcm9ncmFtIGJlaW5nXG5kZWJ1Z2dlZDsgaXQgaXMgZXZlbiBwb3NzaWJsZSB0byBjaGFuZ2UgYSB2YXJpYWJsZSBvciBjYWxsIGEgZnVuY3Rpb24uXG5XaGVuIGFuIGV4Y2VwdGlvbiBvY2N1cnMgaW4gc3VjaCBhIHN0YXRlbWVudCwgdGhlIGV4Y2VwdGlvbiBuYW1lIGlzXG5wcmludGVkIGJ1dCB0aGUgZGVidWdnZXJcJ3Mgc3RhdGUgaXMgbm90IGNoYW5nZWQuXG5cblRoZSBkZWJ1Z2dlciBzdXBwb3J0cyAqYWxpYXNlcyouICBBbGlhc2VzIGNhbiBoYXZlIHBhcmFtZXRlcnMgd2hpY2hcbmFsbG93cyBvbmUgYSBjZXJ0YWluIGxldmVsIG9mIGFkYXB0YWJpbGl0eSB0byB0aGUgY29udGV4dCB1bmRlclxuZXhhbWluYXRpb24uXG5cbk11bHRpcGxlIGNvbW1hbmRzIG1heSBiZSBlbnRlcmVkIG9uIGEgc2luZ2xlIGxpbmUsIHNlcGFyYXRlZCBieSAiOzsiLlxuKEEgc2luZ2xlICI7IiBpcyBub3QgdXNlZCBhcyBpdCBpcyB0aGUgc2VwYXJhdG9yIGZvciBtdWx0aXBsZSBjb21tYW5kc1xuaW4gYSBsaW5lIHRoYXQgaXMgcGFzc2VkIHRvIHRoZSBQeXRob24gcGFyc2VyLikgIE5vIGludGVsbGlnZW5jZSBpc1xuYXBwbGllZCB0byBzZXBhcmF0aW5nIHRoZSBjb21tYW5kczsgdGhlIGlucHV0IGlzIHNwbGl0IGF0IHRoZSBmaXJzdFxuIjs7IiBwYWlyLCBldmVuIGlmIGl0IGlzIGluIHRoZSBtaWRkbGUgb2YgYSBxdW90ZWQgc3RyaW5nLlxuXG5JZiBhIGZpbGUgIi5wZGJyYyIgZXhpc3RzIGluIHRoZSB1c2VyXCdzIGhvbWUgZGlyZWN0b3J5IG9yIGluIHRoZVxuY3VycmVudCBkaXJlY3RvcnksIGl0IGlzIHJlYWQgaW4gYW5kIGV4ZWN1dGVkIGFzIGlmIGl0IGhhZCBiZWVuIHR5cGVkXG5hdCB0aGUgZGVidWdnZXIgcHJvbXB0LiAgVGhpcyBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIGZvciBhbGlhc2VzLiAgSWZcbmJvdGggZmlsZXMgZXhpc3QsIHRoZSBvbmUgaW4gdGhlIGhvbWUgZGlyZWN0b3J5IGlzIHJlYWQgZmlyc3QgYW5kXG5hbGlhc2VzIGRlZmluZWQgdGhlcmUgY2FuIGJlIG92ZXJyaWRkZW4gYnkgdGhlIGxvY2FsIGZpbGUuXG5cbkNoYW5nZWQgaW4gdmVyc2lvbiAzLjI6ICIucGRicmMiIGNhbiBub3cgY29udGFpbiBjb21tYW5kcyB0aGF0XG5jb250aW51ZSBkZWJ1Z2dpbmcsIHN1Y2ggYXMgImNvbnRpbnVlIiBvciAibmV4dCIuICBQcmV2aW91c2x5LCB0aGVzZVxuY29tbWFuZHMgaGFkIG5vIGVmZmVjdC5cblxuaChlbHApIFtjb21tYW5kXVxuXG4gICBXaXRob3V0IGFyZ3VtZW50LCBwcmludCB0aGUgbGlzdCBvZiBhdmFpbGFibGUgY29tbWFuZHMuICBXaXRoIGFcbiAgICpjb21tYW5kKiBhcyBhcmd1bWVudCwgcHJpbnQgaGVscCBhYm91dCB0aGF0IGNvbW1hbmQuICAiaGVscCBwZGIiXG4gICBkaXNwbGF5cyB0aGUgZnVsbCBkb2N1bWVudGF0aW9uICh0aGUgZG9jc3RyaW5nIG9mIHRoZSAicGRiIlxuICAgbW9kdWxlKS4gIFNpbmNlIHRoZSAqY29tbWFuZCogYXJndW1lbnQgbXVzdCBiZSBhbiBpZGVudGlmaWVyLCAiaGVscFxuICAgZXhlYyIgbXVzdCBiZSBlbnRlcmVkIHRvIGdldCBoZWxwIG9uIHRoZSAiISIgY29tbWFuZC5cblxudyhoZXJlKVxuXG4gICBQcmludCBhIHN0YWNrIHRyYWNlLCB3aXRoIHRoZSBtb3N0IHJlY2VudCBmcmFtZSBhdCB0aGUgYm90dG9tLiAgQW5cbiAgIGFycm93IGluZGljYXRlcyB0aGUgY3VycmVudCBmcmFtZSwgd2hpY2ggZGV0ZXJtaW5lcyB0aGUgY29udGV4dCBvZlxuICAgbW9zdCBjb21tYW5kcy5cblxuZChvd24pIFtjb3VudF1cblxuICAgTW92ZSB0aGUgY3VycmVudCBmcmFtZSAqY291bnQqIChkZWZhdWx0IG9uZSkgbGV2ZWxzIGRvd24gaW4gdGhlXG4gICBzdGFjayB0cmFjZSAodG8gYSBuZXdlciBmcmFtZSkuXG5cbnUocCkgW2NvdW50XVxuXG4gICBNb3ZlIHRoZSBjdXJyZW50IGZyYW1lICpjb3VudCogKGRlZmF1bHQgb25lKSBsZXZlbHMgdXAgaW4gdGhlIHN0YWNrXG4gICB0cmFjZSAodG8gYW4gb2xkZXIgZnJhbWUpLlxuXG5iKHJlYWspIFsoW2ZpbGVuYW1lOl1saW5lbm8gfCBmdW5jdGlvbikgWywgY29uZGl0aW9uXV1cblxuICAgV2l0aCBhICpsaW5lbm8qIGFyZ3VtZW50LCBzZXQgYSBicmVhayB0aGVyZSBpbiB0aGUgY3VycmVudCBmaWxlLlxuICAgV2l0aCBhICpmdW5jdGlvbiogYXJndW1lbnQsIHNldCBhIGJyZWFrIGF0IHRoZSBmaXJzdCBleGVjdXRhYmxlXG4gICBzdGF0ZW1lbnQgd2l0aGluIHRoYXQgZnVuY3Rpb24uICBUaGUgbGluZSBudW1iZXIgbWF5IGJlIHByZWZpeGVkXG4gICB3aXRoIGEgZmlsZW5hbWUgYW5kIGEgY29sb24sIHRvIHNwZWNpZnkgYSBicmVha3BvaW50IGluIGFub3RoZXJcbiAgIGZpbGUgKHByb2JhYmx5IG9uZSB0aGF0IGhhc25cJ3QgYmVlbiBsb2FkZWQgeWV0KS4gIFRoZSBmaWxlIGlzXG4gICBzZWFyY2hlZCBvbiAic3lzLnBhdGgiLiAgTm90ZSB0aGF0IGVhY2ggYnJlYWtwb2ludCBpcyBhc3NpZ25lZCBhXG4gICBudW1iZXIgdG8gd2hpY2ggYWxsIHRoZSBvdGhlciBicmVha3BvaW50IGNvbW1hbmRzIHJlZmVyLlxuXG4gICBJZiBhIHNlY29uZCBhcmd1bWVudCBpcyBwcmVzZW50LCBpdCBpcyBhbiBleHByZXNzaW9uIHdoaWNoIG11c3RcbiAgIGV2YWx1YXRlIHRvIHRydWUgYmVmb3JlIHRoZSBicmVha3BvaW50IGlzIGhvbm9yZWQuXG5cbiAgIFdpdGhvdXQgYXJndW1lbnQsIGxpc3QgYWxsIGJyZWFrcywgaW5jbHVkaW5nIGZvciBlYWNoIGJyZWFrcG9pbnQsXG4gICB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoYXQgYnJlYWtwb2ludCBoYXMgYmVlbiBoaXQsIHRoZSBjdXJyZW50XG4gICBpZ25vcmUgY291bnQsIGFuZCB0aGUgYXNzb2NpYXRlZCBjb25kaXRpb24gaWYgYW55LlxuXG50YnJlYWsgWyhbZmlsZW5hbWU6XWxpbmVubyB8IGZ1bmN0aW9uKSBbLCBjb25kaXRpb25dXVxuXG4gICBUZW1wb3JhcnkgYnJlYWtwb2ludCwgd2hpY2ggaXMgcmVtb3ZlZCBhdXRvbWF0aWNhbGx5IHdoZW4gaXQgaXNcbiAgIGZpcnN0IGhpdC4gVGhlIGFyZ3VtZW50cyBhcmUgdGhlIHNhbWUgYXMgZm9yICJicmVhayIuXG5cbmNsKGVhcikgW2ZpbGVuYW1lOmxpbmVubyB8IGJwbnVtYmVyIFticG51bWJlciAuLi5dXVxuXG4gICBXaXRoIGEgKmZpbGVuYW1lOmxpbmVubyogYXJndW1lbnQsIGNsZWFyIGFsbCB0aGUgYnJlYWtwb2ludHMgYXRcbiAgIHRoaXMgbGluZS4gV2l0aCBhIHNwYWNlIHNlcGFyYXRlZCBsaXN0IG9mIGJyZWFrcG9pbnQgbnVtYmVycywgY2xlYXJcbiAgIHRob3NlIGJyZWFrcG9pbnRzLiBXaXRob3V0IGFyZ3VtZW50LCBjbGVhciBhbGwgYnJlYWtzIChidXQgZmlyc3RcbiAgIGFzayBjb25maXJtYXRpb24pLlxuXG5kaXNhYmxlIFticG51bWJlciBbYnBudW1iZXIgLi4uXV1cblxuICAgRGlzYWJsZSB0aGUgYnJlYWtwb2ludHMgZ2l2ZW4gYXMgYSBzcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZlxuICAgYnJlYWtwb2ludCBudW1iZXJzLiAgRGlzYWJsaW5nIGEgYnJlYWtwb2ludCBtZWFucyBpdCBjYW5ub3QgY2F1c2VcbiAgIHRoZSBwcm9ncmFtIHRvIHN0b3AgZXhlY3V0aW9uLCBidXQgdW5saWtlIGNsZWFyaW5nIGEgYnJlYWtwb2ludCwgaXRcbiAgIHJlbWFpbnMgaW4gdGhlIGxpc3Qgb2YgYnJlYWtwb2ludHMgYW5kIGNhbiBiZSAocmUtKWVuYWJsZWQuXG5cbmVuYWJsZSBbYnBudW1iZXIgW2JwbnVtYmVyIC4uLl1dXG5cbiAgIEVuYWJsZSB0aGUgYnJlYWtwb2ludHMgc3BlY2lmaWVkLlxuXG5pZ25vcmUgYnBudW1iZXIgW2NvdW50XVxuXG4gICBTZXQgdGhlIGlnbm9yZSBjb3VudCBmb3IgdGhlIGdpdmVuIGJyZWFrcG9pbnQgbnVtYmVyLiAgSWYgY291bnQgaXNcbiAgIG9taXR0ZWQsIHRoZSBpZ25vcmUgY291bnQgaXMgc2V0IHRvIDAuICBBIGJyZWFrcG9pbnQgYmVjb21lcyBhY3RpdmVcbiAgIHdoZW4gdGhlIGlnbm9yZSBjb3VudCBpcyB6ZXJvLiAgV2hlbiBub24temVybywgdGhlIGNvdW50IGlzXG4gICBkZWNyZW1lbnRlZCBlYWNoIHRpbWUgdGhlIGJyZWFrcG9pbnQgaXMgcmVhY2hlZCBhbmQgdGhlIGJyZWFrcG9pbnRcbiAgIGlzIG5vdCBkaXNhYmxlZCBhbmQgYW55IGFzc29jaWF0ZWQgY29uZGl0aW9uIGV2YWx1YXRlcyB0byB0cnVlLlxuXG5jb25kaXRpb24gYnBudW1iZXIgW2NvbmRpdGlvbl1cblxuICAgU2V0IGEgbmV3ICpjb25kaXRpb24qIGZvciB0aGUgYnJlYWtwb2ludCwgYW4gZXhwcmVzc2lvbiB3aGljaCBtdXN0XG4gICBldmFsdWF0ZSB0byB0cnVlIGJlZm9yZSB0aGUgYnJlYWtwb2ludCBpcyBob25vcmVkLiAgSWYgKmNvbmRpdGlvbipcbiAgIGlzIGFic2VudCwgYW55IGV4aXN0aW5nIGNvbmRpdGlvbiBpcyByZW1vdmVkOyBpLmUuLCB0aGUgYnJlYWtwb2ludFxuICAgaXMgbWFkZSB1bmNvbmRpdGlvbmFsLlxuXG5jb21tYW5kcyBbYnBudW1iZXJdXG5cbiAgIFNwZWNpZnkgYSBsaXN0IG9mIGNvbW1hbmRzIGZvciBicmVha3BvaW50IG51bWJlciAqYnBudW1iZXIqLiAgVGhlXG4gICBjb21tYW5kcyB0aGVtc2VsdmVzIGFwcGVhciBvbiB0aGUgZm9sbG93aW5nIGxpbmVzLiAgVHlwZSBhIGxpbmVcbiAgIGNvbnRhaW5pbmcganVzdCAiZW5kIiB0byB0ZXJtaW5hdGUgdGhlIGNvbW1hbmRzLiBBbiBleGFtcGxlOlxuXG4gICAgICAoUGRiKSBjb21tYW5kcyAxXG4gICAgICAoY29tKSBwcmludCBzb21lX3ZhcmlhYmxlXG4gICAgICAoY29tKSBlbmRcbiAgICAgIChQZGIpXG5cbiAgIFRvIHJlbW92ZSBhbGwgY29tbWFuZHMgZnJvbSBhIGJyZWFrcG9pbnQsIHR5cGUgY29tbWFuZHMgYW5kIGZvbGxvd1xuICAgaXQgaW1tZWRpYXRlbHkgd2l0aCAiZW5kIjsgdGhhdCBpcywgZ2l2ZSBubyBjb21tYW5kcy5cblxuICAgV2l0aCBubyAqYnBudW1iZXIqIGFyZ3VtZW50LCBjb21tYW5kcyByZWZlcnMgdG8gdGhlIGxhc3QgYnJlYWtwb2ludFxuICAgc2V0LlxuXG4gICBZb3UgY2FuIHVzZSBicmVha3BvaW50IGNvbW1hbmRzIHRvIHN0YXJ0IHlvdXIgcHJvZ3JhbSB1cCBhZ2Fpbi5cbiAgIFNpbXBseSB1c2UgdGhlIGNvbnRpbnVlIGNvbW1hbmQsIG9yIHN0ZXAsIG9yIGFueSBvdGhlciBjb21tYW5kIHRoYXRcbiAgIHJlc3VtZXMgZXhlY3V0aW9uLlxuXG4gICBTcGVjaWZ5aW5nIGFueSBjb21tYW5kIHJlc3VtaW5nIGV4ZWN1dGlvbiAoY3VycmVudGx5IGNvbnRpbnVlLFxuICAgc3RlcCwgbmV4dCwgcmV0dXJuLCBqdW1wLCBxdWl0IGFuZCB0aGVpciBhYmJyZXZpYXRpb25zKSB0ZXJtaW5hdGVzXG4gICB0aGUgY29tbWFuZCBsaXN0IChhcyBpZiB0aGF0IGNvbW1hbmQgd2FzIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5XG4gICBlbmQpLiBUaGlzIGlzIGJlY2F1c2UgYW55IHRpbWUgeW91IHJlc3VtZSBleGVjdXRpb24gKGV2ZW4gd2l0aCBhXG4gICBzaW1wbGUgbmV4dCBvciBzdGVwKSwgeW91IG1heSBlbmNvdW50ZXIgYW5vdGhlciBicmVha3BvaW50LS13aGljaFxuICAgY291bGQgaGF2ZSBpdHMgb3duIGNvbW1hbmQgbGlzdCwgbGVhZGluZyB0byBhbWJpZ3VpdGllcyBhYm91dCB3aGljaFxuICAgbGlzdCB0byBleGVjdXRlLlxuXG4gICBJZiB5b3UgdXNlIHRoZSBcJ3NpbGVudFwnIGNvbW1hbmQgaW4gdGhlIGNvbW1hbmQgbGlzdCwgdGhlIHVzdWFsXG4gICBtZXNzYWdlIGFib3V0IHN0b3BwaW5nIGF0IGEgYnJlYWtwb2ludCBpcyBub3QgcHJpbnRlZC4gIFRoaXMgbWF5IGJlXG4gICBkZXNpcmFibGUgZm9yIGJyZWFrcG9pbnRzIHRoYXQgYXJlIHRvIHByaW50IGEgc3BlY2lmaWMgbWVzc2FnZSBhbmRcbiAgIHRoZW4gY29udGludWUuICBJZiBub25lIG9mIHRoZSBvdGhlciBjb21tYW5kcyBwcmludCBhbnl0aGluZywgeW91XG4gICBzZWUgbm8gc2lnbiB0aGF0IHRoZSBicmVha3BvaW50IHdhcyByZWFjaGVkLlxuXG5zKHRlcClcblxuICAgRXhlY3V0ZSB0aGUgY3VycmVudCBsaW5lLCBzdG9wIGF0IHRoZSBmaXJzdCBwb3NzaWJsZSBvY2Nhc2lvblxuICAgKGVpdGhlciBpbiBhIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIG9yIG9uIHRoZSBuZXh0IGxpbmUgaW4gdGhlXG4gICBjdXJyZW50IGZ1bmN0aW9uKS5cblxubihleHQpXG5cbiAgIENvbnRpbnVlIGV4ZWN1dGlvbiB1bnRpbCB0aGUgbmV4dCBsaW5lIGluIHRoZSBjdXJyZW50IGZ1bmN0aW9uIGlzXG4gICByZWFjaGVkIG9yIGl0IHJldHVybnMuICAoVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiAibmV4dCIgYW5kICJzdGVwIlxuICAgaXMgdGhhdCAic3RlcCIgc3RvcHMgaW5zaWRlIGEgY2FsbGVkIGZ1bmN0aW9uLCB3aGlsZSAibmV4dCJcbiAgIGV4ZWN1dGVzIGNhbGxlZCBmdW5jdGlvbnMgYXQgKG5lYXJseSkgZnVsbCBzcGVlZCwgb25seSBzdG9wcGluZyBhdFxuICAgdGhlIG5leHQgbGluZSBpbiB0aGUgY3VycmVudCBmdW5jdGlvbi4pXG5cbnVudChpbCkgW2xpbmVub11cblxuICAgV2l0aG91dCBhcmd1bWVudCwgY29udGludWUgZXhlY3V0aW9uIHVudGlsIHRoZSBsaW5lIHdpdGggYSBudW1iZXJcbiAgIGdyZWF0ZXIgdGhhbiB0aGUgY3VycmVudCBvbmUgaXMgcmVhY2hlZC5cblxuICAgV2l0aCBhIGxpbmUgbnVtYmVyLCBjb250aW51ZSBleGVjdXRpb24gdW50aWwgYSBsaW5lIHdpdGggYSBudW1iZXJcbiAgIGdyZWF0ZXIgb3IgZXF1YWwgdG8gdGhhdCBpcyByZWFjaGVkLiAgSW4gYm90aCBjYXNlcywgYWxzbyBzdG9wIHdoZW5cbiAgIHRoZSBjdXJyZW50IGZyYW1lIHJldHVybnMuXG5cbiAgIENoYW5nZWQgaW4gdmVyc2lvbiAzLjI6IEFsbG93IGdpdmluZyBhbiBleHBsaWNpdCBsaW5lIG51bWJlci5cblxucihldHVybilcblxuICAgQ29udGludWUgZXhlY3V0aW9uIHVudGlsIHRoZSBjdXJyZW50IGZ1bmN0aW9uIHJldHVybnMuXG5cbmMob250KGludWUpKVxuXG4gICBDb250aW51ZSBleGVjdXRpb24sIG9ubHkgc3RvcCB3aGVuIGEgYnJlYWtwb2ludCBpcyBlbmNvdW50ZXJlZC5cblxuaih1bXApIGxpbmVub1xuXG4gICBTZXQgdGhlIG5leHQgbGluZSB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQuICBPbmx5IGF2YWlsYWJsZSBpbiB0aGVcbiAgIGJvdHRvbS1tb3N0IGZyYW1lLiAgVGhpcyBsZXRzIHlvdSBqdW1wIGJhY2sgYW5kIGV4ZWN1dGUgY29kZSBhZ2FpbixcbiAgIG9yIGp1bXAgZm9yd2FyZCB0byBza2lwIGNvZGUgdGhhdCB5b3UgZG9uXCd0IHdhbnQgdG8gcnVuLlxuXG4gICBJdCBzaG91bGQgYmUgbm90ZWQgdGhhdCBub3QgYWxsIGp1bXBzIGFyZSBhbGxvd2VkIC0tIGZvciBpbnN0YW5jZVxuICAgaXQgaXMgbm90IHBvc3NpYmxlIHRvIGp1bXAgaW50byB0aGUgbWlkZGxlIG9mIGEgImZvciIgbG9vcCBvciBvdXRcbiAgIG9mIGEgImZpbmFsbHkiIGNsYXVzZS5cblxubChpc3QpIFtmaXJzdFssIGxhc3RdXVxuXG4gICBMaXN0IHNvdXJjZSBjb2RlIGZvciB0aGUgY3VycmVudCBmaWxlLiAgV2l0aG91dCBhcmd1bWVudHMsIGxpc3QgMTFcbiAgIGxpbmVzIGFyb3VuZCB0aGUgY3VycmVudCBsaW5lIG9yIGNvbnRpbnVlIHRoZSBwcmV2aW91cyBsaXN0aW5nLlxuICAgV2l0aCAiLiIgYXMgYXJndW1lbnQsIGxpc3QgMTEgbGluZXMgYXJvdW5kIHRoZSBjdXJyZW50IGxpbmUuICBXaXRoXG4gICBvbmUgYXJndW1lbnQsIGxpc3QgMTEgbGluZXMgYXJvdW5kIGF0IHRoYXQgbGluZS4gIFdpdGggdHdvXG4gICBhcmd1bWVudHMsIGxpc3QgdGhlIGdpdmVuIHJhbmdlOyBpZiB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzIGxlc3NcbiAgIHRoYW4gdGhlIGZpcnN0LCBpdCBpcyBpbnRlcnByZXRlZCBhcyBhIGNvdW50LlxuXG4gICBUaGUgY3VycmVudCBsaW5lIGluIHRoZSBjdXJyZW50IGZyYW1lIGlzIGluZGljYXRlZCBieSAiLT4iLiAgSWYgYW5cbiAgIGV4Y2VwdGlvbiBpcyBiZWluZyBkZWJ1Z2dlZCwgdGhlIGxpbmUgd2hlcmUgdGhlIGV4Y2VwdGlvbiB3YXNcbiAgIG9yaWdpbmFsbHkgcmFpc2VkIG9yIHByb3BhZ2F0ZWQgaXMgaW5kaWNhdGVkIGJ5ICI+PiIsIGlmIGl0IGRpZmZlcnNcbiAgIGZyb20gdGhlIGN1cnJlbnQgbGluZS5cblxuICAgTmV3IGluIHZlcnNpb24gMy4yOiBUaGUgIj4+IiBtYXJrZXIuXG5cbmxsIHwgbG9uZ2xpc3RcblxuICAgTGlzdCBhbGwgc291cmNlIGNvZGUgZm9yIHRoZSBjdXJyZW50IGZ1bmN0aW9uIG9yIGZyYW1lLlxuICAgSW50ZXJlc3RpbmcgbGluZXMgYXJlIG1hcmtlZCBhcyBmb3IgImxpc3QiLlxuXG4gICBOZXcgaW4gdmVyc2lvbiAzLjIuXG5cbmEocmdzKVxuXG4gICBQcmludCB0aGUgYXJndW1lbnQgbGlzdCBvZiB0aGUgY3VycmVudCBmdW5jdGlvbi5cblxucChyaW50KSBleHByZXNzaW9uXG5cbiAgIEV2YWx1YXRlIHRoZSAqZXhwcmVzc2lvbiogaW4gdGhlIGN1cnJlbnQgY29udGV4dCBhbmQgcHJpbnQgaXRzXG4gICB2YWx1ZS5cblxucHAgZXhwcmVzc2lvblxuXG4gICBMaWtlIHRoZSAicHJpbnQiIGNvbW1hbmQsIGV4Y2VwdCB0aGUgdmFsdWUgb2YgdGhlIGV4cHJlc3Npb24gaXNcbiAgIHByZXR0eS1wcmludGVkIHVzaW5nIHRoZSAicHByaW50IiBtb2R1bGUuXG5cbndoYXRpcyBleHByZXNzaW9uXG5cbiAgIFByaW50IHRoZSB0eXBlIG9mIHRoZSAqZXhwcmVzc2lvbiouXG5cbnNvdXJjZSBleHByZXNzaW9uXG5cbiAgIFRyeSB0byBnZXQgc291cmNlIGNvZGUgZm9yIHRoZSBnaXZlbiBvYmplY3QgYW5kIGRpc3BsYXkgaXQuXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDMuMi5cblxuZGlzcGxheSBbZXhwcmVzc2lvbl1cblxuICAgRGlzcGxheSB0aGUgdmFsdWUgb2YgdGhlIGV4cHJlc3Npb24gaWYgaXQgY2hhbmdlZCwgZWFjaCB0aW1lXG4gICBleGVjdXRpb24gc3RvcHMgaW4gdGhlIGN1cnJlbnQgZnJhbWUuXG5cbiAgIFdpdGhvdXQgZXhwcmVzc2lvbiwgbGlzdCBhbGwgZGlzcGxheSBleHByZXNzaW9ucyBmb3IgdGhlIGN1cnJlbnRcbiAgIGZyYW1lLlxuXG4gICBOZXcgaW4gdmVyc2lvbiAzLjIuXG5cbnVuZGlzcGxheSBbZXhwcmVzc2lvbl1cblxuICAgRG8gbm90IGRpc3BsYXkgdGhlIGV4cHJlc3Npb24gYW55IG1vcmUgaW4gdGhlIGN1cnJlbnQgZnJhbWUuXG4gICBXaXRob3V0IGV4cHJlc3Npb24sIGNsZWFyIGFsbCBkaXNwbGF5IGV4cHJlc3Npb25zIGZvciB0aGUgY3VycmVudFxuICAgZnJhbWUuXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDMuMi5cblxuaW50ZXJhY3RcblxuICAgU3RhcnQgYW4gaW50ZXJhdGl2ZSBpbnRlcnByZXRlciAodXNpbmcgdGhlICJjb2RlIiBtb2R1bGUpIHdob3NlXG4gICBnbG9iYWwgbmFtZXNwYWNlIGNvbnRhaW5zIGFsbCB0aGUgKGdsb2JhbCBhbmQgbG9jYWwpIG5hbWVzIGZvdW5kIGluXG4gICB0aGUgY3VycmVudCBzY29wZS5cblxuICAgTmV3IGluIHZlcnNpb24gMy4yLlxuXG5hbGlhcyBbbmFtZSBbY29tbWFuZF1dXG5cbiAgIENyZWF0ZSBhbiBhbGlhcyBjYWxsZWQgKm5hbWUqIHRoYXQgZXhlY3V0ZXMgKmNvbW1hbmQqLiAgVGhlIGNvbW1hbmRcbiAgIG11c3QgKm5vdCogYmUgZW5jbG9zZWQgaW4gcXVvdGVzLiAgUmVwbGFjZWFibGUgcGFyYW1ldGVycyBjYW4gYmVcbiAgIGluZGljYXRlZCBieSAiJTEiLCAiJTIiLCBhbmQgc28gb24sIHdoaWxlICIlKiIgaXMgcmVwbGFjZWQgYnkgYWxsXG4gICB0aGUgcGFyYW1ldGVycy4gSWYgbm8gY29tbWFuZCBpcyBnaXZlbiwgdGhlIGN1cnJlbnQgYWxpYXMgZm9yXG4gICAqbmFtZSogaXMgc2hvd24uIElmIG5vIGFyZ3VtZW50cyBhcmUgZ2l2ZW4sIGFsbCBhbGlhc2VzIGFyZSBsaXN0ZWQuXG5cbiAgIEFsaWFzZXMgbWF5IGJlIG5lc3RlZCBhbmQgY2FuIGNvbnRhaW4gYW55dGhpbmcgdGhhdCBjYW4gYmUgbGVnYWxseVxuICAgdHlwZWQgYXQgdGhlIHBkYiBwcm9tcHQuICBOb3RlIHRoYXQgaW50ZXJuYWwgcGRiIGNvbW1hbmRzICpjYW4qIGJlXG4gICBvdmVycmlkZGVuIGJ5IGFsaWFzZXMuICBTdWNoIGEgY29tbWFuZCBpcyB0aGVuIGhpZGRlbiB1bnRpbCB0aGVcbiAgIGFsaWFzIGlzIHJlbW92ZWQuICBBbGlhc2luZyBpcyByZWN1cnNpdmVseSBhcHBsaWVkIHRvIHRoZSBmaXJzdFxuICAgd29yZCBvZiB0aGUgY29tbWFuZCBsaW5lOyBhbGwgb3RoZXIgd29yZHMgaW4gdGhlIGxpbmUgYXJlIGxlZnRcbiAgIGFsb25lLlxuXG4gICBBcyBhbiBleGFtcGxlLCBoZXJlIGFyZSB0d28gdXNlZnVsIGFsaWFzZXMgKGVzcGVjaWFsbHkgd2hlbiBwbGFjZWRcbiAgIGluIHRoZSAiLnBkYnJjIiBmaWxlKTpcblxuICAgICAgIyBQcmludCBpbnN0YW5jZSB2YXJpYWJsZXMgKHVzYWdlICJwaSBjbGFzc0luc3QiKVxuICAgICAgYWxpYXMgcGkgZm9yIGsgaW4gJTEuX19kaWN0X18ua2V5cygpOiBwcmludCgiJTEuIixrLCI9IiwlMS5fX2RpY3RfX1trXSlcbiAgICAgICMgUHJpbnQgaW5zdGFuY2UgdmFyaWFibGVzIGluIHNlbGZcbiAgICAgIGFsaWFzIHBzIHBpIHNlbGZcblxudW5hbGlhcyBuYW1lXG5cbiAgIERlbGV0ZSB0aGUgc3BlY2lmaWVkIGFsaWFzLlxuXG4hIHN0YXRlbWVudFxuXG4gICBFeGVjdXRlIHRoZSAob25lLWxpbmUpICpzdGF0ZW1lbnQqIGluIHRoZSBjb250ZXh0IG9mIHRoZSBjdXJyZW50XG4gICBzdGFjayBmcmFtZS4gVGhlIGV4Y2xhbWF0aW9uIHBvaW50IGNhbiBiZSBvbWl0dGVkIHVubGVzcyB0aGUgZmlyc3RcbiAgIHdvcmQgb2YgdGhlIHN0YXRlbWVudCByZXNlbWJsZXMgYSBkZWJ1Z2dlciBjb21tYW5kLiAgVG8gc2V0IGFcbiAgIGdsb2JhbCB2YXJpYWJsZSwgeW91IGNhbiBwcmVmaXggdGhlIGFzc2lnbm1lbnQgY29tbWFuZCB3aXRoIGFcbiAgICJnbG9iYWwiIHN0YXRlbWVudCBvbiB0aGUgc2FtZSBsaW5lLCBlLmcuOlxuXG4gICAgICAoUGRiKSBnbG9iYWwgbGlzdF9vcHRpb25zOyBsaXN0X29wdGlvbnMgPSBbXCctbFwnXVxuICAgICAgKFBkYilcblxucnVuIFthcmdzIC4uLl1cbnJlc3RhcnQgW2FyZ3MgLi4uXVxuXG4gICBSZXN0YXJ0IHRoZSBkZWJ1Z2dlZCBQeXRob24gcHJvZ3JhbS4gIElmIGFuIGFyZ3VtZW50IGlzIHN1cHBsaWVkLFxuICAgaXQgaXMgc3BsaXQgd2l0aCAic2hsZXgiIGFuZCB0aGUgcmVzdWx0IGlzIHVzZWQgYXMgdGhlIG5ld1xuICAgInN5cy5hcmd2Ii4gSGlzdG9yeSwgYnJlYWtwb2ludHMsIGFjdGlvbnMgYW5kIGRlYnVnZ2VyIG9wdGlvbnMgYXJlXG4gICBwcmVzZXJ2ZWQuICJyZXN0YXJ0IiBpcyBhbiBhbGlhcyBmb3IgInJ1biIuXG5cbnEodWl0KVxuXG4gICBRdWl0IGZyb20gdGhlIGRlYnVnZ2VyLiAgVGhlIHByb2dyYW0gYmVpbmcgZXhlY3V0ZWQgaXMgYWJvcnRlZC5cblxuLVsgRm9vdG5vdGVzIF0tXG5cblsxXSBXaGV0aGVyIGEgZnJhbWUgaXMgY29uc2lkZXJlZCB0byBvcmlnaW5hdGUgaW4gYSBjZXJ0YWluIG1vZHVsZVxuICAgIGlzIGRldGVybWluZWQgYnkgdGhlICJfX25hbWVfXyIgaW4gdGhlIGZyYW1lIGdsb2JhbHMuXG4nLAotICdkZWwnOiAnXG5UaGUgImRlbCIgc3RhdGVtZW50XG4qKioqKioqKioqKioqKioqKioqXG5cbiAgIGRlbF9zdG10IDo6PSAiZGVsIiB0YXJnZXRfbGlzdFxuXG5EZWxldGlvbiBpcyByZWN1cnNpdmVseSBkZWZpbmVkIHZlcnkgc2ltaWxhciB0byB0aGUgd2F5IGFzc2lnbm1lbnQgaXNcbmRlZmluZWQuIFJhdGhlciB0aGFuIHNwZWxsaW5nIGl0IG91dCBpbiBmdWxsIGRldGFpbHMsIGhlcmUgYXJlIHNvbWVcbmhpbnRzLlxuXG5EZWxldGlvbiBvZiBhIHRhcmdldCBsaXN0IHJlY3Vyc2l2ZWx5IGRlbGV0ZXMgZWFjaCB0YXJnZXQsIGZyb20gbGVmdFxudG8gcmlnaHQuXG5cbkRlbGV0aW9uIG9mIGEgbmFtZSByZW1vdmVzIHRoZSBiaW5kaW5nIG9mIHRoYXQgbmFtZSBmcm9tIHRoZSBsb2NhbCBvclxuZ2xvYmFsIG5hbWVzcGFjZSwgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIG5hbWUgb2NjdXJzIGluIGEgImdsb2JhbCJcbnN0YXRlbWVudCBpbiB0aGUgc2FtZSBjb2RlIGJsb2NrLiAgSWYgdGhlIG5hbWUgaXMgdW5ib3VuZCwgYVxuIk5hbWVFcnJvciIgZXhjZXB0aW9uIHdpbGwgYmUgcmFpc2VkLlxuXG5EZWxldGlvbiBvZiBhdHRyaWJ1dGUgcmVmZXJlbmNlcywgc3Vic2NyaXB0aW9ucyBhbmQgc2xpY2luZ3MgaXMgcGFzc2VkXG50byB0aGUgcHJpbWFyeSBvYmplY3QgaW52b2x2ZWQ7IGRlbGV0aW9uIG9mIGEgc2xpY2luZyBpcyBpbiBnZW5lcmFsXG5lcXVpdmFsZW50IHRvIGFzc2lnbm1lbnQgb2YgYW4gZW1wdHkgc2xpY2Ugb2YgdGhlIHJpZ2h0IHR5cGUgKGJ1dCBldmVuXG50aGlzIGlzIGRldGVybWluZWQgYnkgdGhlIHNsaWNlZCBvYmplY3QpLlxuXG5DaGFuZ2VkIGluIHZlcnNpb24gMy4yOiBQcmV2aW91c2x5IGl0IHdhcyBpbGxlZ2FsIHRvIGRlbGV0ZSBhIG5hbWVcbmZyb20gdGhlIGxvY2FsIG5hbWVzcGFjZSBpZiBpdCBvY2N1cnMgYXMgYSBmcmVlIHZhcmlhYmxlIGluIGEgbmVzdGVkXG5ibG9jay5cbicsCi0gJ2RpY3QnOiAnXG5EaWN0aW9uYXJ5IGRpc3BsYXlzXG4qKioqKioqKioqKioqKioqKioqXG5cbkEgZGljdGlvbmFyeSBkaXNwbGF5IGlzIGEgcG9zc2libHkgZW1wdHkgc2VyaWVzIG9mIGtleS9kYXR1bSBwYWlyc1xuZW5jbG9zZWQgaW4gY3VybHkgYnJhY2VzOlxuXG4gICBkaWN0X2Rpc3BsYXkgICAgICAgOjo9ICJ7IiBba2V5X2RhdHVtX2xpc3QgfCBkaWN0X2NvbXByZWhlbnNpb25dICJ9IlxuICAga2V5X2RhdHVtX2xpc3QgICAgIDo6PSBrZXlfZGF0dW0gKCIsIiBrZXlfZGF0dW0pKiBbIiwiXVxuICAga2V5X2RhdHVtICAgICAgICAgIDo6PSBleHByZXNzaW9uICI6IiBleHByZXNzaW9uXG4gICBkaWN0X2NvbXByZWhlbnNpb24gOjo9IGV4cHJlc3Npb24gIjoiIGV4cHJlc3Npb24gY29tcF9mb3JcblxuQSBkaWN0aW9uYXJ5IGRpc3BsYXkgeWllbGRzIGEgbmV3IGRpY3Rpb25hcnkgb2JqZWN0LlxuXG5JZiBhIGNvbW1hLXNlcGFyYXRlZCBzZXF1ZW5jZSBvZiBrZXkvZGF0dW0gcGFpcnMgaXMgZ2l2ZW4sIHRoZXkgYXJlXG5ldmFsdWF0ZWQgZnJvbSBsZWZ0IHRvIHJpZ2h0IHRvIGRlZmluZSB0aGUgZW50cmllcyBvZiB0aGUgZGljdGlvbmFyeTpcbmVhY2gga2V5IG9iamVjdCBpcyB1c2VkIGFzIGEga2V5IGludG8gdGhlIGRpY3Rpb25hcnkgdG8gc3RvcmUgdGhlXG5jb3JyZXNwb25kaW5nIGRhdHVtLiAgVGhpcyBtZWFucyB0aGF0IHlvdSBjYW4gc3BlY2lmeSB0aGUgc2FtZSBrZXlcbm11bHRpcGxlIHRpbWVzIGluIHRoZSBrZXkvZGF0dW0gbGlzdCwgYW5kIHRoZSBmaW5hbCBkaWN0aW9uYXJ5XCdzIHZhbHVlXG5mb3IgdGhhdCBrZXkgd2lsbCBiZSB0aGUgbGFzdCBvbmUgZ2l2ZW4uXG5cbkEgZGljdCBjb21wcmVoZW5zaW9uLCBpbiBjb250cmFzdCB0byBsaXN0IGFuZCBzZXQgY29tcHJlaGVuc2lvbnMsXG5uZWVkcyB0d28gZXhwcmVzc2lvbnMgc2VwYXJhdGVkIHdpdGggYSBjb2xvbiBmb2xsb3dlZCBieSB0aGUgdXN1YWxcbiJmb3IiIGFuZCAiaWYiIGNsYXVzZXMuIFdoZW4gdGhlIGNvbXByZWhlbnNpb24gaXMgcnVuLCB0aGUgcmVzdWx0aW5nXG5rZXkgYW5kIHZhbHVlIGVsZW1lbnRzIGFyZSBpbnNlcnRlZCBpbiB0aGUgbmV3IGRpY3Rpb25hcnkgaW4gdGhlIG9yZGVyXG50aGV5IGFyZSBwcm9kdWNlZC5cblxuUmVzdHJpY3Rpb25zIG9uIHRoZSB0eXBlcyBvZiB0aGUga2V5IHZhbHVlcyBhcmUgbGlzdGVkIGVhcmxpZXIgaW5cbnNlY3Rpb24gKlRoZSBzdGFuZGFyZCB0eXBlIGhpZXJhcmNoeSouICAoVG8gc3VtbWFyaXplLCB0aGUga2V5IHR5cGVcbnNob3VsZCBiZSAqaGFzaGFibGUqLCB3aGljaCBleGNsdWRlcyBhbGwgbXV0YWJsZSBvYmplY3RzLikgIENsYXNoZXNcbmJldHdlZW4gZHVwbGljYXRlIGtleXMgYXJlIG5vdCBkZXRlY3RlZDsgdGhlIGxhc3QgZGF0dW0gKHRleHR1YWxseVxucmlnaHRtb3N0IGluIHRoZSBkaXNwbGF5KSBzdG9yZWQgZm9yIGEgZ2l2ZW4ga2V5IHZhbHVlIHByZXZhaWxzLlxuJywKLSAnZHluYW1pYy1mZWF0dXJlcyc6ICdcbkludGVyYWN0aW9uIHdpdGggZHluYW1pYyBmZWF0dXJlc1xuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cblRoZXJlIGFyZSBzZXZlcmFsIGNhc2VzIHdoZXJlIFB5dGhvbiBzdGF0ZW1lbnRzIGFyZSBpbGxlZ2FsIHdoZW4gdXNlZFxuaW4gY29uanVuY3Rpb24gd2l0aCBuZXN0ZWQgc2NvcGVzIHRoYXQgY29udGFpbiBmcmVlIHZhcmlhYmxlcy5cblxuSWYgYSB2YXJpYWJsZSBpcyByZWZlcmVuY2VkIGluIGFuIGVuY2xvc2luZyBzY29wZSwgaXQgaXMgaWxsZWdhbCB0b1xuZGVsZXRlIHRoZSBuYW1lLiAgQW4gZXJyb3Igd2lsbCBiZSByZXBvcnRlZCBhdCBjb21waWxlIHRpbWUuXG5cbklmIHRoZSB3aWxkIGNhcmQgZm9ybSBvZiBpbXBvcnQgLS0tICJpbXBvcnQgKiIgLS0tIGlzIHVzZWQgaW4gYVxuZnVuY3Rpb24gYW5kIHRoZSBmdW5jdGlvbiBjb250YWlucyBvciBpcyBhIG5lc3RlZCBibG9jayB3aXRoIGZyZWVcbnZhcmlhYmxlcywgdGhlIGNvbXBpbGVyIHdpbGwgcmFpc2UgYSAiU3ludGF4RXJyb3IiLlxuXG5UaGUgImV2YWwoKSIgYW5kICJleGVjKCkiIGZ1bmN0aW9ucyBkbyBub3QgaGF2ZSBhY2Nlc3MgdG8gdGhlIGZ1bGxcbmVudmlyb25tZW50IGZvciByZXNvbHZpbmcgbmFtZXMuICBOYW1lcyBtYXkgYmUgcmVzb2x2ZWQgaW4gdGhlIGxvY2FsXG5hbmQgZ2xvYmFsIG5hbWVzcGFjZXMgb2YgdGhlIGNhbGxlci4gIEZyZWUgdmFyaWFibGVzIGFyZSBub3QgcmVzb2x2ZWRcbmluIHRoZSBuZWFyZXN0IGVuY2xvc2luZyBuYW1lc3BhY2UsIGJ1dCBpbiB0aGUgZ2xvYmFsIG5hbWVzcGFjZS4gIFsxXVxuVGhlICJleGVjKCkiIGFuZCAiZXZhbCgpIiBmdW5jdGlvbnMgaGF2ZSBvcHRpb25hbCBhcmd1bWVudHMgdG9cbm92ZXJyaWRlIHRoZSBnbG9iYWwgYW5kIGxvY2FsIG5hbWVzcGFjZS4gIElmIG9ubHkgb25lIG5hbWVzcGFjZSBpc1xuc3BlY2lmaWVkLCBpdCBpcyB1c2VkIGZvciBib3RoLlxuJywKLSAnZWxzZSc6ICdcblRoZSAiaWYiIHN0YXRlbWVudFxuKioqKioqKioqKioqKioqKioqXG5cblRoZSAiaWYiIHN0YXRlbWVudCBpcyB1c2VkIGZvciBjb25kaXRpb25hbCBleGVjdXRpb246XG5cbiAgIGlmX3N0bXQgOjo9ICJpZiIgZXhwcmVzc2lvbiAiOiIgc3VpdGVcbiAgICAgICAgICAgICAgICggImVsaWYiIGV4cHJlc3Npb24gIjoiIHN1aXRlICkqXG4gICAgICAgICAgICAgICBbImVsc2UiICI6IiBzdWl0ZV1cblxuSXQgc2VsZWN0cyBleGFjdGx5IG9uZSBvZiB0aGUgc3VpdGVzIGJ5IGV2YWx1YXRpbmcgdGhlIGV4cHJlc3Npb25zIG9uZVxuYnkgb25lIHVudGlsIG9uZSBpcyBmb3VuZCB0byBiZSB0cnVlIChzZWUgc2VjdGlvbiAqQm9vbGVhbiBvcGVyYXRpb25zKlxuZm9yIHRoZSBkZWZpbml0aW9uIG9mIHRydWUgYW5kIGZhbHNlKTsgdGhlbiB0aGF0IHN1aXRlIGlzIGV4ZWN1dGVkXG4oYW5kIG5vIG90aGVyIHBhcnQgb2YgdGhlICJpZiIgc3RhdGVtZW50IGlzIGV4ZWN1dGVkIG9yIGV2YWx1YXRlZCkuXG5JZiBhbGwgZXhwcmVzc2lvbnMgYXJlIGZhbHNlLCB0aGUgc3VpdGUgb2YgdGhlICJlbHNlIiBjbGF1c2UsIGlmXG5wcmVzZW50LCBpcyBleGVjdXRlZC5cbicsCi0gJ2V4Y2VwdGlvbnMnOiAnXG5FeGNlcHRpb25zXG4qKioqKioqKioqXG5cbkV4Y2VwdGlvbnMgYXJlIGEgbWVhbnMgb2YgYnJlYWtpbmcgb3V0IG9mIHRoZSBub3JtYWwgZmxvdyBvZiBjb250cm9sXG5vZiBhIGNvZGUgYmxvY2sgaW4gb3JkZXIgdG8gaGFuZGxlIGVycm9ycyBvciBvdGhlciBleGNlcHRpb25hbFxuY29uZGl0aW9ucy4gIEFuIGV4Y2VwdGlvbiBpcyAqcmFpc2VkKiBhdCB0aGUgcG9pbnQgd2hlcmUgdGhlIGVycm9yIGlzXG5kZXRlY3RlZDsgaXQgbWF5IGJlICpoYW5kbGVkKiBieSB0aGUgc3Vycm91bmRpbmcgY29kZSBibG9jayBvciBieSBhbnlcbmNvZGUgYmxvY2sgdGhhdCBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGludm9rZWQgdGhlIGNvZGUgYmxvY2sgd2hlcmVcbnRoZSBlcnJvciBvY2N1cnJlZC5cblxuVGhlIFB5dGhvbiBpbnRlcnByZXRlciByYWlzZXMgYW4gZXhjZXB0aW9uIHdoZW4gaXQgZGV0ZWN0cyBhIHJ1bi10aW1lXG5lcnJvciAoc3VjaCBhcyBkaXZpc2lvbiBieSB6ZXJvKS4gIEEgUHl0aG9uIHByb2dyYW0gY2FuIGFsc29cbmV4cGxpY2l0bHkgcmFpc2UgYW4gZXhjZXB0aW9uIHdpdGggdGhlICJyYWlzZSIgc3RhdGVtZW50LiBFeGNlcHRpb25cbmhhbmRsZXJzIGFyZSBzcGVjaWZpZWQgd2l0aCB0aGUgInRyeSIgLi4uICJleGNlcHQiIHN0YXRlbWVudC4gIFRoZVxuImZpbmFsbHkiIGNsYXVzZSBvZiBzdWNoIGEgc3RhdGVtZW50IGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgY2xlYW51cFxuY29kZSB3aGljaCBkb2VzIG5vdCBoYW5kbGUgdGhlIGV4Y2VwdGlvbiwgYnV0IGlzIGV4ZWN1dGVkIHdoZXRoZXIgYW5cbmV4Y2VwdGlvbiBvY2N1cnJlZCBvciBub3QgaW4gdGhlIHByZWNlZGluZyBjb2RlLlxuXG5QeXRob24gdXNlcyB0aGUgInRlcm1pbmF0aW9uIiBtb2RlbCBvZiBlcnJvciBoYW5kbGluZzogYW4gZXhjZXB0aW9uXG5oYW5kbGVyIGNhbiBmaW5kIG91dCB3aGF0IGhhcHBlbmVkIGFuZCBjb250aW51ZSBleGVjdXRpb24gYXQgYW4gb3V0ZXJcbmxldmVsLCBidXQgaXQgY2Fubm90IHJlcGFpciB0aGUgY2F1c2Ugb2YgdGhlIGVycm9yIGFuZCByZXRyeSB0aGVcbmZhaWxpbmcgb3BlcmF0aW9uIChleGNlcHQgYnkgcmUtZW50ZXJpbmcgdGhlIG9mZmVuZGluZyBwaWVjZSBvZiBjb2RlXG5mcm9tIHRoZSB0b3ApLlxuXG5XaGVuIGFuIGV4Y2VwdGlvbiBpcyBub3QgaGFuZGxlZCBhdCBhbGwsIHRoZSBpbnRlcnByZXRlciB0ZXJtaW5hdGVzXG5leGVjdXRpb24gb2YgdGhlIHByb2dyYW0sIG9yIHJldHVybnMgdG8gaXRzIGludGVyYWN0aXZlIG1haW4gbG9vcC4gIEluXG5laXRoZXIgY2FzZSwgaXQgcHJpbnRzIGEgc3RhY2sgYmFja3RyYWNlLCBleGNlcHQgd2hlbiB0aGUgZXhjZXB0aW9uIGlzXG4iU3lzdGVtRXhpdCIuXG5cbkV4Y2VwdGlvbnMgYXJlIGlkZW50aWZpZWQgYnkgY2xhc3MgaW5zdGFuY2VzLiAgVGhlICJleGNlcHQiIGNsYXVzZSBpc1xuc2VsZWN0ZWQgZGVwZW5kaW5nIG9uIHRoZSBjbGFzcyBvZiB0aGUgaW5zdGFuY2U6IGl0IG11c3QgcmVmZXJlbmNlIHRoZVxuY2xhc3Mgb2YgdGhlIGluc3RhbmNlIG9yIGEgYmFzZSBjbGFzcyB0aGVyZW9mLiAgVGhlIGluc3RhbmNlIGNhbiBiZVxucmVjZWl2ZWQgYnkgdGhlIGhhbmRsZXIgYW5kIGNhbiBjYXJyeSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IHRoZVxuZXhjZXB0aW9uYWwgY29uZGl0aW9uLlxuXG5Ob3RlOiBFeGNlcHRpb24gbWVzc2FnZXMgYXJlIG5vdCBwYXJ0IG9mIHRoZSBQeXRob24gQVBJLiAgVGhlaXJcbiAgY29udGVudHMgbWF5IGNoYW5nZSBmcm9tIG9uZSB2ZXJzaW9uIG9mIFB5dGhvbiB0byB0aGUgbmV4dCB3aXRob3V0XG4gIHdhcm5pbmcgYW5kIHNob3VsZCBub3QgYmUgcmVsaWVkIG9uIGJ5IGNvZGUgd2hpY2ggd2lsbCBydW4gdW5kZXJcbiAgbXVsdGlwbGUgdmVyc2lvbnMgb2YgdGhlIGludGVycHJldGVyLlxuXG5TZWUgYWxzbyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlICJ0cnkiIHN0YXRlbWVudCBpbiBzZWN0aW9uICpUaGUgdHJ5XG5zdGF0ZW1lbnQqIGFuZCAicmFpc2UiIHN0YXRlbWVudCBpbiBzZWN0aW9uICpUaGUgcmFpc2Ugc3RhdGVtZW50Ki5cblxuLVsgRm9vdG5vdGVzIF0tXG5cblsxXSBUaGlzIGxpbWl0YXRpb24gb2NjdXJzIGJlY2F1c2UgdGhlIGNvZGUgdGhhdCBpcyBleGVjdXRlZCBieVxuICAgIHRoZXNlIG9wZXJhdGlvbnMgaXMgbm90IGF2YWlsYWJsZSBhdCB0aGUgdGltZSB0aGUgbW9kdWxlIGlzXG4gICAgY29tcGlsZWQuXG4nLAotICdleGVjbW9kZWwnOiAnXG5FeGVjdXRpb24gbW9kZWxcbioqKioqKioqKioqKioqKlxuXG5cbk5hbWluZyBhbmQgYmluZGluZ1xuPT09PT09PT09PT09PT09PT09XG5cbipOYW1lcyogcmVmZXIgdG8gb2JqZWN0cy4gIE5hbWVzIGFyZSBpbnRyb2R1Y2VkIGJ5IG5hbWUgYmluZGluZ1xub3BlcmF0aW9ucy4gRWFjaCBvY2N1cnJlbmNlIG9mIGEgbmFtZSBpbiB0aGUgcHJvZ3JhbSB0ZXh0IHJlZmVycyB0b1xudGhlICpiaW5kaW5nKiBvZiB0aGF0IG5hbWUgZXN0YWJsaXNoZWQgaW4gdGhlIGlubmVybW9zdCBmdW5jdGlvbiBibG9ja1xuY29udGFpbmluZyB0aGUgdXNlLlxuXG5BICpibG9jayogaXMgYSBwaWVjZSBvZiBQeXRob24gcHJvZ3JhbSB0ZXh0IHRoYXQgaXMgZXhlY3V0ZWQgYXMgYVxudW5pdC4gVGhlIGZvbGxvd2luZyBhcmUgYmxvY2tzOiBhIG1vZHVsZSwgYSBmdW5jdGlvbiBib2R5LCBhbmQgYSBjbGFzc1xuZGVmaW5pdGlvbi4gRWFjaCBjb21tYW5kIHR5cGVkIGludGVyYWN0aXZlbHkgaXMgYSBibG9jay4gIEEgc2NyaXB0XG5maWxlIChhIGZpbGUgZ2l2ZW4gYXMgc3RhbmRhcmQgaW5wdXQgdG8gdGhlIGludGVycHJldGVyIG9yIHNwZWNpZmllZFxub24gdGhlIGludGVycHJldGVyIGNvbW1hbmQgbGluZSB0aGUgZmlyc3QgYXJndW1lbnQpIGlzIGEgY29kZSBibG9jay5cbkEgc2NyaXB0IGNvbW1hbmQgKGEgY29tbWFuZCBzcGVjaWZpZWQgb24gdGhlIGludGVycHJldGVyIGNvbW1hbmQgbGluZVxud2l0aCB0aGUgXCcqKi1jKipcJyBvcHRpb24pIGlzIGEgY29kZSBibG9jay4gIFRoZSBzdHJpbmcgYXJndW1lbnQgcGFzc2VkXG50byB0aGUgYnVpbHQtaW4gZnVuY3Rpb25zICJldmFsKCkiIGFuZCAiZXhlYygpIiBpcyBhIGNvZGUgYmxvY2suXG5cbkEgY29kZSBibG9jayBpcyBleGVjdXRlZCBpbiBhbiAqZXhlY3V0aW9uIGZyYW1lKi4gIEEgZnJhbWUgY29udGFpbnNcbnNvbWUgYWRtaW5pc3RyYXRpdmUgaW5mb3JtYXRpb24gKHVzZWQgZm9yIGRlYnVnZ2luZykgYW5kIGRldGVybWluZXNcbndoZXJlIGFuZCBob3cgZXhlY3V0aW9uIGNvbnRpbnVlcyBhZnRlciB0aGUgY29kZSBibG9ja1wncyBleGVjdXRpb24gaGFzXG5jb21wbGV0ZWQuXG5cbkEgKnNjb3BlKiBkZWZpbmVzIHRoZSB2aXNpYmlsaXR5IG9mIGEgbmFtZSB3aXRoaW4gYSBibG9jay4gIElmIGEgbG9jYWxcbnZhcmlhYmxlIGlzIGRlZmluZWQgaW4gYSBibG9jaywgaXRzIHNjb3BlIGluY2x1ZGVzIHRoYXQgYmxvY2suICBJZiB0aGVcbmRlZmluaXRpb24gb2NjdXJzIGluIGEgZnVuY3Rpb24gYmxvY2ssIHRoZSBzY29wZSBleHRlbmRzIHRvIGFueSBibG9ja3NcbmNvbnRhaW5lZCB3aXRoaW4gdGhlIGRlZmluaW5nIG9uZSwgdW5sZXNzIGEgY29udGFpbmVkIGJsb2NrIGludHJvZHVjZXNcbmEgZGlmZmVyZW50IGJpbmRpbmcgZm9yIHRoZSBuYW1lLiAgVGhlIHNjb3BlIG9mIG5hbWVzIGRlZmluZWQgaW4gYVxuY2xhc3MgYmxvY2sgaXMgbGltaXRlZCB0byB0aGUgY2xhc3MgYmxvY2s7IGl0IGRvZXMgbm90IGV4dGVuZCB0byB0aGVcbmNvZGUgYmxvY2tzIG9mIG1ldGhvZHMgLS0gdGhpcyBpbmNsdWRlcyBjb21wcmVoZW5zaW9ucyBhbmQgZ2VuZXJhdG9yXG5leHByZXNzaW9ucyBzaW5jZSB0aGV5IGFyZSBpbXBsZW1lbnRlZCB1c2luZyBhIGZ1bmN0aW9uIHNjb3BlLiAgVGhpc1xubWVhbnMgdGhhdCB0aGUgZm9sbG93aW5nIHdpbGwgZmFpbDpcblxuICAgY2xhc3MgQTpcbiAgICAgICBhID0gNDJcbiAgICAgICBiID0gbGlzdChhICsgaSBmb3IgaSBpbiByYW5nZSgxMCkpXG5cbldoZW4gYSBuYW1lIGlzIHVzZWQgaW4gYSBjb2RlIGJsb2NrLCBpdCBpcyByZXNvbHZlZCB1c2luZyB0aGUgbmVhcmVzdFxuZW5jbG9zaW5nIHNjb3BlLiAgVGhlIHNldCBvZiBhbGwgc3VjaCBzY29wZXMgdmlzaWJsZSB0byBhIGNvZGUgYmxvY2tcbmlzIGNhbGxlZCB0aGUgYmxvY2tcJ3MgKmVudmlyb25tZW50Ki5cblxuSWYgYSBuYW1lIGlzIGJvdW5kIGluIGEgYmxvY2ssIGl0IGlzIGEgbG9jYWwgdmFyaWFibGUgb2YgdGhhdCBibG9jayxcbnVubGVzcyBkZWNsYXJlZCBhcyAibm9ubG9jYWwiLiAgSWYgYSBuYW1lIGlzIGJvdW5kIGF0IHRoZSBtb2R1bGVcbmxldmVsLCBpdCBpcyBhIGdsb2JhbCB2YXJpYWJsZS4gIChUaGUgdmFyaWFibGVzIG9mIHRoZSBtb2R1bGUgY29kZVxuYmxvY2sgYXJlIGxvY2FsIGFuZCBnbG9iYWwuKSAgSWYgYSB2YXJpYWJsZSBpcyB1c2VkIGluIGEgY29kZSBibG9ja1xuYnV0IG5vdCBkZWZpbmVkIHRoZXJlLCBpdCBpcyBhICpmcmVlIHZhcmlhYmxlKi5cblxuV2hlbiBhIG5hbWUgaXMgbm90IGZvdW5kIGF0IGFsbCwgYSAiTmFtZUVycm9yIiBleGNlcHRpb24gaXMgcmFpc2VkLlxuSWYgdGhlIG5hbWUgcmVmZXJzIHRvIGEgbG9jYWwgdmFyaWFibGUgdGhhdCBoYXMgbm90IGJlZW4gYm91bmQsIGFcbiJVbmJvdW5kTG9jYWxFcnJvciIgZXhjZXB0aW9uIGlzIHJhaXNlZC4gICJVbmJvdW5kTG9jYWxFcnJvciIgaXMgYVxuc3ViY2xhc3Mgb2YgIk5hbWVFcnJvciIuXG5cblRoZSBmb2xsb3dpbmcgY29uc3RydWN0cyBiaW5kIG5hbWVzOiBmb3JtYWwgcGFyYW1ldGVycyB0byBmdW5jdGlvbnMsXG4iaW1wb3J0IiBzdGF0ZW1lbnRzLCBjbGFzcyBhbmQgZnVuY3Rpb24gZGVmaW5pdGlvbnMgKHRoZXNlIGJpbmQgdGhlXG5jbGFzcyBvciBmdW5jdGlvbiBuYW1lIGluIHRoZSBkZWZpbmluZyBibG9jayksIGFuZCB0YXJnZXRzIHRoYXQgYXJlXG5pZGVudGlmaWVycyBpZiBvY2N1cnJpbmcgaW4gYW4gYXNzaWdubWVudCwgImZvciIgbG9vcCBoZWFkZXIsIG9yIGFmdGVyXG4iYXMiIGluIGEgIndpdGgiIHN0YXRlbWVudCBvciAiZXhjZXB0IiBjbGF1c2UuIFRoZSAiaW1wb3J0IiBzdGF0ZW1lbnRcbm9mIHRoZSBmb3JtICJmcm9tIC4uLiBpbXBvcnQgKiIgYmluZHMgYWxsIG5hbWVzIGRlZmluZWQgaW4gdGhlXG5pbXBvcnRlZCBtb2R1bGUsIGV4Y2VwdCB0aG9zZSBiZWdpbm5pbmcgd2l0aCBhbiB1bmRlcnNjb3JlLiAgVGhpcyBmb3JtXG5tYXkgb25seSBiZSB1c2VkIGF0IHRoZSBtb2R1bGUgbGV2ZWwuXG5cbkEgdGFyZ2V0IG9jY3VycmluZyBpbiBhICJkZWwiIHN0YXRlbWVudCBpcyBhbHNvIGNvbnNpZGVyZWQgYm91bmQgZm9yXG50aGlzIHB1cnBvc2UgKHRob3VnaCB0aGUgYWN0dWFsIHNlbWFudGljcyBhcmUgdG8gdW5iaW5kIHRoZSBuYW1lKS5cblxuRWFjaCBhc3NpZ25tZW50IG9yIGltcG9ydCBzdGF0ZW1lbnQgb2NjdXJzIHdpdGhpbiBhIGJsb2NrIGRlZmluZWQgYnkgYVxuY2xhc3Mgb3IgZnVuY3Rpb24gZGVmaW5pdGlvbiBvciBhdCB0aGUgbW9kdWxlIGxldmVsICh0aGUgdG9wLWxldmVsXG5jb2RlIGJsb2NrKS5cblxuSWYgYSBuYW1lIGJpbmRpbmcgb3BlcmF0aW9uIG9jY3VycyBhbnl3aGVyZSB3aXRoaW4gYSBjb2RlIGJsb2NrLCBhbGxcbnVzZXMgb2YgdGhlIG5hbWUgd2l0aGluIHRoZSBibG9jayBhcmUgdHJlYXRlZCBhcyByZWZlcmVuY2VzIHRvIHRoZVxuY3VycmVudCBibG9jay4gIFRoaXMgY2FuIGxlYWQgdG8gZXJyb3JzIHdoZW4gYSBuYW1lIGlzIHVzZWQgd2l0aGluIGFcbmJsb2NrIGJlZm9yZSBpdCBpcyBib3VuZC4gIFRoaXMgcnVsZSBpcyBzdWJ0bGUuICBQeXRob24gbGFja3NcbmRlY2xhcmF0aW9ucyBhbmQgYWxsb3dzIG5hbWUgYmluZGluZyBvcGVyYXRpb25zIHRvIG9jY3VyIGFueXdoZXJlXG53aXRoaW4gYSBjb2RlIGJsb2NrLiAgVGhlIGxvY2FsIHZhcmlhYmxlcyBvZiBhIGNvZGUgYmxvY2sgY2FuIGJlXG5kZXRlcm1pbmVkIGJ5IHNjYW5uaW5nIHRoZSBlbnRpcmUgdGV4dCBvZiB0aGUgYmxvY2sgZm9yIG5hbWUgYmluZGluZ1xub3BlcmF0aW9ucy5cblxuSWYgdGhlICJnbG9iYWwiIHN0YXRlbWVudCBvY2N1cnMgd2l0aGluIGEgYmxvY2ssIGFsbCB1c2VzIG9mIHRoZSBuYW1lXG5zcGVjaWZpZWQgaW4gdGhlIHN0YXRlbWVudCByZWZlciB0byB0aGUgYmluZGluZyBvZiB0aGF0IG5hbWUgaW4gdGhlXG50b3AtbGV2ZWwgbmFtZXNwYWNlLiAgTmFtZXMgYXJlIHJlc29sdmVkIGluIHRoZSB0b3AtbGV2ZWwgbmFtZXNwYWNlIGJ5XG5zZWFyY2hpbmcgdGhlIGdsb2JhbCBuYW1lc3BhY2UsIGkuZS4gdGhlIG5hbWVzcGFjZSBvZiB0aGUgbW9kdWxlXG5jb250YWluaW5nIHRoZSBjb2RlIGJsb2NrLCBhbmQgdGhlIGJ1aWx0aW5zIG5hbWVzcGFjZSwgdGhlIG5hbWVzcGFjZVxub2YgdGhlIG1vZHVsZSAiYnVpbHRpbnMiLiAgVGhlIGdsb2JhbCBuYW1lc3BhY2UgaXMgc2VhcmNoZWQgZmlyc3QuICBJZlxudGhlIG5hbWUgaXMgbm90IGZvdW5kIHRoZXJlLCB0aGUgYnVpbHRpbnMgbmFtZXNwYWNlIGlzIHNlYXJjaGVkLiAgVGhlXG5nbG9iYWwgc3RhdGVtZW50IG11c3QgcHJlY2VkZSBhbGwgdXNlcyBvZiB0aGUgbmFtZS5cblxuVGhlIGJ1aWx0aW5zIG5hbWVzcGFjZSBhc3NvY2lhdGVkIHdpdGggdGhlIGV4ZWN1dGlvbiBvZiBhIGNvZGUgYmxvY2tcbmlzIGFjdHVhbGx5IGZvdW5kIGJ5IGxvb2tpbmcgdXAgdGhlIG5hbWUgIl9fYnVpbHRpbnNfXyIgaW4gaXRzIGdsb2JhbFxubmFtZXNwYWNlOyB0aGlzIHNob3VsZCBiZSBhIGRpY3Rpb25hcnkgb3IgYSBtb2R1bGUgKGluIHRoZSBsYXR0ZXIgY2FzZVxudGhlIG1vZHVsZVwncyBkaWN0aW9uYXJ5IGlzIHVzZWQpLiAgQnkgZGVmYXVsdCwgd2hlbiBpbiB0aGUgIl9fbWFpbl9fIlxubW9kdWxlLCAiX19idWlsdGluc19fIiBpcyB0aGUgYnVpbHQtaW4gbW9kdWxlICJidWlsdGlucyI7IHdoZW4gaW4gYW55XG5vdGhlciBtb2R1bGUsICJfX2J1aWx0aW5zX18iIGlzIGFuIGFsaWFzIGZvciB0aGUgZGljdGlvbmFyeSBvZiB0aGVcbiJidWlsdGlucyIgbW9kdWxlIGl0c2VsZi4gICJfX2J1aWx0aW5zX18iIGNhbiBiZSBzZXQgdG8gYSB1c2VyLWNyZWF0ZWRcbmRpY3Rpb25hcnkgdG8gY3JlYXRlIGEgd2VhayBmb3JtIG9mIHJlc3RyaWN0ZWQgZXhlY3V0aW9uLlxuXG4qKkNQeXRob24gaW1wbGVtZW50YXRpb24gZGV0YWlsOioqIFVzZXJzIHNob3VsZCBub3QgdG91Y2hcbiJfX2J1aWx0aW5zX18iOyBpdCBpcyBzdHJpY3RseSBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwuICBVc2Vyc1xud2FudGluZyB0byBvdmVycmlkZSB2YWx1ZXMgaW4gdGhlIGJ1aWx0aW5zIG5hbWVzcGFjZSBzaG91bGQgImltcG9ydCJcbnRoZSAiYnVpbHRpbnMiIG1vZHVsZSBhbmQgbW9kaWZ5IGl0cyBhdHRyaWJ1dGVzIGFwcHJvcHJpYXRlbHkuXG5cblRoZSBuYW1lc3BhY2UgZm9yIGEgbW9kdWxlIGlzIGF1dG9tYXRpY2FsbHkgY3JlYXRlZCB0aGUgZmlyc3QgdGltZSBhXG5tb2R1bGUgaXMgaW1wb3J0ZWQuICBUaGUgbWFpbiBtb2R1bGUgZm9yIGEgc2NyaXB0IGlzIGFsd2F5cyBjYWxsZWRcbiJfX21haW5fXyIuXG5cblRoZSAiZ2xvYmFsIiBzdGF0ZW1lbnQgaGFzIHRoZSBzYW1lIHNjb3BlIGFzIGEgbmFtZSBiaW5kaW5nIG9wZXJhdGlvblxuaW4gdGhlIHNhbWUgYmxvY2suICBJZiB0aGUgbmVhcmVzdCBlbmNsb3Npbmcgc2NvcGUgZm9yIGEgZnJlZSB2YXJpYWJsZVxuY29udGFpbnMgYSBnbG9iYWwgc3RhdGVtZW50LCB0aGUgZnJlZSB2YXJpYWJsZSBpcyB0cmVhdGVkIGFzIGEgZ2xvYmFsLlxuXG5BIGNsYXNzIGRlZmluaXRpb24gaXMgYW4gZXhlY3V0YWJsZSBzdGF0ZW1lbnQgdGhhdCBtYXkgdXNlIGFuZCBkZWZpbmVcbm5hbWVzLiBUaGVzZSByZWZlcmVuY2VzIGZvbGxvdyB0aGUgbm9ybWFsIHJ1bGVzIGZvciBuYW1lIHJlc29sdXRpb24uXG5UaGUgbmFtZXNwYWNlIG9mIHRoZSBjbGFzcyBkZWZpbml0aW9uIGJlY29tZXMgdGhlIGF0dHJpYnV0ZSBkaWN0aW9uYXJ5XG5vZiB0aGUgY2xhc3MuICBOYW1lcyBkZWZpbmVkIGF0IHRoZSBjbGFzcyBzY29wZSBhcmUgbm90IHZpc2libGUgaW5cbm1ldGhvZHMuXG5cblxuSW50ZXJhY3Rpb24gd2l0aCBkeW5hbWljIGZlYXR1cmVzXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuVGhlcmUgYXJlIHNldmVyYWwgY2FzZXMgd2hlcmUgUHl0aG9uIHN0YXRlbWVudHMgYXJlIGlsbGVnYWwgd2hlbiB1c2VkXG5pbiBjb25qdW5jdGlvbiB3aXRoIG5lc3RlZCBzY29wZXMgdGhhdCBjb250YWluIGZyZWUgdmFyaWFibGVzLlxuXG5JZiBhIHZhcmlhYmxlIGlzIHJlZmVyZW5jZWQgaW4gYW4gZW5jbG9zaW5nIHNjb3BlLCBpdCBpcyBpbGxlZ2FsIHRvXG5kZWxldGUgdGhlIG5hbWUuICBBbiBlcnJvciB3aWxsIGJlIHJlcG9ydGVkIGF0IGNvbXBpbGUgdGltZS5cblxuSWYgdGhlIHdpbGQgY2FyZCBmb3JtIG9mIGltcG9ydCAtLS0gImltcG9ydCAqIiAtLS0gaXMgdXNlZCBpbiBhXG5mdW5jdGlvbiBhbmQgdGhlIGZ1bmN0aW9uIGNvbnRhaW5zIG9yIGlzIGEgbmVzdGVkIGJsb2NrIHdpdGggZnJlZVxudmFyaWFibGVzLCB0aGUgY29tcGlsZXIgd2lsbCByYWlzZSBhICJTeW50YXhFcnJvciIuXG5cblRoZSAiZXZhbCgpIiBhbmQgImV4ZWMoKSIgZnVuY3Rpb25zIGRvIG5vdCBoYXZlIGFjY2VzcyB0byB0aGUgZnVsbFxuZW52aXJvbm1lbnQgZm9yIHJlc29sdmluZyBuYW1lcy4gIE5hbWVzIG1heSBiZSByZXNvbHZlZCBpbiB0aGUgbG9jYWxcbmFuZCBnbG9iYWwgbmFtZXNwYWNlcyBvZiB0aGUgY2FsbGVyLiAgRnJlZSB2YXJpYWJsZXMgYXJlIG5vdCByZXNvbHZlZFxuaW4gdGhlIG5lYXJlc3QgZW5jbG9zaW5nIG5hbWVzcGFjZSwgYnV0IGluIHRoZSBnbG9iYWwgbmFtZXNwYWNlLiAgWzFdXG5UaGUgImV4ZWMoKSIgYW5kICJldmFsKCkiIGZ1bmN0aW9ucyBoYXZlIG9wdGlvbmFsIGFyZ3VtZW50cyB0b1xub3ZlcnJpZGUgdGhlIGdsb2JhbCBhbmQgbG9jYWwgbmFtZXNwYWNlLiAgSWYgb25seSBvbmUgbmFtZXNwYWNlIGlzXG5zcGVjaWZpZWQsIGl0IGlzIHVzZWQgZm9yIGJvdGguXG5cblxuRXhjZXB0aW9uc1xuPT09PT09PT09PVxuXG5FeGNlcHRpb25zIGFyZSBhIG1lYW5zIG9mIGJyZWFraW5nIG91dCBvZiB0aGUgbm9ybWFsIGZsb3cgb2YgY29udHJvbFxub2YgYSBjb2RlIGJsb2NrIGluIG9yZGVyIHRvIGhhbmRsZSBlcnJvcnMgb3Igb3RoZXIgZXhjZXB0aW9uYWxcbmNvbmRpdGlvbnMuICBBbiBleGNlcHRpb24gaXMgKnJhaXNlZCogYXQgdGhlIHBvaW50IHdoZXJlIHRoZSBlcnJvciBpc1xuZGV0ZWN0ZWQ7IGl0IG1heSBiZSAqaGFuZGxlZCogYnkgdGhlIHN1cnJvdW5kaW5nIGNvZGUgYmxvY2sgb3IgYnkgYW55XG5jb2RlIGJsb2NrIHRoYXQgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbnZva2VkIHRoZSBjb2RlIGJsb2NrIHdoZXJlXG50aGUgZXJyb3Igb2NjdXJyZWQuXG5cblRoZSBQeXRob24gaW50ZXJwcmV0ZXIgcmFpc2VzIGFuIGV4Y2VwdGlvbiB3aGVuIGl0IGRldGVjdHMgYSBydW4tdGltZVxuZXJyb3IgKHN1Y2ggYXMgZGl2aXNpb24gYnkgemVybykuICBBIFB5dGhvbiBwcm9ncmFtIGNhbiBhbHNvXG5leHBsaWNpdGx5IHJhaXNlIGFuIGV4Y2VwdGlvbiB3aXRoIHRoZSAicmFpc2UiIHN0YXRlbWVudC4gRXhjZXB0aW9uXG5oYW5kbGVycyBhcmUgc3BlY2lmaWVkIHdpdGggdGhlICJ0cnkiIC4uLiAiZXhjZXB0IiBzdGF0ZW1lbnQuICBUaGVcbiJmaW5hbGx5IiBjbGF1c2Ugb2Ygc3VjaCBhIHN0YXRlbWVudCBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGNsZWFudXBcbmNvZGUgd2hpY2ggZG9lcyBub3QgaGFuZGxlIHRoZSBleGNlcHRpb24sIGJ1dCBpcyBleGVjdXRlZCB3aGV0aGVyIGFuXG5leGNlcHRpb24gb2NjdXJyZWQgb3Igbm90IGluIHRoZSBwcmVjZWRpbmcgY29kZS5cblxuUHl0aG9uIHVzZXMgdGhlICJ0ZXJtaW5hdGlvbiIgbW9kZWwgb2YgZXJyb3IgaGFuZGxpbmc6IGFuIGV4Y2VwdGlvblxuaGFuZGxlciBjYW4gZmluZCBvdXQgd2hhdCBoYXBwZW5lZCBhbmQgY29udGludWUgZXhlY3V0aW9uIGF0IGFuIG91dGVyXG5sZXZlbCwgYnV0IGl0IGNhbm5vdCByZXBhaXIgdGhlIGNhdXNlIG9mIHRoZSBlcnJvciBhbmQgcmV0cnkgdGhlXG5mYWlsaW5nIG9wZXJhdGlvbiAoZXhjZXB0IGJ5IHJlLWVudGVyaW5nIHRoZSBvZmZlbmRpbmcgcGllY2Ugb2YgY29kZVxuZnJvbSB0aGUgdG9wKS5cblxuV2hlbiBhbiBleGNlcHRpb24gaXMgbm90IGhhbmRsZWQgYXQgYWxsLCB0aGUgaW50ZXJwcmV0ZXIgdGVybWluYXRlc1xuZXhlY3V0aW9uIG9mIHRoZSBwcm9ncmFtLCBvciByZXR1cm5zIHRvIGl0cyBpbnRlcmFjdGl2ZSBtYWluIGxvb3AuICBJblxuZWl0aGVyIGNhc2UsIGl0IHByaW50cyBhIHN0YWNrIGJhY2t0cmFjZSwgZXhjZXB0IHdoZW4gdGhlIGV4Y2VwdGlvbiBpc1xuIlN5c3RlbUV4aXQiLlxuXG5FeGNlcHRpb25zIGFyZSBpZGVudGlmaWVkIGJ5IGNsYXNzIGluc3RhbmNlcy4gIFRoZSAiZXhjZXB0IiBjbGF1c2UgaXNcbnNlbGVjdGVkIGRlcGVuZGluZyBvbiB0aGUgY2xhc3Mgb2YgdGhlIGluc3RhbmNlOiBpdCBtdXN0IHJlZmVyZW5jZSB0aGVcbmNsYXNzIG9mIHRoZSBpbnN0YW5jZSBvciBhIGJhc2UgY2xhc3MgdGhlcmVvZi4gIFRoZSBpbnN0YW5jZSBjYW4gYmVcbnJlY2VpdmVkIGJ5IHRoZSBoYW5kbGVyIGFuZCBjYW4gY2FycnkgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCB0aGVcbmV4Y2VwdGlvbmFsIGNvbmRpdGlvbi5cblxuTm90ZTogRXhjZXB0aW9uIG1lc3NhZ2VzIGFyZSBub3QgcGFydCBvZiB0aGUgUHl0aG9uIEFQSS4gIFRoZWlyXG4gIGNvbnRlbnRzIG1heSBjaGFuZ2UgZnJvbSBvbmUgdmVyc2lvbiBvZiBQeXRob24gdG8gdGhlIG5leHQgd2l0aG91dFxuICB3YXJuaW5nIGFuZCBzaG91bGQgbm90IGJlIHJlbGllZCBvbiBieSBjb2RlIHdoaWNoIHdpbGwgcnVuIHVuZGVyXG4gIG11bHRpcGxlIHZlcnNpb25zIG9mIHRoZSBpbnRlcnByZXRlci5cblxuU2VlIGFsc28gdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSAidHJ5IiBzdGF0ZW1lbnQgaW4gc2VjdGlvbiAqVGhlIHRyeVxuc3RhdGVtZW50KiBhbmQgInJhaXNlIiBzdGF0ZW1lbnQgaW4gc2VjdGlvbiAqVGhlIHJhaXNlIHN0YXRlbWVudCouXG5cbi1bIEZvb3Rub3RlcyBdLVxuXG5bMV0gVGhpcyBsaW1pdGF0aW9uIG9jY3VycyBiZWNhdXNlIHRoZSBjb2RlIHRoYXQgaXMgZXhlY3V0ZWQgYnlcbiAgICB0aGVzZSBvcGVyYXRpb25zIGlzIG5vdCBhdmFpbGFibGUgYXQgdGhlIHRpbWUgdGhlIG1vZHVsZSBpc1xuICAgIGNvbXBpbGVkLlxuJywKLSAnZXhwcmxpc3RzJzogJ1xuRXhwcmVzc2lvbiBsaXN0c1xuKioqKioqKioqKioqKioqKlxuXG4gICBleHByZXNzaW9uX2xpc3QgOjo9IGV4cHJlc3Npb24gKCAiLCIgZXhwcmVzc2lvbiApKiBbIiwiXVxuXG5BbiBleHByZXNzaW9uIGxpc3QgY29udGFpbmluZyBhdCBsZWFzdCBvbmUgY29tbWEgeWllbGRzIGEgdHVwbGUuICBUaGVcbmxlbmd0aCBvZiB0aGUgdHVwbGUgaXMgdGhlIG51bWJlciBvZiBleHByZXNzaW9ucyBpbiB0aGUgbGlzdC4gIFRoZVxuZXhwcmVzc2lvbnMgYXJlIGV2YWx1YXRlZCBmcm9tIGxlZnQgdG8gcmlnaHQuXG5cblRoZSB0cmFpbGluZyBjb21tYSBpcyByZXF1aXJlZCBvbmx5IHRvIGNyZWF0ZSBhIHNpbmdsZSB0dXBsZSAoYS5rLmEuIGFcbipzaW5nbGV0b24qKTsgaXQgaXMgb3B0aW9uYWwgaW4gYWxsIG90aGVyIGNhc2VzLiAgQSBzaW5nbGUgZXhwcmVzc2lvblxud2l0aG91dCBhIHRyYWlsaW5nIGNvbW1hIGRvZXNuXCd0IGNyZWF0ZSBhIHR1cGxlLCBidXQgcmF0aGVyIHlpZWxkcyB0aGVcbnZhbHVlIG9mIHRoYXQgZXhwcmVzc2lvbi4gKFRvIGNyZWF0ZSBhbiBlbXB0eSB0dXBsZSwgdXNlIGFuIGVtcHR5IHBhaXJcbm9mIHBhcmVudGhlc2VzOiAiKCkiLilcbicsCi0gJ2Zsb2F0aW5nJzogJ1xuRmxvYXRpbmcgcG9pbnQgbGl0ZXJhbHNcbioqKioqKioqKioqKioqKioqKioqKioqXG5cbkZsb2F0aW5nIHBvaW50IGxpdGVyYWxzIGFyZSBkZXNjcmliZWQgYnkgdGhlIGZvbGxvd2luZyBsZXhpY2FsXG5kZWZpbml0aW9uczpcblxuICAgZmxvYXRudW1iZXIgICA6Oj0gcG9pbnRmbG9hdCB8IGV4cG9uZW50ZmxvYXRcbiAgIHBvaW50ZmxvYXQgICAgOjo9IFtpbnRwYXJ0XSBmcmFjdGlvbiB8IGludHBhcnQgIi4iXG4gICBleHBvbmVudGZsb2F0IDo6PSAoaW50cGFydCB8IHBvaW50ZmxvYXQpIGV4cG9uZW50XG4gICBpbnRwYXJ0ICAgICAgIDo6PSBkaWdpdCtcbiAgIGZyYWN0aW9uICAgICAgOjo9ICIuIiBkaWdpdCtcbiAgIGV4cG9uZW50ICAgICAgOjo9ICgiZSIgfCAiRSIpIFsiKyIgfCAiLSJdIGRpZ2l0K1xuXG5Ob3RlIHRoYXQgdGhlIGludGVnZXIgYW5kIGV4cG9uZW50IHBhcnRzIGFyZSBhbHdheXMgaW50ZXJwcmV0ZWQgdXNpbmdcbnJhZGl4IDEwLiBGb3IgZXhhbXBsZSwgIjA3N2UwMTAiIGlzIGxlZ2FsLCBhbmQgZGVub3RlcyB0aGUgc2FtZSBudW1iZXJcbmFzICI3N2UxMCIuIFRoZSBhbGxvd2VkIHJhbmdlIG9mIGZsb2F0aW5nIHBvaW50IGxpdGVyYWxzIGlzXG5pbXBsZW1lbnRhdGlvbi1kZXBlbmRlbnQuIFNvbWUgZXhhbXBsZXMgb2YgZmxvYXRpbmcgcG9pbnQgbGl0ZXJhbHM6XG5cbiAgIDMuMTQgICAgMTAuICAgIC4wMDEgICAgMWUxMDAgICAgMy4xNGUtMTAgICAgMGUwXG5cbk5vdGUgdGhhdCBudW1lcmljIGxpdGVyYWxzIGRvIG5vdCBpbmNsdWRlIGEgc2lnbjsgYSBwaHJhc2UgbGlrZSAiLTEiXG5pcyBhY3R1YWxseSBhbiBleHByZXNzaW9uIGNvbXBvc2VkIG9mIHRoZSB1bmFyeSBvcGVyYXRvciAiLSIgYW5kIHRoZVxubGl0ZXJhbCAiMSIuXG4nLAotICdmb3InOiAnXG5UaGUgImZvciIgc3RhdGVtZW50XG4qKioqKioqKioqKioqKioqKioqXG5cblRoZSAiZm9yIiBzdGF0ZW1lbnQgaXMgdXNlZCB0byBpdGVyYXRlIG92ZXIgdGhlIGVsZW1lbnRzIG9mIGEgc2VxdWVuY2VcbihzdWNoIGFzIGEgc3RyaW5nLCB0dXBsZSBvciBsaXN0KSBvciBvdGhlciBpdGVyYWJsZSBvYmplY3Q6XG5cbiAgIGZvcl9zdG10IDo6PSAiZm9yIiB0YXJnZXRfbGlzdCAiaW4iIGV4cHJlc3Npb25fbGlzdCAiOiIgc3VpdGVcbiAgICAgICAgICAgICAgICBbImVsc2UiICI6IiBzdWl0ZV1cblxuVGhlIGV4cHJlc3Npb24gbGlzdCBpcyBldmFsdWF0ZWQgb25jZTsgaXQgc2hvdWxkIHlpZWxkIGFuIGl0ZXJhYmxlXG5vYmplY3QuICBBbiBpdGVyYXRvciBpcyBjcmVhdGVkIGZvciB0aGUgcmVzdWx0IG9mIHRoZVxuImV4cHJlc3Npb25fbGlzdCIuICBUaGUgc3VpdGUgaXMgdGhlbiBleGVjdXRlZCBvbmNlIGZvciBlYWNoIGl0ZW1cbnByb3ZpZGVkIGJ5IHRoZSBpdGVyYXRvciwgaW4gdGhlIG9yZGVyIG9mIGFzY2VuZGluZyBpbmRpY2VzLiAgRWFjaFxuaXRlbSBpbiB0dXJuIGlzIGFzc2lnbmVkIHRvIHRoZSB0YXJnZXQgbGlzdCB1c2luZyB0aGUgc3RhbmRhcmQgcnVsZXNcbmZvciBhc3NpZ25tZW50cyAoc2VlICpBc3NpZ25tZW50IHN0YXRlbWVudHMqKSwgYW5kIHRoZW4gdGhlIHN1aXRlIGlzXG5leGVjdXRlZC4gIFdoZW4gdGhlIGl0ZW1zIGFyZSBleGhhdXN0ZWQgKHdoaWNoIGlzIGltbWVkaWF0ZWx5IHdoZW4gdGhlXG5zZXF1ZW5jZSBpcyBlbXB0eSBvciBhbiBpdGVyYXRvciByYWlzZXMgYSAiU3RvcEl0ZXJhdGlvbiIgZXhjZXB0aW9uKSxcbnRoZSBzdWl0ZSBpbiB0aGUgImVsc2UiIGNsYXVzZSwgaWYgcHJlc2VudCwgaXMgZXhlY3V0ZWQsIGFuZCB0aGUgbG9vcFxudGVybWluYXRlcy5cblxuQSAiYnJlYWsiIHN0YXRlbWVudCBleGVjdXRlZCBpbiB0aGUgZmlyc3Qgc3VpdGUgdGVybWluYXRlcyB0aGUgbG9vcFxud2l0aG91dCBleGVjdXRpbmcgdGhlICJlbHNlIiBjbGF1c2VcJ3Mgc3VpdGUuICBBICJjb250aW51ZSIgc3RhdGVtZW50XG5leGVjdXRlZCBpbiB0aGUgZmlyc3Qgc3VpdGUgc2tpcHMgdGhlIHJlc3Qgb2YgdGhlIHN1aXRlIGFuZCBjb250aW51ZXNcbndpdGggdGhlIG5leHQgaXRlbSwgb3Igd2l0aCB0aGUgImVsc2UiIGNsYXVzZSBpZiB0aGVyZSB3YXMgbm8gbmV4dFxuaXRlbS5cblxuVGhlIHN1aXRlIG1heSBhc3NpZ24gdG8gdGhlIHZhcmlhYmxlKHMpIGluIHRoZSB0YXJnZXQgbGlzdDsgdGhpcyBkb2VzXG5ub3QgYWZmZWN0IHRoZSBuZXh0IGl0ZW0gYXNzaWduZWQgdG8gaXQuXG5cbk5hbWVzIGluIHRoZSB0YXJnZXQgbGlzdCBhcmUgbm90IGRlbGV0ZWQgd2hlbiB0aGUgbG9vcCBpcyBmaW5pc2hlZCxcbmJ1dCBpZiB0aGUgc2VxdWVuY2UgaXMgZW1wdHksIGl0IHdpbGwgbm90IGhhdmUgYmVlbiBhc3NpZ25lZCB0byBhdCBhbGxcbmJ5IHRoZSBsb29wLiAgSGludDogdGhlIGJ1aWx0LWluIGZ1bmN0aW9uICJyYW5nZSgpIiByZXR1cm5zIGFuXG5pdGVyYXRvciBvZiBpbnRlZ2VycyBzdWl0YWJsZSB0byBlbXVsYXRlIHRoZSBlZmZlY3Qgb2YgUGFzY2FsXCdzICJmb3IgaVxuOj0gYSB0byBiIGRvIjsgZS5nLiwgImxpc3QocmFuZ2UoMykpIiByZXR1cm5zIHRoZSBsaXN0ICJbMCwgMSwgMl0iLlxuXG5Ob3RlOiBUaGVyZSBpcyBhIHN1YnRsZXR5IHdoZW4gdGhlIHNlcXVlbmNlIGlzIGJlaW5nIG1vZGlmaWVkIGJ5IHRoZVxuICBsb29wICh0aGlzIGNhbiBvbmx5IG9jY3VyIGZvciBtdXRhYmxlIHNlcXVlbmNlcywgaS5lLiBsaXN0cykuICBBblxuICBpbnRlcm5hbCBjb3VudGVyIGlzIHVzZWQgdG8ga2VlcCB0cmFjayBvZiB3aGljaCBpdGVtIGlzIHVzZWQgbmV4dCxcbiAgYW5kIHRoaXMgaXMgaW5jcmVtZW50ZWQgb24gZWFjaCBpdGVyYXRpb24uICBXaGVuIHRoaXMgY291bnRlciBoYXNcbiAgcmVhY2hlZCB0aGUgbGVuZ3RoIG9mIHRoZSBzZXF1ZW5jZSB0aGUgbG9vcCB0ZXJtaW5hdGVzLiAgVGhpcyBtZWFuc1xuICB0aGF0IGlmIHRoZSBzdWl0ZSBkZWxldGVzIHRoZSBjdXJyZW50IChvciBhIHByZXZpb3VzKSBpdGVtIGZyb20gdGhlXG4gIHNlcXVlbmNlLCB0aGUgbmV4dCBpdGVtIHdpbGwgYmUgc2tpcHBlZCAoc2luY2UgaXQgZ2V0cyB0aGUgaW5kZXggb2ZcbiAgdGhlIGN1cnJlbnQgaXRlbSB3aGljaCBoYXMgYWxyZWFkeSBiZWVuIHRyZWF0ZWQpLiAgTGlrZXdpc2UsIGlmIHRoZVxuICBzdWl0ZSBpbnNlcnRzIGFuIGl0ZW0gaW4gdGhlIHNlcXVlbmNlIGJlZm9yZSB0aGUgY3VycmVudCBpdGVtLCB0aGVcbiAgY3VycmVudCBpdGVtIHdpbGwgYmUgdHJlYXRlZCBhZ2FpbiB0aGUgbmV4dCB0aW1lIHRocm91Z2ggdGhlIGxvb3AuXG4gIFRoaXMgY2FuIGxlYWQgdG8gbmFzdHkgYnVncyB0aGF0IGNhbiBiZSBhdm9pZGVkIGJ5IG1ha2luZyBhXG4gIHRlbXBvcmFyeSBjb3B5IHVzaW5nIGEgc2xpY2Ugb2YgdGhlIHdob2xlIHNlcXVlbmNlLCBlLmcuLFxuXG4gICAgIGZvciB4IGluIGFbOl06XG4gICAgICAgICBpZiB4IDwgMDogYS5yZW1vdmUoeClcbicsCi0gJ2Zvcm1hdHN0cmluZ3MnOiAnXG5Gb3JtYXQgU3RyaW5nIFN5bnRheFxuKioqKioqKioqKioqKioqKioqKipcblxuVGhlICJzdHIuZm9ybWF0KCkiIG1ldGhvZCBhbmQgdGhlICJGb3JtYXR0ZXIiIGNsYXNzIHNoYXJlIHRoZSBzYW1lXG5zeW50YXggZm9yIGZvcm1hdCBzdHJpbmdzIChhbHRob3VnaCBpbiB0aGUgY2FzZSBvZiAiRm9ybWF0dGVyIixcbnN1YmNsYXNzZXMgY2FuIGRlZmluZSB0aGVpciBvd24gZm9ybWF0IHN0cmluZyBzeW50YXgpLlxuXG5Gb3JtYXQgc3RyaW5ncyBjb250YWluICJyZXBsYWNlbWVudCBmaWVsZHMiIHN1cnJvdW5kZWQgYnkgY3VybHkgYnJhY2VzXG4ie30iLiBBbnl0aGluZyB0aGF0IGlzIG5vdCBjb250YWluZWQgaW4gYnJhY2VzIGlzIGNvbnNpZGVyZWQgbGl0ZXJhbFxudGV4dCwgd2hpY2ggaXMgY29waWVkIHVuY2hhbmdlZCB0byB0aGUgb3V0cHV0LiAgSWYgeW91IG5lZWQgdG8gaW5jbHVkZVxuYSBicmFjZSBjaGFyYWN0ZXIgaW4gdGhlIGxpdGVyYWwgdGV4dCwgaXQgY2FuIGJlIGVzY2FwZWQgYnkgZG91Ymxpbmc6XG4ie3siIGFuZCAifX0iLlxuXG5UaGUgZ3JhbW1hciBmb3IgYSByZXBsYWNlbWVudCBmaWVsZCBpcyBhcyBmb2xsb3dzOlxuXG4gICAgICByZXBsYWNlbWVudF9maWVsZCA6Oj0gInsiIFtmaWVsZF9uYW1lXSBbIiEiIGNvbnZlcnNpb25dIFsiOiIgZm9ybWF0X3NwZWNdICJ9IlxuICAgICAgZmllbGRfbmFtZSAgICAgICAgOjo9IGFyZ19uYW1lICgiLiIgYXR0cmlidXRlX25hbWUgfCAiWyIgZWxlbWVudF9pbmRleCAiXSIpKlxuICAgICAgYXJnX25hbWUgICAgICAgICAgOjo9IFtpZGVudGlmaWVyIHwgaW50ZWdlcl1cbiAgICAgIGF0dHJpYnV0ZV9uYW1lICAgIDo6PSBpZGVudGlmaWVyXG4gICAgICBlbGVtZW50X2luZGV4ICAgICA6Oj0gaW50ZWdlciB8IGluZGV4X3N0cmluZ1xuICAgICAgaW5kZXhfc3RyaW5nICAgICAgOjo9IDxhbnkgc291cmNlIGNoYXJhY3RlciBleGNlcHQgIl0iPiArXG4gICAgICBjb252ZXJzaW9uICAgICAgICA6Oj0gInIiIHwgInMiIHwgImEiXG4gICAgICBmb3JtYXRfc3BlYyAgICAgICA6Oj0gPGRlc2NyaWJlZCBpbiB0aGUgbmV4dCBzZWN0aW9uPlxuXG5JbiBsZXNzIGZvcm1hbCB0ZXJtcywgdGhlIHJlcGxhY2VtZW50IGZpZWxkIGNhbiBzdGFydCB3aXRoIGFcbipmaWVsZF9uYW1lKiB0aGF0IHNwZWNpZmllcyB0aGUgb2JqZWN0IHdob3NlIHZhbHVlIGlzIHRvIGJlIGZvcm1hdHRlZFxuYW5kIGluc2VydGVkIGludG8gdGhlIG91dHB1dCBpbnN0ZWFkIG9mIHRoZSByZXBsYWNlbWVudCBmaWVsZC4gVGhlXG4qZmllbGRfbmFtZSogaXMgb3B0aW9uYWxseSBmb2xsb3dlZCBieSBhICAqY29udmVyc2lvbiogZmllbGQsIHdoaWNoIGlzXG5wcmVjZWRlZCBieSBhbiBleGNsYW1hdGlvbiBwb2ludCAiXCchXCciLCBhbmQgYSAqZm9ybWF0X3NwZWMqLCB3aGljaCBpc1xucHJlY2VkZWQgYnkgYSBjb2xvbiAiXCc6XCciLiAgVGhlc2Ugc3BlY2lmeSBhIG5vbi1kZWZhdWx0IGZvcm1hdCBmb3IgdGhlXG5yZXBsYWNlbWVudCB2YWx1ZS5cblxuU2VlIGFsc28gdGhlICpGb3JtYXQgU3BlY2lmaWNhdGlvbiBNaW5pLUxhbmd1YWdlKiBzZWN0aW9uLlxuXG5UaGUgKmZpZWxkX25hbWUqIGl0c2VsZiBiZWdpbnMgd2l0aCBhbiAqYXJnX25hbWUqIHRoYXQgaXMgZWl0aGVyIGFcbm51bWJlciBvciBhIGtleXdvcmQuICBJZiBpdFwncyBhIG51bWJlciwgaXQgcmVmZXJzIHRvIGEgcG9zaXRpb25hbFxuYXJndW1lbnQsIGFuZCBpZiBpdFwncyBhIGtleXdvcmQsIGl0IHJlZmVycyB0byBhIG5hbWVkIGtleXdvcmRcbmFyZ3VtZW50LiAgSWYgdGhlIG51bWVyaWNhbCBhcmdfbmFtZXMgaW4gYSBmb3JtYXQgc3RyaW5nIGFyZSAwLCAxLCAyLFxuLi4uIGluIHNlcXVlbmNlLCB0aGV5IGNhbiBhbGwgYmUgb21pdHRlZCAobm90IGp1c3Qgc29tZSkgYW5kIHRoZVxubnVtYmVycyAwLCAxLCAyLCAuLi4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGluc2VydGVkIGluIHRoYXQgb3JkZXIuXG5CZWNhdXNlICphcmdfbmFtZSogaXMgbm90IHF1b3RlLWRlbGltaXRlZCwgaXQgaXMgbm90IHBvc3NpYmxlIHRvXG5zcGVjaWZ5IGFyYml0cmFyeSBkaWN0aW9uYXJ5IGtleXMgKGUuZy4sIHRoZSBzdHJpbmdzICJcJzEwXCciIG9yXG4iXCc6LV1cJyIpIHdpdGhpbiBhIGZvcm1hdCBzdHJpbmcuIFRoZSAqYXJnX25hbWUqIGNhbiBiZSBmb2xsb3dlZCBieSBhbnlcbm51bWJlciBvZiBpbmRleCBvciBhdHRyaWJ1dGUgZXhwcmVzc2lvbnMuIEFuIGV4cHJlc3Npb24gb2YgdGhlIGZvcm1cbiJcJy5uYW1lXCciIHNlbGVjdHMgdGhlIG5hbWVkIGF0dHJpYnV0ZSB1c2luZyAiZ2V0YXR0cigpIiwgd2hpbGUgYW5cbmV4cHJlc3Npb24gb2YgdGhlIGZvcm0gIlwnW2luZGV4XVwnIiBkb2VzIGFuIGluZGV4IGxvb2t1cCB1c2luZ1xuIl9fZ2V0aXRlbV9fKCkiLlxuXG5DaGFuZ2VkIGluIHZlcnNpb24gMy4xOiBUaGUgcG9zaXRpb25hbCBhcmd1bWVudCBzcGVjaWZpZXJzIGNhbiBiZVxub21pdHRlZCwgc28gIlwne30ge31cJyIgaXMgZXF1aXZhbGVudCB0byAiXCd7MH0gezF9XCciLlxuXG5Tb21lIHNpbXBsZSBmb3JtYXQgc3RyaW5nIGV4YW1wbGVzOlxuXG4gICAiRmlyc3QsIHRob3Ugc2hhbHQgY291bnQgdG8gezB9IiAjIFJlZmVyZW5jZXMgZmlyc3QgcG9zaXRpb25hbCBhcmd1bWVudFxuICAgIkJyaW5nIG1lIGEge30iICAgICAgICAgICAgICAgICAgIyBJbXBsaWNpdGx5IHJlZmVyZW5jZXMgdGhlIGZpcnN0IHBvc2l0aW9uYWwgYXJndW1lbnRcbiAgICJGcm9tIHt9IHRvIHt9IiAgICAgICAgICAgICAgICAgICMgU2FtZSBhcyAiRnJvbSB7MH0gdG8gezF9IlxuICAgIk15IHF1ZXN0IGlzIHtuYW1lfSIgICAgICAgICAgICAgIyBSZWZlcmVuY2VzIGtleXdvcmQgYXJndW1lbnQgXCduYW1lXCdcbiAgICJXZWlnaHQgaW4gdG9ucyB7MC53ZWlnaHR9IiAgICAgICMgXCd3ZWlnaHRcJyBhdHRyaWJ1dGUgb2YgZmlyc3QgcG9zaXRpb25hbCBhcmdcbiAgICJVbml0cyBkZXN0cm95ZWQ6IHtwbGF5ZXJzWzBdfSIgICMgRmlyc3QgZWxlbWVudCBvZiBrZXl3b3JkIGFyZ3VtZW50IFwncGxheWVyc1wnLlxuXG5UaGUgKmNvbnZlcnNpb24qIGZpZWxkIGNhdXNlcyBhIHR5cGUgY29lcmNpb24gYmVmb3JlIGZvcm1hdHRpbmcuXG5Ob3JtYWxseSwgdGhlIGpvYiBvZiBmb3JtYXR0aW5nIGEgdmFsdWUgaXMgZG9uZSBieSB0aGUgIl9fZm9ybWF0X18oKSJcbm1ldGhvZCBvZiB0aGUgdmFsdWUgaXRzZWxmLiAgSG93ZXZlciwgaW4gc29tZSBjYXNlcyBpdCBpcyBkZXNpcmFibGUgdG9cbmZvcmNlIGEgdHlwZSB0byBiZSBmb3JtYXR0ZWQgYXMgYSBzdHJpbmcsIG92ZXJyaWRpbmcgaXRzIG93blxuZGVmaW5pdGlvbiBvZiBmb3JtYXR0aW5nLiAgQnkgY29udmVydGluZyB0aGUgdmFsdWUgdG8gYSBzdHJpbmcgYmVmb3JlXG5jYWxsaW5nICJfX2Zvcm1hdF9fKCkiLCB0aGUgbm9ybWFsIGZvcm1hdHRpbmcgbG9naWMgaXMgYnlwYXNzZWQuXG5cblRocmVlIGNvbnZlcnNpb24gZmxhZ3MgYXJlIGN1cnJlbnRseSBzdXBwb3J0ZWQ6ICJcJyFzXCciIHdoaWNoIGNhbGxzXG4ic3RyKCkiIG9uIHRoZSB2YWx1ZSwgIlwnIXJcJyIgd2hpY2ggY2FsbHMgInJlcHIoKSIgYW5kICJcJyFhXCciIHdoaWNoXG5jYWxscyAiYXNjaWkoKSIuXG5cblNvbWUgZXhhbXBsZXM6XG5cbiAgICJIYXJvbGRcJ3MgYSBjbGV2ZXIgezAhc30iICAgICAgICAjIENhbGxzIHN0cigpIG9uIHRoZSBhcmd1bWVudCBmaXJzdFxuICAgIkJyaW5nIG91dCB0aGUgaG9seSB7bmFtZSFyfSIgICAgIyBDYWxscyByZXByKCkgb24gdGhlIGFyZ3VtZW50IGZpcnN0XG4gICAiTW9yZSB7IWF9IiAgICAgICAgICAgICAgICAgICAgICAjIENhbGxzIGFzY2lpKCkgb24gdGhlIGFyZ3VtZW50IGZpcnN0XG5cblRoZSAqZm9ybWF0X3NwZWMqIGZpZWxkIGNvbnRhaW5zIGEgc3BlY2lmaWNhdGlvbiBvZiBob3cgdGhlIHZhbHVlXG5zaG91bGQgYmUgcHJlc2VudGVkLCBpbmNsdWRpbmcgc3VjaCBkZXRhaWxzIGFzIGZpZWxkIHdpZHRoLCBhbGlnbm1lbnQsXG5wYWRkaW5nLCBkZWNpbWFsIHByZWNpc2lvbiBhbmQgc28gb24uICBFYWNoIHZhbHVlIHR5cGUgY2FuIGRlZmluZSBpdHNcbm93biAiZm9ybWF0dGluZyBtaW5pLWxhbmd1YWdlIiBvciBpbnRlcnByZXRhdGlvbiBvZiB0aGUgKmZvcm1hdF9zcGVjKi5cblxuTW9zdCBidWlsdC1pbiB0eXBlcyBzdXBwb3J0IGEgY29tbW9uIGZvcm1hdHRpbmcgbWluaS1sYW5ndWFnZSwgd2hpY2hcbmlzIGRlc2NyaWJlZCBpbiB0aGUgbmV4dCBzZWN0aW9uLlxuXG5BICpmb3JtYXRfc3BlYyogZmllbGQgY2FuIGFsc28gaW5jbHVkZSBuZXN0ZWQgcmVwbGFjZW1lbnQgZmllbGRzXG53aXRoaW4gaXQuIFRoZXNlIG5lc3RlZCByZXBsYWNlbWVudCBmaWVsZHMgY2FuIGNvbnRhaW4gb25seSBhIGZpZWxkXG5uYW1lOyBjb252ZXJzaW9uIGZsYWdzIGFuZCBmb3JtYXQgc3BlY2lmaWNhdGlvbnMgYXJlIG5vdCBhbGxvd2VkLiAgVGhlXG5yZXBsYWNlbWVudCBmaWVsZHMgd2l0aGluIHRoZSBmb3JtYXRfc3BlYyBhcmUgc3Vic3RpdHV0ZWQgYmVmb3JlIHRoZVxuKmZvcm1hdF9zcGVjKiBzdHJpbmcgaXMgaW50ZXJwcmV0ZWQuIFRoaXMgYWxsb3dzIHRoZSBmb3JtYXR0aW5nIG9mIGFcbnZhbHVlIHRvIGJlIGR5bmFtaWNhbGx5IHNwZWNpZmllZC5cblxuU2VlIHRoZSAqRm9ybWF0IGV4YW1wbGVzKiBzZWN0aW9uIGZvciBzb21lIGV4YW1wbGVzLlxuXG5cbkZvcm1hdCBTcGVjaWZpY2F0aW9uIE1pbmktTGFuZ3VhZ2Vcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuIkZvcm1hdCBzcGVjaWZpY2F0aW9ucyIgYXJlIHVzZWQgd2l0aGluIHJlcGxhY2VtZW50IGZpZWxkcyBjb250YWluZWRcbndpdGhpbiBhIGZvcm1hdCBzdHJpbmcgdG8gZGVmaW5lIGhvdyBpbmRpdmlkdWFsIHZhbHVlcyBhcmUgcHJlc2VudGVkXG4oc2VlICpGb3JtYXQgU3RyaW5nIFN5bnRheCopLiAgVGhleSBjYW4gYWxzbyBiZSBwYXNzZWQgZGlyZWN0bHkgdG8gdGhlXG5idWlsdC1pbiAiZm9ybWF0KCkiIGZ1bmN0aW9uLiAgRWFjaCBmb3JtYXR0YWJsZSB0eXBlIG1heSBkZWZpbmUgaG93XG50aGUgZm9ybWF0IHNwZWNpZmljYXRpb24gaXMgdG8gYmUgaW50ZXJwcmV0ZWQuXG5cbk1vc3QgYnVpbHQtaW4gdHlwZXMgaW1wbGVtZW50IHRoZSBmb2xsb3dpbmcgb3B0aW9ucyBmb3IgZm9ybWF0XG5zcGVjaWZpY2F0aW9ucywgYWx0aG91Z2ggc29tZSBvZiB0aGUgZm9ybWF0dGluZyBvcHRpb25zIGFyZSBvbmx5XG5zdXBwb3J0ZWQgYnkgdGhlIG51bWVyaWMgdHlwZXMuXG5cbkEgZ2VuZXJhbCBjb252ZW50aW9uIGlzIHRoYXQgYW4gZW1wdHkgZm9ybWF0IHN0cmluZyAoIiIiIikgcHJvZHVjZXNcbnRoZSBzYW1lIHJlc3VsdCBhcyBpZiB5b3UgaGFkIGNhbGxlZCAic3RyKCkiIG9uIHRoZSB2YWx1ZS4gQSBub24tZW1wdHlcbmZvcm1hdCBzdHJpbmcgdHlwaWNhbGx5IG1vZGlmaWVzIHRoZSByZXN1bHQuXG5cblRoZSBnZW5lcmFsIGZvcm0gb2YgYSAqc3RhbmRhcmQgZm9ybWF0IHNwZWNpZmllciogaXM6XG5cbiAgIGZvcm1hdF9zcGVjIDo6PSBbW2ZpbGxdYWxpZ25dW3NpZ25dWyNdWzBdW3dpZHRoXVssXVsucHJlY2lzaW9uXVt0eXBlXVxuICAgZmlsbCAgICAgICAgOjo9IDxhbnkgY2hhcmFjdGVyPlxuICAgYWxpZ24gICAgICAgOjo9ICI8IiB8ICI+IiB8ICI9IiB8ICJeIlxuICAgc2lnbiAgICAgICAgOjo9ICIrIiB8ICItIiB8ICIgIlxuICAgd2lkdGggICAgICAgOjo9IGludGVnZXJcbiAgIHByZWNpc2lvbiAgIDo6PSBpbnRlZ2VyXG4gICB0eXBlICAgICAgICA6Oj0gImIiIHwgImMiIHwgImQiIHwgImUiIHwgIkUiIHwgImYiIHwgIkYiIHwgImciIHwgIkciIHwgIm4iIHwgIm8iIHwgInMiIHwgIngiIHwgIlgiIHwgIiUiXG5cbklmIGEgdmFsaWQgKmFsaWduKiB2YWx1ZSBpcyBzcGVjaWZpZWQsIGl0IGNhbiBiZSBwcmVjZWRlZCBieSBhICpmaWxsKlxuY2hhcmFjdGVyIHRoYXQgY2FuIGJlIGFueSBjaGFyYWN0ZXIgYW5kIGRlZmF1bHRzIHRvIGEgc3BhY2UgaWZcbm9taXR0ZWQuIE5vdGUgdGhhdCBpdCBpcyBub3QgcG9zc2libGUgdG8gdXNlICJ7IiBhbmQgIn0iIGFzICpmaWxsKlxuY2hhciB3aGlsZSB1c2luZyB0aGUgInN0ci5mb3JtYXQoKSIgbWV0aG9kOyB0aGlzIGxpbWl0YXRpb24gaG93ZXZlclxuZG9lc25cJ3QgYWZmZWN0IHRoZSAiZm9ybWF0KCkiIGZ1bmN0aW9uLlxuXG5UaGUgbWVhbmluZyBvZiB0aGUgdmFyaW91cyBhbGlnbm1lbnQgb3B0aW9ucyBpcyBhcyBmb2xsb3dzOlxuXG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBPcHRpb24gICAgfCBNZWFuaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICs9PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rXG4gICB8ICJcJzxcJyIgICAgIHwgRm9yY2VzIHRoZSBmaWVsZCB0byBiZSBsZWZ0LWFsaWduZWQgd2l0aGluIHRoZSBhdmFpbGFibGUgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCAiXCc+XCciICAgICB8IEZvcmNlcyB0aGUgZmllbGQgdG8gYmUgcmlnaHQtYWxpZ25lZCB3aXRoaW4gdGhlIGF2YWlsYWJsZSAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgIlwnPVwnIiAgICAgfCBGb3JjZXMgdGhlIHBhZGRpbmcgdG8gYmUgcGxhY2VkIGFmdGVyIHRoZSBzaWduIChpZiBhbnkpICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8ICJcJ15cJyIgICAgIHwgRm9yY2VzIHRoZSBmaWVsZCB0byBiZSBjZW50ZXJlZCB3aXRoaW4gdGhlIGF2YWlsYWJsZSAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuXG5Ob3RlIHRoYXQgdW5sZXNzIGEgbWluaW11bSBmaWVsZCB3aWR0aCBpcyBkZWZpbmVkLCB0aGUgZmllbGQgd2lkdGhcbndpbGwgYWx3YXlzIGJlIHRoZSBzYW1lIHNpemUgYXMgdGhlIGRhdGEgdG8gZmlsbCBpdCwgc28gdGhhdCB0aGVcbmFsaWdubWVudCBvcHRpb24gaGFzIG5vIG1lYW5pbmcgaW4gdGhpcyBjYXNlLlxuXG5UaGUgKnNpZ24qIG9wdGlvbiBpcyBvbmx5IHZhbGlkIGZvciBudW1iZXIgdHlwZXMsIGFuZCBjYW4gYmUgb25lIG9mXG50aGUgZm9sbG93aW5nOlxuXG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBPcHRpb24gICAgfCBNZWFuaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICs9PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rXG4gICB8ICJcJytcJyIgICAgIHwgaW5kaWNhdGVzIHRoYXQgYSBzaWduIHNob3VsZCBiZSB1c2VkIGZvciBib3RoIHBvc2l0aXZlIGFzICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCAiXCctXCciICAgICB8IGluZGljYXRlcyB0aGF0IGEgc2lnbiBzaG91bGQgYmUgdXNlZCBvbmx5IGZvciBuZWdhdGl2ZSAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgc3BhY2UgICAgIHwgaW5kaWNhdGVzIHRoYXQgYSBsZWFkaW5nIHNwYWNlIHNob3VsZCBiZSB1c2VkIG9uIHBvc2l0aXZlICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuXG5UaGUgIlwnI1wnIiBvcHRpb24gY2F1c2VzIHRoZSAiYWx0ZXJuYXRlIGZvcm0iIHRvIGJlIHVzZWQgZm9yIHRoZVxuY29udmVyc2lvbi4gIFRoZSBhbHRlcm5hdGUgZm9ybSBpcyBkZWZpbmVkIGRpZmZlcmVudGx5IGZvciBkaWZmZXJlbnRcbnR5cGVzLiAgVGhpcyBvcHRpb24gaXMgb25seSB2YWxpZCBmb3IgaW50ZWdlciwgZmxvYXQsIGNvbXBsZXggYW5kXG5EZWNpbWFsIHR5cGVzLiBGb3IgaW50ZWdlcnMsIHdoZW4gYmluYXJ5LCBvY3RhbCwgb3IgaGV4YWRlY2ltYWwgb3V0cHV0XG5pcyB1c2VkLCB0aGlzIG9wdGlvbiBhZGRzIHRoZSBwcmVmaXggcmVzcGVjdGl2ZSAiXCcwYlwnIiwgIlwnMG9cJyIsIG9yXG4iXCcweFwnIiB0byB0aGUgb3V0cHV0IHZhbHVlLiBGb3IgZmxvYXRzLCBjb21wbGV4IGFuZCBEZWNpbWFsIHRoZVxuYWx0ZXJuYXRlIGZvcm0gY2F1c2VzIHRoZSByZXN1bHQgb2YgdGhlIGNvbnZlcnNpb24gdG8gYWx3YXlzIGNvbnRhaW4gYVxuZGVjaW1hbC1wb2ludCBjaGFyYWN0ZXIsIGV2ZW4gaWYgbm8gZGlnaXRzIGZvbGxvdyBpdC4gTm9ybWFsbHksIGFcbmRlY2ltYWwtcG9pbnQgY2hhcmFjdGVyIGFwcGVhcnMgaW4gdGhlIHJlc3VsdCBvZiB0aGVzZSBjb252ZXJzaW9uc1xub25seSBpZiBhIGRpZ2l0IGZvbGxvd3MgaXQuIEluIGFkZGl0aW9uLCBmb3IgIlwnZ1wnIiBhbmQgIlwnR1wnIlxuY29udmVyc2lvbnMsIHRyYWlsaW5nIHplcm9zIGFyZSBub3QgcmVtb3ZlZCBmcm9tIHRoZSByZXN1bHQuXG5cblRoZSAiXCcsXCciIG9wdGlvbiBzaWduYWxzIHRoZSB1c2Ugb2YgYSBjb21tYSBmb3IgYSB0aG91c2FuZHMgc2VwYXJhdG9yLlxuRm9yIGEgbG9jYWxlIGF3YXJlIHNlcGFyYXRvciwgdXNlIHRoZSAiXCduXCciIGludGVnZXIgcHJlc2VudGF0aW9uIHR5cGVcbmluc3RlYWQuXG5cbkNoYW5nZWQgaW4gdmVyc2lvbiAzLjE6IEFkZGVkIHRoZSAiXCcsXCciIG9wdGlvbiAoc2VlIGFsc28gKipQRVAgMzc4KiopLlxuXG4qd2lkdGgqIGlzIGEgZGVjaW1hbCBpbnRlZ2VyIGRlZmluaW5nIHRoZSBtaW5pbXVtIGZpZWxkIHdpZHRoLiAgSWYgbm90XG5zcGVjaWZpZWQsIHRoZW4gdGhlIGZpZWxkIHdpZHRoIHdpbGwgYmUgZGV0ZXJtaW5lZCBieSB0aGUgY29udGVudC5cblxuUHJlY2VkaW5nIHRoZSAqd2lkdGgqIGZpZWxkIGJ5IGEgemVybyAoIlwnMFwnIikgY2hhcmFjdGVyIGVuYWJsZXMgc2lnbi1cbmF3YXJlIHplcm8tcGFkZGluZyBmb3IgbnVtZXJpYyB0eXBlcy4gIFRoaXMgaXMgZXF1aXZhbGVudCB0byBhICpmaWxsKlxuY2hhcmFjdGVyIG9mICJcJzBcJyIgd2l0aCBhbiAqYWxpZ25tZW50KiB0eXBlIG9mICJcJz1cJyIuXG5cblRoZSAqcHJlY2lzaW9uKiBpcyBhIGRlY2ltYWwgbnVtYmVyIGluZGljYXRpbmcgaG93IG1hbnkgZGlnaXRzIHNob3VsZFxuYmUgZGlzcGxheWVkIGFmdGVyIHRoZSBkZWNpbWFsIHBvaW50IGZvciBhIGZsb2F0aW5nIHBvaW50IHZhbHVlXG5mb3JtYXR0ZWQgd2l0aCAiXCdmXCciIGFuZCAiXCdGXCciLCBvciBiZWZvcmUgYW5kIGFmdGVyIHRoZSBkZWNpbWFsIHBvaW50XG5mb3IgYSBmbG9hdGluZyBwb2ludCB2YWx1ZSBmb3JtYXR0ZWQgd2l0aCAiXCdnXCciIG9yICJcJ0dcJyIuICBGb3Igbm9uLVxubnVtYmVyIHR5cGVzIHRoZSBmaWVsZCBpbmRpY2F0ZXMgdGhlIG1heGltdW0gZmllbGQgc2l6ZSAtIGluIG90aGVyXG53b3JkcywgaG93IG1hbnkgY2hhcmFjdGVycyB3aWxsIGJlIHVzZWQgZnJvbSB0aGUgZmllbGQgY29udGVudC4gVGhlXG4qcHJlY2lzaW9uKiBpcyBub3QgYWxsb3dlZCBmb3IgaW50ZWdlciB2YWx1ZXMuXG5cbkZpbmFsbHksIHRoZSAqdHlwZSogZGV0ZXJtaW5lcyBob3cgdGhlIGRhdGEgc2hvdWxkIGJlIHByZXNlbnRlZC5cblxuVGhlIGF2YWlsYWJsZSBzdHJpbmcgcHJlc2VudGF0aW9uIHR5cGVzIGFyZTpcblxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgVHlwZSAgICAgIHwgTWVhbmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArPT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09K1xuICAgfCAiXCdzXCciICAgICB8IFN0cmluZyBmb3JtYXQuIFRoaXMgaXMgdGhlIGRlZmF1bHQgdHlwZSBmb3Igc3RyaW5ncyBhbmQgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgTm9uZSAgICAgIHwgVGhlIHNhbWUgYXMgIlwnc1wnIi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG5cblRoZSBhdmFpbGFibGUgaW50ZWdlciBwcmVzZW50YXRpb24gdHlwZXMgYXJlOlxuXG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBUeXBlICAgICAgfCBNZWFuaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICs9PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rXG4gICB8ICJcJ2JcJyIgICAgIHwgQmluYXJ5IGZvcm1hdC4gT3V0cHV0cyB0aGUgbnVtYmVyIGluIGJhc2UgMi4gICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCAiXCdjXCciICAgICB8IENoYXJhY3Rlci4gQ29udmVydHMgdGhlIGludGVnZXIgdG8gdGhlIGNvcnJlc3BvbmRpbmcgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgIlwnZFwnIiAgICAgfCBEZWNpbWFsIEludGVnZXIuIE91dHB1dHMgdGhlIG51bWJlciBpbiBiYXNlIDEwLiAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8ICJcJ29cJyIgICAgIHwgT2N0YWwgZm9ybWF0LiBPdXRwdXRzIHRoZSBudW1iZXIgaW4gYmFzZSA4LiAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCAiXCd4XCciICAgICB8IEhleCBmb3JtYXQuIE91dHB1dHMgdGhlIG51bWJlciBpbiBiYXNlIDE2LCB1c2luZyBsb3dlci0gICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgIlwnWFwnIiAgICAgfCBIZXggZm9ybWF0LiBPdXRwdXRzIHRoZSBudW1iZXIgaW4gYmFzZSAxNiwgdXNpbmcgdXBwZXItICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8ICJcJ25cJyIgICAgIHwgTnVtYmVyLiBUaGlzIGlzIHRoZSBzYW1lIGFzICJcJ2RcJyIsIGV4Y2VwdCB0aGF0IGl0IHVzZXMgdGhlIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IE5vbmUgICAgICB8IFRoZSBzYW1lIGFzICJcJ2RcJyIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuXG5JbiBhZGRpdGlvbiB0byB0aGUgYWJvdmUgcHJlc2VudGF0aW9uIHR5cGVzLCBpbnRlZ2VycyBjYW4gYmUgZm9ybWF0dGVkXG53aXRoIHRoZSBmbG9hdGluZyBwb2ludCBwcmVzZW50YXRpb24gdHlwZXMgbGlzdGVkIGJlbG93IChleGNlcHQgIlwnblwnIlxuYW5kIE5vbmUpLiBXaGVuIGRvaW5nIHNvLCAiZmxvYXQoKSIgaXMgdXNlZCB0byBjb252ZXJ0IHRoZSBpbnRlZ2VyIHRvXG5hIGZsb2F0aW5nIHBvaW50IG51bWJlciBiZWZvcmUgZm9ybWF0dGluZy5cblxuVGhlIGF2YWlsYWJsZSBwcmVzZW50YXRpb24gdHlwZXMgZm9yIGZsb2F0aW5nIHBvaW50IGFuZCBkZWNpbWFsIHZhbHVlc1xuYXJlOlxuXG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBUeXBlICAgICAgfCBNZWFuaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICs9PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rXG4gICB8ICJcJ2VcJyIgICAgIHwgRXhwb25lbnQgbm90YXRpb24uIFByaW50cyB0aGUgbnVtYmVyIGluIHNjaWVudGlmaWMgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCAiXCdFXCciICAgICB8IEV4cG9uZW50IG5vdGF0aW9uLiBTYW1lIGFzICJcJ2VcJyIgZXhjZXB0IGl0IHVzZXMgYW4gdXBwZXIgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCAiXCdmXCciICAgICB8IEZpeGVkIHBvaW50LiBEaXNwbGF5cyB0aGUgbnVtYmVyIGFzIGEgZml4ZWQtcG9pbnQgbnVtYmVyLiAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgIlwnRlwnIiAgICAgfCBGaXhlZCBwb2ludC4gU2FtZSBhcyAiXCdmXCciLCBidXQgY29udmVydHMgIm5hbiIgdG8gIk5BTiIgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgIlwnZ1wnIiAgICAgfCBHZW5lcmFsIGZvcm1hdC4gIEZvciBhIGdpdmVuIHByZWNpc2lvbiAicCA+PSAxIiwgdGhpcyAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8ICJcJ0dcJyIgICAgIHwgR2VuZXJhbCBmb3JtYXQuIFNhbWUgYXMgIlwnZ1wnIiBleGNlcHQgc3dpdGNoZXMgdG8gIlwnRVwnIiBpZiAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgIlwnblwnIiAgICAgfCBOdW1iZXIuIFRoaXMgaXMgdGhlIHNhbWUgYXMgIlwnZ1wnIiwgZXhjZXB0IHRoYXQgaXQgdXNlcyB0aGUgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgIlwnJVwnIiAgICAgfCBQZXJjZW50YWdlLiBNdWx0aXBsaWVzIHRoZSBudW1iZXIgYnkgMTAwIGFuZCBkaXNwbGF5cyBpbiAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IE5vbmUgICAgICB8IFNpbWlsYXIgdG8gIlwnZ1wnIiwgZXhjZXB0IHdpdGggYXQgbGVhc3Qgb25lIGRpZ2l0IHBhc3QgdGhlICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuXG5cbkZvcm1hdCBleGFtcGxlc1xuPT09PT09PT09PT09PT09XG5cblRoaXMgc2VjdGlvbiBjb250YWlucyBleGFtcGxlcyBvZiB0aGUgbmV3IGZvcm1hdCBzeW50YXggYW5kIGNvbXBhcmlzb25cbndpdGggdGhlIG9sZCAiJSItZm9ybWF0dGluZy5cblxuSW4gbW9zdCBvZiB0aGUgY2FzZXMgdGhlIHN5bnRheCBpcyBzaW1pbGFyIHRvIHRoZSBvbGQgIiUiLWZvcm1hdHRpbmcsXG53aXRoIHRoZSBhZGRpdGlvbiBvZiB0aGUgInt9IiBhbmQgd2l0aCAiOiIgdXNlZCBpbnN0ZWFkIG9mICIlIi4gRm9yXG5leGFtcGxlLCAiXCclMDMuMmZcJyIgY2FuIGJlIHRyYW5zbGF0ZWQgdG8gIlwnezowMy4yZn1cJyIuXG5cblRoZSBuZXcgZm9ybWF0IHN5bnRheCBhbHNvIHN1cHBvcnRzIG5ldyBhbmQgZGlmZmVyZW50IG9wdGlvbnMsIHNob3duXG5pbiB0aGUgZm9sbG93IGV4YW1wbGVzLlxuXG5BY2Nlc3NpbmcgYXJndW1lbnRzIGJ5IHBvc2l0aW9uOlxuXG4gICA+Pj4gXCd7MH0sIHsxfSwgezJ9XCcuZm9ybWF0KFwnYVwnLCBcJ2JcJywgXCdjXCcpXG4gICBcJ2EsIGIsIGNcJ1xuICAgPj4+IFwne30sIHt9LCB7fVwnLmZvcm1hdChcJ2FcJywgXCdiXCcsIFwnY1wnKSAgIyAzLjErIG9ubHlcbiAgIFwnYSwgYiwgY1wnXG4gICA+Pj4gXCd7Mn0sIHsxfSwgezB9XCcuZm9ybWF0KFwnYVwnLCBcJ2JcJywgXCdjXCcpXG4gICBcJ2MsIGIsIGFcJ1xuICAgPj4+IFwnezJ9LCB7MX0sIHswfVwnLmZvcm1hdCgqXCdhYmNcJykgICAgICAjIHVucGFja2luZyBhcmd1bWVudCBzZXF1ZW5jZVxuICAgXCdjLCBiLCBhXCdcbiAgID4+PiBcJ3swfXsxfXswfVwnLmZvcm1hdChcJ2FicmFcJywgXCdjYWRcJykgICAjIGFyZ3VtZW50c1wnIGluZGljZXMgY2FuIGJlIHJlcGVhdGVkXG4gICBcJ2FicmFjYWRhYnJhXCdcblxuQWNjZXNzaW5nIGFyZ3VtZW50cyBieSBuYW1lOlxuXG4gICA+Pj4gXCdDb29yZGluYXRlczoge2xhdGl0dWRlfSwge2xvbmdpdHVkZX1cJy5mb3JtYXQobGF0aXR1ZGU9XCczNy4yNE5cJywgbG9uZ2l0dWRlPVwnLTExNS44MVdcJylcbiAgIFwnQ29vcmRpbmF0ZXM6IDM3LjI0TiwgLTExNS44MVdcJ1xuICAgPj4+IGNvb3JkID0ge1wnbGF0aXR1ZGVcJzogXCczNy4yNE5cJywgXCdsb25naXR1ZGVcJzogXCctMTE1LjgxV1wnfVxuICAgPj4+IFwnQ29vcmRpbmF0ZXM6IHtsYXRpdHVkZX0sIHtsb25naXR1ZGV9XCcuZm9ybWF0KCoqY29vcmQpXG4gICBcJ0Nvb3JkaW5hdGVzOiAzNy4yNE4sIC0xMTUuODFXXCdcblxuQWNjZXNzaW5nIGFyZ3VtZW50c1wnIGF0dHJpYnV0ZXM6XG5cbiAgID4+PiBjID0gMy01alxuICAgPj4+IChcJ1RoZSBjb21wbGV4IG51bWJlciB7MH0gaXMgZm9ybWVkIGZyb20gdGhlIHJlYWwgcGFydCB7MC5yZWFsfSBcJ1xuICAgLi4uICBcJ2FuZCB0aGUgaW1hZ2luYXJ5IHBhcnQgezAuaW1hZ30uXCcpLmZvcm1hdChjKVxuICAgXCdUaGUgY29tcGxleCBudW1iZXIgKDMtNWopIGlzIGZvcm1lZCBmcm9tIHRoZSByZWFsIHBhcnQgMy4wIGFuZCB0aGUgaW1hZ2luYXJ5IHBhcnQgLTUuMC5cJ1xuICAgPj4+IGNsYXNzIFBvaW50OlxuICAgLi4uICAgICBkZWYgX19pbml0X18oc2VsZiwgeCwgeSk6XG4gICAuLi4gICAgICAgICBzZWxmLngsIHNlbGYueSA9IHgsIHlcbiAgIC4uLiAgICAgZGVmIF9fc3RyX18oc2VsZik6XG4gICAuLi4gICAgICAgICByZXR1cm4gXCdQb2ludCh7c2VsZi54fSwge3NlbGYueX0pXCcuZm9ybWF0KHNlbGY9c2VsZilcbiAgIC4uLlxuICAgPj4+IHN0cihQb2ludCg0LCAyKSlcbiAgIFwnUG9pbnQoNCwgMilcJ1xuXG5BY2Nlc3NpbmcgYXJndW1lbnRzXCcgaXRlbXM6XG5cbiAgID4+PiBjb29yZCA9ICgzLCA1KVxuICAgPj4+IFwnWDogezBbMF19OyAgWTogezBbMV19XCcuZm9ybWF0KGNvb3JkKVxuICAgXCdYOiAzOyAgWTogNVwnXG5cblJlcGxhY2luZyAiJXMiIGFuZCAiJXIiOlxuXG4gICA+Pj4gInJlcHIoKSBzaG93cyBxdW90ZXM6IHshcn07IHN0cigpIGRvZXNuXCd0OiB7IXN9Ii5mb3JtYXQoXCd0ZXN0MVwnLCBcJ3Rlc3QyXCcpXG4gICAicmVwcigpIHNob3dzIHF1b3RlczogXCd0ZXN0MVwnOyBzdHIoKSBkb2VzblwndDogdGVzdDIiXG5cbkFsaWduaW5nIHRoZSB0ZXh0IGFuZCBzcGVjaWZ5aW5nIGEgd2lkdGg6XG5cbiAgID4+PiBcJ3s6PDMwfVwnLmZvcm1hdChcJ2xlZnQgYWxpZ25lZFwnKVxuICAgXCdsZWZ0IGFsaWduZWQgICAgICAgICAgICAgICAgICBcJ1xuICAgPj4+IFwnezo+MzB9XCcuZm9ybWF0KFwncmlnaHQgYWxpZ25lZFwnKVxuICAgXCcgICAgICAgICAgICAgICAgIHJpZ2h0IGFsaWduZWRcJ1xuICAgPj4+IFwnezpeMzB9XCcuZm9ybWF0KFwnY2VudGVyZWRcJylcbiAgIFwnICAgICAgICAgICBjZW50ZXJlZCAgICAgICAgICAgXCdcbiAgID4+PiBcJ3s6Kl4zMH1cJy5mb3JtYXQoXCdjZW50ZXJlZFwnKSAgIyB1c2UgXCcqXCcgYXMgYSBmaWxsIGNoYXJcbiAgIFwnKioqKioqKioqKipjZW50ZXJlZCoqKioqKioqKioqXCdcblxuUmVwbGFjaW5nICIlK2YiLCAiJS1mIiwgYW5kICIlIGYiIGFuZCBzcGVjaWZ5aW5nIGEgc2lnbjpcblxuICAgPj4+IFwnezorZn07IHs6K2Z9XCcuZm9ybWF0KDMuMTQsIC0zLjE0KSAgIyBzaG93IGl0IGFsd2F5c1xuICAgXCcrMy4xNDAwMDA7IC0zLjE0MDAwMFwnXG4gICA+Pj4gXCd7OiBmfTsgezogZn1cJy5mb3JtYXQoMy4xNCwgLTMuMTQpICAjIHNob3cgYSBzcGFjZSBmb3IgcG9zaXRpdmUgbnVtYmVyc1xuICAgXCcgMy4xNDAwMDA7IC0zLjE0MDAwMFwnXG4gICA+Pj4gXCd7Oi1mfTsgezotZn1cJy5mb3JtYXQoMy4xNCwgLTMuMTQpICAjIHNob3cgb25seSB0aGUgbWludXMgLS0gc2FtZSBhcyBcJ3s6Zn07IHs6Zn1cJ1xuICAgXCczLjE0MDAwMDsgLTMuMTQwMDAwXCdcblxuUmVwbGFjaW5nICIleCIgYW5kICIlbyIgYW5kIGNvbnZlcnRpbmcgdGhlIHZhbHVlIHRvIGRpZmZlcmVudCBiYXNlczpcblxuICAgPj4+ICMgZm9ybWF0IGFsc28gc3VwcG9ydHMgYmluYXJ5IG51bWJlcnNcbiAgID4+PiAiaW50OiB7MDpkfTsgIGhleDogezA6eH07ICBvY3Q6IHswOm99OyAgYmluOiB7MDpifSIuZm9ybWF0KDQyKVxuICAgXCdpbnQ6IDQyOyAgaGV4OiAyYTsgIG9jdDogNTI7ICBiaW46IDEwMTAxMFwnXG4gICA+Pj4gIyB3aXRoIDB4LCAwbywgb3IgMGIgYXMgcHJlZml4OlxuICAgPj4+ICJpbnQ6IHswOmR9OyAgaGV4OiB7MDojeH07ICBvY3Q6IHswOiNvfTsgIGJpbjogezA6I2J9Ii5mb3JtYXQoNDIpXG4gICBcJ2ludDogNDI7ICBoZXg6IDB4MmE7ICBvY3Q6IDBvNTI7ICBiaW46IDBiMTAxMDEwXCdcblxuVXNpbmcgdGhlIGNvbW1hIGFzIGEgdGhvdXNhbmRzIHNlcGFyYXRvcjpcblxuICAgPj4+IFwnezosfVwnLmZvcm1hdCgxMjM0NTY3ODkwKVxuICAgXCcxLDIzNCw1NjcsODkwXCdcblxuRXhwcmVzc2luZyBhIHBlcmNlbnRhZ2U6XG5cbiAgID4+PiBwb2ludHMgPSAxOVxuICAgPj4+IHRvdGFsID0gMjJcbiAgID4+PiBcJ0NvcnJlY3QgYW5zd2VyczogezouMiV9XCcuZm9ybWF0KHBvaW50cy90b3RhbClcbiAgIFwnQ29ycmVjdCBhbnN3ZXJzOiA4Ni4zNiVcJ1xuXG5Vc2luZyB0eXBlLXNwZWNpZmljIGZvcm1hdHRpbmc6XG5cbiAgID4+PiBpbXBvcnQgZGF0ZXRpbWVcbiAgID4+PiBkID0gZGF0ZXRpbWUuZGF0ZXRpbWUoMjAxMCwgNywgNCwgMTIsIDE1LCA1OClcbiAgID4+PiBcJ3s6JVktJW0tJWQgJUg6JU06JVN9XCcuZm9ybWF0KGQpXG4gICBcJzIwMTAtMDctMDQgMTI6MTU6NThcJ1xuXG5OZXN0aW5nIGFyZ3VtZW50cyBhbmQgbW9yZSBjb21wbGV4IGV4YW1wbGVzOlxuXG4gICA+Pj4gZm9yIGFsaWduLCB0ZXh0IGluIHppcChcJzxePlwnLCBbXCdsZWZ0XCcsIFwnY2VudGVyXCcsIFwncmlnaHRcJ10pOlxuICAgLi4uICAgICBcJ3swOntmaWxsfXthbGlnbn0xNn1cJy5mb3JtYXQodGV4dCwgZmlsbD1hbGlnbiwgYWxpZ249YWxpZ24pXG4gICAuLi5cbiAgIFwnbGVmdDw8PDw8PDw8PDw8PFwnXG4gICBcJ15eXl5eY2VudGVyXl5eXl5cJ1xuICAgXCc+Pj4+Pj4+Pj4+PnJpZ2h0XCdcbiAgID4+PlxuICAgPj4+IG9jdGV0cyA9IFsxOTIsIDE2OCwgMCwgMV1cbiAgID4+PiBcJ3s6MDJYfXs6MDJYfXs6MDJYfXs6MDJYfVwnLmZvcm1hdCgqb2N0ZXRzKVxuICAgXCdDMEE4MDAwMVwnXG4gICA+Pj4gaW50KF8sIDE2KVxuICAgMzIzMjIzNTUyMVxuICAgPj4+XG4gICA+Pj4gd2lkdGggPSA1XG4gICA+Pj4gZm9yIG51bSBpbiByYW5nZSg1LDEyKTogI2RvY3Rlc3Q6ICtOT1JNQUxJWkVfV0hJVEVTUEFDRVxuICAgLi4uICAgICBmb3IgYmFzZSBpbiBcJ2RYb2JcJzpcbiAgIC4uLiAgICAgICAgIHByaW50KFwnezA6e3dpZHRofXtiYXNlfX1cJy5mb3JtYXQobnVtLCBiYXNlPWJhc2UsIHdpZHRoPXdpZHRoKSwgZW5kPVwnIFwnKVxuICAgLi4uICAgICBwcmludCgpXG4gICAuLi5cbiAgICAgICA1ICAgICA1ICAgICA1ICAgMTAxXG4gICAgICAgNiAgICAgNiAgICAgNiAgIDExMFxuICAgICAgIDcgICAgIDcgICAgIDcgICAxMTFcbiAgICAgICA4ICAgICA4ICAgIDEwICAxMDAwXG4gICAgICAgOSAgICAgOSAgICAxMSAgMTAwMVxuICAgICAgMTAgICAgIEEgICAgMTIgIDEwMTBcbiAgICAgIDExICAgICBCICAgIDEzICAxMDExXG4nLAotICdmdW5jdGlvbic6ICdcbkZ1bmN0aW9uIGRlZmluaXRpb25zXG4qKioqKioqKioqKioqKioqKioqKlxuXG5BIGZ1bmN0aW9uIGRlZmluaXRpb24gZGVmaW5lcyBhIHVzZXItZGVmaW5lZCBmdW5jdGlvbiBvYmplY3QgKHNlZVxuc2VjdGlvbiAqVGhlIHN0YW5kYXJkIHR5cGUgaGllcmFyY2h5Kik6XG5cbiAgIGZ1bmNkZWYgICAgICAgIDo6PSBbZGVjb3JhdG9yc10gImRlZiIgZnVuY25hbWUgIigiIFtwYXJhbWV0ZXJfbGlzdF0gIikiIFsiLT4iIGV4cHJlc3Npb25dICI6IiBzdWl0ZVxuICAgZGVjb3JhdG9ycyAgICAgOjo9IGRlY29yYXRvcitcbiAgIGRlY29yYXRvciAgICAgIDo6PSAiQCIgZG90dGVkX25hbWUgWyIoIiBbcGFyYW1ldGVyX2xpc3QgWyIsIl1dICIpIl0gTkVXTElORVxuICAgZG90dGVkX25hbWUgICAgOjo9IGlkZW50aWZpZXIgKCIuIiBpZGVudGlmaWVyKSpcbiAgIHBhcmFtZXRlcl9saXN0IDo6PSAoZGVmcGFyYW1ldGVyICIsIikqXG4gICAgICAgICAgICAgICAgICAgICAgKCAiKiIgW3BhcmFtZXRlcl0gKCIsIiBkZWZwYXJhbWV0ZXIpKiBbIiwiICIqKiIgcGFyYW1ldGVyXVxuICAgICAgICAgICAgICAgICAgICAgIHwgIioqIiBwYXJhbWV0ZXJcbiAgICAgICAgICAgICAgICAgICAgICB8IGRlZnBhcmFtZXRlciBbIiwiXSApXG4gICBwYXJhbWV0ZXIgICAgICA6Oj0gaWRlbnRpZmllciBbIjoiIGV4cHJlc3Npb25dXG4gICBkZWZwYXJhbWV0ZXIgICA6Oj0gcGFyYW1ldGVyIFsiPSIgZXhwcmVzc2lvbl1cbiAgIGZ1bmNuYW1lICAgICAgIDo6PSBpZGVudGlmaWVyXG5cbkEgZnVuY3Rpb24gZGVmaW5pdGlvbiBpcyBhbiBleGVjdXRhYmxlIHN0YXRlbWVudC4gIEl0cyBleGVjdXRpb24gYmluZHNcbnRoZSBmdW5jdGlvbiBuYW1lIGluIHRoZSBjdXJyZW50IGxvY2FsIG5hbWVzcGFjZSB0byBhIGZ1bmN0aW9uIG9iamVjdFxuKGEgd3JhcHBlciBhcm91bmQgdGhlIGV4ZWN1dGFibGUgY29kZSBmb3IgdGhlIGZ1bmN0aW9uKS4gIFRoaXNcbmZ1bmN0aW9uIG9iamVjdCBjb250YWlucyBhIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBnbG9iYWwgbmFtZXNwYWNlXG5hcyB0aGUgZ2xvYmFsIG5hbWVzcGFjZSB0byBiZSB1c2VkIHdoZW4gdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZC5cblxuVGhlIGZ1bmN0aW9uIGRlZmluaXRpb24gZG9lcyBub3QgZXhlY3V0ZSB0aGUgZnVuY3Rpb24gYm9keTsgdGhpcyBnZXRzXG5leGVjdXRlZCBvbmx5IHdoZW4gdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZC4gWzNdXG5cbkEgZnVuY3Rpb24gZGVmaW5pdGlvbiBtYXkgYmUgd3JhcHBlZCBieSBvbmUgb3IgbW9yZSAqZGVjb3JhdG9yKlxuZXhwcmVzc2lvbnMuIERlY29yYXRvciBleHByZXNzaW9ucyBhcmUgZXZhbHVhdGVkIHdoZW4gdGhlIGZ1bmN0aW9uIGlzXG5kZWZpbmVkLCBpbiB0aGUgc2NvcGUgdGhhdCBjb250YWlucyB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbi4gIFRoZVxucmVzdWx0IG11c3QgYmUgYSBjYWxsYWJsZSwgd2hpY2ggaXMgaW52b2tlZCB3aXRoIHRoZSBmdW5jdGlvbiBvYmplY3RcbmFzIHRoZSBvbmx5IGFyZ3VtZW50LiBUaGUgcmV0dXJuZWQgdmFsdWUgaXMgYm91bmQgdG8gdGhlIGZ1bmN0aW9uIG5hbWVcbmluc3RlYWQgb2YgdGhlIGZ1bmN0aW9uIG9iamVjdC4gIE11bHRpcGxlIGRlY29yYXRvcnMgYXJlIGFwcGxpZWQgaW5cbm5lc3RlZCBmYXNoaW9uLiBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBjb2RlXG5cbiAgIEBmMShhcmcpXG4gICBAZjJcbiAgIGRlZiBmdW5jKCk6IHBhc3NcblxuaXMgZXF1aXZhbGVudCB0b1xuXG4gICBkZWYgZnVuYygpOiBwYXNzXG4gICBmdW5jID0gZjEoYXJnKShmMihmdW5jKSlcblxuV2hlbiBvbmUgb3IgbW9yZSAqcGFyYW1ldGVycyogaGF2ZSB0aGUgZm9ybSAqcGFyYW1ldGVyKiAiPSJcbipleHByZXNzaW9uKiwgdGhlIGZ1bmN0aW9uIGlzIHNhaWQgdG8gaGF2ZSAiZGVmYXVsdCBwYXJhbWV0ZXIgdmFsdWVzLiJcbkZvciBhIHBhcmFtZXRlciB3aXRoIGEgZGVmYXVsdCB2YWx1ZSwgdGhlIGNvcnJlc3BvbmRpbmcgKmFyZ3VtZW50KiBtYXlcbmJlIG9taXR0ZWQgZnJvbSBhIGNhbGwsIGluIHdoaWNoIGNhc2UgdGhlIHBhcmFtZXRlclwncyBkZWZhdWx0IHZhbHVlIGlzXG5zdWJzdGl0dXRlZC4gIElmIGEgcGFyYW1ldGVyIGhhcyBhIGRlZmF1bHQgdmFsdWUsIGFsbCBmb2xsb3dpbmdcbnBhcmFtZXRlcnMgdXAgdW50aWwgdGhlICIiKiIiIG11c3QgYWxzbyBoYXZlIGEgZGVmYXVsdCB2YWx1ZSAtLS0gdGhpc1xuaXMgYSBzeW50YWN0aWMgcmVzdHJpY3Rpb24gdGhhdCBpcyBub3QgZXhwcmVzc2VkIGJ5IHRoZSBncmFtbWFyLlxuXG4qKkRlZmF1bHQgcGFyYW1ldGVyIHZhbHVlcyBhcmUgZXZhbHVhdGVkIHdoZW4gdGhlIGZ1bmN0aW9uIGRlZmluaXRpb25cbmlzIGV4ZWN1dGVkLioqIFRoaXMgbWVhbnMgdGhhdCB0aGUgZXhwcmVzc2lvbiBpcyBldmFsdWF0ZWQgb25jZSwgd2hlblxudGhlIGZ1bmN0aW9uIGlzIGRlZmluZWQsIGFuZCB0aGF0IHRoZSBzYW1lICJwcmUtY29tcHV0ZWQiIHZhbHVlIGlzXG51c2VkIGZvciBlYWNoIGNhbGwuICBUaGlzIGlzIGVzcGVjaWFsbHkgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgd2hlbiBhXG5kZWZhdWx0IHBhcmFtZXRlciBpcyBhIG11dGFibGUgb2JqZWN0LCBzdWNoIGFzIGEgbGlzdCBvciBhIGRpY3Rpb25hcnk6XG5pZiB0aGUgZnVuY3Rpb24gbW9kaWZpZXMgdGhlIG9iamVjdCAoZS5nLiBieSBhcHBlbmRpbmcgYW4gaXRlbSB0byBhXG5saXN0KSwgdGhlIGRlZmF1bHQgdmFsdWUgaXMgaW4gZWZmZWN0IG1vZGlmaWVkLiBUaGlzIGlzIGdlbmVyYWxseSBub3RcbndoYXQgd2FzIGludGVuZGVkLiAgQSB3YXkgYXJvdW5kIHRoaXMgaXMgdG8gdXNlICJOb25lIiBhcyB0aGUgZGVmYXVsdCxcbmFuZCBleHBsaWNpdGx5IHRlc3QgZm9yIGl0IGluIHRoZSBib2R5IG9mIHRoZSBmdW5jdGlvbiwgZS5nLjpcblxuICAgZGVmIHdoYXRzX29uX3RoZV90ZWxseShwZW5ndWluPU5vbmUpOlxuICAgICAgIGlmIHBlbmd1aW4gaXMgTm9uZTpcbiAgICAgICAgICAgcGVuZ3VpbiA9IFtdXG4gICAgICAgcGVuZ3Vpbi5hcHBlbmQoInByb3BlcnR5IG9mIHRoZSB6b28iKVxuICAgICAgIHJldHVybiBwZW5ndWluXG5cbkZ1bmN0aW9uIGNhbGwgc2VtYW50aWNzIGFyZSBkZXNjcmliZWQgaW4gbW9yZSBkZXRhaWwgaW4gc2VjdGlvblxuKkNhbGxzKi4gQSBmdW5jdGlvbiBjYWxsIGFsd2F5cyBhc3NpZ25zIHZhbHVlcyB0byBhbGwgcGFyYW1ldGVyc1xubWVudGlvbmVkIGluIHRoZSBwYXJhbWV0ZXIgbGlzdCwgZWl0aGVyIGZyb20gcG9zaXRpb24gYXJndW1lbnRzLCBmcm9tXG5rZXl3b3JkIGFyZ3VtZW50cywgb3IgZnJvbSBkZWZhdWx0IHZhbHVlcy4gIElmIHRoZSBmb3JtXG4iIippZGVudGlmaWVyIiIgaXMgcHJlc2VudCwgaXQgaXMgaW5pdGlhbGl6ZWQgdG8gYSB0dXBsZSByZWNlaXZpbmcgYW55XG5leGNlc3MgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLCBkZWZhdWx0aW5nIHRvIHRoZSBlbXB0eSB0dXBsZS4gIElmIHRoZVxuZm9ybSAiIioqaWRlbnRpZmllciIiIGlzIHByZXNlbnQsIGl0IGlzIGluaXRpYWxpemVkIHRvIGEgbmV3XG5kaWN0aW9uYXJ5IHJlY2VpdmluZyBhbnkgZXhjZXNzIGtleXdvcmQgYXJndW1lbnRzLCBkZWZhdWx0aW5nIHRvIGEgbmV3XG5lbXB0eSBkaWN0aW9uYXJ5LiBQYXJhbWV0ZXJzIGFmdGVyICIiKiIiIG9yICIiKmlkZW50aWZpZXIiIiBhcmVcbmtleXdvcmQtb25seSBwYXJhbWV0ZXJzIGFuZCBtYXkgb25seSBiZSBwYXNzZWQgdXNlZCBrZXl3b3JkIGFyZ3VtZW50cy5cblxuUGFyYW1ldGVycyBtYXkgaGF2ZSBhbm5vdGF0aW9ucyBvZiB0aGUgZm9ybSAiIjogZXhwcmVzc2lvbiIiIGZvbGxvd2luZ1xudGhlIHBhcmFtZXRlciBuYW1lLiAgQW55IHBhcmFtZXRlciBtYXkgaGF2ZSBhbiBhbm5vdGF0aW9uIGV2ZW4gdGhvc2Vcbm9mIHRoZSBmb3JtICIqaWRlbnRpZmllciIgb3IgIioqaWRlbnRpZmllciIuICBGdW5jdGlvbnMgbWF5IGhhdmVcbiJyZXR1cm4iIGFubm90YXRpb24gb2YgdGhlIGZvcm0gIiItPiBleHByZXNzaW9uIiIgYWZ0ZXIgdGhlIHBhcmFtZXRlclxubGlzdC4gIFRoZXNlIGFubm90YXRpb25zIGNhbiBiZSBhbnkgdmFsaWQgUHl0aG9uIGV4cHJlc3Npb24gYW5kIGFyZVxuZXZhbHVhdGVkIHdoZW4gdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24gaXMgZXhlY3V0ZWQuICBBbm5vdGF0aW9ucyBtYXlcbmJlIGV2YWx1YXRlZCBpbiBhIGRpZmZlcmVudCBvcmRlciB0aGFuIHRoZXkgYXBwZWFyIGluIHRoZSBzb3VyY2UgY29kZS5cblRoZSBwcmVzZW5jZSBvZiBhbm5vdGF0aW9ucyBkb2VzIG5vdCBjaGFuZ2UgdGhlIHNlbWFudGljcyBvZiBhXG5mdW5jdGlvbi4gIFRoZSBhbm5vdGF0aW9uIHZhbHVlcyBhcmUgYXZhaWxhYmxlIGFzIHZhbHVlcyBvZiBhXG5kaWN0aW9uYXJ5IGtleWVkIGJ5IHRoZSBwYXJhbWV0ZXJzXCcgbmFtZXMgaW4gdGhlICJfX2Fubm90YXRpb25zX18iXG5hdHRyaWJ1dGUgb2YgdGhlIGZ1bmN0aW9uIG9iamVjdC5cblxuSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBjcmVhdGUgYW5vbnltb3VzIGZ1bmN0aW9ucyAoZnVuY3Rpb25zIG5vdCBib3VuZFxudG8gYSBuYW1lKSwgZm9yIGltbWVkaWF0ZSB1c2UgaW4gZXhwcmVzc2lvbnMuICBUaGlzIHVzZXMgbGFtYmRhXG5leHByZXNzaW9ucywgZGVzY3JpYmVkIGluIHNlY3Rpb24gKkxhbWJkYXMqLiAgTm90ZSB0aGF0IHRoZSBsYW1iZGFcbmV4cHJlc3Npb24gaXMgbWVyZWx5IGEgc2hvcnRoYW5kIGZvciBhIHNpbXBsaWZpZWQgZnVuY3Rpb24gZGVmaW5pdGlvbjtcbmEgZnVuY3Rpb24gZGVmaW5lZCBpbiBhICIiZGVmIiIgc3RhdGVtZW50IGNhbiBiZSBwYXNzZWQgYXJvdW5kIG9yXG5hc3NpZ25lZCB0byBhbm90aGVyIG5hbWUganVzdCBsaWtlIGEgZnVuY3Rpb24gZGVmaW5lZCBieSBhIGxhbWJkYVxuZXhwcmVzc2lvbi4gIFRoZSAiImRlZiIiIGZvcm0gaXMgYWN0dWFsbHkgbW9yZSBwb3dlcmZ1bCBzaW5jZSBpdFxuYWxsb3dzIHRoZSBleGVjdXRpb24gb2YgbXVsdGlwbGUgc3RhdGVtZW50cyBhbmQgYW5ub3RhdGlvbnMuXG5cbioqUHJvZ3JhbW1lclwncyBub3RlOioqIEZ1bmN0aW9ucyBhcmUgZmlyc3QtY2xhc3Mgb2JqZWN0cy4gIEEgIiJkZWYiIlxuc3RhdGVtZW50IGV4ZWN1dGVkIGluc2lkZSBhIGZ1bmN0aW9uIGRlZmluaXRpb24gZGVmaW5lcyBhIGxvY2FsXG5mdW5jdGlvbiB0aGF0IGNhbiBiZSByZXR1cm5lZCBvciBwYXNzZWQgYXJvdW5kLiAgRnJlZSB2YXJpYWJsZXMgdXNlZFxuaW4gdGhlIG5lc3RlZCBmdW5jdGlvbiBjYW4gYWNjZXNzIHRoZSBsb2NhbCB2YXJpYWJsZXMgb2YgdGhlIGZ1bmN0aW9uXG5jb250YWluaW5nIHRoZSBkZWYuICBTZWUgc2VjdGlvbiAqTmFtaW5nIGFuZCBiaW5kaW5nKiBmb3IgZGV0YWlscy5cblxuU2VlIGFsc286ICoqUEVQIDMxMDcqKiAtIEZ1bmN0aW9uIEFubm90YXRpb25zXG5cbiAgICAgVGhlIG9yaWdpbmFsIHNwZWNpZmljYXRpb24gZm9yIGZ1bmN0aW9uIGFubm90YXRpb25zLlxuJywKLSAnZ2xvYmFsJzogJ1xuVGhlICJnbG9iYWwiIHN0YXRlbWVudFxuKioqKioqKioqKioqKioqKioqKioqKlxuXG4gICBnbG9iYWxfc3RtdCA6Oj0gImdsb2JhbCIgaWRlbnRpZmllciAoIiwiIGlkZW50aWZpZXIpKlxuXG5UaGUgImdsb2JhbCIgc3RhdGVtZW50IGlzIGEgZGVjbGFyYXRpb24gd2hpY2ggaG9sZHMgZm9yIHRoZSBlbnRpcmVcbmN1cnJlbnQgY29kZSBibG9jay4gIEl0IG1lYW5zIHRoYXQgdGhlIGxpc3RlZCBpZGVudGlmaWVycyBhcmUgdG8gYmVcbmludGVycHJldGVkIGFzIGdsb2JhbHMuICBJdCB3b3VsZCBiZSBpbXBvc3NpYmxlIHRvIGFzc2lnbiB0byBhIGdsb2JhbFxudmFyaWFibGUgd2l0aG91dCAiZ2xvYmFsIiwgYWx0aG91Z2ggZnJlZSB2YXJpYWJsZXMgbWF5IHJlZmVyIHRvXG5nbG9iYWxzIHdpdGhvdXQgYmVpbmcgZGVjbGFyZWQgZ2xvYmFsLlxuXG5OYW1lcyBsaXN0ZWQgaW4gYSAiZ2xvYmFsIiBzdGF0ZW1lbnQgbXVzdCBub3QgYmUgdXNlZCBpbiB0aGUgc2FtZSBjb2RlXG5ibG9jayB0ZXh0dWFsbHkgcHJlY2VkaW5nIHRoYXQgImdsb2JhbCIgc3RhdGVtZW50LlxuXG5OYW1lcyBsaXN0ZWQgaW4gYSAiZ2xvYmFsIiBzdGF0ZW1lbnQgbXVzdCBub3QgYmUgZGVmaW5lZCBhcyBmb3JtYWxcbnBhcmFtZXRlcnMgb3IgaW4gYSAiZm9yIiBsb29wIGNvbnRyb2wgdGFyZ2V0LCAiY2xhc3MiIGRlZmluaXRpb24sXG5mdW5jdGlvbiBkZWZpbml0aW9uLCBvciAiaW1wb3J0IiBzdGF0ZW1lbnQuXG5cbioqQ1B5dGhvbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWw6KiogVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gZG9lcyBub3RcbmVuZm9yY2UgdGhlIGxhdHRlciB0d28gcmVzdHJpY3Rpb25zLCBidXQgcHJvZ3JhbXMgc2hvdWxkIG5vdCBhYnVzZVxudGhpcyBmcmVlZG9tLCBhcyBmdXR1cmUgaW1wbGVtZW50YXRpb25zIG1heSBlbmZvcmNlIHRoZW0gb3Igc2lsZW50bHlcbmNoYW5nZSB0aGUgbWVhbmluZyBvZiB0aGUgcHJvZ3JhbS5cblxuKipQcm9ncmFtbWVyXCdzIG5vdGU6KiogdGhlICJnbG9iYWwiIGlzIGEgZGlyZWN0aXZlIHRvIHRoZSBwYXJzZXIuICBJdFxuYXBwbGllcyBvbmx5IHRvIGNvZGUgcGFyc2VkIGF0IHRoZSBzYW1lIHRpbWUgYXMgdGhlICJnbG9iYWwiXG5zdGF0ZW1lbnQuIEluIHBhcnRpY3VsYXIsIGEgImdsb2JhbCIgc3RhdGVtZW50IGNvbnRhaW5lZCBpbiBhIHN0cmluZ1xub3IgY29kZSBvYmplY3Qgc3VwcGxpZWQgdG8gdGhlIGJ1aWx0LWluICJleGVjKCkiIGZ1bmN0aW9uIGRvZXMgbm90XG5hZmZlY3QgdGhlIGNvZGUgYmxvY2sgKmNvbnRhaW5pbmcqIHRoZSBmdW5jdGlvbiBjYWxsLCBhbmQgY29kZVxuY29udGFpbmVkIGluIHN1Y2ggYSBzdHJpbmcgaXMgdW5hZmZlY3RlZCBieSAiZ2xvYmFsIiBzdGF0ZW1lbnRzIGluIHRoZVxuY29kZSBjb250YWluaW5nIHRoZSBmdW5jdGlvbiBjYWxsLiAgVGhlIHNhbWUgYXBwbGllcyB0byB0aGUgImV2YWwoKSJcbmFuZCAiY29tcGlsZSgpIiBmdW5jdGlvbnMuXG4nLAotICdpZC1jbGFzc2VzJzogJ1xuUmVzZXJ2ZWQgY2xhc3NlcyBvZiBpZGVudGlmaWVyc1xuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG5DZXJ0YWluIGNsYXNzZXMgb2YgaWRlbnRpZmllcnMgKGJlc2lkZXMga2V5d29yZHMpIGhhdmUgc3BlY2lhbFxubWVhbmluZ3MuICBUaGVzZSBjbGFzc2VzIGFyZSBpZGVudGlmaWVkIGJ5IHRoZSBwYXR0ZXJucyBvZiBsZWFkaW5nIGFuZFxudHJhaWxpbmcgdW5kZXJzY29yZSBjaGFyYWN0ZXJzOlxuXG4iXyoiXG4gICBOb3QgaW1wb3J0ZWQgYnkgImZyb20gbW9kdWxlIGltcG9ydCAqIi4gIFRoZSBzcGVjaWFsIGlkZW50aWZpZXIgIl8iXG4gICBpcyB1c2VkIGluIHRoZSBpbnRlcmFjdGl2ZSBpbnRlcnByZXRlciB0byBzdG9yZSB0aGUgcmVzdWx0IG9mIHRoZVxuICAgbGFzdCBldmFsdWF0aW9uOyBpdCBpcyBzdG9yZWQgaW4gdGhlICJidWlsdGlucyIgbW9kdWxlLiAgV2hlbiBub3RcbiAgIGluIGludGVyYWN0aXZlIG1vZGUsICJfIiBoYXMgbm8gc3BlY2lhbCBtZWFuaW5nIGFuZCBpcyBub3QgZGVmaW5lZC5cbiAgIFNlZSBzZWN0aW9uICpUaGUgaW1wb3J0IHN0YXRlbWVudCouXG5cbiAgIE5vdGU6IFRoZSBuYW1lICJfIiBpcyBvZnRlbiB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGhcbiAgICAgaW50ZXJuYXRpb25hbGl6YXRpb247IHJlZmVyIHRvIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGVcbiAgICAgImdldHRleHQiIG1vZHVsZSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGlzIGNvbnZlbnRpb24uXG5cbiJfXypfXyJcbiAgIFN5c3RlbS1kZWZpbmVkIG5hbWVzLiBUaGVzZSBuYW1lcyBhcmUgZGVmaW5lZCBieSB0aGUgaW50ZXJwcmV0ZXJcbiAgIGFuZCBpdHMgaW1wbGVtZW50YXRpb24gKGluY2x1ZGluZyB0aGUgc3RhbmRhcmQgbGlicmFyeSkuICBDdXJyZW50XG4gICBzeXN0ZW0gbmFtZXMgYXJlIGRpc2N1c3NlZCBpbiB0aGUgKlNwZWNpYWwgbWV0aG9kIG5hbWVzKiBzZWN0aW9uXG4gICBhbmQgZWxzZXdoZXJlLiAgTW9yZSB3aWxsIGxpa2VseSBiZSBkZWZpbmVkIGluIGZ1dHVyZSB2ZXJzaW9ucyBvZlxuICAgUHl0aG9uLiAgKkFueSogdXNlIG9mICJfXypfXyIgbmFtZXMsIGluIGFueSBjb250ZXh0LCB0aGF0IGRvZXMgbm90XG4gICBmb2xsb3cgZXhwbGljaXRseSBkb2N1bWVudGVkIHVzZSwgaXMgc3ViamVjdCB0byBicmVha2FnZSB3aXRob3V0XG4gICB3YXJuaW5nLlxuXG4iX18qIlxuICAgQ2xhc3MtcHJpdmF0ZSBuYW1lcy4gIE5hbWVzIGluIHRoaXMgY2F0ZWdvcnksIHdoZW4gdXNlZCB3aXRoaW4gdGhlXG4gICBjb250ZXh0IG9mIGEgY2xhc3MgZGVmaW5pdGlvbiwgYXJlIHJlLXdyaXR0ZW4gdG8gdXNlIGEgbWFuZ2xlZCBmb3JtXG4gICB0byBoZWxwIGF2b2lkIG5hbWUgY2xhc2hlcyBiZXR3ZWVuICJwcml2YXRlIiBhdHRyaWJ1dGVzIG9mIGJhc2UgYW5kXG4gICBkZXJpdmVkIGNsYXNzZXMuIFNlZSBzZWN0aW9uICpJZGVudGlmaWVycyAoTmFtZXMpKi5cbicsCi0gJ2lkZW50aWZpZXJzJzogJ1xuSWRlbnRpZmllcnMgYW5kIGtleXdvcmRzXG4qKioqKioqKioqKioqKioqKioqKioqKipcblxuSWRlbnRpZmllcnMgKGFsc28gcmVmZXJyZWQgdG8gYXMgKm5hbWVzKikgYXJlIGRlc2NyaWJlZCBieSB0aGVcbmZvbGxvd2luZyBsZXhpY2FsIGRlZmluaXRpb25zLlxuXG5UaGUgc3ludGF4IG9mIGlkZW50aWZpZXJzIGluIFB5dGhvbiBpcyBiYXNlZCBvbiB0aGUgVW5pY29kZSBzdGFuZGFyZFxuYW5uZXggVUFYLTMxLCB3aXRoIGVsYWJvcmF0aW9uIGFuZCBjaGFuZ2VzIGFzIGRlZmluZWQgYmVsb3c7IHNlZSBhbHNvXG4qKlBFUCAzMTMxKiogZm9yIGZ1cnRoZXIgZGV0YWlscy5cblxuV2l0aGluIHRoZSBBU0NJSSByYW5nZSAoVSswMDAxLi5VKzAwN0YpLCB0aGUgdmFsaWQgY2hhcmFjdGVycyBmb3JcbmlkZW50aWZpZXJzIGFyZSB0aGUgc2FtZSBhcyBpbiBQeXRob24gMi54OiB0aGUgdXBwZXJjYXNlIGFuZCBsb3dlcmNhc2VcbmxldHRlcnMgIkEiIHRocm91Z2ggIloiLCB0aGUgdW5kZXJzY29yZSAiXyIgYW5kLCBleGNlcHQgZm9yIHRoZSBmaXJzdFxuY2hhcmFjdGVyLCB0aGUgZGlnaXRzICIwIiB0aHJvdWdoICI5Ii5cblxuUHl0aG9uIDMuMCBpbnRyb2R1Y2VzIGFkZGl0aW9uYWwgY2hhcmFjdGVycyBmcm9tIG91dHNpZGUgdGhlIEFTQ0lJXG5yYW5nZSAoc2VlICoqUEVQIDMxMzEqKikuICBGb3IgdGhlc2UgY2hhcmFjdGVycywgdGhlIGNsYXNzaWZpY2F0aW9uXG51c2VzIHRoZSB2ZXJzaW9uIG9mIHRoZSBVbmljb2RlIENoYXJhY3RlciBEYXRhYmFzZSBhcyBpbmNsdWRlZCBpbiB0aGVcbiJ1bmljb2RlZGF0YSIgbW9kdWxlLlxuXG5JZGVudGlmaWVycyBhcmUgdW5saW1pdGVkIGluIGxlbmd0aC4gIENhc2UgaXMgc2lnbmlmaWNhbnQuXG5cbiAgIGlkZW50aWZpZXIgICA6Oj0geGlkX3N0YXJ0IHhpZF9jb250aW51ZSpcbiAgIGlkX3N0YXJ0ICAgICA6Oj0gPGFsbCBjaGFyYWN0ZXJzIGluIGdlbmVyYWwgY2F0ZWdvcmllcyBMdSwgTGwsIEx0LCBMbSwgTG8sIE5sLCB0aGUgdW5kZXJzY29yZSwgYW5kIGNoYXJhY3RlcnMgd2l0aCB0aGUgT3RoZXJfSURfU3RhcnQgcHJvcGVydHk+XG4gICBpZF9jb250aW51ZSAgOjo9IDxhbGwgY2hhcmFjdGVycyBpbiBpZF9zdGFydCwgcGx1cyBjaGFyYWN0ZXJzIGluIHRoZSBjYXRlZ29yaWVzIE1uLCBNYywgTmQsIFBjIGFuZCBvdGhlcnMgd2l0aCB0aGUgT3RoZXJfSURfQ29udGludWUgcHJvcGVydHk+XG4gICB4aWRfc3RhcnQgICAgOjo9IDxhbGwgY2hhcmFjdGVycyBpbiBpZF9zdGFydCB3aG9zZSBORktDIG5vcm1hbGl6YXRpb24gaXMgaW4gImlkX3N0YXJ0IHhpZF9jb250aW51ZSoiPlxuICAgeGlkX2NvbnRpbnVlIDo6PSA8YWxsIGNoYXJhY3RlcnMgaW4gaWRfY29udGludWUgd2hvc2UgTkZLQyBub3JtYWxpemF0aW9uIGlzIGluICJpZF9jb250aW51ZSoiPlxuXG5UaGUgVW5pY29kZSBjYXRlZ29yeSBjb2RlcyBtZW50aW9uZWQgYWJvdmUgc3RhbmQgZm9yOlxuXG4qICpMdSogLSB1cHBlcmNhc2UgbGV0dGVyc1xuXG4qICpMbCogLSBsb3dlcmNhc2UgbGV0dGVyc1xuXG4qICpMdCogLSB0aXRsZWNhc2UgbGV0dGVyc1xuXG4qICpMbSogLSBtb2RpZmllciBsZXR0ZXJzXG5cbiogKkxvKiAtIG90aGVyIGxldHRlcnNcblxuKiAqTmwqIC0gbGV0dGVyIG51bWJlcnNcblxuKiAqTW4qIC0gbm9uc3BhY2luZyBtYXJrc1xuXG4qICpNYyogLSBzcGFjaW5nIGNvbWJpbmluZyBtYXJrc1xuXG4qICpOZCogLSBkZWNpbWFsIG51bWJlcnNcblxuKiAqUGMqIC0gY29ubmVjdG9yIHB1bmN0dWF0aW9uc1xuXG4qICpPdGhlcl9JRF9TdGFydCogLSBleHBsaWNpdCBsaXN0IG9mIGNoYXJhY3RlcnMgaW4gUHJvcExpc3QudHh0IHRvXG4gIHN1cHBvcnQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcblxuKiAqT3RoZXJfSURfQ29udGludWUqIC0gbGlrZXdpc2VcblxuQWxsIGlkZW50aWZpZXJzIGFyZSBjb252ZXJ0ZWQgaW50byB0aGUgbm9ybWFsIGZvcm0gTkZLQyB3aGlsZSBwYXJzaW5nO1xuY29tcGFyaXNvbiBvZiBpZGVudGlmaWVycyBpcyBiYXNlZCBvbiBORktDLlxuXG5BIG5vbi1ub3JtYXRpdmUgSFRNTCBmaWxlIGxpc3RpbmcgYWxsIHZhbGlkIGlkZW50aWZpZXIgY2hhcmFjdGVycyBmb3JcblVuaWNvZGUgNC4xIGNhbiBiZSBmb3VuZCBhdCBodHRwOi8vd3d3LmRjbC5ocGkudW5pLVxucG90c2RhbS5kZS9ob21lL2xvZXdpcy90YWJsZS0zMTMxLmh0bWwuXG5cblxuS2V5d29yZHNcbj09PT09PT09XG5cblRoZSBmb2xsb3dpbmcgaWRlbnRpZmllcnMgYXJlIHVzZWQgYXMgcmVzZXJ2ZWQgd29yZHMsIG9yICprZXl3b3Jkcyogb2ZcbnRoZSBsYW5ndWFnZSwgYW5kIGNhbm5vdCBiZSB1c2VkIGFzIG9yZGluYXJ5IGlkZW50aWZpZXJzLiAgVGhleSBtdXN0XG5iZSBzcGVsbGVkIGV4YWN0bHkgYXMgd3JpdHRlbiBoZXJlOlxuXG4gICBGYWxzZSAgICAgIGNsYXNzICAgICAgZmluYWxseSAgICBpcyAgICAgICAgIHJldHVyblxuICAgTm9uZSAgICAgICBjb250aW51ZSAgIGZvciAgICAgICAgbGFtYmRhICAgICB0cnlcbiAgIFRydWUgICAgICAgZGVmICAgICAgICBmcm9tICAgICAgIG5vbmxvY2FsICAgd2hpbGVcbiAgIGFuZCAgICAgICAgZGVsICAgICAgICBnbG9iYWwgICAgIG5vdCAgICAgICAgd2l0aFxuICAgYXMgICAgICAgICBlbGlmICAgICAgIGlmICAgICAgICAgb3IgICAgICAgICB5aWVsZFxuICAgYXNzZXJ0ICAgICBlbHNlICAgICAgIGltcG9ydCAgICAgcGFzc1xuICAgYnJlYWsgICAgICBleGNlcHQgICAgIGluICAgICAgICAgcmFpc2VcblxuXG5SZXNlcnZlZCBjbGFzc2VzIG9mIGlkZW50aWZpZXJzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbkNlcnRhaW4gY2xhc3NlcyBvZiBpZGVudGlmaWVycyAoYmVzaWRlcyBrZXl3b3JkcykgaGF2ZSBzcGVjaWFsXG5tZWFuaW5ncy4gIFRoZXNlIGNsYXNzZXMgYXJlIGlkZW50aWZpZWQgYnkgdGhlIHBhdHRlcm5zIG9mIGxlYWRpbmcgYW5kXG50cmFpbGluZyB1bmRlcnNjb3JlIGNoYXJhY3RlcnM6XG5cbiJfKiJcbiAgIE5vdCBpbXBvcnRlZCBieSAiZnJvbSBtb2R1bGUgaW1wb3J0ICoiLiAgVGhlIHNwZWNpYWwgaWRlbnRpZmllciAiXyJcbiAgIGlzIHVzZWQgaW4gdGhlIGludGVyYWN0aXZlIGludGVycHJldGVyIHRvIHN0b3JlIHRoZSByZXN1bHQgb2YgdGhlXG4gICBsYXN0IGV2YWx1YXRpb247IGl0IGlzIHN0b3JlZCBpbiB0aGUgImJ1aWx0aW5zIiBtb2R1bGUuICBXaGVuIG5vdFxuICAgaW4gaW50ZXJhY3RpdmUgbW9kZSwgIl8iIGhhcyBubyBzcGVjaWFsIG1lYW5pbmcgYW5kIGlzIG5vdCBkZWZpbmVkLlxuICAgU2VlIHNlY3Rpb24gKlRoZSBpbXBvcnQgc3RhdGVtZW50Ki5cblxuICAgTm90ZTogVGhlIG5hbWUgIl8iIGlzIG9mdGVuIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aFxuICAgICBpbnRlcm5hdGlvbmFsaXphdGlvbjsgcmVmZXIgdG8gdGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZVxuICAgICAiZ2V0dGV4dCIgbW9kdWxlIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoaXMgY29udmVudGlvbi5cblxuIl9fKl9fIlxuICAgU3lzdGVtLWRlZmluZWQgbmFtZXMuIFRoZXNlIG5hbWVzIGFyZSBkZWZpbmVkIGJ5IHRoZSBpbnRlcnByZXRlclxuICAgYW5kIGl0cyBpbXBsZW1lbnRhdGlvbiAoaW5jbHVkaW5nIHRoZSBzdGFuZGFyZCBsaWJyYXJ5KS4gIEN1cnJlbnRcbiAgIHN5c3RlbSBuYW1lcyBhcmUgZGlzY3Vzc2VkIGluIHRoZSAqU3BlY2lhbCBtZXRob2QgbmFtZXMqIHNlY3Rpb25cbiAgIGFuZCBlbHNld2hlcmUuICBNb3JlIHdpbGwgbGlrZWx5IGJlIGRlZmluZWQgaW4gZnV0dXJlIHZlcnNpb25zIG9mXG4gICBQeXRob24uICAqQW55KiB1c2Ugb2YgIl9fKl9fIiBuYW1lcywgaW4gYW55IGNvbnRleHQsIHRoYXQgZG9lcyBub3RcbiAgIGZvbGxvdyBleHBsaWNpdGx5IGRvY3VtZW50ZWQgdXNlLCBpcyBzdWJqZWN0IHRvIGJyZWFrYWdlIHdpdGhvdXRcbiAgIHdhcm5pbmcuXG5cbiJfXyoiXG4gICBDbGFzcy1wcml2YXRlIG5hbWVzLiAgTmFtZXMgaW4gdGhpcyBjYXRlZ29yeSwgd2hlbiB1c2VkIHdpdGhpbiB0aGVcbiAgIGNvbnRleHQgb2YgYSBjbGFzcyBkZWZpbml0aW9uLCBhcmUgcmUtd3JpdHRlbiB0byB1c2UgYSBtYW5nbGVkIGZvcm1cbiAgIHRvIGhlbHAgYXZvaWQgbmFtZSBjbGFzaGVzIGJldHdlZW4gInByaXZhdGUiIGF0dHJpYnV0ZXMgb2YgYmFzZSBhbmRcbiAgIGRlcml2ZWQgY2xhc3Nlcy4gU2VlIHNlY3Rpb24gKklkZW50aWZpZXJzIChOYW1lcykqLlxuJywKLSAnaWYnOiAnXG5UaGUgImlmIiBzdGF0ZW1lbnRcbioqKioqKioqKioqKioqKioqKlxuXG5UaGUgImlmIiBzdGF0ZW1lbnQgaXMgdXNlZCBmb3IgY29uZGl0aW9uYWwgZXhlY3V0aW9uOlxuXG4gICBpZl9zdG10IDo6PSAiaWYiIGV4cHJlc3Npb24gIjoiIHN1aXRlXG4gICAgICAgICAgICAgICAoICJlbGlmIiBleHByZXNzaW9uICI6IiBzdWl0ZSApKlxuICAgICAgICAgICAgICAgWyJlbHNlIiAiOiIgc3VpdGVdXG5cbkl0IHNlbGVjdHMgZXhhY3RseSBvbmUgb2YgdGhlIHN1aXRlcyBieSBldmFsdWF0aW5nIHRoZSBleHByZXNzaW9ucyBvbmVcbmJ5IG9uZSB1bnRpbCBvbmUgaXMgZm91bmQgdG8gYmUgdHJ1ZSAoc2VlIHNlY3Rpb24gKkJvb2xlYW4gb3BlcmF0aW9ucypcbmZvciB0aGUgZGVmaW5pdGlvbiBvZiB0cnVlIGFuZCBmYWxzZSk7IHRoZW4gdGhhdCBzdWl0ZSBpcyBleGVjdXRlZFxuKGFuZCBubyBvdGhlciBwYXJ0IG9mIHRoZSAiaWYiIHN0YXRlbWVudCBpcyBleGVjdXRlZCBvciBldmFsdWF0ZWQpLlxuSWYgYWxsIGV4cHJlc3Npb25zIGFyZSBmYWxzZSwgdGhlIHN1aXRlIG9mIHRoZSAiZWxzZSIgY2xhdXNlLCBpZlxucHJlc2VudCwgaXMgZXhlY3V0ZWQuXG4nLAotICdpbWFnaW5hcnknOiAnXG5JbWFnaW5hcnkgbGl0ZXJhbHNcbioqKioqKioqKioqKioqKioqKlxuXG5JbWFnaW5hcnkgbGl0ZXJhbHMgYXJlIGRlc2NyaWJlZCBieSB0aGUgZm9sbG93aW5nIGxleGljYWwgZGVmaW5pdGlvbnM6XG5cbiAgIGltYWdudW1iZXIgOjo9IChmbG9hdG51bWJlciB8IGludHBhcnQpICgiaiIgfCAiSiIpXG5cbkFuIGltYWdpbmFyeSBsaXRlcmFsIHlpZWxkcyBhIGNvbXBsZXggbnVtYmVyIHdpdGggYSByZWFsIHBhcnQgb2YgMC4wLlxuQ29tcGxleCBudW1iZXJzIGFyZSByZXByZXNlbnRlZCBhcyBhIHBhaXIgb2YgZmxvYXRpbmcgcG9pbnQgbnVtYmVyc1xuYW5kIGhhdmUgdGhlIHNhbWUgcmVzdHJpY3Rpb25zIG9uIHRoZWlyIHJhbmdlLiAgVG8gY3JlYXRlIGEgY29tcGxleFxubnVtYmVyIHdpdGggYSBub256ZXJvIHJlYWwgcGFydCwgYWRkIGEgZmxvYXRpbmcgcG9pbnQgbnVtYmVyIHRvIGl0LFxuZS5nLiwgIigzKzRqKSIuICBTb21lIGV4YW1wbGVzIG9mIGltYWdpbmFyeSBsaXRlcmFsczpcblxuICAgMy4xNGogICAxMC5qICAgIDEwaiAgICAgLjAwMWogICAxZTEwMGogIDMuMTRlLTEwalxuJywKLSAnaW1wb3J0JzogJ1xuVGhlICJpbXBvcnQiIHN0YXRlbWVudFxuKioqKioqKioqKioqKioqKioqKioqKlxuXG4gICBpbXBvcnRfc3RtdCAgICAgOjo9ICJpbXBvcnQiIG1vZHVsZSBbImFzIiBuYW1lXSAoICIsIiBtb2R1bGUgWyJhcyIgbmFtZV0gKSpcbiAgICAgICAgICAgICAgICAgICB8ICJmcm9tIiByZWxhdGl2ZV9tb2R1bGUgImltcG9ydCIgaWRlbnRpZmllciBbImFzIiBuYW1lXVxuICAgICAgICAgICAgICAgICAgICggIiwiIGlkZW50aWZpZXIgWyJhcyIgbmFtZV0gKSpcbiAgICAgICAgICAgICAgICAgICB8ICJmcm9tIiByZWxhdGl2ZV9tb2R1bGUgImltcG9ydCIgIigiIGlkZW50aWZpZXIgWyJhcyIgbmFtZV1cbiAgICAgICAgICAgICAgICAgICAoICIsIiBpZGVudGlmaWVyIFsiYXMiIG5hbWVdICkqIFsiLCJdICIpIlxuICAgICAgICAgICAgICAgICAgIHwgImZyb20iIG1vZHVsZSAiaW1wb3J0IiAiKiJcbiAgIG1vZHVsZSAgICAgICAgICA6Oj0gKGlkZW50aWZpZXIgIi4iKSogaWRlbnRpZmllclxuICAgcmVsYXRpdmVfbW9kdWxlIDo6PSAiLiIqIG1vZHVsZSB8ICIuIitcbiAgIG5hbWUgICAgICAgICAgICA6Oj0gaWRlbnRpZmllclxuXG5UaGUgYmFzaWMgaW1wb3J0IHN0YXRlbWVudCAobm8gImZyb20iIGNsYXVzZSkgaXMgZXhlY3V0ZWQgaW4gdHdvXG5zdGVwczpcblxuMS4gZmluZCBhIG1vZHVsZSwgbG9hZGluZyBhbmQgaW5pdGlhbGl6aW5nIGl0IGlmIG5lY2Vzc2FyeVxuXG4yLiBkZWZpbmUgYSBuYW1lIG9yIG5hbWVzIGluIHRoZSBsb2NhbCBuYW1lc3BhY2UgZm9yIHRoZSBzY29wZVxuICAgd2hlcmUgdGhlICJpbXBvcnQiIHN0YXRlbWVudCBvY2N1cnMuXG5cbldoZW4gdGhlIHN0YXRlbWVudCBjb250YWlucyBtdWx0aXBsZSBjbGF1c2VzIChzZXBhcmF0ZWQgYnkgY29tbWFzKSB0aGVcbnR3byBzdGVwcyBhcmUgY2FycmllZCBvdXQgc2VwYXJhdGVseSBmb3IgZWFjaCBjbGF1c2UsIGp1c3QgYXMgdGhvdWdoXG50aGUgY2xhdXNlcyBoYWQgYmVlbiBzZXBhcmF0ZWQgb3V0IGludG8gaW5kaXZpZGl1YWwgaW1wb3J0IHN0YXRlbWVudHMuXG5cblRoZSBkZXRhaWxzIG9mIHRoZSBmaXJzdCBzdGVwLCBmaW5kaW5nIGFuZCBsb2FkaW5nIG1vZHVsZXMgaXNcbmRlc2NyaWJlZCBpbiBncmVhdGVyIGRldGFpbCBpbiB0aGUgc2VjdGlvbiBvbiB0aGUgKmltcG9ydCBzeXN0ZW0qLFxud2hpY2ggYWxzbyBkZXNjcmliZXMgdGhlIHZhcmlvdXMgdHlwZXMgb2YgcGFja2FnZXMgYW5kIG1vZHVsZXMgdGhhdFxuY2FuIGJlIGltcG9ydGVkLCBhcyB3ZWxsIGFzIGFsbCB0aGUgaG9va3MgdGhhdCBjYW4gYmUgdXNlZCB0b1xuY3VzdG9taXplIHRoZSBpbXBvcnQgc3lzdGVtLiBOb3RlIHRoYXQgZmFpbHVyZXMgaW4gdGhpcyBzdGVwIG1heVxuaW5kaWNhdGUgZWl0aGVyIHRoYXQgdGhlIG1vZHVsZSBjb3VsZCBub3QgYmUgbG9jYXRlZCwgKm9yKiB0aGF0IGFuXG5lcnJvciBvY2N1cnJlZCB3aGlsZSBpbml0aWFsaXppbmcgdGhlIG1vZHVsZSwgd2hpY2ggaW5jbHVkZXMgZXhlY3V0aW9uXG5vZiB0aGUgbW9kdWxlXCdzIGNvZGUuXG5cbklmIHRoZSByZXF1ZXN0ZWQgbW9kdWxlIGlzIHJldHJpZXZlZCBzdWNjZXNzZnVsbHksIGl0IHdpbGwgYmUgbWFkZVxuYXZhaWxhYmxlIGluIHRoZSBsb2NhbCBuYW1lc3BhY2UgaW4gb25lIG9mIHRocmVlIHdheXM6XG5cbiogSWYgdGhlIG1vZHVsZSBuYW1lIGlzIGZvbGxvd2VkIGJ5ICJhcyIsIHRoZW4gdGhlIG5hbWUgZm9sbG93aW5nXG4gICJhcyIgaXMgYm91bmQgZGlyZWN0bHkgdG8gdGhlIGltcG9ydGVkIG1vZHVsZS5cblxuKiBJZiBubyBvdGhlciBuYW1lIGlzIHNwZWNpZmllZCwgYW5kIHRoZSBtb2R1bGUgYmVpbmcgaW1wb3J0ZWQgaXMgYVxuICB0b3AgbGV2ZWwgbW9kdWxlLCB0aGUgbW9kdWxlXCdzIG5hbWUgaXMgYm91bmQgaW4gdGhlIGxvY2FsIG5hbWVzcGFjZVxuICBhcyBhIHJlZmVyZW5jZSB0byB0aGUgaW1wb3J0ZWQgbW9kdWxlXG5cbiogSWYgdGhlIG1vZHVsZSBiZWluZyBpbXBvcnRlZCBpcyAqbm90KiBhIHRvcCBsZXZlbCBtb2R1bGUsIHRoZW4gdGhlXG4gIG5hbWUgb2YgdGhlIHRvcCBsZXZlbCBwYWNrYWdlIHRoYXQgY29udGFpbnMgdGhlIG1vZHVsZSBpcyBib3VuZCBpblxuICB0aGUgbG9jYWwgbmFtZXNwYWNlIGFzIGEgcmVmZXJlbmNlIHRvIHRoZSB0b3AgbGV2ZWwgcGFja2FnZS4gVGhlXG4gIGltcG9ydGVkIG1vZHVsZSBtdXN0IGJlIGFjY2Vzc2VkIHVzaW5nIGl0cyBmdWxsIHF1YWxpZmllZCBuYW1lXG4gIHJhdGhlciB0aGFuIGRpcmVjdGx5XG5cblRoZSAiZnJvbSIgZm9ybSB1c2VzIGEgc2xpZ2h0bHkgbW9yZSBjb21wbGV4IHByb2Nlc3M6XG5cbjEuIGZpbmQgdGhlIG1vZHVsZSBzcGVjaWZpZWQgaW4gdGhlICJmcm9tIiBjbGF1c2UgbG9hZGluZyBhbmRcbiAgIGluaXRpYWxpemluZyBpdCBpZiBuZWNlc3Nhcnk7XG5cbjIuIGZvciBlYWNoIG9mIHRoZSBpZGVudGlmaWVycyBzcGVjaWZpZWQgaW4gdGhlICJpbXBvcnQiIGNsYXVzZXM6XG5cbiAgIDEuIGNoZWNrIGlmIHRoZSBpbXBvcnRlZCBtb2R1bGUgaGFzIGFuIGF0dHJpYnV0ZSBieSB0aGF0IG5hbWVcblxuICAgMi4gaWYgbm90LCBhdHRlbXB0IHRvIGltcG9ydCBhIHN1Ym1vZHVsZSB3aXRoIHRoYXQgbmFtZSBhbmQgdGhlblxuICAgICAgY2hlY2sgdGhlIGltcG9ydGVkIG1vZHVsZSBhZ2FpbiBmb3IgdGhhdCBhdHRyaWJ1dGVcblxuICAgMy4gaWYgdGhlIGF0dHJpYnV0ZSBpcyBub3QgZm91bmQsICJJbXBvcnRFcnJvciIgaXMgcmFpc2VkLlxuXG4gICA0LiBvdGhlcndpc2UsIGEgcmVmZXJlbmNlIHRvIHRoYXQgdmFsdWUgaXMgYm91bmQgaW4gdGhlIGxvY2FsXG4gICAgICBuYW1lc3BhY2UsIHVzaW5nIHRoZSBuYW1lIGluIHRoZSAiYXMiIGNsYXVzZSBpZiBpdCBpcyBwcmVzZW50LFxuICAgICAgb3RoZXJ3aXNlIHVzaW5nIHRoZSBhdHRyaWJ1dGUgbmFtZVxuXG5FeGFtcGxlczpcblxuICAgaW1wb3J0IGZvbyAgICAgICAgICAgICAgICAgIyBmb28gaW1wb3J0ZWQgYW5kIGJvdW5kIGxvY2FsbHlcbiAgIGltcG9ydCBmb28uYmFyLmJheiAgICAgICAgICMgZm9vLmJhci5iYXogaW1wb3J0ZWQsIGZvbyBib3VuZCBsb2NhbGx5XG4gICBpbXBvcnQgZm9vLmJhci5iYXogYXMgZmJiICAjIGZvby5iYXIuYmF6IGltcG9ydGVkIGFuZCBib3VuZCBhcyBmYmJcbiAgIGZyb20gZm9vLmJhciBpbXBvcnQgYmF6ICAgICMgZm9vLmJhci5iYXogaW1wb3J0ZWQgYW5kIGJvdW5kIGFzIGJhelxuICAgZnJvbSBmb28gaW1wb3J0IGF0dHIgICAgICAgIyBmb28gaW1wb3J0ZWQgYW5kIGZvby5hdHRyIGJvdW5kIGFzIGF0dHJcblxuSWYgdGhlIGxpc3Qgb2YgaWRlbnRpZmllcnMgaXMgcmVwbGFjZWQgYnkgYSBzdGFyICgiXCcqXCciKSwgYWxsIHB1YmxpY1xubmFtZXMgZGVmaW5lZCBpbiB0aGUgbW9kdWxlIGFyZSBib3VuZCBpbiB0aGUgbG9jYWwgbmFtZXNwYWNlIGZvciB0aGVcbnNjb3BlIHdoZXJlIHRoZSAiaW1wb3J0IiBzdGF0ZW1lbnQgb2NjdXJzLlxuXG5UaGUgKnB1YmxpYyBuYW1lcyogZGVmaW5lZCBieSBhIG1vZHVsZSBhcmUgZGV0ZXJtaW5lZCBieSBjaGVja2luZyB0aGVcbm1vZHVsZVwncyBuYW1lc3BhY2UgZm9yIGEgdmFyaWFibGUgbmFtZWQgIl9fYWxsX18iOyBpZiBkZWZpbmVkLCBpdCBtdXN0XG5iZSBhIHNlcXVlbmNlIG9mIHN0cmluZ3Mgd2hpY2ggYXJlIG5hbWVzIGRlZmluZWQgb3IgaW1wb3J0ZWQgYnkgdGhhdFxubW9kdWxlLiAgVGhlIG5hbWVzIGdpdmVuIGluICJfX2FsbF9fIiBhcmUgYWxsIGNvbnNpZGVyZWQgcHVibGljIGFuZFxuYXJlIHJlcXVpcmVkIHRvIGV4aXN0LiAgSWYgIl9fYWxsX18iIGlzIG5vdCBkZWZpbmVkLCB0aGUgc2V0IG9mIHB1YmxpY1xubmFtZXMgaW5jbHVkZXMgYWxsIG5hbWVzIGZvdW5kIGluIHRoZSBtb2R1bGVcJ3MgbmFtZXNwYWNlIHdoaWNoIGRvIG5vdFxuYmVnaW4gd2l0aCBhbiB1bmRlcnNjb3JlIGNoYXJhY3RlciAoIlwnX1wnIikuICAiX19hbGxfXyIgc2hvdWxkIGNvbnRhaW5cbnRoZSBlbnRpcmUgcHVibGljIEFQSS4gSXQgaXMgaW50ZW5kZWQgdG8gYXZvaWQgYWNjaWRlbnRhbGx5IGV4cG9ydGluZ1xuaXRlbXMgdGhhdCBhcmUgbm90IHBhcnQgb2YgdGhlIEFQSSAoc3VjaCBhcyBsaWJyYXJ5IG1vZHVsZXMgd2hpY2ggd2VyZVxuaW1wb3J0ZWQgYW5kIHVzZWQgd2l0aGluIHRoZSBtb2R1bGUpLlxuXG5UaGUgImZyb20iIGZvcm0gd2l0aCAiKiIgbWF5IG9ubHkgb2NjdXIgaW4gYSBtb2R1bGUgc2NvcGUuICBUaGUgd2lsZFxuY2FyZCBmb3JtIG9mIGltcG9ydCAtLS0gImltcG9ydCAqIiAtLS0gaXMgb25seSBhbGxvd2VkIGF0IHRoZSBtb2R1bGVcbmxldmVsLiBBdHRlbXB0aW5nIHRvIHVzZSBpdCBpbiBjbGFzcyBvciBmdW5jdGlvbiBkZWZpbml0aW9ucyB3aWxsXG5yYWlzZSBhICJTeW50YXhFcnJvciIuXG5cbldoZW4gc3BlY2lmeWluZyB3aGF0IG1vZHVsZSB0byBpbXBvcnQgeW91IGRvIG5vdCBoYXZlIHRvIHNwZWNpZnkgdGhlXG5hYnNvbHV0ZSBuYW1lIG9mIHRoZSBtb2R1bGUuIFdoZW4gYSBtb2R1bGUgb3IgcGFja2FnZSBpcyBjb250YWluZWRcbndpdGhpbiBhbm90aGVyIHBhY2thZ2UgaXQgaXMgcG9zc2libGUgdG8gbWFrZSBhIHJlbGF0aXZlIGltcG9ydCB3aXRoaW5cbnRoZSBzYW1lIHRvcCBwYWNrYWdlIHdpdGhvdXQgaGF2aW5nIHRvIG1lbnRpb24gdGhlIHBhY2thZ2UgbmFtZS4gQnlcbnVzaW5nIGxlYWRpbmcgZG90cyBpbiB0aGUgc3BlY2lmaWVkIG1vZHVsZSBvciBwYWNrYWdlIGFmdGVyICJmcm9tIiB5b3VcbmNhbiBzcGVjaWZ5IGhvdyBoaWdoIHRvIHRyYXZlcnNlIHVwIHRoZSBjdXJyZW50IHBhY2thZ2UgaGllcmFyY2h5XG53aXRob3V0IHNwZWNpZnlpbmcgZXhhY3QgbmFtZXMuIE9uZSBsZWFkaW5nIGRvdCBtZWFucyB0aGUgY3VycmVudFxucGFja2FnZSB3aGVyZSB0aGUgbW9kdWxlIG1ha2luZyB0aGUgaW1wb3J0IGV4aXN0cy4gVHdvIGRvdHMgbWVhbnMgdXBcbm9uZSBwYWNrYWdlIGxldmVsLiBUaHJlZSBkb3RzIGlzIHVwIHR3byBsZXZlbHMsIGV0Yy4gU28gaWYgeW91IGV4ZWN1dGVcbiJmcm9tIC4gaW1wb3J0IG1vZCIgZnJvbSBhIG1vZHVsZSBpbiB0aGUgInBrZyIgcGFja2FnZSB0aGVuIHlvdSB3aWxsXG5lbmQgdXAgaW1wb3J0aW5nICJwa2cubW9kIi4gSWYgeW91IGV4ZWN1dGUgImZyb20gLi5zdWJwa2cyIGltcG9ydCBtb2QiXG5mcm9tIHdpdGhpbiAicGtnLnN1YnBrZzEiIHlvdSB3aWxsIGltcG9ydCAicGtnLnN1YnBrZzIubW9kIi4gVGhlXG5zcGVjaWZpY2F0aW9uIGZvciByZWxhdGl2ZSBpbXBvcnRzIGlzIGNvbnRhaW5lZCB3aXRoaW4gKipQRVAgMzI4KiouXG5cbiJpbXBvcnRsaWIuaW1wb3J0X21vZHVsZSgpIiBpcyBwcm92aWRlZCB0byBzdXBwb3J0IGFwcGxpY2F0aW9ucyB0aGF0XG5kZXRlcm1pbmUgd2hpY2ggbW9kdWxlcyBuZWVkIHRvIGJlIGxvYWRlZCBkeW5hbWljYWxseS5cblxuXG5GdXR1cmUgc3RhdGVtZW50c1xuPT09PT09PT09PT09PT09PT1cblxuQSAqZnV0dXJlIHN0YXRlbWVudCogaXMgYSBkaXJlY3RpdmUgdG8gdGhlIGNvbXBpbGVyIHRoYXQgYSBwYXJ0aWN1bGFyXG5tb2R1bGUgc2hvdWxkIGJlIGNvbXBpbGVkIHVzaW5nIHN5bnRheCBvciBzZW1hbnRpY3MgdGhhdCB3aWxsIGJlXG5hdmFpbGFibGUgaW4gYSBzcGVjaWZpZWQgZnV0dXJlIHJlbGVhc2Ugb2YgUHl0aG9uLiAgVGhlIGZ1dHVyZVxuc3RhdGVtZW50IGlzIGludGVuZGVkIHRvIGVhc2UgbWlncmF0aW9uIHRvIGZ1dHVyZSB2ZXJzaW9ucyBvZiBQeXRob25cbnRoYXQgaW50cm9kdWNlIGluY29tcGF0aWJsZSBjaGFuZ2VzIHRvIHRoZSBsYW5ndWFnZS4gIEl0IGFsbG93cyB1c2Ugb2ZcbnRoZSBuZXcgZmVhdHVyZXMgb24gYSBwZXItbW9kdWxlIGJhc2lzIGJlZm9yZSB0aGUgcmVsZWFzZSBpbiB3aGljaCB0aGVcbmZlYXR1cmUgYmVjb21lcyBzdGFuZGFyZC5cblxuICAgZnV0dXJlX3N0YXRlbWVudCA6Oj0gImZyb20iICJfX2Z1dHVyZV9fIiAiaW1wb3J0IiBmZWF0dXJlIFsiYXMiIG5hbWVdXG4gICAgICAgICAgICAgICAgICAgICAgICAoIiwiIGZlYXR1cmUgWyJhcyIgbmFtZV0pKlxuICAgICAgICAgICAgICAgICAgICAgICAgfCAiZnJvbSIgIl9fZnV0dXJlX18iICJpbXBvcnQiICIoIiBmZWF0dXJlIFsiYXMiIG5hbWVdXG4gICAgICAgICAgICAgICAgICAgICAgICAoIiwiIGZlYXR1cmUgWyJhcyIgbmFtZV0pKiBbIiwiXSAiKSJcbiAgIGZlYXR1cmUgICAgICAgICAgOjo9IGlkZW50aWZpZXJcbiAgIG5hbWUgICAgICAgICAgICAgOjo9IGlkZW50aWZpZXJcblxuQSBmdXR1cmUgc3RhdGVtZW50IG11c3QgYXBwZWFyIG5lYXIgdGhlIHRvcCBvZiB0aGUgbW9kdWxlLiAgVGhlIG9ubHlcbmxpbmVzIHRoYXQgY2FuIGFwcGVhciBiZWZvcmUgYSBmdXR1cmUgc3RhdGVtZW50IGFyZTpcblxuKiB0aGUgbW9kdWxlIGRvY3N0cmluZyAoaWYgYW55KSxcblxuKiBjb21tZW50cyxcblxuKiBibGFuayBsaW5lcywgYW5kXG5cbiogb3RoZXIgZnV0dXJlIHN0YXRlbWVudHMuXG5cblRoZSBmZWF0dXJlcyByZWNvZ25pemVkIGJ5IFB5dGhvbiAzLjAgYXJlICJhYnNvbHV0ZV9pbXBvcnQiLFxuImRpdmlzaW9uIiwgImdlbmVyYXRvcnMiLCAidW5pY29kZV9saXRlcmFscyIsICJwcmludF9mdW5jdGlvbiIsXG4ibmVzdGVkX3Njb3BlcyIgYW5kICJ3aXRoX3N0YXRlbWVudCIuICBUaGV5IGFyZSBhbGwgcmVkdW5kYW50IGJlY2F1c2VcbnRoZXkgYXJlIGFsd2F5cyBlbmFibGVkLCBhbmQgb25seSBrZXB0IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS5cblxuQSBmdXR1cmUgc3RhdGVtZW50IGlzIHJlY29nbml6ZWQgYW5kIHRyZWF0ZWQgc3BlY2lhbGx5IGF0IGNvbXBpbGVcbnRpbWU6IENoYW5nZXMgdG8gdGhlIHNlbWFudGljcyBvZiBjb3JlIGNvbnN0cnVjdHMgYXJlIG9mdGVuXG5pbXBsZW1lbnRlZCBieSBnZW5lcmF0aW5nIGRpZmZlcmVudCBjb2RlLiAgSXQgbWF5IGV2ZW4gYmUgdGhlIGNhc2VcbnRoYXQgYSBuZXcgZmVhdHVyZSBpbnRyb2R1Y2VzIG5ldyBpbmNvbXBhdGlibGUgc3ludGF4IChzdWNoIGFzIGEgbmV3XG5yZXNlcnZlZCB3b3JkKSwgaW4gd2hpY2ggY2FzZSB0aGUgY29tcGlsZXIgbWF5IG5lZWQgdG8gcGFyc2UgdGhlXG5tb2R1bGUgZGlmZmVyZW50bHkuICBTdWNoIGRlY2lzaW9ucyBjYW5ub3QgYmUgcHVzaGVkIG9mZiB1bnRpbFxucnVudGltZS5cblxuRm9yIGFueSBnaXZlbiByZWxlYXNlLCB0aGUgY29tcGlsZXIga25vd3Mgd2hpY2ggZmVhdHVyZSBuYW1lcyBoYXZlXG5iZWVuIGRlZmluZWQsIGFuZCByYWlzZXMgYSBjb21waWxlLXRpbWUgZXJyb3IgaWYgYSBmdXR1cmUgc3RhdGVtZW50XG5jb250YWlucyBhIGZlYXR1cmUgbm90IGtub3duIHRvIGl0LlxuXG5UaGUgZGlyZWN0IHJ1bnRpbWUgc2VtYW50aWNzIGFyZSB0aGUgc2FtZSBhcyBmb3IgYW55IGltcG9ydCBzdGF0ZW1lbnQ6XG50aGVyZSBpcyBhIHN0YW5kYXJkIG1vZHVsZSAiX19mdXR1cmVfXyIsIGRlc2NyaWJlZCBsYXRlciwgYW5kIGl0IHdpbGxcbmJlIGltcG9ydGVkIGluIHRoZSB1c3VhbCB3YXkgYXQgdGhlIHRpbWUgdGhlIGZ1dHVyZSBzdGF0ZW1lbnQgaXNcbmV4ZWN1dGVkLlxuXG5UaGUgaW50ZXJlc3RpbmcgcnVudGltZSBzZW1hbnRpY3MgZGVwZW5kIG9uIHRoZSBzcGVjaWZpYyBmZWF0dXJlXG5lbmFibGVkIGJ5IHRoZSBmdXR1cmUgc3RhdGVtZW50LlxuXG5Ob3RlIHRoYXQgdGhlcmUgaXMgbm90aGluZyBzcGVjaWFsIGFib3V0IHRoZSBzdGF0ZW1lbnQ6XG5cbiAgIGltcG9ydCBfX2Z1dHVyZV9fIFthcyBuYW1lXVxuXG5UaGF0IGlzIG5vdCBhIGZ1dHVyZSBzdGF0ZW1lbnQ7IGl0XCdzIGFuIG9yZGluYXJ5IGltcG9ydCBzdGF0ZW1lbnQgd2l0aFxubm8gc3BlY2lhbCBzZW1hbnRpY3Mgb3Igc3ludGF4IHJlc3RyaWN0aW9ucy5cblxuQ29kZSBjb21waWxlZCBieSBjYWxscyB0byB0aGUgYnVpbHQtaW4gZnVuY3Rpb25zICJleGVjKCkiIGFuZFxuImNvbXBpbGUoKSIgdGhhdCBvY2N1ciBpbiBhIG1vZHVsZSAiTSIgY29udGFpbmluZyBhIGZ1dHVyZSBzdGF0ZW1lbnRcbndpbGwsIGJ5IGRlZmF1bHQsIHVzZSB0aGUgbmV3IHN5bnRheCBvciBzZW1hbnRpY3MgYXNzb2NpYXRlZCB3aXRoIHRoZVxuZnV0dXJlIHN0YXRlbWVudC4gIFRoaXMgY2FuIGJlIGNvbnRyb2xsZWQgYnkgb3B0aW9uYWwgYXJndW1lbnRzIHRvXG4iY29tcGlsZSgpIiAtLS0gc2VlIHRoZSBkb2N1bWVudGF0aW9uIG9mIHRoYXQgZnVuY3Rpb24gZm9yIGRldGFpbHMuXG5cbkEgZnV0dXJlIHN0YXRlbWVudCB0eXBlZCBhdCBhbiBpbnRlcmFjdGl2ZSBpbnRlcnByZXRlciBwcm9tcHQgd2lsbFxudGFrZSBlZmZlY3QgZm9yIHRoZSByZXN0IG9mIHRoZSBpbnRlcnByZXRlciBzZXNzaW9uLiAgSWYgYW5cbmludGVycHJldGVyIGlzIHN0YXJ0ZWQgd2l0aCB0aGUgKi1pKiBvcHRpb24sIGlzIHBhc3NlZCBhIHNjcmlwdCBuYW1lXG50byBleGVjdXRlLCBhbmQgdGhlIHNjcmlwdCBpbmNsdWRlcyBhIGZ1dHVyZSBzdGF0ZW1lbnQsIGl0IHdpbGwgYmUgaW5cbmVmZmVjdCBpbiB0aGUgaW50ZXJhY3RpdmUgc2Vzc2lvbiBzdGFydGVkIGFmdGVyIHRoZSBzY3JpcHQgaXNcbmV4ZWN1dGVkLlxuXG5TZWUgYWxzbzogKipQRVAgMjM2KiogLSBCYWNrIHRvIHRoZSBfX2Z1dHVyZV9fXG5cbiAgICAgVGhlIG9yaWdpbmFsIHByb3Bvc2FsIGZvciB0aGUgX19mdXR1cmVfXyBtZWNoYW5pc20uXG4nLAotICdpbic6ICdcbkNvbXBhcmlzb25zXG4qKioqKioqKioqKlxuXG5Vbmxpa2UgQywgYWxsIGNvbXBhcmlzb24gb3BlcmF0aW9ucyBpbiBQeXRob24gaGF2ZSB0aGUgc2FtZSBwcmlvcml0eSxcbndoaWNoIGlzIGxvd2VyIHRoYW4gdGhhdCBvZiBhbnkgYXJpdGhtZXRpYywgc2hpZnRpbmcgb3IgYml0d2lzZVxub3BlcmF0aW9uLiAgQWxzbyB1bmxpa2UgQywgZXhwcmVzc2lvbnMgbGlrZSAiYSA8IGIgPCBjIiBoYXZlIHRoZVxuaW50ZXJwcmV0YXRpb24gdGhhdCBpcyBjb252ZW50aW9uYWwgaW4gbWF0aGVtYXRpY3M6XG5cbiAgIGNvbXBhcmlzb24gICAgOjo9IG9yX2V4cHIgKCBjb21wX29wZXJhdG9yIG9yX2V4cHIgKSpcbiAgIGNvbXBfb3BlcmF0b3IgOjo9ICI8IiB8ICI+IiB8ICI9PSIgfCAiPj0iIHwgIjw9IiB8ICIhPSJcbiAgICAgICAgICAgICAgICAgICAgIHwgImlzIiBbIm5vdCJdIHwgWyJub3QiXSAiaW4iXG5cbkNvbXBhcmlzb25zIHlpZWxkIGJvb2xlYW4gdmFsdWVzOiAiVHJ1ZSIgb3IgIkZhbHNlIi5cblxuQ29tcGFyaXNvbnMgY2FuIGJlIGNoYWluZWQgYXJiaXRyYXJpbHksIGUuZy4sICJ4IDwgeSA8PSB6IiBpc1xuZXF1aXZhbGVudCB0byAieCA8IHkgYW5kIHkgPD0geiIsIGV4Y2VwdCB0aGF0ICJ5IiBpcyBldmFsdWF0ZWQgb25seVxub25jZSAoYnV0IGluIGJvdGggY2FzZXMgInoiIGlzIG5vdCBldmFsdWF0ZWQgYXQgYWxsIHdoZW4gInggPCB5IiBpc1xuZm91bmQgdG8gYmUgZmFsc2UpLlxuXG5Gb3JtYWxseSwgaWYgKmEqLCAqYiosICpjKiwgLi4uLCAqeSosICp6KiBhcmUgZXhwcmVzc2lvbnMgYW5kICpvcDEqLFxuKm9wMiosIC4uLiwgKm9wTiogYXJlIGNvbXBhcmlzb24gb3BlcmF0b3JzLCB0aGVuICJhIG9wMSBiIG9wMiBjIC4uLiB5XG5vcE4geiIgaXMgZXF1aXZhbGVudCB0byAiYSBvcDEgYiBhbmQgYiBvcDIgYyBhbmQgLi4uIHkgb3BOIHoiLCBleGNlcHRcbnRoYXQgZWFjaCBleHByZXNzaW9uIGlzIGV2YWx1YXRlZCBhdCBtb3N0IG9uY2UuXG5cbk5vdGUgdGhhdCAiYSBvcDEgYiBvcDIgYyIgZG9lc25cJ3QgaW1wbHkgYW55IGtpbmQgb2YgY29tcGFyaXNvbiBiZXR3ZWVuXG4qYSogYW5kICpjKiwgc28gdGhhdCwgZS5nLiwgInggPCB5ID4geiIgaXMgcGVyZmVjdGx5IGxlZ2FsICh0aG91Z2hcbnBlcmhhcHMgbm90IHByZXR0eSkuXG5cblRoZSBvcGVyYXRvcnMgIjwiLCAiPiIsICI9PSIsICI+PSIsICI8PSIsIGFuZCAiIT0iIGNvbXBhcmUgdGhlIHZhbHVlc1xub2YgdHdvIG9iamVjdHMuICBUaGUgb2JqZWN0cyBuZWVkIG5vdCBoYXZlIHRoZSBzYW1lIHR5cGUuIElmIGJvdGggYXJlXG5udW1iZXJzLCB0aGV5IGFyZSBjb252ZXJ0ZWQgdG8gYSBjb21tb24gdHlwZS4gIE90aGVyd2lzZSwgdGhlICI9PSIgYW5kXG4iIT0iIG9wZXJhdG9ycyAqYWx3YXlzKiBjb25zaWRlciBvYmplY3RzIG9mIGRpZmZlcmVudCB0eXBlcyB0byBiZVxudW5lcXVhbCwgd2hpbGUgdGhlICI8IiwgIj4iLCAiPj0iIGFuZCAiPD0iIG9wZXJhdG9ycyByYWlzZSBhXG4iVHlwZUVycm9yIiB3aGVuIGNvbXBhcmluZyBvYmplY3RzIG9mIGRpZmZlcmVudCB0eXBlcyB0aGF0IGRvIG5vdFxuaW1wbGVtZW50IHRoZXNlIG9wZXJhdG9ycyBmb3IgdGhlIGdpdmVuIHBhaXIgb2YgdHlwZXMuICBZb3UgY2FuXG5jb250cm9sIGNvbXBhcmlzb24gYmVoYXZpb3Igb2Ygb2JqZWN0cyBvZiBub24tYnVpbHQtaW4gdHlwZXMgYnlcbmRlZmluaW5nIHJpY2ggY29tcGFyaXNvbiBtZXRob2RzIGxpa2UgIl9fZ3RfXygpIiwgZGVzY3JpYmVkIGluIHNlY3Rpb25cbipCYXNpYyBjdXN0b21pemF0aW9uKi5cblxuQ29tcGFyaXNvbiBvZiBvYmplY3RzIG9mIHRoZSBzYW1lIHR5cGUgZGVwZW5kcyBvbiB0aGUgdHlwZTpcblxuKiBOdW1iZXJzIGFyZSBjb21wYXJlZCBhcml0aG1ldGljYWxseS5cblxuKiBUaGUgdmFsdWVzICJmbG9hdChcJ05hTlwnKSIgYW5kICJEZWNpbWFsKFwnTmFOXCcpIiBhcmUgc3BlY2lhbC4gVGhlXG4gIGFyZSBpZGVudGljYWwgdG8gdGhlbXNlbHZlcywgInggaXMgeCIgYnV0IGFyZSBub3QgZXF1YWwgdG9cbiAgdGhlbXNlbHZlcywgInggIT0geCIuICBBZGRpdGlvbmFsbHksIGNvbXBhcmluZyBhbnkgdmFsdWUgdG8gYVxuICBub3QtYS1udW1iZXIgdmFsdWUgd2lsbCByZXR1cm4gIkZhbHNlIi4gIEZvciBleGFtcGxlLCBib3RoICIzIDxcbiAgZmxvYXQoXCdOYU5cJykiIGFuZCAiZmxvYXQoXCdOYU5cJykgPCAzIiB3aWxsIHJldHVybiAiRmFsc2UiLlxuXG4qIEJ5dGVzIG9iamVjdHMgYXJlIGNvbXBhcmVkIGxleGljb2dyYXBoaWNhbGx5IHVzaW5nIHRoZSBudW1lcmljXG4gIHZhbHVlcyBvZiB0aGVpciBlbGVtZW50cy5cblxuKiBTdHJpbmdzIGFyZSBjb21wYXJlZCBsZXhpY29ncmFwaGljYWxseSB1c2luZyB0aGUgbnVtZXJpY1xuICBlcXVpdmFsZW50cyAodGhlIHJlc3VsdCBvZiB0aGUgYnVpbHQtaW4gZnVuY3Rpb24gIm9yZCgpIikgb2YgdGhlaXJcbiAgY2hhcmFjdGVycy4gWzNdIFN0cmluZyBhbmQgYnl0ZXMgb2JqZWN0IGNhblwndCBiZSBjb21wYXJlZCFcblxuKiBUdXBsZXMgYW5kIGxpc3RzIGFyZSBjb21wYXJlZCBsZXhpY29ncmFwaGljYWxseSB1c2luZyBjb21wYXJpc29uXG4gIG9mIGNvcnJlc3BvbmRpbmcgZWxlbWVudHMuICBUaGlzIG1lYW5zIHRoYXQgdG8gY29tcGFyZSBlcXVhbCwgZWFjaFxuICBlbGVtZW50IG11c3QgY29tcGFyZSBlcXVhbCBhbmQgdGhlIHR3byBzZXF1ZW5jZXMgbXVzdCBiZSBvZiB0aGUgc2FtZVxuICB0eXBlIGFuZCBoYXZlIHRoZSBzYW1lIGxlbmd0aC5cblxuICBJZiBub3QgZXF1YWwsIHRoZSBzZXF1ZW5jZXMgYXJlIG9yZGVyZWQgdGhlIHNhbWUgYXMgdGhlaXIgZmlyc3RcbiAgZGlmZmVyaW5nIGVsZW1lbnRzLiAgRm9yIGV4YW1wbGUsICJbMSwyLHhdIDw9IFsxLDIseV0iIGhhcyB0aGUgc2FtZVxuICB2YWx1ZSBhcyAieCA8PSB5Ii4gIElmIHRoZSBjb3JyZXNwb25kaW5nIGVsZW1lbnQgZG9lcyBub3QgZXhpc3QsIHRoZVxuICBzaG9ydGVyIHNlcXVlbmNlIGlzIG9yZGVyZWQgZmlyc3QgKGZvciBleGFtcGxlLCAiWzEsMl0gPCBbMSwyLDNdIikuXG5cbiogTWFwcGluZ3MgKGRpY3Rpb25hcmllcykgY29tcGFyZSBlcXVhbCBpZiBhbmQgb25seSBpZiB0aGV5IGhhdmUgdGhlXG4gIHNhbWUgIihrZXksIHZhbHVlKSIgcGFpcnMuIE9yZGVyIGNvbXBhcmlzb25zICIoXCc8XCcsIFwnPD1cJywgXCc+PVwnLFxuICBcJz5cJykiIHJhaXNlICJUeXBlRXJyb3IiLlxuXG4qIFNldHMgYW5kIGZyb3plbnNldHMgZGVmaW5lIGNvbXBhcmlzb24gb3BlcmF0b3JzIHRvIG1lYW4gc3Vic2V0IGFuZFxuICBzdXBlcnNldCB0ZXN0cy4gIFRob3NlIHJlbGF0aW9ucyBkbyBub3QgZGVmaW5lIHRvdGFsIG9yZGVyaW5ncyAodGhlXG4gIHR3byBzZXRzICJ7MSwyfSIgYW5kIHsyLDN9IGFyZSBub3QgZXF1YWwsIG5vciBzdWJzZXRzIG9mIG9uZVxuICBhbm90aGVyLCBub3Igc3VwZXJzZXRzIG9mIG9uZSBhbm90aGVyKS4gIEFjY29yZGluZ2x5LCBzZXRzIGFyZSBub3RcbiAgYXBwcm9wcmlhdGUgYXJndW1lbnRzIGZvciBmdW5jdGlvbnMgd2hpY2ggZGVwZW5kIG9uIHRvdGFsIG9yZGVyaW5nLlxuICBGb3IgZXhhbXBsZSwgIm1pbigpIiwgIm1heCgpIiwgYW5kICJzb3J0ZWQoKSIgcHJvZHVjZSB1bmRlZmluZWRcbiAgcmVzdWx0cyBnaXZlbiBhIGxpc3Qgb2Ygc2V0cyBhcyBpbnB1dHMuXG5cbiogTW9zdCBvdGhlciBvYmplY3RzIG9mIGJ1aWx0LWluIHR5cGVzIGNvbXBhcmUgdW5lcXVhbCB1bmxlc3MgdGhleVxuICBhcmUgdGhlIHNhbWUgb2JqZWN0OyB0aGUgY2hvaWNlIHdoZXRoZXIgb25lIG9iamVjdCBpcyBjb25zaWRlcmVkXG4gIHNtYWxsZXIgb3IgbGFyZ2VyIHRoYW4gYW5vdGhlciBvbmUgaXMgbWFkZSBhcmJpdHJhcmlseSBidXRcbiAgY29uc2lzdGVudGx5IHdpdGhpbiBvbmUgZXhlY3V0aW9uIG9mIGEgcHJvZ3JhbS5cblxuQ29tcGFyaXNvbiBvZiBvYmplY3RzIG9mIHRoZSBkaWZmZXJpbmcgdHlwZXMgZGVwZW5kcyBvbiB3aGV0aGVyIGVpdGhlclxub2YgdGhlIHR5cGVzIHByb3ZpZGUgZXhwbGljaXQgc3VwcG9ydCBmb3IgdGhlIGNvbXBhcmlzb24uICBNb3N0XG5udW1lcmljIHR5cGVzIGNhbiBiZSBjb21wYXJlZCB3aXRoIG9uZSBhbm90aGVyLiAgV2hlbiBjcm9zcy10eXBlXG5jb21wYXJpc29uIGlzIG5vdCBzdXBwb3J0ZWQsIHRoZSBjb21wYXJpc29uIG1ldGhvZCByZXR1cm5zXG4iTm90SW1wbGVtZW50ZWQiLlxuXG5UaGUgb3BlcmF0b3JzICJpbiIgYW5kICJub3QgaW4iIHRlc3QgZm9yIG1lbWJlcnNoaXAuICAieCBpbiBzIlxuZXZhbHVhdGVzIHRvIHRydWUgaWYgKngqIGlzIGEgbWVtYmVyIG9mICpzKiwgYW5kIGZhbHNlIG90aGVyd2lzZS4gICJ4XG5ub3QgaW4gcyIgcmV0dXJucyB0aGUgbmVnYXRpb24gb2YgInggaW4gcyIuICBBbGwgYnVpbHQtaW4gc2VxdWVuY2VzXG5hbmQgc2V0IHR5cGVzIHN1cHBvcnQgdGhpcyBhcyB3ZWxsIGFzIGRpY3Rpb25hcnksIGZvciB3aGljaCAiaW4iIHRlc3RzXG53aGV0aGVyIGEgdGhlIGRpY3Rpb25hcnkgaGFzIGEgZ2l2ZW4ga2V5LiBGb3IgY29udGFpbmVyIHR5cGVzIHN1Y2ggYXNcbmxpc3QsIHR1cGxlLCBzZXQsIGZyb3plbnNldCwgZGljdCwgb3IgY29sbGVjdGlvbnMuZGVxdWUsIHRoZVxuZXhwcmVzc2lvbiAieCBpbiB5IiBpcyBlcXVpdmFsZW50IHRvICJhbnkoeCBpcyBlIG9yIHggPT0gZSBmb3IgZSBpblxueSkiLlxuXG5Gb3IgdGhlIHN0cmluZyBhbmQgYnl0ZXMgdHlwZXMsICJ4IGluIHkiIGlzIHRydWUgaWYgYW5kIG9ubHkgaWYgKngqIGlzXG5hIHN1YnN0cmluZyBvZiAqeSouICBBbiBlcXVpdmFsZW50IHRlc3QgaXMgInkuZmluZCh4KSAhPSAtMSIuICBFbXB0eVxuc3RyaW5ncyBhcmUgYWx3YXlzIGNvbnNpZGVyZWQgdG8gYmUgYSBzdWJzdHJpbmcgb2YgYW55IG90aGVyIHN0cmluZyxcbnNvICIiIiBpbiAiYWJjIiIgd2lsbCByZXR1cm4gIlRydWUiLlxuXG5Gb3IgdXNlci1kZWZpbmVkIGNsYXNzZXMgd2hpY2ggZGVmaW5lIHRoZSAiX19jb250YWluc19fKCkiIG1ldGhvZCwgInhcbmluIHkiIGlzIHRydWUgaWYgYW5kIG9ubHkgaWYgInkuX19jb250YWluc19fKHgpIiBpcyB0cnVlLlxuXG5Gb3IgdXNlci1kZWZpbmVkIGNsYXNzZXMgd2hpY2ggZG8gbm90IGRlZmluZSAiX19jb250YWluc19fKCkiIGJ1dCBkb1xuZGVmaW5lICJfX2l0ZXJfXygpIiwgInggaW4geSIgaXMgdHJ1ZSBpZiBzb21lIHZhbHVlICJ6IiB3aXRoICJ4ID09IHoiXG5pcyBwcm9kdWNlZCB3aGlsZSBpdGVyYXRpbmcgb3ZlciAieSIuICBJZiBhbiBleGNlcHRpb24gaXMgcmFpc2VkXG5kdXJpbmcgdGhlIGl0ZXJhdGlvbiwgaXQgaXMgYXMgaWYgImluIiByYWlzZWQgdGhhdCBleGNlcHRpb24uXG5cbkxhc3RseSwgdGhlIG9sZC1zdHlsZSBpdGVyYXRpb24gcHJvdG9jb2wgaXMgdHJpZWQ6IGlmIGEgY2xhc3MgZGVmaW5lc1xuIl9fZ2V0aXRlbV9fKCkiLCAieCBpbiB5IiBpcyB0cnVlIGlmIGFuZCBvbmx5IGlmIHRoZXJlIGlzIGEgbm9uLVxubmVnYXRpdmUgaW50ZWdlciBpbmRleCAqaSogc3VjaCB0aGF0ICJ4ID09IHlbaV0iLCBhbmQgYWxsIGxvd2VyXG5pbnRlZ2VyIGluZGljZXMgZG8gbm90IHJhaXNlICJJbmRleEVycm9yIiBleGNlcHRpb24uICAoSWYgYW55IG90aGVyXG5leGNlcHRpb24gaXMgcmFpc2VkLCBpdCBpcyBhcyBpZiAiaW4iIHJhaXNlZCB0aGF0IGV4Y2VwdGlvbikuXG5cblRoZSBvcGVyYXRvciAibm90IGluIiBpcyBkZWZpbmVkIHRvIGhhdmUgdGhlIGludmVyc2UgdHJ1ZSB2YWx1ZSBvZlxuImluIi5cblxuVGhlIG9wZXJhdG9ycyAiaXMiIGFuZCAiaXMgbm90IiB0ZXN0IGZvciBvYmplY3QgaWRlbnRpdHk6ICJ4IGlzIHkiIGlzXG50cnVlIGlmIGFuZCBvbmx5IGlmICp4KiBhbmQgKnkqIGFyZSB0aGUgc2FtZSBvYmplY3QuICAieCBpcyBub3QgeSJcbnlpZWxkcyB0aGUgaW52ZXJzZSB0cnV0aCB2YWx1ZS4gWzRdXG4nLAotICdpbnRlZ2Vycyc6ICdcbkludGVnZXIgbGl0ZXJhbHNcbioqKioqKioqKioqKioqKipcblxuSW50ZWdlciBsaXRlcmFscyBhcmUgZGVzY3JpYmVkIGJ5IHRoZSBmb2xsb3dpbmcgbGV4aWNhbCBkZWZpbml0aW9uczpcblxuICAgaW50ZWdlciAgICAgICAgOjo9IGRlY2ltYWxpbnRlZ2VyIHwgb2N0aW50ZWdlciB8IGhleGludGVnZXIgfCBiaW5pbnRlZ2VyXG4gICBkZWNpbWFsaW50ZWdlciA6Oj0gbm9uemVyb2RpZ2l0IGRpZ2l0KiB8ICIwIitcbiAgIG5vbnplcm9kaWdpdCAgIDo6PSAiMSIuLi4iOSJcbiAgIGRpZ2l0ICAgICAgICAgIDo6PSAiMCIuLi4iOSJcbiAgIG9jdGludGVnZXIgICAgIDo6PSAiMCIgKCJvIiB8ICJPIikgb2N0ZGlnaXQrXG4gICBoZXhpbnRlZ2VyICAgICA6Oj0gIjAiICgieCIgfCAiWCIpIGhleGRpZ2l0K1xuICAgYmluaW50ZWdlciAgICAgOjo9ICIwIiAoImIiIHwgIkIiKSBiaW5kaWdpdCtcbiAgIG9jdGRpZ2l0ICAgICAgIDo6PSAiMCIuLi4iNyJcbiAgIGhleGRpZ2l0ICAgICAgIDo6PSBkaWdpdCB8ICJhIi4uLiJmIiB8ICJBIi4uLiJGIlxuICAgYmluZGlnaXQgICAgICAgOjo9ICIwIiB8ICIxIlxuXG5UaGVyZSBpcyBubyBsaW1pdCBmb3IgdGhlIGxlbmd0aCBvZiBpbnRlZ2VyIGxpdGVyYWxzIGFwYXJ0IGZyb20gd2hhdFxuY2FuIGJlIHN0b3JlZCBpbiBhdmFpbGFibGUgbWVtb3J5LlxuXG5Ob3RlIHRoYXQgbGVhZGluZyB6ZXJvcyBpbiBhIG5vbi16ZXJvIGRlY2ltYWwgbnVtYmVyIGFyZSBub3QgYWxsb3dlZC5cblRoaXMgaXMgZm9yIGRpc2FtYmlndWF0aW9uIHdpdGggQy1zdHlsZSBvY3RhbCBsaXRlcmFscywgd2hpY2ggUHl0aG9uXG51c2VkIGJlZm9yZSB2ZXJzaW9uIDMuMC5cblxuU29tZSBleGFtcGxlcyBvZiBpbnRlZ2VyIGxpdGVyYWxzOlxuXG4gICA3ICAgICAyMTQ3NDgzNjQ3ICAgICAgICAgICAgICAgICAgICAgICAgMG8xNzcgICAgMGIxMDAxMTAxMTFcbiAgIDMgICAgIDc5MjI4MTYyNTE0MjY0MzM3NTkzNTQzOTUwMzM2ICAgICAwbzM3NyAgICAweDEwMDAwMDAwMFxuICAgICAgICAgNzkyMjgxNjI1MTQyNjQzMzc1OTM1NDM5NTAzMzYgICAgICAgICAgICAgIDB4ZGVhZGJlZWZcbicsCi0gJ2xhbWJkYSc6ICdcbkxhbWJkYXNcbioqKioqKipcblxuICAgbGFtYmRhX2V4cHIgICAgICAgIDo6PSAibGFtYmRhIiBbcGFyYW1ldGVyX2xpc3RdOiBleHByZXNzaW9uXG4gICBsYW1iZGFfZXhwcl9ub2NvbmQgOjo9ICJsYW1iZGEiIFtwYXJhbWV0ZXJfbGlzdF06IGV4cHJlc3Npb25fbm9jb25kXG5cbkxhbWJkYSBleHByZXNzaW9ucyAoc29tZXRpbWVzIGNhbGxlZCBsYW1iZGEgZm9ybXMpIGhhdmUgdGhlIHNhbWVcbnN5bnRhY3RpYyBwb3NpdGlvbiBhcyBleHByZXNzaW9ucy4gIFRoZXkgYXJlIGEgc2hvcnRoYW5kIHRvIGNyZWF0ZVxuYW5vbnltb3VzIGZ1bmN0aW9uczsgdGhlIGV4cHJlc3Npb24gImxhbWJkYSBhcmd1bWVudHM6IGV4cHJlc3Npb24iXG55aWVsZHMgYSBmdW5jdGlvbiBvYmplY3QuICBUaGUgdW5uYW1lZCBvYmplY3QgYmVoYXZlcyBsaWtlIGEgZnVuY3Rpb25cbm9iamVjdCBkZWZpbmVkIHdpdGhcblxuICAgZGVmIDxsYW1iZGE+KGFyZ3VtZW50cyk6XG4gICAgICAgcmV0dXJuIGV4cHJlc3Npb25cblxuU2VlIHNlY3Rpb24gKkZ1bmN0aW9uIGRlZmluaXRpb25zKiBmb3IgdGhlIHN5bnRheCBvZiBwYXJhbWV0ZXIgbGlzdHMuXG5Ob3RlIHRoYXQgZnVuY3Rpb25zIGNyZWF0ZWQgd2l0aCBsYW1iZGEgZXhwcmVzc2lvbnMgY2Fubm90IGNvbnRhaW5cbnN0YXRlbWVudHMgb3IgYW5ub3RhdGlvbnMuXG4nLAotICdsaXN0cyc6ICdcbkxpc3QgZGlzcGxheXNcbioqKioqKioqKioqKipcblxuQSBsaXN0IGRpc3BsYXkgaXMgYSBwb3NzaWJseSBlbXB0eSBzZXJpZXMgb2YgZXhwcmVzc2lvbnMgZW5jbG9zZWQgaW5cbnNxdWFyZSBicmFja2V0czpcblxuICAgbGlzdF9kaXNwbGF5IDo6PSAiWyIgW2V4cHJlc3Npb25fbGlzdCB8IGNvbXByZWhlbnNpb25dICJdIlxuXG5BIGxpc3QgZGlzcGxheSB5aWVsZHMgYSBuZXcgbGlzdCBvYmplY3QsIHRoZSBjb250ZW50cyBiZWluZyBzcGVjaWZpZWRcbmJ5IGVpdGhlciBhIGxpc3Qgb2YgZXhwcmVzc2lvbnMgb3IgYSBjb21wcmVoZW5zaW9uLiAgV2hlbiBhIGNvbW1hLVxuc2VwYXJhdGVkIGxpc3Qgb2YgZXhwcmVzc2lvbnMgaXMgc3VwcGxpZWQsIGl0cyBlbGVtZW50cyBhcmUgZXZhbHVhdGVkXG5mcm9tIGxlZnQgdG8gcmlnaHQgYW5kIHBsYWNlZCBpbnRvIHRoZSBsaXN0IG9iamVjdCBpbiB0aGF0IG9yZGVyLlxuV2hlbiBhIGNvbXByZWhlbnNpb24gaXMgc3VwcGxpZWQsIHRoZSBsaXN0IGlzIGNvbnN0cnVjdGVkIGZyb20gdGhlXG5lbGVtZW50cyByZXN1bHRpbmcgZnJvbSB0aGUgY29tcHJlaGVuc2lvbi5cbicsCi0gJ25hbWluZyc6ICdcbk5hbWluZyBhbmQgYmluZGluZ1xuKioqKioqKioqKioqKioqKioqXG5cbipOYW1lcyogcmVmZXIgdG8gb2JqZWN0cy4gIE5hbWVzIGFyZSBpbnRyb2R1Y2VkIGJ5IG5hbWUgYmluZGluZ1xub3BlcmF0aW9ucy4gRWFjaCBvY2N1cnJlbmNlIG9mIGEgbmFtZSBpbiB0aGUgcHJvZ3JhbSB0ZXh0IHJlZmVycyB0b1xudGhlICpiaW5kaW5nKiBvZiB0aGF0IG5hbWUgZXN0YWJsaXNoZWQgaW4gdGhlIGlubmVybW9zdCBmdW5jdGlvbiBibG9ja1xuY29udGFpbmluZyB0aGUgdXNlLlxuXG5BICpibG9jayogaXMgYSBwaWVjZSBvZiBQeXRob24gcHJvZ3JhbSB0ZXh0IHRoYXQgaXMgZXhlY3V0ZWQgYXMgYVxudW5pdC4gVGhlIGZvbGxvd2luZyBhcmUgYmxvY2tzOiBhIG1vZHVsZSwgYSBmdW5jdGlvbiBib2R5LCBhbmQgYSBjbGFzc1xuZGVmaW5pdGlvbi4gRWFjaCBjb21tYW5kIHR5cGVkIGludGVyYWN0aXZlbHkgaXMgYSBibG9jay4gIEEgc2NyaXB0XG5maWxlIChhIGZpbGUgZ2l2ZW4gYXMgc3RhbmRhcmQgaW5wdXQgdG8gdGhlIGludGVycHJldGVyIG9yIHNwZWNpZmllZFxub24gdGhlIGludGVycHJldGVyIGNvbW1hbmQgbGluZSB0aGUgZmlyc3QgYXJndW1lbnQpIGlzIGEgY29kZSBibG9jay5cbkEgc2NyaXB0IGNvbW1hbmQgKGEgY29tbWFuZCBzcGVjaWZpZWQgb24gdGhlIGludGVycHJldGVyIGNvbW1hbmQgbGluZVxud2l0aCB0aGUgXCcqKi1jKipcJyBvcHRpb24pIGlzIGEgY29kZSBibG9jay4gIFRoZSBzdHJpbmcgYXJndW1lbnQgcGFzc2VkXG50byB0aGUgYnVpbHQtaW4gZnVuY3Rpb25zICJldmFsKCkiIGFuZCAiZXhlYygpIiBpcyBhIGNvZGUgYmxvY2suXG5cbkEgY29kZSBibG9jayBpcyBleGVjdXRlZCBpbiBhbiAqZXhlY3V0aW9uIGZyYW1lKi4gIEEgZnJhbWUgY29udGFpbnNcbnNvbWUgYWRtaW5pc3RyYXRpdmUgaW5mb3JtYXRpb24gKHVzZWQgZm9yIGRlYnVnZ2luZykgYW5kIGRldGVybWluZXNcbndoZXJlIGFuZCBob3cgZXhlY3V0aW9uIGNvbnRpbnVlcyBhZnRlciB0aGUgY29kZSBibG9ja1wncyBleGVjdXRpb24gaGFzXG5jb21wbGV0ZWQuXG5cbkEgKnNjb3BlKiBkZWZpbmVzIHRoZSB2aXNpYmlsaXR5IG9mIGEgbmFtZSB3aXRoaW4gYSBibG9jay4gIElmIGEgbG9jYWxcbnZhcmlhYmxlIGlzIGRlZmluZWQgaW4gYSBibG9jaywgaXRzIHNjb3BlIGluY2x1ZGVzIHRoYXQgYmxvY2suICBJZiB0aGVcbmRlZmluaXRpb24gb2NjdXJzIGluIGEgZnVuY3Rpb24gYmxvY2ssIHRoZSBzY29wZSBleHRlbmRzIHRvIGFueSBibG9ja3NcbmNvbnRhaW5lZCB3aXRoaW4gdGhlIGRlZmluaW5nIG9uZSwgdW5sZXNzIGEgY29udGFpbmVkIGJsb2NrIGludHJvZHVjZXNcbmEgZGlmZmVyZW50IGJpbmRpbmcgZm9yIHRoZSBuYW1lLiAgVGhlIHNjb3BlIG9mIG5hbWVzIGRlZmluZWQgaW4gYVxuY2xhc3MgYmxvY2sgaXMgbGltaXRlZCB0byB0aGUgY2xhc3MgYmxvY2s7IGl0IGRvZXMgbm90IGV4dGVuZCB0byB0aGVcbmNvZGUgYmxvY2tzIG9mIG1ldGhvZHMgLS0gdGhpcyBpbmNsdWRlcyBjb21wcmVoZW5zaW9ucyBhbmQgZ2VuZXJhdG9yXG5leHByZXNzaW9ucyBzaW5jZSB0aGV5IGFyZSBpbXBsZW1lbnRlZCB1c2luZyBhIGZ1bmN0aW9uIHNjb3BlLiAgVGhpc1xubWVhbnMgdGhhdCB0aGUgZm9sbG93aW5nIHdpbGwgZmFpbDpcblxuICAgY2xhc3MgQTpcbiAgICAgICBhID0gNDJcbiAgICAgICBiID0gbGlzdChhICsgaSBmb3IgaSBpbiByYW5nZSgxMCkpXG5cbldoZW4gYSBuYW1lIGlzIHVzZWQgaW4gYSBjb2RlIGJsb2NrLCBpdCBpcyByZXNvbHZlZCB1c2luZyB0aGUgbmVhcmVzdFxuZW5jbG9zaW5nIHNjb3BlLiAgVGhlIHNldCBvZiBhbGwgc3VjaCBzY29wZXMgdmlzaWJsZSB0byBhIGNvZGUgYmxvY2tcbmlzIGNhbGxlZCB0aGUgYmxvY2tcJ3MgKmVudmlyb25tZW50Ki5cblxuSWYgYSBuYW1lIGlzIGJvdW5kIGluIGEgYmxvY2ssIGl0IGlzIGEgbG9jYWwgdmFyaWFibGUgb2YgdGhhdCBibG9jayxcbnVubGVzcyBkZWNsYXJlZCBhcyAibm9ubG9jYWwiLiAgSWYgYSBuYW1lIGlzIGJvdW5kIGF0IHRoZSBtb2R1bGVcbmxldmVsLCBpdCBpcyBhIGdsb2JhbCB2YXJpYWJsZS4gIChUaGUgdmFyaWFibGVzIG9mIHRoZSBtb2R1bGUgY29kZVxuYmxvY2sgYXJlIGxvY2FsIGFuZCBnbG9iYWwuKSAgSWYgYSB2YXJpYWJsZSBpcyB1c2VkIGluIGEgY29kZSBibG9ja1xuYnV0IG5vdCBkZWZpbmVkIHRoZXJlLCBpdCBpcyBhICpmcmVlIHZhcmlhYmxlKi5cblxuV2hlbiBhIG5hbWUgaXMgbm90IGZvdW5kIGF0IGFsbCwgYSAiTmFtZUVycm9yIiBleGNlcHRpb24gaXMgcmFpc2VkLlxuSWYgdGhlIG5hbWUgcmVmZXJzIHRvIGEgbG9jYWwgdmFyaWFibGUgdGhhdCBoYXMgbm90IGJlZW4gYm91bmQsIGFcbiJVbmJvdW5kTG9jYWxFcnJvciIgZXhjZXB0aW9uIGlzIHJhaXNlZC4gICJVbmJvdW5kTG9jYWxFcnJvciIgaXMgYVxuc3ViY2xhc3Mgb2YgIk5hbWVFcnJvciIuXG5cblRoZSBmb2xsb3dpbmcgY29uc3RydWN0cyBiaW5kIG5hbWVzOiBmb3JtYWwgcGFyYW1ldGVycyB0byBmdW5jdGlvbnMsXG4iaW1wb3J0IiBzdGF0ZW1lbnRzLCBjbGFzcyBhbmQgZnVuY3Rpb24gZGVmaW5pdGlvbnMgKHRoZXNlIGJpbmQgdGhlXG5jbGFzcyBvciBmdW5jdGlvbiBuYW1lIGluIHRoZSBkZWZpbmluZyBibG9jayksIGFuZCB0YXJnZXRzIHRoYXQgYXJlXG5pZGVudGlmaWVycyBpZiBvY2N1cnJpbmcgaW4gYW4gYXNzaWdubWVudCwgImZvciIgbG9vcCBoZWFkZXIsIG9yIGFmdGVyXG4iYXMiIGluIGEgIndpdGgiIHN0YXRlbWVudCBvciAiZXhjZXB0IiBjbGF1c2UuIFRoZSAiaW1wb3J0IiBzdGF0ZW1lbnRcbm9mIHRoZSBmb3JtICJmcm9tIC4uLiBpbXBvcnQgKiIgYmluZHMgYWxsIG5hbWVzIGRlZmluZWQgaW4gdGhlXG5pbXBvcnRlZCBtb2R1bGUsIGV4Y2VwdCB0aG9zZSBiZWdpbm5pbmcgd2l0aCBhbiB1bmRlcnNjb3JlLiAgVGhpcyBmb3JtXG5tYXkgb25seSBiZSB1c2VkIGF0IHRoZSBtb2R1bGUgbGV2ZWwuXG5cbkEgdGFyZ2V0IG9jY3VycmluZyBpbiBhICJkZWwiIHN0YXRlbWVudCBpcyBhbHNvIGNvbnNpZGVyZWQgYm91bmQgZm9yXG50aGlzIHB1cnBvc2UgKHRob3VnaCB0aGUgYWN0dWFsIHNlbWFudGljcyBhcmUgdG8gdW5iaW5kIHRoZSBuYW1lKS5cblxuRWFjaCBhc3NpZ25tZW50IG9yIGltcG9ydCBzdGF0ZW1lbnQgb2NjdXJzIHdpdGhpbiBhIGJsb2NrIGRlZmluZWQgYnkgYVxuY2xhc3Mgb3IgZnVuY3Rpb24gZGVmaW5pdGlvbiBvciBhdCB0aGUgbW9kdWxlIGxldmVsICh0aGUgdG9wLWxldmVsXG5jb2RlIGJsb2NrKS5cblxuSWYgYSBuYW1lIGJpbmRpbmcgb3BlcmF0aW9uIG9jY3VycyBhbnl3aGVyZSB3aXRoaW4gYSBjb2RlIGJsb2NrLCBhbGxcbnVzZXMgb2YgdGhlIG5hbWUgd2l0aGluIHRoZSBibG9jayBhcmUgdHJlYXRlZCBhcyByZWZlcmVuY2VzIHRvIHRoZVxuY3VycmVudCBibG9jay4gIFRoaXMgY2FuIGxlYWQgdG8gZXJyb3JzIHdoZW4gYSBuYW1lIGlzIHVzZWQgd2l0aGluIGFcbmJsb2NrIGJlZm9yZSBpdCBpcyBib3VuZC4gIFRoaXMgcnVsZSBpcyBzdWJ0bGUuICBQeXRob24gbGFja3NcbmRlY2xhcmF0aW9ucyBhbmQgYWxsb3dzIG5hbWUgYmluZGluZyBvcGVyYXRpb25zIHRvIG9jY3VyIGFueXdoZXJlXG53aXRoaW4gYSBjb2RlIGJsb2NrLiAgVGhlIGxvY2FsIHZhcmlhYmxlcyBvZiBhIGNvZGUgYmxvY2sgY2FuIGJlXG5kZXRlcm1pbmVkIGJ5IHNjYW5uaW5nIHRoZSBlbnRpcmUgdGV4dCBvZiB0aGUgYmxvY2sgZm9yIG5hbWUgYmluZGluZ1xub3BlcmF0aW9ucy5cblxuSWYgdGhlICJnbG9iYWwiIHN0YXRlbWVudCBvY2N1cnMgd2l0aGluIGEgYmxvY2ssIGFsbCB1c2VzIG9mIHRoZSBuYW1lXG5zcGVjaWZpZWQgaW4gdGhlIHN0YXRlbWVudCByZWZlciB0byB0aGUgYmluZGluZyBvZiB0aGF0IG5hbWUgaW4gdGhlXG50b3AtbGV2ZWwgbmFtZXNwYWNlLiAgTmFtZXMgYXJlIHJlc29sdmVkIGluIHRoZSB0b3AtbGV2ZWwgbmFtZXNwYWNlIGJ5XG5zZWFyY2hpbmcgdGhlIGdsb2JhbCBuYW1lc3BhY2UsIGkuZS4gdGhlIG5hbWVzcGFjZSBvZiB0aGUgbW9kdWxlXG5jb250YWluaW5nIHRoZSBjb2RlIGJsb2NrLCBhbmQgdGhlIGJ1aWx0aW5zIG5hbWVzcGFjZSwgdGhlIG5hbWVzcGFjZVxub2YgdGhlIG1vZHVsZSAiYnVpbHRpbnMiLiAgVGhlIGdsb2JhbCBuYW1lc3BhY2UgaXMgc2VhcmNoZWQgZmlyc3QuICBJZlxudGhlIG5hbWUgaXMgbm90IGZvdW5kIHRoZXJlLCB0aGUgYnVpbHRpbnMgbmFtZXNwYWNlIGlzIHNlYXJjaGVkLiAgVGhlXG5nbG9iYWwgc3RhdGVtZW50IG11c3QgcHJlY2VkZSBhbGwgdXNlcyBvZiB0aGUgbmFtZS5cblxuVGhlIGJ1aWx0aW5zIG5hbWVzcGFjZSBhc3NvY2lhdGVkIHdpdGggdGhlIGV4ZWN1dGlvbiBvZiBhIGNvZGUgYmxvY2tcbmlzIGFjdHVhbGx5IGZvdW5kIGJ5IGxvb2tpbmcgdXAgdGhlIG5hbWUgIl9fYnVpbHRpbnNfXyIgaW4gaXRzIGdsb2JhbFxubmFtZXNwYWNlOyB0aGlzIHNob3VsZCBiZSBhIGRpY3Rpb25hcnkgb3IgYSBtb2R1bGUgKGluIHRoZSBsYXR0ZXIgY2FzZVxudGhlIG1vZHVsZVwncyBkaWN0aW9uYXJ5IGlzIHVzZWQpLiAgQnkgZGVmYXVsdCwgd2hlbiBpbiB0aGUgIl9fbWFpbl9fIlxubW9kdWxlLCAiX19idWlsdGluc19fIiBpcyB0aGUgYnVpbHQtaW4gbW9kdWxlICJidWlsdGlucyI7IHdoZW4gaW4gYW55XG5vdGhlciBtb2R1bGUsICJfX2J1aWx0aW5zX18iIGlzIGFuIGFsaWFzIGZvciB0aGUgZGljdGlvbmFyeSBvZiB0aGVcbiJidWlsdGlucyIgbW9kdWxlIGl0c2VsZi4gICJfX2J1aWx0aW5zX18iIGNhbiBiZSBzZXQgdG8gYSB1c2VyLWNyZWF0ZWRcbmRpY3Rpb25hcnkgdG8gY3JlYXRlIGEgd2VhayBmb3JtIG9mIHJlc3RyaWN0ZWQgZXhlY3V0aW9uLlxuXG4qKkNQeXRob24gaW1wbGVtZW50YXRpb24gZGV0YWlsOioqIFVzZXJzIHNob3VsZCBub3QgdG91Y2hcbiJfX2J1aWx0aW5zX18iOyBpdCBpcyBzdHJpY3RseSBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwuICBVc2Vyc1xud2FudGluZyB0byBvdmVycmlkZSB2YWx1ZXMgaW4gdGhlIGJ1aWx0aW5zIG5hbWVzcGFjZSBzaG91bGQgImltcG9ydCJcbnRoZSAiYnVpbHRpbnMiIG1vZHVsZSBhbmQgbW9kaWZ5IGl0cyBhdHRyaWJ1dGVzIGFwcHJvcHJpYXRlbHkuXG5cblRoZSBuYW1lc3BhY2UgZm9yIGEgbW9kdWxlIGlzIGF1dG9tYXRpY2FsbHkgY3JlYXRlZCB0aGUgZmlyc3QgdGltZSBhXG5tb2R1bGUgaXMgaW1wb3J0ZWQuICBUaGUgbWFpbiBtb2R1bGUgZm9yIGEgc2NyaXB0IGlzIGFsd2F5cyBjYWxsZWRcbiJfX21haW5fXyIuXG5cblRoZSAiZ2xvYmFsIiBzdGF0ZW1lbnQgaGFzIHRoZSBzYW1lIHNjb3BlIGFzIGEgbmFtZSBiaW5kaW5nIG9wZXJhdGlvblxuaW4gdGhlIHNhbWUgYmxvY2suICBJZiB0aGUgbmVhcmVzdCBlbmNsb3Npbmcgc2NvcGUgZm9yIGEgZnJlZSB2YXJpYWJsZVxuY29udGFpbnMgYSBnbG9iYWwgc3RhdGVtZW50LCB0aGUgZnJlZSB2YXJpYWJsZSBpcyB0cmVhdGVkIGFzIGEgZ2xvYmFsLlxuXG5BIGNsYXNzIGRlZmluaXRpb24gaXMgYW4gZXhlY3V0YWJsZSBzdGF0ZW1lbnQgdGhhdCBtYXkgdXNlIGFuZCBkZWZpbmVcbm5hbWVzLiBUaGVzZSByZWZlcmVuY2VzIGZvbGxvdyB0aGUgbm9ybWFsIHJ1bGVzIGZvciBuYW1lIHJlc29sdXRpb24uXG5UaGUgbmFtZXNwYWNlIG9mIHRoZSBjbGFzcyBkZWZpbml0aW9uIGJlY29tZXMgdGhlIGF0dHJpYnV0ZSBkaWN0aW9uYXJ5XG5vZiB0aGUgY2xhc3MuICBOYW1lcyBkZWZpbmVkIGF0IHRoZSBjbGFzcyBzY29wZSBhcmUgbm90IHZpc2libGUgaW5cbm1ldGhvZHMuXG5cblxuSW50ZXJhY3Rpb24gd2l0aCBkeW5hbWljIGZlYXR1cmVzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuVGhlcmUgYXJlIHNldmVyYWwgY2FzZXMgd2hlcmUgUHl0aG9uIHN0YXRlbWVudHMgYXJlIGlsbGVnYWwgd2hlbiB1c2VkXG5pbiBjb25qdW5jdGlvbiB3aXRoIG5lc3RlZCBzY29wZXMgdGhhdCBjb250YWluIGZyZWUgdmFyaWFibGVzLlxuXG5JZiBhIHZhcmlhYmxlIGlzIHJlZmVyZW5jZWQgaW4gYW4gZW5jbG9zaW5nIHNjb3BlLCBpdCBpcyBpbGxlZ2FsIHRvXG5kZWxldGUgdGhlIG5hbWUuICBBbiBlcnJvciB3aWxsIGJlIHJlcG9ydGVkIGF0IGNvbXBpbGUgdGltZS5cblxuSWYgdGhlIHdpbGQgY2FyZCBmb3JtIG9mIGltcG9ydCAtLS0gImltcG9ydCAqIiAtLS0gaXMgdXNlZCBpbiBhXG5mdW5jdGlvbiBhbmQgdGhlIGZ1bmN0aW9uIGNvbnRhaW5zIG9yIGlzIGEgbmVzdGVkIGJsb2NrIHdpdGggZnJlZVxudmFyaWFibGVzLCB0aGUgY29tcGlsZXIgd2lsbCByYWlzZSBhICJTeW50YXhFcnJvciIuXG5cblRoZSAiZXZhbCgpIiBhbmQgImV4ZWMoKSIgZnVuY3Rpb25zIGRvIG5vdCBoYXZlIGFjY2VzcyB0byB0aGUgZnVsbFxuZW52aXJvbm1lbnQgZm9yIHJlc29sdmluZyBuYW1lcy4gIE5hbWVzIG1heSBiZSByZXNvbHZlZCBpbiB0aGUgbG9jYWxcbmFuZCBnbG9iYWwgbmFtZXNwYWNlcyBvZiB0aGUgY2FsbGVyLiAgRnJlZSB2YXJpYWJsZXMgYXJlIG5vdCByZXNvbHZlZFxuaW4gdGhlIG5lYXJlc3QgZW5jbG9zaW5nIG5hbWVzcGFjZSwgYnV0IGluIHRoZSBnbG9iYWwgbmFtZXNwYWNlLiAgWzFdXG5UaGUgImV4ZWMoKSIgYW5kICJldmFsKCkiIGZ1bmN0aW9ucyBoYXZlIG9wdGlvbmFsIGFyZ3VtZW50cyB0b1xub3ZlcnJpZGUgdGhlIGdsb2JhbCBhbmQgbG9jYWwgbmFtZXNwYWNlLiAgSWYgb25seSBvbmUgbmFtZXNwYWNlIGlzXG5zcGVjaWZpZWQsIGl0IGlzIHVzZWQgZm9yIGJvdGguXG4nLAotICdub25sb2NhbCc6ICdcblRoZSAibm9ubG9jYWwiIHN0YXRlbWVudFxuKioqKioqKioqKioqKioqKioqKioqKioqXG5cbiAgIG5vbmxvY2FsX3N0bXQgOjo9ICJub25sb2NhbCIgaWRlbnRpZmllciAoIiwiIGlkZW50aWZpZXIpKlxuXG5UaGUgIm5vbmxvY2FsIiBzdGF0ZW1lbnQgY2F1c2VzIHRoZSBsaXN0ZWQgaWRlbnRpZmllcnMgdG8gcmVmZXIgdG9cbnByZXZpb3VzbHkgYm91bmQgdmFyaWFibGVzIGluIHRoZSBuZWFyZXN0IGVuY2xvc2luZyBzY29wZS4gIFRoaXMgaXNcbmltcG9ydGFudCBiZWNhdXNlIHRoZSBkZWZhdWx0IGJlaGF2aW9yIGZvciBiaW5kaW5nIGlzIHRvIHNlYXJjaCB0aGVcbmxvY2FsIG5hbWVzcGFjZSBmaXJzdC4gIFRoZSBzdGF0ZW1lbnQgYWxsb3dzIGVuY2Fwc3VsYXRlZCBjb2RlIHRvXG5yZWJpbmQgdmFyaWFibGVzIG91dHNpZGUgb2YgdGhlIGxvY2FsIHNjb3BlIGJlc2lkZXMgdGhlIGdsb2JhbFxuKG1vZHVsZSkgc2NvcGUuXG5cbk5hbWVzIGxpc3RlZCBpbiBhICJub25sb2NhbCIgc3RhdGVtZW50LCB1bmxpa2UgdG8gdGhvc2UgbGlzdGVkIGluIGFcbiJnbG9iYWwiIHN0YXRlbWVudCwgbXVzdCByZWZlciB0byBwcmUtZXhpc3RpbmcgYmluZGluZ3MgaW4gYW5cbmVuY2xvc2luZyBzY29wZSAodGhlIHNjb3BlIGluIHdoaWNoIGEgbmV3IGJpbmRpbmcgc2hvdWxkIGJlIGNyZWF0ZWRcbmNhbm5vdCBiZSBkZXRlcm1pbmVkIHVuYW1iaWd1b3VzbHkpLlxuXG5OYW1lcyBsaXN0ZWQgaW4gYSAibm9ubG9jYWwiIHN0YXRlbWVudCBtdXN0IG5vdCBjb2xsaWRlIHdpdGggcHJlLVxuZXhpc3RpbmcgYmluZGluZ3MgaW4gdGhlIGxvY2FsIHNjb3BlLlxuXG5TZWUgYWxzbzogKipQRVAgMzEwNCoqIC0gQWNjZXNzIHRvIE5hbWVzIGluIE91dGVyIFNjb3Blc1xuXG4gICAgIFRoZSBzcGVjaWZpY2F0aW9uIGZvciB0aGUgIm5vbmxvY2FsIiBzdGF0ZW1lbnQuXG4nLAotICdudW1iZXJzJzogJ1xuTnVtZXJpYyBsaXRlcmFsc1xuKioqKioqKioqKioqKioqKlxuXG5UaGVyZSBhcmUgdGhyZWUgdHlwZXMgb2YgbnVtZXJpYyBsaXRlcmFsczogaW50ZWdlcnMsIGZsb2F0aW5nIHBvaW50XG5udW1iZXJzLCBhbmQgaW1hZ2luYXJ5IG51bWJlcnMuICBUaGVyZSBhcmUgbm8gY29tcGxleCBsaXRlcmFsc1xuKGNvbXBsZXggbnVtYmVycyBjYW4gYmUgZm9ybWVkIGJ5IGFkZGluZyBhIHJlYWwgbnVtYmVyIGFuZCBhblxuaW1hZ2luYXJ5IG51bWJlcikuXG5cbk5vdGUgdGhhdCBudW1lcmljIGxpdGVyYWxzIGRvIG5vdCBpbmNsdWRlIGEgc2lnbjsgYSBwaHJhc2UgbGlrZSAiLTEiXG5pcyBhY3R1YWxseSBhbiBleHByZXNzaW9uIGNvbXBvc2VkIG9mIHRoZSB1bmFyeSBvcGVyYXRvciBcJyItIlwnIGFuZCB0aGVcbmxpdGVyYWwgIjEiLlxuJywKLSAnbnVtZXJpYy10eXBlcyc6ICdcbkVtdWxhdGluZyBudW1lcmljIHR5cGVzXG4qKioqKioqKioqKioqKioqKioqKioqKlxuXG5UaGUgZm9sbG93aW5nIG1ldGhvZHMgY2FuIGJlIGRlZmluZWQgdG8gZW11bGF0ZSBudW1lcmljIG9iamVjdHMuXG5NZXRob2RzIGNvcnJlc3BvbmRpbmcgdG8gb3BlcmF0aW9ucyB0aGF0IGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZVxucGFydGljdWxhciBraW5kIG9mIG51bWJlciBpbXBsZW1lbnRlZCAoZS5nLiwgYml0d2lzZSBvcGVyYXRpb25zIGZvclxubm9uLWludGVncmFsIG51bWJlcnMpIHNob3VsZCBiZSBsZWZ0IHVuZGVmaW5lZC5cblxub2JqZWN0Ll9fYWRkX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19zdWJfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX211bF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fdHJ1ZWRpdl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fZmxvb3JkaXZfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX21vZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fZGl2bW9kX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19wb3dfXyhzZWxmLCBvdGhlclssIG1vZHVsb10pXG5vYmplY3QuX19sc2hpZnRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3JzaGlmdF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fYW5kX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX194b3JfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX29yX18oc2VsZiwgb3RoZXIpXG5cbiAgIFRoZXNlIG1ldGhvZHMgYXJlIGNhbGxlZCB0byBpbXBsZW1lbnQgdGhlIGJpbmFyeSBhcml0aG1ldGljXG4gICBvcGVyYXRpb25zICgiKyIsICItIiwgIioiLCAiLyIsICIvLyIsICIlIiwgImRpdm1vZCgpIiwgInBvdygpIixcbiAgICIqKiIsICI8PCIsICI+PiIsICImIiwgIl4iLCAifCIpLiAgRm9yIGluc3RhbmNlLCB0byBldmFsdWF0ZSB0aGVcbiAgIGV4cHJlc3Npb24gInggKyB5Iiwgd2hlcmUgKngqIGlzIGFuIGluc3RhbmNlIG9mIGEgY2xhc3MgdGhhdCBoYXMgYW5cbiAgICJfX2FkZF9fKCkiIG1ldGhvZCwgInguX19hZGRfXyh5KSIgaXMgY2FsbGVkLiAgVGhlICJfX2Rpdm1vZF9fKCkiXG4gICBtZXRob2Qgc2hvdWxkIGJlIHRoZSBlcXVpdmFsZW50IHRvIHVzaW5nICJfX2Zsb29yZGl2X18oKSIgYW5kXG4gICAiX19tb2RfXygpIjsgaXQgc2hvdWxkIG5vdCBiZSByZWxhdGVkIHRvICJfX3RydWVkaXZfXygpIi4gIE5vdGVcbiAgIHRoYXQgIl9fcG93X18oKSIgc2hvdWxkIGJlIGRlZmluZWQgdG8gYWNjZXB0IGFuIG9wdGlvbmFsIHRoaXJkXG4gICBhcmd1bWVudCBpZiB0aGUgdGVybmFyeSB2ZXJzaW9uIG9mIHRoZSBidWlsdC1pbiAicG93KCkiIGZ1bmN0aW9uIGlzXG4gICB0byBiZSBzdXBwb3J0ZWQuXG5cbiAgIElmIG9uZSBvZiB0aG9zZSBtZXRob2RzIGRvZXMgbm90IHN1cHBvcnQgdGhlIG9wZXJhdGlvbiB3aXRoIHRoZVxuICAgc3VwcGxpZWQgYXJndW1lbnRzLCBpdCBzaG91bGQgcmV0dXJuICJOb3RJbXBsZW1lbnRlZCIuXG5cbm9iamVjdC5fX3JhZGRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3JzdWJfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3JtdWxfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3J0cnVlZGl2X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yZmxvb3JkaXZfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3Jtb2RfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3JkaXZtb2RfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3Jwb3dfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3Jsc2hpZnRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3Jyc2hpZnRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3JhbmRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3J4b3JfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3Jvcl9fKHNlbGYsIG90aGVyKVxuXG4gICBUaGVzZSBtZXRob2RzIGFyZSBjYWxsZWQgdG8gaW1wbGVtZW50IHRoZSBiaW5hcnkgYXJpdGhtZXRpY1xuICAgb3BlcmF0aW9ucyAoIisiLCAiLSIsICIqIiwgIi8iLCAiLy8iLCAiJSIsICJkaXZtb2QoKSIsICJwb3coKSIsXG4gICAiKioiLCAiPDwiLCAiPj4iLCAiJiIsICJeIiwgInwiKSB3aXRoIHJlZmxlY3RlZCAoc3dhcHBlZCkgb3BlcmFuZHMuXG4gICBUaGVzZSBmdW5jdGlvbnMgYXJlIG9ubHkgY2FsbGVkIGlmIHRoZSBsZWZ0IG9wZXJhbmQgZG9lcyBub3RcbiAgIHN1cHBvcnQgdGhlIGNvcnJlc3BvbmRpbmcgb3BlcmF0aW9uIGFuZCB0aGUgb3BlcmFuZHMgYXJlIG9mXG4gICBkaWZmZXJlbnQgdHlwZXMuIFsyXSAgRm9yIGluc3RhbmNlLCB0byBldmFsdWF0ZSB0aGUgZXhwcmVzc2lvbiAieCAtXG4gICB5Iiwgd2hlcmUgKnkqIGlzIGFuIGluc3RhbmNlIG9mIGEgY2xhc3MgdGhhdCBoYXMgYW4gIl9fcnN1Yl9fKCkiXG4gICBtZXRob2QsICJ5Ll9fcnN1Yl9fKHgpIiBpcyBjYWxsZWQgaWYgInguX19zdWJfXyh5KSIgcmV0dXJuc1xuICAgKk5vdEltcGxlbWVudGVkKi5cblxuICAgTm90ZSB0aGF0IHRlcm5hcnkgInBvdygpIiB3aWxsIG5vdCB0cnkgY2FsbGluZyAiX19ycG93X18oKSIgKHRoZVxuICAgY29lcmNpb24gcnVsZXMgd291bGQgYmVjb21lIHRvbyBjb21wbGljYXRlZCkuXG5cbiAgIE5vdGU6IElmIHRoZSByaWdodCBvcGVyYW5kXCdzIHR5cGUgaXMgYSBzdWJjbGFzcyBvZiB0aGUgbGVmdFxuICAgICBvcGVyYW5kXCdzIHR5cGUgYW5kIHRoYXQgc3ViY2xhc3MgcHJvdmlkZXMgdGhlIHJlZmxlY3RlZCBtZXRob2RcbiAgICAgZm9yIHRoZSBvcGVyYXRpb24sIHRoaXMgbWV0aG9kIHdpbGwgYmUgY2FsbGVkIGJlZm9yZSB0aGUgbGVmdFxuICAgICBvcGVyYW5kXCdzIG5vbi1yZWZsZWN0ZWQgbWV0aG9kLiAgVGhpcyBiZWhhdmlvciBhbGxvd3Mgc3ViY2xhc3Nlc1xuICAgICB0byBvdmVycmlkZSB0aGVpciBhbmNlc3RvcnNcJyBvcGVyYXRpb25zLlxuXG5vYmplY3QuX19pYWRkX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19pc3ViX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19pbXVsX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19pdHJ1ZWRpdl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faWZsb29yZGl2X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19pbW9kX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19pcG93X18oc2VsZiwgb3RoZXJbLCBtb2R1bG9dKVxub2JqZWN0Ll9faWxzaGlmdF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faXJzaGlmdF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faWFuZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faXhvcl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faW9yX18oc2VsZiwgb3RoZXIpXG5cbiAgIFRoZXNlIG1ldGhvZHMgYXJlIGNhbGxlZCB0byBpbXBsZW1lbnQgdGhlIGF1Z21lbnRlZCBhcml0aG1ldGljXG4gICBhc3NpZ25tZW50cyAoIis9IiwgIi09IiwgIio9IiwgIi89IiwgIi8vPSIsICIlPSIsICIqKj0iLCAiPDw9IixcbiAgICI+Pj0iLCAiJj0iLCAiXj0iLCAifD0iKS4gIFRoZXNlIG1ldGhvZHMgc2hvdWxkIGF0dGVtcHQgdG8gZG8gdGhlXG4gICBvcGVyYXRpb24gaW4tcGxhY2UgKG1vZGlmeWluZyAqc2VsZiopIGFuZCByZXR1cm4gdGhlIHJlc3VsdCAod2hpY2hcbiAgIGNvdWxkIGJlLCBidXQgZG9lcyBub3QgaGF2ZSB0byBiZSwgKnNlbGYqKS4gIElmIGEgc3BlY2lmaWMgbWV0aG9kXG4gICBpcyBub3QgZGVmaW5lZCwgdGhlIGF1Z21lbnRlZCBhc3NpZ25tZW50IGZhbGxzIGJhY2sgdG8gdGhlIG5vcm1hbFxuICAgbWV0aG9kcy4gIEZvciBpbnN0YW5jZSwgdG8gZXhlY3V0ZSB0aGUgc3RhdGVtZW50ICJ4ICs9IHkiLCB3aGVyZVxuICAgKngqIGlzIGFuIGluc3RhbmNlIG9mIGEgY2xhc3MgdGhhdCBoYXMgYW4gIl9faWFkZF9fKCkiIG1ldGhvZCxcbiAgICJ4Ll9faWFkZF9fKHkpIiBpcyBjYWxsZWQuICBJZiAqeCogaXMgYW4gaW5zdGFuY2Ugb2YgYSBjbGFzcyB0aGF0XG4gICBkb2VzIG5vdCBkZWZpbmUgYSAiX19pYWRkX18oKSIgbWV0aG9kLCAieC5fX2FkZF9fKHkpIiBhbmRcbiAgICJ5Ll9fcmFkZF9fKHgpIiBhcmUgY29uc2lkZXJlZCwgYXMgd2l0aCB0aGUgZXZhbHVhdGlvbiBvZiAieCArIHkiLlxuXG5vYmplY3QuX19uZWdfXyhzZWxmKVxub2JqZWN0Ll9fcG9zX18oc2VsZilcbm9iamVjdC5fX2Fic19fKHNlbGYpXG5vYmplY3QuX19pbnZlcnRfXyhzZWxmKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IHRoZSB1bmFyeSBhcml0aG1ldGljIG9wZXJhdGlvbnMgKCItIiwgIisiLFxuICAgImFicygpIiBhbmQgIn4iKS5cblxub2JqZWN0Ll9fY29tcGxleF9fKHNlbGYpXG5vYmplY3QuX19pbnRfXyhzZWxmKVxub2JqZWN0Ll9fZmxvYXRfXyhzZWxmKVxub2JqZWN0Ll9fcm91bmRfXyhzZWxmWywgbl0pXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgdGhlIGJ1aWx0LWluIGZ1bmN0aW9ucyAiY29tcGxleCgpIiwgImludCgpIixcbiAgICJmbG9hdCgpIiBhbmQgInJvdW5kKCkiLiAgU2hvdWxkIHJldHVybiBhIHZhbHVlIG9mIHRoZSBhcHByb3ByaWF0ZVxuICAgdHlwZS5cblxub2JqZWN0Ll9faW5kZXhfXyhzZWxmKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50ICJvcGVyYXRvci5pbmRleCgpIi4gIEFsc28gY2FsbGVkIHdoZW5ldmVyXG4gICBQeXRob24gbmVlZHMgYW4gaW50ZWdlciBvYmplY3QgKHN1Y2ggYXMgaW4gc2xpY2luZywgb3IgaW4gdGhlXG4gICBidWlsdC1pbiAiYmluKCkiLCAiaGV4KCkiIGFuZCAib2N0KCkiIGZ1bmN0aW9ucykuIE11c3QgcmV0dXJuIGFuXG4gICBpbnRlZ2VyLlxuJywKLSAnb2JqZWN0cyc6ICdcbk9iamVjdHMsIHZhbHVlcyBhbmQgdHlwZXNcbioqKioqKioqKioqKioqKioqKioqKioqKipcblxuKk9iamVjdHMqIGFyZSBQeXRob25cJ3MgYWJzdHJhY3Rpb24gZm9yIGRhdGEuICBBbGwgZGF0YSBpbiBhIFB5dGhvblxucHJvZ3JhbSBpcyByZXByZXNlbnRlZCBieSBvYmplY3RzIG9yIGJ5IHJlbGF0aW9ucyBiZXR3ZWVuIG9iamVjdHMuIChJblxuYSBzZW5zZSwgYW5kIGluIGNvbmZvcm1hbmNlIHRvIFZvbiBOZXVtYW5uXCdzIG1vZGVsIG9mIGEgInN0b3JlZFxucHJvZ3JhbSBjb21wdXRlciwiIGNvZGUgaXMgYWxzbyByZXByZXNlbnRlZCBieSBvYmplY3RzLilcblxuRXZlcnkgb2JqZWN0IGhhcyBhbiBpZGVudGl0eSwgYSB0eXBlIGFuZCBhIHZhbHVlLiAgQW4gb2JqZWN0XCdzXG4qaWRlbnRpdHkqIG5ldmVyIGNoYW5nZXMgb25jZSBpdCBoYXMgYmVlbiBjcmVhdGVkOyB5b3UgbWF5IHRoaW5rIG9mIGl0XG5hcyB0aGUgb2JqZWN0XCdzIGFkZHJlc3MgaW4gbWVtb3J5LiAgVGhlIFwnImlzIlwnIG9wZXJhdG9yIGNvbXBhcmVzIHRoZVxuaWRlbnRpdHkgb2YgdHdvIG9iamVjdHM7IHRoZSAiaWQoKSIgZnVuY3Rpb24gcmV0dXJucyBhbiBpbnRlZ2VyXG5yZXByZXNlbnRpbmcgaXRzIGlkZW50aXR5LlxuXG4qKkNQeXRob24gaW1wbGVtZW50YXRpb24gZGV0YWlsOioqIEZvciBDUHl0aG9uLCAiaWQoeCkiIGlzIHRoZSBtZW1vcnlcbmFkZHJlc3Mgd2hlcmUgIngiIGlzIHN0b3JlZC5cblxuQW4gb2JqZWN0XCdzIHR5cGUgZGV0ZXJtaW5lcyB0aGUgb3BlcmF0aW9ucyB0aGF0IHRoZSBvYmplY3Qgc3VwcG9ydHNcbihlLmcuLCAiZG9lcyBpdCBoYXZlIGEgbGVuZ3RoPyIpIGFuZCBhbHNvIGRlZmluZXMgdGhlIHBvc3NpYmxlIHZhbHVlc1xuZm9yIG9iamVjdHMgb2YgdGhhdCB0eXBlLiAgVGhlICJ0eXBlKCkiIGZ1bmN0aW9uIHJldHVybnMgYW4gb2JqZWN0XCdzXG50eXBlICh3aGljaCBpcyBhbiBvYmplY3QgaXRzZWxmKS4gIExpa2UgaXRzIGlkZW50aXR5LCBhbiBvYmplY3RcJ3Ncbip0eXBlKiBpcyBhbHNvIHVuY2hhbmdlYWJsZS4gWzFdXG5cblRoZSAqdmFsdWUqIG9mIHNvbWUgb2JqZWN0cyBjYW4gY2hhbmdlLiAgT2JqZWN0cyB3aG9zZSB2YWx1ZSBjYW5cbmNoYW5nZSBhcmUgc2FpZCB0byBiZSAqbXV0YWJsZSo7IG9iamVjdHMgd2hvc2UgdmFsdWUgaXMgdW5jaGFuZ2VhYmxlXG5vbmNlIHRoZXkgYXJlIGNyZWF0ZWQgYXJlIGNhbGxlZCAqaW1tdXRhYmxlKi4gKFRoZSB2YWx1ZSBvZiBhblxuaW1tdXRhYmxlIGNvbnRhaW5lciBvYmplY3QgdGhhdCBjb250YWlucyBhIHJlZmVyZW5jZSB0byBhIG11dGFibGVcbm9iamVjdCBjYW4gY2hhbmdlIHdoZW4gdGhlIGxhdHRlclwncyB2YWx1ZSBpcyBjaGFuZ2VkOyBob3dldmVyIHRoZVxuY29udGFpbmVyIGlzIHN0aWxsIGNvbnNpZGVyZWQgaW1tdXRhYmxlLCBiZWNhdXNlIHRoZSBjb2xsZWN0aW9uIG9mXG5vYmplY3RzIGl0IGNvbnRhaW5zIGNhbm5vdCBiZSBjaGFuZ2VkLiAgU28sIGltbXV0YWJpbGl0eSBpcyBub3RcbnN0cmljdGx5IHRoZSBzYW1lIGFzIGhhdmluZyBhbiB1bmNoYW5nZWFibGUgdmFsdWUsIGl0IGlzIG1vcmUgc3VidGxlLilcbkFuIG9iamVjdFwncyBtdXRhYmlsaXR5IGlzIGRldGVybWluZWQgYnkgaXRzIHR5cGU7IGZvciBpbnN0YW5jZSxcbm51bWJlcnMsIHN0cmluZ3MgYW5kIHR1cGxlcyBhcmUgaW1tdXRhYmxlLCB3aGlsZSBkaWN0aW9uYXJpZXMgYW5kXG5saXN0cyBhcmUgbXV0YWJsZS5cblxuT2JqZWN0cyBhcmUgbmV2ZXIgZXhwbGljaXRseSBkZXN0cm95ZWQ7IGhvd2V2ZXIsIHdoZW4gdGhleSBiZWNvbWVcbnVucmVhY2hhYmxlIHRoZXkgbWF5IGJlIGdhcmJhZ2UtY29sbGVjdGVkLiAgQW4gaW1wbGVtZW50YXRpb24gaXNcbmFsbG93ZWQgdG8gcG9zdHBvbmUgZ2FyYmFnZSBjb2xsZWN0aW9uIG9yIG9taXQgaXQgYWx0b2dldGhlciAtLS0gaXQgaXNcbmEgbWF0dGVyIG9mIGltcGxlbWVudGF0aW9uIHF1YWxpdHkgaG93IGdhcmJhZ2UgY29sbGVjdGlvbiBpc1xuaW1wbGVtZW50ZWQsIGFzIGxvbmcgYXMgbm8gb2JqZWN0cyBhcmUgY29sbGVjdGVkIHRoYXQgYXJlIHN0aWxsXG5yZWFjaGFibGUuXG5cbioqQ1B5dGhvbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWw6KiogQ1B5dGhvbiBjdXJyZW50bHkgdXNlcyBhIHJlZmVyZW5jZS1cbmNvdW50aW5nIHNjaGVtZSB3aXRoIChvcHRpb25hbCkgZGVsYXllZCBkZXRlY3Rpb24gb2YgY3ljbGljYWxseSBsaW5rZWRcbmdhcmJhZ2UsIHdoaWNoIGNvbGxlY3RzIG1vc3Qgb2JqZWN0cyBhcyBzb29uIGFzIHRoZXkgYmVjb21lXG51bnJlYWNoYWJsZSwgYnV0IGlzIG5vdCBndWFyYW50ZWVkIHRvIGNvbGxlY3QgZ2FyYmFnZSBjb250YWluaW5nXG5jaXJjdWxhciByZWZlcmVuY2VzLiAgU2VlIHRoZSBkb2N1bWVudGF0aW9uIG9mIHRoZSAiZ2MiIG1vZHVsZSBmb3JcbmluZm9ybWF0aW9uIG9uIGNvbnRyb2xsaW5nIHRoZSBjb2xsZWN0aW9uIG9mIGN5Y2xpYyBnYXJiYWdlLiBPdGhlclxuaW1wbGVtZW50YXRpb25zIGFjdCBkaWZmZXJlbnRseSBhbmQgQ1B5dGhvbiBtYXkgY2hhbmdlLiBEbyBub3QgZGVwZW5kXG5vbiBpbW1lZGlhdGUgZmluYWxpemF0aW9uIG9mIG9iamVjdHMgd2hlbiB0aGV5IGJlY29tZSB1bnJlYWNoYWJsZSAoZXg6XG5hbHdheXMgY2xvc2UgZmlsZXMpLlxuXG5Ob3RlIHRoYXQgdGhlIHVzZSBvZiB0aGUgaW1wbGVtZW50YXRpb25cJ3MgdHJhY2luZyBvciBkZWJ1Z2dpbmdcbmZhY2lsaXRpZXMgbWF5IGtlZXAgb2JqZWN0cyBhbGl2ZSB0aGF0IHdvdWxkIG5vcm1hbGx5IGJlIGNvbGxlY3RhYmxlLlxuQWxzbyBub3RlIHRoYXQgY2F0Y2hpbmcgYW4gZXhjZXB0aW9uIHdpdGggYSBcJyJ0cnkiLi4uImV4Y2VwdCJcJ1xuc3RhdGVtZW50IG1heSBrZWVwIG9iamVjdHMgYWxpdmUuXG5cblNvbWUgb2JqZWN0cyBjb250YWluIHJlZmVyZW5jZXMgdG8gImV4dGVybmFsIiByZXNvdXJjZXMgc3VjaCBhcyBvcGVuXG5maWxlcyBvciB3aW5kb3dzLiAgSXQgaXMgdW5kZXJzdG9vZCB0aGF0IHRoZXNlIHJlc291cmNlcyBhcmUgZnJlZWRcbndoZW4gdGhlIG9iamVjdCBpcyBnYXJiYWdlLWNvbGxlY3RlZCwgYnV0IHNpbmNlIGdhcmJhZ2UgY29sbGVjdGlvbiBpc1xubm90IGd1YXJhbnRlZWQgdG8gaGFwcGVuLCBzdWNoIG9iamVjdHMgYWxzbyBwcm92aWRlIGFuIGV4cGxpY2l0IHdheSB0b1xucmVsZWFzZSB0aGUgZXh0ZXJuYWwgcmVzb3VyY2UsIHVzdWFsbHkgYSAiY2xvc2UoKSIgbWV0aG9kLiBQcm9ncmFtc1xuYXJlIHN0cm9uZ2x5IHJlY29tbWVuZGVkIHRvIGV4cGxpY2l0bHkgY2xvc2Ugc3VjaCBvYmplY3RzLiAgVGhlXG5cJyJ0cnkiLi4uImZpbmFsbHkiXCcgc3RhdGVtZW50IGFuZCB0aGUgXCcid2l0aCJcJyBzdGF0ZW1lbnQgcHJvdmlkZVxuY29udmVuaWVudCB3YXlzIHRvIGRvIHRoaXMuXG5cblNvbWUgb2JqZWN0cyBjb250YWluIHJlZmVyZW5jZXMgdG8gb3RoZXIgb2JqZWN0czsgdGhlc2UgYXJlIGNhbGxlZFxuKmNvbnRhaW5lcnMqLiBFeGFtcGxlcyBvZiBjb250YWluZXJzIGFyZSB0dXBsZXMsIGxpc3RzIGFuZFxuZGljdGlvbmFyaWVzLiAgVGhlIHJlZmVyZW5jZXMgYXJlIHBhcnQgb2YgYSBjb250YWluZXJcJ3MgdmFsdWUuICBJblxubW9zdCBjYXNlcywgd2hlbiB3ZSB0YWxrIGFib3V0IHRoZSB2YWx1ZSBvZiBhIGNvbnRhaW5lciwgd2UgaW1wbHkgdGhlXG52YWx1ZXMsIG5vdCB0aGUgaWRlbnRpdGllcyBvZiB0aGUgY29udGFpbmVkIG9iamVjdHM7IGhvd2V2ZXIsIHdoZW4gd2VcbnRhbGsgYWJvdXQgdGhlIG11dGFiaWxpdHkgb2YgYSBjb250YWluZXIsIG9ubHkgdGhlIGlkZW50aXRpZXMgb2YgdGhlXG5pbW1lZGlhdGVseSBjb250YWluZWQgb2JqZWN0cyBhcmUgaW1wbGllZC4gIFNvLCBpZiBhbiBpbW11dGFibGVcbmNvbnRhaW5lciAobGlrZSBhIHR1cGxlKSBjb250YWlucyBhIHJlZmVyZW5jZSB0byBhIG11dGFibGUgb2JqZWN0LCBpdHNcbnZhbHVlIGNoYW5nZXMgaWYgdGhhdCBtdXRhYmxlIG9iamVjdCBpcyBjaGFuZ2VkLlxuXG5UeXBlcyBhZmZlY3QgYWxtb3N0IGFsbCBhc3BlY3RzIG9mIG9iamVjdCBiZWhhdmlvci4gIEV2ZW4gdGhlXG5pbXBvcnRhbmNlIG9mIG9iamVjdCBpZGVudGl0eSBpcyBhZmZlY3RlZCBpbiBzb21lIHNlbnNlOiBmb3IgaW1tdXRhYmxlXG50eXBlcywgb3BlcmF0aW9ucyB0aGF0IGNvbXB1dGUgbmV3IHZhbHVlcyBtYXkgYWN0dWFsbHkgcmV0dXJuIGFcbnJlZmVyZW5jZSB0byBhbnkgZXhpc3Rpbmcgb2JqZWN0IHdpdGggdGhlIHNhbWUgdHlwZSBhbmQgdmFsdWUsIHdoaWxlXG5mb3IgbXV0YWJsZSBvYmplY3RzIHRoaXMgaXMgbm90IGFsbG93ZWQuICBFLmcuLCBhZnRlciAiYSA9IDE7IGIgPSAxIixcbiJhIiBhbmQgImIiIG1heSBvciBtYXkgbm90IHJlZmVyIHRvIHRoZSBzYW1lIG9iamVjdCB3aXRoIHRoZSB2YWx1ZVxub25lLCBkZXBlbmRpbmcgb24gdGhlIGltcGxlbWVudGF0aW9uLCBidXQgYWZ0ZXIgImMgPSBbXTsgZCA9IFtdIiwgImMiXG5hbmQgImQiIGFyZSBndWFyYW50ZWVkIHRvIHJlZmVyIHRvIHR3byBkaWZmZXJlbnQsIHVuaXF1ZSwgbmV3bHlcbmNyZWF0ZWQgZW1wdHkgbGlzdHMuIChOb3RlIHRoYXQgImMgPSBkID0gW10iIGFzc2lnbnMgdGhlIHNhbWUgb2JqZWN0XG50byBib3RoICJjIiBhbmQgImQiLilcbicsCi0gJ29wZXJhdG9yLXN1bW1hcnknOiAnXG5PcGVyYXRvciBwcmVjZWRlbmNlXG4qKioqKioqKioqKioqKioqKioqXG5cblRoZSBmb2xsb3dpbmcgdGFibGUgc3VtbWFyaXplcyB0aGUgb3BlcmF0b3IgcHJlY2VkZW5jZXMgaW4gUHl0aG9uLFxuZnJvbSBsb3dlc3QgcHJlY2VkZW5jZSAobGVhc3QgYmluZGluZykgdG8gaGlnaGVzdCBwcmVjZWRlbmNlIChtb3N0XG5iaW5kaW5nKS4gIE9wZXJhdG9ycyBpbiB0aGUgc2FtZSBib3ggaGF2ZSB0aGUgc2FtZSBwcmVjZWRlbmNlLiAgVW5sZXNzXG50aGUgc3ludGF4IGlzIGV4cGxpY2l0bHkgZ2l2ZW4sIG9wZXJhdG9ycyBhcmUgYmluYXJ5LiAgT3BlcmF0b3JzIGluXG50aGUgc2FtZSBib3ggZ3JvdXAgbGVmdCB0byByaWdodCAoZXhjZXB0IGZvciBjb21wYXJpc29ucywgaW5jbHVkaW5nXG50ZXN0cywgd2hpY2ggYWxsIGhhdmUgdGhlIHNhbWUgcHJlY2VkZW5jZSBhbmQgY2hhaW4gZnJvbSBsZWZ0IHRvIHJpZ2h0XG4tLS0gc2VlIHNlY3Rpb24gKkNvbXBhcmlzb25zKiAtLS0gYW5kIGV4cG9uZW50aWF0aW9uLCB3aGljaCBncm91cHNcbmZyb20gcmlnaHQgdG8gbGVmdCkuXG5cbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgT3BlcmF0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PStcbnwgImxhbWJkYSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBMYW1iZGEgZXhwcmVzc2lvbiAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgImlmIiAtLSAiZWxzZSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDb25kaXRpb25hbCBleHByZXNzaW9uICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgIm9yIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBCb29sZWFuIE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgImFuZCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBCb29sZWFuIEFORCAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgIm5vdCIgIngiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBCb29sZWFuIE5PVCAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgImluIiwgIm5vdCBpbiIsICJpcyIsICJpcyBub3QiLCAiPCIsICI8PSIsICI+IiwgfCBDb21wYXJpc29ucywgaW5jbHVkaW5nIG1lbWJlcnNoaXAgICAgIHxcbnwgIj49IiwgIiE9IiwgIj09IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0ZXN0cyBhbmQgaWRlbnRpdHkgdGVzdHMgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgInwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBCaXR3aXNlIE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgIl4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBCaXR3aXNlIFhPUiAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgIiYiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBCaXR3aXNlIEFORCAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgIjw8IiwgIj4+IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBTaGlmdHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgIisiLCAiLSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBBZGRpdGlvbiBhbmQgc3VidHJhY3Rpb24gICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgIioiLCAiLyIsICIvLyIsICIlIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNdWx0aXBsaWNhdGlvbiwgZGl2aXNpb24sIHJlbWFpbmRlciAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgIit4IiwgIi14IiwgIn54IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQb3NpdGl2ZSwgbmVnYXRpdmUsIGJpdHdpc2UgTk9UICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgIioqIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBFeHBvbmVudGlhdGlvbiBbNl0gICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgInhbaW5kZXhdIiwgInhbaW5kZXg6aW5kZXhdIiwgICAgICAgICAgICAgICAgICAgfCBTdWJzY3JpcHRpb24sIHNsaWNpbmcsIGNhbGwsICAgICAgICAgIHxcbnwgIngoYXJndW1lbnRzLi4uKSIsICJ4LmF0dHJpYnV0ZSIgICAgICAgICAgICAgICAgfCBhdHRyaWJ1dGUgcmVmZXJlbmNlICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgIihleHByZXNzaW9ucy4uLikiLCAiW2V4cHJlc3Npb25zLi4uXSIsICJ7a2V5OiAgfCBCaW5kaW5nIG9yIHR1cGxlIGRpc3BsYXksIGxpc3QgICAgICAgIHxcbnwgdmFsdWUuLi59IiwgIntleHByZXNzaW9ucy4uLn0iICAgICAgICAgICAgICAgICAgfCBkaXNwbGF5LCBkaWN0aW9uYXJ5IGRpc3BsYXksIHNldCAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcblxuLVsgRm9vdG5vdGVzIF0tXG5cblsxXSBXaGlsZSAiYWJzKHgleSkgPCBhYnMoeSkiIGlzIHRydWUgbWF0aGVtYXRpY2FsbHksIGZvciBmbG9hdHNcbiAgICBpdCBtYXkgbm90IGJlIHRydWUgbnVtZXJpY2FsbHkgZHVlIHRvIHJvdW5kb2ZmLiAgRm9yIGV4YW1wbGUsIGFuZFxuICAgIGFzc3VtaW5nIGEgcGxhdGZvcm0gb24gd2hpY2ggYSBQeXRob24gZmxvYXQgaXMgYW4gSUVFRSA3NTQgZG91YmxlLVxuICAgIHByZWNpc2lvbiBudW1iZXIsIGluIG9yZGVyIHRoYXQgIi0xZS0xMDAgJSAxZTEwMCIgaGF2ZSB0aGUgc2FtZVxuICAgIHNpZ24gYXMgIjFlMTAwIiwgdGhlIGNvbXB1dGVkIHJlc3VsdCBpcyAiLTFlLTEwMCArIDFlMTAwIiwgd2hpY2hcbiAgICBpcyBudW1lcmljYWxseSBleGFjdGx5IGVxdWFsIHRvICIxZTEwMCIuICBUaGUgZnVuY3Rpb25cbiAgICAibWF0aC5mbW9kKCkiIHJldHVybnMgYSByZXN1bHQgd2hvc2Ugc2lnbiBtYXRjaGVzIHRoZSBzaWduIG9mIHRoZVxuICAgIGZpcnN0IGFyZ3VtZW50IGluc3RlYWQsIGFuZCBzbyByZXR1cm5zICItMWUtMTAwIiBpbiB0aGlzIGNhc2UuXG4gICAgV2hpY2ggYXBwcm9hY2ggaXMgbW9yZSBhcHByb3ByaWF0ZSBkZXBlbmRzIG9uIHRoZSBhcHBsaWNhdGlvbi5cblxuWzJdIElmIHggaXMgdmVyeSBjbG9zZSB0byBhbiBleGFjdCBpbnRlZ2VyIG11bHRpcGxlIG9mIHksIGl0XCdzXG4gICAgcG9zc2libGUgZm9yICJ4Ly95IiB0byBiZSBvbmUgbGFyZ2VyIHRoYW4gIih4LXgleSkvL3kiIGR1ZSB0b1xuICAgIHJvdW5kaW5nLiAgSW4gc3VjaCBjYXNlcywgUHl0aG9uIHJldHVybnMgdGhlIGxhdHRlciByZXN1bHQsIGluXG4gICAgb3JkZXIgdG8gcHJlc2VydmUgdGhhdCAiZGl2bW9kKHgseSlbMF0gKiB5ICsgeCAlIHkiIGJlIHZlcnkgY2xvc2VcbiAgICB0byAieCIuXG5cblszXSBXaGlsZSBjb21wYXJpc29ucyBiZXR3ZWVuIHN0cmluZ3MgbWFrZSBzZW5zZSBhdCB0aGUgYnl0ZVxuICAgIGxldmVsLCB0aGV5IG1heSBiZSBjb3VudGVyLWludHVpdGl2ZSB0byB1c2Vycy4gIEZvciBleGFtcGxlLCB0aGVcbiAgICBzdHJpbmdzICIiXFx1MDBDNyIiIGFuZCAiIlxcdTAzMjdcXHUwMDQzIiIgY29tcGFyZSBkaWZmZXJlbnRseSwgZXZlblxuICAgIHRob3VnaCB0aGV5IGJvdGggcmVwcmVzZW50IHRoZSBzYW1lIHVuaWNvZGUgY2hhcmFjdGVyIChMQVRJTlxuICAgIENBUElUQUwgTEVUVEVSIEMgV0lUSCBDRURJTExBKS4gIFRvIGNvbXBhcmUgc3RyaW5ncyBpbiBhIGh1bWFuXG4gICAgcmVjb2duaXphYmxlIHdheSwgY29tcGFyZSB1c2luZyAidW5pY29kZWRhdGEubm9ybWFsaXplKCkiLlxuXG5bNF0gRHVlIHRvIGF1dG9tYXRpYyBnYXJiYWdlLWNvbGxlY3Rpb24sIGZyZWUgbGlzdHMsIGFuZCB0aGVcbiAgICBkeW5hbWljIG5hdHVyZSBvZiBkZXNjcmlwdG9ycywgeW91IG1heSBub3RpY2Ugc2VlbWluZ2x5IHVudXN1YWxcbiAgICBiZWhhdmlvdXIgaW4gY2VydGFpbiB1c2VzIG9mIHRoZSAiaXMiIG9wZXJhdG9yLCBsaWtlIHRob3NlXG4gICAgaW52b2x2aW5nIGNvbXBhcmlzb25zIGJldHdlZW4gaW5zdGFuY2UgbWV0aG9kcywgb3IgY29uc3RhbnRzLlxuICAgIENoZWNrIHRoZWlyIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mby5cblxuWzVdIFRoZSAiJSIgb3BlcmF0b3IgaXMgYWxzbyB1c2VkIGZvciBzdHJpbmcgZm9ybWF0dGluZzsgdGhlIHNhbWVcbiAgICBwcmVjZWRlbmNlIGFwcGxpZXMuXG5cbls2XSBUaGUgcG93ZXIgb3BlcmF0b3IgIioqIiBiaW5kcyBsZXNzIHRpZ2h0bHkgdGhhbiBhbiBhcml0aG1ldGljXG4gICAgb3IgYml0d2lzZSB1bmFyeSBvcGVyYXRvciBvbiBpdHMgcmlnaHQsIHRoYXQgaXMsICIyKiotMSIgaXMgIjAuNSIuXG4nLAotICdwYXNzJzogJ1xuVGhlICJwYXNzIiBzdGF0ZW1lbnRcbioqKioqKioqKioqKioqKioqKioqXG5cbiAgIHBhc3Nfc3RtdCA6Oj0gInBhc3MiXG5cbiJwYXNzIiBpcyBhIG51bGwgb3BlcmF0aW9uIC0tLSB3aGVuIGl0IGlzIGV4ZWN1dGVkLCBub3RoaW5nIGhhcHBlbnMuXG5JdCBpcyB1c2VmdWwgYXMgYSBwbGFjZWhvbGRlciB3aGVuIGEgc3RhdGVtZW50IGlzIHJlcXVpcmVkXG5zeW50YWN0aWNhbGx5LCBidXQgbm8gY29kZSBuZWVkcyB0byBiZSBleGVjdXRlZCwgZm9yIGV4YW1wbGU6XG5cbiAgIGRlZiBmKGFyZyk6IHBhc3MgICAgIyBhIGZ1bmN0aW9uIHRoYXQgZG9lcyBub3RoaW5nICh5ZXQpXG5cbiAgIGNsYXNzIEM6IHBhc3MgICAgICAgIyBhIGNsYXNzIHdpdGggbm8gbWV0aG9kcyAoeWV0KVxuJywKLSAncG93ZXInOiAnXG5UaGUgcG93ZXIgb3BlcmF0b3JcbioqKioqKioqKioqKioqKioqKlxuXG5UaGUgcG93ZXIgb3BlcmF0b3IgYmluZHMgbW9yZSB0aWdodGx5IHRoYW4gdW5hcnkgb3BlcmF0b3JzIG9uIGl0c1xubGVmdDsgaXQgYmluZHMgbGVzcyB0aWdodGx5IHRoYW4gdW5hcnkgb3BlcmF0b3JzIG9uIGl0cyByaWdodC4gIFRoZVxuc3ludGF4IGlzOlxuXG4gICBwb3dlciA6Oj0gcHJpbWFyeSBbIioqIiB1X2V4cHJdXG5cblRodXMsIGluIGFuIHVucGFyZW50aGVzaXplZCBzZXF1ZW5jZSBvZiBwb3dlciBhbmQgdW5hcnkgb3BlcmF0b3JzLCB0aGVcbm9wZXJhdG9ycyBhcmUgZXZhbHVhdGVkIGZyb20gcmlnaHQgdG8gbGVmdCAodGhpcyBkb2VzIG5vdCBjb25zdHJhaW5cbnRoZSBldmFsdWF0aW9uIG9yZGVyIGZvciB0aGUgb3BlcmFuZHMpOiAiLTEqKjIiIHJlc3VsdHMgaW4gIi0xIi5cblxuVGhlIHBvd2VyIG9wZXJhdG9yIGhhcyB0aGUgc2FtZSBzZW1hbnRpY3MgYXMgdGhlIGJ1aWx0LWluICJwb3coKSJcbmZ1bmN0aW9uLCB3aGVuIGNhbGxlZCB3aXRoIHR3byBhcmd1bWVudHM6IGl0IHlpZWxkcyBpdHMgbGVmdCBhcmd1bWVudFxucmFpc2VkIHRvIHRoZSBwb3dlciBvZiBpdHMgcmlnaHQgYXJndW1lbnQuICBUaGUgbnVtZXJpYyBhcmd1bWVudHMgYXJlXG5maXJzdCBjb252ZXJ0ZWQgdG8gYSBjb21tb24gdHlwZSwgYW5kIHRoZSByZXN1bHQgaXMgb2YgdGhhdCB0eXBlLlxuXG5Gb3IgaW50IG9wZXJhbmRzLCB0aGUgcmVzdWx0IGhhcyB0aGUgc2FtZSB0eXBlIGFzIHRoZSBvcGVyYW5kcyB1bmxlc3NcbnRoZSBzZWNvbmQgYXJndW1lbnQgaXMgbmVnYXRpdmU7IGluIHRoYXQgY2FzZSwgYWxsIGFyZ3VtZW50cyBhcmVcbmNvbnZlcnRlZCB0byBmbG9hdCBhbmQgYSBmbG9hdCByZXN1bHQgaXMgZGVsaXZlcmVkLiBGb3IgZXhhbXBsZSxcbiIxMCoqMiIgcmV0dXJucyAiMTAwIiwgYnV0ICIxMCoqLTIiIHJldHVybnMgIjAuMDEiLlxuXG5SYWlzaW5nICIwLjAiIHRvIGEgbmVnYXRpdmUgcG93ZXIgcmVzdWx0cyBpbiBhICJaZXJvRGl2aXNpb25FcnJvciIuXG5SYWlzaW5nIGEgbmVnYXRpdmUgbnVtYmVyIHRvIGEgZnJhY3Rpb25hbCBwb3dlciByZXN1bHRzIGluIGEgImNvbXBsZXgiXG5udW1iZXIuIChJbiBlYXJsaWVyIHZlcnNpb25zIGl0IHJhaXNlZCBhICJWYWx1ZUVycm9yIi4pXG4nLAotICdyYWlzZSc6ICdcblRoZSAicmFpc2UiIHN0YXRlbWVudFxuKioqKioqKioqKioqKioqKioqKioqXG5cbiAgIHJhaXNlX3N0bXQgOjo9ICJyYWlzZSIgW2V4cHJlc3Npb24gWyJmcm9tIiBleHByZXNzaW9uXV1cblxuSWYgbm8gZXhwcmVzc2lvbnMgYXJlIHByZXNlbnQsICJyYWlzZSIgcmUtcmFpc2VzIHRoZSBsYXN0IGV4Y2VwdGlvblxudGhhdCB3YXMgYWN0aXZlIGluIHRoZSBjdXJyZW50IHNjb3BlLiAgSWYgbm8gZXhjZXB0aW9uIGlzIGFjdGl2ZSBpblxudGhlIGN1cnJlbnQgc2NvcGUsIGEgIlJ1bnRpbWVFcnJvciIgZXhjZXB0aW9uIGlzIHJhaXNlZCBpbmRpY2F0aW5nXG50aGF0IHRoaXMgaXMgYW4gZXJyb3IuXG5cbk90aGVyd2lzZSwgInJhaXNlIiBldmFsdWF0ZXMgdGhlIGZpcnN0IGV4cHJlc3Npb24gYXMgdGhlIGV4Y2VwdGlvblxub2JqZWN0LiAgSXQgbXVzdCBiZSBlaXRoZXIgYSBzdWJjbGFzcyBvciBhbiBpbnN0YW5jZSBvZlxuIkJhc2VFeGNlcHRpb24iLiBJZiBpdCBpcyBhIGNsYXNzLCB0aGUgZXhjZXB0aW9uIGluc3RhbmNlIHdpbGwgYmVcbm9idGFpbmVkIHdoZW4gbmVlZGVkIGJ5IGluc3RhbnRpYXRpbmcgdGhlIGNsYXNzIHdpdGggbm8gYXJndW1lbnRzLlxuXG5UaGUgKnR5cGUqIG9mIHRoZSBleGNlcHRpb24gaXMgdGhlIGV4Y2VwdGlvbiBpbnN0YW5jZVwncyBjbGFzcywgdGhlXG4qdmFsdWUqIGlzIHRoZSBpbnN0YW5jZSBpdHNlbGYuXG5cbkEgdHJhY2ViYWNrIG9iamVjdCBpcyBub3JtYWxseSBjcmVhdGVkIGF1dG9tYXRpY2FsbHkgd2hlbiBhbiBleGNlcHRpb25cbmlzIHJhaXNlZCBhbmQgYXR0YWNoZWQgdG8gaXQgYXMgdGhlICJfX3RyYWNlYmFja19fIiBhdHRyaWJ1dGUsIHdoaWNoXG5pcyB3cml0YWJsZS4gWW91IGNhbiBjcmVhdGUgYW4gZXhjZXB0aW9uIGFuZCBzZXQgeW91ciBvd24gdHJhY2ViYWNrIGluXG5vbmUgc3RlcCB1c2luZyB0aGUgIndpdGhfdHJhY2ViYWNrKCkiIGV4Y2VwdGlvbiBtZXRob2QgKHdoaWNoIHJldHVybnNcbnRoZSBzYW1lIGV4Y2VwdGlvbiBpbnN0YW5jZSwgd2l0aCBpdHMgdHJhY2ViYWNrIHNldCB0byBpdHMgYXJndW1lbnQpLFxubGlrZSBzbzpcblxuICAgcmFpc2UgRXhjZXB0aW9uKCJmb28gb2NjdXJyZWQiKS53aXRoX3RyYWNlYmFjayh0cmFjZWJhY2tvYmopXG5cblRoZSAiZnJvbSIgY2xhdXNlIGlzIHVzZWQgZm9yIGV4Y2VwdGlvbiBjaGFpbmluZzogaWYgZ2l2ZW4sIHRoZSBzZWNvbmRcbipleHByZXNzaW9uKiBtdXN0IGJlIGFub3RoZXIgZXhjZXB0aW9uIGNsYXNzIG9yIGluc3RhbmNlLCB3aGljaCB3aWxsXG50aGVuIGJlIGF0dGFjaGVkIHRvIHRoZSByYWlzZWQgZXhjZXB0aW9uIGFzIHRoZSAiX19jYXVzZV9fIiBhdHRyaWJ1dGVcbih3aGljaCBpcyB3cml0YWJsZSkuICBJZiB0aGUgcmFpc2VkIGV4Y2VwdGlvbiBpcyBub3QgaGFuZGxlZCwgYm90aFxuZXhjZXB0aW9ucyB3aWxsIGJlIHByaW50ZWQ6XG5cbiAgID4+PiB0cnk6XG4gICAuLi4gICAgIHByaW50KDEgLyAwKVxuICAgLi4uIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOlxuICAgLi4uICAgICByYWlzZSBSdW50aW1lRXJyb3IoIlNvbWV0aGluZyBiYWQgaGFwcGVuZWQiKSBmcm9tIGV4Y1xuICAgLi4uXG4gICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6XG4gICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDIsIGluIDxtb2R1bGU+XG4gICBaZXJvRGl2aXNpb25FcnJvcjogaW50IGRpdmlzaW9uIG9yIG1vZHVsbyBieSB6ZXJvXG5cbiAgIFRoZSBhYm92ZSBleGNlcHRpb24gd2FzIHRoZSBkaXJlY3QgY2F1c2Ugb2YgdGhlIGZvbGxvd2luZyBleGNlcHRpb246XG5cbiAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KTpcbiAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgNCwgaW4gPG1vZHVsZT5cbiAgIFJ1bnRpbWVFcnJvcjogU29tZXRoaW5nIGJhZCBoYXBwZW5lZFxuXG5BIHNpbWlsYXIgbWVjaGFuaXNtIHdvcmtzIGltcGxpY2l0bHkgaWYgYW4gZXhjZXB0aW9uIGlzIHJhaXNlZCBpbnNpZGVcbmFuIGV4Y2VwdGlvbiBoYW5kbGVyOiB0aGUgcHJldmlvdXMgZXhjZXB0aW9uIGlzIHRoZW4gYXR0YWNoZWQgYXMgdGhlXG5uZXcgZXhjZXB0aW9uXCdzICJfX2NvbnRleHRfXyIgYXR0cmlidXRlOlxuXG4gICA+Pj4gdHJ5OlxuICAgLi4uICAgICBwcmludCgxIC8gMClcbiAgIC4uLiBleGNlcHQ6XG4gICAuLi4gICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiU29tZXRoaW5nIGJhZCBoYXBwZW5lZCIpXG4gICAuLi5cbiAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KTpcbiAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgMiwgaW4gPG1vZHVsZT5cbiAgIFplcm9EaXZpc2lvbkVycm9yOiBpbnQgZGl2aXNpb24gb3IgbW9kdWxvIGJ5IHplcm9cblxuICAgRHVyaW5nIGhhbmRsaW5nIG9mIHRoZSBhYm92ZSBleGNlcHRpb24sIGFub3RoZXIgZXhjZXB0aW9uIG9jY3VycmVkOlxuXG4gICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6XG4gICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDQsIGluIDxtb2R1bGU+XG4gICBSdW50aW1lRXJyb3I6IFNvbWV0aGluZyBiYWQgaGFwcGVuZWRcblxuQWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvbiBleGNlcHRpb25zIGNhbiBiZSBmb3VuZCBpbiBzZWN0aW9uXG4qRXhjZXB0aW9ucyosIGFuZCBpbmZvcm1hdGlvbiBhYm91dCBoYW5kbGluZyBleGNlcHRpb25zIGlzIGluIHNlY3Rpb25cbipUaGUgdHJ5IHN0YXRlbWVudCouXG4nLAotICdyZXR1cm4nOiAnXG5UaGUgInJldHVybiIgc3RhdGVtZW50XG4qKioqKioqKioqKioqKioqKioqKioqXG5cbiAgIHJldHVybl9zdG10IDo6PSAicmV0dXJuIiBbZXhwcmVzc2lvbl9saXN0XVxuXG4icmV0dXJuIiBtYXkgb25seSBvY2N1ciBzeW50YWN0aWNhbGx5IG5lc3RlZCBpbiBhIGZ1bmN0aW9uIGRlZmluaXRpb24sXG5ub3Qgd2l0aGluIGEgbmVzdGVkIGNsYXNzIGRlZmluaXRpb24uXG5cbklmIGFuIGV4cHJlc3Npb24gbGlzdCBpcyBwcmVzZW50LCBpdCBpcyBldmFsdWF0ZWQsIGVsc2UgIk5vbmUiIGlzXG5zdWJzdGl0dXRlZC5cblxuInJldHVybiIgbGVhdmVzIHRoZSBjdXJyZW50IGZ1bmN0aW9uIGNhbGwgd2l0aCB0aGUgZXhwcmVzc2lvbiBsaXN0IChvclxuIk5vbmUiKSBhcyByZXR1cm4gdmFsdWUuXG5cbldoZW4gInJldHVybiIgcGFzc2VzIGNvbnRyb2wgb3V0IG9mIGEgInRyeSIgc3RhdGVtZW50IHdpdGggYSAiZmluYWxseSJcbmNsYXVzZSwgdGhhdCAiZmluYWxseSIgY2xhdXNlIGlzIGV4ZWN1dGVkIGJlZm9yZSByZWFsbHkgbGVhdmluZyB0aGVcbmZ1bmN0aW9uLlxuXG5JbiBhIGdlbmVyYXRvciBmdW5jdGlvbiwgdGhlICJyZXR1cm4iIHN0YXRlbWVudCBpbmRpY2F0ZXMgdGhhdCB0aGVcbmdlbmVyYXRvciBpcyBkb25lIGFuZCB3aWxsIGNhdXNlICJTdG9wSXRlcmF0aW9uIiB0byBiZSByYWlzZWQuIFRoZVxucmV0dXJuZWQgdmFsdWUgKGlmIGFueSkgaXMgdXNlZCBhcyBhbiBhcmd1bWVudCB0byBjb25zdHJ1Y3RcbiJTdG9wSXRlcmF0aW9uIiBhbmQgYmVjb21lcyB0aGUgIlN0b3BJdGVyYXRpb24udmFsdWUiIGF0dHJpYnV0ZS5cbicsCi0gJ3NlcXVlbmNlLXR5cGVzJzogJ1xuRW11bGF0aW5nIGNvbnRhaW5lciB0eXBlc1xuKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG5UaGUgZm9sbG93aW5nIG1ldGhvZHMgY2FuIGJlIGRlZmluZWQgdG8gaW1wbGVtZW50IGNvbnRhaW5lciBvYmplY3RzLlxuQ29udGFpbmVycyB1c3VhbGx5IGFyZSBzZXF1ZW5jZXMgKHN1Y2ggYXMgbGlzdHMgb3IgdHVwbGVzKSBvciBtYXBwaW5nc1xuKGxpa2UgZGljdGlvbmFyaWVzKSwgYnV0IGNhbiByZXByZXNlbnQgb3RoZXIgY29udGFpbmVycyBhcyB3ZWxsLiAgVGhlXG5maXJzdCBzZXQgb2YgbWV0aG9kcyBpcyB1c2VkIGVpdGhlciB0byBlbXVsYXRlIGEgc2VxdWVuY2Ugb3IgdG9cbmVtdWxhdGUgYSBtYXBwaW5nOyB0aGUgZGlmZmVyZW5jZSBpcyB0aGF0IGZvciBhIHNlcXVlbmNlLCB0aGVcbmFsbG93YWJsZSBrZXlzIHNob3VsZCBiZSB0aGUgaW50ZWdlcnMgKmsqIGZvciB3aGljaCAiMCA8PSBrIDwgTiIgd2hlcmVcbipOKiBpcyB0aGUgbGVuZ3RoIG9mIHRoZSBzZXF1ZW5jZSwgb3Igc2xpY2Ugb2JqZWN0cywgd2hpY2ggZGVmaW5lIGFcbnJhbmdlIG9mIGl0ZW1zLiAgSXQgaXMgYWxzbyByZWNvbW1lbmRlZCB0aGF0IG1hcHBpbmdzIHByb3ZpZGUgdGhlXG5tZXRob2RzICJrZXlzKCkiLCAidmFsdWVzKCkiLCAiaXRlbXMoKSIsICJnZXQoKSIsICJjbGVhcigpIixcbiJzZXRkZWZhdWx0KCkiLCAicG9wKCkiLCAicG9waXRlbSgpIiwgImNvcHkoKSIsIGFuZCAidXBkYXRlKCkiXG5iZWhhdmluZyBzaW1pbGFyIHRvIHRob3NlIGZvciBQeXRob25cJ3Mgc3RhbmRhcmQgZGljdGlvbmFyeSBvYmplY3RzLlxuVGhlICJjb2xsZWN0aW9ucyIgbW9kdWxlIHByb3ZpZGVzIGEgIk11dGFibGVNYXBwaW5nIiBhYnN0cmFjdCBiYXNlXG5jbGFzcyB0byBoZWxwIGNyZWF0ZSB0aG9zZSBtZXRob2RzIGZyb20gYSBiYXNlIHNldCBvZiAiX19nZXRpdGVtX18oKSIsXG4iX19zZXRpdGVtX18oKSIsICJfX2RlbGl0ZW1fXygpIiwgYW5kICJrZXlzKCkiLiBNdXRhYmxlIHNlcXVlbmNlc1xuc2hvdWxkIHByb3ZpZGUgbWV0aG9kcyAiYXBwZW5kKCkiLCAiY291bnQoKSIsICJpbmRleCgpIiwgImV4dGVuZCgpIixcbiJpbnNlcnQoKSIsICJwb3AoKSIsICJyZW1vdmUoKSIsICJyZXZlcnNlKCkiIGFuZCAic29ydCgpIiwgbGlrZSBQeXRob25cbnN0YW5kYXJkIGxpc3Qgb2JqZWN0cy4gIEZpbmFsbHksIHNlcXVlbmNlIHR5cGVzIHNob3VsZCBpbXBsZW1lbnRcbmFkZGl0aW9uIChtZWFuaW5nIGNvbmNhdGVuYXRpb24pIGFuZCBtdWx0aXBsaWNhdGlvbiAobWVhbmluZ1xucmVwZXRpdGlvbikgYnkgZGVmaW5pbmcgdGhlIG1ldGhvZHMgIl9fYWRkX18oKSIsICJfX3JhZGRfXygpIixcbiJfX2lhZGRfXygpIiwgIl9fbXVsX18oKSIsICJfX3JtdWxfXygpIiBhbmQgIl9faW11bF9fKCkiIGRlc2NyaWJlZFxuYmVsb3c7IHRoZXkgc2hvdWxkIG5vdCBkZWZpbmUgb3RoZXIgbnVtZXJpY2FsIG9wZXJhdG9ycy4gIEl0IGlzXG5yZWNvbW1lbmRlZCB0aGF0IGJvdGggbWFwcGluZ3MgYW5kIHNlcXVlbmNlcyBpbXBsZW1lbnQgdGhlXG4iX19jb250YWluc19fKCkiIG1ldGhvZCB0byBhbGxvdyBlZmZpY2llbnQgdXNlIG9mIHRoZSAiaW4iIG9wZXJhdG9yO1xuZm9yIG1hcHBpbmdzLCAiaW4iIHNob3VsZCBzZWFyY2ggdGhlIG1hcHBpbmdcJ3Mga2V5czsgZm9yIHNlcXVlbmNlcywgaXRcbnNob3VsZCBzZWFyY2ggdGhyb3VnaCB0aGUgdmFsdWVzLiAgSXQgaXMgZnVydGhlciByZWNvbW1lbmRlZCB0aGF0IGJvdGhcbm1hcHBpbmdzIGFuZCBzZXF1ZW5jZXMgaW1wbGVtZW50IHRoZSAiX19pdGVyX18oKSIgbWV0aG9kIHRvIGFsbG93XG5lZmZpY2llbnQgaXRlcmF0aW9uIHRocm91Z2ggdGhlIGNvbnRhaW5lcjsgZm9yIG1hcHBpbmdzLCAiX19pdGVyX18oKSJcbnNob3VsZCBiZSB0aGUgc2FtZSBhcyAia2V5cygpIjsgZm9yIHNlcXVlbmNlcywgaXQgc2hvdWxkIGl0ZXJhdGVcbnRocm91Z2ggdGhlIHZhbHVlcy5cblxub2JqZWN0Ll9fbGVuX18oc2VsZilcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCB0aGUgYnVpbHQtaW4gZnVuY3Rpb24gImxlbigpIi4gIFNob3VsZCByZXR1cm5cbiAgIHRoZSBsZW5ndGggb2YgdGhlIG9iamVjdCwgYW4gaW50ZWdlciAiPj0iIDAuICBBbHNvLCBhbiBvYmplY3QgdGhhdFxuICAgZG9lc25cJ3QgZGVmaW5lIGEgIl9fYm9vbF9fKCkiIG1ldGhvZCBhbmQgd2hvc2UgIl9fbGVuX18oKSIgbWV0aG9kXG4gICByZXR1cm5zIHplcm8gaXMgY29uc2lkZXJlZCB0byBiZSBmYWxzZSBpbiBhIEJvb2xlYW4gY29udGV4dC5cblxuTm90ZTogU2xpY2luZyBpcyBkb25lIGV4Y2x1c2l2ZWx5IHdpdGggdGhlIGZvbGxvd2luZyB0aHJlZSBtZXRob2RzLlxuICBBIGNhbGwgbGlrZVxuXG4gICAgIGFbMToyXSA9IGJcblxuICBpcyB0cmFuc2xhdGVkIHRvXG5cbiAgICAgYVtzbGljZSgxLCAyLCBOb25lKV0gPSBiXG5cbiAgYW5kIHNvIGZvcnRoLiAgTWlzc2luZyBzbGljZSBpdGVtcyBhcmUgYWx3YXlzIGZpbGxlZCBpbiB3aXRoICJOb25lIi5cblxub2JqZWN0Ll9fZ2V0aXRlbV9fKHNlbGYsIGtleSlcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCBldmFsdWF0aW9uIG9mICJzZWxmW2tleV0iLiBGb3Igc2VxdWVuY2UgdHlwZXMsXG4gICB0aGUgYWNjZXB0ZWQga2V5cyBzaG91bGQgYmUgaW50ZWdlcnMgYW5kIHNsaWNlIG9iamVjdHMuICBOb3RlIHRoYXRcbiAgIHRoZSBzcGVjaWFsIGludGVycHJldGF0aW9uIG9mIG5lZ2F0aXZlIGluZGV4ZXMgKGlmIHRoZSBjbGFzcyB3aXNoZXNcbiAgIHRvIGVtdWxhdGUgYSBzZXF1ZW5jZSB0eXBlKSBpcyB1cCB0byB0aGUgIl9fZ2V0aXRlbV9fKCkiIG1ldGhvZC4gSWZcbiAgICprZXkqIGlzIG9mIGFuIGluYXBwcm9wcmlhdGUgdHlwZSwgIlR5cGVFcnJvciIgbWF5IGJlIHJhaXNlZDsgaWYgb2ZcbiAgIGEgdmFsdWUgb3V0c2lkZSB0aGUgc2V0IG9mIGluZGV4ZXMgZm9yIHRoZSBzZXF1ZW5jZSAoYWZ0ZXIgYW55XG4gICBzcGVjaWFsIGludGVycHJldGF0aW9uIG9mIG5lZ2F0aXZlIHZhbHVlcyksICJJbmRleEVycm9yIiBzaG91bGQgYmVcbiAgIHJhaXNlZC4gRm9yIG1hcHBpbmcgdHlwZXMsIGlmICprZXkqIGlzIG1pc3NpbmcgKG5vdCBpbiB0aGVcbiAgIGNvbnRhaW5lciksICJLZXlFcnJvciIgc2hvdWxkIGJlIHJhaXNlZC5cblxuICAgTm90ZTogImZvciIgbG9vcHMgZXhwZWN0IHRoYXQgYW4gIkluZGV4RXJyb3IiIHdpbGwgYmUgcmFpc2VkIGZvclxuICAgICBpbGxlZ2FsIGluZGV4ZXMgdG8gYWxsb3cgcHJvcGVyIGRldGVjdGlvbiBvZiB0aGUgZW5kIG9mIHRoZVxuICAgICBzZXF1ZW5jZS5cblxub2JqZWN0Ll9fc2V0aXRlbV9fKHNlbGYsIGtleSwgdmFsdWUpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgYXNzaWdubWVudCB0byAic2VsZltrZXldIi4gIFNhbWUgbm90ZSBhcyBmb3JcbiAgICJfX2dldGl0ZW1fXygpIi4gIFRoaXMgc2hvdWxkIG9ubHkgYmUgaW1wbGVtZW50ZWQgZm9yIG1hcHBpbmdzIGlmXG4gICB0aGUgb2JqZWN0cyBzdXBwb3J0IGNoYW5nZXMgdG8gdGhlIHZhbHVlcyBmb3Iga2V5cywgb3IgaWYgbmV3IGtleXNcbiAgIGNhbiBiZSBhZGRlZCwgb3IgZm9yIHNlcXVlbmNlcyBpZiBlbGVtZW50cyBjYW4gYmUgcmVwbGFjZWQuICBUaGVcbiAgIHNhbWUgZXhjZXB0aW9ucyBzaG91bGQgYmUgcmFpc2VkIGZvciBpbXByb3BlciAqa2V5KiB2YWx1ZXMgYXMgZm9yXG4gICB0aGUgIl9fZ2V0aXRlbV9fKCkiIG1ldGhvZC5cblxub2JqZWN0Ll9fZGVsaXRlbV9fKHNlbGYsIGtleSlcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCBkZWxldGlvbiBvZiAic2VsZltrZXldIi4gIFNhbWUgbm90ZSBhcyBmb3JcbiAgICJfX2dldGl0ZW1fXygpIi4gIFRoaXMgc2hvdWxkIG9ubHkgYmUgaW1wbGVtZW50ZWQgZm9yIG1hcHBpbmdzIGlmXG4gICB0aGUgb2JqZWN0cyBzdXBwb3J0IHJlbW92YWwgb2Yga2V5cywgb3IgZm9yIHNlcXVlbmNlcyBpZiBlbGVtZW50c1xuICAgY2FuIGJlIHJlbW92ZWQgZnJvbSB0aGUgc2VxdWVuY2UuICBUaGUgc2FtZSBleGNlcHRpb25zIHNob3VsZCBiZVxuICAgcmFpc2VkIGZvciBpbXByb3BlciAqa2V5KiB2YWx1ZXMgYXMgZm9yIHRoZSAiX19nZXRpdGVtX18oKSIgbWV0aG9kLlxuXG5vYmplY3QuX19pdGVyX18oc2VsZilcblxuICAgVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gYW4gaXRlcmF0b3IgaXMgcmVxdWlyZWQgZm9yIGEgY29udGFpbmVyLlxuICAgVGhpcyBtZXRob2Qgc2hvdWxkIHJldHVybiBhIG5ldyBpdGVyYXRvciBvYmplY3QgdGhhdCBjYW4gaXRlcmF0ZVxuICAgb3ZlciBhbGwgdGhlIG9iamVjdHMgaW4gdGhlIGNvbnRhaW5lci4gIEZvciBtYXBwaW5ncywgaXQgc2hvdWxkXG4gICBpdGVyYXRlIG92ZXIgdGhlIGtleXMgb2YgdGhlIGNvbnRhaW5lciwgYW5kIHNob3VsZCBhbHNvIGJlIG1hZGVcbiAgIGF2YWlsYWJsZSBhcyB0aGUgbWV0aG9kICJrZXlzKCkiLlxuXG4gICBJdGVyYXRvciBvYmplY3RzIGFsc28gbmVlZCB0byBpbXBsZW1lbnQgdGhpcyBtZXRob2Q7IHRoZXkgYXJlXG4gICByZXF1aXJlZCB0byByZXR1cm4gdGhlbXNlbHZlcy4gIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGl0ZXJhdG9yXG4gICBvYmplY3RzLCBzZWUgKkl0ZXJhdG9yIFR5cGVzKi5cblxub2JqZWN0Ll9fcmV2ZXJzZWRfXyhzZWxmKVxuXG4gICBDYWxsZWQgKGlmIHByZXNlbnQpIGJ5IHRoZSAicmV2ZXJzZWQoKSIgYnVpbHQtaW4gdG8gaW1wbGVtZW50XG4gICByZXZlcnNlIGl0ZXJhdGlvbi4gIEl0IHNob3VsZCByZXR1cm4gYSBuZXcgaXRlcmF0b3Igb2JqZWN0IHRoYXRcbiAgIGl0ZXJhdGVzIG92ZXIgYWxsIHRoZSBvYmplY3RzIGluIHRoZSBjb250YWluZXIgaW4gcmV2ZXJzZSBvcmRlci5cblxuICAgSWYgdGhlICJfX3JldmVyc2VkX18oKSIgbWV0aG9kIGlzIG5vdCBwcm92aWRlZCwgdGhlICJyZXZlcnNlZCgpIlxuICAgYnVpbHQtaW4gd2lsbCBmYWxsIGJhY2sgdG8gdXNpbmcgdGhlIHNlcXVlbmNlIHByb3RvY29sICgiX19sZW5fXygpIlxuICAgYW5kICJfX2dldGl0ZW1fXygpIikuICBPYmplY3RzIHRoYXQgc3VwcG9ydCB0aGUgc2VxdWVuY2UgcHJvdG9jb2xcbiAgIHNob3VsZCBvbmx5IHByb3ZpZGUgIl9fcmV2ZXJzZWRfXygpIiBpZiB0aGV5IGNhbiBwcm92aWRlIGFuXG4gICBpbXBsZW1lbnRhdGlvbiB0aGF0IGlzIG1vcmUgZWZmaWNpZW50IHRoYW4gdGhlIG9uZSBwcm92aWRlZCBieVxuICAgInJldmVyc2VkKCkiLlxuXG5UaGUgbWVtYmVyc2hpcCB0ZXN0IG9wZXJhdG9ycyAoImluIiBhbmQgIm5vdCBpbiIpIGFyZSBub3JtYWxseVxuaW1wbGVtZW50ZWQgYXMgYW4gaXRlcmF0aW9uIHRocm91Z2ggYSBzZXF1ZW5jZS4gIEhvd2V2ZXIsIGNvbnRhaW5lclxub2JqZWN0cyBjYW4gc3VwcGx5IHRoZSBmb2xsb3dpbmcgc3BlY2lhbCBtZXRob2Qgd2l0aCBhIG1vcmUgZWZmaWNpZW50XG5pbXBsZW1lbnRhdGlvbiwgd2hpY2ggYWxzbyBkb2VzIG5vdCByZXF1aXJlIHRoZSBvYmplY3QgYmUgYSBzZXF1ZW5jZS5cblxub2JqZWN0Ll9fY29udGFpbnNfXyhzZWxmLCBpdGVtKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IG1lbWJlcnNoaXAgdGVzdCBvcGVyYXRvcnMuICBTaG91bGQgcmV0dXJuIHRydWVcbiAgIGlmICppdGVtKiBpcyBpbiAqc2VsZiosIGZhbHNlIG90aGVyd2lzZS4gIEZvciBtYXBwaW5nIG9iamVjdHMsIHRoaXNcbiAgIHNob3VsZCBjb25zaWRlciB0aGUga2V5cyBvZiB0aGUgbWFwcGluZyByYXRoZXIgdGhhbiB0aGUgdmFsdWVzIG9yXG4gICB0aGUga2V5LWl0ZW0gcGFpcnMuXG5cbiAgIEZvciBvYmplY3RzIHRoYXQgZG9uXCd0IGRlZmluZSAiX19jb250YWluc19fKCkiLCB0aGUgbWVtYmVyc2hpcCB0ZXN0XG4gICBmaXJzdCB0cmllcyBpdGVyYXRpb24gdmlhICJfX2l0ZXJfXygpIiwgdGhlbiB0aGUgb2xkIHNlcXVlbmNlXG4gICBpdGVyYXRpb24gcHJvdG9jb2wgdmlhICJfX2dldGl0ZW1fXygpIiwgc2VlICp0aGlzIHNlY3Rpb24gaW4gdGhlXG4gICBsYW5ndWFnZSByZWZlcmVuY2UqLlxuJywKLSAnc2hpZnRpbmcnOiAnXG5TaGlmdGluZyBvcGVyYXRpb25zXG4qKioqKioqKioqKioqKioqKioqXG5cblRoZSBzaGlmdGluZyBvcGVyYXRpb25zIGhhdmUgbG93ZXIgcHJpb3JpdHkgdGhhbiB0aGUgYXJpdGhtZXRpY1xub3BlcmF0aW9uczpcblxuICAgc2hpZnRfZXhwciA6Oj0gYV9leHByIHwgc2hpZnRfZXhwciAoICI8PCIgfCAiPj4iICkgYV9leHByXG5cblRoZXNlIG9wZXJhdG9ycyBhY2NlcHQgaW50ZWdlcnMgYXMgYXJndW1lbnRzLiAgVGhleSBzaGlmdCB0aGUgZmlyc3RcbmFyZ3VtZW50IHRvIHRoZSBsZWZ0IG9yIHJpZ2h0IGJ5IHRoZSBudW1iZXIgb2YgYml0cyBnaXZlbiBieSB0aGVcbnNlY29uZCBhcmd1bWVudC5cblxuQSByaWdodCBzaGlmdCBieSAqbiogYml0cyBpcyBkZWZpbmVkIGFzIGZsb29yIGRpdmlzaW9uIGJ5ICJwb3coMixuKSIuXG5BIGxlZnQgc2hpZnQgYnkgKm4qIGJpdHMgaXMgZGVmaW5lZCBhcyBtdWx0aXBsaWNhdGlvbiB3aXRoICJwb3coMixuKSIuXG5cbk5vdGU6IEluIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uLCB0aGUgcmlnaHQtaGFuZCBvcGVyYW5kIGlzXG4gIHJlcXVpcmVkIHRvIGJlIGF0IG1vc3QgInN5cy5tYXhzaXplIi4gIElmIHRoZSByaWdodC1oYW5kIG9wZXJhbmQgaXNcbiAgbGFyZ2VyIHRoYW4gInN5cy5tYXhzaXplIiBhbiAiT3ZlcmZsb3dFcnJvciIgZXhjZXB0aW9uIGlzIHJhaXNlZC5cbicsCi0gJ3NsaWNpbmdzJzogJ1xuU2xpY2luZ3NcbioqKioqKioqXG5cbkEgc2xpY2luZyBzZWxlY3RzIGEgcmFuZ2Ugb2YgaXRlbXMgaW4gYSBzZXF1ZW5jZSBvYmplY3QgKGUuZy4sIGFcbnN0cmluZywgdHVwbGUgb3IgbGlzdCkuICBTbGljaW5ncyBtYXkgYmUgdXNlZCBhcyBleHByZXNzaW9ucyBvciBhc1xudGFyZ2V0cyBpbiBhc3NpZ25tZW50IG9yICJkZWwiIHN0YXRlbWVudHMuICBUaGUgc3ludGF4IGZvciBhIHNsaWNpbmc6XG5cbiAgIHNsaWNpbmcgICAgICA6Oj0gcHJpbWFyeSAiWyIgc2xpY2VfbGlzdCAiXSJcbiAgIHNsaWNlX2xpc3QgICA6Oj0gc2xpY2VfaXRlbSAoIiwiIHNsaWNlX2l0ZW0pKiBbIiwiXVxuICAgc2xpY2VfaXRlbSAgIDo6PSBleHByZXNzaW9uIHwgcHJvcGVyX3NsaWNlXG4gICBwcm9wZXJfc2xpY2UgOjo9IFtsb3dlcl9ib3VuZF0gIjoiIFt1cHBlcl9ib3VuZF0gWyAiOiIgW3N0cmlkZV0gXVxuICAgbG93ZXJfYm91bmQgIDo6PSBleHByZXNzaW9uXG4gICB1cHBlcl9ib3VuZCAgOjo9IGV4cHJlc3Npb25cbiAgIHN0cmlkZSAgICAgICA6Oj0gZXhwcmVzc2lvblxuXG5UaGVyZSBpcyBhbWJpZ3VpdHkgaW4gdGhlIGZvcm1hbCBzeW50YXggaGVyZTogYW55dGhpbmcgdGhhdCBsb29rcyBsaWtlXG5hbiBleHByZXNzaW9uIGxpc3QgYWxzbyBsb29rcyBsaWtlIGEgc2xpY2UgbGlzdCwgc28gYW55IHN1YnNjcmlwdGlvblxuY2FuIGJlIGludGVycHJldGVkIGFzIGEgc2xpY2luZy4gIFJhdGhlciB0aGFuIGZ1cnRoZXIgY29tcGxpY2F0aW5nIHRoZVxuc3ludGF4LCB0aGlzIGlzIGRpc2FtYmlndWF0ZWQgYnkgZGVmaW5pbmcgdGhhdCBpbiB0aGlzIGNhc2UgdGhlXG5pbnRlcnByZXRhdGlvbiBhcyBhIHN1YnNjcmlwdGlvbiB0YWtlcyBwcmlvcml0eSBvdmVyIHRoZVxuaW50ZXJwcmV0YXRpb24gYXMgYSBzbGljaW5nICh0aGlzIGlzIHRoZSBjYXNlIGlmIHRoZSBzbGljZSBsaXN0XG5jb250YWlucyBubyBwcm9wZXIgc2xpY2UpLlxuXG5UaGUgc2VtYW50aWNzIGZvciBhIHNsaWNpbmcgYXJlIGFzIGZvbGxvd3MuICBUaGUgcHJpbWFyeSBtdXN0IGV2YWx1YXRlXG50byBhIG1hcHBpbmcgb2JqZWN0LCBhbmQgaXQgaXMgaW5kZXhlZCAodXNpbmcgdGhlIHNhbWUgIl9fZ2V0aXRlbV9fKCkiXG5tZXRob2QgYXMgbm9ybWFsIHN1YnNjcmlwdGlvbikgd2l0aCBhIGtleSB0aGF0IGlzIGNvbnN0cnVjdGVkIGZyb20gdGhlXG5zbGljZSBsaXN0LCBhcyBmb2xsb3dzLiAgSWYgdGhlIHNsaWNlIGxpc3QgY29udGFpbnMgYXQgbGVhc3Qgb25lXG5jb21tYSwgdGhlIGtleSBpcyBhIHR1cGxlIGNvbnRhaW5pbmcgdGhlIGNvbnZlcnNpb24gb2YgdGhlIHNsaWNlXG5pdGVtczsgb3RoZXJ3aXNlLCB0aGUgY29udmVyc2lvbiBvZiB0aGUgbG9uZSBzbGljZSBpdGVtIGlzIHRoZSBrZXkuXG5UaGUgY29udmVyc2lvbiBvZiBhIHNsaWNlIGl0ZW0gdGhhdCBpcyBhbiBleHByZXNzaW9uIGlzIHRoYXRcbmV4cHJlc3Npb24uICBUaGUgY29udmVyc2lvbiBvZiBhIHByb3BlciBzbGljZSBpcyBhIHNsaWNlIG9iamVjdCAoc2VlXG5zZWN0aW9uICpUaGUgc3RhbmRhcmQgdHlwZSBoaWVyYXJjaHkqKSB3aG9zZSAic3RhcnQiLCAic3RvcCIgYW5kXG4ic3RlcCIgYXR0cmlidXRlcyBhcmUgdGhlIHZhbHVlcyBvZiB0aGUgZXhwcmVzc2lvbnMgZ2l2ZW4gYXMgbG93ZXJcbmJvdW5kLCB1cHBlciBib3VuZCBhbmQgc3RyaWRlLCByZXNwZWN0aXZlbHksIHN1YnN0aXR1dGluZyAiTm9uZSIgZm9yXG5taXNzaW5nIGV4cHJlc3Npb25zLlxuJywKLSAnc3BlY2lhbGF0dHJzJzogJ1xuU3BlY2lhbCBBdHRyaWJ1dGVzXG4qKioqKioqKioqKioqKioqKipcblxuVGhlIGltcGxlbWVudGF0aW9uIGFkZHMgYSBmZXcgc3BlY2lhbCByZWFkLW9ubHkgYXR0cmlidXRlcyB0byBzZXZlcmFsXG5vYmplY3QgdHlwZXMsIHdoZXJlIHRoZXkgYXJlIHJlbGV2YW50LiAgU29tZSBvZiB0aGVzZSBhcmUgbm90IHJlcG9ydGVkXG5ieSB0aGUgImRpcigpIiBidWlsdC1pbiBmdW5jdGlvbi5cblxub2JqZWN0Ll9fZGljdF9fXG5cbiAgIEEgZGljdGlvbmFyeSBvciBvdGhlciBtYXBwaW5nIG9iamVjdCB1c2VkIHRvIHN0b3JlIGFuIG9iamVjdFwnc1xuICAgKHdyaXRhYmxlKSBhdHRyaWJ1dGVzLlxuXG5pbnN0YW5jZS5fX2NsYXNzX19cblxuICAgVGhlIGNsYXNzIHRvIHdoaWNoIGEgY2xhc3MgaW5zdGFuY2UgYmVsb25ncy5cblxuY2xhc3MuX19iYXNlc19fXG5cbiAgIFRoZSB0dXBsZSBvZiBiYXNlIGNsYXNzZXMgb2YgYSBjbGFzcyBvYmplY3QuXG5cbmNsYXNzLl9fbmFtZV9fXG5cbiAgIFRoZSBuYW1lIG9mIHRoZSBjbGFzcyBvciB0eXBlLlxuXG5jbGFzcy5fX3F1YWxuYW1lX19cblxuICAgVGhlICpxdWFsaWZpZWQgbmFtZSogb2YgdGhlIGNsYXNzIG9yIHR5cGUuXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDMuMy5cblxuY2xhc3MuX19tcm9fX1xuXG4gICBUaGlzIGF0dHJpYnV0ZSBpcyBhIHR1cGxlIG9mIGNsYXNzZXMgdGhhdCBhcmUgY29uc2lkZXJlZCB3aGVuXG4gICBsb29raW5nIGZvciBiYXNlIGNsYXNzZXMgZHVyaW5nIG1ldGhvZCByZXNvbHV0aW9uLlxuXG5jbGFzcy5tcm8oKVxuXG4gICBUaGlzIG1ldGhvZCBjYW4gYmUgb3ZlcnJpZGRlbiBieSBhIG1ldGFjbGFzcyB0byBjdXN0b21pemUgdGhlXG4gICBtZXRob2QgcmVzb2x1dGlvbiBvcmRlciBmb3IgaXRzIGluc3RhbmNlcy4gIEl0IGlzIGNhbGxlZCBhdCBjbGFzc1xuICAgaW5zdGFudGlhdGlvbiwgYW5kIGl0cyByZXN1bHQgaXMgc3RvcmVkIGluICJfX21yb19fIi5cblxuY2xhc3MuX19zdWJjbGFzc2VzX18oKVxuXG4gICBFYWNoIGNsYXNzIGtlZXBzIGEgbGlzdCBvZiB3ZWFrIHJlZmVyZW5jZXMgdG8gaXRzIGltbWVkaWF0ZVxuICAgc3ViY2xhc3Nlcy4gIFRoaXMgbWV0aG9kIHJldHVybnMgYSBsaXN0IG9mIGFsbCB0aG9zZSByZWZlcmVuY2VzXG4gICBzdGlsbCBhbGl2ZS4gRXhhbXBsZTpcblxuICAgICAgPj4+IGludC5fX3N1YmNsYXNzZXNfXygpXG4gICAgICBbPGNsYXNzIFwnYm9vbFwnPl1cblxuLVsgRm9vdG5vdGVzIF0tXG5cblsxXSBBZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9uIHRoZXNlIHNwZWNpYWwgbWV0aG9kcyBtYXkgYmUgZm91bmRcbiAgICBpbiB0aGUgUHl0aG9uIFJlZmVyZW5jZSBNYW51YWwgKCpCYXNpYyBjdXN0b21pemF0aW9uKikuXG5cblsyXSBBcyBhIGNvbnNlcXVlbmNlLCB0aGUgbGlzdCAiWzEsIDJdIiBpcyBjb25zaWRlcmVkIGVxdWFsIHRvXG4gICAgIlsxLjAsIDIuMF0iLCBhbmQgc2ltaWxhcmx5IGZvciB0dXBsZXMuXG5cblszXSBUaGV5IG11c3QgaGF2ZSBzaW5jZSB0aGUgcGFyc2VyIGNhblwndCB0ZWxsIHRoZSB0eXBlIG9mIHRoZVxuICAgIG9wZXJhbmRzLlxuXG5bNF0gQ2FzZWQgY2hhcmFjdGVycyBhcmUgdGhvc2Ugd2l0aCBnZW5lcmFsIGNhdGVnb3J5IHByb3BlcnR5XG4gICAgYmVpbmcgb25lIG9mICJMdSIgKExldHRlciwgdXBwZXJjYXNlKSwgIkxsIiAoTGV0dGVyLCBsb3dlcmNhc2UpLFxuICAgIG9yICJMdCIgKExldHRlciwgdGl0bGVjYXNlKS5cblxuWzVdIFRvIGZvcm1hdCBvbmx5IGEgdHVwbGUgeW91IHNob3VsZCB0aGVyZWZvcmUgcHJvdmlkZSBhXG4gICAgc2luZ2xldG9uIHR1cGxlIHdob3NlIG9ubHkgZWxlbWVudCBpcyB0aGUgdHVwbGUgdG8gYmUgZm9ybWF0dGVkLlxuJywKLSAnc3BlY2lhbG5hbWVzJzogJ1xuU3BlY2lhbCBtZXRob2QgbmFtZXNcbioqKioqKioqKioqKioqKioqKioqXG5cbkEgY2xhc3MgY2FuIGltcGxlbWVudCBjZXJ0YWluIG9wZXJhdGlvbnMgdGhhdCBhcmUgaW52b2tlZCBieSBzcGVjaWFsXG5zeW50YXggKHN1Y2ggYXMgYXJpdGhtZXRpYyBvcGVyYXRpb25zIG9yIHN1YnNjcmlwdGluZyBhbmQgc2xpY2luZykgYnlcbmRlZmluaW5nIG1ldGhvZHMgd2l0aCBzcGVjaWFsIG5hbWVzLiBUaGlzIGlzIFB5dGhvblwncyBhcHByb2FjaCB0b1xuKm9wZXJhdG9yIG92ZXJsb2FkaW5nKiwgYWxsb3dpbmcgY2xhc3NlcyB0byBkZWZpbmUgdGhlaXIgb3duIGJlaGF2aW9yXG53aXRoIHJlc3BlY3QgdG8gbGFuZ3VhZ2Ugb3BlcmF0b3JzLiAgRm9yIGluc3RhbmNlLCBpZiBhIGNsYXNzIGRlZmluZXNcbmEgbWV0aG9kIG5hbWVkICJfX2dldGl0ZW1fXygpIiwgYW5kICJ4IiBpcyBhbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzLFxudGhlbiAieFtpXSIgaXMgcm91Z2hseSBlcXVpdmFsZW50IHRvICJ0eXBlKHgpLl9fZ2V0aXRlbV9fKHgsIGkpIi5cbkV4Y2VwdCB3aGVyZSBtZW50aW9uZWQsIGF0dGVtcHRzIHRvIGV4ZWN1dGUgYW4gb3BlcmF0aW9uIHJhaXNlIGFuXG5leGNlcHRpb24gd2hlbiBubyBhcHByb3ByaWF0ZSBtZXRob2QgaXMgZGVmaW5lZCAodHlwaWNhbGx5XG4iQXR0cmlidXRlRXJyb3IiIG9yICJUeXBlRXJyb3IiKS5cblxuV2hlbiBpbXBsZW1lbnRpbmcgYSBjbGFzcyB0aGF0IGVtdWxhdGVzIGFueSBidWlsdC1pbiB0eXBlLCBpdCBpc1xuaW1wb3J0YW50IHRoYXQgdGhlIGVtdWxhdGlvbiBvbmx5IGJlIGltcGxlbWVudGVkIHRvIHRoZSBkZWdyZWUgdGhhdCBpdFxubWFrZXMgc2Vuc2UgZm9yIHRoZSBvYmplY3QgYmVpbmcgbW9kZWxsZWQuICBGb3IgZXhhbXBsZSwgc29tZVxuc2VxdWVuY2VzIG1heSB3b3JrIHdlbGwgd2l0aCByZXRyaWV2YWwgb2YgaW5kaXZpZHVhbCBlbGVtZW50cywgYnV0XG5leHRyYWN0aW5nIGEgc2xpY2UgbWF5IG5vdCBtYWtlIHNlbnNlLiAgKE9uZSBleGFtcGxlIG9mIHRoaXMgaXMgdGhlXG4iTm9kZUxpc3QiIGludGVyZmFjZSBpbiB0aGUgVzNDXCdzIERvY3VtZW50IE9iamVjdCBNb2RlbC4pXG5cblxuQmFzaWMgY3VzdG9taXphdGlvblxuPT09PT09PT09PT09PT09PT09PVxuXG5vYmplY3QuX19uZXdfXyhjbHNbLCAuLi5dKVxuXG4gICBDYWxsZWQgdG8gY3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIGNsYXNzICpjbHMqLiAgIl9fbmV3X18oKSIgaXMgYVxuICAgc3RhdGljIG1ldGhvZCAoc3BlY2lhbC1jYXNlZCBzbyB5b3UgbmVlZCBub3QgZGVjbGFyZSBpdCBhcyBzdWNoKVxuICAgdGhhdCB0YWtlcyB0aGUgY2xhc3Mgb2Ygd2hpY2ggYW4gaW5zdGFuY2Ugd2FzIHJlcXVlc3RlZCBhcyBpdHNcbiAgIGZpcnN0IGFyZ3VtZW50LiAgVGhlIHJlbWFpbmluZyBhcmd1bWVudHMgYXJlIHRob3NlIHBhc3NlZCB0byB0aGVcbiAgIG9iamVjdCBjb25zdHJ1Y3RvciBleHByZXNzaW9uICh0aGUgY2FsbCB0byB0aGUgY2xhc3MpLiAgVGhlIHJldHVyblxuICAgdmFsdWUgb2YgIl9fbmV3X18oKSIgc2hvdWxkIGJlIHRoZSBuZXcgb2JqZWN0IGluc3RhbmNlICh1c3VhbGx5IGFuXG4gICBpbnN0YW5jZSBvZiAqY2xzKikuXG5cbiAgIFR5cGljYWwgaW1wbGVtZW50YXRpb25zIGNyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgY2xhc3MgYnlcbiAgIGludm9raW5nIHRoZSBzdXBlcmNsYXNzXCdzICJfX25ld19fKCkiIG1ldGhvZCB1c2luZ1xuICAgInN1cGVyKGN1cnJlbnRjbGFzcywgY2xzKS5fX25ld19fKGNsc1ssIC4uLl0pIiB3aXRoIGFwcHJvcHJpYXRlXG4gICBhcmd1bWVudHMgYW5kIHRoZW4gbW9kaWZ5aW5nIHRoZSBuZXdseS1jcmVhdGVkIGluc3RhbmNlIGFzXG4gICBuZWNlc3NhcnkgYmVmb3JlIHJldHVybmluZyBpdC5cblxuICAgSWYgIl9fbmV3X18oKSIgcmV0dXJucyBhbiBpbnN0YW5jZSBvZiAqY2xzKiwgdGhlbiB0aGUgbmV3XG4gICBpbnN0YW5jZVwncyAiX19pbml0X18oKSIgbWV0aG9kIHdpbGwgYmUgaW52b2tlZCBsaWtlXG4gICAiX19pbml0X18oc2VsZlssIC4uLl0pIiwgd2hlcmUgKnNlbGYqIGlzIHRoZSBuZXcgaW5zdGFuY2UgYW5kIHRoZVxuICAgcmVtYWluaW5nIGFyZ3VtZW50cyBhcmUgdGhlIHNhbWUgYXMgd2VyZSBwYXNzZWQgdG8gIl9fbmV3X18oKSIuXG5cbiAgIElmICJfX25ld19fKCkiIGRvZXMgbm90IHJldHVybiBhbiBpbnN0YW5jZSBvZiAqY2xzKiwgdGhlbiB0aGUgbmV3XG4gICBpbnN0YW5jZVwncyAiX19pbml0X18oKSIgbWV0aG9kIHdpbGwgbm90IGJlIGludm9rZWQuXG5cbiAgICJfX25ld19fKCkiIGlzIGludGVuZGVkIG1haW5seSB0byBhbGxvdyBzdWJjbGFzc2VzIG9mIGltbXV0YWJsZVxuICAgdHlwZXMgKGxpa2UgaW50LCBzdHIsIG9yIHR1cGxlKSB0byBjdXN0b21pemUgaW5zdGFuY2UgY3JlYXRpb24uICBJdFxuICAgaXMgYWxzbyBjb21tb25seSBvdmVycmlkZGVuIGluIGN1c3RvbSBtZXRhY2xhc3NlcyBpbiBvcmRlciB0b1xuICAgY3VzdG9taXplIGNsYXNzIGNyZWF0aW9uLlxuXG5vYmplY3QuX19pbml0X18oc2VsZlssIC4uLl0pXG5cbiAgIENhbGxlZCB3aGVuIHRoZSBpbnN0YW5jZSBpcyBjcmVhdGVkLiAgVGhlIGFyZ3VtZW50cyBhcmUgdGhvc2VcbiAgIHBhc3NlZCB0byB0aGUgY2xhc3MgY29uc3RydWN0b3IgZXhwcmVzc2lvbi4gIElmIGEgYmFzZSBjbGFzcyBoYXMgYW5cbiAgICJfX2luaXRfXygpIiBtZXRob2QsIHRoZSBkZXJpdmVkIGNsYXNzXCdzICJfX2luaXRfXygpIiBtZXRob2QsIGlmXG4gICBhbnksIG11c3QgZXhwbGljaXRseSBjYWxsIGl0IHRvIGVuc3VyZSBwcm9wZXIgaW5pdGlhbGl6YXRpb24gb2YgdGhlXG4gICBiYXNlIGNsYXNzIHBhcnQgb2YgdGhlIGluc3RhbmNlOyBmb3IgZXhhbXBsZTpcbiAgICJCYXNlQ2xhc3MuX19pbml0X18oc2VsZiwgW2FyZ3MuLi5dKSIuICBBcyBhIHNwZWNpYWwgY29uc3RyYWludCBvblxuICAgY29uc3RydWN0b3JzLCBubyB2YWx1ZSBtYXkgYmUgcmV0dXJuZWQ7IGRvaW5nIHNvIHdpbGwgY2F1c2UgYVxuICAgIlR5cGVFcnJvciIgdG8gYmUgcmFpc2VkIGF0IHJ1bnRpbWUuXG5cbm9iamVjdC5fX2RlbF9fKHNlbGYpXG5cbiAgIENhbGxlZCB3aGVuIHRoZSBpbnN0YW5jZSBpcyBhYm91dCB0byBiZSBkZXN0cm95ZWQuICBUaGlzIGlzIGFsc29cbiAgIGNhbGxlZCBhIGRlc3RydWN0b3IuICBJZiBhIGJhc2UgY2xhc3MgaGFzIGEgIl9fZGVsX18oKSIgbWV0aG9kLCB0aGVcbiAgIGRlcml2ZWQgY2xhc3NcJ3MgIl9fZGVsX18oKSIgbWV0aG9kLCBpZiBhbnksIG11c3QgZXhwbGljaXRseSBjYWxsIGl0XG4gICB0byBlbnN1cmUgcHJvcGVyIGRlbGV0aW9uIG9mIHRoZSBiYXNlIGNsYXNzIHBhcnQgb2YgdGhlIGluc3RhbmNlLlxuICAgTm90ZSB0aGF0IGl0IGlzIHBvc3NpYmxlICh0aG91Z2ggbm90IHJlY29tbWVuZGVkISkgZm9yIHRoZVxuICAgIl9fZGVsX18oKSIgbWV0aG9kIHRvIHBvc3Rwb25lIGRlc3RydWN0aW9uIG9mIHRoZSBpbnN0YW5jZSBieVxuICAgY3JlYXRpbmcgYSBuZXcgcmVmZXJlbmNlIHRvIGl0LiAgSXQgbWF5IHRoZW4gYmUgY2FsbGVkIGF0IGEgbGF0ZXJcbiAgIHRpbWUgd2hlbiB0aGlzIG5ldyByZWZlcmVuY2UgaXMgZGVsZXRlZC4gIEl0IGlzIG5vdCBndWFyYW50ZWVkIHRoYXRcbiAgICJfX2RlbF9fKCkiIG1ldGhvZHMgYXJlIGNhbGxlZCBmb3Igb2JqZWN0cyB0aGF0IHN0aWxsIGV4aXN0IHdoZW5cbiAgIHRoZSBpbnRlcnByZXRlciBleGl0cy5cblxuICAgTm90ZTogImRlbCB4IiBkb2VzblwndCBkaXJlY3RseSBjYWxsICJ4Ll9fZGVsX18oKSIgLS0tIHRoZSBmb3JtZXJcbiAgICAgZGVjcmVtZW50cyB0aGUgcmVmZXJlbmNlIGNvdW50IGZvciAieCIgYnkgb25lLCBhbmQgdGhlIGxhdHRlciBpc1xuICAgICBvbmx5IGNhbGxlZCB3aGVuICJ4IlwncyByZWZlcmVuY2UgY291bnQgcmVhY2hlcyB6ZXJvLiAgU29tZSBjb21tb25cbiAgICAgc2l0dWF0aW9ucyB0aGF0IG1heSBwcmV2ZW50IHRoZSByZWZlcmVuY2UgY291bnQgb2YgYW4gb2JqZWN0IGZyb21cbiAgICAgZ29pbmcgdG8gemVybyBpbmNsdWRlOiBjaXJjdWxhciByZWZlcmVuY2VzIGJldHdlZW4gb2JqZWN0cyAoZS5nLixcbiAgICAgYSBkb3VibHktbGlua2VkIGxpc3Qgb3IgYSB0cmVlIGRhdGEgc3RydWN0dXJlIHdpdGggcGFyZW50IGFuZFxuICAgICBjaGlsZCBwb2ludGVycyk7IGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3Qgb24gdGhlIHN0YWNrIGZyYW1lIG9mXG4gICAgIGEgZnVuY3Rpb24gdGhhdCBjYXVnaHQgYW4gZXhjZXB0aW9uICh0aGUgdHJhY2ViYWNrIHN0b3JlZCBpblxuICAgICAic3lzLmV4Y19pbmZvKClbMl0iIGtlZXBzIHRoZSBzdGFjayBmcmFtZSBhbGl2ZSk7IG9yIGEgcmVmZXJlbmNlXG4gICAgIHRvIHRoZSBvYmplY3Qgb24gdGhlIHN0YWNrIGZyYW1lIHRoYXQgcmFpc2VkIGFuIHVuaGFuZGxlZFxuICAgICBleGNlcHRpb24gaW4gaW50ZXJhY3RpdmUgbW9kZSAodGhlIHRyYWNlYmFjayBzdG9yZWQgaW5cbiAgICAgInN5cy5sYXN0X3RyYWNlYmFjayIga2VlcHMgdGhlIHN0YWNrIGZyYW1lIGFsaXZlKS4gIFRoZSBmaXJzdFxuICAgICBzaXR1YXRpb24gY2FuIG9ubHkgYmUgcmVtZWRpZWQgYnkgZXhwbGljaXRseSBicmVha2luZyB0aGUgY3ljbGVzO1xuICAgICB0aGUgbGF0dGVyIHR3byBzaXR1YXRpb25zIGNhbiBiZSByZXNvbHZlZCBieSBzdG9yaW5nICJOb25lIiBpblxuICAgICAic3lzLmxhc3RfdHJhY2ViYWNrIi4gQ2lyY3VsYXIgcmVmZXJlbmNlcyB3aGljaCBhcmUgZ2FyYmFnZSBhcmVcbiAgICAgZGV0ZWN0ZWQgd2hlbiB0aGUgb3B0aW9uIGN5Y2xlIGRldGVjdG9yIGlzIGVuYWJsZWQgKGl0XCdzIG9uIGJ5XG4gICAgIGRlZmF1bHQpLCBidXQgY2FuIG9ubHkgYmUgY2xlYW5lZCB1cCBpZiB0aGVyZSBhcmUgbm8gUHl0aG9uLVxuICAgICBsZXZlbCAiX19kZWxfXygpIiBtZXRob2RzIGludm9sdmVkLiBSZWZlciB0byB0aGUgZG9jdW1lbnRhdGlvblxuICAgICBmb3IgdGhlICJnYyIgbW9kdWxlIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGhvdyAiX19kZWxfXygpIlxuICAgICBtZXRob2RzIGFyZSBoYW5kbGVkIGJ5IHRoZSBjeWNsZSBkZXRlY3RvciwgcGFydGljdWxhcmx5IHRoZVxuICAgICBkZXNjcmlwdGlvbiBvZiB0aGUgImdhcmJhZ2UiIHZhbHVlLlxuXG4gICBXYXJuaW5nOiBEdWUgdG8gdGhlIHByZWNhcmlvdXMgY2lyY3Vtc3RhbmNlcyB1bmRlciB3aGljaFxuICAgICAiX19kZWxfXygpIiBtZXRob2RzIGFyZSBpbnZva2VkLCBleGNlcHRpb25zIHRoYXQgb2NjdXIgZHVyaW5nXG4gICAgIHRoZWlyIGV4ZWN1dGlvbiBhcmUgaWdub3JlZCwgYW5kIGEgd2FybmluZyBpcyBwcmludGVkIHRvXG4gICAgICJzeXMuc3RkZXJyIiBpbnN0ZWFkLiBBbHNvLCB3aGVuICJfX2RlbF9fKCkiIGlzIGludm9rZWQgaW5cbiAgICAgcmVzcG9uc2UgdG8gYSBtb2R1bGUgYmVpbmcgZGVsZXRlZCAoZS5nLiwgd2hlbiBleGVjdXRpb24gb2YgdGhlXG4gICAgIHByb2dyYW0gaXMgZG9uZSksIG90aGVyIGdsb2JhbHMgcmVmZXJlbmNlZCBieSB0aGUgIl9fZGVsX18oKSJcbiAgICAgbWV0aG9kIG1heSBhbHJlYWR5IGhhdmUgYmVlbiBkZWxldGVkIG9yIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nXG4gICAgIHRvcm4gZG93biAoZS5nLiB0aGUgaW1wb3J0IG1hY2hpbmVyeSBzaHV0dGluZyBkb3duKS4gIEZvciB0aGlzXG4gICAgIHJlYXNvbiwgIl9fZGVsX18oKSIgbWV0aG9kcyBzaG91bGQgZG8gdGhlIGFic29sdXRlIG1pbmltdW0gbmVlZGVkXG4gICAgIHRvIG1haW50YWluIGV4dGVybmFsIGludmFyaWFudHMuICBTdGFydGluZyB3aXRoIHZlcnNpb24gMS41LFxuICAgICBQeXRob24gZ3VhcmFudGVlcyB0aGF0IGdsb2JhbHMgd2hvc2UgbmFtZSBiZWdpbnMgd2l0aCBhIHNpbmdsZVxuICAgICB1bmRlcnNjb3JlIGFyZSBkZWxldGVkIGZyb20gdGhlaXIgbW9kdWxlIGJlZm9yZSBvdGhlciBnbG9iYWxzIGFyZVxuICAgICBkZWxldGVkOyBpZiBubyBvdGhlciByZWZlcmVuY2VzIHRvIHN1Y2ggZ2xvYmFscyBleGlzdCwgdGhpcyBtYXlcbiAgICAgaGVscCBpbiBhc3N1cmluZyB0aGF0IGltcG9ydGVkIG1vZHVsZXMgYXJlIHN0aWxsIGF2YWlsYWJsZSBhdCB0aGVcbiAgICAgdGltZSB3aGVuIHRoZSAiX19kZWxfXygpIiBtZXRob2QgaXMgY2FsbGVkLlxuXG5vYmplY3QuX19yZXByX18oc2VsZilcblxuICAgQ2FsbGVkIGJ5IHRoZSAicmVwcigpIiBidWlsdC1pbiBmdW5jdGlvbiB0byBjb21wdXRlIHRoZSAib2ZmaWNpYWwiXG4gICBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW4gb2JqZWN0LiAgSWYgYXQgYWxsIHBvc3NpYmxlLCB0aGlzXG4gICBzaG91bGQgbG9vayBsaWtlIGEgdmFsaWQgUHl0aG9uIGV4cHJlc3Npb24gdGhhdCBjb3VsZCBiZSB1c2VkIHRvXG4gICByZWNyZWF0ZSBhbiBvYmplY3Qgd2l0aCB0aGUgc2FtZSB2YWx1ZSAoZ2l2ZW4gYW4gYXBwcm9wcmlhdGVcbiAgIGVudmlyb25tZW50KS4gIElmIHRoaXMgaXMgbm90IHBvc3NpYmxlLCBhIHN0cmluZyBvZiB0aGUgZm9ybVxuICAgIjwuLi5zb21lIHVzZWZ1bCBkZXNjcmlwdGlvbi4uLj4iIHNob3VsZCBiZSByZXR1cm5lZC4gVGhlIHJldHVyblxuICAgdmFsdWUgbXVzdCBiZSBhIHN0cmluZyBvYmplY3QuIElmIGEgY2xhc3MgZGVmaW5lcyAiX19yZXByX18oKSIgYnV0XG4gICBub3QgIl9fc3RyX18oKSIsIHRoZW4gIl9fcmVwcl9fKCkiIGlzIGFsc28gdXNlZCB3aGVuIGFuICJpbmZvcm1hbCJcbiAgIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBpbnN0YW5jZXMgb2YgdGhhdCBjbGFzcyBpcyByZXF1aXJlZC5cblxuICAgVGhpcyBpcyB0eXBpY2FsbHkgdXNlZCBmb3IgZGVidWdnaW5nLCBzbyBpdCBpcyBpbXBvcnRhbnQgdGhhdCB0aGVcbiAgIHJlcHJlc2VudGF0aW9uIGlzIGluZm9ybWF0aW9uLXJpY2ggYW5kIHVuYW1iaWd1b3VzLlxuXG5vYmplY3QuX19zdHJfXyhzZWxmKVxuXG4gICBDYWxsZWQgYnkgInN0cihvYmplY3QpIiBhbmQgdGhlIGJ1aWx0LWluIGZ1bmN0aW9ucyAiZm9ybWF0KCkiIGFuZFxuICAgInByaW50KCkiIHRvIGNvbXB1dGUgdGhlICJpbmZvcm1hbCIgb3IgbmljZWx5IHByaW50YWJsZSBzdHJpbmdcbiAgIHJlcHJlc2VudGF0aW9uIG9mIGFuIG9iamVjdC4gIFRoZSByZXR1cm4gdmFsdWUgbXVzdCBiZSBhICpzdHJpbmcqXG4gICBvYmplY3QuXG5cbiAgIFRoaXMgbWV0aG9kIGRpZmZlcnMgZnJvbSAib2JqZWN0Ll9fcmVwcl9fKCkiIGluIHRoYXQgdGhlcmUgaXMgbm9cbiAgIGV4cGVjdGF0aW9uIHRoYXQgIl9fc3RyX18oKSIgcmV0dXJuIGEgdmFsaWQgUHl0aG9uIGV4cHJlc3Npb246IGFcbiAgIG1vcmUgY29udmVuaWVudCBvciBjb25jaXNlIHJlcHJlc2VudGF0aW9uIGNhbiBiZSB1c2VkLlxuXG4gICBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkIGJ5IHRoZSBidWlsdC1pbiB0eXBlICJvYmplY3QiXG4gICBjYWxscyAib2JqZWN0Ll9fcmVwcl9fKCkiLlxuXG5vYmplY3QuX19ieXRlc19fKHNlbGYpXG5cbiAgIENhbGxlZCBieSAiYnl0ZXMoKSIgdG8gY29tcHV0ZSBhIGJ5dGUtc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFuXG4gICBvYmplY3QuIFRoaXMgc2hvdWxkIHJldHVybiBhICJieXRlcyIgb2JqZWN0LlxuXG5vYmplY3QuX19mb3JtYXRfXyhzZWxmLCBmb3JtYXRfc3BlYylcblxuICAgQ2FsbGVkIGJ5IHRoZSAiZm9ybWF0KCkiIGJ1aWx0LWluIGZ1bmN0aW9uIChhbmQgYnkgZXh0ZW5zaW9uLCB0aGVcbiAgICJzdHIuZm9ybWF0KCkiIG1ldGhvZCBvZiBjbGFzcyAic3RyIikgdG8gcHJvZHVjZSBhICJmb3JtYXR0ZWQiXG4gICBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW4gb2JqZWN0LiBUaGUgImZvcm1hdF9zcGVjIiBhcmd1bWVudCBpcyBhXG4gICBzdHJpbmcgdGhhdCBjb250YWlucyBhIGRlc2NyaXB0aW9uIG9mIHRoZSBmb3JtYXR0aW5nIG9wdGlvbnNcbiAgIGRlc2lyZWQuIFRoZSBpbnRlcnByZXRhdGlvbiBvZiB0aGUgImZvcm1hdF9zcGVjIiBhcmd1bWVudCBpcyB1cCB0b1xuICAgdGhlIHR5cGUgaW1wbGVtZW50aW5nICJfX2Zvcm1hdF9fKCkiLCBob3dldmVyIG1vc3QgY2xhc3NlcyB3aWxsXG4gICBlaXRoZXIgZGVsZWdhdGUgZm9ybWF0dGluZyB0byBvbmUgb2YgdGhlIGJ1aWx0LWluIHR5cGVzLCBvciB1c2UgYVxuICAgc2ltaWxhciBmb3JtYXR0aW5nIG9wdGlvbiBzeW50YXguXG5cbiAgIFNlZSAqRm9ybWF0IFNwZWNpZmljYXRpb24gTWluaS1MYW5ndWFnZSogZm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlXG4gICBzdGFuZGFyZCBmb3JtYXR0aW5nIHN5bnRheC5cblxuICAgVGhlIHJldHVybiB2YWx1ZSBtdXN0IGJlIGEgc3RyaW5nIG9iamVjdC5cblxub2JqZWN0Ll9fbHRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2xlX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19lcV9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fbmVfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2d0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19nZV9fKHNlbGYsIG90aGVyKVxuXG4gICBUaGVzZSBhcmUgdGhlIHNvLWNhbGxlZCAicmljaCBjb21wYXJpc29uIiBtZXRob2RzLiBUaGVcbiAgIGNvcnJlc3BvbmRlbmNlIGJldHdlZW4gb3BlcmF0b3Igc3ltYm9scyBhbmQgbWV0aG9kIG5hbWVzIGlzIGFzXG4gICBmb2xsb3dzOiAieDx5IiBjYWxscyAieC5fX2x0X18oeSkiLCAieDw9eSIgY2FsbHMgInguX19sZV9fKHkpIixcbiAgICJ4PT15IiBjYWxscyAieC5fX2VxX18oeSkiLCAieCE9eSIgY2FsbHMgInguX19uZV9fKHkpIiwgIng+eSIgY2FsbHNcbiAgICJ4Ll9fZ3RfXyh5KSIsIGFuZCAieD49eSIgY2FsbHMgInguX19nZV9fKHkpIi5cblxuICAgQSByaWNoIGNvbXBhcmlzb24gbWV0aG9kIG1heSByZXR1cm4gdGhlIHNpbmdsZXRvbiAiTm90SW1wbGVtZW50ZWQiXG4gICBpZiBpdCBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIG9wZXJhdGlvbiBmb3IgYSBnaXZlbiBwYWlyIG9mXG4gICBhcmd1bWVudHMuIEJ5IGNvbnZlbnRpb24sICJGYWxzZSIgYW5kICJUcnVlIiBhcmUgcmV0dXJuZWQgZm9yIGFcbiAgIHN1Y2Nlc3NmdWwgY29tcGFyaXNvbi4gSG93ZXZlciwgdGhlc2UgbWV0aG9kcyBjYW4gcmV0dXJuIGFueSB2YWx1ZSxcbiAgIHNvIGlmIHRoZSBjb21wYXJpc29uIG9wZXJhdG9yIGlzIHVzZWQgaW4gYSBCb29sZWFuIGNvbnRleHQgKGUuZy4sXG4gICBpbiB0aGUgY29uZGl0aW9uIG9mIGFuICJpZiIgc3RhdGVtZW50KSwgUHl0aG9uIHdpbGwgY2FsbCAiYm9vbCgpIlxuICAgb24gdGhlIHZhbHVlIHRvIGRldGVybWluZSBpZiB0aGUgcmVzdWx0IGlzIHRydWUgb3IgZmFsc2UuXG5cbiAgIFRoZXJlIGFyZSBubyBpbXBsaWVkIHJlbGF0aW9uc2hpcHMgYW1vbmcgdGhlIGNvbXBhcmlzb24gb3BlcmF0b3JzLlxuICAgVGhlIHRydXRoIG9mICJ4PT15IiBkb2VzIG5vdCBpbXBseSB0aGF0ICJ4IT15IiBpcyBmYWxzZS5cbiAgIEFjY29yZGluZ2x5LCB3aGVuIGRlZmluaW5nICJfX2VxX18oKSIsIG9uZSBzaG91bGQgYWxzbyBkZWZpbmVcbiAgICJfX25lX18oKSIgc28gdGhhdCB0aGUgb3BlcmF0b3JzIHdpbGwgYmVoYXZlIGFzIGV4cGVjdGVkLiAgU2VlIHRoZVxuICAgcGFyYWdyYXBoIG9uICJfX2hhc2hfXygpIiBmb3Igc29tZSBpbXBvcnRhbnQgbm90ZXMgb24gY3JlYXRpbmdcbiAgICpoYXNoYWJsZSogb2JqZWN0cyB3aGljaCBzdXBwb3J0IGN1c3RvbSBjb21wYXJpc29uIG9wZXJhdGlvbnMgYW5kXG4gICBhcmUgdXNhYmxlIGFzIGRpY3Rpb25hcnkga2V5cy5cblxuICAgVGhlcmUgYXJlIG5vIHN3YXBwZWQtYXJndW1lbnQgdmVyc2lvbnMgb2YgdGhlc2UgbWV0aG9kcyAodG8gYmUgdXNlZFxuICAgd2hlbiB0aGUgbGVmdCBhcmd1bWVudCBkb2VzIG5vdCBzdXBwb3J0IHRoZSBvcGVyYXRpb24gYnV0IHRoZSByaWdodFxuICAgYXJndW1lbnQgZG9lcyk7IHJhdGhlciwgIl9fbHRfXygpIiBhbmQgIl9fZ3RfXygpIiBhcmUgZWFjaCBvdGhlclwnc1xuICAgcmVmbGVjdGlvbiwgIl9fbGVfXygpIiBhbmQgIl9fZ2VfXygpIiBhcmUgZWFjaCBvdGhlclwncyByZWZsZWN0aW9uLFxuICAgYW5kICJfX2VxX18oKSIgYW5kICJfX25lX18oKSIgYXJlIHRoZWlyIG93biByZWZsZWN0aW9uLlxuXG4gICBBcmd1bWVudHMgdG8gcmljaCBjb21wYXJpc29uIG1ldGhvZHMgYXJlIG5ldmVyIGNvZXJjZWQuXG5cbiAgIFRvIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGUgb3JkZXJpbmcgb3BlcmF0aW9ucyBmcm9tIGEgc2luZ2xlIHJvb3RcbiAgIG9wZXJhdGlvbiwgc2VlICJmdW5jdG9vbHMudG90YWxfb3JkZXJpbmcoKSIuXG5cbm9iamVjdC5fX2hhc2hfXyhzZWxmKVxuXG4gICBDYWxsZWQgYnkgYnVpbHQtaW4gZnVuY3Rpb24gImhhc2goKSIgYW5kIGZvciBvcGVyYXRpb25zIG9uIG1lbWJlcnNcbiAgIG9mIGhhc2hlZCBjb2xsZWN0aW9ucyBpbmNsdWRpbmcgInNldCIsICJmcm96ZW5zZXQiLCBhbmQgImRpY3QiLlxuICAgIl9faGFzaF9fKCkiIHNob3VsZCByZXR1cm4gYW4gaW50ZWdlci4gIFRoZSBvbmx5IHJlcXVpcmVkIHByb3BlcnR5XG4gICBpcyB0aGF0IG9iamVjdHMgd2hpY2ggY29tcGFyZSBlcXVhbCBoYXZlIHRoZSBzYW1lIGhhc2ggdmFsdWU7IGl0IGlzXG4gICBhZHZpc2VkIHRvIHNvbWVob3cgbWl4IHRvZ2V0aGVyIChlLmcuIHVzaW5nIGV4Y2x1c2l2ZSBvcikgdGhlIGhhc2hcbiAgIHZhbHVlcyBmb3IgdGhlIGNvbXBvbmVudHMgb2YgdGhlIG9iamVjdCB0aGF0IGFsc28gcGxheSBhIHBhcnQgaW5cbiAgIGNvbXBhcmlzb24gb2Ygb2JqZWN0cy5cblxuICAgTm90ZTogImhhc2goKSIgdHJ1bmNhdGVzIHRoZSB2YWx1ZSByZXR1cm5lZCBmcm9tIGFuIG9iamVjdFwnc1xuICAgICBjdXN0b20gIl9faGFzaF9fKCkiIG1ldGhvZCB0byB0aGUgc2l6ZSBvZiBhICJQeV9zc2l6ZV90Ii4gIFRoaXNcbiAgICAgaXMgdHlwaWNhbGx5IDggYnl0ZXMgb24gNjQtYml0IGJ1aWxkcyBhbmQgNCBieXRlcyBvbiAzMi1iaXRcbiAgICAgYnVpbGRzLiBJZiBhbiBvYmplY3RcJ3MgICAiX19oYXNoX18oKSIgbXVzdCBpbnRlcm9wZXJhdGUgb24gYnVpbGRzXG4gICAgIG9mIGRpZmZlcmVudCBiaXQgc2l6ZXMsIGJlIHN1cmUgdG8gY2hlY2sgdGhlIHdpZHRoIG9uIGFsbFxuICAgICBzdXBwb3J0ZWQgYnVpbGRzLiAgQW4gZWFzeSB3YXkgdG8gZG8gdGhpcyBpcyB3aXRoICJweXRob24gLWNcbiAgICAgImltcG9ydCBzeXM7IHByaW50KHN5cy5oYXNoX2luZm8ud2lkdGgpIiJcblxuICAgSWYgYSBjbGFzcyBkb2VzIG5vdCBkZWZpbmUgYW4gIl9fZXFfXygpIiBtZXRob2QgaXQgc2hvdWxkIG5vdFxuICAgZGVmaW5lIGEgIl9faGFzaF9fKCkiIG9wZXJhdGlvbiBlaXRoZXI7IGlmIGl0IGRlZmluZXMgIl9fZXFfXygpIlxuICAgYnV0IG5vdCAiX19oYXNoX18oKSIsIGl0cyBpbnN0YW5jZXMgd2lsbCBub3QgYmUgdXNhYmxlIGFzIGl0ZW1zIGluXG4gICBoYXNoYWJsZSBjb2xsZWN0aW9ucy4gIElmIGEgY2xhc3MgZGVmaW5lcyBtdXRhYmxlIG9iamVjdHMgYW5kXG4gICBpbXBsZW1lbnRzIGFuICJfX2VxX18oKSIgbWV0aG9kLCBpdCBzaG91bGQgbm90IGltcGxlbWVudFxuICAgIl9faGFzaF9fKCkiLCBzaW5jZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgaGFzaGFibGUgY29sbGVjdGlvbnNcbiAgIHJlcXVpcmVzIHRoYXQgYSBrZXlcJ3MgaGFzaCB2YWx1ZSBpcyBpbW11dGFibGUgKGlmIHRoZSBvYmplY3RcJ3MgaGFzaFxuICAgdmFsdWUgY2hhbmdlcywgaXQgd2lsbCBiZSBpbiB0aGUgd3JvbmcgaGFzaCBidWNrZXQpLlxuXG4gICBVc2VyLWRlZmluZWQgY2xhc3NlcyBoYXZlICJfX2VxX18oKSIgYW5kICJfX2hhc2hfXygpIiBtZXRob2RzIGJ5XG4gICBkZWZhdWx0OyB3aXRoIHRoZW0sIGFsbCBvYmplY3RzIGNvbXBhcmUgdW5lcXVhbCAoZXhjZXB0IHdpdGhcbiAgIHRoZW1zZWx2ZXMpIGFuZCAieC5fX2hhc2hfXygpIiByZXR1cm5zIGFuIGFwcHJvcHJpYXRlIHZhbHVlIHN1Y2hcbiAgIHRoYXQgInggPT0geSIgaW1wbGllcyBib3RoIHRoYXQgInggaXMgeSIgYW5kICJoYXNoKHgpID09IGhhc2goeSkiLlxuXG4gICBBIGNsYXNzIHRoYXQgb3ZlcnJpZGVzICJfX2VxX18oKSIgYW5kIGRvZXMgbm90IGRlZmluZSAiX19oYXNoX18oKSJcbiAgIHdpbGwgaGF2ZSBpdHMgIl9faGFzaF9fKCkiIGltcGxpY2l0bHkgc2V0IHRvICJOb25lIi4gIFdoZW4gdGhlXG4gICAiX19oYXNoX18oKSIgbWV0aG9kIG9mIGEgY2xhc3MgaXMgIk5vbmUiLCBpbnN0YW5jZXMgb2YgdGhlIGNsYXNzXG4gICB3aWxsIHJhaXNlIGFuIGFwcHJvcHJpYXRlICJUeXBlRXJyb3IiIHdoZW4gYSBwcm9ncmFtIGF0dGVtcHRzIHRvXG4gICByZXRyaWV2ZSB0aGVpciBoYXNoIHZhbHVlLCBhbmQgd2lsbCBhbHNvIGJlIGNvcnJlY3RseSBpZGVudGlmaWVkIGFzXG4gICB1bmhhc2hhYmxlIHdoZW4gY2hlY2tpbmcgImlzaW5zdGFuY2Uob2JqLCBjb2xsZWN0aW9ucy5IYXNoYWJsZSIpLlxuXG4gICBJZiBhIGNsYXNzIHRoYXQgb3ZlcnJpZGVzICJfX2VxX18oKSIgbmVlZHMgdG8gcmV0YWluIHRoZVxuICAgaW1wbGVtZW50YXRpb24gb2YgIl9faGFzaF9fKCkiIGZyb20gYSBwYXJlbnQgY2xhc3MsIHRoZSBpbnRlcnByZXRlclxuICAgbXVzdCBiZSB0b2xkIHRoaXMgZXhwbGljaXRseSBieSBzZXR0aW5nICJfX2hhc2hfXyA9XG4gICA8UGFyZW50Q2xhc3M+Ll9faGFzaF9fIi5cblxuICAgSWYgYSBjbGFzcyB0aGF0IGRvZXMgbm90IG92ZXJyaWRlICJfX2VxX18oKSIgd2lzaGVzIHRvIHN1cHByZXNzXG4gICBoYXNoIHN1cHBvcnQsIGl0IHNob3VsZCBpbmNsdWRlICJfX2hhc2hfXyA9IE5vbmUiIGluIHRoZSBjbGFzc1xuICAgZGVmaW5pdGlvbi4gQSBjbGFzcyB3aGljaCBkZWZpbmVzIGl0cyBvd24gIl9faGFzaF9fKCkiIHRoYXRcbiAgIGV4cGxpY2l0bHkgcmFpc2VzIGEgIlR5cGVFcnJvciIgd291bGQgYmUgaW5jb3JyZWN0bHkgaWRlbnRpZmllZCBhc1xuICAgaGFzaGFibGUgYnkgYW4gImlzaW5zdGFuY2Uob2JqLCBjb2xsZWN0aW9ucy5IYXNoYWJsZSkiIGNhbGwuXG5cbiAgIE5vdGU6IEJ5IGRlZmF1bHQsIHRoZSAiX19oYXNoX18oKSIgdmFsdWVzIG9mIHN0ciwgYnl0ZXMgYW5kXG4gICAgIGRhdGV0aW1lIG9iamVjdHMgYXJlICJzYWx0ZWQiIHdpdGggYW4gdW5wcmVkaWN0YWJsZSByYW5kb20gdmFsdWUuXG4gICAgIEFsdGhvdWdoIHRoZXkgcmVtYWluIGNvbnN0YW50IHdpdGhpbiBhbiBpbmRpdmlkdWFsIFB5dGhvblxuICAgICBwcm9jZXNzLCB0aGV5IGFyZSBub3QgcHJlZGljdGFibGUgYmV0d2VlbiByZXBlYXRlZCBpbnZvY2F0aW9ucyBvZlxuICAgICBQeXRob24uVGhpcyBpcyBpbnRlbmRlZCB0byBwcm92aWRlIHByb3RlY3Rpb24gYWdhaW5zdCBhIGRlbmlhbC1cbiAgICAgb2Ytc2VydmljZSBjYXVzZWQgYnkgY2FyZWZ1bGx5LWNob3NlbiBpbnB1dHMgdGhhdCBleHBsb2l0IHRoZVxuICAgICB3b3JzdCBjYXNlIHBlcmZvcm1hbmNlIG9mIGEgZGljdCBpbnNlcnRpb24sIE8obl4yKSBjb21wbGV4aXR5LlxuICAgICBTZWUgaHR0cDovL3d3dy5vY2VydC5vcmcvYWR2aXNvcmllcy9vY2VydC0yMDExLTAwMy5odG1sIGZvclxuICAgICBkZXRhaWxzLkNoYW5naW5nIGhhc2ggdmFsdWVzIGFmZmVjdHMgdGhlIGl0ZXJhdGlvbiBvcmRlciBvZlxuICAgICBkaWN0cywgc2V0cyBhbmQgb3RoZXIgbWFwcGluZ3MuICBQeXRob24gaGFzIG5ldmVyIG1hZGUgZ3VhcmFudGVlc1xuICAgICBhYm91dCB0aGlzIG9yZGVyaW5nIChhbmQgaXQgdHlwaWNhbGx5IHZhcmllcyBiZXR3ZWVuIDMyLWJpdCBhbmRcbiAgICAgNjQtYml0IGJ1aWxkcykuU2VlIGFsc28gIlBZVEhPTkhBU0hTRUVEIi5cblxuICAgQ2hhbmdlZCBpbiB2ZXJzaW9uIDMuMzogSGFzaCByYW5kb21pemF0aW9uIGlzIGVuYWJsZWQgYnkgZGVmYXVsdC5cblxub2JqZWN0Ll9fYm9vbF9fKHNlbGYpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgdHJ1dGggdmFsdWUgdGVzdGluZyBhbmQgdGhlIGJ1aWx0LWluIG9wZXJhdGlvblxuICAgImJvb2woKSI7IHNob3VsZCByZXR1cm4gIkZhbHNlIiBvciAiVHJ1ZSIuICBXaGVuIHRoaXMgbWV0aG9kIGlzIG5vdFxuICAgZGVmaW5lZCwgIl9fbGVuX18oKSIgaXMgY2FsbGVkLCBpZiBpdCBpcyBkZWZpbmVkLCBhbmQgdGhlIG9iamVjdCBpc1xuICAgY29uc2lkZXJlZCB0cnVlIGlmIGl0cyByZXN1bHQgaXMgbm9uemVyby4gIElmIGEgY2xhc3MgZGVmaW5lc1xuICAgbmVpdGhlciAiX19sZW5fXygpIiBub3IgIl9fYm9vbF9fKCkiLCBhbGwgaXRzIGluc3RhbmNlcyBhcmVcbiAgIGNvbnNpZGVyZWQgdHJ1ZS5cblxuXG5DdXN0b21pemluZyBhdHRyaWJ1dGUgYWNjZXNzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cblRoZSBmb2xsb3dpbmcgbWV0aG9kcyBjYW4gYmUgZGVmaW5lZCB0byBjdXN0b21pemUgdGhlIG1lYW5pbmcgb2ZcbmF0dHJpYnV0ZSBhY2Nlc3MgKHVzZSBvZiwgYXNzaWdubWVudCB0bywgb3IgZGVsZXRpb24gb2YgIngubmFtZSIpIGZvclxuY2xhc3MgaW5zdGFuY2VzLlxuXG5vYmplY3QuX19nZXRhdHRyX18oc2VsZiwgbmFtZSlcblxuICAgQ2FsbGVkIHdoZW4gYW4gYXR0cmlidXRlIGxvb2t1cCBoYXMgbm90IGZvdW5kIHRoZSBhdHRyaWJ1dGUgaW4gdGhlXG4gICB1c3VhbCBwbGFjZXMgKGkuZS4gaXQgaXMgbm90IGFuIGluc3RhbmNlIGF0dHJpYnV0ZSBub3IgaXMgaXQgZm91bmRcbiAgIGluIHRoZSBjbGFzcyB0cmVlIGZvciAic2VsZiIpLiAgIm5hbWUiIGlzIHRoZSBhdHRyaWJ1dGUgbmFtZS4gVGhpc1xuICAgbWV0aG9kIHNob3VsZCByZXR1cm4gdGhlIChjb21wdXRlZCkgYXR0cmlidXRlIHZhbHVlIG9yIHJhaXNlIGFuXG4gICAiQXR0cmlidXRlRXJyb3IiIGV4Y2VwdGlvbi5cblxuICAgTm90ZSB0aGF0IGlmIHRoZSBhdHRyaWJ1dGUgaXMgZm91bmQgdGhyb3VnaCB0aGUgbm9ybWFsIG1lY2hhbmlzbSxcbiAgICJfX2dldGF0dHJfXygpIiBpcyBub3QgY2FsbGVkLiAgKFRoaXMgaXMgYW4gaW50ZW50aW9uYWwgYXN5bW1ldHJ5XG4gICBiZXR3ZWVuICJfX2dldGF0dHJfXygpIiBhbmQgIl9fc2V0YXR0cl9fKCkiLikgVGhpcyBpcyBkb25lIGJvdGggZm9yXG4gICBlZmZpY2llbmN5IHJlYXNvbnMgYW5kIGJlY2F1c2Ugb3RoZXJ3aXNlICJfX2dldGF0dHJfXygpIiB3b3VsZCBoYXZlXG4gICBubyB3YXkgdG8gYWNjZXNzIG90aGVyIGF0dHJpYnV0ZXMgb2YgdGhlIGluc3RhbmNlLiAgTm90ZSB0aGF0IGF0XG4gICBsZWFzdCBmb3IgaW5zdGFuY2UgdmFyaWFibGVzLCB5b3UgY2FuIGZha2UgdG90YWwgY29udHJvbCBieSBub3RcbiAgIGluc2VydGluZyBhbnkgdmFsdWVzIGluIHRoZSBpbnN0YW5jZSBhdHRyaWJ1dGUgZGljdGlvbmFyeSAoYnV0XG4gICBpbnN0ZWFkIGluc2VydGluZyB0aGVtIGluIGFub3RoZXIgb2JqZWN0KS4gIFNlZSB0aGVcbiAgICJfX2dldGF0dHJpYnV0ZV9fKCkiIG1ldGhvZCBiZWxvdyBmb3IgYSB3YXkgdG8gYWN0dWFsbHkgZ2V0IHRvdGFsXG4gICBjb250cm9sIG92ZXIgYXR0cmlidXRlIGFjY2Vzcy5cblxub2JqZWN0Ll9fZ2V0YXR0cmlidXRlX18oc2VsZiwgbmFtZSlcblxuICAgQ2FsbGVkIHVuY29uZGl0aW9uYWxseSB0byBpbXBsZW1lbnQgYXR0cmlidXRlIGFjY2Vzc2VzIGZvclxuICAgaW5zdGFuY2VzIG9mIHRoZSBjbGFzcy4gSWYgdGhlIGNsYXNzIGFsc28gZGVmaW5lcyAiX19nZXRhdHRyX18oKSIsXG4gICB0aGUgbGF0dGVyIHdpbGwgbm90IGJlIGNhbGxlZCB1bmxlc3MgIl9fZ2V0YXR0cmlidXRlX18oKSIgZWl0aGVyXG4gICBjYWxscyBpdCBleHBsaWNpdGx5IG9yIHJhaXNlcyBhbiAiQXR0cmlidXRlRXJyb3IiLiBUaGlzIG1ldGhvZFxuICAgc2hvdWxkIHJldHVybiB0aGUgKGNvbXB1dGVkKSBhdHRyaWJ1dGUgdmFsdWUgb3IgcmFpc2UgYW5cbiAgICJBdHRyaWJ1dGVFcnJvciIgZXhjZXB0aW9uLiBJbiBvcmRlciB0byBhdm9pZCBpbmZpbml0ZSByZWN1cnNpb24gaW5cbiAgIHRoaXMgbWV0aG9kLCBpdHMgaW1wbGVtZW50YXRpb24gc2hvdWxkIGFsd2F5cyBjYWxsIHRoZSBiYXNlIGNsYXNzXG4gICBtZXRob2Qgd2l0aCB0aGUgc2FtZSBuYW1lIHRvIGFjY2VzcyBhbnkgYXR0cmlidXRlcyBpdCBuZWVkcywgZm9yXG4gICBleGFtcGxlLCAib2JqZWN0Ll9fZ2V0YXR0cmlidXRlX18oc2VsZiwgbmFtZSkiLlxuXG4gICBOb3RlOiBUaGlzIG1ldGhvZCBtYXkgc3RpbGwgYmUgYnlwYXNzZWQgd2hlbiBsb29raW5nIHVwIHNwZWNpYWxcbiAgICAgbWV0aG9kcyBhcyB0aGUgcmVzdWx0IG9mIGltcGxpY2l0IGludm9jYXRpb24gdmlhIGxhbmd1YWdlIHN5bnRheFxuICAgICBvciBidWlsdC1pbiBmdW5jdGlvbnMuIFNlZSAqU3BlY2lhbCBtZXRob2QgbG9va3VwKi5cblxub2JqZWN0Ll9fc2V0YXR0cl9fKHNlbGYsIG5hbWUsIHZhbHVlKVxuXG4gICBDYWxsZWQgd2hlbiBhbiBhdHRyaWJ1dGUgYXNzaWdubWVudCBpcyBhdHRlbXB0ZWQuICBUaGlzIGlzIGNhbGxlZFxuICAgaW5zdGVhZCBvZiB0aGUgbm9ybWFsIG1lY2hhbmlzbSAoaS5lLiBzdG9yZSB0aGUgdmFsdWUgaW4gdGhlXG4gICBpbnN0YW5jZSBkaWN0aW9uYXJ5KS4gKm5hbWUqIGlzIHRoZSBhdHRyaWJ1dGUgbmFtZSwgKnZhbHVlKiBpcyB0aGVcbiAgIHZhbHVlIHRvIGJlIGFzc2lnbmVkIHRvIGl0LlxuXG4gICBJZiAiX19zZXRhdHRyX18oKSIgd2FudHMgdG8gYXNzaWduIHRvIGFuIGluc3RhbmNlIGF0dHJpYnV0ZSwgaXRcbiAgIHNob3VsZCBjYWxsIHRoZSBiYXNlIGNsYXNzIG1ldGhvZCB3aXRoIHRoZSBzYW1lIG5hbWUsIGZvciBleGFtcGxlLFxuICAgIm9iamVjdC5fX3NldGF0dHJfXyhzZWxmLCBuYW1lLCB2YWx1ZSkiLlxuXG5vYmplY3QuX19kZWxhdHRyX18oc2VsZiwgbmFtZSlcblxuICAgTGlrZSAiX19zZXRhdHRyX18oKSIgYnV0IGZvciBhdHRyaWJ1dGUgZGVsZXRpb24gaW5zdGVhZCBvZlxuICAgYXNzaWdubWVudC4gIFRoaXMgc2hvdWxkIG9ubHkgYmUgaW1wbGVtZW50ZWQgaWYgImRlbCBvYmoubmFtZSIgaXNcbiAgIG1lYW5pbmdmdWwgZm9yIHRoZSBvYmplY3QuXG5cbm9iamVjdC5fX2Rpcl9fKHNlbGYpXG5cbiAgIENhbGxlZCB3aGVuICJkaXIoKSIgaXMgY2FsbGVkIG9uIHRoZSBvYmplY3QuIEEgc2VxdWVuY2UgbXVzdCBiZVxuICAgcmV0dXJuZWQuICJkaXIoKSIgY29udmVydHMgdGhlIHJldHVybmVkIHNlcXVlbmNlIHRvIGEgbGlzdCBhbmRcbiAgIHNvcnRzIGl0LlxuXG5cbkltcGxlbWVudGluZyBEZXNjcmlwdG9yc1xuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblRoZSBmb2xsb3dpbmcgbWV0aG9kcyBvbmx5IGFwcGx5IHdoZW4gYW4gaW5zdGFuY2Ugb2YgdGhlIGNsYXNzXG5jb250YWluaW5nIHRoZSBtZXRob2QgKGEgc28tY2FsbGVkICpkZXNjcmlwdG9yKiBjbGFzcykgYXBwZWFycyBpbiBhblxuKm93bmVyKiBjbGFzcyAodGhlIGRlc2NyaXB0b3IgbXVzdCBiZSBpbiBlaXRoZXIgdGhlIG93bmVyXCdzIGNsYXNzXG5kaWN0aW9uYXJ5IG9yIGluIHRoZSBjbGFzcyBkaWN0aW9uYXJ5IGZvciBvbmUgb2YgaXRzIHBhcmVudHMpLiAgSW4gdGhlXG5leGFtcGxlcyBiZWxvdywgInRoZSBhdHRyaWJ1dGUiIHJlZmVycyB0byB0aGUgYXR0cmlidXRlIHdob3NlIG5hbWUgaXNcbnRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IGluIHRoZSBvd25lciBjbGFzc1wnICJfX2RpY3RfXyIuXG5cbm9iamVjdC5fX2dldF9fKHNlbGYsIGluc3RhbmNlLCBvd25lcilcblxuICAgQ2FsbGVkIHRvIGdldCB0aGUgYXR0cmlidXRlIG9mIHRoZSBvd25lciBjbGFzcyAoY2xhc3MgYXR0cmlidXRlXG4gICBhY2Nlc3MpIG9yIG9mIGFuIGluc3RhbmNlIG9mIHRoYXQgY2xhc3MgKGluc3RhbmNlIGF0dHJpYnV0ZVxuICAgYWNjZXNzKS4gKm93bmVyKiBpcyBhbHdheXMgdGhlIG93bmVyIGNsYXNzLCB3aGlsZSAqaW5zdGFuY2UqIGlzIHRoZVxuICAgaW5zdGFuY2UgdGhhdCB0aGUgYXR0cmlidXRlIHdhcyBhY2Nlc3NlZCB0aHJvdWdoLCBvciAiTm9uZSIgd2hlblxuICAgdGhlIGF0dHJpYnV0ZSBpcyBhY2Nlc3NlZCB0aHJvdWdoIHRoZSAqb3duZXIqLiAgVGhpcyBtZXRob2Qgc2hvdWxkXG4gICByZXR1cm4gdGhlIChjb21wdXRlZCkgYXR0cmlidXRlIHZhbHVlIG9yIHJhaXNlIGFuICJBdHRyaWJ1dGVFcnJvciJcbiAgIGV4Y2VwdGlvbi5cblxub2JqZWN0Ll9fc2V0X18oc2VsZiwgaW5zdGFuY2UsIHZhbHVlKVxuXG4gICBDYWxsZWQgdG8gc2V0IHRoZSBhdHRyaWJ1dGUgb24gYW4gaW5zdGFuY2UgKmluc3RhbmNlKiBvZiB0aGUgb3duZXJcbiAgIGNsYXNzIHRvIGEgbmV3IHZhbHVlLCAqdmFsdWUqLlxuXG5vYmplY3QuX19kZWxldGVfXyhzZWxmLCBpbnN0YW5jZSlcblxuICAgQ2FsbGVkIHRvIGRlbGV0ZSB0aGUgYXR0cmlidXRlIG9uIGFuIGluc3RhbmNlICppbnN0YW5jZSogb2YgdGhlXG4gICBvd25lciBjbGFzcy5cblxuXG5JbnZva2luZyBEZXNjcmlwdG9yc1xuLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuSW4gZ2VuZXJhbCwgYSBkZXNjcmlwdG9yIGlzIGFuIG9iamVjdCBhdHRyaWJ1dGUgd2l0aCAiYmluZGluZ1xuYmVoYXZpb3IiLCBvbmUgd2hvc2UgYXR0cmlidXRlIGFjY2VzcyBoYXMgYmVlbiBvdmVycmlkZGVuIGJ5IG1ldGhvZHNcbmluIHRoZSBkZXNjcmlwdG9yIHByb3RvY29sOiAgIl9fZ2V0X18oKSIsICJfX3NldF9fKCkiLCBhbmRcbiJfX2RlbGV0ZV9fKCkiLiBJZiBhbnkgb2YgdGhvc2UgbWV0aG9kcyBhcmUgZGVmaW5lZCBmb3IgYW4gb2JqZWN0LCBpdFxuaXMgc2FpZCB0byBiZSBhIGRlc2NyaXB0b3IuXG5cblRoZSBkZWZhdWx0IGJlaGF2aW9yIGZvciBhdHRyaWJ1dGUgYWNjZXNzIGlzIHRvIGdldCwgc2V0LCBvciBkZWxldGVcbnRoZSBhdHRyaWJ1dGUgZnJvbSBhbiBvYmplY3RcJ3MgZGljdGlvbmFyeS4gRm9yIGluc3RhbmNlLCAiYS54IiBoYXMgYVxubG9va3VwIGNoYWluIHN0YXJ0aW5nIHdpdGggImEuX19kaWN0X19bXCd4XCddIiwgdGhlblxuInR5cGUoYSkuX19kaWN0X19bXCd4XCddIiwgYW5kIGNvbnRpbnVpbmcgdGhyb3VnaCB0aGUgYmFzZSBjbGFzc2VzIG9mXG4idHlwZShhKSIgZXhjbHVkaW5nIG1ldGFjbGFzc2VzLlxuXG5Ib3dldmVyLCBpZiB0aGUgbG9va2VkLXVwIHZhbHVlIGlzIGFuIG9iamVjdCBkZWZpbmluZyBvbmUgb2YgdGhlXG5kZXNjcmlwdG9yIG1ldGhvZHMsIHRoZW4gUHl0aG9uIG1heSBvdmVycmlkZSB0aGUgZGVmYXVsdCBiZWhhdmlvciBhbmRcbmludm9rZSB0aGUgZGVzY3JpcHRvciBtZXRob2QgaW5zdGVhZC4gIFdoZXJlIHRoaXMgb2NjdXJzIGluIHRoZVxucHJlY2VkZW5jZSBjaGFpbiBkZXBlbmRzIG9uIHdoaWNoIGRlc2NyaXB0b3IgbWV0aG9kcyB3ZXJlIGRlZmluZWQgYW5kXG5ob3cgdGhleSB3ZXJlIGNhbGxlZC5cblxuVGhlIHN0YXJ0aW5nIHBvaW50IGZvciBkZXNjcmlwdG9yIGludm9jYXRpb24gaXMgYSBiaW5kaW5nLCAiYS54Ii4gSG93XG50aGUgYXJndW1lbnRzIGFyZSBhc3NlbWJsZWQgZGVwZW5kcyBvbiAiYSI6XG5cbkRpcmVjdCBDYWxsXG4gICBUaGUgc2ltcGxlc3QgYW5kIGxlYXN0IGNvbW1vbiBjYWxsIGlzIHdoZW4gdXNlciBjb2RlIGRpcmVjdGx5XG4gICBpbnZva2VzIGEgZGVzY3JpcHRvciBtZXRob2Q6ICAgICJ4Ll9fZ2V0X18oYSkiLlxuXG5JbnN0YW5jZSBCaW5kaW5nXG4gICBJZiBiaW5kaW5nIHRvIGFuIG9iamVjdCBpbnN0YW5jZSwgImEueCIgaXMgdHJhbnNmb3JtZWQgaW50byB0aGVcbiAgIGNhbGw6ICJ0eXBlKGEpLl9fZGljdF9fW1wneFwnXS5fX2dldF9fKGEsIHR5cGUoYSkpIi5cblxuQ2xhc3MgQmluZGluZ1xuICAgSWYgYmluZGluZyB0byBhIGNsYXNzLCAiQS54IiBpcyB0cmFuc2Zvcm1lZCBpbnRvIHRoZSBjYWxsOlxuICAgIkEuX19kaWN0X19bXCd4XCddLl9fZ2V0X18oTm9uZSwgQSkiLlxuXG5TdXBlciBCaW5kaW5nXG4gICBJZiAiYSIgaXMgYW4gaW5zdGFuY2Ugb2YgInN1cGVyIiwgdGhlbiB0aGUgYmluZGluZyAic3VwZXIoQixcbiAgIG9iaikubSgpIiBzZWFyY2hlcyAib2JqLl9fY2xhc3NfXy5fX21yb19fIiBmb3IgdGhlIGJhc2UgY2xhc3MgIkEiXG4gICBpbW1lZGlhdGVseSBwcmVjZWRpbmcgIkIiIGFuZCB0aGVuIGludm9rZXMgdGhlIGRlc2NyaXB0b3Igd2l0aCB0aGVcbiAgIGNhbGw6ICJBLl9fZGljdF9fW1wnbVwnXS5fX2dldF9fKG9iaiwgb2JqLl9fY2xhc3NfXykiLlxuXG5Gb3IgaW5zdGFuY2UgYmluZGluZ3MsIHRoZSBwcmVjZWRlbmNlIG9mIGRlc2NyaXB0b3IgaW52b2NhdGlvbiBkZXBlbmRzXG5vbiB0aGUgd2hpY2ggZGVzY3JpcHRvciBtZXRob2RzIGFyZSBkZWZpbmVkLiAgQSBkZXNjcmlwdG9yIGNhbiBkZWZpbmVcbmFueSBjb21iaW5hdGlvbiBvZiAiX19nZXRfXygpIiwgIl9fc2V0X18oKSIgYW5kICJfX2RlbGV0ZV9fKCkiLiAgSWYgaXRcbmRvZXMgbm90IGRlZmluZSAiX19nZXRfXygpIiwgdGhlbiBhY2Nlc3NpbmcgdGhlIGF0dHJpYnV0ZSB3aWxsIHJldHVyblxudGhlIGRlc2NyaXB0b3Igb2JqZWN0IGl0c2VsZiB1bmxlc3MgdGhlcmUgaXMgYSB2YWx1ZSBpbiB0aGUgb2JqZWN0XCdzXG5pbnN0YW5jZSBkaWN0aW9uYXJ5LiAgSWYgdGhlIGRlc2NyaXB0b3IgZGVmaW5lcyAiX19zZXRfXygpIiBhbmQvb3JcbiJfX2RlbGV0ZV9fKCkiLCBpdCBpcyBhIGRhdGEgZGVzY3JpcHRvcjsgaWYgaXQgZGVmaW5lcyBuZWl0aGVyLCBpdCBpc1xuYSBub24tZGF0YSBkZXNjcmlwdG9yLiAgTm9ybWFsbHksIGRhdGEgZGVzY3JpcHRvcnMgZGVmaW5lIGJvdGhcbiJfX2dldF9fKCkiIGFuZCAiX19zZXRfXygpIiwgd2hpbGUgbm9uLWRhdGEgZGVzY3JpcHRvcnMgaGF2ZSBqdXN0IHRoZVxuIl9fZ2V0X18oKSIgbWV0aG9kLiAgRGF0YSBkZXNjcmlwdG9ycyB3aXRoICJfX3NldF9fKCkiIGFuZCAiX19nZXRfXygpIlxuZGVmaW5lZCBhbHdheXMgb3ZlcnJpZGUgYSByZWRlZmluaXRpb24gaW4gYW4gaW5zdGFuY2UgZGljdGlvbmFyeS4gIEluXG5jb250cmFzdCwgbm9uLWRhdGEgZGVzY3JpcHRvcnMgY2FuIGJlIG92ZXJyaWRkZW4gYnkgaW5zdGFuY2VzLlxuXG5QeXRob24gbWV0aG9kcyAoaW5jbHVkaW5nICJzdGF0aWNtZXRob2QoKSIgYW5kICJjbGFzc21ldGhvZCgpIikgYXJlXG5pbXBsZW1lbnRlZCBhcyBub24tZGF0YSBkZXNjcmlwdG9ycy4gIEFjY29yZGluZ2x5LCBpbnN0YW5jZXMgY2FuXG5yZWRlZmluZSBhbmQgb3ZlcnJpZGUgbWV0aG9kcy4gIFRoaXMgYWxsb3dzIGluZGl2aWR1YWwgaW5zdGFuY2VzIHRvXG5hY3F1aXJlIGJlaGF2aW9ycyB0aGF0IGRpZmZlciBmcm9tIG90aGVyIGluc3RhbmNlcyBvZiB0aGUgc2FtZSBjbGFzcy5cblxuVGhlICJwcm9wZXJ0eSgpIiBmdW5jdGlvbiBpcyBpbXBsZW1lbnRlZCBhcyBhIGRhdGEgZGVzY3JpcHRvci5cbkFjY29yZGluZ2x5LCBpbnN0YW5jZXMgY2Fubm90IG92ZXJyaWRlIHRoZSBiZWhhdmlvciBvZiBhIHByb3BlcnR5LlxuXG5cbl9fc2xvdHNfX1xuLS0tLS0tLS0tXG5cbkJ5IGRlZmF1bHQsIGluc3RhbmNlcyBvZiBjbGFzc2VzIGhhdmUgYSBkaWN0aW9uYXJ5IGZvciBhdHRyaWJ1dGVcbnN0b3JhZ2UuICBUaGlzIHdhc3RlcyBzcGFjZSBmb3Igb2JqZWN0cyBoYXZpbmcgdmVyeSBmZXcgaW5zdGFuY2VcbnZhcmlhYmxlcy4gIFRoZSBzcGFjZSBjb25zdW1wdGlvbiBjYW4gYmVjb21lIGFjdXRlIHdoZW4gY3JlYXRpbmcgbGFyZ2Vcbm51bWJlcnMgb2YgaW5zdGFuY2VzLlxuXG5UaGUgZGVmYXVsdCBjYW4gYmUgb3ZlcnJpZGRlbiBieSBkZWZpbmluZyAqX19zbG90c19fKiBpbiBhIGNsYXNzXG5kZWZpbml0aW9uLiBUaGUgKl9fc2xvdHNfXyogZGVjbGFyYXRpb24gdGFrZXMgYSBzZXF1ZW5jZSBvZiBpbnN0YW5jZVxudmFyaWFibGVzIGFuZCByZXNlcnZlcyBqdXN0IGVub3VnaCBzcGFjZSBpbiBlYWNoIGluc3RhbmNlIHRvIGhvbGQgYVxudmFsdWUgZm9yIGVhY2ggdmFyaWFibGUuICBTcGFjZSBpcyBzYXZlZCBiZWNhdXNlICpfX2RpY3RfXyogaXMgbm90XG5jcmVhdGVkIGZvciBlYWNoIGluc3RhbmNlLlxuXG5vYmplY3QuX19zbG90c19fXG5cbiAgIFRoaXMgY2xhc3MgdmFyaWFibGUgY2FuIGJlIGFzc2lnbmVkIGEgc3RyaW5nLCBpdGVyYWJsZSwgb3Igc2VxdWVuY2VcbiAgIG9mIHN0cmluZ3Mgd2l0aCB2YXJpYWJsZSBuYW1lcyB1c2VkIGJ5IGluc3RhbmNlcy4gIElmIGRlZmluZWQgaW4gYVxuICAgY2xhc3MsICpfX3Nsb3RzX18qIHJlc2VydmVzIHNwYWNlIGZvciB0aGUgZGVjbGFyZWQgdmFyaWFibGVzIGFuZFxuICAgcHJldmVudHMgdGhlIGF1dG9tYXRpYyBjcmVhdGlvbiBvZiAqX19kaWN0X18qIGFuZCAqX193ZWFrcmVmX18qIGZvclxuICAgZWFjaCBpbnN0YW5jZS5cblxuXG5Ob3RlcyBvbiB1c2luZyAqX19zbG90c19fKlxufn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5cblxuKiBXaGVuIGluaGVyaXRpbmcgZnJvbSBhIGNsYXNzIHdpdGhvdXQgKl9fc2xvdHNfXyosIHRoZSAqX19kaWN0X18qXG4gIGF0dHJpYnV0ZSBvZiB0aGF0IGNsYXNzIHdpbGwgYWx3YXlzIGJlIGFjY2Vzc2libGUsIHNvIGEgKl9fc2xvdHNfXypcbiAgZGVmaW5pdGlvbiBpbiB0aGUgc3ViY2xhc3MgaXMgbWVhbmluZ2xlc3MuXG5cbiogV2l0aG91dCBhICpfX2RpY3RfXyogdmFyaWFibGUsIGluc3RhbmNlcyBjYW5ub3QgYmUgYXNzaWduZWQgbmV3XG4gIHZhcmlhYmxlcyBub3QgbGlzdGVkIGluIHRoZSAqX19zbG90c19fKiBkZWZpbml0aW9uLiAgQXR0ZW1wdHMgdG9cbiAgYXNzaWduIHRvIGFuIHVubGlzdGVkIHZhcmlhYmxlIG5hbWUgcmFpc2VzICJBdHRyaWJ1dGVFcnJvciIuIElmXG4gIGR5bmFtaWMgYXNzaWdubWVudCBvZiBuZXcgdmFyaWFibGVzIGlzIGRlc2lyZWQsIHRoZW4gYWRkXG4gICJcJ19fZGljdF9fXCciIHRvIHRoZSBzZXF1ZW5jZSBvZiBzdHJpbmdzIGluIHRoZSAqX19zbG90c19fKlxuICBkZWNsYXJhdGlvbi5cblxuKiBXaXRob3V0IGEgKl9fd2Vha3JlZl9fKiB2YXJpYWJsZSBmb3IgZWFjaCBpbnN0YW5jZSwgY2xhc3Nlc1xuICBkZWZpbmluZyAqX19zbG90c19fKiBkbyBub3Qgc3VwcG9ydCB3ZWFrIHJlZmVyZW5jZXMgdG8gaXRzXG4gIGluc3RhbmNlcy4gSWYgd2VhayByZWZlcmVuY2Ugc3VwcG9ydCBpcyBuZWVkZWQsIHRoZW4gYWRkXG4gICJcJ19fd2Vha3JlZl9fXCciIHRvIHRoZSBzZXF1ZW5jZSBvZiBzdHJpbmdzIGluIHRoZSAqX19zbG90c19fKlxuICBkZWNsYXJhdGlvbi5cblxuKiAqX19zbG90c19fKiBhcmUgaW1wbGVtZW50ZWQgYXQgdGhlIGNsYXNzIGxldmVsIGJ5IGNyZWF0aW5nXG4gIGRlc2NyaXB0b3JzICgqSW1wbGVtZW50aW5nIERlc2NyaXB0b3JzKikgZm9yIGVhY2ggdmFyaWFibGUgbmFtZS4gIEFzXG4gIGEgcmVzdWx0LCBjbGFzcyBhdHRyaWJ1dGVzIGNhbm5vdCBiZSB1c2VkIHRvIHNldCBkZWZhdWx0IHZhbHVlcyBmb3JcbiAgaW5zdGFuY2UgdmFyaWFibGVzIGRlZmluZWQgYnkgKl9fc2xvdHNfXyo7IG90aGVyd2lzZSwgdGhlIGNsYXNzXG4gIGF0dHJpYnV0ZSB3b3VsZCBvdmVyd3JpdGUgdGhlIGRlc2NyaXB0b3IgYXNzaWdubWVudC5cblxuKiBUaGUgYWN0aW9uIG9mIGEgKl9fc2xvdHNfXyogZGVjbGFyYXRpb24gaXMgbGltaXRlZCB0byB0aGUgY2xhc3NcbiAgd2hlcmUgaXQgaXMgZGVmaW5lZC4gIEFzIGEgcmVzdWx0LCBzdWJjbGFzc2VzIHdpbGwgaGF2ZSBhICpfX2RpY3RfXypcbiAgdW5sZXNzIHRoZXkgYWxzbyBkZWZpbmUgKl9fc2xvdHNfXyogKHdoaWNoIG11c3Qgb25seSBjb250YWluIG5hbWVzXG4gIG9mIGFueSAqYWRkaXRpb25hbCogc2xvdHMpLlxuXG4qIElmIGEgY2xhc3MgZGVmaW5lcyBhIHNsb3QgYWxzbyBkZWZpbmVkIGluIGEgYmFzZSBjbGFzcywgdGhlXG4gIGluc3RhbmNlIHZhcmlhYmxlIGRlZmluZWQgYnkgdGhlIGJhc2UgY2xhc3Mgc2xvdCBpcyBpbmFjY2Vzc2libGVcbiAgKGV4Y2VwdCBieSByZXRyaWV2aW5nIGl0cyBkZXNjcmlwdG9yIGRpcmVjdGx5IGZyb20gdGhlIGJhc2UgY2xhc3MpLlxuICBUaGlzIHJlbmRlcnMgdGhlIG1lYW5pbmcgb2YgdGhlIHByb2dyYW0gdW5kZWZpbmVkLiAgSW4gdGhlIGZ1dHVyZSwgYVxuICBjaGVjayBtYXkgYmUgYWRkZWQgdG8gcHJldmVudCB0aGlzLlxuXG4qIE5vbmVtcHR5ICpfX3Nsb3RzX18qIGRvZXMgbm90IHdvcmsgZm9yIGNsYXNzZXMgZGVyaXZlZCBmcm9tXG4gICJ2YXJpYWJsZS1sZW5ndGgiIGJ1aWx0LWluIHR5cGVzIHN1Y2ggYXMgImludCIsICJieXRlcyIgYW5kICJ0dXBsZSIuXG5cbiogQW55IG5vbi1zdHJpbmcgaXRlcmFibGUgbWF5IGJlIGFzc2lnbmVkIHRvICpfX3Nsb3RzX18qLiBNYXBwaW5nc1xuICBtYXkgYWxzbyBiZSB1c2VkOyBob3dldmVyLCBpbiB0aGUgZnV0dXJlLCBzcGVjaWFsIG1lYW5pbmcgbWF5IGJlXG4gIGFzc2lnbmVkIHRvIHRoZSB2YWx1ZXMgY29ycmVzcG9uZGluZyB0byBlYWNoIGtleS5cblxuKiAqX19jbGFzc19fKiBhc3NpZ25tZW50IHdvcmtzIG9ubHkgaWYgYm90aCBjbGFzc2VzIGhhdmUgdGhlIHNhbWVcbiAgKl9fc2xvdHNfXyouXG5cblxuQ3VzdG9taXppbmcgY2xhc3MgY3JlYXRpb25cbj09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbkJ5IGRlZmF1bHQsIGNsYXNzZXMgYXJlIGNvbnN0cnVjdGVkIHVzaW5nICJ0eXBlKCkiLiBUaGUgY2xhc3MgYm9keSBpc1xuZXhlY3V0ZWQgaW4gYSBuZXcgbmFtZXNwYWNlIGFuZCB0aGUgY2xhc3MgbmFtZSBpcyBib3VuZCBsb2NhbGx5IHRvIHRoZVxucmVzdWx0IG9mICJ0eXBlKG5hbWUsIGJhc2VzLCBuYW1lc3BhY2UpIi5cblxuVGhlIGNsYXNzIGNyZWF0aW9uIHByb2Nlc3MgY2FuIGJlIGN1c3RvbWlzZWQgYnkgcGFzc2luZyB0aGVcbiJtZXRhY2xhc3MiIGtleXdvcmQgYXJndW1lbnQgaW4gdGhlIGNsYXNzIGRlZmluaXRpb24gbGluZSwgb3IgYnlcbmluaGVyaXRpbmcgZnJvbSBhbiBleGlzdGluZyBjbGFzcyB0aGF0IGluY2x1ZGVkIHN1Y2ggYW4gYXJndW1lbnQuIEluXG50aGUgZm9sbG93aW5nIGV4YW1wbGUsIGJvdGggIk15Q2xhc3MiIGFuZCAiTXlTdWJjbGFzcyIgYXJlIGluc3RhbmNlc1xub2YgIk1ldGEiOlxuXG4gICBjbGFzcyBNZXRhKHR5cGUpOlxuICAgICAgIHBhc3NcblxuICAgY2xhc3MgTXlDbGFzcyhtZXRhY2xhc3M9TWV0YSk6XG4gICAgICAgcGFzc1xuXG4gICBjbGFzcyBNeVN1YmNsYXNzKE15Q2xhc3MpOlxuICAgICAgIHBhc3NcblxuQW55IG90aGVyIGtleXdvcmQgYXJndW1lbnRzIHRoYXQgYXJlIHNwZWNpZmllZCBpbiB0aGUgY2xhc3MgZGVmaW5pdGlvblxuYXJlIHBhc3NlZCB0aHJvdWdoIHRvIGFsbCBtZXRhY2xhc3Mgb3BlcmF0aW9ucyBkZXNjcmliZWQgYmVsb3cuXG5cbldoZW4gYSBjbGFzcyBkZWZpbml0aW9uIGlzIGV4ZWN1dGVkLCB0aGUgZm9sbG93aW5nIHN0ZXBzIG9jY3VyOlxuXG4qIHRoZSBhcHByb3ByaWF0ZSBtZXRhY2xhc3MgaXMgZGV0ZXJtaW5lZFxuXG4qIHRoZSBjbGFzcyBuYW1lc3BhY2UgaXMgcHJlcGFyZWRcblxuKiB0aGUgY2xhc3MgYm9keSBpcyBleGVjdXRlZFxuXG4qIHRoZSBjbGFzcyBvYmplY3QgaXMgY3JlYXRlZFxuXG5cbkRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZSBtZXRhY2xhc3Ncbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuVGhlIGFwcHJvcHJpYXRlIG1ldGFjbGFzcyBmb3IgYSBjbGFzcyBkZWZpbml0aW9uIGlzIGRldGVybWluZWQgYXNcbmZvbGxvd3M6XG5cbiogaWYgbm8gYmFzZXMgYW5kIG5vIGV4cGxpY2l0IG1ldGFjbGFzcyBhcmUgZ2l2ZW4sIHRoZW4gInR5cGUoKSIgaXNcbiAgdXNlZFxuXG4qIGlmIGFuIGV4cGxpY2l0IG1ldGFjbGFzcyBpcyBnaXZlbiBhbmQgaXQgaXMgKm5vdCogYW4gaW5zdGFuY2Ugb2ZcbiAgInR5cGUoKSIsIHRoZW4gaXQgaXMgdXNlZCBkaXJlY3RseSBhcyB0aGUgbWV0YWNsYXNzXG5cbiogaWYgYW4gaW5zdGFuY2Ugb2YgInR5cGUoKSIgaXMgZ2l2ZW4gYXMgdGhlIGV4cGxpY2l0IG1ldGFjbGFzcywgb3JcbiAgYmFzZXMgYXJlIGRlZmluZWQsIHRoZW4gdGhlIG1vc3QgZGVyaXZlZCBtZXRhY2xhc3MgaXMgdXNlZFxuXG5UaGUgbW9zdCBkZXJpdmVkIG1ldGFjbGFzcyBpcyBzZWxlY3RlZCBmcm9tIHRoZSBleHBsaWNpdGx5IHNwZWNpZmllZFxubWV0YWNsYXNzIChpZiBhbnkpIGFuZCB0aGUgbWV0YWNsYXNzZXMgKGkuZS4gInR5cGUoY2xzKSIpIG9mIGFsbFxuc3BlY2lmaWVkIGJhc2UgY2xhc3Nlcy4gVGhlIG1vc3QgZGVyaXZlZCBtZXRhY2xhc3MgaXMgb25lIHdoaWNoIGlzIGFcbnN1YnR5cGUgb2YgKmFsbCogb2YgdGhlc2UgY2FuZGlkYXRlIG1ldGFjbGFzc2VzLiBJZiBub25lIG9mIHRoZVxuY2FuZGlkYXRlIG1ldGFjbGFzc2VzIG1lZXRzIHRoYXQgY3JpdGVyaW9uLCB0aGVuIHRoZSBjbGFzcyBkZWZpbml0aW9uXG53aWxsIGZhaWwgd2l0aCAiVHlwZUVycm9yIi5cblxuXG5QcmVwYXJpbmcgdGhlIGNsYXNzIG5hbWVzcGFjZVxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuT25jZSB0aGUgYXBwcm9wcmlhdGUgbWV0YWNsYXNzIGhhcyBiZWVuIGlkZW50aWZpZWQsIHRoZW4gdGhlIGNsYXNzXG5uYW1lc3BhY2UgaXMgcHJlcGFyZWQuIElmIHRoZSBtZXRhY2xhc3MgaGFzIGEgIl9fcHJlcGFyZV9fIiBhdHRyaWJ1dGUsXG5pdCBpcyBjYWxsZWQgYXMgIm5hbWVzcGFjZSA9IG1ldGFjbGFzcy5fX3ByZXBhcmVfXyhuYW1lLCBiYXNlcyxcbioqa3dkcykiICh3aGVyZSB0aGUgYWRkaXRpb25hbCBrZXl3b3JkIGFyZ3VtZW50cywgaWYgYW55LCBjb21lIGZyb21cbnRoZSBjbGFzcyBkZWZpbml0aW9uKS5cblxuSWYgdGhlIG1ldGFjbGFzcyBoYXMgbm8gIl9fcHJlcGFyZV9fIiBhdHRyaWJ1dGUsIHRoZW4gdGhlIGNsYXNzXG5uYW1lc3BhY2UgaXMgaW5pdGlhbGlzZWQgYXMgYW4gZW1wdHkgImRpY3QoKSIgaW5zdGFuY2UuXG5cblNlZSBhbHNvOiAqKlBFUCAzMTE1KiogLSBNZXRhY2xhc3NlcyBpbiBQeXRob24gMzAwMFxuXG4gICAgIEludHJvZHVjZWQgdGhlICJfX3ByZXBhcmVfXyIgbmFtZXNwYWNlIGhvb2tcblxuXG5FeGVjdXRpbmcgdGhlIGNsYXNzIGJvZHlcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5UaGUgY2xhc3MgYm9keSBpcyBleGVjdXRlZCAoYXBwcm94aW1hdGVseSkgYXMgImV4ZWMoYm9keSwgZ2xvYmFscygpLFxubmFtZXNwYWNlKSIuIFRoZSBrZXkgZGlmZmVyZW5jZSBmcm9tIGEgbm9ybWFsIGNhbGwgdG8gImV4ZWMoKSIgaXMgdGhhdFxubGV4aWNhbCBzY29waW5nIGFsbG93cyB0aGUgY2xhc3MgYm9keSAoaW5jbHVkaW5nIGFueSBtZXRob2RzKSB0b1xucmVmZXJlbmNlIG5hbWVzIGZyb20gdGhlIGN1cnJlbnQgYW5kIG91dGVyIHNjb3BlcyB3aGVuIHRoZSBjbGFzc1xuZGVmaW5pdGlvbiBvY2N1cnMgaW5zaWRlIGEgZnVuY3Rpb24uXG5cbkhvd2V2ZXIsIGV2ZW4gd2hlbiB0aGUgY2xhc3MgZGVmaW5pdGlvbiBvY2N1cnMgaW5zaWRlIHRoZSBmdW5jdGlvbixcbm1ldGhvZHMgZGVmaW5lZCBpbnNpZGUgdGhlIGNsYXNzIHN0aWxsIGNhbm5vdCBzZWUgbmFtZXMgZGVmaW5lZCBhdCB0aGVcbmNsYXNzIHNjb3BlLiBDbGFzcyB2YXJpYWJsZXMgbXVzdCBiZSBhY2Nlc3NlZCB0aHJvdWdoIHRoZSBmaXJzdFxucGFyYW1ldGVyIG9mIGluc3RhbmNlIG9yIGNsYXNzIG1ldGhvZHMsIGFuZCBjYW5ub3QgYmUgYWNjZXNzZWQgYXQgYWxsXG5mcm9tIHN0YXRpYyBtZXRob2RzLlxuXG5cbkNyZWF0aW5nIHRoZSBjbGFzcyBvYmplY3Rcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuT25jZSB0aGUgY2xhc3MgbmFtZXNwYWNlIGhhcyBiZWVuIHBvcHVsYXRlZCBieSBleGVjdXRpbmcgdGhlIGNsYXNzXG5ib2R5LCB0aGUgY2xhc3Mgb2JqZWN0IGlzIGNyZWF0ZWQgYnkgY2FsbGluZyAibWV0YWNsYXNzKG5hbWUsIGJhc2VzLFxubmFtZXNwYWNlLCAqKmt3ZHMpIiAodGhlIGFkZGl0aW9uYWwga2V5d29yZHMgcGFzc2VkIGhlcmUgYXJlIHRoZSBzYW1lXG5hcyB0aG9zZSBwYXNzZWQgdG8gIl9fcHJlcGFyZV9fIikuXG5cblRoaXMgY2xhc3Mgb2JqZWN0IGlzIHRoZSBvbmUgdGhhdCB3aWxsIGJlIHJlZmVyZW5jZWQgYnkgdGhlIHplcm8tXG5hcmd1bWVudCBmb3JtIG9mICJzdXBlcigpIi4gIl9fY2xhc3NfXyIgaXMgYW4gaW1wbGljaXQgY2xvc3VyZVxucmVmZXJlbmNlIGNyZWF0ZWQgYnkgdGhlIGNvbXBpbGVyIGlmIGFueSBtZXRob2RzIGluIGEgY2xhc3MgYm9keSByZWZlclxudG8gZWl0aGVyICJfX2NsYXNzX18iIG9yICJzdXBlciIuIFRoaXMgYWxsb3dzIHRoZSB6ZXJvIGFyZ3VtZW50IGZvcm1cbm9mICJzdXBlcigpIiB0byBjb3JyZWN0bHkgaWRlbnRpZnkgdGhlIGNsYXNzIGJlaW5nIGRlZmluZWQgYmFzZWQgb25cbmxleGljYWwgc2NvcGluZywgd2hpbGUgdGhlIGNsYXNzIG9yIGluc3RhbmNlIHRoYXQgd2FzIHVzZWQgdG8gbWFrZSB0aGVcbmN1cnJlbnQgY2FsbCBpcyBpZGVudGlmaWVkIGJhc2VkIG9uIHRoZSBmaXJzdCBhcmd1bWVudCBwYXNzZWQgdG8gdGhlXG5tZXRob2QuXG5cbkFmdGVyIHRoZSBjbGFzcyBvYmplY3QgaXMgY3JlYXRlZCwgaXQgaXMgcGFzc2VkIHRvIHRoZSBjbGFzc1xuZGVjb3JhdG9ycyBpbmNsdWRlZCBpbiB0aGUgY2xhc3MgZGVmaW5pdGlvbiAoaWYgYW55KSBhbmQgdGhlIHJlc3VsdGluZ1xub2JqZWN0IGlzIGJvdW5kIGluIHRoZSBsb2NhbCBuYW1lc3BhY2UgYXMgdGhlIGRlZmluZWQgY2xhc3MuXG5cblNlZSBhbHNvOiAqKlBFUCAzMTM1KiogLSBOZXcgc3VwZXJcblxuICAgICBEZXNjcmliZXMgdGhlIGltcGxpY2l0ICJfX2NsYXNzX18iIGNsb3N1cmUgcmVmZXJlbmNlXG5cblxuTWV0YWNsYXNzIGV4YW1wbGVcbi0tLS0tLS0tLS0tLS0tLS0tXG5cblRoZSBwb3RlbnRpYWwgdXNlcyBmb3IgbWV0YWNsYXNzZXMgYXJlIGJvdW5kbGVzcy4gU29tZSBpZGVhcyB0aGF0IGhhdmVcbmJlZW4gZXhwbG9yZWQgaW5jbHVkZSBsb2dnaW5nLCBpbnRlcmZhY2UgY2hlY2tpbmcsIGF1dG9tYXRpY1xuZGVsZWdhdGlvbiwgYXV0b21hdGljIHByb3BlcnR5IGNyZWF0aW9uLCBwcm94aWVzLCBmcmFtZXdvcmtzLCBhbmRcbmF1dG9tYXRpYyByZXNvdXJjZSBsb2NraW5nL3N5bmNocm9uaXphdGlvbi5cblxuSGVyZSBpcyBhbiBleGFtcGxlIG9mIGEgbWV0YWNsYXNzIHRoYXQgdXNlcyBhblxuImNvbGxlY3Rpb25zLk9yZGVyZWREaWN0IiB0byByZW1lbWJlciB0aGUgb3JkZXIgdGhhdCBjbGFzcyBtZW1iZXJzXG53ZXJlIGRlZmluZWQ6XG5cbiAgIGNsYXNzIE9yZGVyZWRDbGFzcyh0eXBlKTpcblxuICAgICAgICBAY2xhc3NtZXRob2RcbiAgICAgICAgZGVmIF9fcHJlcGFyZV9fKG1ldGFjbHMsIG5hbWUsIGJhc2VzLCAqKmt3ZHMpOlxuICAgICAgICAgICByZXR1cm4gY29sbGVjdGlvbnMuT3JkZXJlZERpY3QoKVxuXG4gICAgICAgIGRlZiBfX25ld19fKGNscywgbmFtZSwgYmFzZXMsIG5hbWVzcGFjZSwgKiprd2RzKTpcbiAgICAgICAgICAgcmVzdWx0ID0gdHlwZS5fX25ld19fKGNscywgbmFtZSwgYmFzZXMsIGRpY3QobmFtZXNwYWNlKSlcbiAgICAgICAgICAgcmVzdWx0Lm1lbWJlcnMgPSB0dXBsZShuYW1lc3BhY2UpXG4gICAgICAgICAgIHJldHVybiByZXN1bHRcblxuICAgY2xhc3MgQShtZXRhY2xhc3M9T3JkZXJlZENsYXNzKTpcbiAgICAgICBkZWYgb25lKHNlbGYpOiBwYXNzXG4gICAgICAgZGVmIHR3byhzZWxmKTogcGFzc1xuICAgICAgIGRlZiB0aHJlZShzZWxmKTogcGFzc1xuICAgICAgIGRlZiBmb3VyKHNlbGYpOiBwYXNzXG5cbiAgID4+PiBBLm1lbWJlcnNcbiAgIChcJ19fbW9kdWxlX19cJywgXCdvbmVcJywgXCd0d29cJywgXCd0aHJlZVwnLCBcJ2ZvdXJcJylcblxuV2hlbiB0aGUgY2xhc3MgZGVmaW5pdGlvbiBmb3IgKkEqIGdldHMgZXhlY3V0ZWQsIHRoZSBwcm9jZXNzIGJlZ2luc1xud2l0aCBjYWxsaW5nIHRoZSBtZXRhY2xhc3NcJ3MgIl9fcHJlcGFyZV9fKCkiIG1ldGhvZCB3aGljaCByZXR1cm5zIGFuXG5lbXB0eSAiY29sbGVjdGlvbnMuT3JkZXJlZERpY3QiLiAgVGhhdCBtYXBwaW5nIHJlY29yZHMgdGhlIG1ldGhvZHMgYW5kXG5hdHRyaWJ1dGVzIG9mICpBKiBhcyB0aGV5IGFyZSBkZWZpbmVkIHdpdGhpbiB0aGUgYm9keSBvZiB0aGUgY2xhc3NcbnN0YXRlbWVudC4gT25jZSB0aG9zZSBkZWZpbml0aW9ucyBhcmUgZXhlY3V0ZWQsIHRoZSBvcmRlcmVkIGRpY3Rpb25hcnlcbmlzIGZ1bGx5IHBvcHVsYXRlZCBhbmQgdGhlIG1ldGFjbGFzc1wncyAiX19uZXdfXygpIiBtZXRob2QgZ2V0c1xuaW52b2tlZC4gIFRoYXQgbWV0aG9kIGJ1aWxkcyB0aGUgbmV3IHR5cGUgYW5kIGl0IHNhdmVzIHRoZSBvcmRlcmVkXG5kaWN0aW9uYXJ5IGtleXMgaW4gYW4gYXR0cmlidXRlIGNhbGxlZCAibWVtYmVycyIuXG5cblxuQ3VzdG9taXppbmcgaW5zdGFuY2UgYW5kIHN1YmNsYXNzIGNoZWNrc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5UaGUgZm9sbG93aW5nIG1ldGhvZHMgYXJlIHVzZWQgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgYmVoYXZpb3Igb2YgdGhlXG4iaXNpbnN0YW5jZSgpIiBhbmQgImlzc3ViY2xhc3MoKSIgYnVpbHQtaW4gZnVuY3Rpb25zLlxuXG5JbiBwYXJ0aWN1bGFyLCB0aGUgbWV0YWNsYXNzICJhYmMuQUJDTWV0YSIgaW1wbGVtZW50cyB0aGVzZSBtZXRob2RzIGluXG5vcmRlciB0byBhbGxvdyB0aGUgYWRkaXRpb24gb2YgQWJzdHJhY3QgQmFzZSBDbGFzc2VzIChBQkNzKSBhc1xuInZpcnR1YWwgYmFzZSBjbGFzc2VzIiB0byBhbnkgY2xhc3Mgb3IgdHlwZSAoaW5jbHVkaW5nIGJ1aWx0LWluXG50eXBlcyksIGluY2x1ZGluZyBvdGhlciBBQkNzLlxuXG5jbGFzcy5fX2luc3RhbmNlY2hlY2tfXyhzZWxmLCBpbnN0YW5jZSlcblxuICAgUmV0dXJuIHRydWUgaWYgKmluc3RhbmNlKiBzaG91bGQgYmUgY29uc2lkZXJlZCBhIChkaXJlY3Qgb3JcbiAgIGluZGlyZWN0KSBpbnN0YW5jZSBvZiAqY2xhc3MqLiBJZiBkZWZpbmVkLCBjYWxsZWQgdG8gaW1wbGVtZW50XG4gICAiaXNpbnN0YW5jZShpbnN0YW5jZSwgY2xhc3MpIi5cblxuY2xhc3MuX19zdWJjbGFzc2NoZWNrX18oc2VsZiwgc3ViY2xhc3MpXG5cbiAgIFJldHVybiB0cnVlIGlmICpzdWJjbGFzcyogc2hvdWxkIGJlIGNvbnNpZGVyZWQgYSAoZGlyZWN0IG9yXG4gICBpbmRpcmVjdCkgc3ViY2xhc3Mgb2YgKmNsYXNzKi4gIElmIGRlZmluZWQsIGNhbGxlZCB0byBpbXBsZW1lbnRcbiAgICJpc3N1YmNsYXNzKHN1YmNsYXNzLCBjbGFzcykiLlxuXG5Ob3RlIHRoYXQgdGhlc2UgbWV0aG9kcyBhcmUgbG9va2VkIHVwIG9uIHRoZSB0eXBlIChtZXRhY2xhc3MpIG9mIGFcbmNsYXNzLiAgVGhleSBjYW5ub3QgYmUgZGVmaW5lZCBhcyBjbGFzcyBtZXRob2RzIGluIHRoZSBhY3R1YWwgY2xhc3MuXG5UaGlzIGlzIGNvbnNpc3RlbnQgd2l0aCB0aGUgbG9va3VwIG9mIHNwZWNpYWwgbWV0aG9kcyB0aGF0IGFyZSBjYWxsZWRcbm9uIGluc3RhbmNlcywgb25seSBpbiB0aGlzIGNhc2UgdGhlIGluc3RhbmNlIGlzIGl0c2VsZiBhIGNsYXNzLlxuXG5TZWUgYWxzbzogKipQRVAgMzExOSoqIC0gSW50cm9kdWNpbmcgQWJzdHJhY3QgQmFzZSBDbGFzc2VzXG5cbiAgICAgSW5jbHVkZXMgdGhlIHNwZWNpZmljYXRpb24gZm9yIGN1c3RvbWl6aW5nICJpc2luc3RhbmNlKCkiIGFuZFxuICAgICAiaXNzdWJjbGFzcygpIiBiZWhhdmlvciB0aHJvdWdoICJfX2luc3RhbmNlY2hlY2tfXygpIiBhbmRcbiAgICAgIl9fc3ViY2xhc3NjaGVja19fKCkiLCB3aXRoIG1vdGl2YXRpb24gZm9yIHRoaXMgZnVuY3Rpb25hbGl0eSBpblxuICAgICB0aGUgY29udGV4dCBvZiBhZGRpbmcgQWJzdHJhY3QgQmFzZSBDbGFzc2VzIChzZWUgdGhlICJhYmMiXG4gICAgIG1vZHVsZSkgdG8gdGhlIGxhbmd1YWdlLlxuXG5cbkVtdWxhdGluZyBjYWxsYWJsZSBvYmplY3RzXG49PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5vYmplY3QuX19jYWxsX18oc2VsZlssIGFyZ3MuLi5dKVxuXG4gICBDYWxsZWQgd2hlbiB0aGUgaW5zdGFuY2UgaXMgImNhbGxlZCIgYXMgYSBmdW5jdGlvbjsgaWYgdGhpcyBtZXRob2RcbiAgIGlzIGRlZmluZWQsICJ4KGFyZzEsIGFyZzIsIC4uLikiIGlzIGEgc2hvcnRoYW5kIGZvclxuICAgInguX19jYWxsX18oYXJnMSwgYXJnMiwgLi4uKSIuXG5cblxuRW11bGF0aW5nIGNvbnRhaW5lciB0eXBlc1xuPT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5UaGUgZm9sbG93aW5nIG1ldGhvZHMgY2FuIGJlIGRlZmluZWQgdG8gaW1wbGVtZW50IGNvbnRhaW5lciBvYmplY3RzLlxuQ29udGFpbmVycyB1c3VhbGx5IGFyZSBzZXF1ZW5jZXMgKHN1Y2ggYXMgbGlzdHMgb3IgdHVwbGVzKSBvciBtYXBwaW5nc1xuKGxpa2UgZGljdGlvbmFyaWVzKSwgYnV0IGNhbiByZXByZXNlbnQgb3RoZXIgY29udGFpbmVycyBhcyB3ZWxsLiAgVGhlXG5maXJzdCBzZXQgb2YgbWV0aG9kcyBpcyB1c2VkIGVpdGhlciB0byBlbXVsYXRlIGEgc2VxdWVuY2Ugb3IgdG9cbmVtdWxhdGUgYSBtYXBwaW5nOyB0aGUgZGlmZmVyZW5jZSBpcyB0aGF0IGZvciBhIHNlcXVlbmNlLCB0aGVcbmFsbG93YWJsZSBrZXlzIHNob3VsZCBiZSB0aGUgaW50ZWdlcnMgKmsqIGZvciB3aGljaCAiMCA8PSBrIDwgTiIgd2hlcmVcbipOKiBpcyB0aGUgbGVuZ3RoIG9mIHRoZSBzZXF1ZW5jZSwgb3Igc2xpY2Ugb2JqZWN0cywgd2hpY2ggZGVmaW5lIGFcbnJhbmdlIG9mIGl0ZW1zLiAgSXQgaXMgYWxzbyByZWNvbW1lbmRlZCB0aGF0IG1hcHBpbmdzIHByb3ZpZGUgdGhlXG5tZXRob2RzICJrZXlzKCkiLCAidmFsdWVzKCkiLCAiaXRlbXMoKSIsICJnZXQoKSIsICJjbGVhcigpIixcbiJzZXRkZWZhdWx0KCkiLCAicG9wKCkiLCAicG9waXRlbSgpIiwgImNvcHkoKSIsIGFuZCAidXBkYXRlKCkiXG5iZWhhdmluZyBzaW1pbGFyIHRvIHRob3NlIGZvciBQeXRob25cJ3Mgc3RhbmRhcmQgZGljdGlvbmFyeSBvYmplY3RzLlxuVGhlICJjb2xsZWN0aW9ucyIgbW9kdWxlIHByb3ZpZGVzIGEgIk11dGFibGVNYXBwaW5nIiBhYnN0cmFjdCBiYXNlXG5jbGFzcyB0byBoZWxwIGNyZWF0ZSB0aG9zZSBtZXRob2RzIGZyb20gYSBiYXNlIHNldCBvZiAiX19nZXRpdGVtX18oKSIsXG4iX19zZXRpdGVtX18oKSIsICJfX2RlbGl0ZW1fXygpIiwgYW5kICJrZXlzKCkiLiBNdXRhYmxlIHNlcXVlbmNlc1xuc2hvdWxkIHByb3ZpZGUgbWV0aG9kcyAiYXBwZW5kKCkiLCAiY291bnQoKSIsICJpbmRleCgpIiwgImV4dGVuZCgpIixcbiJpbnNlcnQoKSIsICJwb3AoKSIsICJyZW1vdmUoKSIsICJyZXZlcnNlKCkiIGFuZCAic29ydCgpIiwgbGlrZSBQeXRob25cbnN0YW5kYXJkIGxpc3Qgb2JqZWN0cy4gIEZpbmFsbHksIHNlcXVlbmNlIHR5cGVzIHNob3VsZCBpbXBsZW1lbnRcbmFkZGl0aW9uIChtZWFuaW5nIGNvbmNhdGVuYXRpb24pIGFuZCBtdWx0aXBsaWNhdGlvbiAobWVhbmluZ1xucmVwZXRpdGlvbikgYnkgZGVmaW5pbmcgdGhlIG1ldGhvZHMgIl9fYWRkX18oKSIsICJfX3JhZGRfXygpIixcbiJfX2lhZGRfXygpIiwgIl9fbXVsX18oKSIsICJfX3JtdWxfXygpIiBhbmQgIl9faW11bF9fKCkiIGRlc2NyaWJlZFxuYmVsb3c7IHRoZXkgc2hvdWxkIG5vdCBkZWZpbmUgb3RoZXIgbnVtZXJpY2FsIG9wZXJhdG9ycy4gIEl0IGlzXG5yZWNvbW1lbmRlZCB0aGF0IGJvdGggbWFwcGluZ3MgYW5kIHNlcXVlbmNlcyBpbXBsZW1lbnQgdGhlXG4iX19jb250YWluc19fKCkiIG1ldGhvZCB0byBhbGxvdyBlZmZpY2llbnQgdXNlIG9mIHRoZSAiaW4iIG9wZXJhdG9yO1xuZm9yIG1hcHBpbmdzLCAiaW4iIHNob3VsZCBzZWFyY2ggdGhlIG1hcHBpbmdcJ3Mga2V5czsgZm9yIHNlcXVlbmNlcywgaXRcbnNob3VsZCBzZWFyY2ggdGhyb3VnaCB0aGUgdmFsdWVzLiAgSXQgaXMgZnVydGhlciByZWNvbW1lbmRlZCB0aGF0IGJvdGhcbm1hcHBpbmdzIGFuZCBzZXF1ZW5jZXMgaW1wbGVtZW50IHRoZSAiX19pdGVyX18oKSIgbWV0aG9kIHRvIGFsbG93XG5lZmZpY2llbnQgaXRlcmF0aW9uIHRocm91Z2ggdGhlIGNvbnRhaW5lcjsgZm9yIG1hcHBpbmdzLCAiX19pdGVyX18oKSJcbnNob3VsZCBiZSB0aGUgc2FtZSBhcyAia2V5cygpIjsgZm9yIHNlcXVlbmNlcywgaXQgc2hvdWxkIGl0ZXJhdGVcbnRocm91Z2ggdGhlIHZhbHVlcy5cblxub2JqZWN0Ll9fbGVuX18oc2VsZilcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCB0aGUgYnVpbHQtaW4gZnVuY3Rpb24gImxlbigpIi4gIFNob3VsZCByZXR1cm5cbiAgIHRoZSBsZW5ndGggb2YgdGhlIG9iamVjdCwgYW4gaW50ZWdlciAiPj0iIDAuICBBbHNvLCBhbiBvYmplY3QgdGhhdFxuICAgZG9lc25cJ3QgZGVmaW5lIGEgIl9fYm9vbF9fKCkiIG1ldGhvZCBhbmQgd2hvc2UgIl9fbGVuX18oKSIgbWV0aG9kXG4gICByZXR1cm5zIHplcm8gaXMgY29uc2lkZXJlZCB0byBiZSBmYWxzZSBpbiBhIEJvb2xlYW4gY29udGV4dC5cblxuTm90ZTogU2xpY2luZyBpcyBkb25lIGV4Y2x1c2l2ZWx5IHdpdGggdGhlIGZvbGxvd2luZyB0aHJlZSBtZXRob2RzLlxuICBBIGNhbGwgbGlrZVxuXG4gICAgIGFbMToyXSA9IGJcblxuICBpcyB0cmFuc2xhdGVkIHRvXG5cbiAgICAgYVtzbGljZSgxLCAyLCBOb25lKV0gPSBiXG5cbiAgYW5kIHNvIGZvcnRoLiAgTWlzc2luZyBzbGljZSBpdGVtcyBhcmUgYWx3YXlzIGZpbGxlZCBpbiB3aXRoICJOb25lIi5cblxub2JqZWN0Ll9fZ2V0aXRlbV9fKHNlbGYsIGtleSlcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCBldmFsdWF0aW9uIG9mICJzZWxmW2tleV0iLiBGb3Igc2VxdWVuY2UgdHlwZXMsXG4gICB0aGUgYWNjZXB0ZWQga2V5cyBzaG91bGQgYmUgaW50ZWdlcnMgYW5kIHNsaWNlIG9iamVjdHMuICBOb3RlIHRoYXRcbiAgIHRoZSBzcGVjaWFsIGludGVycHJldGF0aW9uIG9mIG5lZ2F0aXZlIGluZGV4ZXMgKGlmIHRoZSBjbGFzcyB3aXNoZXNcbiAgIHRvIGVtdWxhdGUgYSBzZXF1ZW5jZSB0eXBlKSBpcyB1cCB0byB0aGUgIl9fZ2V0aXRlbV9fKCkiIG1ldGhvZC4gSWZcbiAgICprZXkqIGlzIG9mIGFuIGluYXBwcm9wcmlhdGUgdHlwZSwgIlR5cGVFcnJvciIgbWF5IGJlIHJhaXNlZDsgaWYgb2ZcbiAgIGEgdmFsdWUgb3V0c2lkZSB0aGUgc2V0IG9mIGluZGV4ZXMgZm9yIHRoZSBzZXF1ZW5jZSAoYWZ0ZXIgYW55XG4gICBzcGVjaWFsIGludGVycHJldGF0aW9uIG9mIG5lZ2F0aXZlIHZhbHVlcyksICJJbmRleEVycm9yIiBzaG91bGQgYmVcbiAgIHJhaXNlZC4gRm9yIG1hcHBpbmcgdHlwZXMsIGlmICprZXkqIGlzIG1pc3NpbmcgKG5vdCBpbiB0aGVcbiAgIGNvbnRhaW5lciksICJLZXlFcnJvciIgc2hvdWxkIGJlIHJhaXNlZC5cblxuICAgTm90ZTogImZvciIgbG9vcHMgZXhwZWN0IHRoYXQgYW4gIkluZGV4RXJyb3IiIHdpbGwgYmUgcmFpc2VkIGZvclxuICAgICBpbGxlZ2FsIGluZGV4ZXMgdG8gYWxsb3cgcHJvcGVyIGRldGVjdGlvbiBvZiB0aGUgZW5kIG9mIHRoZVxuICAgICBzZXF1ZW5jZS5cblxub2JqZWN0Ll9fc2V0aXRlbV9fKHNlbGYsIGtleSwgdmFsdWUpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgYXNzaWdubWVudCB0byAic2VsZltrZXldIi4gIFNhbWUgbm90ZSBhcyBmb3JcbiAgICJfX2dldGl0ZW1fXygpIi4gIFRoaXMgc2hvdWxkIG9ubHkgYmUgaW1wbGVtZW50ZWQgZm9yIG1hcHBpbmdzIGlmXG4gICB0aGUgb2JqZWN0cyBzdXBwb3J0IGNoYW5nZXMgdG8gdGhlIHZhbHVlcyBmb3Iga2V5cywgb3IgaWYgbmV3IGtleXNcbiAgIGNhbiBiZSBhZGRlZCwgb3IgZm9yIHNlcXVlbmNlcyBpZiBlbGVtZW50cyBjYW4gYmUgcmVwbGFjZWQuICBUaGVcbiAgIHNhbWUgZXhjZXB0aW9ucyBzaG91bGQgYmUgcmFpc2VkIGZvciBpbXByb3BlciAqa2V5KiB2YWx1ZXMgYXMgZm9yXG4gICB0aGUgIl9fZ2V0aXRlbV9fKCkiIG1ldGhvZC5cblxub2JqZWN0Ll9fZGVsaXRlbV9fKHNlbGYsIGtleSlcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCBkZWxldGlvbiBvZiAic2VsZltrZXldIi4gIFNhbWUgbm90ZSBhcyBmb3JcbiAgICJfX2dldGl0ZW1fXygpIi4gIFRoaXMgc2hvdWxkIG9ubHkgYmUgaW1wbGVtZW50ZWQgZm9yIG1hcHBpbmdzIGlmXG4gICB0aGUgb2JqZWN0cyBzdXBwb3J0IHJlbW92YWwgb2Yga2V5cywgb3IgZm9yIHNlcXVlbmNlcyBpZiBlbGVtZW50c1xuICAgY2FuIGJlIHJlbW92ZWQgZnJvbSB0aGUgc2VxdWVuY2UuICBUaGUgc2FtZSBleGNlcHRpb25zIHNob3VsZCBiZVxuICAgcmFpc2VkIGZvciBpbXByb3BlciAqa2V5KiB2YWx1ZXMgYXMgZm9yIHRoZSAiX19nZXRpdGVtX18oKSIgbWV0aG9kLlxuXG5vYmplY3QuX19pdGVyX18oc2VsZilcblxuICAgVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gYW4gaXRlcmF0b3IgaXMgcmVxdWlyZWQgZm9yIGEgY29udGFpbmVyLlxuICAgVGhpcyBtZXRob2Qgc2hvdWxkIHJldHVybiBhIG5ldyBpdGVyYXRvciBvYmplY3QgdGhhdCBjYW4gaXRlcmF0ZVxuICAgb3ZlciBhbGwgdGhlIG9iamVjdHMgaW4gdGhlIGNvbnRhaW5lci4gIEZvciBtYXBwaW5ncywgaXQgc2hvdWxkXG4gICBpdGVyYXRlIG92ZXIgdGhlIGtleXMgb2YgdGhlIGNvbnRhaW5lciwgYW5kIHNob3VsZCBhbHNvIGJlIG1hZGVcbiAgIGF2YWlsYWJsZSBhcyB0aGUgbWV0aG9kICJrZXlzKCkiLlxuXG4gICBJdGVyYXRvciBvYmplY3RzIGFsc28gbmVlZCB0byBpbXBsZW1lbnQgdGhpcyBtZXRob2Q7IHRoZXkgYXJlXG4gICByZXF1aXJlZCB0byByZXR1cm4gdGhlbXNlbHZlcy4gIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGl0ZXJhdG9yXG4gICBvYmplY3RzLCBzZWUgKkl0ZXJhdG9yIFR5cGVzKi5cblxub2JqZWN0Ll9fcmV2ZXJzZWRfXyhzZWxmKVxuXG4gICBDYWxsZWQgKGlmIHByZXNlbnQpIGJ5IHRoZSAicmV2ZXJzZWQoKSIgYnVpbHQtaW4gdG8gaW1wbGVtZW50XG4gICByZXZlcnNlIGl0ZXJhdGlvbi4gIEl0IHNob3VsZCByZXR1cm4gYSBuZXcgaXRlcmF0b3Igb2JqZWN0IHRoYXRcbiAgIGl0ZXJhdGVzIG92ZXIgYWxsIHRoZSBvYmplY3RzIGluIHRoZSBjb250YWluZXIgaW4gcmV2ZXJzZSBvcmRlci5cblxuICAgSWYgdGhlICJfX3JldmVyc2VkX18oKSIgbWV0aG9kIGlzIG5vdCBwcm92aWRlZCwgdGhlICJyZXZlcnNlZCgpIlxuICAgYnVpbHQtaW4gd2lsbCBmYWxsIGJhY2sgdG8gdXNpbmcgdGhlIHNlcXVlbmNlIHByb3RvY29sICgiX19sZW5fXygpIlxuICAgYW5kICJfX2dldGl0ZW1fXygpIikuICBPYmplY3RzIHRoYXQgc3VwcG9ydCB0aGUgc2VxdWVuY2UgcHJvdG9jb2xcbiAgIHNob3VsZCBvbmx5IHByb3ZpZGUgIl9fcmV2ZXJzZWRfXygpIiBpZiB0aGV5IGNhbiBwcm92aWRlIGFuXG4gICBpbXBsZW1lbnRhdGlvbiB0aGF0IGlzIG1vcmUgZWZmaWNpZW50IHRoYW4gdGhlIG9uZSBwcm92aWRlZCBieVxuICAgInJldmVyc2VkKCkiLlxuXG5UaGUgbWVtYmVyc2hpcCB0ZXN0IG9wZXJhdG9ycyAoImluIiBhbmQgIm5vdCBpbiIpIGFyZSBub3JtYWxseVxuaW1wbGVtZW50ZWQgYXMgYW4gaXRlcmF0aW9uIHRocm91Z2ggYSBzZXF1ZW5jZS4gIEhvd2V2ZXIsIGNvbnRhaW5lclxub2JqZWN0cyBjYW4gc3VwcGx5IHRoZSBmb2xsb3dpbmcgc3BlY2lhbCBtZXRob2Qgd2l0aCBhIG1vcmUgZWZmaWNpZW50XG5pbXBsZW1lbnRhdGlvbiwgd2hpY2ggYWxzbyBkb2VzIG5vdCByZXF1aXJlIHRoZSBvYmplY3QgYmUgYSBzZXF1ZW5jZS5cblxub2JqZWN0Ll9fY29udGFpbnNfXyhzZWxmLCBpdGVtKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IG1lbWJlcnNoaXAgdGVzdCBvcGVyYXRvcnMuICBTaG91bGQgcmV0dXJuIHRydWVcbiAgIGlmICppdGVtKiBpcyBpbiAqc2VsZiosIGZhbHNlIG90aGVyd2lzZS4gIEZvciBtYXBwaW5nIG9iamVjdHMsIHRoaXNcbiAgIHNob3VsZCBjb25zaWRlciB0aGUga2V5cyBvZiB0aGUgbWFwcGluZyByYXRoZXIgdGhhbiB0aGUgdmFsdWVzIG9yXG4gICB0aGUga2V5LWl0ZW0gcGFpcnMuXG5cbiAgIEZvciBvYmplY3RzIHRoYXQgZG9uXCd0IGRlZmluZSAiX19jb250YWluc19fKCkiLCB0aGUgbWVtYmVyc2hpcCB0ZXN0XG4gICBmaXJzdCB0cmllcyBpdGVyYXRpb24gdmlhICJfX2l0ZXJfXygpIiwgdGhlbiB0aGUgb2xkIHNlcXVlbmNlXG4gICBpdGVyYXRpb24gcHJvdG9jb2wgdmlhICJfX2dldGl0ZW1fXygpIiwgc2VlICp0aGlzIHNlY3Rpb24gaW4gdGhlXG4gICBsYW5ndWFnZSByZWZlcmVuY2UqLlxuXG5cbkVtdWxhdGluZyBudW1lcmljIHR5cGVzXG49PT09PT09PT09PT09PT09PT09PT09PVxuXG5UaGUgZm9sbG93aW5nIG1ldGhvZHMgY2FuIGJlIGRlZmluZWQgdG8gZW11bGF0ZSBudW1lcmljIG9iamVjdHMuXG5NZXRob2RzIGNvcnJlc3BvbmRpbmcgdG8gb3BlcmF0aW9ucyB0aGF0IGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZVxucGFydGljdWxhciBraW5kIG9mIG51bWJlciBpbXBsZW1lbnRlZCAoZS5nLiwgYml0d2lzZSBvcGVyYXRpb25zIGZvclxubm9uLWludGVncmFsIG51bWJlcnMpIHNob3VsZCBiZSBsZWZ0IHVuZGVmaW5lZC5cblxub2JqZWN0Ll9fYWRkX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19zdWJfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX211bF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fdHJ1ZWRpdl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fZmxvb3JkaXZfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX21vZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fZGl2bW9kX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19wb3dfXyhzZWxmLCBvdGhlclssIG1vZHVsb10pXG5vYmplY3QuX19sc2hpZnRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3JzaGlmdF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fYW5kX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX194b3JfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX29yX18oc2VsZiwgb3RoZXIpXG5cbiAgIFRoZXNlIG1ldGhvZHMgYXJlIGNhbGxlZCB0byBpbXBsZW1lbnQgdGhlIGJpbmFyeSBhcml0aG1ldGljXG4gICBvcGVyYXRpb25zICgiKyIsICItIiwgIioiLCAiLyIsICIvLyIsICIlIiwgImRpdm1vZCgpIiwgInBvdygpIixcbiAgICIqKiIsICI8PCIsICI+PiIsICImIiwgIl4iLCAifCIpLiAgRm9yIGluc3RhbmNlLCB0byBldmFsdWF0ZSB0aGVcbiAgIGV4cHJlc3Npb24gInggKyB5Iiwgd2hlcmUgKngqIGlzIGFuIGluc3RhbmNlIG9mIGEgY2xhc3MgdGhhdCBoYXMgYW5cbiAgICJfX2FkZF9fKCkiIG1ldGhvZCwgInguX19hZGRfXyh5KSIgaXMgY2FsbGVkLiAgVGhlICJfX2Rpdm1vZF9fKCkiXG4gICBtZXRob2Qgc2hvdWxkIGJlIHRoZSBlcXVpdmFsZW50IHRvIHVzaW5nICJfX2Zsb29yZGl2X18oKSIgYW5kXG4gICAiX19tb2RfXygpIjsgaXQgc2hvdWxkIG5vdCBiZSByZWxhdGVkIHRvICJfX3RydWVkaXZfXygpIi4gIE5vdGVcbiAgIHRoYXQgIl9fcG93X18oKSIgc2hvdWxkIGJlIGRlZmluZWQgdG8gYWNjZXB0IGFuIG9wdGlvbmFsIHRoaXJkXG4gICBhcmd1bWVudCBpZiB0aGUgdGVybmFyeSB2ZXJzaW9uIG9mIHRoZSBidWlsdC1pbiAicG93KCkiIGZ1bmN0aW9uIGlzXG4gICB0byBiZSBzdXBwb3J0ZWQuXG5cbiAgIElmIG9uZSBvZiB0aG9zZSBtZXRob2RzIGRvZXMgbm90IHN1cHBvcnQgdGhlIG9wZXJhdGlvbiB3aXRoIHRoZVxuICAgc3VwcGxpZWQgYXJndW1lbnRzLCBpdCBzaG91bGQgcmV0dXJuICJOb3RJbXBsZW1lbnRlZCIuXG5cbm9iamVjdC5fX3JhZGRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3JzdWJfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3JtdWxfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3J0cnVlZGl2X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yZmxvb3JkaXZfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3Jtb2RfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3JkaXZtb2RfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3Jwb3dfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3Jsc2hpZnRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3Jyc2hpZnRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3JhbmRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3J4b3JfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3Jvcl9fKHNlbGYsIG90aGVyKVxuXG4gICBUaGVzZSBtZXRob2RzIGFyZSBjYWxsZWQgdG8gaW1wbGVtZW50IHRoZSBiaW5hcnkgYXJpdGhtZXRpY1xuICAgb3BlcmF0aW9ucyAoIisiLCAiLSIsICIqIiwgIi8iLCAiLy8iLCAiJSIsICJkaXZtb2QoKSIsICJwb3coKSIsXG4gICAiKioiLCAiPDwiLCAiPj4iLCAiJiIsICJeIiwgInwiKSB3aXRoIHJlZmxlY3RlZCAoc3dhcHBlZCkgb3BlcmFuZHMuXG4gICBUaGVzZSBmdW5jdGlvbnMgYXJlIG9ubHkgY2FsbGVkIGlmIHRoZSBsZWZ0IG9wZXJhbmQgZG9lcyBub3RcbiAgIHN1cHBvcnQgdGhlIGNvcnJlc3BvbmRpbmcgb3BlcmF0aW9uIGFuZCB0aGUgb3BlcmFuZHMgYXJlIG9mXG4gICBkaWZmZXJlbnQgdHlwZXMuIFsyXSAgRm9yIGluc3RhbmNlLCB0byBldmFsdWF0ZSB0aGUgZXhwcmVzc2lvbiAieCAtXG4gICB5Iiwgd2hlcmUgKnkqIGlzIGFuIGluc3RhbmNlIG9mIGEgY2xhc3MgdGhhdCBoYXMgYW4gIl9fcnN1Yl9fKCkiXG4gICBtZXRob2QsICJ5Ll9fcnN1Yl9fKHgpIiBpcyBjYWxsZWQgaWYgInguX19zdWJfXyh5KSIgcmV0dXJuc1xuICAgKk5vdEltcGxlbWVudGVkKi5cblxuICAgTm90ZSB0aGF0IHRlcm5hcnkgInBvdygpIiB3aWxsIG5vdCB0cnkgY2FsbGluZyAiX19ycG93X18oKSIgKHRoZVxuICAgY29lcmNpb24gcnVsZXMgd291bGQgYmVjb21lIHRvbyBjb21wbGljYXRlZCkuXG5cbiAgIE5vdGU6IElmIHRoZSByaWdodCBvcGVyYW5kXCdzIHR5cGUgaXMgYSBzdWJjbGFzcyBvZiB0aGUgbGVmdFxuICAgICBvcGVyYW5kXCdzIHR5cGUgYW5kIHRoYXQgc3ViY2xhc3MgcHJvdmlkZXMgdGhlIHJlZmxlY3RlZCBtZXRob2RcbiAgICAgZm9yIHRoZSBvcGVyYXRpb24sIHRoaXMgbWV0aG9kIHdpbGwgYmUgY2FsbGVkIGJlZm9yZSB0aGUgbGVmdFxuICAgICBvcGVyYW5kXCdzIG5vbi1yZWZsZWN0ZWQgbWV0aG9kLiAgVGhpcyBiZWhhdmlvciBhbGxvd3Mgc3ViY2xhc3Nlc1xuICAgICB0byBvdmVycmlkZSB0aGVpciBhbmNlc3RvcnNcJyBvcGVyYXRpb25zLlxuXG5vYmplY3QuX19pYWRkX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19pc3ViX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19pbXVsX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19pdHJ1ZWRpdl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faWZsb29yZGl2X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19pbW9kX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19pcG93X18oc2VsZiwgb3RoZXJbLCBtb2R1bG9dKVxub2JqZWN0Ll9faWxzaGlmdF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faXJzaGlmdF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faWFuZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faXhvcl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faW9yX18oc2VsZiwgb3RoZXIpXG5cbiAgIFRoZXNlIG1ldGhvZHMgYXJlIGNhbGxlZCB0byBpbXBsZW1lbnQgdGhlIGF1Z21lbnRlZCBhcml0aG1ldGljXG4gICBhc3NpZ25tZW50cyAoIis9IiwgIi09IiwgIio9IiwgIi89IiwgIi8vPSIsICIlPSIsICIqKj0iLCAiPDw9IixcbiAgICI+Pj0iLCAiJj0iLCAiXj0iLCAifD0iKS4gIFRoZXNlIG1ldGhvZHMgc2hvdWxkIGF0dGVtcHQgdG8gZG8gdGhlXG4gICBvcGVyYXRpb24gaW4tcGxhY2UgKG1vZGlmeWluZyAqc2VsZiopIGFuZCByZXR1cm4gdGhlIHJlc3VsdCAod2hpY2hcbiAgIGNvdWxkIGJlLCBidXQgZG9lcyBub3QgaGF2ZSB0byBiZSwgKnNlbGYqKS4gIElmIGEgc3BlY2lmaWMgbWV0aG9kXG4gICBpcyBub3QgZGVmaW5lZCwgdGhlIGF1Z21lbnRlZCBhc3NpZ25tZW50IGZhbGxzIGJhY2sgdG8gdGhlIG5vcm1hbFxuICAgbWV0aG9kcy4gIEZvciBpbnN0YW5jZSwgdG8gZXhlY3V0ZSB0aGUgc3RhdGVtZW50ICJ4ICs9IHkiLCB3aGVyZVxuICAgKngqIGlzIGFuIGluc3RhbmNlIG9mIGEgY2xhc3MgdGhhdCBoYXMgYW4gIl9faWFkZF9fKCkiIG1ldGhvZCxcbiAgICJ4Ll9faWFkZF9fKHkpIiBpcyBjYWxsZWQuICBJZiAqeCogaXMgYW4gaW5zdGFuY2Ugb2YgYSBjbGFzcyB0aGF0XG4gICBkb2VzIG5vdCBkZWZpbmUgYSAiX19pYWRkX18oKSIgbWV0aG9kLCAieC5fX2FkZF9fKHkpIiBhbmRcbiAgICJ5Ll9fcmFkZF9fKHgpIiBhcmUgY29uc2lkZXJlZCwgYXMgd2l0aCB0aGUgZXZhbHVhdGlvbiBvZiAieCArIHkiLlxuXG5vYmplY3QuX19uZWdfXyhzZWxmKVxub2JqZWN0Ll9fcG9zX18oc2VsZilcbm9iamVjdC5fX2Fic19fKHNlbGYpXG5vYmplY3QuX19pbnZlcnRfXyhzZWxmKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IHRoZSB1bmFyeSBhcml0aG1ldGljIG9wZXJhdGlvbnMgKCItIiwgIisiLFxuICAgImFicygpIiBhbmQgIn4iKS5cblxub2JqZWN0Ll9fY29tcGxleF9fKHNlbGYpXG5vYmplY3QuX19pbnRfXyhzZWxmKVxub2JqZWN0Ll9fZmxvYXRfXyhzZWxmKVxub2JqZWN0Ll9fcm91bmRfXyhzZWxmWywgbl0pXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgdGhlIGJ1aWx0LWluIGZ1bmN0aW9ucyAiY29tcGxleCgpIiwgImludCgpIixcbiAgICJmbG9hdCgpIiBhbmQgInJvdW5kKCkiLiAgU2hvdWxkIHJldHVybiBhIHZhbHVlIG9mIHRoZSBhcHByb3ByaWF0ZVxuICAgdHlwZS5cblxub2JqZWN0Ll9faW5kZXhfXyhzZWxmKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50ICJvcGVyYXRvci5pbmRleCgpIi4gIEFsc28gY2FsbGVkIHdoZW5ldmVyXG4gICBQeXRob24gbmVlZHMgYW4gaW50ZWdlciBvYmplY3QgKHN1Y2ggYXMgaW4gc2xpY2luZywgb3IgaW4gdGhlXG4gICBidWlsdC1pbiAiYmluKCkiLCAiaGV4KCkiIGFuZCAib2N0KCkiIGZ1bmN0aW9ucykuIE11c3QgcmV0dXJuIGFuXG4gICBpbnRlZ2VyLlxuXG5cbldpdGggU3RhdGVtZW50IENvbnRleHQgTWFuYWdlcnNcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuQSAqY29udGV4dCBtYW5hZ2VyKiBpcyBhbiBvYmplY3QgdGhhdCBkZWZpbmVzIHRoZSBydW50aW1lIGNvbnRleHQgdG9cbmJlIGVzdGFibGlzaGVkIHdoZW4gZXhlY3V0aW5nIGEgIndpdGgiIHN0YXRlbWVudC4gVGhlIGNvbnRleHQgbWFuYWdlclxuaGFuZGxlcyB0aGUgZW50cnkgaW50bywgYW5kIHRoZSBleGl0IGZyb20sIHRoZSBkZXNpcmVkIHJ1bnRpbWUgY29udGV4dFxuZm9yIHRoZSBleGVjdXRpb24gb2YgdGhlIGJsb2NrIG9mIGNvZGUuICBDb250ZXh0IG1hbmFnZXJzIGFyZSBub3JtYWxseVxuaW52b2tlZCB1c2luZyB0aGUgIndpdGgiIHN0YXRlbWVudCAoZGVzY3JpYmVkIGluIHNlY3Rpb24gKlRoZSB3aXRoXG5zdGF0ZW1lbnQqKSwgYnV0IGNhbiBhbHNvIGJlIHVzZWQgYnkgZGlyZWN0bHkgaW52b2tpbmcgdGhlaXIgbWV0aG9kcy5cblxuVHlwaWNhbCB1c2VzIG9mIGNvbnRleHQgbWFuYWdlcnMgaW5jbHVkZSBzYXZpbmcgYW5kIHJlc3RvcmluZyB2YXJpb3VzXG5raW5kcyBvZiBnbG9iYWwgc3RhdGUsIGxvY2tpbmcgYW5kIHVubG9ja2luZyByZXNvdXJjZXMsIGNsb3Npbmcgb3BlbmVkXG5maWxlcywgZXRjLlxuXG5Gb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBjb250ZXh0IG1hbmFnZXJzLCBzZWUgKkNvbnRleHQgTWFuYWdlciBUeXBlcyouXG5cbm9iamVjdC5fX2VudGVyX18oc2VsZilcblxuICAgRW50ZXIgdGhlIHJ1bnRpbWUgY29udGV4dCByZWxhdGVkIHRvIHRoaXMgb2JqZWN0LiBUaGUgIndpdGgiXG4gICBzdGF0ZW1lbnQgd2lsbCBiaW5kIHRoaXMgbWV0aG9kXCdzIHJldHVybiB2YWx1ZSB0byB0aGUgdGFyZ2V0KHMpXG4gICBzcGVjaWZpZWQgaW4gdGhlICJhcyIgY2xhdXNlIG9mIHRoZSBzdGF0ZW1lbnQsIGlmIGFueS5cblxub2JqZWN0Ll9fZXhpdF9fKHNlbGYsIGV4Y190eXBlLCBleGNfdmFsdWUsIHRyYWNlYmFjaylcblxuICAgRXhpdCB0aGUgcnVudGltZSBjb250ZXh0IHJlbGF0ZWQgdG8gdGhpcyBvYmplY3QuIFRoZSBwYXJhbWV0ZXJzXG4gICBkZXNjcmliZSB0aGUgZXhjZXB0aW9uIHRoYXQgY2F1c2VkIHRoZSBjb250ZXh0IHRvIGJlIGV4aXRlZC4gSWYgdGhlXG4gICBjb250ZXh0IHdhcyBleGl0ZWQgd2l0aG91dCBhbiBleGNlcHRpb24sIGFsbCB0aHJlZSBhcmd1bWVudHMgd2lsbFxuICAgYmUgIk5vbmUiLlxuXG4gICBJZiBhbiBleGNlcHRpb24gaXMgc3VwcGxpZWQsIGFuZCB0aGUgbWV0aG9kIHdpc2hlcyB0byBzdXBwcmVzcyB0aGVcbiAgIGV4Y2VwdGlvbiAoaS5lLiwgcHJldmVudCBpdCBmcm9tIGJlaW5nIHByb3BhZ2F0ZWQpLCBpdCBzaG91bGRcbiAgIHJldHVybiBhIHRydWUgdmFsdWUuIE90aGVyd2lzZSwgdGhlIGV4Y2VwdGlvbiB3aWxsIGJlIHByb2Nlc3NlZFxuICAgbm9ybWFsbHkgdXBvbiBleGl0IGZyb20gdGhpcyBtZXRob2QuXG5cbiAgIE5vdGUgdGhhdCAiX19leGl0X18oKSIgbWV0aG9kcyBzaG91bGQgbm90IHJlcmFpc2UgdGhlIHBhc3NlZC1pblxuICAgZXhjZXB0aW9uOyB0aGlzIGlzIHRoZSBjYWxsZXJcJ3MgcmVzcG9uc2liaWxpdHkuXG5cblNlZSBhbHNvOiAqKlBFUCAwMzQzKiogLSBUaGUgIndpdGgiIHN0YXRlbWVudFxuXG4gICAgIFRoZSBzcGVjaWZpY2F0aW9uLCBiYWNrZ3JvdW5kLCBhbmQgZXhhbXBsZXMgZm9yIHRoZSBQeXRob24gIndpdGgiXG4gICAgIHN0YXRlbWVudC5cblxuXG5TcGVjaWFsIG1ldGhvZCBsb29rdXBcbj09PT09PT09PT09PT09PT09PT09PVxuXG5Gb3IgY3VzdG9tIGNsYXNzZXMsIGltcGxpY2l0IGludm9jYXRpb25zIG9mIHNwZWNpYWwgbWV0aG9kcyBhcmUgb25seVxuZ3VhcmFudGVlZCB0byB3b3JrIGNvcnJlY3RseSBpZiBkZWZpbmVkIG9uIGFuIG9iamVjdFwncyB0eXBlLCBub3QgaW5cbnRoZSBvYmplY3RcJ3MgaW5zdGFuY2UgZGljdGlvbmFyeS4gIFRoYXQgYmVoYXZpb3VyIGlzIHRoZSByZWFzb24gd2h5XG50aGUgZm9sbG93aW5nIGNvZGUgcmFpc2VzIGFuIGV4Y2VwdGlvbjpcblxuICAgPj4+IGNsYXNzIEM6XG4gICAuLi4gICAgIHBhc3NcbiAgIC4uLlxuICAgPj4+IGMgPSBDKClcbiAgID4+PiBjLl9fbGVuX18gPSBsYW1iZGE6IDVcbiAgID4+PiBsZW4oYylcbiAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KTpcbiAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgMSwgaW4gPG1vZHVsZT5cbiAgIFR5cGVFcnJvcjogb2JqZWN0IG9mIHR5cGUgXCdDXCcgaGFzIG5vIGxlbigpXG5cblRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMgYmVoYXZpb3VyIGxpZXMgd2l0aCBhIG51bWJlciBvZiBzcGVjaWFsXG5tZXRob2RzIHN1Y2ggYXMgIl9faGFzaF9fKCkiIGFuZCAiX19yZXByX18oKSIgdGhhdCBhcmUgaW1wbGVtZW50ZWQgYnlcbmFsbCBvYmplY3RzLCBpbmNsdWRpbmcgdHlwZSBvYmplY3RzLiBJZiB0aGUgaW1wbGljaXQgbG9va3VwIG9mIHRoZXNlXG5tZXRob2RzIHVzZWQgdGhlIGNvbnZlbnRpb25hbCBsb29rdXAgcHJvY2VzcywgdGhleSB3b3VsZCBmYWlsIHdoZW5cbmludm9rZWQgb24gdGhlIHR5cGUgb2JqZWN0IGl0c2VsZjpcblxuICAgPj4+IDEgLl9faGFzaF9fKCkgPT0gaGFzaCgxKVxuICAgVHJ1ZVxuICAgPj4+IGludC5fX2hhc2hfXygpID09IGhhc2goaW50KVxuICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOlxuICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA8bW9kdWxlPlxuICAgVHlwZUVycm9yOiBkZXNjcmlwdG9yIFwnX19oYXNoX19cJyBvZiBcJ2ludFwnIG9iamVjdCBuZWVkcyBhbiBhcmd1bWVudFxuXG5JbmNvcnJlY3RseSBhdHRlbXB0aW5nIHRvIGludm9rZSBhbiB1bmJvdW5kIG1ldGhvZCBvZiBhIGNsYXNzIGluIHRoaXNcbndheSBpcyBzb21ldGltZXMgcmVmZXJyZWQgdG8gYXMgXCdtZXRhY2xhc3MgY29uZnVzaW9uXCcsIGFuZCBpcyBhdm9pZGVkXG5ieSBieXBhc3NpbmcgdGhlIGluc3RhbmNlIHdoZW4gbG9va2luZyB1cCBzcGVjaWFsIG1ldGhvZHM6XG5cbiAgID4+PiB0eXBlKDEpLl9faGFzaF9fKDEpID09IGhhc2goMSlcbiAgIFRydWVcbiAgID4+PiB0eXBlKGludCkuX19oYXNoX18oaW50KSA9PSBoYXNoKGludClcbiAgIFRydWVcblxuSW4gYWRkaXRpb24gdG8gYnlwYXNzaW5nIGFueSBpbnN0YW5jZSBhdHRyaWJ1dGVzIGluIHRoZSBpbnRlcmVzdCBvZlxuY29ycmVjdG5lc3MsIGltcGxpY2l0IHNwZWNpYWwgbWV0aG9kIGxvb2t1cCBnZW5lcmFsbHkgYWxzbyBieXBhc3Nlc1xudGhlICJfX2dldGF0dHJpYnV0ZV9fKCkiIG1ldGhvZCBldmVuIG9mIHRoZSBvYmplY3RcJ3MgbWV0YWNsYXNzOlxuXG4gICA+Pj4gY2xhc3MgTWV0YSh0eXBlKTpcbiAgIC4uLiAgICBkZWYgX19nZXRhdHRyaWJ1dGVfXygqYXJncyk6XG4gICAuLi4gICAgICAgcHJpbnQoIk1ldGFjbGFzcyBnZXRhdHRyaWJ1dGUgaW52b2tlZCIpXG4gICAuLi4gICAgICAgcmV0dXJuIHR5cGUuX19nZXRhdHRyaWJ1dGVfXygqYXJncylcbiAgIC4uLlxuICAgPj4+IGNsYXNzIEMob2JqZWN0LCBtZXRhY2xhc3M9TWV0YSk6XG4gICAuLi4gICAgIGRlZiBfX2xlbl9fKHNlbGYpOlxuICAgLi4uICAgICAgICAgcmV0dXJuIDEwXG4gICAuLi4gICAgIGRlZiBfX2dldGF0dHJpYnV0ZV9fKCphcmdzKTpcbiAgIC4uLiAgICAgICAgIHByaW50KCJDbGFzcyBnZXRhdHRyaWJ1dGUgaW52b2tlZCIpXG4gICAuLi4gICAgICAgICByZXR1cm4gb2JqZWN0Ll9fZ2V0YXR0cmlidXRlX18oKmFyZ3MpXG4gICAuLi5cbiAgID4+PiBjID0gQygpXG4gICA+Pj4gYy5fX2xlbl9fKCkgICAgICAgICAgICAgICAgICMgRXhwbGljaXQgbG9va3VwIHZpYSBpbnN0YW5jZVxuICAgQ2xhc3MgZ2V0YXR0cmlidXRlIGludm9rZWRcbiAgIDEwXG4gICA+Pj4gdHlwZShjKS5fX2xlbl9fKGMpICAgICAgICAgICMgRXhwbGljaXQgbG9va3VwIHZpYSB0eXBlXG4gICBNZXRhY2xhc3MgZ2V0YXR0cmlidXRlIGludm9rZWRcbiAgIDEwXG4gICA+Pj4gbGVuKGMpICAgICAgICAgICAgICAgICAgICAgICMgSW1wbGljaXQgbG9va3VwXG4gICAxMFxuXG5CeXBhc3NpbmcgdGhlICJfX2dldGF0dHJpYnV0ZV9fKCkiIG1hY2hpbmVyeSBpbiB0aGlzIGZhc2hpb24gcHJvdmlkZXNcbnNpZ25pZmljYW50IHNjb3BlIGZvciBzcGVlZCBvcHRpbWlzYXRpb25zIHdpdGhpbiB0aGUgaW50ZXJwcmV0ZXIsIGF0XG50aGUgY29zdCBvZiBzb21lIGZsZXhpYmlsaXR5IGluIHRoZSBoYW5kbGluZyBvZiBzcGVjaWFsIG1ldGhvZHMgKHRoZVxuc3BlY2lhbCBtZXRob2QgKm11c3QqIGJlIHNldCBvbiB0aGUgY2xhc3Mgb2JqZWN0IGl0c2VsZiBpbiBvcmRlciB0byBiZVxuY29uc2lzdGVudGx5IGludm9rZWQgYnkgdGhlIGludGVycHJldGVyKS5cblxuLVsgRm9vdG5vdGVzIF0tXG5cblsxXSBJdCAqaXMqIHBvc3NpYmxlIGluIHNvbWUgY2FzZXMgdG8gY2hhbmdlIGFuIG9iamVjdFwncyB0eXBlLFxuICAgIHVuZGVyIGNlcnRhaW4gY29udHJvbGxlZCBjb25kaXRpb25zLiBJdCBnZW5lcmFsbHkgaXNuXCd0IGEgZ29vZFxuICAgIGlkZWEgdGhvdWdoLCBzaW5jZSBpdCBjYW4gbGVhZCB0byBzb21lIHZlcnkgc3RyYW5nZSBiZWhhdmlvdXIgaWZcbiAgICBpdCBpcyBoYW5kbGVkIGluY29ycmVjdGx5LlxuXG5bMl0gRm9yIG9wZXJhbmRzIG9mIHRoZSBzYW1lIHR5cGUsIGl0IGlzIGFzc3VtZWQgdGhhdCBpZiB0aGUgbm9uLVxuICAgIHJlZmxlY3RlZCBtZXRob2QgKHN1Y2ggYXMgIl9fYWRkX18oKSIpIGZhaWxzIHRoZSBvcGVyYXRpb24gaXMgbm90XG4gICAgc3VwcG9ydGVkLCB3aGljaCBpcyB3aHkgdGhlIHJlZmxlY3RlZCBtZXRob2QgaXMgbm90IGNhbGxlZC5cbicsCi0gJ3N0cmluZy1tZXRob2RzJzogJ1xuU3RyaW5nIE1ldGhvZHNcbioqKioqKioqKioqKioqXG5cblN0cmluZ3MgaW1wbGVtZW50IGFsbCBvZiB0aGUgKmNvbW1vbiogc2VxdWVuY2Ugb3BlcmF0aW9ucywgYWxvbmcgd2l0aFxudGhlIGFkZGl0aW9uYWwgbWV0aG9kcyBkZXNjcmliZWQgYmVsb3cuXG5cblN0cmluZ3MgYWxzbyBzdXBwb3J0IHR3byBzdHlsZXMgb2Ygc3RyaW5nIGZvcm1hdHRpbmcsIG9uZSBwcm92aWRpbmcgYVxubGFyZ2UgZGVncmVlIG9mIGZsZXhpYmlsaXR5IGFuZCBjdXN0b21pemF0aW9uIChzZWUgInN0ci5mb3JtYXQoKSIsXG4qRm9ybWF0IFN0cmluZyBTeW50YXgqIGFuZCAqU3RyaW5nIEZvcm1hdHRpbmcqKSBhbmQgdGhlIG90aGVyIGJhc2VkIG9uXG5DICJwcmludGYiIHN0eWxlIGZvcm1hdHRpbmcgdGhhdCBoYW5kbGVzIGEgbmFycm93ZXIgcmFuZ2Ugb2YgdHlwZXMgYW5kXG5pcyBzbGlnaHRseSBoYXJkZXIgdG8gdXNlIGNvcnJlY3RseSwgYnV0IGlzIG9mdGVuIGZhc3RlciBmb3IgdGhlIGNhc2VzXG5pdCBjYW4gaGFuZGxlICgqcHJpbnRmLXN0eWxlIFN0cmluZyBGb3JtYXR0aW5nKikuXG5cblRoZSAqVGV4dCBQcm9jZXNzaW5nIFNlcnZpY2VzKiBzZWN0aW9uIG9mIHRoZSBzdGFuZGFyZCBsaWJyYXJ5IGNvdmVyc1xuYSBudW1iZXIgb2Ygb3RoZXIgbW9kdWxlcyB0aGF0IHByb3ZpZGUgdmFyaW91cyB0ZXh0IHJlbGF0ZWQgdXRpbGl0aWVzXG4oaW5jbHVkaW5nIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdXBwb3J0IGluIHRoZSAicmUiIG1vZHVsZSkuXG5cbnN0ci5jYXBpdGFsaXplKClcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHdpdGggaXRzIGZpcnN0IGNoYXJhY3RlciBjYXBpdGFsaXplZFxuICAgYW5kIHRoZSByZXN0IGxvd2VyY2FzZWQuXG5cbnN0ci5jYXNlZm9sZCgpXG5cbiAgIFJldHVybiBhIGNhc2Vmb2xkZWQgY29weSBvZiB0aGUgc3RyaW5nLiBDYXNlZm9sZGVkIHN0cmluZ3MgbWF5IGJlXG4gICB1c2VkIGZvciBjYXNlbGVzcyBtYXRjaGluZy5cblxuICAgQ2FzZWZvbGRpbmcgaXMgc2ltaWxhciB0byBsb3dlcmNhc2luZyBidXQgbW9yZSBhZ2dyZXNzaXZlIGJlY2F1c2VcbiAgIGl0IGlzIGludGVuZGVkIHRvIHJlbW92ZSBhbGwgY2FzZSBkaXN0aW5jdGlvbnMgaW4gYSBzdHJpbmcuIEZvclxuICAgZXhhbXBsZSwgdGhlIEdlcm1hbiBsb3dlcmNhc2UgbGV0dGVyICJcJ1x4YzNceDlmXCciIGlzIGVxdWl2YWxlbnQgdG8gIiJzcyIiLlxuICAgU2luY2UgaXQgaXMgYWxyZWFkeSBsb3dlcmNhc2UsICJsb3dlcigpIiB3b3VsZCBkbyBub3RoaW5nIHRvICJcJ1x4YzNceDlmXCciO1xuICAgImNhc2Vmb2xkKCkiIGNvbnZlcnRzIGl0IHRvICIic3MiIi5cblxuICAgVGhlIGNhc2Vmb2xkaW5nIGFsZ29yaXRobSBpcyBkZXNjcmliZWQgaW4gc2VjdGlvbiAzLjEzIG9mIHRoZVxuICAgVW5pY29kZSBTdGFuZGFyZC5cblxuICAgTmV3IGluIHZlcnNpb24gMy4zLlxuXG5zdHIuY2VudGVyKHdpZHRoWywgZmlsbGNoYXJdKVxuXG4gICBSZXR1cm4gY2VudGVyZWQgaW4gYSBzdHJpbmcgb2YgbGVuZ3RoICp3aWR0aCouIFBhZGRpbmcgaXMgZG9uZVxuICAgdXNpbmcgdGhlIHNwZWNpZmllZCAqZmlsbGNoYXIqIChkZWZhdWx0IGlzIGEgc3BhY2UpLlxuXG5zdHIuY291bnQoc3ViWywgc3RhcnRbLCBlbmRdXSlcblxuICAgUmV0dXJuIHRoZSBudW1iZXIgb2Ygbm9uLW92ZXJsYXBwaW5nIG9jY3VycmVuY2VzIG9mIHN1YnN0cmluZyAqc3ViKlxuICAgaW4gdGhlIHJhbmdlIFsqc3RhcnQqLCAqZW5kKl0uICBPcHRpb25hbCBhcmd1bWVudHMgKnN0YXJ0KiBhbmRcbiAgICplbmQqIGFyZSBpbnRlcnByZXRlZCBhcyBpbiBzbGljZSBub3RhdGlvbi5cblxuc3RyLmVuY29kZShlbmNvZGluZz0idXRmLTgiLCBlcnJvcnM9InN0cmljdCIpXG5cbiAgIFJldHVybiBhbiBlbmNvZGVkIHZlcnNpb24gb2YgdGhlIHN0cmluZyBhcyBhIGJ5dGVzIG9iamVjdC4gRGVmYXVsdFxuICAgZW5jb2RpbmcgaXMgIlwndXRmLThcJyIuICplcnJvcnMqIG1heSBiZSBnaXZlbiB0byBzZXQgYSBkaWZmZXJlbnRcbiAgIGVycm9yIGhhbmRsaW5nIHNjaGVtZS4gVGhlIGRlZmF1bHQgZm9yICplcnJvcnMqIGlzICJcJ3N0cmljdFwnIixcbiAgIG1lYW5pbmcgdGhhdCBlbmNvZGluZyBlcnJvcnMgcmFpc2UgYSAiVW5pY29kZUVycm9yIi4gT3RoZXIgcG9zc2libGVcbiAgIHZhbHVlcyBhcmUgIlwnaWdub3JlXCciLCAiXCdyZXBsYWNlXCciLCAiXCd4bWxjaGFycmVmcmVwbGFjZVwnIixcbiAgICJcJ2JhY2tzbGFzaHJlcGxhY2VcJyIgYW5kIGFueSBvdGhlciBuYW1lIHJlZ2lzdGVyZWQgdmlhXG4gICAiY29kZWNzLnJlZ2lzdGVyX2Vycm9yKCkiLCBzZWUgc2VjdGlvbiAqQ29kZWMgQmFzZSBDbGFzc2VzKi4gRm9yIGFcbiAgIGxpc3Qgb2YgcG9zc2libGUgZW5jb2RpbmdzLCBzZWUgc2VjdGlvbiAqU3RhbmRhcmQgRW5jb2RpbmdzKi5cblxuICAgQ2hhbmdlZCBpbiB2ZXJzaW9uIDMuMTogU3VwcG9ydCBmb3Iga2V5d29yZCBhcmd1bWVudHMgYWRkZWQuXG5cbnN0ci5lbmRzd2l0aChzdWZmaXhbLCBzdGFydFssIGVuZF1dKVxuXG4gICBSZXR1cm4gIlRydWUiIGlmIHRoZSBzdHJpbmcgZW5kcyB3aXRoIHRoZSBzcGVjaWZpZWQgKnN1ZmZpeCosXG4gICBvdGhlcndpc2UgcmV0dXJuICJGYWxzZSIuICAqc3VmZml4KiBjYW4gYWxzbyBiZSBhIHR1cGxlIG9mIHN1ZmZpeGVzXG4gICB0byBsb29rIGZvci4gIFdpdGggb3B0aW9uYWwgKnN0YXJ0KiwgdGVzdCBiZWdpbm5pbmcgYXQgdGhhdFxuICAgcG9zaXRpb24uICBXaXRoIG9wdGlvbmFsICplbmQqLCBzdG9wIGNvbXBhcmluZyBhdCB0aGF0IHBvc2l0aW9uLlxuXG5zdHIuZXhwYW5kdGFicyhbdGFic2l6ZV0pXG5cbiAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyB3aGVyZSBhbGwgdGFiIGNoYXJhY3RlcnMgYXJlIHJlcGxhY2VkXG4gICBieSBvbmUgb3IgbW9yZSBzcGFjZXMsIGRlcGVuZGluZyBvbiB0aGUgY3VycmVudCBjb2x1bW4gYW5kIHRoZVxuICAgZ2l2ZW4gdGFiIHNpemUuICBUYWIgcG9zaXRpb25zIG9jY3VyIGV2ZXJ5ICp0YWJzaXplKiBjaGFyYWN0ZXJzXG4gICAoZGVmYXVsdCBpcyA4LCBnaXZpbmcgdGFiIHBvc2l0aW9ucyBhdCBjb2x1bW5zIDAsIDgsIDE2IGFuZCBzbyBvbikuXG4gICBUbyBleHBhbmQgdGhlIHN0cmluZywgdGhlIGN1cnJlbnQgY29sdW1uIGlzIHNldCB0byB6ZXJvIGFuZCB0aGVcbiAgIHN0cmluZyBpcyBleGFtaW5lZCBjaGFyYWN0ZXIgYnkgY2hhcmFjdGVyLiAgSWYgdGhlIGNoYXJhY3RlciBpcyBhXG4gICB0YWIgKCJcXHQiKSwgb25lIG9yIG1vcmUgc3BhY2UgY2hhcmFjdGVycyBhcmUgaW5zZXJ0ZWQgaW4gdGhlIHJlc3VsdFxuICAgdW50aWwgdGhlIGN1cnJlbnQgY29sdW1uIGlzIGVxdWFsIHRvIHRoZSBuZXh0IHRhYiBwb3NpdGlvbi4gKFRoZVxuICAgdGFiIGNoYXJhY3RlciBpdHNlbGYgaXMgbm90IGNvcGllZC4pICBJZiB0aGUgY2hhcmFjdGVyIGlzIGEgbmV3bGluZVxuICAgKCJcXG4iKSBvciByZXR1cm4gKCJcXHIiKSwgaXQgaXMgY29waWVkIGFuZCB0aGUgY3VycmVudCBjb2x1bW4gaXNcbiAgIHJlc2V0IHRvIHplcm8uICBBbnkgb3RoZXIgY2hhcmFjdGVyIGlzIGNvcGllZCB1bmNoYW5nZWQgYW5kIHRoZVxuICAgY3VycmVudCBjb2x1bW4gaXMgaW5jcmVtZW50ZWQgYnkgb25lIHJlZ2FyZGxlc3Mgb2YgaG93IHRoZVxuICAgY2hhcmFjdGVyIGlzIHJlcHJlc2VudGVkIHdoZW4gcHJpbnRlZC5cblxuICAgPj4+IFwnMDFcXHQwMTJcXHQwMTIzXFx0MDEyMzRcJy5leHBhbmR0YWJzKClcbiAgIFwnMDEgICAgICAwMTIgICAgIDAxMjMgICAgMDEyMzRcJ1xuICAgPj4+IFwnMDFcXHQwMTJcXHQwMTIzXFx0MDEyMzRcJy5leHBhbmR0YWJzKDQpXG4gICBcJzAxICAwMTIgMDEyMyAgICAwMTIzNFwnXG5cbnN0ci5maW5kKHN1YlssIHN0YXJ0WywgZW5kXV0pXG5cbiAgIFJldHVybiB0aGUgbG93ZXN0IGluZGV4IGluIHRoZSBzdHJpbmcgd2hlcmUgc3Vic3RyaW5nICpzdWIqIGlzXG4gICBmb3VuZCwgc3VjaCB0aGF0ICpzdWIqIGlzIGNvbnRhaW5lZCBpbiB0aGUgc2xpY2UgInNbc3RhcnQ6ZW5kXSIuXG4gICBPcHRpb25hbCBhcmd1bWVudHMgKnN0YXJ0KiBhbmQgKmVuZCogYXJlIGludGVycHJldGVkIGFzIGluIHNsaWNlXG4gICBub3RhdGlvbi4gIFJldHVybiAiLTEiIGlmICpzdWIqIGlzIG5vdCBmb3VuZC5cblxuICAgTm90ZTogVGhlICJmaW5kKCkiIG1ldGhvZCBzaG91bGQgYmUgdXNlZCBvbmx5IGlmIHlvdSBuZWVkIHRvIGtub3dcbiAgICAgdGhlIHBvc2l0aW9uIG9mICpzdWIqLiAgVG8gY2hlY2sgaWYgKnN1YiogaXMgYSBzdWJzdHJpbmcgb3Igbm90LFxuICAgICB1c2UgdGhlICJpbiIgb3BlcmF0b3I6XG5cbiAgICAgICAgPj4+IFwnUHlcJyBpbiBcJ1B5dGhvblwnXG4gICAgICAgIFRydWVcblxuc3RyLmZvcm1hdCgqYXJncywgKiprd2FyZ3MpXG5cbiAgIFBlcmZvcm0gYSBzdHJpbmcgZm9ybWF0dGluZyBvcGVyYXRpb24uICBUaGUgc3RyaW5nIG9uIHdoaWNoIHRoaXNcbiAgIG1ldGhvZCBpcyBjYWxsZWQgY2FuIGNvbnRhaW4gbGl0ZXJhbCB0ZXh0IG9yIHJlcGxhY2VtZW50IGZpZWxkc1xuICAgZGVsaW1pdGVkIGJ5IGJyYWNlcyAie30iLiAgRWFjaCByZXBsYWNlbWVudCBmaWVsZCBjb250YWlucyBlaXRoZXJcbiAgIHRoZSBudW1lcmljIGluZGV4IG9mIGEgcG9zaXRpb25hbCBhcmd1bWVudCwgb3IgdGhlIG5hbWUgb2YgYVxuICAga2V5d29yZCBhcmd1bWVudC4gIFJldHVybnMgYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2hlcmUgZWFjaFxuICAgcmVwbGFjZW1lbnQgZmllbGQgaXMgcmVwbGFjZWQgd2l0aCB0aGUgc3RyaW5nIHZhbHVlIG9mIHRoZVxuICAgY29ycmVzcG9uZGluZyBhcmd1bWVudC5cblxuICAgPj4+ICJUaGUgc3VtIG9mIDEgKyAyIGlzIHswfSIuZm9ybWF0KDErMilcbiAgIFwnVGhlIHN1bSBvZiAxICsgMiBpcyAzXCdcblxuICAgU2VlICpGb3JtYXQgU3RyaW5nIFN5bnRheCogZm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlIHZhcmlvdXNcbiAgIGZvcm1hdHRpbmcgb3B0aW9ucyB0aGF0IGNhbiBiZSBzcGVjaWZpZWQgaW4gZm9ybWF0IHN0cmluZ3MuXG5cbnN0ci5mb3JtYXRfbWFwKG1hcHBpbmcpXG5cbiAgIFNpbWlsYXIgdG8gInN0ci5mb3JtYXQoKiptYXBwaW5nKSIsIGV4Y2VwdCB0aGF0ICJtYXBwaW5nIiBpcyB1c2VkXG4gICBkaXJlY3RseSBhbmQgbm90IGNvcGllZCB0byBhICJkaWN0Ii4gIFRoaXMgaXMgdXNlZnVsIGlmIGZvciBleGFtcGxlXG4gICAibWFwcGluZyIgaXMgYSBkaWN0IHN1YmNsYXNzOlxuXG4gICA+Pj4gY2xhc3MgRGVmYXVsdChkaWN0KTpcbiAgIC4uLiAgICAgZGVmIF9fbWlzc2luZ19fKHNlbGYsIGtleSk6XG4gICAuLi4gICAgICAgICByZXR1cm4ga2V5XG4gICAuLi5cbiAgID4+PiBcJ3tuYW1lfSB3YXMgYm9ybiBpbiB7Y291bnRyeX1cJy5mb3JtYXRfbWFwKERlZmF1bHQobmFtZT1cJ0d1aWRvXCcpKVxuICAgXCdHdWlkbyB3YXMgYm9ybiBpbiBjb3VudHJ5XCdcblxuICAgTmV3IGluIHZlcnNpb24gMy4yLlxuXG5zdHIuaW5kZXgoc3ViWywgc3RhcnRbLCBlbmRdXSlcblxuICAgTGlrZSAiZmluZCgpIiwgYnV0IHJhaXNlICJWYWx1ZUVycm9yIiB3aGVuIHRoZSBzdWJzdHJpbmcgaXMgbm90XG4gICBmb3VuZC5cblxuc3RyLmlzYWxudW0oKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiBhbGwgY2hhcmFjdGVycyBpbiB0aGUgc3RyaW5nIGFyZSBhbHBoYW51bWVyaWMgYW5kXG4gICB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyLCBmYWxzZSBvdGhlcndpc2UuICBBIGNoYXJhY3RlciAiYyJcbiAgIGlzIGFscGhhbnVtZXJpYyBpZiBvbmUgb2YgdGhlIGZvbGxvd2luZyByZXR1cm5zICJUcnVlIjpcbiAgICJjLmlzYWxwaGEoKSIsICJjLmlzZGVjaW1hbCgpIiwgImMuaXNkaWdpdCgpIiwgb3IgImMuaXNudW1lcmljKCkiLlxuXG5zdHIuaXNhbHBoYSgpXG5cbiAgIFJldHVybiB0cnVlIGlmIGFsbCBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmcgYXJlIGFscGhhYmV0aWMgYW5kXG4gICB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyLCBmYWxzZSBvdGhlcndpc2UuICBBbHBoYWJldGljXG4gICBjaGFyYWN0ZXJzIGFyZSB0aG9zZSBjaGFyYWN0ZXJzIGRlZmluZWQgaW4gdGhlIFVuaWNvZGUgY2hhcmFjdGVyXG4gICBkYXRhYmFzZSBhcyAiTGV0dGVyIiwgaS5lLiwgdGhvc2Ugd2l0aCBnZW5lcmFsIGNhdGVnb3J5IHByb3BlcnR5XG4gICBiZWluZyBvbmUgb2YgIkxtIiwgIkx0IiwgIkx1IiwgIkxsIiwgb3IgIkxvIi4gIE5vdGUgdGhhdCB0aGlzIGlzXG4gICBkaWZmZXJlbnQgZnJvbSB0aGUgIkFscGhhYmV0aWMiIHByb3BlcnR5IGRlZmluZWQgaW4gdGhlIFVuaWNvZGVcbiAgIFN0YW5kYXJkLlxuXG5zdHIuaXNkZWNpbWFsKClcblxuICAgUmV0dXJuIHRydWUgaWYgYWxsIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZyBhcmUgZGVjaW1hbCBjaGFyYWN0ZXJzXG4gICBhbmQgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGNoYXJhY3RlciwgZmFsc2Ugb3RoZXJ3aXNlLiBEZWNpbWFsXG4gICBjaGFyYWN0ZXJzIGFyZSB0aG9zZSBmcm9tIGdlbmVyYWwgY2F0ZWdvcnkgIk5kIi4gVGhpcyBjYXRlZ29yeVxuICAgaW5jbHVkZXMgZGlnaXQgY2hhcmFjdGVycywgYW5kIGFsbCBjaGFyYWN0ZXJzIHRoYXQgY2FuIGJlIHVzZWQgdG9cbiAgIGZvcm0gZGVjaW1hbC1yYWRpeCBudW1iZXJzLCBlLmcuIFUrMDY2MCwgQVJBQklDLUlORElDIERJR0lUIFpFUk8uXG5cbnN0ci5pc2RpZ2l0KClcblxuICAgUmV0dXJuIHRydWUgaWYgYWxsIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZyBhcmUgZGlnaXRzIGFuZCB0aGVyZSBpc1xuICAgYXQgbGVhc3Qgb25lIGNoYXJhY3RlciwgZmFsc2Ugb3RoZXJ3aXNlLiAgRGlnaXRzIGluY2x1ZGUgZGVjaW1hbFxuICAgY2hhcmFjdGVycyBhbmQgZGlnaXRzIHRoYXQgbmVlZCBzcGVjaWFsIGhhbmRsaW5nLCBzdWNoIGFzIHRoZVxuICAgY29tcGF0aWJpbGl0eSBzdXBlcnNjcmlwdCBkaWdpdHMuICBGb3JtYWxseSwgYSBkaWdpdCBpcyBhIGNoYXJhY3RlclxuICAgdGhhdCBoYXMgdGhlIHByb3BlcnR5IHZhbHVlIE51bWVyaWNfVHlwZT1EaWdpdCBvclxuICAgTnVtZXJpY19UeXBlPURlY2ltYWwuXG5cbnN0ci5pc2lkZW50aWZpZXIoKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiB0aGUgc3RyaW5nIGlzIGEgdmFsaWQgaWRlbnRpZmllciBhY2NvcmRpbmcgdG8gdGhlXG4gICBsYW5ndWFnZSBkZWZpbml0aW9uLCBzZWN0aW9uICpJZGVudGlmaWVycyBhbmQga2V5d29yZHMqLlxuXG4gICBVc2UgImtleXdvcmQuaXNrZXl3b3JkKCkiIHRvIHRlc3QgZm9yIHJlc2VydmVkIGlkZW50aWZpZXJzIHN1Y2ggYXNcbiAgICJkZWYiIGFuZCAiY2xhc3MiLlxuXG5zdHIuaXNsb3dlcigpXG5cbiAgIFJldHVybiB0cnVlIGlmIGFsbCBjYXNlZCBjaGFyYWN0ZXJzIFs0XSBpbiB0aGUgc3RyaW5nIGFyZSBsb3dlcmNhc2VcbiAgIGFuZCB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgY2FzZWQgY2hhcmFjdGVyLCBmYWxzZSBvdGhlcndpc2UuXG5cbnN0ci5pc251bWVyaWMoKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiBhbGwgY2hhcmFjdGVycyBpbiB0aGUgc3RyaW5nIGFyZSBudW1lcmljIGNoYXJhY3RlcnMsXG4gICBhbmQgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGNoYXJhY3RlciwgZmFsc2Ugb3RoZXJ3aXNlLiBOdW1lcmljXG4gICBjaGFyYWN0ZXJzIGluY2x1ZGUgZGlnaXQgY2hhcmFjdGVycywgYW5kIGFsbCBjaGFyYWN0ZXJzIHRoYXQgaGF2ZVxuICAgdGhlIFVuaWNvZGUgbnVtZXJpYyB2YWx1ZSBwcm9wZXJ0eSwgZS5nLiBVKzIxNTUsIFZVTEdBUiBGUkFDVElPTlxuICAgT05FIEZJRlRILiAgRm9ybWFsbHksIG51bWVyaWMgY2hhcmFjdGVycyBhcmUgdGhvc2Ugd2l0aCB0aGVcbiAgIHByb3BlcnR5IHZhbHVlIE51bWVyaWNfVHlwZT1EaWdpdCwgTnVtZXJpY19UeXBlPURlY2ltYWwgb3JcbiAgIE51bWVyaWNfVHlwZT1OdW1lcmljLlxuXG5zdHIuaXNwcmludGFibGUoKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiBhbGwgY2hhcmFjdGVycyBpbiB0aGUgc3RyaW5nIGFyZSBwcmludGFibGUgb3IgdGhlXG4gICBzdHJpbmcgaXMgZW1wdHksIGZhbHNlIG90aGVyd2lzZS4gIE5vbnByaW50YWJsZSBjaGFyYWN0ZXJzIGFyZVxuICAgdGhvc2UgY2hhcmFjdGVycyBkZWZpbmVkIGluIHRoZSBVbmljb2RlIGNoYXJhY3RlciBkYXRhYmFzZSBhc1xuICAgIk90aGVyIiBvciAiU2VwYXJhdG9yIiwgZXhjZXB0aW5nIHRoZSBBU0NJSSBzcGFjZSAoMHgyMCkgd2hpY2ggaXNcbiAgIGNvbnNpZGVyZWQgcHJpbnRhYmxlLiAgKE5vdGUgdGhhdCBwcmludGFibGUgY2hhcmFjdGVycyBpbiB0aGlzXG4gICBjb250ZXh0IGFyZSB0aG9zZSB3aGljaCBzaG91bGQgbm90IGJlIGVzY2FwZWQgd2hlbiAicmVwcigpIiBpc1xuICAgaW52b2tlZCBvbiBhIHN0cmluZy4gIEl0IGhhcyBubyBiZWFyaW5nIG9uIHRoZSBoYW5kbGluZyBvZiBzdHJpbmdzXG4gICB3cml0dGVuIHRvICJzeXMuc3Rkb3V0IiBvciAic3lzLnN0ZGVyciIuKVxuXG5zdHIuaXNzcGFjZSgpXG5cbiAgIFJldHVybiB0cnVlIGlmIHRoZXJlIGFyZSBvbmx5IHdoaXRlc3BhY2UgY2hhcmFjdGVycyBpbiB0aGUgc3RyaW5nXG4gICBhbmQgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGNoYXJhY3RlciwgZmFsc2Ugb3RoZXJ3aXNlLiAgV2hpdGVzcGFjZVxuICAgY2hhcmFjdGVycyAgYXJlIHRob3NlIGNoYXJhY3RlcnMgZGVmaW5lZCBpbiB0aGUgVW5pY29kZSBjaGFyYWN0ZXJcbiAgIGRhdGFiYXNlIGFzICJPdGhlciIgb3IgIlNlcGFyYXRvciIgYW5kIHRob3NlIHdpdGggYmlkaXJlY3Rpb25hbFxuICAgcHJvcGVydHkgYmVpbmcgb25lIG9mICJXUyIsICJCIiwgb3IgIlMiLlxuXG5zdHIuaXN0aXRsZSgpXG5cbiAgIFJldHVybiB0cnVlIGlmIHRoZSBzdHJpbmcgaXMgYSB0aXRsZWNhc2VkIHN0cmluZyBhbmQgdGhlcmUgaXMgYXRcbiAgIGxlYXN0IG9uZSBjaGFyYWN0ZXIsIGZvciBleGFtcGxlIHVwcGVyY2FzZSBjaGFyYWN0ZXJzIG1heSBvbmx5XG4gICBmb2xsb3cgdW5jYXNlZCBjaGFyYWN0ZXJzIGFuZCBsb3dlcmNhc2UgY2hhcmFjdGVycyBvbmx5IGNhc2VkIG9uZXMuXG4gICBSZXR1cm4gZmFsc2Ugb3RoZXJ3aXNlLlxuXG5zdHIuaXN1cHBlcigpXG5cbiAgIFJldHVybiB0cnVlIGlmIGFsbCBjYXNlZCBjaGFyYWN0ZXJzIFs0XSBpbiB0aGUgc3RyaW5nIGFyZSB1cHBlcmNhc2VcbiAgIGFuZCB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgY2FzZWQgY2hhcmFjdGVyLCBmYWxzZSBvdGhlcndpc2UuXG5cbnN0ci5qb2luKGl0ZXJhYmxlKVxuXG4gICBSZXR1cm4gYSBzdHJpbmcgd2hpY2ggaXMgdGhlIGNvbmNhdGVuYXRpb24gb2YgdGhlIHN0cmluZ3MgaW4gdGhlXG4gICAqaXRlcmFibGUqICppdGVyYWJsZSouICBBICJUeXBlRXJyb3IiIHdpbGwgYmUgcmFpc2VkIGlmIHRoZXJlIGFyZVxuICAgYW55IG5vbi1zdHJpbmcgdmFsdWVzIGluICppdGVyYWJsZSosIGluY2x1ZGluZyAiYnl0ZXMiIG9iamVjdHMuXG4gICBUaGUgc2VwYXJhdG9yIGJldHdlZW4gZWxlbWVudHMgaXMgdGhlIHN0cmluZyBwcm92aWRpbmcgdGhpcyBtZXRob2QuXG5cbnN0ci5sanVzdCh3aWR0aFssIGZpbGxjaGFyXSlcblxuICAgUmV0dXJuIHRoZSBzdHJpbmcgbGVmdCBqdXN0aWZpZWQgaW4gYSBzdHJpbmcgb2YgbGVuZ3RoICp3aWR0aCouXG4gICBQYWRkaW5nIGlzIGRvbmUgdXNpbmcgdGhlIHNwZWNpZmllZCAqZmlsbGNoYXIqIChkZWZhdWx0IGlzIGFcbiAgIHNwYWNlKS4gIFRoZSBvcmlnaW5hbCBzdHJpbmcgaXMgcmV0dXJuZWQgaWYgKndpZHRoKiBpcyBsZXNzIHRoYW4gb3JcbiAgIGVxdWFsIHRvICJsZW4ocykiLlxuXG5zdHIubG93ZXIoKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2l0aCBhbGwgdGhlIGNhc2VkIGNoYXJhY3RlcnMgWzRdXG4gICBjb252ZXJ0ZWQgdG8gbG93ZXJjYXNlLlxuXG4gICBUaGUgbG93ZXJjYXNpbmcgYWxnb3JpdGhtIHVzZWQgaXMgZGVzY3JpYmVkIGluIHNlY3Rpb24gMy4xMyBvZiB0aGVcbiAgIFVuaWNvZGUgU3RhbmRhcmQuXG5cbnN0ci5sc3RyaXAoW2NoYXJzXSlcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHdpdGggbGVhZGluZyBjaGFyYWN0ZXJzIHJlbW92ZWQuICBUaGVcbiAgICpjaGFycyogYXJndW1lbnQgaXMgYSBzdHJpbmcgc3BlY2lmeWluZyB0aGUgc2V0IG9mIGNoYXJhY3RlcnMgdG8gYmVcbiAgIHJlbW92ZWQuICBJZiBvbWl0dGVkIG9yICJOb25lIiwgdGhlICpjaGFycyogYXJndW1lbnQgZGVmYXVsdHMgdG9cbiAgIHJlbW92aW5nIHdoaXRlc3BhY2UuICBUaGUgKmNoYXJzKiBhcmd1bWVudCBpcyBub3QgYSBwcmVmaXg7IHJhdGhlcixcbiAgIGFsbCBjb21iaW5hdGlvbnMgb2YgaXRzIHZhbHVlcyBhcmUgc3RyaXBwZWQ6XG5cbiAgID4+PiBcJyAgIHNwYWNpb3VzICAgXCcubHN0cmlwKClcbiAgIFwnc3BhY2lvdXMgICBcJ1xuICAgPj4+IFwnd3d3LmV4YW1wbGUuY29tXCcubHN0cmlwKFwnY21vd3ouXCcpXG4gICBcJ2V4YW1wbGUuY29tXCdcblxuc3RhdGljIHN0ci5tYWtldHJhbnMoeFssIHlbLCB6XV0pXG5cbiAgIFRoaXMgc3RhdGljIG1ldGhvZCByZXR1cm5zIGEgdHJhbnNsYXRpb24gdGFibGUgdXNhYmxlIGZvclxuICAgInN0ci50cmFuc2xhdGUoKSIuXG5cbiAgIElmIHRoZXJlIGlzIG9ubHkgb25lIGFyZ3VtZW50LCBpdCBtdXN0IGJlIGEgZGljdGlvbmFyeSBtYXBwaW5nXG4gICBVbmljb2RlIG9yZGluYWxzIChpbnRlZ2Vycykgb3IgY2hhcmFjdGVycyAoc3RyaW5ncyBvZiBsZW5ndGggMSkgdG9cbiAgIFVuaWNvZGUgb3JkaW5hbHMsIHN0cmluZ3MgKG9mIGFyYml0cmFyeSBsZW5ndGhzKSBvciBOb25lLlxuICAgQ2hhcmFjdGVyIGtleXMgd2lsbCB0aGVuIGJlIGNvbnZlcnRlZCB0byBvcmRpbmFscy5cblxuICAgSWYgdGhlcmUgYXJlIHR3byBhcmd1bWVudHMsIHRoZXkgbXVzdCBiZSBzdHJpbmdzIG9mIGVxdWFsIGxlbmd0aCxcbiAgIGFuZCBpbiB0aGUgcmVzdWx0aW5nIGRpY3Rpb25hcnksIGVhY2ggY2hhcmFjdGVyIGluIHggd2lsbCBiZSBtYXBwZWRcbiAgIHRvIHRoZSBjaGFyYWN0ZXIgYXQgdGhlIHNhbWUgcG9zaXRpb24gaW4geS4gIElmIHRoZXJlIGlzIGEgdGhpcmRcbiAgIGFyZ3VtZW50LCBpdCBtdXN0IGJlIGEgc3RyaW5nLCB3aG9zZSBjaGFyYWN0ZXJzIHdpbGwgYmUgbWFwcGVkIHRvXG4gICBOb25lIGluIHRoZSByZXN1bHQuXG5cbnN0ci5wYXJ0aXRpb24oc2VwKVxuXG4gICBTcGxpdCB0aGUgc3RyaW5nIGF0IHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mICpzZXAqLCBhbmQgcmV0dXJuIGFcbiAgIDMtdHVwbGUgY29udGFpbmluZyB0aGUgcGFydCBiZWZvcmUgdGhlIHNlcGFyYXRvciwgdGhlIHNlcGFyYXRvclxuICAgaXRzZWxmLCBhbmQgdGhlIHBhcnQgYWZ0ZXIgdGhlIHNlcGFyYXRvci4gIElmIHRoZSBzZXBhcmF0b3IgaXMgbm90XG4gICBmb3VuZCwgcmV0dXJuIGEgMy10dXBsZSBjb250YWluaW5nIHRoZSBzdHJpbmcgaXRzZWxmLCBmb2xsb3dlZCBieVxuICAgdHdvIGVtcHR5IHN0cmluZ3MuXG5cbnN0ci5yZXBsYWNlKG9sZCwgbmV3WywgY291bnRdKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2l0aCBhbGwgb2NjdXJyZW5jZXMgb2Ygc3Vic3RyaW5nICpvbGQqXG4gICByZXBsYWNlZCBieSAqbmV3Ki4gIElmIHRoZSBvcHRpb25hbCBhcmd1bWVudCAqY291bnQqIGlzIGdpdmVuLCBvbmx5XG4gICB0aGUgZmlyc3QgKmNvdW50KiBvY2N1cnJlbmNlcyBhcmUgcmVwbGFjZWQuXG5cbnN0ci5yZmluZChzdWJbLCBzdGFydFssIGVuZF1dKVxuXG4gICBSZXR1cm4gdGhlIGhpZ2hlc3QgaW5kZXggaW4gdGhlIHN0cmluZyB3aGVyZSBzdWJzdHJpbmcgKnN1YiogaXNcbiAgIGZvdW5kLCBzdWNoIHRoYXQgKnN1YiogaXMgY29udGFpbmVkIHdpdGhpbiAic1tzdGFydDplbmRdIi5cbiAgIE9wdGlvbmFsIGFyZ3VtZW50cyAqc3RhcnQqIGFuZCAqZW5kKiBhcmUgaW50ZXJwcmV0ZWQgYXMgaW4gc2xpY2VcbiAgIG5vdGF0aW9uLiAgUmV0dXJuICItMSIgb24gZmFpbHVyZS5cblxuc3RyLnJpbmRleChzdWJbLCBzdGFydFssIGVuZF1dKVxuXG4gICBMaWtlICJyZmluZCgpIiBidXQgcmFpc2VzICJWYWx1ZUVycm9yIiB3aGVuIHRoZSBzdWJzdHJpbmcgKnN1YiogaXNcbiAgIG5vdCBmb3VuZC5cblxuc3RyLnJqdXN0KHdpZHRoWywgZmlsbGNoYXJdKVxuXG4gICBSZXR1cm4gdGhlIHN0cmluZyByaWdodCBqdXN0aWZpZWQgaW4gYSBzdHJpbmcgb2YgbGVuZ3RoICp3aWR0aCouXG4gICBQYWRkaW5nIGlzIGRvbmUgdXNpbmcgdGhlIHNwZWNpZmllZCAqZmlsbGNoYXIqIChkZWZhdWx0IGlzIGFcbiAgIHNwYWNlKS4gVGhlIG9yaWdpbmFsIHN0cmluZyBpcyByZXR1cm5lZCBpZiAqd2lkdGgqIGlzIGxlc3MgdGhhbiBvclxuICAgZXF1YWwgdG8gImxlbihzKSIuXG5cbnN0ci5ycGFydGl0aW9uKHNlcClcblxuICAgU3BsaXQgdGhlIHN0cmluZyBhdCB0aGUgbGFzdCBvY2N1cnJlbmNlIG9mICpzZXAqLCBhbmQgcmV0dXJuIGFcbiAgIDMtdHVwbGUgY29udGFpbmluZyB0aGUgcGFydCBiZWZvcmUgdGhlIHNlcGFyYXRvciwgdGhlIHNlcGFyYXRvclxuICAgaXRzZWxmLCBhbmQgdGhlIHBhcnQgYWZ0ZXIgdGhlIHNlcGFyYXRvci4gIElmIHRoZSBzZXBhcmF0b3IgaXMgbm90XG4gICBmb3VuZCwgcmV0dXJuIGEgMy10dXBsZSBjb250YWluaW5nIHR3byBlbXB0eSBzdHJpbmdzLCBmb2xsb3dlZCBieVxuICAgdGhlIHN0cmluZyBpdHNlbGYuXG5cbnN0ci5yc3BsaXQoc2VwPU5vbmUsIG1heHNwbGl0PS0xKVxuXG4gICBSZXR1cm4gYSBsaXN0IG9mIHRoZSB3b3JkcyBpbiB0aGUgc3RyaW5nLCB1c2luZyAqc2VwKiBhcyB0aGVcbiAgIGRlbGltaXRlciBzdHJpbmcuIElmICptYXhzcGxpdCogaXMgZ2l2ZW4sIGF0IG1vc3QgKm1heHNwbGl0KiBzcGxpdHNcbiAgIGFyZSBkb25lLCB0aGUgKnJpZ2h0bW9zdCogb25lcy4gIElmICpzZXAqIGlzIG5vdCBzcGVjaWZpZWQgb3JcbiAgICJOb25lIiwgYW55IHdoaXRlc3BhY2Ugc3RyaW5nIGlzIGEgc2VwYXJhdG9yLiAgRXhjZXB0IGZvciBzcGxpdHRpbmdcbiAgIGZyb20gdGhlIHJpZ2h0LCAicnNwbGl0KCkiIGJlaGF2ZXMgbGlrZSAic3BsaXQoKSIgd2hpY2ggaXNcbiAgIGRlc2NyaWJlZCBpbiBkZXRhaWwgYmVsb3cuXG5cbnN0ci5yc3RyaXAoW2NoYXJzXSlcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHdpdGggdHJhaWxpbmcgY2hhcmFjdGVycyByZW1vdmVkLiAgVGhlXG4gICAqY2hhcnMqIGFyZ3VtZW50IGlzIGEgc3RyaW5nIHNwZWNpZnlpbmcgdGhlIHNldCBvZiBjaGFyYWN0ZXJzIHRvIGJlXG4gICByZW1vdmVkLiAgSWYgb21pdHRlZCBvciAiTm9uZSIsIHRoZSAqY2hhcnMqIGFyZ3VtZW50IGRlZmF1bHRzIHRvXG4gICByZW1vdmluZyB3aGl0ZXNwYWNlLiAgVGhlICpjaGFycyogYXJndW1lbnQgaXMgbm90IGEgc3VmZml4OyByYXRoZXIsXG4gICBhbGwgY29tYmluYXRpb25zIG9mIGl0cyB2YWx1ZXMgYXJlIHN0cmlwcGVkOlxuXG4gICA+Pj4gXCcgICBzcGFjaW91cyAgIFwnLnJzdHJpcCgpXG4gICBcJyAgIHNwYWNpb3VzXCdcbiAgID4+PiBcJ21pc3Npc3NpcHBpXCcucnN0cmlwKFwnaXB6XCcpXG4gICBcJ21pc3Npc3NcJ1xuXG5zdHIuc3BsaXQoc2VwPU5vbmUsIG1heHNwbGl0PS0xKVxuXG4gICBSZXR1cm4gYSBsaXN0IG9mIHRoZSB3b3JkcyBpbiB0aGUgc3RyaW5nLCB1c2luZyAqc2VwKiBhcyB0aGVcbiAgIGRlbGltaXRlciBzdHJpbmcuICBJZiAqbWF4c3BsaXQqIGlzIGdpdmVuLCBhdCBtb3N0ICptYXhzcGxpdCpcbiAgIHNwbGl0cyBhcmUgZG9uZSAodGh1cywgdGhlIGxpc3Qgd2lsbCBoYXZlIGF0IG1vc3QgIm1heHNwbGl0KzEiXG4gICBlbGVtZW50cykuICBJZiAqbWF4c3BsaXQqIGlzIG5vdCBzcGVjaWZpZWQgb3IgIi0xIiwgdGhlbiB0aGVyZSBpc1xuICAgbm8gbGltaXQgb24gdGhlIG51bWJlciBvZiBzcGxpdHMgKGFsbCBwb3NzaWJsZSBzcGxpdHMgYXJlIG1hZGUpLlxuXG4gICBJZiAqc2VwKiBpcyBnaXZlbiwgY29uc2VjdXRpdmUgZGVsaW1pdGVycyBhcmUgbm90IGdyb3VwZWQgdG9nZXRoZXJcbiAgIGFuZCBhcmUgZGVlbWVkIHRvIGRlbGltaXQgZW1wdHkgc3RyaW5ncyAoZm9yIGV4YW1wbGUsXG4gICAiXCcxLCwyXCcuc3BsaXQoXCcsXCcpIiByZXR1cm5zICJbXCcxXCcsIFwnXCcsIFwnMlwnXSIpLiAgVGhlICpzZXAqIGFyZ3VtZW50XG4gICBtYXkgY29uc2lzdCBvZiBtdWx0aXBsZSBjaGFyYWN0ZXJzIChmb3IgZXhhbXBsZSxcbiAgICJcJzE8PjI8PjNcJy5zcGxpdChcJzw+XCcpIiByZXR1cm5zICJbXCcxXCcsIFwnMlwnLCBcJzNcJ10iKS4gU3BsaXR0aW5nIGFuXG4gICBlbXB0eSBzdHJpbmcgd2l0aCBhIHNwZWNpZmllZCBzZXBhcmF0b3IgcmV0dXJucyAiW1wnXCddIi5cblxuICAgSWYgKnNlcCogaXMgbm90IHNwZWNpZmllZCBvciBpcyAiTm9uZSIsIGEgZGlmZmVyZW50IHNwbGl0dGluZ1xuICAgYWxnb3JpdGhtIGlzIGFwcGxpZWQ6IHJ1bnMgb2YgY29uc2VjdXRpdmUgd2hpdGVzcGFjZSBhcmUgcmVnYXJkZWRcbiAgIGFzIGEgc2luZ2xlIHNlcGFyYXRvciwgYW5kIHRoZSByZXN1bHQgd2lsbCBjb250YWluIG5vIGVtcHR5IHN0cmluZ3NcbiAgIGF0IHRoZSBzdGFydCBvciBlbmQgaWYgdGhlIHN0cmluZyBoYXMgbGVhZGluZyBvciB0cmFpbGluZ1xuICAgd2hpdGVzcGFjZS4gIENvbnNlcXVlbnRseSwgc3BsaXR0aW5nIGFuIGVtcHR5IHN0cmluZyBvciBhIHN0cmluZ1xuICAgY29uc2lzdGluZyBvZiBqdXN0IHdoaXRlc3BhY2Ugd2l0aCBhICJOb25lIiBzZXBhcmF0b3IgcmV0dXJucyAiW10iLlxuXG4gICBGb3IgZXhhbXBsZSwgIlwnIDEgIDIgICAzICBcJy5zcGxpdCgpIiByZXR1cm5zICJbXCcxXCcsIFwnMlwnLCBcJzNcJ10iLCBhbmRcbiAgICJcJyAgMSAgMiAgIDMgIFwnLnNwbGl0KE5vbmUsIDEpIiByZXR1cm5zICJbXCcxXCcsIFwnMiAgIDMgIFwnXSIuXG5cbnN0ci5zcGxpdGxpbmVzKFtrZWVwZW5kc10pXG5cbiAgIFJldHVybiBhIGxpc3Qgb2YgdGhlIGxpbmVzIGluIHRoZSBzdHJpbmcsIGJyZWFraW5nIGF0IGxpbmVcbiAgIGJvdW5kYXJpZXMuIFRoaXMgbWV0aG9kIHVzZXMgdGhlICp1bml2ZXJzYWwgbmV3bGluZXMqIGFwcHJvYWNoIHRvXG4gICBzcGxpdHRpbmcgbGluZXMuIExpbmUgYnJlYWtzIGFyZSBub3QgaW5jbHVkZWQgaW4gdGhlIHJlc3VsdGluZyBsaXN0XG4gICB1bmxlc3MgKmtlZXBlbmRzKiBpcyBnaXZlbiBhbmQgdHJ1ZS5cblxuICAgRm9yIGV4YW1wbGUsICJcJ2FiIGNcXG5cXG5kZSBmZ1xccmtsXFxyXFxuXCcuc3BsaXRsaW5lcygpIiByZXR1cm5zICJbXCdhYlxuICAgY1wnLCBcJ1wnLCBcJ2RlIGZnXCcsIFwna2xcJ10iLCB3aGlsZSB0aGUgc2FtZSBjYWxsIHdpdGhcbiAgICJzcGxpdGxpbmVzKFRydWUpIiByZXR1cm5zICJbXCdhYiBjXFxuXCcsIFwnXFxuXCcsIFwnZGUgZmdcXHJcJywgXCdrbFxcclxcblwnXSIuXG5cbiAgIFVubGlrZSAic3BsaXQoKSIgd2hlbiBhIGRlbGltaXRlciBzdHJpbmcgKnNlcCogaXMgZ2l2ZW4sIHRoaXNcbiAgIG1ldGhvZCByZXR1cm5zIGFuIGVtcHR5IGxpc3QgZm9yIHRoZSBlbXB0eSBzdHJpbmcsIGFuZCBhIHRlcm1pbmFsXG4gICBsaW5lIGJyZWFrIGRvZXMgbm90IHJlc3VsdCBpbiBhbiBleHRyYSBsaW5lLlxuXG5zdHIuc3RhcnRzd2l0aChwcmVmaXhbLCBzdGFydFssIGVuZF1dKVxuXG4gICBSZXR1cm4gIlRydWUiIGlmIHN0cmluZyBzdGFydHMgd2l0aCB0aGUgKnByZWZpeCosIG90aGVyd2lzZSByZXR1cm5cbiAgICJGYWxzZSIuICpwcmVmaXgqIGNhbiBhbHNvIGJlIGEgdHVwbGUgb2YgcHJlZml4ZXMgdG8gbG9vayBmb3IuXG4gICBXaXRoIG9wdGlvbmFsICpzdGFydCosIHRlc3Qgc3RyaW5nIGJlZ2lubmluZyBhdCB0aGF0IHBvc2l0aW9uLlxuICAgV2l0aCBvcHRpb25hbCAqZW5kKiwgc3RvcCBjb21wYXJpbmcgc3RyaW5nIGF0IHRoYXQgcG9zaXRpb24uXG5cbnN0ci5zdHJpcChbY2hhcnNdKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2l0aCB0aGUgbGVhZGluZyBhbmQgdHJhaWxpbmdcbiAgIGNoYXJhY3RlcnMgcmVtb3ZlZC4gVGhlICpjaGFycyogYXJndW1lbnQgaXMgYSBzdHJpbmcgc3BlY2lmeWluZyB0aGVcbiAgIHNldCBvZiBjaGFyYWN0ZXJzIHRvIGJlIHJlbW92ZWQuIElmIG9taXR0ZWQgb3IgIk5vbmUiLCB0aGUgKmNoYXJzKlxuICAgYXJndW1lbnQgZGVmYXVsdHMgdG8gcmVtb3Zpbmcgd2hpdGVzcGFjZS4gVGhlICpjaGFycyogYXJndW1lbnQgaXNcbiAgIG5vdCBhIHByZWZpeCBvciBzdWZmaXg7IHJhdGhlciwgYWxsIGNvbWJpbmF0aW9ucyBvZiBpdHMgdmFsdWVzIGFyZVxuICAgc3RyaXBwZWQ6XG5cbiAgID4+PiBcJyAgIHNwYWNpb3VzICAgXCcuc3RyaXAoKVxuICAgXCdzcGFjaW91c1wnXG4gICA+Pj4gXCd3d3cuZXhhbXBsZS5jb21cJy5zdHJpcChcJ2Ntb3d6LlwnKVxuICAgXCdleGFtcGxlXCdcblxuc3RyLnN3YXBjYXNlKClcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHdpdGggdXBwZXJjYXNlIGNoYXJhY3RlcnMgY29udmVydGVkIHRvXG4gICBsb3dlcmNhc2UgYW5kIHZpY2UgdmVyc2EuIE5vdGUgdGhhdCBpdCBpcyBub3QgbmVjZXNzYXJpbHkgdHJ1ZSB0aGF0XG4gICAicy5zd2FwY2FzZSgpLnN3YXBjYXNlKCkgPT0gcyIuXG5cbnN0ci50aXRsZSgpXG5cbiAgIFJldHVybiBhIHRpdGxlY2FzZWQgdmVyc2lvbiBvZiB0aGUgc3RyaW5nIHdoZXJlIHdvcmRzIHN0YXJ0IHdpdGggYW5cbiAgIHVwcGVyY2FzZSBjaGFyYWN0ZXIgYW5kIHRoZSByZW1haW5pbmcgY2hhcmFjdGVycyBhcmUgbG93ZXJjYXNlLlxuXG4gICBUaGUgYWxnb3JpdGhtIHVzZXMgYSBzaW1wbGUgbGFuZ3VhZ2UtaW5kZXBlbmRlbnQgZGVmaW5pdGlvbiBvZiBhXG4gICB3b3JkIGFzIGdyb3VwcyBvZiBjb25zZWN1dGl2ZSBsZXR0ZXJzLiAgVGhlIGRlZmluaXRpb24gd29ya3MgaW5cbiAgIG1hbnkgY29udGV4dHMgYnV0IGl0IG1lYW5zIHRoYXQgYXBvc3Ryb3BoZXMgaW4gY29udHJhY3Rpb25zIGFuZFxuICAgcG9zc2Vzc2l2ZXMgZm9ybSB3b3JkIGJvdW5kYXJpZXMsIHdoaWNoIG1heSBub3QgYmUgdGhlIGRlc2lyZWRcbiAgIHJlc3VsdDpcblxuICAgICAgPj4+ICJ0aGV5XCdyZSBiaWxsXCdzIGZyaWVuZHMgZnJvbSB0aGUgVUsiLnRpdGxlKClcbiAgICAgICJUaGV5XCdSZSBCaWxsXCdTIEZyaWVuZHMgRnJvbSBUaGUgVWsiXG5cbiAgIEEgd29ya2Fyb3VuZCBmb3IgYXBvc3Ryb3BoZXMgY2FuIGJlIGNvbnN0cnVjdGVkIHVzaW5nIHJlZ3VsYXJcbiAgIGV4cHJlc3Npb25zOlxuXG4gICAgICA+Pj4gaW1wb3J0IHJlXG4gICAgICA+Pj4gZGVmIHRpdGxlY2FzZShzKTpcbiAgICAgIC4uLiAgICAgcmV0dXJuIHJlLnN1YihyIltBLVphLXpdKyhcJ1tBLVphLXpdKyk/IixcbiAgICAgIC4uLiAgICAgICAgICAgICAgICAgICBsYW1iZGEgbW86IG1vLmdyb3VwKDApWzBdLnVwcGVyKCkgK1xuICAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW8uZ3JvdXAoMClbMTpdLmxvd2VyKCksXG4gICAgICAuLi4gICAgICAgICAgICAgICAgICAgcylcbiAgICAgIC4uLlxuICAgICAgPj4+IHRpdGxlY2FzZSgidGhleVwncmUgYmlsbFwncyBmcmllbmRzLiIpXG4gICAgICAiVGhleVwncmUgQmlsbFwncyBGcmllbmRzLiJcblxuc3RyLnRyYW5zbGF0ZShtYXApXG5cbiAgIFJldHVybiBhIGNvcHkgb2YgdGhlICpzKiB3aGVyZSBhbGwgY2hhcmFjdGVycyBoYXZlIGJlZW4gbWFwcGVkXG4gICB0aHJvdWdoIHRoZSAqbWFwKiB3aGljaCBtdXN0IGJlIGEgZGljdGlvbmFyeSBvZiBVbmljb2RlIG9yZGluYWxzXG4gICAoaW50ZWdlcnMpIHRvIFVuaWNvZGUgb3JkaW5hbHMsIHN0cmluZ3Mgb3IgIk5vbmUiLiAgVW5tYXBwZWRcbiAgIGNoYXJhY3RlcnMgYXJlIGxlZnQgdW50b3VjaGVkLiBDaGFyYWN0ZXJzIG1hcHBlZCB0byAiTm9uZSIgYXJlXG4gICBkZWxldGVkLlxuXG4gICBZb3UgY2FuIHVzZSAic3RyLm1ha2V0cmFucygpIiB0byBjcmVhdGUgYSB0cmFuc2xhdGlvbiBtYXAgZnJvbVxuICAgY2hhcmFjdGVyLXRvLWNoYXJhY3RlciBtYXBwaW5ncyBpbiBkaWZmZXJlbnQgZm9ybWF0cy5cblxuICAgTm90ZTogQW4gZXZlbiBtb3JlIGZsZXhpYmxlIGFwcHJvYWNoIGlzIHRvIGNyZWF0ZSBhIGN1c3RvbVxuICAgICBjaGFyYWN0ZXIgbWFwcGluZyBjb2RlYyB1c2luZyB0aGUgImNvZGVjcyIgbW9kdWxlIChzZWVcbiAgICAgImVuY29kaW5ncy5jcDEyNTEiIGZvciBhbiBleGFtcGxlKS5cblxuc3RyLnVwcGVyKClcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHdpdGggYWxsIHRoZSBjYXNlZCBjaGFyYWN0ZXJzIFs0XVxuICAgY29udmVydGVkIHRvIHVwcGVyY2FzZS4gIE5vdGUgdGhhdCAic3RyLnVwcGVyKCkuaXN1cHBlcigpIiBtaWdodCBiZVxuICAgIkZhbHNlIiBpZiAicyIgY29udGFpbnMgdW5jYXNlZCBjaGFyYWN0ZXJzIG9yIGlmIHRoZSBVbmljb2RlXG4gICBjYXRlZ29yeSBvZiB0aGUgcmVzdWx0aW5nIGNoYXJhY3RlcihzKSBpcyBub3QgIkx1IiAoTGV0dGVyLFxuICAgdXBwZXJjYXNlKSwgYnV0IGUuZy4gIkx0IiAoTGV0dGVyLCB0aXRsZWNhc2UpLlxuXG4gICBUaGUgdXBwZXJjYXNpbmcgYWxnb3JpdGhtIHVzZWQgaXMgZGVzY3JpYmVkIGluIHNlY3Rpb24gMy4xMyBvZiB0aGVcbiAgIFVuaWNvZGUgU3RhbmRhcmQuXG5cbnN0ci56ZmlsbCh3aWR0aClcblxuICAgUmV0dXJuIHRoZSBudW1lcmljIHN0cmluZyBsZWZ0IGZpbGxlZCB3aXRoIHplcm9zIGluIGEgc3RyaW5nIG9mXG4gICBsZW5ndGggKndpZHRoKi4gIEEgc2lnbiBwcmVmaXggaXMgaGFuZGxlZCBjb3JyZWN0bHkuICBUaGUgb3JpZ2luYWxcbiAgIHN0cmluZyBpcyByZXR1cm5lZCBpZiAqd2lkdGgqIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byAibGVuKHMpIi5cbicsCi0gJ3N0cmluZ3MnOiAnXG5TdHJpbmcgYW5kIEJ5dGVzIGxpdGVyYWxzXG4qKioqKioqKioqKioqKioqKioqKioqKioqXG5cblN0cmluZyBsaXRlcmFscyBhcmUgZGVzY3JpYmVkIGJ5IHRoZSBmb2xsb3dpbmcgbGV4aWNhbCBkZWZpbml0aW9uczpcblxuICAgc3RyaW5nbGl0ZXJhbCAgIDo6PSBbc3RyaW5ncHJlZml4XShzaG9ydHN0cmluZyB8IGxvbmdzdHJpbmcpXG4gICBzdHJpbmdwcmVmaXggICAgOjo9ICJyIiB8ICJ1IiB8ICJSIiB8ICJVIlxuICAgc2hvcnRzdHJpbmcgICAgIDo6PSAiXCciIHNob3J0c3RyaW5naXRlbSogIlwnIiB8IFwnIlwnIHNob3J0c3RyaW5naXRlbSogXCciXCdcbiAgIGxvbmdzdHJpbmcgICAgICA6Oj0gIlwnXCdcJyIgbG9uZ3N0cmluZ2l0ZW0qICJcJ1wnXCciIHwgXCciIiJcJyBsb25nc3RyaW5naXRlbSogXCciIiJcJ1xuICAgc2hvcnRzdHJpbmdpdGVtIDo6PSBzaG9ydHN0cmluZ2NoYXIgfCBzdHJpbmdlc2NhcGVzZXFcbiAgIGxvbmdzdHJpbmdpdGVtICA6Oj0gbG9uZ3N0cmluZ2NoYXIgfCBzdHJpbmdlc2NhcGVzZXFcbiAgIHNob3J0c3RyaW5nY2hhciA6Oj0gPGFueSBzb3VyY2UgY2hhcmFjdGVyIGV4Y2VwdCAiXFwiIG9yIG5ld2xpbmUgb3IgdGhlIHF1b3RlPlxuICAgbG9uZ3N0cmluZ2NoYXIgIDo6PSA8YW55IHNvdXJjZSBjaGFyYWN0ZXIgZXhjZXB0ICJcXCI+XG4gICBzdHJpbmdlc2NhcGVzZXEgOjo9ICJcXCIgPGFueSBzb3VyY2UgY2hhcmFjdGVyPlxuXG4gICBieXRlc2xpdGVyYWwgICA6Oj0gYnl0ZXNwcmVmaXgoc2hvcnRieXRlcyB8IGxvbmdieXRlcylcbiAgIGJ5dGVzcHJlZml4ICAgIDo6PSAiYiIgfCAiQiIgfCAiYnIiIHwgIkJyIiB8ICJiUiIgfCAiQlIiIHwgInJiIiB8ICJyQiIgfCAiUmIiIHwgIlJCIlxuICAgc2hvcnRieXRlcyAgICAgOjo9ICJcJyIgc2hvcnRieXRlc2l0ZW0qICJcJyIgfCBcJyJcJyBzaG9ydGJ5dGVzaXRlbSogXCciXCdcbiAgIGxvbmdieXRlcyAgICAgIDo6PSAiXCdcJ1wnIiBsb25nYnl0ZXNpdGVtKiAiXCdcJ1wnIiB8IFwnIiIiXCcgbG9uZ2J5dGVzaXRlbSogXCciIiJcJ1xuICAgc2hvcnRieXRlc2l0ZW0gOjo9IHNob3J0Ynl0ZXNjaGFyIHwgYnl0ZXNlc2NhcGVzZXFcbiAgIGxvbmdieXRlc2l0ZW0gIDo6PSBsb25nYnl0ZXNjaGFyIHwgYnl0ZXNlc2NhcGVzZXFcbiAgIHNob3J0Ynl0ZXNjaGFyIDo6PSA8YW55IEFTQ0lJIGNoYXJhY3RlciBleGNlcHQgIlxcIiBvciBuZXdsaW5lIG9yIHRoZSBxdW90ZT5cbiAgIGxvbmdieXRlc2NoYXIgIDo6PSA8YW55IEFTQ0lJIGNoYXJhY3RlciBleGNlcHQgIlxcIj5cbiAgIGJ5dGVzZXNjYXBlc2VxIDo6PSAiXFwiIDxhbnkgQVNDSUkgY2hhcmFjdGVyPlxuXG5PbmUgc3ludGFjdGljIHJlc3RyaWN0aW9uIG5vdCBpbmRpY2F0ZWQgYnkgdGhlc2UgcHJvZHVjdGlvbnMgaXMgdGhhdFxud2hpdGVzcGFjZSBpcyBub3QgYWxsb3dlZCBiZXR3ZWVuIHRoZSAic3RyaW5ncHJlZml4IiBvciAiYnl0ZXNwcmVmaXgiXG5hbmQgdGhlIHJlc3Qgb2YgdGhlIGxpdGVyYWwuIFRoZSBzb3VyY2UgY2hhcmFjdGVyIHNldCBpcyBkZWZpbmVkIGJ5XG50aGUgZW5jb2RpbmcgZGVjbGFyYXRpb247IGl0IGlzIFVURi04IGlmIG5vIGVuY29kaW5nIGRlY2xhcmF0aW9uIGlzXG5naXZlbiBpbiB0aGUgc291cmNlIGZpbGU7IHNlZSBzZWN0aW9uICpFbmNvZGluZyBkZWNsYXJhdGlvbnMqLlxuXG5JbiBwbGFpbiBFbmdsaXNoOiBCb3RoIHR5cGVzIG9mIGxpdGVyYWxzIGNhbiBiZSBlbmNsb3NlZCBpbiBtYXRjaGluZ1xuc2luZ2xlIHF1b3RlcyAoIlwnIikgb3IgZG91YmxlIHF1b3RlcyAoIiIiKS4gIFRoZXkgY2FuIGFsc28gYmUgZW5jbG9zZWRcbmluIG1hdGNoaW5nIGdyb3VwcyBvZiB0aHJlZSBzaW5nbGUgb3IgZG91YmxlIHF1b3RlcyAodGhlc2UgYXJlXG5nZW5lcmFsbHkgcmVmZXJyZWQgdG8gYXMgKnRyaXBsZS1xdW90ZWQgc3RyaW5ncyopLiAgVGhlIGJhY2tzbGFzaFxuKCJcXCIpIGNoYXJhY3RlciBpcyB1c2VkIHRvIGVzY2FwZSBjaGFyYWN0ZXJzIHRoYXQgb3RoZXJ3aXNlIGhhdmUgYVxuc3BlY2lhbCBtZWFuaW5nLCBzdWNoIGFzIG5ld2xpbmUsIGJhY2tzbGFzaCBpdHNlbGYsIG9yIHRoZSBxdW90ZVxuY2hhcmFjdGVyLlxuXG5CeXRlcyBsaXRlcmFscyBhcmUgYWx3YXlzIHByZWZpeGVkIHdpdGggIlwnYlwnIiBvciAiXCdCXCciOyB0aGV5IHByb2R1Y2VcbmFuIGluc3RhbmNlIG9mIHRoZSAiYnl0ZXMiIHR5cGUgaW5zdGVhZCBvZiB0aGUgInN0ciIgdHlwZS4gIFRoZXkgbWF5XG5vbmx5IGNvbnRhaW4gQVNDSUkgY2hhcmFjdGVyczsgYnl0ZXMgd2l0aCBhIG51bWVyaWMgdmFsdWUgb2YgMTI4IG9yXG5ncmVhdGVyIG11c3QgYmUgZXhwcmVzc2VkIHdpdGggZXNjYXBlcy5cblxuQXMgb2YgUHl0aG9uIDMuMyBpdCBpcyBwb3NzaWJsZSBhZ2FpbiB0byBwcmVmaXggdW5pY29kZSBzdHJpbmdzIHdpdGggYVxuInUiIHByZWZpeCB0byBzaW1wbGlmeSBtYWludGVuYW5jZSBvZiBkdWFsIDIueCBhbmQgMy54IGNvZGViYXNlcy5cblxuQm90aCBzdHJpbmcgYW5kIGJ5dGVzIGxpdGVyYWxzIG1heSBvcHRpb25hbGx5IGJlIHByZWZpeGVkIHdpdGggYVxubGV0dGVyICJcJ3JcJyIgb3IgIlwnUlwnIjsgc3VjaCBzdHJpbmdzIGFyZSBjYWxsZWQgKnJhdyBzdHJpbmdzKiBhbmQgdHJlYXRcbmJhY2tzbGFzaGVzIGFzIGxpdGVyYWwgY2hhcmFjdGVycy4gIEFzIGEgcmVzdWx0LCBpbiBzdHJpbmcgbGl0ZXJhbHMsXG4iXCdcXFVcJyIgYW5kICJcJ1xcdVwnIiBlc2NhcGVzIGluIHJhdyBzdHJpbmdzIGFyZSBub3QgdHJlYXRlZCBzcGVjaWFsbHkuXG5HaXZlbiB0aGF0IFB5dGhvbiAyLnhcJ3MgcmF3IHVuaWNvZGUgbGl0ZXJhbHMgYmVoYXZlIGRpZmZlcmVudGx5IHRoYW5cblB5dGhvbiAzLnhcJ3MgdGhlICJcJ3VyXCciIHN5bnRheCBpcyBub3Qgc3VwcG9ydGVkLlxuXG4gICBOZXcgaW4gdmVyc2lvbiAzLjM6IFRoZSAiXCdyYlwnIiBwcmVmaXggb2YgcmF3IGJ5dGVzIGxpdGVyYWxzIGhhc1xuICAgYmVlbiBhZGRlZCBhcyBhIHN5bm9ueW0gb2YgIlwnYnJcJyIuXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDMuMzogU3VwcG9ydCBmb3IgdGhlIHVuaWNvZGUgbGVnYWN5IGxpdGVyYWxcbiAgICgidVwndmFsdWVcJyIpIHdhcyByZWludHJvZHVjZWQgdG8gc2ltcGxpZnkgdGhlIG1haW50ZW5hbmNlIG9mIGR1YWxcbiAgIFB5dGhvbiAyLnggYW5kIDMueCBjb2RlYmFzZXMuIFNlZSAqKlBFUCA0MTQqKiBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cblxuSW4gdHJpcGxlLXF1b3RlZCBzdHJpbmdzLCB1bmVzY2FwZWQgbmV3bGluZXMgYW5kIHF1b3RlcyBhcmUgYWxsb3dlZFxuKGFuZCBhcmUgcmV0YWluZWQpLCBleGNlcHQgdGhhdCB0aHJlZSB1bmVzY2FwZWQgcXVvdGVzIGluIGEgcm93XG50ZXJtaW5hdGUgdGhlIHN0cmluZy4gIChBICJxdW90ZSIgaXMgdGhlIGNoYXJhY3RlciB1c2VkIHRvIG9wZW4gdGhlXG5zdHJpbmcsIGkuZS4gZWl0aGVyICJcJyIgb3IgIiIiLilcblxuVW5sZXNzIGFuICJcJ3JcJyIgb3IgIlwnUlwnIiBwcmVmaXggaXMgcHJlc2VudCwgZXNjYXBlIHNlcXVlbmNlcyBpblxuc3RyaW5ncyBhcmUgaW50ZXJwcmV0ZWQgYWNjb3JkaW5nIHRvIHJ1bGVzIHNpbWlsYXIgdG8gdGhvc2UgdXNlZCBieVxuU3RhbmRhcmQgQy4gIFRoZSByZWNvZ25pemVkIGVzY2FwZSBzZXF1ZW5jZXMgYXJlOlxuXG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58IEVzY2FwZSBTZXF1ZW5jZSAgIHwgTWVhbmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTm90ZXMgICB8XG4rPT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT0rXG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58ICJcXG9vbyIgICAgICAgICAgICB8IENoYXJhY3RlciB3aXRoIG9jdGFsIHZhbHVlICpvb28qICB8ICgxLDMpICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCAiXFx4aGgiICAgICAgICAgICAgfCBDaGFyYWN0ZXIgd2l0aCBoZXggdmFsdWUgKmhoKiAgICAgfCAoMiwzKSAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcblxuRXNjYXBlIHNlcXVlbmNlcyBvbmx5IHJlY29nbml6ZWQgaW4gc3RyaW5nIGxpdGVyYWxzIGFyZTpcblxuKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCBFc2NhcGUgU2VxdWVuY2UgICB8IE1lYW5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE5vdGVzICAgfFxuKz09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09K1xufCAiXFxOe25hbWV9IiAgICAgICAgfCBDaGFyYWN0ZXIgbmFtZWQgKm5hbWUqIGluIHRoZSAgICAgfCAoNCkgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgIlxcdXh4eHgiICAgICAgICAgIHwgQ2hhcmFjdGVyIHdpdGggMTYtYml0IGhleCB2YWx1ZSAgIHwgKDUpICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58ICJcXFV4eHh4eHh4eCIgICAgICB8IENoYXJhY3RlciB3aXRoIDMyLWJpdCBoZXggdmFsdWUgICB8ICg2KSAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xuXG5Ob3RlczpcblxuMS4gQXMgaW4gU3RhbmRhcmQgQywgdXAgdG8gdGhyZWUgb2N0YWwgZGlnaXRzIGFyZSBhY2NlcHRlZC5cblxuMi4gVW5saWtlIGluIFN0YW5kYXJkIEMsIGV4YWN0bHkgdHdvIGhleCBkaWdpdHMgYXJlIHJlcXVpcmVkLlxuXG4zLiBJbiBhIGJ5dGVzIGxpdGVyYWwsIGhleGFkZWNpbWFsIGFuZCBvY3RhbCBlc2NhcGVzIGRlbm90ZSB0aGVcbiAgIGJ5dGUgd2l0aCB0aGUgZ2l2ZW4gdmFsdWUuIEluIGEgc3RyaW5nIGxpdGVyYWwsIHRoZXNlIGVzY2FwZXNcbiAgIGRlbm90ZSBhIFVuaWNvZGUgY2hhcmFjdGVyIHdpdGggdGhlIGdpdmVuIHZhbHVlLlxuXG40LiBDaGFuZ2VkIGluIHZlcnNpb24gMy4zOiBTdXBwb3J0IGZvciBuYW1lIGFsaWFzZXMgWzFdIGhhcyBiZWVuXG4gICBhZGRlZC5cblxuNS4gSW5kaXZpZHVhbCBjb2RlIHVuaXRzIHdoaWNoIGZvcm0gcGFydHMgb2YgYSBzdXJyb2dhdGUgcGFpciBjYW5cbiAgIGJlIGVuY29kZWQgdXNpbmcgdGhpcyBlc2NhcGUgc2VxdWVuY2UuICBFeGFjdGx5IGZvdXIgaGV4IGRpZ2l0cyBhcmVcbiAgIHJlcXVpcmVkLlxuXG42LiBBbnkgVW5pY29kZSBjaGFyYWN0ZXIgY2FuIGJlIGVuY29kZWQgdGhpcyB3YXkuICBFeGFjdGx5IGVpZ2h0XG4gICBoZXggZGlnaXRzIGFyZSByZXF1aXJlZC5cblxuVW5saWtlIFN0YW5kYXJkIEMsIGFsbCB1bnJlY29nbml6ZWQgZXNjYXBlIHNlcXVlbmNlcyBhcmUgbGVmdCBpbiB0aGVcbnN0cmluZyB1bmNoYW5nZWQsIGkuZS4sICp0aGUgYmFja3NsYXNoIGlzIGxlZnQgaW4gdGhlIHN0cmluZyouICAoVGhpc1xuYmVoYXZpb3IgaXMgdXNlZnVsIHdoZW4gZGVidWdnaW5nOiBpZiBhbiBlc2NhcGUgc2VxdWVuY2UgaXMgbWlzdHlwZWQsXG50aGUgcmVzdWx0aW5nIG91dHB1dCBpcyBtb3JlIGVhc2lseSByZWNvZ25pemVkIGFzIGJyb2tlbi4pICBJdCBpcyBhbHNvXG5pbXBvcnRhbnQgdG8gbm90ZSB0aGF0IHRoZSBlc2NhcGUgc2VxdWVuY2VzIG9ubHkgcmVjb2duaXplZCBpbiBzdHJpbmdcbmxpdGVyYWxzIGZhbGwgaW50byB0aGUgY2F0ZWdvcnkgb2YgdW5yZWNvZ25pemVkIGVzY2FwZXMgZm9yIGJ5dGVzXG5saXRlcmFscy5cblxuRXZlbiBpbiBhIHJhdyBzdHJpbmcsIHN0cmluZyBxdW90ZXMgY2FuIGJlIGVzY2FwZWQgd2l0aCBhIGJhY2tzbGFzaCxcbmJ1dCB0aGUgYmFja3NsYXNoIHJlbWFpbnMgaW4gdGhlIHN0cmluZzsgZm9yIGV4YW1wbGUsICJyIlxcIiIiIGlzIGFcbnZhbGlkIHN0cmluZyBsaXRlcmFsIGNvbnNpc3Rpbmcgb2YgdHdvIGNoYXJhY3RlcnM6IGEgYmFja3NsYXNoIGFuZCBhXG5kb3VibGUgcXVvdGU7ICJyIlxcIiIgaXMgbm90IGEgdmFsaWQgc3RyaW5nIGxpdGVyYWwgKGV2ZW4gYSByYXcgc3RyaW5nXG5jYW5ub3QgZW5kIGluIGFuIG9kZCBudW1iZXIgb2YgYmFja3NsYXNoZXMpLiAgU3BlY2lmaWNhbGx5LCAqYSByYXdcbnN0cmluZyBjYW5ub3QgZW5kIGluIGEgc2luZ2xlIGJhY2tzbGFzaCogKHNpbmNlIHRoZSBiYWNrc2xhc2ggd291bGRcbmVzY2FwZSB0aGUgZm9sbG93aW5nIHF1b3RlIGNoYXJhY3RlcikuICBOb3RlIGFsc28gdGhhdCBhIHNpbmdsZVxuYmFja3NsYXNoIGZvbGxvd2VkIGJ5IGEgbmV3bGluZSBpcyBpbnRlcnByZXRlZCBhcyB0aG9zZSB0d28gY2hhcmFjdGVyc1xuYXMgcGFydCBvZiB0aGUgc3RyaW5nLCAqbm90KiBhcyBhIGxpbmUgY29udGludWF0aW9uLlxuJywKLSAnc3Vic2NyaXB0aW9ucyc6ICdcblN1YnNjcmlwdGlvbnNcbioqKioqKioqKioqKipcblxuQSBzdWJzY3JpcHRpb24gc2VsZWN0cyBhbiBpdGVtIG9mIGEgc2VxdWVuY2UgKHN0cmluZywgdHVwbGUgb3IgbGlzdClcbm9yIG1hcHBpbmcgKGRpY3Rpb25hcnkpIG9iamVjdDpcblxuICAgc3Vic2NyaXB0aW9uIDo6PSBwcmltYXJ5ICJbIiBleHByZXNzaW9uX2xpc3QgIl0iXG5cblRoZSBwcmltYXJ5IG11c3QgZXZhbHVhdGUgdG8gYW4gb2JqZWN0IHRoYXQgc3VwcG9ydHMgc3Vic2NyaXB0aW9uLFxuZS5nLiBhIGxpc3Qgb3IgZGljdGlvbmFyeS4gIFVzZXItZGVmaW5lZCBvYmplY3RzIGNhbiBzdXBwb3J0XG5zdWJzY3JpcHRpb24gYnkgZGVmaW5pbmcgYSAiX19nZXRpdGVtX18oKSIgbWV0aG9kLlxuXG5Gb3IgYnVpbHQtaW4gb2JqZWN0cywgdGhlcmUgYXJlIHR3byB0eXBlcyBvZiBvYmplY3RzIHRoYXQgc3VwcG9ydFxuc3Vic2NyaXB0aW9uOlxuXG5JZiB0aGUgcHJpbWFyeSBpcyBhIG1hcHBpbmcsIHRoZSBleHByZXNzaW9uIGxpc3QgbXVzdCBldmFsdWF0ZSB0byBhblxub2JqZWN0IHdob3NlIHZhbHVlIGlzIG9uZSBvZiB0aGUga2V5cyBvZiB0aGUgbWFwcGluZywgYW5kIHRoZVxuc3Vic2NyaXB0aW9uIHNlbGVjdHMgdGhlIHZhbHVlIGluIHRoZSBtYXBwaW5nIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhhdFxua2V5LiAgKFRoZSBleHByZXNzaW9uIGxpc3QgaXMgYSB0dXBsZSBleGNlcHQgaWYgaXQgaGFzIGV4YWN0bHkgb25lXG5pdGVtLilcblxuSWYgdGhlIHByaW1hcnkgaXMgYSBzZXF1ZW5jZSwgdGhlIGV4cHJlc3Npb24gKGxpc3QpIG11c3QgZXZhbHVhdGUgdG9cbmFuIGludGVnZXIgb3IgYSBzbGljZSAoYXMgZGlzY3Vzc2VkIGluIHRoZSBmb2xsb3dpbmcgc2VjdGlvbikuXG5cblRoZSBmb3JtYWwgc3ludGF4IG1ha2VzIG5vIHNwZWNpYWwgcHJvdmlzaW9uIGZvciBuZWdhdGl2ZSBpbmRpY2VzIGluXG5zZXF1ZW5jZXM7IGhvd2V2ZXIsIGJ1aWx0LWluIHNlcXVlbmNlcyBhbGwgcHJvdmlkZSBhICJfX2dldGl0ZW1fXygpIlxubWV0aG9kIHRoYXQgaW50ZXJwcmV0cyBuZWdhdGl2ZSBpbmRpY2VzIGJ5IGFkZGluZyB0aGUgbGVuZ3RoIG9mIHRoZVxuc2VxdWVuY2UgdG8gdGhlIGluZGV4IChzbyB0aGF0ICJ4Wy0xXSIgc2VsZWN0cyB0aGUgbGFzdCBpdGVtIG9mICJ4IikuXG5UaGUgcmVzdWx0aW5nIHZhbHVlIG11c3QgYmUgYSBub25uZWdhdGl2ZSBpbnRlZ2VyIGxlc3MgdGhhbiB0aGUgbnVtYmVyXG5vZiBpdGVtcyBpbiB0aGUgc2VxdWVuY2UsIGFuZCB0aGUgc3Vic2NyaXB0aW9uIHNlbGVjdHMgdGhlIGl0ZW0gd2hvc2VcbmluZGV4IGlzIHRoYXQgdmFsdWUgKGNvdW50aW5nIGZyb20gemVybykuIFNpbmNlIHRoZSBzdXBwb3J0IGZvclxubmVnYXRpdmUgaW5kaWNlcyBhbmQgc2xpY2luZyBvY2N1cnMgaW4gdGhlIG9iamVjdFwncyAiX19nZXRpdGVtX18oKSJcbm1ldGhvZCwgc3ViY2xhc3NlcyBvdmVycmlkaW5nIHRoaXMgbWV0aG9kIHdpbGwgbmVlZCB0byBleHBsaWNpdGx5IGFkZFxudGhhdCBzdXBwb3J0LlxuXG5BIHN0cmluZ1wncyBpdGVtcyBhcmUgY2hhcmFjdGVycy4gIEEgY2hhcmFjdGVyIGlzIG5vdCBhIHNlcGFyYXRlIGRhdGFcbnR5cGUgYnV0IGEgc3RyaW5nIG9mIGV4YWN0bHkgb25lIGNoYXJhY3Rlci5cbicsCi0gJ3RydXRoJzogJ1xuVHJ1dGggVmFsdWUgVGVzdGluZ1xuKioqKioqKioqKioqKioqKioqKlxuXG5Bbnkgb2JqZWN0IGNhbiBiZSB0ZXN0ZWQgZm9yIHRydXRoIHZhbHVlLCBmb3IgdXNlIGluIGFuICJpZiIgb3JcbiJ3aGlsZSIgY29uZGl0aW9uIG9yIGFzIG9wZXJhbmQgb2YgdGhlIEJvb2xlYW4gb3BlcmF0aW9ucyBiZWxvdy4gVGhlXG5mb2xsb3dpbmcgdmFsdWVzIGFyZSBjb25zaWRlcmVkIGZhbHNlOlxuXG4qICJOb25lIlxuXG4qICJGYWxzZSJcblxuKiB6ZXJvIG9mIGFueSBudW1lcmljIHR5cGUsIGZvciBleGFtcGxlLCAiMCIsICIwLjAiLCAiMGoiLlxuXG4qIGFueSBlbXB0eSBzZXF1ZW5jZSwgZm9yIGV4YW1wbGUsICJcJ1wnIiwgIigpIiwgIltdIi5cblxuKiBhbnkgZW1wdHkgbWFwcGluZywgZm9yIGV4YW1wbGUsICJ7fSIuXG5cbiogaW5zdGFuY2VzIG9mIHVzZXItZGVmaW5lZCBjbGFzc2VzLCBpZiB0aGUgY2xhc3MgZGVmaW5lcyBhXG4gICJfX2Jvb2xfXygpIiBvciAiX19sZW5fXygpIiBtZXRob2QsIHdoZW4gdGhhdCBtZXRob2QgcmV0dXJucyB0aGVcbiAgaW50ZWdlciB6ZXJvIG9yICJib29sIiB2YWx1ZSAiRmFsc2UiLiBbMV1cblxuQWxsIG90aGVyIHZhbHVlcyBhcmUgY29uc2lkZXJlZCB0cnVlIC0tLSBzbyBvYmplY3RzIG9mIG1hbnkgdHlwZXMgYXJlXG5hbHdheXMgdHJ1ZS5cblxuT3BlcmF0aW9ucyBhbmQgYnVpbHQtaW4gZnVuY3Rpb25zIHRoYXQgaGF2ZSBhIEJvb2xlYW4gcmVzdWx0IGFsd2F5c1xucmV0dXJuICIwIiBvciAiRmFsc2UiIGZvciBmYWxzZSBhbmQgIjEiIG9yICJUcnVlIiBmb3IgdHJ1ZSwgdW5sZXNzXG5vdGhlcndpc2Ugc3RhdGVkLiAoSW1wb3J0YW50IGV4Y2VwdGlvbjogdGhlIEJvb2xlYW4gb3BlcmF0aW9ucyAib3IiXG5hbmQgImFuZCIgYWx3YXlzIHJldHVybiBvbmUgb2YgdGhlaXIgb3BlcmFuZHMuKVxuJywKLSAndHJ5JzogJ1xuVGhlICJ0cnkiIHN0YXRlbWVudFxuKioqKioqKioqKioqKioqKioqKlxuXG5UaGUgInRyeSIgc3RhdGVtZW50IHNwZWNpZmllcyBleGNlcHRpb24gaGFuZGxlcnMgYW5kL29yIGNsZWFudXAgY29kZVxuZm9yIGEgZ3JvdXAgb2Ygc3RhdGVtZW50czpcblxuICAgdHJ5X3N0bXQgIDo6PSB0cnkxX3N0bXQgfCB0cnkyX3N0bXRcbiAgIHRyeTFfc3RtdCA6Oj0gInRyeSIgIjoiIHN1aXRlXG4gICAgICAgICAgICAgICAgICgiZXhjZXB0IiBbZXhwcmVzc2lvbiBbImFzIiB0YXJnZXRdXSAiOiIgc3VpdGUpK1xuICAgICAgICAgICAgICAgICBbImVsc2UiICI6IiBzdWl0ZV1cbiAgICAgICAgICAgICAgICAgWyJmaW5hbGx5IiAiOiIgc3VpdGVdXG4gICB0cnkyX3N0bXQgOjo9ICJ0cnkiICI6IiBzdWl0ZVxuICAgICAgICAgICAgICAgICAiZmluYWxseSIgIjoiIHN1aXRlXG5cblRoZSAiZXhjZXB0IiBjbGF1c2Uocykgc3BlY2lmeSBvbmUgb3IgbW9yZSBleGNlcHRpb24gaGFuZGxlcnMuIFdoZW4gbm9cbmV4Y2VwdGlvbiBvY2N1cnMgaW4gdGhlICJ0cnkiIGNsYXVzZSwgbm8gZXhjZXB0aW9uIGhhbmRsZXIgaXNcbmV4ZWN1dGVkLiBXaGVuIGFuIGV4Y2VwdGlvbiBvY2N1cnMgaW4gdGhlICJ0cnkiIHN1aXRlLCBhIHNlYXJjaCBmb3IgYW5cbmV4Y2VwdGlvbiBoYW5kbGVyIGlzIHN0YXJ0ZWQuICBUaGlzIHNlYXJjaCBpbnNwZWN0cyB0aGUgZXhjZXB0IGNsYXVzZXNcbmluIHR1cm4gdW50aWwgb25lIGlzIGZvdW5kIHRoYXQgbWF0Y2hlcyB0aGUgZXhjZXB0aW9uLiAgQW4gZXhwcmVzc2lvbi1cbmxlc3MgZXhjZXB0IGNsYXVzZSwgaWYgcHJlc2VudCwgbXVzdCBiZSBsYXN0OyBpdCBtYXRjaGVzIGFueVxuZXhjZXB0aW9uLiAgRm9yIGFuIGV4Y2VwdCBjbGF1c2Ugd2l0aCBhbiBleHByZXNzaW9uLCB0aGF0IGV4cHJlc3Npb25cbmlzIGV2YWx1YXRlZCwgYW5kIHRoZSBjbGF1c2UgbWF0Y2hlcyB0aGUgZXhjZXB0aW9uIGlmIHRoZSByZXN1bHRpbmdcbm9iamVjdCBpcyAiY29tcGF0aWJsZSIgd2l0aCB0aGUgZXhjZXB0aW9uLiAgQW4gb2JqZWN0IGlzIGNvbXBhdGlibGVcbndpdGggYW4gZXhjZXB0aW9uIGlmIGl0IGlzIHRoZSBjbGFzcyBvciBhIGJhc2UgY2xhc3Mgb2YgdGhlIGV4Y2VwdGlvblxub2JqZWN0IG9yIGEgdHVwbGUgY29udGFpbmluZyBhbiBpdGVtIGNvbXBhdGlibGUgd2l0aCB0aGUgZXhjZXB0aW9uLlxuXG5JZiBubyBleGNlcHQgY2xhdXNlIG1hdGNoZXMgdGhlIGV4Y2VwdGlvbiwgdGhlIHNlYXJjaCBmb3IgYW4gZXhjZXB0aW9uXG5oYW5kbGVyIGNvbnRpbnVlcyBpbiB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgb24gdGhlIGludm9jYXRpb24gc3RhY2suXG5bMV1cblxuSWYgdGhlIGV2YWx1YXRpb24gb2YgYW4gZXhwcmVzc2lvbiBpbiB0aGUgaGVhZGVyIG9mIGFuIGV4Y2VwdCBjbGF1c2VcbnJhaXNlcyBhbiBleGNlcHRpb24sIHRoZSBvcmlnaW5hbCBzZWFyY2ggZm9yIGEgaGFuZGxlciBpcyBjYW5jZWxlZCBhbmRcbmEgc2VhcmNoIHN0YXJ0cyBmb3IgdGhlIG5ldyBleGNlcHRpb24gaW4gdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIG9uXG50aGUgY2FsbCBzdGFjayAoaXQgaXMgdHJlYXRlZCBhcyBpZiB0aGUgZW50aXJlICJ0cnkiIHN0YXRlbWVudCByYWlzZWRcbnRoZSBleGNlcHRpb24pLlxuXG5XaGVuIGEgbWF0Y2hpbmcgZXhjZXB0IGNsYXVzZSBpcyBmb3VuZCwgdGhlIGV4Y2VwdGlvbiBpcyBhc3NpZ25lZCB0b1xudGhlIHRhcmdldCBzcGVjaWZpZWQgYWZ0ZXIgdGhlICJhcyIga2V5d29yZCBpbiB0aGF0IGV4Y2VwdCBjbGF1c2UsIGlmXG5wcmVzZW50LCBhbmQgdGhlIGV4Y2VwdCBjbGF1c2VcJ3Mgc3VpdGUgaXMgZXhlY3V0ZWQuICBBbGwgZXhjZXB0XG5jbGF1c2VzIG11c3QgaGF2ZSBhbiBleGVjdXRhYmxlIGJsb2NrLiAgV2hlbiB0aGUgZW5kIG9mIHRoaXMgYmxvY2sgaXNcbnJlYWNoZWQsIGV4ZWN1dGlvbiBjb250aW51ZXMgbm9ybWFsbHkgYWZ0ZXIgdGhlIGVudGlyZSB0cnkgc3RhdGVtZW50LlxuKFRoaXMgbWVhbnMgdGhhdCBpZiB0d28gbmVzdGVkIGhhbmRsZXJzIGV4aXN0IGZvciB0aGUgc2FtZSBleGNlcHRpb24sXG5hbmQgdGhlIGV4Y2VwdGlvbiBvY2N1cnMgaW4gdGhlIHRyeSBjbGF1c2Ugb2YgdGhlIGlubmVyIGhhbmRsZXIsIHRoZVxub3V0ZXIgaGFuZGxlciB3aWxsIG5vdCBoYW5kbGUgdGhlIGV4Y2VwdGlvbi4pXG5cbldoZW4gYW4gZXhjZXB0aW9uIGhhcyBiZWVuIGFzc2lnbmVkIHVzaW5nICJhcyB0YXJnZXQiLCBpdCBpcyBjbGVhcmVkXG5hdCB0aGUgZW5kIG9mIHRoZSBleGNlcHQgY2xhdXNlLiAgVGhpcyBpcyBhcyBpZlxuXG4gICBleGNlcHQgRSBhcyBOOlxuICAgICAgIGZvb1xuXG53YXMgdHJhbnNsYXRlZCB0b1xuXG4gICBleGNlcHQgRSBhcyBOOlxuICAgICAgIHRyeTpcbiAgICAgICAgICAgZm9vXG4gICAgICAgZmluYWxseTpcbiAgICAgICAgICAgZGVsIE5cblxuVGhpcyBtZWFucyB0aGUgZXhjZXB0aW9uIG11c3QgYmUgYXNzaWduZWQgdG8gYSBkaWZmZXJlbnQgbmFtZSB0byBiZVxuYWJsZSB0byByZWZlciB0byBpdCBhZnRlciB0aGUgZXhjZXB0IGNsYXVzZS4gIEV4Y2VwdGlvbnMgYXJlIGNsZWFyZWRcbmJlY2F1c2Ugd2l0aCB0aGUgdHJhY2ViYWNrIGF0dGFjaGVkIHRvIHRoZW0sIHRoZXkgZm9ybSBhIHJlZmVyZW5jZVxuY3ljbGUgd2l0aCB0aGUgc3RhY2sgZnJhbWUsIGtlZXBpbmcgYWxsIGxvY2FscyBpbiB0aGF0IGZyYW1lIGFsaXZlXG51bnRpbCB0aGUgbmV4dCBnYXJiYWdlIGNvbGxlY3Rpb24gb2NjdXJzLlxuXG5CZWZvcmUgYW4gZXhjZXB0IGNsYXVzZVwncyBzdWl0ZSBpcyBleGVjdXRlZCwgZGV0YWlscyBhYm91dCB0aGVcbmV4Y2VwdGlvbiBhcmUgc3RvcmVkIGluIHRoZSAic3lzIiBtb2R1bGUgYW5kIGNhbiBiZSBhY2Nlc3MgdmlhXG4ic3lzLmV4Y19pbmZvKCkiLiAic3lzLmV4Y19pbmZvKCkiIHJldHVybnMgYSAzLXR1cGxlIGNvbnNpc3Rpbmcgb2YgdGhlXG5leGNlcHRpb24gY2xhc3MsIHRoZSBleGNlcHRpb24gaW5zdGFuY2UgYW5kIGEgdHJhY2ViYWNrIG9iamVjdCAoc2VlXG5zZWN0aW9uICpUaGUgc3RhbmRhcmQgdHlwZSBoaWVyYXJjaHkqKSBpZGVudGlmeWluZyB0aGUgcG9pbnQgaW4gdGhlXG5wcm9ncmFtIHdoZXJlIHRoZSBleGNlcHRpb24gb2NjdXJyZWQuICAic3lzLmV4Y19pbmZvKCkiIHZhbHVlcyBhcmVcbnJlc3RvcmVkIHRvIHRoZWlyIHByZXZpb3VzIHZhbHVlcyAoYmVmb3JlIHRoZSBjYWxsKSB3aGVuIHJldHVybmluZ1xuZnJvbSBhIGZ1bmN0aW9uIHRoYXQgaGFuZGxlZCBhbiBleGNlcHRpb24uXG5cblRoZSBvcHRpb25hbCAiZWxzZSIgY2xhdXNlIGlzIGV4ZWN1dGVkIGlmIGFuZCB3aGVuIGNvbnRyb2wgZmxvd3Mgb2ZmXG50aGUgZW5kIG9mIHRoZSAidHJ5IiBjbGF1c2UuIFsyXSBFeGNlcHRpb25zIGluIHRoZSAiZWxzZSIgY2xhdXNlIGFyZVxubm90IGhhbmRsZWQgYnkgdGhlIHByZWNlZGluZyAiZXhjZXB0IiBjbGF1c2VzLlxuXG5JZiAiZmluYWxseSIgaXMgcHJlc2VudCwgaXQgc3BlY2lmaWVzIGEgXCdjbGVhbnVwXCcgaGFuZGxlci4gIFRoZSAidHJ5IlxuY2xhdXNlIGlzIGV4ZWN1dGVkLCBpbmNsdWRpbmcgYW55ICJleGNlcHQiIGFuZCAiZWxzZSIgY2xhdXNlcy4gIElmIGFuXG5leGNlcHRpb24gb2NjdXJzIGluIGFueSBvZiB0aGUgY2xhdXNlcyBhbmQgaXMgbm90IGhhbmRsZWQsIHRoZVxuZXhjZXB0aW9uIGlzIHRlbXBvcmFyaWx5IHNhdmVkLiBUaGUgImZpbmFsbHkiIGNsYXVzZSBpcyBleGVjdXRlZC4gIElmXG50aGVyZSBpcyBhIHNhdmVkIGV4Y2VwdGlvbiBpdCBpcyByZS1yYWlzZWQgYXQgdGhlIGVuZCBvZiB0aGUgImZpbmFsbHkiXG5jbGF1c2UuICBJZiB0aGUgImZpbmFsbHkiIGNsYXVzZSByYWlzZXMgYW5vdGhlciBleGNlcHRpb24sIHRoZSBzYXZlZFxuZXhjZXB0aW9uIGlzIHNldCBhcyB0aGUgY29udGV4dCBvZiB0aGUgbmV3IGV4Y2VwdGlvbi4gSWYgdGhlICJmaW5hbGx5IlxuY2xhdXNlIGV4ZWN1dGVzIGEgInJldHVybiIgb3IgImJyZWFrIiBzdGF0ZW1lbnQsIHRoZSBzYXZlZCBleGNlcHRpb25cbmlzIGRpc2NhcmRlZDpcblxuICAgZGVmIGYoKTpcbiAgICAgICB0cnk6XG4gICAgICAgICAgIDEvMFxuICAgICAgIGZpbmFsbHk6XG4gICAgICAgICAgIHJldHVybiA0MlxuXG4gICA+Pj4gZigpXG4gICA0MlxuXG5UaGUgZXhjZXB0aW9uIGluZm9ybWF0aW9uIGlzIG5vdCBhdmFpbGFibGUgdG8gdGhlIHByb2dyYW0gZHVyaW5nXG5leGVjdXRpb24gb2YgdGhlICJmaW5hbGx5IiBjbGF1c2UuXG5cbldoZW4gYSAicmV0dXJuIiwgImJyZWFrIiBvciAiY29udGludWUiIHN0YXRlbWVudCBpcyBleGVjdXRlZCBpbiB0aGVcbiJ0cnkiIHN1aXRlIG9mIGEgInRyeSIuLi4iZmluYWxseSIgc3RhdGVtZW50LCB0aGUgImZpbmFsbHkiIGNsYXVzZSBpc1xuYWxzbyBleGVjdXRlZCBcJ29uIHRoZSB3YXkgb3V0LlwnIEEgImNvbnRpbnVlIiBzdGF0ZW1lbnQgaXMgaWxsZWdhbCBpblxudGhlICJmaW5hbGx5IiBjbGF1c2UuIChUaGUgcmVhc29uIGlzIGEgcHJvYmxlbSB3aXRoIHRoZSBjdXJyZW50XG5pbXBsZW1lbnRhdGlvbiAtLS0gdGhpcyByZXN0cmljdGlvbiBtYXkgYmUgbGlmdGVkIGluIHRoZSBmdXR1cmUpLlxuXG5BZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9uIGV4Y2VwdGlvbnMgY2FuIGJlIGZvdW5kIGluIHNlY3Rpb25cbipFeGNlcHRpb25zKiwgYW5kIGluZm9ybWF0aW9uIG9uIHVzaW5nIHRoZSAicmFpc2UiIHN0YXRlbWVudCB0b1xuZ2VuZXJhdGUgZXhjZXB0aW9ucyBtYXkgYmUgZm91bmQgaW4gc2VjdGlvbiAqVGhlIHJhaXNlIHN0YXRlbWVudCouXG4nLAotICd0eXBlcyc6ICdcblRoZSBzdGFuZGFyZCB0eXBlIGhpZXJhcmNoeVxuKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cbkJlbG93IGlzIGEgbGlzdCBvZiB0aGUgdHlwZXMgdGhhdCBhcmUgYnVpbHQgaW50byBQeXRob24uICBFeHRlbnNpb25cbm1vZHVsZXMgKHdyaXR0ZW4gaW4gQywgSmF2YSwgb3Igb3RoZXIgbGFuZ3VhZ2VzLCBkZXBlbmRpbmcgb24gdGhlXG5pbXBsZW1lbnRhdGlvbikgY2FuIGRlZmluZSBhZGRpdGlvbmFsIHR5cGVzLiAgRnV0dXJlIHZlcnNpb25zIG9mXG5QeXRob24gbWF5IGFkZCB0eXBlcyB0byB0aGUgdHlwZSBoaWVyYXJjaHkgKGUuZy4sIHJhdGlvbmFsIG51bWJlcnMsXG5lZmZpY2llbnRseSBzdG9yZWQgYXJyYXlzIG9mIGludGVnZXJzLCBldGMuKSwgYWx0aG91Z2ggc3VjaCBhZGRpdGlvbnNcbndpbGwgb2Z0ZW4gYmUgcHJvdmlkZWQgdmlhIHRoZSBzdGFuZGFyZCBsaWJyYXJ5IGluc3RlYWQuXG5cblNvbWUgb2YgdGhlIHR5cGUgZGVzY3JpcHRpb25zIGJlbG93IGNvbnRhaW4gYSBwYXJhZ3JhcGggbGlzdGluZ1xuXCdzcGVjaWFsIGF0dHJpYnV0ZXMuXCcgIFRoZXNlIGFyZSBhdHRyaWJ1dGVzIHRoYXQgcHJvdmlkZSBhY2Nlc3MgdG8gdGhlXG5pbXBsZW1lbnRhdGlvbiBhbmQgYXJlIG5vdCBpbnRlbmRlZCBmb3IgZ2VuZXJhbCB1c2UuICBUaGVpciBkZWZpbml0aW9uXG5tYXkgY2hhbmdlIGluIHRoZSBmdXR1cmUuXG5cbk5vbmVcbiAgIFRoaXMgdHlwZSBoYXMgYSBzaW5nbGUgdmFsdWUuICBUaGVyZSBpcyBhIHNpbmdsZSBvYmplY3Qgd2l0aCB0aGlzXG4gICB2YWx1ZS4gVGhpcyBvYmplY3QgaXMgYWNjZXNzZWQgdGhyb3VnaCB0aGUgYnVpbHQtaW4gbmFtZSAiTm9uZSIuIEl0XG4gICBpcyB1c2VkIHRvIHNpZ25pZnkgdGhlIGFic2VuY2Ugb2YgYSB2YWx1ZSBpbiBtYW55IHNpdHVhdGlvbnMsIGUuZy4sXG4gICBpdCBpcyByZXR1cm5lZCBmcm9tIGZ1bmN0aW9ucyB0aGF0IGRvblwndCBleHBsaWNpdGx5IHJldHVyblxuICAgYW55dGhpbmcuIEl0cyB0cnV0aCB2YWx1ZSBpcyBmYWxzZS5cblxuTm90SW1wbGVtZW50ZWRcbiAgIFRoaXMgdHlwZSBoYXMgYSBzaW5nbGUgdmFsdWUuICBUaGVyZSBpcyBhIHNpbmdsZSBvYmplY3Qgd2l0aCB0aGlzXG4gICB2YWx1ZS4gVGhpcyBvYmplY3QgaXMgYWNjZXNzZWQgdGhyb3VnaCB0aGUgYnVpbHQtaW4gbmFtZVxuICAgIk5vdEltcGxlbWVudGVkIi4gTnVtZXJpYyBtZXRob2RzIGFuZCByaWNoIGNvbXBhcmlzb24gbWV0aG9kcyBtYXlcbiAgIHJldHVybiB0aGlzIHZhbHVlIGlmIHRoZXkgZG8gbm90IGltcGxlbWVudCB0aGUgb3BlcmF0aW9uIGZvciB0aGVcbiAgIG9wZXJhbmRzIHByb3ZpZGVkLiAgKFRoZSBpbnRlcnByZXRlciB3aWxsIHRoZW4gdHJ5IHRoZSByZWZsZWN0ZWRcbiAgIG9wZXJhdGlvbiwgb3Igc29tZSBvdGhlciBmYWxsYmFjaywgZGVwZW5kaW5nIG9uIHRoZSBvcGVyYXRvci4pICBJdHNcbiAgIHRydXRoIHZhbHVlIGlzIHRydWUuXG5cbkVsbGlwc2lzXG4gICBUaGlzIHR5cGUgaGFzIGEgc2luZ2xlIHZhbHVlLiAgVGhlcmUgaXMgYSBzaW5nbGUgb2JqZWN0IHdpdGggdGhpc1xuICAgdmFsdWUuIFRoaXMgb2JqZWN0IGlzIGFjY2Vzc2VkIHRocm91Z2ggdGhlIGxpdGVyYWwgIi4uLiIgb3IgdGhlXG4gICBidWlsdC1pbiBuYW1lICJFbGxpcHNpcyIuICBJdHMgdHJ1dGggdmFsdWUgaXMgdHJ1ZS5cblxuIm51bWJlcnMuTnVtYmVyIlxuICAgVGhlc2UgYXJlIGNyZWF0ZWQgYnkgbnVtZXJpYyBsaXRlcmFscyBhbmQgcmV0dXJuZWQgYXMgcmVzdWx0cyBieVxuICAgYXJpdGhtZXRpYyBvcGVyYXRvcnMgYW5kIGFyaXRobWV0aWMgYnVpbHQtaW4gZnVuY3Rpb25zLiAgTnVtZXJpY1xuICAgb2JqZWN0cyBhcmUgaW1tdXRhYmxlOyBvbmNlIGNyZWF0ZWQgdGhlaXIgdmFsdWUgbmV2ZXIgY2hhbmdlcy5cbiAgIFB5dGhvbiBudW1iZXJzIGFyZSBvZiBjb3Vyc2Ugc3Ryb25nbHkgcmVsYXRlZCB0byBtYXRoZW1hdGljYWxcbiAgIG51bWJlcnMsIGJ1dCBzdWJqZWN0IHRvIHRoZSBsaW1pdGF0aW9ucyBvZiBudW1lcmljYWwgcmVwcmVzZW50YXRpb25cbiAgIGluIGNvbXB1dGVycy5cblxuICAgUHl0aG9uIGRpc3Rpbmd1aXNoZXMgYmV0d2VlbiBpbnRlZ2VycywgZmxvYXRpbmcgcG9pbnQgbnVtYmVycywgYW5kXG4gICBjb21wbGV4IG51bWJlcnM6XG5cbiAgICJudW1iZXJzLkludGVncmFsIlxuICAgICAgVGhlc2UgcmVwcmVzZW50IGVsZW1lbnRzIGZyb20gdGhlIG1hdGhlbWF0aWNhbCBzZXQgb2YgaW50ZWdlcnNcbiAgICAgIChwb3NpdGl2ZSBhbmQgbmVnYXRpdmUpLlxuXG4gICAgICBUaGVyZSBhcmUgdHdvIHR5cGVzIG9mIGludGVnZXJzOlxuXG4gICAgICBJbnRlZ2VycyAoImludCIpXG5cbiAgICAgICAgIFRoZXNlIHJlcHJlc2VudCBudW1iZXJzIGluIGFuIHVubGltaXRlZCByYW5nZSwgc3ViamVjdCB0b1xuICAgICAgICAgYXZhaWxhYmxlICh2aXJ0dWFsKSBtZW1vcnkgb25seS4gIEZvciB0aGUgcHVycG9zZSBvZiBzaGlmdFxuICAgICAgICAgYW5kIG1hc2sgb3BlcmF0aW9ucywgYSBiaW5hcnkgcmVwcmVzZW50YXRpb24gaXMgYXNzdW1lZCwgYW5kXG4gICAgICAgICBuZWdhdGl2ZSBudW1iZXJzIGFyZSByZXByZXNlbnRlZCBpbiBhIHZhcmlhbnQgb2YgMlwnc1xuICAgICAgICAgY29tcGxlbWVudCB3aGljaCBnaXZlcyB0aGUgaWxsdXNpb24gb2YgYW4gaW5maW5pdGUgc3RyaW5nIG9mXG4gICAgICAgICBzaWduIGJpdHMgZXh0ZW5kaW5nIHRvIHRoZSBsZWZ0LlxuXG4gICAgICBCb29sZWFucyAoImJvb2wiKVxuICAgICAgICAgVGhlc2UgcmVwcmVzZW50IHRoZSB0cnV0aCB2YWx1ZXMgRmFsc2UgYW5kIFRydWUuICBUaGUgdHdvXG4gICAgICAgICBvYmplY3RzIHJlcHJlc2VudGluZyB0aGUgdmFsdWVzICJGYWxzZSIgYW5kICJUcnVlIiBhcmUgdGhlXG4gICAgICAgICBvbmx5IEJvb2xlYW4gb2JqZWN0cy4gVGhlIEJvb2xlYW4gdHlwZSBpcyBhIHN1YnR5cGUgb2YgdGhlXG4gICAgICAgICBpbnRlZ2VyIHR5cGUsIGFuZCBCb29sZWFuIHZhbHVlcyBiZWhhdmUgbGlrZSB0aGUgdmFsdWVzIDAgYW5kXG4gICAgICAgICAxLCByZXNwZWN0aXZlbHksIGluIGFsbW9zdCBhbGwgY29udGV4dHMsIHRoZSBleGNlcHRpb24gYmVpbmdcbiAgICAgICAgIHRoYXQgd2hlbiBjb252ZXJ0ZWQgdG8gYSBzdHJpbmcsIHRoZSBzdHJpbmdzICIiRmFsc2UiIiBvclxuICAgICAgICAgIiJUcnVlIiIgYXJlIHJldHVybmVkLCByZXNwZWN0aXZlbHkuXG5cbiAgICAgIFRoZSBydWxlcyBmb3IgaW50ZWdlciByZXByZXNlbnRhdGlvbiBhcmUgaW50ZW5kZWQgdG8gZ2l2ZSB0aGVcbiAgICAgIG1vc3QgbWVhbmluZ2Z1bCBpbnRlcnByZXRhdGlvbiBvZiBzaGlmdCBhbmQgbWFzayBvcGVyYXRpb25zXG4gICAgICBpbnZvbHZpbmcgbmVnYXRpdmUgaW50ZWdlcnMuXG5cbiAgICJudW1iZXJzLlJlYWwiICgiZmxvYXQiKVxuICAgICAgVGhlc2UgcmVwcmVzZW50IG1hY2hpbmUtbGV2ZWwgZG91YmxlIHByZWNpc2lvbiBmbG9hdGluZyBwb2ludFxuICAgICAgbnVtYmVycy4gWW91IGFyZSBhdCB0aGUgbWVyY3kgb2YgdGhlIHVuZGVybHlpbmcgbWFjaGluZVxuICAgICAgYXJjaGl0ZWN0dXJlIChhbmQgQyBvciBKYXZhIGltcGxlbWVudGF0aW9uKSBmb3IgdGhlIGFjY2VwdGVkXG4gICAgICByYW5nZSBhbmQgaGFuZGxpbmcgb2Ygb3ZlcmZsb3cuIFB5dGhvbiBkb2VzIG5vdCBzdXBwb3J0IHNpbmdsZS1cbiAgICAgIHByZWNpc2lvbiBmbG9hdGluZyBwb2ludCBudW1iZXJzOyB0aGUgc2F2aW5ncyBpbiBwcm9jZXNzb3IgYW5kXG4gICAgICBtZW1vcnkgdXNhZ2UgdGhhdCBhcmUgdXN1YWxseSB0aGUgcmVhc29uIGZvciB1c2luZyB0aGVzZSBpc1xuICAgICAgZHdhcmZlZCBieSB0aGUgb3ZlcmhlYWQgb2YgdXNpbmcgb2JqZWN0cyBpbiBQeXRob24sIHNvIHRoZXJlIGlzXG4gICAgICBubyByZWFzb24gdG8gY29tcGxpY2F0ZSB0aGUgbGFuZ3VhZ2Ugd2l0aCB0d28ga2luZHMgb2YgZmxvYXRpbmdcbiAgICAgIHBvaW50IG51bWJlcnMuXG5cbiAgICJudW1iZXJzLkNvbXBsZXgiICgiY29tcGxleCIpXG4gICAgICBUaGVzZSByZXByZXNlbnQgY29tcGxleCBudW1iZXJzIGFzIGEgcGFpciBvZiBtYWNoaW5lLWxldmVsXG4gICAgICBkb3VibGUgcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50IG51bWJlcnMuICBUaGUgc2FtZSBjYXZlYXRzIGFwcGx5XG4gICAgICBhcyBmb3IgZmxvYXRpbmcgcG9pbnQgbnVtYmVycy4gVGhlIHJlYWwgYW5kIGltYWdpbmFyeSBwYXJ0cyBvZiBhXG4gICAgICBjb21wbGV4IG51bWJlciAieiIgY2FuIGJlIHJldHJpZXZlZCB0aHJvdWdoIHRoZSByZWFkLW9ubHlcbiAgICAgIGF0dHJpYnV0ZXMgInoucmVhbCIgYW5kICJ6LmltYWciLlxuXG5TZXF1ZW5jZXNcbiAgIFRoZXNlIHJlcHJlc2VudCBmaW5pdGUgb3JkZXJlZCBzZXRzIGluZGV4ZWQgYnkgbm9uLW5lZ2F0aXZlXG4gICBudW1iZXJzLiBUaGUgYnVpbHQtaW4gZnVuY3Rpb24gImxlbigpIiByZXR1cm5zIHRoZSBudW1iZXIgb2YgaXRlbXNcbiAgIG9mIGEgc2VxdWVuY2UuIFdoZW4gdGhlIGxlbmd0aCBvZiBhIHNlcXVlbmNlIGlzICpuKiwgdGhlIGluZGV4IHNldFxuICAgY29udGFpbnMgdGhlIG51bWJlcnMgMCwgMSwgLi4uLCAqbiotMS4gIEl0ZW0gKmkqIG9mIHNlcXVlbmNlICphKiBpc1xuICAgc2VsZWN0ZWQgYnkgImFbaV0iLlxuXG4gICBTZXF1ZW5jZXMgYWxzbyBzdXBwb3J0IHNsaWNpbmc6ICJhW2k6al0iIHNlbGVjdHMgYWxsIGl0ZW1zIHdpdGhcbiAgIGluZGV4ICprKiBzdWNoIHRoYXQgKmkqICI8PSIgKmsqICI8IiAqaiouICBXaGVuIHVzZWQgYXMgYW5cbiAgIGV4cHJlc3Npb24sIGEgc2xpY2UgaXMgYSBzZXF1ZW5jZSBvZiB0aGUgc2FtZSB0eXBlLiAgVGhpcyBpbXBsaWVzXG4gICB0aGF0IHRoZSBpbmRleCBzZXQgaXMgcmVudW1iZXJlZCBzbyB0aGF0IGl0IHN0YXJ0cyBhdCAwLlxuXG4gICBTb21lIHNlcXVlbmNlcyBhbHNvIHN1cHBvcnQgImV4dGVuZGVkIHNsaWNpbmciIHdpdGggYSB0aGlyZCAic3RlcCJcbiAgIHBhcmFtZXRlcjogImFbaTpqOmtdIiBzZWxlY3RzIGFsbCBpdGVtcyBvZiAqYSogd2l0aCBpbmRleCAqeCogd2hlcmVcbiAgICJ4ID0gaSArIG4qayIsICpuKiAiPj0iICIwIiBhbmQgKmkqICI8PSIgKngqICI8IiAqaiouXG5cbiAgIFNlcXVlbmNlcyBhcmUgZGlzdGluZ3Vpc2hlZCBhY2NvcmRpbmcgdG8gdGhlaXIgbXV0YWJpbGl0eTpcblxuICAgSW1tdXRhYmxlIHNlcXVlbmNlc1xuICAgICAgQW4gb2JqZWN0IG9mIGFuIGltbXV0YWJsZSBzZXF1ZW5jZSB0eXBlIGNhbm5vdCBjaGFuZ2Ugb25jZSBpdCBpc1xuICAgICAgY3JlYXRlZC4gIChJZiB0aGUgb2JqZWN0IGNvbnRhaW5zIHJlZmVyZW5jZXMgdG8gb3RoZXIgb2JqZWN0cyxcbiAgICAgIHRoZXNlIG90aGVyIG9iamVjdHMgbWF5IGJlIG11dGFibGUgYW5kIG1heSBiZSBjaGFuZ2VkOyBob3dldmVyLFxuICAgICAgdGhlIGNvbGxlY3Rpb24gb2Ygb2JqZWN0cyBkaXJlY3RseSByZWZlcmVuY2VkIGJ5IGFuIGltbXV0YWJsZVxuICAgICAgb2JqZWN0IGNhbm5vdCBjaGFuZ2UuKVxuXG4gICAgICBUaGUgZm9sbG93aW5nIHR5cGVzIGFyZSBpbW11dGFibGUgc2VxdWVuY2VzOlxuXG4gICAgICBTdHJpbmdzXG4gICAgICAgICBBIHN0cmluZyBpcyBhIHNlcXVlbmNlIG9mIHZhbHVlcyB0aGF0IHJlcHJlc2VudCBVbmljb2RlXG4gICAgICAgICBjb2RlcG9pbnRzLiBBbGwgdGhlIGNvZGVwb2ludHMgaW4gcmFuZ2UgIlUrMDAwMCAtIFUrMTBGRkZGIlxuICAgICAgICAgY2FuIGJlIHJlcHJlc2VudGVkIGluIGEgc3RyaW5nLiAgUHl0aG9uIGRvZXNuXCd0IGhhdmUgYSAiY2hyIlxuICAgICAgICAgdHlwZSwgYW5kIGV2ZXJ5IGNoYXJhY3RlciBpbiB0aGUgc3RyaW5nIGlzIHJlcHJlc2VudGVkIGFzIGFcbiAgICAgICAgIHN0cmluZyBvYmplY3Qgd2l0aCBsZW5ndGggIjEiLiAgVGhlIGJ1aWx0LWluIGZ1bmN0aW9uICJvcmQoKSJcbiAgICAgICAgIGNvbnZlcnRzIGEgY2hhcmFjdGVyIHRvIGl0cyBjb2RlcG9pbnQgKGFzIGFuIGludGVnZXIpO1xuICAgICAgICAgImNocigpIiBjb252ZXJ0cyBhbiBpbnRlZ2VyIGluIHJhbmdlICIwIC0gMTBGRkZGIiB0byB0aGVcbiAgICAgICAgIGNvcnJlc3BvbmRpbmcgY2hhcmFjdGVyLiAic3RyLmVuY29kZSgpIiBjYW4gYmUgdXNlZCB0b1xuICAgICAgICAgY29udmVydCBhICJzdHIiIHRvICJieXRlcyIgdXNpbmcgdGhlIGdpdmVuIGVuY29kaW5nLCBhbmRcbiAgICAgICAgICJieXRlcy5kZWNvZGUoKSIgY2FuIGJlIHVzZWQgdG8gYWNoaWV2ZSB0aGUgb3Bwb3NpdGUuXG5cbiAgICAgIFR1cGxlc1xuICAgICAgICAgVGhlIGl0ZW1zIG9mIGEgdHVwbGUgYXJlIGFyYml0cmFyeSBQeXRob24gb2JqZWN0cy4gVHVwbGVzIG9mXG4gICAgICAgICB0d28gb3IgbW9yZSBpdGVtcyBhcmUgZm9ybWVkIGJ5IGNvbW1hLXNlcGFyYXRlZCBsaXN0cyBvZlxuICAgICAgICAgZXhwcmVzc2lvbnMuICBBIHR1cGxlIG9mIG9uZSBpdGVtIChhIFwnc2luZ2xldG9uXCcpIGNhbiBiZVxuICAgICAgICAgZm9ybWVkIGJ5IGFmZml4aW5nIGEgY29tbWEgdG8gYW4gZXhwcmVzc2lvbiAoYW4gZXhwcmVzc2lvbiBieVxuICAgICAgICAgaXRzZWxmIGRvZXMgbm90IGNyZWF0ZSBhIHR1cGxlLCBzaW5jZSBwYXJlbnRoZXNlcyBtdXN0IGJlXG4gICAgICAgICB1c2FibGUgZm9yIGdyb3VwaW5nIG9mIGV4cHJlc3Npb25zKS4gIEFuIGVtcHR5IHR1cGxlIGNhbiBiZVxuICAgICAgICAgZm9ybWVkIGJ5IGFuIGVtcHR5IHBhaXIgb2YgcGFyZW50aGVzZXMuXG5cbiAgICAgIEJ5dGVzXG4gICAgICAgICBBIGJ5dGVzIG9iamVjdCBpcyBhbiBpbW11dGFibGUgYXJyYXkuICBUaGUgaXRlbXMgYXJlIDgtYml0XG4gICAgICAgICBieXRlcywgcmVwcmVzZW50ZWQgYnkgaW50ZWdlcnMgaW4gdGhlIHJhbmdlIDAgPD0geCA8IDI1Ni5cbiAgICAgICAgIEJ5dGVzIGxpdGVyYWxzIChsaWtlICJiXCdhYmNcJyIpIGFuZCB0aGUgYnVpbHQtaW4gZnVuY3Rpb25cbiAgICAgICAgICJieXRlcygpIiBjYW4gYmUgdXNlZCB0byBjb25zdHJ1Y3QgYnl0ZXMgb2JqZWN0cy4gIEFsc28sXG4gICAgICAgICBieXRlcyBvYmplY3RzIGNhbiBiZSBkZWNvZGVkIHRvIHN0cmluZ3MgdmlhIHRoZSAiZGVjb2RlKCkiXG4gICAgICAgICBtZXRob2QuXG5cbiAgIE11dGFibGUgc2VxdWVuY2VzXG4gICAgICBNdXRhYmxlIHNlcXVlbmNlcyBjYW4gYmUgY2hhbmdlZCBhZnRlciB0aGV5IGFyZSBjcmVhdGVkLiAgVGhlXG4gICAgICBzdWJzY3JpcHRpb24gYW5kIHNsaWNpbmcgbm90YXRpb25zIGNhbiBiZSB1c2VkIGFzIHRoZSB0YXJnZXQgb2ZcbiAgICAgIGFzc2lnbm1lbnQgYW5kICJkZWwiIChkZWxldGUpIHN0YXRlbWVudHMuXG5cbiAgICAgIFRoZXJlIGFyZSBjdXJyZW50bHkgdHdvIGludHJpbnNpYyBtdXRhYmxlIHNlcXVlbmNlIHR5cGVzOlxuXG4gICAgICBMaXN0c1xuICAgICAgICAgVGhlIGl0ZW1zIG9mIGEgbGlzdCBhcmUgYXJiaXRyYXJ5IFB5dGhvbiBvYmplY3RzLiAgTGlzdHMgYXJlXG4gICAgICAgICBmb3JtZWQgYnkgcGxhY2luZyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGV4cHJlc3Npb25zIGluXG4gICAgICAgICBzcXVhcmUgYnJhY2tldHMuIChOb3RlIHRoYXQgdGhlcmUgYXJlIG5vIHNwZWNpYWwgY2FzZXMgbmVlZGVkXG4gICAgICAgICB0byBmb3JtIGxpc3RzIG9mIGxlbmd0aCAwIG9yIDEuKVxuXG4gICAgICBCeXRlIEFycmF5c1xuICAgICAgICAgQSBieXRlYXJyYXkgb2JqZWN0IGlzIGEgbXV0YWJsZSBhcnJheS4gVGhleSBhcmUgY3JlYXRlZCBieVxuICAgICAgICAgdGhlIGJ1aWx0LWluICJieXRlYXJyYXkoKSIgY29uc3RydWN0b3IuICBBc2lkZSBmcm9tIGJlaW5nXG4gICAgICAgICBtdXRhYmxlIChhbmQgaGVuY2UgdW5oYXNoYWJsZSksIGJ5dGUgYXJyYXlzIG90aGVyd2lzZSBwcm92aWRlXG4gICAgICAgICB0aGUgc2FtZSBpbnRlcmZhY2UgYW5kIGZ1bmN0aW9uYWxpdHkgYXMgaW1tdXRhYmxlIGJ5dGVzXG4gICAgICAgICBvYmplY3RzLlxuXG4gICAgICBUaGUgZXh0ZW5zaW9uIG1vZHVsZSAiYXJyYXkiIHByb3ZpZGVzIGFuIGFkZGl0aW9uYWwgZXhhbXBsZSBvZiBhXG4gICAgICBtdXRhYmxlIHNlcXVlbmNlIHR5cGUsIGFzIGRvZXMgdGhlICJjb2xsZWN0aW9ucyIgbW9kdWxlLlxuXG5TZXQgdHlwZXNcbiAgIFRoZXNlIHJlcHJlc2VudCB1bm9yZGVyZWQsIGZpbml0ZSBzZXRzIG9mIHVuaXF1ZSwgaW1tdXRhYmxlXG4gICBvYmplY3RzLiBBcyBzdWNoLCB0aGV5IGNhbm5vdCBiZSBpbmRleGVkIGJ5IGFueSBzdWJzY3JpcHQuIEhvd2V2ZXIsXG4gICB0aGV5IGNhbiBiZSBpdGVyYXRlZCBvdmVyLCBhbmQgdGhlIGJ1aWx0LWluIGZ1bmN0aW9uICJsZW4oKSJcbiAgIHJldHVybnMgdGhlIG51bWJlciBvZiBpdGVtcyBpbiBhIHNldC4gQ29tbW9uIHVzZXMgZm9yIHNldHMgYXJlIGZhc3RcbiAgIG1lbWJlcnNoaXAgdGVzdGluZywgcmVtb3ZpbmcgZHVwbGljYXRlcyBmcm9tIGEgc2VxdWVuY2UsIGFuZFxuICAgY29tcHV0aW5nIG1hdGhlbWF0aWNhbCBvcGVyYXRpb25zIHN1Y2ggYXMgaW50ZXJzZWN0aW9uLCB1bmlvbixcbiAgIGRpZmZlcmVuY2UsIGFuZCBzeW1tZXRyaWMgZGlmZmVyZW5jZS5cblxuICAgRm9yIHNldCBlbGVtZW50cywgdGhlIHNhbWUgaW1tdXRhYmlsaXR5IHJ1bGVzIGFwcGx5IGFzIGZvclxuICAgZGljdGlvbmFyeSBrZXlzLiBOb3RlIHRoYXQgbnVtZXJpYyB0eXBlcyBvYmV5IHRoZSBub3JtYWwgcnVsZXMgZm9yXG4gICBudW1lcmljIGNvbXBhcmlzb246IGlmIHR3byBudW1iZXJzIGNvbXBhcmUgZXF1YWwgKGUuZy4sICIxIiBhbmRcbiAgICIxLjAiKSwgb25seSBvbmUgb2YgdGhlbSBjYW4gYmUgY29udGFpbmVkIGluIGEgc2V0LlxuXG4gICBUaGVyZSBhcmUgY3VycmVudGx5IHR3byBpbnRyaW5zaWMgc2V0IHR5cGVzOlxuXG4gICBTZXRzXG4gICAgICBUaGVzZSByZXByZXNlbnQgYSBtdXRhYmxlIHNldC4gVGhleSBhcmUgY3JlYXRlZCBieSB0aGUgYnVpbHQtaW5cbiAgICAgICJzZXQoKSIgY29uc3RydWN0b3IgYW5kIGNhbiBiZSBtb2RpZmllZCBhZnRlcndhcmRzIGJ5IHNldmVyYWxcbiAgICAgIG1ldGhvZHMsIHN1Y2ggYXMgImFkZCgpIi5cblxuICAgRnJvemVuIHNldHNcbiAgICAgIFRoZXNlIHJlcHJlc2VudCBhbiBpbW11dGFibGUgc2V0LiAgVGhleSBhcmUgY3JlYXRlZCBieSB0aGVcbiAgICAgIGJ1aWx0LWluICJmcm96ZW5zZXQoKSIgY29uc3RydWN0b3IuICBBcyBhIGZyb3plbnNldCBpcyBpbW11dGFibGVcbiAgICAgIGFuZCAqaGFzaGFibGUqLCBpdCBjYW4gYmUgdXNlZCBhZ2FpbiBhcyBhbiBlbGVtZW50IG9mIGFub3RoZXJcbiAgICAgIHNldCwgb3IgYXMgYSBkaWN0aW9uYXJ5IGtleS5cblxuTWFwcGluZ3NcbiAgIFRoZXNlIHJlcHJlc2VudCBmaW5pdGUgc2V0cyBvZiBvYmplY3RzIGluZGV4ZWQgYnkgYXJiaXRyYXJ5IGluZGV4XG4gICBzZXRzLiBUaGUgc3Vic2NyaXB0IG5vdGF0aW9uICJhW2tdIiBzZWxlY3RzIHRoZSBpdGVtIGluZGV4ZWQgYnkgImsiXG4gICBmcm9tIHRoZSBtYXBwaW5nICJhIjsgdGhpcyBjYW4gYmUgdXNlZCBpbiBleHByZXNzaW9ucyBhbmQgYXMgdGhlXG4gICB0YXJnZXQgb2YgYXNzaWdubWVudHMgb3IgImRlbCIgc3RhdGVtZW50cy4gVGhlIGJ1aWx0LWluIGZ1bmN0aW9uXG4gICAibGVuKCkiIHJldHVybnMgdGhlIG51bWJlciBvZiBpdGVtcyBpbiBhIG1hcHBpbmcuXG5cbiAgIFRoZXJlIGlzIGN1cnJlbnRseSBhIHNpbmdsZSBpbnRyaW5zaWMgbWFwcGluZyB0eXBlOlxuXG4gICBEaWN0aW9uYXJpZXNcbiAgICAgIFRoZXNlIHJlcHJlc2VudCBmaW5pdGUgc2V0cyBvZiBvYmplY3RzIGluZGV4ZWQgYnkgbmVhcmx5XG4gICAgICBhcmJpdHJhcnkgdmFsdWVzLiAgVGhlIG9ubHkgdHlwZXMgb2YgdmFsdWVzIG5vdCBhY2NlcHRhYmxlIGFzXG4gICAgICBrZXlzIGFyZSB2YWx1ZXMgY29udGFpbmluZyBsaXN0cyBvciBkaWN0aW9uYXJpZXMgb3Igb3RoZXJcbiAgICAgIG11dGFibGUgdHlwZXMgdGhhdCBhcmUgY29tcGFyZWQgYnkgdmFsdWUgcmF0aGVyIHRoYW4gYnkgb2JqZWN0XG4gICAgICBpZGVudGl0eSwgdGhlIHJlYXNvbiBiZWluZyB0aGF0IHRoZSBlZmZpY2llbnQgaW1wbGVtZW50YXRpb24gb2ZcbiAgICAgIGRpY3Rpb25hcmllcyByZXF1aXJlcyBhIGtleVwncyBoYXNoIHZhbHVlIHRvIHJlbWFpbiBjb25zdGFudC5cbiAgICAgIE51bWVyaWMgdHlwZXMgdXNlZCBmb3Iga2V5cyBvYmV5IHRoZSBub3JtYWwgcnVsZXMgZm9yIG51bWVyaWNcbiAgICAgIGNvbXBhcmlzb246IGlmIHR3byBudW1iZXJzIGNvbXBhcmUgZXF1YWwgKGUuZy4sICIxIiBhbmQgIjEuMCIpXG4gICAgICB0aGVuIHRoZXkgY2FuIGJlIHVzZWQgaW50ZXJjaGFuZ2VhYmx5IHRvIGluZGV4IHRoZSBzYW1lXG4gICAgICBkaWN0aW9uYXJ5IGVudHJ5LlxuXG4gICAgICBEaWN0aW9uYXJpZXMgYXJlIG11dGFibGU7IHRoZXkgY2FuIGJlIGNyZWF0ZWQgYnkgdGhlICJ7Li4ufSJcbiAgICAgIG5vdGF0aW9uIChzZWUgc2VjdGlvbiAqRGljdGlvbmFyeSBkaXNwbGF5cyopLlxuXG4gICAgICBUaGUgZXh0ZW5zaW9uIG1vZHVsZXMgImRibS5uZGJtIiBhbmQgImRibS5nbnUiIHByb3ZpZGVcbiAgICAgIGFkZGl0aW9uYWwgZXhhbXBsZXMgb2YgbWFwcGluZyB0eXBlcywgYXMgZG9lcyB0aGUgImNvbGxlY3Rpb25zIlxuICAgICAgbW9kdWxlLlxuXG5DYWxsYWJsZSB0eXBlc1xuICAgVGhlc2UgYXJlIHRoZSB0eXBlcyB0byB3aGljaCB0aGUgZnVuY3Rpb24gY2FsbCBvcGVyYXRpb24gKHNlZVxuICAgc2VjdGlvbiAqQ2FsbHMqKSBjYW4gYmUgYXBwbGllZDpcblxuICAgVXNlci1kZWZpbmVkIGZ1bmN0aW9uc1xuICAgICAgQSB1c2VyLWRlZmluZWQgZnVuY3Rpb24gb2JqZWN0IGlzIGNyZWF0ZWQgYnkgYSBmdW5jdGlvblxuICAgICAgZGVmaW5pdGlvbiAoc2VlIHNlY3Rpb24gKkZ1bmN0aW9uIGRlZmluaXRpb25zKikuICBJdCBzaG91bGQgYmVcbiAgICAgIGNhbGxlZCB3aXRoIGFuIGFyZ3VtZW50IGxpc3QgY29udGFpbmluZyB0aGUgc2FtZSBudW1iZXIgb2YgaXRlbXNcbiAgICAgIGFzIHRoZSBmdW5jdGlvblwncyBmb3JtYWwgcGFyYW1ldGVyIGxpc3QuXG5cbiAgICAgIFNwZWNpYWwgYXR0cmlidXRlczpcblxuICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLStcbiAgICAgICs9PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT0rXG4gICAgICB8ICJfX2RvY19fIiAgICAgICAgICAgICAgICAgfCBUaGUgZnVuY3Rpb25cJ3MgZG9jdW1lbnRhdGlvbiAgICB8IFdyaXRhYmxlICAgIHxcbiAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rXG4gICAgICB8ICJfX25hbWVfXyIgICAgICAgICAgICAgICAgfCBUaGUgZnVuY3Rpb25cJ3MgbmFtZSAgICAgICAgICAgICB8IFdyaXRhYmxlICAgIHxcbiAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rXG4gICAgICB8ICJfX3F1YWxuYW1lX18iICAgICAgICAgICAgfCBUaGUgZnVuY3Rpb25cJ3MgKnF1YWxpZmllZCBuYW1lKiB8IFdyaXRhYmxlICAgIHxcbiAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rXG4gICAgICB8ICJfX21vZHVsZV9fIiAgICAgICAgICAgICAgfCBUaGUgbmFtZSBvZiB0aGUgbW9kdWxlIHRoZSAgICAgIHwgV3JpdGFibGUgICAgfFxuICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLStcbiAgICAgIHwgIl9fZGVmYXVsdHNfXyIgICAgICAgICAgICB8IEEgdHVwbGUgY29udGFpbmluZyBkZWZhdWx0ICAgICAgfCBXcml0YWJsZSAgICB8XG4gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tK1xuICAgICAgfCAiX19jb2RlX18iICAgICAgICAgICAgICAgIHwgVGhlIGNvZGUgb2JqZWN0IHJlcHJlc2VudGluZyAgICB8IFdyaXRhYmxlICAgIHxcbiAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rXG4gICAgICB8ICJfX2dsb2JhbHNfXyIgICAgICAgICAgICAgfCBBIHJlZmVyZW5jZSB0byB0aGUgZGljdGlvbmFyeSAgIHwgUmVhZC1vbmx5ICAgfFxuICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLStcbiAgICAgIHwgIl9fZGljdF9fIiAgICAgICAgICAgICAgICB8IFRoZSBuYW1lc3BhY2Ugc3VwcG9ydGluZyAgICAgICAgfCBXcml0YWJsZSAgICB8XG4gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tK1xuICAgICAgfCAiX19jbG9zdXJlX18iICAgICAgICAgICAgIHwgIk5vbmUiIG9yIGEgdHVwbGUgb2YgY2VsbHMgdGhhdCB8IFJlYWQtb25seSAgIHxcbiAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rXG4gICAgICB8ICJfX2Fubm90YXRpb25zX18iICAgICAgICAgfCBBIGRpY3QgY29udGFpbmluZyBhbm5vdGF0aW9ucyAgIHwgV3JpdGFibGUgICAgfFxuICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLStcbiAgICAgIHwgIl9fa3dkZWZhdWx0c19fIiAgICAgICAgICB8IEEgZGljdCBjb250YWluaW5nIGRlZmF1bHRzIGZvciAgfCBXcml0YWJsZSAgICB8XG4gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tK1xuXG4gICAgICBNb3N0IG9mIHRoZSBhdHRyaWJ1dGVzIGxhYmVsbGVkICJXcml0YWJsZSIgY2hlY2sgdGhlIHR5cGUgb2YgdGhlXG4gICAgICBhc3NpZ25lZCB2YWx1ZS5cblxuICAgICAgRnVuY3Rpb24gb2JqZWN0cyBhbHNvIHN1cHBvcnQgZ2V0dGluZyBhbmQgc2V0dGluZyBhcmJpdHJhcnlcbiAgICAgIGF0dHJpYnV0ZXMsIHdoaWNoIGNhbiBiZSB1c2VkLCBmb3IgZXhhbXBsZSwgdG8gYXR0YWNoIG1ldGFkYXRhXG4gICAgICB0byBmdW5jdGlvbnMuICBSZWd1bGFyIGF0dHJpYnV0ZSBkb3Qtbm90YXRpb24gaXMgdXNlZCB0byBnZXQgYW5kXG4gICAgICBzZXQgc3VjaCBhdHRyaWJ1dGVzLiAqTm90ZSB0aGF0IHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9ubHlcbiAgICAgIHN1cHBvcnRzIGZ1bmN0aW9uIGF0dHJpYnV0ZXMgb24gdXNlci1kZWZpbmVkIGZ1bmN0aW9ucy4gRnVuY3Rpb25cbiAgICAgIGF0dHJpYnV0ZXMgb24gYnVpbHQtaW4gZnVuY3Rpb25zIG1heSBiZSBzdXBwb3J0ZWQgaW4gdGhlXG4gICAgICBmdXR1cmUuKlxuXG4gICAgICBBZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IGEgZnVuY3Rpb25cJ3MgZGVmaW5pdGlvbiBjYW4gYmVcbiAgICAgIHJldHJpZXZlZCBmcm9tIGl0cyBjb2RlIG9iamVjdDsgc2VlIHRoZSBkZXNjcmlwdGlvbiBvZiBpbnRlcm5hbFxuICAgICAgdHlwZXMgYmVsb3cuXG5cbiAgIEluc3RhbmNlIG1ldGhvZHNcbiAgICAgIEFuIGluc3RhbmNlIG1ldGhvZCBvYmplY3QgY29tYmluZXMgYSBjbGFzcywgYSBjbGFzcyBpbnN0YW5jZSBhbmRcbiAgICAgIGFueSBjYWxsYWJsZSBvYmplY3QgKG5vcm1hbGx5IGEgdXNlci1kZWZpbmVkIGZ1bmN0aW9uKS5cblxuICAgICAgU3BlY2lhbCByZWFkLW9ubHkgYXR0cmlidXRlczogIl9fc2VsZl9fIiBpcyB0aGUgY2xhc3MgaW5zdGFuY2VcbiAgICAgIG9iamVjdCwgIl9fZnVuY19fIiBpcyB0aGUgZnVuY3Rpb24gb2JqZWN0OyAiX19kb2NfXyIgaXMgdGhlXG4gICAgICBtZXRob2RcJ3MgZG9jdW1lbnRhdGlvbiAoc2FtZSBhcyAiX19mdW5jX18uX19kb2NfXyIpOyAiX19uYW1lX18iXG4gICAgICBpcyB0aGUgbWV0aG9kIG5hbWUgKHNhbWUgYXMgIl9fZnVuY19fLl9fbmFtZV9fIik7ICJfX21vZHVsZV9fIlxuICAgICAgaXMgdGhlIG5hbWUgb2YgdGhlIG1vZHVsZSB0aGUgbWV0aG9kIHdhcyBkZWZpbmVkIGluLCBvciAiTm9uZSJcbiAgICAgIGlmIHVuYXZhaWxhYmxlLlxuXG4gICAgICBNZXRob2RzIGFsc28gc3VwcG9ydCBhY2Nlc3NpbmcgKGJ1dCBub3Qgc2V0dGluZykgdGhlIGFyYml0cmFyeVxuICAgICAgZnVuY3Rpb24gYXR0cmlidXRlcyBvbiB0aGUgdW5kZXJseWluZyBmdW5jdGlvbiBvYmplY3QuXG5cbiAgICAgIFVzZXItZGVmaW5lZCBtZXRob2Qgb2JqZWN0cyBtYXkgYmUgY3JlYXRlZCB3aGVuIGdldHRpbmcgYW5cbiAgICAgIGF0dHJpYnV0ZSBvZiBhIGNsYXNzIChwZXJoYXBzIHZpYSBhbiBpbnN0YW5jZSBvZiB0aGF0IGNsYXNzKSwgaWZcbiAgICAgIHRoYXQgYXR0cmlidXRlIGlzIGEgdXNlci1kZWZpbmVkIGZ1bmN0aW9uIG9iamVjdCBvciBhIGNsYXNzXG4gICAgICBtZXRob2Qgb2JqZWN0LlxuXG4gICAgICBXaGVuIGFuIGluc3RhbmNlIG1ldGhvZCBvYmplY3QgaXMgY3JlYXRlZCBieSByZXRyaWV2aW5nIGEgdXNlci1cbiAgICAgIGRlZmluZWQgZnVuY3Rpb24gb2JqZWN0IGZyb20gYSBjbGFzcyB2aWEgb25lIG9mIGl0cyBpbnN0YW5jZXMsXG4gICAgICBpdHMgIl9fc2VsZl9fIiBhdHRyaWJ1dGUgaXMgdGhlIGluc3RhbmNlLCBhbmQgdGhlIG1ldGhvZCBvYmplY3RcbiAgICAgIGlzIHNhaWQgdG8gYmUgYm91bmQuICBUaGUgbmV3IG1ldGhvZFwncyAiX19mdW5jX18iIGF0dHJpYnV0ZSBpc1xuICAgICAgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uIG9iamVjdC5cblxuICAgICAgV2hlbiBhIHVzZXItZGVmaW5lZCBtZXRob2Qgb2JqZWN0IGlzIGNyZWF0ZWQgYnkgcmV0cmlldmluZ1xuICAgICAgYW5vdGhlciBtZXRob2Qgb2JqZWN0IGZyb20gYSBjbGFzcyBvciBpbnN0YW5jZSwgdGhlIGJlaGF2aW91ciBpc1xuICAgICAgdGhlIHNhbWUgYXMgZm9yIGEgZnVuY3Rpb24gb2JqZWN0LCBleGNlcHQgdGhhdCB0aGUgIl9fZnVuY19fIlxuICAgICAgYXR0cmlidXRlIG9mIHRoZSBuZXcgaW5zdGFuY2UgaXMgbm90IHRoZSBvcmlnaW5hbCBtZXRob2Qgb2JqZWN0XG4gICAgICBidXQgaXRzICJfX2Z1bmNfXyIgYXR0cmlidXRlLlxuXG4gICAgICBXaGVuIGFuIGluc3RhbmNlIG1ldGhvZCBvYmplY3QgaXMgY3JlYXRlZCBieSByZXRyaWV2aW5nIGEgY2xhc3NcbiAgICAgIG1ldGhvZCBvYmplY3QgZnJvbSBhIGNsYXNzIG9yIGluc3RhbmNlLCBpdHMgIl9fc2VsZl9fIiBhdHRyaWJ1dGVcbiAgICAgIGlzIHRoZSBjbGFzcyBpdHNlbGYsIGFuZCBpdHMgIl9fZnVuY19fIiBhdHRyaWJ1dGUgaXMgdGhlXG4gICAgICBmdW5jdGlvbiBvYmplY3QgdW5kZXJseWluZyB0aGUgY2xhc3MgbWV0aG9kLlxuXG4gICAgICBXaGVuIGFuIGluc3RhbmNlIG1ldGhvZCBvYmplY3QgaXMgY2FsbGVkLCB0aGUgdW5kZXJseWluZ1xuICAgICAgZnVuY3Rpb24gKCJfX2Z1bmNfXyIpIGlzIGNhbGxlZCwgaW5zZXJ0aW5nIHRoZSBjbGFzcyBpbnN0YW5jZVxuICAgICAgKCJfX3NlbGZfXyIpIGluIGZyb250IG9mIHRoZSBhcmd1bWVudCBsaXN0LiAgRm9yIGluc3RhbmNlLCB3aGVuXG4gICAgICAiQyIgaXMgYSBjbGFzcyB3aGljaCBjb250YWlucyBhIGRlZmluaXRpb24gZm9yIGEgZnVuY3Rpb24gImYoKSIsXG4gICAgICBhbmQgIngiIGlzIGFuIGluc3RhbmNlIG9mICJDIiwgY2FsbGluZyAieC5mKDEpIiBpcyBlcXVpdmFsZW50IHRvXG4gICAgICBjYWxsaW5nICJDLmYoeCwgMSkiLlxuXG4gICAgICBXaGVuIGFuIGluc3RhbmNlIG1ldGhvZCBvYmplY3QgaXMgZGVyaXZlZCBmcm9tIGEgY2xhc3MgbWV0aG9kXG4gICAgICBvYmplY3QsIHRoZSAiY2xhc3MgaW5zdGFuY2UiIHN0b3JlZCBpbiAiX19zZWxmX18iIHdpbGwgYWN0dWFsbHlcbiAgICAgIGJlIHRoZSBjbGFzcyBpdHNlbGYsIHNvIHRoYXQgY2FsbGluZyBlaXRoZXIgInguZigxKSIgb3IgIkMuZigxKSJcbiAgICAgIGlzIGVxdWl2YWxlbnQgdG8gY2FsbGluZyAiZihDLDEpIiB3aGVyZSAiZiIgaXMgdGhlIHVuZGVybHlpbmdcbiAgICAgIGZ1bmN0aW9uLlxuXG4gICAgICBOb3RlIHRoYXQgdGhlIHRyYW5zZm9ybWF0aW9uIGZyb20gZnVuY3Rpb24gb2JqZWN0IHRvIGluc3RhbmNlXG4gICAgICBtZXRob2Qgb2JqZWN0IGhhcHBlbnMgZWFjaCB0aW1lIHRoZSBhdHRyaWJ1dGUgaXMgcmV0cmlldmVkIGZyb21cbiAgICAgIHRoZSBpbnN0YW5jZS4gIEluIHNvbWUgY2FzZXMsIGEgZnJ1aXRmdWwgb3B0aW1pemF0aW9uIGlzIHRvXG4gICAgICBhc3NpZ24gdGhlIGF0dHJpYnV0ZSB0byBhIGxvY2FsIHZhcmlhYmxlIGFuZCBjYWxsIHRoYXQgbG9jYWxcbiAgICAgIHZhcmlhYmxlLiBBbHNvIG5vdGljZSB0aGF0IHRoaXMgdHJhbnNmb3JtYXRpb24gb25seSBoYXBwZW5zIGZvclxuICAgICAgdXNlci1kZWZpbmVkIGZ1bmN0aW9uczsgb3RoZXIgY2FsbGFibGUgb2JqZWN0cyAoYW5kIGFsbCBub24tXG4gICAgICBjYWxsYWJsZSBvYmplY3RzKSBhcmUgcmV0cmlldmVkIHdpdGhvdXQgdHJhbnNmb3JtYXRpb24uICBJdCBpc1xuICAgICAgYWxzbyBpbXBvcnRhbnQgdG8gbm90ZSB0aGF0IHVzZXItZGVmaW5lZCBmdW5jdGlvbnMgd2hpY2ggYXJlXG4gICAgICBhdHRyaWJ1dGVzIG9mIGEgY2xhc3MgaW5zdGFuY2UgYXJlIG5vdCBjb252ZXJ0ZWQgdG8gYm91bmRcbiAgICAgIG1ldGhvZHM7IHRoaXMgKm9ubHkqIGhhcHBlbnMgd2hlbiB0aGUgZnVuY3Rpb24gaXMgYW4gYXR0cmlidXRlXG4gICAgICBvZiB0aGUgY2xhc3MuXG5cbiAgIEdlbmVyYXRvciBmdW5jdGlvbnNcbiAgICAgIEEgZnVuY3Rpb24gb3IgbWV0aG9kIHdoaWNoIHVzZXMgdGhlICJ5aWVsZCIgc3RhdGVtZW50IChzZWVcbiAgICAgIHNlY3Rpb24gKlRoZSB5aWVsZCBzdGF0ZW1lbnQqKSBpcyBjYWxsZWQgYSAqZ2VuZXJhdG9yIGZ1bmN0aW9uKi5cbiAgICAgIFN1Y2ggYSBmdW5jdGlvbiwgd2hlbiBjYWxsZWQsIGFsd2F5cyByZXR1cm5zIGFuIGl0ZXJhdG9yIG9iamVjdFxuICAgICAgd2hpY2ggY2FuIGJlIHVzZWQgdG8gZXhlY3V0ZSB0aGUgYm9keSBvZiB0aGUgZnVuY3Rpb246ICBjYWxsaW5nXG4gICAgICB0aGUgaXRlcmF0b3JcJ3MgIml0ZXJhdG9yLl9fbmV4dF9fKCkiIG1ldGhvZCB3aWxsIGNhdXNlIHRoZVxuICAgICAgZnVuY3Rpb24gdG8gZXhlY3V0ZSB1bnRpbCBpdCBwcm92aWRlcyBhIHZhbHVlIHVzaW5nIHRoZSAieWllbGQiXG4gICAgICBzdGF0ZW1lbnQuICBXaGVuIHRoZSBmdW5jdGlvbiBleGVjdXRlcyBhICJyZXR1cm4iIHN0YXRlbWVudCBvclxuICAgICAgZmFsbHMgb2ZmIHRoZSBlbmQsIGEgIlN0b3BJdGVyYXRpb24iIGV4Y2VwdGlvbiBpcyByYWlzZWQgYW5kIHRoZVxuICAgICAgaXRlcmF0b3Igd2lsbCBoYXZlIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgc2V0IG9mIHZhbHVlcyB0byBiZVxuICAgICAgcmV0dXJuZWQuXG5cbiAgIEJ1aWx0LWluIGZ1bmN0aW9uc1xuICAgICAgQSBidWlsdC1pbiBmdW5jdGlvbiBvYmplY3QgaXMgYSB3cmFwcGVyIGFyb3VuZCBhIEMgZnVuY3Rpb24uXG4gICAgICBFeGFtcGxlcyBvZiBidWlsdC1pbiBmdW5jdGlvbnMgYXJlICJsZW4oKSIgYW5kICJtYXRoLnNpbigpIlxuICAgICAgKCJtYXRoIiBpcyBhIHN0YW5kYXJkIGJ1aWx0LWluIG1vZHVsZSkuIFRoZSBudW1iZXIgYW5kIHR5cGUgb2ZcbiAgICAgIHRoZSBhcmd1bWVudHMgYXJlIGRldGVybWluZWQgYnkgdGhlIEMgZnVuY3Rpb24uIFNwZWNpYWwgcmVhZC1cbiAgICAgIG9ubHkgYXR0cmlidXRlczogIl9fZG9jX18iIGlzIHRoZSBmdW5jdGlvblwncyBkb2N1bWVudGF0aW9uXG4gICAgICBzdHJpbmcsIG9yICJOb25lIiBpZiB1bmF2YWlsYWJsZTsgIl9fbmFtZV9fIiBpcyB0aGUgZnVuY3Rpb25cJ3NcbiAgICAgIG5hbWU7ICJfX3NlbGZfXyIgaXMgc2V0IHRvICJOb25lIiAoYnV0IHNlZSB0aGUgbmV4dCBpdGVtKTtcbiAgICAgICJfX21vZHVsZV9fIiBpcyB0aGUgbmFtZSBvZiB0aGUgbW9kdWxlIHRoZSBmdW5jdGlvbiB3YXMgZGVmaW5lZFxuICAgICAgaW4gb3IgIk5vbmUiIGlmIHVuYXZhaWxhYmxlLlxuXG4gICBCdWlsdC1pbiBtZXRob2RzXG4gICAgICBUaGlzIGlzIHJlYWxseSBhIGRpZmZlcmVudCBkaXNndWlzZSBvZiBhIGJ1aWx0LWluIGZ1bmN0aW9uLCB0aGlzXG4gICAgICB0aW1lIGNvbnRhaW5pbmcgYW4gb2JqZWN0IHBhc3NlZCB0byB0aGUgQyBmdW5jdGlvbiBhcyBhblxuICAgICAgaW1wbGljaXQgZXh0cmEgYXJndW1lbnQuICBBbiBleGFtcGxlIG9mIGEgYnVpbHQtaW4gbWV0aG9kIGlzXG4gICAgICAiYWxpc3QuYXBwZW5kKCkiLCBhc3N1bWluZyAqYWxpc3QqIGlzIGEgbGlzdCBvYmplY3QuIEluIHRoaXNcbiAgICAgIGNhc2UsIHRoZSBzcGVjaWFsIHJlYWQtb25seSBhdHRyaWJ1dGUgIl9fc2VsZl9fIiBpcyBzZXQgdG8gdGhlXG4gICAgICBvYmplY3QgZGVub3RlZCBieSAqYWxpc3QqLlxuXG4gICBDbGFzc2VzXG4gICAgICBDbGFzc2VzIGFyZSBjYWxsYWJsZS4gIFRoZXNlIG9iamVjdHMgbm9ybWFsbHkgYWN0IGFzIGZhY3Rvcmllc1xuICAgICAgZm9yIG5ldyBpbnN0YW5jZXMgb2YgdGhlbXNlbHZlcywgYnV0IHZhcmlhdGlvbnMgYXJlIHBvc3NpYmxlIGZvclxuICAgICAgY2xhc3MgdHlwZXMgdGhhdCBvdmVycmlkZSAiX19uZXdfXygpIi4gIFRoZSBhcmd1bWVudHMgb2YgdGhlXG4gICAgICBjYWxsIGFyZSBwYXNzZWQgdG8gIl9fbmV3X18oKSIgYW5kLCBpbiB0aGUgdHlwaWNhbCBjYXNlLCB0b1xuICAgICAgIl9faW5pdF9fKCkiIHRvIGluaXRpYWxpemUgdGhlIG5ldyBpbnN0YW5jZS5cblxuICAgQ2xhc3MgSW5zdGFuY2VzXG4gICAgICBJbnN0YW5jZXMgb2YgYXJiaXRyYXJ5IGNsYXNzZXMgY2FuIGJlIG1hZGUgY2FsbGFibGUgYnkgZGVmaW5pbmdcbiAgICAgIGEgIl9fY2FsbF9fKCkiIG1ldGhvZCBpbiB0aGVpciBjbGFzcy5cblxuTW9kdWxlc1xuICAgTW9kdWxlcyBhcmUgYSBiYXNpYyBvcmdhbml6YXRpb25hbCB1bml0IG9mIFB5dGhvbiBjb2RlLCBhbmQgYXJlXG4gICBjcmVhdGVkIGJ5IHRoZSAqaW1wb3J0IHN5c3RlbSogYXMgaW52b2tlZCBlaXRoZXIgYnkgdGhlICJpbXBvcnQiXG4gICBzdGF0ZW1lbnQgKHNlZSAiaW1wb3J0IiksIG9yIGJ5IGNhbGxpbmcgZnVuY3Rpb25zIHN1Y2ggYXNcbiAgICJpbXBvcnRsaWIuaW1wb3J0X21vZHVsZSgpIiBhbmQgYnVpbHQtaW4gIl9faW1wb3J0X18oKSIuICBBIG1vZHVsZVxuICAgb2JqZWN0IGhhcyBhIG5hbWVzcGFjZSBpbXBsZW1lbnRlZCBieSBhIGRpY3Rpb25hcnkgb2JqZWN0ICh0aGlzIGlzXG4gICB0aGUgZGljdGlvbmFyeSByZWZlcmVuY2VkIGJ5IHRoZSAiX19nbG9iYWxzX18iIGF0dHJpYnV0ZSBvZlxuICAgZnVuY3Rpb25zIGRlZmluZWQgaW4gdGhlIG1vZHVsZSkuICBBdHRyaWJ1dGUgcmVmZXJlbmNlcyBhcmVcbiAgIHRyYW5zbGF0ZWQgdG8gbG9va3VwcyBpbiB0aGlzIGRpY3Rpb25hcnksIGUuZy4sICJtLngiIGlzIGVxdWl2YWxlbnRcbiAgIHRvICJtLl9fZGljdF9fWyJ4Il0iLiBBIG1vZHVsZSBvYmplY3QgZG9lcyBub3QgY29udGFpbiB0aGUgY29kZVxuICAgb2JqZWN0IHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgbW9kdWxlIChzaW5jZSBpdCBpc25cJ3QgbmVlZGVkIG9uY2VcbiAgIHRoZSBpbml0aWFsaXphdGlvbiBpcyBkb25lKS5cblxuICAgQXR0cmlidXRlIGFzc2lnbm1lbnQgdXBkYXRlcyB0aGUgbW9kdWxlXCdzIG5hbWVzcGFjZSBkaWN0aW9uYXJ5LFxuICAgZS5nLiwgIm0ueCA9IDEiIGlzIGVxdWl2YWxlbnQgdG8gIm0uX19kaWN0X19bIngiXSA9IDEiLlxuXG4gICBTcGVjaWFsIHJlYWQtb25seSBhdHRyaWJ1dGU6ICJfX2RpY3RfXyIgaXMgdGhlIG1vZHVsZVwncyBuYW1lc3BhY2VcbiAgIGFzIGEgZGljdGlvbmFyeSBvYmplY3QuXG5cbiAgICoqQ1B5dGhvbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWw6KiogQmVjYXVzZSBvZiB0aGUgd2F5IENQeXRob25cbiAgIGNsZWFycyBtb2R1bGUgZGljdGlvbmFyaWVzLCB0aGUgbW9kdWxlIGRpY3Rpb25hcnkgd2lsbCBiZSBjbGVhcmVkXG4gICB3aGVuIHRoZSBtb2R1bGUgZmFsbHMgb3V0IG9mIHNjb3BlIGV2ZW4gaWYgdGhlIGRpY3Rpb25hcnkgc3RpbGwgaGFzXG4gICBsaXZlIHJlZmVyZW5jZXMuICBUbyBhdm9pZCB0aGlzLCBjb3B5IHRoZSBkaWN0aW9uYXJ5IG9yIGtlZXAgdGhlXG4gICBtb2R1bGUgYXJvdW5kIHdoaWxlIHVzaW5nIGl0cyBkaWN0aW9uYXJ5IGRpcmVjdGx5LlxuXG4gICBQcmVkZWZpbmVkICh3cml0YWJsZSkgYXR0cmlidXRlczogIl9fbmFtZV9fIiBpcyB0aGUgbW9kdWxlXCdzIG5hbWU7XG4gICAiX19kb2NfXyIgaXMgdGhlIG1vZHVsZVwncyBkb2N1bWVudGF0aW9uIHN0cmluZywgb3IgIk5vbmUiIGlmXG4gICB1bmF2YWlsYWJsZTsgIl9fZmlsZV9fIiBpcyB0aGUgcGF0aG5hbWUgb2YgdGhlIGZpbGUgZnJvbSB3aGljaCB0aGVcbiAgIG1vZHVsZSB3YXMgbG9hZGVkLCBpZiBpdCB3YXMgbG9hZGVkIGZyb20gYSBmaWxlLiBUaGUgIl9fZmlsZV9fIlxuICAgYXR0cmlidXRlIG1heSBiZSBtaXNzaW5nIGZvciBjZXJ0YWluIHR5cGVzIG9mIG1vZHVsZXMsIHN1Y2ggYXMgQ1xuICAgbW9kdWxlcyB0aGF0IGFyZSBzdGF0aWNhbGx5IGxpbmtlZCBpbnRvIHRoZSBpbnRlcnByZXRlcjsgZm9yXG4gICBleHRlbnNpb24gbW9kdWxlcyBsb2FkZWQgZHluYW1pY2FsbHkgZnJvbSBhIHNoYXJlZCBsaWJyYXJ5LCBpdCBpc1xuICAgdGhlIHBhdGhuYW1lIG9mIHRoZSBzaGFyZWQgbGlicmFyeSBmaWxlLlxuXG5DdXN0b20gY2xhc3Nlc1xuICAgQ3VzdG9tIGNsYXNzIHR5cGVzIGFyZSB0eXBpY2FsbHkgY3JlYXRlZCBieSBjbGFzcyBkZWZpbml0aW9ucyAoc2VlXG4gICBzZWN0aW9uICpDbGFzcyBkZWZpbml0aW9ucyopLiAgQSBjbGFzcyBoYXMgYSBuYW1lc3BhY2UgaW1wbGVtZW50ZWRcbiAgIGJ5IGEgZGljdGlvbmFyeSBvYmplY3QuIENsYXNzIGF0dHJpYnV0ZSByZWZlcmVuY2VzIGFyZSB0cmFuc2xhdGVkXG4gICB0byBsb29rdXBzIGluIHRoaXMgZGljdGlvbmFyeSwgZS5nLiwgIkMueCIgaXMgdHJhbnNsYXRlZCB0b1xuICAgIkMuX19kaWN0X19bIngiXSIgKGFsdGhvdWdoIHRoZXJlIGFyZSBhIG51bWJlciBvZiBob29rcyB3aGljaCBhbGxvd1xuICAgZm9yIG90aGVyIG1lYW5zIG9mIGxvY2F0aW5nIGF0dHJpYnV0ZXMpLiBXaGVuIHRoZSBhdHRyaWJ1dGUgbmFtZSBpc1xuICAgbm90IGZvdW5kIHRoZXJlLCB0aGUgYXR0cmlidXRlIHNlYXJjaCBjb250aW51ZXMgaW4gdGhlIGJhc2VcbiAgIGNsYXNzZXMuIFRoaXMgc2VhcmNoIG9mIHRoZSBiYXNlIGNsYXNzZXMgdXNlcyB0aGUgQzMgbWV0aG9kXG4gICByZXNvbHV0aW9uIG9yZGVyIHdoaWNoIGJlaGF2ZXMgY29ycmVjdGx5IGV2ZW4gaW4gdGhlIHByZXNlbmNlIG9mXG4gICBcJ2RpYW1vbmRcJyBpbmhlcml0YW5jZSBzdHJ1Y3R1cmVzIHdoZXJlIHRoZXJlIGFyZSBtdWx0aXBsZVxuICAgaW5oZXJpdGFuY2UgcGF0aHMgbGVhZGluZyBiYWNrIHRvIGEgY29tbW9uIGFuY2VzdG9yLiBBZGRpdGlvbmFsXG4gICBkZXRhaWxzIG9uIHRoZSBDMyBNUk8gdXNlZCBieSBQeXRob24gY2FuIGJlIGZvdW5kIGluIHRoZVxuICAgZG9jdW1lbnRhdGlvbiBhY2NvbXBhbnlpbmcgdGhlIDIuMyByZWxlYXNlIGF0XG4gICBodHRwOi8vd3d3LnB5dGhvbi5vcmcvZG93bmxvYWQvcmVsZWFzZXMvMi4zL21yby8uXG5cbiAgIFdoZW4gYSBjbGFzcyBhdHRyaWJ1dGUgcmVmZXJlbmNlIChmb3IgY2xhc3MgIkMiLCBzYXkpIHdvdWxkIHlpZWxkIGFcbiAgIGNsYXNzIG1ldGhvZCBvYmplY3QsIGl0IGlzIHRyYW5zZm9ybWVkIGludG8gYW4gaW5zdGFuY2UgbWV0aG9kXG4gICBvYmplY3Qgd2hvc2UgIl9fc2VsZl9fIiBhdHRyaWJ1dGVzIGlzICJDIi4gIFdoZW4gaXQgd291bGQgeWllbGQgYVxuICAgc3RhdGljIG1ldGhvZCBvYmplY3QsIGl0IGlzIHRyYW5zZm9ybWVkIGludG8gdGhlIG9iamVjdCB3cmFwcGVkIGJ5XG4gICB0aGUgc3RhdGljIG1ldGhvZCBvYmplY3QuIFNlZSBzZWN0aW9uICpJbXBsZW1lbnRpbmcgRGVzY3JpcHRvcnMqXG4gICBmb3IgYW5vdGhlciB3YXkgaW4gd2hpY2ggYXR0cmlidXRlcyByZXRyaWV2ZWQgZnJvbSBhIGNsYXNzIG1heVxuICAgZGlmZmVyIGZyb20gdGhvc2UgYWN0dWFsbHkgY29udGFpbmVkIGluIGl0cyAiX19kaWN0X18iLlxuXG4gICBDbGFzcyBhdHRyaWJ1dGUgYXNzaWdubWVudHMgdXBkYXRlIHRoZSBjbGFzc1wncyBkaWN0aW9uYXJ5LCBuZXZlclxuICAgdGhlIGRpY3Rpb25hcnkgb2YgYSBiYXNlIGNsYXNzLlxuXG4gICBBIGNsYXNzIG9iamVjdCBjYW4gYmUgY2FsbGVkIChzZWUgYWJvdmUpIHRvIHlpZWxkIGEgY2xhc3MgaW5zdGFuY2VcbiAgIChzZWUgYmVsb3cpLlxuXG4gICBTcGVjaWFsIGF0dHJpYnV0ZXM6ICJfX25hbWVfXyIgaXMgdGhlIGNsYXNzIG5hbWU7ICJfX21vZHVsZV9fIiBpc1xuICAgdGhlIG1vZHVsZSBuYW1lIGluIHdoaWNoIHRoZSBjbGFzcyB3YXMgZGVmaW5lZDsgIl9fZGljdF9fIiBpcyB0aGVcbiAgIGRpY3Rpb25hcnkgY29udGFpbmluZyB0aGUgY2xhc3NcJ3MgbmFtZXNwYWNlOyAiX19iYXNlc19fIiBpcyBhIHR1cGxlXG4gICAocG9zc2libHkgZW1wdHkgb3IgYSBzaW5nbGV0b24pIGNvbnRhaW5pbmcgdGhlIGJhc2UgY2xhc3NlcywgaW4gdGhlXG4gICBvcmRlciBvZiB0aGVpciBvY2N1cnJlbmNlIGluIHRoZSBiYXNlIGNsYXNzIGxpc3Q7ICJfX2RvY19fIiBpcyB0aGVcbiAgIGNsYXNzXCdzIGRvY3VtZW50YXRpb24gc3RyaW5nLCBvciBOb25lIGlmIHVuZGVmaW5lZC5cblxuQ2xhc3MgaW5zdGFuY2VzXG4gICBBIGNsYXNzIGluc3RhbmNlIGlzIGNyZWF0ZWQgYnkgY2FsbGluZyBhIGNsYXNzIG9iamVjdCAoc2VlIGFib3ZlKS5cbiAgIEEgY2xhc3MgaW5zdGFuY2UgaGFzIGEgbmFtZXNwYWNlIGltcGxlbWVudGVkIGFzIGEgZGljdGlvbmFyeSB3aGljaFxuICAgaXMgdGhlIGZpcnN0IHBsYWNlIGluIHdoaWNoIGF0dHJpYnV0ZSByZWZlcmVuY2VzIGFyZSBzZWFyY2hlZC5cbiAgIFdoZW4gYW4gYXR0cmlidXRlIGlzIG5vdCBmb3VuZCB0aGVyZSwgYW5kIHRoZSBpbnN0YW5jZVwncyBjbGFzcyBoYXNcbiAgIGFuIGF0dHJpYnV0ZSBieSB0aGF0IG5hbWUsIHRoZSBzZWFyY2ggY29udGludWVzIHdpdGggdGhlIGNsYXNzXG4gICBhdHRyaWJ1dGVzLiAgSWYgYSBjbGFzcyBhdHRyaWJ1dGUgaXMgZm91bmQgdGhhdCBpcyBhIHVzZXItZGVmaW5lZFxuICAgZnVuY3Rpb24gb2JqZWN0LCBpdCBpcyB0cmFuc2Zvcm1lZCBpbnRvIGFuIGluc3RhbmNlIG1ldGhvZCBvYmplY3RcbiAgIHdob3NlICJfX3NlbGZfXyIgYXR0cmlidXRlIGlzIHRoZSBpbnN0YW5jZS4gIFN0YXRpYyBtZXRob2QgYW5kXG4gICBjbGFzcyBtZXRob2Qgb2JqZWN0cyBhcmUgYWxzbyB0cmFuc2Zvcm1lZDsgc2VlIGFib3ZlIHVuZGVyXG4gICAiQ2xhc3NlcyIuICBTZWUgc2VjdGlvbiAqSW1wbGVtZW50aW5nIERlc2NyaXB0b3JzKiBmb3IgYW5vdGhlciB3YXlcbiAgIGluIHdoaWNoIGF0dHJpYnV0ZXMgb2YgYSBjbGFzcyByZXRyaWV2ZWQgdmlhIGl0cyBpbnN0YW5jZXMgbWF5XG4gICBkaWZmZXIgZnJvbSB0aGUgb2JqZWN0cyBhY3R1YWxseSBzdG9yZWQgaW4gdGhlIGNsYXNzXCdzICJfX2RpY3RfXyIuXG4gICBJZiBubyBjbGFzcyBhdHRyaWJ1dGUgaXMgZm91bmQsIGFuZCB0aGUgb2JqZWN0XCdzIGNsYXNzIGhhcyBhXG4gICAiX19nZXRhdHRyX18oKSIgbWV0aG9kLCB0aGF0IGlzIGNhbGxlZCB0byBzYXRpc2Z5IHRoZSBsb29rdXAuXG5cbiAgIEF0dHJpYnV0ZSBhc3NpZ25tZW50cyBhbmQgZGVsZXRpb25zIHVwZGF0ZSB0aGUgaW5zdGFuY2VcJ3NcbiAgIGRpY3Rpb25hcnksIG5ldmVyIGEgY2xhc3NcJ3MgZGljdGlvbmFyeS4gIElmIHRoZSBjbGFzcyBoYXMgYVxuICAgIl9fc2V0YXR0cl9fKCkiIG9yICJfX2RlbGF0dHJfXygpIiBtZXRob2QsIHRoaXMgaXMgY2FsbGVkIGluc3RlYWRcbiAgIG9mIHVwZGF0aW5nIHRoZSBpbnN0YW5jZSBkaWN0aW9uYXJ5IGRpcmVjdGx5LlxuXG4gICBDbGFzcyBpbnN0YW5jZXMgY2FuIHByZXRlbmQgdG8gYmUgbnVtYmVycywgc2VxdWVuY2VzLCBvciBtYXBwaW5nc1xuICAgaWYgdGhleSBoYXZlIG1ldGhvZHMgd2l0aCBjZXJ0YWluIHNwZWNpYWwgbmFtZXMuICBTZWUgc2VjdGlvblxuICAgKlNwZWNpYWwgbWV0aG9kIG5hbWVzKi5cblxuICAgU3BlY2lhbCBhdHRyaWJ1dGVzOiAiX19kaWN0X18iIGlzIHRoZSBhdHRyaWJ1dGUgZGljdGlvbmFyeTtcbiAgICJfX2NsYXNzX18iIGlzIHRoZSBpbnN0YW5jZVwncyBjbGFzcy5cblxuSS9PIG9iamVjdHMgKGFsc28ga25vd24gYXMgZmlsZSBvYmplY3RzKVxuICAgQSAqZmlsZSBvYmplY3QqIHJlcHJlc2VudHMgYW4gb3BlbiBmaWxlLiAgVmFyaW91cyBzaG9ydGN1dHMgYXJlXG4gICBhdmFpbGFibGUgdG8gY3JlYXRlIGZpbGUgb2JqZWN0czogdGhlICJvcGVuKCkiIGJ1aWx0LWluIGZ1bmN0aW9uLFxuICAgYW5kIGFsc28gIm9zLnBvcGVuKCkiLCAib3MuZmRvcGVuKCkiLCBhbmQgdGhlICJtYWtlZmlsZSgpIiBtZXRob2RcbiAgIG9mIHNvY2tldCBvYmplY3RzIChhbmQgcGVyaGFwcyBieSBvdGhlciBmdW5jdGlvbnMgb3IgbWV0aG9kc1xuICAgcHJvdmlkZWQgYnkgZXh0ZW5zaW9uIG1vZHVsZXMpLlxuXG4gICBUaGUgb2JqZWN0cyAic3lzLnN0ZGluIiwgInN5cy5zdGRvdXQiIGFuZCAic3lzLnN0ZGVyciIgYXJlXG4gICBpbml0aWFsaXplZCB0byBmaWxlIG9iamVjdHMgY29ycmVzcG9uZGluZyB0byB0aGUgaW50ZXJwcmV0ZXJcJ3NcbiAgIHN0YW5kYXJkIGlucHV0LCBvdXRwdXQgYW5kIGVycm9yIHN0cmVhbXM7IHRoZXkgYXJlIGFsbCBvcGVuIGluIHRleHRcbiAgIG1vZGUgYW5kIHRoZXJlZm9yZSBmb2xsb3cgdGhlIGludGVyZmFjZSBkZWZpbmVkIGJ5IHRoZVxuICAgImlvLlRleHRJT0Jhc2UiIGFic3RyYWN0IGNsYXNzLlxuXG5JbnRlcm5hbCB0eXBlc1xuICAgQSBmZXcgdHlwZXMgdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBpbnRlcnByZXRlciBhcmUgZXhwb3NlZCB0byB0aGVcbiAgIHVzZXIuIFRoZWlyIGRlZmluaXRpb25zIG1heSBjaGFuZ2Ugd2l0aCBmdXR1cmUgdmVyc2lvbnMgb2YgdGhlXG4gICBpbnRlcnByZXRlciwgYnV0IHRoZXkgYXJlIG1lbnRpb25lZCBoZXJlIGZvciBjb21wbGV0ZW5lc3MuXG5cbiAgIENvZGUgb2JqZWN0c1xuICAgICAgQ29kZSBvYmplY3RzIHJlcHJlc2VudCAqYnl0ZS1jb21waWxlZCogZXhlY3V0YWJsZSBQeXRob24gY29kZSxcbiAgICAgIG9yICpieXRlY29kZSouIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYSBjb2RlIG9iamVjdCBhbmQgYVxuICAgICAgZnVuY3Rpb24gb2JqZWN0IGlzIHRoYXQgdGhlIGZ1bmN0aW9uIG9iamVjdCBjb250YWlucyBhbiBleHBsaWNpdFxuICAgICAgcmVmZXJlbmNlIHRvIHRoZSBmdW5jdGlvblwncyBnbG9iYWxzICh0aGUgbW9kdWxlIGluIHdoaWNoIGl0IHdhc1xuICAgICAgZGVmaW5lZCksIHdoaWxlIGEgY29kZSBvYmplY3QgY29udGFpbnMgbm8gY29udGV4dDsgYWxzbyB0aGVcbiAgICAgIGRlZmF1bHQgYXJndW1lbnQgdmFsdWVzIGFyZSBzdG9yZWQgaW4gdGhlIGZ1bmN0aW9uIG9iamVjdCwgbm90XG4gICAgICBpbiB0aGUgY29kZSBvYmplY3QgKGJlY2F1c2UgdGhleSByZXByZXNlbnQgdmFsdWVzIGNhbGN1bGF0ZWQgYXRcbiAgICAgIHJ1bi10aW1lKS4gIFVubGlrZSBmdW5jdGlvbiBvYmplY3RzLCBjb2RlIG9iamVjdHMgYXJlIGltbXV0YWJsZVxuICAgICAgYW5kIGNvbnRhaW4gbm8gcmVmZXJlbmNlcyAoZGlyZWN0bHkgb3IgaW5kaXJlY3RseSkgdG8gbXV0YWJsZVxuICAgICAgb2JqZWN0cy5cblxuICAgICAgU3BlY2lhbCByZWFkLW9ubHkgYXR0cmlidXRlczogImNvX25hbWUiIGdpdmVzIHRoZSBmdW5jdGlvbiBuYW1lO1xuICAgICAgImNvX2FyZ2NvdW50IiBpcyB0aGUgbnVtYmVyIG9mIHBvc2l0aW9uYWwgYXJndW1lbnRzIChpbmNsdWRpbmdcbiAgICAgIGFyZ3VtZW50cyB3aXRoIGRlZmF1bHQgdmFsdWVzKTsgImNvX25sb2NhbHMiIGlzIHRoZSBudW1iZXIgb2ZcbiAgICAgIGxvY2FsIHZhcmlhYmxlcyB1c2VkIGJ5IHRoZSBmdW5jdGlvbiAoaW5jbHVkaW5nIGFyZ3VtZW50cyk7XG4gICAgICAiY29fdmFybmFtZXMiIGlzIGEgdHVwbGUgY29udGFpbmluZyB0aGUgbmFtZXMgb2YgdGhlIGxvY2FsXG4gICAgICB2YXJpYWJsZXMgKHN0YXJ0aW5nIHdpdGggdGhlIGFyZ3VtZW50IG5hbWVzKTsgImNvX2NlbGx2YXJzIiBpcyBhXG4gICAgICB0dXBsZSBjb250YWluaW5nIHRoZSBuYW1lcyBvZiBsb2NhbCB2YXJpYWJsZXMgdGhhdCBhcmVcbiAgICAgIHJlZmVyZW5jZWQgYnkgbmVzdGVkIGZ1bmN0aW9uczsgImNvX2ZyZWV2YXJzIiBpcyBhIHR1cGxlXG4gICAgICBjb250YWluaW5nIHRoZSBuYW1lcyBvZiBmcmVlIHZhcmlhYmxlczsgImNvX2NvZGUiIGlzIGEgc3RyaW5nXG4gICAgICByZXByZXNlbnRpbmcgdGhlIHNlcXVlbmNlIG9mIGJ5dGVjb2RlIGluc3RydWN0aW9uczsgImNvX2NvbnN0cyJcbiAgICAgIGlzIGEgdHVwbGUgY29udGFpbmluZyB0aGUgbGl0ZXJhbHMgdXNlZCBieSB0aGUgYnl0ZWNvZGU7XG4gICAgICAiY29fbmFtZXMiIGlzIGEgdHVwbGUgY29udGFpbmluZyB0aGUgbmFtZXMgdXNlZCBieSB0aGUgYnl0ZWNvZGU7XG4gICAgICAiY29fZmlsZW5hbWUiIGlzIHRoZSBmaWxlbmFtZSBmcm9tIHdoaWNoIHRoZSBjb2RlIHdhcyBjb21waWxlZDtcbiAgICAgICJjb19maXJzdGxpbmVubyIgaXMgdGhlIGZpcnN0IGxpbmUgbnVtYmVyIG9mIHRoZSBmdW5jdGlvbjtcbiAgICAgICJjb19sbm90YWIiIGlzIGEgc3RyaW5nIGVuY29kaW5nIHRoZSBtYXBwaW5nIGZyb20gYnl0ZWNvZGVcbiAgICAgIG9mZnNldHMgdG8gbGluZSBudW1iZXJzIChmb3IgZGV0YWlscyBzZWUgdGhlIHNvdXJjZSBjb2RlIG9mIHRoZVxuICAgICAgaW50ZXJwcmV0ZXIpOyAiY29fc3RhY2tzaXplIiBpcyB0aGUgcmVxdWlyZWQgc3RhY2sgc2l6ZVxuICAgICAgKGluY2x1ZGluZyBsb2NhbCB2YXJpYWJsZXMpOyAiY29fZmxhZ3MiIGlzIGFuIGludGVnZXIgZW5jb2RpbmcgYVxuICAgICAgbnVtYmVyIG9mIGZsYWdzIGZvciB0aGUgaW50ZXJwcmV0ZXIuXG5cbiAgICAgIFRoZSBmb2xsb3dpbmcgZmxhZyBiaXRzIGFyZSBkZWZpbmVkIGZvciAiY29fZmxhZ3MiOiBiaXQgIjB4MDQiXG4gICAgICBpcyBzZXQgaWYgdGhlIGZ1bmN0aW9uIHVzZXMgdGhlICIqYXJndW1lbnRzIiBzeW50YXggdG8gYWNjZXB0IGFuXG4gICAgICBhcmJpdHJhcnkgbnVtYmVyIG9mIHBvc2l0aW9uYWwgYXJndW1lbnRzOyBiaXQgIjB4MDgiIGlzIHNldCBpZlxuICAgICAgdGhlIGZ1bmN0aW9uIHVzZXMgdGhlICIqKmtleXdvcmRzIiBzeW50YXggdG8gYWNjZXB0IGFyYml0cmFyeVxuICAgICAga2V5d29yZCBhcmd1bWVudHM7IGJpdCAiMHgyMCIgaXMgc2V0IGlmIHRoZSBmdW5jdGlvbiBpcyBhXG4gICAgICBnZW5lcmF0b3IuXG5cbiAgICAgIEZ1dHVyZSBmZWF0dXJlIGRlY2xhcmF0aW9ucyAoImZyb20gX19mdXR1cmVfXyBpbXBvcnQgZGl2aXNpb24iKVxuICAgICAgYWxzbyB1c2UgYml0cyBpbiAiY29fZmxhZ3MiIHRvIGluZGljYXRlIHdoZXRoZXIgYSBjb2RlIG9iamVjdFxuICAgICAgd2FzIGNvbXBpbGVkIHdpdGggYSBwYXJ0aWN1bGFyIGZlYXR1cmUgZW5hYmxlZDogYml0ICIweDIwMDAiIGlzXG4gICAgICBzZXQgaWYgdGhlIGZ1bmN0aW9uIHdhcyBjb21waWxlZCB3aXRoIGZ1dHVyZSBkaXZpc2lvbiBlbmFibGVkO1xuICAgICAgYml0cyAiMHgxMCIgYW5kICIweDEwMDAiIHdlcmUgdXNlZCBpbiBlYXJsaWVyIHZlcnNpb25zIG9mXG4gICAgICBQeXRob24uXG5cbiAgICAgIE90aGVyIGJpdHMgaW4gImNvX2ZsYWdzIiBhcmUgcmVzZXJ2ZWQgZm9yIGludGVybmFsIHVzZS5cblxuICAgICAgSWYgYSBjb2RlIG9iamVjdCByZXByZXNlbnRzIGEgZnVuY3Rpb24sIHRoZSBmaXJzdCBpdGVtIGluXG4gICAgICAiY29fY29uc3RzIiBpcyB0aGUgZG9jdW1lbnRhdGlvbiBzdHJpbmcgb2YgdGhlIGZ1bmN0aW9uLCBvclxuICAgICAgIk5vbmUiIGlmIHVuZGVmaW5lZC5cblxuICAgRnJhbWUgb2JqZWN0c1xuICAgICAgRnJhbWUgb2JqZWN0cyByZXByZXNlbnQgZXhlY3V0aW9uIGZyYW1lcy4gIFRoZXkgbWF5IG9jY3VyIGluXG4gICAgICB0cmFjZWJhY2sgb2JqZWN0cyAoc2VlIGJlbG93KS5cblxuICAgICAgU3BlY2lhbCByZWFkLW9ubHkgYXR0cmlidXRlczogImZfYmFjayIgaXMgdG8gdGhlIHByZXZpb3VzIHN0YWNrXG4gICAgICBmcmFtZSAodG93YXJkcyB0aGUgY2FsbGVyKSwgb3IgIk5vbmUiIGlmIHRoaXMgaXMgdGhlIGJvdHRvbVxuICAgICAgc3RhY2sgZnJhbWU7ICJmX2NvZGUiIGlzIHRoZSBjb2RlIG9iamVjdCBiZWluZyBleGVjdXRlZCBpbiB0aGlzXG4gICAgICBmcmFtZTsgImZfbG9jYWxzIiBpcyB0aGUgZGljdGlvbmFyeSB1c2VkIHRvIGxvb2sgdXAgbG9jYWxcbiAgICAgIHZhcmlhYmxlczsgImZfZ2xvYmFscyIgaXMgdXNlZCBmb3IgZ2xvYmFsIHZhcmlhYmxlcztcbiAgICAgICJmX2J1aWx0aW5zIiBpcyB1c2VkIGZvciBidWlsdC1pbiAoaW50cmluc2ljKSBuYW1lczsgImZfbGFzdGkiXG4gICAgICBnaXZlcyB0aGUgcHJlY2lzZSBpbnN0cnVjdGlvbiAodGhpcyBpcyBhbiBpbmRleCBpbnRvIHRoZVxuICAgICAgYnl0ZWNvZGUgc3RyaW5nIG9mIHRoZSBjb2RlIG9iamVjdCkuXG5cbiAgICAgIFNwZWNpYWwgd3JpdGFibGUgYXR0cmlidXRlczogImZfdHJhY2UiLCBpZiBub3QgIk5vbmUiLCBpcyBhXG4gICAgICBmdW5jdGlvbiBjYWxsZWQgYXQgdGhlIHN0YXJ0IG9mIGVhY2ggc291cmNlIGNvZGUgbGluZSAodGhpcyBpc1xuICAgICAgdXNlZCBieSB0aGUgZGVidWdnZXIpOyAiZl9saW5lbm8iIGlzIHRoZSBjdXJyZW50IGxpbmUgbnVtYmVyIG9mXG4gICAgICB0aGUgZnJhbWUgLS0tIHdyaXRpbmcgdG8gdGhpcyBmcm9tIHdpdGhpbiBhIHRyYWNlIGZ1bmN0aW9uIGp1bXBzXG4gICAgICB0byB0aGUgZ2l2ZW4gbGluZSAob25seSBmb3IgdGhlIGJvdHRvbS1tb3N0IGZyYW1lKS4gIEEgZGVidWdnZXJcbiAgICAgIGNhbiBpbXBsZW1lbnQgYSBKdW1wIGNvbW1hbmQgKGFrYSBTZXQgTmV4dCBTdGF0ZW1lbnQpIGJ5IHdyaXRpbmdcbiAgICAgIHRvIGZfbGluZW5vLlxuXG4gICBUcmFjZWJhY2sgb2JqZWN0c1xuICAgICAgVHJhY2ViYWNrIG9iamVjdHMgcmVwcmVzZW50IGEgc3RhY2sgdHJhY2Ugb2YgYW4gZXhjZXB0aW9uLiAgQVxuICAgICAgdHJhY2ViYWNrIG9iamVjdCBpcyBjcmVhdGVkIHdoZW4gYW4gZXhjZXB0aW9uIG9jY3Vycy4gIFdoZW4gdGhlXG4gICAgICBzZWFyY2ggZm9yIGFuIGV4Y2VwdGlvbiBoYW5kbGVyIHVud2luZHMgdGhlIGV4ZWN1dGlvbiBzdGFjaywgYXRcbiAgICAgIGVhY2ggdW53b3VuZCBsZXZlbCBhIHRyYWNlYmFjayBvYmplY3QgaXMgaW5zZXJ0ZWQgaW4gZnJvbnQgb2ZcbiAgICAgIHRoZSBjdXJyZW50IHRyYWNlYmFjay4gIFdoZW4gYW4gZXhjZXB0aW9uIGhhbmRsZXIgaXMgZW50ZXJlZCxcbiAgICAgIHRoZSBzdGFjayB0cmFjZSBpcyBtYWRlIGF2YWlsYWJsZSB0byB0aGUgcHJvZ3JhbS4gKFNlZSBzZWN0aW9uXG4gICAgICAqVGhlIHRyeSBzdGF0ZW1lbnQqLikgSXQgaXMgYWNjZXNzaWJsZSBhcyB0aGUgdGhpcmQgaXRlbSBvZiB0aGVcbiAgICAgIHR1cGxlIHJldHVybmVkIGJ5ICJzeXMuZXhjX2luZm8oKSIuIFdoZW4gdGhlIHByb2dyYW0gY29udGFpbnMgbm9cbiAgICAgIHN1aXRhYmxlIGhhbmRsZXIsIHRoZSBzdGFjayB0cmFjZSBpcyB3cml0dGVuIChuaWNlbHkgZm9ybWF0dGVkKVxuICAgICAgdG8gdGhlIHN0YW5kYXJkIGVycm9yIHN0cmVhbTsgaWYgdGhlIGludGVycHJldGVyIGlzIGludGVyYWN0aXZlLFxuICAgICAgaXQgaXMgYWxzbyBtYWRlIGF2YWlsYWJsZSB0byB0aGUgdXNlciBhcyAic3lzLmxhc3RfdHJhY2ViYWNrIi5cblxuICAgICAgU3BlY2lhbCByZWFkLW9ubHkgYXR0cmlidXRlczogInRiX25leHQiIGlzIHRoZSBuZXh0IGxldmVsIGluIHRoZVxuICAgICAgc3RhY2sgdHJhY2UgKHRvd2FyZHMgdGhlIGZyYW1lIHdoZXJlIHRoZSBleGNlcHRpb24gb2NjdXJyZWQpLCBvclxuICAgICAgIk5vbmUiIGlmIHRoZXJlIGlzIG5vIG5leHQgbGV2ZWw7ICJ0Yl9mcmFtZSIgcG9pbnRzIHRvIHRoZVxuICAgICAgZXhlY3V0aW9uIGZyYW1lIG9mIHRoZSBjdXJyZW50IGxldmVsOyAidGJfbGluZW5vIiBnaXZlcyB0aGUgbGluZVxuICAgICAgbnVtYmVyIHdoZXJlIHRoZSBleGNlcHRpb24gb2NjdXJyZWQ7ICJ0Yl9sYXN0aSIgaW5kaWNhdGVzIHRoZVxuICAgICAgcHJlY2lzZSBpbnN0cnVjdGlvbi4gIFRoZSBsaW5lIG51bWJlciBhbmQgbGFzdCBpbnN0cnVjdGlvbiBpblxuICAgICAgdGhlIHRyYWNlYmFjayBtYXkgZGlmZmVyIGZyb20gdGhlIGxpbmUgbnVtYmVyIG9mIGl0cyBmcmFtZVxuICAgICAgb2JqZWN0IGlmIHRoZSBleGNlcHRpb24gb2NjdXJyZWQgaW4gYSAidHJ5IiBzdGF0ZW1lbnQgd2l0aCBub1xuICAgICAgbWF0Y2hpbmcgZXhjZXB0IGNsYXVzZSBvciB3aXRoIGEgZmluYWxseSBjbGF1c2UuXG5cbiAgIFNsaWNlIG9iamVjdHNcbiAgICAgIFNsaWNlIG9iamVjdHMgYXJlIHVzZWQgdG8gcmVwcmVzZW50IHNsaWNlcyBmb3IgIl9fZ2V0aXRlbV9fKCkiXG4gICAgICBtZXRob2RzLiAgVGhleSBhcmUgYWxzbyBjcmVhdGVkIGJ5IHRoZSBidWlsdC1pbiAic2xpY2UoKSJcbiAgICAgIGZ1bmN0aW9uLlxuXG4gICAgICBTcGVjaWFsIHJlYWQtb25seSBhdHRyaWJ1dGVzOiAic3RhcnQiIGlzIHRoZSBsb3dlciBib3VuZDsgInN0b3AiXG4gICAgICBpcyB0aGUgdXBwZXIgYm91bmQ7ICJzdGVwIiBpcyB0aGUgc3RlcCB2YWx1ZTsgZWFjaCBpcyAiTm9uZSIgaWZcbiAgICAgIG9taXR0ZWQuICBUaGVzZSBhdHRyaWJ1dGVzIGNhbiBoYXZlIGFueSB0eXBlLlxuXG4gICAgICBTbGljZSBvYmplY3RzIHN1cHBvcnQgb25lIG1ldGhvZDpcblxuICAgICAgc2xpY2UuaW5kaWNlcyhzZWxmLCBsZW5ndGgpXG5cbiAgICAgICAgIFRoaXMgbWV0aG9kIHRha2VzIGEgc2luZ2xlIGludGVnZXIgYXJndW1lbnQgKmxlbmd0aCogYW5kXG4gICAgICAgICBjb21wdXRlcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc2xpY2UgdGhhdCB0aGUgc2xpY2Ugb2JqZWN0XG4gICAgICAgICB3b3VsZCBkZXNjcmliZSBpZiBhcHBsaWVkIHRvIGEgc2VxdWVuY2Ugb2YgKmxlbmd0aCogaXRlbXMuXG4gICAgICAgICBJdCByZXR1cm5zIGEgdHVwbGUgb2YgdGhyZWUgaW50ZWdlcnM7IHJlc3BlY3RpdmVseSB0aGVzZSBhcmVcbiAgICAgICAgIHRoZSAqc3RhcnQqIGFuZCAqc3RvcCogaW5kaWNlcyBhbmQgdGhlICpzdGVwKiBvciBzdHJpZGVcbiAgICAgICAgIGxlbmd0aCBvZiB0aGUgc2xpY2UuIE1pc3Npbmcgb3Igb3V0LW9mLWJvdW5kcyBpbmRpY2VzIGFyZVxuICAgICAgICAgaGFuZGxlZCBpbiBhIG1hbm5lciBjb25zaXN0ZW50IHdpdGggcmVndWxhciBzbGljZXMuXG5cbiAgIFN0YXRpYyBtZXRob2Qgb2JqZWN0c1xuICAgICAgU3RhdGljIG1ldGhvZCBvYmplY3RzIHByb3ZpZGUgYSB3YXkgb2YgZGVmZWF0aW5nIHRoZVxuICAgICAgdHJhbnNmb3JtYXRpb24gb2YgZnVuY3Rpb24gb2JqZWN0cyB0byBtZXRob2Qgb2JqZWN0cyBkZXNjcmliZWRcbiAgICAgIGFib3ZlLiBBIHN0YXRpYyBtZXRob2Qgb2JqZWN0IGlzIGEgd3JhcHBlciBhcm91bmQgYW55IG90aGVyXG4gICAgICBvYmplY3QsIHVzdWFsbHkgYSB1c2VyLWRlZmluZWQgbWV0aG9kIG9iamVjdC4gV2hlbiBhIHN0YXRpY1xuICAgICAgbWV0aG9kIG9iamVjdCBpcyByZXRyaWV2ZWQgZnJvbSBhIGNsYXNzIG9yIGEgY2xhc3MgaW5zdGFuY2UsIHRoZVxuICAgICAgb2JqZWN0IGFjdHVhbGx5IHJldHVybmVkIGlzIHRoZSB3cmFwcGVkIG9iamVjdCwgd2hpY2ggaXMgbm90XG4gICAgICBzdWJqZWN0IHRvIGFueSBmdXJ0aGVyIHRyYW5zZm9ybWF0aW9uLiBTdGF0aWMgbWV0aG9kIG9iamVjdHMgYXJlXG4gICAgICBub3QgdGhlbXNlbHZlcyBjYWxsYWJsZSwgYWx0aG91Z2ggdGhlIG9iamVjdHMgdGhleSB3cmFwIHVzdWFsbHlcbiAgICAgIGFyZS4gU3RhdGljIG1ldGhvZCBvYmplY3RzIGFyZSBjcmVhdGVkIGJ5IHRoZSBidWlsdC1pblxuICAgICAgInN0YXRpY21ldGhvZCgpIiBjb25zdHJ1Y3Rvci5cblxuICAgQ2xhc3MgbWV0aG9kIG9iamVjdHNcbiAgICAgIEEgY2xhc3MgbWV0aG9kIG9iamVjdCwgbGlrZSBhIHN0YXRpYyBtZXRob2Qgb2JqZWN0LCBpcyBhIHdyYXBwZXJcbiAgICAgIGFyb3VuZCBhbm90aGVyIG9iamVjdCB0aGF0IGFsdGVycyB0aGUgd2F5IGluIHdoaWNoIHRoYXQgb2JqZWN0XG4gICAgICBpcyByZXRyaWV2ZWQgZnJvbSBjbGFzc2VzIGFuZCBjbGFzcyBpbnN0YW5jZXMuIFRoZSBiZWhhdmlvdXIgb2ZcbiAgICAgIGNsYXNzIG1ldGhvZCBvYmplY3RzIHVwb24gc3VjaCByZXRyaWV2YWwgaXMgZGVzY3JpYmVkIGFib3ZlLFxuICAgICAgdW5kZXIgIlVzZXItZGVmaW5lZCBtZXRob2RzIi4gQ2xhc3MgbWV0aG9kIG9iamVjdHMgYXJlIGNyZWF0ZWRcbiAgICAgIGJ5IHRoZSBidWlsdC1pbiAiY2xhc3NtZXRob2QoKSIgY29uc3RydWN0b3IuXG4nLAotICd0eXBlc2Z1bmN0aW9ucyc6ICdcbkZ1bmN0aW9uc1xuKioqKioqKioqXG5cbkZ1bmN0aW9uIG9iamVjdHMgYXJlIGNyZWF0ZWQgYnkgZnVuY3Rpb24gZGVmaW5pdGlvbnMuICBUaGUgb25seVxub3BlcmF0aW9uIG9uIGEgZnVuY3Rpb24gb2JqZWN0IGlzIHRvIGNhbGwgaXQ6ICJmdW5jKGFyZ3VtZW50LWxpc3QpIi5cblxuVGhlcmUgYXJlIHJlYWxseSB0d28gZmxhdm9ycyBvZiBmdW5jdGlvbiBvYmplY3RzOiBidWlsdC1pbiBmdW5jdGlvbnNcbmFuZCB1c2VyLWRlZmluZWQgZnVuY3Rpb25zLiAgQm90aCBzdXBwb3J0IHRoZSBzYW1lIG9wZXJhdGlvbiAodG8gY2FsbFxudGhlIGZ1bmN0aW9uKSwgYnV0IHRoZSBpbXBsZW1lbnRhdGlvbiBpcyBkaWZmZXJlbnQsIGhlbmNlIHRoZVxuZGlmZmVyZW50IG9iamVjdCB0eXBlcy5cblxuU2VlICpGdW5jdGlvbiBkZWZpbml0aW9ucyogZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4nLAotICd0eXBlc21hcHBpbmcnOiAnXG5NYXBwaW5nIFR5cGVzIC0tLSAiZGljdCJcbioqKioqKioqKioqKioqKioqKioqKioqKlxuXG5BICptYXBwaW5nKiBvYmplY3QgbWFwcyAqaGFzaGFibGUqIHZhbHVlcyB0byBhcmJpdHJhcnkgb2JqZWN0cy5cbk1hcHBpbmdzIGFyZSBtdXRhYmxlIG9iamVjdHMuICBUaGVyZSBpcyBjdXJyZW50bHkgb25seSBvbmUgc3RhbmRhcmRcbm1hcHBpbmcgdHlwZSwgdGhlICpkaWN0aW9uYXJ5Ki4gIChGb3Igb3RoZXIgY29udGFpbmVycyBzZWUgdGhlIGJ1aWx0LVxuaW4gImxpc3QiLCAic2V0IiwgYW5kICJ0dXBsZSIgY2xhc3NlcywgYW5kIHRoZSAiY29sbGVjdGlvbnMiIG1vZHVsZS4pXG5cbkEgZGljdGlvbmFyeVwncyBrZXlzIGFyZSAqYWxtb3N0KiBhcmJpdHJhcnkgdmFsdWVzLiAgVmFsdWVzIHRoYXQgYXJlXG5ub3QgKmhhc2hhYmxlKiwgdGhhdCBpcywgdmFsdWVzIGNvbnRhaW5pbmcgbGlzdHMsIGRpY3Rpb25hcmllcyBvclxub3RoZXIgbXV0YWJsZSB0eXBlcyAodGhhdCBhcmUgY29tcGFyZWQgYnkgdmFsdWUgcmF0aGVyIHRoYW4gYnkgb2JqZWN0XG5pZGVudGl0eSkgbWF5IG5vdCBiZSB1c2VkIGFzIGtleXMuICBOdW1lcmljIHR5cGVzIHVzZWQgZm9yIGtleXMgb2JleVxudGhlIG5vcm1hbCBydWxlcyBmb3IgbnVtZXJpYyBjb21wYXJpc29uOiBpZiB0d28gbnVtYmVycyBjb21wYXJlIGVxdWFsXG4oc3VjaCBhcyAiMSIgYW5kICIxLjAiKSB0aGVuIHRoZXkgY2FuIGJlIHVzZWQgaW50ZXJjaGFuZ2VhYmx5IHRvIGluZGV4XG50aGUgc2FtZSBkaWN0aW9uYXJ5IGVudHJ5LiAgKE5vdGUgaG93ZXZlciwgdGhhdCBzaW5jZSBjb21wdXRlcnMgc3RvcmVcbmZsb2F0aW5nLXBvaW50IG51bWJlcnMgYXMgYXBwcm94aW1hdGlvbnMgaXQgaXMgdXN1YWxseSB1bndpc2UgdG8gdXNlXG50aGVtIGFzIGRpY3Rpb25hcnkga2V5cy4pXG5cbkRpY3Rpb25hcmllcyBjYW4gYmUgY3JlYXRlZCBieSBwbGFjaW5nIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgImtleTpcbnZhbHVlIiBwYWlycyB3aXRoaW4gYnJhY2VzLCBmb3IgZXhhbXBsZTogIntcJ2phY2tcJzogNDA5OCwgXCdzam9lcmRcJzpcbjQxMjd9IiBvciAiezQwOTg6IFwnamFja1wnLCA0MTI3OiBcJ3Nqb2VyZFwnfSIsIG9yIGJ5IHRoZSAiZGljdCJcbmNvbnN0cnVjdG9yLlxuXG5jbGFzcyBjbGFzcyBkaWN0KCoqa3dhcmcpXG5jbGFzcyBjbGFzcyBkaWN0KG1hcHBpbmcsICoqa3dhcmcpXG5jbGFzcyBjbGFzcyBkaWN0KGl0ZXJhYmxlLCAqKmt3YXJnKVxuXG4gICBSZXR1cm4gYSBuZXcgZGljdGlvbmFyeSBpbml0aWFsaXplZCBmcm9tIGFuIG9wdGlvbmFsIHBvc2l0aW9uYWxcbiAgIGFyZ3VtZW50IGFuZCBhIHBvc3NpYmx5IGVtcHR5IHNldCBvZiBrZXl3b3JkIGFyZ3VtZW50cy5cblxuICAgSWYgbm8gcG9zaXRpb25hbCBhcmd1bWVudCBpcyBnaXZlbiwgYW4gZW1wdHkgZGljdGlvbmFyeSBpcyBjcmVhdGVkLlxuICAgSWYgYSBwb3NpdGlvbmFsIGFyZ3VtZW50IGlzIGdpdmVuIGFuZCBpdCBpcyBhIG1hcHBpbmcgb2JqZWN0LCBhXG4gICBkaWN0aW9uYXJ5IGlzIGNyZWF0ZWQgd2l0aCB0aGUgc2FtZSBrZXktdmFsdWUgcGFpcnMgYXMgdGhlIG1hcHBpbmdcbiAgIG9iamVjdC4gIE90aGVyd2lzZSwgdGhlIHBvc2l0aW9uYWwgYXJndW1lbnQgbXVzdCBiZSBhbiAqaXRlcmF0b3IqXG4gICBvYmplY3QuICBFYWNoIGl0ZW0gaW4gdGhlIGl0ZXJhYmxlIG11c3QgaXRzZWxmIGJlIGFuIGl0ZXJhdG9yIHdpdGhcbiAgIGV4YWN0bHkgdHdvIG9iamVjdHMuICBUaGUgZmlyc3Qgb2JqZWN0IG9mIGVhY2ggaXRlbSBiZWNvbWVzIGEga2V5XG4gICBpbiB0aGUgbmV3IGRpY3Rpb25hcnksIGFuZCB0aGUgc2Vjb25kIG9iamVjdCB0aGUgY29ycmVzcG9uZGluZ1xuICAgdmFsdWUuICBJZiBhIGtleSBvY2N1cnMgbW9yZSB0aGFuIG9uY2UsIHRoZSBsYXN0IHZhbHVlIGZvciB0aGF0IGtleVxuICAgYmVjb21lcyB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZSBpbiB0aGUgbmV3IGRpY3Rpb25hcnkuXG5cbiAgIElmIGtleXdvcmQgYXJndW1lbnRzIGFyZSBnaXZlbiwgdGhlIGtleXdvcmQgYXJndW1lbnRzIGFuZCB0aGVpclxuICAgdmFsdWVzIGFyZSBhZGRlZCB0byB0aGUgZGljdGlvbmFyeSBjcmVhdGVkIGZyb20gdGhlIHBvc2l0aW9uYWxcbiAgIGFyZ3VtZW50LiAgSWYgYSBrZXkgYmVpbmcgYWRkZWQgaXMgYWxyZWFkeSBwcmVzZW50LCB0aGUgdmFsdWUgZnJvbVxuICAgdGhlIGtleXdvcmQgYXJndW1lbnQgcmVwbGFjZXMgdGhlIHZhbHVlIGZyb20gdGhlIHBvc2l0aW9uYWxcbiAgIGFyZ3VtZW50LlxuXG4gICBUbyBpbGx1c3RyYXRlLCB0aGUgZm9sbG93aW5nIGV4YW1wbGVzIGFsbCByZXR1cm4gYSBkaWN0aW9uYXJ5IGVxdWFsXG4gICB0byAieyJvbmUiOiAxLCAidHdvIjogMiwgInRocmVlIjogM30iOlxuXG4gICAgICA+Pj4gYSA9IGRpY3Qob25lPTEsIHR3bz0yLCB0aHJlZT0zKVxuICAgICAgPj4+IGIgPSB7XCdvbmVcJzogMSwgXCd0d29cJzogMiwgXCd0aHJlZVwnOiAzfVxuICAgICAgPj4+IGMgPSBkaWN0KHppcChbXCdvbmVcJywgXCd0d29cJywgXCd0aHJlZVwnXSwgWzEsIDIsIDNdKSlcbiAgICAgID4+PiBkID0gZGljdChbKFwndHdvXCcsIDIpLCAoXCdvbmVcJywgMSksIChcJ3RocmVlXCcsIDMpXSlcbiAgICAgID4+PiBlID0gZGljdCh7XCd0aHJlZVwnOiAzLCBcJ29uZVwnOiAxLCBcJ3R3b1wnOiAyfSlcbiAgICAgID4+PiBhID09IGIgPT0gYyA9PSBkID09IGVcbiAgICAgIFRydWVcblxuICAgUHJvdmlkaW5nIGtleXdvcmQgYXJndW1lbnRzIGFzIGluIHRoZSBmaXJzdCBleGFtcGxlIG9ubHkgd29ya3MgZm9yXG4gICBrZXlzIHRoYXQgYXJlIHZhbGlkIFB5dGhvbiBpZGVudGlmaWVycy4gIE90aGVyd2lzZSwgYW55IHZhbGlkIGtleXNcbiAgIGNhbiBiZSB1c2VkLlxuXG4gICBUaGVzZSBhcmUgdGhlIG9wZXJhdGlvbnMgdGhhdCBkaWN0aW9uYXJpZXMgc3VwcG9ydCAoYW5kIHRoZXJlZm9yZSxcbiAgIGN1c3RvbSBtYXBwaW5nIHR5cGVzIHNob3VsZCBzdXBwb3J0IHRvbyk6XG5cbiAgIGxlbihkKVxuXG4gICAgICBSZXR1cm4gdGhlIG51bWJlciBvZiBpdGVtcyBpbiB0aGUgZGljdGlvbmFyeSAqZCouXG5cbiAgIGRba2V5XVxuXG4gICAgICBSZXR1cm4gdGhlIGl0ZW0gb2YgKmQqIHdpdGgga2V5ICprZXkqLiAgUmFpc2VzIGEgIktleUVycm9yIiBpZlxuICAgICAgKmtleSogaXMgbm90IGluIHRoZSBtYXAuXG5cbiAgICAgIElmIGEgc3ViY2xhc3Mgb2YgZGljdCBkZWZpbmVzIGEgbWV0aG9kICJfX21pc3NpbmdfXygpIiwgaWYgdGhlXG4gICAgICBrZXkgKmtleSogaXMgbm90IHByZXNlbnQsIHRoZSAiZFtrZXldIiBvcGVyYXRpb24gY2FsbHMgdGhhdFxuICAgICAgbWV0aG9kIHdpdGggdGhlIGtleSAqa2V5KiBhcyBhcmd1bWVudC4gIFRoZSAiZFtrZXldIiBvcGVyYXRpb25cbiAgICAgIHRoZW4gcmV0dXJucyBvciByYWlzZXMgd2hhdGV2ZXIgaXMgcmV0dXJuZWQgb3IgcmFpc2VkIGJ5IHRoZVxuICAgICAgIl9fbWlzc2luZ19fKGtleSkiIGNhbGwgaWYgdGhlIGtleSBpcyBub3QgcHJlc2VudC4gTm8gb3RoZXJcbiAgICAgIG9wZXJhdGlvbnMgb3IgbWV0aG9kcyBpbnZva2UgIl9fbWlzc2luZ19fKCkiLiBJZiAiX19taXNzaW5nX18oKSJcbiAgICAgIGlzIG5vdCBkZWZpbmVkLCAiS2V5RXJyb3IiIGlzIHJhaXNlZC4gIl9fbWlzc2luZ19fKCkiIG11c3QgYmUgYVxuICAgICAgbWV0aG9kOyBpdCBjYW5ub3QgYmUgYW4gaW5zdGFuY2UgdmFyaWFibGU6XG5cbiAgICAgICAgID4+PiBjbGFzcyBDb3VudGVyKGRpY3QpOlxuICAgICAgICAgLi4uICAgICBkZWYgX19taXNzaW5nX18oc2VsZiwga2V5KTpcbiAgICAgICAgIC4uLiAgICAgICAgIHJldHVybiAwXG4gICAgICAgICA+Pj4gYyA9IENvdW50ZXIoKVxuICAgICAgICAgPj4+IGNbXCdyZWRcJ11cbiAgICAgICAgIDBcbiAgICAgICAgID4+PiBjW1wncmVkXCddICs9IDFcbiAgICAgICAgID4+PiBjW1wncmVkXCddXG4gICAgICAgICAxXG5cbiAgICAgIFNlZSAiY29sbGVjdGlvbnMuQ291bnRlciIgZm9yIGEgY29tcGxldGUgaW1wbGVtZW50YXRpb25cbiAgICAgIGluY2x1ZGluZyBvdGhlciBtZXRob2RzIGhlbHBmdWwgZm9yIGFjY3VtdWxhdGluZyBhbmQgbWFuYWdpbmdcbiAgICAgIHRhbGxpZXMuXG5cbiAgIGRba2V5XSA9IHZhbHVlXG5cbiAgICAgIFNldCAiZFtrZXldIiB0byAqdmFsdWUqLlxuXG4gICBkZWwgZFtrZXldXG5cbiAgICAgIFJlbW92ZSAiZFtrZXldIiBmcm9tICpkKi4gIFJhaXNlcyBhICJLZXlFcnJvciIgaWYgKmtleSogaXMgbm90XG4gICAgICBpbiB0aGUgbWFwLlxuXG4gICBrZXkgaW4gZFxuXG4gICAgICBSZXR1cm4gIlRydWUiIGlmICpkKiBoYXMgYSBrZXkgKmtleSosIGVsc2UgIkZhbHNlIi5cblxuICAga2V5IG5vdCBpbiBkXG5cbiAgICAgIEVxdWl2YWxlbnQgdG8gIm5vdCBrZXkgaW4gZCIuXG5cbiAgIGl0ZXIoZClcblxuICAgICAgUmV0dXJuIGFuIGl0ZXJhdG9yIG92ZXIgdGhlIGtleXMgb2YgdGhlIGRpY3Rpb25hcnkuICBUaGlzIGlzIGFcbiAgICAgIHNob3J0Y3V0IGZvciAiaXRlcihkLmtleXMoKSkiLlxuXG4gICBjbGVhcigpXG5cbiAgICAgIFJlbW92ZSBhbGwgaXRlbXMgZnJvbSB0aGUgZGljdGlvbmFyeS5cblxuICAgY29weSgpXG5cbiAgICAgIFJldHVybiBhIHNoYWxsb3cgY29weSBvZiB0aGUgZGljdGlvbmFyeS5cblxuICAgY2xhc3NtZXRob2QgZnJvbWtleXMoc2VxWywgdmFsdWVdKVxuXG4gICAgICBDcmVhdGUgYSBuZXcgZGljdGlvbmFyeSB3aXRoIGtleXMgZnJvbSAqc2VxKiBhbmQgdmFsdWVzIHNldCB0b1xuICAgICAgKnZhbHVlKi5cblxuICAgICAgImZyb21rZXlzKCkiIGlzIGEgY2xhc3MgbWV0aG9kIHRoYXQgcmV0dXJucyBhIG5ldyBkaWN0aW9uYXJ5LlxuICAgICAgKnZhbHVlKiBkZWZhdWx0cyB0byAiTm9uZSIuXG5cbiAgIGdldChrZXlbLCBkZWZhdWx0XSlcblxuICAgICAgUmV0dXJuIHRoZSB2YWx1ZSBmb3IgKmtleSogaWYgKmtleSogaXMgaW4gdGhlIGRpY3Rpb25hcnksIGVsc2VcbiAgICAgICpkZWZhdWx0Ki4gSWYgKmRlZmF1bHQqIGlzIG5vdCBnaXZlbiwgaXQgZGVmYXVsdHMgdG8gIk5vbmUiLCBzb1xuICAgICAgdGhhdCB0aGlzIG1ldGhvZCBuZXZlciByYWlzZXMgYSAiS2V5RXJyb3IiLlxuXG4gICBpdGVtcygpXG5cbiAgICAgIFJldHVybiBhIG5ldyB2aWV3IG9mIHRoZSBkaWN0aW9uYXJ5XCdzIGl0ZW1zICgiKGtleSwgdmFsdWUpIlxuICAgICAgcGFpcnMpLiBTZWUgdGhlICpkb2N1bWVudGF0aW9uIG9mIHZpZXcgb2JqZWN0cyouXG5cbiAgIGtleXMoKVxuXG4gICAgICBSZXR1cm4gYSBuZXcgdmlldyBvZiB0aGUgZGljdGlvbmFyeVwncyBrZXlzLiAgU2VlIHRoZVxuICAgICAgKmRvY3VtZW50YXRpb24gb2YgdmlldyBvYmplY3RzKi5cblxuICAgcG9wKGtleVssIGRlZmF1bHRdKVxuXG4gICAgICBJZiAqa2V5KiBpcyBpbiB0aGUgZGljdGlvbmFyeSwgcmVtb3ZlIGl0IGFuZCByZXR1cm4gaXRzIHZhbHVlLFxuICAgICAgZWxzZSByZXR1cm4gKmRlZmF1bHQqLiAgSWYgKmRlZmF1bHQqIGlzIG5vdCBnaXZlbiBhbmQgKmtleSogaXNcbiAgICAgIG5vdCBpbiB0aGUgZGljdGlvbmFyeSwgYSAiS2V5RXJyb3IiIGlzIHJhaXNlZC5cblxuICAgcG9waXRlbSgpXG5cbiAgICAgIFJlbW92ZSBhbmQgcmV0dXJuIGFuIGFyYml0cmFyeSAiKGtleSwgdmFsdWUpIiBwYWlyIGZyb20gdGhlXG4gICAgICBkaWN0aW9uYXJ5LlxuXG4gICAgICAicG9waXRlbSgpIiBpcyB1c2VmdWwgdG8gZGVzdHJ1Y3RpdmVseSBpdGVyYXRlIG92ZXIgYVxuICAgICAgZGljdGlvbmFyeSwgYXMgb2Z0ZW4gdXNlZCBpbiBzZXQgYWxnb3JpdGhtcy4gIElmIHRoZSBkaWN0aW9uYXJ5XG4gICAgICBpcyBlbXB0eSwgY2FsbGluZyAicG9waXRlbSgpIiByYWlzZXMgYSAiS2V5RXJyb3IiLlxuXG4gICBzZXRkZWZhdWx0KGtleVssIGRlZmF1bHRdKVxuXG4gICAgICBJZiAqa2V5KiBpcyBpbiB0aGUgZGljdGlvbmFyeSwgcmV0dXJuIGl0cyB2YWx1ZS4gIElmIG5vdCwgaW5zZXJ0XG4gICAgICAqa2V5KiB3aXRoIGEgdmFsdWUgb2YgKmRlZmF1bHQqIGFuZCByZXR1cm4gKmRlZmF1bHQqLiAgKmRlZmF1bHQqXG4gICAgICBkZWZhdWx0cyB0byAiTm9uZSIuXG5cbiAgIHVwZGF0ZShbb3RoZXJdKVxuXG4gICAgICBVcGRhdGUgdGhlIGRpY3Rpb25hcnkgd2l0aCB0aGUga2V5L3ZhbHVlIHBhaXJzIGZyb20gKm90aGVyKixcbiAgICAgIG92ZXJ3cml0aW5nIGV4aXN0aW5nIGtleXMuICBSZXR1cm4gIk5vbmUiLlxuXG4gICAgICAidXBkYXRlKCkiIGFjY2VwdHMgZWl0aGVyIGFub3RoZXIgZGljdGlvbmFyeSBvYmplY3Qgb3IgYW5cbiAgICAgIGl0ZXJhYmxlIG9mIGtleS92YWx1ZSBwYWlycyAoYXMgdHVwbGVzIG9yIG90aGVyIGl0ZXJhYmxlcyBvZlxuICAgICAgbGVuZ3RoIHR3bykuICBJZiBrZXl3b3JkIGFyZ3VtZW50cyBhcmUgc3BlY2lmaWVkLCB0aGUgZGljdGlvbmFyeVxuICAgICAgaXMgdGhlbiB1cGRhdGVkIHdpdGggdGhvc2Uga2V5L3ZhbHVlIHBhaXJzOiAiZC51cGRhdGUocmVkPTEsXG4gICAgICBibHVlPTIpIi5cblxuICAgdmFsdWVzKClcblxuICAgICAgUmV0dXJuIGEgbmV3IHZpZXcgb2YgdGhlIGRpY3Rpb25hcnlcJ3MgdmFsdWVzLiAgU2VlIHRoZVxuICAgICAgKmRvY3VtZW50YXRpb24gb2YgdmlldyBvYmplY3RzKi5cblxuU2VlIGFsc286ICJ0eXBlcy5NYXBwaW5nUHJveHlUeXBlIiBjYW4gYmUgdXNlZCB0byBjcmVhdGUgYSByZWFkLW9ubHlcbiAgdmlldyBvZiBhICJkaWN0Ii5cblxuXG5EaWN0aW9uYXJ5IHZpZXcgb2JqZWN0c1xuPT09PT09PT09PT09PT09PT09PT09PT1cblxuVGhlIG9iamVjdHMgcmV0dXJuZWQgYnkgImRpY3Qua2V5cygpIiwgImRpY3QudmFsdWVzKCkiIGFuZFxuImRpY3QuaXRlbXMoKSIgYXJlICp2aWV3IG9iamVjdHMqLiAgVGhleSBwcm92aWRlIGEgZHluYW1pYyB2aWV3IG9uIHRoZVxuZGljdGlvbmFyeVwncyBlbnRyaWVzLCB3aGljaCBtZWFucyB0aGF0IHdoZW4gdGhlIGRpY3Rpb25hcnkgY2hhbmdlcyxcbnRoZSB2aWV3IHJlZmxlY3RzIHRoZXNlIGNoYW5nZXMuXG5cbkRpY3Rpb25hcnkgdmlld3MgY2FuIGJlIGl0ZXJhdGVkIG92ZXIgdG8geWllbGQgdGhlaXIgcmVzcGVjdGl2ZSBkYXRhLFxuYW5kIHN1cHBvcnQgbWVtYmVyc2hpcCB0ZXN0czpcblxubGVuKGRpY3R2aWV3KVxuXG4gICBSZXR1cm4gdGhlIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBkaWN0aW9uYXJ5LlxuXG5pdGVyKGRpY3R2aWV3KVxuXG4gICBSZXR1cm4gYW4gaXRlcmF0b3Igb3ZlciB0aGUga2V5cywgdmFsdWVzIG9yIGl0ZW1zIChyZXByZXNlbnRlZCBhc1xuICAgdHVwbGVzIG9mICIoa2V5LCB2YWx1ZSkiKSBpbiB0aGUgZGljdGlvbmFyeS5cblxuICAgS2V5cyBhbmQgdmFsdWVzIGFyZSBpdGVyYXRlZCBvdmVyIGluIGFuIGFyYml0cmFyeSBvcmRlciB3aGljaCBpc1xuICAgbm9uLXJhbmRvbSwgdmFyaWVzIGFjcm9zcyBQeXRob24gaW1wbGVtZW50YXRpb25zLCBhbmQgZGVwZW5kcyBvblxuICAgdGhlIGRpY3Rpb25hcnlcJ3MgaGlzdG9yeSBvZiBpbnNlcnRpb25zIGFuZCBkZWxldGlvbnMuIElmIGtleXMsXG4gICB2YWx1ZXMgYW5kIGl0ZW1zIHZpZXdzIGFyZSBpdGVyYXRlZCBvdmVyIHdpdGggbm8gaW50ZXJ2ZW5pbmdcbiAgIG1vZGlmaWNhdGlvbnMgdG8gdGhlIGRpY3Rpb25hcnksIHRoZSBvcmRlciBvZiBpdGVtcyB3aWxsIGRpcmVjdGx5XG4gICBjb3JyZXNwb25kLiAgVGhpcyBhbGxvd3MgdGhlIGNyZWF0aW9uIG9mICIodmFsdWUsIGtleSkiIHBhaXJzIHVzaW5nXG4gICAiemlwKCkiOiAicGFpcnMgPSB6aXAoZC52YWx1ZXMoKSwgZC5rZXlzKCkpIi4gIEFub3RoZXIgd2F5IHRvXG4gICBjcmVhdGUgdGhlIHNhbWUgbGlzdCBpcyAicGFpcnMgPSBbKHYsIGspIGZvciAoaywgdikgaW4gZC5pdGVtcygpXSIuXG5cbiAgIEl0ZXJhdGluZyB2aWV3cyB3aGlsZSBhZGRpbmcgb3IgZGVsZXRpbmcgZW50cmllcyBpbiB0aGUgZGljdGlvbmFyeVxuICAgbWF5IHJhaXNlIGEgIlJ1bnRpbWVFcnJvciIgb3IgZmFpbCB0byBpdGVyYXRlIG92ZXIgYWxsIGVudHJpZXMuXG5cbnggaW4gZGljdHZpZXdcblxuICAgUmV0dXJuICJUcnVlIiBpZiAqeCogaXMgaW4gdGhlIHVuZGVybHlpbmcgZGljdGlvbmFyeVwncyBrZXlzLCB2YWx1ZXNcbiAgIG9yIGl0ZW1zIChpbiB0aGUgbGF0dGVyIGNhc2UsICp4KiBzaG91bGQgYmUgYSAiKGtleSwgdmFsdWUpIlxuICAgdHVwbGUpLlxuXG5LZXlzIHZpZXdzIGFyZSBzZXQtbGlrZSBzaW5jZSB0aGVpciBlbnRyaWVzIGFyZSB1bmlxdWUgYW5kIGhhc2hhYmxlLlxuSWYgYWxsIHZhbHVlcyBhcmUgaGFzaGFibGUsIHNvIHRoYXQgIihrZXksIHZhbHVlKSIgcGFpcnMgYXJlIHVuaXF1ZVxuYW5kIGhhc2hhYmxlLCB0aGVuIHRoZSBpdGVtcyB2aWV3IGlzIGFsc28gc2V0LWxpa2UuICAoVmFsdWVzIHZpZXdzIGFyZVxubm90IHRyZWF0ZWQgYXMgc2V0LWxpa2Ugc2luY2UgdGhlIGVudHJpZXMgYXJlIGdlbmVyYWxseSBub3QgdW5pcXVlLilcbkZvciBzZXQtbGlrZSB2aWV3cywgYWxsIG9mIHRoZSBvcGVyYXRpb25zIGRlZmluZWQgZm9yIHRoZSBhYnN0cmFjdFxuYmFzZSBjbGFzcyAiY29sbGVjdGlvbnMuYWJjLlNldCIgYXJlIGF2YWlsYWJsZSAoZm9yIGV4YW1wbGUsICI9PSIsXG4iPCIsIG9yICJeIikuXG5cbkFuIGV4YW1wbGUgb2YgZGljdGlvbmFyeSB2aWV3IHVzYWdlOlxuXG4gICA+Pj4gZGlzaGVzID0ge1wnZWdnc1wnOiAyLCBcJ3NhdXNhZ2VcJzogMSwgXCdiYWNvblwnOiAxLCBcJ3NwYW1cJzogNTAwfVxuICAgPj4+IGtleXMgPSBkaXNoZXMua2V5cygpXG4gICA+Pj4gdmFsdWVzID0gZGlzaGVzLnZhbHVlcygpXG5cbiAgID4+PiAjIGl0ZXJhdGlvblxuICAgPj4+IG4gPSAwXG4gICA+Pj4gZm9yIHZhbCBpbiB2YWx1ZXM6XG4gICAuLi4gICAgIG4gKz0gdmFsXG4gICA+Pj4gcHJpbnQobilcbiAgIDUwNFxuXG4gICA+Pj4gIyBrZXlzIGFuZCB2YWx1ZXMgYXJlIGl0ZXJhdGVkIG92ZXIgaW4gdGhlIHNhbWUgb3JkZXJcbiAgID4+PiBsaXN0KGtleXMpXG4gICBbXCdlZ2dzXCcsIFwnYmFjb25cJywgXCdzYXVzYWdlXCcsIFwnc3BhbVwnXVxuICAgPj4+IGxpc3QodmFsdWVzKVxuICAgWzIsIDEsIDEsIDUwMF1cblxuICAgPj4+ICMgdmlldyBvYmplY3RzIGFyZSBkeW5hbWljIGFuZCByZWZsZWN0IGRpY3QgY2hhbmdlc1xuICAgPj4+IGRlbCBkaXNoZXNbXCdlZ2dzXCddXG4gICA+Pj4gZGVsIGRpc2hlc1tcJ3NhdXNhZ2VcJ11cbiAgID4+PiBsaXN0KGtleXMpXG4gICBbXCdzcGFtXCcsIFwnYmFjb25cJ11cblxuICAgPj4+ICMgc2V0IG9wZXJhdGlvbnNcbiAgID4+PiBrZXlzICYge1wnZWdnc1wnLCBcJ2JhY29uXCcsIFwnc2FsYWRcJ31cbiAgIHtcJ2JhY29uXCd9XG4gICA+Pj4ga2V5cyBeIHtcJ3NhdXNhZ2VcJywgXCdqdWljZVwnfVxuICAge1wnanVpY2VcJywgXCdzYXVzYWdlXCcsIFwnYmFjb25cJywgXCdzcGFtXCd9XG4nLAotICd0eXBlc21ldGhvZHMnOiAnXG5NZXRob2RzXG4qKioqKioqXG5cbk1ldGhvZHMgYXJlIGZ1bmN0aW9ucyB0aGF0IGFyZSBjYWxsZWQgdXNpbmcgdGhlIGF0dHJpYnV0ZSBub3RhdGlvbi5cblRoZXJlIGFyZSB0d28gZmxhdm9yczogYnVpbHQtaW4gbWV0aG9kcyAoc3VjaCBhcyAiYXBwZW5kKCkiIG9uIGxpc3RzKVxuYW5kIGNsYXNzIGluc3RhbmNlIG1ldGhvZHMuICBCdWlsdC1pbiBtZXRob2RzIGFyZSBkZXNjcmliZWQgd2l0aCB0aGVcbnR5cGVzIHRoYXQgc3VwcG9ydCB0aGVtLlxuXG5JZiB5b3UgYWNjZXNzIGEgbWV0aG9kIChhIGZ1bmN0aW9uIGRlZmluZWQgaW4gYSBjbGFzcyBuYW1lc3BhY2UpXG50aHJvdWdoIGFuIGluc3RhbmNlLCB5b3UgZ2V0IGEgc3BlY2lhbCBvYmplY3Q6IGEgKmJvdW5kIG1ldGhvZCogKGFsc29cbmNhbGxlZCAqaW5zdGFuY2UgbWV0aG9kKikgb2JqZWN0LiBXaGVuIGNhbGxlZCwgaXQgd2lsbCBhZGQgdGhlICJzZWxmIlxuYXJndW1lbnQgdG8gdGhlIGFyZ3VtZW50IGxpc3QuICBCb3VuZCBtZXRob2RzIGhhdmUgdHdvIHNwZWNpYWwgcmVhZC1cbm9ubHkgYXR0cmlidXRlczogIm0uX19zZWxmX18iIGlzIHRoZSBvYmplY3Qgb24gd2hpY2ggdGhlIG1ldGhvZFxub3BlcmF0ZXMsIGFuZCAibS5fX2Z1bmNfXyIgaXMgdGhlIGZ1bmN0aW9uIGltcGxlbWVudGluZyB0aGUgbWV0aG9kLlxuQ2FsbGluZyAibShhcmctMSwgYXJnLTIsIC4uLiwgYXJnLW4pIiBpcyBjb21wbGV0ZWx5IGVxdWl2YWxlbnQgdG9cbmNhbGxpbmcgIm0uX19mdW5jX18obS5fX3NlbGZfXywgYXJnLTEsIGFyZy0yLCAuLi4sIGFyZy1uKSIuXG5cbkxpa2UgZnVuY3Rpb24gb2JqZWN0cywgYm91bmQgbWV0aG9kIG9iamVjdHMgc3VwcG9ydCBnZXR0aW5nIGFyYml0cmFyeVxuYXR0cmlidXRlcy4gIEhvd2V2ZXIsIHNpbmNlIG1ldGhvZCBhdHRyaWJ1dGVzIGFyZSBhY3R1YWxseSBzdG9yZWQgb25cbnRoZSB1bmRlcmx5aW5nIGZ1bmN0aW9uIG9iamVjdCAoIm1ldGguX19mdW5jX18iKSwgc2V0dGluZyBtZXRob2RcbmF0dHJpYnV0ZXMgb24gYm91bmQgbWV0aG9kcyBpcyBkaXNhbGxvd2VkLiAgQXR0ZW1wdGluZyB0byBzZXQgYW5cbmF0dHJpYnV0ZSBvbiBhIG1ldGhvZCByZXN1bHRzIGluIGFuICJBdHRyaWJ1dGVFcnJvciIgYmVpbmcgcmFpc2VkLiAgSW5cbm9yZGVyIHRvIHNldCBhIG1ldGhvZCBhdHRyaWJ1dGUsIHlvdSBuZWVkIHRvIGV4cGxpY2l0bHkgc2V0IGl0IG9uIHRoZVxudW5kZXJseWluZyBmdW5jdGlvbiBvYmplY3Q6XG5cbiAgID4+PiBjbGFzcyBDOlxuICAgLi4uICAgICBkZWYgbWV0aG9kKHNlbGYpOlxuICAgLi4uICAgICAgICAgcGFzc1xuICAgLi4uXG4gICA+Pj4gYyA9IEMoKVxuICAgPj4+IGMubWV0aG9kLndob2FtaSA9IFwnbXkgbmFtZSBpcyBtZXRob2RcJyAgIyBjYW5cJ3Qgc2V0IG9uIHRoZSBtZXRob2RcbiAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KTpcbiAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgMSwgaW4gPG1vZHVsZT5cbiAgIEF0dHJpYnV0ZUVycm9yOiBcJ21ldGhvZFwnIG9iamVjdCBoYXMgbm8gYXR0cmlidXRlIFwnd2hvYW1pXCdcbiAgID4+PiBjLm1ldGhvZC5fX2Z1bmNfXy53aG9hbWkgPSBcJ215IG5hbWUgaXMgbWV0aG9kXCdcbiAgID4+PiBjLm1ldGhvZC53aG9hbWlcbiAgIFwnbXkgbmFtZSBpcyBtZXRob2RcJ1xuXG5TZWUgKlRoZSBzdGFuZGFyZCB0eXBlIGhpZXJhcmNoeSogZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4nLAotICd0eXBlc21vZHVsZXMnOiAnXG5Nb2R1bGVzXG4qKioqKioqXG5cblRoZSBvbmx5IHNwZWNpYWwgb3BlcmF0aW9uIG9uIGEgbW9kdWxlIGlzIGF0dHJpYnV0ZSBhY2Nlc3M6ICJtLm5hbWUiLFxud2hlcmUgKm0qIGlzIGEgbW9kdWxlIGFuZCAqbmFtZSogYWNjZXNzZXMgYSBuYW1lIGRlZmluZWQgaW4gKm0qXCdzXG5zeW1ib2wgdGFibGUuIE1vZHVsZSBhdHRyaWJ1dGVzIGNhbiBiZSBhc3NpZ25lZCB0by4gIChOb3RlIHRoYXQgdGhlXG4iaW1wb3J0IiBzdGF0ZW1lbnQgaXMgbm90LCBzdHJpY3RseSBzcGVha2luZywgYW4gb3BlcmF0aW9uIG9uIGEgbW9kdWxlXG5vYmplY3Q7ICJpbXBvcnQgZm9vIiBkb2VzIG5vdCByZXF1aXJlIGEgbW9kdWxlIG9iamVjdCBuYW1lZCAqZm9vKiB0b1xuZXhpc3QsIHJhdGhlciBpdCByZXF1aXJlcyBhbiAoZXh0ZXJuYWwpICpkZWZpbml0aW9uKiBmb3IgYSBtb2R1bGVcbm5hbWVkICpmb28qIHNvbWV3aGVyZS4pXG5cbkEgc3BlY2lhbCBhdHRyaWJ1dGUgb2YgZXZlcnkgbW9kdWxlIGlzICJfX2RpY3RfXyIuIFRoaXMgaXMgdGhlXG5kaWN0aW9uYXJ5IGNvbnRhaW5pbmcgdGhlIG1vZHVsZVwncyBzeW1ib2wgdGFibGUuIE1vZGlmeWluZyB0aGlzXG5kaWN0aW9uYXJ5IHdpbGwgYWN0dWFsbHkgY2hhbmdlIHRoZSBtb2R1bGVcJ3Mgc3ltYm9sIHRhYmxlLCBidXQgZGlyZWN0XG5hc3NpZ25tZW50IHRvIHRoZSAiX19kaWN0X18iIGF0dHJpYnV0ZSBpcyBub3QgcG9zc2libGUgKHlvdSBjYW4gd3JpdGVcbiJtLl9fZGljdF9fW1wnYVwnXSA9IDEiLCB3aGljaCBkZWZpbmVzICJtLmEiIHRvIGJlICIxIiwgYnV0IHlvdSBjYW5cJ3RcbndyaXRlICJtLl9fZGljdF9fID0ge30iKS4gIE1vZGlmeWluZyAiX19kaWN0X18iIGRpcmVjdGx5IGlzIG5vdFxucmVjb21tZW5kZWQuXG5cbk1vZHVsZXMgYnVpbHQgaW50byB0aGUgaW50ZXJwcmV0ZXIgYXJlIHdyaXR0ZW4gbGlrZSB0aGlzOiAiPG1vZHVsZVxuXCdzeXNcJyAoYnVpbHQtaW4pPiIuICBJZiBsb2FkZWQgZnJvbSBhIGZpbGUsIHRoZXkgYXJlIHdyaXR0ZW4gYXNcbiI8bW9kdWxlIFwnb3NcJyBmcm9tIFwnL3Vzci9sb2NhbC9saWIvcHl0aG9uWC5ZL29zLnB5Y1wnPiIuXG4nLAotICd0eXBlc3NlcSc6ICdcblNlcXVlbmNlIFR5cGVzIC0tLSAibGlzdCIsICJ0dXBsZSIsICJyYW5nZSJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblxuVGhlcmUgYXJlIHRocmVlIGJhc2ljIHNlcXVlbmNlIHR5cGVzOiBsaXN0cywgdHVwbGVzLCBhbmQgcmFuZ2Vcbm9iamVjdHMuIEFkZGl0aW9uYWwgc2VxdWVuY2UgdHlwZXMgdGFpbG9yZWQgZm9yIHByb2Nlc3Npbmcgb2YgKmJpbmFyeVxuZGF0YSogYW5kICp0ZXh0IHN0cmluZ3MqIGFyZSBkZXNjcmliZWQgaW4gZGVkaWNhdGVkIHNlY3Rpb25zLlxuXG5cbkNvbW1vbiBTZXF1ZW5jZSBPcGVyYXRpb25zXG49PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5UaGUgb3BlcmF0aW9ucyBpbiB0aGUgZm9sbG93aW5nIHRhYmxlIGFyZSBzdXBwb3J0ZWQgYnkgbW9zdCBzZXF1ZW5jZVxudHlwZXMsIGJvdGggbXV0YWJsZSBhbmQgaW1tdXRhYmxlLiBUaGUgImNvbGxlY3Rpb25zLmFiYy5TZXF1ZW5jZSIgQUJDXG5pcyBwcm92aWRlZCB0byBtYWtlIGl0IGVhc2llciB0byBjb3JyZWN0bHkgaW1wbGVtZW50IHRoZXNlIG9wZXJhdGlvbnNcbm9uIGN1c3RvbSBzZXF1ZW5jZSB0eXBlcy5cblxuVGhpcyB0YWJsZSBsaXN0cyB0aGUgc2VxdWVuY2Ugb3BlcmF0aW9ucyBzb3J0ZWQgaW4gYXNjZW5kaW5nIHByaW9yaXR5XG4ob3BlcmF0aW9ucyBpbiB0aGUgc2FtZSBib3ggaGF2ZSB0aGUgc2FtZSBwcmlvcml0eSkuICBJbiB0aGUgdGFibGUsXG4qcyogYW5kICp0KiBhcmUgc2VxdWVuY2VzIG9mIHRoZSBzYW1lIHR5cGUsICpuKiwgKmkqLCAqaiogYW5kICprKiBhcmVcbmludGVnZXJzIGFuZCAqeCogaXMgYW4gYXJiaXRyYXJ5IG9iamVjdCB0aGF0IG1lZXRzIGFueSB0eXBlIGFuZCB2YWx1ZVxucmVzdHJpY3Rpb25zIGltcG9zZWQgYnkgKnMqLlxuXG5UaGUgImluIiBhbmQgIm5vdCBpbiIgb3BlcmF0aW9ucyBoYXZlIHRoZSBzYW1lIHByaW9yaXRpZXMgYXMgdGhlXG5jb21wYXJpc29uIG9wZXJhdGlvbnMuIFRoZSAiKyIgKGNvbmNhdGVuYXRpb24pIGFuZCAiKiIgKHJlcGV0aXRpb24pXG5vcGVyYXRpb25zIGhhdmUgdGhlIHNhbWUgcHJpb3JpdHkgYXMgdGhlIGNvcnJlc3BvbmRpbmcgbnVtZXJpY1xub3BlcmF0aW9ucy5cblxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG58IE9wZXJhdGlvbiAgICAgICAgICAgICAgICAgIHwgUmVzdWx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBOb3RlcyAgICAgIHxcbis9PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09K1xufCAieCBpbiBzIiAgICAgICAgICAgICAgICAgICB8ICJUcnVlIiBpZiBhbiBpdGVtIG9mICpzKiBpcyAgICAgIHwgKDEpICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcbnwgInggbm90IGluIHMiICAgICAgICAgICAgICAgfCAiRmFsc2UiIGlmIGFuIGl0ZW0gb2YgKnMqIGlzICAgICB8ICgxKSAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG58ICJzICsgdCIgICAgICAgICAgICAgICAgICAgIHwgdGhlIGNvbmNhdGVuYXRpb24gb2YgKnMqIGFuZCAqdCogfCAoNikoNykgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tK1xufCAicyAqIG4iIG9yICJuICogcyIgICAgICAgICB8ICpuKiBzaGFsbG93IGNvcGllcyBvZiAqcyogICAgICAgIHwgKDIpKDcpICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcbnwgInNbaV0iICAgICAgICAgICAgICAgICAgICAgfCAqaSp0aCBpdGVtIG9mICpzKiwgb3JpZ2luIDAgICAgICB8ICgzKSAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG58ICJzW2k6al0iICAgICAgICAgICAgICAgICAgIHwgc2xpY2Ugb2YgKnMqIGZyb20gKmkqIHRvICpqKiAgICAgfCAoMykoNCkgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tK1xufCAic1tpOmo6a10iICAgICAgICAgICAgICAgICB8IHNsaWNlIG9mICpzKiBmcm9tICppKiB0byAqaiogICAgIHwgKDMpKDUpICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tK1xuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcbnwgInMuaW5kZXgoeFssIGlbLCBqXV0pIiAgICAgfCBpbmRleCBvZiB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiB8ICg4KSAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcblxuU2VxdWVuY2VzIG9mIHRoZSBzYW1lIHR5cGUgYWxzbyBzdXBwb3J0IGNvbXBhcmlzb25zLiAgSW4gcGFydGljdWxhcixcbnR1cGxlcyBhbmQgbGlzdHMgYXJlIGNvbXBhcmVkIGxleGljb2dyYXBoaWNhbGx5IGJ5IGNvbXBhcmluZ1xuY29ycmVzcG9uZGluZyBlbGVtZW50cy4gVGhpcyBtZWFucyB0aGF0IHRvIGNvbXBhcmUgZXF1YWwsIGV2ZXJ5XG5lbGVtZW50IG11c3QgY29tcGFyZSBlcXVhbCBhbmQgdGhlIHR3byBzZXF1ZW5jZXMgbXVzdCBiZSBvZiB0aGUgc2FtZVxudHlwZSBhbmQgaGF2ZSB0aGUgc2FtZSBsZW5ndGguICAoRm9yIGZ1bGwgZGV0YWlscyBzZWUgKkNvbXBhcmlzb25zKiBpblxudGhlIGxhbmd1YWdlIHJlZmVyZW5jZS4pXG5cbk5vdGVzOlxuXG4xLiBXaGlsZSB0aGUgImluIiBhbmQgIm5vdCBpbiIgb3BlcmF0aW9ucyBhcmUgdXNlZCBvbmx5IGZvciBzaW1wbGVcbiAgIGNvbnRhaW5tZW50IHRlc3RpbmcgaW4gdGhlIGdlbmVyYWwgY2FzZSwgc29tZSBzcGVjaWFsaXNlZCBzZXF1ZW5jZXNcbiAgIChzdWNoIGFzICJzdHIiLCAiYnl0ZXMiIGFuZCAiYnl0ZWFycmF5IikgYWxzbyB1c2UgdGhlbSBmb3JcbiAgIHN1YnNlcXVlbmNlIHRlc3Rpbmc6XG5cbiAgICAgID4+PiAiZ2ciIGluICJlZ2dzIlxuICAgICAgVHJ1ZVxuXG4yLiBWYWx1ZXMgb2YgKm4qIGxlc3MgdGhhbiAiMCIgYXJlIHRyZWF0ZWQgYXMgIjAiICh3aGljaCB5aWVsZHMgYW5cbiAgIGVtcHR5IHNlcXVlbmNlIG9mIHRoZSBzYW1lIHR5cGUgYXMgKnMqKS4gIE5vdGUgYWxzbyB0aGF0IHRoZSBjb3BpZXNcbiAgIGFyZSBzaGFsbG93OyBuZXN0ZWQgc3RydWN0dXJlcyBhcmUgbm90IGNvcGllZC4gIFRoaXMgb2Z0ZW4gaGF1bnRzXG4gICBuZXcgUHl0aG9uIHByb2dyYW1tZXJzOyBjb25zaWRlcjpcblxuICAgICAgPj4+IGxpc3RzID0gW1tdXSAqIDNcbiAgICAgID4+PiBsaXN0c1xuICAgICAgW1tdLCBbXSwgW11dXG4gICAgICA+Pj4gbGlzdHNbMF0uYXBwZW5kKDMpXG4gICAgICA+Pj4gbGlzdHNcbiAgICAgIFtbM10sIFszXSwgWzNdXVxuXG4gICBXaGF0IGhhcyBoYXBwZW5lZCBpcyB0aGF0ICJbW11dIiBpcyBhIG9uZS1lbGVtZW50IGxpc3QgY29udGFpbmluZ1xuICAgYW4gZW1wdHkgbGlzdCwgc28gYWxsIHRocmVlIGVsZW1lbnRzIG9mICJbW11dICogMyIgYXJlIChwb2ludGVyc1xuICAgdG8pIHRoaXMgc2luZ2xlIGVtcHR5IGxpc3QuICBNb2RpZnlpbmcgYW55IG9mIHRoZSBlbGVtZW50cyBvZlxuICAgImxpc3RzIiBtb2RpZmllcyB0aGlzIHNpbmdsZSBsaXN0LiBZb3UgY2FuIGNyZWF0ZSBhIGxpc3Qgb2ZcbiAgIGRpZmZlcmVudCBsaXN0cyB0aGlzIHdheTpcblxuICAgICAgPj4+IGxpc3RzID0gW1tdIGZvciBpIGluIHJhbmdlKDMpXVxuICAgICAgPj4+IGxpc3RzWzBdLmFwcGVuZCgzKVxuICAgICAgPj4+IGxpc3RzWzFdLmFwcGVuZCg1KVxuICAgICAgPj4+IGxpc3RzWzJdLmFwcGVuZCg3KVxuICAgICAgPj4+IGxpc3RzXG4gICAgICBbWzNdLCBbNV0sIFs3XV1cblxuMy4gSWYgKmkqIG9yICpqKiBpcyBuZWdhdGl2ZSwgdGhlIGluZGV4IGlzIHJlbGF0aXZlIHRvIHRoZSBlbmQgb2ZcbiAgIHRoZSBzdHJpbmc6ICJsZW4ocykgKyBpIiBvciAibGVuKHMpICsgaiIgaXMgc3Vic3RpdHV0ZWQuICBCdXQgbm90ZVxuICAgdGhhdCAiLTAiIGlzIHN0aWxsICIwIi5cblxuNC4gVGhlIHNsaWNlIG9mICpzKiBmcm9tICppKiB0byAqaiogaXMgZGVmaW5lZCBhcyB0aGUgc2VxdWVuY2Ugb2ZcbiAgIGl0ZW1zIHdpdGggaW5kZXggKmsqIHN1Y2ggdGhhdCAiaSA8PSBrIDwgaiIuICBJZiAqaSogb3IgKmoqIGlzXG4gICBncmVhdGVyIHRoYW4gImxlbihzKSIsIHVzZSAibGVuKHMpIi4gIElmICppKiBpcyBvbWl0dGVkIG9yICJOb25lIixcbiAgIHVzZSAiMCIuICBJZiAqaiogaXMgb21pdHRlZCBvciAiTm9uZSIsIHVzZSAibGVuKHMpIi4gIElmICppKiBpc1xuICAgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICpqKiwgdGhlIHNsaWNlIGlzIGVtcHR5LlxuXG41LiBUaGUgc2xpY2Ugb2YgKnMqIGZyb20gKmkqIHRvICpqKiB3aXRoIHN0ZXAgKmsqIGlzIGRlZmluZWQgYXMgdGhlXG4gICBzZXF1ZW5jZSBvZiBpdGVtcyB3aXRoIGluZGV4ICAieCA9IGkgKyBuKmsiIHN1Y2ggdGhhdCAiMCA8PSBuIDxcbiAgIChqLWkpL2siLiAgSW4gb3RoZXIgd29yZHMsIHRoZSBpbmRpY2VzIGFyZSAiaSIsICJpK2siLCAiaSsyKmsiLFxuICAgImkrMyprIiBhbmQgc28gb24sIHN0b3BwaW5nIHdoZW4gKmoqIGlzIHJlYWNoZWQgKGJ1dCBuZXZlclxuICAgaW5jbHVkaW5nICpqKikuICBJZiAqaSogb3IgKmoqIGlzIGdyZWF0ZXIgdGhhbiAibGVuKHMpIiwgdXNlXG4gICAibGVuKHMpIi4gIElmICppKiBvciAqaiogYXJlIG9taXR0ZWQgb3IgIk5vbmUiLCB0aGV5IGJlY29tZSAiZW5kIlxuICAgdmFsdWVzICh3aGljaCBlbmQgZGVwZW5kcyBvbiB0aGUgc2lnbiBvZiAqayopLiAgTm90ZSwgKmsqIGNhbm5vdCBiZVxuICAgemVyby4gSWYgKmsqIGlzICJOb25lIiwgaXQgaXMgdHJlYXRlZCBsaWtlICIxIi5cblxuNi4gQ29uY2F0ZW5hdGluZyBpbW11dGFibGUgc2VxdWVuY2VzIGFsd2F5cyByZXN1bHRzIGluIGEgbmV3XG4gICBvYmplY3QuIFRoaXMgbWVhbnMgdGhhdCBidWlsZGluZyB1cCBhIHNlcXVlbmNlIGJ5IHJlcGVhdGVkXG4gICBjb25jYXRlbmF0aW9uIHdpbGwgaGF2ZSBhIHF1YWRyYXRpYyBydW50aW1lIGNvc3QgaW4gdGhlIHRvdGFsXG4gICBzZXF1ZW5jZSBsZW5ndGguIFRvIGdldCBhIGxpbmVhciBydW50aW1lIGNvc3QsIHlvdSBtdXN0IHN3aXRjaCB0b1xuICAgb25lIG9mIHRoZSBhbHRlcm5hdGl2ZXMgYmVsb3c6XG5cbiAgICogaWYgY29uY2F0ZW5hdGluZyAic3RyIiBvYmplY3RzLCB5b3UgY2FuIGJ1aWxkIGEgbGlzdCBhbmQgdXNlXG4gICAgICJzdHIuam9pbigpIiBhdCB0aGUgZW5kIG9yIGVsc2Ugd3JpdGUgdG8gYSAiaW8uU3RyaW5nSU8iIGluc3RhbmNlXG4gICAgIGFuZCByZXRyaWV2ZSBpdHMgdmFsdWUgd2hlbiBjb21wbGV0ZVxuXG4gICAqIGlmIGNvbmNhdGVuYXRpbmcgImJ5dGVzIiBvYmplY3RzLCB5b3UgY2FuIHNpbWlsYXJseSB1c2VcbiAgICAgImJ5dGVzLmpvaW4oKSIgb3IgImlvLkJ5dGVzSU8iLCBvciB5b3UgY2FuIGRvIGluLXBsYWNlXG4gICAgIGNvbmNhdGVuYXRpb24gd2l0aCBhICJieXRlYXJyYXkiIG9iamVjdC4gICJieXRlYXJyYXkiIG9iamVjdHMgYXJlXG4gICAgIG11dGFibGUgYW5kIGhhdmUgYW4gZWZmaWNpZW50IG92ZXJhbGxvY2F0aW9uIG1lY2hhbmlzbVxuXG4gICAqIGlmIGNvbmNhdGVuYXRpbmcgInR1cGxlIiBvYmplY3RzLCBleHRlbmQgYSAibGlzdCIgaW5zdGVhZFxuXG4gICAqIGZvciBvdGhlciB0eXBlcywgaW52ZXN0aWdhdGUgdGhlIHJlbGV2YW50IGNsYXNzIGRvY3VtZW50YXRpb25cblxuNy4gU29tZSBzZXF1ZW5jZSB0eXBlcyAoc3VjaCBhcyAicmFuZ2UiKSBvbmx5IHN1cHBvcnQgaXRlbVxuICAgc2VxdWVuY2VzIHRoYXQgZm9sbG93IHNwZWNpZmljIHBhdHRlcm5zLCBhbmQgaGVuY2UgZG9uXCd0IHN1cHBvcnRcbiAgIHNlcXVlbmNlIGNvbmNhdGVuYXRpb24gb3IgcmVwZXRpdGlvbi5cblxuOC4gImluZGV4IiByYWlzZXMgIlZhbHVlRXJyb3IiIHdoZW4gKngqIGlzIG5vdCBmb3VuZCBpbiAqcyouIFdoZW5cbiAgIHN1cHBvcnRlZCwgdGhlIGFkZGl0aW9uYWwgYXJndW1lbnRzIHRvIHRoZSBpbmRleCBtZXRob2QgYWxsb3dcbiAgIGVmZmljaWVudCBzZWFyY2hpbmcgb2Ygc3Vic2VjdGlvbnMgb2YgdGhlIHNlcXVlbmNlLiBQYXNzaW5nIHRoZVxuICAgZXh0cmEgYXJndW1lbnRzIGlzIHJvdWdobHkgZXF1aXZhbGVudCB0byB1c2luZyAic1tpOmpdLmluZGV4KHgpIixcbiAgIG9ubHkgd2l0aG91dCBjb3B5aW5nIGFueSBkYXRhIGFuZCB3aXRoIHRoZSByZXR1cm5lZCBpbmRleCBiZWluZ1xuICAgcmVsYXRpdmUgdG8gdGhlIHN0YXJ0IG9mIHRoZSBzZXF1ZW5jZSByYXRoZXIgdGhhbiB0aGUgc3RhcnQgb2YgdGhlXG4gICBzbGljZS5cblxuXG5JbW11dGFibGUgU2VxdWVuY2UgVHlwZXNcbj09PT09PT09PT09PT09PT09PT09PT09PVxuXG5UaGUgb25seSBvcGVyYXRpb24gdGhhdCBpbW11dGFibGUgc2VxdWVuY2UgdHlwZXMgZ2VuZXJhbGx5IGltcGxlbWVudFxudGhhdCBpcyBub3QgYWxzbyBpbXBsZW1lbnRlZCBieSBtdXRhYmxlIHNlcXVlbmNlIHR5cGVzIGlzIHN1cHBvcnQgZm9yXG50aGUgImhhc2goKSIgYnVpbHQtaW4uXG5cblRoaXMgc3VwcG9ydCBhbGxvd3MgaW1tdXRhYmxlIHNlcXVlbmNlcywgc3VjaCBhcyAidHVwbGUiIGluc3RhbmNlcywgdG9cbmJlIHVzZWQgYXMgImRpY3QiIGtleXMgYW5kIHN0b3JlZCBpbiAic2V0IiBhbmQgImZyb3plbnNldCIgaW5zdGFuY2VzLlxuXG5BdHRlbXB0aW5nIHRvIGhhc2ggYW4gaW1tdXRhYmxlIHNlcXVlbmNlIHRoYXQgY29udGFpbnMgdW5oYXNoYWJsZVxudmFsdWVzIHdpbGwgcmVzdWx0IGluICJUeXBlRXJyb3IiLlxuXG5cbk11dGFibGUgU2VxdWVuY2UgVHlwZXNcbj09PT09PT09PT09PT09PT09PT09PT1cblxuVGhlIG9wZXJhdGlvbnMgaW4gdGhlIGZvbGxvd2luZyB0YWJsZSBhcmUgZGVmaW5lZCBvbiBtdXRhYmxlIHNlcXVlbmNlXG50eXBlcy4gVGhlICJjb2xsZWN0aW9ucy5hYmMuTXV0YWJsZVNlcXVlbmNlIiBBQkMgaXMgcHJvdmlkZWQgdG8gbWFrZVxuaXQgZWFzaWVyIHRvIGNvcnJlY3RseSBpbXBsZW1lbnQgdGhlc2Ugb3BlcmF0aW9ucyBvbiBjdXN0b20gc2VxdWVuY2VcbnR5cGVzLlxuXG5JbiB0aGUgdGFibGUgKnMqIGlzIGFuIGluc3RhbmNlIG9mIGEgbXV0YWJsZSBzZXF1ZW5jZSB0eXBlLCAqdCogaXMgYW55XG5pdGVyYWJsZSBvYmplY3QgYW5kICp4KiBpcyBhbiBhcmJpdHJhcnkgb2JqZWN0IHRoYXQgbWVldHMgYW55IHR5cGUgYW5kXG52YWx1ZSByZXN0cmljdGlvbnMgaW1wb3NlZCBieSAqcyogKGZvciBleGFtcGxlLCAiYnl0ZWFycmF5IiBvbmx5XG5hY2NlcHRzIGludGVnZXJzIHRoYXQgbWVldCB0aGUgdmFsdWUgcmVzdHJpY3Rpb24gIjAgPD0geCA8PSAyNTUiKS5cblxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IE9wZXJhdGlvbiAgICAgICAgICAgICAgICAgICAgICB8IFJlc3VsdCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTm90ZXMgICAgICAgICAgICAgICAgIHxcbis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09K1xuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAic1tpOmo6a10gPSB0IiAgICAgICAgICAgICAgICAgfCB0aGUgZWxlbWVudHMgb2YgInNbaTpqOmtdIiBhcmUgICB8ICgxKSAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58ICJzLmNsZWFyKCkiICAgICAgICAgICAgICAgICAgICB8IHJlbW92ZXMgYWxsIGl0ZW1zIGZyb20gInMiIChzYW1lIHwgKDUpICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAicy5jb3B5KCkiICAgICAgICAgICAgICAgICAgICAgfCBjcmVhdGVzIGEgc2hhbGxvdyBjb3B5IG9mICJzIiAgICB8ICg1KSAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58ICJzLnBvcChbaV0pIiAgICAgICAgICAgICAgICAgICB8IHJldHJpZXZlcyB0aGUgaXRlbSBhdCAqaSogYW5kICAgIHwgKDIpICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAicy5yZW1vdmUoeCkiICAgICAgICAgICAgICAgICAgfCByZW1vdmUgdGhlIGZpcnN0IGl0ZW0gZnJvbSAqcyogICB8ICgzKSAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgInMucmV2ZXJzZSgpIiAgICAgICAgICAgICAgICAgIHwgcmV2ZXJzZXMgdGhlIGl0ZW1zIG9mICpzKiBpbiAgICAgfCAoNCkgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG5cbk5vdGVzOlxuXG4xLiAqdCogbXVzdCBoYXZlIHRoZSBzYW1lIGxlbmd0aCBhcyB0aGUgc2xpY2UgaXQgaXMgcmVwbGFjaW5nLlxuXG4yLiBUaGUgb3B0aW9uYWwgYXJndW1lbnQgKmkqIGRlZmF1bHRzIHRvICItMSIsIHNvIHRoYXQgYnkgZGVmYXVsdFxuICAgdGhlIGxhc3QgaXRlbSBpcyByZW1vdmVkIGFuZCByZXR1cm5lZC5cblxuMy4gInJlbW92ZSIgcmFpc2VzICJWYWx1ZUVycm9yIiB3aGVuICp4KiBpcyBub3QgZm91bmQgaW4gKnMqLlxuXG40LiBUaGUgInJldmVyc2UoKSIgbWV0aG9kIG1vZGlmaWVzIHRoZSBzZXF1ZW5jZSBpbiBwbGFjZSBmb3JcbiAgIGVjb25vbXkgb2Ygc3BhY2Ugd2hlbiByZXZlcnNpbmcgYSBsYXJnZSBzZXF1ZW5jZS4gIFRvIHJlbWluZCB1c2Vyc1xuICAgdGhhdCBpdCBvcGVyYXRlcyBieSBzaWRlIGVmZmVjdCwgaXQgZG9lcyBub3QgcmV0dXJuIHRoZSByZXZlcnNlZFxuICAgc2VxdWVuY2UuXG5cbjUuICJjbGVhcigpIiBhbmQgImNvcHkoKSIgYXJlIGluY2x1ZGVkIGZvciBjb25zaXN0ZW5jeSB3aXRoIHRoZVxuICAgaW50ZXJmYWNlcyBvZiBtdXRhYmxlIGNvbnRhaW5lcnMgdGhhdCBkb25cJ3Qgc3VwcG9ydCBzbGljaW5nXG4gICBvcGVyYXRpb25zIChzdWNoIGFzICJkaWN0IiBhbmQgInNldCIpXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDMuMzogImNsZWFyKCkiIGFuZCAiY29weSgpIiBtZXRob2RzLlxuXG5cbkxpc3RzXG49PT09PVxuXG5MaXN0cyBhcmUgbXV0YWJsZSBzZXF1ZW5jZXMsIHR5cGljYWxseSB1c2VkIHRvIHN0b3JlIGNvbGxlY3Rpb25zIG9mXG5ob21vZ2VuZW91cyBpdGVtcyAod2hlcmUgdGhlIHByZWNpc2UgZGVncmVlIG9mIHNpbWlsYXJpdHkgd2lsbCB2YXJ5IGJ5XG5hcHBsaWNhdGlvbikuXG5cbmNsYXNzIGNsYXNzIGxpc3QoW2l0ZXJhYmxlXSlcblxuICAgTGlzdHMgbWF5IGJlIGNvbnN0cnVjdGVkIGluIHNldmVyYWwgd2F5czpcblxuICAgKiBVc2luZyBhIHBhaXIgb2Ygc3F1YXJlIGJyYWNrZXRzIHRvIGRlbm90ZSB0aGUgZW1wdHkgbGlzdDogIltdIlxuXG4gICAqIFVzaW5nIHNxdWFyZSBicmFja2V0cywgc2VwYXJhdGluZyBpdGVtcyB3aXRoIGNvbW1hczogIlthXSIsXG4gICAgICJbYSwgYiwgY10iXG5cbiAgICogVXNpbmcgYSBsaXN0IGNvbXByZWhlbnNpb246ICJbeCBmb3IgeCBpbiBpdGVyYWJsZV0iXG5cbiAgICogVXNpbmcgdGhlIHR5cGUgY29uc3RydWN0b3I6ICJsaXN0KCkiIG9yICJsaXN0KGl0ZXJhYmxlKSJcblxuICAgVGhlIGNvbnN0cnVjdG9yIGJ1aWxkcyBhIGxpc3Qgd2hvc2UgaXRlbXMgYXJlIHRoZSBzYW1lIGFuZCBpbiB0aGVcbiAgIHNhbWUgb3JkZXIgYXMgKml0ZXJhYmxlKlwncyBpdGVtcy4gICppdGVyYWJsZSogbWF5IGJlIGVpdGhlciBhXG4gICBzZXF1ZW5jZSwgYSBjb250YWluZXIgdGhhdCBzdXBwb3J0cyBpdGVyYXRpb24sIG9yIGFuIGl0ZXJhdG9yXG4gICBvYmplY3QuICBJZiAqaXRlcmFibGUqIGlzIGFscmVhZHkgYSBsaXN0LCBhIGNvcHkgaXMgbWFkZSBhbmRcbiAgIHJldHVybmVkLCBzaW1pbGFyIHRvICJpdGVyYWJsZVs6XSIuIEZvciBleGFtcGxlLCAibGlzdChcJ2FiY1wnKSJcbiAgIHJldHVybnMgIltcJ2FcJywgXCdiXCcsIFwnY1wnXSIgYW5kICJsaXN0KCAoMSwgMiwgMykgKSIgcmV0dXJucyAiWzEsIDIsXG4gICAzXSIuIElmIG5vIGFyZ3VtZW50IGlzIGdpdmVuLCB0aGUgY29uc3RydWN0b3IgY3JlYXRlcyBhIG5ldyBlbXB0eVxuICAgbGlzdCwgIltdIi5cblxuICAgTWFueSBvdGhlciBvcGVyYXRpb25zIGFsc28gcHJvZHVjZSBsaXN0cywgaW5jbHVkaW5nIHRoZSAic29ydGVkKCkiXG4gICBidWlsdC1pbi5cblxuICAgTGlzdHMgaW1wbGVtZW50IGFsbCBvZiB0aGUgKmNvbW1vbiogYW5kICptdXRhYmxlKiBzZXF1ZW5jZVxuICAgb3BlcmF0aW9ucy4gTGlzdHMgYWxzbyBwcm92aWRlIHRoZSBmb2xsb3dpbmcgYWRkaXRpb25hbCBtZXRob2Q6XG5cbiAgIHNvcnQoKiwga2V5PU5vbmUsIHJldmVyc2U9Tm9uZSlcblxuICAgICAgVGhpcyBtZXRob2Qgc29ydHMgdGhlIGxpc3QgaW4gcGxhY2UsIHVzaW5nIG9ubHkgIjwiIGNvbXBhcmlzb25zXG4gICAgICBiZXR3ZWVuIGl0ZW1zLiBFeGNlcHRpb25zIGFyZSBub3Qgc3VwcHJlc3NlZCAtIGlmIGFueSBjb21wYXJpc29uXG4gICAgICBvcGVyYXRpb25zIGZhaWwsIHRoZSBlbnRpcmUgc29ydCBvcGVyYXRpb24gd2lsbCBmYWlsIChhbmQgdGhlXG4gICAgICBsaXN0IHdpbGwgbGlrZWx5IGJlIGxlZnQgaW4gYSBwYXJ0aWFsbHkgbW9kaWZpZWQgc3RhdGUpLlxuXG4gICAgICAic29ydCgpIiBhY2NlcHRzIHR3byBhcmd1bWVudHMgdGhhdCBjYW4gb25seSBiZSBwYXNzZWQgYnlcbiAgICAgIGtleXdvcmQgKCprZXl3b3JkLW9ubHkgYXJndW1lbnRzKik6XG5cbiAgICAgICprZXkqIHNwZWNpZmllcyBhIGZ1bmN0aW9uIG9mIG9uZSBhcmd1bWVudCB0aGF0IGlzIHVzZWQgdG9cbiAgICAgIGV4dHJhY3QgYSBjb21wYXJpc29uIGtleSBmcm9tIGVhY2ggbGlzdCBlbGVtZW50IChmb3IgZXhhbXBsZSxcbiAgICAgICJrZXk9c3RyLmxvd2VyIikuIFRoZSBrZXkgY29ycmVzcG9uZGluZyB0byBlYWNoIGl0ZW0gaW4gdGhlIGxpc3RcbiAgICAgIGlzIGNhbGN1bGF0ZWQgb25jZSBhbmQgdGhlbiB1c2VkIGZvciB0aGUgZW50aXJlIHNvcnRpbmcgcHJvY2Vzcy5cbiAgICAgIFRoZSBkZWZhdWx0IHZhbHVlIG9mICJOb25lIiBtZWFucyB0aGF0IGxpc3QgaXRlbXMgYXJlIHNvcnRlZFxuICAgICAgZGlyZWN0bHkgd2l0aG91dCBjYWxjdWxhdGluZyBhIHNlcGFyYXRlIGtleSB2YWx1ZS5cblxuICAgICAgVGhlICJmdW5jdG9vbHMuY21wX3RvX2tleSgpIiB1dGlsaXR5IGlzIGF2YWlsYWJsZSB0byBjb252ZXJ0IGFcbiAgICAgIDIueCBzdHlsZSAqY21wKiBmdW5jdGlvbiB0byBhICprZXkqIGZ1bmN0aW9uLlxuXG4gICAgICAqcmV2ZXJzZSogaXMgYSBib29sZWFuIHZhbHVlLiAgSWYgc2V0IHRvICJUcnVlIiwgdGhlbiB0aGUgbGlzdFxuICAgICAgZWxlbWVudHMgYXJlIHNvcnRlZCBhcyBpZiBlYWNoIGNvbXBhcmlzb24gd2VyZSByZXZlcnNlZC5cblxuICAgICAgVGhpcyBtZXRob2QgbW9kaWZpZXMgdGhlIHNlcXVlbmNlIGluIHBsYWNlIGZvciBlY29ub215IG9mIHNwYWNlXG4gICAgICB3aGVuIHNvcnRpbmcgYSBsYXJnZSBzZXF1ZW5jZS4gIFRvIHJlbWluZCB1c2VycyB0aGF0IGl0IG9wZXJhdGVzXG4gICAgICBieSBzaWRlIGVmZmVjdCwgaXQgZG9lcyBub3QgcmV0dXJuIHRoZSBzb3J0ZWQgc2VxdWVuY2UgKHVzZVxuICAgICAgInNvcnRlZCgpIiB0byBleHBsaWNpdGx5IHJlcXVlc3QgYSBuZXcgc29ydGVkIGxpc3QgaW5zdGFuY2UpLlxuXG4gICAgICBUaGUgInNvcnQoKSIgbWV0aG9kIGlzIGd1YXJhbnRlZWQgdG8gYmUgc3RhYmxlLiAgQSBzb3J0IGlzXG4gICAgICBzdGFibGUgaWYgaXQgZ3VhcmFudGVlcyBub3QgdG8gY2hhbmdlIHRoZSByZWxhdGl2ZSBvcmRlciBvZlxuICAgICAgZWxlbWVudHMgdGhhdCBjb21wYXJlIGVxdWFsIC0tLSB0aGlzIGlzIGhlbHBmdWwgZm9yIHNvcnRpbmcgaW5cbiAgICAgIG11bHRpcGxlIHBhc3NlcyAoZm9yIGV4YW1wbGUsIHNvcnQgYnkgZGVwYXJ0bWVudCwgdGhlbiBieSBzYWxhcnlcbiAgICAgIGdyYWRlKS5cblxuICAgICAgKipDUHl0aG9uIGltcGxlbWVudGF0aW9uIGRldGFpbDoqKiBXaGlsZSBhIGxpc3QgaXMgYmVpbmcgc29ydGVkLFxuICAgICAgdGhlIGVmZmVjdCBvZiBhdHRlbXB0aW5nIHRvIG11dGF0ZSwgb3IgZXZlbiBpbnNwZWN0LCB0aGUgbGlzdCBpc1xuICAgICAgdW5kZWZpbmVkLiAgVGhlIEMgaW1wbGVtZW50YXRpb24gb2YgUHl0aG9uIG1ha2VzIHRoZSBsaXN0IGFwcGVhclxuICAgICAgZW1wdHkgZm9yIHRoZSBkdXJhdGlvbiwgYW5kIHJhaXNlcyAiVmFsdWVFcnJvciIgaWYgaXQgY2FuIGRldGVjdFxuICAgICAgdGhhdCB0aGUgbGlzdCBoYXMgYmVlbiBtdXRhdGVkIGR1cmluZyBhIHNvcnQuXG5cblxuVHVwbGVzXG49PT09PT1cblxuVHVwbGVzIGFyZSBpbW11dGFibGUgc2VxdWVuY2VzLCB0eXBpY2FsbHkgdXNlZCB0byBzdG9yZSBjb2xsZWN0aW9ucyBvZlxuaGV0ZXJvZ2VuZW91cyBkYXRhIChzdWNoIGFzIHRoZSAyLXR1cGxlcyBwcm9kdWNlZCBieSB0aGUgImVudW1lcmF0ZSgpIlxuYnVpbHQtaW4pLiBUdXBsZXMgYXJlIGFsc28gdXNlZCBmb3IgY2FzZXMgd2hlcmUgYW4gaW1tdXRhYmxlIHNlcXVlbmNlXG5vZiBob21vZ2VuZW91cyBkYXRhIGlzIG5lZWRlZCAoc3VjaCBhcyBhbGxvd2luZyBzdG9yYWdlIGluIGEgInNldCIgb3JcbiJkaWN0IiBpbnN0YW5jZSkuXG5cbmNsYXNzIGNsYXNzIHR1cGxlKFtpdGVyYWJsZV0pXG5cbiAgIFR1cGxlcyBtYXkgYmUgY29uc3RydWN0ZWQgaW4gYSBudW1iZXIgb2Ygd2F5czpcblxuICAgKiBVc2luZyBhIHBhaXIgb2YgcGFyZW50aGVzZXMgdG8gZGVub3RlIHRoZSBlbXB0eSB0dXBsZTogIigpIlxuXG4gICAqIFVzaW5nIGEgdHJhaWxpbmcgY29tbWEgZm9yIGEgc2luZ2xldG9uIHR1cGxlOiAiYSwiIG9yICIoYSwpIlxuXG4gICAqIFNlcGFyYXRpbmcgaXRlbXMgd2l0aCBjb21tYXM6ICJhLCBiLCBjIiBvciAiKGEsIGIsIGMpIlxuXG4gICAqIFVzaW5nIHRoZSAidHVwbGUoKSIgYnVpbHQtaW46ICJ0dXBsZSgpIiBvciAidHVwbGUoaXRlcmFibGUpIlxuXG4gICBUaGUgY29uc3RydWN0b3IgYnVpbGRzIGEgdHVwbGUgd2hvc2UgaXRlbXMgYXJlIHRoZSBzYW1lIGFuZCBpbiB0aGVcbiAgIHNhbWUgb3JkZXIgYXMgKml0ZXJhYmxlKlwncyBpdGVtcy4gICppdGVyYWJsZSogbWF5IGJlIGVpdGhlciBhXG4gICBzZXF1ZW5jZSwgYSBjb250YWluZXIgdGhhdCBzdXBwb3J0cyBpdGVyYXRpb24sIG9yIGFuIGl0ZXJhdG9yXG4gICBvYmplY3QuICBJZiAqaXRlcmFibGUqIGlzIGFscmVhZHkgYSB0dXBsZSwgaXQgaXMgcmV0dXJuZWRcbiAgIHVuY2hhbmdlZC4gRm9yIGV4YW1wbGUsICJ0dXBsZShcJ2FiY1wnKSIgcmV0dXJucyAiKFwnYVwnLCBcJ2JcJywgXCdjXCcpIlxuICAgYW5kICJ0dXBsZSggWzEsIDIsIDNdICkiIHJldHVybnMgIigxLCAyLCAzKSIuIElmIG5vIGFyZ3VtZW50IGlzXG4gICBnaXZlbiwgdGhlIGNvbnN0cnVjdG9yIGNyZWF0ZXMgYSBuZXcgZW1wdHkgdHVwbGUsICIoKSIuXG5cbiAgIE5vdGUgdGhhdCBpdCBpcyBhY3R1YWxseSB0aGUgY29tbWEgd2hpY2ggbWFrZXMgYSB0dXBsZSwgbm90IHRoZVxuICAgcGFyZW50aGVzZXMuIFRoZSBwYXJlbnRoZXNlcyBhcmUgb3B0aW9uYWwsIGV4Y2VwdCBpbiB0aGUgZW1wdHlcbiAgIHR1cGxlIGNhc2UsIG9yIHdoZW4gdGhleSBhcmUgbmVlZGVkIHRvIGF2b2lkIHN5bnRhY3RpYyBhbWJpZ3VpdHkuXG4gICBGb3IgZXhhbXBsZSwgImYoYSwgYiwgYykiIGlzIGEgZnVuY3Rpb24gY2FsbCB3aXRoIHRocmVlIGFyZ3VtZW50cyxcbiAgIHdoaWxlICJmKChhLCBiLCBjKSkiIGlzIGEgZnVuY3Rpb24gY2FsbCB3aXRoIGEgMy10dXBsZSBhcyB0aGUgc29sZVxuICAgYXJndW1lbnQuXG5cbiAgIFR1cGxlcyBpbXBsZW1lbnQgYWxsIG9mIHRoZSAqY29tbW9uKiBzZXF1ZW5jZSBvcGVyYXRpb25zLlxuXG5Gb3IgaGV0ZXJvZ2VuZW91cyBjb2xsZWN0aW9ucyBvZiBkYXRhIHdoZXJlIGFjY2VzcyBieSBuYW1lIGlzIGNsZWFyZXJcbnRoYW4gYWNjZXNzIGJ5IGluZGV4LCAiY29sbGVjdGlvbnMubmFtZWR0dXBsZSgpIiBtYXkgYmUgYSBtb3JlXG5hcHByb3ByaWF0ZSBjaG9pY2UgdGhhbiBhIHNpbXBsZSB0dXBsZSBvYmplY3QuXG5cblxuUmFuZ2VzXG49PT09PT1cblxuVGhlICJyYW5nZSIgdHlwZSByZXByZXNlbnRzIGFuIGltbXV0YWJsZSBzZXF1ZW5jZSBvZiBudW1iZXJzIGFuZCBpc1xuY29tbW9ubHkgdXNlZCBmb3IgbG9vcGluZyBhIHNwZWNpZmljIG51bWJlciBvZiB0aW1lcyBpbiAiZm9yIiBsb29wcy5cblxuY2xhc3MgY2xhc3MgcmFuZ2Uoc3RvcClcbmNsYXNzIGNsYXNzIHJhbmdlKHN0YXJ0LCBzdG9wWywgc3RlcF0pXG5cbiAgIFRoZSBhcmd1bWVudHMgdG8gdGhlIHJhbmdlIGNvbnN0cnVjdG9yIG11c3QgYmUgaW50ZWdlcnMgKGVpdGhlclxuICAgYnVpbHQtaW4gImludCIgb3IgYW55IG9iamVjdCB0aGF0IGltcGxlbWVudHMgdGhlICJfX2luZGV4X18iXG4gICBzcGVjaWFsIG1ldGhvZCkuICBJZiB0aGUgKnN0ZXAqIGFyZ3VtZW50IGlzIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvXG4gICAiMSIuIElmIHRoZSAqc3RhcnQqIGFyZ3VtZW50IGlzIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvICIwIi4gSWZcbiAgICpzdGVwKiBpcyB6ZXJvLCAiVmFsdWVFcnJvciIgaXMgcmFpc2VkLlxuXG4gICBGb3IgYSBwb3NpdGl2ZSAqc3RlcCosIHRoZSBjb250ZW50cyBvZiBhIHJhbmdlICJyIiBhcmUgZGV0ZXJtaW5lZFxuICAgYnkgdGhlIGZvcm11bGEgInJbaV0gPSBzdGFydCArIHN0ZXAqaSIgd2hlcmUgImkgPj0gMCIgYW5kICJyW2ldIDxcbiAgIHN0b3AiLlxuXG4gICBGb3IgYSBuZWdhdGl2ZSAqc3RlcCosIHRoZSBjb250ZW50cyBvZiB0aGUgcmFuZ2UgYXJlIHN0aWxsXG4gICBkZXRlcm1pbmVkIGJ5IHRoZSBmb3JtdWxhICJyW2ldID0gc3RhcnQgKyBzdGVwKmkiLCBidXQgdGhlXG4gICBjb25zdHJhaW50cyBhcmUgImkgPj0gMCIgYW5kICJyW2ldID4gc3RvcCIuXG5cbiAgIEEgcmFuZ2Ugb2JqZWN0IHdpbGwgYmUgZW1wdHkgaWYgInJbMF0iIGRvZXMgbm90IG1lZXQgdGhlIHZhbHVlXG4gICBjb25zdHJhaW50LiBSYW5nZXMgZG8gc3VwcG9ydCBuZWdhdGl2ZSBpbmRpY2VzLCBidXQgdGhlc2UgYXJlXG4gICBpbnRlcnByZXRlZCBhcyBpbmRleGluZyBmcm9tIHRoZSBlbmQgb2YgdGhlIHNlcXVlbmNlIGRldGVybWluZWQgYnlcbiAgIHRoZSBwb3NpdGl2ZSBpbmRpY2VzLlxuXG4gICBSYW5nZXMgY29udGFpbmluZyBhYnNvbHV0ZSB2YWx1ZXMgbGFyZ2VyIHRoYW4gInN5cy5tYXhzaXplIiBhcmVcbiAgIHBlcm1pdHRlZCBidXQgc29tZSBmZWF0dXJlcyAoc3VjaCBhcyAibGVuKCkiKSBtYXkgcmFpc2VcbiAgICJPdmVyZmxvd0Vycm9yIi5cblxuICAgUmFuZ2UgZXhhbXBsZXM6XG5cbiAgICAgID4+PiBsaXN0KHJhbmdlKDEwKSlcbiAgICAgIFswLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5XVxuICAgICAgPj4+IGxpc3QocmFuZ2UoMSwgMTEpKVxuICAgICAgWzEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwXVxuICAgICAgPj4+IGxpc3QocmFuZ2UoMCwgMzAsIDUpKVxuICAgICAgWzAsIDUsIDEwLCAxNSwgMjAsIDI1XVxuICAgICAgPj4+IGxpc3QocmFuZ2UoMCwgMTAsIDMpKVxuICAgICAgWzAsIDMsIDYsIDldXG4gICAgICA+Pj4gbGlzdChyYW5nZSgwLCAtMTAsIC0xKSlcbiAgICAgIFswLCAtMSwgLTIsIC0zLCAtNCwgLTUsIC02LCAtNywgLTgsIC05XVxuICAgICAgPj4+IGxpc3QocmFuZ2UoMCkpXG4gICAgICBbXVxuICAgICAgPj4+IGxpc3QocmFuZ2UoMSwgMCkpXG4gICAgICBbXVxuXG4gICBSYW5nZXMgaW1wbGVtZW50IGFsbCBvZiB0aGUgKmNvbW1vbiogc2VxdWVuY2Ugb3BlcmF0aW9ucyBleGNlcHRcbiAgIGNvbmNhdGVuYXRpb24gYW5kIHJlcGV0aXRpb24gKGR1ZSB0byB0aGUgZmFjdCB0aGF0IHJhbmdlIG9iamVjdHNcbiAgIGNhbiBvbmx5IHJlcHJlc2VudCBzZXF1ZW5jZXMgdGhhdCBmb2xsb3cgYSBzdHJpY3QgcGF0dGVybiBhbmRcbiAgIHJlcGV0aXRpb24gYW5kIGNvbmNhdGVuYXRpb24gd2lsbCB1c3VhbGx5IHZpb2xhdGUgdGhhdCBwYXR0ZXJuKS5cblxuVGhlIGFkdmFudGFnZSBvZiB0aGUgInJhbmdlIiB0eXBlIG92ZXIgYSByZWd1bGFyICJsaXN0IiBvciAidHVwbGUiIGlzXG50aGF0IGEgInJhbmdlIiBvYmplY3Qgd2lsbCBhbHdheXMgdGFrZSB0aGUgc2FtZSAoc21hbGwpIGFtb3VudCBvZlxubWVtb3J5LCBubyBtYXR0ZXIgdGhlIHNpemUgb2YgdGhlIHJhbmdlIGl0IHJlcHJlc2VudHMgKGFzIGl0IG9ubHlcbnN0b3JlcyB0aGUgInN0YXJ0IiwgInN0b3AiIGFuZCAic3RlcCIgdmFsdWVzLCBjYWxjdWxhdGluZyBpbmRpdmlkdWFsXG5pdGVtcyBhbmQgc3VicmFuZ2VzIGFzIG5lZWRlZCkuXG5cblJhbmdlIG9iamVjdHMgaW1wbGVtZW50IHRoZSAiY29sbGVjdGlvbnMuYWJjLlNlcXVlbmNlIiBBQkMsIGFuZFxucHJvdmlkZSBmZWF0dXJlcyBzdWNoIGFzIGNvbnRhaW5tZW50IHRlc3RzLCBlbGVtZW50IGluZGV4IGxvb2t1cCxcbnNsaWNpbmcgYW5kIHN1cHBvcnQgZm9yIG5lZ2F0aXZlIGluZGljZXMgKHNlZSAqU2VxdWVuY2UgVHlwZXMgLS0tXG5saXN0LCB0dXBsZSwgcmFuZ2UqKTpcblxuPj4+IHIgPSByYW5nZSgwLCAyMCwgMilcbj4+PiByXG5yYW5nZSgwLCAyMCwgMilcbj4+PiAxMSBpbiByXG5GYWxzZVxuPj4+IDEwIGluIHJcblRydWVcbj4+PiByLmluZGV4KDEwKVxuNVxuPj4+IHJbNV1cbjEwXG4+Pj4gcls6NV1cbnJhbmdlKDAsIDEwLCAyKVxuPj4+IHJbLTFdXG4xOFxuXG5UZXN0aW5nIHJhbmdlIG9iamVjdHMgZm9yIGVxdWFsaXR5IHdpdGggIj09IiBhbmQgIiE9IiBjb21wYXJlcyB0aGVtIGFzXG5zZXF1ZW5jZXMuICBUaGF0IGlzLCB0d28gcmFuZ2Ugb2JqZWN0cyBhcmUgY29uc2lkZXJlZCBlcXVhbCBpZiB0aGV5XG5yZXByZXNlbnQgdGhlIHNhbWUgc2VxdWVuY2Ugb2YgdmFsdWVzLiAgKE5vdGUgdGhhdCB0d28gcmFuZ2Ugb2JqZWN0c1xudGhhdCBjb21wYXJlIGVxdWFsIG1pZ2h0IGhhdmUgZGlmZmVyZW50ICJzdGFydCIsICJzdG9wIiBhbmQgInN0ZXAiXG5hdHRyaWJ1dGVzLCBmb3IgZXhhbXBsZSAicmFuZ2UoMCkgPT0gcmFuZ2UoMiwgMSwgMykiIG9yICJyYW5nZSgwLCAzLFxuMikgPT0gcmFuZ2UoMCwgNCwgMikiLilcblxuQ2hhbmdlZCBpbiB2ZXJzaW9uIDMuMjogSW1wbGVtZW50IHRoZSBTZXF1ZW5jZSBBQkMuIFN1cHBvcnQgc2xpY2luZ1xuYW5kIG5lZ2F0aXZlIGluZGljZXMuIFRlc3QgImludCIgb2JqZWN0cyBmb3IgbWVtYmVyc2hpcCBpbiBjb25zdGFudFxudGltZSBpbnN0ZWFkIG9mIGl0ZXJhdGluZyB0aHJvdWdoIGFsbCBpdGVtcy5cblxuQ2hhbmdlZCBpbiB2ZXJzaW9uIDMuMzogRGVmaW5lIFwnPT1cJyBhbmQgXCchPVwnIHRvIGNvbXBhcmUgcmFuZ2Ugb2JqZWN0c1xuYmFzZWQgb24gdGhlIHNlcXVlbmNlIG9mIHZhbHVlcyB0aGV5IGRlZmluZSAoaW5zdGVhZCBvZiBjb21wYXJpbmdcbmJhc2VkIG9uIG9iamVjdCBpZGVudGl0eSkuXG5cbk5ldyBpbiB2ZXJzaW9uIDMuMzogVGhlICJzdGFydCIsICJzdG9wIiBhbmQgInN0ZXAiIGF0dHJpYnV0ZXMuXG4nLAotICd0eXBlc3NlcS1tdXRhYmxlJzogJ1xuTXV0YWJsZSBTZXF1ZW5jZSBUeXBlc1xuKioqKioqKioqKioqKioqKioqKioqKlxuXG5UaGUgb3BlcmF0aW9ucyBpbiB0aGUgZm9sbG93aW5nIHRhYmxlIGFyZSBkZWZpbmVkIG9uIG11dGFibGUgc2VxdWVuY2VcbnR5cGVzLiBUaGUgImNvbGxlY3Rpb25zLmFiYy5NdXRhYmxlU2VxdWVuY2UiIEFCQyBpcyBwcm92aWRlZCB0byBtYWtlXG5pdCBlYXNpZXIgdG8gY29ycmVjdGx5IGltcGxlbWVudCB0aGVzZSBvcGVyYXRpb25zIG9uIGN1c3RvbSBzZXF1ZW5jZVxudHlwZXMuXG5cbkluIHRoZSB0YWJsZSAqcyogaXMgYW4gaW5zdGFuY2Ugb2YgYSBtdXRhYmxlIHNlcXVlbmNlIHR5cGUsICp0KiBpcyBhbnlcbml0ZXJhYmxlIG9iamVjdCBhbmQgKngqIGlzIGFuIGFyYml0cmFyeSBvYmplY3QgdGhhdCBtZWV0cyBhbnkgdHlwZSBhbmRcbnZhbHVlIHJlc3RyaWN0aW9ucyBpbXBvc2VkIGJ5ICpzKiAoZm9yIGV4YW1wbGUsICJieXRlYXJyYXkiIG9ubHlcbmFjY2VwdHMgaW50ZWdlcnMgdGhhdCBtZWV0IHRoZSB2YWx1ZSByZXN0cmljdGlvbiAiMCA8PSB4IDw9IDI1NSIpLlxuXG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgT3BlcmF0aW9uICAgICAgICAgICAgICAgICAgICAgIHwgUmVzdWx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBOb3RlcyAgICAgICAgICAgICAgICAgfFxuKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT0rXG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58ICJzW2k6ajprXSA9IHQiICAgICAgICAgICAgICAgICB8IHRoZSBlbGVtZW50cyBvZiAic1tpOmo6a10iIGFyZSAgIHwgKDEpICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgInMuY2xlYXIoKSIgICAgICAgICAgICAgICAgICAgIHwgcmVtb3ZlcyBhbGwgaXRlbXMgZnJvbSAicyIgKHNhbWUgfCAoNSkgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58ICJzLmNvcHkoKSIgICAgICAgICAgICAgICAgICAgICB8IGNyZWF0ZXMgYSBzaGFsbG93IGNvcHkgb2YgInMiICAgIHwgKDUpICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgInMucG9wKFtpXSkiICAgICAgICAgICAgICAgICAgIHwgcmV0cmlldmVzIHRoZSBpdGVtIGF0ICppKiBhbmQgICAgfCAoMikgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58ICJzLnJlbW92ZSh4KSIgICAgICAgICAgICAgICAgICB8IHJlbW92ZSB0aGUgZmlyc3QgaXRlbSBmcm9tICpzKiAgIHwgKDMpICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAicy5yZXZlcnNlKCkiICAgICAgICAgICAgICAgICAgfCByZXZlcnNlcyB0aGUgaXRlbXMgb2YgKnMqIGluICAgICB8ICg0KSAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcblxuTm90ZXM6XG5cbjEuICp0KiBtdXN0IGhhdmUgdGhlIHNhbWUgbGVuZ3RoIGFzIHRoZSBzbGljZSBpdCBpcyByZXBsYWNpbmcuXG5cbjIuIFRoZSBvcHRpb25hbCBhcmd1bWVudCAqaSogZGVmYXVsdHMgdG8gIi0xIiwgc28gdGhhdCBieSBkZWZhdWx0XG4gICB0aGUgbGFzdCBpdGVtIGlzIHJlbW92ZWQgYW5kIHJldHVybmVkLlxuXG4zLiAicmVtb3ZlIiByYWlzZXMgIlZhbHVlRXJyb3IiIHdoZW4gKngqIGlzIG5vdCBmb3VuZCBpbiAqcyouXG5cbjQuIFRoZSAicmV2ZXJzZSgpIiBtZXRob2QgbW9kaWZpZXMgdGhlIHNlcXVlbmNlIGluIHBsYWNlIGZvclxuICAgZWNvbm9teSBvZiBzcGFjZSB3aGVuIHJldmVyc2luZyBhIGxhcmdlIHNlcXVlbmNlLiAgVG8gcmVtaW5kIHVzZXJzXG4gICB0aGF0IGl0IG9wZXJhdGVzIGJ5IHNpZGUgZWZmZWN0LCBpdCBkb2VzIG5vdCByZXR1cm4gdGhlIHJldmVyc2VkXG4gICBzZXF1ZW5jZS5cblxuNS4gImNsZWFyKCkiIGFuZCAiY29weSgpIiBhcmUgaW5jbHVkZWQgZm9yIGNvbnNpc3RlbmN5IHdpdGggdGhlXG4gICBpbnRlcmZhY2VzIG9mIG11dGFibGUgY29udGFpbmVycyB0aGF0IGRvblwndCBzdXBwb3J0IHNsaWNpbmdcbiAgIG9wZXJhdGlvbnMgKHN1Y2ggYXMgImRpY3QiIGFuZCAic2V0IilcblxuICAgTmV3IGluIHZlcnNpb24gMy4zOiAiY2xlYXIoKSIgYW5kICJjb3B5KCkiIG1ldGhvZHMuXG4nLAotICd1bmFyeSc6ICdcblVuYXJ5IGFyaXRobWV0aWMgYW5kIGJpdHdpc2Ugb3BlcmF0aW9uc1xuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cbkFsbCB1bmFyeSBhcml0aG1ldGljIGFuZCBiaXR3aXNlIG9wZXJhdGlvbnMgaGF2ZSB0aGUgc2FtZSBwcmlvcml0eTpcblxuICAgdV9leHByIDo6PSBwb3dlciB8ICItIiB1X2V4cHIgfCAiKyIgdV9leHByIHwgIn4iIHVfZXhwclxuXG5UaGUgdW5hcnkgIi0iIChtaW51cykgb3BlcmF0b3IgeWllbGRzIHRoZSBuZWdhdGlvbiBvZiBpdHMgbnVtZXJpY1xuYXJndW1lbnQuXG5cblRoZSB1bmFyeSAiKyIgKHBsdXMpIG9wZXJhdG9yIHlpZWxkcyBpdHMgbnVtZXJpYyBhcmd1bWVudCB1bmNoYW5nZWQuXG5cblRoZSB1bmFyeSAifiIgKGludmVydCkgb3BlcmF0b3IgeWllbGRzIHRoZSBiaXR3aXNlIGludmVyc2lvbiBvZiBpdHNcbmludGVnZXIgYXJndW1lbnQuICBUaGUgYml0d2lzZSBpbnZlcnNpb24gb2YgIngiIGlzIGRlZmluZWQgYXNcbiItKHgrMSkiLiAgSXQgb25seSBhcHBsaWVzIHRvIGludGVncmFsIG51bWJlcnMuXG5cbkluIGFsbCB0aHJlZSBjYXNlcywgaWYgdGhlIGFyZ3VtZW50IGRvZXMgbm90IGhhdmUgdGhlIHByb3BlciB0eXBlLCBhXG4iVHlwZUVycm9yIiBleGNlcHRpb24gaXMgcmFpc2VkLlxuJywKLSAnd2hpbGUnOiAnXG5UaGUgIndoaWxlIiBzdGF0ZW1lbnRcbioqKioqKioqKioqKioqKioqKioqKlxuXG5UaGUgIndoaWxlIiBzdGF0ZW1lbnQgaXMgdXNlZCBmb3IgcmVwZWF0ZWQgZXhlY3V0aW9uIGFzIGxvbmcgYXMgYW5cbmV4cHJlc3Npb24gaXMgdHJ1ZTpcblxuICAgd2hpbGVfc3RtdCA6Oj0gIndoaWxlIiBleHByZXNzaW9uICI6IiBzdWl0ZVxuICAgICAgICAgICAgICAgICAgWyJlbHNlIiAiOiIgc3VpdGVdXG5cblRoaXMgcmVwZWF0ZWRseSB0ZXN0cyB0aGUgZXhwcmVzc2lvbiBhbmQsIGlmIGl0IGlzIHRydWUsIGV4ZWN1dGVzIHRoZVxuZmlyc3Qgc3VpdGU7IGlmIHRoZSBleHByZXNzaW9uIGlzIGZhbHNlICh3aGljaCBtYXkgYmUgdGhlIGZpcnN0IHRpbWVcbml0IGlzIHRlc3RlZCkgdGhlIHN1aXRlIG9mIHRoZSAiZWxzZSIgY2xhdXNlLCBpZiBwcmVzZW50LCBpcyBleGVjdXRlZFxuYW5kIHRoZSBsb29wIHRlcm1pbmF0ZXMuXG5cbkEgImJyZWFrIiBzdGF0ZW1lbnQgZXhlY3V0ZWQgaW4gdGhlIGZpcnN0IHN1aXRlIHRlcm1pbmF0ZXMgdGhlIGxvb3BcbndpdGhvdXQgZXhlY3V0aW5nIHRoZSAiZWxzZSIgY2xhdXNlXCdzIHN1aXRlLiAgQSAiY29udGludWUiIHN0YXRlbWVudFxuZXhlY3V0ZWQgaW4gdGhlIGZpcnN0IHN1aXRlIHNraXBzIHRoZSByZXN0IG9mIHRoZSBzdWl0ZSBhbmQgZ29lcyBiYWNrXG50byB0ZXN0aW5nIHRoZSBleHByZXNzaW9uLlxuJywKLSAnd2l0aCc6ICdcblRoZSAid2l0aCIgc3RhdGVtZW50XG4qKioqKioqKioqKioqKioqKioqKlxuXG5UaGUgIndpdGgiIHN0YXRlbWVudCBpcyB1c2VkIHRvIHdyYXAgdGhlIGV4ZWN1dGlvbiBvZiBhIGJsb2NrIHdpdGhcbm1ldGhvZHMgZGVmaW5lZCBieSBhIGNvbnRleHQgbWFuYWdlciAoc2VlIHNlY3Rpb24gKldpdGggU3RhdGVtZW50XG5Db250ZXh0IE1hbmFnZXJzKikuIFRoaXMgYWxsb3dzIGNvbW1vbiAidHJ5Ii4uLiJleGNlcHQiLi4uImZpbmFsbHkiXG51c2FnZSBwYXR0ZXJucyB0byBiZSBlbmNhcHN1bGF0ZWQgZm9yIGNvbnZlbmllbnQgcmV1c2UuXG5cbiAgIHdpdGhfc3RtdCA6Oj0gIndpdGgiIHdpdGhfaXRlbSAoIiwiIHdpdGhfaXRlbSkqICI6IiBzdWl0ZVxuICAgd2l0aF9pdGVtIDo6PSBleHByZXNzaW9uIFsiYXMiIHRhcmdldF1cblxuVGhlIGV4ZWN1dGlvbiBvZiB0aGUgIndpdGgiIHN0YXRlbWVudCB3aXRoIG9uZSAiaXRlbSIgcHJvY2VlZHMgYXNcbmZvbGxvd3M6XG5cbjEuIFRoZSBjb250ZXh0IGV4cHJlc3Npb24gKHRoZSBleHByZXNzaW9uIGdpdmVuIGluIHRoZSAid2l0aF9pdGVtIilcbiAgIGlzIGV2YWx1YXRlZCB0byBvYnRhaW4gYSBjb250ZXh0IG1hbmFnZXIuXG5cbjIuIFRoZSBjb250ZXh0IG1hbmFnZXJcJ3MgIl9fZXhpdF9fKCkiIGlzIGxvYWRlZCBmb3IgbGF0ZXIgdXNlLlxuXG4zLiBUaGUgY29udGV4dCBtYW5hZ2VyXCdzICJfX2VudGVyX18oKSIgbWV0aG9kIGlzIGludm9rZWQuXG5cbjQuIElmIGEgdGFyZ2V0IHdhcyBpbmNsdWRlZCBpbiB0aGUgIndpdGgiIHN0YXRlbWVudCwgdGhlIHJldHVyblxuICAgdmFsdWUgZnJvbSAiX19lbnRlcl9fKCkiIGlzIGFzc2lnbmVkIHRvIGl0LlxuXG4gICBOb3RlOiBUaGUgIndpdGgiIHN0YXRlbWVudCBndWFyYW50ZWVzIHRoYXQgaWYgdGhlICJfX2VudGVyX18oKSJcbiAgICAgbWV0aG9kIHJldHVybnMgd2l0aG91dCBhbiBlcnJvciwgdGhlbiAiX19leGl0X18oKSIgd2lsbCBhbHdheXMgYmVcbiAgICAgY2FsbGVkLiBUaHVzLCBpZiBhbiBlcnJvciBvY2N1cnMgZHVyaW5nIHRoZSBhc3NpZ25tZW50IHRvIHRoZVxuICAgICB0YXJnZXQgbGlzdCwgaXQgd2lsbCBiZSB0cmVhdGVkIHRoZSBzYW1lIGFzIGFuIGVycm9yIG9jY3VycmluZ1xuICAgICB3aXRoaW4gdGhlIHN1aXRlIHdvdWxkIGJlLiBTZWUgc3RlcCA2IGJlbG93LlxuXG41LiBUaGUgc3VpdGUgaXMgZXhlY3V0ZWQuXG5cbjYuIFRoZSBjb250ZXh0IG1hbmFnZXJcJ3MgIl9fZXhpdF9fKCkiIG1ldGhvZCBpcyBpbnZva2VkLiAgSWYgYW5cbiAgIGV4Y2VwdGlvbiBjYXVzZWQgdGhlIHN1aXRlIHRvIGJlIGV4aXRlZCwgaXRzIHR5cGUsIHZhbHVlLCBhbmRcbiAgIHRyYWNlYmFjayBhcmUgcGFzc2VkIGFzIGFyZ3VtZW50cyB0byAiX19leGl0X18oKSIuIE90aGVyd2lzZSwgdGhyZWVcbiAgICJOb25lIiBhcmd1bWVudHMgYXJlIHN1cHBsaWVkLlxuXG4gICBJZiB0aGUgc3VpdGUgd2FzIGV4aXRlZCBkdWUgdG8gYW4gZXhjZXB0aW9uLCBhbmQgdGhlIHJldHVybiB2YWx1ZVxuICAgZnJvbSB0aGUgIl9fZXhpdF9fKCkiIG1ldGhvZCB3YXMgZmFsc2UsIHRoZSBleGNlcHRpb24gaXMgcmVyYWlzZWQuXG4gICBJZiB0aGUgcmV0dXJuIHZhbHVlIHdhcyB0cnVlLCB0aGUgZXhjZXB0aW9uIGlzIHN1cHByZXNzZWQsIGFuZFxuICAgZXhlY3V0aW9uIGNvbnRpbnVlcyB3aXRoIHRoZSBzdGF0ZW1lbnQgZm9sbG93aW5nIHRoZSAid2l0aCJcbiAgIHN0YXRlbWVudC5cblxuICAgSWYgdGhlIHN1aXRlIHdhcyBleGl0ZWQgZm9yIGFueSByZWFzb24gb3RoZXIgdGhhbiBhbiBleGNlcHRpb24sIHRoZVxuICAgcmV0dXJuIHZhbHVlIGZyb20gIl9fZXhpdF9fKCkiIGlzIGlnbm9yZWQsIGFuZCBleGVjdXRpb24gcHJvY2VlZHNcbiAgIGF0IHRoZSBub3JtYWwgbG9jYXRpb24gZm9yIHRoZSBraW5kIG9mIGV4aXQgdGhhdCB3YXMgdGFrZW4uXG5cbldpdGggbW9yZSB0aGFuIG9uZSBpdGVtLCB0aGUgY29udGV4dCBtYW5hZ2VycyBhcmUgcHJvY2Vzc2VkIGFzIGlmXG5tdWx0aXBsZSAid2l0aCIgc3RhdGVtZW50cyB3ZXJlIG5lc3RlZDpcblxuICAgd2l0aCBBKCkgYXMgYSwgQigpIGFzIGI6XG4gICAgICAgc3VpdGVcblxuaXMgZXF1aXZhbGVudCB0b1xuXG4gICB3aXRoIEEoKSBhcyBhOlxuICAgICAgIHdpdGggQigpIGFzIGI6XG4gICAgICAgICAgIHN1aXRlXG5cbkNoYW5nZWQgaW4gdmVyc2lvbiAzLjE6IFN1cHBvcnQgZm9yIG11bHRpcGxlIGNvbnRleHQgZXhwcmVzc2lvbnMuXG5cblNlZSBhbHNvOiAqKlBFUCAwMzQzKiogLSBUaGUgIndpdGgiIHN0YXRlbWVudFxuXG4gICAgIFRoZSBzcGVjaWZpY2F0aW9uLCBiYWNrZ3JvdW5kLCBhbmQgZXhhbXBsZXMgZm9yIHRoZSBQeXRob24gIndpdGgiXG4gICAgIHN0YXRlbWVudC5cbicsCi0gJ3lpZWxkJzogJ1xuVGhlICJ5aWVsZCIgc3RhdGVtZW50XG4qKioqKioqKioqKioqKioqKioqKipcblxuICAgeWllbGRfc3RtdCA6Oj0geWllbGRfZXhwcmVzc2lvblxuXG5BICJ5aWVsZCIgc3RhdGVtZW50IGlzIHNlbWFudGljYWxseSBlcXVpdmFsZW50IHRvIGEgKnlpZWxkXG5leHByZXNzaW9uKi4gVGhlIHlpZWxkIHN0YXRlbWVudCBjYW4gYmUgdXNlZCB0byBvbWl0IHRoZSBwYXJlbnRoZXNlc1xudGhhdCB3b3VsZCBvdGhlcndpc2UgYmUgcmVxdWlyZWQgaW4gdGhlIGVxdWl2YWxlbnQgeWllbGQgZXhwcmVzc2lvblxuc3RhdGVtZW50LiBGb3IgZXhhbXBsZSwgdGhlIHlpZWxkIHN0YXRlbWVudHNcblxuICAgeWllbGQgPGV4cHI+XG4gICB5aWVsZCBmcm9tIDxleHByPlxuXG5hcmUgZXF1aXZhbGVudCB0byB0aGUgeWllbGQgZXhwcmVzc2lvbiBzdGF0ZW1lbnRzXG5cbiAgICh5aWVsZCA8ZXhwcj4pXG4gICAoeWllbGQgZnJvbSA8ZXhwcj4pXG5cbllpZWxkIGV4cHJlc3Npb25zIGFuZCBzdGF0ZW1lbnRzIGFyZSBvbmx5IHVzZWQgd2hlbiBkZWZpbmluZyBhXG4qZ2VuZXJhdG9yKiBmdW5jdGlvbiwgYW5kIGFyZSBvbmx5IHVzZWQgaW4gdGhlIGJvZHkgb2YgdGhlIGdlbmVyYXRvclxuZnVuY3Rpb24uICBVc2luZyB5aWVsZCBpbiBhIGZ1bmN0aW9uIGRlZmluaXRpb24gaXMgc3VmZmljaWVudCB0byBjYXVzZVxudGhhdCBkZWZpbml0aW9uIHRvIGNyZWF0ZSBhIGdlbmVyYXRvciBmdW5jdGlvbiBpbnN0ZWFkIG9mIGEgbm9ybWFsXG5mdW5jdGlvbi5cblxuRm9yIGZ1bGwgZGV0YWlscyBvZiAieWllbGQiIHNlbWFudGljcywgcmVmZXIgdG8gdGhlICpZaWVsZFxuZXhwcmVzc2lvbnMqIHNlY3Rpb24uXG4nfQorIyBBdXRvZ2VuZXJhdGVkIGJ5IFNwaGlueCBvbiBTYXQgRGVjIDE5IDE5OjI3OjMyIDIwMTUKK3RvcGljcyA9IHsnYXNzZXJ0JzogdSdcblRoZSAiYXNzZXJ0IiBzdGF0ZW1lbnRcbioqKioqKioqKioqKioqKioqKioqKipcblxuQXNzZXJ0IHN0YXRlbWVudHMgYXJlIGEgY29udmVuaWVudCB3YXkgdG8gaW5zZXJ0IGRlYnVnZ2luZyBhc3NlcnRpb25zXG5pbnRvIGEgcHJvZ3JhbTpcblxuICAgYXNzZXJ0X3N0bXQgOjo9ICJhc3NlcnQiIGV4cHJlc3Npb24gWyIsIiBleHByZXNzaW9uXVxuXG5UaGUgc2ltcGxlIGZvcm0sICJhc3NlcnQgZXhwcmVzc2lvbiIsIGlzIGVxdWl2YWxlbnQgdG9cblxuICAgaWYgX19kZWJ1Z19fOlxuICAgICAgaWYgbm90IGV4cHJlc3Npb246IHJhaXNlIEFzc2VydGlvbkVycm9yXG5cblRoZSBleHRlbmRlZCBmb3JtLCAiYXNzZXJ0IGV4cHJlc3Npb24xLCBleHByZXNzaW9uMiIsIGlzIGVxdWl2YWxlbnQgdG9cblxuICAgaWYgX19kZWJ1Z19fOlxuICAgICAgaWYgbm90IGV4cHJlc3Npb24xOiByYWlzZSBBc3NlcnRpb25FcnJvcihleHByZXNzaW9uMilcblxuVGhlc2UgZXF1aXZhbGVuY2VzIGFzc3VtZSB0aGF0ICJfX2RlYnVnX18iIGFuZCAiQXNzZXJ0aW9uRXJyb3IiIHJlZmVyXG50byB0aGUgYnVpbHQtaW4gdmFyaWFibGVzIHdpdGggdGhvc2UgbmFtZXMuICBJbiB0aGUgY3VycmVudFxuaW1wbGVtZW50YXRpb24sIHRoZSBidWlsdC1pbiB2YXJpYWJsZSAiX19kZWJ1Z19fIiBpcyAiVHJ1ZSIgdW5kZXJcbm5vcm1hbCBjaXJjdW1zdGFuY2VzLCAiRmFsc2UiIHdoZW4gb3B0aW1pemF0aW9uIGlzIHJlcXVlc3RlZCAoY29tbWFuZFxubGluZSBvcHRpb24gLU8pLiAgVGhlIGN1cnJlbnQgY29kZSBnZW5lcmF0b3IgZW1pdHMgbm8gY29kZSBmb3IgYW5cbmFzc2VydCBzdGF0ZW1lbnQgd2hlbiBvcHRpbWl6YXRpb24gaXMgcmVxdWVzdGVkIGF0IGNvbXBpbGUgdGltZS4gIE5vdGVcbnRoYXQgaXQgaXMgdW5uZWNlc3NhcnkgdG8gaW5jbHVkZSB0aGUgc291cmNlIGNvZGUgZm9yIHRoZSBleHByZXNzaW9uXG50aGF0IGZhaWxlZCBpbiB0aGUgZXJyb3IgbWVzc2FnZTsgaXQgd2lsbCBiZSBkaXNwbGF5ZWQgYXMgcGFydCBvZiB0aGVcbnN0YWNrIHRyYWNlLlxuXG5Bc3NpZ25tZW50cyB0byAiX19kZWJ1Z19fIiBhcmUgaWxsZWdhbC4gIFRoZSB2YWx1ZSBmb3IgdGhlIGJ1aWx0LWluXG52YXJpYWJsZSBpcyBkZXRlcm1pbmVkIHdoZW4gdGhlIGludGVycHJldGVyIHN0YXJ0cy5cbicsCisgJ2Fzc2lnbm1lbnQnOiB1J1xuQXNzaWdubWVudCBzdGF0ZW1lbnRzXG4qKioqKioqKioqKioqKioqKioqKipcblxuQXNzaWdubWVudCBzdGF0ZW1lbnRzIGFyZSB1c2VkIHRvIChyZSliaW5kIG5hbWVzIHRvIHZhbHVlcyBhbmQgdG9cbm1vZGlmeSBhdHRyaWJ1dGVzIG9yIGl0ZW1zIG9mIG11dGFibGUgb2JqZWN0czpcblxuICAgYXNzaWdubWVudF9zdG10IDo6PSAodGFyZ2V0X2xpc3QgIj0iKSsgKGV4cHJlc3Npb25fbGlzdCB8IHlpZWxkX2V4cHJlc3Npb24pXG4gICB0YXJnZXRfbGlzdCAgICAgOjo9IHRhcmdldCAoIiwiIHRhcmdldCkqIFsiLCJdXG4gICB0YXJnZXQgICAgICAgICAgOjo9IGlkZW50aWZpZXJcbiAgICAgICAgICAgICAgfCAiKCIgdGFyZ2V0X2xpc3QgIikiXG4gICAgICAgICAgICAgIHwgIlsiIHRhcmdldF9saXN0ICJdIlxuICAgICAgICAgICAgICB8IGF0dHJpYnV0ZXJlZlxuICAgICAgICAgICAgICB8IHN1YnNjcmlwdGlvblxuICAgICAgICAgICAgICB8IHNsaWNpbmdcbiAgICAgICAgICAgICAgfCAiKiIgdGFyZ2V0XG5cbihTZWUgc2VjdGlvbiAqUHJpbWFyaWVzKiBmb3IgdGhlIHN5bnRheCBkZWZpbml0aW9ucyBmb3JcbiphdHRyaWJ1dGVyZWYqLCAqc3Vic2NyaXB0aW9uKiwgYW5kICpzbGljaW5nKi4pXG5cbkFuIGFzc2lnbm1lbnQgc3RhdGVtZW50IGV2YWx1YXRlcyB0aGUgZXhwcmVzc2lvbiBsaXN0IChyZW1lbWJlciB0aGF0XG50aGlzIGNhbiBiZSBhIHNpbmdsZSBleHByZXNzaW9uIG9yIGEgY29tbWEtc2VwYXJhdGVkIGxpc3QsIHRoZSBsYXR0ZXJcbnlpZWxkaW5nIGEgdHVwbGUpIGFuZCBhc3NpZ25zIHRoZSBzaW5nbGUgcmVzdWx0aW5nIG9iamVjdCB0byBlYWNoIG9mXG50aGUgdGFyZ2V0IGxpc3RzLCBmcm9tIGxlZnQgdG8gcmlnaHQuXG5cbkFzc2lnbm1lbnQgaXMgZGVmaW5lZCByZWN1cnNpdmVseSBkZXBlbmRpbmcgb24gdGhlIGZvcm0gb2YgdGhlIHRhcmdldFxuKGxpc3QpLiBXaGVuIGEgdGFyZ2V0IGlzIHBhcnQgb2YgYSBtdXRhYmxlIG9iamVjdCAoYW4gYXR0cmlidXRlXG5yZWZlcmVuY2UsIHN1YnNjcmlwdGlvbiBvciBzbGljaW5nKSwgdGhlIG11dGFibGUgb2JqZWN0IG11c3RcbnVsdGltYXRlbHkgcGVyZm9ybSB0aGUgYXNzaWdubWVudCBhbmQgZGVjaWRlIGFib3V0IGl0cyB2YWxpZGl0eSwgYW5kXG5tYXkgcmFpc2UgYW4gZXhjZXB0aW9uIGlmIHRoZSBhc3NpZ25tZW50IGlzIHVuYWNjZXB0YWJsZS4gIFRoZSBydWxlc1xub2JzZXJ2ZWQgYnkgdmFyaW91cyB0eXBlcyBhbmQgdGhlIGV4Y2VwdGlvbnMgcmFpc2VkIGFyZSBnaXZlbiB3aXRoIHRoZVxuZGVmaW5pdGlvbiBvZiB0aGUgb2JqZWN0IHR5cGVzIChzZWUgc2VjdGlvbiAqVGhlIHN0YW5kYXJkIHR5cGVcbmhpZXJhcmNoeSopLlxuXG5Bc3NpZ25tZW50IG9mIGFuIG9iamVjdCB0byBhIHRhcmdldCBsaXN0LCBvcHRpb25hbGx5IGVuY2xvc2VkIGluXG5wYXJlbnRoZXNlcyBvciBzcXVhcmUgYnJhY2tldHMsIGlzIHJlY3Vyc2l2ZWx5IGRlZmluZWQgYXMgZm9sbG93cy5cblxuKiBJZiB0aGUgdGFyZ2V0IGxpc3QgaXMgYSBzaW5nbGUgdGFyZ2V0OiBUaGUgb2JqZWN0IGlzIGFzc2lnbmVkIHRvXG4gIHRoYXQgdGFyZ2V0LlxuXG4qIElmIHRoZSB0YXJnZXQgbGlzdCBpcyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHRhcmdldHM6IFRoZVxuICBvYmplY3QgbXVzdCBiZSBhbiBpdGVyYWJsZSB3aXRoIHRoZSBzYW1lIG51bWJlciBvZiBpdGVtcyBhcyB0aGVyZVxuICBhcmUgdGFyZ2V0cyBpbiB0aGUgdGFyZ2V0IGxpc3QsIGFuZCB0aGUgaXRlbXMgYXJlIGFzc2lnbmVkLCBmcm9tXG4gIGxlZnQgdG8gcmlnaHQsIHRvIHRoZSBjb3JyZXNwb25kaW5nIHRhcmdldHMuXG5cbiAgKiBJZiB0aGUgdGFyZ2V0IGxpc3QgY29udGFpbnMgb25lIHRhcmdldCBwcmVmaXhlZCB3aXRoIGFuXG4gICAgYXN0ZXJpc2ssIGNhbGxlZCBhICJzdGFycmVkIiB0YXJnZXQ6IFRoZSBvYmplY3QgbXVzdCBiZSBhIHNlcXVlbmNlXG4gICAgd2l0aCBhdCBsZWFzdCBhcyBtYW55IGl0ZW1zIGFzIHRoZXJlIGFyZSB0YXJnZXRzIGluIHRoZSB0YXJnZXRcbiAgICBsaXN0LCBtaW51cyBvbmUuICBUaGUgZmlyc3QgaXRlbXMgb2YgdGhlIHNlcXVlbmNlIGFyZSBhc3NpZ25lZCxcbiAgICBmcm9tIGxlZnQgdG8gcmlnaHQsIHRvIHRoZSB0YXJnZXRzIGJlZm9yZSB0aGUgc3RhcnJlZCB0YXJnZXQuICBUaGVcbiAgICBmaW5hbCBpdGVtcyBvZiB0aGUgc2VxdWVuY2UgYXJlIGFzc2lnbmVkIHRvIHRoZSB0YXJnZXRzIGFmdGVyIHRoZVxuICAgIHN0YXJyZWQgdGFyZ2V0LiAgQSBsaXN0IG9mIHRoZSByZW1haW5pbmcgaXRlbXMgaW4gdGhlIHNlcXVlbmNlIGlzXG4gICAgdGhlbiBhc3NpZ25lZCB0byB0aGUgc3RhcnJlZCB0YXJnZXQgKHRoZSBsaXN0IGNhbiBiZSBlbXB0eSkuXG5cbiAgKiBFbHNlOiBUaGUgb2JqZWN0IG11c3QgYmUgYSBzZXF1ZW5jZSB3aXRoIHRoZSBzYW1lIG51bWJlciBvZlxuICAgIGl0ZW1zIGFzIHRoZXJlIGFyZSB0YXJnZXRzIGluIHRoZSB0YXJnZXQgbGlzdCwgYW5kIHRoZSBpdGVtcyBhcmVcbiAgICBhc3NpZ25lZCwgZnJvbSBsZWZ0IHRvIHJpZ2h0LCB0byB0aGUgY29ycmVzcG9uZGluZyB0YXJnZXRzLlxuXG5Bc3NpZ25tZW50IG9mIGFuIG9iamVjdCB0byBhIHNpbmdsZSB0YXJnZXQgaXMgcmVjdXJzaXZlbHkgZGVmaW5lZCBhc1xuZm9sbG93cy5cblxuKiBJZiB0aGUgdGFyZ2V0IGlzIGFuIGlkZW50aWZpZXIgKG5hbWUpOlxuXG4gICogSWYgdGhlIG5hbWUgZG9lcyBub3Qgb2NjdXIgaW4gYSAiZ2xvYmFsIiBvciAibm9ubG9jYWwiIHN0YXRlbWVudFxuICAgIGluIHRoZSBjdXJyZW50IGNvZGUgYmxvY2s6IHRoZSBuYW1lIGlzIGJvdW5kIHRvIHRoZSBvYmplY3QgaW4gdGhlXG4gICAgY3VycmVudCBsb2NhbCBuYW1lc3BhY2UuXG5cbiAgKiBPdGhlcndpc2U6IHRoZSBuYW1lIGlzIGJvdW5kIHRvIHRoZSBvYmplY3QgaW4gdGhlIGdsb2JhbFxuICAgIG5hbWVzcGFjZSBvciB0aGUgb3V0ZXIgbmFtZXNwYWNlIGRldGVybWluZWQgYnkgIm5vbmxvY2FsIixcbiAgICByZXNwZWN0aXZlbHkuXG5cbiAgVGhlIG5hbWUgaXMgcmVib3VuZCBpZiBpdCB3YXMgYWxyZWFkeSBib3VuZC4gIFRoaXMgbWF5IGNhdXNlIHRoZVxuICByZWZlcmVuY2UgY291bnQgZm9yIHRoZSBvYmplY3QgcHJldmlvdXNseSBib3VuZCB0byB0aGUgbmFtZSB0byByZWFjaFxuICB6ZXJvLCBjYXVzaW5nIHRoZSBvYmplY3QgdG8gYmUgZGVhbGxvY2F0ZWQgYW5kIGl0cyBkZXN0cnVjdG9yIChpZiBpdFxuICBoYXMgb25lKSB0byBiZSBjYWxsZWQuXG5cbiogSWYgdGhlIHRhcmdldCBpcyBhIHRhcmdldCBsaXN0IGVuY2xvc2VkIGluIHBhcmVudGhlc2VzIG9yIGluXG4gIHNxdWFyZSBicmFja2V0czogVGhlIG9iamVjdCBtdXN0IGJlIGFuIGl0ZXJhYmxlIHdpdGggdGhlIHNhbWUgbnVtYmVyXG4gIG9mIGl0ZW1zIGFzIHRoZXJlIGFyZSB0YXJnZXRzIGluIHRoZSB0YXJnZXQgbGlzdCwgYW5kIGl0cyBpdGVtcyBhcmVcbiAgYXNzaWduZWQsIGZyb20gbGVmdCB0byByaWdodCwgdG8gdGhlIGNvcnJlc3BvbmRpbmcgdGFyZ2V0cy5cblxuKiBJZiB0aGUgdGFyZ2V0IGlzIGFuIGF0dHJpYnV0ZSByZWZlcmVuY2U6IFRoZSBwcmltYXJ5IGV4cHJlc3Npb24gaW5cbiAgdGhlIHJlZmVyZW5jZSBpcyBldmFsdWF0ZWQuICBJdCBzaG91bGQgeWllbGQgYW4gb2JqZWN0IHdpdGhcbiAgYXNzaWduYWJsZSBhdHRyaWJ1dGVzOyBpZiB0aGlzIGlzIG5vdCB0aGUgY2FzZSwgIlR5cGVFcnJvciIgaXNcbiAgcmFpc2VkLiAgVGhhdCBvYmplY3QgaXMgdGhlbiBhc2tlZCB0byBhc3NpZ24gdGhlIGFzc2lnbmVkIG9iamVjdCB0b1xuICB0aGUgZ2l2ZW4gYXR0cmlidXRlOyBpZiBpdCBjYW5ub3QgcGVyZm9ybSB0aGUgYXNzaWdubWVudCwgaXQgcmFpc2VzXG4gIGFuIGV4Y2VwdGlvbiAodXN1YWxseSBidXQgbm90IG5lY2Vzc2FyaWx5ICJBdHRyaWJ1dGVFcnJvciIpLlxuXG4gIE5vdGU6IElmIHRoZSBvYmplY3QgaXMgYSBjbGFzcyBpbnN0YW5jZSBhbmQgdGhlIGF0dHJpYnV0ZSByZWZlcmVuY2VcbiAgb2NjdXJzIG9uIGJvdGggc2lkZXMgb2YgdGhlIGFzc2lnbm1lbnQgb3BlcmF0b3IsIHRoZSBSSFMgZXhwcmVzc2lvbixcbiAgImEueCIgY2FuIGFjY2VzcyBlaXRoZXIgYW4gaW5zdGFuY2UgYXR0cmlidXRlIG9yIChpZiBubyBpbnN0YW5jZVxuICBhdHRyaWJ1dGUgZXhpc3RzKSBhIGNsYXNzIGF0dHJpYnV0ZS4gIFRoZSBMSFMgdGFyZ2V0ICJhLngiIGlzIGFsd2F5c1xuICBzZXQgYXMgYW4gaW5zdGFuY2UgYXR0cmlidXRlLCBjcmVhdGluZyBpdCBpZiBuZWNlc3NhcnkuICBUaHVzLCB0aGVcbiAgdHdvIG9jY3VycmVuY2VzIG9mICJhLngiIGRvIG5vdCBuZWNlc3NhcmlseSByZWZlciB0byB0aGUgc2FtZVxuICBhdHRyaWJ1dGU6IGlmIHRoZSBSSFMgZXhwcmVzc2lvbiByZWZlcnMgdG8gYSBjbGFzcyBhdHRyaWJ1dGUsIHRoZVxuICBMSFMgY3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBhdHRyaWJ1dGUgYXMgdGhlIHRhcmdldCBvZiB0aGVcbiAgYXNzaWdubWVudDpcblxuICAgICBjbGFzcyBDbHM6XG4gICAgICAgICB4ID0gMyAgICAgICAgICAgICAjIGNsYXNzIHZhcmlhYmxlXG4gICAgIGluc3QgPSBDbHMoKVxuICAgICBpbnN0LnggPSBpbnN0LnggKyAxICAgIyB3cml0ZXMgaW5zdC54IGFzIDQgbGVhdmluZyBDbHMueCBhcyAzXG5cbiAgVGhpcyBkZXNjcmlwdGlvbiBkb2VzIG5vdCBuZWNlc3NhcmlseSBhcHBseSB0byBkZXNjcmlwdG9yXG4gIGF0dHJpYnV0ZXMsIHN1Y2ggYXMgcHJvcGVydGllcyBjcmVhdGVkIHdpdGggInByb3BlcnR5KCkiLlxuXG4qIElmIHRoZSB0YXJnZXQgaXMgYSBzdWJzY3JpcHRpb246IFRoZSBwcmltYXJ5IGV4cHJlc3Npb24gaW4gdGhlXG4gIHJlZmVyZW5jZSBpcyBldmFsdWF0ZWQuICBJdCBzaG91bGQgeWllbGQgZWl0aGVyIGEgbXV0YWJsZSBzZXF1ZW5jZVxuICBvYmplY3QgKHN1Y2ggYXMgYSBsaXN0KSBvciBhIG1hcHBpbmcgb2JqZWN0IChzdWNoIGFzIGEgZGljdGlvbmFyeSkuXG4gIE5leHQsIHRoZSBzdWJzY3JpcHQgZXhwcmVzc2lvbiBpcyBldmFsdWF0ZWQuXG5cbiAgSWYgdGhlIHByaW1hcnkgaXMgYSBtdXRhYmxlIHNlcXVlbmNlIG9iamVjdCAoc3VjaCBhcyBhIGxpc3QpLCB0aGVcbiAgc3Vic2NyaXB0IG11c3QgeWllbGQgYW4gaW50ZWdlci4gIElmIGl0IGlzIG5lZ2F0aXZlLCB0aGUgc2VxdWVuY2VcJ3NcbiAgbGVuZ3RoIGlzIGFkZGVkIHRvIGl0LiAgVGhlIHJlc3VsdGluZyB2YWx1ZSBtdXN0IGJlIGEgbm9ubmVnYXRpdmVcbiAgaW50ZWdlciBsZXNzIHRoYW4gdGhlIHNlcXVlbmNlXCdzIGxlbmd0aCwgYW5kIHRoZSBzZXF1ZW5jZSBpcyBhc2tlZFxuICB0byBhc3NpZ24gdGhlIGFzc2lnbmVkIG9iamVjdCB0byBpdHMgaXRlbSB3aXRoIHRoYXQgaW5kZXguICBJZiB0aGVcbiAgaW5kZXggaXMgb3V0IG9mIHJhbmdlLCAiSW5kZXhFcnJvciIgaXMgcmFpc2VkIChhc3NpZ25tZW50IHRvIGFcbiAgc3Vic2NyaXB0ZWQgc2VxdWVuY2UgY2Fubm90IGFkZCBuZXcgaXRlbXMgdG8gYSBsaXN0KS5cblxuICBJZiB0aGUgcHJpbWFyeSBpcyBhIG1hcHBpbmcgb2JqZWN0IChzdWNoIGFzIGEgZGljdGlvbmFyeSksIHRoZVxuICBzdWJzY3JpcHQgbXVzdCBoYXZlIGEgdHlwZSBjb21wYXRpYmxlIHdpdGggdGhlIG1hcHBpbmdcJ3Mga2V5IHR5cGUsXG4gIGFuZCB0aGUgbWFwcGluZyBpcyB0aGVuIGFza2VkIHRvIGNyZWF0ZSBhIGtleS9kYXR1bSBwYWlyIHdoaWNoIG1hcHNcbiAgdGhlIHN1YnNjcmlwdCB0byB0aGUgYXNzaWduZWQgb2JqZWN0LiAgVGhpcyBjYW4gZWl0aGVyIHJlcGxhY2UgYW5cbiAgZXhpc3Rpbmcga2V5L3ZhbHVlIHBhaXIgd2l0aCB0aGUgc2FtZSBrZXkgdmFsdWUsIG9yIGluc2VydCBhIG5ld1xuICBrZXkvdmFsdWUgcGFpciAoaWYgbm8ga2V5IHdpdGggdGhlIHNhbWUgdmFsdWUgZXhpc3RlZCkuXG5cbiAgRm9yIHVzZXItZGVmaW5lZCBvYmplY3RzLCB0aGUgIl9fc2V0aXRlbV9fKCkiIG1ldGhvZCBpcyBjYWxsZWQgd2l0aFxuICBhcHByb3ByaWF0ZSBhcmd1bWVudHMuXG5cbiogSWYgdGhlIHRhcmdldCBpcyBhIHNsaWNpbmc6IFRoZSBwcmltYXJ5IGV4cHJlc3Npb24gaW4gdGhlXG4gIHJlZmVyZW5jZSBpcyBldmFsdWF0ZWQuICBJdCBzaG91bGQgeWllbGQgYSBtdXRhYmxlIHNlcXVlbmNlIG9iamVjdFxuICAoc3VjaCBhcyBhIGxpc3QpLiAgVGhlIGFzc2lnbmVkIG9iamVjdCBzaG91bGQgYmUgYSBzZXF1ZW5jZSBvYmplY3RcbiAgb2YgdGhlIHNhbWUgdHlwZS4gIE5leHQsIHRoZSBsb3dlciBhbmQgdXBwZXIgYm91bmQgZXhwcmVzc2lvbnMgYXJlXG4gIGV2YWx1YXRlZCwgaW5zb2ZhciB0aGV5IGFyZSBwcmVzZW50OyBkZWZhdWx0cyBhcmUgemVybyBhbmQgdGhlXG4gIHNlcXVlbmNlXCdzIGxlbmd0aC4gIFRoZSBib3VuZHMgc2hvdWxkIGV2YWx1YXRlIHRvIGludGVnZXJzLiBJZlxuICBlaXRoZXIgYm91bmQgaXMgbmVnYXRpdmUsIHRoZSBzZXF1ZW5jZVwncyBsZW5ndGggaXMgYWRkZWQgdG8gaXQuICBUaGVcbiAgcmVzdWx0aW5nIGJvdW5kcyBhcmUgY2xpcHBlZCB0byBsaWUgYmV0d2VlbiB6ZXJvIGFuZCB0aGUgc2VxdWVuY2VcJ3NcbiAgbGVuZ3RoLCBpbmNsdXNpdmUuICBGaW5hbGx5LCB0aGUgc2VxdWVuY2Ugb2JqZWN0IGlzIGFza2VkIHRvIHJlcGxhY2VcbiAgdGhlIHNsaWNlIHdpdGggdGhlIGl0ZW1zIG9mIHRoZSBhc3NpZ25lZCBzZXF1ZW5jZS4gIFRoZSBsZW5ndGggb2ZcbiAgdGhlIHNsaWNlIG1heSBiZSBkaWZmZXJlbnQgZnJvbSB0aGUgbGVuZ3RoIG9mIHRoZSBhc3NpZ25lZCBzZXF1ZW5jZSxcbiAgdGh1cyBjaGFuZ2luZyB0aGUgbGVuZ3RoIG9mIHRoZSB0YXJnZXQgc2VxdWVuY2UsIGlmIHRoZSB0YXJnZXRcbiAgc2VxdWVuY2UgYWxsb3dzIGl0LlxuXG4qKkNQeXRob24gaW1wbGVtZW50YXRpb24gZGV0YWlsOioqIEluIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uLCB0aGVcbnN5bnRheCBmb3IgdGFyZ2V0cyBpcyB0YWtlbiB0byBiZSB0aGUgc2FtZSBhcyBmb3IgZXhwcmVzc2lvbnMsIGFuZFxuaW52YWxpZCBzeW50YXggaXMgcmVqZWN0ZWQgZHVyaW5nIHRoZSBjb2RlIGdlbmVyYXRpb24gcGhhc2UsIGNhdXNpbmdcbmxlc3MgZGV0YWlsZWQgZXJyb3IgbWVzc2FnZXMuXG5cbkFsdGhvdWdoIHRoZSBkZWZpbml0aW9uIG9mIGFzc2lnbm1lbnQgaW1wbGllcyB0aGF0IG92ZXJsYXBzIGJldHdlZW5cbnRoZSBsZWZ0LWhhbmQgc2lkZSBhbmQgdGhlIHJpZ2h0LWhhbmQgc2lkZSBhcmUgXCdzaW11bHRhbmVub3VzXCcgKGZvclxuZXhhbXBsZSAiYSwgYiA9IGIsIGEiIHN3YXBzIHR3byB2YXJpYWJsZXMpLCBvdmVybGFwcyAqd2l0aGluKiB0aGVcbmNvbGxlY3Rpb24gb2YgYXNzaWduZWQtdG8gdmFyaWFibGVzIG9jY3VyIGxlZnQtdG8tcmlnaHQsIHNvbWV0aW1lc1xucmVzdWx0aW5nIGluIGNvbmZ1c2lvbi4gIEZvciBpbnN0YW5jZSwgdGhlIGZvbGxvd2luZyBwcm9ncmFtIHByaW50c1xuIlswLCAyXSI6XG5cbiAgIHggPSBbMCwgMV1cbiAgIGkgPSAwXG4gICBpLCB4W2ldID0gMSwgMiAgICAgICAgICMgaSBpcyB1cGRhdGVkLCB0aGVuIHhbaV0gaXMgdXBkYXRlZFxuICAgcHJpbnQoeClcblxuU2VlIGFsc286ICoqUEVQIDMxMzIqKiAtIEV4dGVuZGVkIEl0ZXJhYmxlIFVucGFja2luZ1xuXG4gICAgIFRoZSBzcGVjaWZpY2F0aW9uIGZvciB0aGUgIip0YXJnZXQiIGZlYXR1cmUuXG5cblxuQXVnbWVudGVkIGFzc2lnbm1lbnQgc3RhdGVtZW50c1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5BdWdtZW50ZWQgYXNzaWdubWVudCBpcyB0aGUgY29tYmluYXRpb24sIGluIGEgc2luZ2xlIHN0YXRlbWVudCwgb2YgYVxuYmluYXJ5IG9wZXJhdGlvbiBhbmQgYW4gYXNzaWdubWVudCBzdGF0ZW1lbnQ6XG5cbiAgIGF1Z21lbnRlZF9hc3NpZ25tZW50X3N0bXQgOjo9IGF1Z3RhcmdldCBhdWdvcCAoZXhwcmVzc2lvbl9saXN0IHwgeWllbGRfZXhwcmVzc2lvbilcbiAgIGF1Z3RhcmdldCAgICAgICAgICAgICAgICAgOjo9IGlkZW50aWZpZXIgfCBhdHRyaWJ1dGVyZWYgfCBzdWJzY3JpcHRpb24gfCBzbGljaW5nXG4gICBhdWdvcCAgICAgICAgICAgICAgICAgICAgIDo6PSAiKz0iIHwgIi09IiB8ICIqPSIgfCAiLz0iIHwgIi8vPSIgfCAiJT0iIHwgIioqPSJcbiAgICAgICAgICAgICB8ICI+Pj0iIHwgIjw8PSIgfCAiJj0iIHwgIl49IiB8ICJ8PSJcblxuKFNlZSBzZWN0aW9uICpQcmltYXJpZXMqIGZvciB0aGUgc3ludGF4IGRlZmluaXRpb25zIG9mIHRoZSBsYXN0IHRocmVlXG5zeW1ib2xzLilcblxuQW4gYXVnbWVudGVkIGFzc2lnbm1lbnQgZXZhbHVhdGVzIHRoZSB0YXJnZXQgKHdoaWNoLCB1bmxpa2Ugbm9ybWFsXG5hc3NpZ25tZW50IHN0YXRlbWVudHMsIGNhbm5vdCBiZSBhbiB1bnBhY2tpbmcpIGFuZCB0aGUgZXhwcmVzc2lvblxubGlzdCwgcGVyZm9ybXMgdGhlIGJpbmFyeSBvcGVyYXRpb24gc3BlY2lmaWMgdG8gdGhlIHR5cGUgb2YgYXNzaWdubWVudFxub24gdGhlIHR3byBvcGVyYW5kcywgYW5kIGFzc2lnbnMgdGhlIHJlc3VsdCB0byB0aGUgb3JpZ2luYWwgdGFyZ2V0LlxuVGhlIHRhcmdldCBpcyBvbmx5IGV2YWx1YXRlZCBvbmNlLlxuXG5BbiBhdWdtZW50ZWQgYXNzaWdubWVudCBleHByZXNzaW9uIGxpa2UgInggKz0gMSIgY2FuIGJlIHJld3JpdHRlbiBhc1xuInggPSB4ICsgMSIgdG8gYWNoaWV2ZSBhIHNpbWlsYXIsIGJ1dCBub3QgZXhhY3RseSBlcXVhbCBlZmZlY3QuIEluIHRoZVxuYXVnbWVudGVkIHZlcnNpb24sICJ4IiBpcyBvbmx5IGV2YWx1YXRlZCBvbmNlLiBBbHNvLCB3aGVuIHBvc3NpYmxlLFxudGhlIGFjdHVhbCBvcGVyYXRpb24gaXMgcGVyZm9ybWVkICppbi1wbGFjZSosIG1lYW5pbmcgdGhhdCByYXRoZXIgdGhhblxuY3JlYXRpbmcgYSBuZXcgb2JqZWN0IGFuZCBhc3NpZ25pbmcgdGhhdCB0byB0aGUgdGFyZ2V0LCB0aGUgb2xkIG9iamVjdFxuaXMgbW9kaWZpZWQgaW5zdGVhZC5cblxuVW5saWtlIG5vcm1hbCBhc3NpZ25tZW50cywgYXVnbWVudGVkIGFzc2lnbm1lbnRzIGV2YWx1YXRlIHRoZSBsZWZ0LVxuaGFuZCBzaWRlICpiZWZvcmUqIGV2YWx1YXRpbmcgdGhlIHJpZ2h0LWhhbmQgc2lkZS4gIEZvciBleGFtcGxlLCAiYVtpXVxuKz0gZih4KSIgZmlyc3QgbG9va3MtdXAgImFbaV0iLCB0aGVuIGl0IGV2YWx1YXRlcyAiZih4KSIgYW5kIHBlcmZvcm1zXG50aGUgYWRkaXRpb24sIGFuZCBsYXN0bHksIGl0IHdyaXRlcyB0aGUgcmVzdWx0IGJhY2sgdG8gImFbaV0iLlxuXG5XaXRoIHRoZSBleGNlcHRpb24gb2YgYXNzaWduaW5nIHRvIHR1cGxlcyBhbmQgbXVsdGlwbGUgdGFyZ2V0cyBpbiBhXG5zaW5nbGUgc3RhdGVtZW50LCB0aGUgYXNzaWdubWVudCBkb25lIGJ5IGF1Z21lbnRlZCBhc3NpZ25tZW50XG5zdGF0ZW1lbnRzIGlzIGhhbmRsZWQgdGhlIHNhbWUgd2F5IGFzIG5vcm1hbCBhc3NpZ25tZW50cy4gU2ltaWxhcmx5LFxud2l0aCB0aGUgZXhjZXB0aW9uIG9mIHRoZSBwb3NzaWJsZSAqaW4tcGxhY2UqIGJlaGF2aW9yLCB0aGUgYmluYXJ5XG5vcGVyYXRpb24gcGVyZm9ybWVkIGJ5IGF1Z21lbnRlZCBhc3NpZ25tZW50IGlzIHRoZSBzYW1lIGFzIHRoZSBub3JtYWxcbmJpbmFyeSBvcGVyYXRpb25zLlxuXG5Gb3IgdGFyZ2V0cyB3aGljaCBhcmUgYXR0cmlidXRlIHJlZmVyZW5jZXMsIHRoZSBzYW1lICpjYXZlYXQgYWJvdXRcbmNsYXNzIGFuZCBpbnN0YW5jZSBhdHRyaWJ1dGVzKiBhcHBsaWVzIGFzIGZvciByZWd1bGFyIGFzc2lnbm1lbnRzLlxuJywKKyAnYXRvbS1pZGVudGlmaWVycyc6IHUnXG5JZGVudGlmaWVycyAoTmFtZXMpXG4qKioqKioqKioqKioqKioqKioqXG5cbkFuIGlkZW50aWZpZXIgb2NjdXJyaW5nIGFzIGFuIGF0b20gaXMgYSBuYW1lLiAgU2VlIHNlY3Rpb25cbipJZGVudGlmaWVycyBhbmQga2V5d29yZHMqIGZvciBsZXhpY2FsIGRlZmluaXRpb24gYW5kIHNlY3Rpb24gKk5hbWluZ1xuYW5kIGJpbmRpbmcqIGZvciBkb2N1bWVudGF0aW9uIG9mIG5hbWluZyBhbmQgYmluZGluZy5cblxuV2hlbiB0aGUgbmFtZSBpcyBib3VuZCB0byBhbiBvYmplY3QsIGV2YWx1YXRpb24gb2YgdGhlIGF0b20geWllbGRzXG50aGF0IG9iamVjdC4gV2hlbiBhIG5hbWUgaXMgbm90IGJvdW5kLCBhbiBhdHRlbXB0IHRvIGV2YWx1YXRlIGl0XG5yYWlzZXMgYSAiTmFtZUVycm9yIiBleGNlcHRpb24uXG5cbioqUHJpdmF0ZSBuYW1lIG1hbmdsaW5nOioqIFdoZW4gYW4gaWRlbnRpZmllciB0aGF0IHRleHR1YWxseSBvY2N1cnMgaW5cbmEgY2xhc3MgZGVmaW5pdGlvbiBiZWdpbnMgd2l0aCB0d28gb3IgbW9yZSB1bmRlcnNjb3JlIGNoYXJhY3RlcnMgYW5kXG5kb2VzIG5vdCBlbmQgaW4gdHdvIG9yIG1vcmUgdW5kZXJzY29yZXMsIGl0IGlzIGNvbnNpZGVyZWQgYSAqcHJpdmF0ZVxubmFtZSogb2YgdGhhdCBjbGFzcy4gUHJpdmF0ZSBuYW1lcyBhcmUgdHJhbnNmb3JtZWQgdG8gYSBsb25nZXIgZm9ybVxuYmVmb3JlIGNvZGUgaXMgZ2VuZXJhdGVkIGZvciB0aGVtLiAgVGhlIHRyYW5zZm9ybWF0aW9uIGluc2VydHMgdGhlXG5jbGFzcyBuYW1lLCB3aXRoIGxlYWRpbmcgdW5kZXJzY29yZXMgcmVtb3ZlZCBhbmQgYSBzaW5nbGUgdW5kZXJzY29yZVxuaW5zZXJ0ZWQsIGluIGZyb250IG9mIHRoZSBuYW1lLiAgRm9yIGV4YW1wbGUsIHRoZSBpZGVudGlmaWVyICJfX3NwYW0iXG5vY2N1cnJpbmcgaW4gYSBjbGFzcyBuYW1lZCAiSGFtIiB3aWxsIGJlIHRyYW5zZm9ybWVkIHRvICJfSGFtX19zcGFtIi5cblRoaXMgdHJhbnNmb3JtYXRpb24gaXMgaW5kZXBlbmRlbnQgb2YgdGhlIHN5bnRhY3RpY2FsIGNvbnRleHQgaW4gd2hpY2hcbnRoZSBpZGVudGlmaWVyIGlzIHVzZWQuICBJZiB0aGUgdHJhbnNmb3JtZWQgbmFtZSBpcyBleHRyZW1lbHkgbG9uZ1xuKGxvbmdlciB0aGFuIDI1NSBjaGFyYWN0ZXJzKSwgaW1wbGVtZW50YXRpb24gZGVmaW5lZCB0cnVuY2F0aW9uIG1heVxuaGFwcGVuLiBJZiB0aGUgY2xhc3MgbmFtZSBjb25zaXN0cyBvbmx5IG9mIHVuZGVyc2NvcmVzLCBub1xudHJhbnNmb3JtYXRpb24gaXMgZG9uZS5cbicsCisgJ2F0b20tbGl0ZXJhbHMnOiB1IlxuTGl0ZXJhbHNcbioqKioqKioqXG5cblB5dGhvbiBzdXBwb3J0cyBzdHJpbmcgYW5kIGJ5dGVzIGxpdGVyYWxzIGFuZCB2YXJpb3VzIG51bWVyaWNcbmxpdGVyYWxzOlxuXG4gICBsaXRlcmFsIDo6PSBzdHJpbmdsaXRlcmFsIHwgYnl0ZXNsaXRlcmFsXG4gICAgICAgICAgICAgICB8IGludGVnZXIgfCBmbG9hdG51bWJlciB8IGltYWdudW1iZXJcblxuRXZhbHVhdGlvbiBvZiBhIGxpdGVyYWwgeWllbGRzIGFuIG9iamVjdCBvZiB0aGUgZ2l2ZW4gdHlwZSAoc3RyaW5nLFxuYnl0ZXMsIGludGVnZXIsIGZsb2F0aW5nIHBvaW50IG51bWJlciwgY29tcGxleCBudW1iZXIpIHdpdGggdGhlIGdpdmVuXG52YWx1ZS4gIFRoZSB2YWx1ZSBtYXkgYmUgYXBwcm94aW1hdGVkIGluIHRoZSBjYXNlIG9mIGZsb2F0aW5nIHBvaW50XG5hbmQgaW1hZ2luYXJ5IChjb21wbGV4KSBsaXRlcmFscy4gIFNlZSBzZWN0aW9uICpMaXRlcmFscyogZm9yIGRldGFpbHMuXG5cbkFsbCBsaXRlcmFscyBjb3JyZXNwb25kIHRvIGltbXV0YWJsZSBkYXRhIHR5cGVzLCBhbmQgaGVuY2UgdGhlXG5vYmplY3QncyBpZGVudGl0eSBpcyBsZXNzIGltcG9ydGFudCB0aGFuIGl0cyB2YWx1ZS4gIE11bHRpcGxlXG5ldmFsdWF0aW9ucyBvZiBsaXRlcmFscyB3aXRoIHRoZSBzYW1lIHZhbHVlIChlaXRoZXIgdGhlIHNhbWVcbm9jY3VycmVuY2UgaW4gdGhlIHByb2dyYW0gdGV4dCBvciBhIGRpZmZlcmVudCBvY2N1cnJlbmNlKSBtYXkgb2J0YWluXG50aGUgc2FtZSBvYmplY3Qgb3IgYSBkaWZmZXJlbnQgb2JqZWN0IHdpdGggdGhlIHNhbWUgdmFsdWUuXG4iLAorICdhdHRyaWJ1dGUtYWNjZXNzJzogdSdcbkN1c3RvbWl6aW5nIGF0dHJpYnV0ZSBhY2Nlc3NcbioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblxuVGhlIGZvbGxvd2luZyBtZXRob2RzIGNhbiBiZSBkZWZpbmVkIHRvIGN1c3RvbWl6ZSB0aGUgbWVhbmluZyBvZlxuYXR0cmlidXRlIGFjY2VzcyAodXNlIG9mLCBhc3NpZ25tZW50IHRvLCBvciBkZWxldGlvbiBvZiAieC5uYW1lIikgZm9yXG5jbGFzcyBpbnN0YW5jZXMuXG5cbm9iamVjdC5fX2dldGF0dHJfXyhzZWxmLCBuYW1lKVxuXG4gICBDYWxsZWQgd2hlbiBhbiBhdHRyaWJ1dGUgbG9va3VwIGhhcyBub3QgZm91bmQgdGhlIGF0dHJpYnV0ZSBpbiB0aGVcbiAgIHVzdWFsIHBsYWNlcyAoaS5lLiBpdCBpcyBub3QgYW4gaW5zdGFuY2UgYXR0cmlidXRlIG5vciBpcyBpdCBmb3VuZFxuICAgaW4gdGhlIGNsYXNzIHRyZWUgZm9yICJzZWxmIikuICAibmFtZSIgaXMgdGhlIGF0dHJpYnV0ZSBuYW1lLiBUaGlzXG4gICBtZXRob2Qgc2hvdWxkIHJldHVybiB0aGUgKGNvbXB1dGVkKSBhdHRyaWJ1dGUgdmFsdWUgb3IgcmFpc2UgYW5cbiAgICJBdHRyaWJ1dGVFcnJvciIgZXhjZXB0aW9uLlxuXG4gICBOb3RlIHRoYXQgaWYgdGhlIGF0dHJpYnV0ZSBpcyBmb3VuZCB0aHJvdWdoIHRoZSBub3JtYWwgbWVjaGFuaXNtLFxuICAgIl9fZ2V0YXR0cl9fKCkiIGlzIG5vdCBjYWxsZWQuICAoVGhpcyBpcyBhbiBpbnRlbnRpb25hbCBhc3ltbWV0cnlcbiAgIGJldHdlZW4gIl9fZ2V0YXR0cl9fKCkiIGFuZCAiX19zZXRhdHRyX18oKSIuKSBUaGlzIGlzIGRvbmUgYm90aCBmb3JcbiAgIGVmZmljaWVuY3kgcmVhc29ucyBhbmQgYmVjYXVzZSBvdGhlcndpc2UgIl9fZ2V0YXR0cl9fKCkiIHdvdWxkIGhhdmVcbiAgIG5vIHdheSB0byBhY2Nlc3Mgb3RoZXIgYXR0cmlidXRlcyBvZiB0aGUgaW5zdGFuY2UuICBOb3RlIHRoYXQgYXRcbiAgIGxlYXN0IGZvciBpbnN0YW5jZSB2YXJpYWJsZXMsIHlvdSBjYW4gZmFrZSB0b3RhbCBjb250cm9sIGJ5IG5vdFxuICAgaW5zZXJ0aW5nIGFueSB2YWx1ZXMgaW4gdGhlIGluc3RhbmNlIGF0dHJpYnV0ZSBkaWN0aW9uYXJ5IChidXRcbiAgIGluc3RlYWQgaW5zZXJ0aW5nIHRoZW0gaW4gYW5vdGhlciBvYmplY3QpLiAgU2VlIHRoZVxuICAgIl9fZ2V0YXR0cmlidXRlX18oKSIgbWV0aG9kIGJlbG93IGZvciBhIHdheSB0byBhY3R1YWxseSBnZXQgdG90YWxcbiAgIGNvbnRyb2wgb3ZlciBhdHRyaWJ1dGUgYWNjZXNzLlxuXG5vYmplY3QuX19nZXRhdHRyaWJ1dGVfXyhzZWxmLCBuYW1lKVxuXG4gICBDYWxsZWQgdW5jb25kaXRpb25hbGx5IHRvIGltcGxlbWVudCBhdHRyaWJ1dGUgYWNjZXNzZXMgZm9yXG4gICBpbnN0YW5jZXMgb2YgdGhlIGNsYXNzLiBJZiB0aGUgY2xhc3MgYWxzbyBkZWZpbmVzICJfX2dldGF0dHJfXygpIixcbiAgIHRoZSBsYXR0ZXIgd2lsbCBub3QgYmUgY2FsbGVkIHVubGVzcyAiX19nZXRhdHRyaWJ1dGVfXygpIiBlaXRoZXJcbiAgIGNhbGxzIGl0IGV4cGxpY2l0bHkgb3IgcmFpc2VzIGFuICJBdHRyaWJ1dGVFcnJvciIuIFRoaXMgbWV0aG9kXG4gICBzaG91bGQgcmV0dXJuIHRoZSAoY29tcHV0ZWQpIGF0dHJpYnV0ZSB2YWx1ZSBvciByYWlzZSBhblxuICAgIkF0dHJpYnV0ZUVycm9yIiBleGNlcHRpb24uIEluIG9yZGVyIHRvIGF2b2lkIGluZmluaXRlIHJlY3Vyc2lvbiBpblxuICAgdGhpcyBtZXRob2QsIGl0cyBpbXBsZW1lbnRhdGlvbiBzaG91bGQgYWx3YXlzIGNhbGwgdGhlIGJhc2UgY2xhc3NcbiAgIG1ldGhvZCB3aXRoIHRoZSBzYW1lIG5hbWUgdG8gYWNjZXNzIGFueSBhdHRyaWJ1dGVzIGl0IG5lZWRzLCBmb3JcbiAgIGV4YW1wbGUsICJvYmplY3QuX19nZXRhdHRyaWJ1dGVfXyhzZWxmLCBuYW1lKSIuXG5cbiAgIE5vdGU6IFRoaXMgbWV0aG9kIG1heSBzdGlsbCBiZSBieXBhc3NlZCB3aGVuIGxvb2tpbmcgdXAgc3BlY2lhbFxuICAgICBtZXRob2RzIGFzIHRoZSByZXN1bHQgb2YgaW1wbGljaXQgaW52b2NhdGlvbiB2aWEgbGFuZ3VhZ2Ugc3ludGF4XG4gICAgIG9yIGJ1aWx0LWluIGZ1bmN0aW9ucy4gU2VlICpTcGVjaWFsIG1ldGhvZCBsb29rdXAqLlxuXG5vYmplY3QuX19zZXRhdHRyX18oc2VsZiwgbmFtZSwgdmFsdWUpXG5cbiAgIENhbGxlZCB3aGVuIGFuIGF0dHJpYnV0ZSBhc3NpZ25tZW50IGlzIGF0dGVtcHRlZC4gIFRoaXMgaXMgY2FsbGVkXG4gICBpbnN0ZWFkIG9mIHRoZSBub3JtYWwgbWVjaGFuaXNtIChpLmUuIHN0b3JlIHRoZSB2YWx1ZSBpbiB0aGVcbiAgIGluc3RhbmNlIGRpY3Rpb25hcnkpLiAqbmFtZSogaXMgdGhlIGF0dHJpYnV0ZSBuYW1lLCAqdmFsdWUqIGlzIHRoZVxuICAgdmFsdWUgdG8gYmUgYXNzaWduZWQgdG8gaXQuXG5cbiAgIElmICJfX3NldGF0dHJfXygpIiB3YW50cyB0byBhc3NpZ24gdG8gYW4gaW5zdGFuY2UgYXR0cmlidXRlLCBpdFxuICAgc2hvdWxkIGNhbGwgdGhlIGJhc2UgY2xhc3MgbWV0aG9kIHdpdGggdGhlIHNhbWUgbmFtZSwgZm9yIGV4YW1wbGUsXG4gICAib2JqZWN0Ll9fc2V0YXR0cl9fKHNlbGYsIG5hbWUsIHZhbHVlKSIuXG5cbm9iamVjdC5fX2RlbGF0dHJfXyhzZWxmLCBuYW1lKVxuXG4gICBMaWtlICJfX3NldGF0dHJfXygpIiBidXQgZm9yIGF0dHJpYnV0ZSBkZWxldGlvbiBpbnN0ZWFkIG9mXG4gICBhc3NpZ25tZW50LiAgVGhpcyBzaG91bGQgb25seSBiZSBpbXBsZW1lbnRlZCBpZiAiZGVsIG9iai5uYW1lIiBpc1xuICAgbWVhbmluZ2Z1bCBmb3IgdGhlIG9iamVjdC5cblxub2JqZWN0Ll9fZGlyX18oc2VsZilcblxuICAgQ2FsbGVkIHdoZW4gImRpcigpIiBpcyBjYWxsZWQgb24gdGhlIG9iamVjdC4gQSBzZXF1ZW5jZSBtdXN0IGJlXG4gICByZXR1cm5lZC4gImRpcigpIiBjb252ZXJ0cyB0aGUgcmV0dXJuZWQgc2VxdWVuY2UgdG8gYSBsaXN0IGFuZFxuICAgc29ydHMgaXQuXG5cblxuSW1wbGVtZW50aW5nIERlc2NyaXB0b3JzXG49PT09PT09PT09PT09PT09PT09PT09PT1cblxuVGhlIGZvbGxvd2luZyBtZXRob2RzIG9ubHkgYXBwbHkgd2hlbiBhbiBpbnN0YW5jZSBvZiB0aGUgY2xhc3NcbmNvbnRhaW5pbmcgdGhlIG1ldGhvZCAoYSBzby1jYWxsZWQgKmRlc2NyaXB0b3IqIGNsYXNzKSBhcHBlYXJzIGluIGFuXG4qb3duZXIqIGNsYXNzICh0aGUgZGVzY3JpcHRvciBtdXN0IGJlIGluIGVpdGhlciB0aGUgb3duZXJcJ3MgY2xhc3NcbmRpY3Rpb25hcnkgb3IgaW4gdGhlIGNsYXNzIGRpY3Rpb25hcnkgZm9yIG9uZSBvZiBpdHMgcGFyZW50cykuICBJbiB0aGVcbmV4YW1wbGVzIGJlbG93LCAidGhlIGF0dHJpYnV0ZSIgcmVmZXJzIHRvIHRoZSBhdHRyaWJ1dGUgd2hvc2UgbmFtZSBpc1xudGhlIGtleSBvZiB0aGUgcHJvcGVydHkgaW4gdGhlIG93bmVyIGNsYXNzXCcgIl9fZGljdF9fIi5cblxub2JqZWN0Ll9fZ2V0X18oc2VsZiwgaW5zdGFuY2UsIG93bmVyKVxuXG4gICBDYWxsZWQgdG8gZ2V0IHRoZSBhdHRyaWJ1dGUgb2YgdGhlIG93bmVyIGNsYXNzIChjbGFzcyBhdHRyaWJ1dGVcbiAgIGFjY2Vzcykgb3Igb2YgYW4gaW5zdGFuY2Ugb2YgdGhhdCBjbGFzcyAoaW5zdGFuY2UgYXR0cmlidXRlXG4gICBhY2Nlc3MpLiAqb3duZXIqIGlzIGFsd2F5cyB0aGUgb3duZXIgY2xhc3MsIHdoaWxlICppbnN0YW5jZSogaXMgdGhlXG4gICBpbnN0YW5jZSB0aGF0IHRoZSBhdHRyaWJ1dGUgd2FzIGFjY2Vzc2VkIHRocm91Z2gsIG9yICJOb25lIiB3aGVuXG4gICB0aGUgYXR0cmlidXRlIGlzIGFjY2Vzc2VkIHRocm91Z2ggdGhlICpvd25lciouICBUaGlzIG1ldGhvZCBzaG91bGRcbiAgIHJldHVybiB0aGUgKGNvbXB1dGVkKSBhdHRyaWJ1dGUgdmFsdWUgb3IgcmFpc2UgYW4gIkF0dHJpYnV0ZUVycm9yIlxuICAgZXhjZXB0aW9uLlxuXG5vYmplY3QuX19zZXRfXyhzZWxmLCBpbnN0YW5jZSwgdmFsdWUpXG5cbiAgIENhbGxlZCB0byBzZXQgdGhlIGF0dHJpYnV0ZSBvbiBhbiBpbnN0YW5jZSAqaW5zdGFuY2UqIG9mIHRoZSBvd25lclxuICAgY2xhc3MgdG8gYSBuZXcgdmFsdWUsICp2YWx1ZSouXG5cbm9iamVjdC5fX2RlbGV0ZV9fKHNlbGYsIGluc3RhbmNlKVxuXG4gICBDYWxsZWQgdG8gZGVsZXRlIHRoZSBhdHRyaWJ1dGUgb24gYW4gaW5zdGFuY2UgKmluc3RhbmNlKiBvZiB0aGVcbiAgIG93bmVyIGNsYXNzLlxuXG5UaGUgYXR0cmlidXRlICJfX29iamNsYXNzX18iIGlzIGludGVycHJldGVkIGJ5IHRoZSAiaW5zcGVjdCIgbW9kdWxlIGFzXG5zcGVjaWZ5aW5nIHRoZSBjbGFzcyB3aGVyZSB0aGlzIG9iamVjdCB3YXMgZGVmaW5lZCAoc2V0dGluZyB0aGlzXG5hcHByb3ByaWF0ZWx5IGNhbiBhc3Npc3QgaW4gcnVudGltZSBpbnRyb3NwZWN0aW9uIG9mIGR5bmFtaWMgY2xhc3NcbmF0dHJpYnV0ZXMpLiBGb3IgY2FsbGFibGVzLCBpdCBtYXkgaW5kaWNhdGUgdGhhdCBhbiBpbnN0YW5jZSBvZiB0aGVcbmdpdmVuIHR5cGUgKG9yIGEgc3ViY2xhc3MpIGlzIGV4cGVjdGVkIG9yIHJlcXVpcmVkIGFzIHRoZSBmaXJzdFxucG9zaXRpb25hbCBhcmd1bWVudCAoZm9yIGV4YW1wbGUsIENQeXRob24gc2V0cyB0aGlzIGF0dHJpYnV0ZSBmb3JcbnVuYm91bmQgbWV0aG9kcyB0aGF0IGFyZSBpbXBsZW1lbnRlZCBpbiBDKS5cblxuXG5JbnZva2luZyBEZXNjcmlwdG9yc1xuPT09PT09PT09PT09PT09PT09PT1cblxuSW4gZ2VuZXJhbCwgYSBkZXNjcmlwdG9yIGlzIGFuIG9iamVjdCBhdHRyaWJ1dGUgd2l0aCAiYmluZGluZ1xuYmVoYXZpb3IiLCBvbmUgd2hvc2UgYXR0cmlidXRlIGFjY2VzcyBoYXMgYmVlbiBvdmVycmlkZGVuIGJ5IG1ldGhvZHNcbmluIHRoZSBkZXNjcmlwdG9yIHByb3RvY29sOiAgIl9fZ2V0X18oKSIsICJfX3NldF9fKCkiLCBhbmRcbiJfX2RlbGV0ZV9fKCkiLiBJZiBhbnkgb2YgdGhvc2UgbWV0aG9kcyBhcmUgZGVmaW5lZCBmb3IgYW4gb2JqZWN0LCBpdFxuaXMgc2FpZCB0byBiZSBhIGRlc2NyaXB0b3IuXG5cblRoZSBkZWZhdWx0IGJlaGF2aW9yIGZvciBhdHRyaWJ1dGUgYWNjZXNzIGlzIHRvIGdldCwgc2V0LCBvciBkZWxldGVcbnRoZSBhdHRyaWJ1dGUgZnJvbSBhbiBvYmplY3RcJ3MgZGljdGlvbmFyeS4gRm9yIGluc3RhbmNlLCAiYS54IiBoYXMgYVxubG9va3VwIGNoYWluIHN0YXJ0aW5nIHdpdGggImEuX19kaWN0X19bXCd4XCddIiwgdGhlblxuInR5cGUoYSkuX19kaWN0X19bXCd4XCddIiwgYW5kIGNvbnRpbnVpbmcgdGhyb3VnaCB0aGUgYmFzZSBjbGFzc2VzIG9mXG4idHlwZShhKSIgZXhjbHVkaW5nIG1ldGFjbGFzc2VzLlxuXG5Ib3dldmVyLCBpZiB0aGUgbG9va2VkLXVwIHZhbHVlIGlzIGFuIG9iamVjdCBkZWZpbmluZyBvbmUgb2YgdGhlXG5kZXNjcmlwdG9yIG1ldGhvZHMsIHRoZW4gUHl0aG9uIG1heSBvdmVycmlkZSB0aGUgZGVmYXVsdCBiZWhhdmlvciBhbmRcbmludm9rZSB0aGUgZGVzY3JpcHRvciBtZXRob2QgaW5zdGVhZC4gIFdoZXJlIHRoaXMgb2NjdXJzIGluIHRoZVxucHJlY2VkZW5jZSBjaGFpbiBkZXBlbmRzIG9uIHdoaWNoIGRlc2NyaXB0b3IgbWV0aG9kcyB3ZXJlIGRlZmluZWQgYW5kXG5ob3cgdGhleSB3ZXJlIGNhbGxlZC5cblxuVGhlIHN0YXJ0aW5nIHBvaW50IGZvciBkZXNjcmlwdG9yIGludm9jYXRpb24gaXMgYSBiaW5kaW5nLCAiYS54Ii4gSG93XG50aGUgYXJndW1lbnRzIGFyZSBhc3NlbWJsZWQgZGVwZW5kcyBvbiAiYSI6XG5cbkRpcmVjdCBDYWxsXG4gICBUaGUgc2ltcGxlc3QgYW5kIGxlYXN0IGNvbW1vbiBjYWxsIGlzIHdoZW4gdXNlciBjb2RlIGRpcmVjdGx5XG4gICBpbnZva2VzIGEgZGVzY3JpcHRvciBtZXRob2Q6ICAgICJ4Ll9fZ2V0X18oYSkiLlxuXG5JbnN0YW5jZSBCaW5kaW5nXG4gICBJZiBiaW5kaW5nIHRvIGFuIG9iamVjdCBpbnN0YW5jZSwgImEueCIgaXMgdHJhbnNmb3JtZWQgaW50byB0aGVcbiAgIGNhbGw6ICJ0eXBlKGEpLl9fZGljdF9fW1wneFwnXS5fX2dldF9fKGEsIHR5cGUoYSkpIi5cblxuQ2xhc3MgQmluZGluZ1xuICAgSWYgYmluZGluZyB0byBhIGNsYXNzLCAiQS54IiBpcyB0cmFuc2Zvcm1lZCBpbnRvIHRoZSBjYWxsOlxuICAgIkEuX19kaWN0X19bXCd4XCddLl9fZ2V0X18oTm9uZSwgQSkiLlxuXG5TdXBlciBCaW5kaW5nXG4gICBJZiAiYSIgaXMgYW4gaW5zdGFuY2Ugb2YgInN1cGVyIiwgdGhlbiB0aGUgYmluZGluZyAic3VwZXIoQixcbiAgIG9iaikubSgpIiBzZWFyY2hlcyAib2JqLl9fY2xhc3NfXy5fX21yb19fIiBmb3IgdGhlIGJhc2UgY2xhc3MgIkEiXG4gICBpbW1lZGlhdGVseSBwcmVjZWRpbmcgIkIiIGFuZCB0aGVuIGludm9rZXMgdGhlIGRlc2NyaXB0b3Igd2l0aCB0aGVcbiAgIGNhbGw6ICJBLl9fZGljdF9fW1wnbVwnXS5fX2dldF9fKG9iaiwgb2JqLl9fY2xhc3NfXykiLlxuXG5Gb3IgaW5zdGFuY2UgYmluZGluZ3MsIHRoZSBwcmVjZWRlbmNlIG9mIGRlc2NyaXB0b3IgaW52b2NhdGlvbiBkZXBlbmRzXG5vbiB0aGUgd2hpY2ggZGVzY3JpcHRvciBtZXRob2RzIGFyZSBkZWZpbmVkLiAgQSBkZXNjcmlwdG9yIGNhbiBkZWZpbmVcbmFueSBjb21iaW5hdGlvbiBvZiAiX19nZXRfXygpIiwgIl9fc2V0X18oKSIgYW5kICJfX2RlbGV0ZV9fKCkiLiAgSWYgaXRcbmRvZXMgbm90IGRlZmluZSAiX19nZXRfXygpIiwgdGhlbiBhY2Nlc3NpbmcgdGhlIGF0dHJpYnV0ZSB3aWxsIHJldHVyblxudGhlIGRlc2NyaXB0b3Igb2JqZWN0IGl0c2VsZiB1bmxlc3MgdGhlcmUgaXMgYSB2YWx1ZSBpbiB0aGUgb2JqZWN0XCdzXG5pbnN0YW5jZSBkaWN0aW9uYXJ5LiAgSWYgdGhlIGRlc2NyaXB0b3IgZGVmaW5lcyAiX19zZXRfXygpIiBhbmQvb3JcbiJfX2RlbGV0ZV9fKCkiLCBpdCBpcyBhIGRhdGEgZGVzY3JpcHRvcjsgaWYgaXQgZGVmaW5lcyBuZWl0aGVyLCBpdCBpc1xuYSBub24tZGF0YSBkZXNjcmlwdG9yLiAgTm9ybWFsbHksIGRhdGEgZGVzY3JpcHRvcnMgZGVmaW5lIGJvdGhcbiJfX2dldF9fKCkiIGFuZCAiX19zZXRfXygpIiwgd2hpbGUgbm9uLWRhdGEgZGVzY3JpcHRvcnMgaGF2ZSBqdXN0IHRoZVxuIl9fZ2V0X18oKSIgbWV0aG9kLiAgRGF0YSBkZXNjcmlwdG9ycyB3aXRoICJfX3NldF9fKCkiIGFuZCAiX19nZXRfXygpIlxuZGVmaW5lZCBhbHdheXMgb3ZlcnJpZGUgYSByZWRlZmluaXRpb24gaW4gYW4gaW5zdGFuY2UgZGljdGlvbmFyeS4gIEluXG5jb250cmFzdCwgbm9uLWRhdGEgZGVzY3JpcHRvcnMgY2FuIGJlIG92ZXJyaWRkZW4gYnkgaW5zdGFuY2VzLlxuXG5QeXRob24gbWV0aG9kcyAoaW5jbHVkaW5nICJzdGF0aWNtZXRob2QoKSIgYW5kICJjbGFzc21ldGhvZCgpIikgYXJlXG5pbXBsZW1lbnRlZCBhcyBub24tZGF0YSBkZXNjcmlwdG9ycy4gIEFjY29yZGluZ2x5LCBpbnN0YW5jZXMgY2FuXG5yZWRlZmluZSBhbmQgb3ZlcnJpZGUgbWV0aG9kcy4gIFRoaXMgYWxsb3dzIGluZGl2aWR1YWwgaW5zdGFuY2VzIHRvXG5hY3F1aXJlIGJlaGF2aW9ycyB0aGF0IGRpZmZlciBmcm9tIG90aGVyIGluc3RhbmNlcyBvZiB0aGUgc2FtZSBjbGFzcy5cblxuVGhlICJwcm9wZXJ0eSgpIiBmdW5jdGlvbiBpcyBpbXBsZW1lbnRlZCBhcyBhIGRhdGEgZGVzY3JpcHRvci5cbkFjY29yZGluZ2x5LCBpbnN0YW5jZXMgY2Fubm90IG92ZXJyaWRlIHRoZSBiZWhhdmlvciBvZiBhIHByb3BlcnR5LlxuXG5cbl9fc2xvdHNfX1xuPT09PT09PT09XG5cbkJ5IGRlZmF1bHQsIGluc3RhbmNlcyBvZiBjbGFzc2VzIGhhdmUgYSBkaWN0aW9uYXJ5IGZvciBhdHRyaWJ1dGVcbnN0b3JhZ2UuICBUaGlzIHdhc3RlcyBzcGFjZSBmb3Igb2JqZWN0cyBoYXZpbmcgdmVyeSBmZXcgaW5zdGFuY2VcbnZhcmlhYmxlcy4gIFRoZSBzcGFjZSBjb25zdW1wdGlvbiBjYW4gYmVjb21lIGFjdXRlIHdoZW4gY3JlYXRpbmcgbGFyZ2Vcbm51bWJlcnMgb2YgaW5zdGFuY2VzLlxuXG5UaGUgZGVmYXVsdCBjYW4gYmUgb3ZlcnJpZGRlbiBieSBkZWZpbmluZyAqX19zbG90c19fKiBpbiBhIGNsYXNzXG5kZWZpbml0aW9uLiBUaGUgKl9fc2xvdHNfXyogZGVjbGFyYXRpb24gdGFrZXMgYSBzZXF1ZW5jZSBvZiBpbnN0YW5jZVxudmFyaWFibGVzIGFuZCByZXNlcnZlcyBqdXN0IGVub3VnaCBzcGFjZSBpbiBlYWNoIGluc3RhbmNlIHRvIGhvbGQgYVxudmFsdWUgZm9yIGVhY2ggdmFyaWFibGUuICBTcGFjZSBpcyBzYXZlZCBiZWNhdXNlICpfX2RpY3RfXyogaXMgbm90XG5jcmVhdGVkIGZvciBlYWNoIGluc3RhbmNlLlxuXG5vYmplY3QuX19zbG90c19fXG5cbiAgIFRoaXMgY2xhc3MgdmFyaWFibGUgY2FuIGJlIGFzc2lnbmVkIGEgc3RyaW5nLCBpdGVyYWJsZSwgb3Igc2VxdWVuY2VcbiAgIG9mIHN0cmluZ3Mgd2l0aCB2YXJpYWJsZSBuYW1lcyB1c2VkIGJ5IGluc3RhbmNlcy4gICpfX3Nsb3RzX18qXG4gICByZXNlcnZlcyBzcGFjZSBmb3IgdGhlIGRlY2xhcmVkIHZhcmlhYmxlcyBhbmQgcHJldmVudHMgdGhlXG4gICBhdXRvbWF0aWMgY3JlYXRpb24gb2YgKl9fZGljdF9fKiBhbmQgKl9fd2Vha3JlZl9fKiBmb3IgZWFjaFxuICAgaW5zdGFuY2UuXG5cblxuTm90ZXMgb24gdXNpbmcgKl9fc2xvdHNfXypcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiogV2hlbiBpbmhlcml0aW5nIGZyb20gYSBjbGFzcyB3aXRob3V0ICpfX3Nsb3RzX18qLCB0aGUgKl9fZGljdF9fKlxuICBhdHRyaWJ1dGUgb2YgdGhhdCBjbGFzcyB3aWxsIGFsd2F5cyBiZSBhY2Nlc3NpYmxlLCBzbyBhICpfX3Nsb3RzX18qXG4gIGRlZmluaXRpb24gaW4gdGhlIHN1YmNsYXNzIGlzIG1lYW5pbmdsZXNzLlxuXG4qIFdpdGhvdXQgYSAqX19kaWN0X18qIHZhcmlhYmxlLCBpbnN0YW5jZXMgY2Fubm90IGJlIGFzc2lnbmVkIG5ld1xuICB2YXJpYWJsZXMgbm90IGxpc3RlZCBpbiB0aGUgKl9fc2xvdHNfXyogZGVmaW5pdGlvbi4gIEF0dGVtcHRzIHRvXG4gIGFzc2lnbiB0byBhbiB1bmxpc3RlZCB2YXJpYWJsZSBuYW1lIHJhaXNlcyAiQXR0cmlidXRlRXJyb3IiLiBJZlxuICBkeW5hbWljIGFzc2lnbm1lbnQgb2YgbmV3IHZhcmlhYmxlcyBpcyBkZXNpcmVkLCB0aGVuIGFkZFxuICAiXCdfX2RpY3RfX1wnIiB0byB0aGUgc2VxdWVuY2Ugb2Ygc3RyaW5ncyBpbiB0aGUgKl9fc2xvdHNfXypcbiAgZGVjbGFyYXRpb24uXG5cbiogV2l0aG91dCBhICpfX3dlYWtyZWZfXyogdmFyaWFibGUgZm9yIGVhY2ggaW5zdGFuY2UsIGNsYXNzZXNcbiAgZGVmaW5pbmcgKl9fc2xvdHNfXyogZG8gbm90IHN1cHBvcnQgd2VhayByZWZlcmVuY2VzIHRvIGl0c1xuICBpbnN0YW5jZXMuIElmIHdlYWsgcmVmZXJlbmNlIHN1cHBvcnQgaXMgbmVlZGVkLCB0aGVuIGFkZFxuICAiXCdfX3dlYWtyZWZfX1wnIiB0byB0aGUgc2VxdWVuY2Ugb2Ygc3RyaW5ncyBpbiB0aGUgKl9fc2xvdHNfXypcbiAgZGVjbGFyYXRpb24uXG5cbiogKl9fc2xvdHNfXyogYXJlIGltcGxlbWVudGVkIGF0IHRoZSBjbGFzcyBsZXZlbCBieSBjcmVhdGluZ1xuICBkZXNjcmlwdG9ycyAoKkltcGxlbWVudGluZyBEZXNjcmlwdG9ycyopIGZvciBlYWNoIHZhcmlhYmxlIG5hbWUuICBBc1xuICBhIHJlc3VsdCwgY2xhc3MgYXR0cmlidXRlcyBjYW5ub3QgYmUgdXNlZCB0byBzZXQgZGVmYXVsdCB2YWx1ZXMgZm9yXG4gIGluc3RhbmNlIHZhcmlhYmxlcyBkZWZpbmVkIGJ5ICpfX3Nsb3RzX18qOyBvdGhlcndpc2UsIHRoZSBjbGFzc1xuICBhdHRyaWJ1dGUgd291bGQgb3ZlcndyaXRlIHRoZSBkZXNjcmlwdG9yIGFzc2lnbm1lbnQuXG5cbiogVGhlIGFjdGlvbiBvZiBhICpfX3Nsb3RzX18qIGRlY2xhcmF0aW9uIGlzIGxpbWl0ZWQgdG8gdGhlIGNsYXNzXG4gIHdoZXJlIGl0IGlzIGRlZmluZWQuICBBcyBhIHJlc3VsdCwgc3ViY2xhc3NlcyB3aWxsIGhhdmUgYSAqX19kaWN0X18qXG4gIHVubGVzcyB0aGV5IGFsc28gZGVmaW5lICpfX3Nsb3RzX18qICh3aGljaCBtdXN0IG9ubHkgY29udGFpbiBuYW1lc1xuICBvZiBhbnkgKmFkZGl0aW9uYWwqIHNsb3RzKS5cblxuKiBJZiBhIGNsYXNzIGRlZmluZXMgYSBzbG90IGFsc28gZGVmaW5lZCBpbiBhIGJhc2UgY2xhc3MsIHRoZVxuICBpbnN0YW5jZSB2YXJpYWJsZSBkZWZpbmVkIGJ5IHRoZSBiYXNlIGNsYXNzIHNsb3QgaXMgaW5hY2Nlc3NpYmxlXG4gIChleGNlcHQgYnkgcmV0cmlldmluZyBpdHMgZGVzY3JpcHRvciBkaXJlY3RseSBmcm9tIHRoZSBiYXNlIGNsYXNzKS5cbiAgVGhpcyByZW5kZXJzIHRoZSBtZWFuaW5nIG9mIHRoZSBwcm9ncmFtIHVuZGVmaW5lZC4gIEluIHRoZSBmdXR1cmUsIGFcbiAgY2hlY2sgbWF5IGJlIGFkZGVkIHRvIHByZXZlbnQgdGhpcy5cblxuKiBOb25lbXB0eSAqX19zbG90c19fKiBkb2VzIG5vdCB3b3JrIGZvciBjbGFzc2VzIGRlcml2ZWQgZnJvbVxuICAidmFyaWFibGUtbGVuZ3RoIiBidWlsdC1pbiB0eXBlcyBzdWNoIGFzICJpbnQiLCAiYnl0ZXMiIGFuZCAidHVwbGUiLlxuXG4qIEFueSBub24tc3RyaW5nIGl0ZXJhYmxlIG1heSBiZSBhc3NpZ25lZCB0byAqX19zbG90c19fKi4gTWFwcGluZ3NcbiAgbWF5IGFsc28gYmUgdXNlZDsgaG93ZXZlciwgaW4gdGhlIGZ1dHVyZSwgc3BlY2lhbCBtZWFuaW5nIG1heSBiZVxuICBhc3NpZ25lZCB0byB0aGUgdmFsdWVzIGNvcnJlc3BvbmRpbmcgdG8gZWFjaCBrZXkuXG5cbiogKl9fY2xhc3NfXyogYXNzaWdubWVudCB3b3JrcyBvbmx5IGlmIGJvdGggY2xhc3NlcyBoYXZlIHRoZSBzYW1lXG4gICpfX3Nsb3RzX18qLlxuJywKKyAnYXR0cmlidXRlLXJlZmVyZW5jZXMnOiB1J1xuQXR0cmlidXRlIHJlZmVyZW5jZXNcbioqKioqKioqKioqKioqKioqKioqXG5cbkFuIGF0dHJpYnV0ZSByZWZlcmVuY2UgaXMgYSBwcmltYXJ5IGZvbGxvd2VkIGJ5IGEgcGVyaW9kIGFuZCBhIG5hbWU6XG5cbiAgIGF0dHJpYnV0ZXJlZiA6Oj0gcHJpbWFyeSAiLiIgaWRlbnRpZmllclxuXG5UaGUgcHJpbWFyeSBtdXN0IGV2YWx1YXRlIHRvIGFuIG9iamVjdCBvZiBhIHR5cGUgdGhhdCBzdXBwb3J0c1xuYXR0cmlidXRlIHJlZmVyZW5jZXMsIHdoaWNoIG1vc3Qgb2JqZWN0cyBkby4gIFRoaXMgb2JqZWN0IGlzIHRoZW5cbmFza2VkIHRvIHByb2R1Y2UgdGhlIGF0dHJpYnV0ZSB3aG9zZSBuYW1lIGlzIHRoZSBpZGVudGlmaWVyLiAgVGhpc1xucHJvZHVjdGlvbiBjYW4gYmUgY3VzdG9taXplZCBieSBvdmVycmlkaW5nIHRoZSAiX19nZXRhdHRyX18oKSIgbWV0aG9kLlxuSWYgdGhpcyBhdHRyaWJ1dGUgaXMgbm90IGF2YWlsYWJsZSwgdGhlIGV4Y2VwdGlvbiAiQXR0cmlidXRlRXJyb3IiIGlzXG5yYWlzZWQuICBPdGhlcndpc2UsIHRoZSB0eXBlIGFuZCB2YWx1ZSBvZiB0aGUgb2JqZWN0IHByb2R1Y2VkIGlzXG5kZXRlcm1pbmVkIGJ5IHRoZSBvYmplY3QuICBNdWx0aXBsZSBldmFsdWF0aW9ucyBvZiB0aGUgc2FtZSBhdHRyaWJ1dGVcbnJlZmVyZW5jZSBtYXkgeWllbGQgZGlmZmVyZW50IG9iamVjdHMuXG4nLAorICdhdWdhc3NpZ24nOiB1J1xuQXVnbWVudGVkIGFzc2lnbm1lbnQgc3RhdGVtZW50c1xuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG5BdWdtZW50ZWQgYXNzaWdubWVudCBpcyB0aGUgY29tYmluYXRpb24sIGluIGEgc2luZ2xlIHN0YXRlbWVudCwgb2YgYVxuYmluYXJ5IG9wZXJhdGlvbiBhbmQgYW4gYXNzaWdubWVudCBzdGF0ZW1lbnQ6XG5cbiAgIGF1Z21lbnRlZF9hc3NpZ25tZW50X3N0bXQgOjo9IGF1Z3RhcmdldCBhdWdvcCAoZXhwcmVzc2lvbl9saXN0IHwgeWllbGRfZXhwcmVzc2lvbilcbiAgIGF1Z3RhcmdldCAgICAgICAgICAgICAgICAgOjo9IGlkZW50aWZpZXIgfCBhdHRyaWJ1dGVyZWYgfCBzdWJzY3JpcHRpb24gfCBzbGljaW5nXG4gICBhdWdvcCAgICAgICAgICAgICAgICAgICAgIDo6PSAiKz0iIHwgIi09IiB8ICIqPSIgfCAiLz0iIHwgIi8vPSIgfCAiJT0iIHwgIioqPSJcbiAgICAgICAgICAgICB8ICI+Pj0iIHwgIjw8PSIgfCAiJj0iIHwgIl49IiB8ICJ8PSJcblxuKFNlZSBzZWN0aW9uICpQcmltYXJpZXMqIGZvciB0aGUgc3ludGF4IGRlZmluaXRpb25zIG9mIHRoZSBsYXN0IHRocmVlXG5zeW1ib2xzLilcblxuQW4gYXVnbWVudGVkIGFzc2lnbm1lbnQgZXZhbHVhdGVzIHRoZSB0YXJnZXQgKHdoaWNoLCB1bmxpa2Ugbm9ybWFsXG5hc3NpZ25tZW50IHN0YXRlbWVudHMsIGNhbm5vdCBiZSBhbiB1bnBhY2tpbmcpIGFuZCB0aGUgZXhwcmVzc2lvblxubGlzdCwgcGVyZm9ybXMgdGhlIGJpbmFyeSBvcGVyYXRpb24gc3BlY2lmaWMgdG8gdGhlIHR5cGUgb2YgYXNzaWdubWVudFxub24gdGhlIHR3byBvcGVyYW5kcywgYW5kIGFzc2lnbnMgdGhlIHJlc3VsdCB0byB0aGUgb3JpZ2luYWwgdGFyZ2V0LlxuVGhlIHRhcmdldCBpcyBvbmx5IGV2YWx1YXRlZCBvbmNlLlxuXG5BbiBhdWdtZW50ZWQgYXNzaWdubWVudCBleHByZXNzaW9uIGxpa2UgInggKz0gMSIgY2FuIGJlIHJld3JpdHRlbiBhc1xuInggPSB4ICsgMSIgdG8gYWNoaWV2ZSBhIHNpbWlsYXIsIGJ1dCBub3QgZXhhY3RseSBlcXVhbCBlZmZlY3QuIEluIHRoZVxuYXVnbWVudGVkIHZlcnNpb24sICJ4IiBpcyBvbmx5IGV2YWx1YXRlZCBvbmNlLiBBbHNvLCB3aGVuIHBvc3NpYmxlLFxudGhlIGFjdHVhbCBvcGVyYXRpb24gaXMgcGVyZm9ybWVkICppbi1wbGFjZSosIG1lYW5pbmcgdGhhdCByYXRoZXIgdGhhblxuY3JlYXRpbmcgYSBuZXcgb2JqZWN0IGFuZCBhc3NpZ25pbmcgdGhhdCB0byB0aGUgdGFyZ2V0LCB0aGUgb2xkIG9iamVjdFxuaXMgbW9kaWZpZWQgaW5zdGVhZC5cblxuVW5saWtlIG5vcm1hbCBhc3NpZ25tZW50cywgYXVnbWVudGVkIGFzc2lnbm1lbnRzIGV2YWx1YXRlIHRoZSBsZWZ0LVxuaGFuZCBzaWRlICpiZWZvcmUqIGV2YWx1YXRpbmcgdGhlIHJpZ2h0LWhhbmQgc2lkZS4gIEZvciBleGFtcGxlLCAiYVtpXVxuKz0gZih4KSIgZmlyc3QgbG9va3MtdXAgImFbaV0iLCB0aGVuIGl0IGV2YWx1YXRlcyAiZih4KSIgYW5kIHBlcmZvcm1zXG50aGUgYWRkaXRpb24sIGFuZCBsYXN0bHksIGl0IHdyaXRlcyB0aGUgcmVzdWx0IGJhY2sgdG8gImFbaV0iLlxuXG5XaXRoIHRoZSBleGNlcHRpb24gb2YgYXNzaWduaW5nIHRvIHR1cGxlcyBhbmQgbXVsdGlwbGUgdGFyZ2V0cyBpbiBhXG5zaW5nbGUgc3RhdGVtZW50LCB0aGUgYXNzaWdubWVudCBkb25lIGJ5IGF1Z21lbnRlZCBhc3NpZ25tZW50XG5zdGF0ZW1lbnRzIGlzIGhhbmRsZWQgdGhlIHNhbWUgd2F5IGFzIG5vcm1hbCBhc3NpZ25tZW50cy4gU2ltaWxhcmx5LFxud2l0aCB0aGUgZXhjZXB0aW9uIG9mIHRoZSBwb3NzaWJsZSAqaW4tcGxhY2UqIGJlaGF2aW9yLCB0aGUgYmluYXJ5XG5vcGVyYXRpb24gcGVyZm9ybWVkIGJ5IGF1Z21lbnRlZCBhc3NpZ25tZW50IGlzIHRoZSBzYW1lIGFzIHRoZSBub3JtYWxcbmJpbmFyeSBvcGVyYXRpb25zLlxuXG5Gb3IgdGFyZ2V0cyB3aGljaCBhcmUgYXR0cmlidXRlIHJlZmVyZW5jZXMsIHRoZSBzYW1lICpjYXZlYXQgYWJvdXRcbmNsYXNzIGFuZCBpbnN0YW5jZSBhdHRyaWJ1dGVzKiBhcHBsaWVzIGFzIGZvciByZWd1bGFyIGFzc2lnbm1lbnRzLlxuJywKKyAnYmluYXJ5JzogdSdcbkJpbmFyeSBhcml0aG1ldGljIG9wZXJhdGlvbnNcbioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblxuVGhlIGJpbmFyeSBhcml0aG1ldGljIG9wZXJhdGlvbnMgaGF2ZSB0aGUgY29udmVudGlvbmFsIHByaW9yaXR5XG5sZXZlbHMuICBOb3RlIHRoYXQgc29tZSBvZiB0aGVzZSBvcGVyYXRpb25zIGFsc28gYXBwbHkgdG8gY2VydGFpbiBub24tXG5udW1lcmljIHR5cGVzLiAgQXBhcnQgZnJvbSB0aGUgcG93ZXIgb3BlcmF0b3IsIHRoZXJlIGFyZSBvbmx5IHR3b1xubGV2ZWxzLCBvbmUgZm9yIG11bHRpcGxpY2F0aXZlIG9wZXJhdG9ycyBhbmQgb25lIGZvciBhZGRpdGl2ZVxub3BlcmF0b3JzOlxuXG4gICBtX2V4cHIgOjo9IHVfZXhwciB8IG1fZXhwciAiKiIgdV9leHByIHwgbV9leHByICIvLyIgdV9leHByIHwgbV9leHByICIvIiB1X2V4cHJcbiAgICAgICAgICAgICAgfCBtX2V4cHIgIiUiIHVfZXhwclxuICAgYV9leHByIDo6PSBtX2V4cHIgfCBhX2V4cHIgIisiIG1fZXhwciB8IGFfZXhwciAiLSIgbV9leHByXG5cblRoZSAiKiIgKG11bHRpcGxpY2F0aW9uKSBvcGVyYXRvciB5aWVsZHMgdGhlIHByb2R1Y3Qgb2YgaXRzIGFyZ3VtZW50cy5cblRoZSBhcmd1bWVudHMgbXVzdCBlaXRoZXIgYm90aCBiZSBudW1iZXJzLCBvciBvbmUgYXJndW1lbnQgbXVzdCBiZSBhblxuaW50ZWdlciBhbmQgdGhlIG90aGVyIG11c3QgYmUgYSBzZXF1ZW5jZS4gSW4gdGhlIGZvcm1lciBjYXNlLCB0aGVcbm51bWJlcnMgYXJlIGNvbnZlcnRlZCB0byBhIGNvbW1vbiB0eXBlIGFuZCB0aGVuIG11bHRpcGxpZWQgdG9nZXRoZXIuXG5JbiB0aGUgbGF0dGVyIGNhc2UsIHNlcXVlbmNlIHJlcGV0aXRpb24gaXMgcGVyZm9ybWVkOyBhIG5lZ2F0aXZlXG5yZXBldGl0aW9uIGZhY3RvciB5aWVsZHMgYW4gZW1wdHkgc2VxdWVuY2UuXG5cblRoZSAiLyIgKGRpdmlzaW9uKSBhbmQgIi8vIiAoZmxvb3IgZGl2aXNpb24pIG9wZXJhdG9ycyB5aWVsZCB0aGVcbnF1b3RpZW50IG9mIHRoZWlyIGFyZ3VtZW50cy4gIFRoZSBudW1lcmljIGFyZ3VtZW50cyBhcmUgZmlyc3RcbmNvbnZlcnRlZCB0byBhIGNvbW1vbiB0eXBlLiBEaXZpc2lvbiBvZiBpbnRlZ2VycyB5aWVsZHMgYSBmbG9hdCwgd2hpbGVcbmZsb29yIGRpdmlzaW9uIG9mIGludGVnZXJzIHJlc3VsdHMgaW4gYW4gaW50ZWdlcjsgdGhlIHJlc3VsdCBpcyB0aGF0XG5vZiBtYXRoZW1hdGljYWwgZGl2aXNpb24gd2l0aCB0aGUgXCdmbG9vclwnIGZ1bmN0aW9uIGFwcGxpZWQgdG8gdGhlXG5yZXN1bHQuICBEaXZpc2lvbiBieSB6ZXJvIHJhaXNlcyB0aGUgIlplcm9EaXZpc2lvbkVycm9yIiBleGNlcHRpb24uXG5cblRoZSAiJSIgKG1vZHVsbykgb3BlcmF0b3IgeWllbGRzIHRoZSByZW1haW5kZXIgZnJvbSB0aGUgZGl2aXNpb24gb2ZcbnRoZSBmaXJzdCBhcmd1bWVudCBieSB0aGUgc2Vjb25kLiAgVGhlIG51bWVyaWMgYXJndW1lbnRzIGFyZSBmaXJzdFxuY29udmVydGVkIHRvIGEgY29tbW9uIHR5cGUuICBBIHplcm8gcmlnaHQgYXJndW1lbnQgcmFpc2VzIHRoZVxuIlplcm9EaXZpc2lvbkVycm9yIiBleGNlcHRpb24uICBUaGUgYXJndW1lbnRzIG1heSBiZSBmbG9hdGluZyBwb2ludFxubnVtYmVycywgZS5nLiwgIjMuMTQlMC43IiBlcXVhbHMgIjAuMzQiIChzaW5jZSAiMy4xNCIgZXF1YWxzICI0KjAuNyArXG4wLjM0Ii4pICBUaGUgbW9kdWxvIG9wZXJhdG9yIGFsd2F5cyB5aWVsZHMgYSByZXN1bHQgd2l0aCB0aGUgc2FtZSBzaWduXG5hcyBpdHMgc2Vjb25kIG9wZXJhbmQgKG9yIHplcm8pOyB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgdGhlIHJlc3VsdCBpc1xuc3RyaWN0bHkgc21hbGxlciB0aGFuIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiB0aGUgc2Vjb25kIG9wZXJhbmQgWzFdLlxuXG5UaGUgZmxvb3IgZGl2aXNpb24gYW5kIG1vZHVsbyBvcGVyYXRvcnMgYXJlIGNvbm5lY3RlZCBieSB0aGUgZm9sbG93aW5nXG5pZGVudGl0eTogInggPT0gKHgvL3kpKnkgKyAoeCV5KSIuICBGbG9vciBkaXZpc2lvbiBhbmQgbW9kdWxvIGFyZSBhbHNvXG5jb25uZWN0ZWQgd2l0aCB0aGUgYnVpbHQtaW4gZnVuY3Rpb24gImRpdm1vZCgpIjogImRpdm1vZCh4LCB5KSA9PVxuKHgvL3ksIHgleSkiLiBbMl0uXG5cbkluIGFkZGl0aW9uIHRvIHBlcmZvcm1pbmcgdGhlIG1vZHVsbyBvcGVyYXRpb24gb24gbnVtYmVycywgdGhlICIlIlxub3BlcmF0b3IgaXMgYWxzbyBvdmVybG9hZGVkIGJ5IHN0cmluZyBvYmplY3RzIHRvIHBlcmZvcm0gb2xkLXN0eWxlXG5zdHJpbmcgZm9ybWF0dGluZyAoYWxzbyBrbm93biBhcyBpbnRlcnBvbGF0aW9uKS4gIFRoZSBzeW50YXggZm9yXG5zdHJpbmcgZm9ybWF0dGluZyBpcyBkZXNjcmliZWQgaW4gdGhlIFB5dGhvbiBMaWJyYXJ5IFJlZmVyZW5jZSxcbnNlY3Rpb24gKnByaW50Zi1zdHlsZSBTdHJpbmcgRm9ybWF0dGluZyouXG5cblRoZSBmbG9vciBkaXZpc2lvbiBvcGVyYXRvciwgdGhlIG1vZHVsbyBvcGVyYXRvciwgYW5kIHRoZSAiZGl2bW9kKCkiXG5mdW5jdGlvbiBhcmUgbm90IGRlZmluZWQgZm9yIGNvbXBsZXggbnVtYmVycy4gIEluc3RlYWQsIGNvbnZlcnQgdG8gYVxuZmxvYXRpbmcgcG9pbnQgbnVtYmVyIHVzaW5nIHRoZSAiYWJzKCkiIGZ1bmN0aW9uIGlmIGFwcHJvcHJpYXRlLlxuXG5UaGUgIisiIChhZGRpdGlvbikgb3BlcmF0b3IgeWllbGRzIHRoZSBzdW0gb2YgaXRzIGFyZ3VtZW50cy4gIFRoZVxuYXJndW1lbnRzIG11c3QgZWl0aGVyIGJvdGggYmUgbnVtYmVycyBvciBib3RoIGJlIHNlcXVlbmNlcyBvZiB0aGUgc2FtZVxudHlwZS4gIEluIHRoZSBmb3JtZXIgY2FzZSwgdGhlIG51bWJlcnMgYXJlIGNvbnZlcnRlZCB0byBhIGNvbW1vbiB0eXBlXG5hbmQgdGhlbiBhZGRlZCB0b2dldGhlci4gSW4gdGhlIGxhdHRlciBjYXNlLCB0aGUgc2VxdWVuY2VzIGFyZVxuY29uY2F0ZW5hdGVkLlxuXG5UaGUgIi0iIChzdWJ0cmFjdGlvbikgb3BlcmF0b3IgeWllbGRzIHRoZSBkaWZmZXJlbmNlIG9mIGl0cyBhcmd1bWVudHMuXG5UaGUgbnVtZXJpYyBhcmd1bWVudHMgYXJlIGZpcnN0IGNvbnZlcnRlZCB0byBhIGNvbW1vbiB0eXBlLlxuJywKKyAnYml0d2lzZSc6IHUnXG5CaW5hcnkgYml0d2lzZSBvcGVyYXRpb25zXG4qKioqKioqKioqKioqKioqKioqKioqKioqXG5cbkVhY2ggb2YgdGhlIHRocmVlIGJpdHdpc2Ugb3BlcmF0aW9ucyBoYXMgYSBkaWZmZXJlbnQgcHJpb3JpdHkgbGV2ZWw6XG5cbiAgIGFuZF9leHByIDo6PSBzaGlmdF9leHByIHwgYW5kX2V4cHIgIiYiIHNoaWZ0X2V4cHJcbiAgIHhvcl9leHByIDo6PSBhbmRfZXhwciB8IHhvcl9leHByICJeIiBhbmRfZXhwclxuICAgb3JfZXhwciAgOjo9IHhvcl9leHByIHwgb3JfZXhwciAifCIgeG9yX2V4cHJcblxuVGhlICImIiBvcGVyYXRvciB5aWVsZHMgdGhlIGJpdHdpc2UgQU5EIG9mIGl0cyBhcmd1bWVudHMsIHdoaWNoIG11c3RcbmJlIGludGVnZXJzLlxuXG5UaGUgIl4iIG9wZXJhdG9yIHlpZWxkcyB0aGUgYml0d2lzZSBYT1IgKGV4Y2x1c2l2ZSBPUikgb2YgaXRzXG5hcmd1bWVudHMsIHdoaWNoIG11c3QgYmUgaW50ZWdlcnMuXG5cblRoZSAifCIgb3BlcmF0b3IgeWllbGRzIHRoZSBiaXR3aXNlIChpbmNsdXNpdmUpIE9SIG9mIGl0cyBhcmd1bWVudHMsXG53aGljaCBtdXN0IGJlIGludGVnZXJzLlxuJywKKyAnYmx0aW4tY29kZS1vYmplY3RzJzogdSdcbkNvZGUgT2JqZWN0c1xuKioqKioqKioqKioqXG5cbkNvZGUgb2JqZWN0cyBhcmUgdXNlZCBieSB0aGUgaW1wbGVtZW50YXRpb24gdG8gcmVwcmVzZW50ICJwc2V1ZG8tXG5jb21waWxlZCIgZXhlY3V0YWJsZSBQeXRob24gY29kZSBzdWNoIGFzIGEgZnVuY3Rpb24gYm9keS4gVGhleSBkaWZmZXJcbmZyb20gZnVuY3Rpb24gb2JqZWN0cyBiZWNhdXNlIHRoZXkgZG9uXCd0IGNvbnRhaW4gYSByZWZlcmVuY2UgdG8gdGhlaXJcbmdsb2JhbCBleGVjdXRpb24gZW52aXJvbm1lbnQuICBDb2RlIG9iamVjdHMgYXJlIHJldHVybmVkIGJ5IHRoZSBidWlsdC1cbmluICJjb21waWxlKCkiIGZ1bmN0aW9uIGFuZCBjYW4gYmUgZXh0cmFjdGVkIGZyb20gZnVuY3Rpb24gb2JqZWN0c1xudGhyb3VnaCB0aGVpciAiX19jb2RlX18iIGF0dHJpYnV0ZS4gU2VlIGFsc28gdGhlICJjb2RlIiBtb2R1bGUuXG5cbkEgY29kZSBvYmplY3QgY2FuIGJlIGV4ZWN1dGVkIG9yIGV2YWx1YXRlZCBieSBwYXNzaW5nIGl0IChpbnN0ZWFkIG9mIGFcbnNvdXJjZSBzdHJpbmcpIHRvIHRoZSAiZXhlYygpIiBvciAiZXZhbCgpIiAgYnVpbHQtaW4gZnVuY3Rpb25zLlxuXG5TZWUgKlRoZSBzdGFuZGFyZCB0eXBlIGhpZXJhcmNoeSogZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4nLAorICdibHRpbi1lbGxpcHNpcy1vYmplY3QnOiB1J1xuVGhlIEVsbGlwc2lzIE9iamVjdFxuKioqKioqKioqKioqKioqKioqKlxuXG5UaGlzIG9iamVjdCBpcyBjb21tb25seSB1c2VkIGJ5IHNsaWNpbmcgKHNlZSAqU2xpY2luZ3MqKS4gIEl0IHN1cHBvcnRzXG5ubyBzcGVjaWFsIG9wZXJhdGlvbnMuICBUaGVyZSBpcyBleGFjdGx5IG9uZSBlbGxpcHNpcyBvYmplY3QsIG5hbWVkXG4iRWxsaXBzaXMiIChhIGJ1aWx0LWluIG5hbWUpLiAgInR5cGUoRWxsaXBzaXMpKCkiIHByb2R1Y2VzIHRoZVxuIkVsbGlwc2lzIiBzaW5nbGV0b24uXG5cbkl0IGlzIHdyaXR0ZW4gYXMgIkVsbGlwc2lzIiBvciAiLi4uIi5cbicsCisgJ2JsdGluLW51bGwtb2JqZWN0JzogdSdcblRoZSBOdWxsIE9iamVjdFxuKioqKioqKioqKioqKioqXG5cblRoaXMgb2JqZWN0IGlzIHJldHVybmVkIGJ5IGZ1bmN0aW9ucyB0aGF0IGRvblwndCBleHBsaWNpdGx5IHJldHVybiBhXG52YWx1ZS4gIEl0IHN1cHBvcnRzIG5vIHNwZWNpYWwgb3BlcmF0aW9ucy4gIFRoZXJlIGlzIGV4YWN0bHkgb25lIG51bGxcbm9iamVjdCwgbmFtZWQgIk5vbmUiIChhIGJ1aWx0LWluIG5hbWUpLiAgInR5cGUoTm9uZSkoKSIgcHJvZHVjZXMgdGhlXG5zYW1lIHNpbmdsZXRvbi5cblxuSXQgaXMgd3JpdHRlbiBhcyAiTm9uZSIuXG4nLAorICdibHRpbi10eXBlLW9iamVjdHMnOiB1J1xuVHlwZSBPYmplY3RzXG4qKioqKioqKioqKipcblxuVHlwZSBvYmplY3RzIHJlcHJlc2VudCB0aGUgdmFyaW91cyBvYmplY3QgdHlwZXMuICBBbiBvYmplY3RcJ3MgdHlwZSBpc1xuYWNjZXNzZWQgYnkgdGhlIGJ1aWx0LWluIGZ1bmN0aW9uICJ0eXBlKCkiLiAgVGhlcmUgYXJlIG5vIHNwZWNpYWxcbm9wZXJhdGlvbnMgb24gdHlwZXMuICBUaGUgc3RhbmRhcmQgbW9kdWxlICJ0eXBlcyIgZGVmaW5lcyBuYW1lcyBmb3JcbmFsbCBzdGFuZGFyZCBidWlsdC1pbiB0eXBlcy5cblxuVHlwZXMgYXJlIHdyaXR0ZW4gbGlrZSB0aGlzOiAiPGNsYXNzIFwnaW50XCc+Ii5cbicsCisgJ2Jvb2xlYW5zJzogdSdcbkJvb2xlYW4gb3BlcmF0aW9uc1xuKioqKioqKioqKioqKioqKioqXG5cbiAgIG9yX3Rlc3QgIDo6PSBhbmRfdGVzdCB8IG9yX3Rlc3QgIm9yIiBhbmRfdGVzdFxuICAgYW5kX3Rlc3QgOjo9IG5vdF90ZXN0IHwgYW5kX3Rlc3QgImFuZCIgbm90X3Rlc3RcbiAgIG5vdF90ZXN0IDo6PSBjb21wYXJpc29uIHwgIm5vdCIgbm90X3Rlc3RcblxuSW4gdGhlIGNvbnRleHQgb2YgQm9vbGVhbiBvcGVyYXRpb25zLCBhbmQgYWxzbyB3aGVuIGV4cHJlc3Npb25zIGFyZVxudXNlZCBieSBjb250cm9sIGZsb3cgc3RhdGVtZW50cywgdGhlIGZvbGxvd2luZyB2YWx1ZXMgYXJlIGludGVycHJldGVkXG5hcyBmYWxzZTogIkZhbHNlIiwgIk5vbmUiLCBudW1lcmljIHplcm8gb2YgYWxsIHR5cGVzLCBhbmQgZW1wdHlcbnN0cmluZ3MgYW5kIGNvbnRhaW5lcnMgKGluY2x1ZGluZyBzdHJpbmdzLCB0dXBsZXMsIGxpc3RzLFxuZGljdGlvbmFyaWVzLCBzZXRzIGFuZCBmcm96ZW5zZXRzKS4gIEFsbCBvdGhlciB2YWx1ZXMgYXJlIGludGVycHJldGVkXG5hcyB0cnVlLiAgVXNlci1kZWZpbmVkIG9iamVjdHMgY2FuIGN1c3RvbWl6ZSB0aGVpciB0cnV0aCB2YWx1ZSBieVxucHJvdmlkaW5nIGEgIl9fYm9vbF9fKCkiIG1ldGhvZC5cblxuVGhlIG9wZXJhdG9yICJub3QiIHlpZWxkcyAiVHJ1ZSIgaWYgaXRzIGFyZ3VtZW50IGlzIGZhbHNlLCAiRmFsc2UiXG5vdGhlcndpc2UuXG5cblRoZSBleHByZXNzaW9uICJ4IGFuZCB5IiBmaXJzdCBldmFsdWF0ZXMgKngqOyBpZiAqeCogaXMgZmFsc2UsIGl0c1xudmFsdWUgaXMgcmV0dXJuZWQ7IG90aGVyd2lzZSwgKnkqIGlzIGV2YWx1YXRlZCBhbmQgdGhlIHJlc3VsdGluZyB2YWx1ZVxuaXMgcmV0dXJuZWQuXG5cblRoZSBleHByZXNzaW9uICJ4IG9yIHkiIGZpcnN0IGV2YWx1YXRlcyAqeCo7IGlmICp4KiBpcyB0cnVlLCBpdHMgdmFsdWVcbmlzIHJldHVybmVkOyBvdGhlcndpc2UsICp5KiBpcyBldmFsdWF0ZWQgYW5kIHRoZSByZXN1bHRpbmcgdmFsdWUgaXNcbnJldHVybmVkLlxuXG4oTm90ZSB0aGF0IG5laXRoZXIgImFuZCIgbm9yICJvciIgcmVzdHJpY3QgdGhlIHZhbHVlIGFuZCB0eXBlIHRoZXlcbnJldHVybiB0byAiRmFsc2UiIGFuZCAiVHJ1ZSIsIGJ1dCByYXRoZXIgcmV0dXJuIHRoZSBsYXN0IGV2YWx1YXRlZFxuYXJndW1lbnQuICBUaGlzIGlzIHNvbWV0aW1lcyB1c2VmdWwsIGUuZy4sIGlmICJzIiBpcyBhIHN0cmluZyB0aGF0XG5zaG91bGQgYmUgcmVwbGFjZWQgYnkgYSBkZWZhdWx0IHZhbHVlIGlmIGl0IGlzIGVtcHR5LCB0aGUgZXhwcmVzc2lvblxuInMgb3IgXCdmb29cJyIgeWllbGRzIHRoZSBkZXNpcmVkIHZhbHVlLiAgQmVjYXVzZSAibm90IiBoYXMgdG8gY3JlYXRlIGFcbm5ldyB2YWx1ZSwgaXQgcmV0dXJucyBhIGJvb2xlYW4gdmFsdWUgcmVnYXJkbGVzcyBvZiB0aGUgdHlwZSBvZiBpdHNcbmFyZ3VtZW50IChmb3IgZXhhbXBsZSwgIm5vdCBcJ2Zvb1wnIiBwcm9kdWNlcyAiRmFsc2UiIHJhdGhlciB0aGFuICJcJ1wnIi4pXG4nLAorICdicmVhayc6IHUnXG5UaGUgImJyZWFrIiBzdGF0ZW1lbnRcbioqKioqKioqKioqKioqKioqKioqKlxuXG4gICBicmVha19zdG10IDo6PSAiYnJlYWsiXG5cbiJicmVhayIgbWF5IG9ubHkgb2NjdXIgc3ludGFjdGljYWxseSBuZXN0ZWQgaW4gYSAiZm9yIiBvciAid2hpbGUiXG5sb29wLCBidXQgbm90IG5lc3RlZCBpbiBhIGZ1bmN0aW9uIG9yIGNsYXNzIGRlZmluaXRpb24gd2l0aGluIHRoYXRcbmxvb3AuXG5cbkl0IHRlcm1pbmF0ZXMgdGhlIG5lYXJlc3QgZW5jbG9zaW5nIGxvb3AsIHNraXBwaW5nIHRoZSBvcHRpb25hbCAiZWxzZSJcbmNsYXVzZSBpZiB0aGUgbG9vcCBoYXMgb25lLlxuXG5JZiBhICJmb3IiIGxvb3AgaXMgdGVybWluYXRlZCBieSAiYnJlYWsiLCB0aGUgbG9vcCBjb250cm9sIHRhcmdldFxua2VlcHMgaXRzIGN1cnJlbnQgdmFsdWUuXG5cbldoZW4gImJyZWFrIiBwYXNzZXMgY29udHJvbCBvdXQgb2YgYSAidHJ5IiBzdGF0ZW1lbnQgd2l0aCBhICJmaW5hbGx5IlxuY2xhdXNlLCB0aGF0ICJmaW5hbGx5IiBjbGF1c2UgaXMgZXhlY3V0ZWQgYmVmb3JlIHJlYWxseSBsZWF2aW5nIHRoZVxubG9vcC5cbicsCisgJ2NhbGxhYmxlLXR5cGVzJzogdSdcbkVtdWxhdGluZyBjYWxsYWJsZSBvYmplY3RzXG4qKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG5vYmplY3QuX19jYWxsX18oc2VsZlssIGFyZ3MuLi5dKVxuXG4gICBDYWxsZWQgd2hlbiB0aGUgaW5zdGFuY2UgaXMgImNhbGxlZCIgYXMgYSBmdW5jdGlvbjsgaWYgdGhpcyBtZXRob2RcbiAgIGlzIGRlZmluZWQsICJ4KGFyZzEsIGFyZzIsIC4uLikiIGlzIGEgc2hvcnRoYW5kIGZvclxuICAgInguX19jYWxsX18oYXJnMSwgYXJnMiwgLi4uKSIuXG4nLAorICdjYWxscyc6IHUnXG5DYWxsc1xuKioqKipcblxuQSBjYWxsIGNhbGxzIGEgY2FsbGFibGUgb2JqZWN0IChlLmcuLCBhICpmdW5jdGlvbiopIHdpdGggYSBwb3NzaWJseVxuZW1wdHkgc2VyaWVzIG9mICphcmd1bWVudHMqOlxuXG4gICBjYWxsICAgICAgICAgICAgICAgICA6Oj0gcHJpbWFyeSAiKCIgW2FyZ3VtZW50X2xpc3QgWyIsIl0gfCBjb21wcmVoZW5zaW9uXSAiKSJcbiAgIGFyZ3VtZW50X2xpc3QgICAgICAgIDo6PSBwb3NpdGlvbmFsX2FyZ3VtZW50cyBbIiwiIGtleXdvcmRfYXJndW1lbnRzXVxuICAgICAgICAgICAgICAgICAgICAgICBbIiwiICIqIiBleHByZXNzaW9uXSBbIiwiIGtleXdvcmRfYXJndW1lbnRzXVxuICAgICAgICAgICAgICAgICAgICAgICBbIiwiICIqKiIgZXhwcmVzc2lvbl1cbiAgICAgICAgICAgICAgICAgICAgIHwga2V5d29yZF9hcmd1bWVudHMgWyIsIiAiKiIgZXhwcmVzc2lvbl1cbiAgICAgICAgICAgICAgICAgICAgICAgWyIsIiBrZXl3b3JkX2FyZ3VtZW50c10gWyIsIiAiKioiIGV4cHJlc3Npb25dXG4gICAgICAgICAgICAgICAgICAgICB8ICIqIiBleHByZXNzaW9uIFsiLCIga2V5d29yZF9hcmd1bWVudHNdIFsiLCIgIioqIiBleHByZXNzaW9uXVxuICAgICAgICAgICAgICAgICAgICAgfCAiKioiIGV4cHJlc3Npb25cbiAgIHBvc2l0aW9uYWxfYXJndW1lbnRzIDo6PSBleHByZXNzaW9uICgiLCIgZXhwcmVzc2lvbikqXG4gICBrZXl3b3JkX2FyZ3VtZW50cyAgICA6Oj0ga2V5d29yZF9pdGVtICgiLCIga2V5d29yZF9pdGVtKSpcbiAgIGtleXdvcmRfaXRlbSAgICAgICAgIDo6PSBpZGVudGlmaWVyICI9IiBleHByZXNzaW9uXG5cbkFuIG9wdGlvbmFsIHRyYWlsaW5nIGNvbW1hIG1heSBiZSBwcmVzZW50IGFmdGVyIHRoZSBwb3NpdGlvbmFsIGFuZFxua2V5d29yZCBhcmd1bWVudHMgYnV0IGRvZXMgbm90IGFmZmVjdCB0aGUgc2VtYW50aWNzLlxuXG5UaGUgcHJpbWFyeSBtdXN0IGV2YWx1YXRlIHRvIGEgY2FsbGFibGUgb2JqZWN0ICh1c2VyLWRlZmluZWRcbmZ1bmN0aW9ucywgYnVpbHQtaW4gZnVuY3Rpb25zLCBtZXRob2RzIG9mIGJ1aWx0LWluIG9iamVjdHMsIGNsYXNzXG5vYmplY3RzLCBtZXRob2RzIG9mIGNsYXNzIGluc3RhbmNlcywgYW5kIGFsbCBvYmplY3RzIGhhdmluZyBhXG4iX19jYWxsX18oKSIgbWV0aG9kIGFyZSBjYWxsYWJsZSkuICBBbGwgYXJndW1lbnQgZXhwcmVzc2lvbnMgYXJlXG5ldmFsdWF0ZWQgYmVmb3JlIHRoZSBjYWxsIGlzIGF0dGVtcHRlZC4gIFBsZWFzZSByZWZlciB0byBzZWN0aW9uXG4qRnVuY3Rpb24gZGVmaW5pdGlvbnMqIGZvciB0aGUgc3ludGF4IG9mIGZvcm1hbCAqcGFyYW1ldGVyKiBsaXN0cy5cblxuSWYga2V5d29yZCBhcmd1bWVudHMgYXJlIHByZXNlbnQsIHRoZXkgYXJlIGZpcnN0IGNvbnZlcnRlZCB0b1xucG9zaXRpb25hbCBhcmd1bWVudHMsIGFzIGZvbGxvd3MuICBGaXJzdCwgYSBsaXN0IG9mIHVuZmlsbGVkIHNsb3RzIGlzXG5jcmVhdGVkIGZvciB0aGUgZm9ybWFsIHBhcmFtZXRlcnMuICBJZiB0aGVyZSBhcmUgTiBwb3NpdGlvbmFsXG5hcmd1bWVudHMsIHRoZXkgYXJlIHBsYWNlZCBpbiB0aGUgZmlyc3QgTiBzbG90cy4gIE5leHQsIGZvciBlYWNoXG5rZXl3b3JkIGFyZ3VtZW50LCB0aGUgaWRlbnRpZmllciBpcyB1c2VkIHRvIGRldGVybWluZSB0aGVcbmNvcnJlc3BvbmRpbmcgc2xvdCAoaWYgdGhlIGlkZW50aWZpZXIgaXMgdGhlIHNhbWUgYXMgdGhlIGZpcnN0IGZvcm1hbFxucGFyYW1ldGVyIG5hbWUsIHRoZSBmaXJzdCBzbG90IGlzIHVzZWQsIGFuZCBzbyBvbikuICBJZiB0aGUgc2xvdCBpc1xuYWxyZWFkeSBmaWxsZWQsIGEgIlR5cGVFcnJvciIgZXhjZXB0aW9uIGlzIHJhaXNlZC4gT3RoZXJ3aXNlLCB0aGVcbnZhbHVlIG9mIHRoZSBhcmd1bWVudCBpcyBwbGFjZWQgaW4gdGhlIHNsb3QsIGZpbGxpbmcgaXQgKGV2ZW4gaWYgdGhlXG5leHByZXNzaW9uIGlzICJOb25lIiwgaXQgZmlsbHMgdGhlIHNsb3QpLiAgV2hlbiBhbGwgYXJndW1lbnRzIGhhdmVcbmJlZW4gcHJvY2Vzc2VkLCB0aGUgc2xvdHMgdGhhdCBhcmUgc3RpbGwgdW5maWxsZWQgYXJlIGZpbGxlZCB3aXRoIHRoZVxuY29ycmVzcG9uZGluZyBkZWZhdWx0IHZhbHVlIGZyb20gdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24uICAoRGVmYXVsdFxudmFsdWVzIGFyZSBjYWxjdWxhdGVkLCBvbmNlLCB3aGVuIHRoZSBmdW5jdGlvbiBpcyBkZWZpbmVkOyB0aHVzLCBhXG5tdXRhYmxlIG9iamVjdCBzdWNoIGFzIGEgbGlzdCBvciBkaWN0aW9uYXJ5IHVzZWQgYXMgZGVmYXVsdCB2YWx1ZSB3aWxsXG5iZSBzaGFyZWQgYnkgYWxsIGNhbGxzIHRoYXQgZG9uXCd0IHNwZWNpZnkgYW4gYXJndW1lbnQgdmFsdWUgZm9yIHRoZVxuY29ycmVzcG9uZGluZyBzbG90OyB0aGlzIHNob3VsZCB1c3VhbGx5IGJlIGF2b2lkZWQuKSAgSWYgdGhlcmUgYXJlIGFueVxudW5maWxsZWQgc2xvdHMgZm9yIHdoaWNoIG5vIGRlZmF1bHQgdmFsdWUgaXMgc3BlY2lmaWVkLCBhICJUeXBlRXJyb3IiXG5leGNlcHRpb24gaXMgcmFpc2VkLiAgT3RoZXJ3aXNlLCB0aGUgbGlzdCBvZiBmaWxsZWQgc2xvdHMgaXMgdXNlZCBhc1xudGhlIGFyZ3VtZW50IGxpc3QgZm9yIHRoZSBjYWxsLlxuXG4qKkNQeXRob24gaW1wbGVtZW50YXRpb24gZGV0YWlsOioqIEFuIGltcGxlbWVudGF0aW9uIG1heSBwcm92aWRlXG5idWlsdC1pbiBmdW5jdGlvbnMgd2hvc2UgcG9zaXRpb25hbCBwYXJhbWV0ZXJzIGRvIG5vdCBoYXZlIG5hbWVzLCBldmVuXG5pZiB0aGV5IGFyZSBcJ25hbWVkXCcgZm9yIHRoZSBwdXJwb3NlIG9mIGRvY3VtZW50YXRpb24sIGFuZCB3aGljaFxudGhlcmVmb3JlIGNhbm5vdCBiZSBzdXBwbGllZCBieSBrZXl3b3JkLiAgSW4gQ1B5dGhvbiwgdGhpcyBpcyB0aGUgY2FzZVxuZm9yIGZ1bmN0aW9ucyBpbXBsZW1lbnRlZCBpbiBDIHRoYXQgdXNlICJQeUFyZ19QYXJzZVR1cGxlKCkiIHRvIHBhcnNlXG50aGVpciBhcmd1bWVudHMuXG5cbklmIHRoZXJlIGFyZSBtb3JlIHBvc2l0aW9uYWwgYXJndW1lbnRzIHRoYW4gdGhlcmUgYXJlIGZvcm1hbCBwYXJhbWV0ZXJcbnNsb3RzLCBhICJUeXBlRXJyb3IiIGV4Y2VwdGlvbiBpcyByYWlzZWQsIHVubGVzcyBhIGZvcm1hbCBwYXJhbWV0ZXJcbnVzaW5nIHRoZSBzeW50YXggIippZGVudGlmaWVyIiBpcyBwcmVzZW50OyBpbiB0aGlzIGNhc2UsIHRoYXQgZm9ybWFsXG5wYXJhbWV0ZXIgcmVjZWl2ZXMgYSB0dXBsZSBjb250YWluaW5nIHRoZSBleGNlc3MgcG9zaXRpb25hbCBhcmd1bWVudHNcbihvciBhbiBlbXB0eSB0dXBsZSBpZiB0aGVyZSB3ZXJlIG5vIGV4Y2VzcyBwb3NpdGlvbmFsIGFyZ3VtZW50cykuXG5cbklmIGFueSBrZXl3b3JkIGFyZ3VtZW50IGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gYSBmb3JtYWwgcGFyYW1ldGVyXG5uYW1lLCBhICJUeXBlRXJyb3IiIGV4Y2VwdGlvbiBpcyByYWlzZWQsIHVubGVzcyBhIGZvcm1hbCBwYXJhbWV0ZXJcbnVzaW5nIHRoZSBzeW50YXggIioqaWRlbnRpZmllciIgaXMgcHJlc2VudDsgaW4gdGhpcyBjYXNlLCB0aGF0IGZvcm1hbFxucGFyYW1ldGVyIHJlY2VpdmVzIGEgZGljdGlvbmFyeSBjb250YWluaW5nIHRoZSBleGNlc3Mga2V5d29yZFxuYXJndW1lbnRzICh1c2luZyB0aGUga2V5d29yZHMgYXMga2V5cyBhbmQgdGhlIGFyZ3VtZW50IHZhbHVlcyBhc1xuY29ycmVzcG9uZGluZyB2YWx1ZXMpLCBvciBhIChuZXcpIGVtcHR5IGRpY3Rpb25hcnkgaWYgdGhlcmUgd2VyZSBub1xuZXhjZXNzIGtleXdvcmQgYXJndW1lbnRzLlxuXG5JZiB0aGUgc3ludGF4ICIqZXhwcmVzc2lvbiIgYXBwZWFycyBpbiB0aGUgZnVuY3Rpb24gY2FsbCwgImV4cHJlc3Npb24iXG5tdXN0IGV2YWx1YXRlIHRvIGFuIGl0ZXJhYmxlLiAgRWxlbWVudHMgZnJvbSB0aGlzIGl0ZXJhYmxlIGFyZSB0cmVhdGVkXG5hcyBpZiB0aGV5IHdlcmUgYWRkaXRpb25hbCBwb3NpdGlvbmFsIGFyZ3VtZW50czsgaWYgdGhlcmUgYXJlXG5wb3NpdGlvbmFsIGFyZ3VtZW50cyAqeDEqLCAuLi4sICp4TiosIGFuZCAiZXhwcmVzc2lvbiIgZXZhbHVhdGVzIHRvIGFcbnNlcXVlbmNlICp5MSosIC4uLiwgKnlNKiwgdGhpcyBpcyBlcXVpdmFsZW50IHRvIGEgY2FsbCB3aXRoIE0rTlxucG9zaXRpb25hbCBhcmd1bWVudHMgKngxKiwgLi4uLCAqeE4qLCAqeTEqLCAuLi4sICp5TSouXG5cbkEgY29uc2VxdWVuY2Ugb2YgdGhpcyBpcyB0aGF0IGFsdGhvdWdoIHRoZSAiKmV4cHJlc3Npb24iIHN5bnRheCBtYXlcbmFwcGVhciAqYWZ0ZXIqIHNvbWUga2V5d29yZCBhcmd1bWVudHMsIGl0IGlzIHByb2Nlc3NlZCAqYmVmb3JlKiB0aGVcbmtleXdvcmQgYXJndW1lbnRzIChhbmQgdGhlICIqKmV4cHJlc3Npb24iIGFyZ3VtZW50LCBpZiBhbnkgLS0gc2VlXG5iZWxvdykuICBTbzpcblxuICAgPj4+IGRlZiBmKGEsIGIpOlxuICAgLi4uICBwcmludChhLCBiKVxuICAgLi4uXG4gICA+Pj4gZihiPTEsICooMiwpKVxuICAgMiAxXG4gICA+Pj4gZihhPTEsICooMiwpKVxuICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOlxuICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA/XG4gICBUeXBlRXJyb3I6IGYoKSBnb3QgbXVsdGlwbGUgdmFsdWVzIGZvciBrZXl3b3JkIGFyZ3VtZW50IFwnYVwnXG4gICA+Pj4gZigxLCAqKDIsKSlcbiAgIDEgMlxuXG5JdCBpcyB1bnVzdWFsIGZvciBib3RoIGtleXdvcmQgYXJndW1lbnRzIGFuZCB0aGUgIipleHByZXNzaW9uIiBzeW50YXhcbnRvIGJlIHVzZWQgaW4gdGhlIHNhbWUgY2FsbCwgc28gaW4gcHJhY3RpY2UgdGhpcyBjb25mdXNpb24gZG9lcyBub3RcbmFyaXNlLlxuXG5JZiB0aGUgc3ludGF4ICIqKmV4cHJlc3Npb24iIGFwcGVhcnMgaW4gdGhlIGZ1bmN0aW9uIGNhbGwsXG4iZXhwcmVzc2lvbiIgbXVzdCBldmFsdWF0ZSB0byBhIG1hcHBpbmcsIHRoZSBjb250ZW50cyBvZiB3aGljaCBhcmVcbnRyZWF0ZWQgYXMgYWRkaXRpb25hbCBrZXl3b3JkIGFyZ3VtZW50cy4gIEluIHRoZSBjYXNlIG9mIGEga2V5d29yZFxuYXBwZWFyaW5nIGluIGJvdGggImV4cHJlc3Npb24iIGFuZCBhcyBhbiBleHBsaWNpdCBrZXl3b3JkIGFyZ3VtZW50LCBhXG4iVHlwZUVycm9yIiBleGNlcHRpb24gaXMgcmFpc2VkLlxuXG5Gb3JtYWwgcGFyYW1ldGVycyB1c2luZyB0aGUgc3ludGF4ICIqaWRlbnRpZmllciIgb3IgIioqaWRlbnRpZmllciJcbmNhbm5vdCBiZSB1c2VkIGFzIHBvc2l0aW9uYWwgYXJndW1lbnQgc2xvdHMgb3IgYXMga2V5d29yZCBhcmd1bWVudFxubmFtZXMuXG5cbkEgY2FsbCBhbHdheXMgcmV0dXJucyBzb21lIHZhbHVlLCBwb3NzaWJseSAiTm9uZSIsIHVubGVzcyBpdCByYWlzZXMgYW5cbmV4Y2VwdGlvbi4gIEhvdyB0aGlzIHZhbHVlIGlzIGNvbXB1dGVkIGRlcGVuZHMgb24gdGhlIHR5cGUgb2YgdGhlXG5jYWxsYWJsZSBvYmplY3QuXG5cbklmIGl0IGlzLS0tXG5cbmEgdXNlci1kZWZpbmVkIGZ1bmN0aW9uOlxuICAgVGhlIGNvZGUgYmxvY2sgZm9yIHRoZSBmdW5jdGlvbiBpcyBleGVjdXRlZCwgcGFzc2luZyBpdCB0aGVcbiAgIGFyZ3VtZW50IGxpc3QuICBUaGUgZmlyc3QgdGhpbmcgdGhlIGNvZGUgYmxvY2sgd2lsbCBkbyBpcyBiaW5kIHRoZVxuICAgZm9ybWFsIHBhcmFtZXRlcnMgdG8gdGhlIGFyZ3VtZW50czsgdGhpcyBpcyBkZXNjcmliZWQgaW4gc2VjdGlvblxuICAgKkZ1bmN0aW9uIGRlZmluaXRpb25zKi4gIFdoZW4gdGhlIGNvZGUgYmxvY2sgZXhlY3V0ZXMgYSAicmV0dXJuIlxuICAgc3RhdGVtZW50LCB0aGlzIHNwZWNpZmllcyB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiBjYWxsLlxuXG5hIGJ1aWx0LWluIGZ1bmN0aW9uIG9yIG1ldGhvZDpcbiAgIFRoZSByZXN1bHQgaXMgdXAgdG8gdGhlIGludGVycHJldGVyOyBzZWUgKkJ1aWx0LWluIEZ1bmN0aW9ucyogZm9yXG4gICB0aGUgZGVzY3JpcHRpb25zIG9mIGJ1aWx0LWluIGZ1bmN0aW9ucyBhbmQgbWV0aG9kcy5cblxuYSBjbGFzcyBvYmplY3Q6XG4gICBBIG5ldyBpbnN0YW5jZSBvZiB0aGF0IGNsYXNzIGlzIHJldHVybmVkLlxuXG5hIGNsYXNzIGluc3RhbmNlIG1ldGhvZDpcbiAgIFRoZSBjb3JyZXNwb25kaW5nIHVzZXItZGVmaW5lZCBmdW5jdGlvbiBpcyBjYWxsZWQsIHdpdGggYW4gYXJndW1lbnRcbiAgIGxpc3QgdGhhdCBpcyBvbmUgbG9uZ2VyIHRoYW4gdGhlIGFyZ3VtZW50IGxpc3Qgb2YgdGhlIGNhbGw6IHRoZVxuICAgaW5zdGFuY2UgYmVjb21lcyB0aGUgZmlyc3QgYXJndW1lbnQuXG5cbmEgY2xhc3MgaW5zdGFuY2U6XG4gICBUaGUgY2xhc3MgbXVzdCBkZWZpbmUgYSAiX19jYWxsX18oKSIgbWV0aG9kOyB0aGUgZWZmZWN0IGlzIHRoZW4gdGhlXG4gICBzYW1lIGFzIGlmIHRoYXQgbWV0aG9kIHdhcyBjYWxsZWQuXG4nLAorICdjbGFzcyc6IHUnXG5DbGFzcyBkZWZpbml0aW9uc1xuKioqKioqKioqKioqKioqKipcblxuQSBjbGFzcyBkZWZpbml0aW9uIGRlZmluZXMgYSBjbGFzcyBvYmplY3QgKHNlZSBzZWN0aW9uICpUaGUgc3RhbmRhcmRcbnR5cGUgaGllcmFyY2h5Kik6XG5cbiAgIGNsYXNzZGVmICAgIDo6PSBbZGVjb3JhdG9yc10gImNsYXNzIiBjbGFzc25hbWUgW2luaGVyaXRhbmNlXSAiOiIgc3VpdGVcbiAgIGluaGVyaXRhbmNlIDo6PSAiKCIgW3BhcmFtZXRlcl9saXN0XSAiKSJcbiAgIGNsYXNzbmFtZSAgIDo6PSBpZGVudGlmaWVyXG5cbkEgY2xhc3MgZGVmaW5pdGlvbiBpcyBhbiBleGVjdXRhYmxlIHN0YXRlbWVudC4gIFRoZSBpbmhlcml0YW5jZSBsaXN0XG51c3VhbGx5IGdpdmVzIGEgbGlzdCBvZiBiYXNlIGNsYXNzZXMgKHNlZSAqQ3VzdG9taXppbmcgY2xhc3MgY3JlYXRpb24qXG5mb3IgbW9yZSBhZHZhbmNlZCB1c2VzKSwgc28gZWFjaCBpdGVtIGluIHRoZSBsaXN0IHNob3VsZCBldmFsdWF0ZSB0byBhXG5jbGFzcyBvYmplY3Qgd2hpY2ggYWxsb3dzIHN1YmNsYXNzaW5nLiAgQ2xhc3NlcyB3aXRob3V0IGFuIGluaGVyaXRhbmNlXG5saXN0IGluaGVyaXQsIGJ5IGRlZmF1bHQsIGZyb20gdGhlIGJhc2UgY2xhc3MgIm9iamVjdCI7IGhlbmNlLFxuXG4gICBjbGFzcyBGb286XG4gICAgICAgcGFzc1xuXG5pcyBlcXVpdmFsZW50IHRvXG5cbiAgIGNsYXNzIEZvbyhvYmplY3QpOlxuICAgICAgIHBhc3NcblxuVGhlIGNsYXNzXCdzIHN1aXRlIGlzIHRoZW4gZXhlY3V0ZWQgaW4gYSBuZXcgZXhlY3V0aW9uIGZyYW1lIChzZWVcbipOYW1pbmcgYW5kIGJpbmRpbmcqKSwgdXNpbmcgYSBuZXdseSBjcmVhdGVkIGxvY2FsIG5hbWVzcGFjZSBhbmQgdGhlXG5vcmlnaW5hbCBnbG9iYWwgbmFtZXNwYWNlLiAoVXN1YWxseSwgdGhlIHN1aXRlIGNvbnRhaW5zIG1vc3RseVxuZnVuY3Rpb24gZGVmaW5pdGlvbnMuKSAgV2hlbiB0aGUgY2xhc3NcJ3Mgc3VpdGUgZmluaXNoZXMgZXhlY3V0aW9uLCBpdHNcbmV4ZWN1dGlvbiBmcmFtZSBpcyBkaXNjYXJkZWQgYnV0IGl0cyBsb2NhbCBuYW1lc3BhY2UgaXMgc2F2ZWQuIFs0XSBBXG5jbGFzcyBvYmplY3QgaXMgdGhlbiBjcmVhdGVkIHVzaW5nIHRoZSBpbmhlcml0YW5jZSBsaXN0IGZvciB0aGUgYmFzZVxuY2xhc3NlcyBhbmQgdGhlIHNhdmVkIGxvY2FsIG5hbWVzcGFjZSBmb3IgdGhlIGF0dHJpYnV0ZSBkaWN0aW9uYXJ5LlxuVGhlIGNsYXNzIG5hbWUgaXMgYm91bmQgdG8gdGhpcyBjbGFzcyBvYmplY3QgaW4gdGhlIG9yaWdpbmFsIGxvY2FsXG5uYW1lc3BhY2UuXG5cbkNsYXNzIGNyZWF0aW9uIGNhbiBiZSBjdXN0b21pemVkIGhlYXZpbHkgdXNpbmcgKm1ldGFjbGFzc2VzKi5cblxuQ2xhc3NlcyBjYW4gYWxzbyBiZSBkZWNvcmF0ZWQ6IGp1c3QgbGlrZSB3aGVuIGRlY29yYXRpbmcgZnVuY3Rpb25zLFxuXG4gICBAZjEoYXJnKVxuICAgQGYyXG4gICBjbGFzcyBGb286IHBhc3NcblxuaXMgZXF1aXZhbGVudCB0b1xuXG4gICBjbGFzcyBGb286IHBhc3NcbiAgIEZvbyA9IGYxKGFyZykoZjIoRm9vKSlcblxuVGhlIGV2YWx1YXRpb24gcnVsZXMgZm9yIHRoZSBkZWNvcmF0b3IgZXhwcmVzc2lvbnMgYXJlIHRoZSBzYW1lIGFzIGZvclxuZnVuY3Rpb24gZGVjb3JhdG9ycy4gIFRoZSByZXN1bHQgbXVzdCBiZSBhIGNsYXNzIG9iamVjdCwgd2hpY2ggaXMgdGhlblxuYm91bmQgdG8gdGhlIGNsYXNzIG5hbWUuXG5cbioqUHJvZ3JhbW1lclwncyBub3RlOioqIFZhcmlhYmxlcyBkZWZpbmVkIGluIHRoZSBjbGFzcyBkZWZpbml0aW9uIGFyZVxuY2xhc3MgYXR0cmlidXRlczsgdGhleSBhcmUgc2hhcmVkIGJ5IGluc3RhbmNlcy4gIEluc3RhbmNlIGF0dHJpYnV0ZXNcbmNhbiBiZSBzZXQgaW4gYSBtZXRob2Qgd2l0aCAic2VsZi5uYW1lID0gdmFsdWUiLiAgQm90aCBjbGFzcyBhbmRcbmluc3RhbmNlIGF0dHJpYnV0ZXMgYXJlIGFjY2Vzc2libGUgdGhyb3VnaCB0aGUgbm90YXRpb24gIiJzZWxmLm5hbWUiIixcbmFuZCBhbiBpbnN0YW5jZSBhdHRyaWJ1dGUgaGlkZXMgYSBjbGFzcyBhdHRyaWJ1dGUgd2l0aCB0aGUgc2FtZSBuYW1lXG53aGVuIGFjY2Vzc2VkIGluIHRoaXMgd2F5LiAgQ2xhc3MgYXR0cmlidXRlcyBjYW4gYmUgdXNlZCBhcyBkZWZhdWx0c1xuZm9yIGluc3RhbmNlIGF0dHJpYnV0ZXMsIGJ1dCB1c2luZyBtdXRhYmxlIHZhbHVlcyB0aGVyZSBjYW4gbGVhZCB0b1xudW5leHBlY3RlZCByZXN1bHRzLiAgKkRlc2NyaXB0b3JzKiBjYW4gYmUgdXNlZCB0byBjcmVhdGUgaW5zdGFuY2VcbnZhcmlhYmxlcyB3aXRoIGRpZmZlcmVudCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLlxuXG5TZWUgYWxzbzogKipQRVAgMzExNSoqIC0gTWV0YWNsYXNzZXMgaW4gUHl0aG9uIDMgKipQRVAgMzEyOSoqIC1cbiAgQ2xhc3MgRGVjb3JhdG9yc1xuXG4tWyBGb290bm90ZXMgXS1cblxuWzFdIFRoZSBleGNlcHRpb24gaXMgcHJvcGFnYXRlZCB0byB0aGUgaW52b2NhdGlvbiBzdGFjayB1bmxlc3NcbiAgICB0aGVyZSBpcyBhICJmaW5hbGx5IiBjbGF1c2Ugd2hpY2ggaGFwcGVucyB0byByYWlzZSBhbm90aGVyXG4gICAgZXhjZXB0aW9uLiBUaGF0IG5ldyBleGNlcHRpb24gY2F1c2VzIHRoZSBvbGQgb25lIHRvIGJlIGxvc3QuXG5cblsyXSBDdXJyZW50bHksIGNvbnRyb2wgImZsb3dzIG9mZiB0aGUgZW5kIiBleGNlcHQgaW4gdGhlIGNhc2Ugb2ZcbiAgICBhbiBleGNlcHRpb24gb3IgdGhlIGV4ZWN1dGlvbiBvZiBhICJyZXR1cm4iLCAiY29udGludWUiLCBvclxuICAgICJicmVhayIgc3RhdGVtZW50LlxuXG5bM10gQSBzdHJpbmcgbGl0ZXJhbCBhcHBlYXJpbmcgYXMgdGhlIGZpcnN0IHN0YXRlbWVudCBpbiB0aGVcbiAgICBmdW5jdGlvbiBib2R5IGlzIHRyYW5zZm9ybWVkIGludG8gdGhlIGZ1bmN0aW9uXCdzICJfX2RvY19fIlxuICAgIGF0dHJpYnV0ZSBhbmQgdGhlcmVmb3JlIHRoZSBmdW5jdGlvblwncyAqZG9jc3RyaW5nKi5cblxuWzRdIEEgc3RyaW5nIGxpdGVyYWwgYXBwZWFyaW5nIGFzIHRoZSBmaXJzdCBzdGF0ZW1lbnQgaW4gdGhlIGNsYXNzXG4gICAgYm9keSBpcyB0cmFuc2Zvcm1lZCBpbnRvIHRoZSBuYW1lc3BhY2VcJ3MgIl9fZG9jX18iIGl0ZW0gYW5kXG4gICAgdGhlcmVmb3JlIHRoZSBjbGFzc1wncyAqZG9jc3RyaW5nKi5cbicsCisgJ2NvbXBhcmlzb25zJzogdSdcbkNvbXBhcmlzb25zXG4qKioqKioqKioqKlxuXG5Vbmxpa2UgQywgYWxsIGNvbXBhcmlzb24gb3BlcmF0aW9ucyBpbiBQeXRob24gaGF2ZSB0aGUgc2FtZSBwcmlvcml0eSxcbndoaWNoIGlzIGxvd2VyIHRoYW4gdGhhdCBvZiBhbnkgYXJpdGhtZXRpYywgc2hpZnRpbmcgb3IgYml0d2lzZVxub3BlcmF0aW9uLiAgQWxzbyB1bmxpa2UgQywgZXhwcmVzc2lvbnMgbGlrZSAiYSA8IGIgPCBjIiBoYXZlIHRoZVxuaW50ZXJwcmV0YXRpb24gdGhhdCBpcyBjb252ZW50aW9uYWwgaW4gbWF0aGVtYXRpY3M6XG5cbiAgIGNvbXBhcmlzb24gICAgOjo9IG9yX2V4cHIgKCBjb21wX29wZXJhdG9yIG9yX2V4cHIgKSpcbiAgIGNvbXBfb3BlcmF0b3IgOjo9ICI8IiB8ICI+IiB8ICI9PSIgfCAiPj0iIHwgIjw9IiB8ICIhPSJcbiAgICAgICAgICAgICAgICAgICAgIHwgImlzIiBbIm5vdCJdIHwgWyJub3QiXSAiaW4iXG5cbkNvbXBhcmlzb25zIHlpZWxkIGJvb2xlYW4gdmFsdWVzOiAiVHJ1ZSIgb3IgIkZhbHNlIi5cblxuQ29tcGFyaXNvbnMgY2FuIGJlIGNoYWluZWQgYXJiaXRyYXJpbHksIGUuZy4sICJ4IDwgeSA8PSB6IiBpc1xuZXF1aXZhbGVudCB0byAieCA8IHkgYW5kIHkgPD0geiIsIGV4Y2VwdCB0aGF0ICJ5IiBpcyBldmFsdWF0ZWQgb25seVxub25jZSAoYnV0IGluIGJvdGggY2FzZXMgInoiIGlzIG5vdCBldmFsdWF0ZWQgYXQgYWxsIHdoZW4gInggPCB5IiBpc1xuZm91bmQgdG8gYmUgZmFsc2UpLlxuXG5Gb3JtYWxseSwgaWYgKmEqLCAqYiosICpjKiwgLi4uLCAqeSosICp6KiBhcmUgZXhwcmVzc2lvbnMgYW5kICpvcDEqLFxuKm9wMiosIC4uLiwgKm9wTiogYXJlIGNvbXBhcmlzb24gb3BlcmF0b3JzLCB0aGVuICJhIG9wMSBiIG9wMiBjIC4uLiB5XG5vcE4geiIgaXMgZXF1aXZhbGVudCB0byAiYSBvcDEgYiBhbmQgYiBvcDIgYyBhbmQgLi4uIHkgb3BOIHoiLCBleGNlcHRcbnRoYXQgZWFjaCBleHByZXNzaW9uIGlzIGV2YWx1YXRlZCBhdCBtb3N0IG9uY2UuXG5cbk5vdGUgdGhhdCAiYSBvcDEgYiBvcDIgYyIgZG9lc25cJ3QgaW1wbHkgYW55IGtpbmQgb2YgY29tcGFyaXNvbiBiZXR3ZWVuXG4qYSogYW5kICpjKiwgc28gdGhhdCwgZS5nLiwgInggPCB5ID4geiIgaXMgcGVyZmVjdGx5IGxlZ2FsICh0aG91Z2hcbnBlcmhhcHMgbm90IHByZXR0eSkuXG5cblxuVmFsdWUgY29tcGFyaXNvbnNcbj09PT09PT09PT09PT09PT09XG5cblRoZSBvcGVyYXRvcnMgIjwiLCAiPiIsICI9PSIsICI+PSIsICI8PSIsIGFuZCAiIT0iIGNvbXBhcmUgdGhlIHZhbHVlc1xub2YgdHdvIG9iamVjdHMuICBUaGUgb2JqZWN0cyBkbyBub3QgbmVlZCB0byBoYXZlIHRoZSBzYW1lIHR5cGUuXG5cbkNoYXB0ZXIgKk9iamVjdHMsIHZhbHVlcyBhbmQgdHlwZXMqIHN0YXRlcyB0aGF0IG9iamVjdHMgaGF2ZSBhIHZhbHVlXG4oaW4gYWRkaXRpb24gdG8gdHlwZSBhbmQgaWRlbnRpdHkpLiAgVGhlIHZhbHVlIG9mIGFuIG9iamVjdCBpcyBhXG5yYXRoZXIgYWJzdHJhY3Qgbm90aW9uIGluIFB5dGhvbjogRm9yIGV4YW1wbGUsIHRoZXJlIGlzIG5vIGNhbm9uaWNhbFxuYWNjZXNzIG1ldGhvZCBmb3IgYW4gb2JqZWN0XCdzIHZhbHVlLiAgQWxzbywgdGhlcmUgaXMgbm8gcmVxdWlyZW1lbnRcbnRoYXQgdGhlIHZhbHVlIG9mIGFuIG9iamVjdCBzaG91bGQgYmUgY29uc3RydWN0ZWQgaW4gYSBwYXJ0aWN1bGFyIHdheSxcbmUuZy4gY29tcHJpc2VkIG9mIGFsbCBpdHMgZGF0YSBhdHRyaWJ1dGVzLiBDb21wYXJpc29uIG9wZXJhdG9yc1xuaW1wbGVtZW50IGEgcGFydGljdWxhciBub3Rpb24gb2Ygd2hhdCB0aGUgdmFsdWUgb2YgYW4gb2JqZWN0IGlzLiAgT25lXG5jYW4gdGhpbmsgb2YgdGhlbSBhcyBkZWZpbmluZyB0aGUgdmFsdWUgb2YgYW4gb2JqZWN0IGluZGlyZWN0bHksIGJ5XG5tZWFucyBvZiB0aGVpciBjb21wYXJpc29uIGltcGxlbWVudGF0aW9uLlxuXG5CZWNhdXNlIGFsbCB0eXBlcyBhcmUgKGRpcmVjdCBvciBpbmRpcmVjdCkgc3VidHlwZXMgb2YgIm9iamVjdCIsIHRoZXlcbmluaGVyaXQgdGhlIGRlZmF1bHQgY29tcGFyaXNvbiBiZWhhdmlvciBmcm9tICJvYmplY3QiLiAgVHlwZXMgY2FuXG5jdXN0b21pemUgdGhlaXIgY29tcGFyaXNvbiBiZWhhdmlvciBieSBpbXBsZW1lbnRpbmcgKnJpY2ggY29tcGFyaXNvblxubWV0aG9kcyogbGlrZSAiX19sdF9fKCkiLCBkZXNjcmliZWQgaW4gKkJhc2ljIGN1c3RvbWl6YXRpb24qLlxuXG5UaGUgZGVmYXVsdCBiZWhhdmlvciBmb3IgZXF1YWxpdHkgY29tcGFyaXNvbiAoIj09IiBhbmQgIiE9IikgaXMgYmFzZWRcbm9uIHRoZSBpZGVudGl0eSBvZiB0aGUgb2JqZWN0cy4gIEhlbmNlLCBlcXVhbGl0eSBjb21wYXJpc29uIG9mXG5pbnN0YW5jZXMgd2l0aCB0aGUgc2FtZSBpZGVudGl0eSByZXN1bHRzIGluIGVxdWFsaXR5LCBhbmQgZXF1YWxpdHlcbmNvbXBhcmlzb24gb2YgaW5zdGFuY2VzIHdpdGggZGlmZmVyZW50IGlkZW50aXRpZXMgcmVzdWx0cyBpblxuaW5lcXVhbGl0eS4gIEEgbW90aXZhdGlvbiBmb3IgdGhpcyBkZWZhdWx0IGJlaGF2aW9yIGlzIHRoZSBkZXNpcmUgdGhhdFxuYWxsIG9iamVjdHMgc2hvdWxkIGJlIHJlZmxleGl2ZSAoaS5lLiAieCBpcyB5IiBpbXBsaWVzICJ4ID09IHkiKS5cblxuQSBkZWZhdWx0IG9yZGVyIGNvbXBhcmlzb24gKCI8IiwgIj4iLCAiPD0iLCBhbmQgIj49IikgaXMgbm90IHByb3ZpZGVkO1xuYW4gYXR0ZW1wdCByYWlzZXMgIlR5cGVFcnJvciIuICBBIG1vdGl2YXRpb24gZm9yIHRoaXMgZGVmYXVsdCBiZWhhdmlvclxuaXMgdGhlIGxhY2sgb2YgYSBzaW1pbGFyIGludmFyaWFudCBhcyBmb3IgZXF1YWxpdHkuXG5cblRoZSBiZWhhdmlvciBvZiB0aGUgZGVmYXVsdCBlcXVhbGl0eSBjb21wYXJpc29uLCB0aGF0IGluc3RhbmNlcyB3aXRoXG5kaWZmZXJlbnQgaWRlbnRpdGllcyBhcmUgYWx3YXlzIHVuZXF1YWwsIG1heSBiZSBpbiBjb250cmFzdCB0byB3aGF0XG50eXBlcyB3aWxsIG5lZWQgdGhhdCBoYXZlIGEgc2Vuc2libGUgZGVmaW5pdGlvbiBvZiBvYmplY3QgdmFsdWUgYW5kXG52YWx1ZS1iYXNlZCBlcXVhbGl0eS4gIFN1Y2ggdHlwZXMgd2lsbCBuZWVkIHRvIGN1c3RvbWl6ZSB0aGVpclxuY29tcGFyaXNvbiBiZWhhdmlvciwgYW5kIGluIGZhY3QsIGEgbnVtYmVyIG9mIGJ1aWx0LWluIHR5cGVzIGhhdmUgZG9uZVxudGhhdC5cblxuVGhlIGZvbGxvd2luZyBsaXN0IGRlc2NyaWJlcyB0aGUgY29tcGFyaXNvbiBiZWhhdmlvciBvZiB0aGUgbW9zdFxuaW1wb3J0YW50IGJ1aWx0LWluIHR5cGVzLlxuXG4qIE51bWJlcnMgb2YgYnVpbHQtaW4gbnVtZXJpYyB0eXBlcyAoKk51bWVyaWMgVHlwZXMgLS0tIGludCwgZmxvYXQsXG4gIGNvbXBsZXgqKSBhbmQgb2YgdGhlIHN0YW5kYXJkIGxpYnJhcnkgdHlwZXMgImZyYWN0aW9ucy5GcmFjdGlvbiIgYW5kXG4gICJkZWNpbWFsLkRlY2ltYWwiIGNhbiBiZSBjb21wYXJlZCB3aXRoaW4gYW5kIGFjcm9zcyB0aGVpciB0eXBlcyxcbiAgd2l0aCB0aGUgcmVzdHJpY3Rpb24gdGhhdCBjb21wbGV4IG51bWJlcnMgZG8gbm90IHN1cHBvcnQgb3JkZXJcbiAgY29tcGFyaXNvbi4gIFdpdGhpbiB0aGUgbGltaXRzIG9mIHRoZSB0eXBlcyBpbnZvbHZlZCwgdGhleSBjb21wYXJlXG4gIG1hdGhlbWF0aWNhbGx5IChhbGdvcml0aG1pY2FsbHkpIGNvcnJlY3Qgd2l0aG91dCBsb3NzIG9mIHByZWNpc2lvbi5cblxuICBUaGUgbm90LWEtbnVtYmVyIHZhbHVlcyAiZmxvYXQoXCdOYU5cJykiIGFuZCAiRGVjaW1hbChcJ05hTlwnKSIgYXJlXG4gIHNwZWNpYWwuICBUaGV5IGFyZSBpZGVudGljYWwgdG8gdGhlbXNlbHZlcyAoInggaXMgeCIgaXMgdHJ1ZSkgYnV0XG4gIGFyZSBub3QgZXF1YWwgdG8gdGhlbXNlbHZlcyAoInggPT0geCIgaXMgZmFsc2UpLiAgQWRkaXRpb25hbGx5LFxuICBjb21wYXJpbmcgYW55IG51bWJlciB0byBhIG5vdC1hLW51bWJlciB2YWx1ZSB3aWxsIHJldHVybiAiRmFsc2UiLlxuICBGb3IgZXhhbXBsZSwgYm90aCAiMyA8IGZsb2F0KFwnTmFOXCcpIiBhbmQgImZsb2F0KFwnTmFOXCcpIDwgMyIgd2lsbFxuICByZXR1cm4gIkZhbHNlIi5cblxuKiBCaW5hcnkgc2VxdWVuY2VzIChpbnN0YW5jZXMgb2YgImJ5dGVzIiBvciAiYnl0ZWFycmF5IikgY2FuIGJlXG4gIGNvbXBhcmVkIHdpdGhpbiBhbmQgYWNyb3NzIHRoZWlyIHR5cGVzLiAgVGhleSBjb21wYXJlXG4gIGxleGljb2dyYXBoaWNhbGx5IHVzaW5nIHRoZSBudW1lcmljIHZhbHVlcyBvZiB0aGVpciBlbGVtZW50cy5cblxuKiBTdHJpbmdzIChpbnN0YW5jZXMgb2YgInN0ciIpIGNvbXBhcmUgbGV4aWNvZ3JhcGhpY2FsbHkgdXNpbmcgdGhlXG4gIG51bWVyaWNhbCBVbmljb2RlIGNvZGUgcG9pbnRzICh0aGUgcmVzdWx0IG9mIHRoZSBidWlsdC1pbiBmdW5jdGlvblxuICAib3JkKCkiKSBvZiB0aGVpciBjaGFyYWN0ZXJzLiBbM11cblxuICBTdHJpbmdzIGFuZCBiaW5hcnkgc2VxdWVuY2VzIGNhbm5vdCBiZSBkaXJlY3RseSBjb21wYXJlZC5cblxuKiBTZXF1ZW5jZXMgKGluc3RhbmNlcyBvZiAidHVwbGUiLCAibGlzdCIsIG9yICJyYW5nZSIpIGNhbiBiZVxuICBjb21wYXJlZCBvbmx5IHdpdGhpbiBlYWNoIG9mIHRoZWlyIHR5cGVzLCB3aXRoIHRoZSByZXN0cmljdGlvbiB0aGF0XG4gIHJhbmdlcyBkbyBub3Qgc3VwcG9ydCBvcmRlciBjb21wYXJpc29uLiAgRXF1YWxpdHkgY29tcGFyaXNvbiBhY3Jvc3NcbiAgdGhlc2UgdHlwZXMgcmVzdWx0cyBpbiB1bmVxdWFsaXR5LCBhbmQgb3JkZXJpbmcgY29tcGFyaXNvbiBhY3Jvc3NcbiAgdGhlc2UgdHlwZXMgcmFpc2VzICJUeXBlRXJyb3IiLlxuXG4gIFNlcXVlbmNlcyBjb21wYXJlIGxleGljb2dyYXBoaWNhbGx5IHVzaW5nIGNvbXBhcmlzb24gb2ZcbiAgY29ycmVzcG9uZGluZyBlbGVtZW50cywgd2hlcmVieSByZWZsZXhpdml0eSBvZiB0aGUgZWxlbWVudHMgaXNcbiAgZW5mb3JjZWQuXG5cbiAgSW4gZW5mb3JjaW5nIHJlZmxleGl2aXR5IG9mIGVsZW1lbnRzLCB0aGUgY29tcGFyaXNvbiBvZiBjb2xsZWN0aW9uc1xuICBhc3N1bWVzIHRoYXQgZm9yIGEgY29sbGVjdGlvbiBlbGVtZW50ICJ4IiwgInggPT0geCIgaXMgYWx3YXlzIHRydWUuXG4gIEJhc2VkIG9uIHRoYXQgYXNzdW1wdGlvbiwgZWxlbWVudCBpZGVudGl0eSBpcyBjb21wYXJlZCBmaXJzdCwgYW5kXG4gIGVsZW1lbnQgY29tcGFyaXNvbiBpcyBwZXJmb3JtZWQgb25seSBmb3IgZGlzdGluY3QgZWxlbWVudHMuICBUaGlzXG4gIGFwcHJvYWNoIHlpZWxkcyB0aGUgc2FtZSByZXN1bHQgYXMgYSBzdHJpY3QgZWxlbWVudCBjb21wYXJpc29uXG4gIHdvdWxkLCBpZiB0aGUgY29tcGFyZWQgZWxlbWVudHMgYXJlIHJlZmxleGl2ZS4gIEZvciBub24tcmVmbGV4aXZlXG4gIGVsZW1lbnRzLCB0aGUgcmVzdWx0IGlzIGRpZmZlcmVudCB0aGFuIGZvciBzdHJpY3QgZWxlbWVudFxuICBjb21wYXJpc29uLCBhbmQgbWF5IGJlIHN1cnByaXNpbmc6ICBUaGUgbm9uLXJlZmxleGl2ZSBub3QtYS1udW1iZXJcbiAgdmFsdWVzIGZvciBleGFtcGxlIHJlc3VsdCBpbiB0aGUgZm9sbG93aW5nIGNvbXBhcmlzb24gYmVoYXZpb3Igd2hlblxuICB1c2VkIGluIGEgbGlzdDpcblxuICAgICA+Pj4gbmFuID0gZmxvYXQoXCdOYU5cJylcbiAgICAgPj4+IG5hbiBpcyBuYW5cbiAgICAgVHJ1ZVxuICAgICA+Pj4gbmFuID09IG5hblxuICAgICBGYWxzZSAgICAgICAgICAgICAgICAgPC0tIHRoZSBkZWZpbmVkIG5vbi1yZWZsZXhpdmUgYmVoYXZpb3Igb2YgTmFOXG4gICAgID4+PiBbbmFuXSA9PSBbbmFuXVxuICAgICBUcnVlICAgICAgICAgICAgICAgICAgPC0tIGxpc3QgZW5mb3JjZXMgcmVmbGV4aXZpdHkgYW5kIHRlc3RzIGlkZW50aXR5IGZpcnN0XG5cbiAgTGV4aWNvZ3JhcGhpY2FsIGNvbXBhcmlzb24gYmV0d2VlbiBidWlsdC1pbiBjb2xsZWN0aW9ucyB3b3JrcyBhc1xuICBmb2xsb3dzOlxuXG4gICogRm9yIHR3byBjb2xsZWN0aW9ucyB0byBjb21wYXJlIGVxdWFsLCB0aGV5IG11c3QgYmUgb2YgdGhlIHNhbWVcbiAgICB0eXBlLCBoYXZlIHRoZSBzYW1lIGxlbmd0aCwgYW5kIGVhY2ggcGFpciBvZiBjb3JyZXNwb25kaW5nXG4gICAgZWxlbWVudHMgbXVzdCBjb21wYXJlIGVxdWFsIChmb3IgZXhhbXBsZSwgIlsxLDJdID09ICgxLDIpIiBpc1xuICAgIGZhbHNlIGJlY2F1c2UgdGhlIHR5cGUgaXMgbm90IHRoZSBzYW1lKS5cblxuICAqIENvbGxlY3Rpb25zIHRoYXQgc3VwcG9ydCBvcmRlciBjb21wYXJpc29uIGFyZSBvcmRlcmVkIHRoZSBzYW1lXG4gICAgYXMgdGhlaXIgZmlyc3QgdW5lcXVhbCBlbGVtZW50cyAoZm9yIGV4YW1wbGUsICJbMSwyLHhdIDw9IFsxLDIseV0iXG4gICAgaGFzIHRoZSBzYW1lIHZhbHVlIGFzICJ4IDw9IHkiKS4gIElmIGEgY29ycmVzcG9uZGluZyBlbGVtZW50IGRvZXNcbiAgICBub3QgZXhpc3QsIHRoZSBzaG9ydGVyIGNvbGxlY3Rpb24gaXMgb3JkZXJlZCBmaXJzdCAoZm9yIGV4YW1wbGUsXG4gICAgIlsxLDJdIDwgWzEsMiwzXSIgaXMgdHJ1ZSkuXG5cbiogTWFwcGluZ3MgKGluc3RhbmNlcyBvZiAiZGljdCIpIGNvbXBhcmUgZXF1YWwgaWYgYW5kIG9ubHkgaWYgdGhleVxuICBoYXZlIGVxdWFsICooa2V5LCB2YWx1ZSkqIHBhaXJzLiBFcXVhbGl0eSBjb21wYXJpc29uIG9mIHRoZSBrZXlzIGFuZFxuICBlbGVtZW50cyBlbmZvcmNlcyByZWZsZXhpdml0eS5cblxuICBPcmRlciBjb21wYXJpc29ucyAoIjwiLCAiPiIsICI8PSIsIGFuZCAiPj0iKSByYWlzZSAiVHlwZUVycm9yIi5cblxuKiBTZXRzIChpbnN0YW5jZXMgb2YgInNldCIgb3IgImZyb3plbnNldCIpIGNhbiBiZSBjb21wYXJlZCB3aXRoaW5cbiAgYW5kIGFjcm9zcyB0aGVpciB0eXBlcy5cblxuICBUaGV5IGRlZmluZSBvcmRlciBjb21wYXJpc29uIG9wZXJhdG9ycyB0byBtZWFuIHN1YnNldCBhbmQgc3VwZXJzZXRcbiAgdGVzdHMuICBUaG9zZSByZWxhdGlvbnMgZG8gbm90IGRlZmluZSB0b3RhbCBvcmRlcmluZ3MgKGZvciBleGFtcGxlLFxuICB0aGUgdHdvIHNldHMgInsxLDJ9IiBhbmQgInsyLDN9IiBhcmUgbm90IGVxdWFsLCBub3Igc3Vic2V0cyBvZiBvbmVcbiAgYW5vdGhlciwgbm9yIHN1cGVyc2V0cyBvZiBvbmUgYW5vdGhlcikuICBBY2NvcmRpbmdseSwgc2V0cyBhcmUgbm90XG4gIGFwcHJvcHJpYXRlIGFyZ3VtZW50cyBmb3IgZnVuY3Rpb25zIHdoaWNoIGRlcGVuZCBvbiB0b3RhbCBvcmRlcmluZ1xuICAoZm9yIGV4YW1wbGUsICJtaW4oKSIsICJtYXgoKSIsIGFuZCAic29ydGVkKCkiIHByb2R1Y2UgdW5kZWZpbmVkXG4gIHJlc3VsdHMgZ2l2ZW4gYSBsaXN0IG9mIHNldHMgYXMgaW5wdXRzKS5cblxuICBDb21wYXJpc29uIG9mIHNldHMgZW5mb3JjZXMgcmVmbGV4aXZpdHkgb2YgaXRzIGVsZW1lbnRzLlxuXG4qIE1vc3Qgb3RoZXIgYnVpbHQtaW4gdHlwZXMgaGF2ZSBubyBjb21wYXJpc29uIG1ldGhvZHMgaW1wbGVtZW50ZWQsXG4gIHNvIHRoZXkgaW5oZXJpdCB0aGUgZGVmYXVsdCBjb21wYXJpc29uIGJlaGF2aW9yLlxuXG5Vc2VyLWRlZmluZWQgY2xhc3NlcyB0aGF0IGN1c3RvbWl6ZSB0aGVpciBjb21wYXJpc29uIGJlaGF2aW9yIHNob3VsZFxuZm9sbG93IHNvbWUgY29uc2lzdGVuY3kgcnVsZXMsIGlmIHBvc3NpYmxlOlxuXG4qIEVxdWFsaXR5IGNvbXBhcmlzb24gc2hvdWxkIGJlIHJlZmxleGl2ZS4gSW4gb3RoZXIgd29yZHMsIGlkZW50aWNhbFxuICBvYmplY3RzIHNob3VsZCBjb21wYXJlIGVxdWFsOlxuXG4gICAgICJ4IGlzIHkiIGltcGxpZXMgInggPT0geSJcblxuKiBDb21wYXJpc29uIHNob3VsZCBiZSBzeW1tZXRyaWMuIEluIG90aGVyIHdvcmRzLCB0aGUgZm9sbG93aW5nXG4gIGV4cHJlc3Npb25zIHNob3VsZCBoYXZlIHRoZSBzYW1lIHJlc3VsdDpcblxuICAgICAieCA9PSB5IiBhbmQgInkgPT0geCJcblxuICAgICAieCAhPSB5IiBhbmQgInkgIT0geCJcblxuICAgICAieCA8IHkiIGFuZCAieSA+IHgiXG5cbiAgICAgInggPD0geSIgYW5kICJ5ID49IHgiXG5cbiogQ29tcGFyaXNvbiBzaG91bGQgYmUgdHJhbnNpdGl2ZS4gVGhlIGZvbGxvd2luZyAobm9uLWV4aGF1c3RpdmUpXG4gIGV4YW1wbGVzIGlsbHVzdHJhdGUgdGhhdDpcblxuICAgICAieCA+IHkgYW5kIHkgPiB6IiBpbXBsaWVzICJ4ID4geiJcblxuICAgICAieCA8IHkgYW5kIHkgPD0geiIgaW1wbGllcyAieCA8IHoiXG5cbiogSW52ZXJzZSBjb21wYXJpc29uIHNob3VsZCByZXN1bHQgaW4gdGhlIGJvb2xlYW4gbmVnYXRpb24uIEluIG90aGVyXG4gIHdvcmRzLCB0aGUgZm9sbG93aW5nIGV4cHJlc3Npb25zIHNob3VsZCBoYXZlIHRoZSBzYW1lIHJlc3VsdDpcblxuICAgICAieCA9PSB5IiBhbmQgIm5vdCB4ICE9IHkiXG5cbiAgICAgInggPCB5IiBhbmQgIm5vdCB4ID49IHkiIChmb3IgdG90YWwgb3JkZXJpbmcpXG5cbiAgICAgInggPiB5IiBhbmQgIm5vdCB4IDw9IHkiIChmb3IgdG90YWwgb3JkZXJpbmcpXG5cbiAgVGhlIGxhc3QgdHdvIGV4cHJlc3Npb25zIGFwcGx5IHRvIHRvdGFsbHkgb3JkZXJlZCBjb2xsZWN0aW9ucyAoZS5nLlxuICB0byBzZXF1ZW5jZXMsIGJ1dCBub3QgdG8gc2V0cyBvciBtYXBwaW5ncykuIFNlZSBhbHNvIHRoZVxuICAidG90YWxfb3JkZXJpbmcoKSIgZGVjb3JhdG9yLlxuXG5QeXRob24gZG9lcyBub3QgZW5mb3JjZSB0aGVzZSBjb25zaXN0ZW5jeSBydWxlcy4gSW4gZmFjdCwgdGhlXG5ub3QtYS1udW1iZXIgdmFsdWVzIGFyZSBhbiBleGFtcGxlIGZvciBub3QgZm9sbG93aW5nIHRoZXNlIHJ1bGVzLlxuXG5cbk1lbWJlcnNoaXAgdGVzdCBvcGVyYXRpb25zXG49PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5UaGUgb3BlcmF0b3JzICJpbiIgYW5kICJub3QgaW4iIHRlc3QgZm9yIG1lbWJlcnNoaXAuICAieCBpbiBzIlxuZXZhbHVhdGVzIHRvIHRydWUgaWYgKngqIGlzIGEgbWVtYmVyIG9mICpzKiwgYW5kIGZhbHNlIG90aGVyd2lzZS4gICJ4XG5ub3QgaW4gcyIgcmV0dXJucyB0aGUgbmVnYXRpb24gb2YgInggaW4gcyIuICBBbGwgYnVpbHQtaW4gc2VxdWVuY2VzXG5hbmQgc2V0IHR5cGVzIHN1cHBvcnQgdGhpcyBhcyB3ZWxsIGFzIGRpY3Rpb25hcnksIGZvciB3aGljaCAiaW4iIHRlc3RzXG53aGV0aGVyIHRoZSBkaWN0aW9uYXJ5IGhhcyBhIGdpdmVuIGtleS4gRm9yIGNvbnRhaW5lciB0eXBlcyBzdWNoIGFzXG5saXN0LCB0dXBsZSwgc2V0LCBmcm96ZW5zZXQsIGRpY3QsIG9yIGNvbGxlY3Rpb25zLmRlcXVlLCB0aGVcbmV4cHJlc3Npb24gInggaW4geSIgaXMgZXF1aXZhbGVudCB0byAiYW55KHggaXMgZSBvciB4ID09IGUgZm9yIGUgaW5cbnkpIi5cblxuRm9yIHRoZSBzdHJpbmcgYW5kIGJ5dGVzIHR5cGVzLCAieCBpbiB5IiBpcyB0cnVlIGlmIGFuZCBvbmx5IGlmICp4KiBpc1xuYSBzdWJzdHJpbmcgb2YgKnkqLiAgQW4gZXF1aXZhbGVudCB0ZXN0IGlzICJ5LmZpbmQoeCkgIT0gLTEiLiAgRW1wdHlcbnN0cmluZ3MgYXJlIGFsd2F5cyBjb25zaWRlcmVkIHRvIGJlIGEgc3Vic3RyaW5nIG9mIGFueSBvdGhlciBzdHJpbmcsXG5zbyAiIiIgaW4gImFiYyIiIHdpbGwgcmV0dXJuICJUcnVlIi5cblxuRm9yIHVzZXItZGVmaW5lZCBjbGFzc2VzIHdoaWNoIGRlZmluZSB0aGUgIl9fY29udGFpbnNfXygpIiBtZXRob2QsICJ4XG5pbiB5IiBpcyB0cnVlIGlmIGFuZCBvbmx5IGlmICJ5Ll9fY29udGFpbnNfXyh4KSIgaXMgdHJ1ZS5cblxuRm9yIHVzZXItZGVmaW5lZCBjbGFzc2VzIHdoaWNoIGRvIG5vdCBkZWZpbmUgIl9fY29udGFpbnNfXygpIiBidXQgZG9cbmRlZmluZSAiX19pdGVyX18oKSIsICJ4IGluIHkiIGlzIHRydWUgaWYgc29tZSB2YWx1ZSAieiIgd2l0aCAieCA9PSB6IlxuaXMgcHJvZHVjZWQgd2hpbGUgaXRlcmF0aW5nIG92ZXIgInkiLiAgSWYgYW4gZXhjZXB0aW9uIGlzIHJhaXNlZFxuZHVyaW5nIHRoZSBpdGVyYXRpb24sIGl0IGlzIGFzIGlmICJpbiIgcmFpc2VkIHRoYXQgZXhjZXB0aW9uLlxuXG5MYXN0bHksIHRoZSBvbGQtc3R5bGUgaXRlcmF0aW9uIHByb3RvY29sIGlzIHRyaWVkOiBpZiBhIGNsYXNzIGRlZmluZXNcbiJfX2dldGl0ZW1fXygpIiwgInggaW4geSIgaXMgdHJ1ZSBpZiBhbmQgb25seSBpZiB0aGVyZSBpcyBhIG5vbi1cbm5lZ2F0aXZlIGludGVnZXIgaW5kZXggKmkqIHN1Y2ggdGhhdCAieCA9PSB5W2ldIiwgYW5kIGFsbCBsb3dlclxuaW50ZWdlciBpbmRpY2VzIGRvIG5vdCByYWlzZSAiSW5kZXhFcnJvciIgZXhjZXB0aW9uLiAgKElmIGFueSBvdGhlclxuZXhjZXB0aW9uIGlzIHJhaXNlZCwgaXQgaXMgYXMgaWYgImluIiByYWlzZWQgdGhhdCBleGNlcHRpb24pLlxuXG5UaGUgb3BlcmF0b3IgIm5vdCBpbiIgaXMgZGVmaW5lZCB0byBoYXZlIHRoZSBpbnZlcnNlIHRydWUgdmFsdWUgb2ZcbiJpbiIuXG5cblxuSWRlbnRpdHkgY29tcGFyaXNvbnNcbj09PT09PT09PT09PT09PT09PT09XG5cblRoZSBvcGVyYXRvcnMgImlzIiBhbmQgImlzIG5vdCIgdGVzdCBmb3Igb2JqZWN0IGlkZW50aXR5OiAieCBpcyB5IiBpc1xudHJ1ZSBpZiBhbmQgb25seSBpZiAqeCogYW5kICp5KiBhcmUgdGhlIHNhbWUgb2JqZWN0LiAgInggaXMgbm90IHkiXG55aWVsZHMgdGhlIGludmVyc2UgdHJ1dGggdmFsdWUuIFs0XVxuJywKKyAnY29tcG91bmQnOiB1J1xuQ29tcG91bmQgc3RhdGVtZW50c1xuKioqKioqKioqKioqKioqKioqKlxuXG5Db21wb3VuZCBzdGF0ZW1lbnRzIGNvbnRhaW4gKGdyb3VwcyBvZikgb3RoZXIgc3RhdGVtZW50czsgdGhleSBhZmZlY3Rcbm9yIGNvbnRyb2wgdGhlIGV4ZWN1dGlvbiBvZiB0aG9zZSBvdGhlciBzdGF0ZW1lbnRzIGluIHNvbWUgd2F5LiAgSW5cbmdlbmVyYWwsIGNvbXBvdW5kIHN0YXRlbWVudHMgc3BhbiBtdWx0aXBsZSBsaW5lcywgYWx0aG91Z2ggaW4gc2ltcGxlXG5pbmNhcm5hdGlvbnMgYSB3aG9sZSBjb21wb3VuZCBzdGF0ZW1lbnQgbWF5IGJlIGNvbnRhaW5lZCBpbiBvbmUgbGluZS5cblxuVGhlICJpZiIsICJ3aGlsZSIgYW5kICJmb3IiIHN0YXRlbWVudHMgaW1wbGVtZW50IHRyYWRpdGlvbmFsIGNvbnRyb2xcbmZsb3cgY29uc3RydWN0cy4gICJ0cnkiIHNwZWNpZmllcyBleGNlcHRpb24gaGFuZGxlcnMgYW5kL29yIGNsZWFudXBcbmNvZGUgZm9yIGEgZ3JvdXAgb2Ygc3RhdGVtZW50cywgd2hpbGUgdGhlICJ3aXRoIiBzdGF0ZW1lbnQgYWxsb3dzIHRoZVxuZXhlY3V0aW9uIG9mIGluaXRpYWxpemF0aW9uIGFuZCBmaW5hbGl6YXRpb24gY29kZSBhcm91bmQgYSBibG9jayBvZlxuY29kZS4gIEZ1bmN0aW9uIGFuZCBjbGFzcyBkZWZpbml0aW9ucyBhcmUgYWxzbyBzeW50YWN0aWNhbGx5IGNvbXBvdW5kXG5zdGF0ZW1lbnRzLlxuXG5BIGNvbXBvdW5kIHN0YXRlbWVudCBjb25zaXN0cyBvZiBvbmUgb3IgbW9yZSBcJ2NsYXVzZXMuXCcgIEEgY2xhdXNlXG5jb25zaXN0cyBvZiBhIGhlYWRlciBhbmQgYSBcJ3N1aXRlLlwnICBUaGUgY2xhdXNlIGhlYWRlcnMgb2YgYVxucGFydGljdWxhciBjb21wb3VuZCBzdGF0ZW1lbnQgYXJlIGFsbCBhdCB0aGUgc2FtZSBpbmRlbnRhdGlvbiBsZXZlbC5cbkVhY2ggY2xhdXNlIGhlYWRlciBiZWdpbnMgd2l0aCBhIHVuaXF1ZWx5IGlkZW50aWZ5aW5nIGtleXdvcmQgYW5kIGVuZHNcbndpdGggYSBjb2xvbi4gIEEgc3VpdGUgaXMgYSBncm91cCBvZiBzdGF0ZW1lbnRzIGNvbnRyb2xsZWQgYnkgYVxuY2xhdXNlLiAgQSBzdWl0ZSBjYW4gYmUgb25lIG9yIG1vcmUgc2VtaWNvbG9uLXNlcGFyYXRlZCBzaW1wbGVcbnN0YXRlbWVudHMgb24gdGhlIHNhbWUgbGluZSBhcyB0aGUgaGVhZGVyLCBmb2xsb3dpbmcgdGhlIGhlYWRlclwnc1xuY29sb24sIG9yIGl0IGNhbiBiZSBvbmUgb3IgbW9yZSBpbmRlbnRlZCBzdGF0ZW1lbnRzIG9uIHN1YnNlcXVlbnRcbmxpbmVzLiAgT25seSB0aGUgbGF0dGVyIGZvcm0gb2YgYSBzdWl0ZSBjYW4gY29udGFpbiBuZXN0ZWQgY29tcG91bmRcbnN0YXRlbWVudHM7IHRoZSBmb2xsb3dpbmcgaXMgaWxsZWdhbCwgbW9zdGx5IGJlY2F1c2UgaXQgd291bGRuXCd0IGJlXG5jbGVhciB0byB3aGljaCAiaWYiIGNsYXVzZSBhIGZvbGxvd2luZyAiZWxzZSIgY2xhdXNlIHdvdWxkIGJlbG9uZzpcblxuICAgaWYgdGVzdDE6IGlmIHRlc3QyOiBwcmludCh4KVxuXG5BbHNvIG5vdGUgdGhhdCB0aGUgc2VtaWNvbG9uIGJpbmRzIHRpZ2h0ZXIgdGhhbiB0aGUgY29sb24gaW4gdGhpc1xuY29udGV4dCwgc28gdGhhdCBpbiB0aGUgZm9sbG93aW5nIGV4YW1wbGUsIGVpdGhlciBhbGwgb3Igbm9uZSBvZiB0aGVcbiJwcmludCgpIiBjYWxscyBhcmUgZXhlY3V0ZWQ6XG5cbiAgIGlmIHggPCB5IDwgejogcHJpbnQoeCk7IHByaW50KHkpOyBwcmludCh6KVxuXG5TdW1tYXJpemluZzpcblxuICAgY29tcG91bmRfc3RtdCA6Oj0gaWZfc3RtdFxuICAgICAgICAgICAgICAgICAgICAgfCB3aGlsZV9zdG10XG4gICAgICAgICAgICAgICAgICAgICB8IGZvcl9zdG10XG4gICAgICAgICAgICAgICAgICAgICB8IHRyeV9zdG10XG4gICAgICAgICAgICAgICAgICAgICB8IHdpdGhfc3RtdFxuICAgICAgICAgICAgICAgICAgICAgfCBmdW5jZGVmXG4gICAgICAgICAgICAgICAgICAgICB8IGNsYXNzZGVmXG4gICBzdWl0ZSAgICAgICAgIDo6PSBzdG10X2xpc3QgTkVXTElORSB8IE5FV0xJTkUgSU5ERU5UIHN0YXRlbWVudCsgREVERU5UXG4gICBzdGF0ZW1lbnQgICAgIDo6PSBzdG10X2xpc3QgTkVXTElORSB8IGNvbXBvdW5kX3N0bXRcbiAgIHN0bXRfbGlzdCAgICAgOjo9IHNpbXBsZV9zdG10ICgiOyIgc2ltcGxlX3N0bXQpKiBbIjsiXVxuXG5Ob3RlIHRoYXQgc3RhdGVtZW50cyBhbHdheXMgZW5kIGluIGEgIk5FV0xJTkUiIHBvc3NpYmx5IGZvbGxvd2VkIGJ5IGFcbiJERURFTlQiLiAgQWxzbyBub3RlIHRoYXQgb3B0aW9uYWwgY29udGludWF0aW9uIGNsYXVzZXMgYWx3YXlzIGJlZ2luXG53aXRoIGEga2V5d29yZCB0aGF0IGNhbm5vdCBzdGFydCBhIHN0YXRlbWVudCwgdGh1cyB0aGVyZSBhcmUgbm9cbmFtYmlndWl0aWVzICh0aGUgXCdkYW5nbGluZyAiZWxzZSJcJyBwcm9ibGVtIGlzIHNvbHZlZCBpbiBQeXRob24gYnlcbnJlcXVpcmluZyBuZXN0ZWQgImlmIiBzdGF0ZW1lbnRzIHRvIGJlIGluZGVudGVkKS5cblxuVGhlIGZvcm1hdHRpbmcgb2YgdGhlIGdyYW1tYXIgcnVsZXMgaW4gdGhlIGZvbGxvd2luZyBzZWN0aW9ucyBwbGFjZXNcbmVhY2ggY2xhdXNlIG9uIGEgc2VwYXJhdGUgbGluZSBmb3IgY2xhcml0eS5cblxuXG5UaGUgImlmIiBzdGF0ZW1lbnRcbj09PT09PT09PT09PT09PT09PVxuXG5UaGUgImlmIiBzdGF0ZW1lbnQgaXMgdXNlZCBmb3IgY29uZGl0aW9uYWwgZXhlY3V0aW9uOlxuXG4gICBpZl9zdG10IDo6PSAiaWYiIGV4cHJlc3Npb24gIjoiIHN1aXRlXG4gICAgICAgICAgICAgICAoICJlbGlmIiBleHByZXNzaW9uICI6IiBzdWl0ZSApKlxuICAgICAgICAgICAgICAgWyJlbHNlIiAiOiIgc3VpdGVdXG5cbkl0IHNlbGVjdHMgZXhhY3RseSBvbmUgb2YgdGhlIHN1aXRlcyBieSBldmFsdWF0aW5nIHRoZSBleHByZXNzaW9ucyBvbmVcbmJ5IG9uZSB1bnRpbCBvbmUgaXMgZm91bmQgdG8gYmUgdHJ1ZSAoc2VlIHNlY3Rpb24gKkJvb2xlYW4gb3BlcmF0aW9ucypcbmZvciB0aGUgZGVmaW5pdGlvbiBvZiB0cnVlIGFuZCBmYWxzZSk7IHRoZW4gdGhhdCBzdWl0ZSBpcyBleGVjdXRlZFxuKGFuZCBubyBvdGhlciBwYXJ0IG9mIHRoZSAiaWYiIHN0YXRlbWVudCBpcyBleGVjdXRlZCBvciBldmFsdWF0ZWQpLlxuSWYgYWxsIGV4cHJlc3Npb25zIGFyZSBmYWxzZSwgdGhlIHN1aXRlIG9mIHRoZSAiZWxzZSIgY2xhdXNlLCBpZlxucHJlc2VudCwgaXMgZXhlY3V0ZWQuXG5cblxuVGhlICJ3aGlsZSIgc3RhdGVtZW50XG49PT09PT09PT09PT09PT09PT09PT1cblxuVGhlICJ3aGlsZSIgc3RhdGVtZW50IGlzIHVzZWQgZm9yIHJlcGVhdGVkIGV4ZWN1dGlvbiBhcyBsb25nIGFzIGFuXG5leHByZXNzaW9uIGlzIHRydWU6XG5cbiAgIHdoaWxlX3N0bXQgOjo9ICJ3aGlsZSIgZXhwcmVzc2lvbiAiOiIgc3VpdGVcbiAgICAgICAgICAgICAgICAgIFsiZWxzZSIgIjoiIHN1aXRlXVxuXG5UaGlzIHJlcGVhdGVkbHkgdGVzdHMgdGhlIGV4cHJlc3Npb24gYW5kLCBpZiBpdCBpcyB0cnVlLCBleGVjdXRlcyB0aGVcbmZpcnN0IHN1aXRlOyBpZiB0aGUgZXhwcmVzc2lvbiBpcyBmYWxzZSAod2hpY2ggbWF5IGJlIHRoZSBmaXJzdCB0aW1lXG5pdCBpcyB0ZXN0ZWQpIHRoZSBzdWl0ZSBvZiB0aGUgImVsc2UiIGNsYXVzZSwgaWYgcHJlc2VudCwgaXMgZXhlY3V0ZWRcbmFuZCB0aGUgbG9vcCB0ZXJtaW5hdGVzLlxuXG5BICJicmVhayIgc3RhdGVtZW50IGV4ZWN1dGVkIGluIHRoZSBmaXJzdCBzdWl0ZSB0ZXJtaW5hdGVzIHRoZSBsb29wXG53aXRob3V0IGV4ZWN1dGluZyB0aGUgImVsc2UiIGNsYXVzZVwncyBzdWl0ZS4gIEEgImNvbnRpbnVlIiBzdGF0ZW1lbnRcbmV4ZWN1dGVkIGluIHRoZSBmaXJzdCBzdWl0ZSBza2lwcyB0aGUgcmVzdCBvZiB0aGUgc3VpdGUgYW5kIGdvZXMgYmFja1xudG8gdGVzdGluZyB0aGUgZXhwcmVzc2lvbi5cblxuXG5UaGUgImZvciIgc3RhdGVtZW50XG49PT09PT09PT09PT09PT09PT09XG5cblRoZSAiZm9yIiBzdGF0ZW1lbnQgaXMgdXNlZCB0byBpdGVyYXRlIG92ZXIgdGhlIGVsZW1lbnRzIG9mIGEgc2VxdWVuY2VcbihzdWNoIGFzIGEgc3RyaW5nLCB0dXBsZSBvciBsaXN0KSBvciBvdGhlciBpdGVyYWJsZSBvYmplY3Q6XG5cbiAgIGZvcl9zdG10IDo6PSAiZm9yIiB0YXJnZXRfbGlzdCAiaW4iIGV4cHJlc3Npb25fbGlzdCAiOiIgc3VpdGVcbiAgICAgICAgICAgICAgICBbImVsc2UiICI6IiBzdWl0ZV1cblxuVGhlIGV4cHJlc3Npb24gbGlzdCBpcyBldmFsdWF0ZWQgb25jZTsgaXQgc2hvdWxkIHlpZWxkIGFuIGl0ZXJhYmxlXG5vYmplY3QuICBBbiBpdGVyYXRvciBpcyBjcmVhdGVkIGZvciB0aGUgcmVzdWx0IG9mIHRoZVxuImV4cHJlc3Npb25fbGlzdCIuICBUaGUgc3VpdGUgaXMgdGhlbiBleGVjdXRlZCBvbmNlIGZvciBlYWNoIGl0ZW1cbnByb3ZpZGVkIGJ5IHRoZSBpdGVyYXRvciwgaW4gdGhlIG9yZGVyIHJldHVybmVkIGJ5IHRoZSBpdGVyYXRvci4gIEVhY2hcbml0ZW0gaW4gdHVybiBpcyBhc3NpZ25lZCB0byB0aGUgdGFyZ2V0IGxpc3QgdXNpbmcgdGhlIHN0YW5kYXJkIHJ1bGVzXG5mb3IgYXNzaWdubWVudHMgKHNlZSAqQXNzaWdubWVudCBzdGF0ZW1lbnRzKiksIGFuZCB0aGVuIHRoZSBzdWl0ZSBpc1xuZXhlY3V0ZWQuICBXaGVuIHRoZSBpdGVtcyBhcmUgZXhoYXVzdGVkICh3aGljaCBpcyBpbW1lZGlhdGVseSB3aGVuIHRoZVxuc2VxdWVuY2UgaXMgZW1wdHkgb3IgYW4gaXRlcmF0b3IgcmFpc2VzIGEgIlN0b3BJdGVyYXRpb24iIGV4Y2VwdGlvbiksXG50aGUgc3VpdGUgaW4gdGhlICJlbHNlIiBjbGF1c2UsIGlmIHByZXNlbnQsIGlzIGV4ZWN1dGVkLCBhbmQgdGhlIGxvb3BcbnRlcm1pbmF0ZXMuXG5cbkEgImJyZWFrIiBzdGF0ZW1lbnQgZXhlY3V0ZWQgaW4gdGhlIGZpcnN0IHN1aXRlIHRlcm1pbmF0ZXMgdGhlIGxvb3BcbndpdGhvdXQgZXhlY3V0aW5nIHRoZSAiZWxzZSIgY2xhdXNlXCdzIHN1aXRlLiAgQSAiY29udGludWUiIHN0YXRlbWVudFxuZXhlY3V0ZWQgaW4gdGhlIGZpcnN0IHN1aXRlIHNraXBzIHRoZSByZXN0IG9mIHRoZSBzdWl0ZSBhbmQgY29udGludWVzXG53aXRoIHRoZSBuZXh0IGl0ZW0sIG9yIHdpdGggdGhlICJlbHNlIiBjbGF1c2UgaWYgdGhlcmUgaXMgbm8gbmV4dFxuaXRlbS5cblxuVGhlIGZvci1sb29wIG1ha2VzIGFzc2lnbm1lbnRzIHRvIHRoZSB2YXJpYWJsZXMocykgaW4gdGhlIHRhcmdldCBsaXN0LlxuVGhpcyBvdmVyd3JpdGVzIGFsbCBwcmV2aW91cyBhc3NpZ25tZW50cyB0byB0aG9zZSB2YXJpYWJsZXMgaW5jbHVkaW5nXG50aG9zZSBtYWRlIGluIHRoZSBzdWl0ZSBvZiB0aGUgZm9yLWxvb3A6XG5cbiAgIGZvciBpIGluIHJhbmdlKDEwKTpcbiAgICAgICBwcmludChpKVxuICAgICAgIGkgPSA1ICAgICAgICAgICAgICMgdGhpcyB3aWxsIG5vdCBhZmZlY3QgdGhlIGZvci1sb29wXG4gICAgICAgICAgICAgICAgICAgICAgICAgIyBiZWNhdXNlIGkgd2lsbCBiZSBvdmVyd3JpdHRlbiB3aXRoIHRoZSBuZXh0XG4gICAgICAgICAgICAgICAgICAgICAgICAgIyBpbmRleCBpbiB0aGUgcmFuZ2VcblxuTmFtZXMgaW4gdGhlIHRhcmdldCBsaXN0IGFyZSBub3QgZGVsZXRlZCB3aGVuIHRoZSBsb29wIGlzIGZpbmlzaGVkLFxuYnV0IGlmIHRoZSBzZXF1ZW5jZSBpcyBlbXB0eSwgdGhleSB3aWxsIG5vdCBoYXZlIGJlZW4gYXNzaWduZWQgdG8gYXRcbmFsbCBieSB0aGUgbG9vcC4gIEhpbnQ6IHRoZSBidWlsdC1pbiBmdW5jdGlvbiAicmFuZ2UoKSIgcmV0dXJucyBhblxuaXRlcmF0b3Igb2YgaW50ZWdlcnMgc3VpdGFibGUgdG8gZW11bGF0ZSB0aGUgZWZmZWN0IG9mIFBhc2NhbFwncyAiZm9yIGlcbjo9IGEgdG8gYiBkbyI7IGUuZy4sICJsaXN0KHJhbmdlKDMpKSIgcmV0dXJucyB0aGUgbGlzdCAiWzAsIDEsIDJdIi5cblxuTm90ZTogVGhlcmUgaXMgYSBzdWJ0bGV0eSB3aGVuIHRoZSBzZXF1ZW5jZSBpcyBiZWluZyBtb2RpZmllZCBieSB0aGVcbiAgbG9vcCAodGhpcyBjYW4gb25seSBvY2N1ciBmb3IgbXV0YWJsZSBzZXF1ZW5jZXMsIGkuZS4gbGlzdHMpLiAgQW5cbiAgaW50ZXJuYWwgY291bnRlciBpcyB1c2VkIHRvIGtlZXAgdHJhY2sgb2Ygd2hpY2ggaXRlbSBpcyB1c2VkIG5leHQsXG4gIGFuZCB0aGlzIGlzIGluY3JlbWVudGVkIG9uIGVhY2ggaXRlcmF0aW9uLiAgV2hlbiB0aGlzIGNvdW50ZXIgaGFzXG4gIHJlYWNoZWQgdGhlIGxlbmd0aCBvZiB0aGUgc2VxdWVuY2UgdGhlIGxvb3AgdGVybWluYXRlcy4gIFRoaXMgbWVhbnNcbiAgdGhhdCBpZiB0aGUgc3VpdGUgZGVsZXRlcyB0aGUgY3VycmVudCAob3IgYSBwcmV2aW91cykgaXRlbSBmcm9tIHRoZVxuICBzZXF1ZW5jZSwgdGhlIG5leHQgaXRlbSB3aWxsIGJlIHNraXBwZWQgKHNpbmNlIGl0IGdldHMgdGhlIGluZGV4IG9mXG4gIHRoZSBjdXJyZW50IGl0ZW0gd2hpY2ggaGFzIGFscmVhZHkgYmVlbiB0cmVhdGVkKS4gIExpa2V3aXNlLCBpZiB0aGVcbiAgc3VpdGUgaW5zZXJ0cyBhbiBpdGVtIGluIHRoZSBzZXF1ZW5jZSBiZWZvcmUgdGhlIGN1cnJlbnQgaXRlbSwgdGhlXG4gIGN1cnJlbnQgaXRlbSB3aWxsIGJlIHRyZWF0ZWQgYWdhaW4gdGhlIG5leHQgdGltZSB0aHJvdWdoIHRoZSBsb29wLlxuICBUaGlzIGNhbiBsZWFkIHRvIG5hc3R5IGJ1Z3MgdGhhdCBjYW4gYmUgYXZvaWRlZCBieSBtYWtpbmcgYVxuICB0ZW1wb3JhcnkgY29weSB1c2luZyBhIHNsaWNlIG9mIHRoZSB3aG9sZSBzZXF1ZW5jZSwgZS5nLixcblxuICAgICBmb3IgeCBpbiBhWzpdOlxuICAgICAgICAgaWYgeCA8IDA6IGEucmVtb3ZlKHgpXG5cblxuVGhlICJ0cnkiIHN0YXRlbWVudFxuPT09PT09PT09PT09PT09PT09PVxuXG5UaGUgInRyeSIgc3RhdGVtZW50IHNwZWNpZmllcyBleGNlcHRpb24gaGFuZGxlcnMgYW5kL29yIGNsZWFudXAgY29kZVxuZm9yIGEgZ3JvdXAgb2Ygc3RhdGVtZW50czpcblxuICAgdHJ5X3N0bXQgIDo6PSB0cnkxX3N0bXQgfCB0cnkyX3N0bXRcbiAgIHRyeTFfc3RtdCA6Oj0gInRyeSIgIjoiIHN1aXRlXG4gICAgICAgICAgICAgICAgICgiZXhjZXB0IiBbZXhwcmVzc2lvbiBbImFzIiBpZGVudGlmaWVyXV0gIjoiIHN1aXRlKStcbiAgICAgICAgICAgICAgICAgWyJlbHNlIiAiOiIgc3VpdGVdXG4gICAgICAgICAgICAgICAgIFsiZmluYWxseSIgIjoiIHN1aXRlXVxuICAgdHJ5Ml9zdG10IDo6PSAidHJ5IiAiOiIgc3VpdGVcbiAgICAgICAgICAgICAgICAgImZpbmFsbHkiICI6IiBzdWl0ZVxuXG5UaGUgImV4Y2VwdCIgY2xhdXNlKHMpIHNwZWNpZnkgb25lIG9yIG1vcmUgZXhjZXB0aW9uIGhhbmRsZXJzLiBXaGVuIG5vXG5leGNlcHRpb24gb2NjdXJzIGluIHRoZSAidHJ5IiBjbGF1c2UsIG5vIGV4Y2VwdGlvbiBoYW5kbGVyIGlzXG5leGVjdXRlZC4gV2hlbiBhbiBleGNlcHRpb24gb2NjdXJzIGluIHRoZSAidHJ5IiBzdWl0ZSwgYSBzZWFyY2ggZm9yIGFuXG5leGNlcHRpb24gaGFuZGxlciBpcyBzdGFydGVkLiAgVGhpcyBzZWFyY2ggaW5zcGVjdHMgdGhlIGV4Y2VwdCBjbGF1c2VzXG5pbiB0dXJuIHVudGlsIG9uZSBpcyBmb3VuZCB0aGF0IG1hdGNoZXMgdGhlIGV4Y2VwdGlvbi4gIEFuIGV4cHJlc3Npb24tXG5sZXNzIGV4Y2VwdCBjbGF1c2UsIGlmIHByZXNlbnQsIG11c3QgYmUgbGFzdDsgaXQgbWF0Y2hlcyBhbnlcbmV4Y2VwdGlvbi4gIEZvciBhbiBleGNlcHQgY2xhdXNlIHdpdGggYW4gZXhwcmVzc2lvbiwgdGhhdCBleHByZXNzaW9uXG5pcyBldmFsdWF0ZWQsIGFuZCB0aGUgY2xhdXNlIG1hdGNoZXMgdGhlIGV4Y2VwdGlvbiBpZiB0aGUgcmVzdWx0aW5nXG5vYmplY3QgaXMgImNvbXBhdGlibGUiIHdpdGggdGhlIGV4Y2VwdGlvbi4gIEFuIG9iamVjdCBpcyBjb21wYXRpYmxlXG53aXRoIGFuIGV4Y2VwdGlvbiBpZiBpdCBpcyB0aGUgY2xhc3Mgb3IgYSBiYXNlIGNsYXNzIG9mIHRoZSBleGNlcHRpb25cbm9iamVjdCBvciBhIHR1cGxlIGNvbnRhaW5pbmcgYW4gaXRlbSBjb21wYXRpYmxlIHdpdGggdGhlIGV4Y2VwdGlvbi5cblxuSWYgbm8gZXhjZXB0IGNsYXVzZSBtYXRjaGVzIHRoZSBleGNlcHRpb24sIHRoZSBzZWFyY2ggZm9yIGFuIGV4Y2VwdGlvblxuaGFuZGxlciBjb250aW51ZXMgaW4gdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIG9uIHRoZSBpbnZvY2F0aW9uIHN0YWNrLlxuWzFdXG5cbklmIHRoZSBldmFsdWF0aW9uIG9mIGFuIGV4cHJlc3Npb24gaW4gdGhlIGhlYWRlciBvZiBhbiBleGNlcHQgY2xhdXNlXG5yYWlzZXMgYW4gZXhjZXB0aW9uLCB0aGUgb3JpZ2luYWwgc2VhcmNoIGZvciBhIGhhbmRsZXIgaXMgY2FuY2VsZWQgYW5kXG5hIHNlYXJjaCBzdGFydHMgZm9yIHRoZSBuZXcgZXhjZXB0aW9uIGluIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCBvblxudGhlIGNhbGwgc3RhY2sgKGl0IGlzIHRyZWF0ZWQgYXMgaWYgdGhlIGVudGlyZSAidHJ5IiBzdGF0ZW1lbnQgcmFpc2VkXG50aGUgZXhjZXB0aW9uKS5cblxuV2hlbiBhIG1hdGNoaW5nIGV4Y2VwdCBjbGF1c2UgaXMgZm91bmQsIHRoZSBleGNlcHRpb24gaXMgYXNzaWduZWQgdG9cbnRoZSB0YXJnZXQgc3BlY2lmaWVkIGFmdGVyIHRoZSAiYXMiIGtleXdvcmQgaW4gdGhhdCBleGNlcHQgY2xhdXNlLCBpZlxucHJlc2VudCwgYW5kIHRoZSBleGNlcHQgY2xhdXNlXCdzIHN1aXRlIGlzIGV4ZWN1dGVkLiAgQWxsIGV4Y2VwdFxuY2xhdXNlcyBtdXN0IGhhdmUgYW4gZXhlY3V0YWJsZSBibG9jay4gIFdoZW4gdGhlIGVuZCBvZiB0aGlzIGJsb2NrIGlzXG5yZWFjaGVkLCBleGVjdXRpb24gY29udGludWVzIG5vcm1hbGx5IGFmdGVyIHRoZSBlbnRpcmUgdHJ5IHN0YXRlbWVudC5cbihUaGlzIG1lYW5zIHRoYXQgaWYgdHdvIG5lc3RlZCBoYW5kbGVycyBleGlzdCBmb3IgdGhlIHNhbWUgZXhjZXB0aW9uLFxuYW5kIHRoZSBleGNlcHRpb24gb2NjdXJzIGluIHRoZSB0cnkgY2xhdXNlIG9mIHRoZSBpbm5lciBoYW5kbGVyLCB0aGVcbm91dGVyIGhhbmRsZXIgd2lsbCBub3QgaGFuZGxlIHRoZSBleGNlcHRpb24uKVxuXG5XaGVuIGFuIGV4Y2VwdGlvbiBoYXMgYmVlbiBhc3NpZ25lZCB1c2luZyAiYXMgdGFyZ2V0IiwgaXQgaXMgY2xlYXJlZFxuYXQgdGhlIGVuZCBvZiB0aGUgZXhjZXB0IGNsYXVzZS4gIFRoaXMgaXMgYXMgaWZcblxuICAgZXhjZXB0IEUgYXMgTjpcbiAgICAgICBmb29cblxud2FzIHRyYW5zbGF0ZWQgdG9cblxuICAgZXhjZXB0IEUgYXMgTjpcbiAgICAgICB0cnk6XG4gICAgICAgICAgIGZvb1xuICAgICAgIGZpbmFsbHk6XG4gICAgICAgICAgIGRlbCBOXG5cblRoaXMgbWVhbnMgdGhlIGV4Y2VwdGlvbiBtdXN0IGJlIGFzc2lnbmVkIHRvIGEgZGlmZmVyZW50IG5hbWUgdG8gYmVcbmFibGUgdG8gcmVmZXIgdG8gaXQgYWZ0ZXIgdGhlIGV4Y2VwdCBjbGF1c2UuICBFeGNlcHRpb25zIGFyZSBjbGVhcmVkXG5iZWNhdXNlIHdpdGggdGhlIHRyYWNlYmFjayBhdHRhY2hlZCB0byB0aGVtLCB0aGV5IGZvcm0gYSByZWZlcmVuY2VcbmN5Y2xlIHdpdGggdGhlIHN0YWNrIGZyYW1lLCBrZWVwaW5nIGFsbCBsb2NhbHMgaW4gdGhhdCBmcmFtZSBhbGl2ZVxudW50aWwgdGhlIG5leHQgZ2FyYmFnZSBjb2xsZWN0aW9uIG9jY3Vycy5cblxuQmVmb3JlIGFuIGV4Y2VwdCBjbGF1c2VcJ3Mgc3VpdGUgaXMgZXhlY3V0ZWQsIGRldGFpbHMgYWJvdXQgdGhlXG5leGNlcHRpb24gYXJlIHN0b3JlZCBpbiB0aGUgInN5cyIgbW9kdWxlIGFuZCBjYW4gYmUgYWNjZXNzZWQgdmlhXG4ic3lzLmV4Y19pbmZvKCkiLiAic3lzLmV4Y19pbmZvKCkiIHJldHVybnMgYSAzLXR1cGxlIGNvbnNpc3Rpbmcgb2YgdGhlXG5leGNlcHRpb24gY2xhc3MsIHRoZSBleGNlcHRpb24gaW5zdGFuY2UgYW5kIGEgdHJhY2ViYWNrIG9iamVjdCAoc2VlXG5zZWN0aW9uICpUaGUgc3RhbmRhcmQgdHlwZSBoaWVyYXJjaHkqKSBpZGVudGlmeWluZyB0aGUgcG9pbnQgaW4gdGhlXG5wcm9ncmFtIHdoZXJlIHRoZSBleGNlcHRpb24gb2NjdXJyZWQuICAic3lzLmV4Y19pbmZvKCkiIHZhbHVlcyBhcmVcbnJlc3RvcmVkIHRvIHRoZWlyIHByZXZpb3VzIHZhbHVlcyAoYmVmb3JlIHRoZSBjYWxsKSB3aGVuIHJldHVybmluZ1xuZnJvbSBhIGZ1bmN0aW9uIHRoYXQgaGFuZGxlZCBhbiBleGNlcHRpb24uXG5cblRoZSBvcHRpb25hbCAiZWxzZSIgY2xhdXNlIGlzIGV4ZWN1dGVkIGlmIGFuZCB3aGVuIGNvbnRyb2wgZmxvd3Mgb2ZmXG50aGUgZW5kIG9mIHRoZSAidHJ5IiBjbGF1c2UuIFsyXSBFeGNlcHRpb25zIGluIHRoZSAiZWxzZSIgY2xhdXNlIGFyZVxubm90IGhhbmRsZWQgYnkgdGhlIHByZWNlZGluZyAiZXhjZXB0IiBjbGF1c2VzLlxuXG5JZiAiZmluYWxseSIgaXMgcHJlc2VudCwgaXQgc3BlY2lmaWVzIGEgXCdjbGVhbnVwXCcgaGFuZGxlci4gIFRoZSAidHJ5IlxuY2xhdXNlIGlzIGV4ZWN1dGVkLCBpbmNsdWRpbmcgYW55ICJleGNlcHQiIGFuZCAiZWxzZSIgY2xhdXNlcy4gIElmIGFuXG5leGNlcHRpb24gb2NjdXJzIGluIGFueSBvZiB0aGUgY2xhdXNlcyBhbmQgaXMgbm90IGhhbmRsZWQsIHRoZVxuZXhjZXB0aW9uIGlzIHRlbXBvcmFyaWx5IHNhdmVkLiBUaGUgImZpbmFsbHkiIGNsYXVzZSBpcyBleGVjdXRlZC4gIElmXG50aGVyZSBpcyBhIHNhdmVkIGV4Y2VwdGlvbiBpdCBpcyByZS1yYWlzZWQgYXQgdGhlIGVuZCBvZiB0aGUgImZpbmFsbHkiXG5jbGF1c2UuICBJZiB0aGUgImZpbmFsbHkiIGNsYXVzZSByYWlzZXMgYW5vdGhlciBleGNlcHRpb24sIHRoZSBzYXZlZFxuZXhjZXB0aW9uIGlzIHNldCBhcyB0aGUgY29udGV4dCBvZiB0aGUgbmV3IGV4Y2VwdGlvbi4gSWYgdGhlICJmaW5hbGx5IlxuY2xhdXNlIGV4ZWN1dGVzIGEgInJldHVybiIgb3IgImJyZWFrIiBzdGF0ZW1lbnQsIHRoZSBzYXZlZCBleGNlcHRpb25cbmlzIGRpc2NhcmRlZDpcblxuICAgPj4+IGRlZiBmKCk6XG4gICAuLi4gICAgIHRyeTpcbiAgIC4uLiAgICAgICAgIDEvMFxuICAgLi4uICAgICBmaW5hbGx5OlxuICAgLi4uICAgICAgICAgcmV0dXJuIDQyXG4gICAuLi5cbiAgID4+PiBmKClcbiAgIDQyXG5cblRoZSBleGNlcHRpb24gaW5mb3JtYXRpb24gaXMgbm90IGF2YWlsYWJsZSB0byB0aGUgcHJvZ3JhbSBkdXJpbmdcbmV4ZWN1dGlvbiBvZiB0aGUgImZpbmFsbHkiIGNsYXVzZS5cblxuV2hlbiBhICJyZXR1cm4iLCAiYnJlYWsiIG9yICJjb250aW51ZSIgc3RhdGVtZW50IGlzIGV4ZWN1dGVkIGluIHRoZVxuInRyeSIgc3VpdGUgb2YgYSAidHJ5Ii4uLiJmaW5hbGx5IiBzdGF0ZW1lbnQsIHRoZSAiZmluYWxseSIgY2xhdXNlIGlzXG5hbHNvIGV4ZWN1dGVkIFwnb24gdGhlIHdheSBvdXQuXCcgQSAiY29udGludWUiIHN0YXRlbWVudCBpcyBpbGxlZ2FsIGluXG50aGUgImZpbmFsbHkiIGNsYXVzZS4gKFRoZSByZWFzb24gaXMgYSBwcm9ibGVtIHdpdGggdGhlIGN1cnJlbnRcbmltcGxlbWVudGF0aW9uIC0tLSB0aGlzIHJlc3RyaWN0aW9uIG1heSBiZSBsaWZ0ZWQgaW4gdGhlIGZ1dHVyZSkuXG5cblRoZSByZXR1cm4gdmFsdWUgb2YgYSBmdW5jdGlvbiBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBsYXN0ICJyZXR1cm4iXG5zdGF0ZW1lbnQgZXhlY3V0ZWQuICBTaW5jZSB0aGUgImZpbmFsbHkiIGNsYXVzZSBhbHdheXMgZXhlY3V0ZXMsIGFcbiJyZXR1cm4iIHN0YXRlbWVudCBleGVjdXRlZCBpbiB0aGUgImZpbmFsbHkiIGNsYXVzZSB3aWxsIGFsd2F5cyBiZSB0aGVcbmxhc3Qgb25lIGV4ZWN1dGVkOlxuXG4gICA+Pj4gZGVmIGZvbygpOlxuICAgLi4uICAgICB0cnk6XG4gICAuLi4gICAgICAgICByZXR1cm4gXCd0cnlcJ1xuICAgLi4uICAgICBmaW5hbGx5OlxuICAgLi4uICAgICAgICAgcmV0dXJuIFwnZmluYWxseVwnXG4gICAuLi5cbiAgID4+PiBmb28oKVxuICAgXCdmaW5hbGx5XCdcblxuQWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvbiBleGNlcHRpb25zIGNhbiBiZSBmb3VuZCBpbiBzZWN0aW9uXG4qRXhjZXB0aW9ucyosIGFuZCBpbmZvcm1hdGlvbiBvbiB1c2luZyB0aGUgInJhaXNlIiBzdGF0ZW1lbnQgdG9cbmdlbmVyYXRlIGV4Y2VwdGlvbnMgbWF5IGJlIGZvdW5kIGluIHNlY3Rpb24gKlRoZSByYWlzZSBzdGF0ZW1lbnQqLlxuXG5cblRoZSAid2l0aCIgc3RhdGVtZW50XG49PT09PT09PT09PT09PT09PT09PVxuXG5UaGUgIndpdGgiIHN0YXRlbWVudCBpcyB1c2VkIHRvIHdyYXAgdGhlIGV4ZWN1dGlvbiBvZiBhIGJsb2NrIHdpdGhcbm1ldGhvZHMgZGVmaW5lZCBieSBhIGNvbnRleHQgbWFuYWdlciAoc2VlIHNlY3Rpb24gKldpdGggU3RhdGVtZW50XG5Db250ZXh0IE1hbmFnZXJzKikuIFRoaXMgYWxsb3dzIGNvbW1vbiAidHJ5Ii4uLiJleGNlcHQiLi4uImZpbmFsbHkiXG51c2FnZSBwYXR0ZXJucyB0byBiZSBlbmNhcHN1bGF0ZWQgZm9yIGNvbnZlbmllbnQgcmV1c2UuXG5cbiAgIHdpdGhfc3RtdCA6Oj0gIndpdGgiIHdpdGhfaXRlbSAoIiwiIHdpdGhfaXRlbSkqICI6IiBzdWl0ZVxuICAgd2l0aF9pdGVtIDo6PSBleHByZXNzaW9uIFsiYXMiIHRhcmdldF1cblxuVGhlIGV4ZWN1dGlvbiBvZiB0aGUgIndpdGgiIHN0YXRlbWVudCB3aXRoIG9uZSAiaXRlbSIgcHJvY2VlZHMgYXNcbmZvbGxvd3M6XG5cbjEuIFRoZSBjb250ZXh0IGV4cHJlc3Npb24gKHRoZSBleHByZXNzaW9uIGdpdmVuIGluIHRoZSAid2l0aF9pdGVtIilcbiAgIGlzIGV2YWx1YXRlZCB0byBvYnRhaW4gYSBjb250ZXh0IG1hbmFnZXIuXG5cbjIuIFRoZSBjb250ZXh0IG1hbmFnZXJcJ3MgIl9fZXhpdF9fKCkiIGlzIGxvYWRlZCBmb3IgbGF0ZXIgdXNlLlxuXG4zLiBUaGUgY29udGV4dCBtYW5hZ2VyXCdzICJfX2VudGVyX18oKSIgbWV0aG9kIGlzIGludm9rZWQuXG5cbjQuIElmIGEgdGFyZ2V0IHdhcyBpbmNsdWRlZCBpbiB0aGUgIndpdGgiIHN0YXRlbWVudCwgdGhlIHJldHVyblxuICAgdmFsdWUgZnJvbSAiX19lbnRlcl9fKCkiIGlzIGFzc2lnbmVkIHRvIGl0LlxuXG4gICBOb3RlOiBUaGUgIndpdGgiIHN0YXRlbWVudCBndWFyYW50ZWVzIHRoYXQgaWYgdGhlICJfX2VudGVyX18oKSJcbiAgICAgbWV0aG9kIHJldHVybnMgd2l0aG91dCBhbiBlcnJvciwgdGhlbiAiX19leGl0X18oKSIgd2lsbCBhbHdheXMgYmVcbiAgICAgY2FsbGVkLiBUaHVzLCBpZiBhbiBlcnJvciBvY2N1cnMgZHVyaW5nIHRoZSBhc3NpZ25tZW50IHRvIHRoZVxuICAgICB0YXJnZXQgbGlzdCwgaXQgd2lsbCBiZSB0cmVhdGVkIHRoZSBzYW1lIGFzIGFuIGVycm9yIG9jY3VycmluZ1xuICAgICB3aXRoaW4gdGhlIHN1aXRlIHdvdWxkIGJlLiBTZWUgc3RlcCA2IGJlbG93LlxuXG41LiBUaGUgc3VpdGUgaXMgZXhlY3V0ZWQuXG5cbjYuIFRoZSBjb250ZXh0IG1hbmFnZXJcJ3MgIl9fZXhpdF9fKCkiIG1ldGhvZCBpcyBpbnZva2VkLiAgSWYgYW5cbiAgIGV4Y2VwdGlvbiBjYXVzZWQgdGhlIHN1aXRlIHRvIGJlIGV4aXRlZCwgaXRzIHR5cGUsIHZhbHVlLCBhbmRcbiAgIHRyYWNlYmFjayBhcmUgcGFzc2VkIGFzIGFyZ3VtZW50cyB0byAiX19leGl0X18oKSIuIE90aGVyd2lzZSwgdGhyZWVcbiAgICJOb25lIiBhcmd1bWVudHMgYXJlIHN1cHBsaWVkLlxuXG4gICBJZiB0aGUgc3VpdGUgd2FzIGV4aXRlZCBkdWUgdG8gYW4gZXhjZXB0aW9uLCBhbmQgdGhlIHJldHVybiB2YWx1ZVxuICAgZnJvbSB0aGUgIl9fZXhpdF9fKCkiIG1ldGhvZCB3YXMgZmFsc2UsIHRoZSBleGNlcHRpb24gaXMgcmVyYWlzZWQuXG4gICBJZiB0aGUgcmV0dXJuIHZhbHVlIHdhcyB0cnVlLCB0aGUgZXhjZXB0aW9uIGlzIHN1cHByZXNzZWQsIGFuZFxuICAgZXhlY3V0aW9uIGNvbnRpbnVlcyB3aXRoIHRoZSBzdGF0ZW1lbnQgZm9sbG93aW5nIHRoZSAid2l0aCJcbiAgIHN0YXRlbWVudC5cblxuICAgSWYgdGhlIHN1aXRlIHdhcyBleGl0ZWQgZm9yIGFueSByZWFzb24gb3RoZXIgdGhhbiBhbiBleGNlcHRpb24sIHRoZVxuICAgcmV0dXJuIHZhbHVlIGZyb20gIl9fZXhpdF9fKCkiIGlzIGlnbm9yZWQsIGFuZCBleGVjdXRpb24gcHJvY2VlZHNcbiAgIGF0IHRoZSBub3JtYWwgbG9jYXRpb24gZm9yIHRoZSBraW5kIG9mIGV4aXQgdGhhdCB3YXMgdGFrZW4uXG5cbldpdGggbW9yZSB0aGFuIG9uZSBpdGVtLCB0aGUgY29udGV4dCBtYW5hZ2VycyBhcmUgcHJvY2Vzc2VkIGFzIGlmXG5tdWx0aXBsZSAid2l0aCIgc3RhdGVtZW50cyB3ZXJlIG5lc3RlZDpcblxuICAgd2l0aCBBKCkgYXMgYSwgQigpIGFzIGI6XG4gICAgICAgc3VpdGVcblxuaXMgZXF1aXZhbGVudCB0b1xuXG4gICB3aXRoIEEoKSBhcyBhOlxuICAgICAgIHdpdGggQigpIGFzIGI6XG4gICAgICAgICAgIHN1aXRlXG5cbkNoYW5nZWQgaW4gdmVyc2lvbiAzLjE6IFN1cHBvcnQgZm9yIG11bHRpcGxlIGNvbnRleHQgZXhwcmVzc2lvbnMuXG5cblNlZSBhbHNvOiAqKlBFUCAwMzQzKiogLSBUaGUgIndpdGgiIHN0YXRlbWVudFxuXG4gICAgIFRoZSBzcGVjaWZpY2F0aW9uLCBiYWNrZ3JvdW5kLCBhbmQgZXhhbXBsZXMgZm9yIHRoZSBQeXRob24gIndpdGgiXG4gICAgIHN0YXRlbWVudC5cblxuXG5GdW5jdGlvbiBkZWZpbml0aW9uc1xuPT09PT09PT09PT09PT09PT09PT1cblxuQSBmdW5jdGlvbiBkZWZpbml0aW9uIGRlZmluZXMgYSB1c2VyLWRlZmluZWQgZnVuY3Rpb24gb2JqZWN0IChzZWVcbnNlY3Rpb24gKlRoZSBzdGFuZGFyZCB0eXBlIGhpZXJhcmNoeSopOlxuXG4gICBmdW5jZGVmICAgICAgICA6Oj0gW2RlY29yYXRvcnNdICJkZWYiIGZ1bmNuYW1lICIoIiBbcGFyYW1ldGVyX2xpc3RdICIpIiBbIi0+IiBleHByZXNzaW9uXSAiOiIgc3VpdGVcbiAgIGRlY29yYXRvcnMgICAgIDo6PSBkZWNvcmF0b3IrXG4gICBkZWNvcmF0b3IgICAgICA6Oj0gIkAiIGRvdHRlZF9uYW1lIFsiKCIgW3BhcmFtZXRlcl9saXN0IFsiLCJdXSAiKSJdIE5FV0xJTkVcbiAgIGRvdHRlZF9uYW1lICAgIDo6PSBpZGVudGlmaWVyICgiLiIgaWRlbnRpZmllcikqXG4gICBwYXJhbWV0ZXJfbGlzdCA6Oj0gKGRlZnBhcmFtZXRlciAiLCIpKlxuICAgICAgICAgICAgICAgICAgICAgIHwgIioiIFtwYXJhbWV0ZXJdICgiLCIgZGVmcGFyYW1ldGVyKSogWyIsIiAiKioiIHBhcmFtZXRlcl1cbiAgICAgICAgICAgICAgICAgICAgICB8ICIqKiIgcGFyYW1ldGVyXG4gICAgICAgICAgICAgICAgICAgICAgfCBkZWZwYXJhbWV0ZXIgWyIsIl0gKVxuICAgcGFyYW1ldGVyICAgICAgOjo9IGlkZW50aWZpZXIgWyI6IiBleHByZXNzaW9uXVxuICAgZGVmcGFyYW1ldGVyICAgOjo9IHBhcmFtZXRlciBbIj0iIGV4cHJlc3Npb25dXG4gICBmdW5jbmFtZSAgICAgICA6Oj0gaWRlbnRpZmllclxuXG5BIGZ1bmN0aW9uIGRlZmluaXRpb24gaXMgYW4gZXhlY3V0YWJsZSBzdGF0ZW1lbnQuICBJdHMgZXhlY3V0aW9uIGJpbmRzXG50aGUgZnVuY3Rpb24gbmFtZSBpbiB0aGUgY3VycmVudCBsb2NhbCBuYW1lc3BhY2UgdG8gYSBmdW5jdGlvbiBvYmplY3RcbihhIHdyYXBwZXIgYXJvdW5kIHRoZSBleGVjdXRhYmxlIGNvZGUgZm9yIHRoZSBmdW5jdGlvbikuICBUaGlzXG5mdW5jdGlvbiBvYmplY3QgY29udGFpbnMgYSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgZ2xvYmFsIG5hbWVzcGFjZVxuYXMgdGhlIGdsb2JhbCBuYW1lc3BhY2UgdG8gYmUgdXNlZCB3aGVuIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQuXG5cblRoZSBmdW5jdGlvbiBkZWZpbml0aW9uIGRvZXMgbm90IGV4ZWN1dGUgdGhlIGZ1bmN0aW9uIGJvZHk7IHRoaXMgZ2V0c1xuZXhlY3V0ZWQgb25seSB3aGVuIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQuIFszXVxuXG5BIGZ1bmN0aW9uIGRlZmluaXRpb24gbWF5IGJlIHdyYXBwZWQgYnkgb25lIG9yIG1vcmUgKmRlY29yYXRvcipcbmV4cHJlc3Npb25zLiBEZWNvcmF0b3IgZXhwcmVzc2lvbnMgYXJlIGV2YWx1YXRlZCB3aGVuIHRoZSBmdW5jdGlvbiBpc1xuZGVmaW5lZCwgaW4gdGhlIHNjb3BlIHRoYXQgY29udGFpbnMgdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24uICBUaGVcbnJlc3VsdCBtdXN0IGJlIGEgY2FsbGFibGUsIHdoaWNoIGlzIGludm9rZWQgd2l0aCB0aGUgZnVuY3Rpb24gb2JqZWN0XG5hcyB0aGUgb25seSBhcmd1bWVudC4gVGhlIHJldHVybmVkIHZhbHVlIGlzIGJvdW5kIHRvIHRoZSBmdW5jdGlvbiBuYW1lXG5pbnN0ZWFkIG9mIHRoZSBmdW5jdGlvbiBvYmplY3QuICBNdWx0aXBsZSBkZWNvcmF0b3JzIGFyZSBhcHBsaWVkIGluXG5uZXN0ZWQgZmFzaGlvbi4gRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgY29kZVxuXG4gICBAZjEoYXJnKVxuICAgQGYyXG4gICBkZWYgZnVuYygpOiBwYXNzXG5cbmlzIGVxdWl2YWxlbnQgdG9cblxuICAgZGVmIGZ1bmMoKTogcGFzc1xuICAgZnVuYyA9IGYxKGFyZykoZjIoZnVuYykpXG5cbldoZW4gb25lIG9yIG1vcmUgKnBhcmFtZXRlcnMqIGhhdmUgdGhlIGZvcm0gKnBhcmFtZXRlciogIj0iXG4qZXhwcmVzc2lvbiosIHRoZSBmdW5jdGlvbiBpcyBzYWlkIHRvIGhhdmUgImRlZmF1bHQgcGFyYW1ldGVyIHZhbHVlcy4iXG5Gb3IgYSBwYXJhbWV0ZXIgd2l0aCBhIGRlZmF1bHQgdmFsdWUsIHRoZSBjb3JyZXNwb25kaW5nICphcmd1bWVudCogbWF5XG5iZSBvbWl0dGVkIGZyb20gYSBjYWxsLCBpbiB3aGljaCBjYXNlIHRoZSBwYXJhbWV0ZXJcJ3MgZGVmYXVsdCB2YWx1ZSBpc1xuc3Vic3RpdHV0ZWQuICBJZiBhIHBhcmFtZXRlciBoYXMgYSBkZWZhdWx0IHZhbHVlLCBhbGwgZm9sbG93aW5nXG5wYXJhbWV0ZXJzIHVwIHVudGlsIHRoZSAiIioiIiBtdXN0IGFsc28gaGF2ZSBhIGRlZmF1bHQgdmFsdWUgLS0tIHRoaXNcbmlzIGEgc3ludGFjdGljIHJlc3RyaWN0aW9uIHRoYXQgaXMgbm90IGV4cHJlc3NlZCBieSB0aGUgZ3JhbW1hci5cblxuKipEZWZhdWx0IHBhcmFtZXRlciB2YWx1ZXMgYXJlIGV2YWx1YXRlZCBmcm9tIGxlZnQgdG8gcmlnaHQgd2hlbiB0aGVcbmZ1bmN0aW9uIGRlZmluaXRpb24gaXMgZXhlY3V0ZWQuKiogVGhpcyBtZWFucyB0aGF0IHRoZSBleHByZXNzaW9uIGlzXG5ldmFsdWF0ZWQgb25jZSwgd2hlbiB0aGUgZnVuY3Rpb24gaXMgZGVmaW5lZCwgYW5kIHRoYXQgdGhlIHNhbWUgInByZS1cbmNvbXB1dGVkIiB2YWx1ZSBpcyB1c2VkIGZvciBlYWNoIGNhbGwuICBUaGlzIGlzIGVzcGVjaWFsbHkgaW1wb3J0YW50XG50byB1bmRlcnN0YW5kIHdoZW4gYSBkZWZhdWx0IHBhcmFtZXRlciBpcyBhIG11dGFibGUgb2JqZWN0LCBzdWNoIGFzIGFcbmxpc3Qgb3IgYSBkaWN0aW9uYXJ5OiBpZiB0aGUgZnVuY3Rpb24gbW9kaWZpZXMgdGhlIG9iamVjdCAoZS5nLiBieVxuYXBwZW5kaW5nIGFuIGl0ZW0gdG8gYSBsaXN0KSwgdGhlIGRlZmF1bHQgdmFsdWUgaXMgaW4gZWZmZWN0IG1vZGlmaWVkLlxuVGhpcyBpcyBnZW5lcmFsbHkgbm90IHdoYXQgd2FzIGludGVuZGVkLiAgQSB3YXkgYXJvdW5kIHRoaXMgaXMgdG8gdXNlXG4iTm9uZSIgYXMgdGhlIGRlZmF1bHQsIGFuZCBleHBsaWNpdGx5IHRlc3QgZm9yIGl0IGluIHRoZSBib2R5IG9mIHRoZVxuZnVuY3Rpb24sIGUuZy46XG5cbiAgIGRlZiB3aGF0c19vbl90aGVfdGVsbHkocGVuZ3Vpbj1Ob25lKTpcbiAgICAgICBpZiBwZW5ndWluIGlzIE5vbmU6XG4gICAgICAgICAgIHBlbmd1aW4gPSBbXVxuICAgICAgIHBlbmd1aW4uYXBwZW5kKCJwcm9wZXJ0eSBvZiB0aGUgem9vIilcbiAgICAgICByZXR1cm4gcGVuZ3VpblxuXG5GdW5jdGlvbiBjYWxsIHNlbWFudGljcyBhcmUgZGVzY3JpYmVkIGluIG1vcmUgZGV0YWlsIGluIHNlY3Rpb25cbipDYWxscyouIEEgZnVuY3Rpb24gY2FsbCBhbHdheXMgYXNzaWducyB2YWx1ZXMgdG8gYWxsIHBhcmFtZXRlcnNcbm1lbnRpb25lZCBpbiB0aGUgcGFyYW1ldGVyIGxpc3QsIGVpdGhlciBmcm9tIHBvc2l0aW9uIGFyZ3VtZW50cywgZnJvbVxua2V5d29yZCBhcmd1bWVudHMsIG9yIGZyb20gZGVmYXVsdCB2YWx1ZXMuICBJZiB0aGUgZm9ybVxuIiIqaWRlbnRpZmllciIiIGlzIHByZXNlbnQsIGl0IGlzIGluaXRpYWxpemVkIHRvIGEgdHVwbGUgcmVjZWl2aW5nIGFueVxuZXhjZXNzIHBvc2l0aW9uYWwgcGFyYW1ldGVycywgZGVmYXVsdGluZyB0byB0aGUgZW1wdHkgdHVwbGUuICBJZiB0aGVcbmZvcm0gIiIqKmlkZW50aWZpZXIiIiBpcyBwcmVzZW50LCBpdCBpcyBpbml0aWFsaXplZCB0byBhIG5ld1xuZGljdGlvbmFyeSByZWNlaXZpbmcgYW55IGV4Y2VzcyBrZXl3b3JkIGFyZ3VtZW50cywgZGVmYXVsdGluZyB0byBhIG5ld1xuZW1wdHkgZGljdGlvbmFyeS4gUGFyYW1ldGVycyBhZnRlciAiIioiIiBvciAiIippZGVudGlmaWVyIiIgYXJlXG5rZXl3b3JkLW9ubHkgcGFyYW1ldGVycyBhbmQgbWF5IG9ubHkgYmUgcGFzc2VkIHVzZWQga2V5d29yZCBhcmd1bWVudHMuXG5cblBhcmFtZXRlcnMgbWF5IGhhdmUgYW5ub3RhdGlvbnMgb2YgdGhlIGZvcm0gIiI6IGV4cHJlc3Npb24iIiBmb2xsb3dpbmdcbnRoZSBwYXJhbWV0ZXIgbmFtZS4gIEFueSBwYXJhbWV0ZXIgbWF5IGhhdmUgYW4gYW5ub3RhdGlvbiBldmVuIHRob3NlXG5vZiB0aGUgZm9ybSAiKmlkZW50aWZpZXIiIG9yICIqKmlkZW50aWZpZXIiLiAgRnVuY3Rpb25zIG1heSBoYXZlXG4icmV0dXJuIiBhbm5vdGF0aW9uIG9mIHRoZSBmb3JtICIiLT4gZXhwcmVzc2lvbiIiIGFmdGVyIHRoZSBwYXJhbWV0ZXJcbmxpc3QuICBUaGVzZSBhbm5vdGF0aW9ucyBjYW4gYmUgYW55IHZhbGlkIFB5dGhvbiBleHByZXNzaW9uIGFuZCBhcmVcbmV2YWx1YXRlZCB3aGVuIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uIGlzIGV4ZWN1dGVkLiAgQW5ub3RhdGlvbnMgbWF5XG5iZSBldmFsdWF0ZWQgaW4gYSBkaWZmZXJlbnQgb3JkZXIgdGhhbiB0aGV5IGFwcGVhciBpbiB0aGUgc291cmNlIGNvZGUuXG5UaGUgcHJlc2VuY2Ugb2YgYW5ub3RhdGlvbnMgZG9lcyBub3QgY2hhbmdlIHRoZSBzZW1hbnRpY3Mgb2YgYVxuZnVuY3Rpb24uICBUaGUgYW5ub3RhdGlvbiB2YWx1ZXMgYXJlIGF2YWlsYWJsZSBhcyB2YWx1ZXMgb2YgYVxuZGljdGlvbmFyeSBrZXllZCBieSB0aGUgcGFyYW1ldGVyc1wnIG5hbWVzIGluIHRoZSAiX19hbm5vdGF0aW9uc19fIlxuYXR0cmlidXRlIG9mIHRoZSBmdW5jdGlvbiBvYmplY3QuXG5cbkl0IGlzIGFsc28gcG9zc2libGUgdG8gY3JlYXRlIGFub255bW91cyBmdW5jdGlvbnMgKGZ1bmN0aW9ucyBub3QgYm91bmRcbnRvIGEgbmFtZSksIGZvciBpbW1lZGlhdGUgdXNlIGluIGV4cHJlc3Npb25zLiAgVGhpcyB1c2VzIGxhbWJkYVxuZXhwcmVzc2lvbnMsIGRlc2NyaWJlZCBpbiBzZWN0aW9uICpMYW1iZGFzKi4gIE5vdGUgdGhhdCB0aGUgbGFtYmRhXG5leHByZXNzaW9uIGlzIG1lcmVseSBhIHNob3J0aGFuZCBmb3IgYSBzaW1wbGlmaWVkIGZ1bmN0aW9uIGRlZmluaXRpb247XG5hIGZ1bmN0aW9uIGRlZmluZWQgaW4gYSAiImRlZiIiIHN0YXRlbWVudCBjYW4gYmUgcGFzc2VkIGFyb3VuZCBvclxuYXNzaWduZWQgdG8gYW5vdGhlciBuYW1lIGp1c3QgbGlrZSBhIGZ1bmN0aW9uIGRlZmluZWQgYnkgYSBsYW1iZGFcbmV4cHJlc3Npb24uICBUaGUgIiJkZWYiIiBmb3JtIGlzIGFjdHVhbGx5IG1vcmUgcG93ZXJmdWwgc2luY2UgaXRcbmFsbG93cyB0aGUgZXhlY3V0aW9uIG9mIG11bHRpcGxlIHN0YXRlbWVudHMgYW5kIGFubm90YXRpb25zLlxuXG4qKlByb2dyYW1tZXJcJ3Mgbm90ZToqKiBGdW5jdGlvbnMgYXJlIGZpcnN0LWNsYXNzIG9iamVjdHMuICBBICIiZGVmIiJcbnN0YXRlbWVudCBleGVjdXRlZCBpbnNpZGUgYSBmdW5jdGlvbiBkZWZpbml0aW9uIGRlZmluZXMgYSBsb2NhbFxuZnVuY3Rpb24gdGhhdCBjYW4gYmUgcmV0dXJuZWQgb3IgcGFzc2VkIGFyb3VuZC4gIEZyZWUgdmFyaWFibGVzIHVzZWRcbmluIHRoZSBuZXN0ZWQgZnVuY3Rpb24gY2FuIGFjY2VzcyB0aGUgbG9jYWwgdmFyaWFibGVzIG9mIHRoZSBmdW5jdGlvblxuY29udGFpbmluZyB0aGUgZGVmLiAgU2VlIHNlY3Rpb24gKk5hbWluZyBhbmQgYmluZGluZyogZm9yIGRldGFpbHMuXG5cblNlZSBhbHNvOiAqKlBFUCAzMTA3KiogLSBGdW5jdGlvbiBBbm5vdGF0aW9uc1xuXG4gICAgIFRoZSBvcmlnaW5hbCBzcGVjaWZpY2F0aW9uIGZvciBmdW5jdGlvbiBhbm5vdGF0aW9ucy5cblxuXG5DbGFzcyBkZWZpbml0aW9uc1xuPT09PT09PT09PT09PT09PT1cblxuQSBjbGFzcyBkZWZpbml0aW9uIGRlZmluZXMgYSBjbGFzcyBvYmplY3QgKHNlZSBzZWN0aW9uICpUaGUgc3RhbmRhcmRcbnR5cGUgaGllcmFyY2h5Kik6XG5cbiAgIGNsYXNzZGVmICAgIDo6PSBbZGVjb3JhdG9yc10gImNsYXNzIiBjbGFzc25hbWUgW2luaGVyaXRhbmNlXSAiOiIgc3VpdGVcbiAgIGluaGVyaXRhbmNlIDo6PSAiKCIgW3BhcmFtZXRlcl9saXN0XSAiKSJcbiAgIGNsYXNzbmFtZSAgIDo6PSBpZGVudGlmaWVyXG5cbkEgY2xhc3MgZGVmaW5pdGlvbiBpcyBhbiBleGVjdXRhYmxlIHN0YXRlbWVudC4gIFRoZSBpbmhlcml0YW5jZSBsaXN0XG51c3VhbGx5IGdpdmVzIGEgbGlzdCBvZiBiYXNlIGNsYXNzZXMgKHNlZSAqQ3VzdG9taXppbmcgY2xhc3MgY3JlYXRpb24qXG5mb3IgbW9yZSBhZHZhbmNlZCB1c2VzKSwgc28gZWFjaCBpdGVtIGluIHRoZSBsaXN0IHNob3VsZCBldmFsdWF0ZSB0byBhXG5jbGFzcyBvYmplY3Qgd2hpY2ggYWxsb3dzIHN1YmNsYXNzaW5nLiAgQ2xhc3NlcyB3aXRob3V0IGFuIGluaGVyaXRhbmNlXG5saXN0IGluaGVyaXQsIGJ5IGRlZmF1bHQsIGZyb20gdGhlIGJhc2UgY2xhc3MgIm9iamVjdCI7IGhlbmNlLFxuXG4gICBjbGFzcyBGb286XG4gICAgICAgcGFzc1xuXG5pcyBlcXVpdmFsZW50IHRvXG5cbiAgIGNsYXNzIEZvbyhvYmplY3QpOlxuICAgICAgIHBhc3NcblxuVGhlIGNsYXNzXCdzIHN1aXRlIGlzIHRoZW4gZXhlY3V0ZWQgaW4gYSBuZXcgZXhlY3V0aW9uIGZyYW1lIChzZWVcbipOYW1pbmcgYW5kIGJpbmRpbmcqKSwgdXNpbmcgYSBuZXdseSBjcmVhdGVkIGxvY2FsIG5hbWVzcGFjZSBhbmQgdGhlXG5vcmlnaW5hbCBnbG9iYWwgbmFtZXNwYWNlLiAoVXN1YWxseSwgdGhlIHN1aXRlIGNvbnRhaW5zIG1vc3RseVxuZnVuY3Rpb24gZGVmaW5pdGlvbnMuKSAgV2hlbiB0aGUgY2xhc3NcJ3Mgc3VpdGUgZmluaXNoZXMgZXhlY3V0aW9uLCBpdHNcbmV4ZWN1dGlvbiBmcmFtZSBpcyBkaXNjYXJkZWQgYnV0IGl0cyBsb2NhbCBuYW1lc3BhY2UgaXMgc2F2ZWQuIFs0XSBBXG5jbGFzcyBvYmplY3QgaXMgdGhlbiBjcmVhdGVkIHVzaW5nIHRoZSBpbmhlcml0YW5jZSBsaXN0IGZvciB0aGUgYmFzZVxuY2xhc3NlcyBhbmQgdGhlIHNhdmVkIGxvY2FsIG5hbWVzcGFjZSBmb3IgdGhlIGF0dHJpYnV0ZSBkaWN0aW9uYXJ5LlxuVGhlIGNsYXNzIG5hbWUgaXMgYm91bmQgdG8gdGhpcyBjbGFzcyBvYmplY3QgaW4gdGhlIG9yaWdpbmFsIGxvY2FsXG5uYW1lc3BhY2UuXG5cbkNsYXNzIGNyZWF0aW9uIGNhbiBiZSBjdXN0b21pemVkIGhlYXZpbHkgdXNpbmcgKm1ldGFjbGFzc2VzKi5cblxuQ2xhc3NlcyBjYW4gYWxzbyBiZSBkZWNvcmF0ZWQ6IGp1c3QgbGlrZSB3aGVuIGRlY29yYXRpbmcgZnVuY3Rpb25zLFxuXG4gICBAZjEoYXJnKVxuICAgQGYyXG4gICBjbGFzcyBGb286IHBhc3NcblxuaXMgZXF1aXZhbGVudCB0b1xuXG4gICBjbGFzcyBGb286IHBhc3NcbiAgIEZvbyA9IGYxKGFyZykoZjIoRm9vKSlcblxuVGhlIGV2YWx1YXRpb24gcnVsZXMgZm9yIHRoZSBkZWNvcmF0b3IgZXhwcmVzc2lvbnMgYXJlIHRoZSBzYW1lIGFzIGZvclxuZnVuY3Rpb24gZGVjb3JhdG9ycy4gIFRoZSByZXN1bHQgbXVzdCBiZSBhIGNsYXNzIG9iamVjdCwgd2hpY2ggaXMgdGhlblxuYm91bmQgdG8gdGhlIGNsYXNzIG5hbWUuXG5cbioqUHJvZ3JhbW1lclwncyBub3RlOioqIFZhcmlhYmxlcyBkZWZpbmVkIGluIHRoZSBjbGFzcyBkZWZpbml0aW9uIGFyZVxuY2xhc3MgYXR0cmlidXRlczsgdGhleSBhcmUgc2hhcmVkIGJ5IGluc3RhbmNlcy4gIEluc3RhbmNlIGF0dHJpYnV0ZXNcbmNhbiBiZSBzZXQgaW4gYSBtZXRob2Qgd2l0aCAic2VsZi5uYW1lID0gdmFsdWUiLiAgQm90aCBjbGFzcyBhbmRcbmluc3RhbmNlIGF0dHJpYnV0ZXMgYXJlIGFjY2Vzc2libGUgdGhyb3VnaCB0aGUgbm90YXRpb24gIiJzZWxmLm5hbWUiIixcbmFuZCBhbiBpbnN0YW5jZSBhdHRyaWJ1dGUgaGlkZXMgYSBjbGFzcyBhdHRyaWJ1dGUgd2l0aCB0aGUgc2FtZSBuYW1lXG53aGVuIGFjY2Vzc2VkIGluIHRoaXMgd2F5LiAgQ2xhc3MgYXR0cmlidXRlcyBjYW4gYmUgdXNlZCBhcyBkZWZhdWx0c1xuZm9yIGluc3RhbmNlIGF0dHJpYnV0ZXMsIGJ1dCB1c2luZyBtdXRhYmxlIHZhbHVlcyB0aGVyZSBjYW4gbGVhZCB0b1xudW5leHBlY3RlZCByZXN1bHRzLiAgKkRlc2NyaXB0b3JzKiBjYW4gYmUgdXNlZCB0byBjcmVhdGUgaW5zdGFuY2VcbnZhcmlhYmxlcyB3aXRoIGRpZmZlcmVudCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLlxuXG5TZWUgYWxzbzogKipQRVAgMzExNSoqIC0gTWV0YWNsYXNzZXMgaW4gUHl0aG9uIDMgKipQRVAgMzEyOSoqIC1cbiAgQ2xhc3MgRGVjb3JhdG9yc1xuXG4tWyBGb290bm90ZXMgXS1cblxuWzFdIFRoZSBleGNlcHRpb24gaXMgcHJvcGFnYXRlZCB0byB0aGUgaW52b2NhdGlvbiBzdGFjayB1bmxlc3NcbiAgICB0aGVyZSBpcyBhICJmaW5hbGx5IiBjbGF1c2Ugd2hpY2ggaGFwcGVucyB0byByYWlzZSBhbm90aGVyXG4gICAgZXhjZXB0aW9uLiBUaGF0IG5ldyBleGNlcHRpb24gY2F1c2VzIHRoZSBvbGQgb25lIHRvIGJlIGxvc3QuXG5cblsyXSBDdXJyZW50bHksIGNvbnRyb2wgImZsb3dzIG9mZiB0aGUgZW5kIiBleGNlcHQgaW4gdGhlIGNhc2Ugb2ZcbiAgICBhbiBleGNlcHRpb24gb3IgdGhlIGV4ZWN1dGlvbiBvZiBhICJyZXR1cm4iLCAiY29udGludWUiLCBvclxuICAgICJicmVhayIgc3RhdGVtZW50LlxuXG5bM10gQSBzdHJpbmcgbGl0ZXJhbCBhcHBlYXJpbmcgYXMgdGhlIGZpcnN0IHN0YXRlbWVudCBpbiB0aGVcbiAgICBmdW5jdGlvbiBib2R5IGlzIHRyYW5zZm9ybWVkIGludG8gdGhlIGZ1bmN0aW9uXCdzICJfX2RvY19fIlxuICAgIGF0dHJpYnV0ZSBhbmQgdGhlcmVmb3JlIHRoZSBmdW5jdGlvblwncyAqZG9jc3RyaW5nKi5cblxuWzRdIEEgc3RyaW5nIGxpdGVyYWwgYXBwZWFyaW5nIGFzIHRoZSBmaXJzdCBzdGF0ZW1lbnQgaW4gdGhlIGNsYXNzXG4gICAgYm9keSBpcyB0cmFuc2Zvcm1lZCBpbnRvIHRoZSBuYW1lc3BhY2VcJ3MgIl9fZG9jX18iIGl0ZW0gYW5kXG4gICAgdGhlcmVmb3JlIHRoZSBjbGFzc1wncyAqZG9jc3RyaW5nKi5cbicsCisgJ2NvbnRleHQtbWFuYWdlcnMnOiB1J1xuV2l0aCBTdGF0ZW1lbnQgQ29udGV4dCBNYW5hZ2Vyc1xuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG5BICpjb250ZXh0IG1hbmFnZXIqIGlzIGFuIG9iamVjdCB0aGF0IGRlZmluZXMgdGhlIHJ1bnRpbWUgY29udGV4dCB0b1xuYmUgZXN0YWJsaXNoZWQgd2hlbiBleGVjdXRpbmcgYSAid2l0aCIgc3RhdGVtZW50LiBUaGUgY29udGV4dCBtYW5hZ2VyXG5oYW5kbGVzIHRoZSBlbnRyeSBpbnRvLCBhbmQgdGhlIGV4aXQgZnJvbSwgdGhlIGRlc2lyZWQgcnVudGltZSBjb250ZXh0XG5mb3IgdGhlIGV4ZWN1dGlvbiBvZiB0aGUgYmxvY2sgb2YgY29kZS4gIENvbnRleHQgbWFuYWdlcnMgYXJlIG5vcm1hbGx5XG5pbnZva2VkIHVzaW5nIHRoZSAid2l0aCIgc3RhdGVtZW50IChkZXNjcmliZWQgaW4gc2VjdGlvbiAqVGhlIHdpdGhcbnN0YXRlbWVudCopLCBidXQgY2FuIGFsc28gYmUgdXNlZCBieSBkaXJlY3RseSBpbnZva2luZyB0aGVpciBtZXRob2RzLlxuXG5UeXBpY2FsIHVzZXMgb2YgY29udGV4dCBtYW5hZ2VycyBpbmNsdWRlIHNhdmluZyBhbmQgcmVzdG9yaW5nIHZhcmlvdXNcbmtpbmRzIG9mIGdsb2JhbCBzdGF0ZSwgbG9ja2luZyBhbmQgdW5sb2NraW5nIHJlc291cmNlcywgY2xvc2luZyBvcGVuZWRcbmZpbGVzLCBldGMuXG5cbkZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGNvbnRleHQgbWFuYWdlcnMsIHNlZSAqQ29udGV4dCBNYW5hZ2VyIFR5cGVzKi5cblxub2JqZWN0Ll9fZW50ZXJfXyhzZWxmKVxuXG4gICBFbnRlciB0aGUgcnVudGltZSBjb250ZXh0IHJlbGF0ZWQgdG8gdGhpcyBvYmplY3QuIFRoZSAid2l0aCJcbiAgIHN0YXRlbWVudCB3aWxsIGJpbmQgdGhpcyBtZXRob2RcJ3MgcmV0dXJuIHZhbHVlIHRvIHRoZSB0YXJnZXQocylcbiAgIHNwZWNpZmllZCBpbiB0aGUgImFzIiBjbGF1c2Ugb2YgdGhlIHN0YXRlbWVudCwgaWYgYW55LlxuXG5vYmplY3QuX19leGl0X18oc2VsZiwgZXhjX3R5cGUsIGV4Y192YWx1ZSwgdHJhY2ViYWNrKVxuXG4gICBFeGl0IHRoZSBydW50aW1lIGNvbnRleHQgcmVsYXRlZCB0byB0aGlzIG9iamVjdC4gVGhlIHBhcmFtZXRlcnNcbiAgIGRlc2NyaWJlIHRoZSBleGNlcHRpb24gdGhhdCBjYXVzZWQgdGhlIGNvbnRleHQgdG8gYmUgZXhpdGVkLiBJZiB0aGVcbiAgIGNvbnRleHQgd2FzIGV4aXRlZCB3aXRob3V0IGFuIGV4Y2VwdGlvbiwgYWxsIHRocmVlIGFyZ3VtZW50cyB3aWxsXG4gICBiZSAiTm9uZSIuXG5cbiAgIElmIGFuIGV4Y2VwdGlvbiBpcyBzdXBwbGllZCwgYW5kIHRoZSBtZXRob2Qgd2lzaGVzIHRvIHN1cHByZXNzIHRoZVxuICAgZXhjZXB0aW9uIChpLmUuLCBwcmV2ZW50IGl0IGZyb20gYmVpbmcgcHJvcGFnYXRlZCksIGl0IHNob3VsZFxuICAgcmV0dXJuIGEgdHJ1ZSB2YWx1ZS4gT3RoZXJ3aXNlLCB0aGUgZXhjZXB0aW9uIHdpbGwgYmUgcHJvY2Vzc2VkXG4gICBub3JtYWxseSB1cG9uIGV4aXQgZnJvbSB0aGlzIG1ldGhvZC5cblxuICAgTm90ZSB0aGF0ICJfX2V4aXRfXygpIiBtZXRob2RzIHNob3VsZCBub3QgcmVyYWlzZSB0aGUgcGFzc2VkLWluXG4gICBleGNlcHRpb247IHRoaXMgaXMgdGhlIGNhbGxlclwncyByZXNwb25zaWJpbGl0eS5cblxuU2VlIGFsc286ICoqUEVQIDAzNDMqKiAtIFRoZSAid2l0aCIgc3RhdGVtZW50XG5cbiAgICAgVGhlIHNwZWNpZmljYXRpb24sIGJhY2tncm91bmQsIGFuZCBleGFtcGxlcyBmb3IgdGhlIFB5dGhvbiAid2l0aCJcbiAgICAgc3RhdGVtZW50LlxuJywKKyAnY29udGludWUnOiB1J1xuVGhlICJjb250aW51ZSIgc3RhdGVtZW50XG4qKioqKioqKioqKioqKioqKioqKioqKipcblxuICAgY29udGludWVfc3RtdCA6Oj0gImNvbnRpbnVlIlxuXG4iY29udGludWUiIG1heSBvbmx5IG9jY3VyIHN5bnRhY3RpY2FsbHkgbmVzdGVkIGluIGEgImZvciIgb3IgIndoaWxlIlxubG9vcCwgYnV0IG5vdCBuZXN0ZWQgaW4gYSBmdW5jdGlvbiBvciBjbGFzcyBkZWZpbml0aW9uIG9yICJmaW5hbGx5IlxuY2xhdXNlIHdpdGhpbiB0aGF0IGxvb3AuICBJdCBjb250aW51ZXMgd2l0aCB0aGUgbmV4dCBjeWNsZSBvZiB0aGVcbm5lYXJlc3QgZW5jbG9zaW5nIGxvb3AuXG5cbldoZW4gImNvbnRpbnVlIiBwYXNzZXMgY29udHJvbCBvdXQgb2YgYSAidHJ5IiBzdGF0ZW1lbnQgd2l0aCBhXG4iZmluYWxseSIgY2xhdXNlLCB0aGF0ICJmaW5hbGx5IiBjbGF1c2UgaXMgZXhlY3V0ZWQgYmVmb3JlIHJlYWxseVxuc3RhcnRpbmcgdGhlIG5leHQgbG9vcCBjeWNsZS5cbicsCisgJ2NvbnZlcnNpb25zJzogdSdcbkFyaXRobWV0aWMgY29udmVyc2lvbnNcbioqKioqKioqKioqKioqKioqKioqKipcblxuV2hlbiBhIGRlc2NyaXB0aW9uIG9mIGFuIGFyaXRobWV0aWMgb3BlcmF0b3IgYmVsb3cgdXNlcyB0aGUgcGhyYXNlXG4idGhlIG51bWVyaWMgYXJndW1lbnRzIGFyZSBjb252ZXJ0ZWQgdG8gYSBjb21tb24gdHlwZSwiIHRoaXMgbWVhbnNcbnRoYXQgdGhlIG9wZXJhdG9yIGltcGxlbWVudGF0aW9uIGZvciBidWlsdC1pbiB0eXBlcyB3b3JrcyBhcyBmb2xsb3dzOlxuXG4qIElmIGVpdGhlciBhcmd1bWVudCBpcyBhIGNvbXBsZXggbnVtYmVyLCB0aGUgb3RoZXIgaXMgY29udmVydGVkIHRvXG4gIGNvbXBsZXg7XG5cbiogb3RoZXJ3aXNlLCBpZiBlaXRoZXIgYXJndW1lbnQgaXMgYSBmbG9hdGluZyBwb2ludCBudW1iZXIsIHRoZVxuICBvdGhlciBpcyBjb252ZXJ0ZWQgdG8gZmxvYXRpbmcgcG9pbnQ7XG5cbiogb3RoZXJ3aXNlLCBib3RoIG11c3QgYmUgaW50ZWdlcnMgYW5kIG5vIGNvbnZlcnNpb24gaXMgbmVjZXNzYXJ5LlxuXG5Tb21lIGFkZGl0aW9uYWwgcnVsZXMgYXBwbHkgZm9yIGNlcnRhaW4gb3BlcmF0b3JzIChlLmcuLCBhIHN0cmluZyBhcyBhXG5sZWZ0IGFyZ3VtZW50IHRvIHRoZSBcJyVcJyBvcGVyYXRvcikuICBFeHRlbnNpb25zIG11c3QgZGVmaW5lIHRoZWlyIG93blxuY29udmVyc2lvbiBiZWhhdmlvci5cbicsCisgJ2N1c3RvbWl6YXRpb24nOiB1J1xuQmFzaWMgY3VzdG9taXphdGlvblxuKioqKioqKioqKioqKioqKioqKlxuXG5vYmplY3QuX19uZXdfXyhjbHNbLCAuLi5dKVxuXG4gICBDYWxsZWQgdG8gY3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIGNsYXNzICpjbHMqLiAgIl9fbmV3X18oKSIgaXMgYVxuICAgc3RhdGljIG1ldGhvZCAoc3BlY2lhbC1jYXNlZCBzbyB5b3UgbmVlZCBub3QgZGVjbGFyZSBpdCBhcyBzdWNoKVxuICAgdGhhdCB0YWtlcyB0aGUgY2xhc3Mgb2Ygd2hpY2ggYW4gaW5zdGFuY2Ugd2FzIHJlcXVlc3RlZCBhcyBpdHNcbiAgIGZpcnN0IGFyZ3VtZW50LiAgVGhlIHJlbWFpbmluZyBhcmd1bWVudHMgYXJlIHRob3NlIHBhc3NlZCB0byB0aGVcbiAgIG9iamVjdCBjb25zdHJ1Y3RvciBleHByZXNzaW9uICh0aGUgY2FsbCB0byB0aGUgY2xhc3MpLiAgVGhlIHJldHVyblxuICAgdmFsdWUgb2YgIl9fbmV3X18oKSIgc2hvdWxkIGJlIHRoZSBuZXcgb2JqZWN0IGluc3RhbmNlICh1c3VhbGx5IGFuXG4gICBpbnN0YW5jZSBvZiAqY2xzKikuXG5cbiAgIFR5cGljYWwgaW1wbGVtZW50YXRpb25zIGNyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgY2xhc3MgYnlcbiAgIGludm9raW5nIHRoZSBzdXBlcmNsYXNzXCdzICJfX25ld19fKCkiIG1ldGhvZCB1c2luZ1xuICAgInN1cGVyKGN1cnJlbnRjbGFzcywgY2xzKS5fX25ld19fKGNsc1ssIC4uLl0pIiB3aXRoIGFwcHJvcHJpYXRlXG4gICBhcmd1bWVudHMgYW5kIHRoZW4gbW9kaWZ5aW5nIHRoZSBuZXdseS1jcmVhdGVkIGluc3RhbmNlIGFzXG4gICBuZWNlc3NhcnkgYmVmb3JlIHJldHVybmluZyBpdC5cblxuICAgSWYgIl9fbmV3X18oKSIgcmV0dXJucyBhbiBpbnN0YW5jZSBvZiAqY2xzKiwgdGhlbiB0aGUgbmV3XG4gICBpbnN0YW5jZVwncyAiX19pbml0X18oKSIgbWV0aG9kIHdpbGwgYmUgaW52b2tlZCBsaWtlXG4gICAiX19pbml0X18oc2VsZlssIC4uLl0pIiwgd2hlcmUgKnNlbGYqIGlzIHRoZSBuZXcgaW5zdGFuY2UgYW5kIHRoZVxuICAgcmVtYWluaW5nIGFyZ3VtZW50cyBhcmUgdGhlIHNhbWUgYXMgd2VyZSBwYXNzZWQgdG8gIl9fbmV3X18oKSIuXG5cbiAgIElmICJfX25ld19fKCkiIGRvZXMgbm90IHJldHVybiBhbiBpbnN0YW5jZSBvZiAqY2xzKiwgdGhlbiB0aGUgbmV3XG4gICBpbnN0YW5jZVwncyAiX19pbml0X18oKSIgbWV0aG9kIHdpbGwgbm90IGJlIGludm9rZWQuXG5cbiAgICJfX25ld19fKCkiIGlzIGludGVuZGVkIG1haW5seSB0byBhbGxvdyBzdWJjbGFzc2VzIG9mIGltbXV0YWJsZVxuICAgdHlwZXMgKGxpa2UgaW50LCBzdHIsIG9yIHR1cGxlKSB0byBjdXN0b21pemUgaW5zdGFuY2UgY3JlYXRpb24uICBJdFxuICAgaXMgYWxzbyBjb21tb25seSBvdmVycmlkZGVuIGluIGN1c3RvbSBtZXRhY2xhc3NlcyBpbiBvcmRlciB0b1xuICAgY3VzdG9taXplIGNsYXNzIGNyZWF0aW9uLlxuXG5vYmplY3QuX19pbml0X18oc2VsZlssIC4uLl0pXG5cbiAgIENhbGxlZCBhZnRlciB0aGUgaW5zdGFuY2UgaGFzIGJlZW4gY3JlYXRlZCAoYnkgIl9fbmV3X18oKSIpLCBidXRcbiAgIGJlZm9yZSBpdCBpcyByZXR1cm5lZCB0byB0aGUgY2FsbGVyLiAgVGhlIGFyZ3VtZW50cyBhcmUgdGhvc2VcbiAgIHBhc3NlZCB0byB0aGUgY2xhc3MgY29uc3RydWN0b3IgZXhwcmVzc2lvbi4gIElmIGEgYmFzZSBjbGFzcyBoYXMgYW5cbiAgICJfX2luaXRfXygpIiBtZXRob2QsIHRoZSBkZXJpdmVkIGNsYXNzXCdzICJfX2luaXRfXygpIiBtZXRob2QsIGlmXG4gICBhbnksIG11c3QgZXhwbGljaXRseSBjYWxsIGl0IHRvIGVuc3VyZSBwcm9wZXIgaW5pdGlhbGl6YXRpb24gb2YgdGhlXG4gICBiYXNlIGNsYXNzIHBhcnQgb2YgdGhlIGluc3RhbmNlOyBmb3IgZXhhbXBsZTpcbiAgICJCYXNlQ2xhc3MuX19pbml0X18oc2VsZiwgW2FyZ3MuLi5dKSIuXG5cbiAgIEJlY2F1c2UgIl9fbmV3X18oKSIgYW5kICJfX2luaXRfXygpIiB3b3JrIHRvZ2V0aGVyIGluIGNvbnN0cnVjdGluZ1xuICAgb2JqZWN0cyAoIl9fbmV3X18oKSIgdG8gY3JlYXRlIGl0LCBhbmQgIl9faW5pdF9fKCkiIHRvIGN1c3RvbWlzZVxuICAgaXQpLCBubyBub24tIk5vbmUiIHZhbHVlIG1heSBiZSByZXR1cm5lZCBieSAiX19pbml0X18oKSI7IGRvaW5nIHNvXG4gICB3aWxsIGNhdXNlIGEgIlR5cGVFcnJvciIgdG8gYmUgcmFpc2VkIGF0IHJ1bnRpbWUuXG5cbm9iamVjdC5fX2RlbF9fKHNlbGYpXG5cbiAgIENhbGxlZCB3aGVuIHRoZSBpbnN0YW5jZSBpcyBhYm91dCB0byBiZSBkZXN0cm95ZWQuICBUaGlzIGlzIGFsc29cbiAgIGNhbGxlZCBhIGRlc3RydWN0b3IuICBJZiBhIGJhc2UgY2xhc3MgaGFzIGEgIl9fZGVsX18oKSIgbWV0aG9kLCB0aGVcbiAgIGRlcml2ZWQgY2xhc3NcJ3MgIl9fZGVsX18oKSIgbWV0aG9kLCBpZiBhbnksIG11c3QgZXhwbGljaXRseSBjYWxsIGl0XG4gICB0byBlbnN1cmUgcHJvcGVyIGRlbGV0aW9uIG9mIHRoZSBiYXNlIGNsYXNzIHBhcnQgb2YgdGhlIGluc3RhbmNlLlxuICAgTm90ZSB0aGF0IGl0IGlzIHBvc3NpYmxlICh0aG91Z2ggbm90IHJlY29tbWVuZGVkISkgZm9yIHRoZVxuICAgIl9fZGVsX18oKSIgbWV0aG9kIHRvIHBvc3Rwb25lIGRlc3RydWN0aW9uIG9mIHRoZSBpbnN0YW5jZSBieVxuICAgY3JlYXRpbmcgYSBuZXcgcmVmZXJlbmNlIHRvIGl0LiAgSXQgbWF5IHRoZW4gYmUgY2FsbGVkIGF0IGEgbGF0ZXJcbiAgIHRpbWUgd2hlbiB0aGlzIG5ldyByZWZlcmVuY2UgaXMgZGVsZXRlZC4gIEl0IGlzIG5vdCBndWFyYW50ZWVkIHRoYXRcbiAgICJfX2RlbF9fKCkiIG1ldGhvZHMgYXJlIGNhbGxlZCBmb3Igb2JqZWN0cyB0aGF0IHN0aWxsIGV4aXN0IHdoZW5cbiAgIHRoZSBpbnRlcnByZXRlciBleGl0cy5cblxuICAgTm90ZTogImRlbCB4IiBkb2VzblwndCBkaXJlY3RseSBjYWxsICJ4Ll9fZGVsX18oKSIgLS0tIHRoZSBmb3JtZXJcbiAgICAgZGVjcmVtZW50cyB0aGUgcmVmZXJlbmNlIGNvdW50IGZvciAieCIgYnkgb25lLCBhbmQgdGhlIGxhdHRlciBpc1xuICAgICBvbmx5IGNhbGxlZCB3aGVuICJ4IlwncyByZWZlcmVuY2UgY291bnQgcmVhY2hlcyB6ZXJvLiAgU29tZSBjb21tb25cbiAgICAgc2l0dWF0aW9ucyB0aGF0IG1heSBwcmV2ZW50IHRoZSByZWZlcmVuY2UgY291bnQgb2YgYW4gb2JqZWN0IGZyb21cbiAgICAgZ29pbmcgdG8gemVybyBpbmNsdWRlOiBjaXJjdWxhciByZWZlcmVuY2VzIGJldHdlZW4gb2JqZWN0cyAoZS5nLixcbiAgICAgYSBkb3VibHktbGlua2VkIGxpc3Qgb3IgYSB0cmVlIGRhdGEgc3RydWN0dXJlIHdpdGggcGFyZW50IGFuZFxuICAgICBjaGlsZCBwb2ludGVycyk7IGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3Qgb24gdGhlIHN0YWNrIGZyYW1lIG9mXG4gICAgIGEgZnVuY3Rpb24gdGhhdCBjYXVnaHQgYW4gZXhjZXB0aW9uICh0aGUgdHJhY2ViYWNrIHN0b3JlZCBpblxuICAgICAic3lzLmV4Y19pbmZvKClbMl0iIGtlZXBzIHRoZSBzdGFjayBmcmFtZSBhbGl2ZSk7IG9yIGEgcmVmZXJlbmNlXG4gICAgIHRvIHRoZSBvYmplY3Qgb24gdGhlIHN0YWNrIGZyYW1lIHRoYXQgcmFpc2VkIGFuIHVuaGFuZGxlZFxuICAgICBleGNlcHRpb24gaW4gaW50ZXJhY3RpdmUgbW9kZSAodGhlIHRyYWNlYmFjayBzdG9yZWQgaW5cbiAgICAgInN5cy5sYXN0X3RyYWNlYmFjayIga2VlcHMgdGhlIHN0YWNrIGZyYW1lIGFsaXZlKS4gIFRoZSBmaXJzdFxuICAgICBzaXR1YXRpb24gY2FuIG9ubHkgYmUgcmVtZWRpZWQgYnkgZXhwbGljaXRseSBicmVha2luZyB0aGUgY3ljbGVzO1xuICAgICB0aGUgc2Vjb25kIGNhbiBiZSByZXNvbHZlZCBieSBmcmVlaW5nIHRoZSByZWZlcmVuY2UgdG8gdGhlXG4gICAgIHRyYWNlYmFjayBvYmplY3Qgd2hlbiBpdCBpcyBubyBsb25nZXIgdXNlZnVsLCBhbmQgdGhlIHRoaXJkIGNhblxuICAgICBiZSByZXNvbHZlZCBieSBzdG9yaW5nICJOb25lIiBpbiAic3lzLmxhc3RfdHJhY2ViYWNrIi4gQ2lyY3VsYXJcbiAgICAgcmVmZXJlbmNlcyB3aGljaCBhcmUgZ2FyYmFnZSBhcmUgZGV0ZWN0ZWQgYW5kIGNsZWFuZWQgdXAgd2hlbiB0aGVcbiAgICAgY3ljbGljIGdhcmJhZ2UgY29sbGVjdG9yIGlzIGVuYWJsZWQgKGl0XCdzIG9uIGJ5IGRlZmF1bHQpLiBSZWZlclxuICAgICB0byB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhlICJnYyIgbW9kdWxlIGZvciBtb3JlIGluZm9ybWF0aW9uXG4gICAgIGFib3V0IHRoaXMgdG9waWMuXG5cbiAgIFdhcm5pbmc6IER1ZSB0byB0aGUgcHJlY2FyaW91cyBjaXJjdW1zdGFuY2VzIHVuZGVyIHdoaWNoXG4gICAgICJfX2RlbF9fKCkiIG1ldGhvZHMgYXJlIGludm9rZWQsIGV4Y2VwdGlvbnMgdGhhdCBvY2N1ciBkdXJpbmdcbiAgICAgdGhlaXIgZXhlY3V0aW9uIGFyZSBpZ25vcmVkLCBhbmQgYSB3YXJuaW5nIGlzIHByaW50ZWQgdG9cbiAgICAgInN5cy5zdGRlcnIiIGluc3RlYWQuIEFsc28sIHdoZW4gIl9fZGVsX18oKSIgaXMgaW52b2tlZCBpblxuICAgICByZXNwb25zZSB0byBhIG1vZHVsZSBiZWluZyBkZWxldGVkIChlLmcuLCB3aGVuIGV4ZWN1dGlvbiBvZiB0aGVcbiAgICAgcHJvZ3JhbSBpcyBkb25lKSwgb3RoZXIgZ2xvYmFscyByZWZlcmVuY2VkIGJ5IHRoZSAiX19kZWxfXygpIlxuICAgICBtZXRob2QgbWF5IGFscmVhZHkgaGF2ZSBiZWVuIGRlbGV0ZWQgb3IgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmdcbiAgICAgdG9ybiBkb3duIChlLmcuIHRoZSBpbXBvcnQgbWFjaGluZXJ5IHNodXR0aW5nIGRvd24pLiAgRm9yIHRoaXNcbiAgICAgcmVhc29uLCAiX19kZWxfXygpIiBtZXRob2RzIHNob3VsZCBkbyB0aGUgYWJzb2x1dGUgbWluaW11bSBuZWVkZWRcbiAgICAgdG8gbWFpbnRhaW4gZXh0ZXJuYWwgaW52YXJpYW50cy4gIFN0YXJ0aW5nIHdpdGggdmVyc2lvbiAxLjUsXG4gICAgIFB5dGhvbiBndWFyYW50ZWVzIHRoYXQgZ2xvYmFscyB3aG9zZSBuYW1lIGJlZ2lucyB3aXRoIGEgc2luZ2xlXG4gICAgIHVuZGVyc2NvcmUgYXJlIGRlbGV0ZWQgZnJvbSB0aGVpciBtb2R1bGUgYmVmb3JlIG90aGVyIGdsb2JhbHMgYXJlXG4gICAgIGRlbGV0ZWQ7IGlmIG5vIG90aGVyIHJlZmVyZW5jZXMgdG8gc3VjaCBnbG9iYWxzIGV4aXN0LCB0aGlzIG1heVxuICAgICBoZWxwIGluIGFzc3VyaW5nIHRoYXQgaW1wb3J0ZWQgbW9kdWxlcyBhcmUgc3RpbGwgYXZhaWxhYmxlIGF0IHRoZVxuICAgICB0aW1lIHdoZW4gdGhlICJfX2RlbF9fKCkiIG1ldGhvZCBpcyBjYWxsZWQuXG5cbm9iamVjdC5fX3JlcHJfXyhzZWxmKVxuXG4gICBDYWxsZWQgYnkgdGhlICJyZXByKCkiIGJ1aWx0LWluIGZ1bmN0aW9uIHRvIGNvbXB1dGUgdGhlICJvZmZpY2lhbCJcbiAgIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhbiBvYmplY3QuICBJZiBhdCBhbGwgcG9zc2libGUsIHRoaXNcbiAgIHNob3VsZCBsb29rIGxpa2UgYSB2YWxpZCBQeXRob24gZXhwcmVzc2lvbiB0aGF0IGNvdWxkIGJlIHVzZWQgdG9cbiAgIHJlY3JlYXRlIGFuIG9iamVjdCB3aXRoIHRoZSBzYW1lIHZhbHVlIChnaXZlbiBhbiBhcHByb3ByaWF0ZVxuICAgZW52aXJvbm1lbnQpLiAgSWYgdGhpcyBpcyBub3QgcG9zc2libGUsIGEgc3RyaW5nIG9mIHRoZSBmb3JtXG4gICAiPC4uLnNvbWUgdXNlZnVsIGRlc2NyaXB0aW9uLi4uPiIgc2hvdWxkIGJlIHJldHVybmVkLiBUaGUgcmV0dXJuXG4gICB2YWx1ZSBtdXN0IGJlIGEgc3RyaW5nIG9iamVjdC4gSWYgYSBjbGFzcyBkZWZpbmVzICJfX3JlcHJfXygpIiBidXRcbiAgIG5vdCAiX19zdHJfXygpIiwgdGhlbiAiX19yZXByX18oKSIgaXMgYWxzbyB1c2VkIHdoZW4gYW4gImluZm9ybWFsIlxuICAgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGluc3RhbmNlcyBvZiB0aGF0IGNsYXNzIGlzIHJlcXVpcmVkLlxuXG4gICBUaGlzIGlzIHR5cGljYWxseSB1c2VkIGZvciBkZWJ1Z2dpbmcsIHNvIGl0IGlzIGltcG9ydGFudCB0aGF0IHRoZVxuICAgcmVwcmVzZW50YXRpb24gaXMgaW5mb3JtYXRpb24tcmljaCBhbmQgdW5hbWJpZ3VvdXMuXG5cbm9iamVjdC5fX3N0cl9fKHNlbGYpXG5cbiAgIENhbGxlZCBieSAic3RyKG9iamVjdCkiIGFuZCB0aGUgYnVpbHQtaW4gZnVuY3Rpb25zICJmb3JtYXQoKSIgYW5kXG4gICAicHJpbnQoKSIgdG8gY29tcHV0ZSB0aGUgImluZm9ybWFsIiBvciBuaWNlbHkgcHJpbnRhYmxlIHN0cmluZ1xuICAgcmVwcmVzZW50YXRpb24gb2YgYW4gb2JqZWN0LiAgVGhlIHJldHVybiB2YWx1ZSBtdXN0IGJlIGEgKnN0cmluZypcbiAgIG9iamVjdC5cblxuICAgVGhpcyBtZXRob2QgZGlmZmVycyBmcm9tICJvYmplY3QuX19yZXByX18oKSIgaW4gdGhhdCB0aGVyZSBpcyBub1xuICAgZXhwZWN0YXRpb24gdGhhdCAiX19zdHJfXygpIiByZXR1cm4gYSB2YWxpZCBQeXRob24gZXhwcmVzc2lvbjogYVxuICAgbW9yZSBjb252ZW5pZW50IG9yIGNvbmNpc2UgcmVwcmVzZW50YXRpb24gY2FuIGJlIHVzZWQuXG5cbiAgIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGRlZmluZWQgYnkgdGhlIGJ1aWx0LWluIHR5cGUgIm9iamVjdCJcbiAgIGNhbGxzICJvYmplY3QuX19yZXByX18oKSIuXG5cbm9iamVjdC5fX2J5dGVzX18oc2VsZilcblxuICAgQ2FsbGVkIGJ5ICJieXRlcygpIiB0byBjb21wdXRlIGEgYnl0ZS1zdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW5cbiAgIG9iamVjdC4gVGhpcyBzaG91bGQgcmV0dXJuIGEgImJ5dGVzIiBvYmplY3QuXG5cbm9iamVjdC5fX2Zvcm1hdF9fKHNlbGYsIGZvcm1hdF9zcGVjKVxuXG4gICBDYWxsZWQgYnkgdGhlICJmb3JtYXQoKSIgYnVpbHQtaW4gZnVuY3Rpb24gKGFuZCBieSBleHRlbnNpb24sIHRoZVxuICAgInN0ci5mb3JtYXQoKSIgbWV0aG9kIG9mIGNsYXNzICJzdHIiKSB0byBwcm9kdWNlIGEgImZvcm1hdHRlZCJcbiAgIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhbiBvYmplY3QuIFRoZSAiZm9ybWF0X3NwZWMiIGFyZ3VtZW50IGlzIGFcbiAgIHN0cmluZyB0aGF0IGNvbnRhaW5zIGEgZGVzY3JpcHRpb24gb2YgdGhlIGZvcm1hdHRpbmcgb3B0aW9uc1xuICAgZGVzaXJlZC4gVGhlIGludGVycHJldGF0aW9uIG9mIHRoZSAiZm9ybWF0X3NwZWMiIGFyZ3VtZW50IGlzIHVwIHRvXG4gICB0aGUgdHlwZSBpbXBsZW1lbnRpbmcgIl9fZm9ybWF0X18oKSIsIGhvd2V2ZXIgbW9zdCBjbGFzc2VzIHdpbGxcbiAgIGVpdGhlciBkZWxlZ2F0ZSBmb3JtYXR0aW5nIHRvIG9uZSBvZiB0aGUgYnVpbHQtaW4gdHlwZXMsIG9yIHVzZSBhXG4gICBzaW1pbGFyIGZvcm1hdHRpbmcgb3B0aW9uIHN5bnRheC5cblxuICAgU2VlICpGb3JtYXQgU3BlY2lmaWNhdGlvbiBNaW5pLUxhbmd1YWdlKiBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGVcbiAgIHN0YW5kYXJkIGZvcm1hdHRpbmcgc3ludGF4LlxuXG4gICBUaGUgcmV0dXJuIHZhbHVlIG11c3QgYmUgYSBzdHJpbmcgb2JqZWN0LlxuXG4gICBDaGFuZ2VkIGluIHZlcnNpb24gMy40OiBUaGUgX19mb3JtYXRfXyBtZXRob2Qgb2YgIm9iamVjdCIgaXRzZWxmXG4gICByYWlzZXMgYSAiVHlwZUVycm9yIiBpZiBwYXNzZWQgYW55IG5vbi1lbXB0eSBzdHJpbmcuXG5cbm9iamVjdC5fX2x0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19sZV9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fZXFfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX25lX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ndF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fZ2VfXyhzZWxmLCBvdGhlcilcblxuICAgVGhlc2UgYXJlIHRoZSBzby1jYWxsZWQgInJpY2ggY29tcGFyaXNvbiIgbWV0aG9kcy4gVGhlXG4gICBjb3JyZXNwb25kZW5jZSBiZXR3ZWVuIG9wZXJhdG9yIHN5bWJvbHMgYW5kIG1ldGhvZCBuYW1lcyBpcyBhc1xuICAgZm9sbG93czogIng8eSIgY2FsbHMgInguX19sdF9fKHkpIiwgIng8PXkiIGNhbGxzICJ4Ll9fbGVfXyh5KSIsXG4gICAieD09eSIgY2FsbHMgInguX19lcV9fKHkpIiwgInghPXkiIGNhbGxzICJ4Ll9fbmVfXyh5KSIsICJ4PnkiIGNhbGxzXG4gICAieC5fX2d0X18oeSkiLCBhbmQgIng+PXkiIGNhbGxzICJ4Ll9fZ2VfXyh5KSIuXG5cbiAgIEEgcmljaCBjb21wYXJpc29uIG1ldGhvZCBtYXkgcmV0dXJuIHRoZSBzaW5nbGV0b24gIk5vdEltcGxlbWVudGVkIlxuICAgaWYgaXQgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBvcGVyYXRpb24gZm9yIGEgZ2l2ZW4gcGFpciBvZlxuICAgYXJndW1lbnRzLiBCeSBjb252ZW50aW9uLCAiRmFsc2UiIGFuZCAiVHJ1ZSIgYXJlIHJldHVybmVkIGZvciBhXG4gICBzdWNjZXNzZnVsIGNvbXBhcmlzb24uIEhvd2V2ZXIsIHRoZXNlIG1ldGhvZHMgY2FuIHJldHVybiBhbnkgdmFsdWUsXG4gICBzbyBpZiB0aGUgY29tcGFyaXNvbiBvcGVyYXRvciBpcyB1c2VkIGluIGEgQm9vbGVhbiBjb250ZXh0IChlLmcuLFxuICAgaW4gdGhlIGNvbmRpdGlvbiBvZiBhbiAiaWYiIHN0YXRlbWVudCksIFB5dGhvbiB3aWxsIGNhbGwgImJvb2woKSJcbiAgIG9uIHRoZSB2YWx1ZSB0byBkZXRlcm1pbmUgaWYgdGhlIHJlc3VsdCBpcyB0cnVlIG9yIGZhbHNlLlxuXG4gICBCeSBkZWZhdWx0LCAiX19uZV9fKCkiIGRlbGVnYXRlcyB0byAiX19lcV9fKCkiIGFuZCBpbnZlcnRzIHRoZVxuICAgcmVzdWx0IHVubGVzcyBpdCBpcyAiTm90SW1wbGVtZW50ZWQiLiAgVGhlcmUgYXJlIG5vIG90aGVyIGltcGxpZWRcbiAgIHJlbGF0aW9uc2hpcHMgYW1vbmcgdGhlIGNvbXBhcmlzb24gb3BlcmF0b3JzLCBmb3IgZXhhbXBsZSwgdGhlXG4gICB0cnV0aCBvZiAiKHg8eSBvciB4PT15KSIgZG9lcyBub3QgaW1wbHkgIng8PXkiLiBUbyBhdXRvbWF0aWNhbGx5XG4gICBnZW5lcmF0ZSBvcmRlcmluZyBvcGVyYXRpb25zIGZyb20gYSBzaW5nbGUgcm9vdCBvcGVyYXRpb24sIHNlZVxuICAgImZ1bmN0b29scy50b3RhbF9vcmRlcmluZygpIi5cblxuICAgU2VlIHRoZSBwYXJhZ3JhcGggb24gIl9faGFzaF9fKCkiIGZvciBzb21lIGltcG9ydGFudCBub3RlcyBvblxuICAgY3JlYXRpbmcgKmhhc2hhYmxlKiBvYmplY3RzIHdoaWNoIHN1cHBvcnQgY3VzdG9tIGNvbXBhcmlzb25cbiAgIG9wZXJhdGlvbnMgYW5kIGFyZSB1c2FibGUgYXMgZGljdGlvbmFyeSBrZXlzLlxuXG4gICBUaGVyZSBhcmUgbm8gc3dhcHBlZC1hcmd1bWVudCB2ZXJzaW9ucyBvZiB0aGVzZSBtZXRob2RzICh0byBiZSB1c2VkXG4gICB3aGVuIHRoZSBsZWZ0IGFyZ3VtZW50IGRvZXMgbm90IHN1cHBvcnQgdGhlIG9wZXJhdGlvbiBidXQgdGhlIHJpZ2h0XG4gICBhcmd1bWVudCBkb2VzKTsgcmF0aGVyLCAiX19sdF9fKCkiIGFuZCAiX19ndF9fKCkiIGFyZSBlYWNoIG90aGVyXCdzXG4gICByZWZsZWN0aW9uLCAiX19sZV9fKCkiIGFuZCAiX19nZV9fKCkiIGFyZSBlYWNoIG90aGVyXCdzIHJlZmxlY3Rpb24sXG4gICBhbmQgIl9fZXFfXygpIiBhbmQgIl9fbmVfXygpIiBhcmUgdGhlaXIgb3duIHJlZmxlY3Rpb24uIElmIHRoZVxuICAgb3BlcmFuZHMgYXJlIG9mIGRpZmZlcmVudCB0eXBlcywgYW5kIHJpZ2h0IG9wZXJhbmRcJ3MgdHlwZSBpcyBhXG4gICBkaXJlY3Qgb3IgaW5kaXJlY3Qgc3ViY2xhc3Mgb2YgdGhlIGxlZnQgb3BlcmFuZFwncyB0eXBlLCB0aGVcbiAgIHJlZmxlY3RlZCBtZXRob2Qgb2YgdGhlIHJpZ2h0IG9wZXJhbmQgaGFzIHByaW9yaXR5LCBvdGhlcndpc2UgdGhlXG4gICBsZWZ0IG9wZXJhbmRcJ3MgbWV0aG9kIGhhcyBwcmlvcml0eS4gIFZpcnR1YWwgc3ViY2xhc3NpbmcgaXMgbm90XG4gICBjb25zaWRlcmVkLlxuXG5vYmplY3QuX19oYXNoX18oc2VsZilcblxuICAgQ2FsbGVkIGJ5IGJ1aWx0LWluIGZ1bmN0aW9uICJoYXNoKCkiIGFuZCBmb3Igb3BlcmF0aW9ucyBvbiBtZW1iZXJzXG4gICBvZiBoYXNoZWQgY29sbGVjdGlvbnMgaW5jbHVkaW5nICJzZXQiLCAiZnJvemVuc2V0IiwgYW5kICJkaWN0Ii5cbiAgICJfX2hhc2hfXygpIiBzaG91bGQgcmV0dXJuIGFuIGludGVnZXIuICBUaGUgb25seSByZXF1aXJlZCBwcm9wZXJ0eVxuICAgaXMgdGhhdCBvYmplY3RzIHdoaWNoIGNvbXBhcmUgZXF1YWwgaGF2ZSB0aGUgc2FtZSBoYXNoIHZhbHVlOyBpdCBpc1xuICAgYWR2aXNlZCB0byBzb21laG93IG1peCB0b2dldGhlciAoZS5nLiB1c2luZyBleGNsdXNpdmUgb3IpIHRoZSBoYXNoXG4gICB2YWx1ZXMgZm9yIHRoZSBjb21wb25lbnRzIG9mIHRoZSBvYmplY3QgdGhhdCBhbHNvIHBsYXkgYSBwYXJ0IGluXG4gICBjb21wYXJpc29uIG9mIG9iamVjdHMuXG5cbiAgIE5vdGU6ICJoYXNoKCkiIHRydW5jYXRlcyB0aGUgdmFsdWUgcmV0dXJuZWQgZnJvbSBhbiBvYmplY3RcJ3NcbiAgICAgY3VzdG9tICJfX2hhc2hfXygpIiBtZXRob2QgdG8gdGhlIHNpemUgb2YgYSAiUHlfc3NpemVfdCIuICBUaGlzXG4gICAgIGlzIHR5cGljYWxseSA4IGJ5dGVzIG9uIDY0LWJpdCBidWlsZHMgYW5kIDQgYnl0ZXMgb24gMzItYml0XG4gICAgIGJ1aWxkcy4gSWYgYW4gb2JqZWN0XCdzICAgIl9faGFzaF9fKCkiIG11c3QgaW50ZXJvcGVyYXRlIG9uIGJ1aWxkc1xuICAgICBvZiBkaWZmZXJlbnQgYml0IHNpemVzLCBiZSBzdXJlIHRvIGNoZWNrIHRoZSB3aWR0aCBvbiBhbGxcbiAgICAgc3VwcG9ydGVkIGJ1aWxkcy4gIEFuIGVhc3kgd2F5IHRvIGRvIHRoaXMgaXMgd2l0aCAicHl0aG9uIC1jXG4gICAgICJpbXBvcnQgc3lzOyBwcmludChzeXMuaGFzaF9pbmZvLndpZHRoKSIiLlxuXG4gICBJZiBhIGNsYXNzIGRvZXMgbm90IGRlZmluZSBhbiAiX19lcV9fKCkiIG1ldGhvZCBpdCBzaG91bGQgbm90XG4gICBkZWZpbmUgYSAiX19oYXNoX18oKSIgb3BlcmF0aW9uIGVpdGhlcjsgaWYgaXQgZGVmaW5lcyAiX19lcV9fKCkiXG4gICBidXQgbm90ICJfX2hhc2hfXygpIiwgaXRzIGluc3RhbmNlcyB3aWxsIG5vdCBiZSB1c2FibGUgYXMgaXRlbXMgaW5cbiAgIGhhc2hhYmxlIGNvbGxlY3Rpb25zLiAgSWYgYSBjbGFzcyBkZWZpbmVzIG11dGFibGUgb2JqZWN0cyBhbmRcbiAgIGltcGxlbWVudHMgYW4gIl9fZXFfXygpIiBtZXRob2QsIGl0IHNob3VsZCBub3QgaW1wbGVtZW50XG4gICAiX19oYXNoX18oKSIsIHNpbmNlIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBoYXNoYWJsZSBjb2xsZWN0aW9uc1xuICAgcmVxdWlyZXMgdGhhdCBhIGtleVwncyBoYXNoIHZhbHVlIGlzIGltbXV0YWJsZSAoaWYgdGhlIG9iamVjdFwncyBoYXNoXG4gICB2YWx1ZSBjaGFuZ2VzLCBpdCB3aWxsIGJlIGluIHRoZSB3cm9uZyBoYXNoIGJ1Y2tldCkuXG5cbiAgIFVzZXItZGVmaW5lZCBjbGFzc2VzIGhhdmUgIl9fZXFfXygpIiBhbmQgIl9faGFzaF9fKCkiIG1ldGhvZHMgYnlcbiAgIGRlZmF1bHQ7IHdpdGggdGhlbSwgYWxsIG9iamVjdHMgY29tcGFyZSB1bmVxdWFsIChleGNlcHQgd2l0aFxuICAgdGhlbXNlbHZlcykgYW5kICJ4Ll9faGFzaF9fKCkiIHJldHVybnMgYW4gYXBwcm9wcmlhdGUgdmFsdWUgc3VjaFxuICAgdGhhdCAieCA9PSB5IiBpbXBsaWVzIGJvdGggdGhhdCAieCBpcyB5IiBhbmQgImhhc2goeCkgPT0gaGFzaCh5KSIuXG5cbiAgIEEgY2xhc3MgdGhhdCBvdmVycmlkZXMgIl9fZXFfXygpIiBhbmQgZG9lcyBub3QgZGVmaW5lICJfX2hhc2hfXygpIlxuICAgd2lsbCBoYXZlIGl0cyAiX19oYXNoX18oKSIgaW1wbGljaXRseSBzZXQgdG8gIk5vbmUiLiAgV2hlbiB0aGVcbiAgICJfX2hhc2hfXygpIiBtZXRob2Qgb2YgYSBjbGFzcyBpcyAiTm9uZSIsIGluc3RhbmNlcyBvZiB0aGUgY2xhc3NcbiAgIHdpbGwgcmFpc2UgYW4gYXBwcm9wcmlhdGUgIlR5cGVFcnJvciIgd2hlbiBhIHByb2dyYW0gYXR0ZW1wdHMgdG9cbiAgIHJldHJpZXZlIHRoZWlyIGhhc2ggdmFsdWUsIGFuZCB3aWxsIGFsc28gYmUgY29ycmVjdGx5IGlkZW50aWZpZWQgYXNcbiAgIHVuaGFzaGFibGUgd2hlbiBjaGVja2luZyAiaXNpbnN0YW5jZShvYmosIGNvbGxlY3Rpb25zLkhhc2hhYmxlKSIuXG5cbiAgIElmIGEgY2xhc3MgdGhhdCBvdmVycmlkZXMgIl9fZXFfXygpIiBuZWVkcyB0byByZXRhaW4gdGhlXG4gICBpbXBsZW1lbnRhdGlvbiBvZiAiX19oYXNoX18oKSIgZnJvbSBhIHBhcmVudCBjbGFzcywgdGhlIGludGVycHJldGVyXG4gICBtdXN0IGJlIHRvbGQgdGhpcyBleHBsaWNpdGx5IGJ5IHNldHRpbmcgIl9faGFzaF9fID1cbiAgIDxQYXJlbnRDbGFzcz4uX19oYXNoX18iLlxuXG4gICBJZiBhIGNsYXNzIHRoYXQgZG9lcyBub3Qgb3ZlcnJpZGUgIl9fZXFfXygpIiB3aXNoZXMgdG8gc3VwcHJlc3NcbiAgIGhhc2ggc3VwcG9ydCwgaXQgc2hvdWxkIGluY2x1ZGUgIl9faGFzaF9fID0gTm9uZSIgaW4gdGhlIGNsYXNzXG4gICBkZWZpbml0aW9uLiBBIGNsYXNzIHdoaWNoIGRlZmluZXMgaXRzIG93biAiX19oYXNoX18oKSIgdGhhdFxuICAgZXhwbGljaXRseSByYWlzZXMgYSAiVHlwZUVycm9yIiB3b3VsZCBiZSBpbmNvcnJlY3RseSBpZGVudGlmaWVkIGFzXG4gICBoYXNoYWJsZSBieSBhbiAiaXNpbnN0YW5jZShvYmosIGNvbGxlY3Rpb25zLkhhc2hhYmxlKSIgY2FsbC5cblxuICAgTm90ZTogQnkgZGVmYXVsdCwgdGhlICJfX2hhc2hfXygpIiB2YWx1ZXMgb2Ygc3RyLCBieXRlcyBhbmRcbiAgICAgZGF0ZXRpbWUgb2JqZWN0cyBhcmUgInNhbHRlZCIgd2l0aCBhbiB1bnByZWRpY3RhYmxlIHJhbmRvbSB2YWx1ZS5cbiAgICAgQWx0aG91Z2ggdGhleSByZW1haW4gY29uc3RhbnQgd2l0aGluIGFuIGluZGl2aWR1YWwgUHl0aG9uXG4gICAgIHByb2Nlc3MsIHRoZXkgYXJlIG5vdCBwcmVkaWN0YWJsZSBiZXR3ZWVuIHJlcGVhdGVkIGludm9jYXRpb25zIG9mXG4gICAgIFB5dGhvbi5UaGlzIGlzIGludGVuZGVkIHRvIHByb3ZpZGUgcHJvdGVjdGlvbiBhZ2FpbnN0IGEgZGVuaWFsLVxuICAgICBvZi1zZXJ2aWNlIGNhdXNlZCBieSBjYXJlZnVsbHktY2hvc2VuIGlucHV0cyB0aGF0IGV4cGxvaXQgdGhlXG4gICAgIHdvcnN0IGNhc2UgcGVyZm9ybWFuY2Ugb2YgYSBkaWN0IGluc2VydGlvbiwgTyhuXjIpIGNvbXBsZXhpdHkuXG4gICAgIFNlZSBodHRwOi8vd3d3Lm9jZXJ0Lm9yZy9hZHZpc29yaWVzL29jZXJ0LTIwMTEtMDAzLmh0bWwgZm9yXG4gICAgIGRldGFpbHMuQ2hhbmdpbmcgaGFzaCB2YWx1ZXMgYWZmZWN0cyB0aGUgaXRlcmF0aW9uIG9yZGVyIG9mXG4gICAgIGRpY3RzLCBzZXRzIGFuZCBvdGhlciBtYXBwaW5ncy4gIFB5dGhvbiBoYXMgbmV2ZXIgbWFkZSBndWFyYW50ZWVzXG4gICAgIGFib3V0IHRoaXMgb3JkZXJpbmcgKGFuZCBpdCB0eXBpY2FsbHkgdmFyaWVzIGJldHdlZW4gMzItYml0IGFuZFxuICAgICA2NC1iaXQgYnVpbGRzKS5TZWUgYWxzbyAiUFlUSE9OSEFTSFNFRUQiLlxuXG4gICBDaGFuZ2VkIGluIHZlcnNpb24gMy4zOiBIYXNoIHJhbmRvbWl6YXRpb24gaXMgZW5hYmxlZCBieSBkZWZhdWx0LlxuXG5vYmplY3QuX19ib29sX18oc2VsZilcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCB0cnV0aCB2YWx1ZSB0ZXN0aW5nIGFuZCB0aGUgYnVpbHQtaW4gb3BlcmF0aW9uXG4gICAiYm9vbCgpIjsgc2hvdWxkIHJldHVybiAiRmFsc2UiIG9yICJUcnVlIi4gIFdoZW4gdGhpcyBtZXRob2QgaXMgbm90XG4gICBkZWZpbmVkLCAiX19sZW5fXygpIiBpcyBjYWxsZWQsIGlmIGl0IGlzIGRlZmluZWQsIGFuZCB0aGUgb2JqZWN0IGlzXG4gICBjb25zaWRlcmVkIHRydWUgaWYgaXRzIHJlc3VsdCBpcyBub256ZXJvLiAgSWYgYSBjbGFzcyBkZWZpbmVzXG4gICBuZWl0aGVyICJfX2xlbl9fKCkiIG5vciAiX19ib29sX18oKSIsIGFsbCBpdHMgaW5zdGFuY2VzIGFyZVxuICAgY29uc2lkZXJlZCB0cnVlLlxuJywKKyAnZGVidWdnZXInOiB1J1xuInBkYiIgLS0tIFRoZSBQeXRob24gRGVidWdnZXJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cbioqU291cmNlIGNvZGU6KiogTGliL3BkYi5weVxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cblRoZSBtb2R1bGUgInBkYiIgZGVmaW5lcyBhbiBpbnRlcmFjdGl2ZSBzb3VyY2UgY29kZSBkZWJ1Z2dlciBmb3JcblB5dGhvbiBwcm9ncmFtcy4gIEl0IHN1cHBvcnRzIHNldHRpbmcgKGNvbmRpdGlvbmFsKSBicmVha3BvaW50cyBhbmRcbnNpbmdsZSBzdGVwcGluZyBhdCB0aGUgc291cmNlIGxpbmUgbGV2ZWwsIGluc3BlY3Rpb24gb2Ygc3RhY2sgZnJhbWVzLFxuc291cmNlIGNvZGUgbGlzdGluZywgYW5kIGV2YWx1YXRpb24gb2YgYXJiaXRyYXJ5IFB5dGhvbiBjb2RlIGluIHRoZVxuY29udGV4dCBvZiBhbnkgc3RhY2sgZnJhbWUuICBJdCBhbHNvIHN1cHBvcnRzIHBvc3QtbW9ydGVtIGRlYnVnZ2luZ1xuYW5kIGNhbiBiZSBjYWxsZWQgdW5kZXIgcHJvZ3JhbSBjb250cm9sLlxuXG5UaGUgZGVidWdnZXIgaXMgZXh0ZW5zaWJsZSAtLSBpdCBpcyBhY3R1YWxseSBkZWZpbmVkIGFzIHRoZSBjbGFzc1xuIlBkYiIuIFRoaXMgaXMgY3VycmVudGx5IHVuZG9jdW1lbnRlZCBidXQgZWFzaWx5IHVuZGVyc3Rvb2QgYnkgcmVhZGluZ1xudGhlIHNvdXJjZS4gIFRoZSBleHRlbnNpb24gaW50ZXJmYWNlIHVzZXMgdGhlIG1vZHVsZXMgImJkYiIgYW5kICJjbWQiLlxuXG5UaGUgZGVidWdnZXJcJ3MgcHJvbXB0IGlzICIoUGRiKSIuIFR5cGljYWwgdXNhZ2UgdG8gcnVuIGEgcHJvZ3JhbSB1bmRlclxuY29udHJvbCBvZiB0aGUgZGVidWdnZXIgaXM6XG5cbiAgID4+PiBpbXBvcnQgcGRiXG4gICA+Pj4gaW1wb3J0IG15bW9kdWxlXG4gICA+Pj4gcGRiLnJ1bihcJ215bW9kdWxlLnRlc3QoKVwnKVxuICAgPiA8c3RyaW5nPigwKT8oKVxuICAgKFBkYikgY29udGludWVcbiAgID4gPHN0cmluZz4oMSk/KClcbiAgIChQZGIpIGNvbnRpbnVlXG4gICBOYW1lRXJyb3I6IFwnc3BhbVwnXG4gICA+IDxzdHJpbmc+KDEpPygpXG4gICAoUGRiKVxuXG5DaGFuZ2VkIGluIHZlcnNpb24gMy4zOiBUYWItY29tcGxldGlvbiB2aWEgdGhlICJyZWFkbGluZSIgbW9kdWxlIGlzXG5hdmFpbGFibGUgZm9yIGNvbW1hbmRzIGFuZCBjb21tYW5kIGFyZ3VtZW50cywgZS5nLiB0aGUgY3VycmVudCBnbG9iYWxcbmFuZCBsb2NhbCBuYW1lcyBhcmUgb2ZmZXJlZCBhcyBhcmd1bWVudHMgb2YgdGhlICJwIiBjb21tYW5kLlxuXG4icGRiLnB5IiBjYW4gYWxzbyBiZSBpbnZva2VkIGFzIGEgc2NyaXB0IHRvIGRlYnVnIG90aGVyIHNjcmlwdHMuICBGb3JcbmV4YW1wbGU6XG5cbiAgIHB5dGhvbjMgLW0gcGRiIG15c2NyaXB0LnB5XG5cbldoZW4gaW52b2tlZCBhcyBhIHNjcmlwdCwgcGRiIHdpbGwgYXV0b21hdGljYWxseSBlbnRlciBwb3N0LW1vcnRlbVxuZGVidWdnaW5nIGlmIHRoZSBwcm9ncmFtIGJlaW5nIGRlYnVnZ2VkIGV4aXRzIGFibm9ybWFsbHkuICBBZnRlciBwb3N0LVxubW9ydGVtIGRlYnVnZ2luZyAob3IgYWZ0ZXIgbm9ybWFsIGV4aXQgb2YgdGhlIHByb2dyYW0pLCBwZGIgd2lsbFxucmVzdGFydCB0aGUgcHJvZ3JhbS4gIEF1dG9tYXRpYyByZXN0YXJ0aW5nIHByZXNlcnZlcyBwZGJcJ3Mgc3RhdGUgKHN1Y2hcbmFzIGJyZWFrcG9pbnRzKSBhbmQgaW4gbW9zdCBjYXNlcyBpcyBtb3JlIHVzZWZ1bCB0aGFuIHF1aXR0aW5nIHRoZVxuZGVidWdnZXIgdXBvbiBwcm9ncmFtXCdzIGV4aXQuXG5cbk5ldyBpbiB2ZXJzaW9uIDMuMjogInBkYi5weSIgbm93IGFjY2VwdHMgYSAiLWMiIG9wdGlvbiB0aGF0IGV4ZWN1dGVzXG5jb21tYW5kcyBhcyBpZiBnaXZlbiBpbiBhICIucGRicmMiIGZpbGUsIHNlZSAqRGVidWdnZXIgQ29tbWFuZHMqLlxuXG5UaGUgdHlwaWNhbCB1c2FnZSB0byBicmVhayBpbnRvIHRoZSBkZWJ1Z2dlciBmcm9tIGEgcnVubmluZyBwcm9ncmFtIGlzXG50byBpbnNlcnRcblxuICAgaW1wb3J0IHBkYjsgcGRiLnNldF90cmFjZSgpXG5cbmF0IHRoZSBsb2NhdGlvbiB5b3Ugd2FudCB0byBicmVhayBpbnRvIHRoZSBkZWJ1Z2dlci4gIFlvdSBjYW4gdGhlblxuc3RlcCB0aHJvdWdoIHRoZSBjb2RlIGZvbGxvd2luZyB0aGlzIHN0YXRlbWVudCwgYW5kIGNvbnRpbnVlIHJ1bm5pbmdcbndpdGhvdXQgdGhlIGRlYnVnZ2VyIHVzaW5nIHRoZSAiY29udGludWUiIGNvbW1hbmQuXG5cblRoZSB0eXBpY2FsIHVzYWdlIHRvIGluc3BlY3QgYSBjcmFzaGVkIHByb2dyYW0gaXM6XG5cbiAgID4+PiBpbXBvcnQgcGRiXG4gICA+Pj4gaW1wb3J0IG15bW9kdWxlXG4gICA+Pj4gbXltb2R1bGUudGVzdCgpXG4gICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6XG4gICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDEsIGluID9cbiAgICAgRmlsZSAiLi9teW1vZHVsZS5weSIsIGxpbmUgNCwgaW4gdGVzdFxuICAgICAgIHRlc3QyKClcbiAgICAgRmlsZSAiLi9teW1vZHVsZS5weSIsIGxpbmUgMywgaW4gdGVzdDJcbiAgICAgICBwcmludChzcGFtKVxuICAgTmFtZUVycm9yOiBzcGFtXG4gICA+Pj4gcGRiLnBtKClcbiAgID4gLi9teW1vZHVsZS5weSgzKXRlc3QyKClcbiAgIC0+IHByaW50KHNwYW0pXG4gICAoUGRiKVxuXG5UaGUgbW9kdWxlIGRlZmluZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM7IGVhY2ggZW50ZXJzIHRoZSBkZWJ1Z2dlclxuaW4gYSBzbGlnaHRseSBkaWZmZXJlbnQgd2F5OlxuXG5wZGIucnVuKHN0YXRlbWVudCwgZ2xvYmFscz1Ob25lLCBsb2NhbHM9Tm9uZSlcblxuICAgRXhlY3V0ZSB0aGUgKnN0YXRlbWVudCogKGdpdmVuIGFzIGEgc3RyaW5nIG9yIGEgY29kZSBvYmplY3QpIHVuZGVyXG4gICBkZWJ1Z2dlciBjb250cm9sLiAgVGhlIGRlYnVnZ2VyIHByb21wdCBhcHBlYXJzIGJlZm9yZSBhbnkgY29kZSBpc1xuICAgZXhlY3V0ZWQ7IHlvdSBjYW4gc2V0IGJyZWFrcG9pbnRzIGFuZCB0eXBlICJjb250aW51ZSIsIG9yIHlvdSBjYW5cbiAgIHN0ZXAgdGhyb3VnaCB0aGUgc3RhdGVtZW50IHVzaW5nICJzdGVwIiBvciAibmV4dCIgKGFsbCB0aGVzZVxuICAgY29tbWFuZHMgYXJlIGV4cGxhaW5lZCBiZWxvdykuICBUaGUgb3B0aW9uYWwgKmdsb2JhbHMqIGFuZCAqbG9jYWxzKlxuICAgYXJndW1lbnRzIHNwZWNpZnkgdGhlIGVudmlyb25tZW50IGluIHdoaWNoIHRoZSBjb2RlIGlzIGV4ZWN1dGVkOyBieVxuICAgZGVmYXVsdCB0aGUgZGljdGlvbmFyeSBvZiB0aGUgbW9kdWxlICJfX21haW5fXyIgaXMgdXNlZC4gIChTZWUgdGhlXG4gICBleHBsYW5hdGlvbiBvZiB0aGUgYnVpbHQtaW4gImV4ZWMoKSIgb3IgImV2YWwoKSIgZnVuY3Rpb25zLilcblxucGRiLnJ1bmV2YWwoZXhwcmVzc2lvbiwgZ2xvYmFscz1Ob25lLCBsb2NhbHM9Tm9uZSlcblxuICAgRXZhbHVhdGUgdGhlICpleHByZXNzaW9uKiAoZ2l2ZW4gYXMgYSBzdHJpbmcgb3IgYSBjb2RlIG9iamVjdClcbiAgIHVuZGVyIGRlYnVnZ2VyIGNvbnRyb2wuICBXaGVuICJydW5ldmFsKCkiIHJldHVybnMsIGl0IHJldHVybnMgdGhlXG4gICB2YWx1ZSBvZiB0aGUgZXhwcmVzc2lvbi4gIE90aGVyd2lzZSB0aGlzIGZ1bmN0aW9uIGlzIHNpbWlsYXIgdG9cbiAgICJydW4oKSIuXG5cbnBkYi5ydW5jYWxsKGZ1bmN0aW9uLCAqYXJncywgKiprd2RzKVxuXG4gICBDYWxsIHRoZSAqZnVuY3Rpb24qIChhIGZ1bmN0aW9uIG9yIG1ldGhvZCBvYmplY3QsIG5vdCBhIHN0cmluZylcbiAgIHdpdGggdGhlIGdpdmVuIGFyZ3VtZW50cy4gIFdoZW4gInJ1bmNhbGwoKSIgcmV0dXJucywgaXQgcmV0dXJuc1xuICAgd2hhdGV2ZXIgdGhlIGZ1bmN0aW9uIGNhbGwgcmV0dXJuZWQuICBUaGUgZGVidWdnZXIgcHJvbXB0IGFwcGVhcnNcbiAgIGFzIHNvb24gYXMgdGhlIGZ1bmN0aW9uIGlzIGVudGVyZWQuXG5cbnBkYi5zZXRfdHJhY2UoKVxuXG4gICBFbnRlciB0aGUgZGVidWdnZXIgYXQgdGhlIGNhbGxpbmcgc3RhY2sgZnJhbWUuICBUaGlzIGlzIHVzZWZ1bCB0b1xuICAgaGFyZC1jb2RlIGEgYnJlYWtwb2ludCBhdCBhIGdpdmVuIHBvaW50IGluIGEgcHJvZ3JhbSwgZXZlbiBpZiB0aGVcbiAgIGNvZGUgaXMgbm90IG90aGVyd2lzZSBiZWluZyBkZWJ1Z2dlZCAoZS5nLiB3aGVuIGFuIGFzc2VydGlvblxuICAgZmFpbHMpLlxuXG5wZGIucG9zdF9tb3J0ZW0odHJhY2ViYWNrPU5vbmUpXG5cbiAgIEVudGVyIHBvc3QtbW9ydGVtIGRlYnVnZ2luZyBvZiB0aGUgZ2l2ZW4gKnRyYWNlYmFjayogb2JqZWN0LiAgSWYgbm9cbiAgICp0cmFjZWJhY2sqIGlzIGdpdmVuLCBpdCB1c2VzIHRoZSBvbmUgb2YgdGhlIGV4Y2VwdGlvbiB0aGF0IGlzXG4gICBjdXJyZW50bHkgYmVpbmcgaGFuZGxlZCAoYW4gZXhjZXB0aW9uIG11c3QgYmUgYmVpbmcgaGFuZGxlZCBpZiB0aGVcbiAgIGRlZmF1bHQgaXMgdG8gYmUgdXNlZCkuXG5cbnBkYi5wbSgpXG5cbiAgIEVudGVyIHBvc3QtbW9ydGVtIGRlYnVnZ2luZyBvZiB0aGUgdHJhY2ViYWNrIGZvdW5kIGluXG4gICAic3lzLmxhc3RfdHJhY2ViYWNrIi5cblxuVGhlICJydW4qIiBmdW5jdGlvbnMgYW5kICJzZXRfdHJhY2UoKSIgYXJlIGFsaWFzZXMgZm9yIGluc3RhbnRpYXRpbmdcbnRoZSAiUGRiIiBjbGFzcyBhbmQgY2FsbGluZyB0aGUgbWV0aG9kIG9mIHRoZSBzYW1lIG5hbWUuICBJZiB5b3Ugd2FudFxudG8gYWNjZXNzIGZ1cnRoZXIgZmVhdHVyZXMsIHlvdSBoYXZlIHRvIGRvIHRoaXMgeW91cnNlbGY6XG5cbmNsYXNzIGNsYXNzIHBkYi5QZGIoY29tcGxldGVrZXk9XCd0YWJcJywgc3RkaW49Tm9uZSwgc3Rkb3V0PU5vbmUsIHNraXA9Tm9uZSwgbm9zaWdpbnQ9RmFsc2UpXG5cbiAgICJQZGIiIGlzIHRoZSBkZWJ1Z2dlciBjbGFzcy5cblxuICAgVGhlICpjb21wbGV0ZWtleSosICpzdGRpbiogYW5kICpzdGRvdXQqIGFyZ3VtZW50cyBhcmUgcGFzc2VkIHRvIHRoZVxuICAgdW5kZXJseWluZyAiY21kLkNtZCIgY2xhc3M7IHNlZSB0aGUgZGVzY3JpcHRpb24gdGhlcmUuXG5cbiAgIFRoZSAqc2tpcCogYXJndW1lbnQsIGlmIGdpdmVuLCBtdXN0IGJlIGFuIGl0ZXJhYmxlIG9mIGdsb2Itc3R5bGVcbiAgIG1vZHVsZSBuYW1lIHBhdHRlcm5zLiAgVGhlIGRlYnVnZ2VyIHdpbGwgbm90IHN0ZXAgaW50byBmcmFtZXMgdGhhdFxuICAgb3JpZ2luYXRlIGluIGEgbW9kdWxlIHRoYXQgbWF0Y2hlcyBvbmUgb2YgdGhlc2UgcGF0dGVybnMuIFsxXVxuXG4gICBCeSBkZWZhdWx0LCBQZGIgc2V0cyBhIGhhbmRsZXIgZm9yIHRoZSBTSUdJTlQgc2lnbmFsICh3aGljaCBpcyBzZW50XG4gICB3aGVuIHRoZSB1c2VyIHByZXNzZXMgIkN0cmwtQyIgb24gdGhlIGNvbnNvbGUpIHdoZW4geW91IGdpdmUgYVxuICAgImNvbnRpbnVlIiBjb21tYW5kLiBUaGlzIGFsbG93cyB5b3UgdG8gYnJlYWsgaW50byB0aGUgZGVidWdnZXJcbiAgIGFnYWluIGJ5IHByZXNzaW5nICJDdHJsLUMiLiAgSWYgeW91IHdhbnQgUGRiIG5vdCB0byB0b3VjaCB0aGVcbiAgIFNJR0lOVCBoYW5kbGVyLCBzZXQgKm5vc2lnaW50KiB0b3QgdHJ1ZS5cblxuICAgRXhhbXBsZSBjYWxsIHRvIGVuYWJsZSB0cmFjaW5nIHdpdGggKnNraXAqOlxuXG4gICAgICBpbXBvcnQgcGRiOyBwZGIuUGRiKHNraXA9W1wnZGphbmdvLipcJ10pLnNldF90cmFjZSgpXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDMuMTogVGhlICpza2lwKiBhcmd1bWVudC5cblxuICAgTmV3IGluIHZlcnNpb24gMy4yOiBUaGUgKm5vc2lnaW50KiBhcmd1bWVudC4gIFByZXZpb3VzbHksIGEgU0lHSU5UXG4gICBoYW5kbGVyIHdhcyBuZXZlciBzZXQgYnkgUGRiLlxuXG4gICBydW4oc3RhdGVtZW50LCBnbG9iYWxzPU5vbmUsIGxvY2Fscz1Ob25lKVxuICAgcnVuZXZhbChleHByZXNzaW9uLCBnbG9iYWxzPU5vbmUsIGxvY2Fscz1Ob25lKVxuICAgcnVuY2FsbChmdW5jdGlvbiwgKmFyZ3MsICoqa3dkcylcbiAgIHNldF90cmFjZSgpXG5cbiAgICAgIFNlZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIGZ1bmN0aW9ucyBleHBsYWluZWQgYWJvdmUuXG5cblxuRGVidWdnZXIgQ29tbWFuZHNcbj09PT09PT09PT09PT09PT09XG5cblRoZSBjb21tYW5kcyByZWNvZ25pemVkIGJ5IHRoZSBkZWJ1Z2dlciBhcmUgbGlzdGVkIGJlbG93LiAgTW9zdFxuY29tbWFuZHMgY2FuIGJlIGFiYnJldmlhdGVkIHRvIG9uZSBvciB0d28gbGV0dGVycyBhcyBpbmRpY2F0ZWQ7IGUuZy5cbiJoKGVscCkiIG1lYW5zIHRoYXQgZWl0aGVyICJoIiBvciAiaGVscCIgY2FuIGJlIHVzZWQgdG8gZW50ZXIgdGhlIGhlbHBcbmNvbW1hbmQgKGJ1dCBub3QgImhlIiBvciAiaGVsIiwgbm9yICJIIiBvciAiSGVscCIgb3IgIkhFTFAiKS5cbkFyZ3VtZW50cyB0byBjb21tYW5kcyBtdXN0IGJlIHNlcGFyYXRlZCBieSB3aGl0ZXNwYWNlIChzcGFjZXMgb3JcbnRhYnMpLiAgT3B0aW9uYWwgYXJndW1lbnRzIGFyZSBlbmNsb3NlZCBpbiBzcXVhcmUgYnJhY2tldHMgKCJbXSIpIGluXG50aGUgY29tbWFuZCBzeW50YXg7IHRoZSBzcXVhcmUgYnJhY2tldHMgbXVzdCBub3QgYmUgdHlwZWQuXG5BbHRlcm5hdGl2ZXMgaW4gdGhlIGNvbW1hbmQgc3ludGF4IGFyZSBzZXBhcmF0ZWQgYnkgYSB2ZXJ0aWNhbCBiYXJcbigifCIpLlxuXG5FbnRlcmluZyBhIGJsYW5rIGxpbmUgcmVwZWF0cyB0aGUgbGFzdCBjb21tYW5kIGVudGVyZWQuICBFeGNlcHRpb246IGlmXG50aGUgbGFzdCBjb21tYW5kIHdhcyBhICJsaXN0IiBjb21tYW5kLCB0aGUgbmV4dCAxMSBsaW5lcyBhcmUgbGlzdGVkLlxuXG5Db21tYW5kcyB0aGF0IHRoZSBkZWJ1Z2dlciBkb2VzblwndCByZWNvZ25pemUgYXJlIGFzc3VtZWQgdG8gYmUgUHl0aG9uXG5zdGF0ZW1lbnRzIGFuZCBhcmUgZXhlY3V0ZWQgaW4gdGhlIGNvbnRleHQgb2YgdGhlIHByb2dyYW0gYmVpbmdcbmRlYnVnZ2VkLiAgUHl0aG9uIHN0YXRlbWVudHMgY2FuIGFsc28gYmUgcHJlZml4ZWQgd2l0aCBhbiBleGNsYW1hdGlvblxucG9pbnQgKCIhIikuICBUaGlzIGlzIGEgcG93ZXJmdWwgd2F5IHRvIGluc3BlY3QgdGhlIHByb2dyYW0gYmVpbmdcbmRlYnVnZ2VkOyBpdCBpcyBldmVuIHBvc3NpYmxlIHRvIGNoYW5nZSBhIHZhcmlhYmxlIG9yIGNhbGwgYSBmdW5jdGlvbi5cbldoZW4gYW4gZXhjZXB0aW9uIG9jY3VycyBpbiBzdWNoIGEgc3RhdGVtZW50LCB0aGUgZXhjZXB0aW9uIG5hbWUgaXNcbnByaW50ZWQgYnV0IHRoZSBkZWJ1Z2dlclwncyBzdGF0ZSBpcyBub3QgY2hhbmdlZC5cblxuVGhlIGRlYnVnZ2VyIHN1cHBvcnRzICphbGlhc2VzKi4gIEFsaWFzZXMgY2FuIGhhdmUgcGFyYW1ldGVycyB3aGljaFxuYWxsb3dzIG9uZSBhIGNlcnRhaW4gbGV2ZWwgb2YgYWRhcHRhYmlsaXR5IHRvIHRoZSBjb250ZXh0IHVuZGVyXG5leGFtaW5hdGlvbi5cblxuTXVsdGlwbGUgY29tbWFuZHMgbWF5IGJlIGVudGVyZWQgb24gYSBzaW5nbGUgbGluZSwgc2VwYXJhdGVkIGJ5ICI7OyIuXG4oQSBzaW5nbGUgIjsiIGlzIG5vdCB1c2VkIGFzIGl0IGlzIHRoZSBzZXBhcmF0b3IgZm9yIG11bHRpcGxlIGNvbW1hbmRzXG5pbiBhIGxpbmUgdGhhdCBpcyBwYXNzZWQgdG8gdGhlIFB5dGhvbiBwYXJzZXIuKSAgTm8gaW50ZWxsaWdlbmNlIGlzXG5hcHBsaWVkIHRvIHNlcGFyYXRpbmcgdGhlIGNvbW1hbmRzOyB0aGUgaW5wdXQgaXMgc3BsaXQgYXQgdGhlIGZpcnN0XG4iOzsiIHBhaXIsIGV2ZW4gaWYgaXQgaXMgaW4gdGhlIG1pZGRsZSBvZiBhIHF1b3RlZCBzdHJpbmcuXG5cbklmIGEgZmlsZSAiLnBkYnJjIiBleGlzdHMgaW4gdGhlIHVzZXJcJ3MgaG9tZSBkaXJlY3Rvcnkgb3IgaW4gdGhlXG5jdXJyZW50IGRpcmVjdG9yeSwgaXQgaXMgcmVhZCBpbiBhbmQgZXhlY3V0ZWQgYXMgaWYgaXQgaGFkIGJlZW4gdHlwZWRcbmF0IHRoZSBkZWJ1Z2dlciBwcm9tcHQuICBUaGlzIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgZm9yIGFsaWFzZXMuICBJZlxuYm90aCBmaWxlcyBleGlzdCwgdGhlIG9uZSBpbiB0aGUgaG9tZSBkaXJlY3RvcnkgaXMgcmVhZCBmaXJzdCBhbmRcbmFsaWFzZXMgZGVmaW5lZCB0aGVyZSBjYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgbG9jYWwgZmlsZS5cblxuQ2hhbmdlZCBpbiB2ZXJzaW9uIDMuMjogIi5wZGJyYyIgY2FuIG5vdyBjb250YWluIGNvbW1hbmRzIHRoYXRcbmNvbnRpbnVlIGRlYnVnZ2luZywgc3VjaCBhcyAiY29udGludWUiIG9yICJuZXh0Ii4gIFByZXZpb3VzbHksIHRoZXNlXG5jb21tYW5kcyBoYWQgbm8gZWZmZWN0LlxuXG5oKGVscCkgW2NvbW1hbmRdXG5cbiAgIFdpdGhvdXQgYXJndW1lbnQsIHByaW50IHRoZSBsaXN0IG9mIGF2YWlsYWJsZSBjb21tYW5kcy4gIFdpdGggYVxuICAgKmNvbW1hbmQqIGFzIGFyZ3VtZW50LCBwcmludCBoZWxwIGFib3V0IHRoYXQgY29tbWFuZC4gICJoZWxwIHBkYiJcbiAgIGRpc3BsYXlzIHRoZSBmdWxsIGRvY3VtZW50YXRpb24gKHRoZSBkb2NzdHJpbmcgb2YgdGhlICJwZGIiXG4gICBtb2R1bGUpLiAgU2luY2UgdGhlICpjb21tYW5kKiBhcmd1bWVudCBtdXN0IGJlIGFuIGlkZW50aWZpZXIsICJoZWxwXG4gICBleGVjIiBtdXN0IGJlIGVudGVyZWQgdG8gZ2V0IGhlbHAgb24gdGhlICIhIiBjb21tYW5kLlxuXG53KGhlcmUpXG5cbiAgIFByaW50IGEgc3RhY2sgdHJhY2UsIHdpdGggdGhlIG1vc3QgcmVjZW50IGZyYW1lIGF0IHRoZSBib3R0b20uICBBblxuICAgYXJyb3cgaW5kaWNhdGVzIHRoZSBjdXJyZW50IGZyYW1lLCB3aGljaCBkZXRlcm1pbmVzIHRoZSBjb250ZXh0IG9mXG4gICBtb3N0IGNvbW1hbmRzLlxuXG5kKG93bikgW2NvdW50XVxuXG4gICBNb3ZlIHRoZSBjdXJyZW50IGZyYW1lICpjb3VudCogKGRlZmF1bHQgb25lKSBsZXZlbHMgZG93biBpbiB0aGVcbiAgIHN0YWNrIHRyYWNlICh0byBhIG5ld2VyIGZyYW1lKS5cblxudShwKSBbY291bnRdXG5cbiAgIE1vdmUgdGhlIGN1cnJlbnQgZnJhbWUgKmNvdW50KiAoZGVmYXVsdCBvbmUpIGxldmVscyB1cCBpbiB0aGUgc3RhY2tcbiAgIHRyYWNlICh0byBhbiBvbGRlciBmcmFtZSkuXG5cbmIocmVhaykgWyhbZmlsZW5hbWU6XWxpbmVubyB8IGZ1bmN0aW9uKSBbLCBjb25kaXRpb25dXVxuXG4gICBXaXRoIGEgKmxpbmVubyogYXJndW1lbnQsIHNldCBhIGJyZWFrIHRoZXJlIGluIHRoZSBjdXJyZW50IGZpbGUuXG4gICBXaXRoIGEgKmZ1bmN0aW9uKiBhcmd1bWVudCwgc2V0IGEgYnJlYWsgYXQgdGhlIGZpcnN0IGV4ZWN1dGFibGVcbiAgIHN0YXRlbWVudCB3aXRoaW4gdGhhdCBmdW5jdGlvbi4gIFRoZSBsaW5lIG51bWJlciBtYXkgYmUgcHJlZml4ZWRcbiAgIHdpdGggYSBmaWxlbmFtZSBhbmQgYSBjb2xvbiwgdG8gc3BlY2lmeSBhIGJyZWFrcG9pbnQgaW4gYW5vdGhlclxuICAgZmlsZSAocHJvYmFibHkgb25lIHRoYXQgaGFzblwndCBiZWVuIGxvYWRlZCB5ZXQpLiAgVGhlIGZpbGUgaXNcbiAgIHNlYXJjaGVkIG9uICJzeXMucGF0aCIuICBOb3RlIHRoYXQgZWFjaCBicmVha3BvaW50IGlzIGFzc2lnbmVkIGFcbiAgIG51bWJlciB0byB3aGljaCBhbGwgdGhlIG90aGVyIGJyZWFrcG9pbnQgY29tbWFuZHMgcmVmZXIuXG5cbiAgIElmIGEgc2Vjb25kIGFyZ3VtZW50IGlzIHByZXNlbnQsIGl0IGlzIGFuIGV4cHJlc3Npb24gd2hpY2ggbXVzdFxuICAgZXZhbHVhdGUgdG8gdHJ1ZSBiZWZvcmUgdGhlIGJyZWFrcG9pbnQgaXMgaG9ub3JlZC5cblxuICAgV2l0aG91dCBhcmd1bWVudCwgbGlzdCBhbGwgYnJlYWtzLCBpbmNsdWRpbmcgZm9yIGVhY2ggYnJlYWtwb2ludCxcbiAgIHRoZSBudW1iZXIgb2YgdGltZXMgdGhhdCBicmVha3BvaW50IGhhcyBiZWVuIGhpdCwgdGhlIGN1cnJlbnRcbiAgIGlnbm9yZSBjb3VudCwgYW5kIHRoZSBhc3NvY2lhdGVkIGNvbmRpdGlvbiBpZiBhbnkuXG5cbnRicmVhayBbKFtmaWxlbmFtZTpdbGluZW5vIHwgZnVuY3Rpb24pIFssIGNvbmRpdGlvbl1dXG5cbiAgIFRlbXBvcmFyeSBicmVha3BvaW50LCB3aGljaCBpcyByZW1vdmVkIGF1dG9tYXRpY2FsbHkgd2hlbiBpdCBpc1xuICAgZmlyc3QgaGl0LiBUaGUgYXJndW1lbnRzIGFyZSB0aGUgc2FtZSBhcyBmb3IgImJyZWFrIi5cblxuY2woZWFyKSBbZmlsZW5hbWU6bGluZW5vIHwgYnBudW1iZXIgW2JwbnVtYmVyIC4uLl1dXG5cbiAgIFdpdGggYSAqZmlsZW5hbWU6bGluZW5vKiBhcmd1bWVudCwgY2xlYXIgYWxsIHRoZSBicmVha3BvaW50cyBhdFxuICAgdGhpcyBsaW5lLiBXaXRoIGEgc3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YgYnJlYWtwb2ludCBudW1iZXJzLCBjbGVhclxuICAgdGhvc2UgYnJlYWtwb2ludHMuIFdpdGhvdXQgYXJndW1lbnQsIGNsZWFyIGFsbCBicmVha3MgKGJ1dCBmaXJzdFxuICAgYXNrIGNvbmZpcm1hdGlvbikuXG5cbmRpc2FibGUgW2JwbnVtYmVyIFticG51bWJlciAuLi5dXVxuXG4gICBEaXNhYmxlIHRoZSBicmVha3BvaW50cyBnaXZlbiBhcyBhIHNwYWNlIHNlcGFyYXRlZCBsaXN0IG9mXG4gICBicmVha3BvaW50IG51bWJlcnMuICBEaXNhYmxpbmcgYSBicmVha3BvaW50IG1lYW5zIGl0IGNhbm5vdCBjYXVzZVxuICAgdGhlIHByb2dyYW0gdG8gc3RvcCBleGVjdXRpb24sIGJ1dCB1bmxpa2UgY2xlYXJpbmcgYSBicmVha3BvaW50LCBpdFxuICAgcmVtYWlucyBpbiB0aGUgbGlzdCBvZiBicmVha3BvaW50cyBhbmQgY2FuIGJlIChyZS0pZW5hYmxlZC5cblxuZW5hYmxlIFticG51bWJlciBbYnBudW1iZXIgLi4uXV1cblxuICAgRW5hYmxlIHRoZSBicmVha3BvaW50cyBzcGVjaWZpZWQuXG5cbmlnbm9yZSBicG51bWJlciBbY291bnRdXG5cbiAgIFNldCB0aGUgaWdub3JlIGNvdW50IGZvciB0aGUgZ2l2ZW4gYnJlYWtwb2ludCBudW1iZXIuICBJZiBjb3VudCBpc1xuICAgb21pdHRlZCwgdGhlIGlnbm9yZSBjb3VudCBpcyBzZXQgdG8gMC4gIEEgYnJlYWtwb2ludCBiZWNvbWVzIGFjdGl2ZVxuICAgd2hlbiB0aGUgaWdub3JlIGNvdW50IGlzIHplcm8uICBXaGVuIG5vbi16ZXJvLCB0aGUgY291bnQgaXNcbiAgIGRlY3JlbWVudGVkIGVhY2ggdGltZSB0aGUgYnJlYWtwb2ludCBpcyByZWFjaGVkIGFuZCB0aGUgYnJlYWtwb2ludFxuICAgaXMgbm90IGRpc2FibGVkIGFuZCBhbnkgYXNzb2NpYXRlZCBjb25kaXRpb24gZXZhbHVhdGVzIHRvIHRydWUuXG5cbmNvbmRpdGlvbiBicG51bWJlciBbY29uZGl0aW9uXVxuXG4gICBTZXQgYSBuZXcgKmNvbmRpdGlvbiogZm9yIHRoZSBicmVha3BvaW50LCBhbiBleHByZXNzaW9uIHdoaWNoIG11c3RcbiAgIGV2YWx1YXRlIHRvIHRydWUgYmVmb3JlIHRoZSBicmVha3BvaW50IGlzIGhvbm9yZWQuICBJZiAqY29uZGl0aW9uKlxuICAgaXMgYWJzZW50LCBhbnkgZXhpc3RpbmcgY29uZGl0aW9uIGlzIHJlbW92ZWQ7IGkuZS4sIHRoZSBicmVha3BvaW50XG4gICBpcyBtYWRlIHVuY29uZGl0aW9uYWwuXG5cbmNvbW1hbmRzIFticG51bWJlcl1cblxuICAgU3BlY2lmeSBhIGxpc3Qgb2YgY29tbWFuZHMgZm9yIGJyZWFrcG9pbnQgbnVtYmVyICpicG51bWJlciouICBUaGVcbiAgIGNvbW1hbmRzIHRoZW1zZWx2ZXMgYXBwZWFyIG9uIHRoZSBmb2xsb3dpbmcgbGluZXMuICBUeXBlIGEgbGluZVxuICAgY29udGFpbmluZyBqdXN0ICJlbmQiIHRvIHRlcm1pbmF0ZSB0aGUgY29tbWFuZHMuIEFuIGV4YW1wbGU6XG5cbiAgICAgIChQZGIpIGNvbW1hbmRzIDFcbiAgICAgIChjb20pIHAgc29tZV92YXJpYWJsZVxuICAgICAgKGNvbSkgZW5kXG4gICAgICAoUGRiKVxuXG4gICBUbyByZW1vdmUgYWxsIGNvbW1hbmRzIGZyb20gYSBicmVha3BvaW50LCB0eXBlIGNvbW1hbmRzIGFuZCBmb2xsb3dcbiAgIGl0IGltbWVkaWF0ZWx5IHdpdGggImVuZCI7IHRoYXQgaXMsIGdpdmUgbm8gY29tbWFuZHMuXG5cbiAgIFdpdGggbm8gKmJwbnVtYmVyKiBhcmd1bWVudCwgY29tbWFuZHMgcmVmZXJzIHRvIHRoZSBsYXN0IGJyZWFrcG9pbnRcbiAgIHNldC5cblxuICAgWW91IGNhbiB1c2UgYnJlYWtwb2ludCBjb21tYW5kcyB0byBzdGFydCB5b3VyIHByb2dyYW0gdXAgYWdhaW4uXG4gICBTaW1wbHkgdXNlIHRoZSBjb250aW51ZSBjb21tYW5kLCBvciBzdGVwLCBvciBhbnkgb3RoZXIgY29tbWFuZCB0aGF0XG4gICByZXN1bWVzIGV4ZWN1dGlvbi5cblxuICAgU3BlY2lmeWluZyBhbnkgY29tbWFuZCByZXN1bWluZyBleGVjdXRpb24gKGN1cnJlbnRseSBjb250aW51ZSxcbiAgIHN0ZXAsIG5leHQsIHJldHVybiwganVtcCwgcXVpdCBhbmQgdGhlaXIgYWJicmV2aWF0aW9ucykgdGVybWluYXRlc1xuICAgdGhlIGNvbW1hbmQgbGlzdCAoYXMgaWYgdGhhdCBjb21tYW5kIHdhcyBpbW1lZGlhdGVseSBmb2xsb3dlZCBieVxuICAgZW5kKS4gVGhpcyBpcyBiZWNhdXNlIGFueSB0aW1lIHlvdSByZXN1bWUgZXhlY3V0aW9uIChldmVuIHdpdGggYVxuICAgc2ltcGxlIG5leHQgb3Igc3RlcCksIHlvdSBtYXkgZW5jb3VudGVyIGFub3RoZXIgYnJlYWtwb2ludC0td2hpY2hcbiAgIGNvdWxkIGhhdmUgaXRzIG93biBjb21tYW5kIGxpc3QsIGxlYWRpbmcgdG8gYW1iaWd1aXRpZXMgYWJvdXQgd2hpY2hcbiAgIGxpc3QgdG8gZXhlY3V0ZS5cblxuICAgSWYgeW91IHVzZSB0aGUgXCdzaWxlbnRcJyBjb21tYW5kIGluIHRoZSBjb21tYW5kIGxpc3QsIHRoZSB1c3VhbFxuICAgbWVzc2FnZSBhYm91dCBzdG9wcGluZyBhdCBhIGJyZWFrcG9pbnQgaXMgbm90IHByaW50ZWQuICBUaGlzIG1heSBiZVxuICAgZGVzaXJhYmxlIGZvciBicmVha3BvaW50cyB0aGF0IGFyZSB0byBwcmludCBhIHNwZWNpZmljIG1lc3NhZ2UgYW5kXG4gICB0aGVuIGNvbnRpbnVlLiAgSWYgbm9uZSBvZiB0aGUgb3RoZXIgY29tbWFuZHMgcHJpbnQgYW55dGhpbmcsIHlvdVxuICAgc2VlIG5vIHNpZ24gdGhhdCB0aGUgYnJlYWtwb2ludCB3YXMgcmVhY2hlZC5cblxucyh0ZXApXG5cbiAgIEV4ZWN1dGUgdGhlIGN1cnJlbnQgbGluZSwgc3RvcCBhdCB0aGUgZmlyc3QgcG9zc2libGUgb2NjYXNpb25cbiAgIChlaXRoZXIgaW4gYSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCBvciBvbiB0aGUgbmV4dCBsaW5lIGluIHRoZVxuICAgY3VycmVudCBmdW5jdGlvbikuXG5cbm4oZXh0KVxuXG4gICBDb250aW51ZSBleGVjdXRpb24gdW50aWwgdGhlIG5leHQgbGluZSBpbiB0aGUgY3VycmVudCBmdW5jdGlvbiBpc1xuICAgcmVhY2hlZCBvciBpdCByZXR1cm5zLiAgKFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gIm5leHQiIGFuZCAic3RlcCJcbiAgIGlzIHRoYXQgInN0ZXAiIHN0b3BzIGluc2lkZSBhIGNhbGxlZCBmdW5jdGlvbiwgd2hpbGUgIm5leHQiXG4gICBleGVjdXRlcyBjYWxsZWQgZnVuY3Rpb25zIGF0IChuZWFybHkpIGZ1bGwgc3BlZWQsIG9ubHkgc3RvcHBpbmcgYXRcbiAgIHRoZSBuZXh0IGxpbmUgaW4gdGhlIGN1cnJlbnQgZnVuY3Rpb24uKVxuXG51bnQoaWwpIFtsaW5lbm9dXG5cbiAgIFdpdGhvdXQgYXJndW1lbnQsIGNvbnRpbnVlIGV4ZWN1dGlvbiB1bnRpbCB0aGUgbGluZSB3aXRoIGEgbnVtYmVyXG4gICBncmVhdGVyIHRoYW4gdGhlIGN1cnJlbnQgb25lIGlzIHJlYWNoZWQuXG5cbiAgIFdpdGggYSBsaW5lIG51bWJlciwgY29udGludWUgZXhlY3V0aW9uIHVudGlsIGEgbGluZSB3aXRoIGEgbnVtYmVyXG4gICBncmVhdGVyIG9yIGVxdWFsIHRvIHRoYXQgaXMgcmVhY2hlZC4gIEluIGJvdGggY2FzZXMsIGFsc28gc3RvcCB3aGVuXG4gICB0aGUgY3VycmVudCBmcmFtZSByZXR1cm5zLlxuXG4gICBDaGFuZ2VkIGluIHZlcnNpb24gMy4yOiBBbGxvdyBnaXZpbmcgYW4gZXhwbGljaXQgbGluZSBudW1iZXIuXG5cbnIoZXR1cm4pXG5cbiAgIENvbnRpbnVlIGV4ZWN1dGlvbiB1bnRpbCB0aGUgY3VycmVudCBmdW5jdGlvbiByZXR1cm5zLlxuXG5jKG9udChpbnVlKSlcblxuICAgQ29udGludWUgZXhlY3V0aW9uLCBvbmx5IHN0b3Agd2hlbiBhIGJyZWFrcG9pbnQgaXMgZW5jb3VudGVyZWQuXG5cbmoodW1wKSBsaW5lbm9cblxuICAgU2V0IHRoZSBuZXh0IGxpbmUgdGhhdCB3aWxsIGJlIGV4ZWN1dGVkLiAgT25seSBhdmFpbGFibGUgaW4gdGhlXG4gICBib3R0b20tbW9zdCBmcmFtZS4gIFRoaXMgbGV0cyB5b3UganVtcCBiYWNrIGFuZCBleGVjdXRlIGNvZGUgYWdhaW4sXG4gICBvciBqdW1wIGZvcndhcmQgdG8gc2tpcCBjb2RlIHRoYXQgeW91IGRvblwndCB3YW50IHRvIHJ1bi5cblxuICAgSXQgc2hvdWxkIGJlIG5vdGVkIHRoYXQgbm90IGFsbCBqdW1wcyBhcmUgYWxsb3dlZCAtLSBmb3IgaW5zdGFuY2VcbiAgIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBqdW1wIGludG8gdGhlIG1pZGRsZSBvZiBhICJmb3IiIGxvb3Agb3Igb3V0XG4gICBvZiBhICJmaW5hbGx5IiBjbGF1c2UuXG5cbmwoaXN0KSBbZmlyc3RbLCBsYXN0XV1cblxuICAgTGlzdCBzb3VyY2UgY29kZSBmb3IgdGhlIGN1cnJlbnQgZmlsZS4gIFdpdGhvdXQgYXJndW1lbnRzLCBsaXN0IDExXG4gICBsaW5lcyBhcm91bmQgdGhlIGN1cnJlbnQgbGluZSBvciBjb250aW51ZSB0aGUgcHJldmlvdXMgbGlzdGluZy5cbiAgIFdpdGggIi4iIGFzIGFyZ3VtZW50LCBsaXN0IDExIGxpbmVzIGFyb3VuZCB0aGUgY3VycmVudCBsaW5lLiAgV2l0aFxuICAgb25lIGFyZ3VtZW50LCBsaXN0IDExIGxpbmVzIGFyb3VuZCBhdCB0aGF0IGxpbmUuICBXaXRoIHR3b1xuICAgYXJndW1lbnRzLCBsaXN0IHRoZSBnaXZlbiByYW5nZTsgaWYgdGhlIHNlY29uZCBhcmd1bWVudCBpcyBsZXNzXG4gICB0aGFuIHRoZSBmaXJzdCwgaXQgaXMgaW50ZXJwcmV0ZWQgYXMgYSBjb3VudC5cblxuICAgVGhlIGN1cnJlbnQgbGluZSBpbiB0aGUgY3VycmVudCBmcmFtZSBpcyBpbmRpY2F0ZWQgYnkgIi0+Ii4gIElmIGFuXG4gICBleGNlcHRpb24gaXMgYmVpbmcgZGVidWdnZWQsIHRoZSBsaW5lIHdoZXJlIHRoZSBleGNlcHRpb24gd2FzXG4gICBvcmlnaW5hbGx5IHJhaXNlZCBvciBwcm9wYWdhdGVkIGlzIGluZGljYXRlZCBieSAiPj4iLCBpZiBpdCBkaWZmZXJzXG4gICBmcm9tIHRoZSBjdXJyZW50IGxpbmUuXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDMuMjogVGhlICI+PiIgbWFya2VyLlxuXG5sbCB8IGxvbmdsaXN0XG5cbiAgIExpc3QgYWxsIHNvdXJjZSBjb2RlIGZvciB0aGUgY3VycmVudCBmdW5jdGlvbiBvciBmcmFtZS5cbiAgIEludGVyZXN0aW5nIGxpbmVzIGFyZSBtYXJrZWQgYXMgZm9yICJsaXN0Ii5cblxuICAgTmV3IGluIHZlcnNpb24gMy4yLlxuXG5hKHJncylcblxuICAgUHJpbnQgdGhlIGFyZ3VtZW50IGxpc3Qgb2YgdGhlIGN1cnJlbnQgZnVuY3Rpb24uXG5cbnAgZXhwcmVzc2lvblxuXG4gICBFdmFsdWF0ZSB0aGUgKmV4cHJlc3Npb24qIGluIHRoZSBjdXJyZW50IGNvbnRleHQgYW5kIHByaW50IGl0c1xuICAgdmFsdWUuXG5cbiAgIE5vdGU6ICJwcmludCgpIiBjYW4gYWxzbyBiZSB1c2VkLCBidXQgaXMgbm90IGEgZGVidWdnZXIgY29tbWFuZFxuICAgICAtLS0gdGhpcyBleGVjdXRlcyB0aGUgUHl0aG9uICJwcmludCgpIiBmdW5jdGlvbi5cblxucHAgZXhwcmVzc2lvblxuXG4gICBMaWtlIHRoZSAicCIgY29tbWFuZCwgZXhjZXB0IHRoZSB2YWx1ZSBvZiB0aGUgZXhwcmVzc2lvbiBpcyBwcmV0dHktXG4gICBwcmludGVkIHVzaW5nIHRoZSAicHByaW50IiBtb2R1bGUuXG5cbndoYXRpcyBleHByZXNzaW9uXG5cbiAgIFByaW50IHRoZSB0eXBlIG9mIHRoZSAqZXhwcmVzc2lvbiouXG5cbnNvdXJjZSBleHByZXNzaW9uXG5cbiAgIFRyeSB0byBnZXQgc291cmNlIGNvZGUgZm9yIHRoZSBnaXZlbiBvYmplY3QgYW5kIGRpc3BsYXkgaXQuXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDMuMi5cblxuZGlzcGxheSBbZXhwcmVzc2lvbl1cblxuICAgRGlzcGxheSB0aGUgdmFsdWUgb2YgdGhlIGV4cHJlc3Npb24gaWYgaXQgY2hhbmdlZCwgZWFjaCB0aW1lXG4gICBleGVjdXRpb24gc3RvcHMgaW4gdGhlIGN1cnJlbnQgZnJhbWUuXG5cbiAgIFdpdGhvdXQgZXhwcmVzc2lvbiwgbGlzdCBhbGwgZGlzcGxheSBleHByZXNzaW9ucyBmb3IgdGhlIGN1cnJlbnRcbiAgIGZyYW1lLlxuXG4gICBOZXcgaW4gdmVyc2lvbiAzLjIuXG5cbnVuZGlzcGxheSBbZXhwcmVzc2lvbl1cblxuICAgRG8gbm90IGRpc3BsYXkgdGhlIGV4cHJlc3Npb24gYW55IG1vcmUgaW4gdGhlIGN1cnJlbnQgZnJhbWUuXG4gICBXaXRob3V0IGV4cHJlc3Npb24sIGNsZWFyIGFsbCBkaXNwbGF5IGV4cHJlc3Npb25zIGZvciB0aGUgY3VycmVudFxuICAgZnJhbWUuXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDMuMi5cblxuaW50ZXJhY3RcblxuICAgU3RhcnQgYW4gaW50ZXJhdGl2ZSBpbnRlcnByZXRlciAodXNpbmcgdGhlICJjb2RlIiBtb2R1bGUpIHdob3NlXG4gICBnbG9iYWwgbmFtZXNwYWNlIGNvbnRhaW5zIGFsbCB0aGUgKGdsb2JhbCBhbmQgbG9jYWwpIG5hbWVzIGZvdW5kIGluXG4gICB0aGUgY3VycmVudCBzY29wZS5cblxuICAgTmV3IGluIHZlcnNpb24gMy4yLlxuXG5hbGlhcyBbbmFtZSBbY29tbWFuZF1dXG5cbiAgIENyZWF0ZSBhbiBhbGlhcyBjYWxsZWQgKm5hbWUqIHRoYXQgZXhlY3V0ZXMgKmNvbW1hbmQqLiAgVGhlIGNvbW1hbmRcbiAgIG11c3QgKm5vdCogYmUgZW5jbG9zZWQgaW4gcXVvdGVzLiAgUmVwbGFjZWFibGUgcGFyYW1ldGVycyBjYW4gYmVcbiAgIGluZGljYXRlZCBieSAiJTEiLCAiJTIiLCBhbmQgc28gb24sIHdoaWxlICIlKiIgaXMgcmVwbGFjZWQgYnkgYWxsXG4gICB0aGUgcGFyYW1ldGVycy4gSWYgbm8gY29tbWFuZCBpcyBnaXZlbiwgdGhlIGN1cnJlbnQgYWxpYXMgZm9yXG4gICAqbmFtZSogaXMgc2hvd24uIElmIG5vIGFyZ3VtZW50cyBhcmUgZ2l2ZW4sIGFsbCBhbGlhc2VzIGFyZSBsaXN0ZWQuXG5cbiAgIEFsaWFzZXMgbWF5IGJlIG5lc3RlZCBhbmQgY2FuIGNvbnRhaW4gYW55dGhpbmcgdGhhdCBjYW4gYmUgbGVnYWxseVxuICAgdHlwZWQgYXQgdGhlIHBkYiBwcm9tcHQuICBOb3RlIHRoYXQgaW50ZXJuYWwgcGRiIGNvbW1hbmRzICpjYW4qIGJlXG4gICBvdmVycmlkZGVuIGJ5IGFsaWFzZXMuICBTdWNoIGEgY29tbWFuZCBpcyB0aGVuIGhpZGRlbiB1bnRpbCB0aGVcbiAgIGFsaWFzIGlzIHJlbW92ZWQuICBBbGlhc2luZyBpcyByZWN1cnNpdmVseSBhcHBsaWVkIHRvIHRoZSBmaXJzdFxuICAgd29yZCBvZiB0aGUgY29tbWFuZCBsaW5lOyBhbGwgb3RoZXIgd29yZHMgaW4gdGhlIGxpbmUgYXJlIGxlZnRcbiAgIGFsb25lLlxuXG4gICBBcyBhbiBleGFtcGxlLCBoZXJlIGFyZSB0d28gdXNlZnVsIGFsaWFzZXMgKGVzcGVjaWFsbHkgd2hlbiBwbGFjZWRcbiAgIGluIHRoZSAiLnBkYnJjIiBmaWxlKTpcblxuICAgICAgIyBQcmludCBpbnN0YW5jZSB2YXJpYWJsZXMgKHVzYWdlICJwaSBjbGFzc0luc3QiKVxuICAgICAgYWxpYXMgcGkgZm9yIGsgaW4gJTEuX19kaWN0X18ua2V5cygpOiBwcmludCgiJTEuIixrLCI9IiwlMS5fX2RpY3RfX1trXSlcbiAgICAgICMgUHJpbnQgaW5zdGFuY2UgdmFyaWFibGVzIGluIHNlbGZcbiAgICAgIGFsaWFzIHBzIHBpIHNlbGZcblxudW5hbGlhcyBuYW1lXG5cbiAgIERlbGV0ZSB0aGUgc3BlY2lmaWVkIGFsaWFzLlxuXG4hIHN0YXRlbWVudFxuXG4gICBFeGVjdXRlIHRoZSAob25lLWxpbmUpICpzdGF0ZW1lbnQqIGluIHRoZSBjb250ZXh0IG9mIHRoZSBjdXJyZW50XG4gICBzdGFjayBmcmFtZS4gVGhlIGV4Y2xhbWF0aW9uIHBvaW50IGNhbiBiZSBvbWl0dGVkIHVubGVzcyB0aGUgZmlyc3RcbiAgIHdvcmQgb2YgdGhlIHN0YXRlbWVudCByZXNlbWJsZXMgYSBkZWJ1Z2dlciBjb21tYW5kLiAgVG8gc2V0IGFcbiAgIGdsb2JhbCB2YXJpYWJsZSwgeW91IGNhbiBwcmVmaXggdGhlIGFzc2lnbm1lbnQgY29tbWFuZCB3aXRoIGFcbiAgICJnbG9iYWwiIHN0YXRlbWVudCBvbiB0aGUgc2FtZSBsaW5lLCBlLmcuOlxuXG4gICAgICAoUGRiKSBnbG9iYWwgbGlzdF9vcHRpb25zOyBsaXN0X29wdGlvbnMgPSBbXCctbFwnXVxuICAgICAgKFBkYilcblxucnVuIFthcmdzIC4uLl1cbnJlc3RhcnQgW2FyZ3MgLi4uXVxuXG4gICBSZXN0YXJ0IHRoZSBkZWJ1Z2dlZCBQeXRob24gcHJvZ3JhbS4gIElmIGFuIGFyZ3VtZW50IGlzIHN1cHBsaWVkLFxuICAgaXQgaXMgc3BsaXQgd2l0aCAic2hsZXgiIGFuZCB0aGUgcmVzdWx0IGlzIHVzZWQgYXMgdGhlIG5ld1xuICAgInN5cy5hcmd2Ii4gSGlzdG9yeSwgYnJlYWtwb2ludHMsIGFjdGlvbnMgYW5kIGRlYnVnZ2VyIG9wdGlvbnMgYXJlXG4gICBwcmVzZXJ2ZWQuICJyZXN0YXJ0IiBpcyBhbiBhbGlhcyBmb3IgInJ1biIuXG5cbnEodWl0KVxuXG4gICBRdWl0IGZyb20gdGhlIGRlYnVnZ2VyLiAgVGhlIHByb2dyYW0gYmVpbmcgZXhlY3V0ZWQgaXMgYWJvcnRlZC5cblxuLVsgRm9vdG5vdGVzIF0tXG5cblsxXSBXaGV0aGVyIGEgZnJhbWUgaXMgY29uc2lkZXJlZCB0byBvcmlnaW5hdGUgaW4gYSBjZXJ0YWluIG1vZHVsZVxuICAgIGlzIGRldGVybWluZWQgYnkgdGhlICJfX25hbWVfXyIgaW4gdGhlIGZyYW1lIGdsb2JhbHMuXG4nLAorICdkZWwnOiB1J1xuVGhlICJkZWwiIHN0YXRlbWVudFxuKioqKioqKioqKioqKioqKioqKlxuXG4gICBkZWxfc3RtdCA6Oj0gImRlbCIgdGFyZ2V0X2xpc3RcblxuRGVsZXRpb24gaXMgcmVjdXJzaXZlbHkgZGVmaW5lZCB2ZXJ5IHNpbWlsYXIgdG8gdGhlIHdheSBhc3NpZ25tZW50IGlzXG5kZWZpbmVkLiBSYXRoZXIgdGhhbiBzcGVsbGluZyBpdCBvdXQgaW4gZnVsbCBkZXRhaWxzLCBoZXJlIGFyZSBzb21lXG5oaW50cy5cblxuRGVsZXRpb24gb2YgYSB0YXJnZXQgbGlzdCByZWN1cnNpdmVseSBkZWxldGVzIGVhY2ggdGFyZ2V0LCBmcm9tIGxlZnRcbnRvIHJpZ2h0LlxuXG5EZWxldGlvbiBvZiBhIG5hbWUgcmVtb3ZlcyB0aGUgYmluZGluZyBvZiB0aGF0IG5hbWUgZnJvbSB0aGUgbG9jYWwgb3Jcbmdsb2JhbCBuYW1lc3BhY2UsIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBuYW1lIG9jY3VycyBpbiBhICJnbG9iYWwiXG5zdGF0ZW1lbnQgaW4gdGhlIHNhbWUgY29kZSBibG9jay4gIElmIHRoZSBuYW1lIGlzIHVuYm91bmQsIGFcbiJOYW1lRXJyb3IiIGV4Y2VwdGlvbiB3aWxsIGJlIHJhaXNlZC5cblxuRGVsZXRpb24gb2YgYXR0cmlidXRlIHJlZmVyZW5jZXMsIHN1YnNjcmlwdGlvbnMgYW5kIHNsaWNpbmdzIGlzIHBhc3NlZFxudG8gdGhlIHByaW1hcnkgb2JqZWN0IGludm9sdmVkOyBkZWxldGlvbiBvZiBhIHNsaWNpbmcgaXMgaW4gZ2VuZXJhbFxuZXF1aXZhbGVudCB0byBhc3NpZ25tZW50IG9mIGFuIGVtcHR5IHNsaWNlIG9mIHRoZSByaWdodCB0eXBlIChidXQgZXZlblxudGhpcyBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBzbGljZWQgb2JqZWN0KS5cblxuQ2hhbmdlZCBpbiB2ZXJzaW9uIDMuMjogUHJldmlvdXNseSBpdCB3YXMgaWxsZWdhbCB0byBkZWxldGUgYSBuYW1lXG5mcm9tIHRoZSBsb2NhbCBuYW1lc3BhY2UgaWYgaXQgb2NjdXJzIGFzIGEgZnJlZSB2YXJpYWJsZSBpbiBhIG5lc3RlZFxuYmxvY2suXG4nLAorICdkaWN0JzogdSdcbkRpY3Rpb25hcnkgZGlzcGxheXNcbioqKioqKioqKioqKioqKioqKipcblxuQSBkaWN0aW9uYXJ5IGRpc3BsYXkgaXMgYSBwb3NzaWJseSBlbXB0eSBzZXJpZXMgb2Yga2V5L2RhdHVtIHBhaXJzXG5lbmNsb3NlZCBpbiBjdXJseSBicmFjZXM6XG5cbiAgIGRpY3RfZGlzcGxheSAgICAgICA6Oj0gInsiIFtrZXlfZGF0dW1fbGlzdCB8IGRpY3RfY29tcHJlaGVuc2lvbl0gIn0iXG4gICBrZXlfZGF0dW1fbGlzdCAgICAgOjo9IGtleV9kYXR1bSAoIiwiIGtleV9kYXR1bSkqIFsiLCJdXG4gICBrZXlfZGF0dW0gICAgICAgICAgOjo9IGV4cHJlc3Npb24gIjoiIGV4cHJlc3Npb25cbiAgIGRpY3RfY29tcHJlaGVuc2lvbiA6Oj0gZXhwcmVzc2lvbiAiOiIgZXhwcmVzc2lvbiBjb21wX2ZvclxuXG5BIGRpY3Rpb25hcnkgZGlzcGxheSB5aWVsZHMgYSBuZXcgZGljdGlvbmFyeSBvYmplY3QuXG5cbklmIGEgY29tbWEtc2VwYXJhdGVkIHNlcXVlbmNlIG9mIGtleS9kYXR1bSBwYWlycyBpcyBnaXZlbiwgdGhleSBhcmVcbmV2YWx1YXRlZCBmcm9tIGxlZnQgdG8gcmlnaHQgdG8gZGVmaW5lIHRoZSBlbnRyaWVzIG9mIHRoZSBkaWN0aW9uYXJ5OlxuZWFjaCBrZXkgb2JqZWN0IGlzIHVzZWQgYXMgYSBrZXkgaW50byB0aGUgZGljdGlvbmFyeSB0byBzdG9yZSB0aGVcbmNvcnJlc3BvbmRpbmcgZGF0dW0uICBUaGlzIG1lYW5zIHRoYXQgeW91IGNhbiBzcGVjaWZ5IHRoZSBzYW1lIGtleVxubXVsdGlwbGUgdGltZXMgaW4gdGhlIGtleS9kYXR1bSBsaXN0LCBhbmQgdGhlIGZpbmFsIGRpY3Rpb25hcnlcJ3MgdmFsdWVcbmZvciB0aGF0IGtleSB3aWxsIGJlIHRoZSBsYXN0IG9uZSBnaXZlbi5cblxuQSBkaWN0IGNvbXByZWhlbnNpb24sIGluIGNvbnRyYXN0IHRvIGxpc3QgYW5kIHNldCBjb21wcmVoZW5zaW9ucyxcbm5lZWRzIHR3byBleHByZXNzaW9ucyBzZXBhcmF0ZWQgd2l0aCBhIGNvbG9uIGZvbGxvd2VkIGJ5IHRoZSB1c3VhbFxuImZvciIgYW5kICJpZiIgY2xhdXNlcy4gV2hlbiB0aGUgY29tcHJlaGVuc2lvbiBpcyBydW4sIHRoZSByZXN1bHRpbmdcbmtleSBhbmQgdmFsdWUgZWxlbWVudHMgYXJlIGluc2VydGVkIGluIHRoZSBuZXcgZGljdGlvbmFyeSBpbiB0aGUgb3JkZXJcbnRoZXkgYXJlIHByb2R1Y2VkLlxuXG5SZXN0cmljdGlvbnMgb24gdGhlIHR5cGVzIG9mIHRoZSBrZXkgdmFsdWVzIGFyZSBsaXN0ZWQgZWFybGllciBpblxuc2VjdGlvbiAqVGhlIHN0YW5kYXJkIHR5cGUgaGllcmFyY2h5Ki4gIChUbyBzdW1tYXJpemUsIHRoZSBrZXkgdHlwZVxuc2hvdWxkIGJlICpoYXNoYWJsZSosIHdoaWNoIGV4Y2x1ZGVzIGFsbCBtdXRhYmxlIG9iamVjdHMuKSAgQ2xhc2hlc1xuYmV0d2VlbiBkdXBsaWNhdGUga2V5cyBhcmUgbm90IGRldGVjdGVkOyB0aGUgbGFzdCBkYXR1bSAodGV4dHVhbGx5XG5yaWdodG1vc3QgaW4gdGhlIGRpc3BsYXkpIHN0b3JlZCBmb3IgYSBnaXZlbiBrZXkgdmFsdWUgcHJldmFpbHMuXG4nLAorICdkeW5hbWljLWZlYXR1cmVzJzogdSdcbkludGVyYWN0aW9uIHdpdGggZHluYW1pYyBmZWF0dXJlc1xuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cbk5hbWUgcmVzb2x1dGlvbiBvZiBmcmVlIHZhcmlhYmxlcyBvY2N1cnMgYXQgcnVudGltZSwgbm90IGF0IGNvbXBpbGVcbnRpbWUuIFRoaXMgbWVhbnMgdGhhdCB0aGUgZm9sbG93aW5nIGNvZGUgd2lsbCBwcmludCA0MjpcblxuICAgaSA9IDEwXG4gICBkZWYgZigpOlxuICAgICAgIHByaW50KGkpXG4gICBpID0gNDJcbiAgIGYoKVxuXG5UaGVyZSBhcmUgc2V2ZXJhbCBjYXNlcyB3aGVyZSBQeXRob24gc3RhdGVtZW50cyBhcmUgaWxsZWdhbCB3aGVuIHVzZWRcbmluIGNvbmp1bmN0aW9uIHdpdGggbmVzdGVkIHNjb3BlcyB0aGF0IGNvbnRhaW4gZnJlZSB2YXJpYWJsZXMuXG5cbklmIGEgdmFyaWFibGUgaXMgcmVmZXJlbmNlZCBpbiBhbiBlbmNsb3Npbmcgc2NvcGUsIGl0IGlzIGlsbGVnYWwgdG9cbmRlbGV0ZSB0aGUgbmFtZS4gIEFuIGVycm9yIHdpbGwgYmUgcmVwb3J0ZWQgYXQgY29tcGlsZSB0aW1lLlxuXG5UaGUgImV2YWwoKSIgYW5kICJleGVjKCkiIGZ1bmN0aW9ucyBkbyBub3QgaGF2ZSBhY2Nlc3MgdG8gdGhlIGZ1bGxcbmVudmlyb25tZW50IGZvciByZXNvbHZpbmcgbmFtZXMuICBOYW1lcyBtYXkgYmUgcmVzb2x2ZWQgaW4gdGhlIGxvY2FsXG5hbmQgZ2xvYmFsIG5hbWVzcGFjZXMgb2YgdGhlIGNhbGxlci4gIEZyZWUgdmFyaWFibGVzIGFyZSBub3QgcmVzb2x2ZWRcbmluIHRoZSBuZWFyZXN0IGVuY2xvc2luZyBuYW1lc3BhY2UsIGJ1dCBpbiB0aGUgZ2xvYmFsIG5hbWVzcGFjZS4gIFsxXVxuVGhlICJleGVjKCkiIGFuZCAiZXZhbCgpIiBmdW5jdGlvbnMgaGF2ZSBvcHRpb25hbCBhcmd1bWVudHMgdG9cbm92ZXJyaWRlIHRoZSBnbG9iYWwgYW5kIGxvY2FsIG5hbWVzcGFjZS4gIElmIG9ubHkgb25lIG5hbWVzcGFjZSBpc1xuc3BlY2lmaWVkLCBpdCBpcyB1c2VkIGZvciBib3RoLlxuJywKKyAnZWxzZSc6IHUnXG5UaGUgImlmIiBzdGF0ZW1lbnRcbioqKioqKioqKioqKioqKioqKlxuXG5UaGUgImlmIiBzdGF0ZW1lbnQgaXMgdXNlZCBmb3IgY29uZGl0aW9uYWwgZXhlY3V0aW9uOlxuXG4gICBpZl9zdG10IDo6PSAiaWYiIGV4cHJlc3Npb24gIjoiIHN1aXRlXG4gICAgICAgICAgICAgICAoICJlbGlmIiBleHByZXNzaW9uICI6IiBzdWl0ZSApKlxuICAgICAgICAgICAgICAgWyJlbHNlIiAiOiIgc3VpdGVdXG5cbkl0IHNlbGVjdHMgZXhhY3RseSBvbmUgb2YgdGhlIHN1aXRlcyBieSBldmFsdWF0aW5nIHRoZSBleHByZXNzaW9ucyBvbmVcbmJ5IG9uZSB1bnRpbCBvbmUgaXMgZm91bmQgdG8gYmUgdHJ1ZSAoc2VlIHNlY3Rpb24gKkJvb2xlYW4gb3BlcmF0aW9ucypcbmZvciB0aGUgZGVmaW5pdGlvbiBvZiB0cnVlIGFuZCBmYWxzZSk7IHRoZW4gdGhhdCBzdWl0ZSBpcyBleGVjdXRlZFxuKGFuZCBubyBvdGhlciBwYXJ0IG9mIHRoZSAiaWYiIHN0YXRlbWVudCBpcyBleGVjdXRlZCBvciBldmFsdWF0ZWQpLlxuSWYgYWxsIGV4cHJlc3Npb25zIGFyZSBmYWxzZSwgdGhlIHN1aXRlIG9mIHRoZSAiZWxzZSIgY2xhdXNlLCBpZlxucHJlc2VudCwgaXMgZXhlY3V0ZWQuXG4nLAorICdleGNlcHRpb25zJzogdSdcbkV4Y2VwdGlvbnNcbioqKioqKioqKipcblxuRXhjZXB0aW9ucyBhcmUgYSBtZWFucyBvZiBicmVha2luZyBvdXQgb2YgdGhlIG5vcm1hbCBmbG93IG9mIGNvbnRyb2xcbm9mIGEgY29kZSBibG9jayBpbiBvcmRlciB0byBoYW5kbGUgZXJyb3JzIG9yIG90aGVyIGV4Y2VwdGlvbmFsXG5jb25kaXRpb25zLiAgQW4gZXhjZXB0aW9uIGlzICpyYWlzZWQqIGF0IHRoZSBwb2ludCB3aGVyZSB0aGUgZXJyb3IgaXNcbmRldGVjdGVkOyBpdCBtYXkgYmUgKmhhbmRsZWQqIGJ5IHRoZSBzdXJyb3VuZGluZyBjb2RlIGJsb2NrIG9yIGJ5IGFueVxuY29kZSBibG9jayB0aGF0IGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW52b2tlZCB0aGUgY29kZSBibG9jayB3aGVyZVxudGhlIGVycm9yIG9jY3VycmVkLlxuXG5UaGUgUHl0aG9uIGludGVycHJldGVyIHJhaXNlcyBhbiBleGNlcHRpb24gd2hlbiBpdCBkZXRlY3RzIGEgcnVuLXRpbWVcbmVycm9yIChzdWNoIGFzIGRpdmlzaW9uIGJ5IHplcm8pLiAgQSBQeXRob24gcHJvZ3JhbSBjYW4gYWxzb1xuZXhwbGljaXRseSByYWlzZSBhbiBleGNlcHRpb24gd2l0aCB0aGUgInJhaXNlIiBzdGF0ZW1lbnQuIEV4Y2VwdGlvblxuaGFuZGxlcnMgYXJlIHNwZWNpZmllZCB3aXRoIHRoZSAidHJ5IiAuLi4gImV4Y2VwdCIgc3RhdGVtZW50LiAgVGhlXG4iZmluYWxseSIgY2xhdXNlIG9mIHN1Y2ggYSBzdGF0ZW1lbnQgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBjbGVhbnVwXG5jb2RlIHdoaWNoIGRvZXMgbm90IGhhbmRsZSB0aGUgZXhjZXB0aW9uLCBidXQgaXMgZXhlY3V0ZWQgd2hldGhlciBhblxuZXhjZXB0aW9uIG9jY3VycmVkIG9yIG5vdCBpbiB0aGUgcHJlY2VkaW5nIGNvZGUuXG5cblB5dGhvbiB1c2VzIHRoZSAidGVybWluYXRpb24iIG1vZGVsIG9mIGVycm9yIGhhbmRsaW5nOiBhbiBleGNlcHRpb25cbmhhbmRsZXIgY2FuIGZpbmQgb3V0IHdoYXQgaGFwcGVuZWQgYW5kIGNvbnRpbnVlIGV4ZWN1dGlvbiBhdCBhbiBvdXRlclxubGV2ZWwsIGJ1dCBpdCBjYW5ub3QgcmVwYWlyIHRoZSBjYXVzZSBvZiB0aGUgZXJyb3IgYW5kIHJldHJ5IHRoZVxuZmFpbGluZyBvcGVyYXRpb24gKGV4Y2VwdCBieSByZS1lbnRlcmluZyB0aGUgb2ZmZW5kaW5nIHBpZWNlIG9mIGNvZGVcbmZyb20gdGhlIHRvcCkuXG5cbldoZW4gYW4gZXhjZXB0aW9uIGlzIG5vdCBoYW5kbGVkIGF0IGFsbCwgdGhlIGludGVycHJldGVyIHRlcm1pbmF0ZXNcbmV4ZWN1dGlvbiBvZiB0aGUgcHJvZ3JhbSwgb3IgcmV0dXJucyB0byBpdHMgaW50ZXJhY3RpdmUgbWFpbiBsb29wLiAgSW5cbmVpdGhlciBjYXNlLCBpdCBwcmludHMgYSBzdGFjayBiYWNrdHJhY2UsIGV4Y2VwdCB3aGVuIHRoZSBleGNlcHRpb24gaXNcbiJTeXN0ZW1FeGl0Ii5cblxuRXhjZXB0aW9ucyBhcmUgaWRlbnRpZmllZCBieSBjbGFzcyBpbnN0YW5jZXMuICBUaGUgImV4Y2VwdCIgY2xhdXNlIGlzXG5zZWxlY3RlZCBkZXBlbmRpbmcgb24gdGhlIGNsYXNzIG9mIHRoZSBpbnN0YW5jZTogaXQgbXVzdCByZWZlcmVuY2UgdGhlXG5jbGFzcyBvZiB0aGUgaW5zdGFuY2Ugb3IgYSBiYXNlIGNsYXNzIHRoZXJlb2YuICBUaGUgaW5zdGFuY2UgY2FuIGJlXG5yZWNlaXZlZCBieSB0aGUgaGFuZGxlciBhbmQgY2FuIGNhcnJ5IGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlXG5leGNlcHRpb25hbCBjb25kaXRpb24uXG5cbk5vdGU6IEV4Y2VwdGlvbiBtZXNzYWdlcyBhcmUgbm90IHBhcnQgb2YgdGhlIFB5dGhvbiBBUEkuICBUaGVpclxuICBjb250ZW50cyBtYXkgY2hhbmdlIGZyb20gb25lIHZlcnNpb24gb2YgUHl0aG9uIHRvIHRoZSBuZXh0IHdpdGhvdXRcbiAgd2FybmluZyBhbmQgc2hvdWxkIG5vdCBiZSByZWxpZWQgb24gYnkgY29kZSB3aGljaCB3aWxsIHJ1biB1bmRlclxuICBtdWx0aXBsZSB2ZXJzaW9ucyBvZiB0aGUgaW50ZXJwcmV0ZXIuXG5cblNlZSBhbHNvIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgInRyeSIgc3RhdGVtZW50IGluIHNlY3Rpb24gKlRoZSB0cnlcbnN0YXRlbWVudCogYW5kICJyYWlzZSIgc3RhdGVtZW50IGluIHNlY3Rpb24gKlRoZSByYWlzZSBzdGF0ZW1lbnQqLlxuXG4tWyBGb290bm90ZXMgXS1cblxuWzFdIFRoaXMgbGltaXRhdGlvbiBvY2N1cnMgYmVjYXVzZSB0aGUgY29kZSB0aGF0IGlzIGV4ZWN1dGVkIGJ5XG4gICAgdGhlc2Ugb3BlcmF0aW9ucyBpcyBub3QgYXZhaWxhYmxlIGF0IHRoZSB0aW1lIHRoZSBtb2R1bGUgaXNcbiAgICBjb21waWxlZC5cbicsCisgJ2V4ZWNtb2RlbCc6IHUnXG5FeGVjdXRpb24gbW9kZWxcbioqKioqKioqKioqKioqKlxuXG5cblN0cnVjdHVyZSBvZiBhIHByb2dyYW1cbj09PT09PT09PT09PT09PT09PT09PT1cblxuQSBQeXRob24gcHJvZ3JhbSBpcyBjb25zdHJ1Y3RlZCBmcm9tIGNvZGUgYmxvY2tzLiBBICpibG9jayogaXMgYSBwaWVjZVxub2YgUHl0aG9uIHByb2dyYW0gdGV4dCB0aGF0IGlzIGV4ZWN1dGVkIGFzIGEgdW5pdC4gVGhlIGZvbGxvd2luZyBhcmVcbmJsb2NrczogYSBtb2R1bGUsIGEgZnVuY3Rpb24gYm9keSwgYW5kIGEgY2xhc3MgZGVmaW5pdGlvbi4gRWFjaFxuY29tbWFuZCB0eXBlZCBpbnRlcmFjdGl2ZWx5IGlzIGEgYmxvY2suICBBIHNjcmlwdCBmaWxlIChhIGZpbGUgZ2l2ZW5cbmFzIHN0YW5kYXJkIGlucHV0IHRvIHRoZSBpbnRlcnByZXRlciBvciBzcGVjaWZpZWQgYXMgYSBjb21tYW5kIGxpbmVcbmFyZ3VtZW50IHRvIHRoZSBpbnRlcnByZXRlcikgaXMgYSBjb2RlIGJsb2NrLiAgQSBzY3JpcHQgY29tbWFuZCAoYVxuY29tbWFuZCBzcGVjaWZpZWQgb24gdGhlIGludGVycHJldGVyIGNvbW1hbmQgbGluZSB3aXRoIHRoZSBcJyoqLWMqKlwnXG5vcHRpb24pIGlzIGEgY29kZSBibG9jay4gIFRoZSBzdHJpbmcgYXJndW1lbnQgcGFzc2VkIHRvIHRoZSBidWlsdC1pblxuZnVuY3Rpb25zICJldmFsKCkiIGFuZCAiZXhlYygpIiBpcyBhIGNvZGUgYmxvY2suXG5cbkEgY29kZSBibG9jayBpcyBleGVjdXRlZCBpbiBhbiAqZXhlY3V0aW9uIGZyYW1lKi4gIEEgZnJhbWUgY29udGFpbnNcbnNvbWUgYWRtaW5pc3RyYXRpdmUgaW5mb3JtYXRpb24gKHVzZWQgZm9yIGRlYnVnZ2luZykgYW5kIGRldGVybWluZXNcbndoZXJlIGFuZCBob3cgZXhlY3V0aW9uIGNvbnRpbnVlcyBhZnRlciB0aGUgY29kZSBibG9ja1wncyBleGVjdXRpb24gaGFzXG5jb21wbGV0ZWQuXG5cblxuTmFtaW5nIGFuZCBiaW5kaW5nXG49PT09PT09PT09PT09PT09PT1cblxuXG5CaW5kaW5nIG9mIG5hbWVzXG4tLS0tLS0tLS0tLS0tLS0tXG5cbipOYW1lcyogcmVmZXIgdG8gb2JqZWN0cy4gIE5hbWVzIGFyZSBpbnRyb2R1Y2VkIGJ5IG5hbWUgYmluZGluZ1xub3BlcmF0aW9ucy5cblxuVGhlIGZvbGxvd2luZyBjb25zdHJ1Y3RzIGJpbmQgbmFtZXM6IGZvcm1hbCBwYXJhbWV0ZXJzIHRvIGZ1bmN0aW9ucyxcbiJpbXBvcnQiIHN0YXRlbWVudHMsIGNsYXNzIGFuZCBmdW5jdGlvbiBkZWZpbml0aW9ucyAodGhlc2UgYmluZCB0aGVcbmNsYXNzIG9yIGZ1bmN0aW9uIG5hbWUgaW4gdGhlIGRlZmluaW5nIGJsb2NrKSwgYW5kIHRhcmdldHMgdGhhdCBhcmVcbmlkZW50aWZpZXJzIGlmIG9jY3VycmluZyBpbiBhbiBhc3NpZ25tZW50LCAiZm9yIiBsb29wIGhlYWRlciwgb3IgYWZ0ZXJcbiJhcyIgaW4gYSAid2l0aCIgc3RhdGVtZW50IG9yICJleGNlcHQiIGNsYXVzZS4gVGhlICJpbXBvcnQiIHN0YXRlbWVudFxub2YgdGhlIGZvcm0gImZyb20gLi4uIGltcG9ydCAqIiBiaW5kcyBhbGwgbmFtZXMgZGVmaW5lZCBpbiB0aGVcbmltcG9ydGVkIG1vZHVsZSwgZXhjZXB0IHRob3NlIGJlZ2lubmluZyB3aXRoIGFuIHVuZGVyc2NvcmUuICBUaGlzIGZvcm1cbm1heSBvbmx5IGJlIHVzZWQgYXQgdGhlIG1vZHVsZSBsZXZlbC5cblxuQSB0YXJnZXQgb2NjdXJyaW5nIGluIGEgImRlbCIgc3RhdGVtZW50IGlzIGFsc28gY29uc2lkZXJlZCBib3VuZCBmb3JcbnRoaXMgcHVycG9zZSAodGhvdWdoIHRoZSBhY3R1YWwgc2VtYW50aWNzIGFyZSB0byB1bmJpbmQgdGhlIG5hbWUpLlxuXG5FYWNoIGFzc2lnbm1lbnQgb3IgaW1wb3J0IHN0YXRlbWVudCBvY2N1cnMgd2l0aGluIGEgYmxvY2sgZGVmaW5lZCBieSBhXG5jbGFzcyBvciBmdW5jdGlvbiBkZWZpbml0aW9uIG9yIGF0IHRoZSBtb2R1bGUgbGV2ZWwgKHRoZSB0b3AtbGV2ZWxcbmNvZGUgYmxvY2spLlxuXG5JZiBhIG5hbWUgaXMgYm91bmQgaW4gYSBibG9jaywgaXQgaXMgYSBsb2NhbCB2YXJpYWJsZSBvZiB0aGF0IGJsb2NrLFxudW5sZXNzIGRlY2xhcmVkIGFzICJub25sb2NhbCIgb3IgImdsb2JhbCIuICBJZiBhIG5hbWUgaXMgYm91bmQgYXQgdGhlXG5tb2R1bGUgbGV2ZWwsIGl0IGlzIGEgZ2xvYmFsIHZhcmlhYmxlLiAgKFRoZSB2YXJpYWJsZXMgb2YgdGhlIG1vZHVsZVxuY29kZSBibG9jayBhcmUgbG9jYWwgYW5kIGdsb2JhbC4pICBJZiBhIHZhcmlhYmxlIGlzIHVzZWQgaW4gYSBjb2RlXG5ibG9jayBidXQgbm90IGRlZmluZWQgdGhlcmUsIGl0IGlzIGEgKmZyZWUgdmFyaWFibGUqLlxuXG5FYWNoIG9jY3VycmVuY2Ugb2YgYSBuYW1lIGluIHRoZSBwcm9ncmFtIHRleHQgcmVmZXJzIHRvIHRoZSAqYmluZGluZypcbm9mIHRoYXQgbmFtZSBlc3RhYmxpc2hlZCBieSB0aGUgZm9sbG93aW5nIG5hbWUgcmVzb2x1dGlvbiBydWxlcy5cblxuXG5SZXNvbHV0aW9uIG9mIG5hbWVzXG4tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbkEgKnNjb3BlKiBkZWZpbmVzIHRoZSB2aXNpYmlsaXR5IG9mIGEgbmFtZSB3aXRoaW4gYSBibG9jay4gIElmIGEgbG9jYWxcbnZhcmlhYmxlIGlzIGRlZmluZWQgaW4gYSBibG9jaywgaXRzIHNjb3BlIGluY2x1ZGVzIHRoYXQgYmxvY2suICBJZiB0aGVcbmRlZmluaXRpb24gb2NjdXJzIGluIGEgZnVuY3Rpb24gYmxvY2ssIHRoZSBzY29wZSBleHRlbmRzIHRvIGFueSBibG9ja3NcbmNvbnRhaW5lZCB3aXRoaW4gdGhlIGRlZmluaW5nIG9uZSwgdW5sZXNzIGEgY29udGFpbmVkIGJsb2NrIGludHJvZHVjZXNcbmEgZGlmZmVyZW50IGJpbmRpbmcgZm9yIHRoZSBuYW1lLlxuXG5XaGVuIGEgbmFtZSBpcyB1c2VkIGluIGEgY29kZSBibG9jaywgaXQgaXMgcmVzb2x2ZWQgdXNpbmcgdGhlIG5lYXJlc3RcbmVuY2xvc2luZyBzY29wZS4gIFRoZSBzZXQgb2YgYWxsIHN1Y2ggc2NvcGVzIHZpc2libGUgdG8gYSBjb2RlIGJsb2NrXG5pcyBjYWxsZWQgdGhlIGJsb2NrXCdzICplbnZpcm9ubWVudCouXG5cbldoZW4gYSBuYW1lIGlzIG5vdCBmb3VuZCBhdCBhbGwsIGEgIk5hbWVFcnJvciIgZXhjZXB0aW9uIGlzIHJhaXNlZC4gSWZcbnRoZSBjdXJyZW50IHNjb3BlIGlzIGEgZnVuY3Rpb24gc2NvcGUsIGFuZCB0aGUgbmFtZSByZWZlcnMgdG8gYSBsb2NhbFxudmFyaWFibGUgdGhhdCBoYXMgbm90IHlldCBiZWVuIGJvdW5kIHRvIGEgdmFsdWUgYXQgdGhlIHBvaW50IHdoZXJlIHRoZVxubmFtZSBpcyB1c2VkLCBhbiAiVW5ib3VuZExvY2FsRXJyb3IiIGV4Y2VwdGlvbiBpcyByYWlzZWQuXG4iVW5ib3VuZExvY2FsRXJyb3IiIGlzIGEgc3ViY2xhc3Mgb2YgIk5hbWVFcnJvciIuXG5cbklmIGEgbmFtZSBiaW5kaW5nIG9wZXJhdGlvbiBvY2N1cnMgYW55d2hlcmUgd2l0aGluIGEgY29kZSBibG9jaywgYWxsXG51c2VzIG9mIHRoZSBuYW1lIHdpdGhpbiB0aGUgYmxvY2sgYXJlIHRyZWF0ZWQgYXMgcmVmZXJlbmNlcyB0byB0aGVcbmN1cnJlbnQgYmxvY2suICBUaGlzIGNhbiBsZWFkIHRvIGVycm9ycyB3aGVuIGEgbmFtZSBpcyB1c2VkIHdpdGhpbiBhXG5ibG9jayBiZWZvcmUgaXQgaXMgYm91bmQuICBUaGlzIHJ1bGUgaXMgc3VidGxlLiAgUHl0aG9uIGxhY2tzXG5kZWNsYXJhdGlvbnMgYW5kIGFsbG93cyBuYW1lIGJpbmRpbmcgb3BlcmF0aW9ucyB0byBvY2N1ciBhbnl3aGVyZVxud2l0aGluIGEgY29kZSBibG9jay4gIFRoZSBsb2NhbCB2YXJpYWJsZXMgb2YgYSBjb2RlIGJsb2NrIGNhbiBiZVxuZGV0ZXJtaW5lZCBieSBzY2FubmluZyB0aGUgZW50aXJlIHRleHQgb2YgdGhlIGJsb2NrIGZvciBuYW1lIGJpbmRpbmdcbm9wZXJhdGlvbnMuXG5cbklmIHRoZSAiZ2xvYmFsIiBzdGF0ZW1lbnQgb2NjdXJzIHdpdGhpbiBhIGJsb2NrLCBhbGwgdXNlcyBvZiB0aGUgbmFtZVxuc3BlY2lmaWVkIGluIHRoZSBzdGF0ZW1lbnQgcmVmZXIgdG8gdGhlIGJpbmRpbmcgb2YgdGhhdCBuYW1lIGluIHRoZVxudG9wLWxldmVsIG5hbWVzcGFjZS4gIE5hbWVzIGFyZSByZXNvbHZlZCBpbiB0aGUgdG9wLWxldmVsIG5hbWVzcGFjZSBieVxuc2VhcmNoaW5nIHRoZSBnbG9iYWwgbmFtZXNwYWNlLCBpLmUuIHRoZSBuYW1lc3BhY2Ugb2YgdGhlIG1vZHVsZVxuY29udGFpbmluZyB0aGUgY29kZSBibG9jaywgYW5kIHRoZSBidWlsdGlucyBuYW1lc3BhY2UsIHRoZSBuYW1lc3BhY2Vcbm9mIHRoZSBtb2R1bGUgImJ1aWx0aW5zIi4gIFRoZSBnbG9iYWwgbmFtZXNwYWNlIGlzIHNlYXJjaGVkIGZpcnN0LiAgSWZcbnRoZSBuYW1lIGlzIG5vdCBmb3VuZCB0aGVyZSwgdGhlIGJ1aWx0aW5zIG5hbWVzcGFjZSBpcyBzZWFyY2hlZC4gIFRoZVxuImdsb2JhbCIgc3RhdGVtZW50IG11c3QgcHJlY2VkZSBhbGwgdXNlcyBvZiB0aGUgbmFtZS5cblxuVGhlICJnbG9iYWwiIHN0YXRlbWVudCBoYXMgdGhlIHNhbWUgc2NvcGUgYXMgYSBuYW1lIGJpbmRpbmcgb3BlcmF0aW9uXG5pbiB0aGUgc2FtZSBibG9jay4gIElmIHRoZSBuZWFyZXN0IGVuY2xvc2luZyBzY29wZSBmb3IgYSBmcmVlIHZhcmlhYmxlXG5jb250YWlucyBhIGdsb2JhbCBzdGF0ZW1lbnQsIHRoZSBmcmVlIHZhcmlhYmxlIGlzIHRyZWF0ZWQgYXMgYSBnbG9iYWwuXG5cblRoZSAibm9ubG9jYWwiIHN0YXRlbWVudCBjYXVzZXMgY29ycmVzcG9uZGluZyBuYW1lcyB0byByZWZlciB0b1xucHJldmlvdXNseSBib3VuZCB2YXJpYWJsZXMgaW4gdGhlIG5lYXJlc3QgZW5jbG9zaW5nIGZ1bmN0aW9uIHNjb3BlLlxuIlN5bnRheEVycm9yIiBpcyByYWlzZWQgYXQgY29tcGlsZSB0aW1lIGlmIHRoZSBnaXZlbiBuYW1lIGRvZXMgbm90XG5leGlzdCBpbiBhbnkgZW5jbG9zaW5nIGZ1bmN0aW9uIHNjb3BlLlxuXG5UaGUgbmFtZXNwYWNlIGZvciBhIG1vZHVsZSBpcyBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgdGhlIGZpcnN0IHRpbWUgYVxubW9kdWxlIGlzIGltcG9ydGVkLiAgVGhlIG1haW4gbW9kdWxlIGZvciBhIHNjcmlwdCBpcyBhbHdheXMgY2FsbGVkXG4iX19tYWluX18iLlxuXG5DbGFzcyBkZWZpbml0aW9uIGJsb2NrcyBhbmQgYXJndW1lbnRzIHRvICJleGVjKCkiIGFuZCAiZXZhbCgpIiBhcmVcbnNwZWNpYWwgaW4gdGhlIGNvbnRleHQgb2YgbmFtZSByZXNvbHV0aW9uLiBBIGNsYXNzIGRlZmluaXRpb24gaXMgYW5cbmV4ZWN1dGFibGUgc3RhdGVtZW50IHRoYXQgbWF5IHVzZSBhbmQgZGVmaW5lIG5hbWVzLiBUaGVzZSByZWZlcmVuY2VzXG5mb2xsb3cgdGhlIG5vcm1hbCBydWxlcyBmb3IgbmFtZSByZXNvbHV0aW9uIHdpdGggYW4gZXhjZXB0aW9uIHRoYXRcbnVuYm91bmQgbG9jYWwgdmFyaWFibGVzIGFyZSBsb29rZWQgdXAgaW4gdGhlIGdsb2JhbCBuYW1lc3BhY2UuIFRoZVxubmFtZXNwYWNlIG9mIHRoZSBjbGFzcyBkZWZpbml0aW9uIGJlY29tZXMgdGhlIGF0dHJpYnV0ZSBkaWN0aW9uYXJ5IG9mXG50aGUgY2xhc3MuIFRoZSBzY29wZSBvZiBuYW1lcyBkZWZpbmVkIGluIGEgY2xhc3MgYmxvY2sgaXMgbGltaXRlZCB0b1xudGhlIGNsYXNzIGJsb2NrOyBpdCBkb2VzIG5vdCBleHRlbmQgdG8gdGhlIGNvZGUgYmxvY2tzIG9mIG1ldGhvZHMgLS1cbnRoaXMgaW5jbHVkZXMgY29tcHJlaGVuc2lvbnMgYW5kIGdlbmVyYXRvciBleHByZXNzaW9ucyBzaW5jZSB0aGV5IGFyZVxuaW1wbGVtZW50ZWQgdXNpbmcgYSBmdW5jdGlvbiBzY29wZS4gIFRoaXMgbWVhbnMgdGhhdCB0aGUgZm9sbG93aW5nXG53aWxsIGZhaWw6XG5cbiAgIGNsYXNzIEE6XG4gICAgICAgYSA9IDQyXG4gICAgICAgYiA9IGxpc3QoYSArIGkgZm9yIGkgaW4gcmFuZ2UoMTApKVxuXG5cbkJ1aWx0aW5zIGFuZCByZXN0cmljdGVkIGV4ZWN1dGlvblxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblRoZSBidWlsdGlucyBuYW1lc3BhY2UgYXNzb2NpYXRlZCB3aXRoIHRoZSBleGVjdXRpb24gb2YgYSBjb2RlIGJsb2NrXG5pcyBhY3R1YWxseSBmb3VuZCBieSBsb29raW5nIHVwIHRoZSBuYW1lICJfX2J1aWx0aW5zX18iIGluIGl0cyBnbG9iYWxcbm5hbWVzcGFjZTsgdGhpcyBzaG91bGQgYmUgYSBkaWN0aW9uYXJ5IG9yIGEgbW9kdWxlIChpbiB0aGUgbGF0dGVyIGNhc2VcbnRoZSBtb2R1bGVcJ3MgZGljdGlvbmFyeSBpcyB1c2VkKS4gIEJ5IGRlZmF1bHQsIHdoZW4gaW4gdGhlICJfX21haW5fXyJcbm1vZHVsZSwgIl9fYnVpbHRpbnNfXyIgaXMgdGhlIGJ1aWx0LWluIG1vZHVsZSAiYnVpbHRpbnMiOyB3aGVuIGluIGFueVxub3RoZXIgbW9kdWxlLCAiX19idWlsdGluc19fIiBpcyBhbiBhbGlhcyBmb3IgdGhlIGRpY3Rpb25hcnkgb2YgdGhlXG4iYnVpbHRpbnMiIG1vZHVsZSBpdHNlbGYuICAiX19idWlsdGluc19fIiBjYW4gYmUgc2V0IHRvIGEgdXNlci1jcmVhdGVkXG5kaWN0aW9uYXJ5IHRvIGNyZWF0ZSBhIHdlYWsgZm9ybSBvZiByZXN0cmljdGVkIGV4ZWN1dGlvbi5cblxuKipDUHl0aG9uIGltcGxlbWVudGF0aW9uIGRldGFpbDoqKiBVc2VycyBzaG91bGQgbm90IHRvdWNoXG4iX19idWlsdGluc19fIjsgaXQgaXMgc3RyaWN0bHkgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsLiAgVXNlcnNcbndhbnRpbmcgdG8gb3ZlcnJpZGUgdmFsdWVzIGluIHRoZSBidWlsdGlucyBuYW1lc3BhY2Ugc2hvdWxkICJpbXBvcnQiXG50aGUgImJ1aWx0aW5zIiBtb2R1bGUgYW5kIG1vZGlmeSBpdHMgYXR0cmlidXRlcyBhcHByb3ByaWF0ZWx5LlxuXG5cbkludGVyYWN0aW9uIHdpdGggZHluYW1pYyBmZWF0dXJlc1xuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbk5hbWUgcmVzb2x1dGlvbiBvZiBmcmVlIHZhcmlhYmxlcyBvY2N1cnMgYXQgcnVudGltZSwgbm90IGF0IGNvbXBpbGVcbnRpbWUuIFRoaXMgbWVhbnMgdGhhdCB0aGUgZm9sbG93aW5nIGNvZGUgd2lsbCBwcmludCA0MjpcblxuICAgaSA9IDEwXG4gICBkZWYgZigpOlxuICAgICAgIHByaW50KGkpXG4gICBpID0gNDJcbiAgIGYoKVxuXG5UaGVyZSBhcmUgc2V2ZXJhbCBjYXNlcyB3aGVyZSBQeXRob24gc3RhdGVtZW50cyBhcmUgaWxsZWdhbCB3aGVuIHVzZWRcbmluIGNvbmp1bmN0aW9uIHdpdGggbmVzdGVkIHNjb3BlcyB0aGF0IGNvbnRhaW4gZnJlZSB2YXJpYWJsZXMuXG5cbklmIGEgdmFyaWFibGUgaXMgcmVmZXJlbmNlZCBpbiBhbiBlbmNsb3Npbmcgc2NvcGUsIGl0IGlzIGlsbGVnYWwgdG9cbmRlbGV0ZSB0aGUgbmFtZS4gIEFuIGVycm9yIHdpbGwgYmUgcmVwb3J0ZWQgYXQgY29tcGlsZSB0aW1lLlxuXG5UaGUgImV2YWwoKSIgYW5kICJleGVjKCkiIGZ1bmN0aW9ucyBkbyBub3QgaGF2ZSBhY2Nlc3MgdG8gdGhlIGZ1bGxcbmVudmlyb25tZW50IGZvciByZXNvbHZpbmcgbmFtZXMuICBOYW1lcyBtYXkgYmUgcmVzb2x2ZWQgaW4gdGhlIGxvY2FsXG5hbmQgZ2xvYmFsIG5hbWVzcGFjZXMgb2YgdGhlIGNhbGxlci4gIEZyZWUgdmFyaWFibGVzIGFyZSBub3QgcmVzb2x2ZWRcbmluIHRoZSBuZWFyZXN0IGVuY2xvc2luZyBuYW1lc3BhY2UsIGJ1dCBpbiB0aGUgZ2xvYmFsIG5hbWVzcGFjZS4gIFsxXVxuVGhlICJleGVjKCkiIGFuZCAiZXZhbCgpIiBmdW5jdGlvbnMgaGF2ZSBvcHRpb25hbCBhcmd1bWVudHMgdG9cbm92ZXJyaWRlIHRoZSBnbG9iYWwgYW5kIGxvY2FsIG5hbWVzcGFjZS4gIElmIG9ubHkgb25lIG5hbWVzcGFjZSBpc1xuc3BlY2lmaWVkLCBpdCBpcyB1c2VkIGZvciBib3RoLlxuXG5cbkV4Y2VwdGlvbnNcbj09PT09PT09PT1cblxuRXhjZXB0aW9ucyBhcmUgYSBtZWFucyBvZiBicmVha2luZyBvdXQgb2YgdGhlIG5vcm1hbCBmbG93IG9mIGNvbnRyb2xcbm9mIGEgY29kZSBibG9jayBpbiBvcmRlciB0byBoYW5kbGUgZXJyb3JzIG9yIG90aGVyIGV4Y2VwdGlvbmFsXG5jb25kaXRpb25zLiAgQW4gZXhjZXB0aW9uIGlzICpyYWlzZWQqIGF0IHRoZSBwb2ludCB3aGVyZSB0aGUgZXJyb3IgaXNcbmRldGVjdGVkOyBpdCBtYXkgYmUgKmhhbmRsZWQqIGJ5IHRoZSBzdXJyb3VuZGluZyBjb2RlIGJsb2NrIG9yIGJ5IGFueVxuY29kZSBibG9jayB0aGF0IGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW52b2tlZCB0aGUgY29kZSBibG9jayB3aGVyZVxudGhlIGVycm9yIG9jY3VycmVkLlxuXG5UaGUgUHl0aG9uIGludGVycHJldGVyIHJhaXNlcyBhbiBleGNlcHRpb24gd2hlbiBpdCBkZXRlY3RzIGEgcnVuLXRpbWVcbmVycm9yIChzdWNoIGFzIGRpdmlzaW9uIGJ5IHplcm8pLiAgQSBQeXRob24gcHJvZ3JhbSBjYW4gYWxzb1xuZXhwbGljaXRseSByYWlzZSBhbiBleGNlcHRpb24gd2l0aCB0aGUgInJhaXNlIiBzdGF0ZW1lbnQuIEV4Y2VwdGlvblxuaGFuZGxlcnMgYXJlIHNwZWNpZmllZCB3aXRoIHRoZSAidHJ5IiAuLi4gImV4Y2VwdCIgc3RhdGVtZW50LiAgVGhlXG4iZmluYWxseSIgY2xhdXNlIG9mIHN1Y2ggYSBzdGF0ZW1lbnQgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBjbGVhbnVwXG5jb2RlIHdoaWNoIGRvZXMgbm90IGhhbmRsZSB0aGUgZXhjZXB0aW9uLCBidXQgaXMgZXhlY3V0ZWQgd2hldGhlciBhblxuZXhjZXB0aW9uIG9jY3VycmVkIG9yIG5vdCBpbiB0aGUgcHJlY2VkaW5nIGNvZGUuXG5cblB5dGhvbiB1c2VzIHRoZSAidGVybWluYXRpb24iIG1vZGVsIG9mIGVycm9yIGhhbmRsaW5nOiBhbiBleGNlcHRpb25cbmhhbmRsZXIgY2FuIGZpbmQgb3V0IHdoYXQgaGFwcGVuZWQgYW5kIGNvbnRpbnVlIGV4ZWN1dGlvbiBhdCBhbiBvdXRlclxubGV2ZWwsIGJ1dCBpdCBjYW5ub3QgcmVwYWlyIHRoZSBjYXVzZSBvZiB0aGUgZXJyb3IgYW5kIHJldHJ5IHRoZVxuZmFpbGluZyBvcGVyYXRpb24gKGV4Y2VwdCBieSByZS1lbnRlcmluZyB0aGUgb2ZmZW5kaW5nIHBpZWNlIG9mIGNvZGVcbmZyb20gdGhlIHRvcCkuXG5cbldoZW4gYW4gZXhjZXB0aW9uIGlzIG5vdCBoYW5kbGVkIGF0IGFsbCwgdGhlIGludGVycHJldGVyIHRlcm1pbmF0ZXNcbmV4ZWN1dGlvbiBvZiB0aGUgcHJvZ3JhbSwgb3IgcmV0dXJucyB0byBpdHMgaW50ZXJhY3RpdmUgbWFpbiBsb29wLiAgSW5cbmVpdGhlciBjYXNlLCBpdCBwcmludHMgYSBzdGFjayBiYWNrdHJhY2UsIGV4Y2VwdCB3aGVuIHRoZSBleGNlcHRpb24gaXNcbiJTeXN0ZW1FeGl0Ii5cblxuRXhjZXB0aW9ucyBhcmUgaWRlbnRpZmllZCBieSBjbGFzcyBpbnN0YW5jZXMuICBUaGUgImV4Y2VwdCIgY2xhdXNlIGlzXG5zZWxlY3RlZCBkZXBlbmRpbmcgb24gdGhlIGNsYXNzIG9mIHRoZSBpbnN0YW5jZTogaXQgbXVzdCByZWZlcmVuY2UgdGhlXG5jbGFzcyBvZiB0aGUgaW5zdGFuY2Ugb3IgYSBiYXNlIGNsYXNzIHRoZXJlb2YuICBUaGUgaW5zdGFuY2UgY2FuIGJlXG5yZWNlaXZlZCBieSB0aGUgaGFuZGxlciBhbmQgY2FuIGNhcnJ5IGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlXG5leGNlcHRpb25hbCBjb25kaXRpb24uXG5cbk5vdGU6IEV4Y2VwdGlvbiBtZXNzYWdlcyBhcmUgbm90IHBhcnQgb2YgdGhlIFB5dGhvbiBBUEkuICBUaGVpclxuICBjb250ZW50cyBtYXkgY2hhbmdlIGZyb20gb25lIHZlcnNpb24gb2YgUHl0aG9uIHRvIHRoZSBuZXh0IHdpdGhvdXRcbiAgd2FybmluZyBhbmQgc2hvdWxkIG5vdCBiZSByZWxpZWQgb24gYnkgY29kZSB3aGljaCB3aWxsIHJ1biB1bmRlclxuICBtdWx0aXBsZSB2ZXJzaW9ucyBvZiB0aGUgaW50ZXJwcmV0ZXIuXG5cblNlZSBhbHNvIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgInRyeSIgc3RhdGVtZW50IGluIHNlY3Rpb24gKlRoZSB0cnlcbnN0YXRlbWVudCogYW5kICJyYWlzZSIgc3RhdGVtZW50IGluIHNlY3Rpb24gKlRoZSByYWlzZSBzdGF0ZW1lbnQqLlxuXG4tWyBGb290bm90ZXMgXS1cblxuWzFdIFRoaXMgbGltaXRhdGlvbiBvY2N1cnMgYmVjYXVzZSB0aGUgY29kZSB0aGF0IGlzIGV4ZWN1dGVkIGJ5XG4gICAgdGhlc2Ugb3BlcmF0aW9ucyBpcyBub3QgYXZhaWxhYmxlIGF0IHRoZSB0aW1lIHRoZSBtb2R1bGUgaXNcbiAgICBjb21waWxlZC5cbicsCisgJ2V4cHJsaXN0cyc6IHUnXG5FeHByZXNzaW9uIGxpc3RzXG4qKioqKioqKioqKioqKioqXG5cbiAgIGV4cHJlc3Npb25fbGlzdCA6Oj0gZXhwcmVzc2lvbiAoICIsIiBleHByZXNzaW9uICkqIFsiLCJdXG5cbkFuIGV4cHJlc3Npb24gbGlzdCBjb250YWluaW5nIGF0IGxlYXN0IG9uZSBjb21tYSB5aWVsZHMgYSB0dXBsZS4gIFRoZVxubGVuZ3RoIG9mIHRoZSB0dXBsZSBpcyB0aGUgbnVtYmVyIG9mIGV4cHJlc3Npb25zIGluIHRoZSBsaXN0LiAgVGhlXG5leHByZXNzaW9ucyBhcmUgZXZhbHVhdGVkIGZyb20gbGVmdCB0byByaWdodC5cblxuVGhlIHRyYWlsaW5nIGNvbW1hIGlzIHJlcXVpcmVkIG9ubHkgdG8gY3JlYXRlIGEgc2luZ2xlIHR1cGxlIChhLmsuYS4gYVxuKnNpbmdsZXRvbiopOyBpdCBpcyBvcHRpb25hbCBpbiBhbGwgb3RoZXIgY2FzZXMuICBBIHNpbmdsZSBleHByZXNzaW9uXG53aXRob3V0IGEgdHJhaWxpbmcgY29tbWEgZG9lc25cJ3QgY3JlYXRlIGEgdHVwbGUsIGJ1dCByYXRoZXIgeWllbGRzIHRoZVxudmFsdWUgb2YgdGhhdCBleHByZXNzaW9uLiAoVG8gY3JlYXRlIGFuIGVtcHR5IHR1cGxlLCB1c2UgYW4gZW1wdHkgcGFpclxub2YgcGFyZW50aGVzZXM6ICIoKSIuKVxuJywKKyAnZmxvYXRpbmcnOiB1J1xuRmxvYXRpbmcgcG9pbnQgbGl0ZXJhbHNcbioqKioqKioqKioqKioqKioqKioqKioqXG5cbkZsb2F0aW5nIHBvaW50IGxpdGVyYWxzIGFyZSBkZXNjcmliZWQgYnkgdGhlIGZvbGxvd2luZyBsZXhpY2FsXG5kZWZpbml0aW9uczpcblxuICAgZmxvYXRudW1iZXIgICA6Oj0gcG9pbnRmbG9hdCB8IGV4cG9uZW50ZmxvYXRcbiAgIHBvaW50ZmxvYXQgICAgOjo9IFtpbnRwYXJ0XSBmcmFjdGlvbiB8IGludHBhcnQgIi4iXG4gICBleHBvbmVudGZsb2F0IDo6PSAoaW50cGFydCB8IHBvaW50ZmxvYXQpIGV4cG9uZW50XG4gICBpbnRwYXJ0ICAgICAgIDo6PSBkaWdpdCtcbiAgIGZyYWN0aW9uICAgICAgOjo9ICIuIiBkaWdpdCtcbiAgIGV4cG9uZW50ICAgICAgOjo9ICgiZSIgfCAiRSIpIFsiKyIgfCAiLSJdIGRpZ2l0K1xuXG5Ob3RlIHRoYXQgdGhlIGludGVnZXIgYW5kIGV4cG9uZW50IHBhcnRzIGFyZSBhbHdheXMgaW50ZXJwcmV0ZWQgdXNpbmdcbnJhZGl4IDEwLiBGb3IgZXhhbXBsZSwgIjA3N2UwMTAiIGlzIGxlZ2FsLCBhbmQgZGVub3RlcyB0aGUgc2FtZSBudW1iZXJcbmFzICI3N2UxMCIuIFRoZSBhbGxvd2VkIHJhbmdlIG9mIGZsb2F0aW5nIHBvaW50IGxpdGVyYWxzIGlzXG5pbXBsZW1lbnRhdGlvbi1kZXBlbmRlbnQuIFNvbWUgZXhhbXBsZXMgb2YgZmxvYXRpbmcgcG9pbnQgbGl0ZXJhbHM6XG5cbiAgIDMuMTQgICAgMTAuICAgIC4wMDEgICAgMWUxMDAgICAgMy4xNGUtMTAgICAgMGUwXG5cbk5vdGUgdGhhdCBudW1lcmljIGxpdGVyYWxzIGRvIG5vdCBpbmNsdWRlIGEgc2lnbjsgYSBwaHJhc2UgbGlrZSAiLTEiXG5pcyBhY3R1YWxseSBhbiBleHByZXNzaW9uIGNvbXBvc2VkIG9mIHRoZSB1bmFyeSBvcGVyYXRvciAiLSIgYW5kIHRoZVxubGl0ZXJhbCAiMSIuXG4nLAorICdmb3InOiB1J1xuVGhlICJmb3IiIHN0YXRlbWVudFxuKioqKioqKioqKioqKioqKioqKlxuXG5UaGUgImZvciIgc3RhdGVtZW50IGlzIHVzZWQgdG8gaXRlcmF0ZSBvdmVyIHRoZSBlbGVtZW50cyBvZiBhIHNlcXVlbmNlXG4oc3VjaCBhcyBhIHN0cmluZywgdHVwbGUgb3IgbGlzdCkgb3Igb3RoZXIgaXRlcmFibGUgb2JqZWN0OlxuXG4gICBmb3Jfc3RtdCA6Oj0gImZvciIgdGFyZ2V0X2xpc3QgImluIiBleHByZXNzaW9uX2xpc3QgIjoiIHN1aXRlXG4gICAgICAgICAgICAgICAgWyJlbHNlIiAiOiIgc3VpdGVdXG5cblRoZSBleHByZXNzaW9uIGxpc3QgaXMgZXZhbHVhdGVkIG9uY2U7IGl0IHNob3VsZCB5aWVsZCBhbiBpdGVyYWJsZVxub2JqZWN0LiAgQW4gaXRlcmF0b3IgaXMgY3JlYXRlZCBmb3IgdGhlIHJlc3VsdCBvZiB0aGVcbiJleHByZXNzaW9uX2xpc3QiLiAgVGhlIHN1aXRlIGlzIHRoZW4gZXhlY3V0ZWQgb25jZSBmb3IgZWFjaCBpdGVtXG5wcm92aWRlZCBieSB0aGUgaXRlcmF0b3IsIGluIHRoZSBvcmRlciByZXR1cm5lZCBieSB0aGUgaXRlcmF0b3IuICBFYWNoXG5pdGVtIGluIHR1cm4gaXMgYXNzaWduZWQgdG8gdGhlIHRhcmdldCBsaXN0IHVzaW5nIHRoZSBzdGFuZGFyZCBydWxlc1xuZm9yIGFzc2lnbm1lbnRzIChzZWUgKkFzc2lnbm1lbnQgc3RhdGVtZW50cyopLCBhbmQgdGhlbiB0aGUgc3VpdGUgaXNcbmV4ZWN1dGVkLiAgV2hlbiB0aGUgaXRlbXMgYXJlIGV4aGF1c3RlZCAod2hpY2ggaXMgaW1tZWRpYXRlbHkgd2hlbiB0aGVcbnNlcXVlbmNlIGlzIGVtcHR5IG9yIGFuIGl0ZXJhdG9yIHJhaXNlcyBhICJTdG9wSXRlcmF0aW9uIiBleGNlcHRpb24pLFxudGhlIHN1aXRlIGluIHRoZSAiZWxzZSIgY2xhdXNlLCBpZiBwcmVzZW50LCBpcyBleGVjdXRlZCwgYW5kIHRoZSBsb29wXG50ZXJtaW5hdGVzLlxuXG5BICJicmVhayIgc3RhdGVtZW50IGV4ZWN1dGVkIGluIHRoZSBmaXJzdCBzdWl0ZSB0ZXJtaW5hdGVzIHRoZSBsb29wXG53aXRob3V0IGV4ZWN1dGluZyB0aGUgImVsc2UiIGNsYXVzZVwncyBzdWl0ZS4gIEEgImNvbnRpbnVlIiBzdGF0ZW1lbnRcbmV4ZWN1dGVkIGluIHRoZSBmaXJzdCBzdWl0ZSBza2lwcyB0aGUgcmVzdCBvZiB0aGUgc3VpdGUgYW5kIGNvbnRpbnVlc1xud2l0aCB0aGUgbmV4dCBpdGVtLCBvciB3aXRoIHRoZSAiZWxzZSIgY2xhdXNlIGlmIHRoZXJlIGlzIG5vIG5leHRcbml0ZW0uXG5cblRoZSBmb3ItbG9vcCBtYWtlcyBhc3NpZ25tZW50cyB0byB0aGUgdmFyaWFibGVzKHMpIGluIHRoZSB0YXJnZXQgbGlzdC5cblRoaXMgb3ZlcndyaXRlcyBhbGwgcHJldmlvdXMgYXNzaWdubWVudHMgdG8gdGhvc2UgdmFyaWFibGVzIGluY2x1ZGluZ1xudGhvc2UgbWFkZSBpbiB0aGUgc3VpdGUgb2YgdGhlIGZvci1sb29wOlxuXG4gICBmb3IgaSBpbiByYW5nZSgxMCk6XG4gICAgICAgcHJpbnQoaSlcbiAgICAgICBpID0gNSAgICAgICAgICAgICAjIHRoaXMgd2lsbCBub3QgYWZmZWN0IHRoZSBmb3ItbG9vcFxuICAgICAgICAgICAgICAgICAgICAgICAgICMgYmVjYXVzZSBpIHdpbGwgYmUgb3ZlcndyaXR0ZW4gd2l0aCB0aGUgbmV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgICMgaW5kZXggaW4gdGhlIHJhbmdlXG5cbk5hbWVzIGluIHRoZSB0YXJnZXQgbGlzdCBhcmUgbm90IGRlbGV0ZWQgd2hlbiB0aGUgbG9vcCBpcyBmaW5pc2hlZCxcbmJ1dCBpZiB0aGUgc2VxdWVuY2UgaXMgZW1wdHksIHRoZXkgd2lsbCBub3QgaGF2ZSBiZWVuIGFzc2lnbmVkIHRvIGF0XG5hbGwgYnkgdGhlIGxvb3AuICBIaW50OiB0aGUgYnVpbHQtaW4gZnVuY3Rpb24gInJhbmdlKCkiIHJldHVybnMgYW5cbml0ZXJhdG9yIG9mIGludGVnZXJzIHN1aXRhYmxlIHRvIGVtdWxhdGUgdGhlIGVmZmVjdCBvZiBQYXNjYWxcJ3MgImZvciBpXG46PSBhIHRvIGIgZG8iOyBlLmcuLCAibGlzdChyYW5nZSgzKSkiIHJldHVybnMgdGhlIGxpc3QgIlswLCAxLCAyXSIuXG5cbk5vdGU6IFRoZXJlIGlzIGEgc3VidGxldHkgd2hlbiB0aGUgc2VxdWVuY2UgaXMgYmVpbmcgbW9kaWZpZWQgYnkgdGhlXG4gIGxvb3AgKHRoaXMgY2FuIG9ubHkgb2NjdXIgZm9yIG11dGFibGUgc2VxdWVuY2VzLCBpLmUuIGxpc3RzKS4gIEFuXG4gIGludGVybmFsIGNvdW50ZXIgaXMgdXNlZCB0byBrZWVwIHRyYWNrIG9mIHdoaWNoIGl0ZW0gaXMgdXNlZCBuZXh0LFxuICBhbmQgdGhpcyBpcyBpbmNyZW1lbnRlZCBvbiBlYWNoIGl0ZXJhdGlvbi4gIFdoZW4gdGhpcyBjb3VudGVyIGhhc1xuICByZWFjaGVkIHRoZSBsZW5ndGggb2YgdGhlIHNlcXVlbmNlIHRoZSBsb29wIHRlcm1pbmF0ZXMuICBUaGlzIG1lYW5zXG4gIHRoYXQgaWYgdGhlIHN1aXRlIGRlbGV0ZXMgdGhlIGN1cnJlbnQgKG9yIGEgcHJldmlvdXMpIGl0ZW0gZnJvbSB0aGVcbiAgc2VxdWVuY2UsIHRoZSBuZXh0IGl0ZW0gd2lsbCBiZSBza2lwcGVkIChzaW5jZSBpdCBnZXRzIHRoZSBpbmRleCBvZlxuICB0aGUgY3VycmVudCBpdGVtIHdoaWNoIGhhcyBhbHJlYWR5IGJlZW4gdHJlYXRlZCkuICBMaWtld2lzZSwgaWYgdGhlXG4gIHN1aXRlIGluc2VydHMgYW4gaXRlbSBpbiB0aGUgc2VxdWVuY2UgYmVmb3JlIHRoZSBjdXJyZW50IGl0ZW0sIHRoZVxuICBjdXJyZW50IGl0ZW0gd2lsbCBiZSB0cmVhdGVkIGFnYWluIHRoZSBuZXh0IHRpbWUgdGhyb3VnaCB0aGUgbG9vcC5cbiAgVGhpcyBjYW4gbGVhZCB0byBuYXN0eSBidWdzIHRoYXQgY2FuIGJlIGF2b2lkZWQgYnkgbWFraW5nIGFcbiAgdGVtcG9yYXJ5IGNvcHkgdXNpbmcgYSBzbGljZSBvZiB0aGUgd2hvbGUgc2VxdWVuY2UsIGUuZy4sXG5cbiAgICAgZm9yIHggaW4gYVs6XTpcbiAgICAgICAgIGlmIHggPCAwOiBhLnJlbW92ZSh4KVxuJywKKyAnZm9ybWF0c3RyaW5ncyc6IHUnXG5Gb3JtYXQgU3RyaW5nIFN5bnRheFxuKioqKioqKioqKioqKioqKioqKipcblxuVGhlICJzdHIuZm9ybWF0KCkiIG1ldGhvZCBhbmQgdGhlICJGb3JtYXR0ZXIiIGNsYXNzIHNoYXJlIHRoZSBzYW1lXG5zeW50YXggZm9yIGZvcm1hdCBzdHJpbmdzIChhbHRob3VnaCBpbiB0aGUgY2FzZSBvZiAiRm9ybWF0dGVyIixcbnN1YmNsYXNzZXMgY2FuIGRlZmluZSB0aGVpciBvd24gZm9ybWF0IHN0cmluZyBzeW50YXgpLlxuXG5Gb3JtYXQgc3RyaW5ncyBjb250YWluICJyZXBsYWNlbWVudCBmaWVsZHMiIHN1cnJvdW5kZWQgYnkgY3VybHkgYnJhY2VzXG4ie30iLiBBbnl0aGluZyB0aGF0IGlzIG5vdCBjb250YWluZWQgaW4gYnJhY2VzIGlzIGNvbnNpZGVyZWQgbGl0ZXJhbFxudGV4dCwgd2hpY2ggaXMgY29waWVkIHVuY2hhbmdlZCB0byB0aGUgb3V0cHV0LiAgSWYgeW91IG5lZWQgdG8gaW5jbHVkZVxuYSBicmFjZSBjaGFyYWN0ZXIgaW4gdGhlIGxpdGVyYWwgdGV4dCwgaXQgY2FuIGJlIGVzY2FwZWQgYnkgZG91Ymxpbmc6XG4ie3siIGFuZCAifX0iLlxuXG5UaGUgZ3JhbW1hciBmb3IgYSByZXBsYWNlbWVudCBmaWVsZCBpcyBhcyBmb2xsb3dzOlxuXG4gICAgICByZXBsYWNlbWVudF9maWVsZCA6Oj0gInsiIFtmaWVsZF9uYW1lXSBbIiEiIGNvbnZlcnNpb25dIFsiOiIgZm9ybWF0X3NwZWNdICJ9IlxuICAgICAgZmllbGRfbmFtZSAgICAgICAgOjo9IGFyZ19uYW1lICgiLiIgYXR0cmlidXRlX25hbWUgfCAiWyIgZWxlbWVudF9pbmRleCAiXSIpKlxuICAgICAgYXJnX25hbWUgICAgICAgICAgOjo9IFtpZGVudGlmaWVyIHwgaW50ZWdlcl1cbiAgICAgIGF0dHJpYnV0ZV9uYW1lICAgIDo6PSBpZGVudGlmaWVyXG4gICAgICBlbGVtZW50X2luZGV4ICAgICA6Oj0gaW50ZWdlciB8IGluZGV4X3N0cmluZ1xuICAgICAgaW5kZXhfc3RyaW5nICAgICAgOjo9IDxhbnkgc291cmNlIGNoYXJhY3RlciBleGNlcHQgIl0iPiArXG4gICAgICBjb252ZXJzaW9uICAgICAgICA6Oj0gInIiIHwgInMiIHwgImEiXG4gICAgICBmb3JtYXRfc3BlYyAgICAgICA6Oj0gPGRlc2NyaWJlZCBpbiB0aGUgbmV4dCBzZWN0aW9uPlxuXG5JbiBsZXNzIGZvcm1hbCB0ZXJtcywgdGhlIHJlcGxhY2VtZW50IGZpZWxkIGNhbiBzdGFydCB3aXRoIGFcbipmaWVsZF9uYW1lKiB0aGF0IHNwZWNpZmllcyB0aGUgb2JqZWN0IHdob3NlIHZhbHVlIGlzIHRvIGJlIGZvcm1hdHRlZFxuYW5kIGluc2VydGVkIGludG8gdGhlIG91dHB1dCBpbnN0ZWFkIG9mIHRoZSByZXBsYWNlbWVudCBmaWVsZC4gVGhlXG4qZmllbGRfbmFtZSogaXMgb3B0aW9uYWxseSBmb2xsb3dlZCBieSBhICAqY29udmVyc2lvbiogZmllbGQsIHdoaWNoIGlzXG5wcmVjZWRlZCBieSBhbiBleGNsYW1hdGlvbiBwb2ludCAiXCchXCciLCBhbmQgYSAqZm9ybWF0X3NwZWMqLCB3aGljaCBpc1xucHJlY2VkZWQgYnkgYSBjb2xvbiAiXCc6XCciLiAgVGhlc2Ugc3BlY2lmeSBhIG5vbi1kZWZhdWx0IGZvcm1hdCBmb3IgdGhlXG5yZXBsYWNlbWVudCB2YWx1ZS5cblxuU2VlIGFsc28gdGhlICpGb3JtYXQgU3BlY2lmaWNhdGlvbiBNaW5pLUxhbmd1YWdlKiBzZWN0aW9uLlxuXG5UaGUgKmZpZWxkX25hbWUqIGl0c2VsZiBiZWdpbnMgd2l0aCBhbiAqYXJnX25hbWUqIHRoYXQgaXMgZWl0aGVyIGFcbm51bWJlciBvciBhIGtleXdvcmQuICBJZiBpdFwncyBhIG51bWJlciwgaXQgcmVmZXJzIHRvIGEgcG9zaXRpb25hbFxuYXJndW1lbnQsIGFuZCBpZiBpdFwncyBhIGtleXdvcmQsIGl0IHJlZmVycyB0byBhIG5hbWVkIGtleXdvcmRcbmFyZ3VtZW50LiAgSWYgdGhlIG51bWVyaWNhbCBhcmdfbmFtZXMgaW4gYSBmb3JtYXQgc3RyaW5nIGFyZSAwLCAxLCAyLFxuLi4uIGluIHNlcXVlbmNlLCB0aGV5IGNhbiBhbGwgYmUgb21pdHRlZCAobm90IGp1c3Qgc29tZSkgYW5kIHRoZVxubnVtYmVycyAwLCAxLCAyLCAuLi4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGluc2VydGVkIGluIHRoYXQgb3JkZXIuXG5CZWNhdXNlICphcmdfbmFtZSogaXMgbm90IHF1b3RlLWRlbGltaXRlZCwgaXQgaXMgbm90IHBvc3NpYmxlIHRvXG5zcGVjaWZ5IGFyYml0cmFyeSBkaWN0aW9uYXJ5IGtleXMgKGUuZy4sIHRoZSBzdHJpbmdzICJcJzEwXCciIG9yXG4iXCc6LV1cJyIpIHdpdGhpbiBhIGZvcm1hdCBzdHJpbmcuIFRoZSAqYXJnX25hbWUqIGNhbiBiZSBmb2xsb3dlZCBieSBhbnlcbm51bWJlciBvZiBpbmRleCBvciBhdHRyaWJ1dGUgZXhwcmVzc2lvbnMuIEFuIGV4cHJlc3Npb24gb2YgdGhlIGZvcm1cbiJcJy5uYW1lXCciIHNlbGVjdHMgdGhlIG5hbWVkIGF0dHJpYnV0ZSB1c2luZyAiZ2V0YXR0cigpIiwgd2hpbGUgYW5cbmV4cHJlc3Npb24gb2YgdGhlIGZvcm0gIlwnW2luZGV4XVwnIiBkb2VzIGFuIGluZGV4IGxvb2t1cCB1c2luZ1xuIl9fZ2V0aXRlbV9fKCkiLlxuXG5DaGFuZ2VkIGluIHZlcnNpb24gMy4xOiBUaGUgcG9zaXRpb25hbCBhcmd1bWVudCBzcGVjaWZpZXJzIGNhbiBiZVxub21pdHRlZCwgc28gIlwne30ge31cJyIgaXMgZXF1aXZhbGVudCB0byAiXCd7MH0gezF9XCciLlxuXG5Tb21lIHNpbXBsZSBmb3JtYXQgc3RyaW5nIGV4YW1wbGVzOlxuXG4gICAiRmlyc3QsIHRob3Ugc2hhbHQgY291bnQgdG8gezB9IiAjIFJlZmVyZW5jZXMgZmlyc3QgcG9zaXRpb25hbCBhcmd1bWVudFxuICAgIkJyaW5nIG1lIGEge30iICAgICAgICAgICAgICAgICAgIyBJbXBsaWNpdGx5IHJlZmVyZW5jZXMgdGhlIGZpcnN0IHBvc2l0aW9uYWwgYXJndW1lbnRcbiAgICJGcm9tIHt9IHRvIHt9IiAgICAgICAgICAgICAgICAgICMgU2FtZSBhcyAiRnJvbSB7MH0gdG8gezF9IlxuICAgIk15IHF1ZXN0IGlzIHtuYW1lfSIgICAgICAgICAgICAgIyBSZWZlcmVuY2VzIGtleXdvcmQgYXJndW1lbnQgXCduYW1lXCdcbiAgICJXZWlnaHQgaW4gdG9ucyB7MC53ZWlnaHR9IiAgICAgICMgXCd3ZWlnaHRcJyBhdHRyaWJ1dGUgb2YgZmlyc3QgcG9zaXRpb25hbCBhcmdcbiAgICJVbml0cyBkZXN0cm95ZWQ6IHtwbGF5ZXJzWzBdfSIgICMgRmlyc3QgZWxlbWVudCBvZiBrZXl3b3JkIGFyZ3VtZW50IFwncGxheWVyc1wnLlxuXG5UaGUgKmNvbnZlcnNpb24qIGZpZWxkIGNhdXNlcyBhIHR5cGUgY29lcmNpb24gYmVmb3JlIGZvcm1hdHRpbmcuXG5Ob3JtYWxseSwgdGhlIGpvYiBvZiBmb3JtYXR0aW5nIGEgdmFsdWUgaXMgZG9uZSBieSB0aGUgIl9fZm9ybWF0X18oKSJcbm1ldGhvZCBvZiB0aGUgdmFsdWUgaXRzZWxmLiAgSG93ZXZlciwgaW4gc29tZSBjYXNlcyBpdCBpcyBkZXNpcmFibGUgdG9cbmZvcmNlIGEgdHlwZSB0byBiZSBmb3JtYXR0ZWQgYXMgYSBzdHJpbmcsIG92ZXJyaWRpbmcgaXRzIG93blxuZGVmaW5pdGlvbiBvZiBmb3JtYXR0aW5nLiAgQnkgY29udmVydGluZyB0aGUgdmFsdWUgdG8gYSBzdHJpbmcgYmVmb3JlXG5jYWxsaW5nICJfX2Zvcm1hdF9fKCkiLCB0aGUgbm9ybWFsIGZvcm1hdHRpbmcgbG9naWMgaXMgYnlwYXNzZWQuXG5cblRocmVlIGNvbnZlcnNpb24gZmxhZ3MgYXJlIGN1cnJlbnRseSBzdXBwb3J0ZWQ6ICJcJyFzXCciIHdoaWNoIGNhbGxzXG4ic3RyKCkiIG9uIHRoZSB2YWx1ZSwgIlwnIXJcJyIgd2hpY2ggY2FsbHMgInJlcHIoKSIgYW5kICJcJyFhXCciIHdoaWNoXG5jYWxscyAiYXNjaWkoKSIuXG5cblNvbWUgZXhhbXBsZXM6XG5cbiAgICJIYXJvbGRcJ3MgYSBjbGV2ZXIgezAhc30iICAgICAgICAjIENhbGxzIHN0cigpIG9uIHRoZSBhcmd1bWVudCBmaXJzdFxuICAgIkJyaW5nIG91dCB0aGUgaG9seSB7bmFtZSFyfSIgICAgIyBDYWxscyByZXByKCkgb24gdGhlIGFyZ3VtZW50IGZpcnN0XG4gICAiTW9yZSB7IWF9IiAgICAgICAgICAgICAgICAgICAgICAjIENhbGxzIGFzY2lpKCkgb24gdGhlIGFyZ3VtZW50IGZpcnN0XG5cblRoZSAqZm9ybWF0X3NwZWMqIGZpZWxkIGNvbnRhaW5zIGEgc3BlY2lmaWNhdGlvbiBvZiBob3cgdGhlIHZhbHVlXG5zaG91bGQgYmUgcHJlc2VudGVkLCBpbmNsdWRpbmcgc3VjaCBkZXRhaWxzIGFzIGZpZWxkIHdpZHRoLCBhbGlnbm1lbnQsXG5wYWRkaW5nLCBkZWNpbWFsIHByZWNpc2lvbiBhbmQgc28gb24uICBFYWNoIHZhbHVlIHR5cGUgY2FuIGRlZmluZSBpdHNcbm93biAiZm9ybWF0dGluZyBtaW5pLWxhbmd1YWdlIiBvciBpbnRlcnByZXRhdGlvbiBvZiB0aGUgKmZvcm1hdF9zcGVjKi5cblxuTW9zdCBidWlsdC1pbiB0eXBlcyBzdXBwb3J0IGEgY29tbW9uIGZvcm1hdHRpbmcgbWluaS1sYW5ndWFnZSwgd2hpY2hcbmlzIGRlc2NyaWJlZCBpbiB0aGUgbmV4dCBzZWN0aW9uLlxuXG5BICpmb3JtYXRfc3BlYyogZmllbGQgY2FuIGFsc28gaW5jbHVkZSBuZXN0ZWQgcmVwbGFjZW1lbnQgZmllbGRzXG53aXRoaW4gaXQuIFRoZXNlIG5lc3RlZCByZXBsYWNlbWVudCBmaWVsZHMgY2FuIGNvbnRhaW4gb25seSBhIGZpZWxkXG5uYW1lOyBjb252ZXJzaW9uIGZsYWdzIGFuZCBmb3JtYXQgc3BlY2lmaWNhdGlvbnMgYXJlIG5vdCBhbGxvd2VkLiAgVGhlXG5yZXBsYWNlbWVudCBmaWVsZHMgd2l0aGluIHRoZSBmb3JtYXRfc3BlYyBhcmUgc3Vic3RpdHV0ZWQgYmVmb3JlIHRoZVxuKmZvcm1hdF9zcGVjKiBzdHJpbmcgaXMgaW50ZXJwcmV0ZWQuIFRoaXMgYWxsb3dzIHRoZSBmb3JtYXR0aW5nIG9mIGFcbnZhbHVlIHRvIGJlIGR5bmFtaWNhbGx5IHNwZWNpZmllZC5cblxuU2VlIHRoZSAqRm9ybWF0IGV4YW1wbGVzKiBzZWN0aW9uIGZvciBzb21lIGV4YW1wbGVzLlxuXG5cbkZvcm1hdCBTcGVjaWZpY2F0aW9uIE1pbmktTGFuZ3VhZ2Vcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuIkZvcm1hdCBzcGVjaWZpY2F0aW9ucyIgYXJlIHVzZWQgd2l0aGluIHJlcGxhY2VtZW50IGZpZWxkcyBjb250YWluZWRcbndpdGhpbiBhIGZvcm1hdCBzdHJpbmcgdG8gZGVmaW5lIGhvdyBpbmRpdmlkdWFsIHZhbHVlcyBhcmUgcHJlc2VudGVkXG4oc2VlICpGb3JtYXQgU3RyaW5nIFN5bnRheCopLiAgVGhleSBjYW4gYWxzbyBiZSBwYXNzZWQgZGlyZWN0bHkgdG8gdGhlXG5idWlsdC1pbiAiZm9ybWF0KCkiIGZ1bmN0aW9uLiAgRWFjaCBmb3JtYXR0YWJsZSB0eXBlIG1heSBkZWZpbmUgaG93XG50aGUgZm9ybWF0IHNwZWNpZmljYXRpb24gaXMgdG8gYmUgaW50ZXJwcmV0ZWQuXG5cbk1vc3QgYnVpbHQtaW4gdHlwZXMgaW1wbGVtZW50IHRoZSBmb2xsb3dpbmcgb3B0aW9ucyBmb3IgZm9ybWF0XG5zcGVjaWZpY2F0aW9ucywgYWx0aG91Z2ggc29tZSBvZiB0aGUgZm9ybWF0dGluZyBvcHRpb25zIGFyZSBvbmx5XG5zdXBwb3J0ZWQgYnkgdGhlIG51bWVyaWMgdHlwZXMuXG5cbkEgZ2VuZXJhbCBjb252ZW50aW9uIGlzIHRoYXQgYW4gZW1wdHkgZm9ybWF0IHN0cmluZyAoIiIiIikgcHJvZHVjZXNcbnRoZSBzYW1lIHJlc3VsdCBhcyBpZiB5b3UgaGFkIGNhbGxlZCAic3RyKCkiIG9uIHRoZSB2YWx1ZS4gQSBub24tZW1wdHlcbmZvcm1hdCBzdHJpbmcgdHlwaWNhbGx5IG1vZGlmaWVzIHRoZSByZXN1bHQuXG5cblRoZSBnZW5lcmFsIGZvcm0gb2YgYSAqc3RhbmRhcmQgZm9ybWF0IHNwZWNpZmllciogaXM6XG5cbiAgIGZvcm1hdF9zcGVjIDo6PSBbW2ZpbGxdYWxpZ25dW3NpZ25dWyNdWzBdW3dpZHRoXVssXVsucHJlY2lzaW9uXVt0eXBlXVxuICAgZmlsbCAgICAgICAgOjo9IDxhbnkgY2hhcmFjdGVyPlxuICAgYWxpZ24gICAgICAgOjo9ICI8IiB8ICI+IiB8ICI9IiB8ICJeIlxuICAgc2lnbiAgICAgICAgOjo9ICIrIiB8ICItIiB8ICIgIlxuICAgd2lkdGggICAgICAgOjo9IGludGVnZXJcbiAgIHByZWNpc2lvbiAgIDo6PSBpbnRlZ2VyXG4gICB0eXBlICAgICAgICA6Oj0gImIiIHwgImMiIHwgImQiIHwgImUiIHwgIkUiIHwgImYiIHwgIkYiIHwgImciIHwgIkciIHwgIm4iIHwgIm8iIHwgInMiIHwgIngiIHwgIlgiIHwgIiUiXG5cbklmIGEgdmFsaWQgKmFsaWduKiB2YWx1ZSBpcyBzcGVjaWZpZWQsIGl0IGNhbiBiZSBwcmVjZWRlZCBieSBhICpmaWxsKlxuY2hhcmFjdGVyIHRoYXQgY2FuIGJlIGFueSBjaGFyYWN0ZXIgYW5kIGRlZmF1bHRzIHRvIGEgc3BhY2UgaWZcbm9taXR0ZWQuIE5vdGUgdGhhdCBpdCBpcyBub3QgcG9zc2libGUgdG8gdXNlICJ7IiBhbmQgIn0iIGFzICpmaWxsKlxuY2hhciB3aGlsZSB1c2luZyB0aGUgInN0ci5mb3JtYXQoKSIgbWV0aG9kOyB0aGlzIGxpbWl0YXRpb24gaG93ZXZlclxuZG9lc25cJ3QgYWZmZWN0IHRoZSAiZm9ybWF0KCkiIGZ1bmN0aW9uLlxuXG5UaGUgbWVhbmluZyBvZiB0aGUgdmFyaW91cyBhbGlnbm1lbnQgb3B0aW9ucyBpcyBhcyBmb2xsb3dzOlxuXG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBPcHRpb24gICAgfCBNZWFuaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICs9PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rXG4gICB8ICJcJzxcJyIgICAgIHwgRm9yY2VzIHRoZSBmaWVsZCB0byBiZSBsZWZ0LWFsaWduZWQgd2l0aGluIHRoZSBhdmFpbGFibGUgICB8XG4gICB8ICAgICAgICAgICB8IHNwYWNlICh0aGlzIGlzIHRoZSBkZWZhdWx0IGZvciBtb3N0IG9iamVjdHMpLiAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgIlwnPlwnIiAgICAgfCBGb3JjZXMgdGhlIGZpZWxkIHRvIGJlIHJpZ2h0LWFsaWduZWQgd2l0aGluIHRoZSBhdmFpbGFibGUgIHxcbiAgIHwgICAgICAgICAgIHwgc3BhY2UgKHRoaXMgaXMgdGhlIGRlZmF1bHQgZm9yIG51bWJlcnMpLiAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCAiXCc9XCciICAgICB8IEZvcmNlcyB0aGUgcGFkZGluZyB0byBiZSBwbGFjZWQgYWZ0ZXIgdGhlIHNpZ24gKGlmIGFueSkgICAgfFxuICAgfCAgICAgICAgICAgfCBidXQgYmVmb3JlIHRoZSBkaWdpdHMuICBUaGlzIGlzIHVzZWQgZm9yIHByaW50aW5nIGZpZWxkcyAgIHxcbiAgIHwgICAgICAgICAgIHwgaW4gdGhlIGZvcm0gXCcrMDAwMDAwMTIwXCcuIFRoaXMgYWxpZ25tZW50IG9wdGlvbiBpcyBvbmx5ICAgIHxcbiAgIHwgICAgICAgICAgIHwgdmFsaWQgZm9yIG51bWVyaWMgdHlwZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCAiXCdeXCciICAgICB8IEZvcmNlcyB0aGUgZmllbGQgdG8gYmUgY2VudGVyZWQgd2l0aGluIHRoZSBhdmFpbGFibGUgICAgICAgfFxuICAgfCAgICAgICAgICAgfCBzcGFjZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG5cbk5vdGUgdGhhdCB1bmxlc3MgYSBtaW5pbXVtIGZpZWxkIHdpZHRoIGlzIGRlZmluZWQsIHRoZSBmaWVsZCB3aWR0aFxud2lsbCBhbHdheXMgYmUgdGhlIHNhbWUgc2l6ZSBhcyB0aGUgZGF0YSB0byBmaWxsIGl0LCBzbyB0aGF0IHRoZVxuYWxpZ25tZW50IG9wdGlvbiBoYXMgbm8gbWVhbmluZyBpbiB0aGlzIGNhc2UuXG5cblRoZSAqc2lnbiogb3B0aW9uIGlzIG9ubHkgdmFsaWQgZm9yIG51bWJlciB0eXBlcywgYW5kIGNhbiBiZSBvbmUgb2ZcbnRoZSBmb2xsb3dpbmc6XG5cbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IE9wdGlvbiAgICB8IE1lYW5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKz09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PStcbiAgIHwgIlwnK1wnIiAgICAgfCBpbmRpY2F0ZXMgdGhhdCBhIHNpZ24gc2hvdWxkIGJlIHVzZWQgZm9yIGJvdGggcG9zaXRpdmUgYXMgIHxcbiAgIHwgICAgICAgICAgIHwgd2VsbCBhcyBuZWdhdGl2ZSBudW1iZXJzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCAiXCctXCciICAgICB8IGluZGljYXRlcyB0aGF0IGEgc2lnbiBzaG91bGQgYmUgdXNlZCBvbmx5IGZvciBuZWdhdGl2ZSAgICAgfFxuICAgfCAgICAgICAgICAgfCBudW1iZXJzICh0aGlzIGlzIHRoZSBkZWZhdWx0IGJlaGF2aW9yKS4gICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IHNwYWNlICAgICB8IGluZGljYXRlcyB0aGF0IGEgbGVhZGluZyBzcGFjZSBzaG91bGQgYmUgdXNlZCBvbiBwb3NpdGl2ZSAgfFxuICAgfCAgICAgICAgICAgfCBudW1iZXJzLCBhbmQgYSBtaW51cyBzaWduIG9uIG5lZ2F0aXZlIG51bWJlcnMuICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG5cblRoZSAiXCcjXCciIG9wdGlvbiBjYXVzZXMgdGhlICJhbHRlcm5hdGUgZm9ybSIgdG8gYmUgdXNlZCBmb3IgdGhlXG5jb252ZXJzaW9uLiAgVGhlIGFsdGVybmF0ZSBmb3JtIGlzIGRlZmluZWQgZGlmZmVyZW50bHkgZm9yIGRpZmZlcmVudFxudHlwZXMuICBUaGlzIG9wdGlvbiBpcyBvbmx5IHZhbGlkIGZvciBpbnRlZ2VyLCBmbG9hdCwgY29tcGxleCBhbmRcbkRlY2ltYWwgdHlwZXMuIEZvciBpbnRlZ2Vycywgd2hlbiBiaW5hcnksIG9jdGFsLCBvciBoZXhhZGVjaW1hbCBvdXRwdXRcbmlzIHVzZWQsIHRoaXMgb3B0aW9uIGFkZHMgdGhlIHByZWZpeCByZXNwZWN0aXZlICJcJzBiXCciLCAiXCcwb1wnIiwgb3JcbiJcJzB4XCciIHRvIHRoZSBvdXRwdXQgdmFsdWUuIEZvciBmbG9hdHMsIGNvbXBsZXggYW5kIERlY2ltYWwgdGhlXG5hbHRlcm5hdGUgZm9ybSBjYXVzZXMgdGhlIHJlc3VsdCBvZiB0aGUgY29udmVyc2lvbiB0byBhbHdheXMgY29udGFpbiBhXG5kZWNpbWFsLXBvaW50IGNoYXJhY3RlciwgZXZlbiBpZiBubyBkaWdpdHMgZm9sbG93IGl0LiBOb3JtYWxseSwgYVxuZGVjaW1hbC1wb2ludCBjaGFyYWN0ZXIgYXBwZWFycyBpbiB0aGUgcmVzdWx0IG9mIHRoZXNlIGNvbnZlcnNpb25zXG5vbmx5IGlmIGEgZGlnaXQgZm9sbG93cyBpdC4gSW4gYWRkaXRpb24sIGZvciAiXCdnXCciIGFuZCAiXCdHXCciXG5jb252ZXJzaW9ucywgdHJhaWxpbmcgemVyb3MgYXJlIG5vdCByZW1vdmVkIGZyb20gdGhlIHJlc3VsdC5cblxuVGhlICJcJyxcJyIgb3B0aW9uIHNpZ25hbHMgdGhlIHVzZSBvZiBhIGNvbW1hIGZvciBhIHRob3VzYW5kcyBzZXBhcmF0b3IuXG5Gb3IgYSBsb2NhbGUgYXdhcmUgc2VwYXJhdG9yLCB1c2UgdGhlICJcJ25cJyIgaW50ZWdlciBwcmVzZW50YXRpb24gdHlwZVxuaW5zdGVhZC5cblxuQ2hhbmdlZCBpbiB2ZXJzaW9uIDMuMTogQWRkZWQgdGhlICJcJyxcJyIgb3B0aW9uIChzZWUgYWxzbyAqKlBFUCAzNzgqKikuXG5cbip3aWR0aCogaXMgYSBkZWNpbWFsIGludGVnZXIgZGVmaW5pbmcgdGhlIG1pbmltdW0gZmllbGQgd2lkdGguICBJZiBub3RcbnNwZWNpZmllZCwgdGhlbiB0aGUgZmllbGQgd2lkdGggd2lsbCBiZSBkZXRlcm1pbmVkIGJ5IHRoZSBjb250ZW50LlxuXG5QcmVjZWRpbmcgdGhlICp3aWR0aCogZmllbGQgYnkgYSB6ZXJvICgiXCcwXCciKSBjaGFyYWN0ZXIgZW5hYmxlcyBzaWduLVxuYXdhcmUgemVyby1wYWRkaW5nIGZvciBudW1lcmljIHR5cGVzLiAgVGhpcyBpcyBlcXVpdmFsZW50IHRvIGEgKmZpbGwqXG5jaGFyYWN0ZXIgb2YgIlwnMFwnIiB3aXRoIGFuICphbGlnbm1lbnQqIHR5cGUgb2YgIlwnPVwnIi5cblxuVGhlICpwcmVjaXNpb24qIGlzIGEgZGVjaW1hbCBudW1iZXIgaW5kaWNhdGluZyBob3cgbWFueSBkaWdpdHMgc2hvdWxkXG5iZSBkaXNwbGF5ZWQgYWZ0ZXIgdGhlIGRlY2ltYWwgcG9pbnQgZm9yIGEgZmxvYXRpbmcgcG9pbnQgdmFsdWVcbmZvcm1hdHRlZCB3aXRoICJcJ2ZcJyIgYW5kICJcJ0ZcJyIsIG9yIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIGRlY2ltYWwgcG9pbnRcbmZvciBhIGZsb2F0aW5nIHBvaW50IHZhbHVlIGZvcm1hdHRlZCB3aXRoICJcJ2dcJyIgb3IgIlwnR1wnIi4gIEZvciBub24tXG5udW1iZXIgdHlwZXMgdGhlIGZpZWxkIGluZGljYXRlcyB0aGUgbWF4aW11bSBmaWVsZCBzaXplIC0gaW4gb3RoZXJcbndvcmRzLCBob3cgbWFueSBjaGFyYWN0ZXJzIHdpbGwgYmUgdXNlZCBmcm9tIHRoZSBmaWVsZCBjb250ZW50LiBUaGVcbipwcmVjaXNpb24qIGlzIG5vdCBhbGxvd2VkIGZvciBpbnRlZ2VyIHZhbHVlcy5cblxuRmluYWxseSwgdGhlICp0eXBlKiBkZXRlcm1pbmVzIGhvdyB0aGUgZGF0YSBzaG91bGQgYmUgcHJlc2VudGVkLlxuXG5UaGUgYXZhaWxhYmxlIHN0cmluZyBwcmVzZW50YXRpb24gdHlwZXMgYXJlOlxuXG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBUeXBlICAgICAgfCBNZWFuaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICs9PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rXG4gICB8ICJcJ3NcJyIgICAgIHwgU3RyaW5nIGZvcm1hdC4gVGhpcyBpcyB0aGUgZGVmYXVsdCB0eXBlIGZvciBzdHJpbmdzIGFuZCAgICB8XG4gICB8ICAgICAgICAgICB8IG1heSBiZSBvbWl0dGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgTm9uZSAgICAgIHwgVGhlIHNhbWUgYXMgIlwnc1wnIi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG5cblRoZSBhdmFpbGFibGUgaW50ZWdlciBwcmVzZW50YXRpb24gdHlwZXMgYXJlOlxuXG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBUeXBlICAgICAgfCBNZWFuaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICs9PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rXG4gICB8ICJcJ2JcJyIgICAgIHwgQmluYXJ5IGZvcm1hdC4gT3V0cHV0cyB0aGUgbnVtYmVyIGluIGJhc2UgMi4gICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCAiXCdjXCciICAgICB8IENoYXJhY3Rlci4gQ29udmVydHMgdGhlIGludGVnZXIgdG8gdGhlIGNvcnJlc3BvbmRpbmcgICAgICAgfFxuICAgfCAgICAgICAgICAgfCB1bmljb2RlIGNoYXJhY3RlciBiZWZvcmUgcHJpbnRpbmcuICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8ICJcJ2RcJyIgICAgIHwgRGVjaW1hbCBJbnRlZ2VyLiBPdXRwdXRzIHRoZSBudW1iZXIgaW4gYmFzZSAxMC4gICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCAiXCdvXCciICAgICB8IE9jdGFsIGZvcm1hdC4gT3V0cHV0cyB0aGUgbnVtYmVyIGluIGJhc2UgOC4gICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgIlwneFwnIiAgICAgfCBIZXggZm9ybWF0LiBPdXRwdXRzIHRoZSBudW1iZXIgaW4gYmFzZSAxNiwgdXNpbmcgbG93ZXItICAgIHxcbiAgIHwgICAgICAgICAgIHwgY2FzZSBsZXR0ZXJzIGZvciB0aGUgZGlnaXRzIGFib3ZlIDkuICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCAiXCdYXCciICAgICB8IEhleCBmb3JtYXQuIE91dHB1dHMgdGhlIG51bWJlciBpbiBiYXNlIDE2LCB1c2luZyB1cHBlci0gICAgfFxuICAgfCAgICAgICAgICAgfCBjYXNlIGxldHRlcnMgZm9yIHRoZSBkaWdpdHMgYWJvdmUgOS4gICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8ICJcJ25cJyIgICAgIHwgTnVtYmVyLiBUaGlzIGlzIHRoZSBzYW1lIGFzICJcJ2RcJyIsIGV4Y2VwdCB0aGF0IGl0IHVzZXMgdGhlIHxcbiAgIHwgICAgICAgICAgIHwgY3VycmVudCBsb2NhbGUgc2V0dGluZyB0byBpbnNlcnQgdGhlIGFwcHJvcHJpYXRlIG51bWJlciAgICB8XG4gICB8ICAgICAgICAgICB8IHNlcGFyYXRvciBjaGFyYWN0ZXJzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgTm9uZSAgICAgIHwgVGhlIHNhbWUgYXMgIlwnZFwnIi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG5cbkluIGFkZGl0aW9uIHRvIHRoZSBhYm92ZSBwcmVzZW50YXRpb24gdHlwZXMsIGludGVnZXJzIGNhbiBiZSBmb3JtYXR0ZWRcbndpdGggdGhlIGZsb2F0aW5nIHBvaW50IHByZXNlbnRhdGlvbiB0eXBlcyBsaXN0ZWQgYmVsb3cgKGV4Y2VwdCAiXCduXCciXG5hbmQgTm9uZSkuIFdoZW4gZG9pbmcgc28sICJmbG9hdCgpIiBpcyB1c2VkIHRvIGNvbnZlcnQgdGhlIGludGVnZXIgdG9cbmEgZmxvYXRpbmcgcG9pbnQgbnVtYmVyIGJlZm9yZSBmb3JtYXR0aW5nLlxuXG5UaGUgYXZhaWxhYmxlIHByZXNlbnRhdGlvbiB0eXBlcyBmb3IgZmxvYXRpbmcgcG9pbnQgYW5kIGRlY2ltYWwgdmFsdWVzXG5hcmU6XG5cbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IFR5cGUgICAgICB8IE1lYW5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKz09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PStcbiAgIHwgIlwnZVwnIiAgICAgfCBFeHBvbmVudCBub3RhdGlvbi4gUHJpbnRzIHRoZSBudW1iZXIgaW4gc2NpZW50aWZpYyAgICAgICAgIHxcbiAgIHwgICAgICAgICAgIHwgbm90YXRpb24gdXNpbmcgdGhlIGxldHRlciBcJ2VcJyB0byBpbmRpY2F0ZSB0aGUgZXhwb25lbnQuICAgIHxcbiAgIHwgICAgICAgICAgIHwgVGhlIGRlZmF1bHQgcHJlY2lzaW9uIGlzICI2Ii4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCAiXCdFXCciICAgICB8IEV4cG9uZW50IG5vdGF0aW9uLiBTYW1lIGFzICJcJ2VcJyIgZXhjZXB0IGl0IHVzZXMgYW4gdXBwZXIgICB8XG4gICB8ICAgICAgICAgICB8IGNhc2UgXCdFXCcgYXMgdGhlIHNlcGFyYXRvciBjaGFyYWN0ZXIuICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCAiXCdmXCciICAgICB8IEZpeGVkIHBvaW50LiBEaXNwbGF5cyB0aGUgbnVtYmVyIGFzIGEgZml4ZWQtcG9pbnQgbnVtYmVyLiAgfFxuICAgfCAgICAgICAgICAgfCBUaGUgZGVmYXVsdCBwcmVjaXNpb24gaXMgIjYiLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8ICJcJ0ZcJyIgICAgIHwgRml4ZWQgcG9pbnQuIFNhbWUgYXMgIlwnZlwnIiwgYnV0IGNvbnZlcnRzICJuYW4iIHRvICJOQU4iICAgIHxcbiAgIHwgICAgICAgICAgIHwgYW5kICJpbmYiIHRvICJJTkYiLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCAiXCdnXCciICAgICB8IEdlbmVyYWwgZm9ybWF0LiAgRm9yIGEgZ2l2ZW4gcHJlY2lzaW9uICJwID49IDEiLCB0aGlzICAgICAgfFxuICAgfCAgICAgICAgICAgfCByb3VuZHMgdGhlIG51bWJlciB0byAicCIgc2lnbmlmaWNhbnQgZGlnaXRzIGFuZCB0aGVuICAgICAgIHxcbiAgIHwgICAgICAgICAgIHwgZm9ybWF0cyB0aGUgcmVzdWx0IGluIGVpdGhlciBmaXhlZC1wb2ludCBmb3JtYXQgb3IgaW4gICAgICB8XG4gICB8ICAgICAgICAgICB8IHNjaWVudGlmaWMgbm90YXRpb24sIGRlcGVuZGluZyBvbiBpdHMgbWFnbml0dWRlLiAgVGhlICAgICAgfFxuICAgfCAgICAgICAgICAgfCBwcmVjaXNlIHJ1bGVzIGFyZSBhcyBmb2xsb3dzOiBzdXBwb3NlIHRoYXQgdGhlIHJlc3VsdCAgICAgIHxcbiAgIHwgICAgICAgICAgIHwgZm9ybWF0dGVkIHdpdGggcHJlc2VudGF0aW9uIHR5cGUgIlwnZVwnIiBhbmQgcHJlY2lzaW9uICJwLTEiIHxcbiAgIHwgICAgICAgICAgIHwgd291bGQgaGF2ZSBleHBvbmVudCAiZXhwIi4gIFRoZW4gaWYgIi00IDw9IGV4cCA8IHAiLCB0aGUgICB8XG4gICB8ICAgICAgICAgICB8IG51bWJlciBpcyBmb3JtYXR0ZWQgd2l0aCBwcmVzZW50YXRpb24gdHlwZSAiXCdmXCciIGFuZCAgICAgICB8XG4gICB8ICAgICAgICAgICB8IHByZWNpc2lvbiAicC0xLWV4cCIuICBPdGhlcndpc2UsIHRoZSBudW1iZXIgaXMgZm9ybWF0dGVkICAgfFxuICAgfCAgICAgICAgICAgfCB3aXRoIHByZXNlbnRhdGlvbiB0eXBlICJcJ2VcJyIgYW5kIHByZWNpc2lvbiAicC0xIi4gSW4gYm90aCAgfFxuICAgfCAgICAgICAgICAgfCBjYXNlcyBpbnNpZ25pZmljYW50IHRyYWlsaW5nIHplcm9zIGFyZSByZW1vdmVkIGZyb20gdGhlICAgIHxcbiAgIHwgICAgICAgICAgIHwgc2lnbmlmaWNhbmQsIGFuZCB0aGUgZGVjaW1hbCBwb2ludCBpcyBhbHNvIHJlbW92ZWQgaWYgICAgICB8XG4gICB8ICAgICAgICAgICB8IHRoZXJlIGFyZSBubyByZW1haW5pbmcgZGlnaXRzIGZvbGxvd2luZyBpdC4gIFBvc2l0aXZlIGFuZCAgfFxuICAgfCAgICAgICAgICAgfCBuZWdhdGl2ZSBpbmZpbml0eSwgcG9zaXRpdmUgYW5kIG5lZ2F0aXZlIHplcm8sIGFuZCBuYW5zLCAgIHxcbiAgIHwgICAgICAgICAgIHwgYXJlIGZvcm1hdHRlZCBhcyAiaW5mIiwgIi1pbmYiLCAiMCIsICItMCIgYW5kICJuYW4iICAgICAgICB8XG4gICB8ICAgICAgICAgICB8IHJlc3BlY3RpdmVseSwgcmVnYXJkbGVzcyBvZiB0aGUgcHJlY2lzaW9uLiAgQSBwcmVjaXNpb24gb2YgfFxuICAgfCAgICAgICAgICAgfCAiMCIgaXMgdHJlYXRlZCBhcyBlcXVpdmFsZW50IHRvIGEgcHJlY2lzaW9uIG9mICIxIi4gVGhlICAgIHxcbiAgIHwgICAgICAgICAgIHwgZGVmYXVsdCBwcmVjaXNpb24gaXMgIjYiLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCAiXCdHXCciICAgICB8IEdlbmVyYWwgZm9ybWF0LiBTYW1lIGFzICJcJ2dcJyIgZXhjZXB0IHN3aXRjaGVzIHRvICJcJ0VcJyIgaWYgIHxcbiAgIHwgICAgICAgICAgIHwgdGhlIG51bWJlciBnZXRzIHRvbyBsYXJnZS4gVGhlIHJlcHJlc2VudGF0aW9ucyBvZiBpbmZpbml0eSB8XG4gICB8ICAgICAgICAgICB8IGFuZCBOYU4gYXJlIHVwcGVyY2FzZWQsIHRvby4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgIlwnblwnIiAgICAgfCBOdW1iZXIuIFRoaXMgaXMgdGhlIHNhbWUgYXMgIlwnZ1wnIiwgZXhjZXB0IHRoYXQgaXQgdXNlcyB0aGUgfFxuICAgfCAgICAgICAgICAgfCBjdXJyZW50IGxvY2FsZSBzZXR0aW5nIHRvIGluc2VydCB0aGUgYXBwcm9wcmlhdGUgbnVtYmVyICAgIHxcbiAgIHwgICAgICAgICAgIHwgc2VwYXJhdG9yIGNoYXJhY3RlcnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCAiXCclXCciICAgICB8IFBlcmNlbnRhZ2UuIE11bHRpcGxpZXMgdGhlIG51bWJlciBieSAxMDAgYW5kIGRpc3BsYXlzIGluICAgfFxuICAgfCAgICAgICAgICAgfCBmaXhlZCAoIlwnZlwnIikgZm9ybWF0LCBmb2xsb3dlZCBieSBhIHBlcmNlbnQgc2lnbi4gICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgTm9uZSAgICAgIHwgU2ltaWxhciB0byAiXCdnXCciLCBleGNlcHQgdGhhdCBmaXhlZC1wb2ludCBub3RhdGlvbiwgd2hlbiAgIHxcbiAgIHwgICAgICAgICAgIHwgdXNlZCwgaGFzIGF0IGxlYXN0IG9uZSBkaWdpdCBwYXN0IHRoZSBkZWNpbWFsIHBvaW50LiBUaGUgICB8XG4gICB8ICAgICAgICAgICB8IGRlZmF1bHQgcHJlY2lzaW9uIGlzIGFzIGhpZ2ggYXMgbmVlZGVkIHRvIHJlcHJlc2VudCB0aGUgICAgfFxuICAgfCAgICAgICAgICAgfCBwYXJ0aWN1bGFyIHZhbHVlLiBUaGUgb3ZlcmFsbCBlZmZlY3QgaXMgdG8gbWF0Y2ggdGhlICAgICAgIHxcbiAgIHwgICAgICAgICAgIHwgb3V0cHV0IG9mICJzdHIoKSIgYXMgYWx0ZXJlZCBieSB0aGUgb3RoZXIgZm9ybWF0ICAgICAgICAgICB8XG4gICB8ICAgICAgICAgICB8IG1vZGlmaWVycy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcblxuXG5Gb3JtYXQgZXhhbXBsZXNcbj09PT09PT09PT09PT09PVxuXG5UaGlzIHNlY3Rpb24gY29udGFpbnMgZXhhbXBsZXMgb2YgdGhlIG5ldyBmb3JtYXQgc3ludGF4IGFuZCBjb21wYXJpc29uXG53aXRoIHRoZSBvbGQgIiUiLWZvcm1hdHRpbmcuXG5cbkluIG1vc3Qgb2YgdGhlIGNhc2VzIHRoZSBzeW50YXggaXMgc2ltaWxhciB0byB0aGUgb2xkICIlIi1mb3JtYXR0aW5nLFxud2l0aCB0aGUgYWRkaXRpb24gb2YgdGhlICJ7fSIgYW5kIHdpdGggIjoiIHVzZWQgaW5zdGVhZCBvZiAiJSIuIEZvclxuZXhhbXBsZSwgIlwnJTAzLjJmXCciIGNhbiBiZSB0cmFuc2xhdGVkIHRvICJcJ3s6MDMuMmZ9XCciLlxuXG5UaGUgbmV3IGZvcm1hdCBzeW50YXggYWxzbyBzdXBwb3J0cyBuZXcgYW5kIGRpZmZlcmVudCBvcHRpb25zLCBzaG93blxuaW4gdGhlIGZvbGxvdyBleGFtcGxlcy5cblxuQWNjZXNzaW5nIGFyZ3VtZW50cyBieSBwb3NpdGlvbjpcblxuICAgPj4+IFwnezB9LCB7MX0sIHsyfVwnLmZvcm1hdChcJ2FcJywgXCdiXCcsIFwnY1wnKVxuICAgXCdhLCBiLCBjXCdcbiAgID4+PiBcJ3t9LCB7fSwge31cJy5mb3JtYXQoXCdhXCcsIFwnYlwnLCBcJ2NcJykgICMgMy4xKyBvbmx5XG4gICBcJ2EsIGIsIGNcJ1xuICAgPj4+IFwnezJ9LCB7MX0sIHswfVwnLmZvcm1hdChcJ2FcJywgXCdiXCcsIFwnY1wnKVxuICAgXCdjLCBiLCBhXCdcbiAgID4+PiBcJ3syfSwgezF9LCB7MH1cJy5mb3JtYXQoKlwnYWJjXCcpICAgICAgIyB1bnBhY2tpbmcgYXJndW1lbnQgc2VxdWVuY2VcbiAgIFwnYywgYiwgYVwnXG4gICA+Pj4gXCd7MH17MX17MH1cJy5mb3JtYXQoXCdhYnJhXCcsIFwnY2FkXCcpICAgIyBhcmd1bWVudHNcJyBpbmRpY2VzIGNhbiBiZSByZXBlYXRlZFxuICAgXCdhYnJhY2FkYWJyYVwnXG5cbkFjY2Vzc2luZyBhcmd1bWVudHMgYnkgbmFtZTpcblxuICAgPj4+IFwnQ29vcmRpbmF0ZXM6IHtsYXRpdHVkZX0sIHtsb25naXR1ZGV9XCcuZm9ybWF0KGxhdGl0dWRlPVwnMzcuMjROXCcsIGxvbmdpdHVkZT1cJy0xMTUuODFXXCcpXG4gICBcJ0Nvb3JkaW5hdGVzOiAzNy4yNE4sIC0xMTUuODFXXCdcbiAgID4+PiBjb29yZCA9IHtcJ2xhdGl0dWRlXCc6IFwnMzcuMjROXCcsIFwnbG9uZ2l0dWRlXCc6IFwnLTExNS44MVdcJ31cbiAgID4+PiBcJ0Nvb3JkaW5hdGVzOiB7bGF0aXR1ZGV9LCB7bG9uZ2l0dWRlfVwnLmZvcm1hdCgqKmNvb3JkKVxuICAgXCdDb29yZGluYXRlczogMzcuMjROLCAtMTE1LjgxV1wnXG5cbkFjY2Vzc2luZyBhcmd1bWVudHNcJyBhdHRyaWJ1dGVzOlxuXG4gICA+Pj4gYyA9IDMtNWpcbiAgID4+PiAoXCdUaGUgY29tcGxleCBudW1iZXIgezB9IGlzIGZvcm1lZCBmcm9tIHRoZSByZWFsIHBhcnQgezAucmVhbH0gXCdcbiAgIC4uLiAgXCdhbmQgdGhlIGltYWdpbmFyeSBwYXJ0IHswLmltYWd9LlwnKS5mb3JtYXQoYylcbiAgIFwnVGhlIGNvbXBsZXggbnVtYmVyICgzLTVqKSBpcyBmb3JtZWQgZnJvbSB0aGUgcmVhbCBwYXJ0IDMuMCBhbmQgdGhlIGltYWdpbmFyeSBwYXJ0IC01LjAuXCdcbiAgID4+PiBjbGFzcyBQb2ludDpcbiAgIC4uLiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHgsIHkpOlxuICAgLi4uICAgICAgICAgc2VsZi54LCBzZWxmLnkgPSB4LCB5XG4gICAuLi4gICAgIGRlZiBfX3N0cl9fKHNlbGYpOlxuICAgLi4uICAgICAgICAgcmV0dXJuIFwnUG9pbnQoe3NlbGYueH0sIHtzZWxmLnl9KVwnLmZvcm1hdChzZWxmPXNlbGYpXG4gICAuLi5cbiAgID4+PiBzdHIoUG9pbnQoNCwgMikpXG4gICBcJ1BvaW50KDQsIDIpXCdcblxuQWNjZXNzaW5nIGFyZ3VtZW50c1wnIGl0ZW1zOlxuXG4gICA+Pj4gY29vcmQgPSAoMywgNSlcbiAgID4+PiBcJ1g6IHswWzBdfTsgIFk6IHswWzFdfVwnLmZvcm1hdChjb29yZClcbiAgIFwnWDogMzsgIFk6IDVcJ1xuXG5SZXBsYWNpbmcgIiVzIiBhbmQgIiVyIjpcblxuICAgPj4+ICJyZXByKCkgc2hvd3MgcXVvdGVzOiB7IXJ9OyBzdHIoKSBkb2VzblwndDogeyFzfSIuZm9ybWF0KFwndGVzdDFcJywgXCd0ZXN0MlwnKVxuICAgInJlcHIoKSBzaG93cyBxdW90ZXM6IFwndGVzdDFcJzsgc3RyKCkgZG9lc25cJ3Q6IHRlc3QyIlxuXG5BbGlnbmluZyB0aGUgdGV4dCBhbmQgc3BlY2lmeWluZyBhIHdpZHRoOlxuXG4gICA+Pj4gXCd7OjwzMH1cJy5mb3JtYXQoXCdsZWZ0IGFsaWduZWRcJylcbiAgIFwnbGVmdCBhbGlnbmVkICAgICAgICAgICAgICAgICAgXCdcbiAgID4+PiBcJ3s6PjMwfVwnLmZvcm1hdChcJ3JpZ2h0IGFsaWduZWRcJylcbiAgIFwnICAgICAgICAgICAgICAgICByaWdodCBhbGlnbmVkXCdcbiAgID4+PiBcJ3s6XjMwfVwnLmZvcm1hdChcJ2NlbnRlcmVkXCcpXG4gICBcJyAgICAgICAgICAgY2VudGVyZWQgICAgICAgICAgIFwnXG4gICA+Pj4gXCd7OipeMzB9XCcuZm9ybWF0KFwnY2VudGVyZWRcJykgICMgdXNlIFwnKlwnIGFzIGEgZmlsbCBjaGFyXG4gICBcJyoqKioqKioqKioqY2VudGVyZWQqKioqKioqKioqKlwnXG5cblJlcGxhY2luZyAiJStmIiwgIiUtZiIsIGFuZCAiJSBmIiBhbmQgc3BlY2lmeWluZyBhIHNpZ246XG5cbiAgID4+PiBcJ3s6K2Z9OyB7OitmfVwnLmZvcm1hdCgzLjE0LCAtMy4xNCkgICMgc2hvdyBpdCBhbHdheXNcbiAgIFwnKzMuMTQwMDAwOyAtMy4xNDAwMDBcJ1xuICAgPj4+IFwnezogZn07IHs6IGZ9XCcuZm9ybWF0KDMuMTQsIC0zLjE0KSAgIyBzaG93IGEgc3BhY2UgZm9yIHBvc2l0aXZlIG51bWJlcnNcbiAgIFwnIDMuMTQwMDAwOyAtMy4xNDAwMDBcJ1xuICAgPj4+IFwnezotZn07IHs6LWZ9XCcuZm9ybWF0KDMuMTQsIC0zLjE0KSAgIyBzaG93IG9ubHkgdGhlIG1pbnVzIC0tIHNhbWUgYXMgXCd7OmZ9OyB7OmZ9XCdcbiAgIFwnMy4xNDAwMDA7IC0zLjE0MDAwMFwnXG5cblJlcGxhY2luZyAiJXgiIGFuZCAiJW8iIGFuZCBjb252ZXJ0aW5nIHRoZSB2YWx1ZSB0byBkaWZmZXJlbnQgYmFzZXM6XG5cbiAgID4+PiAjIGZvcm1hdCBhbHNvIHN1cHBvcnRzIGJpbmFyeSBudW1iZXJzXG4gICA+Pj4gImludDogezA6ZH07ICBoZXg6IHswOnh9OyAgb2N0OiB7MDpvfTsgIGJpbjogezA6Yn0iLmZvcm1hdCg0MilcbiAgIFwnaW50OiA0MjsgIGhleDogMmE7ICBvY3Q6IDUyOyAgYmluOiAxMDEwMTBcJ1xuICAgPj4+ICMgd2l0aCAweCwgMG8sIG9yIDBiIGFzIHByZWZpeDpcbiAgID4+PiAiaW50OiB7MDpkfTsgIGhleDogezA6I3h9OyAgb2N0OiB7MDojb307ICBiaW46IHswOiNifSIuZm9ybWF0KDQyKVxuICAgXCdpbnQ6IDQyOyAgaGV4OiAweDJhOyAgb2N0OiAwbzUyOyAgYmluOiAwYjEwMTAxMFwnXG5cblVzaW5nIHRoZSBjb21tYSBhcyBhIHRob3VzYW5kcyBzZXBhcmF0b3I6XG5cbiAgID4+PiBcJ3s6LH1cJy5mb3JtYXQoMTIzNDU2Nzg5MClcbiAgIFwnMSwyMzQsNTY3LDg5MFwnXG5cbkV4cHJlc3NpbmcgYSBwZXJjZW50YWdlOlxuXG4gICA+Pj4gcG9pbnRzID0gMTlcbiAgID4+PiB0b3RhbCA9IDIyXG4gICA+Pj4gXCdDb3JyZWN0IGFuc3dlcnM6IHs6LjIlfVwnLmZvcm1hdChwb2ludHMvdG90YWwpXG4gICBcJ0NvcnJlY3QgYW5zd2VyczogODYuMzYlXCdcblxuVXNpbmcgdHlwZS1zcGVjaWZpYyBmb3JtYXR0aW5nOlxuXG4gICA+Pj4gaW1wb3J0IGRhdGV0aW1lXG4gICA+Pj4gZCA9IGRhdGV0aW1lLmRhdGV0aW1lKDIwMTAsIDcsIDQsIDEyLCAxNSwgNTgpXG4gICA+Pj4gXCd7OiVZLSVtLSVkICVIOiVNOiVTfVwnLmZvcm1hdChkKVxuICAgXCcyMDEwLTA3LTA0IDEyOjE1OjU4XCdcblxuTmVzdGluZyBhcmd1bWVudHMgYW5kIG1vcmUgY29tcGxleCBleGFtcGxlczpcblxuICAgPj4+IGZvciBhbGlnbiwgdGV4dCBpbiB6aXAoXCc8Xj5cJywgW1wnbGVmdFwnLCBcJ2NlbnRlclwnLCBcJ3JpZ2h0XCddKTpcbiAgIC4uLiAgICAgXCd7MDp7ZmlsbH17YWxpZ259MTZ9XCcuZm9ybWF0KHRleHQsIGZpbGw9YWxpZ24sIGFsaWduPWFsaWduKVxuICAgLi4uXG4gICBcJ2xlZnQ8PDw8PDw8PDw8PDxcJ1xuICAgXCdeXl5eXmNlbnRlcl5eXl5eXCdcbiAgIFwnPj4+Pj4+Pj4+Pj5yaWdodFwnXG4gICA+Pj5cbiAgID4+PiBvY3RldHMgPSBbMTkyLCAxNjgsIDAsIDFdXG4gICA+Pj4gXCd7OjAyWH17OjAyWH17OjAyWH17OjAyWH1cJy5mb3JtYXQoKm9jdGV0cylcbiAgIFwnQzBBODAwMDFcJ1xuICAgPj4+IGludChfLCAxNilcbiAgIDMyMzIyMzU1MjFcbiAgID4+PlxuICAgPj4+IHdpZHRoID0gNVxuICAgPj4+IGZvciBudW0gaW4gcmFuZ2UoNSwxMik6ICNkb2N0ZXN0OiArTk9STUFMSVpFX1dISVRFU1BBQ0VcbiAgIC4uLiAgICAgZm9yIGJhc2UgaW4gXCdkWG9iXCc6XG4gICAuLi4gICAgICAgICBwcmludChcJ3swOnt3aWR0aH17YmFzZX19XCcuZm9ybWF0KG51bSwgYmFzZT1iYXNlLCB3aWR0aD13aWR0aCksIGVuZD1cJyBcJylcbiAgIC4uLiAgICAgcHJpbnQoKVxuICAgLi4uXG4gICAgICAgNSAgICAgNSAgICAgNSAgIDEwMVxuICAgICAgIDYgICAgIDYgICAgIDYgICAxMTBcbiAgICAgICA3ICAgICA3ICAgICA3ICAgMTExXG4gICAgICAgOCAgICAgOCAgICAxMCAgMTAwMFxuICAgICAgIDkgICAgIDkgICAgMTEgIDEwMDFcbiAgICAgIDEwICAgICBBICAgIDEyICAxMDEwXG4gICAgICAxMSAgICAgQiAgICAxMyAgMTAxMVxuJywKKyAnZnVuY3Rpb24nOiB1J1xuRnVuY3Rpb24gZGVmaW5pdGlvbnNcbioqKioqKioqKioqKioqKioqKioqXG5cbkEgZnVuY3Rpb24gZGVmaW5pdGlvbiBkZWZpbmVzIGEgdXNlci1kZWZpbmVkIGZ1bmN0aW9uIG9iamVjdCAoc2VlXG5zZWN0aW9uICpUaGUgc3RhbmRhcmQgdHlwZSBoaWVyYXJjaHkqKTpcblxuICAgZnVuY2RlZiAgICAgICAgOjo9IFtkZWNvcmF0b3JzXSAiZGVmIiBmdW5jbmFtZSAiKCIgW3BhcmFtZXRlcl9saXN0XSAiKSIgWyItPiIgZXhwcmVzc2lvbl0gIjoiIHN1aXRlXG4gICBkZWNvcmF0b3JzICAgICA6Oj0gZGVjb3JhdG9yK1xuICAgZGVjb3JhdG9yICAgICAgOjo9ICJAIiBkb3R0ZWRfbmFtZSBbIigiIFtwYXJhbWV0ZXJfbGlzdCBbIiwiXV0gIikiXSBORVdMSU5FXG4gICBkb3R0ZWRfbmFtZSAgICA6Oj0gaWRlbnRpZmllciAoIi4iIGlkZW50aWZpZXIpKlxuICAgcGFyYW1ldGVyX2xpc3QgOjo9IChkZWZwYXJhbWV0ZXIgIiwiKSpcbiAgICAgICAgICAgICAgICAgICAgICB8ICIqIiBbcGFyYW1ldGVyXSAoIiwiIGRlZnBhcmFtZXRlcikqIFsiLCIgIioqIiBwYXJhbWV0ZXJdXG4gICAgICAgICAgICAgICAgICAgICAgfCAiKioiIHBhcmFtZXRlclxuICAgICAgICAgICAgICAgICAgICAgIHwgZGVmcGFyYW1ldGVyIFsiLCJdIClcbiAgIHBhcmFtZXRlciAgICAgIDo6PSBpZGVudGlmaWVyIFsiOiIgZXhwcmVzc2lvbl1cbiAgIGRlZnBhcmFtZXRlciAgIDo6PSBwYXJhbWV0ZXIgWyI9IiBleHByZXNzaW9uXVxuICAgZnVuY25hbWUgICAgICAgOjo9IGlkZW50aWZpZXJcblxuQSBmdW5jdGlvbiBkZWZpbml0aW9uIGlzIGFuIGV4ZWN1dGFibGUgc3RhdGVtZW50LiAgSXRzIGV4ZWN1dGlvbiBiaW5kc1xudGhlIGZ1bmN0aW9uIG5hbWUgaW4gdGhlIGN1cnJlbnQgbG9jYWwgbmFtZXNwYWNlIHRvIGEgZnVuY3Rpb24gb2JqZWN0XG4oYSB3cmFwcGVyIGFyb3VuZCB0aGUgZXhlY3V0YWJsZSBjb2RlIGZvciB0aGUgZnVuY3Rpb24pLiAgVGhpc1xuZnVuY3Rpb24gb2JqZWN0IGNvbnRhaW5zIGEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGdsb2JhbCBuYW1lc3BhY2VcbmFzIHRoZSBnbG9iYWwgbmFtZXNwYWNlIHRvIGJlIHVzZWQgd2hlbiB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkLlxuXG5UaGUgZnVuY3Rpb24gZGVmaW5pdGlvbiBkb2VzIG5vdCBleGVjdXRlIHRoZSBmdW5jdGlvbiBib2R5OyB0aGlzIGdldHNcbmV4ZWN1dGVkIG9ubHkgd2hlbiB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkLiBbM11cblxuQSBmdW5jdGlvbiBkZWZpbml0aW9uIG1heSBiZSB3cmFwcGVkIGJ5IG9uZSBvciBtb3JlICpkZWNvcmF0b3IqXG5leHByZXNzaW9ucy4gRGVjb3JhdG9yIGV4cHJlc3Npb25zIGFyZSBldmFsdWF0ZWQgd2hlbiB0aGUgZnVuY3Rpb24gaXNcbmRlZmluZWQsIGluIHRoZSBzY29wZSB0aGF0IGNvbnRhaW5zIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uLiAgVGhlXG5yZXN1bHQgbXVzdCBiZSBhIGNhbGxhYmxlLCB3aGljaCBpcyBpbnZva2VkIHdpdGggdGhlIGZ1bmN0aW9uIG9iamVjdFxuYXMgdGhlIG9ubHkgYXJndW1lbnQuIFRoZSByZXR1cm5lZCB2YWx1ZSBpcyBib3VuZCB0byB0aGUgZnVuY3Rpb24gbmFtZVxuaW5zdGVhZCBvZiB0aGUgZnVuY3Rpb24gb2JqZWN0LiAgTXVsdGlwbGUgZGVjb3JhdG9ycyBhcmUgYXBwbGllZCBpblxubmVzdGVkIGZhc2hpb24uIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIGNvZGVcblxuICAgQGYxKGFyZylcbiAgIEBmMlxuICAgZGVmIGZ1bmMoKTogcGFzc1xuXG5pcyBlcXVpdmFsZW50IHRvXG5cbiAgIGRlZiBmdW5jKCk6IHBhc3NcbiAgIGZ1bmMgPSBmMShhcmcpKGYyKGZ1bmMpKVxuXG5XaGVuIG9uZSBvciBtb3JlICpwYXJhbWV0ZXJzKiBoYXZlIHRoZSBmb3JtICpwYXJhbWV0ZXIqICI9IlxuKmV4cHJlc3Npb24qLCB0aGUgZnVuY3Rpb24gaXMgc2FpZCB0byBoYXZlICJkZWZhdWx0IHBhcmFtZXRlciB2YWx1ZXMuIlxuRm9yIGEgcGFyYW1ldGVyIHdpdGggYSBkZWZhdWx0IHZhbHVlLCB0aGUgY29ycmVzcG9uZGluZyAqYXJndW1lbnQqIG1heVxuYmUgb21pdHRlZCBmcm9tIGEgY2FsbCwgaW4gd2hpY2ggY2FzZSB0aGUgcGFyYW1ldGVyXCdzIGRlZmF1bHQgdmFsdWUgaXNcbnN1YnN0aXR1dGVkLiAgSWYgYSBwYXJhbWV0ZXIgaGFzIGEgZGVmYXVsdCB2YWx1ZSwgYWxsIGZvbGxvd2luZ1xucGFyYW1ldGVycyB1cCB1bnRpbCB0aGUgIiIqIiIgbXVzdCBhbHNvIGhhdmUgYSBkZWZhdWx0IHZhbHVlIC0tLSB0aGlzXG5pcyBhIHN5bnRhY3RpYyByZXN0cmljdGlvbiB0aGF0IGlzIG5vdCBleHByZXNzZWQgYnkgdGhlIGdyYW1tYXIuXG5cbioqRGVmYXVsdCBwYXJhbWV0ZXIgdmFsdWVzIGFyZSBldmFsdWF0ZWQgZnJvbSBsZWZ0IHRvIHJpZ2h0IHdoZW4gdGhlXG5mdW5jdGlvbiBkZWZpbml0aW9uIGlzIGV4ZWN1dGVkLioqIFRoaXMgbWVhbnMgdGhhdCB0aGUgZXhwcmVzc2lvbiBpc1xuZXZhbHVhdGVkIG9uY2UsIHdoZW4gdGhlIGZ1bmN0aW9uIGlzIGRlZmluZWQsIGFuZCB0aGF0IHRoZSBzYW1lICJwcmUtXG5jb21wdXRlZCIgdmFsdWUgaXMgdXNlZCBmb3IgZWFjaCBjYWxsLiAgVGhpcyBpcyBlc3BlY2lhbGx5IGltcG9ydGFudFxudG8gdW5kZXJzdGFuZCB3aGVuIGEgZGVmYXVsdCBwYXJhbWV0ZXIgaXMgYSBtdXRhYmxlIG9iamVjdCwgc3VjaCBhcyBhXG5saXN0IG9yIGEgZGljdGlvbmFyeTogaWYgdGhlIGZ1bmN0aW9uIG1vZGlmaWVzIHRoZSBvYmplY3QgKGUuZy4gYnlcbmFwcGVuZGluZyBhbiBpdGVtIHRvIGEgbGlzdCksIHRoZSBkZWZhdWx0IHZhbHVlIGlzIGluIGVmZmVjdCBtb2RpZmllZC5cblRoaXMgaXMgZ2VuZXJhbGx5IG5vdCB3aGF0IHdhcyBpbnRlbmRlZC4gIEEgd2F5IGFyb3VuZCB0aGlzIGlzIHRvIHVzZVxuIk5vbmUiIGFzIHRoZSBkZWZhdWx0LCBhbmQgZXhwbGljaXRseSB0ZXN0IGZvciBpdCBpbiB0aGUgYm9keSBvZiB0aGVcbmZ1bmN0aW9uLCBlLmcuOlxuXG4gICBkZWYgd2hhdHNfb25fdGhlX3RlbGx5KHBlbmd1aW49Tm9uZSk6XG4gICAgICAgaWYgcGVuZ3VpbiBpcyBOb25lOlxuICAgICAgICAgICBwZW5ndWluID0gW11cbiAgICAgICBwZW5ndWluLmFwcGVuZCgicHJvcGVydHkgb2YgdGhlIHpvbyIpXG4gICAgICAgcmV0dXJuIHBlbmd1aW5cblxuRnVuY3Rpb24gY2FsbCBzZW1hbnRpY3MgYXJlIGRlc2NyaWJlZCBpbiBtb3JlIGRldGFpbCBpbiBzZWN0aW9uXG4qQ2FsbHMqLiBBIGZ1bmN0aW9uIGNhbGwgYWx3YXlzIGFzc2lnbnMgdmFsdWVzIHRvIGFsbCBwYXJhbWV0ZXJzXG5tZW50aW9uZWQgaW4gdGhlIHBhcmFtZXRlciBsaXN0LCBlaXRoZXIgZnJvbSBwb3NpdGlvbiBhcmd1bWVudHMsIGZyb21cbmtleXdvcmQgYXJndW1lbnRzLCBvciBmcm9tIGRlZmF1bHQgdmFsdWVzLiAgSWYgdGhlIGZvcm1cbiIiKmlkZW50aWZpZXIiIiBpcyBwcmVzZW50LCBpdCBpcyBpbml0aWFsaXplZCB0byBhIHR1cGxlIHJlY2VpdmluZyBhbnlcbmV4Y2VzcyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMsIGRlZmF1bHRpbmcgdG8gdGhlIGVtcHR5IHR1cGxlLiAgSWYgdGhlXG5mb3JtICIiKippZGVudGlmaWVyIiIgaXMgcHJlc2VudCwgaXQgaXMgaW5pdGlhbGl6ZWQgdG8gYSBuZXdcbmRpY3Rpb25hcnkgcmVjZWl2aW5nIGFueSBleGNlc3Mga2V5d29yZCBhcmd1bWVudHMsIGRlZmF1bHRpbmcgdG8gYSBuZXdcbmVtcHR5IGRpY3Rpb25hcnkuIFBhcmFtZXRlcnMgYWZ0ZXIgIiIqIiIgb3IgIiIqaWRlbnRpZmllciIiIGFyZVxua2V5d29yZC1vbmx5IHBhcmFtZXRlcnMgYW5kIG1heSBvbmx5IGJlIHBhc3NlZCB1c2VkIGtleXdvcmQgYXJndW1lbnRzLlxuXG5QYXJhbWV0ZXJzIG1heSBoYXZlIGFubm90YXRpb25zIG9mIHRoZSBmb3JtICIiOiBleHByZXNzaW9uIiIgZm9sbG93aW5nXG50aGUgcGFyYW1ldGVyIG5hbWUuICBBbnkgcGFyYW1ldGVyIG1heSBoYXZlIGFuIGFubm90YXRpb24gZXZlbiB0aG9zZVxub2YgdGhlIGZvcm0gIippZGVudGlmaWVyIiBvciAiKippZGVudGlmaWVyIi4gIEZ1bmN0aW9ucyBtYXkgaGF2ZVxuInJldHVybiIgYW5ub3RhdGlvbiBvZiB0aGUgZm9ybSAiIi0+IGV4cHJlc3Npb24iIiBhZnRlciB0aGUgcGFyYW1ldGVyXG5saXN0LiAgVGhlc2UgYW5ub3RhdGlvbnMgY2FuIGJlIGFueSB2YWxpZCBQeXRob24gZXhwcmVzc2lvbiBhbmQgYXJlXG5ldmFsdWF0ZWQgd2hlbiB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbiBpcyBleGVjdXRlZC4gIEFubm90YXRpb25zIG1heVxuYmUgZXZhbHVhdGVkIGluIGEgZGlmZmVyZW50IG9yZGVyIHRoYW4gdGhleSBhcHBlYXIgaW4gdGhlIHNvdXJjZSBjb2RlLlxuVGhlIHByZXNlbmNlIG9mIGFubm90YXRpb25zIGRvZXMgbm90IGNoYW5nZSB0aGUgc2VtYW50aWNzIG9mIGFcbmZ1bmN0aW9uLiAgVGhlIGFubm90YXRpb24gdmFsdWVzIGFyZSBhdmFpbGFibGUgYXMgdmFsdWVzIG9mIGFcbmRpY3Rpb25hcnkga2V5ZWQgYnkgdGhlIHBhcmFtZXRlcnNcJyBuYW1lcyBpbiB0aGUgIl9fYW5ub3RhdGlvbnNfXyJcbmF0dHJpYnV0ZSBvZiB0aGUgZnVuY3Rpb24gb2JqZWN0LlxuXG5JdCBpcyBhbHNvIHBvc3NpYmxlIHRvIGNyZWF0ZSBhbm9ueW1vdXMgZnVuY3Rpb25zIChmdW5jdGlvbnMgbm90IGJvdW5kXG50byBhIG5hbWUpLCBmb3IgaW1tZWRpYXRlIHVzZSBpbiBleHByZXNzaW9ucy4gIFRoaXMgdXNlcyBsYW1iZGFcbmV4cHJlc3Npb25zLCBkZXNjcmliZWQgaW4gc2VjdGlvbiAqTGFtYmRhcyouICBOb3RlIHRoYXQgdGhlIGxhbWJkYVxuZXhwcmVzc2lvbiBpcyBtZXJlbHkgYSBzaG9ydGhhbmQgZm9yIGEgc2ltcGxpZmllZCBmdW5jdGlvbiBkZWZpbml0aW9uO1xuYSBmdW5jdGlvbiBkZWZpbmVkIGluIGEgIiJkZWYiIiBzdGF0ZW1lbnQgY2FuIGJlIHBhc3NlZCBhcm91bmQgb3JcbmFzc2lnbmVkIHRvIGFub3RoZXIgbmFtZSBqdXN0IGxpa2UgYSBmdW5jdGlvbiBkZWZpbmVkIGJ5IGEgbGFtYmRhXG5leHByZXNzaW9uLiAgVGhlICIiZGVmIiIgZm9ybSBpcyBhY3R1YWxseSBtb3JlIHBvd2VyZnVsIHNpbmNlIGl0XG5hbGxvd3MgdGhlIGV4ZWN1dGlvbiBvZiBtdWx0aXBsZSBzdGF0ZW1lbnRzIGFuZCBhbm5vdGF0aW9ucy5cblxuKipQcm9ncmFtbWVyXCdzIG5vdGU6KiogRnVuY3Rpb25zIGFyZSBmaXJzdC1jbGFzcyBvYmplY3RzLiAgQSAiImRlZiIiXG5zdGF0ZW1lbnQgZXhlY3V0ZWQgaW5zaWRlIGEgZnVuY3Rpb24gZGVmaW5pdGlvbiBkZWZpbmVzIGEgbG9jYWxcbmZ1bmN0aW9uIHRoYXQgY2FuIGJlIHJldHVybmVkIG9yIHBhc3NlZCBhcm91bmQuICBGcmVlIHZhcmlhYmxlcyB1c2VkXG5pbiB0aGUgbmVzdGVkIGZ1bmN0aW9uIGNhbiBhY2Nlc3MgdGhlIGxvY2FsIHZhcmlhYmxlcyBvZiB0aGUgZnVuY3Rpb25cbmNvbnRhaW5pbmcgdGhlIGRlZi4gIFNlZSBzZWN0aW9uICpOYW1pbmcgYW5kIGJpbmRpbmcqIGZvciBkZXRhaWxzLlxuXG5TZWUgYWxzbzogKipQRVAgMzEwNyoqIC0gRnVuY3Rpb24gQW5ub3RhdGlvbnNcblxuICAgICBUaGUgb3JpZ2luYWwgc3BlY2lmaWNhdGlvbiBmb3IgZnVuY3Rpb24gYW5ub3RhdGlvbnMuXG4nLAorICdnbG9iYWwnOiB1J1xuVGhlICJnbG9iYWwiIHN0YXRlbWVudFxuKioqKioqKioqKioqKioqKioqKioqKlxuXG4gICBnbG9iYWxfc3RtdCA6Oj0gImdsb2JhbCIgaWRlbnRpZmllciAoIiwiIGlkZW50aWZpZXIpKlxuXG5UaGUgImdsb2JhbCIgc3RhdGVtZW50IGlzIGEgZGVjbGFyYXRpb24gd2hpY2ggaG9sZHMgZm9yIHRoZSBlbnRpcmVcbmN1cnJlbnQgY29kZSBibG9jay4gIEl0IG1lYW5zIHRoYXQgdGhlIGxpc3RlZCBpZGVudGlmaWVycyBhcmUgdG8gYmVcbmludGVycHJldGVkIGFzIGdsb2JhbHMuICBJdCB3b3VsZCBiZSBpbXBvc3NpYmxlIHRvIGFzc2lnbiB0byBhIGdsb2JhbFxudmFyaWFibGUgd2l0aG91dCAiZ2xvYmFsIiwgYWx0aG91Z2ggZnJlZSB2YXJpYWJsZXMgbWF5IHJlZmVyIHRvXG5nbG9iYWxzIHdpdGhvdXQgYmVpbmcgZGVjbGFyZWQgZ2xvYmFsLlxuXG5OYW1lcyBsaXN0ZWQgaW4gYSAiZ2xvYmFsIiBzdGF0ZW1lbnQgbXVzdCBub3QgYmUgdXNlZCBpbiB0aGUgc2FtZSBjb2RlXG5ibG9jayB0ZXh0dWFsbHkgcHJlY2VkaW5nIHRoYXQgImdsb2JhbCIgc3RhdGVtZW50LlxuXG5OYW1lcyBsaXN0ZWQgaW4gYSAiZ2xvYmFsIiBzdGF0ZW1lbnQgbXVzdCBub3QgYmUgZGVmaW5lZCBhcyBmb3JtYWxcbnBhcmFtZXRlcnMgb3IgaW4gYSAiZm9yIiBsb29wIGNvbnRyb2wgdGFyZ2V0LCAiY2xhc3MiIGRlZmluaXRpb24sXG5mdW5jdGlvbiBkZWZpbml0aW9uLCBvciAiaW1wb3J0IiBzdGF0ZW1lbnQuXG5cbioqQ1B5dGhvbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWw6KiogVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gZG9lcyBub3RcbmVuZm9yY2UgdGhlIHR3byByZXN0cmljdGlvbnMsIGJ1dCBwcm9ncmFtcyBzaG91bGQgbm90IGFidXNlIHRoaXNcbmZyZWVkb20sIGFzIGZ1dHVyZSBpbXBsZW1lbnRhdGlvbnMgbWF5IGVuZm9yY2UgdGhlbSBvciBzaWxlbnRseSBjaGFuZ2VcbnRoZSBtZWFuaW5nIG9mIHRoZSBwcm9ncmFtLlxuXG4qKlByb2dyYW1tZXJcJ3Mgbm90ZToqKiB0aGUgImdsb2JhbCIgaXMgYSBkaXJlY3RpdmUgdG8gdGhlIHBhcnNlci4gIEl0XG5hcHBsaWVzIG9ubHkgdG8gY29kZSBwYXJzZWQgYXQgdGhlIHNhbWUgdGltZSBhcyB0aGUgImdsb2JhbCJcbnN0YXRlbWVudC4gSW4gcGFydGljdWxhciwgYSAiZ2xvYmFsIiBzdGF0ZW1lbnQgY29udGFpbmVkIGluIGEgc3RyaW5nXG5vciBjb2RlIG9iamVjdCBzdXBwbGllZCB0byB0aGUgYnVpbHQtaW4gImV4ZWMoKSIgZnVuY3Rpb24gZG9lcyBub3RcbmFmZmVjdCB0aGUgY29kZSBibG9jayAqY29udGFpbmluZyogdGhlIGZ1bmN0aW9uIGNhbGwsIGFuZCBjb2RlXG5jb250YWluZWQgaW4gc3VjaCBhIHN0cmluZyBpcyB1bmFmZmVjdGVkIGJ5ICJnbG9iYWwiIHN0YXRlbWVudHMgaW4gdGhlXG5jb2RlIGNvbnRhaW5pbmcgdGhlIGZ1bmN0aW9uIGNhbGwuICBUaGUgc2FtZSBhcHBsaWVzIHRvIHRoZSAiZXZhbCgpIlxuYW5kICJjb21waWxlKCkiIGZ1bmN0aW9ucy5cbicsCisgJ2lkLWNsYXNzZXMnOiB1J1xuUmVzZXJ2ZWQgY2xhc3NlcyBvZiBpZGVudGlmaWVyc1xuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG5DZXJ0YWluIGNsYXNzZXMgb2YgaWRlbnRpZmllcnMgKGJlc2lkZXMga2V5d29yZHMpIGhhdmUgc3BlY2lhbFxubWVhbmluZ3MuICBUaGVzZSBjbGFzc2VzIGFyZSBpZGVudGlmaWVkIGJ5IHRoZSBwYXR0ZXJucyBvZiBsZWFkaW5nIGFuZFxudHJhaWxpbmcgdW5kZXJzY29yZSBjaGFyYWN0ZXJzOlxuXG4iXyoiXG4gICBOb3QgaW1wb3J0ZWQgYnkgImZyb20gbW9kdWxlIGltcG9ydCAqIi4gIFRoZSBzcGVjaWFsIGlkZW50aWZpZXIgIl8iXG4gICBpcyB1c2VkIGluIHRoZSBpbnRlcmFjdGl2ZSBpbnRlcnByZXRlciB0byBzdG9yZSB0aGUgcmVzdWx0IG9mIHRoZVxuICAgbGFzdCBldmFsdWF0aW9uOyBpdCBpcyBzdG9yZWQgaW4gdGhlICJidWlsdGlucyIgbW9kdWxlLiAgV2hlbiBub3RcbiAgIGluIGludGVyYWN0aXZlIG1vZGUsICJfIiBoYXMgbm8gc3BlY2lhbCBtZWFuaW5nIGFuZCBpcyBub3QgZGVmaW5lZC5cbiAgIFNlZSBzZWN0aW9uICpUaGUgaW1wb3J0IHN0YXRlbWVudCouXG5cbiAgIE5vdGU6IFRoZSBuYW1lICJfIiBpcyBvZnRlbiB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGhcbiAgICAgaW50ZXJuYXRpb25hbGl6YXRpb247IHJlZmVyIHRvIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGVcbiAgICAgImdldHRleHQiIG1vZHVsZSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGlzIGNvbnZlbnRpb24uXG5cbiJfXypfXyJcbiAgIFN5c3RlbS1kZWZpbmVkIG5hbWVzLiBUaGVzZSBuYW1lcyBhcmUgZGVmaW5lZCBieSB0aGUgaW50ZXJwcmV0ZXJcbiAgIGFuZCBpdHMgaW1wbGVtZW50YXRpb24gKGluY2x1ZGluZyB0aGUgc3RhbmRhcmQgbGlicmFyeSkuICBDdXJyZW50XG4gICBzeXN0ZW0gbmFtZXMgYXJlIGRpc2N1c3NlZCBpbiB0aGUgKlNwZWNpYWwgbWV0aG9kIG5hbWVzKiBzZWN0aW9uXG4gICBhbmQgZWxzZXdoZXJlLiAgTW9yZSB3aWxsIGxpa2VseSBiZSBkZWZpbmVkIGluIGZ1dHVyZSB2ZXJzaW9ucyBvZlxuICAgUHl0aG9uLiAgKkFueSogdXNlIG9mICJfXypfXyIgbmFtZXMsIGluIGFueSBjb250ZXh0LCB0aGF0IGRvZXMgbm90XG4gICBmb2xsb3cgZXhwbGljaXRseSBkb2N1bWVudGVkIHVzZSwgaXMgc3ViamVjdCB0byBicmVha2FnZSB3aXRob3V0XG4gICB3YXJuaW5nLlxuXG4iX18qIlxuICAgQ2xhc3MtcHJpdmF0ZSBuYW1lcy4gIE5hbWVzIGluIHRoaXMgY2F0ZWdvcnksIHdoZW4gdXNlZCB3aXRoaW4gdGhlXG4gICBjb250ZXh0IG9mIGEgY2xhc3MgZGVmaW5pdGlvbiwgYXJlIHJlLXdyaXR0ZW4gdG8gdXNlIGEgbWFuZ2xlZCBmb3JtXG4gICB0byBoZWxwIGF2b2lkIG5hbWUgY2xhc2hlcyBiZXR3ZWVuICJwcml2YXRlIiBhdHRyaWJ1dGVzIG9mIGJhc2UgYW5kXG4gICBkZXJpdmVkIGNsYXNzZXMuIFNlZSBzZWN0aW9uICpJZGVudGlmaWVycyAoTmFtZXMpKi5cbicsCisgJ2lkZW50aWZpZXJzJzogdSdcbklkZW50aWZpZXJzIGFuZCBrZXl3b3Jkc1xuKioqKioqKioqKioqKioqKioqKioqKioqXG5cbklkZW50aWZpZXJzIChhbHNvIHJlZmVycmVkIHRvIGFzICpuYW1lcyopIGFyZSBkZXNjcmliZWQgYnkgdGhlXG5mb2xsb3dpbmcgbGV4aWNhbCBkZWZpbml0aW9ucy5cblxuVGhlIHN5bnRheCBvZiBpZGVudGlmaWVycyBpbiBQeXRob24gaXMgYmFzZWQgb24gdGhlIFVuaWNvZGUgc3RhbmRhcmRcbmFubmV4IFVBWC0zMSwgd2l0aCBlbGFib3JhdGlvbiBhbmQgY2hhbmdlcyBhcyBkZWZpbmVkIGJlbG93OyBzZWUgYWxzb1xuKipQRVAgMzEzMSoqIGZvciBmdXJ0aGVyIGRldGFpbHMuXG5cbldpdGhpbiB0aGUgQVNDSUkgcmFuZ2UgKFUrMDAwMS4uVSswMDdGKSwgdGhlIHZhbGlkIGNoYXJhY3RlcnMgZm9yXG5pZGVudGlmaWVycyBhcmUgdGhlIHNhbWUgYXMgaW4gUHl0aG9uIDIueDogdGhlIHVwcGVyY2FzZSBhbmQgbG93ZXJjYXNlXG5sZXR0ZXJzICJBIiB0aHJvdWdoICJaIiwgdGhlIHVuZGVyc2NvcmUgIl8iIGFuZCwgZXhjZXB0IGZvciB0aGUgZmlyc3RcbmNoYXJhY3RlciwgdGhlIGRpZ2l0cyAiMCIgdGhyb3VnaCAiOSIuXG5cblB5dGhvbiAzLjAgaW50cm9kdWNlcyBhZGRpdGlvbmFsIGNoYXJhY3RlcnMgZnJvbSBvdXRzaWRlIHRoZSBBU0NJSVxucmFuZ2UgKHNlZSAqKlBFUCAzMTMxKiopLiAgRm9yIHRoZXNlIGNoYXJhY3RlcnMsIHRoZSBjbGFzc2lmaWNhdGlvblxudXNlcyB0aGUgdmVyc2lvbiBvZiB0aGUgVW5pY29kZSBDaGFyYWN0ZXIgRGF0YWJhc2UgYXMgaW5jbHVkZWQgaW4gdGhlXG4idW5pY29kZWRhdGEiIG1vZHVsZS5cblxuSWRlbnRpZmllcnMgYXJlIHVubGltaXRlZCBpbiBsZW5ndGguICBDYXNlIGlzIHNpZ25pZmljYW50LlxuXG4gICBpZGVudGlmaWVyICAgOjo9IHhpZF9zdGFydCB4aWRfY29udGludWUqXG4gICBpZF9zdGFydCAgICAgOjo9IDxhbGwgY2hhcmFjdGVycyBpbiBnZW5lcmFsIGNhdGVnb3JpZXMgTHUsIExsLCBMdCwgTG0sIExvLCBObCwgdGhlIHVuZGVyc2NvcmUsIGFuZCBjaGFyYWN0ZXJzIHdpdGggdGhlIE90aGVyX0lEX1N0YXJ0IHByb3BlcnR5PlxuICAgaWRfY29udGludWUgIDo6PSA8YWxsIGNoYXJhY3RlcnMgaW4gaWRfc3RhcnQsIHBsdXMgY2hhcmFjdGVycyBpbiB0aGUgY2F0ZWdvcmllcyBNbiwgTWMsIE5kLCBQYyBhbmQgb3RoZXJzIHdpdGggdGhlIE90aGVyX0lEX0NvbnRpbnVlIHByb3BlcnR5PlxuICAgeGlkX3N0YXJ0ICAgIDo6PSA8YWxsIGNoYXJhY3RlcnMgaW4gaWRfc3RhcnQgd2hvc2UgTkZLQyBub3JtYWxpemF0aW9uIGlzIGluICJpZF9zdGFydCB4aWRfY29udGludWUqIj5cbiAgIHhpZF9jb250aW51ZSA6Oj0gPGFsbCBjaGFyYWN0ZXJzIGluIGlkX2NvbnRpbnVlIHdob3NlIE5GS0Mgbm9ybWFsaXphdGlvbiBpcyBpbiAiaWRfY29udGludWUqIj5cblxuVGhlIFVuaWNvZGUgY2F0ZWdvcnkgY29kZXMgbWVudGlvbmVkIGFib3ZlIHN0YW5kIGZvcjpcblxuKiAqTHUqIC0gdXBwZXJjYXNlIGxldHRlcnNcblxuKiAqTGwqIC0gbG93ZXJjYXNlIGxldHRlcnNcblxuKiAqTHQqIC0gdGl0bGVjYXNlIGxldHRlcnNcblxuKiAqTG0qIC0gbW9kaWZpZXIgbGV0dGVyc1xuXG4qICpMbyogLSBvdGhlciBsZXR0ZXJzXG5cbiogKk5sKiAtIGxldHRlciBudW1iZXJzXG5cbiogKk1uKiAtIG5vbnNwYWNpbmcgbWFya3NcblxuKiAqTWMqIC0gc3BhY2luZyBjb21iaW5pbmcgbWFya3NcblxuKiAqTmQqIC0gZGVjaW1hbCBudW1iZXJzXG5cbiogKlBjKiAtIGNvbm5lY3RvciBwdW5jdHVhdGlvbnNcblxuKiAqT3RoZXJfSURfU3RhcnQqIC0gZXhwbGljaXQgbGlzdCBvZiBjaGFyYWN0ZXJzIGluIFByb3BMaXN0LnR4dCB0b1xuICBzdXBwb3J0IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG5cbiogKk90aGVyX0lEX0NvbnRpbnVlKiAtIGxpa2V3aXNlXG5cbkFsbCBpZGVudGlmaWVycyBhcmUgY29udmVydGVkIGludG8gdGhlIG5vcm1hbCBmb3JtIE5GS0Mgd2hpbGUgcGFyc2luZztcbmNvbXBhcmlzb24gb2YgaWRlbnRpZmllcnMgaXMgYmFzZWQgb24gTkZLQy5cblxuQSBub24tbm9ybWF0aXZlIEhUTUwgZmlsZSBsaXN0aW5nIGFsbCB2YWxpZCBpZGVudGlmaWVyIGNoYXJhY3RlcnMgZm9yXG5Vbmljb2RlIDQuMSBjYW4gYmUgZm91bmQgYXQgaHR0cDovL3d3dy5kY2wuaHBpLnVuaS1cbnBvdHNkYW0uZGUvaG9tZS9sb2V3aXMvdGFibGUtMzEzMS5odG1sLlxuXG5cbktleXdvcmRzXG49PT09PT09PVxuXG5UaGUgZm9sbG93aW5nIGlkZW50aWZpZXJzIGFyZSB1c2VkIGFzIHJlc2VydmVkIHdvcmRzLCBvciAqa2V5d29yZHMqIG9mXG50aGUgbGFuZ3VhZ2UsIGFuZCBjYW5ub3QgYmUgdXNlZCBhcyBvcmRpbmFyeSBpZGVudGlmaWVycy4gIFRoZXkgbXVzdFxuYmUgc3BlbGxlZCBleGFjdGx5IGFzIHdyaXR0ZW4gaGVyZTpcblxuICAgRmFsc2UgICAgICBjbGFzcyAgICAgIGZpbmFsbHkgICAgaXMgICAgICAgICByZXR1cm5cbiAgIE5vbmUgICAgICAgY29udGludWUgICBmb3IgICAgICAgIGxhbWJkYSAgICAgdHJ5XG4gICBUcnVlICAgICAgIGRlZiAgICAgICAgZnJvbSAgICAgICBub25sb2NhbCAgIHdoaWxlXG4gICBhbmQgICAgICAgIGRlbCAgICAgICAgZ2xvYmFsICAgICBub3QgICAgICAgIHdpdGhcbiAgIGFzICAgICAgICAgZWxpZiAgICAgICBpZiAgICAgICAgIG9yICAgICAgICAgeWllbGRcbiAgIGFzc2VydCAgICAgZWxzZSAgICAgICBpbXBvcnQgICAgIHBhc3NcbiAgIGJyZWFrICAgICAgZXhjZXB0ICAgICBpbiAgICAgICAgIHJhaXNlXG5cblxuUmVzZXJ2ZWQgY2xhc3NlcyBvZiBpZGVudGlmaWVyc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5DZXJ0YWluIGNsYXNzZXMgb2YgaWRlbnRpZmllcnMgKGJlc2lkZXMga2V5d29yZHMpIGhhdmUgc3BlY2lhbFxubWVhbmluZ3MuICBUaGVzZSBjbGFzc2VzIGFyZSBpZGVudGlmaWVkIGJ5IHRoZSBwYXR0ZXJucyBvZiBsZWFkaW5nIGFuZFxudHJhaWxpbmcgdW5kZXJzY29yZSBjaGFyYWN0ZXJzOlxuXG4iXyoiXG4gICBOb3QgaW1wb3J0ZWQgYnkgImZyb20gbW9kdWxlIGltcG9ydCAqIi4gIFRoZSBzcGVjaWFsIGlkZW50aWZpZXIgIl8iXG4gICBpcyB1c2VkIGluIHRoZSBpbnRlcmFjdGl2ZSBpbnRlcnByZXRlciB0byBzdG9yZSB0aGUgcmVzdWx0IG9mIHRoZVxuICAgbGFzdCBldmFsdWF0aW9uOyBpdCBpcyBzdG9yZWQgaW4gdGhlICJidWlsdGlucyIgbW9kdWxlLiAgV2hlbiBub3RcbiAgIGluIGludGVyYWN0aXZlIG1vZGUsICJfIiBoYXMgbm8gc3BlY2lhbCBtZWFuaW5nIGFuZCBpcyBub3QgZGVmaW5lZC5cbiAgIFNlZSBzZWN0aW9uICpUaGUgaW1wb3J0IHN0YXRlbWVudCouXG5cbiAgIE5vdGU6IFRoZSBuYW1lICJfIiBpcyBvZnRlbiB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGhcbiAgICAgaW50ZXJuYXRpb25hbGl6YXRpb247IHJlZmVyIHRvIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGVcbiAgICAgImdldHRleHQiIG1vZHVsZSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGlzIGNvbnZlbnRpb24uXG5cbiJfXypfXyJcbiAgIFN5c3RlbS1kZWZpbmVkIG5hbWVzLiBUaGVzZSBuYW1lcyBhcmUgZGVmaW5lZCBieSB0aGUgaW50ZXJwcmV0ZXJcbiAgIGFuZCBpdHMgaW1wbGVtZW50YXRpb24gKGluY2x1ZGluZyB0aGUgc3RhbmRhcmQgbGlicmFyeSkuICBDdXJyZW50XG4gICBzeXN0ZW0gbmFtZXMgYXJlIGRpc2N1c3NlZCBpbiB0aGUgKlNwZWNpYWwgbWV0aG9kIG5hbWVzKiBzZWN0aW9uXG4gICBhbmQgZWxzZXdoZXJlLiAgTW9yZSB3aWxsIGxpa2VseSBiZSBkZWZpbmVkIGluIGZ1dHVyZSB2ZXJzaW9ucyBvZlxuICAgUHl0aG9uLiAgKkFueSogdXNlIG9mICJfXypfXyIgbmFtZXMsIGluIGFueSBjb250ZXh0LCB0aGF0IGRvZXMgbm90XG4gICBmb2xsb3cgZXhwbGljaXRseSBkb2N1bWVudGVkIHVzZSwgaXMgc3ViamVjdCB0byBicmVha2FnZSB3aXRob3V0XG4gICB3YXJuaW5nLlxuXG4iX18qIlxuICAgQ2xhc3MtcHJpdmF0ZSBuYW1lcy4gIE5hbWVzIGluIHRoaXMgY2F0ZWdvcnksIHdoZW4gdXNlZCB3aXRoaW4gdGhlXG4gICBjb250ZXh0IG9mIGEgY2xhc3MgZGVmaW5pdGlvbiwgYXJlIHJlLXdyaXR0ZW4gdG8gdXNlIGEgbWFuZ2xlZCBmb3JtXG4gICB0byBoZWxwIGF2b2lkIG5hbWUgY2xhc2hlcyBiZXR3ZWVuICJwcml2YXRlIiBhdHRyaWJ1dGVzIG9mIGJhc2UgYW5kXG4gICBkZXJpdmVkIGNsYXNzZXMuIFNlZSBzZWN0aW9uICpJZGVudGlmaWVycyAoTmFtZXMpKi5cbicsCisgJ2lmJzogdSdcblRoZSAiaWYiIHN0YXRlbWVudFxuKioqKioqKioqKioqKioqKioqXG5cblRoZSAiaWYiIHN0YXRlbWVudCBpcyB1c2VkIGZvciBjb25kaXRpb25hbCBleGVjdXRpb246XG5cbiAgIGlmX3N0bXQgOjo9ICJpZiIgZXhwcmVzc2lvbiAiOiIgc3VpdGVcbiAgICAgICAgICAgICAgICggImVsaWYiIGV4cHJlc3Npb24gIjoiIHN1aXRlICkqXG4gICAgICAgICAgICAgICBbImVsc2UiICI6IiBzdWl0ZV1cblxuSXQgc2VsZWN0cyBleGFjdGx5IG9uZSBvZiB0aGUgc3VpdGVzIGJ5IGV2YWx1YXRpbmcgdGhlIGV4cHJlc3Npb25zIG9uZVxuYnkgb25lIHVudGlsIG9uZSBpcyBmb3VuZCB0byBiZSB0cnVlIChzZWUgc2VjdGlvbiAqQm9vbGVhbiBvcGVyYXRpb25zKlxuZm9yIHRoZSBkZWZpbml0aW9uIG9mIHRydWUgYW5kIGZhbHNlKTsgdGhlbiB0aGF0IHN1aXRlIGlzIGV4ZWN1dGVkXG4oYW5kIG5vIG90aGVyIHBhcnQgb2YgdGhlICJpZiIgc3RhdGVtZW50IGlzIGV4ZWN1dGVkIG9yIGV2YWx1YXRlZCkuXG5JZiBhbGwgZXhwcmVzc2lvbnMgYXJlIGZhbHNlLCB0aGUgc3VpdGUgb2YgdGhlICJlbHNlIiBjbGF1c2UsIGlmXG5wcmVzZW50LCBpcyBleGVjdXRlZC5cbicsCisgJ2ltYWdpbmFyeSc6IHUnXG5JbWFnaW5hcnkgbGl0ZXJhbHNcbioqKioqKioqKioqKioqKioqKlxuXG5JbWFnaW5hcnkgbGl0ZXJhbHMgYXJlIGRlc2NyaWJlZCBieSB0aGUgZm9sbG93aW5nIGxleGljYWwgZGVmaW5pdGlvbnM6XG5cbiAgIGltYWdudW1iZXIgOjo9IChmbG9hdG51bWJlciB8IGludHBhcnQpICgiaiIgfCAiSiIpXG5cbkFuIGltYWdpbmFyeSBsaXRlcmFsIHlpZWxkcyBhIGNvbXBsZXggbnVtYmVyIHdpdGggYSByZWFsIHBhcnQgb2YgMC4wLlxuQ29tcGxleCBudW1iZXJzIGFyZSByZXByZXNlbnRlZCBhcyBhIHBhaXIgb2YgZmxvYXRpbmcgcG9pbnQgbnVtYmVyc1xuYW5kIGhhdmUgdGhlIHNhbWUgcmVzdHJpY3Rpb25zIG9uIHRoZWlyIHJhbmdlLiAgVG8gY3JlYXRlIGEgY29tcGxleFxubnVtYmVyIHdpdGggYSBub256ZXJvIHJlYWwgcGFydCwgYWRkIGEgZmxvYXRpbmcgcG9pbnQgbnVtYmVyIHRvIGl0LFxuZS5nLiwgIigzKzRqKSIuICBTb21lIGV4YW1wbGVzIG9mIGltYWdpbmFyeSBsaXRlcmFsczpcblxuICAgMy4xNGogICAxMC5qICAgIDEwaiAgICAgLjAwMWogICAxZTEwMGogIDMuMTRlLTEwalxuJywKKyAnaW1wb3J0JzogdSdcblRoZSAiaW1wb3J0IiBzdGF0ZW1lbnRcbioqKioqKioqKioqKioqKioqKioqKipcblxuICAgaW1wb3J0X3N0bXQgICAgIDo6PSAiaW1wb3J0IiBtb2R1bGUgWyJhcyIgbmFtZV0gKCAiLCIgbW9kdWxlIFsiYXMiIG5hbWVdICkqXG4gICAgICAgICAgICAgICAgICAgfCAiZnJvbSIgcmVsYXRpdmVfbW9kdWxlICJpbXBvcnQiIGlkZW50aWZpZXIgWyJhcyIgbmFtZV1cbiAgICAgICAgICAgICAgICAgICAoICIsIiBpZGVudGlmaWVyIFsiYXMiIG5hbWVdICkqXG4gICAgICAgICAgICAgICAgICAgfCAiZnJvbSIgcmVsYXRpdmVfbW9kdWxlICJpbXBvcnQiICIoIiBpZGVudGlmaWVyIFsiYXMiIG5hbWVdXG4gICAgICAgICAgICAgICAgICAgKCAiLCIgaWRlbnRpZmllciBbImFzIiBuYW1lXSApKiBbIiwiXSAiKSJcbiAgICAgICAgICAgICAgICAgICB8ICJmcm9tIiBtb2R1bGUgImltcG9ydCIgIioiXG4gICBtb2R1bGUgICAgICAgICAgOjo9IChpZGVudGlmaWVyICIuIikqIGlkZW50aWZpZXJcbiAgIHJlbGF0aXZlX21vZHVsZSA6Oj0gIi4iKiBtb2R1bGUgfCAiLiIrXG4gICBuYW1lICAgICAgICAgICAgOjo9IGlkZW50aWZpZXJcblxuVGhlIGJhc2ljIGltcG9ydCBzdGF0ZW1lbnQgKG5vICJmcm9tIiBjbGF1c2UpIGlzIGV4ZWN1dGVkIGluIHR3b1xuc3RlcHM6XG5cbjEuIGZpbmQgYSBtb2R1bGUsIGxvYWRpbmcgYW5kIGluaXRpYWxpemluZyBpdCBpZiBuZWNlc3NhcnlcblxuMi4gZGVmaW5lIGEgbmFtZSBvciBuYW1lcyBpbiB0aGUgbG9jYWwgbmFtZXNwYWNlIGZvciB0aGUgc2NvcGVcbiAgIHdoZXJlIHRoZSAiaW1wb3J0IiBzdGF0ZW1lbnQgb2NjdXJzLlxuXG5XaGVuIHRoZSBzdGF0ZW1lbnQgY29udGFpbnMgbXVsdGlwbGUgY2xhdXNlcyAoc2VwYXJhdGVkIGJ5IGNvbW1hcykgdGhlXG50d28gc3RlcHMgYXJlIGNhcnJpZWQgb3V0IHNlcGFyYXRlbHkgZm9yIGVhY2ggY2xhdXNlLCBqdXN0IGFzIHRob3VnaFxudGhlIGNsYXVzZXMgaGFkIGJlZW4gc2VwYXJhdGVkIG91dCBpbnRvIGluZGl2aWRpdWFsIGltcG9ydCBzdGF0ZW1lbnRzLlxuXG5UaGUgZGV0YWlscyBvZiB0aGUgZmlyc3Qgc3RlcCwgZmluZGluZyBhbmQgbG9hZGluZyBtb2R1bGVzIGFyZVxuZGVzY3JpYmVkIGluIGdyZWF0ZXIgZGV0YWlsIGluIHRoZSBzZWN0aW9uIG9uIHRoZSAqaW1wb3J0IHN5c3RlbSosXG53aGljaCBhbHNvIGRlc2NyaWJlcyB0aGUgdmFyaW91cyB0eXBlcyBvZiBwYWNrYWdlcyBhbmQgbW9kdWxlcyB0aGF0XG5jYW4gYmUgaW1wb3J0ZWQsIGFzIHdlbGwgYXMgYWxsIHRoZSBob29rcyB0aGF0IGNhbiBiZSB1c2VkIHRvXG5jdXN0b21pemUgdGhlIGltcG9ydCBzeXN0ZW0uIE5vdGUgdGhhdCBmYWlsdXJlcyBpbiB0aGlzIHN0ZXAgbWF5XG5pbmRpY2F0ZSBlaXRoZXIgdGhhdCB0aGUgbW9kdWxlIGNvdWxkIG5vdCBiZSBsb2NhdGVkLCAqb3IqIHRoYXQgYW5cbmVycm9yIG9jY3VycmVkIHdoaWxlIGluaXRpYWxpemluZyB0aGUgbW9kdWxlLCB3aGljaCBpbmNsdWRlcyBleGVjdXRpb25cbm9mIHRoZSBtb2R1bGVcJ3MgY29kZS5cblxuSWYgdGhlIHJlcXVlc3RlZCBtb2R1bGUgaXMgcmV0cmlldmVkIHN1Y2Nlc3NmdWxseSwgaXQgd2lsbCBiZSBtYWRlXG5hdmFpbGFibGUgaW4gdGhlIGxvY2FsIG5hbWVzcGFjZSBpbiBvbmUgb2YgdGhyZWUgd2F5czpcblxuKiBJZiB0aGUgbW9kdWxlIG5hbWUgaXMgZm9sbG93ZWQgYnkgImFzIiwgdGhlbiB0aGUgbmFtZSBmb2xsb3dpbmdcbiAgImFzIiBpcyBib3VuZCBkaXJlY3RseSB0byB0aGUgaW1wb3J0ZWQgbW9kdWxlLlxuXG4qIElmIG5vIG90aGVyIG5hbWUgaXMgc3BlY2lmaWVkLCBhbmQgdGhlIG1vZHVsZSBiZWluZyBpbXBvcnRlZCBpcyBhXG4gIHRvcCBsZXZlbCBtb2R1bGUsIHRoZSBtb2R1bGVcJ3MgbmFtZSBpcyBib3VuZCBpbiB0aGUgbG9jYWwgbmFtZXNwYWNlXG4gIGFzIGEgcmVmZXJlbmNlIHRvIHRoZSBpbXBvcnRlZCBtb2R1bGVcblxuKiBJZiB0aGUgbW9kdWxlIGJlaW5nIGltcG9ydGVkIGlzICpub3QqIGEgdG9wIGxldmVsIG1vZHVsZSwgdGhlbiB0aGVcbiAgbmFtZSBvZiB0aGUgdG9wIGxldmVsIHBhY2thZ2UgdGhhdCBjb250YWlucyB0aGUgbW9kdWxlIGlzIGJvdW5kIGluXG4gIHRoZSBsb2NhbCBuYW1lc3BhY2UgYXMgYSByZWZlcmVuY2UgdG8gdGhlIHRvcCBsZXZlbCBwYWNrYWdlLiBUaGVcbiAgaW1wb3J0ZWQgbW9kdWxlIG11c3QgYmUgYWNjZXNzZWQgdXNpbmcgaXRzIGZ1bGwgcXVhbGlmaWVkIG5hbWVcbiAgcmF0aGVyIHRoYW4gZGlyZWN0bHlcblxuVGhlICJmcm9tIiBmb3JtIHVzZXMgYSBzbGlnaHRseSBtb3JlIGNvbXBsZXggcHJvY2VzczpcblxuMS4gZmluZCB0aGUgbW9kdWxlIHNwZWNpZmllZCBpbiB0aGUgImZyb20iIGNsYXVzZSwgbG9hZGluZyBhbmRcbiAgIGluaXRpYWxpemluZyBpdCBpZiBuZWNlc3Nhcnk7XG5cbjIuIGZvciBlYWNoIG9mIHRoZSBpZGVudGlmaWVycyBzcGVjaWZpZWQgaW4gdGhlICJpbXBvcnQiIGNsYXVzZXM6XG5cbiAgIDEuIGNoZWNrIGlmIHRoZSBpbXBvcnRlZCBtb2R1bGUgaGFzIGFuIGF0dHJpYnV0ZSBieSB0aGF0IG5hbWVcblxuICAgMi4gaWYgbm90LCBhdHRlbXB0IHRvIGltcG9ydCBhIHN1Ym1vZHVsZSB3aXRoIHRoYXQgbmFtZSBhbmQgdGhlblxuICAgICAgY2hlY2sgdGhlIGltcG9ydGVkIG1vZHVsZSBhZ2FpbiBmb3IgdGhhdCBhdHRyaWJ1dGVcblxuICAgMy4gaWYgdGhlIGF0dHJpYnV0ZSBpcyBub3QgZm91bmQsICJJbXBvcnRFcnJvciIgaXMgcmFpc2VkLlxuXG4gICA0LiBvdGhlcndpc2UsIGEgcmVmZXJlbmNlIHRvIHRoYXQgdmFsdWUgaXMgc3RvcmVkIGluIHRoZSBsb2NhbFxuICAgICAgbmFtZXNwYWNlLCB1c2luZyB0aGUgbmFtZSBpbiB0aGUgImFzIiBjbGF1c2UgaWYgaXQgaXMgcHJlc2VudCxcbiAgICAgIG90aGVyd2lzZSB1c2luZyB0aGUgYXR0cmlidXRlIG5hbWVcblxuRXhhbXBsZXM6XG5cbiAgIGltcG9ydCBmb28gICAgICAgICAgICAgICAgICMgZm9vIGltcG9ydGVkIGFuZCBib3VuZCBsb2NhbGx5XG4gICBpbXBvcnQgZm9vLmJhci5iYXogICAgICAgICAjIGZvby5iYXIuYmF6IGltcG9ydGVkLCBmb28gYm91bmQgbG9jYWxseVxuICAgaW1wb3J0IGZvby5iYXIuYmF6IGFzIGZiYiAgIyBmb28uYmFyLmJheiBpbXBvcnRlZCBhbmQgYm91bmQgYXMgZmJiXG4gICBmcm9tIGZvby5iYXIgaW1wb3J0IGJheiAgICAjIGZvby5iYXIuYmF6IGltcG9ydGVkIGFuZCBib3VuZCBhcyBiYXpcbiAgIGZyb20gZm9vIGltcG9ydCBhdHRyICAgICAgICMgZm9vIGltcG9ydGVkIGFuZCBmb28uYXR0ciBib3VuZCBhcyBhdHRyXG5cbklmIHRoZSBsaXN0IG9mIGlkZW50aWZpZXJzIGlzIHJlcGxhY2VkIGJ5IGEgc3RhciAoIlwnKlwnIiksIGFsbCBwdWJsaWNcbm5hbWVzIGRlZmluZWQgaW4gdGhlIG1vZHVsZSBhcmUgYm91bmQgaW4gdGhlIGxvY2FsIG5hbWVzcGFjZSBmb3IgdGhlXG5zY29wZSB3aGVyZSB0aGUgImltcG9ydCIgc3RhdGVtZW50IG9jY3Vycy5cblxuVGhlICpwdWJsaWMgbmFtZXMqIGRlZmluZWQgYnkgYSBtb2R1bGUgYXJlIGRldGVybWluZWQgYnkgY2hlY2tpbmcgdGhlXG5tb2R1bGVcJ3MgbmFtZXNwYWNlIGZvciBhIHZhcmlhYmxlIG5hbWVkICJfX2FsbF9fIjsgaWYgZGVmaW5lZCwgaXQgbXVzdFxuYmUgYSBzZXF1ZW5jZSBvZiBzdHJpbmdzIHdoaWNoIGFyZSBuYW1lcyBkZWZpbmVkIG9yIGltcG9ydGVkIGJ5IHRoYXRcbm1vZHVsZS4gIFRoZSBuYW1lcyBnaXZlbiBpbiAiX19hbGxfXyIgYXJlIGFsbCBjb25zaWRlcmVkIHB1YmxpYyBhbmRcbmFyZSByZXF1aXJlZCB0byBleGlzdC4gIElmICJfX2FsbF9fIiBpcyBub3QgZGVmaW5lZCwgdGhlIHNldCBvZiBwdWJsaWNcbm5hbWVzIGluY2x1ZGVzIGFsbCBuYW1lcyBmb3VuZCBpbiB0aGUgbW9kdWxlXCdzIG5hbWVzcGFjZSB3aGljaCBkbyBub3RcbmJlZ2luIHdpdGggYW4gdW5kZXJzY29yZSBjaGFyYWN0ZXIgKCJcJ19cJyIpLiAgIl9fYWxsX18iIHNob3VsZCBjb250YWluXG50aGUgZW50aXJlIHB1YmxpYyBBUEkuIEl0IGlzIGludGVuZGVkIHRvIGF2b2lkIGFjY2lkZW50YWxseSBleHBvcnRpbmdcbml0ZW1zIHRoYXQgYXJlIG5vdCBwYXJ0IG9mIHRoZSBBUEkgKHN1Y2ggYXMgbGlicmFyeSBtb2R1bGVzIHdoaWNoIHdlcmVcbmltcG9ydGVkIGFuZCB1c2VkIHdpdGhpbiB0aGUgbW9kdWxlKS5cblxuVGhlIHdpbGQgY2FyZCBmb3JtIG9mIGltcG9ydCAtLS0gImZyb20gbW9kdWxlIGltcG9ydCAqIiAtLS0gaXMgb25seVxuYWxsb3dlZCBhdCB0aGUgbW9kdWxlIGxldmVsLiAgQXR0ZW1wdGluZyB0byB1c2UgaXQgaW4gY2xhc3Mgb3JcbmZ1bmN0aW9uIGRlZmluaXRpb25zIHdpbGwgcmFpc2UgYSAiU3ludGF4RXJyb3IiLlxuXG5XaGVuIHNwZWNpZnlpbmcgd2hhdCBtb2R1bGUgdG8gaW1wb3J0IHlvdSBkbyBub3QgaGF2ZSB0byBzcGVjaWZ5IHRoZVxuYWJzb2x1dGUgbmFtZSBvZiB0aGUgbW9kdWxlLiBXaGVuIGEgbW9kdWxlIG9yIHBhY2thZ2UgaXMgY29udGFpbmVkXG53aXRoaW4gYW5vdGhlciBwYWNrYWdlIGl0IGlzIHBvc3NpYmxlIHRvIG1ha2UgYSByZWxhdGl2ZSBpbXBvcnQgd2l0aGluXG50aGUgc2FtZSB0b3AgcGFja2FnZSB3aXRob3V0IGhhdmluZyB0byBtZW50aW9uIHRoZSBwYWNrYWdlIG5hbWUuIEJ5XG51c2luZyBsZWFkaW5nIGRvdHMgaW4gdGhlIHNwZWNpZmllZCBtb2R1bGUgb3IgcGFja2FnZSBhZnRlciAiZnJvbSIgeW91XG5jYW4gc3BlY2lmeSBob3cgaGlnaCB0byB0cmF2ZXJzZSB1cCB0aGUgY3VycmVudCBwYWNrYWdlIGhpZXJhcmNoeVxud2l0aG91dCBzcGVjaWZ5aW5nIGV4YWN0IG5hbWVzLiBPbmUgbGVhZGluZyBkb3QgbWVhbnMgdGhlIGN1cnJlbnRcbnBhY2thZ2Ugd2hlcmUgdGhlIG1vZHVsZSBtYWtpbmcgdGhlIGltcG9ydCBleGlzdHMuIFR3byBkb3RzIG1lYW5zIHVwXG5vbmUgcGFja2FnZSBsZXZlbC4gVGhyZWUgZG90cyBpcyB1cCB0d28gbGV2ZWxzLCBldGMuIFNvIGlmIHlvdSBleGVjdXRlXG4iZnJvbSAuIGltcG9ydCBtb2QiIGZyb20gYSBtb2R1bGUgaW4gdGhlICJwa2ciIHBhY2thZ2UgdGhlbiB5b3Ugd2lsbFxuZW5kIHVwIGltcG9ydGluZyAicGtnLm1vZCIuIElmIHlvdSBleGVjdXRlICJmcm9tIC4uc3VicGtnMiBpbXBvcnQgbW9kIlxuZnJvbSB3aXRoaW4gInBrZy5zdWJwa2cxIiB5b3Ugd2lsbCBpbXBvcnQgInBrZy5zdWJwa2cyLm1vZCIuIFRoZVxuc3BlY2lmaWNhdGlvbiBmb3IgcmVsYXRpdmUgaW1wb3J0cyBpcyBjb250YWluZWQgd2l0aGluICoqUEVQIDMyOCoqLlxuXG4iaW1wb3J0bGliLmltcG9ydF9tb2R1bGUoKSIgaXMgcHJvdmlkZWQgdG8gc3VwcG9ydCBhcHBsaWNhdGlvbnMgdGhhdFxuZGV0ZXJtaW5lIGR5bmFtaWNhbGx5IHRoZSBtb2R1bGVzIHRvIGJlIGxvYWRlZC5cblxuXG5GdXR1cmUgc3RhdGVtZW50c1xuPT09PT09PT09PT09PT09PT1cblxuQSAqZnV0dXJlIHN0YXRlbWVudCogaXMgYSBkaXJlY3RpdmUgdG8gdGhlIGNvbXBpbGVyIHRoYXQgYSBwYXJ0aWN1bGFyXG5tb2R1bGUgc2hvdWxkIGJlIGNvbXBpbGVkIHVzaW5nIHN5bnRheCBvciBzZW1hbnRpY3MgdGhhdCB3aWxsIGJlXG5hdmFpbGFibGUgaW4gYSBzcGVjaWZpZWQgZnV0dXJlIHJlbGVhc2Ugb2YgUHl0aG9uIHdoZXJlIHRoZSBmZWF0dXJlXG5iZWNvbWVzIHN0YW5kYXJkLlxuXG5UaGUgZnV0dXJlIHN0YXRlbWVudCBpcyBpbnRlbmRlZCB0byBlYXNlIG1pZ3JhdGlvbiB0byBmdXR1cmUgdmVyc2lvbnNcbm9mIFB5dGhvbiB0aGF0IGludHJvZHVjZSBpbmNvbXBhdGlibGUgY2hhbmdlcyB0byB0aGUgbGFuZ3VhZ2UuICBJdFxuYWxsb3dzIHVzZSBvZiB0aGUgbmV3IGZlYXR1cmVzIG9uIGEgcGVyLW1vZHVsZSBiYXNpcyBiZWZvcmUgdGhlXG5yZWxlYXNlIGluIHdoaWNoIHRoZSBmZWF0dXJlIGJlY29tZXMgc3RhbmRhcmQuXG5cbiAgIGZ1dHVyZV9zdGF0ZW1lbnQgOjo9ICJmcm9tIiAiX19mdXR1cmVfXyIgImltcG9ydCIgZmVhdHVyZSBbImFzIiBuYW1lXVxuICAgICAgICAgICAgICAgICAgICAgICAgKCIsIiBmZWF0dXJlIFsiYXMiIG5hbWVdKSpcbiAgICAgICAgICAgICAgICAgICAgICAgIHwgImZyb20iICJfX2Z1dHVyZV9fIiAiaW1wb3J0IiAiKCIgZmVhdHVyZSBbImFzIiBuYW1lXVxuICAgICAgICAgICAgICAgICAgICAgICAgKCIsIiBmZWF0dXJlIFsiYXMiIG5hbWVdKSogWyIsIl0gIikiXG4gICBmZWF0dXJlICAgICAgICAgIDo6PSBpZGVudGlmaWVyXG4gICBuYW1lICAgICAgICAgICAgIDo6PSBpZGVudGlmaWVyXG5cbkEgZnV0dXJlIHN0YXRlbWVudCBtdXN0IGFwcGVhciBuZWFyIHRoZSB0b3Agb2YgdGhlIG1vZHVsZS4gIFRoZSBvbmx5XG5saW5lcyB0aGF0IGNhbiBhcHBlYXIgYmVmb3JlIGEgZnV0dXJlIHN0YXRlbWVudCBhcmU6XG5cbiogdGhlIG1vZHVsZSBkb2NzdHJpbmcgKGlmIGFueSksXG5cbiogY29tbWVudHMsXG5cbiogYmxhbmsgbGluZXMsIGFuZFxuXG4qIG90aGVyIGZ1dHVyZSBzdGF0ZW1lbnRzLlxuXG5UaGUgZmVhdHVyZXMgcmVjb2duaXplZCBieSBQeXRob24gMy4wIGFyZSAiYWJzb2x1dGVfaW1wb3J0IixcbiJkaXZpc2lvbiIsICJnZW5lcmF0b3JzIiwgInVuaWNvZGVfbGl0ZXJhbHMiLCAicHJpbnRfZnVuY3Rpb24iLFxuIm5lc3RlZF9zY29wZXMiIGFuZCAid2l0aF9zdGF0ZW1lbnQiLiAgVGhleSBhcmUgYWxsIHJlZHVuZGFudCBiZWNhdXNlXG50aGV5IGFyZSBhbHdheXMgZW5hYmxlZCwgYW5kIG9ubHkga2VwdCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuXG5cbkEgZnV0dXJlIHN0YXRlbWVudCBpcyByZWNvZ25pemVkIGFuZCB0cmVhdGVkIHNwZWNpYWxseSBhdCBjb21waWxlXG50aW1lOiBDaGFuZ2VzIHRvIHRoZSBzZW1hbnRpY3Mgb2YgY29yZSBjb25zdHJ1Y3RzIGFyZSBvZnRlblxuaW1wbGVtZW50ZWQgYnkgZ2VuZXJhdGluZyBkaWZmZXJlbnQgY29kZS4gIEl0IG1heSBldmVuIGJlIHRoZSBjYXNlXG50aGF0IGEgbmV3IGZlYXR1cmUgaW50cm9kdWNlcyBuZXcgaW5jb21wYXRpYmxlIHN5bnRheCAoc3VjaCBhcyBhIG5ld1xucmVzZXJ2ZWQgd29yZCksIGluIHdoaWNoIGNhc2UgdGhlIGNvbXBpbGVyIG1heSBuZWVkIHRvIHBhcnNlIHRoZVxubW9kdWxlIGRpZmZlcmVudGx5LiAgU3VjaCBkZWNpc2lvbnMgY2Fubm90IGJlIHB1c2hlZCBvZmYgdW50aWxcbnJ1bnRpbWUuXG5cbkZvciBhbnkgZ2l2ZW4gcmVsZWFzZSwgdGhlIGNvbXBpbGVyIGtub3dzIHdoaWNoIGZlYXR1cmUgbmFtZXMgaGF2ZVxuYmVlbiBkZWZpbmVkLCBhbmQgcmFpc2VzIGEgY29tcGlsZS10aW1lIGVycm9yIGlmIGEgZnV0dXJlIHN0YXRlbWVudFxuY29udGFpbnMgYSBmZWF0dXJlIG5vdCBrbm93biB0byBpdC5cblxuVGhlIGRpcmVjdCBydW50aW1lIHNlbWFudGljcyBhcmUgdGhlIHNhbWUgYXMgZm9yIGFueSBpbXBvcnQgc3RhdGVtZW50OlxudGhlcmUgaXMgYSBzdGFuZGFyZCBtb2R1bGUgIl9fZnV0dXJlX18iLCBkZXNjcmliZWQgbGF0ZXIsIGFuZCBpdCB3aWxsXG5iZSBpbXBvcnRlZCBpbiB0aGUgdXN1YWwgd2F5IGF0IHRoZSB0aW1lIHRoZSBmdXR1cmUgc3RhdGVtZW50IGlzXG5leGVjdXRlZC5cblxuVGhlIGludGVyZXN0aW5nIHJ1bnRpbWUgc2VtYW50aWNzIGRlcGVuZCBvbiB0aGUgc3BlY2lmaWMgZmVhdHVyZVxuZW5hYmxlZCBieSB0aGUgZnV0dXJlIHN0YXRlbWVudC5cblxuTm90ZSB0aGF0IHRoZXJlIGlzIG5vdGhpbmcgc3BlY2lhbCBhYm91dCB0aGUgc3RhdGVtZW50OlxuXG4gICBpbXBvcnQgX19mdXR1cmVfXyBbYXMgbmFtZV1cblxuVGhhdCBpcyBub3QgYSBmdXR1cmUgc3RhdGVtZW50OyBpdFwncyBhbiBvcmRpbmFyeSBpbXBvcnQgc3RhdGVtZW50IHdpdGhcbm5vIHNwZWNpYWwgc2VtYW50aWNzIG9yIHN5bnRheCByZXN0cmljdGlvbnMuXG5cbkNvZGUgY29tcGlsZWQgYnkgY2FsbHMgdG8gdGhlIGJ1aWx0LWluIGZ1bmN0aW9ucyAiZXhlYygpIiBhbmRcbiJjb21waWxlKCkiIHRoYXQgb2NjdXIgaW4gYSBtb2R1bGUgIk0iIGNvbnRhaW5pbmcgYSBmdXR1cmUgc3RhdGVtZW50XG53aWxsLCBieSBkZWZhdWx0LCB1c2UgdGhlIG5ldyBzeW50YXggb3Igc2VtYW50aWNzIGFzc29jaWF0ZWQgd2l0aCB0aGVcbmZ1dHVyZSBzdGF0ZW1lbnQuICBUaGlzIGNhbiBiZSBjb250cm9sbGVkIGJ5IG9wdGlvbmFsIGFyZ3VtZW50cyB0b1xuImNvbXBpbGUoKSIgLS0tIHNlZSB0aGUgZG9jdW1lbnRhdGlvbiBvZiB0aGF0IGZ1bmN0aW9uIGZvciBkZXRhaWxzLlxuXG5BIGZ1dHVyZSBzdGF0ZW1lbnQgdHlwZWQgYXQgYW4gaW50ZXJhY3RpdmUgaW50ZXJwcmV0ZXIgcHJvbXB0IHdpbGxcbnRha2UgZWZmZWN0IGZvciB0aGUgcmVzdCBvZiB0aGUgaW50ZXJwcmV0ZXIgc2Vzc2lvbi4gIElmIGFuXG5pbnRlcnByZXRlciBpcyBzdGFydGVkIHdpdGggdGhlICotaSogb3B0aW9uLCBpcyBwYXNzZWQgYSBzY3JpcHQgbmFtZVxudG8gZXhlY3V0ZSwgYW5kIHRoZSBzY3JpcHQgaW5jbHVkZXMgYSBmdXR1cmUgc3RhdGVtZW50LCBpdCB3aWxsIGJlIGluXG5lZmZlY3QgaW4gdGhlIGludGVyYWN0aXZlIHNlc3Npb24gc3RhcnRlZCBhZnRlciB0aGUgc2NyaXB0IGlzXG5leGVjdXRlZC5cblxuU2VlIGFsc286ICoqUEVQIDIzNioqIC0gQmFjayB0byB0aGUgX19mdXR1cmVfX1xuXG4gICAgIFRoZSBvcmlnaW5hbCBwcm9wb3NhbCBmb3IgdGhlIF9fZnV0dXJlX18gbWVjaGFuaXNtLlxuJywKKyAnaW4nOiB1J1xuTWVtYmVyc2hpcCB0ZXN0IG9wZXJhdGlvbnNcbioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cblRoZSBvcGVyYXRvcnMgImluIiBhbmQgIm5vdCBpbiIgdGVzdCBmb3IgbWVtYmVyc2hpcC4gICJ4IGluIHMiXG5ldmFsdWF0ZXMgdG8gdHJ1ZSBpZiAqeCogaXMgYSBtZW1iZXIgb2YgKnMqLCBhbmQgZmFsc2Ugb3RoZXJ3aXNlLiAgInhcbm5vdCBpbiBzIiByZXR1cm5zIHRoZSBuZWdhdGlvbiBvZiAieCBpbiBzIi4gIEFsbCBidWlsdC1pbiBzZXF1ZW5jZXNcbmFuZCBzZXQgdHlwZXMgc3VwcG9ydCB0aGlzIGFzIHdlbGwgYXMgZGljdGlvbmFyeSwgZm9yIHdoaWNoICJpbiIgdGVzdHNcbndoZXRoZXIgdGhlIGRpY3Rpb25hcnkgaGFzIGEgZ2l2ZW4ga2V5LiBGb3IgY29udGFpbmVyIHR5cGVzIHN1Y2ggYXNcbmxpc3QsIHR1cGxlLCBzZXQsIGZyb3plbnNldCwgZGljdCwgb3IgY29sbGVjdGlvbnMuZGVxdWUsIHRoZVxuZXhwcmVzc2lvbiAieCBpbiB5IiBpcyBlcXVpdmFsZW50IHRvICJhbnkoeCBpcyBlIG9yIHggPT0gZSBmb3IgZSBpblxueSkiLlxuXG5Gb3IgdGhlIHN0cmluZyBhbmQgYnl0ZXMgdHlwZXMsICJ4IGluIHkiIGlzIHRydWUgaWYgYW5kIG9ubHkgaWYgKngqIGlzXG5hIHN1YnN0cmluZyBvZiAqeSouICBBbiBlcXVpdmFsZW50IHRlc3QgaXMgInkuZmluZCh4KSAhPSAtMSIuICBFbXB0eVxuc3RyaW5ncyBhcmUgYWx3YXlzIGNvbnNpZGVyZWQgdG8gYmUgYSBzdWJzdHJpbmcgb2YgYW55IG90aGVyIHN0cmluZyxcbnNvICIiIiBpbiAiYWJjIiIgd2lsbCByZXR1cm4gIlRydWUiLlxuXG5Gb3IgdXNlci1kZWZpbmVkIGNsYXNzZXMgd2hpY2ggZGVmaW5lIHRoZSAiX19jb250YWluc19fKCkiIG1ldGhvZCwgInhcbmluIHkiIGlzIHRydWUgaWYgYW5kIG9ubHkgaWYgInkuX19jb250YWluc19fKHgpIiBpcyB0cnVlLlxuXG5Gb3IgdXNlci1kZWZpbmVkIGNsYXNzZXMgd2hpY2ggZG8gbm90IGRlZmluZSAiX19jb250YWluc19fKCkiIGJ1dCBkb1xuZGVmaW5lICJfX2l0ZXJfXygpIiwgInggaW4geSIgaXMgdHJ1ZSBpZiBzb21lIHZhbHVlICJ6IiB3aXRoICJ4ID09IHoiXG5pcyBwcm9kdWNlZCB3aGlsZSBpdGVyYXRpbmcgb3ZlciAieSIuICBJZiBhbiBleGNlcHRpb24gaXMgcmFpc2VkXG5kdXJpbmcgdGhlIGl0ZXJhdGlvbiwgaXQgaXMgYXMgaWYgImluIiByYWlzZWQgdGhhdCBleGNlcHRpb24uXG5cbkxhc3RseSwgdGhlIG9sZC1zdHlsZSBpdGVyYXRpb24gcHJvdG9jb2wgaXMgdHJpZWQ6IGlmIGEgY2xhc3MgZGVmaW5lc1xuIl9fZ2V0aXRlbV9fKCkiLCAieCBpbiB5IiBpcyB0cnVlIGlmIGFuZCBvbmx5IGlmIHRoZXJlIGlzIGEgbm9uLVxubmVnYXRpdmUgaW50ZWdlciBpbmRleCAqaSogc3VjaCB0aGF0ICJ4ID09IHlbaV0iLCBhbmQgYWxsIGxvd2VyXG5pbnRlZ2VyIGluZGljZXMgZG8gbm90IHJhaXNlICJJbmRleEVycm9yIiBleGNlcHRpb24uICAoSWYgYW55IG90aGVyXG5leGNlcHRpb24gaXMgcmFpc2VkLCBpdCBpcyBhcyBpZiAiaW4iIHJhaXNlZCB0aGF0IGV4Y2VwdGlvbikuXG5cblRoZSBvcGVyYXRvciAibm90IGluIiBpcyBkZWZpbmVkIHRvIGhhdmUgdGhlIGludmVyc2UgdHJ1ZSB2YWx1ZSBvZlxuImluIi5cbicsCisgJ2ludGVnZXJzJzogdSdcbkludGVnZXIgbGl0ZXJhbHNcbioqKioqKioqKioqKioqKipcblxuSW50ZWdlciBsaXRlcmFscyBhcmUgZGVzY3JpYmVkIGJ5IHRoZSBmb2xsb3dpbmcgbGV4aWNhbCBkZWZpbml0aW9uczpcblxuICAgaW50ZWdlciAgICAgICAgOjo9IGRlY2ltYWxpbnRlZ2VyIHwgb2N0aW50ZWdlciB8IGhleGludGVnZXIgfCBiaW5pbnRlZ2VyXG4gICBkZWNpbWFsaW50ZWdlciA6Oj0gbm9uemVyb2RpZ2l0IGRpZ2l0KiB8ICIwIitcbiAgIG5vbnplcm9kaWdpdCAgIDo6PSAiMSIuLi4iOSJcbiAgIGRpZ2l0ICAgICAgICAgIDo6PSAiMCIuLi4iOSJcbiAgIG9jdGludGVnZXIgICAgIDo6PSAiMCIgKCJvIiB8ICJPIikgb2N0ZGlnaXQrXG4gICBoZXhpbnRlZ2VyICAgICA6Oj0gIjAiICgieCIgfCAiWCIpIGhleGRpZ2l0K1xuICAgYmluaW50ZWdlciAgICAgOjo9ICIwIiAoImIiIHwgIkIiKSBiaW5kaWdpdCtcbiAgIG9jdGRpZ2l0ICAgICAgIDo6PSAiMCIuLi4iNyJcbiAgIGhleGRpZ2l0ICAgICAgIDo6PSBkaWdpdCB8ICJhIi4uLiJmIiB8ICJBIi4uLiJGIlxuICAgYmluZGlnaXQgICAgICAgOjo9ICIwIiB8ICIxIlxuXG5UaGVyZSBpcyBubyBsaW1pdCBmb3IgdGhlIGxlbmd0aCBvZiBpbnRlZ2VyIGxpdGVyYWxzIGFwYXJ0IGZyb20gd2hhdFxuY2FuIGJlIHN0b3JlZCBpbiBhdmFpbGFibGUgbWVtb3J5LlxuXG5Ob3RlIHRoYXQgbGVhZGluZyB6ZXJvcyBpbiBhIG5vbi16ZXJvIGRlY2ltYWwgbnVtYmVyIGFyZSBub3QgYWxsb3dlZC5cblRoaXMgaXMgZm9yIGRpc2FtYmlndWF0aW9uIHdpdGggQy1zdHlsZSBvY3RhbCBsaXRlcmFscywgd2hpY2ggUHl0aG9uXG51c2VkIGJlZm9yZSB2ZXJzaW9uIDMuMC5cblxuU29tZSBleGFtcGxlcyBvZiBpbnRlZ2VyIGxpdGVyYWxzOlxuXG4gICA3ICAgICAyMTQ3NDgzNjQ3ICAgICAgICAgICAgICAgICAgICAgICAgMG8xNzcgICAgMGIxMDAxMTAxMTFcbiAgIDMgICAgIDc5MjI4MTYyNTE0MjY0MzM3NTkzNTQzOTUwMzM2ICAgICAwbzM3NyAgICAweGRlYWRiZWVmXG4nLAorICdsYW1iZGEnOiB1J1xuTGFtYmRhc1xuKioqKioqKlxuXG4gICBsYW1iZGFfZXhwciAgICAgICAgOjo9ICJsYW1iZGEiIFtwYXJhbWV0ZXJfbGlzdF06IGV4cHJlc3Npb25cbiAgIGxhbWJkYV9leHByX25vY29uZCA6Oj0gImxhbWJkYSIgW3BhcmFtZXRlcl9saXN0XTogZXhwcmVzc2lvbl9ub2NvbmRcblxuTGFtYmRhIGV4cHJlc3Npb25zIChzb21ldGltZXMgY2FsbGVkIGxhbWJkYSBmb3JtcykgYXJlIHVzZWQgdG8gY3JlYXRlXG5hbm9ueW1vdXMgZnVuY3Rpb25zLiBUaGUgZXhwcmVzc2lvbiAibGFtYmRhIGFyZ3VtZW50czogZXhwcmVzc2lvbiJcbnlpZWxkcyBhIGZ1bmN0aW9uIG9iamVjdC4gIFRoZSB1bm5hbWVkIG9iamVjdCBiZWhhdmVzIGxpa2UgYSBmdW5jdGlvblxub2JqZWN0IGRlZmluZWQgd2l0aFxuXG4gICBkZWYgPGxhbWJkYT4oYXJndW1lbnRzKTpcbiAgICAgICByZXR1cm4gZXhwcmVzc2lvblxuXG5TZWUgc2VjdGlvbiAqRnVuY3Rpb24gZGVmaW5pdGlvbnMqIGZvciB0aGUgc3ludGF4IG9mIHBhcmFtZXRlciBsaXN0cy5cbk5vdGUgdGhhdCBmdW5jdGlvbnMgY3JlYXRlZCB3aXRoIGxhbWJkYSBleHByZXNzaW9ucyBjYW5ub3QgY29udGFpblxuc3RhdGVtZW50cyBvciBhbm5vdGF0aW9ucy5cbicsCisgJ2xpc3RzJzogdSdcbkxpc3QgZGlzcGxheXNcbioqKioqKioqKioqKipcblxuQSBsaXN0IGRpc3BsYXkgaXMgYSBwb3NzaWJseSBlbXB0eSBzZXJpZXMgb2YgZXhwcmVzc2lvbnMgZW5jbG9zZWQgaW5cbnNxdWFyZSBicmFja2V0czpcblxuICAgbGlzdF9kaXNwbGF5IDo6PSAiWyIgW2V4cHJlc3Npb25fbGlzdCB8IGNvbXByZWhlbnNpb25dICJdIlxuXG5BIGxpc3QgZGlzcGxheSB5aWVsZHMgYSBuZXcgbGlzdCBvYmplY3QsIHRoZSBjb250ZW50cyBiZWluZyBzcGVjaWZpZWRcbmJ5IGVpdGhlciBhIGxpc3Qgb2YgZXhwcmVzc2lvbnMgb3IgYSBjb21wcmVoZW5zaW9uLiAgV2hlbiBhIGNvbW1hLVxuc2VwYXJhdGVkIGxpc3Qgb2YgZXhwcmVzc2lvbnMgaXMgc3VwcGxpZWQsIGl0cyBlbGVtZW50cyBhcmUgZXZhbHVhdGVkXG5mcm9tIGxlZnQgdG8gcmlnaHQgYW5kIHBsYWNlZCBpbnRvIHRoZSBsaXN0IG9iamVjdCBpbiB0aGF0IG9yZGVyLlxuV2hlbiBhIGNvbXByZWhlbnNpb24gaXMgc3VwcGxpZWQsIHRoZSBsaXN0IGlzIGNvbnN0cnVjdGVkIGZyb20gdGhlXG5lbGVtZW50cyByZXN1bHRpbmcgZnJvbSB0aGUgY29tcHJlaGVuc2lvbi5cbicsCisgJ25hbWluZyc6IHUnXG5OYW1pbmcgYW5kIGJpbmRpbmdcbioqKioqKioqKioqKioqKioqKlxuXG5cbkJpbmRpbmcgb2YgbmFtZXNcbj09PT09PT09PT09PT09PT1cblxuKk5hbWVzKiByZWZlciB0byBvYmplY3RzLiAgTmFtZXMgYXJlIGludHJvZHVjZWQgYnkgbmFtZSBiaW5kaW5nXG5vcGVyYXRpb25zLlxuXG5UaGUgZm9sbG93aW5nIGNvbnN0cnVjdHMgYmluZCBuYW1lczogZm9ybWFsIHBhcmFtZXRlcnMgdG8gZnVuY3Rpb25zLFxuImltcG9ydCIgc3RhdGVtZW50cywgY2xhc3MgYW5kIGZ1bmN0aW9uIGRlZmluaXRpb25zICh0aGVzZSBiaW5kIHRoZVxuY2xhc3Mgb3IgZnVuY3Rpb24gbmFtZSBpbiB0aGUgZGVmaW5pbmcgYmxvY2spLCBhbmQgdGFyZ2V0cyB0aGF0IGFyZVxuaWRlbnRpZmllcnMgaWYgb2NjdXJyaW5nIGluIGFuIGFzc2lnbm1lbnQsICJmb3IiIGxvb3AgaGVhZGVyLCBvciBhZnRlclxuImFzIiBpbiBhICJ3aXRoIiBzdGF0ZW1lbnQgb3IgImV4Y2VwdCIgY2xhdXNlLiBUaGUgImltcG9ydCIgc3RhdGVtZW50XG5vZiB0aGUgZm9ybSAiZnJvbSAuLi4gaW1wb3J0ICoiIGJpbmRzIGFsbCBuYW1lcyBkZWZpbmVkIGluIHRoZVxuaW1wb3J0ZWQgbW9kdWxlLCBleGNlcHQgdGhvc2UgYmVnaW5uaW5nIHdpdGggYW4gdW5kZXJzY29yZS4gIFRoaXMgZm9ybVxubWF5IG9ubHkgYmUgdXNlZCBhdCB0aGUgbW9kdWxlIGxldmVsLlxuXG5BIHRhcmdldCBvY2N1cnJpbmcgaW4gYSAiZGVsIiBzdGF0ZW1lbnQgaXMgYWxzbyBjb25zaWRlcmVkIGJvdW5kIGZvclxudGhpcyBwdXJwb3NlICh0aG91Z2ggdGhlIGFjdHVhbCBzZW1hbnRpY3MgYXJlIHRvIHVuYmluZCB0aGUgbmFtZSkuXG5cbkVhY2ggYXNzaWdubWVudCBvciBpbXBvcnQgc3RhdGVtZW50IG9jY3VycyB3aXRoaW4gYSBibG9jayBkZWZpbmVkIGJ5IGFcbmNsYXNzIG9yIGZ1bmN0aW9uIGRlZmluaXRpb24gb3IgYXQgdGhlIG1vZHVsZSBsZXZlbCAodGhlIHRvcC1sZXZlbFxuY29kZSBibG9jaykuXG5cbklmIGEgbmFtZSBpcyBib3VuZCBpbiBhIGJsb2NrLCBpdCBpcyBhIGxvY2FsIHZhcmlhYmxlIG9mIHRoYXQgYmxvY2ssXG51bmxlc3MgZGVjbGFyZWQgYXMgIm5vbmxvY2FsIiBvciAiZ2xvYmFsIi4gIElmIGEgbmFtZSBpcyBib3VuZCBhdCB0aGVcbm1vZHVsZSBsZXZlbCwgaXQgaXMgYSBnbG9iYWwgdmFyaWFibGUuICAoVGhlIHZhcmlhYmxlcyBvZiB0aGUgbW9kdWxlXG5jb2RlIGJsb2NrIGFyZSBsb2NhbCBhbmQgZ2xvYmFsLikgIElmIGEgdmFyaWFibGUgaXMgdXNlZCBpbiBhIGNvZGVcbmJsb2NrIGJ1dCBub3QgZGVmaW5lZCB0aGVyZSwgaXQgaXMgYSAqZnJlZSB2YXJpYWJsZSouXG5cbkVhY2ggb2NjdXJyZW5jZSBvZiBhIG5hbWUgaW4gdGhlIHByb2dyYW0gdGV4dCByZWZlcnMgdG8gdGhlICpiaW5kaW5nKlxub2YgdGhhdCBuYW1lIGVzdGFibGlzaGVkIGJ5IHRoZSBmb2xsb3dpbmcgbmFtZSByZXNvbHV0aW9uIHJ1bGVzLlxuXG5cblJlc29sdXRpb24gb2YgbmFtZXNcbj09PT09PT09PT09PT09PT09PT1cblxuQSAqc2NvcGUqIGRlZmluZXMgdGhlIHZpc2liaWxpdHkgb2YgYSBuYW1lIHdpdGhpbiBhIGJsb2NrLiAgSWYgYSBsb2NhbFxudmFyaWFibGUgaXMgZGVmaW5lZCBpbiBhIGJsb2NrLCBpdHMgc2NvcGUgaW5jbHVkZXMgdGhhdCBibG9jay4gIElmIHRoZVxuZGVmaW5pdGlvbiBvY2N1cnMgaW4gYSBmdW5jdGlvbiBibG9jaywgdGhlIHNjb3BlIGV4dGVuZHMgdG8gYW55IGJsb2Nrc1xuY29udGFpbmVkIHdpdGhpbiB0aGUgZGVmaW5pbmcgb25lLCB1bmxlc3MgYSBjb250YWluZWQgYmxvY2sgaW50cm9kdWNlc1xuYSBkaWZmZXJlbnQgYmluZGluZyBmb3IgdGhlIG5hbWUuXG5cbldoZW4gYSBuYW1lIGlzIHVzZWQgaW4gYSBjb2RlIGJsb2NrLCBpdCBpcyByZXNvbHZlZCB1c2luZyB0aGUgbmVhcmVzdFxuZW5jbG9zaW5nIHNjb3BlLiAgVGhlIHNldCBvZiBhbGwgc3VjaCBzY29wZXMgdmlzaWJsZSB0byBhIGNvZGUgYmxvY2tcbmlzIGNhbGxlZCB0aGUgYmxvY2tcJ3MgKmVudmlyb25tZW50Ki5cblxuV2hlbiBhIG5hbWUgaXMgbm90IGZvdW5kIGF0IGFsbCwgYSAiTmFtZUVycm9yIiBleGNlcHRpb24gaXMgcmFpc2VkLiBJZlxudGhlIGN1cnJlbnQgc2NvcGUgaXMgYSBmdW5jdGlvbiBzY29wZSwgYW5kIHRoZSBuYW1lIHJlZmVycyB0byBhIGxvY2FsXG52YXJpYWJsZSB0aGF0IGhhcyBub3QgeWV0IGJlZW4gYm91bmQgdG8gYSB2YWx1ZSBhdCB0aGUgcG9pbnQgd2hlcmUgdGhlXG5uYW1lIGlzIHVzZWQsIGFuICJVbmJvdW5kTG9jYWxFcnJvciIgZXhjZXB0aW9uIGlzIHJhaXNlZC5cbiJVbmJvdW5kTG9jYWxFcnJvciIgaXMgYSBzdWJjbGFzcyBvZiAiTmFtZUVycm9yIi5cblxuSWYgYSBuYW1lIGJpbmRpbmcgb3BlcmF0aW9uIG9jY3VycyBhbnl3aGVyZSB3aXRoaW4gYSBjb2RlIGJsb2NrLCBhbGxcbnVzZXMgb2YgdGhlIG5hbWUgd2l0aGluIHRoZSBibG9jayBhcmUgdHJlYXRlZCBhcyByZWZlcmVuY2VzIHRvIHRoZVxuY3VycmVudCBibG9jay4gIFRoaXMgY2FuIGxlYWQgdG8gZXJyb3JzIHdoZW4gYSBuYW1lIGlzIHVzZWQgd2l0aGluIGFcbmJsb2NrIGJlZm9yZSBpdCBpcyBib3VuZC4gIFRoaXMgcnVsZSBpcyBzdWJ0bGUuICBQeXRob24gbGFja3NcbmRlY2xhcmF0aW9ucyBhbmQgYWxsb3dzIG5hbWUgYmluZGluZyBvcGVyYXRpb25zIHRvIG9jY3VyIGFueXdoZXJlXG53aXRoaW4gYSBjb2RlIGJsb2NrLiAgVGhlIGxvY2FsIHZhcmlhYmxlcyBvZiBhIGNvZGUgYmxvY2sgY2FuIGJlXG5kZXRlcm1pbmVkIGJ5IHNjYW5uaW5nIHRoZSBlbnRpcmUgdGV4dCBvZiB0aGUgYmxvY2sgZm9yIG5hbWUgYmluZGluZ1xub3BlcmF0aW9ucy5cblxuSWYgdGhlICJnbG9iYWwiIHN0YXRlbWVudCBvY2N1cnMgd2l0aGluIGEgYmxvY2ssIGFsbCB1c2VzIG9mIHRoZSBuYW1lXG5zcGVjaWZpZWQgaW4gdGhlIHN0YXRlbWVudCByZWZlciB0byB0aGUgYmluZGluZyBvZiB0aGF0IG5hbWUgaW4gdGhlXG50b3AtbGV2ZWwgbmFtZXNwYWNlLiAgTmFtZXMgYXJlIHJlc29sdmVkIGluIHRoZSB0b3AtbGV2ZWwgbmFtZXNwYWNlIGJ5XG5zZWFyY2hpbmcgdGhlIGdsb2JhbCBuYW1lc3BhY2UsIGkuZS4gdGhlIG5hbWVzcGFjZSBvZiB0aGUgbW9kdWxlXG5jb250YWluaW5nIHRoZSBjb2RlIGJsb2NrLCBhbmQgdGhlIGJ1aWx0aW5zIG5hbWVzcGFjZSwgdGhlIG5hbWVzcGFjZVxub2YgdGhlIG1vZHVsZSAiYnVpbHRpbnMiLiAgVGhlIGdsb2JhbCBuYW1lc3BhY2UgaXMgc2VhcmNoZWQgZmlyc3QuICBJZlxudGhlIG5hbWUgaXMgbm90IGZvdW5kIHRoZXJlLCB0aGUgYnVpbHRpbnMgbmFtZXNwYWNlIGlzIHNlYXJjaGVkLiAgVGhlXG4iZ2xvYmFsIiBzdGF0ZW1lbnQgbXVzdCBwcmVjZWRlIGFsbCB1c2VzIG9mIHRoZSBuYW1lLlxuXG5UaGUgImdsb2JhbCIgc3RhdGVtZW50IGhhcyB0aGUgc2FtZSBzY29wZSBhcyBhIG5hbWUgYmluZGluZyBvcGVyYXRpb25cbmluIHRoZSBzYW1lIGJsb2NrLiAgSWYgdGhlIG5lYXJlc3QgZW5jbG9zaW5nIHNjb3BlIGZvciBhIGZyZWUgdmFyaWFibGVcbmNvbnRhaW5zIGEgZ2xvYmFsIHN0YXRlbWVudCwgdGhlIGZyZWUgdmFyaWFibGUgaXMgdHJlYXRlZCBhcyBhIGdsb2JhbC5cblxuVGhlICJub25sb2NhbCIgc3RhdGVtZW50IGNhdXNlcyBjb3JyZXNwb25kaW5nIG5hbWVzIHRvIHJlZmVyIHRvXG5wcmV2aW91c2x5IGJvdW5kIHZhcmlhYmxlcyBpbiB0aGUgbmVhcmVzdCBlbmNsb3NpbmcgZnVuY3Rpb24gc2NvcGUuXG4iU3ludGF4RXJyb3IiIGlzIHJhaXNlZCBhdCBjb21waWxlIHRpbWUgaWYgdGhlIGdpdmVuIG5hbWUgZG9lcyBub3RcbmV4aXN0IGluIGFueSBlbmNsb3NpbmcgZnVuY3Rpb24gc2NvcGUuXG5cblRoZSBuYW1lc3BhY2UgZm9yIGEgbW9kdWxlIGlzIGF1dG9tYXRpY2FsbHkgY3JlYXRlZCB0aGUgZmlyc3QgdGltZSBhXG5tb2R1bGUgaXMgaW1wb3J0ZWQuICBUaGUgbWFpbiBtb2R1bGUgZm9yIGEgc2NyaXB0IGlzIGFsd2F5cyBjYWxsZWRcbiJfX21haW5fXyIuXG5cbkNsYXNzIGRlZmluaXRpb24gYmxvY2tzIGFuZCBhcmd1bWVudHMgdG8gImV4ZWMoKSIgYW5kICJldmFsKCkiIGFyZVxuc3BlY2lhbCBpbiB0aGUgY29udGV4dCBvZiBuYW1lIHJlc29sdXRpb24uIEEgY2xhc3MgZGVmaW5pdGlvbiBpcyBhblxuZXhlY3V0YWJsZSBzdGF0ZW1lbnQgdGhhdCBtYXkgdXNlIGFuZCBkZWZpbmUgbmFtZXMuIFRoZXNlIHJlZmVyZW5jZXNcbmZvbGxvdyB0aGUgbm9ybWFsIHJ1bGVzIGZvciBuYW1lIHJlc29sdXRpb24gd2l0aCBhbiBleGNlcHRpb24gdGhhdFxudW5ib3VuZCBsb2NhbCB2YXJpYWJsZXMgYXJlIGxvb2tlZCB1cCBpbiB0aGUgZ2xvYmFsIG5hbWVzcGFjZS4gVGhlXG5uYW1lc3BhY2Ugb2YgdGhlIGNsYXNzIGRlZmluaXRpb24gYmVjb21lcyB0aGUgYXR0cmlidXRlIGRpY3Rpb25hcnkgb2ZcbnRoZSBjbGFzcy4gVGhlIHNjb3BlIG9mIG5hbWVzIGRlZmluZWQgaW4gYSBjbGFzcyBibG9jayBpcyBsaW1pdGVkIHRvXG50aGUgY2xhc3MgYmxvY2s7IGl0IGRvZXMgbm90IGV4dGVuZCB0byB0aGUgY29kZSBibG9ja3Mgb2YgbWV0aG9kcyAtLVxudGhpcyBpbmNsdWRlcyBjb21wcmVoZW5zaW9ucyBhbmQgZ2VuZXJhdG9yIGV4cHJlc3Npb25zIHNpbmNlIHRoZXkgYXJlXG5pbXBsZW1lbnRlZCB1c2luZyBhIGZ1bmN0aW9uIHNjb3BlLiAgVGhpcyBtZWFucyB0aGF0IHRoZSBmb2xsb3dpbmdcbndpbGwgZmFpbDpcblxuICAgY2xhc3MgQTpcbiAgICAgICBhID0gNDJcbiAgICAgICBiID0gbGlzdChhICsgaSBmb3IgaSBpbiByYW5nZSgxMCkpXG5cblxuQnVpbHRpbnMgYW5kIHJlc3RyaWN0ZWQgZXhlY3V0aW9uXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuVGhlIGJ1aWx0aW5zIG5hbWVzcGFjZSBhc3NvY2lhdGVkIHdpdGggdGhlIGV4ZWN1dGlvbiBvZiBhIGNvZGUgYmxvY2tcbmlzIGFjdHVhbGx5IGZvdW5kIGJ5IGxvb2tpbmcgdXAgdGhlIG5hbWUgIl9fYnVpbHRpbnNfXyIgaW4gaXRzIGdsb2JhbFxubmFtZXNwYWNlOyB0aGlzIHNob3VsZCBiZSBhIGRpY3Rpb25hcnkgb3IgYSBtb2R1bGUgKGluIHRoZSBsYXR0ZXIgY2FzZVxudGhlIG1vZHVsZVwncyBkaWN0aW9uYXJ5IGlzIHVzZWQpLiAgQnkgZGVmYXVsdCwgd2hlbiBpbiB0aGUgIl9fbWFpbl9fIlxubW9kdWxlLCAiX19idWlsdGluc19fIiBpcyB0aGUgYnVpbHQtaW4gbW9kdWxlICJidWlsdGlucyI7IHdoZW4gaW4gYW55XG5vdGhlciBtb2R1bGUsICJfX2J1aWx0aW5zX18iIGlzIGFuIGFsaWFzIGZvciB0aGUgZGljdGlvbmFyeSBvZiB0aGVcbiJidWlsdGlucyIgbW9kdWxlIGl0c2VsZi4gICJfX2J1aWx0aW5zX18iIGNhbiBiZSBzZXQgdG8gYSB1c2VyLWNyZWF0ZWRcbmRpY3Rpb25hcnkgdG8gY3JlYXRlIGEgd2VhayBmb3JtIG9mIHJlc3RyaWN0ZWQgZXhlY3V0aW9uLlxuXG4qKkNQeXRob24gaW1wbGVtZW50YXRpb24gZGV0YWlsOioqIFVzZXJzIHNob3VsZCBub3QgdG91Y2hcbiJfX2J1aWx0aW5zX18iOyBpdCBpcyBzdHJpY3RseSBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwuICBVc2Vyc1xud2FudGluZyB0byBvdmVycmlkZSB2YWx1ZXMgaW4gdGhlIGJ1aWx0aW5zIG5hbWVzcGFjZSBzaG91bGQgImltcG9ydCJcbnRoZSAiYnVpbHRpbnMiIG1vZHVsZSBhbmQgbW9kaWZ5IGl0cyBhdHRyaWJ1dGVzIGFwcHJvcHJpYXRlbHkuXG5cblxuSW50ZXJhY3Rpb24gd2l0aCBkeW5hbWljIGZlYXR1cmVzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuTmFtZSByZXNvbHV0aW9uIG9mIGZyZWUgdmFyaWFibGVzIG9jY3VycyBhdCBydW50aW1lLCBub3QgYXQgY29tcGlsZVxudGltZS4gVGhpcyBtZWFucyB0aGF0IHRoZSBmb2xsb3dpbmcgY29kZSB3aWxsIHByaW50IDQyOlxuXG4gICBpID0gMTBcbiAgIGRlZiBmKCk6XG4gICAgICAgcHJpbnQoaSlcbiAgIGkgPSA0MlxuICAgZigpXG5cblRoZXJlIGFyZSBzZXZlcmFsIGNhc2VzIHdoZXJlIFB5dGhvbiBzdGF0ZW1lbnRzIGFyZSBpbGxlZ2FsIHdoZW4gdXNlZFxuaW4gY29uanVuY3Rpb24gd2l0aCBuZXN0ZWQgc2NvcGVzIHRoYXQgY29udGFpbiBmcmVlIHZhcmlhYmxlcy5cblxuSWYgYSB2YXJpYWJsZSBpcyByZWZlcmVuY2VkIGluIGFuIGVuY2xvc2luZyBzY29wZSwgaXQgaXMgaWxsZWdhbCB0b1xuZGVsZXRlIHRoZSBuYW1lLiAgQW4gZXJyb3Igd2lsbCBiZSByZXBvcnRlZCBhdCBjb21waWxlIHRpbWUuXG5cblRoZSAiZXZhbCgpIiBhbmQgImV4ZWMoKSIgZnVuY3Rpb25zIGRvIG5vdCBoYXZlIGFjY2VzcyB0byB0aGUgZnVsbFxuZW52aXJvbm1lbnQgZm9yIHJlc29sdmluZyBuYW1lcy4gIE5hbWVzIG1heSBiZSByZXNvbHZlZCBpbiB0aGUgbG9jYWxcbmFuZCBnbG9iYWwgbmFtZXNwYWNlcyBvZiB0aGUgY2FsbGVyLiAgRnJlZSB2YXJpYWJsZXMgYXJlIG5vdCByZXNvbHZlZFxuaW4gdGhlIG5lYXJlc3QgZW5jbG9zaW5nIG5hbWVzcGFjZSwgYnV0IGluIHRoZSBnbG9iYWwgbmFtZXNwYWNlLiAgWzFdXG5UaGUgImV4ZWMoKSIgYW5kICJldmFsKCkiIGZ1bmN0aW9ucyBoYXZlIG9wdGlvbmFsIGFyZ3VtZW50cyB0b1xub3ZlcnJpZGUgdGhlIGdsb2JhbCBhbmQgbG9jYWwgbmFtZXNwYWNlLiAgSWYgb25seSBvbmUgbmFtZXNwYWNlIGlzXG5zcGVjaWZpZWQsIGl0IGlzIHVzZWQgZm9yIGJvdGguXG4nLAorICdub25sb2NhbCc6IHUnXG5UaGUgIm5vbmxvY2FsIiBzdGF0ZW1lbnRcbioqKioqKioqKioqKioqKioqKioqKioqKlxuXG4gICBub25sb2NhbF9zdG10IDo6PSAibm9ubG9jYWwiIGlkZW50aWZpZXIgKCIsIiBpZGVudGlmaWVyKSpcblxuVGhlICJub25sb2NhbCIgc3RhdGVtZW50IGNhdXNlcyB0aGUgbGlzdGVkIGlkZW50aWZpZXJzIHRvIHJlZmVyIHRvXG5wcmV2aW91c2x5IGJvdW5kIHZhcmlhYmxlcyBpbiB0aGUgbmVhcmVzdCBlbmNsb3Npbmcgc2NvcGUgZXhjbHVkaW5nXG5nbG9iYWxzLiBUaGlzIGlzIGltcG9ydGFudCBiZWNhdXNlIHRoZSBkZWZhdWx0IGJlaGF2aW9yIGZvciBiaW5kaW5nIGlzXG50byBzZWFyY2ggdGhlIGxvY2FsIG5hbWVzcGFjZSBmaXJzdC4gIFRoZSBzdGF0ZW1lbnQgYWxsb3dzXG5lbmNhcHN1bGF0ZWQgY29kZSB0byByZWJpbmQgdmFyaWFibGVzIG91dHNpZGUgb2YgdGhlIGxvY2FsIHNjb3BlXG5iZXNpZGVzIHRoZSBnbG9iYWwgKG1vZHVsZSkgc2NvcGUuXG5cbk5hbWVzIGxpc3RlZCBpbiBhICJub25sb2NhbCIgc3RhdGVtZW50LCB1bmxpa2UgdGhvc2UgbGlzdGVkIGluIGFcbiJnbG9iYWwiIHN0YXRlbWVudCwgbXVzdCByZWZlciB0byBwcmUtZXhpc3RpbmcgYmluZGluZ3MgaW4gYW5cbmVuY2xvc2luZyBzY29wZSAodGhlIHNjb3BlIGluIHdoaWNoIGEgbmV3IGJpbmRpbmcgc2hvdWxkIGJlIGNyZWF0ZWRcbmNhbm5vdCBiZSBkZXRlcm1pbmVkIHVuYW1iaWd1b3VzbHkpLlxuXG5OYW1lcyBsaXN0ZWQgaW4gYSAibm9ubG9jYWwiIHN0YXRlbWVudCBtdXN0IG5vdCBjb2xsaWRlIHdpdGggcHJlLVxuZXhpc3RpbmcgYmluZGluZ3MgaW4gdGhlIGxvY2FsIHNjb3BlLlxuXG5TZWUgYWxzbzogKipQRVAgMzEwNCoqIC0gQWNjZXNzIHRvIE5hbWVzIGluIE91dGVyIFNjb3Blc1xuXG4gICAgIFRoZSBzcGVjaWZpY2F0aW9uIGZvciB0aGUgIm5vbmxvY2FsIiBzdGF0ZW1lbnQuXG4nLAorICdudW1iZXJzJzogdSdcbk51bWVyaWMgbGl0ZXJhbHNcbioqKioqKioqKioqKioqKipcblxuVGhlcmUgYXJlIHRocmVlIHR5cGVzIG9mIG51bWVyaWMgbGl0ZXJhbHM6IGludGVnZXJzLCBmbG9hdGluZyBwb2ludFxubnVtYmVycywgYW5kIGltYWdpbmFyeSBudW1iZXJzLiAgVGhlcmUgYXJlIG5vIGNvbXBsZXggbGl0ZXJhbHNcbihjb21wbGV4IG51bWJlcnMgY2FuIGJlIGZvcm1lZCBieSBhZGRpbmcgYSByZWFsIG51bWJlciBhbmQgYW5cbmltYWdpbmFyeSBudW1iZXIpLlxuXG5Ob3RlIHRoYXQgbnVtZXJpYyBsaXRlcmFscyBkbyBub3QgaW5jbHVkZSBhIHNpZ247IGEgcGhyYXNlIGxpa2UgIi0xIlxuaXMgYWN0dWFsbHkgYW4gZXhwcmVzc2lvbiBjb21wb3NlZCBvZiB0aGUgdW5hcnkgb3BlcmF0b3IgXCciLSJcJyBhbmQgdGhlXG5saXRlcmFsICIxIi5cbicsCisgJ251bWVyaWMtdHlwZXMnOiB1J1xuRW11bGF0aW5nIG51bWVyaWMgdHlwZXNcbioqKioqKioqKioqKioqKioqKioqKioqXG5cblRoZSBmb2xsb3dpbmcgbWV0aG9kcyBjYW4gYmUgZGVmaW5lZCB0byBlbXVsYXRlIG51bWVyaWMgb2JqZWN0cy5cbk1ldGhvZHMgY29ycmVzcG9uZGluZyB0byBvcGVyYXRpb25zIHRoYXQgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhlXG5wYXJ0aWN1bGFyIGtpbmQgb2YgbnVtYmVyIGltcGxlbWVudGVkIChlLmcuLCBiaXR3aXNlIG9wZXJhdGlvbnMgZm9yXG5ub24taW50ZWdyYWwgbnVtYmVycykgc2hvdWxkIGJlIGxlZnQgdW5kZWZpbmVkLlxuXG5vYmplY3QuX19hZGRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3N1Yl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fbXVsX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX190cnVlZGl2X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19mbG9vcmRpdl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fbW9kX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19kaXZtb2RfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3Bvd19fKHNlbGYsIG90aGVyWywgbW9kdWxvXSlcbm9iamVjdC5fX2xzaGlmdF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcnNoaWZ0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19hbmRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3hvcl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fb3JfXyhzZWxmLCBvdGhlcilcblxuICAgVGhlc2UgbWV0aG9kcyBhcmUgY2FsbGVkIHRvIGltcGxlbWVudCB0aGUgYmluYXJ5IGFyaXRobWV0aWNcbiAgIG9wZXJhdGlvbnMgKCIrIiwgIi0iLCAiKiIsICIvIiwgIi8vIiwgIiUiLCAiZGl2bW9kKCkiLCAicG93KCkiLFxuICAgIioqIiwgIjw8IiwgIj4+IiwgIiYiLCAiXiIsICJ8IikuICBGb3IgaW5zdGFuY2UsIHRvIGV2YWx1YXRlIHRoZVxuICAgZXhwcmVzc2lvbiAieCArIHkiLCB3aGVyZSAqeCogaXMgYW4gaW5zdGFuY2Ugb2YgYSBjbGFzcyB0aGF0IGhhcyBhblxuICAgIl9fYWRkX18oKSIgbWV0aG9kLCAieC5fX2FkZF9fKHkpIiBpcyBjYWxsZWQuICBUaGUgIl9fZGl2bW9kX18oKSJcbiAgIG1ldGhvZCBzaG91bGQgYmUgdGhlIGVxdWl2YWxlbnQgdG8gdXNpbmcgIl9fZmxvb3JkaXZfXygpIiBhbmRcbiAgICJfX21vZF9fKCkiOyBpdCBzaG91bGQgbm90IGJlIHJlbGF0ZWQgdG8gIl9fdHJ1ZWRpdl9fKCkiLiAgTm90ZVxuICAgdGhhdCAiX19wb3dfXygpIiBzaG91bGQgYmUgZGVmaW5lZCB0byBhY2NlcHQgYW4gb3B0aW9uYWwgdGhpcmRcbiAgIGFyZ3VtZW50IGlmIHRoZSB0ZXJuYXJ5IHZlcnNpb24gb2YgdGhlIGJ1aWx0LWluICJwb3coKSIgZnVuY3Rpb24gaXNcbiAgIHRvIGJlIHN1cHBvcnRlZC5cblxuICAgSWYgb25lIG9mIHRob3NlIG1ldGhvZHMgZG9lcyBub3Qgc3VwcG9ydCB0aGUgb3BlcmF0aW9uIHdpdGggdGhlXG4gICBzdXBwbGllZCBhcmd1bWVudHMsIGl0IHNob3VsZCByZXR1cm4gIk5vdEltcGxlbWVudGVkIi5cblxub2JqZWN0Ll9fcmFkZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcnN1Yl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcm11bF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcnRydWVkaXZfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3JmbG9vcmRpdl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcm1vZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcmRpdm1vZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcnBvd19fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcmxzaGlmdF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcnJzaGlmdF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcmFuZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcnhvcl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcm9yX18oc2VsZiwgb3RoZXIpXG5cbiAgIFRoZXNlIG1ldGhvZHMgYXJlIGNhbGxlZCB0byBpbXBsZW1lbnQgdGhlIGJpbmFyeSBhcml0aG1ldGljXG4gICBvcGVyYXRpb25zICgiKyIsICItIiwgIioiLCAiLyIsICIvLyIsICIlIiwgImRpdm1vZCgpIiwgInBvdygpIixcbiAgICIqKiIsICI8PCIsICI+PiIsICImIiwgIl4iLCAifCIpIHdpdGggcmVmbGVjdGVkIChzd2FwcGVkKSBvcGVyYW5kcy5cbiAgIFRoZXNlIGZ1bmN0aW9ucyBhcmUgb25seSBjYWxsZWQgaWYgdGhlIGxlZnQgb3BlcmFuZCBkb2VzIG5vdFxuICAgc3VwcG9ydCB0aGUgY29ycmVzcG9uZGluZyBvcGVyYXRpb24gYW5kIHRoZSBvcGVyYW5kcyBhcmUgb2ZcbiAgIGRpZmZlcmVudCB0eXBlcy4gWzJdICBGb3IgaW5zdGFuY2UsIHRvIGV2YWx1YXRlIHRoZSBleHByZXNzaW9uICJ4IC1cbiAgIHkiLCB3aGVyZSAqeSogaXMgYW4gaW5zdGFuY2Ugb2YgYSBjbGFzcyB0aGF0IGhhcyBhbiAiX19yc3ViX18oKSJcbiAgIG1ldGhvZCwgInkuX19yc3ViX18oeCkiIGlzIGNhbGxlZCBpZiAieC5fX3N1Yl9fKHkpIiByZXR1cm5zXG4gICAqTm90SW1wbGVtZW50ZWQqLlxuXG4gICBOb3RlIHRoYXQgdGVybmFyeSAicG93KCkiIHdpbGwgbm90IHRyeSBjYWxsaW5nICJfX3Jwb3dfXygpIiAodGhlXG4gICBjb2VyY2lvbiBydWxlcyB3b3VsZCBiZWNvbWUgdG9vIGNvbXBsaWNhdGVkKS5cblxuICAgTm90ZTogSWYgdGhlIHJpZ2h0IG9wZXJhbmRcJ3MgdHlwZSBpcyBhIHN1YmNsYXNzIG9mIHRoZSBsZWZ0XG4gICAgIG9wZXJhbmRcJ3MgdHlwZSBhbmQgdGhhdCBzdWJjbGFzcyBwcm92aWRlcyB0aGUgcmVmbGVjdGVkIG1ldGhvZFxuICAgICBmb3IgdGhlIG9wZXJhdGlvbiwgdGhpcyBtZXRob2Qgd2lsbCBiZSBjYWxsZWQgYmVmb3JlIHRoZSBsZWZ0XG4gICAgIG9wZXJhbmRcJ3Mgbm9uLXJlZmxlY3RlZCBtZXRob2QuICBUaGlzIGJlaGF2aW9yIGFsbG93cyBzdWJjbGFzc2VzXG4gICAgIHRvIG92ZXJyaWRlIHRoZWlyIGFuY2VzdG9yc1wnIG9wZXJhdGlvbnMuXG5cbm9iamVjdC5fX2lhZGRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2lzdWJfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2ltdWxfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2l0cnVlZGl2X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19pZmxvb3JkaXZfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2ltb2RfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2lwb3dfXyhzZWxmLCBvdGhlclssIG1vZHVsb10pXG5vYmplY3QuX19pbHNoaWZ0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19pcnNoaWZ0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19pYW5kX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19peG9yX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19pb3JfXyhzZWxmLCBvdGhlcilcblxuICAgVGhlc2UgbWV0aG9kcyBhcmUgY2FsbGVkIHRvIGltcGxlbWVudCB0aGUgYXVnbWVudGVkIGFyaXRobWV0aWNcbiAgIGFzc2lnbm1lbnRzICgiKz0iLCAiLT0iLCAiKj0iLCAiLz0iLCAiLy89IiwgIiU9IiwgIioqPSIsICI8PD0iLFxuICAgIj4+PSIsICImPSIsICJePSIsICJ8PSIpLiAgVGhlc2UgbWV0aG9kcyBzaG91bGQgYXR0ZW1wdCB0byBkbyB0aGVcbiAgIG9wZXJhdGlvbiBpbi1wbGFjZSAobW9kaWZ5aW5nICpzZWxmKikgYW5kIHJldHVybiB0aGUgcmVzdWx0ICh3aGljaFxuICAgY291bGQgYmUsIGJ1dCBkb2VzIG5vdCBoYXZlIHRvIGJlLCAqc2VsZiopLiAgSWYgYSBzcGVjaWZpYyBtZXRob2RcbiAgIGlzIG5vdCBkZWZpbmVkLCB0aGUgYXVnbWVudGVkIGFzc2lnbm1lbnQgZmFsbHMgYmFjayB0byB0aGUgbm9ybWFsXG4gICBtZXRob2RzLiAgRm9yIGluc3RhbmNlLCBpZiAqeCogaXMgYW4gaW5zdGFuY2Ugb2YgYSBjbGFzcyB3aXRoIGFuXG4gICAiX19pYWRkX18oKSIgbWV0aG9kLCAieCArPSB5IiBpcyBlcXVpdmFsZW50IHRvICJ4ID0geC5fX2lhZGRfXyh5KSJcbiAgIC4gT3RoZXJ3aXNlLCAieC5fX2FkZF9fKHkpIiBhbmQgInkuX19yYWRkX18oeCkiIGFyZSBjb25zaWRlcmVkLCBhc1xuICAgd2l0aCB0aGUgZXZhbHVhdGlvbiBvZiAieCArIHkiLiBJbiBjZXJ0YWluIHNpdHVhdGlvbnMsIGF1Z21lbnRlZFxuICAgYXNzaWdubWVudCBjYW4gcmVzdWx0IGluIHVuZXhwZWN0ZWQgZXJyb3JzIChzZWUgKldoeSBkb2VzXG4gICBhX3R1cGxlW2ldICs9IFtcJ2l0ZW1cJ10gcmFpc2UgYW4gZXhjZXB0aW9uIHdoZW4gdGhlIGFkZGl0aW9uXG4gICB3b3Jrcz8qKSwgYnV0IHRoaXMgYmVoYXZpb3IgaXMgaW4gZmFjdCBwYXJ0IG9mIHRoZSBkYXRhIG1vZGVsLlxuXG5vYmplY3QuX19uZWdfXyhzZWxmKVxub2JqZWN0Ll9fcG9zX18oc2VsZilcbm9iamVjdC5fX2Fic19fKHNlbGYpXG5vYmplY3QuX19pbnZlcnRfXyhzZWxmKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IHRoZSB1bmFyeSBhcml0aG1ldGljIG9wZXJhdGlvbnMgKCItIiwgIisiLFxuICAgImFicygpIiBhbmQgIn4iKS5cblxub2JqZWN0Ll9fY29tcGxleF9fKHNlbGYpXG5vYmplY3QuX19pbnRfXyhzZWxmKVxub2JqZWN0Ll9fZmxvYXRfXyhzZWxmKVxub2JqZWN0Ll9fcm91bmRfXyhzZWxmWywgbl0pXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgdGhlIGJ1aWx0LWluIGZ1bmN0aW9ucyAiY29tcGxleCgpIiwgImludCgpIixcbiAgICJmbG9hdCgpIiBhbmQgInJvdW5kKCkiLiAgU2hvdWxkIHJldHVybiBhIHZhbHVlIG9mIHRoZSBhcHByb3ByaWF0ZVxuICAgdHlwZS5cblxub2JqZWN0Ll9faW5kZXhfXyhzZWxmKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50ICJvcGVyYXRvci5pbmRleCgpIiwgYW5kIHdoZW5ldmVyIFB5dGhvbiBuZWVkc1xuICAgdG8gbG9zc2xlc3NseSBjb252ZXJ0IHRoZSBudW1lcmljIG9iamVjdCB0byBhbiBpbnRlZ2VyIG9iamVjdCAoc3VjaFxuICAgYXMgaW4gc2xpY2luZywgb3IgaW4gdGhlIGJ1aWx0LWluICJiaW4oKSIsICJoZXgoKSIgYW5kICJvY3QoKSJcbiAgIGZ1bmN0aW9ucykuIFByZXNlbmNlIG9mIHRoaXMgbWV0aG9kIGluZGljYXRlcyB0aGF0IHRoZSBudW1lcmljXG4gICBvYmplY3QgaXMgYW4gaW50ZWdlciB0eXBlLiAgTXVzdCByZXR1cm4gYW4gaW50ZWdlci5cblxuICAgTm90ZTogSW4gb3JkZXIgdG8gaGF2ZSBhIGNvaGVyZW50IGludGVnZXIgdHlwZSBjbGFzcywgd2hlblxuICAgICAiX19pbmRleF9fKCkiIGlzIGRlZmluZWQgIl9faW50X18oKSIgc2hvdWxkIGFsc28gYmUgZGVmaW5lZCwgYW5kXG4gICAgIGJvdGggc2hvdWxkIHJldHVybiB0aGUgc2FtZSB2YWx1ZS5cbicsCisgJ29iamVjdHMnOiB1J1xuT2JqZWN0cywgdmFsdWVzIGFuZCB0eXBlc1xuKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG4qT2JqZWN0cyogYXJlIFB5dGhvblwncyBhYnN0cmFjdGlvbiBmb3IgZGF0YS4gIEFsbCBkYXRhIGluIGEgUHl0aG9uXG5wcm9ncmFtIGlzIHJlcHJlc2VudGVkIGJ5IG9iamVjdHMgb3IgYnkgcmVsYXRpb25zIGJldHdlZW4gb2JqZWN0cy4gKEluXG5hIHNlbnNlLCBhbmQgaW4gY29uZm9ybWFuY2UgdG8gVm9uIE5ldW1hbm5cJ3MgbW9kZWwgb2YgYSAic3RvcmVkXG5wcm9ncmFtIGNvbXB1dGVyLCIgY29kZSBpcyBhbHNvIHJlcHJlc2VudGVkIGJ5IG9iamVjdHMuKVxuXG5FdmVyeSBvYmplY3QgaGFzIGFuIGlkZW50aXR5LCBhIHR5cGUgYW5kIGEgdmFsdWUuICBBbiBvYmplY3RcJ3NcbippZGVudGl0eSogbmV2ZXIgY2hhbmdlcyBvbmNlIGl0IGhhcyBiZWVuIGNyZWF0ZWQ7IHlvdSBtYXkgdGhpbmsgb2YgaXRcbmFzIHRoZSBvYmplY3RcJ3MgYWRkcmVzcyBpbiBtZW1vcnkuICBUaGUgXCciaXMiXCcgb3BlcmF0b3IgY29tcGFyZXMgdGhlXG5pZGVudGl0eSBvZiB0d28gb2JqZWN0czsgdGhlICJpZCgpIiBmdW5jdGlvbiByZXR1cm5zIGFuIGludGVnZXJcbnJlcHJlc2VudGluZyBpdHMgaWRlbnRpdHkuXG5cbioqQ1B5dGhvbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWw6KiogRm9yIENQeXRob24sICJpZCh4KSIgaXMgdGhlIG1lbW9yeVxuYWRkcmVzcyB3aGVyZSAieCIgaXMgc3RvcmVkLlxuXG5BbiBvYmplY3RcJ3MgdHlwZSBkZXRlcm1pbmVzIHRoZSBvcGVyYXRpb25zIHRoYXQgdGhlIG9iamVjdCBzdXBwb3J0c1xuKGUuZy4sICJkb2VzIGl0IGhhdmUgYSBsZW5ndGg/IikgYW5kIGFsc28gZGVmaW5lcyB0aGUgcG9zc2libGUgdmFsdWVzXG5mb3Igb2JqZWN0cyBvZiB0aGF0IHR5cGUuICBUaGUgInR5cGUoKSIgZnVuY3Rpb24gcmV0dXJucyBhbiBvYmplY3RcJ3NcbnR5cGUgKHdoaWNoIGlzIGFuIG9iamVjdCBpdHNlbGYpLiAgTGlrZSBpdHMgaWRlbnRpdHksIGFuIG9iamVjdFwnc1xuKnR5cGUqIGlzIGFsc28gdW5jaGFuZ2VhYmxlLiBbMV1cblxuVGhlICp2YWx1ZSogb2Ygc29tZSBvYmplY3RzIGNhbiBjaGFuZ2UuICBPYmplY3RzIHdob3NlIHZhbHVlIGNhblxuY2hhbmdlIGFyZSBzYWlkIHRvIGJlICptdXRhYmxlKjsgb2JqZWN0cyB3aG9zZSB2YWx1ZSBpcyB1bmNoYW5nZWFibGVcbm9uY2UgdGhleSBhcmUgY3JlYXRlZCBhcmUgY2FsbGVkICppbW11dGFibGUqLiAoVGhlIHZhbHVlIG9mIGFuXG5pbW11dGFibGUgY29udGFpbmVyIG9iamVjdCB0aGF0IGNvbnRhaW5zIGEgcmVmZXJlbmNlIHRvIGEgbXV0YWJsZVxub2JqZWN0IGNhbiBjaGFuZ2Ugd2hlbiB0aGUgbGF0dGVyXCdzIHZhbHVlIGlzIGNoYW5nZWQ7IGhvd2V2ZXIgdGhlXG5jb250YWluZXIgaXMgc3RpbGwgY29uc2lkZXJlZCBpbW11dGFibGUsIGJlY2F1c2UgdGhlIGNvbGxlY3Rpb24gb2Zcbm9iamVjdHMgaXQgY29udGFpbnMgY2Fubm90IGJlIGNoYW5nZWQuICBTbywgaW1tdXRhYmlsaXR5IGlzIG5vdFxuc3RyaWN0bHkgdGhlIHNhbWUgYXMgaGF2aW5nIGFuIHVuY2hhbmdlYWJsZSB2YWx1ZSwgaXQgaXMgbW9yZSBzdWJ0bGUuKVxuQW4gb2JqZWN0XCdzIG11dGFiaWxpdHkgaXMgZGV0ZXJtaW5lZCBieSBpdHMgdHlwZTsgZm9yIGluc3RhbmNlLFxubnVtYmVycywgc3RyaW5ncyBhbmQgdHVwbGVzIGFyZSBpbW11dGFibGUsIHdoaWxlIGRpY3Rpb25hcmllcyBhbmRcbmxpc3RzIGFyZSBtdXRhYmxlLlxuXG5PYmplY3RzIGFyZSBuZXZlciBleHBsaWNpdGx5IGRlc3Ryb3llZDsgaG93ZXZlciwgd2hlbiB0aGV5IGJlY29tZVxudW5yZWFjaGFibGUgdGhleSBtYXkgYmUgZ2FyYmFnZS1jb2xsZWN0ZWQuICBBbiBpbXBsZW1lbnRhdGlvbiBpc1xuYWxsb3dlZCB0byBwb3N0cG9uZSBnYXJiYWdlIGNvbGxlY3Rpb24gb3Igb21pdCBpdCBhbHRvZ2V0aGVyIC0tLSBpdCBpc1xuYSBtYXR0ZXIgb2YgaW1wbGVtZW50YXRpb24gcXVhbGl0eSBob3cgZ2FyYmFnZSBjb2xsZWN0aW9uIGlzXG5pbXBsZW1lbnRlZCwgYXMgbG9uZyBhcyBubyBvYmplY3RzIGFyZSBjb2xsZWN0ZWQgdGhhdCBhcmUgc3RpbGxcbnJlYWNoYWJsZS5cblxuKipDUHl0aG9uIGltcGxlbWVudGF0aW9uIGRldGFpbDoqKiBDUHl0aG9uIGN1cnJlbnRseSB1c2VzIGEgcmVmZXJlbmNlLVxuY291bnRpbmcgc2NoZW1lIHdpdGggKG9wdGlvbmFsKSBkZWxheWVkIGRldGVjdGlvbiBvZiBjeWNsaWNhbGx5IGxpbmtlZFxuZ2FyYmFnZSwgd2hpY2ggY29sbGVjdHMgbW9zdCBvYmplY3RzIGFzIHNvb24gYXMgdGhleSBiZWNvbWVcbnVucmVhY2hhYmxlLCBidXQgaXMgbm90IGd1YXJhbnRlZWQgdG8gY29sbGVjdCBnYXJiYWdlIGNvbnRhaW5pbmdcbmNpcmN1bGFyIHJlZmVyZW5jZXMuICBTZWUgdGhlIGRvY3VtZW50YXRpb24gb2YgdGhlICJnYyIgbW9kdWxlIGZvclxuaW5mb3JtYXRpb24gb24gY29udHJvbGxpbmcgdGhlIGNvbGxlY3Rpb24gb2YgY3ljbGljIGdhcmJhZ2UuIE90aGVyXG5pbXBsZW1lbnRhdGlvbnMgYWN0IGRpZmZlcmVudGx5IGFuZCBDUHl0aG9uIG1heSBjaGFuZ2UuIERvIG5vdCBkZXBlbmRcbm9uIGltbWVkaWF0ZSBmaW5hbGl6YXRpb24gb2Ygb2JqZWN0cyB3aGVuIHRoZXkgYmVjb21lIHVucmVhY2hhYmxlIChzb1xueW91IHNob3VsZCBhbHdheXMgY2xvc2UgZmlsZXMgZXhwbGljaXRseSkuXG5cbk5vdGUgdGhhdCB0aGUgdXNlIG9mIHRoZSBpbXBsZW1lbnRhdGlvblwncyB0cmFjaW5nIG9yIGRlYnVnZ2luZ1xuZmFjaWxpdGllcyBtYXkga2VlcCBvYmplY3RzIGFsaXZlIHRoYXQgd291bGQgbm9ybWFsbHkgYmUgY29sbGVjdGFibGUuXG5BbHNvIG5vdGUgdGhhdCBjYXRjaGluZyBhbiBleGNlcHRpb24gd2l0aCBhIFwnInRyeSIuLi4iZXhjZXB0IlwnXG5zdGF0ZW1lbnQgbWF5IGtlZXAgb2JqZWN0cyBhbGl2ZS5cblxuU29tZSBvYmplY3RzIGNvbnRhaW4gcmVmZXJlbmNlcyB0byAiZXh0ZXJuYWwiIHJlc291cmNlcyBzdWNoIGFzIG9wZW5cbmZpbGVzIG9yIHdpbmRvd3MuICBJdCBpcyB1bmRlcnN0b29kIHRoYXQgdGhlc2UgcmVzb3VyY2VzIGFyZSBmcmVlZFxud2hlbiB0aGUgb2JqZWN0IGlzIGdhcmJhZ2UtY29sbGVjdGVkLCBidXQgc2luY2UgZ2FyYmFnZSBjb2xsZWN0aW9uIGlzXG5ub3QgZ3VhcmFudGVlZCB0byBoYXBwZW4sIHN1Y2ggb2JqZWN0cyBhbHNvIHByb3ZpZGUgYW4gZXhwbGljaXQgd2F5IHRvXG5yZWxlYXNlIHRoZSBleHRlcm5hbCByZXNvdXJjZSwgdXN1YWxseSBhICJjbG9zZSgpIiBtZXRob2QuIFByb2dyYW1zXG5hcmUgc3Ryb25nbHkgcmVjb21tZW5kZWQgdG8gZXhwbGljaXRseSBjbG9zZSBzdWNoIG9iamVjdHMuICBUaGVcblwnInRyeSIuLi4iZmluYWxseSJcJyBzdGF0ZW1lbnQgYW5kIHRoZSBcJyJ3aXRoIlwnIHN0YXRlbWVudCBwcm92aWRlXG5jb252ZW5pZW50IHdheXMgdG8gZG8gdGhpcy5cblxuU29tZSBvYmplY3RzIGNvbnRhaW4gcmVmZXJlbmNlcyB0byBvdGhlciBvYmplY3RzOyB0aGVzZSBhcmUgY2FsbGVkXG4qY29udGFpbmVycyouIEV4YW1wbGVzIG9mIGNvbnRhaW5lcnMgYXJlIHR1cGxlcywgbGlzdHMgYW5kXG5kaWN0aW9uYXJpZXMuICBUaGUgcmVmZXJlbmNlcyBhcmUgcGFydCBvZiBhIGNvbnRhaW5lclwncyB2YWx1ZS4gIEluXG5tb3N0IGNhc2VzLCB3aGVuIHdlIHRhbGsgYWJvdXQgdGhlIHZhbHVlIG9mIGEgY29udGFpbmVyLCB3ZSBpbXBseSB0aGVcbnZhbHVlcywgbm90IHRoZSBpZGVudGl0aWVzIG9mIHRoZSBjb250YWluZWQgb2JqZWN0czsgaG93ZXZlciwgd2hlbiB3ZVxudGFsayBhYm91dCB0aGUgbXV0YWJpbGl0eSBvZiBhIGNvbnRhaW5lciwgb25seSB0aGUgaWRlbnRpdGllcyBvZiB0aGVcbmltbWVkaWF0ZWx5IGNvbnRhaW5lZCBvYmplY3RzIGFyZSBpbXBsaWVkLiAgU28sIGlmIGFuIGltbXV0YWJsZVxuY29udGFpbmVyIChsaWtlIGEgdHVwbGUpIGNvbnRhaW5zIGEgcmVmZXJlbmNlIHRvIGEgbXV0YWJsZSBvYmplY3QsIGl0c1xudmFsdWUgY2hhbmdlcyBpZiB0aGF0IG11dGFibGUgb2JqZWN0IGlzIGNoYW5nZWQuXG5cblR5cGVzIGFmZmVjdCBhbG1vc3QgYWxsIGFzcGVjdHMgb2Ygb2JqZWN0IGJlaGF2aW9yLiAgRXZlbiB0aGVcbmltcG9ydGFuY2Ugb2Ygb2JqZWN0IGlkZW50aXR5IGlzIGFmZmVjdGVkIGluIHNvbWUgc2Vuc2U6IGZvciBpbW11dGFibGVcbnR5cGVzLCBvcGVyYXRpb25zIHRoYXQgY29tcHV0ZSBuZXcgdmFsdWVzIG1heSBhY3R1YWxseSByZXR1cm4gYVxucmVmZXJlbmNlIHRvIGFueSBleGlzdGluZyBvYmplY3Qgd2l0aCB0aGUgc2FtZSB0eXBlIGFuZCB2YWx1ZSwgd2hpbGVcbmZvciBtdXRhYmxlIG9iamVjdHMgdGhpcyBpcyBub3QgYWxsb3dlZC4gIEUuZy4sIGFmdGVyICJhID0gMTsgYiA9IDEiLFxuImEiIGFuZCAiYiIgbWF5IG9yIG1heSBub3QgcmVmZXIgdG8gdGhlIHNhbWUgb2JqZWN0IHdpdGggdGhlIHZhbHVlXG5vbmUsIGRlcGVuZGluZyBvbiB0aGUgaW1wbGVtZW50YXRpb24sIGJ1dCBhZnRlciAiYyA9IFtdOyBkID0gW10iLCAiYyJcbmFuZCAiZCIgYXJlIGd1YXJhbnRlZWQgdG8gcmVmZXIgdG8gdHdvIGRpZmZlcmVudCwgdW5pcXVlLCBuZXdseVxuY3JlYXRlZCBlbXB0eSBsaXN0cy4gKE5vdGUgdGhhdCAiYyA9IGQgPSBbXSIgYXNzaWducyB0aGUgc2FtZSBvYmplY3RcbnRvIGJvdGggImMiIGFuZCAiZCIuKVxuJywKKyAnb3BlcmF0b3Itc3VtbWFyeSc6IHUnXG5PcGVyYXRvciBwcmVjZWRlbmNlXG4qKioqKioqKioqKioqKioqKioqXG5cblRoZSBmb2xsb3dpbmcgdGFibGUgc3VtbWFyaXplcyB0aGUgb3BlcmF0b3IgcHJlY2VkZW5jZSBpbiBQeXRob24sIGZyb21cbmxvd2VzdCBwcmVjZWRlbmNlIChsZWFzdCBiaW5kaW5nKSB0byBoaWdoZXN0IHByZWNlZGVuY2UgKG1vc3RcbmJpbmRpbmcpLiAgT3BlcmF0b3JzIGluIHRoZSBzYW1lIGJveCBoYXZlIHRoZSBzYW1lIHByZWNlZGVuY2UuICBVbmxlc3NcbnRoZSBzeW50YXggaXMgZXhwbGljaXRseSBnaXZlbiwgb3BlcmF0b3JzIGFyZSBiaW5hcnkuICBPcGVyYXRvcnMgaW5cbnRoZSBzYW1lIGJveCBncm91cCBsZWZ0IHRvIHJpZ2h0IChleGNlcHQgZm9yIGV4cG9uZW50aWF0aW9uLCB3aGljaFxuZ3JvdXBzIGZyb20gcmlnaHQgdG8gbGVmdCkuXG5cbk5vdGUgdGhhdCBjb21wYXJpc29ucywgbWVtYmVyc2hpcCB0ZXN0cywgYW5kIGlkZW50aXR5IHRlc3RzLCBhbGwgaGF2ZVxudGhlIHNhbWUgcHJlY2VkZW5jZSBhbmQgaGF2ZSBhIGxlZnQtdG8tcmlnaHQgY2hhaW5pbmcgZmVhdHVyZSBhc1xuZGVzY3JpYmVkIGluIHRoZSAqQ29tcGFyaXNvbnMqIHNlY3Rpb24uXG5cbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgT3BlcmF0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PStcbnwgImxhbWJkYSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBMYW1iZGEgZXhwcmVzc2lvbiAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgImlmIiAtLSAiZWxzZSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDb25kaXRpb25hbCBleHByZXNzaW9uICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgIm9yIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBCb29sZWFuIE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgImFuZCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBCb29sZWFuIEFORCAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgIm5vdCIgIngiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBCb29sZWFuIE5PVCAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgImluIiwgIm5vdCBpbiIsICJpcyIsICJpcyBub3QiLCAiPCIsICI8PSIsICI+IiwgfCBDb21wYXJpc29ucywgaW5jbHVkaW5nIG1lbWJlcnNoaXAgICAgIHxcbnwgIj49IiwgIiE9IiwgIj09IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0ZXN0cyBhbmQgaWRlbnRpdHkgdGVzdHMgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgInwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBCaXR3aXNlIE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgIl4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBCaXR3aXNlIFhPUiAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgIiYiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBCaXR3aXNlIEFORCAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgIjw8IiwgIj4+IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBTaGlmdHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgIisiLCAiLSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBBZGRpdGlvbiBhbmQgc3VidHJhY3Rpb24gICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgIioiLCAiLyIsICIvLyIsICIlIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNdWx0aXBsaWNhdGlvbiwgZGl2aXNpb24sIHJlbWFpbmRlciAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbNV0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgIit4IiwgIi14IiwgIn54IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQb3NpdGl2ZSwgbmVnYXRpdmUsIGJpdHdpc2UgTk9UICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgIioqIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBFeHBvbmVudGlhdGlvbiBbNl0gICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgInhbaW5kZXhdIiwgInhbaW5kZXg6aW5kZXhdIiwgICAgICAgICAgICAgICAgICAgfCBTdWJzY3JpcHRpb24sIHNsaWNpbmcsIGNhbGwsICAgICAgICAgIHxcbnwgIngoYXJndW1lbnRzLi4uKSIsICJ4LmF0dHJpYnV0ZSIgICAgICAgICAgICAgICAgfCBhdHRyaWJ1dGUgcmVmZXJlbmNlICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgIihleHByZXNzaW9ucy4uLikiLCAiW2V4cHJlc3Npb25zLi4uXSIsICJ7a2V5OiAgfCBCaW5kaW5nIG9yIHR1cGxlIGRpc3BsYXksIGxpc3QgICAgICAgIHxcbnwgdmFsdWUuLi59IiwgIntleHByZXNzaW9ucy4uLn0iICAgICAgICAgICAgICAgICAgfCBkaXNwbGF5LCBkaWN0aW9uYXJ5IGRpc3BsYXksIHNldCAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBkaXNwbGF5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcblxuLVsgRm9vdG5vdGVzIF0tXG5cblsxXSBXaGlsZSAiYWJzKHgleSkgPCBhYnMoeSkiIGlzIHRydWUgbWF0aGVtYXRpY2FsbHksIGZvciBmbG9hdHNcbiAgICBpdCBtYXkgbm90IGJlIHRydWUgbnVtZXJpY2FsbHkgZHVlIHRvIHJvdW5kb2ZmLiAgRm9yIGV4YW1wbGUsIGFuZFxuICAgIGFzc3VtaW5nIGEgcGxhdGZvcm0gb24gd2hpY2ggYSBQeXRob24gZmxvYXQgaXMgYW4gSUVFRSA3NTQgZG91YmxlLVxuICAgIHByZWNpc2lvbiBudW1iZXIsIGluIG9yZGVyIHRoYXQgIi0xZS0xMDAgJSAxZTEwMCIgaGF2ZSB0aGUgc2FtZVxuICAgIHNpZ24gYXMgIjFlMTAwIiwgdGhlIGNvbXB1dGVkIHJlc3VsdCBpcyAiLTFlLTEwMCArIDFlMTAwIiwgd2hpY2hcbiAgICBpcyBudW1lcmljYWxseSBleGFjdGx5IGVxdWFsIHRvICIxZTEwMCIuICBUaGUgZnVuY3Rpb25cbiAgICAibWF0aC5mbW9kKCkiIHJldHVybnMgYSByZXN1bHQgd2hvc2Ugc2lnbiBtYXRjaGVzIHRoZSBzaWduIG9mIHRoZVxuICAgIGZpcnN0IGFyZ3VtZW50IGluc3RlYWQsIGFuZCBzbyByZXR1cm5zICItMWUtMTAwIiBpbiB0aGlzIGNhc2UuXG4gICAgV2hpY2ggYXBwcm9hY2ggaXMgbW9yZSBhcHByb3ByaWF0ZSBkZXBlbmRzIG9uIHRoZSBhcHBsaWNhdGlvbi5cblxuWzJdIElmIHggaXMgdmVyeSBjbG9zZSB0byBhbiBleGFjdCBpbnRlZ2VyIG11bHRpcGxlIG9mIHksIGl0XCdzXG4gICAgcG9zc2libGUgZm9yICJ4Ly95IiB0byBiZSBvbmUgbGFyZ2VyIHRoYW4gIih4LXgleSkvL3kiIGR1ZSB0b1xuICAgIHJvdW5kaW5nLiAgSW4gc3VjaCBjYXNlcywgUHl0aG9uIHJldHVybnMgdGhlIGxhdHRlciByZXN1bHQsIGluXG4gICAgb3JkZXIgdG8gcHJlc2VydmUgdGhhdCAiZGl2bW9kKHgseSlbMF0gKiB5ICsgeCAlIHkiIGJlIHZlcnkgY2xvc2VcbiAgICB0byAieCIuXG5cblszXSBUaGUgVW5pY29kZSBzdGFuZGFyZCBkaXN0aW5ndWlzaGVzIGJldHdlZW4gKmNvZGUgcG9pbnRzKiAoZS5nLlxuICAgIFUrMDA0MSkgYW5kICphYnN0cmFjdCBjaGFyYWN0ZXJzKiAoZS5nLiAiTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSIpLlxuICAgIFdoaWxlIG1vc3QgYWJzdHJhY3QgY2hhcmFjdGVycyBpbiBVbmljb2RlIGFyZSBvbmx5IHJlcHJlc2VudGVkXG4gICAgdXNpbmcgb25lIGNvZGUgcG9pbnQsIHRoZXJlIGlzIGEgbnVtYmVyIG9mIGFic3RyYWN0IGNoYXJhY3RlcnNcbiAgICB0aGF0IGNhbiBpbiBhZGRpdGlvbiBiZSByZXByZXNlbnRlZCB1c2luZyBhIHNlcXVlbmNlIG9mIG1vcmUgdGhhblxuICAgIG9uZSBjb2RlIHBvaW50LiAgRm9yIGV4YW1wbGUsIHRoZSBhYnN0cmFjdCBjaGFyYWN0ZXIgIkxBVElOXG4gICAgQ0FQSVRBTCBMRVRURVIgQyBXSVRIIENFRElMTEEiIGNhbiBiZSByZXByZXNlbnRlZCBhcyBhIHNpbmdsZVxuICAgICpwcmVjb21wb3NlZCBjaGFyYWN0ZXIqIGF0IGNvZGUgcG9zaXRpb24gVSswMEM3LCBvciBhcyBhIHNlcXVlbmNlXG4gICAgb2YgYSAqYmFzZSBjaGFyYWN0ZXIqIGF0IGNvZGUgcG9zaXRpb24gVSswMDQzIChMQVRJTiBDQVBJVEFMXG4gICAgTEVUVEVSIEMpLCBmb2xsb3dlZCBieSBhICpjb21iaW5pbmcgY2hhcmFjdGVyKiBhdCBjb2RlIHBvc2l0aW9uXG4gICAgVSswMzI3IChDT01CSU5JTkcgQ0VESUxMQSkuXG5cbiAgICBUaGUgY29tcGFyaXNvbiBvcGVyYXRvcnMgb24gc3RyaW5ncyBjb21wYXJlIGF0IHRoZSBsZXZlbCBvZlxuICAgIFVuaWNvZGUgY29kZSBwb2ludHMuIFRoaXMgbWF5IGJlIGNvdW50ZXItaW50dWl0aXZlIHRvIGh1bWFucy4gIEZvclxuICAgIGV4YW1wbGUsICIiXFx1MDBDNyIgPT0gIlxcdTAwNDNcXHUwMzI3IiIgaXMgIkZhbHNlIiwgZXZlbiB0aG91Z2ggYm90aFxuICAgIHN0cmluZ3MgcmVwcmVzZW50IHRoZSBzYW1lIGFic3RyYWN0IGNoYXJhY3RlciAiTEFUSU4gQ0FQSVRBTFxuICAgIExFVFRFUiBDIFdJVEggQ0VESUxMQSIuXG5cbiAgICBUbyBjb21wYXJlIHN0cmluZ3MgYXQgdGhlIGxldmVsIG9mIGFic3RyYWN0IGNoYXJhY3RlcnMgKHRoYXQgaXMsXG4gICAgaW4gYSB3YXkgaW50dWl0aXZlIHRvIGh1bWFucyksIHVzZSAidW5pY29kZWRhdGEubm9ybWFsaXplKCkiLlxuXG5bNF0gRHVlIHRvIGF1dG9tYXRpYyBnYXJiYWdlLWNvbGxlY3Rpb24sIGZyZWUgbGlzdHMsIGFuZCB0aGVcbiAgICBkeW5hbWljIG5hdHVyZSBvZiBkZXNjcmlwdG9ycywgeW91IG1heSBub3RpY2Ugc2VlbWluZ2x5IHVudXN1YWxcbiAgICBiZWhhdmlvdXIgaW4gY2VydGFpbiB1c2VzIG9mIHRoZSAiaXMiIG9wZXJhdG9yLCBsaWtlIHRob3NlXG4gICAgaW52b2x2aW5nIGNvbXBhcmlzb25zIGJldHdlZW4gaW5zdGFuY2UgbWV0aG9kcywgb3IgY29uc3RhbnRzLlxuICAgIENoZWNrIHRoZWlyIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mby5cblxuWzVdIFRoZSAiJSIgb3BlcmF0b3IgaXMgYWxzbyB1c2VkIGZvciBzdHJpbmcgZm9ybWF0dGluZzsgdGhlIHNhbWVcbiAgICBwcmVjZWRlbmNlIGFwcGxpZXMuXG5cbls2XSBUaGUgcG93ZXIgb3BlcmF0b3IgIioqIiBiaW5kcyBsZXNzIHRpZ2h0bHkgdGhhbiBhbiBhcml0aG1ldGljXG4gICAgb3IgYml0d2lzZSB1bmFyeSBvcGVyYXRvciBvbiBpdHMgcmlnaHQsIHRoYXQgaXMsICIyKiotMSIgaXMgIjAuNSIuXG4nLAorICdwYXNzJzogdSdcblRoZSAicGFzcyIgc3RhdGVtZW50XG4qKioqKioqKioqKioqKioqKioqKlxuXG4gICBwYXNzX3N0bXQgOjo9ICJwYXNzIlxuXG4icGFzcyIgaXMgYSBudWxsIG9wZXJhdGlvbiAtLS0gd2hlbiBpdCBpcyBleGVjdXRlZCwgbm90aGluZyBoYXBwZW5zLlxuSXQgaXMgdXNlZnVsIGFzIGEgcGxhY2Vob2xkZXIgd2hlbiBhIHN0YXRlbWVudCBpcyByZXF1aXJlZFxuc3ludGFjdGljYWxseSwgYnV0IG5vIGNvZGUgbmVlZHMgdG8gYmUgZXhlY3V0ZWQsIGZvciBleGFtcGxlOlxuXG4gICBkZWYgZihhcmcpOiBwYXNzICAgICMgYSBmdW5jdGlvbiB0aGF0IGRvZXMgbm90aGluZyAoeWV0KVxuXG4gICBjbGFzcyBDOiBwYXNzICAgICAgICMgYSBjbGFzcyB3aXRoIG5vIG1ldGhvZHMgKHlldClcbicsCisgJ3Bvd2VyJzogdSdcblRoZSBwb3dlciBvcGVyYXRvclxuKioqKioqKioqKioqKioqKioqXG5cblRoZSBwb3dlciBvcGVyYXRvciBiaW5kcyBtb3JlIHRpZ2h0bHkgdGhhbiB1bmFyeSBvcGVyYXRvcnMgb24gaXRzXG5sZWZ0OyBpdCBiaW5kcyBsZXNzIHRpZ2h0bHkgdGhhbiB1bmFyeSBvcGVyYXRvcnMgb24gaXRzIHJpZ2h0LiAgVGhlXG5zeW50YXggaXM6XG5cbiAgIHBvd2VyIDo6PSBwcmltYXJ5IFsiKioiIHVfZXhwcl1cblxuVGh1cywgaW4gYW4gdW5wYXJlbnRoZXNpemVkIHNlcXVlbmNlIG9mIHBvd2VyIGFuZCB1bmFyeSBvcGVyYXRvcnMsIHRoZVxub3BlcmF0b3JzIGFyZSBldmFsdWF0ZWQgZnJvbSByaWdodCB0byBsZWZ0ICh0aGlzIGRvZXMgbm90IGNvbnN0cmFpblxudGhlIGV2YWx1YXRpb24gb3JkZXIgZm9yIHRoZSBvcGVyYW5kcyk6ICItMSoqMiIgcmVzdWx0cyBpbiAiLTEiLlxuXG5UaGUgcG93ZXIgb3BlcmF0b3IgaGFzIHRoZSBzYW1lIHNlbWFudGljcyBhcyB0aGUgYnVpbHQtaW4gInBvdygpIlxuZnVuY3Rpb24sIHdoZW4gY2FsbGVkIHdpdGggdHdvIGFyZ3VtZW50czogaXQgeWllbGRzIGl0cyBsZWZ0IGFyZ3VtZW50XG5yYWlzZWQgdG8gdGhlIHBvd2VyIG9mIGl0cyByaWdodCBhcmd1bWVudC4gIFRoZSBudW1lcmljIGFyZ3VtZW50cyBhcmVcbmZpcnN0IGNvbnZlcnRlZCB0byBhIGNvbW1vbiB0eXBlLCBhbmQgdGhlIHJlc3VsdCBpcyBvZiB0aGF0IHR5cGUuXG5cbkZvciBpbnQgb3BlcmFuZHMsIHRoZSByZXN1bHQgaGFzIHRoZSBzYW1lIHR5cGUgYXMgdGhlIG9wZXJhbmRzIHVubGVzc1xudGhlIHNlY29uZCBhcmd1bWVudCBpcyBuZWdhdGl2ZTsgaW4gdGhhdCBjYXNlLCBhbGwgYXJndW1lbnRzIGFyZVxuY29udmVydGVkIHRvIGZsb2F0IGFuZCBhIGZsb2F0IHJlc3VsdCBpcyBkZWxpdmVyZWQuIEZvciBleGFtcGxlLFxuIjEwKioyIiByZXR1cm5zICIxMDAiLCBidXQgIjEwKiotMiIgcmV0dXJucyAiMC4wMSIuXG5cblJhaXNpbmcgIjAuMCIgdG8gYSBuZWdhdGl2ZSBwb3dlciByZXN1bHRzIGluIGEgIlplcm9EaXZpc2lvbkVycm9yIi5cblJhaXNpbmcgYSBuZWdhdGl2ZSBudW1iZXIgdG8gYSBmcmFjdGlvbmFsIHBvd2VyIHJlc3VsdHMgaW4gYSAiY29tcGxleCJcbm51bWJlci4gKEluIGVhcmxpZXIgdmVyc2lvbnMgaXQgcmFpc2VkIGEgIlZhbHVlRXJyb3IiLilcbicsCisgJ3JhaXNlJzogdSdcblRoZSAicmFpc2UiIHN0YXRlbWVudFxuKioqKioqKioqKioqKioqKioqKioqXG5cbiAgIHJhaXNlX3N0bXQgOjo9ICJyYWlzZSIgW2V4cHJlc3Npb24gWyJmcm9tIiBleHByZXNzaW9uXV1cblxuSWYgbm8gZXhwcmVzc2lvbnMgYXJlIHByZXNlbnQsICJyYWlzZSIgcmUtcmFpc2VzIHRoZSBsYXN0IGV4Y2VwdGlvblxudGhhdCB3YXMgYWN0aXZlIGluIHRoZSBjdXJyZW50IHNjb3BlLiAgSWYgbm8gZXhjZXB0aW9uIGlzIGFjdGl2ZSBpblxudGhlIGN1cnJlbnQgc2NvcGUsIGEgIlJ1bnRpbWVFcnJvciIgZXhjZXB0aW9uIGlzIHJhaXNlZCBpbmRpY2F0aW5nXG50aGF0IHRoaXMgaXMgYW4gZXJyb3IuXG5cbk90aGVyd2lzZSwgInJhaXNlIiBldmFsdWF0ZXMgdGhlIGZpcnN0IGV4cHJlc3Npb24gYXMgdGhlIGV4Y2VwdGlvblxub2JqZWN0LiAgSXQgbXVzdCBiZSBlaXRoZXIgYSBzdWJjbGFzcyBvciBhbiBpbnN0YW5jZSBvZlxuIkJhc2VFeGNlcHRpb24iLiBJZiBpdCBpcyBhIGNsYXNzLCB0aGUgZXhjZXB0aW9uIGluc3RhbmNlIHdpbGwgYmVcbm9idGFpbmVkIHdoZW4gbmVlZGVkIGJ5IGluc3RhbnRpYXRpbmcgdGhlIGNsYXNzIHdpdGggbm8gYXJndW1lbnRzLlxuXG5UaGUgKnR5cGUqIG9mIHRoZSBleGNlcHRpb24gaXMgdGhlIGV4Y2VwdGlvbiBpbnN0YW5jZVwncyBjbGFzcywgdGhlXG4qdmFsdWUqIGlzIHRoZSBpbnN0YW5jZSBpdHNlbGYuXG5cbkEgdHJhY2ViYWNrIG9iamVjdCBpcyBub3JtYWxseSBjcmVhdGVkIGF1dG9tYXRpY2FsbHkgd2hlbiBhbiBleGNlcHRpb25cbmlzIHJhaXNlZCBhbmQgYXR0YWNoZWQgdG8gaXQgYXMgdGhlICJfX3RyYWNlYmFja19fIiBhdHRyaWJ1dGUsIHdoaWNoXG5pcyB3cml0YWJsZS4gWW91IGNhbiBjcmVhdGUgYW4gZXhjZXB0aW9uIGFuZCBzZXQgeW91ciBvd24gdHJhY2ViYWNrIGluXG5vbmUgc3RlcCB1c2luZyB0aGUgIndpdGhfdHJhY2ViYWNrKCkiIGV4Y2VwdGlvbiBtZXRob2QgKHdoaWNoIHJldHVybnNcbnRoZSBzYW1lIGV4Y2VwdGlvbiBpbnN0YW5jZSwgd2l0aCBpdHMgdHJhY2ViYWNrIHNldCB0byBpdHMgYXJndW1lbnQpLFxubGlrZSBzbzpcblxuICAgcmFpc2UgRXhjZXB0aW9uKCJmb28gb2NjdXJyZWQiKS53aXRoX3RyYWNlYmFjayh0cmFjZWJhY2tvYmopXG5cblRoZSAiZnJvbSIgY2xhdXNlIGlzIHVzZWQgZm9yIGV4Y2VwdGlvbiBjaGFpbmluZzogaWYgZ2l2ZW4sIHRoZSBzZWNvbmRcbipleHByZXNzaW9uKiBtdXN0IGJlIGFub3RoZXIgZXhjZXB0aW9uIGNsYXNzIG9yIGluc3RhbmNlLCB3aGljaCB3aWxsXG50aGVuIGJlIGF0dGFjaGVkIHRvIHRoZSByYWlzZWQgZXhjZXB0aW9uIGFzIHRoZSAiX19jYXVzZV9fIiBhdHRyaWJ1dGVcbih3aGljaCBpcyB3cml0YWJsZSkuICBJZiB0aGUgcmFpc2VkIGV4Y2VwdGlvbiBpcyBub3QgaGFuZGxlZCwgYm90aFxuZXhjZXB0aW9ucyB3aWxsIGJlIHByaW50ZWQ6XG5cbiAgID4+PiB0cnk6XG4gICAuLi4gICAgIHByaW50KDEgLyAwKVxuICAgLi4uIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOlxuICAgLi4uICAgICByYWlzZSBSdW50aW1lRXJyb3IoIlNvbWV0aGluZyBiYWQgaGFwcGVuZWQiKSBmcm9tIGV4Y1xuICAgLi4uXG4gICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6XG4gICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDIsIGluIDxtb2R1bGU+XG4gICBaZXJvRGl2aXNpb25FcnJvcjogaW50IGRpdmlzaW9uIG9yIG1vZHVsbyBieSB6ZXJvXG5cbiAgIFRoZSBhYm92ZSBleGNlcHRpb24gd2FzIHRoZSBkaXJlY3QgY2F1c2Ugb2YgdGhlIGZvbGxvd2luZyBleGNlcHRpb246XG5cbiAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KTpcbiAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgNCwgaW4gPG1vZHVsZT5cbiAgIFJ1bnRpbWVFcnJvcjogU29tZXRoaW5nIGJhZCBoYXBwZW5lZFxuXG5BIHNpbWlsYXIgbWVjaGFuaXNtIHdvcmtzIGltcGxpY2l0bHkgaWYgYW4gZXhjZXB0aW9uIGlzIHJhaXNlZCBpbnNpZGVcbmFuIGV4Y2VwdGlvbiBoYW5kbGVyIG9yIGEgImZpbmFsbHkiIGNsYXVzZTogdGhlIHByZXZpb3VzIGV4Y2VwdGlvbiBpc1xudGhlbiBhdHRhY2hlZCBhcyB0aGUgbmV3IGV4Y2VwdGlvblwncyAiX19jb250ZXh0X18iIGF0dHJpYnV0ZTpcblxuICAgPj4+IHRyeTpcbiAgIC4uLiAgICAgcHJpbnQoMSAvIDApXG4gICAuLi4gZXhjZXB0OlxuICAgLi4uICAgICByYWlzZSBSdW50aW1lRXJyb3IoIlNvbWV0aGluZyBiYWQgaGFwcGVuZWQiKVxuICAgLi4uXG4gICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6XG4gICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDIsIGluIDxtb2R1bGU+XG4gICBaZXJvRGl2aXNpb25FcnJvcjogaW50IGRpdmlzaW9uIG9yIG1vZHVsbyBieSB6ZXJvXG5cbiAgIER1cmluZyBoYW5kbGluZyBvZiB0aGUgYWJvdmUgZXhjZXB0aW9uLCBhbm90aGVyIGV4Y2VwdGlvbiBvY2N1cnJlZDpcblxuICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOlxuICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSA0LCBpbiA8bW9kdWxlPlxuICAgUnVudGltZUVycm9yOiBTb21ldGhpbmcgYmFkIGhhcHBlbmVkXG5cbkFkZGl0aW9uYWwgaW5mb3JtYXRpb24gb24gZXhjZXB0aW9ucyBjYW4gYmUgZm91bmQgaW4gc2VjdGlvblxuKkV4Y2VwdGlvbnMqLCBhbmQgaW5mb3JtYXRpb24gYWJvdXQgaGFuZGxpbmcgZXhjZXB0aW9ucyBpcyBpbiBzZWN0aW9uXG4qVGhlIHRyeSBzdGF0ZW1lbnQqLlxuJywKKyAncmV0dXJuJzogdSdcblRoZSAicmV0dXJuIiBzdGF0ZW1lbnRcbioqKioqKioqKioqKioqKioqKioqKipcblxuICAgcmV0dXJuX3N0bXQgOjo9ICJyZXR1cm4iIFtleHByZXNzaW9uX2xpc3RdXG5cbiJyZXR1cm4iIG1heSBvbmx5IG9jY3VyIHN5bnRhY3RpY2FsbHkgbmVzdGVkIGluIGEgZnVuY3Rpb24gZGVmaW5pdGlvbixcbm5vdCB3aXRoaW4gYSBuZXN0ZWQgY2xhc3MgZGVmaW5pdGlvbi5cblxuSWYgYW4gZXhwcmVzc2lvbiBsaXN0IGlzIHByZXNlbnQsIGl0IGlzIGV2YWx1YXRlZCwgZWxzZSAiTm9uZSIgaXNcbnN1YnN0aXR1dGVkLlxuXG4icmV0dXJuIiBsZWF2ZXMgdGhlIGN1cnJlbnQgZnVuY3Rpb24gY2FsbCB3aXRoIHRoZSBleHByZXNzaW9uIGxpc3QgKG9yXG4iTm9uZSIpIGFzIHJldHVybiB2YWx1ZS5cblxuV2hlbiAicmV0dXJuIiBwYXNzZXMgY29udHJvbCBvdXQgb2YgYSAidHJ5IiBzdGF0ZW1lbnQgd2l0aCBhICJmaW5hbGx5IlxuY2xhdXNlLCB0aGF0ICJmaW5hbGx5IiBjbGF1c2UgaXMgZXhlY3V0ZWQgYmVmb3JlIHJlYWxseSBsZWF2aW5nIHRoZVxuZnVuY3Rpb24uXG5cbkluIGEgZ2VuZXJhdG9yIGZ1bmN0aW9uLCB0aGUgInJldHVybiIgc3RhdGVtZW50IGluZGljYXRlcyB0aGF0IHRoZVxuZ2VuZXJhdG9yIGlzIGRvbmUgYW5kIHdpbGwgY2F1c2UgIlN0b3BJdGVyYXRpb24iIHRvIGJlIHJhaXNlZC4gVGhlXG5yZXR1cm5lZCB2YWx1ZSAoaWYgYW55KSBpcyB1c2VkIGFzIGFuIGFyZ3VtZW50IHRvIGNvbnN0cnVjdFxuIlN0b3BJdGVyYXRpb24iIGFuZCBiZWNvbWVzIHRoZSAiU3RvcEl0ZXJhdGlvbi52YWx1ZSIgYXR0cmlidXRlLlxuJywKKyAnc2VxdWVuY2UtdHlwZXMnOiB1J1xuRW11bGF0aW5nIGNvbnRhaW5lciB0eXBlc1xuKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG5UaGUgZm9sbG93aW5nIG1ldGhvZHMgY2FuIGJlIGRlZmluZWQgdG8gaW1wbGVtZW50IGNvbnRhaW5lciBvYmplY3RzLlxuQ29udGFpbmVycyB1c3VhbGx5IGFyZSBzZXF1ZW5jZXMgKHN1Y2ggYXMgbGlzdHMgb3IgdHVwbGVzKSBvciBtYXBwaW5nc1xuKGxpa2UgZGljdGlvbmFyaWVzKSwgYnV0IGNhbiByZXByZXNlbnQgb3RoZXIgY29udGFpbmVycyBhcyB3ZWxsLiAgVGhlXG5maXJzdCBzZXQgb2YgbWV0aG9kcyBpcyB1c2VkIGVpdGhlciB0byBlbXVsYXRlIGEgc2VxdWVuY2Ugb3IgdG9cbmVtdWxhdGUgYSBtYXBwaW5nOyB0aGUgZGlmZmVyZW5jZSBpcyB0aGF0IGZvciBhIHNlcXVlbmNlLCB0aGVcbmFsbG93YWJsZSBrZXlzIHNob3VsZCBiZSB0aGUgaW50ZWdlcnMgKmsqIGZvciB3aGljaCAiMCA8PSBrIDwgTiIgd2hlcmVcbipOKiBpcyB0aGUgbGVuZ3RoIG9mIHRoZSBzZXF1ZW5jZSwgb3Igc2xpY2Ugb2JqZWN0cywgd2hpY2ggZGVmaW5lIGFcbnJhbmdlIG9mIGl0ZW1zLiAgSXQgaXMgYWxzbyByZWNvbW1lbmRlZCB0aGF0IG1hcHBpbmdzIHByb3ZpZGUgdGhlXG5tZXRob2RzICJrZXlzKCkiLCAidmFsdWVzKCkiLCAiaXRlbXMoKSIsICJnZXQoKSIsICJjbGVhcigpIixcbiJzZXRkZWZhdWx0KCkiLCAicG9wKCkiLCAicG9waXRlbSgpIiwgImNvcHkoKSIsIGFuZCAidXBkYXRlKCkiXG5iZWhhdmluZyBzaW1pbGFyIHRvIHRob3NlIGZvciBQeXRob25cJ3Mgc3RhbmRhcmQgZGljdGlvbmFyeSBvYmplY3RzLlxuVGhlICJjb2xsZWN0aW9ucyIgbW9kdWxlIHByb3ZpZGVzIGEgIk11dGFibGVNYXBwaW5nIiBhYnN0cmFjdCBiYXNlXG5jbGFzcyB0byBoZWxwIGNyZWF0ZSB0aG9zZSBtZXRob2RzIGZyb20gYSBiYXNlIHNldCBvZiAiX19nZXRpdGVtX18oKSIsXG4iX19zZXRpdGVtX18oKSIsICJfX2RlbGl0ZW1fXygpIiwgYW5kICJrZXlzKCkiLiBNdXRhYmxlIHNlcXVlbmNlc1xuc2hvdWxkIHByb3ZpZGUgbWV0aG9kcyAiYXBwZW5kKCkiLCAiY291bnQoKSIsICJpbmRleCgpIiwgImV4dGVuZCgpIixcbiJpbnNlcnQoKSIsICJwb3AoKSIsICJyZW1vdmUoKSIsICJyZXZlcnNlKCkiIGFuZCAic29ydCgpIiwgbGlrZSBQeXRob25cbnN0YW5kYXJkIGxpc3Qgb2JqZWN0cy4gIEZpbmFsbHksIHNlcXVlbmNlIHR5cGVzIHNob3VsZCBpbXBsZW1lbnRcbmFkZGl0aW9uIChtZWFuaW5nIGNvbmNhdGVuYXRpb24pIGFuZCBtdWx0aXBsaWNhdGlvbiAobWVhbmluZ1xucmVwZXRpdGlvbikgYnkgZGVmaW5pbmcgdGhlIG1ldGhvZHMgIl9fYWRkX18oKSIsICJfX3JhZGRfXygpIixcbiJfX2lhZGRfXygpIiwgIl9fbXVsX18oKSIsICJfX3JtdWxfXygpIiBhbmQgIl9faW11bF9fKCkiIGRlc2NyaWJlZFxuYmVsb3c7IHRoZXkgc2hvdWxkIG5vdCBkZWZpbmUgb3RoZXIgbnVtZXJpY2FsIG9wZXJhdG9ycy4gIEl0IGlzXG5yZWNvbW1lbmRlZCB0aGF0IGJvdGggbWFwcGluZ3MgYW5kIHNlcXVlbmNlcyBpbXBsZW1lbnQgdGhlXG4iX19jb250YWluc19fKCkiIG1ldGhvZCB0byBhbGxvdyBlZmZpY2llbnQgdXNlIG9mIHRoZSAiaW4iIG9wZXJhdG9yO1xuZm9yIG1hcHBpbmdzLCAiaW4iIHNob3VsZCBzZWFyY2ggdGhlIG1hcHBpbmdcJ3Mga2V5czsgZm9yIHNlcXVlbmNlcywgaXRcbnNob3VsZCBzZWFyY2ggdGhyb3VnaCB0aGUgdmFsdWVzLiAgSXQgaXMgZnVydGhlciByZWNvbW1lbmRlZCB0aGF0IGJvdGhcbm1hcHBpbmdzIGFuZCBzZXF1ZW5jZXMgaW1wbGVtZW50IHRoZSAiX19pdGVyX18oKSIgbWV0aG9kIHRvIGFsbG93XG5lZmZpY2llbnQgaXRlcmF0aW9uIHRocm91Z2ggdGhlIGNvbnRhaW5lcjsgZm9yIG1hcHBpbmdzLCAiX19pdGVyX18oKSJcbnNob3VsZCBiZSB0aGUgc2FtZSBhcyAia2V5cygpIjsgZm9yIHNlcXVlbmNlcywgaXQgc2hvdWxkIGl0ZXJhdGVcbnRocm91Z2ggdGhlIHZhbHVlcy5cblxub2JqZWN0Ll9fbGVuX18oc2VsZilcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCB0aGUgYnVpbHQtaW4gZnVuY3Rpb24gImxlbigpIi4gIFNob3VsZCByZXR1cm5cbiAgIHRoZSBsZW5ndGggb2YgdGhlIG9iamVjdCwgYW4gaW50ZWdlciAiPj0iIDAuICBBbHNvLCBhbiBvYmplY3QgdGhhdFxuICAgZG9lc25cJ3QgZGVmaW5lIGEgIl9fYm9vbF9fKCkiIG1ldGhvZCBhbmQgd2hvc2UgIl9fbGVuX18oKSIgbWV0aG9kXG4gICByZXR1cm5zIHplcm8gaXMgY29uc2lkZXJlZCB0byBiZSBmYWxzZSBpbiBhIEJvb2xlYW4gY29udGV4dC5cblxub2JqZWN0Ll9fbGVuZ3RoX2hpbnRfXyhzZWxmKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50ICJvcGVyYXRvci5sZW5ndGhfaGludCgpIi4gU2hvdWxkIHJldHVybiBhblxuICAgZXN0aW1hdGVkIGxlbmd0aCBmb3IgdGhlIG9iamVjdCAod2hpY2ggbWF5IGJlIGdyZWF0ZXIgb3IgbGVzcyB0aGFuXG4gICB0aGUgYWN0dWFsIGxlbmd0aCkuIFRoZSBsZW5ndGggbXVzdCBiZSBhbiBpbnRlZ2VyICI+PSIgMC4gVGhpc1xuICAgbWV0aG9kIGlzIHB1cmVseSBhbiBvcHRpbWl6YXRpb24gYW5kIGlzIG5ldmVyIHJlcXVpcmVkIGZvclxuICAgY29ycmVjdG5lc3MuXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDMuNC5cblxuTm90ZTogU2xpY2luZyBpcyBkb25lIGV4Y2x1c2l2ZWx5IHdpdGggdGhlIGZvbGxvd2luZyB0aHJlZSBtZXRob2RzLlxuICBBIGNhbGwgbGlrZVxuXG4gICAgIGFbMToyXSA9IGJcblxuICBpcyB0cmFuc2xhdGVkIHRvXG5cbiAgICAgYVtzbGljZSgxLCAyLCBOb25lKV0gPSBiXG5cbiAgYW5kIHNvIGZvcnRoLiAgTWlzc2luZyBzbGljZSBpdGVtcyBhcmUgYWx3YXlzIGZpbGxlZCBpbiB3aXRoICJOb25lIi5cblxub2JqZWN0Ll9fZ2V0aXRlbV9fKHNlbGYsIGtleSlcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCBldmFsdWF0aW9uIG9mICJzZWxmW2tleV0iLiBGb3Igc2VxdWVuY2UgdHlwZXMsXG4gICB0aGUgYWNjZXB0ZWQga2V5cyBzaG91bGQgYmUgaW50ZWdlcnMgYW5kIHNsaWNlIG9iamVjdHMuICBOb3RlIHRoYXRcbiAgIHRoZSBzcGVjaWFsIGludGVycHJldGF0aW9uIG9mIG5lZ2F0aXZlIGluZGV4ZXMgKGlmIHRoZSBjbGFzcyB3aXNoZXNcbiAgIHRvIGVtdWxhdGUgYSBzZXF1ZW5jZSB0eXBlKSBpcyB1cCB0byB0aGUgIl9fZ2V0aXRlbV9fKCkiIG1ldGhvZC4gSWZcbiAgICprZXkqIGlzIG9mIGFuIGluYXBwcm9wcmlhdGUgdHlwZSwgIlR5cGVFcnJvciIgbWF5IGJlIHJhaXNlZDsgaWYgb2ZcbiAgIGEgdmFsdWUgb3V0c2lkZSB0aGUgc2V0IG9mIGluZGV4ZXMgZm9yIHRoZSBzZXF1ZW5jZSAoYWZ0ZXIgYW55XG4gICBzcGVjaWFsIGludGVycHJldGF0aW9uIG9mIG5lZ2F0aXZlIHZhbHVlcyksICJJbmRleEVycm9yIiBzaG91bGQgYmVcbiAgIHJhaXNlZC4gRm9yIG1hcHBpbmcgdHlwZXMsIGlmICprZXkqIGlzIG1pc3NpbmcgKG5vdCBpbiB0aGVcbiAgIGNvbnRhaW5lciksICJLZXlFcnJvciIgc2hvdWxkIGJlIHJhaXNlZC5cblxuICAgTm90ZTogImZvciIgbG9vcHMgZXhwZWN0IHRoYXQgYW4gIkluZGV4RXJyb3IiIHdpbGwgYmUgcmFpc2VkIGZvclxuICAgICBpbGxlZ2FsIGluZGV4ZXMgdG8gYWxsb3cgcHJvcGVyIGRldGVjdGlvbiBvZiB0aGUgZW5kIG9mIHRoZVxuICAgICBzZXF1ZW5jZS5cblxub2JqZWN0Ll9fbWlzc2luZ19fKHNlbGYsIGtleSlcblxuICAgQ2FsbGVkIGJ5ICJkaWN0Ii4iX19nZXRpdGVtX18oKSIgdG8gaW1wbGVtZW50ICJzZWxmW2tleV0iIGZvciBkaWN0XG4gICBzdWJjbGFzc2VzIHdoZW4ga2V5IGlzIG5vdCBpbiB0aGUgZGljdGlvbmFyeS5cblxub2JqZWN0Ll9fc2V0aXRlbV9fKHNlbGYsIGtleSwgdmFsdWUpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgYXNzaWdubWVudCB0byAic2VsZltrZXldIi4gIFNhbWUgbm90ZSBhcyBmb3JcbiAgICJfX2dldGl0ZW1fXygpIi4gIFRoaXMgc2hvdWxkIG9ubHkgYmUgaW1wbGVtZW50ZWQgZm9yIG1hcHBpbmdzIGlmXG4gICB0aGUgb2JqZWN0cyBzdXBwb3J0IGNoYW5nZXMgdG8gdGhlIHZhbHVlcyBmb3Iga2V5cywgb3IgaWYgbmV3IGtleXNcbiAgIGNhbiBiZSBhZGRlZCwgb3IgZm9yIHNlcXVlbmNlcyBpZiBlbGVtZW50cyBjYW4gYmUgcmVwbGFjZWQuICBUaGVcbiAgIHNhbWUgZXhjZXB0aW9ucyBzaG91bGQgYmUgcmFpc2VkIGZvciBpbXByb3BlciAqa2V5KiB2YWx1ZXMgYXMgZm9yXG4gICB0aGUgIl9fZ2V0aXRlbV9fKCkiIG1ldGhvZC5cblxub2JqZWN0Ll9fZGVsaXRlbV9fKHNlbGYsIGtleSlcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCBkZWxldGlvbiBvZiAic2VsZltrZXldIi4gIFNhbWUgbm90ZSBhcyBmb3JcbiAgICJfX2dldGl0ZW1fXygpIi4gIFRoaXMgc2hvdWxkIG9ubHkgYmUgaW1wbGVtZW50ZWQgZm9yIG1hcHBpbmdzIGlmXG4gICB0aGUgb2JqZWN0cyBzdXBwb3J0IHJlbW92YWwgb2Yga2V5cywgb3IgZm9yIHNlcXVlbmNlcyBpZiBlbGVtZW50c1xuICAgY2FuIGJlIHJlbW92ZWQgZnJvbSB0aGUgc2VxdWVuY2UuICBUaGUgc2FtZSBleGNlcHRpb25zIHNob3VsZCBiZVxuICAgcmFpc2VkIGZvciBpbXByb3BlciAqa2V5KiB2YWx1ZXMgYXMgZm9yIHRoZSAiX19nZXRpdGVtX18oKSIgbWV0aG9kLlxuXG5vYmplY3QuX19pdGVyX18oc2VsZilcblxuICAgVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gYW4gaXRlcmF0b3IgaXMgcmVxdWlyZWQgZm9yIGEgY29udGFpbmVyLlxuICAgVGhpcyBtZXRob2Qgc2hvdWxkIHJldHVybiBhIG5ldyBpdGVyYXRvciBvYmplY3QgdGhhdCBjYW4gaXRlcmF0ZVxuICAgb3ZlciBhbGwgdGhlIG9iamVjdHMgaW4gdGhlIGNvbnRhaW5lci4gIEZvciBtYXBwaW5ncywgaXQgc2hvdWxkXG4gICBpdGVyYXRlIG92ZXIgdGhlIGtleXMgb2YgdGhlIGNvbnRhaW5lci5cblxuICAgSXRlcmF0b3Igb2JqZWN0cyBhbHNvIG5lZWQgdG8gaW1wbGVtZW50IHRoaXMgbWV0aG9kOyB0aGV5IGFyZVxuICAgcmVxdWlyZWQgdG8gcmV0dXJuIHRoZW1zZWx2ZXMuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBpdGVyYXRvclxuICAgb2JqZWN0cywgc2VlICpJdGVyYXRvciBUeXBlcyouXG5cbm9iamVjdC5fX3JldmVyc2VkX18oc2VsZilcblxuICAgQ2FsbGVkIChpZiBwcmVzZW50KSBieSB0aGUgInJldmVyc2VkKCkiIGJ1aWx0LWluIHRvIGltcGxlbWVudFxuICAgcmV2ZXJzZSBpdGVyYXRpb24uICBJdCBzaG91bGQgcmV0dXJuIGEgbmV3IGl0ZXJhdG9yIG9iamVjdCB0aGF0XG4gICBpdGVyYXRlcyBvdmVyIGFsbCB0aGUgb2JqZWN0cyBpbiB0aGUgY29udGFpbmVyIGluIHJldmVyc2Ugb3JkZXIuXG5cbiAgIElmIHRoZSAiX19yZXZlcnNlZF9fKCkiIG1ldGhvZCBpcyBub3QgcHJvdmlkZWQsIHRoZSAicmV2ZXJzZWQoKSJcbiAgIGJ1aWx0LWluIHdpbGwgZmFsbCBiYWNrIHRvIHVzaW5nIHRoZSBzZXF1ZW5jZSBwcm90b2NvbCAoIl9fbGVuX18oKSJcbiAgIGFuZCAiX19nZXRpdGVtX18oKSIpLiAgT2JqZWN0cyB0aGF0IHN1cHBvcnQgdGhlIHNlcXVlbmNlIHByb3RvY29sXG4gICBzaG91bGQgb25seSBwcm92aWRlICJfX3JldmVyc2VkX18oKSIgaWYgdGhleSBjYW4gcHJvdmlkZSBhblxuICAgaW1wbGVtZW50YXRpb24gdGhhdCBpcyBtb3JlIGVmZmljaWVudCB0aGFuIHRoZSBvbmUgcHJvdmlkZWQgYnlcbiAgICJyZXZlcnNlZCgpIi5cblxuVGhlIG1lbWJlcnNoaXAgdGVzdCBvcGVyYXRvcnMgKCJpbiIgYW5kICJub3QgaW4iKSBhcmUgbm9ybWFsbHlcbmltcGxlbWVudGVkIGFzIGFuIGl0ZXJhdGlvbiB0aHJvdWdoIGEgc2VxdWVuY2UuICBIb3dldmVyLCBjb250YWluZXJcbm9iamVjdHMgY2FuIHN1cHBseSB0aGUgZm9sbG93aW5nIHNwZWNpYWwgbWV0aG9kIHdpdGggYSBtb3JlIGVmZmljaWVudFxuaW1wbGVtZW50YXRpb24sIHdoaWNoIGFsc28gZG9lcyBub3QgcmVxdWlyZSB0aGUgb2JqZWN0IGJlIGEgc2VxdWVuY2UuXG5cbm9iamVjdC5fX2NvbnRhaW5zX18oc2VsZiwgaXRlbSlcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCBtZW1iZXJzaGlwIHRlc3Qgb3BlcmF0b3JzLiAgU2hvdWxkIHJldHVybiB0cnVlXG4gICBpZiAqaXRlbSogaXMgaW4gKnNlbGYqLCBmYWxzZSBvdGhlcndpc2UuICBGb3IgbWFwcGluZyBvYmplY3RzLCB0aGlzXG4gICBzaG91bGQgY29uc2lkZXIgdGhlIGtleXMgb2YgdGhlIG1hcHBpbmcgcmF0aGVyIHRoYW4gdGhlIHZhbHVlcyBvclxuICAgdGhlIGtleS1pdGVtIHBhaXJzLlxuXG4gICBGb3Igb2JqZWN0cyB0aGF0IGRvblwndCBkZWZpbmUgIl9fY29udGFpbnNfXygpIiwgdGhlIG1lbWJlcnNoaXAgdGVzdFxuICAgZmlyc3QgdHJpZXMgaXRlcmF0aW9uIHZpYSAiX19pdGVyX18oKSIsIHRoZW4gdGhlIG9sZCBzZXF1ZW5jZVxuICAgaXRlcmF0aW9uIHByb3RvY29sIHZpYSAiX19nZXRpdGVtX18oKSIsIHNlZSAqdGhpcyBzZWN0aW9uIGluIHRoZVxuICAgbGFuZ3VhZ2UgcmVmZXJlbmNlKi5cbicsCisgJ3NoaWZ0aW5nJzogdSdcblNoaWZ0aW5nIG9wZXJhdGlvbnNcbioqKioqKioqKioqKioqKioqKipcblxuVGhlIHNoaWZ0aW5nIG9wZXJhdGlvbnMgaGF2ZSBsb3dlciBwcmlvcml0eSB0aGFuIHRoZSBhcml0aG1ldGljXG5vcGVyYXRpb25zOlxuXG4gICBzaGlmdF9leHByIDo6PSBhX2V4cHIgfCBzaGlmdF9leHByICggIjw8IiB8ICI+PiIgKSBhX2V4cHJcblxuVGhlc2Ugb3BlcmF0b3JzIGFjY2VwdCBpbnRlZ2VycyBhcyBhcmd1bWVudHMuICBUaGV5IHNoaWZ0IHRoZSBmaXJzdFxuYXJndW1lbnQgdG8gdGhlIGxlZnQgb3IgcmlnaHQgYnkgdGhlIG51bWJlciBvZiBiaXRzIGdpdmVuIGJ5IHRoZVxuc2Vjb25kIGFyZ3VtZW50LlxuXG5BIHJpZ2h0IHNoaWZ0IGJ5ICpuKiBiaXRzIGlzIGRlZmluZWQgYXMgZmxvb3IgZGl2aXNpb24gYnkgInBvdygyLG4pIi5cbkEgbGVmdCBzaGlmdCBieSAqbiogYml0cyBpcyBkZWZpbmVkIGFzIG11bHRpcGxpY2F0aW9uIHdpdGggInBvdygyLG4pIi5cblxuTm90ZTogSW4gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24sIHRoZSByaWdodC1oYW5kIG9wZXJhbmQgaXNcbiAgcmVxdWlyZWQgdG8gYmUgYXQgbW9zdCAic3lzLm1heHNpemUiLiAgSWYgdGhlIHJpZ2h0LWhhbmQgb3BlcmFuZCBpc1xuICBsYXJnZXIgdGhhbiAic3lzLm1heHNpemUiIGFuICJPdmVyZmxvd0Vycm9yIiBleGNlcHRpb24gaXMgcmFpc2VkLlxuJywKKyAnc2xpY2luZ3MnOiB1J1xuU2xpY2luZ3NcbioqKioqKioqXG5cbkEgc2xpY2luZyBzZWxlY3RzIGEgcmFuZ2Ugb2YgaXRlbXMgaW4gYSBzZXF1ZW5jZSBvYmplY3QgKGUuZy4sIGFcbnN0cmluZywgdHVwbGUgb3IgbGlzdCkuICBTbGljaW5ncyBtYXkgYmUgdXNlZCBhcyBleHByZXNzaW9ucyBvciBhc1xudGFyZ2V0cyBpbiBhc3NpZ25tZW50IG9yICJkZWwiIHN0YXRlbWVudHMuICBUaGUgc3ludGF4IGZvciBhIHNsaWNpbmc6XG5cbiAgIHNsaWNpbmcgICAgICA6Oj0gcHJpbWFyeSAiWyIgc2xpY2VfbGlzdCAiXSJcbiAgIHNsaWNlX2xpc3QgICA6Oj0gc2xpY2VfaXRlbSAoIiwiIHNsaWNlX2l0ZW0pKiBbIiwiXVxuICAgc2xpY2VfaXRlbSAgIDo6PSBleHByZXNzaW9uIHwgcHJvcGVyX3NsaWNlXG4gICBwcm9wZXJfc2xpY2UgOjo9IFtsb3dlcl9ib3VuZF0gIjoiIFt1cHBlcl9ib3VuZF0gWyAiOiIgW3N0cmlkZV0gXVxuICAgbG93ZXJfYm91bmQgIDo6PSBleHByZXNzaW9uXG4gICB1cHBlcl9ib3VuZCAgOjo9IGV4cHJlc3Npb25cbiAgIHN0cmlkZSAgICAgICA6Oj0gZXhwcmVzc2lvblxuXG5UaGVyZSBpcyBhbWJpZ3VpdHkgaW4gdGhlIGZvcm1hbCBzeW50YXggaGVyZTogYW55dGhpbmcgdGhhdCBsb29rcyBsaWtlXG5hbiBleHByZXNzaW9uIGxpc3QgYWxzbyBsb29rcyBsaWtlIGEgc2xpY2UgbGlzdCwgc28gYW55IHN1YnNjcmlwdGlvblxuY2FuIGJlIGludGVycHJldGVkIGFzIGEgc2xpY2luZy4gIFJhdGhlciB0aGFuIGZ1cnRoZXIgY29tcGxpY2F0aW5nIHRoZVxuc3ludGF4LCB0aGlzIGlzIGRpc2FtYmlndWF0ZWQgYnkgZGVmaW5pbmcgdGhhdCBpbiB0aGlzIGNhc2UgdGhlXG5pbnRlcnByZXRhdGlvbiBhcyBhIHN1YnNjcmlwdGlvbiB0YWtlcyBwcmlvcml0eSBvdmVyIHRoZVxuaW50ZXJwcmV0YXRpb24gYXMgYSBzbGljaW5nICh0aGlzIGlzIHRoZSBjYXNlIGlmIHRoZSBzbGljZSBsaXN0XG5jb250YWlucyBubyBwcm9wZXIgc2xpY2UpLlxuXG5UaGUgc2VtYW50aWNzIGZvciBhIHNsaWNpbmcgYXJlIGFzIGZvbGxvd3MuICBUaGUgcHJpbWFyeSBpcyBpbmRleGVkXG4odXNpbmcgdGhlIHNhbWUgIl9fZ2V0aXRlbV9fKCkiIG1ldGhvZCBhcyBub3JtYWwgc3Vic2NyaXB0aW9uKSB3aXRoIGFcbmtleSB0aGF0IGlzIGNvbnN0cnVjdGVkIGZyb20gdGhlIHNsaWNlIGxpc3QsIGFzIGZvbGxvd3MuICBJZiB0aGUgc2xpY2Vcbmxpc3QgY29udGFpbnMgYXQgbGVhc3Qgb25lIGNvbW1hLCB0aGUga2V5IGlzIGEgdHVwbGUgY29udGFpbmluZyB0aGVcbmNvbnZlcnNpb24gb2YgdGhlIHNsaWNlIGl0ZW1zOyBvdGhlcndpc2UsIHRoZSBjb252ZXJzaW9uIG9mIHRoZSBsb25lXG5zbGljZSBpdGVtIGlzIHRoZSBrZXkuICBUaGUgY29udmVyc2lvbiBvZiBhIHNsaWNlIGl0ZW0gdGhhdCBpcyBhblxuZXhwcmVzc2lvbiBpcyB0aGF0IGV4cHJlc3Npb24uICBUaGUgY29udmVyc2lvbiBvZiBhIHByb3BlciBzbGljZSBpcyBhXG5zbGljZSBvYmplY3QgKHNlZSBzZWN0aW9uICpUaGUgc3RhbmRhcmQgdHlwZSBoaWVyYXJjaHkqKSB3aG9zZVxuInN0YXJ0IiwgInN0b3AiIGFuZCAic3RlcCIgYXR0cmlidXRlcyBhcmUgdGhlIHZhbHVlcyBvZiB0aGVcbmV4cHJlc3Npb25zIGdpdmVuIGFzIGxvd2VyIGJvdW5kLCB1cHBlciBib3VuZCBhbmQgc3RyaWRlLFxucmVzcGVjdGl2ZWx5LCBzdWJzdGl0dXRpbmcgIk5vbmUiIGZvciBtaXNzaW5nIGV4cHJlc3Npb25zLlxuJywKKyAnc3BlY2lhbGF0dHJzJzogdSdcblNwZWNpYWwgQXR0cmlidXRlc1xuKioqKioqKioqKioqKioqKioqXG5cblRoZSBpbXBsZW1lbnRhdGlvbiBhZGRzIGEgZmV3IHNwZWNpYWwgcmVhZC1vbmx5IGF0dHJpYnV0ZXMgdG8gc2V2ZXJhbFxub2JqZWN0IHR5cGVzLCB3aGVyZSB0aGV5IGFyZSByZWxldmFudC4gIFNvbWUgb2YgdGhlc2UgYXJlIG5vdCByZXBvcnRlZFxuYnkgdGhlICJkaXIoKSIgYnVpbHQtaW4gZnVuY3Rpb24uXG5cbm9iamVjdC5fX2RpY3RfX1xuXG4gICBBIGRpY3Rpb25hcnkgb3Igb3RoZXIgbWFwcGluZyBvYmplY3QgdXNlZCB0byBzdG9yZSBhbiBvYmplY3RcJ3NcbiAgICh3cml0YWJsZSkgYXR0cmlidXRlcy5cblxuaW5zdGFuY2UuX19jbGFzc19fXG5cbiAgIFRoZSBjbGFzcyB0byB3aGljaCBhIGNsYXNzIGluc3RhbmNlIGJlbG9uZ3MuXG5cbmNsYXNzLl9fYmFzZXNfX1xuXG4gICBUaGUgdHVwbGUgb2YgYmFzZSBjbGFzc2VzIG9mIGEgY2xhc3Mgb2JqZWN0LlxuXG5jbGFzcy5fX25hbWVfX1xuXG4gICBUaGUgbmFtZSBvZiB0aGUgY2xhc3Mgb3IgdHlwZS5cblxuY2xhc3MuX19xdWFsbmFtZV9fXG5cbiAgIFRoZSAqcXVhbGlmaWVkIG5hbWUqIG9mIHRoZSBjbGFzcyBvciB0eXBlLlxuXG4gICBOZXcgaW4gdmVyc2lvbiAzLjMuXG5cbmNsYXNzLl9fbXJvX19cblxuICAgVGhpcyBhdHRyaWJ1dGUgaXMgYSB0dXBsZSBvZiBjbGFzc2VzIHRoYXQgYXJlIGNvbnNpZGVyZWQgd2hlblxuICAgbG9va2luZyBmb3IgYmFzZSBjbGFzc2VzIGR1cmluZyBtZXRob2QgcmVzb2x1dGlvbi5cblxuY2xhc3MubXJvKClcblxuICAgVGhpcyBtZXRob2QgY2FuIGJlIG92ZXJyaWRkZW4gYnkgYSBtZXRhY2xhc3MgdG8gY3VzdG9taXplIHRoZVxuICAgbWV0aG9kIHJlc29sdXRpb24gb3JkZXIgZm9yIGl0cyBpbnN0YW5jZXMuICBJdCBpcyBjYWxsZWQgYXQgY2xhc3NcbiAgIGluc3RhbnRpYXRpb24sIGFuZCBpdHMgcmVzdWx0IGlzIHN0b3JlZCBpbiAiX19tcm9fXyIuXG5cbmNsYXNzLl9fc3ViY2xhc3Nlc19fKClcblxuICAgRWFjaCBjbGFzcyBrZWVwcyBhIGxpc3Qgb2Ygd2VhayByZWZlcmVuY2VzIHRvIGl0cyBpbW1lZGlhdGVcbiAgIHN1YmNsYXNzZXMuICBUaGlzIG1ldGhvZCByZXR1cm5zIGEgbGlzdCBvZiBhbGwgdGhvc2UgcmVmZXJlbmNlc1xuICAgc3RpbGwgYWxpdmUuIEV4YW1wbGU6XG5cbiAgICAgID4+PiBpbnQuX19zdWJjbGFzc2VzX18oKVxuICAgICAgWzxjbGFzcyBcJ2Jvb2xcJz5dXG5cbi1bIEZvb3Rub3RlcyBdLVxuXG5bMV0gQWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvbiB0aGVzZSBzcGVjaWFsIG1ldGhvZHMgbWF5IGJlIGZvdW5kXG4gICAgaW4gdGhlIFB5dGhvbiBSZWZlcmVuY2UgTWFudWFsICgqQmFzaWMgY3VzdG9taXphdGlvbiopLlxuXG5bMl0gQXMgYSBjb25zZXF1ZW5jZSwgdGhlIGxpc3QgIlsxLCAyXSIgaXMgY29uc2lkZXJlZCBlcXVhbCB0b1xuICAgICJbMS4wLCAyLjBdIiwgYW5kIHNpbWlsYXJseSBmb3IgdHVwbGVzLlxuXG5bM10gVGhleSBtdXN0IGhhdmUgc2luY2UgdGhlIHBhcnNlciBjYW5cJ3QgdGVsbCB0aGUgdHlwZSBvZiB0aGVcbiAgICBvcGVyYW5kcy5cblxuWzRdIENhc2VkIGNoYXJhY3RlcnMgYXJlIHRob3NlIHdpdGggZ2VuZXJhbCBjYXRlZ29yeSBwcm9wZXJ0eVxuICAgIGJlaW5nIG9uZSBvZiAiTHUiIChMZXR0ZXIsIHVwcGVyY2FzZSksICJMbCIgKExldHRlciwgbG93ZXJjYXNlKSxcbiAgICBvciAiTHQiIChMZXR0ZXIsIHRpdGxlY2FzZSkuXG5cbls1XSBUbyBmb3JtYXQgb25seSBhIHR1cGxlIHlvdSBzaG91bGQgdGhlcmVmb3JlIHByb3ZpZGUgYVxuICAgIHNpbmdsZXRvbiB0dXBsZSB3aG9zZSBvbmx5IGVsZW1lbnQgaXMgdGhlIHR1cGxlIHRvIGJlIGZvcm1hdHRlZC5cbicsCisgJ3NwZWNpYWxuYW1lcyc6IHUnXG5TcGVjaWFsIG1ldGhvZCBuYW1lc1xuKioqKioqKioqKioqKioqKioqKipcblxuQSBjbGFzcyBjYW4gaW1wbGVtZW50IGNlcnRhaW4gb3BlcmF0aW9ucyB0aGF0IGFyZSBpbnZva2VkIGJ5IHNwZWNpYWxcbnN5bnRheCAoc3VjaCBhcyBhcml0aG1ldGljIG9wZXJhdGlvbnMgb3Igc3Vic2NyaXB0aW5nIGFuZCBzbGljaW5nKSBieVxuZGVmaW5pbmcgbWV0aG9kcyB3aXRoIHNwZWNpYWwgbmFtZXMuIFRoaXMgaXMgUHl0aG9uXCdzIGFwcHJvYWNoIHRvXG4qb3BlcmF0b3Igb3ZlcmxvYWRpbmcqLCBhbGxvd2luZyBjbGFzc2VzIHRvIGRlZmluZSB0aGVpciBvd24gYmVoYXZpb3JcbndpdGggcmVzcGVjdCB0byBsYW5ndWFnZSBvcGVyYXRvcnMuICBGb3IgaW5zdGFuY2UsIGlmIGEgY2xhc3MgZGVmaW5lc1xuYSBtZXRob2QgbmFtZWQgIl9fZ2V0aXRlbV9fKCkiLCBhbmQgIngiIGlzIGFuIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MsXG50aGVuICJ4W2ldIiBpcyByb3VnaGx5IGVxdWl2YWxlbnQgdG8gInR5cGUoeCkuX19nZXRpdGVtX18oeCwgaSkiLlxuRXhjZXB0IHdoZXJlIG1lbnRpb25lZCwgYXR0ZW1wdHMgdG8gZXhlY3V0ZSBhbiBvcGVyYXRpb24gcmFpc2UgYW5cbmV4Y2VwdGlvbiB3aGVuIG5vIGFwcHJvcHJpYXRlIG1ldGhvZCBpcyBkZWZpbmVkICh0eXBpY2FsbHlcbiJBdHRyaWJ1dGVFcnJvciIgb3IgIlR5cGVFcnJvciIpLlxuXG5XaGVuIGltcGxlbWVudGluZyBhIGNsYXNzIHRoYXQgZW11bGF0ZXMgYW55IGJ1aWx0LWluIHR5cGUsIGl0IGlzXG5pbXBvcnRhbnQgdGhhdCB0aGUgZW11bGF0aW9uIG9ubHkgYmUgaW1wbGVtZW50ZWQgdG8gdGhlIGRlZ3JlZSB0aGF0IGl0XG5tYWtlcyBzZW5zZSBmb3IgdGhlIG9iamVjdCBiZWluZyBtb2RlbGxlZC4gIEZvciBleGFtcGxlLCBzb21lXG5zZXF1ZW5jZXMgbWF5IHdvcmsgd2VsbCB3aXRoIHJldHJpZXZhbCBvZiBpbmRpdmlkdWFsIGVsZW1lbnRzLCBidXRcbmV4dHJhY3RpbmcgYSBzbGljZSBtYXkgbm90IG1ha2Ugc2Vuc2UuICAoT25lIGV4YW1wbGUgb2YgdGhpcyBpcyB0aGVcbiJOb2RlTGlzdCIgaW50ZXJmYWNlIGluIHRoZSBXM0NcJ3MgRG9jdW1lbnQgT2JqZWN0IE1vZGVsLilcblxuXG5CYXNpYyBjdXN0b21pemF0aW9uXG49PT09PT09PT09PT09PT09PT09XG5cbm9iamVjdC5fX25ld19fKGNsc1ssIC4uLl0pXG5cbiAgIENhbGxlZCB0byBjcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgY2xhc3MgKmNscyouICAiX19uZXdfXygpIiBpcyBhXG4gICBzdGF0aWMgbWV0aG9kIChzcGVjaWFsLWNhc2VkIHNvIHlvdSBuZWVkIG5vdCBkZWNsYXJlIGl0IGFzIHN1Y2gpXG4gICB0aGF0IHRha2VzIHRoZSBjbGFzcyBvZiB3aGljaCBhbiBpbnN0YW5jZSB3YXMgcmVxdWVzdGVkIGFzIGl0c1xuICAgZmlyc3QgYXJndW1lbnQuICBUaGUgcmVtYWluaW5nIGFyZ3VtZW50cyBhcmUgdGhvc2UgcGFzc2VkIHRvIHRoZVxuICAgb2JqZWN0IGNvbnN0cnVjdG9yIGV4cHJlc3Npb24gKHRoZSBjYWxsIHRvIHRoZSBjbGFzcykuICBUaGUgcmV0dXJuXG4gICB2YWx1ZSBvZiAiX19uZXdfXygpIiBzaG91bGQgYmUgdGhlIG5ldyBvYmplY3QgaW5zdGFuY2UgKHVzdWFsbHkgYW5cbiAgIGluc3RhbmNlIG9mICpjbHMqKS5cblxuICAgVHlwaWNhbCBpbXBsZW1lbnRhdGlvbnMgY3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBjbGFzcyBieVxuICAgaW52b2tpbmcgdGhlIHN1cGVyY2xhc3NcJ3MgIl9fbmV3X18oKSIgbWV0aG9kIHVzaW5nXG4gICAic3VwZXIoY3VycmVudGNsYXNzLCBjbHMpLl9fbmV3X18oY2xzWywgLi4uXSkiIHdpdGggYXBwcm9wcmlhdGVcbiAgIGFyZ3VtZW50cyBhbmQgdGhlbiBtb2RpZnlpbmcgdGhlIG5ld2x5LWNyZWF0ZWQgaW5zdGFuY2UgYXNcbiAgIG5lY2Vzc2FyeSBiZWZvcmUgcmV0dXJuaW5nIGl0LlxuXG4gICBJZiAiX19uZXdfXygpIiByZXR1cm5zIGFuIGluc3RhbmNlIG9mICpjbHMqLCB0aGVuIHRoZSBuZXdcbiAgIGluc3RhbmNlXCdzICJfX2luaXRfXygpIiBtZXRob2Qgd2lsbCBiZSBpbnZva2VkIGxpa2VcbiAgICJfX2luaXRfXyhzZWxmWywgLi4uXSkiLCB3aGVyZSAqc2VsZiogaXMgdGhlIG5ldyBpbnN0YW5jZSBhbmQgdGhlXG4gICByZW1haW5pbmcgYXJndW1lbnRzIGFyZSB0aGUgc2FtZSBhcyB3ZXJlIHBhc3NlZCB0byAiX19uZXdfXygpIi5cblxuICAgSWYgIl9fbmV3X18oKSIgZG9lcyBub3QgcmV0dXJuIGFuIGluc3RhbmNlIG9mICpjbHMqLCB0aGVuIHRoZSBuZXdcbiAgIGluc3RhbmNlXCdzICJfX2luaXRfXygpIiBtZXRob2Qgd2lsbCBub3QgYmUgaW52b2tlZC5cblxuICAgIl9fbmV3X18oKSIgaXMgaW50ZW5kZWQgbWFpbmx5IHRvIGFsbG93IHN1YmNsYXNzZXMgb2YgaW1tdXRhYmxlXG4gICB0eXBlcyAobGlrZSBpbnQsIHN0ciwgb3IgdHVwbGUpIHRvIGN1c3RvbWl6ZSBpbnN0YW5jZSBjcmVhdGlvbi4gIEl0XG4gICBpcyBhbHNvIGNvbW1vbmx5IG92ZXJyaWRkZW4gaW4gY3VzdG9tIG1ldGFjbGFzc2VzIGluIG9yZGVyIHRvXG4gICBjdXN0b21pemUgY2xhc3MgY3JlYXRpb24uXG5cbm9iamVjdC5fX2luaXRfXyhzZWxmWywgLi4uXSlcblxuICAgQ2FsbGVkIGFmdGVyIHRoZSBpbnN0YW5jZSBoYXMgYmVlbiBjcmVhdGVkIChieSAiX19uZXdfXygpIiksIGJ1dFxuICAgYmVmb3JlIGl0IGlzIHJldHVybmVkIHRvIHRoZSBjYWxsZXIuICBUaGUgYXJndW1lbnRzIGFyZSB0aG9zZVxuICAgcGFzc2VkIHRvIHRoZSBjbGFzcyBjb25zdHJ1Y3RvciBleHByZXNzaW9uLiAgSWYgYSBiYXNlIGNsYXNzIGhhcyBhblxuICAgIl9faW5pdF9fKCkiIG1ldGhvZCwgdGhlIGRlcml2ZWQgY2xhc3NcJ3MgIl9faW5pdF9fKCkiIG1ldGhvZCwgaWZcbiAgIGFueSwgbXVzdCBleHBsaWNpdGx5IGNhbGwgaXQgdG8gZW5zdXJlIHByb3BlciBpbml0aWFsaXphdGlvbiBvZiB0aGVcbiAgIGJhc2UgY2xhc3MgcGFydCBvZiB0aGUgaW5zdGFuY2U7IGZvciBleGFtcGxlOlxuICAgIkJhc2VDbGFzcy5fX2luaXRfXyhzZWxmLCBbYXJncy4uLl0pIi5cblxuICAgQmVjYXVzZSAiX19uZXdfXygpIiBhbmQgIl9faW5pdF9fKCkiIHdvcmsgdG9nZXRoZXIgaW4gY29uc3RydWN0aW5nXG4gICBvYmplY3RzICgiX19uZXdfXygpIiB0byBjcmVhdGUgaXQsIGFuZCAiX19pbml0X18oKSIgdG8gY3VzdG9taXNlXG4gICBpdCksIG5vIG5vbi0iTm9uZSIgdmFsdWUgbWF5IGJlIHJldHVybmVkIGJ5ICJfX2luaXRfXygpIjsgZG9pbmcgc29cbiAgIHdpbGwgY2F1c2UgYSAiVHlwZUVycm9yIiB0byBiZSByYWlzZWQgYXQgcnVudGltZS5cblxub2JqZWN0Ll9fZGVsX18oc2VsZilcblxuICAgQ2FsbGVkIHdoZW4gdGhlIGluc3RhbmNlIGlzIGFib3V0IHRvIGJlIGRlc3Ryb3llZC4gIFRoaXMgaXMgYWxzb1xuICAgY2FsbGVkIGEgZGVzdHJ1Y3Rvci4gIElmIGEgYmFzZSBjbGFzcyBoYXMgYSAiX19kZWxfXygpIiBtZXRob2QsIHRoZVxuICAgZGVyaXZlZCBjbGFzc1wncyAiX19kZWxfXygpIiBtZXRob2QsIGlmIGFueSwgbXVzdCBleHBsaWNpdGx5IGNhbGwgaXRcbiAgIHRvIGVuc3VyZSBwcm9wZXIgZGVsZXRpb24gb2YgdGhlIGJhc2UgY2xhc3MgcGFydCBvZiB0aGUgaW5zdGFuY2UuXG4gICBOb3RlIHRoYXQgaXQgaXMgcG9zc2libGUgKHRob3VnaCBub3QgcmVjb21tZW5kZWQhKSBmb3IgdGhlXG4gICAiX19kZWxfXygpIiBtZXRob2QgdG8gcG9zdHBvbmUgZGVzdHJ1Y3Rpb24gb2YgdGhlIGluc3RhbmNlIGJ5XG4gICBjcmVhdGluZyBhIG5ldyByZWZlcmVuY2UgdG8gaXQuICBJdCBtYXkgdGhlbiBiZSBjYWxsZWQgYXQgYSBsYXRlclxuICAgdGltZSB3aGVuIHRoaXMgbmV3IHJlZmVyZW5jZSBpcyBkZWxldGVkLiAgSXQgaXMgbm90IGd1YXJhbnRlZWQgdGhhdFxuICAgIl9fZGVsX18oKSIgbWV0aG9kcyBhcmUgY2FsbGVkIGZvciBvYmplY3RzIHRoYXQgc3RpbGwgZXhpc3Qgd2hlblxuICAgdGhlIGludGVycHJldGVyIGV4aXRzLlxuXG4gICBOb3RlOiAiZGVsIHgiIGRvZXNuXCd0IGRpcmVjdGx5IGNhbGwgInguX19kZWxfXygpIiAtLS0gdGhlIGZvcm1lclxuICAgICBkZWNyZW1lbnRzIHRoZSByZWZlcmVuY2UgY291bnQgZm9yICJ4IiBieSBvbmUsIGFuZCB0aGUgbGF0dGVyIGlzXG4gICAgIG9ubHkgY2FsbGVkIHdoZW4gIngiXCdzIHJlZmVyZW5jZSBjb3VudCByZWFjaGVzIHplcm8uICBTb21lIGNvbW1vblxuICAgICBzaXR1YXRpb25zIHRoYXQgbWF5IHByZXZlbnQgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiBhbiBvYmplY3QgZnJvbVxuICAgICBnb2luZyB0byB6ZXJvIGluY2x1ZGU6IGNpcmN1bGFyIHJlZmVyZW5jZXMgYmV0d2VlbiBvYmplY3RzIChlLmcuLFxuICAgICBhIGRvdWJseS1saW5rZWQgbGlzdCBvciBhIHRyZWUgZGF0YSBzdHJ1Y3R1cmUgd2l0aCBwYXJlbnQgYW5kXG4gICAgIGNoaWxkIHBvaW50ZXJzKTsgYSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBvbiB0aGUgc3RhY2sgZnJhbWUgb2ZcbiAgICAgYSBmdW5jdGlvbiB0aGF0IGNhdWdodCBhbiBleGNlcHRpb24gKHRoZSB0cmFjZWJhY2sgc3RvcmVkIGluXG4gICAgICJzeXMuZXhjX2luZm8oKVsyXSIga2VlcHMgdGhlIHN0YWNrIGZyYW1lIGFsaXZlKTsgb3IgYSByZWZlcmVuY2VcbiAgICAgdG8gdGhlIG9iamVjdCBvbiB0aGUgc3RhY2sgZnJhbWUgdGhhdCByYWlzZWQgYW4gdW5oYW5kbGVkXG4gICAgIGV4Y2VwdGlvbiBpbiBpbnRlcmFjdGl2ZSBtb2RlICh0aGUgdHJhY2ViYWNrIHN0b3JlZCBpblxuICAgICAic3lzLmxhc3RfdHJhY2ViYWNrIiBrZWVwcyB0aGUgc3RhY2sgZnJhbWUgYWxpdmUpLiAgVGhlIGZpcnN0XG4gICAgIHNpdHVhdGlvbiBjYW4gb25seSBiZSByZW1lZGllZCBieSBleHBsaWNpdGx5IGJyZWFraW5nIHRoZSBjeWNsZXM7XG4gICAgIHRoZSBzZWNvbmQgY2FuIGJlIHJlc29sdmVkIGJ5IGZyZWVpbmcgdGhlIHJlZmVyZW5jZSB0byB0aGVcbiAgICAgdHJhY2ViYWNrIG9iamVjdCB3aGVuIGl0IGlzIG5vIGxvbmdlciB1c2VmdWwsIGFuZCB0aGUgdGhpcmQgY2FuXG4gICAgIGJlIHJlc29sdmVkIGJ5IHN0b3JpbmcgIk5vbmUiIGluICJzeXMubGFzdF90cmFjZWJhY2siLiBDaXJjdWxhclxuICAgICByZWZlcmVuY2VzIHdoaWNoIGFyZSBnYXJiYWdlIGFyZSBkZXRlY3RlZCBhbmQgY2xlYW5lZCB1cCB3aGVuIHRoZVxuICAgICBjeWNsaWMgZ2FyYmFnZSBjb2xsZWN0b3IgaXMgZW5hYmxlZCAoaXRcJ3Mgb24gYnkgZGVmYXVsdCkuIFJlZmVyXG4gICAgIHRvIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgImdjIiBtb2R1bGUgZm9yIG1vcmUgaW5mb3JtYXRpb25cbiAgICAgYWJvdXQgdGhpcyB0b3BpYy5cblxuICAgV2FybmluZzogRHVlIHRvIHRoZSBwcmVjYXJpb3VzIGNpcmN1bXN0YW5jZXMgdW5kZXIgd2hpY2hcbiAgICAgIl9fZGVsX18oKSIgbWV0aG9kcyBhcmUgaW52b2tlZCwgZXhjZXB0aW9ucyB0aGF0IG9jY3VyIGR1cmluZ1xuICAgICB0aGVpciBleGVjdXRpb24gYXJlIGlnbm9yZWQsIGFuZCBhIHdhcm5pbmcgaXMgcHJpbnRlZCB0b1xuICAgICAic3lzLnN0ZGVyciIgaW5zdGVhZC4gQWxzbywgd2hlbiAiX19kZWxfXygpIiBpcyBpbnZva2VkIGluXG4gICAgIHJlc3BvbnNlIHRvIGEgbW9kdWxlIGJlaW5nIGRlbGV0ZWQgKGUuZy4sIHdoZW4gZXhlY3V0aW9uIG9mIHRoZVxuICAgICBwcm9ncmFtIGlzIGRvbmUpLCBvdGhlciBnbG9iYWxzIHJlZmVyZW5jZWQgYnkgdGhlICJfX2RlbF9fKCkiXG4gICAgIG1ldGhvZCBtYXkgYWxyZWFkeSBoYXZlIGJlZW4gZGVsZXRlZCBvciBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZ1xuICAgICB0b3JuIGRvd24gKGUuZy4gdGhlIGltcG9ydCBtYWNoaW5lcnkgc2h1dHRpbmcgZG93bikuICBGb3IgdGhpc1xuICAgICByZWFzb24sICJfX2RlbF9fKCkiIG1ldGhvZHMgc2hvdWxkIGRvIHRoZSBhYnNvbHV0ZSBtaW5pbXVtIG5lZWRlZFxuICAgICB0byBtYWludGFpbiBleHRlcm5hbCBpbnZhcmlhbnRzLiAgU3RhcnRpbmcgd2l0aCB2ZXJzaW9uIDEuNSxcbiAgICAgUHl0aG9uIGd1YXJhbnRlZXMgdGhhdCBnbG9iYWxzIHdob3NlIG5hbWUgYmVnaW5zIHdpdGggYSBzaW5nbGVcbiAgICAgdW5kZXJzY29yZSBhcmUgZGVsZXRlZCBmcm9tIHRoZWlyIG1vZHVsZSBiZWZvcmUgb3RoZXIgZ2xvYmFscyBhcmVcbiAgICAgZGVsZXRlZDsgaWYgbm8gb3RoZXIgcmVmZXJlbmNlcyB0byBzdWNoIGdsb2JhbHMgZXhpc3QsIHRoaXMgbWF5XG4gICAgIGhlbHAgaW4gYXNzdXJpbmcgdGhhdCBpbXBvcnRlZCBtb2R1bGVzIGFyZSBzdGlsbCBhdmFpbGFibGUgYXQgdGhlXG4gICAgIHRpbWUgd2hlbiB0aGUgIl9fZGVsX18oKSIgbWV0aG9kIGlzIGNhbGxlZC5cblxub2JqZWN0Ll9fcmVwcl9fKHNlbGYpXG5cbiAgIENhbGxlZCBieSB0aGUgInJlcHIoKSIgYnVpbHQtaW4gZnVuY3Rpb24gdG8gY29tcHV0ZSB0aGUgIm9mZmljaWFsIlxuICAgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFuIG9iamVjdC4gIElmIGF0IGFsbCBwb3NzaWJsZSwgdGhpc1xuICAgc2hvdWxkIGxvb2sgbGlrZSBhIHZhbGlkIFB5dGhvbiBleHByZXNzaW9uIHRoYXQgY291bGQgYmUgdXNlZCB0b1xuICAgcmVjcmVhdGUgYW4gb2JqZWN0IHdpdGggdGhlIHNhbWUgdmFsdWUgKGdpdmVuIGFuIGFwcHJvcHJpYXRlXG4gICBlbnZpcm9ubWVudCkuICBJZiB0aGlzIGlzIG5vdCBwb3NzaWJsZSwgYSBzdHJpbmcgb2YgdGhlIGZvcm1cbiAgICI8Li4uc29tZSB1c2VmdWwgZGVzY3JpcHRpb24uLi4+IiBzaG91bGQgYmUgcmV0dXJuZWQuIFRoZSByZXR1cm5cbiAgIHZhbHVlIG11c3QgYmUgYSBzdHJpbmcgb2JqZWN0LiBJZiBhIGNsYXNzIGRlZmluZXMgIl9fcmVwcl9fKCkiIGJ1dFxuICAgbm90ICJfX3N0cl9fKCkiLCB0aGVuICJfX3JlcHJfXygpIiBpcyBhbHNvIHVzZWQgd2hlbiBhbiAiaW5mb3JtYWwiXG4gICBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgaW5zdGFuY2VzIG9mIHRoYXQgY2xhc3MgaXMgcmVxdWlyZWQuXG5cbiAgIFRoaXMgaXMgdHlwaWNhbGx5IHVzZWQgZm9yIGRlYnVnZ2luZywgc28gaXQgaXMgaW1wb3J0YW50IHRoYXQgdGhlXG4gICByZXByZXNlbnRhdGlvbiBpcyBpbmZvcm1hdGlvbi1yaWNoIGFuZCB1bmFtYmlndW91cy5cblxub2JqZWN0Ll9fc3RyX18oc2VsZilcblxuICAgQ2FsbGVkIGJ5ICJzdHIob2JqZWN0KSIgYW5kIHRoZSBidWlsdC1pbiBmdW5jdGlvbnMgImZvcm1hdCgpIiBhbmRcbiAgICJwcmludCgpIiB0byBjb21wdXRlIHRoZSAiaW5mb3JtYWwiIG9yIG5pY2VseSBwcmludGFibGUgc3RyaW5nXG4gICByZXByZXNlbnRhdGlvbiBvZiBhbiBvYmplY3QuICBUaGUgcmV0dXJuIHZhbHVlIG11c3QgYmUgYSAqc3RyaW5nKlxuICAgb2JqZWN0LlxuXG4gICBUaGlzIG1ldGhvZCBkaWZmZXJzIGZyb20gIm9iamVjdC5fX3JlcHJfXygpIiBpbiB0aGF0IHRoZXJlIGlzIG5vXG4gICBleHBlY3RhdGlvbiB0aGF0ICJfX3N0cl9fKCkiIHJldHVybiBhIHZhbGlkIFB5dGhvbiBleHByZXNzaW9uOiBhXG4gICBtb3JlIGNvbnZlbmllbnQgb3IgY29uY2lzZSByZXByZXNlbnRhdGlvbiBjYW4gYmUgdXNlZC5cblxuICAgVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZGVmaW5lZCBieSB0aGUgYnVpbHQtaW4gdHlwZSAib2JqZWN0IlxuICAgY2FsbHMgIm9iamVjdC5fX3JlcHJfXygpIi5cblxub2JqZWN0Ll9fYnl0ZXNfXyhzZWxmKVxuXG4gICBDYWxsZWQgYnkgImJ5dGVzKCkiIHRvIGNvbXB1dGUgYSBieXRlLXN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhblxuICAgb2JqZWN0LiBUaGlzIHNob3VsZCByZXR1cm4gYSAiYnl0ZXMiIG9iamVjdC5cblxub2JqZWN0Ll9fZm9ybWF0X18oc2VsZiwgZm9ybWF0X3NwZWMpXG5cbiAgIENhbGxlZCBieSB0aGUgImZvcm1hdCgpIiBidWlsdC1pbiBmdW5jdGlvbiAoYW5kIGJ5IGV4dGVuc2lvbiwgdGhlXG4gICAic3RyLmZvcm1hdCgpIiBtZXRob2Qgb2YgY2xhc3MgInN0ciIpIHRvIHByb2R1Y2UgYSAiZm9ybWF0dGVkIlxuICAgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFuIG9iamVjdC4gVGhlICJmb3JtYXRfc3BlYyIgYXJndW1lbnQgaXMgYVxuICAgc3RyaW5nIHRoYXQgY29udGFpbnMgYSBkZXNjcmlwdGlvbiBvZiB0aGUgZm9ybWF0dGluZyBvcHRpb25zXG4gICBkZXNpcmVkLiBUaGUgaW50ZXJwcmV0YXRpb24gb2YgdGhlICJmb3JtYXRfc3BlYyIgYXJndW1lbnQgaXMgdXAgdG9cbiAgIHRoZSB0eXBlIGltcGxlbWVudGluZyAiX19mb3JtYXRfXygpIiwgaG93ZXZlciBtb3N0IGNsYXNzZXMgd2lsbFxuICAgZWl0aGVyIGRlbGVnYXRlIGZvcm1hdHRpbmcgdG8gb25lIG9mIHRoZSBidWlsdC1pbiB0eXBlcywgb3IgdXNlIGFcbiAgIHNpbWlsYXIgZm9ybWF0dGluZyBvcHRpb24gc3ludGF4LlxuXG4gICBTZWUgKkZvcm1hdCBTcGVjaWZpY2F0aW9uIE1pbmktTGFuZ3VhZ2UqIGZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZVxuICAgc3RhbmRhcmQgZm9ybWF0dGluZyBzeW50YXguXG5cbiAgIFRoZSByZXR1cm4gdmFsdWUgbXVzdCBiZSBhIHN0cmluZyBvYmplY3QuXG5cbiAgIENoYW5nZWQgaW4gdmVyc2lvbiAzLjQ6IFRoZSBfX2Zvcm1hdF9fIG1ldGhvZCBvZiAib2JqZWN0IiBpdHNlbGZcbiAgIHJhaXNlcyBhICJUeXBlRXJyb3IiIGlmIHBhc3NlZCBhbnkgbm9uLWVtcHR5IHN0cmluZy5cblxub2JqZWN0Ll9fbHRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2xlX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19lcV9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fbmVfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2d0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19nZV9fKHNlbGYsIG90aGVyKVxuXG4gICBUaGVzZSBhcmUgdGhlIHNvLWNhbGxlZCAicmljaCBjb21wYXJpc29uIiBtZXRob2RzLiBUaGVcbiAgIGNvcnJlc3BvbmRlbmNlIGJldHdlZW4gb3BlcmF0b3Igc3ltYm9scyBhbmQgbWV0aG9kIG5hbWVzIGlzIGFzXG4gICBmb2xsb3dzOiAieDx5IiBjYWxscyAieC5fX2x0X18oeSkiLCAieDw9eSIgY2FsbHMgInguX19sZV9fKHkpIixcbiAgICJ4PT15IiBjYWxscyAieC5fX2VxX18oeSkiLCAieCE9eSIgY2FsbHMgInguX19uZV9fKHkpIiwgIng+eSIgY2FsbHNcbiAgICJ4Ll9fZ3RfXyh5KSIsIGFuZCAieD49eSIgY2FsbHMgInguX19nZV9fKHkpIi5cblxuICAgQSByaWNoIGNvbXBhcmlzb24gbWV0aG9kIG1heSByZXR1cm4gdGhlIHNpbmdsZXRvbiAiTm90SW1wbGVtZW50ZWQiXG4gICBpZiBpdCBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIG9wZXJhdGlvbiBmb3IgYSBnaXZlbiBwYWlyIG9mXG4gICBhcmd1bWVudHMuIEJ5IGNvbnZlbnRpb24sICJGYWxzZSIgYW5kICJUcnVlIiBhcmUgcmV0dXJuZWQgZm9yIGFcbiAgIHN1Y2Nlc3NmdWwgY29tcGFyaXNvbi4gSG93ZXZlciwgdGhlc2UgbWV0aG9kcyBjYW4gcmV0dXJuIGFueSB2YWx1ZSxcbiAgIHNvIGlmIHRoZSBjb21wYXJpc29uIG9wZXJhdG9yIGlzIHVzZWQgaW4gYSBCb29sZWFuIGNvbnRleHQgKGUuZy4sXG4gICBpbiB0aGUgY29uZGl0aW9uIG9mIGFuICJpZiIgc3RhdGVtZW50KSwgUHl0aG9uIHdpbGwgY2FsbCAiYm9vbCgpIlxuICAgb24gdGhlIHZhbHVlIHRvIGRldGVybWluZSBpZiB0aGUgcmVzdWx0IGlzIHRydWUgb3IgZmFsc2UuXG5cbiAgIEJ5IGRlZmF1bHQsICJfX25lX18oKSIgZGVsZWdhdGVzIHRvICJfX2VxX18oKSIgYW5kIGludmVydHMgdGhlXG4gICByZXN1bHQgdW5sZXNzIGl0IGlzICJOb3RJbXBsZW1lbnRlZCIuICBUaGVyZSBhcmUgbm8gb3RoZXIgaW1wbGllZFxuICAgcmVsYXRpb25zaGlwcyBhbW9uZyB0aGUgY29tcGFyaXNvbiBvcGVyYXRvcnMsIGZvciBleGFtcGxlLCB0aGVcbiAgIHRydXRoIG9mICIoeDx5IG9yIHg9PXkpIiBkb2VzIG5vdCBpbXBseSAieDw9eSIuIFRvIGF1dG9tYXRpY2FsbHlcbiAgIGdlbmVyYXRlIG9yZGVyaW5nIG9wZXJhdGlvbnMgZnJvbSBhIHNpbmdsZSByb290IG9wZXJhdGlvbiwgc2VlXG4gICAiZnVuY3Rvb2xzLnRvdGFsX29yZGVyaW5nKCkiLlxuXG4gICBTZWUgdGhlIHBhcmFncmFwaCBvbiAiX19oYXNoX18oKSIgZm9yIHNvbWUgaW1wb3J0YW50IG5vdGVzIG9uXG4gICBjcmVhdGluZyAqaGFzaGFibGUqIG9iamVjdHMgd2hpY2ggc3VwcG9ydCBjdXN0b20gY29tcGFyaXNvblxuICAgb3BlcmF0aW9ucyBhbmQgYXJlIHVzYWJsZSBhcyBkaWN0aW9uYXJ5IGtleXMuXG5cbiAgIFRoZXJlIGFyZSBubyBzd2FwcGVkLWFyZ3VtZW50IHZlcnNpb25zIG9mIHRoZXNlIG1ldGhvZHMgKHRvIGJlIHVzZWRcbiAgIHdoZW4gdGhlIGxlZnQgYXJndW1lbnQgZG9lcyBub3Qgc3VwcG9ydCB0aGUgb3BlcmF0aW9uIGJ1dCB0aGUgcmlnaHRcbiAgIGFyZ3VtZW50IGRvZXMpOyByYXRoZXIsICJfX2x0X18oKSIgYW5kICJfX2d0X18oKSIgYXJlIGVhY2ggb3RoZXJcJ3NcbiAgIHJlZmxlY3Rpb24sICJfX2xlX18oKSIgYW5kICJfX2dlX18oKSIgYXJlIGVhY2ggb3RoZXJcJ3MgcmVmbGVjdGlvbixcbiAgIGFuZCAiX19lcV9fKCkiIGFuZCAiX19uZV9fKCkiIGFyZSB0aGVpciBvd24gcmVmbGVjdGlvbi4gSWYgdGhlXG4gICBvcGVyYW5kcyBhcmUgb2YgZGlmZmVyZW50IHR5cGVzLCBhbmQgcmlnaHQgb3BlcmFuZFwncyB0eXBlIGlzIGFcbiAgIGRpcmVjdCBvciBpbmRpcmVjdCBzdWJjbGFzcyBvZiB0aGUgbGVmdCBvcGVyYW5kXCdzIHR5cGUsIHRoZVxuICAgcmVmbGVjdGVkIG1ldGhvZCBvZiB0aGUgcmlnaHQgb3BlcmFuZCBoYXMgcHJpb3JpdHksIG90aGVyd2lzZSB0aGVcbiAgIGxlZnQgb3BlcmFuZFwncyBtZXRob2QgaGFzIHByaW9yaXR5LiAgVmlydHVhbCBzdWJjbGFzc2luZyBpcyBub3RcbiAgIGNvbnNpZGVyZWQuXG5cbm9iamVjdC5fX2hhc2hfXyhzZWxmKVxuXG4gICBDYWxsZWQgYnkgYnVpbHQtaW4gZnVuY3Rpb24gImhhc2goKSIgYW5kIGZvciBvcGVyYXRpb25zIG9uIG1lbWJlcnNcbiAgIG9mIGhhc2hlZCBjb2xsZWN0aW9ucyBpbmNsdWRpbmcgInNldCIsICJmcm96ZW5zZXQiLCBhbmQgImRpY3QiLlxuICAgIl9faGFzaF9fKCkiIHNob3VsZCByZXR1cm4gYW4gaW50ZWdlci4gIFRoZSBvbmx5IHJlcXVpcmVkIHByb3BlcnR5XG4gICBpcyB0aGF0IG9iamVjdHMgd2hpY2ggY29tcGFyZSBlcXVhbCBoYXZlIHRoZSBzYW1lIGhhc2ggdmFsdWU7IGl0IGlzXG4gICBhZHZpc2VkIHRvIHNvbWVob3cgbWl4IHRvZ2V0aGVyIChlLmcuIHVzaW5nIGV4Y2x1c2l2ZSBvcikgdGhlIGhhc2hcbiAgIHZhbHVlcyBmb3IgdGhlIGNvbXBvbmVudHMgb2YgdGhlIG9iamVjdCB0aGF0IGFsc28gcGxheSBhIHBhcnQgaW5cbiAgIGNvbXBhcmlzb24gb2Ygb2JqZWN0cy5cblxuICAgTm90ZTogImhhc2goKSIgdHJ1bmNhdGVzIHRoZSB2YWx1ZSByZXR1cm5lZCBmcm9tIGFuIG9iamVjdFwnc1xuICAgICBjdXN0b20gIl9faGFzaF9fKCkiIG1ldGhvZCB0byB0aGUgc2l6ZSBvZiBhICJQeV9zc2l6ZV90Ii4gIFRoaXNcbiAgICAgaXMgdHlwaWNhbGx5IDggYnl0ZXMgb24gNjQtYml0IGJ1aWxkcyBhbmQgNCBieXRlcyBvbiAzMi1iaXRcbiAgICAgYnVpbGRzLiBJZiBhbiBvYmplY3RcJ3MgICAiX19oYXNoX18oKSIgbXVzdCBpbnRlcm9wZXJhdGUgb24gYnVpbGRzXG4gICAgIG9mIGRpZmZlcmVudCBiaXQgc2l6ZXMsIGJlIHN1cmUgdG8gY2hlY2sgdGhlIHdpZHRoIG9uIGFsbFxuICAgICBzdXBwb3J0ZWQgYnVpbGRzLiAgQW4gZWFzeSB3YXkgdG8gZG8gdGhpcyBpcyB3aXRoICJweXRob24gLWNcbiAgICAgImltcG9ydCBzeXM7IHByaW50KHN5cy5oYXNoX2luZm8ud2lkdGgpIiIuXG5cbiAgIElmIGEgY2xhc3MgZG9lcyBub3QgZGVmaW5lIGFuICJfX2VxX18oKSIgbWV0aG9kIGl0IHNob3VsZCBub3RcbiAgIGRlZmluZSBhICJfX2hhc2hfXygpIiBvcGVyYXRpb24gZWl0aGVyOyBpZiBpdCBkZWZpbmVzICJfX2VxX18oKSJcbiAgIGJ1dCBub3QgIl9faGFzaF9fKCkiLCBpdHMgaW5zdGFuY2VzIHdpbGwgbm90IGJlIHVzYWJsZSBhcyBpdGVtcyBpblxuICAgaGFzaGFibGUgY29sbGVjdGlvbnMuICBJZiBhIGNsYXNzIGRlZmluZXMgbXV0YWJsZSBvYmplY3RzIGFuZFxuICAgaW1wbGVtZW50cyBhbiAiX19lcV9fKCkiIG1ldGhvZCwgaXQgc2hvdWxkIG5vdCBpbXBsZW1lbnRcbiAgICJfX2hhc2hfXygpIiwgc2luY2UgdGhlIGltcGxlbWVudGF0aW9uIG9mIGhhc2hhYmxlIGNvbGxlY3Rpb25zXG4gICByZXF1aXJlcyB0aGF0IGEga2V5XCdzIGhhc2ggdmFsdWUgaXMgaW1tdXRhYmxlIChpZiB0aGUgb2JqZWN0XCdzIGhhc2hcbiAgIHZhbHVlIGNoYW5nZXMsIGl0IHdpbGwgYmUgaW4gdGhlIHdyb25nIGhhc2ggYnVja2V0KS5cblxuICAgVXNlci1kZWZpbmVkIGNsYXNzZXMgaGF2ZSAiX19lcV9fKCkiIGFuZCAiX19oYXNoX18oKSIgbWV0aG9kcyBieVxuICAgZGVmYXVsdDsgd2l0aCB0aGVtLCBhbGwgb2JqZWN0cyBjb21wYXJlIHVuZXF1YWwgKGV4Y2VwdCB3aXRoXG4gICB0aGVtc2VsdmVzKSBhbmQgInguX19oYXNoX18oKSIgcmV0dXJucyBhbiBhcHByb3ByaWF0ZSB2YWx1ZSBzdWNoXG4gICB0aGF0ICJ4ID09IHkiIGltcGxpZXMgYm90aCB0aGF0ICJ4IGlzIHkiIGFuZCAiaGFzaCh4KSA9PSBoYXNoKHkpIi5cblxuICAgQSBjbGFzcyB0aGF0IG92ZXJyaWRlcyAiX19lcV9fKCkiIGFuZCBkb2VzIG5vdCBkZWZpbmUgIl9faGFzaF9fKCkiXG4gICB3aWxsIGhhdmUgaXRzICJfX2hhc2hfXygpIiBpbXBsaWNpdGx5IHNldCB0byAiTm9uZSIuICBXaGVuIHRoZVxuICAgIl9faGFzaF9fKCkiIG1ldGhvZCBvZiBhIGNsYXNzIGlzICJOb25lIiwgaW5zdGFuY2VzIG9mIHRoZSBjbGFzc1xuICAgd2lsbCByYWlzZSBhbiBhcHByb3ByaWF0ZSAiVHlwZUVycm9yIiB3aGVuIGEgcHJvZ3JhbSBhdHRlbXB0cyB0b1xuICAgcmV0cmlldmUgdGhlaXIgaGFzaCB2YWx1ZSwgYW5kIHdpbGwgYWxzbyBiZSBjb3JyZWN0bHkgaWRlbnRpZmllZCBhc1xuICAgdW5oYXNoYWJsZSB3aGVuIGNoZWNraW5nICJpc2luc3RhbmNlKG9iaiwgY29sbGVjdGlvbnMuSGFzaGFibGUpIi5cblxuICAgSWYgYSBjbGFzcyB0aGF0IG92ZXJyaWRlcyAiX19lcV9fKCkiIG5lZWRzIHRvIHJldGFpbiB0aGVcbiAgIGltcGxlbWVudGF0aW9uIG9mICJfX2hhc2hfXygpIiBmcm9tIGEgcGFyZW50IGNsYXNzLCB0aGUgaW50ZXJwcmV0ZXJcbiAgIG11c3QgYmUgdG9sZCB0aGlzIGV4cGxpY2l0bHkgYnkgc2V0dGluZyAiX19oYXNoX18gPVxuICAgPFBhcmVudENsYXNzPi5fX2hhc2hfXyIuXG5cbiAgIElmIGEgY2xhc3MgdGhhdCBkb2VzIG5vdCBvdmVycmlkZSAiX19lcV9fKCkiIHdpc2hlcyB0byBzdXBwcmVzc1xuICAgaGFzaCBzdXBwb3J0LCBpdCBzaG91bGQgaW5jbHVkZSAiX19oYXNoX18gPSBOb25lIiBpbiB0aGUgY2xhc3NcbiAgIGRlZmluaXRpb24uIEEgY2xhc3Mgd2hpY2ggZGVmaW5lcyBpdHMgb3duICJfX2hhc2hfXygpIiB0aGF0XG4gICBleHBsaWNpdGx5IHJhaXNlcyBhICJUeXBlRXJyb3IiIHdvdWxkIGJlIGluY29ycmVjdGx5IGlkZW50aWZpZWQgYXNcbiAgIGhhc2hhYmxlIGJ5IGFuICJpc2luc3RhbmNlKG9iaiwgY29sbGVjdGlvbnMuSGFzaGFibGUpIiBjYWxsLlxuXG4gICBOb3RlOiBCeSBkZWZhdWx0LCB0aGUgIl9faGFzaF9fKCkiIHZhbHVlcyBvZiBzdHIsIGJ5dGVzIGFuZFxuICAgICBkYXRldGltZSBvYmplY3RzIGFyZSAic2FsdGVkIiB3aXRoIGFuIHVucHJlZGljdGFibGUgcmFuZG9tIHZhbHVlLlxuICAgICBBbHRob3VnaCB0aGV5IHJlbWFpbiBjb25zdGFudCB3aXRoaW4gYW4gaW5kaXZpZHVhbCBQeXRob25cbiAgICAgcHJvY2VzcywgdGhleSBhcmUgbm90IHByZWRpY3RhYmxlIGJldHdlZW4gcmVwZWF0ZWQgaW52b2NhdGlvbnMgb2ZcbiAgICAgUHl0aG9uLlRoaXMgaXMgaW50ZW5kZWQgdG8gcHJvdmlkZSBwcm90ZWN0aW9uIGFnYWluc3QgYSBkZW5pYWwtXG4gICAgIG9mLXNlcnZpY2UgY2F1c2VkIGJ5IGNhcmVmdWxseS1jaG9zZW4gaW5wdXRzIHRoYXQgZXhwbG9pdCB0aGVcbiAgICAgd29yc3QgY2FzZSBwZXJmb3JtYW5jZSBvZiBhIGRpY3QgaW5zZXJ0aW9uLCBPKG5eMikgY29tcGxleGl0eS5cbiAgICAgU2VlIGh0dHA6Ly93d3cub2NlcnQub3JnL2Fkdmlzb3JpZXMvb2NlcnQtMjAxMS0wMDMuaHRtbCBmb3JcbiAgICAgZGV0YWlscy5DaGFuZ2luZyBoYXNoIHZhbHVlcyBhZmZlY3RzIHRoZSBpdGVyYXRpb24gb3JkZXIgb2ZcbiAgICAgZGljdHMsIHNldHMgYW5kIG90aGVyIG1hcHBpbmdzLiAgUHl0aG9uIGhhcyBuZXZlciBtYWRlIGd1YXJhbnRlZXNcbiAgICAgYWJvdXQgdGhpcyBvcmRlcmluZyAoYW5kIGl0IHR5cGljYWxseSB2YXJpZXMgYmV0d2VlbiAzMi1iaXQgYW5kXG4gICAgIDY0LWJpdCBidWlsZHMpLlNlZSBhbHNvICJQWVRIT05IQVNIU0VFRCIuXG5cbiAgIENoYW5nZWQgaW4gdmVyc2lvbiAzLjM6IEhhc2ggcmFuZG9taXphdGlvbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQuXG5cbm9iamVjdC5fX2Jvb2xfXyhzZWxmKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IHRydXRoIHZhbHVlIHRlc3RpbmcgYW5kIHRoZSBidWlsdC1pbiBvcGVyYXRpb25cbiAgICJib29sKCkiOyBzaG91bGQgcmV0dXJuICJGYWxzZSIgb3IgIlRydWUiLiAgV2hlbiB0aGlzIG1ldGhvZCBpcyBub3RcbiAgIGRlZmluZWQsICJfX2xlbl9fKCkiIGlzIGNhbGxlZCwgaWYgaXQgaXMgZGVmaW5lZCwgYW5kIHRoZSBvYmplY3QgaXNcbiAgIGNvbnNpZGVyZWQgdHJ1ZSBpZiBpdHMgcmVzdWx0IGlzIG5vbnplcm8uICBJZiBhIGNsYXNzIGRlZmluZXNcbiAgIG5laXRoZXIgIl9fbGVuX18oKSIgbm9yICJfX2Jvb2xfXygpIiwgYWxsIGl0cyBpbnN0YW5jZXMgYXJlXG4gICBjb25zaWRlcmVkIHRydWUuXG5cblxuQ3VzdG9taXppbmcgYXR0cmlidXRlIGFjY2Vzc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5UaGUgZm9sbG93aW5nIG1ldGhvZHMgY2FuIGJlIGRlZmluZWQgdG8gY3VzdG9taXplIHRoZSBtZWFuaW5nIG9mXG5hdHRyaWJ1dGUgYWNjZXNzICh1c2Ugb2YsIGFzc2lnbm1lbnQgdG8sIG9yIGRlbGV0aW9uIG9mICJ4Lm5hbWUiKSBmb3JcbmNsYXNzIGluc3RhbmNlcy5cblxub2JqZWN0Ll9fZ2V0YXR0cl9fKHNlbGYsIG5hbWUpXG5cbiAgIENhbGxlZCB3aGVuIGFuIGF0dHJpYnV0ZSBsb29rdXAgaGFzIG5vdCBmb3VuZCB0aGUgYXR0cmlidXRlIGluIHRoZVxuICAgdXN1YWwgcGxhY2VzIChpLmUuIGl0IGlzIG5vdCBhbiBpbnN0YW5jZSBhdHRyaWJ1dGUgbm9yIGlzIGl0IGZvdW5kXG4gICBpbiB0aGUgY2xhc3MgdHJlZSBmb3IgInNlbGYiKS4gICJuYW1lIiBpcyB0aGUgYXR0cmlidXRlIG5hbWUuIFRoaXNcbiAgIG1ldGhvZCBzaG91bGQgcmV0dXJuIHRoZSAoY29tcHV0ZWQpIGF0dHJpYnV0ZSB2YWx1ZSBvciByYWlzZSBhblxuICAgIkF0dHJpYnV0ZUVycm9yIiBleGNlcHRpb24uXG5cbiAgIE5vdGUgdGhhdCBpZiB0aGUgYXR0cmlidXRlIGlzIGZvdW5kIHRocm91Z2ggdGhlIG5vcm1hbCBtZWNoYW5pc20sXG4gICAiX19nZXRhdHRyX18oKSIgaXMgbm90IGNhbGxlZC4gIChUaGlzIGlzIGFuIGludGVudGlvbmFsIGFzeW1tZXRyeVxuICAgYmV0d2VlbiAiX19nZXRhdHRyX18oKSIgYW5kICJfX3NldGF0dHJfXygpIi4pIFRoaXMgaXMgZG9uZSBib3RoIGZvclxuICAgZWZmaWNpZW5jeSByZWFzb25zIGFuZCBiZWNhdXNlIG90aGVyd2lzZSAiX19nZXRhdHRyX18oKSIgd291bGQgaGF2ZVxuICAgbm8gd2F5IHRvIGFjY2VzcyBvdGhlciBhdHRyaWJ1dGVzIG9mIHRoZSBpbnN0YW5jZS4gIE5vdGUgdGhhdCBhdFxuICAgbGVhc3QgZm9yIGluc3RhbmNlIHZhcmlhYmxlcywgeW91IGNhbiBmYWtlIHRvdGFsIGNvbnRyb2wgYnkgbm90XG4gICBpbnNlcnRpbmcgYW55IHZhbHVlcyBpbiB0aGUgaW5zdGFuY2UgYXR0cmlidXRlIGRpY3Rpb25hcnkgKGJ1dFxuICAgaW5zdGVhZCBpbnNlcnRpbmcgdGhlbSBpbiBhbm90aGVyIG9iamVjdCkuICBTZWUgdGhlXG4gICAiX19nZXRhdHRyaWJ1dGVfXygpIiBtZXRob2QgYmVsb3cgZm9yIGEgd2F5IHRvIGFjdHVhbGx5IGdldCB0b3RhbFxuICAgY29udHJvbCBvdmVyIGF0dHJpYnV0ZSBhY2Nlc3MuXG5cbm9iamVjdC5fX2dldGF0dHJpYnV0ZV9fKHNlbGYsIG5hbWUpXG5cbiAgIENhbGxlZCB1bmNvbmRpdGlvbmFsbHkgdG8gaW1wbGVtZW50IGF0dHJpYnV0ZSBhY2Nlc3NlcyBmb3JcbiAgIGluc3RhbmNlcyBvZiB0aGUgY2xhc3MuIElmIHRoZSBjbGFzcyBhbHNvIGRlZmluZXMgIl9fZ2V0YXR0cl9fKCkiLFxuICAgdGhlIGxhdHRlciB3aWxsIG5vdCBiZSBjYWxsZWQgdW5sZXNzICJfX2dldGF0dHJpYnV0ZV9fKCkiIGVpdGhlclxuICAgY2FsbHMgaXQgZXhwbGljaXRseSBvciByYWlzZXMgYW4gIkF0dHJpYnV0ZUVycm9yIi4gVGhpcyBtZXRob2RcbiAgIHNob3VsZCByZXR1cm4gdGhlIChjb21wdXRlZCkgYXR0cmlidXRlIHZhbHVlIG9yIHJhaXNlIGFuXG4gICAiQXR0cmlidXRlRXJyb3IiIGV4Y2VwdGlvbi4gSW4gb3JkZXIgdG8gYXZvaWQgaW5maW5pdGUgcmVjdXJzaW9uIGluXG4gICB0aGlzIG1ldGhvZCwgaXRzIGltcGxlbWVudGF0aW9uIHNob3VsZCBhbHdheXMgY2FsbCB0aGUgYmFzZSBjbGFzc1xuICAgbWV0aG9kIHdpdGggdGhlIHNhbWUgbmFtZSB0byBhY2Nlc3MgYW55IGF0dHJpYnV0ZXMgaXQgbmVlZHMsIGZvclxuICAgZXhhbXBsZSwgIm9iamVjdC5fX2dldGF0dHJpYnV0ZV9fKHNlbGYsIG5hbWUpIi5cblxuICAgTm90ZTogVGhpcyBtZXRob2QgbWF5IHN0aWxsIGJlIGJ5cGFzc2VkIHdoZW4gbG9va2luZyB1cCBzcGVjaWFsXG4gICAgIG1ldGhvZHMgYXMgdGhlIHJlc3VsdCBvZiBpbXBsaWNpdCBpbnZvY2F0aW9uIHZpYSBsYW5ndWFnZSBzeW50YXhcbiAgICAgb3IgYnVpbHQtaW4gZnVuY3Rpb25zLiBTZWUgKlNwZWNpYWwgbWV0aG9kIGxvb2t1cCouXG5cbm9iamVjdC5fX3NldGF0dHJfXyhzZWxmLCBuYW1lLCB2YWx1ZSlcblxuICAgQ2FsbGVkIHdoZW4gYW4gYXR0cmlidXRlIGFzc2lnbm1lbnQgaXMgYXR0ZW1wdGVkLiAgVGhpcyBpcyBjYWxsZWRcbiAgIGluc3RlYWQgb2YgdGhlIG5vcm1hbCBtZWNoYW5pc20gKGkuZS4gc3RvcmUgdGhlIHZhbHVlIGluIHRoZVxuICAgaW5zdGFuY2UgZGljdGlvbmFyeSkuICpuYW1lKiBpcyB0aGUgYXR0cmlidXRlIG5hbWUsICp2YWx1ZSogaXMgdGhlXG4gICB2YWx1ZSB0byBiZSBhc3NpZ25lZCB0byBpdC5cblxuICAgSWYgIl9fc2V0YXR0cl9fKCkiIHdhbnRzIHRvIGFzc2lnbiB0byBhbiBpbnN0YW5jZSBhdHRyaWJ1dGUsIGl0XG4gICBzaG91bGQgY2FsbCB0aGUgYmFzZSBjbGFzcyBtZXRob2Qgd2l0aCB0aGUgc2FtZSBuYW1lLCBmb3IgZXhhbXBsZSxcbiAgICJvYmplY3QuX19zZXRhdHRyX18oc2VsZiwgbmFtZSwgdmFsdWUpIi5cblxub2JqZWN0Ll9fZGVsYXR0cl9fKHNlbGYsIG5hbWUpXG5cbiAgIExpa2UgIl9fc2V0YXR0cl9fKCkiIGJ1dCBmb3IgYXR0cmlidXRlIGRlbGV0aW9uIGluc3RlYWQgb2ZcbiAgIGFzc2lnbm1lbnQuICBUaGlzIHNob3VsZCBvbmx5IGJlIGltcGxlbWVudGVkIGlmICJkZWwgb2JqLm5hbWUiIGlzXG4gICBtZWFuaW5nZnVsIGZvciB0aGUgb2JqZWN0LlxuXG5vYmplY3QuX19kaXJfXyhzZWxmKVxuXG4gICBDYWxsZWQgd2hlbiAiZGlyKCkiIGlzIGNhbGxlZCBvbiB0aGUgb2JqZWN0LiBBIHNlcXVlbmNlIG11c3QgYmVcbiAgIHJldHVybmVkLiAiZGlyKCkiIGNvbnZlcnRzIHRoZSByZXR1cm5lZCBzZXF1ZW5jZSB0byBhIGxpc3QgYW5kXG4gICBzb3J0cyBpdC5cblxuXG5JbXBsZW1lbnRpbmcgRGVzY3JpcHRvcnNcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5UaGUgZm9sbG93aW5nIG1ldGhvZHMgb25seSBhcHBseSB3aGVuIGFuIGluc3RhbmNlIG9mIHRoZSBjbGFzc1xuY29udGFpbmluZyB0aGUgbWV0aG9kIChhIHNvLWNhbGxlZCAqZGVzY3JpcHRvciogY2xhc3MpIGFwcGVhcnMgaW4gYW5cbipvd25lciogY2xhc3MgKHRoZSBkZXNjcmlwdG9yIG11c3QgYmUgaW4gZWl0aGVyIHRoZSBvd25lclwncyBjbGFzc1xuZGljdGlvbmFyeSBvciBpbiB0aGUgY2xhc3MgZGljdGlvbmFyeSBmb3Igb25lIG9mIGl0cyBwYXJlbnRzKS4gIEluIHRoZVxuZXhhbXBsZXMgYmVsb3csICJ0aGUgYXR0cmlidXRlIiByZWZlcnMgdG8gdGhlIGF0dHJpYnV0ZSB3aG9zZSBuYW1lIGlzXG50aGUga2V5IG9mIHRoZSBwcm9wZXJ0eSBpbiB0aGUgb3duZXIgY2xhc3NcJyAiX19kaWN0X18iLlxuXG5vYmplY3QuX19nZXRfXyhzZWxmLCBpbnN0YW5jZSwgb3duZXIpXG5cbiAgIENhbGxlZCB0byBnZXQgdGhlIGF0dHJpYnV0ZSBvZiB0aGUgb3duZXIgY2xhc3MgKGNsYXNzIGF0dHJpYnV0ZVxuICAgYWNjZXNzKSBvciBvZiBhbiBpbnN0YW5jZSBvZiB0aGF0IGNsYXNzIChpbnN0YW5jZSBhdHRyaWJ1dGVcbiAgIGFjY2VzcykuICpvd25lciogaXMgYWx3YXlzIHRoZSBvd25lciBjbGFzcywgd2hpbGUgKmluc3RhbmNlKiBpcyB0aGVcbiAgIGluc3RhbmNlIHRoYXQgdGhlIGF0dHJpYnV0ZSB3YXMgYWNjZXNzZWQgdGhyb3VnaCwgb3IgIk5vbmUiIHdoZW5cbiAgIHRoZSBhdHRyaWJ1dGUgaXMgYWNjZXNzZWQgdGhyb3VnaCB0aGUgKm93bmVyKi4gIFRoaXMgbWV0aG9kIHNob3VsZFxuICAgcmV0dXJuIHRoZSAoY29tcHV0ZWQpIGF0dHJpYnV0ZSB2YWx1ZSBvciByYWlzZSBhbiAiQXR0cmlidXRlRXJyb3IiXG4gICBleGNlcHRpb24uXG5cbm9iamVjdC5fX3NldF9fKHNlbGYsIGluc3RhbmNlLCB2YWx1ZSlcblxuICAgQ2FsbGVkIHRvIHNldCB0aGUgYXR0cmlidXRlIG9uIGFuIGluc3RhbmNlICppbnN0YW5jZSogb2YgdGhlIG93bmVyXG4gICBjbGFzcyB0byBhIG5ldyB2YWx1ZSwgKnZhbHVlKi5cblxub2JqZWN0Ll9fZGVsZXRlX18oc2VsZiwgaW5zdGFuY2UpXG5cbiAgIENhbGxlZCB0byBkZWxldGUgdGhlIGF0dHJpYnV0ZSBvbiBhbiBpbnN0YW5jZSAqaW5zdGFuY2UqIG9mIHRoZVxuICAgb3duZXIgY2xhc3MuXG5cblRoZSBhdHRyaWJ1dGUgIl9fb2JqY2xhc3NfXyIgaXMgaW50ZXJwcmV0ZWQgYnkgdGhlICJpbnNwZWN0IiBtb2R1bGUgYXNcbnNwZWNpZnlpbmcgdGhlIGNsYXNzIHdoZXJlIHRoaXMgb2JqZWN0IHdhcyBkZWZpbmVkIChzZXR0aW5nIHRoaXNcbmFwcHJvcHJpYXRlbHkgY2FuIGFzc2lzdCBpbiBydW50aW1lIGludHJvc3BlY3Rpb24gb2YgZHluYW1pYyBjbGFzc1xuYXR0cmlidXRlcykuIEZvciBjYWxsYWJsZXMsIGl0IG1heSBpbmRpY2F0ZSB0aGF0IGFuIGluc3RhbmNlIG9mIHRoZVxuZ2l2ZW4gdHlwZSAob3IgYSBzdWJjbGFzcykgaXMgZXhwZWN0ZWQgb3IgcmVxdWlyZWQgYXMgdGhlIGZpcnN0XG5wb3NpdGlvbmFsIGFyZ3VtZW50IChmb3IgZXhhbXBsZSwgQ1B5dGhvbiBzZXRzIHRoaXMgYXR0cmlidXRlIGZvclxudW5ib3VuZCBtZXRob2RzIHRoYXQgYXJlIGltcGxlbWVudGVkIGluIEMpLlxuXG5cbkludm9raW5nIERlc2NyaXB0b3JzXG4tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5JbiBnZW5lcmFsLCBhIGRlc2NyaXB0b3IgaXMgYW4gb2JqZWN0IGF0dHJpYnV0ZSB3aXRoICJiaW5kaW5nXG5iZWhhdmlvciIsIG9uZSB3aG9zZSBhdHRyaWJ1dGUgYWNjZXNzIGhhcyBiZWVuIG92ZXJyaWRkZW4gYnkgbWV0aG9kc1xuaW4gdGhlIGRlc2NyaXB0b3IgcHJvdG9jb2w6ICAiX19nZXRfXygpIiwgIl9fc2V0X18oKSIsIGFuZFxuIl9fZGVsZXRlX18oKSIuIElmIGFueSBvZiB0aG9zZSBtZXRob2RzIGFyZSBkZWZpbmVkIGZvciBhbiBvYmplY3QsIGl0XG5pcyBzYWlkIHRvIGJlIGEgZGVzY3JpcHRvci5cblxuVGhlIGRlZmF1bHQgYmVoYXZpb3IgZm9yIGF0dHJpYnV0ZSBhY2Nlc3MgaXMgdG8gZ2V0LCBzZXQsIG9yIGRlbGV0ZVxudGhlIGF0dHJpYnV0ZSBmcm9tIGFuIG9iamVjdFwncyBkaWN0aW9uYXJ5LiBGb3IgaW5zdGFuY2UsICJhLngiIGhhcyBhXG5sb29rdXAgY2hhaW4gc3RhcnRpbmcgd2l0aCAiYS5fX2RpY3RfX1tcJ3hcJ10iLCB0aGVuXG4idHlwZShhKS5fX2RpY3RfX1tcJ3hcJ10iLCBhbmQgY29udGludWluZyB0aHJvdWdoIHRoZSBiYXNlIGNsYXNzZXMgb2ZcbiJ0eXBlKGEpIiBleGNsdWRpbmcgbWV0YWNsYXNzZXMuXG5cbkhvd2V2ZXIsIGlmIHRoZSBsb29rZWQtdXAgdmFsdWUgaXMgYW4gb2JqZWN0IGRlZmluaW5nIG9uZSBvZiB0aGVcbmRlc2NyaXB0b3IgbWV0aG9kcywgdGhlbiBQeXRob24gbWF5IG92ZXJyaWRlIHRoZSBkZWZhdWx0IGJlaGF2aW9yIGFuZFxuaW52b2tlIHRoZSBkZXNjcmlwdG9yIG1ldGhvZCBpbnN0ZWFkLiAgV2hlcmUgdGhpcyBvY2N1cnMgaW4gdGhlXG5wcmVjZWRlbmNlIGNoYWluIGRlcGVuZHMgb24gd2hpY2ggZGVzY3JpcHRvciBtZXRob2RzIHdlcmUgZGVmaW5lZCBhbmRcbmhvdyB0aGV5IHdlcmUgY2FsbGVkLlxuXG5UaGUgc3RhcnRpbmcgcG9pbnQgZm9yIGRlc2NyaXB0b3IgaW52b2NhdGlvbiBpcyBhIGJpbmRpbmcsICJhLngiLiBIb3dcbnRoZSBhcmd1bWVudHMgYXJlIGFzc2VtYmxlZCBkZXBlbmRzIG9uICJhIjpcblxuRGlyZWN0IENhbGxcbiAgIFRoZSBzaW1wbGVzdCBhbmQgbGVhc3QgY29tbW9uIGNhbGwgaXMgd2hlbiB1c2VyIGNvZGUgZGlyZWN0bHlcbiAgIGludm9rZXMgYSBkZXNjcmlwdG9yIG1ldGhvZDogICAgInguX19nZXRfXyhhKSIuXG5cbkluc3RhbmNlIEJpbmRpbmdcbiAgIElmIGJpbmRpbmcgdG8gYW4gb2JqZWN0IGluc3RhbmNlLCAiYS54IiBpcyB0cmFuc2Zvcm1lZCBpbnRvIHRoZVxuICAgY2FsbDogInR5cGUoYSkuX19kaWN0X19bXCd4XCddLl9fZ2V0X18oYSwgdHlwZShhKSkiLlxuXG5DbGFzcyBCaW5kaW5nXG4gICBJZiBiaW5kaW5nIHRvIGEgY2xhc3MsICJBLngiIGlzIHRyYW5zZm9ybWVkIGludG8gdGhlIGNhbGw6XG4gICAiQS5fX2RpY3RfX1tcJ3hcJ10uX19nZXRfXyhOb25lLCBBKSIuXG5cblN1cGVyIEJpbmRpbmdcbiAgIElmICJhIiBpcyBhbiBpbnN0YW5jZSBvZiAic3VwZXIiLCB0aGVuIHRoZSBiaW5kaW5nICJzdXBlcihCLFxuICAgb2JqKS5tKCkiIHNlYXJjaGVzICJvYmouX19jbGFzc19fLl9fbXJvX18iIGZvciB0aGUgYmFzZSBjbGFzcyAiQSJcbiAgIGltbWVkaWF0ZWx5IHByZWNlZGluZyAiQiIgYW5kIHRoZW4gaW52b2tlcyB0aGUgZGVzY3JpcHRvciB3aXRoIHRoZVxuICAgY2FsbDogIkEuX19kaWN0X19bXCdtXCddLl9fZ2V0X18ob2JqLCBvYmouX19jbGFzc19fKSIuXG5cbkZvciBpbnN0YW5jZSBiaW5kaW5ncywgdGhlIHByZWNlZGVuY2Ugb2YgZGVzY3JpcHRvciBpbnZvY2F0aW9uIGRlcGVuZHNcbm9uIHRoZSB3aGljaCBkZXNjcmlwdG9yIG1ldGhvZHMgYXJlIGRlZmluZWQuICBBIGRlc2NyaXB0b3IgY2FuIGRlZmluZVxuYW55IGNvbWJpbmF0aW9uIG9mICJfX2dldF9fKCkiLCAiX19zZXRfXygpIiBhbmQgIl9fZGVsZXRlX18oKSIuICBJZiBpdFxuZG9lcyBub3QgZGVmaW5lICJfX2dldF9fKCkiLCB0aGVuIGFjY2Vzc2luZyB0aGUgYXR0cmlidXRlIHdpbGwgcmV0dXJuXG50aGUgZGVzY3JpcHRvciBvYmplY3QgaXRzZWxmIHVubGVzcyB0aGVyZSBpcyBhIHZhbHVlIGluIHRoZSBvYmplY3RcJ3Ncbmluc3RhbmNlIGRpY3Rpb25hcnkuICBJZiB0aGUgZGVzY3JpcHRvciBkZWZpbmVzICJfX3NldF9fKCkiIGFuZC9vclxuIl9fZGVsZXRlX18oKSIsIGl0IGlzIGEgZGF0YSBkZXNjcmlwdG9yOyBpZiBpdCBkZWZpbmVzIG5laXRoZXIsIGl0IGlzXG5hIG5vbi1kYXRhIGRlc2NyaXB0b3IuICBOb3JtYWxseSwgZGF0YSBkZXNjcmlwdG9ycyBkZWZpbmUgYm90aFxuIl9fZ2V0X18oKSIgYW5kICJfX3NldF9fKCkiLCB3aGlsZSBub24tZGF0YSBkZXNjcmlwdG9ycyBoYXZlIGp1c3QgdGhlXG4iX19nZXRfXygpIiBtZXRob2QuICBEYXRhIGRlc2NyaXB0b3JzIHdpdGggIl9fc2V0X18oKSIgYW5kICJfX2dldF9fKCkiXG5kZWZpbmVkIGFsd2F5cyBvdmVycmlkZSBhIHJlZGVmaW5pdGlvbiBpbiBhbiBpbnN0YW5jZSBkaWN0aW9uYXJ5LiAgSW5cbmNvbnRyYXN0LCBub24tZGF0YSBkZXNjcmlwdG9ycyBjYW4gYmUgb3ZlcnJpZGRlbiBieSBpbnN0YW5jZXMuXG5cblB5dGhvbiBtZXRob2RzIChpbmNsdWRpbmcgInN0YXRpY21ldGhvZCgpIiBhbmQgImNsYXNzbWV0aG9kKCkiKSBhcmVcbmltcGxlbWVudGVkIGFzIG5vbi1kYXRhIGRlc2NyaXB0b3JzLiAgQWNjb3JkaW5nbHksIGluc3RhbmNlcyBjYW5cbnJlZGVmaW5lIGFuZCBvdmVycmlkZSBtZXRob2RzLiAgVGhpcyBhbGxvd3MgaW5kaXZpZHVhbCBpbnN0YW5jZXMgdG9cbmFjcXVpcmUgYmVoYXZpb3JzIHRoYXQgZGlmZmVyIGZyb20gb3RoZXIgaW5zdGFuY2VzIG9mIHRoZSBzYW1lIGNsYXNzLlxuXG5UaGUgInByb3BlcnR5KCkiIGZ1bmN0aW9uIGlzIGltcGxlbWVudGVkIGFzIGEgZGF0YSBkZXNjcmlwdG9yLlxuQWNjb3JkaW5nbHksIGluc3RhbmNlcyBjYW5ub3Qgb3ZlcnJpZGUgdGhlIGJlaGF2aW9yIG9mIGEgcHJvcGVydHkuXG5cblxuX19zbG90c19fXG4tLS0tLS0tLS1cblxuQnkgZGVmYXVsdCwgaW5zdGFuY2VzIG9mIGNsYXNzZXMgaGF2ZSBhIGRpY3Rpb25hcnkgZm9yIGF0dHJpYnV0ZVxuc3RvcmFnZS4gIFRoaXMgd2FzdGVzIHNwYWNlIGZvciBvYmplY3RzIGhhdmluZyB2ZXJ5IGZldyBpbnN0YW5jZVxudmFyaWFibGVzLiAgVGhlIHNwYWNlIGNvbnN1bXB0aW9uIGNhbiBiZWNvbWUgYWN1dGUgd2hlbiBjcmVhdGluZyBsYXJnZVxubnVtYmVycyBvZiBpbnN0YW5jZXMuXG5cblRoZSBkZWZhdWx0IGNhbiBiZSBvdmVycmlkZGVuIGJ5IGRlZmluaW5nICpfX3Nsb3RzX18qIGluIGEgY2xhc3NcbmRlZmluaXRpb24uIFRoZSAqX19zbG90c19fKiBkZWNsYXJhdGlvbiB0YWtlcyBhIHNlcXVlbmNlIG9mIGluc3RhbmNlXG52YXJpYWJsZXMgYW5kIHJlc2VydmVzIGp1c3QgZW5vdWdoIHNwYWNlIGluIGVhY2ggaW5zdGFuY2UgdG8gaG9sZCBhXG52YWx1ZSBmb3IgZWFjaCB2YXJpYWJsZS4gIFNwYWNlIGlzIHNhdmVkIGJlY2F1c2UgKl9fZGljdF9fKiBpcyBub3RcbmNyZWF0ZWQgZm9yIGVhY2ggaW5zdGFuY2UuXG5cbm9iamVjdC5fX3Nsb3RzX19cblxuICAgVGhpcyBjbGFzcyB2YXJpYWJsZSBjYW4gYmUgYXNzaWduZWQgYSBzdHJpbmcsIGl0ZXJhYmxlLCBvciBzZXF1ZW5jZVxuICAgb2Ygc3RyaW5ncyB3aXRoIHZhcmlhYmxlIG5hbWVzIHVzZWQgYnkgaW5zdGFuY2VzLiAgKl9fc2xvdHNfXypcbiAgIHJlc2VydmVzIHNwYWNlIGZvciB0aGUgZGVjbGFyZWQgdmFyaWFibGVzIGFuZCBwcmV2ZW50cyB0aGVcbiAgIGF1dG9tYXRpYyBjcmVhdGlvbiBvZiAqX19kaWN0X18qIGFuZCAqX193ZWFrcmVmX18qIGZvciBlYWNoXG4gICBpbnN0YW5jZS5cblxuXG5Ob3RlcyBvbiB1c2luZyAqX19zbG90c19fKlxufn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5cblxuKiBXaGVuIGluaGVyaXRpbmcgZnJvbSBhIGNsYXNzIHdpdGhvdXQgKl9fc2xvdHNfXyosIHRoZSAqX19kaWN0X18qXG4gIGF0dHJpYnV0ZSBvZiB0aGF0IGNsYXNzIHdpbGwgYWx3YXlzIGJlIGFjY2Vzc2libGUsIHNvIGEgKl9fc2xvdHNfXypcbiAgZGVmaW5pdGlvbiBpbiB0aGUgc3ViY2xhc3MgaXMgbWVhbmluZ2xlc3MuXG5cbiogV2l0aG91dCBhICpfX2RpY3RfXyogdmFyaWFibGUsIGluc3RhbmNlcyBjYW5ub3QgYmUgYXNzaWduZWQgbmV3XG4gIHZhcmlhYmxlcyBub3QgbGlzdGVkIGluIHRoZSAqX19zbG90c19fKiBkZWZpbml0aW9uLiAgQXR0ZW1wdHMgdG9cbiAgYXNzaWduIHRvIGFuIHVubGlzdGVkIHZhcmlhYmxlIG5hbWUgcmFpc2VzICJBdHRyaWJ1dGVFcnJvciIuIElmXG4gIGR5bmFtaWMgYXNzaWdubWVudCBvZiBuZXcgdmFyaWFibGVzIGlzIGRlc2lyZWQsIHRoZW4gYWRkXG4gICJcJ19fZGljdF9fXCciIHRvIHRoZSBzZXF1ZW5jZSBvZiBzdHJpbmdzIGluIHRoZSAqX19zbG90c19fKlxuICBkZWNsYXJhdGlvbi5cblxuKiBXaXRob3V0IGEgKl9fd2Vha3JlZl9fKiB2YXJpYWJsZSBmb3IgZWFjaCBpbnN0YW5jZSwgY2xhc3Nlc1xuICBkZWZpbmluZyAqX19zbG90c19fKiBkbyBub3Qgc3VwcG9ydCB3ZWFrIHJlZmVyZW5jZXMgdG8gaXRzXG4gIGluc3RhbmNlcy4gSWYgd2VhayByZWZlcmVuY2Ugc3VwcG9ydCBpcyBuZWVkZWQsIHRoZW4gYWRkXG4gICJcJ19fd2Vha3JlZl9fXCciIHRvIHRoZSBzZXF1ZW5jZSBvZiBzdHJpbmdzIGluIHRoZSAqX19zbG90c19fKlxuICBkZWNsYXJhdGlvbi5cblxuKiAqX19zbG90c19fKiBhcmUgaW1wbGVtZW50ZWQgYXQgdGhlIGNsYXNzIGxldmVsIGJ5IGNyZWF0aW5nXG4gIGRlc2NyaXB0b3JzICgqSW1wbGVtZW50aW5nIERlc2NyaXB0b3JzKikgZm9yIGVhY2ggdmFyaWFibGUgbmFtZS4gIEFzXG4gIGEgcmVzdWx0LCBjbGFzcyBhdHRyaWJ1dGVzIGNhbm5vdCBiZSB1c2VkIHRvIHNldCBkZWZhdWx0IHZhbHVlcyBmb3JcbiAgaW5zdGFuY2UgdmFyaWFibGVzIGRlZmluZWQgYnkgKl9fc2xvdHNfXyo7IG90aGVyd2lzZSwgdGhlIGNsYXNzXG4gIGF0dHJpYnV0ZSB3b3VsZCBvdmVyd3JpdGUgdGhlIGRlc2NyaXB0b3IgYXNzaWdubWVudC5cblxuKiBUaGUgYWN0aW9uIG9mIGEgKl9fc2xvdHNfXyogZGVjbGFyYXRpb24gaXMgbGltaXRlZCB0byB0aGUgY2xhc3NcbiAgd2hlcmUgaXQgaXMgZGVmaW5lZC4gIEFzIGEgcmVzdWx0LCBzdWJjbGFzc2VzIHdpbGwgaGF2ZSBhICpfX2RpY3RfXypcbiAgdW5sZXNzIHRoZXkgYWxzbyBkZWZpbmUgKl9fc2xvdHNfXyogKHdoaWNoIG11c3Qgb25seSBjb250YWluIG5hbWVzXG4gIG9mIGFueSAqYWRkaXRpb25hbCogc2xvdHMpLlxuXG4qIElmIGEgY2xhc3MgZGVmaW5lcyBhIHNsb3QgYWxzbyBkZWZpbmVkIGluIGEgYmFzZSBjbGFzcywgdGhlXG4gIGluc3RhbmNlIHZhcmlhYmxlIGRlZmluZWQgYnkgdGhlIGJhc2UgY2xhc3Mgc2xvdCBpcyBpbmFjY2Vzc2libGVcbiAgKGV4Y2VwdCBieSByZXRyaWV2aW5nIGl0cyBkZXNjcmlwdG9yIGRpcmVjdGx5IGZyb20gdGhlIGJhc2UgY2xhc3MpLlxuICBUaGlzIHJlbmRlcnMgdGhlIG1lYW5pbmcgb2YgdGhlIHByb2dyYW0gdW5kZWZpbmVkLiAgSW4gdGhlIGZ1dHVyZSwgYVxuICBjaGVjayBtYXkgYmUgYWRkZWQgdG8gcHJldmVudCB0aGlzLlxuXG4qIE5vbmVtcHR5ICpfX3Nsb3RzX18qIGRvZXMgbm90IHdvcmsgZm9yIGNsYXNzZXMgZGVyaXZlZCBmcm9tXG4gICJ2YXJpYWJsZS1sZW5ndGgiIGJ1aWx0LWluIHR5cGVzIHN1Y2ggYXMgImludCIsICJieXRlcyIgYW5kICJ0dXBsZSIuXG5cbiogQW55IG5vbi1zdHJpbmcgaXRlcmFibGUgbWF5IGJlIGFzc2lnbmVkIHRvICpfX3Nsb3RzX18qLiBNYXBwaW5nc1xuICBtYXkgYWxzbyBiZSB1c2VkOyBob3dldmVyLCBpbiB0aGUgZnV0dXJlLCBzcGVjaWFsIG1lYW5pbmcgbWF5IGJlXG4gIGFzc2lnbmVkIHRvIHRoZSB2YWx1ZXMgY29ycmVzcG9uZGluZyB0byBlYWNoIGtleS5cblxuKiAqX19jbGFzc19fKiBhc3NpZ25tZW50IHdvcmtzIG9ubHkgaWYgYm90aCBjbGFzc2VzIGhhdmUgdGhlIHNhbWVcbiAgKl9fc2xvdHNfXyouXG5cblxuQ3VzdG9taXppbmcgY2xhc3MgY3JlYXRpb25cbj09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbkJ5IGRlZmF1bHQsIGNsYXNzZXMgYXJlIGNvbnN0cnVjdGVkIHVzaW5nICJ0eXBlKCkiLiBUaGUgY2xhc3MgYm9keSBpc1xuZXhlY3V0ZWQgaW4gYSBuZXcgbmFtZXNwYWNlIGFuZCB0aGUgY2xhc3MgbmFtZSBpcyBib3VuZCBsb2NhbGx5IHRvIHRoZVxucmVzdWx0IG9mICJ0eXBlKG5hbWUsIGJhc2VzLCBuYW1lc3BhY2UpIi5cblxuVGhlIGNsYXNzIGNyZWF0aW9uIHByb2Nlc3MgY2FuIGJlIGN1c3RvbWlzZWQgYnkgcGFzc2luZyB0aGVcbiJtZXRhY2xhc3MiIGtleXdvcmQgYXJndW1lbnQgaW4gdGhlIGNsYXNzIGRlZmluaXRpb24gbGluZSwgb3IgYnlcbmluaGVyaXRpbmcgZnJvbSBhbiBleGlzdGluZyBjbGFzcyB0aGF0IGluY2x1ZGVkIHN1Y2ggYW4gYXJndW1lbnQuIEluXG50aGUgZm9sbG93aW5nIGV4YW1wbGUsIGJvdGggIk15Q2xhc3MiIGFuZCAiTXlTdWJjbGFzcyIgYXJlIGluc3RhbmNlc1xub2YgIk1ldGEiOlxuXG4gICBjbGFzcyBNZXRhKHR5cGUpOlxuICAgICAgIHBhc3NcblxuICAgY2xhc3MgTXlDbGFzcyhtZXRhY2xhc3M9TWV0YSk6XG4gICAgICAgcGFzc1xuXG4gICBjbGFzcyBNeVN1YmNsYXNzKE15Q2xhc3MpOlxuICAgICAgIHBhc3NcblxuQW55IG90aGVyIGtleXdvcmQgYXJndW1lbnRzIHRoYXQgYXJlIHNwZWNpZmllZCBpbiB0aGUgY2xhc3MgZGVmaW5pdGlvblxuYXJlIHBhc3NlZCB0aHJvdWdoIHRvIGFsbCBtZXRhY2xhc3Mgb3BlcmF0aW9ucyBkZXNjcmliZWQgYmVsb3cuXG5cbldoZW4gYSBjbGFzcyBkZWZpbml0aW9uIGlzIGV4ZWN1dGVkLCB0aGUgZm9sbG93aW5nIHN0ZXBzIG9jY3VyOlxuXG4qIHRoZSBhcHByb3ByaWF0ZSBtZXRhY2xhc3MgaXMgZGV0ZXJtaW5lZFxuXG4qIHRoZSBjbGFzcyBuYW1lc3BhY2UgaXMgcHJlcGFyZWRcblxuKiB0aGUgY2xhc3MgYm9keSBpcyBleGVjdXRlZFxuXG4qIHRoZSBjbGFzcyBvYmplY3QgaXMgY3JlYXRlZFxuXG5cbkRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZSBtZXRhY2xhc3Ncbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuVGhlIGFwcHJvcHJpYXRlIG1ldGFjbGFzcyBmb3IgYSBjbGFzcyBkZWZpbml0aW9uIGlzIGRldGVybWluZWQgYXNcbmZvbGxvd3M6XG5cbiogaWYgbm8gYmFzZXMgYW5kIG5vIGV4cGxpY2l0IG1ldGFjbGFzcyBhcmUgZ2l2ZW4sIHRoZW4gInR5cGUoKSIgaXNcbiAgdXNlZFxuXG4qIGlmIGFuIGV4cGxpY2l0IG1ldGFjbGFzcyBpcyBnaXZlbiBhbmQgaXQgaXMgKm5vdCogYW4gaW5zdGFuY2Ugb2ZcbiAgInR5cGUoKSIsIHRoZW4gaXQgaXMgdXNlZCBkaXJlY3RseSBhcyB0aGUgbWV0YWNsYXNzXG5cbiogaWYgYW4gaW5zdGFuY2Ugb2YgInR5cGUoKSIgaXMgZ2l2ZW4gYXMgdGhlIGV4cGxpY2l0IG1ldGFjbGFzcywgb3JcbiAgYmFzZXMgYXJlIGRlZmluZWQsIHRoZW4gdGhlIG1vc3QgZGVyaXZlZCBtZXRhY2xhc3MgaXMgdXNlZFxuXG5UaGUgbW9zdCBkZXJpdmVkIG1ldGFjbGFzcyBpcyBzZWxlY3RlZCBmcm9tIHRoZSBleHBsaWNpdGx5IHNwZWNpZmllZFxubWV0YWNsYXNzIChpZiBhbnkpIGFuZCB0aGUgbWV0YWNsYXNzZXMgKGkuZS4gInR5cGUoY2xzKSIpIG9mIGFsbFxuc3BlY2lmaWVkIGJhc2UgY2xhc3Nlcy4gVGhlIG1vc3QgZGVyaXZlZCBtZXRhY2xhc3MgaXMgb25lIHdoaWNoIGlzIGFcbnN1YnR5cGUgb2YgKmFsbCogb2YgdGhlc2UgY2FuZGlkYXRlIG1ldGFjbGFzc2VzLiBJZiBub25lIG9mIHRoZVxuY2FuZGlkYXRlIG1ldGFjbGFzc2VzIG1lZXRzIHRoYXQgY3JpdGVyaW9uLCB0aGVuIHRoZSBjbGFzcyBkZWZpbml0aW9uXG53aWxsIGZhaWwgd2l0aCAiVHlwZUVycm9yIi5cblxuXG5QcmVwYXJpbmcgdGhlIGNsYXNzIG5hbWVzcGFjZVxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuT25jZSB0aGUgYXBwcm9wcmlhdGUgbWV0YWNsYXNzIGhhcyBiZWVuIGlkZW50aWZpZWQsIHRoZW4gdGhlIGNsYXNzXG5uYW1lc3BhY2UgaXMgcHJlcGFyZWQuIElmIHRoZSBtZXRhY2xhc3MgaGFzIGEgIl9fcHJlcGFyZV9fIiBhdHRyaWJ1dGUsXG5pdCBpcyBjYWxsZWQgYXMgIm5hbWVzcGFjZSA9IG1ldGFjbGFzcy5fX3ByZXBhcmVfXyhuYW1lLCBiYXNlcyxcbioqa3dkcykiICh3aGVyZSB0aGUgYWRkaXRpb25hbCBrZXl3b3JkIGFyZ3VtZW50cywgaWYgYW55LCBjb21lIGZyb21cbnRoZSBjbGFzcyBkZWZpbml0aW9uKS5cblxuSWYgdGhlIG1ldGFjbGFzcyBoYXMgbm8gIl9fcHJlcGFyZV9fIiBhdHRyaWJ1dGUsIHRoZW4gdGhlIGNsYXNzXG5uYW1lc3BhY2UgaXMgaW5pdGlhbGlzZWQgYXMgYW4gZW1wdHkgImRpY3QoKSIgaW5zdGFuY2UuXG5cblNlZSBhbHNvOiAqKlBFUCAzMTE1KiogLSBNZXRhY2xhc3NlcyBpbiBQeXRob24gMzAwMFxuXG4gICAgIEludHJvZHVjZWQgdGhlICJfX3ByZXBhcmVfXyIgbmFtZXNwYWNlIGhvb2tcblxuXG5FeGVjdXRpbmcgdGhlIGNsYXNzIGJvZHlcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5UaGUgY2xhc3MgYm9keSBpcyBleGVjdXRlZCAoYXBwcm94aW1hdGVseSkgYXMgImV4ZWMoYm9keSwgZ2xvYmFscygpLFxubmFtZXNwYWNlKSIuIFRoZSBrZXkgZGlmZmVyZW5jZSBmcm9tIGEgbm9ybWFsIGNhbGwgdG8gImV4ZWMoKSIgaXMgdGhhdFxubGV4aWNhbCBzY29waW5nIGFsbG93cyB0aGUgY2xhc3MgYm9keSAoaW5jbHVkaW5nIGFueSBtZXRob2RzKSB0b1xucmVmZXJlbmNlIG5hbWVzIGZyb20gdGhlIGN1cnJlbnQgYW5kIG91dGVyIHNjb3BlcyB3aGVuIHRoZSBjbGFzc1xuZGVmaW5pdGlvbiBvY2N1cnMgaW5zaWRlIGEgZnVuY3Rpb24uXG5cbkhvd2V2ZXIsIGV2ZW4gd2hlbiB0aGUgY2xhc3MgZGVmaW5pdGlvbiBvY2N1cnMgaW5zaWRlIHRoZSBmdW5jdGlvbixcbm1ldGhvZHMgZGVmaW5lZCBpbnNpZGUgdGhlIGNsYXNzIHN0aWxsIGNhbm5vdCBzZWUgbmFtZXMgZGVmaW5lZCBhdCB0aGVcbmNsYXNzIHNjb3BlLiBDbGFzcyB2YXJpYWJsZXMgbXVzdCBiZSBhY2Nlc3NlZCB0aHJvdWdoIHRoZSBmaXJzdFxucGFyYW1ldGVyIG9mIGluc3RhbmNlIG9yIGNsYXNzIG1ldGhvZHMsIGFuZCBjYW5ub3QgYmUgYWNjZXNzZWQgYXQgYWxsXG5mcm9tIHN0YXRpYyBtZXRob2RzLlxuXG5cbkNyZWF0aW5nIHRoZSBjbGFzcyBvYmplY3Rcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuT25jZSB0aGUgY2xhc3MgbmFtZXNwYWNlIGhhcyBiZWVuIHBvcHVsYXRlZCBieSBleGVjdXRpbmcgdGhlIGNsYXNzXG5ib2R5LCB0aGUgY2xhc3Mgb2JqZWN0IGlzIGNyZWF0ZWQgYnkgY2FsbGluZyAibWV0YWNsYXNzKG5hbWUsIGJhc2VzLFxubmFtZXNwYWNlLCAqKmt3ZHMpIiAodGhlIGFkZGl0aW9uYWwga2V5d29yZHMgcGFzc2VkIGhlcmUgYXJlIHRoZSBzYW1lXG5hcyB0aG9zZSBwYXNzZWQgdG8gIl9fcHJlcGFyZV9fIikuXG5cblRoaXMgY2xhc3Mgb2JqZWN0IGlzIHRoZSBvbmUgdGhhdCB3aWxsIGJlIHJlZmVyZW5jZWQgYnkgdGhlIHplcm8tXG5hcmd1bWVudCBmb3JtIG9mICJzdXBlcigpIi4gIl9fY2xhc3NfXyIgaXMgYW4gaW1wbGljaXQgY2xvc3VyZVxucmVmZXJlbmNlIGNyZWF0ZWQgYnkgdGhlIGNvbXBpbGVyIGlmIGFueSBtZXRob2RzIGluIGEgY2xhc3MgYm9keSByZWZlclxudG8gZWl0aGVyICJfX2NsYXNzX18iIG9yICJzdXBlciIuIFRoaXMgYWxsb3dzIHRoZSB6ZXJvIGFyZ3VtZW50IGZvcm1cbm9mICJzdXBlcigpIiB0byBjb3JyZWN0bHkgaWRlbnRpZnkgdGhlIGNsYXNzIGJlaW5nIGRlZmluZWQgYmFzZWQgb25cbmxleGljYWwgc2NvcGluZywgd2hpbGUgdGhlIGNsYXNzIG9yIGluc3RhbmNlIHRoYXQgd2FzIHVzZWQgdG8gbWFrZSB0aGVcbmN1cnJlbnQgY2FsbCBpcyBpZGVudGlmaWVkIGJhc2VkIG9uIHRoZSBmaXJzdCBhcmd1bWVudCBwYXNzZWQgdG8gdGhlXG5tZXRob2QuXG5cbkFmdGVyIHRoZSBjbGFzcyBvYmplY3QgaXMgY3JlYXRlZCwgaXQgaXMgcGFzc2VkIHRvIHRoZSBjbGFzc1xuZGVjb3JhdG9ycyBpbmNsdWRlZCBpbiB0aGUgY2xhc3MgZGVmaW5pdGlvbiAoaWYgYW55KSBhbmQgdGhlIHJlc3VsdGluZ1xub2JqZWN0IGlzIGJvdW5kIGluIHRoZSBsb2NhbCBuYW1lc3BhY2UgYXMgdGhlIGRlZmluZWQgY2xhc3MuXG5cblNlZSBhbHNvOiAqKlBFUCAzMTM1KiogLSBOZXcgc3VwZXJcblxuICAgICBEZXNjcmliZXMgdGhlIGltcGxpY2l0ICJfX2NsYXNzX18iIGNsb3N1cmUgcmVmZXJlbmNlXG5cblxuTWV0YWNsYXNzIGV4YW1wbGVcbi0tLS0tLS0tLS0tLS0tLS0tXG5cblRoZSBwb3RlbnRpYWwgdXNlcyBmb3IgbWV0YWNsYXNzZXMgYXJlIGJvdW5kbGVzcy4gU29tZSBpZGVhcyB0aGF0IGhhdmVcbmJlZW4gZXhwbG9yZWQgaW5jbHVkZSBsb2dnaW5nLCBpbnRlcmZhY2UgY2hlY2tpbmcsIGF1dG9tYXRpY1xuZGVsZWdhdGlvbiwgYXV0b21hdGljIHByb3BlcnR5IGNyZWF0aW9uLCBwcm94aWVzLCBmcmFtZXdvcmtzLCBhbmRcbmF1dG9tYXRpYyByZXNvdXJjZSBsb2NraW5nL3N5bmNocm9uaXphdGlvbi5cblxuSGVyZSBpcyBhbiBleGFtcGxlIG9mIGEgbWV0YWNsYXNzIHRoYXQgdXNlcyBhblxuImNvbGxlY3Rpb25zLk9yZGVyZWREaWN0IiB0byByZW1lbWJlciB0aGUgb3JkZXIgdGhhdCBjbGFzcyB2YXJpYWJsZXNcbmFyZSBkZWZpbmVkOlxuXG4gICBjbGFzcyBPcmRlcmVkQ2xhc3ModHlwZSk6XG5cbiAgICAgICAgQGNsYXNzbWV0aG9kXG4gICAgICAgIGRlZiBfX3ByZXBhcmVfXyhtZXRhY2xzLCBuYW1lLCBiYXNlcywgKiprd2RzKTpcbiAgICAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25zLk9yZGVyZWREaWN0KClcblxuICAgICAgICBkZWYgX19uZXdfXyhjbHMsIG5hbWUsIGJhc2VzLCBuYW1lc3BhY2UsICoqa3dkcyk6XG4gICAgICAgICAgIHJlc3VsdCA9IHR5cGUuX19uZXdfXyhjbHMsIG5hbWUsIGJhc2VzLCBkaWN0KG5hbWVzcGFjZSkpXG4gICAgICAgICAgIHJlc3VsdC5tZW1iZXJzID0gdHVwbGUobmFtZXNwYWNlKVxuICAgICAgICAgICByZXR1cm4gcmVzdWx0XG5cbiAgIGNsYXNzIEEobWV0YWNsYXNzPU9yZGVyZWRDbGFzcyk6XG4gICAgICAgZGVmIG9uZShzZWxmKTogcGFzc1xuICAgICAgIGRlZiB0d28oc2VsZik6IHBhc3NcbiAgICAgICBkZWYgdGhyZWUoc2VsZik6IHBhc3NcbiAgICAgICBkZWYgZm91cihzZWxmKTogcGFzc1xuXG4gICA+Pj4gQS5tZW1iZXJzXG4gICAoXCdfX21vZHVsZV9fXCcsIFwnb25lXCcsIFwndHdvXCcsIFwndGhyZWVcJywgXCdmb3VyXCcpXG5cbldoZW4gdGhlIGNsYXNzIGRlZmluaXRpb24gZm9yICpBKiBnZXRzIGV4ZWN1dGVkLCB0aGUgcHJvY2VzcyBiZWdpbnNcbndpdGggY2FsbGluZyB0aGUgbWV0YWNsYXNzXCdzICJfX3ByZXBhcmVfXygpIiBtZXRob2Qgd2hpY2ggcmV0dXJucyBhblxuZW1wdHkgImNvbGxlY3Rpb25zLk9yZGVyZWREaWN0Ii4gIFRoYXQgbWFwcGluZyByZWNvcmRzIHRoZSBtZXRob2RzIGFuZFxuYXR0cmlidXRlcyBvZiAqQSogYXMgdGhleSBhcmUgZGVmaW5lZCB3aXRoaW4gdGhlIGJvZHkgb2YgdGhlIGNsYXNzXG5zdGF0ZW1lbnQuIE9uY2UgdGhvc2UgZGVmaW5pdGlvbnMgYXJlIGV4ZWN1dGVkLCB0aGUgb3JkZXJlZCBkaWN0aW9uYXJ5XG5pcyBmdWxseSBwb3B1bGF0ZWQgYW5kIHRoZSBtZXRhY2xhc3NcJ3MgIl9fbmV3X18oKSIgbWV0aG9kIGdldHNcbmludm9rZWQuICBUaGF0IG1ldGhvZCBidWlsZHMgdGhlIG5ldyB0eXBlIGFuZCBpdCBzYXZlcyB0aGUgb3JkZXJlZFxuZGljdGlvbmFyeSBrZXlzIGluIGFuIGF0dHJpYnV0ZSBjYWxsZWQgIm1lbWJlcnMiLlxuXG5cbkN1c3RvbWl6aW5nIGluc3RhbmNlIGFuZCBzdWJjbGFzcyBjaGVja3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuVGhlIGZvbGxvd2luZyBtZXRob2RzIGFyZSB1c2VkIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGJlaGF2aW9yIG9mIHRoZVxuImlzaW5zdGFuY2UoKSIgYW5kICJpc3N1YmNsYXNzKCkiIGJ1aWx0LWluIGZ1bmN0aW9ucy5cblxuSW4gcGFydGljdWxhciwgdGhlIG1ldGFjbGFzcyAiYWJjLkFCQ01ldGEiIGltcGxlbWVudHMgdGhlc2UgbWV0aG9kcyBpblxub3JkZXIgdG8gYWxsb3cgdGhlIGFkZGl0aW9uIG9mIEFic3RyYWN0IEJhc2UgQ2xhc3NlcyAoQUJDcykgYXNcbiJ2aXJ0dWFsIGJhc2UgY2xhc3NlcyIgdG8gYW55IGNsYXNzIG9yIHR5cGUgKGluY2x1ZGluZyBidWlsdC1pblxudHlwZXMpLCBpbmNsdWRpbmcgb3RoZXIgQUJDcy5cblxuY2xhc3MuX19pbnN0YW5jZWNoZWNrX18oc2VsZiwgaW5zdGFuY2UpXG5cbiAgIFJldHVybiB0cnVlIGlmICppbnN0YW5jZSogc2hvdWxkIGJlIGNvbnNpZGVyZWQgYSAoZGlyZWN0IG9yXG4gICBpbmRpcmVjdCkgaW5zdGFuY2Ugb2YgKmNsYXNzKi4gSWYgZGVmaW5lZCwgY2FsbGVkIHRvIGltcGxlbWVudFxuICAgImlzaW5zdGFuY2UoaW5zdGFuY2UsIGNsYXNzKSIuXG5cbmNsYXNzLl9fc3ViY2xhc3NjaGVja19fKHNlbGYsIHN1YmNsYXNzKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiAqc3ViY2xhc3MqIHNob3VsZCBiZSBjb25zaWRlcmVkIGEgKGRpcmVjdCBvclxuICAgaW5kaXJlY3QpIHN1YmNsYXNzIG9mICpjbGFzcyouICBJZiBkZWZpbmVkLCBjYWxsZWQgdG8gaW1wbGVtZW50XG4gICAiaXNzdWJjbGFzcyhzdWJjbGFzcywgY2xhc3MpIi5cblxuTm90ZSB0aGF0IHRoZXNlIG1ldGhvZHMgYXJlIGxvb2tlZCB1cCBvbiB0aGUgdHlwZSAobWV0YWNsYXNzKSBvZiBhXG5jbGFzcy4gIFRoZXkgY2Fubm90IGJlIGRlZmluZWQgYXMgY2xhc3MgbWV0aG9kcyBpbiB0aGUgYWN0dWFsIGNsYXNzLlxuVGhpcyBpcyBjb25zaXN0ZW50IHdpdGggdGhlIGxvb2t1cCBvZiBzcGVjaWFsIG1ldGhvZHMgdGhhdCBhcmUgY2FsbGVkXG5vbiBpbnN0YW5jZXMsIG9ubHkgaW4gdGhpcyBjYXNlIHRoZSBpbnN0YW5jZSBpcyBpdHNlbGYgYSBjbGFzcy5cblxuU2VlIGFsc286ICoqUEVQIDMxMTkqKiAtIEludHJvZHVjaW5nIEFic3RyYWN0IEJhc2UgQ2xhc3Nlc1xuXG4gICAgIEluY2x1ZGVzIHRoZSBzcGVjaWZpY2F0aW9uIGZvciBjdXN0b21pemluZyAiaXNpbnN0YW5jZSgpIiBhbmRcbiAgICAgImlzc3ViY2xhc3MoKSIgYmVoYXZpb3IgdGhyb3VnaCAiX19pbnN0YW5jZWNoZWNrX18oKSIgYW5kXG4gICAgICJfX3N1YmNsYXNzY2hlY2tfXygpIiwgd2l0aCBtb3RpdmF0aW9uIGZvciB0aGlzIGZ1bmN0aW9uYWxpdHkgaW5cbiAgICAgdGhlIGNvbnRleHQgb2YgYWRkaW5nIEFic3RyYWN0IEJhc2UgQ2xhc3NlcyAoc2VlIHRoZSAiYWJjIlxuICAgICBtb2R1bGUpIHRvIHRoZSBsYW5ndWFnZS5cblxuXG5FbXVsYXRpbmcgY2FsbGFibGUgb2JqZWN0c1xuPT09PT09PT09PT09PT09PT09PT09PT09PT1cblxub2JqZWN0Ll9fY2FsbF9fKHNlbGZbLCBhcmdzLi4uXSlcblxuICAgQ2FsbGVkIHdoZW4gdGhlIGluc3RhbmNlIGlzICJjYWxsZWQiIGFzIGEgZnVuY3Rpb247IGlmIHRoaXMgbWV0aG9kXG4gICBpcyBkZWZpbmVkLCAieChhcmcxLCBhcmcyLCAuLi4pIiBpcyBhIHNob3J0aGFuZCBmb3JcbiAgICJ4Ll9fY2FsbF9fKGFyZzEsIGFyZzIsIC4uLikiLlxuXG5cbkVtdWxhdGluZyBjb250YWluZXIgdHlwZXNcbj09PT09PT09PT09PT09PT09PT09PT09PT1cblxuVGhlIGZvbGxvd2luZyBtZXRob2RzIGNhbiBiZSBkZWZpbmVkIHRvIGltcGxlbWVudCBjb250YWluZXIgb2JqZWN0cy5cbkNvbnRhaW5lcnMgdXN1YWxseSBhcmUgc2VxdWVuY2VzIChzdWNoIGFzIGxpc3RzIG9yIHR1cGxlcykgb3IgbWFwcGluZ3NcbihsaWtlIGRpY3Rpb25hcmllcyksIGJ1dCBjYW4gcmVwcmVzZW50IG90aGVyIGNvbnRhaW5lcnMgYXMgd2VsbC4gIFRoZVxuZmlyc3Qgc2V0IG9mIG1ldGhvZHMgaXMgdXNlZCBlaXRoZXIgdG8gZW11bGF0ZSBhIHNlcXVlbmNlIG9yIHRvXG5lbXVsYXRlIGEgbWFwcGluZzsgdGhlIGRpZmZlcmVuY2UgaXMgdGhhdCBmb3IgYSBzZXF1ZW5jZSwgdGhlXG5hbGxvd2FibGUga2V5cyBzaG91bGQgYmUgdGhlIGludGVnZXJzICprKiBmb3Igd2hpY2ggIjAgPD0gayA8IE4iIHdoZXJlXG4qTiogaXMgdGhlIGxlbmd0aCBvZiB0aGUgc2VxdWVuY2UsIG9yIHNsaWNlIG9iamVjdHMsIHdoaWNoIGRlZmluZSBhXG5yYW5nZSBvZiBpdGVtcy4gIEl0IGlzIGFsc28gcmVjb21tZW5kZWQgdGhhdCBtYXBwaW5ncyBwcm92aWRlIHRoZVxubWV0aG9kcyAia2V5cygpIiwgInZhbHVlcygpIiwgIml0ZW1zKCkiLCAiZ2V0KCkiLCAiY2xlYXIoKSIsXG4ic2V0ZGVmYXVsdCgpIiwgInBvcCgpIiwgInBvcGl0ZW0oKSIsICJjb3B5KCkiLCBhbmQgInVwZGF0ZSgpIlxuYmVoYXZpbmcgc2ltaWxhciB0byB0aG9zZSBmb3IgUHl0aG9uXCdzIHN0YW5kYXJkIGRpY3Rpb25hcnkgb2JqZWN0cy5cblRoZSAiY29sbGVjdGlvbnMiIG1vZHVsZSBwcm92aWRlcyBhICJNdXRhYmxlTWFwcGluZyIgYWJzdHJhY3QgYmFzZVxuY2xhc3MgdG8gaGVscCBjcmVhdGUgdGhvc2UgbWV0aG9kcyBmcm9tIGEgYmFzZSBzZXQgb2YgIl9fZ2V0aXRlbV9fKCkiLFxuIl9fc2V0aXRlbV9fKCkiLCAiX19kZWxpdGVtX18oKSIsIGFuZCAia2V5cygpIi4gTXV0YWJsZSBzZXF1ZW5jZXNcbnNob3VsZCBwcm92aWRlIG1ldGhvZHMgImFwcGVuZCgpIiwgImNvdW50KCkiLCAiaW5kZXgoKSIsICJleHRlbmQoKSIsXG4iaW5zZXJ0KCkiLCAicG9wKCkiLCAicmVtb3ZlKCkiLCAicmV2ZXJzZSgpIiBhbmQgInNvcnQoKSIsIGxpa2UgUHl0aG9uXG5zdGFuZGFyZCBsaXN0IG9iamVjdHMuICBGaW5hbGx5LCBzZXF1ZW5jZSB0eXBlcyBzaG91bGQgaW1wbGVtZW50XG5hZGRpdGlvbiAobWVhbmluZyBjb25jYXRlbmF0aW9uKSBhbmQgbXVsdGlwbGljYXRpb24gKG1lYW5pbmdcbnJlcGV0aXRpb24pIGJ5IGRlZmluaW5nIHRoZSBtZXRob2RzICJfX2FkZF9fKCkiLCAiX19yYWRkX18oKSIsXG4iX19pYWRkX18oKSIsICJfX211bF9fKCkiLCAiX19ybXVsX18oKSIgYW5kICJfX2ltdWxfXygpIiBkZXNjcmliZWRcbmJlbG93OyB0aGV5IHNob3VsZCBub3QgZGVmaW5lIG90aGVyIG51bWVyaWNhbCBvcGVyYXRvcnMuICBJdCBpc1xucmVjb21tZW5kZWQgdGhhdCBib3RoIG1hcHBpbmdzIGFuZCBzZXF1ZW5jZXMgaW1wbGVtZW50IHRoZVxuIl9fY29udGFpbnNfXygpIiBtZXRob2QgdG8gYWxsb3cgZWZmaWNpZW50IHVzZSBvZiB0aGUgImluIiBvcGVyYXRvcjtcbmZvciBtYXBwaW5ncywgImluIiBzaG91bGQgc2VhcmNoIHRoZSBtYXBwaW5nXCdzIGtleXM7IGZvciBzZXF1ZW5jZXMsIGl0XG5zaG91bGQgc2VhcmNoIHRocm91Z2ggdGhlIHZhbHVlcy4gIEl0IGlzIGZ1cnRoZXIgcmVjb21tZW5kZWQgdGhhdCBib3RoXG5tYXBwaW5ncyBhbmQgc2VxdWVuY2VzIGltcGxlbWVudCB0aGUgIl9faXRlcl9fKCkiIG1ldGhvZCB0byBhbGxvd1xuZWZmaWNpZW50IGl0ZXJhdGlvbiB0aHJvdWdoIHRoZSBjb250YWluZXI7IGZvciBtYXBwaW5ncywgIl9faXRlcl9fKCkiXG5zaG91bGQgYmUgdGhlIHNhbWUgYXMgImtleXMoKSI7IGZvciBzZXF1ZW5jZXMsIGl0IHNob3VsZCBpdGVyYXRlXG50aHJvdWdoIHRoZSB2YWx1ZXMuXG5cbm9iamVjdC5fX2xlbl9fKHNlbGYpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgdGhlIGJ1aWx0LWluIGZ1bmN0aW9uICJsZW4oKSIuICBTaG91bGQgcmV0dXJuXG4gICB0aGUgbGVuZ3RoIG9mIHRoZSBvYmplY3QsIGFuIGludGVnZXIgIj49IiAwLiAgQWxzbywgYW4gb2JqZWN0IHRoYXRcbiAgIGRvZXNuXCd0IGRlZmluZSBhICJfX2Jvb2xfXygpIiBtZXRob2QgYW5kIHdob3NlICJfX2xlbl9fKCkiIG1ldGhvZFxuICAgcmV0dXJucyB6ZXJvIGlzIGNvbnNpZGVyZWQgdG8gYmUgZmFsc2UgaW4gYSBCb29sZWFuIGNvbnRleHQuXG5cbm9iamVjdC5fX2xlbmd0aF9oaW50X18oc2VsZilcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCAib3BlcmF0b3IubGVuZ3RoX2hpbnQoKSIuIFNob3VsZCByZXR1cm4gYW5cbiAgIGVzdGltYXRlZCBsZW5ndGggZm9yIHRoZSBvYmplY3QgKHdoaWNoIG1heSBiZSBncmVhdGVyIG9yIGxlc3MgdGhhblxuICAgdGhlIGFjdHVhbCBsZW5ndGgpLiBUaGUgbGVuZ3RoIG11c3QgYmUgYW4gaW50ZWdlciAiPj0iIDAuIFRoaXNcbiAgIG1ldGhvZCBpcyBwdXJlbHkgYW4gb3B0aW1pemF0aW9uIGFuZCBpcyBuZXZlciByZXF1aXJlZCBmb3JcbiAgIGNvcnJlY3RuZXNzLlxuXG4gICBOZXcgaW4gdmVyc2lvbiAzLjQuXG5cbk5vdGU6IFNsaWNpbmcgaXMgZG9uZSBleGNsdXNpdmVseSB3aXRoIHRoZSBmb2xsb3dpbmcgdGhyZWUgbWV0aG9kcy5cbiAgQSBjYWxsIGxpa2VcblxuICAgICBhWzE6Ml0gPSBiXG5cbiAgaXMgdHJhbnNsYXRlZCB0b1xuXG4gICAgIGFbc2xpY2UoMSwgMiwgTm9uZSldID0gYlxuXG4gIGFuZCBzbyBmb3J0aC4gIE1pc3Npbmcgc2xpY2UgaXRlbXMgYXJlIGFsd2F5cyBmaWxsZWQgaW4gd2l0aCAiTm9uZSIuXG5cbm9iamVjdC5fX2dldGl0ZW1fXyhzZWxmLCBrZXkpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgZXZhbHVhdGlvbiBvZiAic2VsZltrZXldIi4gRm9yIHNlcXVlbmNlIHR5cGVzLFxuICAgdGhlIGFjY2VwdGVkIGtleXMgc2hvdWxkIGJlIGludGVnZXJzIGFuZCBzbGljZSBvYmplY3RzLiAgTm90ZSB0aGF0XG4gICB0aGUgc3BlY2lhbCBpbnRlcnByZXRhdGlvbiBvZiBuZWdhdGl2ZSBpbmRleGVzIChpZiB0aGUgY2xhc3Mgd2lzaGVzXG4gICB0byBlbXVsYXRlIGEgc2VxdWVuY2UgdHlwZSkgaXMgdXAgdG8gdGhlICJfX2dldGl0ZW1fXygpIiBtZXRob2QuIElmXG4gICAqa2V5KiBpcyBvZiBhbiBpbmFwcHJvcHJpYXRlIHR5cGUsICJUeXBlRXJyb3IiIG1heSBiZSByYWlzZWQ7IGlmIG9mXG4gICBhIHZhbHVlIG91dHNpZGUgdGhlIHNldCBvZiBpbmRleGVzIGZvciB0aGUgc2VxdWVuY2UgKGFmdGVyIGFueVxuICAgc3BlY2lhbCBpbnRlcnByZXRhdGlvbiBvZiBuZWdhdGl2ZSB2YWx1ZXMpLCAiSW5kZXhFcnJvciIgc2hvdWxkIGJlXG4gICByYWlzZWQuIEZvciBtYXBwaW5nIHR5cGVzLCBpZiAqa2V5KiBpcyBtaXNzaW5nIChub3QgaW4gdGhlXG4gICBjb250YWluZXIpLCAiS2V5RXJyb3IiIHNob3VsZCBiZSByYWlzZWQuXG5cbiAgIE5vdGU6ICJmb3IiIGxvb3BzIGV4cGVjdCB0aGF0IGFuICJJbmRleEVycm9yIiB3aWxsIGJlIHJhaXNlZCBmb3JcbiAgICAgaWxsZWdhbCBpbmRleGVzIHRvIGFsbG93IHByb3BlciBkZXRlY3Rpb24gb2YgdGhlIGVuZCBvZiB0aGVcbiAgICAgc2VxdWVuY2UuXG5cbm9iamVjdC5fX21pc3NpbmdfXyhzZWxmLCBrZXkpXG5cbiAgIENhbGxlZCBieSAiZGljdCIuIl9fZ2V0aXRlbV9fKCkiIHRvIGltcGxlbWVudCAic2VsZltrZXldIiBmb3IgZGljdFxuICAgc3ViY2xhc3NlcyB3aGVuIGtleSBpcyBub3QgaW4gdGhlIGRpY3Rpb25hcnkuXG5cbm9iamVjdC5fX3NldGl0ZW1fXyhzZWxmLCBrZXksIHZhbHVlKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IGFzc2lnbm1lbnQgdG8gInNlbGZba2V5XSIuICBTYW1lIG5vdGUgYXMgZm9yXG4gICAiX19nZXRpdGVtX18oKSIuICBUaGlzIHNob3VsZCBvbmx5IGJlIGltcGxlbWVudGVkIGZvciBtYXBwaW5ncyBpZlxuICAgdGhlIG9iamVjdHMgc3VwcG9ydCBjaGFuZ2VzIHRvIHRoZSB2YWx1ZXMgZm9yIGtleXMsIG9yIGlmIG5ldyBrZXlzXG4gICBjYW4gYmUgYWRkZWQsIG9yIGZvciBzZXF1ZW5jZXMgaWYgZWxlbWVudHMgY2FuIGJlIHJlcGxhY2VkLiAgVGhlXG4gICBzYW1lIGV4Y2VwdGlvbnMgc2hvdWxkIGJlIHJhaXNlZCBmb3IgaW1wcm9wZXIgKmtleSogdmFsdWVzIGFzIGZvclxuICAgdGhlICJfX2dldGl0ZW1fXygpIiBtZXRob2QuXG5cbm9iamVjdC5fX2RlbGl0ZW1fXyhzZWxmLCBrZXkpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgZGVsZXRpb24gb2YgInNlbGZba2V5XSIuICBTYW1lIG5vdGUgYXMgZm9yXG4gICAiX19nZXRpdGVtX18oKSIuICBUaGlzIHNob3VsZCBvbmx5IGJlIGltcGxlbWVudGVkIGZvciBtYXBwaW5ncyBpZlxuICAgdGhlIG9iamVjdHMgc3VwcG9ydCByZW1vdmFsIG9mIGtleXMsIG9yIGZvciBzZXF1ZW5jZXMgaWYgZWxlbWVudHNcbiAgIGNhbiBiZSByZW1vdmVkIGZyb20gdGhlIHNlcXVlbmNlLiAgVGhlIHNhbWUgZXhjZXB0aW9ucyBzaG91bGQgYmVcbiAgIHJhaXNlZCBmb3IgaW1wcm9wZXIgKmtleSogdmFsdWVzIGFzIGZvciB0aGUgIl9fZ2V0aXRlbV9fKCkiIG1ldGhvZC5cblxub2JqZWN0Ll9faXRlcl9fKHNlbGYpXG5cbiAgIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIGFuIGl0ZXJhdG9yIGlzIHJlcXVpcmVkIGZvciBhIGNvbnRhaW5lci5cbiAgIFRoaXMgbWV0aG9kIHNob3VsZCByZXR1cm4gYSBuZXcgaXRlcmF0b3Igb2JqZWN0IHRoYXQgY2FuIGl0ZXJhdGVcbiAgIG92ZXIgYWxsIHRoZSBvYmplY3RzIGluIHRoZSBjb250YWluZXIuICBGb3IgbWFwcGluZ3MsIGl0IHNob3VsZFxuICAgaXRlcmF0ZSBvdmVyIHRoZSBrZXlzIG9mIHRoZSBjb250YWluZXIuXG5cbiAgIEl0ZXJhdG9yIG9iamVjdHMgYWxzbyBuZWVkIHRvIGltcGxlbWVudCB0aGlzIG1ldGhvZDsgdGhleSBhcmVcbiAgIHJlcXVpcmVkIHRvIHJldHVybiB0aGVtc2VsdmVzLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaXRlcmF0b3JcbiAgIG9iamVjdHMsIHNlZSAqSXRlcmF0b3IgVHlwZXMqLlxuXG5vYmplY3QuX19yZXZlcnNlZF9fKHNlbGYpXG5cbiAgIENhbGxlZCAoaWYgcHJlc2VudCkgYnkgdGhlICJyZXZlcnNlZCgpIiBidWlsdC1pbiB0byBpbXBsZW1lbnRcbiAgIHJldmVyc2UgaXRlcmF0aW9uLiAgSXQgc2hvdWxkIHJldHVybiBhIG5ldyBpdGVyYXRvciBvYmplY3QgdGhhdFxuICAgaXRlcmF0ZXMgb3ZlciBhbGwgdGhlIG9iamVjdHMgaW4gdGhlIGNvbnRhaW5lciBpbiByZXZlcnNlIG9yZGVyLlxuXG4gICBJZiB0aGUgIl9fcmV2ZXJzZWRfXygpIiBtZXRob2QgaXMgbm90IHByb3ZpZGVkLCB0aGUgInJldmVyc2VkKCkiXG4gICBidWlsdC1pbiB3aWxsIGZhbGwgYmFjayB0byB1c2luZyB0aGUgc2VxdWVuY2UgcHJvdG9jb2wgKCJfX2xlbl9fKCkiXG4gICBhbmQgIl9fZ2V0aXRlbV9fKCkiKS4gIE9iamVjdHMgdGhhdCBzdXBwb3J0IHRoZSBzZXF1ZW5jZSBwcm90b2NvbFxuICAgc2hvdWxkIG9ubHkgcHJvdmlkZSAiX19yZXZlcnNlZF9fKCkiIGlmIHRoZXkgY2FuIHByb3ZpZGUgYW5cbiAgIGltcGxlbWVudGF0aW9uIHRoYXQgaXMgbW9yZSBlZmZpY2llbnQgdGhhbiB0aGUgb25lIHByb3ZpZGVkIGJ5XG4gICAicmV2ZXJzZWQoKSIuXG5cblRoZSBtZW1iZXJzaGlwIHRlc3Qgb3BlcmF0b3JzICgiaW4iIGFuZCAibm90IGluIikgYXJlIG5vcm1hbGx5XG5pbXBsZW1lbnRlZCBhcyBhbiBpdGVyYXRpb24gdGhyb3VnaCBhIHNlcXVlbmNlLiAgSG93ZXZlciwgY29udGFpbmVyXG5vYmplY3RzIGNhbiBzdXBwbHkgdGhlIGZvbGxvd2luZyBzcGVjaWFsIG1ldGhvZCB3aXRoIGEgbW9yZSBlZmZpY2llbnRcbmltcGxlbWVudGF0aW9uLCB3aGljaCBhbHNvIGRvZXMgbm90IHJlcXVpcmUgdGhlIG9iamVjdCBiZSBhIHNlcXVlbmNlLlxuXG5vYmplY3QuX19jb250YWluc19fKHNlbGYsIGl0ZW0pXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgbWVtYmVyc2hpcCB0ZXN0IG9wZXJhdG9ycy4gIFNob3VsZCByZXR1cm4gdHJ1ZVxuICAgaWYgKml0ZW0qIGlzIGluICpzZWxmKiwgZmFsc2Ugb3RoZXJ3aXNlLiAgRm9yIG1hcHBpbmcgb2JqZWN0cywgdGhpc1xuICAgc2hvdWxkIGNvbnNpZGVyIHRoZSBrZXlzIG9mIHRoZSBtYXBwaW5nIHJhdGhlciB0aGFuIHRoZSB2YWx1ZXMgb3JcbiAgIHRoZSBrZXktaXRlbSBwYWlycy5cblxuICAgRm9yIG9iamVjdHMgdGhhdCBkb25cJ3QgZGVmaW5lICJfX2NvbnRhaW5zX18oKSIsIHRoZSBtZW1iZXJzaGlwIHRlc3RcbiAgIGZpcnN0IHRyaWVzIGl0ZXJhdGlvbiB2aWEgIl9faXRlcl9fKCkiLCB0aGVuIHRoZSBvbGQgc2VxdWVuY2VcbiAgIGl0ZXJhdGlvbiBwcm90b2NvbCB2aWEgIl9fZ2V0aXRlbV9fKCkiLCBzZWUgKnRoaXMgc2VjdGlvbiBpbiB0aGVcbiAgIGxhbmd1YWdlIHJlZmVyZW5jZSouXG5cblxuRW11bGF0aW5nIG51bWVyaWMgdHlwZXNcbj09PT09PT09PT09PT09PT09PT09PT09XG5cblRoZSBmb2xsb3dpbmcgbWV0aG9kcyBjYW4gYmUgZGVmaW5lZCB0byBlbXVsYXRlIG51bWVyaWMgb2JqZWN0cy5cbk1ldGhvZHMgY29ycmVzcG9uZGluZyB0byBvcGVyYXRpb25zIHRoYXQgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhlXG5wYXJ0aWN1bGFyIGtpbmQgb2YgbnVtYmVyIGltcGxlbWVudGVkIChlLmcuLCBiaXR3aXNlIG9wZXJhdGlvbnMgZm9yXG5ub24taW50ZWdyYWwgbnVtYmVycykgc2hvdWxkIGJlIGxlZnQgdW5kZWZpbmVkLlxuXG5vYmplY3QuX19hZGRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3N1Yl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fbXVsX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX190cnVlZGl2X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19mbG9vcmRpdl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fbW9kX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19kaXZtb2RfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3Bvd19fKHNlbGYsIG90aGVyWywgbW9kdWxvXSlcbm9iamVjdC5fX2xzaGlmdF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcnNoaWZ0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19hbmRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3hvcl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fb3JfXyhzZWxmLCBvdGhlcilcblxuICAgVGhlc2UgbWV0aG9kcyBhcmUgY2FsbGVkIHRvIGltcGxlbWVudCB0aGUgYmluYXJ5IGFyaXRobWV0aWNcbiAgIG9wZXJhdGlvbnMgKCIrIiwgIi0iLCAiKiIsICIvIiwgIi8vIiwgIiUiLCAiZGl2bW9kKCkiLCAicG93KCkiLFxuICAgIioqIiwgIjw8IiwgIj4+IiwgIiYiLCAiXiIsICJ8IikuICBGb3IgaW5zdGFuY2UsIHRvIGV2YWx1YXRlIHRoZVxuICAgZXhwcmVzc2lvbiAieCArIHkiLCB3aGVyZSAqeCogaXMgYW4gaW5zdGFuY2Ugb2YgYSBjbGFzcyB0aGF0IGhhcyBhblxuICAgIl9fYWRkX18oKSIgbWV0aG9kLCAieC5fX2FkZF9fKHkpIiBpcyBjYWxsZWQuICBUaGUgIl9fZGl2bW9kX18oKSJcbiAgIG1ldGhvZCBzaG91bGQgYmUgdGhlIGVxdWl2YWxlbnQgdG8gdXNpbmcgIl9fZmxvb3JkaXZfXygpIiBhbmRcbiAgICJfX21vZF9fKCkiOyBpdCBzaG91bGQgbm90IGJlIHJlbGF0ZWQgdG8gIl9fdHJ1ZWRpdl9fKCkiLiAgTm90ZVxuICAgdGhhdCAiX19wb3dfXygpIiBzaG91bGQgYmUgZGVmaW5lZCB0byBhY2NlcHQgYW4gb3B0aW9uYWwgdGhpcmRcbiAgIGFyZ3VtZW50IGlmIHRoZSB0ZXJuYXJ5IHZlcnNpb24gb2YgdGhlIGJ1aWx0LWluICJwb3coKSIgZnVuY3Rpb24gaXNcbiAgIHRvIGJlIHN1cHBvcnRlZC5cblxuICAgSWYgb25lIG9mIHRob3NlIG1ldGhvZHMgZG9lcyBub3Qgc3VwcG9ydCB0aGUgb3BlcmF0aW9uIHdpdGggdGhlXG4gICBzdXBwbGllZCBhcmd1bWVudHMsIGl0IHNob3VsZCByZXR1cm4gIk5vdEltcGxlbWVudGVkIi5cblxub2JqZWN0Ll9fcmFkZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcnN1Yl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcm11bF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcnRydWVkaXZfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3JmbG9vcmRpdl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcm1vZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcmRpdm1vZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcnBvd19fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcmxzaGlmdF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcnJzaGlmdF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcmFuZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcnhvcl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcm9yX18oc2VsZiwgb3RoZXIpXG5cbiAgIFRoZXNlIG1ldGhvZHMgYXJlIGNhbGxlZCB0byBpbXBsZW1lbnQgdGhlIGJpbmFyeSBhcml0aG1ldGljXG4gICBvcGVyYXRpb25zICgiKyIsICItIiwgIioiLCAiLyIsICIvLyIsICIlIiwgImRpdm1vZCgpIiwgInBvdygpIixcbiAgICIqKiIsICI8PCIsICI+PiIsICImIiwgIl4iLCAifCIpIHdpdGggcmVmbGVjdGVkIChzd2FwcGVkKSBvcGVyYW5kcy5cbiAgIFRoZXNlIGZ1bmN0aW9ucyBhcmUgb25seSBjYWxsZWQgaWYgdGhlIGxlZnQgb3BlcmFuZCBkb2VzIG5vdFxuICAgc3VwcG9ydCB0aGUgY29ycmVzcG9uZGluZyBvcGVyYXRpb24gYW5kIHRoZSBvcGVyYW5kcyBhcmUgb2ZcbiAgIGRpZmZlcmVudCB0eXBlcy4gWzJdICBGb3IgaW5zdGFuY2UsIHRvIGV2YWx1YXRlIHRoZSBleHByZXNzaW9uICJ4IC1cbiAgIHkiLCB3aGVyZSAqeSogaXMgYW4gaW5zdGFuY2Ugb2YgYSBjbGFzcyB0aGF0IGhhcyBhbiAiX19yc3ViX18oKSJcbiAgIG1ldGhvZCwgInkuX19yc3ViX18oeCkiIGlzIGNhbGxlZCBpZiAieC5fX3N1Yl9fKHkpIiByZXR1cm5zXG4gICAqTm90SW1wbGVtZW50ZWQqLlxuXG4gICBOb3RlIHRoYXQgdGVybmFyeSAicG93KCkiIHdpbGwgbm90IHRyeSBjYWxsaW5nICJfX3Jwb3dfXygpIiAodGhlXG4gICBjb2VyY2lvbiBydWxlcyB3b3VsZCBiZWNvbWUgdG9vIGNvbXBsaWNhdGVkKS5cblxuICAgTm90ZTogSWYgdGhlIHJpZ2h0IG9wZXJhbmRcJ3MgdHlwZSBpcyBhIHN1YmNsYXNzIG9mIHRoZSBsZWZ0XG4gICAgIG9wZXJhbmRcJ3MgdHlwZSBhbmQgdGhhdCBzdWJjbGFzcyBwcm92aWRlcyB0aGUgcmVmbGVjdGVkIG1ldGhvZFxuICAgICBmb3IgdGhlIG9wZXJhdGlvbiwgdGhpcyBtZXRob2Qgd2lsbCBiZSBjYWxsZWQgYmVmb3JlIHRoZSBsZWZ0XG4gICAgIG9wZXJhbmRcJ3Mgbm9uLXJlZmxlY3RlZCBtZXRob2QuICBUaGlzIGJlaGF2aW9yIGFsbG93cyBzdWJjbGFzc2VzXG4gICAgIHRvIG92ZXJyaWRlIHRoZWlyIGFuY2VzdG9yc1wnIG9wZXJhdGlvbnMuXG5cbm9iamVjdC5fX2lhZGRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2lzdWJfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2ltdWxfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2l0cnVlZGl2X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19pZmxvb3JkaXZfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2ltb2RfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2lwb3dfXyhzZWxmLCBvdGhlclssIG1vZHVsb10pXG5vYmplY3QuX19pbHNoaWZ0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19pcnNoaWZ0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19pYW5kX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19peG9yX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19pb3JfXyhzZWxmLCBvdGhlcilcblxuICAgVGhlc2UgbWV0aG9kcyBhcmUgY2FsbGVkIHRvIGltcGxlbWVudCB0aGUgYXVnbWVudGVkIGFyaXRobWV0aWNcbiAgIGFzc2lnbm1lbnRzICgiKz0iLCAiLT0iLCAiKj0iLCAiLz0iLCAiLy89IiwgIiU9IiwgIioqPSIsICI8PD0iLFxuICAgIj4+PSIsICImPSIsICJePSIsICJ8PSIpLiAgVGhlc2UgbWV0aG9kcyBzaG91bGQgYXR0ZW1wdCB0byBkbyB0aGVcbiAgIG9wZXJhdGlvbiBpbi1wbGFjZSAobW9kaWZ5aW5nICpzZWxmKikgYW5kIHJldHVybiB0aGUgcmVzdWx0ICh3aGljaFxuICAgY291bGQgYmUsIGJ1dCBkb2VzIG5vdCBoYXZlIHRvIGJlLCAqc2VsZiopLiAgSWYgYSBzcGVjaWZpYyBtZXRob2RcbiAgIGlzIG5vdCBkZWZpbmVkLCB0aGUgYXVnbWVudGVkIGFzc2lnbm1lbnQgZmFsbHMgYmFjayB0byB0aGUgbm9ybWFsXG4gICBtZXRob2RzLiAgRm9yIGluc3RhbmNlLCBpZiAqeCogaXMgYW4gaW5zdGFuY2Ugb2YgYSBjbGFzcyB3aXRoIGFuXG4gICAiX19pYWRkX18oKSIgbWV0aG9kLCAieCArPSB5IiBpcyBlcXVpdmFsZW50IHRvICJ4ID0geC5fX2lhZGRfXyh5KSJcbiAgIC4gT3RoZXJ3aXNlLCAieC5fX2FkZF9fKHkpIiBhbmQgInkuX19yYWRkX18oeCkiIGFyZSBjb25zaWRlcmVkLCBhc1xuICAgd2l0aCB0aGUgZXZhbHVhdGlvbiBvZiAieCArIHkiLiBJbiBjZXJ0YWluIHNpdHVhdGlvbnMsIGF1Z21lbnRlZFxuICAgYXNzaWdubWVudCBjYW4gcmVzdWx0IGluIHVuZXhwZWN0ZWQgZXJyb3JzIChzZWUgKldoeSBkb2VzXG4gICBhX3R1cGxlW2ldICs9IFtcJ2l0ZW1cJ10gcmFpc2UgYW4gZXhjZXB0aW9uIHdoZW4gdGhlIGFkZGl0aW9uXG4gICB3b3Jrcz8qKSwgYnV0IHRoaXMgYmVoYXZpb3IgaXMgaW4gZmFjdCBwYXJ0IG9mIHRoZSBkYXRhIG1vZGVsLlxuXG5vYmplY3QuX19uZWdfXyhzZWxmKVxub2JqZWN0Ll9fcG9zX18oc2VsZilcbm9iamVjdC5fX2Fic19fKHNlbGYpXG5vYmplY3QuX19pbnZlcnRfXyhzZWxmKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IHRoZSB1bmFyeSBhcml0aG1ldGljIG9wZXJhdGlvbnMgKCItIiwgIisiLFxuICAgImFicygpIiBhbmQgIn4iKS5cblxub2JqZWN0Ll9fY29tcGxleF9fKHNlbGYpXG5vYmplY3QuX19pbnRfXyhzZWxmKVxub2JqZWN0Ll9fZmxvYXRfXyhzZWxmKVxub2JqZWN0Ll9fcm91bmRfXyhzZWxmWywgbl0pXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgdGhlIGJ1aWx0LWluIGZ1bmN0aW9ucyAiY29tcGxleCgpIiwgImludCgpIixcbiAgICJmbG9hdCgpIiBhbmQgInJvdW5kKCkiLiAgU2hvdWxkIHJldHVybiBhIHZhbHVlIG9mIHRoZSBhcHByb3ByaWF0ZVxuICAgdHlwZS5cblxub2JqZWN0Ll9faW5kZXhfXyhzZWxmKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50ICJvcGVyYXRvci5pbmRleCgpIiwgYW5kIHdoZW5ldmVyIFB5dGhvbiBuZWVkc1xuICAgdG8gbG9zc2xlc3NseSBjb252ZXJ0IHRoZSBudW1lcmljIG9iamVjdCB0byBhbiBpbnRlZ2VyIG9iamVjdCAoc3VjaFxuICAgYXMgaW4gc2xpY2luZywgb3IgaW4gdGhlIGJ1aWx0LWluICJiaW4oKSIsICJoZXgoKSIgYW5kICJvY3QoKSJcbiAgIGZ1bmN0aW9ucykuIFByZXNlbmNlIG9mIHRoaXMgbWV0aG9kIGluZGljYXRlcyB0aGF0IHRoZSBudW1lcmljXG4gICBvYmplY3QgaXMgYW4gaW50ZWdlciB0eXBlLiAgTXVzdCByZXR1cm4gYW4gaW50ZWdlci5cblxuICAgTm90ZTogSW4gb3JkZXIgdG8gaGF2ZSBhIGNvaGVyZW50IGludGVnZXIgdHlwZSBjbGFzcywgd2hlblxuICAgICAiX19pbmRleF9fKCkiIGlzIGRlZmluZWQgIl9faW50X18oKSIgc2hvdWxkIGFsc28gYmUgZGVmaW5lZCwgYW5kXG4gICAgIGJvdGggc2hvdWxkIHJldHVybiB0aGUgc2FtZSB2YWx1ZS5cblxuXG5XaXRoIFN0YXRlbWVudCBDb250ZXh0IE1hbmFnZXJzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbkEgKmNvbnRleHQgbWFuYWdlciogaXMgYW4gb2JqZWN0IHRoYXQgZGVmaW5lcyB0aGUgcnVudGltZSBjb250ZXh0IHRvXG5iZSBlc3RhYmxpc2hlZCB3aGVuIGV4ZWN1dGluZyBhICJ3aXRoIiBzdGF0ZW1lbnQuIFRoZSBjb250ZXh0IG1hbmFnZXJcbmhhbmRsZXMgdGhlIGVudHJ5IGludG8sIGFuZCB0aGUgZXhpdCBmcm9tLCB0aGUgZGVzaXJlZCBydW50aW1lIGNvbnRleHRcbmZvciB0aGUgZXhlY3V0aW9uIG9mIHRoZSBibG9jayBvZiBjb2RlLiAgQ29udGV4dCBtYW5hZ2VycyBhcmUgbm9ybWFsbHlcbmludm9rZWQgdXNpbmcgdGhlICJ3aXRoIiBzdGF0ZW1lbnQgKGRlc2NyaWJlZCBpbiBzZWN0aW9uICpUaGUgd2l0aFxuc3RhdGVtZW50KiksIGJ1dCBjYW4gYWxzbyBiZSB1c2VkIGJ5IGRpcmVjdGx5IGludm9raW5nIHRoZWlyIG1ldGhvZHMuXG5cblR5cGljYWwgdXNlcyBvZiBjb250ZXh0IG1hbmFnZXJzIGluY2x1ZGUgc2F2aW5nIGFuZCByZXN0b3JpbmcgdmFyaW91c1xua2luZHMgb2YgZ2xvYmFsIHN0YXRlLCBsb2NraW5nIGFuZCB1bmxvY2tpbmcgcmVzb3VyY2VzLCBjbG9zaW5nIG9wZW5lZFxuZmlsZXMsIGV0Yy5cblxuRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gY29udGV4dCBtYW5hZ2Vycywgc2VlICpDb250ZXh0IE1hbmFnZXIgVHlwZXMqLlxuXG5vYmplY3QuX19lbnRlcl9fKHNlbGYpXG5cbiAgIEVudGVyIHRoZSBydW50aW1lIGNvbnRleHQgcmVsYXRlZCB0byB0aGlzIG9iamVjdC4gVGhlICJ3aXRoIlxuICAgc3RhdGVtZW50IHdpbGwgYmluZCB0aGlzIG1ldGhvZFwncyByZXR1cm4gdmFsdWUgdG8gdGhlIHRhcmdldChzKVxuICAgc3BlY2lmaWVkIGluIHRoZSAiYXMiIGNsYXVzZSBvZiB0aGUgc3RhdGVtZW50LCBpZiBhbnkuXG5cbm9iamVjdC5fX2V4aXRfXyhzZWxmLCBleGNfdHlwZSwgZXhjX3ZhbHVlLCB0cmFjZWJhY2spXG5cbiAgIEV4aXQgdGhlIHJ1bnRpbWUgY29udGV4dCByZWxhdGVkIHRvIHRoaXMgb2JqZWN0LiBUaGUgcGFyYW1ldGVyc1xuICAgZGVzY3JpYmUgdGhlIGV4Y2VwdGlvbiB0aGF0IGNhdXNlZCB0aGUgY29udGV4dCB0byBiZSBleGl0ZWQuIElmIHRoZVxuICAgY29udGV4dCB3YXMgZXhpdGVkIHdpdGhvdXQgYW4gZXhjZXB0aW9uLCBhbGwgdGhyZWUgYXJndW1lbnRzIHdpbGxcbiAgIGJlICJOb25lIi5cblxuICAgSWYgYW4gZXhjZXB0aW9uIGlzIHN1cHBsaWVkLCBhbmQgdGhlIG1ldGhvZCB3aXNoZXMgdG8gc3VwcHJlc3MgdGhlXG4gICBleGNlcHRpb24gKGkuZS4sIHByZXZlbnQgaXQgZnJvbSBiZWluZyBwcm9wYWdhdGVkKSwgaXQgc2hvdWxkXG4gICByZXR1cm4gYSB0cnVlIHZhbHVlLiBPdGhlcndpc2UsIHRoZSBleGNlcHRpb24gd2lsbCBiZSBwcm9jZXNzZWRcbiAgIG5vcm1hbGx5IHVwb24gZXhpdCBmcm9tIHRoaXMgbWV0aG9kLlxuXG4gICBOb3RlIHRoYXQgIl9fZXhpdF9fKCkiIG1ldGhvZHMgc2hvdWxkIG5vdCByZXJhaXNlIHRoZSBwYXNzZWQtaW5cbiAgIGV4Y2VwdGlvbjsgdGhpcyBpcyB0aGUgY2FsbGVyXCdzIHJlc3BvbnNpYmlsaXR5LlxuXG5TZWUgYWxzbzogKipQRVAgMDM0MyoqIC0gVGhlICJ3aXRoIiBzdGF0ZW1lbnRcblxuICAgICBUaGUgc3BlY2lmaWNhdGlvbiwgYmFja2dyb3VuZCwgYW5kIGV4YW1wbGVzIGZvciB0aGUgUHl0aG9uICJ3aXRoIlxuICAgICBzdGF0ZW1lbnQuXG5cblxuU3BlY2lhbCBtZXRob2QgbG9va3VwXG49PT09PT09PT09PT09PT09PT09PT1cblxuRm9yIGN1c3RvbSBjbGFzc2VzLCBpbXBsaWNpdCBpbnZvY2F0aW9ucyBvZiBzcGVjaWFsIG1ldGhvZHMgYXJlIG9ubHlcbmd1YXJhbnRlZWQgdG8gd29yayBjb3JyZWN0bHkgaWYgZGVmaW5lZCBvbiBhbiBvYmplY3RcJ3MgdHlwZSwgbm90IGluXG50aGUgb2JqZWN0XCdzIGluc3RhbmNlIGRpY3Rpb25hcnkuICBUaGF0IGJlaGF2aW91ciBpcyB0aGUgcmVhc29uIHdoeVxudGhlIGZvbGxvd2luZyBjb2RlIHJhaXNlcyBhbiBleGNlcHRpb246XG5cbiAgID4+PiBjbGFzcyBDOlxuICAgLi4uICAgICBwYXNzXG4gICAuLi5cbiAgID4+PiBjID0gQygpXG4gICA+Pj4gYy5fX2xlbl9fID0gbGFtYmRhOiA1XG4gICA+Pj4gbGVuKGMpXG4gICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6XG4gICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDEsIGluIDxtb2R1bGU+XG4gICBUeXBlRXJyb3I6IG9iamVjdCBvZiB0eXBlIFwnQ1wnIGhhcyBubyBsZW4oKVxuXG5UaGUgcmF0aW9uYWxlIGJlaGluZCB0aGlzIGJlaGF2aW91ciBsaWVzIHdpdGggYSBudW1iZXIgb2Ygc3BlY2lhbFxubWV0aG9kcyBzdWNoIGFzICJfX2hhc2hfXygpIiBhbmQgIl9fcmVwcl9fKCkiIHRoYXQgYXJlIGltcGxlbWVudGVkIGJ5XG5hbGwgb2JqZWN0cywgaW5jbHVkaW5nIHR5cGUgb2JqZWN0cy4gSWYgdGhlIGltcGxpY2l0IGxvb2t1cCBvZiB0aGVzZVxubWV0aG9kcyB1c2VkIHRoZSBjb252ZW50aW9uYWwgbG9va3VwIHByb2Nlc3MsIHRoZXkgd291bGQgZmFpbCB3aGVuXG5pbnZva2VkIG9uIHRoZSB0eXBlIG9iamVjdCBpdHNlbGY6XG5cbiAgID4+PiAxIC5fX2hhc2hfXygpID09IGhhc2goMSlcbiAgIFRydWVcbiAgID4+PiBpbnQuX19oYXNoX18oKSA9PSBoYXNoKGludClcbiAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KTpcbiAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgMSwgaW4gPG1vZHVsZT5cbiAgIFR5cGVFcnJvcjogZGVzY3JpcHRvciBcJ19faGFzaF9fXCcgb2YgXCdpbnRcJyBvYmplY3QgbmVlZHMgYW4gYXJndW1lbnRcblxuSW5jb3JyZWN0bHkgYXR0ZW1wdGluZyB0byBpbnZva2UgYW4gdW5ib3VuZCBtZXRob2Qgb2YgYSBjbGFzcyBpbiB0aGlzXG53YXkgaXMgc29tZXRpbWVzIHJlZmVycmVkIHRvIGFzIFwnbWV0YWNsYXNzIGNvbmZ1c2lvblwnLCBhbmQgaXMgYXZvaWRlZFxuYnkgYnlwYXNzaW5nIHRoZSBpbnN0YW5jZSB3aGVuIGxvb2tpbmcgdXAgc3BlY2lhbCBtZXRob2RzOlxuXG4gICA+Pj4gdHlwZSgxKS5fX2hhc2hfXygxKSA9PSBoYXNoKDEpXG4gICBUcnVlXG4gICA+Pj4gdHlwZShpbnQpLl9faGFzaF9fKGludCkgPT0gaGFzaChpbnQpXG4gICBUcnVlXG5cbkluIGFkZGl0aW9uIHRvIGJ5cGFzc2luZyBhbnkgaW5zdGFuY2UgYXR0cmlidXRlcyBpbiB0aGUgaW50ZXJlc3Qgb2ZcbmNvcnJlY3RuZXNzLCBpbXBsaWNpdCBzcGVjaWFsIG1ldGhvZCBsb29rdXAgZ2VuZXJhbGx5IGFsc28gYnlwYXNzZXNcbnRoZSAiX19nZXRhdHRyaWJ1dGVfXygpIiBtZXRob2QgZXZlbiBvZiB0aGUgb2JqZWN0XCdzIG1ldGFjbGFzczpcblxuICAgPj4+IGNsYXNzIE1ldGEodHlwZSk6XG4gICAuLi4gICAgIGRlZiBfX2dldGF0dHJpYnV0ZV9fKCphcmdzKTpcbiAgIC4uLiAgICAgICAgIHByaW50KCJNZXRhY2xhc3MgZ2V0YXR0cmlidXRlIGludm9rZWQiKVxuICAgLi4uICAgICAgICAgcmV0dXJuIHR5cGUuX19nZXRhdHRyaWJ1dGVfXygqYXJncylcbiAgIC4uLlxuICAgPj4+IGNsYXNzIEMob2JqZWN0LCBtZXRhY2xhc3M9TWV0YSk6XG4gICAuLi4gICAgIGRlZiBfX2xlbl9fKHNlbGYpOlxuICAgLi4uICAgICAgICAgcmV0dXJuIDEwXG4gICAuLi4gICAgIGRlZiBfX2dldGF0dHJpYnV0ZV9fKCphcmdzKTpcbiAgIC4uLiAgICAgICAgIHByaW50KCJDbGFzcyBnZXRhdHRyaWJ1dGUgaW52b2tlZCIpXG4gICAuLi4gICAgICAgICByZXR1cm4gb2JqZWN0Ll9fZ2V0YXR0cmlidXRlX18oKmFyZ3MpXG4gICAuLi5cbiAgID4+PiBjID0gQygpXG4gICA+Pj4gYy5fX2xlbl9fKCkgICAgICAgICAgICAgICAgICMgRXhwbGljaXQgbG9va3VwIHZpYSBpbnN0YW5jZVxuICAgQ2xhc3MgZ2V0YXR0cmlidXRlIGludm9rZWRcbiAgIDEwXG4gICA+Pj4gdHlwZShjKS5fX2xlbl9fKGMpICAgICAgICAgICMgRXhwbGljaXQgbG9va3VwIHZpYSB0eXBlXG4gICBNZXRhY2xhc3MgZ2V0YXR0cmlidXRlIGludm9rZWRcbiAgIDEwXG4gICA+Pj4gbGVuKGMpICAgICAgICAgICAgICAgICAgICAgICMgSW1wbGljaXQgbG9va3VwXG4gICAxMFxuXG5CeXBhc3NpbmcgdGhlICJfX2dldGF0dHJpYnV0ZV9fKCkiIG1hY2hpbmVyeSBpbiB0aGlzIGZhc2hpb24gcHJvdmlkZXNcbnNpZ25pZmljYW50IHNjb3BlIGZvciBzcGVlZCBvcHRpbWlzYXRpb25zIHdpdGhpbiB0aGUgaW50ZXJwcmV0ZXIsIGF0XG50aGUgY29zdCBvZiBzb21lIGZsZXhpYmlsaXR5IGluIHRoZSBoYW5kbGluZyBvZiBzcGVjaWFsIG1ldGhvZHMgKHRoZVxuc3BlY2lhbCBtZXRob2QgKm11c3QqIGJlIHNldCBvbiB0aGUgY2xhc3Mgb2JqZWN0IGl0c2VsZiBpbiBvcmRlciB0byBiZVxuY29uc2lzdGVudGx5IGludm9rZWQgYnkgdGhlIGludGVycHJldGVyKS5cblxuLVsgRm9vdG5vdGVzIF0tXG5cblsxXSBJdCAqaXMqIHBvc3NpYmxlIGluIHNvbWUgY2FzZXMgdG8gY2hhbmdlIGFuIG9iamVjdFwncyB0eXBlLFxuICAgIHVuZGVyIGNlcnRhaW4gY29udHJvbGxlZCBjb25kaXRpb25zLiBJdCBnZW5lcmFsbHkgaXNuXCd0IGEgZ29vZFxuICAgIGlkZWEgdGhvdWdoLCBzaW5jZSBpdCBjYW4gbGVhZCB0byBzb21lIHZlcnkgc3RyYW5nZSBiZWhhdmlvdXIgaWZcbiAgICBpdCBpcyBoYW5kbGVkIGluY29ycmVjdGx5LlxuXG5bMl0gRm9yIG9wZXJhbmRzIG9mIHRoZSBzYW1lIHR5cGUsIGl0IGlzIGFzc3VtZWQgdGhhdCBpZiB0aGUgbm9uLVxuICAgIHJlZmxlY3RlZCBtZXRob2QgKHN1Y2ggYXMgIl9fYWRkX18oKSIpIGZhaWxzIHRoZSBvcGVyYXRpb24gaXMgbm90XG4gICAgc3VwcG9ydGVkLCB3aGljaCBpcyB3aHkgdGhlIHJlZmxlY3RlZCBtZXRob2QgaXMgbm90IGNhbGxlZC5cbicsCisgJ3N0cmluZy1tZXRob2RzJzogdSdcblN0cmluZyBNZXRob2RzXG4qKioqKioqKioqKioqKlxuXG5TdHJpbmdzIGltcGxlbWVudCBhbGwgb2YgdGhlICpjb21tb24qIHNlcXVlbmNlIG9wZXJhdGlvbnMsIGFsb25nIHdpdGhcbnRoZSBhZGRpdGlvbmFsIG1ldGhvZHMgZGVzY3JpYmVkIGJlbG93LlxuXG5TdHJpbmdzIGFsc28gc3VwcG9ydCB0d28gc3R5bGVzIG9mIHN0cmluZyBmb3JtYXR0aW5nLCBvbmUgcHJvdmlkaW5nIGFcbmxhcmdlIGRlZ3JlZSBvZiBmbGV4aWJpbGl0eSBhbmQgY3VzdG9taXphdGlvbiAoc2VlICJzdHIuZm9ybWF0KCkiLFxuKkZvcm1hdCBTdHJpbmcgU3ludGF4KiBhbmQgKlN0cmluZyBGb3JtYXR0aW5nKikgYW5kIHRoZSBvdGhlciBiYXNlZCBvblxuQyAicHJpbnRmIiBzdHlsZSBmb3JtYXR0aW5nIHRoYXQgaGFuZGxlcyBhIG5hcnJvd2VyIHJhbmdlIG9mIHR5cGVzIGFuZFxuaXMgc2xpZ2h0bHkgaGFyZGVyIHRvIHVzZSBjb3JyZWN0bHksIGJ1dCBpcyBvZnRlbiBmYXN0ZXIgZm9yIHRoZSBjYXNlc1xuaXQgY2FuIGhhbmRsZSAoKnByaW50Zi1zdHlsZSBTdHJpbmcgRm9ybWF0dGluZyopLlxuXG5UaGUgKlRleHQgUHJvY2Vzc2luZyBTZXJ2aWNlcyogc2VjdGlvbiBvZiB0aGUgc3RhbmRhcmQgbGlicmFyeSBjb3ZlcnNcbmEgbnVtYmVyIG9mIG90aGVyIG1vZHVsZXMgdGhhdCBwcm92aWRlIHZhcmlvdXMgdGV4dCByZWxhdGVkIHV0aWxpdGllc1xuKGluY2x1ZGluZyByZWd1bGFyIGV4cHJlc3Npb24gc3VwcG9ydCBpbiB0aGUgInJlIiBtb2R1bGUpLlxuXG5zdHIuY2FwaXRhbGl6ZSgpXG5cbiAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyB3aXRoIGl0cyBmaXJzdCBjaGFyYWN0ZXIgY2FwaXRhbGl6ZWRcbiAgIGFuZCB0aGUgcmVzdCBsb3dlcmNhc2VkLlxuXG5zdHIuY2FzZWZvbGQoKVxuXG4gICBSZXR1cm4gYSBjYXNlZm9sZGVkIGNvcHkgb2YgdGhlIHN0cmluZy4gQ2FzZWZvbGRlZCBzdHJpbmdzIG1heSBiZVxuICAgdXNlZCBmb3IgY2FzZWxlc3MgbWF0Y2hpbmcuXG5cbiAgIENhc2Vmb2xkaW5nIGlzIHNpbWlsYXIgdG8gbG93ZXJjYXNpbmcgYnV0IG1vcmUgYWdncmVzc2l2ZSBiZWNhdXNlXG4gICBpdCBpcyBpbnRlbmRlZCB0byByZW1vdmUgYWxsIGNhc2UgZGlzdGluY3Rpb25zIGluIGEgc3RyaW5nLiBGb3JcbiAgIGV4YW1wbGUsIHRoZSBHZXJtYW4gbG93ZXJjYXNlIGxldHRlciAiXCdceGRmXCciIGlzIGVxdWl2YWxlbnQgdG8gIiJzcyIiLlxuICAgU2luY2UgaXQgaXMgYWxyZWFkeSBsb3dlcmNhc2UsICJsb3dlcigpIiB3b3VsZCBkbyBub3RoaW5nIHRvICJcJ1x4ZGZcJyI7XG4gICAiY2FzZWZvbGQoKSIgY29udmVydHMgaXQgdG8gIiJzcyIiLlxuXG4gICBUaGUgY2FzZWZvbGRpbmcgYWxnb3JpdGhtIGlzIGRlc2NyaWJlZCBpbiBzZWN0aW9uIDMuMTMgb2YgdGhlXG4gICBVbmljb2RlIFN0YW5kYXJkLlxuXG4gICBOZXcgaW4gdmVyc2lvbiAzLjMuXG5cbnN0ci5jZW50ZXIod2lkdGhbLCBmaWxsY2hhcl0pXG5cbiAgIFJldHVybiBjZW50ZXJlZCBpbiBhIHN0cmluZyBvZiBsZW5ndGggKndpZHRoKi4gUGFkZGluZyBpcyBkb25lXG4gICB1c2luZyB0aGUgc3BlY2lmaWVkICpmaWxsY2hhciogKGRlZmF1bHQgaXMgYW4gQVNDSUkgc3BhY2UpLiBUaGVcbiAgIG9yaWdpbmFsIHN0cmluZyBpcyByZXR1cm5lZCBpZiAqd2lkdGgqIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0b1xuICAgImxlbihzKSIuXG5cbnN0ci5jb3VudChzdWJbLCBzdGFydFssIGVuZF1dKVxuXG4gICBSZXR1cm4gdGhlIG51bWJlciBvZiBub24tb3ZlcmxhcHBpbmcgb2NjdXJyZW5jZXMgb2Ygc3Vic3RyaW5nICpzdWIqXG4gICBpbiB0aGUgcmFuZ2UgWypzdGFydCosICplbmQqXS4gIE9wdGlvbmFsIGFyZ3VtZW50cyAqc3RhcnQqIGFuZFxuICAgKmVuZCogYXJlIGludGVycHJldGVkIGFzIGluIHNsaWNlIG5vdGF0aW9uLlxuXG5zdHIuZW5jb2RlKGVuY29kaW5nPSJ1dGYtOCIsIGVycm9ycz0ic3RyaWN0IilcblxuICAgUmV0dXJuIGFuIGVuY29kZWQgdmVyc2lvbiBvZiB0aGUgc3RyaW5nIGFzIGEgYnl0ZXMgb2JqZWN0LiBEZWZhdWx0XG4gICBlbmNvZGluZyBpcyAiXCd1dGYtOFwnIi4gKmVycm9ycyogbWF5IGJlIGdpdmVuIHRvIHNldCBhIGRpZmZlcmVudFxuICAgZXJyb3IgaGFuZGxpbmcgc2NoZW1lLiBUaGUgZGVmYXVsdCBmb3IgKmVycm9ycyogaXMgIlwnc3RyaWN0XCciLFxuICAgbWVhbmluZyB0aGF0IGVuY29kaW5nIGVycm9ycyByYWlzZSBhICJVbmljb2RlRXJyb3IiLiBPdGhlciBwb3NzaWJsZVxuICAgdmFsdWVzIGFyZSAiXCdpZ25vcmVcJyIsICJcJ3JlcGxhY2VcJyIsICJcJ3htbGNoYXJyZWZyZXBsYWNlXCciLFxuICAgIlwnYmFja3NsYXNocmVwbGFjZVwnIiBhbmQgYW55IG90aGVyIG5hbWUgcmVnaXN0ZXJlZCB2aWFcbiAgICJjb2RlY3MucmVnaXN0ZXJfZXJyb3IoKSIsIHNlZSBzZWN0aW9uICpFcnJvciBIYW5kbGVycyouIEZvciBhIGxpc3RcbiAgIG9mIHBvc3NpYmxlIGVuY29kaW5ncywgc2VlIHNlY3Rpb24gKlN0YW5kYXJkIEVuY29kaW5ncyouXG5cbiAgIENoYW5nZWQgaW4gdmVyc2lvbiAzLjE6IFN1cHBvcnQgZm9yIGtleXdvcmQgYXJndW1lbnRzIGFkZGVkLlxuXG5zdHIuZW5kc3dpdGgoc3VmZml4Wywgc3RhcnRbLCBlbmRdXSlcblxuICAgUmV0dXJuICJUcnVlIiBpZiB0aGUgc3RyaW5nIGVuZHMgd2l0aCB0aGUgc3BlY2lmaWVkICpzdWZmaXgqLFxuICAgb3RoZXJ3aXNlIHJldHVybiAiRmFsc2UiLiAgKnN1ZmZpeCogY2FuIGFsc28gYmUgYSB0dXBsZSBvZiBzdWZmaXhlc1xuICAgdG8gbG9vayBmb3IuICBXaXRoIG9wdGlvbmFsICpzdGFydCosIHRlc3QgYmVnaW5uaW5nIGF0IHRoYXRcbiAgIHBvc2l0aW9uLiAgV2l0aCBvcHRpb25hbCAqZW5kKiwgc3RvcCBjb21wYXJpbmcgYXQgdGhhdCBwb3NpdGlvbi5cblxuc3RyLmV4cGFuZHRhYnModGFic2l6ZT04KVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2hlcmUgYWxsIHRhYiBjaGFyYWN0ZXJzIGFyZSByZXBsYWNlZFxuICAgYnkgb25lIG9yIG1vcmUgc3BhY2VzLCBkZXBlbmRpbmcgb24gdGhlIGN1cnJlbnQgY29sdW1uIGFuZCB0aGVcbiAgIGdpdmVuIHRhYiBzaXplLiAgVGFiIHBvc2l0aW9ucyBvY2N1ciBldmVyeSAqdGFic2l6ZSogY2hhcmFjdGVyc1xuICAgKGRlZmF1bHQgaXMgOCwgZ2l2aW5nIHRhYiBwb3NpdGlvbnMgYXQgY29sdW1ucyAwLCA4LCAxNiBhbmQgc28gb24pLlxuICAgVG8gZXhwYW5kIHRoZSBzdHJpbmcsIHRoZSBjdXJyZW50IGNvbHVtbiBpcyBzZXQgdG8gemVybyBhbmQgdGhlXG4gICBzdHJpbmcgaXMgZXhhbWluZWQgY2hhcmFjdGVyIGJ5IGNoYXJhY3Rlci4gIElmIHRoZSBjaGFyYWN0ZXIgaXMgYVxuICAgdGFiICgiXFx0IiksIG9uZSBvciBtb3JlIHNwYWNlIGNoYXJhY3RlcnMgYXJlIGluc2VydGVkIGluIHRoZSByZXN1bHRcbiAgIHVudGlsIHRoZSBjdXJyZW50IGNvbHVtbiBpcyBlcXVhbCB0byB0aGUgbmV4dCB0YWIgcG9zaXRpb24uIChUaGVcbiAgIHRhYiBjaGFyYWN0ZXIgaXRzZWxmIGlzIG5vdCBjb3BpZWQuKSAgSWYgdGhlIGNoYXJhY3RlciBpcyBhIG5ld2xpbmVcbiAgICgiXFxuIikgb3IgcmV0dXJuICgiXFxyIiksIGl0IGlzIGNvcGllZCBhbmQgdGhlIGN1cnJlbnQgY29sdW1uIGlzXG4gICByZXNldCB0byB6ZXJvLiAgQW55IG90aGVyIGNoYXJhY3RlciBpcyBjb3BpZWQgdW5jaGFuZ2VkIGFuZCB0aGVcbiAgIGN1cnJlbnQgY29sdW1uIGlzIGluY3JlbWVudGVkIGJ5IG9uZSByZWdhcmRsZXNzIG9mIGhvdyB0aGVcbiAgIGNoYXJhY3RlciBpcyByZXByZXNlbnRlZCB3aGVuIHByaW50ZWQuXG5cbiAgID4+PiBcJzAxXFx0MDEyXFx0MDEyM1xcdDAxMjM0XCcuZXhwYW5kdGFicygpXG4gICBcJzAxICAgICAgMDEyICAgICAwMTIzICAgIDAxMjM0XCdcbiAgID4+PiBcJzAxXFx0MDEyXFx0MDEyM1xcdDAxMjM0XCcuZXhwYW5kdGFicyg0KVxuICAgXCcwMSAgMDEyIDAxMjMgICAgMDEyMzRcJ1xuXG5zdHIuZmluZChzdWJbLCBzdGFydFssIGVuZF1dKVxuXG4gICBSZXR1cm4gdGhlIGxvd2VzdCBpbmRleCBpbiB0aGUgc3RyaW5nIHdoZXJlIHN1YnN0cmluZyAqc3ViKiBpc1xuICAgZm91bmQsIHN1Y2ggdGhhdCAqc3ViKiBpcyBjb250YWluZWQgaW4gdGhlIHNsaWNlICJzW3N0YXJ0OmVuZF0iLlxuICAgT3B0aW9uYWwgYXJndW1lbnRzICpzdGFydCogYW5kICplbmQqIGFyZSBpbnRlcnByZXRlZCBhcyBpbiBzbGljZVxuICAgbm90YXRpb24uICBSZXR1cm4gIi0xIiBpZiAqc3ViKiBpcyBub3QgZm91bmQuXG5cbiAgIE5vdGU6IFRoZSAiZmluZCgpIiBtZXRob2Qgc2hvdWxkIGJlIHVzZWQgb25seSBpZiB5b3UgbmVlZCB0byBrbm93XG4gICAgIHRoZSBwb3NpdGlvbiBvZiAqc3ViKi4gIFRvIGNoZWNrIGlmICpzdWIqIGlzIGEgc3Vic3RyaW5nIG9yIG5vdCxcbiAgICAgdXNlIHRoZSAiaW4iIG9wZXJhdG9yOlxuXG4gICAgICAgID4+PiBcJ1B5XCcgaW4gXCdQeXRob25cJ1xuICAgICAgICBUcnVlXG5cbnN0ci5mb3JtYXQoKmFyZ3MsICoqa3dhcmdzKVxuXG4gICBQZXJmb3JtIGEgc3RyaW5nIGZvcm1hdHRpbmcgb3BlcmF0aW9uLiAgVGhlIHN0cmluZyBvbiB3aGljaCB0aGlzXG4gICBtZXRob2QgaXMgY2FsbGVkIGNhbiBjb250YWluIGxpdGVyYWwgdGV4dCBvciByZXBsYWNlbWVudCBmaWVsZHNcbiAgIGRlbGltaXRlZCBieSBicmFjZXMgInt9Ii4gIEVhY2ggcmVwbGFjZW1lbnQgZmllbGQgY29udGFpbnMgZWl0aGVyXG4gICB0aGUgbnVtZXJpYyBpbmRleCBvZiBhIHBvc2l0aW9uYWwgYXJndW1lbnQsIG9yIHRoZSBuYW1lIG9mIGFcbiAgIGtleXdvcmQgYXJndW1lbnQuICBSZXR1cm5zIGEgY29weSBvZiB0aGUgc3RyaW5nIHdoZXJlIGVhY2hcbiAgIHJlcGxhY2VtZW50IGZpZWxkIGlzIHJlcGxhY2VkIHdpdGggdGhlIHN0cmluZyB2YWx1ZSBvZiB0aGVcbiAgIGNvcnJlc3BvbmRpbmcgYXJndW1lbnQuXG5cbiAgID4+PiAiVGhlIHN1bSBvZiAxICsgMiBpcyB7MH0iLmZvcm1hdCgxKzIpXG4gICBcJ1RoZSBzdW0gb2YgMSArIDIgaXMgM1wnXG5cbiAgIFNlZSAqRm9ybWF0IFN0cmluZyBTeW50YXgqIGZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZSB2YXJpb3VzXG4gICBmb3JtYXR0aW5nIG9wdGlvbnMgdGhhdCBjYW4gYmUgc3BlY2lmaWVkIGluIGZvcm1hdCBzdHJpbmdzLlxuXG5zdHIuZm9ybWF0X21hcChtYXBwaW5nKVxuXG4gICBTaW1pbGFyIHRvICJzdHIuZm9ybWF0KCoqbWFwcGluZykiLCBleGNlcHQgdGhhdCAibWFwcGluZyIgaXMgdXNlZFxuICAgZGlyZWN0bHkgYW5kIG5vdCBjb3BpZWQgdG8gYSAiZGljdCIuICBUaGlzIGlzIHVzZWZ1bCBpZiBmb3IgZXhhbXBsZVxuICAgIm1hcHBpbmciIGlzIGEgZGljdCBzdWJjbGFzczpcblxuICAgPj4+IGNsYXNzIERlZmF1bHQoZGljdCk6XG4gICAuLi4gICAgIGRlZiBfX21pc3NpbmdfXyhzZWxmLCBrZXkpOlxuICAgLi4uICAgICAgICAgcmV0dXJuIGtleVxuICAgLi4uXG4gICA+Pj4gXCd7bmFtZX0gd2FzIGJvcm4gaW4ge2NvdW50cnl9XCcuZm9ybWF0X21hcChEZWZhdWx0KG5hbWU9XCdHdWlkb1wnKSlcbiAgIFwnR3VpZG8gd2FzIGJvcm4gaW4gY291bnRyeVwnXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDMuMi5cblxuc3RyLmluZGV4KHN1YlssIHN0YXJ0WywgZW5kXV0pXG5cbiAgIExpa2UgImZpbmQoKSIsIGJ1dCByYWlzZSAiVmFsdWVFcnJvciIgd2hlbiB0aGUgc3Vic3RyaW5nIGlzIG5vdFxuICAgZm91bmQuXG5cbnN0ci5pc2FsbnVtKClcblxuICAgUmV0dXJuIHRydWUgaWYgYWxsIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZyBhcmUgYWxwaGFudW1lcmljIGFuZFxuICAgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGNoYXJhY3RlciwgZmFsc2Ugb3RoZXJ3aXNlLiAgQSBjaGFyYWN0ZXIgImMiXG4gICBpcyBhbHBoYW51bWVyaWMgaWYgb25lIG9mIHRoZSBmb2xsb3dpbmcgcmV0dXJucyAiVHJ1ZSI6XG4gICAiYy5pc2FscGhhKCkiLCAiYy5pc2RlY2ltYWwoKSIsICJjLmlzZGlnaXQoKSIsIG9yICJjLmlzbnVtZXJpYygpIi5cblxuc3RyLmlzYWxwaGEoKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiBhbGwgY2hhcmFjdGVycyBpbiB0aGUgc3RyaW5nIGFyZSBhbHBoYWJldGljIGFuZFxuICAgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGNoYXJhY3RlciwgZmFsc2Ugb3RoZXJ3aXNlLiAgQWxwaGFiZXRpY1xuICAgY2hhcmFjdGVycyBhcmUgdGhvc2UgY2hhcmFjdGVycyBkZWZpbmVkIGluIHRoZSBVbmljb2RlIGNoYXJhY3RlclxuICAgZGF0YWJhc2UgYXMgIkxldHRlciIsIGkuZS4sIHRob3NlIHdpdGggZ2VuZXJhbCBjYXRlZ29yeSBwcm9wZXJ0eVxuICAgYmVpbmcgb25lIG9mICJMbSIsICJMdCIsICJMdSIsICJMbCIsIG9yICJMbyIuICBOb3RlIHRoYXQgdGhpcyBpc1xuICAgZGlmZmVyZW50IGZyb20gdGhlICJBbHBoYWJldGljIiBwcm9wZXJ0eSBkZWZpbmVkIGluIHRoZSBVbmljb2RlXG4gICBTdGFuZGFyZC5cblxuc3RyLmlzZGVjaW1hbCgpXG5cbiAgIFJldHVybiB0cnVlIGlmIGFsbCBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmcgYXJlIGRlY2ltYWwgY2hhcmFjdGVyc1xuICAgYW5kIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIsIGZhbHNlIG90aGVyd2lzZS4gRGVjaW1hbFxuICAgY2hhcmFjdGVycyBhcmUgdGhvc2UgZnJvbSBnZW5lcmFsIGNhdGVnb3J5ICJOZCIuIFRoaXMgY2F0ZWdvcnlcbiAgIGluY2x1ZGVzIGRpZ2l0IGNoYXJhY3RlcnMsIGFuZCBhbGwgY2hhcmFjdGVycyB0aGF0IGNhbiBiZSB1c2VkIHRvXG4gICBmb3JtIGRlY2ltYWwtcmFkaXggbnVtYmVycywgZS5nLiBVKzA2NjAsIEFSQUJJQy1JTkRJQyBESUdJVCBaRVJPLlxuXG5zdHIuaXNkaWdpdCgpXG5cbiAgIFJldHVybiB0cnVlIGlmIGFsbCBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmcgYXJlIGRpZ2l0cyBhbmQgdGhlcmUgaXNcbiAgIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIsIGZhbHNlIG90aGVyd2lzZS4gIERpZ2l0cyBpbmNsdWRlIGRlY2ltYWxcbiAgIGNoYXJhY3RlcnMgYW5kIGRpZ2l0cyB0aGF0IG5lZWQgc3BlY2lhbCBoYW5kbGluZywgc3VjaCBhcyB0aGVcbiAgIGNvbXBhdGliaWxpdHkgc3VwZXJzY3JpcHQgZGlnaXRzLiAgRm9ybWFsbHksIGEgZGlnaXQgaXMgYSBjaGFyYWN0ZXJcbiAgIHRoYXQgaGFzIHRoZSBwcm9wZXJ0eSB2YWx1ZSBOdW1lcmljX1R5cGU9RGlnaXQgb3JcbiAgIE51bWVyaWNfVHlwZT1EZWNpbWFsLlxuXG5zdHIuaXNpZGVudGlmaWVyKClcblxuICAgUmV0dXJuIHRydWUgaWYgdGhlIHN0cmluZyBpcyBhIHZhbGlkIGlkZW50aWZpZXIgYWNjb3JkaW5nIHRvIHRoZVxuICAgbGFuZ3VhZ2UgZGVmaW5pdGlvbiwgc2VjdGlvbiAqSWRlbnRpZmllcnMgYW5kIGtleXdvcmRzKi5cblxuICAgVXNlICJrZXl3b3JkLmlza2V5d29yZCgpIiB0byB0ZXN0IGZvciByZXNlcnZlZCBpZGVudGlmaWVycyBzdWNoIGFzXG4gICAiZGVmIiBhbmQgImNsYXNzIi5cblxuc3RyLmlzbG93ZXIoKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiBhbGwgY2FzZWQgY2hhcmFjdGVycyBbNF0gaW4gdGhlIHN0cmluZyBhcmUgbG93ZXJjYXNlXG4gICBhbmQgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGNhc2VkIGNoYXJhY3RlciwgZmFsc2Ugb3RoZXJ3aXNlLlxuXG5zdHIuaXNudW1lcmljKClcblxuICAgUmV0dXJuIHRydWUgaWYgYWxsIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZyBhcmUgbnVtZXJpYyBjaGFyYWN0ZXJzLFxuICAgYW5kIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIsIGZhbHNlIG90aGVyd2lzZS4gTnVtZXJpY1xuICAgY2hhcmFjdGVycyBpbmNsdWRlIGRpZ2l0IGNoYXJhY3RlcnMsIGFuZCBhbGwgY2hhcmFjdGVycyB0aGF0IGhhdmVcbiAgIHRoZSBVbmljb2RlIG51bWVyaWMgdmFsdWUgcHJvcGVydHksIGUuZy4gVSsyMTU1LCBWVUxHQVIgRlJBQ1RJT05cbiAgIE9ORSBGSUZUSC4gIEZvcm1hbGx5LCBudW1lcmljIGNoYXJhY3RlcnMgYXJlIHRob3NlIHdpdGggdGhlXG4gICBwcm9wZXJ0eSB2YWx1ZSBOdW1lcmljX1R5cGU9RGlnaXQsIE51bWVyaWNfVHlwZT1EZWNpbWFsIG9yXG4gICBOdW1lcmljX1R5cGU9TnVtZXJpYy5cblxuc3RyLmlzcHJpbnRhYmxlKClcblxuICAgUmV0dXJuIHRydWUgaWYgYWxsIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZyBhcmUgcHJpbnRhYmxlIG9yIHRoZVxuICAgc3RyaW5nIGlzIGVtcHR5LCBmYWxzZSBvdGhlcndpc2UuICBOb25wcmludGFibGUgY2hhcmFjdGVycyBhcmVcbiAgIHRob3NlIGNoYXJhY3RlcnMgZGVmaW5lZCBpbiB0aGUgVW5pY29kZSBjaGFyYWN0ZXIgZGF0YWJhc2UgYXNcbiAgICJPdGhlciIgb3IgIlNlcGFyYXRvciIsIGV4Y2VwdGluZyB0aGUgQVNDSUkgc3BhY2UgKDB4MjApIHdoaWNoIGlzXG4gICBjb25zaWRlcmVkIHByaW50YWJsZS4gIChOb3RlIHRoYXQgcHJpbnRhYmxlIGNoYXJhY3RlcnMgaW4gdGhpc1xuICAgY29udGV4dCBhcmUgdGhvc2Ugd2hpY2ggc2hvdWxkIG5vdCBiZSBlc2NhcGVkIHdoZW4gInJlcHIoKSIgaXNcbiAgIGludm9rZWQgb24gYSBzdHJpbmcuICBJdCBoYXMgbm8gYmVhcmluZyBvbiB0aGUgaGFuZGxpbmcgb2Ygc3RyaW5nc1xuICAgd3JpdHRlbiB0byAic3lzLnN0ZG91dCIgb3IgInN5cy5zdGRlcnIiLilcblxuc3RyLmlzc3BhY2UoKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiB0aGVyZSBhcmUgb25seSB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZ1xuICAgYW5kIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIsIGZhbHNlIG90aGVyd2lzZS4gIFdoaXRlc3BhY2VcbiAgIGNoYXJhY3RlcnMgIGFyZSB0aG9zZSBjaGFyYWN0ZXJzIGRlZmluZWQgaW4gdGhlIFVuaWNvZGUgY2hhcmFjdGVyXG4gICBkYXRhYmFzZSBhcyAiT3RoZXIiIG9yICJTZXBhcmF0b3IiIGFuZCB0aG9zZSB3aXRoIGJpZGlyZWN0aW9uYWxcbiAgIHByb3BlcnR5IGJlaW5nIG9uZSBvZiAiV1MiLCAiQiIsIG9yICJTIi5cblxuc3RyLmlzdGl0bGUoKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiB0aGUgc3RyaW5nIGlzIGEgdGl0bGVjYXNlZCBzdHJpbmcgYW5kIHRoZXJlIGlzIGF0XG4gICBsZWFzdCBvbmUgY2hhcmFjdGVyLCBmb3IgZXhhbXBsZSB1cHBlcmNhc2UgY2hhcmFjdGVycyBtYXkgb25seVxuICAgZm9sbG93IHVuY2FzZWQgY2hhcmFjdGVycyBhbmQgbG93ZXJjYXNlIGNoYXJhY3RlcnMgb25seSBjYXNlZCBvbmVzLlxuICAgUmV0dXJuIGZhbHNlIG90aGVyd2lzZS5cblxuc3RyLmlzdXBwZXIoKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiBhbGwgY2FzZWQgY2hhcmFjdGVycyBbNF0gaW4gdGhlIHN0cmluZyBhcmUgdXBwZXJjYXNlXG4gICBhbmQgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGNhc2VkIGNoYXJhY3RlciwgZmFsc2Ugb3RoZXJ3aXNlLlxuXG5zdHIuam9pbihpdGVyYWJsZSlcblxuICAgUmV0dXJuIGEgc3RyaW5nIHdoaWNoIGlzIHRoZSBjb25jYXRlbmF0aW9uIG9mIHRoZSBzdHJpbmdzIGluIHRoZVxuICAgKml0ZXJhYmxlKiAqaXRlcmFibGUqLiAgQSAiVHlwZUVycm9yIiB3aWxsIGJlIHJhaXNlZCBpZiB0aGVyZSBhcmVcbiAgIGFueSBub24tc3RyaW5nIHZhbHVlcyBpbiAqaXRlcmFibGUqLCBpbmNsdWRpbmcgImJ5dGVzIiBvYmplY3RzLlxuICAgVGhlIHNlcGFyYXRvciBiZXR3ZWVuIGVsZW1lbnRzIGlzIHRoZSBzdHJpbmcgcHJvdmlkaW5nIHRoaXMgbWV0aG9kLlxuXG5zdHIubGp1c3Qod2lkdGhbLCBmaWxsY2hhcl0pXG5cbiAgIFJldHVybiB0aGUgc3RyaW5nIGxlZnQganVzdGlmaWVkIGluIGEgc3RyaW5nIG9mIGxlbmd0aCAqd2lkdGgqLlxuICAgUGFkZGluZyBpcyBkb25lIHVzaW5nIHRoZSBzcGVjaWZpZWQgKmZpbGxjaGFyKiAoZGVmYXVsdCBpcyBhbiBBU0NJSVxuICAgc3BhY2UpLiBUaGUgb3JpZ2luYWwgc3RyaW5nIGlzIHJldHVybmVkIGlmICp3aWR0aCogaXMgbGVzcyB0aGFuIG9yXG4gICBlcXVhbCB0byAibGVuKHMpIi5cblxuc3RyLmxvd2VyKClcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHdpdGggYWxsIHRoZSBjYXNlZCBjaGFyYWN0ZXJzIFs0XVxuICAgY29udmVydGVkIHRvIGxvd2VyY2FzZS5cblxuICAgVGhlIGxvd2VyY2FzaW5nIGFsZ29yaXRobSB1c2VkIGlzIGRlc2NyaWJlZCBpbiBzZWN0aW9uIDMuMTMgb2YgdGhlXG4gICBVbmljb2RlIFN0YW5kYXJkLlxuXG5zdHIubHN0cmlwKFtjaGFyc10pXG5cbiAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyB3aXRoIGxlYWRpbmcgY2hhcmFjdGVycyByZW1vdmVkLiAgVGhlXG4gICAqY2hhcnMqIGFyZ3VtZW50IGlzIGEgc3RyaW5nIHNwZWNpZnlpbmcgdGhlIHNldCBvZiBjaGFyYWN0ZXJzIHRvIGJlXG4gICByZW1vdmVkLiAgSWYgb21pdHRlZCBvciAiTm9uZSIsIHRoZSAqY2hhcnMqIGFyZ3VtZW50IGRlZmF1bHRzIHRvXG4gICByZW1vdmluZyB3aGl0ZXNwYWNlLiAgVGhlICpjaGFycyogYXJndW1lbnQgaXMgbm90IGEgcHJlZml4OyByYXRoZXIsXG4gICBhbGwgY29tYmluYXRpb25zIG9mIGl0cyB2YWx1ZXMgYXJlIHN0cmlwcGVkOlxuXG4gICAgICA+Pj4gXCcgICBzcGFjaW91cyAgIFwnLmxzdHJpcCgpXG4gICAgICBcJ3NwYWNpb3VzICAgXCdcbiAgICAgID4+PiBcJ3d3dy5leGFtcGxlLmNvbVwnLmxzdHJpcChcJ2Ntb3d6LlwnKVxuICAgICAgXCdleGFtcGxlLmNvbVwnXG5cbnN0YXRpYyBzdHIubWFrZXRyYW5zKHhbLCB5Wywgel1dKVxuXG4gICBUaGlzIHN0YXRpYyBtZXRob2QgcmV0dXJucyBhIHRyYW5zbGF0aW9uIHRhYmxlIHVzYWJsZSBmb3JcbiAgICJzdHIudHJhbnNsYXRlKCkiLlxuXG4gICBJZiB0aGVyZSBpcyBvbmx5IG9uZSBhcmd1bWVudCwgaXQgbXVzdCBiZSBhIGRpY3Rpb25hcnkgbWFwcGluZ1xuICAgVW5pY29kZSBvcmRpbmFscyAoaW50ZWdlcnMpIG9yIGNoYXJhY3RlcnMgKHN0cmluZ3Mgb2YgbGVuZ3RoIDEpIHRvXG4gICBVbmljb2RlIG9yZGluYWxzLCBzdHJpbmdzIChvZiBhcmJpdHJhcnkgbGVuZ3Rocykgb3IgTm9uZS5cbiAgIENoYXJhY3RlciBrZXlzIHdpbGwgdGhlbiBiZSBjb252ZXJ0ZWQgdG8gb3JkaW5hbHMuXG5cbiAgIElmIHRoZXJlIGFyZSB0d28gYXJndW1lbnRzLCB0aGV5IG11c3QgYmUgc3RyaW5ncyBvZiBlcXVhbCBsZW5ndGgsXG4gICBhbmQgaW4gdGhlIHJlc3VsdGluZyBkaWN0aW9uYXJ5LCBlYWNoIGNoYXJhY3RlciBpbiB4IHdpbGwgYmUgbWFwcGVkXG4gICB0byB0aGUgY2hhcmFjdGVyIGF0IHRoZSBzYW1lIHBvc2l0aW9uIGluIHkuICBJZiB0aGVyZSBpcyBhIHRoaXJkXG4gICBhcmd1bWVudCwgaXQgbXVzdCBiZSBhIHN0cmluZywgd2hvc2UgY2hhcmFjdGVycyB3aWxsIGJlIG1hcHBlZCB0b1xuICAgTm9uZSBpbiB0aGUgcmVzdWx0LlxuXG5zdHIucGFydGl0aW9uKHNlcClcblxuICAgU3BsaXQgdGhlIHN0cmluZyBhdCB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiAqc2VwKiwgYW5kIHJldHVybiBhXG4gICAzLXR1cGxlIGNvbnRhaW5pbmcgdGhlIHBhcnQgYmVmb3JlIHRoZSBzZXBhcmF0b3IsIHRoZSBzZXBhcmF0b3JcbiAgIGl0c2VsZiwgYW5kIHRoZSBwYXJ0IGFmdGVyIHRoZSBzZXBhcmF0b3IuICBJZiB0aGUgc2VwYXJhdG9yIGlzIG5vdFxuICAgZm91bmQsIHJldHVybiBhIDMtdHVwbGUgY29udGFpbmluZyB0aGUgc3RyaW5nIGl0c2VsZiwgZm9sbG93ZWQgYnlcbiAgIHR3byBlbXB0eSBzdHJpbmdzLlxuXG5zdHIucmVwbGFjZShvbGQsIG5ld1ssIGNvdW50XSlcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHdpdGggYWxsIG9jY3VycmVuY2VzIG9mIHN1YnN0cmluZyAqb2xkKlxuICAgcmVwbGFjZWQgYnkgKm5ldyouICBJZiB0aGUgb3B0aW9uYWwgYXJndW1lbnQgKmNvdW50KiBpcyBnaXZlbiwgb25seVxuICAgdGhlIGZpcnN0ICpjb3VudCogb2NjdXJyZW5jZXMgYXJlIHJlcGxhY2VkLlxuXG5zdHIucmZpbmQoc3ViWywgc3RhcnRbLCBlbmRdXSlcblxuICAgUmV0dXJuIHRoZSBoaWdoZXN0IGluZGV4IGluIHRoZSBzdHJpbmcgd2hlcmUgc3Vic3RyaW5nICpzdWIqIGlzXG4gICBmb3VuZCwgc3VjaCB0aGF0ICpzdWIqIGlzIGNvbnRhaW5lZCB3aXRoaW4gInNbc3RhcnQ6ZW5kXSIuXG4gICBPcHRpb25hbCBhcmd1bWVudHMgKnN0YXJ0KiBhbmQgKmVuZCogYXJlIGludGVycHJldGVkIGFzIGluIHNsaWNlXG4gICBub3RhdGlvbi4gIFJldHVybiAiLTEiIG9uIGZhaWx1cmUuXG5cbnN0ci5yaW5kZXgoc3ViWywgc3RhcnRbLCBlbmRdXSlcblxuICAgTGlrZSAicmZpbmQoKSIgYnV0IHJhaXNlcyAiVmFsdWVFcnJvciIgd2hlbiB0aGUgc3Vic3RyaW5nICpzdWIqIGlzXG4gICBub3QgZm91bmQuXG5cbnN0ci5yanVzdCh3aWR0aFssIGZpbGxjaGFyXSlcblxuICAgUmV0dXJuIHRoZSBzdHJpbmcgcmlnaHQganVzdGlmaWVkIGluIGEgc3RyaW5nIG9mIGxlbmd0aCAqd2lkdGgqLlxuICAgUGFkZGluZyBpcyBkb25lIHVzaW5nIHRoZSBzcGVjaWZpZWQgKmZpbGxjaGFyKiAoZGVmYXVsdCBpcyBhbiBBU0NJSVxuICAgc3BhY2UpLiBUaGUgb3JpZ2luYWwgc3RyaW5nIGlzIHJldHVybmVkIGlmICp3aWR0aCogaXMgbGVzcyB0aGFuIG9yXG4gICBlcXVhbCB0byAibGVuKHMpIi5cblxuc3RyLnJwYXJ0aXRpb24oc2VwKVxuXG4gICBTcGxpdCB0aGUgc3RyaW5nIGF0IHRoZSBsYXN0IG9jY3VycmVuY2Ugb2YgKnNlcCosIGFuZCByZXR1cm4gYVxuICAgMy10dXBsZSBjb250YWluaW5nIHRoZSBwYXJ0IGJlZm9yZSB0aGUgc2VwYXJhdG9yLCB0aGUgc2VwYXJhdG9yXG4gICBpdHNlbGYsIGFuZCB0aGUgcGFydCBhZnRlciB0aGUgc2VwYXJhdG9yLiAgSWYgdGhlIHNlcGFyYXRvciBpcyBub3RcbiAgIGZvdW5kLCByZXR1cm4gYSAzLXR1cGxlIGNvbnRhaW5pbmcgdHdvIGVtcHR5IHN0cmluZ3MsIGZvbGxvd2VkIGJ5XG4gICB0aGUgc3RyaW5nIGl0c2VsZi5cblxuc3RyLnJzcGxpdChzZXA9Tm9uZSwgbWF4c3BsaXQ9LTEpXG5cbiAgIFJldHVybiBhIGxpc3Qgb2YgdGhlIHdvcmRzIGluIHRoZSBzdHJpbmcsIHVzaW5nICpzZXAqIGFzIHRoZVxuICAgZGVsaW1pdGVyIHN0cmluZy4gSWYgKm1heHNwbGl0KiBpcyBnaXZlbiwgYXQgbW9zdCAqbWF4c3BsaXQqIHNwbGl0c1xuICAgYXJlIGRvbmUsIHRoZSAqcmlnaHRtb3N0KiBvbmVzLiAgSWYgKnNlcCogaXMgbm90IHNwZWNpZmllZCBvclxuICAgIk5vbmUiLCBhbnkgd2hpdGVzcGFjZSBzdHJpbmcgaXMgYSBzZXBhcmF0b3IuICBFeGNlcHQgZm9yIHNwbGl0dGluZ1xuICAgZnJvbSB0aGUgcmlnaHQsICJyc3BsaXQoKSIgYmVoYXZlcyBsaWtlICJzcGxpdCgpIiB3aGljaCBpc1xuICAgZGVzY3JpYmVkIGluIGRldGFpbCBiZWxvdy5cblxuc3RyLnJzdHJpcChbY2hhcnNdKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2l0aCB0cmFpbGluZyBjaGFyYWN0ZXJzIHJlbW92ZWQuICBUaGVcbiAgICpjaGFycyogYXJndW1lbnQgaXMgYSBzdHJpbmcgc3BlY2lmeWluZyB0aGUgc2V0IG9mIGNoYXJhY3RlcnMgdG8gYmVcbiAgIHJlbW92ZWQuICBJZiBvbWl0dGVkIG9yICJOb25lIiwgdGhlICpjaGFycyogYXJndW1lbnQgZGVmYXVsdHMgdG9cbiAgIHJlbW92aW5nIHdoaXRlc3BhY2UuICBUaGUgKmNoYXJzKiBhcmd1bWVudCBpcyBub3QgYSBzdWZmaXg7IHJhdGhlcixcbiAgIGFsbCBjb21iaW5hdGlvbnMgb2YgaXRzIHZhbHVlcyBhcmUgc3RyaXBwZWQ6XG5cbiAgICAgID4+PiBcJyAgIHNwYWNpb3VzICAgXCcucnN0cmlwKClcbiAgICAgIFwnICAgc3BhY2lvdXNcJ1xuICAgICAgPj4+IFwnbWlzc2lzc2lwcGlcJy5yc3RyaXAoXCdpcHpcJylcbiAgICAgIFwnbWlzc2lzc1wnXG5cbnN0ci5zcGxpdChzZXA9Tm9uZSwgbWF4c3BsaXQ9LTEpXG5cbiAgIFJldHVybiBhIGxpc3Qgb2YgdGhlIHdvcmRzIGluIHRoZSBzdHJpbmcsIHVzaW5nICpzZXAqIGFzIHRoZVxuICAgZGVsaW1pdGVyIHN0cmluZy4gIElmICptYXhzcGxpdCogaXMgZ2l2ZW4sIGF0IG1vc3QgKm1heHNwbGl0KlxuICAgc3BsaXRzIGFyZSBkb25lICh0aHVzLCB0aGUgbGlzdCB3aWxsIGhhdmUgYXQgbW9zdCAibWF4c3BsaXQrMSJcbiAgIGVsZW1lbnRzKS4gIElmICptYXhzcGxpdCogaXMgbm90IHNwZWNpZmllZCBvciAiLTEiLCB0aGVuIHRoZXJlIGlzXG4gICBubyBsaW1pdCBvbiB0aGUgbnVtYmVyIG9mIHNwbGl0cyAoYWxsIHBvc3NpYmxlIHNwbGl0cyBhcmUgbWFkZSkuXG5cbiAgIElmICpzZXAqIGlzIGdpdmVuLCBjb25zZWN1dGl2ZSBkZWxpbWl0ZXJzIGFyZSBub3QgZ3JvdXBlZCB0b2dldGhlclxuICAgYW5kIGFyZSBkZWVtZWQgdG8gZGVsaW1pdCBlbXB0eSBzdHJpbmdzIChmb3IgZXhhbXBsZSxcbiAgICJcJzEsLDJcJy5zcGxpdChcJyxcJykiIHJldHVybnMgIltcJzFcJywgXCdcJywgXCcyXCddIikuICBUaGUgKnNlcCogYXJndW1lbnRcbiAgIG1heSBjb25zaXN0IG9mIG11bHRpcGxlIGNoYXJhY3RlcnMgKGZvciBleGFtcGxlLFxuICAgIlwnMTw+Mjw+M1wnLnNwbGl0KFwnPD5cJykiIHJldHVybnMgIltcJzFcJywgXCcyXCcsIFwnM1wnXSIpLiBTcGxpdHRpbmcgYW5cbiAgIGVtcHR5IHN0cmluZyB3aXRoIGEgc3BlY2lmaWVkIHNlcGFyYXRvciByZXR1cm5zICJbXCdcJ10iLlxuXG4gICBGb3IgZXhhbXBsZTpcblxuICAgICAgPj4+IFwnMSwyLDNcJy5zcGxpdChcJyxcJylcbiAgICAgIFtcJzFcJywgXCcyXCcsIFwnM1wnXVxuICAgICAgPj4+IFwnMSwyLDNcJy5zcGxpdChcJyxcJywgbWF4c3BsaXQ9MSlcbiAgICAgIFtcJzFcJywgXCcyLDNcJ11cbiAgICAgID4+PiBcJzEsMiwsMyxcJy5zcGxpdChcJyxcJylcbiAgICAgIFtcJzFcJywgXCcyXCcsIFwnXCcsIFwnM1wnLCBcJ1wnXVxuXG4gICBJZiAqc2VwKiBpcyBub3Qgc3BlY2lmaWVkIG9yIGlzICJOb25lIiwgYSBkaWZmZXJlbnQgc3BsaXR0aW5nXG4gICBhbGdvcml0aG0gaXMgYXBwbGllZDogcnVucyBvZiBjb25zZWN1dGl2ZSB3aGl0ZXNwYWNlIGFyZSByZWdhcmRlZFxuICAgYXMgYSBzaW5nbGUgc2VwYXJhdG9yLCBhbmQgdGhlIHJlc3VsdCB3aWxsIGNvbnRhaW4gbm8gZW1wdHkgc3RyaW5nc1xuICAgYXQgdGhlIHN0YXJ0IG9yIGVuZCBpZiB0aGUgc3RyaW5nIGhhcyBsZWFkaW5nIG9yIHRyYWlsaW5nXG4gICB3aGl0ZXNwYWNlLiAgQ29uc2VxdWVudGx5LCBzcGxpdHRpbmcgYW4gZW1wdHkgc3RyaW5nIG9yIGEgc3RyaW5nXG4gICBjb25zaXN0aW5nIG9mIGp1c3Qgd2hpdGVzcGFjZSB3aXRoIGEgIk5vbmUiIHNlcGFyYXRvciByZXR1cm5zICJbXSIuXG5cbiAgIEZvciBleGFtcGxlOlxuXG4gICAgICA+Pj4gXCcxIDIgM1wnLnNwbGl0KClcbiAgICAgIFtcJzFcJywgXCcyXCcsIFwnM1wnXVxuICAgICAgPj4+IFwnMSAyIDNcJy5zcGxpdChtYXhzcGxpdD0xKVxuICAgICAgW1wnMVwnLCBcJzIgM1wnXVxuICAgICAgPj4+IFwnICAgMSAgIDIgICAzICAgXCcuc3BsaXQoKVxuICAgICAgW1wnMVwnLCBcJzJcJywgXCczXCddXG5cbnN0ci5zcGxpdGxpbmVzKFtrZWVwZW5kc10pXG5cbiAgIFJldHVybiBhIGxpc3Qgb2YgdGhlIGxpbmVzIGluIHRoZSBzdHJpbmcsIGJyZWFraW5nIGF0IGxpbmVcbiAgIGJvdW5kYXJpZXMuICBMaW5lIGJyZWFrcyBhcmUgbm90IGluY2x1ZGVkIGluIHRoZSByZXN1bHRpbmcgbGlzdFxuICAgdW5sZXNzICprZWVwZW5kcyogaXMgZ2l2ZW4gYW5kIHRydWUuXG5cbiAgIFRoaXMgbWV0aG9kIHNwbGl0cyBvbiB0aGUgZm9sbG93aW5nIGxpbmUgYm91bmRhcmllcy4gIEluXG4gICBwYXJ0aWN1bGFyLCB0aGUgYm91bmRhcmllcyBhcmUgYSBzdXBlcnNldCBvZiAqdW5pdmVyc2FsIG5ld2xpbmVzKi5cblxuICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgUmVwcmVzZW50YXRpb24gICAgICAgICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICB8XG4gICArPT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09K1xuICAgfCAiXFxuIiAgICAgICAgICAgICAgICAgICAgfCBMaW5lIEZlZWQgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCAiXFxyIiAgICAgICAgICAgICAgICAgICAgfCBDYXJyaWFnZSBSZXR1cm4gICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCAiXFxyXFxuIiAgICAgICAgICAgICAgICAgIHwgQ2FycmlhZ2UgUmV0dXJuICsgTGluZSBGZWVkICAgfFxuICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgIlxcdiIgb3IgIlxceDBiIiAgICAgICAgICB8IExpbmUgVGFidWxhdGlvbiAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8ICJcXGYiIG9yICJcXHgwYyIgICAgICAgICAgfCBGb3JtIEZlZWQgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCAiXFx4MWMiICAgICAgICAgICAgICAgICAgfCBGaWxlIFNlcGFyYXRvciAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCAiXFx4MWQiICAgICAgICAgICAgICAgICAgfCBHcm91cCBTZXBhcmF0b3IgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCAiXFx4MWUiICAgICAgICAgICAgICAgICAgfCBSZWNvcmQgU2VwYXJhdG9yICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCAiXFx4ODUiICAgICAgICAgICAgICAgICAgfCBOZXh0IExpbmUgKEMxIENvbnRyb2wgQ29kZSkgICB8XG4gICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCAiXFx1MjAyOCIgICAgICAgICAgICAgICAgfCBMaW5lIFNlcGFyYXRvciAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCAiXFx1MjAyOSIgICAgICAgICAgICAgICAgfCBQYXJhZ3JhcGggU2VwYXJhdG9yICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuXG4gICBDaGFuZ2VkIGluIHZlcnNpb24gMy4yOiAiXFx2IiBhbmQgIlxcZiIgYWRkZWQgdG8gbGlzdCBvZiBsaW5lXG4gICBib3VuZGFyaWVzLlxuXG4gICBGb3IgZXhhbXBsZTpcblxuICAgICAgPj4+IFwnYWIgY1xcblxcbmRlIGZnXFxya2xcXHJcXG5cJy5zcGxpdGxpbmVzKClcbiAgICAgIFtcJ2FiIGNcJywgXCdcJywgXCdkZSBmZ1wnLCBcJ2tsXCddXG4gICAgICA+Pj4gXCdhYiBjXFxuXFxuZGUgZmdcXHJrbFxcclxcblwnLnNwbGl0bGluZXMoa2VlcGVuZHM9VHJ1ZSlcbiAgICAgIFtcJ2FiIGNcXG5cJywgXCdcXG5cJywgXCdkZSBmZ1xcclwnLCBcJ2tsXFxyXFxuXCddXG5cbiAgIFVubGlrZSAic3BsaXQoKSIgd2hlbiBhIGRlbGltaXRlciBzdHJpbmcgKnNlcCogaXMgZ2l2ZW4sIHRoaXNcbiAgIG1ldGhvZCByZXR1cm5zIGFuIGVtcHR5IGxpc3QgZm9yIHRoZSBlbXB0eSBzdHJpbmcsIGFuZCBhIHRlcm1pbmFsXG4gICBsaW5lIGJyZWFrIGRvZXMgbm90IHJlc3VsdCBpbiBhbiBleHRyYSBsaW5lOlxuXG4gICAgICA+Pj4gIiIuc3BsaXRsaW5lcygpXG4gICAgICBbXVxuICAgICAgPj4+ICJPbmUgbGluZVxcbiIuc3BsaXRsaW5lcygpXG4gICAgICBbXCdPbmUgbGluZVwnXVxuXG4gICBGb3IgY29tcGFyaXNvbiwgInNwbGl0KFwnXFxuXCcpIiBnaXZlczpcblxuICAgICAgPj4+IFwnXCcuc3BsaXQoXCdcXG5cJylcbiAgICAgIFtcJ1wnXVxuICAgICAgPj4+IFwnVHdvIGxpbmVzXFxuXCcuc3BsaXQoXCdcXG5cJylcbiAgICAgIFtcJ1R3byBsaW5lc1wnLCBcJ1wnXVxuXG5zdHIuc3RhcnRzd2l0aChwcmVmaXhbLCBzdGFydFssIGVuZF1dKVxuXG4gICBSZXR1cm4gIlRydWUiIGlmIHN0cmluZyBzdGFydHMgd2l0aCB0aGUgKnByZWZpeCosIG90aGVyd2lzZSByZXR1cm5cbiAgICJGYWxzZSIuICpwcmVmaXgqIGNhbiBhbHNvIGJlIGEgdHVwbGUgb2YgcHJlZml4ZXMgdG8gbG9vayBmb3IuXG4gICBXaXRoIG9wdGlvbmFsICpzdGFydCosIHRlc3Qgc3RyaW5nIGJlZ2lubmluZyBhdCB0aGF0IHBvc2l0aW9uLlxuICAgV2l0aCBvcHRpb25hbCAqZW5kKiwgc3RvcCBjb21wYXJpbmcgc3RyaW5nIGF0IHRoYXQgcG9zaXRpb24uXG5cbnN0ci5zdHJpcChbY2hhcnNdKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2l0aCB0aGUgbGVhZGluZyBhbmQgdHJhaWxpbmdcbiAgIGNoYXJhY3RlcnMgcmVtb3ZlZC4gVGhlICpjaGFycyogYXJndW1lbnQgaXMgYSBzdHJpbmcgc3BlY2lmeWluZyB0aGVcbiAgIHNldCBvZiBjaGFyYWN0ZXJzIHRvIGJlIHJlbW92ZWQuIElmIG9taXR0ZWQgb3IgIk5vbmUiLCB0aGUgKmNoYXJzKlxuICAgYXJndW1lbnQgZGVmYXVsdHMgdG8gcmVtb3Zpbmcgd2hpdGVzcGFjZS4gVGhlICpjaGFycyogYXJndW1lbnQgaXNcbiAgIG5vdCBhIHByZWZpeCBvciBzdWZmaXg7IHJhdGhlciwgYWxsIGNvbWJpbmF0aW9ucyBvZiBpdHMgdmFsdWVzIGFyZVxuICAgc3RyaXBwZWQ6XG5cbiAgICAgID4+PiBcJyAgIHNwYWNpb3VzICAgXCcuc3RyaXAoKVxuICAgICAgXCdzcGFjaW91c1wnXG4gICAgICA+Pj4gXCd3d3cuZXhhbXBsZS5jb21cJy5zdHJpcChcJ2Ntb3d6LlwnKVxuICAgICAgXCdleGFtcGxlXCdcblxuc3RyLnN3YXBjYXNlKClcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHdpdGggdXBwZXJjYXNlIGNoYXJhY3RlcnMgY29udmVydGVkIHRvXG4gICBsb3dlcmNhc2UgYW5kIHZpY2UgdmVyc2EuIE5vdGUgdGhhdCBpdCBpcyBub3QgbmVjZXNzYXJpbHkgdHJ1ZSB0aGF0XG4gICAicy5zd2FwY2FzZSgpLnN3YXBjYXNlKCkgPT0gcyIuXG5cbnN0ci50aXRsZSgpXG5cbiAgIFJldHVybiBhIHRpdGxlY2FzZWQgdmVyc2lvbiBvZiB0aGUgc3RyaW5nIHdoZXJlIHdvcmRzIHN0YXJ0IHdpdGggYW5cbiAgIHVwcGVyY2FzZSBjaGFyYWN0ZXIgYW5kIHRoZSByZW1haW5pbmcgY2hhcmFjdGVycyBhcmUgbG93ZXJjYXNlLlxuXG4gICBGb3IgZXhhbXBsZTpcblxuICAgICAgPj4+IFwnSGVsbG8gd29ybGRcJy50aXRsZSgpXG4gICAgICBcJ0hlbGxvIFdvcmxkXCdcblxuICAgVGhlIGFsZ29yaXRobSB1c2VzIGEgc2ltcGxlIGxhbmd1YWdlLWluZGVwZW5kZW50IGRlZmluaXRpb24gb2YgYVxuICAgd29yZCBhcyBncm91cHMgb2YgY29uc2VjdXRpdmUgbGV0dGVycy4gIFRoZSBkZWZpbml0aW9uIHdvcmtzIGluXG4gICBtYW55IGNvbnRleHRzIGJ1dCBpdCBtZWFucyB0aGF0IGFwb3N0cm9waGVzIGluIGNvbnRyYWN0aW9ucyBhbmRcbiAgIHBvc3Nlc3NpdmVzIGZvcm0gd29yZCBib3VuZGFyaWVzLCB3aGljaCBtYXkgbm90IGJlIHRoZSBkZXNpcmVkXG4gICByZXN1bHQ6XG5cbiAgICAgID4+PiAidGhleVwncmUgYmlsbFwncyBmcmllbmRzIGZyb20gdGhlIFVLIi50aXRsZSgpXG4gICAgICAiVGhleVwnUmUgQmlsbFwnUyBGcmllbmRzIEZyb20gVGhlIFVrIlxuXG4gICBBIHdvcmthcm91bmQgZm9yIGFwb3N0cm9waGVzIGNhbiBiZSBjb25zdHJ1Y3RlZCB1c2luZyByZWd1bGFyXG4gICBleHByZXNzaW9uczpcblxuICAgICAgPj4+IGltcG9ydCByZVxuICAgICAgPj4+IGRlZiB0aXRsZWNhc2Uocyk6XG4gICAgICAuLi4gICAgIHJldHVybiByZS5zdWIociJbQS1aYS16XSsoXCdbQS1aYS16XSspPyIsXG4gICAgICAuLi4gICAgICAgICAgICAgICAgICAgbGFtYmRhIG1vOiBtby5ncm91cCgwKVswXS51cHBlcigpICtcbiAgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vLmdyb3VwKDApWzE6XS5sb3dlcigpLFxuICAgICAgLi4uICAgICAgICAgICAgICAgICAgIHMpXG4gICAgICAuLi5cbiAgICAgID4+PiB0aXRsZWNhc2UoInRoZXlcJ3JlIGJpbGxcJ3MgZnJpZW5kcy4iKVxuICAgICAgIlRoZXlcJ3JlIEJpbGxcJ3MgRnJpZW5kcy4iXG5cbnN0ci50cmFuc2xhdGUodGFibGUpXG5cbiAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyBpbiB3aGljaCBlYWNoIGNoYXJhY3RlciBoYXMgYmVlbiBtYXBwZWRcbiAgIHRocm91Z2ggdGhlIGdpdmVuIHRyYW5zbGF0aW9uIHRhYmxlLiAgVGhlIHRhYmxlIG11c3QgYmUgYW4gb2JqZWN0XG4gICB0aGF0IGltcGxlbWVudHMgaW5kZXhpbmcgdmlhICJfX2dldGl0ZW1fXygpIiwgdHlwaWNhbGx5IGEgKm1hcHBpbmcqXG4gICBvciAqc2VxdWVuY2UqLiAgV2hlbiBpbmRleGVkIGJ5IGEgVW5pY29kZSBvcmRpbmFsIChhbiBpbnRlZ2VyKSwgdGhlXG4gICB0YWJsZSBvYmplY3QgY2FuIGRvIGFueSBvZiB0aGUgZm9sbG93aW5nOiByZXR1cm4gYSBVbmljb2RlIG9yZGluYWxcbiAgIG9yIGEgc3RyaW5nLCB0byBtYXAgdGhlIGNoYXJhY3RlciB0byBvbmUgb3IgbW9yZSBvdGhlciBjaGFyYWN0ZXJzO1xuICAgcmV0dXJuICJOb25lIiwgdG8gZGVsZXRlIHRoZSBjaGFyYWN0ZXIgZnJvbSB0aGUgcmV0dXJuIHN0cmluZzsgb3JcbiAgIHJhaXNlIGEgIkxvb2t1cEVycm9yIiBleGNlcHRpb24sIHRvIG1hcCB0aGUgY2hhcmFjdGVyIHRvIGl0c2VsZi5cblxuICAgWW91IGNhbiB1c2UgInN0ci5tYWtldHJhbnMoKSIgdG8gY3JlYXRlIGEgdHJhbnNsYXRpb24gbWFwIGZyb21cbiAgIGNoYXJhY3Rlci10by1jaGFyYWN0ZXIgbWFwcGluZ3MgaW4gZGlmZmVyZW50IGZvcm1hdHMuXG5cbiAgIFNlZSBhbHNvIHRoZSAiY29kZWNzIiBtb2R1bGUgZm9yIGEgbW9yZSBmbGV4aWJsZSBhcHByb2FjaCB0byBjdXN0b21cbiAgIGNoYXJhY3RlciBtYXBwaW5ncy5cblxuc3RyLnVwcGVyKClcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHdpdGggYWxsIHRoZSBjYXNlZCBjaGFyYWN0ZXJzIFs0XVxuICAgY29udmVydGVkIHRvIHVwcGVyY2FzZS4gIE5vdGUgdGhhdCAic3RyLnVwcGVyKCkuaXN1cHBlcigpIiBtaWdodCBiZVxuICAgIkZhbHNlIiBpZiAicyIgY29udGFpbnMgdW5jYXNlZCBjaGFyYWN0ZXJzIG9yIGlmIHRoZSBVbmljb2RlXG4gICBjYXRlZ29yeSBvZiB0aGUgcmVzdWx0aW5nIGNoYXJhY3RlcihzKSBpcyBub3QgIkx1IiAoTGV0dGVyLFxuICAgdXBwZXJjYXNlKSwgYnV0IGUuZy4gIkx0IiAoTGV0dGVyLCB0aXRsZWNhc2UpLlxuXG4gICBUaGUgdXBwZXJjYXNpbmcgYWxnb3JpdGhtIHVzZWQgaXMgZGVzY3JpYmVkIGluIHNlY3Rpb24gMy4xMyBvZiB0aGVcbiAgIFVuaWNvZGUgU3RhbmRhcmQuXG5cbnN0ci56ZmlsbCh3aWR0aClcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIGxlZnQgZmlsbGVkIHdpdGggQVNDSUkgIlwnMFwnIiBkaWdpdHMgdG9cbiAgIG1ha2UgYSBzdHJpbmcgb2YgbGVuZ3RoICp3aWR0aCouIEEgbGVhZGluZyBzaWduIHByZWZpeFxuICAgKCJcJytcJyIvIlwnLVwnIikgaXMgaGFuZGxlZCBieSBpbnNlcnRpbmcgdGhlIHBhZGRpbmcgKmFmdGVyKiB0aGUgc2lnblxuICAgY2hhcmFjdGVyIHJhdGhlciB0aGFuIGJlZm9yZS4gVGhlIG9yaWdpbmFsIHN0cmluZyBpcyByZXR1cm5lZCBpZlxuICAgKndpZHRoKiBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gImxlbihzKSIuXG5cbiAgIEZvciBleGFtcGxlOlxuXG4gICAgICA+Pj4gIjQyIi56ZmlsbCg1KVxuICAgICAgXCcwMDA0MlwnXG4gICAgICA+Pj4gIi00MiIuemZpbGwoNSlcbiAgICAgIFwnLTAwNDJcJ1xuJywKKyAnc3RyaW5ncyc6IHUnXG5TdHJpbmcgYW5kIEJ5dGVzIGxpdGVyYWxzXG4qKioqKioqKioqKioqKioqKioqKioqKioqXG5cblN0cmluZyBsaXRlcmFscyBhcmUgZGVzY3JpYmVkIGJ5IHRoZSBmb2xsb3dpbmcgbGV4aWNhbCBkZWZpbml0aW9uczpcblxuICAgc3RyaW5nbGl0ZXJhbCAgIDo6PSBbc3RyaW5ncHJlZml4XShzaG9ydHN0cmluZyB8IGxvbmdzdHJpbmcpXG4gICBzdHJpbmdwcmVmaXggICAgOjo9ICJyIiB8ICJ1IiB8ICJSIiB8ICJVIlxuICAgc2hvcnRzdHJpbmcgICAgIDo6PSAiXCciIHNob3J0c3RyaW5naXRlbSogIlwnIiB8IFwnIlwnIHNob3J0c3RyaW5naXRlbSogXCciXCdcbiAgIGxvbmdzdHJpbmcgICAgICA6Oj0gIlwnXCdcJyIgbG9uZ3N0cmluZ2l0ZW0qICJcJ1wnXCciIHwgXCciIiJcJyBsb25nc3RyaW5naXRlbSogXCciIiJcJ1xuICAgc2hvcnRzdHJpbmdpdGVtIDo6PSBzaG9ydHN0cmluZ2NoYXIgfCBzdHJpbmdlc2NhcGVzZXFcbiAgIGxvbmdzdHJpbmdpdGVtICA6Oj0gbG9uZ3N0cmluZ2NoYXIgfCBzdHJpbmdlc2NhcGVzZXFcbiAgIHNob3J0c3RyaW5nY2hhciA6Oj0gPGFueSBzb3VyY2UgY2hhcmFjdGVyIGV4Y2VwdCAiXFwiIG9yIG5ld2xpbmUgb3IgdGhlIHF1b3RlPlxuICAgbG9uZ3N0cmluZ2NoYXIgIDo6PSA8YW55IHNvdXJjZSBjaGFyYWN0ZXIgZXhjZXB0ICJcXCI+XG4gICBzdHJpbmdlc2NhcGVzZXEgOjo9ICJcXCIgPGFueSBzb3VyY2UgY2hhcmFjdGVyPlxuXG4gICBieXRlc2xpdGVyYWwgICA6Oj0gYnl0ZXNwcmVmaXgoc2hvcnRieXRlcyB8IGxvbmdieXRlcylcbiAgIGJ5dGVzcHJlZml4ICAgIDo6PSAiYiIgfCAiQiIgfCAiYnIiIHwgIkJyIiB8ICJiUiIgfCAiQlIiIHwgInJiIiB8ICJyQiIgfCAiUmIiIHwgIlJCIlxuICAgc2hvcnRieXRlcyAgICAgOjo9ICJcJyIgc2hvcnRieXRlc2l0ZW0qICJcJyIgfCBcJyJcJyBzaG9ydGJ5dGVzaXRlbSogXCciXCdcbiAgIGxvbmdieXRlcyAgICAgIDo6PSAiXCdcJ1wnIiBsb25nYnl0ZXNpdGVtKiAiXCdcJ1wnIiB8IFwnIiIiXCcgbG9uZ2J5dGVzaXRlbSogXCciIiJcJ1xuICAgc2hvcnRieXRlc2l0ZW0gOjo9IHNob3J0Ynl0ZXNjaGFyIHwgYnl0ZXNlc2NhcGVzZXFcbiAgIGxvbmdieXRlc2l0ZW0gIDo6PSBsb25nYnl0ZXNjaGFyIHwgYnl0ZXNlc2NhcGVzZXFcbiAgIHNob3J0Ynl0ZXNjaGFyIDo6PSA8YW55IEFTQ0lJIGNoYXJhY3RlciBleGNlcHQgIlxcIiBvciBuZXdsaW5lIG9yIHRoZSBxdW90ZT5cbiAgIGxvbmdieXRlc2NoYXIgIDo6PSA8YW55IEFTQ0lJIGNoYXJhY3RlciBleGNlcHQgIlxcIj5cbiAgIGJ5dGVzZXNjYXBlc2VxIDo6PSAiXFwiIDxhbnkgQVNDSUkgY2hhcmFjdGVyPlxuXG5PbmUgc3ludGFjdGljIHJlc3RyaWN0aW9uIG5vdCBpbmRpY2F0ZWQgYnkgdGhlc2UgcHJvZHVjdGlvbnMgaXMgdGhhdFxud2hpdGVzcGFjZSBpcyBub3QgYWxsb3dlZCBiZXR3ZWVuIHRoZSAic3RyaW5ncHJlZml4IiBvciAiYnl0ZXNwcmVmaXgiXG5hbmQgdGhlIHJlc3Qgb2YgdGhlIGxpdGVyYWwuIFRoZSBzb3VyY2UgY2hhcmFjdGVyIHNldCBpcyBkZWZpbmVkIGJ5XG50aGUgZW5jb2RpbmcgZGVjbGFyYXRpb247IGl0IGlzIFVURi04IGlmIG5vIGVuY29kaW5nIGRlY2xhcmF0aW9uIGlzXG5naXZlbiBpbiB0aGUgc291cmNlIGZpbGU7IHNlZSBzZWN0aW9uICpFbmNvZGluZyBkZWNsYXJhdGlvbnMqLlxuXG5JbiBwbGFpbiBFbmdsaXNoOiBCb3RoIHR5cGVzIG9mIGxpdGVyYWxzIGNhbiBiZSBlbmNsb3NlZCBpbiBtYXRjaGluZ1xuc2luZ2xlIHF1b3RlcyAoIlwnIikgb3IgZG91YmxlIHF1b3RlcyAoIiIiKS4gIFRoZXkgY2FuIGFsc28gYmUgZW5jbG9zZWRcbmluIG1hdGNoaW5nIGdyb3VwcyBvZiB0aHJlZSBzaW5nbGUgb3IgZG91YmxlIHF1b3RlcyAodGhlc2UgYXJlXG5nZW5lcmFsbHkgcmVmZXJyZWQgdG8gYXMgKnRyaXBsZS1xdW90ZWQgc3RyaW5ncyopLiAgVGhlIGJhY2tzbGFzaFxuKCJcXCIpIGNoYXJhY3RlciBpcyB1c2VkIHRvIGVzY2FwZSBjaGFyYWN0ZXJzIHRoYXQgb3RoZXJ3aXNlIGhhdmUgYVxuc3BlY2lhbCBtZWFuaW5nLCBzdWNoIGFzIG5ld2xpbmUsIGJhY2tzbGFzaCBpdHNlbGYsIG9yIHRoZSBxdW90ZVxuY2hhcmFjdGVyLlxuXG5CeXRlcyBsaXRlcmFscyBhcmUgYWx3YXlzIHByZWZpeGVkIHdpdGggIlwnYlwnIiBvciAiXCdCXCciOyB0aGV5IHByb2R1Y2VcbmFuIGluc3RhbmNlIG9mIHRoZSAiYnl0ZXMiIHR5cGUgaW5zdGVhZCBvZiB0aGUgInN0ciIgdHlwZS4gIFRoZXkgbWF5XG5vbmx5IGNvbnRhaW4gQVNDSUkgY2hhcmFjdGVyczsgYnl0ZXMgd2l0aCBhIG51bWVyaWMgdmFsdWUgb2YgMTI4IG9yXG5ncmVhdGVyIG11c3QgYmUgZXhwcmVzc2VkIHdpdGggZXNjYXBlcy5cblxuQXMgb2YgUHl0aG9uIDMuMyBpdCBpcyBwb3NzaWJsZSBhZ2FpbiB0byBwcmVmaXggc3RyaW5nIGxpdGVyYWxzIHdpdGggYVxuInUiIHByZWZpeCB0byBzaW1wbGlmeSBtYWludGVuYW5jZSBvZiBkdWFsIDIueCBhbmQgMy54IGNvZGViYXNlcy5cblxuQm90aCBzdHJpbmcgYW5kIGJ5dGVzIGxpdGVyYWxzIG1heSBvcHRpb25hbGx5IGJlIHByZWZpeGVkIHdpdGggYVxubGV0dGVyICJcJ3JcJyIgb3IgIlwnUlwnIjsgc3VjaCBzdHJpbmdzIGFyZSBjYWxsZWQgKnJhdyBzdHJpbmdzKiBhbmQgdHJlYXRcbmJhY2tzbGFzaGVzIGFzIGxpdGVyYWwgY2hhcmFjdGVycy4gIEFzIGEgcmVzdWx0LCBpbiBzdHJpbmcgbGl0ZXJhbHMsXG4iXCdcXFVcJyIgYW5kICJcJ1xcdVwnIiBlc2NhcGVzIGluIHJhdyBzdHJpbmdzIGFyZSBub3QgdHJlYXRlZCBzcGVjaWFsbHkuXG5HaXZlbiB0aGF0IFB5dGhvbiAyLnhcJ3MgcmF3IHVuaWNvZGUgbGl0ZXJhbHMgYmVoYXZlIGRpZmZlcmVudGx5IHRoYW5cblB5dGhvbiAzLnhcJ3MgdGhlICJcJ3VyXCciIHN5bnRheCBpcyBub3Qgc3VwcG9ydGVkLlxuXG5OZXcgaW4gdmVyc2lvbiAzLjM6IFRoZSAiXCdyYlwnIiBwcmVmaXggb2YgcmF3IGJ5dGVzIGxpdGVyYWxzIGhhcyBiZWVuXG5hZGRlZCBhcyBhIHN5bm9ueW0gb2YgIlwnYnJcJyIuXG5cbk5ldyBpbiB2ZXJzaW9uIDMuMzogU3VwcG9ydCBmb3IgdGhlIHVuaWNvZGUgbGVnYWN5IGxpdGVyYWxcbigidVwndmFsdWVcJyIpIHdhcyByZWludHJvZHVjZWQgdG8gc2ltcGxpZnkgdGhlIG1haW50ZW5hbmNlIG9mIGR1YWxcblB5dGhvbiAyLnggYW5kIDMueCBjb2RlYmFzZXMuIFNlZSAqKlBFUCA0MTQqKiBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cblxuSW4gdHJpcGxlLXF1b3RlZCBsaXRlcmFscywgdW5lc2NhcGVkIG5ld2xpbmVzIGFuZCBxdW90ZXMgYXJlIGFsbG93ZWRcbihhbmQgYXJlIHJldGFpbmVkKSwgZXhjZXB0IHRoYXQgdGhyZWUgdW5lc2NhcGVkIHF1b3RlcyBpbiBhIHJvd1xudGVybWluYXRlIHRoZSBsaXRlcmFsLiAgKEEgInF1b3RlIiBpcyB0aGUgY2hhcmFjdGVyIHVzZWQgdG8gb3BlbiB0aGVcbmxpdGVyYWwsIGkuZS4gZWl0aGVyICJcJyIgb3IgIiIiLilcblxuVW5sZXNzIGFuICJcJ3JcJyIgb3IgIlwnUlwnIiBwcmVmaXggaXMgcHJlc2VudCwgZXNjYXBlIHNlcXVlbmNlcyBpbiBzdHJpbmdcbmFuZCBieXRlcyBsaXRlcmFscyBhcmUgaW50ZXJwcmV0ZWQgYWNjb3JkaW5nIHRvIHJ1bGVzIHNpbWlsYXIgdG8gdGhvc2VcbnVzZWQgYnkgU3RhbmRhcmQgQy4gIFRoZSByZWNvZ25pemVkIGVzY2FwZSBzZXF1ZW5jZXMgYXJlOlxuXG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58IEVzY2FwZSBTZXF1ZW5jZSAgIHwgTWVhbmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTm90ZXMgICB8XG4rPT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT0rXG58ICJcXG5ld2xpbmUiICAgICAgICB8IEJhY2tzbGFzaCBhbmQgbmV3bGluZSBpZ25vcmVkICAgICB8ICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCAiXFxcXCIgICAgICAgICAgICAgIHwgQmFja3NsYXNoICgiXFwiKSAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCAiXFxcJyIgICAgICAgICAgICAgIHwgU2luZ2xlIHF1b3RlICgiXCciKSAgICAgICAgICAgICAgICB8ICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCAiXFwiIiAgICAgICAgICAgICAgfCBEb3VibGUgcXVvdGUgKCIiIikgICAgICAgICAgICAgICAgfCAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgIlxcYSIgICAgICAgICAgICAgIHwgQVNDSUkgQmVsbCAoQkVMKSAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58ICJcXGIiICAgICAgICAgICAgICB8IEFTQ0lJIEJhY2tzcGFjZSAoQlMpICAgICAgICAgICAgICB8ICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCAiXFxmIiAgICAgICAgICAgICAgfCBBU0NJSSBGb3JtZmVlZCAoRkYpICAgICAgICAgICAgICAgfCAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgIlxcbiIgICAgICAgICAgICAgIHwgQVNDSUkgTGluZWZlZWQgKExGKSAgICAgICAgICAgICAgIHwgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58ICJcXHIiICAgICAgICAgICAgICB8IEFTQ0lJIENhcnJpYWdlIFJldHVybiAoQ1IpICAgICAgICB8ICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCAiXFx0IiAgICAgICAgICAgICAgfCBBU0NJSSBIb3Jpem9udGFsIFRhYiAoVEFCKSAgICAgICAgfCAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgIlxcdiIgICAgICAgICAgICAgIHwgQVNDSUkgVmVydGljYWwgVGFiIChWVCkgICAgICAgICAgIHwgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58ICJcXG9vbyIgICAgICAgICAgICB8IENoYXJhY3RlciB3aXRoIG9jdGFsIHZhbHVlICpvb28qICB8ICgxLDMpICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCAiXFx4aGgiICAgICAgICAgICAgfCBDaGFyYWN0ZXIgd2l0aCBoZXggdmFsdWUgKmhoKiAgICAgfCAoMiwzKSAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcblxuRXNjYXBlIHNlcXVlbmNlcyBvbmx5IHJlY29nbml6ZWQgaW4gc3RyaW5nIGxpdGVyYWxzIGFyZTpcblxuKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCBFc2NhcGUgU2VxdWVuY2UgICB8IE1lYW5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE5vdGVzICAgfFxuKz09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09K1xufCAiXFxOe25hbWV9IiAgICAgICAgfCBDaGFyYWN0ZXIgbmFtZWQgKm5hbWUqIGluIHRoZSAgICAgfCAoNCkgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgfCBVbmljb2RlIGRhdGFiYXNlICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgIlxcdXh4eHgiICAgICAgICAgIHwgQ2hhcmFjdGVyIHdpdGggMTYtYml0IGhleCB2YWx1ZSAgIHwgKDUpICAgICB8XG58ICAgICAgICAgICAgICAgICAgIHwgKnh4eHgqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58ICJcXFV4eHh4eHh4eCIgICAgICB8IENoYXJhY3RlciB3aXRoIDMyLWJpdCBoZXggdmFsdWUgICB8ICg2KSAgICAgfFxufCAgICAgICAgICAgICAgICAgICB8ICp4eHh4eHh4eCogICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xuXG5Ob3RlczpcblxuMS4gQXMgaW4gU3RhbmRhcmQgQywgdXAgdG8gdGhyZWUgb2N0YWwgZGlnaXRzIGFyZSBhY2NlcHRlZC5cblxuMi4gVW5saWtlIGluIFN0YW5kYXJkIEMsIGV4YWN0bHkgdHdvIGhleCBkaWdpdHMgYXJlIHJlcXVpcmVkLlxuXG4zLiBJbiBhIGJ5dGVzIGxpdGVyYWwsIGhleGFkZWNpbWFsIGFuZCBvY3RhbCBlc2NhcGVzIGRlbm90ZSB0aGVcbiAgIGJ5dGUgd2l0aCB0aGUgZ2l2ZW4gdmFsdWUuIEluIGEgc3RyaW5nIGxpdGVyYWwsIHRoZXNlIGVzY2FwZXNcbiAgIGRlbm90ZSBhIFVuaWNvZGUgY2hhcmFjdGVyIHdpdGggdGhlIGdpdmVuIHZhbHVlLlxuXG40LiBDaGFuZ2VkIGluIHZlcnNpb24gMy4zOiBTdXBwb3J0IGZvciBuYW1lIGFsaWFzZXMgWzFdIGhhcyBiZWVuXG4gICBhZGRlZC5cblxuNS4gSW5kaXZpZHVhbCBjb2RlIHVuaXRzIHdoaWNoIGZvcm0gcGFydHMgb2YgYSBzdXJyb2dhdGUgcGFpciBjYW5cbiAgIGJlIGVuY29kZWQgdXNpbmcgdGhpcyBlc2NhcGUgc2VxdWVuY2UuICBFeGFjdGx5IGZvdXIgaGV4IGRpZ2l0cyBhcmVcbiAgIHJlcXVpcmVkLlxuXG42LiBBbnkgVW5pY29kZSBjaGFyYWN0ZXIgY2FuIGJlIGVuY29kZWQgdGhpcyB3YXkuICBFeGFjdGx5IGVpZ2h0XG4gICBoZXggZGlnaXRzIGFyZSByZXF1aXJlZC5cblxuVW5saWtlIFN0YW5kYXJkIEMsIGFsbCB1bnJlY29nbml6ZWQgZXNjYXBlIHNlcXVlbmNlcyBhcmUgbGVmdCBpbiB0aGVcbnN0cmluZyB1bmNoYW5nZWQsIGkuZS4sICp0aGUgYmFja3NsYXNoIGlzIGxlZnQgaW4gdGhlIHJlc3VsdCouICAoVGhpc1xuYmVoYXZpb3IgaXMgdXNlZnVsIHdoZW4gZGVidWdnaW5nOiBpZiBhbiBlc2NhcGUgc2VxdWVuY2UgaXMgbWlzdHlwZWQsXG50aGUgcmVzdWx0aW5nIG91dHB1dCBpcyBtb3JlIGVhc2lseSByZWNvZ25pemVkIGFzIGJyb2tlbi4pICBJdCBpcyBhbHNvXG5pbXBvcnRhbnQgdG8gbm90ZSB0aGF0IHRoZSBlc2NhcGUgc2VxdWVuY2VzIG9ubHkgcmVjb2duaXplZCBpbiBzdHJpbmdcbmxpdGVyYWxzIGZhbGwgaW50byB0aGUgY2F0ZWdvcnkgb2YgdW5yZWNvZ25pemVkIGVzY2FwZXMgZm9yIGJ5dGVzXG5saXRlcmFscy5cblxuRXZlbiBpbiBhIHJhdyBsaXRlcmFsLCBxdW90ZXMgY2FuIGJlIGVzY2FwZWQgd2l0aCBhIGJhY2tzbGFzaCwgYnV0IHRoZVxuYmFja3NsYXNoIHJlbWFpbnMgaW4gdGhlIHJlc3VsdDsgZm9yIGV4YW1wbGUsICJyIlxcIiIiIGlzIGEgdmFsaWRcbnN0cmluZyBsaXRlcmFsIGNvbnNpc3Rpbmcgb2YgdHdvIGNoYXJhY3RlcnM6IGEgYmFja3NsYXNoIGFuZCBhIGRvdWJsZVxucXVvdGU7ICJyIlxcIiIgaXMgbm90IGEgdmFsaWQgc3RyaW5nIGxpdGVyYWwgKGV2ZW4gYSByYXcgc3RyaW5nIGNhbm5vdFxuZW5kIGluIGFuIG9kZCBudW1iZXIgb2YgYmFja3NsYXNoZXMpLiAgU3BlY2lmaWNhbGx5LCAqYSByYXcgbGl0ZXJhbFxuY2Fubm90IGVuZCBpbiBhIHNpbmdsZSBiYWNrc2xhc2gqIChzaW5jZSB0aGUgYmFja3NsYXNoIHdvdWxkIGVzY2FwZVxudGhlIGZvbGxvd2luZyBxdW90ZSBjaGFyYWN0ZXIpLiAgTm90ZSBhbHNvIHRoYXQgYSBzaW5nbGUgYmFja3NsYXNoXG5mb2xsb3dlZCBieSBhIG5ld2xpbmUgaXMgaW50ZXJwcmV0ZWQgYXMgdGhvc2UgdHdvIGNoYXJhY3RlcnMgYXMgcGFydFxub2YgdGhlIGxpdGVyYWwsICpub3QqIGFzIGEgbGluZSBjb250aW51YXRpb24uXG4nLAorICdzdWJzY3JpcHRpb25zJzogdSdcblN1YnNjcmlwdGlvbnNcbioqKioqKioqKioqKipcblxuQSBzdWJzY3JpcHRpb24gc2VsZWN0cyBhbiBpdGVtIG9mIGEgc2VxdWVuY2UgKHN0cmluZywgdHVwbGUgb3IgbGlzdClcbm9yIG1hcHBpbmcgKGRpY3Rpb25hcnkpIG9iamVjdDpcblxuICAgc3Vic2NyaXB0aW9uIDo6PSBwcmltYXJ5ICJbIiBleHByZXNzaW9uX2xpc3QgIl0iXG5cblRoZSBwcmltYXJ5IG11c3QgZXZhbHVhdGUgdG8gYW4gb2JqZWN0IHRoYXQgc3VwcG9ydHMgc3Vic2NyaXB0aW9uXG4obGlzdHMgb3IgZGljdGlvbmFyaWVzIGZvciBleGFtcGxlKS4gIFVzZXItZGVmaW5lZCBvYmplY3RzIGNhbiBzdXBwb3J0XG5zdWJzY3JpcHRpb24gYnkgZGVmaW5pbmcgYSAiX19nZXRpdGVtX18oKSIgbWV0aG9kLlxuXG5Gb3IgYnVpbHQtaW4gb2JqZWN0cywgdGhlcmUgYXJlIHR3byB0eXBlcyBvZiBvYmplY3RzIHRoYXQgc3VwcG9ydFxuc3Vic2NyaXB0aW9uOlxuXG5JZiB0aGUgcHJpbWFyeSBpcyBhIG1hcHBpbmcsIHRoZSBleHByZXNzaW9uIGxpc3QgbXVzdCBldmFsdWF0ZSB0byBhblxub2JqZWN0IHdob3NlIHZhbHVlIGlzIG9uZSBvZiB0aGUga2V5cyBvZiB0aGUgbWFwcGluZywgYW5kIHRoZVxuc3Vic2NyaXB0aW9uIHNlbGVjdHMgdGhlIHZhbHVlIGluIHRoZSBtYXBwaW5nIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhhdFxua2V5LiAgKFRoZSBleHByZXNzaW9uIGxpc3QgaXMgYSB0dXBsZSBleGNlcHQgaWYgaXQgaGFzIGV4YWN0bHkgb25lXG5pdGVtLilcblxuSWYgdGhlIHByaW1hcnkgaXMgYSBzZXF1ZW5jZSwgdGhlIGV4cHJlc3Npb24gKGxpc3QpIG11c3QgZXZhbHVhdGUgdG9cbmFuIGludGVnZXIgb3IgYSBzbGljZSAoYXMgZGlzY3Vzc2VkIGluIHRoZSBmb2xsb3dpbmcgc2VjdGlvbikuXG5cblRoZSBmb3JtYWwgc3ludGF4IG1ha2VzIG5vIHNwZWNpYWwgcHJvdmlzaW9uIGZvciBuZWdhdGl2ZSBpbmRpY2VzIGluXG5zZXF1ZW5jZXM7IGhvd2V2ZXIsIGJ1aWx0LWluIHNlcXVlbmNlcyBhbGwgcHJvdmlkZSBhICJfX2dldGl0ZW1fXygpIlxubWV0aG9kIHRoYXQgaW50ZXJwcmV0cyBuZWdhdGl2ZSBpbmRpY2VzIGJ5IGFkZGluZyB0aGUgbGVuZ3RoIG9mIHRoZVxuc2VxdWVuY2UgdG8gdGhlIGluZGV4IChzbyB0aGF0ICJ4Wy0xXSIgc2VsZWN0cyB0aGUgbGFzdCBpdGVtIG9mICJ4IikuXG5UaGUgcmVzdWx0aW5nIHZhbHVlIG11c3QgYmUgYSBub25uZWdhdGl2ZSBpbnRlZ2VyIGxlc3MgdGhhbiB0aGUgbnVtYmVyXG5vZiBpdGVtcyBpbiB0aGUgc2VxdWVuY2UsIGFuZCB0aGUgc3Vic2NyaXB0aW9uIHNlbGVjdHMgdGhlIGl0ZW0gd2hvc2VcbmluZGV4IGlzIHRoYXQgdmFsdWUgKGNvdW50aW5nIGZyb20gemVybykuIFNpbmNlIHRoZSBzdXBwb3J0IGZvclxubmVnYXRpdmUgaW5kaWNlcyBhbmQgc2xpY2luZyBvY2N1cnMgaW4gdGhlIG9iamVjdFwncyAiX19nZXRpdGVtX18oKSJcbm1ldGhvZCwgc3ViY2xhc3NlcyBvdmVycmlkaW5nIHRoaXMgbWV0aG9kIHdpbGwgbmVlZCB0byBleHBsaWNpdGx5IGFkZFxudGhhdCBzdXBwb3J0LlxuXG5BIHN0cmluZ1wncyBpdGVtcyBhcmUgY2hhcmFjdGVycy4gIEEgY2hhcmFjdGVyIGlzIG5vdCBhIHNlcGFyYXRlIGRhdGFcbnR5cGUgYnV0IGEgc3RyaW5nIG9mIGV4YWN0bHkgb25lIGNoYXJhY3Rlci5cbicsCisgJ3RydXRoJzogdSdcblRydXRoIFZhbHVlIFRlc3RpbmdcbioqKioqKioqKioqKioqKioqKipcblxuQW55IG9iamVjdCBjYW4gYmUgdGVzdGVkIGZvciB0cnV0aCB2YWx1ZSwgZm9yIHVzZSBpbiBhbiAiaWYiIG9yXG4id2hpbGUiIGNvbmRpdGlvbiBvciBhcyBvcGVyYW5kIG9mIHRoZSBCb29sZWFuIG9wZXJhdGlvbnMgYmVsb3cuIFRoZVxuZm9sbG93aW5nIHZhbHVlcyBhcmUgY29uc2lkZXJlZCBmYWxzZTpcblxuKiAiTm9uZSJcblxuKiAiRmFsc2UiXG5cbiogemVybyBvZiBhbnkgbnVtZXJpYyB0eXBlLCBmb3IgZXhhbXBsZSwgIjAiLCAiMC4wIiwgIjBqIi5cblxuKiBhbnkgZW1wdHkgc2VxdWVuY2UsIGZvciBleGFtcGxlLCAiXCdcJyIsICIoKSIsICJbXSIuXG5cbiogYW55IGVtcHR5IG1hcHBpbmcsIGZvciBleGFtcGxlLCAie30iLlxuXG4qIGluc3RhbmNlcyBvZiB1c2VyLWRlZmluZWQgY2xhc3NlcywgaWYgdGhlIGNsYXNzIGRlZmluZXMgYVxuICAiX19ib29sX18oKSIgb3IgIl9fbGVuX18oKSIgbWV0aG9kLCB3aGVuIHRoYXQgbWV0aG9kIHJldHVybnMgdGhlXG4gIGludGVnZXIgemVybyBvciAiYm9vbCIgdmFsdWUgIkZhbHNlIi4gWzFdXG5cbkFsbCBvdGhlciB2YWx1ZXMgYXJlIGNvbnNpZGVyZWQgdHJ1ZSAtLS0gc28gb2JqZWN0cyBvZiBtYW55IHR5cGVzIGFyZVxuYWx3YXlzIHRydWUuXG5cbk9wZXJhdGlvbnMgYW5kIGJ1aWx0LWluIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYSBCb29sZWFuIHJlc3VsdCBhbHdheXNcbnJldHVybiAiMCIgb3IgIkZhbHNlIiBmb3IgZmFsc2UgYW5kICIxIiBvciAiVHJ1ZSIgZm9yIHRydWUsIHVubGVzc1xub3RoZXJ3aXNlIHN0YXRlZC4gKEltcG9ydGFudCBleGNlcHRpb246IHRoZSBCb29sZWFuIG9wZXJhdGlvbnMgIm9yIlxuYW5kICJhbmQiIGFsd2F5cyByZXR1cm4gb25lIG9mIHRoZWlyIG9wZXJhbmRzLilcbicsCisgJ3RyeSc6IHUnXG5UaGUgInRyeSIgc3RhdGVtZW50XG4qKioqKioqKioqKioqKioqKioqXG5cblRoZSAidHJ5IiBzdGF0ZW1lbnQgc3BlY2lmaWVzIGV4Y2VwdGlvbiBoYW5kbGVycyBhbmQvb3IgY2xlYW51cCBjb2RlXG5mb3IgYSBncm91cCBvZiBzdGF0ZW1lbnRzOlxuXG4gICB0cnlfc3RtdCAgOjo9IHRyeTFfc3RtdCB8IHRyeTJfc3RtdFxuICAgdHJ5MV9zdG10IDo6PSAidHJ5IiAiOiIgc3VpdGVcbiAgICAgICAgICAgICAgICAgKCJleGNlcHQiIFtleHByZXNzaW9uIFsiYXMiIGlkZW50aWZpZXJdXSAiOiIgc3VpdGUpK1xuICAgICAgICAgICAgICAgICBbImVsc2UiICI6IiBzdWl0ZV1cbiAgICAgICAgICAgICAgICAgWyJmaW5hbGx5IiAiOiIgc3VpdGVdXG4gICB0cnkyX3N0bXQgOjo9ICJ0cnkiICI6IiBzdWl0ZVxuICAgICAgICAgICAgICAgICAiZmluYWxseSIgIjoiIHN1aXRlXG5cblRoZSAiZXhjZXB0IiBjbGF1c2Uocykgc3BlY2lmeSBvbmUgb3IgbW9yZSBleGNlcHRpb24gaGFuZGxlcnMuIFdoZW4gbm9cbmV4Y2VwdGlvbiBvY2N1cnMgaW4gdGhlICJ0cnkiIGNsYXVzZSwgbm8gZXhjZXB0aW9uIGhhbmRsZXIgaXNcbmV4ZWN1dGVkLiBXaGVuIGFuIGV4Y2VwdGlvbiBvY2N1cnMgaW4gdGhlICJ0cnkiIHN1aXRlLCBhIHNlYXJjaCBmb3IgYW5cbmV4Y2VwdGlvbiBoYW5kbGVyIGlzIHN0YXJ0ZWQuICBUaGlzIHNlYXJjaCBpbnNwZWN0cyB0aGUgZXhjZXB0IGNsYXVzZXNcbmluIHR1cm4gdW50aWwgb25lIGlzIGZvdW5kIHRoYXQgbWF0Y2hlcyB0aGUgZXhjZXB0aW9uLiAgQW4gZXhwcmVzc2lvbi1cbmxlc3MgZXhjZXB0IGNsYXVzZSwgaWYgcHJlc2VudCwgbXVzdCBiZSBsYXN0OyBpdCBtYXRjaGVzIGFueVxuZXhjZXB0aW9uLiAgRm9yIGFuIGV4Y2VwdCBjbGF1c2Ugd2l0aCBhbiBleHByZXNzaW9uLCB0aGF0IGV4cHJlc3Npb25cbmlzIGV2YWx1YXRlZCwgYW5kIHRoZSBjbGF1c2UgbWF0Y2hlcyB0aGUgZXhjZXB0aW9uIGlmIHRoZSByZXN1bHRpbmdcbm9iamVjdCBpcyAiY29tcGF0aWJsZSIgd2l0aCB0aGUgZXhjZXB0aW9uLiAgQW4gb2JqZWN0IGlzIGNvbXBhdGlibGVcbndpdGggYW4gZXhjZXB0aW9uIGlmIGl0IGlzIHRoZSBjbGFzcyBvciBhIGJhc2UgY2xhc3Mgb2YgdGhlIGV4Y2VwdGlvblxub2JqZWN0IG9yIGEgdHVwbGUgY29udGFpbmluZyBhbiBpdGVtIGNvbXBhdGlibGUgd2l0aCB0aGUgZXhjZXB0aW9uLlxuXG5JZiBubyBleGNlcHQgY2xhdXNlIG1hdGNoZXMgdGhlIGV4Y2VwdGlvbiwgdGhlIHNlYXJjaCBmb3IgYW4gZXhjZXB0aW9uXG5oYW5kbGVyIGNvbnRpbnVlcyBpbiB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgb24gdGhlIGludm9jYXRpb24gc3RhY2suXG5bMV1cblxuSWYgdGhlIGV2YWx1YXRpb24gb2YgYW4gZXhwcmVzc2lvbiBpbiB0aGUgaGVhZGVyIG9mIGFuIGV4Y2VwdCBjbGF1c2VcbnJhaXNlcyBhbiBleGNlcHRpb24sIHRoZSBvcmlnaW5hbCBzZWFyY2ggZm9yIGEgaGFuZGxlciBpcyBjYW5jZWxlZCBhbmRcbmEgc2VhcmNoIHN0YXJ0cyBmb3IgdGhlIG5ldyBleGNlcHRpb24gaW4gdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIG9uXG50aGUgY2FsbCBzdGFjayAoaXQgaXMgdHJlYXRlZCBhcyBpZiB0aGUgZW50aXJlICJ0cnkiIHN0YXRlbWVudCByYWlzZWRcbnRoZSBleGNlcHRpb24pLlxuXG5XaGVuIGEgbWF0Y2hpbmcgZXhjZXB0IGNsYXVzZSBpcyBmb3VuZCwgdGhlIGV4Y2VwdGlvbiBpcyBhc3NpZ25lZCB0b1xudGhlIHRhcmdldCBzcGVjaWZpZWQgYWZ0ZXIgdGhlICJhcyIga2V5d29yZCBpbiB0aGF0IGV4Y2VwdCBjbGF1c2UsIGlmXG5wcmVzZW50LCBhbmQgdGhlIGV4Y2VwdCBjbGF1c2VcJ3Mgc3VpdGUgaXMgZXhlY3V0ZWQuICBBbGwgZXhjZXB0XG5jbGF1c2VzIG11c3QgaGF2ZSBhbiBleGVjdXRhYmxlIGJsb2NrLiAgV2hlbiB0aGUgZW5kIG9mIHRoaXMgYmxvY2sgaXNcbnJlYWNoZWQsIGV4ZWN1dGlvbiBjb250aW51ZXMgbm9ybWFsbHkgYWZ0ZXIgdGhlIGVudGlyZSB0cnkgc3RhdGVtZW50LlxuKFRoaXMgbWVhbnMgdGhhdCBpZiB0d28gbmVzdGVkIGhhbmRsZXJzIGV4aXN0IGZvciB0aGUgc2FtZSBleGNlcHRpb24sXG5hbmQgdGhlIGV4Y2VwdGlvbiBvY2N1cnMgaW4gdGhlIHRyeSBjbGF1c2Ugb2YgdGhlIGlubmVyIGhhbmRsZXIsIHRoZVxub3V0ZXIgaGFuZGxlciB3aWxsIG5vdCBoYW5kbGUgdGhlIGV4Y2VwdGlvbi4pXG5cbldoZW4gYW4gZXhjZXB0aW9uIGhhcyBiZWVuIGFzc2lnbmVkIHVzaW5nICJhcyB0YXJnZXQiLCBpdCBpcyBjbGVhcmVkXG5hdCB0aGUgZW5kIG9mIHRoZSBleGNlcHQgY2xhdXNlLiAgVGhpcyBpcyBhcyBpZlxuXG4gICBleGNlcHQgRSBhcyBOOlxuICAgICAgIGZvb1xuXG53YXMgdHJhbnNsYXRlZCB0b1xuXG4gICBleGNlcHQgRSBhcyBOOlxuICAgICAgIHRyeTpcbiAgICAgICAgICAgZm9vXG4gICAgICAgZmluYWxseTpcbiAgICAgICAgICAgZGVsIE5cblxuVGhpcyBtZWFucyB0aGUgZXhjZXB0aW9uIG11c3QgYmUgYXNzaWduZWQgdG8gYSBkaWZmZXJlbnQgbmFtZSB0byBiZVxuYWJsZSB0byByZWZlciB0byBpdCBhZnRlciB0aGUgZXhjZXB0IGNsYXVzZS4gIEV4Y2VwdGlvbnMgYXJlIGNsZWFyZWRcbmJlY2F1c2Ugd2l0aCB0aGUgdHJhY2ViYWNrIGF0dGFjaGVkIHRvIHRoZW0sIHRoZXkgZm9ybSBhIHJlZmVyZW5jZVxuY3ljbGUgd2l0aCB0aGUgc3RhY2sgZnJhbWUsIGtlZXBpbmcgYWxsIGxvY2FscyBpbiB0aGF0IGZyYW1lIGFsaXZlXG51bnRpbCB0aGUgbmV4dCBnYXJiYWdlIGNvbGxlY3Rpb24gb2NjdXJzLlxuXG5CZWZvcmUgYW4gZXhjZXB0IGNsYXVzZVwncyBzdWl0ZSBpcyBleGVjdXRlZCwgZGV0YWlscyBhYm91dCB0aGVcbmV4Y2VwdGlvbiBhcmUgc3RvcmVkIGluIHRoZSAic3lzIiBtb2R1bGUgYW5kIGNhbiBiZSBhY2Nlc3NlZCB2aWFcbiJzeXMuZXhjX2luZm8oKSIuICJzeXMuZXhjX2luZm8oKSIgcmV0dXJucyBhIDMtdHVwbGUgY29uc2lzdGluZyBvZiB0aGVcbmV4Y2VwdGlvbiBjbGFzcywgdGhlIGV4Y2VwdGlvbiBpbnN0YW5jZSBhbmQgYSB0cmFjZWJhY2sgb2JqZWN0IChzZWVcbnNlY3Rpb24gKlRoZSBzdGFuZGFyZCB0eXBlIGhpZXJhcmNoeSopIGlkZW50aWZ5aW5nIHRoZSBwb2ludCBpbiB0aGVcbnByb2dyYW0gd2hlcmUgdGhlIGV4Y2VwdGlvbiBvY2N1cnJlZC4gICJzeXMuZXhjX2luZm8oKSIgdmFsdWVzIGFyZVxucmVzdG9yZWQgdG8gdGhlaXIgcHJldmlvdXMgdmFsdWVzIChiZWZvcmUgdGhlIGNhbGwpIHdoZW4gcmV0dXJuaW5nXG5mcm9tIGEgZnVuY3Rpb24gdGhhdCBoYW5kbGVkIGFuIGV4Y2VwdGlvbi5cblxuVGhlIG9wdGlvbmFsICJlbHNlIiBjbGF1c2UgaXMgZXhlY3V0ZWQgaWYgYW5kIHdoZW4gY29udHJvbCBmbG93cyBvZmZcbnRoZSBlbmQgb2YgdGhlICJ0cnkiIGNsYXVzZS4gWzJdIEV4Y2VwdGlvbnMgaW4gdGhlICJlbHNlIiBjbGF1c2UgYXJlXG5ub3QgaGFuZGxlZCBieSB0aGUgcHJlY2VkaW5nICJleGNlcHQiIGNsYXVzZXMuXG5cbklmICJmaW5hbGx5IiBpcyBwcmVzZW50LCBpdCBzcGVjaWZpZXMgYSBcJ2NsZWFudXBcJyBoYW5kbGVyLiAgVGhlICJ0cnkiXG5jbGF1c2UgaXMgZXhlY3V0ZWQsIGluY2x1ZGluZyBhbnkgImV4Y2VwdCIgYW5kICJlbHNlIiBjbGF1c2VzLiAgSWYgYW5cbmV4Y2VwdGlvbiBvY2N1cnMgaW4gYW55IG9mIHRoZSBjbGF1c2VzIGFuZCBpcyBub3QgaGFuZGxlZCwgdGhlXG5leGNlcHRpb24gaXMgdGVtcG9yYXJpbHkgc2F2ZWQuIFRoZSAiZmluYWxseSIgY2xhdXNlIGlzIGV4ZWN1dGVkLiAgSWZcbnRoZXJlIGlzIGEgc2F2ZWQgZXhjZXB0aW9uIGl0IGlzIHJlLXJhaXNlZCBhdCB0aGUgZW5kIG9mIHRoZSAiZmluYWxseSJcbmNsYXVzZS4gIElmIHRoZSAiZmluYWxseSIgY2xhdXNlIHJhaXNlcyBhbm90aGVyIGV4Y2VwdGlvbiwgdGhlIHNhdmVkXG5leGNlcHRpb24gaXMgc2V0IGFzIHRoZSBjb250ZXh0IG9mIHRoZSBuZXcgZXhjZXB0aW9uLiBJZiB0aGUgImZpbmFsbHkiXG5jbGF1c2UgZXhlY3V0ZXMgYSAicmV0dXJuIiBvciAiYnJlYWsiIHN0YXRlbWVudCwgdGhlIHNhdmVkIGV4Y2VwdGlvblxuaXMgZGlzY2FyZGVkOlxuXG4gICA+Pj4gZGVmIGYoKTpcbiAgIC4uLiAgICAgdHJ5OlxuICAgLi4uICAgICAgICAgMS8wXG4gICAuLi4gICAgIGZpbmFsbHk6XG4gICAuLi4gICAgICAgICByZXR1cm4gNDJcbiAgIC4uLlxuICAgPj4+IGYoKVxuICAgNDJcblxuVGhlIGV4Y2VwdGlvbiBpbmZvcm1hdGlvbiBpcyBub3QgYXZhaWxhYmxlIHRvIHRoZSBwcm9ncmFtIGR1cmluZ1xuZXhlY3V0aW9uIG9mIHRoZSAiZmluYWxseSIgY2xhdXNlLlxuXG5XaGVuIGEgInJldHVybiIsICJicmVhayIgb3IgImNvbnRpbnVlIiBzdGF0ZW1lbnQgaXMgZXhlY3V0ZWQgaW4gdGhlXG4idHJ5IiBzdWl0ZSBvZiBhICJ0cnkiLi4uImZpbmFsbHkiIHN0YXRlbWVudCwgdGhlICJmaW5hbGx5IiBjbGF1c2UgaXNcbmFsc28gZXhlY3V0ZWQgXCdvbiB0aGUgd2F5IG91dC5cJyBBICJjb250aW51ZSIgc3RhdGVtZW50IGlzIGlsbGVnYWwgaW5cbnRoZSAiZmluYWxseSIgY2xhdXNlLiAoVGhlIHJlYXNvbiBpcyBhIHByb2JsZW0gd2l0aCB0aGUgY3VycmVudFxuaW1wbGVtZW50YXRpb24gLS0tIHRoaXMgcmVzdHJpY3Rpb24gbWF5IGJlIGxpZnRlZCBpbiB0aGUgZnV0dXJlKS5cblxuVGhlIHJldHVybiB2YWx1ZSBvZiBhIGZ1bmN0aW9uIGlzIGRldGVybWluZWQgYnkgdGhlIGxhc3QgInJldHVybiJcbnN0YXRlbWVudCBleGVjdXRlZC4gIFNpbmNlIHRoZSAiZmluYWxseSIgY2xhdXNlIGFsd2F5cyBleGVjdXRlcywgYVxuInJldHVybiIgc3RhdGVtZW50IGV4ZWN1dGVkIGluIHRoZSAiZmluYWxseSIgY2xhdXNlIHdpbGwgYWx3YXlzIGJlIHRoZVxubGFzdCBvbmUgZXhlY3V0ZWQ6XG5cbiAgID4+PiBkZWYgZm9vKCk6XG4gICAuLi4gICAgIHRyeTpcbiAgIC4uLiAgICAgICAgIHJldHVybiBcJ3RyeVwnXG4gICAuLi4gICAgIGZpbmFsbHk6XG4gICAuLi4gICAgICAgICByZXR1cm4gXCdmaW5hbGx5XCdcbiAgIC4uLlxuICAgPj4+IGZvbygpXG4gICBcJ2ZpbmFsbHlcJ1xuXG5BZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9uIGV4Y2VwdGlvbnMgY2FuIGJlIGZvdW5kIGluIHNlY3Rpb25cbipFeGNlcHRpb25zKiwgYW5kIGluZm9ybWF0aW9uIG9uIHVzaW5nIHRoZSAicmFpc2UiIHN0YXRlbWVudCB0b1xuZ2VuZXJhdGUgZXhjZXB0aW9ucyBtYXkgYmUgZm91bmQgaW4gc2VjdGlvbiAqVGhlIHJhaXNlIHN0YXRlbWVudCouXG4nLAorICd0eXBlcyc6IHUnXG5UaGUgc3RhbmRhcmQgdHlwZSBoaWVyYXJjaHlcbioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG5CZWxvdyBpcyBhIGxpc3Qgb2YgdGhlIHR5cGVzIHRoYXQgYXJlIGJ1aWx0IGludG8gUHl0aG9uLiAgRXh0ZW5zaW9uXG5tb2R1bGVzICh3cml0dGVuIGluIEMsIEphdmEsIG9yIG90aGVyIGxhbmd1YWdlcywgZGVwZW5kaW5nIG9uIHRoZVxuaW1wbGVtZW50YXRpb24pIGNhbiBkZWZpbmUgYWRkaXRpb25hbCB0eXBlcy4gIEZ1dHVyZSB2ZXJzaW9ucyBvZlxuUHl0aG9uIG1heSBhZGQgdHlwZXMgdG8gdGhlIHR5cGUgaGllcmFyY2h5IChlLmcuLCByYXRpb25hbCBudW1iZXJzLFxuZWZmaWNpZW50bHkgc3RvcmVkIGFycmF5cyBvZiBpbnRlZ2VycywgZXRjLiksIGFsdGhvdWdoIHN1Y2ggYWRkaXRpb25zXG53aWxsIG9mdGVuIGJlIHByb3ZpZGVkIHZpYSB0aGUgc3RhbmRhcmQgbGlicmFyeSBpbnN0ZWFkLlxuXG5Tb21lIG9mIHRoZSB0eXBlIGRlc2NyaXB0aW9ucyBiZWxvdyBjb250YWluIGEgcGFyYWdyYXBoIGxpc3Rpbmdcblwnc3BlY2lhbCBhdHRyaWJ1dGVzLlwnICBUaGVzZSBhcmUgYXR0cmlidXRlcyB0aGF0IHByb3ZpZGUgYWNjZXNzIHRvIHRoZVxuaW1wbGVtZW50YXRpb24gYW5kIGFyZSBub3QgaW50ZW5kZWQgZm9yIGdlbmVyYWwgdXNlLiAgVGhlaXIgZGVmaW5pdGlvblxubWF5IGNoYW5nZSBpbiB0aGUgZnV0dXJlLlxuXG5Ob25lXG4gICBUaGlzIHR5cGUgaGFzIGEgc2luZ2xlIHZhbHVlLiAgVGhlcmUgaXMgYSBzaW5nbGUgb2JqZWN0IHdpdGggdGhpc1xuICAgdmFsdWUuIFRoaXMgb2JqZWN0IGlzIGFjY2Vzc2VkIHRocm91Z2ggdGhlIGJ1aWx0LWluIG5hbWUgIk5vbmUiLiBJdFxuICAgaXMgdXNlZCB0byBzaWduaWZ5IHRoZSBhYnNlbmNlIG9mIGEgdmFsdWUgaW4gbWFueSBzaXR1YXRpb25zLCBlLmcuLFxuICAgaXQgaXMgcmV0dXJuZWQgZnJvbSBmdW5jdGlvbnMgdGhhdCBkb25cJ3QgZXhwbGljaXRseSByZXR1cm5cbiAgIGFueXRoaW5nLiBJdHMgdHJ1dGggdmFsdWUgaXMgZmFsc2UuXG5cbk5vdEltcGxlbWVudGVkXG4gICBUaGlzIHR5cGUgaGFzIGEgc2luZ2xlIHZhbHVlLiAgVGhlcmUgaXMgYSBzaW5nbGUgb2JqZWN0IHdpdGggdGhpc1xuICAgdmFsdWUuIFRoaXMgb2JqZWN0IGlzIGFjY2Vzc2VkIHRocm91Z2ggdGhlIGJ1aWx0LWluIG5hbWVcbiAgICJOb3RJbXBsZW1lbnRlZCIuIE51bWVyaWMgbWV0aG9kcyBhbmQgcmljaCBjb21wYXJpc29uIG1ldGhvZHNcbiAgIHNob3VsZCByZXR1cm4gdGhpcyB2YWx1ZSBpZiB0aGV5IGRvIG5vdCBpbXBsZW1lbnQgdGhlIG9wZXJhdGlvbiBmb3JcbiAgIHRoZSBvcGVyYW5kcyBwcm92aWRlZC4gIChUaGUgaW50ZXJwcmV0ZXIgd2lsbCB0aGVuIHRyeSB0aGVcbiAgIHJlZmxlY3RlZCBvcGVyYXRpb24sIG9yIHNvbWUgb3RoZXIgZmFsbGJhY2ssIGRlcGVuZGluZyBvbiB0aGVcbiAgIG9wZXJhdG9yLikgIEl0cyB0cnV0aCB2YWx1ZSBpcyB0cnVlLlxuXG4gICBTZWUgKkltcGxlbWVudGluZyB0aGUgYXJpdGhtZXRpYyBvcGVyYXRpb25zKiBmb3IgbW9yZSBkZXRhaWxzLlxuXG5FbGxpcHNpc1xuICAgVGhpcyB0eXBlIGhhcyBhIHNpbmdsZSB2YWx1ZS4gIFRoZXJlIGlzIGEgc2luZ2xlIG9iamVjdCB3aXRoIHRoaXNcbiAgIHZhbHVlLiBUaGlzIG9iamVjdCBpcyBhY2Nlc3NlZCB0aHJvdWdoIHRoZSBsaXRlcmFsICIuLi4iIG9yIHRoZVxuICAgYnVpbHQtaW4gbmFtZSAiRWxsaXBzaXMiLiAgSXRzIHRydXRoIHZhbHVlIGlzIHRydWUuXG5cbiJudW1iZXJzLk51bWJlciJcbiAgIFRoZXNlIGFyZSBjcmVhdGVkIGJ5IG51bWVyaWMgbGl0ZXJhbHMgYW5kIHJldHVybmVkIGFzIHJlc3VsdHMgYnlcbiAgIGFyaXRobWV0aWMgb3BlcmF0b3JzIGFuZCBhcml0aG1ldGljIGJ1aWx0LWluIGZ1bmN0aW9ucy4gIE51bWVyaWNcbiAgIG9iamVjdHMgYXJlIGltbXV0YWJsZTsgb25jZSBjcmVhdGVkIHRoZWlyIHZhbHVlIG5ldmVyIGNoYW5nZXMuXG4gICBQeXRob24gbnVtYmVycyBhcmUgb2YgY291cnNlIHN0cm9uZ2x5IHJlbGF0ZWQgdG8gbWF0aGVtYXRpY2FsXG4gICBudW1iZXJzLCBidXQgc3ViamVjdCB0byB0aGUgbGltaXRhdGlvbnMgb2YgbnVtZXJpY2FsIHJlcHJlc2VudGF0aW9uXG4gICBpbiBjb21wdXRlcnMuXG5cbiAgIFB5dGhvbiBkaXN0aW5ndWlzaGVzIGJldHdlZW4gaW50ZWdlcnMsIGZsb2F0aW5nIHBvaW50IG51bWJlcnMsIGFuZFxuICAgY29tcGxleCBudW1iZXJzOlxuXG4gICAibnVtYmVycy5JbnRlZ3JhbCJcbiAgICAgIFRoZXNlIHJlcHJlc2VudCBlbGVtZW50cyBmcm9tIHRoZSBtYXRoZW1hdGljYWwgc2V0IG9mIGludGVnZXJzXG4gICAgICAocG9zaXRpdmUgYW5kIG5lZ2F0aXZlKS5cblxuICAgICAgVGhlcmUgYXJlIHR3byB0eXBlcyBvZiBpbnRlZ2VyczpcblxuICAgICAgSW50ZWdlcnMgKCJpbnQiKVxuXG4gICAgICAgICBUaGVzZSByZXByZXNlbnQgbnVtYmVycyBpbiBhbiB1bmxpbWl0ZWQgcmFuZ2UsIHN1YmplY3QgdG9cbiAgICAgICAgIGF2YWlsYWJsZSAodmlydHVhbCkgbWVtb3J5IG9ubHkuICBGb3IgdGhlIHB1cnBvc2Ugb2Ygc2hpZnRcbiAgICAgICAgIGFuZCBtYXNrIG9wZXJhdGlvbnMsIGEgYmluYXJ5IHJlcHJlc2VudGF0aW9uIGlzIGFzc3VtZWQsIGFuZFxuICAgICAgICAgbmVnYXRpdmUgbnVtYmVycyBhcmUgcmVwcmVzZW50ZWQgaW4gYSB2YXJpYW50IG9mIDJcJ3NcbiAgICAgICAgIGNvbXBsZW1lbnQgd2hpY2ggZ2l2ZXMgdGhlIGlsbHVzaW9uIG9mIGFuIGluZmluaXRlIHN0cmluZyBvZlxuICAgICAgICAgc2lnbiBiaXRzIGV4dGVuZGluZyB0byB0aGUgbGVmdC5cblxuICAgICAgQm9vbGVhbnMgKCJib29sIilcbiAgICAgICAgIFRoZXNlIHJlcHJlc2VudCB0aGUgdHJ1dGggdmFsdWVzIEZhbHNlIGFuZCBUcnVlLiAgVGhlIHR3b1xuICAgICAgICAgb2JqZWN0cyByZXByZXNlbnRpbmcgdGhlIHZhbHVlcyAiRmFsc2UiIGFuZCAiVHJ1ZSIgYXJlIHRoZVxuICAgICAgICAgb25seSBCb29sZWFuIG9iamVjdHMuIFRoZSBCb29sZWFuIHR5cGUgaXMgYSBzdWJ0eXBlIG9mIHRoZVxuICAgICAgICAgaW50ZWdlciB0eXBlLCBhbmQgQm9vbGVhbiB2YWx1ZXMgYmVoYXZlIGxpa2UgdGhlIHZhbHVlcyAwIGFuZFxuICAgICAgICAgMSwgcmVzcGVjdGl2ZWx5LCBpbiBhbG1vc3QgYWxsIGNvbnRleHRzLCB0aGUgZXhjZXB0aW9uIGJlaW5nXG4gICAgICAgICB0aGF0IHdoZW4gY29udmVydGVkIHRvIGEgc3RyaW5nLCB0aGUgc3RyaW5ncyAiIkZhbHNlIiIgb3JcbiAgICAgICAgICIiVHJ1ZSIiIGFyZSByZXR1cm5lZCwgcmVzcGVjdGl2ZWx5LlxuXG4gICAgICBUaGUgcnVsZXMgZm9yIGludGVnZXIgcmVwcmVzZW50YXRpb24gYXJlIGludGVuZGVkIHRvIGdpdmUgdGhlXG4gICAgICBtb3N0IG1lYW5pbmdmdWwgaW50ZXJwcmV0YXRpb24gb2Ygc2hpZnQgYW5kIG1hc2sgb3BlcmF0aW9uc1xuICAgICAgaW52b2x2aW5nIG5lZ2F0aXZlIGludGVnZXJzLlxuXG4gICAibnVtYmVycy5SZWFsIiAoImZsb2F0IilcbiAgICAgIFRoZXNlIHJlcHJlc2VudCBtYWNoaW5lLWxldmVsIGRvdWJsZSBwcmVjaXNpb24gZmxvYXRpbmcgcG9pbnRcbiAgICAgIG51bWJlcnMuIFlvdSBhcmUgYXQgdGhlIG1lcmN5IG9mIHRoZSB1bmRlcmx5aW5nIG1hY2hpbmVcbiAgICAgIGFyY2hpdGVjdHVyZSAoYW5kIEMgb3IgSmF2YSBpbXBsZW1lbnRhdGlvbikgZm9yIHRoZSBhY2NlcHRlZFxuICAgICAgcmFuZ2UgYW5kIGhhbmRsaW5nIG9mIG92ZXJmbG93LiBQeXRob24gZG9lcyBub3Qgc3VwcG9ydCBzaW5nbGUtXG4gICAgICBwcmVjaXNpb24gZmxvYXRpbmcgcG9pbnQgbnVtYmVyczsgdGhlIHNhdmluZ3MgaW4gcHJvY2Vzc29yIGFuZFxuICAgICAgbWVtb3J5IHVzYWdlIHRoYXQgYXJlIHVzdWFsbHkgdGhlIHJlYXNvbiBmb3IgdXNpbmcgdGhlc2UgYXJlXG4gICAgICBkd2FyZmVkIGJ5IHRoZSBvdmVyaGVhZCBvZiB1c2luZyBvYmplY3RzIGluIFB5dGhvbiwgc28gdGhlcmUgaXNcbiAgICAgIG5vIHJlYXNvbiB0byBjb21wbGljYXRlIHRoZSBsYW5ndWFnZSB3aXRoIHR3byBraW5kcyBvZiBmbG9hdGluZ1xuICAgICAgcG9pbnQgbnVtYmVycy5cblxuICAgIm51bWJlcnMuQ29tcGxleCIgKCJjb21wbGV4IilcbiAgICAgIFRoZXNlIHJlcHJlc2VudCBjb21wbGV4IG51bWJlcnMgYXMgYSBwYWlyIG9mIG1hY2hpbmUtbGV2ZWxcbiAgICAgIGRvdWJsZSBwcmVjaXNpb24gZmxvYXRpbmcgcG9pbnQgbnVtYmVycy4gIFRoZSBzYW1lIGNhdmVhdHMgYXBwbHlcbiAgICAgIGFzIGZvciBmbG9hdGluZyBwb2ludCBudW1iZXJzLiBUaGUgcmVhbCBhbmQgaW1hZ2luYXJ5IHBhcnRzIG9mIGFcbiAgICAgIGNvbXBsZXggbnVtYmVyICJ6IiBjYW4gYmUgcmV0cmlldmVkIHRocm91Z2ggdGhlIHJlYWQtb25seVxuICAgICAgYXR0cmlidXRlcyAiei5yZWFsIiBhbmQgInouaW1hZyIuXG5cblNlcXVlbmNlc1xuICAgVGhlc2UgcmVwcmVzZW50IGZpbml0ZSBvcmRlcmVkIHNldHMgaW5kZXhlZCBieSBub24tbmVnYXRpdmVcbiAgIG51bWJlcnMuIFRoZSBidWlsdC1pbiBmdW5jdGlvbiAibGVuKCkiIHJldHVybnMgdGhlIG51bWJlciBvZiBpdGVtc1xuICAgb2YgYSBzZXF1ZW5jZS4gV2hlbiB0aGUgbGVuZ3RoIG9mIGEgc2VxdWVuY2UgaXMgKm4qLCB0aGUgaW5kZXggc2V0XG4gICBjb250YWlucyB0aGUgbnVtYmVycyAwLCAxLCAuLi4sICpuKi0xLiAgSXRlbSAqaSogb2Ygc2VxdWVuY2UgKmEqIGlzXG4gICBzZWxlY3RlZCBieSAiYVtpXSIuXG5cbiAgIFNlcXVlbmNlcyBhbHNvIHN1cHBvcnQgc2xpY2luZzogImFbaTpqXSIgc2VsZWN0cyBhbGwgaXRlbXMgd2l0aFxuICAgaW5kZXggKmsqIHN1Y2ggdGhhdCAqaSogIjw9IiAqayogIjwiICpqKi4gIFdoZW4gdXNlZCBhcyBhblxuICAgZXhwcmVzc2lvbiwgYSBzbGljZSBpcyBhIHNlcXVlbmNlIG9mIHRoZSBzYW1lIHR5cGUuICBUaGlzIGltcGxpZXNcbiAgIHRoYXQgdGhlIGluZGV4IHNldCBpcyByZW51bWJlcmVkIHNvIHRoYXQgaXQgc3RhcnRzIGF0IDAuXG5cbiAgIFNvbWUgc2VxdWVuY2VzIGFsc28gc3VwcG9ydCAiZXh0ZW5kZWQgc2xpY2luZyIgd2l0aCBhIHRoaXJkICJzdGVwIlxuICAgcGFyYW1ldGVyOiAiYVtpOmo6a10iIHNlbGVjdHMgYWxsIGl0ZW1zIG9mICphKiB3aXRoIGluZGV4ICp4KiB3aGVyZVxuICAgInggPSBpICsgbiprIiwgKm4qICI+PSIgIjAiIGFuZCAqaSogIjw9IiAqeCogIjwiICpqKi5cblxuICAgU2VxdWVuY2VzIGFyZSBkaXN0aW5ndWlzaGVkIGFjY29yZGluZyB0byB0aGVpciBtdXRhYmlsaXR5OlxuXG4gICBJbW11dGFibGUgc2VxdWVuY2VzXG4gICAgICBBbiBvYmplY3Qgb2YgYW4gaW1tdXRhYmxlIHNlcXVlbmNlIHR5cGUgY2Fubm90IGNoYW5nZSBvbmNlIGl0IGlzXG4gICAgICBjcmVhdGVkLiAgKElmIHRoZSBvYmplY3QgY29udGFpbnMgcmVmZXJlbmNlcyB0byBvdGhlciBvYmplY3RzLFxuICAgICAgdGhlc2Ugb3RoZXIgb2JqZWN0cyBtYXkgYmUgbXV0YWJsZSBhbmQgbWF5IGJlIGNoYW5nZWQ7IGhvd2V2ZXIsXG4gICAgICB0aGUgY29sbGVjdGlvbiBvZiBvYmplY3RzIGRpcmVjdGx5IHJlZmVyZW5jZWQgYnkgYW4gaW1tdXRhYmxlXG4gICAgICBvYmplY3QgY2Fubm90IGNoYW5nZS4pXG5cbiAgICAgIFRoZSBmb2xsb3dpbmcgdHlwZXMgYXJlIGltbXV0YWJsZSBzZXF1ZW5jZXM6XG5cbiAgICAgIFN0cmluZ3NcbiAgICAgICAgIEEgc3RyaW5nIGlzIGEgc2VxdWVuY2Ugb2YgdmFsdWVzIHRoYXQgcmVwcmVzZW50IFVuaWNvZGUgY29kZVxuICAgICAgICAgcG9pbnRzLiBBbGwgdGhlIGNvZGUgcG9pbnRzIGluIHRoZSByYW5nZSAiVSswMDAwIC0gVSsxMEZGRkYiXG4gICAgICAgICBjYW4gYmUgcmVwcmVzZW50ZWQgaW4gYSBzdHJpbmcuICBQeXRob24gZG9lc25cJ3QgaGF2ZSBhICJjaGFyIlxuICAgICAgICAgdHlwZTsgaW5zdGVhZCwgZXZlcnkgY29kZSBwb2ludCBpbiB0aGUgc3RyaW5nIGlzIHJlcHJlc2VudGVkXG4gICAgICAgICBhcyBhIHN0cmluZyBvYmplY3Qgd2l0aCBsZW5ndGggIjEiLiAgVGhlIGJ1aWx0LWluIGZ1bmN0aW9uXG4gICAgICAgICAib3JkKCkiIGNvbnZlcnRzIGEgY29kZSBwb2ludCBmcm9tIGl0cyBzdHJpbmcgZm9ybSB0byBhblxuICAgICAgICAgaW50ZWdlciBpbiB0aGUgcmFuZ2UgIjAgLSAxMEZGRkYiOyAiY2hyKCkiIGNvbnZlcnRzIGFuXG4gICAgICAgICBpbnRlZ2VyIGluIHRoZSByYW5nZSAiMCAtIDEwRkZGRiIgdG8gdGhlIGNvcnJlc3BvbmRpbmcgbGVuZ3RoXG4gICAgICAgICAiMSIgc3RyaW5nIG9iamVjdC4gInN0ci5lbmNvZGUoKSIgY2FuIGJlIHVzZWQgdG8gY29udmVydCBhXG4gICAgICAgICAic3RyIiB0byAiYnl0ZXMiIHVzaW5nIHRoZSBnaXZlbiB0ZXh0IGVuY29kaW5nLCBhbmRcbiAgICAgICAgICJieXRlcy5kZWNvZGUoKSIgY2FuIGJlIHVzZWQgdG8gYWNoaWV2ZSB0aGUgb3Bwb3NpdGUuXG5cbiAgICAgIFR1cGxlc1xuICAgICAgICAgVGhlIGl0ZW1zIG9mIGEgdHVwbGUgYXJlIGFyYml0cmFyeSBQeXRob24gb2JqZWN0cy4gVHVwbGVzIG9mXG4gICAgICAgICB0d28gb3IgbW9yZSBpdGVtcyBhcmUgZm9ybWVkIGJ5IGNvbW1hLXNlcGFyYXRlZCBsaXN0cyBvZlxuICAgICAgICAgZXhwcmVzc2lvbnMuICBBIHR1cGxlIG9mIG9uZSBpdGVtIChhIFwnc2luZ2xldG9uXCcpIGNhbiBiZVxuICAgICAgICAgZm9ybWVkIGJ5IGFmZml4aW5nIGEgY29tbWEgdG8gYW4gZXhwcmVzc2lvbiAoYW4gZXhwcmVzc2lvbiBieVxuICAgICAgICAgaXRzZWxmIGRvZXMgbm90IGNyZWF0ZSBhIHR1cGxlLCBzaW5jZSBwYXJlbnRoZXNlcyBtdXN0IGJlXG4gICAgICAgICB1c2FibGUgZm9yIGdyb3VwaW5nIG9mIGV4cHJlc3Npb25zKS4gIEFuIGVtcHR5IHR1cGxlIGNhbiBiZVxuICAgICAgICAgZm9ybWVkIGJ5IGFuIGVtcHR5IHBhaXIgb2YgcGFyZW50aGVzZXMuXG5cbiAgICAgIEJ5dGVzXG4gICAgICAgICBBIGJ5dGVzIG9iamVjdCBpcyBhbiBpbW11dGFibGUgYXJyYXkuICBUaGUgaXRlbXMgYXJlIDgtYml0XG4gICAgICAgICBieXRlcywgcmVwcmVzZW50ZWQgYnkgaW50ZWdlcnMgaW4gdGhlIHJhbmdlIDAgPD0geCA8IDI1Ni5cbiAgICAgICAgIEJ5dGVzIGxpdGVyYWxzIChsaWtlICJiXCdhYmNcJyIpIGFuZCB0aGUgYnVpbHQtaW4gZnVuY3Rpb25cbiAgICAgICAgICJieXRlcygpIiBjYW4gYmUgdXNlZCB0byBjb25zdHJ1Y3QgYnl0ZXMgb2JqZWN0cy4gIEFsc28sXG4gICAgICAgICBieXRlcyBvYmplY3RzIGNhbiBiZSBkZWNvZGVkIHRvIHN0cmluZ3MgdmlhIHRoZSAiZGVjb2RlKCkiXG4gICAgICAgICBtZXRob2QuXG5cbiAgIE11dGFibGUgc2VxdWVuY2VzXG4gICAgICBNdXRhYmxlIHNlcXVlbmNlcyBjYW4gYmUgY2hhbmdlZCBhZnRlciB0aGV5IGFyZSBjcmVhdGVkLiAgVGhlXG4gICAgICBzdWJzY3JpcHRpb24gYW5kIHNsaWNpbmcgbm90YXRpb25zIGNhbiBiZSB1c2VkIGFzIHRoZSB0YXJnZXQgb2ZcbiAgICAgIGFzc2lnbm1lbnQgYW5kICJkZWwiIChkZWxldGUpIHN0YXRlbWVudHMuXG5cbiAgICAgIFRoZXJlIGFyZSBjdXJyZW50bHkgdHdvIGludHJpbnNpYyBtdXRhYmxlIHNlcXVlbmNlIHR5cGVzOlxuXG4gICAgICBMaXN0c1xuICAgICAgICAgVGhlIGl0ZW1zIG9mIGEgbGlzdCBhcmUgYXJiaXRyYXJ5IFB5dGhvbiBvYmplY3RzLiAgTGlzdHMgYXJlXG4gICAgICAgICBmb3JtZWQgYnkgcGxhY2luZyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGV4cHJlc3Npb25zIGluXG4gICAgICAgICBzcXVhcmUgYnJhY2tldHMuIChOb3RlIHRoYXQgdGhlcmUgYXJlIG5vIHNwZWNpYWwgY2FzZXMgbmVlZGVkXG4gICAgICAgICB0byBmb3JtIGxpc3RzIG9mIGxlbmd0aCAwIG9yIDEuKVxuXG4gICAgICBCeXRlIEFycmF5c1xuICAgICAgICAgQSBieXRlYXJyYXkgb2JqZWN0IGlzIGEgbXV0YWJsZSBhcnJheS4gVGhleSBhcmUgY3JlYXRlZCBieVxuICAgICAgICAgdGhlIGJ1aWx0LWluICJieXRlYXJyYXkoKSIgY29uc3RydWN0b3IuICBBc2lkZSBmcm9tIGJlaW5nXG4gICAgICAgICBtdXRhYmxlIChhbmQgaGVuY2UgdW5oYXNoYWJsZSksIGJ5dGUgYXJyYXlzIG90aGVyd2lzZSBwcm92aWRlXG4gICAgICAgICB0aGUgc2FtZSBpbnRlcmZhY2UgYW5kIGZ1bmN0aW9uYWxpdHkgYXMgaW1tdXRhYmxlIGJ5dGVzXG4gICAgICAgICBvYmplY3RzLlxuXG4gICAgICBUaGUgZXh0ZW5zaW9uIG1vZHVsZSAiYXJyYXkiIHByb3ZpZGVzIGFuIGFkZGl0aW9uYWwgZXhhbXBsZSBvZiBhXG4gICAgICBtdXRhYmxlIHNlcXVlbmNlIHR5cGUsIGFzIGRvZXMgdGhlICJjb2xsZWN0aW9ucyIgbW9kdWxlLlxuXG5TZXQgdHlwZXNcbiAgIFRoZXNlIHJlcHJlc2VudCB1bm9yZGVyZWQsIGZpbml0ZSBzZXRzIG9mIHVuaXF1ZSwgaW1tdXRhYmxlXG4gICBvYmplY3RzLiBBcyBzdWNoLCB0aGV5IGNhbm5vdCBiZSBpbmRleGVkIGJ5IGFueSBzdWJzY3JpcHQuIEhvd2V2ZXIsXG4gICB0aGV5IGNhbiBiZSBpdGVyYXRlZCBvdmVyLCBhbmQgdGhlIGJ1aWx0LWluIGZ1bmN0aW9uICJsZW4oKSJcbiAgIHJldHVybnMgdGhlIG51bWJlciBvZiBpdGVtcyBpbiBhIHNldC4gQ29tbW9uIHVzZXMgZm9yIHNldHMgYXJlIGZhc3RcbiAgIG1lbWJlcnNoaXAgdGVzdGluZywgcmVtb3ZpbmcgZHVwbGljYXRlcyBmcm9tIGEgc2VxdWVuY2UsIGFuZFxuICAgY29tcHV0aW5nIG1hdGhlbWF0aWNhbCBvcGVyYXRpb25zIHN1Y2ggYXMgaW50ZXJzZWN0aW9uLCB1bmlvbixcbiAgIGRpZmZlcmVuY2UsIGFuZCBzeW1tZXRyaWMgZGlmZmVyZW5jZS5cblxuICAgRm9yIHNldCBlbGVtZW50cywgdGhlIHNhbWUgaW1tdXRhYmlsaXR5IHJ1bGVzIGFwcGx5IGFzIGZvclxuICAgZGljdGlvbmFyeSBrZXlzLiBOb3RlIHRoYXQgbnVtZXJpYyB0eXBlcyBvYmV5IHRoZSBub3JtYWwgcnVsZXMgZm9yXG4gICBudW1lcmljIGNvbXBhcmlzb246IGlmIHR3byBudW1iZXJzIGNvbXBhcmUgZXF1YWwgKGUuZy4sICIxIiBhbmRcbiAgICIxLjAiKSwgb25seSBvbmUgb2YgdGhlbSBjYW4gYmUgY29udGFpbmVkIGluIGEgc2V0LlxuXG4gICBUaGVyZSBhcmUgY3VycmVudGx5IHR3byBpbnRyaW5zaWMgc2V0IHR5cGVzOlxuXG4gICBTZXRzXG4gICAgICBUaGVzZSByZXByZXNlbnQgYSBtdXRhYmxlIHNldC4gVGhleSBhcmUgY3JlYXRlZCBieSB0aGUgYnVpbHQtaW5cbiAgICAgICJzZXQoKSIgY29uc3RydWN0b3IgYW5kIGNhbiBiZSBtb2RpZmllZCBhZnRlcndhcmRzIGJ5IHNldmVyYWxcbiAgICAgIG1ldGhvZHMsIHN1Y2ggYXMgImFkZCgpIi5cblxuICAgRnJvemVuIHNldHNcbiAgICAgIFRoZXNlIHJlcHJlc2VudCBhbiBpbW11dGFibGUgc2V0LiAgVGhleSBhcmUgY3JlYXRlZCBieSB0aGVcbiAgICAgIGJ1aWx0LWluICJmcm96ZW5zZXQoKSIgY29uc3RydWN0b3IuICBBcyBhIGZyb3plbnNldCBpcyBpbW11dGFibGVcbiAgICAgIGFuZCAqaGFzaGFibGUqLCBpdCBjYW4gYmUgdXNlZCBhZ2FpbiBhcyBhbiBlbGVtZW50IG9mIGFub3RoZXJcbiAgICAgIHNldCwgb3IgYXMgYSBkaWN0aW9uYXJ5IGtleS5cblxuTWFwcGluZ3NcbiAgIFRoZXNlIHJlcHJlc2VudCBmaW5pdGUgc2V0cyBvZiBvYmplY3RzIGluZGV4ZWQgYnkgYXJiaXRyYXJ5IGluZGV4XG4gICBzZXRzLiBUaGUgc3Vic2NyaXB0IG5vdGF0aW9uICJhW2tdIiBzZWxlY3RzIHRoZSBpdGVtIGluZGV4ZWQgYnkgImsiXG4gICBmcm9tIHRoZSBtYXBwaW5nICJhIjsgdGhpcyBjYW4gYmUgdXNlZCBpbiBleHByZXNzaW9ucyBhbmQgYXMgdGhlXG4gICB0YXJnZXQgb2YgYXNzaWdubWVudHMgb3IgImRlbCIgc3RhdGVtZW50cy4gVGhlIGJ1aWx0LWluIGZ1bmN0aW9uXG4gICAibGVuKCkiIHJldHVybnMgdGhlIG51bWJlciBvZiBpdGVtcyBpbiBhIG1hcHBpbmcuXG5cbiAgIFRoZXJlIGlzIGN1cnJlbnRseSBhIHNpbmdsZSBpbnRyaW5zaWMgbWFwcGluZyB0eXBlOlxuXG4gICBEaWN0aW9uYXJpZXNcbiAgICAgIFRoZXNlIHJlcHJlc2VudCBmaW5pdGUgc2V0cyBvZiBvYmplY3RzIGluZGV4ZWQgYnkgbmVhcmx5XG4gICAgICBhcmJpdHJhcnkgdmFsdWVzLiAgVGhlIG9ubHkgdHlwZXMgb2YgdmFsdWVzIG5vdCBhY2NlcHRhYmxlIGFzXG4gICAgICBrZXlzIGFyZSB2YWx1ZXMgY29udGFpbmluZyBsaXN0cyBvciBkaWN0aW9uYXJpZXMgb3Igb3RoZXJcbiAgICAgIG11dGFibGUgdHlwZXMgdGhhdCBhcmUgY29tcGFyZWQgYnkgdmFsdWUgcmF0aGVyIHRoYW4gYnkgb2JqZWN0XG4gICAgICBpZGVudGl0eSwgdGhlIHJlYXNvbiBiZWluZyB0aGF0IHRoZSBlZmZpY2llbnQgaW1wbGVtZW50YXRpb24gb2ZcbiAgICAgIGRpY3Rpb25hcmllcyByZXF1aXJlcyBhIGtleVwncyBoYXNoIHZhbHVlIHRvIHJlbWFpbiBjb25zdGFudC5cbiAgICAgIE51bWVyaWMgdHlwZXMgdXNlZCBmb3Iga2V5cyBvYmV5IHRoZSBub3JtYWwgcnVsZXMgZm9yIG51bWVyaWNcbiAgICAgIGNvbXBhcmlzb246IGlmIHR3byBudW1iZXJzIGNvbXBhcmUgZXF1YWwgKGUuZy4sICIxIiBhbmQgIjEuMCIpXG4gICAgICB0aGVuIHRoZXkgY2FuIGJlIHVzZWQgaW50ZXJjaGFuZ2VhYmx5IHRvIGluZGV4IHRoZSBzYW1lXG4gICAgICBkaWN0aW9uYXJ5IGVudHJ5LlxuXG4gICAgICBEaWN0aW9uYXJpZXMgYXJlIG11dGFibGU7IHRoZXkgY2FuIGJlIGNyZWF0ZWQgYnkgdGhlICJ7Li4ufSJcbiAgICAgIG5vdGF0aW9uIChzZWUgc2VjdGlvbiAqRGljdGlvbmFyeSBkaXNwbGF5cyopLlxuXG4gICAgICBUaGUgZXh0ZW5zaW9uIG1vZHVsZXMgImRibS5uZGJtIiBhbmQgImRibS5nbnUiIHByb3ZpZGVcbiAgICAgIGFkZGl0aW9uYWwgZXhhbXBsZXMgb2YgbWFwcGluZyB0eXBlcywgYXMgZG9lcyB0aGUgImNvbGxlY3Rpb25zIlxuICAgICAgbW9kdWxlLlxuXG5DYWxsYWJsZSB0eXBlc1xuICAgVGhlc2UgYXJlIHRoZSB0eXBlcyB0byB3aGljaCB0aGUgZnVuY3Rpb24gY2FsbCBvcGVyYXRpb24gKHNlZVxuICAgc2VjdGlvbiAqQ2FsbHMqKSBjYW4gYmUgYXBwbGllZDpcblxuICAgVXNlci1kZWZpbmVkIGZ1bmN0aW9uc1xuICAgICAgQSB1c2VyLWRlZmluZWQgZnVuY3Rpb24gb2JqZWN0IGlzIGNyZWF0ZWQgYnkgYSBmdW5jdGlvblxuICAgICAgZGVmaW5pdGlvbiAoc2VlIHNlY3Rpb24gKkZ1bmN0aW9uIGRlZmluaXRpb25zKikuICBJdCBzaG91bGQgYmVcbiAgICAgIGNhbGxlZCB3aXRoIGFuIGFyZ3VtZW50IGxpc3QgY29udGFpbmluZyB0aGUgc2FtZSBudW1iZXIgb2YgaXRlbXNcbiAgICAgIGFzIHRoZSBmdW5jdGlvblwncyBmb3JtYWwgcGFyYW1ldGVyIGxpc3QuXG5cbiAgICAgIFNwZWNpYWwgYXR0cmlidXRlczpcblxuICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLStcbiAgICAgIHwgQXR0cmlidXRlICAgICAgICAgICAgICAgICB8IE1lYW5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICB8XG4gICAgICArPT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09K1xuICAgICAgfCAiX19kb2NfXyIgICAgICAgICAgICAgICAgIHwgVGhlIGZ1bmN0aW9uXCdzIGRvY3VtZW50YXRpb24gICAgfCBXcml0YWJsZSAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzdHJpbmcsIG9yICJOb25lIiBpZiAgICAgICAgICAgIHwgICAgICAgICAgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdW5hdmFpbGFibGU7IG5vdCBpbmhlcml0ZWQgYnkgICB8ICAgICAgICAgICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHN1YmNsYXNzZXMgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICB8XG4gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tK1xuICAgICAgfCAiX19uYW1lX18iICAgICAgICAgICAgICAgIHwgVGhlIGZ1bmN0aW9uXCdzIG5hbWUgICAgICAgICAgICAgfCBXcml0YWJsZSAgICB8XG4gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tK1xuICAgICAgfCAiX19xdWFsbmFtZV9fIiAgICAgICAgICAgIHwgVGhlIGZ1bmN0aW9uXCdzICpxdWFsaWZpZWQgbmFtZSogfCBXcml0YWJsZSAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBOZXcgaW4gdmVyc2lvbiAzLjMuICAgICAgICAgICAgIHwgICAgICAgICAgICAgfFxuICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLStcbiAgICAgIHwgIl9fbW9kdWxlX18iICAgICAgICAgICAgICB8IFRoZSBuYW1lIG9mIHRoZSBtb2R1bGUgdGhlICAgICAgfCBXcml0YWJsZSAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBmdW5jdGlvbiB3YXMgZGVmaW5lZCBpbiwgb3IgICAgIHwgICAgICAgICAgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIk5vbmUiIGlmIHVuYXZhaWxhYmxlLiAgICAgICAgICB8ICAgICAgICAgICAgIHxcbiAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rXG4gICAgICB8ICJfX2RlZmF1bHRzX18iICAgICAgICAgICAgfCBBIHR1cGxlIGNvbnRhaW5pbmcgZGVmYXVsdCAgICAgIHwgV3JpdGFibGUgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYXJndW1lbnQgdmFsdWVzIGZvciB0aG9zZSAgICAgICB8ICAgICAgICAgICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFyZ3VtZW50cyB0aGF0IGhhdmUgZGVmYXVsdHMsICAgfCAgICAgICAgICAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBvciAiTm9uZSIgaWYgbm8gYXJndW1lbnRzIGhhdmUgIHwgICAgICAgICAgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYSBkZWZhdWx0IHZhbHVlICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgIHxcbiAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rXG4gICAgICB8ICJfX2NvZGVfXyIgICAgICAgICAgICAgICAgfCBUaGUgY29kZSBvYmplY3QgcmVwcmVzZW50aW5nICAgIHwgV3JpdGFibGUgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdGhlIGNvbXBpbGVkIGZ1bmN0aW9uIGJvZHkuICAgICB8ICAgICAgICAgICAgIHxcbiAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rXG4gICAgICB8ICJfX2dsb2JhbHNfXyIgICAgICAgICAgICAgfCBBIHJlZmVyZW5jZSB0byB0aGUgZGljdGlvbmFyeSAgIHwgUmVhZC1vbmx5ICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdGhhdCBob2xkcyB0aGUgZnVuY3Rpb25cJ3MgICAgICAgfCAgICAgICAgICAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBnbG9iYWwgdmFyaWFibGVzIC0tLSB0aGUgZ2xvYmFsIHwgICAgICAgICAgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgbmFtZXNwYWNlIG9mIHRoZSBtb2R1bGUgaW4gICAgICB8ICAgICAgICAgICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHdoaWNoIHRoZSBmdW5jdGlvbiB3YXMgZGVmaW5lZC4gfCAgICAgICAgICAgICB8XG4gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tK1xuICAgICAgfCAiX19kaWN0X18iICAgICAgICAgICAgICAgIHwgVGhlIG5hbWVzcGFjZSBzdXBwb3J0aW5nICAgICAgICB8IFdyaXRhYmxlICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFyYml0cmFyeSBmdW5jdGlvbiBhdHRyaWJ1dGVzLiAgfCAgICAgICAgICAgICB8XG4gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tK1xuICAgICAgfCAiX19jbG9zdXJlX18iICAgICAgICAgICAgIHwgIk5vbmUiIG9yIGEgdHVwbGUgb2YgY2VsbHMgdGhhdCB8IFJlYWQtb25seSAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNvbnRhaW4gYmluZGluZ3MgZm9yIHRoZSAgICAgICAgfCAgICAgICAgICAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBmdW5jdGlvblwncyBmcmVlIHZhcmlhYmxlcy4gICAgICB8ICAgICAgICAgICAgIHxcbiAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rXG4gICAgICB8ICJfX2Fubm90YXRpb25zX18iICAgICAgICAgfCBBIGRpY3QgY29udGFpbmluZyBhbm5vdGF0aW9ucyAgIHwgV3JpdGFibGUgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgb2YgcGFyYW1ldGVycy4gIFRoZSBrZXlzIG9mIHRoZSB8ICAgICAgICAgICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGRpY3QgYXJlIHRoZSBwYXJhbWV0ZXIgbmFtZXMsICAgfCAgICAgICAgICAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhbmQgIlwncmV0dXJuXCciIGZvciB0aGUgcmV0dXJuICAgfCAgICAgICAgICAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhbm5vdGF0aW9uLCBpZiBwcm92aWRlZC4gICAgICAgIHwgICAgICAgICAgICAgfFxuICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLStcbiAgICAgIHwgIl9fa3dkZWZhdWx0c19fIiAgICAgICAgICB8IEEgZGljdCBjb250YWluaW5nIGRlZmF1bHRzIGZvciAgfCBXcml0YWJsZSAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBrZXl3b3JkLW9ubHkgcGFyYW1ldGVycy4gICAgICAgIHwgICAgICAgICAgICAgfFxuICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLStcblxuICAgICAgTW9zdCBvZiB0aGUgYXR0cmlidXRlcyBsYWJlbGxlZCAiV3JpdGFibGUiIGNoZWNrIHRoZSB0eXBlIG9mIHRoZVxuICAgICAgYXNzaWduZWQgdmFsdWUuXG5cbiAgICAgIEZ1bmN0aW9uIG9iamVjdHMgYWxzbyBzdXBwb3J0IGdldHRpbmcgYW5kIHNldHRpbmcgYXJiaXRyYXJ5XG4gICAgICBhdHRyaWJ1dGVzLCB3aGljaCBjYW4gYmUgdXNlZCwgZm9yIGV4YW1wbGUsIHRvIGF0dGFjaCBtZXRhZGF0YVxuICAgICAgdG8gZnVuY3Rpb25zLiAgUmVndWxhciBhdHRyaWJ1dGUgZG90LW5vdGF0aW9uIGlzIHVzZWQgdG8gZ2V0IGFuZFxuICAgICAgc2V0IHN1Y2ggYXR0cmlidXRlcy4gKk5vdGUgdGhhdCB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvbmx5XG4gICAgICBzdXBwb3J0cyBmdW5jdGlvbiBhdHRyaWJ1dGVzIG9uIHVzZXItZGVmaW5lZCBmdW5jdGlvbnMuIEZ1bmN0aW9uXG4gICAgICBhdHRyaWJ1dGVzIG9uIGJ1aWx0LWluIGZ1bmN0aW9ucyBtYXkgYmUgc3VwcG9ydGVkIGluIHRoZVxuICAgICAgZnV0dXJlLipcblxuICAgICAgQWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCBhIGZ1bmN0aW9uXCdzIGRlZmluaXRpb24gY2FuIGJlXG4gICAgICByZXRyaWV2ZWQgZnJvbSBpdHMgY29kZSBvYmplY3Q7IHNlZSB0aGUgZGVzY3JpcHRpb24gb2YgaW50ZXJuYWxcbiAgICAgIHR5cGVzIGJlbG93LlxuXG4gICBJbnN0YW5jZSBtZXRob2RzXG4gICAgICBBbiBpbnN0YW5jZSBtZXRob2Qgb2JqZWN0IGNvbWJpbmVzIGEgY2xhc3MsIGEgY2xhc3MgaW5zdGFuY2UgYW5kXG4gICAgICBhbnkgY2FsbGFibGUgb2JqZWN0IChub3JtYWxseSBhIHVzZXItZGVmaW5lZCBmdW5jdGlvbikuXG5cbiAgICAgIFNwZWNpYWwgcmVhZC1vbmx5IGF0dHJpYnV0ZXM6ICJfX3NlbGZfXyIgaXMgdGhlIGNsYXNzIGluc3RhbmNlXG4gICAgICBvYmplY3QsICJfX2Z1bmNfXyIgaXMgdGhlIGZ1bmN0aW9uIG9iamVjdDsgIl9fZG9jX18iIGlzIHRoZVxuICAgICAgbWV0aG9kXCdzIGRvY3VtZW50YXRpb24gKHNhbWUgYXMgIl9fZnVuY19fLl9fZG9jX18iKTsgIl9fbmFtZV9fIlxuICAgICAgaXMgdGhlIG1ldGhvZCBuYW1lIChzYW1lIGFzICJfX2Z1bmNfXy5fX25hbWVfXyIpOyAiX19tb2R1bGVfXyJcbiAgICAgIGlzIHRoZSBuYW1lIG9mIHRoZSBtb2R1bGUgdGhlIG1ldGhvZCB3YXMgZGVmaW5lZCBpbiwgb3IgIk5vbmUiXG4gICAgICBpZiB1bmF2YWlsYWJsZS5cblxuICAgICAgTWV0aG9kcyBhbHNvIHN1cHBvcnQgYWNjZXNzaW5nIChidXQgbm90IHNldHRpbmcpIHRoZSBhcmJpdHJhcnlcbiAgICAgIGZ1bmN0aW9uIGF0dHJpYnV0ZXMgb24gdGhlIHVuZGVybHlpbmcgZnVuY3Rpb24gb2JqZWN0LlxuXG4gICAgICBVc2VyLWRlZmluZWQgbWV0aG9kIG9iamVjdHMgbWF5IGJlIGNyZWF0ZWQgd2hlbiBnZXR0aW5nIGFuXG4gICAgICBhdHRyaWJ1dGUgb2YgYSBjbGFzcyAocGVyaGFwcyB2aWEgYW4gaW5zdGFuY2Ugb2YgdGhhdCBjbGFzcyksIGlmXG4gICAgICB0aGF0IGF0dHJpYnV0ZSBpcyBhIHVzZXItZGVmaW5lZCBmdW5jdGlvbiBvYmplY3Qgb3IgYSBjbGFzc1xuICAgICAgbWV0aG9kIG9iamVjdC5cblxuICAgICAgV2hlbiBhbiBpbnN0YW5jZSBtZXRob2Qgb2JqZWN0IGlzIGNyZWF0ZWQgYnkgcmV0cmlldmluZyBhIHVzZXItXG4gICAgICBkZWZpbmVkIGZ1bmN0aW9uIG9iamVjdCBmcm9tIGEgY2xhc3MgdmlhIG9uZSBvZiBpdHMgaW5zdGFuY2VzLFxuICAgICAgaXRzICJfX3NlbGZfXyIgYXR0cmlidXRlIGlzIHRoZSBpbnN0YW5jZSwgYW5kIHRoZSBtZXRob2Qgb2JqZWN0XG4gICAgICBpcyBzYWlkIHRvIGJlIGJvdW5kLiAgVGhlIG5ldyBtZXRob2RcJ3MgIl9fZnVuY19fIiBhdHRyaWJ1dGUgaXNcbiAgICAgIHRoZSBvcmlnaW5hbCBmdW5jdGlvbiBvYmplY3QuXG5cbiAgICAgIFdoZW4gYSB1c2VyLWRlZmluZWQgbWV0aG9kIG9iamVjdCBpcyBjcmVhdGVkIGJ5IHJldHJpZXZpbmdcbiAgICAgIGFub3RoZXIgbWV0aG9kIG9iamVjdCBmcm9tIGEgY2xhc3Mgb3IgaW5zdGFuY2UsIHRoZSBiZWhhdmlvdXIgaXNcbiAgICAgIHRoZSBzYW1lIGFzIGZvciBhIGZ1bmN0aW9uIG9iamVjdCwgZXhjZXB0IHRoYXQgdGhlICJfX2Z1bmNfXyJcbiAgICAgIGF0dHJpYnV0ZSBvZiB0aGUgbmV3IGluc3RhbmNlIGlzIG5vdCB0aGUgb3JpZ2luYWwgbWV0aG9kIG9iamVjdFxuICAgICAgYnV0IGl0cyAiX19mdW5jX18iIGF0dHJpYnV0ZS5cblxuICAgICAgV2hlbiBhbiBpbnN0YW5jZSBtZXRob2Qgb2JqZWN0IGlzIGNyZWF0ZWQgYnkgcmV0cmlldmluZyBhIGNsYXNzXG4gICAgICBtZXRob2Qgb2JqZWN0IGZyb20gYSBjbGFzcyBvciBpbnN0YW5jZSwgaXRzICJfX3NlbGZfXyIgYXR0cmlidXRlXG4gICAgICBpcyB0aGUgY2xhc3MgaXRzZWxmLCBhbmQgaXRzICJfX2Z1bmNfXyIgYXR0cmlidXRlIGlzIHRoZVxuICAgICAgZnVuY3Rpb24gb2JqZWN0IHVuZGVybHlpbmcgdGhlIGNsYXNzIG1ldGhvZC5cblxuICAgICAgV2hlbiBhbiBpbnN0YW5jZSBtZXRob2Qgb2JqZWN0IGlzIGNhbGxlZCwgdGhlIHVuZGVybHlpbmdcbiAgICAgIGZ1bmN0aW9uICgiX19mdW5jX18iKSBpcyBjYWxsZWQsIGluc2VydGluZyB0aGUgY2xhc3MgaW5zdGFuY2VcbiAgICAgICgiX19zZWxmX18iKSBpbiBmcm9udCBvZiB0aGUgYXJndW1lbnQgbGlzdC4gIEZvciBpbnN0YW5jZSwgd2hlblxuICAgICAgIkMiIGlzIGEgY2xhc3Mgd2hpY2ggY29udGFpbnMgYSBkZWZpbml0aW9uIGZvciBhIGZ1bmN0aW9uICJmKCkiLFxuICAgICAgYW5kICJ4IiBpcyBhbiBpbnN0YW5jZSBvZiAiQyIsIGNhbGxpbmcgInguZigxKSIgaXMgZXF1aXZhbGVudCB0b1xuICAgICAgY2FsbGluZyAiQy5mKHgsIDEpIi5cblxuICAgICAgV2hlbiBhbiBpbnN0YW5jZSBtZXRob2Qgb2JqZWN0IGlzIGRlcml2ZWQgZnJvbSBhIGNsYXNzIG1ldGhvZFxuICAgICAgb2JqZWN0LCB0aGUgImNsYXNzIGluc3RhbmNlIiBzdG9yZWQgaW4gIl9fc2VsZl9fIiB3aWxsIGFjdHVhbGx5XG4gICAgICBiZSB0aGUgY2xhc3MgaXRzZWxmLCBzbyB0aGF0IGNhbGxpbmcgZWl0aGVyICJ4LmYoMSkiIG9yICJDLmYoMSkiXG4gICAgICBpcyBlcXVpdmFsZW50IHRvIGNhbGxpbmcgImYoQywxKSIgd2hlcmUgImYiIGlzIHRoZSB1bmRlcmx5aW5nXG4gICAgICBmdW5jdGlvbi5cblxuICAgICAgTm90ZSB0aGF0IHRoZSB0cmFuc2Zvcm1hdGlvbiBmcm9tIGZ1bmN0aW9uIG9iamVjdCB0byBpbnN0YW5jZVxuICAgICAgbWV0aG9kIG9iamVjdCBoYXBwZW5zIGVhY2ggdGltZSB0aGUgYXR0cmlidXRlIGlzIHJldHJpZXZlZCBmcm9tXG4gICAgICB0aGUgaW5zdGFuY2UuICBJbiBzb21lIGNhc2VzLCBhIGZydWl0ZnVsIG9wdGltaXphdGlvbiBpcyB0b1xuICAgICAgYXNzaWduIHRoZSBhdHRyaWJ1dGUgdG8gYSBsb2NhbCB2YXJpYWJsZSBhbmQgY2FsbCB0aGF0IGxvY2FsXG4gICAgICB2YXJpYWJsZS4gQWxzbyBub3RpY2UgdGhhdCB0aGlzIHRyYW5zZm9ybWF0aW9uIG9ubHkgaGFwcGVucyBmb3JcbiAgICAgIHVzZXItZGVmaW5lZCBmdW5jdGlvbnM7IG90aGVyIGNhbGxhYmxlIG9iamVjdHMgKGFuZCBhbGwgbm9uLVxuICAgICAgY2FsbGFibGUgb2JqZWN0cykgYXJlIHJldHJpZXZlZCB3aXRob3V0IHRyYW5zZm9ybWF0aW9uLiAgSXQgaXNcbiAgICAgIGFsc28gaW1wb3J0YW50IHRvIG5vdGUgdGhhdCB1c2VyLWRlZmluZWQgZnVuY3Rpb25zIHdoaWNoIGFyZVxuICAgICAgYXR0cmlidXRlcyBvZiBhIGNsYXNzIGluc3RhbmNlIGFyZSBub3QgY29udmVydGVkIHRvIGJvdW5kXG4gICAgICBtZXRob2RzOyB0aGlzICpvbmx5KiBoYXBwZW5zIHdoZW4gdGhlIGZ1bmN0aW9uIGlzIGFuIGF0dHJpYnV0ZVxuICAgICAgb2YgdGhlIGNsYXNzLlxuXG4gICBHZW5lcmF0b3IgZnVuY3Rpb25zXG4gICAgICBBIGZ1bmN0aW9uIG9yIG1ldGhvZCB3aGljaCB1c2VzIHRoZSAieWllbGQiIHN0YXRlbWVudCAoc2VlXG4gICAgICBzZWN0aW9uICpUaGUgeWllbGQgc3RhdGVtZW50KikgaXMgY2FsbGVkIGEgKmdlbmVyYXRvciBmdW5jdGlvbiouXG4gICAgICBTdWNoIGEgZnVuY3Rpb24sIHdoZW4gY2FsbGVkLCBhbHdheXMgcmV0dXJucyBhbiBpdGVyYXRvciBvYmplY3RcbiAgICAgIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGV4ZWN1dGUgdGhlIGJvZHkgb2YgdGhlIGZ1bmN0aW9uOiAgY2FsbGluZ1xuICAgICAgdGhlIGl0ZXJhdG9yXCdzICJpdGVyYXRvci5fX25leHRfXygpIiBtZXRob2Qgd2lsbCBjYXVzZSB0aGVcbiAgICAgIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgdW50aWwgaXQgcHJvdmlkZXMgYSB2YWx1ZSB1c2luZyB0aGUgInlpZWxkIlxuICAgICAgc3RhdGVtZW50LiAgV2hlbiB0aGUgZnVuY3Rpb24gZXhlY3V0ZXMgYSAicmV0dXJuIiBzdGF0ZW1lbnQgb3JcbiAgICAgIGZhbGxzIG9mZiB0aGUgZW5kLCBhICJTdG9wSXRlcmF0aW9uIiBleGNlcHRpb24gaXMgcmFpc2VkIGFuZCB0aGVcbiAgICAgIGl0ZXJhdG9yIHdpbGwgaGF2ZSByZWFjaGVkIHRoZSBlbmQgb2YgdGhlIHNldCBvZiB2YWx1ZXMgdG8gYmVcbiAgICAgIHJldHVybmVkLlxuXG4gICBCdWlsdC1pbiBmdW5jdGlvbnNcbiAgICAgIEEgYnVpbHQtaW4gZnVuY3Rpb24gb2JqZWN0IGlzIGEgd3JhcHBlciBhcm91bmQgYSBDIGZ1bmN0aW9uLlxuICAgICAgRXhhbXBsZXMgb2YgYnVpbHQtaW4gZnVuY3Rpb25zIGFyZSAibGVuKCkiIGFuZCAibWF0aC5zaW4oKSJcbiAgICAgICgibWF0aCIgaXMgYSBzdGFuZGFyZCBidWlsdC1pbiBtb2R1bGUpLiBUaGUgbnVtYmVyIGFuZCB0eXBlIG9mXG4gICAgICB0aGUgYXJndW1lbnRzIGFyZSBkZXRlcm1pbmVkIGJ5IHRoZSBDIGZ1bmN0aW9uLiBTcGVjaWFsIHJlYWQtXG4gICAgICBvbmx5IGF0dHJpYnV0ZXM6ICJfX2RvY19fIiBpcyB0aGUgZnVuY3Rpb25cJ3MgZG9jdW1lbnRhdGlvblxuICAgICAgc3RyaW5nLCBvciAiTm9uZSIgaWYgdW5hdmFpbGFibGU7ICJfX25hbWVfXyIgaXMgdGhlIGZ1bmN0aW9uXCdzXG4gICAgICBuYW1lOyAiX19zZWxmX18iIGlzIHNldCB0byAiTm9uZSIgKGJ1dCBzZWUgdGhlIG5leHQgaXRlbSk7XG4gICAgICAiX19tb2R1bGVfXyIgaXMgdGhlIG5hbWUgb2YgdGhlIG1vZHVsZSB0aGUgZnVuY3Rpb24gd2FzIGRlZmluZWRcbiAgICAgIGluIG9yICJOb25lIiBpZiB1bmF2YWlsYWJsZS5cblxuICAgQnVpbHQtaW4gbWV0aG9kc1xuICAgICAgVGhpcyBpcyByZWFsbHkgYSBkaWZmZXJlbnQgZGlzZ3Vpc2Ugb2YgYSBidWlsdC1pbiBmdW5jdGlvbiwgdGhpc1xuICAgICAgdGltZSBjb250YWluaW5nIGFuIG9iamVjdCBwYXNzZWQgdG8gdGhlIEMgZnVuY3Rpb24gYXMgYW5cbiAgICAgIGltcGxpY2l0IGV4dHJhIGFyZ3VtZW50LiAgQW4gZXhhbXBsZSBvZiBhIGJ1aWx0LWluIG1ldGhvZCBpc1xuICAgICAgImFsaXN0LmFwcGVuZCgpIiwgYXNzdW1pbmcgKmFsaXN0KiBpcyBhIGxpc3Qgb2JqZWN0LiBJbiB0aGlzXG4gICAgICBjYXNlLCB0aGUgc3BlY2lhbCByZWFkLW9ubHkgYXR0cmlidXRlICJfX3NlbGZfXyIgaXMgc2V0IHRvIHRoZVxuICAgICAgb2JqZWN0IGRlbm90ZWQgYnkgKmFsaXN0Ki5cblxuICAgQ2xhc3Nlc1xuICAgICAgQ2xhc3NlcyBhcmUgY2FsbGFibGUuICBUaGVzZSBvYmplY3RzIG5vcm1hbGx5IGFjdCBhcyBmYWN0b3JpZXNcbiAgICAgIGZvciBuZXcgaW5zdGFuY2VzIG9mIHRoZW1zZWx2ZXMsIGJ1dCB2YXJpYXRpb25zIGFyZSBwb3NzaWJsZSBmb3JcbiAgICAgIGNsYXNzIHR5cGVzIHRoYXQgb3ZlcnJpZGUgIl9fbmV3X18oKSIuICBUaGUgYXJndW1lbnRzIG9mIHRoZVxuICAgICAgY2FsbCBhcmUgcGFzc2VkIHRvICJfX25ld19fKCkiIGFuZCwgaW4gdGhlIHR5cGljYWwgY2FzZSwgdG9cbiAgICAgICJfX2luaXRfXygpIiB0byBpbml0aWFsaXplIHRoZSBuZXcgaW5zdGFuY2UuXG5cbiAgIENsYXNzIEluc3RhbmNlc1xuICAgICAgSW5zdGFuY2VzIG9mIGFyYml0cmFyeSBjbGFzc2VzIGNhbiBiZSBtYWRlIGNhbGxhYmxlIGJ5IGRlZmluaW5nXG4gICAgICBhICJfX2NhbGxfXygpIiBtZXRob2QgaW4gdGhlaXIgY2xhc3MuXG5cbk1vZHVsZXNcbiAgIE1vZHVsZXMgYXJlIGEgYmFzaWMgb3JnYW5pemF0aW9uYWwgdW5pdCBvZiBQeXRob24gY29kZSwgYW5kIGFyZVxuICAgY3JlYXRlZCBieSB0aGUgKmltcG9ydCBzeXN0ZW0qIGFzIGludm9rZWQgZWl0aGVyIGJ5IHRoZSAiaW1wb3J0IlxuICAgc3RhdGVtZW50IChzZWUgImltcG9ydCIpLCBvciBieSBjYWxsaW5nIGZ1bmN0aW9ucyBzdWNoIGFzXG4gICAiaW1wb3J0bGliLmltcG9ydF9tb2R1bGUoKSIgYW5kIGJ1aWx0LWluICJfX2ltcG9ydF9fKCkiLiAgQSBtb2R1bGVcbiAgIG9iamVjdCBoYXMgYSBuYW1lc3BhY2UgaW1wbGVtZW50ZWQgYnkgYSBkaWN0aW9uYXJ5IG9iamVjdCAodGhpcyBpc1xuICAgdGhlIGRpY3Rpb25hcnkgcmVmZXJlbmNlZCBieSB0aGUgIl9fZ2xvYmFsc19fIiBhdHRyaWJ1dGUgb2ZcbiAgIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHRoZSBtb2R1bGUpLiAgQXR0cmlidXRlIHJlZmVyZW5jZXMgYXJlXG4gICB0cmFuc2xhdGVkIHRvIGxvb2t1cHMgaW4gdGhpcyBkaWN0aW9uYXJ5LCBlLmcuLCAibS54IiBpcyBlcXVpdmFsZW50XG4gICB0byAibS5fX2RpY3RfX1sieCJdIi4gQSBtb2R1bGUgb2JqZWN0IGRvZXMgbm90IGNvbnRhaW4gdGhlIGNvZGVcbiAgIG9iamVjdCB1c2VkIHRvIGluaXRpYWxpemUgdGhlIG1vZHVsZSAoc2luY2UgaXQgaXNuXCd0IG5lZWRlZCBvbmNlXG4gICB0aGUgaW5pdGlhbGl6YXRpb24gaXMgZG9uZSkuXG5cbiAgIEF0dHJpYnV0ZSBhc3NpZ25tZW50IHVwZGF0ZXMgdGhlIG1vZHVsZVwncyBuYW1lc3BhY2UgZGljdGlvbmFyeSxcbiAgIGUuZy4sICJtLnggPSAxIiBpcyBlcXVpdmFsZW50IHRvICJtLl9fZGljdF9fWyJ4Il0gPSAxIi5cblxuICAgU3BlY2lhbCByZWFkLW9ubHkgYXR0cmlidXRlOiAiX19kaWN0X18iIGlzIHRoZSBtb2R1bGVcJ3MgbmFtZXNwYWNlXG4gICBhcyBhIGRpY3Rpb25hcnkgb2JqZWN0LlxuXG4gICAqKkNQeXRob24gaW1wbGVtZW50YXRpb24gZGV0YWlsOioqIEJlY2F1c2Ugb2YgdGhlIHdheSBDUHl0aG9uXG4gICBjbGVhcnMgbW9kdWxlIGRpY3Rpb25hcmllcywgdGhlIG1vZHVsZSBkaWN0aW9uYXJ5IHdpbGwgYmUgY2xlYXJlZFxuICAgd2hlbiB0aGUgbW9kdWxlIGZhbGxzIG91dCBvZiBzY29wZSBldmVuIGlmIHRoZSBkaWN0aW9uYXJ5IHN0aWxsIGhhc1xuICAgbGl2ZSByZWZlcmVuY2VzLiAgVG8gYXZvaWQgdGhpcywgY29weSB0aGUgZGljdGlvbmFyeSBvciBrZWVwIHRoZVxuICAgbW9kdWxlIGFyb3VuZCB3aGlsZSB1c2luZyBpdHMgZGljdGlvbmFyeSBkaXJlY3RseS5cblxuICAgUHJlZGVmaW5lZCAod3JpdGFibGUpIGF0dHJpYnV0ZXM6ICJfX25hbWVfXyIgaXMgdGhlIG1vZHVsZVwncyBuYW1lO1xuICAgIl9fZG9jX18iIGlzIHRoZSBtb2R1bGVcJ3MgZG9jdW1lbnRhdGlvbiBzdHJpbmcsIG9yICJOb25lIiBpZlxuICAgdW5hdmFpbGFibGU7ICJfX2ZpbGVfXyIgaXMgdGhlIHBhdGhuYW1lIG9mIHRoZSBmaWxlIGZyb20gd2hpY2ggdGhlXG4gICBtb2R1bGUgd2FzIGxvYWRlZCwgaWYgaXQgd2FzIGxvYWRlZCBmcm9tIGEgZmlsZS4gVGhlICJfX2ZpbGVfXyJcbiAgIGF0dHJpYnV0ZSBtYXkgYmUgbWlzc2luZyBmb3IgY2VydGFpbiB0eXBlcyBvZiBtb2R1bGVzLCBzdWNoIGFzIENcbiAgIG1vZHVsZXMgdGhhdCBhcmUgc3RhdGljYWxseSBsaW5rZWQgaW50byB0aGUgaW50ZXJwcmV0ZXI7IGZvclxuICAgZXh0ZW5zaW9uIG1vZHVsZXMgbG9hZGVkIGR5bmFtaWNhbGx5IGZyb20gYSBzaGFyZWQgbGlicmFyeSwgaXQgaXNcbiAgIHRoZSBwYXRobmFtZSBvZiB0aGUgc2hhcmVkIGxpYnJhcnkgZmlsZS5cblxuQ3VzdG9tIGNsYXNzZXNcbiAgIEN1c3RvbSBjbGFzcyB0eXBlcyBhcmUgdHlwaWNhbGx5IGNyZWF0ZWQgYnkgY2xhc3MgZGVmaW5pdGlvbnMgKHNlZVxuICAgc2VjdGlvbiAqQ2xhc3MgZGVmaW5pdGlvbnMqKS4gIEEgY2xhc3MgaGFzIGEgbmFtZXNwYWNlIGltcGxlbWVudGVkXG4gICBieSBhIGRpY3Rpb25hcnkgb2JqZWN0LiBDbGFzcyBhdHRyaWJ1dGUgcmVmZXJlbmNlcyBhcmUgdHJhbnNsYXRlZFxuICAgdG8gbG9va3VwcyBpbiB0aGlzIGRpY3Rpb25hcnksIGUuZy4sICJDLngiIGlzIHRyYW5zbGF0ZWQgdG9cbiAgICJDLl9fZGljdF9fWyJ4Il0iIChhbHRob3VnaCB0aGVyZSBhcmUgYSBudW1iZXIgb2YgaG9va3Mgd2hpY2ggYWxsb3dcbiAgIGZvciBvdGhlciBtZWFucyBvZiBsb2NhdGluZyBhdHRyaWJ1dGVzKS4gV2hlbiB0aGUgYXR0cmlidXRlIG5hbWUgaXNcbiAgIG5vdCBmb3VuZCB0aGVyZSwgdGhlIGF0dHJpYnV0ZSBzZWFyY2ggY29udGludWVzIGluIHRoZSBiYXNlXG4gICBjbGFzc2VzLiBUaGlzIHNlYXJjaCBvZiB0aGUgYmFzZSBjbGFzc2VzIHVzZXMgdGhlIEMzIG1ldGhvZFxuICAgcmVzb2x1dGlvbiBvcmRlciB3aGljaCBiZWhhdmVzIGNvcnJlY3RseSBldmVuIGluIHRoZSBwcmVzZW5jZSBvZlxuICAgXCdkaWFtb25kXCcgaW5oZXJpdGFuY2Ugc3RydWN0dXJlcyB3aGVyZSB0aGVyZSBhcmUgbXVsdGlwbGVcbiAgIGluaGVyaXRhbmNlIHBhdGhzIGxlYWRpbmcgYmFjayB0byBhIGNvbW1vbiBhbmNlc3Rvci4gQWRkaXRpb25hbFxuICAgZGV0YWlscyBvbiB0aGUgQzMgTVJPIHVzZWQgYnkgUHl0aG9uIGNhbiBiZSBmb3VuZCBpbiB0aGVcbiAgIGRvY3VtZW50YXRpb24gYWNjb21wYW55aW5nIHRoZSAyLjMgcmVsZWFzZSBhdFxuICAgaHR0cHM6Ly93d3cucHl0aG9uLm9yZy9kb3dubG9hZC9yZWxlYXNlcy8yLjMvbXJvLy5cblxuICAgV2hlbiBhIGNsYXNzIGF0dHJpYnV0ZSByZWZlcmVuY2UgKGZvciBjbGFzcyAiQyIsIHNheSkgd291bGQgeWllbGQgYVxuICAgY2xhc3MgbWV0aG9kIG9iamVjdCwgaXQgaXMgdHJhbnNmb3JtZWQgaW50byBhbiBpbnN0YW5jZSBtZXRob2RcbiAgIG9iamVjdCB3aG9zZSAiX19zZWxmX18iIGF0dHJpYnV0ZXMgaXMgIkMiLiAgV2hlbiBpdCB3b3VsZCB5aWVsZCBhXG4gICBzdGF0aWMgbWV0aG9kIG9iamVjdCwgaXQgaXMgdHJhbnNmb3JtZWQgaW50byB0aGUgb2JqZWN0IHdyYXBwZWQgYnlcbiAgIHRoZSBzdGF0aWMgbWV0aG9kIG9iamVjdC4gU2VlIHNlY3Rpb24gKkltcGxlbWVudGluZyBEZXNjcmlwdG9ycypcbiAgIGZvciBhbm90aGVyIHdheSBpbiB3aGljaCBhdHRyaWJ1dGVzIHJldHJpZXZlZCBmcm9tIGEgY2xhc3MgbWF5XG4gICBkaWZmZXIgZnJvbSB0aG9zZSBhY3R1YWxseSBjb250YWluZWQgaW4gaXRzICJfX2RpY3RfXyIuXG5cbiAgIENsYXNzIGF0dHJpYnV0ZSBhc3NpZ25tZW50cyB1cGRhdGUgdGhlIGNsYXNzXCdzIGRpY3Rpb25hcnksIG5ldmVyXG4gICB0aGUgZGljdGlvbmFyeSBvZiBhIGJhc2UgY2xhc3MuXG5cbiAgIEEgY2xhc3Mgb2JqZWN0IGNhbiBiZSBjYWxsZWQgKHNlZSBhYm92ZSkgdG8geWllbGQgYSBjbGFzcyBpbnN0YW5jZVxuICAgKHNlZSBiZWxvdykuXG5cbiAgIFNwZWNpYWwgYXR0cmlidXRlczogIl9fbmFtZV9fIiBpcyB0aGUgY2xhc3MgbmFtZTsgIl9fbW9kdWxlX18iIGlzXG4gICB0aGUgbW9kdWxlIG5hbWUgaW4gd2hpY2ggdGhlIGNsYXNzIHdhcyBkZWZpbmVkOyAiX19kaWN0X18iIGlzIHRoZVxuICAgZGljdGlvbmFyeSBjb250YWluaW5nIHRoZSBjbGFzc1wncyBuYW1lc3BhY2U7ICJfX2Jhc2VzX18iIGlzIGEgdHVwbGVcbiAgIChwb3NzaWJseSBlbXB0eSBvciBhIHNpbmdsZXRvbikgY29udGFpbmluZyB0aGUgYmFzZSBjbGFzc2VzLCBpbiB0aGVcbiAgIG9yZGVyIG9mIHRoZWlyIG9jY3VycmVuY2UgaW4gdGhlIGJhc2UgY2xhc3MgbGlzdDsgIl9fZG9jX18iIGlzIHRoZVxuICAgY2xhc3NcJ3MgZG9jdW1lbnRhdGlvbiBzdHJpbmcsIG9yIE5vbmUgaWYgdW5kZWZpbmVkLlxuXG5DbGFzcyBpbnN0YW5jZXNcbiAgIEEgY2xhc3MgaW5zdGFuY2UgaXMgY3JlYXRlZCBieSBjYWxsaW5nIGEgY2xhc3Mgb2JqZWN0IChzZWUgYWJvdmUpLlxuICAgQSBjbGFzcyBpbnN0YW5jZSBoYXMgYSBuYW1lc3BhY2UgaW1wbGVtZW50ZWQgYXMgYSBkaWN0aW9uYXJ5IHdoaWNoXG4gICBpcyB0aGUgZmlyc3QgcGxhY2UgaW4gd2hpY2ggYXR0cmlidXRlIHJlZmVyZW5jZXMgYXJlIHNlYXJjaGVkLlxuICAgV2hlbiBhbiBhdHRyaWJ1dGUgaXMgbm90IGZvdW5kIHRoZXJlLCBhbmQgdGhlIGluc3RhbmNlXCdzIGNsYXNzIGhhc1xuICAgYW4gYXR0cmlidXRlIGJ5IHRoYXQgbmFtZSwgdGhlIHNlYXJjaCBjb250aW51ZXMgd2l0aCB0aGUgY2xhc3NcbiAgIGF0dHJpYnV0ZXMuICBJZiBhIGNsYXNzIGF0dHJpYnV0ZSBpcyBmb3VuZCB0aGF0IGlzIGEgdXNlci1kZWZpbmVkXG4gICBmdW5jdGlvbiBvYmplY3QsIGl0IGlzIHRyYW5zZm9ybWVkIGludG8gYW4gaW5zdGFuY2UgbWV0aG9kIG9iamVjdFxuICAgd2hvc2UgIl9fc2VsZl9fIiBhdHRyaWJ1dGUgaXMgdGhlIGluc3RhbmNlLiAgU3RhdGljIG1ldGhvZCBhbmRcbiAgIGNsYXNzIG1ldGhvZCBvYmplY3RzIGFyZSBhbHNvIHRyYW5zZm9ybWVkOyBzZWUgYWJvdmUgdW5kZXJcbiAgICJDbGFzc2VzIi4gIFNlZSBzZWN0aW9uICpJbXBsZW1lbnRpbmcgRGVzY3JpcHRvcnMqIGZvciBhbm90aGVyIHdheVxuICAgaW4gd2hpY2ggYXR0cmlidXRlcyBvZiBhIGNsYXNzIHJldHJpZXZlZCB2aWEgaXRzIGluc3RhbmNlcyBtYXlcbiAgIGRpZmZlciBmcm9tIHRoZSBvYmplY3RzIGFjdHVhbGx5IHN0b3JlZCBpbiB0aGUgY2xhc3NcJ3MgIl9fZGljdF9fIi5cbiAgIElmIG5vIGNsYXNzIGF0dHJpYnV0ZSBpcyBmb3VuZCwgYW5kIHRoZSBvYmplY3RcJ3MgY2xhc3MgaGFzIGFcbiAgICJfX2dldGF0dHJfXygpIiBtZXRob2QsIHRoYXQgaXMgY2FsbGVkIHRvIHNhdGlzZnkgdGhlIGxvb2t1cC5cblxuICAgQXR0cmlidXRlIGFzc2lnbm1lbnRzIGFuZCBkZWxldGlvbnMgdXBkYXRlIHRoZSBpbnN0YW5jZVwnc1xuICAgZGljdGlvbmFyeSwgbmV2ZXIgYSBjbGFzc1wncyBkaWN0aW9uYXJ5LiAgSWYgdGhlIGNsYXNzIGhhcyBhXG4gICAiX19zZXRhdHRyX18oKSIgb3IgIl9fZGVsYXR0cl9fKCkiIG1ldGhvZCwgdGhpcyBpcyBjYWxsZWQgaW5zdGVhZFxuICAgb2YgdXBkYXRpbmcgdGhlIGluc3RhbmNlIGRpY3Rpb25hcnkgZGlyZWN0bHkuXG5cbiAgIENsYXNzIGluc3RhbmNlcyBjYW4gcHJldGVuZCB0byBiZSBudW1iZXJzLCBzZXF1ZW5jZXMsIG9yIG1hcHBpbmdzXG4gICBpZiB0aGV5IGhhdmUgbWV0aG9kcyB3aXRoIGNlcnRhaW4gc3BlY2lhbCBuYW1lcy4gIFNlZSBzZWN0aW9uXG4gICAqU3BlY2lhbCBtZXRob2QgbmFtZXMqLlxuXG4gICBTcGVjaWFsIGF0dHJpYnV0ZXM6ICJfX2RpY3RfXyIgaXMgdGhlIGF0dHJpYnV0ZSBkaWN0aW9uYXJ5O1xuICAgIl9fY2xhc3NfXyIgaXMgdGhlIGluc3RhbmNlXCdzIGNsYXNzLlxuXG5JL08gb2JqZWN0cyAoYWxzbyBrbm93biBhcyBmaWxlIG9iamVjdHMpXG4gICBBICpmaWxlIG9iamVjdCogcmVwcmVzZW50cyBhbiBvcGVuIGZpbGUuICBWYXJpb3VzIHNob3J0Y3V0cyBhcmVcbiAgIGF2YWlsYWJsZSB0byBjcmVhdGUgZmlsZSBvYmplY3RzOiB0aGUgIm9wZW4oKSIgYnVpbHQtaW4gZnVuY3Rpb24sXG4gICBhbmQgYWxzbyAib3MucG9wZW4oKSIsICJvcy5mZG9wZW4oKSIsIGFuZCB0aGUgIm1ha2VmaWxlKCkiIG1ldGhvZFxuICAgb2Ygc29ja2V0IG9iamVjdHMgKGFuZCBwZXJoYXBzIGJ5IG90aGVyIGZ1bmN0aW9ucyBvciBtZXRob2RzXG4gICBwcm92aWRlZCBieSBleHRlbnNpb24gbW9kdWxlcykuXG5cbiAgIFRoZSBvYmplY3RzICJzeXMuc3RkaW4iLCAic3lzLnN0ZG91dCIgYW5kICJzeXMuc3RkZXJyIiBhcmVcbiAgIGluaXRpYWxpemVkIHRvIGZpbGUgb2JqZWN0cyBjb3JyZXNwb25kaW5nIHRvIHRoZSBpbnRlcnByZXRlclwnc1xuICAgc3RhbmRhcmQgaW5wdXQsIG91dHB1dCBhbmQgZXJyb3Igc3RyZWFtczsgdGhleSBhcmUgYWxsIG9wZW4gaW4gdGV4dFxuICAgbW9kZSBhbmQgdGhlcmVmb3JlIGZvbGxvdyB0aGUgaW50ZXJmYWNlIGRlZmluZWQgYnkgdGhlXG4gICAiaW8uVGV4dElPQmFzZSIgYWJzdHJhY3QgY2xhc3MuXG5cbkludGVybmFsIHR5cGVzXG4gICBBIGZldyB0eXBlcyB1c2VkIGludGVybmFsbHkgYnkgdGhlIGludGVycHJldGVyIGFyZSBleHBvc2VkIHRvIHRoZVxuICAgdXNlci4gVGhlaXIgZGVmaW5pdGlvbnMgbWF5IGNoYW5nZSB3aXRoIGZ1dHVyZSB2ZXJzaW9ucyBvZiB0aGVcbiAgIGludGVycHJldGVyLCBidXQgdGhleSBhcmUgbWVudGlvbmVkIGhlcmUgZm9yIGNvbXBsZXRlbmVzcy5cblxuICAgQ29kZSBvYmplY3RzXG4gICAgICBDb2RlIG9iamVjdHMgcmVwcmVzZW50ICpieXRlLWNvbXBpbGVkKiBleGVjdXRhYmxlIFB5dGhvbiBjb2RlLFxuICAgICAgb3IgKmJ5dGVjb2RlKi4gVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBhIGNvZGUgb2JqZWN0IGFuZCBhXG4gICAgICBmdW5jdGlvbiBvYmplY3QgaXMgdGhhdCB0aGUgZnVuY3Rpb24gb2JqZWN0IGNvbnRhaW5zIGFuIGV4cGxpY2l0XG4gICAgICByZWZlcmVuY2UgdG8gdGhlIGZ1bmN0aW9uXCdzIGdsb2JhbHMgKHRoZSBtb2R1bGUgaW4gd2hpY2ggaXQgd2FzXG4gICAgICBkZWZpbmVkKSwgd2hpbGUgYSBjb2RlIG9iamVjdCBjb250YWlucyBubyBjb250ZXh0OyBhbHNvIHRoZVxuICAgICAgZGVmYXVsdCBhcmd1bWVudCB2YWx1ZXMgYXJlIHN0b3JlZCBpbiB0aGUgZnVuY3Rpb24gb2JqZWN0LCBub3RcbiAgICAgIGluIHRoZSBjb2RlIG9iamVjdCAoYmVjYXVzZSB0aGV5IHJlcHJlc2VudCB2YWx1ZXMgY2FsY3VsYXRlZCBhdFxuICAgICAgcnVuLXRpbWUpLiAgVW5saWtlIGZ1bmN0aW9uIG9iamVjdHMsIGNvZGUgb2JqZWN0cyBhcmUgaW1tdXRhYmxlXG4gICAgICBhbmQgY29udGFpbiBubyByZWZlcmVuY2VzIChkaXJlY3RseSBvciBpbmRpcmVjdGx5KSB0byBtdXRhYmxlXG4gICAgICBvYmplY3RzLlxuXG4gICAgICBTcGVjaWFsIHJlYWQtb25seSBhdHRyaWJ1dGVzOiAiY29fbmFtZSIgZ2l2ZXMgdGhlIGZ1bmN0aW9uIG5hbWU7XG4gICAgICAiY29fYXJnY291bnQiIGlzIHRoZSBudW1iZXIgb2YgcG9zaXRpb25hbCBhcmd1bWVudHMgKGluY2x1ZGluZ1xuICAgICAgYXJndW1lbnRzIHdpdGggZGVmYXVsdCB2YWx1ZXMpOyAiY29fbmxvY2FscyIgaXMgdGhlIG51bWJlciBvZlxuICAgICAgbG9jYWwgdmFyaWFibGVzIHVzZWQgYnkgdGhlIGZ1bmN0aW9uIChpbmNsdWRpbmcgYXJndW1lbnRzKTtcbiAgICAgICJjb192YXJuYW1lcyIgaXMgYSB0dXBsZSBjb250YWluaW5nIHRoZSBuYW1lcyBvZiB0aGUgbG9jYWxcbiAgICAgIHZhcmlhYmxlcyAoc3RhcnRpbmcgd2l0aCB0aGUgYXJndW1lbnQgbmFtZXMpOyAiY29fY2VsbHZhcnMiIGlzIGFcbiAgICAgIHR1cGxlIGNvbnRhaW5pbmcgdGhlIG5hbWVzIG9mIGxvY2FsIHZhcmlhYmxlcyB0aGF0IGFyZVxuICAgICAgcmVmZXJlbmNlZCBieSBuZXN0ZWQgZnVuY3Rpb25zOyAiY29fZnJlZXZhcnMiIGlzIGEgdHVwbGVcbiAgICAgIGNvbnRhaW5pbmcgdGhlIG5hbWVzIG9mIGZyZWUgdmFyaWFibGVzOyAiY29fY29kZSIgaXMgYSBzdHJpbmdcbiAgICAgIHJlcHJlc2VudGluZyB0aGUgc2VxdWVuY2Ugb2YgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb25zOyAiY29fY29uc3RzIlxuICAgICAgaXMgYSB0dXBsZSBjb250YWluaW5nIHRoZSBsaXRlcmFscyB1c2VkIGJ5IHRoZSBieXRlY29kZTtcbiAgICAgICJjb19uYW1lcyIgaXMgYSB0dXBsZSBjb250YWluaW5nIHRoZSBuYW1lcyB1c2VkIGJ5IHRoZSBieXRlY29kZTtcbiAgICAgICJjb19maWxlbmFtZSIgaXMgdGhlIGZpbGVuYW1lIGZyb20gd2hpY2ggdGhlIGNvZGUgd2FzIGNvbXBpbGVkO1xuICAgICAgImNvX2ZpcnN0bGluZW5vIiBpcyB0aGUgZmlyc3QgbGluZSBudW1iZXIgb2YgdGhlIGZ1bmN0aW9uO1xuICAgICAgImNvX2xub3RhYiIgaXMgYSBzdHJpbmcgZW5jb2RpbmcgdGhlIG1hcHBpbmcgZnJvbSBieXRlY29kZVxuICAgICAgb2Zmc2V0cyB0byBsaW5lIG51bWJlcnMgKGZvciBkZXRhaWxzIHNlZSB0aGUgc291cmNlIGNvZGUgb2YgdGhlXG4gICAgICBpbnRlcnByZXRlcik7ICJjb19zdGFja3NpemUiIGlzIHRoZSByZXF1aXJlZCBzdGFjayBzaXplXG4gICAgICAoaW5jbHVkaW5nIGxvY2FsIHZhcmlhYmxlcyk7ICJjb19mbGFncyIgaXMgYW4gaW50ZWdlciBlbmNvZGluZyBhXG4gICAgICBudW1iZXIgb2YgZmxhZ3MgZm9yIHRoZSBpbnRlcnByZXRlci5cblxuICAgICAgVGhlIGZvbGxvd2luZyBmbGFnIGJpdHMgYXJlIGRlZmluZWQgZm9yICJjb19mbGFncyI6IGJpdCAiMHgwNCJcbiAgICAgIGlzIHNldCBpZiB0aGUgZnVuY3Rpb24gdXNlcyB0aGUgIiphcmd1bWVudHMiIHN5bnRheCB0byBhY2NlcHQgYW5cbiAgICAgIGFyYml0cmFyeSBudW1iZXIgb2YgcG9zaXRpb25hbCBhcmd1bWVudHM7IGJpdCAiMHgwOCIgaXMgc2V0IGlmXG4gICAgICB0aGUgZnVuY3Rpb24gdXNlcyB0aGUgIioqa2V5d29yZHMiIHN5bnRheCB0byBhY2NlcHQgYXJiaXRyYXJ5XG4gICAgICBrZXl3b3JkIGFyZ3VtZW50czsgYml0ICIweDIwIiBpcyBzZXQgaWYgdGhlIGZ1bmN0aW9uIGlzIGFcbiAgICAgIGdlbmVyYXRvci5cblxuICAgICAgRnV0dXJlIGZlYXR1cmUgZGVjbGFyYXRpb25zICgiZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBkaXZpc2lvbiIpXG4gICAgICBhbHNvIHVzZSBiaXRzIGluICJjb19mbGFncyIgdG8gaW5kaWNhdGUgd2hldGhlciBhIGNvZGUgb2JqZWN0XG4gICAgICB3YXMgY29tcGlsZWQgd2l0aCBhIHBhcnRpY3VsYXIgZmVhdHVyZSBlbmFibGVkOiBiaXQgIjB4MjAwMCIgaXNcbiAgICAgIHNldCBpZiB0aGUgZnVuY3Rpb24gd2FzIGNvbXBpbGVkIHdpdGggZnV0dXJlIGRpdmlzaW9uIGVuYWJsZWQ7XG4gICAgICBiaXRzICIweDEwIiBhbmQgIjB4MTAwMCIgd2VyZSB1c2VkIGluIGVhcmxpZXIgdmVyc2lvbnMgb2ZcbiAgICAgIFB5dGhvbi5cblxuICAgICAgT3RoZXIgYml0cyBpbiAiY29fZmxhZ3MiIGFyZSByZXNlcnZlZCBmb3IgaW50ZXJuYWwgdXNlLlxuXG4gICAgICBJZiBhIGNvZGUgb2JqZWN0IHJlcHJlc2VudHMgYSBmdW5jdGlvbiwgdGhlIGZpcnN0IGl0ZW0gaW5cbiAgICAgICJjb19jb25zdHMiIGlzIHRoZSBkb2N1bWVudGF0aW9uIHN0cmluZyBvZiB0aGUgZnVuY3Rpb24sIG9yXG4gICAgICAiTm9uZSIgaWYgdW5kZWZpbmVkLlxuXG4gICBGcmFtZSBvYmplY3RzXG4gICAgICBGcmFtZSBvYmplY3RzIHJlcHJlc2VudCBleGVjdXRpb24gZnJhbWVzLiAgVGhleSBtYXkgb2NjdXIgaW5cbiAgICAgIHRyYWNlYmFjayBvYmplY3RzIChzZWUgYmVsb3cpLlxuXG4gICAgICBTcGVjaWFsIHJlYWQtb25seSBhdHRyaWJ1dGVzOiAiZl9iYWNrIiBpcyB0byB0aGUgcHJldmlvdXMgc3RhY2tcbiAgICAgIGZyYW1lICh0b3dhcmRzIHRoZSBjYWxsZXIpLCBvciAiTm9uZSIgaWYgdGhpcyBpcyB0aGUgYm90dG9tXG4gICAgICBzdGFjayBmcmFtZTsgImZfY29kZSIgaXMgdGhlIGNvZGUgb2JqZWN0IGJlaW5nIGV4ZWN1dGVkIGluIHRoaXNcbiAgICAgIGZyYW1lOyAiZl9sb2NhbHMiIGlzIHRoZSBkaWN0aW9uYXJ5IHVzZWQgdG8gbG9vayB1cCBsb2NhbFxuICAgICAgdmFyaWFibGVzOyAiZl9nbG9iYWxzIiBpcyB1c2VkIGZvciBnbG9iYWwgdmFyaWFibGVzO1xuICAgICAgImZfYnVpbHRpbnMiIGlzIHVzZWQgZm9yIGJ1aWx0LWluIChpbnRyaW5zaWMpIG5hbWVzOyAiZl9sYXN0aSJcbiAgICAgIGdpdmVzIHRoZSBwcmVjaXNlIGluc3RydWN0aW9uICh0aGlzIGlzIGFuIGluZGV4IGludG8gdGhlXG4gICAgICBieXRlY29kZSBzdHJpbmcgb2YgdGhlIGNvZGUgb2JqZWN0KS5cblxuICAgICAgU3BlY2lhbCB3cml0YWJsZSBhdHRyaWJ1dGVzOiAiZl90cmFjZSIsIGlmIG5vdCAiTm9uZSIsIGlzIGFcbiAgICAgIGZ1bmN0aW9uIGNhbGxlZCBhdCB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgY29kZSBsaW5lICh0aGlzIGlzXG4gICAgICB1c2VkIGJ5IHRoZSBkZWJ1Z2dlcik7ICJmX2xpbmVubyIgaXMgdGhlIGN1cnJlbnQgbGluZSBudW1iZXIgb2ZcbiAgICAgIHRoZSBmcmFtZSAtLS0gd3JpdGluZyB0byB0aGlzIGZyb20gd2l0aGluIGEgdHJhY2UgZnVuY3Rpb24ganVtcHNcbiAgICAgIHRvIHRoZSBnaXZlbiBsaW5lIChvbmx5IGZvciB0aGUgYm90dG9tLW1vc3QgZnJhbWUpLiAgQSBkZWJ1Z2dlclxuICAgICAgY2FuIGltcGxlbWVudCBhIEp1bXAgY29tbWFuZCAoYWthIFNldCBOZXh0IFN0YXRlbWVudCkgYnkgd3JpdGluZ1xuICAgICAgdG8gZl9saW5lbm8uXG5cbiAgICAgIEZyYW1lIG9iamVjdHMgc3VwcG9ydCBvbmUgbWV0aG9kOlxuXG4gICAgICBmcmFtZS5jbGVhcigpXG5cbiAgICAgICAgIFRoaXMgbWV0aG9kIGNsZWFycyBhbGwgcmVmZXJlbmNlcyB0byBsb2NhbCB2YXJpYWJsZXMgaGVsZCBieVxuICAgICAgICAgdGhlIGZyYW1lLiAgQWxzbywgaWYgdGhlIGZyYW1lIGJlbG9uZ2VkIHRvIGEgZ2VuZXJhdG9yLCB0aGVcbiAgICAgICAgIGdlbmVyYXRvciBpcyBmaW5hbGl6ZWQuICBUaGlzIGhlbHBzIGJyZWFrIHJlZmVyZW5jZSBjeWNsZXNcbiAgICAgICAgIGludm9sdmluZyBmcmFtZSBvYmplY3RzIChmb3IgZXhhbXBsZSB3aGVuIGNhdGNoaW5nIGFuXG4gICAgICAgICBleGNlcHRpb24gYW5kIHN0b3JpbmcgaXRzIHRyYWNlYmFjayBmb3IgbGF0ZXIgdXNlKS5cblxuICAgICAgICAgIlJ1bnRpbWVFcnJvciIgaXMgcmFpc2VkIGlmIHRoZSBmcmFtZSBpcyBjdXJyZW50bHkgZXhlY3V0aW5nLlxuXG4gICAgICAgICBOZXcgaW4gdmVyc2lvbiAzLjQuXG5cbiAgIFRyYWNlYmFjayBvYmplY3RzXG4gICAgICBUcmFjZWJhY2sgb2JqZWN0cyByZXByZXNlbnQgYSBzdGFjayB0cmFjZSBvZiBhbiBleGNlcHRpb24uICBBXG4gICAgICB0cmFjZWJhY2sgb2JqZWN0IGlzIGNyZWF0ZWQgd2hlbiBhbiBleGNlcHRpb24gb2NjdXJzLiAgV2hlbiB0aGVcbiAgICAgIHNlYXJjaCBmb3IgYW4gZXhjZXB0aW9uIGhhbmRsZXIgdW53aW5kcyB0aGUgZXhlY3V0aW9uIHN0YWNrLCBhdFxuICAgICAgZWFjaCB1bndvdW5kIGxldmVsIGEgdHJhY2ViYWNrIG9iamVjdCBpcyBpbnNlcnRlZCBpbiBmcm9udCBvZlxuICAgICAgdGhlIGN1cnJlbnQgdHJhY2ViYWNrLiAgV2hlbiBhbiBleGNlcHRpb24gaGFuZGxlciBpcyBlbnRlcmVkLFxuICAgICAgdGhlIHN0YWNrIHRyYWNlIGlzIG1hZGUgYXZhaWxhYmxlIHRvIHRoZSBwcm9ncmFtLiAoU2VlIHNlY3Rpb25cbiAgICAgICpUaGUgdHJ5IHN0YXRlbWVudCouKSBJdCBpcyBhY2Nlc3NpYmxlIGFzIHRoZSB0aGlyZCBpdGVtIG9mIHRoZVxuICAgICAgdHVwbGUgcmV0dXJuZWQgYnkgInN5cy5leGNfaW5mbygpIi4gV2hlbiB0aGUgcHJvZ3JhbSBjb250YWlucyBub1xuICAgICAgc3VpdGFibGUgaGFuZGxlciwgdGhlIHN0YWNrIHRyYWNlIGlzIHdyaXR0ZW4gKG5pY2VseSBmb3JtYXR0ZWQpXG4gICAgICB0byB0aGUgc3RhbmRhcmQgZXJyb3Igc3RyZWFtOyBpZiB0aGUgaW50ZXJwcmV0ZXIgaXMgaW50ZXJhY3RpdmUsXG4gICAgICBpdCBpcyBhbHNvIG1hZGUgYXZhaWxhYmxlIHRvIHRoZSB1c2VyIGFzICJzeXMubGFzdF90cmFjZWJhY2siLlxuXG4gICAgICBTcGVjaWFsIHJlYWQtb25seSBhdHRyaWJ1dGVzOiAidGJfbmV4dCIgaXMgdGhlIG5leHQgbGV2ZWwgaW4gdGhlXG4gICAgICBzdGFjayB0cmFjZSAodG93YXJkcyB0aGUgZnJhbWUgd2hlcmUgdGhlIGV4Y2VwdGlvbiBvY2N1cnJlZCksIG9yXG4gICAgICAiTm9uZSIgaWYgdGhlcmUgaXMgbm8gbmV4dCBsZXZlbDsgInRiX2ZyYW1lIiBwb2ludHMgdG8gdGhlXG4gICAgICBleGVjdXRpb24gZnJhbWUgb2YgdGhlIGN1cnJlbnQgbGV2ZWw7ICJ0Yl9saW5lbm8iIGdpdmVzIHRoZSBsaW5lXG4gICAgICBudW1iZXIgd2hlcmUgdGhlIGV4Y2VwdGlvbiBvY2N1cnJlZDsgInRiX2xhc3RpIiBpbmRpY2F0ZXMgdGhlXG4gICAgICBwcmVjaXNlIGluc3RydWN0aW9uLiAgVGhlIGxpbmUgbnVtYmVyIGFuZCBsYXN0IGluc3RydWN0aW9uIGluXG4gICAgICB0aGUgdHJhY2ViYWNrIG1heSBkaWZmZXIgZnJvbSB0aGUgbGluZSBudW1iZXIgb2YgaXRzIGZyYW1lXG4gICAgICBvYmplY3QgaWYgdGhlIGV4Y2VwdGlvbiBvY2N1cnJlZCBpbiBhICJ0cnkiIHN0YXRlbWVudCB3aXRoIG5vXG4gICAgICBtYXRjaGluZyBleGNlcHQgY2xhdXNlIG9yIHdpdGggYSBmaW5hbGx5IGNsYXVzZS5cblxuICAgU2xpY2Ugb2JqZWN0c1xuICAgICAgU2xpY2Ugb2JqZWN0cyBhcmUgdXNlZCB0byByZXByZXNlbnQgc2xpY2VzIGZvciAiX19nZXRpdGVtX18oKSJcbiAgICAgIG1ldGhvZHMuICBUaGV5IGFyZSBhbHNvIGNyZWF0ZWQgYnkgdGhlIGJ1aWx0LWluICJzbGljZSgpIlxuICAgICAgZnVuY3Rpb24uXG5cbiAgICAgIFNwZWNpYWwgcmVhZC1vbmx5IGF0dHJpYnV0ZXM6ICJzdGFydCIgaXMgdGhlIGxvd2VyIGJvdW5kOyAic3RvcCJcbiAgICAgIGlzIHRoZSB1cHBlciBib3VuZDsgInN0ZXAiIGlzIHRoZSBzdGVwIHZhbHVlOyBlYWNoIGlzICJOb25lIiBpZlxuICAgICAgb21pdHRlZC4gIFRoZXNlIGF0dHJpYnV0ZXMgY2FuIGhhdmUgYW55IHR5cGUuXG5cbiAgICAgIFNsaWNlIG9iamVjdHMgc3VwcG9ydCBvbmUgbWV0aG9kOlxuXG4gICAgICBzbGljZS5pbmRpY2VzKHNlbGYsIGxlbmd0aClcblxuICAgICAgICAgVGhpcyBtZXRob2QgdGFrZXMgYSBzaW5nbGUgaW50ZWdlciBhcmd1bWVudCAqbGVuZ3RoKiBhbmRcbiAgICAgICAgIGNvbXB1dGVzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzbGljZSB0aGF0IHRoZSBzbGljZSBvYmplY3RcbiAgICAgICAgIHdvdWxkIGRlc2NyaWJlIGlmIGFwcGxpZWQgdG8gYSBzZXF1ZW5jZSBvZiAqbGVuZ3RoKiBpdGVtcy5cbiAgICAgICAgIEl0IHJldHVybnMgYSB0dXBsZSBvZiB0aHJlZSBpbnRlZ2VyczsgcmVzcGVjdGl2ZWx5IHRoZXNlIGFyZVxuICAgICAgICAgdGhlICpzdGFydCogYW5kICpzdG9wKiBpbmRpY2VzIGFuZCB0aGUgKnN0ZXAqIG9yIHN0cmlkZVxuICAgICAgICAgbGVuZ3RoIG9mIHRoZSBzbGljZS4gTWlzc2luZyBvciBvdXQtb2YtYm91bmRzIGluZGljZXMgYXJlXG4gICAgICAgICBoYW5kbGVkIGluIGEgbWFubmVyIGNvbnNpc3RlbnQgd2l0aCByZWd1bGFyIHNsaWNlcy5cblxuICAgU3RhdGljIG1ldGhvZCBvYmplY3RzXG4gICAgICBTdGF0aWMgbWV0aG9kIG9iamVjdHMgcHJvdmlkZSBhIHdheSBvZiBkZWZlYXRpbmcgdGhlXG4gICAgICB0cmFuc2Zvcm1hdGlvbiBvZiBmdW5jdGlvbiBvYmplY3RzIHRvIG1ldGhvZCBvYmplY3RzIGRlc2NyaWJlZFxuICAgICAgYWJvdmUuIEEgc3RhdGljIG1ldGhvZCBvYmplY3QgaXMgYSB3cmFwcGVyIGFyb3VuZCBhbnkgb3RoZXJcbiAgICAgIG9iamVjdCwgdXN1YWxseSBhIHVzZXItZGVmaW5lZCBtZXRob2Qgb2JqZWN0LiBXaGVuIGEgc3RhdGljXG4gICAgICBtZXRob2Qgb2JqZWN0IGlzIHJldHJpZXZlZCBmcm9tIGEgY2xhc3Mgb3IgYSBjbGFzcyBpbnN0YW5jZSwgdGhlXG4gICAgICBvYmplY3QgYWN0dWFsbHkgcmV0dXJuZWQgaXMgdGhlIHdyYXBwZWQgb2JqZWN0LCB3aGljaCBpcyBub3RcbiAgICAgIHN1YmplY3QgdG8gYW55IGZ1cnRoZXIgdHJhbnNmb3JtYXRpb24uIFN0YXRpYyBtZXRob2Qgb2JqZWN0cyBhcmVcbiAgICAgIG5vdCB0aGVtc2VsdmVzIGNhbGxhYmxlLCBhbHRob3VnaCB0aGUgb2JqZWN0cyB0aGV5IHdyYXAgdXN1YWxseVxuICAgICAgYXJlLiBTdGF0aWMgbWV0aG9kIG9iamVjdHMgYXJlIGNyZWF0ZWQgYnkgdGhlIGJ1aWx0LWluXG4gICAgICAic3RhdGljbWV0aG9kKCkiIGNvbnN0cnVjdG9yLlxuXG4gICBDbGFzcyBtZXRob2Qgb2JqZWN0c1xuICAgICAgQSBjbGFzcyBtZXRob2Qgb2JqZWN0LCBsaWtlIGEgc3RhdGljIG1ldGhvZCBvYmplY3QsIGlzIGEgd3JhcHBlclxuICAgICAgYXJvdW5kIGFub3RoZXIgb2JqZWN0IHRoYXQgYWx0ZXJzIHRoZSB3YXkgaW4gd2hpY2ggdGhhdCBvYmplY3RcbiAgICAgIGlzIHJldHJpZXZlZCBmcm9tIGNsYXNzZXMgYW5kIGNsYXNzIGluc3RhbmNlcy4gVGhlIGJlaGF2aW91ciBvZlxuICAgICAgY2xhc3MgbWV0aG9kIG9iamVjdHMgdXBvbiBzdWNoIHJldHJpZXZhbCBpcyBkZXNjcmliZWQgYWJvdmUsXG4gICAgICB1bmRlciAiVXNlci1kZWZpbmVkIG1ldGhvZHMiLiBDbGFzcyBtZXRob2Qgb2JqZWN0cyBhcmUgY3JlYXRlZFxuICAgICAgYnkgdGhlIGJ1aWx0LWluICJjbGFzc21ldGhvZCgpIiBjb25zdHJ1Y3Rvci5cbicsCisgJ3R5cGVzZnVuY3Rpb25zJzogdSdcbkZ1bmN0aW9uc1xuKioqKioqKioqXG5cbkZ1bmN0aW9uIG9iamVjdHMgYXJlIGNyZWF0ZWQgYnkgZnVuY3Rpb24gZGVmaW5pdGlvbnMuICBUaGUgb25seVxub3BlcmF0aW9uIG9uIGEgZnVuY3Rpb24gb2JqZWN0IGlzIHRvIGNhbGwgaXQ6ICJmdW5jKGFyZ3VtZW50LWxpc3QpIi5cblxuVGhlcmUgYXJlIHJlYWxseSB0d28gZmxhdm9ycyBvZiBmdW5jdGlvbiBvYmplY3RzOiBidWlsdC1pbiBmdW5jdGlvbnNcbmFuZCB1c2VyLWRlZmluZWQgZnVuY3Rpb25zLiAgQm90aCBzdXBwb3J0IHRoZSBzYW1lIG9wZXJhdGlvbiAodG8gY2FsbFxudGhlIGZ1bmN0aW9uKSwgYnV0IHRoZSBpbXBsZW1lbnRhdGlvbiBpcyBkaWZmZXJlbnQsIGhlbmNlIHRoZVxuZGlmZmVyZW50IG9iamVjdCB0eXBlcy5cblxuU2VlICpGdW5jdGlvbiBkZWZpbml0aW9ucyogZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4nLAorICd0eXBlc21hcHBpbmcnOiB1J1xuTWFwcGluZyBUeXBlcyAtLS0gImRpY3QiXG4qKioqKioqKioqKioqKioqKioqKioqKipcblxuQSAqbWFwcGluZyogb2JqZWN0IG1hcHMgKmhhc2hhYmxlKiB2YWx1ZXMgdG8gYXJiaXRyYXJ5IG9iamVjdHMuXG5NYXBwaW5ncyBhcmUgbXV0YWJsZSBvYmplY3RzLiAgVGhlcmUgaXMgY3VycmVudGx5IG9ubHkgb25lIHN0YW5kYXJkXG5tYXBwaW5nIHR5cGUsIHRoZSAqZGljdGlvbmFyeSouICAoRm9yIG90aGVyIGNvbnRhaW5lcnMgc2VlIHRoZSBidWlsdC1cbmluICJsaXN0IiwgInNldCIsIGFuZCAidHVwbGUiIGNsYXNzZXMsIGFuZCB0aGUgImNvbGxlY3Rpb25zIiBtb2R1bGUuKVxuXG5BIGRpY3Rpb25hcnlcJ3Mga2V5cyBhcmUgKmFsbW9zdCogYXJiaXRyYXJ5IHZhbHVlcy4gIFZhbHVlcyB0aGF0IGFyZVxubm90ICpoYXNoYWJsZSosIHRoYXQgaXMsIHZhbHVlcyBjb250YWluaW5nIGxpc3RzLCBkaWN0aW9uYXJpZXMgb3Jcbm90aGVyIG11dGFibGUgdHlwZXMgKHRoYXQgYXJlIGNvbXBhcmVkIGJ5IHZhbHVlIHJhdGhlciB0aGFuIGJ5IG9iamVjdFxuaWRlbnRpdHkpIG1heSBub3QgYmUgdXNlZCBhcyBrZXlzLiAgTnVtZXJpYyB0eXBlcyB1c2VkIGZvciBrZXlzIG9iZXlcbnRoZSBub3JtYWwgcnVsZXMgZm9yIG51bWVyaWMgY29tcGFyaXNvbjogaWYgdHdvIG51bWJlcnMgY29tcGFyZSBlcXVhbFxuKHN1Y2ggYXMgIjEiIGFuZCAiMS4wIikgdGhlbiB0aGV5IGNhbiBiZSB1c2VkIGludGVyY2hhbmdlYWJseSB0byBpbmRleFxudGhlIHNhbWUgZGljdGlvbmFyeSBlbnRyeS4gIChOb3RlIGhvd2V2ZXIsIHRoYXQgc2luY2UgY29tcHV0ZXJzIHN0b3JlXG5mbG9hdGluZy1wb2ludCBudW1iZXJzIGFzIGFwcHJveGltYXRpb25zIGl0IGlzIHVzdWFsbHkgdW53aXNlIHRvIHVzZVxudGhlbSBhcyBkaWN0aW9uYXJ5IGtleXMuKVxuXG5EaWN0aW9uYXJpZXMgY2FuIGJlIGNyZWF0ZWQgYnkgcGxhY2luZyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mICJrZXk6XG52YWx1ZSIgcGFpcnMgd2l0aGluIGJyYWNlcywgZm9yIGV4YW1wbGU6ICJ7XCdqYWNrXCc6IDQwOTgsIFwnc2pvZXJkXCc6XG40MTI3fSIgb3IgIns0MDk4OiBcJ2phY2tcJywgNDEyNzogXCdzam9lcmRcJ30iLCBvciBieSB0aGUgImRpY3QiXG5jb25zdHJ1Y3Rvci5cblxuY2xhc3MgY2xhc3MgZGljdCgqKmt3YXJnKVxuY2xhc3MgY2xhc3MgZGljdChtYXBwaW5nLCAqKmt3YXJnKVxuY2xhc3MgY2xhc3MgZGljdChpdGVyYWJsZSwgKiprd2FyZylcblxuICAgUmV0dXJuIGEgbmV3IGRpY3Rpb25hcnkgaW5pdGlhbGl6ZWQgZnJvbSBhbiBvcHRpb25hbCBwb3NpdGlvbmFsXG4gICBhcmd1bWVudCBhbmQgYSBwb3NzaWJseSBlbXB0eSBzZXQgb2Yga2V5d29yZCBhcmd1bWVudHMuXG5cbiAgIElmIG5vIHBvc2l0aW9uYWwgYXJndW1lbnQgaXMgZ2l2ZW4sIGFuIGVtcHR5IGRpY3Rpb25hcnkgaXMgY3JlYXRlZC5cbiAgIElmIGEgcG9zaXRpb25hbCBhcmd1bWVudCBpcyBnaXZlbiBhbmQgaXQgaXMgYSBtYXBwaW5nIG9iamVjdCwgYVxuICAgZGljdGlvbmFyeSBpcyBjcmVhdGVkIHdpdGggdGhlIHNhbWUga2V5LXZhbHVlIHBhaXJzIGFzIHRoZSBtYXBwaW5nXG4gICBvYmplY3QuICBPdGhlcndpc2UsIHRoZSBwb3NpdGlvbmFsIGFyZ3VtZW50IG11c3QgYmUgYW4gKml0ZXJhYmxlKlxuICAgb2JqZWN0LiAgRWFjaCBpdGVtIGluIHRoZSBpdGVyYWJsZSBtdXN0IGl0c2VsZiBiZSBhbiBpdGVyYWJsZSB3aXRoXG4gICBleGFjdGx5IHR3byBvYmplY3RzLiAgVGhlIGZpcnN0IG9iamVjdCBvZiBlYWNoIGl0ZW0gYmVjb21lcyBhIGtleVxuICAgaW4gdGhlIG5ldyBkaWN0aW9uYXJ5LCBhbmQgdGhlIHNlY29uZCBvYmplY3QgdGhlIGNvcnJlc3BvbmRpbmdcbiAgIHZhbHVlLiAgSWYgYSBrZXkgb2NjdXJzIG1vcmUgdGhhbiBvbmNlLCB0aGUgbGFzdCB2YWx1ZSBmb3IgdGhhdCBrZXlcbiAgIGJlY29tZXMgdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWUgaW4gdGhlIG5ldyBkaWN0aW9uYXJ5LlxuXG4gICBJZiBrZXl3b3JkIGFyZ3VtZW50cyBhcmUgZ2l2ZW4sIHRoZSBrZXl3b3JkIGFyZ3VtZW50cyBhbmQgdGhlaXJcbiAgIHZhbHVlcyBhcmUgYWRkZWQgdG8gdGhlIGRpY3Rpb25hcnkgY3JlYXRlZCBmcm9tIHRoZSBwb3NpdGlvbmFsXG4gICBhcmd1bWVudC4gIElmIGEga2V5IGJlaW5nIGFkZGVkIGlzIGFscmVhZHkgcHJlc2VudCwgdGhlIHZhbHVlIGZyb21cbiAgIHRoZSBrZXl3b3JkIGFyZ3VtZW50IHJlcGxhY2VzIHRoZSB2YWx1ZSBmcm9tIHRoZSBwb3NpdGlvbmFsXG4gICBhcmd1bWVudC5cblxuICAgVG8gaWxsdXN0cmF0ZSwgdGhlIGZvbGxvd2luZyBleGFtcGxlcyBhbGwgcmV0dXJuIGEgZGljdGlvbmFyeSBlcXVhbFxuICAgdG8gInsib25lIjogMSwgInR3byI6IDIsICJ0aHJlZSI6IDN9IjpcblxuICAgICAgPj4+IGEgPSBkaWN0KG9uZT0xLCB0d289MiwgdGhyZWU9MylcbiAgICAgID4+PiBiID0ge1wnb25lXCc6IDEsIFwndHdvXCc6IDIsIFwndGhyZWVcJzogM31cbiAgICAgID4+PiBjID0gZGljdCh6aXAoW1wnb25lXCcsIFwndHdvXCcsIFwndGhyZWVcJ10sIFsxLCAyLCAzXSkpXG4gICAgICA+Pj4gZCA9IGRpY3QoWyhcJ3R3b1wnLCAyKSwgKFwnb25lXCcsIDEpLCAoXCd0aHJlZVwnLCAzKV0pXG4gICAgICA+Pj4gZSA9IGRpY3Qoe1wndGhyZWVcJzogMywgXCdvbmVcJzogMSwgXCd0d29cJzogMn0pXG4gICAgICA+Pj4gYSA9PSBiID09IGMgPT0gZCA9PSBlXG4gICAgICBUcnVlXG5cbiAgIFByb3ZpZGluZyBrZXl3b3JkIGFyZ3VtZW50cyBhcyBpbiB0aGUgZmlyc3QgZXhhbXBsZSBvbmx5IHdvcmtzIGZvclxuICAga2V5cyB0aGF0IGFyZSB2YWxpZCBQeXRob24gaWRlbnRpZmllcnMuICBPdGhlcndpc2UsIGFueSB2YWxpZCBrZXlzXG4gICBjYW4gYmUgdXNlZC5cblxuICAgVGhlc2UgYXJlIHRoZSBvcGVyYXRpb25zIHRoYXQgZGljdGlvbmFyaWVzIHN1cHBvcnQgKGFuZCB0aGVyZWZvcmUsXG4gICBjdXN0b20gbWFwcGluZyB0eXBlcyBzaG91bGQgc3VwcG9ydCB0b28pOlxuXG4gICBsZW4oZClcblxuICAgICAgUmV0dXJuIHRoZSBudW1iZXIgb2YgaXRlbXMgaW4gdGhlIGRpY3Rpb25hcnkgKmQqLlxuXG4gICBkW2tleV1cblxuICAgICAgUmV0dXJuIHRoZSBpdGVtIG9mICpkKiB3aXRoIGtleSAqa2V5Ki4gIFJhaXNlcyBhICJLZXlFcnJvciIgaWZcbiAgICAgICprZXkqIGlzIG5vdCBpbiB0aGUgbWFwLlxuXG4gICAgICBJZiBhIHN1YmNsYXNzIG9mIGRpY3QgZGVmaW5lcyBhIG1ldGhvZCAiX19taXNzaW5nX18oKSIgYW5kICprZXkqXG4gICAgICBpcyBub3QgcHJlc2VudCwgdGhlICJkW2tleV0iIG9wZXJhdGlvbiBjYWxscyB0aGF0IG1ldGhvZCB3aXRoXG4gICAgICB0aGUga2V5ICprZXkqIGFzIGFyZ3VtZW50LiAgVGhlICJkW2tleV0iIG9wZXJhdGlvbiB0aGVuIHJldHVybnNcbiAgICAgIG9yIHJhaXNlcyB3aGF0ZXZlciBpcyByZXR1cm5lZCBvciByYWlzZWQgYnkgdGhlXG4gICAgICAiX19taXNzaW5nX18oa2V5KSIgY2FsbC4gTm8gb3RoZXIgb3BlcmF0aW9ucyBvciBtZXRob2RzIGludm9rZVxuICAgICAgIl9fbWlzc2luZ19fKCkiLiBJZiAiX19taXNzaW5nX18oKSIgaXMgbm90IGRlZmluZWQsICJLZXlFcnJvciJcbiAgICAgIGlzIHJhaXNlZC4gIl9fbWlzc2luZ19fKCkiIG11c3QgYmUgYSBtZXRob2Q7IGl0IGNhbm5vdCBiZSBhblxuICAgICAgaW5zdGFuY2UgdmFyaWFibGU6XG5cbiAgICAgICAgID4+PiBjbGFzcyBDb3VudGVyKGRpY3QpOlxuICAgICAgICAgLi4uICAgICBkZWYgX19taXNzaW5nX18oc2VsZiwga2V5KTpcbiAgICAgICAgIC4uLiAgICAgICAgIHJldHVybiAwXG4gICAgICAgICA+Pj4gYyA9IENvdW50ZXIoKVxuICAgICAgICAgPj4+IGNbXCdyZWRcJ11cbiAgICAgICAgIDBcbiAgICAgICAgID4+PiBjW1wncmVkXCddICs9IDFcbiAgICAgICAgID4+PiBjW1wncmVkXCddXG4gICAgICAgICAxXG5cbiAgICAgIFRoZSBleGFtcGxlIGFib3ZlIHNob3dzIHBhcnQgb2YgdGhlIGltcGxlbWVudGF0aW9uIG9mXG4gICAgICAiY29sbGVjdGlvbnMuQ291bnRlciIuICBBIGRpZmZlcmVudCAiX19taXNzaW5nX18iIG1ldGhvZCBpcyB1c2VkXG4gICAgICBieSAiY29sbGVjdGlvbnMuZGVmYXVsdGRpY3QiLlxuXG4gICBkW2tleV0gPSB2YWx1ZVxuXG4gICAgICBTZXQgImRba2V5XSIgdG8gKnZhbHVlKi5cblxuICAgZGVsIGRba2V5XVxuXG4gICAgICBSZW1vdmUgImRba2V5XSIgZnJvbSAqZCouICBSYWlzZXMgYSAiS2V5RXJyb3IiIGlmICprZXkqIGlzIG5vdFxuICAgICAgaW4gdGhlIG1hcC5cblxuICAga2V5IGluIGRcblxuICAgICAgUmV0dXJuICJUcnVlIiBpZiAqZCogaGFzIGEga2V5ICprZXkqLCBlbHNlICJGYWxzZSIuXG5cbiAgIGtleSBub3QgaW4gZFxuXG4gICAgICBFcXVpdmFsZW50IHRvICJub3Qga2V5IGluIGQiLlxuXG4gICBpdGVyKGQpXG5cbiAgICAgIFJldHVybiBhbiBpdGVyYXRvciBvdmVyIHRoZSBrZXlzIG9mIHRoZSBkaWN0aW9uYXJ5LiAgVGhpcyBpcyBhXG4gICAgICBzaG9ydGN1dCBmb3IgIml0ZXIoZC5rZXlzKCkpIi5cblxuICAgY2xlYXIoKVxuXG4gICAgICBSZW1vdmUgYWxsIGl0ZW1zIGZyb20gdGhlIGRpY3Rpb25hcnkuXG5cbiAgIGNvcHkoKVxuXG4gICAgICBSZXR1cm4gYSBzaGFsbG93IGNvcHkgb2YgdGhlIGRpY3Rpb25hcnkuXG5cbiAgIGNsYXNzbWV0aG9kIGZyb21rZXlzKHNlcVssIHZhbHVlXSlcblxuICAgICAgQ3JlYXRlIGEgbmV3IGRpY3Rpb25hcnkgd2l0aCBrZXlzIGZyb20gKnNlcSogYW5kIHZhbHVlcyBzZXQgdG9cbiAgICAgICp2YWx1ZSouXG5cbiAgICAgICJmcm9ta2V5cygpIiBpcyBhIGNsYXNzIG1ldGhvZCB0aGF0IHJldHVybnMgYSBuZXcgZGljdGlvbmFyeS5cbiAgICAgICp2YWx1ZSogZGVmYXVsdHMgdG8gIk5vbmUiLlxuXG4gICBnZXQoa2V5WywgZGVmYXVsdF0pXG5cbiAgICAgIFJldHVybiB0aGUgdmFsdWUgZm9yICprZXkqIGlmICprZXkqIGlzIGluIHRoZSBkaWN0aW9uYXJ5LCBlbHNlXG4gICAgICAqZGVmYXVsdCouIElmICpkZWZhdWx0KiBpcyBub3QgZ2l2ZW4sIGl0IGRlZmF1bHRzIHRvICJOb25lIiwgc29cbiAgICAgIHRoYXQgdGhpcyBtZXRob2QgbmV2ZXIgcmFpc2VzIGEgIktleUVycm9yIi5cblxuICAgaXRlbXMoKVxuXG4gICAgICBSZXR1cm4gYSBuZXcgdmlldyBvZiB0aGUgZGljdGlvbmFyeVwncyBpdGVtcyAoIihrZXksIHZhbHVlKSJcbiAgICAgIHBhaXJzKS4gU2VlIHRoZSAqZG9jdW1lbnRhdGlvbiBvZiB2aWV3IG9iamVjdHMqLlxuXG4gICBrZXlzKClcblxuICAgICAgUmV0dXJuIGEgbmV3IHZpZXcgb2YgdGhlIGRpY3Rpb25hcnlcJ3Mga2V5cy4gIFNlZSB0aGVcbiAgICAgICpkb2N1bWVudGF0aW9uIG9mIHZpZXcgb2JqZWN0cyouXG5cbiAgIHBvcChrZXlbLCBkZWZhdWx0XSlcblxuICAgICAgSWYgKmtleSogaXMgaW4gdGhlIGRpY3Rpb25hcnksIHJlbW92ZSBpdCBhbmQgcmV0dXJuIGl0cyB2YWx1ZSxcbiAgICAgIGVsc2UgcmV0dXJuICpkZWZhdWx0Ki4gIElmICpkZWZhdWx0KiBpcyBub3QgZ2l2ZW4gYW5kICprZXkqIGlzXG4gICAgICBub3QgaW4gdGhlIGRpY3Rpb25hcnksIGEgIktleUVycm9yIiBpcyByYWlzZWQuXG5cbiAgIHBvcGl0ZW0oKVxuXG4gICAgICBSZW1vdmUgYW5kIHJldHVybiBhbiBhcmJpdHJhcnkgIihrZXksIHZhbHVlKSIgcGFpciBmcm9tIHRoZVxuICAgICAgZGljdGlvbmFyeS5cblxuICAgICAgInBvcGl0ZW0oKSIgaXMgdXNlZnVsIHRvIGRlc3RydWN0aXZlbHkgaXRlcmF0ZSBvdmVyIGFcbiAgICAgIGRpY3Rpb25hcnksIGFzIG9mdGVuIHVzZWQgaW4gc2V0IGFsZ29yaXRobXMuICBJZiB0aGUgZGljdGlvbmFyeVxuICAgICAgaXMgZW1wdHksIGNhbGxpbmcgInBvcGl0ZW0oKSIgcmFpc2VzIGEgIktleUVycm9yIi5cblxuICAgc2V0ZGVmYXVsdChrZXlbLCBkZWZhdWx0XSlcblxuICAgICAgSWYgKmtleSogaXMgaW4gdGhlIGRpY3Rpb25hcnksIHJldHVybiBpdHMgdmFsdWUuICBJZiBub3QsIGluc2VydFxuICAgICAgKmtleSogd2l0aCBhIHZhbHVlIG9mICpkZWZhdWx0KiBhbmQgcmV0dXJuICpkZWZhdWx0Ki4gICpkZWZhdWx0KlxuICAgICAgZGVmYXVsdHMgdG8gIk5vbmUiLlxuXG4gICB1cGRhdGUoW290aGVyXSlcblxuICAgICAgVXBkYXRlIHRoZSBkaWN0aW9uYXJ5IHdpdGggdGhlIGtleS92YWx1ZSBwYWlycyBmcm9tICpvdGhlciosXG4gICAgICBvdmVyd3JpdGluZyBleGlzdGluZyBrZXlzLiAgUmV0dXJuICJOb25lIi5cblxuICAgICAgInVwZGF0ZSgpIiBhY2NlcHRzIGVpdGhlciBhbm90aGVyIGRpY3Rpb25hcnkgb2JqZWN0IG9yIGFuXG4gICAgICBpdGVyYWJsZSBvZiBrZXkvdmFsdWUgcGFpcnMgKGFzIHR1cGxlcyBvciBvdGhlciBpdGVyYWJsZXMgb2ZcbiAgICAgIGxlbmd0aCB0d28pLiAgSWYga2V5d29yZCBhcmd1bWVudHMgYXJlIHNwZWNpZmllZCwgdGhlIGRpY3Rpb25hcnlcbiAgICAgIGlzIHRoZW4gdXBkYXRlZCB3aXRoIHRob3NlIGtleS92YWx1ZSBwYWlyczogImQudXBkYXRlKHJlZD0xLFxuICAgICAgYmx1ZT0yKSIuXG5cbiAgIHZhbHVlcygpXG5cbiAgICAgIFJldHVybiBhIG5ldyB2aWV3IG9mIHRoZSBkaWN0aW9uYXJ5XCdzIHZhbHVlcy4gIFNlZSB0aGVcbiAgICAgICpkb2N1bWVudGF0aW9uIG9mIHZpZXcgb2JqZWN0cyouXG5cbiAgIERpY3Rpb25hcmllcyBjb21wYXJlIGVxdWFsIGlmIGFuZCBvbmx5IGlmIHRoZXkgaGF2ZSB0aGUgc2FtZSAiKGtleSxcbiAgIHZhbHVlKSIgcGFpcnMuIE9yZGVyIGNvbXBhcmlzb25zIChcJzxcJywgXCc8PVwnLCBcJz49XCcsIFwnPlwnKSByYWlzZVxuICAgIlR5cGVFcnJvciIuXG5cblNlZSBhbHNvOiAidHlwZXMuTWFwcGluZ1Byb3h5VHlwZSIgY2FuIGJlIHVzZWQgdG8gY3JlYXRlIGEgcmVhZC1vbmx5XG4gIHZpZXcgb2YgYSAiZGljdCIuXG5cblxuRGljdGlvbmFyeSB2aWV3IG9iamVjdHNcbj09PT09PT09PT09PT09PT09PT09PT09XG5cblRoZSBvYmplY3RzIHJldHVybmVkIGJ5ICJkaWN0LmtleXMoKSIsICJkaWN0LnZhbHVlcygpIiBhbmRcbiJkaWN0Lml0ZW1zKCkiIGFyZSAqdmlldyBvYmplY3RzKi4gIFRoZXkgcHJvdmlkZSBhIGR5bmFtaWMgdmlldyBvbiB0aGVcbmRpY3Rpb25hcnlcJ3MgZW50cmllcywgd2hpY2ggbWVhbnMgdGhhdCB3aGVuIHRoZSBkaWN0aW9uYXJ5IGNoYW5nZXMsXG50aGUgdmlldyByZWZsZWN0cyB0aGVzZSBjaGFuZ2VzLlxuXG5EaWN0aW9uYXJ5IHZpZXdzIGNhbiBiZSBpdGVyYXRlZCBvdmVyIHRvIHlpZWxkIHRoZWlyIHJlc3BlY3RpdmUgZGF0YSxcbmFuZCBzdXBwb3J0IG1lbWJlcnNoaXAgdGVzdHM6XG5cbmxlbihkaWN0dmlldylcblxuICAgUmV0dXJuIHRoZSBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgZGljdGlvbmFyeS5cblxuaXRlcihkaWN0dmlldylcblxuICAgUmV0dXJuIGFuIGl0ZXJhdG9yIG92ZXIgdGhlIGtleXMsIHZhbHVlcyBvciBpdGVtcyAocmVwcmVzZW50ZWQgYXNcbiAgIHR1cGxlcyBvZiAiKGtleSwgdmFsdWUpIikgaW4gdGhlIGRpY3Rpb25hcnkuXG5cbiAgIEtleXMgYW5kIHZhbHVlcyBhcmUgaXRlcmF0ZWQgb3ZlciBpbiBhbiBhcmJpdHJhcnkgb3JkZXIgd2hpY2ggaXNcbiAgIG5vbi1yYW5kb20sIHZhcmllcyBhY3Jvc3MgUHl0aG9uIGltcGxlbWVudGF0aW9ucywgYW5kIGRlcGVuZHMgb25cbiAgIHRoZSBkaWN0aW9uYXJ5XCdzIGhpc3Rvcnkgb2YgaW5zZXJ0aW9ucyBhbmQgZGVsZXRpb25zLiBJZiBrZXlzLFxuICAgdmFsdWVzIGFuZCBpdGVtcyB2aWV3cyBhcmUgaXRlcmF0ZWQgb3ZlciB3aXRoIG5vIGludGVydmVuaW5nXG4gICBtb2RpZmljYXRpb25zIHRvIHRoZSBkaWN0aW9uYXJ5LCB0aGUgb3JkZXIgb2YgaXRlbXMgd2lsbCBkaXJlY3RseVxuICAgY29ycmVzcG9uZC4gIFRoaXMgYWxsb3dzIHRoZSBjcmVhdGlvbiBvZiAiKHZhbHVlLCBrZXkpIiBwYWlycyB1c2luZ1xuICAgInppcCgpIjogInBhaXJzID0gemlwKGQudmFsdWVzKCksIGQua2V5cygpKSIuICBBbm90aGVyIHdheSB0b1xuICAgY3JlYXRlIHRoZSBzYW1lIGxpc3QgaXMgInBhaXJzID0gWyh2LCBrKSBmb3IgKGssIHYpIGluIGQuaXRlbXMoKV0iLlxuXG4gICBJdGVyYXRpbmcgdmlld3Mgd2hpbGUgYWRkaW5nIG9yIGRlbGV0aW5nIGVudHJpZXMgaW4gdGhlIGRpY3Rpb25hcnlcbiAgIG1heSByYWlzZSBhICJSdW50aW1lRXJyb3IiIG9yIGZhaWwgdG8gaXRlcmF0ZSBvdmVyIGFsbCBlbnRyaWVzLlxuXG54IGluIGRpY3R2aWV3XG5cbiAgIFJldHVybiAiVHJ1ZSIgaWYgKngqIGlzIGluIHRoZSB1bmRlcmx5aW5nIGRpY3Rpb25hcnlcJ3Mga2V5cywgdmFsdWVzXG4gICBvciBpdGVtcyAoaW4gdGhlIGxhdHRlciBjYXNlLCAqeCogc2hvdWxkIGJlIGEgIihrZXksIHZhbHVlKSJcbiAgIHR1cGxlKS5cblxuS2V5cyB2aWV3cyBhcmUgc2V0LWxpa2Ugc2luY2UgdGhlaXIgZW50cmllcyBhcmUgdW5pcXVlIGFuZCBoYXNoYWJsZS5cbklmIGFsbCB2YWx1ZXMgYXJlIGhhc2hhYmxlLCBzbyB0aGF0ICIoa2V5LCB2YWx1ZSkiIHBhaXJzIGFyZSB1bmlxdWVcbmFuZCBoYXNoYWJsZSwgdGhlbiB0aGUgaXRlbXMgdmlldyBpcyBhbHNvIHNldC1saWtlLiAgKFZhbHVlcyB2aWV3cyBhcmVcbm5vdCB0cmVhdGVkIGFzIHNldC1saWtlIHNpbmNlIHRoZSBlbnRyaWVzIGFyZSBnZW5lcmFsbHkgbm90IHVuaXF1ZS4pXG5Gb3Igc2V0LWxpa2Ugdmlld3MsIGFsbCBvZiB0aGUgb3BlcmF0aW9ucyBkZWZpbmVkIGZvciB0aGUgYWJzdHJhY3RcbmJhc2UgY2xhc3MgImNvbGxlY3Rpb25zLmFiYy5TZXQiIGFyZSBhdmFpbGFibGUgKGZvciBleGFtcGxlLCAiPT0iLFxuIjwiLCBvciAiXiIpLlxuXG5BbiBleGFtcGxlIG9mIGRpY3Rpb25hcnkgdmlldyB1c2FnZTpcblxuICAgPj4+IGRpc2hlcyA9IHtcJ2VnZ3NcJzogMiwgXCdzYXVzYWdlXCc6IDEsIFwnYmFjb25cJzogMSwgXCdzcGFtXCc6IDUwMH1cbiAgID4+PiBrZXlzID0gZGlzaGVzLmtleXMoKVxuICAgPj4+IHZhbHVlcyA9IGRpc2hlcy52YWx1ZXMoKVxuXG4gICA+Pj4gIyBpdGVyYXRpb25cbiAgID4+PiBuID0gMFxuICAgPj4+IGZvciB2YWwgaW4gdmFsdWVzOlxuICAgLi4uICAgICBuICs9IHZhbFxuICAgPj4+IHByaW50KG4pXG4gICA1MDRcblxuICAgPj4+ICMga2V5cyBhbmQgdmFsdWVzIGFyZSBpdGVyYXRlZCBvdmVyIGluIHRoZSBzYW1lIG9yZGVyXG4gICA+Pj4gbGlzdChrZXlzKVxuICAgW1wnZWdnc1wnLCBcJ2JhY29uXCcsIFwnc2F1c2FnZVwnLCBcJ3NwYW1cJ11cbiAgID4+PiBsaXN0KHZhbHVlcylcbiAgIFsyLCAxLCAxLCA1MDBdXG5cbiAgID4+PiAjIHZpZXcgb2JqZWN0cyBhcmUgZHluYW1pYyBhbmQgcmVmbGVjdCBkaWN0IGNoYW5nZXNcbiAgID4+PiBkZWwgZGlzaGVzW1wnZWdnc1wnXVxuICAgPj4+IGRlbCBkaXNoZXNbXCdzYXVzYWdlXCddXG4gICA+Pj4gbGlzdChrZXlzKVxuICAgW1wnc3BhbVwnLCBcJ2JhY29uXCddXG5cbiAgID4+PiAjIHNldCBvcGVyYXRpb25zXG4gICA+Pj4ga2V5cyAmIHtcJ2VnZ3NcJywgXCdiYWNvblwnLCBcJ3NhbGFkXCd9XG4gICB7XCdiYWNvblwnfVxuICAgPj4+IGtleXMgXiB7XCdzYXVzYWdlXCcsIFwnanVpY2VcJ31cbiAgIHtcJ2p1aWNlXCcsIFwnc2F1c2FnZVwnLCBcJ2JhY29uXCcsIFwnc3BhbVwnfVxuJywKKyAndHlwZXNtZXRob2RzJzogdSdcbk1ldGhvZHNcbioqKioqKipcblxuTWV0aG9kcyBhcmUgZnVuY3Rpb25zIHRoYXQgYXJlIGNhbGxlZCB1c2luZyB0aGUgYXR0cmlidXRlIG5vdGF0aW9uLlxuVGhlcmUgYXJlIHR3byBmbGF2b3JzOiBidWlsdC1pbiBtZXRob2RzIChzdWNoIGFzICJhcHBlbmQoKSIgb24gbGlzdHMpXG5hbmQgY2xhc3MgaW5zdGFuY2UgbWV0aG9kcy4gIEJ1aWx0LWluIG1ldGhvZHMgYXJlIGRlc2NyaWJlZCB3aXRoIHRoZVxudHlwZXMgdGhhdCBzdXBwb3J0IHRoZW0uXG5cbklmIHlvdSBhY2Nlc3MgYSBtZXRob2QgKGEgZnVuY3Rpb24gZGVmaW5lZCBpbiBhIGNsYXNzIG5hbWVzcGFjZSlcbnRocm91Z2ggYW4gaW5zdGFuY2UsIHlvdSBnZXQgYSBzcGVjaWFsIG9iamVjdDogYSAqYm91bmQgbWV0aG9kKiAoYWxzb1xuY2FsbGVkICppbnN0YW5jZSBtZXRob2QqKSBvYmplY3QuIFdoZW4gY2FsbGVkLCBpdCB3aWxsIGFkZCB0aGUgInNlbGYiXG5hcmd1bWVudCB0byB0aGUgYXJndW1lbnQgbGlzdC4gIEJvdW5kIG1ldGhvZHMgaGF2ZSB0d28gc3BlY2lhbCByZWFkLVxub25seSBhdHRyaWJ1dGVzOiAibS5fX3NlbGZfXyIgaXMgdGhlIG9iamVjdCBvbiB3aGljaCB0aGUgbWV0aG9kXG5vcGVyYXRlcywgYW5kICJtLl9fZnVuY19fIiBpcyB0aGUgZnVuY3Rpb24gaW1wbGVtZW50aW5nIHRoZSBtZXRob2QuXG5DYWxsaW5nICJtKGFyZy0xLCBhcmctMiwgLi4uLCBhcmctbikiIGlzIGNvbXBsZXRlbHkgZXF1aXZhbGVudCB0b1xuY2FsbGluZyAibS5fX2Z1bmNfXyhtLl9fc2VsZl9fLCBhcmctMSwgYXJnLTIsIC4uLiwgYXJnLW4pIi5cblxuTGlrZSBmdW5jdGlvbiBvYmplY3RzLCBib3VuZCBtZXRob2Qgb2JqZWN0cyBzdXBwb3J0IGdldHRpbmcgYXJiaXRyYXJ5XG5hdHRyaWJ1dGVzLiAgSG93ZXZlciwgc2luY2UgbWV0aG9kIGF0dHJpYnV0ZXMgYXJlIGFjdHVhbGx5IHN0b3JlZCBvblxudGhlIHVuZGVybHlpbmcgZnVuY3Rpb24gb2JqZWN0ICgibWV0aC5fX2Z1bmNfXyIpLCBzZXR0aW5nIG1ldGhvZFxuYXR0cmlidXRlcyBvbiBib3VuZCBtZXRob2RzIGlzIGRpc2FsbG93ZWQuICBBdHRlbXB0aW5nIHRvIHNldCBhblxuYXR0cmlidXRlIG9uIGEgbWV0aG9kIHJlc3VsdHMgaW4gYW4gIkF0dHJpYnV0ZUVycm9yIiBiZWluZyByYWlzZWQuICBJblxub3JkZXIgdG8gc2V0IGEgbWV0aG9kIGF0dHJpYnV0ZSwgeW91IG5lZWQgdG8gZXhwbGljaXRseSBzZXQgaXQgb24gdGhlXG51bmRlcmx5aW5nIGZ1bmN0aW9uIG9iamVjdDpcblxuICAgPj4+IGNsYXNzIEM6XG4gICAuLi4gICAgIGRlZiBtZXRob2Qoc2VsZik6XG4gICAuLi4gICAgICAgICBwYXNzXG4gICAuLi5cbiAgID4+PiBjID0gQygpXG4gICA+Pj4gYy5tZXRob2Qud2hvYW1pID0gXCdteSBuYW1lIGlzIG1ldGhvZFwnICAjIGNhblwndCBzZXQgb24gdGhlIG1ldGhvZFxuICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOlxuICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA8bW9kdWxlPlxuICAgQXR0cmlidXRlRXJyb3I6IFwnbWV0aG9kXCcgb2JqZWN0IGhhcyBubyBhdHRyaWJ1dGUgXCd3aG9hbWlcJ1xuICAgPj4+IGMubWV0aG9kLl9fZnVuY19fLndob2FtaSA9IFwnbXkgbmFtZSBpcyBtZXRob2RcJ1xuICAgPj4+IGMubWV0aG9kLndob2FtaVxuICAgXCdteSBuYW1lIGlzIG1ldGhvZFwnXG5cblNlZSAqVGhlIHN0YW5kYXJkIHR5cGUgaGllcmFyY2h5KiBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbicsCisgJ3R5cGVzbW9kdWxlcyc6IHUnXG5Nb2R1bGVzXG4qKioqKioqXG5cblRoZSBvbmx5IHNwZWNpYWwgb3BlcmF0aW9uIG9uIGEgbW9kdWxlIGlzIGF0dHJpYnV0ZSBhY2Nlc3M6ICJtLm5hbWUiLFxud2hlcmUgKm0qIGlzIGEgbW9kdWxlIGFuZCAqbmFtZSogYWNjZXNzZXMgYSBuYW1lIGRlZmluZWQgaW4gKm0qXCdzXG5zeW1ib2wgdGFibGUuIE1vZHVsZSBhdHRyaWJ1dGVzIGNhbiBiZSBhc3NpZ25lZCB0by4gIChOb3RlIHRoYXQgdGhlXG4iaW1wb3J0IiBzdGF0ZW1lbnQgaXMgbm90LCBzdHJpY3RseSBzcGVha2luZywgYW4gb3BlcmF0aW9uIG9uIGEgbW9kdWxlXG5vYmplY3Q7ICJpbXBvcnQgZm9vIiBkb2VzIG5vdCByZXF1aXJlIGEgbW9kdWxlIG9iamVjdCBuYW1lZCAqZm9vKiB0b1xuZXhpc3QsIHJhdGhlciBpdCByZXF1aXJlcyBhbiAoZXh0ZXJuYWwpICpkZWZpbml0aW9uKiBmb3IgYSBtb2R1bGVcbm5hbWVkICpmb28qIHNvbWV3aGVyZS4pXG5cbkEgc3BlY2lhbCBhdHRyaWJ1dGUgb2YgZXZlcnkgbW9kdWxlIGlzICJfX2RpY3RfXyIuIFRoaXMgaXMgdGhlXG5kaWN0aW9uYXJ5IGNvbnRhaW5pbmcgdGhlIG1vZHVsZVwncyBzeW1ib2wgdGFibGUuIE1vZGlmeWluZyB0aGlzXG5kaWN0aW9uYXJ5IHdpbGwgYWN0dWFsbHkgY2hhbmdlIHRoZSBtb2R1bGVcJ3Mgc3ltYm9sIHRhYmxlLCBidXQgZGlyZWN0XG5hc3NpZ25tZW50IHRvIHRoZSAiX19kaWN0X18iIGF0dHJpYnV0ZSBpcyBub3QgcG9zc2libGUgKHlvdSBjYW4gd3JpdGVcbiJtLl9fZGljdF9fW1wnYVwnXSA9IDEiLCB3aGljaCBkZWZpbmVzICJtLmEiIHRvIGJlICIxIiwgYnV0IHlvdSBjYW5cJ3RcbndyaXRlICJtLl9fZGljdF9fID0ge30iKS4gIE1vZGlmeWluZyAiX19kaWN0X18iIGRpcmVjdGx5IGlzIG5vdFxucmVjb21tZW5kZWQuXG5cbk1vZHVsZXMgYnVpbHQgaW50byB0aGUgaW50ZXJwcmV0ZXIgYXJlIHdyaXR0ZW4gbGlrZSB0aGlzOiAiPG1vZHVsZVxuXCdzeXNcJyAoYnVpbHQtaW4pPiIuICBJZiBsb2FkZWQgZnJvbSBhIGZpbGUsIHRoZXkgYXJlIHdyaXR0ZW4gYXNcbiI8bW9kdWxlIFwnb3NcJyBmcm9tIFwnL3Vzci9sb2NhbC9saWIvcHl0aG9uWC5ZL29zLnB5Y1wnPiIuXG4nLAorICd0eXBlc3NlcSc6IHUnXG5TZXF1ZW5jZSBUeXBlcyAtLS0gImxpc3QiLCAidHVwbGUiLCAicmFuZ2UiXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cblRoZXJlIGFyZSB0aHJlZSBiYXNpYyBzZXF1ZW5jZSB0eXBlczogbGlzdHMsIHR1cGxlcywgYW5kIHJhbmdlXG5vYmplY3RzLiBBZGRpdGlvbmFsIHNlcXVlbmNlIHR5cGVzIHRhaWxvcmVkIGZvciBwcm9jZXNzaW5nIG9mICpiaW5hcnlcbmRhdGEqIGFuZCAqdGV4dCBzdHJpbmdzKiBhcmUgZGVzY3JpYmVkIGluIGRlZGljYXRlZCBzZWN0aW9ucy5cblxuXG5Db21tb24gU2VxdWVuY2UgT3BlcmF0aW9uc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuVGhlIG9wZXJhdGlvbnMgaW4gdGhlIGZvbGxvd2luZyB0YWJsZSBhcmUgc3VwcG9ydGVkIGJ5IG1vc3Qgc2VxdWVuY2VcbnR5cGVzLCBib3RoIG11dGFibGUgYW5kIGltbXV0YWJsZS4gVGhlICJjb2xsZWN0aW9ucy5hYmMuU2VxdWVuY2UiIEFCQ1xuaXMgcHJvdmlkZWQgdG8gbWFrZSBpdCBlYXNpZXIgdG8gY29ycmVjdGx5IGltcGxlbWVudCB0aGVzZSBvcGVyYXRpb25zXG5vbiBjdXN0b20gc2VxdWVuY2UgdHlwZXMuXG5cblRoaXMgdGFibGUgbGlzdHMgdGhlIHNlcXVlbmNlIG9wZXJhdGlvbnMgc29ydGVkIGluIGFzY2VuZGluZyBwcmlvcml0eS5cbkluIHRoZSB0YWJsZSwgKnMqIGFuZCAqdCogYXJlIHNlcXVlbmNlcyBvZiB0aGUgc2FtZSB0eXBlLCAqbiosICppKixcbipqKiBhbmQgKmsqIGFyZSBpbnRlZ2VycyBhbmQgKngqIGlzIGFuIGFyYml0cmFyeSBvYmplY3QgdGhhdCBtZWV0cyBhbnlcbnR5cGUgYW5kIHZhbHVlIHJlc3RyaWN0aW9ucyBpbXBvc2VkIGJ5ICpzKi5cblxuVGhlICJpbiIgYW5kICJub3QgaW4iIG9wZXJhdGlvbnMgaGF2ZSB0aGUgc2FtZSBwcmlvcml0aWVzIGFzIHRoZVxuY29tcGFyaXNvbiBvcGVyYXRpb25zLiBUaGUgIisiIChjb25jYXRlbmF0aW9uKSBhbmQgIioiIChyZXBldGl0aW9uKVxub3BlcmF0aW9ucyBoYXZlIHRoZSBzYW1lIHByaW9yaXR5IGFzIHRoZSBjb3JyZXNwb25kaW5nIG51bWVyaWNcbm9wZXJhdGlvbnMuXG5cbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tK1xufCBPcGVyYXRpb24gICAgICAgICAgICAgICAgICB8IFJlc3VsdCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTm90ZXMgICAgICB8XG4rPT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PStcbnwgInggaW4gcyIgICAgICAgICAgICAgICAgICAgfCAiVHJ1ZSIgaWYgYW4gaXRlbSBvZiAqcyogaXMgICAgICB8ICgxKSAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVxdWFsIHRvICp4KiwgZWxzZSAiRmFsc2UiICAgICAgIHwgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcbnwgInggbm90IGluIHMiICAgICAgICAgICAgICAgfCAiRmFsc2UiIGlmIGFuIGl0ZW0gb2YgKnMqIGlzICAgICB8ICgxKSAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGVxdWFsIHRvICp4KiwgZWxzZSAiVHJ1ZSIgICAgICAgIHwgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcbnwgInMgKyB0IiAgICAgICAgICAgICAgICAgICAgfCB0aGUgY29uY2F0ZW5hdGlvbiBvZiAqcyogYW5kICp0KiB8ICg2KSg3KSAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG58ICJzICogbiIgb3IgIm4gKiBzIiAgICAgICAgIHwgZXF1aXZhbGVudCB0byBhZGRpbmcgKnMqIHRvICAgICAgfCAoMikoNykgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpdHNlbGYgKm4qIHRpbWVzICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG58ICJzW2ldIiAgICAgICAgICAgICAgICAgICAgIHwgKmkqdGggaXRlbSBvZiAqcyosIG9yaWdpbiAwICAgICAgfCAoMykgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tK1xufCAic1tpOmpdIiAgICAgICAgICAgICAgICAgICB8IHNsaWNlIG9mICpzKiBmcm9tICppKiB0byAqaiogICAgIHwgKDMpKDQpICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcbnwgInNbaTpqOmtdIiAgICAgICAgICAgICAgICAgfCBzbGljZSBvZiAqcyogZnJvbSAqaSogdG8gKmoqICAgICB8ICgzKSg1KSAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHdpdGggc3RlcCAqayogICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcbnwgImxlbihzKSIgICAgICAgICAgICAgICAgICAgfCBsZW5ndGggb2YgKnMqICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG58ICJtaW4ocykiICAgICAgICAgICAgICAgICAgIHwgc21hbGxlc3QgaXRlbSBvZiAqcyogICAgICAgICAgICAgfCAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tK1xufCAibWF4KHMpIiAgICAgICAgICAgICAgICAgICB8IGxhcmdlc3QgaXRlbSBvZiAqcyogICAgICAgICAgICAgIHwgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcbnwgInMuaW5kZXgoeFssIGlbLCBqXV0pIiAgICAgfCBpbmRleCBvZiB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiB8ICg4KSAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICp4KiBpbiAqcyogKGF0IG9yIGFmdGVyIGluZGV4ICAgIHwgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKmkqIGFuZCBiZWZvcmUgaW5kZXggKmoqKSAgICAgICAgfCAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tK1xufCAicy5jb3VudCh4KSIgICAgICAgICAgICAgICB8IHRvdGFsIG51bWJlciBvZiBvY2N1cnJlbmNlcyBvZiAgIHwgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKngqIGluICpzKiAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tK1xuXG5TZXF1ZW5jZXMgb2YgdGhlIHNhbWUgdHlwZSBhbHNvIHN1cHBvcnQgY29tcGFyaXNvbnMuICBJbiBwYXJ0aWN1bGFyLFxudHVwbGVzIGFuZCBsaXN0cyBhcmUgY29tcGFyZWQgbGV4aWNvZ3JhcGhpY2FsbHkgYnkgY29tcGFyaW5nXG5jb3JyZXNwb25kaW5nIGVsZW1lbnRzLiBUaGlzIG1lYW5zIHRoYXQgdG8gY29tcGFyZSBlcXVhbCwgZXZlcnlcbmVsZW1lbnQgbXVzdCBjb21wYXJlIGVxdWFsIGFuZCB0aGUgdHdvIHNlcXVlbmNlcyBtdXN0IGJlIG9mIHRoZSBzYW1lXG50eXBlIGFuZCBoYXZlIHRoZSBzYW1lIGxlbmd0aC4gIChGb3IgZnVsbCBkZXRhaWxzIHNlZSAqQ29tcGFyaXNvbnMqIGluXG50aGUgbGFuZ3VhZ2UgcmVmZXJlbmNlLilcblxuTm90ZXM6XG5cbjEuIFdoaWxlIHRoZSAiaW4iIGFuZCAibm90IGluIiBvcGVyYXRpb25zIGFyZSB1c2VkIG9ubHkgZm9yIHNpbXBsZVxuICAgY29udGFpbm1lbnQgdGVzdGluZyBpbiB0aGUgZ2VuZXJhbCBjYXNlLCBzb21lIHNwZWNpYWxpc2VkIHNlcXVlbmNlc1xuICAgKHN1Y2ggYXMgInN0ciIsICJieXRlcyIgYW5kICJieXRlYXJyYXkiKSBhbHNvIHVzZSB0aGVtIGZvclxuICAgc3Vic2VxdWVuY2UgdGVzdGluZzpcblxuICAgICAgPj4+ICJnZyIgaW4gImVnZ3MiXG4gICAgICBUcnVlXG5cbjIuIFZhbHVlcyBvZiAqbiogbGVzcyB0aGFuICIwIiBhcmUgdHJlYXRlZCBhcyAiMCIgKHdoaWNoIHlpZWxkcyBhblxuICAgZW1wdHkgc2VxdWVuY2Ugb2YgdGhlIHNhbWUgdHlwZSBhcyAqcyopLiAgTm90ZSB0aGF0IGl0ZW1zIGluIHRoZVxuICAgc2VxdWVuY2UgKnMqIGFyZSBub3QgY29waWVkOyB0aGV5IGFyZSByZWZlcmVuY2VkIG11bHRpcGxlIHRpbWVzLlxuICAgVGhpcyBvZnRlbiBoYXVudHMgbmV3IFB5dGhvbiBwcm9ncmFtbWVyczsgY29uc2lkZXI6XG5cbiAgICAgID4+PiBsaXN0cyA9IFtbXV0gKiAzXG4gICAgICA+Pj4gbGlzdHNcbiAgICAgIFtbXSwgW10sIFtdXVxuICAgICAgPj4+IGxpc3RzWzBdLmFwcGVuZCgzKVxuICAgICAgPj4+IGxpc3RzXG4gICAgICBbWzNdLCBbM10sIFszXV1cblxuICAgV2hhdCBoYXMgaGFwcGVuZWQgaXMgdGhhdCAiW1tdXSIgaXMgYSBvbmUtZWxlbWVudCBsaXN0IGNvbnRhaW5pbmdcbiAgIGFuIGVtcHR5IGxpc3QsIHNvIGFsbCB0aHJlZSBlbGVtZW50cyBvZiAiW1tdXSAqIDMiIGFyZSByZWZlcmVuY2VzXG4gICB0byB0aGlzIHNpbmdsZSBlbXB0eSBsaXN0LiAgTW9kaWZ5aW5nIGFueSBvZiB0aGUgZWxlbWVudHMgb2ZcbiAgICJsaXN0cyIgbW9kaWZpZXMgdGhpcyBzaW5nbGUgbGlzdC4gWW91IGNhbiBjcmVhdGUgYSBsaXN0IG9mXG4gICBkaWZmZXJlbnQgbGlzdHMgdGhpcyB3YXk6XG5cbiAgICAgID4+PiBsaXN0cyA9IFtbXSBmb3IgaSBpbiByYW5nZSgzKV1cbiAgICAgID4+PiBsaXN0c1swXS5hcHBlbmQoMylcbiAgICAgID4+PiBsaXN0c1sxXS5hcHBlbmQoNSlcbiAgICAgID4+PiBsaXN0c1syXS5hcHBlbmQoNylcbiAgICAgID4+PiBsaXN0c1xuICAgICAgW1szXSwgWzVdLCBbN11dXG5cbiAgIEZ1cnRoZXIgZXhwbGFuYXRpb24gaXMgYXZhaWxhYmxlIGluIHRoZSBGQVEgZW50cnkgKkhvdyBkbyBJIGNyZWF0ZVxuICAgYSBtdWx0aWRpbWVuc2lvbmFsIGxpc3Q/Ki5cblxuMy4gSWYgKmkqIG9yICpqKiBpcyBuZWdhdGl2ZSwgdGhlIGluZGV4IGlzIHJlbGF0aXZlIHRvIHRoZSBlbmQgb2ZcbiAgIHRoZSBzdHJpbmc6ICJsZW4ocykgKyBpIiBvciAibGVuKHMpICsgaiIgaXMgc3Vic3RpdHV0ZWQuICBCdXQgbm90ZVxuICAgdGhhdCAiLTAiIGlzIHN0aWxsICIwIi5cblxuNC4gVGhlIHNsaWNlIG9mICpzKiBmcm9tICppKiB0byAqaiogaXMgZGVmaW5lZCBhcyB0aGUgc2VxdWVuY2Ugb2ZcbiAgIGl0ZW1zIHdpdGggaW5kZXggKmsqIHN1Y2ggdGhhdCAiaSA8PSBrIDwgaiIuICBJZiAqaSogb3IgKmoqIGlzXG4gICBncmVhdGVyIHRoYW4gImxlbihzKSIsIHVzZSAibGVuKHMpIi4gIElmICppKiBpcyBvbWl0dGVkIG9yICJOb25lIixcbiAgIHVzZSAiMCIuICBJZiAqaiogaXMgb21pdHRlZCBvciAiTm9uZSIsIHVzZSAibGVuKHMpIi4gIElmICppKiBpc1xuICAgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICpqKiwgdGhlIHNsaWNlIGlzIGVtcHR5LlxuXG41LiBUaGUgc2xpY2Ugb2YgKnMqIGZyb20gKmkqIHRvICpqKiB3aXRoIHN0ZXAgKmsqIGlzIGRlZmluZWQgYXMgdGhlXG4gICBzZXF1ZW5jZSBvZiBpdGVtcyB3aXRoIGluZGV4ICAieCA9IGkgKyBuKmsiIHN1Y2ggdGhhdCAiMCA8PSBuIDxcbiAgIChqLWkpL2siLiAgSW4gb3RoZXIgd29yZHMsIHRoZSBpbmRpY2VzIGFyZSAiaSIsICJpK2siLCAiaSsyKmsiLFxuICAgImkrMyprIiBhbmQgc28gb24sIHN0b3BwaW5nIHdoZW4gKmoqIGlzIHJlYWNoZWQgKGJ1dCBuZXZlclxuICAgaW5jbHVkaW5nICpqKikuICBJZiAqaSogb3IgKmoqIGlzIGdyZWF0ZXIgdGhhbiAibGVuKHMpIiwgdXNlXG4gICAibGVuKHMpIi4gIElmICppKiBvciAqaiogYXJlIG9taXR0ZWQgb3IgIk5vbmUiLCB0aGV5IGJlY29tZSAiZW5kIlxuICAgdmFsdWVzICh3aGljaCBlbmQgZGVwZW5kcyBvbiB0aGUgc2lnbiBvZiAqayopLiAgTm90ZSwgKmsqIGNhbm5vdCBiZVxuICAgemVyby4gSWYgKmsqIGlzICJOb25lIiwgaXQgaXMgdHJlYXRlZCBsaWtlICIxIi5cblxuNi4gQ29uY2F0ZW5hdGluZyBpbW11dGFibGUgc2VxdWVuY2VzIGFsd2F5cyByZXN1bHRzIGluIGEgbmV3XG4gICBvYmplY3QuIFRoaXMgbWVhbnMgdGhhdCBidWlsZGluZyB1cCBhIHNlcXVlbmNlIGJ5IHJlcGVhdGVkXG4gICBjb25jYXRlbmF0aW9uIHdpbGwgaGF2ZSBhIHF1YWRyYXRpYyBydW50aW1lIGNvc3QgaW4gdGhlIHRvdGFsXG4gICBzZXF1ZW5jZSBsZW5ndGguIFRvIGdldCBhIGxpbmVhciBydW50aW1lIGNvc3QsIHlvdSBtdXN0IHN3aXRjaCB0b1xuICAgb25lIG9mIHRoZSBhbHRlcm5hdGl2ZXMgYmVsb3c6XG5cbiAgICogaWYgY29uY2F0ZW5hdGluZyAic3RyIiBvYmplY3RzLCB5b3UgY2FuIGJ1aWxkIGEgbGlzdCBhbmQgdXNlXG4gICAgICJzdHIuam9pbigpIiBhdCB0aGUgZW5kIG9yIGVsc2Ugd3JpdGUgdG8gYW4gImlvLlN0cmluZ0lPIlxuICAgICBpbnN0YW5jZSBhbmQgcmV0cmlldmUgaXRzIHZhbHVlIHdoZW4gY29tcGxldGVcblxuICAgKiBpZiBjb25jYXRlbmF0aW5nICJieXRlcyIgb2JqZWN0cywgeW91IGNhbiBzaW1pbGFybHkgdXNlXG4gICAgICJieXRlcy5qb2luKCkiIG9yICJpby5CeXRlc0lPIiwgb3IgeW91IGNhbiBkbyBpbi1wbGFjZVxuICAgICBjb25jYXRlbmF0aW9uIHdpdGggYSAiYnl0ZWFycmF5IiBvYmplY3QuICAiYnl0ZWFycmF5IiBvYmplY3RzIGFyZVxuICAgICBtdXRhYmxlIGFuZCBoYXZlIGFuIGVmZmljaWVudCBvdmVyYWxsb2NhdGlvbiBtZWNoYW5pc21cblxuICAgKiBpZiBjb25jYXRlbmF0aW5nICJ0dXBsZSIgb2JqZWN0cywgZXh0ZW5kIGEgImxpc3QiIGluc3RlYWRcblxuICAgKiBmb3Igb3RoZXIgdHlwZXMsIGludmVzdGlnYXRlIHRoZSByZWxldmFudCBjbGFzcyBkb2N1bWVudGF0aW9uXG5cbjcuIFNvbWUgc2VxdWVuY2UgdHlwZXMgKHN1Y2ggYXMgInJhbmdlIikgb25seSBzdXBwb3J0IGl0ZW1cbiAgIHNlcXVlbmNlcyB0aGF0IGZvbGxvdyBzcGVjaWZpYyBwYXR0ZXJucywgYW5kIGhlbmNlIGRvblwndCBzdXBwb3J0XG4gICBzZXF1ZW5jZSBjb25jYXRlbmF0aW9uIG9yIHJlcGV0aXRpb24uXG5cbjguICJpbmRleCIgcmFpc2VzICJWYWx1ZUVycm9yIiB3aGVuICp4KiBpcyBub3QgZm91bmQgaW4gKnMqLiBXaGVuXG4gICBzdXBwb3J0ZWQsIHRoZSBhZGRpdGlvbmFsIGFyZ3VtZW50cyB0byB0aGUgaW5kZXggbWV0aG9kIGFsbG93XG4gICBlZmZpY2llbnQgc2VhcmNoaW5nIG9mIHN1YnNlY3Rpb25zIG9mIHRoZSBzZXF1ZW5jZS4gUGFzc2luZyB0aGVcbiAgIGV4dHJhIGFyZ3VtZW50cyBpcyByb3VnaGx5IGVxdWl2YWxlbnQgdG8gdXNpbmcgInNbaTpqXS5pbmRleCh4KSIsXG4gICBvbmx5IHdpdGhvdXQgY29weWluZyBhbnkgZGF0YSBhbmQgd2l0aCB0aGUgcmV0dXJuZWQgaW5kZXggYmVpbmdcbiAgIHJlbGF0aXZlIHRvIHRoZSBzdGFydCBvZiB0aGUgc2VxdWVuY2UgcmF0aGVyIHRoYW4gdGhlIHN0YXJ0IG9mIHRoZVxuICAgc2xpY2UuXG5cblxuSW1tdXRhYmxlIFNlcXVlbmNlIFR5cGVzXG49PT09PT09PT09PT09PT09PT09PT09PT1cblxuVGhlIG9ubHkgb3BlcmF0aW9uIHRoYXQgaW1tdXRhYmxlIHNlcXVlbmNlIHR5cGVzIGdlbmVyYWxseSBpbXBsZW1lbnRcbnRoYXQgaXMgbm90IGFsc28gaW1wbGVtZW50ZWQgYnkgbXV0YWJsZSBzZXF1ZW5jZSB0eXBlcyBpcyBzdXBwb3J0IGZvclxudGhlICJoYXNoKCkiIGJ1aWx0LWluLlxuXG5UaGlzIHN1cHBvcnQgYWxsb3dzIGltbXV0YWJsZSBzZXF1ZW5jZXMsIHN1Y2ggYXMgInR1cGxlIiBpbnN0YW5jZXMsIHRvXG5iZSB1c2VkIGFzICJkaWN0IiBrZXlzIGFuZCBzdG9yZWQgaW4gInNldCIgYW5kICJmcm96ZW5zZXQiIGluc3RhbmNlcy5cblxuQXR0ZW1wdGluZyB0byBoYXNoIGFuIGltbXV0YWJsZSBzZXF1ZW5jZSB0aGF0IGNvbnRhaW5zIHVuaGFzaGFibGVcbnZhbHVlcyB3aWxsIHJlc3VsdCBpbiAiVHlwZUVycm9yIi5cblxuXG5NdXRhYmxlIFNlcXVlbmNlIFR5cGVzXG49PT09PT09PT09PT09PT09PT09PT09XG5cblRoZSBvcGVyYXRpb25zIGluIHRoZSBmb2xsb3dpbmcgdGFibGUgYXJlIGRlZmluZWQgb24gbXV0YWJsZSBzZXF1ZW5jZVxudHlwZXMuIFRoZSAiY29sbGVjdGlvbnMuYWJjLk11dGFibGVTZXF1ZW5jZSIgQUJDIGlzIHByb3ZpZGVkIHRvIG1ha2Vcbml0IGVhc2llciB0byBjb3JyZWN0bHkgaW1wbGVtZW50IHRoZXNlIG9wZXJhdGlvbnMgb24gY3VzdG9tIHNlcXVlbmNlXG50eXBlcy5cblxuSW4gdGhlIHRhYmxlICpzKiBpcyBhbiBpbnN0YW5jZSBvZiBhIG11dGFibGUgc2VxdWVuY2UgdHlwZSwgKnQqIGlzIGFueVxuaXRlcmFibGUgb2JqZWN0IGFuZCAqeCogaXMgYW4gYXJiaXRyYXJ5IG9iamVjdCB0aGF0IG1lZXRzIGFueSB0eXBlIGFuZFxudmFsdWUgcmVzdHJpY3Rpb25zIGltcG9zZWQgYnkgKnMqIChmb3IgZXhhbXBsZSwgImJ5dGVhcnJheSIgb25seVxuYWNjZXB0cyBpbnRlZ2VycyB0aGF0IG1lZXQgdGhlIHZhbHVlIHJlc3RyaWN0aW9uICIwIDw9IHggPD0gMjU1IikuXG5cbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBPcGVyYXRpb24gICAgICAgICAgICAgICAgICAgICAgfCBSZXN1bHQgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE5vdGVzICAgICAgICAgICAgICAgICB8XG4rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PStcbnwgInNbaV0gPSB4IiAgICAgICAgICAgICAgICAgICAgIHwgaXRlbSAqaSogb2YgKnMqIGlzIHJlcGxhY2VkIGJ5ICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAqeCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgInNbaTpqXSA9IHQiICAgICAgICAgICAgICAgICAgIHwgc2xpY2Ugb2YgKnMqIGZyb20gKmkqIHRvICpqKiBpcyAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCByZXBsYWNlZCBieSB0aGUgY29udGVudHMgb2YgdGhlICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGl0ZXJhYmxlICp0KiAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAiZGVsIHNbaTpqXSIgICAgICAgICAgICAgICAgICAgfCBzYW1lIGFzICJzW2k6al0gPSBbXSIgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgInNbaTpqOmtdID0gdCIgICAgICAgICAgICAgICAgIHwgdGhlIGVsZW1lbnRzIG9mICJzW2k6ajprXSIgYXJlICAgfCAoMSkgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCByZXBsYWNlZCBieSB0aG9zZSBvZiAqdCogICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgImRlbCBzW2k6ajprXSIgICAgICAgICAgICAgICAgIHwgcmVtb3ZlcyB0aGUgZWxlbWVudHMgb2YgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAic1tpOmo6a10iIGZyb20gdGhlIGxpc3QgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgInMuYXBwZW5kKHgpIiAgICAgICAgICAgICAgICAgIHwgYXBwZW5kcyAqeCogdG8gdGhlIGVuZCBvZiB0aGUgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzZXF1ZW5jZSAoc2FtZSBhcyAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICJzW2xlbihzKTpsZW4ocyldID0gW3hdIikgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAicy5jbGVhcigpIiAgICAgICAgICAgICAgICAgICAgfCByZW1vdmVzIGFsbCBpdGVtcyBmcm9tICJzIiAoc2FtZSB8ICg1KSAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFzICJkZWwgc1s6XSIpICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAicy5jb3B5KCkiICAgICAgICAgICAgICAgICAgICAgfCBjcmVhdGVzIGEgc2hhbGxvdyBjb3B5IG9mICJzIiAgICB8ICg1KSAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChzYW1lIGFzICJzWzpdIikgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAicy5leHRlbmQodCkiIG9yICJzICs9IHQiICAgICAgfCBleHRlbmRzICpzKiB3aXRoIHRoZSBjb250ZW50cyBvZiB8ICAgICAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICp0KiAoZm9yIHRoZSBtb3N0IHBhcnQgdGhlIHNhbWUgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYXMgInNbbGVuKHMpOmxlbihzKV0gPSB0IikgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58ICJzICo9IG4iICAgICAgICAgICAgICAgICAgICAgICB8IHVwZGF0ZXMgKnMqIHdpdGggaXRzIGNvbnRlbnRzICAgIHwgKDYpICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcmVwZWF0ZWQgKm4qIHRpbWVzICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58ICJzLmluc2VydChpLCB4KSIgICAgICAgICAgICAgICB8IGluc2VydHMgKngqIGludG8gKnMqIGF0IHRoZSAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaW5kZXggZ2l2ZW4gYnkgKmkqIChzYW1lIGFzICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAic1tpOmldID0gW3hdIikgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgInMucG9wKFtpXSkiICAgICAgICAgICAgICAgICAgIHwgcmV0cmlldmVzIHRoZSBpdGVtIGF0ICppKiBhbmQgICAgfCAoMikgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhbHNvIHJlbW92ZXMgaXQgZnJvbSAqcyogICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgInMucmVtb3ZlKHgpIiAgICAgICAgICAgICAgICAgIHwgcmVtb3ZlIHRoZSBmaXJzdCBpdGVtIGZyb20gKnMqICAgfCAoMykgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB3aGVyZSAic1tpXSA9PSB4IiAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgInMucmV2ZXJzZSgpIiAgICAgICAgICAgICAgICAgIHwgcmV2ZXJzZXMgdGhlIGl0ZW1zIG9mICpzKiBpbiAgICAgfCAoNCkgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwbGFjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcblxuTm90ZXM6XG5cbjEuICp0KiBtdXN0IGhhdmUgdGhlIHNhbWUgbGVuZ3RoIGFzIHRoZSBzbGljZSBpdCBpcyByZXBsYWNpbmcuXG5cbjIuIFRoZSBvcHRpb25hbCBhcmd1bWVudCAqaSogZGVmYXVsdHMgdG8gIi0xIiwgc28gdGhhdCBieSBkZWZhdWx0XG4gICB0aGUgbGFzdCBpdGVtIGlzIHJlbW92ZWQgYW5kIHJldHVybmVkLlxuXG4zLiAicmVtb3ZlIiByYWlzZXMgIlZhbHVlRXJyb3IiIHdoZW4gKngqIGlzIG5vdCBmb3VuZCBpbiAqcyouXG5cbjQuIFRoZSAicmV2ZXJzZSgpIiBtZXRob2QgbW9kaWZpZXMgdGhlIHNlcXVlbmNlIGluIHBsYWNlIGZvclxuICAgZWNvbm9teSBvZiBzcGFjZSB3aGVuIHJldmVyc2luZyBhIGxhcmdlIHNlcXVlbmNlLiAgVG8gcmVtaW5kIHVzZXJzXG4gICB0aGF0IGl0IG9wZXJhdGVzIGJ5IHNpZGUgZWZmZWN0LCBpdCBkb2VzIG5vdCByZXR1cm4gdGhlIHJldmVyc2VkXG4gICBzZXF1ZW5jZS5cblxuNS4gImNsZWFyKCkiIGFuZCAiY29weSgpIiBhcmUgaW5jbHVkZWQgZm9yIGNvbnNpc3RlbmN5IHdpdGggdGhlXG4gICBpbnRlcmZhY2VzIG9mIG11dGFibGUgY29udGFpbmVycyB0aGF0IGRvblwndCBzdXBwb3J0IHNsaWNpbmdcbiAgIG9wZXJhdGlvbnMgKHN1Y2ggYXMgImRpY3QiIGFuZCAic2V0IilcblxuICAgTmV3IGluIHZlcnNpb24gMy4zOiAiY2xlYXIoKSIgYW5kICJjb3B5KCkiIG1ldGhvZHMuXG5cbjYuIFRoZSB2YWx1ZSAqbiogaXMgYW4gaW50ZWdlciwgb3IgYW4gb2JqZWN0IGltcGxlbWVudGluZ1xuICAgIl9faW5kZXhfXygpIi4gIFplcm8gYW5kIG5lZ2F0aXZlIHZhbHVlcyBvZiAqbiogY2xlYXIgdGhlIHNlcXVlbmNlLlxuICAgSXRlbXMgaW4gdGhlIHNlcXVlbmNlIGFyZSBub3QgY29waWVkOyB0aGV5IGFyZSByZWZlcmVuY2VkIG11bHRpcGxlXG4gICB0aW1lcywgYXMgZXhwbGFpbmVkIGZvciAicyAqIG4iIHVuZGVyICpDb21tb24gU2VxdWVuY2UgT3BlcmF0aW9ucyouXG5cblxuTGlzdHNcbj09PT09XG5cbkxpc3RzIGFyZSBtdXRhYmxlIHNlcXVlbmNlcywgdHlwaWNhbGx5IHVzZWQgdG8gc3RvcmUgY29sbGVjdGlvbnMgb2ZcbmhvbW9nZW5lb3VzIGl0ZW1zICh3aGVyZSB0aGUgcHJlY2lzZSBkZWdyZWUgb2Ygc2ltaWxhcml0eSB3aWxsIHZhcnkgYnlcbmFwcGxpY2F0aW9uKS5cblxuY2xhc3MgY2xhc3MgbGlzdChbaXRlcmFibGVdKVxuXG4gICBMaXN0cyBtYXkgYmUgY29uc3RydWN0ZWQgaW4gc2V2ZXJhbCB3YXlzOlxuXG4gICAqIFVzaW5nIGEgcGFpciBvZiBzcXVhcmUgYnJhY2tldHMgdG8gZGVub3RlIHRoZSBlbXB0eSBsaXN0OiAiW10iXG5cbiAgICogVXNpbmcgc3F1YXJlIGJyYWNrZXRzLCBzZXBhcmF0aW5nIGl0ZW1zIHdpdGggY29tbWFzOiAiW2FdIixcbiAgICAgIlthLCBiLCBjXSJcblxuICAgKiBVc2luZyBhIGxpc3QgY29tcHJlaGVuc2lvbjogIlt4IGZvciB4IGluIGl0ZXJhYmxlXSJcblxuICAgKiBVc2luZyB0aGUgdHlwZSBjb25zdHJ1Y3RvcjogImxpc3QoKSIgb3IgImxpc3QoaXRlcmFibGUpIlxuXG4gICBUaGUgY29uc3RydWN0b3IgYnVpbGRzIGEgbGlzdCB3aG9zZSBpdGVtcyBhcmUgdGhlIHNhbWUgYW5kIGluIHRoZVxuICAgc2FtZSBvcmRlciBhcyAqaXRlcmFibGUqXCdzIGl0ZW1zLiAgKml0ZXJhYmxlKiBtYXkgYmUgZWl0aGVyIGFcbiAgIHNlcXVlbmNlLCBhIGNvbnRhaW5lciB0aGF0IHN1cHBvcnRzIGl0ZXJhdGlvbiwgb3IgYW4gaXRlcmF0b3JcbiAgIG9iamVjdC4gIElmICppdGVyYWJsZSogaXMgYWxyZWFkeSBhIGxpc3QsIGEgY29weSBpcyBtYWRlIGFuZFxuICAgcmV0dXJuZWQsIHNpbWlsYXIgdG8gIml0ZXJhYmxlWzpdIi4gRm9yIGV4YW1wbGUsICJsaXN0KFwnYWJjXCcpIlxuICAgcmV0dXJucyAiW1wnYVwnLCBcJ2JcJywgXCdjXCddIiBhbmQgImxpc3QoICgxLCAyLCAzKSApIiByZXR1cm5zICJbMSwgMixcbiAgIDNdIi4gSWYgbm8gYXJndW1lbnQgaXMgZ2l2ZW4sIHRoZSBjb25zdHJ1Y3RvciBjcmVhdGVzIGEgbmV3IGVtcHR5XG4gICBsaXN0LCAiW10iLlxuXG4gICBNYW55IG90aGVyIG9wZXJhdGlvbnMgYWxzbyBwcm9kdWNlIGxpc3RzLCBpbmNsdWRpbmcgdGhlICJzb3J0ZWQoKSJcbiAgIGJ1aWx0LWluLlxuXG4gICBMaXN0cyBpbXBsZW1lbnQgYWxsIG9mIHRoZSAqY29tbW9uKiBhbmQgKm11dGFibGUqIHNlcXVlbmNlXG4gICBvcGVyYXRpb25zLiBMaXN0cyBhbHNvIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBhZGRpdGlvbmFsIG1ldGhvZDpcblxuICAgc29ydCgqLCBrZXk9Tm9uZSwgcmV2ZXJzZT1Ob25lKVxuXG4gICAgICBUaGlzIG1ldGhvZCBzb3J0cyB0aGUgbGlzdCBpbiBwbGFjZSwgdXNpbmcgb25seSAiPCIgY29tcGFyaXNvbnNcbiAgICAgIGJldHdlZW4gaXRlbXMuIEV4Y2VwdGlvbnMgYXJlIG5vdCBzdXBwcmVzc2VkIC0gaWYgYW55IGNvbXBhcmlzb25cbiAgICAgIG9wZXJhdGlvbnMgZmFpbCwgdGhlIGVudGlyZSBzb3J0IG9wZXJhdGlvbiB3aWxsIGZhaWwgKGFuZCB0aGVcbiAgICAgIGxpc3Qgd2lsbCBsaWtlbHkgYmUgbGVmdCBpbiBhIHBhcnRpYWxseSBtb2RpZmllZCBzdGF0ZSkuXG5cbiAgICAgICJzb3J0KCkiIGFjY2VwdHMgdHdvIGFyZ3VtZW50cyB0aGF0IGNhbiBvbmx5IGJlIHBhc3NlZCBieVxuICAgICAga2V5d29yZCAoKmtleXdvcmQtb25seSBhcmd1bWVudHMqKTpcblxuICAgICAgKmtleSogc3BlY2lmaWVzIGEgZnVuY3Rpb24gb2Ygb25lIGFyZ3VtZW50IHRoYXQgaXMgdXNlZCB0b1xuICAgICAgZXh0cmFjdCBhIGNvbXBhcmlzb24ga2V5IGZyb20gZWFjaCBsaXN0IGVsZW1lbnQgKGZvciBleGFtcGxlLFxuICAgICAgImtleT1zdHIubG93ZXIiKS4gVGhlIGtleSBjb3JyZXNwb25kaW5nIHRvIGVhY2ggaXRlbSBpbiB0aGUgbGlzdFxuICAgICAgaXMgY2FsY3VsYXRlZCBvbmNlIGFuZCB0aGVuIHVzZWQgZm9yIHRoZSBlbnRpcmUgc29ydGluZyBwcm9jZXNzLlxuICAgICAgVGhlIGRlZmF1bHQgdmFsdWUgb2YgIk5vbmUiIG1lYW5zIHRoYXQgbGlzdCBpdGVtcyBhcmUgc29ydGVkXG4gICAgICBkaXJlY3RseSB3aXRob3V0IGNhbGN1bGF0aW5nIGEgc2VwYXJhdGUga2V5IHZhbHVlLlxuXG4gICAgICBUaGUgImZ1bmN0b29scy5jbXBfdG9fa2V5KCkiIHV0aWxpdHkgaXMgYXZhaWxhYmxlIHRvIGNvbnZlcnQgYVxuICAgICAgMi54IHN0eWxlICpjbXAqIGZ1bmN0aW9uIHRvIGEgKmtleSogZnVuY3Rpb24uXG5cbiAgICAgICpyZXZlcnNlKiBpcyBhIGJvb2xlYW4gdmFsdWUuICBJZiBzZXQgdG8gIlRydWUiLCB0aGVuIHRoZSBsaXN0XG4gICAgICBlbGVtZW50cyBhcmUgc29ydGVkIGFzIGlmIGVhY2ggY29tcGFyaXNvbiB3ZXJlIHJldmVyc2VkLlxuXG4gICAgICBUaGlzIG1ldGhvZCBtb2RpZmllcyB0aGUgc2VxdWVuY2UgaW4gcGxhY2UgZm9yIGVjb25vbXkgb2Ygc3BhY2VcbiAgICAgIHdoZW4gc29ydGluZyBhIGxhcmdlIHNlcXVlbmNlLiAgVG8gcmVtaW5kIHVzZXJzIHRoYXQgaXQgb3BlcmF0ZXNcbiAgICAgIGJ5IHNpZGUgZWZmZWN0LCBpdCBkb2VzIG5vdCByZXR1cm4gdGhlIHNvcnRlZCBzZXF1ZW5jZSAodXNlXG4gICAgICAic29ydGVkKCkiIHRvIGV4cGxpY2l0bHkgcmVxdWVzdCBhIG5ldyBzb3J0ZWQgbGlzdCBpbnN0YW5jZSkuXG5cbiAgICAgIFRoZSAic29ydCgpIiBtZXRob2QgaXMgZ3VhcmFudGVlZCB0byBiZSBzdGFibGUuICBBIHNvcnQgaXNcbiAgICAgIHN0YWJsZSBpZiBpdCBndWFyYW50ZWVzIG5vdCB0byBjaGFuZ2UgdGhlIHJlbGF0aXZlIG9yZGVyIG9mXG4gICAgICBlbGVtZW50cyB0aGF0IGNvbXBhcmUgZXF1YWwgLS0tIHRoaXMgaXMgaGVscGZ1bCBmb3Igc29ydGluZyBpblxuICAgICAgbXVsdGlwbGUgcGFzc2VzIChmb3IgZXhhbXBsZSwgc29ydCBieSBkZXBhcnRtZW50LCB0aGVuIGJ5IHNhbGFyeVxuICAgICAgZ3JhZGUpLlxuXG4gICAgICAqKkNQeXRob24gaW1wbGVtZW50YXRpb24gZGV0YWlsOioqIFdoaWxlIGEgbGlzdCBpcyBiZWluZyBzb3J0ZWQsXG4gICAgICB0aGUgZWZmZWN0IG9mIGF0dGVtcHRpbmcgdG8gbXV0YXRlLCBvciBldmVuIGluc3BlY3QsIHRoZSBsaXN0IGlzXG4gICAgICB1bmRlZmluZWQuICBUaGUgQyBpbXBsZW1lbnRhdGlvbiBvZiBQeXRob24gbWFrZXMgdGhlIGxpc3QgYXBwZWFyXG4gICAgICBlbXB0eSBmb3IgdGhlIGR1cmF0aW9uLCBhbmQgcmFpc2VzICJWYWx1ZUVycm9yIiBpZiBpdCBjYW4gZGV0ZWN0XG4gICAgICB0aGF0IHRoZSBsaXN0IGhhcyBiZWVuIG11dGF0ZWQgZHVyaW5nIGEgc29ydC5cblxuXG5UdXBsZXNcbj09PT09PVxuXG5UdXBsZXMgYXJlIGltbXV0YWJsZSBzZXF1ZW5jZXMsIHR5cGljYWxseSB1c2VkIHRvIHN0b3JlIGNvbGxlY3Rpb25zIG9mXG5oZXRlcm9nZW5lb3VzIGRhdGEgKHN1Y2ggYXMgdGhlIDItdHVwbGVzIHByb2R1Y2VkIGJ5IHRoZSAiZW51bWVyYXRlKCkiXG5idWlsdC1pbikuIFR1cGxlcyBhcmUgYWxzbyB1c2VkIGZvciBjYXNlcyB3aGVyZSBhbiBpbW11dGFibGUgc2VxdWVuY2Vcbm9mIGhvbW9nZW5lb3VzIGRhdGEgaXMgbmVlZGVkIChzdWNoIGFzIGFsbG93aW5nIHN0b3JhZ2UgaW4gYSAic2V0IiBvclxuImRpY3QiIGluc3RhbmNlKS5cblxuY2xhc3MgY2xhc3MgdHVwbGUoW2l0ZXJhYmxlXSlcblxuICAgVHVwbGVzIG1heSBiZSBjb25zdHJ1Y3RlZCBpbiBhIG51bWJlciBvZiB3YXlzOlxuXG4gICAqIFVzaW5nIGEgcGFpciBvZiBwYXJlbnRoZXNlcyB0byBkZW5vdGUgdGhlIGVtcHR5IHR1cGxlOiAiKCkiXG5cbiAgICogVXNpbmcgYSB0cmFpbGluZyBjb21tYSBmb3IgYSBzaW5nbGV0b24gdHVwbGU6ICJhLCIgb3IgIihhLCkiXG5cbiAgICogU2VwYXJhdGluZyBpdGVtcyB3aXRoIGNvbW1hczogImEsIGIsIGMiIG9yICIoYSwgYiwgYykiXG5cbiAgICogVXNpbmcgdGhlICJ0dXBsZSgpIiBidWlsdC1pbjogInR1cGxlKCkiIG9yICJ0dXBsZShpdGVyYWJsZSkiXG5cbiAgIFRoZSBjb25zdHJ1Y3RvciBidWlsZHMgYSB0dXBsZSB3aG9zZSBpdGVtcyBhcmUgdGhlIHNhbWUgYW5kIGluIHRoZVxuICAgc2FtZSBvcmRlciBhcyAqaXRlcmFibGUqXCdzIGl0ZW1zLiAgKml0ZXJhYmxlKiBtYXkgYmUgZWl0aGVyIGFcbiAgIHNlcXVlbmNlLCBhIGNvbnRhaW5lciB0aGF0IHN1cHBvcnRzIGl0ZXJhdGlvbiwgb3IgYW4gaXRlcmF0b3JcbiAgIG9iamVjdC4gIElmICppdGVyYWJsZSogaXMgYWxyZWFkeSBhIHR1cGxlLCBpdCBpcyByZXR1cm5lZFxuICAgdW5jaGFuZ2VkLiBGb3IgZXhhbXBsZSwgInR1cGxlKFwnYWJjXCcpIiByZXR1cm5zICIoXCdhXCcsIFwnYlwnLCBcJ2NcJykiXG4gICBhbmQgInR1cGxlKCBbMSwgMiwgM10gKSIgcmV0dXJucyAiKDEsIDIsIDMpIi4gSWYgbm8gYXJndW1lbnQgaXNcbiAgIGdpdmVuLCB0aGUgY29uc3RydWN0b3IgY3JlYXRlcyBhIG5ldyBlbXB0eSB0dXBsZSwgIigpIi5cblxuICAgTm90ZSB0aGF0IGl0IGlzIGFjdHVhbGx5IHRoZSBjb21tYSB3aGljaCBtYWtlcyBhIHR1cGxlLCBub3QgdGhlXG4gICBwYXJlbnRoZXNlcy4gVGhlIHBhcmVudGhlc2VzIGFyZSBvcHRpb25hbCwgZXhjZXB0IGluIHRoZSBlbXB0eVxuICAgdHVwbGUgY2FzZSwgb3Igd2hlbiB0aGV5IGFyZSBuZWVkZWQgdG8gYXZvaWQgc3ludGFjdGljIGFtYmlndWl0eS5cbiAgIEZvciBleGFtcGxlLCAiZihhLCBiLCBjKSIgaXMgYSBmdW5jdGlvbiBjYWxsIHdpdGggdGhyZWUgYXJndW1lbnRzLFxuICAgd2hpbGUgImYoKGEsIGIsIGMpKSIgaXMgYSBmdW5jdGlvbiBjYWxsIHdpdGggYSAzLXR1cGxlIGFzIHRoZSBzb2xlXG4gICBhcmd1bWVudC5cblxuICAgVHVwbGVzIGltcGxlbWVudCBhbGwgb2YgdGhlICpjb21tb24qIHNlcXVlbmNlIG9wZXJhdGlvbnMuXG5cbkZvciBoZXRlcm9nZW5lb3VzIGNvbGxlY3Rpb25zIG9mIGRhdGEgd2hlcmUgYWNjZXNzIGJ5IG5hbWUgaXMgY2xlYXJlclxudGhhbiBhY2Nlc3MgYnkgaW5kZXgsICJjb2xsZWN0aW9ucy5uYW1lZHR1cGxlKCkiIG1heSBiZSBhIG1vcmVcbmFwcHJvcHJpYXRlIGNob2ljZSB0aGFuIGEgc2ltcGxlIHR1cGxlIG9iamVjdC5cblxuXG5SYW5nZXNcbj09PT09PVxuXG5UaGUgInJhbmdlIiB0eXBlIHJlcHJlc2VudHMgYW4gaW1tdXRhYmxlIHNlcXVlbmNlIG9mIG51bWJlcnMgYW5kIGlzXG5jb21tb25seSB1c2VkIGZvciBsb29waW5nIGEgc3BlY2lmaWMgbnVtYmVyIG9mIHRpbWVzIGluICJmb3IiIGxvb3BzLlxuXG5jbGFzcyBjbGFzcyByYW5nZShzdG9wKVxuY2xhc3MgY2xhc3MgcmFuZ2Uoc3RhcnQsIHN0b3BbLCBzdGVwXSlcblxuICAgVGhlIGFyZ3VtZW50cyB0byB0aGUgcmFuZ2UgY29uc3RydWN0b3IgbXVzdCBiZSBpbnRlZ2VycyAoZWl0aGVyXG4gICBidWlsdC1pbiAiaW50IiBvciBhbnkgb2JqZWN0IHRoYXQgaW1wbGVtZW50cyB0aGUgIl9faW5kZXhfXyJcbiAgIHNwZWNpYWwgbWV0aG9kKS4gIElmIHRoZSAqc3RlcCogYXJndW1lbnQgaXMgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG9cbiAgICIxIi4gSWYgdGhlICpzdGFydCogYXJndW1lbnQgaXMgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gIjAiLiBJZlxuICAgKnN0ZXAqIGlzIHplcm8sICJWYWx1ZUVycm9yIiBpcyByYWlzZWQuXG5cbiAgIEZvciBhIHBvc2l0aXZlICpzdGVwKiwgdGhlIGNvbnRlbnRzIG9mIGEgcmFuZ2UgInIiIGFyZSBkZXRlcm1pbmVkXG4gICBieSB0aGUgZm9ybXVsYSAicltpXSA9IHN0YXJ0ICsgc3RlcCppIiB3aGVyZSAiaSA+PSAwIiBhbmQgInJbaV0gPFxuICAgc3RvcCIuXG5cbiAgIEZvciBhIG5lZ2F0aXZlICpzdGVwKiwgdGhlIGNvbnRlbnRzIG9mIHRoZSByYW5nZSBhcmUgc3RpbGxcbiAgIGRldGVybWluZWQgYnkgdGhlIGZvcm11bGEgInJbaV0gPSBzdGFydCArIHN0ZXAqaSIsIGJ1dCB0aGVcbiAgIGNvbnN0cmFpbnRzIGFyZSAiaSA+PSAwIiBhbmQgInJbaV0gPiBzdG9wIi5cblxuICAgQSByYW5nZSBvYmplY3Qgd2lsbCBiZSBlbXB0eSBpZiAiclswXSIgZG9lcyBub3QgbWVldCB0aGUgdmFsdWVcbiAgIGNvbnN0cmFpbnQuIFJhbmdlcyBkbyBzdXBwb3J0IG5lZ2F0aXZlIGluZGljZXMsIGJ1dCB0aGVzZSBhcmVcbiAgIGludGVycHJldGVkIGFzIGluZGV4aW5nIGZyb20gdGhlIGVuZCBvZiB0aGUgc2VxdWVuY2UgZGV0ZXJtaW5lZCBieVxuICAgdGhlIHBvc2l0aXZlIGluZGljZXMuXG5cbiAgIFJhbmdlcyBjb250YWluaW5nIGFic29sdXRlIHZhbHVlcyBsYXJnZXIgdGhhbiAic3lzLm1heHNpemUiIGFyZVxuICAgcGVybWl0dGVkIGJ1dCBzb21lIGZlYXR1cmVzIChzdWNoIGFzICJsZW4oKSIpIG1heSByYWlzZVxuICAgIk92ZXJmbG93RXJyb3IiLlxuXG4gICBSYW5nZSBleGFtcGxlczpcblxuICAgICAgPj4+IGxpc3QocmFuZ2UoMTApKVxuICAgICAgWzAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDldXG4gICAgICA+Pj4gbGlzdChyYW5nZSgxLCAxMSkpXG4gICAgICBbMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTBdXG4gICAgICA+Pj4gbGlzdChyYW5nZSgwLCAzMCwgNSkpXG4gICAgICBbMCwgNSwgMTAsIDE1LCAyMCwgMjVdXG4gICAgICA+Pj4gbGlzdChyYW5nZSgwLCAxMCwgMykpXG4gICAgICBbMCwgMywgNiwgOV1cbiAgICAgID4+PiBsaXN0KHJhbmdlKDAsIC0xMCwgLTEpKVxuICAgICAgWzAsIC0xLCAtMiwgLTMsIC00LCAtNSwgLTYsIC03LCAtOCwgLTldXG4gICAgICA+Pj4gbGlzdChyYW5nZSgwKSlcbiAgICAgIFtdXG4gICAgICA+Pj4gbGlzdChyYW5nZSgxLCAwKSlcbiAgICAgIFtdXG5cbiAgIFJhbmdlcyBpbXBsZW1lbnQgYWxsIG9mIHRoZSAqY29tbW9uKiBzZXF1ZW5jZSBvcGVyYXRpb25zIGV4Y2VwdFxuICAgY29uY2F0ZW5hdGlvbiBhbmQgcmVwZXRpdGlvbiAoZHVlIHRvIHRoZSBmYWN0IHRoYXQgcmFuZ2Ugb2JqZWN0c1xuICAgY2FuIG9ubHkgcmVwcmVzZW50IHNlcXVlbmNlcyB0aGF0IGZvbGxvdyBhIHN0cmljdCBwYXR0ZXJuIGFuZFxuICAgcmVwZXRpdGlvbiBhbmQgY29uY2F0ZW5hdGlvbiB3aWxsIHVzdWFsbHkgdmlvbGF0ZSB0aGF0IHBhdHRlcm4pLlxuXG5UaGUgYWR2YW50YWdlIG9mIHRoZSAicmFuZ2UiIHR5cGUgb3ZlciBhIHJlZ3VsYXIgImxpc3QiIG9yICJ0dXBsZSIgaXNcbnRoYXQgYSAicmFuZ2UiIG9iamVjdCB3aWxsIGFsd2F5cyB0YWtlIHRoZSBzYW1lIChzbWFsbCkgYW1vdW50IG9mXG5tZW1vcnksIG5vIG1hdHRlciB0aGUgc2l6ZSBvZiB0aGUgcmFuZ2UgaXQgcmVwcmVzZW50cyAoYXMgaXQgb25seVxuc3RvcmVzIHRoZSAic3RhcnQiLCAic3RvcCIgYW5kICJzdGVwIiB2YWx1ZXMsIGNhbGN1bGF0aW5nIGluZGl2aWR1YWxcbml0ZW1zIGFuZCBzdWJyYW5nZXMgYXMgbmVlZGVkKS5cblxuUmFuZ2Ugb2JqZWN0cyBpbXBsZW1lbnQgdGhlICJjb2xsZWN0aW9ucy5hYmMuU2VxdWVuY2UiIEFCQywgYW5kXG5wcm92aWRlIGZlYXR1cmVzIHN1Y2ggYXMgY29udGFpbm1lbnQgdGVzdHMsIGVsZW1lbnQgaW5kZXggbG9va3VwLFxuc2xpY2luZyBhbmQgc3VwcG9ydCBmb3IgbmVnYXRpdmUgaW5kaWNlcyAoc2VlICpTZXF1ZW5jZSBUeXBlcyAtLS1cbmxpc3QsIHR1cGxlLCByYW5nZSopOlxuXG4+Pj4gciA9IHJhbmdlKDAsIDIwLCAyKVxuPj4+IHJcbnJhbmdlKDAsIDIwLCAyKVxuPj4+IDExIGluIHJcbkZhbHNlXG4+Pj4gMTAgaW4gclxuVHJ1ZVxuPj4+IHIuaW5kZXgoMTApXG41XG4+Pj4gcls1XVxuMTBcbj4+PiByWzo1XVxucmFuZ2UoMCwgMTAsIDIpXG4+Pj4gclstMV1cbjE4XG5cblRlc3RpbmcgcmFuZ2Ugb2JqZWN0cyBmb3IgZXF1YWxpdHkgd2l0aCAiPT0iIGFuZCAiIT0iIGNvbXBhcmVzIHRoZW0gYXNcbnNlcXVlbmNlcy4gIFRoYXQgaXMsIHR3byByYW5nZSBvYmplY3RzIGFyZSBjb25zaWRlcmVkIGVxdWFsIGlmIHRoZXlcbnJlcHJlc2VudCB0aGUgc2FtZSBzZXF1ZW5jZSBvZiB2YWx1ZXMuICAoTm90ZSB0aGF0IHR3byByYW5nZSBvYmplY3RzXG50aGF0IGNvbXBhcmUgZXF1YWwgbWlnaHQgaGF2ZSBkaWZmZXJlbnQgInN0YXJ0IiwgInN0b3AiIGFuZCAic3RlcCJcbmF0dHJpYnV0ZXMsIGZvciBleGFtcGxlICJyYW5nZSgwKSA9PSByYW5nZSgyLCAxLCAzKSIgb3IgInJhbmdlKDAsIDMsXG4yKSA9PSByYW5nZSgwLCA0LCAyKSIuKVxuXG5DaGFuZ2VkIGluIHZlcnNpb24gMy4yOiBJbXBsZW1lbnQgdGhlIFNlcXVlbmNlIEFCQy4gU3VwcG9ydCBzbGljaW5nXG5hbmQgbmVnYXRpdmUgaW5kaWNlcy4gVGVzdCAiaW50IiBvYmplY3RzIGZvciBtZW1iZXJzaGlwIGluIGNvbnN0YW50XG50aW1lIGluc3RlYWQgb2YgaXRlcmF0aW5nIHRocm91Z2ggYWxsIGl0ZW1zLlxuXG5DaGFuZ2VkIGluIHZlcnNpb24gMy4zOiBEZWZpbmUgXCc9PVwnIGFuZCBcJyE9XCcgdG8gY29tcGFyZSByYW5nZSBvYmplY3RzXG5iYXNlZCBvbiB0aGUgc2VxdWVuY2Ugb2YgdmFsdWVzIHRoZXkgZGVmaW5lIChpbnN0ZWFkIG9mIGNvbXBhcmluZ1xuYmFzZWQgb24gb2JqZWN0IGlkZW50aXR5KS5cblxuTmV3IGluIHZlcnNpb24gMy4zOiBUaGUgInN0YXJ0IiwgInN0b3AiIGFuZCAic3RlcCIgYXR0cmlidXRlcy5cbicsCisgJ3R5cGVzc2VxLW11dGFibGUnOiB1J1xuTXV0YWJsZSBTZXF1ZW5jZSBUeXBlc1xuKioqKioqKioqKioqKioqKioqKioqKlxuXG5UaGUgb3BlcmF0aW9ucyBpbiB0aGUgZm9sbG93aW5nIHRhYmxlIGFyZSBkZWZpbmVkIG9uIG11dGFibGUgc2VxdWVuY2VcbnR5cGVzLiBUaGUgImNvbGxlY3Rpb25zLmFiYy5NdXRhYmxlU2VxdWVuY2UiIEFCQyBpcyBwcm92aWRlZCB0byBtYWtlXG5pdCBlYXNpZXIgdG8gY29ycmVjdGx5IGltcGxlbWVudCB0aGVzZSBvcGVyYXRpb25zIG9uIGN1c3RvbSBzZXF1ZW5jZVxudHlwZXMuXG5cbkluIHRoZSB0YWJsZSAqcyogaXMgYW4gaW5zdGFuY2Ugb2YgYSBtdXRhYmxlIHNlcXVlbmNlIHR5cGUsICp0KiBpcyBhbnlcbml0ZXJhYmxlIG9iamVjdCBhbmQgKngqIGlzIGFuIGFyYml0cmFyeSBvYmplY3QgdGhhdCBtZWV0cyBhbnkgdHlwZSBhbmRcbnZhbHVlIHJlc3RyaWN0aW9ucyBpbXBvc2VkIGJ5ICpzKiAoZm9yIGV4YW1wbGUsICJieXRlYXJyYXkiIG9ubHlcbmFjY2VwdHMgaW50ZWdlcnMgdGhhdCBtZWV0IHRoZSB2YWx1ZSByZXN0cmljdGlvbiAiMCA8PSB4IDw9IDI1NSIpLlxuXG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgT3BlcmF0aW9uICAgICAgICAgICAgICAgICAgICAgIHwgUmVzdWx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBOb3RlcyAgICAgICAgICAgICAgICAgfFxuKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT0rXG58ICJzW2ldID0geCIgICAgICAgICAgICAgICAgICAgICB8IGl0ZW0gKmkqIG9mICpzKiBpcyByZXBsYWNlZCBieSAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKngqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58ICJzW2k6al0gPSB0IiAgICAgICAgICAgICAgICAgICB8IHNsaWNlIG9mICpzKiBmcm9tICppKiB0byAqaiogaXMgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcmVwbGFjZWQgYnkgdGhlIGNvbnRlbnRzIG9mIHRoZSAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpdGVyYWJsZSAqdCogICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgImRlbCBzW2k6al0iICAgICAgICAgICAgICAgICAgIHwgc2FtZSBhcyAic1tpOmpdID0gW10iICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58ICJzW2k6ajprXSA9IHQiICAgICAgICAgICAgICAgICB8IHRoZSBlbGVtZW50cyBvZiAic1tpOmo6a10iIGFyZSAgIHwgKDEpICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcmVwbGFjZWQgYnkgdGhvc2Ugb2YgKnQqICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58ICJkZWwgc1tpOmo6a10iICAgICAgICAgICAgICAgICB8IHJlbW92ZXMgdGhlIGVsZW1lbnRzIG9mICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgInNbaTpqOmtdIiBmcm9tIHRoZSBsaXN0ICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58ICJzLmFwcGVuZCh4KSIgICAgICAgICAgICAgICAgICB8IGFwcGVuZHMgKngqIHRvIHRoZSBlbmQgb2YgdGhlICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc2VxdWVuY2UgKHNhbWUgYXMgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAic1tsZW4ocyk6bGVuKHMpXSA9IFt4XSIpICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgInMuY2xlYXIoKSIgICAgICAgICAgICAgICAgICAgIHwgcmVtb3ZlcyBhbGwgaXRlbXMgZnJvbSAicyIgKHNhbWUgfCAoNSkgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhcyAiZGVsIHNbOl0iKSAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgInMuY29weSgpIiAgICAgICAgICAgICAgICAgICAgIHwgY3JlYXRlcyBhIHNoYWxsb3cgY29weSBvZiAicyIgICAgfCAoNSkgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoc2FtZSBhcyAic1s6XSIpICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgInMuZXh0ZW5kKHQpIiBvciAicyArPSB0IiAgICAgIHwgZXh0ZW5kcyAqcyogd2l0aCB0aGUgY29udGVudHMgb2YgfCAgICAgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAqdCogKGZvciB0aGUgbW9zdCBwYXJ0IHRoZSBzYW1lICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFzICJzW2xlbihzKTpsZW4ocyldID0gdCIpICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAicyAqPSBuIiAgICAgICAgICAgICAgICAgICAgICAgfCB1cGRhdGVzICpzKiB3aXRoIGl0cyBjb250ZW50cyAgICB8ICg2KSAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHJlcGVhdGVkICpuKiB0aW1lcyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAicy5pbnNlcnQoaSwgeCkiICAgICAgICAgICAgICAgfCBpbnNlcnRzICp4KiBpbnRvICpzKiBhdCB0aGUgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGluZGV4IGdpdmVuIGJ5ICppKiAoc2FtZSBhcyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgInNbaTppXSA9IFt4XSIpICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58ICJzLnBvcChbaV0pIiAgICAgICAgICAgICAgICAgICB8IHJldHJpZXZlcyB0aGUgaXRlbSBhdCAqaSogYW5kICAgIHwgKDIpICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYWxzbyByZW1vdmVzIGl0IGZyb20gKnMqICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58ICJzLnJlbW92ZSh4KSIgICAgICAgICAgICAgICAgICB8IHJlbW92ZSB0aGUgZmlyc3QgaXRlbSBmcm9tICpzKiAgIHwgKDMpICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgd2hlcmUgInNbaV0gPT0geCIgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58ICJzLnJldmVyc2UoKSIgICAgICAgICAgICAgICAgICB8IHJldmVyc2VzIHRoZSBpdGVtcyBvZiAqcyogaW4gICAgIHwgKDQpICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcGxhY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG5cbk5vdGVzOlxuXG4xLiAqdCogbXVzdCBoYXZlIHRoZSBzYW1lIGxlbmd0aCBhcyB0aGUgc2xpY2UgaXQgaXMgcmVwbGFjaW5nLlxuXG4yLiBUaGUgb3B0aW9uYWwgYXJndW1lbnQgKmkqIGRlZmF1bHRzIHRvICItMSIsIHNvIHRoYXQgYnkgZGVmYXVsdFxuICAgdGhlIGxhc3QgaXRlbSBpcyByZW1vdmVkIGFuZCByZXR1cm5lZC5cblxuMy4gInJlbW92ZSIgcmFpc2VzICJWYWx1ZUVycm9yIiB3aGVuICp4KiBpcyBub3QgZm91bmQgaW4gKnMqLlxuXG40LiBUaGUgInJldmVyc2UoKSIgbWV0aG9kIG1vZGlmaWVzIHRoZSBzZXF1ZW5jZSBpbiBwbGFjZSBmb3JcbiAgIGVjb25vbXkgb2Ygc3BhY2Ugd2hlbiByZXZlcnNpbmcgYSBsYXJnZSBzZXF1ZW5jZS4gIFRvIHJlbWluZCB1c2Vyc1xuICAgdGhhdCBpdCBvcGVyYXRlcyBieSBzaWRlIGVmZmVjdCwgaXQgZG9lcyBub3QgcmV0dXJuIHRoZSByZXZlcnNlZFxuICAgc2VxdWVuY2UuXG5cbjUuICJjbGVhcigpIiBhbmQgImNvcHkoKSIgYXJlIGluY2x1ZGVkIGZvciBjb25zaXN0ZW5jeSB3aXRoIHRoZVxuICAgaW50ZXJmYWNlcyBvZiBtdXRhYmxlIGNvbnRhaW5lcnMgdGhhdCBkb25cJ3Qgc3VwcG9ydCBzbGljaW5nXG4gICBvcGVyYXRpb25zIChzdWNoIGFzICJkaWN0IiBhbmQgInNldCIpXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDMuMzogImNsZWFyKCkiIGFuZCAiY29weSgpIiBtZXRob2RzLlxuXG42LiBUaGUgdmFsdWUgKm4qIGlzIGFuIGludGVnZXIsIG9yIGFuIG9iamVjdCBpbXBsZW1lbnRpbmdcbiAgICJfX2luZGV4X18oKSIuICBaZXJvIGFuZCBuZWdhdGl2ZSB2YWx1ZXMgb2YgKm4qIGNsZWFyIHRoZSBzZXF1ZW5jZS5cbiAgIEl0ZW1zIGluIHRoZSBzZXF1ZW5jZSBhcmUgbm90IGNvcGllZDsgdGhleSBhcmUgcmVmZXJlbmNlZCBtdWx0aXBsZVxuICAgdGltZXMsIGFzIGV4cGxhaW5lZCBmb3IgInMgKiBuIiB1bmRlciAqQ29tbW9uIFNlcXVlbmNlIE9wZXJhdGlvbnMqLlxuJywKKyAndW5hcnknOiB1J1xuVW5hcnkgYXJpdGhtZXRpYyBhbmQgYml0d2lzZSBvcGVyYXRpb25zXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblxuQWxsIHVuYXJ5IGFyaXRobWV0aWMgYW5kIGJpdHdpc2Ugb3BlcmF0aW9ucyBoYXZlIHRoZSBzYW1lIHByaW9yaXR5OlxuXG4gICB1X2V4cHIgOjo9IHBvd2VyIHwgIi0iIHVfZXhwciB8ICIrIiB1X2V4cHIgfCAifiIgdV9leHByXG5cblRoZSB1bmFyeSAiLSIgKG1pbnVzKSBvcGVyYXRvciB5aWVsZHMgdGhlIG5lZ2F0aW9uIG9mIGl0cyBudW1lcmljXG5hcmd1bWVudC5cblxuVGhlIHVuYXJ5ICIrIiAocGx1cykgb3BlcmF0b3IgeWllbGRzIGl0cyBudW1lcmljIGFyZ3VtZW50IHVuY2hhbmdlZC5cblxuVGhlIHVuYXJ5ICJ+IiAoaW52ZXJ0KSBvcGVyYXRvciB5aWVsZHMgdGhlIGJpdHdpc2UgaW52ZXJzaW9uIG9mIGl0c1xuaW50ZWdlciBhcmd1bWVudC4gIFRoZSBiaXR3aXNlIGludmVyc2lvbiBvZiAieCIgaXMgZGVmaW5lZCBhc1xuIi0oeCsxKSIuICBJdCBvbmx5IGFwcGxpZXMgdG8gaW50ZWdyYWwgbnVtYmVycy5cblxuSW4gYWxsIHRocmVlIGNhc2VzLCBpZiB0aGUgYXJndW1lbnQgZG9lcyBub3QgaGF2ZSB0aGUgcHJvcGVyIHR5cGUsIGFcbiJUeXBlRXJyb3IiIGV4Y2VwdGlvbiBpcyByYWlzZWQuXG4nLAorICd3aGlsZSc6IHUnXG5UaGUgIndoaWxlIiBzdGF0ZW1lbnRcbioqKioqKioqKioqKioqKioqKioqKlxuXG5UaGUgIndoaWxlIiBzdGF0ZW1lbnQgaXMgdXNlZCBmb3IgcmVwZWF0ZWQgZXhlY3V0aW9uIGFzIGxvbmcgYXMgYW5cbmV4cHJlc3Npb24gaXMgdHJ1ZTpcblxuICAgd2hpbGVfc3RtdCA6Oj0gIndoaWxlIiBleHByZXNzaW9uICI6IiBzdWl0ZVxuICAgICAgICAgICAgICAgICAgWyJlbHNlIiAiOiIgc3VpdGVdXG5cblRoaXMgcmVwZWF0ZWRseSB0ZXN0cyB0aGUgZXhwcmVzc2lvbiBhbmQsIGlmIGl0IGlzIHRydWUsIGV4ZWN1dGVzIHRoZVxuZmlyc3Qgc3VpdGU7IGlmIHRoZSBleHByZXNzaW9uIGlzIGZhbHNlICh3aGljaCBtYXkgYmUgdGhlIGZpcnN0IHRpbWVcbml0IGlzIHRlc3RlZCkgdGhlIHN1aXRlIG9mIHRoZSAiZWxzZSIgY2xhdXNlLCBpZiBwcmVzZW50LCBpcyBleGVjdXRlZFxuYW5kIHRoZSBsb29wIHRlcm1pbmF0ZXMuXG5cbkEgImJyZWFrIiBzdGF0ZW1lbnQgZXhlY3V0ZWQgaW4gdGhlIGZpcnN0IHN1aXRlIHRlcm1pbmF0ZXMgdGhlIGxvb3BcbndpdGhvdXQgZXhlY3V0aW5nIHRoZSAiZWxzZSIgY2xhdXNlXCdzIHN1aXRlLiAgQSAiY29udGludWUiIHN0YXRlbWVudFxuZXhlY3V0ZWQgaW4gdGhlIGZpcnN0IHN1aXRlIHNraXBzIHRoZSByZXN0IG9mIHRoZSBzdWl0ZSBhbmQgZ29lcyBiYWNrXG50byB0ZXN0aW5nIHRoZSBleHByZXNzaW9uLlxuJywKKyAnd2l0aCc6IHUnXG5UaGUgIndpdGgiIHN0YXRlbWVudFxuKioqKioqKioqKioqKioqKioqKipcblxuVGhlICJ3aXRoIiBzdGF0ZW1lbnQgaXMgdXNlZCB0byB3cmFwIHRoZSBleGVjdXRpb24gb2YgYSBibG9jayB3aXRoXG5tZXRob2RzIGRlZmluZWQgYnkgYSBjb250ZXh0IG1hbmFnZXIgKHNlZSBzZWN0aW9uICpXaXRoIFN0YXRlbWVudFxuQ29udGV4dCBNYW5hZ2VycyopLiBUaGlzIGFsbG93cyBjb21tb24gInRyeSIuLi4iZXhjZXB0Ii4uLiJmaW5hbGx5IlxudXNhZ2UgcGF0dGVybnMgdG8gYmUgZW5jYXBzdWxhdGVkIGZvciBjb252ZW5pZW50IHJldXNlLlxuXG4gICB3aXRoX3N0bXQgOjo9ICJ3aXRoIiB3aXRoX2l0ZW0gKCIsIiB3aXRoX2l0ZW0pKiAiOiIgc3VpdGVcbiAgIHdpdGhfaXRlbSA6Oj0gZXhwcmVzc2lvbiBbImFzIiB0YXJnZXRdXG5cblRoZSBleGVjdXRpb24gb2YgdGhlICJ3aXRoIiBzdGF0ZW1lbnQgd2l0aCBvbmUgIml0ZW0iIHByb2NlZWRzIGFzXG5mb2xsb3dzOlxuXG4xLiBUaGUgY29udGV4dCBleHByZXNzaW9uICh0aGUgZXhwcmVzc2lvbiBnaXZlbiBpbiB0aGUgIndpdGhfaXRlbSIpXG4gICBpcyBldmFsdWF0ZWQgdG8gb2J0YWluIGEgY29udGV4dCBtYW5hZ2VyLlxuXG4yLiBUaGUgY29udGV4dCBtYW5hZ2VyXCdzICJfX2V4aXRfXygpIiBpcyBsb2FkZWQgZm9yIGxhdGVyIHVzZS5cblxuMy4gVGhlIGNvbnRleHQgbWFuYWdlclwncyAiX19lbnRlcl9fKCkiIG1ldGhvZCBpcyBpbnZva2VkLlxuXG40LiBJZiBhIHRhcmdldCB3YXMgaW5jbHVkZWQgaW4gdGhlICJ3aXRoIiBzdGF0ZW1lbnQsIHRoZSByZXR1cm5cbiAgIHZhbHVlIGZyb20gIl9fZW50ZXJfXygpIiBpcyBhc3NpZ25lZCB0byBpdC5cblxuICAgTm90ZTogVGhlICJ3aXRoIiBzdGF0ZW1lbnQgZ3VhcmFudGVlcyB0aGF0IGlmIHRoZSAiX19lbnRlcl9fKCkiXG4gICAgIG1ldGhvZCByZXR1cm5zIHdpdGhvdXQgYW4gZXJyb3IsIHRoZW4gIl9fZXhpdF9fKCkiIHdpbGwgYWx3YXlzIGJlXG4gICAgIGNhbGxlZC4gVGh1cywgaWYgYW4gZXJyb3Igb2NjdXJzIGR1cmluZyB0aGUgYXNzaWdubWVudCB0byB0aGVcbiAgICAgdGFyZ2V0IGxpc3QsIGl0IHdpbGwgYmUgdHJlYXRlZCB0aGUgc2FtZSBhcyBhbiBlcnJvciBvY2N1cnJpbmdcbiAgICAgd2l0aGluIHRoZSBzdWl0ZSB3b3VsZCBiZS4gU2VlIHN0ZXAgNiBiZWxvdy5cblxuNS4gVGhlIHN1aXRlIGlzIGV4ZWN1dGVkLlxuXG42LiBUaGUgY29udGV4dCBtYW5hZ2VyXCdzICJfX2V4aXRfXygpIiBtZXRob2QgaXMgaW52b2tlZC4gIElmIGFuXG4gICBleGNlcHRpb24gY2F1c2VkIHRoZSBzdWl0ZSB0byBiZSBleGl0ZWQsIGl0cyB0eXBlLCB2YWx1ZSwgYW5kXG4gICB0cmFjZWJhY2sgYXJlIHBhc3NlZCBhcyBhcmd1bWVudHMgdG8gIl9fZXhpdF9fKCkiLiBPdGhlcndpc2UsIHRocmVlXG4gICAiTm9uZSIgYXJndW1lbnRzIGFyZSBzdXBwbGllZC5cblxuICAgSWYgdGhlIHN1aXRlIHdhcyBleGl0ZWQgZHVlIHRvIGFuIGV4Y2VwdGlvbiwgYW5kIHRoZSByZXR1cm4gdmFsdWVcbiAgIGZyb20gdGhlICJfX2V4aXRfXygpIiBtZXRob2Qgd2FzIGZhbHNlLCB0aGUgZXhjZXB0aW9uIGlzIHJlcmFpc2VkLlxuICAgSWYgdGhlIHJldHVybiB2YWx1ZSB3YXMgdHJ1ZSwgdGhlIGV4Y2VwdGlvbiBpcyBzdXBwcmVzc2VkLCBhbmRcbiAgIGV4ZWN1dGlvbiBjb250aW51ZXMgd2l0aCB0aGUgc3RhdGVtZW50IGZvbGxvd2luZyB0aGUgIndpdGgiXG4gICBzdGF0ZW1lbnQuXG5cbiAgIElmIHRoZSBzdWl0ZSB3YXMgZXhpdGVkIGZvciBhbnkgcmVhc29uIG90aGVyIHRoYW4gYW4gZXhjZXB0aW9uLCB0aGVcbiAgIHJldHVybiB2YWx1ZSBmcm9tICJfX2V4aXRfXygpIiBpcyBpZ25vcmVkLCBhbmQgZXhlY3V0aW9uIHByb2NlZWRzXG4gICBhdCB0aGUgbm9ybWFsIGxvY2F0aW9uIGZvciB0aGUga2luZCBvZiBleGl0IHRoYXQgd2FzIHRha2VuLlxuXG5XaXRoIG1vcmUgdGhhbiBvbmUgaXRlbSwgdGhlIGNvbnRleHQgbWFuYWdlcnMgYXJlIHByb2Nlc3NlZCBhcyBpZlxubXVsdGlwbGUgIndpdGgiIHN0YXRlbWVudHMgd2VyZSBuZXN0ZWQ6XG5cbiAgIHdpdGggQSgpIGFzIGEsIEIoKSBhcyBiOlxuICAgICAgIHN1aXRlXG5cbmlzIGVxdWl2YWxlbnQgdG9cblxuICAgd2l0aCBBKCkgYXMgYTpcbiAgICAgICB3aXRoIEIoKSBhcyBiOlxuICAgICAgICAgICBzdWl0ZVxuXG5DaGFuZ2VkIGluIHZlcnNpb24gMy4xOiBTdXBwb3J0IGZvciBtdWx0aXBsZSBjb250ZXh0IGV4cHJlc3Npb25zLlxuXG5TZWUgYWxzbzogKipQRVAgMDM0MyoqIC0gVGhlICJ3aXRoIiBzdGF0ZW1lbnRcblxuICAgICBUaGUgc3BlY2lmaWNhdGlvbiwgYmFja2dyb3VuZCwgYW5kIGV4YW1wbGVzIGZvciB0aGUgUHl0aG9uICJ3aXRoIlxuICAgICBzdGF0ZW1lbnQuXG4nLAorICd5aWVsZCc6IHUnXG5UaGUgInlpZWxkIiBzdGF0ZW1lbnRcbioqKioqKioqKioqKioqKioqKioqKlxuXG4gICB5aWVsZF9zdG10IDo6PSB5aWVsZF9leHByZXNzaW9uXG5cbkEgInlpZWxkIiBzdGF0ZW1lbnQgaXMgc2VtYW50aWNhbGx5IGVxdWl2YWxlbnQgdG8gYSAqeWllbGRcbmV4cHJlc3Npb24qLiBUaGUgeWllbGQgc3RhdGVtZW50IGNhbiBiZSB1c2VkIHRvIG9taXQgdGhlIHBhcmVudGhlc2VzXG50aGF0IHdvdWxkIG90aGVyd2lzZSBiZSByZXF1aXJlZCBpbiB0aGUgZXF1aXZhbGVudCB5aWVsZCBleHByZXNzaW9uXG5zdGF0ZW1lbnQuIEZvciBleGFtcGxlLCB0aGUgeWllbGQgc3RhdGVtZW50c1xuXG4gICB5aWVsZCA8ZXhwcj5cbiAgIHlpZWxkIGZyb20gPGV4cHI+XG5cbmFyZSBlcXVpdmFsZW50IHRvIHRoZSB5aWVsZCBleHByZXNzaW9uIHN0YXRlbWVudHNcblxuICAgKHlpZWxkIDxleHByPilcbiAgICh5aWVsZCBmcm9tIDxleHByPilcblxuWWllbGQgZXhwcmVzc2lvbnMgYW5kIHN0YXRlbWVudHMgYXJlIG9ubHkgdXNlZCB3aGVuIGRlZmluaW5nIGFcbipnZW5lcmF0b3IqIGZ1bmN0aW9uLCBhbmQgYXJlIG9ubHkgdXNlZCBpbiB0aGUgYm9keSBvZiB0aGUgZ2VuZXJhdG9yXG5mdW5jdGlvbi4gIFVzaW5nIHlpZWxkIGluIGEgZnVuY3Rpb24gZGVmaW5pdGlvbiBpcyBzdWZmaWNpZW50IHRvIGNhdXNlXG50aGF0IGRlZmluaXRpb24gdG8gY3JlYXRlIGEgZ2VuZXJhdG9yIGZ1bmN0aW9uIGluc3RlYWQgb2YgYSBub3JtYWxcbmZ1bmN0aW9uLlxuXG5Gb3IgZnVsbCBkZXRhaWxzIG9mICJ5aWVsZCIgc2VtYW50aWNzLCByZWZlciB0byB0aGUgKllpZWxkXG5leHByZXNzaW9ucyogc2VjdGlvbi5cbid9CmRpZmYgLS1naXQgYS9MaWIvcXVvcHJpLnB5IGIvTGliL3F1b3ByaS5weQppbmRleCAzZDBmMGFjLi5jYmQ5NzlhIDEwMDc1NQotLS0gYS9MaWIvcXVvcHJpLnB5CisrKyBiL0xpYi9xdW9wcmkucHkKQEAgLTQ0LDEzICs0NCwxMSBAQAogZGVmIGVuY29kZShpbnB1dCwgb3V0cHV0LCBxdW90ZXRhYnMsIGhlYWRlcj1GYWxzZSk6CiAgICAgIiIiUmVhZCAnaW5wdXQnLCBhcHBseSBxdW90ZWQtcHJpbnRhYmxlIGVuY29kaW5nLCBhbmQgd3JpdGUgdG8gJ291dHB1dCcuCiAKLSAgICAnaW5wdXQnIGFuZCAnb3V0cHV0JyBhcmUgZmlsZXMgd2l0aCByZWFkbGluZSgpIGFuZCB3cml0ZSgpIG1ldGhvZHMuCi0gICAgVGhlICdxdW90ZXRhYnMnIGZsYWcgaW5kaWNhdGVzIHdoZXRoZXIgZW1iZWRkZWQgdGFicyBhbmQgc3BhY2VzIHNob3VsZCBiZQotICAgIHF1b3RlZC4gIE5vdGUgdGhhdCBsaW5lLWVuZGluZyB0YWJzIGFuZCBzcGFjZXMgYXJlIGFsd2F5cyBlbmNvZGVkLCBhcyBwZXIKLSAgICBSRkMgMTUyMS4KLSAgICBUaGUgJ2hlYWRlcicgZmxhZyBpbmRpY2F0ZXMgd2hldGhlciB3ZSBhcmUgZW5jb2Rpbmcgc3BhY2VzIGFzIF8gYXMgcGVyCi0gICAgUkZDIDE1MjIuCi0gICAgIiIiCisgICAgJ2lucHV0JyBhbmQgJ291dHB1dCcgYXJlIGJpbmFyeSBmaWxlIG9iamVjdHMuIFRoZSAncXVvdGV0YWJzJyBmbGFnCisgICAgaW5kaWNhdGVzIHdoZXRoZXIgZW1iZWRkZWQgdGFicyBhbmQgc3BhY2VzIHNob3VsZCBiZSBxdW90ZWQuIE5vdGUgdGhhdAorICAgIGxpbmUtZW5kaW5nIHRhYnMgYW5kIHNwYWNlcyBhcmUgYWx3YXlzIGVuY29kZWQsIGFzIHBlciBSRkMgMTUyMS4KKyAgICBUaGUgJ2hlYWRlcicgZmxhZyBpbmRpY2F0ZXMgd2hldGhlciB3ZSBhcmUgZW5jb2Rpbmcgc3BhY2VzIGFzIF8gYXMgcGVyIFJGQworICAgIDE1MjIuIiIiCiAKICAgICBpZiBiMmFfcXAgaXMgbm90IE5vbmU6CiAgICAgICAgIGRhdGEgPSBpbnB1dC5yZWFkKCkKQEAgLTExOCw3ICsxMTYsNyBAQAogCiBkZWYgZGVjb2RlKGlucHV0LCBvdXRwdXQsIGhlYWRlcj1GYWxzZSk6CiAgICAgIiIiUmVhZCAnaW5wdXQnLCBhcHBseSBxdW90ZWQtcHJpbnRhYmxlIGRlY29kaW5nLCBhbmQgd3JpdGUgdG8gJ291dHB1dCcuCi0gICAgJ2lucHV0JyBhbmQgJ291dHB1dCcgYXJlIGZpbGVzIHdpdGggcmVhZGxpbmUoKSBhbmQgd3JpdGUoKSBtZXRob2RzLgorICAgICdpbnB1dCcgYW5kICdvdXRwdXQnIGFyZSBiaW5hcnkgZmlsZSBvYmplY3RzLgogICAgIElmICdoZWFkZXInIGlzIHRydWUsIGRlY29kZSB1bmRlcnNjb3JlIGFzIHNwYWNlIChwZXIgUkZDIDE1MjIpLiIiIgogCiAgICAgaWYgYTJiX3FwIGlzIG5vdCBOb25lOgpAQCAtMTQ3LDcgKzE0NSw3IEBACiAgICAgICAgICAgICAgICAgbmV3ID0gbmV3ICsgYzsgaSA9IGkrMQogICAgICAgICAgICAgZWxpZiBpKzEgPT0gbiBhbmQgbm90IHBhcnRpYWw6CiAgICAgICAgICAgICAgICAgcGFydGlhbCA9IDE7IGJyZWFrCi0gICAgICAgICAgICBlbGlmIGkrMSA8IG4gYW5kIGxpbmVbaSsxXSA9PSBFU0NBUEU6CisgICAgICAgICAgICBlbGlmIGkrMSA8IG4gYW5kIGxpbmVbaSsxOmkrMl0gPT0gRVNDQVBFOgogICAgICAgICAgICAgICAgIG5ldyA9IG5ldyArIEVTQ0FQRTsgaSA9IGkrMgogICAgICAgICAgICAgZWxpZiBpKzIgPCBuIGFuZCBpc2hleChsaW5lW2krMTppKzJdKSBhbmQgaXNoZXgobGluZVtpKzI6aSszXSk6CiAgICAgICAgICAgICAgICAgbmV3ID0gbmV3ICsgYnl0ZXMoKHVuaGV4KGxpbmVbaSsxOmkrM10pLCkpOyBpID0gaSszCkBAIC0yMjMsNyArMjIxLDcgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBmcCA9IG9wZW4oZmlsZSwgInJiIikKLSAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIG1zZzoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIG1zZzoKICAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCIlczogY2FuJ3Qgb3BlbiAoJXMpXG4iICUgKGZpbGUsIG1zZykpCiAgICAgICAgICAgICAgICAgc3RzID0gMQogICAgICAgICAgICAgICAgIGNvbnRpbnVlCmRpZmYgLS1naXQgYS9MaWIvcmFuZG9tLnB5IGIvTGliL3JhbmRvbS5weQppbmRleCAxNGFjNWU1Li40NjQyOTI4IDEwMDY0NAotLS0gYS9MaWIvcmFuZG9tLnB5CisrKyBiL0xpYi9yYW5kb20ucHkKQEAgLTQxLDcgKzQxLDcgQEAKIGZyb20gbWF0aCBpbXBvcnQgbG9nIGFzIF9sb2csIGV4cCBhcyBfZXhwLCBwaSBhcyBfcGksIGUgYXMgX2UsIGNlaWwgYXMgX2NlaWwKIGZyb20gbWF0aCBpbXBvcnQgc3FydCBhcyBfc3FydCwgYWNvcyBhcyBfYWNvcywgY29zIGFzIF9jb3MsIHNpbiBhcyBfc2luCiBmcm9tIG9zIGltcG9ydCB1cmFuZG9tIGFzIF91cmFuZG9tCi1mcm9tIGNvbGxlY3Rpb25zLmFiYyBpbXBvcnQgU2V0IGFzIF9TZXQsIFNlcXVlbmNlIGFzIF9TZXF1ZW5jZQorZnJvbSBfY29sbGVjdGlvbnNfYWJjIGltcG9ydCBTZXQgYXMgX1NldCwgU2VxdWVuY2UgYXMgX1NlcXVlbmNlCiBmcm9tIGhhc2hsaWIgaW1wb3J0IHNoYTUxMiBhcyBfc2hhNTEyCiAKIF9fYWxsX18gPSBbIlJhbmRvbSIsInNlZWQiLCJyYW5kb20iLCJ1bmlmb3JtIiwicmFuZGludCIsImNob2ljZSIsInNhbXBsZSIsCkBAIC0xMDUsNyArMTA1LDkgQEAKIAogICAgICAgICBpZiBhIGlzIE5vbmU6CiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgYSA9IGludC5mcm9tX2J5dGVzKF91cmFuZG9tKDMyKSwgJ2JpZycpCisgICAgICAgICAgICAgICAgIyBTZWVkIHdpdGggZW5vdWdoIGJ5dGVzIHRvIHNwYW4gdGhlIDE5OTM3IGJpdAorICAgICAgICAgICAgICAgICMgc3RhdGUgc3BhY2UgZm9yIHRoZSBNZXJzZW5uZSBUd2lzdGVyCisgICAgICAgICAgICAgICAgYSA9IGludC5mcm9tX2J5dGVzKF91cmFuZG9tKDI1MDApLCAnYmlnJykKICAgICAgICAgICAgIGV4Y2VwdCBOb3RJbXBsZW1lbnRlZEVycm9yOgogICAgICAgICAgICAgICAgIGltcG9ydCB0aW1lCiAgICAgICAgICAgICAgICAgYSA9IGludCh0aW1lLnRpbWUoKSAqIDI1NikgIyB1c2UgZnJhY3Rpb25hbCBzZWNvbmRzCkBAIC0xNTEsNiArMTUzLDkgQEAKIAogIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gcGlja2xlIHN1cHBvcnQgIC0tLS0tLS0tLS0tLS0tLS0tLS0KIAorICAgICMgSXNzdWUgMTc0ODk6IFNpbmNlIF9fcmVkdWNlX18gd2FzIGRlZmluZWQgdG8gZml4ICM3NTk4ODkgdGhpcyBpcyBubworICAgICMgbG9uZ2VyIGNhbGxlZDsgd2UgbGVhdmUgaXQgaGVyZSBiZWNhdXNlIGl0IGhhcyBiZWVuIGhlcmUgc2luY2UgcmFuZG9tIHdhcworICAgICMgcmV3cml0dGVuIGJhY2sgaW4gMjAwMSBhbmQgd2h5IHJpc2sgYnJlYWtpbmcgc29tZXRoaW5nLgogICAgIGRlZiBfX2dldHN0YXRlX18oc2VsZik6ICMgZm9yIHBpY2tsZQogICAgICAgICByZXR1cm4gc2VsZi5nZXRzdGF0ZSgpCiAKQEAgLTIxNiwxMCArMjIxLDExIEBACiAgICAgICAgICAgICAgICAgICAgTWV0aG9kPV9NZXRob2RUeXBlLCBCdWlsdGluTWV0aG9kPV9CdWlsdGluTWV0aG9kVHlwZSk6CiAgICAgICAgICJSZXR1cm4gYSByYW5kb20gaW50IGluIHRoZSByYW5nZSBbMCxuKS4gIFJhaXNlcyBWYWx1ZUVycm9yIGlmIG49PTAuIgogCisgICAgICAgIHJhbmRvbSA9IHNlbGYucmFuZG9tCiAgICAgICAgIGdldHJhbmRiaXRzID0gc2VsZi5nZXRyYW5kYml0cwogICAgICAgICAjIE9ubHkgY2FsbCBzZWxmLmdldHJhbmRiaXRzIGlmIHRoZSBvcmlnaW5hbCByYW5kb20oKSBidWlsdGluIG1ldGhvZAogICAgICAgICAjIGhhcyBub3QgYmVlbiBvdmVycmlkZGVuIG9yIGlmIGEgbmV3IGdldHJhbmRiaXRzKCkgd2FzIHN1cHBsaWVkLgotICAgICAgICBpZiB0eXBlKHNlbGYucmFuZG9tKSBpcyBCdWlsdGluTWV0aG9kIG9yIHR5cGUoZ2V0cmFuZGJpdHMpIGlzIE1ldGhvZDoKKyAgICAgICAgaWYgdHlwZShyYW5kb20pIGlzIEJ1aWx0aW5NZXRob2Qgb3IgdHlwZShnZXRyYW5kYml0cykgaXMgTWV0aG9kOgogICAgICAgICAgICAgayA9IG4uYml0X2xlbmd0aCgpICAjIGRvbid0IHVzZSAobi0xKSBoZXJlIGJlY2F1c2UgbiBjYW4gYmUgMQogICAgICAgICAgICAgciA9IGdldHJhbmRiaXRzKGspICAgICAgICAgICMgMCA8PSByIDwgMioqawogICAgICAgICAgICAgd2hpbGUgciA+PSBuOgpAQCAtMjI3LDcgKzIzMyw2IEBACiAgICAgICAgICAgICByZXR1cm4gcgogICAgICAgICAjIFRoZXJlJ3MgYW4gb3ZlcnJpZGVuIHJhbmRvbSgpIG1ldGhvZCBidXQgbm8gbmV3IGdldHJhbmRiaXRzKCkgbWV0aG9kLAogICAgICAgICAjIHNvIHdlIGNhbiBvbmx5IHVzZSByYW5kb20oKSBmcm9tIGhlcmUuCi0gICAgICAgIHJhbmRvbSA9IHNlbGYucmFuZG9tCiAgICAgICAgIGlmIG4gPj0gbWF4c2l6ZToKICAgICAgICAgICAgIF93YXJuKCJVbmRlcmx5aW5nIHJhbmRvbSgpIGdlbmVyYXRvciBkb2VzIG5vdCBzdXBwbHkgXG4iCiAgICAgICAgICAgICAgICAgImVub3VnaCBiaXRzIHRvIGNob29zZSBmcm9tIGEgcG9wdWxhdGlvbiByYW5nZSB0aGlzIGxhcmdlLlxuIgpAQCAtMjUxLDEwICsyNTYsMTEgQEAKICAgICAgICAgcmV0dXJuIHNlcVtpXQogCiAgICAgZGVmIHNodWZmbGUoc2VsZiwgeCwgcmFuZG9tPU5vbmUpOgotICAgICAgICAiIiJ4LCByYW5kb209cmFuZG9tLnJhbmRvbSAtPiBzaHVmZmxlIGxpc3QgeCBpbiBwbGFjZTsgcmV0dXJuIE5vbmUuCisgICAgICAgICIiIlNodWZmbGUgbGlzdCB4IGluIHBsYWNlLCBhbmQgcmV0dXJuIE5vbmUuCiAKLSAgICAgICAgT3B0aW9uYWwgYXJnIHJhbmRvbSBpcyBhIDAtYXJndW1lbnQgZnVuY3Rpb24gcmV0dXJuaW5nIGEgcmFuZG9tCi0gICAgICAgIGZsb2F0IGluIFswLjAsIDEuMCk7IGJ5IGRlZmF1bHQsIHRoZSBzdGFuZGFyZCByYW5kb20ucmFuZG9tLgorICAgICAgICBPcHRpb25hbCBhcmd1bWVudCByYW5kb20gaXMgYSAwLWFyZ3VtZW50IGZ1bmN0aW9uIHJldHVybmluZyBhCisgICAgICAgIHJhbmRvbSBmbG9hdCBpbiBbMC4wLCAxLjApOyBpZiBpdCBpcyB0aGUgZGVmYXVsdCBOb25lLCB0aGUKKyAgICAgICAgc3RhbmRhcmQgcmFuZG9tLnJhbmRvbSB3aWxsIGJlIHVzZWQuCiAKICAgICAgICAgIiIiCiAKQEAgLTM0OSw3ICszNTUsMTAgQEAKIAogICAgICAgICAiIiIKICAgICAgICAgdSA9IHNlbGYucmFuZG9tKCkKLSAgICAgICAgYyA9IDAuNSBpZiBtb2RlIGlzIE5vbmUgZWxzZSAobW9kZSAtIGxvdykgLyAoaGlnaCAtIGxvdykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYyA9IDAuNSBpZiBtb2RlIGlzIE5vbmUgZWxzZSAobW9kZSAtIGxvdykgLyAoaGlnaCAtIGxvdykKKyAgICAgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yOgorICAgICAgICAgICAgcmV0dXJuIGxvdwogICAgICAgICBpZiB1ID4gYzoKICAgICAgICAgICAgIHUgPSAxLjAgLSB1CiAgICAgICAgICAgICBjID0gMS4wIC0gYwpkaWZmIC0tZ2l0IGEvTGliL3JlLnB5IGIvTGliL3JlLnB5CmluZGV4IGE0NmVjYzguLjE5OWFmZWUgMTAwNjQ0Ci0tLSBhL0xpYi9yZS5weQorKysgYi9MaWIvcmUucHkKQEAgLTg1LDE2ICs4NSwxNyBAQAogICAgIFxcICAgICAgIE1hdGNoZXMgYSBsaXRlcmFsIGJhY2tzbGFzaC4KIAogVGhpcyBtb2R1bGUgZXhwb3J0cyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKLSAgICBtYXRjaCAgICBNYXRjaCBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBwYXR0ZXJuIHRvIHRoZSBiZWdpbm5pbmcgb2YgYSBzdHJpbmcuCi0gICAgc2VhcmNoICAgU2VhcmNoIGEgc3RyaW5nIGZvciB0aGUgcHJlc2VuY2Ugb2YgYSBwYXR0ZXJuLgotICAgIHN1YiAgICAgIFN1YnN0aXR1dGUgb2NjdXJyZW5jZXMgb2YgYSBwYXR0ZXJuIGZvdW5kIGluIGEgc3RyaW5nLgotICAgIHN1Ym4gICAgIFNhbWUgYXMgc3ViLCBidXQgYWxzbyByZXR1cm4gdGhlIG51bWJlciBvZiBzdWJzdGl0dXRpb25zIG1hZGUuCi0gICAgc3BsaXQgICAgU3BsaXQgYSBzdHJpbmcgYnkgdGhlIG9jY3VycmVuY2VzIG9mIGEgcGF0dGVybi4KLSAgICBmaW5kYWxsICBGaW5kIGFsbCBvY2N1cnJlbmNlcyBvZiBhIHBhdHRlcm4gaW4gYSBzdHJpbmcuCi0gICAgZmluZGl0ZXIgUmV0dXJuIGFuIGl0ZXJhdG9yIHlpZWxkaW5nIGEgbWF0Y2ggb2JqZWN0IGZvciBlYWNoIG1hdGNoLgotICAgIGNvbXBpbGUgIENvbXBpbGUgYSBwYXR0ZXJuIGludG8gYSBSZWdleE9iamVjdC4KLSAgICBwdXJnZSAgICBDbGVhciB0aGUgcmVndWxhciBleHByZXNzaW9uIGNhY2hlLgotICAgIGVzY2FwZSAgIEJhY2tzbGFzaCBhbGwgbm9uLWFscGhhbnVtZXJpY3MgaW4gYSBzdHJpbmcuCisgICAgbWF0Y2ggICAgIE1hdGNoIGEgcmVndWxhciBleHByZXNzaW9uIHBhdHRlcm4gdG8gdGhlIGJlZ2lubmluZyBvZiBhIHN0cmluZy4KKyAgICBmdWxsbWF0Y2ggTWF0Y2ggYSByZWd1bGFyIGV4cHJlc3Npb24gcGF0dGVybiB0byBhbGwgb2YgYSBzdHJpbmcuCisgICAgc2VhcmNoICAgIFNlYXJjaCBhIHN0cmluZyBmb3IgdGhlIHByZXNlbmNlIG9mIGEgcGF0dGVybi4KKyAgICBzdWIgICAgICAgU3Vic3RpdHV0ZSBvY2N1cnJlbmNlcyBvZiBhIHBhdHRlcm4gZm91bmQgaW4gYSBzdHJpbmcuCisgICAgc3VibiAgICAgIFNhbWUgYXMgc3ViLCBidXQgYWxzbyByZXR1cm4gdGhlIG51bWJlciBvZiBzdWJzdGl0dXRpb25zIG1hZGUuCisgICAgc3BsaXQgICAgIFNwbGl0IGEgc3RyaW5nIGJ5IHRoZSBvY2N1cnJlbmNlcyBvZiBhIHBhdHRlcm4uCisgICAgZmluZGFsbCAgIEZpbmQgYWxsIG9jY3VycmVuY2VzIG9mIGEgcGF0dGVybiBpbiBhIHN0cmluZy4KKyAgICBmaW5kaXRlciAgUmV0dXJuIGFuIGl0ZXJhdG9yIHlpZWxkaW5nIGEgbWF0Y2ggb2JqZWN0IGZvciBlYWNoIG1hdGNoLgorICAgIGNvbXBpbGUgICBDb21waWxlIGEgcGF0dGVybiBpbnRvIGEgUmVnZXhPYmplY3QuCisgICAgcHVyZ2UgICAgIENsZWFyIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gY2FjaGUuCisgICAgZXNjYXBlICAgIEJhY2tzbGFzaCBhbGwgbm9uLWFscGhhbnVtZXJpY3MgaW4gYSBzdHJpbmcuCiAKIFNvbWUgb2YgdGhlIGZ1bmN0aW9ucyBpbiB0aGlzIG1vZHVsZSB0YWtlcyBmbGFncyBhcyBvcHRpb25hbCBwYXJhbWV0ZXJzOgogICAgIEEgIEFTQ0lJICAgICAgIEZvciBzdHJpbmcgcGF0dGVybnMsIG1ha2UgXHcsIFxXLCBcYiwgXEIsIFxkLCBcRApAQCAtMTIxLDEwICsxMjIsMTMgQEAKIGltcG9ydCBzeXMKIGltcG9ydCBzcmVfY29tcGlsZQogaW1wb3J0IHNyZV9wYXJzZQotaW1wb3J0IGZ1bmN0b29scwordHJ5OgorICAgIGltcG9ydCBfbG9jYWxlCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgX2xvY2FsZSA9IE5vbmUKIAogIyBwdWJsaWMgc3ltYm9scwotX19hbGxfXyA9IFsgIm1hdGNoIiwgInNlYXJjaCIsICJzdWIiLCAic3VibiIsICJzcGxpdCIsICJmaW5kYWxsIiwKK19fYWxsX18gPSBbICJtYXRjaCIsICJmdWxsbWF0Y2giLCAic2VhcmNoIiwgInN1YiIsICJzdWJuIiwgInNwbGl0IiwgImZpbmRhbGwiLAogICAgICJjb21waWxlIiwgInB1cmdlIiwgInRlbXBsYXRlIiwgImVzY2FwZSIsICJBIiwgIkkiLCAiTCIsICJNIiwgIlMiLCAiWCIsCiAgICAgIlUiLCAiQVNDSUkiLCAiSUdOT1JFQ0FTRSIsICJMT0NBTEUiLCAiTVVMVElMSU5FIiwgIkRPVEFMTCIsICJWRVJCT1NFIiwKICAgICAiVU5JQ09ERSIsICJlcnJvciIgXQpAQCAtMTU1LDYgKzE1OSwxMSBAQAogICAgIGEgbWF0Y2ggb2JqZWN0LCBvciBOb25lIGlmIG5vIG1hdGNoIHdhcyBmb3VuZC4iIiIKICAgICByZXR1cm4gX2NvbXBpbGUocGF0dGVybiwgZmxhZ3MpLm1hdGNoKHN0cmluZykKIAorZGVmIGZ1bGxtYXRjaChwYXR0ZXJuLCBzdHJpbmcsIGZsYWdzPTApOgorICAgICIiIlRyeSB0byBhcHBseSB0aGUgcGF0dGVybiB0byBhbGwgb2YgdGhlIHN0cmluZywgcmV0dXJuaW5nCisgICAgYSBtYXRjaCBvYmplY3QsIG9yIE5vbmUgaWYgbm8gbWF0Y2ggd2FzIGZvdW5kLiIiIgorICAgIHJldHVybiBfY29tcGlsZShwYXR0ZXJuLCBmbGFncykuZnVsbG1hdGNoKHN0cmluZykKKwogZGVmIHNlYXJjaChwYXR0ZXJuLCBzdHJpbmcsIGZsYWdzPTApOgogICAgICIiIlNjYW4gdGhyb3VnaCBzdHJpbmcgbG9va2luZyBmb3IgYSBtYXRjaCB0byB0aGUgcGF0dGVybiwgcmV0dXJuaW5nCiAgICAgYSBtYXRjaCBvYmplY3QsIG9yIE5vbmUgaWYgbm8gbWF0Y2ggd2FzIGZvdW5kLiIiIgpAQCAtMjcwLDcgKzI3OSw5IEBACiAgICAgYnlwYXNzX2NhY2hlID0gZmxhZ3MgJiBERUJVRwogICAgIGlmIG5vdCBieXBhc3NfY2FjaGU6CiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHJldHVybiBfY2FjaGVbdHlwZShwYXR0ZXJuKSwgcGF0dGVybiwgZmxhZ3NdCisgICAgICAgICAgICBwLCBsb2MgPSBfY2FjaGVbdHlwZShwYXR0ZXJuKSwgcGF0dGVybiwgZmxhZ3NdCisgICAgICAgICAgICBpZiBsb2MgaXMgTm9uZSBvciBsb2MgPT0gX2xvY2FsZS5zZXRsb2NhbGUoX2xvY2FsZS5MQ19DVFlQRSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHAKICAgICAgICAgZXhjZXB0IEtleUVycm9yOgogICAgICAgICAgICAgcGFzcwogICAgIGlmIGlzaW5zdGFuY2UocGF0dGVybiwgX3BhdHRlcm5fdHlwZSk6CkBAIC0yODQsNyArMjk1LDEzIEBACiAgICAgaWYgbm90IGJ5cGFzc19jYWNoZToKICAgICAgICAgaWYgbGVuKF9jYWNoZSkgPj0gX01BWENBQ0hFOgogICAgICAgICAgICAgX2NhY2hlLmNsZWFyKCkKLSAgICAgICAgX2NhY2hlW3R5cGUocGF0dGVybiksIHBhdHRlcm4sIGZsYWdzXSA9IHAKKyAgICAgICAgaWYgcC5mbGFncyAmIExPQ0FMRToKKyAgICAgICAgICAgIGlmIG5vdCBfbG9jYWxlOgorICAgICAgICAgICAgICAgIHJldHVybiBwCisgICAgICAgICAgICBsb2MgPSBfbG9jYWxlLnNldGxvY2FsZShfbG9jYWxlLkxDX0NUWVBFKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9jID0gTm9uZQorICAgICAgICBfY2FjaGVbdHlwZShwYXR0ZXJuKSwgcGF0dGVybiwgZmxhZ3NdID0gcCwgbG9jCiAgICAgcmV0dXJuIHAKIAogZGVmIF9jb21waWxlX3JlcGwocmVwbCwgcGF0dGVybik6CmRpZmYgLS1naXQgYS9MaWIvcmxjb21wbGV0ZXIucHkgYi9MaWIvcmxjb21wbGV0ZXIucHkKaW5kZXggM2Y5NzA1My4uMzc4ZjVhYSAxMDA2NDQKLS0tIGEvTGliL3JsY29tcGxldGVyLnB5CisrKyBiL0xpYi9ybGNvbXBsZXRlci5weQpAQCAtMjksNiArMjksNyBAQAogCiAiIiIKIAoraW1wb3J0IGF0ZXhpdAogaW1wb3J0IGJ1aWx0aW5zCiBpbXBvcnQgX19tYWluX18KIApAQCAtNzIsNiArNzMsMTIgQEAKICAgICAgICAgaWYgc2VsZi51c2VfbWFpbl9uczoKICAgICAgICAgICAgIHNlbGYubmFtZXNwYWNlID0gX19tYWluX18uX19kaWN0X18KIAorICAgICAgICBpZiBub3QgdGV4dC5zdHJpcCgpOgorICAgICAgICAgICAgaWYgc3RhdGUgPT0gMDoKKyAgICAgICAgICAgICAgICByZXR1cm4gJ1x0JworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorCiAgICAgICAgIGlmIHN0YXRlID09IDA6CiAgICAgICAgICAgICBpZiAiLiIgaW4gdGV4dDoKICAgICAgICAgICAgICAgICBzZWxmLm1hdGNoZXMgPSBzZWxmLmF0dHJfbWF0Y2hlcyh0ZXh0KQpAQCAtOTYsMTMgKzEwMywxNiBAQAogICAgICAgICAiIiIKICAgICAgICAgaW1wb3J0IGtleXdvcmQKICAgICAgICAgbWF0Y2hlcyA9IFtdCisgICAgICAgIHNlZW4gPSB7Il9fYnVpbHRpbnNfXyJ9CiAgICAgICAgIG4gPSBsZW4odGV4dCkKICAgICAgICAgZm9yIHdvcmQgaW4ga2V5d29yZC5rd2xpc3Q6CiAgICAgICAgICAgICBpZiB3b3JkWzpuXSA9PSB0ZXh0OgorICAgICAgICAgICAgICAgIHNlZW4uYWRkKHdvcmQpCiAgICAgICAgICAgICAgICAgbWF0Y2hlcy5hcHBlbmQod29yZCkKLSAgICAgICAgZm9yIG5zcGFjZSBpbiBbYnVpbHRpbnMuX19kaWN0X18sIHNlbGYubmFtZXNwYWNlXToKKyAgICAgICAgZm9yIG5zcGFjZSBpbiBbc2VsZi5uYW1lc3BhY2UsIGJ1aWx0aW5zLl9fZGljdF9fXToKICAgICAgICAgICAgIGZvciB3b3JkLCB2YWwgaW4gbnNwYWNlLml0ZW1zKCk6Ci0gICAgICAgICAgICAgICAgaWYgd29yZFs6bl0gPT0gdGV4dCBhbmQgd29yZCAhPSAiX19idWlsdGluc19fIjoKKyAgICAgICAgICAgICAgICBpZiB3b3JkWzpuXSA9PSB0ZXh0IGFuZCB3b3JkIG5vdCBpbiBzZWVuOgorICAgICAgICAgICAgICAgICAgICBzZWVuLmFkZCh3b3JkKQogICAgICAgICAgICAgICAgICAgICBtYXRjaGVzLmFwcGVuZChzZWxmLl9jYWxsYWJsZV9wb3N0Zml4KHZhbCwgd29yZCkpCiAgICAgICAgIHJldHVybiBtYXRjaGVzCiAKQEAgLTEyOSwyMCArMTM5LDIzIEBACiAgICAgICAgICAgICByZXR1cm4gW10KIAogICAgICAgICAjIGdldCB0aGUgY29udGVudCBvZiB0aGUgb2JqZWN0LCBleGNlcHQgX19idWlsdGluc19fCi0gICAgICAgIHdvcmRzID0gZGlyKHRoaXNvYmplY3QpCi0gICAgICAgIGlmICJfX2J1aWx0aW5zX18iIGluIHdvcmRzOgotICAgICAgICAgICAgd29yZHMucmVtb3ZlKCJfX2J1aWx0aW5zX18iKQorICAgICAgICB3b3JkcyA9IHNldChkaXIodGhpc29iamVjdCkpCisgICAgICAgIHdvcmRzLmRpc2NhcmQoIl9fYnVpbHRpbnNfXyIpCiAKICAgICAgICAgaWYgaGFzYXR0cih0aGlzb2JqZWN0LCAnX19jbGFzc19fJyk6Ci0gICAgICAgICAgICB3b3Jkcy5hcHBlbmQoJ19fY2xhc3NfXycpCi0gICAgICAgICAgICB3b3Jkcy5leHRlbmQoZ2V0X2NsYXNzX21lbWJlcnModGhpc29iamVjdC5fX2NsYXNzX18pKQorICAgICAgICAgICAgd29yZHMuYWRkKCdfX2NsYXNzX18nKQorICAgICAgICAgICAgd29yZHMudXBkYXRlKGdldF9jbGFzc19tZW1iZXJzKHRoaXNvYmplY3QuX19jbGFzc19fKSkKICAgICAgICAgbWF0Y2hlcyA9IFtdCiAgICAgICAgIG4gPSBsZW4oYXR0cikKICAgICAgICAgZm9yIHdvcmQgaW4gd29yZHM6Ci0gICAgICAgICAgICBpZiB3b3JkWzpuXSA9PSBhdHRyIGFuZCBoYXNhdHRyKHRoaXNvYmplY3QsIHdvcmQpOgotICAgICAgICAgICAgICAgIHZhbCA9IGdldGF0dHIodGhpc29iamVjdCwgd29yZCkKKyAgICAgICAgICAgIGlmIHdvcmRbOm5dID09IGF0dHI6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICB2YWwgPSBnZXRhdHRyKHRoaXNvYmplY3QsIHdvcmQpCisgICAgICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUgICMgRXhjbHVkZSBwcm9wZXJ0aWVzIHRoYXQgYXJlIG5vdCBzZXQKICAgICAgICAgICAgICAgICB3b3JkID0gc2VsZi5fY2FsbGFibGVfcG9zdGZpeCh2YWwsICIlcy4lcyIgJSAoZXhwciwgd29yZCkpCiAgICAgICAgICAgICAgICAgbWF0Y2hlcy5hcHBlbmQod29yZCkKKyAgICAgICAgbWF0Y2hlcy5zb3J0KCkKICAgICAgICAgcmV0dXJuIG1hdGNoZXMKIAogZGVmIGdldF9jbGFzc19tZW1iZXJzKGtsYXNzKToKQEAgLTE1OCwzICsxNzEsNyBAQAogICAgIHBhc3MKIGVsc2U6CiAgICAgcmVhZGxpbmUuc2V0X2NvbXBsZXRlcihDb21wbGV0ZXIoKS5jb21wbGV0ZSkKKyAgICAjIFJlbGVhc2UgcmVmZXJlbmNlcyBlYXJseSBhdCBzaHV0ZG93biAodGhlIHJlYWRsaW5lIG1vZHVsZSdzCisgICAgIyBjb250ZW50cyBhcmUgcXVhc2ktaW1tb3J0YWwsIGFuZCB0aGUgY29tcGxldGVyIGZ1bmN0aW9uIGhvbGRzIGEKKyAgICAjIHJlZmVyZW5jZSB0byBnbG9iYWxzKS4KKyAgICBhdGV4aXQucmVnaXN0ZXIobGFtYmRhOiByZWFkbGluZS5zZXRfY29tcGxldGVyKE5vbmUpKQpkaWZmIC0tZ2l0IGEvTGliL3J1bnB5LnB5IGIvTGliL3J1bnB5LnB5CmluZGV4IDM5YzBlOWYuLjBiYjU3ZDcgMTAwNjQ0Ci0tLSBhL0xpYi9ydW5weS5weQorKysgYi9MaWIvcnVucHkucHkKQEAgLTEwLDExICsxMCwxMSBAQAogIyAgICB0byBpbXBsZW1lbnQgUEVQIDMzOCAoRXhlY3V0aW5nIE1vZHVsZXMgYXMgU2NyaXB0cykKIAogCi1pbXBvcnQgb3MKIGltcG9ydCBzeXMKIGltcG9ydCBpbXBvcnRsaWIubWFjaGluZXJ5ICMgaW1wb3J0bGliIGZpcnN0IHNvIHdlIGNhbiB0ZXN0ICMxNTM4NiB2aWEgLW0KLWltcG9ydCBpbXAKLWZyb20gcGtndXRpbCBpbXBvcnQgcmVhZF9jb2RlLCBnZXRfbG9hZGVyLCBnZXRfaW1wb3J0ZXIKK2ltcG9ydCBpbXBvcnRsaWIudXRpbAoraW1wb3J0IHR5cGVzCitmcm9tIHBrZ3V0aWwgaW1wb3J0IHJlYWRfY29kZSwgZ2V0X2ltcG9ydGVyCiAKIF9fYWxsX18gPSBbCiAgICAgInJ1bl9tb2R1bGUiLCAicnVuX3BhdGgiLApAQCAtMjQsNyArMjQsNyBAQAogICAgICIiIlRlbXBvcmFyaWx5IHJlcGxhY2UgYSBtb2R1bGUgaW4gc3lzLm1vZHVsZXMgd2l0aCBhbiBlbXB0eSBuYW1lc3BhY2UiIiIKICAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kX25hbWUpOgogICAgICAgICBzZWxmLm1vZF9uYW1lID0gbW9kX25hbWUKLSAgICAgICAgc2VsZi5tb2R1bGUgPSBpbXAubmV3X21vZHVsZShtb2RfbmFtZSkKKyAgICAgICAgc2VsZi5tb2R1bGUgPSB0eXBlcy5Nb2R1bGVUeXBlKG1vZF9uYW1lKQogICAgICAgICBzZWxmLl9zYXZlZF9tb2R1bGUgPSBbXQogCiAgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKQEAgLTU4LDUxICs1OCw1OSBAQAogICAgICAgICBzZWxmLnZhbHVlID0gc2VsZi5fc2VudGluZWwKICAgICAgICAgc3lzLmFyZ3ZbMF0gPSBzZWxmLl9zYXZlZF92YWx1ZQogCisjIFRPRE86IFJlcGxhY2UgdGhlc2UgaGVscGVycyB3aXRoIGltcG9ydGxpYi5fYm9vdHN0cmFwLl9TcGVjTWV0aG9kcwogZGVmIF9ydW5fY29kZShjb2RlLCBydW5fZ2xvYmFscywgaW5pdF9nbG9iYWxzPU5vbmUsCi0gICAgICAgICAgICAgIG1vZF9uYW1lPU5vbmUsIG1vZF9mbmFtZT1Ob25lLAotICAgICAgICAgICAgICBtb2RfbG9hZGVyPU5vbmUsIHBrZ19uYW1lPU5vbmUpOgorICAgICAgICAgICAgICBtb2RfbmFtZT1Ob25lLCBtb2Rfc3BlYz1Ob25lLAorICAgICAgICAgICAgICBwa2dfbmFtZT1Ob25lLCBzY3JpcHRfbmFtZT1Ob25lKToKICAgICAiIiJIZWxwZXIgdG8gcnVuIGNvZGUgaW4gbm9taW5hdGVkIG5hbWVzcGFjZSIiIgogICAgIGlmIGluaXRfZ2xvYmFscyBpcyBub3QgTm9uZToKICAgICAgICAgcnVuX2dsb2JhbHMudXBkYXRlKGluaXRfZ2xvYmFscykKKyAgICBpZiBtb2Rfc3BlYyBpcyBOb25lOgorICAgICAgICBsb2FkZXIgPSBOb25lCisgICAgICAgIGZuYW1lID0gc2NyaXB0X25hbWUKKyAgICAgICAgY2FjaGVkID0gTm9uZQorICAgIGVsc2U6CisgICAgICAgIGxvYWRlciA9IG1vZF9zcGVjLmxvYWRlcgorICAgICAgICBmbmFtZSA9IG1vZF9zcGVjLm9yaWdpbgorICAgICAgICBjYWNoZWQgPSBtb2Rfc3BlYy5jYWNoZWQKKyAgICAgICAgaWYgcGtnX25hbWUgaXMgTm9uZToKKyAgICAgICAgICAgIHBrZ19uYW1lID0gbW9kX3NwZWMucGFyZW50CiAgICAgcnVuX2dsb2JhbHMudXBkYXRlKF9fbmFtZV9fID0gbW9kX25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgIF9fZmlsZV9fID0gbW9kX2ZuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICBfX2NhY2hlZF9fID0gTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgX19maWxlX18gPSBmbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgX19jYWNoZWRfXyA9IGNhY2hlZCwKICAgICAgICAgICAgICAgICAgICAgICAgX19kb2NfXyA9IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgIF9fbG9hZGVyX18gPSBtb2RfbG9hZGVyLAotICAgICAgICAgICAgICAgICAgICAgICBfX3BhY2thZ2VfXyA9IHBrZ19uYW1lKQorICAgICAgICAgICAgICAgICAgICAgICBfX2xvYWRlcl9fID0gbG9hZGVyLAorICAgICAgICAgICAgICAgICAgICAgICBfX3BhY2thZ2VfXyA9IHBrZ19uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICBfX3NwZWNfXyA9IG1vZF9zcGVjKQogICAgIGV4ZWMoY29kZSwgcnVuX2dsb2JhbHMpCiAgICAgcmV0dXJuIHJ1bl9nbG9iYWxzCiAKIGRlZiBfcnVuX21vZHVsZV9jb2RlKGNvZGUsIGluaXRfZ2xvYmFscz1Ob25lLAotICAgICAgICAgICAgICAgICAgICBtb2RfbmFtZT1Ob25lLCBtb2RfZm5hbWU9Tm9uZSwKLSAgICAgICAgICAgICAgICAgICAgbW9kX2xvYWRlcj1Ob25lLCBwa2dfbmFtZT1Ob25lKToKKyAgICAgICAgICAgICAgICAgICAgbW9kX25hbWU9Tm9uZSwgbW9kX3NwZWM9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgcGtnX25hbWU9Tm9uZSwgc2NyaXB0X25hbWU9Tm9uZSk6CiAgICAgIiIiSGVscGVyIHRvIHJ1biBjb2RlIGluIG5ldyBuYW1lc3BhY2Ugd2l0aCBzeXMgbW9kaWZpZWQiIiIKLSAgICB3aXRoIF9UZW1wTW9kdWxlKG1vZF9uYW1lKSBhcyB0ZW1wX21vZHVsZSwgX01vZGlmaWVkQXJndjAobW9kX2ZuYW1lKToKKyAgICBmbmFtZSA9IHNjcmlwdF9uYW1lIGlmIG1vZF9zcGVjIGlzIE5vbmUgZWxzZSBtb2Rfc3BlYy5vcmlnaW4KKyAgICB3aXRoIF9UZW1wTW9kdWxlKG1vZF9uYW1lKSBhcyB0ZW1wX21vZHVsZSwgX01vZGlmaWVkQXJndjAoZm5hbWUpOgogICAgICAgICBtb2RfZ2xvYmFscyA9IHRlbXBfbW9kdWxlLm1vZHVsZS5fX2RpY3RfXwogICAgICAgICBfcnVuX2NvZGUoY29kZSwgbW9kX2dsb2JhbHMsIGluaXRfZ2xvYmFscywKLSAgICAgICAgICAgICAgICAgIG1vZF9uYW1lLCBtb2RfZm5hbWUsIG1vZF9sb2FkZXIsIHBrZ19uYW1lKQorICAgICAgICAgICAgICAgICAgbW9kX25hbWUsIG1vZF9zcGVjLCBwa2dfbmFtZSwgc2NyaXB0X25hbWUpCiAgICAgIyBDb3B5IHRoZSBnbG9iYWxzIG9mIHRoZSB0ZW1wb3JhcnkgbW9kdWxlLCBhcyB0aGV5CiAgICAgIyBtYXkgYmUgY2xlYXJlZCB3aGVuIHRoZSB0ZW1wb3JhcnkgbW9kdWxlIGdvZXMgYXdheQogICAgIHJldHVybiBtb2RfZ2xvYmFscy5jb3B5KCkKIAotCi0jIFRoaXMgaGVscGVyIGlzIG5lZWRlZCBkdWUgdG8gYSBtaXNzaW5nIGNvbXBvbmVudCBpbiB0aGUgUEVQIDMwMgotIyBsb2FkZXIgcHJvdG9jb2wgKHNwZWNpZmljYWxseSwgImdldF9maWxlbmFtZSIgaXMgbm9uLXN0YW5kYXJkKQotIyBTaW5jZSB3ZSBjYW4ndCBpbnRyb2R1Y2UgbmV3IGZlYXR1cmVzIGluIG1haW50ZW5hbmNlIHJlbGVhc2VzLAotIyBzdXBwb3J0IHdhcyBhZGRlZCB0byB6aXBpbXBvcnRlciB1bmRlciB0aGUgbmFtZSAnX2dldF9maWxlbmFtZScKLWRlZiBfZ2V0X2ZpbGVuYW1lKGxvYWRlciwgbW9kX25hbWUpOgotICAgIGZvciBhdHRyIGluICgiZ2V0X2ZpbGVuYW1lIiwgIl9nZXRfZmlsZW5hbWUiKToKLSAgICAgICAgbWV0aCA9IGdldGF0dHIobG9hZGVyLCBhdHRyLCBOb25lKQotICAgICAgICBpZiBtZXRoIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgcmV0dXJuIG9zLnBhdGguYWJzcGF0aChtZXRoKG1vZF9uYW1lKSkKLSAgICByZXR1cm4gTm9uZQotCiAjIEhlbHBlciB0byBnZXQgdGhlIGxvYWRlciwgY29kZSBhbmQgZmlsZW5hbWUgZm9yIGEgbW9kdWxlCiBkZWYgX2dldF9tb2R1bGVfZGV0YWlscyhtb2RfbmFtZSk6Ci0gICAgbG9hZGVyID0gZ2V0X2xvYWRlcihtb2RfbmFtZSkKLSAgICBpZiBsb2FkZXIgaXMgTm9uZToKKyAgICB0cnk6CisgICAgICAgIHNwZWMgPSBpbXBvcnRsaWIudXRpbC5maW5kX3NwZWMobW9kX25hbWUpCisgICAgZXhjZXB0IChJbXBvcnRFcnJvciwgQXR0cmlidXRlRXJyb3IsIFR5cGVFcnJvciwgVmFsdWVFcnJvcikgYXMgZXg6CisgICAgICAgICMgVGhpcyBoYWNrIGZpeGVzIGFuIGltcGVkYW5jZSBtaXNtYXRjaCBiZXR3ZWVuIHBrZ3V0aWwgYW5kCisgICAgICAgICMgaW1wb3J0bGliLCB3aGVyZSB0aGUgbGF0dGVyIHJhaXNlcyBvdGhlciBlcnJvcnMgZm9yIGNhc2VzIHdoZXJlCisgICAgICAgICMgcGtndXRpbCBwcmV2aW91c2x5IHJhaXNlZCBJbXBvcnRFcnJvcgorICAgICAgICBtc2cgPSAiRXJyb3Igd2hpbGUgZmluZGluZyBzcGVjIGZvciB7IXJ9ICh7fToge30pIgorICAgICAgICByYWlzZSBJbXBvcnRFcnJvcihtc2cuZm9ybWF0KG1vZF9uYW1lLCB0eXBlKGV4KSwgZXgpKSBmcm9tIGV4CisgICAgaWYgc3BlYyBpcyBOb25lOgogICAgICAgICByYWlzZSBJbXBvcnRFcnJvcigiTm8gbW9kdWxlIG5hbWVkICVzIiAlIG1vZF9uYW1lKQotICAgIGlmIGxvYWRlci5pc19wYWNrYWdlKG1vZF9uYW1lKToKKyAgICBpZiBzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zIGlzIG5vdCBOb25lOgogICAgICAgICBpZiBtb2RfbmFtZSA9PSAiX19tYWluX18iIG9yIG1vZF9uYW1lLmVuZHN3aXRoKCIuX19tYWluX18iKToKICAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCJDYW5ub3QgdXNlIHBhY2thZ2UgYXMgX19tYWluX18gbW9kdWxlIikKICAgICAgICAgdHJ5OgpAQCAtMTExLDExICsxMTksMTQgQEAKICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yIGFzIGU6CiAgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcigoIiVzOyAlciBpcyBhIHBhY2thZ2UgYW5kIGNhbm5vdCAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmUgZGlyZWN0bHkgZXhlY3V0ZWQiKSAlKGUsIG1vZF9uYW1lKSkKKyAgICBsb2FkZXIgPSBzcGVjLmxvYWRlcgorICAgIGlmIGxvYWRlciBpcyBOb25lOgorICAgICAgICByYWlzZSBJbXBvcnRFcnJvcigiJXIgaXMgYSBuYW1lc3BhY2UgcGFja2FnZSBhbmQgY2Fubm90IGJlIGV4ZWN1dGVkIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIG1vZF9uYW1lKQogICAgIGNvZGUgPSBsb2FkZXIuZ2V0X2NvZGUobW9kX25hbWUpCiAgICAgaWYgY29kZSBpcyBOb25lOgogICAgICAgICByYWlzZSBJbXBvcnRFcnJvcigiTm8gY29kZSBvYmplY3QgYXZhaWxhYmxlIGZvciAlcyIgJSBtb2RfbmFtZSkKLSAgICBmaWxlbmFtZSA9IF9nZXRfZmlsZW5hbWUobG9hZGVyLCBtb2RfbmFtZSkKLSAgICByZXR1cm4gbW9kX25hbWUsIGxvYWRlciwgY29kZSwgZmlsZW5hbWUKKyAgICByZXR1cm4gbW9kX25hbWUsIHNwZWMsIGNvZGUKIAogIyBYWFggbmNvZ2hsYW46IFNob3VsZCB0aGlzIGJlIGRvY3VtZW50ZWQgYW5kIG1hZGUgcHVibGljPwogIyAoQ3VycmVudCB0aG91Z2h0czogZG9uJ3QgcmVwZWF0IHRoZSBtaXN0YWtlIHRoYXQgbGVhZCB0byBpdHMKQEAgLTEzNyw5ICsxNDgsOSBAQAogICAgICIiIgogICAgIHRyeToKICAgICAgICAgaWYgYWx0ZXJfYXJndiBvciBtb2RfbmFtZSAhPSAiX19tYWluX18iOiAjIGkuZS4gLW0gc3dpdGNoCi0gICAgICAgICAgICBtb2RfbmFtZSwgbG9hZGVyLCBjb2RlLCBmbmFtZSA9IF9nZXRfbW9kdWxlX2RldGFpbHMobW9kX25hbWUpCisgICAgICAgICAgICBtb2RfbmFtZSwgbW9kX3NwZWMsIGNvZGUgPSBfZ2V0X21vZHVsZV9kZXRhaWxzKG1vZF9uYW1lKQogICAgICAgICBlbHNlOiAgICAgICAgICAjIGkuZS4gZGlyZWN0b3J5IG9yIHppcGZpbGUgZXhlY3V0aW9uCi0gICAgICAgICAgICBtb2RfbmFtZSwgbG9hZGVyLCBjb2RlLCBmbmFtZSA9IF9nZXRfbWFpbl9tb2R1bGVfZGV0YWlscygpCisgICAgICAgICAgICBtb2RfbmFtZSwgbW9kX3NwZWMsIGNvZGUgPSBfZ2V0X21haW5fbW9kdWxlX2RldGFpbHMoKQogICAgIGV4Y2VwdCBJbXBvcnRFcnJvciBhcyBleGM6CiAgICAgICAgICMgVHJ5IHRvIHByb3ZpZGUgYSBnb29kIGVycm9yIG1lc3NhZ2UKICAgICAgICAgIyBmb3IgZGlyZWN0b3JpZXMsIHppcCBmaWxlcyBhbmQgdGhlIC1tIHN3aXRjaApAQCAtMTUyLDEyICsxNjMsMTEgQEAKICAgICAgICAgICAgIGluZm8gPSAiY2FuJ3QgZmluZCAnX19tYWluX18nIG1vZHVsZSBpbiAlciIgJSBzeXMuYXJndlswXQogICAgICAgICBtc2cgPSAiJXM6ICVzIiAlIChzeXMuZXhlY3V0YWJsZSwgaW5mbykKICAgICAgICAgc3lzLmV4aXQobXNnKQotICAgIHBrZ19uYW1lID0gbW9kX25hbWUucnBhcnRpdGlvbignLicpWzBdCiAgICAgbWFpbl9nbG9iYWxzID0gc3lzLm1vZHVsZXNbIl9fbWFpbl9fIl0uX19kaWN0X18KICAgICBpZiBhbHRlcl9hcmd2OgotICAgICAgICBzeXMuYXJndlswXSA9IGZuYW1lCisgICAgICAgIHN5cy5hcmd2WzBdID0gbW9kX3NwZWMub3JpZ2luCiAgICAgcmV0dXJuIF9ydW5fY29kZShjb2RlLCBtYWluX2dsb2JhbHMsIE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAiX19tYWluX18iLCBmbmFtZSwgbG9hZGVyLCBwa2dfbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICJfX21haW5fXyIsIG1vZF9zcGVjKQogCiBkZWYgcnVuX21vZHVsZShtb2RfbmFtZSwgaW5pdF9nbG9iYWxzPU5vbmUsCiAgICAgICAgICAgICAgICBydW5fbmFtZT1Ob25lLCBhbHRlcl9zeXM9RmFsc2UpOgpAQCAtMTY1LDE3ICsxNzUsMTQgQEAKIAogICAgICAgIFJldHVybnMgdGhlIHJlc3VsdGluZyB0b3AgbGV2ZWwgbmFtZXNwYWNlIGRpY3Rpb25hcnkKICAgICAiIiIKLSAgICBtb2RfbmFtZSwgbG9hZGVyLCBjb2RlLCBmbmFtZSA9IF9nZXRfbW9kdWxlX2RldGFpbHMobW9kX25hbWUpCisgICAgbW9kX25hbWUsIG1vZF9zcGVjLCBjb2RlID0gX2dldF9tb2R1bGVfZGV0YWlscyhtb2RfbmFtZSkKICAgICBpZiBydW5fbmFtZSBpcyBOb25lOgogICAgICAgICBydW5fbmFtZSA9IG1vZF9uYW1lCi0gICAgcGtnX25hbWUgPSBtb2RfbmFtZS5ycGFydGl0aW9uKCcuJylbMF0KICAgICBpZiBhbHRlcl9zeXM6Ci0gICAgICAgIHJldHVybiBfcnVuX21vZHVsZV9jb2RlKGNvZGUsIGluaXRfZ2xvYmFscywgcnVuX25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZuYW1lLCBsb2FkZXIsIHBrZ19uYW1lKQorICAgICAgICByZXR1cm4gX3J1bl9tb2R1bGVfY29kZShjb2RlLCBpbml0X2dsb2JhbHMsIHJ1bl9uYW1lLCBtb2Rfc3BlYykKICAgICBlbHNlOgogICAgICAgICAjIExlYXZlIHRoZSBzeXMgbW9kdWxlIGFsb25lCi0gICAgICAgIHJldHVybiBfcnVuX2NvZGUoY29kZSwge30sIGluaXRfZ2xvYmFscywgcnVuX25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgZm5hbWUsIGxvYWRlciwgcGtnX25hbWUpCisgICAgICAgIHJldHVybiBfcnVuX2NvZGUoY29kZSwge30sIGluaXRfZ2xvYmFscywgcnVuX25hbWUsIG1vZF9zcGVjKQogCiBkZWYgX2dldF9tYWluX21vZHVsZV9kZXRhaWxzKCk6CiAgICAgIyBIZWxwZXIgdGhhdCBnaXZlcyBhIG5pY2VyIGVycm9yIG1lc3NhZ2Ugd2hlbiBhdHRlbXB0aW5nIHRvCkBAIC0yMDQsMTAgKzIxMSw3IEBACiAgICAgICAgICMgVGhhdCBkaWRuJ3Qgd29yaywgc28gdHJ5IGl0IGFzIG5vcm1hbCBzb3VyY2UgY29kZQogICAgICAgICB3aXRoIG9wZW4oZm5hbWUsICJyYiIpIGFzIGY6CiAgICAgICAgICAgICBjb2RlID0gY29tcGlsZShmLnJlYWQoKSwgZm5hbWUsICdleGVjJykKLSAgICAgICAgICAgIGxvYWRlciA9IGltcG9ydGxpYi5tYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcihydW5fbmFtZSwgZm5hbWUpCi0gICAgZWxzZToKLSAgICAgICAgbG9hZGVyID0gaW1wb3J0bGliLm1hY2hpbmVyeS5Tb3VyY2VsZXNzRmlsZUxvYWRlcihydW5fbmFtZSwgZm5hbWUpCi0gICAgcmV0dXJuIGNvZGUsIGxvYWRlcgorICAgIHJldHVybiBjb2RlLCBmbmFtZQogCiBkZWYgcnVuX3BhdGgocGF0aF9uYW1lLCBpbml0X2dsb2JhbHM9Tm9uZSwgcnVuX25hbWU9Tm9uZSk6CiAgICAgIiIiRXhlY3V0ZSBjb2RlIGxvY2F0ZWQgYXQgdGhlIHNwZWNpZmllZCBmaWxlc3lzdGVtIGxvY2F0aW9uCkBAIC0yMjMsMTIgKzIyNywxNyBAQAogICAgICAgICBydW5fbmFtZSA9ICI8cnVuX3BhdGg+IgogICAgIHBrZ19uYW1lID0gcnVuX25hbWUucnBhcnRpdGlvbigiLiIpWzBdCiAgICAgaW1wb3J0ZXIgPSBnZXRfaW1wb3J0ZXIocGF0aF9uYW1lKQotICAgIGlmIGlzaW5zdGFuY2UoaW1wb3J0ZXIsICh0eXBlKE5vbmUpLCBpbXAuTnVsbEltcG9ydGVyKSk6CisgICAgIyBUcnlpbmcgdG8gYXZvaWQgaW1wb3J0aW5nIGltcCBzbyBhcyB0byBub3QgY29uc3VtZSB0aGUgZGVwcmVjYXRpb24gd2FybmluZy4KKyAgICBpc19OdWxsSW1wb3J0ZXIgPSBGYWxzZQorICAgIGlmIHR5cGUoaW1wb3J0ZXIpLl9fbW9kdWxlX18gPT0gJ2ltcCc6CisgICAgICAgIGlmIHR5cGUoaW1wb3J0ZXIpLl9fbmFtZV9fID09ICdOdWxsSW1wb3J0ZXInOgorICAgICAgICAgICAgaXNfTnVsbEltcG9ydGVyID0gVHJ1ZQorICAgIGlmIGlzaW5zdGFuY2UoaW1wb3J0ZXIsIHR5cGUoTm9uZSkpIG9yIGlzX051bGxJbXBvcnRlcjoKICAgICAgICAgIyBOb3QgYSB2YWxpZCBzeXMucGF0aCBlbnRyeSwgc28gcnVuIHRoZSBjb2RlIGRpcmVjdGx5CiAgICAgICAgICMgZXhlY2ZpbGUoKSBkb2Vzbid0IGhlbHAgYXMgd2Ugd2FudCB0byBhbGxvdyBjb21waWxlZCBmaWxlcwotICAgICAgICBjb2RlLCBtb2RfbG9hZGVyID0gX2dldF9jb2RlX2Zyb21fZmlsZShydW5fbmFtZSwgcGF0aF9uYW1lKQotICAgICAgICByZXR1cm4gX3J1bl9tb2R1bGVfY29kZShjb2RlLCBpbml0X2dsb2JhbHMsIHJ1bl9uYW1lLCBwYXRoX25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZF9sb2FkZXIsIHBrZ19uYW1lKQorICAgICAgICBjb2RlLCBmbmFtZSA9IF9nZXRfY29kZV9mcm9tX2ZpbGUocnVuX25hbWUsIHBhdGhfbmFtZSkKKyAgICAgICAgcmV0dXJuIF9ydW5fbW9kdWxlX2NvZGUoY29kZSwgaW5pdF9nbG9iYWxzLCBydW5fbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGtnX25hbWU9cGtnX25hbWUsIHNjcmlwdF9uYW1lPWZuYW1lKQogICAgIGVsc2U6CiAgICAgICAgICMgSW1wb3J0ZXIgaXMgZGVmaW5lZCBmb3IgcGF0aCwgc28gYWRkIGl0IHRvCiAgICAgICAgICMgdGhlIHN0YXJ0IG9mIHN5cy5wYXRoCkBAIC0yNDAsMTIgKzI0OSwxMiBAQAogICAgICAgICAgICAgIyBoYXZlIG5vIGNob2ljZSBhbmQgd2UgaGF2ZSB0byByZW1vdmUgaXQgZXZlbiB3aGlsZSB3ZSByZWFkIHRoZQogICAgICAgICAgICAgIyBjb2RlLiBJZiB3ZSBkb24ndCBkbyB0aGlzLCBhIF9fbG9hZGVyX18gYXR0cmlidXRlIGluIHRoZQogICAgICAgICAgICAgIyBleGlzdGluZyBfX21haW5fXyBtb2R1bGUgbWF5IHByZXZlbnQgbG9jYXRpb24gb2YgdGhlIG5ldyBtb2R1bGUuCi0gICAgICAgICAgICBtb2RfbmFtZSwgbG9hZGVyLCBjb2RlLCBmbmFtZSA9IF9nZXRfbWFpbl9tb2R1bGVfZGV0YWlscygpCisgICAgICAgICAgICBtb2RfbmFtZSwgbW9kX3NwZWMsIGNvZGUgPSBfZ2V0X21haW5fbW9kdWxlX2RldGFpbHMoKQogICAgICAgICAgICAgd2l0aCBfVGVtcE1vZHVsZShydW5fbmFtZSkgYXMgdGVtcF9tb2R1bGUsIFwKICAgICAgICAgICAgICAgICAgX01vZGlmaWVkQXJndjAocGF0aF9uYW1lKToKICAgICAgICAgICAgICAgICBtb2RfZ2xvYmFscyA9IHRlbXBfbW9kdWxlLm1vZHVsZS5fX2RpY3RfXwogICAgICAgICAgICAgICAgIHJldHVybiBfcnVuX2NvZGUoY29kZSwgbW9kX2dsb2JhbHMsIGluaXRfZ2xvYmFscywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bl9uYW1lLCBmbmFtZSwgbG9hZGVyLCBwa2dfbmFtZSkuY29weSgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW5fbmFtZSwgbW9kX3NwZWMsIHBrZ19uYW1lKS5jb3B5KCkKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzeXMucGF0aC5yZW1vdmUocGF0aF9uYW1lKQpkaWZmIC0tZ2l0IGEvTGliL3NjaGVkLnB5IGIvTGliL3NjaGVkLnB5CmluZGV4IGI5YTdhZDEuLjJlNmIwMGEgMTAwNjQ0Ci0tLSBhL0xpYi9zY2hlZC5weQorKysgYi9MaWIvc2NoZWQucHkKQEAgLTcxLDEwICs3MSwxMCBAQAogICAgICAgICAiIiIKICAgICAgICAgaWYga3dhcmdzIGlzIF9zZW50aW5lbDoKICAgICAgICAgICAgIGt3YXJncyA9IHt9CisgICAgICAgIGV2ZW50ID0gRXZlbnQodGltZSwgcHJpb3JpdHksIGFjdGlvbiwgYXJndW1lbnQsIGt3YXJncykKICAgICAgICAgd2l0aCBzZWxmLl9sb2NrOgotICAgICAgICAgICAgZXZlbnQgPSBFdmVudCh0aW1lLCBwcmlvcml0eSwgYWN0aW9uLCBhcmd1bWVudCwga3dhcmdzKQogICAgICAgICAgICAgaGVhcHEuaGVhcHB1c2goc2VsZi5fcXVldWUsIGV2ZW50KQotICAgICAgICAgICAgcmV0dXJuIGV2ZW50ICMgVGhlIElECisgICAgICAgIHJldHVybiBldmVudCAjIFRoZSBJRAogCiAgICAgZGVmIGVudGVyKHNlbGYsIGRlbGF5LCBwcmlvcml0eSwgYWN0aW9uLCBhcmd1bWVudD0oKSwga3dhcmdzPV9zZW50aW5lbCk6CiAgICAgICAgICIiIkEgdmFyaWFudCB0aGF0IHNwZWNpZmllcyB0aGUgdGltZSBhcyBhIHJlbGF0aXZlIHRpbWUuCkBAIC04Miw5ICs4Miw4IEBACiAgICAgICAgIFRoaXMgaXMgYWN0dWFsbHkgdGhlIG1vcmUgY29tbW9ubHkgdXNlZCBpbnRlcmZhY2UuCiAKICAgICAgICAgIiIiCi0gICAgICAgIHdpdGggc2VsZi5fbG9jazoKLSAgICAgICAgICAgIHRpbWUgPSBzZWxmLnRpbWVmdW5jKCkgKyBkZWxheQotICAgICAgICAgICAgcmV0dXJuIHNlbGYuZW50ZXJhYnModGltZSwgcHJpb3JpdHksIGFjdGlvbiwgYXJndW1lbnQsIGt3YXJncykKKyAgICAgICAgdGltZSA9IHNlbGYudGltZWZ1bmMoKSArIGRlbGF5CisgICAgICAgIHJldHVybiBzZWxmLmVudGVyYWJzKHRpbWUsIHByaW9yaXR5LCBhY3Rpb24sIGFyZ3VtZW50LCBrd2FyZ3MpCiAKICAgICBkZWYgY2FuY2VsKHNlbGYsIGV2ZW50KToKICAgICAgICAgIiIiUmVtb3ZlIGFuIGV2ZW50IGZyb20gdGhlIHF1ZXVlLgpAQCAtMTY1LDQgKzE2NCw0IEBACiAgICAgICAgICMgdGhlIGFjdHVhbCBvcmRlciB0aGV5IHdvdWxkIGJlIHJldHJpZXZlZC4KICAgICAgICAgd2l0aCBzZWxmLl9sb2NrOgogICAgICAgICAgICAgZXZlbnRzID0gc2VsZi5fcXVldWVbOl0KLSAgICAgICAgICAgIHJldHVybiBsaXN0KG1hcChoZWFwcS5oZWFwcG9wLCBbZXZlbnRzXSpsZW4oZXZlbnRzKSkpCisgICAgICAgIHJldHVybiBsaXN0KG1hcChoZWFwcS5oZWFwcG9wLCBbZXZlbnRzXSpsZW4oZXZlbnRzKSkpCmRpZmYgLS1naXQgYS9MaWIvc2VsZWN0b3JzLnB5IGIvTGliL3NlbGVjdG9ycy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjZkYTI5Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3NlbGVjdG9ycy5weQpAQCAtMCwwICsxLDUzNyBAQAorIiIiU2VsZWN0b3JzIG1vZHVsZS4KKworVGhpcyBtb2R1bGUgYWxsb3dzIGhpZ2gtbGV2ZWwgYW5kIGVmZmljaWVudCBJL08gbXVsdGlwbGV4aW5nLCBidWlsdCB1cG9uIHRoZQorYHNlbGVjdGAgbW9kdWxlIHByaW1pdGl2ZXMuCisiIiIKKworCitmcm9tIGFiYyBpbXBvcnQgQUJDTWV0YSwgYWJzdHJhY3RtZXRob2QKK2Zyb20gY29sbGVjdGlvbnMgaW1wb3J0IG5hbWVkdHVwbGUsIE1hcHBpbmcKK2ltcG9ydCBtYXRoCitpbXBvcnQgc2VsZWN0CitpbXBvcnQgc3lzCisKKworIyBnZW5lcmljIGV2ZW50cywgdGhhdCBtdXN0IGJlIG1hcHBlZCB0byBpbXBsZW1lbnRhdGlvbi1zcGVjaWZpYyBvbmVzCitFVkVOVF9SRUFEID0gKDEgPDwgMCkKK0VWRU5UX1dSSVRFID0gKDEgPDwgMSkKKworCitkZWYgX2ZpbGVvYmpfdG9fZmQoZmlsZW9iaik6CisgICAgIiIiUmV0dXJuIGEgZmlsZSBkZXNjcmlwdG9yIGZyb20gYSBmaWxlIG9iamVjdC4KKworICAgIFBhcmFtZXRlcnM6CisgICAgZmlsZW9iaiAtLSBmaWxlIG9iamVjdCBvciBmaWxlIGRlc2NyaXB0b3IKKworICAgIFJldHVybnM6CisgICAgY29ycmVzcG9uZGluZyBmaWxlIGRlc2NyaXB0b3IKKworICAgIFJhaXNlczoKKyAgICBWYWx1ZUVycm9yIGlmIHRoZSBvYmplY3QgaXMgaW52YWxpZAorICAgICIiIgorICAgIGlmIGlzaW5zdGFuY2UoZmlsZW9iaiwgaW50KToKKyAgICAgICAgZmQgPSBmaWxlb2JqCisgICAgZWxzZToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZmQgPSBpbnQoZmlsZW9iai5maWxlbm8oKSkKKyAgICAgICAgZXhjZXB0IChBdHRyaWJ1dGVFcnJvciwgVHlwZUVycm9yLCBWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkludmFsaWQgZmlsZSBvYmplY3Q6ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInshcn0iLmZvcm1hdChmaWxlb2JqKSkgZnJvbSBOb25lCisgICAgaWYgZmQgPCAwOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJJbnZhbGlkIGZpbGUgZGVzY3JpcHRvcjoge30iLmZvcm1hdChmZCkpCisgICAgcmV0dXJuIGZkCisKKworU2VsZWN0b3JLZXkgPSBuYW1lZHR1cGxlKCdTZWxlY3RvcktleScsIFsnZmlsZW9iaicsICdmZCcsICdldmVudHMnLCAnZGF0YSddKQorIiIiT2JqZWN0IHVzZWQgdG8gYXNzb2NpYXRlIGEgZmlsZSBvYmplY3QgdG8gaXRzIGJhY2tpbmcgZmlsZSBkZXNjcmlwdG9yLAorc2VsZWN0ZWQgZXZlbnQgbWFzayBhbmQgYXR0YWNoZWQgZGF0YS4iIiIKKworCitjbGFzcyBfU2VsZWN0b3JNYXBwaW5nKE1hcHBpbmcpOgorICAgICIiIk1hcHBpbmcgb2YgZmlsZSBvYmplY3RzIHRvIHNlbGVjdG9yIGtleXMuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2VsZWN0b3IpOgorICAgICAgICBzZWxmLl9zZWxlY3RvciA9IHNlbGVjdG9yCisKKyAgICBkZWYgX19sZW5fXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGxlbihzZWxmLl9zZWxlY3Rvci5fZmRfdG9fa2V5KQorCisgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGZpbGVvYmopOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBmZCA9IHNlbGYuX3NlbGVjdG9yLl9maWxlb2JqX2xvb2t1cChmaWxlb2JqKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3NlbGVjdG9yLl9mZF90b19rZXlbZmRdCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIEtleUVycm9yKCJ7IXJ9IGlzIG5vdCByZWdpc3RlcmVkIi5mb3JtYXQoZmlsZW9iaikpIGZyb20gTm9uZQorCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gaXRlcihzZWxmLl9zZWxlY3Rvci5fZmRfdG9fa2V5KQorCisKK2NsYXNzIEJhc2VTZWxlY3RvcihtZXRhY2xhc3M9QUJDTWV0YSk6CisgICAgIiIiU2VsZWN0b3IgYWJzdHJhY3QgYmFzZSBjbGFzcy4KKworICAgIEEgc2VsZWN0b3Igc3VwcG9ydHMgcmVnaXN0ZXJpbmcgZmlsZSBvYmplY3RzIHRvIGJlIG1vbml0b3JlZCBmb3Igc3BlY2lmaWMKKyAgICBJL08gZXZlbnRzLgorCisgICAgQSBmaWxlIG9iamVjdCBpcyBhIGZpbGUgZGVzY3JpcHRvciBvciBhbnkgb2JqZWN0IHdpdGggYSBgZmlsZW5vKClgIG1ldGhvZC4KKyAgICBBbiBhcmJpdHJhcnkgb2JqZWN0IGNhbiBiZSBhdHRhY2hlZCB0byB0aGUgZmlsZSBvYmplY3QsIHdoaWNoIGNhbiBiZSB1c2VkCisgICAgZm9yIGV4YW1wbGUgdG8gc3RvcmUgY29udGV4dCBpbmZvcm1hdGlvbiwgYSBjYWxsYmFjaywgZXRjLgorCisgICAgQSBzZWxlY3RvciBjYW4gdXNlIHZhcmlvdXMgaW1wbGVtZW50YXRpb25zIChzZWxlY3QoKSwgcG9sbCgpLCBlcG9sbCgpLi4uKQorICAgIGRlcGVuZGluZyBvbiB0aGUgcGxhdGZvcm0uIFRoZSBkZWZhdWx0IGBTZWxlY3RvcmAgY2xhc3MgdXNlcyB0aGUgbW9zdAorICAgIGVmZmljaWVudCBpbXBsZW1lbnRhdGlvbiBvbiB0aGUgY3VycmVudCBwbGF0Zm9ybS4KKyAgICAiIiIKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiByZWdpc3RlcihzZWxmLCBmaWxlb2JqLCBldmVudHMsIGRhdGE9Tm9uZSk6CisgICAgICAgICIiIlJlZ2lzdGVyIGEgZmlsZSBvYmplY3QuCisKKyAgICAgICAgUGFyYW1ldGVyczoKKyAgICAgICAgZmlsZW9iaiAtLSBmaWxlIG9iamVjdCBvciBmaWxlIGRlc2NyaXB0b3IKKyAgICAgICAgZXZlbnRzICAtLSBldmVudHMgdG8gbW9uaXRvciAoYml0d2lzZSBtYXNrIG9mIEVWRU5UX1JFQUR8RVZFTlRfV1JJVEUpCisgICAgICAgIGRhdGEgICAgLS0gYXR0YWNoZWQgZGF0YQorCisgICAgICAgIFJldHVybnM6CisgICAgICAgIFNlbGVjdG9yS2V5IGluc3RhbmNlCisKKyAgICAgICAgUmFpc2VzOgorICAgICAgICBWYWx1ZUVycm9yIGlmIGV2ZW50cyBpcyBpbnZhbGlkCisgICAgICAgIEtleUVycm9yIGlmIGZpbGVvYmogaXMgYWxyZWFkeSByZWdpc3RlcmVkCisgICAgICAgIE9TRXJyb3IgaWYgZmlsZW9iaiBpcyBjbG9zZWQgb3Igb3RoZXJ3aXNlIGlzIHVuYWNjZXB0YWJsZSB0bworICAgICAgICAgICAgICAgIHRoZSB1bmRlcmx5aW5nIHN5c3RlbSBjYWxsIChpZiBhIHN5c3RlbSBjYWxsIGlzIG1hZGUpCisKKyAgICAgICAgTm90ZToKKyAgICAgICAgT1NFcnJvciBtYXkgb3IgbWF5IG5vdCBiZSByYWlzZWQKKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiB1bnJlZ2lzdGVyKHNlbGYsIGZpbGVvYmopOgorICAgICAgICAiIiJVbnJlZ2lzdGVyIGEgZmlsZSBvYmplY3QuCisKKyAgICAgICAgUGFyYW1ldGVyczoKKyAgICAgICAgZmlsZW9iaiAtLSBmaWxlIG9iamVjdCBvciBmaWxlIGRlc2NyaXB0b3IKKworICAgICAgICBSZXR1cm5zOgorICAgICAgICBTZWxlY3RvcktleSBpbnN0YW5jZQorCisgICAgICAgIFJhaXNlczoKKyAgICAgICAgS2V5RXJyb3IgaWYgZmlsZW9iaiBpcyBub3QgcmVnaXN0ZXJlZAorCisgICAgICAgIE5vdGU6CisgICAgICAgIElmIGZpbGVvYmogaXMgcmVnaXN0ZXJlZCBidXQgaGFzIHNpbmNlIGJlZW4gY2xvc2VkIHRoaXMgZG9lcworICAgICAgICAqbm90KiByYWlzZSBPU0Vycm9yIChldmVuIGlmIHRoZSB3cmFwcGVkIHN5c2NhbGwgZG9lcykKKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBtb2RpZnkoc2VsZiwgZmlsZW9iaiwgZXZlbnRzLCBkYXRhPU5vbmUpOgorICAgICAgICAiIiJDaGFuZ2UgYSByZWdpc3RlcmVkIGZpbGUgb2JqZWN0IG1vbml0b3JlZCBldmVudHMgb3IgYXR0YWNoZWQgZGF0YS4KKworICAgICAgICBQYXJhbWV0ZXJzOgorICAgICAgICBmaWxlb2JqIC0tIGZpbGUgb2JqZWN0IG9yIGZpbGUgZGVzY3JpcHRvcgorICAgICAgICBldmVudHMgIC0tIGV2ZW50cyB0byBtb25pdG9yIChiaXR3aXNlIG1hc2sgb2YgRVZFTlRfUkVBRHxFVkVOVF9XUklURSkKKyAgICAgICAgZGF0YSAgICAtLSBhdHRhY2hlZCBkYXRhCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgU2VsZWN0b3JLZXkgaW5zdGFuY2UKKworICAgICAgICBSYWlzZXM6CisgICAgICAgIEFueXRoaW5nIHRoYXQgdW5yZWdpc3RlcigpIG9yIHJlZ2lzdGVyKCkgcmFpc2VzCisgICAgICAgICIiIgorICAgICAgICBzZWxmLnVucmVnaXN0ZXIoZmlsZW9iaikKKyAgICAgICAgcmV0dXJuIHNlbGYucmVnaXN0ZXIoZmlsZW9iaiwgZXZlbnRzLCBkYXRhKQorCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIHNlbGVjdChzZWxmLCB0aW1lb3V0PU5vbmUpOgorICAgICAgICAiIiJQZXJmb3JtIHRoZSBhY3R1YWwgc2VsZWN0aW9uLCB1bnRpbCBzb21lIG1vbml0b3JlZCBmaWxlIG9iamVjdHMgYXJlCisgICAgICAgIHJlYWR5IG9yIGEgdGltZW91dCBleHBpcmVzLgorCisgICAgICAgIFBhcmFtZXRlcnM6CisgICAgICAgIHRpbWVvdXQgLS0gaWYgdGltZW91dCA+IDAsIHRoaXMgc3BlY2lmaWVzIHRoZSBtYXhpbXVtIHdhaXQgdGltZSwgaW4KKyAgICAgICAgICAgICAgICAgICBzZWNvbmRzCisgICAgICAgICAgICAgICAgICAgaWYgdGltZW91dCA8PSAwLCB0aGUgc2VsZWN0KCkgY2FsbCB3b24ndCBibG9jaywgYW5kIHdpbGwKKyAgICAgICAgICAgICAgICAgICByZXBvcnQgdGhlIGN1cnJlbnRseSByZWFkeSBmaWxlIG9iamVjdHMKKyAgICAgICAgICAgICAgICAgICBpZiB0aW1lb3V0IGlzIE5vbmUsIHNlbGVjdCgpIHdpbGwgYmxvY2sgdW50aWwgYSBtb25pdG9yZWQKKyAgICAgICAgICAgICAgICAgICBmaWxlIG9iamVjdCBiZWNvbWVzIHJlYWR5CisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgbGlzdCBvZiAoa2V5LCBldmVudHMpIGZvciByZWFkeSBmaWxlIG9iamVjdHMKKyAgICAgICAgYGV2ZW50c2AgaXMgYSBiaXR3aXNlIG1hc2sgb2YgRVZFTlRfUkVBRHxFVkVOVF9XUklURQorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICAiIiJDbG9zZSB0aGUgc2VsZWN0b3IuCisKKyAgICAgICAgVGhpcyBtdXN0IGJlIGNhbGxlZCB0byBtYWtlIHN1cmUgdGhhdCBhbnkgdW5kZXJseWluZyByZXNvdXJjZSBpcyBmcmVlZC4KKyAgICAgICAgIiIiCisgICAgICAgIHBhc3MKKworICAgIGRlZiBnZXRfa2V5KHNlbGYsIGZpbGVvYmopOgorICAgICAgICAiIiJSZXR1cm4gdGhlIGtleSBhc3NvY2lhdGVkIHRvIGEgcmVnaXN0ZXJlZCBmaWxlIG9iamVjdC4KKworICAgICAgICBSZXR1cm5zOgorICAgICAgICBTZWxlY3RvcktleSBmb3IgdGhpcyBmaWxlIG9iamVjdAorICAgICAgICAiIiIKKyAgICAgICAgbWFwcGluZyA9IHNlbGYuZ2V0X21hcCgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIG1hcHBpbmcgaXMgTm9uZToKKyAgICAgICAgICAgICAgICByYWlzZSBLZXlFcnJvcgorICAgICAgICAgICAgcmV0dXJuIG1hcHBpbmdbZmlsZW9ial0KKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IoInshcn0gaXMgbm90IHJlZ2lzdGVyZWQiLmZvcm1hdChmaWxlb2JqKSkgZnJvbSBOb25lCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgZ2V0X21hcChzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIGEgbWFwcGluZyBvZiBmaWxlIG9iamVjdHMgdG8gc2VsZWN0b3Iga2V5cy4iIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqYXJncyk6CisgICAgICAgIHNlbGYuY2xvc2UoKQorCisKK2NsYXNzIF9CYXNlU2VsZWN0b3JJbXBsKEJhc2VTZWxlY3Rvcik6CisgICAgIiIiQmFzZSBzZWxlY3RvciBpbXBsZW1lbnRhdGlvbi4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgIyB0aGlzIG1hcHMgZmlsZSBkZXNjcmlwdG9ycyB0byBrZXlzCisgICAgICAgIHNlbGYuX2ZkX3RvX2tleSA9IHt9CisgICAgICAgICMgcmVhZC1vbmx5IG1hcHBpbmcgcmV0dXJuZWQgYnkgZ2V0X21hcCgpCisgICAgICAgIHNlbGYuX21hcCA9IF9TZWxlY3Rvck1hcHBpbmcoc2VsZikKKworICAgIGRlZiBfZmlsZW9ial9sb29rdXAoc2VsZiwgZmlsZW9iaik6CisgICAgICAgICIiIlJldHVybiBhIGZpbGUgZGVzY3JpcHRvciBmcm9tIGEgZmlsZSBvYmplY3QuCisKKyAgICAgICAgVGhpcyB3cmFwcyBfZmlsZW9ial90b19mZCgpIHRvIGRvIGFuIGV4aGF1c3RpdmUgc2VhcmNoIGluIGNhc2UKKyAgICAgICAgdGhlIG9iamVjdCBpcyBpbnZhbGlkIGJ1dCB3ZSBzdGlsbCBoYXZlIGl0IGluIG91ciBtYXAuICBUaGlzCisgICAgICAgIGlzIHVzZWQgYnkgdW5yZWdpc3RlcigpIHNvIHdlIGNhbiB1bnJlZ2lzdGVyIGFuIG9iamVjdCB0aGF0CisgICAgICAgIHdhcyBwcmV2aW91c2x5IHJlZ2lzdGVyZWQgZXZlbiBpZiBpdCBpcyBjbG9zZWQuICBJdCBpcyBhbHNvCisgICAgICAgIHVzZWQgYnkgX1NlbGVjdG9yTWFwcGluZy4KKyAgICAgICAgIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBfZmlsZW9ial90b19mZChmaWxlb2JqKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICMgRG8gYW4gZXhoYXVzdGl2ZSBzZWFyY2guCisgICAgICAgICAgICBmb3Iga2V5IGluIHNlbGYuX2ZkX3RvX2tleS52YWx1ZXMoKToKKyAgICAgICAgICAgICAgICBpZiBrZXkuZmlsZW9iaiBpcyBmaWxlb2JqOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4ga2V5LmZkCisgICAgICAgICAgICAjIFJhaXNlIFZhbHVlRXJyb3IgYWZ0ZXIgYWxsLgorICAgICAgICAgICAgcmFpc2UKKworICAgIGRlZiByZWdpc3RlcihzZWxmLCBmaWxlb2JqLCBldmVudHMsIGRhdGE9Tm9uZSk6CisgICAgICAgIGlmIChub3QgZXZlbnRzKSBvciAoZXZlbnRzICYgfihFVkVOVF9SRUFEIHwgRVZFTlRfV1JJVEUpKToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkludmFsaWQgZXZlbnRzOiB7IXJ9Ii5mb3JtYXQoZXZlbnRzKSkKKworICAgICAgICBrZXkgPSBTZWxlY3RvcktleShmaWxlb2JqLCBzZWxmLl9maWxlb2JqX2xvb2t1cChmaWxlb2JqKSwgZXZlbnRzLCBkYXRhKQorCisgICAgICAgIGlmIGtleS5mZCBpbiBzZWxmLl9mZF90b19rZXk6CisgICAgICAgICAgICByYWlzZSBLZXlFcnJvcigieyFyfSAoRkQge30pIGlzIGFscmVhZHkgcmVnaXN0ZXJlZCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JtYXQoZmlsZW9iaiwga2V5LmZkKSkKKworICAgICAgICBzZWxmLl9mZF90b19rZXlba2V5LmZkXSA9IGtleQorICAgICAgICByZXR1cm4ga2V5CisKKyAgICBkZWYgdW5yZWdpc3RlcihzZWxmLCBmaWxlb2JqKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAga2V5ID0gc2VsZi5fZmRfdG9fa2V5LnBvcChzZWxmLl9maWxlb2JqX2xvb2t1cChmaWxlb2JqKSkKKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IoInshcn0gaXMgbm90IHJlZ2lzdGVyZWQiLmZvcm1hdChmaWxlb2JqKSkgZnJvbSBOb25lCisgICAgICAgIHJldHVybiBrZXkKKworICAgIGRlZiBtb2RpZnkoc2VsZiwgZmlsZW9iaiwgZXZlbnRzLCBkYXRhPU5vbmUpOgorICAgICAgICAjIFRPRE86IFN1YmNsYXNzZXMgY2FuIHByb2JhYmx5IG9wdGltaXplIHRoaXMgZXZlbiBmdXJ0aGVyLgorICAgICAgICB0cnk6CisgICAgICAgICAgICBrZXkgPSBzZWxmLl9mZF90b19rZXlbc2VsZi5fZmlsZW9ial9sb29rdXAoZmlsZW9iaildCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIEtleUVycm9yKCJ7IXJ9IGlzIG5vdCByZWdpc3RlcmVkIi5mb3JtYXQoZmlsZW9iaikpIGZyb20gTm9uZQorICAgICAgICBpZiBldmVudHMgIT0ga2V5LmV2ZW50czoKKyAgICAgICAgICAgIHNlbGYudW5yZWdpc3RlcihmaWxlb2JqKQorICAgICAgICAgICAga2V5ID0gc2VsZi5yZWdpc3RlcihmaWxlb2JqLCBldmVudHMsIGRhdGEpCisgICAgICAgIGVsaWYgZGF0YSAhPSBrZXkuZGF0YToKKyAgICAgICAgICAgICMgVXNlIGEgc2hvcnRjdXQgdG8gdXBkYXRlIHRoZSBkYXRhLgorICAgICAgICAgICAga2V5ID0ga2V5Ll9yZXBsYWNlKGRhdGE9ZGF0YSkKKyAgICAgICAgICAgIHNlbGYuX2ZkX3RvX2tleVtrZXkuZmRdID0ga2V5CisgICAgICAgIHJldHVybiBrZXkKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgc2VsZi5fZmRfdG9fa2V5LmNsZWFyKCkKKyAgICAgICAgc2VsZi5fbWFwID0gTm9uZQorCisgICAgZGVmIGdldF9tYXAoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9tYXAKKworICAgIGRlZiBfa2V5X2Zyb21fZmQoc2VsZiwgZmQpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIGtleSBhc3NvY2lhdGVkIHRvIGEgZ2l2ZW4gZmlsZSBkZXNjcmlwdG9yLgorCisgICAgICAgIFBhcmFtZXRlcnM6CisgICAgICAgIGZkIC0tIGZpbGUgZGVzY3JpcHRvcgorCisgICAgICAgIFJldHVybnM6CisgICAgICAgIGNvcnJlc3BvbmRpbmcga2V5LCBvciBOb25lIGlmIG5vdCBmb3VuZAorICAgICAgICAiIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2ZkX3RvX2tleVtmZF0KKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworCitjbGFzcyBTZWxlY3RTZWxlY3RvcihfQmFzZVNlbGVjdG9ySW1wbCk6CisgICAgIiIiU2VsZWN0LWJhc2VkIHNlbGVjdG9yLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzdXBlcigpLl9faW5pdF9fKCkKKyAgICAgICAgc2VsZi5fcmVhZGVycyA9IHNldCgpCisgICAgICAgIHNlbGYuX3dyaXRlcnMgPSBzZXQoKQorCisgICAgZGVmIHJlZ2lzdGVyKHNlbGYsIGZpbGVvYmosIGV2ZW50cywgZGF0YT1Ob25lKToKKyAgICAgICAga2V5ID0gc3VwZXIoKS5yZWdpc3RlcihmaWxlb2JqLCBldmVudHMsIGRhdGEpCisgICAgICAgIGlmIGV2ZW50cyAmIEVWRU5UX1JFQUQ6CisgICAgICAgICAgICBzZWxmLl9yZWFkZXJzLmFkZChrZXkuZmQpCisgICAgICAgIGlmIGV2ZW50cyAmIEVWRU5UX1dSSVRFOgorICAgICAgICAgICAgc2VsZi5fd3JpdGVycy5hZGQoa2V5LmZkKQorICAgICAgICByZXR1cm4ga2V5CisKKyAgICBkZWYgdW5yZWdpc3RlcihzZWxmLCBmaWxlb2JqKToKKyAgICAgICAga2V5ID0gc3VwZXIoKS51bnJlZ2lzdGVyKGZpbGVvYmopCisgICAgICAgIHNlbGYuX3JlYWRlcnMuZGlzY2FyZChrZXkuZmQpCisgICAgICAgIHNlbGYuX3dyaXRlcnMuZGlzY2FyZChrZXkuZmQpCisgICAgICAgIHJldHVybiBrZXkKKworICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgorICAgICAgICBkZWYgX3NlbGVjdChzZWxmLCByLCB3LCBfLCB0aW1lb3V0PU5vbmUpOgorICAgICAgICAgICAgciwgdywgeCA9IHNlbGVjdC5zZWxlY3QociwgdywgdywgdGltZW91dCkKKyAgICAgICAgICAgIHJldHVybiByLCB3ICsgeCwgW10KKyAgICBlbHNlOgorICAgICAgICBfc2VsZWN0ID0gc2VsZWN0LnNlbGVjdAorCisgICAgZGVmIHNlbGVjdChzZWxmLCB0aW1lb3V0PU5vbmUpOgorICAgICAgICB0aW1lb3V0ID0gTm9uZSBpZiB0aW1lb3V0IGlzIE5vbmUgZWxzZSBtYXgodGltZW91dCwgMCkKKyAgICAgICAgcmVhZHkgPSBbXQorICAgICAgICB0cnk6CisgICAgICAgICAgICByLCB3LCBfID0gc2VsZi5fc2VsZWN0KHNlbGYuX3JlYWRlcnMsIHNlbGYuX3dyaXRlcnMsIFtdLCB0aW1lb3V0KQorICAgICAgICBleGNlcHQgSW50ZXJydXB0ZWRFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiByZWFkeQorICAgICAgICByID0gc2V0KHIpCisgICAgICAgIHcgPSBzZXQodykKKyAgICAgICAgZm9yIGZkIGluIHIgfCB3OgorICAgICAgICAgICAgZXZlbnRzID0gMAorICAgICAgICAgICAgaWYgZmQgaW4gcjoKKyAgICAgICAgICAgICAgICBldmVudHMgfD0gRVZFTlRfUkVBRAorICAgICAgICAgICAgaWYgZmQgaW4gdzoKKyAgICAgICAgICAgICAgICBldmVudHMgfD0gRVZFTlRfV1JJVEUKKworICAgICAgICAgICAga2V5ID0gc2VsZi5fa2V5X2Zyb21fZmQoZmQpCisgICAgICAgICAgICBpZiBrZXk6CisgICAgICAgICAgICAgICAgcmVhZHkuYXBwZW5kKChrZXksIGV2ZW50cyAmIGtleS5ldmVudHMpKQorICAgICAgICByZXR1cm4gcmVhZHkKKworCitpZiBoYXNhdHRyKHNlbGVjdCwgJ3BvbGwnKToKKworICAgIGNsYXNzIFBvbGxTZWxlY3RvcihfQmFzZVNlbGVjdG9ySW1wbCk6CisgICAgICAgICIiIlBvbGwtYmFzZWQgc2VsZWN0b3IuIiIiCisKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgc3VwZXIoKS5fX2luaXRfXygpCisgICAgICAgICAgICBzZWxmLl9wb2xsID0gc2VsZWN0LnBvbGwoKQorCisgICAgICAgIGRlZiByZWdpc3RlcihzZWxmLCBmaWxlb2JqLCBldmVudHMsIGRhdGE9Tm9uZSk6CisgICAgICAgICAgICBrZXkgPSBzdXBlcigpLnJlZ2lzdGVyKGZpbGVvYmosIGV2ZW50cywgZGF0YSkKKyAgICAgICAgICAgIHBvbGxfZXZlbnRzID0gMAorICAgICAgICAgICAgaWYgZXZlbnRzICYgRVZFTlRfUkVBRDoKKyAgICAgICAgICAgICAgICBwb2xsX2V2ZW50cyB8PSBzZWxlY3QuUE9MTElOCisgICAgICAgICAgICBpZiBldmVudHMgJiBFVkVOVF9XUklURToKKyAgICAgICAgICAgICAgICBwb2xsX2V2ZW50cyB8PSBzZWxlY3QuUE9MTE9VVAorICAgICAgICAgICAgc2VsZi5fcG9sbC5yZWdpc3RlcihrZXkuZmQsIHBvbGxfZXZlbnRzKQorICAgICAgICAgICAgcmV0dXJuIGtleQorCisgICAgICAgIGRlZiB1bnJlZ2lzdGVyKHNlbGYsIGZpbGVvYmopOgorICAgICAgICAgICAga2V5ID0gc3VwZXIoKS51bnJlZ2lzdGVyKGZpbGVvYmopCisgICAgICAgICAgICBzZWxmLl9wb2xsLnVucmVnaXN0ZXIoa2V5LmZkKQorICAgICAgICAgICAgcmV0dXJuIGtleQorCisgICAgICAgIGRlZiBzZWxlY3Qoc2VsZiwgdGltZW91dD1Ob25lKToKKyAgICAgICAgICAgIGlmIHRpbWVvdXQgaXMgTm9uZToKKyAgICAgICAgICAgICAgICB0aW1lb3V0ID0gTm9uZQorICAgICAgICAgICAgZWxpZiB0aW1lb3V0IDw9IDA6CisgICAgICAgICAgICAgICAgdGltZW91dCA9IDAKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBwb2xsKCkgaGFzIGEgcmVzb2x1dGlvbiBvZiAxIG1pbGxpc2Vjb25kLCByb3VuZCBhd2F5IGZyb20KKyAgICAgICAgICAgICAgICAjIHplcm8gdG8gd2FpdCAqYXQgbGVhc3QqIHRpbWVvdXQgc2Vjb25kcy4KKyAgICAgICAgICAgICAgICB0aW1lb3V0ID0gbWF0aC5jZWlsKHRpbWVvdXQgKiAxZTMpCisgICAgICAgICAgICByZWFkeSA9IFtdCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZmRfZXZlbnRfbGlzdCA9IHNlbGYuX3BvbGwucG9sbCh0aW1lb3V0KQorICAgICAgICAgICAgZXhjZXB0IEludGVycnVwdGVkRXJyb3I6CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlYWR5CisgICAgICAgICAgICBmb3IgZmQsIGV2ZW50IGluIGZkX2V2ZW50X2xpc3Q6CisgICAgICAgICAgICAgICAgZXZlbnRzID0gMAorICAgICAgICAgICAgICAgIGlmIGV2ZW50ICYgfnNlbGVjdC5QT0xMSU46CisgICAgICAgICAgICAgICAgICAgIGV2ZW50cyB8PSBFVkVOVF9XUklURQorICAgICAgICAgICAgICAgIGlmIGV2ZW50ICYgfnNlbGVjdC5QT0xMT1VUOgorICAgICAgICAgICAgICAgICAgICBldmVudHMgfD0gRVZFTlRfUkVBRAorCisgICAgICAgICAgICAgICAga2V5ID0gc2VsZi5fa2V5X2Zyb21fZmQoZmQpCisgICAgICAgICAgICAgICAgaWYga2V5OgorICAgICAgICAgICAgICAgICAgICByZWFkeS5hcHBlbmQoKGtleSwgZXZlbnRzICYga2V5LmV2ZW50cykpCisgICAgICAgICAgICByZXR1cm4gcmVhZHkKKworCitpZiBoYXNhdHRyKHNlbGVjdCwgJ2Vwb2xsJyk6CisKKyAgICBjbGFzcyBFcG9sbFNlbGVjdG9yKF9CYXNlU2VsZWN0b3JJbXBsKToKKyAgICAgICAgIiIiRXBvbGwtYmFzZWQgc2VsZWN0b3IuIiIiCisKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgc3VwZXIoKS5fX2luaXRfXygpCisgICAgICAgICAgICBzZWxmLl9lcG9sbCA9IHNlbGVjdC5lcG9sbCgpCisKKyAgICAgICAgZGVmIGZpbGVubyhzZWxmKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9lcG9sbC5maWxlbm8oKQorCisgICAgICAgIGRlZiByZWdpc3RlcihzZWxmLCBmaWxlb2JqLCBldmVudHMsIGRhdGE9Tm9uZSk6CisgICAgICAgICAgICBrZXkgPSBzdXBlcigpLnJlZ2lzdGVyKGZpbGVvYmosIGV2ZW50cywgZGF0YSkKKyAgICAgICAgICAgIGVwb2xsX2V2ZW50cyA9IDAKKyAgICAgICAgICAgIGlmIGV2ZW50cyAmIEVWRU5UX1JFQUQ6CisgICAgICAgICAgICAgICAgZXBvbGxfZXZlbnRzIHw9IHNlbGVjdC5FUE9MTElOCisgICAgICAgICAgICBpZiBldmVudHMgJiBFVkVOVF9XUklURToKKyAgICAgICAgICAgICAgICBlcG9sbF9ldmVudHMgfD0gc2VsZWN0LkVQT0xMT1VUCisgICAgICAgICAgICBzZWxmLl9lcG9sbC5yZWdpc3RlcihrZXkuZmQsIGVwb2xsX2V2ZW50cykKKyAgICAgICAgICAgIHJldHVybiBrZXkKKworICAgICAgICBkZWYgdW5yZWdpc3RlcihzZWxmLCBmaWxlb2JqKToKKyAgICAgICAgICAgIGtleSA9IHN1cGVyKCkudW5yZWdpc3RlcihmaWxlb2JqKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuX2Vwb2xsLnVucmVnaXN0ZXIoa2V5LmZkKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgIyBUaGlzIGNhbiBoYXBwZW4gaWYgdGhlIEZEIHdhcyBjbG9zZWQgc2luY2UgaXQKKyAgICAgICAgICAgICAgICAjIHdhcyByZWdpc3RlcmVkLgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIHJldHVybiBrZXkKKworICAgICAgICBkZWYgc2VsZWN0KHNlbGYsIHRpbWVvdXQ9Tm9uZSk6CisgICAgICAgICAgICBpZiB0aW1lb3V0IGlzIE5vbmU6CisgICAgICAgICAgICAgICAgdGltZW91dCA9IC0xCisgICAgICAgICAgICBlbGlmIHRpbWVvdXQgPD0gMDoKKyAgICAgICAgICAgICAgICB0aW1lb3V0ID0gMAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIGVwb2xsX3dhaXQoKSBoYXMgYSByZXNvbHV0aW9uIG9mIDEgbWlsbGlzZWNvbmQsIHJvdW5kIGF3YXkKKyAgICAgICAgICAgICAgICAjIGZyb20gemVybyB0byB3YWl0ICphdCBsZWFzdCogdGltZW91dCBzZWNvbmRzLgorICAgICAgICAgICAgICAgIHRpbWVvdXQgPSBtYXRoLmNlaWwodGltZW91dCAqIDFlMykgKiAxZS0zCisKKyAgICAgICAgICAgICMgZXBvbGxfd2FpdCgpIGV4cGVjdHMgYG1heGV2ZW50c2AgdG8gYmUgZ3JlYXRlciB0aGFuIHplcm87CisgICAgICAgICAgICAjIHdlIHdhbnQgdG8gbWFrZSBzdXJlIHRoYXQgYHNlbGVjdCgpYCBjYW4gYmUgY2FsbGVkIHdoZW4gbm8KKyAgICAgICAgICAgICMgRkQgaXMgcmVnaXN0ZXJlZC4KKyAgICAgICAgICAgIG1heF9ldiA9IG1heChsZW4oc2VsZi5fZmRfdG9fa2V5KSwgMSkKKworICAgICAgICAgICAgcmVhZHkgPSBbXQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGZkX2V2ZW50X2xpc3QgPSBzZWxmLl9lcG9sbC5wb2xsKHRpbWVvdXQsIG1heF9ldikKKyAgICAgICAgICAgIGV4Y2VwdCBJbnRlcnJ1cHRlZEVycm9yOgorICAgICAgICAgICAgICAgIHJldHVybiByZWFkeQorICAgICAgICAgICAgZm9yIGZkLCBldmVudCBpbiBmZF9ldmVudF9saXN0OgorICAgICAgICAgICAgICAgIGV2ZW50cyA9IDAKKyAgICAgICAgICAgICAgICBpZiBldmVudCAmIH5zZWxlY3QuRVBPTExJTjoKKyAgICAgICAgICAgICAgICAgICAgZXZlbnRzIHw9IEVWRU5UX1dSSVRFCisgICAgICAgICAgICAgICAgaWYgZXZlbnQgJiB+c2VsZWN0LkVQT0xMT1VUOgorICAgICAgICAgICAgICAgICAgICBldmVudHMgfD0gRVZFTlRfUkVBRAorCisgICAgICAgICAgICAgICAga2V5ID0gc2VsZi5fa2V5X2Zyb21fZmQoZmQpCisgICAgICAgICAgICAgICAgaWYga2V5OgorICAgICAgICAgICAgICAgICAgICByZWFkeS5hcHBlbmQoKGtleSwgZXZlbnRzICYga2V5LmV2ZW50cykpCisgICAgICAgICAgICByZXR1cm4gcmVhZHkKKworICAgICAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5fZXBvbGwuY2xvc2UoKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBzdXBlcigpLmNsb3NlKCkKKworCitpZiBoYXNhdHRyKHNlbGVjdCwgJ2txdWV1ZScpOgorCisgICAgY2xhc3MgS3F1ZXVlU2VsZWN0b3IoX0Jhc2VTZWxlY3RvckltcGwpOgorICAgICAgICAiIiJLcXVldWUtYmFzZWQgc2VsZWN0b3IuIiIiCisKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgc3VwZXIoKS5fX2luaXRfXygpCisgICAgICAgICAgICBzZWxmLl9rcXVldWUgPSBzZWxlY3Qua3F1ZXVlKCkKKworICAgICAgICBkZWYgZmlsZW5vKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2txdWV1ZS5maWxlbm8oKQorCisgICAgICAgIGRlZiByZWdpc3RlcihzZWxmLCBmaWxlb2JqLCBldmVudHMsIGRhdGE9Tm9uZSk6CisgICAgICAgICAgICBrZXkgPSBzdXBlcigpLnJlZ2lzdGVyKGZpbGVvYmosIGV2ZW50cywgZGF0YSkKKyAgICAgICAgICAgIGlmIGV2ZW50cyAmIEVWRU5UX1JFQUQ6CisgICAgICAgICAgICAgICAga2V2ID0gc2VsZWN0LmtldmVudChrZXkuZmQsIHNlbGVjdC5LUV9GSUxURVJfUkVBRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdC5LUV9FVl9BREQpCisgICAgICAgICAgICAgICAgc2VsZi5fa3F1ZXVlLmNvbnRyb2woW2tldl0sIDAsIDApCisgICAgICAgICAgICBpZiBldmVudHMgJiBFVkVOVF9XUklURToKKyAgICAgICAgICAgICAgICBrZXYgPSBzZWxlY3Qua2V2ZW50KGtleS5mZCwgc2VsZWN0LktRX0ZJTFRFUl9XUklURSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdC5LUV9FVl9BREQpCisgICAgICAgICAgICAgICAgc2VsZi5fa3F1ZXVlLmNvbnRyb2woW2tldl0sIDAsIDApCisgICAgICAgICAgICByZXR1cm4ga2V5CisKKyAgICAgICAgZGVmIHVucmVnaXN0ZXIoc2VsZiwgZmlsZW9iaik6CisgICAgICAgICAgICBrZXkgPSBzdXBlcigpLnVucmVnaXN0ZXIoZmlsZW9iaikKKyAgICAgICAgICAgIGlmIGtleS5ldmVudHMgJiBFVkVOVF9SRUFEOgorICAgICAgICAgICAgICAgIGtldiA9IHNlbGVjdC5rZXZlbnQoa2V5LmZkLCBzZWxlY3QuS1FfRklMVEVSX1JFQUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3QuS1FfRVZfREVMRVRFKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fa3F1ZXVlLmNvbnRyb2woW2tldl0sIDAsIDApCisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICMgVGhpcyBjYW4gaGFwcGVuIGlmIHRoZSBGRCB3YXMgY2xvc2VkIHNpbmNlIGl0CisgICAgICAgICAgICAgICAgICAgICMgd2FzIHJlZ2lzdGVyZWQuCisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGlmIGtleS5ldmVudHMgJiBFVkVOVF9XUklURToKKyAgICAgICAgICAgICAgICBrZXYgPSBzZWxlY3Qua2V2ZW50KGtleS5mZCwgc2VsZWN0LktRX0ZJTFRFUl9XUklURSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdC5LUV9FVl9ERUxFVEUpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9rcXVldWUuY29udHJvbChba2V2XSwgMCwgMCkKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgIyBTZWUgY29tbWVudCBhYm92ZS4KKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgcmV0dXJuIGtleQorCisgICAgICAgIGRlZiBzZWxlY3Qoc2VsZiwgdGltZW91dD1Ob25lKToKKyAgICAgICAgICAgIHRpbWVvdXQgPSBOb25lIGlmIHRpbWVvdXQgaXMgTm9uZSBlbHNlIG1heCh0aW1lb3V0LCAwKQorICAgICAgICAgICAgbWF4X2V2ID0gbGVuKHNlbGYuX2ZkX3RvX2tleSkKKyAgICAgICAgICAgIHJlYWR5ID0gW10KKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBrZXZfbGlzdCA9IHNlbGYuX2txdWV1ZS5jb250cm9sKE5vbmUsIG1heF9ldiwgdGltZW91dCkKKyAgICAgICAgICAgIGV4Y2VwdCBJbnRlcnJ1cHRlZEVycm9yOgorICAgICAgICAgICAgICAgIHJldHVybiByZWFkeQorICAgICAgICAgICAgZm9yIGtldiBpbiBrZXZfbGlzdDoKKyAgICAgICAgICAgICAgICBmZCA9IGtldi5pZGVudAorICAgICAgICAgICAgICAgIGZsYWcgPSBrZXYuZmlsdGVyCisgICAgICAgICAgICAgICAgZXZlbnRzID0gMAorICAgICAgICAgICAgICAgIGlmIGZsYWcgPT0gc2VsZWN0LktRX0ZJTFRFUl9SRUFEOgorICAgICAgICAgICAgICAgICAgICBldmVudHMgfD0gRVZFTlRfUkVBRAorICAgICAgICAgICAgICAgIGlmIGZsYWcgPT0gc2VsZWN0LktRX0ZJTFRFUl9XUklURToKKyAgICAgICAgICAgICAgICAgICAgZXZlbnRzIHw9IEVWRU5UX1dSSVRFCisKKyAgICAgICAgICAgICAgICBrZXkgPSBzZWxmLl9rZXlfZnJvbV9mZChmZCkKKyAgICAgICAgICAgICAgICBpZiBrZXk6CisgICAgICAgICAgICAgICAgICAgIHJlYWR5LmFwcGVuZCgoa2V5LCBldmVudHMgJiBrZXkuZXZlbnRzKSkKKyAgICAgICAgICAgIHJldHVybiByZWFkeQorCisgICAgICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLl9rcXVldWUuY2xvc2UoKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBzdXBlcigpLmNsb3NlKCkKKworCisjIENob29zZSB0aGUgYmVzdCBpbXBsZW1lbnRhdGlvbjogcm91Z2hseSwgZXBvbGx8a3F1ZXVlID4gcG9sbCA+IHNlbGVjdC4KKyMgc2VsZWN0KCkgYWxzbyBjYW4ndCBhY2NlcHQgYSBGRCA+IEZEX1NFVFNJWkUgKHVzdWFsbHkgYXJvdW5kIDEwMjQpCitpZiAnS3F1ZXVlU2VsZWN0b3InIGluIGdsb2JhbHMoKToKKyAgICBEZWZhdWx0U2VsZWN0b3IgPSBLcXVldWVTZWxlY3RvcgorZWxpZiAnRXBvbGxTZWxlY3RvcicgaW4gZ2xvYmFscygpOgorICAgIERlZmF1bHRTZWxlY3RvciA9IEVwb2xsU2VsZWN0b3IKK2VsaWYgJ1BvbGxTZWxlY3RvcicgaW4gZ2xvYmFscygpOgorICAgIERlZmF1bHRTZWxlY3RvciA9IFBvbGxTZWxlY3RvcgorZWxzZToKKyAgICBEZWZhdWx0U2VsZWN0b3IgPSBTZWxlY3RTZWxlY3RvcgpkaWZmIC0tZ2l0IGEvTGliL3NoZWx2ZS5weSBiL0xpYi9zaGVsdmUucHkKaW5kZXggY2MxODE1ZS4uNTgxYmFmMSAxMDA2NDQKLS0tIGEvTGliL3NoZWx2ZS5weQorKysgYi9MaWIvc2hlbHZlLnB5CkBAIC02MSw3ICs2MSw3IEBACiAKIGltcG9ydCBjb2xsZWN0aW9ucwogCi1fX2FsbF9fID0gWyJTaGVsZiIsIkJzZERiU2hlbGYiLCJEYmZpbGVuYW1lU2hlbGYiLCJvcGVuIl0KK19fYWxsX18gPSBbIlNoZWxmIiwgIkJzZERiU2hlbGYiLCAiRGJmaWxlbmFtZVNoZWxmIiwgIm9wZW4iXQogCiBjbGFzcyBfQ2xvc2VkRGljdChjb2xsZWN0aW9ucy5NdXRhYmxlTWFwcGluZyk6CiAgICAgJ01hcmtlciBmb3IgYSBjbG9zZWQgZGljdC4gIEFjY2VzcyBhdHRlbXB0cyByYWlzZSBhIFZhbHVlRXJyb3IuJwpAQCAtMTMxLDIyICsxMzEsMzMgQEAKICAgICAgICAgZXhjZXB0IEtleUVycm9yOgogICAgICAgICAgICAgcGFzcwogCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCB0eXBlLCB2YWx1ZSwgdHJhY2ViYWNrKToKKyAgICAgICAgc2VsZi5jbG9zZSgpCisKICAgICBkZWYgY2xvc2Uoc2VsZik6Ci0gICAgICAgIHNlbGYuc3luYygpCisgICAgICAgIGlmIHNlbGYuZGljdCBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYuZGljdC5jbG9zZSgpCi0gICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgIyBDYXRjaCBlcnJvcnMgdGhhdCBtYXkgaGFwcGVuIHdoZW4gY2xvc2UgaXMgY2FsbGVkIGZyb20gX19kZWxfXwotICAgICAgICAjIGJlY2F1c2UgQ1B5dGhvbiBpcyBpbiBpbnRlcnByZXRlciBzaHV0ZG93bi4KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgc2VsZi5kaWN0ID0gX0Nsb3NlZERpY3QoKQotICAgICAgICBleGNlcHQgKE5hbWVFcnJvciwgVHlwZUVycm9yKToKLSAgICAgICAgICAgIHNlbGYuZGljdCA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYuc3luYygpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5kaWN0LmNsb3NlKCkKKyAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAjIENhdGNoIGVycm9ycyB0aGF0IG1heSBoYXBwZW4gd2hlbiBjbG9zZSBpcyBjYWxsZWQgZnJvbSBfX2RlbF9fCisgICAgICAgICAgICAjIGJlY2F1c2UgQ1B5dGhvbiBpcyBpbiBpbnRlcnByZXRlciBzaHV0ZG93bi4KKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLmRpY3QgPSBfQ2xvc2VkRGljdCgpCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgc2VsZi5kaWN0ID0gTm9uZQogCiAgICAgZGVmIF9fZGVsX18oc2VsZik6CiAgICAgICAgIGlmIG5vdCBoYXNhdHRyKHNlbGYsICd3cml0ZWJhY2snKToKICAgICAgICAgICAgICMgX19pbml0X18gZGlkbid0IHN1Y2NlZWQsIHNvIGRvbid0IGJvdGhlciBjbG9zaW5nCisgICAgICAgICAgICAjIHNlZSBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTMzOTAwNyBmb3IgZGV0YWlscwogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIHNlbGYuY2xvc2UoKQogCmRpZmYgLS1naXQgYS9MaWIvc2hsZXgucHkgYi9MaWIvc2hsZXgucHkKaW5kZXggNjlmM2I0NS4uNDY3MjU1MyAxMDA2NDQKLS0tIGEvTGliL3NobGV4LnB5CisrKyBiL0xpYi9zaGxleC5weQpAQCAtMjkwLDE1ICsyOTAsMTcgQEAKICAgICByZXR1cm4gIiciICsgcy5yZXBsYWNlKCInIiwgIidcIidcIiciKSArICInIgogCiAKLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgaWYgbGVuKHN5cy5hcmd2KSA9PSAxOgotICAgICAgICBsZXhlciA9IHNobGV4KCkKLSAgICBlbHNlOgotICAgICAgICBmaWxlID0gc3lzLmFyZ3ZbMV0KLSAgICAgICAgbGV4ZXIgPSBzaGxleChvcGVuKGZpbGUpLCBmaWxlKQorZGVmIF9wcmludF90b2tlbnMobGV4ZXIpOgogICAgIHdoaWxlIDE6CiAgICAgICAgIHR0ID0gbGV4ZXIuZ2V0X3Rva2VuKCkKLSAgICAgICAgaWYgdHQ6Ci0gICAgICAgICAgICBwcmludCgiVG9rZW46ICIgKyByZXByKHR0KSkKLSAgICAgICAgZWxzZToKKyAgICAgICAgaWYgbm90IHR0OgogICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgcHJpbnQoIlRva2VuOiAiICsgcmVwcih0dCkpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgaWYgbGVuKHN5cy5hcmd2KSA9PSAxOgorICAgICAgICBfcHJpbnRfdG9rZW5zKHNobGV4KCkpCisgICAgZWxzZToKKyAgICAgICAgZm4gPSBzeXMuYXJndlsxXQorICAgICAgICB3aXRoIG9wZW4oZm4pIGFzIGY6CisgICAgICAgICAgICBfcHJpbnRfdG9rZW5zKHNobGV4KGYsIGZuKSkKZGlmZiAtLWdpdCBhL0xpYi9zaHV0aWwucHkgYi9MaWIvc2h1dGlsLnB5CmluZGV4IDVhNGQ0ZjYuLmQ3NjdhMGMgMTAwNjQ0Ci0tLSBhL0xpYi9zaHV0aWwucHkKKysrIGIvTGliL3NodXRpbC5weQpAQCAtMzYsMjAgKzM2LDI0IEBACiAgICAgICAgICAgICJyZWdpc3Rlcl9hcmNoaXZlX2Zvcm1hdCIsICJ1bnJlZ2lzdGVyX2FyY2hpdmVfZm9ybWF0IiwKICAgICAgICAgICAgImdldF91bnBhY2tfZm9ybWF0cyIsICJyZWdpc3Rlcl91bnBhY2tfZm9ybWF0IiwKICAgICAgICAgICAgInVucmVnaXN0ZXJfdW5wYWNrX2Zvcm1hdCIsICJ1bnBhY2tfYXJjaGl2ZSIsCi0gICAgICAgICAgICJpZ25vcmVfcGF0dGVybnMiLCAiY2hvd24iLCAid2hpY2giXQorICAgICAgICAgICAiaWdub3JlX3BhdHRlcm5zIiwgImNob3duIiwgIndoaWNoIiwgImdldF90ZXJtaW5hbF9zaXplIiwKKyAgICAgICAgICAgIlNhbWVGaWxlRXJyb3IiXQogICAgICAgICAgICAjIGRpc2tfdXNhZ2UgaXMgYWRkZWQgbGF0ZXIsIGlmIGF2YWlsYWJsZSBvbiB0aGUgcGxhdGZvcm0KIAotY2xhc3MgRXJyb3IoRW52aXJvbm1lbnRFcnJvcik6CitjbGFzcyBFcnJvcihPU0Vycm9yKToKICAgICBwYXNzCiAKLWNsYXNzIFNwZWNpYWxGaWxlRXJyb3IoRW52aXJvbm1lbnRFcnJvcik6CitjbGFzcyBTYW1lRmlsZUVycm9yKEVycm9yKToKKyAgICAiIiJSYWlzZWQgd2hlbiBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFyZSB0aGUgc2FtZSBmaWxlLiIiIgorCitjbGFzcyBTcGVjaWFsRmlsZUVycm9yKE9TRXJyb3IpOgogICAgICIiIlJhaXNlZCB3aGVuIHRyeWluZyB0byBkbyBhIGtpbmQgb2Ygb3BlcmF0aW9uIChlLmcuIGNvcHlpbmcpIHdoaWNoIGlzCiAgICAgbm90IHN1cHBvcnRlZCBvbiBhIHNwZWNpYWwgZmlsZSAoZS5nLiBhIG5hbWVkIHBpcGUpIiIiCiAKLWNsYXNzIEV4ZWNFcnJvcihFbnZpcm9ubWVudEVycm9yKToKK2NsYXNzIEV4ZWNFcnJvcihPU0Vycm9yKToKICAgICAiIiJSYWlzZWQgd2hlbiBhIGNvbW1hbmQgY291bGQgbm90IGJlIGV4ZWN1dGVkIiIiCiAKLWNsYXNzIFJlYWRFcnJvcihFbnZpcm9ubWVudEVycm9yKToKK2NsYXNzIFJlYWRFcnJvcihPU0Vycm9yKToKICAgICAiIiJSYWlzZWQgd2hlbiBhbiBhcmNoaXZlIGNhbm5vdCBiZSByZWFkIiIiCiAKIGNsYXNzIFJlZ2lzdHJ5RXJyb3IoRXhjZXB0aW9uKToKQEAgLTU3LDExICs2MSw2IEBACiAgICAgYW5kIHVucGFja2luZyByZWdpc3RlcmllcyBmYWlscyIiIgogCiAKLXRyeToKLSAgICBXaW5kb3dzRXJyb3IKLWV4Y2VwdCBOYW1lRXJyb3I6Ci0gICAgV2luZG93c0Vycm9yID0gTm9uZQotCiBkZWYgY29weWZpbGVvYmooZnNyYywgZmRzdCwgbGVuZ3RoPTE2KjEwMjQpOgogICAgICIiImNvcHkgZGF0YSBmcm9tIGZpbGUtbGlrZSBvYmplY3QgZnNyYyB0byBmaWxlLWxpa2Ugb2JqZWN0IGZkc3QiIiIKICAgICB3aGlsZSAxOgpAQCAtOTAsNyArODksNyBAQAogCiAgICAgIiIiCiAgICAgaWYgX3NhbWVmaWxlKHNyYywgZHN0KToKLSAgICAgICAgcmFpc2UgRXJyb3IoImAlc2AgYW5kIGAlc2AgYXJlIHRoZSBzYW1lIGZpbGUiICUgKHNyYywgZHN0KSkKKyAgICAgICAgcmFpc2UgU2FtZUZpbGVFcnJvcigieyFyfSBhbmQgeyFyfSBhcmUgdGhlIHNhbWUgZmlsZSIuZm9ybWF0KHNyYywgZHN0KSkKIAogICAgIGZvciBmbiBpbiBbc3JjLCBkc3RdOgogICAgICAgICB0cnk6CkBAIC0yMjEsNiArMjIwLDkgQEAKICAgICBJZiBmb2xsb3dfc3ltbGlua3MgaXMgZmFsc2UsIHN5bWxpbmtzIHdvbid0IGJlIGZvbGxvd2VkLiBUaGlzCiAgICAgcmVzZW1ibGVzIEdOVSdzICJjcCAtUCBzcmMgZHN0Ii4KIAorICAgIElmIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYXJlIHRoZSBzYW1lIGZpbGUsIGEgU2FtZUZpbGVFcnJvciB3aWxsIGJlCisgICAgcmFpc2VkLgorCiAgICAgIiIiCiAgICAgaWYgb3MucGF0aC5pc2Rpcihkc3QpOgogICAgICAgICBkc3QgPSBvcy5wYXRoLmpvaW4oZHN0LCBvcy5wYXRoLmJhc2VuYW1lKHNyYykpCkBAIC0zMTksNyArMzIxLDExIEBACiAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhsaW5rdG8pIGFuZCBpZ25vcmVfZGFuZ2xpbmdfc3ltbGlua3M6CiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgICAgICAgICAjIG90aGVyd2lzZSBsZXQgdGhlIGNvcHkgb2NjdXJzLiBjb3B5MiB3aWxsIHJhaXNlIGFuIGVycm9yCi0gICAgICAgICAgICAgICAgICAgIGNvcHlfZnVuY3Rpb24oc3JjbmFtZSwgZHN0bmFtZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5pc2RpcihzcmNuYW1lKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvcHl0cmVlKHNyY25hbWUsIGRzdG5hbWUsIHN5bWxpbmtzLCBpZ25vcmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3B5X2Z1bmN0aW9uKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgY29weV9mdW5jdGlvbihzcmNuYW1lLCBkc3RuYW1lKQogICAgICAgICAgICAgZWxpZiBvcy5wYXRoLmlzZGlyKHNyY25hbWUpOgogICAgICAgICAgICAgICAgIGNvcHl0cmVlKHNyY25hbWUsIGRzdG5hbWUsIHN5bWxpbmtzLCBpZ25vcmUsIGNvcHlfZnVuY3Rpb24pCiAgICAgICAgICAgICBlbHNlOgpAQCAtMzI5LDE1ICszMzUsMTMgQEAKICAgICAgICAgIyBjb250aW51ZSB3aXRoIG90aGVyIGZpbGVzCiAgICAgICAgIGV4Y2VwdCBFcnJvciBhcyBlcnI6CiAgICAgICAgICAgICBlcnJvcnMuZXh0ZW5kKGVyci5hcmdzWzBdKQotICAgICAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvciBhcyB3aHk6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIHdoeToKICAgICAgICAgICAgIGVycm9ycy5hcHBlbmQoKHNyY25hbWUsIGRzdG5hbWUsIHN0cih3aHkpKSkKICAgICB0cnk6CiAgICAgICAgIGNvcHlzdGF0KHNyYywgZHN0KQogICAgIGV4Y2VwdCBPU0Vycm9yIGFzIHdoeToKLSAgICAgICAgaWYgV2luZG93c0Vycm9yIGlzIG5vdCBOb25lIGFuZCBpc2luc3RhbmNlKHdoeSwgV2luZG93c0Vycm9yKToKLSAgICAgICAgICAgICMgQ29weWluZyBmaWxlIGFjY2VzcyB0aW1lcyBtYXkgZmFpbCBvbiBXaW5kb3dzCi0gICAgICAgICAgICBwYXNzCi0gICAgICAgIGVsc2U6CisgICAgICAgICMgQ29weWluZyBmaWxlIGFjY2VzcyB0aW1lcyBtYXkgZmFpbCBvbiBXaW5kb3dzCisgICAgICAgIGlmIGdldGF0dHIod2h5LCAnd2luZXJyb3InLCBOb25lKSBpcyBOb25lOgogICAgICAgICAgICAgZXJyb3JzLmFwcGVuZCgoc3JjLCBkc3QsIHN0cih3aHkpKSkKICAgICBpZiBlcnJvcnM6CiAgICAgICAgIHJhaXNlIEVycm9yKGVycm9ycykKQEAgLTM1NiwyNCArMzYwLDI0IEBACiAgICAgbmFtZXMgPSBbXQogICAgIHRyeToKICAgICAgICAgbmFtZXMgPSBvcy5saXN0ZGlyKHBhdGgpCi0gICAgZXhjZXB0IG9zLmVycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICBvbmVycm9yKG9zLmxpc3RkaXIsIHBhdGgsIHN5cy5leGNfaW5mbygpKQogICAgIGZvciBuYW1lIGluIG5hbWVzOgogICAgICAgICBmdWxsbmFtZSA9IG9zLnBhdGguam9pbihwYXRoLCBuYW1lKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBtb2RlID0gb3MubHN0YXQoZnVsbG5hbWUpLnN0X21vZGUKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIG1vZGUgPSAwCiAgICAgICAgIGlmIHN0YXQuU19JU0RJUihtb2RlKToKICAgICAgICAgICAgIF9ybXRyZWVfdW5zYWZlKGZ1bGxuYW1lLCBvbmVycm9yKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIG9zLnVubGluayhmdWxsbmFtZSkKLSAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIG9uZXJyb3Iob3MudW5saW5rLCBmdWxsbmFtZSwgc3lzLmV4Y19pbmZvKCkpCiAgICAgdHJ5OgogICAgICAgICBvcy5ybWRpcihwYXRoKQotICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgb25lcnJvcihvcy5ybWRpciwgcGF0aCwgc3lzLmV4Y19pbmZvKCkpCiAKICMgVmVyc2lvbiB1c2luZyBmZC1iYXNlZCBBUElzIHRvIHByb3RlY3QgYWdhaW5zdCByYWNlcwpAQCAtNDY0LDcgKzQ2OCw3IEBACiAgICAgICAgICAgICAgICAgX3JtdHJlZV9zYWZlX2ZkKGZkLCBwYXRoLCBvbmVycm9yKQogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgb3Mucm1kaXIocGF0aCkKLSAgICAgICAgICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgIG9uZXJyb3Iob3Mucm1kaXIsIHBhdGgsIHN5cy5leGNfaW5mbygpKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICB0cnk6CkBAIC02MDAsNyArNjA0LDcgQEAKICAgICBhcmNoaXZlX25hbWUgPSBiYXNlX25hbWUgKyAnLnRhcicgKyBjb21wcmVzc19leHQuZ2V0KGNvbXByZXNzLCAnJykKICAgICBhcmNoaXZlX2RpciA9IG9zLnBhdGguZGlybmFtZShhcmNoaXZlX25hbWUpCiAKLSAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoYXJjaGl2ZV9kaXIpOgorICAgIGlmIGFyY2hpdmVfZGlyIGFuZCBub3Qgb3MucGF0aC5leGlzdHMoYXJjaGl2ZV9kaXIpOgogICAgICAgICBpZiBsb2dnZXIgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBsb2dnZXIuaW5mbygiY3JlYXRpbmcgJXMiLCBhcmNoaXZlX2RpcikKICAgICAgICAgaWYgbm90IGRyeV9ydW46CkBAIC02NjAsNyArNjY0LDcgQEAKICAgICB6aXBfZmlsZW5hbWUgPSBiYXNlX25hbWUgKyAiLnppcCIKICAgICBhcmNoaXZlX2RpciA9IG9zLnBhdGguZGlybmFtZShiYXNlX25hbWUpCiAKLSAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoYXJjaGl2ZV9kaXIpOgorICAgIGlmIGFyY2hpdmVfZGlyIGFuZCBub3Qgb3MucGF0aC5leGlzdHMoYXJjaGl2ZV9kaXIpOgogICAgICAgICBpZiBsb2dnZXIgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBsb2dnZXIuaW5mbygiY3JlYXRpbmcgJXMiLCBhcmNoaXZlX2RpcikKICAgICAgICAgaWYgbm90IGRyeV9ydW46CkBAIC02ODMsNyArNjg3LDE2IEBACiAgICAgICAgIGlmIG5vdCBkcnlfcnVuOgogICAgICAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoemlwX2ZpbGVuYW1lLCAidyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wcmVzc2lvbj16aXBmaWxlLlpJUF9ERUZMQVRFRCkgYXMgemY6CisgICAgICAgICAgICAgICAgcGF0aCA9IG9zLnBhdGgubm9ybXBhdGgoYmFzZV9kaXIpCisgICAgICAgICAgICAgICAgemYud3JpdGUocGF0aCwgcGF0aCkKKyAgICAgICAgICAgICAgICBpZiBsb2dnZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJhZGRpbmcgJyVzJyIsIHBhdGgpCiAgICAgICAgICAgICAgICAgZm9yIGRpcnBhdGgsIGRpcm5hbWVzLCBmaWxlbmFtZXMgaW4gb3Mud2FsayhiYXNlX2Rpcik6CisgICAgICAgICAgICAgICAgICAgIGZvciBuYW1lIGluIHNvcnRlZChkaXJuYW1lcyk6CisgICAgICAgICAgICAgICAgICAgICAgICBwYXRoID0gb3MucGF0aC5ub3JtcGF0aChvcy5wYXRoLmpvaW4oZGlycGF0aCwgbmFtZSkpCisgICAgICAgICAgICAgICAgICAgICAgICB6Zi53cml0ZShwYXRoLCBwYXRoKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbG9nZ2VyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJhZGRpbmcgJyVzJyIsIHBhdGgpCiAgICAgICAgICAgICAgICAgICAgIGZvciBuYW1lIGluIGZpbGVuYW1lczoKICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGggPSBvcy5wYXRoLm5vcm1wYXRoKG9zLnBhdGguam9pbihkaXJwYXRoLCBuYW1lKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKHBhdGgpOgpkaWZmIC0tZ2l0IGEvTGliL3NpdGUucHkgYi9MaWIvc2l0ZS5weQppbmRleCA3ZTA5NzAxLi4zYzg1ODRiIDEwMDY0NAotLS0gYS9MaWIvc2l0ZS5weQorKysgYi9MaWIvc2l0ZS5weQpAQCAtNTgsMTcgKzU4LDIwIEBACiBiZWNhdXNlIGJhci5wdGggY29tZXMgYWxwaGFiZXRpY2FsbHkgYmVmb3JlIGZvby5wdGg7IGFuZCBzcGFtIGlzCiBvbWl0dGVkIGJlY2F1c2UgaXQgaXMgbm90IG1lbnRpb25lZCBpbiBlaXRoZXIgcGF0aCBjb25maWd1cmF0aW9uIGZpbGUuCiAKLUFmdGVyIHRoZXNlIHBhdGggbWFuaXB1bGF0aW9ucywgYW4gYXR0ZW1wdCBpcyBtYWRlIHRvIGltcG9ydCBhIG1vZHVsZQorVGhlIHJlYWRsaW5lIG1vZHVsZSBpcyBhbHNvIGF1dG9tYXRpY2FsbHkgY29uZmlndXJlZCB0byBlbmFibGUKK2NvbXBsZXRpb24gZm9yIHN5c3RlbXMgdGhhdCBzdXBwb3J0IGl0LiAgVGhpcyBjYW4gYmUgb3ZlcnJpZGVuIGluCitzaXRlY3VzdG9taXplLCB1c2VyY3VzdG9taXplIG9yIFBZVEhPTlNUQVJUVVAuCisKK0FmdGVyIHRoZXNlIG9wZXJhdGlvbnMsIGFuIGF0dGVtcHQgaXMgbWFkZSB0byBpbXBvcnQgYSBtb2R1bGUKIG5hbWVkIHNpdGVjdXN0b21pemUsIHdoaWNoIGNhbiBwZXJmb3JtIGFyYml0cmFyeSBhZGRpdGlvbmFsCiBzaXRlLXNwZWNpZmljIGN1c3RvbWl6YXRpb25zLiAgSWYgdGhpcyBpbXBvcnQgZmFpbHMgd2l0aCBhbgogSW1wb3J0RXJyb3IgZXhjZXB0aW9uLCBpdCBpcyBzaWxlbnRseSBpZ25vcmVkLgotCiAiIiIKIAogaW1wb3J0IHN5cwogaW1wb3J0IG9zCi1pbXBvcnQgcmUKIGltcG9ydCBidWlsdGlucworaW1wb3J0IF9zaXRlYnVpbHRpbnMKIAogIyBQcmVmaXhlcyBmb3Igc2l0ZS1wYWNrYWdlczsgYWRkIGFkZGl0aW9uYWwgcHJlZml4ZXMgbGlrZSAvdXNyL2xvY2FsIGhlcmUKIFBSRUZJWEVTID0gW3N5cy5wcmVmaXgsIHN5cy5leGVjX3ByZWZpeF0KQEAgLTE0NiwxNCArMTQ5LDE0IEBACiAgICAgICAgYW5kIGFkZCB0aGF0IHRvIGtub3duX3BhdGhzLCBvciBleGVjdXRlIGl0IGlmIGl0IHN0YXJ0cyB3aXRoICdpbXBvcnQgJy4KICAgICAiIiIKICAgICBpZiBrbm93bl9wYXRocyBpcyBOb25lOgotICAgICAgICBfaW5pdF9wYXRoaW5mbygpCisgICAgICAgIGtub3duX3BhdGhzID0gX2luaXRfcGF0aGluZm8oKQogICAgICAgICByZXNldCA9IDEKICAgICBlbHNlOgogICAgICAgICByZXNldCA9IDAKICAgICBmdWxsbmFtZSA9IG9zLnBhdGguam9pbihzaXRlZGlyLCBuYW1lKQogICAgIHRyeToKICAgICAgICAgZiA9IG9wZW4oZnVsbG5hbWUsICJyIikKLSAgICBleGNlcHQgSU9FcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcmV0dXJuCiAgICAgd2l0aCBmOgogICAgICAgICBmb3IgbiwgbGluZSBpbiBlbnVtZXJhdGUoZik6CkBAIC0xOTYsNyArMTk5LDcgQEAKICAgICAgICAga25vd25fcGF0aHMuYWRkKHNpdGVkaXJjYXNlKQogICAgIHRyeToKICAgICAgICAgbmFtZXMgPSBvcy5saXN0ZGlyKHNpdGVkaXIpCi0gICAgZXhjZXB0IG9zLmVycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICByZXR1cm4KICAgICBuYW1lcyA9IFtuYW1lIGZvciBuYW1lIGluIG5hbWVzIGlmIG5hbWUuZW5kc3dpdGgoIi5wdGgiKV0KICAgICBmb3IgbmFtZSBpbiBzb3J0ZWQobmFtZXMpOgpAQCAtMzAwLDkgKzMwMyw3IEBACiAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICBzZWVuLmFkZChwcmVmaXgpCiAKLSAgICAgICAgaWYgc3lzLnBsYXRmb3JtIGluICgnb3MyZW14JywgJ3Jpc2NvcycpOgotICAgICAgICAgICAgc2l0ZXBhY2thZ2VzLmFwcGVuZChvcy5wYXRoLmpvaW4ocHJlZml4LCAiTGliIiwgInNpdGUtcGFja2FnZXMiKSkKLSAgICAgICAgZWxpZiBvcy5zZXAgPT0gJy8nOgorICAgICAgICBpZiBvcy5zZXAgPT0gJy8nOgogICAgICAgICAgICAgc2l0ZXBhY2thZ2VzLmFwcGVuZChvcy5wYXRoLmpvaW4ocHJlZml4LCAibGliIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHl0aG9uIiArIHN5cy52ZXJzaW9uWzozXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2l0ZS1wYWNrYWdlcyIpKQpAQCAtMzI1LDI3ICszMjYsMTUgQEAKICAgICAiIiJBZGQgc2l0ZS1wYWNrYWdlcyAoYW5kIHBvc3NpYmx5IHNpdGUtcHl0aG9uKSB0byBzeXMucGF0aCIiIgogICAgIGZvciBzaXRlZGlyIGluIGdldHNpdGVwYWNrYWdlcyhwcmVmaXhlcyk6CiAgICAgICAgIGlmIG9zLnBhdGguaXNkaXIoc2l0ZWRpcik6CisgICAgICAgICAgICBpZiAic2l0ZS1weXRob24iIGluIHNpdGVkaXI6CisgICAgICAgICAgICAgICAgaW1wb3J0IHdhcm5pbmdzCisgICAgICAgICAgICAgICAgd2FybmluZ3Mud2FybignInNpdGUtcHl0aG9uIiBkaXJlY3RvcmllcyB3aWxsIG5vdCBiZSAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3VwcG9ydGVkIGluIDMuNSBhbnltb3JlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZykKICAgICAgICAgICAgIGFkZHNpdGVkaXIoc2l0ZWRpciwga25vd25fcGF0aHMpCiAKICAgICByZXR1cm4ga25vd25fcGF0aHMKIAotZGVmIHNldEJFR0lOTElCUEFUSCgpOgotICAgICIiIlRoZSBPUy8yIEVNWCBwb3J0IGhhcyBvcHRpb25hbCBleHRlbnNpb24gbW9kdWxlcyB0aGF0IGRvIGRvdWJsZSBkdXR5Ci0gICAgYXMgRExMcyAoYW5kIG11c3QgdXNlIHRoZSAuRExMIGZpbGUgZXh0ZW5zaW9uKSBmb3Igb3RoZXIgZXh0ZW5zaW9ucy4KLSAgICBUaGUgbGlicmFyeSBzZWFyY2ggcGF0aCBuZWVkcyB0byBiZSBhbWVuZGVkIHNvIHRoZXNlIHdpbGwgYmUgZm91bmQKLSAgICBkdXJpbmcgbW9kdWxlIGltcG9ydC4gIFVzZSBCRUdJTkxJQlBBVEggc28gdGhhdCB0aGVzZSBhcmUgYXQgdGhlIHN0YXJ0Ci0gICAgb2YgdGhlIGxpYnJhcnkgc2VhcmNoIHBhdGguCi0KLSAgICAiIiIKLSAgICBkbGxwYXRoID0gb3MucGF0aC5qb2luKHN5cy5wcmVmaXgsICJMaWIiLCAibGliLWR5bmxvYWQiKQotICAgIGxpYnBhdGggPSBvcy5lbnZpcm9uWydCRUdJTkxJQlBBVEgnXS5zcGxpdCgnOycpCi0gICAgaWYgbGlicGF0aFstMV06Ci0gICAgICAgIGxpYnBhdGguYXBwZW5kKGRsbHBhdGgpCi0gICAgZWxzZToKLSAgICAgICAgbGlicGF0aFstMV0gPSBkbGxwYXRoCi0gICAgb3MuZW52aXJvblsnQkVHSU5MSUJQQVRIJ10gPSAnOycuam9pbihsaWJwYXRoKQotCi0KIGRlZiBzZXRxdWl0KCk6CiAgICAgIiIiRGVmaW5lIG5ldyBidWlsdGlucyAncXVpdCcgYW5kICdleGl0Jy4KIApAQCAtMzYwLDEyNiArMzQ5LDk0IEBACiAgICAgZWxzZToKICAgICAgICAgZW9mID0gJ0N0cmwtRCAoaS5lLiBFT0YpJwogCi0gICAgY2xhc3MgUXVpdHRlcihvYmplY3QpOgotICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSk6Ci0gICAgICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCi0gICAgICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICAgICAgICAgIHJldHVybiAnVXNlICVzKCkgb3IgJXMgdG8gZXhpdCcgJSAoc2VsZi5uYW1lLCBlb2YpCi0gICAgICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBjb2RlPU5vbmUpOgotICAgICAgICAgICAgIyBTaGVsbHMgbGlrZSBJRExFIGNhdGNoIHRoZSBTeXN0ZW1FeGl0LCBidXQgbGlzdGVuIHdoZW4gdGhlaXIKLSAgICAgICAgICAgICMgc3RkaW4gd3JhcHBlciBpcyBjbG9zZWQuCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgc3lzLnN0ZGluLmNsb3NlKCkKLSAgICAgICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICByYWlzZSBTeXN0ZW1FeGl0KGNvZGUpCi0gICAgYnVpbHRpbnMucXVpdCA9IFF1aXR0ZXIoJ3F1aXQnKQotICAgIGJ1aWx0aW5zLmV4aXQgPSBRdWl0dGVyKCdleGl0JykKKyAgICBidWlsdGlucy5xdWl0ID0gX3NpdGVidWlsdGlucy5RdWl0dGVyKCdxdWl0JywgZW9mKQorICAgIGJ1aWx0aW5zLmV4aXQgPSBfc2l0ZWJ1aWx0aW5zLlF1aXR0ZXIoJ2V4aXQnLCBlb2YpCiAKIAotY2xhc3MgX1ByaW50ZXIob2JqZWN0KToKLSAgICAiIiJpbnRlcmFjdGl2ZSBwcm9tcHQgb2JqZWN0cyBmb3IgcHJpbnRpbmcgdGhlIGxpY2Vuc2UgdGV4dCwgYSBsaXN0IG9mCi0gICAgY29udHJpYnV0b3JzIGFuZCB0aGUgY29weXJpZ2h0IG5vdGljZS4iIiIKLQotICAgIE1BWExJTkVTID0gMjMKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBkYXRhLCBmaWxlcz0oKSwgZGlycz0oKSk6Ci0gICAgICAgIHNlbGYuX19uYW1lID0gbmFtZQotICAgICAgICBzZWxmLl9fZGF0YSA9IGRhdGEKLSAgICAgICAgc2VsZi5fX2ZpbGVzID0gZmlsZXMKLSAgICAgICAgc2VsZi5fX2RpcnMgPSBkaXJzCi0gICAgICAgIHNlbGYuX19saW5lcyA9IE5vbmUKLQotICAgIGRlZiBfX3NldHVwKHNlbGYpOgotICAgICAgICBpZiBzZWxmLl9fbGluZXM6Ci0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgZGF0YSA9IE5vbmUKLSAgICAgICAgZm9yIGRpciBpbiBzZWxmLl9fZGlyczoKLSAgICAgICAgICAgIGZvciBmaWxlbmFtZSBpbiBzZWxmLl9fZmlsZXM6Ci0gICAgICAgICAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4oZGlyLCBmaWxlbmFtZSkKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIGZwID0gb3BlbihmaWxlbmFtZSwgInIiKQotICAgICAgICAgICAgICAgICAgICBkYXRhID0gZnAucmVhZCgpCi0gICAgICAgICAgICAgICAgICAgIGZwLmNsb3NlKCkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKLSAgICAgICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgaWYgZGF0YToKLSAgICAgICAgICAgICAgICBicmVhawotICAgICAgICBpZiBub3QgZGF0YToKLSAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9fZGF0YQotICAgICAgICBzZWxmLl9fbGluZXMgPSBkYXRhLnNwbGl0KCdcbicpCi0gICAgICAgIHNlbGYuX19saW5lY250ID0gbGVuKHNlbGYuX19saW5lcykKLQotICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICAgICAgc2VsZi5fX3NldHVwKCkKLSAgICAgICAgaWYgbGVuKHNlbGYuX19saW5lcykgPD0gc2VsZi5NQVhMSU5FUzoKLSAgICAgICAgICAgIHJldHVybiAiXG4iLmpvaW4oc2VsZi5fX2xpbmVzKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuICJUeXBlICVzKCkgdG8gc2VlIHRoZSBmdWxsICVzIHRleHQiICUgKChzZWxmLl9fbmFtZSwpKjIpCi0KLSAgICBkZWYgX19jYWxsX18oc2VsZik6Ci0gICAgICAgIHNlbGYuX19zZXR1cCgpCi0gICAgICAgIHByb21wdCA9ICdIaXQgUmV0dXJuIGZvciBtb3JlLCBvciBxIChhbmQgUmV0dXJuKSB0byBxdWl0OiAnCi0gICAgICAgIGxpbmVubyA9IDAKLSAgICAgICAgd2hpbGUgMToKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShsaW5lbm8sIGxpbmVubyArIHNlbGYuTUFYTElORVMpOgotICAgICAgICAgICAgICAgICAgICBwcmludChzZWxmLl9fbGluZXNbaV0pCi0gICAgICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKLSAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBsaW5lbm8gKz0gc2VsZi5NQVhMSU5FUwotICAgICAgICAgICAgICAgIGtleSA9IE5vbmUKLSAgICAgICAgICAgICAgICB3aGlsZSBrZXkgaXMgTm9uZToKLSAgICAgICAgICAgICAgICAgICAga2V5ID0gaW5wdXQocHJvbXB0KQotICAgICAgICAgICAgICAgICAgICBpZiBrZXkgbm90IGluICgnJywgJ3EnKToKLSAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9IE5vbmUKLSAgICAgICAgICAgICAgICBpZiBrZXkgPT0gJ3EnOgotICAgICAgICAgICAgICAgICAgICBicmVhawotCiBkZWYgc2V0Y29weXJpZ2h0KCk6CiAgICAgIiIiU2V0ICdjb3B5cmlnaHQnIGFuZCAnY3JlZGl0cycgaW4gYnVpbHRpbnMiIiIKLSAgICBidWlsdGlucy5jb3B5cmlnaHQgPSBfUHJpbnRlcigiY29weXJpZ2h0Iiwgc3lzLmNvcHlyaWdodCkKKyAgICBidWlsdGlucy5jb3B5cmlnaHQgPSBfc2l0ZWJ1aWx0aW5zLl9QcmludGVyKCJjb3B5cmlnaHQiLCBzeXMuY29weXJpZ2h0KQogICAgIGlmIHN5cy5wbGF0Zm9ybVs6NF0gPT0gJ2phdmEnOgotICAgICAgICBidWlsdGlucy5jcmVkaXRzID0gX1ByaW50ZXIoCisgICAgICAgIGJ1aWx0aW5zLmNyZWRpdHMgPSBfc2l0ZWJ1aWx0aW5zLl9QcmludGVyKAogICAgICAgICAgICAgImNyZWRpdHMiLAogICAgICAgICAgICAgIkp5dGhvbiBpcyBtYWludGFpbmVkIGJ5IHRoZSBKeXRob24gZGV2ZWxvcGVycyAod3d3Lmp5dGhvbi5vcmcpLiIpCiAgICAgZWxzZToKLSAgICAgICAgYnVpbHRpbnMuY3JlZGl0cyA9IF9QcmludGVyKCJjcmVkaXRzIiwgIiIiXAorICAgICAgICBidWlsdGlucy5jcmVkaXRzID0gX3NpdGVidWlsdGlucy5fUHJpbnRlcigiY3JlZGl0cyIsICIiIlwKICAgICBUaGFua3MgdG8gQ1dJLCBDTlJJLCBCZU9wZW4uY29tLCBab3BlIENvcnBvcmF0aW9uIGFuZCBhIGNhc3Qgb2YgdGhvdXNhbmRzCiAgICAgZm9yIHN1cHBvcnRpbmcgUHl0aG9uIGRldmVsb3BtZW50LiAgU2VlIHd3dy5weXRob24ub3JnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIiIikKLSAgICBoZXJlID0gb3MucGF0aC5kaXJuYW1lKG9zLl9fZmlsZV9fKQotICAgIGJ1aWx0aW5zLmxpY2Vuc2UgPSBfUHJpbnRlcigKKyAgICBmaWxlcywgZGlycyA9IFtdLCBbXQorICAgICMgTm90IGFsbCBtb2R1bGVzIGFyZSByZXF1aXJlZCB0byBoYXZlIGEgX19maWxlX18gYXR0cmlidXRlLiAgU2VlCisgICAgIyBQRVAgNDIwIGZvciBtb3JlIGRldGFpbHMuCisgICAgaWYgaGFzYXR0cihvcywgJ19fZmlsZV9fJyk6CisgICAgICAgIGhlcmUgPSBvcy5wYXRoLmRpcm5hbWUob3MuX19maWxlX18pCisgICAgICAgIGZpbGVzLmV4dGVuZChbIkxJQ0VOU0UudHh0IiwgIkxJQ0VOU0UiXSkKKyAgICAgICAgZGlycy5leHRlbmQoW29zLnBhdGguam9pbihoZXJlLCBvcy5wYXJkaXIpLCBoZXJlLCBvcy5jdXJkaXJdKQorICAgIGJ1aWx0aW5zLmxpY2Vuc2UgPSBfc2l0ZWJ1aWx0aW5zLl9QcmludGVyKAogICAgICAgICAibGljZW5zZSIsCi0gICAgICAgICJTZWUgaHR0cDovL3d3dy5weXRob24ub3JnL2Rvd25sb2FkL3JlbGVhc2VzLyUuNXMvbGljZW5zZS8iICUgc3lzLnZlcnNpb24sCi0gICAgICAgIFsiTElDRU5TRS50eHQiLCAiTElDRU5TRSJdLAotICAgICAgICBbb3MucGF0aC5qb2luKGhlcmUsIG9zLnBhcmRpciksIGhlcmUsIG9zLmN1cmRpcl0pCisgICAgICAgICJTZWUgaHR0cHM6Ly93d3cucHl0aG9uLm9yZy9wc2YvbGljZW5zZS8iLAorICAgICAgICBmaWxlcywgZGlycykKIAogCi1jbGFzcyBfSGVscGVyKG9iamVjdCk6Ci0gICAgIiIiRGVmaW5lIHRoZSBidWlsdGluICdoZWxwJy4KLSAgICBUaGlzIGlzIGEgd3JhcHBlciBhcm91bmQgcHlkb2MuaGVscCAod2l0aCBhIHR3aXN0KS4KLQotICAgICIiIgotCi0gICAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgICAgICByZXR1cm4gIlR5cGUgaGVscCgpIGZvciBpbnRlcmFjdGl2ZSBoZWxwLCAiIFwKLSAgICAgICAgICAgICAgICJvciBoZWxwKG9iamVjdCkgZm9yIGhlbHAgYWJvdXQgb2JqZWN0LiIKLSAgICBkZWYgX19jYWxsX18oc2VsZiwgKmFyZ3MsICoqa3dkcyk6Ci0gICAgICAgIGltcG9ydCBweWRvYwotICAgICAgICByZXR1cm4gcHlkb2MuaGVscCgqYXJncywgKiprd2RzKQotCiBkZWYgc2V0aGVscGVyKCk6Ci0gICAgYnVpbHRpbnMuaGVscCA9IF9IZWxwZXIoKQorICAgIGJ1aWx0aW5zLmhlbHAgPSBfc2l0ZWJ1aWx0aW5zLl9IZWxwZXIoKQorCitkZWYgZW5hYmxlcmxjb21wbGV0ZXIoKToKKyAgICAiIiJFbmFibGUgZGVmYXVsdCByZWFkbGluZSBjb25maWd1cmF0aW9uIG9uIGludGVyYWN0aXZlIHByb21wdHMsIGJ5CisgICAgcmVnaXN0ZXJpbmcgYSBzeXMuX19pbnRlcmFjdGl2ZWhvb2tfXy4KKworICAgIElmIHRoZSByZWFkbGluZSBtb2R1bGUgY2FuIGJlIGltcG9ydGVkLCB0aGUgaG9vayB3aWxsIHNldCB0aGUgVGFiIGtleQorICAgIGFzIGNvbXBsZXRpb24ga2V5IGFuZCByZWdpc3RlciB+Ly5weXRob25faGlzdG9yeSBhcyBoaXN0b3J5IGZpbGUuCisgICAgVGhpcyBjYW4gYmUgb3ZlcnJpZGVuIGluIHRoZSBzaXRlY3VzdG9taXplIG9yIHVzZXJjdXN0b21pemUgbW9kdWxlLAorICAgIG9yIGluIGEgUFlUSE9OU1RBUlRVUCBmaWxlLgorICAgICIiIgorICAgIGRlZiByZWdpc3Rlcl9yZWFkbGluZSgpOgorICAgICAgICBpbXBvcnQgYXRleGl0CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGltcG9ydCByZWFkbGluZQorICAgICAgICAgICAgaW1wb3J0IHJsY29tcGxldGVyCisgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICMgUmVhZGluZyB0aGUgaW5pdGlhbGl6YXRpb24gKGNvbmZpZykgZmlsZSBtYXkgbm90IGJlIGVub3VnaCB0byBzZXQgYQorICAgICAgICAjIGNvbXBsZXRpb24ga2V5LCBzbyB3ZSBzZXQgb25lIGZpcnN0IGFuZCB0aGVuIHJlYWQgdGhlIGZpbGUuCisgICAgICAgIHJlYWRsaW5lX2RvYyA9IGdldGF0dHIocmVhZGxpbmUsICdfX2RvY19fJywgJycpCisgICAgICAgIGlmIHJlYWRsaW5lX2RvYyBpcyBub3QgTm9uZSBhbmQgJ2xpYmVkaXQnIGluIHJlYWRsaW5lX2RvYzoKKyAgICAgICAgICAgIHJlYWRsaW5lLnBhcnNlX2FuZF9iaW5kKCdiaW5kIF5JIHJsX2NvbXBsZXRlJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJlYWRsaW5lLnBhcnNlX2FuZF9iaW5kKCd0YWI6IGNvbXBsZXRlJykKKworICAgICAgICB0cnk6CisgICAgICAgICAgICByZWFkbGluZS5yZWFkX2luaXRfZmlsZSgpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgIyBBbiBPU0Vycm9yIGhlcmUgY291bGQgaGF2ZSBtYW55IGNhdXNlcywgYnV0IHRoZSBtb3N0IGxpa2VseSBvbmUKKyAgICAgICAgICAgICMgaXMgdGhhdCB0aGVyZSdzIG5vIC5pbnB1dHJjIGZpbGUgKG9yIC5lZGl0cmMgZmlsZSBpbiB0aGUgY2FzZSBvZgorICAgICAgICAgICAgIyBNYWMgT1MgWCArIGxpYmVkaXQpIGluIHRoZSBleHBlY3RlZCBsb2NhdGlvbi4gIEluIHRoYXQgY2FzZSwgd2UKKyAgICAgICAgICAgICMgd2FudCB0byBpZ25vcmUgdGhlIGV4Y2VwdGlvbi4KKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBpZiByZWFkbGluZS5nZXRfY3VycmVudF9oaXN0b3J5X2xlbmd0aCgpID09IDA6CisgICAgICAgICAgICAjIElmIG5vIGhpc3Rvcnkgd2FzIGxvYWRlZCwgZGVmYXVsdCB0byAucHl0aG9uX2hpc3RvcnkuCisgICAgICAgICAgICAjIFRoZSBndWFyZCBpcyBuZWNlc3NhcnkgdG8gYXZvaWQgZG91YmxpbmcgaGlzdG9yeSBzaXplIGF0CisgICAgICAgICAgICAjIGVhY2ggaW50ZXJwcmV0ZXIgZXhpdCB3aGVuIHJlYWRsaW5lIHdhcyBhbHJlYWR5IGNvbmZpZ3VyZWQKKyAgICAgICAgICAgICMgdGhyb3VnaCBhIFBZVEhPTlNUQVJUVVAgaG9vaywgc2VlOgorICAgICAgICAgICAgIyBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlNTg0NSNtc2cxOTg2MzYKKyAgICAgICAgICAgIGhpc3RvcnkgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5leHBhbmR1c2VyKCd+JyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcucHl0aG9uX2hpc3RvcnknKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJlYWRsaW5lLnJlYWRfaGlzdG9yeV9maWxlKGhpc3RvcnkpCisgICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBhdGV4aXQucmVnaXN0ZXIocmVhZGxpbmUud3JpdGVfaGlzdG9yeV9maWxlLCBoaXN0b3J5KQorCisgICAgc3lzLl9faW50ZXJhY3RpdmVob29rX18gPSByZWdpc3Rlcl9yZWFkbGluZQogCiBkZWYgYWxpYXNtYmNzKCk6CiAgICAgIiIiT24gV2luZG93cywgc29tZSBkZWZhdWx0IGVuY29kaW5ncyBhcmUgbm90IHByb3ZpZGVkIGJ5IFB5dGhvbiwKICAgICB3aGlsZSB0aGV5IGFyZSBhbHdheXMgYXZhaWxhYmxlIGFzICJtYmNzIiBpbiBlYWNoIGxvY2FsZS4gTWFrZQogICAgIHRoZW0gdXNhYmxlIGJ5IGFsaWFzaW5nIHRvICJtYmNzIiBpbiBzdWNoIGEgY2FzZS4iIiIKICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKLSAgICAgICAgaW1wb3J0IGxvY2FsZSwgY29kZWNzCi0gICAgICAgIGVuYyA9IGxvY2FsZS5nZXRkZWZhdWx0bG9jYWxlKClbMV0KKyAgICAgICAgaW1wb3J0IF9ib290bG9jYWxlLCBjb2RlY3MKKyAgICAgICAgZW5jID0gX2Jvb3Rsb2NhbGUuZ2V0cHJlZmVycmVkZW5jb2RpbmcoRmFsc2UpCiAgICAgICAgIGlmIGVuYy5zdGFydHN3aXRoKCdjcCcpOiAgICAgICAgICAgICMgImNwKioqIiA/CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgY29kZWNzLmxvb2t1cChlbmMpCkBAIC00ODgsOCArNDQ1LDcgQEAKICAgICAgICAgICAgICAgICBlbmNvZGluZ3MuX2NhY2hlW2VuY10gPSBlbmNvZGluZ3MuX3Vua25vd24KICAgICAgICAgICAgICAgICBlbmNvZGluZ3MuYWxpYXNlcy5hbGlhc2VzW2VuY10gPSAnbWJjcycKIAotCi1DT05GSUdfTElORSA9IHJlLmNvbXBpbGUocideKD9QPGtleT4oXHd8Wy1fXSkrKVxzKj1ccyooP1A8dmFsdWU+LiopXHMqJCcpCitDT05GSUdfTElORSA9IHInXig/UDxrZXk+KFx3fFstX10pKylccyo9XHMqKD9QPHZhbHVlPi4qKVxzKiQnCiAKIGRlZiB2ZW52KGtub3duX3BhdGhzKToKICAgICBnbG9iYWwgUFJFRklYRVMsIEVOQUJMRV9VU0VSX1NJVEUKQEAgLTUxMiwxMiArNDY4LDE2IEBACiAgICAgICAgIF0KIAogICAgIGlmIGNhbmRpZGF0ZV9jb25mczoKKyAgICAgICAgaW1wb3J0IHJlCisgICAgICAgIGNvbmZpZ19saW5lID0gcmUuY29tcGlsZShDT05GSUdfTElORSkKICAgICAgICAgdmlydHVhbF9jb25mID0gY2FuZGlkYXRlX2NvbmZzWzBdCiAgICAgICAgIHN5c3RlbV9zaXRlID0gInRydWUiCi0gICAgICAgIHdpdGggb3Blbih2aXJ0dWFsX2NvbmYpIGFzIGY6CisgICAgICAgICMgSXNzdWUgMjUxODU6IFVzZSBVVEYtOCwgYXMgdGhhdCdzIHdoYXQgdGhlIHZlbnYgbW9kdWxlIHVzZXMgd2hlbgorICAgICAgICAjIHdyaXRpbmcgdGhlIGZpbGUuCisgICAgICAgIHdpdGggb3Blbih2aXJ0dWFsX2NvbmYsIGVuY29kaW5nPSd1dGYtOCcpIGFzIGY6CiAgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgogICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnN0cmlwKCkKLSAgICAgICAgICAgICAgICBtID0gQ09ORklHX0xJTkUubWF0Y2gobGluZSkKKyAgICAgICAgICAgICAgICBtID0gY29uZmlnX2xpbmUubWF0Y2gobGluZSkKICAgICAgICAgICAgICAgICBpZiBtOgogICAgICAgICAgICAgICAgICAgICBkID0gbS5ncm91cGRpY3QoKQogICAgICAgICAgICAgICAgICAgICBrZXksIHZhbHVlID0gZFsna2V5J10ubG93ZXIoKSwgZFsndmFsdWUnXQpAQCAtNTg5LDExICs1NDksMTAgQEAKICAgICAgICAgRU5BQkxFX1VTRVJfU0lURSA9IGNoZWNrX2VuYWJsZXVzZXJzaXRlKCkKICAgICBrbm93bl9wYXRocyA9IGFkZHVzZXJzaXRlcGFja2FnZXMoa25vd25fcGF0aHMpCiAgICAga25vd25fcGF0aHMgPSBhZGRzaXRlcGFja2FnZXMoa25vd25fcGF0aHMpCi0gICAgaWYgc3lzLnBsYXRmb3JtID09ICdvczJlbXgnOgotICAgICAgICBzZXRCRUdJTkxJQlBBVEgoKQogICAgIHNldHF1aXQoKQogICAgIHNldGNvcHlyaWdodCgpCiAgICAgc2V0aGVscGVyKCkKKyAgICBlbmFibGVybGNvbXBsZXRlcigpCiAgICAgYWxpYXNtYmNzKCkKICAgICBleGVjc2l0ZWN1c3RvbWl6ZSgpCiAgICAgaWYgRU5BQkxFX1VTRVJfU0lURToKZGlmZiAtLWdpdCBhL0xpYi9zbXRwZC5weSBiL0xpYi9zbXRwZC5weQppbmRleCA3NzhkNmQ2Li5kYjdjODY3IDEwMDc1NQotLS0gYS9MaWIvc210cGQucHkKKysrIGIvTGliL3NtdHBkLnB5CkBAIC0xMjEsOCArMTIxLDkgQEAKICAgICAgICAgfSkKICAgICBtYXhfY29tbWFuZF9zaXplX2xpbWl0ID0gbWF4KGNvbW1hbmRfc2l6ZV9saW1pdHMudmFsdWVzKCkpCiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgc2VydmVyLCBjb25uLCBhZGRyLCBkYXRhX3NpemVfbGltaXQ9REFUQV9TSVpFX0RFRkFVTFQpOgotICAgICAgICBhc3luY2hhdC5hc3luY19jaGF0Ll9faW5pdF9fKHNlbGYsIGNvbm4pCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNlcnZlciwgY29ubiwgYWRkciwgZGF0YV9zaXplX2xpbWl0PURBVEFfU0laRV9ERUZBVUxULAorICAgICAgICAgICAgICAgICBtYXA9Tm9uZSk6CisgICAgICAgIGFzeW5jaGF0LmFzeW5jX2NoYXQuX19pbml0X18oc2VsZiwgY29ubiwgbWFwPW1hcCkKICAgICAgICAgc2VsZi5zbXRwX3NlcnZlciA9IHNlcnZlcgogICAgICAgICBzZWxmLmNvbm4gPSBjb25uCiAgICAgICAgIHNlbGYuYWRkciA9IGFkZHIKQEAgLTEzNyw3ICsxMzgsNyBAQAogICAgICAgICBzZWxmLm51bV9ieXRlcyA9IDAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5wZWVyID0gY29ubi5nZXRwZWVybmFtZSgpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZXJyOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgICAgICAgICAjIGEgcmFjZSBjb25kaXRpb24gIG1heSBvY2N1ciBpZiB0aGUgb3RoZXIgZW5kIGlzIGNsb3NpbmcKICAgICAgICAgICAgICMgYmVmb3JlIHdlIGNhbiBnZXQgdGhlIHBlZXJuYW1lCiAgICAgICAgICAgICBzZWxmLmNsb3NlKCkKQEAgLTQxMiw3ICs0MTMsNyBAQAogCiAgICAgZGVmIHNtdHBfSEVMUChzZWxmLCBhcmcpOgogICAgICAgICBpZiBhcmc6Ci0gICAgICAgICAgICBleHRlbmRlZCA9ICcgW1NQIDxtYWlsIHBhcmFtZXRlcnNdJworICAgICAgICAgICAgZXh0ZW5kZWQgPSAnIFtTUCA8bWFpbC1wYXJhbWV0ZXJzPl0nCiAgICAgICAgICAgICBsY19hcmcgPSBhcmcudXBwZXIoKQogICAgICAgICAgICAgaWYgbGNfYXJnID09ICdFSExPJzoKICAgICAgICAgICAgICAgICBzZWxmLnB1c2goJzI1MCBTeW50YXg6IEVITE8gaG9zdG5hbWUnKQpAQCAtNDc1LDkgKzQ3Niw2IEBACiAgICAgICAgIGlmIG5vdCBzZWxmLmV4dGVuZGVkX3NtdHAgYW5kIHBhcmFtczoKICAgICAgICAgICAgIHNlbGYucHVzaChzeW50YXhlcnIpCiAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgaWYgbm90IGFkZHJlc3M6Ci0gICAgICAgICAgICBzZWxmLnB1c2goc3ludGF4ZXJyKQotICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIGlmIHNlbGYubWFpbGZyb206CiAgICAgICAgICAgICBzZWxmLnB1c2goJzUwMyBFcnJvcjogbmVzdGVkIE1BSUwgY29tbWFuZCcpCiAgICAgICAgICAgICByZXR1cm4KQEAgLTUyOCwxNSArNTI2LDkgQEAKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgc2VsZi5wdXNoKHN5bnRheGVycikKICAgICAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgaWYgbm90IGFkZHJlc3M6Ci0gICAgICAgICAgICBzZWxmLnB1c2goc3ludGF4ZXJyKQotICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIGlmIHBhcmFtcyBhbmQgbGVuKHBhcmFtcy5rZXlzKCkpID4gMDoKICAgICAgICAgICAgIHNlbGYucHVzaCgnNTU1IFJDUFQgVE8gcGFyYW1ldGVycyBub3QgcmVjb2duaXplZCBvciBub3QgaW1wbGVtZW50ZWQnKQogICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGlmIG5vdCBhZGRyZXNzOgotICAgICAgICAgICAgc2VsZi5wdXNoKCc1MDEgU3ludGF4OiBSQ1BUIFRPOiA8YWRkcmVzcz4nKQotICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIHNlbGYucmNwdHRvcy5hcHBlbmQoYWRkcmVzcykKICAgICAgICAgcHJpbnQoJ3JlY2lwczonLCBzZWxmLnJjcHR0b3MsIGZpbGU9REVCVUdTVFJFQU0pCiAgICAgICAgIHNlbGYucHVzaCgnMjUwIE9LJykKQEAgLTU3NiwxMSArNTY4LDExIEBACiAgICAgY2hhbm5lbF9jbGFzcyA9IFNNVFBDaGFubmVsCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgbG9jYWxhZGRyLCByZW1vdGVhZGRyLAotICAgICAgICAgICAgICAgICBkYXRhX3NpemVfbGltaXQ9REFUQV9TSVpFX0RFRkFVTFQpOgorICAgICAgICAgICAgICAgICBkYXRhX3NpemVfbGltaXQ9REFUQV9TSVpFX0RFRkFVTFQsIG1hcD1Ob25lKToKICAgICAgICAgc2VsZi5fbG9jYWxhZGRyID0gbG9jYWxhZGRyCiAgICAgICAgIHNlbGYuX3JlbW90ZWFkZHIgPSByZW1vdGVhZGRyCiAgICAgICAgIHNlbGYuZGF0YV9zaXplX2xpbWl0ID0gZGF0YV9zaXplX2xpbWl0Ci0gICAgICAgIGFzeW5jb3JlLmRpc3BhdGNoZXIuX19pbml0X18oc2VsZikKKyAgICAgICAgYXN5bmNvcmUuZGlzcGF0Y2hlci5fX2luaXRfXyhzZWxmLCBtYXA9bWFwKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLmNyZWF0ZV9zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKICAgICAgICAgICAgICMgdHJ5IHRvIHJlLXVzZSBhIHNlcnZlciBwb3J0IGlmIHBvc3NpYmxlCkBAIC01OTcsNyArNTg5LDggQEAKIAogICAgIGRlZiBoYW5kbGVfYWNjZXB0ZWQoc2VsZiwgY29ubiwgYWRkcik6CiAgICAgICAgIHByaW50KCdJbmNvbWluZyBjb25uZWN0aW9uIGZyb20gJXMnICUgcmVwcihhZGRyKSwgZmlsZT1ERUJVR1NUUkVBTSkKLSAgICAgICAgY2hhbm5lbCA9IHNlbGYuY2hhbm5lbF9jbGFzcyhzZWxmLCBjb25uLCBhZGRyLCBzZWxmLmRhdGFfc2l6ZV9saW1pdCkKKyAgICAgICAgY2hhbm5lbCA9IHNlbGYuY2hhbm5lbF9jbGFzcyhzZWxmLCBjb25uLCBhZGRyLCBzZWxmLmRhdGFfc2l6ZV9saW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9tYXApCiAKICAgICAjIEFQSSBmb3IgImRvaW5nIHNvbWV0aGluZyB1c2VmdWwgd2l0aCB0aGUgbWVzc2FnZSIKICAgICBkZWYgcHJvY2Vzc19tZXNzYWdlKHNlbGYsIHBlZXIsIG1haWxmcm9tLCByY3B0dG9zLCBkYXRhKToKQEAgLTY2OCw3ICs2NjEsNyBAQAogICAgICAgICBleGNlcHQgc210cGxpYi5TTVRQUmVjaXBpZW50c1JlZnVzZWQgYXMgZToKICAgICAgICAgICAgIHByaW50KCdnb3QgU01UUFJlY2lwaWVudHNSZWZ1c2VkJywgZmlsZT1ERUJVR1NUUkVBTSkKICAgICAgICAgICAgIHJlZnVzZWQgPSBlLnJlY2lwaWVudHMKLSAgICAgICAgZXhjZXB0IChzb2NrZXQuZXJyb3IsIHNtdHBsaWIuU01UUEV4Y2VwdGlvbikgYXMgZToKKyAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBzbXRwbGliLlNNVFBFeGNlcHRpb24pIGFzIGU6CiAgICAgICAgICAgICBwcmludCgnZ290JywgZS5fX2NsYXNzX18sIGZpbGU9REVCVUdTVFJFQU0pCiAgICAgICAgICAgICAjIEFsbCByZWNpcGllbnRzIHdlcmUgcmVmdXNlZC4gIElmIHRoZSBleGNlcHRpb24gaGFkIGFuIGFzc29jaWF0ZWQKICAgICAgICAgICAgICMgZXJyb3IgY29kZSwgdXNlIGl0LiAgT3RoZXJ3aXNlLGZha2UgaXQgd2l0aCBhIG5vbi10cmlnZ2VyaW5nCkBAIC03NzgsNyArNzcxLDcgQEAKICAgICAgICAgaWYgb3B0IGluICgnLWgnLCAnLS1oZWxwJyk6CiAgICAgICAgICAgICB1c2FnZSgwKQogICAgICAgICBlbGlmIG9wdCBpbiAoJy1WJywgJy0tdmVyc2lvbicpOgotICAgICAgICAgICAgcHJpbnQoX192ZXJzaW9uX18sIGZpbGU9c3lzLnN0ZGVycikKKyAgICAgICAgICAgIHByaW50KF9fdmVyc2lvbl9fKQogICAgICAgICAgICAgc3lzLmV4aXQoMCkKICAgICAgICAgZWxpZiBvcHQgaW4gKCctbicsICctLW5vc2V0dWlkJyk6CiAgICAgICAgICAgICBvcHRpb25zLnNldHVpZCA9IDAKQEAgLTg1MCw4ICs4NDMsNyBAQAogICAgICAgICBub2JvZHkgPSBwd2QuZ2V0cHduYW0oJ25vYm9keScpWzJdCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG9zLnNldHVpZChub2JvZHkpCi0gICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6Ci0gICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVQRVJNOiByYWlzZQorICAgICAgICBleGNlcHQgUGVybWlzc2lvbkVycm9yOgogICAgICAgICAgICAgcHJpbnQoJ0Nhbm5vdCBzZXR1aWQgIm5vYm9keSI7IHRyeSBydW5uaW5nIHdpdGggLW4gb3B0aW9uLicsIGZpbGU9c3lzLnN0ZGVycikKICAgICAgICAgICAgIHN5cy5leGl0KDEpCiAgICAgdHJ5OgpkaWZmIC0tZ2l0IGEvTGliL3NtdHBsaWIucHkgYi9MaWIvc210cGxpYi5weQppbmRleCA1N2YxODFiLi5kYjIzZmYwIDEwMDc1NQotLS0gYS9MaWIvc210cGxpYi5weQorKysgYi9MaWIvc210cGxpYi5weQpAQCAtNjcsNyArNjcsNyBAQAogT0xEU1RZTEVfQVVUSCA9IHJlLmNvbXBpbGUociJhdXRoPSguKikiLCByZS5JKQogCiAjIEV4Y2VwdGlvbiBjbGFzc2VzIHVzZWQgYnkgdGhpcyBtb2R1bGUuCi1jbGFzcyBTTVRQRXhjZXB0aW9uKEV4Y2VwdGlvbik6CitjbGFzcyBTTVRQRXhjZXB0aW9uKE9TRXJyb3IpOgogICAgICIiIkJhc2UgY2xhc3MgZm9yIGFsbCBleGNlcHRpb25zIHJhaXNlZCBieSB0aGlzIG1vZHVsZS4iIiIKIAogY2xhc3MgU01UUFNlcnZlckRpc2Nvbm5lY3RlZChTTVRQRXhjZXB0aW9uKToKQEAgLTIzMyw2ICsyMzMsNyBAQAogICAgICAgICB3aWxsIGJlIHVzZWQuCiAKICAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX2hvc3QgPSBob3N0CiAgICAgICAgIHNlbGYudGltZW91dCA9IHRpbWVvdXQKICAgICAgICAgc2VsZi5lc210cF9mZWF0dXJlcyA9IHt9CiAgICAgICAgIHNlbGYuc291cmNlX2FkZHJlc3MgPSBzb3VyY2VfYWRkcmVzcwpAQCAtMzEyLDcgKzMxMyw3IEBACiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBwb3J0ID0gaW50KHBvcnQpCiAgICAgICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIHNvY2tldC5lcnJvcigibm9ubnVtZXJpYyBwb3J0IikKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigibm9ubnVtZXJpYyBwb3J0IikKICAgICAgICAgaWYgbm90IHBvcnQ6CiAgICAgICAgICAgICBwb3J0ID0gc2VsZi5kZWZhdWx0X3BvcnQKICAgICAgICAgaWYgc2VsZi5kZWJ1Z2xldmVsID4gMDoKQEAgLTMzMyw3ICszMzQsNyBAQAogICAgICAgICAgICAgICAgIHMgPSBzLmVuY29kZSgiYXNjaWkiKQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHNlbGYuc29jay5zZW5kYWxsKHMpCi0gICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgc2VsZi5jbG9zZSgpCiAgICAgICAgICAgICAgICAgcmFpc2UgU01UUFNlcnZlckRpc2Nvbm5lY3RlZCgnU2VydmVyIG5vdCBjb25uZWN0ZWQnKQogICAgICAgICBlbHNlOgpAQCAtMzY2LDcgKzM2Nyw3IEBACiAgICAgICAgIHdoaWxlIDE6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgbGluZSA9IHNlbGYuZmlsZS5yZWFkbGluZShfTUFYTElORSArIDEpCi0gICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIGU6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgICAgIHNlbGYuY2xvc2UoKQogICAgICAgICAgICAgICAgIHJhaXNlIFNNVFBTZXJ2ZXJEaXNjb25uZWN0ZWQoIkNvbm5lY3Rpb24gdW5leHBlY3RlZGx5IGNsb3NlZDogIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBzdHIoZSkpCkBAIC0zNzYsNiArMzc3LDcgQEAKICAgICAgICAgICAgIGlmIHNlbGYuZGVidWdsZXZlbCA+IDA6CiAgICAgICAgICAgICAgICAgcHJpbnQoJ3JlcGx5OicsIHJlcHIobGluZSksIGZpbGU9c3RkZXJyKQogICAgICAgICAgICAgaWYgbGVuKGxpbmUpID4gX01BWExJTkU6CisgICAgICAgICAgICAgICAgc2VsZi5jbG9zZSgpCiAgICAgICAgICAgICAgICAgcmFpc2UgU01UUFJlc3BvbnNlRXhjZXB0aW9uKDUwMCwgIkxpbmUgdG9vIGxvbmcuIikKICAgICAgICAgICAgIHJlc3AuYXBwZW5kKGxpbmVbNDpdLnN0cmlwKGInIFx0XHJcbicpKQogICAgICAgICAgICAgY29kZSA9IGxpbmVbOjNdCkBAIC00NzcsNiArNDc5LDE4IEBACiAgICAgICAgICIiIlNNVFAgJ3JzZXQnIGNvbW1hbmQgLS0gcmVzZXRzIHNlc3Npb24uIiIiCiAgICAgICAgIHJldHVybiBzZWxmLmRvY21kKCJyc2V0IikKIAorICAgIGRlZiBfcnNldChzZWxmKToKKyAgICAgICAgIiIiSW50ZXJuYWwgJ3JzZXQnIGNvbW1hbmQgd2hpY2ggaWdub3JlcyBhbnkgU01UUFNlcnZlckRpc2Nvbm5lY3RlZCBlcnJvci4KKworICAgICAgICBVc2VkIGludGVybmFsbHkgaW4gdGhlIGxpYnJhcnksIHNpbmNlIHRoZSBzZXJ2ZXIgZGlzY29ubmVjdGVkIGVycm9yCisgICAgICAgIHNob3VsZCBhcHBlYXIgdG8gdGhlIGFwcGxpY2F0aW9uIHdoZW4gdGhlICpuZXh0KiBjb21tYW5kIGlzIGlzc3VlZCwgaWYKKyAgICAgICAgd2UgYXJlIGRvaW5nIGFuIGludGVybmFsICJzYWZldHkiIHJlc2V0LgorICAgICAgICAiIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5yc2V0KCkKKyAgICAgICAgZXhjZXB0IFNNVFBTZXJ2ZXJEaXNjb25uZWN0ZWQ6CisgICAgICAgICAgICBwYXNzCisKICAgICBkZWYgbm9vcChzZWxmKToKICAgICAgICAgIiIiU01UUCAnbm9vcCcgY29tbWFuZCAtLSBkb2Vzbid0IGRvIGFueXRoaW5nIDo+IiIiCiAgICAgICAgIHJldHVybiBzZWxmLmRvY21kKCJub29wIikKQEAgLTUwNCw4ICs1MTgsOCBAQAogICAgICAgICBSYWlzZXMgU01UUERhdGFFcnJvciBpZiB0aGVyZSBpcyBhbiB1bmV4cGVjdGVkIHJlcGx5IHRvIHRoZQogICAgICAgICBEQVRBIGNvbW1hbmQ7IHRoZSByZXR1cm4gdmFsdWUgZnJvbSB0aGlzIG1ldGhvZCBpcyB0aGUgZmluYWwKICAgICAgICAgcmVzcG9uc2UgY29kZSByZWNlaXZlZCB3aGVuIHRoZSBhbGwgZGF0YSBpcyBzZW50LiAgSWYgbXNnCi0gICAgICAgIGlzIGEgc3RyaW5nLCBsb25lICdccicgYW5kICdcbicgY2hhcmFjdGVycyBhcmUgY29udmVydGVkIHRvCi0gICAgICAgICdcclxuJyBjaGFyYWN0ZXJzLiAgSWYgbXNnIGlzIGJ5dGVzLCBpdCBpcyB0cmFuc21pdHRlZCBhcyBpcy4KKyAgICAgICAgaXMgYSBzdHJpbmcsIGxvbmUgJ1xccicgYW5kICdcXG4nIGNoYXJhY3RlcnMgYXJlIGNvbnZlcnRlZCB0bworICAgICAgICAnXFxyXFxuJyBjaGFyYWN0ZXJzLiAgSWYgbXNnIGlzIGJ5dGVzLCBpdCBpcyB0cmFuc21pdHRlZCBhcyBpcy4KICAgICAgICAgIiIiCiAgICAgICAgIHNlbGYucHV0Y21kKCJkYXRhIikKICAgICAgICAgKGNvZGUsIHJlcGwpID0gc2VsZi5nZXRyZXBseSgpCkBAIC01ODIsNyArNTk2LDcgQEAKICAgICAgICAgZGVmIGVuY29kZV9jcmFtX21kNShjaGFsbGVuZ2UsIHVzZXIsIHBhc3N3b3JkKToKICAgICAgICAgICAgIGNoYWxsZW5nZSA9IGJhc2U2NC5kZWNvZGVieXRlcyhjaGFsbGVuZ2UpCiAgICAgICAgICAgICByZXNwb25zZSA9IHVzZXIgKyAiICIgKyBobWFjLkhNQUMocGFzc3dvcmQuZW5jb2RlKCdhc2NpaScpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYWxsZW5nZSkuaGV4ZGlnZXN0KCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFsbGVuZ2UsICdtZDUnKS5oZXhkaWdlc3QoKQogICAgICAgICAgICAgcmV0dXJuIGVuY29kZV9iYXNlNjQocmVzcG9uc2UuZW5jb2RlKCdhc2NpaScpLCBlb2w9JycpCiAKICAgICAgICAgZGVmIGVuY29kZV9wbGFpbih1c2VyLCBwYXNzd29yZCk6CkBAIC02NjcsMTAgKzY4MSwxMSBAQAogICAgICAgICAgICAgaWYgY29udGV4dCBpcyBub3QgTm9uZSBhbmQgY2VydGZpbGUgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiY29udGV4dCBhbmQgY2VydGZpbGUgYXJndW1lbnRzIGFyZSBtdXR1YWxseSAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjbHVzaXZlIikKLSAgICAgICAgICAgIGlmIGNvbnRleHQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgc2VsZi5zb2NrID0gY29udGV4dC53cmFwX3NvY2tldChzZWxmLnNvY2spCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuc29jayA9IHNzbC53cmFwX3NvY2tldChzZWxmLnNvY2ssIGtleWZpbGUsIGNlcnRmaWxlKQorICAgICAgICAgICAgaWYgY29udGV4dCBpcyBOb25lOgorICAgICAgICAgICAgICAgIGNvbnRleHQgPSBzc2wuX2NyZWF0ZV9zdGRsaWJfY29udGV4dChjZXJ0ZmlsZT1jZXJ0ZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5ZmlsZT1rZXlmaWxlKQorICAgICAgICAgICAgc2VsZi5zb2NrID0gY29udGV4dC53cmFwX3NvY2tldChzZWxmLnNvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9ob3N0bmFtZT1zZWxmLl9ob3N0KQogICAgICAgICAgICAgc2VsZi5maWxlID0gTm9uZQogICAgICAgICAgICAgIyBSRkMgMzIwNzoKICAgICAgICAgICAgICMgVGhlIGNsaWVudCBNVVNUIGRpc2NhcmQgYW55IGtub3dsZWRnZSBvYnRhaW5lZCBmcm9tCkBAIC03NTksNyArNzc0LDcgQEAKICAgICAgICAgICAgIGlmIGNvZGUgPT0gNDIxOgogICAgICAgICAgICAgICAgIHNlbGYuY2xvc2UoKQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLnJzZXQoKQorICAgICAgICAgICAgICAgIHNlbGYuX3JzZXQoKQogICAgICAgICAgICAgcmFpc2UgU01UUFNlbmRlclJlZnVzZWQoY29kZSwgcmVzcCwgZnJvbV9hZGRyKQogICAgICAgICBzZW5kZXJycyA9IHt9CiAgICAgICAgIGlmIGlzaW5zdGFuY2UodG9fYWRkcnMsIHN0cik6CkBAIC03NzMsMTQgKzc4OCwxNCBAQAogICAgICAgICAgICAgICAgIHJhaXNlIFNNVFBSZWNpcGllbnRzUmVmdXNlZChzZW5kZXJycykKICAgICAgICAgaWYgbGVuKHNlbmRlcnJzKSA9PSBsZW4odG9fYWRkcnMpOgogICAgICAgICAgICAgIyB0aGUgc2VydmVyIHJlZnVzZWQgYWxsIG91ciByZWNpcGllbnRzCi0gICAgICAgICAgICBzZWxmLnJzZXQoKQorICAgICAgICAgICAgc2VsZi5fcnNldCgpCiAgICAgICAgICAgICByYWlzZSBTTVRQUmVjaXBpZW50c1JlZnVzZWQoc2VuZGVycnMpCiAgICAgICAgIChjb2RlLCByZXNwKSA9IHNlbGYuZGF0YShtc2cpCiAgICAgICAgIGlmIGNvZGUgIT0gMjUwOgogICAgICAgICAgICAgaWYgY29kZSA9PSA0MjE6CiAgICAgICAgICAgICAgICAgc2VsZi5jbG9zZSgpCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYucnNldCgpCisgICAgICAgICAgICAgICAgc2VsZi5fcnNldCgpCiAgICAgICAgICAgICByYWlzZSBTTVRQRGF0YUVycm9yKGNvZGUsIHJlc3ApCiAgICAgICAgICNpZiB3ZSBnb3QgaGVyZSB0aGVuIHNvbWVib2R5IGdvdCBvdXIgbWFpbAogICAgICAgICByZXR1cm4gc2VuZGVycnMKQEAgLTg0MCwxNiArODU1LDI0IEBACiAKICAgICBkZWYgY2xvc2Uoc2VsZik6CiAgICAgICAgICIiIkNsb3NlIHRoZSBjb25uZWN0aW9uIHRvIHRoZSBTTVRQIHNlcnZlci4iIiIKLSAgICAgICAgaWYgc2VsZi5maWxlOgotICAgICAgICAgICAgc2VsZi5maWxlLmNsb3NlKCkKLSAgICAgICAgc2VsZi5maWxlID0gTm9uZQotICAgICAgICBpZiBzZWxmLnNvY2s6Ci0gICAgICAgICAgICBzZWxmLnNvY2suY2xvc2UoKQotICAgICAgICBzZWxmLnNvY2sgPSBOb25lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZpbGUgPSBzZWxmLmZpbGUKKyAgICAgICAgICAgIHNlbGYuZmlsZSA9IE5vbmUKKyAgICAgICAgICAgIGlmIGZpbGU6CisgICAgICAgICAgICAgICAgZmlsZS5jbG9zZSgpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzb2NrID0gc2VsZi5zb2NrCisgICAgICAgICAgICBzZWxmLnNvY2sgPSBOb25lCisgICAgICAgICAgICBpZiBzb2NrOgorICAgICAgICAgICAgICAgIHNvY2suY2xvc2UoKQogCiAgICAgZGVmIHF1aXQoc2VsZik6CiAgICAgICAgICIiIlRlcm1pbmF0ZSB0aGUgU01UUCBzZXNzaW9uLiIiIgogICAgICAgICByZXMgPSBzZWxmLmRvY21kKCJxdWl0IikKKyAgICAgICAgIyBBIG5ldyBFSExPIGlzIHJlcXVpcmVkIGFmdGVyIHJlY29ubmVjdGluZyB3aXRoIGNvbm5lY3QoKQorICAgICAgICBzZWxmLmVobG9fcmVzcCA9IHNlbGYuaGVsb19yZXNwID0gTm9uZQorICAgICAgICBzZWxmLmVzbXRwX2ZlYXR1cmVzID0ge30KKyAgICAgICAgc2VsZi5kb2VzX2VzbXRwID0gRmFsc2UKICAgICAgICAgc2VsZi5jbG9zZSgpCiAgICAgICAgIHJldHVybiByZXMKIApAQCAtODgzLDYgKzkwNiw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjbHVzaXZlIikKICAgICAgICAgICAgIHNlbGYua2V5ZmlsZSA9IGtleWZpbGUKICAgICAgICAgICAgIHNlbGYuY2VydGZpbGUgPSBjZXJ0ZmlsZQorICAgICAgICAgICAgaWYgY29udGV4dCBpcyBOb25lOgorICAgICAgICAgICAgICAgIGNvbnRleHQgPSBzc2wuX2NyZWF0ZV9zdGRsaWJfY29udGV4dChjZXJ0ZmlsZT1jZXJ0ZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5ZmlsZT1rZXlmaWxlKQogICAgICAgICAgICAgc2VsZi5jb250ZXh0ID0gY29udGV4dAogICAgICAgICAgICAgU01UUC5fX2luaXRfXyhzZWxmLCBob3N0LCBwb3J0LCBsb2NhbF9ob3N0bmFtZSwgdGltZW91dCwKICAgICAgICAgICAgICAgICAgICAgc291cmNlX2FkZHJlc3MpCkBAIC04OTIsMTAgKzkxOCw4IEBACiAgICAgICAgICAgICAgICAgcHJpbnQoJ2Nvbm5lY3Q6JywgKGhvc3QsIHBvcnQpLCBmaWxlPXN0ZGVycikKICAgICAgICAgICAgIG5ld19zb2NrZXQgPSBzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb24oKGhvc3QsIHBvcnQpLCB0aW1lb3V0LAogICAgICAgICAgICAgICAgICAgICBzZWxmLnNvdXJjZV9hZGRyZXNzKQotICAgICAgICAgICAgaWYgc2VsZi5jb250ZXh0IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgIG5ld19zb2NrZXQgPSBzZWxmLmNvbnRleHQud3JhcF9zb2NrZXQobmV3X3NvY2tldCkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgbmV3X3NvY2tldCA9IHNzbC53cmFwX3NvY2tldChuZXdfc29ja2V0LCBzZWxmLmtleWZpbGUsIHNlbGYuY2VydGZpbGUpCisgICAgICAgICAgICBuZXdfc29ja2V0ID0gc2VsZi5jb250ZXh0LndyYXBfc29ja2V0KG5ld19zb2NrZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9ob3N0bmFtZT1zZWxmLl9ob3N0KQogICAgICAgICAgICAgcmV0dXJuIG5ld19zb2NrZXQKIAogICAgIF9fYWxsX18uYXBwZW5kKCJTTVRQX1NTTCIpCkBAIC05MzcsNyArOTYxLDcgQEAKICAgICAgICAgICAgIHNlbGYuc29jayA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX1VOSVgsIHNvY2tldC5TT0NLX1NUUkVBTSkKICAgICAgICAgICAgIHNlbGYuZmlsZSA9IE5vbmUKICAgICAgICAgICAgIHNlbGYuc29jay5jb25uZWN0KGhvc3QpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgaWYgc2VsZi5kZWJ1Z2xldmVsID4gMDoKICAgICAgICAgICAgICAgICBwcmludCgnY29ubmVjdCBmYWlsOicsIGhvc3QsIGZpbGU9c3RkZXJyKQogICAgICAgICAgICAgaWYgc2VsZi5zb2NrOgpkaWZmIC0tZ2l0IGEvTGliL3NuZGhkci5weSBiL0xpYi9zbmRoZHIucHkKaW5kZXggOWY1ZGNjOS4uMjQwZTUwNyAxMDA2NDQKLS0tIGEvTGliL3NuZGhkci5weQorKysgYi9MaWIvc25kaGRyLnB5CkBAIC0xMSw3ICsxMSw3IEBACiAtIG51bWJlciBvZiBiaXRzL3NhbXBsZSwgb3IgJ1UnIGZvciBVLUxBVywgb3IgJ0EnIGZvciBBLUxBVwogCiBJZiB0aGUgZmlsZSBkb2Vzbid0IGhhdmUgYSByZWNvZ25pemFibGUgdHlwZSwgaXQgcmV0dXJucyBOb25lLgotSWYgdGhlIGZpbGUgY2FuJ3QgYmUgb3BlbmVkLCBJT0Vycm9yIGlzIHJhaXNlZC4KK0lmIHRoZSBmaWxlIGNhbid0IGJlIG9wZW5lZCwgT1NFcnJvciBpcyByYWlzZWQuCiAKIFRvIGNvbXB1dGUgdGhlIHRvdGFsIHRpbWUsIGRpdmlkZSB0aGUgbnVtYmVyIG9mIGZyYW1lcyBieSB0aGUKIHNhbXBsaW5nIHJhdGUgKGEgZnJhbWUgY29udGFpbnMgYSBzYW1wbGUgZm9yIGVhY2ggY2hhbm5lbCkuCkBAIC0xMzcsMTQgKzEzNywxNyBAQAogCiAKIGRlZiB0ZXN0X3dhdihoLCBmKToKKyAgICBpbXBvcnQgd2F2ZQogICAgICMgJ1JJRkYnIDxsZW4+ICdXQVZFJyAnZm10ICcgPGxlbj4KICAgICBpZiBub3QgaC5zdGFydHN3aXRoKGInUklGRicpIG9yIGhbODoxMl0gIT0gYidXQVZFJyBvciBoWzEyOjE2XSAhPSBiJ2ZtdCAnOgogICAgICAgICByZXR1cm4gTm9uZQotICAgIHN0eWxlID0gZ2V0X3Nob3J0X2xlKGhbMjA6MjJdKQotICAgIG5jaGFubmVscyA9IGdldF9zaG9ydF9sZShoWzIyOjI0XSkKLSAgICByYXRlID0gZ2V0X2xvbmdfbGUoaFsyNDoyOF0pCi0gICAgc2FtcGxlX2JpdHMgPSBnZXRfc2hvcnRfbGUoaFszNDozNl0pCi0gICAgcmV0dXJuICd3YXYnLCByYXRlLCBuY2hhbm5lbHMsIC0xLCBzYW1wbGVfYml0cworICAgIGYuc2VlaygwKQorICAgIHRyeToKKyAgICAgICAgdyA9IHdhdmUub3BlbmZwKGYsICdyJykKKyAgICBleGNlcHQgKEVPRkVycm9yLCB3YXZlLkVycm9yKToKKyAgICAgICAgcmV0dXJuIE5vbmUKKyAgICByZXR1cm4gKCd3YXYnLCB3LmdldGZyYW1lcmF0ZSgpLCB3LmdldG5jaGFubmVscygpLAorICAgICAgICAgICAgICAgICAgIHcuZ2V0bmZyYW1lcygpLCA4KncuZ2V0c2FtcHdpZHRoKCkpCiAKIHRlc3RzLmFwcGVuZCh0ZXN0X3dhdikKIApAQCAtMjMwLDcgKzIzMyw3IEBACiAgICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBwcmludCh3aGF0KGZpbGVuYW1lKSkKLSAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgcHJpbnQoJyoqKiBub3QgZm91bmQgKioqJykKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKZGlmZiAtLWdpdCBhL0xpYi9zb2NrZXQucHkgYi9MaWIvc29ja2V0LnB5CmluZGV4IGQ0ZjFiNjUuLmZmMmYwODcgMTAwNjQ0Ci0tLSBhL0xpYi9zb2NrZXQucHkKKysrIGIvTGliL3NvY2tldC5weQpAQCAtMzUsMTEgKzM1LDEzIEBACiBlcnJvciAtLSBleGNlcHRpb24gcmFpc2VkIGZvciBJL08gZXJyb3JzCiBoYXNfaXB2NiAtLSBib29sZWFuIHZhbHVlIGluZGljYXRpbmcgaWYgSVB2NiBpcyBzdXBwb3J0ZWQKIAotSW50ZWdlciBjb25zdGFudHM6CitJbnRFbnVtIGNvbnN0YW50czoKIAogQUZfSU5FVCwgQUZfVU5JWCAtLSBzb2NrZXQgZG9tYWlucyAoZmlyc3QgYXJndW1lbnQgdG8gc29ja2V0KCkgY2FsbCkKIFNPQ0tfU1RSRUFNLCBTT0NLX0RHUkFNLCBTT0NLX1JBVyAtLSBzb2NrZXQgdHlwZXMgKHNlY29uZCBhcmd1bWVudCkKIAorSW50ZWdlciBjb25zdGFudHM6CisKIE1hbnkgb3RoZXIgY29uc3RhbnRzIG1heSBiZSBkZWZpbmVkOyB0aGVzZSBtYXkgYmUgdXNlZCBpbiBjYWxscyB0bwogdGhlIHNldHNvY2tvcHQoKSBhbmQgZ2V0c29ja29wdCgpIG1ldGhvZHMuCiAiIiIKQEAgLTQ4LDYgKzUwLDcgQEAKIGZyb20gX3NvY2tldCBpbXBvcnQgKgogCiBpbXBvcnQgb3MsIHN5cywgaW8KK2Zyb20gZW51bSBpbXBvcnQgSW50RW51bQogCiB0cnk6CiAgICAgaW1wb3J0IGVycm5vCkBAIC01Nyw5ICs2MCwzNCBAQAogRUFHQUlOID0gZ2V0YXR0cihlcnJubywgJ0VBR0FJTicsIDExKQogRVdPVUxEQkxPQ0sgPSBnZXRhdHRyKGVycm5vLCAnRVdPVUxEQkxPQ0snLCAxMSkKIAotX19hbGxfXyA9IFsiZ2V0ZnFkbiIsICJjcmVhdGVfY29ubmVjdGlvbiJdCitfX2FsbF9fID0gWyJmcm9tZmQiLCAiZ2V0ZnFkbiIsICJjcmVhdGVfY29ubmVjdGlvbiIsCisgICAgICAgICJBZGRyZXNzRmFtaWx5IiwgIlNvY2tldEtpbmQiXQogX19hbGxfXy5leHRlbmQob3MuX2dldF9leHBvcnRzX2xpc3QoX3NvY2tldCkpCiAKKyMgU2V0IHVwIHRoZSBzb2NrZXQuQUZfKiBzb2NrZXQuU09DS18qIGNvbnN0YW50cyBhcyBtZW1iZXJzIG9mIEludEVudW1zIGZvcgorIyBuaWNlciBzdHJpbmcgcmVwcmVzZW50YXRpb25zLgorIyBOb3RlIHRoYXQgX3NvY2tldCBvbmx5IGtub3dzIGFib3V0IHRoZSBpbnRlZ2VyIHZhbHVlcy4gVGhlIHB1YmxpYyBpbnRlcmZhY2UKKyMgaW4gdGhpcyBtb2R1bGUgdW5kZXJzdGFuZHMgdGhlIGVudW1zIGFuZCB0cmFuc2xhdGVzIHRoZW0gYmFjayBmcm9tIGludGVnZXJzCisjIHdoZXJlIG5lZWRlZCAoZS5nLiAuZmFtaWx5IHByb3BlcnR5IG9mIGEgc29ja2V0IG9iamVjdCkuCitJbnRFbnVtLl9jb252ZXJ0KAorICAgICAgICAnQWRkcmVzc0ZhbWlseScsCisgICAgICAgIF9fbmFtZV9fLAorICAgICAgICBsYW1iZGEgQzogQy5pc3VwcGVyKCkgYW5kIEMuc3RhcnRzd2l0aCgnQUZfJykpCisKK0ludEVudW0uX2NvbnZlcnQoCisgICAgICAgICdTb2NrZXRLaW5kJywKKyAgICAgICAgX19uYW1lX18sCisgICAgICAgIGxhbWJkYSBDOiBDLmlzdXBwZXIoKSBhbmQgQy5zdGFydHN3aXRoKCdTT0NLXycpKQorCitkZWYgX2ludGVudW1fY29udmVydGVyKHZhbHVlLCBlbnVtX2tsYXNzKToKKyAgICAiIiJDb252ZXJ0IGEgbnVtZXJpYyBmYW1pbHkgdmFsdWUgdG8gYW4gSW50RW51bSBtZW1iZXIuCisKKyAgICBJZiBpdCdzIG5vdCBhIGtub3duIG1lbWJlciwgcmV0dXJuIHRoZSBudW1lcmljIHZhbHVlIGl0c2VsZi4KKyAgICAiIiIKKyAgICB0cnk6CisgICAgICAgIHJldHVybiBlbnVtX2tsYXNzKHZhbHVlKQorICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICByZXR1cm4gdmFsdWUKIAogX3JlYWxzb2NrZXQgPSBzb2NrZXQKIApAQCAtOTEsNiArMTE5LDEwIEBACiAgICAgX19zbG90c19fID0gWyJfX3dlYWtyZWZfXyIsICJfaW9fcmVmcyIsICJfY2xvc2VkIl0KIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmYW1pbHk9QUZfSU5FVCwgdHlwZT1TT0NLX1NUUkVBTSwgcHJvdG89MCwgZmlsZW5vPU5vbmUpOgorICAgICAgICAjIEZvciB1c2VyIGNvZGUgYWRkcmVzcyBmYW1pbHkgYW5kIHR5cGUgdmFsdWVzIGFyZSBJbnRFbnVtIG1lbWJlcnMsIGJ1dAorICAgICAgICAjIGZvciB0aGUgdW5kZXJseWluZyBfc29ja2V0LnNvY2tldCB0aGV5J3JlIGp1c3QgaW50ZWdlcnMuIFRoZQorICAgICAgICAjIGNvbnN0cnVjdG9yIG9mIF9zb2NrZXQuc29ja2V0IGNvbnZlcnRzIHRoZSBnaXZlbiBhcmd1bWVudCB0byBhbgorICAgICAgICAjIGludGVnZXIgYXV0b21hdGljYWxseS4KICAgICAgICAgX3NvY2tldC5zb2NrZXQuX19pbml0X18oc2VsZiwgZmFtaWx5LCB0eXBlLCBwcm90bywgZmlsZW5vKQogICAgICAgICBzZWxmLl9pb19yZWZzID0gMAogICAgICAgICBzZWxmLl9jbG9zZWQgPSBGYWxzZQpAQCAtMTAzLDEzICsxMzUsMzIgQEAKICAgICAgICAgICAgIHNlbGYuY2xvc2UoKQogCiAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgICAgICAiIiJXcmFwIF9fcmVwcl9fKCkgdG8gcmV2ZWFsIHRoZSByZWFsIGNsYXNzIG5hbWUuIiIiCi0gICAgICAgIHMgPSBfc29ja2V0LnNvY2tldC5fX3JlcHJfXyhzZWxmKQotICAgICAgICBpZiBzLnN0YXJ0c3dpdGgoIjxzb2NrZXQgb2JqZWN0Iik6Ci0gICAgICAgICAgICBzID0gIjwlcy4lcyVzJXMiICUgKHNlbGYuX19jbGFzc19fLl9fbW9kdWxlX18sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRhdHRyKHNlbGYsICdfY2xvc2VkJywgRmFsc2UpIGFuZCAiIFtjbG9zZWRdICIgb3IgIiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNbNzpdKQorICAgICAgICAiIiJXcmFwIF9fcmVwcl9fKCkgdG8gcmV2ZWFsIHRoZSByZWFsIGNsYXNzIG5hbWUgYW5kIHNvY2tldAorICAgICAgICBhZGRyZXNzKGVzKS4KKyAgICAgICAgIiIiCisgICAgICAgIGNsb3NlZCA9IGdldGF0dHIoc2VsZiwgJ19jbG9zZWQnLCBGYWxzZSkKKyAgICAgICAgcyA9ICI8JXMuJXMlcyBmZD0laSwgZmFtaWx5PSVzLCB0eXBlPSVzLCBwcm90bz0laSIgXAorICAgICAgICAgICAgJSAoc2VsZi5fX2NsYXNzX18uX19tb2R1bGVfXywKKyAgICAgICAgICAgICAgIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLAorICAgICAgICAgICAgICAgIiBbY2xvc2VkXSIgaWYgY2xvc2VkIGVsc2UgIiIsCisgICAgICAgICAgICAgICBzZWxmLmZpbGVubygpLAorICAgICAgICAgICAgICAgc2VsZi5mYW1pbHksCisgICAgICAgICAgICAgICBzZWxmLnR5cGUsCisgICAgICAgICAgICAgICBzZWxmLnByb3RvKQorICAgICAgICBpZiBub3QgY2xvc2VkOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGxhZGRyID0gc2VsZi5nZXRzb2NrbmFtZSgpCisgICAgICAgICAgICAgICAgaWYgbGFkZHI6CisgICAgICAgICAgICAgICAgICAgIHMgKz0gIiwgbGFkZHI9JXMiICUgc3RyKGxhZGRyKQorICAgICAgICAgICAgZXhjZXB0IGVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByYWRkciA9IHNlbGYuZ2V0cGVlcm5hbWUoKQorICAgICAgICAgICAgICAgIGlmIHJhZGRyOgorICAgICAgICAgICAgICAgICAgICBzICs9ICIsIHJhZGRyPSVzIiAlIHN0cihyYWRkcikKKyAgICAgICAgICAgIGV4Y2VwdCBlcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIHMgKz0gJz4nCiAgICAgICAgIHJldHVybiBzCiAKICAgICBkZWYgX19nZXRzdGF0ZV9fKHNlbGYpOgpAQCAtMTE4LDcgKzE2OSw4IEBACiAgICAgZGVmIGR1cChzZWxmKToKICAgICAgICAgIiIiZHVwKCkgLT4gc29ja2V0IG9iamVjdAogCi0gICAgICAgIFJldHVybiBhIG5ldyBzb2NrZXQgb2JqZWN0IGNvbm5lY3RlZCB0byB0aGUgc2FtZSBzeXN0ZW0gcmVzb3VyY2UuCisgICAgICAgIER1cGxpY2F0ZSB0aGUgc29ja2V0LiBSZXR1cm4gYSBuZXcgc29ja2V0IG9iamVjdCBjb25uZWN0ZWQgdG8gdGhlIHNhbWUKKyAgICAgICAgc3lzdGVtIHJlc291cmNlLiBUaGUgbmV3IHNvY2tldCBpcyBub24taW5oZXJpdGFibGUuCiAgICAgICAgICIiIgogICAgICAgICBmZCA9IGR1cChzZWxmLmZpbGVubygpKQogICAgICAgICBzb2NrID0gc2VsZi5fX2NsYXNzX18oc2VsZi5mYW1pbHksIHNlbGYudHlwZSwgc2VsZi5wcm90bywgZmlsZW5vPWZkKQpAQCAtMTMzLDcgKzE4NSwxMSBAQAogICAgICAgICBGb3IgSVAgc29ja2V0cywgdGhlIGFkZHJlc3MgaW5mbyBpcyBhIHBhaXIgKGhvc3RhZGRyLCBwb3J0KS4KICAgICAgICAgIiIiCiAgICAgICAgIGZkLCBhZGRyID0gc2VsZi5fYWNjZXB0KCkKLSAgICAgICAgc29jayA9IHNvY2tldChzZWxmLmZhbWlseSwgc2VsZi50eXBlLCBzZWxmLnByb3RvLCBmaWxlbm89ZmQpCisgICAgICAgICMgSWYgb3VyIHR5cGUgaGFzIHRoZSBTT0NLX05PTkJMT0NLIGZsYWcsIHdlIHNob3VsZG4ndCBwYXNzIGl0IG9udG8gdGhlCisgICAgICAgICMgbmV3IHNvY2tldC4gV2UgZG8gbm90IGN1cnJlbnRseSBhbGxvdyBwYXNzaW5nIFNPQ0tfTk9OQkxPQ0sgdG8KKyAgICAgICAgIyBhY2NlcHQ0LCBzbyB0aGUgcmV0dXJuZWQgc29ja2V0IGlzIGFsd2F5cyBibG9ja2luZy4KKyAgICAgICAgdHlwZSA9IHNlbGYudHlwZSAmIH5nbG9iYWxzKCkuZ2V0KCJTT0NLX05PTkJMT0NLIiwgMCkKKyAgICAgICAgc29jayA9IHNvY2tldChzZWxmLmZhbWlseSwgdHlwZSwgc2VsZi5wcm90bywgZmlsZW5vPWZkKQogICAgICAgICAjIElzc3VlICM3OTk1OiBpZiBubyBkZWZhdWx0IHRpbWVvdXQgaXMgc2V0IGFuZCB0aGUgbGlzdGVuaW5nCiAgICAgICAgICMgc29ja2V0IGhhZCBhIChub24temVybykgdGltZW91dCwgZm9yY2UgdGhlIG5ldyBzb2NrZXQgaW4gYmxvY2tpbmcKICAgICAgICAgIyBtb2RlIHRvIG92ZXJyaWRlIHBsYXRmb3JtLXNwZWNpZmljIHNvY2tldCBmbGFncyBpbmhlcml0YW5jZS4KQEAgLTE0OSw5ICsyMDUsOCBAQAogICAgICAgICBleGNlcHQgdGhlIG9ubHkgbW9kZSBjaGFyYWN0ZXJzIHN1cHBvcnRlZCBhcmUgJ3InLCAndycgYW5kICdiJy4KICAgICAgICAgVGhlIHNlbWFudGljcyBhcmUgc2ltaWxhciB0b28uICAoWFhYIHJlZmFjdG9yIHRvIHNoYXJlIGNvZGU/KQogICAgICAgICAiIiIKLSAgICAgICAgZm9yIGMgaW4gbW9kZToKLSAgICAgICAgICAgIGlmIGMgbm90IGluIHsiciIsICJ3IiwgImIifToKLSAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJpbnZhbGlkIG1vZGUgJXIgKG9ubHkgciwgdywgYiBhbGxvd2VkKSIpCisgICAgICAgIGlmIG5vdCBzZXQobW9kZSkgPD0geyJyIiwgInciLCAiYiJ9OgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiaW52YWxpZCBtb2RlICVyIChvbmx5IHIsIHcsIGIgYWxsb3dlZCkiICUgKG1vZGUsKSkKICAgICAgICAgd3JpdGluZyA9ICJ3IiBpbiBtb2RlCiAgICAgICAgIHJlYWRpbmcgPSAiciIgaW4gbW9kZSBvciBub3Qgd3JpdGluZwogICAgICAgICBhc3NlcnQgcmVhZGluZyBvciB3cml0aW5nCkBAIC0yMTAsNiArMjY1LDMxIEBACiAgICAgICAgIHNlbGYuX2Nsb3NlZCA9IFRydWUKICAgICAgICAgcmV0dXJuIHN1cGVyKCkuZGV0YWNoKCkKIAorICAgIEBwcm9wZXJ0eQorICAgIGRlZiBmYW1pbHkoc2VsZik6CisgICAgICAgICIiIlJlYWQtb25seSBhY2Nlc3MgdG8gdGhlIGFkZHJlc3MgZmFtaWx5IGZvciB0aGlzIHNvY2tldC4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBfaW50ZW51bV9jb252ZXJ0ZXIoc3VwZXIoKS5mYW1pbHksIEFkZHJlc3NGYW1pbHkpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgdHlwZShzZWxmKToKKyAgICAgICAgIiIiUmVhZC1vbmx5IGFjY2VzcyB0byB0aGUgc29ja2V0IHR5cGUuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gX2ludGVudW1fY29udmVydGVyKHN1cGVyKCkudHlwZSwgU29ja2V0S2luZCkKKworICAgIGlmIG9zLm5hbWUgPT0gJ250JzoKKyAgICAgICAgZGVmIGdldF9pbmhlcml0YWJsZShzZWxmKToKKyAgICAgICAgICAgIHJldHVybiBvcy5nZXRfaGFuZGxlX2luaGVyaXRhYmxlKHNlbGYuZmlsZW5vKCkpCisgICAgICAgIGRlZiBzZXRfaW5oZXJpdGFibGUoc2VsZiwgaW5oZXJpdGFibGUpOgorICAgICAgICAgICAgb3Muc2V0X2hhbmRsZV9pbmhlcml0YWJsZShzZWxmLmZpbGVubygpLCBpbmhlcml0YWJsZSkKKyAgICBlbHNlOgorICAgICAgICBkZWYgZ2V0X2luaGVyaXRhYmxlKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuIG9zLmdldF9pbmhlcml0YWJsZShzZWxmLmZpbGVubygpKQorICAgICAgICBkZWYgc2V0X2luaGVyaXRhYmxlKHNlbGYsIGluaGVyaXRhYmxlKToKKyAgICAgICAgICAgIG9zLnNldF9pbmhlcml0YWJsZShzZWxmLmZpbGVubygpLCBpbmhlcml0YWJsZSkKKyAgICBnZXRfaW5oZXJpdGFibGUuX19kb2NfXyA9ICJHZXQgdGhlIGluaGVyaXRhYmxlIGZsYWcgb2YgdGhlIHNvY2tldCIKKyAgICBzZXRfaW5oZXJpdGFibGUuX19kb2NfXyA9ICJTZXQgdGhlIGluaGVyaXRhYmxlIGZsYWcgb2YgdGhlIHNvY2tldCIKKwogZGVmIGZyb21mZChmZCwgZmFtaWx5LCB0eXBlLCBwcm90bz0wKToKICAgICAiIiIgZnJvbWZkKGZkLCBmYW1pbHksIHR5cGVbLCBwcm90b10pIC0+IHNvY2tldCBvYmplY3QKIApAQCAtMjIzLDEwICszMDMsMTEgQEAKICAgICBkZWYgZnJvbXNoYXJlKGluZm8pOgogICAgICAgICAiIiIgZnJvbXNoYXJlKGluZm8pIC0+IHNvY2tldCBvYmplY3QKIAotICAgICAgICBDcmVhdGUgYSBzb2NrZXQgb2JqZWN0IGZyb20gYSB0aGUgYnl0ZXMgb2JqZWN0IHJldHVybmVkIGJ5CisgICAgICAgIENyZWF0ZSBhIHNvY2tldCBvYmplY3QgZnJvbSB0aGUgYnl0ZXMgb2JqZWN0IHJldHVybmVkIGJ5CiAgICAgICAgIHNvY2tldC5zaGFyZShwaWQpLgogICAgICAgICAiIiIKICAgICAgICAgcmV0dXJuIHNvY2tldCgwLCAwLCAwLCBpbmZvKQorICAgIF9fYWxsX18uYXBwZW5kKCJmcm9tc2hhcmUiKQogCiBpZiBoYXNhdHRyKF9zb2NrZXQsICJzb2NrZXRwYWlyIik6CiAKQEAgLTI5MSw3ICszNzIsNyBAQAogICAgICAgICBzZWxmLl9jaGVja0Nsb3NlZCgpCiAgICAgICAgIHNlbGYuX2NoZWNrUmVhZGFibGUoKQogICAgICAgICBpZiBzZWxmLl90aW1lb3V0X29jY3VycmVkOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigiY2Fubm90IHJlYWQgZnJvbSB0aW1lZCBvdXQgb2JqZWN0IikKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoImNhbm5vdCByZWFkIGZyb20gdGltZWQgb3V0IG9iamVjdCIpCiAgICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3NvY2sucmVjdl9pbnRvKGIpCkBAIC00MzUsMyArNTE2LDI3IEBACiAgICAgICAgIHJhaXNlIGVycgogICAgIGVsc2U6CiAgICAgICAgIHJhaXNlIGVycm9yKCJnZXRhZGRyaW5mbyByZXR1cm5zIGFuIGVtcHR5IGxpc3QiKQorCitkZWYgZ2V0YWRkcmluZm8oaG9zdCwgcG9ydCwgZmFtaWx5PTAsIHR5cGU9MCwgcHJvdG89MCwgZmxhZ3M9MCk6CisgICAgIiIiUmVzb2x2ZSBob3N0IGFuZCBwb3J0IGludG8gbGlzdCBvZiBhZGRyZXNzIGluZm8gZW50cmllcy4KKworICAgIFRyYW5zbGF0ZSB0aGUgaG9zdC9wb3J0IGFyZ3VtZW50IGludG8gYSBzZXF1ZW5jZSBvZiA1LXR1cGxlcyB0aGF0IGNvbnRhaW4KKyAgICBhbGwgdGhlIG5lY2Vzc2FyeSBhcmd1bWVudHMgZm9yIGNyZWF0aW5nIGEgc29ja2V0IGNvbm5lY3RlZCB0byB0aGF0IHNlcnZpY2UuCisgICAgaG9zdCBpcyBhIGRvbWFpbiBuYW1lLCBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhbiBJUHY0L3Y2IGFkZHJlc3Mgb3IKKyAgICBOb25lLiBwb3J0IGlzIGEgc3RyaW5nIHNlcnZpY2UgbmFtZSBzdWNoIGFzICdodHRwJywgYSBudW1lcmljIHBvcnQgbnVtYmVyIG9yCisgICAgTm9uZS4gQnkgcGFzc2luZyBOb25lIGFzIHRoZSB2YWx1ZSBvZiBob3N0IGFuZCBwb3J0LCB5b3UgY2FuIHBhc3MgTlVMTCB0bworICAgIHRoZSB1bmRlcmx5aW5nIEMgQVBJLgorCisgICAgVGhlIGZhbWlseSwgdHlwZSBhbmQgcHJvdG8gYXJndW1lbnRzIGNhbiBiZSBvcHRpb25hbGx5IHNwZWNpZmllZCBpbiBvcmRlciB0bworICAgIG5hcnJvdyB0aGUgbGlzdCBvZiBhZGRyZXNzZXMgcmV0dXJuZWQuIFBhc3NpbmcgemVybyBhcyBhIHZhbHVlIGZvciBlYWNoIG9mCisgICAgdGhlc2UgYXJndW1lbnRzIHNlbGVjdHMgdGhlIGZ1bGwgcmFuZ2Ugb2YgcmVzdWx0cy4KKyAgICAiIiIKKyAgICAjIFdlIG92ZXJyaWRlIHRoaXMgZnVuY3Rpb24gc2luY2Ugd2Ugd2FudCB0byB0cmFuc2xhdGUgdGhlIG51bWVyaWMgZmFtaWx5CisgICAgIyBhbmQgc29ja2V0IHR5cGUgdmFsdWVzIHRvIGVudW0gY29uc3RhbnRzLgorICAgIGFkZHJsaXN0ID0gW10KKyAgICBmb3IgcmVzIGluIF9zb2NrZXQuZ2V0YWRkcmluZm8oaG9zdCwgcG9ydCwgZmFtaWx5LCB0eXBlLCBwcm90bywgZmxhZ3MpOgorICAgICAgICBhZiwgc29ja3R5cGUsIHByb3RvLCBjYW5vbm5hbWUsIHNhID0gcmVzCisgICAgICAgIGFkZHJsaXN0LmFwcGVuZCgoX2ludGVudW1fY29udmVydGVyKGFmLCBBZGRyZXNzRmFtaWx5KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBfaW50ZW51bV9jb252ZXJ0ZXIoc29ja3R5cGUsIFNvY2tldEtpbmQpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvLCBjYW5vbm5hbWUsIHNhKSkKKyAgICByZXR1cm4gYWRkcmxpc3QKZGlmZiAtLWdpdCBhL0xpYi9zb2NrZXRzZXJ2ZXIucHkgYi9MaWIvc29ja2V0c2VydmVyLnB5CmluZGV4IDgzMzJmZGYuLjVjYjg5YmUgMTAwNjQ0Ci0tLSBhL0xpYi9zb2NrZXRzZXJ2ZXIucHkKKysrIGIvTGliL3NvY2tldHNlcnZlci5weQpAQCAtMTMxLDcgKzEzMSw2IEBACiAKIGltcG9ydCBzb2NrZXQKIGltcG9ydCBzZWxlY3QKLWltcG9ydCBzeXMKIGltcG9ydCBvcwogaW1wb3J0IGVycm5vCiB0cnk6CkBAIC0xMzksMTAgKzEzOCwxMCBAQAogZXhjZXB0IEltcG9ydEVycm9yOgogICAgIGltcG9ydCBkdW1teV90aHJlYWRpbmcgYXMgdGhyZWFkaW5nCiAKLV9fYWxsX18gPSBbIlRDUFNlcnZlciIsIlVEUFNlcnZlciIsIkZvcmtpbmdVRFBTZXJ2ZXIiLCJGb3JraW5nVENQU2VydmVyIiwKLSAgICAgICAgICAgIlRocmVhZGluZ1VEUFNlcnZlciIsIlRocmVhZGluZ1RDUFNlcnZlciIsIkJhc2VSZXF1ZXN0SGFuZGxlciIsCi0gICAgICAgICAgICJTdHJlYW1SZXF1ZXN0SGFuZGxlciIsIkRhdGFncmFtUmVxdWVzdEhhbmRsZXIiLAotICAgICAgICAgICAiVGhyZWFkaW5nTWl4SW4iLCAiRm9ya2luZ01peEluIl0KK19fYWxsX18gPSBbIkJhc2VTZXJ2ZXIiLCAiVENQU2VydmVyIiwgIlVEUFNlcnZlciIsICJGb3JraW5nVURQU2VydmVyIiwKKyAgICAgICAgICAgIkZvcmtpbmdUQ1BTZXJ2ZXIiLCAiVGhyZWFkaW5nVURQU2VydmVyIiwgIlRocmVhZGluZ1RDUFNlcnZlciIsCisgICAgICAgICAgICJCYXNlUmVxdWVzdEhhbmRsZXIiLCAiU3RyZWFtUmVxdWVzdEhhbmRsZXIiLAorICAgICAgICAgICAiRGF0YWdyYW1SZXF1ZXN0SGFuZGxlciIsICJUaHJlYWRpbmdNaXhJbiIsICJGb3JraW5nTWl4SW4iXQogaWYgaGFzYXR0cihzb2NrZXQsICJBRl9VTklYIik6CiAgICAgX19hbGxfXy5leHRlbmQoWyJVbml4U3RyZWFtU2VydmVyIiwiVW5peERhdGFncmFtU2VydmVyIiwKICAgICAgICAgICAgICAgICAgICAgIlRocmVhZGluZ1VuaXhTdHJlYW1TZXJ2ZXIiLApAQCAtMjk5LDcgKzI5OCw3IEBACiAgICAgICAgICIiIgogICAgICAgICB0cnk6CiAgICAgICAgICAgICByZXF1ZXN0LCBjbGllbnRfYWRkcmVzcyA9IHNlbGYuZ2V0X3JlcXVlc3QoKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHJldHVybgogICAgICAgICBpZiBzZWxmLnZlcmlmeV9yZXF1ZXN0KHJlcXVlc3QsIGNsaWVudF9hZGRyZXNzKToKICAgICAgICAgICAgIHRyeToKQEAgLTQyNyw4ICs0MjYsMTIgQEAKICAgICAgICAgc2VsZi5zb2NrZXQgPSBzb2NrZXQuc29ja2V0KHNlbGYuYWRkcmVzc19mYW1pbHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNvY2tldF90eXBlKQogICAgICAgICBpZiBiaW5kX2FuZF9hY3RpdmF0ZToKLSAgICAgICAgICAgIHNlbGYuc2VydmVyX2JpbmQoKQotICAgICAgICAgICAgc2VsZi5zZXJ2ZXJfYWN0aXZhdGUoKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyX2JpbmQoKQorICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyX2FjdGl2YXRlKCkKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBzZWxmLnNlcnZlcl9jbG9zZSgpCisgICAgICAgICAgICAgICAgcmFpc2UKIAogICAgIGRlZiBzZXJ2ZXJfYmluZChzZWxmKToKICAgICAgICAgIiIiQ2FsbGVkIGJ5IGNvbnN0cnVjdG9yIHRvIGJpbmQgdGhlIHNvY2tldC4KQEAgLTQ3OSw3ICs0ODIsNyBAQAogICAgICAgICAgICAgI2V4cGxpY2l0bHkgc2h1dGRvd24uICBzb2NrZXQuY2xvc2UoKSBtZXJlbHkgcmVsZWFzZXMKICAgICAgICAgICAgICN0aGUgc29ja2V0IGFuZCB3YWl0cyBmb3IgR0MgdG8gcGVyZm9ybSB0aGUgYWN0dWFsIGNsb3NlLgogICAgICAgICAgICAgcmVxdWVzdC5zaHV0ZG93bihzb2NrZXQuU0hVVF9XUikKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBwYXNzICNzb21lIHBsYXRmb3JtcyBtYXkgcmFpc2UgRU5PVENPTk4gaGVyZQogICAgICAgICBzZWxmLmNsb3NlX3JlcXVlc3QocmVxdWVzdCkKIApAQCAtNTI0LDM1ICs1MjcsMzkgQEAKIAogICAgIGRlZiBjb2xsZWN0X2NoaWxkcmVuKHNlbGYpOgogICAgICAgICAiIiJJbnRlcm5hbCByb3V0aW5lIHRvIHdhaXQgZm9yIGNoaWxkcmVuIHRoYXQgaGF2ZSBleGl0ZWQuIiIiCi0gICAgICAgIGlmIHNlbGYuYWN0aXZlX2NoaWxkcmVuIGlzIE5vbmU6IHJldHVybgotICAgICAgICB3aGlsZSBsZW4oc2VsZi5hY3RpdmVfY2hpbGRyZW4pID49IHNlbGYubWF4X2NoaWxkcmVuOgotICAgICAgICAgICAgIyBYWFg6IFRoaXMgd2lsbCB3YWl0IGZvciBhbnkgY2hpbGQgcHJvY2Vzcywgbm90IGp1c3Qgb25lcwotICAgICAgICAgICAgIyBzcGF3bmVkIGJ5IHRoaXMgbGlicmFyeS4gVGhpcyBjb3VsZCBjb25mdXNlIG90aGVyCi0gICAgICAgICAgICAjIGxpYnJhcmllcyB0aGF0IGV4cGVjdCB0byBiZSBhYmxlIHRvIHdhaXQgZm9yIHRoZWlyIG93bgotICAgICAgICAgICAgIyBjaGlsZHJlbi4KLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBwaWQsIHN0YXR1cyA9IG9zLndhaXRwaWQoMCwgMCkKLSAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKLSAgICAgICAgICAgICAgICBwaWQgPSBOb25lCi0gICAgICAgICAgICBpZiBwaWQgbm90IGluIHNlbGYuYWN0aXZlX2NoaWxkcmVuOiBjb250aW51ZQotICAgICAgICAgICAgc2VsZi5hY3RpdmVfY2hpbGRyZW4ucmVtb3ZlKHBpZCkKKyAgICAgICAgaWYgc2VsZi5hY3RpdmVfY2hpbGRyZW4gaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybgogCi0gICAgICAgICMgWFhYOiBUaGlzIGxvb3AgcnVucyBtb3JlIHN5c3RlbSBjYWxscyB0aGFuIGl0IG91Z2h0Ci0gICAgICAgICMgdG8uIFRoZXJlIHNob3VsZCBiZSBhIHdheSB0byBwdXQgdGhlIGFjdGl2ZV9jaGlsZHJlbiBpbnRvIGEKLSAgICAgICAgIyBwcm9jZXNzIGdyb3VwIGFuZCB0aGVuIHVzZSBvcy53YWl0cGlkKC1wZ2lkKSB0byB3YWl0IGZvciBhbnkKLSAgICAgICAgIyBvZiB0aGF0IHNldCwgYnV0IEkgY291bGRuJ3QgZmluZCBhIHdheSB0byBhbGxvY2F0ZSBwZ2lkcwotICAgICAgICAjIHRoYXQgY291bGRuJ3QgY29sbGlkZS4KLSAgICAgICAgZm9yIGNoaWxkIGluIHNlbGYuYWN0aXZlX2NoaWxkcmVuOgorICAgICAgICAjIElmIHdlJ3JlIGFib3ZlIHRoZSBtYXggbnVtYmVyIG9mIGNoaWxkcmVuLCB3YWl0IGFuZCByZWFwIHRoZW0gdW50aWwKKyAgICAgICAgIyB3ZSBnbyBiYWNrIGJlbG93IHRocmVzaG9sZC4gTm90ZSB0aGF0IHdlIHVzZSB3YWl0cGlkKC0xKSBiZWxvdyB0byBiZQorICAgICAgICAjIGFibGUgdG8gY29sbGVjdCBjaGlsZHJlbiBpbiBzaXplKDxkZWZ1bmN0IGNoaWxkcmVuPikgc3lzY2FsbHMgaW5zdGVhZAorICAgICAgICAjIG9mIHNpemUoPGNoaWxkcmVuPik6IHRoZSBkb3duc2lkZSBpcyB0aGF0IHRoaXMgbWlnaHQgcmVhcCBjaGlsZHJlbgorICAgICAgICAjIHdoaWNoIHdlIGRpZG4ndCBzcGF3biwgd2hpY2ggaXMgd2h5IHdlIG9ubHkgcmVzb3J0IHRvIHRoaXMgd2hlbiB3ZSdyZQorICAgICAgICAjIGFib3ZlIG1heF9jaGlsZHJlbi4KKyAgICAgICAgd2hpbGUgbGVuKHNlbGYuYWN0aXZlX2NoaWxkcmVuKSA+PSBzZWxmLm1heF9jaGlsZHJlbjoKICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBwaWQsIHN0YXR1cyA9IG9zLndhaXRwaWQoY2hpbGQsIG9zLldOT0hBTkcpCi0gICAgICAgICAgICBleGNlcHQgb3MuZXJyb3I6Ci0gICAgICAgICAgICAgICAgcGlkID0gTm9uZQotICAgICAgICAgICAgaWYgbm90IHBpZDogY29udGludWUKKyAgICAgICAgICAgICAgICBwaWQsIF8gPSBvcy53YWl0cGlkKC0xLCAwKQorICAgICAgICAgICAgICAgIHNlbGYuYWN0aXZlX2NoaWxkcmVuLmRpc2NhcmQocGlkKQorICAgICAgICAgICAgZXhjZXB0IEludGVycnVwdGVkRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZXhjZXB0IENoaWxkUHJvY2Vzc0Vycm9yOgorICAgICAgICAgICAgICAgICMgd2UgZG9uJ3QgaGF2ZSBhbnkgY2hpbGRyZW4sIHdlJ3JlIGRvbmUKKyAgICAgICAgICAgICAgICBzZWxmLmFjdGl2ZV9jaGlsZHJlbi5jbGVhcigpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICMgTm93IHJlYXAgYWxsIGRlZnVuY3QgY2hpbGRyZW4uCisgICAgICAgIGZvciBwaWQgaW4gc2VsZi5hY3RpdmVfY2hpbGRyZW4uY29weSgpOgogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHNlbGYuYWN0aXZlX2NoaWxkcmVuLnJlbW92ZShwaWQpCi0gICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBlOgotICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJyVzLiB4PSVkIGFuZCBsaXN0PSVyJyAlIChlLm1lc3NhZ2UsIHBpZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hY3RpdmVfY2hpbGRyZW4pKQorICAgICAgICAgICAgICAgIHBpZCwgXyA9IG9zLndhaXRwaWQocGlkLCBvcy5XTk9IQU5HKQorICAgICAgICAgICAgICAgICMgaWYgdGhlIGNoaWxkIGhhc24ndCBleGl0ZWQgeWV0LCBwaWQgd2lsbCBiZSAwIGFuZCBpZ25vcmVkIGJ5CisgICAgICAgICAgICAgICAgIyBkaXNjYXJkKCkgYmVsb3cKKyAgICAgICAgICAgICAgICBzZWxmLmFjdGl2ZV9jaGlsZHJlbi5kaXNjYXJkKHBpZCkKKyAgICAgICAgICAgIGV4Y2VwdCBDaGlsZFByb2Nlc3NFcnJvcjoKKyAgICAgICAgICAgICAgICAjIHNvbWVvbmUgZWxzZSByZWFwZWQgaXQKKyAgICAgICAgICAgICAgICBzZWxmLmFjdGl2ZV9jaGlsZHJlbi5kaXNjYXJkKHBpZCkKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKIAogICAgIGRlZiBoYW5kbGVfdGltZW91dChzZWxmKToKICAgICAgICAgIiIiV2FpdCBmb3Igem9tYmllcyBhZnRlciBzZWxmLnRpbWVvdXQgc2Vjb25kcyBvZiBpbmFjdGl2aXR5LgpAQCAtNTc0LDggKzU4MSw4IEBACiAgICAgICAgIGlmIHBpZDoKICAgICAgICAgICAgICMgUGFyZW50IHByb2Nlc3MKICAgICAgICAgICAgIGlmIHNlbGYuYWN0aXZlX2NoaWxkcmVuIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgc2VsZi5hY3RpdmVfY2hpbGRyZW4gPSBbXQotICAgICAgICAgICAgc2VsZi5hY3RpdmVfY2hpbGRyZW4uYXBwZW5kKHBpZCkKKyAgICAgICAgICAgICAgICBzZWxmLmFjdGl2ZV9jaGlsZHJlbiA9IHNldCgpCisgICAgICAgICAgICBzZWxmLmFjdGl2ZV9jaGlsZHJlbi5hZGQocGlkKQogICAgICAgICAgICAgc2VsZi5jbG9zZV9yZXF1ZXN0KHJlcXVlc3QpCiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgZWxzZToKZGlmZiAtLWdpdCBhL0xpYi9zcWxpdGUzL2RiYXBpMi5weSBiL0xpYi9zcWxpdGUzL2RiYXBpMi5weQppbmRleCA5YTBiNzY2Li45OTE2ODJjIDEwMDY0NAotLS0gYS9MaWIvc3FsaXRlMy9kYmFwaTIucHkKKysrIGIvTGliL3NxbGl0ZTMvZGJhcGkyLnB5CkBAIC0yMiw2ICsyMiw3IEBACiAKIGltcG9ydCBkYXRldGltZQogaW1wb3J0IHRpbWUKK2ltcG9ydCBjb2xsZWN0aW9ucy5hYmMKIAogZnJvbSBfc3FsaXRlMyBpbXBvcnQgKgogCkBAIC01MCw2ICs1MSw3IEBACiBzcWxpdGVfdmVyc2lvbl9pbmZvID0gdHVwbGUoW2ludCh4KSBmb3IgeCBpbiBzcWxpdGVfdmVyc2lvbi5zcGxpdCgiLiIpXSkKIAogQmluYXJ5ID0gbWVtb3J5dmlldworY29sbGVjdGlvbnMuYWJjLlNlcXVlbmNlLnJlZ2lzdGVyKFJvdykKIAogZGVmIHJlZ2lzdGVyX2FkYXB0ZXJzX2FuZF9jb252ZXJ0ZXJzKCk6CiAgICAgZGVmIGFkYXB0X2RhdGUodmFsKToKZGlmZiAtLWdpdCBhL0xpYi9zcWxpdGUzL3Rlc3QvZGJhcGkucHkgYi9MaWIvc3FsaXRlMy90ZXN0L2RiYXBpLnB5CmluZGV4IGI3ZWMxYWQuLjA0NjQ5ZmMgMTAwNjQ0Ci0tLSBhL0xpYi9zcWxpdGUzL3Rlc3QvZGJhcGkucHkKKysrIGIvTGliL3NxbGl0ZTMvdGVzdC9kYmFwaS5weQpAQCAtMjgsNiArMjgsOSBAQAogZXhjZXB0IEltcG9ydEVycm9yOgogICAgIHRocmVhZGluZyA9IE5vbmUKIAorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IFRFU1RGTiwgdW5saW5rCisKKwogY2xhc3MgTW9kdWxlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiBDaGVja0FQSUxldmVsKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNxbGl0ZS5hcGlsZXZlbCwgIjIuMCIsCkBAIC0xNjMsNiArMTY2LDIxIEBACiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IpOgogICAgICAgICAgICAgc2VsZi5jeC5pbl90cmFuc2FjdGlvbiA9IFRydWUKIAorICAgIGRlZiBDaGVja09wZW5Vcmkoc2VsZik6CisgICAgICAgIGlmIHNxbGl0ZS5zcWxpdGVfdmVyc2lvbl9pbmZvIDwgKDMsIDcsIDcpOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzcWxpdGUuTm90U3VwcG9ydGVkRXJyb3IpOgorICAgICAgICAgICAgICAgIHNxbGl0ZS5jb25uZWN0KCc6bWVtb3J5OicsIHVyaT1UcnVlKQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cCh1bmxpbmssIFRFU1RGTikKKyAgICAgICAgd2l0aCBzcWxpdGUuY29ubmVjdChURVNURk4pIGFzIGN4OgorICAgICAgICAgICAgY3guZXhlY3V0ZSgnY3JlYXRlIHRhYmxlIHRlc3QoaWQgaW50ZWdlciknKQorICAgICAgICB3aXRoIHNxbGl0ZS5jb25uZWN0KCdmaWxlOicgKyBURVNURk4sIHVyaT1UcnVlKSBhcyBjeDoKKyAgICAgICAgICAgIGN4LmV4ZWN1dGUoJ2luc2VydCBpbnRvIHRlc3QoaWQpIHZhbHVlcygwKScpCisgICAgICAgIHdpdGggc3FsaXRlLmNvbm5lY3QoJ2ZpbGU6JyArIFRFU1RGTiArICc/bW9kZT1ybycsIHVyaT1UcnVlKSBhcyBjeDoKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc3FsaXRlLk9wZXJhdGlvbmFsRXJyb3IpOgorICAgICAgICAgICAgICAgIGN4LmV4ZWN1dGUoJ2luc2VydCBpbnRvIHRlc3QoaWQpIHZhbHVlcygxKScpCisKKwogY2xhc3MgQ3Vyc29yVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgc2VsZi5jeCA9IHNxbGl0ZS5jb25uZWN0KCI6bWVtb3J5OiIpCmRpZmYgLS1naXQgYS9MaWIvc3FsaXRlMy90ZXN0L2ZhY3RvcnkucHkgYi9MaWIvc3FsaXRlMy90ZXN0L2ZhY3RvcnkucHkKaW5kZXggMTAxMzc1NS4uYTgzNDhiNCAxMDA2NDQKLS0tIGEvTGliL3NxbGl0ZTMvdGVzdC9mYWN0b3J5LnB5CisrKyBiL0xpYi9zcWxpdGUzL3Rlc3QvZmFjdG9yeS5weQpAQCAtMjMsNiArMjMsNyBAQAogCiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCBzcWxpdGUzIGFzIHNxbGl0ZQorZnJvbSBjb2xsZWN0aW9ucy5hYmMgaW1wb3J0IFNlcXVlbmNlCiAKIGNsYXNzIE15Q29ubmVjdGlvbihzcWxpdGUuQ29ubmVjdGlvbik6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CkBAIC05Niw5ICs5NywxOSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbDEsIDEsICJieSBuYW1lOiB3cm9uZyByZXN1bHQgZm9yIGNvbHVtbiAnQSciKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbDIsIDIsICJieSBuYW1lOiB3cm9uZyByZXN1bHQgZm9yIGNvbHVtbiAnQiciKQogCi0gICAgICAgIGNvbDEsIGNvbDIgPSByb3dbMF0sIHJvd1sxXQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbDEsIDEsICJieSBpbmRleDogd3JvbmcgcmVzdWx0IGZvciBjb2x1bW4gMCIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29sMiwgMiwgImJ5IGluZGV4OiB3cm9uZyByZXN1bHQgZm9yIGNvbHVtbiAxIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3dbMF0sIDEsICJieSBpbmRleDogd3JvbmcgcmVzdWx0IGZvciBjb2x1bW4gMCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm93WzFdLCAyLCAiYnkgaW5kZXg6IHdyb25nIHJlc3VsdCBmb3IgY29sdW1uIDEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvd1stMV0sIDIsICJieSBpbmRleDogd3JvbmcgcmVzdWx0IGZvciBjb2x1bW4gLTEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvd1stMl0sIDEsICJieSBpbmRleDogd3JvbmcgcmVzdWx0IGZvciBjb2x1bW4gLTIiKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvcik6CisgICAgICAgICAgICByb3dbJ2MnXQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IpOgorICAgICAgICAgICAgcm93WzJdCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvcik6CisgICAgICAgICAgICByb3dbLTNdCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvcik6CisgICAgICAgICAgICByb3dbMioqMTAwMF0KIAogICAgIGRlZiBDaGVja1NxbGl0ZVJvd0l0ZXIoc2VsZik6CiAgICAgICAgICIiIkNoZWNrcyBpZiB0aGUgcm93IG9iamVjdCBpcyBpdGVyYWJsZSIiIgpAQCAtMTQyLDYgKzE1MywyMyBAQAogICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHJvd18xLCByb3dfMykKICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChoYXNoKHJvd18xKSwgaGFzaChyb3dfMykpCiAKKyAgICBkZWYgQ2hlY2tTcWxpdGVSb3dBc1NlcXVlbmNlKHNlbGYpOgorICAgICAgICAiIiIgQ2hlY2tzIGlmIHRoZSByb3cgb2JqZWN0IGNhbiBhY3QgbGlrZSBhIHNlcXVlbmNlICIiIgorICAgICAgICBzZWxmLmNvbi5yb3dfZmFjdG9yeSA9IHNxbGl0ZS5Sb3cKKyAgICAgICAgcm93ID0gc2VsZi5jb24uZXhlY3V0ZSgic2VsZWN0IDEgYXMgYSwgMiBhcyBiIikuZmV0Y2hvbmUoKQorCisgICAgICAgIGFzX3R1cGxlID0gdHVwbGUocm93KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QocmV2ZXJzZWQocm93KSksIGxpc3QocmV2ZXJzZWQoYXNfdHVwbGUpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHJvdywgU2VxdWVuY2UpCisKKyAgICBkZWYgQ2hlY2tGYWtlQ3Vyc29yQ2xhc3Moc2VsZik6CisgICAgICAgICMgSXNzdWUgIzI0MjU3OiBJbmNvcnJlY3QgdXNlIG9mIFB5T2JqZWN0X0lzSW5zdGFuY2UoKSBjYXVzZWQKKyAgICAgICAgIyBzZWdtZW50YXRpb24gZmF1bHQuCisgICAgICAgIGNsYXNzIEZha2VDdXJzb3Ioc3RyKToKKyAgICAgICAgICAgIF9fY2xhc3NfXyA9IHNxbGl0ZS5DdXJzb3IKKyAgICAgICAgY3VyID0gc2VsZi5jb24uY3Vyc29yKGZhY3Rvcnk9RmFrZUN1cnNvcikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzcWxpdGUuUm93LCBjdXIsICgpKQorCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgogICAgICAgICBzZWxmLmNvbi5jbG9zZSgpCiAKZGlmZiAtLWdpdCBhL0xpYi9zcWxpdGUzL3Rlc3QvcmVncmVzc2lvbi5weSBiL0xpYi9zcWxpdGUzL3Rlc3QvcmVncmVzc2lvbi5weQppbmRleCBjNTU3YWI2Li5lYWFhYTJjIDEwMDY0NAotLS0gYS9MaWIvc3FsaXRlMy90ZXN0L3JlZ3Jlc3Npb24ucHkKKysrIGIvTGliL3NxbGl0ZTMvdGVzdC9yZWdyZXNzaW9uLnB5CkBAIC0zMzYsNiArMzM2LDE2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNxbGl0ZS5jb25uZWN0LCAiOm1lbW9yeToiLCBpc29sYXRpb25fbGV2ZWw9MTIzKQogCiAKKyAgICBkZWYgQ2hlY2tOdWxsQ2hhcmFjdGVyKHNlbGYpOgorICAgICAgICAjIElzc3VlICMyMTE0NworICAgICAgICBjb24gPSBzcWxpdGUuY29ubmVjdCgiOm1lbW9yeToiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjb24sICJcMHNlbGVjdCAxIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY29uLCAic2VsZWN0IDFcMCIpCisgICAgICAgIGN1ciA9IGNvbi5jdXJzb3IoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjdXIuZXhlY3V0ZSwgIiBcMHNlbGVjdCAyIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY3VyLmV4ZWN1dGUsICJzZWxlY3QgMlwwIikKKworCiBkZWYgc3VpdGUoKToKICAgICByZWdyZXNzaW9uX3N1aXRlID0gdW5pdHRlc3QubWFrZVN1aXRlKFJlZ3Jlc3Npb25UZXN0cywgIkNoZWNrIikKICAgICByZXR1cm4gdW5pdHRlc3QuVGVzdFN1aXRlKChyZWdyZXNzaW9uX3N1aXRlLCkpCmRpZmYgLS1naXQgYS9MaWIvc3FsaXRlMy90ZXN0L3R5cGVzLnB5IGIvTGliL3NxbGl0ZTMvdGVzdC90eXBlcy5weQppbmRleCBhOGZkYWQ5Li5hZGFkNTcxIDEwMDY0NAotLS0gYS9MaWIvc3FsaXRlMy90ZXN0L3R5cGVzLnB5CisrKyBiL0xpYi9zcWxpdGUzL3Rlc3QvdHlwZXMucHkKQEAgLTg4LDE5ICs4OCwxMCBAQAogICAgICAgICAgICAgICAgIF92YWwgPSBfdmFsLmRlY29kZSgndXRmLTgnKQogICAgICAgICAgICAgc2VsZi52YWwgPSBfdmFsCiAKLSAgICAgICAgZGVmIF9fY21wX18oc2VsZiwgb3RoZXIpOgotICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIERlY2xUeXBlc1Rlc3RzLkZvbyk6Ci0gICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcgotICAgICAgICAgICAgaWYgc2VsZi52YWwgPT0gb3RoZXIudmFsOgotICAgICAgICAgICAgICAgIHJldHVybiAwCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVybiAxCi0KICAgICAgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgICAgICBjID0gc2VsZi5fX2NtcF9fKG90aGVyKQotICAgICAgICAgICAgaWYgYyBpcyBOb3RJbXBsZW1lbnRlZDoKLSAgICAgICAgICAgICAgICByZXR1cm4gYwotICAgICAgICAgICAgcmV0dXJuIGMgPT0gMAorICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIERlY2xUeXBlc1Rlc3RzLkZvbyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgICAgICAgICByZXR1cm4gc2VsZi52YWwgPT0gb3RoZXIudmFsCiAKICAgICAgICAgZGVmIF9fY29uZm9ybV9fKHNlbGYsIHByb3RvY29sKToKICAgICAgICAgICAgIGlmIHByb3RvY29sIGlzIHNxbGl0ZS5QcmVwYXJlUHJvdG9jb2w6CmRpZmYgLS1naXQgYS9MaWIvc3JlX2NvbXBpbGUucHkgYi9MaWIvc3JlX2NvbXBpbGUucHkKaW5kZXggYjk4NGE1NC4uNTUwZWExNSAxMDA2NDQKLS0tIGEvTGliL3NyZV9jb21waWxlLnB5CisrKyBiL0xpYi9zcmVfY29tcGlsZS5weQpAQCAtMTAsOSArMTAsMTAgQEAKIAogIiIiSW50ZXJuYWwgc3VwcG9ydCBtb2R1bGUgZm9yIHNyZSIiIgogCi1pbXBvcnQgX3NyZSwgc3lzCitpbXBvcnQgX3NyZQogaW1wb3J0IHNyZV9wYXJzZQogZnJvbSBzcmVfY29uc3RhbnRzIGltcG9ydCAqCitmcm9tIF9zcmUgaW1wb3J0IE1BWFJFUEVBVAogCiBhc3NlcnQgX3NyZS5NQUdJQyA9PSBNQUdJQywgIlNSRSBtb2R1bGUgbWlzbWF0Y2giCiAKQEAgLTIxLDE0ICsyMiw1MSBAQAogZWxzZToKICAgICBNQVhDT0RFID0gMHhGRkZGRkZGRgogCi1kZWYgX2lkZW50aXR5ZnVuY3Rpb24oeCk6Ci0gICAgcmV0dXJuIHgKLQogX0xJVEVSQUxfQ09ERVMgPSBzZXQoW0xJVEVSQUwsIE5PVF9MSVRFUkFMXSkKIF9SRVBFQVRJTkdfQ09ERVMgPSBzZXQoW1JFUEVBVCwgTUlOX1JFUEVBVCwgTUFYX1JFUEVBVF0pCiBfU1VDQ0VTU19DT0RFUyA9IHNldChbU1VDQ0VTUywgRkFJTFVSRV0pCiBfQVNTRVJUX0NPREVTID0gc2V0KFtBU1NFUlQsIEFTU0VSVF9OT1RdKQogCisjIFNldHMgb2YgbG93ZXJjYXNlIGNoYXJhY3RlcnMgd2hpY2ggaGF2ZSB0aGUgc2FtZSB1cHBlcmNhc2UuCitfZXF1aXZhbGVuY2VzID0gKAorICAgICMgTEFUSU4gU01BTEwgTEVUVEVSIEksIExBVElOIFNNQUxMIExFVFRFUiBET1RMRVNTIEkKKyAgICAoMHg2OSwgMHgxMzEpLCAjIGnEsQorICAgICMgTEFUSU4gU01BTEwgTEVUVEVSIFMsIExBVElOIFNNQUxMIExFVFRFUiBMT05HIFMKKyAgICAoMHg3MywgMHgxN2YpLCAjIHPFvworICAgICMgTUlDUk8gU0lHTiwgR1JFRUsgU01BTEwgTEVUVEVSIE1VCisgICAgKDB4YjUsIDB4M2JjKSwgIyDCtc68CisgICAgIyBDT01CSU5JTkcgR1JFRUsgWVBPR0VHUkFNTUVOSSwgR1JFRUsgU01BTEwgTEVUVEVSIElPVEEsIEdSRUVLIFBST1NHRUdSQU1NRU5JCisgICAgKDB4MzQ1LCAweDNiOSwgMHgxZmJlKSwgIyBcdTAzNDXOueG+vgorICAgICMgR1JFRUsgU01BTEwgTEVUVEVSIElPVEEgV0lUSCBESUFMWVRJS0EgQU5EIFRPTk9TLCBHUkVFSyBTTUFMTCBMRVRURVIgSU9UQSBXSVRIIERJQUxZVElLQSBBTkQgT1hJQQorICAgICgweDM5MCwgMHgxZmQzKSwgIyDOkOG/kworICAgICMgR1JFRUsgU01BTEwgTEVUVEVSIFVQU0lMT04gV0lUSCBESUFMWVRJS0EgQU5EIFRPTk9TLCBHUkVFSyBTTUFMTCBMRVRURVIgVVBTSUxPTiBXSVRIIERJQUxZVElLQSBBTkQgT1hJQQorICAgICgweDNiMCwgMHgxZmUzKSwgIyDOsOG/oworICAgICMgR1JFRUsgU01BTEwgTEVUVEVSIEJFVEEsIEdSRUVLIEJFVEEgU1lNQk9MCisgICAgKDB4M2IyLCAweDNkMCksICMgzrLPkAorICAgICMgR1JFRUsgU01BTEwgTEVUVEVSIEVQU0lMT04sIEdSRUVLIExVTkFURSBFUFNJTE9OIFNZTUJPTAorICAgICgweDNiNSwgMHgzZjUpLCAjIM61z7UKKyAgICAjIEdSRUVLIFNNQUxMIExFVFRFUiBUSEVUQSwgR1JFRUsgVEhFVEEgU1lNQk9MCisgICAgKDB4M2I4LCAweDNkMSksICMgzrjPkQorICAgICMgR1JFRUsgU01BTEwgTEVUVEVSIEtBUFBBLCBHUkVFSyBLQVBQQSBTWU1CT0wKKyAgICAoMHgzYmEsIDB4M2YwKSwgIyDOus+wCisgICAgIyBHUkVFSyBTTUFMTCBMRVRURVIgUEksIEdSRUVLIFBJIFNZTUJPTAorICAgICgweDNjMCwgMHgzZDYpLCAjIM+Az5YKKyAgICAjIEdSRUVLIFNNQUxMIExFVFRFUiBSSE8sIEdSRUVLIFJITyBTWU1CT0wKKyAgICAoMHgzYzEsIDB4M2YxKSwgIyDPgc+xCisgICAgIyBHUkVFSyBTTUFMTCBMRVRURVIgRklOQUwgU0lHTUEsIEdSRUVLIFNNQUxMIExFVFRFUiBTSUdNQQorICAgICgweDNjMiwgMHgzYzMpLCAjIM+Cz4MKKyAgICAjIEdSRUVLIFNNQUxMIExFVFRFUiBQSEksIEdSRUVLIFBISSBTWU1CT0wKKyAgICAoMHgzYzYsIDB4M2Q1KSwgIyDPhs+VCisgICAgIyBMQVRJTiBTTUFMTCBMRVRURVIgUyBXSVRIIERPVCBBQk9WRSwgTEFUSU4gU01BTEwgTEVUVEVSIExPTkcgUyBXSVRIIERPVCBBQk9WRQorICAgICgweDFlNjEsIDB4MWU5YiksICMg4bmh4bqbCisgICAgIyBMQVRJTiBTTUFMTCBMSUdBVFVSRSBMT05HIFMgVCwgTEFUSU4gU01BTEwgTElHQVRVUkUgU1QKKyAgICAoMHhmYjA1LCAweGZiMDYpLCAjIO+she+shgorKQorCisjIE1hcHMgdGhlIGxvd2VyY2FzZSBjb2RlIHRvIGxvd2VyY2FzZSBjb2RlcyB3aGljaCBoYXZlIHRoZSBzYW1lIHVwcGVyY2FzZS4KK19pZ25vcmVjYXNlX2ZpeGVzID0ge2k6IHR1cGxlKGogZm9yIGogaW4gdCBpZiBpICE9IGopCisgICAgICAgICAgICAgICAgICAgICBmb3IgdCBpbiBfZXF1aXZhbGVuY2VzIGZvciBpIGluIHR9CisKIGRlZiBfY29tcGlsZShjb2RlLCBwYXR0ZXJuLCBmbGFncyk6CiAgICAgIyBpbnRlcm5hbDogY29tcGlsZSBhIChzdWIpcGF0dGVybgogICAgIGVtaXQgPSBjb2RlLmFwcGVuZApAQCAtMzcsMTEgKzc1LDI5IEBACiAgICAgUkVQRUFUSU5HX0NPREVTID0gX1JFUEVBVElOR19DT0RFUwogICAgIFNVQ0NFU1NfQ09ERVMgPSBfU1VDQ0VTU19DT0RFUwogICAgIEFTU0VSVF9DT0RFUyA9IF9BU1NFUlRfQ09ERVMKKyAgICBpZiAoZmxhZ3MgJiBTUkVfRkxBR19JR05PUkVDQVNFIGFuZAorICAgICAgICAgICAgbm90IChmbGFncyAmIFNSRV9GTEFHX0xPQ0FMRSkgYW5kCisgICAgICAgICAgICBmbGFncyAmIFNSRV9GTEFHX1VOSUNPREUpOgorICAgICAgICBmaXhlcyA9IF9pZ25vcmVjYXNlX2ZpeGVzCisgICAgZWxzZToKKyAgICAgICAgZml4ZXMgPSBOb25lCiAgICAgZm9yIG9wLCBhdiBpbiBwYXR0ZXJuOgogICAgICAgICBpZiBvcCBpbiBMSVRFUkFMX0NPREVTOgogICAgICAgICAgICAgaWYgZmxhZ3MgJiBTUkVfRkxBR19JR05PUkVDQVNFOgotICAgICAgICAgICAgICAgIGVtaXQoT1BDT0RFU1tPUF9JR05PUkVbb3BdXSkKLSAgICAgICAgICAgICAgICBlbWl0KF9zcmUuZ2V0bG93ZXIoYXYsIGZsYWdzKSkKKyAgICAgICAgICAgICAgICBsbyA9IF9zcmUuZ2V0bG93ZXIoYXYsIGZsYWdzKQorICAgICAgICAgICAgICAgIGlmIGZpeGVzIGFuZCBsbyBpbiBmaXhlczoKKyAgICAgICAgICAgICAgICAgICAgZW1pdChPUENPREVTW0lOX0lHTk9SRV0pCisgICAgICAgICAgICAgICAgICAgIHNraXAgPSBfbGVuKGNvZGUpOyBlbWl0KDApCisgICAgICAgICAgICAgICAgICAgIGlmIG9wIGlzIE5PVF9MSVRFUkFMOgorICAgICAgICAgICAgICAgICAgICAgICAgZW1pdChPUENPREVTW05FR0FURV0pCisgICAgICAgICAgICAgICAgICAgIGZvciBrIGluIChsbywpICsgZml4ZXNbbG9dOgorICAgICAgICAgICAgICAgICAgICAgICAgZW1pdChPUENPREVTW0xJVEVSQUxdKQorICAgICAgICAgICAgICAgICAgICAgICAgZW1pdChrKQorICAgICAgICAgICAgICAgICAgICBlbWl0KE9QQ09ERVNbRkFJTFVSRV0pCisgICAgICAgICAgICAgICAgICAgIGNvZGVbc2tpcF0gPSBfbGVuKGNvZGUpIC0gc2tpcAorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGVtaXQoT1BDT0RFU1tPUF9JR05PUkVbb3BdXSkKKyAgICAgICAgICAgICAgICAgICAgZW1pdChsbykKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgZW1pdChPUENPREVTW29wXSkKICAgICAgICAgICAgICAgICBlbWl0KGF2KQpAQCAtNTIsOSArMTA4LDkgQEAKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9zcmUuZ2V0bG93ZXIobGl0ZXJhbCwgZmxhZ3MpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIGVtaXQoT1BDT0RFU1tvcF0pCi0gICAgICAgICAgICAgICAgZml4dXAgPSBfaWRlbnRpdHlmdW5jdGlvbgorICAgICAgICAgICAgICAgIGZpeHVwID0gTm9uZQogICAgICAgICAgICAgc2tpcCA9IF9sZW4oY29kZSk7IGVtaXQoMCkKLSAgICAgICAgICAgIF9jb21waWxlX2NoYXJzZXQoYXYsIGZsYWdzLCBjb2RlLCBmaXh1cCkKKyAgICAgICAgICAgIF9jb21waWxlX2NoYXJzZXQoYXYsIGZsYWdzLCBjb2RlLCBmaXh1cCwgZml4ZXMpCiAgICAgICAgICAgICBjb2RlW3NraXBdID0gX2xlbihjb2RlKSAtIHNraXAKICAgICAgICAgZWxpZiBvcCBpcyBBTlk6CiAgICAgICAgICAgICBpZiBmbGFncyAmIFNSRV9GTEFHX0RPVEFMTDoKQEAgLTY0LDEzICsxMjAsNiBAQAogICAgICAgICBlbGlmIG9wIGluIFJFUEVBVElOR19DT0RFUzoKICAgICAgICAgICAgIGlmIGZsYWdzICYgU1JFX0ZMQUdfVEVNUExBVEU6CiAgICAgICAgICAgICAgICAgcmFpc2UgZXJyb3IoImludGVybmFsOiB1bnN1cHBvcnRlZCB0ZW1wbGF0ZSBvcGVyYXRvciIpCi0gICAgICAgICAgICAgICAgZW1pdChPUENPREVTW1JFUEVBVF0pCi0gICAgICAgICAgICAgICAgc2tpcCA9IF9sZW4oY29kZSk7IGVtaXQoMCkKLSAgICAgICAgICAgICAgICBlbWl0KGF2WzBdKQotICAgICAgICAgICAgICAgIGVtaXQoYXZbMV0pCi0gICAgICAgICAgICAgICAgX2NvbXBpbGUoY29kZSwgYXZbMl0sIGZsYWdzKQotICAgICAgICAgICAgICAgIGVtaXQoT1BDT0RFU1tTVUNDRVNTXSkKLSAgICAgICAgICAgICAgICBjb2RlW3NraXBdID0gX2xlbihjb2RlKSAtIHNraXAKICAgICAgICAgICAgIGVsaWYgX3NpbXBsZShhdikgYW5kIG9wIGlzIG5vdCBSRVBFQVQ6CiAgICAgICAgICAgICAgICAgaWYgb3AgaXMgTUFYX1JFUEVBVDoKICAgICAgICAgICAgICAgICAgICAgZW1pdChPUENPREVTW1JFUEVBVF9PTkVdKQpAQCAtMTc1LDIwICsyMjQsMTkgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInVuc3VwcG9ydGVkIG9wZXJhbmQgdHlwZSIsIG9wKQogCi1kZWYgX2NvbXBpbGVfY2hhcnNldChjaGFyc2V0LCBmbGFncywgY29kZSwgZml4dXA9Tm9uZSk6CitkZWYgX2NvbXBpbGVfY2hhcnNldChjaGFyc2V0LCBmbGFncywgY29kZSwgZml4dXA9Tm9uZSwgZml4ZXM9Tm9uZSk6CiAgICAgIyBjb21waWxlIGNoYXJzZXQgc3VicHJvZ3JhbQogICAgIGVtaXQgPSBjb2RlLmFwcGVuZAotICAgIGlmIGZpeHVwIGlzIE5vbmU6Ci0gICAgICAgIGZpeHVwID0gX2lkZW50aXR5ZnVuY3Rpb24KLSAgICBmb3Igb3AsIGF2IGluIF9vcHRpbWl6ZV9jaGFyc2V0KGNoYXJzZXQsIGZpeHVwKToKKyAgICBmb3Igb3AsIGF2IGluIF9vcHRpbWl6ZV9jaGFyc2V0KGNoYXJzZXQsIGZpeHVwLCBmaXhlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzICYgU1JFX0ZMQUdfVU5JQ09ERSk6CiAgICAgICAgIGVtaXQoT1BDT0RFU1tvcF0pCiAgICAgICAgIGlmIG9wIGlzIE5FR0FURToKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgZWxpZiBvcCBpcyBMSVRFUkFMOgotICAgICAgICAgICAgZW1pdChmaXh1cChhdikpCisgICAgICAgICAgICBlbWl0KGF2KQogICAgICAgICBlbGlmIG9wIGlzIFJBTkdFOgotICAgICAgICAgICAgZW1pdChmaXh1cChhdlswXSkpCi0gICAgICAgICAgICBlbWl0KGZpeHVwKGF2WzFdKSkKKyAgICAgICAgICAgIGVtaXQoYXZbMF0pCisgICAgICAgICAgICBlbWl0KGF2WzFdKQogICAgICAgICBlbGlmIG9wIGlzIENIQVJTRVQ6CiAgICAgICAgICAgICBjb2RlLmV4dGVuZChhdikKICAgICAgICAgZWxpZiBvcCBpcyBCSUdDSEFSU0VUOgpAQCAtMjA0LDE2MSArMjUyLDE5NSBAQAogICAgICAgICAgICAgcmFpc2UgZXJyb3IoImludGVybmFsOiB1bnN1cHBvcnRlZCBzZXQgb3BlcmF0b3IiKQogICAgIGVtaXQoT1BDT0RFU1tGQUlMVVJFXSkKIAotZGVmIF9vcHRpbWl6ZV9jaGFyc2V0KGNoYXJzZXQsIGZpeHVwKToKK2RlZiBfb3B0aW1pemVfY2hhcnNldChjaGFyc2V0LCBmaXh1cCwgZml4ZXMsIGlzdW5pY29kZSk6CiAgICAgIyBpbnRlcm5hbDogb3B0aW1pemUgY2hhcmFjdGVyIHNldAogICAgIG91dCA9IFtdCi0gICAgb3V0YXBwZW5kID0gb3V0LmFwcGVuZAotICAgIGNoYXJtYXAgPSBbMF0qMjU2Ci0gICAgdHJ5OgotICAgICAgICBmb3Igb3AsIGF2IGluIGNoYXJzZXQ6Ci0gICAgICAgICAgICBpZiBvcCBpcyBORUdBVEU6Ci0gICAgICAgICAgICAgICAgb3V0YXBwZW5kKChvcCwgYXYpKQotICAgICAgICAgICAgZWxpZiBvcCBpcyBMSVRFUkFMOgotICAgICAgICAgICAgICAgIGNoYXJtYXBbZml4dXAoYXYpXSA9IDEKLSAgICAgICAgICAgIGVsaWYgb3AgaXMgUkFOR0U6Ci0gICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoZml4dXAoYXZbMF0pLCBmaXh1cChhdlsxXSkrMSk6Ci0gICAgICAgICAgICAgICAgICAgIGNoYXJtYXBbaV0gPSAxCi0gICAgICAgICAgICBlbGlmIG9wIGlzIENBVEVHT1JZOgotICAgICAgICAgICAgICAgICMgWFhYOiBjb3VsZCBhcHBlbmQgdG8gY2hhcm1hcCB0YWlsCi0gICAgICAgICAgICAgICAgcmV0dXJuIGNoYXJzZXQgIyBjYW5ub3QgY29tcHJlc3MKLSAgICBleGNlcHQgSW5kZXhFcnJvcjoKLSAgICAgICAgIyBjaGFyYWN0ZXIgc2V0IGNvbnRhaW5zIHVuaWNvZGUgY2hhcmFjdGVycwotICAgICAgICByZXR1cm4gX29wdGltaXplX3VuaWNvZGUoY2hhcnNldCwgZml4dXApCisgICAgdGFpbCA9IFtdCisgICAgY2hhcm1hcCA9IGJ5dGVhcnJheSgyNTYpCisgICAgZm9yIG9wLCBhdiBpbiBjaGFyc2V0OgorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGlmIG9wIGlzIExJVEVSQUw6CisgICAgICAgICAgICAgICAgICAgIGlmIGZpeHVwOgorICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGZpeHVwKGF2KQorICAgICAgICAgICAgICAgICAgICAgICAgY2hhcm1hcFtpXSA9IDEKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGZpeGVzIGFuZCBpIGluIGZpeGVzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBrIGluIGZpeGVzW2ldOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFybWFwW2tdID0gMQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgY2hhcm1hcFthdl0gPSAxCisgICAgICAgICAgICAgICAgZWxpZiBvcCBpcyBSQU5HRToKKyAgICAgICAgICAgICAgICAgICAgciA9IHJhbmdlKGF2WzBdLCBhdlsxXSsxKQorICAgICAgICAgICAgICAgICAgICBpZiBmaXh1cDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHIgPSBtYXAoZml4dXAsIHIpCisgICAgICAgICAgICAgICAgICAgIGlmIGZpeHVwIGFuZCBmaXhlczoKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBpIGluIHI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcm1hcFtpXSA9IDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBpIGluIGZpeGVzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgayBpbiBmaXhlc1tpXToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJtYXBba10gPSAxCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgaSBpbiByOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJtYXBbaV0gPSAxCisgICAgICAgICAgICAgICAgZWxpZiBvcCBpcyBORUdBVEU6CisgICAgICAgICAgICAgICAgICAgIG91dC5hcHBlbmQoKG9wLCBhdikpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgdGFpbC5hcHBlbmQoKG9wLCBhdikpCisgICAgICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKKyAgICAgICAgICAgICAgICBpZiBsZW4oY2hhcm1hcCkgPT0gMjU2OgorICAgICAgICAgICAgICAgICAgICAjIGNoYXJhY3RlciBzZXQgY29udGFpbnMgbm9uLVVDUzEgY2hhcmFjdGVyIGNvZGVzCisgICAgICAgICAgICAgICAgICAgIGNoYXJtYXAgKz0gYidcMCcgKiAweGZmMDAKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAjIGNoYXJhY3RlciBzZXQgY29udGFpbnMgbm9uLUJNUCBjaGFyYWN0ZXIgY29kZXMKKyAgICAgICAgICAgICAgICBpZiBmaXh1cCBhbmQgaXN1bmljb2RlIGFuZCBvcCBpcyBSQU5HRToKKyAgICAgICAgICAgICAgICAgICAgbG8sIGhpID0gYXYKKyAgICAgICAgICAgICAgICAgICAgcmFuZ2VzID0gW2F2XQorICAgICAgICAgICAgICAgICAgICAjIFRoZXJlIGFyZSBvbmx5IHR3byByYW5nZXMgb2YgY2FzZWQgYXN0cmFsIGNoYXJhY3RlcnM6CisgICAgICAgICAgICAgICAgICAgICMgMTA0MDAtMTA0NEYgKERlc2VyZXQpIGFuZCAxMThBMC0xMThERiAoV2FyYW5nIENpdGkpLgorICAgICAgICAgICAgICAgICAgICBfZml4dXBfcmFuZ2UobWF4KDB4MTAwMDAsIGxvKSwgbWluKDB4MTFmZmYsIGhpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlcywgZml4dXApCisgICAgICAgICAgICAgICAgICAgIGZvciBsbywgaGkgaW4gcmFuZ2VzOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbG8gPT0gaGk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFpbC5hcHBlbmQoKExJVEVSQUwsIGhpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFpbC5hcHBlbmQoKFJBTkdFLCAobG8sIGhpKSkpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgdGFpbC5hcHBlbmQoKG9wLCBhdikpCisgICAgICAgICAgICBicmVhaworCiAgICAgIyBjb21wcmVzcyBjaGFyYWN0ZXIgbWFwCi0gICAgaSA9IHAgPSBuID0gMAogICAgIHJ1bnMgPSBbXQotICAgIHJ1bnNhcHBlbmQgPSBydW5zLmFwcGVuZAotICAgIGZvciBjIGluIGNoYXJtYXA6Ci0gICAgICAgIGlmIGM6Ci0gICAgICAgICAgICBpZiBuID09IDA6Ci0gICAgICAgICAgICAgICAgcCA9IGkKLSAgICAgICAgICAgIG4gPSBuICsgMQotICAgICAgICBlbGlmIG46Ci0gICAgICAgICAgICBydW5zYXBwZW5kKChwLCBuKSkKLSAgICAgICAgICAgIG4gPSAwCi0gICAgICAgIGkgPSBpICsgMQotICAgIGlmIG46Ci0gICAgICAgIHJ1bnNhcHBlbmQoKHAsIG4pKQotICAgIGlmIGxlbihydW5zKSA8PSAyOgorICAgIHEgPSAwCisgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgcCA9IGNoYXJtYXAuZmluZCgxLCBxKQorICAgICAgICBpZiBwIDwgMDoKKyAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGlmIGxlbihydW5zKSA+PSAyOgorICAgICAgICAgICAgcnVucyA9IE5vbmUKKyAgICAgICAgICAgIGJyZWFrCisgICAgICAgIHEgPSBjaGFybWFwLmZpbmQoMCwgcCkKKyAgICAgICAgaWYgcSA8IDA6CisgICAgICAgICAgICBydW5zLmFwcGVuZCgocCwgbGVuKGNoYXJtYXApKSkKKyAgICAgICAgICAgIGJyZWFrCisgICAgICAgIHJ1bnMuYXBwZW5kKChwLCBxKSkKKyAgICBpZiBydW5zIGlzIG5vdCBOb25lOgogICAgICAgICAjIHVzZSBsaXRlcmFsL3JhbmdlCi0gICAgICAgIGZvciBwLCBuIGluIHJ1bnM6Ci0gICAgICAgICAgICBpZiBuID09IDE6Ci0gICAgICAgICAgICAgICAgb3V0YXBwZW5kKChMSVRFUkFMLCBwKSkKKyAgICAgICAgZm9yIHAsIHEgaW4gcnVuczoKKyAgICAgICAgICAgIGlmIHEgLSBwID09IDE6CisgICAgICAgICAgICAgICAgb3V0LmFwcGVuZCgoTElURVJBTCwgcCkpCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIG91dGFwcGVuZCgoUkFOR0UsIChwLCBwK24tMSkpKQotICAgICAgICBpZiBsZW4ob3V0KSA8IGxlbihjaGFyc2V0KToKKyAgICAgICAgICAgICAgICBvdXQuYXBwZW5kKChSQU5HRSwgKHAsIHEgLSAxKSkpCisgICAgICAgIG91dCArPSB0YWlsCisgICAgICAgICMgaWYgdGhlIGNhc2Ugd2FzIGNoYW5nZWQgb3IgbmV3IHJlcHJlc2VudGF0aW9uIGlzIG1vcmUgY29tcGFjdAorICAgICAgICBpZiBmaXh1cCBvciBsZW4ob3V0KSA8IGxlbihjaGFyc2V0KToKICAgICAgICAgICAgIHJldHVybiBvdXQKLSAgICBlbHNlOgotICAgICAgICAjIHVzZSBiaXRtYXAKKyAgICAgICAgIyBlbHNlIG9yaWdpbmFsIGNoYXJhY3RlciBzZXQgaXMgZ29vZCBlbm91Z2gKKyAgICAgICAgcmV0dXJuIGNoYXJzZXQKKworICAgICMgdXNlIGJpdG1hcAorICAgIGlmIGxlbihjaGFybWFwKSA9PSAyNTY6CiAgICAgICAgIGRhdGEgPSBfbWtfYml0bWFwKGNoYXJtYXApCi0gICAgICAgIG91dGFwcGVuZCgoQ0hBUlNFVCwgZGF0YSkpCisgICAgICAgIG91dC5hcHBlbmQoKENIQVJTRVQsIGRhdGEpKQorICAgICAgICBvdXQgKz0gdGFpbAogICAgICAgICByZXR1cm4gb3V0Ci0gICAgcmV0dXJuIGNoYXJzZXQKIAotZGVmIF9ta19iaXRtYXAoYml0cyk6Ci0gICAgZGF0YSA9IFtdCi0gICAgZGF0YWFwcGVuZCA9IGRhdGEuYXBwZW5kCi0gICAgaWYgX3NyZS5DT0RFU0laRSA9PSAyOgotICAgICAgICBzdGFydCA9ICgxLCAwKQotICAgIGVsc2U6Ci0gICAgICAgIHN0YXJ0ID0gKDEsIDApCi0gICAgbSwgdiA9IHN0YXJ0Ci0gICAgZm9yIGMgaW4gYml0czoKLSAgICAgICAgaWYgYzoKLSAgICAgICAgICAgIHYgPSB2ICsgbQotICAgICAgICBtID0gbSArIG0KLSAgICAgICAgaWYgbSA+IE1BWENPREU6Ci0gICAgICAgICAgICBkYXRhYXBwZW5kKHYpCi0gICAgICAgICAgICBtLCB2ID0gc3RhcnQKLSAgICByZXR1cm4gZGF0YQorICAgICMgVG8gcmVwcmVzZW50IGEgYmlnIGNoYXJzZXQsIGZpcnN0IGEgYml0bWFwIG9mIGFsbCBjaGFyYWN0ZXJzIGluIHRoZQorICAgICMgc2V0IGlzIGNvbnN0cnVjdGVkLiBUaGVuLCB0aGlzIGJpdG1hcCBpcyBzbGljZWQgaW50byBjaHVua3Mgb2YgMjU2CisgICAgIyBjaGFyYWN0ZXJzLCBkdXBsaWNhdGUgY2h1bmtzIGFyZSBlbGltaW5hdGVkLCBhbmQgZWFjaCBjaHVuayBpcworICAgICMgZ2l2ZW4gYSBudW1iZXIuIEluIHRoZSBjb21waWxlZCBleHByZXNzaW9uLCB0aGUgY2hhcnNldCBpcworICAgICMgcmVwcmVzZW50ZWQgYnkgYSAzMi1iaXQgd29yZCBzZXF1ZW5jZSwgY29uc2lzdGluZyBvZiBvbmUgd29yZCBmb3IKKyAgICAjIHRoZSBudW1iZXIgb2YgZGlmZmVyZW50IGNodW5rcywgYSBzZXF1ZW5jZSBvZiAyNTYgYnl0ZXMgKDY0IHdvcmRzKQorICAgICMgb2YgY2h1bmsgbnVtYmVycyBpbmRleGVkIGJ5IHRoZWlyIG9yaWdpbmFsIGNodW5rIHBvc2l0aW9uLCBhbmQgYQorICAgICMgc2VxdWVuY2Ugb2YgMjU2LWJpdCBjaHVua3MgKDggd29yZHMgZWFjaCkuCiAKLSMgVG8gcmVwcmVzZW50IGEgYmlnIGNoYXJzZXQsIGZpcnN0IGEgYml0bWFwIG9mIGFsbCBjaGFyYWN0ZXJzIGluIHRoZQotIyBzZXQgaXMgY29uc3RydWN0ZWQuIFRoZW4sIHRoaXMgYml0bWFwIGlzIHNsaWNlZCBpbnRvIGNodW5rcyBvZiAyNTYKLSMgY2hhcmFjdGVycywgZHVwbGljYXRlIGNodW5rcyBhcmUgZWxpbWluYXRlZCwgYW5kIGVhY2ggY2h1bmsgaXMKLSMgZ2l2ZW4gYSBudW1iZXIuIEluIHRoZSBjb21waWxlZCBleHByZXNzaW9uLCB0aGUgY2hhcnNldCBpcwotIyByZXByZXNlbnRlZCBieSBhIDMyLWJpdCB3b3JkIHNlcXVlbmNlLCBjb25zaXN0aW5nIG9mIG9uZSB3b3JkIGZvcgotIyB0aGUgbnVtYmVyIG9mIGRpZmZlcmVudCBjaHVua3MsIGEgc2VxdWVuY2Ugb2YgMjU2IGJ5dGVzICg2NCB3b3JkcykKLSMgb2YgY2h1bmsgbnVtYmVycyBpbmRleGVkIGJ5IHRoZWlyIG9yaWdpbmFsIGNodW5rIHBvc2l0aW9uLCBhbmQgYQotIyBzZXF1ZW5jZSBvZiAyNTYtYml0IGNodW5rcyAoOCB3b3JkcyBlYWNoKS4KKyAgICAjIENvbXByZXNzaW9uIGlzIG5vcm1hbGx5IGdvb2Q6IGluIGEgdHlwaWNhbCBjaGFyc2V0LCBsYXJnZSByYW5nZXMgb2YKKyAgICAjIFVuaWNvZGUgd2lsbCBiZSBlaXRoZXIgY29tcGxldGVseSBleGNsdWRlZCAoZS5nLiBpZiBvbmx5IGN5cmlsbGljCisgICAgIyBsZXR0ZXJzIGFyZSB0byBiZSBtYXRjaGVkKSwgb3IgY29tcGxldGVseSBpbmNsdWRlZCAoZS5nLiBpZiBsYXJnZQorICAgICMgc3VicmFuZ2VzIG9mIEthbmppIG1hdGNoKS4gVGhlc2UgcmFuZ2VzIHdpbGwgYmUgcmVwcmVzZW50ZWQgYnkKKyAgICAjIGNodW5rcyBvZiBhbGwgb25lLWJpdHMgb3IgYWxsIHplcm8tYml0cy4KIAotIyBDb21wcmVzc2lvbiBpcyBub3JtYWxseSBnb29kOiBpbiBhIHR5cGljYWwgY2hhcnNldCwgbGFyZ2UgcmFuZ2VzIG9mCi0jIFVuaWNvZGUgd2lsbCBiZSBlaXRoZXIgY29tcGxldGVseSBleGNsdWRlZCAoZS5nLiBpZiBvbmx5IGN5cmlsbGljCi0jIGxldHRlcnMgYXJlIHRvIGJlIG1hdGNoZWQpLCBvciBjb21wbGV0ZWx5IGluY2x1ZGVkIChlLmcuIGlmIGxhcmdlCi0jIHN1YnJhbmdlcyBvZiBLYW5qaSBtYXRjaCkuIFRoZXNlIHJhbmdlcyB3aWxsIGJlIHJlcHJlc2VudGVkIGJ5Ci0jIGNodW5rcyBvZiBhbGwgb25lLWJpdHMgb3IgYWxsIHplcm8tYml0cy4KKyAgICAjIE1hdGNoaW5nIGNhbiBiZSBhbHNvIGRvbmUgZWZmaWNpZW50bHk6IHRoZSBtb3JlIHNpZ25pZmljYW50IGJ5dGUgb2YKKyAgICAjIHRoZSBVbmljb2RlIGNoYXJhY3RlciBpcyBhbiBpbmRleCBpbnRvIHRoZSBjaHVuayBudW1iZXIsIGFuZCB0aGUKKyAgICAjIGxlc3Mgc2lnbmlmaWNhbnQgYnl0ZSBpcyBhIGJpdCBpbmRleCBpbiB0aGUgY2h1bmsgKGp1c3QgbGlrZSB0aGUKKyAgICAjIENIQVJTRVQgbWF0Y2hpbmcpLgogCi0jIE1hdGNoaW5nIGNhbiBiZSBhbHNvIGRvbmUgZWZmaWNpZW50bHk6IHRoZSBtb3JlIHNpZ25pZmljYW50IGJ5dGUgb2YKLSMgdGhlIFVuaWNvZGUgY2hhcmFjdGVyIGlzIGFuIGluZGV4IGludG8gdGhlIGNodW5rIG51bWJlciwgYW5kIHRoZQotIyBsZXNzIHNpZ25pZmljYW50IGJ5dGUgaXMgYSBiaXQgaW5kZXggaW4gdGhlIGNodW5rIChqdXN0IGxpa2UgdGhlCi0jIENIQVJTRVQgbWF0Y2hpbmcpLgotCi0jIFRoZSBCSUdDSEFSU0VUIG9wY29kZSBzdGlsbCBzdXBwb3J0cyBvbmx5IHN1YnNldHMKLSMgb2YgdGhlIGJhc2ljIG11bHRpbGluZ3VhbCBwbGFuZTsgYW4gZWZmaWNpZW50IHJlcHJlc2VudGF0aW9uCi0jIGZvciBhbGwgb2YgVW5pY29kZSBoYXMgbm90IHlldCBiZWVuIGRldmVsb3BlZC4gVGhpcyBtZWFucywKLSMgaW4gcGFydGljdWxhciwgdGhhdCBuZWdhdGVkIGNoYXJzZXRzIGNhbm5vdCBiZSByZXByZXNlbnRlZCBhcwotIyBiaWdjaGFyc2V0cy4KLQotZGVmIF9vcHRpbWl6ZV91bmljb2RlKGNoYXJzZXQsIGZpeHVwKToKLSAgICB0cnk6Ci0gICAgICAgIGltcG9ydCBhcnJheQotICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAgICAgcmV0dXJuIGNoYXJzZXQKLSAgICBjaGFybWFwID0gWzBdKjY1NTM2Ci0gICAgbmVnYXRlID0gMAotICAgIHRyeToKLSAgICAgICAgZm9yIG9wLCBhdiBpbiBjaGFyc2V0OgotICAgICAgICAgICAgaWYgb3AgaXMgTkVHQVRFOgotICAgICAgICAgICAgICAgIG5lZ2F0ZSA9IDEKLSAgICAgICAgICAgIGVsaWYgb3AgaXMgTElURVJBTDoKLSAgICAgICAgICAgICAgICBjaGFybWFwW2ZpeHVwKGF2KV0gPSAxCi0gICAgICAgICAgICBlbGlmIG9wIGlzIFJBTkdFOgotICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKGZpeHVwKGF2WzBdKSwgZml4dXAoYXZbMV0pKzEpOgotICAgICAgICAgICAgICAgICAgICBjaGFybWFwW2ldID0gMQotICAgICAgICAgICAgZWxpZiBvcCBpcyBDQVRFR09SWToKLSAgICAgICAgICAgICAgICAjIFhYWDogY291bGQgZXhwYW5kIGNhdGVnb3J5Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNoYXJzZXQgIyBjYW5ub3QgY29tcHJlc3MKLSAgICBleGNlcHQgSW5kZXhFcnJvcjoKLSAgICAgICAgIyBub24tQk1QIGNoYXJhY3RlcnM7IFhYWCBub3cgdGhleSBzaG91bGQgd29yawotICAgICAgICByZXR1cm4gY2hhcnNldAotICAgIGlmIG5lZ2F0ZToKLSAgICAgICAgaWYgc3lzLm1heHVuaWNvZGUgIT0gNjU1MzU6Ci0gICAgICAgICAgICAjIFhYWDogbmVnYXRpb24gZG9lcyBub3Qgd29yayB3aXRoIGJpZyBjaGFyc2V0cwotICAgICAgICAgICAgIyBYWFgyOiBub3cgdGhleSBzaG91bGQgd29yaywgYnV0IHJlbW92aW5nIHRoaXMgd2lsbCBtYWtlIHRoZQotICAgICAgICAgICAgIyBjaGFybWFwIDE3IHRpbWVzIGJpZ2dlcgotICAgICAgICAgICAgcmV0dXJuIGNoYXJzZXQKLSAgICAgICAgZm9yIGkgaW4gcmFuZ2UoNjU1MzYpOgotICAgICAgICAgICAgY2hhcm1hcFtpXSA9IG5vdCBjaGFybWFwW2ldCisgICAgY2hhcm1hcCA9IGJ5dGVzKGNoYXJtYXApICMgc2hvdWxkIGJlIGhhc2hhYmxlCiAgICAgY29tcHMgPSB7fQotICAgIG1hcHBpbmcgPSBbMF0qMjU2CisgICAgbWFwcGluZyA9IGJ5dGVhcnJheSgyNTYpCiAgICAgYmxvY2sgPSAwCi0gICAgZGF0YSA9IFtdCi0gICAgZm9yIGkgaW4gcmFuZ2UoMjU2KToKLSAgICAgICAgY2h1bmsgPSB0dXBsZShjaGFybWFwW2kqMjU2OihpKzEpKjI1Nl0pCi0gICAgICAgIG5ldyA9IGNvbXBzLnNldGRlZmF1bHQoY2h1bmssIGJsb2NrKQotICAgICAgICBtYXBwaW5nW2ldID0gbmV3Ci0gICAgICAgIGlmIG5ldyA9PSBibG9jazoKLSAgICAgICAgICAgIGJsb2NrID0gYmxvY2sgKyAxCi0gICAgICAgICAgICBkYXRhID0gZGF0YSArIF9ta19iaXRtYXAoY2h1bmspCi0gICAgaGVhZGVyID0gW2Jsb2NrXQotICAgIGlmIF9zcmUuQ09ERVNJWkUgPT0gMjoKLSAgICAgICAgY29kZSA9ICdIJwotICAgIGVsc2U6Ci0gICAgICAgIGNvZGUgPSAnSScKLSAgICAjIENvbnZlcnQgYmxvY2sgaW5kaWNlcyB0byBieXRlIGFycmF5IG9mIDI1NiBieXRlcwotICAgIG1hcHBpbmcgPSBhcnJheS5hcnJheSgnQicsIG1hcHBpbmcpLnRvYnl0ZXMoKQotICAgICMgQ29udmVydCBieXRlIGFycmF5IHRvIHdvcmQgYXJyYXkKLSAgICBtYXBwaW5nID0gYXJyYXkuYXJyYXkoY29kZSwgbWFwcGluZykKLSAgICBhc3NlcnQgbWFwcGluZy5pdGVtc2l6ZSA9PSBfc3JlLkNPREVTSVpFCi0gICAgYXNzZXJ0IGxlbihtYXBwaW5nKSAqIG1hcHBpbmcuaXRlbXNpemUgPT0gMjU2Ci0gICAgaGVhZGVyID0gaGVhZGVyICsgbWFwcGluZy50b2xpc3QoKQotICAgIGRhdGFbMDowXSA9IGhlYWRlcgotICAgIHJldHVybiBbKEJJR0NIQVJTRVQsIGRhdGEpXQorICAgIGRhdGEgPSBieXRlYXJyYXkoKQorICAgIGZvciBpIGluIHJhbmdlKDAsIDY1NTM2LCAyNTYpOgorICAgICAgICBjaHVuayA9IGNoYXJtYXBbaTogaSArIDI1Nl0KKyAgICAgICAgaWYgY2h1bmsgaW4gY29tcHM6CisgICAgICAgICAgICBtYXBwaW5nW2kgLy8gMjU2XSA9IGNvbXBzW2NodW5rXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbWFwcGluZ1tpIC8vIDI1Nl0gPSBjb21wc1tjaHVua10gPSBibG9jaworICAgICAgICAgICAgYmxvY2sgKz0gMQorICAgICAgICAgICAgZGF0YSArPSBjaHVuaworICAgIGRhdGEgPSBfbWtfYml0bWFwKGRhdGEpCisgICAgZGF0YVswOjBdID0gW2Jsb2NrXSArIF9ieXRlc190b19jb2RlcyhtYXBwaW5nKQorICAgIG91dC5hcHBlbmQoKEJJR0NIQVJTRVQsIGRhdGEpKQorICAgIG91dCArPSB0YWlsCisgICAgcmV0dXJuIG91dAorCitkZWYgX2ZpeHVwX3JhbmdlKGxvLCBoaSwgcmFuZ2VzLCBmaXh1cCk6CisgICAgZm9yIGkgaW4gbWFwKGZpeHVwLCByYW5nZShsbywgaGkrMSkpOgorICAgICAgICBmb3IgaywgKGxvLCBoaSkgaW4gZW51bWVyYXRlKHJhbmdlcyk6CisgICAgICAgICAgICBpZiBpIDwgbG86CisgICAgICAgICAgICAgICAgaWYgbCA9PSBsbyAtIDE6CisgICAgICAgICAgICAgICAgICAgIHJhbmdlc1trXSA9IChpLCBoaSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByYW5nZXMuaW5zZXJ0KGssIChpLCBpKSkKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZWxpZiBpID4gaGk6CisgICAgICAgICAgICAgICAgaWYgaSA9PSBoaSArIDE6CisgICAgICAgICAgICAgICAgICAgIHJhbmdlc1trXSA9IChsbywgaSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhbmdlcy5hcHBlbmQoKGksIGkpKQorCitfQ09ERUJJVFMgPSBfc3JlLkNPREVTSVpFICogOAorX0JJVFNfVFJBTlMgPSBiJzAnICsgYicxJyAqIDI1NQorZGVmIF9ta19iaXRtYXAoYml0cywgX0NPREVCSVRTPV9DT0RFQklUUywgX2ludD1pbnQpOgorICAgIHMgPSBiaXRzLnRyYW5zbGF0ZShfQklUU19UUkFOUylbOjotMV0KKyAgICByZXR1cm4gW19pbnQoc1tpIC0gX0NPREVCSVRTOiBpXSwgMikKKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihzKSwgMCwgLV9DT0RFQklUUyldCisKK2RlZiBfYnl0ZXNfdG9fY29kZXMoYik6CisgICAgIyBDb252ZXJ0IGJsb2NrIGluZGljZXMgdG8gd29yZCBhcnJheQorICAgIGEgPSBtZW1vcnl2aWV3KGIpLmNhc3QoJ0knKQorICAgIGFzc2VydCBhLml0ZW1zaXplID09IF9zcmUuQ09ERVNJWkUKKyAgICBhc3NlcnQgbGVuKGEpICogYS5pdGVtc2l6ZSA9PSBsZW4oYikKKyAgICByZXR1cm4gYS50b2xpc3QoKQogCiBkZWYgX3NpbXBsZShhdik6CiAgICAgIyBjaGVjayBpZiBhdiBpcyBhICJzaW1wbGUiIG9wZXJhdG9yCiAgICAgbG8sIGhpID0gYXZbMl0uZ2V0d2lkdGgoKQogICAgIHJldHVybiBsbyA9PSBoaSA9PSAxIGFuZCBhdlsyXVswXVswXSAhPSBTVUJQQVRURVJOCiAKK2RlZiBfZ2VuZXJhdGVfb3ZlcmxhcF90YWJsZShwcmVmaXgpOgorICAgICIiIgorICAgIEdlbmVyYXRlIGFuIG92ZXJsYXAgdGFibGUgZm9yIHRoZSBmb2xsb3dpbmcgcHJlZml4LgorICAgIEFuIG92ZXJsYXAgdGFibGUgaXMgYSB0YWJsZSBvZiB0aGUgc2FtZSBzaXplIGFzIHRoZSBwcmVmaXggd2hpY2gKKyAgICBpbmZvcm1zIGFib3V0IHRoZSBwb3RlbnRpYWwgc2VsZi1vdmVybGFwIGZvciBlYWNoIGluZGV4IGluIHRoZSBwcmVmaXg6CisgICAgLSBpZiBvdmVybGFwW2ldID09IDAsIHByZWZpeFtpOl0gY2FuJ3Qgb3ZlcmxhcCBwcmVmaXhbMDouLi5dCisgICAgLSBpZiBvdmVybGFwW2ldID09IGsgd2l0aCAwIDwgayA8PSBpLCBwcmVmaXhbaS1rKzE6aSsxXSBvdmVybGFwcyB3aXRoCisgICAgICBwcmVmaXhbMDprXQorICAgICIiIgorICAgIHRhYmxlID0gWzBdICogbGVuKHByZWZpeCkKKyAgICBmb3IgaSBpbiByYW5nZSgxLCBsZW4ocHJlZml4KSk6CisgICAgICAgIGlkeCA9IHRhYmxlW2kgLSAxXQorICAgICAgICB3aGlsZSBwcmVmaXhbaV0gIT0gcHJlZml4W2lkeF06CisgICAgICAgICAgICBpZiBpZHggPT0gMDoKKyAgICAgICAgICAgICAgICB0YWJsZVtpXSA9IDAKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgaWR4ID0gdGFibGVbaWR4IC0gMV0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHRhYmxlW2ldID0gaWR4ICsgMQorICAgIHJldHVybiB0YWJsZQorCiBkZWYgX2NvbXBpbGVfaW5mbyhjb2RlLCBwYXR0ZXJuLCBmbGFncyk6CiAgICAgIyBpbnRlcm5hbDogY29tcGlsZSBhbiBpbmZvIGJsb2NrLiAgaW4gdGhlIGN1cnJlbnQgdmVyc2lvbiwKICAgICAjIHRoaXMgY29udGFpbnMgbWluL21heCBwYXR0ZXJuIHdpZHRoLCBhbmQgYW4gb3B0aW9uYWwgbGl0ZXJhbApAQCAtNDU1LDEyICs1MzcsNyBAQAogICAgICAgICBlbWl0KHByZWZpeF9za2lwKSAjIHNraXAKICAgICAgICAgY29kZS5leHRlbmQocHJlZml4KQogICAgICAgICAjIGdlbmVyYXRlIG92ZXJsYXAgdGFibGUKLSAgICAgICAgdGFibGUgPSBbLTFdICsgKFswXSpsZW4ocHJlZml4KSkKLSAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKHByZWZpeCkpOgotICAgICAgICAgICAgdGFibGVbaSsxXSA9IHRhYmxlW2ldKzEKLSAgICAgICAgICAgIHdoaWxlIHRhYmxlW2krMV0gPiAwIGFuZCBwcmVmaXhbaV0gIT0gcHJlZml4W3RhYmxlW2krMV0tMV06Ci0gICAgICAgICAgICAgICAgdGFibGVbaSsxXSA9IHRhYmxlW3RhYmxlW2krMV0tMV0rMQotICAgICAgICBjb2RlLmV4dGVuZCh0YWJsZVsxOl0pICMgZG9uJ3Qgc3RvcmUgZmlyc3QgZW50cnkKKyAgICAgICAgY29kZS5leHRlbmQoX2dlbmVyYXRlX292ZXJsYXBfdGFibGUocHJlZml4KSkKICAgICBlbGlmIGNoYXJzZXQ6CiAgICAgICAgIF9jb21waWxlX2NoYXJzZXQoY2hhcnNldCwgZmxhZ3MsIGNvZGUpCiAgICAgY29kZVtza2lwXSA9IGxlbihjb2RlKSAtIHNraXAKZGlmZiAtLWdpdCBhL0xpYi9zcmVfY29uc3RhbnRzLnB5IGIvTGliL3NyZV9jb25zdGFudHMucHkKaW5kZXggM2ZiNWVhYy4uMjNlMzUxNiAxMDA2NDQKLS0tIGEvTGliL3NyZV9jb25zdGFudHMucHkKKysrIGIvTGliL3NyZV9jb25zdGFudHMucHkKQEAgLTE1LDExICsxNSw3IEBACiAKIE1BR0lDID0gMjAwMzEwMTcKIAotdHJ5OgotICAgIGZyb20gX3NyZSBpbXBvcnQgTUFYUkVQRUFUCi1leGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgaW1wb3J0IF9zcmUKLSAgICBNQVhSRVBFQVQgPSBfc3JlLk1BWFJFUEVBVCA9IDY1NTM1Citmcm9tIF9zcmUgaW1wb3J0IE1BWFJFUEVBVAogCiAjIFNSRSBzdGFuZGFyZCBleGNlcHRpb24gKGFjY2VzcyBhcyBzcmUuZXJyb3IpCiAjIHNob3VsZCB0aGlzIHJlYWxseSBiZSBoZXJlPwpAQCAtMjU0LDYgKzI1MCw4IEBACiAgICAgZi53cml0ZSgiI2RlZmluZSBTUkVfRkxBR19ET1RBTEwgJWRcbiIgJSBTUkVfRkxBR19ET1RBTEwpCiAgICAgZi53cml0ZSgiI2RlZmluZSBTUkVfRkxBR19VTklDT0RFICVkXG4iICUgU1JFX0ZMQUdfVU5JQ09ERSkKICAgICBmLndyaXRlKCIjZGVmaW5lIFNSRV9GTEFHX1ZFUkJPU0UgJWRcbiIgJSBTUkVfRkxBR19WRVJCT1NFKQorICAgIGYud3JpdGUoIiNkZWZpbmUgU1JFX0ZMQUdfREVCVUcgJWRcbiIgJSBTUkVfRkxBR19ERUJVRykKKyAgICBmLndyaXRlKCIjZGVmaW5lIFNSRV9GTEFHX0FTQ0lJICVkXG4iICUgU1JFX0ZMQUdfQVNDSUkpCiAKICAgICBmLndyaXRlKCIjZGVmaW5lIFNSRV9JTkZPX1BSRUZJWCAlZFxuIiAlIFNSRV9JTkZPX1BSRUZJWCkKICAgICBmLndyaXRlKCIjZGVmaW5lIFNSRV9JTkZPX0xJVEVSQUwgJWRcbiIgJSBTUkVfSU5GT19MSVRFUkFMKQpkaWZmIC0tZ2l0IGEvTGliL3NyZV9wYXJzZS5weSBiL0xpYi9zcmVfcGFyc2UucHkKaW5kZXggOGE3Nzc5MC4uZGYxZTY0MyAxMDA2NDQKLS0tIGEvTGliL3NyZV9wYXJzZS5weQorKysgYi9MaWIvc3JlX3BhcnNlLnB5CkBAIC0xMiw5ICsxMiw4IEBACiAKICMgWFhYOiBzaG93IHN0cmluZyBvZmZzZXQgYW5kIG9mZmVuZGluZyBjaGFyYWN0ZXIgZm9yIGFsbCBlcnJvcnMKIAotaW1wb3J0IHN5cwotCiBmcm9tIHNyZV9jb25zdGFudHMgaW1wb3J0ICoKK2Zyb20gX3NyZSBpbXBvcnQgTUFYUkVQRUFUCiAKIFNQRUNJQUxfQ0hBUlMgPSAiLlxcW3soKSorP14kfCIKIFJFUEVBVF9DSEFSUyA9ICIqKz97IgpAQCAtNzAsNiArNjksOCBAQAogICAgICAgICBzZWxmLm9wZW4gPSBbXQogICAgICAgICBzZWxmLmdyb3VwcyA9IDEKICAgICAgICAgc2VsZi5ncm91cGRpY3QgPSB7fQorICAgICAgICBzZWxmLmxvb2tiZWhpbmQgPSAwCisKICAgICBkZWYgb3Blbmdyb3VwKHNlbGYsIG5hbWU9Tm9uZSk6CiAgICAgICAgIGdpZCA9IHNlbGYuZ3JvdXBzCiAgICAgICAgIHNlbGYuZ3JvdXBzID0gZ2lkICsgMQpAQCAtOTUsMzMgKzk2LDQ1IEBACiAgICAgICAgIHNlbGYuZGF0YSA9IGRhdGEKICAgICAgICAgc2VsZi53aWR0aCA9IE5vbmUKICAgICBkZWYgZHVtcChzZWxmLCBsZXZlbD0wKToKLSAgICAgICAgbmwgPSAxCisgICAgICAgIG5sID0gVHJ1ZQogICAgICAgICBzZXF0eXBlcyA9ICh0dXBsZSwgbGlzdCkKICAgICAgICAgZm9yIG9wLCBhdiBpbiBzZWxmLmRhdGE6Ci0gICAgICAgICAgICBwcmludChsZXZlbCoiICAiICsgb3AsIGVuZD0nICcpOyBubCA9IDAKLSAgICAgICAgICAgIGlmIG9wID09ICJpbiI6CisgICAgICAgICAgICBwcmludChsZXZlbCoiICAiICsgb3AsIGVuZD0nJykKKyAgICAgICAgICAgIGlmIG9wID09IElOOgogICAgICAgICAgICAgICAgICMgbWVtYmVyIHN1Ymxhbmd1YWdlCi0gICAgICAgICAgICAgICAgcHJpbnQoKTsgbmwgPSAxCisgICAgICAgICAgICAgICAgcHJpbnQoKQogICAgICAgICAgICAgICAgIGZvciBvcCwgYSBpbiBhdjoKICAgICAgICAgICAgICAgICAgICAgcHJpbnQoKGxldmVsKzEpKiIgICIgKyBvcCwgYSkKLSAgICAgICAgICAgIGVsaWYgb3AgPT0gImJyYW5jaCI6Ci0gICAgICAgICAgICAgICAgcHJpbnQoKTsgbmwgPSAxCi0gICAgICAgICAgICAgICAgaSA9IDAKLSAgICAgICAgICAgICAgICBmb3IgYSBpbiBhdlsxXToKLSAgICAgICAgICAgICAgICAgICAgaWYgaSA+IDA6CisgICAgICAgICAgICBlbGlmIG9wID09IEJSQU5DSDoKKyAgICAgICAgICAgICAgICBwcmludCgpCisgICAgICAgICAgICAgICAgZm9yIGksIGEgaW4gZW51bWVyYXRlKGF2WzFdKToKKyAgICAgICAgICAgICAgICAgICAgaWYgaToKICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KGxldmVsKiIgICIgKyAib3IiKQotICAgICAgICAgICAgICAgICAgICBhLmR1bXAobGV2ZWwrMSk7IG5sID0gMQotICAgICAgICAgICAgICAgICAgICBpID0gaSArIDEKKyAgICAgICAgICAgICAgICAgICAgYS5kdW1wKGxldmVsKzEpCisgICAgICAgICAgICBlbGlmIG9wID09IEdST1VQUkVGX0VYSVNUUzoKKyAgICAgICAgICAgICAgICBjb25kZ3JvdXAsIGl0ZW1feWVzLCBpdGVtX25vID0gYXYKKyAgICAgICAgICAgICAgICBwcmludCgnJywgY29uZGdyb3VwKQorICAgICAgICAgICAgICAgIGl0ZW1feWVzLmR1bXAobGV2ZWwrMSkKKyAgICAgICAgICAgICAgICBpZiBpdGVtX25vOgorICAgICAgICAgICAgICAgICAgICBwcmludChsZXZlbCoiICAiICsgImVsc2UiKQorICAgICAgICAgICAgICAgICAgICBpdGVtX25vLmR1bXAobGV2ZWwrMSkKICAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShhdiwgc2VxdHlwZXMpOgorICAgICAgICAgICAgICAgIG5sID0gRmFsc2UKICAgICAgICAgICAgICAgICBmb3IgYSBpbiBhdjoKICAgICAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShhLCBTdWJQYXR0ZXJuKToKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBubDogcHJpbnQoKQotICAgICAgICAgICAgICAgICAgICAgICAgYS5kdW1wKGxldmVsKzEpOyBubCA9IDEKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBubDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgpCisgICAgICAgICAgICAgICAgICAgICAgICBhLmR1bXAobGV2ZWwrMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG5sID0gVHJ1ZQogICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoYSwgZW5kPScgJykgOyBubCA9IDAKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBubDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgnICcsIGVuZD0nJykKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KGEsIGVuZD0nJykKKyAgICAgICAgICAgICAgICAgICAgICAgIG5sID0gRmFsc2UKKyAgICAgICAgICAgICAgICBpZiBub3Qgbmw6CisgICAgICAgICAgICAgICAgICAgIHByaW50KCkKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcHJpbnQoYXYsIGVuZD0nICcpIDsgbmwgPSAwCi0gICAgICAgICAgICBpZiBub3Qgbmw6IHByaW50KCkKKyAgICAgICAgICAgICAgICBwcmludCgnJywgYXYpCiAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgICAgICByZXR1cm4gcmVwcihzZWxmLmRhdGEpCiAgICAgZGVmIF9fbGVuX18oc2VsZik6CkBAIC0zNDEsNiArMzU0LDExIEBACiAgICAgICAgICAgICBpZiBncm91cCA8IHN0YXRlLmdyb3VwczoKICAgICAgICAgICAgICAgICBpZiBub3Qgc3RhdGUuY2hlY2tncm91cChncm91cCk6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIGVycm9yKCJjYW5ub3QgcmVmZXIgdG8gb3BlbiBncm91cCIpCisgICAgICAgICAgICAgICAgaWYgc3RhdGUubG9va2JlaGluZDoKKyAgICAgICAgICAgICAgICAgICAgaW1wb3J0IHdhcm5pbmdzCisgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oJ2dyb3VwIHJlZmVyZW5jZXMgaW4gbG9va2JlaGluZCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Fzc2VydGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJ1bnRpbWVXYXJuaW5nKQogICAgICAgICAgICAgICAgIHJldHVybiBHUk9VUFJFRiwgZ3JvdXAKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IKICAgICAgICAgaWYgbGVuKGVzY2FwZSkgPT0gMjoKQEAgLTYxNyw3ICs2MzUsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXIiICUgbmFtZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGdpZCA9IHN0YXRlLmdyb3VwZGljdC5nZXQobmFtZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGdpZCBpcyBOb25lOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIGVycm9yKCJ1bmtub3duIGdyb3VwIG5hbWUiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZyA9ICJ1bmtub3duIGdyb3VwIG5hbWU6IHswIXJ9Ii5mb3JtYXQobmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBlcnJvcihtc2cpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBzdGF0ZS5sb29rYmVoaW5kOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltcG9ydCB3YXJuaW5ncworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oJ2dyb3VwIHJlZmVyZW5jZXMgaW4gbG9va2JlaGluZCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXNzZXJ0aW9ucyBhcmUgbm90IHN1cHBvcnRlZCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSdW50aW1lV2FybmluZykKICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnBhdHRlcm5hcHBlbmQoKEdST1VQUkVGLCBnaWQpKQogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgICAgICAgICAgZWxzZToKQEAgLTY0Niw3ICs2NzAsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBlcnJvcigic3ludGF4IGVycm9yIikKICAgICAgICAgICAgICAgICAgICAgICAgIGRpciA9IC0xICMgbG9va2JlaGluZAogICAgICAgICAgICAgICAgICAgICAgICAgY2hhciA9IHNvdXJjZWdldCgpCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5sb29rYmVoaW5kICs9IDEKICAgICAgICAgICAgICAgICAgICAgcCA9IF9wYXJzZV9zdWIoc291cmNlLCBzdGF0ZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgZGlyIDwgMDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLmxvb2tiZWhpbmQgLT0gMQogICAgICAgICAgICAgICAgICAgICBpZiBub3Qgc291cmNlbWF0Y2goIikiKToKICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIGVycm9yKCJ1bmJhbGFuY2VkIHBhcmVudGhlc2lzIikKICAgICAgICAgICAgICAgICAgICAgaWYgY2hhciA9PSAiPSI6CkBAIC02NzAsMTIgKzY5NywxOCBAQAogICAgICAgICAgICAgICAgICAgICBpZiBjb25kbmFtZS5pc2lkZW50aWZpZXIoKToKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRncm91cCA9IHN0YXRlLmdyb3VwZGljdC5nZXQoY29uZG5hbWUpCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiBjb25kZ3JvdXAgaXMgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBlcnJvcigidW5rbm93biBncm91cCBuYW1lIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2cgPSAidW5rbm93biBncm91cCBuYW1lOiB7MCFyfSIuZm9ybWF0KGNvbmRuYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIGVycm9yKG1zZykKICAgICAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25kZ3JvdXAgPSBpbnQoY29uZG5hbWUpCiAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBlcnJvcigiYmFkIGNoYXJhY3RlciBpbiBncm91cCBuYW1lIikKKyAgICAgICAgICAgICAgICAgICAgaWYgc3RhdGUubG9va2JlaGluZDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGltcG9ydCB3YXJuaW5ncworICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ3Mud2FybignZ3JvdXAgcmVmZXJlbmNlcyBpbiBsb29rYmVoaW5kICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Fzc2VydGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSdW50aW1lV2FybmluZykKICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICAjIGZsYWdzCiAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBzb3VyY2UubmV4dCBpbiBGTEFHUzoKQEAgLTc2OCwzNSArODAxLDMzIEBACiAgICAgIyBncm91cCByZWZlcmVuY2VzCiAgICAgcyA9IFRva2VuaXplcihzb3VyY2UpCiAgICAgc2dldCA9IHMuZ2V0Ci0gICAgcCA9IFtdCi0gICAgYSA9IHAuYXBwZW5kCi0gICAgZGVmIGxpdGVyYWwobGl0ZXJhbCwgcD1wLCBwYXBwZW5kPWEpOgotICAgICAgICBpZiBwIGFuZCBwWy0xXVswXSBpcyBMSVRFUkFMOgotICAgICAgICAgICAgcFstMV0gPSBMSVRFUkFMLCBwWy0xXVsxXSArIGxpdGVyYWwKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHBhcHBlbmQoKExJVEVSQUwsIGxpdGVyYWwpKQotICAgIHNlcCA9IHNvdXJjZVs6MF0KLSAgICBpZiBpc2luc3RhbmNlKHNlcCwgc3RyKToKLSAgICAgICAgbWFrZWNoYXIgPSBjaHIKLSAgICBlbHNlOgotICAgICAgICBtYWtlY2hhciA9IGNocgotICAgIHdoaWxlIDE6CisgICAgZ3JvdXBzID0gW10KKyAgICBsaXRlcmFscyA9IFtdCisgICAgbGl0ZXJhbCA9IFtdCisgICAgbGFwcGVuZCA9IGxpdGVyYWwuYXBwZW5kCisgICAgZGVmIGFkZGdyb3VwKGluZGV4KToKKyAgICAgICAgaWYgbGl0ZXJhbDoKKyAgICAgICAgICAgIGxpdGVyYWxzLmFwcGVuZCgnJy5qb2luKGxpdGVyYWwpKQorICAgICAgICAgICAgZGVsIGxpdGVyYWxbOl0KKyAgICAgICAgZ3JvdXBzLmFwcGVuZCgobGVuKGxpdGVyYWxzKSwgaW5kZXgpKQorICAgICAgICBsaXRlcmFscy5hcHBlbmQoTm9uZSkKKyAgICB3aGlsZSBUcnVlOgogICAgICAgICB0aGlzID0gc2dldCgpCiAgICAgICAgIGlmIHRoaXMgaXMgTm9uZToKICAgICAgICAgICAgIGJyZWFrICMgZW5kIG9mIHJlcGxhY2VtZW50IHN0cmluZwotICAgICAgICBpZiB0aGlzIGFuZCB0aGlzWzBdID09ICJcXCI6CisgICAgICAgIGlmIHRoaXNbMF0gPT0gIlxcIjoKICAgICAgICAgICAgICMgZ3JvdXAKLSAgICAgICAgICAgIGMgPSB0aGlzWzE6Ml0KKyAgICAgICAgICAgIGMgPSB0aGlzWzFdCiAgICAgICAgICAgICBpZiBjID09ICJnIjoKICAgICAgICAgICAgICAgICBuYW1lID0gIiIKICAgICAgICAgICAgICAgICBpZiBzLm1hdGNoKCI8Iik6Ci0gICAgICAgICAgICAgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICAgICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyID0gc2dldCgpCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiBjaGFyIGlzIE5vbmU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgZXJyb3IoInVudGVybWluYXRlZCBncm91cCBuYW1lIikKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNoYXIgPT0gIj4iOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gbmFtZSArIGNoYXIKKyAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgKz0gY2hhcgogICAgICAgICAgICAgICAgIGlmIG5vdCBuYW1lOgogICAgICAgICAgICAgICAgICAgICByYWlzZSBlcnJvcigibWlzc2luZyBncm91cCBuYW1lIikKICAgICAgICAgICAgICAgICB0cnk6CkBAIC04MDksNTEgKzg0MCw0MCBAQAogICAgICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCA9IHBhdHRlcm4uZ3JvdXBpbmRleFtuYW1lXQogICAgICAgICAgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBJbmRleEVycm9yKCJ1bmtub3duIGdyb3VwIG5hbWUiKQotICAgICAgICAgICAgICAgIGEoKE1BUkssIGluZGV4KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZyA9ICJ1bmtub3duIGdyb3VwIG5hbWU6IHswIXJ9Ii5mb3JtYXQobmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEluZGV4RXJyb3IobXNnKQorICAgICAgICAgICAgICAgIGFkZGdyb3VwKGluZGV4KQogICAgICAgICAgICAgZWxpZiBjID09ICIwIjoKICAgICAgICAgICAgICAgICBpZiBzLm5leHQgaW4gT0NURElHSVRTOgotICAgICAgICAgICAgICAgICAgICB0aGlzID0gdGhpcyArIHNnZXQoKQorICAgICAgICAgICAgICAgICAgICB0aGlzICs9IHNnZXQoKQogICAgICAgICAgICAgICAgICAgICBpZiBzLm5leHQgaW4gT0NURElHSVRTOgotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyA9IHRoaXMgKyBzZ2V0KCkKLSAgICAgICAgICAgICAgICBsaXRlcmFsKG1ha2VjaGFyKGludCh0aGlzWzE6XSwgOCkgJiAweGZmKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgKz0gc2dldCgpCisgICAgICAgICAgICAgICAgbGFwcGVuZChjaHIoaW50KHRoaXNbMTpdLCA4KSAmIDB4ZmYpKQogICAgICAgICAgICAgZWxpZiBjIGluIERJR0lUUzoKICAgICAgICAgICAgICAgICBpc29jdGFsID0gRmFsc2UKICAgICAgICAgICAgICAgICBpZiBzLm5leHQgaW4gRElHSVRTOgotICAgICAgICAgICAgICAgICAgICB0aGlzID0gdGhpcyArIHNnZXQoKQorICAgICAgICAgICAgICAgICAgICB0aGlzICs9IHNnZXQoKQogICAgICAgICAgICAgICAgICAgICBpZiAoYyBpbiBPQ1RESUdJVFMgYW5kIHRoaXNbMl0gaW4gT0NURElHSVRTIGFuZAogICAgICAgICAgICAgICAgICAgICAgICAgcy5uZXh0IGluIE9DVERJR0lUUyk6Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzID0gdGhpcyArIHNnZXQoKQorICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyArPSBzZ2V0KCkKICAgICAgICAgICAgICAgICAgICAgICAgIGlzb2N0YWwgPSBUcnVlCi0gICAgICAgICAgICAgICAgICAgICAgICBsaXRlcmFsKG1ha2VjaGFyKGludCh0aGlzWzE6XSwgOCkgJiAweGZmKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGxhcHBlbmQoY2hyKGludCh0aGlzWzE6XSwgOCkgJiAweGZmKSkKICAgICAgICAgICAgICAgICBpZiBub3QgaXNvY3RhbDoKLSAgICAgICAgICAgICAgICAgICAgYSgoTUFSSywgaW50KHRoaXNbMTpdKSkpCisgICAgICAgICAgICAgICAgICAgIGFkZGdyb3VwKGludCh0aGlzWzE6XSkpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgdGhpcyA9IG1ha2VjaGFyKEVTQ0FQRVNbdGhpc11bMV0pCisgICAgICAgICAgICAgICAgICAgIHRoaXMgPSBjaHIoRVNDQVBFU1t0aGlzXVsxXSkKICAgICAgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CiAgICAgICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgICAgICBsaXRlcmFsKHRoaXMpCisgICAgICAgICAgICAgICAgbGFwcGVuZCh0aGlzKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgbGl0ZXJhbCh0aGlzKQotICAgICMgY29udmVydCB0ZW1wbGF0ZSB0byBncm91cHMgYW5kIGxpdGVyYWxzIGxpc3RzCi0gICAgaSA9IDAKLSAgICBncm91cHMgPSBbXQotICAgIGdyb3Vwc2FwcGVuZCA9IGdyb3Vwcy5hcHBlbmQKLSAgICBsaXRlcmFscyA9IFtOb25lXSAqIGxlbihwKQotICAgIGlmIGlzaW5zdGFuY2Uoc291cmNlLCBzdHIpOgotICAgICAgICBlbmNvZGUgPSBsYW1iZGEgeDogeAotICAgIGVsc2U6CisgICAgICAgICAgICBsYXBwZW5kKHRoaXMpCisgICAgaWYgbGl0ZXJhbDoKKyAgICAgICAgbGl0ZXJhbHMuYXBwZW5kKCcnLmpvaW4obGl0ZXJhbCkpCisgICAgaWYgbm90IGlzaW5zdGFuY2Uoc291cmNlLCBzdHIpOgogICAgICAgICAjIFRoZSB0b2tlbml6ZXIgaW1wbGljaXRseSBkZWNvZGVzIGJ5dGVzIG9iamVjdHMgYXMgbGF0aW4tMSwgd2UgbXVzdAogICAgICAgICAjIHRoZXJlZm9yZSByZS1lbmNvZGUgdGhlIGZpbmFsIHJlcHJlc2VudGF0aW9uLgotICAgICAgICBlbmNvZGUgPSBsYW1iZGEgeDogeC5lbmNvZGUoJ2xhdGluLTEnKQotICAgIGZvciBjLCBzIGluIHA6Ci0gICAgICAgIGlmIGMgaXMgTUFSSzoKLSAgICAgICAgICAgIGdyb3Vwc2FwcGVuZCgoaSwgcykpCi0gICAgICAgICAgICAjIGxpdGVyYWxbaV0gaXMgYWxyZWFkeSBOb25lCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBsaXRlcmFsc1tpXSA9IGVuY29kZShzKQotICAgICAgICBpID0gaSArIDEKKyAgICAgICAgbGl0ZXJhbHMgPSBbTm9uZSBpZiBzIGlzIE5vbmUgZWxzZSBzLmVuY29kZSgnbGF0aW4tMScpIGZvciBzIGluIGxpdGVyYWxzXQogICAgIHJldHVybiBncm91cHMsIGxpdGVyYWxzCiAKIGRlZiBleHBhbmRfdGVtcGxhdGUodGVtcGxhdGUsIG1hdGNoKToKZGlmZiAtLWdpdCBhL0xpYi9zc2wucHkgYi9MaWIvc3NsLnB5CmluZGV4IGNkOGQ2YjQuLmVjNDJlMzggMTAwNjQ0Ci0tLSBhL0xpYi9zc2wucHkKKysrIGIvTGliL3NzbC5weQpAQCAtNTIsMTAgKzUyLDQ3IEBACiBQUk9UT0NPTF9TU0x2MwogUFJPVE9DT0xfU1NMdjIzCiBQUk9UT0NPTF9UTFN2MQorUFJPVE9DT0xfVExTdjFfMQorUFJPVE9DT0xfVExTdjFfMgorCitUaGUgZm9sbG93aW5nIGNvbnN0YW50cyBpZGVudGlmeSB2YXJpb3VzIFNTTCBhbGVydCBtZXNzYWdlIGRlc2NyaXB0aW9ucyBhcyBwZXIKK2h0dHA6Ly93d3cuaWFuYS5vcmcvYXNzaWdubWVudHMvdGxzLXBhcmFtZXRlcnMvdGxzLXBhcmFtZXRlcnMueG1sI3Rscy1wYXJhbWV0ZXJzLTYKKworQUxFUlRfREVTQ1JJUFRJT05fQ0xPU0VfTk9USUZZCitBTEVSVF9ERVNDUklQVElPTl9VTkVYUEVDVEVEX01FU1NBR0UKK0FMRVJUX0RFU0NSSVBUSU9OX0JBRF9SRUNPUkRfTUFDCitBTEVSVF9ERVNDUklQVElPTl9SRUNPUkRfT1ZFUkZMT1cKK0FMRVJUX0RFU0NSSVBUSU9OX0RFQ09NUFJFU1NJT05fRkFJTFVSRQorQUxFUlRfREVTQ1JJUFRJT05fSEFORFNIQUtFX0ZBSUxVUkUKK0FMRVJUX0RFU0NSSVBUSU9OX0JBRF9DRVJUSUZJQ0FURQorQUxFUlRfREVTQ1JJUFRJT05fVU5TVVBQT1JURURfQ0VSVElGSUNBVEUKK0FMRVJUX0RFU0NSSVBUSU9OX0NFUlRJRklDQVRFX1JFVk9LRUQKK0FMRVJUX0RFU0NSSVBUSU9OX0NFUlRJRklDQVRFX0VYUElSRUQKK0FMRVJUX0RFU0NSSVBUSU9OX0NFUlRJRklDQVRFX1VOS05PV04KK0FMRVJUX0RFU0NSSVBUSU9OX0lMTEVHQUxfUEFSQU1FVEVSCitBTEVSVF9ERVNDUklQVElPTl9VTktOT1dOX0NBCitBTEVSVF9ERVNDUklQVElPTl9BQ0NFU1NfREVOSUVECitBTEVSVF9ERVNDUklQVElPTl9ERUNPREVfRVJST1IKK0FMRVJUX0RFU0NSSVBUSU9OX0RFQ1JZUFRfRVJST1IKK0FMRVJUX0RFU0NSSVBUSU9OX1BST1RPQ09MX1ZFUlNJT04KK0FMRVJUX0RFU0NSSVBUSU9OX0lOU1VGRklDSUVOVF9TRUNVUklUWQorQUxFUlRfREVTQ1JJUFRJT05fSU5URVJOQUxfRVJST1IKK0FMRVJUX0RFU0NSSVBUSU9OX1VTRVJfQ0FOQ0VMTEVECitBTEVSVF9ERVNDUklQVElPTl9OT19SRU5FR09USUFUSU9OCitBTEVSVF9ERVNDUklQVElPTl9VTlNVUFBPUlRFRF9FWFRFTlNJT04KK0FMRVJUX0RFU0NSSVBUSU9OX0NFUlRJRklDQVRFX1VOT0JUQUlOQUJMRQorQUxFUlRfREVTQ1JJUFRJT05fVU5SRUNPR05JWkVEX05BTUUKK0FMRVJUX0RFU0NSSVBUSU9OX0JBRF9DRVJUSUZJQ0FURV9TVEFUVVNfUkVTUE9OU0UKK0FMRVJUX0RFU0NSSVBUSU9OX0JBRF9DRVJUSUZJQ0FURV9IQVNIX1ZBTFVFCitBTEVSVF9ERVNDUklQVElPTl9VTktOT1dOX1BTS19JREVOVElUWQogIiIiCiAKIGltcG9ydCB0ZXh0d3JhcAogaW1wb3J0IHJlCitpbXBvcnQgc3lzCitpbXBvcnQgb3MKK2Zyb20gY29sbGVjdGlvbnMgaW1wb3J0IG5hbWVkdHVwbGUKK2Zyb20gZW51bSBpbXBvcnQgRW51bSBhcyBfRW51bQogCiBpbXBvcnQgX3NzbCAgICAgICAgICAgICAjIGlmIHdlIGNhbid0IGltcG9ydCBpdCwgbGV0IHRoZSBlcnJvciBwcm9wYWdhdGUKIApAQCAtNjYsNDAgKzEwMywzMSBAQAogICAgIFNTTFN5c2NhbGxFcnJvciwgU1NMRU9GRXJyb3IsCiAgICAgKQogZnJvbSBfc3NsIGltcG9ydCBDRVJUX05PTkUsIENFUlRfT1BUSU9OQUwsIENFUlRfUkVRVUlSRUQKLWZyb20gX3NzbCBpbXBvcnQgKAotICAgIE9QX0FMTCwgT1BfTk9fU1NMdjIsIE9QX05PX1NTTHYzLCBPUF9OT19UTFN2MSwKLSAgICBPUF9DSVBIRVJfU0VSVkVSX1BSRUZFUkVOQ0UsIE9QX1NJTkdMRV9ESF9VU0UKLSAgICApCitmcm9tIF9zc2wgaW1wb3J0IHR4dDJvYmogYXMgX3R4dDJvYmosIG5pZDJvYmogYXMgX25pZDJvYmoKK2Zyb20gX3NzbCBpbXBvcnQgUkFORF9zdGF0dXMsIFJBTkRfYWRkLCBSQU5EX2J5dGVzLCBSQU5EX3BzZXVkb19ieXRlcwogdHJ5OgotICAgIGZyb20gX3NzbCBpbXBvcnQgT1BfTk9fQ09NUFJFU1NJT04KKyAgICBmcm9tIF9zc2wgaW1wb3J0IFJBTkRfZWdkCiBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgIyBMaWJyZVNTTCBkb2VzIG5vdCBwcm92aWRlIFJBTkRfZWdkCiAgICAgcGFzcwotdHJ5OgotICAgIGZyb20gX3NzbCBpbXBvcnQgT1BfU0lOR0xFX0VDREhfVVNFCi1leGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgcGFzcwotZnJvbSBfc3NsIGltcG9ydCBSQU5EX3N0YXR1cywgUkFORF9lZ2QsIFJBTkRfYWRkLCBSQU5EX2J5dGVzLCBSQU5EX3BzZXVkb19ieXRlcwotZnJvbSBfc3NsIGltcG9ydCAoCi0gICAgU1NMX0VSUk9SX1pFUk9fUkVUVVJOLAotICAgIFNTTF9FUlJPUl9XQU5UX1JFQUQsCi0gICAgU1NMX0VSUk9SX1dBTlRfV1JJVEUsCi0gICAgU1NMX0VSUk9SX1dBTlRfWDUwOV9MT09LVVAsCi0gICAgU1NMX0VSUk9SX1NZU0NBTEwsCi0gICAgU1NMX0VSUk9SX1NTTCwKLSAgICBTU0xfRVJST1JfV0FOVF9DT05ORUNULAotICAgIFNTTF9FUlJPUl9FT0YsCi0gICAgU1NMX0VSUk9SX0lOVkFMSURfRVJST1JfQ09ERSwKLSAgICApCisKK2RlZiBfaW1wb3J0X3N5bWJvbHMocHJlZml4KToKKyAgICBmb3IgbiBpbiBkaXIoX3NzbCk6CisgICAgICAgIGlmIG4uc3RhcnRzd2l0aChwcmVmaXgpOgorICAgICAgICAgICAgZ2xvYmFscygpW25dID0gZ2V0YXR0cihfc3NsLCBuKQorCitfaW1wb3J0X3N5bWJvbHMoJ09QXycpCitfaW1wb3J0X3N5bWJvbHMoJ0FMRVJUX0RFU0NSSVBUSU9OXycpCitfaW1wb3J0X3N5bWJvbHMoJ1NTTF9FUlJPUl8nKQorX2ltcG9ydF9zeW1ib2xzKCdQUk9UT0NPTF8nKQorX2ltcG9ydF9zeW1ib2xzKCdWRVJJRllfJykKKwogZnJvbSBfc3NsIGltcG9ydCBIQVNfU05JLCBIQVNfRUNESCwgSEFTX05QTgotZnJvbSBfc3NsIGltcG9ydCAoUFJPVE9DT0xfU1NMdjMsIFBST1RPQ09MX1NTTHYyMywKLSAgICAgICAgICAgICAgICAgIFBST1RPQ09MX1RMU3YxKQorCiBmcm9tIF9zc2wgaW1wb3J0IF9PUEVOU1NMX0FQSV9WRVJTSU9OCiAKLV9QUk9UT0NPTF9OQU1FUyA9IHsKLSAgICBQUk9UT0NPTF9UTFN2MTogIlRMU3YxIiwKLSAgICBQUk9UT0NPTF9TU0x2MjM6ICJTU0x2MjMiLAotICAgIFBST1RPQ09MX1NTTHYzOiAiU1NMdjMiLAotfQorCitfUFJPVE9DT0xfTkFNRVMgPSB7dmFsdWU6IG5hbWUgZm9yIG5hbWUsIHZhbHVlIGluIGdsb2JhbHMoKS5pdGVtcygpIGlmIG5hbWUuc3RhcnRzd2l0aCgnUFJPVE9DT0xfJyl9CiB0cnk6CiAgICAgZnJvbSBfc3NsIGltcG9ydCBQUk9UT0NPTF9TU0x2MgogICAgIF9TU0x2Ml9JRl9FWElTVFMgPSBQUk9UT0NPTF9TU0x2MgpAQCAtMTA4LDE0ICsxMzYsMjUgQEAKIGVsc2U6CiAgICAgX1BST1RPQ09MX05BTUVTW1BST1RPQ09MX1NTTHYyXSA9ICJTU0x2MiIKIAotZnJvbSBzb2NrZXQgaW1wb3J0IGdldG5hbWVpbmZvIGFzIF9nZXRuYW1laW5mbwotZnJvbSBzb2NrZXQgaW1wb3J0IGVycm9yIGFzIHNvY2tldF9lcnJvcgordHJ5OgorICAgIGZyb20gX3NzbCBpbXBvcnQgUFJPVE9DT0xfVExTdjFfMSwgUFJPVE9DT0xfVExTdjFfMgorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHBhc3MKK2Vsc2U6CisgICAgX1BST1RPQ09MX05BTUVTW1BST1RPQ09MX1RMU3YxXzFdID0gIlRMU3YxLjEiCisgICAgX1BST1RPQ09MX05BTUVTW1BST1RPQ09MX1RMU3YxXzJdID0gIlRMU3YxLjIiCisKK2lmIHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiOgorICAgIGZyb20gX3NzbCBpbXBvcnQgZW51bV9jZXJ0aWZpY2F0ZXMsIGVudW1fY3JscworCiBmcm9tIHNvY2tldCBpbXBvcnQgc29ja2V0LCBBRl9JTkVULCBTT0NLX1NUUkVBTSwgY3JlYXRlX2Nvbm5lY3Rpb24KIGZyb20gc29ja2V0IGltcG9ydCBTT0xfU09DS0VULCBTT19UWVBFCiBpbXBvcnQgYmFzZTY0ICAgICAgICAjIGZvciBERVItdG8tUEVNIHRyYW5zbGF0aW9uCi1pbXBvcnQgdHJhY2ViYWNrCiBpbXBvcnQgZXJybm8KIAorCitzb2NrZXRfZXJyb3IgPSBPU0Vycm9yICAjIGtlZXAgdGhhdCBwdWJsaWMgbmFtZSBpbiBtb2R1bGUgbmFtZXNwYWNlCisKIGlmIF9zc2wuSEFTX1RMU19VTklRVUU6CiAgICAgQ0hBTk5FTF9CSU5ESU5HX1RZUEVTID0gWyd0bHMtdW5pcXVlJ10KIGVsc2U6CkBAIC0xMjMsNyArMTYyLDM1IEBACiAKICMgRGlzYWJsZSB3ZWFrIG9yIGluc2VjdXJlIGNpcGhlcnMgYnkgZGVmYXVsdAogIyAoT3BlblNTTCdzIGRlZmF1bHQgc2V0dGluZyBpcyAnREVGQVVMVDohYU5VTEw6IWVOVUxMJykKLV9ERUZBVUxUX0NJUEhFUlMgPSAnREVGQVVMVDohYU5VTEw6IWVOVUxMOiFMT1c6IUVYUE9SVDohU1NMdjInCisjIEVuYWJsZSBhIGJldHRlciBzZXQgb2YgY2lwaGVycyBieSBkZWZhdWx0CisjIFRoaXMgbGlzdCBoYXMgYmVlbiBleHBsaWNpdGx5IGNob3NlbiB0bzoKKyMgICAqIFByZWZlciBjaXBoZXIgc3VpdGVzIHRoYXQgb2ZmZXIgcGVyZmVjdCBmb3J3YXJkIHNlY3JlY3kgKERIRS9FQ0RIRSkKKyMgICAqIFByZWZlciBFQ0RIRSBvdmVyIERIRSBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlCisjICAgKiBQcmVmZXIgYW55IEFFUy1HQ00gb3ZlciBhbnkgQUVTLUNCQyBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlIGFuZCBzZWN1cml0eQorIyAgICogVGhlbiBVc2UgSElHSCBjaXBoZXIgc3VpdGVzIGFzIGEgZmFsbGJhY2sKKyMgICAqIFRoZW4gVXNlIDNERVMgYXMgZmFsbGJhY2sgd2hpY2ggaXMgc2VjdXJlIGJ1dCBzbG93CisjICAgKiBEaXNhYmxlIE5VTEwgYXV0aGVudGljYXRpb24sIE5VTEwgZW5jcnlwdGlvbiwgYW5kIE1ENSBNQUNzIGZvciBzZWN1cml0eQorIyAgICAgcmVhc29ucworX0RFRkFVTFRfQ0lQSEVSUyA9ICgKKyAgICAnRUNESCtBRVNHQ006REgrQUVTR0NNOkVDREgrQUVTMjU2OkRIK0FFUzI1NjpFQ0RIK0FFUzEyODpESCtBRVM6RUNESCtISUdIOicKKyAgICAnREgrSElHSDpFQ0RIKzNERVM6REgrM0RFUzpSU0ErQUVTR0NNOlJTQStBRVM6UlNBK0hJR0g6UlNBKzNERVM6IWFOVUxMOicKKyAgICAnIWVOVUxMOiFNRDUnCispCisKKyMgUmVzdHJpY3RlZCBhbmQgbW9yZSBzZWN1cmUgY2lwaGVycyBmb3IgdGhlIHNlcnZlciBzaWRlCisjIFRoaXMgbGlzdCBoYXMgYmVlbiBleHBsaWNpdGx5IGNob3NlbiB0bzoKKyMgICAqIFByZWZlciBjaXBoZXIgc3VpdGVzIHRoYXQgb2ZmZXIgcGVyZmVjdCBmb3J3YXJkIHNlY3JlY3kgKERIRS9FQ0RIRSkKKyMgICAqIFByZWZlciBFQ0RIRSBvdmVyIERIRSBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlCisjICAgKiBQcmVmZXIgYW55IEFFUy1HQ00gb3ZlciBhbnkgQUVTLUNCQyBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlIGFuZCBzZWN1cml0eQorIyAgICogVGhlbiBVc2UgSElHSCBjaXBoZXIgc3VpdGVzIGFzIGEgZmFsbGJhY2sKKyMgICAqIFRoZW4gVXNlIDNERVMgYXMgZmFsbGJhY2sgd2hpY2ggaXMgc2VjdXJlIGJ1dCBzbG93CisjICAgKiBEaXNhYmxlIE5VTEwgYXV0aGVudGljYXRpb24sIE5VTEwgZW5jcnlwdGlvbiwgTUQ1IE1BQ3MsIERTUywgYW5kIFJDNCBmb3IKKyMgICAgIHNlY3VyaXR5IHJlYXNvbnMKK19SRVNUUklDVEVEX1NFUlZFUl9DSVBIRVJTID0gKAorICAgICdFQ0RIK0FFU0dDTTpESCtBRVNHQ006RUNESCtBRVMyNTY6REgrQUVTMjU2OkVDREgrQUVTMTI4OkRIK0FFUzpFQ0RIK0hJR0g6JworICAgICdESCtISUdIOkVDREgrM0RFUzpESCszREVTOlJTQStBRVNHQ006UlNBK0FFUzpSU0ErSElHSDpSU0ErM0RFUzohYU5VTEw6JworICAgICchZU5VTEw6IU1ENTohRFNTOiFSQzQnCispCiAKIAogY2xhc3MgQ2VydGlmaWNhdGVFcnJvcihWYWx1ZUVycm9yKToKQEAgLTE0NCw3ICsyMTEsNyBAQAogICAgIHdpbGRjYXJkcyA9IGxlZnRtb3N0LmNvdW50KCcqJykKICAgICBpZiB3aWxkY2FyZHMgPiBtYXhfd2lsZGNhcmRzOgogICAgICAgICAjIElzc3VlICMxNzk4MDogYXZvaWQgZGVuaWFscyBvZiBzZXJ2aWNlIGJ5IHJlZnVzaW5nIG1vcmUKLSAgICAgICAgIyB0aGFuIG9uZSB3aWxkY2FyZCBwZXIgZnJhZ21lbnQuICBBIHN1cnZlcnkgb2YgZXN0YWJsaXNoZWQKKyAgICAgICAgIyB0aGFuIG9uZSB3aWxkY2FyZCBwZXIgZnJhZ21lbnQuICBBIHN1cnZleSBvZiBlc3RhYmxpc2hlZAogICAgICAgICAjIHBvbGljeSBhbW9uZyBTU0wgaW1wbGVtZW50YXRpb25zIHNob3dlZCBpdCB0byBiZSBhCiAgICAgICAgICMgcmVhc29uYWJsZSBjaG9pY2UuCiAgICAgICAgIHJhaXNlIENlcnRpZmljYXRlRXJyb3IoCkBAIC0xODgsNyArMjU1LDkgQEAKICAgICByZXR1cm5zIG5vdGhpbmcuCiAgICAgIiIiCiAgICAgaWYgbm90IGNlcnQ6Ci0gICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImVtcHR5IG9yIG5vIGNlcnRpZmljYXRlIikKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiZW1wdHkgb3Igbm8gY2VydGlmaWNhdGUsIG1hdGNoX2hvc3RuYW1lIG5lZWRzIGEgIgorICAgICAgICAgICAgICAgICAgICAgICAgICJTU0wgc29ja2V0IG9yIFNTTCBjb250ZXh0IHdpdGggZWl0aGVyICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiQ0VSVF9PUFRJT05BTCBvciBDRVJUX1JFUVVJUkVEIikKICAgICBkbnNuYW1lcyA9IFtdCiAgICAgc2FuID0gY2VydC5nZXQoJ3N1YmplY3RBbHROYW1lJywgKCkpCiAgICAgZm9yIGtleSwgdmFsdWUgaW4gc2FuOgpAQCAtMjIwLDExICsyODksNTggQEAKICAgICAgICAgICAgICJzdWJqZWN0QWx0TmFtZSBmaWVsZHMgd2VyZSBmb3VuZCIpCiAKIAorRGVmYXVsdFZlcmlmeVBhdGhzID0gbmFtZWR0dXBsZSgiRGVmYXVsdFZlcmlmeVBhdGhzIiwKKyAgICAiY2FmaWxlIGNhcGF0aCBvcGVuc3NsX2NhZmlsZV9lbnYgb3BlbnNzbF9jYWZpbGUgb3BlbnNzbF9jYXBhdGhfZW52ICIKKyAgICAib3BlbnNzbF9jYXBhdGgiKQorCitkZWYgZ2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzKCk6CisgICAgIiIiUmV0dXJuIHBhdGhzIHRvIGRlZmF1bHQgY2FmaWxlIGFuZCBjYXBhdGguCisgICAgIiIiCisgICAgcGFydHMgPSBfc3NsLmdldF9kZWZhdWx0X3ZlcmlmeV9wYXRocygpCisKKyAgICAjIGVudmlyb25tZW50IHZhcnMgc2hhZG93IHBhdGhzCisgICAgY2FmaWxlID0gb3MuZW52aXJvbi5nZXQocGFydHNbMF0sIHBhcnRzWzFdKQorICAgIGNhcGF0aCA9IG9zLmVudmlyb24uZ2V0KHBhcnRzWzJdLCBwYXJ0c1szXSkKKworICAgIHJldHVybiBEZWZhdWx0VmVyaWZ5UGF0aHMoY2FmaWxlIGlmIG9zLnBhdGguaXNmaWxlKGNhZmlsZSkgZWxzZSBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FwYXRoIGlmIG9zLnBhdGguaXNkaXIoY2FwYXRoKSBlbHNlIE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcGFydHMpCisKKworY2xhc3MgX0FTTjFPYmplY3QobmFtZWR0dXBsZSgiX0FTTjFPYmplY3QiLCAibmlkIHNob3J0bmFtZSBsb25nbmFtZSBvaWQiKSk6CisgICAgIiIiQVNOLjEgb2JqZWN0IGlkZW50aWZpZXIgbG9va3VwCisgICAgIiIiCisgICAgX19zbG90c19fID0gKCkKKworICAgIGRlZiBfX25ld19fKGNscywgb2lkKToKKyAgICAgICAgcmV0dXJuIHN1cGVyKCkuX19uZXdfXyhjbHMsICpfdHh0Mm9iaihvaWQsIG5hbWU9RmFsc2UpKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGZyb21uaWQoY2xzLCBuaWQpOgorICAgICAgICAiIiJDcmVhdGUgX0FTTjFPYmplY3QgZnJvbSBPcGVuU1NMIG51bWVyaWMgSUQKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBzdXBlcigpLl9fbmV3X18oY2xzLCAqX25pZDJvYmoobmlkKSkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBmcm9tbmFtZShjbHMsIG5hbWUpOgorICAgICAgICAiIiJDcmVhdGUgX0FTTjFPYmplY3QgZnJvbSBzaG9ydCBuYW1lLCBsb25nIG5hbWUgb3IgT0lECisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gc3VwZXIoKS5fX25ld19fKGNscywgKl90eHQyb2JqKG5hbWUsIG5hbWU9VHJ1ZSkpCisKKworY2xhc3MgUHVycG9zZShfQVNOMU9iamVjdCwgX0VudW0pOgorICAgICIiIlNTTENvbnRleHQgcHVycG9zZSBmbGFncyB3aXRoIFg1MDl2MyBFeHRlbmRlZCBLZXkgVXNhZ2Ugb2JqZWN0cworICAgICIiIgorICAgIFNFUlZFUl9BVVRIID0gJzEuMy42LjEuNS41LjcuMy4xJworICAgIENMSUVOVF9BVVRIID0gJzEuMy42LjEuNS41LjcuMy4yJworCisKIGNsYXNzIFNTTENvbnRleHQoX1NTTENvbnRleHQpOgogICAgICIiIkFuIFNTTENvbnRleHQgaG9sZHMgdmFyaW91cyBTU0wtcmVsYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kCiAgICAgZGF0YSwgc3VjaCBhcyBjZXJ0aWZpY2F0ZXMgYW5kIHBvc3NpYmx5IGEgcHJpdmF0ZSBrZXkuIiIiCiAKLSAgICBfX3Nsb3RzX18gPSAoJ3Byb3RvY29sJywpCisgICAgX19zbG90c19fID0gKCdwcm90b2NvbCcsICdfX3dlYWtyZWZfXycpCisgICAgX3dpbmRvd3NfY2VydF9zdG9yZXMgPSAoIkNBIiwgIlJPT1QiKQogCiAgICAgZGVmIF9fbmV3X18oY2xzLCBwcm90b2NvbCwgKmFyZ3MsICoqa3dhcmdzKToKICAgICAgICAgc2VsZiA9IF9TU0xDb250ZXh0Ll9fbmV3X18oY2xzLCBwcm90b2NvbCkKQEAgLTI1Niw2ICszNzIsMTIxIEBACiAKICAgICAgICAgc2VsZi5fc2V0X25wbl9wcm90b2NvbHMocHJvdG9zKQogCisgICAgZGVmIF9sb2FkX3dpbmRvd3Nfc3RvcmVfY2VydHMoc2VsZiwgc3RvcmVuYW1lLCBwdXJwb3NlKToKKyAgICAgICAgY2VydHMgPSBieXRlYXJyYXkoKQorICAgICAgICBmb3IgY2VydCwgZW5jb2RpbmcsIHRydXN0IGluIGVudW1fY2VydGlmaWNhdGVzKHN0b3JlbmFtZSk6CisgICAgICAgICAgICAjIENBIGNlcnRzIGFyZSBuZXZlciBQS0NTIzcgZW5jb2RlZAorICAgICAgICAgICAgaWYgZW5jb2RpbmcgPT0gIng1MDlfYXNuIjoKKyAgICAgICAgICAgICAgICBpZiB0cnVzdCBpcyBUcnVlIG9yIHB1cnBvc2Uub2lkIGluIHRydXN0OgorICAgICAgICAgICAgICAgICAgICBjZXJ0cy5leHRlbmQoY2VydCkKKyAgICAgICAgc2VsZi5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoY2FkYXRhPWNlcnRzKQorICAgICAgICByZXR1cm4gY2VydHMKKworICAgIGRlZiBsb2FkX2RlZmF1bHRfY2VydHMoc2VsZiwgcHVycG9zZT1QdXJwb3NlLlNFUlZFUl9BVVRIKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UocHVycG9zZSwgX0FTTjFPYmplY3QpOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKHB1cnBvc2UpCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiOgorICAgICAgICAgICAgZm9yIHN0b3JlbmFtZSBpbiBzZWxmLl93aW5kb3dzX2NlcnRfc3RvcmVzOgorICAgICAgICAgICAgICAgIHNlbGYuX2xvYWRfd2luZG93c19zdG9yZV9jZXJ0cyhzdG9yZW5hbWUsIHB1cnBvc2UpCisgICAgICAgIHNlbGYuc2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzKCkKKworCitkZWYgY3JlYXRlX2RlZmF1bHRfY29udGV4dChwdXJwb3NlPVB1cnBvc2UuU0VSVkVSX0FVVEgsICosIGNhZmlsZT1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FwYXRoPU5vbmUsIGNhZGF0YT1Ob25lKToKKyAgICAiIiJDcmVhdGUgYSBTU0xDb250ZXh0IG9iamVjdCB3aXRoIGRlZmF1bHQgc2V0dGluZ3MuCisKKyAgICBOT1RFOiBUaGUgcHJvdG9jb2wgYW5kIHNldHRpbmdzIG1heSBjaGFuZ2UgYW55dGltZSB3aXRob3V0IHByaW9yCisgICAgICAgICAgZGVwcmVjYXRpb24uIFRoZSB2YWx1ZXMgcmVwcmVzZW50IGEgZmFpciBiYWxhbmNlIGJldHdlZW4gbWF4aW11bQorICAgICAgICAgIGNvbXBhdGliaWxpdHkgYW5kIHNlY3VyaXR5LgorICAgICIiIgorICAgIGlmIG5vdCBpc2luc3RhbmNlKHB1cnBvc2UsIF9BU04xT2JqZWN0KToKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKHB1cnBvc2UpCisKKyAgICBjb250ZXh0ID0gU1NMQ29udGV4dChQUk9UT0NPTF9TU0x2MjMpCisKKyAgICAjIFNTTHYyIGNvbnNpZGVyZWQgaGFybWZ1bC4KKyAgICBjb250ZXh0Lm9wdGlvbnMgfD0gT1BfTk9fU1NMdjIKKworICAgICMgU1NMdjMgaGFzIHByb2JsZW1hdGljIHNlY3VyaXR5IGFuZCBpcyBvbmx5IHJlcXVpcmVkIGZvciByZWFsbHkgb2xkCisgICAgIyBjbGllbnRzIHN1Y2ggYXMgSUU2IG9uIFdpbmRvd3MgWFAKKyAgICBjb250ZXh0Lm9wdGlvbnMgfD0gT1BfTk9fU1NMdjMKKworICAgICMgZGlzYWJsZSBjb21wcmVzc2lvbiB0byBwcmV2ZW50IENSSU1FIGF0dGFja3MgKE9wZW5TU0wgMS4wKykKKyAgICBjb250ZXh0Lm9wdGlvbnMgfD0gZ2V0YXR0cihfc3NsLCAiT1BfTk9fQ09NUFJFU1NJT04iLCAwKQorCisgICAgaWYgcHVycG9zZSA9PSBQdXJwb3NlLlNFUlZFUl9BVVRIOgorICAgICAgICAjIHZlcmlmeSBjZXJ0cyBhbmQgaG9zdCBuYW1lIGluIGNsaWVudCBtb2RlCisgICAgICAgIGNvbnRleHQudmVyaWZ5X21vZGUgPSBDRVJUX1JFUVVJUkVECisgICAgICAgIGNvbnRleHQuY2hlY2tfaG9zdG5hbWUgPSBUcnVlCisgICAgZWxpZiBwdXJwb3NlID09IFB1cnBvc2UuQ0xJRU5UX0FVVEg6CisgICAgICAgICMgUHJlZmVyIHRoZSBzZXJ2ZXIncyBjaXBoZXJzIGJ5IGRlZmF1bHQgc28gdGhhdCB3ZSBnZXQgc3Ryb25nZXIKKyAgICAgICAgIyBlbmNyeXB0aW9uCisgICAgICAgIGNvbnRleHQub3B0aW9ucyB8PSBnZXRhdHRyKF9zc2wsICJPUF9DSVBIRVJfU0VSVkVSX1BSRUZFUkVOQ0UiLCAwKQorCisgICAgICAgICMgVXNlIHNpbmdsZSB1c2Uga2V5cyBpbiBvcmRlciB0byBpbXByb3ZlIGZvcndhcmQgc2VjcmVjeQorICAgICAgICBjb250ZXh0Lm9wdGlvbnMgfD0gZ2V0YXR0cihfc3NsLCAiT1BfU0lOR0xFX0RIX1VTRSIsIDApCisgICAgICAgIGNvbnRleHQub3B0aW9ucyB8PSBnZXRhdHRyKF9zc2wsICJPUF9TSU5HTEVfRUNESF9VU0UiLCAwKQorCisgICAgICAgICMgZGlzYWxsb3cgY2lwaGVycyB3aXRoIGtub3duIHZ1bG5lcmFiaWxpdGllcworICAgICAgICBjb250ZXh0LnNldF9jaXBoZXJzKF9SRVNUUklDVEVEX1NFUlZFUl9DSVBIRVJTKQorCisgICAgaWYgY2FmaWxlIG9yIGNhcGF0aCBvciBjYWRhdGE6CisgICAgICAgIGNvbnRleHQubG9hZF92ZXJpZnlfbG9jYXRpb25zKGNhZmlsZSwgY2FwYXRoLCBjYWRhdGEpCisgICAgZWxpZiBjb250ZXh0LnZlcmlmeV9tb2RlICE9IENFUlRfTk9ORToKKyAgICAgICAgIyBubyBleHBsaWNpdCBjYWZpbGUsIGNhcGF0aCBvciBjYWRhdGEgYnV0IHRoZSB2ZXJpZnkgbW9kZSBpcworICAgICAgICAjIENFUlRfT1BUSU9OQUwgb3IgQ0VSVF9SRVFVSVJFRC4gTGV0J3MgdHJ5IHRvIGxvYWQgZGVmYXVsdCBzeXN0ZW0KKyAgICAgICAgIyByb290IENBIGNlcnRpZmljYXRlcyBmb3IgdGhlIGdpdmVuIHB1cnBvc2UuIFRoaXMgbWF5IGZhaWwgc2lsZW50bHkuCisgICAgICAgIGNvbnRleHQubG9hZF9kZWZhdWx0X2NlcnRzKHB1cnBvc2UpCisgICAgcmV0dXJuIGNvbnRleHQKKworZGVmIF9jcmVhdGVfdW52ZXJpZmllZF9jb250ZXh0KHByb3RvY29sPVBST1RPQ09MX1NTTHYyMywgKiwgY2VydF9yZXFzPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja19ob3N0bmFtZT1GYWxzZSwgcHVycG9zZT1QdXJwb3NlLlNFUlZFUl9BVVRILAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydGZpbGU9Tm9uZSwga2V5ZmlsZT1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FmaWxlPU5vbmUsIGNhcGF0aD1Ob25lLCBjYWRhdGE9Tm9uZSk6CisgICAgIiIiQ3JlYXRlIGEgU1NMQ29udGV4dCBvYmplY3QgZm9yIFB5dGhvbiBzdGRsaWIgbW9kdWxlcworCisgICAgQWxsIFB5dGhvbiBzdGRsaWIgbW9kdWxlcyBzaGFsbCB1c2UgdGhpcyBmdW5jdGlvbiB0byBjcmVhdGUgU1NMQ29udGV4dAorICAgIG9iamVjdHMgaW4gb3JkZXIgdG8ga2VlcCBjb21tb24gc2V0dGluZ3MgaW4gb25lIHBsYWNlLiBUaGUgY29uZmlndXJhdGlvbgorICAgIGlzIGxlc3MgcmVzdHJpY3QgdGhhbiBjcmVhdGVfZGVmYXVsdF9jb250ZXh0KCkncyB0byBpbmNyZWFzZSBiYWNrd2FyZAorICAgIGNvbXBhdGliaWxpdHkuCisgICAgIiIiCisgICAgaWYgbm90IGlzaW5zdGFuY2UocHVycG9zZSwgX0FTTjFPYmplY3QpOgorICAgICAgICByYWlzZSBUeXBlRXJyb3IocHVycG9zZSkKKworICAgIGNvbnRleHQgPSBTU0xDb250ZXh0KHByb3RvY29sKQorICAgICMgU1NMdjIgY29uc2lkZXJlZCBoYXJtZnVsLgorICAgIGNvbnRleHQub3B0aW9ucyB8PSBPUF9OT19TU0x2MgorICAgICMgU1NMdjMgaGFzIHByb2JsZW1hdGljIHNlY3VyaXR5IGFuZCBpcyBvbmx5IHJlcXVpcmVkIGZvciByZWFsbHkgb2xkCisgICAgIyBjbGllbnRzIHN1Y2ggYXMgSUU2IG9uIFdpbmRvd3MgWFAKKyAgICBjb250ZXh0Lm9wdGlvbnMgfD0gT1BfTk9fU1NMdjMKKworICAgIGlmIGNlcnRfcmVxcyBpcyBub3QgTm9uZToKKyAgICAgICAgY29udGV4dC52ZXJpZnlfbW9kZSA9IGNlcnRfcmVxcworICAgIGNvbnRleHQuY2hlY2tfaG9zdG5hbWUgPSBjaGVja19ob3N0bmFtZQorCisgICAgaWYga2V5ZmlsZSBhbmQgbm90IGNlcnRmaWxlOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJjZXJ0ZmlsZSBtdXN0IGJlIHNwZWNpZmllZCIpCisgICAgaWYgY2VydGZpbGUgb3Iga2V5ZmlsZToKKyAgICAgICAgY29udGV4dC5sb2FkX2NlcnRfY2hhaW4oY2VydGZpbGUsIGtleWZpbGUpCisKKyAgICAjIGxvYWQgQ0Egcm9vdCBjZXJ0cworICAgIGlmIGNhZmlsZSBvciBjYXBhdGggb3IgY2FkYXRhOgorICAgICAgICBjb250ZXh0LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhjYWZpbGUsIGNhcGF0aCwgY2FkYXRhKQorICAgIGVsaWYgY29udGV4dC52ZXJpZnlfbW9kZSAhPSBDRVJUX05PTkU6CisgICAgICAgICMgbm8gZXhwbGljaXQgY2FmaWxlLCBjYXBhdGggb3IgY2FkYXRhIGJ1dCB0aGUgdmVyaWZ5IG1vZGUgaXMKKyAgICAgICAgIyBDRVJUX09QVElPTkFMIG9yIENFUlRfUkVRVUlSRUQuIExldCdzIHRyeSB0byBsb2FkIGRlZmF1bHQgc3lzdGVtCisgICAgICAgICMgcm9vdCBDQSBjZXJ0aWZpY2F0ZXMgZm9yIHRoZSBnaXZlbiBwdXJwb3NlLiBUaGlzIG1heSBmYWlsIHNpbGVudGx5LgorICAgICAgICBjb250ZXh0LmxvYWRfZGVmYXVsdF9jZXJ0cyhwdXJwb3NlKQorCisgICAgcmV0dXJuIGNvbnRleHQKKworIyBVc2VkIGJ5IGh0dHAuY2xpZW50IGlmIG5vIGNvbnRleHQgaXMgZXhwbGljaXRseSBwYXNzZWQuCitfY3JlYXRlX2RlZmF1bHRfaHR0cHNfY29udGV4dCA9IGNyZWF0ZV9kZWZhdWx0X2NvbnRleHQKKworCisjIEJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGFsaWFzLCBldmVuIHRob3VnaCBpdCdzIG5vdCBhIHB1YmxpYyBuYW1lLgorX2NyZWF0ZV9zdGRsaWJfY29udGV4dCA9IF9jcmVhdGVfdW52ZXJpZmllZF9jb250ZXh0CisKIAogY2xhc3MgU1NMU29ja2V0KHNvY2tldCk6CiAgICAgIiIiVGhpcyBjbGFzcyBpbXBsZW1lbnRzIGEgc3VidHlwZSBvZiBzb2NrZXQuc29ja2V0IHRoYXQgd3JhcHMKQEAgLTI3Miw3ICs1MDMsNyBAQAogICAgICAgICAgICAgICAgICBfY29udGV4dD1Ob25lKToKIAogICAgICAgICBpZiBfY29udGV4dDoKLSAgICAgICAgICAgIHNlbGYuY29udGV4dCA9IF9jb250ZXh0CisgICAgICAgICAgICBzZWxmLl9jb250ZXh0ID0gX2NvbnRleHQKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGlmIHNlcnZlcl9zaWRlIGFuZCBub3QgY2VydGZpbGU6CiAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiY2VydGZpbGUgbXVzdCBiZSBzcGVjaWZpZWQgZm9yIHNlcnZlci1zaWRlICIKQEAgLTI4MSwxNiArNTEyLDE2IEBACiAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiY2VydGZpbGUgbXVzdCBiZSBzcGVjaWZpZWQiKQogICAgICAgICAgICAgaWYgY2VydGZpbGUgYW5kIG5vdCBrZXlmaWxlOgogICAgICAgICAgICAgICAgIGtleWZpbGUgPSBjZXJ0ZmlsZQotICAgICAgICAgICAgc2VsZi5jb250ZXh0ID0gU1NMQ29udGV4dChzc2xfdmVyc2lvbikKLSAgICAgICAgICAgIHNlbGYuY29udGV4dC52ZXJpZnlfbW9kZSA9IGNlcnRfcmVxcworICAgICAgICAgICAgc2VsZi5fY29udGV4dCA9IFNTTENvbnRleHQoc3NsX3ZlcnNpb24pCisgICAgICAgICAgICBzZWxmLl9jb250ZXh0LnZlcmlmeV9tb2RlID0gY2VydF9yZXFzCiAgICAgICAgICAgICBpZiBjYV9jZXJ0czoKLSAgICAgICAgICAgICAgICBzZWxmLmNvbnRleHQubG9hZF92ZXJpZnlfbG9jYXRpb25zKGNhX2NlcnRzKQorICAgICAgICAgICAgICAgIHNlbGYuX2NvbnRleHQubG9hZF92ZXJpZnlfbG9jYXRpb25zKGNhX2NlcnRzKQogICAgICAgICAgICAgaWYgY2VydGZpbGU6Ci0gICAgICAgICAgICAgICAgc2VsZi5jb250ZXh0LmxvYWRfY2VydF9jaGFpbihjZXJ0ZmlsZSwga2V5ZmlsZSkKKyAgICAgICAgICAgICAgICBzZWxmLl9jb250ZXh0LmxvYWRfY2VydF9jaGFpbihjZXJ0ZmlsZSwga2V5ZmlsZSkKICAgICAgICAgICAgIGlmIG5wbl9wcm90b2NvbHM6Ci0gICAgICAgICAgICAgICAgc2VsZi5jb250ZXh0LnNldF9ucG5fcHJvdG9jb2xzKG5wbl9wcm90b2NvbHMpCisgICAgICAgICAgICAgICAgc2VsZi5fY29udGV4dC5zZXRfbnBuX3Byb3RvY29scyhucG5fcHJvdG9jb2xzKQogICAgICAgICAgICAgaWYgY2lwaGVyczoKLSAgICAgICAgICAgICAgICBzZWxmLmNvbnRleHQuc2V0X2NpcGhlcnMoY2lwaGVycykKKyAgICAgICAgICAgICAgICBzZWxmLl9jb250ZXh0LnNldF9jaXBoZXJzKGNpcGhlcnMpCiAgICAgICAgICAgICBzZWxmLmtleWZpbGUgPSBrZXlmaWxlCiAgICAgICAgICAgICBzZWxmLmNlcnRmaWxlID0gY2VydGZpbGUKICAgICAgICAgICAgIHNlbGYuY2VydF9yZXFzID0gY2VydF9yZXFzCkBAIC0zMDQsMTEgKzUzNSwxMiBAQAogICAgICAgICBpZiBzZXJ2ZXJfc2lkZSBhbmQgc2VydmVyX2hvc3RuYW1lOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigic2VydmVyX2hvc3RuYW1lIGNhbiBvbmx5IGJlIHNwZWNpZmllZCAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbiBjbGllbnQgbW9kZSIpCisgICAgICAgIGlmIHNlbGYuX2NvbnRleHQuY2hlY2tfaG9zdG5hbWUgYW5kIG5vdCBzZXJ2ZXJfaG9zdG5hbWU6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJjaGVja19ob3N0bmFtZSByZXF1aXJlcyBzZXJ2ZXJfaG9zdG5hbWUiKQogICAgICAgICBzZWxmLnNlcnZlcl9zaWRlID0gc2VydmVyX3NpZGUKICAgICAgICAgc2VsZi5zZXJ2ZXJfaG9zdG5hbWUgPSBzZXJ2ZXJfaG9zdG5hbWUKICAgICAgICAgc2VsZi5kb19oYW5kc2hha2Vfb25fY29ubmVjdCA9IGRvX2hhbmRzaGFrZV9vbl9jb25uZWN0CiAgICAgICAgIHNlbGYuc3VwcHJlc3NfcmFnZ2VkX2VvZnMgPSBzdXBwcmVzc19yYWdnZWRfZW9mcwotICAgICAgICBjb25uZWN0ZWQgPSBGYWxzZQogICAgICAgICBpZiBzb2NrIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgc29ja2V0Ll9faW5pdF9fKHNlbGYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFtaWx5PXNvY2suZmFtaWx5LApAQCAtMzE2LDI3ICs1NDgsMjkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90bz1zb2NrLnByb3RvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVubz1zb2NrLmZpbGVubygpKQogICAgICAgICAgICAgc2VsZi5zZXR0aW1lb3V0KHNvY2suZ2V0dGltZW91dCgpKQotICAgICAgICAgICAgIyBzZWUgaWYgaXQncyBjb25uZWN0ZWQKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBzb2NrLmdldHBlZXJuYW1lKCkKLSAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXRfZXJyb3IgYXMgZToKLSAgICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVOT1RDT05OOgotICAgICAgICAgICAgICAgICAgICByYWlzZQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBjb25uZWN0ZWQgPSBUcnVlCiAgICAgICAgICAgICBzb2NrLmRldGFjaCgpCiAgICAgICAgIGVsaWYgZmlsZW5vIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgc29ja2V0Ll9faW5pdF9fKHNlbGYsIGZpbGVubz1maWxlbm8pCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzb2NrZXQuX19pbml0X18oc2VsZiwgZmFtaWx5PWZhbWlseSwgdHlwZT10eXBlLCBwcm90bz1wcm90bykKIAorICAgICAgICAjIFNlZSBpZiB3ZSBhcmUgY29ubmVjdGVkCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuZ2V0cGVlcm5hbWUoKQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FTk9UQ09OTjoKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgY29ubmVjdGVkID0gRmFsc2UKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNvbm5lY3RlZCA9IFRydWUKKwogICAgICAgICBzZWxmLl9jbG9zZWQgPSBGYWxzZQogICAgICAgICBzZWxmLl9zc2xvYmogPSBOb25lCiAgICAgICAgIHNlbGYuX2Nvbm5lY3RlZCA9IGNvbm5lY3RlZAogICAgICAgICBpZiBjb25uZWN0ZWQ6CiAgICAgICAgICAgICAjIGNyZWF0ZSB0aGUgU1NMIG9iamVjdAogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHNlbGYuX3NzbG9iaiA9IHNlbGYuY29udGV4dC5fd3JhcF9zb2NrZXQoc2VsZiwgc2VydmVyX3NpZGUsCisgICAgICAgICAgICAgICAgc2VsZi5fc3Nsb2JqID0gc2VsZi5fY29udGV4dC5fd3JhcF9zb2NrZXQoc2VsZiwgc2VydmVyX3NpZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfaG9zdG5hbWUpCiAgICAgICAgICAgICAgICAgaWYgZG9faGFuZHNoYWtlX29uX2Nvbm5lY3Q6CiAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQgPSBzZWxmLmdldHRpbWVvdXQoKQpAQCAtMzQ1LDkgKzU3OSwxOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiZG9faGFuZHNoYWtlX29uX2Nvbm5lY3Qgc2hvdWxkIG5vdCBiZSBzcGVjaWZpZWQgZm9yIG5vbi1ibG9ja2luZyBzb2NrZXRzIikKICAgICAgICAgICAgICAgICAgICAgc2VsZi5kb19oYW5kc2hha2UoKQogCi0gICAgICAgICAgICBleGNlcHQgc29ja2V0X2Vycm9yIGFzIHg6CisgICAgICAgICAgICBleGNlcHQgKE9TRXJyb3IsIFZhbHVlRXJyb3IpOgogICAgICAgICAgICAgICAgIHNlbGYuY2xvc2UoKQotICAgICAgICAgICAgICAgIHJhaXNlIHgKKyAgICAgICAgICAgICAgICByYWlzZQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGNvbnRleHQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9jb250ZXh0CisKKyAgICBAY29udGV4dC5zZXR0ZXIKKyAgICBkZWYgY29udGV4dChzZWxmLCBjdHgpOgorICAgICAgICBzZWxmLl9jb250ZXh0ID0gY3R4CisgICAgICAgIHNlbGYuX3NzbG9iai5jb250ZXh0ID0gY3R4CiAKICAgICBkZWYgZHVwKHNlbGYpOgogICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZCgiQ2FuJ3QgZHVwKCkgJXMgaW5zdGFuY2VzIiAlCkBAIC0zNTcsMTEgKzYwMCwyMSBAQAogICAgICAgICAjIHJhaXNlIGFuIGV4Y2VwdGlvbiBoZXJlIGlmIHlvdSB3aXNoIHRvIGNoZWNrIGZvciBzcHVyaW91cyBjbG9zZXMKICAgICAgICAgcGFzcwogCisgICAgZGVmIF9jaGVja19jb25uZWN0ZWQoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLl9jb25uZWN0ZWQ6CisgICAgICAgICAgICAjIGdldHBlZXJuYW1lKCkgd2lsbCByYWlzZSBFTk9UQ09OTiBpZiB0aGUgc29ja2V0IGlzIHJlYWxseQorICAgICAgICAgICAgIyBub3QgY29ubmVjdGVkOyBub3RlIHRoYXQgd2UgY2FuIGJlIGNvbm5lY3RlZCBldmVuIHdpdGhvdXQKKyAgICAgICAgICAgICMgX2Nvbm5lY3RlZCBiZWluZyBzZXQsIGUuZy4gaWYgY29ubmVjdCgpIGZpcnN0IHJldHVybmVkCisgICAgICAgICAgICAjIEVBR0FJTi4KKyAgICAgICAgICAgIHNlbGYuZ2V0cGVlcm5hbWUoKQorCiAgICAgZGVmIHJlYWQoc2VsZiwgbGVuPTAsIGJ1ZmZlcj1Ob25lKToKICAgICAgICAgIiIiUmVhZCB1cCB0byBMRU4gYnl0ZXMgYW5kIHJldHVybiB0aGVtLgogICAgICAgICBSZXR1cm4gemVyby1sZW5ndGggc3RyaW5nIG9uIEVPRi4iIiIKIAogICAgICAgICBzZWxmLl9jaGVja0Nsb3NlZCgpCisgICAgICAgIGlmIG5vdCBzZWxmLl9zc2xvYmo6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJSZWFkIG9uIGNsb3NlZCBvciB1bndyYXBwZWQgU1NMIHNvY2tldC4iKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBpZiBidWZmZXIgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAgdiA9IHNlbGYuX3NzbG9iai5yZWFkKGxlbiwgYnVmZmVyKQpAQCAtMzgyLDYgKzYzNSw4IEBACiAgICAgICAgIG51bWJlciBvZiBieXRlcyBvZiBEQVRBIGFjdHVhbGx5IHRyYW5zbWl0dGVkLiIiIgogCiAgICAgICAgIHNlbGYuX2NoZWNrQ2xvc2VkKCkKKyAgICAgICAgaWYgbm90IHNlbGYuX3NzbG9iajoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIldyaXRlIG9uIGNsb3NlZCBvciB1bndyYXBwZWQgU1NMIHNvY2tldC4iKQogICAgICAgICByZXR1cm4gc2VsZi5fc3Nsb2JqLndyaXRlKGRhdGEpCiAKICAgICBkZWYgZ2V0cGVlcmNlcnQoc2VsZiwgYmluYXJ5X2Zvcm09RmFsc2UpOgpAQCAtMzkxLDYgKzY0Niw3IEBACiAgICAgICAgIGNlcnRpZmljYXRlIHdhcyBwcm92aWRlZCwgYnV0IG5vdCB2YWxpZGF0ZWQuIiIiCiAKICAgICAgICAgc2VsZi5fY2hlY2tDbG9zZWQoKQorICAgICAgICBzZWxmLl9jaGVja19jb25uZWN0ZWQoKQogICAgICAgICByZXR1cm4gc2VsZi5fc3Nsb2JqLnBlZXJfY2VydGlmaWNhdGUoYmluYXJ5X2Zvcm0pCiAKICAgICBkZWYgc2VsZWN0ZWRfbnBuX3Byb3RvY29sKHNlbGYpOgpAQCAtNDIxLDE4ICs2NzcsMTcgQEAKICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAogICAgICAgICAgICAgICAgICAgICAibm9uLXplcm8gZmxhZ3Mgbm90IGFsbG93ZWQgaW4gY2FsbHMgdG8gc2VuZCgpIG9uICVzIiAlCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuX19jbGFzc19fKQotICAgICAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIHYgPSBzZWxmLl9zc2xvYmoud3JpdGUoZGF0YSkKLSAgICAgICAgICAgICAgICBleGNlcHQgU1NMRXJyb3IgYXMgeDoKLSAgICAgICAgICAgICAgICAgICAgaWYgeC5hcmdzWzBdID09IFNTTF9FUlJPUl9XQU5UX1JFQUQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMAotICAgICAgICAgICAgICAgICAgICBlbGlmIHguYXJnc1swXSA9PSBTU0xfRVJST1JfV0FOVF9XUklURToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwCi0gICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHYgPSBzZWxmLl9zc2xvYmoud3JpdGUoZGF0YSkKKyAgICAgICAgICAgIGV4Y2VwdCBTU0xFcnJvciBhcyB4OgorICAgICAgICAgICAgICAgIGlmIHguYXJnc1swXSA9PSBTU0xfRVJST1JfV0FOVF9SRUFEOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICAgICAgICAgIGVsaWYgeC5hcmdzWzBdID09IFNTTF9FUlJPUl9XQU5UX1dSSVRFOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMAogICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB2CisgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiB2CiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICByZXR1cm4gc29ja2V0LnNlbmQoc2VsZiwgZGF0YSwgZmxhZ3MpCiAKQEAgLTU0MCwxMiArNzk1LDExIEBACiAKICAgICBkZWYgX3JlYWxfY2xvc2Uoc2VsZik6CiAgICAgICAgIHNlbGYuX3NzbG9iaiA9IE5vbmUKLSAgICAgICAgIyBzZWxmLl9jbG9zZWQgPSBUcnVlCiAgICAgICAgIHNvY2tldC5fcmVhbF9jbG9zZShzZWxmKQogCiAgICAgZGVmIGRvX2hhbmRzaGFrZShzZWxmLCBibG9jaz1GYWxzZSk6CiAgICAgICAgICIiIlBlcmZvcm0gYSBUTFMvU1NMIGhhbmRzaGFrZS4iIiIKLQorICAgICAgICBzZWxmLl9jaGVja19jb25uZWN0ZWQoKQogICAgICAgICB0aW1lb3V0ID0gc2VsZi5nZXR0aW1lb3V0KCkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgaWYgdGltZW91dCA9PSAwLjAgYW5kIGJsb2NrOgpAQCAtNTU0LDYgKzgwOCwxMiBAQAogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgc2VsZi5zZXR0aW1lb3V0KHRpbWVvdXQpCiAKKyAgICAgICAgaWYgc2VsZi5jb250ZXh0LmNoZWNrX2hvc3RuYW1lOgorICAgICAgICAgICAgaWYgbm90IHNlbGYuc2VydmVyX2hvc3RuYW1lOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImNoZWNrX2hvc3RuYW1lIG5lZWRzIHNlcnZlcl9ob3N0bmFtZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXJndW1lbnQiKQorICAgICAgICAgICAgbWF0Y2hfaG9zdG5hbWUoc2VsZi5nZXRwZWVyY2VydCgpLCBzZWxmLnNlcnZlcl9ob3N0bmFtZSkKKwogICAgIGRlZiBfcmVhbF9jb25uZWN0KHNlbGYsIGFkZHIsIGNvbm5lY3RfZXgpOgogICAgICAgICBpZiBzZWxmLnNlcnZlcl9zaWRlOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiY2FuJ3QgY29ubmVjdCBpbiBzZXJ2ZXItc2lkZSBtb2RlIikKQEAgLTU2OSwxMSArODI5LDExIEBACiAgICAgICAgICAgICAgICAgcmMgPSBOb25lCiAgICAgICAgICAgICAgICAgc29ja2V0LmNvbm5lY3Qoc2VsZiwgYWRkcikKICAgICAgICAgICAgIGlmIG5vdCByYzoKKyAgICAgICAgICAgICAgICBzZWxmLl9jb25uZWN0ZWQgPSBUcnVlCiAgICAgICAgICAgICAgICAgaWYgc2VsZi5kb19oYW5kc2hha2Vfb25fY29ubmVjdDoKICAgICAgICAgICAgICAgICAgICAgc2VsZi5kb19oYW5kc2hha2UoKQotICAgICAgICAgICAgICAgIHNlbGYuX2Nvbm5lY3RlZCA9IFRydWUKICAgICAgICAgICAgIHJldHVybiByYwotICAgICAgICBleGNlcHQgc29ja2V0X2Vycm9yOgorICAgICAgICBleGNlcHQgKE9TRXJyb3IsIFZhbHVlRXJyb3IpOgogICAgICAgICAgICAgc2VsZi5fc3Nsb2JqID0gTm9uZQogICAgICAgICAgICAgcmFpc2UKIApAQCAtNjY0LDIyICs5MjQsMjMgQEAKICAgICBkID0gcGVtX2NlcnRfc3RyaW5nLnN0cmlwKClbbGVuKFBFTV9IRUFERVIpOi1sZW4oUEVNX0ZPT1RFUildCiAgICAgcmV0dXJuIGJhc2U2NC5kZWNvZGVieXRlcyhkLmVuY29kZSgnQVNDSUknLCAnc3RyaWN0JykpCiAKLWRlZiBnZXRfc2VydmVyX2NlcnRpZmljYXRlKGFkZHIsIHNzbF92ZXJzaW9uPVBST1RPQ09MX1NTTHYzLCBjYV9jZXJ0cz1Ob25lKToKK2RlZiBnZXRfc2VydmVyX2NlcnRpZmljYXRlKGFkZHIsIHNzbF92ZXJzaW9uPVBST1RPQ09MX1NTTHYyMywgY2FfY2VydHM9Tm9uZSk6CiAgICAgIiIiUmV0cmlldmUgdGhlIGNlcnRpZmljYXRlIGZyb20gdGhlIHNlcnZlciBhdCB0aGUgc3BlY2lmaWVkIGFkZHJlc3MsCiAgICAgYW5kIHJldHVybiBpdCBhcyBhIFBFTS1lbmNvZGVkIHN0cmluZy4KICAgICBJZiAnY2FfY2VydHMnIGlzIHNwZWNpZmllZCwgdmFsaWRhdGUgdGhlIHNlcnZlciBjZXJ0IGFnYWluc3QgaXQuCiAgICAgSWYgJ3NzbF92ZXJzaW9uJyBpcyBzcGVjaWZpZWQsIHVzZSBpdCBpbiB0aGUgY29ubmVjdGlvbiBhdHRlbXB0LiIiIgogCiAgICAgaG9zdCwgcG9ydCA9IGFkZHIKLSAgICBpZiAoY2FfY2VydHMgaXMgbm90IE5vbmUpOgorICAgIGlmIGNhX2NlcnRzIGlzIG5vdCBOb25lOgogICAgICAgICBjZXJ0X3JlcXMgPSBDRVJUX1JFUVVJUkVECiAgICAgZWxzZToKICAgICAgICAgY2VydF9yZXFzID0gQ0VSVF9OT05FCi0gICAgcyA9IGNyZWF0ZV9jb25uZWN0aW9uKGFkZHIpCi0gICAgcyA9IHdyYXBfc29ja2V0KHMsIHNzbF92ZXJzaW9uPXNzbF92ZXJzaW9uLAotICAgICAgICAgICAgICAgICAgICBjZXJ0X3JlcXM9Y2VydF9yZXFzLCBjYV9jZXJ0cz1jYV9jZXJ0cykKLSAgICBkZXJjZXJ0ID0gcy5nZXRwZWVyY2VydChUcnVlKQotICAgIHMuY2xvc2UoKQorICAgIGNvbnRleHQgPSBfY3JlYXRlX3N0ZGxpYl9jb250ZXh0KHNzbF92ZXJzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRfcmVxcz1jZXJ0X3JlcXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FmaWxlPWNhX2NlcnRzKQorICAgIHdpdGggIGNyZWF0ZV9jb25uZWN0aW9uKGFkZHIpIGFzIHNvY2s6CisgICAgICAgIHdpdGggY29udGV4dC53cmFwX3NvY2tldChzb2NrKSBhcyBzc2xzb2NrOgorICAgICAgICAgICAgZGVyY2VydCA9IHNzbHNvY2suZ2V0cGVlcmNlcnQoVHJ1ZSkKICAgICByZXR1cm4gREVSX2NlcnRfdG9fUEVNX2NlcnQoZGVyY2VydCkKIAogZGVmIGdldF9wcm90b2NvbF9uYW1lKHByb3RvY29sX2NvZGUpOgpkaWZmIC0tZ2l0IGEvTGliL3N0YXQucHkgYi9MaWIvc3RhdC5weQppbmRleCA3MDRhZGZlLi4zZWVjYzNlIDEwMDY0NAotLS0gYS9MaWIvc3RhdC5weQorKysgYi9MaWIvc3RhdC5weQpAQCAtMTQ3LDMgKzE0Nyw5IEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBwZXJtLmFwcGVuZCgiLSIpCiAgICAgcmV0dXJuICIiLmpvaW4ocGVybSkKKworIyBJZiBhdmFpbGFibGUsIHVzZSBDIGltcGxlbWVudGF0aW9uCit0cnk6CisgICAgZnJvbSBfc3RhdCBpbXBvcnQgKgorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHBhc3MKZGlmZiAtLWdpdCBhL0xpYi9zdGF0aXN0aWNzLnB5IGIvTGliL3N0YXRpc3RpY3MucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTE4ZjU0NgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9zdGF0aXN0aWNzLnB5CkBAIC0wLDAgKzEsNjM4IEBACisjIyAgTW9kdWxlIHN0YXRpc3RpY3MucHkKKyMjCisjIyAgQ29weXJpZ2h0IChjKSAyMDEzIFN0ZXZlbiBEJ0FwcmFubyA8c3RldmUrcHl0aG9uQHBlYXJ3b29kLmluZm8+LgorIyMKKyMjICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMjICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIyAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjIworIyMgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIyMKKyMjICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMjICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMjICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKworIiIiCitCYXNpYyBzdGF0aXN0aWNzIG1vZHVsZS4KKworVGhpcyBtb2R1bGUgcHJvdmlkZXMgZnVuY3Rpb25zIGZvciBjYWxjdWxhdGluZyBzdGF0aXN0aWNzIG9mIGRhdGEsIGluY2x1ZGluZworYXZlcmFnZXMsIHZhcmlhbmNlLCBhbmQgc3RhbmRhcmQgZGV2aWF0aW9uLgorCitDYWxjdWxhdGluZyBhdmVyYWdlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworPT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0Z1bmN0aW9uICAgICAgICAgICAgRGVzY3JpcHRpb24KKz09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CittZWFuICAgICAgICAgICAgICAgIEFyaXRobWV0aWMgbWVhbiAoYXZlcmFnZSkgb2YgZGF0YS4KK21lZGlhbiAgICAgICAgICAgICAgTWVkaWFuIChtaWRkbGUgdmFsdWUpIG9mIGRhdGEuCittZWRpYW5fbG93ICAgICAgICAgIExvdyBtZWRpYW4gb2YgZGF0YS4KK21lZGlhbl9oaWdoICAgICAgICAgSGlnaCBtZWRpYW4gb2YgZGF0YS4KK21lZGlhbl9ncm91cGVkICAgICAgTWVkaWFuLCBvciA1MHRoIHBlcmNlbnRpbGUsIG9mIGdyb3VwZWQgZGF0YS4KK21vZGUgICAgICAgICAgICAgICAgTW9kZSAobW9zdCBjb21tb24gdmFsdWUpIG9mIGRhdGEuCis9PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitDYWxjdWxhdGUgdGhlIGFyaXRobWV0aWMgbWVhbiAoInRoZSBhdmVyYWdlIikgb2YgZGF0YToKKworPj4+IG1lYW4oWy0xLjAsIDIuNSwgMy4yNSwgNS43NV0pCisyLjYyNQorCisKK0NhbGN1bGF0ZSB0aGUgc3RhbmRhcmQgbWVkaWFuIG9mIGRpc2NyZXRlIGRhdGE6CisKKz4+PiBtZWRpYW4oWzIsIDMsIDQsIDVdKQorMy41CisKKworQ2FsY3VsYXRlIHRoZSBtZWRpYW4sIG9yIDUwdGggcGVyY2VudGlsZSwgb2YgZGF0YSBncm91cGVkIGludG8gY2xhc3MgaW50ZXJ2YWxzCitjZW50cmVkIG9uIHRoZSBkYXRhIHZhbHVlcyBwcm92aWRlZC4gRS5nLiBpZiB5b3VyIGRhdGEgcG9pbnRzIGFyZSByb3VuZGVkIHRvCit0aGUgbmVhcmVzdCB3aG9sZSBudW1iZXI6CisKKz4+PiBtZWRpYW5fZ3JvdXBlZChbMiwgMiwgMywgMywgMywgNF0pICAjZG9jdGVzdDogK0VMTElQU0lTCisyLjgzMzMzMzMzMzMuLi4KKworVGhpcyBzaG91bGQgYmUgaW50ZXJwcmV0ZWQgaW4gdGhpcyB3YXk6IHlvdSBoYXZlIHR3byBkYXRhIHBvaW50cyBpbiB0aGUgY2xhc3MKK2ludGVydmFsIDEuNS0yLjUsIHRocmVlIGRhdGEgcG9pbnRzIGluIHRoZSBjbGFzcyBpbnRlcnZhbCAyLjUtMy41LCBhbmQgb25lIGluCit0aGUgY2xhc3MgaW50ZXJ2YWwgMy41LTQuNS4gVGhlIG1lZGlhbiBvZiB0aGVzZSBkYXRhIHBvaW50cyBpcyAyLjgzMzMuLi4KKworCitDYWxjdWxhdGluZyB2YXJpYWJpbGl0eSBvciBzcHJlYWQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCis9PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorRnVuY3Rpb24gICAgICAgICAgICBEZXNjcmlwdGlvbgorPT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3B2YXJpYW5jZSAgICAgICAgICAgUG9wdWxhdGlvbiB2YXJpYW5jZSBvZiBkYXRhLgordmFyaWFuY2UgICAgICAgICAgICBTYW1wbGUgdmFyaWFuY2Ugb2YgZGF0YS4KK3BzdGRldiAgICAgICAgICAgICAgUG9wdWxhdGlvbiBzdGFuZGFyZCBkZXZpYXRpb24gb2YgZGF0YS4KK3N0ZGV2ICAgICAgICAgICAgICAgU2FtcGxlIHN0YW5kYXJkIGRldmlhdGlvbiBvZiBkYXRhLgorPT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworQ2FsY3VsYXRlIHRoZSBzdGFuZGFyZCBkZXZpYXRpb24gb2Ygc2FtcGxlIGRhdGE6CisKKz4+PiBzdGRldihbMi41LCAzLjI1LCA1LjUsIDExLjI1LCAxMS43NV0pICAjZG9jdGVzdDogK0VMTElQU0lTCis0LjM4OTYxODQzNDQ0Li4uCisKK0lmIHlvdSBoYXZlIHByZXZpb3VzbHkgY2FsY3VsYXRlZCB0aGUgbWVhbiwgeW91IGNhbiBwYXNzIGl0IGFzIHRoZSBvcHRpb25hbAorc2Vjb25kIGFyZ3VtZW50IHRvIHRoZSBmb3VyICJzcHJlYWQiIGZ1bmN0aW9ucyB0byBhdm9pZCByZWNhbGN1bGF0aW5nIGl0OgorCis+Pj4gZGF0YSA9IFsxLCAyLCAyLCA0LCA0LCA0LCA1LCA2XQorPj4+IG11ID0gbWVhbihkYXRhKQorPj4+IHB2YXJpYW5jZShkYXRhLCBtdSkKKzIuNQorCisKK0V4Y2VwdGlvbnMKKy0tLS0tLS0tLS0KKworQSBzaW5nbGUgZXhjZXB0aW9uIGlzIGRlZmluZWQ6IFN0YXRpc3RpY3NFcnJvciBpcyBhIHN1YmNsYXNzIG9mIFZhbHVlRXJyb3IuCisKKyIiIgorCitfX2FsbF9fID0gWyAnU3RhdGlzdGljc0Vycm9yJywKKyAgICAgICAgICAgICdwc3RkZXYnLCAncHZhcmlhbmNlJywgJ3N0ZGV2JywgJ3ZhcmlhbmNlJywKKyAgICAgICAgICAgICdtZWRpYW4nLCAgJ21lZGlhbl9sb3cnLCAnbWVkaWFuX2hpZ2gnLCAnbWVkaWFuX2dyb3VwZWQnLAorICAgICAgICAgICAgJ21lYW4nLCAnbW9kZScsCisgICAgICAgICAgXQorCisKK2ltcG9ydCBjb2xsZWN0aW9ucworaW1wb3J0IG1hdGgKKworZnJvbSBmcmFjdGlvbnMgaW1wb3J0IEZyYWN0aW9uCitmcm9tIGRlY2ltYWwgaW1wb3J0IERlY2ltYWwKK2Zyb20gaXRlcnRvb2xzIGltcG9ydCBncm91cGJ5CisKKworCisjID09PSBFeGNlcHRpb25zID09PQorCitjbGFzcyBTdGF0aXN0aWNzRXJyb3IoVmFsdWVFcnJvcik6CisgICAgcGFzcworCisKKyMgPT09IFByaXZhdGUgdXRpbGl0aWVzID09PQorCitkZWYgX3N1bShkYXRhLCBzdGFydD0wKToKKyAgICAiIiJfc3VtKGRhdGEgWywgc3RhcnRdKSAtPiAodHlwZSwgc3VtLCBjb3VudCkKKworICAgIFJldHVybiBhIGhpZ2gtcHJlY2lzaW9uIHN1bSBvZiB0aGUgZ2l2ZW4gbnVtZXJpYyBkYXRhIGFzIGEgZnJhY3Rpb24sCisgICAgdG9nZXRoZXIgd2l0aCB0aGUgdHlwZSB0byBiZSBjb252ZXJ0ZWQgdG8gYW5kIHRoZSBjb3VudCBvZiBpdGVtcy4KKworICAgIElmIG9wdGlvbmFsIGFyZ3VtZW50IGBgc3RhcnRgYCBpcyBnaXZlbiwgaXQgaXMgYWRkZWQgdG8gdGhlIHRvdGFsLgorICAgIElmIGBgZGF0YWBgIGlzIGVtcHR5LCBgYHN0YXJ0YGAgKGRlZmF1bHRpbmcgdG8gMCkgaXMgcmV0dXJuZWQuCisKKworICAgIEV4YW1wbGVzCisgICAgLS0tLS0tLS0KKworICAgID4+PiBfc3VtKFszLCAyLjI1LCA0LjUsIC0wLjUsIDEuMF0sIDAuNzUpCisgICAgKDxjbGFzcyAnZmxvYXQnPiwgRnJhY3Rpb24oMTEsIDEpLCA1KQorCisgICAgU29tZSBzb3VyY2VzIG9mIHJvdW5kLW9mZiBlcnJvciB3aWxsIGJlIGF2b2lkZWQ6CisKKyAgICA+Pj4gX3N1bShbMWU1MCwgMSwgLTFlNTBdICogMTAwMCkgICMgQnVpbHQtaW4gc3VtIHJldHVybnMgemVyby4KKyAgICAoPGNsYXNzICdmbG9hdCc+LCBGcmFjdGlvbigxMDAwLCAxKSwgMzAwMCkKKworICAgIEZyYWN0aW9ucyBhbmQgRGVjaW1hbHMgYXJlIGFsc28gc3VwcG9ydGVkOgorCisgICAgPj4+IGZyb20gZnJhY3Rpb25zIGltcG9ydCBGcmFjdGlvbiBhcyBGCisgICAgPj4+IF9zdW0oW0YoMiwgMyksIEYoNywgNSksIEYoMSwgNCksIEYoNSwgNildKQorICAgICg8Y2xhc3MgJ2ZyYWN0aW9ucy5GcmFjdGlvbic+LCBGcmFjdGlvbig2MywgMjApLCA0KQorCisgICAgPj4+IGZyb20gZGVjaW1hbCBpbXBvcnQgRGVjaW1hbCBhcyBECisgICAgPj4+IGRhdGEgPSBbRCgiMC4xMzc1IiksIEQoIjAuMjEwOCIpLCBEKCIwLjMwNjEiKSwgRCgiMC4wNDE5IildCisgICAgPj4+IF9zdW0oZGF0YSkKKyAgICAoPGNsYXNzICdkZWNpbWFsLkRlY2ltYWwnPiwgRnJhY3Rpb24oNjk2MywgMTAwMDApLCA0KQorCisgICAgTWl4ZWQgdHlwZXMgYXJlIGN1cnJlbnRseSB0cmVhdGVkIGFzIGFuIGVycm9yLCBleGNlcHQgdGhhdCBpbnQgaXMKKyAgICBhbGxvd2VkLgorICAgICIiIgorICAgIGNvdW50ID0gMAorICAgIG4sIGQgPSBfZXhhY3RfcmF0aW8oc3RhcnQpCisgICAgcGFydGlhbHMgPSB7ZDogbn0KKyAgICBwYXJ0aWFsc19nZXQgPSBwYXJ0aWFscy5nZXQKKyAgICBUID0gX2NvZXJjZShpbnQsIHR5cGUoc3RhcnQpKQorICAgIGZvciB0eXAsIHZhbHVlcyBpbiBncm91cGJ5KGRhdGEsIHR5cGUpOgorICAgICAgICBUID0gX2NvZXJjZShULCB0eXApICAjIG9yIHJhaXNlIFR5cGVFcnJvcgorICAgICAgICBmb3IgbixkIGluIG1hcChfZXhhY3RfcmF0aW8sIHZhbHVlcyk6CisgICAgICAgICAgICBjb3VudCArPSAxCisgICAgICAgICAgICBwYXJ0aWFsc1tkXSA9IHBhcnRpYWxzX2dldChkLCAwKSArIG4KKyAgICBpZiBOb25lIGluIHBhcnRpYWxzOgorICAgICAgICAjIFRoZSBzdW0gd2lsbCBiZSBhIE5BTiBvciBJTkYuIFdlIGNhbiBpZ25vcmUgYWxsIHRoZSBmaW5pdGUKKyAgICAgICAgIyBwYXJ0aWFscywgYW5kIGp1c3QgbG9vayBhdCB0aGlzIHNwZWNpYWwgb25lLgorICAgICAgICB0b3RhbCA9IHBhcnRpYWxzW05vbmVdCisgICAgICAgIGFzc2VydCBub3QgX2lzZmluaXRlKHRvdGFsKQorICAgIGVsc2U6CisgICAgICAgICMgU3VtIGFsbCB0aGUgcGFydGlhbCBzdW1zIHVzaW5nIGJ1aWx0aW4gc3VtLgorICAgICAgICAjIEZJWE1FIGlzIHRoaXMgZmFzdGVyIGlmIHdlIHN1bSB0aGVtIGluIG9yZGVyIG9mIHRoZSBkZW5vbWluYXRvcj8KKyAgICAgICAgdG90YWwgPSBzdW0oRnJhY3Rpb24obiwgZCkgZm9yIGQsIG4gaW4gc29ydGVkKHBhcnRpYWxzLml0ZW1zKCkpKQorICAgIHJldHVybiAoVCwgdG90YWwsIGNvdW50KQorCisKK2RlZiBfaXNmaW5pdGUoeCk6CisgICAgdHJ5OgorICAgICAgICByZXR1cm4geC5pc19maW5pdGUoKSAgIyBMaWtlbHkgYSBEZWNpbWFsLgorICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgcmV0dXJuIG1hdGguaXNmaW5pdGUoeCkgICMgQ29lcmNlcyB0byBmbG9hdCBmaXJzdC4KKworCitkZWYgX2NvZXJjZShULCBTKToKKyAgICAiIiJDb2VyY2UgdHlwZXMgVCBhbmQgUyB0byBhIGNvbW1vbiB0eXBlLCBvciByYWlzZSBUeXBlRXJyb3IuCisKKyAgICBDb2VyY2lvbiBydWxlcyBhcmUgY3VycmVudGx5IGFuIGltcGxlbWVudGF0aW9uIGRldGFpbC4gU2VlIHRoZSBDb2VyY2VUZXN0CisgICAgdGVzdCBjbGFzcyBpbiB0ZXN0X3N0YXRpc3RpY3MgZm9yIGRldGFpbHMuCisgICAgIiIiCisgICAgIyBTZWUgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTI0MDY4LgorICAgIGFzc2VydCBUIGlzIG5vdCBib29sLCAiaW5pdGlhbCB0eXBlIFQgaXMgYm9vbCIKKyAgICAjIElmIHRoZSB0eXBlcyBhcmUgdGhlIHNhbWUsIG5vIG5lZWQgdG8gY29lcmNlIGFueXRoaW5nLiBQdXQgdGhpcworICAgICMgZmlyc3QsIHNvIHRoYXQgdGhlIHVzdWFsIGNhc2UgKG5vIGNvZXJjaW9uIG5lZWRlZCkgaGFwcGVucyBhcyBzb29uCisgICAgIyBhcyBwb3NzaWJsZS4KKyAgICBpZiBUIGlzIFM6ICByZXR1cm4gVAorICAgICMgTWl4ZWQgaW50ICYgb3RoZXIgY29lcmNlIHRvIHRoZSBvdGhlciB0eXBlLgorICAgIGlmIFMgaXMgaW50IG9yIFMgaXMgYm9vbDogIHJldHVybiBUCisgICAgaWYgVCBpcyBpbnQ6ICByZXR1cm4gUworICAgICMgSWYgb25lIGlzIGEgKHN0cmljdCkgc3ViY2xhc3Mgb2YgdGhlIG90aGVyLCBjb2VyY2UgdG8gdGhlIHN1YmNsYXNzLgorICAgIGlmIGlzc3ViY2xhc3MoUywgVCk6ICByZXR1cm4gUworICAgIGlmIGlzc3ViY2xhc3MoVCwgUyk6ICByZXR1cm4gVAorICAgICMgSW50cyBjb2VyY2UgdG8gdGhlIG90aGVyIHR5cGUuCisgICAgaWYgaXNzdWJjbGFzcyhULCBpbnQpOiAgcmV0dXJuIFMKKyAgICBpZiBpc3N1YmNsYXNzKFMsIGludCk6ICByZXR1cm4gVAorICAgICMgTWl4ZWQgZnJhY3Rpb24gJiBmbG9hdCBjb2VyY2VzIHRvIGZsb2F0IChvciBmbG9hdCBzdWJjbGFzcykuCisgICAgaWYgaXNzdWJjbGFzcyhULCBGcmFjdGlvbikgYW5kIGlzc3ViY2xhc3MoUywgZmxvYXQpOgorICAgICAgICByZXR1cm4gUworICAgIGlmIGlzc3ViY2xhc3MoVCwgZmxvYXQpIGFuZCBpc3N1YmNsYXNzKFMsIEZyYWN0aW9uKToKKyAgICAgICAgcmV0dXJuIFQKKyAgICAjIEFueSBvdGhlciBjb21iaW5hdGlvbiBpcyBkaXNhbGxvd2VkLgorICAgIG1zZyA9ICJkb24ndCBrbm93IGhvdyB0byBjb2VyY2UgJXMgYW5kICVzIgorICAgIHJhaXNlIFR5cGVFcnJvcihtc2cgJSAoVC5fX25hbWVfXywgUy5fX25hbWVfXykpCisKKworZGVmIF9leGFjdF9yYXRpbyh4KToKKyAgICAiIiJSZXR1cm4gUmVhbCBudW1iZXIgeCB0byBleGFjdCAobnVtZXJhdG9yLCBkZW5vbWluYXRvcikgcGFpci4KKworICAgID4+PiBfZXhhY3RfcmF0aW8oMC4yNSkKKyAgICAoMSwgNCkKKworICAgIHggaXMgZXhwZWN0ZWQgdG8gYmUgYW4gaW50LCBGcmFjdGlvbiwgRGVjaW1hbCBvciBmbG9hdC4KKyAgICAiIiIKKyAgICB0cnk6CisgICAgICAgICMgT3B0aW1pc2UgdGhlIGNvbW1vbiBjYXNlIG9mIGZsb2F0cy4gV2UgZXhwZWN0IHRoYXQgdGhlIG1vc3Qgb2Z0ZW4KKyAgICAgICAgIyB1c2VkIG51bWVyaWMgdHlwZSB3aWxsIGJlIGJ1aWx0aW4gZmxvYXRzLCBzbyB0cnkgdG8gbWFrZSB0aGlzIGFzCisgICAgICAgICMgZmFzdCBhcyBwb3NzaWJsZS4KKyAgICAgICAgaWYgdHlwZSh4KSBpcyBmbG9hdDoKKyAgICAgICAgICAgIHJldHVybiB4LmFzX2ludGVnZXJfcmF0aW8oKQorICAgICAgICB0cnk6CisgICAgICAgICAgICAjIHggbWF5IGJlIGFuIGludCwgRnJhY3Rpb24sIG9yIEludGVncmFsIEFCQy4KKyAgICAgICAgICAgIHJldHVybiAoeC5udW1lcmF0b3IsIHguZGVub21pbmF0b3IpCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAjIHggbWF5IGJlIGEgZmxvYXQgc3ViY2xhc3MuCisgICAgICAgICAgICAgICAgcmV0dXJuIHguYXNfaW50ZWdlcl9yYXRpbygpCisgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAjIHggbWF5IGJlIGEgRGVjaW1hbC4KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9kZWNpbWFsX3RvX3JhdGlvKHgpCisgICAgICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgICAgICAjIEp1c3QgZ2l2ZSB1cD8KKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgIGV4Y2VwdCAoT3ZlcmZsb3dFcnJvciwgVmFsdWVFcnJvcik6CisgICAgICAgICMgZmxvYXQgTkFOIG9yIElORi4KKyAgICAgICAgYXNzZXJ0IG5vdCBtYXRoLmlzZmluaXRlKHgpCisgICAgICAgIHJldHVybiAoeCwgTm9uZSkKKyAgICBtc2cgPSAiY2FuJ3QgY29udmVydCB0eXBlICd7fScgdG8gbnVtZXJhdG9yL2Rlbm9taW5hdG9yIgorICAgIHJhaXNlIFR5cGVFcnJvcihtc2cuZm9ybWF0KHR5cGUoeCkuX19uYW1lX18pKQorCisKKyMgRklYTUUgVGhpcyBpcyBmYXN0ZXIgdGhhbiBGcmFjdGlvbi5mcm9tX2RlY2ltYWwsIGJ1dCBzdGlsbCB0b28gc2xvdy4KK2RlZiBfZGVjaW1hbF90b19yYXRpbyhkKToKKyAgICAiIiJDb252ZXJ0IERlY2ltYWwgZCB0byBleGFjdCBpbnRlZ2VyIHJhdGlvIChudW1lcmF0b3IsIGRlbm9taW5hdG9yKS4KKworICAgID4+PiBmcm9tIGRlY2ltYWwgaW1wb3J0IERlY2ltYWwKKyAgICA+Pj4gX2RlY2ltYWxfdG9fcmF0aW8oRGVjaW1hbCgiMi42IikpCisgICAgKDI2LCAxMCkKKworICAgICIiIgorICAgIHNpZ24sIGRpZ2l0cywgZXhwID0gZC5hc190dXBsZSgpCisgICAgaWYgZXhwIGluICgnRicsICduJywgJ04nKTogICMgSU5GLCBOQU4sIHNOQU4KKyAgICAgICAgYXNzZXJ0IG5vdCBkLmlzX2Zpbml0ZSgpCisgICAgICAgIHJldHVybiAoZCwgTm9uZSkKKyAgICBudW0gPSAwCisgICAgZm9yIGRpZ2l0IGluIGRpZ2l0czoKKyAgICAgICAgbnVtID0gbnVtKjEwICsgZGlnaXQKKyAgICBpZiBleHAgPCAwOgorICAgICAgICBkZW4gPSAxMCoqLWV4cAorICAgIGVsc2U6CisgICAgICAgIG51bSAqPSAxMCoqZXhwCisgICAgICAgIGRlbiA9IDEKKyAgICBpZiBzaWduOgorICAgICAgICBudW0gPSAtbnVtCisgICAgcmV0dXJuIChudW0sIGRlbikKKworCitkZWYgX2NvbnZlcnQodmFsdWUsIFQpOgorICAgICIiIkNvbnZlcnQgdmFsdWUgdG8gZ2l2ZW4gbnVtZXJpYyB0eXBlIFQuIiIiCisgICAgaWYgdHlwZSh2YWx1ZSkgaXMgVDoKKyAgICAgICAgIyBUaGlzIGNvdmVycyB0aGUgY2FzZXMgd2hlcmUgVCBpcyBGcmFjdGlvbiwgb3Igd2hlcmUgdmFsdWUgaXMKKyAgICAgICAgIyBhIE5BTiBvciBJTkYgKERlY2ltYWwgb3IgZmxvYXQpLgorICAgICAgICByZXR1cm4gdmFsdWUKKyAgICBpZiBpc3N1YmNsYXNzKFQsIGludCkgYW5kIHZhbHVlLmRlbm9taW5hdG9yICE9IDE6CisgICAgICAgIFQgPSBmbG9hdAorICAgIHRyeToKKyAgICAgICAgIyBGSVhNRTogd2hhdCBkbyB3ZSBkbyBpZiB0aGlzIG92ZXJmbG93cz8KKyAgICAgICAgcmV0dXJuIFQodmFsdWUpCisgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgaWYgaXNzdWJjbGFzcyhULCBEZWNpbWFsKToKKyAgICAgICAgICAgIHJldHVybiBUKHZhbHVlLm51bWVyYXRvcikvVCh2YWx1ZS5kZW5vbWluYXRvcikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlCisKKworZGVmIF9jb3VudHMoZGF0YSk6CisgICAgIyBHZW5lcmF0ZSBhIHRhYmxlIG9mIHNvcnRlZCAodmFsdWUsIGZyZXF1ZW5jeSkgcGFpcnMuCisgICAgdGFibGUgPSBjb2xsZWN0aW9ucy5Db3VudGVyKGl0ZXIoZGF0YSkpLm1vc3RfY29tbW9uKCkKKyAgICBpZiBub3QgdGFibGU6CisgICAgICAgIHJldHVybiB0YWJsZQorICAgICMgRXh0cmFjdCB0aGUgdmFsdWVzIHdpdGggdGhlIGhpZ2hlc3QgZnJlcXVlbmN5LgorICAgIG1heGZyZXEgPSB0YWJsZVswXVsxXQorICAgIGZvciBpIGluIHJhbmdlKDEsIGxlbih0YWJsZSkpOgorICAgICAgICBpZiB0YWJsZVtpXVsxXSAhPSBtYXhmcmVxOgorICAgICAgICAgICAgdGFibGUgPSB0YWJsZVs6aV0KKyAgICAgICAgICAgIGJyZWFrCisgICAgcmV0dXJuIHRhYmxlCisKKworIyA9PT0gTWVhc3VyZXMgb2YgY2VudHJhbCB0ZW5kZW5jeSAoYXZlcmFnZXMpID09PQorCitkZWYgbWVhbihkYXRhKToKKyAgICAiIiJSZXR1cm4gdGhlIHNhbXBsZSBhcml0aG1ldGljIG1lYW4gb2YgZGF0YS4KKworICAgID4+PiBtZWFuKFsxLCAyLCAzLCA0LCA0XSkKKyAgICAyLjgKKworICAgID4+PiBmcm9tIGZyYWN0aW9ucyBpbXBvcnQgRnJhY3Rpb24gYXMgRgorICAgID4+PiBtZWFuKFtGKDMsIDcpLCBGKDEsIDIxKSwgRig1LCAzKSwgRigxLCAzKV0pCisgICAgRnJhY3Rpb24oMTMsIDIxKQorCisgICAgPj4+IGZyb20gZGVjaW1hbCBpbXBvcnQgRGVjaW1hbCBhcyBECisgICAgPj4+IG1lYW4oW0QoIjAuNSIpLCBEKCIwLjc1IiksIEQoIjAuNjI1IiksIEQoIjAuMzc1IildKQorICAgIERlY2ltYWwoJzAuNTYyNScpCisKKyAgICBJZiBgYGRhdGFgYCBpcyBlbXB0eSwgU3RhdGlzdGljc0Vycm9yIHdpbGwgYmUgcmFpc2VkLgorICAgICIiIgorICAgIGlmIGl0ZXIoZGF0YSkgaXMgZGF0YToKKyAgICAgICAgZGF0YSA9IGxpc3QoZGF0YSkKKyAgICBuID0gbGVuKGRhdGEpCisgICAgaWYgbiA8IDE6CisgICAgICAgIHJhaXNlIFN0YXRpc3RpY3NFcnJvcignbWVhbiByZXF1aXJlcyBhdCBsZWFzdCBvbmUgZGF0YSBwb2ludCcpCisgICAgVCwgdG90YWwsIGNvdW50ID0gX3N1bShkYXRhKQorICAgIGFzc2VydCBjb3VudCA9PSBuCisgICAgcmV0dXJuIF9jb252ZXJ0KHRvdGFsL24sIFQpCisKKworIyBGSVhNRTogaW52ZXN0aWdhdGUgd2F5cyB0byBjYWxjdWxhdGUgbWVkaWFucyB3aXRob3V0IHNvcnRpbmc/IFF1aWNrc2VsZWN0PworZGVmIG1lZGlhbihkYXRhKToKKyAgICAiIiJSZXR1cm4gdGhlIG1lZGlhbiAobWlkZGxlIHZhbHVlKSBvZiBudW1lcmljIGRhdGEuCisKKyAgICBXaGVuIHRoZSBudW1iZXIgb2YgZGF0YSBwb2ludHMgaXMgb2RkLCByZXR1cm4gdGhlIG1pZGRsZSBkYXRhIHBvaW50LgorICAgIFdoZW4gdGhlIG51bWJlciBvZiBkYXRhIHBvaW50cyBpcyBldmVuLCB0aGUgbWVkaWFuIGlzIGludGVycG9sYXRlZCBieQorICAgIHRha2luZyB0aGUgYXZlcmFnZSBvZiB0aGUgdHdvIG1pZGRsZSB2YWx1ZXM6CisKKyAgICA+Pj4gbWVkaWFuKFsxLCAzLCA1XSkKKyAgICAzCisgICAgPj4+IG1lZGlhbihbMSwgMywgNSwgN10pCisgICAgNC4wCisKKyAgICAiIiIKKyAgICBkYXRhID0gc29ydGVkKGRhdGEpCisgICAgbiA9IGxlbihkYXRhKQorICAgIGlmIG4gPT0gMDoKKyAgICAgICAgcmFpc2UgU3RhdGlzdGljc0Vycm9yKCJubyBtZWRpYW4gZm9yIGVtcHR5IGRhdGEiKQorICAgIGlmIG4lMiA9PSAxOgorICAgICAgICByZXR1cm4gZGF0YVtuLy8yXQorICAgIGVsc2U6CisgICAgICAgIGkgPSBuLy8yCisgICAgICAgIHJldHVybiAoZGF0YVtpIC0gMV0gKyBkYXRhW2ldKS8yCisKKworZGVmIG1lZGlhbl9sb3coZGF0YSk6CisgICAgIiIiUmV0dXJuIHRoZSBsb3cgbWVkaWFuIG9mIG51bWVyaWMgZGF0YS4KKworICAgIFdoZW4gdGhlIG51bWJlciBvZiBkYXRhIHBvaW50cyBpcyBvZGQsIHRoZSBtaWRkbGUgdmFsdWUgaXMgcmV0dXJuZWQuCisgICAgV2hlbiBpdCBpcyBldmVuLCB0aGUgc21hbGxlciBvZiB0aGUgdHdvIG1pZGRsZSB2YWx1ZXMgaXMgcmV0dXJuZWQuCisKKyAgICA+Pj4gbWVkaWFuX2xvdyhbMSwgMywgNV0pCisgICAgMworICAgID4+PiBtZWRpYW5fbG93KFsxLCAzLCA1LCA3XSkKKyAgICAzCisKKyAgICAiIiIKKyAgICBkYXRhID0gc29ydGVkKGRhdGEpCisgICAgbiA9IGxlbihkYXRhKQorICAgIGlmIG4gPT0gMDoKKyAgICAgICAgcmFpc2UgU3RhdGlzdGljc0Vycm9yKCJubyBtZWRpYW4gZm9yIGVtcHR5IGRhdGEiKQorICAgIGlmIG4lMiA9PSAxOgorICAgICAgICByZXR1cm4gZGF0YVtuLy8yXQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBkYXRhW24vLzIgLSAxXQorCisKK2RlZiBtZWRpYW5faGlnaChkYXRhKToKKyAgICAiIiJSZXR1cm4gdGhlIGhpZ2ggbWVkaWFuIG9mIGRhdGEuCisKKyAgICBXaGVuIHRoZSBudW1iZXIgb2YgZGF0YSBwb2ludHMgaXMgb2RkLCB0aGUgbWlkZGxlIHZhbHVlIGlzIHJldHVybmVkLgorICAgIFdoZW4gaXQgaXMgZXZlbiwgdGhlIGxhcmdlciBvZiB0aGUgdHdvIG1pZGRsZSB2YWx1ZXMgaXMgcmV0dXJuZWQuCisKKyAgICA+Pj4gbWVkaWFuX2hpZ2goWzEsIDMsIDVdKQorICAgIDMKKyAgICA+Pj4gbWVkaWFuX2hpZ2goWzEsIDMsIDUsIDddKQorICAgIDUKKworICAgICIiIgorICAgIGRhdGEgPSBzb3J0ZWQoZGF0YSkKKyAgICBuID0gbGVuKGRhdGEpCisgICAgaWYgbiA9PSAwOgorICAgICAgICByYWlzZSBTdGF0aXN0aWNzRXJyb3IoIm5vIG1lZGlhbiBmb3IgZW1wdHkgZGF0YSIpCisgICAgcmV0dXJuIGRhdGFbbi8vMl0KKworCitkZWYgbWVkaWFuX2dyb3VwZWQoZGF0YSwgaW50ZXJ2YWw9MSk6CisgICAgIiIiUmV0dXJuIHRoZSA1MHRoIHBlcmNlbnRpbGUgKG1lZGlhbikgb2YgZ3JvdXBlZCBjb250aW51b3VzIGRhdGEuCisKKyAgICA+Pj4gbWVkaWFuX2dyb3VwZWQoWzEsIDIsIDIsIDMsIDQsIDQsIDQsIDQsIDQsIDVdKQorICAgIDMuNworICAgID4+PiBtZWRpYW5fZ3JvdXBlZChbNTIsIDUyLCA1MywgNTRdKQorICAgIDUyLjUKKworICAgIFRoaXMgY2FsY3VsYXRlcyB0aGUgbWVkaWFuIGFzIHRoZSA1MHRoIHBlcmNlbnRpbGUsIGFuZCBzaG91bGQgYmUKKyAgICB1c2VkIHdoZW4geW91ciBkYXRhIGlzIGNvbnRpbnVvdXMgYW5kIGdyb3VwZWQuIEluIHRoZSBhYm92ZSBleGFtcGxlLAorICAgIHRoZSB2YWx1ZXMgMSwgMiwgMywgZXRjLiBhY3R1YWxseSByZXByZXNlbnQgdGhlIG1pZHBvaW50IG9mIGNsYXNzZXMKKyAgICAwLjUtMS41LCAxLjUtMi41LCAyLjUtMy41LCBldGMuIFRoZSBtaWRkbGUgdmFsdWUgZmFsbHMgc29tZXdoZXJlIGluCisgICAgY2xhc3MgMy41LTQuNSwgYW5kIGludGVycG9sYXRpb24gaXMgdXNlZCB0byBlc3RpbWF0ZSBpdC4KKworICAgIE9wdGlvbmFsIGFyZ3VtZW50IGBgaW50ZXJ2YWxgYCByZXByZXNlbnRzIHRoZSBjbGFzcyBpbnRlcnZhbCwgYW5kCisgICAgZGVmYXVsdHMgdG8gMS4gQ2hhbmdpbmcgdGhlIGNsYXNzIGludGVydmFsIG5hdHVyYWxseSB3aWxsIGNoYW5nZSB0aGUKKyAgICBpbnRlcnBvbGF0ZWQgNTB0aCBwZXJjZW50aWxlIHZhbHVlOgorCisgICAgPj4+IG1lZGlhbl9ncm91cGVkKFsxLCAzLCAzLCA1LCA3XSwgaW50ZXJ2YWw9MSkKKyAgICAzLjI1CisgICAgPj4+IG1lZGlhbl9ncm91cGVkKFsxLCAzLCAzLCA1LCA3XSwgaW50ZXJ2YWw9MikKKyAgICAzLjUKKworICAgIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgY2hlY2sgd2hldGhlciB0aGUgZGF0YSBwb2ludHMgYXJlIGF0IGxlYXN0CisgICAgYGBpbnRlcnZhbGBgIGFwYXJ0LgorICAgICIiIgorICAgIGRhdGEgPSBzb3J0ZWQoZGF0YSkKKyAgICBuID0gbGVuKGRhdGEpCisgICAgaWYgbiA9PSAwOgorICAgICAgICByYWlzZSBTdGF0aXN0aWNzRXJyb3IoIm5vIG1lZGlhbiBmb3IgZW1wdHkgZGF0YSIpCisgICAgZWxpZiBuID09IDE6CisgICAgICAgIHJldHVybiBkYXRhWzBdCisgICAgIyBGaW5kIHRoZSB2YWx1ZSBhdCB0aGUgbWlkcG9pbnQuIFJlbWVtYmVyIHRoaXMgY29ycmVzcG9uZHMgdG8gdGhlCisgICAgIyBjZW50cmUgb2YgdGhlIGNsYXNzIGludGVydmFsLgorICAgIHggPSBkYXRhW24vLzJdCisgICAgZm9yIG9iaiBpbiAoeCwgaW50ZXJ2YWwpOgorICAgICAgICBpZiBpc2luc3RhbmNlKG9iaiwgKHN0ciwgYnl0ZXMpKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignZXhwZWN0ZWQgbnVtYmVyIGJ1dCBnb3QgJXInICUgb2JqKQorICAgIHRyeToKKyAgICAgICAgTCA9IHggLSBpbnRlcnZhbC8yICAjIFRoZSBsb3dlciBsaW1pdCBvZiB0aGUgbWVkaWFuIGludGVydmFsLgorICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICMgTWl4ZWQgdHlwZS4gRm9yIG5vdyB3ZSBqdXN0IGNvZXJjZSB0byBmbG9hdC4KKyAgICAgICAgTCA9IGZsb2F0KHgpIC0gZmxvYXQoaW50ZXJ2YWwpLzIKKyAgICBjZiA9IGRhdGEuaW5kZXgoeCkgICMgTnVtYmVyIG9mIHZhbHVlcyBiZWxvdyB0aGUgbWVkaWFuIGludGVydmFsLgorICAgICMgRklYTUUgVGhlIGZvbGxvd2luZyBsaW5lIGNvdWxkIGJlIG1vcmUgZWZmaWNpZW50IGZvciBiaWcgbGlzdHMuCisgICAgZiA9IGRhdGEuY291bnQoeCkgICMgTnVtYmVyIG9mIGRhdGEgcG9pbnRzIGluIHRoZSBtZWRpYW4gaW50ZXJ2YWwuCisgICAgcmV0dXJuIEwgKyBpbnRlcnZhbCoobi8yIC0gY2YpL2YKKworCitkZWYgbW9kZShkYXRhKToKKyAgICAiIiJSZXR1cm4gdGhlIG1vc3QgY29tbW9uIGRhdGEgcG9pbnQgZnJvbSBkaXNjcmV0ZSBvciBub21pbmFsIGRhdGEuCisKKyAgICBgYG1vZGVgYCBhc3N1bWVzIGRpc2NyZXRlIGRhdGEsIGFuZCByZXR1cm5zIGEgc2luZ2xlIHZhbHVlLiBUaGlzIGlzIHRoZQorICAgIHN0YW5kYXJkIHRyZWF0bWVudCBvZiB0aGUgbW9kZSBhcyBjb21tb25seSB0YXVnaHQgaW4gc2Nob29sczoKKworICAgID4+PiBtb2RlKFsxLCAxLCAyLCAzLCAzLCAzLCAzLCA0XSkKKyAgICAzCisKKyAgICBUaGlzIGFsc28gd29ya3Mgd2l0aCBub21pbmFsIChub24tbnVtZXJpYykgZGF0YToKKworICAgID4+PiBtb2RlKFsicmVkIiwgImJsdWUiLCAiYmx1ZSIsICJyZWQiLCAiZ3JlZW4iLCAicmVkIiwgInJlZCJdKQorICAgICdyZWQnCisKKyAgICBJZiB0aGVyZSBpcyBub3QgZXhhY3RseSBvbmUgbW9zdCBjb21tb24gdmFsdWUsIGBgbW9kZWBgIHdpbGwgcmFpc2UKKyAgICBTdGF0aXN0aWNzRXJyb3IuCisgICAgIiIiCisgICAgIyBHZW5lcmF0ZSBhIHRhYmxlIG9mIHNvcnRlZCAodmFsdWUsIGZyZXF1ZW5jeSkgcGFpcnMuCisgICAgdGFibGUgPSBfY291bnRzKGRhdGEpCisgICAgaWYgbGVuKHRhYmxlKSA9PSAxOgorICAgICAgICByZXR1cm4gdGFibGVbMF1bMF0KKyAgICBlbGlmIHRhYmxlOgorICAgICAgICByYWlzZSBTdGF0aXN0aWNzRXJyb3IoCisgICAgICAgICAgICAgICAgJ25vIHVuaXF1ZSBtb2RlOyBmb3VuZCAlZCBlcXVhbGx5IGNvbW1vbiB2YWx1ZXMnICUgbGVuKHRhYmxlKQorICAgICAgICAgICAgICAgICkKKyAgICBlbHNlOgorICAgICAgICByYWlzZSBTdGF0aXN0aWNzRXJyb3IoJ25vIG1vZGUgZm9yIGVtcHR5IGRhdGEnKQorCisKKyMgPT09IE1lYXN1cmVzIG9mIHNwcmVhZCA9PT0KKworIyBTZWUgaHR0cDovL21hdGh3b3JsZC53b2xmcmFtLmNvbS9WYXJpYW5jZS5odG1sCisjICAgICBodHRwOi8vbWF0aHdvcmxkLndvbGZyYW0uY29tL1NhbXBsZVZhcmlhbmNlLmh0bWwKKyMgICAgIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQWxnb3JpdGhtc19mb3JfY2FsY3VsYXRpbmdfdmFyaWFuY2UKKyMKKyMgVW5kZXIgbm8gY2lyY3Vtc3RhbmNlcyB1c2UgdGhlIHNvLWNhbGxlZCAiY29tcHV0YXRpb25hbCBmb3JtdWxhIGZvcgorIyB2YXJpYW5jZSIsIGFzIHRoYXQgaXMgb25seSBzdWl0YWJsZSBmb3IgaGFuZCBjYWxjdWxhdGlvbnMgd2l0aCBhIHNtYWxsCisjIGFtb3VudCBvZiBsb3ctcHJlY2lzaW9uIGRhdGEuIEl0IGhhcyB0ZXJyaWJsZSBudW1lcmljIHByb3BlcnRpZXMuCisjCisjIFNlZSBhIGNvbXBhcmlzb24gb2YgdGhyZWUgY29tcHV0YXRpb25hbCBtZXRob2RzIGhlcmU6CisjIGh0dHA6Ly93d3cuam9obmRjb29rLmNvbS9ibG9nLzIwMDgvMDkvMjYvY29tcGFyaW5nLXRocmVlLW1ldGhvZHMtb2YtY29tcHV0aW5nLXN0YW5kYXJkLWRldmlhdGlvbi8KKworZGVmIF9zcyhkYXRhLCBjPU5vbmUpOgorICAgICIiIlJldHVybiBzdW0gb2Ygc3F1YXJlIGRldmlhdGlvbnMgb2Ygc2VxdWVuY2UgZGF0YS4KKworICAgIElmIGBgY2BgIGlzIE5vbmUsIHRoZSBtZWFuIGlzIGNhbGN1bGF0ZWQgaW4gb25lIHBhc3MsIGFuZCB0aGUgZGV2aWF0aW9ucworICAgIGZyb20gdGhlIG1lYW4gYXJlIGNhbGN1bGF0ZWQgaW4gYSBzZWNvbmQgcGFzcy4gT3RoZXJ3aXNlLCBkZXZpYXRpb25zIGFyZQorICAgIGNhbGN1bGF0ZWQgZnJvbSBgYGNgYCBhcyBnaXZlbi4gVXNlIHRoZSBzZWNvbmQgY2FzZSB3aXRoIGNhcmUsIGFzIGl0IGNhbgorICAgIGxlYWQgdG8gZ2FyYmFnZSByZXN1bHRzLgorICAgICIiIgorICAgIGlmIGMgaXMgTm9uZToKKyAgICAgICAgYyA9IG1lYW4oZGF0YSkKKyAgICBULCB0b3RhbCwgY291bnQgPSBfc3VtKCh4LWMpKioyIGZvciB4IGluIGRhdGEpCisgICAgIyBUaGUgZm9sbG93aW5nIHN1bSBzaG91bGQgbWF0aGVtYXRpY2FsbHkgZXF1YWwgemVybywgYnV0IGR1ZSB0byByb3VuZGluZworICAgICMgZXJyb3IgbWF5IG5vdC4KKyAgICBVLCB0b3RhbDIsIGNvdW50MiA9IF9zdW0oKHgtYykgZm9yIHggaW4gZGF0YSkKKyAgICBhc3NlcnQgVCA9PSBVIGFuZCBjb3VudCA9PSBjb3VudDIKKyAgICB0b3RhbCAtPSAgdG90YWwyKioyL2xlbihkYXRhKQorICAgIGFzc2VydCBub3QgdG90YWwgPCAwLCAnbmVnYXRpdmUgc3VtIG9mIHNxdWFyZSBkZXZpYXRpb25zOiAlZicgJSB0b3RhbAorICAgIHJldHVybiAoVCwgdG90YWwpCisKKworZGVmIHZhcmlhbmNlKGRhdGEsIHhiYXI9Tm9uZSk6CisgICAgIiIiUmV0dXJuIHRoZSBzYW1wbGUgdmFyaWFuY2Ugb2YgZGF0YS4KKworICAgIGRhdGEgc2hvdWxkIGJlIGFuIGl0ZXJhYmxlIG9mIFJlYWwtdmFsdWVkIG51bWJlcnMsIHdpdGggYXQgbGVhc3QgdHdvCisgICAgdmFsdWVzLiBUaGUgb3B0aW9uYWwgYXJndW1lbnQgeGJhciwgaWYgZ2l2ZW4sIHNob3VsZCBiZSB0aGUgbWVhbiBvZgorICAgIHRoZSBkYXRhLiBJZiBpdCBpcyBtaXNzaW5nIG9yIE5vbmUsIHRoZSBtZWFuIGlzIGF1dG9tYXRpY2FsbHkgY2FsY3VsYXRlZC4KKworICAgIFVzZSB0aGlzIGZ1bmN0aW9uIHdoZW4geW91ciBkYXRhIGlzIGEgc2FtcGxlIGZyb20gYSBwb3B1bGF0aW9uLiBUbworICAgIGNhbGN1bGF0ZSB0aGUgdmFyaWFuY2UgZnJvbSB0aGUgZW50aXJlIHBvcHVsYXRpb24sIHNlZSBgYHB2YXJpYW5jZWBgLgorCisgICAgRXhhbXBsZXM6CisKKyAgICA+Pj4gZGF0YSA9IFsyLjc1LCAxLjc1LCAxLjI1LCAwLjI1LCAwLjUsIDEuMjUsIDMuNV0KKyAgICA+Pj4gdmFyaWFuY2UoZGF0YSkKKyAgICAxLjM3MjAyMzgwOTUyMzgwOTUKKworICAgIElmIHlvdSBoYXZlIGFscmVhZHkgY2FsY3VsYXRlZCB0aGUgbWVhbiBvZiB5b3VyIGRhdGEsIHlvdSBjYW4gcGFzcyBpdCBhcworICAgIHRoZSBvcHRpb25hbCBzZWNvbmQgYXJndW1lbnQgYGB4YmFyYGAgdG8gYXZvaWQgcmVjYWxjdWxhdGluZyBpdDoKKworICAgID4+PiBtID0gbWVhbihkYXRhKQorICAgID4+PiB2YXJpYW5jZShkYXRhLCBtKQorICAgIDEuMzcyMDIzODA5NTIzODA5NQorCisgICAgVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBjaGVjayB0aGF0IGBgeGJhcmBgIGlzIGFjdHVhbGx5IHRoZSBtZWFuIG9mCisgICAgYGBkYXRhYGAuIEdpdmluZyBhcmJpdHJhcnkgdmFsdWVzIGZvciBgYHhiYXJgYCBtYXkgbGVhZCB0byBpbnZhbGlkIG9yCisgICAgaW1wb3NzaWJsZSByZXN1bHRzLgorCisgICAgRGVjaW1hbHMgYW5kIEZyYWN0aW9ucyBhcmUgc3VwcG9ydGVkOgorCisgICAgPj4+IGZyb20gZGVjaW1hbCBpbXBvcnQgRGVjaW1hbCBhcyBECisgICAgPj4+IHZhcmlhbmNlKFtEKCIyNy41IiksIEQoIjMwLjI1IiksIEQoIjMwLjI1IiksIEQoIjM0LjUiKSwgRCgiNDEuNzUiKV0pCisgICAgRGVjaW1hbCgnMzEuMDE4NzUnKQorCisgICAgPj4+IGZyb20gZnJhY3Rpb25zIGltcG9ydCBGcmFjdGlvbiBhcyBGCisgICAgPj4+IHZhcmlhbmNlKFtGKDEsIDYpLCBGKDEsIDIpLCBGKDUsIDMpXSkKKyAgICBGcmFjdGlvbig2NywgMTA4KQorCisgICAgIiIiCisgICAgaWYgaXRlcihkYXRhKSBpcyBkYXRhOgorICAgICAgICBkYXRhID0gbGlzdChkYXRhKQorICAgIG4gPSBsZW4oZGF0YSkKKyAgICBpZiBuIDwgMjoKKyAgICAgICAgcmFpc2UgU3RhdGlzdGljc0Vycm9yKCd2YXJpYW5jZSByZXF1aXJlcyBhdCBsZWFzdCB0d28gZGF0YSBwb2ludHMnKQorICAgIFQsIHNzID0gX3NzKGRhdGEsIHhiYXIpCisgICAgcmV0dXJuIF9jb252ZXJ0KHNzLyhuLTEpLCBUKQorCisKK2RlZiBwdmFyaWFuY2UoZGF0YSwgbXU9Tm9uZSk6CisgICAgIiIiUmV0dXJuIHRoZSBwb3B1bGF0aW9uIHZhcmlhbmNlIG9mIGBgZGF0YWBgLgorCisgICAgZGF0YSBzaG91bGQgYmUgYW4gaXRlcmFibGUgb2YgUmVhbC12YWx1ZWQgbnVtYmVycywgd2l0aCBhdCBsZWFzdCBvbmUKKyAgICB2YWx1ZS4gVGhlIG9wdGlvbmFsIGFyZ3VtZW50IG11LCBpZiBnaXZlbiwgc2hvdWxkIGJlIHRoZSBtZWFuIG9mCisgICAgdGhlIGRhdGEuIElmIGl0IGlzIG1pc3Npbmcgb3IgTm9uZSwgdGhlIG1lYW4gaXMgYXV0b21hdGljYWxseSBjYWxjdWxhdGVkLgorCisgICAgVXNlIHRoaXMgZnVuY3Rpb24gdG8gY2FsY3VsYXRlIHRoZSB2YXJpYW5jZSBmcm9tIHRoZSBlbnRpcmUgcG9wdWxhdGlvbi4KKyAgICBUbyBlc3RpbWF0ZSB0aGUgdmFyaWFuY2UgZnJvbSBhIHNhbXBsZSwgdGhlIGBgdmFyaWFuY2VgYCBmdW5jdGlvbiBpcworICAgIHVzdWFsbHkgYSBiZXR0ZXIgY2hvaWNlLgorCisgICAgRXhhbXBsZXM6CisKKyAgICA+Pj4gZGF0YSA9IFswLjAsIDAuMjUsIDAuMjUsIDEuMjUsIDEuNSwgMS43NSwgMi43NSwgMy4yNV0KKyAgICA+Pj4gcHZhcmlhbmNlKGRhdGEpCisgICAgMS4yNQorCisgICAgSWYgeW91IGhhdmUgYWxyZWFkeSBjYWxjdWxhdGVkIHRoZSBtZWFuIG9mIHRoZSBkYXRhLCB5b3UgY2FuIHBhc3MgaXQgYXMKKyAgICB0aGUgb3B0aW9uYWwgc2Vjb25kIGFyZ3VtZW50IHRvIGF2b2lkIHJlY2FsY3VsYXRpbmcgaXQ6CisKKyAgICA+Pj4gbXUgPSBtZWFuKGRhdGEpCisgICAgPj4+IHB2YXJpYW5jZShkYXRhLCBtdSkKKyAgICAxLjI1CisKKyAgICBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IGNoZWNrIHRoYXQgYGBtdWBgIGlzIGFjdHVhbGx5IHRoZSBtZWFuIG9mIGBgZGF0YWBgLgorICAgIEdpdmluZyBhcmJpdHJhcnkgdmFsdWVzIGZvciBgYG11YGAgbWF5IGxlYWQgdG8gaW52YWxpZCBvciBpbXBvc3NpYmxlCisgICAgcmVzdWx0cy4KKworICAgIERlY2ltYWxzIGFuZCBGcmFjdGlvbnMgYXJlIHN1cHBvcnRlZDoKKworICAgID4+PiBmcm9tIGRlY2ltYWwgaW1wb3J0IERlY2ltYWwgYXMgRAorICAgID4+PiBwdmFyaWFuY2UoW0QoIjI3LjUiKSwgRCgiMzAuMjUiKSwgRCgiMzAuMjUiKSwgRCgiMzQuNSIpLCBEKCI0MS43NSIpXSkKKyAgICBEZWNpbWFsKCcyNC44MTUnKQorCisgICAgPj4+IGZyb20gZnJhY3Rpb25zIGltcG9ydCBGcmFjdGlvbiBhcyBGCisgICAgPj4+IHB2YXJpYW5jZShbRigxLCA0KSwgRig1LCA0KSwgRigxLCAyKV0pCisgICAgRnJhY3Rpb24oMTMsIDcyKQorCisgICAgIiIiCisgICAgaWYgaXRlcihkYXRhKSBpcyBkYXRhOgorICAgICAgICBkYXRhID0gbGlzdChkYXRhKQorICAgIG4gPSBsZW4oZGF0YSkKKyAgICBpZiBuIDwgMToKKyAgICAgICAgcmFpc2UgU3RhdGlzdGljc0Vycm9yKCdwdmFyaWFuY2UgcmVxdWlyZXMgYXQgbGVhc3Qgb25lIGRhdGEgcG9pbnQnKQorICAgIHNzID0gX3NzKGRhdGEsIG11KQorICAgIFQsIHNzID0gX3NzKGRhdGEsIG11KQorICAgIHJldHVybiBfY29udmVydChzcy9uLCBUKQorCisKK2RlZiBzdGRldihkYXRhLCB4YmFyPU5vbmUpOgorICAgICIiIlJldHVybiB0aGUgc3F1YXJlIHJvb3Qgb2YgdGhlIHNhbXBsZSB2YXJpYW5jZS4KKworICAgIFNlZSBgYHZhcmlhbmNlYGAgZm9yIGFyZ3VtZW50cyBhbmQgb3RoZXIgZGV0YWlscy4KKworICAgID4+PiBzdGRldihbMS41LCAyLjUsIDIuNSwgMi43NSwgMy4yNSwgNC43NV0pCisgICAgMS4wODEwODc0MTU1MjE5ODI3CisKKyAgICAiIiIKKyAgICB2YXIgPSB2YXJpYW5jZShkYXRhLCB4YmFyKQorICAgIHRyeToKKyAgICAgICAgcmV0dXJuIHZhci5zcXJ0KCkKKyAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgIHJldHVybiBtYXRoLnNxcnQodmFyKQorCisKK2RlZiBwc3RkZXYoZGF0YSwgbXU9Tm9uZSk6CisgICAgIiIiUmV0dXJuIHRoZSBzcXVhcmUgcm9vdCBvZiB0aGUgcG9wdWxhdGlvbiB2YXJpYW5jZS4KKworICAgIFNlZSBgYHB2YXJpYW5jZWBgIGZvciBhcmd1bWVudHMgYW5kIG90aGVyIGRldGFpbHMuCisKKyAgICA+Pj4gcHN0ZGV2KFsxLjUsIDIuNSwgMi41LCAyLjc1LCAzLjI1LCA0Ljc1XSkKKyAgICAwLjk4Njg5MzI3MzUyNzI1MQorCisgICAgIiIiCisgICAgdmFyID0gcHZhcmlhbmNlKGRhdGEsIG11KQorICAgIHRyeToKKyAgICAgICAgcmV0dXJuIHZhci5zcXJ0KCkKKyAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgIHJldHVybiBtYXRoLnNxcnQodmFyKQpkaWZmIC0tZ2l0IGEvTGliL3N0cmluZy5weSBiL0xpYi9zdHJpbmcucHkKaW5kZXggYjU3Yzc5Yi4uZWYwNzg3ZiAxMDA2NDQKLS0tIGEvTGliL3N0cmluZy5weQorKysgYi9MaWIvc3RyaW5nLnB5CkBAIC05NCw3ICs5NCwxMSBAQAogICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdJbnZhbGlkIHBsYWNlaG9sZGVyIGluIHN0cmluZzogbGluZSAlZCwgY29sICVkJyAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpbmVubywgY29sbm8pKQogCi0gICAgZGVmIHN1YnN0aXR1dGUoc2VsZiwgKmFyZ3MsICoqa3dzKToKKyAgICBkZWYgc3Vic3RpdHV0ZSgqYXJncywgKiprd3MpOgorICAgICAgICBpZiBub3QgYXJnczoKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiZGVzY3JpcHRvciAnc3Vic3RpdHV0ZScgb2YgJ1RlbXBsYXRlJyBvYmplY3QgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuZWVkcyBhbiBhcmd1bWVudCIpCisgICAgICAgIHNlbGYsICphcmdzID0gYXJncyAgIyBhbGxvdyB0aGUgInNlbGYiIGtleXdvcmQgYmUgcGFzc2VkCiAgICAgICAgIGlmIGxlbihhcmdzKSA+IDE6CiAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ1RvbyBtYW55IHBvc2l0aW9uYWwgYXJndW1lbnRzJykKICAgICAgICAgaWYgbm90IGFyZ3M6CkBAIC0xMjAsNyArMTI0LDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucGF0dGVybikKICAgICAgICAgcmV0dXJuIHNlbGYucGF0dGVybi5zdWIoY29udmVydCwgc2VsZi50ZW1wbGF0ZSkKIAotICAgIGRlZiBzYWZlX3N1YnN0aXR1dGUoc2VsZiwgKmFyZ3MsICoqa3dzKToKKyAgICBkZWYgc2FmZV9zdWJzdGl0dXRlKCphcmdzLCAqKmt3cyk6CisgICAgICAgIGlmIG5vdCBhcmdzOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJkZXNjcmlwdG9yICdzYWZlX3N1YnN0aXR1dGUnIG9mICdUZW1wbGF0ZScgb2JqZWN0ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmVlZHMgYW4gYXJndW1lbnQiKQorICAgICAgICBzZWxmLCAqYXJncyA9IGFyZ3MgICMgYWxsb3cgdGhlICJzZWxmIiBrZXl3b3JkIGJlIHBhc3NlZAogICAgICAgICBpZiBsZW4oYXJncykgPiAxOgogICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdUb28gbWFueSBwb3NpdGlvbmFsIGFyZ3VtZW50cycpCiAgICAgICAgIGlmIG5vdCBhcmdzOgpAQCAtMTYwLDE2ICsxNjgsMjkgQEAKICMgVGhlIGZpZWxkIG5hbWUgcGFyc2VyIGlzIGltcGxlbWVudGVkIGluIF9zdHJpbmcuZm9ybWF0dGVyX2ZpZWxkX25hbWVfc3BsaXQKIAogY2xhc3MgRm9ybWF0dGVyOgotICAgIGRlZiBmb3JtYXQoc2VsZiwgZm9ybWF0X3N0cmluZywgKmFyZ3MsICoqa3dhcmdzKToKKyAgICBkZWYgZm9ybWF0KCphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIGlmIG5vdCBhcmdzOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJkZXNjcmlwdG9yICdmb3JtYXQnIG9mICdGb3JtYXR0ZXInIG9iamVjdCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5lZWRzIGFuIGFyZ3VtZW50IikKKyAgICAgICAgc2VsZiwgKmFyZ3MgPSBhcmdzICAjIGFsbG93IHRoZSAic2VsZiIga2V5d29yZCBiZSBwYXNzZWQKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZm9ybWF0X3N0cmluZywgKmFyZ3MgPSBhcmdzICMgYWxsb3cgdGhlICJmb3JtYXRfc3RyaW5nIiBrZXl3b3JkIGJlIHBhc3NlZAorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIGlmICdmb3JtYXRfc3RyaW5nJyBpbiBrd2FyZ3M6CisgICAgICAgICAgICAgICAgZm9ybWF0X3N0cmluZyA9IGt3YXJncy5wb3AoJ2Zvcm1hdF9zdHJpbmcnKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoImZvcm1hdCgpIG1pc3NpbmcgMSByZXF1aXJlZCBwb3NpdGlvbmFsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFyZ3VtZW50OiAnZm9ybWF0X3N0cmluZyciKSBmcm9tIE5vbmUKICAgICAgICAgcmV0dXJuIHNlbGYudmZvcm1hdChmb3JtYXRfc3RyaW5nLCBhcmdzLCBrd2FyZ3MpCiAKICAgICBkZWYgdmZvcm1hdChzZWxmLCBmb3JtYXRfc3RyaW5nLCBhcmdzLCBrd2FyZ3MpOgogICAgICAgICB1c2VkX2FyZ3MgPSBzZXQoKQotICAgICAgICByZXN1bHQgPSBzZWxmLl92Zm9ybWF0KGZvcm1hdF9zdHJpbmcsIGFyZ3MsIGt3YXJncywgdXNlZF9hcmdzLCAyKQorICAgICAgICByZXN1bHQsIF8gPSBzZWxmLl92Zm9ybWF0KGZvcm1hdF9zdHJpbmcsIGFyZ3MsIGt3YXJncywgdXNlZF9hcmdzLCAyKQogICAgICAgICBzZWxmLmNoZWNrX3VudXNlZF9hcmdzKHVzZWRfYXJncywgYXJncywga3dhcmdzKQogICAgICAgICByZXR1cm4gcmVzdWx0CiAKLSAgICBkZWYgX3Zmb3JtYXQoc2VsZiwgZm9ybWF0X3N0cmluZywgYXJncywga3dhcmdzLCB1c2VkX2FyZ3MsIHJlY3Vyc2lvbl9kZXB0aCk6CisgICAgZGVmIF92Zm9ybWF0KHNlbGYsIGZvcm1hdF9zdHJpbmcsIGFyZ3MsIGt3YXJncywgdXNlZF9hcmdzLCByZWN1cnNpb25fZGVwdGgsCisgICAgICAgICAgICAgICAgIGF1dG9fYXJnX2luZGV4PTApOgogICAgICAgICBpZiByZWN1cnNpb25fZGVwdGggPCAwOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignTWF4IHN0cmluZyByZWN1cnNpb24gZXhjZWVkZWQnKQogICAgICAgICByZXN1bHQgPSBbXQpAQCAtMTg1LDYgKzIwNiwyMyBAQAogICAgICAgICAgICAgICAgICMgdGhpcyBpcyBzb21lIG1hcmt1cCwgZmluZCB0aGUgb2JqZWN0IGFuZCBkbwogICAgICAgICAgICAgICAgICMgIHRoZSBmb3JtYXR0aW5nCiAKKyAgICAgICAgICAgICAgICAjIGhhbmRsZSBhcmcgaW5kZXhpbmcgd2hlbiBlbXB0eSBmaWVsZF9uYW1lcyBhcmUgZ2l2ZW4uCisgICAgICAgICAgICAgICAgaWYgZmllbGRfbmFtZSA9PSAnJzoKKyAgICAgICAgICAgICAgICAgICAgaWYgYXV0b19hcmdfaW5kZXggaXMgRmFsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdjYW5ub3Qgc3dpdGNoIGZyb20gbWFudWFsIGZpZWxkICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NwZWNpZmljYXRpb24gdG8gYXV0b21hdGljIGZpZWxkICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ251bWJlcmluZycpCisgICAgICAgICAgICAgICAgICAgIGZpZWxkX25hbWUgPSBzdHIoYXV0b19hcmdfaW5kZXgpCisgICAgICAgICAgICAgICAgICAgIGF1dG9fYXJnX2luZGV4ICs9IDEKKyAgICAgICAgICAgICAgICBlbGlmIGZpZWxkX25hbWUuaXNkaWdpdCgpOgorICAgICAgICAgICAgICAgICAgICBpZiBhdXRvX2FyZ19pbmRleDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ2Nhbm5vdCBzd2l0Y2ggZnJvbSBtYW51YWwgZmllbGQgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3BlY2lmaWNhdGlvbiB0byBhdXRvbWF0aWMgZmllbGQgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbnVtYmVyaW5nJykKKyAgICAgICAgICAgICAgICAgICAgIyBkaXNhYmxlIGF1dG8gYXJnIGluY3JlbWVudGluZywgaWYgaXQgZ2V0cworICAgICAgICAgICAgICAgICAgICAjIHVzZWQgbGF0ZXIgb24sIHRoZW4gYW4gZXhjZXB0aW9uIHdpbGwgYmUgcmFpc2VkCisgICAgICAgICAgICAgICAgICAgIGF1dG9fYXJnX2luZGV4ID0gRmFsc2UKKwogICAgICAgICAgICAgICAgICMgZ2l2ZW4gdGhlIGZpZWxkX25hbWUsIGZpbmQgdGhlIG9iamVjdCBpdCByZWZlcmVuY2VzCiAgICAgICAgICAgICAgICAgIyAgYW5kIHRoZSBhcmd1bWVudCBpdCBjYW1lIGZyb20KICAgICAgICAgICAgICAgICBvYmosIGFyZ191c2VkID0gc2VsZi5nZXRfZmllbGQoZmllbGRfbmFtZSwgYXJncywga3dhcmdzKQpAQCAtMTk0LDEzICsyMzIsMTUgQEAKICAgICAgICAgICAgICAgICBvYmogPSBzZWxmLmNvbnZlcnRfZmllbGQob2JqLCBjb252ZXJzaW9uKQogCiAgICAgICAgICAgICAgICAgIyBleHBhbmQgdGhlIGZvcm1hdCBzcGVjLCBpZiBuZWVkZWQKLSAgICAgICAgICAgICAgICBmb3JtYXRfc3BlYyA9IHNlbGYuX3Zmb3JtYXQoZm9ybWF0X3NwZWMsIGFyZ3MsIGt3YXJncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZF9hcmdzLCByZWN1cnNpb25fZGVwdGgtMSkKKyAgICAgICAgICAgICAgICBmb3JtYXRfc3BlYywgYXV0b19hcmdfaW5kZXggPSBzZWxmLl92Zm9ybWF0KAorICAgICAgICAgICAgICAgICAgICBmb3JtYXRfc3BlYywgYXJncywga3dhcmdzLAorICAgICAgICAgICAgICAgICAgICB1c2VkX2FyZ3MsIHJlY3Vyc2lvbl9kZXB0aC0xLAorICAgICAgICAgICAgICAgICAgICBhdXRvX2FyZ19pbmRleD1hdXRvX2FyZ19pbmRleCkKIAogICAgICAgICAgICAgICAgICMgZm9ybWF0IHRoZSBvYmplY3QgYW5kIGFwcGVuZCB0byB0aGUgcmVzdWx0CiAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChzZWxmLmZvcm1hdF9maWVsZChvYmosIGZvcm1hdF9zcGVjKSkKIAotICAgICAgICByZXR1cm4gJycuam9pbihyZXN1bHQpCisgICAgICAgIHJldHVybiAnJy5qb2luKHJlc3VsdCksIGF1dG9fYXJnX2luZGV4CiAKIAogICAgIGRlZiBnZXRfdmFsdWUoc2VsZiwga2V5LCBhcmdzLCBrd2FyZ3MpOgpkaWZmIC0tZ2l0IGEvTGliL3N0cnVjdC5weSBiL0xpYi9zdHJ1Y3QucHkKaW5kZXggOWJmYzIzZi4uZDZiYmE1OCAxMDA2NDQKLS0tIGEvTGliL3N0cnVjdC5weQorKysgYi9MaWIvc3RydWN0LnB5CkBAIC0xLDYgKzEsNyBAQAogX19hbGxfXyA9IFsKICAgICAjIEZ1bmN0aW9ucwogICAgICdjYWxjc2l6ZScsICdwYWNrJywgJ3BhY2tfaW50bycsICd1bnBhY2snLCAndW5wYWNrX2Zyb20nLAorICAgICdpdGVyX3VucGFjaycsCiAKICAgICAjIENsYXNzZXMKICAgICAnU3RydWN0JywKZGlmZiAtLWdpdCBhL0xpYi9zdWJwcm9jZXNzLnB5IGIvTGliL3N1YnByb2Nlc3MucHkKaW5kZXggMDE3OGIwOC4uMDRjZmI0NCAxMDA2NDQKLS0tIGEvTGliL3N1YnByb2Nlc3MucHkKKysrIGIvTGliL3N1YnByb2Nlc3MucHkKQEAgLTE0NSwxMSArMTQ1LDEzIEBACiBnZXRzdGF0dXNvdXRwdXQoY21kKToKICAgICBSZXR1cm4gKHN0YXR1cywgb3V0cHV0KSBvZiBleGVjdXRpbmcgY21kIGluIGEgc2hlbGwuCiAKLSAgICBFeGVjdXRlIHRoZSBzdHJpbmcgJ2NtZCcgaW4gYSBzaGVsbCB3aXRoIG9zLnBvcGVuKCkgYW5kIHJldHVybiBhIDItdHVwbGUKLSAgICAoc3RhdHVzLCBvdXRwdXQpLiAgY21kIGlzIGFjdHVhbGx5IHJ1biBhcyAneyBjbWQgOyB9IDI+JjEnLCBzbyB0aGF0IHRoZQotICAgIHJldHVybmVkIG91dHB1dCB3aWxsIGNvbnRhaW4gb3V0cHV0IG9yIGVycm9yIG1lc3NhZ2VzLiBBIHRyYWlsaW5nIG5ld2xpbmUKLSAgICBpcyBzdHJpcHBlZCBmcm9tIHRoZSBvdXRwdXQuIFRoZSBleGl0IHN0YXR1cyBmb3IgdGhlIGNvbW1hbmQgY2FuIGJlCi0gICAgaW50ZXJwcmV0ZWQgYWNjb3JkaW5nIHRvIHRoZSBydWxlcyBmb3IgdGhlIEMgZnVuY3Rpb24gd2FpdCgpLiAgRXhhbXBsZToKKyAgICBFeGVjdXRlIHRoZSBzdHJpbmcgJ2NtZCcgaW4gYSBzaGVsbCB3aXRoICdjaGVja19vdXRwdXQnIGFuZAorICAgIHJldHVybiBhIDItdHVwbGUgKHN0YXR1cywgb3V0cHV0KS4gVW5pdmVyc2FsIG5ld2xpbmVzIG1vZGUgaXMgdXNlZCwKKyAgICBtZWFuaW5nIHRoYXQgdGhlIHJlc3VsdCB3aXRoIGJlIGRlY29kZWQgdG8gYSBzdHJpbmcuCisKKyAgICBBIHRyYWlsaW5nIG5ld2xpbmUgaXMgc3RyaXBwZWQgZnJvbSB0aGUgb3V0cHV0LgorICAgIFRoZSBleGl0IHN0YXR1cyBmb3IgdGhlIGNvbW1hbmQgY2FuIGJlIGludGVycHJldGVkCisgICAgYWNjb3JkaW5nIHRvIHRoZSBydWxlcyBmb3IgdGhlIGZ1bmN0aW9uICd3YWl0Jy4gIEV4YW1wbGU6CiAKICAgICA+Pj4gc3VicHJvY2Vzcy5nZXRzdGF0dXNvdXRwdXQoJ2xzIC9iaW4vbHMnKQogICAgICgwLCAnL2Jpbi9scycpCkBAIC0xNzgsNiArMTgwLDkgQEAKIAogICAgID4+PiBvdXRwdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChbImxzIiwgIi1sIiwgIi9kZXYvbnVsbCJdKQogCisgICAgVGhlcmUgaXMgYW4gYWRkaXRpb25hbCBvcHRpb25hbCBhcmd1bWVudCwgImlucHV0IiwgYWxsb3dpbmcgeW91IHRvCisgICAgcGFzcyBhIHN0cmluZyB0byB0aGUgc3VicHJvY2VzcydzIHN0ZGluLiAgSWYgeW91IHVzZSB0aGlzIGFyZ3VtZW50CisgICAgeW91IG1heSBub3QgYWxzbyB1c2UgdGhlIFBvcGVuIGNvbnN0cnVjdG9yJ3MgInN0ZGluIiBhcmd1bWVudC4KIAogRXhjZXB0aW9ucwogLS0tLS0tLS0tLQpAQCAtMzQ1LDggKzM1MCw2IEBACiBpbXBvcnQgaW8KIGltcG9ydCBvcwogaW1wb3J0IHRpbWUKLWltcG9ydCB0cmFjZWJhY2sKLWltcG9ydCBnYwogaW1wb3J0IHNpZ25hbAogaW1wb3J0IGJ1aWx0aW5zCiBpbXBvcnQgd2FybmluZ3MKQEAgLTM5OCwxOSArNDAxLDI4IEBACiAgICAgICAgIGhTdGRPdXRwdXQgPSBOb25lCiAgICAgICAgIGhTdGRFcnJvciA9IE5vbmUKICAgICAgICAgd1Nob3dXaW5kb3cgPSAwCi0gICAgY2xhc3MgcHl3aW50eXBlczoKLSAgICAgICAgZXJyb3IgPSBJT0Vycm9yCiBlbHNlOgotICAgIGltcG9ydCBzZWxlY3QKLSAgICBfaGFzX3BvbGwgPSBoYXNhdHRyKHNlbGVjdCwgJ3BvbGwnKQogICAgIGltcG9ydCBfcG9zaXhzdWJwcm9jZXNzCi0gICAgX2NyZWF0ZV9waXBlID0gX3Bvc2l4c3VicHJvY2Vzcy5jbG9leGVjX3BpcGUKKyAgICBpbXBvcnQgc2VsZWN0CisgICAgaW1wb3J0IHNlbGVjdG9ycworICAgIHRyeToKKyAgICAgICAgaW1wb3J0IHRocmVhZGluZworICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgaW1wb3J0IGR1bW15X3RocmVhZGluZyBhcyB0aHJlYWRpbmcKIAogICAgICMgV2hlbiBzZWxlY3Qgb3IgcG9sbCBoYXMgaW5kaWNhdGVkIHRoYXQgdGhlIGZpbGUgaXMgd3JpdGFibGUsCiAgICAgIyB3ZSBjYW4gd3JpdGUgdXAgdG8gX1BJUEVfQlVGIGJ5dGVzIHdpdGhvdXQgcmlzayBvZiBibG9ja2luZy4KICAgICAjIFBPU0lYIGRlZmluZXMgUElQRV9CVUYgYXMgPj0gNTEyLgogICAgIF9QSVBFX0JVRiA9IGdldGF0dHIoc2VsZWN0LCAnUElQRV9CVUYnLCA1MTIpCiAKKyAgICAjIHBvbGwvc2VsZWN0IGhhdmUgdGhlIGFkdmFudGFnZSBvZiBub3QgcmVxdWlyaW5nIGFueSBleHRyYSBmaWxlCisgICAgIyBkZXNjcmlwdG9yLCBjb250cmFyaWx5IHRvIGVwb2xsL2txdWV1ZSAoYWxzbywgdGhleSByZXF1aXJlIGEgc2luZ2xlCisgICAgIyBzeXNjYWxsKS4KKyAgICBpZiBoYXNhdHRyKHNlbGVjdG9ycywgJ1BvbGxTZWxlY3RvcicpOgorICAgICAgICBfUG9wZW5TZWxlY3RvciA9IHNlbGVjdG9ycy5Qb2xsU2VsZWN0b3IKKyAgICBlbHNlOgorICAgICAgICBfUG9wZW5TZWxlY3RvciA9IHNlbGVjdG9ycy5TZWxlY3RTZWxlY3RvcgorCiAKIF9fYWxsX18gPSBbIlBvcGVuIiwgIlBJUEUiLCAiU1RET1VUIiwgImNhbGwiLCAiY2hlY2tfY2FsbCIsICJnZXRzdGF0dXNvdXRwdXQiLAogICAgICAgICAgICAiZ2V0b3V0cHV0IiwgImNoZWNrX291dHB1dCIsICJDYWxsZWRQcm9jZXNzRXJyb3IiLCAiREVWTlVMTCJdCkBAIC01MDAsNyArNTEyLDYgQEAKICAgICAgICAgJ3ZlcmJvc2UnOiAndicsCiAgICAgICAgICdieXRlc193YXJuaW5nJzogJ2InLAogICAgICAgICAncXVpZXQnOiAncScsCi0gICAgICAgICdoYXNoX3JhbmRvbWl6YXRpb24nOiAnUicsCiAgICAgfQogICAgIGFyZ3MgPSBbXQogICAgIGZvciBmbGFnLCBvcHQgaW4gZmxhZ19vcHRfbWFwLml0ZW1zKCk6CkBAIC01NjgsMTQgKzU3OSwzMSBAQAogICAgIC4uLiAgICAgICAgICAgICAgc3RkZXJyPVNURE9VVCkKICAgICBiJ2xzOiBub25fZXhpc3RlbnRfZmlsZTogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeVxuJwogCisgICAgVGhlcmUgaXMgYW4gYWRkaXRpb25hbCBvcHRpb25hbCBhcmd1bWVudCwgImlucHV0IiwgYWxsb3dpbmcgeW91IHRvCisgICAgcGFzcyBhIHN0cmluZyB0byB0aGUgc3VicHJvY2VzcydzIHN0ZGluLiAgSWYgeW91IHVzZSB0aGlzIGFyZ3VtZW50CisgICAgeW91IG1heSBub3QgYWxzbyB1c2UgdGhlIFBvcGVuIGNvbnN0cnVjdG9yJ3MgInN0ZGluIiBhcmd1bWVudCwgYXMKKyAgICBpdCB0b28gd2lsbCBiZSB1c2VkIGludGVybmFsbHkuICBFeGFtcGxlOgorCisgICAgPj4+IGNoZWNrX291dHB1dChbInNlZCIsICItZSIsICJzL2Zvby9iYXIvIl0sCisgICAgLi4uICAgICAgICAgICAgICBpbnB1dD1iIndoZW4gaW4gdGhlIGNvdXJzZSBvZiBmb29tYW4gZXZlbnRzXG4iKQorICAgIGInd2hlbiBpbiB0aGUgY291cnNlIG9mIGJhcm1hbiBldmVudHNcbicKKwogICAgIElmIHVuaXZlcnNhbF9uZXdsaW5lcz1UcnVlIGlzIHBhc3NlZCwgdGhlIHJldHVybiB2YWx1ZSB3aWxsIGJlIGEKICAgICBzdHJpbmcgcmF0aGVyIHRoYW4gYnl0ZXMuCiAgICAgIiIiCiAgICAgaWYgJ3N0ZG91dCcgaW4ga3dhcmdzOgogICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdzdGRvdXQgYXJndW1lbnQgbm90IGFsbG93ZWQsIGl0IHdpbGwgYmUgb3ZlcnJpZGRlbi4nKQorICAgIGlmICdpbnB1dCcgaW4ga3dhcmdzOgorICAgICAgICBpZiAnc3RkaW4nIGluIGt3YXJnczoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3N0ZGluIGFuZCBpbnB1dCBhcmd1bWVudHMgbWF5IG5vdCBib3RoIGJlIHVzZWQuJykKKyAgICAgICAgaW5wdXRkYXRhID0ga3dhcmdzWydpbnB1dCddCisgICAgICAgIGRlbCBrd2FyZ3NbJ2lucHV0J10KKyAgICAgICAga3dhcmdzWydzdGRpbiddID0gUElQRQorICAgIGVsc2U6CisgICAgICAgIGlucHV0ZGF0YSA9IE5vbmUKICAgICB3aXRoIFBvcGVuKCpwb3BlbmFyZ3MsIHN0ZG91dD1QSVBFLCAqKmt3YXJncykgYXMgcHJvY2VzczoKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgb3V0cHV0LCB1bnVzZWRfZXJyID0gcHJvY2Vzcy5jb21tdW5pY2F0ZSh0aW1lb3V0PXRpbWVvdXQpCisgICAgICAgICAgICBvdXRwdXQsIHVudXNlZF9lcnIgPSBwcm9jZXNzLmNvbW11bmljYXRlKGlucHV0ZGF0YSwgdGltZW91dD10aW1lb3V0KQogICAgICAgICBleGNlcHQgVGltZW91dEV4cGlyZWQ6CiAgICAgICAgICAgICBwcm9jZXNzLmtpbGwoKQogICAgICAgICAgICAgb3V0cHV0LCB1bnVzZWRfZXJyID0gcHJvY2Vzcy5jb21tdW5pY2F0ZSgpCkBAIC02NjQsMTMgKzY5MiwxNSBAQAogIwogCiBkZWYgZ2V0c3RhdHVzb3V0cHV0KGNtZCk6Ci0gICAgIiIiUmV0dXJuIChzdGF0dXMsIG91dHB1dCkgb2YgZXhlY3V0aW5nIGNtZCBpbiBhIHNoZWxsLgorICAgICIiIiAgICBSZXR1cm4gKHN0YXR1cywgb3V0cHV0KSBvZiBleGVjdXRpbmcgY21kIGluIGEgc2hlbGwuCiAKLSAgICBFeGVjdXRlIHRoZSBzdHJpbmcgJ2NtZCcgaW4gYSBzaGVsbCB3aXRoIG9zLnBvcGVuKCkgYW5kIHJldHVybiBhIDItdHVwbGUKLSAgICAoc3RhdHVzLCBvdXRwdXQpLiAgY21kIGlzIGFjdHVhbGx5IHJ1biBhcyAneyBjbWQgOyB9IDI+JjEnLCBzbyB0aGF0IHRoZQotICAgIHJldHVybmVkIG91dHB1dCB3aWxsIGNvbnRhaW4gb3V0cHV0IG9yIGVycm9yIG1lc3NhZ2VzLiAgQSB0cmFpbGluZyBuZXdsaW5lCi0gICAgaXMgc3RyaXBwZWQgZnJvbSB0aGUgb3V0cHV0LiAgVGhlIGV4aXQgc3RhdHVzIGZvciB0aGUgY29tbWFuZCBjYW4gYmUKLSAgICBpbnRlcnByZXRlZCBhY2NvcmRpbmcgdG8gdGhlIHJ1bGVzIGZvciB0aGUgQyBmdW5jdGlvbiB3YWl0KCkuICBFeGFtcGxlOgorICAgIEV4ZWN1dGUgdGhlIHN0cmluZyAnY21kJyBpbiBhIHNoZWxsIHdpdGggJ2NoZWNrX291dHB1dCcgYW5kCisgICAgcmV0dXJuIGEgMi10dXBsZSAoc3RhdHVzLCBvdXRwdXQpLiBVbml2ZXJzYWwgbmV3bGluZXMgbW9kZSBpcyB1c2VkLAorICAgIG1lYW5pbmcgdGhhdCB0aGUgcmVzdWx0IHdpdGggYmUgZGVjb2RlZCB0byBhIHN0cmluZy4KKworICAgIEEgdHJhaWxpbmcgbmV3bGluZSBpcyBzdHJpcHBlZCBmcm9tIHRoZSBvdXRwdXQuCisgICAgVGhlIGV4aXQgc3RhdHVzIGZvciB0aGUgY29tbWFuZCBjYW4gYmUgaW50ZXJwcmV0ZWQKKyAgICBhY2NvcmRpbmcgdG8gdGhlIHJ1bGVzIGZvciB0aGUgZnVuY3Rpb24gJ3dhaXQnLiBFeGFtcGxlOgogCiAgICAgPj4+IGltcG9ydCBzdWJwcm9jZXNzCiAgICAgPj4+IHN1YnByb2Nlc3MuZ2V0c3RhdHVzb3V0cHV0KCdscyAvYmluL2xzJykKQEAgLTcxOSw2ICs3NDksMTIgQEAKICAgICAgICAgICAgICAgICAgcGFzc19mZHM9KCkpOgogICAgICAgICAiIiJDcmVhdGUgbmV3IFBvcGVuIGluc3RhbmNlLiIiIgogICAgICAgICBfY2xlYW51cCgpCisgICAgICAgICMgSGVsZCB3aGlsZSBhbnl0aGluZyBpcyBjYWxsaW5nIHdhaXRwaWQgYmVmb3JlIHJldHVybmNvZGUgaGFzIGJlZW4KKyAgICAgICAgIyB1cGRhdGVkIHRvIHByZXZlbnQgY2xvYmJlcmluZyByZXR1cm5jb2RlIGlmIHdhaXQoKSBvciBwb2xsKCkgYXJlCisgICAgICAgICMgY2FsbGVkIGZyb20gbXVsdGlwbGUgdGhyZWFkcyBhdCBvbmNlLiAgQWZ0ZXIgYWNxdWlyaW5nIHRoZSBsb2NrLAorICAgICAgICAjIGNvZGUgbXVzdCByZS1jaGVjayBzZWxmLnJldHVybmNvZGUgdG8gc2VlIGlmIGFub3RoZXIgdGhyZWFkIGp1c3QKKyAgICAgICAgIyBmaW5pc2hlZCBhIHdhaXRwaWQoKSBjYWxsLgorICAgICAgICBzZWxmLl93YWl0cGlkX2xvY2sgPSB0aHJlYWRpbmcuTG9jaygpCiAKICAgICAgICAgc2VsZi5faW5wdXQgPSBOb25lCiAgICAgICAgIHNlbGYuX2NvbW11bmljYXRpb25fc3RhcnRlZCA9IEZhbHNlCkBAIC03OTgsNyArODM0LDggQEAKICAgICAgICAgaWYgcDJjd3JpdGUgIT0gLTE6CiAgICAgICAgICAgICBzZWxmLnN0ZGluID0gaW8ub3BlbihwMmN3cml0ZSwgJ3diJywgYnVmc2l6ZSkKICAgICAgICAgICAgIGlmIHVuaXZlcnNhbF9uZXdsaW5lczoKLSAgICAgICAgICAgICAgICBzZWxmLnN0ZGluID0gaW8uVGV4dElPV3JhcHBlcihzZWxmLnN0ZGluLCB3cml0ZV90aHJvdWdoPVRydWUpCisgICAgICAgICAgICAgICAgc2VsZi5zdGRpbiA9IGlvLlRleHRJT1dyYXBwZXIoc2VsZi5zdGRpbiwgd3JpdGVfdGhyb3VnaD1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVfYnVmZmVyaW5nPShidWZzaXplID09IDEpKQogICAgICAgICBpZiBjMnByZWFkICE9IC0xOgogICAgICAgICAgICAgc2VsZi5zdGRvdXQgPSBpby5vcGVuKGMycHJlYWQsICdyYicsIGJ1ZnNpemUpCiAgICAgICAgICAgICBpZiB1bml2ZXJzYWxfbmV3bGluZXM6CkBAIC04MjIsNyArODU5LDcgQEAKICAgICAgICAgICAgIGZvciBmIGluIGZpbHRlcihOb25lLCAoc2VsZi5zdGRpbiwgc2VsZi5zdGRvdXQsIHNlbGYuc3RkZXJyKSk6CiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBmLmNsb3NlKCkKLSAgICAgICAgICAgICAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvcjoKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgcGFzcyAgIyBJZ25vcmUgRUJBREYgb3Igb3RoZXIgZXJyb3JzLgogCiAgICAgICAgICAgICBpZiBub3Qgc2VsZi5fY2xvc2VkX2NoaWxkX3BpcGVfZmRzOgpAQCAtODM4LDcgKzg3NSw3IEBACiAgICAgICAgICAgICAgICAgZm9yIGZkIGluIHRvX2Nsb3NlOgogICAgICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgICAgICBvcy5jbG9zZShmZCkKLSAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEVudmlyb25tZW50RXJyb3I6CisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgICAgICAgICAgcGFzcwogCiAgICAgICAgICAgICByYWlzZQpAQCAtODU2LDEwICs4OTMsMTIgQEAKICAgICAgICAgICAgIHNlbGYuc3Rkb3V0LmNsb3NlKCkKICAgICAgICAgaWYgc2VsZi5zdGRlcnI6CiAgICAgICAgICAgICBzZWxmLnN0ZGVyci5jbG9zZSgpCi0gICAgICAgIGlmIHNlbGYuc3RkaW46Ci0gICAgICAgICAgICBzZWxmLnN0ZGluLmNsb3NlKCkKLSAgICAgICAgIyBXYWl0IGZvciB0aGUgcHJvY2VzcyB0byB0ZXJtaW5hdGUsIHRvIGF2b2lkIHpvbWJpZXMuCi0gICAgICAgIHNlbGYud2FpdCgpCisgICAgICAgIHRyeTogICMgRmx1c2hpbmcgYSBCdWZmZXJlZFdyaXRlciBtYXkgcmFpc2UgYW4gZXJyb3IKKyAgICAgICAgICAgIGlmIHNlbGYuc3RkaW46CisgICAgICAgICAgICAgICAgc2VsZi5zdGRpbi5jbG9zZSgpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAjIFdhaXQgZm9yIHRoZSBwcm9jZXNzIHRvIHRlcm1pbmF0ZSwgdG8gYXZvaWQgem9tYmllcy4KKyAgICAgICAgICAgIHNlbGYud2FpdCgpCiAKICAgICBkZWYgX19kZWxfXyhzZWxmLCBfbWF4c2l6ZT1zeXMubWF4c2l6ZSk6CiAgICAgICAgIGlmIG5vdCBzZWxmLl9jaGlsZF9jcmVhdGVkOgpAQCAtODk5LDcgKzkzOCw3IEBACiAgICAgICAgICAgICAgICAgaWYgaW5wdXQ6CiAgICAgICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc3RkaW4ud3JpdGUoaW5wdXQpCi0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVQSVBFIGFuZCBlLmVycm5vICE9IGVycm5vLkVJTlZBTDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZQogICAgICAgICAgICAgICAgIHNlbGYuc3RkaW4uY2xvc2UoKQpAQCAtMTAzMSwyMyArMTA3MCw2IEBACiAgICAgICAgICAgICByZXR1cm4gSGFuZGxlKGgpCiAKIAotICAgICAgICBkZWYgX2ZpbmRfdzl4cG9wZW4oc2VsZik6Ci0gICAgICAgICAgICAiIiJGaW5kIGFuZCByZXR1cm4gYWJzb2x1dCBwYXRoIHRvIHc5eHBvcGVuLmV4ZSIiIgotICAgICAgICAgICAgdzl4cG9wZW4gPSBvcy5wYXRoLmpvaW4oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5kaXJuYW1lKF93aW5hcGkuR2V0TW9kdWxlRmlsZU5hbWUoMCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInc5eHBvcGVuLmV4ZSIpCi0gICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHModzl4cG9wZW4pOgotICAgICAgICAgICAgICAgICMgRWVlayAtIGZpbGUtbm90LWZvdW5kIC0gcG9zc2libHkgYW4gZW1iZWRkaW5nCi0gICAgICAgICAgICAgICAgIyBzaXR1YXRpb24gLSBzZWUgaWYgd2UgY2FuIGxvY2F0ZSBpdCBpbiBzeXMuZXhlY19wcmVmaXgKLSAgICAgICAgICAgICAgICB3OXhwb3BlbiA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoc3lzLmJhc2VfZXhlY19wcmVmaXgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3OXhwb3Blbi5leGUiKQotICAgICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyh3OXhwb3Blbik6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiQ2Fubm90IGxvY2F0ZSB3OXhwb3Blbi5leGUsIHdoaWNoIGlzICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuZWVkZWQgZm9yIFBvcGVuIHRvIHdvcmsgd2l0aCB5b3VyICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzaGVsbCBvciBwbGF0Zm9ybS4iKQotICAgICAgICAgICAgcmV0dXJuIHc5eHBvcGVuCi0KLQogICAgICAgICBkZWYgX2V4ZWN1dGVfY2hpbGQoc2VsZiwgYXJncywgZXhlY3V0YWJsZSwgcHJlZXhlY19mbiwgY2xvc2VfZmRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzc19mZHMsIGN3ZCwgZW52LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnR1cGluZm8sIGNyZWF0aW9uZmxhZ3MsIHNoZWxsLApAQCAtMTA3NiwyMSArMTA5OCw2IEBACiAgICAgICAgICAgICAgICAgc3RhcnR1cGluZm8ud1Nob3dXaW5kb3cgPSBfd2luYXBpLlNXX0hJREUKICAgICAgICAgICAgICAgICBjb21zcGVjID0gb3MuZW52aXJvbi5nZXQoIkNPTVNQRUMiLCAiY21kLmV4ZSIpCiAgICAgICAgICAgICAgICAgYXJncyA9ICd7fSAvYyAie30iJy5mb3JtYXQgKGNvbXNwZWMsIGFyZ3MpCi0gICAgICAgICAgICAgICAgaWYgKF93aW5hcGkuR2V0VmVyc2lvbigpID49IDB4ODAwMDAwMDAgb3IKLSAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguYmFzZW5hbWUoY29tc3BlYykubG93ZXIoKSA9PSAiY29tbWFuZC5jb20iKToKLSAgICAgICAgICAgICAgICAgICAgIyBXaW45eCwgb3IgdXNpbmcgY29tbWFuZC5jb20gb24gTlQuIFdlIG5lZWQgdG8KLSAgICAgICAgICAgICAgICAgICAgIyB1c2UgdGhlIHc5eHBvcGVuIGludGVybWVkaWF0ZSBwcm9ncmFtLiBGb3IgbW9yZQotICAgICAgICAgICAgICAgICAgICAjIGluZm9ybWF0aW9uLCBzZWUgS0IgUTE1MDk1NgotICAgICAgICAgICAgICAgICAgICAjIChodHRwOi8vd2ViLmFyY2hpdmUub3JnL3dlYi8yMDAxMTEwNTA4NDAwMi9odHRwOi8vc3VwcG9ydC5taWNyb3NvZnQuY29tL3N1cHBvcnQva2IvYXJ0aWNsZXMvUTE1MC85LzU2LmFzcCkKLSAgICAgICAgICAgICAgICAgICAgdzl4cG9wZW4gPSBzZWxmLl9maW5kX3c5eHBvcGVuKCkKLSAgICAgICAgICAgICAgICAgICAgYXJncyA9ICciJXMiICVzJyAlICh3OXhwb3BlbiwgYXJncykKLSAgICAgICAgICAgICAgICAgICAgIyBOb3QgcGFzc2luZyBDUkVBVEVfTkVXX0NPTlNPTEUgaGFzIGJlZW4ga25vd24gdG8KLSAgICAgICAgICAgICAgICAgICAgIyBjYXVzZSByYW5kb20gZmFpbHVyZXMgb24gd2luOXguICBTcGVjaWZpY2FsbHkgYQotICAgICAgICAgICAgICAgICAgICAjIGRpYWxvZzogIllvdXIgcHJvZ3JhbSBhY2Nlc3NlZCBtZW0gY3VycmVudGx5IGluCi0gICAgICAgICAgICAgICAgICAgICMgdXNlIGF0IHh4eCIgYW5kIGEgaG9wZWZ1bCB3YXJuaW5nIGFib3V0IHRoZQotICAgICAgICAgICAgICAgICAgICAjIHN0YWJpbGl0eSBvZiB5b3VyIHN5c3RlbS4gIENvc3QgaXMgQ3RybCtDIHdvbid0Ci0gICAgICAgICAgICAgICAgICAgICMga2lsbCBjaGlsZHJlbi4KLSAgICAgICAgICAgICAgICAgICAgY3JlYXRpb25mbGFncyB8PSBfd2luYXBpLkNSRUFURV9ORVdfQ09OU09MRQogCiAgICAgICAgICAgICAjIFN0YXJ0IHRoZSBwcm9jZXNzCiAgICAgICAgICAgICB0cnk6CkBAIC0xMTAyLDEyICsxMTA5LDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW52LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjd2QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0dXBpbmZvKQotICAgICAgICAgICAgZXhjZXB0IHB5d2ludHlwZXMuZXJyb3IgYXMgZToKLSAgICAgICAgICAgICAgICAjIFRyYW5zbGF0ZSBweXdpbnR5cGVzLmVycm9yIHRvIFdpbmRvd3NFcnJvciwgd2hpY2ggaXMKLSAgICAgICAgICAgICAgICAjIGEgc3ViY2xhc3Mgb2YgT1NFcnJvci4gIEZJWE1FOiBXZSBzaG91bGQgcmVhbGx5Ci0gICAgICAgICAgICAgICAgIyB0cmFuc2xhdGUgZXJybm8gdXNpbmcgX3N5c19lcnJsaXN0IChvciBzaW1pbGFyKSwgYnV0Ci0gICAgICAgICAgICAgICAgIyBob3cgY2FuIHRoaXMgYmUgZG9uZSBmcm9tIFB5dGhvbj8KLSAgICAgICAgICAgICAgICByYWlzZSBXaW5kb3dzRXJyb3IoKmUuYXJncykKICAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgIyBDaGlsZCBpcyBsYXVuY2hlZC4gQ2xvc2UgdGhlIHBhcmVudCdzIGNvcHkgb2YgdGhvc2UgcGlwZQogICAgICAgICAgICAgICAgICMgaGFuZGxlcyB0aGF0IG9ubHkgdGhlIGNoaWxkIHNob3VsZCBoYXZlIG9wZW4uICBZb3UgbmVlZApAQCAtMTE5Miw5ICsxMTkzLDkgQEAKICAgICAgICAgICAgICAgICBpZiBpbnB1dCBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zdGRpbi53cml0ZShpbnB1dCkKLSAgICAgICAgICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gZXJybm8uRVBJUEU6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBpZ25vcmUgcGlwZSBmdWxsIGVycm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBjb21tdW5pY2F0ZSgpIHNob3VsZCBpZ25vcmUgcGlwZSBmdWxsIGVycm9yCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgICAgICAgICAgICAgZWxpZiAoZS5lcnJubyA9PSBlcnJuby5FSU5WQUwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBzZWxmLnBvbGwoKSBpcyBub3QgTm9uZSk6CkBAIC0xMjM3LDggKzEyMzgsMTAgQEAKICAgICAgICAgICAgIHJldHVybiAoc3Rkb3V0LCBzdGRlcnIpCiAKICAgICAgICAgZGVmIHNlbmRfc2lnbmFsKHNlbGYsIHNpZyk6Ci0gICAgICAgICAgICAiIiJTZW5kIGEgc2lnbmFsIHRvIHRoZSBwcm9jZXNzCi0gICAgICAgICAgICAiIiIKKyAgICAgICAgICAgICIiIlNlbmQgYSBzaWduYWwgdG8gdGhlIHByb2Nlc3MuIiIiCisgICAgICAgICAgICAjIERvbid0IHNpZ25hbCBhIHByb2Nlc3MgdGhhdCB3ZSBrbm93IGhhcyBhbHJlYWR5IGRpZWQuCisgICAgICAgICAgICBpZiBzZWxmLnJldHVybmNvZGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgICAgICBpZiBzaWcgPT0gc2lnbmFsLlNJR1RFUk06CiAgICAgICAgICAgICAgICAgc2VsZi50ZXJtaW5hdGUoKQogICAgICAgICAgICAgZWxpZiBzaWcgPT0gc2lnbmFsLkNUUkxfQ19FVkVOVDoKQEAgLTEyNDksOCArMTI1MiwxMCBAQAogICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIlVuc3VwcG9ydGVkIHNpZ25hbDoge30iLmZvcm1hdChzaWcpKQogCiAgICAgICAgIGRlZiB0ZXJtaW5hdGUoc2VsZik6Ci0gICAgICAgICAgICAiIiJUZXJtaW5hdGVzIHRoZSBwcm9jZXNzCi0gICAgICAgICAgICAiIiIKKyAgICAgICAgICAgICIiIlRlcm1pbmF0ZXMgdGhlIHByb2Nlc3MuIiIiCisgICAgICAgICAgICAjIERvbid0IHRlcm1pbmF0ZSBhIHByb2Nlc3MgdGhhdCB3ZSBrbm93IGhhcyBhbHJlYWR5IGRpZWQuCisgICAgICAgICAgICBpZiBzZWxmLnJldHVybmNvZGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgX3dpbmFwaS5UZXJtaW5hdGVQcm9jZXNzKHNlbGYuX2hhbmRsZSwgMSkKICAgICAgICAgICAgIGV4Y2VwdCBQZXJtaXNzaW9uRXJyb3I6CkBAIC0xMjc4LDcgKzEyODMsNyBAQAogICAgICAgICAgICAgaWYgc3RkaW4gaXMgTm9uZToKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICBlbGlmIHN0ZGluID09IFBJUEU6Ci0gICAgICAgICAgICAgICAgcDJjcmVhZCwgcDJjd3JpdGUgPSBfY3JlYXRlX3BpcGUoKQorICAgICAgICAgICAgICAgIHAyY3JlYWQsIHAyY3dyaXRlID0gb3MucGlwZSgpCiAgICAgICAgICAgICBlbGlmIHN0ZGluID09IERFVk5VTEw6CiAgICAgICAgICAgICAgICAgcDJjcmVhZCA9IHNlbGYuX2dldF9kZXZudWxsKCkKICAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShzdGRpbiwgaW50KToKQEAgLTEyOTAsNyArMTI5NSw3IEBACiAgICAgICAgICAgICBpZiBzdGRvdXQgaXMgTm9uZToKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICBlbGlmIHN0ZG91dCA9PSBQSVBFOgotICAgICAgICAgICAgICAgIGMycHJlYWQsIGMycHdyaXRlID0gX2NyZWF0ZV9waXBlKCkKKyAgICAgICAgICAgICAgICBjMnByZWFkLCBjMnB3cml0ZSA9IG9zLnBpcGUoKQogICAgICAgICAgICAgZWxpZiBzdGRvdXQgPT0gREVWTlVMTDoKICAgICAgICAgICAgICAgICBjMnB3cml0ZSA9IHNlbGYuX2dldF9kZXZudWxsKCkKICAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShzdGRvdXQsIGludCk6CkBAIC0xMzAyLDcgKzEzMDcsNyBAQAogICAgICAgICAgICAgaWYgc3RkZXJyIGlzIE5vbmU6CiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgZWxpZiBzdGRlcnIgPT0gUElQRToKLSAgICAgICAgICAgICAgICBlcnJyZWFkLCBlcnJ3cml0ZSA9IF9jcmVhdGVfcGlwZSgpCisgICAgICAgICAgICAgICAgZXJycmVhZCwgZXJyd3JpdGUgPSBvcy5waXBlKCkKICAgICAgICAgICAgIGVsaWYgc3RkZXJyID09IFNURE9VVDoKICAgICAgICAgICAgICAgICBlcnJ3cml0ZSA9IGMycHdyaXRlCiAgICAgICAgICAgICBlbGlmIHN0ZGVyciA9PSBERVZOVUxMOgpAQCAtMTM1NCw3ICsxMzU5LDE0IEBACiAgICAgICAgICAgICAjIEZvciB0cmFuc2ZlcnJpbmcgcG9zc2libGUgZXhlYyBmYWlsdXJlIGZyb20gY2hpbGQgdG8gcGFyZW50LgogICAgICAgICAgICAgIyBEYXRhIGZvcm1hdDogImV4Y2VwdGlvbiBuYW1lOmhleCBlcnJubzpkZXNjcmlwdGlvbiIKICAgICAgICAgICAgICMgUGlja2xlIGlzIG5vdCB1c2VkOyBpdCBpcyBjb21wbGV4IGFuZCBpbnZvbHZlcyBtZW1vcnkgYWxsb2NhdGlvbi4KLSAgICAgICAgICAgIGVycnBpcGVfcmVhZCwgZXJycGlwZV93cml0ZSA9IF9jcmVhdGVfcGlwZSgpCisgICAgICAgICAgICBlcnJwaXBlX3JlYWQsIGVycnBpcGVfd3JpdGUgPSBvcy5waXBlKCkKKyAgICAgICAgICAgICMgZXJycGlwZV93cml0ZSBtdXN0IG5vdCBiZSBpbiB0aGUgc3RhbmRhcmQgaW8gMCwgMSwgb3IgMiBmZCByYW5nZS4KKyAgICAgICAgICAgIGxvd19mZHNfdG9fY2xvc2UgPSBbXQorICAgICAgICAgICAgd2hpbGUgZXJycGlwZV93cml0ZSA8IDM6CisgICAgICAgICAgICAgICAgbG93X2Zkc190b19jbG9zZS5hcHBlbmQoZXJycGlwZV93cml0ZSkKKyAgICAgICAgICAgICAgICBlcnJwaXBlX3dyaXRlID0gb3MuZHVwKGVycnBpcGVfd3JpdGUpCisgICAgICAgICAgICBmb3IgbG93X2ZkIGluIGxvd19mZHNfdG9fY2xvc2U6CisgICAgICAgICAgICAgICAgb3MuY2xvc2UobG93X2ZkKQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgIyBXZSBtdXN0IGF2b2lkIGNvbXBsZXggd29yayB0aGF0IGNvdWxkIGludm9sdmUKQEAgLTE0MjQsMTMgKzE0MzYsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uX25hbWUsIGhleF9lcnJubywgZXJyX21zZyA9ICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJwaXBlX2RhdGEuc3BsaXQoYic6JywgMikpCiAgICAgICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbl9uYW1lID0gYidSdW50aW1lRXJyb3InCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbl9uYW1lID0gYidTdWJwcm9jZXNzRXJyb3InCiAgICAgICAgICAgICAgICAgICAgIGhleF9lcnJubyA9IGInMCcKICAgICAgICAgICAgICAgICAgICAgZXJyX21zZyA9IChiJ0JhZCBleGNlcHRpb24gZGF0YSBmcm9tIGNoaWxkOiAnICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXByKGVycnBpcGVfZGF0YSkpCiAgICAgICAgICAgICAgICAgY2hpbGRfZXhjZXB0aW9uX3R5cGUgPSBnZXRhdHRyKAogICAgICAgICAgICAgICAgICAgICAgICAgYnVpbHRpbnMsIGV4Y2VwdGlvbl9uYW1lLmRlY29kZSgnYXNjaWknKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFJ1bnRpbWVFcnJvcikKKyAgICAgICAgICAgICAgICAgICAgICAgIFN1YnByb2Nlc3NFcnJvcikKICAgICAgICAgICAgICAgICBlcnJfbXNnID0gZXJyX21zZy5kZWNvZGUoZXJyb3JzPSJzdXJyb2dhdGVwYXNzIikKICAgICAgICAgICAgICAgICBpZiBpc3N1YmNsYXNzKGNoaWxkX2V4Y2VwdGlvbl90eXBlLCBPU0Vycm9yKSBhbmQgaGV4X2Vycm5vOgogICAgICAgICAgICAgICAgICAgICBlcnJub19udW0gPSBpbnQoaGV4X2Vycm5vLCAxNikKQEAgLTE0NTIsNiArMTQ2NCw3IEBACiAgICAgICAgIGRlZiBfaGFuZGxlX2V4aXRzdGF0dXMoc2VsZiwgc3RzLCBfV0lGU0lHTkFMRUQ9b3MuV0lGU0lHTkFMRUQsCiAgICAgICAgICAgICAgICAgX1dURVJNU0lHPW9zLldURVJNU0lHLCBfV0lGRVhJVEVEPW9zLldJRkVYSVRFRCwKICAgICAgICAgICAgICAgICBfV0VYSVRTVEFUVVM9b3MuV0VYSVRTVEFUVVMpOgorICAgICAgICAgICAgIiIiQWxsIGNhbGxlcnMgdG8gdGhpcyBmdW5jdGlvbiBNVVNUIGhvbGQgc2VsZi5fd2FpdHBpZF9sb2NrLiIiIgogICAgICAgICAgICAgIyBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgKGluZGlyZWN0bHkpIGJ5IF9fZGVsX18sIHNvIGl0IGNhbm5vdAogICAgICAgICAgICAgIyByZWZlciB0byBhbnl0aGluZyBvdXRzaWRlIG9mIGl0cyBsb2NhbCBzY29wZS4KICAgICAgICAgICAgIGlmIF9XSUZTSUdOQUxFRChzdHMpOgpAQCAtMTQ2MCwxMSArMTQ3MywxMSBAQAogICAgICAgICAgICAgICAgIHNlbGYucmV0dXJuY29kZSA9IF9XRVhJVFNUQVRVUyhzdHMpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICMgU2hvdWxkIG5ldmVyIGhhcHBlbgotICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiVW5rbm93biBjaGlsZCBleGl0IHN0YXR1cyEiKQorICAgICAgICAgICAgICAgIHJhaXNlIFN1YnByb2Nlc3NFcnJvcigiVW5rbm93biBjaGlsZCBleGl0IHN0YXR1cyEiKQogCiAKICAgICAgICAgZGVmIF9pbnRlcm5hbF9wb2xsKHNlbGYsIF9kZWFkc3RhdGU9Tm9uZSwgX3dhaXRwaWQ9b3Mud2FpdHBpZCwKLSAgICAgICAgICAgICAgICBfV05PSEFORz1vcy5XTk9IQU5HLCBfb3NfZXJyb3I9b3MuZXJyb3IsIF9FQ0hJTEQ9ZXJybm8uRUNISUxEKToKKyAgICAgICAgICAgICAgICBfV05PSEFORz1vcy5XTk9IQU5HLCBfRUNISUxEPWVycm5vLkVDSElMRCk6CiAgICAgICAgICAgICAiIiJDaGVjayBpZiBjaGlsZCBwcm9jZXNzIGhhcyB0ZXJtaW5hdGVkLiAgUmV0dXJucyByZXR1cm5jb2RlCiAgICAgICAgICAgICBhdHRyaWJ1dGUuCiAKQEAgLTE0NzMsMTEgKzE0ODYsMTcgQEAKIAogICAgICAgICAgICAgIiIiCiAgICAgICAgICAgICBpZiBzZWxmLnJldHVybmNvZGUgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5fd2FpdHBpZF9sb2NrLmFjcXVpcmUoRmFsc2UpOgorICAgICAgICAgICAgICAgICAgICAjIFNvbWV0aGluZyBlbHNlIGlzIGJ1c3kgY2FsbGluZyB3YWl0cGlkLiAgRG9uJ3QgYWxsb3cgdHdvCisgICAgICAgICAgICAgICAgICAgICMgYXQgb25jZS4gIFdlIGtub3cgbm90aGluZyB5ZXQuCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25lCiAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLnJldHVybmNvZGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5yZXR1cm5jb2RlICAjIEFub3RoZXIgdGhyZWFkIHdhaXRlZC4KICAgICAgICAgICAgICAgICAgICAgcGlkLCBzdHMgPSBfd2FpdHBpZChzZWxmLnBpZCwgX1dOT0hBTkcpCiAgICAgICAgICAgICAgICAgICAgIGlmIHBpZCA9PSBzZWxmLnBpZDoKICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2hhbmRsZV9leGl0c3RhdHVzKHN0cykKLSAgICAgICAgICAgICAgICBleGNlcHQgX29zX2Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgICAgICAgICAgaWYgX2RlYWRzdGF0ZSBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucmV0dXJuY29kZSA9IF9kZWFkc3RhdGUKICAgICAgICAgICAgICAgICAgICAgZWxpZiBlLmVycm5vID09IF9FQ0hJTEQ6CkBAIC0xNDg3LDEwICsxNTA2LDEzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAjIGNhbid0IGdldCB0aGUgc3RhdHVzLgogICAgICAgICAgICAgICAgICAgICAgICAgIyBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTU3NTYKICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucmV0dXJuY29kZSA9IDAKKyAgICAgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgICAgICBzZWxmLl93YWl0cGlkX2xvY2sucmVsZWFzZSgpCiAgICAgICAgICAgICByZXR1cm4gc2VsZi5yZXR1cm5jb2RlCiAKIAogICAgICAgICBkZWYgX3RyeV93YWl0KHNlbGYsIHdhaXRfZmxhZ3MpOgorICAgICAgICAgICAgIiIiQWxsIGNhbGxlcnMgdG8gdGhpcyBmdW5jdGlvbiBNVVNUIGhvbGQgc2VsZi5fd2FpdHBpZF9sb2NrLiIiIgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIChwaWQsIHN0cykgPSBfZWludHJfcmV0cnlfY2FsbChvcy53YWl0cGlkLCBzZWxmLnBpZCwgd2FpdF9mbGFncykKICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CkBAIC0xNTIzLDExICsxNTQ1LDE3IEBACiAgICAgICAgICAgICAgICAgIyBjcmliYmVkIGZyb20gTGliL3RocmVhZGluZy5weSBpbiBUaHJlYWQud2FpdCgpIGF0IHI3MTA2NS4KICAgICAgICAgICAgICAgICBkZWxheSA9IDAuMDAwNSAjIDUwMCB1cyAtPiBpbml0aWFsIGRlbGF5IG9mIDEgbXMKICAgICAgICAgICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgICAgICAgICAocGlkLCBzdHMpID0gc2VsZi5fdHJ5X3dhaXQob3MuV05PSEFORykKLSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IHBpZCA9PSBzZWxmLnBpZCBvciBwaWQgPT0gMAotICAgICAgICAgICAgICAgICAgICBpZiBwaWQgPT0gc2VsZi5waWQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9oYW5kbGVfZXhpdHN0YXR1cyhzdHMpCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLl93YWl0cGlkX2xvY2suYWNxdWlyZShGYWxzZSk6CisgICAgICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5yZXR1cm5jb2RlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayAgIyBBbm90aGVyIHRocmVhZCB3YWl0ZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBpZCwgc3RzKSA9IHNlbGYuX3RyeV93YWl0KG9zLldOT0hBTkcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IHBpZCA9PSBzZWxmLnBpZCBvciBwaWQgPT0gMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHBpZCA9PSBzZWxmLnBpZDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5faGFuZGxlX2V4aXRzdGF0dXMoc3RzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl93YWl0cGlkX2xvY2sucmVsZWFzZSgpCiAgICAgICAgICAgICAgICAgICAgIHJlbWFpbmluZyA9IHNlbGYuX3JlbWFpbmluZ190aW1lKGVuZHRpbWUpCiAgICAgICAgICAgICAgICAgICAgIGlmIHJlbWFpbmluZyA8PSAwOgogICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgVGltZW91dEV4cGlyZWQoc2VsZi5hcmdzLCB0aW1lb3V0KQpAQCAtMTUzNSwxMSArMTU2MywxNSBAQAogICAgICAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKGRlbGF5KQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICB3aGlsZSBzZWxmLnJldHVybmNvZGUgaXMgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgKHBpZCwgc3RzKSA9IHNlbGYuX3RyeV93YWl0KDApCi0gICAgICAgICAgICAgICAgICAgICMgQ2hlY2sgdGhlIHBpZCBhbmQgbG9vcCBhcyB3YWl0cGlkIGhhcyBiZWVuIGtub3duIHRvIHJldHVybgotICAgICAgICAgICAgICAgICAgICAjIDAgZXZlbiB3aXRob3V0IFdOT0hBTkcgaW4gb2RkIHNpdHVhdGlvbnMuICBpc3N1ZTE0Mzk2LgotICAgICAgICAgICAgICAgICAgICBpZiBwaWQgPT0gc2VsZi5waWQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9oYW5kbGVfZXhpdHN0YXR1cyhzdHMpCisgICAgICAgICAgICAgICAgICAgIHdpdGggc2VsZi5fd2FpdHBpZF9sb2NrOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5yZXR1cm5jb2RlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrICAjIEFub3RoZXIgdGhyZWFkIHdhaXRlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIChwaWQsIHN0cykgPSBzZWxmLl90cnlfd2FpdCgwKQorICAgICAgICAgICAgICAgICAgICAgICAgIyBDaGVjayB0aGUgcGlkIGFuZCBsb29wIGFzIHdhaXRwaWQgaGFzIGJlZW4ga25vd24gdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICMgcmV0dXJuIDAgZXZlbiB3aXRob3V0IFdOT0hBTkcgaW4gb2RkIHNpdHVhdGlvbnMuCisgICAgICAgICAgICAgICAgICAgICAgICAjIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxNDM5Ni4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHBpZCA9PSBzZWxmLnBpZDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9oYW5kbGVfZXhpdHN0YXR1cyhzdHMpCiAgICAgICAgICAgICByZXR1cm4gc2VsZi5yZXR1cm5jb2RlCiAKIApAQCAtMTU1MSwxMiArMTU4Myw2OCBAQAogICAgICAgICAgICAgICAgIGlmIG5vdCBpbnB1dDoKICAgICAgICAgICAgICAgICAgICAgc2VsZi5zdGRpbi5jbG9zZSgpCiAKLSAgICAgICAgICAgIGlmIF9oYXNfcG9sbDoKLSAgICAgICAgICAgICAgICBzdGRvdXQsIHN0ZGVyciA9IHNlbGYuX2NvbW11bmljYXRlX3dpdGhfcG9sbChpbnB1dCwgZW5kdGltZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnX3RpbWVvdXQpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHN0ZG91dCwgc3RkZXJyID0gc2VsZi5fY29tbXVuaWNhdGVfd2l0aF9zZWxlY3QoaW5wdXQsIGVuZHRpbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnX3RpbWVvdXQpCisgICAgICAgICAgICBzdGRvdXQgPSBOb25lCisgICAgICAgICAgICBzdGRlcnIgPSBOb25lCisKKyAgICAgICAgICAgICMgT25seSBjcmVhdGUgdGhpcyBtYXBwaW5nIGlmIHdlIGhhdmVuJ3QgYWxyZWFkeS4KKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9jb21tdW5pY2F0aW9uX3N0YXJ0ZWQ6CisgICAgICAgICAgICAgICAgc2VsZi5fZmlsZW9iajJvdXRwdXQgPSB7fQorICAgICAgICAgICAgICAgIGlmIHNlbGYuc3Rkb3V0OgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9maWxlb2JqMm91dHB1dFtzZWxmLnN0ZG91dF0gPSBbXQorICAgICAgICAgICAgICAgIGlmIHNlbGYuc3RkZXJyOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9maWxlb2JqMm91dHB1dFtzZWxmLnN0ZGVycl0gPSBbXQorCisgICAgICAgICAgICBpZiBzZWxmLnN0ZG91dDoKKyAgICAgICAgICAgICAgICBzdGRvdXQgPSBzZWxmLl9maWxlb2JqMm91dHB1dFtzZWxmLnN0ZG91dF0KKyAgICAgICAgICAgIGlmIHNlbGYuc3RkZXJyOgorICAgICAgICAgICAgICAgIHN0ZGVyciA9IHNlbGYuX2ZpbGVvYmoyb3V0cHV0W3NlbGYuc3RkZXJyXQorCisgICAgICAgICAgICBzZWxmLl9zYXZlX2lucHV0KGlucHV0KQorCisgICAgICAgICAgICBpZiBzZWxmLl9pbnB1dDoKKyAgICAgICAgICAgICAgICBpbnB1dF92aWV3ID0gbWVtb3J5dmlldyhzZWxmLl9pbnB1dCkKKworICAgICAgICAgICAgd2l0aCBfUG9wZW5TZWxlY3RvcigpIGFzIHNlbGVjdG9yOgorICAgICAgICAgICAgICAgIGlmIHNlbGYuc3RkaW4gYW5kIGlucHV0OgorICAgICAgICAgICAgICAgICAgICBzZWxlY3Rvci5yZWdpc3RlcihzZWxmLnN0ZGluLCBzZWxlY3RvcnMuRVZFTlRfV1JJVEUpCisgICAgICAgICAgICAgICAgaWYgc2VsZi5zdGRvdXQ6CisgICAgICAgICAgICAgICAgICAgIHNlbGVjdG9yLnJlZ2lzdGVyKHNlbGYuc3Rkb3V0LCBzZWxlY3RvcnMuRVZFTlRfUkVBRCkKKyAgICAgICAgICAgICAgICBpZiBzZWxmLnN0ZGVycjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3IucmVnaXN0ZXIoc2VsZi5zdGRlcnIsIHNlbGVjdG9ycy5FVkVOVF9SRUFEKQorCisgICAgICAgICAgICAgICAgd2hpbGUgc2VsZWN0b3IuZ2V0X21hcCgpOgorICAgICAgICAgICAgICAgICAgICB0aW1lb3V0ID0gc2VsZi5fcmVtYWluaW5nX3RpbWUoZW5kdGltZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgdGltZW91dCBpcyBub3QgTm9uZSBhbmQgdGltZW91dCA8IDA6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBUaW1lb3V0RXhwaXJlZChzZWxmLmFyZ3MsIG9yaWdfdGltZW91dCkKKworICAgICAgICAgICAgICAgICAgICByZWFkeSA9IHNlbGVjdG9yLnNlbGVjdCh0aW1lb3V0KQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9jaGVja190aW1lb3V0KGVuZHRpbWUsIG9yaWdfdGltZW91dCkKKworICAgICAgICAgICAgICAgICAgICAjIFhYWCBSZXdyaXRlIHRoZXNlIHRvIHVzZSBub24tYmxvY2tpbmcgSS9PIG9uIHRoZSBmaWxlCisgICAgICAgICAgICAgICAgICAgICMgb2JqZWN0czsgdGhleSBhcmUgbm8gbG9uZ2VyIHVzaW5nIEMgc3RkaW8hCisKKyAgICAgICAgICAgICAgICAgICAgZm9yIGtleSwgZXZlbnRzIGluIHJlYWR5OgorICAgICAgICAgICAgICAgICAgICAgICAgaWYga2V5LmZpbGVvYmogaXMgc2VsZi5zdGRpbjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaHVuayA9IGlucHV0X3ZpZXdbc2VsZi5faW5wdXRfb2Zmc2V0IDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5faW5wdXRfb2Zmc2V0ICsgX1BJUEVfQlVGXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5faW5wdXRfb2Zmc2V0ICs9IG9zLndyaXRlKGtleS5mZCwgY2h1bmspCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FUElQRToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdG9yLnVucmVnaXN0ZXIoa2V5LmZpbGVvYmopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXkuZmlsZW9iai5jbG9zZSgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuX2lucHV0X29mZnNldCA+PSBsZW4oc2VsZi5faW5wdXQpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3IudW5yZWdpc3RlcihrZXkuZmlsZW9iaikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleS5maWxlb2JqLmNsb3NlKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsaWYga2V5LmZpbGVvYmogaW4gKHNlbGYuc3Rkb3V0LCBzZWxmLnN0ZGVycik6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IG9zLnJlYWQoa2V5LmZkLCAzMjc2OCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgZGF0YToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3IudW5yZWdpc3RlcihrZXkuZmlsZW9iaikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5LmZpbGVvYmouY2xvc2UoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGVvYmoyb3V0cHV0W2tleS5maWxlb2JqXS5hcHBlbmQoZGF0YSkKIAogICAgICAgICAgICAgc2VsZi53YWl0KHRpbWVvdXQ9c2VsZi5fcmVtYWluaW5nX3RpbWUoZW5kdGltZSkpCiAKQEAgLTE1OTAsMTc0ICsxNjc4LDExIEBACiAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2lucHV0ID0gc2VsZi5faW5wdXQuZW5jb2RlKHNlbGYuc3RkaW4uZW5jb2RpbmcpCiAKIAotICAgICAgICBkZWYgX2NvbW11bmljYXRlX3dpdGhfcG9sbChzZWxmLCBpbnB1dCwgZW5kdGltZSwgb3JpZ190aW1lb3V0KToKLSAgICAgICAgICAgIHN0ZG91dCA9IE5vbmUgIyBSZXR1cm4KLSAgICAgICAgICAgIHN0ZGVyciA9IE5vbmUgIyBSZXR1cm4KLQotICAgICAgICAgICAgaWYgbm90IHNlbGYuX2NvbW11bmljYXRpb25fc3RhcnRlZDoKLSAgICAgICAgICAgICAgICBzZWxmLl9mZDJmaWxlID0ge30KLQotICAgICAgICAgICAgcG9sbGVyID0gc2VsZWN0LnBvbGwoKQotICAgICAgICAgICAgZGVmIHJlZ2lzdGVyX2FuZF9hcHBlbmQoZmlsZV9vYmosIGV2ZW50bWFzayk6Ci0gICAgICAgICAgICAgICAgcG9sbGVyLnJlZ2lzdGVyKGZpbGVfb2JqLmZpbGVubygpLCBldmVudG1hc2spCi0gICAgICAgICAgICAgICAgc2VsZi5fZmQyZmlsZVtmaWxlX29iai5maWxlbm8oKV0gPSBmaWxlX29iagotCi0gICAgICAgICAgICBkZWYgY2xvc2VfdW5yZWdpc3Rlcl9hbmRfcmVtb3ZlKGZkKToKLSAgICAgICAgICAgICAgICBwb2xsZXIudW5yZWdpc3RlcihmZCkKLSAgICAgICAgICAgICAgICBzZWxmLl9mZDJmaWxlW2ZkXS5jbG9zZSgpCi0gICAgICAgICAgICAgICAgc2VsZi5fZmQyZmlsZS5wb3AoZmQpCi0KLSAgICAgICAgICAgIGlmIHNlbGYuc3RkaW4gYW5kIGlucHV0OgotICAgICAgICAgICAgICAgIHJlZ2lzdGVyX2FuZF9hcHBlbmQoc2VsZi5zdGRpbiwgc2VsZWN0LlBPTExPVVQpCi0KLSAgICAgICAgICAgICMgT25seSBjcmVhdGUgdGhpcyBtYXBwaW5nIGlmIHdlIGhhdmVuJ3QgYWxyZWFkeS4KLSAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9jb21tdW5pY2F0aW9uX3N0YXJ0ZWQ6Ci0gICAgICAgICAgICAgICAgc2VsZi5fZmQyb3V0cHV0ID0ge30KLSAgICAgICAgICAgICAgICBpZiBzZWxmLnN0ZG91dDoKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fZmQyb3V0cHV0W3NlbGYuc3Rkb3V0LmZpbGVubygpXSA9IFtdCi0gICAgICAgICAgICAgICAgaWYgc2VsZi5zdGRlcnI6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuX2ZkMm91dHB1dFtzZWxmLnN0ZGVyci5maWxlbm8oKV0gPSBbXQotCi0gICAgICAgICAgICBzZWxlY3RfUE9MTElOX1BPTExQUkkgPSBzZWxlY3QuUE9MTElOIHwgc2VsZWN0LlBPTExQUkkKLSAgICAgICAgICAgIGlmIHNlbGYuc3Rkb3V0OgotICAgICAgICAgICAgICAgIHJlZ2lzdGVyX2FuZF9hcHBlbmQoc2VsZi5zdGRvdXQsIHNlbGVjdF9QT0xMSU5fUE9MTFBSSSkKLSAgICAgICAgICAgICAgICBzdGRvdXQgPSBzZWxmLl9mZDJvdXRwdXRbc2VsZi5zdGRvdXQuZmlsZW5vKCldCi0gICAgICAgICAgICBpZiBzZWxmLnN0ZGVycjoKLSAgICAgICAgICAgICAgICByZWdpc3Rlcl9hbmRfYXBwZW5kKHNlbGYuc3RkZXJyLCBzZWxlY3RfUE9MTElOX1BPTExQUkkpCi0gICAgICAgICAgICAgICAgc3RkZXJyID0gc2VsZi5fZmQyb3V0cHV0W3NlbGYuc3RkZXJyLmZpbGVubygpXQotCi0gICAgICAgICAgICBzZWxmLl9zYXZlX2lucHV0KGlucHV0KQotCi0gICAgICAgICAgICBpZiBzZWxmLl9pbnB1dDoKLSAgICAgICAgICAgICAgICBpbnB1dF92aWV3ID0gbWVtb3J5dmlldyhzZWxmLl9pbnB1dCkKLQotICAgICAgICAgICAgd2hpbGUgc2VsZi5fZmQyZmlsZToKLSAgICAgICAgICAgICAgICB0aW1lb3V0ID0gc2VsZi5fcmVtYWluaW5nX3RpbWUoZW5kdGltZSkKLSAgICAgICAgICAgICAgICBpZiB0aW1lb3V0IGlzIG5vdCBOb25lIGFuZCB0aW1lb3V0IDwgMDoKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgVGltZW91dEV4cGlyZWQoc2VsZi5hcmdzLCBvcmlnX3RpbWVvdXQpCi0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICByZWFkeSA9IHBvbGxlci5wb2xsKHRpbWVvdXQpCi0gICAgICAgICAgICAgICAgZXhjZXB0IHNlbGVjdC5lcnJvciBhcyBlOgotICAgICAgICAgICAgICAgICAgICBpZiBlLmFyZ3NbMF0gPT0gZXJybm8uRUlOVFI6Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgICAgICAgICByYWlzZQotICAgICAgICAgICAgICAgIHNlbGYuX2NoZWNrX3RpbWVvdXQoZW5kdGltZSwgb3JpZ190aW1lb3V0KQotCi0gICAgICAgICAgICAgICAgIyBYWFggUmV3cml0ZSB0aGVzZSB0byB1c2Ugbm9uLWJsb2NraW5nIEkvTyBvbiB0aGUKLSAgICAgICAgICAgICAgICAjIGZpbGUgb2JqZWN0czsgdGhleSBhcmUgbm8gbG9uZ2VyIHVzaW5nIEMgc3RkaW8hCi0KLSAgICAgICAgICAgICAgICBmb3IgZmQsIG1vZGUgaW4gcmVhZHk6Ci0gICAgICAgICAgICAgICAgICAgIGlmIG1vZGUgJiBzZWxlY3QuUE9MTE9VVDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rID0gaW5wdXRfdmlld1tzZWxmLl9pbnB1dF9vZmZzZXQgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2lucHV0X29mZnNldCArIF9QSVBFX0JVRl0KLSAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9pbnB1dF9vZmZzZXQgKz0gb3Mud3JpdGUoZmQsIGNodW5rKQotICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBlLmVycm5vID09IGVycm5vLkVQSVBFOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZV91bnJlZ2lzdGVyX2FuZF9yZW1vdmUoZmQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5faW5wdXRfb2Zmc2V0ID49IGxlbihzZWxmLl9pbnB1dCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlX3VucmVnaXN0ZXJfYW5kX3JlbW92ZShmZCkKLSAgICAgICAgICAgICAgICAgICAgZWxpZiBtb2RlICYgc2VsZWN0X1BPTExJTl9QT0xMUFJJOgotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IG9zLnJlYWQoZmQsIDMyNzY4KQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGRhdGE6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2VfdW5yZWdpc3Rlcl9hbmRfcmVtb3ZlKGZkKQotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZmQyb3V0cHV0W2ZkXS5hcHBlbmQoZGF0YSkKLSAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgICMgSWdub3JlIGhhbmcgdXAgb3IgZXJyb3JzLgotICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2VfdW5yZWdpc3Rlcl9hbmRfcmVtb3ZlKGZkKQotCi0gICAgICAgICAgICByZXR1cm4gKHN0ZG91dCwgc3RkZXJyKQotCi0KLSAgICAgICAgZGVmIF9jb21tdW5pY2F0ZV93aXRoX3NlbGVjdChzZWxmLCBpbnB1dCwgZW5kdGltZSwgb3JpZ190aW1lb3V0KToKLSAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9jb21tdW5pY2F0aW9uX3N0YXJ0ZWQ6Ci0gICAgICAgICAgICAgICAgc2VsZi5fcmVhZF9zZXQgPSBbXQotICAgICAgICAgICAgICAgIHNlbGYuX3dyaXRlX3NldCA9IFtdCi0gICAgICAgICAgICAgICAgaWYgc2VsZi5zdGRpbiBhbmQgaW5wdXQ6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuX3dyaXRlX3NldC5hcHBlbmQoc2VsZi5zdGRpbikKLSAgICAgICAgICAgICAgICBpZiBzZWxmLnN0ZG91dDoKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fcmVhZF9zZXQuYXBwZW5kKHNlbGYuc3Rkb3V0KQotICAgICAgICAgICAgICAgIGlmIHNlbGYuc3RkZXJyOgotICAgICAgICAgICAgICAgICAgICBzZWxmLl9yZWFkX3NldC5hcHBlbmQoc2VsZi5zdGRlcnIpCi0KLSAgICAgICAgICAgIHNlbGYuX3NhdmVfaW5wdXQoaW5wdXQpCi0KLSAgICAgICAgICAgIHN0ZG91dCA9IE5vbmUgIyBSZXR1cm4KLSAgICAgICAgICAgIHN0ZGVyciA9IE5vbmUgIyBSZXR1cm4KLQotICAgICAgICAgICAgaWYgc2VsZi5zdGRvdXQ6Ci0gICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuX2NvbW11bmljYXRpb25fc3RhcnRlZDoKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fc3Rkb3V0X2J1ZmYgPSBbXQotICAgICAgICAgICAgICAgIHN0ZG91dCA9IHNlbGYuX3N0ZG91dF9idWZmCi0gICAgICAgICAgICBpZiBzZWxmLnN0ZGVycjoKLSAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5fY29tbXVuaWNhdGlvbl9zdGFydGVkOgotICAgICAgICAgICAgICAgICAgICBzZWxmLl9zdGRlcnJfYnVmZiA9IFtdCi0gICAgICAgICAgICAgICAgc3RkZXJyID0gc2VsZi5fc3RkZXJyX2J1ZmYKLQotICAgICAgICAgICAgd2hpbGUgc2VsZi5fcmVhZF9zZXQgb3Igc2VsZi5fd3JpdGVfc2V0OgotICAgICAgICAgICAgICAgIHRpbWVvdXQgPSBzZWxmLl9yZW1haW5pbmdfdGltZShlbmR0aW1lKQotICAgICAgICAgICAgICAgIGlmIHRpbWVvdXQgaXMgbm90IE5vbmUgYW5kIHRpbWVvdXQgPCAwOgotICAgICAgICAgICAgICAgICAgICByYWlzZSBUaW1lb3V0RXhwaXJlZChzZWxmLmFyZ3MsIG9yaWdfdGltZW91dCkKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIChybGlzdCwgd2xpc3QsIHhsaXN0KSA9IFwKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdC5zZWxlY3Qoc2VsZi5fcmVhZF9zZXQsIHNlbGYuX3dyaXRlX3NldCwgW10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQpCi0gICAgICAgICAgICAgICAgZXhjZXB0IHNlbGVjdC5lcnJvciBhcyBlOgotICAgICAgICAgICAgICAgICAgICBpZiBlLmFyZ3NbMF0gPT0gZXJybm8uRUlOVFI6Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgICAgICAgICByYWlzZQotCi0gICAgICAgICAgICAgICAgIyBBY2NvcmRpbmcgdG8gdGhlIGRvY3MsIHJldHVybmluZyB0aHJlZSBlbXB0eSBsaXN0cyBpbmRpY2F0ZXMKLSAgICAgICAgICAgICAgICAjIHRoYXQgdGhlIHRpbWVvdXQgZXhwaXJlZC4KLSAgICAgICAgICAgICAgICBpZiBub3QgKHJsaXN0IG9yIHdsaXN0IG9yIHhsaXN0KToKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgVGltZW91dEV4cGlyZWQoc2VsZi5hcmdzLCBvcmlnX3RpbWVvdXQpCi0gICAgICAgICAgICAgICAgIyBXZSBhbHNvIGNoZWNrIHdoYXQgdGltZSBpdCBpcyBvdXJzZWx2ZXMgZm9yIGdvb2QgbWVhc3VyZS4KLSAgICAgICAgICAgICAgICBzZWxmLl9jaGVja190aW1lb3V0KGVuZHRpbWUsIG9yaWdfdGltZW91dCkKLQotICAgICAgICAgICAgICAgICMgWFhYIFJld3JpdGUgdGhlc2UgdG8gdXNlIG5vbi1ibG9ja2luZyBJL08gb24gdGhlCi0gICAgICAgICAgICAgICAgIyBmaWxlIG9iamVjdHM7IHRoZXkgYXJlIG5vIGxvbmdlciB1c2luZyBDIHN0ZGlvIQotCi0gICAgICAgICAgICAgICAgaWYgc2VsZi5zdGRpbiBpbiB3bGlzdDoKLSAgICAgICAgICAgICAgICAgICAgY2h1bmsgPSBzZWxmLl9pbnB1dFtzZWxmLl9pbnB1dF9vZmZzZXQgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2lucHV0X29mZnNldCArIF9QSVBFX0JVRl0KLSAgICAgICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXNfd3JpdHRlbiA9IG9zLndyaXRlKHNlbGYuc3RkaW4uZmlsZW5vKCksIGNodW5rKQotICAgICAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FUElQRToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnN0ZGluLmNsb3NlKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl93cml0ZV9zZXQucmVtb3ZlKHNlbGYuc3RkaW4pCi0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9pbnB1dF9vZmZzZXQgKz0gYnl0ZXNfd3JpdHRlbgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5faW5wdXRfb2Zmc2V0ID49IGxlbihzZWxmLl9pbnB1dCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zdGRpbi5jbG9zZSgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fd3JpdGVfc2V0LnJlbW92ZShzZWxmLnN0ZGluKQotCi0gICAgICAgICAgICAgICAgaWYgc2VsZi5zdGRvdXQgaW4gcmxpc3Q6Ci0gICAgICAgICAgICAgICAgICAgIGRhdGEgPSBvcy5yZWFkKHNlbGYuc3Rkb3V0LmZpbGVubygpLCAxMDI0KQotICAgICAgICAgICAgICAgICAgICBpZiBub3QgZGF0YToKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc3Rkb3V0LmNsb3NlKCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3JlYWRfc2V0LnJlbW92ZShzZWxmLnN0ZG91dCkKLSAgICAgICAgICAgICAgICAgICAgc3Rkb3V0LmFwcGVuZChkYXRhKQotCi0gICAgICAgICAgICAgICAgaWYgc2VsZi5zdGRlcnIgaW4gcmxpc3Q6Ci0gICAgICAgICAgICAgICAgICAgIGRhdGEgPSBvcy5yZWFkKHNlbGYuc3RkZXJyLmZpbGVubygpLCAxMDI0KQotICAgICAgICAgICAgICAgICAgICBpZiBub3QgZGF0YToKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc3RkZXJyLmNsb3NlKCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3JlYWRfc2V0LnJlbW92ZShzZWxmLnN0ZGVycikKLSAgICAgICAgICAgICAgICAgICAgc3RkZXJyLmFwcGVuZChkYXRhKQotCi0gICAgICAgICAgICByZXR1cm4gKHN0ZG91dCwgc3RkZXJyKQotCi0KICAgICAgICAgZGVmIHNlbmRfc2lnbmFsKHNlbGYsIHNpZyk6Ci0gICAgICAgICAgICAiIiJTZW5kIGEgc2lnbmFsIHRvIHRoZSBwcm9jZXNzCi0gICAgICAgICAgICAiIiIKLSAgICAgICAgICAgIG9zLmtpbGwoc2VsZi5waWQsIHNpZykKKyAgICAgICAgICAgICIiIlNlbmQgYSBzaWduYWwgdG8gdGhlIHByb2Nlc3MuIiIiCisgICAgICAgICAgICAjIFNraXAgc2lnbmFsbGluZyBhIHByb2Nlc3MgdGhhdCB3ZSBrbm93IGhhcyBhbHJlYWR5IGRpZWQuCisgICAgICAgICAgICBpZiBzZWxmLnJldHVybmNvZGUgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBvcy5raWxsKHNlbGYucGlkLCBzaWcpCiAKICAgICAgICAgZGVmIHRlcm1pbmF0ZShzZWxmKToKICAgICAgICAgICAgICIiIlRlcm1pbmF0ZSB0aGUgcHJvY2VzcyB3aXRoIFNJR1RFUk0KZGlmZiAtLWdpdCBhL0xpYi9zdW5hdS5weSBiL0xpYi9zdW5hdS5weQppbmRleCAxNWY3YjAzLi4wNDczZTllIDEwMDY0NAotLS0gYS9MaWIvc3VuYXUucHkKKysrIGIvTGliL3N1bmF1LnB5CkBAIC01MSw3ICs1MSw3IEBACiAgICAgICAgIGdldGNvbXB0eXBlKCkgICAtLSByZXR1cm5zIGNvbXByZXNzaW9uIHR5cGUgKCdOT05FJyBvciAnVUxBVycpCiAgICAgICAgIGdldGNvbXBuYW1lKCkgICAtLSByZXR1cm5zIGh1bWFuLXJlYWRhYmxlIHZlcnNpb24gb2YKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXByZXNzaW9uIHR5cGUgKCdub3QgY29tcHJlc3NlZCcgbWF0Y2hlcyAnTk9ORScpCi0gICAgICAgIGdldHBhcmFtcygpICAgICAtLSByZXR1cm5zIGEgdHVwbGUgY29uc2lzdGluZyBvZiBhbGwgb2YgdGhlCisgICAgICAgIGdldHBhcmFtcygpICAgICAtLSByZXR1cm5zIGEgbmFtZWR0dXBsZSBjb25zaXN0aW5nIG9mIGFsbCBvZiB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFib3ZlIGluIHRoZSBhYm92ZSBvcmRlcgogICAgICAgICBnZXRtYXJrZXJzKCkgICAgLS0gcmV0dXJucyBOb25lIChmb3IgY29tcGF0aWJpbGl0eSB3aXRoIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYWlmYyBtb2R1bGUpCkBAIC05NywxMiArOTcsMTcgQEAKIGJlIHBhdGNoZWQgdXAuCiBJdCBpcyBiZXN0IHRvIGZpcnN0IHNldCBhbGwgcGFyYW1ldGVycywgcGVyaGFwcyBwb3NzaWJseSB0aGUKIGNvbXByZXNzaW9uIHR5cGUsIGFuZCB0aGVuIHdyaXRlIGF1ZGlvIGZyYW1lcyB1c2luZyB3cml0ZWZyYW1lc3Jhdy4KLVdoZW4gYWxsIGZyYW1lcyBoYXZlIGJlZW4gd3JpdHRlbiwgZWl0aGVyIGNhbGwgd3JpdGVmcmFtZXMoJycpIG9yCitXaGVuIGFsbCBmcmFtZXMgaGF2ZSBiZWVuIHdyaXR0ZW4sIGVpdGhlciBjYWxsIHdyaXRlZnJhbWVzKGInJykgb3IKIGNsb3NlKCkgdG8gcGF0Y2ggdXAgdGhlIHNpemVzIGluIHRoZSBoZWFkZXIuCiBUaGUgY2xvc2UoKSBtZXRob2QgaXMgY2FsbGVkIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgY2xhc3MgaW5zdGFuY2UKIGlzIGRlc3Ryb3llZC4KICIiIgogCitmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBuYW1lZHR1cGxlCisKK19zdW5hdV9wYXJhbXMgPSBuYW1lZHR1cGxlKCdfc3VuYXVfcGFyYW1zJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICduY2hhbm5lbHMgc2FtcHdpZHRoIGZyYW1lcmF0ZSBuZnJhbWVzIGNvbXB0eXBlIGNvbXBuYW1lJykKKwogIyBmcm9tIDxtdWx0aW1lZGlhL2F1ZGlvX2ZpbGVoZHIuaD4KIEFVRElPX0ZJTEVfTUFHSUMgPSAweDJlNzM2ZTY0CiBBVURJT19GSUxFX0VOQ09ESU5HX01VTEFXXzggPSAxCkBAIC0xNjMsNiArMTY4LDEyIEBACiAgICAgICAgIGlmIHNlbGYuX2ZpbGU6CiAgICAgICAgICAgICBzZWxmLmNsb3NlKCkKIAorICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgKmFyZ3MpOgorICAgICAgICBzZWxmLmNsb3NlKCkKKwogICAgIGRlZiBpbml0ZnAoc2VsZiwgZmlsZSk6CiAgICAgICAgIHNlbGYuX2ZpbGUgPSBmaWxlCiAgICAgICAgIHNlbGYuX3NvdW5kcG9zID0gMApAQCAtMTk5LDEyICsyMTAsOSBAQAogICAgICAgICBzZWxmLl9mcmFtZXNpemUgPSBzZWxmLl9mcmFtZXNpemUgKiBzZWxmLl9uY2hhbm5lbHMKICAgICAgICAgaWYgc2VsZi5faGRyX3NpemUgPiAyNDoKICAgICAgICAgICAgIHNlbGYuX2luZm8gPSBmaWxlLnJlYWQoc2VsZi5faGRyX3NpemUgLSAyNCkKLSAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihzZWxmLl9pbmZvKSk6Ci0gICAgICAgICAgICAgICAgaWYgc2VsZi5faW5mb1tpXSA9PSBiJ1wwJzoKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5faW5mbyA9IHNlbGYuX2luZm9bOmldCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBzZWxmLl9pbmZvLCBfLCBfID0gc2VsZi5faW5mby5wYXJ0aXRpb24oYidcMCcpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLl9pbmZvID0gJycKKyAgICAgICAgICAgIHNlbGYuX2luZm8gPSBiJycKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5fZGF0YV9wb3MgPSBmaWxlLnRlbGwoKQogICAgICAgICBleGNlcHQgKEF0dHJpYnV0ZUVycm9yLCBPU0Vycm9yKToKQEAgLTI0Niw5ICsyNTQsOSBAQAogICAgICAgICAgICAgcmV0dXJuICdub3QgY29tcHJlc3NlZCcKIAogICAgIGRlZiBnZXRwYXJhbXMoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLmdldG5jaGFubmVscygpLCBzZWxmLmdldHNhbXB3aWR0aCgpLCBcCi0gICAgICAgICAgICAgICAgICBzZWxmLmdldGZyYW1lcmF0ZSgpLCBzZWxmLmdldG5mcmFtZXMoKSwgXAotICAgICAgICAgICAgICAgICAgc2VsZi5nZXRjb21wdHlwZSgpLCBzZWxmLmdldGNvbXBuYW1lKCkKKyAgICAgICAgcmV0dXJuIF9zdW5hdV9wYXJhbXMoc2VsZi5nZXRuY2hhbm5lbHMoKSwgc2VsZi5nZXRzYW1wd2lkdGgoKSwKKyAgICAgICAgICAgICAgICAgIHNlbGYuZ2V0ZnJhbWVyYXRlKCksIHNlbGYuZ2V0bmZyYW1lcygpLAorICAgICAgICAgICAgICAgICAgc2VsZi5nZXRjb21wdHlwZSgpLCBzZWxmLmdldGNvbXBuYW1lKCkpCiAKICAgICBkZWYgZ2V0bWFya2VycyhzZWxmKToKICAgICAgICAgcmV0dXJuIE5vbmUKQEAgLTI4Nyw5ICsyOTUsMTEgQEAKICAgICAgICAgc2VsZi5fc291bmRwb3MgPSBwb3MKIAogICAgIGRlZiBjbG9zZShzZWxmKToKLSAgICAgICAgaWYgc2VsZi5fb3BlbmVkIGFuZCBzZWxmLl9maWxlOgotICAgICAgICAgICAgc2VsZi5fZmlsZS5jbG9zZSgpCi0gICAgICAgIHNlbGYuX2ZpbGUgPSBOb25lCisgICAgICAgIGZpbGUgPSBzZWxmLl9maWxlCisgICAgICAgIGlmIGZpbGU6CisgICAgICAgICAgICBzZWxmLl9maWxlID0gTm9uZQorICAgICAgICAgICAgaWYgc2VsZi5fb3BlbmVkOgorICAgICAgICAgICAgICAgIGZpbGUuY2xvc2UoKQogCiBjbGFzcyBBdV93cml0ZToKIApAQCAtMzA3LDYgKzMxNywxMiBAQAogICAgICAgICAgICAgc2VsZi5jbG9zZSgpCiAgICAgICAgIHNlbGYuX2ZpbGUgPSBOb25lCiAKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsICphcmdzKToKKyAgICAgICAgc2VsZi5jbG9zZSgpCisKICAgICBkZWYgaW5pdGZwKHNlbGYsIGZpbGUpOgogICAgICAgICBzZWxmLl9maWxlID0gZmlsZQogICAgICAgICBzZWxmLl9mcmFtZXJhdGUgPSAwCkBAIC0zMzUsNyArMzUxLDcgQEAKICAgICBkZWYgc2V0c2FtcHdpZHRoKHNlbGYsIHNhbXB3aWR0aCk6CiAgICAgICAgIGlmIHNlbGYuX25mcmFtZXN3cml0dGVuOgogICAgICAgICAgICAgcmFpc2UgRXJyb3IoJ2Nhbm5vdCBjaGFuZ2UgcGFyYW1ldGVycyBhZnRlciBzdGFydGluZyB0byB3cml0ZScpCi0gICAgICAgIGlmIHNhbXB3aWR0aCBub3QgaW4gKDEsIDIsIDQpOgorICAgICAgICBpZiBzYW1wd2lkdGggbm90IGluICgxLCAyLCAzLCA0KToKICAgICAgICAgICAgIHJhaXNlIEVycm9yKCdiYWQgc2FtcGxlIHdpZHRoJykKICAgICAgICAgc2VsZi5fc2FtcHdpZHRoID0gc2FtcHdpZHRoCiAKQEAgLTM5MCwxNCArNDA2LDE2IEBACiAgICAgICAgIHNlbGYuc2V0Y29tcHR5cGUoY29tcHR5cGUsIGNvbXBuYW1lKQogCiAgICAgZGVmIGdldHBhcmFtcyhzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuZ2V0bmNoYW5uZWxzKCksIHNlbGYuZ2V0c2FtcHdpZHRoKCksIFwKLSAgICAgICAgICAgICAgICAgIHNlbGYuZ2V0ZnJhbWVyYXRlKCksIHNlbGYuZ2V0bmZyYW1lcygpLCBcCi0gICAgICAgICAgICAgICAgICBzZWxmLmdldGNvbXB0eXBlKCksIHNlbGYuZ2V0Y29tcG5hbWUoKQorICAgICAgICByZXR1cm4gX3N1bmF1X3BhcmFtcyhzZWxmLmdldG5jaGFubmVscygpLCBzZWxmLmdldHNhbXB3aWR0aCgpLAorICAgICAgICAgICAgICAgICAgc2VsZi5nZXRmcmFtZXJhdGUoKSwgc2VsZi5nZXRuZnJhbWVzKCksCisgICAgICAgICAgICAgICAgICBzZWxmLmdldGNvbXB0eXBlKCksIHNlbGYuZ2V0Y29tcG5hbWUoKSkKIAogICAgIGRlZiB0ZWxsKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5fbmZyYW1lc3dyaXR0ZW4KIAogICAgIGRlZiB3cml0ZWZyYW1lc3JhdyhzZWxmLCBkYXRhKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZGF0YSwgKGJ5dGVzLCBieXRlYXJyYXkpKToKKyAgICAgICAgICAgIGRhdGEgPSBtZW1vcnl2aWV3KGRhdGEpLmNhc3QoJ0InKQogICAgICAgICBzZWxmLl9lbnN1cmVfaGVhZGVyX3dyaXR0ZW4oKQogICAgICAgICBpZiBzZWxmLl9jb21wdHlwZSA9PSAnVUxBVyc6CiAgICAgICAgICAgICBpbXBvcnQgYXVkaW9vcApAQCAtNDIxLDEwICs0MzksMTEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2RhdGFsZW5ndGggIT0gc2VsZi5fZGF0YXdyaXR0ZW46CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3BhdGNoaGVhZGVyKCkKICAgICAgICAgICAgICAgICBzZWxmLl9maWxlLmZsdXNoKCkKLSAgICAgICAgICAgICAgICBpZiBzZWxmLl9vcGVuZWQgYW5kIHNlbGYuX2ZpbGU6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGUuY2xvc2UoKQogICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBmaWxlID0gc2VsZi5fZmlsZQogICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGUgPSBOb25lCisgICAgICAgICAgICAgICAgaWYgc2VsZi5fb3BlbmVkOgorICAgICAgICAgICAgICAgICAgICBmaWxlLmNsb3NlKCkKIAogICAgICMKICAgICAjIHByaXZhdGUgbWV0aG9kcwpAQCAtNDQ4LDYgKzQ2Nyw5IEBACiAgICAgICAgICAgICBlbGlmIHNlbGYuX3NhbXB3aWR0aCA9PSAyOgogICAgICAgICAgICAgICAgIGVuY29kaW5nID0gQVVESU9fRklMRV9FTkNPRElOR19MSU5FQVJfMTYKICAgICAgICAgICAgICAgICBzZWxmLl9mcmFtZXNpemUgPSAyCisgICAgICAgICAgICBlbGlmIHNlbGYuX3NhbXB3aWR0aCA9PSAzOgorICAgICAgICAgICAgICAgIGVuY29kaW5nID0gQVVESU9fRklMRV9FTkNPRElOR19MSU5FQVJfMjQKKyAgICAgICAgICAgICAgICBzZWxmLl9mcmFtZXNpemUgPSAzCiAgICAgICAgICAgICBlbGlmIHNlbGYuX3NhbXB3aWR0aCA9PSA0OgogICAgICAgICAgICAgICAgIGVuY29kaW5nID0gQVVESU9fRklMRV9FTkNPRElOR19MSU5FQVJfMzIKICAgICAgICAgICAgICAgICBzZWxmLl9mcmFtZXNpemUgPSA0CmRpZmYgLS1naXQgYS9MaWIvc3ltYm9sLnB5IGIvTGliL3N5bWJvbC5weQppbmRleCAzNDE0M2I1Li41Y2Y0YTY1IDEwMDc1NQotLS0gYS9MaWIvc3ltYm9sLnB5CisrKyBiL0xpYi9zeW1ib2wucHkKQEAgLTEwMCw3ICsxMDAsNyBAQAogICAgICAgICBzeW1fbmFtZVtfdmFsdWVdID0gX25hbWUKIAogCi1kZWYgbWFpbigpOgorZGVmIF9tYWluKCk6CiAgICAgaW1wb3J0IHN5cwogICAgIGltcG9ydCB0b2tlbgogICAgIGlmIGxlbihzeXMuYXJndikgPT0gMToKQEAgLTEwOCw0ICsxMDgsNCBAQAogICAgIHRva2VuLl9tYWluKCkKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICBtYWluKCkKKyAgICBfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvc3ltdGFibGUucHkgYi9MaWIvc3ltdGFibGUucHkKaW5kZXggYmIyNzE5Ni4uZTIzMzEzYiAxMDA2NDQKLS0tIGEvTGliL3N5bXRhYmxlLnB5CisrKyBiL0xpYi9zeW10YWJsZS5weQpAQCAtMjMyLDcgKzIzMiw4IEBACiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgaW1wb3J0IG9zLCBzeXMKLSAgICBzcmMgPSBvcGVuKHN5cy5hcmd2WzBdKS5yZWFkKCkKKyAgICB3aXRoIG9wZW4oc3lzLmFyZ3ZbMF0pIGFzIGY6CisgICAgICAgIHNyYyA9IGYucmVhZCgpCiAgICAgbW9kID0gc3ltdGFibGUoc3JjLCBvcy5wYXRoLnNwbGl0KHN5cy5hcmd2WzBdKVsxXSwgImV4ZWMiKQogICAgIGZvciBpZGVudCBpbiBtb2QuZ2V0X2lkZW50aWZpZXJzKCk6CiAgICAgICAgIGluZm8gPSBtb2QubG9va3VwKGlkZW50KQpkaWZmIC0tZ2l0IGEvTGliL3N5c2NvbmZpZy5weSBiL0xpYi9zeXNjb25maWcucHkKaW5kZXggMmEyMTYwYy4uZGJmNzc2NyAxMDA2NDQKLS0tIGEvTGliL3N5c2NvbmZpZy5weQorKysgYi9MaWIvc3lzY29uZmlnLnB5CkBAIC0xLDcgKzEsNiBAQAogIiIiQWNjZXNzIHRvIFB5dGhvbidzIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24uIiIiCiAKIGltcG9ydCBvcwotaW1wb3J0IHJlCiBpbXBvcnQgc3lzCiBmcm9tIG9zLnBhdGggaW1wb3J0IHBhcmRpciwgcmVhbHBhdGgKIApAQCAtNTIsMjUgKzUxLDYgQEAKICAgICAgICAgJ3NjcmlwdHMnOiAne2Jhc2V9L1NjcmlwdHMnLAogICAgICAgICAnZGF0YSc6ICd7YmFzZX0nLAogICAgICAgICB9LAotICAgICdvczInOiB7Ci0gICAgICAgICdzdGRsaWInOiAne2luc3RhbGxlZF9iYXNlfS9MaWInLAotICAgICAgICAncGxhdHN0ZGxpYic6ICd7YmFzZX0vTGliJywKLSAgICAgICAgJ3B1cmVsaWInOiAne2Jhc2V9L0xpYi9zaXRlLXBhY2thZ2VzJywKLSAgICAgICAgJ3BsYXRsaWInOiAne2Jhc2V9L0xpYi9zaXRlLXBhY2thZ2VzJywKLSAgICAgICAgJ2luY2x1ZGUnOiAne2luc3RhbGxlZF9iYXNlfS9JbmNsdWRlJywKLSAgICAgICAgJ3BsYXRpbmNsdWRlJzogJ3tpbnN0YWxsZWRfYmFzZX0vSW5jbHVkZScsCi0gICAgICAgICdzY3JpcHRzJzogJ3tiYXNlfS9TY3JpcHRzJywKLSAgICAgICAgJ2RhdGEnOiAne2Jhc2V9JywKLSAgICAgICAgfSwKLSAgICAnb3MyX2hvbWUnOiB7Ci0gICAgICAgICdzdGRsaWInOiAne3VzZXJiYXNlfS9saWIvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9JywKLSAgICAgICAgJ3BsYXRzdGRsaWInOiAne3VzZXJiYXNlfS9saWIvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9JywKLSAgICAgICAgJ3B1cmVsaWInOiAne3VzZXJiYXNlfS9saWIvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9L3NpdGUtcGFja2FnZXMnLAotICAgICAgICAncGxhdGxpYic6ICd7dXNlcmJhc2V9L2xpYi9weXRob257cHlfdmVyc2lvbl9zaG9ydH0vc2l0ZS1wYWNrYWdlcycsCi0gICAgICAgICdpbmNsdWRlJzogJ3t1c2VyYmFzZX0vaW5jbHVkZS9weXRob257cHlfdmVyc2lvbl9zaG9ydH0nLAotICAgICAgICAnc2NyaXB0cyc6ICd7dXNlcmJhc2V9L2JpbicsCi0gICAgICAgICdkYXRhJzogJ3t1c2VyYmFzZX0nLAotICAgICAgICB9LAogICAgICdudF91c2VyJzogewogICAgICAgICAnc3RkbGliJzogJ3t1c2VyYmFzZX0vUHl0aG9ue3B5X3ZlcnNpb25fbm9kb3R9JywKICAgICAgICAgJ3BsYXRzdGRsaWInOiAne3VzZXJiYXNlfS9QeXRob257cHlfdmVyc2lvbl9ub2RvdH0nLApAQCAtMjEwLDcgKzE5MCw2IEBACiAgICAgZGVmIGpvaW51c2VyKCphcmdzKToKICAgICAgICAgcmV0dXJuIG9zLnBhdGguZXhwYW5kdXNlcihvcy5wYXRoLmpvaW4oKmFyZ3MpKQogCi0gICAgIyB3aGF0IGFib3V0ICdvczJlbXgnLCAncmlzY29zJyA/CiAgICAgaWYgb3MubmFtZSA9PSAibnQiOgogICAgICAgICBiYXNlID0gb3MuZW52aXJvbi5nZXQoIkFQUERBVEEiKSBvciAifiIKICAgICAgICAgaWYgZW52X2Jhc2U6CkBAIC0yNDIsNiArMjIxLDcgQEAKICAgICAiIiIKICAgICAjIFJlZ2V4ZXMgbmVlZGVkIGZvciBwYXJzaW5nIE1ha2VmaWxlIChhbmQgc2ltaWxhciBzeW50YXhlcywKICAgICAjIGxpa2Ugb2xkLXN0eWxlIFNldHVwIGZpbGVzKS4KKyAgICBpbXBvcnQgcmUKICAgICBfdmFyaWFibGVfcnggPSByZS5jb21waWxlKCIoW2EtekEtWl1bYS16QS1aMC05X10rKVxzKj1ccyooLiopIikKICAgICBfZmluZHZhcjFfcnggPSByZS5jb21waWxlKHIiXCRcKChbQS1aYS16XVtBLVphLXowLTlfXSopXCkiKQogICAgIF9maW5kdmFyMl9yeCA9IHJlLmNvbXBpbGUociJcJHsoW0EtWmEtel1bQS1aYS16MC05X10qKX0iKQpAQCAtMzY5LDIxICszNDksMjEgQEAKICAgICBtYWtlZmlsZSA9IGdldF9tYWtlZmlsZV9maWxlbmFtZSgpCiAgICAgdHJ5OgogICAgICAgICBfcGFyc2VfbWFrZWZpbGUobWFrZWZpbGUsIHZhcnMpCi0gICAgZXhjZXB0IElPRXJyb3IgYXMgZToKKyAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICBtc2cgPSAiaW52YWxpZCBQeXRob24gaW5zdGFsbGF0aW9uOiB1bmFibGUgdG8gb3BlbiAlcyIgJSBtYWtlZmlsZQogICAgICAgICBpZiBoYXNhdHRyKGUsICJzdHJlcnJvciIpOgogICAgICAgICAgICAgbXNnID0gbXNnICsgIiAoJXMpIiAlIGUuc3RyZXJyb3IKLSAgICAgICAgcmFpc2UgSU9FcnJvcihtc2cpCisgICAgICAgIHJhaXNlIE9TRXJyb3IobXNnKQogICAgICMgbG9hZCB0aGUgaW5zdGFsbGVkIHB5Y29uZmlnLmg6CiAgICAgY29uZmlnX2ggPSBnZXRfY29uZmlnX2hfZmlsZW5hbWUoKQogICAgIHRyeToKICAgICAgICAgd2l0aCBvcGVuKGNvbmZpZ19oKSBhcyBmOgogICAgICAgICAgICAgcGFyc2VfY29uZmlnX2goZiwgdmFycykKLSAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgIG1zZyA9ICJpbnZhbGlkIFB5dGhvbiBpbnN0YWxsYXRpb246IHVuYWJsZSB0byBvcGVuICVzIiAlIGNvbmZpZ19oCiAgICAgICAgIGlmIGhhc2F0dHIoZSwgInN0cmVycm9yIik6CiAgICAgICAgICAgICBtc2cgPSBtc2cgKyAiICglcykiICUgZS5zdHJlcnJvcgotICAgICAgICByYWlzZSBJT0Vycm9yKG1zZykKKyAgICAgICAgcmFpc2UgT1NFcnJvcihtc2cpCiAgICAgIyBPbiBBSVgsIHRoZXJlIGFyZSB3cm9uZyBwYXRocyB0byB0aGUgbGlua2VyIHNjcmlwdHMgaW4gdGhlIE1ha2VmaWxlCiAgICAgIyAtLSB0aGVzZSBwYXRocyBhcmUgcmVsYXRpdmUgdG8gdGhlIFB5dGhvbiBzb3VyY2UsIGJ1dCB3aGVuIGluc3RhbGxlZAogICAgICMgdGhlIHNjcmlwdHMgYXJlIGluIGFub3RoZXIgZGlyZWN0b3J5LgpAQCAtNDAzLDggKzM4Myw4IEBACiAgICAgIyBnZXRfcGxhdGZvcm0oKSBzdWNjZWVkcy4KICAgICBuYW1lID0gJ19zeXNjb25maWdkYXRhJwogICAgIGlmICdkYXJ3aW4nIGluIHN5cy5wbGF0Zm9ybToKLSAgICAgICAgaW1wb3J0IGltcAotICAgICAgICBtb2R1bGUgPSBpbXAubmV3X21vZHVsZShuYW1lKQorICAgICAgICBpbXBvcnQgdHlwZXMKKyAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZShuYW1lKQogICAgICAgICBtb2R1bGUuYnVpbGRfdGltZV92YXJzID0gdmFycwogICAgICAgICBzeXMubW9kdWxlc1tuYW1lXSA9IG1vZHVsZQogCkBAIC00MzYsNyArNDE2LDYgQEAKICAgICB2YXJzWydMSUJERVNUJ10gPSBnZXRfcGF0aCgnc3RkbGliJykKICAgICB2YXJzWydCSU5MSUJERVNUJ10gPSBnZXRfcGF0aCgncGxhdHN0ZGxpYicpCiAgICAgdmFyc1snSU5DTFVERVBZJ10gPSBnZXRfcGF0aCgnaW5jbHVkZScpCi0gICAgdmFyc1snU08nXSA9ICcucHlkJwogICAgIHZhcnNbJ0VYVF9TVUZGSVgnXSA9ICcucHlkJwogICAgIHZhcnNbJ0VYRSddID0gJy5leGUnCiAgICAgdmFyc1snVkVSU0lPTiddID0gX1BZX1ZFUlNJT05fU0hPUlRfTk9fRE9UCkBAIC00NTYsNiArNDM1LDcgQEAKICAgICAiIiIKICAgICBpZiB2YXJzIGlzIE5vbmU6CiAgICAgICAgIHZhcnMgPSB7fQorICAgIGltcG9ydCByZQogICAgIGRlZmluZV9yeCA9IHJlLmNvbXBpbGUoIiNkZWZpbmUgKFtBLVpdW0EtWmEtejAtOV9dKykgKC4qKVxuIikKICAgICB1bmRlZl9yeCA9IHJlLmNvbXBpbGUoIi9bKl0gI3VuZGVmIChbQS1aXVtBLVphLXowLTlfXSspIFsqXS9cbiIpCiAKQEAgLTU1MiwxMCArNTMyLDE0IEBACiAgICAgICAgICAgICAjIHN5cy5hYmlmbGFncyBtYXkgbm90IGJlIGRlZmluZWQgb24gYWxsIHBsYXRmb3Jtcy4KICAgICAgICAgICAgIF9DT05GSUdfVkFSU1snYWJpZmxhZ3MnXSA9ICcnCiAKLSAgICAgICAgaWYgb3MubmFtZSBpbiAoJ250JywgJ29zMicpOgorICAgICAgICBpZiBvcy5uYW1lID09ICdudCc6CiAgICAgICAgICAgICBfaW5pdF9ub25fcG9zaXgoX0NPTkZJR19WQVJTKQogICAgICAgICBpZiBvcy5uYW1lID09ICdwb3NpeCc6CiAgICAgICAgICAgICBfaW5pdF9wb3NpeChfQ09ORklHX1ZBUlMpCisgICAgICAgICMgRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIHNlZSBpc3N1ZTE5NTU1CisgICAgICAgIFNPID0gX0NPTkZJR19WQVJTLmdldCgnRVhUX1NVRkZJWCcpCisgICAgICAgIGlmIFNPIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgX0NPTkZJR19WQVJTWydTTyddID0gU08KICAgICAgICAgIyBTZXR0aW5nICd1c2VyYmFzZScgaXMgZG9uZSBiZWxvdyB0aGUgY2FsbCB0byB0aGUKICAgICAgICAgIyBpbml0IGZ1bmN0aW9uIHRvIGVuYWJsZSB1c2luZyAnZ2V0X2NvbmZpZ192YXInIGluCiAgICAgICAgICMgdGhlIGluaXQtZnVuY3Rpb24uCkBAIC01OTksNiArNTgzLDkgQEAKIAogICAgIEVxdWl2YWxlbnQgdG8gZ2V0X2NvbmZpZ192YXJzKCkuZ2V0KG5hbWUpCiAgICAgIiIiCisgICAgaWYgbmFtZSA9PSAnU08nOgorICAgICAgICBpbXBvcnQgd2FybmluZ3MKKyAgICAgICAgd2FybmluZ3Mud2FybignU08gaXMgZGVwcmVjYXRlZCwgdXNlIEVYVF9TVUZGSVgnLCBEZXByZWNhdGlvbldhcm5pbmcsIDIpCiAgICAgcmV0dXJuIGdldF9jb25maWdfdmFycygpLmdldChuYW1lKQogCiAKQEAgLTY3OSw2ICs2NjYsNyBAQAogICAgICAgICByZXR1cm4gIiVzLSVzLiVzIiAlIChvc25hbWUsIHZlcnNpb24sIHJlbGVhc2UpCiAgICAgZWxpZiBvc25hbWVbOjZdID09ICJjeWd3aW4iOgogICAgICAgICBvc25hbWUgPSAiY3lnd2luIgorICAgICAgICBpbXBvcnQgcmUKICAgICAgICAgcmVsX3JlID0gcmUuY29tcGlsZShyJ1tcZC5dKycpCiAgICAgICAgIG0gPSByZWxfcmUubWF0Y2gocmVsZWFzZSkKICAgICAgICAgaWYgbToKZGlmZiAtLWdpdCBhL0xpYi90YWJuYW5ueS5weSBiL0xpYi90YWJuYW5ueS5weQppbmRleCA1YjliNDQ0Li40NmUwZjU2IDEwMDc1NQotLS0gYS9MaWIvdGFibmFubnkucHkKKysrIGIvTGliL3RhYm5hbm55LnB5CkBAIC05NSw3ICs5NSw3IEBACiAKICAgICB0cnk6CiAgICAgICAgIGYgPSB0b2tlbml6ZS5vcGVuKGZpbGUpCi0gICAgZXhjZXB0IElPRXJyb3IgYXMgbXNnOgorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIG1zZzoKICAgICAgICAgZXJycHJpbnQoIiVyOiBJL08gRXJyb3I6ICVzIiAlIChmaWxlLCBtc2cpKQogICAgICAgICByZXR1cm4KIApkaWZmIC0tZ2l0IGEvTGliL3RhcmZpbGUucHkgYi9MaWIvdGFyZmlsZS5weQppbmRleCBmNmQ3Zjc5Li41ZjFhOTc5IDEwMDc1NQotLS0gYS9MaWIvdGFyZmlsZS5weQorKysgYi9MaWIvdGFyZmlsZS5weQpAQCAtMzgsNiArMzgsNyBAQAogIy0tLS0tLS0tLQogIyBJbXBvcnRzCiAjLS0tLS0tLS0tCitmcm9tIGJ1aWx0aW5zIGltcG9ydCBvcGVuIGFzIGJsdG5fb3BlbgogaW1wb3J0IHN5cwogaW1wb3J0IG9zCiBpbXBvcnQgaW8KQEAgLTU2LDE3ICs1NywxNSBAQAogIyBvcy5zeW1saW5rIG9uIFdpbmRvd3MgcHJpb3IgdG8gNi4wIHJhaXNlcyBOb3RJbXBsZW1lbnRlZEVycm9yCiBzeW1saW5rX2V4Y2VwdGlvbiA9IChBdHRyaWJ1dGVFcnJvciwgTm90SW1wbGVtZW50ZWRFcnJvcikKIHRyeToKLSAgICAjIFdpbmRvd3NFcnJvciAoMTMxNCkgd2lsbCBiZSByYWlzZWQgaWYgdGhlIGNhbGxlciBkb2VzIG5vdCBob2xkIHRoZQorICAgICMgT1NFcnJvciAod2luZXJyb3I9MTMxNCkgd2lsbCBiZSByYWlzZWQgaWYgdGhlIGNhbGxlciBkb2VzIG5vdCBob2xkIHRoZQogICAgICMgU2VDcmVhdGVTeW1ib2xpY0xpbmtQcml2aWxlZ2UgcHJpdmlsZWdlCi0gICAgc3ltbGlua19leGNlcHRpb24gKz0gKFdpbmRvd3NFcnJvciwpCisgICAgc3ltbGlua19leGNlcHRpb24gKz0gKE9TRXJyb3IsKQogZXhjZXB0IE5hbWVFcnJvcjoKICAgICBwYXNzCiAKICMgZnJvbSB0YXJmaWxlIGltcG9ydCAqCiBfX2FsbF9fID0gWyJUYXJGaWxlIiwgIlRhckluZm8iLCAiaXNfdGFyZmlsZSIsICJUYXJFcnJvciJdCiAKLWZyb20gYnVpbHRpbnMgaW1wb3J0IG9wZW4gYXMgX29wZW4gIyBTaW5jZSAnb3BlbicgaXMgVGFyRmlsZS5vcGVuCi0KICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgdGFyIGNvbnN0YW50cwogIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTQwLDMwICsxMzksNiBAQAogfQogCiAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIEJpdHMgdXNlZCBpbiB0aGUgbW9kZSBmaWVsZCwgdmFsdWVzIGluIG9jdGFsLgotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotU19JRkxOSyA9IDBvMTIwMDAwICAgICAgICAjIHN5bWJvbGljIGxpbmsKLVNfSUZSRUcgPSAwbzEwMDAwMCAgICAgICAgIyByZWd1bGFyIGZpbGUKLVNfSUZCTEsgPSAwbzA2MDAwMCAgICAgICAgIyBibG9jayBkZXZpY2UKLVNfSUZESVIgPSAwbzA0MDAwMCAgICAgICAgIyBkaXJlY3RvcnkKLVNfSUZDSFIgPSAwbzAyMDAwMCAgICAgICAgIyBjaGFyYWN0ZXIgZGV2aWNlCi1TX0lGSUZPID0gMG8wMTAwMDAgICAgICAgICMgZmlmbwotCi1UU1VJRCAgID0gMG80MDAwICAgICAgICAgICMgc2V0IFVJRCBvbiBleGVjdXRpb24KLVRTR0lEICAgPSAwbzIwMDAgICAgICAgICAgIyBzZXQgR0lEIG9uIGV4ZWN1dGlvbgotVFNWVFggICA9IDBvMTAwMCAgICAgICAgICAjIHJlc2VydmVkCi0KLVRVUkVBRCAgPSAwbzQwMCAgICAgICAgICAgIyByZWFkIGJ5IG93bmVyCi1UVVdSSVRFID0gMG8yMDAgICAgICAgICAgICMgd3JpdGUgYnkgb3duZXIKLVRVRVhFQyAgPSAwbzEwMCAgICAgICAgICAgIyBleGVjdXRlL3NlYXJjaCBieSBvd25lcgotVEdSRUFEICA9IDBvMDQwICAgICAgICAgICAjIHJlYWQgYnkgZ3JvdXAKLVRHV1JJVEUgPSAwbzAyMCAgICAgICAgICAgIyB3cml0ZSBieSBncm91cAotVEdFWEVDICA9IDBvMDEwICAgICAgICAgICAjIGV4ZWN1dGUvc2VhcmNoIGJ5IGdyb3VwCi1UT1JFQUQgID0gMG8wMDQgICAgICAgICAgICMgcmVhZCBieSBvdGhlcgotVE9XUklURSA9IDBvMDAyICAgICAgICAgICAjIHdyaXRlIGJ5IG90aGVyCi1UT0VYRUMgID0gMG8wMDEgICAgICAgICAgICMgZXhlY3V0ZS9zZWFyY2ggYnkgb3RoZXIKLQotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBpbml0aWFsaXphdGlvbgogIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogaWYgb3MubmFtZSBpbiAoIm50IiwgImNlIik6CkBAIC0yMDMsNyArMTc4LDggQEAKICAgICAgICAgICAgIG4gPSAtKDI1NiAqKiAobGVuKHMpIC0gMSkgLSBuKQogICAgIGVsc2U6CiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIG4gPSBpbnQobnRzKHMsICJhc2NpaSIsICJzdHJpY3QiKSBvciAiMCIsIDgpCisgICAgICAgICAgICBzID0gbnRzKHMsICJhc2NpaSIsICJzdHJpY3QiKQorICAgICAgICAgICAgbiA9IGludChzLnN0cmlwKCkgb3IgIjAiLCA4KQogICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKICAgICAgICAgICAgIHJhaXNlIEludmFsaWRIZWFkZXJFcnJvcigiaW52YWxpZCBoZWFkZXIiKQogICAgIHJldHVybiBuCkBAIC0yMjAsNyArMTk2LDcgQEAKICAgICAjIEEgMG8yMDAgYnl0ZSBpbmRpY2F0ZXMgYSBwb3NpdGl2ZSBudW1iZXIsIGEgMG8zNzcgYnl0ZSBhIG5lZ2F0aXZlCiAgICAgIyBudW1iZXIuCiAgICAgaWYgMCA8PSBuIDwgOCAqKiAoZGlnaXRzIC0gMSk6Ci0gICAgICAgIHMgPSBieXRlcygiJTAqbyIgJSAoZGlnaXRzIC0gMSwgbiksICJhc2NpaSIpICsgTlVMCisgICAgICAgIHMgPSBieXRlcygiJTAqbyIgJSAoZGlnaXRzIC0gMSwgaW50KG4pKSwgImFzY2lpIikgKyBOVUwKICAgICBlbGlmIGZvcm1hdCA9PSBHTlVfRk9STUFUIGFuZCAtMjU2ICoqIChkaWdpdHMgLSAxKSA8PSBuIDwgMjU2ICoqIChkaWdpdHMgLSAxKToKICAgICAgICAgaWYgbiA+PSAwOgogICAgICAgICAgICAgcyA9IGJ5dGVhcnJheShbMG8yMDBdKQpAQCAtMjQ5LDcgKzIyNSw3IEBACiAgICAgc2lnbmVkX2Noa3N1bSA9IDI1NiArIHN1bShzdHJ1Y3QudW5wYWNrX2Zyb20oIjE0OGI4eDM1NmIiLCBidWYpKQogICAgIHJldHVybiB1bnNpZ25lZF9jaGtzdW0sIHNpZ25lZF9jaGtzdW0KIAotZGVmIGNvcHlmaWxlb2JqKHNyYywgZHN0LCBsZW5ndGg9Tm9uZSk6CitkZWYgY29weWZpbGVvYmooc3JjLCBkc3QsIGxlbmd0aD1Ob25lLCBleGNlcHRpb249T1NFcnJvcik6CiAgICAgIiIiQ29weSBsZW5ndGggYnl0ZXMgZnJvbSBmaWxlb2JqIHNyYyB0byBmaWxlb2JqIGRzdC4KICAgICAgICBJZiBsZW5ndGggaXMgTm9uZSwgY29weSB0aGUgZW50aXJlIGNvbnRlbnQuCiAgICAgIiIiCkBAIC0yNjQsMTMgKzI0MCwxMyBAQAogICAgIGZvciBiIGluIHJhbmdlKGJsb2Nrcyk6CiAgICAgICAgIGJ1ZiA9IHNyYy5yZWFkKEJVRlNJWkUpCiAgICAgICAgIGlmIGxlbihidWYpIDwgQlVGU0laRToKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoImVuZCBvZiBmaWxlIHJlYWNoZWQiKQorICAgICAgICAgICAgcmFpc2UgZXhjZXB0aW9uKCJ1bmV4cGVjdGVkIGVuZCBvZiBkYXRhIikKICAgICAgICAgZHN0LndyaXRlKGJ1ZikKIAogICAgIGlmIHJlbWFpbmRlciAhPSAwOgogICAgICAgICBidWYgPSBzcmMucmVhZChyZW1haW5kZXIpCiAgICAgICAgIGlmIGxlbihidWYpIDwgcmVtYWluZGVyOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigiZW5kIG9mIGZpbGUgcmVhY2hlZCIpCisgICAgICAgICAgICByYWlzZSBleGNlcHRpb24oInVuZXhwZWN0ZWQgZW5kIG9mIGRhdGEiKQogICAgICAgICBkc3Qud3JpdGUoYnVmKQogICAgIHJldHVybgogCkBAIC00MDUsNyArMzgxLDcgQEAKICAgICAgICAgICAgICAgICBpZiBtb2RlID09ICJyIjoKICAgICAgICAgICAgICAgICAgICAgc2VsZi5kYnVmID0gYiIiCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuY21wID0gYnoyLkJaMkRlY29tcHJlc3NvcigpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuZXhjZXB0aW9uID0gSU9FcnJvcgorICAgICAgICAgICAgICAgICAgICBzZWxmLmV4Y2VwdGlvbiA9IE9TRXJyb3IKICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICBzZWxmLmNtcCA9IGJ6Mi5CWjJDb21wcmVzc29yKCkKIApAQCAtNDc0LDI2ICs0NTAsMjYgQEAKICAgICAgICAgaWYgc2VsZi5jbG9zZWQ6CiAgICAgICAgICAgICByZXR1cm4KIAotICAgICAgICBpZiBzZWxmLm1vZGUgPT0gInciIGFuZCBzZWxmLmNvbXB0eXBlICE9ICJ0YXIiOgotICAgICAgICAgICAgc2VsZi5idWYgKz0gc2VsZi5jbXAuZmx1c2goKQotCi0gICAgICAgIGlmIHNlbGYubW9kZSA9PSAidyIgYW5kIHNlbGYuYnVmOgotICAgICAgICAgICAgc2VsZi5maWxlb2JqLndyaXRlKHNlbGYuYnVmKQotICAgICAgICAgICAgc2VsZi5idWYgPSBiIiIKLSAgICAgICAgICAgIGlmIHNlbGYuY29tcHR5cGUgPT0gImd6IjoKLSAgICAgICAgICAgICAgICAjIFRoZSBuYXRpdmUgemxpYiBjcmMgaXMgYW4gdW5zaWduZWQgMzItYml0IGludGVnZXIsIGJ1dAotICAgICAgICAgICAgICAgICMgdGhlIFB5dGhvbiB3cmFwcGVyIGltcGxpY2l0bHkgY2FzdHMgdGhhdCB0byBhIHNpZ25lZCBDCi0gICAgICAgICAgICAgICAgIyBsb25nLiAgU28sIG9uIGEgMzItYml0IGJveCBzZWxmLmNyYyBtYXkgImxvb2sgbmVnYXRpdmUiLAotICAgICAgICAgICAgICAgICMgd2hpbGUgdGhlIHNhbWUgY3JjIG9uIGEgNjQtYml0IGJveCBtYXkgImxvb2sgcG9zaXRpdmUiLgotICAgICAgICAgICAgICAgICMgVG8gYXZvaWQgaXJrc29tZSB3YXJuaW5ncyBmcm9tIHRoZSBgc3RydWN0YCBtb2R1bGUsIGZvcmNlCi0gICAgICAgICAgICAgICAgIyBpdCB0byBsb29rIHBvc2l0aXZlIG9uIGFsbCBib3hlcy4KLSAgICAgICAgICAgICAgICBzZWxmLmZpbGVvYmoud3JpdGUoc3RydWN0LnBhY2soIjxMIiwgc2VsZi5jcmMgJiAweGZmZmZmZmZmKSkKLSAgICAgICAgICAgICAgICBzZWxmLmZpbGVvYmoud3JpdGUoc3RydWN0LnBhY2soIjxMIiwgc2VsZi5wb3MgJiAweGZmZmZGRkZGKSkKLQotICAgICAgICBpZiBub3Qgc2VsZi5fZXh0ZmlsZW9iajoKLSAgICAgICAgICAgIHNlbGYuZmlsZW9iai5jbG9zZSgpCi0KICAgICAgICAgc2VsZi5jbG9zZWQgPSBUcnVlCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIHNlbGYubW9kZSA9PSAidyIgYW5kIHNlbGYuY29tcHR5cGUgIT0gInRhciI6CisgICAgICAgICAgICAgICAgc2VsZi5idWYgKz0gc2VsZi5jbXAuZmx1c2goKQorCisgICAgICAgICAgICBpZiBzZWxmLm1vZGUgPT0gInciIGFuZCBzZWxmLmJ1ZjoKKyAgICAgICAgICAgICAgICBzZWxmLmZpbGVvYmoud3JpdGUoc2VsZi5idWYpCisgICAgICAgICAgICAgICAgc2VsZi5idWYgPSBiIiIKKyAgICAgICAgICAgICAgICBpZiBzZWxmLmNvbXB0eXBlID09ICJneiI6CisgICAgICAgICAgICAgICAgICAgICMgVGhlIG5hdGl2ZSB6bGliIGNyYyBpcyBhbiB1bnNpZ25lZCAzMi1iaXQgaW50ZWdlciwgYnV0CisgICAgICAgICAgICAgICAgICAgICMgdGhlIFB5dGhvbiB3cmFwcGVyIGltcGxpY2l0bHkgY2FzdHMgdGhhdCB0byBhIHNpZ25lZCBDCisgICAgICAgICAgICAgICAgICAgICMgbG9uZy4gIFNvLCBvbiBhIDMyLWJpdCBib3ggc2VsZi5jcmMgbWF5ICJsb29rIG5lZ2F0aXZlIiwKKyAgICAgICAgICAgICAgICAgICAgIyB3aGlsZSB0aGUgc2FtZSBjcmMgb24gYSA2NC1iaXQgYm94IG1heSAibG9vayBwb3NpdGl2ZSIuCisgICAgICAgICAgICAgICAgICAgICMgVG8gYXZvaWQgaXJrc29tZSB3YXJuaW5ncyBmcm9tIHRoZSBgc3RydWN0YCBtb2R1bGUsIGZvcmNlCisgICAgICAgICAgICAgICAgICAgICMgaXQgdG8gbG9vayBwb3NpdGl2ZSBvbiBhbGwgYm94ZXMuCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZmlsZW9iai53cml0ZShzdHJ1Y3QucGFjaygiPEwiLCBzZWxmLmNyYyAmIDB4ZmZmZmZmZmYpKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmZpbGVvYmoud3JpdGUoc3RydWN0LnBhY2soIjxMIiwgc2VsZi5wb3MgJiAweGZmZmZGRkZGKSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9leHRmaWxlb2JqOgorICAgICAgICAgICAgICAgIHNlbGYuZmlsZW9iai5jbG9zZSgpCiAKICAgICBkZWYgX2luaXRfcmVhZF9neihzZWxmKToKICAgICAgICAgIiIiSW5pdGlhbGl6ZSBmb3IgcmVhZGluZyBhIGd6aXAgY29tcHJlc3NlZCBmaWxlb2JqLgpAQCAtNzE0LDcgKzY5MCwxMCBAQAogICAgICAgICAgICAgbGVuZ3RoID0gbWluKHNpemUsIHN0b3AgLSBzZWxmLnBvc2l0aW9uKQogICAgICAgICAgICAgaWYgZGF0YToKICAgICAgICAgICAgICAgICBzZWxmLmZpbGVvYmouc2VlayhvZmZzZXQgKyAoc2VsZi5wb3NpdGlvbiAtIHN0YXJ0KSkKLSAgICAgICAgICAgICAgICBidWYgKz0gc2VsZi5maWxlb2JqLnJlYWQobGVuZ3RoKQorICAgICAgICAgICAgICAgIGIgPSBzZWxmLmZpbGVvYmoucmVhZChsZW5ndGgpCisgICAgICAgICAgICAgICAgaWYgbGVuKGIpICE9IGxlbmd0aDoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgUmVhZEVycm9yKCJ1bmV4cGVjdGVkIGVuZCBvZiBkYXRhIikKKyAgICAgICAgICAgICAgICBidWYgKz0gYgogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBidWYgKz0gTlVMICogbGVuZ3RoCiAgICAgICAgICAgICBzaXplIC09IGxlbmd0aApAQCAtMTQ0OSw3ICsxNDI4LDggQEAKICAgICAgICAgICAgIGZpbGVvYmogPSBibHRuX29wZW4obmFtZSwgc2VsZi5fbW9kZSkKICAgICAgICAgICAgIHNlbGYuX2V4dGZpbGVvYmogPSBGYWxzZQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgaWYgbmFtZSBpcyBOb25lIGFuZCBoYXNhdHRyKGZpbGVvYmosICJuYW1lIik6CisgICAgICAgICAgICBpZiAobmFtZSBpcyBOb25lIGFuZCBoYXNhdHRyKGZpbGVvYmosICJuYW1lIikgYW5kCisgICAgICAgICAgICAgICAgaXNpbnN0YW5jZShmaWxlb2JqLm5hbWUsIChzdHIsIGJ5dGVzKSkpOgogICAgICAgICAgICAgICAgIG5hbWUgPSBmaWxlb2JqLm5hbWUKICAgICAgICAgICAgIGlmIGhhc2F0dHIoZmlsZW9iaiwgIm1vZGUiKToKICAgICAgICAgICAgICAgICBzZWxmLl9tb2RlID0gZmlsZW9iai5tb2RlCkBAIC0xNjcyLDcgKzE2NTIsNyBAQAogCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHQgPSBjbHMudGFyb3BlbihuYW1lLCBtb2RlLCBmaWxlb2JqLCAqKmt3YXJncykKLSAgICAgICAgZXhjZXB0IChJT0Vycm9yLCBFT0ZFcnJvcik6CisgICAgICAgIGV4Y2VwdCAoT1NFcnJvciwgRU9GRXJyb3IpOgogICAgICAgICAgICAgZmlsZW9iai5jbG9zZSgpCiAgICAgICAgICAgICBpZiBtb2RlID09ICdyJzoKICAgICAgICAgICAgICAgICByYWlzZSBSZWFkRXJyb3IoIm5vdCBhIGJ6aXAyIGZpbGUiKQpAQCAtMTcyOSwxOCArMTcwOSwxOSBAQAogICAgICAgICBpZiBzZWxmLmNsb3NlZDoKICAgICAgICAgICAgIHJldHVybgogCi0gICAgICAgIGlmIHNlbGYubW9kZSBpbiAiYXciOgotICAgICAgICAgICAgc2VsZi5maWxlb2JqLndyaXRlKE5VTCAqIChCTE9DS1NJWkUgKiAyKSkKLSAgICAgICAgICAgIHNlbGYub2Zmc2V0ICs9IChCTE9DS1NJWkUgKiAyKQotICAgICAgICAgICAgIyBmaWxsIHVwIHRoZSBlbmQgd2l0aCB6ZXJvLWJsb2NrcwotICAgICAgICAgICAgIyAobGlrZSBvcHRpb24gLWIyMCBmb3IgdGFyIGRvZXMpCi0gICAgICAgICAgICBibG9ja3MsIHJlbWFpbmRlciA9IGRpdm1vZChzZWxmLm9mZnNldCwgUkVDT1JEU0laRSkKLSAgICAgICAgICAgIGlmIHJlbWFpbmRlciA+IDA6Ci0gICAgICAgICAgICAgICAgc2VsZi5maWxlb2JqLndyaXRlKE5VTCAqIChSRUNPUkRTSVpFIC0gcmVtYWluZGVyKSkKLQotICAgICAgICBpZiBub3Qgc2VsZi5fZXh0ZmlsZW9iajoKLSAgICAgICAgICAgIHNlbGYuZmlsZW9iai5jbG9zZSgpCiAgICAgICAgIHNlbGYuY2xvc2VkID0gVHJ1ZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBzZWxmLm1vZGUgaW4gImF3IjoKKyAgICAgICAgICAgICAgICBzZWxmLmZpbGVvYmoud3JpdGUoTlVMICogKEJMT0NLU0laRSAqIDIpKQorICAgICAgICAgICAgICAgIHNlbGYub2Zmc2V0ICs9IChCTE9DS1NJWkUgKiAyKQorICAgICAgICAgICAgICAgICMgZmlsbCB1cCB0aGUgZW5kIHdpdGggemVyby1ibG9ja3MKKyAgICAgICAgICAgICAgICAjIChsaWtlIG9wdGlvbiAtYjIwIGZvciB0YXIgZG9lcykKKyAgICAgICAgICAgICAgICBibG9ja3MsIHJlbWFpbmRlciA9IGRpdm1vZChzZWxmLm9mZnNldCwgUkVDT1JEU0laRSkKKyAgICAgICAgICAgICAgICBpZiByZW1haW5kZXIgPiAwOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmZpbGVvYmoud3JpdGUoTlVMICogKFJFQ09SRFNJWkUgLSByZW1haW5kZXIpKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgaWYgbm90IHNlbGYuX2V4dGZpbGVvYmo6CisgICAgICAgICAgICAgICAgc2VsZi5maWxlb2JqLmNsb3NlKCkKIAogICAgIGRlZiBnZXRtZW1iZXIoc2VsZiwgbmFtZSk6CiAgICAgICAgICIiIlJldHVybiBhIFRhckluZm8gb2JqZWN0IGZvciBtZW1iZXIgYG5hbWUnLiBJZiBgbmFtZScgY2FuIG5vdCBiZQpAQCAtMjA0Miw3ICsyMDIzLDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5fZXh0cmFjdF9tZW1iZXIodGFyaW5mbywgb3MucGF0aC5qb2luKHBhdGgsIHRhcmluZm8ubmFtZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRfYXR0cnM9c2V0X2F0dHJzKQotICAgICAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvciBhcyBlOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgaWYgc2VsZi5lcnJvcmxldmVsID4gMDoKICAgICAgICAgICAgICAgICByYWlzZQogICAgICAgICAgICAgZWxzZToKQEAgLTIxNTQsOSArMjEzNSw5IEBACiAgICAgICAgICAgICBpZiB0YXJpbmZvLnNwYXJzZSBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICBmb3Igb2Zmc2V0LCBzaXplIGluIHRhcmluZm8uc3BhcnNlOgogICAgICAgICAgICAgICAgICAgICB0YXJnZXQuc2VlayhvZmZzZXQpCi0gICAgICAgICAgICAgICAgICAgIGNvcHlmaWxlb2JqKHNvdXJjZSwgdGFyZ2V0LCBzaXplKQorICAgICAgICAgICAgICAgICAgICBjb3B5ZmlsZW9iaihzb3VyY2UsIHRhcmdldCwgc2l6ZSwgUmVhZEVycm9yKQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBjb3B5ZmlsZW9iaihzb3VyY2UsIHRhcmdldCwgdGFyaW5mby5zaXplKQorICAgICAgICAgICAgICAgIGNvcHlmaWxlb2JqKHNvdXJjZSwgdGFyZ2V0LCB0YXJpbmZvLnNpemUsIFJlYWRFcnJvcikKICAgICAgICAgICAgIHRhcmdldC5zZWVrKHRhcmluZm8uc2l6ZSkKICAgICAgICAgICAgIHRhcmdldC50cnVuY2F0ZSgpCiAKQEAgLTIyMzEsOSArMjIxMiw4IEBACiAgICAgICAgICAgICAgICAgaWYgdGFyaW5mby5pc3N5bSgpIGFuZCBoYXNhdHRyKG9zLCAibGNob3duIik6CiAgICAgICAgICAgICAgICAgICAgIG9zLmxjaG93bih0YXJnZXRwYXRoLCB1LCBnKQogICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSAhPSAib3MyZW14IjoKLSAgICAgICAgICAgICAgICAgICAgICAgIG9zLmNob3duKHRhcmdldHBhdGgsIHUsIGcpCi0gICAgICAgICAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgICAgICBvcy5jaG93bih0YXJnZXRwYXRoLCB1LCBnKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgICAgICByYWlzZSBFeHRyYWN0RXJyb3IoImNvdWxkIG5vdCBjaGFuZ2Ugb3duZXIiKQogCiAgICAgZGVmIGNobW9kKHNlbGYsIHRhcmluZm8sIHRhcmdldHBhdGgpOgpAQCAtMjI0Miw3ICsyMjIyLDcgQEAKICAgICAgICAgaWYgaGFzYXR0cihvcywgJ2NobW9kJyk6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgb3MuY2htb2QodGFyZ2V0cGF0aCwgdGFyaW5mby5tb2RlKQotICAgICAgICAgICAgZXhjZXB0IEVudmlyb25tZW50RXJyb3IgYXMgZToKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICAgICAgcmFpc2UgRXh0cmFjdEVycm9yKCJjb3VsZCBub3QgY2hhbmdlIG1vZGUiKQogCiAgICAgZGVmIHV0aW1lKHNlbGYsIHRhcmluZm8sIHRhcmdldHBhdGgpOgpAQCAtMjI1Miw3ICsyMjMyLDcgQEAKICAgICAgICAgICAgIHJldHVybgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBvcy51dGltZSh0YXJnZXRwYXRoLCAodGFyaW5mby5tdGltZSwgdGFyaW5mby5tdGltZSkpCi0gICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yIGFzIGU6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICByYWlzZSBFeHRyYWN0RXJyb3IoImNvdWxkIG5vdCBjaGFuZ2UgbW9kaWZpY2F0aW9uIHRpbWUiKQogCiAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0yMjY3LDggKzIyNDcsMTMgQEAKICAgICAgICAgICAgIHNlbGYuZmlyc3RtZW1iZXIgPSBOb25lCiAgICAgICAgICAgICByZXR1cm4gbQogCisgICAgICAgICMgQWR2YW5jZSB0aGUgZmlsZSBwb2ludGVyLgorICAgICAgICBpZiBzZWxmLm9mZnNldCAhPSBzZWxmLmZpbGVvYmoudGVsbCgpOgorICAgICAgICAgICAgc2VsZi5maWxlb2JqLnNlZWsoc2VsZi5vZmZzZXQgLSAxKQorICAgICAgICAgICAgaWYgbm90IHNlbGYuZmlsZW9iai5yZWFkKDEpOgorICAgICAgICAgICAgICAgIHJhaXNlIFJlYWRFcnJvcigidW5leHBlY3RlZCBlbmQgb2YgZGF0YSIpCisKICAgICAgICAgIyBSZWFkIHRoZSBuZXh0IGJsb2NrLgotICAgICAgICBzZWxmLmZpbGVvYmouc2VlayhzZWxmLm9mZnNldCkKICAgICAgICAgdGFyaW5mbyA9IE5vbmUKICAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgIHRyeToKQEAgLTIzNDMsOSArMjMyOCw5IEBACiAgICAgICAgICAgIGNvcnJlc3BvbmRzIHRvIFRhckZpbGUncyBtb2RlLgogICAgICAgICAiIiIKICAgICAgICAgaWYgc2VsZi5jbG9zZWQ6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCIlcyBpcyBjbG9zZWQiICUgc2VsZi5fX2NsYXNzX18uX19uYW1lX18pCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCIlcyBpcyBjbG9zZWQiICUgc2VsZi5fX2NsYXNzX18uX19uYW1lX18pCiAgICAgICAgIGlmIG1vZGUgaXMgbm90IE5vbmUgYW5kIHNlbGYubW9kZSBub3QgaW4gbW9kZToKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoImJhZCBvcGVyYXRpb24gZm9yIG1vZGUgJXIiICUgc2VsZi5tb2RlKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigiYmFkIG9wZXJhdGlvbiBmb3IgbW9kZSAlciIgJSBzZWxmLm1vZGUpCiAKICAgICBkZWYgX2ZpbmRfbGlua190YXJnZXQoc2VsZiwgdGFyaW5mbyk6CiAgICAgICAgICIiIkZpbmQgdGhlIHRhcmdldCBtZW1iZXIgb2YgYSBzeW1saW5rIG9yIGhhcmRsaW5rIG1lbWJlciBpbiB0aGUKQEAgLTI0NDcsNSArMjQzMiw5OCBAQAogICAgIGV4Y2VwdCBUYXJFcnJvcjoKICAgICAgICAgcmV0dXJuIEZhbHNlCiAKLWJsdG5fb3BlbiA9IG9wZW4KIG9wZW4gPSBUYXJGaWxlLm9wZW4KKworCitkZWYgbWFpbigpOgorICAgIGltcG9ydCBhcmdwYXJzZQorCisgICAgZGVzY3JpcHRpb24gPSAnQSBzaW1wbGUgY29tbWFuZCBsaW5lIGludGVyZmFjZSBmb3IgdGFyZmlsZSBtb2R1bGUuJworICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKGRlc2NyaXB0aW9uPWRlc2NyaXB0aW9uKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy12JywgJy0tdmVyYm9zZScsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdWZXJib3NlIG91dHB1dCcpCisgICAgZ3JvdXAgPSBwYXJzZXIuYWRkX211dHVhbGx5X2V4Y2x1c2l2ZV9ncm91cCgpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctbCcsICctLWxpc3QnLCBtZXRhdmFyPSc8dGFyZmlsZT4nLAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdTaG93IGxpc3Rpbmcgb2YgYSB0YXJmaWxlJykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy1lJywgJy0tZXh0cmFjdCcsIG5hcmdzPScrJywKKyAgICAgICAgICAgICAgICAgICAgICAgbWV0YXZhcj0oJzx0YXJmaWxlPicsICc8b3V0cHV0X2Rpcj4nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nRXh0cmFjdCB0YXJmaWxlIGludG8gdGFyZ2V0IGRpcicpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctYycsICctLWNyZWF0ZScsIG5hcmdzPScrJywKKyAgICAgICAgICAgICAgICAgICAgICAgbWV0YXZhcj0oJzxuYW1lPicsICc8ZmlsZT4nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nQ3JlYXRlIHRhcmZpbGUgZnJvbSBzb3VyY2VzJykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy10JywgJy0tdGVzdCcsIG1ldGF2YXI9Jzx0YXJmaWxlPicsCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1Rlc3QgaWYgYSB0YXJmaWxlIGlzIHZhbGlkJykKKyAgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQorCisgICAgaWYgYXJncy50ZXN0OgorICAgICAgICBzcmMgPSBhcmdzLnRlc3QKKyAgICAgICAgaWYgaXNfdGFyZmlsZShzcmMpOgorICAgICAgICAgICAgd2l0aCBvcGVuKHNyYywgJ3InKSBhcyB0YXI6CisgICAgICAgICAgICAgICAgdGFyLmdldG1lbWJlcnMoKQorICAgICAgICAgICAgICAgIHByaW50KHRhci5nZXRtZW1iZXJzKCksIGZpbGU9c3lzLnN0ZGVycikKKyAgICAgICAgICAgIGlmIGFyZ3MudmVyYm9zZToKKyAgICAgICAgICAgICAgICBwcmludCgneyFyfSBpcyBhIHRhciBhcmNoaXZlLicuZm9ybWF0KHNyYykpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwYXJzZXIuZXhpdCgxLCAneyFyfSBpcyBub3QgYSB0YXIgYXJjaGl2ZS5cbicuZm9ybWF0KHNyYykpCisKKyAgICBlbGlmIGFyZ3MubGlzdDoKKyAgICAgICAgc3JjID0gYXJncy5saXN0CisgICAgICAgIGlmIGlzX3RhcmZpbGUoc3JjKToKKyAgICAgICAgICAgIHdpdGggVGFyRmlsZS5vcGVuKHNyYywgJ3I6KicpIGFzIHRmOgorICAgICAgICAgICAgICAgIHRmLmxpc3QodmVyYm9zZT1hcmdzLnZlcmJvc2UpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwYXJzZXIuZXhpdCgxLCAneyFyfSBpcyBub3QgYSB0YXIgYXJjaGl2ZS5cbicuZm9ybWF0KHNyYykpCisKKyAgICBlbGlmIGFyZ3MuZXh0cmFjdDoKKyAgICAgICAgaWYgbGVuKGFyZ3MuZXh0cmFjdCkgPT0gMToKKyAgICAgICAgICAgIHNyYyA9IGFyZ3MuZXh0cmFjdFswXQorICAgICAgICAgICAgY3VyZGlyID0gb3MuY3VyZGlyCisgICAgICAgIGVsaWYgbGVuKGFyZ3MuZXh0cmFjdCkgPT0gMjoKKyAgICAgICAgICAgIHNyYywgY3VyZGlyID0gYXJncy5leHRyYWN0CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwYXJzZXIuZXhpdCgxLCBwYXJzZXIuZm9ybWF0X2hlbHAoKSkKKworICAgICAgICBpZiBpc190YXJmaWxlKHNyYyk6CisgICAgICAgICAgICB3aXRoIFRhckZpbGUub3BlbihzcmMsICdyOionKSBhcyB0ZjoKKyAgICAgICAgICAgICAgICB0Zi5leHRyYWN0YWxsKHBhdGg9Y3VyZGlyKQorICAgICAgICAgICAgaWYgYXJncy52ZXJib3NlOgorICAgICAgICAgICAgICAgIGlmIGN1cmRpciA9PSAnLic6CisgICAgICAgICAgICAgICAgICAgIG1zZyA9ICd7IXJ9IGZpbGUgaXMgZXh0cmFjdGVkLicuZm9ybWF0KHNyYykKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBtc2cgPSAoJ3shcn0gZmlsZSBpcyBleHRyYWN0ZWQgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ludG8geyFyfSBkaXJlY3RvcnkuJykuZm9ybWF0KHNyYywgY3VyZGlyKQorICAgICAgICAgICAgICAgIHByaW50KG1zZykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBhcnNlci5leGl0KDEsICd7IXJ9IGlzIG5vdCBhIHRhciBhcmNoaXZlLlxuJy5mb3JtYXQoc3JjKSkKKworICAgIGVsaWYgYXJncy5jcmVhdGU6CisgICAgICAgIHRhcl9uYW1lID0gYXJncy5jcmVhdGUucG9wKDApCisgICAgICAgIF8sIGV4dCA9IG9zLnBhdGguc3BsaXRleHQodGFyX25hbWUpCisgICAgICAgIGNvbXByZXNzaW9ucyA9IHsKKyAgICAgICAgICAgICMgZ3oKKyAgICAgICAgICAgICcuZ3onOiAnZ3onLAorICAgICAgICAgICAgJy50Z3onOiAnZ3onLAorICAgICAgICAgICAgIyB4egorICAgICAgICAgICAgJy54eic6ICd4eicsCisgICAgICAgICAgICAnLnR4eic6ICd4eicsCisgICAgICAgICAgICAjIGJ6MgorICAgICAgICAgICAgJy5iejInOiAnYnoyJywKKyAgICAgICAgICAgICcudGJ6JzogJ2J6MicsCisgICAgICAgICAgICAnLnRiejInOiAnYnoyJywKKyAgICAgICAgICAgICcudGIyJzogJ2J6MicsCisgICAgICAgIH0KKyAgICAgICAgdGFyX21vZGUgPSAndzonICsgY29tcHJlc3Npb25zW2V4dF0gaWYgZXh0IGluIGNvbXByZXNzaW9ucyBlbHNlICd3JworICAgICAgICB0YXJfZmlsZXMgPSBhcmdzLmNyZWF0ZQorCisgICAgICAgIHdpdGggVGFyRmlsZS5vcGVuKHRhcl9uYW1lLCB0YXJfbW9kZSkgYXMgdGY6CisgICAgICAgICAgICBmb3IgZmlsZV9uYW1lIGluIHRhcl9maWxlczoKKyAgICAgICAgICAgICAgICB0Zi5hZGQoZmlsZV9uYW1lKQorCisgICAgICAgIGlmIGFyZ3MudmVyYm9zZToKKyAgICAgICAgICAgIHByaW50KCd7IXJ9IGZpbGUgY3JlYXRlZC4nLmZvcm1hdCh0YXJfbmFtZSkpCisKKyAgICBlbHNlOgorICAgICAgICBwYXJzZXIuZXhpdCgxLCBwYXJzZXIuZm9ybWF0X2hlbHAoKSkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBtYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZWxuZXRsaWIucHkgYi9MaWIvdGVsbmV0bGliLnB5CmluZGV4IGQ0OWQ0ZjQuLjUxNzM4ZjAgMTAwNjQ0Ci0tLSBhL0xpYi90ZWxuZXRsaWIucHkKKysrIGIvTGliL3RlbG5ldGxpYi5weQpAQCAtMTcsMTMgKzE3LDEyIEBACiBOb3RlIHRoYXQgcmVhZF9hbGwoKSB3b24ndCByZWFkIHVudGlsIGVvZiAtLSBpdCBqdXN0IHJlYWRzIHNvbWUgZGF0YQogLS0gYnV0IGl0IGd1YXJhbnRlZXMgdG8gcmVhZCBhdCBsZWFzdCBvbmUgYnl0ZSB1bmxlc3MgRU9GIGlzIGhpdC4KIAotSXQgaXMgcG9zc2libGUgdG8gcGFzcyBhIFRlbG5ldCBvYmplY3QgdG8gc2VsZWN0LnNlbGVjdCgpIGluIG9yZGVyIHRvCi13YWl0IHVudGlsIG1vcmUgZGF0YSBpcyBhdmFpbGFibGUuICBOb3RlIHRoYXQgaW4gdGhpcyBjYXNlLAotcmVhZF9lYWdlcigpIG1heSByZXR1cm4gYicnIGV2ZW4gaWYgdGhlcmUgd2FzIGRhdGEgb24gdGhlIHNvY2tldCwKLWJlY2F1c2UgdGhlIHByb3RvY29sIG5lZ290aWF0aW9uIG1heSBoYXZlIGVhdGVuIHRoZSBkYXRhLiAgVGhpcyBpcyB3aHkKLUVPRkVycm9yIGlzIG5lZWRlZCBpbiBzb21lIGNhc2VzIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gIm5vIGRhdGEiIGFuZAotImNvbm5lY3Rpb24gY2xvc2VkIiAoc2luY2UgdGhlIHNvY2tldCBhbHNvIGFwcGVhcnMgcmVhZHkgZm9yIHJlYWRpbmcKLXdoZW4gaXQgaXMgY2xvc2VkKS4KK0l0IGlzIHBvc3NpYmxlIHRvIHBhc3MgYSBUZWxuZXQgb2JqZWN0IHRvIGEgc2VsZWN0b3IgaW4gb3JkZXIgdG8gd2FpdCB1bnRpbAorbW9yZSBkYXRhIGlzIGF2YWlsYWJsZS4gIE5vdGUgdGhhdCBpbiB0aGlzIGNhc2UsIHJlYWRfZWFnZXIoKSBtYXkgcmV0dXJuIGInJworZXZlbiBpZiB0aGVyZSB3YXMgZGF0YSBvbiB0aGUgc29ja2V0LCBiZWNhdXNlIHRoZSBwcm90b2NvbCBuZWdvdGlhdGlvbiBtYXkgaGF2ZQorZWF0ZW4gdGhlIGRhdGEuICBUaGlzIGlzIHdoeSBFT0ZFcnJvciBpcyBuZWVkZWQgaW4gc29tZSBjYXNlcyB0byBkaXN0aW5ndWlzaAorYmV0d2VlbiAibm8gZGF0YSIgYW5kICJjb25uZWN0aW9uIGNsb3NlZCIgKHNpbmNlIHRoZSBzb2NrZXQgYWxzbyBhcHBlYXJzIHJlYWR5Citmb3IgcmVhZGluZyB3aGVuIGl0IGlzIGNsb3NlZCkuCiAKIFRvIGRvOgogLSBvcHRpb24gbmVnb3RpYXRpb24KQEAgLTM0LDEwICszMyw5IEBACiAKIAogIyBJbXBvcnRlZCBtb2R1bGVzCi1pbXBvcnQgZXJybm8KIGltcG9ydCBzeXMKIGltcG9ydCBzb2NrZXQKLWltcG9ydCBzZWxlY3QKK2ltcG9ydCBzZWxlY3RvcnMKIHRyeToKICAgICBmcm9tIHRpbWUgaW1wb3J0IG1vbm90b25pYyBhcyBfdGltZQogZXhjZXB0IEltcG9ydEVycm9yOgpAQCAtMTM0LDYgKzEzMiwxNSBAQAogRVhPUEwgPSBieXRlcyhbMjU1XSkgIyBFeHRlbmRlZC1PcHRpb25zLUxpc3QKIE5PT1BUID0gYnl0ZXMoWzBdKQogCisKKyMgcG9sbC9zZWxlY3QgaGF2ZSB0aGUgYWR2YW50YWdlIG9mIG5vdCByZXF1aXJpbmcgYW55IGV4dHJhIGZpbGUgZGVzY3JpcHRvciwKKyMgY29udHJhcmlseSB0byBlcG9sbC9rcXVldWUgKGFsc28sIHRoZXkgcmVxdWlyZSBhIHNpbmdsZSBzeXNjYWxsKS4KK2lmIGhhc2F0dHIoc2VsZWN0b3JzLCAnUG9sbFNlbGVjdG9yJyk6CisgICAgX1RlbG5ldFNlbGVjdG9yID0gc2VsZWN0b3JzLlBvbGxTZWxlY3RvcgorZWxzZToKKyAgICBfVGVsbmV0U2VsZWN0b3IgPSBzZWxlY3RvcnMuU2VsZWN0U2VsZWN0b3IKKworCiBjbGFzcyBUZWxuZXQ6CiAKICAgICAiIiJUZWxuZXQgaW50ZXJmYWNlIGNsYXNzLgpAQCAtMjEwLDcgKzIxNyw2IEBACiAgICAgICAgIHNlbGYuc2IgPSAwICMgZmxhZyBmb3IgU0IgYW5kIFNFIHNlcXVlbmNlLgogICAgICAgICBzZWxmLnNiZGF0YXEgPSBiJycKICAgICAgICAgc2VsZi5vcHRpb25fY2FsbGJhY2sgPSBOb25lCi0gICAgICAgIHNlbGYuX2hhc19wb2xsID0gaGFzYXR0cihzZWxlY3QsICdwb2xsJykKICAgICAgICAgaWYgaG9zdCBpcyBub3QgTm9uZToKICAgICAgICAgICAgIHNlbGYub3Blbihob3N0LCBwb3J0LCB0aW1lb3V0KQogCkBAIC0yNTgsMTIgKzI2NCwxMyBAQAogCiAgICAgZGVmIGNsb3NlKHNlbGYpOgogICAgICAgICAiIiJDbG9zZSB0aGUgY29ubmVjdGlvbi4iIiIKLSAgICAgICAgaWYgc2VsZi5zb2NrOgotICAgICAgICAgICAgc2VsZi5zb2NrLmNsb3NlKCkKKyAgICAgICAgc29jayA9IHNlbGYuc29jawogICAgICAgICBzZWxmLnNvY2sgPSAwCiAgICAgICAgIHNlbGYuZW9mID0gMQogICAgICAgICBzZWxmLmlhY3NlcSA9IGInJwogICAgICAgICBzZWxmLnNiID0gMAorICAgICAgICBpZiBzb2NrOgorICAgICAgICAgICAgc29jay5jbG9zZSgpCiAKICAgICBkZWYgZ2V0X3NvY2tldChzZWxmKToKICAgICAgICAgIiIiUmV0dXJuIHRoZSBzb2NrZXQgb2JqZWN0IHVzZWQgaW50ZXJuYWxseS4iIiIKQEAgLTI3Nyw3ICsyODQsNyBAQAogICAgICAgICAiIiJXcml0ZSBhIHN0cmluZyB0byB0aGUgc29ja2V0LCBkb3VibGluZyBhbnkgSUFDIGNoYXJhY3RlcnMuCiAKICAgICAgICAgQ2FuIGJsb2NrIGlmIHRoZSBjb25uZWN0aW9uIGlzIGJsb2NrZWQuICBNYXkgcmFpc2UKLSAgICAgICAgc29ja2V0LmVycm9yIGlmIHRoZSBjb25uZWN0aW9uIGlzIGNsb3NlZC4KKyAgICAgICAgT1NFcnJvciBpZiB0aGUgY29ubmVjdGlvbiBpcyBjbG9zZWQuCiAKICAgICAgICAgIiIiCiAgICAgICAgIGlmIElBQyBpbiBidWZmZXI6CkBAIC0yOTMsNjEgKzMwMCw2IEBACiAgICAgICAgIGlzIGNsb3NlZCBhbmQgbm8gY29va2VkIGRhdGEgaXMgYXZhaWxhYmxlLgogCiAgICAgICAgICIiIgotICAgICAgICBpZiBzZWxmLl9oYXNfcG9sbDoKLSAgICAgICAgICAgIHJldHVybiBzZWxmLl9yZWFkX3VudGlsX3dpdGhfcG9sbChtYXRjaCwgdGltZW91dCkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLl9yZWFkX3VudGlsX3dpdGhfc2VsZWN0KG1hdGNoLCB0aW1lb3V0KQotCi0gICAgZGVmIF9yZWFkX3VudGlsX3dpdGhfcG9sbChzZWxmLCBtYXRjaCwgdGltZW91dCk6Ci0gICAgICAgICIiIlJlYWQgdW50aWwgYSBnaXZlbiBzdHJpbmcgaXMgZW5jb3VudGVyZWQgb3IgdW50aWwgdGltZW91dC4KLQotICAgICAgICBUaGlzIG1ldGhvZCB1c2VzIHNlbGVjdC5wb2xsKCkgdG8gaW1wbGVtZW50IHRoZSB0aW1lb3V0LgotICAgICAgICAiIiIKLSAgICAgICAgbiA9IGxlbihtYXRjaCkKLSAgICAgICAgY2FsbF90aW1lb3V0ID0gdGltZW91dAotICAgICAgICBpZiB0aW1lb3V0IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgdGltZV9zdGFydCA9IF90aW1lKCkKLSAgICAgICAgc2VsZi5wcm9jZXNzX3Jhd3EoKQotICAgICAgICBpID0gc2VsZi5jb29rZWRxLmZpbmQobWF0Y2gpCi0gICAgICAgIGlmIGkgPCAwOgotICAgICAgICAgICAgcG9sbGVyID0gc2VsZWN0LnBvbGwoKQotICAgICAgICAgICAgcG9sbF9pbl9vcl9wcmlvcml0eV9mbGFncyA9IHNlbGVjdC5QT0xMSU4gfCBzZWxlY3QuUE9MTFBSSQotICAgICAgICAgICAgcG9sbGVyLnJlZ2lzdGVyKHNlbGYsIHBvbGxfaW5fb3JfcHJpb3JpdHlfZmxhZ3MpCi0gICAgICAgICAgICB3aGlsZSBpIDwgMCBhbmQgbm90IHNlbGYuZW9mOgotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgcmVhZHkgPSBwb2xsZXIucG9sbChOb25lIGlmIHRpbWVvdXQgaXMgTm9uZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgMTAwMCAqIGNhbGxfdGltZW91dCkKLSAgICAgICAgICAgICAgICBleGNlcHQgc2VsZWN0LmVycm9yIGFzIGU6Ci0gICAgICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gZXJybm8uRUlOVFI6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiB0aW1lb3V0IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsYXBzZWQgPSBfdGltZSgpIC0gdGltZV9zdGFydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxfdGltZW91dCA9IHRpbWVvdXQtZWxhcHNlZAotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgICAgICAgICBmb3IgZmQsIG1vZGUgaW4gcmVhZHk6Ci0gICAgICAgICAgICAgICAgICAgIGlmIG1vZGUgJiBwb2xsX2luX29yX3ByaW9yaXR5X2ZsYWdzOgotICAgICAgICAgICAgICAgICAgICAgICAgaSA9IG1heCgwLCBsZW4oc2VsZi5jb29rZWRxKS1uKQotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5maWxsX3Jhd3EoKQotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wcm9jZXNzX3Jhd3EoKQotICAgICAgICAgICAgICAgICAgICAgICAgaSA9IHNlbGYuY29va2VkcS5maW5kKG1hdGNoLCBpKQotICAgICAgICAgICAgICAgIGlmIHRpbWVvdXQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgIGVsYXBzZWQgPSBfdGltZSgpIC0gdGltZV9zdGFydAotICAgICAgICAgICAgICAgICAgICBpZiBlbGFwc2VkID49IHRpbWVvdXQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgICAgICBjYWxsX3RpbWVvdXQgPSB0aW1lb3V0LWVsYXBzZWQKLSAgICAgICAgICAgIHBvbGxlci51bnJlZ2lzdGVyKHNlbGYpCi0gICAgICAgIGlmIGkgPj0gMDoKLSAgICAgICAgICAgIGkgPSBpICsgbgotICAgICAgICAgICAgYnVmID0gc2VsZi5jb29rZWRxWzppXQotICAgICAgICAgICAgc2VsZi5jb29rZWRxID0gc2VsZi5jb29rZWRxW2k6XQotICAgICAgICAgICAgcmV0dXJuIGJ1ZgotICAgICAgICByZXR1cm4gc2VsZi5yZWFkX3ZlcnlfbGF6eSgpCi0KLSAgICBkZWYgX3JlYWRfdW50aWxfd2l0aF9zZWxlY3Qoc2VsZiwgbWF0Y2gsIHRpbWVvdXQ9Tm9uZSk6Ci0gICAgICAgICIiIlJlYWQgdW50aWwgYSBnaXZlbiBzdHJpbmcgaXMgZW5jb3VudGVyZWQgb3IgdW50aWwgdGltZW91dC4KLQotICAgICAgICBUaGUgdGltZW91dCBpcyBpbXBsZW1lbnRlZCB1c2luZyBzZWxlY3Quc2VsZWN0KCkuCi0gICAgICAgICIiIgogICAgICAgICBuID0gbGVuKG1hdGNoKQogICAgICAgICBzZWxmLnByb2Nlc3NfcmF3cSgpCiAgICAgICAgIGkgPSBzZWxmLmNvb2tlZHEuZmluZChtYXRjaCkKQEAgLTM1NiwyNiArMzA4LDI1IEBACiAgICAgICAgICAgICBidWYgPSBzZWxmLmNvb2tlZHFbOmldCiAgICAgICAgICAgICBzZWxmLmNvb2tlZHEgPSBzZWxmLmNvb2tlZHFbaTpdCiAgICAgICAgICAgICByZXR1cm4gYnVmCi0gICAgICAgIHNfcmVwbHkgPSAoW3NlbGZdLCBbXSwgW10pCi0gICAgICAgIHNfYXJncyA9IHNfcmVwbHkKICAgICAgICAgaWYgdGltZW91dCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHNfYXJncyA9IHNfYXJncyArICh0aW1lb3V0LCkKLSAgICAgICAgICAgIHRpbWVfc3RhcnQgPSBfdGltZSgpCi0gICAgICAgIHdoaWxlIG5vdCBzZWxmLmVvZiBhbmQgc2VsZWN0LnNlbGVjdCgqc19hcmdzKSA9PSBzX3JlcGx5OgotICAgICAgICAgICAgaSA9IG1heCgwLCBsZW4oc2VsZi5jb29rZWRxKS1uKQotICAgICAgICAgICAgc2VsZi5maWxsX3Jhd3EoKQotICAgICAgICAgICAgc2VsZi5wcm9jZXNzX3Jhd3EoKQotICAgICAgICAgICAgaSA9IHNlbGYuY29va2VkcS5maW5kKG1hdGNoLCBpKQotICAgICAgICAgICAgaWYgaSA+PSAwOgotICAgICAgICAgICAgICAgIGkgPSBpK24KLSAgICAgICAgICAgICAgICBidWYgPSBzZWxmLmNvb2tlZHFbOmldCi0gICAgICAgICAgICAgICAgc2VsZi5jb29rZWRxID0gc2VsZi5jb29rZWRxW2k6XQotICAgICAgICAgICAgICAgIHJldHVybiBidWYKLSAgICAgICAgICAgIGlmIHRpbWVvdXQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgZWxhcHNlZCA9IF90aW1lKCkgLSB0aW1lX3N0YXJ0Ci0gICAgICAgICAgICAgICAgaWYgZWxhcHNlZCA+PSB0aW1lb3V0OgotICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgIHNfYXJncyA9IHNfcmVwbHkgKyAodGltZW91dC1lbGFwc2VkLCkKKyAgICAgICAgICAgIGRlYWRsaW5lID0gX3RpbWUoKSArIHRpbWVvdXQKKyAgICAgICAgd2l0aCBfVGVsbmV0U2VsZWN0b3IoKSBhcyBzZWxlY3RvcjoKKyAgICAgICAgICAgIHNlbGVjdG9yLnJlZ2lzdGVyKHNlbGYsIHNlbGVjdG9ycy5FVkVOVF9SRUFEKQorICAgICAgICAgICAgd2hpbGUgbm90IHNlbGYuZW9mOgorICAgICAgICAgICAgICAgIGlmIHNlbGVjdG9yLnNlbGVjdCh0aW1lb3V0KToKKyAgICAgICAgICAgICAgICAgICAgaSA9IG1heCgwLCBsZW4oc2VsZi5jb29rZWRxKS1uKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmZpbGxfcmF3cSgpCisgICAgICAgICAgICAgICAgICAgIHNlbGYucHJvY2Vzc19yYXdxKCkKKyAgICAgICAgICAgICAgICAgICAgaSA9IHNlbGYuY29va2VkcS5maW5kKG1hdGNoLCBpKQorICAgICAgICAgICAgICAgICAgICBpZiBpID49IDA6CisgICAgICAgICAgICAgICAgICAgICAgICBpID0gaStuCisgICAgICAgICAgICAgICAgICAgICAgICBidWYgPSBzZWxmLmNvb2tlZHFbOmldCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvb2tlZHEgPSBzZWxmLmNvb2tlZHFbaTpdCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYnVmCisgICAgICAgICAgICAgICAgaWYgdGltZW91dCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgdGltZW91dCA9IGRlYWRsaW5lIC0gX3RpbWUoKQorICAgICAgICAgICAgICAgICAgICBpZiB0aW1lb3V0IDwgMDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgIHJldHVybiBzZWxmLnJlYWRfdmVyeV9sYXp5KCkKIAogICAgIGRlZiByZWFkX2FsbChzZWxmKToKQEAgLTU4MCwyOSArNTMxLDM1IEBACiAKICAgICBkZWYgc29ja19hdmFpbChzZWxmKToKICAgICAgICAgIiIiVGVzdCB3aGV0aGVyIGRhdGEgaXMgYXZhaWxhYmxlIG9uIHRoZSBzb2NrZXQuIiIiCi0gICAgICAgIHJldHVybiBzZWxlY3Quc2VsZWN0KFtzZWxmXSwgW10sIFtdLCAwKSA9PSAoW3NlbGZdLCBbXSwgW10pCisgICAgICAgIHdpdGggX1RlbG5ldFNlbGVjdG9yKCkgYXMgc2VsZWN0b3I6CisgICAgICAgICAgICBzZWxlY3Rvci5yZWdpc3RlcihzZWxmLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCkKKyAgICAgICAgICAgIHJldHVybiBib29sKHNlbGVjdG9yLnNlbGVjdCgwKSkKIAogICAgIGRlZiBpbnRlcmFjdChzZWxmKToKICAgICAgICAgIiIiSW50ZXJhY3Rpb24gZnVuY3Rpb24sIGVtdWxhdGVzIGEgdmVyeSBkdW1iIHRlbG5ldCBjbGllbnQuIiIiCiAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiOgogICAgICAgICAgICAgc2VsZi5tdF9pbnRlcmFjdCgpCiAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgd2hpbGUgMToKLSAgICAgICAgICAgIHJmZCwgd2ZkLCB4ZmQgPSBzZWxlY3Quc2VsZWN0KFtzZWxmLCBzeXMuc3RkaW5dLCBbXSwgW10pCi0gICAgICAgICAgICBpZiBzZWxmIGluIHJmZDoKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIHRleHQgPSBzZWxmLnJlYWRfZWFnZXIoKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBFT0ZFcnJvcjoKLSAgICAgICAgICAgICAgICAgICAgcHJpbnQoJyoqKiBDb25uZWN0aW9uIGNsb3NlZCBieSByZW1vdGUgaG9zdCAqKionKQotICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgIGlmIHRleHQ6Ci0gICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUodGV4dC5kZWNvZGUoJ2FzY2lpJykpCi0gICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQotICAgICAgICAgICAgaWYgc3lzLnN0ZGluIGluIHJmZDoKLSAgICAgICAgICAgICAgICBsaW5lID0gc3lzLnN0ZGluLnJlYWRsaW5lKCkuZW5jb2RlKCdhc2NpaScpCi0gICAgICAgICAgICAgICAgaWYgbm90IGxpbmU6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgc2VsZi53cml0ZShsaW5lKQorICAgICAgICB3aXRoIF9UZWxuZXRTZWxlY3RvcigpIGFzIHNlbGVjdG9yOgorICAgICAgICAgICAgc2VsZWN0b3IucmVnaXN0ZXIoc2VsZiwgc2VsZWN0b3JzLkVWRU5UX1JFQUQpCisgICAgICAgICAgICBzZWxlY3Rvci5yZWdpc3RlcihzeXMuc3RkaW4sIHNlbGVjdG9ycy5FVkVOVF9SRUFEKQorCisgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgIGZvciBrZXksIGV2ZW50cyBpbiBzZWxlY3Rvci5zZWxlY3QoKToKKyAgICAgICAgICAgICAgICAgICAgaWYga2V5LmZpbGVvYmogaXMgc2VsZjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0ID0gc2VsZi5yZWFkX2VhZ2VyKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBFT0ZFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgnKioqIENvbm5lY3Rpb24gY2xvc2VkIGJ5IHJlbW90ZSBob3N0ICoqKicpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXh0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUodGV4dC5kZWNvZGUoJ2FzY2lpJykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCisgICAgICAgICAgICAgICAgICAgIGVsaWYga2V5LmZpbGVvYmogaXMgc3lzLnN0ZGluOgorICAgICAgICAgICAgICAgICAgICAgICAgbGluZSA9IHN5cy5zdGRpbi5yZWFkbGluZSgpLmVuY29kZSgnYXNjaWknKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGxpbmU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLndyaXRlKGxpbmUpCiAKICAgICBkZWYgbXRfaW50ZXJhY3Qoc2VsZik6CiAgICAgICAgICIiIk11bHRpdGhyZWFkZWQgdmVyc2lvbiBvZiBpbnRlcmFjdCgpLiIiIgpAQCAtNjQ5LDc5ICs2MDYsNiBAQAogICAgICAgICByZXN1bHRzIGFyZSB1bmRldGVybWluaXN0aWMsIGFuZCBtYXkgZGVwZW5kIG9uIHRoZSBJL08gdGltaW5nLgogCiAgICAgICAgICIiIgotICAgICAgICBpZiBzZWxmLl9oYXNfcG9sbDoKLSAgICAgICAgICAgIHJldHVybiBzZWxmLl9leHBlY3Rfd2l0aF9wb2xsKGxpc3QsIHRpbWVvdXQpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5fZXhwZWN0X3dpdGhfc2VsZWN0KGxpc3QsIHRpbWVvdXQpCi0KLSAgICBkZWYgX2V4cGVjdF93aXRoX3BvbGwoc2VsZiwgZXhwZWN0X2xpc3QsIHRpbWVvdXQ9Tm9uZSk6Ci0gICAgICAgICIiIlJlYWQgdW50aWwgb25lIGZyb20gYSBsaXN0IG9mIGEgcmVndWxhciBleHByZXNzaW9ucyBtYXRjaGVzLgotCi0gICAgICAgIFRoaXMgbWV0aG9kIHVzZXMgc2VsZWN0LnBvbGwoKSB0byBpbXBsZW1lbnQgdGhlIHRpbWVvdXQuCi0gICAgICAgICIiIgotICAgICAgICByZSA9IE5vbmUKLSAgICAgICAgZXhwZWN0X2xpc3QgPSBleHBlY3RfbGlzdFs6XQotICAgICAgICBpbmRpY2VzID0gcmFuZ2UobGVuKGV4cGVjdF9saXN0KSkKLSAgICAgICAgZm9yIGkgaW4gaW5kaWNlczoKLSAgICAgICAgICAgIGlmIG5vdCBoYXNhdHRyKGV4cGVjdF9saXN0W2ldLCAic2VhcmNoIik6Ci0gICAgICAgICAgICAgICAgaWYgbm90IHJlOiBpbXBvcnQgcmUKLSAgICAgICAgICAgICAgICBleHBlY3RfbGlzdFtpXSA9IHJlLmNvbXBpbGUoZXhwZWN0X2xpc3RbaV0pCi0gICAgICAgIGNhbGxfdGltZW91dCA9IHRpbWVvdXQKLSAgICAgICAgaWYgdGltZW91dCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHRpbWVfc3RhcnQgPSBfdGltZSgpCi0gICAgICAgIHNlbGYucHJvY2Vzc19yYXdxKCkKLSAgICAgICAgbSA9IE5vbmUKLSAgICAgICAgZm9yIGkgaW4gaW5kaWNlczoKLSAgICAgICAgICAgIG0gPSBleHBlY3RfbGlzdFtpXS5zZWFyY2goc2VsZi5jb29rZWRxKQotICAgICAgICAgICAgaWYgbToKLSAgICAgICAgICAgICAgICBlID0gbS5lbmQoKQotICAgICAgICAgICAgICAgIHRleHQgPSBzZWxmLmNvb2tlZHFbOmVdCi0gICAgICAgICAgICAgICAgc2VsZi5jb29rZWRxID0gc2VsZi5jb29rZWRxW2U6XQotICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgIGlmIG5vdCBtOgotICAgICAgICAgICAgcG9sbGVyID0gc2VsZWN0LnBvbGwoKQotICAgICAgICAgICAgcG9sbF9pbl9vcl9wcmlvcml0eV9mbGFncyA9IHNlbGVjdC5QT0xMSU4gfCBzZWxlY3QuUE9MTFBSSQotICAgICAgICAgICAgcG9sbGVyLnJlZ2lzdGVyKHNlbGYsIHBvbGxfaW5fb3JfcHJpb3JpdHlfZmxhZ3MpCi0gICAgICAgICAgICB3aGlsZSBub3QgbSBhbmQgbm90IHNlbGYuZW9mOgotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgcmVhZHkgPSBwb2xsZXIucG9sbChOb25lIGlmIHRpbWVvdXQgaXMgTm9uZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgMTAwMCAqIGNhbGxfdGltZW91dCkKLSAgICAgICAgICAgICAgICBleGNlcHQgc2VsZWN0LmVycm9yIGFzIGU6Ci0gICAgICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gZXJybm8uRUlOVFI6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiB0aW1lb3V0IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsYXBzZWQgPSBfdGltZSgpIC0gdGltZV9zdGFydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxfdGltZW91dCA9IHRpbWVvdXQtZWxhcHNlZAotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgICAgICAgICBmb3IgZmQsIG1vZGUgaW4gcmVhZHk6Ci0gICAgICAgICAgICAgICAgICAgIGlmIG1vZGUgJiBwb2xsX2luX29yX3ByaW9yaXR5X2ZsYWdzOgotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5maWxsX3Jhd3EoKQotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wcm9jZXNzX3Jhd3EoKQotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGkgaW4gaW5kaWNlczoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtID0gZXhwZWN0X2xpc3RbaV0uc2VhcmNoKHNlbGYuY29va2VkcSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBtOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlID0gbS5lbmQoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0ID0gc2VsZi5jb29rZWRxWzplXQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvb2tlZHEgPSBzZWxmLmNvb2tlZHFbZTpdCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgaWYgdGltZW91dCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgZWxhcHNlZCA9IF90aW1lKCkgLSB0aW1lX3N0YXJ0Ci0gICAgICAgICAgICAgICAgICAgIGlmIGVsYXBzZWQgPj0gdGltZW91dDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgICAgIGNhbGxfdGltZW91dCA9IHRpbWVvdXQtZWxhcHNlZAotICAgICAgICAgICAgcG9sbGVyLnVucmVnaXN0ZXIoc2VsZikKLSAgICAgICAgaWYgbToKLSAgICAgICAgICAgIHJldHVybiAoaSwgbSwgdGV4dCkKLSAgICAgICAgdGV4dCA9IHNlbGYucmVhZF92ZXJ5X2xhenkoKQotICAgICAgICBpZiBub3QgdGV4dCBhbmQgc2VsZi5lb2Y6Ci0gICAgICAgICAgICByYWlzZSBFT0ZFcnJvcgotICAgICAgICByZXR1cm4gKC0xLCBOb25lLCB0ZXh0KQotCi0gICAgZGVmIF9leHBlY3Rfd2l0aF9zZWxlY3Qoc2VsZiwgbGlzdCwgdGltZW91dD1Ob25lKToKLSAgICAgICAgIiIiUmVhZCB1bnRpbCBvbmUgZnJvbSBhIGxpc3Qgb2YgYSByZWd1bGFyIGV4cHJlc3Npb25zIG1hdGNoZXMuCi0KLSAgICAgICAgVGhlIHRpbWVvdXQgaXMgaW1wbGVtZW50ZWQgdXNpbmcgc2VsZWN0LnNlbGVjdCgpLgotICAgICAgICAiIiIKICAgICAgICAgcmUgPSBOb25lCiAgICAgICAgIGxpc3QgPSBsaXN0WzpdCiAgICAgICAgIGluZGljZXMgPSByYW5nZShsZW4obGlzdCkpCkBAIC03MzAsMjcgKzYxNCwyNyBAQAogICAgICAgICAgICAgICAgIGlmIG5vdCByZTogaW1wb3J0IHJlCiAgICAgICAgICAgICAgICAgbGlzdFtpXSA9IHJlLmNvbXBpbGUobGlzdFtpXSkKICAgICAgICAgaWYgdGltZW91dCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHRpbWVfc3RhcnQgPSBfdGltZSgpCi0gICAgICAgIHdoaWxlIDE6Ci0gICAgICAgICAgICBzZWxmLnByb2Nlc3NfcmF3cSgpCi0gICAgICAgICAgICBmb3IgaSBpbiBpbmRpY2VzOgotICAgICAgICAgICAgICAgIG0gPSBsaXN0W2ldLnNlYXJjaChzZWxmLmNvb2tlZHEpCi0gICAgICAgICAgICAgICAgaWYgbToKLSAgICAgICAgICAgICAgICAgICAgZSA9IG0uZW5kKCkKLSAgICAgICAgICAgICAgICAgICAgdGV4dCA9IHNlbGYuY29va2VkcVs6ZV0KLSAgICAgICAgICAgICAgICAgICAgc2VsZi5jb29rZWRxID0gc2VsZi5jb29rZWRxW2U6XQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGksIG0sIHRleHQpCi0gICAgICAgICAgICBpZiBzZWxmLmVvZjoKLSAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgaWYgdGltZW91dCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICBlbGFwc2VkID0gX3RpbWUoKSAtIHRpbWVfc3RhcnQKLSAgICAgICAgICAgICAgICBpZiBlbGFwc2VkID49IHRpbWVvdXQ6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgc19hcmdzID0gKFtzZWxmLmZpbGVubygpXSwgW10sIFtdLCB0aW1lb3V0LWVsYXBzZWQpCi0gICAgICAgICAgICAgICAgciwgdywgeCA9IHNlbGVjdC5zZWxlY3QoKnNfYXJncykKLSAgICAgICAgICAgICAgICBpZiBub3QgcjoKLSAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIHNlbGYuZmlsbF9yYXdxKCkKKyAgICAgICAgICAgIGRlYWRsaW5lID0gX3RpbWUoKSArIHRpbWVvdXQKKyAgICAgICAgd2l0aCBfVGVsbmV0U2VsZWN0b3IoKSBhcyBzZWxlY3RvcjoKKyAgICAgICAgICAgIHNlbGVjdG9yLnJlZ2lzdGVyKHNlbGYsIHNlbGVjdG9ycy5FVkVOVF9SRUFEKQorICAgICAgICAgICAgd2hpbGUgbm90IHNlbGYuZW9mOgorICAgICAgICAgICAgICAgIHNlbGYucHJvY2Vzc19yYXdxKCkKKyAgICAgICAgICAgICAgICBmb3IgaSBpbiBpbmRpY2VzOgorICAgICAgICAgICAgICAgICAgICBtID0gbGlzdFtpXS5zZWFyY2goc2VsZi5jb29rZWRxKQorICAgICAgICAgICAgICAgICAgICBpZiBtOgorICAgICAgICAgICAgICAgICAgICAgICAgZSA9IG0uZW5kKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHQgPSBzZWxmLmNvb2tlZHFbOmVdCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvb2tlZHEgPSBzZWxmLmNvb2tlZHFbZTpdCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGksIG0sIHRleHQpCisgICAgICAgICAgICAgICAgaWYgdGltZW91dCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgcmVhZHkgPSBzZWxlY3Rvci5zZWxlY3QodGltZW91dCkKKyAgICAgICAgICAgICAgICAgICAgdGltZW91dCA9IGRlYWRsaW5lIC0gX3RpbWUoKQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgcmVhZHk6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiB0aW1lb3V0IDwgMDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIHNlbGYuZmlsbF9yYXdxKCkKICAgICAgICAgdGV4dCA9IHNlbGYucmVhZF92ZXJ5X2xhenkoKQogICAgICAgICBpZiBub3QgdGV4dCBhbmQgc2VsZi5lb2Y6CiAgICAgICAgICAgICByYWlzZSBFT0ZFcnJvcgpkaWZmIC0tZ2l0IGEvTGliL3RlbXBmaWxlLnB5IGIvTGliL3RlbXBmaWxlLnB5CmluZGV4IDZiYzg0MmYuLjA1MzcyMjggMTAwNjQ0Ci0tLSBhL0xpYi90ZW1wZmlsZS5weQorKysgYi9MaWIvdGVtcGZpbGUucHkKQEAgLTEsMTAgKzEsMTAgQEAKICIiIlRlbXBvcmFyeSBmaWxlcy4KIAogVGhpcyBtb2R1bGUgcHJvdmlkZXMgZ2VuZXJpYywgbG93LSBhbmQgaGlnaC1sZXZlbCBpbnRlcmZhY2VzIGZvcgotY3JlYXRpbmcgdGVtcG9yYXJ5IGZpbGVzIGFuZCBkaXJlY3Rvcmllcy4gIFRoZSBpbnRlcmZhY2VzIGxpc3RlZAotYXMgInNhZmUiIGp1c3QgYmVsb3cgY2FuIGJlIHVzZWQgd2l0aG91dCBmZWFyIG9mIHJhY2UgY29uZGl0aW9ucy4KLVRob3NlIGxpc3RlZCBhcyAidW5zYWZlIiBjYW5ub3QsIGFuZCBhcmUgcHJvdmlkZWQgZm9yIGJhY2t3YXJkCi1jb21wYXRpYmlsaXR5IG9ubHkuCitjcmVhdGluZyB0ZW1wb3JhcnkgZmlsZXMgYW5kIGRpcmVjdG9yaWVzLiAgQWxsIG9mIHRoZSBpbnRlcmZhY2VzCitwcm92aWRlZCBieSB0aGlzIG1vZHVsZSBjYW4gYmUgdXNlZCB3aXRob3V0IGZlYXIgb2YgcmFjZSBjb25kaXRpb25zCitleGNlcHQgZm9yICdta3RlbXAnLiAgJ21rdGVtcCcgaXMgc3ViamVjdCB0byByYWNlIGNvbmRpdGlvbnMgYW5kCitzaG91bGQgbm90IGJlIHVzZWQ7IGl0IGlzIHByb3ZpZGVkIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IG9ubHkuCiAKIFRoaXMgbW9kdWxlIGFsc28gcHJvdmlkZXMgc29tZSBkYXRhIGl0ZW1zIHRvIHRoZSB1c2VyOgogCkBAIC0yNyw3ICsyNyw2IEBACiAKICMgSW1wb3J0cy4KIAotaW1wb3J0IGF0ZXhpdCBhcyBfYXRleGl0CiBpbXBvcnQgZnVuY3Rvb2xzIGFzIF9mdW5jdG9vbHMKIGltcG9ydCB3YXJuaW5ncyBhcyBfd2FybmluZ3MKIGltcG9ydCBpbyBhcyBfaW8KQEAgLTM1LDIzICszNCw3IEBACiBpbXBvcnQgc2h1dGlsIGFzIF9zaHV0aWwKIGltcG9ydCBlcnJubyBhcyBfZXJybm8KIGZyb20gcmFuZG9tIGltcG9ydCBSYW5kb20gYXMgX1JhbmRvbQotCi10cnk6Ci0gICAgaW1wb3J0IGZjbnRsIGFzIF9mY250bAotZXhjZXB0IEltcG9ydEVycm9yOgotICAgIGRlZiBfc2V0X2Nsb2V4ZWMoZmQpOgotICAgICAgICBwYXNzCi1lbHNlOgotICAgIGRlZiBfc2V0X2Nsb2V4ZWMoZmQpOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBmbGFncyA9IF9mY250bC5mY250bChmZCwgX2ZjbnRsLkZfR0VURkQsIDApCi0gICAgICAgIGV4Y2VwdCBPU0Vycm9yOgotICAgICAgICAgICAgcGFzcwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgIyBmbGFncyByZWFkIHN1Y2Nlc3NmdWxseSwgbW9kaWZ5Ci0gICAgICAgICAgICBmbGFncyB8PSBfZmNudGwuRkRfQ0xPRVhFQwotICAgICAgICAgICAgX2ZjbnRsLmZjbnRsKGZkLCBfZmNudGwuRl9TRVRGRCwgZmxhZ3MpCi0KK2ltcG9ydCB3ZWFrcmVmIGFzIF93ZWFrcmVmCiAKIHRyeToKICAgICBpbXBvcnQgX3RocmVhZApAQCAtNjAsOCArNDMsNiBAQAogX2FsbG9jYXRlX2xvY2sgPSBfdGhyZWFkLmFsbG9jYXRlX2xvY2sKIAogX3RleHRfb3BlbmZsYWdzID0gX29zLk9fUkRXUiB8IF9vcy5PX0NSRUFUIHwgX29zLk9fRVhDTAotaWYgaGFzYXR0cihfb3MsICdPX05PSU5IRVJJVCcpOgotICAgIF90ZXh0X29wZW5mbGFncyB8PSBfb3MuT19OT0lOSEVSSVQKIGlmIGhhc2F0dHIoX29zLCAnT19OT0ZPTExPVycpOgogICAgIF90ZXh0X29wZW5mbGFncyB8PSBfb3MuT19OT0ZPTExPVwogCkBAIC05MCw4ICs3MSw4IEBACiAgICAgIyBGYWxsYmFjay4gIEFsbCB3ZSBuZWVkIGlzIHNvbWV0aGluZyB0aGF0IHJhaXNlcyBPU0Vycm9yIGlmIHRoZQogICAgICMgZmlsZSBkb2Vzbid0IGV4aXN0LgogICAgIGRlZiBfc3RhdChmbik6Ci0gICAgICAgIGYgPSBvcGVuKGZuKQotICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgZmQgPSBfb3Mub3BlbihmbiwgX29zLk9fUkRPTkxZKQorICAgICAgICBfb3MuY2xvc2UoZmQpCiAKIGRlZiBfZXhpc3RzKGZuKToKICAgICB0cnk6CkBAIC0xMjUsNyArMTA2LDcgQEAKICAgICBkZWYgX19uZXh0X18oc2VsZik6CiAgICAgICAgIGMgPSBzZWxmLmNoYXJhY3RlcnMKICAgICAgICAgY2hvb3NlID0gc2VsZi5ybmcuY2hvaWNlCi0gICAgICAgIGxldHRlcnMgPSBbY2hvb3NlKGMpIGZvciBkdW1teSBpbiAiMTIzNDU2Il0KKyAgICAgICAgbGV0dGVycyA9IFtjaG9vc2UoYykgZm9yIGR1bW15IGluIHJhbmdlKDgpXQogICAgICAgICByZXR1cm4gJycuam9pbihsZXR0ZXJzKQogCiBkZWYgX2NhbmRpZGF0ZV90ZW1wZGlyX2xpc3QoKToKQEAgLTE2Nyw3ICsxNDgsNyBAQAogCiAgICAgZm9yIGRpciBpbiBkaXJsaXN0OgogICAgICAgICBpZiBkaXIgIT0gX29zLmN1cmRpcjoKLSAgICAgICAgICAgIGRpciA9IF9vcy5wYXRoLm5vcm1jYXNlKF9vcy5wYXRoLmFic3BhdGgoZGlyKSkKKyAgICAgICAgICAgIGRpciA9IF9vcy5wYXRoLmFic3BhdGgoZGlyKQogICAgICAgICAjIFRyeSBvbmx5IGEgZmV3IG5hbWVzIHBlciBkaXJlY3RvcnkuCiAgICAgICAgIGZvciBzZXEgaW4gcmFuZ2UoMTAwKToKICAgICAgICAgICAgIG5hbWUgPSBuZXh0KG5hbWVyKQpAQCAtMTg1LDYgKzE2NiwxMyBAQAogICAgICAgICAgICAgICAgIHJldHVybiBkaXIKICAgICAgICAgICAgIGV4Y2VwdCBGaWxlRXhpc3RzRXJyb3I6CiAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZXhjZXB0IFBlcm1pc3Npb25FcnJvcjoKKyAgICAgICAgICAgICAgICAjIFRoaXMgZXhjZXB0aW9uIGlzIHRocm93biB3aGVuIGEgZGlyZWN0b3J5IHdpdGggdGhlIGNob3NlbiBuYW1lCisgICAgICAgICAgICAgICAgIyBhbHJlYWR5IGV4aXN0cyBvbiB3aW5kb3dzLgorICAgICAgICAgICAgICAgIGlmIChfb3MubmFtZSA9PSAnbnQnIGFuZCBfb3MucGF0aC5pc2RpcihkaXIpIGFuZAorICAgICAgICAgICAgICAgICAgICBfb3MuYWNjZXNzKGRpciwgX29zLldfT0spKToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBicmVhayAgICMgbm8gcG9pbnQgdHJ5aW5nIG1vcmUgbmFtZXMgaW4gdGhpcyBkaXJlY3RvcnkKICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIGJyZWFrICAgIyBubyBwb2ludCB0cnlpbmcgbW9yZSBuYW1lcyBpbiB0aGlzIGRpcmVjdG9yeQogICAgIHJhaXNlIEZpbGVOb3RGb3VuZEVycm9yKF9lcnJuby5FTk9FTlQsCkBAIC0yMTcsMTQgKzIwNSwxNCBAQAogICAgICAgICBmaWxlID0gX29zLnBhdGguam9pbihkaXIsIHByZSArIG5hbWUgKyBzdWYpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGZkID0gX29zLm9wZW4oZmlsZSwgZmxhZ3MsIDBvNjAwKQotICAgICAgICAgICAgX3NldF9jbG9leGVjKGZkKQogICAgICAgICAgICAgcmV0dXJuIChmZCwgX29zLnBhdGguYWJzcGF0aChmaWxlKSkKICAgICAgICAgZXhjZXB0IEZpbGVFeGlzdHNFcnJvcjoKICAgICAgICAgICAgIGNvbnRpbnVlICAgICMgdHJ5IGFnYWluCiAgICAgICAgIGV4Y2VwdCBQZXJtaXNzaW9uRXJyb3I6CiAgICAgICAgICAgICAjIFRoaXMgZXhjZXB0aW9uIGlzIHRocm93biB3aGVuIGEgZGlyZWN0b3J5IHdpdGggdGhlIGNob3NlbiBuYW1lCiAgICAgICAgICAgICAjIGFscmVhZHkgZXhpc3RzIG9uIHdpbmRvd3MuCi0gICAgICAgICAgICBpZiBfb3MubmFtZSA9PSAnbnQnOgorICAgICAgICAgICAgaWYgKF9vcy5uYW1lID09ICdudCcgYW5kIF9vcy5wYXRoLmlzZGlyKGRpcikgYW5kCisgICAgICAgICAgICAgICAgX29zLmFjY2VzcyhkaXIsIF9vcy5XX09LKSk6CiAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcmFpc2UKQEAgLTMxNiw2ICszMDQsMTQgQEAKICAgICAgICAgICAgIHJldHVybiBmaWxlCiAgICAgICAgIGV4Y2VwdCBGaWxlRXhpc3RzRXJyb3I6CiAgICAgICAgICAgICBjb250aW51ZSAgICAjIHRyeSBhZ2FpbgorICAgICAgICBleGNlcHQgUGVybWlzc2lvbkVycm9yOgorICAgICAgICAgICAgIyBUaGlzIGV4Y2VwdGlvbiBpcyB0aHJvd24gd2hlbiBhIGRpcmVjdG9yeSB3aXRoIHRoZSBjaG9zZW4gbmFtZQorICAgICAgICAgICAgIyBhbHJlYWR5IGV4aXN0cyBvbiB3aW5kb3dzLgorICAgICAgICAgICAgaWYgKF9vcy5uYW1lID09ICdudCcgYW5kIF9vcy5wYXRoLmlzZGlyKGRpcikgYW5kCisgICAgICAgICAgICAgICAgX29zLmFjY2VzcyhkaXIsIF9vcy5XX09LKSk6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UKIAogICAgIHJhaXNlIEZpbGVFeGlzdHNFcnJvcihfZXJybm8uRUVYSVNULAogICAgICAgICAgICAgICAgICAgICAgICAgICAiTm8gdXNhYmxlIHRlbXBvcmFyeSBkaXJlY3RvcnkgbmFtZSBmb3VuZCIpCkBAIC0zNTYsOCArMzUyLDcgQEAKICAgICB1bmRlcmx5aW5nIGZpbGUgb2JqZWN0LCB3aXRob3V0IGFkZGluZyBhIF9fZGVsX18gbWV0aG9kIHRvIHRoZQogICAgIHRlbXBvcmFyeSBmaWxlLiIiIgogCi0gICAgIyBTZXQgaGVyZSBzaW5jZSBfX2RlbF9fIGNoZWNrcyBpdAotICAgIGZpbGUgPSBOb25lCisgICAgZmlsZSA9IE5vbmUgICMgU2V0IGhlcmUgc2luY2UgX19kZWxfXyBjaGVja3MgaXQKICAgICBjbG9zZV9jYWxsZWQgPSBGYWxzZQogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGUsIG5hbWUsIGRlbGV0ZT1UcnVlKToKQEAgLTM3OCw5ICszNzMsMTEgQEAKICAgICAgICAgZGVmIGNsb3NlKHNlbGYsIHVubGluaz1fb3MudW5saW5rKToKICAgICAgICAgICAgIGlmIG5vdCBzZWxmLmNsb3NlX2NhbGxlZCBhbmQgc2VsZi5maWxlIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgIHNlbGYuY2xvc2VfY2FsbGVkID0gVHJ1ZQotICAgICAgICAgICAgICAgIHNlbGYuZmlsZS5jbG9zZSgpCi0gICAgICAgICAgICAgICAgaWYgc2VsZi5kZWxldGU6Ci0gICAgICAgICAgICAgICAgICAgIHVubGluayhzZWxmLm5hbWUpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBzZWxmLmZpbGUuY2xvc2UoKQorICAgICAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuZGVsZXRlOgorICAgICAgICAgICAgICAgICAgICAgICAgdW5saW5rKHNlbGYubmFtZSkKIAogICAgICAgICAjIE5lZWQgdG8gZW5zdXJlIHRoZSBmaWxlIGlzIGRlbGV0ZWQgb24gX19kZWxfXwogICAgICAgICBkZWYgX19kZWxfXyhzZWxmKToKQEAgLTQ0Nyw3ICs0NDQsMTMgQEAKIAogICAgICMgaXRlcigpIGRvZXNuJ3QgdXNlIF9fZ2V0YXR0cl9fIHRvIGZpbmQgdGhlIF9faXRlcl9fIG1ldGhvZAogICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuIGl0ZXIoc2VsZi5maWxlKQorICAgICAgICAjIERvbid0IHJldHVybiBpdGVyKHNlbGYuZmlsZSksIGJ1dCB5aWVsZCBmcm9tIGl0IHRvIGF2b2lkIGNsb3NpbmcKKyAgICAgICAgIyBmaWxlIGFzIGxvbmcgYXMgaXQncyBiZWluZyB1c2VkIGFzIGl0ZXJhdG9yIChzZWUgaXNzdWUgIzIzNzAwKS4gIFdlCisgICAgICAgICMgY2FuJ3QgdXNlICd5aWVsZCBmcm9tJyBoZXJlIGJlY2F1c2UgaXRlcihmaWxlKSByZXR1cm5zIHRoZSBmaWxlCisgICAgICAgICMgb2JqZWN0IGl0c2VsZiwgd2hpY2ggaGFzIGEgY2xvc2UgbWV0aG9kLCBhbmQgdGh1cyB0aGUgZmlsZSB3b3VsZCBnZXQKKyAgICAgICAgIyBjbG9zZWQgd2hlbiB0aGUgZ2VuZXJhdG9yIGlzIGZpbmFsaXplZCwgZHVlIHRvIFBFUDM4MCBzZW1hbnRpY3MuCisgICAgICAgIGZvciBsaW5lIGluIHNlbGYuZmlsZToKKyAgICAgICAgICAgIHlpZWxkIGxpbmUKIAogCiBkZWYgTmFtZWRUZW1wb3JhcnlGaWxlKG1vZGU9J3crYicsIGJ1ZmZlcmluZz0tMSwgZW5jb2Rpbmc9Tm9uZSwKQEAgLTQ3OSwxMCArNDgyLDE0IEBACiAgICAgICAgIGZsYWdzIHw9IF9vcy5PX1RFTVBPUkFSWQogCiAgICAgKGZkLCBuYW1lKSA9IF9ta3N0ZW1wX2lubmVyKGRpciwgcHJlZml4LCBzdWZmaXgsIGZsYWdzKQotICAgIGZpbGUgPSBfaW8ub3BlbihmZCwgbW9kZSwgYnVmZmVyaW5nPWJ1ZmZlcmluZywKLSAgICAgICAgICAgICAgICAgICAgbmV3bGluZT1uZXdsaW5lLCBlbmNvZGluZz1lbmNvZGluZykKKyAgICB0cnk6CisgICAgICAgIGZpbGUgPSBfaW8ub3BlbihmZCwgbW9kZSwgYnVmZmVyaW5nPWJ1ZmZlcmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld2xpbmU9bmV3bGluZSwgZW5jb2Rpbmc9ZW5jb2RpbmcpCiAKLSAgICByZXR1cm4gX1RlbXBvcmFyeUZpbGVXcmFwcGVyKGZpbGUsIG5hbWUsIGRlbGV0ZSkKKyAgICAgICAgcmV0dXJuIF9UZW1wb3JhcnlGaWxlV3JhcHBlcihmaWxlLCBuYW1lLCBkZWxldGUpCisgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgX29zLmNsb3NlKGZkKQorICAgICAgICByYWlzZQogCiBpZiBfb3MubmFtZSAhPSAncG9zaXgnIG9yIF9vcy5zeXMucGxhdGZvcm0gPT0gJ2N5Z3dpbic6CiAgICAgIyBPbiBub24tUE9TSVggYW5kIEN5Z3dpbiBzeXN0ZW1zLCBhc3N1bWUgdGhhdCB3ZSBjYW5ub3QgdW5saW5rIGEgZmlsZQpAQCAtNTM1LDcgKzU0Miw3IEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAjIFNldHRpbmcgbmV3bGluZT0iXG4iIGF2b2lkcyBuZXdsaW5lIHRyYW5zbGF0aW9uOwogICAgICAgICAgICAgIyB0aGlzIGlzIGltcG9ydGFudCBiZWNhdXNlIG90aGVyd2lzZSBvbiBXaW5kb3dzIHdlJ2QKLSAgICAgICAgICAgICMgaGdldCBkb3VibGUgbmV3bGluZSB0cmFuc2xhdGlvbiB1cG9uIHJvbGxvdmVyKCkuCisgICAgICAgICAgICAjIGdldCBkb3VibGUgbmV3bGluZSB0cmFuc2xhdGlvbiB1cG9uIHJvbGxvdmVyKCkuCiAgICAgICAgICAgICBzZWxmLl9maWxlID0gX2lvLlN0cmluZ0lPKG5ld2xpbmU9IlxuIikKICAgICAgICAgc2VsZi5fbWF4X3NpemUgPSBtYXhfc2l6ZQogICAgICAgICBzZWxmLl9yb2xsZWQgPSBGYWxzZQpAQCAtNjgwLDEyICs2ODcsMTcgQEAKICAgICBpbiBpdCBhcmUgcmVtb3ZlZC4KICAgICAiIiIKIAotICAgICMgSGFuZGxlIG1rZHRlbXAgcmFpc2luZyBhbiBleGNlcHRpb24KLSAgICBuYW1lID0gTm9uZQotICAgIF9jbG9zZWQgPSBGYWxzZQotCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHN1ZmZpeD0iIiwgcHJlZml4PXRlbXBsYXRlLCBkaXI9Tm9uZSk6CiAgICAgICAgIHNlbGYubmFtZSA9IG1rZHRlbXAoc3VmZml4LCBwcmVmaXgsIGRpcikKKyAgICAgICAgc2VsZi5fZmluYWxpemVyID0gX3dlYWtyZWYuZmluYWxpemUoCisgICAgICAgICAgICBzZWxmLCBzZWxmLl9jbGVhbnVwLCBzZWxmLm5hbWUsCisgICAgICAgICAgICB3YXJuX21lc3NhZ2U9IkltcGxpY2l0bHkgY2xlYW5pbmcgdXAgeyFyfSIuZm9ybWF0KHNlbGYpKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9jbGVhbnVwKGNscywgbmFtZSwgd2Fybl9tZXNzYWdlKToKKyAgICAgICAgX3NodXRpbC5ybXRyZWUobmFtZSkKKyAgICAgICAgX3dhcm5pbmdzLndhcm4od2Fybl9tZXNzYWdlLCBSZXNvdXJjZVdhcm5pbmcpCisKIAogICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgICAgICAgcmV0dXJuICI8e30geyFyfT4iLmZvcm1hdChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgc2VsZi5uYW1lKQpAQCAtNjkzLDUzICs3MDUsOSBAQAogICAgIGRlZiBfX2VudGVyX18oc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLm5hbWUKIAotICAgIGRlZiBjbGVhbnVwKHNlbGYsIF93YXJuPUZhbHNlLCBfd2FybmluZ3M9X3dhcm5pbmdzKToKLSAgICAgICAgaWYgc2VsZi5uYW1lIGFuZCBub3Qgc2VsZi5fY2xvc2VkOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIF9zaHV0aWwucm10cmVlKHNlbGYubmFtZSkKLSAgICAgICAgICAgIGV4Y2VwdCAoVHlwZUVycm9yLCBBdHRyaWJ1dGVFcnJvcikgYXMgZXg6Ci0gICAgICAgICAgICAgICAgaWYgIk5vbmUiIG5vdCBpbiAnJXMnICUgKGV4LCk6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgICAgICAgICAgc2VsZi5fcm10cmVlKHNlbGYubmFtZSkKLSAgICAgICAgICAgIHNlbGYuX2Nsb3NlZCA9IFRydWUKLSAgICAgICAgICAgIGlmIF93YXJuIGFuZCBfd2FybmluZ3Mud2FybjoKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIF93YXJuaW5ncy53YXJuKCJJbXBsaWNpdGx5IGNsZWFuaW5nIHVwIHshcn0iLmZvcm1hdChzZWxmKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VXYXJuaW5nKQotICAgICAgICAgICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgICAgICAgICAgaWYgX2lzX3J1bm5pbmc6Ci0gICAgICAgICAgICAgICAgICAgICAgICByYWlzZQotICAgICAgICAgICAgICAgICAgICAjIERvbid0IHJhaXNlIGFuIGV4Y2VwdGlvbiBpZiBtb2R1bGVzIG5lZWRlZCBmb3IgZW1pdHRpbmcKLSAgICAgICAgICAgICAgICAgICAgIyBhIHdhcm5pbmcgYXJlIGFscmVhZHkgY2xlYW5lZCBpbiBzaHV0ZG93biBwcm9jZXNzLgotCiAgICAgZGVmIF9fZXhpdF9fKHNlbGYsIGV4YywgdmFsdWUsIHRiKToKICAgICAgICAgc2VsZi5jbGVhbnVwKCkKIAotICAgIGRlZiBfX2RlbF9fKHNlbGYpOgotICAgICAgICAjIElzc3VlIGEgUmVzb3VyY2VXYXJuaW5nIGlmIGltcGxpY2l0IGNsZWFudXAgbmVlZGVkCi0gICAgICAgIHNlbGYuY2xlYW51cChfd2Fybj1UcnVlKQotCi0gICAgZGVmIF9ybXRyZWUoc2VsZiwgcGF0aCwgX09TRXJyb3I9T1NFcnJvciwgX3NlcD1fb3MucGF0aC5zZXAsCi0gICAgICAgICAgICAgICAgX2xpc3RkaXI9X29zLmxpc3RkaXIsIF9yZW1vdmU9X29zLnJlbW92ZSwgX3JtZGlyPV9vcy5ybWRpcik6Ci0gICAgICAgICMgRXNzZW50aWFsbHkgYSBzdHJpcHBlZCBkb3duIHZlcnNpb24gb2Ygc2h1dGlsLnJtdHJlZS4gIFdlIGNhbid0Ci0gICAgICAgICMgdXNlIGdsb2JhbHMgYmVjYXVzZSB0aGV5IG1heSBiZSBOb25lJ2VkIG91dCBhdCBzaHV0ZG93bi4KLSAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UocGF0aCwgc3RyKToKLSAgICAgICAgICAgIF9zZXAgPSBfc2VwLmVuY29kZSgpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGZvciBuYW1lIGluIF9saXN0ZGlyKHBhdGgpOgotICAgICAgICAgICAgICAgIGZ1bGxuYW1lID0gcGF0aCArIF9zZXAgKyBuYW1lCi0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBfcmVtb3ZlKGZ1bGxuYW1lKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBfT1NFcnJvcjoKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fcm10cmVlKGZ1bGxuYW1lKQotICAgICAgICAgICAgX3JtZGlyKHBhdGgpCi0gICAgICAgIGV4Y2VwdCBfT1NFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLQotX2lzX3J1bm5pbmcgPSBUcnVlCi0KLWRlZiBfb25fc2h1dGRvd24oKToKLSAgICBnbG9iYWwgX2lzX3J1bm5pbmcKLSAgICBfaXNfcnVubmluZyA9IEZhbHNlCi0KLV9hdGV4aXQucmVnaXN0ZXIoX29uX3NodXRkb3duKQorICAgIGRlZiBjbGVhbnVwKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9maW5hbGl6ZXIuZGV0YWNoKCk6CisgICAgICAgICAgICBfc2h1dGlsLnJtdHJlZShzZWxmLm5hbWUpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9fX21haW5fXy5weSBiL0xpYi90ZXN0L19fbWFpbl9fLnB5CmluZGV4IGNlNTYxNWIuLmQ1ZmJlMTUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L19fbWFpbl9fLnB5CisrKyBiL0xpYi90ZXN0L19fbWFpbl9fLnB5CkBAIC0xLDEzICsxLDMgQEAKLWZyb20gdGVzdCBpbXBvcnQgcmVncnRlc3QsIHN1cHBvcnQKK2Zyb20gdGVzdCBpbXBvcnQgcmVncnRlc3QKIAotCi1URU1QRElSLCBURVNUQ1dEID0gcmVncnRlc3QuX21ha2VfdGVtcF9kaXJfZm9yX2J1aWxkKHJlZ3J0ZXN0LlRFTVBESVIpCi1yZWdydGVzdC5URU1QRElSID0gVEVNUERJUgotcmVncnRlc3QuVEVTVENXRCA9IFRFU1RDV0QKLQotIyBSdW4gdGhlIHRlc3RzIGluIGEgY29udGV4dCBtYW5hZ2VyIHRoYXQgdGVtcG9yYXJ5IGNoYW5nZXMgdGhlIENXRCB0byBhCi0jIHRlbXBvcmFyeSBhbmQgd3JpdGFibGUgZGlyZWN0b3J5LiBJZiBpdCdzIG5vdCBwb3NzaWJsZSB0byBjcmVhdGUgb3IKLSMgY2hhbmdlIHRoZSBDV0QsIHRoZSBvcmlnaW5hbCBDV0Qgd2lsbCBiZSB1c2VkLiBUaGUgb3JpZ2luYWwgQ1dEIGlzCi0jIGF2YWlsYWJsZSBmcm9tIHN1cHBvcnQuU0FWRURDV0QuCi13aXRoIHN1cHBvcnQudGVtcF9jd2QoVEVTVENXRCwgcXVpZXQ9VHJ1ZSk6Ci0gICAgcmVncnRlc3QubWFpbigpCityZWdydGVzdC5tYWluX2luX3RlbXBfY3dkKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbXVsdGlwcm9jZXNzaW5nLnB5IGIvTGliL3Rlc3QvX3Rlc3RfbXVsdGlwcm9jZXNzaW5nLnB5CnNpbWlsYXJpdHkgaW5kZXggODclCnJlbmFtZSBmcm9tIExpYi90ZXN0L3Rlc3RfbXVsdGlwcm9jZXNzaW5nLnB5CnJlbmFtZSB0byBMaWIvdGVzdC9fdGVzdF9tdWx0aXByb2Nlc3NpbmcucHkKaW5kZXggYWE2NmRiNC4uMjA0ZDg5NCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9tdWx0aXByb2Nlc3NpbmcucHkKKysrIGIvTGliL3Rlc3QvX3Rlc3RfbXVsdGlwcm9jZXNzaW5nLnB5CkBAIC00MSw3ICs0MSw3IEBACiAKIHRyeToKICAgICBmcm9tIG11bHRpcHJvY2Vzc2luZyBpbXBvcnQgcmVkdWN0aW9uCi0gICAgSEFTX1JFRFVDVElPTiA9IFRydWUKKyAgICBIQVNfUkVEVUNUSU9OID0gcmVkdWN0aW9uLkhBVkVfU0VORF9IQU5ETEUKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICBIQVNfUkVEVUNUSU9OID0gRmFsc2UKIApAQCAtOTcsNiArOTcsOSBAQAogZXhjZXB0OgogICAgIE1BWEZEID0gMjU2CiAKKyMgVG8gc3BlZWQgdXAgdGVzdHMgd2hlbiB1c2luZyB0aGUgZm9ya3NlcnZlciwgd2UgY2FuIHByZWxvYWQgdGhlc2U6CitQUkVMT0FEID0gWydfX21haW5fXycsICd0ZXN0LnRlc3RfbXVsdGlwcm9jZXNzaW5nX2ZvcmtzZXJ2ZXInXQorCiAjCiAjIFNvbWUgdGVzdHMgcmVxdWlyZSBjdHlwZXMKICMKQEAgLTI5MiwxNyArMjk1LDIyIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0VGltaW5nQWxtb3N0RXF1YWwoam9pbi5lbGFwc2VkLCAwLjApCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5pc19hbGl2ZSgpLCBUcnVlKQogCisgICAgICAgICMgWFhYIG1heWJlIHRlcm1pbmF0aW5nIHRvbyBzb29uIGNhdXNlcyB0aGUgcHJvYmxlbXMgb24gR2VudG9vLi4uCisgICAgICAgIHRpbWUuc2xlZXAoMSkKKwogICAgICAgICBwLnRlcm1pbmF0ZSgpCiAKICAgICAgICAgaWYgaGFzYXR0cihzaWduYWwsICdhbGFybScpOgorICAgICAgICAgICAgIyBPbiB0aGUgR2VudG9vIGJ1aWxkYm90IHdhaXRwaWQoKSBvZnRlbiBzZWVtcyB0byBibG9jayBmb3JldmVyLgorICAgICAgICAgICAgIyBXZSB1c2UgYWxhcm0oKSB0byBpbnRlcnJ1cHQgaXQgaWYgaXQgYmxvY2tzIGZvciB0b28gbG9uZy4KICAgICAgICAgICAgIGRlZiBoYW5kbGVyKCphcmdzKToKICAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ2pvaW4gdG9vayB0b28gbG9uZzogJXMnICUgcCkKICAgICAgICAgICAgIG9sZF9oYW5kbGVyID0gc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHQUxSTSwgaGFuZGxlcikKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzaWduYWwuYWxhcm0oMTApCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChqb2luKCksIE5vbmUpCi0gICAgICAgICAgICAgICAgc2lnbmFsLmFsYXJtKDApCiAgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHNpZ25hbC5hbGFybSgwKQogICAgICAgICAgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0FMUk0sIG9sZF9oYW5kbGVyKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChqb2luKCksIE5vbmUpCkBAIC0zNDAsNyArMzQ4LDYgQEAKIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBfdGVzdF9yZWN1cnNpb24oY2xzLCB3Y29ubiwgaWQpOgotICAgICAgICBmcm9tIG11bHRpcHJvY2Vzc2luZyBpbXBvcnQgZm9ya2luZwogICAgICAgICB3Y29ubi5zZW5kKGlkKQogICAgICAgICBpZiBsZW4oaWQpIDwgMjoKICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDIpOgpAQCAtMzg4LDcgKzM5NSw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uod2FpdF9mb3JfaGFuZGxlKHNlbnRpbmVsLCB0aW1lb3V0PTAuMCkpCiAgICAgICAgIGV2ZW50LnNldCgpCiAgICAgICAgIHAuam9pbigpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3YWl0X2Zvcl9oYW5kbGUoc2VudGluZWwsIHRpbWVvdXQ9REVMVEEpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUod2FpdF9mb3JfaGFuZGxlKHNlbnRpbmVsLCB0aW1lb3V0PTEpKQogCiAjCiAjCkBAIC02ODgsOSArNjk1LDYgQEAKICAgICBkZWYgdGVzdF90YXNrX2RvbmUoc2VsZik6CiAgICAgICAgIHF1ZXVlID0gc2VsZi5Kb2luYWJsZVF1ZXVlKCkKIAotICAgICAgICBpZiBzeXMudmVyc2lvbl9pbmZvIDwgKDIsIDUpIGFuZCBub3QgaGFzYXR0cihxdWV1ZSwgJ3Rhc2tfZG9uZScpOgotICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgicmVxdWlyZXMgJ3F1ZXVlLnRhc2tfZG9uZSgpJyBtZXRob2QiKQotCiAgICAgICAgIHdvcmtlcnMgPSBbc2VsZi5Qcm9jZXNzKHRhcmdldD1zZWxmLl90ZXN0X3Rhc2tfZG9uZSwgYXJncz0ocXVldWUsKSkKICAgICAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSg0KV0KIApAQCAtNzA5LDEyICs3MTMsMzUgQEAKICAgICAgICAgZm9yIHAgaW4gd29ya2VyczoKICAgICAgICAgICAgIHAuam9pbigpCiAKKyAgICBkZWYgdGVzdF9ub19pbXBvcnRfbG9ja19jb250ZW50aW9uKHNlbGYpOgorICAgICAgICB3aXRoIHRlc3Quc3VwcG9ydC50ZW1wX2N3ZCgpOgorICAgICAgICAgICAgbW9kdWxlX25hbWUgPSAnaW1wb3J0ZWRfYnlfYW5faW1wb3J0ZWRfbW9kdWxlJworICAgICAgICAgICAgd2l0aCBvcGVuKG1vZHVsZV9uYW1lICsgJy5weScsICd3JykgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKCIiImlmIDE6CisgICAgICAgICAgICAgICAgICAgIGltcG9ydCBtdWx0aXByb2Nlc3NpbmcKKworICAgICAgICAgICAgICAgICAgICBxID0gbXVsdGlwcm9jZXNzaW5nLlF1ZXVlKCkKKyAgICAgICAgICAgICAgICAgICAgcS5wdXQoJ2tub2NrIGtub2NrJykKKyAgICAgICAgICAgICAgICAgICAgcS5nZXQodGltZW91dD0zKQorICAgICAgICAgICAgICAgICAgICBxLmNsb3NlKCkKKyAgICAgICAgICAgICAgICAgICAgZGVsIHEKKyAgICAgICAgICAgICAgICAiIiIpCisKKyAgICAgICAgICAgIHdpdGggdGVzdC5zdXBwb3J0LkRpcnNPblN5c1BhdGgob3MuZ2V0Y3dkKCkpOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgX19pbXBvcnRfXyhtb2R1bGVfbmFtZSkKKyAgICAgICAgICAgICAgICBleGNlcHQgcHlxdWV1ZS5FbXB0eToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJQcm9iYWJsZSByZWdyZXNzaW9uIG9uIGltcG9ydCBsb2NrIGNvbnRlbnRpb247IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBzZWUgSXNzdWUgIzIyODUzIikKKwogICAgIGRlZiB0ZXN0X3RpbWVvdXQoc2VsZik6CiAgICAgICAgIHEgPSBtdWx0aXByb2Nlc3NpbmcuUXVldWUoKQogICAgICAgICBzdGFydCA9IHRpbWUudGltZSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHB5cXVldWUuRW1wdHksIHEuZ2V0LCBUcnVlLCAwLjIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHB5cXVldWUuRW1wdHksIHEuZ2V0LCBUcnVlLCAwLjIwMCkKICAgICAgICAgZGVsdGEgPSB0aW1lLnRpbWUoKSAtIHN0YXJ0Ci0gICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKGRlbHRhLCAwLjE4KQorICAgICAgICAjIFRvbGVyYXRlIGEgZGVsdGEgb2YgMzAgbXMgYmVjYXVzZSBvZiB0aGUgYmFkIGNsb2NrIHJlc29sdXRpb24gb24KKyAgICAgICAgIyBXaW5kb3dzICh1c3VhbGx5IDE1LjYgbXMpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKGRlbHRhLCAwLjE3MCkKIAogIwogIwpAQCAtMTYzMyw2ICsxNjYwLDE0IEBACiBkZWYgbXVsKHgsIHkpOgogICAgIHJldHVybiB4KnkKIAorY2xhc3MgU2F5V2hlbkVycm9yKFZhbHVlRXJyb3IpOiBwYXNzCisKK2RlZiBleGNlcHRpb25fdGhyb3dpbmdfZ2VuZXJhdG9yKHRvdGFsLCB3aGVuKToKKyAgICBmb3IgaSBpbiByYW5nZSh0b3RhbCk6CisgICAgICAgIGlmIGkgPT0gd2hlbjoKKyAgICAgICAgICAgIHJhaXNlIFNheVdoZW5FcnJvcigiU29tZWJvZHkgc2FpZCB3aGVuIikKKyAgICAgICAgeWllbGQgaQorCiBjbGFzcyBfVGVzdFBvb2woQmFzZVRlc3RDYXNlKToKIAogICAgIEBjbGFzc21ldGhvZApAQCAtMTczMSw2ICsxNzY2LDI1IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5leHQoaXQpLCBpKmkpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN0b3BJdGVyYXRpb24sIGl0Ll9fbmV4dF9fKQogCisgICAgZGVmIHRlc3RfaW1hcF9oYW5kbGVfaXRlcmFibGVfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICBpZiBzZWxmLlRZUEUgPT0gJ21hbmFnZXInOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgndGVzdCBub3QgYXBwcm9wcmlhdGUgZm9yIHt9Jy5mb3JtYXQoc2VsZi5UWVBFKSkKKworICAgICAgICBpdCA9IHNlbGYucG9vbC5pbWFwKHNxciwgZXhjZXB0aW9uX3Rocm93aW5nX2dlbmVyYXRvcigxMCwgMyksIDEpCisgICAgICAgIGZvciBpIGluIHJhbmdlKDMpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXh0KGl0KSwgaSppKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTYXlXaGVuRXJyb3IsIGl0Ll9fbmV4dF9fKQorCisgICAgICAgICMgU2F5V2hlbkVycm9yIHNlZW4gYXQgc3RhcnQgb2YgcHJvYmxlbWF0aWMgY2h1bmsncyByZXN1bHRzCisgICAgICAgIGl0ID0gc2VsZi5wb29sLmltYXAoc3FyLCBleGNlcHRpb25fdGhyb3dpbmdfZ2VuZXJhdG9yKDIwLCA3KSwgMikKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoNik6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5leHQoaXQpLCBpKmkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFNheVdoZW5FcnJvciwgaXQuX19uZXh0X18pCisgICAgICAgIGl0ID0gc2VsZi5wb29sLmltYXAoc3FyLCBleGNlcHRpb25fdGhyb3dpbmdfZ2VuZXJhdG9yKDIwLCA3KSwgNCkKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoNCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5leHQoaXQpLCBpKmkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFNheVdoZW5FcnJvciwgaXQuX19uZXh0X18pCisKICAgICBkZWYgdGVzdF9pbWFwX3Vub3JkZXJlZChzZWxmKToKICAgICAgICAgaXQgPSBzZWxmLnBvb2wuaW1hcF91bm9yZGVyZWQoc3FyLCBsaXN0KHJhbmdlKDEwMDApKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQoaXQpLCBsaXN0KG1hcChzcXIsIGxpc3QocmFuZ2UoMTAwMCkpKSkpCkBAIC0xNzM4LDYgKzE3OTIsMzEgQEAKICAgICAgICAgaXQgPSBzZWxmLnBvb2wuaW1hcF91bm9yZGVyZWQoc3FyLCBsaXN0KHJhbmdlKDEwMDApKSwgY2h1bmtzaXplPTUzKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChpdCksIGxpc3QobWFwKHNxciwgbGlzdChyYW5nZSgxMDAwKSkpKSkKIAorICAgIGRlZiB0ZXN0X2ltYXBfdW5vcmRlcmVkX2hhbmRsZV9pdGVyYWJsZV9leGNlcHRpb24oc2VsZik6CisgICAgICAgIGlmIHNlbGYuVFlQRSA9PSAnbWFuYWdlcic6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCd0ZXN0IG5vdCBhcHByb3ByaWF0ZSBmb3Ige30nLmZvcm1hdChzZWxmLlRZUEUpKQorCisgICAgICAgIGl0ID0gc2VsZi5wb29sLmltYXBfdW5vcmRlcmVkKHNxciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uX3Rocm93aW5nX2dlbmVyYXRvcigxMCwgMyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEpCisgICAgICAgIGV4cGVjdGVkX3ZhbHVlcyA9IGxpc3QobWFwKHNxciwgbGlzdChyYW5nZSgxMCkpKSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhTYXlXaGVuRXJyb3IpOgorICAgICAgICAgICAgIyBpbWFwX3Vub3JkZXJlZCBtYWtlcyBpdCBkaWZmaWN1bHQgdG8gYW50aWNpcGF0ZSB0aGUgU2F5V2hlbkVycm9yCisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgxMCk6CisgICAgICAgICAgICAgICAgdmFsdWUgPSBuZXh0KGl0KQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4odmFsdWUsIGV4cGVjdGVkX3ZhbHVlcykKKyAgICAgICAgICAgICAgICBleHBlY3RlZF92YWx1ZXMucmVtb3ZlKHZhbHVlKQorCisgICAgICAgIGl0ID0gc2VsZi5wb29sLmltYXBfdW5vcmRlcmVkKHNxciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uX3Rocm93aW5nX2dlbmVyYXRvcigyMCwgNyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIpCisgICAgICAgIGV4cGVjdGVkX3ZhbHVlcyA9IGxpc3QobWFwKHNxciwgbGlzdChyYW5nZSgyMCkpKSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhTYXlXaGVuRXJyb3IpOgorICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMjApOgorICAgICAgICAgICAgICAgIHZhbHVlID0gbmV4dChpdCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKHZhbHVlLCBleHBlY3RlZF92YWx1ZXMpCisgICAgICAgICAgICAgICAgZXhwZWN0ZWRfdmFsdWVzLnJlbW92ZSh2YWx1ZSkKKwogICAgIGRlZiB0ZXN0X21ha2VfcG9vbChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbXVsdGlwcm9jZXNzaW5nLlBvb2wsIC0xKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtdWx0aXByb2Nlc3NpbmcuUG9vbCwgMCkKQEAgLTE3NzcsNiArMTg1Niw0NiBAQAogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoci5nZXQoKSwgZXhwZWN0ZWQpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwLm1hcF9hc3luYywgc3FyLCBMKQogCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF90ZXN0X3RyYWNlYmFjayhjbHMpOgorICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoMTIzKSAjIHNvbWUgY29tbWVudAorCisgICAgZGVmIHRlc3RfdHJhY2ViYWNrKHNlbGYpOgorICAgICAgICAjIFdlIHdhbnQgZW5zdXJlIHRoYXQgdGhlIHRyYWNlYmFjayBmcm9tIHRoZSBjaGlsZCBwcm9jZXNzIGlzCisgICAgICAgICMgY29udGFpbmVkIGluIHRoZSB0cmFjZWJhY2sgcmFpc2VkIGluIHRoZSBtYWluIHByb2Nlc3MuCisgICAgICAgIGlmIHNlbGYuVFlQRSA9PSAncHJvY2Vzc2VzJzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5Qb29sKDEpIGFzIHA6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBwLmFwcGx5KHNlbGYuX3Rlc3RfdHJhY2ViYWNrKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgICAgICAgICAgZXhjID0gZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCdleHBlY3RlZCBSdW50aW1lRXJyb3InKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKGV4YyksIFJ1bnRpbWVFcnJvcikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhjLmFyZ3MsICgxMjMsKSkKKyAgICAgICAgICAgIGNhdXNlID0gZXhjLl9fY2F1c2VfXworICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKGNhdXNlKSwgbXVsdGlwcm9jZXNzaW5nLnBvb2wuUmVtb3RlVHJhY2ViYWNrKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigncmFpc2UgUnVudGltZUVycm9yKDEyMykgIyBzb21lIGNvbW1lbnQnLCBjYXVzZS50YikKKworICAgICAgICAgICAgd2l0aCB0ZXN0LnN1cHBvcnQuY2FwdHVyZWRfc3RkZXJyKCkgYXMgZjE6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICByYWlzZSBleGMKKyAgICAgICAgICAgICAgICBleGNlcHQgUnVudGltZUVycm9yOgorICAgICAgICAgICAgICAgICAgICBzeXMuZXhjZXB0aG9vaygqc3lzLmV4Y19pbmZvKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCdyYWlzZSBSdW50aW1lRXJyb3IoMTIzKSAjIHNvbWUgY29tbWVudCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGYxLmdldHZhbHVlKCkpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX3Rlc3Rfd3JhcHBlZF9leGNlcHRpb24oY2xzKToKKyAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdmb28nKQorCisgICAgZGVmIHRlc3Rfd3JhcHBlZF9leGNlcHRpb24oc2VsZik6CisgICAgICAgICMgSXNzdWUgIzIwOTgwOiBTaG91bGQgbm90IHdyYXAgZXhjZXB0aW9uIHdoZW4gdXNpbmcgdGhyZWFkIHBvb2wKKyAgICAgICAgd2l0aCBzZWxmLlBvb2woMSkgYXMgcDoKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yKToKKyAgICAgICAgICAgICAgICBwLmFwcGx5KHNlbGYuX3Rlc3Rfd3JhcHBlZF9leGNlcHRpb24pCisKKwogZGVmIHJhaXNpbmcoKToKICAgICByYWlzZSBLZXlFcnJvcigia2V5IikKIApAQCAtMTk3NCw2ICsyMDkzLDEyIEBACiBjbGFzcyBfVGVzdFJlbW90ZU1hbmFnZXIoQmFzZVRlc3RDYXNlKToKIAogICAgIEFMTE9XRURfVFlQRVMgPSAoJ21hbmFnZXInLCkKKyAgICB2YWx1ZXMgPSBbJ2hlbGxvIHdvcmxkJywgTm9uZSwgVHJ1ZSwgMi4yNSwKKyAgICAgICAgICAgICAgJ2hhbGxceGU1IHZceGU0cmxkZW4nLAorICAgICAgICAgICAgICAnXHUwNDNmXHUwNDQwXHUwNDM4XHUwNDMyXHUwNDU2XHUwNDQyIFx1MDQ0MVx1MDQzMlx1MDQ1Nlx1MDQ0MicsCisgICAgICAgICAgICAgIGInaGFsbFx4ZTUgdlx4ZTRybGRlbicsCisgICAgICAgICAgICAgXQorICAgIHJlc3VsdCA9IHZhbHVlc1s6XQogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIF9wdXR0ZXIoY2xzLCBhZGRyZXNzLCBhdXRoa2V5KToKQEAgLTE5ODIsNyArMjEwNyw4IEBACiAgICAgICAgICAgICApCiAgICAgICAgIG1hbmFnZXIuY29ubmVjdCgpCiAgICAgICAgIHF1ZXVlID0gbWFuYWdlci5nZXRfcXVldWUoKQotICAgICAgICBxdWV1ZS5wdXQoKCdoZWxsbyB3b3JsZCcsIE5vbmUsIFRydWUsIDIuMjUpKQorICAgICAgICAjIE5vdGUgdGhhdCB4bWxycGNsaWIgd2lsbCBkZXNlcmlhbGl6ZSBvYmplY3QgYXMgYSBsaXN0IG5vdCBhIHR1cGxlCisgICAgICAgIHF1ZXVlLnB1dCh0dXBsZShjbHMudmFsdWVzKSkKIAogICAgIGRlZiB0ZXN0X3JlbW90ZShzZWxmKToKICAgICAgICAgYXV0aGtleSA9IG9zLnVyYW5kb20oMzIpCkBAIC0yMDAyLDggKzIxMjgsNyBAQAogICAgICAgICBtYW5hZ2VyMi5jb25uZWN0KCkKICAgICAgICAgcXVldWUgPSBtYW5hZ2VyMi5nZXRfcXVldWUoKQogCi0gICAgICAgICMgTm90ZSB0aGF0IHhtbHJwY2xpYiB3aWxsIGRlc2VyaWFsaXplIG9iamVjdCBhcyBhIGxpc3Qgbm90IGEgdHVwbGUKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChxdWV1ZS5nZXQoKSwgWydoZWxsbyB3b3JsZCcsIE5vbmUsIFRydWUsIDIuMjVdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHF1ZXVlLmdldCgpLCBzZWxmLnJlc3VsdCkKIAogICAgICAgICAjIEJlY2F1c2Ugd2UgYXJlIHVzaW5nIHhtbHJwY2xpYiBmb3Igc2VyaWFsaXphdGlvbiBpbnN0ZWFkIG9mCiAgICAgICAgICMgcGlja2xlIHRoaXMgd2lsbCBjYXVzZSBhIHNlcmlhbGl6YXRpb24gZXJyb3IuCkBAIC0yNDg0LDcgKzI2MDksNyBAQAogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIHRlYXJEb3duQ2xhc3MoY2xzKToKLSAgICAgICAgZnJvbSBtdWx0aXByb2Nlc3NpbmcucmVkdWN0aW9uIGltcG9ydCByZXNvdXJjZV9zaGFyZXIKKyAgICAgICAgZnJvbSBtdWx0aXByb2Nlc3NpbmcgaW1wb3J0IHJlc291cmNlX3NoYXJlcgogICAgICAgICByZXNvdXJjZV9zaGFyZXIuc3RvcCh0aW1lb3V0PTUpCiAKICAgICBAY2xhc3NtZXRob2QKQEAgLTI3OTgsMzAgKzI5MjMsNDAgQEAKICMgVGVzdCB0aGF0IGZyb20gLi4uIGltcG9ydCAqIHdvcmtzIGZvciBlYWNoIG1vZHVsZQogIwogCi1jbGFzcyBfVGVzdEltcG9ydFN0YXIoQmFzZVRlc3RDYXNlKToKK2NsYXNzIF9UZXN0SW1wb3J0U3Rhcih1bml0dGVzdC5UZXN0Q2FzZSk6CiAKLSAgICBBTExPV0VEX1RZUEVTID0gKCdwcm9jZXNzZXMnLCkKKyAgICBkZWYgZ2V0X21vZHVsZV9uYW1lcyhzZWxmKToKKyAgICAgICAgaW1wb3J0IGdsb2IKKyAgICAgICAgZm9sZGVyID0gb3MucGF0aC5kaXJuYW1lKG11bHRpcHJvY2Vzc2luZy5fX2ZpbGVfXykKKyAgICAgICAgcGF0dGVybiA9IG9zLnBhdGguam9pbihmb2xkZXIsICcqLnB5JykKKyAgICAgICAgZmlsZXMgPSBnbG9iLmdsb2IocGF0dGVybikKKyAgICAgICAgbW9kdWxlcyA9IFtvcy5wYXRoLnNwbGl0ZXh0KG9zLnBhdGguc3BsaXQoZilbMV0pWzBdIGZvciBmIGluIGZpbGVzXQorICAgICAgICBtb2R1bGVzID0gWydtdWx0aXByb2Nlc3NpbmcuJyArIG0gZm9yIG0gaW4gbW9kdWxlc10KKyAgICAgICAgbW9kdWxlcy5yZW1vdmUoJ211bHRpcHJvY2Vzc2luZy5fX2luaXRfXycpCisgICAgICAgIG1vZHVsZXMuYXBwZW5kKCdtdWx0aXByb2Nlc3NpbmcnKQorICAgICAgICByZXR1cm4gbW9kdWxlcwogCiAgICAgZGVmIHRlc3RfaW1wb3J0KHNlbGYpOgotICAgICAgICBtb2R1bGVzID0gWwotICAgICAgICAgICAgJ211bHRpcHJvY2Vzc2luZycsICdtdWx0aXByb2Nlc3NpbmcuY29ubmVjdGlvbicsCi0gICAgICAgICAgICAnbXVsdGlwcm9jZXNzaW5nLmhlYXAnLCAnbXVsdGlwcm9jZXNzaW5nLm1hbmFnZXJzJywKLSAgICAgICAgICAgICdtdWx0aXByb2Nlc3NpbmcucG9vbCcsICdtdWx0aXByb2Nlc3NpbmcucHJvY2VzcycsCi0gICAgICAgICAgICAnbXVsdGlwcm9jZXNzaW5nLnN5bmNocm9uaXplJywgJ211bHRpcHJvY2Vzc2luZy51dGlsJwotICAgICAgICAgICAgXQorICAgICAgICBtb2R1bGVzID0gc2VsZi5nZXRfbW9kdWxlX25hbWVzKCkKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6CisgICAgICAgICAgICBtb2R1bGVzLnJlbW92ZSgnbXVsdGlwcm9jZXNzaW5nLnBvcGVuX2ZvcmsnKQorICAgICAgICAgICAgbW9kdWxlcy5yZW1vdmUoJ211bHRpcHJvY2Vzc2luZy5wb3Blbl9mb3Jrc2VydmVyJykKKyAgICAgICAgICAgIG1vZHVsZXMucmVtb3ZlKCdtdWx0aXByb2Nlc3NpbmcucG9wZW5fc3Bhd25fcG9zaXgnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbW9kdWxlcy5yZW1vdmUoJ211bHRpcHJvY2Vzc2luZy5wb3Blbl9zcGF3bl93aW4zMicpCisgICAgICAgICAgICBpZiBub3QgSEFTX1JFRFVDVElPTjoKKyAgICAgICAgICAgICAgICBtb2R1bGVzLnJlbW92ZSgnbXVsdGlwcm9jZXNzaW5nLnBvcGVuX2ZvcmtzZXJ2ZXInKQogCi0gICAgICAgIGlmIEhBU19SRURVQ1RJT046Ci0gICAgICAgICAgICBtb2R1bGVzLmFwcGVuZCgnbXVsdGlwcm9jZXNzaW5nLnJlZHVjdGlvbicpCi0KLSAgICAgICAgaWYgY19pbnQgaXMgbm90IE5vbmU6CisgICAgICAgIGlmIGNfaW50IGlzIE5vbmU6CiAgICAgICAgICAgICAjIFRoaXMgbW9kdWxlIHJlcXVpcmVzIF9jdHlwZXMKLSAgICAgICAgICAgIG1vZHVsZXMuYXBwZW5kKCdtdWx0aXByb2Nlc3Npbmcuc2hhcmVkY3R5cGVzJykKKyAgICAgICAgICAgIG1vZHVsZXMucmVtb3ZlKCdtdWx0aXByb2Nlc3Npbmcuc2hhcmVkY3R5cGVzJykKIAogICAgICAgICBmb3IgbmFtZSBpbiBtb2R1bGVzOgogICAgICAgICAgICAgX19pbXBvcnRfXyhuYW1lKQogICAgICAgICAgICAgbW9kID0gc3lzLm1vZHVsZXNbbmFtZV0KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKG1vZCwgJ19fYWxsX18nKSwgbmFtZSkKIAotICAgICAgICAgICAgZm9yIGF0dHIgaW4gZ2V0YXR0cihtb2QsICdfX2FsbF9fJywgKCkpOgorICAgICAgICAgICAgZm9yIGF0dHIgaW4gbW9kLl9fYWxsX186CiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKAogICAgICAgICAgICAgICAgICAgICBoYXNhdHRyKG1vZCwgYXR0ciksCiAgICAgICAgICAgICAgICAgICAgICclciBkb2VzIG5vdCBoYXZlIGF0dHJpYnV0ZSAlcicgJSAobW9kLCBhdHRyKQpAQCAtMjkwNCw3ICszMDM5LDcgQEAKIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBfa2lsbGVyKGNscywgcGlkKToKLSAgICAgICAgdGltZS5zbGVlcCgwLjUpCisgICAgICAgIHRpbWUuc2xlZXAoMC4xKQogICAgICAgICBvcy5raWxsKHBpZCwgc2lnbmFsLlNJR1VTUjEpCiAKICAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNpZ25hbCwgJ1NJR1VTUjEnKSwgJ3JlcXVpcmVzIFNJR1VTUjEnKQpAQCAtMjkxNywxMiArMzA1MiwxNCBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBraWxsZXIgPSBzZWxmLlByb2Nlc3ModGFyZ2V0PXNlbGYuX2tpbGxlciwgYXJncz0ocGlkLCkpCiAgICAgICAgICAgICBraWxsZXIuc3RhcnQoKQotICAgICAgICAgICAgcCA9IHNlbGYuUHJvY2Vzcyh0YXJnZXQ9dGltZS5zbGVlcCwgYXJncz0oMSwpKQotICAgICAgICAgICAgcC5zdGFydCgpCi0gICAgICAgICAgICBwLmpvaW4oKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHAgPSBzZWxmLlByb2Nlc3ModGFyZ2V0PXRpbWUuc2xlZXAsIGFyZ3M9KDIsKSkKKyAgICAgICAgICAgICAgICBwLnN0YXJ0KCkKKyAgICAgICAgICAgICAgICBwLmpvaW4oKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBraWxsZXIuam9pbigpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZ290X3NpZ25hbFswXSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5leGl0Y29kZSwgMCkKLSAgICAgICAgICAgIGtpbGxlci5qb2luKCkKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR1VTUjEsIG9sZGhhbmRsZXIpCiAKQEAgLTI5MzUsOCArMzA3MiwxMSBAQAogICAgIEB1bml0dGVzdC5za2lwSWYoV0lOMzIsICJza2lwcGVkIG9uIFdpbmRvd3MiKQogICAgIGRlZiB0ZXN0X2ludmFsaWRfaGFuZGxlcyhzZWxmKToKICAgICAgICAgY29ubiA9IG11bHRpcHJvY2Vzc2luZy5jb25uZWN0aW9uLkNvbm5lY3Rpb24oNDQ5Nzc2MDgpCisgICAgICAgICMgY2hlY2sgdGhhdCBwb2xsKCkgZG9lc24ndCBjcmFzaAogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoVmFsdWVFcnJvciwgT1NFcnJvciksIGNvbm4ucG9sbCkKKyAgICAgICAgICAgIGNvbm4ucG9sbCgpCisgICAgICAgIGV4Y2VwdCAoVmFsdWVFcnJvciwgT1NFcnJvcik6CisgICAgICAgICAgICBwYXNzCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAjIEhhY2sgcHJpdmF0ZSBhdHRyaWJ1dGUgX2hhbmRsZSB0byBhdm9pZCBwcmludGluZyBhbiBlcnJvcgogICAgICAgICAgICAgIyBpbiBjb25uLl9fZGVsX18KQEAgLTI5NDQsMTMxICszMDg0LDYgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoKFZhbHVlRXJyb3IsIE9TRXJyb3IpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBtdWx0aXByb2Nlc3NpbmcuY29ubmVjdGlvbi5Db25uZWN0aW9uLCAtMSkKIAotIwotIyBGdW5jdGlvbnMgdXNlZCB0byBjcmVhdGUgdGVzdCBjYXNlcyBmcm9tIHRoZSBiYXNlIG9uZXMgaW4gdGhpcyBtb2R1bGUKLSMKLQotZGVmIGNyZWF0ZV90ZXN0X2Nhc2VzKE1peGluLCB0eXBlKToKLSAgICByZXN1bHQgPSB7fQotICAgIGdsb2IgPSBnbG9iYWxzKCkKLSAgICBUeXBlID0gdHlwZS5jYXBpdGFsaXplKCkKLSAgICBBTExfVFlQRVMgPSB7J3Byb2Nlc3NlcycsICd0aHJlYWRzJywgJ21hbmFnZXInfQotCi0gICAgZm9yIG5hbWUgaW4gbGlzdChnbG9iLmtleXMoKSk6Ci0gICAgICAgIGlmIG5hbWUuc3RhcnRzd2l0aCgnX1Rlc3QnKToKLSAgICAgICAgICAgIGJhc2UgPSBnbG9iW25hbWVdCi0gICAgICAgICAgICBhc3NlcnQgc2V0KGJhc2UuQUxMT1dFRF9UWVBFUykgPD0gQUxMX1RZUEVTLCBzZXQoYmFzZS5BTExPV0VEX1RZUEVTKQotICAgICAgICAgICAgaWYgdHlwZSBpbiBiYXNlLkFMTE9XRURfVFlQRVM6Ci0gICAgICAgICAgICAgICAgbmV3bmFtZSA9ICdXaXRoJyArIFR5cGUgKyBuYW1lWzE6XQotICAgICAgICAgICAgICAgIGNsYXNzIFRlbXAoYmFzZSwgTWl4aW4sIHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAgICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgICAgIHJlc3VsdFtuZXduYW1lXSA9IFRlbXAKLSAgICAgICAgICAgICAgICBUZW1wLl9fbmFtZV9fID0gVGVtcC5fX3F1YWxuYW1lX18gPSBuZXduYW1lCi0gICAgICAgICAgICAgICAgVGVtcC5fX21vZHVsZV9fID0gTWl4aW4uX19tb2R1bGVfXwotICAgIHJldHVybiByZXN1bHQKLQotIwotIyBDcmVhdGUgdGVzdCBjYXNlcwotIwotCi1jbGFzcyBQcm9jZXNzZXNNaXhpbihvYmplY3QpOgotICAgIFRZUEUgPSAncHJvY2Vzc2VzJwotICAgIFByb2Nlc3MgPSBtdWx0aXByb2Nlc3NpbmcuUHJvY2VzcwotICAgIGNvbm5lY3Rpb24gPSBtdWx0aXByb2Nlc3NpbmcuY29ubmVjdGlvbgotICAgIGN1cnJlbnRfcHJvY2VzcyA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuY3VycmVudF9wcm9jZXNzKQotICAgIGFjdGl2ZV9jaGlsZHJlbiA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuYWN0aXZlX2NoaWxkcmVuKQotICAgIFBvb2wgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLlBvb2wpCi0gICAgUGlwZSA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuUGlwZSkKLSAgICBRdWV1ZSA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuUXVldWUpCi0gICAgSm9pbmFibGVRdWV1ZSA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuSm9pbmFibGVRdWV1ZSkKLSAgICBMb2NrID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5Mb2NrKQotICAgIFJMb2NrID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5STG9jaykKLSAgICBTZW1hcGhvcmUgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLlNlbWFwaG9yZSkKLSAgICBCb3VuZGVkU2VtYXBob3JlID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5Cb3VuZGVkU2VtYXBob3JlKQotICAgIENvbmRpdGlvbiA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuQ29uZGl0aW9uKQotICAgIEV2ZW50ID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5FdmVudCkKLSAgICBCYXJyaWVyID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5CYXJyaWVyKQotICAgIFZhbHVlID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5WYWx1ZSkKLSAgICBBcnJheSA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuQXJyYXkpCi0gICAgUmF3VmFsdWUgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLlJhd1ZhbHVlKQotICAgIFJhd0FycmF5ID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5SYXdBcnJheSkKLQotdGVzdGNhc2VzX3Byb2Nlc3NlcyA9IGNyZWF0ZV90ZXN0X2Nhc2VzKFByb2Nlc3Nlc01peGluLCB0eXBlPSdwcm9jZXNzZXMnKQotZ2xvYmFscygpLnVwZGF0ZSh0ZXN0Y2FzZXNfcHJvY2Vzc2VzKQotCi0KLWNsYXNzIE1hbmFnZXJNaXhpbihvYmplY3QpOgotICAgIFRZUEUgPSAnbWFuYWdlcicKLSAgICBQcm9jZXNzID0gbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3MKLSAgICBRdWV1ZSA9IHByb3BlcnR5KG9wZXJhdG9yLmF0dHJnZXR0ZXIoJ21hbmFnZXIuUXVldWUnKSkKLSAgICBKb2luYWJsZVF1ZXVlID0gcHJvcGVydHkob3BlcmF0b3IuYXR0cmdldHRlcignbWFuYWdlci5Kb2luYWJsZVF1ZXVlJykpCi0gICAgTG9jayA9IHByb3BlcnR5KG9wZXJhdG9yLmF0dHJnZXR0ZXIoJ21hbmFnZXIuTG9jaycpKQotICAgIFJMb2NrID0gcHJvcGVydHkob3BlcmF0b3IuYXR0cmdldHRlcignbWFuYWdlci5STG9jaycpKQotICAgIFNlbWFwaG9yZSA9IHByb3BlcnR5KG9wZXJhdG9yLmF0dHJnZXR0ZXIoJ21hbmFnZXIuU2VtYXBob3JlJykpCi0gICAgQm91bmRlZFNlbWFwaG9yZSA9IHByb3BlcnR5KG9wZXJhdG9yLmF0dHJnZXR0ZXIoJ21hbmFnZXIuQm91bmRlZFNlbWFwaG9yZScpKQotICAgIENvbmRpdGlvbiA9IHByb3BlcnR5KG9wZXJhdG9yLmF0dHJnZXR0ZXIoJ21hbmFnZXIuQ29uZGl0aW9uJykpCi0gICAgRXZlbnQgPSBwcm9wZXJ0eShvcGVyYXRvci5hdHRyZ2V0dGVyKCdtYW5hZ2VyLkV2ZW50JykpCi0gICAgQmFycmllciA9IHByb3BlcnR5KG9wZXJhdG9yLmF0dHJnZXR0ZXIoJ21hbmFnZXIuQmFycmllcicpKQotICAgIFZhbHVlID0gcHJvcGVydHkob3BlcmF0b3IuYXR0cmdldHRlcignbWFuYWdlci5WYWx1ZScpKQotICAgIEFycmF5ID0gcHJvcGVydHkob3BlcmF0b3IuYXR0cmdldHRlcignbWFuYWdlci5BcnJheScpKQotICAgIGxpc3QgPSBwcm9wZXJ0eShvcGVyYXRvci5hdHRyZ2V0dGVyKCdtYW5hZ2VyLmxpc3QnKSkKLSAgICBkaWN0ID0gcHJvcGVydHkob3BlcmF0b3IuYXR0cmdldHRlcignbWFuYWdlci5kaWN0JykpCi0gICAgTmFtZXNwYWNlID0gcHJvcGVydHkob3BlcmF0b3IuYXR0cmdldHRlcignbWFuYWdlci5OYW1lc3BhY2UnKSkKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBQb29sKGNscywgKmFyZ3MsICoqa3dkcyk6Ci0gICAgICAgIHJldHVybiBjbHMubWFuYWdlci5Qb29sKCphcmdzLCAqKmt3ZHMpCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgc2V0VXBDbGFzcyhjbHMpOgotICAgICAgICBjbHMubWFuYWdlciA9IG11bHRpcHJvY2Vzc2luZy5NYW5hZ2VyKCkKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiB0ZWFyRG93bkNsYXNzKGNscyk6Ci0gICAgICAgICMgb25seSB0aGUgbWFuYWdlciBwcm9jZXNzIHNob3VsZCBiZSByZXR1cm5lZCBieSBhY3RpdmVfY2hpbGRyZW4oKQotICAgICAgICAjIGJ1dCB0aGlzIGNhbiB0YWtlIGEgYml0IG9uIHNsb3cgbWFjaGluZXMsIHNvIHdhaXQgYSBmZXcgc2Vjb25kcwotICAgICAgICAjIGlmIHRoZXJlIGFyZSBvdGhlciBjaGlsZHJlbiB0b28gKHNlZSAjMTczOTUpCi0gICAgICAgIHQgPSAwLjAxCi0gICAgICAgIHdoaWxlIGxlbihtdWx0aXByb2Nlc3NpbmcuYWN0aXZlX2NoaWxkcmVuKCkpID4gMSBhbmQgdCA8IDU6Ci0gICAgICAgICAgICB0aW1lLnNsZWVwKHQpCi0gICAgICAgICAgICB0ICo9IDIKLSAgICAgICAgZ2MuY29sbGVjdCgpICAgICAgICAgICAgICAgICAgICAgICAjIGRvIGdhcmJhZ2UgY29sbGVjdGlvbgotICAgICAgICBpZiBjbHMubWFuYWdlci5fbnVtYmVyX29mX29iamVjdHMoKSAhPSAwOgotICAgICAgICAgICAgIyBUaGlzIGlzIG5vdCByZWFsbHkgYW4gZXJyb3Igc2luY2Ugc29tZSB0ZXN0cyBkbyBub3QKLSAgICAgICAgICAgICMgZW5zdXJlIHRoYXQgYWxsIHByb2Nlc3NlcyB3aGljaCBob2xkIGEgcmVmZXJlbmNlIHRvIGEKLSAgICAgICAgICAgICMgbWFuYWdlZCBvYmplY3QgaGF2ZSBiZWVuIGpvaW5lZC4KLSAgICAgICAgICAgIHByaW50KCdTaGFyZWQgb2JqZWN0cyB3aGljaCBzdGlsbCBleGlzdCBhdCBtYW5hZ2VyIHNodXRkb3duOicpCi0gICAgICAgICAgICBwcmludChjbHMubWFuYWdlci5fZGVidWdfaW5mbygpKQotICAgICAgICBjbHMubWFuYWdlci5zaHV0ZG93bigpCi0gICAgICAgIGNscy5tYW5hZ2VyLmpvaW4oKQotICAgICAgICBjbHMubWFuYWdlciA9IE5vbmUKLQotdGVzdGNhc2VzX21hbmFnZXIgPSBjcmVhdGVfdGVzdF9jYXNlcyhNYW5hZ2VyTWl4aW4sIHR5cGU9J21hbmFnZXInKQotZ2xvYmFscygpLnVwZGF0ZSh0ZXN0Y2FzZXNfbWFuYWdlcikKLQotCi1jbGFzcyBUaHJlYWRzTWl4aW4ob2JqZWN0KToKLSAgICBUWVBFID0gJ3RocmVhZHMnCi0gICAgUHJvY2VzcyA9IG11bHRpcHJvY2Vzc2luZy5kdW1teS5Qcm9jZXNzCi0gICAgY29ubmVjdGlvbiA9IG11bHRpcHJvY2Vzc2luZy5kdW1teS5jb25uZWN0aW9uCi0gICAgY3VycmVudF9wcm9jZXNzID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5kdW1teS5jdXJyZW50X3Byb2Nlc3MpCi0gICAgYWN0aXZlX2NoaWxkcmVuID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5kdW1teS5hY3RpdmVfY2hpbGRyZW4pCi0gICAgUG9vbCA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuUG9vbCkKLSAgICBQaXBlID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5kdW1teS5QaXBlKQotICAgIFF1ZXVlID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5kdW1teS5RdWV1ZSkKLSAgICBKb2luYWJsZVF1ZXVlID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5kdW1teS5Kb2luYWJsZVF1ZXVlKQotICAgIExvY2sgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLmR1bW15LkxvY2spCi0gICAgUkxvY2sgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLmR1bW15LlJMb2NrKQotICAgIFNlbWFwaG9yZSA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuZHVtbXkuU2VtYXBob3JlKQotICAgIEJvdW5kZWRTZW1hcGhvcmUgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLmR1bW15LkJvdW5kZWRTZW1hcGhvcmUpCi0gICAgQ29uZGl0aW9uID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5kdW1teS5Db25kaXRpb24pCi0gICAgRXZlbnQgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLmR1bW15LkV2ZW50KQotICAgIEJhcnJpZXIgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLmR1bW15LkJhcnJpZXIpCi0gICAgVmFsdWUgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLmR1bW15LlZhbHVlKQotICAgIEFycmF5ID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5kdW1teS5BcnJheSkKLQotdGVzdGNhc2VzX3RocmVhZHMgPSBjcmVhdGVfdGVzdF9jYXNlcyhUaHJlYWRzTWl4aW4sIHR5cGU9J3RocmVhZHMnKQotZ2xvYmFscygpLnVwZGF0ZSh0ZXN0Y2FzZXNfdGhyZWFkcykKIAogCiBjbGFzcyBPdGhlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtMzQxOCw3ICszNDMzLDcgQEAKICAgICBkZWYgdGVzdF9mbGFncyhzZWxmKToKICAgICAgICAgaW1wb3J0IGpzb24sIHN1YnByb2Nlc3MKICAgICAgICAgIyBzdGFydCBjaGlsZCBwcm9jZXNzIHVzaW5nIHVudXN1YWwgZmxhZ3MKLSAgICAgICAgcHJvZyA9ICgnZnJvbSB0ZXN0LnRlc3RfbXVsdGlwcm9jZXNzaW5nIGltcG9ydCBUZXN0RmxhZ3M7ICcgKworICAgICAgICBwcm9nID0gKCdmcm9tIHRlc3QuX3Rlc3RfbXVsdGlwcm9jZXNzaW5nIGltcG9ydCBUZXN0RmxhZ3M7ICcgKwogICAgICAgICAgICAgICAgICdUZXN0RmxhZ3MucnVuX2luX2NoaWxkKCknKQogICAgICAgICBkYXRhID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoCiAgICAgICAgICAgICBbc3lzLmV4ZWN1dGFibGUsICctRScsICctUycsICctTycsICctYycsIHByb2ddKQpAQCAtMzQ2NSwxNSArMzQ4MCwxNiBAQAogCiBjbGFzcyBUZXN0Tm9Gb3JrQm9tYih1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3Rfbm9mb3JrYm9tYihzZWxmKToKKyAgICAgICAgc20gPSBtdWx0aXByb2Nlc3NpbmcuZ2V0X3N0YXJ0X21ldGhvZCgpCiAgICAgICAgIG5hbWUgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJ21wX2ZvcmtfYm9tYi5weScpCi0gICAgICAgIGlmIFdJTjMyOgotICAgICAgICAgICAgcmMsIG91dCwgZXJyID0gdGVzdC5zY3JpcHRfaGVscGVyLmFzc2VydF9weXRob25fZmFpbHVyZShuYW1lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJywgb3V0LmRlY29kZSgnYXNjaWknKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ1J1bnRpbWVFcnJvcicsIGVyci5kZWNvZGUoJ2FzY2lpJykpCisgICAgICAgIGlmIHNtICE9ICdmb3JrJzoKKyAgICAgICAgICAgIHJjLCBvdXQsIGVyciA9IHRlc3Quc2NyaXB0X2hlbHBlci5hc3NlcnRfcHl0aG9uX2ZhaWx1cmUobmFtZSwgc20pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dCwgYicnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihiJ1J1bnRpbWVFcnJvcicsIGVycikKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJjLCBvdXQsIGVyciA9IHRlc3Quc2NyaXB0X2hlbHBlci5hc3NlcnRfcHl0aG9uX29rKG5hbWUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcxMjMnLCBvdXQuZGVjb2RlKCdhc2NpaScpLnJzdHJpcCgpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJywgZXJyLmRlY29kZSgnYXNjaWknKSkKKyAgICAgICAgICAgIHJjLCBvdXQsIGVyciA9IHRlc3Quc2NyaXB0X2hlbHBlci5hc3NlcnRfcHl0aG9uX29rKG5hbWUsIHNtKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQucnN0cmlwKCksIGInMTIzJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLCBiJycpCiAKICMKICMgSXNzdWUgIzE3NTU1OiBGb3JrQXdhcmVUaHJlYWRMb2NrCkBAIC0zNDg5LDcgKzM1MDUsOCBAQAogICAgICAgICBpZiBuID4gMToKICAgICAgICAgICAgIHAgPSBtdWx0aXByb2Nlc3NpbmcuUHJvY2Vzcyh0YXJnZXQ9Y2xzLmNoaWxkLCBhcmdzPShuLTEsIGNvbm4pKQogICAgICAgICAgICAgcC5zdGFydCgpCi0gICAgICAgICAgICBwLmpvaW4oKQorICAgICAgICAgICAgY29ubi5jbG9zZSgpCisgICAgICAgICAgICBwLmpvaW4odGltZW91dD01KQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgY29ubi5zZW5kKGxlbih1dGlsLl9hZnRlcmZvcmtfcmVnaXN0cnkpKQogICAgICAgICBjb25uLmNsb3NlKCkKQEAgLTM1MDAsMTEgKzM1MTcsNzggQEAKICAgICAgICAgb2xkX3NpemUgPSBsZW4odXRpbC5fYWZ0ZXJmb3JrX3JlZ2lzdHJ5KQogICAgICAgICBwID0gbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3ModGFyZ2V0PXNlbGYuY2hpbGQsIGFyZ3M9KDUsIHcpKQogICAgICAgICBwLnN0YXJ0KCkKKyAgICAgICAgdy5jbG9zZSgpCiAgICAgICAgIG5ld19zaXplID0gci5yZWN2KCkKLSAgICAgICAgcC5qb2luKCkKKyAgICAgICAgcC5qb2luKHRpbWVvdXQ9NSkKICAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwobmV3X3NpemUsIG9sZF9zaXplKQogCiAjCisjIENoZWNrIHRoYXQgbm9uLWZvcmtlZCBjaGlsZCBwcm9jZXNzZXMgZG8gbm90IGluaGVyaXQgdW5uZWVkZWQgZmRzL2hhbmRsZXMKKyMKKworY2xhc3MgVGVzdENsb3NlRmRzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBnZXRfaGlnaF9zb2NrZXRfZmQoc2VsZik6CisgICAgICAgIGlmIFdJTjMyOgorICAgICAgICAgICAgIyBUaGUgY2hpbGQgcHJvY2VzcyB3aWxsIG5vdCBoYXZlIGFueSBzb2NrZXQgaGFuZGxlcywgc28KKyAgICAgICAgICAgICMgY2FsbGluZyBzb2NrZXQuZnJvbWZkKCkgc2hvdWxkIHByb2R1Y2UgV1NBRU5PVFNPQ0sgZXZlbgorICAgICAgICAgICAgIyBpZiB0aGVyZSBpcyBhIGhhbmRsZSBvZiB0aGUgc2FtZSBudW1iZXIuCisgICAgICAgICAgICByZXR1cm4gc29ja2V0LnNvY2tldCgpLmRldGFjaCgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIFdlIHdhbnQgdG8gcHJvZHVjZSBhIHNvY2tldCB3aXRoIGFuIGZkIGhpZ2ggZW5vdWdoIHRoYXQgYQorICAgICAgICAgICAgIyBmcmVzaGx5IGNyZWF0ZWQgY2hpbGQgcHJvY2VzcyB3aWxsIG5vdCBoYXZlIGFueSBmZHMgYXMgaGlnaC4KKyAgICAgICAgICAgIGZkID0gc29ja2V0LnNvY2tldCgpLmRldGFjaCgpCisgICAgICAgICAgICB0b19jbG9zZSA9IFtdCisgICAgICAgICAgICB3aGlsZSBmZCA8IDUwOgorICAgICAgICAgICAgICAgIHRvX2Nsb3NlLmFwcGVuZChmZCkKKyAgICAgICAgICAgICAgICBmZCA9IG9zLmR1cChmZCkKKyAgICAgICAgICAgIGZvciB4IGluIHRvX2Nsb3NlOgorICAgICAgICAgICAgICAgIG9zLmNsb3NlKHgpCisgICAgICAgICAgICByZXR1cm4gZmQKKworICAgIGRlZiBjbG9zZShzZWxmLCBmZCk6CisgICAgICAgIGlmIFdJTjMyOgorICAgICAgICAgICAgc29ja2V0LnNvY2tldChmaWxlbm89ZmQpLmNsb3NlKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG9zLmNsb3NlKGZkKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF90ZXN0X2Nsb3NlZmRzKGNscywgY29ubiwgZmQpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzID0gc29ja2V0LmZyb21mZChmZCwgc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgY29ubi5zZW5kKGUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzLmNsb3NlKCkKKyAgICAgICAgICAgIGNvbm4uc2VuZChOb25lKQorCisgICAgZGVmIHRlc3RfY2xvc2VmZChzZWxmKToKKyAgICAgICAgaWYgbm90IEhBU19SRURVQ1RJT046CisgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgncmVxdWlyZXMgZmQgcGlja2xpbmcnKQorCisgICAgICAgIHJlYWRlciwgd3JpdGVyID0gbXVsdGlwcm9jZXNzaW5nLlBpcGUoKQorICAgICAgICBmZCA9IHNlbGYuZ2V0X2hpZ2hfc29ja2V0X2ZkKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcCA9IG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzKHRhcmdldD1zZWxmLl90ZXN0X2Nsb3NlZmRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M9KHdyaXRlciwgZmQpKQorICAgICAgICAgICAgcC5zdGFydCgpCisgICAgICAgICAgICB3cml0ZXIuY2xvc2UoKQorICAgICAgICAgICAgZSA9IHJlYWRlci5yZWN2KCkKKyAgICAgICAgICAgIHAuam9pbih0aW1lb3V0PTUpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLmNsb3NlKGZkKQorICAgICAgICAgICAgd3JpdGVyLmNsb3NlKCkKKyAgICAgICAgICAgIHJlYWRlci5jbG9zZSgpCisKKyAgICAgICAgaWYgbXVsdGlwcm9jZXNzaW5nLmdldF9zdGFydF9tZXRob2QoKSA9PSAnZm9yayc6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzKGUsIE5vbmUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBXU0FFTk9UU09DSyA9IDEwMDM4CisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZSwgT1NFcnJvcikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlLmVycm5vID09IGVycm5vLkVCQURGIG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS53aW5lcnJvciA9PSBXU0FFTk9UU09DSywgZSkKKworIwogIyBJc3N1ZSAjMTcwOTc6IEVJTlRSIHNob3VsZCBiZSBpZ25vcmVkIGJ5IHJlY3YoKSwgc2VuZCgpLCBhY2NlcHQoKSBldGMKICMKIApAQCAtMzU0OCwxMCArMzYzMiwxMCBAQAogICAgICAgICBkZWYgaGFuZGxlcihzaWdudW0sIGZyYW1lKToKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHVVNSMSwgaGFuZGxlcikKLSAgICAgICAgbCA9IG11bHRpcHJvY2Vzc2luZy5jb25uZWN0aW9uLkxpc3RlbmVyKCkKLSAgICAgICAgY29ubi5zZW5kKGwuYWRkcmVzcykKLSAgICAgICAgYSA9IGwuYWNjZXB0KCkKLSAgICAgICAgYS5zZW5kKCd3ZWxjb21lJykKKyAgICAgICAgd2l0aCBtdWx0aXByb2Nlc3NpbmcuY29ubmVjdGlvbi5MaXN0ZW5lcigpIGFzIGw6CisgICAgICAgICAgICBjb25uLnNlbmQobC5hZGRyZXNzKQorICAgICAgICAgICAgYSA9IGwuYWNjZXB0KCkKKyAgICAgICAgICAgIGEuc2VuZCgnd2VsY29tZScpCiAKICAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNpZ25hbCwgJ1NJR1VTUjEnKSwgJ3JlcXVpcmVzIFNJR1VTUjEnKQogICAgIGRlZiB0ZXN0X2lnbm9yZV9saXN0ZW5lcihzZWxmKToKQEAgLTM1NzIsMjYgKzM2NTYsMjY3IEBACiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBjb25uLmNsb3NlKCkKIAotIwotIwotIworY2xhc3MgVGVzdFN0YXJ0TWV0aG9kKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX2NoZWNrX2NvbnRleHQoY2xzLCBjb25uKToKKyAgICAgICAgY29ubi5zZW5kKG11bHRpcHJvY2Vzc2luZy5nZXRfc3RhcnRfbWV0aG9kKCkpCiAKLWRlZiBzZXRVcE1vZHVsZSgpOgotICAgIGlmIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCJsaW51eCIpOgorICAgIGRlZiBjaGVja19jb250ZXh0KHNlbGYsIGN0eCk6CisgICAgICAgIHIsIHcgPSBjdHguUGlwZShkdXBsZXg9RmFsc2UpCisgICAgICAgIHAgPSBjdHguUHJvY2Vzcyh0YXJnZXQ9c2VsZi5fY2hlY2tfY29udGV4dCwgYXJncz0odywpKQorICAgICAgICBwLnN0YXJ0KCkKKyAgICAgICAgdy5jbG9zZSgpCisgICAgICAgIGNoaWxkX21ldGhvZCA9IHIucmVjdigpCisgICAgICAgIHIuY2xvc2UoKQorICAgICAgICBwLmpvaW4oKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNoaWxkX21ldGhvZCwgY3R4LmdldF9zdGFydF9tZXRob2QoKSkKKworICAgIGRlZiB0ZXN0X2NvbnRleHQoc2VsZik6CisgICAgICAgIGZvciBtZXRob2QgaW4gKCdmb3JrJywgJ3NwYXduJywgJ2ZvcmtzZXJ2ZXInKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBjdHggPSBtdWx0aXByb2Nlc3NpbmcuZ2V0X2NvbnRleHQobWV0aG9kKQorICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LmdldF9zdGFydF9tZXRob2QoKSwgbWV0aG9kKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhjdHguZ2V0X2NvbnRleHQoKSwgY3R4KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY3R4LnNldF9zdGFydF9tZXRob2QsICdzcGF3bicpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjdHguc2V0X3N0YXJ0X21ldGhvZCwgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfY29udGV4dChjdHgpCisKKyAgICBkZWYgdGVzdF9zZXRfZ2V0KHNlbGYpOgorICAgICAgICBtdWx0aXByb2Nlc3Npbmcuc2V0X2ZvcmtzZXJ2ZXJfcHJlbG9hZChQUkVMT0FEKQorICAgICAgICBjb3VudCA9IDAKKyAgICAgICAgb2xkX21ldGhvZCA9IG11bHRpcHJvY2Vzc2luZy5nZXRfc3RhcnRfbWV0aG9kKCkKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgbG9jayA9IG11bHRpcHJvY2Vzc2luZy5STG9jaygpCi0gICAgICAgIGV4Y2VwdCBPU0Vycm9yOgotICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIk9TRXJyb3IgcmFpc2VzIG9uIFJMb2NrIGNyZWF0aW9uLCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2VlIGlzc3VlIDMxMTEhIikKLSAgICBjaGVja19lbm91Z2hfc2VtYXBob3JlcygpCi0gICAgdXRpbC5nZXRfdGVtcF9kaXIoKSAgICAgIyBjcmVhdGVzIHRlbXAgZGlyZWN0b3J5IGZvciB1c2UgYnkgYWxsIHByb2Nlc3NlcwotICAgIG11bHRpcHJvY2Vzc2luZy5nZXRfbG9nZ2VyKCkuc2V0TGV2ZWwoTE9HX0xFVkVMKQorICAgICAgICAgICAgZm9yIG1ldGhvZCBpbiAoJ2ZvcmsnLCAnc3Bhd24nLCAnZm9ya3NlcnZlcicpOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgbXVsdGlwcm9jZXNzaW5nLnNldF9zdGFydF9tZXRob2QobWV0aG9kLCBmb3JjZT1UcnVlKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXVsdGlwcm9jZXNzaW5nLmdldF9zdGFydF9tZXRob2QoKSwgbWV0aG9kKQorICAgICAgICAgICAgICAgIGN0eCA9IG11bHRpcHJvY2Vzc2luZy5nZXRfY29udGV4dCgpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHguZ2V0X3N0YXJ0X21ldGhvZCgpLCBtZXRob2QpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cGUoY3R4KS5fX25hbWVfXy5sb3dlcigpLnN0YXJ0c3dpdGgobWV0aG9kKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoCisgICAgICAgICAgICAgICAgICAgIGN0eC5Qcm9jZXNzLl9fbmFtZV9fLmxvd2VyKCkuc3RhcnRzd2l0aChtZXRob2QpKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tfY29udGV4dChtdWx0aXByb2Nlc3NpbmcpCisgICAgICAgICAgICAgICAgY291bnQgKz0gMQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgbXVsdGlwcm9jZXNzaW5nLnNldF9zdGFydF9tZXRob2Qob2xkX21ldGhvZCwgZm9yY2U9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoY291bnQsIDEpCisKKyAgICBkZWYgdGVzdF9nZXRfYWxsKHNlbGYpOgorICAgICAgICBtZXRob2RzID0gbXVsdGlwcm9jZXNzaW5nLmdldF9hbGxfc3RhcnRfbWV0aG9kcygpCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZXRob2RzLCBbJ3NwYXduJ10pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobWV0aG9kcyA9PSBbJ2ZvcmsnLCAnc3Bhd24nXSBvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZHMgPT0gWydmb3JrJywgJ3NwYXduJywgJ2ZvcmtzZXJ2ZXInXSkKKworIworIyBDaGVjayB0aGF0IGtpbGxpbmcgcHJvY2VzcyBkb2VzIG5vdCBsZWFrIG5hbWVkIHNlbWFwaG9yZXMKKyMKKworQHVuaXR0ZXN0LnNraXBJZihzeXMucGxhdGZvcm0gPT0gIndpbjMyIiwKKyAgICAgICAgICAgICAgICAgInRlc3Qgc2VtYW50aWNzIGRvbid0IG1ha2Ugc2Vuc2Ugb24gV2luZG93cyIpCitjbGFzcyBUZXN0U2VtYXBob3JlVHJhY2tlcih1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3Rfc2VtYXBob3JlX3RyYWNrZXIoc2VsZik6CisgICAgICAgIGltcG9ydCBzdWJwcm9jZXNzCisgICAgICAgIGNtZCA9ICcnJ2lmIDE6CisgICAgICAgICAgICBpbXBvcnQgbXVsdGlwcm9jZXNzaW5nIGFzIG1wLCB0aW1lLCBvcworICAgICAgICAgICAgbXAuc2V0X3N0YXJ0X21ldGhvZCgic3Bhd24iKQorICAgICAgICAgICAgbG9jazEgPSBtcC5Mb2NrKCkKKyAgICAgICAgICAgIGxvY2syID0gbXAuTG9jaygpCisgICAgICAgICAgICBvcy53cml0ZSglZCwgbG9jazEuX3NlbWxvY2submFtZS5lbmNvZGUoImFzY2lpIikgKyBiIlxcbiIpCisgICAgICAgICAgICBvcy53cml0ZSglZCwgbG9jazIuX3NlbWxvY2submFtZS5lbmNvZGUoImFzY2lpIikgKyBiIlxcbiIpCisgICAgICAgICAgICB0aW1lLnNsZWVwKDEwKQorICAgICAgICAnJycKKyAgICAgICAgciwgdyA9IG9zLnBpcGUoKQorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctYycsIGNtZCAlICh3LCB3KV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3NfZmRzPVt3XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgb3MuY2xvc2UodykKKyAgICAgICAgd2l0aCBvcGVuKHIsICdyYicsIGNsb3NlZmQ9VHJ1ZSkgYXMgZjoKKyAgICAgICAgICAgIG5hbWUxID0gZi5yZWFkbGluZSgpLnJzdHJpcCgpLmRlY29kZSgnYXNjaWknKQorICAgICAgICAgICAgbmFtZTIgPSBmLnJlYWRsaW5lKCkucnN0cmlwKCkuZGVjb2RlKCdhc2NpaScpCisgICAgICAgIF9tdWx0aXByb2Nlc3Npbmcuc2VtX3VubGluayhuYW1lMSkKKyAgICAgICAgcC50ZXJtaW5hdGUoKQorICAgICAgICBwLndhaXQoKQorICAgICAgICB0aW1lLnNsZWVwKDIuMCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKSBhcyBjdHg6CisgICAgICAgICAgICBfbXVsdGlwcm9jZXNzaW5nLnNlbV91bmxpbmsobmFtZTIpCisgICAgICAgICMgZG9jcyBzYXkgaXQgc2hvdWxkIGJlIEVOT0VOVCwgYnV0IE9TWCBzZWVtcyB0byBnaXZlIEVJTlZBTAorICAgICAgICBzZWxmLmFzc2VydEluKGN0eC5leGNlcHRpb24uZXJybm8sIChlcnJuby5FTk9FTlQsIGVycm5vLkVJTlZBTCkpCisgICAgICAgIGVyciA9IHAuc3RkZXJyLnJlYWQoKS5kZWNvZGUoJ3V0Zi04JykKKyAgICAgICAgcC5zdGRlcnIuY2xvc2UoKQorICAgICAgICBleHBlY3RlZCA9ICdzZW1hcGhvcmVfdHJhY2tlcjogVGhlcmUgYXBwZWFyIHRvIGJlIDIgbGVha2VkIHNlbWFwaG9yZXMnCisgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXgoZXJyLCBleHBlY3RlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSZWdleChlcnIsICdzZW1hcGhvcmVfdHJhY2tlcjogJXI6IFxbRXJybm8nICUgbmFtZTEpCisKKyMKKyMgTWl4aW5zCisjCisKK2NsYXNzIFByb2Nlc3Nlc01peGluKG9iamVjdCk6CisgICAgVFlQRSA9ICdwcm9jZXNzZXMnCisgICAgUHJvY2VzcyA9IG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzCisgICAgY29ubmVjdGlvbiA9IG11bHRpcHJvY2Vzc2luZy5jb25uZWN0aW9uCisgICAgY3VycmVudF9wcm9jZXNzID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5jdXJyZW50X3Byb2Nlc3MpCisgICAgYWN0aXZlX2NoaWxkcmVuID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5hY3RpdmVfY2hpbGRyZW4pCisgICAgUG9vbCA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuUG9vbCkKKyAgICBQaXBlID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5QaXBlKQorICAgIFF1ZXVlID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5RdWV1ZSkKKyAgICBKb2luYWJsZVF1ZXVlID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5Kb2luYWJsZVF1ZXVlKQorICAgIExvY2sgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLkxvY2spCisgICAgUkxvY2sgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLlJMb2NrKQorICAgIFNlbWFwaG9yZSA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuU2VtYXBob3JlKQorICAgIEJvdW5kZWRTZW1hcGhvcmUgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLkJvdW5kZWRTZW1hcGhvcmUpCisgICAgQ29uZGl0aW9uID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5Db25kaXRpb24pCisgICAgRXZlbnQgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLkV2ZW50KQorICAgIEJhcnJpZXIgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLkJhcnJpZXIpCisgICAgVmFsdWUgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLlZhbHVlKQorICAgIEFycmF5ID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5BcnJheSkKKyAgICBSYXdWYWx1ZSA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuUmF3VmFsdWUpCisgICAgUmF3QXJyYXkgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLlJhd0FycmF5KQogCiAKLWRlZiB0ZWFyRG93bk1vZHVsZSgpOgotICAgICMgcGF1c2UgYSBiaXQgc28gd2UgZG9uJ3QgZ2V0IHdhcm5pbmcgYWJvdXQgZGFuZ2xpbmcgdGhyZWFkcy9wcm9jZXNzZXMKLSAgICB0aW1lLnNsZWVwKDAuNSkKK2NsYXNzIE1hbmFnZXJNaXhpbihvYmplY3QpOgorICAgIFRZUEUgPSAnbWFuYWdlcicKKyAgICBQcm9jZXNzID0gbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3MKKyAgICBRdWV1ZSA9IHByb3BlcnR5KG9wZXJhdG9yLmF0dHJnZXR0ZXIoJ21hbmFnZXIuUXVldWUnKSkKKyAgICBKb2luYWJsZVF1ZXVlID0gcHJvcGVydHkob3BlcmF0b3IuYXR0cmdldHRlcignbWFuYWdlci5Kb2luYWJsZVF1ZXVlJykpCisgICAgTG9jayA9IHByb3BlcnR5KG9wZXJhdG9yLmF0dHJnZXR0ZXIoJ21hbmFnZXIuTG9jaycpKQorICAgIFJMb2NrID0gcHJvcGVydHkob3BlcmF0b3IuYXR0cmdldHRlcignbWFuYWdlci5STG9jaycpKQorICAgIFNlbWFwaG9yZSA9IHByb3BlcnR5KG9wZXJhdG9yLmF0dHJnZXR0ZXIoJ21hbmFnZXIuU2VtYXBob3JlJykpCisgICAgQm91bmRlZFNlbWFwaG9yZSA9IHByb3BlcnR5KG9wZXJhdG9yLmF0dHJnZXR0ZXIoJ21hbmFnZXIuQm91bmRlZFNlbWFwaG9yZScpKQorICAgIENvbmRpdGlvbiA9IHByb3BlcnR5KG9wZXJhdG9yLmF0dHJnZXR0ZXIoJ21hbmFnZXIuQ29uZGl0aW9uJykpCisgICAgRXZlbnQgPSBwcm9wZXJ0eShvcGVyYXRvci5hdHRyZ2V0dGVyKCdtYW5hZ2VyLkV2ZW50JykpCisgICAgQmFycmllciA9IHByb3BlcnR5KG9wZXJhdG9yLmF0dHJnZXR0ZXIoJ21hbmFnZXIuQmFycmllcicpKQorICAgIFZhbHVlID0gcHJvcGVydHkob3BlcmF0b3IuYXR0cmdldHRlcignbWFuYWdlci5WYWx1ZScpKQorICAgIEFycmF5ID0gcHJvcGVydHkob3BlcmF0b3IuYXR0cmdldHRlcignbWFuYWdlci5BcnJheScpKQorICAgIGxpc3QgPSBwcm9wZXJ0eShvcGVyYXRvci5hdHRyZ2V0dGVyKCdtYW5hZ2VyLmxpc3QnKSkKKyAgICBkaWN0ID0gcHJvcGVydHkob3BlcmF0b3IuYXR0cmdldHRlcignbWFuYWdlci5kaWN0JykpCisgICAgTmFtZXNwYWNlID0gcHJvcGVydHkob3BlcmF0b3IuYXR0cmdldHRlcignbWFuYWdlci5OYW1lc3BhY2UnKSkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBQb29sKGNscywgKmFyZ3MsICoqa3dkcyk6CisgICAgICAgIHJldHVybiBjbHMubWFuYWdlci5Qb29sKCphcmdzLCAqKmt3ZHMpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc2V0VXBDbGFzcyhjbHMpOgorICAgICAgICBjbHMubWFuYWdlciA9IG11bHRpcHJvY2Vzc2luZy5NYW5hZ2VyKCkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiB0ZWFyRG93bkNsYXNzKGNscyk6CisgICAgICAgICMgb25seSB0aGUgbWFuYWdlciBwcm9jZXNzIHNob3VsZCBiZSByZXR1cm5lZCBieSBhY3RpdmVfY2hpbGRyZW4oKQorICAgICAgICAjIGJ1dCB0aGlzIGNhbiB0YWtlIGEgYml0IG9uIHNsb3cgbWFjaGluZXMsIHNvIHdhaXQgYSBmZXcgc2Vjb25kcworICAgICAgICAjIGlmIHRoZXJlIGFyZSBvdGhlciBjaGlsZHJlbiB0b28gKHNlZSAjMTczOTUpCisgICAgICAgIHQgPSAwLjAxCisgICAgICAgIHdoaWxlIGxlbihtdWx0aXByb2Nlc3NpbmcuYWN0aXZlX2NoaWxkcmVuKCkpID4gMSBhbmQgdCA8IDU6CisgICAgICAgICAgICB0aW1lLnNsZWVwKHQpCisgICAgICAgICAgICB0ICo9IDIKKyAgICAgICAgZ2MuY29sbGVjdCgpICAgICAgICAgICAgICAgICAgICAgICAjIGRvIGdhcmJhZ2UgY29sbGVjdGlvbgorICAgICAgICBpZiBjbHMubWFuYWdlci5fbnVtYmVyX29mX29iamVjdHMoKSAhPSAwOgorICAgICAgICAgICAgIyBUaGlzIGlzIG5vdCByZWFsbHkgYW4gZXJyb3Igc2luY2Ugc29tZSB0ZXN0cyBkbyBub3QKKyAgICAgICAgICAgICMgZW5zdXJlIHRoYXQgYWxsIHByb2Nlc3NlcyB3aGljaCBob2xkIGEgcmVmZXJlbmNlIHRvIGEKKyAgICAgICAgICAgICMgbWFuYWdlZCBvYmplY3QgaGF2ZSBiZWVuIGpvaW5lZC4KKyAgICAgICAgICAgIHByaW50KCdTaGFyZWQgb2JqZWN0cyB3aGljaCBzdGlsbCBleGlzdCBhdCBtYW5hZ2VyIHNodXRkb3duOicpCisgICAgICAgICAgICBwcmludChjbHMubWFuYWdlci5fZGVidWdfaW5mbygpKQorICAgICAgICBjbHMubWFuYWdlci5zaHV0ZG93bigpCisgICAgICAgIGNscy5tYW5hZ2VyLmpvaW4oKQorICAgICAgICBjbHMubWFuYWdlciA9IE5vbmUKIAogCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHVuaXR0ZXN0Lm1haW4oKQorY2xhc3MgVGhyZWFkc01peGluKG9iamVjdCk6CisgICAgVFlQRSA9ICd0aHJlYWRzJworICAgIFByb2Nlc3MgPSBtdWx0aXByb2Nlc3NpbmcuZHVtbXkuUHJvY2VzcworICAgIGNvbm5lY3Rpb24gPSBtdWx0aXByb2Nlc3NpbmcuZHVtbXkuY29ubmVjdGlvbgorICAgIGN1cnJlbnRfcHJvY2VzcyA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuZHVtbXkuY3VycmVudF9wcm9jZXNzKQorICAgIGFjdGl2ZV9jaGlsZHJlbiA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuZHVtbXkuYWN0aXZlX2NoaWxkcmVuKQorICAgIFBvb2wgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLlBvb2wpCisgICAgUGlwZSA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuZHVtbXkuUGlwZSkKKyAgICBRdWV1ZSA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuZHVtbXkuUXVldWUpCisgICAgSm9pbmFibGVRdWV1ZSA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuZHVtbXkuSm9pbmFibGVRdWV1ZSkKKyAgICBMb2NrID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5kdW1teS5Mb2NrKQorICAgIFJMb2NrID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5kdW1teS5STG9jaykKKyAgICBTZW1hcGhvcmUgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLmR1bW15LlNlbWFwaG9yZSkKKyAgICBCb3VuZGVkU2VtYXBob3JlID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5kdW1teS5Cb3VuZGVkU2VtYXBob3JlKQorICAgIENvbmRpdGlvbiA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuZHVtbXkuQ29uZGl0aW9uKQorICAgIEV2ZW50ID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5kdW1teS5FdmVudCkKKyAgICBCYXJyaWVyID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5kdW1teS5CYXJyaWVyKQorICAgIFZhbHVlID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5kdW1teS5WYWx1ZSkKKyAgICBBcnJheSA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuZHVtbXkuQXJyYXkpCisKKyMKKyMgRnVuY3Rpb25zIHVzZWQgdG8gY3JlYXRlIHRlc3QgY2FzZXMgZnJvbSB0aGUgYmFzZSBvbmVzIGluIHRoaXMgbW9kdWxlCisjCisKK2RlZiBpbnN0YWxsX3Rlc3RzX2luX21vZHVsZV9kaWN0KHJlbW90ZV9nbG9icywgc3RhcnRfbWV0aG9kKToKKyAgICBfX21vZHVsZV9fID0gcmVtb3RlX2dsb2JzWydfX25hbWVfXyddCisgICAgbG9jYWxfZ2xvYnMgPSBnbG9iYWxzKCkKKyAgICBBTExfVFlQRVMgPSB7J3Byb2Nlc3NlcycsICd0aHJlYWRzJywgJ21hbmFnZXInfQorCisgICAgZm9yIG5hbWUsIGJhc2UgaW4gbG9jYWxfZ2xvYnMuaXRlbXMoKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoYmFzZSwgdHlwZSk6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBpZiBpc3N1YmNsYXNzKGJhc2UsIEJhc2VUZXN0Q2FzZSk6CisgICAgICAgICAgICBpZiBiYXNlIGlzIEJhc2VUZXN0Q2FzZToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgYXNzZXJ0IHNldChiYXNlLkFMTE9XRURfVFlQRVMpIDw9IEFMTF9UWVBFUywgYmFzZS5BTExPV0VEX1RZUEVTCisgICAgICAgICAgICBmb3IgdHlwZV8gaW4gYmFzZS5BTExPV0VEX1RZUEVTOgorICAgICAgICAgICAgICAgIG5ld25hbWUgPSAnV2l0aCcgKyB0eXBlXy5jYXBpdGFsaXplKCkgKyBuYW1lWzE6XQorICAgICAgICAgICAgICAgIE1peGluID0gbG9jYWxfZ2xvYnNbdHlwZV8uY2FwaXRhbGl6ZSgpICsgJ01peGluJ10KKyAgICAgICAgICAgICAgICBjbGFzcyBUZW1wKGJhc2UsIE1peGluLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICBUZW1wLl9fbmFtZV9fID0gVGVtcC5fX3F1YWxuYW1lX18gPSBuZXduYW1lCisgICAgICAgICAgICAgICAgVGVtcC5fX21vZHVsZV9fID0gX19tb2R1bGVfXworICAgICAgICAgICAgICAgIHJlbW90ZV9nbG9ic1tuZXduYW1lXSA9IFRlbXAKKyAgICAgICAgZWxpZiBpc3N1YmNsYXNzKGJhc2UsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGNsYXNzIFRlbXAoYmFzZSwgb2JqZWN0KToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBUZW1wLl9fbmFtZV9fID0gVGVtcC5fX3F1YWxuYW1lX18gPSBuYW1lCisgICAgICAgICAgICBUZW1wLl9fbW9kdWxlX18gPSBfX21vZHVsZV9fCisgICAgICAgICAgICByZW1vdGVfZ2xvYnNbbmFtZV0gPSBUZW1wCisKKyAgICBkYW5nbGluZyA9IFtOb25lLCBOb25lXQorICAgIG9sZF9zdGFydF9tZXRob2QgPSBbTm9uZV0KKworICAgIGRlZiBzZXRVcE1vZHVsZSgpOgorICAgICAgICBtdWx0aXByb2Nlc3Npbmcuc2V0X2ZvcmtzZXJ2ZXJfcHJlbG9hZChQUkVMT0FEKQorICAgICAgICBtdWx0aXByb2Nlc3NpbmcucHJvY2Vzcy5fY2xlYW51cCgpCisgICAgICAgIGRhbmdsaW5nWzBdID0gbXVsdGlwcm9jZXNzaW5nLnByb2Nlc3MuX2RhbmdsaW5nLmNvcHkoKQorICAgICAgICBkYW5nbGluZ1sxXSA9IHRocmVhZGluZy5fZGFuZ2xpbmcuY29weSgpCisgICAgICAgIG9sZF9zdGFydF9tZXRob2RbMF0gPSBtdWx0aXByb2Nlc3NpbmcuZ2V0X3N0YXJ0X21ldGhvZChhbGxvd19ub25lPVRydWUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG11bHRpcHJvY2Vzc2luZy5zZXRfc3RhcnRfbWV0aG9kKHN0YXJ0X21ldGhvZCwgZm9yY2U9VHJ1ZSkKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdChzdGFydF9tZXRob2QgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyBzdGFydCBtZXRob2Qgbm90IHN1cHBvcnRlZCcpCisKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoImxpbnV4Iik6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbG9jayA9IG11bHRpcHJvY2Vzc2luZy5STG9jaygpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiT1NFcnJvciByYWlzZXMgb24gUkxvY2sgY3JlYXRpb24sICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2VlIGlzc3VlIDMxMTEhIikKKyAgICAgICAgY2hlY2tfZW5vdWdoX3NlbWFwaG9yZXMoKQorICAgICAgICB1dGlsLmdldF90ZW1wX2RpcigpICAgICAjIGNyZWF0ZXMgdGVtcCBkaXJlY3RvcnkKKyAgICAgICAgbXVsdGlwcm9jZXNzaW5nLmdldF9sb2dnZXIoKS5zZXRMZXZlbChMT0dfTEVWRUwpCisKKyAgICBkZWYgdGVhckRvd25Nb2R1bGUoKToKKyAgICAgICAgbXVsdGlwcm9jZXNzaW5nLnNldF9zdGFydF9tZXRob2Qob2xkX3N0YXJ0X21ldGhvZFswXSwgZm9yY2U9VHJ1ZSkKKyAgICAgICAgIyBwYXVzZSBhIGJpdCBzbyB3ZSBkb24ndCBnZXQgd2FybmluZyBhYm91dCBkYW5nbGluZyB0aHJlYWRzL3Byb2Nlc3NlcworICAgICAgICB0aW1lLnNsZWVwKDAuNSkKKyAgICAgICAgbXVsdGlwcm9jZXNzaW5nLnByb2Nlc3MuX2NsZWFudXAoKQorICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgdG1wID0gc2V0KG11bHRpcHJvY2Vzc2luZy5wcm9jZXNzLl9kYW5nbGluZykgLSBzZXQoZGFuZ2xpbmdbMF0pCisgICAgICAgIGlmIHRtcDoKKyAgICAgICAgICAgIHByaW50KCdEYW5nbGluZyBwcm9jZXNzZXM6JywgdG1wLCBmaWxlPXN5cy5zdGRlcnIpCisgICAgICAgIGRlbCB0bXAKKyAgICAgICAgdG1wID0gc2V0KHRocmVhZGluZy5fZGFuZ2xpbmcpIC0gc2V0KGRhbmdsaW5nWzFdKQorICAgICAgICBpZiB0bXA6CisgICAgICAgICAgICBwcmludCgnRGFuZ2xpbmcgdGhyZWFkczonLCB0bXAsIGZpbGU9c3lzLnN0ZGVycikKKworICAgIHJlbW90ZV9nbG9ic1snc2V0VXBNb2R1bGUnXSA9IHNldFVwTW9kdWxlCisgICAgcmVtb3RlX2dsb2JzWyd0ZWFyRG93bk1vZHVsZSddID0gdGVhckRvd25Nb2R1bGUKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2F1ZGlvZGF0YS9wbHVjay1wY20yNC5hdSBiL0xpYi90ZXN0L2F1ZGlvZGF0YS9wbHVjay1wY20yNC5hdQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYmIyMzA0Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvYXVkaW9kYXRhL3BsdWNrLXBjbTI0LmF1CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2F1ZGlvdGVzdHMucHkgYi9MaWIvdGVzdC9hdWRpb3Rlc3RzLnB5CmluZGV4IDZmZjViYjguLjBhZTIyNDIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2F1ZGlvdGVzdHMucHkKKysrIGIvTGliL3Rlc3QvYXVkaW90ZXN0cy5weQpAQCAtMTIsMjQgKzEyLDYgQEAKICAgICBkZWYgc2VlayhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgogICAgICAgICByYWlzZSBpby5VbnN1cHBvcnRlZE9wZXJhdGlvbgogCi1kZWYgYnl0ZXN3YXAyKGRhdGEpOgotICAgIGEgPSBhcnJheS5hcnJheSgnaCcpCi0gICAgYS5mcm9tYnl0ZXMoZGF0YSkKLSAgICBhLmJ5dGVzd2FwKCkKLSAgICByZXR1cm4gYS50b2J5dGVzKCkKLQotZGVmIGJ5dGVzd2FwMyhkYXRhKToKLSAgICBiYSA9IGJ5dGVhcnJheShkYXRhKQotICAgIGJhWzo6M10gPSBkYXRhWzI6OjNdCi0gICAgYmFbMjo6M10gPSBkYXRhWzo6M10KLSAgICByZXR1cm4gYnl0ZXMoYmEpCi0KLWRlZiBieXRlc3dhcDQoZGF0YSk6Ci0gICAgYSA9IGFycmF5LmFycmF5KCdpJykKLSAgICBhLmZyb21ieXRlcyhkYXRhKQotICAgIGEuYnl0ZXN3YXAoKQotICAgIHJldHVybiBhLnRvYnl0ZXMoKQotCiAKIGNsYXNzIEF1ZGlvVGVzdHM6CiAgICAgY2xvc2VfZmQgPSBGYWxzZQpAQCAtNTYsOSArMzgsMTYgQEAKICAgICAgICAgcGFyYW1zID0gZi5nZXRwYXJhbXMoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcmFtcywKICAgICAgICAgICAgICAgICAobmNoYW5uZWxzLCBzYW1wd2lkdGgsIGZyYW1lcmF0ZSwgbmZyYW1lcywgY29tcHR5cGUsIGNvbXBuYW1lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJhbXMubmNoYW5uZWxzLCBuY2hhbm5lbHMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyYW1zLnNhbXB3aWR0aCwgc2FtcHdpZHRoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcmFtcy5mcmFtZXJhdGUsIGZyYW1lcmF0ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJhbXMubmZyYW1lcywgbmZyYW1lcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJhbXMuY29tcHR5cGUsIGNvbXB0eXBlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcmFtcy5jb21wbmFtZSwgY29tcG5hbWUpCiAKLSAgICAgICAgZHVtcCA9IHBpY2tsZS5kdW1wcyhwYXJhbXMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGlja2xlLmxvYWRzKGR1bXApLCBwYXJhbXMpCisgICAgICAgIGZvciBwcm90byBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgZHVtcCA9IHBpY2tsZS5kdW1wcyhwYXJhbXMsIHByb3RvKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwaWNrbGUubG9hZHMoZHVtcCksIHBhcmFtcykKIAogCiBjbGFzcyBBdWRpb1dyaXRlVGVzdHMoQXVkaW9UZXN0cyk6CkBAIC03MiwxNSArNjEsMTIgQEAKICAgICAgICAgcmV0dXJuIGYKIAogICAgIGRlZiBjaGVja19maWxlKHNlbGYsIHRlc3RmaWxlLCBuZnJhbWVzLCBmcmFtZXMpOgotICAgICAgICBmID0gc2VsZi5tb2R1bGUub3Blbih0ZXN0ZmlsZSwgJ3JiJykKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIHNlbGYubW9kdWxlLm9wZW4odGVzdGZpbGUsICdyYicpIGFzIGY6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZ2V0bmNoYW5uZWxzKCksIHNlbGYubmNoYW5uZWxzKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmdldHNhbXB3aWR0aCgpLCBzZWxmLnNhbXB3aWR0aCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5nZXRmcmFtZXJhdGUoKSwgc2VsZi5mcmFtZXJhdGUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZ2V0bmZyYW1lcygpLCBuZnJhbWVzKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWRmcmFtZXMobmZyYW1lcyksIGZyYW1lcykKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGYuY2xvc2UoKQogCiAgICAgZGVmIHRlc3Rfd3JpdGVfcGFyYW1zKHNlbGYpOgogICAgICAgICBmID0gc2VsZi5jcmVhdGVfZmlsZShURVNURk4pCkBAIC05MCw2ICs3Niw1MyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm5mcmFtZXMsIHNlbGYuY29tcHR5cGUsIHNlbGYuY29tcG5hbWUpCiAgICAgICAgIGYuY2xvc2UoKQogCisgICAgZGVmIHRlc3Rfd3JpdGVfY29udGV4dF9tYW5hZ2VyX2NhbGxzX2Nsb3NlKHNlbGYpOgorICAgICAgICAjIENsb3NlIGNoZWNrcyBmb3IgYSBtaW5pbXVtIGhlYWRlciBhbmQgd2lsbCByYWlzZSBhbiBlcnJvcgorICAgICAgICAjIGlmIGl0IGlzIG5vdCBzZXQsIHNvIHRoaXMgcHJvdmVzIHRoYXQgY2xvc2UgaXMgY2FsbGVkLgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYubW9kdWxlLkVycm9yKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5tb2R1bGUub3BlbihURVNURk4sICd3YicpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLm1vZHVsZS5FcnJvcik6CisgICAgICAgICAgICB3aXRoIG9wZW4oVEVTVEZOLCAnd2InKSBhcyB0ZXN0ZmlsZToKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYubW9kdWxlLm9wZW4odGVzdGZpbGUpOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgdGVzdF9jb250ZXh0X21hbmFnZXJfd2l0aF9vcGVuX2ZpbGUoc2VsZik6CisgICAgICAgIHdpdGggb3BlbihURVNURk4sICd3YicpIGFzIHRlc3RmaWxlOgorICAgICAgICAgICAgd2l0aCBzZWxmLm1vZHVsZS5vcGVuKHRlc3RmaWxlKSBhcyBmOgorICAgICAgICAgICAgICAgIGYuc2V0bmNoYW5uZWxzKHNlbGYubmNoYW5uZWxzKQorICAgICAgICAgICAgICAgIGYuc2V0c2FtcHdpZHRoKHNlbGYuc2FtcHdpZHRoKQorICAgICAgICAgICAgICAgIGYuc2V0ZnJhbWVyYXRlKHNlbGYuZnJhbWVyYXRlKQorICAgICAgICAgICAgICAgIGYuc2V0Y29tcHR5cGUoc2VsZi5jb21wdHlwZSwgc2VsZi5jb21wbmFtZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdGZpbGUuY2xvc2VkLCBzZWxmLmNsb3NlX2ZkKQorICAgICAgICB3aXRoIG9wZW4oVEVTVEZOLCAncmInKSBhcyB0ZXN0ZmlsZToKKyAgICAgICAgICAgIHdpdGggc2VsZi5tb2R1bGUub3Blbih0ZXN0ZmlsZSkgYXMgZjoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuZ2V0ZnAoKS5jbG9zZWQpCisgICAgICAgICAgICAgICAgcGFyYW1zID0gZi5nZXRwYXJhbXMoKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyYW1zLm5jaGFubmVscywgc2VsZi5uY2hhbm5lbHMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJhbXMuc2FtcHdpZHRoLCBzZWxmLnNhbXB3aWR0aCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcmFtcy5mcmFtZXJhdGUsIHNlbGYuZnJhbWVyYXRlKQorICAgICAgICAgICAgaWYgbm90IHNlbGYuY2xvc2VfZmQ6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZi5nZXRmcCgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0ZmlsZS5jbG9zZWQsIHNlbGYuY2xvc2VfZmQpCisKKyAgICBkZWYgdGVzdF9jb250ZXh0X21hbmFnZXJfd2l0aF9maWxlbmFtZShzZWxmKToKKyAgICAgICAgIyBJZiB0aGUgZmlsZSBkb2Vzbid0IGdldCBjbG9zZWQsIHRoaXMgdGVzdCB3b24ndCBmYWlsLCBidXQgaXQgd2lsbAorICAgICAgICAjIHByb2R1Y2UgYSByZXNvdXJjZSBsZWFrIHdhcm5pbmcuCisgICAgICAgIHdpdGggc2VsZi5tb2R1bGUub3BlbihURVNURk4sICd3YicpIGFzIGY6CisgICAgICAgICAgICBmLnNldG5jaGFubmVscyhzZWxmLm5jaGFubmVscykKKyAgICAgICAgICAgIGYuc2V0c2FtcHdpZHRoKHNlbGYuc2FtcHdpZHRoKQorICAgICAgICAgICAgZi5zZXRmcmFtZXJhdGUoc2VsZi5mcmFtZXJhdGUpCisgICAgICAgICAgICBmLnNldGNvbXB0eXBlKHNlbGYuY29tcHR5cGUsIHNlbGYuY29tcG5hbWUpCisgICAgICAgIHdpdGggc2VsZi5tb2R1bGUub3BlbihURVNURk4pIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuZ2V0ZnAoKS5jbG9zZWQpCisgICAgICAgICAgICBwYXJhbXMgPSBmLmdldHBhcmFtcygpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcmFtcy5uY2hhbm5lbHMsIHNlbGYubmNoYW5uZWxzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJhbXMuc2FtcHdpZHRoLCBzZWxmLnNhbXB3aWR0aCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyYW1zLmZyYW1lcmF0ZSwgc2VsZi5mcmFtZXJhdGUpCisgICAgICAgIGlmIG5vdCBzZWxmLmNsb3NlX2ZkOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZi5nZXRmcCgpKQorCiAgICAgZGVmIHRlc3Rfd3JpdGUoc2VsZik6CiAgICAgICAgIGYgPSBzZWxmLmNyZWF0ZV9maWxlKFRFU1RGTikKICAgICAgICAgZi5zZXRuZnJhbWVzKHNlbGYubmZyYW1lcykKQEAgLTk4LDYgKzEzMSwzMCBAQAogCiAgICAgICAgIHNlbGYuY2hlY2tfZmlsZShURVNURk4sIHNlbGYubmZyYW1lcywgc2VsZi5mcmFtZXMpCiAKKyAgICBkZWYgdGVzdF93cml0ZV9ieXRlYXJyYXkoc2VsZik6CisgICAgICAgIGYgPSBzZWxmLmNyZWF0ZV9maWxlKFRFU1RGTikKKyAgICAgICAgZi5zZXRuZnJhbWVzKHNlbGYubmZyYW1lcykKKyAgICAgICAgZi53cml0ZWZyYW1lcyhieXRlYXJyYXkoc2VsZi5mcmFtZXMpKQorICAgICAgICBmLmNsb3NlKCkKKworICAgICAgICBzZWxmLmNoZWNrX2ZpbGUoVEVTVEZOLCBzZWxmLm5mcmFtZXMsIHNlbGYuZnJhbWVzKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfYXJyYXkoc2VsZik6CisgICAgICAgIGYgPSBzZWxmLmNyZWF0ZV9maWxlKFRFU1RGTikKKyAgICAgICAgZi5zZXRuZnJhbWVzKHNlbGYubmZyYW1lcykKKyAgICAgICAgZi53cml0ZWZyYW1lcyhhcnJheS5hcnJheSgnaCcsIHNlbGYuZnJhbWVzKSkKKyAgICAgICAgZi5jbG9zZSgpCisKKyAgICAgICAgc2VsZi5jaGVja19maWxlKFRFU1RGTiwgc2VsZi5uZnJhbWVzLCBzZWxmLmZyYW1lcykKKworICAgIGRlZiB0ZXN0X3dyaXRlX21lbW9yeXZpZXcoc2VsZik6CisgICAgICAgIGYgPSBzZWxmLmNyZWF0ZV9maWxlKFRFU1RGTikKKyAgICAgICAgZi5zZXRuZnJhbWVzKHNlbGYubmZyYW1lcykKKyAgICAgICAgZi53cml0ZWZyYW1lcyhtZW1vcnl2aWV3KHNlbGYuZnJhbWVzKSkKKyAgICAgICAgZi5jbG9zZSgpCisKKyAgICAgICAgc2VsZi5jaGVja19maWxlKFRFU1RGTiwgc2VsZi5uZnJhbWVzLCBzZWxmLmZyYW1lcykKKwogICAgIGRlZiB0ZXN0X2luY29tcGxldGVkX3dyaXRlKHNlbGYpOgogICAgICAgICB3aXRoIG9wZW4oVEVTVEZOLCAnd2InKSBhcyB0ZXN0ZmlsZToKICAgICAgICAgICAgIHRlc3RmaWxlLndyaXRlKGInYWJhYmFnYWxhbWFnYScpCkBAIC0xMzcsMjAgKzE5NCwxOCBAQAogICAgICAgICAgICAgc2VsZi5jaGVja19maWxlKHRlc3RmaWxlLCBzZWxmLm5mcmFtZXMsIHNlbGYuZnJhbWVzKQogCiAgICAgZGVmIHRlc3RfdW5zZWVrYWJsZV9yZWFkKHNlbGYpOgotICAgICAgICBmID0gc2VsZi5jcmVhdGVfZmlsZShURVNURk4pCi0gICAgICAgIGYuc2V0bmZyYW1lcyhzZWxmLm5mcmFtZXMpCi0gICAgICAgIGYud3JpdGVmcmFtZXMoc2VsZi5mcmFtZXMpCi0gICAgICAgIGYuY2xvc2UoKQorICAgICAgICB3aXRoIHNlbGYuY3JlYXRlX2ZpbGUoVEVTVEZOKSBhcyBmOgorICAgICAgICAgICAgZi5zZXRuZnJhbWVzKHNlbGYubmZyYW1lcykKKyAgICAgICAgICAgIGYud3JpdGVmcmFtZXMoc2VsZi5mcmFtZXMpCiAKICAgICAgICAgd2l0aCBVbnNlZWthYmxlSU8oVEVTVEZOLCAncmInKSBhcyB0ZXN0ZmlsZToKICAgICAgICAgICAgIHNlbGYuY2hlY2tfZmlsZSh0ZXN0ZmlsZSwgc2VsZi5uZnJhbWVzLCBzZWxmLmZyYW1lcykKIAogICAgIGRlZiB0ZXN0X3Vuc2Vla2FibGVfd3JpdGUoc2VsZik6CiAgICAgICAgIHdpdGggVW5zZWVrYWJsZUlPKFRFU1RGTiwgJ3diJykgYXMgdGVzdGZpbGU6Ci0gICAgICAgICAgICBmID0gc2VsZi5jcmVhdGVfZmlsZSh0ZXN0ZmlsZSkKLSAgICAgICAgICAgIGYuc2V0bmZyYW1lcyhzZWxmLm5mcmFtZXMpCi0gICAgICAgICAgICBmLndyaXRlZnJhbWVzKHNlbGYuZnJhbWVzKQotICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICB3aXRoIHNlbGYuY3JlYXRlX2ZpbGUodGVzdGZpbGUpIGFzIGY6CisgICAgICAgICAgICAgICAgZi5zZXRuZnJhbWVzKHNlbGYubmZyYW1lcykKKyAgICAgICAgICAgICAgICBmLndyaXRlZnJhbWVzKHNlbGYuZnJhbWVzKQogCiAgICAgICAgIHNlbGYuY2hlY2tfZmlsZShURVNURk4sIHNlbGYubmZyYW1lcywgc2VsZi5mcmFtZXMpCiAKQEAgLTI2NywxMiArMzIyLDkgQEAKIAogICAgICAgICB3aXRoIG9wZW4oVEVTVEZOLCAncmInKSBhcyB0ZXN0ZmlsZToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdGZpbGUucmVhZCgxMyksIGInYWJhYmFnYWxhbWFnYScpCi0gICAgICAgICAgICBmID0gc2VsZi5tb2R1bGUub3Blbih0ZXN0ZmlsZSwgJ3JiJykKLSAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggc2VsZi5tb2R1bGUub3Blbih0ZXN0ZmlsZSwgJ3JiJykgYXMgZjoKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZ2V0bmNoYW5uZWxzKCksIHNlbGYubmNoYW5uZWxzKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5nZXRzYW1wd2lkdGgoKSwgc2VsZi5zYW1wd2lkdGgpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmdldGZyYW1lcmF0ZSgpLCBzZWxmLmZyYW1lcmF0ZSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZ2V0bmZyYW1lcygpLCBzZWxmLnNuZGZpbGVuZnJhbWVzKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkZnJhbWVzKHNlbGYubmZyYW1lcyksIHNlbGYuZnJhbWVzKQotICAgICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgICAgICBmLmNsb3NlKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2JhZHN5bnRheF9mdXR1cmUxMC5weSBiL0xpYi90ZXN0L2JhZHN5bnRheF9mdXR1cmUxMC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTVhYjY3Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvYmFkc3ludGF4X2Z1dHVyZTEwLnB5CkBAIC0wLDAgKzEsMyBAQAorZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBhYnNvbHV0ZV9pbXBvcnQKKyJzcGFtLCBiYXIsIGJsYWgiCitmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9idWZmZXJfdGVzdHMucHkgYi9MaWIvdGVzdC9idWZmZXJfdGVzdHMucHkKaW5kZXggY2Y1NGMyOC4uMGE2Mjk0MCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvYnVmZmVyX3Rlc3RzLnB5CisrKyBiL0xpYi90ZXN0L2J1ZmZlcl90ZXN0cy5weQpAQCAtMTYwLDE0ICsxNjAsMjAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1hcnNoYWwoYidhYmNccmFiXHRkZWZcbmdcdGhpJykuZXhwYW5kdGFicyg4KSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ2FiY1xyYWIgIGRlZlxuZyAgIGhpJywKICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1hcnNoYWwoYidhYmNccmFiXHRkZWZcbmdcdGhpJykuZXhwYW5kdGFicyg0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ2FiY1xyXG5hYiAgICAgIGRlZlxuZyAgICAgICBoaScsCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYXJzaGFsKGInYWJjXHJcbmFiXHRkZWZcbmdcdGhpJykuZXhwYW5kdGFicygpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInYWJjXHJcbmFiICAgICAgZGVmXG5nICAgICAgIGhpJywKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1hcnNoYWwoYidhYmNcclxuYWJcdGRlZlxuZ1x0aGknKS5leHBhbmR0YWJzKDgpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInYWJjXHJcbmFiICBkZWZcbmcgICBoaScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYXJzaGFsKGInYWJjXHJcbmFiXHRkZWZcbmdcdGhpJykuZXhwYW5kdGFicyg0KSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ2FiY1xyYWIgICAgICBkZWZcbmcgICAgICAgaGknLAotICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWFyc2hhbChiJ2FiY1xyYWJcdGRlZlxuZ1x0aGknKS5leHBhbmR0YWJzKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidhYmNccmFiICAgICAgZGVmXG5nICAgICAgIGhpJywKLSAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1hcnNoYWwoYidhYmNccmFiXHRkZWZcbmdcdGhpJykuZXhwYW5kdGFicyg4KSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ2FiY1xyXG5hYlxyXG5kZWZcbmdcclxuaGknLAotICAgICAgICAgICAgc2VsZi5tYXJzaGFsKGInYWJjXHJcbmFiXHJcbmRlZlxuZ1xyXG5oaScpLmV4cGFuZHRhYnMoNCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYXJzaGFsKGInYWJjXHJcbmFiXHJcbmRlZlxuZ1xyXG5oaScpLmV4cGFuZHRhYnMoNCkpCisgICAgICAgICMgY2hlY2sga2V5d29yZCBhcmdzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidhYmNccmFiICAgICAgZGVmXG5nICAgICAgIGhpJywKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1hcnNoYWwoYidhYmNccmFiXHRkZWZcbmdcdGhpJykuZXhwYW5kdGFicyh0YWJzaXplPTgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInYWJjXHJhYiAgZGVmXG5nICAgaGknLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWFyc2hhbChiJ2FiY1xyYWJcdGRlZlxuZ1x0aGknKS5leHBhbmR0YWJzKHRhYnNpemU9NCkpCisKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJyAgYVxuIGInLCBzZWxmLm1hcnNoYWwoYicgXHRhXG5cdGInKS5leHBhbmR0YWJzKDEpKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5tYXJzaGFsKGInaGVsbG8nKS5leHBhbmR0YWJzLCA0MiwgNDIpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9ieXRlY29kZV9oZWxwZXIucHkgYi9MaWIvdGVzdC9ieXRlY29kZV9oZWxwZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNThiNDIwOQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L2J5dGVjb2RlX2hlbHBlci5weQpAQCAtMCwwICsxLDQxIEBACisiIiJieXRlY29kZV9oZWxwZXIgLSBzdXBwb3J0IHRvb2xzIGZvciB0ZXN0aW5nIGNvcnJlY3QgYnl0ZWNvZGUgZ2VuZXJhdGlvbiIiIgorCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBkaXMKK2ltcG9ydCBpbworCitfVU5TUEVDSUZJRUQgPSBvYmplY3QoKQorCitjbGFzcyBCeXRlY29kZVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiJDdXN0b20gYXNzZXJ0aW9uIG1ldGhvZHMgZm9yIGluc3BlY3RpbmcgYnl0ZWNvZGUuIiIiCisKKyAgICBkZWYgZ2V0X2Rpc2Fzc2VtYmx5X2FzX3N0cmluZyhzZWxmLCBjbyk6CisgICAgICAgIHMgPSBpby5TdHJpbmdJTygpCisgICAgICAgIGRpcy5kaXMoY28sIGZpbGU9cykKKyAgICAgICAgcmV0dXJuIHMuZ2V0dmFsdWUoKQorCisgICAgZGVmIGFzc2VydEluQnl0ZWNvZGUoc2VsZiwgeCwgb3BuYW1lLCBhcmd2YWw9X1VOU1BFQ0lGSUVEKToKKyAgICAgICAgIiIiUmV0dXJucyBpbnN0ciBpZiBvcCBpcyBmb3VuZCwgb3RoZXJ3aXNlIHRocm93cyBBc3NlcnRpb25FcnJvciIiIgorICAgICAgICBmb3IgaW5zdHIgaW4gZGlzLmdldF9pbnN0cnVjdGlvbnMoeCk6CisgICAgICAgICAgICBpZiBpbnN0ci5vcG5hbWUgPT0gb3BuYW1lOgorICAgICAgICAgICAgICAgIGlmIGFyZ3ZhbCBpcyBfVU5TUEVDSUZJRUQgb3IgaW5zdHIuYXJndmFsID09IGFyZ3ZhbDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluc3RyCisgICAgICAgIGRpc2Fzc2VtYmx5ID0gc2VsZi5nZXRfZGlzYXNzZW1ibHlfYXNfc3RyaW5nKHgpCisgICAgICAgIGlmIGFyZ3ZhbCBpcyBfVU5TUEVDSUZJRUQ6CisgICAgICAgICAgICBtc2cgPSAnJXMgbm90IGZvdW5kIGluIGJ5dGVjb2RlOlxuJXMnICUgKG9wbmFtZSwgZGlzYXNzZW1ibHkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtc2cgPSAnKCVzLCVyKSBub3QgZm91bmQgaW4gYnl0ZWNvZGU6XG4lcycKKyAgICAgICAgICAgIG1zZyA9IG1zZyAlIChvcG5hbWUsIGFyZ3ZhbCwgZGlzYXNzZW1ibHkpCisgICAgICAgIHNlbGYuZmFpbChtc2cpCisKKyAgICBkZWYgYXNzZXJ0Tm90SW5CeXRlY29kZShzZWxmLCB4LCBvcG5hbWUsIGFyZ3ZhbD1fVU5TUEVDSUZJRUQpOgorICAgICAgICAiIiJUaHJvd3MgQXNzZXJ0aW9uRXJyb3IgaWYgb3AgaXMgZm91bmQiIiIKKyAgICAgICAgZm9yIGluc3RyIGluIGRpcy5nZXRfaW5zdHJ1Y3Rpb25zKHgpOgorICAgICAgICAgICAgaWYgaW5zdHIub3BuYW1lID09IG9wbmFtZToKKyAgICAgICAgICAgICAgICBkaXNhc3NlbWJseSA9IHNlbGYuZ2V0X2Rpc2Fzc2VtYmx5X2FzX3N0cmluZyhjbykKKyAgICAgICAgICAgICAgICBpZiBvcGFyZ3ZhbCBpcyBfVU5TUEVDSUZJRUQ6CisgICAgICAgICAgICAgICAgICAgIG1zZyA9ICclcyBvY2N1cnMgaW4gYnl0ZWNvZGU6XG4lcycgJSAob3BuYW1lLCBkaXNhc3NlbWJseSkKKyAgICAgICAgICAgICAgICBlbGlmIGluc3RyLmFyZ3ZhbCA9PSBhcmd2YWw6CisgICAgICAgICAgICAgICAgICAgIG1zZyA9ICcoJXMsJXIpIG9jY3VycyBpbiBieXRlY29kZTpcbiVzJworICAgICAgICAgICAgICAgICAgICBtc2cgPSBtc2cgJSAob3BuYW1lLCBhcmd2YWwsIGRpc2Fzc2VtYmx5KQorICAgICAgICAgICAgICAgIHNlbGYuZmFpbChtc2cpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9jb2RpbmcyMDczMS5weSBiL0xpYi90ZXN0L2NvZGluZzIwNzMxLnB5CmluZGV4IGNhNDk2MmUuLmIwZTIyN2EgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2NvZGluZzIwNzMxLnB5CisrKyBiL0xpYi90ZXN0L2NvZGluZzIwNzMxLnB5CkBAIC0xLDQgKzEsNCBAQAotI2NvZGluZzpsYXRpbjEKLQotCi0KKyNjb2Rpbmc6bGF0aW4xDQorDQorDQorDQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGF0ZXRpbWV0ZXN0ZXIucHkgYi9MaWIvdGVzdC9kYXRldGltZXRlc3Rlci5weQppbmRleCBhYjU1NDc2Li4yODliMGNhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kYXRldGltZXRlc3Rlci5weQorKysgYi9MaWIvdGVzdC9kYXRldGltZXRlc3Rlci5weQpAQCAtMyw4ICszLDEwIEBACiBTZWUgaHR0cDovL3d3dy56b3BlLm9yZy9NZW1iZXJzL2ZkcmFrZS9EYXRlVGltZVdpa2kvVGVzdENhc2VzCiAiIiIKIAoraW1wb3J0IGNvcHkKIGltcG9ydCBzeXMKIGltcG9ydCBwaWNrbGUKK2ltcG9ydCByYW5kb20KIGltcG9ydCB1bml0dGVzdAogCiBmcm9tIG9wZXJhdG9yIGltcG9ydCBsdCwgbGUsIGd0LCBnZSwgZXEsIG5lLCB0cnVlZGl2LCBmbG9vcmRpdiwgbW9kCkBAIC00OSw2ICs1MSwzMyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGV0aW1lLk1JTllFQVIsIDEpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0ZXRpbWUuTUFYWUVBUiwgOTk5OSkKIAorICAgIGRlZiB0ZXN0X2RpdmlkZV9hbmRfcm91bmQoc2VsZik6CisgICAgICAgIGlmICdfRmFzdCcgaW4gc3RyKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGRhciA9IGRhdGV0aW1lX21vZHVsZS5fZGl2aWRlX2FuZF9yb3VuZAorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGFyKC0xMCwgLTMpLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhcig1LCAtMiksIC0yKQorCisgICAgICAgICMgZm91ciBjYXNlczogKDIgc2lnbnMgb2YgYSkgeCAoMiBzaWducyBvZiBiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhcig3LCAzKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXIoLTcsIDMpLCAtMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXIoNywgLTMpLCAtMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXIoLTcsIC0zKSwgMikKKworICAgICAgICAjIHRpZXMgdG8gZXZlbiAtIGVpZ2h0IGNhc2VzOgorICAgICAgICAjICgyIHNpZ25zIG9mIGEpIHggKDIgc2lnbnMgb2YgYikgeCAoZXZlbiAvIG9kZCBxdW90aWVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXIoMTAsIDQpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhcigtMTAsIDQpLCAtMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXIoMTAsIC00KSwgLTIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGFyKC0xMCwgLTQpLCAyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGFyKDYsIDQpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhcigtNiwgNCksIC0yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhcig2LCAtNCksIC0yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhcigtNiwgLTQpLCAyKQorCisKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIHR6aW5mbyB0ZXN0cwogCkBAIC03Niw4ICsxMDUsMTggQEAKICAgICBkZWYgX19pbml0X18oc2VsZiwgb2Zmc2V0PU5vbmUsIG5hbWU9Tm9uZSwgZHN0b2Zmc2V0PU5vbmUpOgogICAgICAgICBGaXhlZE9mZnNldC5fX2luaXRfXyhzZWxmLCBvZmZzZXQsIG5hbWUsIGRzdG9mZnNldCkKIAorY2xhc3MgX1RaSW5mbyh0emluZm8pOgorICAgIGRlZiB1dGNvZmZzZXQoc2VsZiwgZGF0ZXRpbWVfbW9kdWxlKToKKyAgICAgICAgcmV0dXJuIHJhbmRvbS5yYW5kb20oKQorCiBjbGFzcyBUZXN0VFpJbmZvKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAorICAgIGRlZiB0ZXN0X3JlZmNudF9jcmFzaF9idWdfMjIwNDQoc2VsZik6CisgICAgICAgIHR6MSA9IF9UWkluZm8oKQorICAgICAgICBkdDEgPSBkYXRldGltZSgyMDE0LCA3LCAyMSwgMTEsIDMyLCAzLCAwLCB0ejEpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGR0MS51dGNvZmZzZXQoKQorCiAgICAgZGVmIHRlc3Rfbm9uX2Fic3RyYWN0bmVzcyhzZWxmKToKICAgICAgICAgIyBJbiBvcmRlciB0byBhbGxvdyBzdWJjbGFzc2VzIHRvIGdldCBwaWNrbGVkLCB0aGUgQyBpbXBsZW1lbnRhdGlvbgogICAgICAgICAjIHdhc24ndCBhYmxlIHRvIGdldCBhd2F5IHdpdGggaGF2aW5nIF9faW5pdF9fIHJhaXNlCkBAIC0xNDIsNiArMTgxLDI5IEBACiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZXJpdmVkLnV0Y29mZnNldChOb25lKSwgb2Zmc2V0KQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVyaXZlZC50em5hbWUoTm9uZSksIG9uYW1lKQogCisgICAgZGVmIHRlc3RfaXNzdWUyMzYwMChzZWxmKToKKyAgICAgICAgRFNURElGRiA9IERTVE9GRlNFVCA9IHRpbWVkZWx0YShob3Vycz0xKQorCisgICAgICAgIGNsYXNzIFVLU3VtbWVyVGltZSh0emluZm8pOgorICAgICAgICAgICAgIiIiU2ltcGxlIHRpbWUgem9uZSB3aGljaCBwcmV0ZW5kcyB0byBhbHdheXMgYmUgaW4gc3VtbWVyIHRpbWUsIHNpbmNlCisgICAgICAgICAgICAgICAgdGhhdCdzIHdoYXQgc2hvd3MgdGhlIGZhaWx1cmUuCisgICAgICAgICAgICAiIiIKKworICAgICAgICAgICAgZGVmIHV0Y29mZnNldChzZWxmLCBkdCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIERTVE9GRlNFVAorCisgICAgICAgICAgICBkZWYgZHN0KHNlbGYsIGR0KToKKyAgICAgICAgICAgICAgICByZXR1cm4gRFNURElGRgorCisgICAgICAgICAgICBkZWYgdHpuYW1lKHNlbGYsIGR0KToKKyAgICAgICAgICAgICAgICByZXR1cm4gJ1VLU3VtbWVyVGltZScKKworICAgICAgICB0eiA9IFVLU3VtbWVyVGltZSgpCisgICAgICAgIHUgPSBkYXRldGltZSgyMDE0LCA0LCAyNiwgMTIsIDEsIHR6aW5mbz10eikKKyAgICAgICAgdCA9IHR6LmZyb211dGModSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0IC0gdC51dGNvZmZzZXQoKSwgdSkKKworCiBjbGFzcyBUZXN0VGltZVpvbmUodW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHNldFVwKHNlbGYpOgpAQCAtMTYyLDcgKzIyNCw2IEBACiAgICAgICAgICAgICB0enJlcCA9IHJlcHIodHopCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR6LCBldmFsKHR6cmVwKSkKIAotCiAgICAgZGVmIHRlc3RfY2xhc3NfbWVtYmVycyhzZWxmKToKICAgICAgICAgbGltaXQgPSB0aW1lZGVsdGEoaG91cnM9MjMsIG1pbnV0ZXM9NTkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGltZXpvbmUudXRjLnV0Y29mZnNldChOb25lKSwgWkVSTykKQEAgLTI0OSw2ICszMTAsMzMgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHouZHN0KHQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0LnJlcGxhY2UodHppbmZvPXR6KS5kc3QoKSkKIAorICAgIGRlZiB0ZXN0X3BpY2tsZShzZWxmKToKKyAgICAgICAgZm9yIHR6IGluIHNlbGYuQUNEVCwgc2VsZi5FU1QsIHRpbWV6b25lLm1pbiwgdGltZXpvbmUubWF4OgorICAgICAgICAgICAgZm9yIHBpY2tsZXIsIHVucGlja2xlciwgcHJvdG8gaW4gcGlja2xlX2Nob2ljZXM6CisgICAgICAgICAgICAgICAgdHpfY29weSA9IHVucGlja2xlci5sb2FkcyhwaWNrbGVyLmR1bXBzKHR6LCBwcm90bykpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0el9jb3B5LCB0eikKKyAgICAgICAgdHogPSB0aW1lem9uZS51dGMKKyAgICAgICAgZm9yIHBpY2tsZXIsIHVucGlja2xlciwgcHJvdG8gaW4gcGlja2xlX2Nob2ljZXM6CisgICAgICAgICAgICB0el9jb3B5ID0gdW5waWNrbGVyLmxvYWRzKHBpY2tsZXIuZHVtcHModHosIHByb3RvKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXModHpfY29weSwgdHopCisKKyAgICBkZWYgdGVzdF9jb3B5KHNlbGYpOgorICAgICAgICBmb3IgdHogaW4gc2VsZi5BQ0RULCBzZWxmLkVTVCwgdGltZXpvbmUubWluLCB0aW1lem9uZS5tYXg6CisgICAgICAgICAgICB0el9jb3B5ID0gY29weS5jb3B5KHR6KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0el9jb3B5LCB0eikKKyAgICAgICAgdHogPSB0aW1lem9uZS51dGMKKyAgICAgICAgdHpfY29weSA9IGNvcHkuY29weSh0eikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0el9jb3B5LCB0eikKKworICAgIGRlZiB0ZXN0X2RlZXBjb3B5KHNlbGYpOgorICAgICAgICBmb3IgdHogaW4gc2VsZi5BQ0RULCBzZWxmLkVTVCwgdGltZXpvbmUubWluLCB0aW1lem9uZS5tYXg6CisgICAgICAgICAgICB0el9jb3B5ID0gY29weS5kZWVwY29weSh0eikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHpfY29weSwgdHopCisgICAgICAgIHR6ID0gdGltZXpvbmUudXRjCisgICAgICAgIHR6X2NvcHkgPSBjb3B5LmRlZXBjb3B5KHR6KQorICAgICAgICBzZWxmLmFzc2VydElzKHR6X2NvcHksIHR6KQorCisKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIEJhc2UgY2xhc3MgZm9yIHRlc3RpbmcgYSBwYXJ0aWN1bGFyIGFzcGVjdCBvZiB0aW1lZGVsdGEsIHRpbWUsIGRhdGUgYW5kCiAjIGRhdGV0aW1lIGNvbXBhcmlzb25zLgpAQCAtMzcxLDYgKzQ1OSwxMCBAQAogICAgICAgICBlcSgoLTMqdXMpICogMC41LCAtMip1cykKICAgICAgICAgZXEoKC01KnVzKSAqIDAuNSwgLTIqdXMpCiAKKyAgICAgICAgIyBJc3N1ZSAjMjM1MjEKKyAgICAgICAgZXEodGQoc2Vjb25kcz0xKSAqIDAuMTIzNDU2LCB0ZChtaWNyb3NlY29uZHM9MTIzNDU2KSkKKyAgICAgICAgZXEodGQoc2Vjb25kcz0xKSAqIDAuNjExMjI5NSwgdGQobWljcm9zZWNvbmRzPTYxMTIyOSkpCisKICAgICAgICAgIyBEaXZpc2lvbiBieSBpbnQgYW5kIGZsb2F0CiAgICAgICAgIGVxKCgzKnVzKSAvIDIsIDIqdXMpCiAgICAgICAgIGVxKCg1KnVzKSAvIDIsIDIqdXMpCkBAIC0zODUsNiArNDc3LDkgQEAKICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoLTEwLCAxMCk6CiAgICAgICAgICAgICBlcSgoaSp1cy8tMykvL3VzLCByb3VuZChpLy0zKSkKIAorICAgICAgICAjIElzc3VlICMyMzUyMQorICAgICAgICBlcSh0ZChzZWNvbmRzPTEpIC8gKDEgLyAwLjYxMTIyOTUpLCB0ZChtaWNyb3NlY29uZHM9NjExMjI5KSkKKwogICAgICAgICAjIElzc3VlICMxMTU3NgogICAgICAgICBlcSh0ZCg5OTk5OTk5OTksIDg2Mzk5LCA5OTk5OTkpIC0gdGQoOTk5OTk5OTk5LCA4NjM5OSwgOTk5OTk4KSwKICAgICAgICAgICAgdGQoMCwgMCwgMSkpCkBAIC02MDUsOCArNzAwLDE2IEBACiAgICAgICAgICMgU2luZ2xlLWZpZWxkIHJvdW5kaW5nLgogICAgICAgICBlcSh0ZChtaWxsaXNlY29uZHM9MC40LzEwMDApLCB0ZCgwKSkgICAgIyByb3VuZHMgdG8gMAogICAgICAgICBlcSh0ZChtaWxsaXNlY29uZHM9LTAuNC8xMDAwKSwgdGQoMCkpICAgICMgcm91bmRzIHRvIDAKKyAgICAgICAgZXEodGQobWlsbGlzZWNvbmRzPTAuNS8xMDAwKSwgdGQobWljcm9zZWNvbmRzPTApKQorICAgICAgICBlcSh0ZChtaWxsaXNlY29uZHM9LTAuNS8xMDAwKSwgdGQobWljcm9zZWNvbmRzPS0wKSkKICAgICAgICAgZXEodGQobWlsbGlzZWNvbmRzPTAuNi8xMDAwKSwgdGQobWljcm9zZWNvbmRzPTEpKQogICAgICAgICBlcSh0ZChtaWxsaXNlY29uZHM9LTAuNi8xMDAwKSwgdGQobWljcm9zZWNvbmRzPS0xKSkKKyAgICAgICAgZXEodGQobWlsbGlzZWNvbmRzPTEuNS8xMDAwKSwgdGQobWljcm9zZWNvbmRzPTIpKQorICAgICAgICBlcSh0ZChtaWxsaXNlY29uZHM9LTEuNS8xMDAwKSwgdGQobWljcm9zZWNvbmRzPS0yKSkKKyAgICAgICAgZXEodGQoc2Vjb25kcz0wLjUvMTAqKjYpLCB0ZChtaWNyb3NlY29uZHM9MCkpCisgICAgICAgIGVxKHRkKHNlY29uZHM9LTAuNS8xMCoqNiksIHRkKG1pY3Jvc2Vjb25kcz0tMCkpCisgICAgICAgIGVxKHRkKHNlY29uZHM9MS8yKio3KSwgdGQobWljcm9zZWNvbmRzPTc4MTIpKQorICAgICAgICBlcSh0ZChzZWNvbmRzPS0xLzIqKjcpLCB0ZChtaWNyb3NlY29uZHM9LTc4MTIpKQogCiAgICAgICAgICMgUm91bmRpbmcgZHVlIHRvIGNvbnRyaWJ1dGlvbnMgZnJvbSBtb3JlIHRoYW4gb25lIGZpZWxkLgogICAgICAgICB1c19wZXJfaG91ciA9IDM2MDBlNgpAQCAtNjE5LDYgKzcyMiwxMCBAQAogICAgICAgICBlcSh0ZChob3Vycz0tLjIvdXNfcGVyX2hvdXIpLCB0ZCgwKSkKICAgICAgICAgZXEodGQoZGF5cz0tLjQvdXNfcGVyX2RheSwgaG91cnM9LS4yL3VzX3Blcl9ob3VyKSwgdGQobWljcm9zZWNvbmRzPS0xKSkKIAorICAgICAgICAjIFRlc3QgZm9yIGEgcGF0Y2ggaW4gSXNzdWUgODg2MAorICAgICAgICBlcSh0ZChtaWNyb3NlY29uZHM9MC41KSwgMC41KnRkKG1pY3Jvc2Vjb25kcz0xLjApKQorICAgICAgICBlcSh0ZChtaWNyb3NlY29uZHM9MC41KS8vdGQucmVzb2x1dGlvbiwgMC41KnRkLnJlc29sdXRpb24vL3RkLnJlc29sdXRpb24pCisKICAgICBkZWYgdGVzdF9tYXNzaXZlX25vcm1hbGl6YXRpb24oc2VsZik6CiAgICAgICAgIHRkID0gdGltZWRlbHRhKG1pY3Jvc2Vjb25kcz0tMSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgodGQuZGF5cywgdGQuc2Vjb25kcywgdGQubWljcm9zZWNvbmRzKSwKQEAgLTE2NjcsMTEgKzE3NzQsMTIgQEAKIAogICAgIGRlZiB0ZXN0X21vcmVfcGlja2xpbmcoc2VsZik6CiAgICAgICAgIGEgPSBzZWxmLnRoZWNsYXNzKDIwMDMsIDIsIDcsIDE2LCA0OCwgMzcsIDQ0NDExNikKLSAgICAgICAgcyA9IHBpY2tsZS5kdW1wcyhhKQotICAgICAgICBiID0gcGlja2xlLmxvYWRzKHMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi55ZWFyLCAyMDAzKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIubW9udGgsIDIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5kYXksIDcpCisgICAgICAgIGZvciBwcm90byBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgcyA9IHBpY2tsZS5kdW1wcyhhLCBwcm90bykKKyAgICAgICAgICAgIGIgPSBwaWNrbGUubG9hZHMocykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi55ZWFyLCAyMDAzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLm1vbnRoLCAyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLmRheSwgNykKIAogICAgIGRlZiB0ZXN0X3BpY2tsaW5nX3N1YmNsYXNzX2RhdGV0aW1lKHNlbGYpOgogICAgICAgICBhcmdzID0gNiwgNywgMjMsIDIwLCA1OSwgMSwgNjQqKjIKQEAgLTE3NzQsMTIgKzE4ODIsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgdHppbmZvPXRpbWV6b25lKHRpbWVkZWx0YShob3Vycz0tNSksICdFU1QnKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnRpbWVzdGFtcCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgIDE4MDAwICsgMzYwMCArIDIqNjAgKyAzICsgNCoxZS02KQorCiAgICAgZGVmIHRlc3RfbWljcm9zZWNvbmRfcm91bmRpbmcoc2VsZik6CiAgICAgICAgIGZvciBmdHMgaW4gW3NlbGYudGhlY2xhc3MuZnJvbXRpbWVzdGFtcCwKICAgICAgICAgICAgICAgICAgICAgc2VsZi50aGVjbGFzcy51dGNmcm9tdGltZXN0YW1wXToKICAgICAgICAgICAgIHplcm8gPSBmdHMoMCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemVyby5zZWNvbmQsIDApCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHplcm8ubWljcm9zZWNvbmQsIDApCisgICAgICAgICAgICBvbmUgPSBmdHMoMWUtNikKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBtaW51c19vbmUgPSBmdHMoLTFlLTYpCiAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKQEAgLTE3OTAsMjIgKzE5MDAsMjggQEAKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1pbnVzX29uZS5taWNyb3NlY29uZCwgOTk5OTk5KQogCiAgICAgICAgICAgICAgICAgdCA9IGZ0cygtMWUtOCkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQsIG1pbnVzX29uZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQsIHplcm8pCiAgICAgICAgICAgICAgICAgdCA9IGZ0cygtOWUtNykKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQsIG1pbnVzX29uZSkKICAgICAgICAgICAgICAgICB0ID0gZnRzKC0xZS03KQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodCwgbWludXNfb25lKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodCwgemVybykKKyAgICAgICAgICAgICAgICB0ID0gZnRzKC0xLzIqKjcpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnNlY29uZCwgNTkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Lm1pY3Jvc2Vjb25kLCA5OTIxODgpCiAKICAgICAgICAgICAgIHQgPSBmdHMoMWUtNykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodCwgemVybykKICAgICAgICAgICAgIHQgPSBmdHMoOWUtNykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodCwgemVybykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodCwgb25lKQogICAgICAgICAgICAgdCA9IGZ0cygwLjk5OTk5OTQ5KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnNlY29uZCwgMCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5taWNyb3NlY29uZCwgOTk5OTk5KQogICAgICAgICAgICAgdCA9IGZ0cygwLjk5OTk5OTkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuc2Vjb25kLCAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Lm1pY3Jvc2Vjb25kLCAwKQorICAgICAgICAgICAgdCA9IGZ0cygxLzIqKjcpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuc2Vjb25kLCAwKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Lm1pY3Jvc2Vjb25kLCA5OTk5OTkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQubWljcm9zZWNvbmQsIDc4MTIpCiAKICAgICBkZWYgdGVzdF9pbnNhbmVfZnJvbXRpbWVzdGFtcChzZWxmKToKICAgICAgICAgIyBJdCdzIHBvc3NpYmxlIHRoYXQgc29tZSBwbGF0Zm9ybSBtYXBzIHRpbWVfdCB0byBkb3VibGUsCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZXhwLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZXhwLmRlY1Rlc3QKaW5kZXggMDIxYjQ3OC4uNmE3YWYyMyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2V4cC5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9leHAuZGVjVGVzdApAQCAtMTksNyArMTksNyBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogdmVyc2lvbjogMi41OQ0KIA0KLS0tIFRlc3RzIG9mIHRoZSBleHBvbmVudGlhbCBmdW50aW9uLiAgQ3VycmVudGx5IGFsbCB0ZXN0Y2FzZXMgaGVyZQ0KKy0tIFRlc3RzIG9mIHRoZSBleHBvbmVudGlhbCBmdW5jdGlvbi4gIEN1cnJlbnRseSBhbGwgdGVzdGNhc2VzIGhlcmUNCiAtLSBzaG93IHJlc3VsdHMgd2hpY2ggYXJlIGNvcnJlY3RseSByb3VuZGVkICh3aXRoaW4gPD0gMC41IHVscCkuDQogDQogZXh0ZW5kZWQ6ICAgIDENCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZm1hLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZm1hLmRlY1Rlc3QKaW5kZXggYjBhODFjYS4uMGIxODhmYSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2ZtYS5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9mbWEuZGVjVGVzdApAQCAtMTQ4LDcgKzE0OCw3IEBACiBmbWF4MjAxOSBmbWEgLTkuOTk5OTk5ICA5Ljk5OTk5OSAgMEUrOTk5OTk5ICAtPiAtMTAwLjAwMCBJbmV4YWN0IFJvdW5kZWQNCiBmbWF4MjAyMCBmbWEgLTkuOTk5OTk5IC05Ljk5OTk5OSAgMEUrOTk5OTk5ICAtPiAgMTAwLjAwMCBJbmV4YWN0IFJvdW5kZWQNCiANCi0tLSAxOTk5LjEyLjIxOiBuZXh0IG9uZSBpcyBhIGVkZ2UgY2FzZSBpZiBpbnRlcm1lZGlhdGUgbG9uZ3MgYXJlIHVzZWQNCistLSAxOTk5LjEyLjIxOiBuZXh0IG9uZSBpcyBhbiBlZGdlIGNhc2UgaWYgaW50ZXJtZWRpYXRlIGxvbmdzIGFyZSB1c2VkDQogcHJlY2lzaW9uOiAxNQ0KIGZtYXgyMDU5IGZtYSA5OTk5OTk5OTk5OTkgOTc2NTYyNSAgMEUrOTk5OTk5ICAtPiA5Ljc2NTYyNDk5OTk5MDIzRSsxOCBJbmV4YWN0IFJvdW5kZWQNCiBwcmVjaXNpb246IDMwDQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL211bHRpcGx5LmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvbXVsdGlwbHkuZGVjVGVzdAppbmRleCA2YTIzZDVhLi5lOGJkNzdhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvbXVsdGlwbHkuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvbXVsdGlwbHkuZGVjVGVzdApAQCAtNDksNyArNDksNyBAQAogbXVseDAxOSBtdWx0aXBseSAtOS45OTk5OTk5OTkgIDkuOTk5OTk5OTk5IC0+IC0xMDAuMDAwIEluZXhhY3QgUm91bmRlZAogbXVseDAyMCBtdWx0aXBseSAtOS45OTk5OTk5OTkgLTkuOTk5OTk5OTk5IC0+ICAxMDAuMDAwIEluZXhhY3QgUm91bmRlZAogCi0tLSAxOTk5LjEyLjIxOiBuZXh0IG9uZSBpcyBhIGVkZ2UgY2FzZSBpZiBpbnRlcm1lZGlhdGUgbG9uZ3MgYXJlIHVzZWQKKy0tIDE5OTkuMTIuMjE6IG5leHQgb25lIGlzIGFuIGVkZ2UgY2FzZSBpZiBpbnRlcm1lZGlhdGUgbG9uZ3MgYXJlIHVzZWQKIHByZWNpc2lvbjogMTUKIG11bHgwNTkgbXVsdGlwbHkgOTk5OTk5OTk5OTk5IDk3NjU2MjUgLT4gOS43NjU2MjQ5OTk5OTAyM0UrMTggSW5leGFjdCBSb3VuZGVkCiBwcmVjaXNpb246IDMwCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kaDEwMjQucGVtIGIvTGliL3Rlc3QvZGgxMDI0LnBlbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzkxMTc2Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvZGgxMDI0LnBlbQpAQCAtMCwwICsxLDcgQEAKKy0tLS0tQkVHSU4gREggUEFSQU1FVEVSUy0tLS0tCitNSUdIQW9HQkFJYnp3MXM5Q1Q4U1Y1eXY2TDdlc2RBZFpZWmpQaTNxV0ZzNjFDWVRGRlFuZjJzL2QwOU5ZYUp0CitycnZKaEl6V2F2cW51ZTcxcVhDZjgzL0ozbnozRkV3VVUvTDBtR3loZVZic1NIaUk2NHdVbzN1NTB3SzVJZ28wCitSTnMvTEQwaXJzN20waWNaLy9oaWphZlRVK0pPQml1QTh6TUkrb1pmVTdCR3VjOVhyVXByQWdFQworLS0tLS1FTkQgREggUEFSQU1FVEVSUy0tLS0tCisKK0dlbmVyYXRlZCB3aXRoOiBvcGVuc3NsIGRocGFyYW0gLW91dCBkaDEwMjQucGVtICAxMDI0CmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kaDUxMi5wZW0gYi9MaWIvdGVzdC9kaDUxMi5wZW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwMGQxNmMuLjAwMDAwMDAKLS0tIGEvTGliL3Rlc3QvZGg1MTIucGVtCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi0tLS0tLUJFR0lOIERIIFBBUkFNRVRFUlMtLS0tLQotTUVZQ1FRRDFLdjg4NGJFcFFCZ1JqWHlFcHdweTFvYkVBeG5JQnlsNnlwVU0yWmFmcTlBS1VKc0NSdE1JUFdhawotWFVHZm5IeTlpVXNpR1NhNnE2SmV3MVhwS2dWZkFnRUMKLS0tLS0tRU5EIERIIFBBUkFNRVRFUlMtLS0tLQotCi1UaGVzZSBhcmUgdGhlIDUxMiBiaXQgREggcGFyYW1ldGVycyBmcm9tICJBc3NpZ25lZCBOdW1iZXIgZm9yIFNLSVAgUHJvdG9jb2xzIgotKGh0dHA6Ly93d3cuc2tpcC12cG4ub3JnL3NwZWMvbnVtYmVycy5odG1sKS4KLVNlZSB0aGVyZSBmb3IgaG93IHRoZXkgd2VyZSBnZW5lcmF0ZWQuCi1Ob3RlIHRoYXQgZyBpcyBub3QgYSBnZW5lcmF0b3IsIGJ1dCB0aGlzIGlzIG5vdCBhIHByb2JsZW0gc2luY2UgcCBpcyBhIHNhZmUgcHJpbWUuCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9maW5hbF9hLnB5IGIvTGliL3Rlc3QvZmluYWxfYS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTBlZTg4Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvZmluYWxfYS5weQpAQCAtMCwwICsxLDE5IEBACisiIiIKK0ZvZGRlciBmb3IgbW9kdWxlIGZpbmFsaXphdGlvbiB0ZXN0cyBpbiB0ZXN0X21vZHVsZS4KKyIiIgorCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgdGVzdC5maW5hbF9iCisKK3ggPSAnYScKKworY2xhc3MgQzoKKyAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgIyBJbnNwZWN0IG1vZHVsZSBnbG9iYWxzIGFuZCBidWlsdGlucworICAgICAgICBwcmludCgieCA9IiwgeCkKKyAgICAgICAgcHJpbnQoImZpbmFsX2IueCA9IiwgdGVzdC5maW5hbF9iLngpCisgICAgICAgIHByaW50KCJzaHV0aWwucm10cmVlID0iLCBnZXRhdHRyKHNodXRpbC5ybXRyZWUsICdfX25hbWVfXycsIE5vbmUpKQorICAgICAgICBwcmludCgibGVuID0iLCBnZXRhdHRyKGxlbiwgJ19fbmFtZV9fJywgTm9uZSkpCisKK2MgPSBDKCkKK191bmRlcnNjb3JlZCA9IEMoKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZmluYWxfYi5weSBiL0xpYi90ZXN0L2ZpbmFsX2IucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzIyOGQ4MgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L2ZpbmFsX2IucHkKQEAgLTAsMCArMSwxOSBAQAorIiIiCitGb2RkZXIgZm9yIG1vZHVsZSBmaW5hbGl6YXRpb24gdGVzdHMgaW4gdGVzdF9tb2R1bGUuCisiIiIKKworaW1wb3J0IHNodXRpbAoraW1wb3J0IHRlc3QuZmluYWxfYQorCit4ID0gJ2InCisKK2NsYXNzIEM6CisgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgICMgSW5zcGVjdCBtb2R1bGUgZ2xvYmFscyBhbmQgYnVpbHRpbnMKKyAgICAgICAgcHJpbnQoInggPSIsIHgpCisgICAgICAgIHByaW50KCJmaW5hbF9hLnggPSIsIHRlc3QuZmluYWxfYS54KQorICAgICAgICBwcmludCgic2h1dGlsLnJtdHJlZSA9IiwgZ2V0YXR0cihzaHV0aWwucm10cmVlLCAnX19uYW1lX18nLCBOb25lKSkKKyAgICAgICAgcHJpbnQoImxlbiA9IiwgZ2V0YXR0cihsZW4sICdfX25hbWVfXycsIE5vbmUpKQorCitjID0gQygpCitfdW5kZXJzY29yZWQgPSBDKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2Zvcmtfd2FpdC5weSBiL0xpYi90ZXN0L2Zvcmtfd2FpdC5weQppbmRleCA4ODUyN2RmLi4xOWI1NGVjIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9mb3JrX3dhaXQucHkKKysrIGIvTGliL3Rlc3QvZm9ya193YWl0LnB5CkBAIC0yOCw3ICsyOCw3IEBACiAgICAgICAgICAgICBzZWxmLmFsaXZlW2lkXSA9IG9zLmdldHBpZCgpCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgdGltZS5zbGVlcChTSE9SVFNMRUVQKQotICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICBwYXNzCiAKICAgICBkZWYgd2FpdF9pbXBsKHNlbGYsIGNwaWQpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3Qva2V5Y2VydDMucGVtIGIvTGliL3Rlc3Qva2V5Y2VydDMucGVtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViZmE2MmMKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC9rZXljZXJ0My5wZW0KQEAgLTAsMCArMSw3MyBAQAorLS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCitNSUlDZGdJQkFEQU5CZ2txaGtpRzl3MEJBUUVGQUFTQ0FtQXdnZ0pjQWdFQUFvR0JBTUxnRDBrQUtEYjVjRnlQCitqYndOZlI1Q3Rld2RYQytrTVhBV0Q4REx4aVRUdmhNVzdxVm5sd09tMzZtWmxzekhLdnNSZjA1bFQ0cGVnaUZNCis5ejJqMU9sYU4rY2kvWDdOVTIyVE5ONmNyWVNpTjc3RmpZSlA0NjRqODc2bmRTeHlEK3J6eXMzODZUKzFyMWFaCithZ2dFZGtqMVRzU3N2MXpXSVlLbFBJamx2aHV4QWdNQkFBRUNnWUEwYUgrVDJWZjNXT1B2OEtka2NKZzZnQ1JlCit5SktYT1dnV1JjaWN4L0NVek9Fc1R4bUZJRFBMeHFBV0Ezazd2MEIrM3ZqR3c1WTlseWNWLzVYcVhOb1FJMTRqCit5MDlpTnN1bWRzMTN1NUFLa0dkVEpuWmhRN1VLZG9WSGZ1UDQ0WmRPdi9ySjUvVkQ2RjR6V3l3cGU5MHBjYksrCitBV0RWdHVzZ0dRQlNpZUVsMVFKQkFPeVZyVUc1bDJ5b1VCdGQyenIva2lHbS9EWXlYbEl0aFFPL0EzL0xuZ0RXCis1L3lkR3hWc1Q3bEFWT2dDc29UKzBMNGVmVGg5MFBqelc4TFBRclBCV1ZNQ1FRRFMzaC9GdFlZZDVsZnorRk5MCis5Q0VlMUYxdzlsOFA3NDl1TlVEMGczMTd6djF0YXRJcVZDc1FXSGZWSE5kVnZmUSt2U0Z3MzhPT1JPMDBYcXM5CisxR0pyQWtCa29YWEVreENab3k0UHRlaGVPLzhJV1dMR0dyNkw3ZGk2TXpGbDFsSXF3VDZEOEw5b2FWMnZ5bkZUCitEbktvcDBwYTA5VW5oanl3NTdLTU5tU0UyU1VKQWtFQXJsb1RFenBnUm1DcTRJSzIvTnBDZUdkSFM1dXFSbGJoCisxVklhL3hHcHM3RVdRbDVNbjhzd1FEZWwvWVAzV0dIVGpmeDdwZ1NlZ1Fma3lhUnRHcFo5T1FKQWE5VnVtajhtCitKQUF0STBCbmdhOGhnUXg3QmhUUVk0Q2FkRHh5aVJHT0dZaHdVellWQ3FrYjJzYlZSSDlIbndVYUpUN2NXQlkzCitSbkpkSE9NWFdlbTcvdz09CistLS0tLUVORCBQUklWQVRFIEtFWS0tLS0tCitDZXJ0aWZpY2F0ZToKKyAgICBEYXRhOgorICAgICAgICBWZXJzaW9uOiAxICgweDApCisgICAgICAgIFNlcmlhbCBOdW1iZXI6IDEyNzIzMzQyNjEyNzIxNDQzMjgxICgweGIwOTI2NGIxZjJkYTIxZDEpCisgICAgU2lnbmF0dXJlIEFsZ29yaXRobTogc2hhMVdpdGhSU0FFbmNyeXB0aW9uCisgICAgICAgIElzc3VlcjogQz1YWSwgTz1QeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiBDQSwgQ049b3VyLWNhLXNlcnZlcgorICAgICAgICBWYWxpZGl0eQorICAgICAgICAgICAgTm90IEJlZm9yZTogSmFuICA0IDE5OjQ3OjA3IDIwMTMgR01UCisgICAgICAgICAgICBOb3QgQWZ0ZXIgOiBOb3YgMTMgMTk6NDc6MDcgMjAyMiBHTVQKKyAgICAgICAgU3ViamVjdDogQz1YWSwgTD1DYXN0bGUgQW50aHJheCwgTz1QeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiwgQ049bG9jYWxob3N0CisgICAgICAgIFN1YmplY3QgUHVibGljIEtleSBJbmZvOgorICAgICAgICAgICAgUHVibGljIEtleSBBbGdvcml0aG06IHJzYUVuY3J5cHRpb24KKyAgICAgICAgICAgICAgICBQdWJsaWMtS2V5OiAoMTAyNCBiaXQpCisgICAgICAgICAgICAgICAgTW9kdWx1czoKKyAgICAgICAgICAgICAgICAgICAgMDA6YzI6ZTA6MGY6NDk6MDA6Mjg6MzY6Zjk6NzA6NWM6OGY6OGQ6YmM6MGQ6CisgICAgICAgICAgICAgICAgICAgIDdkOjFlOjQyOmI1OmVjOjFkOjVjOjJmOmE0OjMxOjcwOjE2OjBmOmMwOmNiOgorICAgICAgICAgICAgICAgICAgICBjNjoyNDpkMzpiZToxMzoxNjplZTphNTo2Nzo5NzowMzphNjpkZjphOTo5OToKKyAgICAgICAgICAgICAgICAgICAgOTY6Y2M6Yzc6MmE6ZmI6MTE6N2Y6NGU6NjU6NGY6OGE6NWU6ODI6MjE6NGM6CisgICAgICAgICAgICAgICAgICAgIGY3OjNkOmEzOmQ0OmU5OjVhOjM3OmU3OjIyOmZkOjdlOmNkOjUzOjZkOjkzOgorICAgICAgICAgICAgICAgICAgICAzNDpkZTo5YzphZDo4NDphMjozNzpiZTpjNTo4ZDo4Mjo0ZjplMzphZToyMzoKKyAgICAgICAgICAgICAgICAgICAgZjM6YmU6YTc6NzU6MmM6NzI6MGY6ZWE6ZjM6Y2E6Y2Q6ZmM6ZTk6M2Y6YjU6CisgICAgICAgICAgICAgICAgICAgIGFmOjU2Ojk5OjZhOjA4OjA0Ojc2OjQ4OmY1OjRlOmM0OmFjOmJmOjVjOmQ2OgorICAgICAgICAgICAgICAgICAgICAyMTo4MjphNTozYzo4ODplNTpiZToxYjpiMQorICAgICAgICAgICAgICAgIEV4cG9uZW50OiA2NTUzNyAoMHgxMDAwMSkKKyAgICBTaWduYXR1cmUgQWxnb3JpdGhtOiBzaGExV2l0aFJTQUVuY3J5cHRpb24KKyAgICAgICAgIDJmOjQyOjVmOmEzOjA5OjJjOmZhOjUxOjg4OmM3OjM3OjdmOmVhOjBlOjYzOmYwOmEyOjlhOgorICAgICAgICAgZTU6NWE6ZTI6Yzg6MjA6ZjA6M2Y6NjA6YmM6Yzg6MGY6YjY6YzY6NzY6Y2U6ZGI6ODM6OTM6CisgICAgICAgICBmNTphMzozMzo2NzowMTo4ZTowNDpjZDowMDo5YTo3MzpmZDpmMzozNTo4NjpmYTpkNzoxMzoKKyAgICAgICAgIGUyOjQ2OmM2OjlkOmMwOjI5OjUzOmQ0OmE5OjkwOmI4Ojc3OjRiOmU2OjgzOjc2OmU0OjkyOgorICAgICAgICAgZDY6OWM6NTA6Y2Y6NDM6ZDA6YzY6MDE6Nzc6NjE6OWE6ZGU6OWI6NzA6Zjc6NzI6Y2Q6NTk6CisgICAgICAgICAwMDozMTo2OTpkOTpiNDpjYTowNjo5Yzo2ZDpjMzpjNzo4MDo4Yzo2ODplNjpiNTphMjpmODoKKyAgICAgICAgIGVmOjFkOmJiOjE2OjlmOjc3Ojc3OmVmOjg3OjYyOjIyOjliOjRkOjY5OmE0OjNhOjFhOmYxOgorICAgICAgICAgMjE6NWU6OGM6MzI6YWM6OTI6ZmQ6MTU6NmI6MTg6YzI6N2Y6MTU6MGQ6OTg6MzA6Y2E6NzU6CisgICAgICAgICA4ZjoxYTo3MTpkZjpkYToxZDpiMjplZjo5YTplODoyZDoyZTowMjpmZDo0YTozYzphYTo5NjoKKyAgICAgICAgIDBiOjA2OjVkOjM1OmIzOjNkOjI0Ojg3OjRiOmUwOmIwOjU4OjYwOjJmOjQ1OmFjOjJlOjQ4OgorICAgICAgICAgOGE6YjA6OTk6MTA6NjU6Mjc6ZmY6Y2M6YjE6ZDg6ZmQ6YmQ6MjY6NmI6Yjk6MGM6MDU6MmE6CisgICAgICAgICBmNDo0NTo2MzozNTo1MTowNzplZDo4Mzo4NTpmZTo2Zjo2OTpjYjpiYjo0MDphODphZTpiNjoKKyAgICAgICAgIDNiOjU2OjRhOjJkOmE0OmVkOjZkOjExOjJjOjRkOmVkOjE3OjI0OmZkOjQ3OmJjOmQzOjQxOgorICAgICAgICAgYTI6ZDM6MDY6ZmU6MGM6OTA6ZDg6ZDg6OTQ6MjY6YzQ6ZmY6Y2M6YTE6ZDg6NDI6Nzc6ZWI6CisgICAgICAgICBmYzphOTo5NDo3MQorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlDcERDQ0FZd0NDUUN3a21TeDh0b2gwVEFOQmdrcWhraUc5dzBCQVFVRkFEQk5NUXN3Q1FZRFZRUUdFd0pZCitXVEVtTUNRR0ExVUVDZ3dkVUhsMGFHOXVJRk52Wm5SM1lYSmxJRVp2ZFc1a1lYUnBiMjRnUTBFeEZqQVVCZ05WCitCQU1NRFc5MWNpMWpZUzF6WlhKMlpYSXdIaGNOTVRNd01UQTBNVGswTnpBM1doY05Nakl4TVRFek1UazBOekEzCitXakJmTVFzd0NRWURWUVFHRXdKWVdURVhNQlVHQTFVRUJ4TU9RMkZ6ZEd4bElFRnVkR2h5WVhneEl6QWhCZ05WCitCQW9UR2xCNWRHaHZiaUJUYjJaMGQyRnlaU0JHYjNWdVpHRjBhVzl1TVJJd0VBWURWUVFERXdsc2IyTmhiR2h2CitjM1F3Z1o4d0RRWUpLb1pJaHZjTkFRRUJCUUFEZ1kwQU1JR0pBb0dCQU1MZ0Qwa0FLRGI1Y0Z5UGpid05mUjVDCit0ZXdkWEMra01YQVdEOERMeGlUVHZoTVc3cVZubHdPbTM2bVpsc3pIS3ZzUmYwNWxUNHBlZ2lGTTl6MmoxT2xhCitOK2NpL1g3TlUyMlROTjZjcllTaU43N0ZqWUpQNDY0ajg3Nm5kU3h5RCtyenlzMzg2VCsxcjFhWmFnZ0Vka2oxCitUc1NzdjF6V0lZS2xQSWpsdmh1eEFnTUJBQUV3RFFZSktvWklodmNOQVFFRkJRQURnZ0VCQUM5Q1g2TUpMUHBSCitpTWMzZitvT1kvQ2ltdVZhNHNnZzhEOWd2TWdQdHNaMnp0dURrL1dqTTJjQmpnVE5BSnB6L2ZNMWh2clhFK0pHCit4cDNBS1ZQVXFaQzRkMHZtZzNia2t0YWNVTTlEME1ZQmQyR2EzcHR3OTNMTldRQXhhZG0weWdhY2JjUEhnSXhvCis1cldpK084ZHV4YWZkM2Z2aDJJaW0wMXBwRG9hOFNGZWpES3NrdjBWYXhqQ2Z4VU5tRERLZFk4YWNkL2FIYkx2CittdWd0TGdMOVNqeXFsZ3NHWFRXelBTU0hTK0N3V0dBdlJhd3VTSXF3bVJCbEovL01zZGo5dlNacnVRd0ZLdlJGCitZelZSQisyRGhmNXZhY3U3UUtpdXRqdFdTaTJrN1cwUkxFM3RGeVQ5Ujd6VFFhTFRCdjRNa05qWWxDYkUvOHloCisyRUozNi95cGxIRT0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2tleWNlcnQ0LnBlbSBiL0xpYi90ZXN0L2tleWNlcnQ0LnBlbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzM1NWM4Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3Qva2V5Y2VydDQucGVtCkBAIC0wLDAgKzEsNzMgQEAKKy0tLS0tQkVHSU4gUFJJVkFURSBLRVktLS0tLQorTUlJQ2RnSUJBREFOQmdrcWhraUc5dzBCQVFFRkFBU0NBbUF3Z2dKY0FnRUFBb0dCQUs1VVFpTUk1VmtOczJRdgorTDdnVWFpRGRGZXZOVVhSalU0REhBZTNaenpZTFpORTY5aDlnTzlWQ1NTMTZ0SjVmVDVWRXUwRVp5R3IwZTNWMgorTmtYMFpvVTBIYy9VYVk0cXg3TEhtbjVTWVpwSXhoSm5rZjdTeUhKSzF6VWFHbFUwL0x4WXFJdUdDdEY1ZHF4MQorTDJPUWhFeDFHTTZSeWRIZGdYNjlHNjRMWGNZNUFnTUJBQUVDZ1lBaHNSTWZKa2I5RVJMTWwvb0cvNXNMUXU5TAorcFdES3Q2K1p3ZHh6bFpiZ2dRODVDTVlzaGpMS0lvZDJETEwvc0xmMngxUFJYeVJHMTMxTTFFM2s4emtrejZkZQorUjF1RHJJTi94OTFpdVl6ZkxRWkdoOGJNWTdZamQyZW9yb2E2Ui83RGpwRWxHZWpMeE9BYURXTzBTVDJJRlF5OQorbXlUR1MyalNNOTd3Y1hmc1NRSkJBTlAzamVsSm9TNVg2QlJqVFNuZVkyMXdjb2N4VnVRaDhwWHBFckFMVk5zVAorZHJyRlRlYUJ1WnA3S3ZidG5JTTVnMldSTnZheExabEFZL2hYUEp2aTZuY0NRUURTaXgxY2VibWw2RW1QbEVaUworTW04Z3dJMkY5dWZVdW53Sm1CSmN6ODI2RG8wWk5HQnlXREFNL0pRWkg0Rlg0R2ZBRk51ajhQVWIrR1FmYWRreAoraTFEUEFrRUEwbFZzTkhvanZ1RHNJbzhIR3V6YXJOWlFUMmJlV2pKMWpkeGg5dDdIclR4N0xJcHM2cmIvZmhPSworWnMwUjZnVkFKYUViY1dBUFoydEZ5RUNJbkFkbnNRSkFVamFlWFhqdXhGa2pPRnltNVB2cXB2aHBpdkV4NzhCdQorSlBUcjNyQUtYbWZHTXh4ZnVPYTB4SzF3U3lzaFA2WlIvUkJuLytsY1hQS3ViaEhRRE9lZ3d3SkFKRjFEQlFuTgorKy90TG1PUFVMdER3ZlA0Wml4bisvOEdtR09haEZvUmN1NlZJR0htUmlsSlRuNk1PQnV0dzdHbHYyWWRlQzZsLworZTgzR3E2ZmZMVmZLTlE9PQorLS0tLS1FTkQgUFJJVkFURSBLRVktLS0tLQorQ2VydGlmaWNhdGU6CisgICAgRGF0YToKKyAgICAgICAgVmVyc2lvbjogMSAoMHgwKQorICAgICAgICBTZXJpYWwgTnVtYmVyOiAxMjcyMzM0MjYxMjcyMTQ0MzI4MiAoMHhiMDkyNjRiMWYyZGEyMWQyKQorICAgIFNpZ25hdHVyZSBBbGdvcml0aG06IHNoYTFXaXRoUlNBRW5jcnlwdGlvbgorICAgICAgICBJc3N1ZXI6IEM9WFksIE89UHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24gQ0EsIENOPW91ci1jYS1zZXJ2ZXIKKyAgICAgICAgVmFsaWRpdHkKKyAgICAgICAgICAgIE5vdCBCZWZvcmU6IEphbiAgNCAxOTo0NzowNyAyMDEzIEdNVAorICAgICAgICAgICAgTm90IEFmdGVyIDogTm92IDEzIDE5OjQ3OjA3IDIwMjIgR01UCisgICAgICAgIFN1YmplY3Q6IEM9WFksIEw9Q2FzdGxlIEFudGhyYXgsIE89UHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24sIENOPWZha2Vob3N0bmFtZQorICAgICAgICBTdWJqZWN0IFB1YmxpYyBLZXkgSW5mbzoKKyAgICAgICAgICAgIFB1YmxpYyBLZXkgQWxnb3JpdGhtOiByc2FFbmNyeXB0aW9uCisgICAgICAgICAgICAgICAgUHVibGljLUtleTogKDEwMjQgYml0KQorICAgICAgICAgICAgICAgIE1vZHVsdXM6CisgICAgICAgICAgICAgICAgICAgIDAwOmFlOjU0OjQyOjIzOjA4OmU1OjU5OjBkOmIzOjY0OjJmOjJmOmI4OjE0OgorICAgICAgICAgICAgICAgICAgICA2YToyMDpkZDoxNTplYjpjZDo1MTo3NDo2Mzo1Mzo4MDpjNzowMTplZDpkOToKKyAgICAgICAgICAgICAgICAgICAgY2Y6MzY6MGI6NjQ6ZDE6M2E6ZjY6MWY6NjA6M2I6ZDU6NDI6NDk6MmQ6N2E6CisgICAgICAgICAgICAgICAgICAgIGI0OjllOjVmOjRmOjk1OjQ0OmJiOjQxOjE5OmM4OjZhOmY0OjdiOjc1Ojc2OgorICAgICAgICAgICAgICAgICAgICAzNjo0NTpmNDo2Njo4NTozNDoxZDpjZjpkNDo2OTo4ZToyYTpjNzpiMjpjNzoKKyAgICAgICAgICAgICAgICAgICAgOWE6N2U6NTI6NjE6OWE6NDg6YzY6MTI6Njc6OTE6ZmU6ZDI6Yzg6NzI6NGE6CisgICAgICAgICAgICAgICAgICAgIGQ3OjM1OjFhOjFhOjU1OjM0OmZjOmJjOjU4OmE4OjhiOjg2OjBhOmQxOjc5OgorICAgICAgICAgICAgICAgICAgICA3NjphYzo3NToyZjo2Mzo5MDo4NDo0Yzo3NToxODpjZTo5MTpjOTpkMTpkZDoKKyAgICAgICAgICAgICAgICAgICAgODE6N2U6YmQ6MWI6YWU6MGI6NWQ6YzY6MzkKKyAgICAgICAgICAgICAgICBFeHBvbmVudDogNjU1MzcgKDB4MTAwMDEpCisgICAgU2lnbmF0dXJlIEFsZ29yaXRobTogc2hhMVdpdGhSU0FFbmNyeXB0aW9uCisgICAgICAgICBhZDo0NTo4YTo4ZTplZjpjNjplZjowNDo0MTo1YzoyYzo0YTo4NDpkYzowMjo3NjowYzpkMDoKKyAgICAgICAgIDY2OjBmOmYwOjE2OjA0OjU4OjRkOmZkOjY4OmI3OmI4OmQzOmE4OjQxOmE1OjVjOjNjOjZmOgorICAgICAgICAgNjU6M2M6ZDE6Zjg6Y2U6NDM6MzU6ZTc6NDE6NWY6NTM6M2Q6Yzk6MmM6YzM6N2Q6ZmM6NTY6CisgICAgICAgICA0YTpmYTo0Nzo3NzozODo5ZDpiYjo5NzoyODowYTozYjo5MToxOTo3ZjpiYzo3NDphZToxNToKKyAgICAgICAgIDZiOmJkOjIwOjM2OjY3OjQ1OmE1OjFlOjc5OmQ3Ojc1OmU2Ojg5OjVjOjZkOjU0Ojg0OmQxOgorICAgICAgICAgOTU6ZDc6YTc6YjQ6MzM6M2M6YWY6Mzc6YzQ6Nzk6OGY6NWU6NzU6ZGM6NzU6YzI6MTg6ZmI6CisgICAgICAgICA2MTo2ZjoyZDpkYzozODo2NTo1YjpiYTo2NzoyODpkMDo4ODpkNzo4ZDpiOToyMzo1YTo4ZToKKyAgICAgICAgIGU4OmM2OmJiOmRiOmNlOmQ1OmI4OjQxOjJhOmNlOjkzOjA4OmI2Ojk1OmFkOjM0OjIwOjE4OgorICAgICAgICAgZDU6M2I6Mzc6NTI6NzQ6NTA6MGI6MDc6MmM6YjA6NmQ6YTQ6NGM6N2I6ZjQ6ZTA6ZmQ6ZDE6CisgICAgICAgICBhZjoxNzphYToyMDpjZDo2MjplMzpmMDo5ZDozNzo2OTpkYjo0MTpiZDpkNDoxYzpmYjo1MzoKKyAgICAgICAgIDIwOmRhOjg4OjlkOjc2OjI2OjY3OmNlOjAxOjkwOmE3OjgwOjFkOmE5OjViOjM5OjczOjY4OgorICAgICAgICAgNTQ6MGE6ZDE6MmE6MDM6MWI6OGY6M2M6NDM6NWQ6NWQ6YzQ6NTE6ZjE6YTc6ZTc6MTE6ZGE6CisgICAgICAgICAzMToyYzo0OTowNjphZjowNDpmNDpiODozYzo5OTpjNDoyMDpiOTowNjozNjphMjowMDo5MjoKKyAgICAgICAgIDYxOjFkOjBjOjZkOjI0OjA1OmUyOjgyOmUxOjQ3OmRiOmEwOjVmOmJhOmI5OmZiOmJhOmZhOgorICAgICAgICAgNDk6MTI6MWU6Y2UKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJQ3B6Q0NBWThDQ1FDd2ttU3g4dG9oMGpBTkJna3Foa2lHOXcwQkFRVUZBREJOTVFzd0NRWURWUVFHRXdKWQorV1RFbU1DUUdBMVVFQ2d3ZFVIbDBhRzl1SUZOdlpuUjNZWEpsSUVadmRXNWtZWFJwYjI0Z1EwRXhGakFVQmdOVgorQkFNTURXOTFjaTFqWVMxelpYSjJaWEl3SGhjTk1UTXdNVEEwTVRrME56QTNXaGNOTWpJeE1URXpNVGswTnpBMworV2pCaU1Rc3dDUVlEVlFRR0V3SllXVEVYTUJVR0ExVUVCeE1PUTJGemRHeGxJRUZ1ZEdoeVlYZ3hJekFoQmdOVgorQkFvVEdsQjVkR2h2YmlCVGIyWjBkMkZ5WlNCR2IzVnVaR0YwYVc5dU1SVXdFd1lEVlFRREV3eG1ZV3RsYUc5egorZEc1aGJXVXdnWjh3RFFZSktvWklodmNOQVFFQkJRQURnWTBBTUlHSkFvR0JBSzVVUWlNSTVWa05zMlF2TDdnVQorYWlEZEZldk5VWFJqVTRESEFlM1p6ellMWk5FNjloOWdPOVZDU1MxNnRKNWZUNVZFdTBFWnlHcjBlM1YyTmtYMAorWm9VMEhjL1VhWTRxeDdMSG1uNVNZWnBJeGhKbmtmN1N5SEpLMXpVYUdsVTAvTHhZcUl1R0N0RjVkcXgxTDJPUQoraEV4MUdNNlJ5ZEhkZ1g2OUc2NExYY1k1QWdNQkFBRXdEUVlKS29aSWh2Y05BUUVGQlFBRGdnRUJBSzFGaW83dgoreHU4RVFWd3NTb1RjQW5ZTTBHWVA4QllFV0UzOWFMZTQwNmhCcFZ3OGIyVTgwZmpPUXpYblFWOVRQY2tzdzMzOAorVmtyNlIzYzRuYnVYS0FvN2tSbC92SFN1Rld1OUlEWm5SYVVlZWRkMTVvbGNiVlNFMFpYWHA3UXpQSzgzeEhtUAorWG5YY2RjSVkrMkZ2TGR3NFpWdTZaeWpRaU5lTnVTTmFqdWpHdTl2TzFiaEJLczZUQ0xhVnJUUWdHTlU3TjFKMAorVUFzSExMQnRwRXg3OU9EOTBhOFhxaUROWXVQd25UZHAyMEc5MUJ6N1V5RGFpSjEySm1mT0FaQ25nQjJwV3psegorYUZRSzBTb0RHNDg4UTExZHhGSHhwK2NSMmpFc1NRYXZCUFM0UEpuRUlMa0dOcUlBa21FZERHMGtCZUtDNFVmYgorb0YrNnVmdTYra2tTSHM0PQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvbGVha2Vycy90ZXN0X2dlc3RhbHQucHkgYi9MaWIvdGVzdC9sZWFrZXJzL3Rlc3RfZ2VzdGFsdC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTAwODFjMS4uMDAwMDAwMAotLS0gYS9MaWIvdGVzdC9sZWFrZXJzL3Rlc3RfZ2VzdGFsdC5weQorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLWltcG9ydCBzeXMKLQotaWYgc3lzLnBsYXRmb3JtICE9ICdkYXJ3aW4nOgotICAgIHJhaXNlIFZhbHVlRXJyb3IoIlRoaXMgdGVzdCBvbmx5IGxlYWtzIG9uIE1hYyBPUyBYIikKLQotZGVmIGxlYWsoKToKLSAgICAjIHRha2VuIGZyb20gcGxhdGZvcm0uX21hY192ZXJfbG9va3VwKCkKLSAgICBmcm9tIGdlc3RhbHQgaW1wb3J0IGdlc3RhbHQKLSAgICBpbXBvcnQgTWFjT1MKLQotICAgIHRyeToKLSAgICAgICAgZ2VzdGFsdCgnc3lzdScpCi0gICAgZXhjZXB0IE1hY09TLkVycm9yOgotICAgICAgICBwYXNzCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9sb2NrX3Rlc3RzLnB5IGIvTGliL3Rlc3QvbG9ja190ZXN0cy5weQppbmRleCBiZmJmNDRlLi40NjJlY2VmIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9sb2NrX3Rlc3RzLnB5CisrKyBiL0xpYi90ZXN0L2xvY2tfdGVzdHMucHkKQEAgLTM5LDggKzM5LDEyIEBACiAgICAgICAgICAgICAgICAgc2VsZi5maW5pc2hlZC5hcHBlbmQodGlkKQogICAgICAgICAgICAgICAgIHdoaWxlIG5vdCBzZWxmLl9jYW5fZXhpdDoKICAgICAgICAgICAgICAgICAgICAgX3dhaXQoKQotICAgICAgICBmb3IgaSBpbiByYW5nZShuKToKLSAgICAgICAgICAgIHN0YXJ0X25ld190aHJlYWQodGFzaywgKCkpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKG4pOgorICAgICAgICAgICAgICAgIHN0YXJ0X25ld190aHJlYWQodGFzaywgKCkpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHNlbGYuX2Nhbl9leGl0ID0gVHJ1ZQorICAgICAgICAgICAgcmFpc2UKIAogICAgIGRlZiB3YWl0X2Zvcl9zdGFydGVkKHNlbGYpOgogICAgICAgICB3aGlsZSBsZW4oc2VsZi5zdGFydGVkKSA8IHNlbGYubjoKQEAgLTgwLDYgKzg0LDExIEBACiAgICAgICAgIGxvY2sgPSBzZWxmLmxvY2t0eXBlKCkKICAgICAgICAgZGVsIGxvY2sKIAorICAgIGRlZiB0ZXN0X3JlcHIoc2VsZik6CisgICAgICAgIGxvY2sgPSBzZWxmLmxvY2t0eXBlKCkKKyAgICAgICAgcmVwcihsb2NrKQorICAgICAgICBkZWwgbG9jaworCiAgICAgZGVmIHRlc3RfYWNxdWlyZV9kZXN0cm95KHNlbGYpOgogICAgICAgICBsb2NrID0gc2VsZi5sb2NrdHlwZSgpCiAgICAgICAgIGxvY2suYWNxdWlyZSgpCkBAIC0zNzksNiArMzg4LDE0IEBACiAgICAgICAgIGIud2FpdF9mb3JfZmluaXNoZWQoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdHMsIFtUcnVlXSAqIE4pCiAKKyAgICBkZWYgdGVzdF9yZXNldF9pbnRlcm5hbF9sb2NrcyhzZWxmKToKKyAgICAgICAgZXZ0ID0gc2VsZi5ldmVudHR5cGUoKQorICAgICAgICBvbGRfbG9jayA9IGV2dC5fY29uZC5fbG9jaworICAgICAgICBldnQuX3Jlc2V0X2ludGVybmFsX2xvY2tzKCkKKyAgICAgICAgbmV3X2xvY2sgPSBldnQuX2NvbmQuX2xvY2sKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdChuZXdfbG9jaywgb2xkX2xvY2spCisgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShuZXdfbG9jayksIHR5cGUob2xkX2xvY2spKQorCiAKIGNsYXNzIENvbmRpdGlvblRlc3RzKEJhc2VUZXN0Q2FzZSk6CiAgICAgIiIiCkBAIC00MTMsNiArNDMwLDE3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgY29uZC5ub3RpZnkpCiAKICAgICBkZWYgX2NoZWNrX25vdGlmeShzZWxmLCBjb25kKToKKyAgICAgICAgIyBOb3RlIHRoYXQgdGhpcyB0ZXN0IGlzIHNlbnNpdGl2ZSB0byB0aW1pbmcuICBJZiB0aGUgd29ya2VyIHRocmVhZHMKKyAgICAgICAgIyBkb24ndCBleGVjdXRlIGluIGEgdGltZWx5IGZhc2hpb24sIHRoZSBtYWluIHRocmVhZCBtYXkgdGhpbmsgdGhleQorICAgICAgICAjIGFyZSBmdXJ0aGVyIGFsb25nIHRoZW4gdGhleSBhcmUuICBUaGUgbWFpbiB0aHJlYWQgdGhlcmVmb3JlIGlzc3VlcworICAgICAgICAjIF93YWl0KCkgc3RhdGVtZW50cyB0byB0cnkgdG8gbWFrZSBzdXJlIHRoYXQgaXQgZG9lc24ndCByYWNlIGFoZWFkCisgICAgICAgICMgb2YgdGhlIHdvcmtlcnMuCisgICAgICAgICMgU2Vjb25kbHksIHRoaXMgdGVzdCBhc3N1bWVzIHRoYXQgY29uZGl0aW9uIHZhcmlhYmxlcyBhcmUgbm90IHN1YmplY3QKKyAgICAgICAgIyB0byBzcHVyaW91cyB3YWtldXBzLiAgVGhlIGFic2VuY2Ugb2Ygc3B1cmlvdXMgd2FrZXVwcyBpcyBhbiBpbXBsZW1lbnRhdGlvbgorICAgICAgICAjIGRldGFpbCBvZiBDb25kaXRpb24gQ2FyaWFibGVzIGluIGN1cnJlbnQgQ1B5dGhvbiwgYnV0IGluIGdlbmVyYWwsIG5vdAorICAgICAgICAjIGEgZ3VhcmFudGVlZCBwcm9wZXJ0eSBvZiBjb25kaXRpb24gdmFyaWFibGVzIGFzIGEgcHJvZ3JhbW1pbmcKKyAgICAgICAgIyBjb25zdHJ1Y3QuICBJbiBwYXJ0aWN1bGFyLCBpdCBpcyBwb3NzaWJsZSB0aGF0IHRoaXMgY2FuIG5vIGxvbmdlcgorICAgICAgICAjIGJlIGNvbnZlbmllbnRseSBndWFyYW50ZWVkIHNob3VsZCB0aGVpciBpbXBsZW1lbnRhdGlvbiBldmVyIGNoYW5nZS4KICAgICAgICAgTiA9IDUKICAgICAgICAgcmVzdWx0czEgPSBbXQogICAgICAgICByZXN1bHRzMiA9IFtdCkBAIC00NDAsNiArNDY4LDkgQEAKICAgICAgICAgICAgIF93YWl0KCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHRzMSwgWyhUcnVlLCAxKV0gKiAzKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdHMyLCBbXSkKKyAgICAgICAgIyBmaXJzdCB3YWl0LCB0byBlbnN1cmUgYWxsIHdvcmtlcnMgc2V0dGxlIGludG8gY29uZC53YWl0KCkgYmVmb3JlCisgICAgICAgICMgd2UgY29udGludWUuIFNlZSBpc3N1ZSAjODc5OQorICAgICAgICBfd2FpdCgpCiAgICAgICAgICMgTm90aWZ5IDUgdGhyZWFkczogdGhleSBtaWdodCBiZSBpbiB0aGVpciBmaXJzdCBvciBzZWNvbmQgd2FpdAogICAgICAgICBjb25kLmFjcXVpcmUoKQogICAgICAgICBjb25kLm5vdGlmeSg1KQpAQCAtNDUwLDYgKzQ4MSw3IEBACiAgICAgICAgICAgICBfd2FpdCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0czEsIFsoVHJ1ZSwgMSldICogMyArIFsoVHJ1ZSwgMildICogMikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHRzMiwgWyhUcnVlLCAyKV0gKiAzKQorICAgICAgICBfd2FpdCgpICMgbWFrZSBzdXJlIGFsbCB3b3JrZXJzIHNldHRsZSBpbnRvIGNvbmQud2FpdCgpCiAgICAgICAgICMgTm90aWZ5IGFsbCB0aHJlYWRzOiB0aGV5IGFyZSBhbGwgaW4gdGhlaXIgc2Vjb25kIHdhaXQKICAgICAgICAgY29uZC5hY3F1aXJlKCkKICAgICAgICAgY29uZC5ub3RpZnlfYWxsKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L21ha2Vfc3NsX2NlcnRzLnB5IGIvTGliL3Rlc3QvbWFrZV9zc2xfY2VydHMucHkKaW5kZXggNDhkMmU1Ny4uODFkMDRmOCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvbWFrZV9zc2xfY2VydHMucHkKKysrIGIvTGliL3Rlc3QvbWFrZV9zc2xfY2VydHMucHkKQEAgLTIsNiArMiw3IEBACiBhbmQgZnJpZW5kcy4iIiIKIAogaW1wb3J0IG9zCitpbXBvcnQgc2h1dGlsCiBpbXBvcnQgc3lzCiBpbXBvcnQgdGVtcGZpbGUKIGZyb20gc3VicHJvY2VzcyBpbXBvcnQgKgpAQCAtMjAsMTEgKzIxLDU0IEBACiAKICAgICBbcmVxX3g1MDlfZXh0ZW5zaW9uc10KICAgICBzdWJqZWN0QWx0TmFtZSAgICAgICAgID0gRE5TOntob3N0bmFtZX0KKworICAgIFsgY2EgXQorICAgIGRlZmF1bHRfY2EgICAgICA9IENBX2RlZmF1bHQKKworICAgIFsgQ0FfZGVmYXVsdCBdCisgICAgZGlyID0gY2FkaXIKKyAgICBkYXRhYmFzZSAgPSAkZGlyL2luZGV4LnR4dAorICAgIGNybG51bWJlciA9ICRkaXIvY3JsLnR4dAorICAgIGRlZmF1bHRfbWQgPSBzaGExCisgICAgZGVmYXVsdF9kYXlzID0gMzYwMAorICAgIGRlZmF1bHRfY3JsX2RheXMgPSAzNjAwCisgICAgY2VydGlmaWNhdGUgPSBweWNhY2VydC5wZW0KKyAgICBwcml2YXRlX2tleSA9IHB5Y2FrZXkucGVtCisgICAgc2VyaWFsICAgID0gJGRpci9zZXJpYWwKKyAgICBSQU5ERklMRSAgPSAkZGlyLy5yYW5kCisKKyAgICBwb2xpY3kgICAgICAgICAgPSBwb2xpY3lfbWF0Y2gKKworICAgIFsgcG9saWN5X21hdGNoIF0KKyAgICBjb3VudHJ5TmFtZSAgICAgICAgICAgICA9IG1hdGNoCisgICAgc3RhdGVPclByb3ZpbmNlTmFtZSAgICAgPSBvcHRpb25hbAorICAgIG9yZ2FuaXphdGlvbk5hbWUgICAgICAgID0gbWF0Y2gKKyAgICBvcmdhbml6YXRpb25hbFVuaXROYW1lICA9IG9wdGlvbmFsCisgICAgY29tbW9uTmFtZSAgICAgICAgICAgICAgPSBzdXBwbGllZAorICAgIGVtYWlsQWRkcmVzcyAgICAgICAgICAgID0gb3B0aW9uYWwKKworICAgIFsgcG9saWN5X2FueXRoaW5nIF0KKyAgICBjb3VudHJ5TmFtZSAgID0gb3B0aW9uYWwKKyAgICBzdGF0ZU9yUHJvdmluY2VOYW1lID0gb3B0aW9uYWwKKyAgICBsb2NhbGl0eU5hbWUgICAgPSBvcHRpb25hbAorICAgIG9yZ2FuaXphdGlvbk5hbWUgID0gb3B0aW9uYWwKKyAgICBvcmdhbml6YXRpb25hbFVuaXROYW1lICA9IG9wdGlvbmFsCisgICAgY29tbW9uTmFtZSAgICA9IHN1cHBsaWVkCisgICAgZW1haWxBZGRyZXNzICAgID0gb3B0aW9uYWwKKworCisgICAgWyB2M19jYSBdCisKKyAgICBzdWJqZWN0S2V5SWRlbnRpZmllcj1oYXNoCisgICAgYXV0aG9yaXR5S2V5SWRlbnRpZmllcj1rZXlpZDphbHdheXMsaXNzdWVyCisgICAgYmFzaWNDb25zdHJhaW50cyA9IENBOnRydWUKKwogICAgICIiIgogCiBoZXJlID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykpCiAKLWRlZiBtYWtlX2NlcnRfa2V5KGhvc3RuYW1lKToKK2RlZiBtYWtlX2NlcnRfa2V5KGhvc3RuYW1lLCBzaWduPUZhbHNlKToKKyAgICBwcmludCgiY3JlYXRpbmcgY2VydCBmb3IgIiArIGhvc3RuYW1lKQogICAgIHRlbXBuYW1lcyA9IFtdCiAgICAgZm9yIGkgaW4gcmFuZ2UoMyk6CiAgICAgICAgIHdpdGggdGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlGaWxlKGRlbGV0ZT1GYWxzZSkgYXMgZjoKQEAgLTMzLDEwICs3NywyNSBAQAogICAgIHRyeToKICAgICAgICAgd2l0aCBvcGVuKHJlcV9maWxlLCAndycpIGFzIGY6CiAgICAgICAgICAgICBmLndyaXRlKHJlcV90ZW1wbGF0ZS5mb3JtYXQoaG9zdG5hbWU9aG9zdG5hbWUpKQotICAgICAgICBhcmdzID0gWydyZXEnLCAnLW5ldycsICctZGF5cycsICczNjUwJywgJy1ub2RlcycsICcteDUwOScsCisgICAgICAgIGFyZ3MgPSBbJ3JlcScsICctbmV3JywgJy1kYXlzJywgJzM2NTAnLCAnLW5vZGVzJywKICAgICAgICAgICAgICAgICAnLW5ld2tleScsICdyc2E6MTAyNCcsICcta2V5b3V0Jywga2V5X2ZpbGUsCi0gICAgICAgICAgICAgICAgJy1vdXQnLCBjZXJ0X2ZpbGUsICctY29uZmlnJywgcmVxX2ZpbGVdCisgICAgICAgICAgICAgICAgJy1jb25maWcnLCByZXFfZmlsZV0KKyAgICAgICAgaWYgc2lnbjoKKyAgICAgICAgICAgIHdpdGggdGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlGaWxlKGRlbGV0ZT1GYWxzZSkgYXMgZjoKKyAgICAgICAgICAgICAgICB0ZW1wbmFtZXMuYXBwZW5kKGYubmFtZSkKKyAgICAgICAgICAgICAgICByZXFmaWxlID0gZi5uYW1lCisgICAgICAgICAgICBhcmdzICs9IFsnLW91dCcsIHJlcWZpbGUgXQorCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBhcmdzICs9IFsnLXg1MDknLCAnLW91dCcsIGNlcnRfZmlsZSBdCiAgICAgICAgIGNoZWNrX2NhbGwoWydvcGVuc3NsJ10gKyBhcmdzKQorCisgICAgICAgIGlmIHNpZ246CisgICAgICAgICAgICBhcmdzID0gWydjYScsICctY29uZmlnJywgcmVxX2ZpbGUsICctb3V0JywgY2VydF9maWxlLCAnLW91dGRpcicsICdjYWRpcicsCisgICAgICAgICAgICAgICAgICAgICctcG9saWN5JywgJ3BvbGljeV9hbnl0aGluZycsICctYmF0Y2gnLCAnLWluZmlsZXMnLCByZXFmaWxlIF0KKyAgICAgICAgICAgIGNoZWNrX2NhbGwoWydvcGVuc3NsJ10gKyBhcmdzKQorCisKICAgICAgICAgd2l0aCBvcGVuKGNlcnRfZmlsZSwgJ3InKSBhcyBmOgogICAgICAgICAgICAgY2VydCA9IGYucmVhZCgpCiAgICAgICAgIHdpdGggb3BlbihrZXlfZmlsZSwgJ3InKSBhcyBmOgpAQCAtNDYsNiArMTA1LDM2IEBACiAgICAgICAgIGZvciBuYW1lIGluIHRlbXBuYW1lczoKICAgICAgICAgICAgIG9zLnJlbW92ZShuYW1lKQogCitUTVBfQ0FESVIgPSAnY2FkaXInCisKK2RlZiB1bm1ha2VfY2EoKToKKyAgICBzaHV0aWwucm10cmVlKFRNUF9DQURJUikKKworZGVmIG1ha2VfY2EoKToKKyAgICBvcy5ta2RpcihUTVBfQ0FESVIpCisgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbignY2FkaXInLCdpbmRleC50eHQnKSwnYSsnKSBhcyBmOgorICAgICAgICBwYXNzICMgZW1wdHkgZmlsZQorICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oJ2NhZGlyJywnY3JsLnR4dCcpLCdhKycpIGFzIGY6CisgICAgICAgIGYud3JpdGUoIjAwIikKKyAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKCdjYWRpcicsJ2luZGV4LnR4dC5hdHRyJyksJ3crJykgYXMgZjoKKyAgICAgICAgZi53cml0ZSgndW5pcXVlX3N1YmplY3QgPSBubycpCisKKyAgICB3aXRoIHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZSgidyIpIGFzIHQ6CisgICAgICAgIHQud3JpdGUocmVxX3RlbXBsYXRlLmZvcm1hdChob3N0bmFtZT0nb3VyLWNhLXNlcnZlcicpKQorICAgICAgICB0LmZsdXNoKCkKKyAgICAgICAgd2l0aCB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUoKSBhcyBmOgorICAgICAgICAgICAgYXJncyA9IFsncmVxJywgJy1uZXcnLCAnLWRheXMnLCAnMzY1MCcsICctZXh0ZW5zaW9ucycsICd2M19jYScsICctbm9kZXMnLAorICAgICAgICAgICAgICAgICAgICAnLW5ld2tleScsICdyc2E6MjA0OCcsICcta2V5b3V0JywgJ3B5Y2FrZXkucGVtJywKKyAgICAgICAgICAgICAgICAgICAgJy1vdXQnLCBmLm5hbWUsCisgICAgICAgICAgICAgICAgICAgICctc3ViaicsICcvQz1YWS9MPUNhc3RsZSBBbnRocmF4L089UHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24gQ0EvQ049b3VyLWNhLXNlcnZlciddCisgICAgICAgICAgICBjaGVja19jYWxsKFsnb3BlbnNzbCddICsgYXJncykKKyAgICAgICAgICAgIGFyZ3MgPSBbJ2NhJywgJy1jb25maWcnLCB0Lm5hbWUsICctY3JlYXRlX3NlcmlhbCcsCisgICAgICAgICAgICAgICAgICAgICctb3V0JywgJ3B5Y2FjZXJ0LnBlbScsICctYmF0Y2gnLCAnLW91dGRpcicsIFRNUF9DQURJUiwKKyAgICAgICAgICAgICAgICAgICAgJy1rZXlmaWxlJywgJ3B5Y2FrZXkucGVtJywgJy1kYXlzJywgJzM2NTAnLAorICAgICAgICAgICAgICAgICAgICAnLXNlbGZzaWduJywgJy1leHRlbnNpb25zJywgJ3YzX2NhJywgJy1pbmZpbGVzJywgZi5uYW1lIF0KKyAgICAgICAgICAgIGNoZWNrX2NhbGwoWydvcGVuc3NsJ10gKyBhcmdzKQorICAgICAgICAgICAgYXJncyA9IFsnY2EnLCAnLWNvbmZpZycsIHQubmFtZSwgJy1nZW5jcmwnLCAnLW91dCcsICdyZXZvY2F0aW9uLmNybCddCisgICAgICAgICAgICBjaGVja19jYWxsKFsnb3BlbnNzbCddICsgYXJncykKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICBvcy5jaGRpcihoZXJlKQpAQCAtNTQsMTEgKzE0MywzNCBAQAogICAgICAgICBmLndyaXRlKGNlcnQpCiAgICAgd2l0aCBvcGVuKCdzc2xfa2V5LnBlbScsICd3JykgYXMgZjoKICAgICAgICAgZi53cml0ZShrZXkpCisgICAgcHJpbnQoInBhc3N3b3JkIHByb3RlY3Rpbmcgc3NsX2tleS5wZW0gaW4gc3NsX2tleS5wYXNzd2QucGVtIikKKyAgICBjaGVja19jYWxsKFsnb3BlbnNzbCcsJ3JzYScsJy1pbicsJ3NzbF9rZXkucGVtJywnLW91dCcsJ3NzbF9rZXkucGFzc3dkLnBlbScsJy1kZXMzJywnLXBhc3NvdXQnLCdwYXNzOnNvbWVwYXNzJ10pCisgICAgY2hlY2tfY2FsbChbJ29wZW5zc2wnLCdyc2EnLCctaW4nLCdzc2xfa2V5LnBlbScsJy1vdXQnLCdrZXljZXJ0LnBhc3N3ZC5wZW0nLCctZGVzMycsJy1wYXNzb3V0JywncGFzczpzb21lcGFzcyddKQorCiAgICAgd2l0aCBvcGVuKCdrZXljZXJ0LnBlbScsICd3JykgYXMgZjoKICAgICAgICAgZi53cml0ZShrZXkpCiAgICAgICAgIGYud3JpdGUoY2VydCkKKworICAgIHdpdGggb3Blbigna2V5Y2VydC5wYXNzd2QucGVtJywgJ2ErJykgYXMgZjoKKyAgICAgICAgZi53cml0ZShjZXJ0KQorCiAgICAgIyBGb3IgY2VydGlmaWNhdGUgbWF0Y2hpbmcgdGVzdHMKKyAgICBtYWtlX2NhKCkKICAgICBjZXJ0LCBrZXkgPSBtYWtlX2NlcnRfa2V5KCdmYWtlaG9zdG5hbWUnKQogICAgIHdpdGggb3Blbigna2V5Y2VydDIucGVtJywgJ3cnKSBhcyBmOgogICAgICAgICBmLndyaXRlKGtleSkKICAgICAgICAgZi53cml0ZShjZXJ0KQorCisgICAgY2VydCwga2V5ID0gbWFrZV9jZXJ0X2tleSgnbG9jYWxob3N0JywgVHJ1ZSkKKyAgICB3aXRoIG9wZW4oJ2tleWNlcnQzLnBlbScsICd3JykgYXMgZjoKKyAgICAgICAgZi53cml0ZShrZXkpCisgICAgICAgIGYud3JpdGUoY2VydCkKKworICAgIGNlcnQsIGtleSA9IG1ha2VfY2VydF9rZXkoJ2Zha2Vob3N0bmFtZScsIFRydWUpCisgICAgd2l0aCBvcGVuKCdrZXljZXJ0NC5wZW0nLCAndycpIGFzIGY6CisgICAgICAgIGYud3JpdGUoa2V5KQorICAgICAgICBmLndyaXRlKGNlcnQpCisKKyAgICB1bm1ha2VfY2EoKQorICAgIHByaW50KCJcblxuUGxlYXNlIGNoYW5nZSB0aGUgdmFsdWVzIGluIHRlc3Rfc3NsLnB5LCB0ZXN0X3BhcnNlX2NlcnQgZnVuY3Rpb24gcmVsYXRlZCB0byBub3RBZnRlcixub3RCZWZvcmUgYW5kIHNlcmlhbE51bWJlciIpCisgICAgY2hlY2tfY2FsbChbJ29wZW5zc2wnLCd4NTA5JywnLWluJywna2V5Y2VydC5wZW0nLCctZGF0ZXMnLCctc2VyaWFsJywnLW5vb3V0J10pCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9tYXBwaW5nX3Rlc3RzLnB5IGIvTGliL3Rlc3QvbWFwcGluZ190ZXN0cy5weQppbmRleCBiYzEyYzc3Li5mZjgyZjRlIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9tYXBwaW5nX3Rlc3RzLnB5CisrKyBiL0xpYi90ZXN0L21hcHBpbmdfdGVzdHMucHkKQEAgLTY0LDcgKzY0LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCBkKQogICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHAsIGQpCiAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZCwgcCkKLSAgICAgICAgI19fbm9uX196ZXJvX18KKyAgICAgICAgI2Jvb2wKICAgICAgICAgaWYgcDogc2VsZi5mYWlsKCJFbXB0eSBtYXBwaW5nIG11c3QgY29tcGFyZSB0byBGYWxzZSIpCiAgICAgICAgIGlmIG5vdCBkOiBzZWxmLmZhaWwoIkZ1bGwgbWFwcGluZyBtdXN0IGNvbXBhcmUgdG8gVHJ1ZSIpCiAgICAgICAgICMga2V5cygpLCBpdGVtcygpLCBpdGVya2V5cygpIC4uLgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvbW9ja19zb2NrZXQucHkgYi9MaWIvdGVzdC9tb2NrX3NvY2tldC5weQppbmRleCA4NjFiZmIyLi5lMzY3MjRmIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9tb2NrX3NvY2tldC5weQorKysgYi9MaWIvdGVzdC9tb2NrX3NvY2tldC5weQpAQCAtMTQ1LDEyICsxNDUsOCBAQAogICAgIHJldHVybiAiIgogCiAKLWNsYXNzIGdhaWVycm9yKEV4Y2VwdGlvbik6Ci0gICAgcGFzcwotCi0KLWNsYXNzIGVycm9yKEV4Y2VwdGlvbik6Ci0gICAgcGFzcworZ2FpZXJyb3IgPSBzb2NrZXRfbW9kdWxlLmdhaWVycm9yCitlcnJvciA9IHNvY2tldF9tb2R1bGUuZXJyb3IKIAogCiAjIENvbnN0YW50cwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvbXBfZm9ya19ib21iLnB5IGIvTGliL3Rlc3QvbXBfZm9ya19ib21iLnB5CmluZGV4IDkwOGFmZTMuLjAxN2UwMTAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L21wX2ZvcmtfYm9tYi5weQorKysgYi9MaWIvdGVzdC9tcF9mb3JrX2JvbWIucHkKQEAgLTcsNiArNywxMSBAQAogIyBjb3JyZWN0bHkgb24gV2luZG93cy4gIEhvd2V2ZXIsIHdlIHNob3VsZCBnZXQgYSBSdW50aW1lRXJyb3IgcmF0aGVyCiAjIHRoYW4gdGhlIFdpbmRvd3MgZXF1aXZhbGVudCBvZiBhIGZvcmsgYm9tYi4KIAoraWYgbGVuKHN5cy5hcmd2KSA+IDE6CisgICAgbXVsdGlwcm9jZXNzaW5nLnNldF9zdGFydF9tZXRob2Qoc3lzLmFyZ3ZbMV0pCitlbHNlOgorICAgIG11bHRpcHJvY2Vzc2luZy5zZXRfc3RhcnRfbWV0aG9kKCdzcGF3bicpCisKIHAgPSBtdWx0aXByb2Nlc3NpbmcuUHJvY2Vzcyh0YXJnZXQ9Zm9vKQogcC5zdGFydCgpCiBwLmpvaW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvbXVsdGlieXRlY29kZWNfc3VwcG9ydC5weSBiL0xpYi90ZXN0L211bHRpYnl0ZWNvZGVjX3N1cHBvcnQucHkKaW5kZXggMTRmZWEzZS4uZjk4ODRjNiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvbXVsdGlieXRlY29kZWNfc3VwcG9ydC5weQorKysgYi9MaWIvdGVzdC9tdWx0aWJ5dGVjb2RlY19zdXBwb3J0LnB5CkBAIC0yMSw3ICsyMSw3IEBACiAgICAgcm91bmR0cmlwdGVzdCAgID0gMSAgICAjIHNldCBpZiByb3VuZHRyaXAgaXMgcG9zc2libGUgd2l0aCB1bmljb2RlCiAgICAgaGFzX2lzbzEwNjQ2ICAgID0gMCAgICAjIHNldCBpZiB0aGlzIGVuY29kaW5nIGNvbnRhaW5zIHdob2xlIGlzbzEwNjQ2IG1hcAogICAgIHhtbGNoYXJuYW1ldGVzdCA9IE5vbmUgIyBzdHJpbmcgdG8gdGVzdCB4bWxjaGFycmVmcmVwbGFjZQotICAgIHVubWFwcGVkdW5pY29kZSA9ICdcdWRlZWUnICMgYSB1bmljb2RlIGNvZGVwb2ludCB0aGF0IGlzIG5vdCBtYXBwZWQuCisgICAgdW5tYXBwZWR1bmljb2RlID0gJ1x1ZGVlZScgIyBhIHVuaWNvZGUgY29kZSBwb2ludCB0aGF0IGlzIG5vdCBtYXBwZWQuCiAKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIGlmIHNlbGYuY29kZWMgaXMgTm9uZToKQEAgLTI3MCw2ICsyNzAsMTMgQEAKIAogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3N0cmVhbS5nZXR2YWx1ZSgpLCBzZWxmLnRzdHJpbmdbMF0pCiAKKyAgICBkZWYgdGVzdF9zdHJlYW13cml0ZXJfcmVzZXRfbm9fcGVuZGluZyhzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMjMyNDc6IENhbGxpbmcgcmVzZXQoKSBvbiBhIGZyZXNoIFN0cmVhbVdyaXRlciBpbnN0YW5jZQorICAgICAgICAjICh3aXRob3V0IHBlbmRpbmcgZGF0YSkgbXVzdCBub3QgY3Jhc2gKKyAgICAgICAgc3RyZWFtID0gQnl0ZXNJTygpCisgICAgICAgIHdyaXRlciA9IHNlbGYud3JpdGVyKHN0cmVhbSkKKyAgICAgICAgd3JpdGVyLnJlc2V0KCkKKwogCiBjbGFzcyBUZXN0QmFzZV9NYXBwaW5nKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBwYXNzX2VuY3Rlc3QgPSBbXQpAQCAtMjc3LDExICsyODQsMTAgQEAKICAgICBzdXBtYXBzID0gW10KICAgICBjb2RlY3Rlc3RzID0gW10KIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprdyk6Ci0gICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlLl9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3KQorICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5vcGVuX21hcHBpbmdfZmlsZSgpLmNsb3NlKCkgIyB0ZXN0IGl0IHRvIHJlcG9ydCB0aGUgZXJyb3IgZWFybHkKLSAgICAgICAgZXhjZXB0IChJT0Vycm9yLCBIVFRQRXhjZXB0aW9uKToKKyAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBIVFRQRXhjZXB0aW9uKToKICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoIkNvdWxkIG5vdCByZXRyaWV2ZSAiK3NlbGYubWFwZmlsZXVybCkKIAogICAgIGRlZiBvcGVuX21hcHBpbmdfZmlsZShzZWxmKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3BpY2tsZXRlc3Rlci5weSBiL0xpYi90ZXN0L3BpY2tsZXRlc3Rlci5weQppbmRleCA0ZDU5YmRlLi5iOTQ4YzU1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC9waWNrbGV0ZXN0ZXIucHkKKysrIGIvTGliL3Rlc3QvcGlja2xldGVzdGVyLnB5CkBAIC0xLDEyICsxLDE3IEBACitpbXBvcnQgY29sbGVjdGlvbnMKK2ltcG9ydCBjb3B5cmVnCitpbXBvcnQgZGJtCiBpbXBvcnQgaW8KLWltcG9ydCB1bml0dGVzdAoraW1wb3J0IGZ1bmN0b29scwogaW1wb3J0IHBpY2tsZQogaW1wb3J0IHBpY2tsZXRvb2xzCitpbXBvcnQgc3RydWN0CiBpbXBvcnQgc3lzCi1pbXBvcnQgY29weXJlZworaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgd2Vha3JlZgogZnJvbSBodHRwLmNvb2tpZXMgaW1wb3J0IFNpbXBsZUNvb2tpZQogCitmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCAoCiAgICAgVGVzdEZhaWxlZCwgVEVTVEZOLCBydW5fd2l0aF9sb2NhbGUsIG5vX3RyYWNpbmcsCiAgICAgXzJHLCBfNEcsIGJpZ21lbXRlc3QsCkBAIC0xNCw2ICsxOSw5IEBACiAKIGZyb20gcGlja2xlIGltcG9ydCBieXRlc190eXBlcwogCityZXF1aXJlc18zMmIgPSB1bml0dGVzdC5za2lwVW5sZXNzKHN5cy5tYXhzaXplIDwgMioqMzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0IGlzIG9ubHkgbWVhbmluZ2Z1bCBvbiAzMi1iaXQgYnVpbGRzIikKKwogIyBUZXN0cyB0aGF0IHRyeSBhIG51bWJlciBvZiBwaWNrbGUgcHJvdG9jb2xzIHNob3VsZCBoYXZlIGEKICMgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CiAjIGtpbmQgb2Ygb3V0ZXIgbG9vcC4KQEAgLTkzLDYgKzEwMSwxOCBAQAogICAgIGRlZiBfX2dldGluaXRhcmdzX18oc2VsZik6CiAgICAgICAgIHJldHVybiAoKQogCitjbGFzcyBIKG9iamVjdCk6CisgICAgcGFzcworCisjIEhhc2hhYmxlIG11dGFibGUga2V5CitjbGFzcyBLKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlKToKKyAgICAgICAgc2VsZi52YWx1ZSA9IHZhbHVlCisKKyAgICBkZWYgX19yZWR1Y2VfXyhzZWxmKToKKyAgICAgICAgIyBTaG91bGRuJ3Qgc3VwcG9ydCB0aGUgcmVjdXJzaW9uIGl0c2VsZgorICAgICAgICByZXR1cm4gSywgKHNlbGYudmFsdWUsKQorCiBpbXBvcnQgX19tYWluX18KIF9fbWFpbl9fLkMgPSBDCiBDLl9fbW9kdWxlX18gPSAiX19tYWluX18iCkBAIC0xMDAsNiArMTIwLDEwIEBACiBELl9fbW9kdWxlX18gPSAiX19tYWluX18iCiBfX21haW5fXy5FID0gRQogRS5fX21vZHVsZV9fID0gIl9fbWFpbl9fIgorX19tYWluX18uSCA9IEgKK0guX19tb2R1bGVfXyA9ICJfX21haW5fXyIKK19fbWFpbl9fLksgPSBLCitLLl9fbW9kdWxlX18gPSAiX19tYWluX18iCiAKIGNsYXNzIG15aW50KGludCk6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHgpOgpAQCAtMTMzLDI1ICsxNTcsMjYgQEAKICAgICByZXN1bHQucmVkdWNlX2FyZ3MgPSAobmFtZSwgYmFzZXMpCiAgICAgcmV0dXJuIHJlc3VsdAogCi0jIERBVEEwIC4uIERBVEEyIGFyZSB0aGUgcGlja2xlcyB3ZSBleHBlY3QgdW5kZXIgdGhlIHZhcmlvdXMgcHJvdG9jb2xzLCBmb3IKKyMgREFUQTAgLi4gREFUQTQgYXJlIHRoZSBwaWNrbGVzIHdlIGV4cGVjdCB1bmRlciB0aGUgdmFyaW91cyBwcm90b2NvbHMsIGZvcgogIyB0aGUgb2JqZWN0IHJldHVybmVkIGJ5IGNyZWF0ZV9kYXRhKCkuCiAKIERBVEEwID0gKAotICAgIGInKGxwMFxuTDBMXG5hTDFMXG5hRjIuMFxuYWMnCi0gICAgYididWlsdGluc1xuY29tcGxleFxuJwotICAgIGIncDFcbihGMy4wXG5GMC4wXG50cDJcblJwJwotICAgIGInM1xuYUwxTFxuYUwtMUxcbmFMMjU1TFxuYUwtJwotICAgIGInMjU1TFxuYUwtMjU2TFxuYUw2NTUzNUxcbmEnCi0gICAgYidMLTY1NTM1TFxuYUwtNjU1MzZMXG5hTDInCi0gICAgYicxNDc0ODM2NDdMXG5hTC0yMTQ3NDgzJwotICAgIGInNjQ3TFxuYUwtMjE0NzQ4MzY0OExcbmEoJwotICAgIGInVmFiY1xucDRcbmc0XG5jY29weXJlZycKLSAgICBiJ1xuX3JlY29uc3RydWN0b3JcbnA1XG4oJwotICAgIGInY19fbWFpbl9fXG5DXG5wNlxuY2J1JwotICAgIGInaWx0aW5zXG5vYmplY3RcbnA3XG5OdCcKLSAgICBiJ3A4XG5ScDlcbihkcDEwXG5WZm9vXG5wMScKLSAgICBiJzFcbkwxTFxuc1ZiYXJcbnAxMlxuTDJMXG5zYicKLSAgICBiJ2c5XG50cDEzXG5hZzEzXG5hTDVMXG5hLicKKyAgICBiJyhscDBcbkwwTFxuYUwxTFxuYUYyLjBcbicKKyAgICBiJ2FjX19idWlsdGluX19cbmNvbXBsZScKKyAgICBiJ3hcbnAxXG4oRjMuMFxuRjAuMFxudHAyXG4nCisgICAgYidScDNcbmFMMUxcbmFMLTFMXG5hTDI1NScKKyAgICBiJ0xcbmFMLTI1NUxcbmFMLTI1NkxcbmFMJworICAgIGInNjU1MzVMXG5hTC02NTUzNUxcbmFMLScKKyAgICBiJzY1NTM2TFxuYUwyMTQ3NDgzNjQ3TCcKKyAgICBiJ1xuYUwtMjE0NzQ4MzY0N0xcbmFMLTInCisgICAgYicxNDc0ODM2NDhMXG5hKFZhYmNcbnA0JworICAgIGInXG5nNFxuY2NvcHlfcmVnXG5fcmVjb24nCisgICAgYidzdHJ1Y3RvclxucDVcbihjX19tYWluJworICAgIGInX19cbkNcbnA2XG5jX19idWlsdGluX18nCisgICAgYidcbm9iamVjdFxucDdcbk50cDhcblJwOVxuJworICAgIGInKGRwMTBcblZmb29cbnAxMVxuTDFMXG5zJworICAgIGInVmJhclxucDEyXG5MMkxcbnNiZzlcbnRwJworICAgIGInMTNcbmFnMTNcbmFMNUxcbmEuJwogKQogCiAjIERpc2Fzc2VtYmx5IG9mIERBVEEwCkBAIC0xNjUsODggKzE5MCw4OCBAQAogICAgMTQ6IGEgICAgQVBQRU5ECiAgICAxNTogRiAgICBGTE9BVCAgICAgIDIuMAogICAgMjA6IGEgICAgQVBQRU5ECi0gICAyMTogYyAgICBHTE9CQUwgICAgICdidWlsdGlucyBjb21wbGV4JwotICAgMzk6IHAgICAgUFVUICAgICAgICAxCi0gICA0MjogKCAgICBNQVJLCi0gICA0MzogRiAgICAgICAgRkxPQVQgICAgICAzLjAKLSAgIDQ4OiBGICAgICAgICBGTE9BVCAgICAgIDAuMAotICAgNTM6IHQgICAgICAgIFRVUExFICAgICAgKE1BUksgYXQgNDIpCi0gICA1NDogcCAgICBQVVQgICAgICAgIDIKLSAgIDU3OiBSICAgIFJFRFVDRQotICAgNTg6IHAgICAgUFVUICAgICAgICAzCi0gICA2MTogYSAgICBBUFBFTkQKLSAgIDYyOiBMICAgIExPTkcgICAgICAgMQotICAgNjY6IGEgICAgQVBQRU5ECi0gICA2NzogTCAgICBMT05HICAgICAgIC0xCi0gICA3MjogYSAgICBBUFBFTkQKLSAgIDczOiBMICAgIExPTkcgICAgICAgMjU1Ci0gICA3OTogYSAgICBBUFBFTkQKLSAgIDgwOiBMICAgIExPTkcgICAgICAgLTI1NQotICAgODc6IGEgICAgQVBQRU5ECi0gICA4ODogTCAgICBMT05HICAgICAgIC0yNTYKLSAgIDk1OiBhICAgIEFQUEVORAotICAgOTY6IEwgICAgTE9ORyAgICAgICA2NTUzNQotICAxMDQ6IGEgICAgQVBQRU5ECi0gIDEwNTogTCAgICBMT05HICAgICAgIC02NTUzNQotICAxMTQ6IGEgICAgQVBQRU5ECi0gIDExNTogTCAgICBMT05HICAgICAgIC02NTUzNgotICAxMjQ6IGEgICAgQVBQRU5ECi0gIDEyNTogTCAgICBMT05HICAgICAgIDIxNDc0ODM2NDcKLSAgMTM4OiBhICAgIEFQUEVORAotICAxMzk6IEwgICAgTE9ORyAgICAgICAtMjE0NzQ4MzY0NwotICAxNTM6IGEgICAgQVBQRU5ECi0gIDE1NDogTCAgICBMT05HICAgICAgIC0yMTQ3NDgzNjQ4Ci0gIDE2ODogYSAgICBBUFBFTkQKLSAgMTY5OiAoICAgIE1BUksKLSAgMTcwOiBWICAgICAgICBVTklDT0RFICAgICdhYmMnCi0gIDE3NTogcCAgICAgICAgUFVUICAgICAgICA0Ci0gIDE3ODogZyAgICAgICAgR0VUICAgICAgICA0Ci0gIDE4MTogYyAgICAgICAgR0xPQkFMICAgICAnY29weXJlZyBfcmVjb25zdHJ1Y3RvcicKLSAgMjA1OiBwICAgICAgICBQVVQgICAgICAgIDUKLSAgMjA4OiAoICAgICAgICBNQVJLCi0gIDIwOTogYyAgICAgICAgICAgIEdMT0JBTCAgICAgJ19fbWFpbl9fIEMnCi0gIDIyMTogcCAgICAgICAgICAgIFBVVCAgICAgICAgNgotICAyMjQ6IGMgICAgICAgICAgICBHTE9CQUwgICAgICdidWlsdGlucyBvYmplY3QnCi0gIDI0MTogcCAgICAgICAgICAgIFBVVCAgICAgICAgNwotICAyNDQ6IE4gICAgICAgICAgICBOT05FCi0gIDI0NTogdCAgICAgICAgICAgIFRVUExFICAgICAgKE1BUksgYXQgMjA4KQotICAyNDY6IHAgICAgICAgIFBVVCAgICAgICAgOAotICAyNDk6IFIgICAgICAgIFJFRFVDRQotICAyNTA6IHAgICAgICAgIFBVVCAgICAgICAgOQotICAyNTM6ICggICAgICAgIE1BUksKLSAgMjU0OiBkICAgICAgICAgICAgRElDVCAgICAgICAoTUFSSyBhdCAyNTMpCi0gIDI1NTogcCAgICAgICAgUFVUICAgICAgICAxMAotICAyNTk6IFYgICAgICAgIFVOSUNPREUgICAgJ2ZvbycKLSAgMjY0OiBwICAgICAgICBQVVQgICAgICAgIDExCi0gIDI2ODogTCAgICAgICAgTE9ORyAgICAgICAxCi0gIDI3MjogcyAgICAgICAgU0VUSVRFTQotICAyNzM6IFYgICAgICAgIFVOSUNPREUgICAgJ2JhcicKLSAgMjc4OiBwICAgICAgICBQVVQgICAgICAgIDEyCi0gIDI4MjogTCAgICAgICAgTE9ORyAgICAgICAyCi0gIDI4NjogcyAgICAgICAgU0VUSVRFTQotICAyODc6IGIgICAgICAgIEJVSUxECi0gIDI4ODogZyAgICAgICAgR0VUICAgICAgICA5Ci0gIDI5MTogdCAgICAgICAgVFVQTEUgICAgICAoTUFSSyBhdCAxNjkpCi0gIDI5MjogcCAgICBQVVQgICAgICAgIDEzCi0gIDI5NjogYSAgICBBUFBFTkQKLSAgMjk3OiBnICAgIEdFVCAgICAgICAgMTMKLSAgMzAxOiBhICAgIEFQUEVORAotICAzMDI6IEwgICAgTE9ORyAgICAgICA1Ci0gIDMwNjogYSAgICBBUFBFTkQKLSAgMzA3OiAuICAgIFNUT1AKKyAgIDIxOiBjICAgIEdMT0JBTCAgICAgJ19fYnVpbHRpbl9fIGNvbXBsZXgnCisgICA0MjogcCAgICBQVVQgICAgICAgIDEKKyAgIDQ1OiAoICAgIE1BUksKKyAgIDQ2OiBGICAgICAgICBGTE9BVCAgICAgIDMuMAorICAgNTE6IEYgICAgICAgIEZMT0FUICAgICAgMC4wCisgICA1NjogdCAgICAgICAgVFVQTEUgICAgICAoTUFSSyBhdCA0NSkKKyAgIDU3OiBwICAgIFBVVCAgICAgICAgMgorICAgNjA6IFIgICAgUkVEVUNFCisgICA2MTogcCAgICBQVVQgICAgICAgIDMKKyAgIDY0OiBhICAgIEFQUEVORAorICAgNjU6IEwgICAgTE9ORyAgICAgICAxCisgICA2OTogYSAgICBBUFBFTkQKKyAgIDcwOiBMICAgIExPTkcgICAgICAgLTEKKyAgIDc1OiBhICAgIEFQUEVORAorICAgNzY6IEwgICAgTE9ORyAgICAgICAyNTUKKyAgIDgyOiBhICAgIEFQUEVORAorICAgODM6IEwgICAgTE9ORyAgICAgICAtMjU1CisgICA5MDogYSAgICBBUFBFTkQKKyAgIDkxOiBMICAgIExPTkcgICAgICAgLTI1NgorICAgOTg6IGEgICAgQVBQRU5ECisgICA5OTogTCAgICBMT05HICAgICAgIDY1NTM1CisgIDEwNzogYSAgICBBUFBFTkQKKyAgMTA4OiBMICAgIExPTkcgICAgICAgLTY1NTM1CisgIDExNzogYSAgICBBUFBFTkQKKyAgMTE4OiBMICAgIExPTkcgICAgICAgLTY1NTM2CisgIDEyNzogYSAgICBBUFBFTkQKKyAgMTI4OiBMICAgIExPTkcgICAgICAgMjE0NzQ4MzY0NworICAxNDE6IGEgICAgQVBQRU5ECisgIDE0MjogTCAgICBMT05HICAgICAgIC0yMTQ3NDgzNjQ3CisgIDE1NjogYSAgICBBUFBFTkQKKyAgMTU3OiBMICAgIExPTkcgICAgICAgLTIxNDc0ODM2NDgKKyAgMTcxOiBhICAgIEFQUEVORAorICAxNzI6ICggICAgTUFSSworICAxNzM6IFYgICAgICAgIFVOSUNPREUgICAgJ2FiYycKKyAgMTc4OiBwICAgICAgICBQVVQgICAgICAgIDQKKyAgMTgxOiBnICAgICAgICBHRVQgICAgICAgIDQKKyAgMTg0OiBjICAgICAgICBHTE9CQUwgICAgICdjb3B5X3JlZyBfcmVjb25zdHJ1Y3RvcicKKyAgMjA5OiBwICAgICAgICBQVVQgICAgICAgIDUKKyAgMjEyOiAoICAgICAgICBNQVJLCisgIDIxMzogYyAgICAgICAgICAgIEdMT0JBTCAgICAgJ19fbWFpbl9fIEMnCisgIDIyNTogcCAgICAgICAgICAgIFBVVCAgICAgICAgNgorICAyMjg6IGMgICAgICAgICAgICBHTE9CQUwgICAgICdfX2J1aWx0aW5fXyBvYmplY3QnCisgIDI0ODogcCAgICAgICAgICAgIFBVVCAgICAgICAgNworICAyNTE6IE4gICAgICAgICAgICBOT05FCisgIDI1MjogdCAgICAgICAgICAgIFRVUExFICAgICAgKE1BUksgYXQgMjEyKQorICAyNTM6IHAgICAgICAgIFBVVCAgICAgICAgOAorICAyNTY6IFIgICAgICAgIFJFRFVDRQorICAyNTc6IHAgICAgICAgIFBVVCAgICAgICAgOQorICAyNjA6ICggICAgICAgIE1BUksKKyAgMjYxOiBkICAgICAgICAgICAgRElDVCAgICAgICAoTUFSSyBhdCAyNjApCisgIDI2MjogcCAgICAgICAgUFVUICAgICAgICAxMAorICAyNjY6IFYgICAgICAgIFVOSUNPREUgICAgJ2ZvbycKKyAgMjcxOiBwICAgICAgICBQVVQgICAgICAgIDExCisgIDI3NTogTCAgICAgICAgTE9ORyAgICAgICAxCisgIDI3OTogcyAgICAgICAgU0VUSVRFTQorICAyODA6IFYgICAgICAgIFVOSUNPREUgICAgJ2JhcicKKyAgMjg1OiBwICAgICAgICBQVVQgICAgICAgIDEyCisgIDI4OTogTCAgICAgICAgTE9ORyAgICAgICAyCisgIDI5MzogcyAgICAgICAgU0VUSVRFTQorICAyOTQ6IGIgICAgICAgIEJVSUxECisgIDI5NTogZyAgICAgICAgR0VUICAgICAgICA5CisgIDI5ODogdCAgICAgICAgVFVQTEUgICAgICAoTUFSSyBhdCAxNzIpCisgIDI5OTogcCAgICBQVVQgICAgICAgIDEzCisgIDMwMzogYSAgICBBUFBFTkQKKyAgMzA0OiBnICAgIEdFVCAgICAgICAgMTMKKyAgMzA4OiBhICAgIEFQUEVORAorICAzMDk6IEwgICAgTE9ORyAgICAgICA1CisgIDMxMzogYSAgICBBUFBFTkQKKyAgMzE0OiAuICAgIFNUT1AKIGhpZ2hlc3QgcHJvdG9jb2wgYW1vbmcgb3Bjb2RlcyA9IDAKICIiIgogCiBEQVRBMSA9ICgKLSAgICBiJ11xXHgwMChLXHgwMEtceDAxR0BceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwYycKLSAgICBiJ2J1aWx0aW5zXG5jb21wbGV4XG5xXHgwMScKKyAgICBiJ11xXHgwMChLXHgwMEtceDAxR0BceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwY19fJworICAgIGInYnVpbHRpbl9fXG5jb21wbGV4XG5xXHgwMScKICAgICBiJyhHQFx4MDhceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBHXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDB0JwogICAgIGIncVx4MDJScVx4MDNLXHgwMUpceGZmXHhmZlx4ZmZceGZmS1x4ZmZKXHgwMVx4ZmZceGZmXHhmZkonCiAgICAgYidceDAwXHhmZlx4ZmZceGZmTVx4ZmZceGZmSlx4MDFceDAwXHhmZlx4ZmZKXHgwMFx4MDBceGZmXHhmZkpceGZmXHhmZicKICAgICBiJ1x4ZmZceDdmSlx4MDFceDAwXHgwMFx4ODBKXHgwMFx4MDBceDAwXHg4MChYXHgwM1x4MDBceDAwXHgwMGFiJwotICAgIGInY3FceDA0aFx4MDRjY29weXJlZ1xuX3JlY28nCisgICAgYidjcVx4MDRoXHgwNGNjb3B5X3JlZ1xuX3JlY28nCiAgICAgYiduc3RydWN0b3JcbnFceDA1KGNfX21haW4nCi0gICAgYidfX1xuQ1xucVx4MDZjYnVpbHRpbnNcbicKKyAgICBiJ19fXG5DXG5xXHgwNmNfX2J1aWx0aW5fX1xuJwogICAgIGInb2JqZWN0XG5xXHgwN050cVx4MDhScVx0fXFcbignCiAgICAgYidYXHgwM1x4MDBceDAwXHgwMGZvb3FceDBiS1x4MDFYXHgwM1x4MDBceDAwXHgwMGJhcicKICAgICBiJ3FceDBjS1x4MDJ1YmhcdHRxXHJoXHJLXHgwNWUuJwpAQCAtMjYwLDY2ICsyODUsNjYgQEAKICAgICA0OiBLICAgICAgICBCSU5JTlQxICAgIDAKICAgICA2OiBLICAgICAgICBCSU5JTlQxICAgIDEKICAgICA4OiBHICAgICAgICBCSU5GTE9BVCAgIDIuMAotICAgMTc6IGMgICAgICAgIEdMT0JBTCAgICAgJ2J1aWx0aW5zIGNvbXBsZXgnCi0gICAzNTogcSAgICAgICAgQklOUFVUICAgICAxCi0gICAzNzogKCAgICAgICAgTUFSSwotICAgMzg6IEcgICAgICAgICAgICBCSU5GTE9BVCAgIDMuMAotICAgNDc6IEcgICAgICAgICAgICBCSU5GTE9BVCAgIDAuMAotICAgNTY6IHQgICAgICAgICAgICBUVVBMRSAgICAgIChNQVJLIGF0IDM3KQotICAgNTc6IHEgICAgICAgIEJJTlBVVCAgICAgMgotICAgNTk6IFIgICAgICAgIFJFRFVDRQotICAgNjA6IHEgICAgICAgIEJJTlBVVCAgICAgMwotICAgNjI6IEsgICAgICAgIEJJTklOVDEgICAgMQotICAgNjQ6IEogICAgICAgIEJJTklOVCAgICAgLTEKLSAgIDY5OiBLICAgICAgICBCSU5JTlQxICAgIDI1NQotICAgNzE6IEogICAgICAgIEJJTklOVCAgICAgLTI1NQotICAgNzY6IEogICAgICAgIEJJTklOVCAgICAgLTI1NgotICAgODE6IE0gICAgICAgIEJJTklOVDIgICAgNjU1MzUKLSAgIDg0OiBKICAgICAgICBCSU5JTlQgICAgIC02NTUzNQotICAgODk6IEogICAgICAgIEJJTklOVCAgICAgLTY1NTM2Ci0gICA5NDogSiAgICAgICAgQklOSU5UICAgICAyMTQ3NDgzNjQ3Ci0gICA5OTogSiAgICAgICAgQklOSU5UICAgICAtMjE0NzQ4MzY0NwotICAxMDQ6IEogICAgICAgIEJJTklOVCAgICAgLTIxNDc0ODM2NDgKLSAgMTA5OiAoICAgICAgICBNQVJLCi0gIDExMDogWCAgICAgICAgICAgIEJJTlVOSUNPREUgJ2FiYycKLSAgMTE4OiBxICAgICAgICAgICAgQklOUFVUICAgICA0Ci0gIDEyMDogaCAgICAgICAgICAgIEJJTkdFVCAgICAgNAotICAxMjI6IGMgICAgICAgICAgICBHTE9CQUwgICAgICdjb3B5cmVnIF9yZWNvbnN0cnVjdG9yJwotICAxNDY6IHEgICAgICAgICAgICBCSU5QVVQgICAgIDUKLSAgMTQ4OiAoICAgICAgICAgICAgTUFSSwotICAxNDk6IGMgICAgICAgICAgICAgICAgR0xPQkFMICAgICAnX19tYWluX18gQycKLSAgMTYxOiBxICAgICAgICAgICAgICAgIEJJTlBVVCAgICAgNgotICAxNjM6IGMgICAgICAgICAgICAgICAgR0xPQkFMICAgICAnYnVpbHRpbnMgb2JqZWN0JwotICAxODA6IHEgICAgICAgICAgICAgICAgQklOUFVUICAgICA3Ci0gIDE4MjogTiAgICAgICAgICAgICAgICBOT05FCi0gIDE4MzogdCAgICAgICAgICAgICAgICBUVVBMRSAgICAgIChNQVJLIGF0IDE0OCkKLSAgMTg0OiBxICAgICAgICAgICAgQklOUFVUICAgICA4Ci0gIDE4NjogUiAgICAgICAgICAgIFJFRFVDRQotICAxODc6IHEgICAgICAgICAgICBCSU5QVVQgICAgIDkKLSAgMTg5OiB9ICAgICAgICAgICAgRU1QVFlfRElDVAotICAxOTA6IHEgICAgICAgICAgICBCSU5QVVQgICAgIDEwCi0gIDE5MjogKCAgICAgICAgICAgIE1BUksKLSAgMTkzOiBYICAgICAgICAgICAgICAgIEJJTlVOSUNPREUgJ2ZvbycKLSAgMjAxOiBxICAgICAgICAgICAgICAgIEJJTlBVVCAgICAgMTEKLSAgMjAzOiBLICAgICAgICAgICAgICAgIEJJTklOVDEgICAgMQotICAyMDU6IFggICAgICAgICAgICAgICAgQklOVU5JQ09ERSAnYmFyJwotICAyMTM6IHEgICAgICAgICAgICAgICAgQklOUFVUICAgICAxMgotICAyMTU6IEsgICAgICAgICAgICAgICAgQklOSU5UMSAgICAyCi0gIDIxNzogdSAgICAgICAgICAgICAgICBTRVRJVEVNUyAgIChNQVJLIGF0IDE5MikKLSAgMjE4OiBiICAgICAgICAgICAgQlVJTEQKLSAgMjE5OiBoICAgICAgICAgICAgQklOR0VUICAgICA5Ci0gIDIyMTogdCAgICAgICAgICAgIFRVUExFICAgICAgKE1BUksgYXQgMTA5KQotICAyMjI6IHEgICAgICAgIEJJTlBVVCAgICAgMTMKLSAgMjI0OiBoICAgICAgICBCSU5HRVQgICAgIDEzCi0gIDIyNjogSyAgICAgICAgQklOSU5UMSAgICA1Ci0gIDIyODogZSAgICAgICAgQVBQRU5EUyAgICAoTUFSSyBhdCAzKQotICAyMjk6IC4gICAgU1RPUAorICAgMTc6IGMgICAgICAgIEdMT0JBTCAgICAgJ19fYnVpbHRpbl9fIGNvbXBsZXgnCisgICAzODogcSAgICAgICAgQklOUFVUICAgICAxCisgICA0MDogKCAgICAgICAgTUFSSworICAgNDE6IEcgICAgICAgICAgICBCSU5GTE9BVCAgIDMuMAorICAgNTA6IEcgICAgICAgICAgICBCSU5GTE9BVCAgIDAuMAorICAgNTk6IHQgICAgICAgICAgICBUVVBMRSAgICAgIChNQVJLIGF0IDQwKQorICAgNjA6IHEgICAgICAgIEJJTlBVVCAgICAgMgorICAgNjI6IFIgICAgICAgIFJFRFVDRQorICAgNjM6IHEgICAgICAgIEJJTlBVVCAgICAgMworICAgNjU6IEsgICAgICAgIEJJTklOVDEgICAgMQorICAgNjc6IEogICAgICAgIEJJTklOVCAgICAgLTEKKyAgIDcyOiBLICAgICAgICBCSU5JTlQxICAgIDI1NQorICAgNzQ6IEogICAgICAgIEJJTklOVCAgICAgLTI1NQorICAgNzk6IEogICAgICAgIEJJTklOVCAgICAgLTI1NgorICAgODQ6IE0gICAgICAgIEJJTklOVDIgICAgNjU1MzUKKyAgIDg3OiBKICAgICAgICBCSU5JTlQgICAgIC02NTUzNQorICAgOTI6IEogICAgICAgIEJJTklOVCAgICAgLTY1NTM2CisgICA5NzogSiAgICAgICAgQklOSU5UICAgICAyMTQ3NDgzNjQ3CisgIDEwMjogSiAgICAgICAgQklOSU5UICAgICAtMjE0NzQ4MzY0NworICAxMDc6IEogICAgICAgIEJJTklOVCAgICAgLTIxNDc0ODM2NDgKKyAgMTEyOiAoICAgICAgICBNQVJLCisgIDExMzogWCAgICAgICAgICAgIEJJTlVOSUNPREUgJ2FiYycKKyAgMTIxOiBxICAgICAgICAgICAgQklOUFVUICAgICA0CisgIDEyMzogaCAgICAgICAgICAgIEJJTkdFVCAgICAgNAorICAxMjU6IGMgICAgICAgICAgICBHTE9CQUwgICAgICdjb3B5X3JlZyBfcmVjb25zdHJ1Y3RvcicKKyAgMTUwOiBxICAgICAgICAgICAgQklOUFVUICAgICA1CisgIDE1MjogKCAgICAgICAgICAgIE1BUksKKyAgMTUzOiBjICAgICAgICAgICAgICAgIEdMT0JBTCAgICAgJ19fbWFpbl9fIEMnCisgIDE2NTogcSAgICAgICAgICAgICAgICBCSU5QVVQgICAgIDYKKyAgMTY3OiBjICAgICAgICAgICAgICAgIEdMT0JBTCAgICAgJ19fYnVpbHRpbl9fIG9iamVjdCcKKyAgMTg3OiBxICAgICAgICAgICAgICAgIEJJTlBVVCAgICAgNworICAxODk6IE4gICAgICAgICAgICAgICAgTk9ORQorICAxOTA6IHQgICAgICAgICAgICAgICAgVFVQTEUgICAgICAoTUFSSyBhdCAxNTIpCisgIDE5MTogcSAgICAgICAgICAgIEJJTlBVVCAgICAgOAorICAxOTM6IFIgICAgICAgICAgICBSRURVQ0UKKyAgMTk0OiBxICAgICAgICAgICAgQklOUFVUICAgICA5CisgIDE5NjogfSAgICAgICAgICAgIEVNUFRZX0RJQ1QKKyAgMTk3OiBxICAgICAgICAgICAgQklOUFVUICAgICAxMAorICAxOTk6ICggICAgICAgICAgICBNQVJLCisgIDIwMDogWCAgICAgICAgICAgICAgICBCSU5VTklDT0RFICdmb28nCisgIDIwODogcSAgICAgICAgICAgICAgICBCSU5QVVQgICAgIDExCisgIDIxMDogSyAgICAgICAgICAgICAgICBCSU5JTlQxICAgIDEKKyAgMjEyOiBYICAgICAgICAgICAgICAgIEJJTlVOSUNPREUgJ2JhcicKKyAgMjIwOiBxICAgICAgICAgICAgICAgIEJJTlBVVCAgICAgMTIKKyAgMjIyOiBLICAgICAgICAgICAgICAgIEJJTklOVDEgICAgMgorICAyMjQ6IHUgICAgICAgICAgICAgICAgU0VUSVRFTVMgICAoTUFSSyBhdCAxOTkpCisgIDIyNTogYiAgICAgICAgICAgIEJVSUxECisgIDIyNjogaCAgICAgICAgICAgIEJJTkdFVCAgICAgOQorICAyMjg6IHQgICAgICAgICAgICBUVVBMRSAgICAgIChNQVJLIGF0IDExMikKKyAgMjI5OiBxICAgICAgICBCSU5QVVQgICAgIDEzCisgIDIzMTogaCAgICAgICAgQklOR0VUICAgICAxMworICAyMzM6IEsgICAgICAgIEJJTklOVDEgICAgNQorICAyMzU6IGUgICAgICAgIEFQUEVORFMgICAgKE1BUksgYXQgMykKKyAgMjM2OiAuICAgIFNUT1AKIGhpZ2hlc3QgcHJvdG9jb2wgYW1vbmcgb3Bjb2RlcyA9IDEKICIiIgogCiBEQVRBMiA9ICgKICAgICBiJ1x4ODBceDAyXXFceDAwKEtceDAwS1x4MDFHQFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBjJwotICAgIGInYnVpbHRpbnNcbmNvbXBsZXhcbicKKyAgICBiJ19fYnVpbHRpbl9fXG5jb21wbGV4XG4nCiAgICAgYidxXHgwMUdAXHgwOFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMEdceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCcKICAgICBiJ1x4ODZxXHgwMlJxXHgwM0tceDAxSlx4ZmZceGZmXHhmZlx4ZmZLXHhmZkpceDAxXHhmZlx4ZmZceGZmJwogICAgIGInSlx4MDBceGZmXHhmZlx4ZmZNXHhmZlx4ZmZKXHgwMVx4MDBceGZmXHhmZkpceDAwXHgwMFx4ZmZceGZmSlx4ZmYnCkBAIC0zMzksNiArMzY0LDc3IEBACiAgICAgNjogSyAgICAgICAgQklOSU5UMSAgICAwCiAgICAgODogSyAgICAgICAgQklOSU5UMSAgICAxCiAgICAxMDogRyAgICAgICAgQklORkxPQVQgICAyLjAKKyAgIDE5OiBjICAgICAgICBHTE9CQUwgICAgICdfX2J1aWx0aW5fXyBjb21wbGV4JworICAgNDA6IHEgICAgICAgIEJJTlBVVCAgICAgMQorICAgNDI6IEcgICAgICAgIEJJTkZMT0FUICAgMy4wCisgICA1MTogRyAgICAgICAgQklORkxPQVQgICAwLjAKKyAgIDYwOiBceDg2ICAgICBUVVBMRTIKKyAgIDYxOiBxICAgICAgICBCSU5QVVQgICAgIDIKKyAgIDYzOiBSICAgICAgICBSRURVQ0UKKyAgIDY0OiBxICAgICAgICBCSU5QVVQgICAgIDMKKyAgIDY2OiBLICAgICAgICBCSU5JTlQxICAgIDEKKyAgIDY4OiBKICAgICAgICBCSU5JTlQgICAgIC0xCisgICA3MzogSyAgICAgICAgQklOSU5UMSAgICAyNTUKKyAgIDc1OiBKICAgICAgICBCSU5JTlQgICAgIC0yNTUKKyAgIDgwOiBKICAgICAgICBCSU5JTlQgICAgIC0yNTYKKyAgIDg1OiBNICAgICAgICBCSU5JTlQyICAgIDY1NTM1CisgICA4ODogSiAgICAgICAgQklOSU5UICAgICAtNjU1MzUKKyAgIDkzOiBKICAgICAgICBCSU5JTlQgICAgIC02NTUzNgorICAgOTg6IEogICAgICAgIEJJTklOVCAgICAgMjE0NzQ4MzY0NworICAxMDM6IEogICAgICAgIEJJTklOVCAgICAgLTIxNDc0ODM2NDcKKyAgMTA4OiBKICAgICAgICBCSU5JTlQgICAgIC0yMTQ3NDgzNjQ4CisgIDExMzogKCAgICAgICAgTUFSSworICAxMTQ6IFggICAgICAgICAgICBCSU5VTklDT0RFICdhYmMnCisgIDEyMjogcSAgICAgICAgICAgIEJJTlBVVCAgICAgNAorICAxMjQ6IGggICAgICAgICAgICBCSU5HRVQgICAgIDQKKyAgMTI2OiBjICAgICAgICAgICAgR0xPQkFMICAgICAnX19tYWluX18gQycKKyAgMTM4OiBxICAgICAgICAgICAgQklOUFVUICAgICA1CisgIDE0MDogKSAgICAgICAgICAgIEVNUFRZX1RVUExFCisgIDE0MTogXHg4MSAgICAgICAgIE5FV09CSgorICAxNDI6IHEgICAgICAgICAgICBCSU5QVVQgICAgIDYKKyAgMTQ0OiB9ICAgICAgICAgICAgRU1QVFlfRElDVAorICAxNDU6IHEgICAgICAgICAgICBCSU5QVVQgICAgIDcKKyAgMTQ3OiAoICAgICAgICAgICAgTUFSSworICAxNDg6IFggICAgICAgICAgICAgICAgQklOVU5JQ09ERSAnZm9vJworICAxNTY6IHEgICAgICAgICAgICAgICAgQklOUFVUICAgICA4CisgIDE1ODogSyAgICAgICAgICAgICAgICBCSU5JTlQxICAgIDEKKyAgMTYwOiBYICAgICAgICAgICAgICAgIEJJTlVOSUNPREUgJ2JhcicKKyAgMTY4OiBxICAgICAgICAgICAgICAgIEJJTlBVVCAgICAgOQorICAxNzA6IEsgICAgICAgICAgICAgICAgQklOSU5UMSAgICAyCisgIDE3MjogdSAgICAgICAgICAgICAgICBTRVRJVEVNUyAgIChNQVJLIGF0IDE0NykKKyAgMTczOiBiICAgICAgICAgICAgQlVJTEQKKyAgMTc0OiBoICAgICAgICAgICAgQklOR0VUICAgICA2CisgIDE3NjogdCAgICAgICAgICAgIFRVUExFICAgICAgKE1BUksgYXQgMTEzKQorICAxNzc6IHEgICAgICAgIEJJTlBVVCAgICAgMTAKKyAgMTc5OiBoICAgICAgICBCSU5HRVQgICAgIDEwCisgIDE4MTogSyAgICAgICAgQklOSU5UMSAgICA1CisgIDE4MzogZSAgICAgICAgQVBQRU5EUyAgICAoTUFSSyBhdCA1KQorICAxODQ6IC4gICAgU1RPUAoraGlnaGVzdCBwcm90b2NvbCBhbW9uZyBvcGNvZGVzID0gMgorIiIiCisKK0RBVEEzID0gKAorICAgIGInXHg4MFx4MDNdcVx4MDAoS1x4MDBLXHgwMUdAXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMGMnCisgICAgYididWlsdGluc1xuY29tcGxleFxucVx4MDFHJworICAgIGInQFx4MDhceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBHXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDg2cVx4MDInCisgICAgYidScVx4MDNLXHgwMUpceGZmXHhmZlx4ZmZceGZmS1x4ZmZKXHgwMVx4ZmZceGZmXHhmZkpceDAwXHhmZicKKyAgICBiJ1x4ZmZceGZmTVx4ZmZceGZmSlx4MDFceDAwXHhmZlx4ZmZKXHgwMFx4MDBceGZmXHhmZkpceGZmXHhmZlx4ZmZceDdmJworICAgIGInSlx4MDFceDAwXHgwMFx4ODBKXHgwMFx4MDBceDAwXHg4MChYXHgwM1x4MDBceDAwXHgwMGFiY3EnCisgICAgYidceDA0aFx4MDRjX19tYWluX19cbkNcbnFceDA1KVx4ODFxJworICAgIGInXHgwNn1xXHgwNyhYXHgwM1x4MDBceDAwXHgwMGJhcnFceDA4S1x4MDJYXHgwM1x4MDAnCisgICAgYidceDAwXHgwMGZvb3FcdEtceDAxdWJoXHgwNnRxXG5oXG5LXHgwNScKKyAgICBiJ2UuJworKQorCisjIERpc2Fzc2VtYmx5IG9mIERBVEEzCitEQVRBM19ESVMgPSAiIiJcCisgICAgMDogXHg4MCBQUk9UTyAgICAgIDMKKyAgICAyOiBdICAgIEVNUFRZX0xJU1QKKyAgICAzOiBxICAgIEJJTlBVVCAgICAgMAorICAgIDU6ICggICAgTUFSSworICAgIDY6IEsgICAgICAgIEJJTklOVDEgICAgMAorICAgIDg6IEsgICAgICAgIEJJTklOVDEgICAgMQorICAgMTA6IEcgICAgICAgIEJJTkZMT0FUICAgMi4wCiAgICAxOTogYyAgICAgICAgR0xPQkFMICAgICAnYnVpbHRpbnMgY29tcGxleCcKICAgIDM3OiBxICAgICAgICBCSU5QVVQgICAgIDEKICAgIDM5OiBHICAgICAgICBCSU5GTE9BVCAgIDMuMApAQCAtMzcwLDEyICs0NjYsMTIgQEAKICAgMTQxOiB9ICAgICAgICAgICAgRU1QVFlfRElDVAogICAxNDI6IHEgICAgICAgICAgICBCSU5QVVQgICAgIDcKICAgMTQ0OiAoICAgICAgICAgICAgTUFSSwotICAxNDU6IFggICAgICAgICAgICAgICAgQklOVU5JQ09ERSAnZm9vJworICAxNDU6IFggICAgICAgICAgICAgICAgQklOVU5JQ09ERSAnYmFyJwogICAxNTM6IHEgICAgICAgICAgICAgICAgQklOUFVUICAgICA4Ci0gIDE1NTogSyAgICAgICAgICAgICAgICBCSU5JTlQxICAgIDEKLSAgMTU3OiBYICAgICAgICAgICAgICAgIEJJTlVOSUNPREUgJ2JhcicKKyAgMTU1OiBLICAgICAgICAgICAgICAgIEJJTklOVDEgICAgMgorICAxNTc6IFggICAgICAgICAgICAgICAgQklOVU5JQ09ERSAnZm9vJwogICAxNjU6IHEgICAgICAgICAgICAgICAgQklOUFVUICAgICA5Ci0gIDE2NzogSyAgICAgICAgICAgICAgICBCSU5JTlQxICAgIDIKKyAgMTY3OiBLICAgICAgICAgICAgICAgIEJJTklOVDEgICAgMQogICAxNjk6IHUgICAgICAgICAgICAgICAgU0VUSVRFTVMgICAoTUFSSyBhdCAxNDQpCiAgIDE3MDogYiAgICAgICAgICAgIEJVSUxECiAgIDE3MTogaCAgICAgICAgICAgIEJJTkdFVCAgICAgNgpAQCAtMzg4LDIyICs0ODQsMTAxIEBACiBoaWdoZXN0IHByb3RvY29sIGFtb25nIG9wY29kZXMgPSAyCiAiIiIKIAorREFUQTQgPSAoCisgICAgYidceDgwXHgwNFx4OTVceGE4XHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMF1ceDk0KEtceDAwS1x4MDFHQCcKKyAgICBiJ1x4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDhjXHgwOGJ1aWx0aW5zXHg5NFx4OGNceDA3JworICAgIGInY29tcGxleFx4OTRceDkzXHg5NEdAXHgwOFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMEcnCisgICAgYidceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4ODZceDk0Ulx4OTRLXHgwMUpceGZmXHhmZlx4ZmZceGZmSycKKyAgICBiJ1x4ZmZKXHgwMVx4ZmZceGZmXHhmZkpceDAwXHhmZlx4ZmZceGZmTVx4ZmZceGZmSlx4MDFceDAwXHhmZlx4ZmZKJworICAgIGInXHgwMFx4MDBceGZmXHhmZkpceGZmXHhmZlx4ZmZceDdmSlx4MDFceDAwXHgwMFx4ODBKXHgwMFx4MDBceDAwXHg4MCgnCisgICAgYidceDhjXHgwM2FiY1x4OTRoXHgwNlx4OGNceDA4X19tYWluX19ceDk0XHg4YycKKyAgICBiJ1x4MDFDXHg5NFx4OTNceDk0KVx4ODFceDk0fVx4OTQoXHg4Y1x4MDNiYXJceDk0S1x4MDJceDhjJworICAgIGInXHgwM2Zvb1x4OTRLXHgwMXViaFxudFx4OTRoXHgwZUtceDA1ZS4nCispCisKKyMgRGlzYXNzZW1ibHkgb2YgREFUQTQKK0RBVEE0X0RJUyA9ICIiIlwKKyAgICAwOiBceDgwIFBST1RPICAgICAgNAorICAgIDI6IFx4OTUgRlJBTUUgICAgICAxNjgKKyAgIDExOiBdICAgIEVNUFRZX0xJU1QKKyAgIDEyOiBceDk0IE1FTU9JWkUKKyAgIDEzOiAoICAgIE1BUksKKyAgIDE0OiBLICAgICAgICBCSU5JTlQxICAgIDAKKyAgIDE2OiBLICAgICAgICBCSU5JTlQxICAgIDEKKyAgIDE4OiBHICAgICAgICBCSU5GTE9BVCAgIDIuMAorICAgMjc6IFx4OGMgICAgIFNIT1JUX0JJTlVOSUNPREUgJ2J1aWx0aW5zJworICAgMzc6IFx4OTQgICAgIE1FTU9JWkUKKyAgIDM4OiBceDhjICAgICBTSE9SVF9CSU5VTklDT0RFICdjb21wbGV4JworICAgNDc6IFx4OTQgICAgIE1FTU9JWkUKKyAgIDQ4OiBceDkzICAgICBTVEFDS19HTE9CQUwKKyAgIDQ5OiBceDk0ICAgICBNRU1PSVpFCisgICA1MDogRyAgICAgICAgQklORkxPQVQgICAzLjAKKyAgIDU5OiBHICAgICAgICBCSU5GTE9BVCAgIDAuMAorICAgNjg6IFx4ODYgICAgIFRVUExFMgorICAgNjk6IFx4OTQgICAgIE1FTU9JWkUKKyAgIDcwOiBSICAgICAgICBSRURVQ0UKKyAgIDcxOiBceDk0ICAgICBNRU1PSVpFCisgICA3MjogSyAgICAgICAgQklOSU5UMSAgICAxCisgICA3NDogSiAgICAgICAgQklOSU5UICAgICAtMQorICAgNzk6IEsgICAgICAgIEJJTklOVDEgICAgMjU1CisgICA4MTogSiAgICAgICAgQklOSU5UICAgICAtMjU1CisgICA4NjogSiAgICAgICAgQklOSU5UICAgICAtMjU2CisgICA5MTogTSAgICAgICAgQklOSU5UMiAgICA2NTUzNQorICAgOTQ6IEogICAgICAgIEJJTklOVCAgICAgLTY1NTM1CisgICA5OTogSiAgICAgICAgQklOSU5UICAgICAtNjU1MzYKKyAgMTA0OiBKICAgICAgICBCSU5JTlQgICAgIDIxNDc0ODM2NDcKKyAgMTA5OiBKICAgICAgICBCSU5JTlQgICAgIC0yMTQ3NDgzNjQ3CisgIDExNDogSiAgICAgICAgQklOSU5UICAgICAtMjE0NzQ4MzY0OAorICAxMTk6ICggICAgICAgIE1BUksKKyAgMTIwOiBceDhjICAgICAgICAgU0hPUlRfQklOVU5JQ09ERSAnYWJjJworICAxMjU6IFx4OTQgICAgICAgICBNRU1PSVpFCisgIDEyNjogaCAgICAgICAgICAgIEJJTkdFVCAgICAgNgorICAxMjg6IFx4OGMgICAgICAgICBTSE9SVF9CSU5VTklDT0RFICdfX21haW5fXycKKyAgMTM4OiBceDk0ICAgICAgICAgTUVNT0laRQorICAxMzk6IFx4OGMgICAgICAgICBTSE9SVF9CSU5VTklDT0RFICdDJworICAxNDI6IFx4OTQgICAgICAgICBNRU1PSVpFCisgIDE0MzogXHg5MyAgICAgICAgIFNUQUNLX0dMT0JBTAorICAxNDQ6IFx4OTQgICAgICAgICBNRU1PSVpFCisgIDE0NTogKSAgICAgICAgICAgIEVNUFRZX1RVUExFCisgIDE0NjogXHg4MSAgICAgICAgIE5FV09CSgorICAxNDc6IFx4OTQgICAgICAgICBNRU1PSVpFCisgIDE0ODogfSAgICAgICAgICAgIEVNUFRZX0RJQ1QKKyAgMTQ5OiBceDk0ICAgICAgICAgTUVNT0laRQorICAxNTA6ICggICAgICAgICAgICBNQVJLCisgIDE1MTogXHg4YyAgICAgICAgICAgICBTSE9SVF9CSU5VTklDT0RFICdiYXInCisgIDE1NjogXHg5NCAgICAgICAgICAgICBNRU1PSVpFCisgIDE1NzogSyAgICAgICAgICAgICAgICBCSU5JTlQxICAgIDIKKyAgMTU5OiBceDhjICAgICAgICAgICAgIFNIT1JUX0JJTlVOSUNPREUgJ2ZvbycKKyAgMTY0OiBceDk0ICAgICAgICAgICAgIE1FTU9JWkUKKyAgMTY1OiBLICAgICAgICAgICAgICAgIEJJTklOVDEgICAgMQorICAxNjc6IHUgICAgICAgICAgICAgICAgU0VUSVRFTVMgICAoTUFSSyBhdCAxNTApCisgIDE2ODogYiAgICAgICAgICAgIEJVSUxECisgIDE2OTogaCAgICAgICAgICAgIEJJTkdFVCAgICAgMTAKKyAgMTcxOiB0ICAgICAgICAgICAgVFVQTEUgICAgICAoTUFSSyBhdCAxMTkpCisgIDE3MjogXHg5NCAgICAgTUVNT0laRQorICAxNzM6IGggICAgICAgIEJJTkdFVCAgICAgMTQKKyAgMTc1OiBLICAgICAgICBCSU5JTlQxICAgIDUKKyAgMTc3OiBlICAgICAgICBBUFBFTkRTICAgIChNQVJLIGF0IDEzKQorICAxNzg6IC4gICAgU1RPUAoraGlnaGVzdCBwcm90b2NvbCBhbW9uZyBvcGNvZGVzID0gNAorIiIiCisKICMgc2V0KFsxLDJdKSBwaWNrbGVkIGZyb20gMi54IHdpdGggcHJvdG9jb2wgMgotREFUQTMgPSBiJ1x4ODBceDAyY19fYnVpbHRpbl9fXG5zZXRcbnFceDAwXXFceDAxKEtceDAxS1x4MDJlXHg4NXFceDAyUnFceDAzLicKK0RBVEFfU0VUID0gYidceDgwXHgwMmNfX2J1aWx0aW5fX1xuc2V0XG5xXHgwMF1xXHgwMShLXHgwMUtceDAyZVx4ODVxXHgwMlJxXHgwMy4nCiAKICMgeHJhbmdlKDUpIHBpY2tsZWQgZnJvbSAyLnggd2l0aCBwcm90b2NvbCAyCi1EQVRBNCA9IGInXHg4MFx4MDJjX19idWlsdGluX19cbnhyYW5nZVxucVx4MDBLXHgwMEtceDA1S1x4MDFceDg3cVx4MDFScVx4MDIuJworREFUQV9YUkFOR0UgPSBiJ1x4ODBceDAyY19fYnVpbHRpbl9fXG54cmFuZ2VcbnFceDAwS1x4MDBLXHgwNUtceDAxXHg4N3FceDAxUnFceDAyLicKIAogIyBhIFNpbXBsZUNvb2tpZSgpIG9iamVjdCBwaWNrbGVkIGZyb20gMi54IHdpdGggcHJvdG9jb2wgMgotREFUQTUgPSAoYidceDgwXHgwMmNDb29raWVcblNpbXBsZUNvb2tpZVxucVx4MDApXHg4MXFceDAxVVx4MDNrZXknCi0gICAgICAgICBiJ3FceDAyY0Nvb2tpZVxuTW9yc2VsXG5xXHgwMylceDgxcVx4MDQoVVx4MDdjb21tZW50cVx4MDVVJwotICAgICAgICAgYidceDAwcVx4MDZVXHgwNmRvbWFpbnFceDA3aFx4MDZVXHgwNnNlY3VyZXFceDA4aFx4MDZVXHgwNycKLSAgICAgICAgIGInZXhwaXJlc3FcdGhceDA2VVx4MDdtYXgtYWdlcVxuaFx4MDZVXHgwN3ZlcnNpb25xXHgwYmhceDA2VScKLSAgICAgICAgIGInXHgwNHBhdGhxXHgwY2hceDA2VVx4MDhodHRwb25seXFccmhceDA2dX1xXHgwZShVXHgwYicKLSAgICAgICAgIGInY29kZWRfdmFsdWVxXHgwZlVceDA1dmFsdWVxXHgxMGhceDEwaFx4MTBoXHgwMmhceDAydWJzfXFceDExYi4nKQorREFUQV9DT09LSUUgPSAoYidceDgwXHgwMmNDb29raWVcblNpbXBsZUNvb2tpZVxucVx4MDApXHg4MXFceDAxVVx4MDNrZXknCisgICAgICAgICAgICAgICBiJ3FceDAyY0Nvb2tpZVxuTW9yc2VsXG5xXHgwMylceDgxcVx4MDQoVVx4MDdjb21tZW50cVx4MDVVJworICAgICAgICAgICAgICAgYidceDAwcVx4MDZVXHgwNmRvbWFpbnFceDA3aFx4MDZVXHgwNnNlY3VyZXFceDA4aFx4MDZVXHgwNycKKyAgICAgICAgICAgICAgIGInZXhwaXJlc3FcdGhceDA2VVx4MDdtYXgtYWdlcVxuaFx4MDZVXHgwN3ZlcnNpb25xXHgwYmhceDA2VScKKyAgICAgICAgICAgICAgIGInXHgwNHBhdGhxXHgwY2hceDA2VVx4MDhodHRwb25seXFccmhceDA2dX1xXHgwZShVXHgwYicKKyAgICAgICAgICAgICAgIGInY29kZWRfdmFsdWVxXHgwZlVceDA1dmFsdWVxXHgxMGhceDEwaFx4MTBoXHgwMmhceDAydWJzfXFceDExYi4nKQogCiAjIHNldChbM10pIHBpY2tsZWQgZnJvbSAyLnggd2l0aCBwcm90b2NvbCAyCi1EQVRBNiA9IGInXHg4MFx4MDJjX19idWlsdGluX19cbnNldFxucVx4MDBdcVx4MDFLXHgwM2FceDg1cVx4MDJScVx4MDMuJworREFUQV9TRVQyID0gYidceDgwXHgwMmNfX2J1aWx0aW5fX1xuc2V0XG5xXHgwMF1xXHgwMUtceDAzYVx4ODVxXHgwMlJxXHgwMy4nCiAKIHB5dGhvbjJfZXhjZXB0aW9uc193aXRob3V0X2FyZ3MgPSAoCiAgICAgQXJpdGhtZXRpY0Vycm9yLApAQCAtNDU1LDIwICs2MzAsMTAgQEAKIAogZXhjZXB0aW9uX3BpY2tsZSA9IGInXHg4MFx4MDJjZXhjZXB0aW9uc1xuP1xucVx4MDApUnFceDAxLicKIAotIyBFeGNlcHRpb24gb2JqZWN0cyB3aXRob3V0IGFyZ3VtZW50cyBwaWNrbGVkIGZyb20gMi54IHdpdGggcHJvdG9jb2wgMgotREFUQTcgPSB7Ci0gICAgZXhjZXB0aW9uIDoKLSAgICBleGNlcHRpb25fcGlja2xlLnJlcGxhY2UoYic/JywgZXhjZXB0aW9uLl9fbmFtZV9fLmVuY29kZSgiYXNjaWkiKSkKLSAgICBmb3IgZXhjZXB0aW9uIGluIHB5dGhvbjJfZXhjZXB0aW9uc193aXRob3V0X2FyZ3MKLX0KLQotIyBTdGFuZGFyZEVycm9yIGlzIG1hcHBlZCB0byBFeGNlcHRpb24sIHRlc3QgdGhhdCBzZXBhcmF0ZWx5Ci1EQVRBOCA9IGV4Y2VwdGlvbl9waWNrbGUucmVwbGFjZShiJz8nLCBiJ1N0YW5kYXJkRXJyb3InKQotCiAjIFVuaWNvZGVFbmNvZGVFcnJvciBvYmplY3QgcGlja2xlZCBmcm9tIDIueCB3aXRoIHByb3RvY29sIDIKLURBVEE5ID0gKGInXHg4MFx4MDJjZXhjZXB0aW9uc1xuVW5pY29kZUVuY29kZUVycm9yXG4nCi0gICAgICAgICBiJ3FceDAwKFVceDA1YXNjaWlxXHgwMVhceDAzXHgwMFx4MDBceDAwZm9vcVx4MDJLXHgwMEtceDAxJwotICAgICAgICAgYidVXHgwM2JhZHFceDAzdHFceDA0UnFceDA1LicpCitEQVRBX1VFRVJSID0gKGInXHg4MFx4MDJjZXhjZXB0aW9uc1xuVW5pY29kZUVuY29kZUVycm9yXG4nCisgICAgICAgICAgICAgIGIncVx4MDAoVVx4MDVhc2NpaXFceDAxWFx4MDNceDAwXHgwMFx4MDBmb29xXHgwMktceDAwS1x4MDEnCisgICAgICAgICAgICAgIGInVVx4MDNiYWRxXHgwM3RxXHgwNFJxXHgwNS4nKQogCiAKIGRlZiBjcmVhdGVfZGF0YSgpOgpAQCAtNDkxLDQ5ICs2NTYsNTUgQEAKICAgICB4LmFwcGVuZCg1KQogICAgIHJldHVybiB4CiAKLWNsYXNzIEFic3RyYWN0UGlja2xlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgotICAgICMgU3ViY2xhc3MgbXVzdCBkZWZpbmUgc2VsZi5kdW1wcywgc2VsZi5sb2Fkcy4KKworY2xhc3MgQWJzdHJhY3RVbnBpY2tsZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIFN1YmNsYXNzIG11c3QgZGVmaW5lIHNlbGYubG9hZHMuCiAKICAgICBfdGVzdGRhdGEgPSBjcmVhdGVfZGF0YSgpCiAKLSAgICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgIHBhc3MKKyAgICBkZWYgYXNzZXJ0X2lzX2NvcHkoc2VsZiwgb2JqLCBvYmpjb3B5LCBtc2c9Tm9uZSk6CisgICAgICAgICIiIlV0aWxpdHkgbWV0aG9kIHRvIHZlcmlmeSBpZiB0d28gb2JqZWN0cyBhcmUgY29waWVzIG9mIGVhY2ggb3RoZXJzLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgbXNnIGlzIE5vbmU6CisgICAgICAgICAgICBtc2cgPSAieyFyfSBpcyBub3QgYSBjb3B5IG9mIHshcn0iLmZvcm1hdChvYmosIG9iamNvcHkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqLCBvYmpjb3B5LCBtc2c9bXNnKQorICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUob2JqKSwgdHlwZShvYmpjb3B5KSwgbXNnPW1zZykKKyAgICAgICAgaWYgaGFzYXR0cihvYmosICdfX2RpY3RfXycpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnREaWN0RXF1YWwob2JqLl9fZGljdF9fLCBvYmpjb3B5Ll9fZGljdF9fLCBtc2c9bXNnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdChvYmouX19kaWN0X18sIG9iamNvcHkuX19kaWN0X18sIG1zZz1tc2cpCisgICAgICAgIGlmIGhhc2F0dHIob2JqLCAnX19zbG90c19fJyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydExpc3RFcXVhbChvYmouX19zbG90c19fLCBvYmpjb3B5Ll9fc2xvdHNfXywgbXNnPW1zZykKKyAgICAgICAgICAgIGZvciBzbG90IGluIG9iai5fX3Nsb3RzX186CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICAgICAgaGFzYXR0cihvYmosIHNsb3QpLCBoYXNhdHRyKG9iamNvcHksIHNsb3QpLCBtc2c9bXNnKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXR0cihvYmosIHNsb3QsIE5vbmUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0YXR0cihvYmpjb3B5LCBzbG90LCBOb25lKSwgbXNnPW1zZykKIAotICAgIGRlZiB0ZXN0X21pc2Moc2VsZik6Ci0gICAgICAgICMgdGVzdCB2YXJpb3VzIGRhdGF0eXBlcyBub3QgdGVzdGVkIGJ5IHRlc3RkYXRhCi0gICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6Ci0gICAgICAgICAgICB4ID0gbXlpbnQoNCkKLSAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKHgsIHByb3RvKQotICAgICAgICAgICAgeSA9IHNlbGYubG9hZHMocykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgeSkKLQotICAgICAgICAgICAgeCA9ICgxLCAoKSkKLSAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKHgsIHByb3RvKQotICAgICAgICAgICAgeSA9IHNlbGYubG9hZHMocykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgeSkKLQotICAgICAgICAgICAgeCA9IGluaXRhcmcoMSwgeCkKLSAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKHgsIHByb3RvKQotICAgICAgICAgICAgeSA9IHNlbGYubG9hZHMocykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgeSkKLQotICAgICAgICAjIFhYWCB0ZXN0IF9fcmVkdWNlX18gcHJvdG9jb2w/Ci0KLSAgICBkZWYgdGVzdF9yb3VuZHRyaXBfZXF1YWxpdHkoc2VsZik6Ci0gICAgICAgIGV4cGVjdGVkID0gc2VsZi5fdGVzdGRhdGEKLSAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKLSAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKGV4cGVjdGVkLCBwcm90bykKLSAgICAgICAgICAgIGdvdCA9IHNlbGYubG9hZHMocykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIGdvdCkKKyAgICBkZWYgY2hlY2tfdW5waWNrbGluZ19lcnJvcihzZWxmLCBlcnJvcnMsIGRhdGEpOgorICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChkYXRhPWRhdGEpLCBcCisgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZXJyb3JzKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLmxvYWRzKGRhdGEpCisgICAgICAgICAgICBleGNlcHQgQmFzZUV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICAgICAgaWYgc3VwcG9ydC52ZXJib3NlID4gMToKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoJyUtMzJyIC0gJXM6ICVzJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgIChkYXRhLCBleGMuX19jbGFzc19fLl9fbmFtZV9fLCBleGMpKQorICAgICAgICAgICAgICAgIHJhaXNlCiAKICAgICBkZWYgdGVzdF9sb2FkX2Zyb21fZGF0YTAoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fdGVzdGRhdGEsIHNlbGYubG9hZHMoREFUQTApKQorICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KHNlbGYuX3Rlc3RkYXRhLCBzZWxmLmxvYWRzKERBVEEwKSkKIAogICAgIGRlZiB0ZXN0X2xvYWRfZnJvbV9kYXRhMShzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl90ZXN0ZGF0YSwgc2VsZi5sb2FkcyhEQVRBMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkoc2VsZi5fdGVzdGRhdGEsIHNlbGYubG9hZHMoREFUQTEpKQogCiAgICAgZGVmIHRlc3RfbG9hZF9mcm9tX2RhdGEyKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX3Rlc3RkYXRhLCBzZWxmLmxvYWRzKERBVEEyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRfaXNfY29weShzZWxmLl90ZXN0ZGF0YSwgc2VsZi5sb2FkcyhEQVRBMikpCisKKyAgICBkZWYgdGVzdF9sb2FkX2Zyb21fZGF0YTMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkoc2VsZi5fdGVzdGRhdGEsIHNlbGYubG9hZHMoREFUQTMpKQorCisgICAgZGVmIHRlc3RfbG9hZF9mcm9tX2RhdGE0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KHNlbGYuX3Rlc3RkYXRhLCBzZWxmLmxvYWRzKERBVEE0KSkKIAogICAgIGRlZiB0ZXN0X2xvYWRfY2xhc3NpY19pbnN0YW5jZShzZWxmKToKICAgICAgICAgIyBTZWUgaXNzdWU1MTgwLiAgVGVzdCBsb2FkaW5nIDIueCBwaWNrbGVzIHRoYXQKQEAgLTU0Miw1NSArNzEzLDUwNiBAQAogICAgICAgICAgICAgeG5hbWUgPSBYLl9fbmFtZV9fLmVuY29kZSgnYXNjaWknKQogICAgICAgICAgICAgIyBQcm90b2NvbCAwICh0ZXh0IG1vZGUgcGlja2xlKToKICAgICAgICAgICAgICIiIgotICAgICAgICAgICAgMDogKCAgICBNQVJLCi0gICAgICAgICAgICAxOiBpICAgICAgICBJTlNUICAgICAgICdfX21haW5fXyBYJyAoTUFSSyBhdCAwKQotICAgICAgICAgICAgMTU6IHAgICAgUFVUICAgICAgICAwCi0gICAgICAgICAgICAxODogKCAgICBNQVJLCi0gICAgICAgICAgICAxOTogZCAgICAgICAgRElDVCAgICAgICAoTUFSSyBhdCAxOCkKLSAgICAgICAgICAgIDIwOiBwICAgIFBVVCAgICAgICAgMQotICAgICAgICAgICAgMjM6IGIgICAgQlVJTEQKLSAgICAgICAgICAgIDI0OiAuICAgIFNUT1AKKyAgICAgICAgICAgICAwOiAoICAgIE1BUksKKyAgICAgICAgICAgICAxOiBpICAgICAgICBJTlNUICAgICAgICdfX21haW5fXyBYJyAoTUFSSyBhdCAwKQorICAgICAgICAgICAgMTM6IHAgICAgUFVUICAgICAgICAwCisgICAgICAgICAgICAxNjogKCAgICBNQVJLCisgICAgICAgICAgICAxNzogZCAgICAgICAgRElDVCAgICAgICAoTUFSSyBhdCAxNikKKyAgICAgICAgICAgIDE4OiBwICAgIFBVVCAgICAgICAgMQorICAgICAgICAgICAgMjE6IGIgICAgQlVJTEQKKyAgICAgICAgICAgIDIyOiAuICAgIFNUT1AKICAgICAgICAgICAgICIiIgogICAgICAgICAgICAgcGlja2xlMCA9IChiIihpX19tYWluX19cbiIKICAgICAgICAgICAgICAgICAgICAgICAgYiJYXG4iCiAgICAgICAgICAgICAgICAgICAgICAgIGIicDBcbiIKICAgICAgICAgICAgICAgICAgICAgICAgYiIoZHAxXG5iLiIpLnJlcGxhY2UoYidYJywgeG5hbWUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFgoKmFyZ3MpLCBzZWxmLmxvYWRzKHBpY2tsZTApKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfaXNfY29weShYKCphcmdzKSwgc2VsZi5sb2FkcyhwaWNrbGUwKSkKIAogICAgICAgICAgICAgIyBQcm90b2NvbCAxIChiaW5hcnkgbW9kZSBwaWNrbGUpCiAgICAgICAgICAgICAiIiIKLSAgICAgICAgICAgIDA6ICggICAgTUFSSwotICAgICAgICAgICAgMTogYyAgICAgICAgR0xPQkFMICAgICAnX19tYWluX18gWCcKKyAgICAgICAgICAgICAwOiAoICAgIE1BUksKKyAgICAgICAgICAgICAxOiBjICAgICAgICBHTE9CQUwgICAgICdfX21haW5fXyBYJworICAgICAgICAgICAgMTM6IHEgICAgICAgIEJJTlBVVCAgICAgMAorICAgICAgICAgICAgMTU6IG8gICAgICAgIE9CSiAgICAgICAgKE1BUksgYXQgMCkKKyAgICAgICAgICAgIDE2OiBxICAgIEJJTlBVVCAgICAgMQorICAgICAgICAgICAgMTg6IH0gICAgRU1QVFlfRElDVAorICAgICAgICAgICAgMTk6IHEgICAgQklOUFVUICAgICAyCisgICAgICAgICAgICAyMTogYiAgICBCVUlMRAorICAgICAgICAgICAgMjI6IC4gICAgU1RPUAorICAgICAgICAgICAgIiIiCisgICAgICAgICAgICBwaWNrbGUxID0gKGInKGNfX21haW5fX1xuJworICAgICAgICAgICAgICAgICAgICAgICBiJ1hcbicKKyAgICAgICAgICAgICAgICAgICAgICAgYidxXHgwMG9xXHgwMX1xXHgwMmIuJykucmVwbGFjZShiJ1gnLCB4bmFtZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkoWCgqYXJncyksIHNlbGYubG9hZHMocGlja2xlMSkpCisKKyAgICAgICAgICAgICMgUHJvdG9jb2wgMiAocGlja2xlMiA9IGInXHg4MFx4MDInICsgcGlja2xlMSkKKyAgICAgICAgICAgICIiIgorICAgICAgICAgICAgIDA6IFx4ODAgUFJPVE8gICAgICAyCisgICAgICAgICAgICAgMjogKCAgICBNQVJLCisgICAgICAgICAgICAgMzogYyAgICAgICAgR0xPQkFMICAgICAnX19tYWluX18gWCcKICAgICAgICAgICAgIDE1OiBxICAgICAgICBCSU5QVVQgICAgIDAKLSAgICAgICAgICAgIDE3OiBvICAgICAgICBPQkogICAgICAgIChNQVJLIGF0IDApCisgICAgICAgICAgICAxNzogbyAgICAgICAgT0JKICAgICAgICAoTUFSSyBhdCAyKQogICAgICAgICAgICAgMTg6IHEgICAgQklOUFVUICAgICAxCiAgICAgICAgICAgICAyMDogfSAgICBFTVBUWV9ESUNUCiAgICAgICAgICAgICAyMTogcSAgICBCSU5QVVQgICAgIDIKICAgICAgICAgICAgIDIzOiBiICAgIEJVSUxECiAgICAgICAgICAgICAyNDogLiAgICBTVE9QCiAgICAgICAgICAgICAiIiIKLSAgICAgICAgICAgIHBpY2tsZTEgPSAoYicoY19fbWFpbl9fXG4nCi0gICAgICAgICAgICAgICAgICAgICAgIGInWFxuJwotICAgICAgICAgICAgICAgICAgICAgICBiJ3FceDAwb3FceDAxfXFceDAyYi4nKS5yZXBsYWNlKGInWCcsIHhuYW1lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChYKCphcmdzKSwgc2VsZi5sb2FkcyhwaWNrbGUxKSkKLQotICAgICAgICAgICAgIyBQcm90b2NvbCAyIChwaWNrbGUyID0gYidceDgwXHgwMicgKyBwaWNrbGUxKQotICAgICAgICAgICAgIiIiCi0gICAgICAgICAgICAwOiBceDgwIFBST1RPICAgICAgMgotICAgICAgICAgICAgMjogKCAgICBNQVJLCi0gICAgICAgICAgICAzOiBjICAgICAgICBHTE9CQUwgICAgICdfX21haW5fXyBYJwotICAgICAgICAgICAgMTc6IHEgICAgICAgIEJJTlBVVCAgICAgMAotICAgICAgICAgICAgMTk6IG8gICAgICAgIE9CSiAgICAgICAgKE1BUksgYXQgMikKLSAgICAgICAgICAgIDIwOiBxICAgIEJJTlBVVCAgICAgMQotICAgICAgICAgICAgMjI6IH0gICAgRU1QVFlfRElDVAotICAgICAgICAgICAgMjM6IHEgICAgQklOUFVUICAgICAyCi0gICAgICAgICAgICAyNTogYiAgICBCVUlMRAotICAgICAgICAgICAgMjY6IC4gICAgU1RPUAotICAgICAgICAgICAgIiIiCiAgICAgICAgICAgICBwaWNrbGUyID0gKGInXHg4MFx4MDIoY19fbWFpbl9fXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInWFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3FceDAwb3FceDAxfXFceDAyYi4nKS5yZXBsYWNlKGInWCcsIHhuYW1lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChYKCphcmdzKSwgc2VsZi5sb2FkcyhwaWNrbGUyKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkoWCgqYXJncyksIHNlbGYubG9hZHMocGlja2xlMikpCisKKyAgICBkZWYgdGVzdF9tYXhpbnQ2NChzZWxmKToKKyAgICAgICAgbWF4aW50NjQgPSAoMSA8PCA2MykgLSAxCisgICAgICAgIGRhdGEgPSBiJ0knICsgc3RyKG1heGludDY0KS5lbmNvZGUoImFzY2lpIikgKyBiJ1xuLicKKyAgICAgICAgZ290ID0gc2VsZi5sb2FkcyhkYXRhKQorICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KG1heGludDY0LCBnb3QpCisKKyAgICAgICAgIyBUcnkgdG9vIHdpdGggYSBib2d1cyBsaXRlcmFsLgorICAgICAgICBkYXRhID0gYidJJyArIHN0cihtYXhpbnQ2NCkuZW5jb2RlKCJhc2NpaSIpICsgYidKVU5LXG4uJworICAgICAgICBzZWxmLmNoZWNrX3VucGlja2xpbmdfZXJyb3IoVmFsdWVFcnJvciwgZGF0YSkKKworICAgIGRlZiB0ZXN0X3VucGlja2xlX2Zyb21fMngoc2VsZik6CisgICAgICAgICMgVW5waWNrbGUgbm9uLXRyaXZpYWwgZGF0YSBmcm9tIFB5dGhvbiAyLnguCisgICAgICAgIGxvYWRlZCA9IHNlbGYubG9hZHMoREFUQV9TRVQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVkLCBzZXQoWzEsIDJdKSkKKyAgICAgICAgbG9hZGVkID0gc2VsZi5sb2FkcyhEQVRBX1hSQU5HRSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGxvYWRlZCksIHR5cGUocmFuZ2UoMCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QobG9hZGVkKSwgbGlzdChyYW5nZSg1KSkpCisgICAgICAgIGxvYWRlZCA9IHNlbGYubG9hZHMoREFUQV9DT09LSUUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShsb2FkZWQpLCBTaW1wbGVDb29raWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChsb2FkZWQua2V5cygpKSwgWyJrZXkiXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZWRbImtleSJdLnZhbHVlLCAidmFsdWUiKQorCisgICAgICAgICMgRXhjZXB0aW9uIG9iamVjdHMgd2l0aG91dCBhcmd1bWVudHMgcGlja2xlZCBmcm9tIDIueCB3aXRoIHByb3RvY29sIDIKKyAgICAgICAgZm9yIGV4YyBpbiBweXRob24yX2V4Y2VwdGlvbnNfd2l0aG91dF9hcmdzOgorICAgICAgICAgICAgZGF0YSA9IGV4Y2VwdGlvbl9waWNrbGUucmVwbGFjZShiJz8nLCBleGMuX19uYW1lX18uZW5jb2RlKCJhc2NpaSIpKQorICAgICAgICAgICAgbG9hZGVkID0gc2VsZi5sb2FkcyhkYXRhKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKGxvYWRlZCksIGV4YykKKworICAgICAgICAjIFN0YW5kYXJkRXJyb3IgaXMgbWFwcGVkIHRvIEV4Y2VwdGlvbiwgdGVzdCB0aGF0IHNlcGFyYXRlbHkKKyAgICAgICAgbG9hZGVkID0gc2VsZi5sb2FkcyhleGNlcHRpb25fcGlja2xlLnJlcGxhY2UoYic/JywgYidTdGFuZGFyZEVycm9yJykpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShsb2FkZWQpLCBFeGNlcHRpb24pCisKKyAgICAgICAgbG9hZGVkID0gc2VsZi5sb2FkcyhEQVRBX1VFRVJSKQorICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUobG9hZGVkKSwgVW5pY29kZUVuY29kZUVycm9yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlZC5vYmplY3QsICJmb28iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlZC5lbmNvZGluZywgImFzY2lpIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZWQuc3RhcnQsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVkLmVuZCwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZWQucmVhc29uLCAiYmFkIikKKworICAgIGRlZiB0ZXN0X2xvYWRfcHl0aG9uMl9zdHJfYXNfYnl0ZXMoc2VsZik6CisgICAgICAgICMgRnJvbSBQeXRob24gMjogcGlja2xlLmR1bXBzKCdhXHgwMFx4YTAnLCBwcm90b2NvbD0wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9hZHMoYiJTJ2FcXHgwMFxceGEwJ1xuLiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGluZz0iYnl0ZXMiKSwgYidhXHgwMFx4YTAnKQorICAgICAgICAjIEZyb20gUHl0aG9uIDI6IHBpY2tsZS5kdW1wcygnYVx4MDBceGEwJywgcHJvdG9jb2w9MSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvYWRzKGInVVx4MDNhXHgwMFx4YTAuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nPSJieXRlcyIpLCBiJ2FceDAwXHhhMCcpCisgICAgICAgICMgRnJvbSBQeXRob24gMjogcGlja2xlLmR1bXBzKCdhXHgwMFx4YTAnLCBwcm90b2NvbD0yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9hZHMoYidceDgwXHgwMlVceDAzYVx4MDBceGEwLicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGluZz0iYnl0ZXMiKSwgYidhXHgwMFx4YTAnKQorCisgICAgZGVmIHRlc3RfbG9hZF9weXRob24yX3VuaWNvZGVfYXNfc3RyKHNlbGYpOgorICAgICAgICAjIEZyb20gUHl0aG9uIDI6IHBpY2tsZS5kdW1wcyh1J8+AJywgcHJvdG9jb2w9MCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvYWRzKGInVlxcdTAzYzBcbi4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc9J2J5dGVzJyksICfPgCcpCisgICAgICAgICMgRnJvbSBQeXRob24gMjogcGlja2xlLmR1bXBzKHUnz4AnLCBwcm90b2NvbD0xKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9hZHMoYidYXHgwMlx4MDBceDAwXHgwMFx4Y2ZceDgwLicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGluZz0iYnl0ZXMiKSwgJ8+AJykKKyAgICAgICAgIyBGcm9tIFB5dGhvbiAyOiBwaWNrbGUuZHVtcHModSfPgCcsIHByb3RvY29sPTIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb2FkcyhiJ1x4ODBceDAyWFx4MDJceDAwXHgwMFx4MDBceGNmXHg4MC4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc9ImJ5dGVzIiksICfPgCcpCisKKyAgICBkZWYgdGVzdF9sb2FkX2xvbmdfcHl0aG9uMl9zdHJfYXNfYnl0ZXMoc2VsZik6CisgICAgICAgICMgRnJvbSBQeXRob24gMjogcGlja2xlLmR1bXBzKCd4JyAqIDMwMCwgcHJvdG9jb2w9MSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvYWRzKHBpY2tsZS5CSU5TVFJJTkcgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0LnBhY2soIjxJIiwgMzAwKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3gnICogMzAwICsgcGlja2xlLlNUT1AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGluZz0nYnl0ZXMnKSwgYid4JyAqIDMwMCkKKworICAgIGRlZiB0ZXN0X2NvbnN0YW50cyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc2VsZi5sb2FkcyhiJ04uJykpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc2VsZi5sb2FkcyhiJ1x4ODguJyksIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc2VsZi5sb2FkcyhiJ1x4ODkuJyksIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydElzKHNlbGYubG9hZHMoYidJMDFcbi4nKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzZWxmLmxvYWRzKGInSTAwXG4uJyksIEZhbHNlKQorCisgICAgZGVmIHRlc3RfZW1wdHlfYnl0ZXN0cmluZyhzZWxmKToKKyAgICAgICAgIyBpc3N1ZSAxMTI4NgorICAgICAgICBlbXB0eSA9IHNlbGYubG9hZHMoYidceDgwXHgwM1VceDAwcVx4MDAuJywgZW5jb2Rpbmc9J2tvaTgtcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW1wdHksICcnKQorCisgICAgZGVmIHRlc3Rfc2hvcnRfYmluYnl0ZXMoc2VsZik6CisgICAgICAgIGR1bXBlZCA9IGInXHg4MFx4MDNDXHgwNFx4ZTJceDgyXHhhY1x4MDAuJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9hZHMoZHVtcGVkKSwgYidceGUyXHg4Mlx4YWNceDAwJykKKworICAgIGRlZiB0ZXN0X2JpbmJ5dGVzKHNlbGYpOgorICAgICAgICBkdW1wZWQgPSBiJ1x4ODBceDAzQlx4MDRceDAwXHgwMFx4MDBceGUyXHg4Mlx4YWNceDAwLicKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvYWRzKGR1bXBlZCksIGInXHhlMlx4ODJceGFjXHgwMCcpCisKKyAgICBAcmVxdWlyZXNfMzJiCisgICAgZGVmIHRlc3RfbmVnYXRpdmVfMzJiX2JpbmJ5dGVzKHNlbGYpOgorICAgICAgICAjIE9uIDMyLWJpdCBidWlsZHMsIGEgQklOQllURVMgb2YgMioqMzEgb3IgbW9yZSBpcyByZWZ1c2VkCisgICAgICAgIGR1bXBlZCA9IGInXHg4MFx4MDNCXHhmZlx4ZmZceGZmXHhmZnh5enFceDAwLicKKyAgICAgICAgc2VsZi5jaGVja191bnBpY2tsaW5nX2Vycm9yKChwaWNrbGUuVW5waWNrbGluZ0Vycm9yLCBPdmVyZmxvd0Vycm9yKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1bXBlZCkKKworICAgIEByZXF1aXJlc18zMmIKKyAgICBkZWYgdGVzdF9uZWdhdGl2ZV8zMmJfYmludW5pY29kZShzZWxmKToKKyAgICAgICAgIyBPbiAzMi1iaXQgYnVpbGRzLCBhIEJJTlVOSUNPREUgb2YgMioqMzEgb3IgbW9yZSBpcyByZWZ1c2VkCisgICAgICAgIGR1bXBlZCA9IGInXHg4MFx4MDNYXHhmZlx4ZmZceGZmXHhmZnh5enFceDAwLicKKyAgICAgICAgc2VsZi5jaGVja191bnBpY2tsaW5nX2Vycm9yKChwaWNrbGUuVW5waWNrbGluZ0Vycm9yLCBPdmVyZmxvd0Vycm9yKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1bXBlZCkKKworICAgIGRlZiB0ZXN0X3Nob3J0X2JpbnVuaWNvZGUoc2VsZik6CisgICAgICAgIGR1bXBlZCA9IGInXHg4MFx4MDRceDhjXHgwNFx4ZTJceDgyXHhhY1x4MDAuJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9hZHMoZHVtcGVkKSwgJ1x1MjBhY1x4MDAnKQorCisgICAgZGVmIHRlc3RfbWlzY19nZXQoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfdW5waWNrbGluZ19lcnJvcihLZXlFcnJvciwgYidnMFxucDAnKQorICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KFsoMTAwLCksICgxMDAsKV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2FkcyhiJygoS2R0cDBcbmhceDAwbC4pKScpKQorCisgICAgZGVmIHRlc3RfYmluYnl0ZXM4KHNlbGYpOgorICAgICAgICBkdW1wZWQgPSBiJ1x4ODBceDA0XHg4ZVw0XDBcMFwwXDBcMFwwXDBceGUyXHg4Mlx4YWNceDAwLicKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvYWRzKGR1bXBlZCksIGInXHhlMlx4ODJceGFjXHgwMCcpCisKKyAgICBkZWYgdGVzdF9iaW51bmljb2RlOChzZWxmKToKKyAgICAgICAgZHVtcGVkID0gYidceDgwXHgwNFx4OGRcNFwwXDBcMFwwXDBcMFwwXHhlMlx4ODJceGFjXHgwMC4nCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb2FkcyhkdW1wZWQpLCAnXHUyMGFjXHgwMCcpCisKKyAgICBAcmVxdWlyZXNfMzJiCisgICAgZGVmIHRlc3RfbGFyZ2VfMzJiX2JpbmJ5dGVzOChzZWxmKToKKyAgICAgICAgZHVtcGVkID0gYidceDgwXHgwNFx4OGVcNFwwXDBcMFwxXDBcMFwwXHhlMlx4ODJceGFjXHgwMC4nCisgICAgICAgIHNlbGYuY2hlY2tfdW5waWNrbGluZ19lcnJvcigocGlja2xlLlVucGlja2xpbmdFcnJvciwgT3ZlcmZsb3dFcnJvciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdW1wZWQpCisKKyAgICBAcmVxdWlyZXNfMzJiCisgICAgZGVmIHRlc3RfbGFyZ2VfMzJiX2JpbnVuaWNvZGU4KHNlbGYpOgorICAgICAgICBkdW1wZWQgPSBiJ1x4ODBceDA0XHg4ZFw0XDBcMFwwXDFcMFwwXDBceGUyXHg4Mlx4YWNceDAwLicKKyAgICAgICAgc2VsZi5jaGVja191bnBpY2tsaW5nX2Vycm9yKChwaWNrbGUuVW5waWNrbGluZ0Vycm9yLCBPdmVyZmxvd0Vycm9yKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1bXBlZCkKKworICAgIGRlZiB0ZXN0X2dldChzZWxmKToKKyAgICAgICAgcGlja2xlZCA9IGInKChscDEwMDAwMFxuZzEwMDAwMFxudC4nCisgICAgICAgIHVucGlja2xlZCA9IHNlbGYubG9hZHMocGlja2xlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bnBpY2tsZWQsIChbXSwpKjIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModW5waWNrbGVkWzBdLCB1bnBpY2tsZWRbMV0pCisKKyAgICBkZWYgdGVzdF9iaW5nZXQoc2VsZik6CisgICAgICAgIHBpY2tsZWQgPSBiJyhdcVx4ZmZoXHhmZnQuJworICAgICAgICB1bnBpY2tsZWQgPSBzZWxmLmxvYWRzKHBpY2tsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5waWNrbGVkLCAoW10sKSoyKQorICAgICAgICBzZWxmLmFzc2VydElzKHVucGlja2xlZFswXSwgdW5waWNrbGVkWzFdKQorCisgICAgZGVmIHRlc3RfbG9uZ19iaW5nZXQoc2VsZik6CisgICAgICAgIHBpY2tsZWQgPSBiJyhdclx4MDBceDAwXHgwMVx4MDBqXHgwMFx4MDBceDAxXHgwMHQuJworICAgICAgICB1bnBpY2tsZWQgPSBzZWxmLmxvYWRzKHBpY2tsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5waWNrbGVkLCAoW10sKSoyKQorICAgICAgICBzZWxmLmFzc2VydElzKHVucGlja2xlZFswXSwgdW5waWNrbGVkWzFdKQorCisgICAgZGVmIHRlc3RfZHVwKHNlbGYpOgorICAgICAgICBwaWNrbGVkID0gYicoKGwydC4nCisgICAgICAgIHVucGlja2xlZCA9IHNlbGYubG9hZHMocGlja2xlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bnBpY2tsZWQsIChbXSwpKjIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModW5waWNrbGVkWzBdLCB1bnBpY2tsZWRbMV0pCisKKyAgICBkZWYgdGVzdF9uZWdhdGl2ZV9wdXQoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzEyODQ3CisgICAgICAgIGR1bXBlZCA9IGInVmFcbnAtMVxuLicKKyAgICAgICAgc2VsZi5jaGVja191bnBpY2tsaW5nX2Vycm9yKFZhbHVlRXJyb3IsIGR1bXBlZCkKKworICAgIEByZXF1aXJlc18zMmIKKyAgICBkZWYgdGVzdF9uZWdhdGl2ZV8zMmJfYmlucHV0KHNlbGYpOgorICAgICAgICAjIElzc3VlICMxMjg0NworICAgICAgICBkdW1wZWQgPSBiJ1x4ODBceDAzWFx4MDFceDAwXHgwMFx4MDBhclx4ZmZceGZmXHhmZlx4ZmYuJworICAgICAgICBzZWxmLmNoZWNrX3VucGlja2xpbmdfZXJyb3IoVmFsdWVFcnJvciwgZHVtcGVkKQorCisgICAgZGVmIHRlc3RfYmFkbHlfZXNjYXBlZF9zdHJpbmcoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfdW5waWNrbGluZ19lcnJvcihWYWx1ZUVycm9yLCBiIlMnXFwnXG4uIikKKworICAgIGRlZiB0ZXN0X2JhZGx5X3F1b3RlZF9zdHJpbmcoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzE3NzEwCisgICAgICAgIGJhZHBpY2tsZXMgPSBbYiJTJ1xuLiIsCisgICAgICAgICAgICAgICAgICAgICAgYidTIlxuLicsCisgICAgICAgICAgICAgICAgICAgICAgYidTXCcgXG4uJywKKyAgICAgICAgICAgICAgICAgICAgICBiJ1MiIFxuLicsCisgICAgICAgICAgICAgICAgICAgICAgYidTXCciXG4uJywKKyAgICAgICAgICAgICAgICAgICAgICBiJ1MiXCdcbi4nLAorICAgICAgICAgICAgICAgICAgICAgIGIiUycgJyBcbi4iLAorICAgICAgICAgICAgICAgICAgICAgIGInUyIgIiBcbi4nLAorICAgICAgICAgICAgICAgICAgICAgIGIiUyAnJ1xuLiIsCisgICAgICAgICAgICAgICAgICAgICAgYidTICIiXG4uJywKKyAgICAgICAgICAgICAgICAgICAgICBiJ1MgXG4uJywKKyAgICAgICAgICAgICAgICAgICAgICBiJ1Ncbi4nLAorICAgICAgICAgICAgICAgICAgICAgIGInUy4nXQorICAgICAgICBmb3IgcCBpbiBiYWRwaWNrbGVzOgorICAgICAgICAgICAgc2VsZi5jaGVja191bnBpY2tsaW5nX2Vycm9yKHBpY2tsZS5VbnBpY2tsaW5nRXJyb3IsIHApCisKKyAgICBkZWYgdGVzdF9jb3JyZWN0bHlfcXVvdGVkX3N0cmluZyhzZWxmKToKKyAgICAgICAgZ29vZHBpY2tsZXMgPSBbKGIiUycnXG4uIiwgJycpLAorICAgICAgICAgICAgICAgICAgICAgICAoYidTIiJcbi4nLCAnJyksCisgICAgICAgICAgICAgICAgICAgICAgIChiJ1MiXFxuIlxuLicsICdcbicpLAorICAgICAgICAgICAgICAgICAgICAgICAoYiJTJ1xcbidcbi4iLCAnXG4nKV0KKyAgICAgICAgZm9yIHAsIGV4cGVjdGVkIGluIGdvb2RwaWNrbGVzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvYWRzKHApLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X2ZyYW1lX3JlYWRsaW5lKHNlbGYpOgorICAgICAgICBwaWNrbGVkID0gYidceDgwXHgwNFx4OTVceDA1XHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMEk0MlxuLicKKyAgICAgICAgIyAgICAwOiBceDgwIFBST1RPICAgICAgNAorICAgICAgICAjICAgIDI6IFx4OTUgRlJBTUUgICAgICA1CisgICAgICAgICMgICAxMTogSSAgICBJTlQgICAgICAgIDQyCisgICAgICAgICMgICAxNTogLiAgICBTVE9QCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb2FkcyhwaWNrbGVkKSwgNDIpCisKKyAgICBkZWYgdGVzdF9jb21wYXRfdW5waWNrbGUoc2VsZik6CisgICAgICAgICMgeHJhbmdlKDEsIDcpCisgICAgICAgIHBpY2tsZWQgPSBiJ1x4ODBceDAyY19fYnVpbHRpbl9fXG54cmFuZ2VcbktceDAxS1x4MDdLXHgwMVx4ODdSLicKKyAgICAgICAgdW5waWNrbGVkID0gc2VsZi5sb2FkcyhwaWNrbGVkKQorICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUodW5waWNrbGVkKSwgcmFuZ2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5waWNrbGVkLCByYW5nZSgxLCA3KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHVucGlja2xlZCksIFsxLCAyLCAzLCA0LCA1LCA2XSkKKyAgICAgICAgIyByZWR1Y2UKKyAgICAgICAgcGlja2xlZCA9IGInXHg4MFx4MDJjX19idWlsdGluX19cbnJlZHVjZVxuLicKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzZWxmLmxvYWRzKHBpY2tsZWQpLCBmdW5jdG9vbHMucmVkdWNlKQorICAgICAgICAjIHdoaWNoZGIud2hpY2hkYgorICAgICAgICBwaWNrbGVkID0gYidceDgwXHgwMmN3aGljaGRiXG53aGljaGRiXG4uJworICAgICAgICBzZWxmLmFzc2VydElzKHNlbGYubG9hZHMocGlja2xlZCksIGRibS53aGljaGRiKQorICAgICAgICAjIEV4Y2VwdGlvbigpLCBTdGFuZGFyZEVycm9yKCkKKyAgICAgICAgZm9yIG5hbWUgaW4gKGInRXhjZXB0aW9uJywgYidTdGFuZGFyZEVycm9yJyk6CisgICAgICAgICAgICBwaWNrbGVkID0gKGInXHg4MFx4MDJjZXhjZXB0aW9uc1xuJyArIG5hbWUgKyBiJ1xuVVx4MDN1Z2hceDg1Ui4nKQorICAgICAgICAgICAgdW5waWNrbGVkID0gc2VsZi5sb2FkcyhwaWNrbGVkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKHVucGlja2xlZCksIEV4Y2VwdGlvbikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHVucGlja2xlZCksICd1Z2gnKQorICAgICAgICAjIFVzZXJEaWN0LlVzZXJEaWN0KHsxOiAyfSksIFVzZXJEaWN0Lkl0ZXJhYmxlVXNlckRpY3QoezE6IDJ9KQorICAgICAgICBmb3IgbmFtZSBpbiAoYidVc2VyRGljdCcsIGInSXRlcmFibGVVc2VyRGljdCcpOgorICAgICAgICAgICAgcGlja2xlZCA9IChiJ1x4ODBceDAyKGNVc2VyRGljdFxuJyArIG5hbWUgKworICAgICAgICAgICAgICAgICAgICAgICBiJ1xub31VXHgwNGRhdGF9S1x4MDFLXHgwMnNzYi4nKQorICAgICAgICAgICAgdW5waWNrbGVkID0gc2VsZi5sb2FkcyhwaWNrbGVkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKHVucGlja2xlZCksIGNvbGxlY3Rpb25zLlVzZXJEaWN0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bnBpY2tsZWQsIGNvbGxlY3Rpb25zLlVzZXJEaWN0KHsxOiAyfSkpCisKKyAgICBkZWYgdGVzdF9iYWRfc3RhY2soc2VsZik6CisgICAgICAgIGJhZHBpY2tsZXMgPSBbCisgICAgICAgICAgICBiJy4nLCAgICAgICAgICAgICAgICAgICAgICAgIyBTVE9QCisgICAgICAgICAgICBiJzAnLCAgICAgICAgICAgICAgICAgICAgICAgIyBQT1AKKyAgICAgICAgICAgIGInMScsICAgICAgICAgICAgICAgICAgICAgICAjIFBPUF9NQVJLCisgICAgICAgICAgICBiJzInLCAgICAgICAgICAgICAgICAgICAgICAgIyBEVVAKKyAgICAgICAgICAgICMgYicoMicsICAgICAgICAgICAgICAgICAgICAjIFB5VW5waWNrbGVyIGRvZXNuJ3QgcmFpc2UKKyAgICAgICAgICAgIGInUicsICAgICAgICAgICAgICAgICAgICAgICAjIFJFRFVDRQorICAgICAgICAgICAgYicpUicsCisgICAgICAgICAgICBiJ2EnLCAgICAgICAgICAgICAgICAgICAgICAgIyBBUFBFTkQKKyAgICAgICAgICAgIGInTmEnLAorICAgICAgICAgICAgYidiJywgICAgICAgICAgICAgICAgICAgICAgICMgQlVJTEQKKyAgICAgICAgICAgIGInTmInLAorICAgICAgICAgICAgYidkJywgICAgICAgICAgICAgICAgICAgICAgICMgRElDVAorICAgICAgICAgICAgYidlJywgICAgICAgICAgICAgICAgICAgICAgICMgQVBQRU5EUworICAgICAgICAgICAgIyBiJyhlJywgICAgICAgICAgICAgICAgICAgICMgUHlVbnBpY2tsZXIgcmFpc2VzIEF0dHJpYnV0ZUVycm9yCisgICAgICAgICAgICBiJ2lidWlsdGluc1xubGlzdFxuJywgICAgICAgIyBJTlNUCisgICAgICAgICAgICBiJ2wnLCAgICAgICAgICAgICAgICAgICAgICAgIyBMSVNUCisgICAgICAgICAgICBiJ28nLCAgICAgICAgICAgICAgICAgICAgICAgIyBPQkoKKyAgICAgICAgICAgIGInKG8nLAorICAgICAgICAgICAgYidwMVxuJywgICAgICAgICAgICAgICAgICAgICMgUFVUCisgICAgICAgICAgICBiJ3FceDAwJywgICAgICAgICAgICAgICAgICAgIyBCSU5QVVQKKyAgICAgICAgICAgIGInclx4MDBceDAwXHgwMFx4MDAnLCAgICAgICAjIExPTkdfQklOUFVUCisgICAgICAgICAgICBiJ3MnLCAgICAgICAgICAgICAgICAgICAgICAgIyBTRVRJVEVNCisgICAgICAgICAgICBiJ05zJywKKyAgICAgICAgICAgIGInTk5zJywKKyAgICAgICAgICAgIGIndCcsICAgICAgICAgICAgICAgICAgICAgICAjIFRVUExFCisgICAgICAgICAgICBiJ3UnLCAgICAgICAgICAgICAgICAgICAgICAgIyBTRVRJVEVNUworICAgICAgICAgICAgIyBiJyh1JywgICAgICAgICAgICAgICAgICAgICMgUHlVbnBpY2tsZXIgZG9lc24ndCByYWlzZQorICAgICAgICAgICAgYid9KE51JywKKyAgICAgICAgICAgIGInXHg4MScsICAgICAgICAgICAgICAgICAgICAjIE5FV09CSgorICAgICAgICAgICAgYicpXHg4MScsCisgICAgICAgICAgICBiJ1x4ODUnLCAgICAgICAgICAgICAgICAgICAgIyBUVVBMRTEKKyAgICAgICAgICAgIGInXHg4NicsICAgICAgICAgICAgICAgICAgICAjIFRVUExFMgorICAgICAgICAgICAgYidOXHg4NicsCisgICAgICAgICAgICBiJ1x4ODcnLCAgICAgICAgICAgICAgICAgICAgIyBUVVBMRTMKKyAgICAgICAgICAgIGInTlx4ODcnLAorICAgICAgICAgICAgYidOTlx4ODcnLAorICAgICAgICAgICAgYidceDkwJywgICAgICAgICAgICAgICAgICAgICMgQURESVRFTVMKKyAgICAgICAgICAgICMgYicoXHg5MCcsICAgICAgICAgICAgICAgICAjIFB5VW5waWNrbGVyIHJhaXNlcyBBdHRyaWJ1dGVFcnJvcgorICAgICAgICAgICAgYidceDkxJywgICAgICAgICAgICAgICAgICAgICMgRlJPWkVOU0VUCisgICAgICAgICAgICBiJ1x4OTInLCAgICAgICAgICAgICAgICAgICAgIyBORVdPQkpfRVgKKyAgICAgICAgICAgIGInKX1ceDkyJywKKyAgICAgICAgICAgIGInXHg5MycsICAgICAgICAgICAgICAgICAgICAjIFNUQUNLX0dMT0JBTAorICAgICAgICAgICAgYidWbGlzdFxuXHg5MycsCisgICAgICAgICAgICBiJ1x4OTQnLCAgICAgICAgICAgICAgICAgICAgIyBNRU1PSVpFCisgICAgICAgIF0KKyAgICAgICAgZm9yIHAgaW4gYmFkcGlja2xlczoKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfdW5waWNrbGluZ19lcnJvcihzZWxmLmJhZF9zdGFja19lcnJvcnMsIHApCisKKyAgICBkZWYgdGVzdF9iYWRfbWFyayhzZWxmKToKKyAgICAgICAgYmFkcGlja2xlcyA9IFsKKyAgICAgICAgICAgICMgYidOKC4nLCAgICAgICAgICAgICAgICAgICAgICMgU1RPUAorICAgICAgICAgICAgYidOKDInLCAgICAgICAgICAgICAgICAgICAgICMgRFVQCisgICAgICAgICAgICBiJ2NidWlsdGluc1xubGlzdFxuKShSJywgICAgIyBSRURVQ0UKKyAgICAgICAgICAgIGInY2J1aWx0aW5zXG5saXN0XG4oKVInLAorICAgICAgICAgICAgYiddTihhJywgICAgICAgICAgICAgICAgICAgICMgQVBQRU5ECisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBCVUlMRAorICAgICAgICAgICAgYidjYnVpbHRpbnNcblZhbHVlRXJyb3JcbilSfShiJywKKyAgICAgICAgICAgIGInY2J1aWx0aW5zXG5WYWx1ZUVycm9yXG4pUih9YicsCisgICAgICAgICAgICBiJyhOZCcsICAgICAgICAgICAgICAgICAgICAgIyBESUNUCisgICAgICAgICAgICBiJ04ocDFcbicsICAgICAgICAgICAgICAgICAgIyBQVVQKKyAgICAgICAgICAgIGInTihxXHgwMCcsICAgICAgICAgICAgICAgICAjIEJJTlBVVAorICAgICAgICAgICAgYidOKHJceDAwXHgwMFx4MDBceDAwJywgICAgICMgTE9OR19CSU5QVVQKKyAgICAgICAgICAgIGInfU5OKHMnLCAgICAgICAgICAgICAgICAgICAjIFNFVElURU0KKyAgICAgICAgICAgIGInfU4oTnMnLAorICAgICAgICAgICAgYid9KE5OcycsCisgICAgICAgICAgICBiJ30oKHUnLCAgICAgICAgICAgICAgICAgICAgIyBTRVRJVEVNUworICAgICAgICAgICAgYidjYnVpbHRpbnNcbmxpc3RcbikoXHg4MScsICMgTkVXT0JKCisgICAgICAgICAgICBiJ2NidWlsdGluc1xubGlzdFxuKClceDgxJywKKyAgICAgICAgICAgIGInTihceDg1JywgICAgICAgICAgICAgICAgICAjIFRVUExFMQorICAgICAgICAgICAgYidOTihceDg2JywgICAgICAgICAgICAgICAgICMgVFVQTEUyCisgICAgICAgICAgICBiJ04oTlx4ODYnLAorICAgICAgICAgICAgYidOTk4oXHg4NycsICAgICAgICAgICAgICAgICMgVFVQTEUzCisgICAgICAgICAgICBiJ05OKE5ceDg3JywKKyAgICAgICAgICAgIGInTihOTlx4ODcnLAorICAgICAgICAgICAgYiddKChceDkwJywgICAgICAgICAgICAgICAgICMgQURESVRFTVMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIE5FV09CSl9FWAorICAgICAgICAgICAgYidjYnVpbHRpbnNcbmxpc3Rcbil9KFx4OTInLAorICAgICAgICAgICAgYidjYnVpbHRpbnNcbmxpc3RcbikofVx4OTInLAorICAgICAgICAgICAgYidjYnVpbHRpbnNcbmxpc3RcbigpfVx4OTInLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgU1RBQ0tfR0xPQkFMCisgICAgICAgICAgICBiJ1ZidWlsdGluc1xuKFZsaXN0XG5ceDkzJywKKyAgICAgICAgICAgIGInVmJ1aWx0aW5zXG5WbGlzdFxuKFx4OTMnLAorICAgICAgICAgICAgYidOKFx4OTQnLCAgICAgICAgICAgICAgICAgICMgTUVNT0laRQorICAgICAgICBdCisgICAgICAgIGZvciBwIGluIGJhZHBpY2tsZXM6CisgICAgICAgICAgICBzZWxmLmNoZWNrX3VucGlja2xpbmdfZXJyb3Ioc2VsZi5iYWRfbWFya19lcnJvcnMsIHApCisKKyAgICBkZWYgdGVzdF90cnVuY2F0ZWRfZGF0YShzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja191bnBpY2tsaW5nX2Vycm9yKEVPRkVycm9yLCBiJycpCisgICAgICAgIHNlbGYuY2hlY2tfdW5waWNrbGluZ19lcnJvcihFT0ZFcnJvciwgYidOJykKKyAgICAgICAgYmFkcGlja2xlcyA9IFsKKyAgICAgICAgICAgIGInQicsICAgICAgICAgICAgICAgICAgICAgICAjIEJJTkJZVEVTCisgICAgICAgICAgICBiJ0JceDAzXHgwMFx4MDAnLAorICAgICAgICAgICAgYidCXHgwM1x4MDBceDAwXHgwMCcsCisgICAgICAgICAgICBiJ0JceDAzXHgwMFx4MDBceDAwYWInLAorICAgICAgICAgICAgYidDJywgICAgICAgICAgICAgICAgICAgICAgICMgU0hPUlRfQklOQllURVMKKyAgICAgICAgICAgIGInQ1x4MDMnLAorICAgICAgICAgICAgYidDXHgwM2FiJywKKyAgICAgICAgICAgIGInRicsICAgICAgICAgICAgICAgICAgICAgICAjIEZMT0FUCisgICAgICAgICAgICBiJ0YwLjAnLAorICAgICAgICAgICAgYidGMC4wMCcsCisgICAgICAgICAgICBiJ0cnLCAgICAgICAgICAgICAgICAgICAgICAgIyBCSU5GTE9BVAorICAgICAgICAgICAgYidHXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCcsCisgICAgICAgICAgICBiJ0knLCAgICAgICAgICAgICAgICAgICAgICAgIyBJTlQKKyAgICAgICAgICAgIGInSTAnLAorICAgICAgICAgICAgYidKJywgICAgICAgICAgICAgICAgICAgICAgICMgQklOSU5UCisgICAgICAgICAgICBiJ0pceDAwXHgwMFx4MDAnLAorICAgICAgICAgICAgYidLJywgICAgICAgICAgICAgICAgICAgICAgICMgQklOSU5UMQorICAgICAgICAgICAgYidMJywgICAgICAgICAgICAgICAgICAgICAgICMgTE9ORworICAgICAgICAgICAgYidMMCcsCisgICAgICAgICAgICBiJ0wxMCcsCisgICAgICAgICAgICBiJ0wwTCcsCisgICAgICAgICAgICBiJ0wxMEwnLAorICAgICAgICAgICAgYidNJywgICAgICAgICAgICAgICAgICAgICAgICMgQklOSU5UMgorICAgICAgICAgICAgYidNXHgwMCcsCisgICAgICAgICAgICAjIGInUCcsICAgICAgICAgICAgICAgICAgICAgICAjIFBFUlNJRAorICAgICAgICAgICAgIyBiJ1BhYmMnLAorICAgICAgICAgICAgYidTJywgICAgICAgICAgICAgICAgICAgICAgICMgU1RSSU5HCisgICAgICAgICAgICBiIlMnYWJjJyIsCisgICAgICAgICAgICBiJ1QnLCAgICAgICAgICAgICAgICAgICAgICAgIyBCSU5TVFJJTkcKKyAgICAgICAgICAgIGInVFx4MDNceDAwXHgwMCcsCisgICAgICAgICAgICBiJ1RceDAzXHgwMFx4MDBceDAwJywKKyAgICAgICAgICAgIGInVFx4MDNceDAwXHgwMFx4MDBhYicsCisgICAgICAgICAgICBiJ1UnLCAgICAgICAgICAgICAgICAgICAgICAgIyBTSE9SVF9CSU5TVFJJTkcKKyAgICAgICAgICAgIGInVVx4MDMnLAorICAgICAgICAgICAgYidVXHgwM2FiJywKKyAgICAgICAgICAgIGInVicsICAgICAgICAgICAgICAgICAgICAgICAjIFVOSUNPREUKKyAgICAgICAgICAgIGInVmFiYycsCisgICAgICAgICAgICBiJ1gnLCAgICAgICAgICAgICAgICAgICAgICAgIyBCSU5VTklDT0RFCisgICAgICAgICAgICBiJ1hceDAzXHgwMFx4MDAnLAorICAgICAgICAgICAgYidYXHgwM1x4MDBceDAwXHgwMCcsCisgICAgICAgICAgICBiJ1hceDAzXHgwMFx4MDBceDAwYWInLAorICAgICAgICAgICAgYicoYycsICAgICAgICAgICAgICAgICAgICAgICMgR0xPQkFMCisgICAgICAgICAgICBiJyhjYnVpbHRpbnMnLAorICAgICAgICAgICAgYicoY2J1aWx0aW5zXG4nLAorICAgICAgICAgICAgYicoY2J1aWx0aW5zXG5saXN0JywKKyAgICAgICAgICAgIGInTmcnLCAgICAgICAgICAgICAgICAgICAgICAjIEdFVAorICAgICAgICAgICAgYidOZzAnLAorICAgICAgICAgICAgYicoaScsICAgICAgICAgICAgICAgICAgICAgICMgSU5TVAorICAgICAgICAgICAgYicoaWJ1aWx0aW5zJywKKyAgICAgICAgICAgIGInKGlidWlsdGluc1xuJywKKyAgICAgICAgICAgIGInKGlidWlsdGluc1xubGlzdCcsCisgICAgICAgICAgICBiJ05oJywgICAgICAgICAgICAgICAgICAgICAgIyBCSU5HRVQKKyAgICAgICAgICAgIGInTmonLCAgICAgICAgICAgICAgICAgICAgICAjIExPTkdfQklOR0VUCisgICAgICAgICAgICBiJ05qXHgwMFx4MDBceDAwJywKKyAgICAgICAgICAgIGInTnAnLCAgICAgICAgICAgICAgICAgICAgICAjIFBVVAorICAgICAgICAgICAgYidOcDAnLAorICAgICAgICAgICAgYidOcScsICAgICAgICAgICAgICAgICAgICAgICMgQklOUFVUCisgICAgICAgICAgICBiJ05yJywgICAgICAgICAgICAgICAgICAgICAgIyBMT05HX0JJTlBVVAorICAgICAgICAgICAgYidOclx4MDBceDAwXHgwMCcsCisgICAgICAgICAgICBiJ1x4ODAnLCAgICAgICAgICAgICAgICAgICAgIyBQUk9UTworICAgICAgICAgICAgYidceDgyJywgICAgICAgICAgICAgICAgICAgICMgRVhUMQorICAgICAgICAgICAgYidceDgzJywgICAgICAgICAgICAgICAgICAgICMgRVhUMgorICAgICAgICAgICAgYidceDg0XHgwMScsCisgICAgICAgICAgICBiJ1x4ODQnLCAgICAgICAgICAgICAgICAgICAgIyBFWFQ0CisgICAgICAgICAgICBiJ1x4ODRceDAxXHgwMFx4MDAnLAorICAgICAgICAgICAgYidceDhhJywgICAgICAgICAgICAgICAgICAgICMgTE9ORzEKKyAgICAgICAgICAgIGInXHg4YicsICAgICAgICAgICAgICAgICAgICAjIExPTkc0CisgICAgICAgICAgICBiJ1x4OGJceDAwXHgwMFx4MDAnLAorICAgICAgICAgICAgYidceDhjJywgICAgICAgICAgICAgICAgICAgICMgU0hPUlRfQklOVU5JQ09ERQorICAgICAgICAgICAgYidceDhjXHgwMycsCisgICAgICAgICAgICBiJ1x4OGNceDAzYWInLAorICAgICAgICAgICAgYidceDhkJywgICAgICAgICAgICAgICAgICAgICMgQklOVU5JQ09ERTgKKyAgICAgICAgICAgIGInXHg4ZFx4MDNceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAnLAorICAgICAgICAgICAgYidceDhkXHgwM1x4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAnLAorICAgICAgICAgICAgYidceDhkXHgwM1x4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBhYicsCisgICAgICAgICAgICBiJ1x4OGUnLCAgICAgICAgICAgICAgICAgICAgIyBCSU5CWVRFUzgKKyAgICAgICAgICAgIGInXHg4ZVx4MDNceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAnLAorICAgICAgICAgICAgYidceDhlXHgwM1x4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAnLAorICAgICAgICAgICAgYidceDhlXHgwM1x4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBhYicsCisgICAgICAgICAgICBiJ1x4OTUnLCAgICAgICAgICAgICAgICAgICAgIyBGUkFNRQorICAgICAgICAgICAgYidceDk1XHgwMlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCcsCisgICAgICAgICAgICBiJ1x4OTVceDAyXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCcsCisgICAgICAgICAgICBiJ1x4OTVceDAyXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwME4nLAorICAgICAgICBdCisgICAgICAgIGZvciBwIGluIGJhZHBpY2tsZXM6CisgICAgICAgICAgICBzZWxmLmNoZWNrX3VucGlja2xpbmdfZXJyb3Ioc2VsZi50cnVuY2F0ZWRfZXJyb3JzLCBwKQorCisKK2NsYXNzIEFic3RyYWN0UGlja2xlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMgU3ViY2xhc3MgbXVzdCBkZWZpbmUgc2VsZi5kdW1wcywgc2VsZi5sb2Fkcy4KKworICAgIG9wdGltaXplZCA9IEZhbHNlCisKKyAgICBfdGVzdGRhdGEgPSBBYnN0cmFjdFVucGlja2xlVGVzdHMuX3Rlc3RkYXRhCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGFzc2VydF9pc19jb3B5ID0gQWJzdHJhY3RVbnBpY2tsZVRlc3RzLmFzc2VydF9pc19jb3B5CisKKyAgICBkZWYgdGVzdF9taXNjKHNlbGYpOgorICAgICAgICAjIHRlc3QgdmFyaW91cyBkYXRhdHlwZXMgbm90IHRlc3RlZCBieSB0ZXN0ZGF0YQorICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgorICAgICAgICAgICAgeCA9IG15aW50KDQpCisgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyh4LCBwcm90bykKKyAgICAgICAgICAgIHkgPSBzZWxmLmxvYWRzKHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KHgsIHkpCisKKyAgICAgICAgICAgIHggPSAoMSwgKCkpCisgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyh4LCBwcm90bykKKyAgICAgICAgICAgIHkgPSBzZWxmLmxvYWRzKHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KHgsIHkpCisKKyAgICAgICAgICAgIHggPSBpbml0YXJnKDEsIHgpCisgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyh4LCBwcm90bykKKyAgICAgICAgICAgIHkgPSBzZWxmLmxvYWRzKHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KHgsIHkpCisKKyAgICAgICAgIyBYWFggdGVzdCBfX3JlZHVjZV9fIHByb3RvY29sPworCisgICAgZGVmIHRlc3Rfcm91bmR0cmlwX2VxdWFsaXR5KHNlbGYpOgorICAgICAgICBleHBlY3RlZCA9IHNlbGYuX3Rlc3RkYXRhCisgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CisgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyhleHBlY3RlZCwgcHJvdG8pCisgICAgICAgICAgICBnb3QgPSBzZWxmLmxvYWRzKHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KGV4cGVjdGVkLCBnb3QpCiAKICAgICAjIFRoZXJlIGFyZSBncmF0dWl0b3VzIGRpZmZlcmVuY2VzIGJldHdlZW4gcGlja2xlcyBwcm9kdWNlZCBieQogICAgICMgcGlja2xlIGFuZCBjUGlja2xlLCBsYXJnZWx5IGJlY2F1c2UgY1BpY2tsZSBzdGFydHMgUFVUIGluZGljZXMgYXQKQEAgLTYxNSwxOCArMTIzNywyMSBAQAogICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgogICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHMobCwgcHJvdG8pCiAgICAgICAgICAgICB4ID0gc2VsZi5sb2FkcyhzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHgsIGxpc3QpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih4KSwgMSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh4IGlzIHhbMF0pCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHhbMF0sIHgpCiAKLSAgICBkZWYgdGVzdF9yZWN1cnNpdmVfdHVwbGUoc2VsZik6CisgICAgZGVmIHRlc3RfcmVjdXJzaXZlX3R1cGxlX2FuZF9saXN0KHNlbGYpOgogICAgICAgICB0ID0gKFtdLCkKICAgICAgICAgdFswXS5hcHBlbmQodCkKICAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKICAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKHQsIHByb3RvKQogICAgICAgICAgICAgeCA9IHNlbGYubG9hZHMocykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh4LCB0dXBsZSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHgpLCAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHhbMF0sIGxpc3QpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih4WzBdKSwgMSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh4IGlzIHhbMF1bMF0pCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHhbMF1bMF0sIHgpCiAKICAgICBkZWYgdGVzdF9yZWN1cnNpdmVfZGljdChzZWxmKToKICAgICAgICAgZCA9IHt9CkBAIC02MzQsOCArMTI1OSw2NSBAQAogICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgogICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHMoZCwgcHJvdG8pCiAgICAgICAgICAgICB4ID0gc2VsZi5sb2FkcyhzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHgsIGRpY3QpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoeC5rZXlzKCkpLCBbMV0pCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoeFsxXSBpcyB4KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh4WzFdLCB4KQorCisgICAgZGVmIHRlc3RfcmVjdXJzaXZlX2RpY3Rfa2V5KHNlbGYpOgorICAgICAgICBkID0ge30KKyAgICAgICAgayA9IEsoZCkKKyAgICAgICAgZFtrXSA9IDEKKyAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKKyAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKGQsIHByb3RvKQorICAgICAgICAgICAgeCA9IHNlbGYubG9hZHMocykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh4LCBkaWN0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oeC5rZXlzKCkpLCAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGxpc3QoeC5rZXlzKCkpWzBdLCBLKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhsaXN0KHgua2V5cygpKVswXS52YWx1ZSwgeCkKKworICAgIGRlZiB0ZXN0X3JlY3Vyc2l2ZV9zZXQoc2VsZik6CisgICAgICAgIHkgPSBzZXQoKQorICAgICAgICBrID0gSyh5KQorICAgICAgICB5LmFkZChrKQorICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UoNCwgcGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKHksIHByb3RvKQorICAgICAgICAgICAgeCA9IHNlbGYubG9hZHMocykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh4LCBzZXQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih4KSwgMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShsaXN0KHgpWzBdLCBLKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhsaXN0KHgpWzBdLnZhbHVlLCB4KQorCisgICAgZGVmIHRlc3RfcmVjdXJzaXZlX2xpc3Rfc3ViY2xhc3Moc2VsZik6CisgICAgICAgIHkgPSBNeUxpc3QoKQorICAgICAgICB5LmFwcGVuZCh5KQorICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UoMiwgcGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKHksIHByb3RvKQorICAgICAgICAgICAgeCA9IHNlbGYubG9hZHMocykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh4LCBNeUxpc3QpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih4KSwgMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoeFswXSwgeCkKKworICAgIGRlZiB0ZXN0X3JlY3Vyc2l2ZV9kaWN0X3N1YmNsYXNzKHNlbGYpOgorICAgICAgICBkID0gTXlEaWN0KCkKKyAgICAgICAgZFsxXSA9IGQKKyAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKDIsIHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyhkLCBwcm90bykKKyAgICAgICAgICAgIHggPSBzZWxmLmxvYWRzKHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoeCwgTXlEaWN0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHgua2V5cygpKSwgWzFdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh4WzFdLCB4KQorCisgICAgZGVmIHRlc3RfcmVjdXJzaXZlX2RpY3Rfc3ViY2xhc3Nfa2V5KHNlbGYpOgorICAgICAgICBkID0gTXlEaWN0KCkKKyAgICAgICAgayA9IEsoZCkKKyAgICAgICAgZFtrXSA9IDEKKyAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKDIsIHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyhkLCBwcm90bykKKyAgICAgICAgICAgIHggPSBzZWxmLmxvYWRzKHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoeCwgTXlEaWN0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obGlzdCh4LmtleXMoKSkpLCAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGxpc3QoeC5rZXlzKCkpWzBdLCBLKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhsaXN0KHgua2V5cygpKVswXS52YWx1ZSwgeCkKIAogICAgIGRlZiB0ZXN0X3JlY3Vyc2l2ZV9pbnN0KHNlbGYpOgogICAgICAgICBpID0gQygpCkBAIC02NDMsNiArMTMyNSw3IEBACiAgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CiAgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyhpLCBwcm90bykKICAgICAgICAgICAgIHggPSBzZWxmLmxvYWRzKHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoeCwgQykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlyKHgpLCBkaXIoaSkpCiAgICAgICAgICAgICBzZWxmLmFzc2VydElzKHguYXR0ciwgeCkKIApAQCAtNjU1LDM4ICsxMzM4LDUzIEBACiAgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CiAgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyhsLCBwcm90bykKICAgICAgICAgICAgIHggPSBzZWxmLmxvYWRzKHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoeCwgbGlzdCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHgpLCAxKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXIoeFswXSksIGRpcihpKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdCh4WzBdLmF0dHIua2V5cygpKSwgWzFdKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHhbMF0uYXR0clsxXSBpcyB4KQogCi0gICAgZGVmIHRlc3RfZ2V0KHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgc2VsZi5sb2FkcywgYidnMFxucDAnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9hZHMoYicoKEtkdHAwXG5oXHgwMGwuKSknKSwgWygxMDAsKSwgKDEwMCwpXSkKKyAgICBkZWYgY2hlY2tfcmVjdXJzaXZlX2NvbGxlY3Rpb25fYW5kX2luc3Qoc2VsZiwgZmFjdG9yeSk6CisgICAgICAgIGggPSBIKCkKKyAgICAgICAgeSA9IGZhY3RvcnkoW2hdKQorICAgICAgICBoLmF0dHIgPSB5CisgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CisgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyh5LCBwcm90bykKKyAgICAgICAgICAgIHggPSBzZWxmLmxvYWRzKHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoeCwgdHlwZSh5KSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHgpLCAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGxpc3QoeClbMF0sIEgpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKGxpc3QoeClbMF0uYXR0ciwgeCkKIAotICAgIGRlZiB0ZXN0X2luc2VjdXJlX3N0cmluZ3Moc2VsZik6Ci0gICAgICAgICMgWFhYIFNvbWUgb2YgdGhlc2UgdGVzdHMgYXJlIHRlbXBvcmFyaWx5IGRpc2FibGVkCi0gICAgICAgIGluc2VjdXJlID0gW2IiYWJjIiwgYiIyICsgMiIsICMgbm90IHF1b3RlZAotICAgICAgICAgICAgICAgICAgICAjIyBiIidhYmMnICsgJ2RlZiciLCAjIG5vdCBhIHNpbmdsZSBxdW90ZWQgc3RyaW5nCi0gICAgICAgICAgICAgICAgICAgIGIiJ2FiYyIsICMgcXVvdGUgaXMgbm90IGNsb3NlZAotICAgICAgICAgICAgICAgICAgICBiIidhYmNcIiIsICMgb3BlbiBxdW90ZSBhbmQgY2xvc2UgcXVvdGUgZG9uJ3QgbWF0Y2gKLSAgICAgICAgICAgICAgICAgICAgYiInYWJjJyAgID8iLCAjIGp1bmsgYWZ0ZXIgY2xvc2UgcXVvdGUKLSAgICAgICAgICAgICAgICAgICAgYiInXFwnIiwgIyB0cmFpbGluZyBiYWNrc2xhc2gKLSAgICAgICAgICAgICAgICAgICAgIyBWYXJpYXRpb25zIG9uIGlzc3VlICMxNzcxMAotICAgICAgICAgICAgICAgICAgICBiIiciLAotICAgICAgICAgICAgICAgICAgICBiJyInLAotICAgICAgICAgICAgICAgICAgICBiIicgIiwKLSAgICAgICAgICAgICAgICAgICAgYiInICAiLAotICAgICAgICAgICAgICAgICAgICBiIicgICAiLAotICAgICAgICAgICAgICAgICAgICBiIicgICAgIiwKLSAgICAgICAgICAgICAgICAgICAgYiciICAgICcsCi0gICAgICAgICAgICAgICAgICAgICMgc29tZSB0ZXN0cyBvZiB0aGUgcXVvdGluZyBydWxlcwotICAgICAgICAgICAgICAgICAgICAjIyBiIidhYmNcIlwnJyIsCi0gICAgICAgICAgICAgICAgICAgICMjIGIiJ1xcXFxhXCdcJ1wnXFxcJ1xcXFxcJyciLAotICAgICAgICAgICAgICAgICAgICBdCi0gICAgICAgIGZvciBiIGluIGluc2VjdXJlOgotICAgICAgICAgICAgYnVmID0gYiJTIiArIGIgKyBiIlwwMTJwMFwwMTIuIgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5sb2FkcywgYnVmKQorICAgIGRlZiB0ZXN0X3JlY3Vyc2l2ZV9saXN0X2FuZF9pbnN0KHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3JlY3Vyc2l2ZV9jb2xsZWN0aW9uX2FuZF9pbnN0KGxpc3QpCisKKyAgICBkZWYgdGVzdF9yZWN1cnNpdmVfdHVwbGVfYW5kX2luc3Qoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfcmVjdXJzaXZlX2NvbGxlY3Rpb25fYW5kX2luc3QodHVwbGUpCisKKyAgICBkZWYgdGVzdF9yZWN1cnNpdmVfZGljdF9hbmRfaW5zdChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19yZWN1cnNpdmVfY29sbGVjdGlvbl9hbmRfaW5zdChkaWN0LmZyb21rZXlzKQorCisgICAgZGVmIHRlc3RfcmVjdXJzaXZlX3NldF9hbmRfaW5zdChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19yZWN1cnNpdmVfY29sbGVjdGlvbl9hbmRfaW5zdChzZXQpCisKKyAgICBkZWYgdGVzdF9yZWN1cnNpdmVfZnJvemVuc2V0X2FuZF9pbnN0KHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3JlY3Vyc2l2ZV9jb2xsZWN0aW9uX2FuZF9pbnN0KGZyb3plbnNldCkKKworICAgIGRlZiB0ZXN0X3JlY3Vyc2l2ZV9saXN0X3N1YmNsYXNzX2FuZF9pbnN0KHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3JlY3Vyc2l2ZV9jb2xsZWN0aW9uX2FuZF9pbnN0KE15TGlzdCkKKworICAgIGRlZiB0ZXN0X3JlY3Vyc2l2ZV90dXBsZV9zdWJjbGFzc19hbmRfaW5zdChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19yZWN1cnNpdmVfY29sbGVjdGlvbl9hbmRfaW5zdChNeVR1cGxlKQorCisgICAgZGVmIHRlc3RfcmVjdXJzaXZlX2RpY3Rfc3ViY2xhc3NfYW5kX2luc3Qoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfcmVjdXJzaXZlX2NvbGxlY3Rpb25fYW5kX2luc3QoTXlEaWN0LmZyb21rZXlzKQorCisgICAgZGVmIHRlc3RfcmVjdXJzaXZlX3NldF9zdWJjbGFzc19hbmRfaW5zdChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19yZWN1cnNpdmVfY29sbGVjdGlvbl9hbmRfaW5zdChNeVNldCkKKworICAgIGRlZiB0ZXN0X3JlY3Vyc2l2ZV9mcm96ZW5zZXRfc3ViY2xhc3NfYW5kX2luc3Qoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfcmVjdXJzaXZlX2NvbGxlY3Rpb25fYW5kX2luc3QoTXlGcm96ZW5TZXQpCiAKICAgICBkZWYgdGVzdF91bmljb2RlKHNlbGYpOgogICAgICAgICBlbmRjYXNlcyA9IFsnJywgJzxcXHU+JywgJzxcXFx1MTIzND4nLCAnPFxuPicsCkBAIC02OTcsNDggKzEzOTUsMzcgQEAKICAgICAgICAgICAgIGZvciB1IGluIGVuZGNhc2VzOgogICAgICAgICAgICAgICAgIHAgPSBzZWxmLmR1bXBzKHUsIHByb3RvKQogICAgICAgICAgICAgICAgIHUyID0gc2VsZi5sb2FkcyhwKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodTIsIHUpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfaXNfY29weSh1LCB1MikKIAogICAgIGRlZiB0ZXN0X3VuaWNvZGVfaGlnaF9wbGFuZShzZWxmKToKICAgICAgICAgdCA9ICdcVTAwMDEyMzQ1JwogICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgogICAgICAgICAgICAgcCA9IHNlbGYuZHVtcHModCwgcHJvdG8pCiAgICAgICAgICAgICB0MiA9IHNlbGYubG9hZHMocCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDIsIHQpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KHQsIHQyKQogCiAgICAgZGVmIHRlc3RfYnl0ZXMoc2VsZik6CiAgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CiAgICAgICAgICAgICBmb3IgcyBpbiBiJycsIGIneHl6JywgYid4eXonKjEwMDoKICAgICAgICAgICAgICAgICBwID0gc2VsZi5kdW1wcyhzLCBwcm90bykKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9hZHMocCksIHMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfaXNfY29weShzLCBzZWxmLmxvYWRzKHApKQogICAgICAgICAgICAgZm9yIHMgaW4gW2J5dGVzKFtpXSkgZm9yIGkgaW4gcmFuZ2UoMjU2KV06CiAgICAgICAgICAgICAgICAgcCA9IHNlbGYuZHVtcHMocywgcHJvdG8pCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvYWRzKHApLCBzKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkocywgc2VsZi5sb2FkcyhwKSkKICAgICAgICAgICAgIGZvciBzIGluIFtieXRlcyhbaSwgaV0pIGZvciBpIGluIHJhbmdlKDI1NildOgogICAgICAgICAgICAgICAgIHAgPSBzZWxmLmR1bXBzKHMsIHByb3RvKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb2FkcyhwKSwgcykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KHMsIHNlbGYubG9hZHMocCkpCiAKICAgICBkZWYgdGVzdF9pbnRzKHNlbGYpOgotICAgICAgICBpbXBvcnQgc3lzCiAgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CiAgICAgICAgICAgICBuID0gc3lzLm1heHNpemUKICAgICAgICAgICAgIHdoaWxlIG46CiAgICAgICAgICAgICAgICAgZm9yIGV4cGVjdGVkIGluICgtbiwgbik6CiAgICAgICAgICAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKGV4cGVjdGVkLCBwcm90bykKICAgICAgICAgICAgICAgICAgICAgbjIgPSBzZWxmLmxvYWRzKHMpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIG4yKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KGV4cGVjdGVkLCBuMikKICAgICAgICAgICAgICAgICBuID0gbiA+PiAxCiAKLSAgICBkZWYgdGVzdF9tYXhpbnQ2NChzZWxmKToKLSAgICAgICAgbWF4aW50NjQgPSAoMSA8PCA2MykgLSAxCi0gICAgICAgIGRhdGEgPSBiJ0knICsgc3RyKG1heGludDY0KS5lbmNvZGUoImFzY2lpIikgKyBiJ1xuLicKLSAgICAgICAgZ290ID0gc2VsZi5sb2FkcyhkYXRhKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdvdCwgbWF4aW50NjQpCi0KLSAgICAgICAgIyBUcnkgdG9vIHdpdGggYSBib2d1cyBsaXRlcmFsLgotICAgICAgICBkYXRhID0gYidJJyArIHN0cihtYXhpbnQ2NCkuZW5jb2RlKCJhc2NpaSIpICsgYidKVU5LXG4uJwotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLmxvYWRzLCBkYXRhKQotCiAgICAgZGVmIHRlc3RfbG9uZyhzZWxmKToKICAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKICAgICAgICAgICAgICMgMjU2IGJ5dGVzIGlzIHdoZXJlIExPTkc0IGJlZ2lucy4KQEAgLTc0OCw3ICsxNDM1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgZm9yIG4gaW4gbnBvcywgLW5wb3M6CiAgICAgICAgICAgICAgICAgICAgICAgICBwaWNrbGUgPSBzZWxmLmR1bXBzKG4sIHByb3RvKQogICAgICAgICAgICAgICAgICAgICAgICAgZ290ID0gc2VsZi5sb2FkcyhwaWNrbGUpCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG4sIGdvdCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkobiwgZ290KQogICAgICAgICAjIFRyeSBhIG1vbnN0ZXIuICBUaGlzIGlzIHF1YWRyYXRpYy10aW1lIGluIHByb3RvcyAwICYgMSwgc28gZG9uJ3QKICAgICAgICAgIyBib3RoZXIgd2l0aCB0aG9zZS4KICAgICAgICAgbmJhc2UgPSBpbnQoImRlYWRiZWVmZmVlZGZhY2UiLCAxNikKQEAgLTc1Niw2ICsxNDQzLDEwIEBACiAgICAgICAgIGZvciBuIGluIG5iYXNlLCAtbmJhc2U6CiAgICAgICAgICAgICBwID0gc2VsZi5kdW1wcyhuLCAyKQogICAgICAgICAgICAgZ290ID0gc2VsZi5sb2FkcyhwKQorICAgICAgICAgICAgIyBhc3NlcnRfaXNfY29weSBpcyB2ZXJ5IGV4cGVuc2l2ZSBoZXJlIGFzIGl0IHByZWNvbXB1dGVzCisgICAgICAgICAgICAjIGEgZmFpbHVyZSBtZXNzYWdlIGJ5IGNvbXB1dGluZyB0aGUgcmVwcigpIG9mIG4gYW5kIGdvdCwKKyAgICAgICAgICAgICMgd2UganVzdCBkbyB0aGUgY2hlY2sgb3Vyc2VsdmVzLgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKGdvdCksIGludCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobiwgZ290KQogCiAgICAgZGVmIHRlc3RfZmxvYXQoc2VsZik6CkBAIC03NjYsNyArMTQ1Nyw3IEBACiAgICAgICAgICAgICBmb3IgdmFsdWUgaW4gdGVzdF92YWx1ZXM6CiAgICAgICAgICAgICAgICAgcGlja2xlID0gc2VsZi5kdW1wcyh2YWx1ZSwgcHJvdG8pCiAgICAgICAgICAgICAgICAgZ290ID0gc2VsZi5sb2FkcyhwaWNrbGUpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZSwgZ290KQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkodmFsdWUsIGdvdCkKIAogICAgIEBydW5fd2l0aF9sb2NhbGUoJ0xDX0FMTCcsICdkZV9ERScsICdmcl9GUicpCiAgICAgZGVmIHRlc3RfZmxvYXRfZm9ybWF0KHNlbGYpOgpAQCAtNzc0LDE1ICsxNDY1LDE4IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kdW1wcygxLjIsIDApWzA6M10sIGInRjEuJykKIAogICAgIGRlZiB0ZXN0X3JlZHVjZShzZWxmKToKLSAgICAgICAgcGFzcworICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgorICAgICAgICAgICAgaW5zdCA9IEFBQSgpCisgICAgICAgICAgICBkdW1wZWQgPSBzZWxmLmR1bXBzKGluc3QsIHByb3RvKQorICAgICAgICAgICAgbG9hZGVkID0gc2VsZi5sb2FkcyhkdW1wZWQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlZCwgUkVEVUNFX0EpCiAKICAgICBkZWYgdGVzdF9nZXRpbml0YXJncyhzZWxmKToKLSAgICAgICAgcGFzcwotCi0gICAgZGVmIHRlc3RfcG9wX2VtcHR5X3N0YWNrKHNlbGYpOgotICAgICAgICAjIFRlc3QgaXNzdWU3NDU1Ci0gICAgICAgIHMgPSBiJzAnCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChwaWNrbGUuVW5waWNrbGluZ0Vycm9yLCBJbmRleEVycm9yKSwgc2VsZi5sb2FkcywgcykKKyAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKKyAgICAgICAgICAgIGluc3QgPSBpbml0YXJnKDEsIDIpCisgICAgICAgICAgICBkdW1wZWQgPSBzZWxmLmR1bXBzKGluc3QsIHByb3RvKQorICAgICAgICAgICAgbG9hZGVkID0gc2VsZi5sb2FkcyhkdW1wZWQpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KGluc3QsIGxvYWRlZCkKIAogICAgIGRlZiB0ZXN0X21ldGFjbGFzcyhzZWxmKToKICAgICAgICAgYSA9IHVzZV9tZXRhY2xhc3MoKQpAQCAtNzk4LDYgKzE0OTIsNyBAQAogICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHMoYSwgcHJvdG8pCiAgICAgICAgICAgICBiID0gc2VsZi5sb2FkcyhzKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKGEpLCB0eXBlKGIpKQogCiAgICAgZGVmIHRlc3Rfc3RydWN0c2VxKHNlbGYpOgogICAgICAgICBpbXBvcnQgdGltZQpAQCAtODA3LDI5ICsxNTAyLDI5IEBACiAgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CiAgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyh0LCBwcm90bykKICAgICAgICAgICAgIHUgPSBzZWxmLmxvYWRzKHMpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQsIHUpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KHQsIHUpCiAgICAgICAgICAgICBpZiBoYXNhdHRyKG9zLCAic3RhdCIpOgogICAgICAgICAgICAgICAgIHQgPSBvcy5zdGF0KG9zLmN1cmRpcikKICAgICAgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyh0LCBwcm90bykKICAgICAgICAgICAgICAgICB1ID0gc2VsZi5sb2FkcyhzKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodCwgdSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KHQsIHUpCiAgICAgICAgICAgICBpZiBoYXNhdHRyKG9zLCAic3RhdHZmcyIpOgogICAgICAgICAgICAgICAgIHQgPSBvcy5zdGF0dmZzKG9zLmN1cmRpcikKICAgICAgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyh0LCBwcm90bykKICAgICAgICAgICAgICAgICB1ID0gc2VsZi5sb2FkcyhzKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodCwgdSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KHQsIHUpCiAKICAgICBkZWYgdGVzdF9lbGxpcHNpcyhzZWxmKToKICAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKICAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKC4uLiwgcHJvdG8pCiAgICAgICAgICAgICB1ID0gc2VsZi5sb2FkcyhzKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCguLi4sIHUpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKC4uLiwgdSkKIAogICAgIGRlZiB0ZXN0X25vdGltcGxlbWVudGVkKHNlbGYpOgogICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgogICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHMoTm90SW1wbGVtZW50ZWQsIHByb3RvKQogICAgICAgICAgICAgdSA9IHNlbGYubG9hZHMocykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm90SW1wbGVtZW50ZWQsIHUpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKE5vdEltcGxlbWVudGVkLCB1KQogCiAgICAgZGVmIHRlc3Rfc2luZ2xldG9uX3R5cGVzKHNlbGYpOgogICAgICAgICAjIElzc3VlICM2NDc3OiBUZXN0IHRoYXQgdHlwZXMgb2YgYnVpbHQtaW4gc2luZ2xldG9ucyBjYW4gYmUgcGlja2xlZC4KQEAgLTg0MywyMSArMTUzOCwyMSBAQAogICAgICMgVGVzdHMgZm9yIHByb3RvY29sIDIKIAogICAgIGRlZiB0ZXN0X3Byb3RvKHNlbGYpOgotICAgICAgICBidWlsZF9ub25lID0gcGlja2xlLk5PTkUgKyBwaWNrbGUuU1RPUAogICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgotICAgICAgICAgICAgZXhwZWN0ZWQgPSBidWlsZF9ub25lCisgICAgICAgICAgICBwaWNrbGVkID0gc2VsZi5kdW1wcyhOb25lLCBwcm90bykKICAgICAgICAgICAgIGlmIHByb3RvID49IDI6Ci0gICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSBwaWNrbGUuUFJPVE8gKyBieXRlcyhbcHJvdG9dKSArIGV4cGVjdGVkCi0gICAgICAgICAgICBwID0gc2VsZi5kdW1wcyhOb25lLCBwcm90bykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCwgZXhwZWN0ZWQpCisgICAgICAgICAgICAgICAgcHJvdG9faGVhZGVyID0gcGlja2xlLlBST1RPICsgYnl0ZXMoW3Byb3RvXSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocGlja2xlZC5zdGFydHN3aXRoKHByb3RvX2hlYWRlcikpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY291bnRfb3Bjb2RlKHBpY2tsZS5QUk9UTywgcGlja2xlZCksIDApCiAKICAgICAgICAgb29iID0gcHJvdG9jb2xzWy0xXSArIDEgICAgICMgYSBmdXR1cmUgcHJvdG9jb2wKKyAgICAgICAgYnVpbGRfbm9uZSA9IHBpY2tsZS5OT05FICsgcGlja2xlLlNUT1AKICAgICAgICAgYmFkcGlja2xlID0gcGlja2xlLlBST1RPICsgYnl0ZXMoW29vYl0pICsgYnVpbGRfbm9uZQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLmxvYWRzKGJhZHBpY2tsZSkKLSAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IgYXMgZGV0YWlsOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0cihkZXRhaWwpLnN0YXJ0c3dpdGgoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bnN1cHBvcnRlZCBwaWNrbGUgcHJvdG9jb2wiKSkKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigidW5zdXBwb3J0ZWQgcGlja2xlIHByb3RvY29sIiwgc3RyKGVycikpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLmZhaWwoImV4cGVjdGVkIGJhZCBwcm90b2NvbCBudW1iZXIgdG8gcmFpc2UgVmFsdWVFcnJvciIpCiAKQEAgLTg2Niw3ICsxNTYxLDcgQEAKICAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKICAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKHgsIHByb3RvKQogICAgICAgICAgICAgeSA9IHNlbGYubG9hZHMocykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgeSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkoeCwgeSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Bjb2RlX2luX3BpY2tsZShwaWNrbGUuTE9ORzEsIHMpLCBwcm90byA+PSAyKQogCiAgICAgZGVmIHRlc3RfbG9uZzQoc2VsZik6CkBAIC04NzQsNyArMTU2OSw3IEBACiAgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CiAgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyh4LCBwcm90bykKICAgICAgICAgICAgIHkgPSBzZWxmLmxvYWRzKHMpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIHkpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KHgsIHkpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wY29kZV9pbl9waWNrbGUocGlja2xlLkxPTkc0LCBzKSwgcHJvdG8gPj0gMikKIAogICAgIGRlZiB0ZXN0X3Nob3J0X3R1cGxlcyhzZWxmKToKQEAgLTkxMiw5ICsxNjA3LDkgQEAKICAgICAgICAgICAgIGZvciB4IGluIGEsIGIsIGMsIGQsIGU6CiAgICAgICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHMoeCwgcHJvdG8pCiAgICAgICAgICAgICAgICAgeSA9IHNlbGYubG9hZHMocykKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIHksIChwcm90bywgeCwgcywgeSkpCi0gICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSBleHBlY3RlZF9vcGNvZGVbcHJvdG8sIGxlbih4KV0KLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wY29kZV9pbl9waWNrbGUoZXhwZWN0ZWQsIHMpLCBUcnVlKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkoeCwgeSkKKyAgICAgICAgICAgICAgICBleHBlY3RlZCA9IGV4cGVjdGVkX29wY29kZVttaW4ocHJvdG8sIDMpLCBsZW4oeCldCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wY29kZV9pbl9waWNrbGUoZXhwZWN0ZWQsIHMpKQogCiAgICAgZGVmIHRlc3Rfc2luZ2xldG9ucyhzZWxmKToKICAgICAgICAgIyBNYXAgKHByb3RvLCBzaW5nbGV0b24pIHRvIGV4cGVjdGVkIG9wY29kZS4KQEAgLTkzOCw4ICsxNjMzLDggQEAKICAgICAgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyh4LCBwcm90bykKICAgICAgICAgICAgICAgICB5ID0gc2VsZi5sb2FkcyhzKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh4IGlzIHksIChwcm90bywgeCwgcywgeSkpCi0gICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSBleHBlY3RlZF9vcGNvZGVbcHJvdG8sIHhdCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGNvZGVfaW5fcGlja2xlKGV4cGVjdGVkLCBzKSwgVHJ1ZSkKKyAgICAgICAgICAgICAgICBleHBlY3RlZCA9IGV4cGVjdGVkX29wY29kZVttaW4ocHJvdG8sIDMpLCB4XQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGNvZGVfaW5fcGlja2xlKGV4cGVjdGVkLCBzKSkKIAogICAgIGRlZiB0ZXN0X25ld29ial90dXBsZShzZWxmKToKICAgICAgICAgeCA9IE15VHVwbGUoWzEsIDIsIDNdKQpAQCAtOTQ4LDggKzE2NDMsNyBAQAogICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgogICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHMoeCwgcHJvdG8pCiAgICAgICAgICAgICB5ID0gc2VsZi5sb2FkcyhzKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dXBsZSh4KSwgdHVwbGUoeSkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguX19kaWN0X18sIHkuX19kaWN0X18pCisgICAgICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KHgsIHkpCiAKICAgICBkZWYgdGVzdF9uZXdvYmpfbGlzdChzZWxmKToKICAgICAgICAgeCA9IE15TGlzdChbMSwgMiwgM10pCkBAIC05NTgsOCArMTY1Miw3IEBACiAgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CiAgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyh4LCBwcm90bykKICAgICAgICAgICAgIHkgPSBzZWxmLmxvYWRzKHMpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoeCksIGxpc3QoeSkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguX19kaWN0X18sIHkuX19kaWN0X18pCisgICAgICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KHgsIHkpCiAKICAgICBkZWYgdGVzdF9uZXdvYmpfZ2VuZXJpYyhzZWxmKToKICAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKQEAgLTk3MCw2ICsxNjYzLDcgQEAKICAgICAgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyh4LCBwcm90bykKICAgICAgICAgICAgICAgICB5ID0gc2VsZi5sb2FkcyhzKQogICAgICAgICAgICAgICAgIGRldGFpbCA9IChwcm90bywgQywgQiwgeCwgeSwgdHlwZSh5KSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KHgsIHkpICMgWFhYIHJldmlzaXQKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEIoeCksIEIoeSksIGRldGFpbCkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguX19kaWN0X18sIHkuX19kaWN0X18sIGRldGFpbCkKIApAQCAtOTkyLDYgKzE2ODYsMTggQEAKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEIoeCksIEIoeSksIGRldGFpbCkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguX19kaWN0X18sIHkuX19kaWN0X18sIGRldGFpbCkKIAorICAgIGRlZiB0ZXN0X25ld29ial9ub3RfY2xhc3Moc2VsZik6CisgICAgICAgICMgSXNzdWUgMjQ1NTIKKyAgICAgICAgZ2xvYmFsIFNpbXBsZU5ld09iagorICAgICAgICBzYXZlID0gU2ltcGxlTmV3T2JqCisgICAgICAgIG8gPSBTaW1wbGVOZXdPYmouX19uZXdfXyhTaW1wbGVOZXdPYmopCisgICAgICAgIGIgPSBzZWxmLmR1bXBzKG8sIDQpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIFNpbXBsZU5ld09iaiA9IDQyCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoVHlwZUVycm9yLCBwaWNrbGUuVW5waWNrbGluZ0Vycm9yKSwgc2VsZi5sb2FkcywgYikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIFNpbXBsZU5ld09iaiA9IHNhdmUKKwogICAgICMgUmVnaXN0ZXIgYSB0eXBlIHdpdGggY29weXJlZywgd2l0aCBleHRlbnNpb24gY29kZSBleHRjb2RlLiAgUGlja2xlCiAgICAgIyBhbiBvYmplY3Qgb2YgdGhhdCB0eXBlLiAgQ2hlY2sgdGhhdCB0aGUgcmVzdWx0aW5nIHBpY2tsZSB1c2VzIG9wY29kZQogICAgICMgKEVYVFsxMjRdKSB1bmRlciBwcm90byAyLCBhbmQgbm90IGluIHByb3RvIDEuCkBAIC0xMDA4LDExICsxNzE0LDEwIEBACiAgICAgICAgICAgICBzMSA9IHNlbGYuZHVtcHMoeCwgMSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oX19uYW1lX18uZW5jb2RlKCJ1dGYtOCIpLCBzMSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oYiJNeUxpc3QiLCBzMSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Bjb2RlX2luX3BpY2tsZShvcGNvZGUsIHMxKSwgRmFsc2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9wY29kZV9pbl9waWNrbGUob3Bjb2RlLCBzMSkpCiAKICAgICAgICAgICAgIHkgPSBzZWxmLmxvYWRzKHMxKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHgpLCBsaXN0KHkpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4Ll9fZGljdF9fLCB5Ll9fZGljdF9fKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfaXNfY29weSh4LCB5KQogCiAgICAgICAgICAgICAjIER1bXAgdXNpbmcgcHJvdG9jb2wgMiBmb3IgdGVzdC4KICAgICAgICAgICAgIHMyID0gc2VsZi5kdW1wcyh4LCAyKQpAQCAtMTAyMSw5ICsxNzI2LDcgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Bjb2RlX2luX3BpY2tsZShvcGNvZGUsIHMyKSwgVHJ1ZSwgcmVwcihzMikpCiAKICAgICAgICAgICAgIHkgPSBzZWxmLmxvYWRzKHMyKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHgpLCBsaXN0KHkpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4Ll9fZGljdF9fLCB5Ll9fZGljdF9fKQotCisgICAgICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KHgsIHkpCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBlLnJlc3RvcmUoKQogCkBAIC0xMDQ3LDcgKzE3NTAsNyBAQAogICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgogICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHMoeCwgcHJvdG8pCiAgICAgICAgICAgICB5ID0gc2VsZi5sb2FkcyhzKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCB5KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfaXNfY29weSh4LCB5KQogICAgICAgICAgICAgbnVtX2FwcGVuZHMgPSBjb3VudF9vcGNvZGUocGlja2xlLkFQUEVORFMsIHMpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG51bV9hcHBlbmRzLCBwcm90byA+IDApCiAKQEAgLTEwNTYsNyArMTc1OSw3IEBACiAgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CiAgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyh4LCBwcm90bykKICAgICAgICAgICAgIHkgPSBzZWxmLmxvYWRzKHMpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIHkpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KHgsIHkpCiAgICAgICAgICAgICBudW1fYXBwZW5kcyA9IGNvdW50X29wY29kZShwaWNrbGUuQVBQRU5EUywgcykKICAgICAgICAgICAgIGlmIHByb3RvID09IDA6CiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChudW1fYXBwZW5kcywgMCkKQEAgLTEwNzAsNyArMTc3Myw3IEBACiAgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyh4LCBwcm90bykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzLCBieXRlc190eXBlcykKICAgICAgICAgICAgIHkgPSBzZWxmLmxvYWRzKHMpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIHkpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KHgsIHkpCiAgICAgICAgICAgICBudW1fc2V0aXRlbXMgPSBjb3VudF9vcGNvZGUocGlja2xlLlNFVElURU1TLCBzKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChudW1fc2V0aXRlbXMsIHByb3RvID4gMCkKIApAQCAtMTA3OSwyMiArMTc4Miw0OSBAQAogICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgogICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHMoeCwgcHJvdG8pCiAgICAgICAgICAgICB5ID0gc2VsZi5sb2FkcyhzKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCB5KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfaXNfY29weSh4LCB5KQogICAgICAgICAgICAgbnVtX3NldGl0ZW1zID0gY291bnRfb3Bjb2RlKHBpY2tsZS5TRVRJVEVNUywgcykKICAgICAgICAgICAgIGlmIHByb3RvID09IDA6CiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChudW1fc2V0aXRlbXMsIDApCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShudW1fc2V0aXRlbXMgPj0gMikKIAorICAgIGRlZiB0ZXN0X3NldF9jaHVua2luZyhzZWxmKToKKyAgICAgICAgbiA9IDEwICAjIHRvbyBzbWFsbCB0byBjaHVuaworICAgICAgICB4ID0gc2V0KHJhbmdlKG4pKQorICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgorICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHMoeCwgcHJvdG8pCisgICAgICAgICAgICB5ID0gc2VsZi5sb2FkcyhzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfaXNfY29weSh4LCB5KQorICAgICAgICAgICAgbnVtX2FkZGl0ZW1zID0gY291bnRfb3Bjb2RlKHBpY2tsZS5BRERJVEVNUywgcykKKyAgICAgICAgICAgIGlmIHByb3RvIDwgNDoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG51bV9hZGRpdGVtcywgMCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChudW1fYWRkaXRlbXMsIDEpCisKKyAgICAgICAgbiA9IDI1MDAgICMgZXhwZWN0IGF0IGxlYXN0IHR3byBjaHVua3Mgd2hlbiBwcm90byA+PSA0CisgICAgICAgIHggPSBzZXQocmFuZ2UobikpCisgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CisgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyh4LCBwcm90bykKKyAgICAgICAgICAgIHkgPSBzZWxmLmxvYWRzKHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KHgsIHkpCisgICAgICAgICAgICBudW1fYWRkaXRlbXMgPSBjb3VudF9vcGNvZGUocGlja2xlLkFERElURU1TLCBzKQorICAgICAgICAgICAgaWYgcHJvdG8gPCA0OgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnVtX2FkZGl0ZW1zLCAwKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChudW1fYWRkaXRlbXMsIDIpCisKICAgICBkZWYgdGVzdF9zaW1wbGVfbmV3b2JqKHNlbGYpOgogICAgICAgICB4ID0gb2JqZWN0Ll9fbmV3X18oU2ltcGxlTmV3T2JqKSAgIyBhdm9pZCBfX2luaXRfXwogICAgICAgICB4LmFiYyA9IDY2NgogICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgogICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHMoeCwgcHJvdG8pCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wY29kZV9pbl9waWNrbGUocGlja2xlLk5FV09CSiwgcyksIHByb3RvID49IDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wY29kZV9pbl9waWNrbGUocGlja2xlLk5FV09CSiwgcyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgPD0gcHJvdG8gPCA0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGNvZGVfaW5fcGlja2xlKHBpY2tsZS5ORVdPQkpfRVgsIHMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90byA+PSA0KQogICAgICAgICAgICAgeSA9IHNlbGYubG9hZHMocykgICAjIHdpbGwgcmFpc2UgVHlwZUVycm9yIGlmIF9faW5pdF9fIGNhbGxlZAotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh5LmFiYywgNjY2KQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4Ll9fZGljdF9fLCB5Ll9fZGljdF9fKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfaXNfY29weSh4LCB5KQogCiAgICAgZGVmIHRlc3RfbmV3b2JqX2xpc3Rfc2xvdHMoc2VsZik6CiAgICAgICAgIHggPSBTbG90TGlzdChbMSwgMiwgM10pCkBAIC0xMTAyLDEwICsxODMyLDcgQEAKICAgICAgICAgeC5iYXIgPSAiaGVsbG8iCiAgICAgICAgIHMgPSBzZWxmLmR1bXBzKHgsIDIpCiAgICAgICAgIHkgPSBzZWxmLmxvYWRzKHMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdCh4KSwgbGlzdCh5KSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4Ll9fZGljdF9fLCB5Ll9fZGljdF9fKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguZm9vLCB5LmZvbykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LmJhciwgeS5iYXIpCisgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkoeCwgeSkKIAogICAgIGRlZiB0ZXN0X3JlZHVjZV9vdmVycmlkZXNfZGVmYXVsdF9yZWR1Y2VfZXgoc2VsZik6CiAgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CkBAIC0xMTU0LDExICsxODgxLDEwIEBACiAKICAgICBAbm9fdHJhY2luZwogICAgIGRlZiB0ZXN0X2JhZF9nZXRhdHRyKHNlbGYpOgorICAgICAgICAjIElzc3VlICMzNTE0OiBjcmFzaCB3aGVuIHRoZXJlIGlzIGFuIGluZmluaXRlIGxvb3AgaW4gX19nZXRhdHRyX18KICAgICAgICAgeCA9IEJhZEdldGF0dHIoKQotICAgICAgICBmb3IgcHJvdG8gaW4gMCwgMToKKyAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgc2VsZi5kdW1wcywgeCwgcHJvdG8pCi0gICAgICAgICMgcHJvdG9jb2wgMiBkb24ndCByYWlzZSBhIFJ1bnRpbWVFcnJvci4KLSAgICAgICAgZCA9IHNlbGYuZHVtcHMoeCwgMikKIAogICAgIGRlZiB0ZXN0X3JlZHVjZV9iYWRfaXRlcmF0b3Ioc2VsZik6CiAgICAgICAgICMgSXNzdWU0MTc2OiBjcmFzaCB3aGVuIDR0aCBhbmQgNXRoIGl0ZW1zIG9mIF9fcmVkdWNlX18oKQpAQCAtMTE5MSwxMSArMTkxNywxMCBAQAogICAgICAgICBvYmogPSBbZGljdChsYXJnZV9kaWN0KSwgZGljdChsYXJnZV9kaWN0KSwgZGljdChsYXJnZV9kaWN0KV0KIAogICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgotICAgICAgICAgICAgZHVtcGVkID0gc2VsZi5kdW1wcyhvYmosIHByb3RvKQotICAgICAgICAgICAgbG9hZGVkID0gc2VsZi5sb2FkcyhkdW1wZWQpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlZCwgb2JqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRmFpbGVkIHByb3RvY29sICVkOiAlciAhPSAlciIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAocHJvdG8sIG9iaiwgbG9hZGVkKSkKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KHByb3RvPXByb3RvKToKKyAgICAgICAgICAgICAgICBkdW1wZWQgPSBzZWxmLmR1bXBzKG9iaiwgcHJvdG8pCisgICAgICAgICAgICAgICAgbG9hZGVkID0gc2VsZi5sb2FkcyhkdW1wZWQpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfaXNfY29weShvYmosIGxvYWRlZCkKIAogICAgIGRlZiB0ZXN0X2F0dHJpYnV0ZV9uYW1lX2ludGVybmluZyhzZWxmKToKICAgICAgICAgIyBUZXN0IHRoYXQgYXR0cmlidXRlIG5hbWVzIG9mIHBpY2tsZWQgb2JqZWN0cyBhcmUgaW50ZXJuZWQgd2hlbgpAQCAtMTIxMSw0MiArMTkzNiwxNSBAQAogICAgICAgICAgICAgZm9yIHhfa2V5LCB5X2tleSBpbiB6aXAoeF9rZXlzLCB5X2tleXMpOgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoeF9rZXksIHlfa2V5KQogCi0gICAgZGVmIHRlc3RfdW5waWNrbGVfZnJvbV8yeChzZWxmKToKLSAgICAgICAgIyBVbnBpY2tsZSBub24tdHJpdmlhbCBkYXRhIGZyb20gUHl0aG9uIDIueC4KLSAgICAgICAgbG9hZGVkID0gc2VsZi5sb2FkcyhEQVRBMykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZWQsIHNldChbMSwgMl0pKQotICAgICAgICBsb2FkZWQgPSBzZWxmLmxvYWRzKERBVEE0KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUobG9hZGVkKSwgdHlwZShyYW5nZSgwKSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChsb2FkZWQpLCBsaXN0KHJhbmdlKDUpKSkKLSAgICAgICAgbG9hZGVkID0gc2VsZi5sb2FkcyhEQVRBNSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGxvYWRlZCksIFNpbXBsZUNvb2tpZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGxvYWRlZC5rZXlzKCkpLCBbImtleSJdKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlZFsia2V5Il0udmFsdWUsICJTZXQtQ29va2llOiBrZXk9dmFsdWUiKQotCi0gICAgICAgIGZvciAoZXhjLCBkYXRhKSBpbiBEQVRBNy5pdGVtcygpOgotICAgICAgICAgICAgbG9hZGVkID0gc2VsZi5sb2FkcyhkYXRhKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKGxvYWRlZCksIGV4YykKLQotICAgICAgICBsb2FkZWQgPSBzZWxmLmxvYWRzKERBVEE4KQotICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUobG9hZGVkKSwgRXhjZXB0aW9uKQotCi0gICAgICAgIGxvYWRlZCA9IHNlbGYubG9hZHMoREFUQTkpCi0gICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShsb2FkZWQpLCBVbmljb2RlRW5jb2RlRXJyb3IpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVkLm9iamVjdCwgImZvbyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVkLmVuY29kaW5nLCAiYXNjaWkiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlZC5zdGFydCwgMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZWQuZW5kLCAxKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlZC5yZWFzb24sICJiYWQiKQotCiAgICAgZGVmIHRlc3RfcGlja2xlX3RvXzJ4KHNlbGYpOgogICAgICAgICAjIFBpY2tsZSBub24tdHJpdmlhbCBkYXRhIHdpdGggcHJvdG9jb2wgMiwgZXhwZWN0aW5nIHRoYXQgaXQgeWllbGRzCiAgICAgICAgICMgdGhlIHNhbWUgcmVzdWx0IGFzIFB5dGhvbiAyLnggZGlkLgogICAgICAgICAjIE5PVEU6IHRoaXMgdGVzdCBpcyBhIGJpdCB0b28gc3Ryb25nIHNpbmNlIHdlIGNhbiBwcm9kdWNlIGRpZmZlcmVudAogICAgICAgICAjIGJ5dGVjb2RlIHRoYXQgMi54IHdpbGwgc3RpbGwgdW5kZXJzdGFuZC4KICAgICAgICAgZHVtcGVkID0gc2VsZi5kdW1wcyhyYW5nZSg1KSwgMikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdW1wZWQsIERBVEE0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR1bXBlZCwgREFUQV9YUkFOR0UpCiAgICAgICAgIGR1bXBlZCA9IHNlbGYuZHVtcHMoc2V0KFszXSksIDIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHVtcGVkLCBEQVRBNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdW1wZWQsIERBVEFfU0VUMikKIAogICAgIGRlZiB0ZXN0X2xhcmdlX3BpY2tsZXMoc2VsZik6CiAgICAgICAgICMgVGVzdCB0aGUgY29ycmVjdG5lc3Mgb2YgaW50ZXJuYWwgYnVmZmVyaW5nIHJvdXRpbmVzIHdoZW4gaGFuZGxpbmcKQEAgLTEyNTgsNDggKzE5NTYsMTcgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGxvYWRlZCksIGxlbihkYXRhKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVkLCBkYXRhKQogCi0gICAgZGVmIHRlc3RfZW1wdHlfYnl0ZXN0cmluZyhzZWxmKToKLSAgICAgICAgIyBpc3N1ZSAxMTI4NgotICAgICAgICBlbXB0eSA9IHNlbGYubG9hZHMoYidceDgwXHgwM1VceDAwcVx4MDAuJywgZW5jb2Rpbmc9J2tvaTgtcicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW1wdHksICcnKQotCiAgICAgZGVmIHRlc3RfaW50X3BpY2tsaW5nX2VmZmljaWVuY3koc2VsZik6CiAgICAgICAgICMgVGVzdCBjb21wYWNpdHkgb2YgaW50IHJlcHJlc2VudGF0aW9uIChzZWUgaXNzdWUgIzEyNzQ0KQogICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgotICAgICAgICAgICAgc2l6ZXMgPSBbbGVuKHNlbGYuZHVtcHMoMioqbiwgcHJvdG8pKSBmb3IgbiBpbiByYW5nZSg3MCldCi0gICAgICAgICAgICAjIHRoZSBzaXplIGZ1bmN0aW9uIGlzIG1vbm90b25pYwotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQoc2l6ZXMpLCBzaXplcykKLSAgICAgICAgICAgIGlmIHByb3RvID49IDI6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwoc2l6ZXNbLTFdLCAxNCkKLQotICAgIGRlZiBjaGVja19uZWdhdGl2ZV8zMmJfYmluWFhYKHNlbGYsIGR1bXBlZCk6Ci0gICAgICAgIGlmIHN5cy5tYXhzaXplID4gMioqMzI6Ci0gICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJ0ZXN0IGlzIG9ubHkgbWVhbmluZ2Z1bCBvbiAzMi1iaXQgYnVpbGRzIikKLSAgICAgICAgIyBYWFggUHVyZSBQeXRob24gcGlja2xlIHJlYWRzIGxlbmd0aHMgYXMgc2lnbmVkIGFuZCBwYXNzZXMKLSAgICAgICAgIyB0aGVtIGRpcmVjdGx5IHRvIHJlYWQoKSAoaGVuY2UgdGhlIEVPRkVycm9yKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKChwaWNrbGUuVW5waWNrbGluZ0Vycm9yLCBFT0ZFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWVFcnJvciwgT3ZlcmZsb3dFcnJvcikpOgotICAgICAgICAgICAgc2VsZi5sb2FkcyhkdW1wZWQpCi0KLSAgICBkZWYgdGVzdF9uZWdhdGl2ZV8zMmJfYmluYnl0ZXMoc2VsZik6Ci0gICAgICAgICMgT24gMzItYml0IGJ1aWxkcywgYSBCSU5CWVRFUyBvZiAyKiozMSBvciBtb3JlIGlzIHJlZnVzZWQKLSAgICAgICAgc2VsZi5jaGVja19uZWdhdGl2ZV8zMmJfYmluWFhYKGInXHg4MFx4MDNCXHhmZlx4ZmZceGZmXHhmZnh5enFceDAwLicpCi0KLSAgICBkZWYgdGVzdF9uZWdhdGl2ZV8zMmJfYmludW5pY29kZShzZWxmKToKLSAgICAgICAgIyBPbiAzMi1iaXQgYnVpbGRzLCBhIEJJTlVOSUNPREUgb2YgMioqMzEgb3IgbW9yZSBpcyByZWZ1c2VkCi0gICAgICAgIHNlbGYuY2hlY2tfbmVnYXRpdmVfMzJiX2JpblhYWChiJ1x4ODBceDAzWFx4ZmZceGZmXHhmZlx4ZmZ4eXpxXHgwMC4nKQotCi0gICAgZGVmIHRlc3RfbmVnYXRpdmVfcHV0KHNlbGYpOgotICAgICAgICAjIElzc3VlICMxMjg0NwotICAgICAgICBkdW1wZWQgPSBiJ1ZhXG5wLTFcbi4nCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYubG9hZHMsIGR1bXBlZCkKLQotICAgIGRlZiB0ZXN0X25lZ2F0aXZlXzMyYl9iaW5wdXQoc2VsZik6Ci0gICAgICAgICMgSXNzdWUgIzEyODQ3Ci0gICAgICAgIGlmIHN5cy5tYXhzaXplID4gMioqMzI6Ci0gICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJ0ZXN0IGlzIG9ubHkgbWVhbmluZ2Z1bCBvbiAzMi1iaXQgYnVpbGRzIikKLSAgICAgICAgZHVtcGVkID0gYidceDgwXHgwM1hceDAxXHgwMFx4MDBceDAwYXJceGZmXHhmZlx4ZmZceGZmLicKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5sb2FkcywgZHVtcGVkKQorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QocHJvdG89cHJvdG8pOgorICAgICAgICAgICAgICAgIHBpY2tsZXMgPSBbc2VsZi5kdW1wcygyKipuLCBwcm90bykgZm9yIG4gaW4gcmFuZ2UoNzApXQorICAgICAgICAgICAgICAgIHNpemVzID0gbGlzdChtYXAobGVuLCBwaWNrbGVzKSkKKyAgICAgICAgICAgICAgICAjIHRoZSBzaXplIGZ1bmN0aW9uIGlzIG1vbm90b25pYworICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKHNpemVzKSwgc2l6ZXMpCisgICAgICAgICAgICAgICAgaWYgcHJvdG8gPj0gMjoKKyAgICAgICAgICAgICAgICAgICAgZm9yIHAgaW4gcGlja2xlczoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3Bjb2RlX2luX3BpY2tsZShwaWNrbGUuTE9ORywgcCkpCiAKICAgICBkZWYgX2NoZWNrX3BpY2tsaW5nX3dpdGhfb3Bjb2RlKHNlbGYsIG9iaiwgb3Bjb2RlLCBwcm90byk6CiAgICAgICAgIHBpY2tsZWQgPSBzZWxmLmR1bXBzKG9iaiwgcHJvdG8pCkBAIC0xMzI0LDYgKzE5OTEsMjEyIEBACiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHNlbGYuX2NoZWNrX3BpY2tsaW5nX3dpdGhfb3Bjb2RlKG9iaiwgcGlja2xlLlNFVElURU1TLCBwcm90bykKIAorICAgICMgRXhlcmNpc2UgZnJhbWluZyAocHJvdG8gPj0gNCkgZm9yIHNpZ25pZmljYW50IHdvcmtsb2FkcworCisgICAgRlJBTUVfU0laRV9UQVJHRVQgPSA2NCAqIDEwMjQKKworICAgIGRlZiBjaGVja19mcmFtZV9vcGNvZGVzKHNlbGYsIHBpY2tsZWQpOgorICAgICAgICAiIiIKKyAgICAgICAgQ2hlY2sgdGhlIGFyZ3VtZW50cyBvZiBGUkFNRSBvcGNvZGVzIGluIGEgcHJvdG9jb2wgNCsgcGlja2xlLgorICAgICAgICAiIiIKKyAgICAgICAgZnJhbWVfb3Bjb2RlX3NpemUgPSA5CisgICAgICAgIGxhc3RfYXJnID0gbGFzdF9wb3MgPSBOb25lCisgICAgICAgIGZvciBvcCwgYXJnLCBwb3MgaW4gcGlja2xldG9vbHMuZ2Vub3BzKHBpY2tsZWQpOgorICAgICAgICAgICAgaWYgb3AubmFtZSAhPSAnRlJBTUUnOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBsYXN0X3BvcyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAjIFRoZSBwcmV2aW91cyBmcmFtZSdzIHNpemUgc2hvdWxkIGJlIGVxdWFsIHRvIHRoZSBudW1iZXIKKyAgICAgICAgICAgICAgICAjIG9mIGJ5dGVzIHVwIHRvIHRoZSBjdXJyZW50IGZyYW1lLgorICAgICAgICAgICAgICAgIGZyYW1lX3NpemUgPSBwb3MgLSBsYXN0X3BvcyAtIGZyYW1lX29wY29kZV9zaXplCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmcmFtZV9zaXplLCBsYXN0X2FyZykKKyAgICAgICAgICAgIGxhc3RfYXJnLCBsYXN0X3BvcyA9IGFyZywgcG9zCisgICAgICAgICMgVGhlIGxhc3QgZnJhbWUncyBzaXplIHNob3VsZCBiZSBlcXVhbCB0byB0aGUgbnVtYmVyIG9mIGJ5dGVzIHVwCisgICAgICAgICMgdG8gdGhlIHBpY2tsZSdzIGVuZC4KKyAgICAgICAgZnJhbWVfc2l6ZSA9IGxlbihwaWNrbGVkKSAtIGxhc3RfcG9zIC0gZnJhbWVfb3Bjb2RlX3NpemUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmcmFtZV9zaXplLCBsYXN0X2FyZykKKworICAgIGRlZiB0ZXN0X2ZyYW1pbmdfbWFueV9vYmplY3RzKHNlbGYpOgorICAgICAgICBvYmogPSBsaXN0KHJhbmdlKDEwKio1KSkKKyAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKDQsIHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChwcm90bz1wcm90byk6CisgICAgICAgICAgICAgICAgcGlja2xlZCA9IHNlbGYuZHVtcHMob2JqLCBwcm90bykKKyAgICAgICAgICAgICAgICB1bnBpY2tsZWQgPSBzZWxmLmxvYWRzKHBpY2tsZWQpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmosIHVucGlja2xlZCkKKyAgICAgICAgICAgICAgICBieXRlc19wZXJfZnJhbWUgPSAobGVuKHBpY2tsZWQpIC8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRfb3Bjb2RlKHBpY2tsZS5GUkFNRSwgcGlja2xlZCkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKGJ5dGVzX3Blcl9mcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5GUkFNRV9TSVpFX1RBUkdFVCAvIDIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwoYnl0ZXNfcGVyX2ZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuRlJBTUVfU0laRV9UQVJHRVQgKiAxKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tfZnJhbWVfb3Bjb2RlcyhwaWNrbGVkKQorCisgICAgZGVmIHRlc3RfZnJhbWluZ19sYXJnZV9vYmplY3RzKHNlbGYpOgorICAgICAgICBOID0gMTAyNCAqIDEwMjQKKyAgICAgICAgb2JqID0gW2IneCcgKiBOLCBiJ3knICogTiwgYid6JyAqIE5dCisgICAgICAgIGZvciBwcm90byBpbiByYW5nZSg0LCBwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QocHJvdG89cHJvdG8pOgorICAgICAgICAgICAgICAgIHBpY2tsZWQgPSBzZWxmLmR1bXBzKG9iaiwgcHJvdG8pCisgICAgICAgICAgICAgICAgdW5waWNrbGVkID0gc2VsZi5sb2FkcyhwaWNrbGVkKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqLCB1bnBpY2tsZWQpCisgICAgICAgICAgICAgICAgbl9mcmFtZXMgPSBjb3VudF9vcGNvZGUocGlja2xlLkZSQU1FLCBwaWNrbGVkKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKG5fZnJhbWVzLCBsZW4ob2JqKSkKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrX2ZyYW1lX29wY29kZXMocGlja2xlZCkKKworICAgIGRlZiB0ZXN0X29wdGlvbmFsX2ZyYW1lcyhzZWxmKToKKyAgICAgICAgaWYgcGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgPCA0OgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgZGVmIHJlbW92ZV9mcmFtZXMocGlja2xlZCwga2VlcF9mcmFtZT1Ob25lKToKKyAgICAgICAgICAgICIiIlJlbW92ZSBmcmFtZSBvcGNvZGVzIGZyb20gdGhlIGdpdmVuIHBpY2tsZS4iIiIKKyAgICAgICAgICAgIGZyYW1lX3N0YXJ0cyA9IFtdCisgICAgICAgICAgICAjIDEgYnl0ZSBmb3IgdGhlIG9wY29kZSBhbmQgOCBmb3IgdGhlIGFyZ3VtZW50CisgICAgICAgICAgICBmcmFtZV9vcGNvZGVfc2l6ZSA9IDkKKyAgICAgICAgICAgIGZvciBvcGNvZGUsIF8sIHBvcyBpbiBwaWNrbGV0b29scy5nZW5vcHMocGlja2xlZCk6CisgICAgICAgICAgICAgICAgaWYgb3Bjb2RlLm5hbWUgPT0gJ0ZSQU1FJzoKKyAgICAgICAgICAgICAgICAgICAgZnJhbWVfc3RhcnRzLmFwcGVuZChwb3MpCisKKyAgICAgICAgICAgIG5ld3BpY2tsZSA9IGJ5dGVhcnJheSgpCisgICAgICAgICAgICBsYXN0X2ZyYW1lX2VuZCA9IDAKKyAgICAgICAgICAgIGZvciBpLCBwb3MgaW4gZW51bWVyYXRlKGZyYW1lX3N0YXJ0cyk6CisgICAgICAgICAgICAgICAgaWYga2VlcF9mcmFtZSBhbmQga2VlcF9mcmFtZShpKToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBuZXdwaWNrbGUgKz0gcGlja2xlZFtsYXN0X2ZyYW1lX2VuZDpwb3NdCisgICAgICAgICAgICAgICAgbGFzdF9mcmFtZV9lbmQgPSBwb3MgKyBmcmFtZV9vcGNvZGVfc2l6ZQorICAgICAgICAgICAgbmV3cGlja2xlICs9IHBpY2tsZWRbbGFzdF9mcmFtZV9lbmQ6XQorICAgICAgICAgICAgcmV0dXJuIG5ld3BpY2tsZQorCisgICAgICAgIGZyYW1lX3NpemUgPSBzZWxmLkZSQU1FX1NJWkVfVEFSR0VUCisgICAgICAgIG51bV9mcmFtZXMgPSAyMAorICAgICAgICBvYmogPSBbYnl0ZXMoW2ldKSAqIGZyYW1lX3NpemUgZm9yIGkgaW4gcmFuZ2UobnVtX2ZyYW1lcyldCisKKyAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKDQsIHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICBwaWNrbGVkID0gc2VsZi5kdW1wcyhvYmosIHByb3RvKQorCisgICAgICAgICAgICBmcmFtZWxlc3NfcGlja2xlID0gcmVtb3ZlX2ZyYW1lcyhwaWNrbGVkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb3VudF9vcGNvZGUocGlja2xlLkZSQU1FLCBmcmFtZWxlc3NfcGlja2xlKSwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqLCBzZWxmLmxvYWRzKGZyYW1lbGVzc19waWNrbGUpKQorCisgICAgICAgICAgICBzb21lX2ZyYW1lc19waWNrbGUgPSByZW1vdmVfZnJhbWVzKHBpY2tsZWQsIGxhbWJkYSBpOiBpICUgMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0TGVzcyhjb3VudF9vcGNvZGUocGlja2xlLkZSQU1FLCBzb21lX2ZyYW1lc19waWNrbGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50X29wY29kZShwaWNrbGUuRlJBTUUsIHBpY2tsZWQpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmosIHNlbGYubG9hZHMoc29tZV9mcmFtZXNfcGlja2xlKSkKKworICAgIGRlZiB0ZXN0X25lc3RlZF9uYW1lcyhzZWxmKToKKyAgICAgICAgZ2xvYmFsIE5lc3RlZAorICAgICAgICBjbGFzcyBOZXN0ZWQ6CisgICAgICAgICAgICBjbGFzcyBBOgorICAgICAgICAgICAgICAgIGNsYXNzIEI6CisgICAgICAgICAgICAgICAgICAgIGNsYXNzIEM6CisgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKDQsIHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICBmb3Igb2JqIGluIFtOZXN0ZWQuQSwgTmVzdGVkLkEuQiwgTmVzdGVkLkEuQi5DXToKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChwcm90bz1wcm90bywgb2JqPW9iaik6CisgICAgICAgICAgICAgICAgICAgIHVucGlja2xlZCA9IHNlbGYubG9hZHMoc2VsZi5kdW1wcyhvYmosIHByb3RvKSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhvYmosIHVucGlja2xlZCkKKworICAgIGRlZiB0ZXN0X3B5X21ldGhvZHMoc2VsZik6CisgICAgICAgIGdsb2JhbCBQeU1ldGhvZHNUZXN0CisgICAgICAgIGNsYXNzIFB5TWV0aG9kc1Rlc3Q6CisgICAgICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgICAgICBkZWYgY2hlZXNlKCk6CisgICAgICAgICAgICAgICAgcmV0dXJuICJjaGVlc2UiCisgICAgICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgICAgIGRlZiB3aW5lKGNscyk6CisgICAgICAgICAgICAgICAgYXNzZXJ0IGNscyBpcyBQeU1ldGhvZHNUZXN0CisgICAgICAgICAgICAgICAgcmV0dXJuICJ3aW5lIgorICAgICAgICAgICAgZGVmIGJpc2N1aXRzKHNlbGYpOgorICAgICAgICAgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHNlbGYsIFB5TWV0aG9kc1Rlc3QpCisgICAgICAgICAgICAgICAgcmV0dXJuICJiaXNjdWl0cyIKKyAgICAgICAgICAgIGNsYXNzIE5lc3RlZDoKKyAgICAgICAgICAgICAgICAiTmVzdGVkIGNsYXNzIgorICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAgICAgICBkZWYga2V0Y2h1cCgpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gImtldGNodXAiCisgICAgICAgICAgICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgICAgICAgICAgZGVmIG1hcGxlKGNscyk6CisgICAgICAgICAgICAgICAgICAgIGFzc2VydCBjbHMgaXMgUHlNZXRob2RzVGVzdC5OZXN0ZWQKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJtYXBsZSIKKyAgICAgICAgICAgICAgICBkZWYgcGllKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShzZWxmLCBQeU1ldGhvZHNUZXN0Lk5lc3RlZCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJwaWUiCisKKyAgICAgICAgcHlfbWV0aG9kcyA9ICgKKyAgICAgICAgICAgIFB5TWV0aG9kc1Rlc3QuY2hlZXNlLAorICAgICAgICAgICAgUHlNZXRob2RzVGVzdC53aW5lLAorICAgICAgICAgICAgUHlNZXRob2RzVGVzdCgpLmJpc2N1aXRzLAorICAgICAgICAgICAgUHlNZXRob2RzVGVzdC5OZXN0ZWQua2V0Y2h1cCwKKyAgICAgICAgICAgIFB5TWV0aG9kc1Rlc3QuTmVzdGVkLm1hcGxlLAorICAgICAgICAgICAgUHlNZXRob2RzVGVzdC5OZXN0ZWQoKS5waWUKKyAgICAgICAgKQorICAgICAgICBweV91bmJvdW5kX21ldGhvZHMgPSAoCisgICAgICAgICAgICAoUHlNZXRob2RzVGVzdC5iaXNjdWl0cywgUHlNZXRob2RzVGVzdCksCisgICAgICAgICAgICAoUHlNZXRob2RzVGVzdC5OZXN0ZWQucGllLCBQeU1ldGhvZHNUZXN0Lk5lc3RlZCkKKyAgICAgICAgKQorICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UoNCwgcGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIGZvciBtZXRob2QgaW4gcHlfbWV0aG9kczoKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChwcm90bz1wcm90bywgbWV0aG9kPW1ldGhvZCk6CisgICAgICAgICAgICAgICAgICAgIHVucGlja2xlZCA9IHNlbGYubG9hZHMoc2VsZi5kdW1wcyhtZXRob2QsIHByb3RvKSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZXRob2QoKSwgdW5waWNrbGVkKCkpCisgICAgICAgICAgICBmb3IgbWV0aG9kLCBjbHMgaW4gcHlfdW5ib3VuZF9tZXRob2RzOgorICAgICAgICAgICAgICAgIG9iaiA9IGNscygpCisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QocHJvdG89cHJvdG8sIG1ldGhvZD1tZXRob2QpOgorICAgICAgICAgICAgICAgICAgICB1bnBpY2tsZWQgPSBzZWxmLmxvYWRzKHNlbGYuZHVtcHMobWV0aG9kLCBwcm90bykpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWV0aG9kKG9iaiksIHVucGlja2xlZChvYmopKQorCisgICAgZGVmIHRlc3RfY19tZXRob2RzKHNlbGYpOgorICAgICAgICBnbG9iYWwgU3ViY2xhc3MKKyAgICAgICAgY2xhc3MgU3ViY2xhc3ModHVwbGUpOgorICAgICAgICAgICAgY2xhc3MgTmVzdGVkKHN0cik6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIGNfbWV0aG9kcyA9ICgKKyAgICAgICAgICAgICMgYm91bmQgYnVpbHQtaW4gbWV0aG9kCisgICAgICAgICAgICAoImFiY2QiLmluZGV4LCAoImMiLCkpLAorICAgICAgICAgICAgIyB1bmJvdW5kIGJ1aWx0LWluIG1ldGhvZAorICAgICAgICAgICAgKHN0ci5pbmRleCwgKCJhYmNkIiwgImMiKSksCisgICAgICAgICAgICAjIGJvdW5kICJzbG90IiBtZXRob2QKKyAgICAgICAgICAgIChbMSwgMiwgM10uX19sZW5fXywgKCkpLAorICAgICAgICAgICAgIyB1bmJvdW5kICJzbG90IiBtZXRob2QKKyAgICAgICAgICAgIChsaXN0Ll9fbGVuX18sIChbMSwgMiwgM10sKSksCisgICAgICAgICAgICAjIGJvdW5kICJjb2V4aXN0IiBtZXRob2QKKyAgICAgICAgICAgICh7MSwgMn0uX19jb250YWluc19fLCAoMiwpKSwKKyAgICAgICAgICAgICMgdW5ib3VuZCAiY29leGlzdCIgbWV0aG9kCisgICAgICAgICAgICAoc2V0Ll9fY29udGFpbnNfXywgKHsxLCAyfSwgMikpLAorICAgICAgICAgICAgIyBidWlsdC1pbiBjbGFzcyBtZXRob2QKKyAgICAgICAgICAgIChkaWN0LmZyb21rZXlzLCAoKCJhIiwgMSksICgiYiIsIDIpKSksCisgICAgICAgICAgICAjIGJ1aWx0LWluIHN0YXRpYyBtZXRob2QKKyAgICAgICAgICAgIChieXRlYXJyYXkubWFrZXRyYW5zLCAoYiJhYmMiLCBiInh5eiIpKSwKKyAgICAgICAgICAgICMgc3ViY2xhc3MgbWV0aG9kcworICAgICAgICAgICAgKFN1YmNsYXNzKFsxLDIsMl0pLmNvdW50LCAoMiwpKSwKKyAgICAgICAgICAgIChTdWJjbGFzcy5jb3VudCwgKFN1YmNsYXNzKFsxLDIsMl0pLCAyKSksCisgICAgICAgICAgICAoU3ViY2xhc3MuTmVzdGVkKCJzd2VldCIpLmNvdW50LCAoImUiLCkpLAorICAgICAgICAgICAgKFN1YmNsYXNzLk5lc3RlZC5jb3VudCwgKFN1YmNsYXNzLk5lc3RlZCgic3dlZXQiKSwgImUiKSksCisgICAgICAgICkKKyAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKDQsIHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICBmb3IgbWV0aG9kLCBhcmdzIGluIGNfbWV0aG9kczoKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChwcm90bz1wcm90bywgbWV0aG9kPW1ldGhvZCk6CisgICAgICAgICAgICAgICAgICAgIHVucGlja2xlZCA9IHNlbGYubG9hZHMoc2VsZi5kdW1wcyhtZXRob2QsIHByb3RvKSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZXRob2QoKmFyZ3MpLCB1bnBpY2tsZWQoKmFyZ3MpKQorCisgICAgZGVmIHRlc3RfY29tcGF0X3BpY2tsZShzZWxmKToKKyAgICAgICAgdGVzdHMgPSBbCisgICAgICAgICAgICAocmFuZ2UoMSwgNyksICdfX2J1aWx0aW5fXycsICd4cmFuZ2UnKSwKKyAgICAgICAgICAgIChtYXAoaW50LCAnMTIzJyksICdpdGVydG9vbHMnLCAnaW1hcCcpLAorICAgICAgICAgICAgKGZ1bmN0b29scy5yZWR1Y2UsICdfX2J1aWx0aW5fXycsICdyZWR1Y2UnKSwKKyAgICAgICAgICAgIChkYm0ud2hpY2hkYiwgJ3doaWNoZGInLCAnd2hpY2hkYicpLAorICAgICAgICAgICAgKEV4Y2VwdGlvbigpLCAnZXhjZXB0aW9ucycsICdFeGNlcHRpb24nKSwKKyAgICAgICAgICAgIChjb2xsZWN0aW9ucy5Vc2VyRGljdCgpLCAnVXNlckRpY3QnLCAnSXRlcmFibGVVc2VyRGljdCcpLAorICAgICAgICAgICAgKGNvbGxlY3Rpb25zLlVzZXJMaXN0KCksICdVc2VyTGlzdCcsICdVc2VyTGlzdCcpLAorICAgICAgICAgICAgKGNvbGxlY3Rpb25zLmRlZmF1bHRkaWN0KCksICdjb2xsZWN0aW9ucycsICdkZWZhdWx0ZGljdCcpLAorICAgICAgICBdCisgICAgICAgIGZvciB2YWwsIG1vZCwgbmFtZSBpbiB0ZXN0czoKKyAgICAgICAgICAgIGZvciBwcm90byBpbiByYW5nZSgzKToKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdCh0eXBlPXR5cGUodmFsKSwgcHJvdG89cHJvdG8pOgorICAgICAgICAgICAgICAgICAgICBwaWNrbGVkID0gc2VsZi5kdW1wcyh2YWwsIHByb3RvKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKCgnYyVzXG4lcycgJSAobW9kLCBuYW1lKSkuZW5jb2RlKCksIHBpY2tsZWQpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShzZWxmLmxvYWRzKHBpY2tsZWQpKSwgdHlwZSh2YWwpKQorCiAKIGNsYXNzIEJpZ21lbVBpY2tsZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKIApAQCAtMTMzNiw4ICsyMjA5LDkgQEAKICAgICAgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CiAgICAgICAgICAgICAgICAgaWYgcHJvdG8gPCAyOgogICAgICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoKFZhbHVlRXJyb3IsIE92ZXJmbG93RXJyb3IpKToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5kdW1wcyhkYXRhLCBwcm90b2NvbD1wcm90bykKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChwcm90bz1wcm90byk6CisgICAgICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoKFZhbHVlRXJyb3IsIE92ZXJmbG93RXJyb3IpKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZHVtcHMoZGF0YSwgcHJvdG9jb2w9cHJvdG8pCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBkYXRhID0gTm9uZQogCkBAIC0xMzUyLDI0ICsyMjI2LDQ0IEBACiAgICAgICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgogICAgICAgICAgICAgICAgIGlmIHByb3RvIDwgMzoKICAgICAgICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIHBpY2tsZWQgPSBzZWxmLmR1bXBzKGRhdGEsIHByb3RvY29sPXByb3RvKQotICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoYiJhYmNkIiBpbiBwaWNrbGVkWzoxNV0pCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiImFiY2QiIGluIHBpY2tsZWRbLTE1Ol0pCi0gICAgICAgICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgICAgICAgICAgcGlja2xlZCA9IE5vbmUKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChwcm90bz1wcm90byk6CisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBpY2tsZWQgPSBzZWxmLmR1bXBzKGRhdGEsIHByb3RvY29sPXByb3RvKQorICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyID0gKHBpY2tsZS5CSU5CWVRFUyArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0LnBhY2soIjxJIiwgbGVuKGRhdGEpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfc3RhcnQgPSBwaWNrbGVkLmluZGV4KGRhdGEpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaWNrbGVkW2RhdGFfc3RhcnQtbGVuKGhlYWRlcik6ZGF0YV9zdGFydF0pCisgICAgICAgICAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgICAgICAgICBwaWNrbGVkID0gTm9uZQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgZGF0YSA9IE5vbmUKIAogICAgIEBiaWdtZW10ZXN0KHNpemU9XzRHLCBtZW11c2U9Mi41LCBkcnlfcnVuPUZhbHNlKQogICAgIGRlZiB0ZXN0X2h1Z2VfYnl0ZXNfNjRiKHNlbGYsIHNpemUpOgotICAgICAgICBkYXRhID0gYiJhIiAqIHNpemUKKyAgICAgICAgZGF0YSA9IGIiYWNiZCIgKiAoc2l6ZSAvLyA0KQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgogICAgICAgICAgICAgICAgIGlmIHByb3RvIDwgMzoKICAgICAgICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKChWYWx1ZUVycm9yLCBPdmVyZmxvd0Vycm9yKSk6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuZHVtcHMoZGF0YSwgcHJvdG9jb2w9cHJvdG8pCisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QocHJvdG89cHJvdG8pOgorICAgICAgICAgICAgICAgICAgICBpZiBwcm90byA9PSAzOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBQcm90b2NvbCAzIGRvZXMgbm90IHN1cHBvcnQgbGFyZ2UgYnl0ZXMgb2JqZWN0cy4KKyAgICAgICAgICAgICAgICAgICAgICAgICMgVmVyaWZ5IHRoYXQgd2UgZG8gbm90IGNyYXNoIHdoZW4gcHJvY2Vzc2luZyBvbmUuCisgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKChWYWx1ZUVycm9yLCBPdmVyZmxvd0Vycm9yKSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kdW1wcyhkYXRhLCBwcm90b2NvbD1wcm90bykKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBpY2tsZWQgPSBzZWxmLmR1bXBzKGRhdGEsIHByb3RvY29sPXByb3RvKQorICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyID0gKHBpY2tsZS5CSU5CWVRFUzggKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdC5wYWNrKCI8USIsIGxlbihkYXRhKSkpCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3N0YXJ0ID0gcGlja2xlZC5pbmRleChkYXRhKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlja2xlZFtkYXRhX3N0YXJ0LWxlbihoZWFkZXIpOmRhdGFfc3RhcnRdKQorICAgICAgICAgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgICAgICAgICAgcGlja2xlZCA9IE5vbmUKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIGRhdGEgPSBOb25lCiAKQEAgLTEzODEsMjcgKzIyNzUsNTIgQEAKICAgICAgICAgZGF0YSA9ICJhYmNkIiAqIChzaXplIC8vIDQpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6Ci0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBwaWNrbGVkID0gc2VsZi5kdW1wcyhkYXRhLCBwcm90b2NvbD1wcm90bykKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGIiYWJjZCIgaW4gcGlja2xlZFs6MTVdKQotICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoYiJhYmNkIiBpbiBwaWNrbGVkWy0xNTpdKQotICAgICAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgICAgIHBpY2tsZWQgPSBOb25lCisgICAgICAgICAgICAgICAgaWYgcHJvdG8gPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChwcm90bz1wcm90byk6CisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBpY2tsZWQgPSBzZWxmLmR1bXBzKGRhdGEsIHByb3RvY29sPXByb3RvKQorICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyID0gKHBpY2tsZS5CSU5VTklDT0RFICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QucGFjaygiPEkiLCBsZW4oZGF0YSkpKQorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9zdGFydCA9IHBpY2tsZWQuaW5kZXgoYidhYmNkJykKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpY2tsZWRbZGF0YV9zdGFydC1sZW4oaGVhZGVyKTpkYXRhX3N0YXJ0XSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKHBpY2tsZWQucmluZGV4KGIiYWJjZCIpICsgbGVuKGIiYWJjZCIpIC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpY2tsZWQuaW5kZXgoYiJhYmNkIikpLCBsZW4oZGF0YSkpCisgICAgICAgICAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgICAgICAgICBwaWNrbGVkID0gTm9uZQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgZGF0YSA9IE5vbmUKIAotICAgICMgQklOVU5JQ09ERSAocHJvdG9jb2xzIDEsIDIgYW5kIDMpIGNhbm5vdCBjYXJyeSBtb3JlIHRoYW4KLSAgICAjIDIqKjMyIC0gMSBieXRlcyBvZiB1dGYtOCBlbmNvZGVkIHVuaWNvZGUuCisgICAgIyBCSU5VTklDT0RFIChwcm90b2NvbHMgMSwgMiBhbmQgMykgY2Fubm90IGNhcnJ5IG1vcmUgdGhhbiAyKiozMiAtIDEgYnl0ZXMKKyAgICAjIG9mIHV0Zi04IGVuY29kZWQgdW5pY29kZS4gQklOVU5JQ09ERTggKHByb3RvY29sIDQpIHN1cHBvcnRzIHRoZXNlIGh1Z2UKKyAgICAjIHVuaWNvZGUgc3RyaW5ncyBob3dldmVyLgogCiAgICAgQGJpZ21lbXRlc3Qoc2l6ZT1fNEcsIG1lbXVzZT04LCBkcnlfcnVuPUZhbHNlKQogICAgIGRlZiB0ZXN0X2h1Z2Vfc3RyXzY0YihzZWxmLCBzaXplKToKLSAgICAgICAgZGF0YSA9ICJhIiAqIHNpemUKKyAgICAgICAgZGF0YSA9ICJhYmNkIiAqIChzaXplIC8vIDQpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CiAgICAgICAgICAgICAgICAgaWYgcHJvdG8gPT0gMDoKICAgICAgICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKChWYWx1ZUVycm9yLCBPdmVyZmxvd0Vycm9yKSk6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuZHVtcHMoZGF0YSwgcHJvdG9jb2w9cHJvdG8pCisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QocHJvdG89cHJvdG8pOgorICAgICAgICAgICAgICAgICAgICBpZiBwcm90byA8IDQ6CisgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKChWYWx1ZUVycm9yLCBPdmVyZmxvd0Vycm9yKSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kdW1wcyhkYXRhLCBwcm90b2NvbD1wcm90bykKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBpY2tsZWQgPSBzZWxmLmR1bXBzKGRhdGEsIHByb3RvY29sPXByb3RvKQorICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyID0gKHBpY2tsZS5CSU5VTklDT0RFOCArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0LnBhY2soIjxRIiwgbGVuKGRhdGEpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfc3RhcnQgPSBwaWNrbGVkLmluZGV4KGInYWJjZCcpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaWNrbGVkW2RhdGFfc3RhcnQtbGVuKGhlYWRlcik6ZGF0YV9zdGFydF0pCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChwaWNrbGVkLnJpbmRleChiImFiY2QiKSArIGxlbihiImFiY2QiKSAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaWNrbGVkLmluZGV4KGIiYWJjZCIpKSwgbGVuKGRhdGEpKQorICAgICAgICAgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgICAgICAgICAgcGlja2xlZCA9IE5vbmUKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIGRhdGEgPSBOb25lCiAKQEAgLTE0NDUsOCArMjM2NCw4IEBACiAgICAgICAgIHJldHVybiBvYmplY3QuX19yZWR1Y2VfXyhzZWxmKQogCiBjbGFzcyBSRVhfc2l4KG9iamVjdCk6Ci0gICAgIiIiVGhpcyBjbGFzcyBpcyB1c2VkIHRvIGNoZWNrIHRoZSA0dGggYXJndW1lbnQgKGxpc3QgaXRlcmF0b3IpIG9mIHRoZSByZWR1Y2UKLSAgICBwcm90b2NvbC4KKyAgICAiIiJUaGlzIGNsYXNzIGlzIHVzZWQgdG8gY2hlY2sgdGhlIDR0aCBhcmd1bWVudCAobGlzdCBpdGVyYXRvcikgb2YKKyAgICB0aGUgcmVkdWNlIHByb3RvY29sLgogICAgICIiIgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpdGVtcz1Ob25lKToKICAgICAgICAgc2VsZi5pdGVtcyA9IGl0ZW1zIGlmIGl0ZW1zIGlzIG5vdCBOb25lIGVsc2UgW10KQEAgLTE0NTgsOCArMjM3Nyw4IEBACiAgICAgICAgIHJldHVybiB0eXBlKHNlbGYpLCAoKSwgTm9uZSwgaXRlcihzZWxmLml0ZW1zKSwgTm9uZQogCiBjbGFzcyBSRVhfc2V2ZW4ob2JqZWN0KToKLSAgICAiIiJUaGlzIGNsYXNzIGlzIHVzZWQgdG8gY2hlY2sgdGhlIDV0aCBhcmd1bWVudCAoZGljdCBpdGVyYXRvcikgb2YgdGhlIHJlZHVjZQotICAgIHByb3RvY29sLgorICAgICIiIlRoaXMgY2xhc3MgaXMgdXNlZCB0byBjaGVjayB0aGUgNXRoIGFyZ3VtZW50IChkaWN0IGl0ZXJhdG9yKSBvZgorICAgIHRoZSByZWR1Y2UgcHJvdG9jb2wuCiAgICAgIiIiCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRhYmxlPU5vbmUpOgogICAgICAgICBzZWxmLnRhYmxlID0gdGFibGUgaWYgdGFibGUgaXMgbm90IE5vbmUgZWxzZSB7fQpAQCAtMTQ5NywxMCArMjQxNiwxNiBAQAogY2xhc3MgTXlEaWN0KGRpY3QpOgogICAgIHNhbXBsZSA9IHsiYSI6IDEsICJiIjogMn0KIAorY2xhc3MgTXlTZXQoc2V0KToKKyAgICBzYW1wbGUgPSB7ImEiLCAiYiJ9CisKK2NsYXNzIE15RnJvemVuU2V0KGZyb3plbnNldCk6CisgICAgc2FtcGxlID0gZnJvemVuc2V0KHsiYSIsICJiIn0pCisKIG15Y2xhc3NlcyA9IFtNeUludCwgTXlGbG9hdCwKICAgICAgICAgICAgICBNeUNvbXBsZXgsCiAgICAgICAgICAgICAgTXlTdHIsIE15VW5pY29kZSwKLSAgICAgICAgICAgICBNeVR1cGxlLCBNeUxpc3QsIE15RGljdF0KKyAgICAgICAgICAgICBNeVR1cGxlLCBNeUxpc3QsIE15RGljdCwgTXlTZXQsIE15RnJvemVuU2V0XQogCiAKIGNsYXNzIFNsb3RMaXN0KE15TGlzdCk6CkBAIC0xNTEwLDYgKzI0MzUsOCBAQAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhLCBiLCBjKToKICAgICAgICAgIyByYWlzZSBhbiBlcnJvciwgdG8gbWFrZSBzdXJlIHRoaXMgaXNuJ3QgY2FsbGVkCiAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiU2ltcGxlTmV3T2JqLl9faW5pdF9fKCkgZGlkbid0IGV4cGVjdCB0byBnZXQgY2FsbGVkIikKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX19kaWN0X18gPT0gb3RoZXIuX19kaWN0X18KIAogY2xhc3MgQmFkR2V0YXR0cjoKICAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwga2V5KToKQEAgLTE1NDYsNyArMjQ3Myw3IEBACiAKICAgICBkZWYgdGVzdF9oaWdoZXN0X3Byb3RvY29sKHNlbGYpOgogICAgICAgICAjIE9mIGNvdXJzZSB0aGlzIG5lZWRzIHRvIGJlIGNoYW5nZWQgd2hlbiBISUdIRVNUX1BST1RPQ09MIGNoYW5nZXMuCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wsIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wsIDQpCiAKICAgICBkZWYgdGVzdF9jYWxsYXBpKHNlbGYpOgogICAgICAgICBmID0gaW8uQnl0ZXNJTygpCkBAIC0xNzMxLDIyICsyNjU4LDIzIEBACiAKICAgICBkZWYgX2NoZWNrX211bHRpcGxlX3VucGlja2xpbmdzKHNlbGYsIGlvY2xhc3MpOgogICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgotICAgICAgICAgICAgZGF0YTEgPSBbKHgsIHN0cih4KSkgZm9yIHggaW4gcmFuZ2UoMjAwMCldICsgW2IiYWJjZGUiLCBsZW5dCi0gICAgICAgICAgICBmID0gaW9jbGFzcygpCi0gICAgICAgICAgICBwaWNrbGVyID0gc2VsZi5waWNrbGVyX2NsYXNzKGYsIHByb3RvY29sPXByb3RvKQotICAgICAgICAgICAgcGlja2xlci5kdW1wKGRhdGExKQotICAgICAgICAgICAgcGlja2xlZCA9IGYuZ2V0dmFsdWUoKQorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QocHJvdG89cHJvdG8pOgorICAgICAgICAgICAgICAgIGRhdGExID0gWyh4LCBzdHIoeCkpIGZvciB4IGluIHJhbmdlKDIwMDApXSArIFtiImFiY2RlIiwgbGVuXQorICAgICAgICAgICAgICAgIGYgPSBpb2NsYXNzKCkKKyAgICAgICAgICAgICAgICBwaWNrbGVyID0gc2VsZi5waWNrbGVyX2NsYXNzKGYsIHByb3RvY29sPXByb3RvKQorICAgICAgICAgICAgICAgIHBpY2tsZXIuZHVtcChkYXRhMSkKKyAgICAgICAgICAgICAgICBwaWNrbGVkID0gZi5nZXR2YWx1ZSgpCiAKLSAgICAgICAgICAgIE4gPSA1Ci0gICAgICAgICAgICBmID0gaW9jbGFzcyhwaWNrbGVkICogTikKLSAgICAgICAgICAgIHVucGlja2xlciA9IHNlbGYudW5waWNrbGVyX2NsYXNzKGYpCi0gICAgICAgICAgICBmb3IgaSBpbiByYW5nZShOKToKLSAgICAgICAgICAgICAgICBpZiBmLnNlZWthYmxlKCk6Ci0gICAgICAgICAgICAgICAgICAgIHBvcyA9IGYudGVsbCgpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bnBpY2tsZXIubG9hZCgpLCBkYXRhMSkKLSAgICAgICAgICAgICAgICBpZiBmLnNlZWthYmxlKCk6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi50ZWxsKCksIHBvcyArIGxlbihwaWNrbGVkKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEVPRkVycm9yLCB1bnBpY2tsZXIubG9hZCkKKyAgICAgICAgICAgICAgICBOID0gNQorICAgICAgICAgICAgICAgIGYgPSBpb2NsYXNzKHBpY2tsZWQgKiBOKQorICAgICAgICAgICAgICAgIHVucGlja2xlciA9IHNlbGYudW5waWNrbGVyX2NsYXNzKGYpCisgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoTik6CisgICAgICAgICAgICAgICAgICAgIGlmIGYuc2Vla2FibGUoKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBvcyA9IGYudGVsbCgpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5waWNrbGVyLmxvYWQoKSwgZGF0YTEpCisgICAgICAgICAgICAgICAgICAgIGlmIGYuc2Vla2FibGUoKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi50ZWxsKCksIHBvcyArIGxlbihwaWNrbGVkKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFT0ZFcnJvciwgdW5waWNrbGVyLmxvYWQpCiAKICAgICBkZWYgdGVzdF9tdWx0aXBsZV91bnBpY2tsaW5nc19zZWVrYWJsZShzZWxmKToKICAgICAgICAgc2VsZi5fY2hlY2tfbXVsdGlwbGVfdW5waWNrbGluZ3MoaW8uQnl0ZXNJTykKQEAgLTE4NzEsNyArMjc5OSw3IEBACiAgICAgIyBQcmludCBzb21lIHN0dWZmIHRoYXQgY2FuIGJlIHVzZWQgdG8gcmV3cml0ZSBEQVRBezAsMSwyfQogICAgIGZyb20gcGlja2xldG9vbHMgaW1wb3J0IGRpcwogICAgIHggPSBjcmVhdGVfZGF0YSgpCi0gICAgZm9yIGkgaW4gcmFuZ2UoMyk6CisgICAgZm9yIGkgaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wrMSk6CiAgICAgICAgIHAgPSBwaWNrbGUuZHVtcHMoeCwgaSkKICAgICAgICAgcHJpbnQoIkRBVEF7MH0gPSAoIi5mb3JtYXQoaSkpCiAgICAgICAgIGZvciBqIGluIHJhbmdlKDAsIGxlbihwKSwgMjApOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvcHljYWNlcnQucGVtIGIvTGliL3Rlc3QvcHljYWNlcnQucGVtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5YjFmM2UKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC9weWNhY2VydC5wZW0KQEAgLTAsMCArMSw3OCBAQAorQ2VydGlmaWNhdGU6CisgICAgRGF0YToKKyAgICAgICAgVmVyc2lvbjogMyAoMHgyKQorICAgICAgICBTZXJpYWwgTnVtYmVyOiAxMjcyMzM0MjYxMjcyMTQ0MzI4MCAoMHhiMDkyNjRiMWYyZGEyMWQwKQorICAgIFNpZ25hdHVyZSBBbGdvcml0aG06IHNoYTFXaXRoUlNBRW5jcnlwdGlvbgorICAgICAgICBJc3N1ZXI6IEM9WFksIE89UHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24gQ0EsIENOPW91ci1jYS1zZXJ2ZXIKKyAgICAgICAgVmFsaWRpdHkKKyAgICAgICAgICAgIE5vdCBCZWZvcmU6IEphbiAgNCAxOTo0NzowNyAyMDEzIEdNVAorICAgICAgICAgICAgTm90IEFmdGVyIDogSmFuICAyIDE5OjQ3OjA3IDIwMjMgR01UCisgICAgICAgIFN1YmplY3Q6IEM9WFksIE89UHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24gQ0EsIENOPW91ci1jYS1zZXJ2ZXIKKyAgICAgICAgU3ViamVjdCBQdWJsaWMgS2V5IEluZm86CisgICAgICAgICAgICBQdWJsaWMgS2V5IEFsZ29yaXRobTogcnNhRW5jcnlwdGlvbgorICAgICAgICAgICAgICAgIFB1YmxpYy1LZXk6ICgyMDQ4IGJpdCkKKyAgICAgICAgICAgICAgICBNb2R1bHVzOgorICAgICAgICAgICAgICAgICAgICAwMDplNzpkZTplOTplMzowYzo5ZjowMDpiNjphMTpmZDoyYjo1Yjo5NjpkMjoKKyAgICAgICAgICAgICAgICAgICAgNmY6Y2M6ZTA6YmU6ODY6Yjk6MjA6NWU6ZWM6MDM6N2E6NTU6YWI6ZWE6YTQ6CisgICAgICAgICAgICAgICAgICAgIGU5OmY5OjQ5Ojg1OmQyOjY2OmQ1OmVkOmM3OjdhOmVhOjU2OjhlOjJkOjhmOgorICAgICAgICAgICAgICAgICAgICBlNzo0MjplMjo2MjoyODphOTo5ZjpkNjoxYjo4ZTplYjpiNTpiNDo5Yzo5ZjoKKyAgICAgICAgICAgICAgICAgICAgMTQ6YWI6ZGY6ZTY6OTQ6OGI6NzY6MWQ6M2U6NmQ6MjQ6NjE6ZWQ6MGM6YmY6CisgICAgICAgICAgICAgICAgICAgIDAwOjhhOjYxOjBjOmRmOjVjOmM4OjM2OjczOjE2OjAwOmNkOjQ3OmJhOjZkOgorICAgICAgICAgICAgICAgICAgICBhNDphNDo3NDo4ODo4MzoyMzowYToxOTpmYzowOTphNzozYzo0YTo0YjpkMzoKKyAgICAgICAgICAgICAgICAgICAgZTc6MWQ6MmQ6ZTQ6ZWE6NGM6NTQ6MjE6ZjM6MjY6ZGI6ODk6Mzc6MTg6ZDQ6CisgICAgICAgICAgICAgICAgICAgIDAyOmJiOjQwOjMyOjVmOmE0OmZmOjJkOjFjOmY3OmQ0OmJiOmVjOjhlOmNmOgorICAgICAgICAgICAgICAgICAgICA1Yzo4MjphYzplNjo3YzowODo2Yzo0ODo4NTo2MTowNzo3ZjoyNTplMDo1YzoKKyAgICAgICAgICAgICAgICAgICAgZTA6YmM6MzQ6NWY6ZTA6Yjk6MDQ6NDc6NzU6Yzg6NDc6MGI6OGQ6YmM6ZDY6CisgICAgICAgICAgICAgICAgICAgIGM4OjY4OjVmOjMzOjgzOjYyOmQyOjIwOjQ0OjM1OmIxOmFkOjgxOjFhOjhhOgorICAgICAgICAgICAgICAgICAgICBjZDpiYzozNTpiMDo1Yzo4Yjo0NzpkNjoxODplOTo5YzoxODo5NzpjYzowMToKKyAgICAgICAgICAgICAgICAgICAgM2M6Mjk6Y2M6ZTg6MWU6ZTQ6ZTQ6YzE6Yjg6ZGU6ZTc6YzI6MTE6MTg6ODc6CisgICAgICAgICAgICAgICAgICAgIDVhOjkzOjM0OmQ4OmE2OjI1OmY3OjE0OjcxOmViOmU0OjIxOmEyOmQyOjBmOgorICAgICAgICAgICAgICAgICAgICAyZToyZTpkNDo2MjowMDozNTpkMzpkNjplZjo1Yzo2MDo0Yjo0YzphOToxNDoKKyAgICAgICAgICAgICAgICAgICAgZTI6ZGQ6MTU6NTg6NDY6Mzc6MzM6MjY6Yjc6ZTc6MmU6NWQ6ZWQ6NDI6ZTQ6CisgICAgICAgICAgICAgICAgICAgIGM1OjRkCisgICAgICAgICAgICAgICAgRXhwb25lbnQ6IDY1NTM3ICgweDEwMDAxKQorICAgICAgICBYNTA5djMgZXh0ZW5zaW9uczoKKyAgICAgICAgICAgIFg1MDl2MyBTdWJqZWN0IEtleSBJZGVudGlmaWVyOiAKKyAgICAgICAgICAgICAgICBCQzpERDo2MjpEOTo3NjpEQToxQjpEMjo1NDo2QjpDRjpFMDo2Njo5QjoxRToxRTo3Qjo1NjowQzowQgorICAgICAgICAgICAgWDUwOXYzIEF1dGhvcml0eSBLZXkgSWRlbnRpZmllcjogCisgICAgICAgICAgICAgICAga2V5aWQ6QkM6REQ6NjI6RDk6NzY6REE6MUI6RDI6NTQ6NkI6Q0Y6RTA6NjY6OUI6MUU6MUU6N0I6NTY6MEM6MEIKKworICAgICAgICAgICAgWDUwOXYzIEJhc2ljIENvbnN0cmFpbnRzOiAKKyAgICAgICAgICAgICAgICBDQTpUUlVFCisgICAgU2lnbmF0dXJlIEFsZ29yaXRobTogc2hhMVdpdGhSU0FFbmNyeXB0aW9uCisgICAgICAgICA3ZDowYTpmNTpjYjo4ZDpkMzo1ZDpiZDo5OTo4ZTpmODoyYjowZjpiYTplYjpjMjpkOTphNjoKKyAgICAgICAgIDI3OjRmOjJlOjdiOjJmOjBlOjY0OmQ4OjFjOjM1OjUwOjRlOmVlOmZjOjkwOmI5OjhkOjZkOgorICAgICAgICAgYTg6YzU6YzY6MDY6YjA6YWY6ZjM6MmQ6YmY6M2I6Yjg6NDI6MDc6ZGQ6MTg6N2Q6NmQ6OTU6CisgICAgICAgICA1NDo1Nzo4NToxODo2MDo0NzoyZjplYjo3ODoxYjpmOTplODoxNzpmZDo1YTowZDo4NzoxNzoKKyAgICAgICAgIDI4OmFjOjRjOjZhOmU2OmJjOjI5OmY0OmY0OjU1OjcwOjI5OjQyOmRlOjg1OmVhOmFiOjZjOgorICAgICAgICAgMjM6MDY6NjQ6MzA6NzU6MDI6OGU6NTM6YmM6NWU6MDE6MzM6Mzc6Y2M6MWU6Y2Q6Yjg6YTQ6CisgICAgICAgICBmZDpjYTplNDo1Zjo2NTozYjo4MzoxYzo4NjpmMTo1NTowMjphMDozYTo4ZjpkYjo5MTpiNzoKKyAgICAgICAgIDQwOjE0OmI0OmU3OjhkOmQyOmVlOjczOmJhOmUzOmU1OjM0OjJkOmJjOjk0OjZmOjRlOjI0OgorICAgICAgICAgMDY6Zjc6NWY6OGI6MGU6YTc6OGU6NmI6ZGU6NWU6NzU6ZjQ6MzI6OWE6NTA6YjE6NDQ6MzM6CisgICAgICAgICA5YTpkMDowNTplMjo3ODo4MjpmZjpkYjpkYTo4YTo2MzplYjphOTpkZDpkMTpiZjphMDo2MToKKyAgICAgICAgIGFkOmUzOjllOjhhOjI0OjVkOjYyOjBlOmU3OjRjOjkxOjdmOmVmOmRmOjM0OjM2OjNiOjJmOgorICAgICAgICAgNWQ6ZjU6ODQ6YjI6MmY6YzQ6NmQ6OTM6OTY6MWE6NmY6MzA6Mjg6ZjE6ZGE6MTI6OWE6NjQ6CisgICAgICAgICBiNDo0MDozMzoxZDpiZDpkZToyYjo1MzphODplYTpiZTpkNjpiYzo0ZTo5NjpmNTo0NDpmYjoKKyAgICAgICAgIDMyOjE4OmFlOmQ1OjFmOmY2OjY5OmFmOmI2OjRlOjdiOjFkOjU4OmVjOjNiOmE5OjUzOmEzOgorICAgICAgICAgNWU6NTg6Yzg6OWUKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJRGJUQ0NBbFdnQXdJQkFnSUpBTENTWkxIeTJpSFFNQTBHQ1NxR1NJYjNEUUVCQlFVQU1FMHhDekFKQmdOVgorQkFZVEFsaFpNU1l3SkFZRFZRUUtEQjFRZVhSb2IyNGdVMjltZEhkaGNtVWdSbTkxYm1SaGRHbHZiaUJEUVRFVworTUJRR0ExVUVBd3dOYjNWeUxXTmhMWE5sY25abGNqQWVGdzB4TXpBeE1EUXhPVFEzTURkYUZ3MHlNekF4TURJeAorT1RRM01EZGFNRTB4Q3pBSkJnTlZCQVlUQWxoWk1TWXdKQVlEVlFRS0RCMVFlWFJvYjI0Z1UyOW1kSGRoY21VZworUm05MWJtUmhkR2x2YmlCRFFURVdNQlFHQTFVRUF3d05iM1Z5TFdOaExYTmxjblpsY2pDQ0FTSXdEUVlKS29aSQoraHZjTkFRRUJCUUFEZ2dFUEFEQ0NBUW9DZ2dFQkFPZmU2ZU1NbndDMm9mMHJXNWJTYjh6Z3ZvYTVJRjdzQTNwVgorcStxazZmbEpoZEptMWUzSGV1cFdqaTJQNTBMaVlpaXBuOVlianV1MXRKeWZGS3ZmNXBTTGRoMCtiU1JoN1F5LworQUlwaEROOWN5RFp6RmdETlI3cHRwS1IwaUlNakNobjhDYWM4U2t2VDV4MHQ1T3BNVkNIekp0dUpOeGpVQXJ0QQorTWwray95MGM5OVM3N0k3UFhJS3M1bndJYkVpRllRZC9KZUJjNEx3MFgrQzVCRWQxeUVjTGpield5R2hmTTROaQorMGlCRU5iR3RnUnFLemJ3MXNGeUxSOVlZNlp3WWw4d0JQQ25NNkI3azVNRzQzdWZDRVJpSFdwTTAyS1lsOXhSeAorNitRaG90SVBMaTdVWWdBMTA5YnZYR0JMVEtrVTR0MFZXRVkzTXlhMzV5NWQ3VUxreFUwQ0F3RUFBYU5RTUU0dworSFFZRFZSME9CQllFRkx6ZFl0bDIyaHZTVkd2UDRHYWJIaDU3Vmd3TE1COEdBMVVkSXdRWU1CYUFGTHpkWXRsMgorMmh2U1ZHdlA0R2FiSGg1N1Znd0xNQXdHQTFVZEV3UUZNQU1CQWY4d0RRWUpLb1pJaHZjTkFRRUZCUUFEZ2dFQgorQUgwSzljdU4wMTI5bVk3NEt3KzY2OExacGlkUExuc3ZEbVRZSERWUVR1NzhrTG1OYmFqRnhnYXdyL010dnp1NAorUWdmZEdIMXRsVlJYaFJoZ1J5L3JlQnY1NkJmOVdnMkhGeWlzVEdybXZDbjA5RlZ3S1VMZWhlcXJiQ01HWkRCMQorQW81VHZGNEJNemZNSHMyNHBQM0s1RjlsTzRNY2h2RlZBcUE2ajl1UnQwQVV0T2VOMHU1enV1UGxOQzI4bEc5TworSkFiM1g0c09wNDVyM2w1MTlES2FVTEZFTTVyUUJlSjRndi9iMm9wajY2bmQwYitnWWEzam5vb2tYV0lPNTB5UgorZisvZk5EWTdMMTMxaExJdnhHMlRsaHB2TUNqeDJoS2FaTFJBTXgyOTNpdFRxT3ErMXJ4T2x2VkUreklZcnRVZgorOW1tdnRrNTdIVmpzTzZsVG8xNVl5SjQ9CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9weWNha2V5LnBlbSBiL0xpYi90ZXN0L3B5Y2FrZXkucGVtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjNmVmZmUKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC9weWNha2V5LnBlbQpAQCAtMCwwICsxLDI4IEBACistLS0tLUJFR0lOIFBSSVZBVEUgS0VZLS0tLS0KK01JSUV2Z0lCQURBTkJna3Foa2lHOXcwQkFRRUZBQVNDQktnd2dnU2tBZ0VBQW9JQkFRRG4zdW5qREo4QXRxSDkKK0sxdVcwbS9NNEw2R3VTQmU3QU42VmF2cXBPbjVTWVhTWnRYdHgzcnFWbzR0aitkQzRtSW9xWi9XRzQ3cnRiU2MKK254U3IzK2FVaTNZZFBtMGtZZTBNdndDS1lRemZYTWcyY3hZQXpVZTZiYVNrZElpREl3b1ovQW1uUEVwTDArY2QKK0xlVHFURlFoOHliYmlUY1kxQUs3UURKZnBQOHRIUGZVdSt5T3oxeUNyT1o4Q0d4SWhXRUhmeVhnWE9DOE5GL2cKK3VRUkhkY2hIQzQyODFzaG9Yek9EWXRJZ1JEV3hyWUVhaXMyOE5iQmNpMGZXR09tY0dKZk1BVHdwek9nZTVPVEIKK3VON253aEVZaDFxVE5OaW1KZmNVY2V2a0lhTFNEeTR1MUdJQU5kUFc3MXhnUzB5cEZPTGRGVmhHTnpNbXQrY3UKK1hlMUM1TVZOQWdNQkFBRUNnZ0VCQUpQTTdRdVVyUG40Y0xOL1lzZDE1bHdUV245b0hERkZna1lGdkNzNjZnWEUKK2p1LzZLeDJCaldFNHdUSmJ5MDlBSE0vTXFCMER2Z3VUN01mMVEyajN0UFExSFpvd2c4T3dSRGxldXdwNktJbHMKK2pCYmhMMEpkbC81SEM2N2t0V3ZaOXdOdk8vd0ZHMXJRZlQ2RlZhamY5TFViV0VhU1piT0cyU0xoSGZzSG9yenUKK3hqVEphSTNiUS8wKzc5QjFleHdrNXJ1d2h6RlJkL1hwWThobHM3RC9SZlBJdUhEbEJnaGtXM041OUtGV3JmNWgKKzZiTkVoMlRIbTArSXlHY0dxczBGRCtRQ09YeXZzandTVXN3cXJyMmN0TFJFT2VEY2Q1UmVValN4WWdqY0pScm0KK0o3Y2VJWS8rdXdESnh3L09sbm1CdkY2cFFNa0t3WVcyZ0Z6dHUrZzJ0NFVDZ1lFQS85eW8wMUV4ejRjcnhYc3kKK3RBbG5ESk0rK25aY20wN3J0RmpUS0hVZktZL2NDZ05UYTh1ZE0wc3ZuZndsaWQvZHBnTHNJMzhneDA0SEhDMWkKK0VaNGFjeitUb0lXZWRMeE0wbnE3My8veGVSV0Vhek92Q3oxbU1UWmFNbGRhaFRXQXl6TjhxVksyQi82MjVZeTQKK3dOWVd5d2VCQndFQjhNemFDczczc3Brc1hPc0NnWUVBNS83d3ZoaW9mWUdGQWZNdUFOZUpJd0RMMk90Qm5vT3YKK21WTmZDbWkzR0MzOGZ6d3lpNVpwc2tXRGlTMndvSitMUWZzOVF1NEVjWmJVRkxkN2diZU92YjVnbUZVdFlvcGUKK0xpdFVVS3VuSVIxOE1rUSttUURCcFFQUVBoazRRSlA1cmVDYldrcmZUdTdiNW8vaVM0MXM2ZkJURm11emhMY1QKK0M3MXZGZEN5ZUtjQ2dZQWlDQ3FZZU90RUxEbUJPZUxEbWFDUVJxR1ExTjk2ZE9QYkNCbUYveFlYQkNDRFlHL2YKK0hhVWFKbno5NllUZ3N0c2JjcllQL3AvUWdxdGxidy9sUWY5SXB3TXV6YmNHMWVqdDhnODlPeURXTnl0Mnl0Z1UKK2lhVW5GSkNvczMvQnloMElhaC9Cc2RPdWVvMi9PSmwyWk1PQlc4MG9ybFNndjg2Y3MyeTAzN1RMNHdLQmdRRG0KK09PeVcrTWxib3dobkl2Zm9CZndsTEVrZWZuZWo0bktENldSTFpCY3VlNVF5ZjM1NVgwNk1oc2M5Zm9YbEgrNkcKK0Q5aC9ic3dpSE5kaHA2TjgycmRnUEdpSFF4L0N4aVVvRS8rYi9udmdOTzVtdzZxTEUyRVhiRzFlOHBBTUpjeUUKK2JIdytZa2F3Z2dEZkVMSTAzNmZSajVna2k4U2VVejhuUzFuTmdFbGJ5UUtCZ0NSRFg5SmgrTXdTTHU0UUJXZHQKKy9maStsdjNLNmt1bi9mSTdFT1YxdkNWL2o4NzF0SUN1N3B1NUJyT0x4QUhxb1ZmVTlBVVgyOTkvMktqQ2I1cHYKK2tqb2dpVUs2cVdDV0JsZnVxRE5XR0NvVUd0MXJoem5VdmEwbk5qU015NXJpbkJoaGpwUk9aQzJwdzQ4bE9sdVAKK1V1dlhzYVBwaDdHVHFQdXk0S2FiMTJZQworLS0tLS1FTkQgUFJJVkFURSBLRVktLS0tLQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvcHlkb2NfbW9kLnB5IGIvTGliL3Rlc3QvcHlkb2NfbW9kLnB5CmluZGV4IGY4NmI1YzYuLmNkYTFjOWUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3B5ZG9jX21vZC5weQorKysgYi9MaWIvdGVzdC9weWRvY19tb2QucHkKQEAgLTE1LDYgKzE1LDE2IEBACiAgICAgTk9fTUVBTklORyA9ICJlZ2dzIgogICAgIHBhc3MKIAorY2xhc3MgQyhvYmplY3QpOgorICAgIGRlZiBzYXlfbm8oc2VsZik6CisgICAgICAgIHJldHVybiAibm8iCisgICAgZGVmIGdldF9hbnN3ZXIoc2VsZik6CisgICAgICAgICIiIiBSZXR1cm4gc2F5X25vKCkgIiIiCisgICAgICAgIHJldHVybiBzZWxmLnNheV9ubygpCisgICAgZGVmIGlzX2l0X3RydWUoc2VsZik6CisgICAgICAgICIiIiBSZXR1cm4gc2VsZi5nZXRfYW5zd2VyKCkgIiIiCisgICAgICAgIHJldHVybiBzZWxmLmdldF9hbnN3ZXIoKQorCiBkZWYgZG9jX2Z1bmMoKToKICAgICAiIiIKICAgICBUaGlzIGZ1bmN0aW9uIHNvbHZlcyBhbGwgb2YgdGhlIHdvcmxkJ3MgcHJvYmxlbXM6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC9weXN0b25lLnB5IGIvTGliL3Rlc3QvcHlzdG9uZS5weQppbmRleCBkN2YxZWM5Li41OWRkOTliIDEwMDc1NQotLS0gYS9MaWIvdGVzdC9weXN0b25lLnB5CisrKyBiL0xpYi90ZXN0L3B5c3RvbmUucHkKQEAgLTMsNyArMyw3IEBACiAiIiIKICJQWVNUT05FIiBCZW5jaG1hcmsgUHJvZ3JhbQogCi1WZXJzaW9uOiAgICAgICAgUHl0aG9uLzEuMSAoY29ycmVzcG9uZHMgdG8gQy8xLjEgcGx1cyAyIFB5c3RvbmUgZml4ZXMpCitWZXJzaW9uOiAgICAgICAgUHl0aG9uLzEuMiAoY29ycmVzcG9uZHMgdG8gQy8xLjEgcGx1cyAzIFB5c3RvbmUgZml4ZXMpCiAKIEF1dGhvcjogICAgICAgICBSZWluaG9sZCBQLiBXZWlja2VyLCAgQ0FDTSBWb2wgMjcsIE5vIDEwLCAxMC84NCBwZy4gMTAxMy4KIApAQCAtMzAsMTMgKzMwLDIwIEBACiAgICAgICAgICAgICAgICAgcGVyY2VudCBmYXN0ZXIgdGhhbiB2ZXJzaW9uIDEuMCwgc28gYmVuY2htYXJrIGZpZ3VyZXMKICAgICAgICAgICAgICAgICBvZiBkaWZmZXJlbnQgdmVyc2lvbnMgY2FuJ3QgYmUgY29tcGFyZWQgZGlyZWN0bHkuCiAKKyAgICAgICAgICAgICAgICBWZXJzaW9uIDEuMiBjaGFuZ2VzIHRoZSBkaXZpc2lvbiB0byBmbG9vciBkaXZpc2lvbi4KKworICAgICAgICAgICAgICAgIFVuZGVyIFB5dGhvbiAzIHZlcnNpb24gMS4xIHdvdWxkIHVzZSB0aGUgbm9ybWFsIGRpdmlzaW9uCisgICAgICAgICAgICAgICAgb3BlcmF0b3IsIHJlc3VsdGluZyBpbiBzb21lIG9mIHRoZSBvcGVyYXRpb25zIG1pc3Rha2VubHkKKyAgICAgICAgICAgICAgICB5aWVsZGluZyBmbG9hdHMuIFZlcnNpb24gMS4yIGluc3RlYWQgdXNlcyBmbG9vciBkaXZpc2lvbgorICAgICAgICAgICAgICAgIG1ha2luZyB0aGUgYmVuY2htYXJrIGFuIGludGVnZXIgYmVuY2htYXJrIGFnYWluLgorCiAiIiIKIAogTE9PUFMgPSA1MDAwMAogCiBmcm9tIHRpbWUgaW1wb3J0IGNsb2NrCiAKLV9fdmVyc2lvbl9fID0gIjEuMSIKK19fdmVyc2lvbl9fID0gIjEuMiIKIAogW0lkZW50MSwgSWRlbnQyLCBJZGVudDMsIElkZW50NCwgSWRlbnQ1XSA9IHJhbmdlKDEsIDYpCiAKQEAgLTEyMyw3ICsxMzAsNyBAQAogICAgICAgICAgICAgICAgIEVudW1Mb2MgPSBQcm9jNihJZGVudDEpCiAgICAgICAgICAgICBDaGFySW5kZXggPSBjaHIob3JkKENoYXJJbmRleCkrMSkKICAgICAgICAgSW50TG9jMyA9IEludExvYzIgKiBJbnRMb2MxCi0gICAgICAgIEludExvYzIgPSBJbnRMb2MzIC8gSW50TG9jMQorICAgICAgICBJbnRMb2MyID0gSW50TG9jMyAvLyBJbnRMb2MxCiAgICAgICAgIEludExvYzIgPSA3ICogKEludExvYzMgLSBJbnRMb2MyKSAtIEludExvYzEKICAgICAgICAgSW50TG9jMSA9IFByb2MyKEludExvYzEpCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3JlX3Rlc3RzLnB5IGIvTGliL3Rlc3QvcmVfdGVzdHMucHkKaW5kZXggNWQxNmUzZC4uN2Y4MDc1ZSAxMDA3NTUKLS0tIGEvTGliL3Rlc3QvcmVfdGVzdHMucHkKKysrIGIvTGliL3Rlc3QvcmVfdGVzdHMucHkKQEAgLTg2LDcgKzg2LDcgQEAKICAgICAocidcYVtcYl1cZlxuXHJcdFx2JywgJ1xhXGJcZlxuXHJcdFx2JywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ1xhXGJcZlxuXHJcdFx2JyksCiAgICAgKHInW1xhXVtcYl1bXGZdW1xuXVtccl1bXHRdW1x2XScsICdcYVxiXGZcblxyXHRcdicsIFNVQ0NFRUQsICdmb3VuZCcsICdcYVxiXGZcblxyXHRcdicpLAogICAgICMgTk9URTogbm90IGFuIGVycm9yIHVuZGVyIFBDUkUvUFJFOgotICAgICMgKHInXHUnLCAnJywgU1lOVEFYX0VSUk9SKSwgICAgIyBBIFBlcmwgZXNjYXBlCisgICAgKHInXHUnLCAnJywgU1lOVEFYX0VSUk9SKSwgICAgIyBBIFBlcmwgZXNjYXBlCiAgICAgKHInXGNcZVxnXGhcaVxqXGtcbVxvXHBccVx5XHonLCAnY2VnaGlqa21vcHF5eicsIFNVQ0NFRUQsICdmb3VuZCcsICdjZWdoaWprbW9wcXl6JyksCiAgICAgKHInXHhmZicsICdcMzc3JywgU1VDQ0VFRCwgJ2ZvdW5kJywgY2hyKDI1NSkpLAogICAgICMgbmV3IFx4IHNlbWFudGljcwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvcmVncnRlc3QucHkgYi9MaWIvdGVzdC9yZWdydGVzdC5weQppbmRleCBhZTYyYzZlLi5lYmRjZGFkIDEwMDc1NQotLS0gYS9MaWIvdGVzdC9yZWdydGVzdC5weQorKysgYi9MaWIvdGVzdC9yZWdydGVzdC5weQpAQCAtMSwxMSArMSwxOCBAQAogIyEgL3Vzci9iaW4vZW52IHB5dGhvbjMKIAogIiIiCi1Vc2FnZToKK1NjcmlwdCB0byBydW4gUHl0aG9uIHJlZ3Jlc3Npb24gdGVzdHMuCiAKK1J1biB0aGlzIHNjcmlwdCB3aXRoIC1oIG9yIC0taGVscCBmb3IgZG9jdW1lbnRhdGlvbi4KKyIiIgorCitVU0FHRSA9ICIiIlwKIHB5dGhvbiAtbSB0ZXN0IFtvcHRpb25zXSBbdGVzdF9uYW1lMSBbdGVzdF9uYW1lMiAuLi5dXQogcHl0aG9uIHBhdGgvdG8vTGliL3Rlc3QvcmVncnRlc3QucHkgW29wdGlvbnNdIFt0ZXN0X25hbWUxIFt0ZXN0X25hbWUyIC4uLl1dCisiIiIKIAorREVTQ1JJUFRJT04gPSAiIiJcCitSdW4gUHl0aG9uIHJlZ3Jlc3Npb24gdGVzdHMuCiAKIElmIG5vIGFyZ3VtZW50cyBvciBvcHRpb25zIGFyZSBwcm92aWRlZCwgZmluZHMgYWxsIGZpbGVzIG1hdGNoaW5nCiB0aGUgcGF0dGVybiAidGVzdF8qIiBpbiB0aGUgTGliL3Rlc3Qgc3ViZGlyZWN0b3J5IGFuZCBydW5zCkBAIC0xNSw2NSArMjIsMTIgQEAKIGNvbW1hbmQgbGluZToKIAogcHl0aG9uIC1FIC1XZCAtbSB0ZXN0IFtvcHRpb25zXSBbdGVzdF9uYW1lMSAuLi5dCisiIiIKIAorRVBJTE9HID0gIiIiXAorQWRkaXRpb25hbCBvcHRpb24gZGV0YWlsczoKIAotT3B0aW9uczoKLQotLWgvLS1oZWxwICAgICAgIC0tIHByaW50IHRoaXMgdGV4dCBhbmQgZXhpdAotLS10aW1lb3V0IFRJTUVPVVQKLSAgICAgICAgICAgICAgICAtLSBkdW1wIHRoZSB0cmFjZWJhY2sgYW5kIGV4aXQgaWYgYSB0ZXN0IHRha2VzIG1vcmUKLSAgICAgICAgICAgICAgICAgICB0aGFuIFRJTUVPVVQgc2Vjb25kczsgZGlzYWJsZWQgaWYgVElNRU9VVCBpcyBuZWdhdGl2ZQotICAgICAgICAgICAgICAgICAgIG9yIGVxdWFscyB0byB6ZXJvCi0tLXdhaXQgICAgICAgICAgLS0gd2FpdCBmb3IgdXNlciBpbnB1dCwgZS5nLiwgYWxsb3cgYSBkZWJ1Z2dlciB0byBiZSBhdHRhY2hlZAotCi1WZXJib3NpdHkKLQotLXYvLS12ZXJib3NlICAgIC0tIHJ1biB0ZXN0cyBpbiB2ZXJib3NlIG1vZGUgd2l0aCBvdXRwdXQgdG8gc3Rkb3V0Ci0tdy8tLXZlcmJvc2UyICAgLS0gcmUtcnVuIGZhaWxlZCB0ZXN0cyBpbiB2ZXJib3NlIG1vZGUKLS1XLy0tdmVyYm9zZTMgICAtLSBkaXNwbGF5IHRlc3Qgb3V0cHV0IG9uIGZhaWx1cmUKLS1kLy0tZGVidWcgICAgICAtLSBwcmludCB0cmFjZWJhY2sgZm9yIGZhaWxlZCB0ZXN0cwotLXEvLS1xdWlldCAgICAgIC0tIG5vIG91dHB1dCB1bmxlc3Mgb25lIG9yIG1vcmUgdGVzdHMgZmFpbAotLW8vLS1zbG93ICAgICAgIC0tIHByaW50IHRoZSBzbG93ZXN0IDEwIHRlc3RzCi0gICAtLWhlYWRlciAgICAgLS0gcHJpbnQgaGVhZGVyIHdpdGggaW50ZXJwcmV0ZXIgaW5mbwotCi1TZWxlY3RpbmcgdGVzdHMKLQotLXIvLS1yYW5kb21pemUgIC0tIHJhbmRvbWl6ZSB0ZXN0IGV4ZWN1dGlvbiBvcmRlciAoc2VlIGJlbG93KQotICAgLS1yYW5kc2VlZCAgIC0tIHBhc3MgYSByYW5kb20gc2VlZCB0byByZXByb2R1Y2UgYSBwcmV2aW91cyByYW5kb20gcnVuCi0tZi8tLWZyb21maWxlICAgLS0gcmVhZCBuYW1lcyBvZiB0ZXN0cyB0byBydW4gZnJvbSBhIGZpbGUgKHNlZSBiZWxvdykKLS14Ly0tZXhjbHVkZSAgICAtLSBhcmd1bWVudHMgYXJlIHRlc3RzIHRvICpleGNsdWRlKgotLXMvLS1zaW5nbGUgICAgIC0tIHNpbmdsZSBzdGVwIHRocm91Z2ggYSBzZXQgb2YgdGVzdHMgKHNlZSBiZWxvdykKLS1tLy0tbWF0Y2ggUEFUICAtLSBtYXRjaCB0ZXN0IGNhc2VzIGFuZCBtZXRob2RzIHdpdGggZ2xvYiBwYXR0ZXJuIFBBVAotLUcvLS1mYWlsZmFzdCAgIC0tIGZhaWwgYXMgc29vbiBhcyBhIHRlc3QgZmFpbHMgKG9ubHkgd2l0aCAtdiBvciAtVykKLS11Ly0tdXNlIFJFUzEsUkVTMiwuLi4KLSAgICAgICAgICAgICAgICAtLSBzcGVjaWZ5IHdoaWNoIHNwZWNpYWwgcmVzb3VyY2UgaW50ZW5zaXZlIHRlc3RzIHRvIHJ1bgotLU0vLS1tZW1saW1pdCBMSU1JVAotICAgICAgICAgICAgICAgIC0tIHJ1biB2ZXJ5IGxhcmdlIG1lbW9yeS1jb25zdW1pbmcgdGVzdHMKLSAgIC0tdGVzdGRpciBESVIKLSAgICAgICAgICAgICAgICAtLSBleGVjdXRlIHRlc3QgZmlsZXMgaW4gdGhlIHNwZWNpZmllZCBkaXJlY3RvcnkgKGluc3RlYWQKLSAgICAgICAgICAgICAgICAgICBvZiB0aGUgUHl0aG9uIHN0ZGxpYiB0ZXN0IHN1aXRlKQotCi1TcGVjaWFsIHJ1bnMKLQotLWwvLS1maW5kbGVha3MgIC0tIGlmIEdDIGlzIGF2YWlsYWJsZSBkZXRlY3QgdGVzdHMgdGhhdCBsZWFrIG1lbW9yeQotLUwvLS1ydW5sZWFrcyAgIC0tIHJ1biB0aGUgbGVha3MoMSkgY29tbWFuZCBqdXN0IGJlZm9yZSBleGl0Ci0tUi8tLWh1bnRybGVha3MgUlVOQ09VTlRTCi0gICAgICAgICAgICAgICAgLS0gc2VhcmNoIGZvciByZWZlcmVuY2UgbGVha3MgKG5lZWRzIGRlYnVnIGJ1aWxkLCB2LiBzbG93KQotLWovLS1tdWx0aXByb2Nlc3MgUFJPQ0VTU0VTCi0gICAgICAgICAgICAgICAgLS0gcnVuIFBST0NFU1NFUyBwcm9jZXNzZXMgYXQgb25jZQotLVQvLS1jb3ZlcmFnZSAgIC0tIHR1cm4gb24gY29kZSBjb3ZlcmFnZSB0cmFjaW5nIHVzaW5nIHRoZSB0cmFjZSBtb2R1bGUKLS1ELy0tY292ZXJkaXIgRElSRUNUT1JZCi0gICAgICAgICAgICAgICAgLS0gRGlyZWN0b3J5IHdoZXJlIGNvdmVyYWdlIGZpbGVzIGFyZSBwdXQKLS1OLy0tbm9jb3ZlcmRpciAtLSBQdXQgY292ZXJhZ2UgZmlsZXMgYWxvbmdzaWRlIG1vZHVsZXMKLS10Ly0tdGhyZXNob2xkIFRIUkVTSE9MRAotICAgICAgICAgICAgICAgIC0tIGNhbGwgZ2Muc2V0X3RocmVzaG9sZChUSFJFU0hPTEQpCi0tbi8tLW5vd2luZG93cyAgLS0gc3VwcHJlc3MgZXJyb3IgbWVzc2FnZSBib3hlcyBvbiBXaW5kb3dzCi0tRi8tLWZvcmV2ZXIgICAgLS0gcnVuIHRoZSBzcGVjaWZpZWQgdGVzdHMgaW4gYSBsb29wLCB1bnRpbCBhbiBlcnJvciBoYXBwZW5zCi0KLQotQWRkaXRpb25hbCBPcHRpb24gRGV0YWlsczoKLQotLXIgcmFuZG9taXplcyB0ZXN0IGV4ZWN1dGlvbiBvcmRlci4gWW91IGNhbiB1c2UgLS1yYW5kc2VlZD1pbnQgdG8gcHJvdmlkZSBhCistciByYW5kb21pemVzIHRlc3QgZXhlY3V0aW9uIG9yZGVyLiBZb3UgY2FuIHVzZSAtLXJhbmRzZWVkPWludCB0byBwcm92aWRlIGFuCiBpbnQgc2VlZCB2YWx1ZSBmb3IgdGhlIHJhbmRvbWl6ZXI7IHRoaXMgaXMgdXNlZnVsIGZvciByZXByb2R1Y2luZyB0cm91Ymxlc29tZQogdGVzdCBvcmRlcnMuCiAKQEAgLTE2OCwxMSArMTIyLDEyIEBACiAjIFdlIGltcG9ydCBpbXBvcnRsaWIgKkFTQVAqIGluIG9yZGVyIHRvIHRlc3QgIzE1Mzg2CiBpbXBvcnQgaW1wb3J0bGliCiAKK2ltcG9ydCBhcmdwYXJzZQogaW1wb3J0IGJ1aWx0aW5zCiBpbXBvcnQgZmF1bHRoYW5kbGVyCi1pbXBvcnQgZ2V0b3B0CiBpbXBvcnQgaW8KIGltcG9ydCBqc29uCitpbXBvcnQgbG9jYWxlCiBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IG9zCiBpbXBvcnQgcGxhdGZvcm0KQEAgLTE5NCw3ICsxNDksNyBAQAogZXhjZXB0IEltcG9ydEVycm9yOgogICAgIHRocmVhZGluZyA9IE5vbmUKIHRyeToKLSAgICBpbXBvcnQgbXVsdGlwcm9jZXNzaW5nLnByb2Nlc3MKKyAgICBpbXBvcnQgX211bHRpcHJvY2Vzc2luZywgbXVsdGlwcm9jZXNzaW5nLnByb2Nlc3MKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICBtdWx0aXByb2Nlc3NpbmcgPSBOb25lCiAKQEAgLTI0NiwyMCArMjAxLDI2MiBAQAogUkVTT1VSQ0VfTkFNRVMgPSAoJ2F1ZGlvJywgJ2N1cnNlcycsICdsYXJnZWZpbGUnLCAnbmV0d29yaycsCiAgICAgICAgICAgICAgICAgICAnZGVjaW1hbCcsICdjcHUnLCAnc3VicHJvY2VzcycsICd1cmxmZXRjaCcsICdndWknKQogCi1URU1QRElSID0gb3MucGF0aC5hYnNwYXRoKHRlbXBmaWxlLmdldHRlbXBkaXIoKSkKKyMgV2hlbiB0ZXN0cyBhcmUgcnVuIGZyb20gdGhlIFB5dGhvbiBidWlsZCBkaXJlY3RvcnksIGl0IGlzIGJlc3QgcHJhY3RpY2UKKyMgdG8ga2VlcCB0aGUgdGVzdCBmaWxlcyBpbiBhIHN1YmZvbGRlci4gIFRoaXMgZWFzZXMgdGhlIGNsZWFudXAgb2YgbGVmdG92ZXIKKyMgZmlsZXMgdXNpbmcgdGhlICJtYWtlIGRpc3RjbGVhbiIgY29tbWFuZC4KK2lmIHN5c2NvbmZpZy5pc19weXRob25fYnVpbGQoKToKKyAgICBURU1QRElSID0gb3MucGF0aC5qb2luKHN5c2NvbmZpZy5nZXRfY29uZmlnX3Zhcignc3JjZGlyJyksICdidWlsZCcpCitlbHNlOgorICAgIFRFTVBESVIgPSB0ZW1wZmlsZS5nZXR0ZW1wZGlyKCkKK1RFTVBESVIgPSBvcy5wYXRoLmFic3BhdGgoVEVNUERJUikKIAotZGVmIHVzYWdlKG1zZyk6Ci0gICAgcHJpbnQobXNnLCBmaWxlPXN5cy5zdGRlcnIpCi0gICAgcHJpbnQoIlVzZSAtLWhlbHAgZm9yIHVzYWdlIiwgZmlsZT1zeXMuc3RkZXJyKQotICAgIHN5cy5leGl0KDIpCitjbGFzcyBfQXJnUGFyc2VyKGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKToKIAorICAgIGRlZiBlcnJvcihzZWxmLCBtZXNzYWdlKToKKyAgICAgICAgc3VwZXIoKS5lcnJvcihtZXNzYWdlICsgIlxuUGFzcyAtaCBvciAtLWhlbHAgZm9yIGNvbXBsZXRlIGhlbHAuIikKIAotZGVmIG1haW4odGVzdHM9Tm9uZSwgdGVzdGRpcj1Ob25lLCB2ZXJib3NlPTAsIHF1aWV0PUZhbHNlLAorZGVmIF9jcmVhdGVfcGFyc2VyKCk6CisgICAgIyBTZXQgcHJvZyB0byBwcmV2ZW50IHRoZSB1bmluZm9ybWF0aXZlICJfX21haW5fXy5weSIgZnJvbSBkaXNwbGF5aW5nIGluCisgICAgIyBlcnJvciBtZXNzYWdlcyB3aGVuIHVzaW5nICJweXRob24gLW0gdGVzdCAuLi4iLgorICAgIHBhcnNlciA9IF9BcmdQYXJzZXIocHJvZz0ncmVncnRlc3QucHknLAorICAgICAgICAgICAgICAgICAgICAgICAgdXNhZ2U9VVNBR0UsCisgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj1ERVNDUklQVElPTiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVwaWxvZz1FUElMT0csCisgICAgICAgICAgICAgICAgICAgICAgICBhZGRfaGVscD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlcl9jbGFzcz1hcmdwYXJzZS5SYXdEZXNjcmlwdGlvbkhlbHBGb3JtYXR0ZXIpCisKKyAgICAjIEFyZ3VtZW50cyB3aXRoIHRoaXMgY2xhdXNlIGFkZGVkIHRvIGl0cyBoZWxwIGFyZSBkZXNjcmliZWQgZnVydGhlciBpbgorICAgICMgdGhlIGVwaWxvZydzICJBZGRpdGlvbmFsIG9wdGlvbiBkZXRhaWxzIiBzZWN0aW9uLgorICAgIG1vcmVfZGV0YWlscyA9ICcgIFNlZSB0aGUgc2VjdGlvbiBhdCBib3R0b20gZm9yIG1vcmUgZGV0YWlscy4nCisKKyAgICBncm91cCA9IHBhcnNlci5hZGRfYXJndW1lbnRfZ3JvdXAoJ0dlbmVyYWwgb3B0aW9ucycpCisgICAgIyBXZSBhZGQgaGVscCBleHBsaWNpdGx5IHRvIGNvbnRyb2wgd2hhdCBhcmd1bWVudCBncm91cCBpdCByZW5kZXJzIHVuZGVyLgorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLWgnLCAnLS1oZWxwJywgYWN0aW9uPSdoZWxwJywKKyAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdCcpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctLXRpbWVvdXQnLCBtZXRhdmFyPSdUSU1FT1VUJywgdHlwZT1mbG9hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J2R1bXAgdGhlIHRyYWNlYmFjayBhbmQgZXhpdCBpZiBhIHRlc3QgdGFrZXMgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbW9yZSB0aGFuIFRJTUVPVVQgc2Vjb25kczsgZGlzYWJsZWQgaWYgVElNRU9VVCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpcyBuZWdhdGl2ZSBvciBlcXVhbHMgdG8gemVybycpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctLXdhaXQnLCBhY3Rpb249J3N0b3JlX3RydWUnLAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSd3YWl0IGZvciB1c2VyIGlucHV0LCBlLmcuLCBhbGxvdyBhIGRlYnVnZ2VyICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAndG8gYmUgYXR0YWNoZWQnKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLS1zbGF2ZWFyZ3MnLCBtZXRhdmFyPSdBUkdTJykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy1TJywgJy0tc3RhcnQnLCBtZXRhdmFyPSdTVEFSVCcsCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3RoZSBuYW1lIG9mIHRoZSB0ZXN0IGF0IHdoaWNoIHRvIHN0YXJ0LicgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vcmVfZGV0YWlscykKKworICAgIGdyb3VwID0gcGFyc2VyLmFkZF9hcmd1bWVudF9ncm91cCgnVmVyYm9zaXR5JykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy12JywgJy0tdmVyYm9zZScsIGFjdGlvbj0nY291bnQnLAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdydW4gdGVzdHMgaW4gdmVyYm9zZSBtb2RlIHdpdGggb3V0cHV0IHRvIHN0ZG91dCcpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctdycsICctLXZlcmJvc2UyJywgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAgICAgICAgICAgICAgICAgaGVscD0ncmUtcnVuIGZhaWxlZCB0ZXN0cyBpbiB2ZXJib3NlIG1vZGUnKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLVcnLCAnLS12ZXJib3NlMycsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J2Rpc3BsYXkgdGVzdCBvdXRwdXQgb24gZmFpbHVyZScpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctcScsICctLXF1aWV0JywgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nbm8gb3V0cHV0IHVubGVzcyBvbmUgb3IgbW9yZSB0ZXN0cyBmYWlsJykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy1vJywgJy0tc2xvdycsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlc3Q9J3ByaW50X3Nsb3cnLAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdwcmludCB0aGUgc2xvd2VzdCAxMCB0ZXN0cycpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctLWhlYWRlcicsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3ByaW50IGhlYWRlciB3aXRoIGludGVycHJldGVyIGluZm8nKQorCisgICAgZ3JvdXAgPSBwYXJzZXIuYWRkX2FyZ3VtZW50X2dyb3VwKCdTZWxlY3RpbmcgdGVzdHMnKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLXInLCAnLS1yYW5kb21pemUnLCBhY3Rpb249J3N0b3JlX3RydWUnLAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdyYW5kb21pemUgdGVzdCBleGVjdXRpb24gb3JkZXIuJyArIG1vcmVfZGV0YWlscykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy0tcmFuZHNlZWQnLCBtZXRhdmFyPSdTRUVEJywKKyAgICAgICAgICAgICAgICAgICAgICAgZGVzdD0ncmFuZG9tX3NlZWQnLCB0eXBlPWludCwKKyAgICAgICAgICAgICAgICAgICAgICAgaGVscD0ncGFzcyBhIHJhbmRvbSBzZWVkIHRvIHJlcHJvZHVjZSBhIHByZXZpb3VzICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmFuZG9tIHJ1bicpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctZicsICctLWZyb21maWxlJywgbWV0YXZhcj0nRklMRScsCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3JlYWQgbmFtZXMgb2YgdGVzdHMgdG8gcnVuIGZyb20gYSBmaWxlLicgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vcmVfZGV0YWlscykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy14JywgJy0tZXhjbHVkZScsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J2FyZ3VtZW50cyBhcmUgdGVzdHMgdG8gKmV4Y2x1ZGUqJykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy1zJywgJy0tc2luZ2xlJywgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nc2luZ2xlIHN0ZXAgdGhyb3VnaCBhIHNldCBvZiB0ZXN0cy4nICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3JlX2RldGFpbHMpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctbScsICctLW1hdGNoJywgbWV0YXZhcj0nUEFUJywKKyAgICAgICAgICAgICAgICAgICAgICAgZGVzdD0nbWF0Y2hfdGVzdHMnLAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdtYXRjaCB0ZXN0IGNhc2VzIGFuZCBtZXRob2RzIHdpdGggZ2xvYiBwYXR0ZXJuIFBBVCcpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctRycsICctLWZhaWxmYXN0JywgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nZmFpbCBhcyBzb29uIGFzIGEgdGVzdCBmYWlscyAob25seSB3aXRoIC12IG9yIC1XKScpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctdScsICctLXVzZScsIG1ldGF2YXI9J1JFUzEsUkVTMiwuLi4nLAorICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249J2FwcGVuZCcsIHR5cGU9cmVzb3VyY2VzX2xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3NwZWNpZnkgd2hpY2ggc3BlY2lhbCByZXNvdXJjZSBpbnRlbnNpdmUgdGVzdHMgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0byBydW4uJyArIG1vcmVfZGV0YWlscykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy1NJywgJy0tbWVtbGltaXQnLCBtZXRhdmFyPSdMSU1JVCcsCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3J1biB2ZXJ5IGxhcmdlIG1lbW9yeS1jb25zdW1pbmcgdGVzdHMuJyArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9yZV9kZXRhaWxzKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLS10ZXN0ZGlyJywgbWV0YXZhcj0nRElSJywKKyAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1yZWxhdGl2ZV9maWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nZXhlY3V0ZSB0ZXN0IGZpbGVzIGluIHRoZSBzcGVjaWZpZWQgZGlyZWN0b3J5ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKGluc3RlYWQgb2YgdGhlIFB5dGhvbiBzdGRsaWIgdGVzdCBzdWl0ZSknKQorCisgICAgZ3JvdXAgPSBwYXJzZXIuYWRkX2FyZ3VtZW50X2dyb3VwKCdTcGVjaWFsIHJ1bnMnKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLWwnLCAnLS1maW5kbGVha3MnLCBhY3Rpb249J3N0b3JlX3RydWUnLAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdpZiBHQyBpcyBhdmFpbGFibGUgZGV0ZWN0IHRlc3RzIHRoYXQgbGVhayBtZW1vcnknKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLUwnLCAnLS1ydW5sZWFrcycsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3J1biB0aGUgbGVha3MoMSkgY29tbWFuZCBqdXN0IGJlZm9yZSBleGl0LicgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vcmVfZGV0YWlscykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy1SJywgJy0taHVudHJsZWFrcycsIG1ldGF2YXI9J1JVTkNPVU5UUycsCisgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9aHVudHJsZWFrcywKKyAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nc2VhcmNoIGZvciByZWZlcmVuY2UgbGVha3MgKG5lZWRzIGRlYnVnIGJ1aWxkLCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Zlcnkgc2xvdykuJyArIG1vcmVfZGV0YWlscykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy1qJywgJy0tbXVsdGlwcm9jZXNzJywgbWV0YXZhcj0nUFJPQ0VTU0VTJywKKyAgICAgICAgICAgICAgICAgICAgICAgZGVzdD0ndXNlX21wJywgdHlwZT1pbnQsCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3J1biBQUk9DRVNTRVMgcHJvY2Vzc2VzIGF0IG9uY2UnKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLVQnLCAnLS1jb3ZlcmFnZScsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCisgICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9J3RyYWNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgaGVscD0ndHVybiBvbiBjb2RlIGNvdmVyYWdlIHRyYWNpbmcgdXNpbmcgdGhlIHRyYWNlICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbW9kdWxlJykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy1EJywgJy0tY292ZXJkaXInLCBtZXRhdmFyPSdESVInLAorICAgICAgICAgICAgICAgICAgICAgICB0eXBlPXJlbGF0aXZlX2ZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdkaXJlY3Rvcnkgd2hlcmUgY292ZXJhZ2UgZmlsZXMgYXJlIHB1dCcpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctTicsICctLW5vY292ZXJkaXInLAorICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249J3N0b3JlX2NvbnN0JywgY29uc3Q9Tm9uZSwgZGVzdD0nY292ZXJkaXInLAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdwdXQgY292ZXJhZ2UgZmlsZXMgYWxvbmdzaWRlIG1vZHVsZXMnKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLXQnLCAnLS10aHJlc2hvbGQnLCBtZXRhdmFyPSdUSFJFU0hPTEQnLAorICAgICAgICAgICAgICAgICAgICAgICB0eXBlPWludCwKKyAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nY2FsbCBnYy5zZXRfdGhyZXNob2xkKFRIUkVTSE9MRCknKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLW4nLCAnLS1ub3dpbmRvd3MnLCBhY3Rpb249J3N0b3JlX3RydWUnLAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdzdXBwcmVzcyBlcnJvciBtZXNzYWdlIGJveGVzIG9uIFdpbmRvd3MnKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLUYnLCAnLS1mb3JldmVyJywgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAgICAgICAgICAgICAgICAgaGVscD0ncnVuIHRoZSBzcGVjaWZpZWQgdGVzdHMgaW4gYSBsb29wLCB1bnRpbCBhbiAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Vycm9yIGhhcHBlbnMnKQorCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnYXJncycsIG5hcmdzPWFyZ3BhcnNlLlJFTUFJTkRFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9YXJncGFyc2UuU1VQUFJFU1MpCisKKyAgICByZXR1cm4gcGFyc2VyCisKK2RlZiByZWxhdGl2ZV9maWxlbmFtZShzdHJpbmcpOgorICAgICMgQ1dEIGlzIHJlcGxhY2VkIHdpdGggYSB0ZW1wb3JhcnkgZGlyIGJlZm9yZSBjYWxsaW5nIG1haW4oKSwgc28gd2UKKyAgICAjIGpvaW4gaXQgd2l0aCB0aGUgc2F2ZWQgQ1dEIHNvIGl0IGVuZHMgdXAgd2hlcmUgdGhlIHVzZXIgZXhwZWN0cy4KKyAgICByZXR1cm4gb3MucGF0aC5qb2luKHN1cHBvcnQuU0FWRURDV0QsIHN0cmluZykKKworZGVmIGh1bnRybGVha3Moc3RyaW5nKToKKyAgICBhcmdzID0gc3RyaW5nLnNwbGl0KCc6JykKKyAgICBpZiBsZW4oYXJncykgbm90IGluICgyLCAzKToKKyAgICAgICAgcmFpc2UgYXJncGFyc2UuQXJndW1lbnRUeXBlRXJyb3IoCisgICAgICAgICAgICAnbmVlZHMgMiBvciAzIGNvbG9uLXNlcGFyYXRlZCBhcmd1bWVudHMnKQorICAgIG53YXJtdXAgPSBpbnQoYXJnc1swXSkgaWYgYXJnc1swXSBlbHNlIDUKKyAgICBudHJhY2tlZCA9IGludChhcmdzWzFdKSBpZiBhcmdzWzFdIGVsc2UgNAorICAgIGZuYW1lID0gYXJnc1syXSBpZiBsZW4oYXJncykgPiAyIGFuZCBhcmdzWzJdIGVsc2UgJ3JlZmxvZy50eHQnCisgICAgcmV0dXJuIG53YXJtdXAsIG50cmFja2VkLCBmbmFtZQorCitkZWYgcmVzb3VyY2VzX2xpc3Qoc3RyaW5nKToKKyAgICB1ID0gW3gubG93ZXIoKSBmb3IgeCBpbiBzdHJpbmcuc3BsaXQoJywnKV0KKyAgICBmb3IgciBpbiB1OgorICAgICAgICBpZiByID09ICdhbGwnIG9yIHIgPT0gJ25vbmUnOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgaWYgclswXSA9PSAnLSc6CisgICAgICAgICAgICByID0gclsxOl0KKyAgICAgICAgaWYgciBub3QgaW4gUkVTT1VSQ0VfTkFNRVM6CisgICAgICAgICAgICByYWlzZSBhcmdwYXJzZS5Bcmd1bWVudFR5cGVFcnJvcignaW52YWxpZCByZXNvdXJjZTogJyArIHIpCisgICAgcmV0dXJuIHUKKworZGVmIF9wYXJzZV9hcmdzKGFyZ3MsICoqa3dhcmdzKToKKyAgICAjIERlZmF1bHRzCisgICAgbnMgPSBhcmdwYXJzZS5OYW1lc3BhY2UodGVzdGRpcj1Ob25lLCB2ZXJib3NlPTAsIHF1aWV0PUZhbHNlLAogICAgICAgICAgZXhjbHVkZT1GYWxzZSwgc2luZ2xlPUZhbHNlLCByYW5kb21pemU9RmFsc2UsIGZyb21maWxlPU5vbmUsCiAgICAgICAgICBmaW5kbGVha3M9RmFsc2UsIHVzZV9yZXNvdXJjZXM9Tm9uZSwgdHJhY2U9RmFsc2UsIGNvdmVyZGlyPSdjb3ZlcmFnZScsCiAgICAgICAgICBydW5sZWFrcz1GYWxzZSwgaHVudHJsZWFrcz1GYWxzZSwgdmVyYm9zZTI9RmFsc2UsIHByaW50X3Nsb3c9RmFsc2UsCiAgICAgICAgICByYW5kb21fc2VlZD1Ob25lLCB1c2VfbXA9Tm9uZSwgdmVyYm9zZTM9RmFsc2UsIGZvcmV2ZXI9RmFsc2UsCi0gICAgICAgICBoZWFkZXI9RmFsc2UsIGZhaWxmYXN0PUZhbHNlLCBtYXRjaF90ZXN0cz1Ob25lKToKKyAgICAgICAgIGhlYWRlcj1GYWxzZSwgZmFpbGZhc3Q9RmFsc2UsIG1hdGNoX3Rlc3RzPU5vbmUpCisgICAgZm9yIGssIHYgaW4ga3dhcmdzLml0ZW1zKCk6CisgICAgICAgIGlmIG5vdCBoYXNhdHRyKG5zLCBrKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignJXIgaXMgYW4gaW52YWxpZCBrZXl3b3JkIGFyZ3VtZW50ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZm9yIHRoaXMgZnVuY3Rpb24nICUgaykKKyAgICAgICAgc2V0YXR0cihucywgaywgdikKKyAgICBpZiBucy51c2VfcmVzb3VyY2VzIGlzIE5vbmU6CisgICAgICAgIG5zLnVzZV9yZXNvdXJjZXMgPSBbXQorCisgICAgcGFyc2VyID0gX2NyZWF0ZV9wYXJzZXIoKQorICAgIHBhcnNlci5wYXJzZV9hcmdzKGFyZ3M9YXJncywgbmFtZXNwYWNlPW5zKQorCisgICAgaWYgbnMuc2luZ2xlIGFuZCBucy5mcm9tZmlsZToKKyAgICAgICAgcGFyc2VyLmVycm9yKCItcyBhbmQgLWYgZG9uJ3QgZ28gdG9nZXRoZXIhIikKKyAgICBpZiBucy51c2VfbXAgYW5kIG5zLnRyYWNlOgorICAgICAgICBwYXJzZXIuZXJyb3IoIi1UIGFuZCAtaiBkb24ndCBnbyB0b2dldGhlciEiKQorICAgIGlmIG5zLnVzZV9tcCBhbmQgbnMuZmluZGxlYWtzOgorICAgICAgICBwYXJzZXIuZXJyb3IoIi1sIGFuZCAtaiBkb24ndCBnbyB0b2dldGhlciEiKQorICAgIGlmIG5zLnVzZV9tcCBhbmQgbnMubWVtbGltaXQ6CisgICAgICAgIHBhcnNlci5lcnJvcigiLU0gYW5kIC1qIGRvbid0IGdvIHRvZ2V0aGVyISIpCisgICAgaWYgbnMuZmFpbGZhc3QgYW5kIG5vdCAobnMudmVyYm9zZSBvciBucy52ZXJib3NlMyk6CisgICAgICAgIHBhcnNlci5lcnJvcigiLUcvLS1mYWlsZmFzdCBuZWVkcyBlaXRoZXIgLXYgb3IgLVciKQorCisgICAgaWYgbnMucXVpZXQ6CisgICAgICAgIG5zLnZlcmJvc2UgPSAwCisgICAgaWYgbnMudGltZW91dCBpcyBub3QgTm9uZToKKyAgICAgICAgaWYgaGFzYXR0cihmYXVsdGhhbmRsZXIsICdkdW1wX3RyYWNlYmFja19sYXRlcicpOgorICAgICAgICAgICAgaWYgbnMudGltZW91dCA8PSAwOgorICAgICAgICAgICAgICAgIG5zLnRpbWVvdXQgPSBOb25lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmludCgiV2FybmluZzogVGhlIHRpbWVvdXQgb3B0aW9uIHJlcXVpcmVzICIKKyAgICAgICAgICAgICAgICAgICJmYXVsdGhhbmRsZXIuZHVtcF90cmFjZWJhY2tfbGF0ZXIiKQorICAgICAgICAgICAgbnMudGltZW91dCA9IE5vbmUKKyAgICBpZiBucy51c2VfbXAgaXMgbm90IE5vbmU6CisgICAgICAgIGlmIG5zLnVzZV9tcCA8PSAwOgorICAgICAgICAgICAgIyBVc2UgYWxsIGNvcmVzICsgZXh0cmFzIGZvciB0ZXN0cyB0aGF0IGxpa2UgdG8gc2xlZXAKKyAgICAgICAgICAgIG5zLnVzZV9tcCA9IDIgKyAob3MuY3B1X2NvdW50KCkgb3IgMSkKKyAgICAgICAgaWYgbnMudXNlX21wID09IDE6CisgICAgICAgICAgICBucy51c2VfbXAgPSBOb25lCisgICAgaWYgbnMudXNlOgorICAgICAgICBmb3IgYSBpbiBucy51c2U6CisgICAgICAgICAgICBmb3IgciBpbiBhOgorICAgICAgICAgICAgICAgIGlmIHIgPT0gJ2FsbCc6CisgICAgICAgICAgICAgICAgICAgIG5zLnVzZV9yZXNvdXJjZXNbOl0gPSBSRVNPVVJDRV9OQU1FUworICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGlmIHIgPT0gJ25vbmUnOgorICAgICAgICAgICAgICAgICAgICBkZWwgbnMudXNlX3Jlc291cmNlc1s6XQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIHJlbW92ZSA9IEZhbHNlCisgICAgICAgICAgICAgICAgaWYgclswXSA9PSAnLSc6CisgICAgICAgICAgICAgICAgICAgIHJlbW92ZSA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgciA9IHJbMTpdCisgICAgICAgICAgICAgICAgaWYgcmVtb3ZlOgorICAgICAgICAgICAgICAgICAgICBpZiByIGluIG5zLnVzZV9yZXNvdXJjZXM6CisgICAgICAgICAgICAgICAgICAgICAgICBucy51c2VfcmVzb3VyY2VzLnJlbW92ZShyKQorICAgICAgICAgICAgICAgIGVsaWYgciBub3QgaW4gbnMudXNlX3Jlc291cmNlczoKKyAgICAgICAgICAgICAgICAgICAgbnMudXNlX3Jlc291cmNlcy5hcHBlbmQocikKKyAgICBpZiBucy5yYW5kb21fc2VlZCBpcyBub3QgTm9uZToKKyAgICAgICAgbnMucmFuZG9taXplID0gVHJ1ZQorCisgICAgcmV0dXJuIG5zCisKKworZGVmIHJ1bl90ZXN0X2luX3N1YnByb2Nlc3ModGVzdG5hbWUsIG5zKToKKyAgICAiIiJSdW4gdGhlIGdpdmVuIHRlc3QgaW4gYSBzdWJwcm9jZXNzIHdpdGggLS1zbGF2ZWFyZ3MuCisKKyAgICBucyBpcyB0aGUgb3B0aW9uIE5hbWVzcGFjZSBwYXJzZWQgZnJvbSBjb21tYW5kLWxpbmUgYXJndW1lbnRzLiByZWdydGVzdAorICAgIGlzIGludm9rZWQgaW4gYSBzdWJwcm9jZXNzIHdpdGggdGhlIC0tc2xhdmVhcmdzIGFyZ3VtZW50OyB3aGVuIHRoZQorICAgIHN1YnByb2Nlc3MgZXhpdHMsIGl0cyByZXR1cm4gY29kZSwgc3Rkb3V0IGFuZCBzdGRlcnIgYXJlIHJldHVybmVkIGFzIGEKKyAgICAzLXR1cGxlLgorICAgICIiIgorICAgIGZyb20gc3VicHJvY2VzcyBpbXBvcnQgUG9wZW4sIFBJUEUKKyAgICBiYXNlX2NtZCA9IChbc3lzLmV4ZWN1dGFibGVdICsgc3VwcG9ydC5hcmdzX2Zyb21faW50ZXJwcmV0ZXJfZmxhZ3MoKSArCisgICAgICAgICAgICAgICAgWyctWCcsICdmYXVsdGhhbmRsZXInLCAnLW0nLCAndGVzdC5yZWdydGVzdCddKQorCisgICAgc2xhdmVhcmdzID0gKAorICAgICAgICAgICAgKHRlc3RuYW1lLCBucy52ZXJib3NlLCBucy5xdWlldCksCisgICAgICAgICAgICBkaWN0KGh1bnRybGVha3M9bnMuaHVudHJsZWFrcywKKyAgICAgICAgICAgICAgICAgdXNlX3Jlc291cmNlcz1ucy51c2VfcmVzb3VyY2VzLAorICAgICAgICAgICAgICAgICBvdXRwdXRfb25fZmFpbHVyZT1ucy52ZXJib3NlMywKKyAgICAgICAgICAgICAgICAgdGltZW91dD1ucy50aW1lb3V0LCBmYWlsZmFzdD1ucy5mYWlsZmFzdCwKKyAgICAgICAgICAgICAgICAgbWF0Y2hfdGVzdHM9bnMubWF0Y2hfdGVzdHMpKQorICAgICMgUnVubmluZyB0aGUgY2hpbGQgZnJvbSB0aGUgc2FtZSB3b3JraW5nIGRpcmVjdG9yeSBhcyByZWdydGVzdCdzIG9yaWdpbmFsCisgICAgIyBpbnZvY2F0aW9uIGVuc3VyZXMgdGhhdCBURU1QRElSIGZvciB0aGUgY2hpbGQgaXMgdGhlIHNhbWUgd2hlbgorICAgICMgc3lzY29uZmlnLmlzX3B5dGhvbl9idWlsZCgpIGlzIHRydWUuIFNlZSBpc3N1ZSAxNTMwMC4KKyAgICBwb3BlbiA9IFBvcGVuKGJhc2VfY21kICsgWyctLXNsYXZlYXJncycsIGpzb24uZHVtcHMoc2xhdmVhcmdzKV0sCisgICAgICAgICAgICAgICAgICBzdGRvdXQ9UElQRSwgc3RkZXJyPVBJUEUsCisgICAgICAgICAgICAgICAgICB1bml2ZXJzYWxfbmV3bGluZXM9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgIGNsb3NlX2Zkcz0ob3MubmFtZSAhPSAnbnQnKSwKKyAgICAgICAgICAgICAgICAgIGN3ZD1zdXBwb3J0LlNBVkVEQ1dEKQorICAgIHN0ZG91dCwgc3RkZXJyID0gcG9wZW4uY29tbXVuaWNhdGUoKQorICAgIHJldGNvZGUgPSBwb3Blbi53YWl0KCkKKyAgICByZXR1cm4gcmV0Y29kZSwgc3Rkb3V0LCBzdGRlcnIKKworCitkZWYgbWFpbih0ZXN0cz1Ob25lLCAqKmt3YXJncyk6CiAgICAgIiIiRXhlY3V0ZSBhIHRlc3Qgc3VpdGUuCiAKICAgICBUaGlzIGFsc28gcGFyc2VzIGNvbW1hbmQtbGluZSBvcHRpb25zIGFuZCBtb2RpZmllcyBpdHMgYmVoYXZpb3IKQEAgLTI4Miw3ICs0NzksNiBAQAogICAgIGRpcmVjdGx5IHRvIHNldCB0aGUgdmFsdWVzIHRoYXQgd291bGQgbm9ybWFsbHkgYmUgc2V0IGJ5IGZsYWdzCiAgICAgb24gdGhlIGNvbW1hbmQgbGluZS4KICAgICAiIiIKLQogICAgICMgRGlzcGxheSB0aGUgUHl0aG9uIHRyYWNlYmFjayBvbiBmYXRhbCBlcnJvcnMgKGUuZy4gc2VnZmF1bHQpCiAgICAgZmF1bHRoYW5kbGVyLmVuYWJsZShhbGxfdGhyZWFkcz1UcnVlKQogCkBAIC0yOTgsMTg3ICs0OTQsNTEgQEAKICAgICByZXBsYWNlX3N0ZG91dCgpCiAKICAgICBzdXBwb3J0LnJlY29yZF9vcmlnaW5hbF9zdGRvdXQoc3lzLnN0ZG91dCkKLSAgICB0cnk6Ci0gICAgICAgIG9wdHMsIGFyZ3MgPSBnZXRvcHQuZ2V0b3B0KHN5cy5hcmd2WzE6XSwgJ2h2cXhzb1M6cmY6bHU6dDpURDpOTFI6RmR3V006bmo6R206JywKLSAgICAgICAgICAgIFsnaGVscCcsICd2ZXJib3NlJywgJ3ZlcmJvc2UyJywgJ3ZlcmJvc2UzJywgJ3F1aWV0JywKLSAgICAgICAgICAgICAnZXhjbHVkZScsICdzaW5nbGUnLCAnc2xvdycsICdyYW5kb21pemUnLCAnZnJvbWZpbGU9JywgJ2ZpbmRsZWFrcycsCi0gICAgICAgICAgICAgJ3VzZT0nLCAndGhyZXNob2xkPScsICdjb3ZlcmRpcj0nLCAnbm9jb3ZlcmRpcicsCi0gICAgICAgICAgICAgJ3J1bmxlYWtzJywgJ2h1bnRybGVha3M9JywgJ21lbWxpbWl0PScsICdyYW5kc2VlZD0nLAotICAgICAgICAgICAgICdtdWx0aXByb2Nlc3M9JywgJ2NvdmVyYWdlJywgJ3NsYXZlYXJncz0nLCAnZm9yZXZlcicsICdkZWJ1ZycsCi0gICAgICAgICAgICAgJ3N0YXJ0PScsICdub3dpbmRvd3MnLCAnaGVhZGVyJywgJ3Rlc3RkaXI9JywgJ3RpbWVvdXQ9JywgJ3dhaXQnLAotICAgICAgICAgICAgICdmYWlsZmFzdCcsICdtYXRjaD0nXSkKLSAgICBleGNlcHQgZ2V0b3B0LmVycm9yIGFzIG1zZzoKLSAgICAgICAgdXNhZ2UobXNnKQogCi0gICAgIyBEZWZhdWx0cwotICAgIGlmIHJhbmRvbV9zZWVkIGlzIE5vbmU6Ci0gICAgICAgIHJhbmRvbV9zZWVkID0gcmFuZG9tLnJhbmRyYW5nZSgxMDAwMDAwMCkKLSAgICBpZiB1c2VfcmVzb3VyY2VzIGlzIE5vbmU6Ci0gICAgICAgIHVzZV9yZXNvdXJjZXMgPSBbXQotICAgIGRlYnVnID0gRmFsc2UKLSAgICBzdGFydCA9IE5vbmUKLSAgICB0aW1lb3V0ID0gTm9uZQotICAgIGZvciBvLCBhIGluIG9wdHM6Ci0gICAgICAgIGlmIG8gaW4gKCctaCcsICctLWhlbHAnKToKLSAgICAgICAgICAgIHByaW50KF9fZG9jX18pCi0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgZWxpZiBvIGluICgnLXYnLCAnLS12ZXJib3NlJyk6Ci0gICAgICAgICAgICB2ZXJib3NlICs9IDEKLSAgICAgICAgZWxpZiBvIGluICgnLXcnLCAnLS12ZXJib3NlMicpOgotICAgICAgICAgICAgdmVyYm9zZTIgPSBUcnVlCi0gICAgICAgIGVsaWYgbyBpbiAoJy1kJywgJy0tZGVidWcnKToKLSAgICAgICAgICAgIGRlYnVnID0gVHJ1ZQotICAgICAgICBlbGlmIG8gaW4gKCctVycsICctLXZlcmJvc2UzJyk6Ci0gICAgICAgICAgICB2ZXJib3NlMyA9IFRydWUKLSAgICAgICAgZWxpZiBvIGluICgnLUcnLCAnLS1mYWlsZmFzdCcpOgotICAgICAgICAgICAgZmFpbGZhc3QgPSBUcnVlCi0gICAgICAgIGVsaWYgbyBpbiAoJy1xJywgJy0tcXVpZXQnKToKLSAgICAgICAgICAgIHF1aWV0ID0gVHJ1ZTsKLSAgICAgICAgICAgIHZlcmJvc2UgPSAwCi0gICAgICAgIGVsaWYgbyBpbiAoJy14JywgJy0tZXhjbHVkZScpOgotICAgICAgICAgICAgZXhjbHVkZSA9IFRydWUKLSAgICAgICAgZWxpZiBvIGluICgnLVMnLCAnLS1zdGFydCcpOgotICAgICAgICAgICAgc3RhcnQgPSBhCi0gICAgICAgIGVsaWYgbyBpbiAoJy1zJywgJy0tc2luZ2xlJyk6Ci0gICAgICAgICAgICBzaW5nbGUgPSBUcnVlCi0gICAgICAgIGVsaWYgbyBpbiAoJy1vJywgJy0tc2xvdycpOgotICAgICAgICAgICAgcHJpbnRfc2xvdyA9IFRydWUKLSAgICAgICAgZWxpZiBvIGluICgnLXInLCAnLS1yYW5kb21pemUnKToKLSAgICAgICAgICAgIHJhbmRvbWl6ZSA9IFRydWUKLSAgICAgICAgZWxpZiBvID09ICctLXJhbmRzZWVkJzoKLSAgICAgICAgICAgIHJhbmRvbWl6ZSA9IFRydWUKLSAgICAgICAgICAgIHJhbmRvbV9zZWVkID0gaW50KGEpCi0gICAgICAgIGVsaWYgbyBpbiAoJy1mJywgJy0tZnJvbWZpbGUnKToKLSAgICAgICAgICAgIGZyb21maWxlID0gYQotICAgICAgICBlbGlmIG8gaW4gKCctbScsICctLW1hdGNoJyk6Ci0gICAgICAgICAgICBtYXRjaF90ZXN0cyA9IGEKLSAgICAgICAgZWxpZiBvIGluICgnLWwnLCAnLS1maW5kbGVha3MnKToKLSAgICAgICAgICAgIGZpbmRsZWFrcyA9IFRydWUKLSAgICAgICAgZWxpZiBvIGluICgnLUwnLCAnLS1ydW5sZWFrcycpOgotICAgICAgICAgICAgcnVubGVha3MgPSBUcnVlCi0gICAgICAgIGVsaWYgbyBpbiAoJy10JywgJy0tdGhyZXNob2xkJyk6Ci0gICAgICAgICAgICBpbXBvcnQgZ2MKLSAgICAgICAgICAgIGdjLnNldF90aHJlc2hvbGQoaW50KGEpKQotICAgICAgICBlbGlmIG8gaW4gKCctVCcsICctLWNvdmVyYWdlJyk6Ci0gICAgICAgICAgICB0cmFjZSA9IFRydWUKLSAgICAgICAgZWxpZiBvIGluICgnLUQnLCAnLS1jb3ZlcmRpcicpOgotICAgICAgICAgICAgIyBDV0QgaXMgcmVwbGFjZWQgd2l0aCBhIHRlbXBvcmFyeSBkaXIgYmVmb3JlIGNhbGxpbmcgbWFpbigpLCBzbyB3ZQotICAgICAgICAgICAgIyBuZWVkICBqb2luIGl0IHdpdGggdGhlIHNhdmVkIENXRCBzbyBpdCBnb2VzIHdoZXJlIHRoZSB1c2VyIGV4cGVjdHMuCi0gICAgICAgICAgICBjb3ZlcmRpciA9IG9zLnBhdGguam9pbihzdXBwb3J0LlNBVkVEQ1dELCBhKQotICAgICAgICBlbGlmIG8gaW4gKCctTicsICctLW5vY292ZXJkaXInKToKLSAgICAgICAgICAgIGNvdmVyZGlyID0gTm9uZQotICAgICAgICBlbGlmIG8gaW4gKCctUicsICctLWh1bnRybGVha3MnKToKLSAgICAgICAgICAgIGh1bnRybGVha3MgPSBhLnNwbGl0KCc6JykKLSAgICAgICAgICAgIGlmIGxlbihodW50cmxlYWtzKSBub3QgaW4gKDIsIDMpOgotICAgICAgICAgICAgICAgIHByaW50KGEsIGh1bnRybGVha3MpCi0gICAgICAgICAgICAgICAgdXNhZ2UoJy1SIHRha2VzIDIgb3IgMyBjb2xvbi1zZXBhcmF0ZWQgYXJndW1lbnRzJykKLSAgICAgICAgICAgIGlmIG5vdCBodW50cmxlYWtzWzBdOgotICAgICAgICAgICAgICAgIGh1bnRybGVha3NbMF0gPSA1Ci0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGh1bnRybGVha3NbMF0gPSBpbnQoaHVudHJsZWFrc1swXSkKLSAgICAgICAgICAgIGlmIG5vdCBodW50cmxlYWtzWzFdOgotICAgICAgICAgICAgICAgIGh1bnRybGVha3NbMV0gPSA0Ci0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGh1bnRybGVha3NbMV0gPSBpbnQoaHVudHJsZWFrc1sxXSkKLSAgICAgICAgICAgIGlmIGxlbihodW50cmxlYWtzKSA9PSAyIG9yIG5vdCBodW50cmxlYWtzWzJdOgotICAgICAgICAgICAgICAgIGh1bnRybGVha3NbMjpdID0gWyJyZWZsb2cudHh0Il0KLSAgICAgICAgICAgICMgQXZvaWQgZmFsc2UgcG9zaXRpdmVzIGR1ZSB0byB2YXJpb3VzIGNhY2hlcwotICAgICAgICAgICAgIyBmaWxsaW5nIHNsb3dseSB3aXRoIHJhbmRvbSBkYXRhOgotICAgICAgICAgICAgd2FybV9jYWNoZXMoKQotICAgICAgICBlbGlmIG8gaW4gKCctTScsICctLW1lbWxpbWl0Jyk6Ci0gICAgICAgICAgICBzdXBwb3J0LnNldF9tZW1saW1pdChhKQotICAgICAgICBlbGlmIG8gaW4gKCctdScsICctLXVzZScpOgotICAgICAgICAgICAgdSA9IFt4Lmxvd2VyKCkgZm9yIHggaW4gYS5zcGxpdCgnLCcpXQotICAgICAgICAgICAgZm9yIHIgaW4gdToKLSAgICAgICAgICAgICAgICBpZiByID09ICdhbGwnOgotICAgICAgICAgICAgICAgICAgICB1c2VfcmVzb3VyY2VzWzpdID0gUkVTT1VSQ0VfTkFNRVMKLSAgICAgICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgICAgICBpZiByID09ICdub25lJzoKLSAgICAgICAgICAgICAgICAgICAgZGVsIHVzZV9yZXNvdXJjZXNbOl0KLSAgICAgICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgICAgICByZW1vdmUgPSBGYWxzZQotICAgICAgICAgICAgICAgIGlmIHJbMF0gPT0gJy0nOgotICAgICAgICAgICAgICAgICAgICByZW1vdmUgPSBUcnVlCi0gICAgICAgICAgICAgICAgICAgIHIgPSByWzE6XQotICAgICAgICAgICAgICAgIGlmIHIgbm90IGluIFJFU09VUkNFX05BTUVTOgotICAgICAgICAgICAgICAgICAgICB1c2FnZSgnSW52YWxpZCAtdS8tLXVzZSBvcHRpb246ICcgKyBhKQotICAgICAgICAgICAgICAgIGlmIHJlbW92ZToKLSAgICAgICAgICAgICAgICAgICAgaWYgciBpbiB1c2VfcmVzb3VyY2VzOgotICAgICAgICAgICAgICAgICAgICAgICAgdXNlX3Jlc291cmNlcy5yZW1vdmUocikKLSAgICAgICAgICAgICAgICBlbGlmIHIgbm90IGluIHVzZV9yZXNvdXJjZXM6Ci0gICAgICAgICAgICAgICAgICAgIHVzZV9yZXNvdXJjZXMuYXBwZW5kKHIpCi0gICAgICAgIGVsaWYgbyBpbiAoJy1uJywgJy0tbm93aW5kb3dzJyk6Ci0gICAgICAgICAgICBpbXBvcnQgbXN2Y3J0Ci0gICAgICAgICAgICBtc3ZjcnQuU2V0RXJyb3JNb2RlKG1zdmNydC5TRU1fRkFJTENSSVRJQ0FMRVJST1JTfAotICAgICAgICAgICAgICAgICAgICBtc3ZjcnQuU0VNX05PQUxJR05NRU5URkFVTFRFWENFUFR8Ci0gICAgICAgICAgICAgICAgICAgIG1zdmNydC5TRU1fTk9HUEZBVUxURVJST1JCT1h8Ci0gICAgICAgICAgICAgICAgICAgIG1zdmNydC5TRU1fTk9PUEVORklMRUVSUk9SQk9YKQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIG1zdmNydC5DcnRTZXRSZXBvcnRNb2RlCi0gICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICAgICAgIyByZWxlYXNlIGJ1aWxkCi0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBmb3IgbSBpbiBbbXN2Y3J0LkNSVF9XQVJOLCBtc3ZjcnQuQ1JUX0VSUk9SLCBtc3ZjcnQuQ1JUX0FTU0VSVF06Ci0gICAgICAgICAgICAgICAgICAgIG1zdmNydC5DcnRTZXRSZXBvcnRNb2RlKG0sIG1zdmNydC5DUlREQkdfTU9ERV9GSUxFKQotICAgICAgICAgICAgICAgICAgICBtc3ZjcnQuQ3J0U2V0UmVwb3J0RmlsZShtLCBtc3ZjcnQuQ1JUREJHX0ZJTEVfU1RERVJSKQotICAgICAgICBlbGlmIG8gaW4gKCctRicsICctLWZvcmV2ZXInKToKLSAgICAgICAgICAgIGZvcmV2ZXIgPSBUcnVlCi0gICAgICAgIGVsaWYgbyBpbiAoJy1qJywgJy0tbXVsdGlwcm9jZXNzJyk6Ci0gICAgICAgICAgICB1c2VfbXAgPSBpbnQoYSkKLSAgICAgICAgICAgIGlmIHVzZV9tcCA8PSAwOgotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgaW1wb3J0IG11bHRpcHJvY2Vzc2luZwotICAgICAgICAgICAgICAgICAgICAjIFVzZSBhbGwgY29yZXMgKyBleHRyYXMgZm9yIHRlc3RzIHRoYXQgbGlrZSB0byBzbGVlcAotICAgICAgICAgICAgICAgICAgICB1c2VfbXAgPSAyICsgbXVsdGlwcm9jZXNzaW5nLmNwdV9jb3VudCgpCi0gICAgICAgICAgICAgICAgZXhjZXB0IChJbXBvcnRFcnJvciwgTm90SW1wbGVtZW50ZWRFcnJvcik6Ci0gICAgICAgICAgICAgICAgICAgIHVzZV9tcCA9IDMKLSAgICAgICAgICAgIGlmIHVzZV9tcCA9PSAxOgotICAgICAgICAgICAgICAgIHVzZV9tcCA9IE5vbmUKLSAgICAgICAgZWxpZiBvID09ICctLWhlYWRlcic6Ci0gICAgICAgICAgICBoZWFkZXIgPSBUcnVlCi0gICAgICAgIGVsaWYgbyA9PSAnLS1zbGF2ZWFyZ3MnOgotICAgICAgICAgICAgYXJncywga3dhcmdzID0ganNvbi5sb2FkcyhhKQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJ1bnRlc3QoKmFyZ3MsICoqa3dhcmdzKQotICAgICAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgotICAgICAgICAgICAgICAgIHJlc3VsdCA9IElOVEVSUlVQVEVELCAnJwotICAgICAgICAgICAgZXhjZXB0IEJhc2VFeGNlcHRpb24gYXMgZToKLSAgICAgICAgICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKCkKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBDSElMRF9FUlJPUiwgc3RyKGUpCi0gICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKLSAgICAgICAgICAgIHByaW50KCkgICAjIEZvcmNlIGEgbmV3bGluZSAoanVzdCBpbiBjYXNlKQotICAgICAgICAgICAgcHJpbnQoanNvbi5kdW1wcyhyZXN1bHQpKQotICAgICAgICAgICAgc3lzLmV4aXQoMCkKLSAgICAgICAgZWxpZiBvID09ICctLXRlc3RkaXInOgotICAgICAgICAgICAgIyBDV0QgaXMgcmVwbGFjZWQgd2l0aCBhIHRlbXBvcmFyeSBkaXIgYmVmb3JlIGNhbGxpbmcgbWFpbigpLCBzbyB3ZQotICAgICAgICAgICAgIyBqb2luIGl0IHdpdGggdGhlIHNhdmVkIENXRCBzbyBpdCBlbmRzIHVwIHdoZXJlIHRoZSB1c2VyIGV4cGVjdHMuCi0gICAgICAgICAgICB0ZXN0ZGlyID0gb3MucGF0aC5qb2luKHN1cHBvcnQuU0FWRURDV0QsIGEpCi0gICAgICAgIGVsaWYgbyA9PSAnLS10aW1lb3V0JzoKLSAgICAgICAgICAgIGlmIGhhc2F0dHIoZmF1bHRoYW5kbGVyLCAnZHVtcF90cmFjZWJhY2tfbGF0ZXInKToKLSAgICAgICAgICAgICAgICB0aW1lb3V0ID0gZmxvYXQoYSkKLSAgICAgICAgICAgICAgICBpZiB0aW1lb3V0IDw9IDA6Ci0gICAgICAgICAgICAgICAgICAgIHRpbWVvdXQgPSBOb25lCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHByaW50KCJXYXJuaW5nOiBUaGUgdGltZW91dCBvcHRpb24gcmVxdWlyZXMgIgotICAgICAgICAgICAgICAgICAgICAgICJmYXVsdGhhbmRsZXIuZHVtcF90cmFjZWJhY2tfbGF0ZXIiKQotICAgICAgICAgICAgICAgIHRpbWVvdXQgPSBOb25lCi0gICAgICAgIGVsaWYgbyA9PSAnLS13YWl0JzoKLSAgICAgICAgICAgIGlucHV0KCJQcmVzcyBhbnkga2V5IHRvIGNvbnRpbnVlLi4uIikKKyAgICBucyA9IF9wYXJzZV9hcmdzKHN5cy5hcmd2WzE6XSwgKiprd2FyZ3MpCisKKyAgICBpZiBucy5odW50cmxlYWtzOgorICAgICAgICAjIEF2b2lkIGZhbHNlIHBvc2l0aXZlcyBkdWUgdG8gdmFyaW91cyBjYWNoZXMKKyAgICAgICAgIyBmaWxsaW5nIHNsb3dseSB3aXRoIHJhbmRvbSBkYXRhOgorICAgICAgICB3YXJtX2NhY2hlcygpCisgICAgaWYgbnMubWVtbGltaXQgaXMgbm90IE5vbmU6CisgICAgICAgIHN1cHBvcnQuc2V0X21lbWxpbWl0KG5zLm1lbWxpbWl0KQorICAgIGlmIG5zLnRocmVzaG9sZCBpcyBub3QgTm9uZToKKyAgICAgICAgaW1wb3J0IGdjCisgICAgICAgIGdjLnNldF90aHJlc2hvbGQobnMudGhyZXNob2xkKQorICAgIGlmIG5zLm5vd2luZG93czoKKyAgICAgICAgaW1wb3J0IG1zdmNydAorICAgICAgICBtc3ZjcnQuU2V0RXJyb3JNb2RlKG1zdmNydC5TRU1fRkFJTENSSVRJQ0FMRVJST1JTfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zdmNydC5TRU1fTk9BTElHTk1FTlRGQVVMVEVYQ0VQVHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc3ZjcnQuU0VNX05PR1BGQVVMVEVSUk9SQk9YfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zdmNydC5TRU1fTk9PUEVORklMRUVSUk9SQk9YKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBtc3ZjcnQuQ3J0U2V0UmVwb3J0TW9kZQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAjIHJlbGVhc2UgYnVpbGQKKyAgICAgICAgICAgIHBhc3MKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHByaW50KCgiTm8gaGFuZGxlciBmb3Igb3B0aW9uIHt9LiAgUGxlYXNlIHJlcG9ydCB0aGlzIGFzIGEgYnVnICIKLSAgICAgICAgICAgICAgICAgICAiYXQgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy4iKS5mb3JtYXQobyksIGZpbGU9c3lzLnN0ZGVycikKLSAgICAgICAgICAgIHN5cy5leGl0KDEpCi0gICAgaWYgc2luZ2xlIGFuZCBmcm9tZmlsZToKLSAgICAgICAgdXNhZ2UoIi1zIGFuZCAtZiBkb24ndCBnbyB0b2dldGhlciEiKQotICAgIGlmIHVzZV9tcCBhbmQgdHJhY2U6Ci0gICAgICAgIHVzYWdlKCItVCBhbmQgLWogZG9uJ3QgZ28gdG9nZXRoZXIhIikKLSAgICBpZiB1c2VfbXAgYW5kIGZpbmRsZWFrczoKLSAgICAgICAgdXNhZ2UoIi1sIGFuZCAtaiBkb24ndCBnbyB0b2dldGhlciEiKQotICAgIGlmIHVzZV9tcCBhbmQgc3VwcG9ydC5tYXhfbWVtdXNlOgotICAgICAgICB1c2FnZSgiLU0gYW5kIC1qIGRvbid0IGdvIHRvZ2V0aGVyISIpCi0gICAgaWYgZmFpbGZhc3QgYW5kIG5vdCAodmVyYm9zZSBvciB2ZXJib3NlMyk6Ci0gICAgICAgIHVzYWdlKCItRy8tLWZhaWxmYXN0IG5lZWRzIGVpdGhlciAtdiBvciAtVyIpCisgICAgICAgICAgICBmb3IgbSBpbiBbbXN2Y3J0LkNSVF9XQVJOLCBtc3ZjcnQuQ1JUX0VSUk9SLCBtc3ZjcnQuQ1JUX0FTU0VSVF06CisgICAgICAgICAgICAgICAgbXN2Y3J0LkNydFNldFJlcG9ydE1vZGUobSwgbXN2Y3J0LkNSVERCR19NT0RFX0ZJTEUpCisgICAgICAgICAgICAgICAgbXN2Y3J0LkNydFNldFJlcG9ydEZpbGUobSwgbXN2Y3J0LkNSVERCR19GSUxFX1NUREVSUikKKyAgICBpZiBucy53YWl0OgorICAgICAgICBpbnB1dCgiUHJlc3MgYW55IGtleSB0byBjb250aW51ZS4uLiIpCisKKyAgICBpZiBucy5zbGF2ZWFyZ3MgaXMgbm90IE5vbmU6CisgICAgICAgIGFyZ3MsIGt3YXJncyA9IGpzb24ubG9hZHMobnMuc2xhdmVhcmdzKQorICAgICAgICBpZiBrd2FyZ3MuZ2V0KCdodW50cmxlYWtzJyk6CisgICAgICAgICAgICB1bml0dGVzdC5CYXNlVGVzdFN1aXRlLl9jbGVhbnVwID0gRmFsc2UKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmVzdWx0ID0gcnVudGVzdCgqYXJncywgKiprd2FyZ3MpCisgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKKyAgICAgICAgICAgIHJlc3VsdCA9IElOVEVSUlVQVEVELCAnJworICAgICAgICBleGNlcHQgQmFzZUV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4YygpCisgICAgICAgICAgICByZXN1bHQgPSBDSElMRF9FUlJPUiwgc3RyKGUpCisgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQorICAgICAgICBwcmludCgpICAgIyBGb3JjZSBhIG5ld2xpbmUgKGp1c3QgaW4gY2FzZSkKKyAgICAgICAgcHJpbnQoanNvbi5kdW1wcyhyZXN1bHQpKQorICAgICAgICBzeXMuZXhpdCgwKQogCiAgICAgZ29vZCA9IFtdCiAgICAgYmFkID0gW10KQEAgLTQ4NywxMiArNTQ3LDEyIEBACiAgICAgZW52aXJvbm1lbnRfY2hhbmdlZCA9IFtdCiAgICAgaW50ZXJydXB0ZWQgPSBGYWxzZQogCi0gICAgaWYgZmluZGxlYWtzOgorICAgIGlmIG5zLmZpbmRsZWFrczoKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgaW1wb3J0IGdjCiAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICAgICAgICAgIHByaW50KCdObyBHQyBhdmFpbGFibGUsIGRpc2FibGluZyBmaW5kbGVha3MuJykKLSAgICAgICAgICAgIGZpbmRsZWFrcyA9IEZhbHNlCisgICAgICAgICAgICBucy5maW5kbGVha3MgPSBGYWxzZQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgIyBVbmNvbW1lbnQgdGhlIGxpbmUgYmVsb3cgdG8gcmVwb3J0IGdhcmJhZ2UgdGhhdCBpcyBub3QKICAgICAgICAgICAgICMgZnJlZWFibGUgYnkgcmVmZXJlbmNlIGNvdW50aW5nIGFsb25lLiAgQnkgZGVmYXVsdCBvbmx5CkBAIC01MDAsODIgKzU2MCw4NyBAQAogICAgICAgICAgICAgI2djLnNldF9kZWJ1ZyhnYy5ERUJVR19TQVZFQUxMKQogICAgICAgICAgICAgZm91bmRfZ2FyYmFnZSA9IFtdCiAKLSAgICBpZiBzaW5nbGU6CisgICAgaWYgbnMuaHVudHJsZWFrczoKKyAgICAgICAgdW5pdHRlc3QuQmFzZVRlc3RTdWl0ZS5fY2xlYW51cCA9IEZhbHNlCisKKyAgICBpZiBucy5zaW5nbGU6CiAgICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5qb2luKFRFTVBESVIsICdweW5leHR0ZXN0JykKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgZnAgPSBvcGVuKGZpbGVuYW1lLCAncicpCi0gICAgICAgICAgICBuZXh0X3Rlc3QgPSBmcC5yZWFkKCkuc3RyaXAoKQotICAgICAgICAgICAgdGVzdHMgPSBbbmV4dF90ZXN0XQotICAgICAgICAgICAgZnAuY2xvc2UoKQotICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSwgJ3InKSBhcyBmcDoKKyAgICAgICAgICAgICAgICBuZXh0X3Rlc3QgPSBmcC5yZWFkKCkuc3RyaXAoKQorICAgICAgICAgICAgICAgIHRlc3RzID0gW25leHRfdGVzdF0KKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBwYXNzCiAKLSAgICBpZiBmcm9tZmlsZToKKyAgICBpZiBucy5mcm9tZmlsZToKICAgICAgICAgdGVzdHMgPSBbXQotICAgICAgICBmcCA9IG9wZW4ob3MucGF0aC5qb2luKHN1cHBvcnQuU0FWRURDV0QsIGZyb21maWxlKSkKLSAgICAgICAgY291bnRfcGF0ID0gcmUuY29tcGlsZShyJ1xbXHMqXGQrL1xzKlxkK1xdJykKLSAgICAgICAgZm9yIGxpbmUgaW4gZnA6Ci0gICAgICAgICAgICBsaW5lID0gY291bnRfcGF0LnN1YignJywgbGluZSkKLSAgICAgICAgICAgIGd1dHMgPSBsaW5lLnNwbGl0KCkgIyBhc3N1bWluZyBubyB0ZXN0IGhhcyB3aGl0ZXNwYWNlIGluIGl0cyBuYW1lCi0gICAgICAgICAgICBpZiBndXRzIGFuZCBub3QgZ3V0c1swXS5zdGFydHN3aXRoKCcjJyk6Ci0gICAgICAgICAgICAgICAgdGVzdHMuZXh0ZW5kKGd1dHMpCi0gICAgICAgIGZwLmNsb3NlKCkKKyAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihzdXBwb3J0LlNBVkVEQ1dELCBucy5mcm9tZmlsZSkpIGFzIGZwOgorICAgICAgICAgICAgY291bnRfcGF0ID0gcmUuY29tcGlsZShyJ1xbXHMqXGQrL1xzKlxkK1xdJykKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGZwOgorICAgICAgICAgICAgICAgIGxpbmUgPSBjb3VudF9wYXQuc3ViKCcnLCBsaW5lKQorICAgICAgICAgICAgICAgIGd1dHMgPSBsaW5lLnNwbGl0KCkgIyBhc3N1bWluZyBubyB0ZXN0IGhhcyB3aGl0ZXNwYWNlIGluIGl0cyBuYW1lCisgICAgICAgICAgICAgICAgaWYgZ3V0cyBhbmQgbm90IGd1dHNbMF0uc3RhcnRzd2l0aCgnIycpOgorICAgICAgICAgICAgICAgICAgICB0ZXN0cy5leHRlbmQoZ3V0cykKIAogICAgICMgU3RyaXAgLnB5IGV4dGVuc2lvbnMuCi0gICAgcmVtb3ZlcHkoYXJncykKKyAgICByZW1vdmVweShucy5hcmdzKQogICAgIHJlbW92ZXB5KHRlc3RzKQogCiAgICAgc3RkdGVzdHMgPSBTVERURVNUU1s6XQogICAgIG5vdHRlc3RzID0gTk9UVEVTVFMuY29weSgpCi0gICAgaWYgZXhjbHVkZToKLSAgICAgICAgZm9yIGFyZyBpbiBhcmdzOgorICAgIGlmIG5zLmV4Y2x1ZGU6CisgICAgICAgIGZvciBhcmcgaW4gbnMuYXJnczoKICAgICAgICAgICAgIGlmIGFyZyBpbiBzdGR0ZXN0czoKICAgICAgICAgICAgICAgICBzdGR0ZXN0cy5yZW1vdmUoYXJnKQogICAgICAgICAgICAgbm90dGVzdHMuYWRkKGFyZykKLSAgICAgICAgYXJncyA9IFtdCisgICAgICAgIG5zLmFyZ3MgPSBbXQogCiAgICAgIyBGb3IgYSBwYXJ0aWFsIHJ1biwgd2UgZG8gbm90IG5lZWQgdG8gY2x1dHRlciB0aGUgb3V0cHV0LgotICAgIGlmIHZlcmJvc2Ugb3IgaGVhZGVyIG9yIG5vdCAocXVpZXQgb3Igc2luZ2xlIG9yIHRlc3RzIG9yIGFyZ3MpOgorICAgIGlmIG5zLnZlcmJvc2Ugb3IgbnMuaGVhZGVyIG9yIG5vdCAobnMucXVpZXQgb3IgbnMuc2luZ2xlIG9yIHRlc3RzIG9yIG5zLmFyZ3MpOgogICAgICAgICAjIFByaW50IGJhc2ljIHBsYXRmb3JtIGluZm9ybWF0aW9uCiAgICAgICAgIHByaW50KCI9PSIsIHBsYXRmb3JtLnB5dGhvbl9pbXBsZW1lbnRhdGlvbigpLCAqc3lzLnZlcnNpb24uc3BsaXQoKSkKICAgICAgICAgcHJpbnQoIj09ICAiLCBwbGF0Zm9ybS5wbGF0Zm9ybShhbGlhc2VkPVRydWUpLAogICAgICAgICAgICAgICAgICAgICAgICIlcy1lbmRpYW4iICUgc3lzLmJ5dGVvcmRlcikKKyAgICAgICAgcHJpbnQoIj09ICAiLCAiaGFzaCBhbGdvcml0aG06Iiwgc3lzLmhhc2hfaW5mby5hbGdvcml0aG0sCisgICAgICAgICAgICAgICI2NGJpdCIgaWYgc3lzLm1heHNpemUgPiAyKiozMiBlbHNlICIzMmJpdCIpCiAgICAgICAgIHByaW50KCI9PSAgIiwgb3MuZ2V0Y3dkKCkpCiAgICAgICAgIHByaW50KCJUZXN0aW5nIHdpdGggZmxhZ3M6Iiwgc3lzLmZsYWdzKQogCiAgICAgIyBpZiB0ZXN0ZGlyIGlzIHNldCwgdGhlbiB3ZSBhcmUgbm90IHJ1bm5pbmcgdGhlIHB5dGhvbiB0ZXN0cyBzdWl0ZSwgc28KICAgICAjIGRvbid0IGFkZCBkZWZhdWx0IHRlc3RzIHRvIGJlIGV4ZWN1dGVkIG9yIHNraXBwZWQgKHBhc3MgZW1wdHkgdmFsdWVzKQotICAgIGlmIHRlc3RkaXI6Ci0gICAgICAgIGFsbHRlc3RzID0gZmluZHRlc3RzKHRlc3RkaXIsIGxpc3QoKSwgc2V0KCkpCisgICAgaWYgbnMudGVzdGRpcjoKKyAgICAgICAgYWxsdGVzdHMgPSBmaW5kdGVzdHMobnMudGVzdGRpciwgbGlzdCgpLCBzZXQoKSkKICAgICBlbHNlOgotICAgICAgICBhbGx0ZXN0cyA9IGZpbmR0ZXN0cyh0ZXN0ZGlyLCBzdGR0ZXN0cywgbm90dGVzdHMpCisgICAgICAgIGFsbHRlc3RzID0gZmluZHRlc3RzKG5zLnRlc3RkaXIsIHN0ZHRlc3RzLCBub3R0ZXN0cykKIAotICAgIHNlbGVjdGVkID0gdGVzdHMgb3IgYXJncyBvciBhbGx0ZXN0cwotICAgIGlmIHNpbmdsZToKKyAgICBzZWxlY3RlZCA9IHRlc3RzIG9yIG5zLmFyZ3Mgb3IgYWxsdGVzdHMKKyAgICBpZiBucy5zaW5nbGU6CiAgICAgICAgIHNlbGVjdGVkID0gc2VsZWN0ZWRbOjFdCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG5leHRfc2luZ2xlX3Rlc3QgPSBhbGx0ZXN0c1thbGx0ZXN0cy5pbmRleChzZWxlY3RlZFswXSkrMV0KICAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6CiAgICAgICAgICAgICBuZXh0X3NpbmdsZV90ZXN0ID0gTm9uZQogICAgICMgUmVtb3ZlIGFsbCB0aGUgc2VsZWN0ZWQgdGVzdHMgdGhhdCBwcmVjZWRlIHN0YXJ0IGlmIGl0J3Mgc2V0LgotICAgIGlmIHN0YXJ0OgorICAgIGlmIG5zLnN0YXJ0OgogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBkZWwgc2VsZWN0ZWRbOnNlbGVjdGVkLmluZGV4KHN0YXJ0KV0KKyAgICAgICAgICAgIGRlbCBzZWxlY3RlZFs6c2VsZWN0ZWQuaW5kZXgobnMuc3RhcnQpXQogICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKLSAgICAgICAgICAgIHByaW50KCJDb3VsZG4ndCBmaW5kIHN0YXJ0aW5nIHRlc3QgKCVzKSwgdXNpbmcgYWxsIHRlc3RzIiAlIHN0YXJ0KQotICAgIGlmIHJhbmRvbWl6ZToKLSAgICAgICAgcmFuZG9tLnNlZWQocmFuZG9tX3NlZWQpCi0gICAgICAgIHByaW50KCJVc2luZyByYW5kb20gc2VlZCIsIHJhbmRvbV9zZWVkKQorICAgICAgICAgICAgcHJpbnQoIkNvdWxkbid0IGZpbmQgc3RhcnRpbmcgdGVzdCAoJXMpLCB1c2luZyBhbGwgdGVzdHMiICUgbnMuc3RhcnQpCisgICAgaWYgbnMucmFuZG9taXplOgorICAgICAgICBpZiBucy5yYW5kb21fc2VlZCBpcyBOb25lOgorICAgICAgICAgICAgbnMucmFuZG9tX3NlZWQgPSByYW5kb20ucmFuZHJhbmdlKDEwMDAwMDAwKQorICAgICAgICByYW5kb20uc2VlZChucy5yYW5kb21fc2VlZCkKKyAgICAgICAgcHJpbnQoIlVzaW5nIHJhbmRvbSBzZWVkIiwgbnMucmFuZG9tX3NlZWQpCiAgICAgICAgIHJhbmRvbS5zaHVmZmxlKHNlbGVjdGVkKQotICAgIGlmIHRyYWNlOgorICAgIGlmIG5zLnRyYWNlOgogICAgICAgICBpbXBvcnQgdHJhY2UsIHRlbXBmaWxlCiAgICAgICAgIHRyYWNlciA9IHRyYWNlLlRyYWNlKGlnbm9yZWRpcnM9W3N5cy5iYXNlX3ByZWZpeCwgc3lzLmJhc2VfZXhlY19wcmVmaXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBmaWxlLmdldHRlbXBkaXIoKV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNlPUZhbHNlLCBjb3VudD1UcnVlKQogCiAgICAgdGVzdF90aW1lcyA9IFtdCi0gICAgc3VwcG9ydC52ZXJib3NlID0gdmVyYm9zZSAgICAgICMgVGVsbCB0ZXN0cyB0byBiZSBtb2RlcmF0ZWx5IHF1aWV0Ci0gICAgc3VwcG9ydC51c2VfcmVzb3VyY2VzID0gdXNlX3Jlc291cmNlcworICAgIHN1cHBvcnQudmVyYm9zZSA9IG5zLnZlcmJvc2UgICAgICAjIFRlbGwgdGVzdHMgdG8gYmUgbW9kZXJhdGVseSBxdWlldAorICAgIHN1cHBvcnQudXNlX3Jlc291cmNlcyA9IG5zLnVzZV9yZXNvdXJjZXMKICAgICBzYXZlX21vZHVsZXMgPSBzeXMubW9kdWxlcy5rZXlzKCkKIAogICAgIGRlZiBhY2N1bXVsYXRlX3Jlc3VsdCh0ZXN0LCByZXN1bHQpOgpAQCAtNTkzLDcgKzY1OCw3IEBACiAgICAgICAgICAgICBza2lwcGVkLmFwcGVuZCh0ZXN0KQogICAgICAgICAgICAgcmVzb3VyY2VfZGVuaWVkcy5hcHBlbmQodGVzdCkKIAotICAgIGlmIGZvcmV2ZXI6CisgICAgaWYgbnMuZm9yZXZlcjoKICAgICAgICAgZGVmIHRlc3RfZm9yZXZlcih0ZXN0cz1saXN0KHNlbGVjdGVkKSk6CiAgICAgICAgICAgICB3aGlsZSBUcnVlOgogICAgICAgICAgICAgICAgIGZvciB0ZXN0IGluIHRlc3RzOgpAQCAtNjA4LDE5ICs2NzMsMTYgQEAKICAgICAgICAgdGVzdF9jb3VudCA9ICcve30nLmZvcm1hdChsZW4oc2VsZWN0ZWQpKQogICAgICAgICB0ZXN0X2NvdW50X3dpZHRoID0gbGVuKHRlc3RfY291bnQpIC0gMQogCi0gICAgaWYgdXNlX21wOgorICAgIGlmIG5zLnVzZV9tcDoKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZnJvbSB0aHJlYWRpbmcgaW1wb3J0IFRocmVhZAogICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgICAgICAgICBwcmludCgiTXVsdGlwcm9jZXNzIG9wdGlvbiByZXF1aXJlcyB0aHJlYWQgc3VwcG9ydCIpCiAgICAgICAgICAgICBzeXMuZXhpdCgyKQogICAgICAgICBmcm9tIHF1ZXVlIGltcG9ydCBRdWV1ZQotICAgICAgICBmcm9tIHN1YnByb2Nlc3MgaW1wb3J0IFBvcGVuLCBQSVBFCi0gICAgICAgIGRlYnVnX291dHB1dF9wYXQgPSByZS5jb21waWxlKHIiXFtcZCsgcmVmc1xdJCIpCisgICAgICAgIGRlYnVnX291dHB1dF9wYXQgPSByZS5jb21waWxlKHIiXFtcZCsgcmVmcywgXGQrIGJsb2Nrc1xdJCIpCiAgICAgICAgIG91dHB1dCA9IFF1ZXVlKCkKICAgICAgICAgcGVuZGluZyA9IE11bHRpcHJvY2Vzc1Rlc3RzKHRlc3RzKQotICAgICAgICBvcHRfYXJncyA9IHN1cHBvcnQuYXJnc19mcm9tX2ludGVycHJldGVyX2ZsYWdzKCkKLSAgICAgICAgYmFzZV9jbWQgPSBbc3lzLmV4ZWN1dGFibGVdICsgb3B0X2FyZ3MgKyBbJy1tJywgJ3Rlc3QucmVncnRlc3QnXQogICAgICAgICBkZWYgd29yaygpOgogICAgICAgICAgICAgIyBBIHdvcmtlciB0aHJlYWQuCiAgICAgICAgICAgICB0cnk6CkBAIC02MzAsMjQgKzY5Miw3IEBACiAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgogICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LnB1dCgoTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgICAgICAgICAgICAgYXJnc190dXBsZSA9ICgKLSAgICAgICAgICAgICAgICAgICAgICAgICh0ZXN0LCB2ZXJib3NlLCBxdWlldCksCi0gICAgICAgICAgICAgICAgICAgICAgICBkaWN0KGh1bnRybGVha3M9aHVudHJsZWFrcywgdXNlX3Jlc291cmNlcz11c2VfcmVzb3VyY2VzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Zz1kZWJ1Zywgb3V0cHV0X29uX2ZhaWx1cmU9dmVyYm9zZTMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQ9dGltZW91dCwgZmFpbGZhc3Q9ZmFpbGZhc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoX3Rlc3RzPW1hdGNoX3Rlc3RzKQotICAgICAgICAgICAgICAgICAgICApCi0gICAgICAgICAgICAgICAgICAgICMgLUUgaXMgbmVlZGVkIGJ5IHNvbWUgdGVzdHMsIGUuZy4gdGVzdF9pbXBvcnQKLSAgICAgICAgICAgICAgICAgICAgIyBSdW5uaW5nIHRoZSBjaGlsZCBmcm9tIHRoZSBzYW1lIHdvcmtpbmcgZGlyZWN0b3J5IGVuc3VyZXMKLSAgICAgICAgICAgICAgICAgICAgIyB0aGF0IFRFTVBESVIgZm9yIHRoZSBjaGlsZCBpcyB0aGUgc2FtZSB3aGVuCi0gICAgICAgICAgICAgICAgICAgICMgc3lzY29uZmlnLmlzX3B5dGhvbl9idWlsZCgpIGlzIHRydWUuIFNlZSBpc3N1ZSAxNTMwMC4KLSAgICAgICAgICAgICAgICAgICAgcG9wZW4gPSBQb3BlbihiYXNlX2NtZCArIFsnLS1zbGF2ZWFyZ3MnLCBqc29uLmR1bXBzKGFyZ3NfdHVwbGUpXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PVBJUEUsIHN0ZGVycj1QSVBFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bml2ZXJzYWxfbmV3bGluZXM9VHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2VfZmRzPShvcy5uYW1lICE9ICdudCcpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjd2Q9c3VwcG9ydC5TQVZFRENXRCkKLSAgICAgICAgICAgICAgICAgICAgc3Rkb3V0LCBzdGRlcnIgPSBwb3Blbi5jb21tdW5pY2F0ZSgpCi0gICAgICAgICAgICAgICAgICAgIHJldGNvZGUgPSBwb3Blbi53YWl0KCkKKyAgICAgICAgICAgICAgICAgICAgcmV0Y29kZSwgc3Rkb3V0LCBzdGRlcnIgPSBydW5fdGVzdF9pbl9zdWJwcm9jZXNzKHRlc3QsIG5zKQogICAgICAgICAgICAgICAgICAgICAjIFN0cmlwIGxhc3QgcmVmY291bnQgb3V0cHV0IGxpbmUgaWYgaXQgZXhpc3RzLCBzaW5jZSBpdAogICAgICAgICAgICAgICAgICAgICAjIGNvbWVzIGZyb20gdGhlIHNodXRkb3duIG9mIHRoZSBpbnRlcnByZXRlciBpbiB0aGUgc3ViY29tbWFuZC4KICAgICAgICAgICAgICAgICAgICAgc3RkZXJyID0gZGVidWdfb3V0cHV0X3BhdC5zdWIoIiIsIHN0ZGVycikKQEAgLTY2NCwxOSArNzA5LDE5IEBACiAgICAgICAgICAgICBleGNlcHQgQmFzZUV4Y2VwdGlvbjoKICAgICAgICAgICAgICAgICBvdXRwdXQucHV0KChOb25lLCBOb25lLCBOb25lLCBOb25lKSkKICAgICAgICAgICAgICAgICByYWlzZQotICAgICAgICB3b3JrZXJzID0gW1RocmVhZCh0YXJnZXQ9d29yaykgZm9yIGkgaW4gcmFuZ2UodXNlX21wKV0KKyAgICAgICAgd29ya2VycyA9IFtUaHJlYWQodGFyZ2V0PXdvcmspIGZvciBpIGluIHJhbmdlKG5zLnVzZV9tcCldCiAgICAgICAgIGZvciB3b3JrZXIgaW4gd29ya2VyczoKICAgICAgICAgICAgIHdvcmtlci5zdGFydCgpCiAgICAgICAgIGZpbmlzaGVkID0gMAogICAgICAgICB0ZXN0X2luZGV4ID0gMQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICB3aGlsZSBmaW5pc2hlZCA8IHVzZV9tcDoKKyAgICAgICAgICAgIHdoaWxlIGZpbmlzaGVkIDwgbnMudXNlX21wOgogICAgICAgICAgICAgICAgIHRlc3QsIHN0ZG91dCwgc3RkZXJyLCByZXN1bHQgPSBvdXRwdXQuZ2V0KCkKICAgICAgICAgICAgICAgICBpZiB0ZXN0IGlzIE5vbmU6CiAgICAgICAgICAgICAgICAgICAgIGZpbmlzaGVkICs9IDEKICAgICAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgICAgICBhY2N1bXVsYXRlX3Jlc3VsdCh0ZXN0LCByZXN1bHQpCi0gICAgICAgICAgICAgICAgaWYgbm90IHF1aWV0OgorICAgICAgICAgICAgICAgIGlmIG5vdCBucy5xdWlldDoKICAgICAgICAgICAgICAgICAgICAgZm10ID0gIlt7MTp7MH19ezJ9L3szfV0gezR9IiBpZiBiYWQgZWxzZSAiW3sxOnswfX17Mn1dIHs0fSIKICAgICAgICAgICAgICAgICAgICAgcHJpbnQoZm10LmZvcm1hdCgKICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfY291bnRfd2lkdGgsIHRlc3RfaW5kZXgsIHRlc3RfY291bnQsCkBAIC02OTksMjkgKzc0NCwzMCBAQAogICAgICAgICAgICAgd29ya2VyLmpvaW4oKQogICAgIGVsc2U6CiAgICAgICAgIGZvciB0ZXN0X2luZGV4LCB0ZXN0IGluIGVudW1lcmF0ZSh0ZXN0cywgMSk6Ci0gICAgICAgICAgICBpZiBub3QgcXVpZXQ6CisgICAgICAgICAgICBpZiBub3QgbnMucXVpZXQ6CiAgICAgICAgICAgICAgICAgZm10ID0gIlt7MTp7MH19ezJ9L3szfV0gezR9IiBpZiBiYWQgZWxzZSAiW3sxOnswfX17Mn1dIHs0fSIKICAgICAgICAgICAgICAgICBwcmludChmbXQuZm9ybWF0KAogICAgICAgICAgICAgICAgICAgICB0ZXN0X2NvdW50X3dpZHRoLCB0ZXN0X2luZGV4LCB0ZXN0X2NvdW50LCBsZW4oYmFkKSwgdGVzdCkpCiAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCi0gICAgICAgICAgICBpZiB0cmFjZToKKyAgICAgICAgICAgIGlmIG5zLnRyYWNlOgogICAgICAgICAgICAgICAgICMgSWYgd2UncmUgdHJhY2luZyBjb2RlIGNvdmVyYWdlLCB0aGVuIHdlIGRvbid0IGV4aXQgd2l0aCBzdGF0dXMKICAgICAgICAgICAgICAgICAjIGlmIG9uIGEgZmFsc2UgcmV0dXJuIHZhbHVlIGZyb20gbWFpbi4KLSAgICAgICAgICAgICAgICB0cmFjZXIucnVuY3R4KCdydW50ZXN0KHRlc3QsIHZlcmJvc2UsIHF1aWV0LCB0aW1lb3V0PXRpbWVvdXQpJywKKyAgICAgICAgICAgICAgICB0cmFjZXIucnVuY3R4KCdydW50ZXN0KHRlc3QsIG5zLnZlcmJvc2UsIG5zLnF1aWV0LCB0aW1lb3V0PW5zLnRpbWVvdXQpJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbHM9Z2xvYmFscygpLCBsb2NhbHM9dmFycygpKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJ1bnRlc3QodGVzdCwgdmVyYm9zZSwgcXVpZXQsIGh1bnRybGVha3MsIGRlYnVnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9vbl9mYWlsdXJlPXZlcmJvc2UzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQ9dGltZW91dCwgZmFpbGZhc3Q9ZmFpbGZhc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hfdGVzdHM9bWF0Y2hfdGVzdHMpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJ1bnRlc3QodGVzdCwgbnMudmVyYm9zZSwgbnMucXVpZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnMuaHVudHJsZWFrcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfb25fZmFpbHVyZT1ucy52ZXJib3NlMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0PW5zLnRpbWVvdXQsIGZhaWxmYXN0PW5zLmZhaWxmYXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoX3Rlc3RzPW5zLm1hdGNoX3Rlc3RzKQogICAgICAgICAgICAgICAgICAgICBhY2N1bXVsYXRlX3Jlc3VsdCh0ZXN0LCByZXN1bHQpCiAgICAgICAgICAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgogICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHRlZCA9IFRydWUKICAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgICAgICBpZiBmaW5kbGVha3M6CisgICAgICAgICAgICBpZiBucy5maW5kbGVha3M6CiAgICAgICAgICAgICAgICAgZ2MuY29sbGVjdCgpCiAgICAgICAgICAgICAgICAgaWYgZ2MuZ2FyYmFnZToKICAgICAgICAgICAgICAgICAgICAgcHJpbnQoIldhcm5pbmc6IHRlc3QgY3JlYXRlZCIsIGxlbihnYy5nYXJiYWdlKSwgZW5kPScgJykKQEAgLTc0Miw2OSArNzg4LDU5IEBACiAgICAgICAgIG9taXR0ZWQgPSBzZXQoc2VsZWN0ZWQpIC0gc2V0KGdvb2QpIC0gc2V0KGJhZCkgLSBzZXQoc2tpcHBlZCkKICAgICAgICAgcHJpbnQoY291bnQobGVuKG9taXR0ZWQpLCAidGVzdCIpLCAib21pdHRlZDoiKQogICAgICAgICBwcmludGxpc3Qob21pdHRlZCkKLSAgICBpZiBnb29kIGFuZCBub3QgcXVpZXQ6CisgICAgaWYgZ29vZCBhbmQgbm90IG5zLnF1aWV0OgogICAgICAgICBpZiBub3QgYmFkIGFuZCBub3Qgc2tpcHBlZCBhbmQgbm90IGludGVycnVwdGVkIGFuZCBsZW4oZ29vZCkgPiAxOgogICAgICAgICAgICAgcHJpbnQoIkFsbCIsIGVuZD0nICcpCiAgICAgICAgIHByaW50KGNvdW50KGxlbihnb29kKSwgInRlc3QiKSwgIk9LLiIpCi0gICAgaWYgcHJpbnRfc2xvdzoKKyAgICBpZiBucy5wcmludF9zbG93OgogICAgICAgICB0ZXN0X3RpbWVzLnNvcnQocmV2ZXJzZT1UcnVlKQogICAgICAgICBwcmludCgiMTAgc2xvd2VzdCB0ZXN0czoiKQogICAgICAgICBmb3IgdGltZSwgdGVzdCBpbiB0ZXN0X3RpbWVzWzoxMF06CiAgICAgICAgICAgICBwcmludCgiJXM6ICUuMWZzIiAlICh0ZXN0LCB0aW1lKSkKICAgICBpZiBiYWQ6Ci0gICAgICAgIGJhZCA9IHNvcnRlZChzZXQoYmFkKSAtIHNldChlbnZpcm9ubWVudF9jaGFuZ2VkKSkKLSAgICAgICAgaWYgYmFkOgotICAgICAgICAgICAgcHJpbnQoY291bnQobGVuKGJhZCksICJ0ZXN0IiksICJmYWlsZWQ6IikKLSAgICAgICAgICAgIHByaW50bGlzdChiYWQpCisgICAgICAgIHByaW50KGNvdW50KGxlbihiYWQpLCAidGVzdCIpLCAiZmFpbGVkOiIpCisgICAgICAgIHByaW50bGlzdChiYWQpCiAgICAgaWYgZW52aXJvbm1lbnRfY2hhbmdlZDoKICAgICAgICAgcHJpbnQoInt9IGFsdGVyZWQgdGhlIGV4ZWN1dGlvbiBlbnZpcm9ubWVudDoiLmZvcm1hdCgKICAgICAgICAgICAgICAgICAgY291bnQobGVuKGVudmlyb25tZW50X2NoYW5nZWQpLCAidGVzdCIpKSkKICAgICAgICAgcHJpbnRsaXN0KGVudmlyb25tZW50X2NoYW5nZWQpCi0gICAgaWYgc2tpcHBlZCBhbmQgbm90IHF1aWV0OgorICAgIGlmIHNraXBwZWQgYW5kIG5vdCBucy5xdWlldDoKICAgICAgICAgcHJpbnQoY291bnQobGVuKHNraXBwZWQpLCAidGVzdCIpLCAic2tpcHBlZDoiKQogICAgICAgICBwcmludGxpc3Qoc2tpcHBlZCkKIAotICAgICAgICBlID0gX0V4cGVjdGVkU2tpcHMoKQotICAgICAgICBwbGF0ID0gc3lzLnBsYXRmb3JtCi0gICAgICAgIGlmIGUuaXN2YWxpZCgpOgotICAgICAgICAgICAgc3VycHJpc2UgPSBzZXQoc2tpcHBlZCkgLSBlLmdldGV4cGVjdGVkKCkgLSBzZXQocmVzb3VyY2VfZGVuaWVkcykKLSAgICAgICAgICAgIGlmIHN1cnByaXNlOgotICAgICAgICAgICAgICAgIHByaW50KGNvdW50KGxlbihzdXJwcmlzZSksICJza2lwIiksIFwKLSAgICAgICAgICAgICAgICAgICAgICAidW5leHBlY3RlZCBvbiIsIHBsYXQgKyAiOiIpCi0gICAgICAgICAgICAgICAgcHJpbnRsaXN0KHN1cnByaXNlKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBwcmludCgiVGhvc2Ugc2tpcHMgYXJlIGFsbCBleHBlY3RlZCBvbiIsIHBsYXQgKyAiLiIpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBwcmludCgiQXNrIHNvbWVvbmUgdG8gdGVhY2ggcmVncnRlc3QucHkgYWJvdXQgd2hpY2ggdGVzdHMgYXJlIikKLSAgICAgICAgICAgIHByaW50KCJleHBlY3RlZCB0byBnZXQgc2tpcHBlZCBvbiIsIHBsYXQgKyAiLiIpCi0KLSAgICBpZiB2ZXJib3NlMiBhbmQgYmFkOgorICAgIGlmIG5zLnZlcmJvc2UyIGFuZCBiYWQ6CiAgICAgICAgIHByaW50KCJSZS1ydW5uaW5nIGZhaWxlZCB0ZXN0cyBpbiB2ZXJib3NlIG1vZGUiKQotICAgICAgICBmb3IgdGVzdCBpbiBiYWQ6CisgICAgICAgIGZvciB0ZXN0IGluIGJhZFs6XToKICAgICAgICAgICAgIHByaW50KCJSZS1ydW5uaW5nIHRlc3QgJXIgaW4gdmVyYm9zZSBtb2RlIiAlIHRlc3QpCiAgICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICB2ZXJib3NlID0gVHJ1ZQotICAgICAgICAgICAgICAgIG9rID0gcnVudGVzdCh0ZXN0LCBUcnVlLCBxdWlldCwgaHVudHJsZWFrcywgZGVidWcsIHRpbWVvdXQ9dGltZW91dCkKKyAgICAgICAgICAgICAgICBucy52ZXJib3NlID0gVHJ1ZQorICAgICAgICAgICAgICAgIG9rID0gcnVudGVzdCh0ZXN0LCBUcnVlLCBucy5xdWlldCwgbnMuaHVudHJsZWFrcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dD1ucy50aW1lb3V0KQogICAgICAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgogICAgICAgICAgICAgICAgICMgcHJpbnQgYSBuZXdsaW5lIHNlcGFyYXRlIGZyb20gdGhlIF5DCiAgICAgICAgICAgICAgICAgcHJpbnQoKQogICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgb2tbMF0gaW4ge1BBU1NFRCwgRU5WX0NIQU5HRUQsIFNLSVBQRUQsIFJFU09VUkNFX0RFTklFRH06CisgICAgICAgICAgICAgICAgICAgIGJhZC5yZW1vdmUodGVzdCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIGJhZDoKKyAgICAgICAgICAgICAgICBwcmludChjb3VudChsZW4oYmFkKSwgJ3Rlc3QnKSwgImZhaWxlZCBhZ2FpbjoiKQorICAgICAgICAgICAgICAgIHByaW50bGlzdChiYWQpCiAKLSAgICBpZiBzaW5nbGU6CisgICAgaWYgbnMuc2luZ2xlOgogICAgICAgICBpZiBuZXh0X3NpbmdsZV90ZXN0OgogICAgICAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAndycpIGFzIGZwOgogICAgICAgICAgICAgICAgIGZwLndyaXRlKG5leHRfc2luZ2xlX3Rlc3QgKyAnXG4nKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgb3MudW5saW5rKGZpbGVuYW1lKQogCi0gICAgaWYgdHJhY2U6CisgICAgaWYgbnMudHJhY2U6CiAgICAgICAgIHIgPSB0cmFjZXIucmVzdWx0cygpCi0gICAgICAgIHIud3JpdGVfcmVzdWx0cyhzaG93X21pc3Npbmc9VHJ1ZSwgc3VtbWFyeT1UcnVlLCBjb3ZlcmRpcj1jb3ZlcmRpcikKKyAgICAgICAgci53cml0ZV9yZXN1bHRzKHNob3dfbWlzc2luZz1UcnVlLCBzdW1tYXJ5PVRydWUsIGNvdmVyZGlyPW5zLmNvdmVyZGlyKQogCi0gICAgaWYgcnVubGVha3M6CisgICAgaWYgbnMucnVubGVha3M6CiAgICAgICAgIG9zLnN5c3RlbSgibGVha3MgJWQiICUgb3MuZ2V0cGlkKCkpCiAKICAgICBzeXMuZXhpdChsZW4oYmFkKSA+IDAgb3IgaW50ZXJydXB0ZWQpCkBAIC04NzcsNyArOTEzLDcgQEAKICAgICBhdGV4aXQucmVnaXN0ZXIocmVzdG9yZV9zdGRvdXQpCiAKIGRlZiBydW50ZXN0KHRlc3QsIHZlcmJvc2UsIHF1aWV0LAotICAgICAgICAgICAgaHVudHJsZWFrcz1GYWxzZSwgZGVidWc9RmFsc2UsIHVzZV9yZXNvdXJjZXM9Tm9uZSwKKyAgICAgICAgICAgIGh1bnRybGVha3M9RmFsc2UsIHVzZV9yZXNvdXJjZXM9Tm9uZSwKICAgICAgICAgICAgIG91dHB1dF9vbl9mYWlsdXJlPUZhbHNlLCBmYWlsZmFzdD1GYWxzZSwgbWF0Y2hfdGVzdHM9Tm9uZSwKICAgICAgICAgICAgIHRpbWVvdXQ9Tm9uZSk6CiAgICAgIiIiUnVuIGEgc2luZ2xlIHRlc3QuCkBAIC04ODUsMTQgKzkyMSwxNSBAQAogICAgIHRlc3QgLS0gdGhlIG5hbWUgb2YgdGhlIHRlc3QKICAgICB2ZXJib3NlIC0tIGlmIHRydWUsIHByaW50IG1vcmUgbWVzc2FnZXMKICAgICBxdWlldCAtLSBpZiB0cnVlLCBkb24ndCBwcmludCAnc2tpcHBlZCcgbWVzc2FnZXMgKHByb2JhYmx5IHJlZHVuZGFudCkKLSAgICB0ZXN0X3RpbWVzIC0tIGEgbGlzdCBvZiAodGltZSwgdGVzdF9uYW1lKSBwYWlycwogICAgIGh1bnRybGVha3MgLS0gcnVuIG11bHRpcGxlIHRpbWVzIHRvIHRlc3QgZm9yIGxlYWtzOyByZXF1aXJlcyBhIGRlYnVnCiAgICAgICAgICAgICAgICAgICBidWlsZDsgYSB0cmlwbGUgY29ycmVzcG9uZGluZyB0byAtUidzIHRocmVlIGFyZ3VtZW50cworICAgIHVzZV9yZXNvdXJjZXMgLS0gbGlzdCBvZiBleHRyYSByZXNvdXJjZXMgdG8gdXNlCiAgICAgb3V0cHV0X29uX2ZhaWx1cmUgLS0gaWYgdHJ1ZSwgZGlzcGxheSB0ZXN0IG91dHB1dCBvbiBmYWlsdXJlCiAgICAgdGltZW91dCAtLSBkdW1wIHRoZSB0cmFjZWJhY2sgYW5kIGV4aXQgaWYgYSB0ZXN0IHRha2VzIG1vcmUgdGhhbgogICAgICAgICAgICAgICAgdGltZW91dCBzZWNvbmRzCisgICAgZmFpbGZhc3QsIG1hdGNoX3Rlc3RzIC0tIFNlZSByZWdydGVzdCBjb21tYW5kLWxpbmUgZmxhZ3MgZm9yIHRoZXNlLgogCi0gICAgUmV0dXJucyBvbmUgb2YgdGhlIHRlc3QgcmVzdWx0IGNvbnN0YW50czoKKyAgICBSZXR1cm5zIHRoZSB0dXBsZSByZXN1bHQsIHRlc3RfdGltZSwgd2hlcmUgcmVzdWx0IGlzIG9uZSBvZiB0aGUgY29uc3RhbnRzOgogICAgICAgICBJTlRFUlJVUFRFRCAgICAgIEtleWJvYXJkSW50ZXJydXB0IHdoZW4gcnVuIHVuZGVyIC1qCiAgICAgICAgIFJFU09VUkNFX0RFTklFRCAgdGVzdCBza2lwcGVkIGJlY2F1c2UgcmVzb3VyY2UgZGVuaWVkCiAgICAgICAgIFNLSVBQRUQgICAgICAgICAgdGVzdCBza2lwcGVkIGZvciBzb21lIG90aGVyIHJlYXNvbgpAQCAtOTMwLDcgKzk2Nyw3IEBACiAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dCA9IHN0cmVhbQogICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIgPSBzdHJlYW0KICAgICAgICAgICAgICAgICByZXN1bHQgPSBydW50ZXN0X2lubmVyKHRlc3QsIHZlcmJvc2UsIHF1aWV0LCBodW50cmxlYWtzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcsIGRpc3BsYXlfZmFpbHVyZT1GYWxzZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlfZmFpbHVyZT1GYWxzZSkKICAgICAgICAgICAgICAgICBpZiByZXN1bHRbMF0gPT0gRkFJTEVEOgogICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSBzdHJlYW0uZ2V0dmFsdWUoKQogICAgICAgICAgICAgICAgICAgICBvcmlnX3N0ZGVyci53cml0ZShvdXRwdXQpCkBAIC05NDAsNyArOTc3LDcgQEAKICAgICAgICAgICAgICAgICBzeXMuc3RkZXJyID0gb3JpZ19zdGRlcnIKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHN1cHBvcnQudmVyYm9zZSA9IHZlcmJvc2UgICMgVGVsbCB0ZXN0cyB0byBiZSBtb2RlcmF0ZWx5IHF1aWV0Ci0gICAgICAgICAgICByZXN1bHQgPSBydW50ZXN0X2lubmVyKHRlc3QsIHZlcmJvc2UsIHF1aWV0LCBodW50cmxlYWtzLCBkZWJ1ZywKKyAgICAgICAgICAgIHJlc3VsdCA9IHJ1bnRlc3RfaW5uZXIodGVzdCwgdmVyYm9zZSwgcXVpZXQsIGh1bnRybGVha3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlfZmFpbHVyZT1ub3QgdmVyYm9zZSkKICAgICAgICAgcmV0dXJuIHJlc3VsdAogICAgIGZpbmFsbHk6CkBAIC05OTIsMTAgKzEwMjksMTIgQEAKICAgICAgICAgICAgICAgICAgJ29zLmVudmlyb24nLCAnc3lzLnBhdGgnLCAnc3lzLnBhdGhfaG9va3MnLCAnX19pbXBvcnRfXycsCiAgICAgICAgICAgICAgICAgICd3YXJuaW5ncy5maWx0ZXJzJywgJ2FzeW5jb3JlLnNvY2tldF9tYXAnLAogICAgICAgICAgICAgICAgICAnbG9nZ2luZy5faGFuZGxlcnMnLCAnbG9nZ2luZy5faGFuZGxlckxpc3QnLCAnc3lzLmdldHRyYWNlJywKLSAgICAgICAgICAgICAgICAgJ3N5cy53YXJub3B0aW9ucycsICd0aHJlYWRpbmcuX2RhbmdsaW5nJywKLSAgICAgICAgICAgICAgICAgJ211bHRpcHJvY2Vzc2luZy5wcm9jZXNzLl9kYW5nbGluZycsCisgICAgICAgICAgICAgICAgICdzeXMud2Fybm9wdGlvbnMnLAorICAgICAgICAgICAgICAgICAjIG11bHRpcHJvY2Vzc2luZy5wcm9jZXNzLl9jbGVhbnVwKCkgbWF5IHJlbGVhc2UgcmVmCisgICAgICAgICAgICAgICAgICMgdG8gYSB0aHJlYWQsIHNvIGNoZWNrIHByb2Nlc3NlcyBmaXJzdC4KKyAgICAgICAgICAgICAgICAgJ211bHRpcHJvY2Vzc2luZy5wcm9jZXNzLl9kYW5nbGluZycsICd0aHJlYWRpbmcuX2RhbmdsaW5nJywKICAgICAgICAgICAgICAgICAgJ3N5c2NvbmZpZy5fQ09ORklHX1ZBUlMnLCAnc3lzY29uZmlnLl9JTlNUQUxMX1NDSEVNRVMnLAotICAgICAgICAgICAgICAgICAnc3VwcG9ydC5URVNURk4nLAorICAgICAgICAgICAgICAgICAnZmlsZXMnLCAnbG9jYWxlJywgJ3dhcm5pbmdzLnNob3d3YXJuaW5nJywKICAgICAgICAgICAgICAgICApCiAKICAgICBkZWYgZ2V0X3N5c19hcmd2KHNlbGYpOgpAQCAtMTEyMyw2ICsxMTYyLDggQEAKICAgICBkZWYgZ2V0X211bHRpcHJvY2Vzc2luZ19wcm9jZXNzX19kYW5nbGluZyhzZWxmKToKICAgICAgICAgaWYgbm90IG11bHRpcHJvY2Vzc2luZzoKICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgICMgVW5qb2luZWQgcHJvY2VzcyBvYmplY3RzIGNhbiBzdXJ2aXZlIGFmdGVyIHByb2Nlc3MgZXhpdHMKKyAgICAgICAgbXVsdGlwcm9jZXNzaW5nLnByb2Nlc3MuX2NsZWFudXAoKQogICAgICAgICAjIFRoaXMgY29waWVzIHRoZSB3ZWFrcmVmcyB3aXRob3V0IG1ha2luZyBhbnkgc3Ryb25nIHJlZmVyZW5jZQogICAgICAgICByZXR1cm4gbXVsdGlwcm9jZXNzaW5nLnByb2Nlc3MuX2RhbmdsaW5nLmNvcHkoKQogICAgIGRlZiByZXN0b3JlX211bHRpcHJvY2Vzc2luZ19wcm9jZXNzX19kYW5nbGluZyhzZWxmLCBzYXZlZCk6CkBAIC0xMTQ5LDIwICsxMTkwLDM1IEBACiAgICAgICAgIHN5c2NvbmZpZy5fSU5TVEFMTF9TQ0hFTUVTLmNsZWFyKCkKICAgICAgICAgc3lzY29uZmlnLl9JTlNUQUxMX1NDSEVNRVMudXBkYXRlKHNhdmVkWzJdKQogCi0gICAgZGVmIGdldF9zdXBwb3J0X1RFU1RGTihzZWxmKToKLSAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoc3VwcG9ydC5URVNURk4pOgotICAgICAgICAgICAgcmVzdWx0ID0gJ2YnCi0gICAgICAgIGVsaWYgb3MucGF0aC5pc2RpcihzdXBwb3J0LlRFU1RGTik6Ci0gICAgICAgICAgICByZXN1bHQgPSAnZCcKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJlc3VsdCA9IE5vbmUKLSAgICAgICAgcmV0dXJuIHJlc3VsdAotICAgIGRlZiByZXN0b3JlX3N1cHBvcnRfVEVTVEZOKHNlbGYsIHNhdmVkX3ZhbHVlKToKLSAgICAgICAgaWYgc2F2ZWRfdmFsdWUgaXMgTm9uZToKLSAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKHN1cHBvcnQuVEVTVEZOKToKLSAgICAgICAgICAgICAgICBvcy51bmxpbmsoc3VwcG9ydC5URVNURk4pCi0gICAgICAgICAgICBlbGlmIG9zLnBhdGguaXNkaXIoc3VwcG9ydC5URVNURk4pOgotICAgICAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoc3VwcG9ydC5URVNURk4pCisgICAgZGVmIGdldF9maWxlcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNvcnRlZChmbiArICgnLycgaWYgb3MucGF0aC5pc2RpcihmbikgZWxzZSAnJykKKyAgICAgICAgICAgICAgICAgICAgICBmb3IgZm4gaW4gb3MubGlzdGRpcigpKQorICAgIGRlZiByZXN0b3JlX2ZpbGVzKHNlbGYsIHNhdmVkX3ZhbHVlKToKKyAgICAgICAgZm4gPSBzdXBwb3J0LlRFU1RGTgorICAgICAgICBpZiBmbiBub3QgaW4gc2F2ZWRfdmFsdWUgYW5kIChmbiArICcvJykgbm90IGluIHNhdmVkX3ZhbHVlOgorICAgICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoZm4pOgorICAgICAgICAgICAgICAgIHN1cHBvcnQudW5saW5rKGZuKQorICAgICAgICAgICAgZWxpZiBvcy5wYXRoLmlzZGlyKGZuKToKKyAgICAgICAgICAgICAgICBzdXBwb3J0LnJtdHJlZShmbikKKworICAgIF9sYyA9IFtnZXRhdHRyKGxvY2FsZSwgbGMpIGZvciBsYyBpbiBkaXIobG9jYWxlKQorICAgICAgICAgICBpZiBsYy5zdGFydHN3aXRoKCdMQ18nKV0KKyAgICBkZWYgZ2V0X2xvY2FsZShzZWxmKToKKyAgICAgICAgcGFpcmluZ3MgPSBbXQorICAgICAgICBmb3IgbGMgaW4gc2VsZi5fbGM6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcGFpcmluZ3MuYXBwZW5kKChsYywgbG9jYWxlLnNldGxvY2FsZShsYywgTm9uZSkpKQorICAgICAgICAgICAgZXhjZXB0IChUeXBlRXJyb3IsIFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIHJldHVybiBwYWlyaW5ncworICAgIGRlZiByZXN0b3JlX2xvY2FsZShzZWxmLCBzYXZlZCk6CisgICAgICAgIGZvciBsYywgc2V0dGluZyBpbiBzYXZlZDoKKyAgICAgICAgICAgIGxvY2FsZS5zZXRsb2NhbGUobGMsIHNldHRpbmcpCisKKyAgICBkZWYgZ2V0X3dhcm5pbmdzX3Nob3d3YXJuaW5nKHNlbGYpOgorICAgICAgICByZXR1cm4gd2FybmluZ3Muc2hvd3dhcm5pbmcKKyAgICBkZWYgcmVzdG9yZV93YXJuaW5nc19zaG93d2FybmluZyhzZWxmLCBmeG4pOgorICAgICAgICB3YXJuaW5ncy5zaG93d2FybmluZyA9IGZ4bgogCiAgICAgZGVmIHJlc291cmNlX2luZm8oc2VsZik6CiAgICAgICAgIGZvciBuYW1lIGluIHNlbGYucmVzb3VyY2VzOgpAQCAtMTE5OCw3ICsxMjU0LDcgQEAKIAogCiBkZWYgcnVudGVzdF9pbm5lcih0ZXN0LCB2ZXJib3NlLCBxdWlldCwKLSAgICAgICAgICAgICAgICAgIGh1bnRybGVha3M9RmFsc2UsIGRlYnVnPUZhbHNlLCBkaXNwbGF5X2ZhaWx1cmU9VHJ1ZSk6CisgICAgICAgICAgICAgICAgICBodW50cmxlYWtzPUZhbHNlLCBkaXNwbGF5X2ZhaWx1cmU9VHJ1ZSk6CiAgICAgc3VwcG9ydC51bmxvYWQodGVzdCkKIAogICAgIHRlc3RfdGltZSA9IDAuMApAQCAtMTIxMSwxOCArMTI2NywxOCBAQAogICAgICAgICAgICAgYWJzdGVzdCA9ICd0ZXN0LicgKyB0ZXN0CiAgICAgICAgIHdpdGggc2F2ZWRfdGVzdF9lbnZpcm9ubWVudCh0ZXN0LCB2ZXJib3NlLCBxdWlldCkgYXMgZW52aXJvbm1lbnQ6CiAgICAgICAgICAgICBzdGFydF90aW1lID0gdGltZS50aW1lKCkKLSAgICAgICAgICAgIHRoZV9wYWNrYWdlID0gX19pbXBvcnRfXyhhYnN0ZXN0LCBnbG9iYWxzKCksIGxvY2FscygpLCBbXSkKLSAgICAgICAgICAgIHRoZV9tb2R1bGUgPSBnZXRhdHRyKHRoZV9wYWNrYWdlLCB0ZXN0KQorICAgICAgICAgICAgdGhlX21vZHVsZSA9IGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKGFic3Rlc3QpCiAgICAgICAgICAgICAjIElmIHRoZSB0ZXN0IGhhcyBhIHRlc3RfbWFpbiwgdGhhdCB3aWxsIHJ1biB0aGUgYXBwcm9wcmlhdGUKICAgICAgICAgICAgICMgdGVzdHMuICBJZiBub3QsIHVzZSBub3JtYWwgdW5pdHRlc3QgdGVzdCBsb2FkaW5nLgogICAgICAgICAgICAgdGVzdF9ydW5uZXIgPSBnZXRhdHRyKHRoZV9tb2R1bGUsICJ0ZXN0X21haW4iLCBOb25lKQogICAgICAgICAgICAgaWYgdGVzdF9ydW5uZXIgaXMgTm9uZToKLSAgICAgICAgICAgICAgICB0ZXN0cyA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKS5sb2FkVGVzdHNGcm9tTW9kdWxlKHRoZV9tb2R1bGUpCi0gICAgICAgICAgICAgICAgdGVzdF9ydW5uZXIgPSBsYW1iZGE6IHN1cHBvcnQucnVuX3VuaXR0ZXN0KHRlc3RzKQorICAgICAgICAgICAgICAgIGRlZiB0ZXN0X3J1bm5lcigpOgorICAgICAgICAgICAgICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKyAgICAgICAgICAgICAgICAgICAgdGVzdHMgPSBsb2FkZXIubG9hZFRlc3RzRnJvbU1vZHVsZSh0aGVfbW9kdWxlKQorICAgICAgICAgICAgICAgICAgICBzdXBwb3J0LnJ1bl91bml0dGVzdCh0ZXN0cykKICAgICAgICAgICAgIHRlc3RfcnVubmVyKCkKICAgICAgICAgICAgIGlmIGh1bnRybGVha3M6Ci0gICAgICAgICAgICAgICAgcmVmbGVhayA9IGRhc2hfUih0aGVfbW9kdWxlLCB0ZXN0LCB0ZXN0X3J1bm5lciwKLSAgICAgICAgICAgICAgICAgICAgaHVudHJsZWFrcykKKyAgICAgICAgICAgICAgICByZWZsZWFrID0gZGFzaF9SKHRoZV9tb2R1bGUsIHRlc3QsIHRlc3RfcnVubmVyLCBodW50cmxlYWtzKQogICAgICAgICAgICAgdGVzdF90aW1lID0gdGltZS50aW1lKCkgLSBzdGFydF90aW1lCiAgICAgZXhjZXB0IHN1cHBvcnQuUmVzb3VyY2VEZW5pZWQgYXMgbXNnOgogICAgICAgICBpZiBub3QgcXVpZXQ6CkBAIC0xMzI4LDQxICsxMzg0LDUwIEBACiAgICAgICAgIGZvciBvYmogaW4gYWJjLl9fc3ViY2xhc3Nlc19fKCkgKyBbYWJjXToKICAgICAgICAgICAgIGFiY3Nbb2JqXSA9IG9iai5fYWJjX3JlZ2lzdHJ5LmNvcHkoKQogCi0gICAgaWYgaW5kaXJlY3RfdGVzdDoKLSAgICAgICAgZGVmIHJ1bl90aGVfdGVzdCgpOgotICAgICAgICAgICAgaW5kaXJlY3RfdGVzdCgpCi0gICAgZWxzZToKLSAgICAgICAgZGVmIHJ1bl90aGVfdGVzdCgpOgotICAgICAgICAgICAgZGVsIHN5cy5tb2R1bGVzW3RoZV9tb2R1bGUuX19uYW1lX19dCi0gICAgICAgICAgICBleGVjKCdpbXBvcnQgJyArIHRoZV9tb2R1bGUuX19uYW1lX18pCi0KLSAgICBkZWx0YXMgPSBbXQogICAgIG53YXJtdXAsIG50cmFja2VkLCBmbmFtZSA9IGh1bnRybGVha3MKICAgICBmbmFtZSA9IG9zLnBhdGguam9pbihzdXBwb3J0LlNBVkVEQ1dELCBmbmFtZSkKICAgICByZXBjb3VudCA9IG53YXJtdXAgKyBudHJhY2tlZAorICAgIHJjX2RlbHRhcyA9IFswXSAqIHJlcGNvdW50CisgICAgYWxsb2NfZGVsdGFzID0gWzBdICogcmVwY291bnQKKwogICAgIHByaW50KCJiZWdpbm5pbmciLCByZXBjb3VudCwgInJlcGV0aXRpb25zIiwgZmlsZT1zeXMuc3RkZXJyKQogICAgIHByaW50KCgiMTIzNDU2Nzg5MCIqKHJlcGNvdW50Ly8xMCArIDEpKVs6cmVwY291bnRdLCBmaWxlPXN5cy5zdGRlcnIpCiAgICAgc3lzLnN0ZGVyci5mbHVzaCgpCi0gICAgZGFzaF9SX2NsZWFudXAoZnMsIHBzLCBwaWMsIHpkYywgYWJjcykKICAgICBmb3IgaSBpbiByYW5nZShyZXBjb3VudCk6Ci0gICAgICAgIHJjX2JlZm9yZSA9IHN5cy5nZXR0b3RhbHJlZmNvdW50KCkKLSAgICAgICAgcnVuX3RoZV90ZXN0KCkKKyAgICAgICAgaW5kaXJlY3RfdGVzdCgpCisgICAgICAgIGFsbG9jX2FmdGVyLCByY19hZnRlciA9IGRhc2hfUl9jbGVhbnVwKGZzLCBwcywgcGljLCB6ZGMsIGFiY3MpCiAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJy4nKQogICAgICAgICBzeXMuc3RkZXJyLmZsdXNoKCkKLSAgICAgICAgZGFzaF9SX2NsZWFudXAoZnMsIHBzLCBwaWMsIHpkYywgYWJjcykKLSAgICAgICAgcmNfYWZ0ZXIgPSBzeXMuZ2V0dG90YWxyZWZjb3VudCgpCiAgICAgICAgIGlmIGkgPj0gbndhcm11cDoKLSAgICAgICAgICAgIGRlbHRhcy5hcHBlbmQocmNfYWZ0ZXIgLSByY19iZWZvcmUpCisgICAgICAgICAgICByY19kZWx0YXNbaV0gPSByY19hZnRlciAtIHJjX2JlZm9yZQorICAgICAgICAgICAgYWxsb2NfZGVsdGFzW2ldID0gYWxsb2NfYWZ0ZXIgLSBhbGxvY19iZWZvcmUKKyAgICAgICAgYWxsb2NfYmVmb3JlLCByY19iZWZvcmUgPSBhbGxvY19hZnRlciwgcmNfYWZ0ZXIKICAgICBwcmludChmaWxlPXN5cy5zdGRlcnIpCi0gICAgaWYgYW55KGRlbHRhcyk6Ci0gICAgICAgIG1zZyA9ICclcyBsZWFrZWQgJXMgcmVmZXJlbmNlcywgc3VtPSVzJyAlICh0ZXN0LCBkZWx0YXMsIHN1bShkZWx0YXMpKQotICAgICAgICBwcmludChtc2csIGZpbGU9c3lzLnN0ZGVycikKLSAgICAgICAgc3lzLnN0ZGVyci5mbHVzaCgpCi0gICAgICAgIHdpdGggb3BlbihmbmFtZSwgImEiKSBhcyByZWZyZXA6Ci0gICAgICAgICAgICBwcmludChtc2csIGZpbGU9cmVmcmVwKQotICAgICAgICAgICAgcmVmcmVwLmZsdXNoKCkKLSAgICAgICAgcmV0dXJuIFRydWUKLSAgICByZXR1cm4gRmFsc2UKKyAgICAjIFRoZXNlIGNoZWNrZXJzIHJldHVybiBGYWxzZSBvbiBzdWNjZXNzLCBUcnVlIG9uIGZhaWx1cmUKKyAgICBkZWYgY2hlY2tfcmNfZGVsdGFzKGRlbHRhcyk6CisgICAgICAgIHJldHVybiBhbnkoZGVsdGFzKQorICAgIGRlZiBjaGVja19hbGxvY19kZWx0YXMoZGVsdGFzKToKKyAgICAgICAgIyBBdCBsZWFzdCAxLzNyZCBvZiAwcworICAgICAgICBpZiAzICogZGVsdGFzLmNvdW50KDApIDwgbGVuKGRlbHRhcyk6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAjIE5vdGhpbmcgZWxzZSB0aGFuIDFzLCAwcyBhbmQgLTFzCisgICAgICAgIGlmIG5vdCBzZXQoZGVsdGFzKSA8PSB7MSwwLC0xfToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBGYWxzZQorICAgIGZhaWxlZCA9IEZhbHNlCisgICAgZm9yIGRlbHRhcywgaXRlbV9uYW1lLCBjaGVja2VyIGluIFsKKyAgICAgICAgKHJjX2RlbHRhcywgJ3JlZmVyZW5jZXMnLCBjaGVja19yY19kZWx0YXMpLAorICAgICAgICAoYWxsb2NfZGVsdGFzLCAnbWVtb3J5IGJsb2NrcycsIGNoZWNrX2FsbG9jX2RlbHRhcyldOgorICAgICAgICBpZiBjaGVja2VyKGRlbHRhcyk6CisgICAgICAgICAgICBtc2cgPSAnJXMgbGVha2VkICVzICVzLCBzdW09JXMnICUgKAorICAgICAgICAgICAgICAgIHRlc3QsIGRlbHRhc1tud2FybXVwOl0sIGl0ZW1fbmFtZSwgc3VtKGRlbHRhcykpCisgICAgICAgICAgICBwcmludChtc2csIGZpbGU9c3lzLnN0ZGVycikKKyAgICAgICAgICAgIHN5cy5zdGRlcnIuZmx1c2goKQorICAgICAgICAgICAgd2l0aCBvcGVuKGZuYW1lLCAiYSIpIGFzIHJlZnJlcDoKKyAgICAgICAgICAgICAgICBwcmludChtc2csIGZpbGU9cmVmcmVwKQorICAgICAgICAgICAgICAgIHJlZnJlcC5mbHVzaCgpCisgICAgICAgICAgICBmYWlsZWQgPSBUcnVlCisgICAgcmV0dXJuIGZhaWxlZAogCiBkZWYgZGFzaF9SX2NsZWFudXAoZnMsIHBzLCBwaWMsIHpkYywgYWJjcyk6CiAgICAgaW1wb3J0IGdjLCBjb3B5cmVnCkBAIC0xNDI4LDggKzE0OTMsMTEgQEAKICAgICBlbHNlOgogICAgICAgICBjdHlwZXMuX3Jlc2V0X2NhY2hlKCkKIAotICAgICMgQ29sbGVjdCBjeWNsaWMgdHJhc2guCisgICAgIyBDb2xsZWN0IGN5Y2xpYyB0cmFzaCBhbmQgcmVhZCBtZW1vcnkgc3RhdGlzdGljcyBpbW1lZGlhdGVseSBhZnRlci4KKyAgICBmdW5jMSA9IHN5cy5nZXRhbGxvY2F0ZWRibG9ja3MKKyAgICBmdW5jMiA9IHN5cy5nZXR0b3RhbHJlZmNvdW50CiAgICAgZ2MuY29sbGVjdCgpCisgICAgcmV0dXJuIGZ1bmMxKCksIGZ1bmMyKCkKIAogZGVmIHdhcm1fY2FjaGVzKCk6CiAgICAgIyBjaGFyIGNhY2hlCkBAIC0xNDcyLDMwNyArMTU0MCwxMCBAQAogICAgIHByaW50KGZpbGwoJyAnLmpvaW4oc3RyKGVsdCkgZm9yIGVsdCBpbiBzb3J0ZWQoeCkpLCB3aWR0aCwKICAgICAgICAgICAgICAgIGluaXRpYWxfaW5kZW50PWJsYW5rcywgc3Vic2VxdWVudF9pbmRlbnQ9YmxhbmtzKSkKIAotIyBNYXAgc3lzLnBsYXRmb3JtIHRvIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGJhc2VuYW1lcyBvZiB0ZXN0cwotIyBleHBlY3RlZCB0byBiZSBza2lwcGVkIG9uIHRoYXQgcGxhdGZvcm0uCi0jCi0jIFNwZWNpYWwgY2FzZXM6Ci0jICAgICB0ZXN0X3BlcDI3NwotIyAgICAgICAgIFRoZSBfRXhwZWN0ZWRTa2lwcyBjb25zdHJ1Y3RvciBhZGRzIHRoaXMgdG8gdGhlIHNldCBvZiBleHBlY3RlZAotIyAgICAgICAgIHNraXBzIGlmIG5vdCBvcy5wYXRoLnN1cHBvcnRzX3VuaWNvZGVfZmlsZW5hbWVzLgotIyAgICAgdGVzdF90aW1lb3V0Ci0jICAgICAgICAgQ29udHJvbGxlZCBieSB0ZXN0X3RpbWVvdXQuc2tpcF9leHBlY3RlZC4gIFJlcXVpcmVzIHRoZSBuZXR3b3JrCi0jICAgICAgICAgcmVzb3VyY2UgYW5kIGEgc29ja2V0IG1vZHVsZS4KLSMKLSMgVGVzdHMgdGhhdCBhcmUgZXhwZWN0ZWQgdG8gYmUgc2tpcHBlZCBldmVyeXdoZXJlIGV4Y2VwdCBvbiBvbmUgcGxhdGZvcm0KLSMgYXJlIGFsc28gaGFuZGxlZCBzZXBhcmF0ZWx5LgogCi1fZXhwZWN0YXRpb25zID0gKAotICAgICgnd2luMzInLAotICAgICAgICAiIiIKLSAgICAgICAgdGVzdF9fbG9jYWxlCi0gICAgICAgIHRlc3RfY3J5cHQKLSAgICAgICAgdGVzdF9jdXJzZXMKLSAgICAgICAgdGVzdF9kYm0KLSAgICAgICAgdGVzdF9kZXZwb2xsCi0gICAgICAgIHRlc3RfZmNudGwKLSAgICAgICAgdGVzdF9mb3JrMQotICAgICAgICB0ZXN0X2Vwb2xsCi0gICAgICAgIHRlc3RfZGJtX2dudQotICAgICAgICB0ZXN0X2RibV9uZGJtCi0gICAgICAgIHRlc3RfZ3JwCi0gICAgICAgIHRlc3RfaW9jdGwKLSAgICAgICAgdGVzdF9sYXJnZWZpbGUKLSAgICAgICAgdGVzdF9rcXVldWUKLSAgICAgICAgdGVzdF9vcGVucHR5Ci0gICAgICAgIHRlc3Rfb3NzYXVkaW9kZXYKLSAgICAgICAgdGVzdF9waXBlcwotICAgICAgICB0ZXN0X3BvbGwKLSAgICAgICAgdGVzdF9wb3NpeAotICAgICAgICB0ZXN0X3B0eQotICAgICAgICB0ZXN0X3B3ZAotICAgICAgICB0ZXN0X3Jlc291cmNlCi0gICAgICAgIHRlc3Rfc2lnbmFsCi0gICAgICAgIHRlc3Rfc3lzbG9nCi0gICAgICAgIHRlc3RfdGhyZWFkc2lnbmFscwotICAgICAgICB0ZXN0X3dhaXQzCi0gICAgICAgIHRlc3Rfd2FpdDQKLSAgICAgICAgIiIiKSwKLSAgICAoJ2xpbnV4JywKLSAgICAgICAgIiIiCi0gICAgICAgIHRlc3RfY3Vyc2VzCi0gICAgICAgIHRlc3RfZGV2cG9sbAotICAgICAgICB0ZXN0X2xhcmdlZmlsZQotICAgICAgICB0ZXN0X2txdWV1ZQotICAgICAgICB0ZXN0X29zc2F1ZGlvZGV2Ci0gICAgICAgICIiIiksCi0gICAgKCd1bml4d2FyZScsCi0gICAgICAgICIiIgotICAgICAgICB0ZXN0X2Vwb2xsCi0gICAgICAgIHRlc3RfbGFyZ2VmaWxlCi0gICAgICAgIHRlc3Rfa3F1ZXVlCi0gICAgICAgIHRlc3RfbWluaWRvbQotICAgICAgICB0ZXN0X29wZW5wdHkKLSAgICAgICAgdGVzdF9weWV4cGF0Ci0gICAgICAgIHRlc3Rfc2F4Ci0gICAgICAgIHRlc3Rfc3VuZHJ5Ci0gICAgICAgICIiIiksCi0gICAgKCdvcGVudW5peCcsCi0gICAgICAgICIiIgotICAgICAgICB0ZXN0X2Vwb2xsCi0gICAgICAgIHRlc3RfbGFyZ2VmaWxlCi0gICAgICAgIHRlc3Rfa3F1ZXVlCi0gICAgICAgIHRlc3RfbWluaWRvbQotICAgICAgICB0ZXN0X29wZW5wdHkKLSAgICAgICAgdGVzdF9weWV4cGF0Ci0gICAgICAgIHRlc3Rfc2F4Ci0gICAgICAgIHRlc3Rfc3VuZHJ5Ci0gICAgICAgICIiIiksCi0gICAgKCdzY29fc3YnLAotICAgICAgICAiIiIKLSAgICAgICAgdGVzdF9hc3luY2hhdAotICAgICAgICB0ZXN0X2ZvcmsxCi0gICAgICAgIHRlc3RfZXBvbGwKLSAgICAgICAgdGVzdF9nZXR0ZXh0Ci0gICAgICAgIHRlc3RfbGFyZ2VmaWxlCi0gICAgICAgIHRlc3RfbG9jYWxlCi0gICAgICAgIHRlc3Rfa3F1ZXVlCi0gICAgICAgIHRlc3RfbWluaWRvbQotICAgICAgICB0ZXN0X29wZW5wdHkKLSAgICAgICAgdGVzdF9weWV4cGF0Ci0gICAgICAgIHRlc3RfcXVldWUKLSAgICAgICAgdGVzdF9zYXgKLSAgICAgICAgdGVzdF9zdW5kcnkKLSAgICAgICAgdGVzdF90aHJlYWQKLSAgICAgICAgdGVzdF90aHJlYWRlZF9pbXBvcnQKLSAgICAgICAgdGVzdF90aHJlYWRlZHRlbXBmaWxlCi0gICAgICAgIHRlc3RfdGhyZWFkaW5nCi0gICAgICAgICIiIiksCi0gICAgKCdkYXJ3aW4nLAotICAgICAgICAiIiIKLSAgICAgICAgdGVzdF9fbG9jYWxlCi0gICAgICAgIHRlc3RfY3Vyc2VzCi0gICAgICAgIHRlc3RfZGV2cG9sbAotICAgICAgICB0ZXN0X2Vwb2xsCi0gICAgICAgIHRlc3RfZGJtX2dudQotICAgICAgICB0ZXN0X2dkYgotICAgICAgICB0ZXN0X2xhcmdlZmlsZQotICAgICAgICB0ZXN0X2xvY2FsZQotICAgICAgICB0ZXN0X21pbmlkb20KLSAgICAgICAgdGVzdF9vc3NhdWRpb2RldgotICAgICAgICB0ZXN0X3BvbGwKLSAgICAgICAgIiIiKSwKLSAgICAoJ3N1bm9zJywKLSAgICAgICAgIiIiCi0gICAgICAgIHRlc3RfY3Vyc2VzCi0gICAgICAgIHRlc3RfZGJtCi0gICAgICAgIHRlc3RfZXBvbGwKLSAgICAgICAgdGVzdF9rcXVldWUKLSAgICAgICAgdGVzdF9kYm1fZ251Ci0gICAgICAgIHRlc3RfZ3ppcAotICAgICAgICB0ZXN0X29wZW5wdHkKLSAgICAgICAgdGVzdF96aXBmaWxlCi0gICAgICAgIHRlc3RfemxpYgotICAgICAgICAiIiIpLAotICAgICgnaHAtdXgnLAotICAgICAgICAiIiIKLSAgICAgICAgdGVzdF9jdXJzZXMKLSAgICAgICAgdGVzdF9lcG9sbAotICAgICAgICB0ZXN0X2RibV9nbnUKLSAgICAgICAgdGVzdF9nemlwCi0gICAgICAgIHRlc3RfbGFyZ2VmaWxlCi0gICAgICAgIHRlc3RfbG9jYWxlCi0gICAgICAgIHRlc3Rfa3F1ZXVlCi0gICAgICAgIHRlc3RfbWluaWRvbQotICAgICAgICB0ZXN0X29wZW5wdHkKLSAgICAgICAgdGVzdF9weWV4cGF0Ci0gICAgICAgIHRlc3Rfc2F4Ci0gICAgICAgIHRlc3RfemlwZmlsZQotICAgICAgICB0ZXN0X3psaWIKLSAgICAgICAgIiIiKSwKLSAgICAoJ2N5Z3dpbicsCi0gICAgICAgICIiIgotICAgICAgICB0ZXN0X2N1cnNlcwotICAgICAgICB0ZXN0X2RibQotICAgICAgICB0ZXN0X2RldnBvbGwKLSAgICAgICAgdGVzdF9lcG9sbAotICAgICAgICB0ZXN0X2lvY3RsCi0gICAgICAgIHRlc3Rfa3F1ZXVlCi0gICAgICAgIHRlc3RfbGFyZ2VmaWxlCi0gICAgICAgIHRlc3RfbG9jYWxlCi0gICAgICAgIHRlc3Rfb3NzYXVkaW9kZXYKLSAgICAgICAgdGVzdF9zb2NrZXRzZXJ2ZXIKLSAgICAgICAgIiIiKSwKLSAgICAoJ29zMmVteCcsCi0gICAgICAgICIiIgotICAgICAgICB0ZXN0X2F1ZGlvb3AKLSAgICAgICAgdGVzdF9jdXJzZXMKLSAgICAgICAgdGVzdF9lcG9sbAotICAgICAgICB0ZXN0X2txdWV1ZQotICAgICAgICB0ZXN0X2xhcmdlZmlsZQotICAgICAgICB0ZXN0X21tYXAKLSAgICAgICAgdGVzdF9vcGVucHR5Ci0gICAgICAgIHRlc3Rfb3NzYXVkaW9kZXYKLSAgICAgICAgdGVzdF9wdHkKLSAgICAgICAgdGVzdF9yZXNvdXJjZQotICAgICAgICB0ZXN0X3NpZ25hbAotICAgICAgICAiIiIpLAotICAgICgnZnJlZWJzZCcsCi0gICAgICAgICIiIgotICAgICAgICB0ZXN0X2RldnBvbGwKLSAgICAgICAgdGVzdF9lcG9sbAotICAgICAgICB0ZXN0X2RibV9nbnUKLSAgICAgICAgdGVzdF9sb2NhbGUKLSAgICAgICAgdGVzdF9vc3NhdWRpb2RldgotICAgICAgICB0ZXN0X3BlcDI3NwotICAgICAgICB0ZXN0X3B0eQotICAgICAgICB0ZXN0X3NvY2tldHNlcnZlcgotICAgICAgICB0ZXN0X3RjbAotICAgICAgICB0ZXN0X3RrCi0gICAgICAgIHRlc3RfdHRrX2d1aW9ubHkKLSAgICAgICAgdGVzdF90dGtfdGV4dG9ubHkKLSAgICAgICAgdGVzdF90aW1lb3V0Ci0gICAgICAgIHRlc3RfdXJsbGlibmV0Ci0gICAgICAgIHRlc3RfbXVsdGlwcm9jZXNzaW5nCi0gICAgICAgICIiIiksCi0gICAgKCdhaXgnLAotICAgICAgICAiIiIKLSAgICAgICAgdGVzdF9iejIKLSAgICAgICAgdGVzdF9lcG9sbAotICAgICAgICB0ZXN0X2RibV9nbnUKLSAgICAgICAgdGVzdF9nemlwCi0gICAgICAgIHRlc3Rfa3F1ZXVlCi0gICAgICAgIHRlc3Rfb3NzYXVkaW9kZXYKLSAgICAgICAgdGVzdF90Y2wKLSAgICAgICAgdGVzdF90awotICAgICAgICB0ZXN0X3R0a19ndWlvbmx5Ci0gICAgICAgIHRlc3RfdHRrX3RleHRvbmx5Ci0gICAgICAgIHRlc3RfemlwaW1wb3J0Ci0gICAgICAgIHRlc3RfemxpYgotICAgICAgICAiIiIpLAotICAgICgnb3BlbmJzZCcsCi0gICAgICAgICIiIgotICAgICAgICB0ZXN0X2N0eXBlcwotICAgICAgICB0ZXN0X2RldnBvbGwKLSAgICAgICAgdGVzdF9lcG9sbAotICAgICAgICB0ZXN0X2RibV9nbnUKLSAgICAgICAgdGVzdF9sb2NhbGUKLSAgICAgICAgdGVzdF9ub3JtYWxpemF0aW9uCi0gICAgICAgIHRlc3Rfb3NzYXVkaW9kZXYKLSAgICAgICAgdGVzdF9wZXAyNzcKLSAgICAgICAgdGVzdF90Y2wKLSAgICAgICAgdGVzdF90awotICAgICAgICB0ZXN0X3R0a19ndWlvbmx5Ci0gICAgICAgIHRlc3RfdHRrX3RleHRvbmx5Ci0gICAgICAgIHRlc3RfbXVsdGlwcm9jZXNzaW5nCi0gICAgICAgICIiIiksCi0gICAgKCduZXRic2QnLAotICAgICAgICAiIiIKLSAgICAgICAgdGVzdF9jdHlwZXMKLSAgICAgICAgdGVzdF9jdXJzZXMKLSAgICAgICAgdGVzdF9kZXZwb2xsCi0gICAgICAgIHRlc3RfZXBvbGwKLSAgICAgICAgdGVzdF9kYm1fZ251Ci0gICAgICAgIHRlc3RfbG9jYWxlCi0gICAgICAgIHRlc3Rfb3NzYXVkaW9kZXYKLSAgICAgICAgdGVzdF9wZXAyNzcKLSAgICAgICAgdGVzdF90Y2wKLSAgICAgICAgdGVzdF90awotICAgICAgICB0ZXN0X3R0a19ndWlvbmx5Ci0gICAgICAgIHRlc3RfdHRrX3RleHRvbmx5Ci0gICAgICAgIHRlc3RfbXVsdGlwcm9jZXNzaW5nCi0gICAgICAgICIiIiksCi0pCi0KLWNsYXNzIF9FeHBlY3RlZFNraXBzOgotICAgIGRlZiBfX2luaXRfXyhzZWxmKToKLSAgICAgICAgaW1wb3J0IG9zLnBhdGgKLSAgICAgICAgZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3RpbWVvdXQKLQotICAgICAgICBzZWxmLnZhbGlkID0gRmFsc2UKLSAgICAgICAgZXhwZWN0ZWQgPSBOb25lCi0gICAgICAgIGZvciBpdGVtIGluIF9leHBlY3RhdGlvbnM6Ci0gICAgICAgICAgICBpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aChpdGVtWzBdKToKLSAgICAgICAgICAgICAgICBleHBlY3RlZCA9IGl0ZW1bMV0KLSAgICAgICAgICAgICAgICBicmVhawotICAgICAgICBpZiBleHBlY3RlZCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHNlbGYuZXhwZWN0ZWQgPSBzZXQoZXhwZWN0ZWQuc3BsaXQoKSkKLQotICAgICAgICAgICAgIyBUaGVzZSBhcmUgYnJva2VuIHRlc3RzLCBmb3Igbm93IHNraXBwZWQgb24gZXZlcnkgcGxhdGZvcm0uCi0gICAgICAgICAgICAjIFhYWCBGaXggdGhlc2UhCi0gICAgICAgICAgICBzZWxmLmV4cGVjdGVkLmFkZCgndGVzdF9uaXMnKQotCi0gICAgICAgICAgICAjIGV4cGVjdGVkIHRvIGJlIHNraXBwZWQgb24gZXZlcnkgcGxhdGZvcm0sIGV2ZW4gTGludXgKLSAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLnN1cHBvcnRzX3VuaWNvZGVfZmlsZW5hbWVzOgotICAgICAgICAgICAgICAgIHNlbGYuZXhwZWN0ZWQuYWRkKCd0ZXN0X3BlcDI3NycpCi0KLSAgICAgICAgICAgICMgZG9jdGVzdCwgcHJvZmlsZSBhbmQgY1Byb2ZpbGUgdGVzdHMgZmFpbCB3aGVuIHRoZSBjb2RlYyBmb3IgdGhlCi0gICAgICAgICAgICAjIGZzIGVuY29kaW5nIGlzbid0IGJ1aWx0IGluIGJlY2F1c2UgUHlVbmljb2RlX0RlY29kZSgpIGFkZHMgdHdvCi0gICAgICAgICAgICAjIGNhbGxzIGludG8gUHl0aG9uLgotICAgICAgICAgICAgZW5jcyA9ICgidXRmLTgiLCAibGF0aW4tMSIsICJhc2NpaSIsICJtYmNzIiwgInV0Zi0xNiIsICJ1dGYtMzIiKQotICAgICAgICAgICAgaWYgc3lzLmdldGZpbGVzeXN0ZW1lbmNvZGluZygpLmxvd2VyKCkgbm90IGluIGVuY3M6Ci0gICAgICAgICAgICAgICAgc2VsZi5leHBlY3RlZC5hZGQoJ3Rlc3RfcHJvZmlsZScpCi0gICAgICAgICAgICAgICAgc2VsZi5leHBlY3RlZC5hZGQoJ3Rlc3RfY1Byb2ZpbGUnKQotICAgICAgICAgICAgICAgIHNlbGYuZXhwZWN0ZWQuYWRkKCd0ZXN0X2RvY3Rlc3QnKQotCi0gICAgICAgICAgICBpZiB0ZXN0X3RpbWVvdXQuc2tpcF9leHBlY3RlZDoKLSAgICAgICAgICAgICAgICBzZWxmLmV4cGVjdGVkLmFkZCgndGVzdF90aW1lb3V0JykKLQotICAgICAgICAgICAgaWYgc3lzLnBsYXRmb3JtICE9ICJ3aW4zMiI6Ci0gICAgICAgICAgICAgICAgIyB0ZXN0X3NxbGl0ZSBpcyBvbmx5IHJlbGlhYmxlIG9uIFdpbmRvd3Mgd2hlcmUgdGhlIGxpYnJhcnkKLSAgICAgICAgICAgICAgICAjIGlzIGRpc3RyaWJ1dGVkIHdpdGggUHl0aG9uCi0gICAgICAgICAgICAgICAgV0lOX09OTFkgPSB7InRlc3RfdW5pY29kZV9maWxlIiwgInRlc3Rfd2lucmVnIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdF93aW5zb3VuZCIsICJ0ZXN0X3N0YXJ0ZmlsZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3Rfc3FsaXRlIiwgInRlc3RfbXNpbGliIn0KLSAgICAgICAgICAgICAgICBzZWxmLmV4cGVjdGVkIHw9IFdJTl9PTkxZCi0KLSAgICAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSAhPSAnc3Vub3M1JzoKLSAgICAgICAgICAgICAgICBzZWxmLmV4cGVjdGVkLmFkZCgndGVzdF9uaXMnKQotCi0gICAgICAgICAgICBpZiBzdXBwb3J0LnB5dGhvbl9pc19vcHRpbWl6ZWQoKToKLSAgICAgICAgICAgICAgICBzZWxmLmV4cGVjdGVkLmFkZCgidGVzdF9nZGIiKQotCi0gICAgICAgICAgICBzZWxmLnZhbGlkID0gVHJ1ZQotCi0gICAgZGVmIGlzdmFsaWQoc2VsZik6Ci0gICAgICAgICJSZXR1cm4gdHJ1ZSBpZmYgX0V4cGVjdGVkU2tpcHMga25vd3MgYWJvdXQgdGhlIGN1cnJlbnQgcGxhdGZvcm0uIgotICAgICAgICByZXR1cm4gc2VsZi52YWxpZAotCi0gICAgZGVmIGdldGV4cGVjdGVkKHNlbGYpOgotICAgICAgICAiIiJSZXR1cm4gc2V0IG9mIHRlc3QgbmFtZXMgd2UgZXhwZWN0IHRvIHNraXAgb24gY3VycmVudCBwbGF0Zm9ybS4KLQotICAgICAgICBzZWxmLmlzdmFsaWQoKSBtdXN0IGJlIHRydWUuCi0gICAgICAgICIiIgotCi0gICAgICAgIGFzc2VydCBzZWxmLmlzdmFsaWQoKQotICAgICAgICByZXR1cm4gc2VsZi5leHBlY3RlZAotCi1kZWYgX21ha2VfdGVtcF9kaXJfZm9yX2J1aWxkKFRFTVBESVIpOgotICAgICMgV2hlbiB0ZXN0cyBhcmUgcnVuIGZyb20gdGhlIFB5dGhvbiBidWlsZCBkaXJlY3RvcnksIGl0IGlzIGJlc3QgcHJhY3RpY2UKLSAgICAjIHRvIGtlZXAgdGhlIHRlc3QgZmlsZXMgaW4gYSBzdWJmb2xkZXIuICBJdCBlYXNlcyB0aGUgY2xlYW51cCBvZiBsZWZ0b3ZlcgotICAgICMgZmlsZXMgdXNpbmcgY29tbWFuZCAibWFrZSBkaXN0Y2xlYW4iLgorZGVmIG1haW5faW5fdGVtcF9jd2QoKToKKyAgICAiIiJSdW4gbWFpbigpIGluIGEgdGVtcG9yYXJ5IHdvcmtpbmcgZGlyZWN0b3J5LiIiIgogICAgIGlmIHN5c2NvbmZpZy5pc19weXRob25fYnVpbGQoKToKLSAgICAgICAgVEVNUERJUiA9IG9zLnBhdGguam9pbihzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ3NyY2RpcicpLCAnYnVpbGQnKQotICAgICAgICBURU1QRElSID0gb3MucGF0aC5hYnNwYXRoKFRFTVBESVIpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG9zLm1rZGlyKFRFTVBESVIpCiAgICAgICAgIGV4Y2VwdCBGaWxlRXhpc3RzRXJyb3I6CkBAIC0xNzgxLDEwICsxNTUyLDE2IEBACiAgICAgIyBEZWZpbmUgYSB3cml0YWJsZSB0ZW1wIGRpciB0aGF0IHdpbGwgYmUgdXNlZCBhcyBjd2Qgd2hpbGUgcnVubmluZwogICAgICMgdGhlIHRlc3RzLiBUaGUgbmFtZSBvZiB0aGUgZGlyIGluY2x1ZGVzIHRoZSBwaWQgdG8gYWxsb3cgcGFyYWxsZWwKICAgICAjIHRlc3RpbmcgKHNlZSB0aGUgLWogb3B0aW9uKS4KLSAgICBURVNUQ1dEID0gJ3Rlc3RfcHl0aG9uX3t9Jy5mb3JtYXQob3MuZ2V0cGlkKCkpCisgICAgdGVzdF9jd2QgPSAndGVzdF9weXRob25fe30nLmZvcm1hdChvcy5nZXRwaWQoKSkKKyAgICB0ZXN0X2N3ZCA9IG9zLnBhdGguam9pbihURU1QRElSLCB0ZXN0X2N3ZCkKIAotICAgIFRFU1RDV0QgPSBvcy5wYXRoLmpvaW4oVEVNUERJUiwgVEVTVENXRCkKLSAgICByZXR1cm4gVEVNUERJUiwgVEVTVENXRAorICAgICMgUnVuIHRoZSB0ZXN0cyBpbiBhIGNvbnRleHQgbWFuYWdlciB0aGF0IHRlbXBvcmFyaWx5IGNoYW5nZXMgdGhlIENXRCB0byBhCisgICAgIyB0ZW1wb3JhcnkgYW5kIHdyaXRhYmxlIGRpcmVjdG9yeS4gIElmIGl0J3Mgbm90IHBvc3NpYmxlIHRvIGNyZWF0ZSBvcgorICAgICMgY2hhbmdlIHRoZSBDV0QsIHRoZSBvcmlnaW5hbCBDV0Qgd2lsbCBiZSB1c2VkLiAgVGhlIG9yaWdpbmFsIENXRCBpcworICAgICMgYXZhaWxhYmxlIGZyb20gc3VwcG9ydC5TQVZFRENXRC4KKyAgICB3aXRoIHN1cHBvcnQudGVtcF9jd2QodGVzdF9jd2QsIHF1aWV0PVRydWUpOgorICAgICAgICBtYWluKCkKKwogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgICMgUmVtb3ZlIHJlZ3J0ZXN0LnB5J3Mgb3duIGRpcmVjdG9yeSBmcm9tIHRoZSBtb2R1bGUgc2VhcmNoIHBhdGguIERlc3BpdGUKQEAgLTE4MDgsMTEgKzE1ODUsNCBAQAogICAgICMgc2FuaXR5IGNoZWNrCiAgICAgYXNzZXJ0IF9fZmlsZV9fID09IG9zLnBhdGguYWJzcGF0aChzeXMuYXJndlswXSkKIAotICAgIFRFTVBESVIsIFRFU1RDV0QgPSBfbWFrZV90ZW1wX2Rpcl9mb3JfYnVpbGQoVEVNUERJUikKLQotICAgICMgUnVuIHRoZSB0ZXN0cyBpbiBhIGNvbnRleHQgbWFuYWdlciB0aGF0IHRlbXBvcmFyeSBjaGFuZ2VzIHRoZSBDV0QgdG8gYQotICAgICMgdGVtcG9yYXJ5IGFuZCB3cml0YWJsZSBkaXJlY3RvcnkuIElmIGl0J3Mgbm90IHBvc3NpYmxlIHRvIGNyZWF0ZSBvcgotICAgICMgY2hhbmdlIHRoZSBDV0QsIHRoZSBvcmlnaW5hbCBDV0Qgd2lsbCBiZSB1c2VkLiBUaGUgb3JpZ2luYWwgQ1dEIGlzCi0gICAgIyBhdmFpbGFibGUgZnJvbSBzdXBwb3J0LlNBVkVEQ1dELgotICAgIHdpdGggc3VwcG9ydC50ZW1wX2N3ZChURVNUQ1dELCBxdWlldD1UcnVlKToKLSAgICAgICAgbWFpbigpCisgICAgbWFpbl9pbl90ZW1wX2N3ZCgpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9yZXZvY2F0aW9uLmNybCBiL0xpYi90ZXN0L3Jldm9jYXRpb24uY3JsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkODliMDgKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC9yZXZvY2F0aW9uLmNybApAQCAtMCwwICsxLDExIEBACistLS0tLUJFR0lOIFg1MDkgQ1JMLS0tLS0KK01JSUJwakNCandJQkFUQU5CZ2txaGtpRzl3MEJBUVVGQURCTk1Rc3dDUVlEVlFRR0V3SllXVEVtTUNRR0ExVUUKK0Nnd2RVSGwwYUc5dUlGTnZablIzWVhKbElFWnZkVzVrWVhScGIyNGdRMEV4RmpBVUJnTlZCQU1NRFc5MWNpMWoKK1lTMXpaWEoyWlhJWERURXpNVEV5TVRFM01EZzBOMW9YRFRJek1Ea3pNREUzTURnME4xcWdEakFNTUFvR0ExVWQKK0ZBUURBZ0VBTUEwR0NTcUdTSWIzRFFFQkJRVUFBNElCQVFDTkpYQzJtVkthdUVlTjNMbFEzWnRNNWdrSDNFeEgKKytpNGJtSmp0Sm40OTdXd3Z2b0llVWRybVZYZ0pRUjkzUnRWMzdoWndOMFNYTUxsTm1VWlBINHJIaGloYXl3NG0KK3VuQ3pWai9PaENDWTcvVFBqS3VKMU8vMFhoYUxCcEJWalFON1IvMXVqb1JLYlNpYS9DRDN2Y243RnF4enc3TEsKK2ZTUkNLUkdUajFDWml1eHJwaHRGY2h3QUxYU2lGRHk5bXIyWktoSW1jeXExUHlkZmdFelU3OEFQcE9rTVFzSUMKK1VOSi9jZjNjOWVtemYrZFV0Y01FY2VqUTNteW5CbzRlSUdnMUVXNDJiejRxNGhTanpRbEtjQlYwbXV3NXFYaGMKK0hPeEgyaVRGaFE3U3J2VnVLL2RNMTRyWU00QjVtU1gzblJDMWtObVhwUzlqM3dKRGh1d21qSGVkCistLS0tLUVORCBYNTA5IENSTC0tLS0tCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9zY3JpcHRfaGVscGVyLnB5IGIvTGliL3Rlc3Qvc2NyaXB0X2hlbHBlci5weQppbmRleCBhYjIwMTY0Li5kMjc0OTZiIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9zY3JpcHRfaGVscGVyLnB5CisrKyBiL0xpYi90ZXN0L3NjcmlwdF9oZWxwZXIucHkKQEAgLTEsNiArMSw3IEBACiAjIENvbW1vbiB1dGlsaXR5IGZ1bmN0aW9ucyB1c2VkIGJ5IHZhcmlvdXMgc2NyaXB0IGV4ZWN1dGlvbiB0ZXN0cwogIyAgZS5nLiB0ZXN0X2NtZF9saW5lLCB0ZXN0X2NtZF9saW5lX3NjcmlwdCBhbmQgdGVzdF9ydW5weQogCitpbXBvcnQgY29sbGVjdGlvbnMKIGltcG9ydCBpbXBvcnRsaWIKIGltcG9ydCBzeXMKIGltcG9ydCBvcwpAQCAtMTIsMTMgKzEzLDYyIEBACiBpbXBvcnQgc2h1dGlsCiBpbXBvcnQgemlwZmlsZQogCi1mcm9tIGltcCBpbXBvcnQgc291cmNlX2Zyb21fY2FjaGUKK2Zyb20gaW1wb3J0bGliLnV0aWwgaW1wb3J0IHNvdXJjZV9mcm9tX2NhY2hlCiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgbWFrZV9sZWdhY3lfcHljLCBzdHJpcF9weXRob25fc3RkZXJyLCB0ZW1wX2RpcgogCisKKyMgQ2FjaGVkIHJlc3VsdCBvZiB0aGUgZXhwZW5zaXZlIHRlc3QgcGVyZm9ybWVkIGluIHRoZSBmdW5jdGlvbiBiZWxvdy4KK19fY2FjaGVkX2ludGVycF9yZXF1aXJlc19lbnZpcm9ubWVudCA9IE5vbmUKKworZGVmIF9pbnRlcnByZXRlcl9yZXF1aXJlc19lbnZpcm9ubWVudCgpOgorICAgICIiIgorICAgIFJldHVybnMgVHJ1ZSBpZiBvdXIgc3lzLmV4ZWN1dGFibGUgaW50ZXJwcmV0ZXIgcmVxdWlyZXMgZW52aXJvbm1lbnQKKyAgICB2YXJpYWJsZXMgaW4gb3JkZXIgdG8gYmUgYWJsZSB0byBydW4gYXQgYWxsLgorCisgICAgVGhpcyBpcyBkZXNpZ25lZCB0byBiZSB1c2VkIHdpdGggQHVuaXR0ZXN0LnNraXBJZigpIHRvIGFubm90YXRlIHRlc3RzCisgICAgdGhhdCBuZWVkIHRvIHVzZSBhbiBhc3NlcnRfcHl0aG9uKigpIGZ1bmN0aW9uIHRvIGxhdW5jaCBhbiBpc29sYXRlZAorICAgIG1vZGUgKC1JKSBvciBubyBlbnZpcm9ubWVudCBtb2RlICgtRSkgc3ViLWludGVycHJldGVyIHByb2Nlc3MuCisKKyAgICBBIG5vcm1hbCBidWlsZCAmIHRlc3QgZG9lcyBub3QgcnVuIGludG8gdGhpcyBzaXR1YXRpb24gYnV0IGl0IGNhbiBoYXBwZW4KKyAgICB3aGVuIHRyeWluZyB0byBydW4gdGhlIHN0YW5kYXJkIGxpYnJhcnkgdGVzdCBzdWl0ZSBmcm9tIGFuIGludGVycHJldGVyIHRoYXQKKyAgICBkb2Vzbid0IGhhdmUgYW4gb2J2aW91cyBob21lIHdpdGggUHl0aG9uJ3MgY3VycmVudCBob21lIGZpbmRpbmcgbG9naWMuCisKKyAgICBTZXR0aW5nIFBZVEhPTkhPTUUgaXMgb25lIHdheSB0byBnZXQgbW9zdCBvZiB0aGUgdGVzdHN1aXRlIHRvIHJ1biBpbiB0aGF0CisgICAgc2l0dWF0aW9uLiAgUFlUSE9OUEFUSCBvciBQWVRIT05VU0VSU0lURSBhcmUgb3RoZXIgY29tbW9uIGVudmlyb25tZW50CisgICAgdmFyaWFibGVzIHRoYXQgbWlnaHQgaW1wYWN0IHdoZXRoZXIgb3Igbm90IHRoZSBpbnRlcnByZXRlciBjYW4gc3RhcnQuCisgICAgIiIiCisgICAgZ2xvYmFsIF9fY2FjaGVkX2ludGVycF9yZXF1aXJlc19lbnZpcm9ubWVudAorICAgIGlmIF9fY2FjaGVkX2ludGVycF9yZXF1aXJlc19lbnZpcm9ubWVudCBpcyBOb25lOgorICAgICAgICAjIFRyeSBydW5uaW5nIGFuIGludGVycHJldGVyIHdpdGggLUUgdG8gc2VlIGlmIGl0IHdvcmtzIG9yIG5vdC4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3VicHJvY2Vzcy5jaGVja19jYWxsKFtzeXMuZXhlY3V0YWJsZSwgJy1FJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1jJywgJ2ltcG9ydCBzeXM7IHN5cy5leGl0KDApJ10pCisgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvcjoKKyAgICAgICAgICAgIF9fY2FjaGVkX2ludGVycF9yZXF1aXJlc19lbnZpcm9ubWVudCA9IFRydWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIF9fY2FjaGVkX2ludGVycF9yZXF1aXJlc19lbnZpcm9ubWVudCA9IEZhbHNlCisKKyAgICByZXR1cm4gX19jYWNoZWRfaW50ZXJwX3JlcXVpcmVzX2Vudmlyb25tZW50CisKKworX1B5dGhvblJ1blJlc3VsdCA9IGNvbGxlY3Rpb25zLm5hbWVkdHVwbGUoIl9QeXRob25SdW5SZXN1bHQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJyYyIsICJvdXQiLCAiZXJyIikpCisKKwogIyBFeGVjdXRpbmcgdGhlIGludGVycHJldGVyIGluIGEgc3VicHJvY2VzcwotZGVmIF9hc3NlcnRfcHl0aG9uKGV4cGVjdGVkX3N1Y2Nlc3MsICphcmdzLCAqKmVudl92YXJzKToKLSAgICBjbWRfbGluZSA9IFtzeXMuZXhlY3V0YWJsZV0KLSAgICBpZiBub3QgZW52X3ZhcnM6CitkZWYgcnVuX3B5dGhvbl91bnRpbF9lbmQoKmFyZ3MsICoqZW52X3ZhcnMpOgorICAgIGVudl9yZXF1aXJlZCA9IF9pbnRlcnByZXRlcl9yZXF1aXJlc19lbnZpcm9ubWVudCgpCisgICAgaWYgJ19faXNvbGF0ZWQnIGluIGVudl92YXJzOgorICAgICAgICBpc29sYXRlZCA9IGVudl92YXJzLnBvcCgnX19pc29sYXRlZCcpCisgICAgZWxzZToKKyAgICAgICAgaXNvbGF0ZWQgPSBub3QgZW52X3ZhcnMgYW5kIG5vdCBlbnZfcmVxdWlyZWQKKyAgICBjbWRfbGluZSA9IFtzeXMuZXhlY3V0YWJsZSwgJy1YJywgJ2ZhdWx0aGFuZGxlciddCisgICAgaWYgaXNvbGF0ZWQ6CisgICAgICAgICMgaXNvbGF0ZWQgbW9kZTogaWdub3JlIFB5dGhvbiBlbnZpcm9ubWVudCB2YXJpYWJsZXMsIGlnbm9yZSB1c2VyCisgICAgICAgICMgc2l0ZS1wYWNrYWdlcywgYW5kIGRvbid0IGFkZCB0aGUgY3VycmVudCBkaXJlY3RvcnkgdG8gc3lzLnBhdGgKKyAgICAgICAgY21kX2xpbmUuYXBwZW5kKCctSScpCisgICAgZWxpZiBub3QgZW52X3ZhcnMgYW5kIG5vdCBlbnZfcmVxdWlyZWQ6CisgICAgICAgICMgaWdub3JlIFB5dGhvbiBlbnZpcm9ubWVudCB2YXJpYWJsZXMKICAgICAgICAgY21kX2xpbmUuYXBwZW5kKCctRScpCiAgICAgIyBOZWVkIHRvIHByZXNlcnZlIHRoZSBvcmlnaW5hbCBlbnZpcm9ubWVudCwgZm9yIGluLXBsYWNlIHRlc3Rpbmcgb2YKICAgICAjIHNoYXJlZCBsaWJyYXJ5IGJ1aWxkcy4KQEAgLTM5LDM1ICs4OSw2MyBAQAogICAgICAgICBwLnN0ZG91dC5jbG9zZSgpCiAgICAgICAgIHAuc3RkZXJyLmNsb3NlKCkKICAgICByYyA9IHAucmV0dXJuY29kZQotICAgIGVyciA9ICBzdHJpcF9weXRob25fc3RkZXJyKGVycikKLSAgICBpZiAocmMgYW5kIGV4cGVjdGVkX3N1Y2Nlc3MpIG9yIChub3QgcmMgYW5kIG5vdCBleHBlY3RlZF9zdWNjZXNzKToKKyAgICBlcnIgPSBzdHJpcF9weXRob25fc3RkZXJyKGVycikKKyAgICByZXR1cm4gX1B5dGhvblJ1blJlc3VsdChyYywgb3V0LCBlcnIpLCBjbWRfbGluZQorCitkZWYgX2Fzc2VydF9weXRob24oZXhwZWN0ZWRfc3VjY2VzcywgKmFyZ3MsICoqZW52X3ZhcnMpOgorICAgIHJlcywgY21kX2xpbmUgPSBydW5fcHl0aG9uX3VudGlsX2VuZCgqYXJncywgKiplbnZfdmFycykKKyAgICBpZiAocmVzLnJjIGFuZCBleHBlY3RlZF9zdWNjZXNzKSBvciAobm90IHJlcy5yYyBhbmQgbm90IGV4cGVjdGVkX3N1Y2Nlc3MpOgogICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigKLSAgICAgICAgICAgICJQcm9jZXNzIHJldHVybiBjb2RlIGlzICVkLCAiCi0gICAgICAgICAgICAic3RkZXJyIGZvbGxvd3M6XG4lcyIgJSAocmMsIGVyci5kZWNvZGUoJ2FzY2lpJywgJ2lnbm9yZScpKSkKLSAgICByZXR1cm4gcmMsIG91dCwgZXJyCisgICAgICAgICAgICAiUHJvY2VzcyByZXR1cm4gY29kZSBpcyAlZCwgY29tbWFuZCBsaW5lIHdhczogJXIsICIKKyAgICAgICAgICAgICJzdGRlcnIgZm9sbG93czpcbiVzIiAlIChyZXMucmMsIGNtZF9saW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcy5lcnIuZGVjb2RlKCdhc2NpaScsICdpZ25vcmUnKSkpCisgICAgcmV0dXJuIHJlcwogCiBkZWYgYXNzZXJ0X3B5dGhvbl9vaygqYXJncywgKiplbnZfdmFycyk6CiAgICAgIiIiCiAgICAgQXNzZXJ0IHRoYXQgcnVubmluZyB0aGUgaW50ZXJwcmV0ZXIgd2l0aCBgYXJnc2AgYW5kIG9wdGlvbmFsIGVudmlyb25tZW50Ci0gICAgdmFyaWFibGVzIGBlbnZfdmFyc2AgaXMgb2sgYW5kIHJldHVybiBhIChyZXR1cm4gY29kZSwgc3Rkb3V0LCBzdGRlcnIpIHR1cGxlLgorICAgIHZhcmlhYmxlcyBgZW52X3ZhcnNgIHN1Y2NlZWRzIChyYyA9PSAwKSBhbmQgcmV0dXJuIGEgKHJldHVybiBjb2RlLCBzdGRvdXQsCisgICAgc3RkZXJyKSB0dXBsZS4KKworICAgIElmIHRoZSBfX2NsZWFuZW52IGtleXdvcmQgaXMgc2V0LCBlbnZfdmFycyBpcyB1c2VkIGFzIGEgZnJlc2ggZW52aXJvbm1lbnQuCisKKyAgICBQeXRob24gaXMgc3RhcnRlZCBpbiBpc29sYXRlZCBtb2RlIChjb21tYW5kIGxpbmUgb3B0aW9uIC1JKSwKKyAgICBleGNlcHQgaWYgdGhlIF9faXNvbGF0ZWQga2V5d29yZCBpcyBzZXQgdG8gRmFsc2UuCiAgICAgIiIiCiAgICAgcmV0dXJuIF9hc3NlcnRfcHl0aG9uKFRydWUsICphcmdzLCAqKmVudl92YXJzKQogCiBkZWYgYXNzZXJ0X3B5dGhvbl9mYWlsdXJlKCphcmdzLCAqKmVudl92YXJzKToKICAgICAiIiIKICAgICBBc3NlcnQgdGhhdCBydW5uaW5nIHRoZSBpbnRlcnByZXRlciB3aXRoIGBhcmdzYCBhbmQgb3B0aW9uYWwgZW52aXJvbm1lbnQKLSAgICB2YXJpYWJsZXMgYGVudl92YXJzYCBmYWlscyBhbmQgcmV0dXJuIGEgKHJldHVybiBjb2RlLCBzdGRvdXQsIHN0ZGVycikgdHVwbGUuCisgICAgdmFyaWFibGVzIGBlbnZfdmFyc2AgZmFpbHMgKHJjICE9IDApIGFuZCByZXR1cm4gYSAocmV0dXJuIGNvZGUsIHN0ZG91dCwKKyAgICBzdGRlcnIpIHR1cGxlLgorCisgICAgU2VlIGFzc2VydF9weXRob25fb2soKSBmb3IgbW9yZSBvcHRpb25zLgogICAgICIiIgogICAgIHJldHVybiBfYXNzZXJ0X3B5dGhvbihGYWxzZSwgKmFyZ3MsICoqZW52X3ZhcnMpCiAKLWRlZiBzcGF3bl9weXRob24oKmFyZ3MsICoqa3cpOgorZGVmIHNwYXduX3B5dGhvbigqYXJncywgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VULCAqKmt3KToKKyAgICAiIiJSdW4gYSBQeXRob24gc3VicHJvY2VzcyB3aXRoIHRoZSBnaXZlbiBhcmd1bWVudHMuCisKKyAgICBrdyBpcyBleHRyYSBrZXl3b3JkIGFyZ3MgdG8gcGFzcyB0byBzdWJwcm9jZXNzLlBvcGVuLiBSZXR1cm5zIGEgUG9wZW4KKyAgICBvYmplY3QuCisgICAgIiIiCiAgICAgY21kX2xpbmUgPSBbc3lzLmV4ZWN1dGFibGUsICctRSddCiAgICAgY21kX2xpbmUuZXh0ZW5kKGFyZ3MpCisgICAgIyBVbmRlciBGZWRvcmEgKD8pLCBHTlUgcmVhZGxpbmUgY2FuIG91dHB1dCBqdW5rIG9uIHN0ZGVyciB3aGVuIGluaXRpYWxpemVkLAorICAgICMgZGVwZW5kaW5nIG9uIHRoZSBURVJNIHNldHRpbmcuICBTZXR0aW5nIFRFUk09dnQxMDAgaXMgc3VwcG9zZWQgdG8gZGlzYWJsZQorICAgICMgdGhhdC4gIFJlZmVyZW5jZXM6CisgICAgIyAtIGh0dHA6Ly9yZWlub3V0LnZhbnJlZXMub3JnL3dlYmxvZy8yMDA5LzA4LzE0L3JlYWRsaW5lLWludmlzaWJsZS1jaGFyYWN0ZXItaGFjay5odG1sCisgICAgIyAtIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTU3NjA3MTIvcHl0aG9uLXJlYWRsaW5lLW1vZHVsZS1wcmludHMtZXNjYXBlLWNoYXJhY3Rlci1kdXJpbmctaW1wb3J0CisgICAgIyAtIGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctcmVhZGxpbmUvMjAwNy0wOC9tc2cwMDAwNC5odG1sCisgICAgZW52ID0ga3cuc2V0ZGVmYXVsdCgnZW52JywgZGljdChvcy5lbnZpcm9uKSkKKyAgICBlbnZbJ1RFUk0nXSA9ICd2dDEwMCcKICAgICByZXR1cm4gc3VicHJvY2Vzcy5Qb3BlbihjbWRfbGluZSwgc3RkaW49c3VicHJvY2Vzcy5QSVBFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3Rkb3V0LCBzdGRlcnI9c3RkZXJyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqa3cpCiAKIGRlZiBraWxsX3B5dGhvbihwKToKKyAgICAiIiJSdW4gdGhlIGdpdmVuIFBvcGVuIHByb2Nlc3MgdW50aWwgY29tcGxldGlvbiBhbmQgcmV0dXJuIHN0ZG91dC4iIiIKICAgICBwLnN0ZGluLmNsb3NlKCkKICAgICBkYXRhID0gcC5zdGRvdXQucmVhZCgpCiAgICAgcC5zdGRvdXQuY2xvc2UoKQpAQCAtNzcsOCArMTU1LDEwIEBACiAgICAgc3VicHJvY2Vzcy5fY2xlYW51cCgpCiAgICAgcmV0dXJuIGRhdGEKIAotZGVmIG1ha2Vfc2NyaXB0KHNjcmlwdF9kaXIsIHNjcmlwdF9iYXNlbmFtZSwgc291cmNlKToKLSAgICBzY3JpcHRfZmlsZW5hbWUgPSBzY3JpcHRfYmFzZW5hbWUrb3MuZXh0c2VwKydweScKK2RlZiBtYWtlX3NjcmlwdChzY3JpcHRfZGlyLCBzY3JpcHRfYmFzZW5hbWUsIHNvdXJjZSwgb21pdF9zdWZmaXg9RmFsc2UpOgorICAgIHNjcmlwdF9maWxlbmFtZSA9IHNjcmlwdF9iYXNlbmFtZQorICAgIGlmIG5vdCBvbWl0X3N1ZmZpeDoKKyAgICAgICAgc2NyaXB0X2ZpbGVuYW1lICs9IG9zLmV4dHNlcCArICdweScKICAgICBzY3JpcHRfbmFtZSA9IG9zLnBhdGguam9pbihzY3JpcHRfZGlyLCBzY3JpcHRfZmlsZW5hbWUpCiAgICAgIyBUaGUgc2NyaXB0IHNob3VsZCBiZSBlbmNvZGVkIHRvIFVURi04LCB0aGUgZGVmYXVsdCBzdHJpbmcgZW5jb2RpbmcKICAgICBzY3JpcHRfZmlsZSA9IG9wZW4oc2NyaXB0X25hbWUsICd3JywgZW5jb2Rpbmc9J3V0Zi04JykKQEAgLTEyMSw4ICsyMDEsOCBAQAogICAgIHNjcmlwdF9uYW1lID0gbWFrZV9zY3JpcHQoemlwX2Rpciwgc2NyaXB0X2Jhc2VuYW1lLCBzb3VyY2UpCiAgICAgdW5saW5rLmFwcGVuZChzY3JpcHRfbmFtZSkKICAgICBpZiBjb21waWxlZDoKLSAgICAgICAgaW5pdF9uYW1lID0gcHlfY29tcGlsZShpbml0X25hbWUsIGRvcmFpc2U9VHJ1ZSkKLSAgICAgICAgc2NyaXB0X25hbWUgPSBweV9jb21waWxlKHNjcmlwdF9uYW1lLCBkb3JhaXNlPVRydWUpCisgICAgICAgIGluaXRfbmFtZSA9IHB5X2NvbXBpbGUuY29tcGlsZShpbml0X25hbWUsIGRvcmFpc2U9VHJ1ZSkKKyAgICAgICAgc2NyaXB0X25hbWUgPSBweV9jb21waWxlLmNvbXBpbGUoc2NyaXB0X25hbWUsIGRvcmFpc2U9VHJ1ZSkKICAgICAgICAgdW5saW5rLmV4dGVuZCgoaW5pdF9uYW1lLCBzY3JpcHRfbmFtZSkpCiAgICAgcGtnX25hbWVzID0gW29zLnNlcC5qb2luKFtwa2dfbmFtZV0qaSkgZm9yIGkgaW4gcmFuZ2UoMSwgZGVwdGgrMSldCiAgICAgc2NyaXB0X25hbWVfaW5femlwID0gb3MucGF0aC5qb2luKHBrZ19uYW1lc1stMV0sIG9zLnBhdGguYmFzZW5hbWUoc2NyaXB0X25hbWUpKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3Qvc2VsZnNpZ25lZF9weXRob250ZXN0ZG90bmV0LnBlbSBiL0xpYi90ZXN0L3NlbGZzaWduZWRfcHl0aG9udGVzdGRvdG5ldC5wZW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE4MDA3MwotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3NlbGZzaWduZWRfcHl0aG9udGVzdGRvdG5ldC5wZW0KQEAgLTAsMCArMSwxNiBAQAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlDaHpDQ0FmQ2dBd0lCQWdJSkFLR1U5NXdLUjhwU01BMEdDU3FHU0liM0RRRUJCUVVBTUhBeEN6QUpCZ05WCitCQVlUQWxoWk1SY3dGUVlEVlFRSERBNURZWE4wYkdVZ1FXNTBhSEpoZURFak1DRUdBMVVFQ2d3YVVIbDBhRzl1CitJRk52Wm5SM1lYSmxJRVp2ZFc1a1lYUnBiMjR4SXpBaEJnTlZCQU1NR25ObGJHWXRjMmxuYm1Wa0xuQjVkR2h2CitiblJsYzNRdWJtVjBNQjRYRFRFME1URXdNakU0TURreU9Wb1hEVEkwTVRBek1ERTRNRGt5T1Zvd2NERUxNQWtHCitBMVVFQmhNQ1dGa3hGekFWQmdOVkJBY01Ea05oYzNSc1pTQkJiblJvY21GNE1TTXdJUVlEVlFRS0RCcFFlWFJvCitiMjRnVTI5bWRIZGhjbVVnUm05MWJtUmhkR2x2YmpFak1DRUdBMVVFQXd3YWMyVnNaaTF6YVdkdVpXUXVjSGwwCithRzl1ZEdWemRDNXVaWFF3Z1o4d0RRWUpLb1pJaHZjTkFRRUJCUUFEZ1kwQU1JR0pBb0dCQU5EWFFYVzl0anlaCitYdDBJdjJ0TEwxK2ppbnI0d0dnMzZpb0xETEZrTWYrMlkxR0wwdjBCbktZRzROMU9LbEFVMTVMWEdlR2VyOHZtCitTdi95SXZtZHJFTHZoQWJibzN3NGE5VE1ZUUE0WGtJVkxkdnUzbXZOT0FldCs4UE1KeG4yNmRiRGhHODA5QUx2CitFSFk1N2xRc0JTM0c1OVJaeUJQVnFBcW1JbVdOSm5WekFnTUJBQUdqS1RBbk1DVUdBMVVkRVFRZU1CeUNHbk5sCitiR1l0YzJsbmJtVmtMbkI1ZEdodmJuUmxjM1F1Ym1WME1BMEdDU3FHU0liM0RRRUJCUVVBQTRHQkFJT1htZHRNCitlRzlxelA5VGlYVy9HYy96STRjQmZkQ3BDK1k0Z09mQzliUVVDN2hlZml4NGlPMytpWmpneTNYL0ZhUnhVVW9WCitIS2lYY1hJYVdxVFNVV3A0NWNTaDBNYndaWHVkcDZKSUFwdHpkQWh2dkNyUEtlQzlpOUd2eHNQRDRMdERBTDk3Cit2U2F4UUJlekE3aGR4WmQ5MC9FZXlNZ1ZaZ0FuVENudkFXWDkKKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3NlcV90ZXN0cy5weSBiL0xpYi90ZXN0L3NlcV90ZXN0cy5weQppbmRleCBmMTg1YTgyLi4yNDE2MjQ5IDEwMDY0NAotLS0gYS9MaWIvdGVzdC9zZXFfdGVzdHMucHkKKysrIGIvTGliL3Rlc3Qvc2VxX3Rlc3RzLnB5CkBAIC04NSw2ICs4NSwxNCBAQAogICAgICdUZXN0IG11bHRpcGxlIHRpZXJzIG9mIGl0ZXJhdG9ycycKICAgICByZXR1cm4gY2hhaW4obWFwKGxhbWJkYSB4OngsIGl0ZXJmdW5jKEl0ZXJHZW4oU2VxdWVuY2Uoc2VxbikpKSkpCiAKK2NsYXNzIEx5aW5nVHVwbGUodHVwbGUpOgorICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgeWllbGQgMQorCitjbGFzcyBMeWluZ0xpc3QobGlzdCk6CisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICB5aWVsZCAxCisKIGNsYXNzIENvbW1vblRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICMgVGhlIHR5cGUgdG8gYmUgdGVzdGVkCiAgICAgdHlwZTJ0ZXN0ID0gTm9uZQpAQCAtMTMxLDYgKzEzOSwxMCBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnR5cGUydGVzdCwgSXRlck5vTmV4dChzKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBzZWxmLnR5cGUydGVzdCwgSXRlckdlbkV4YyhzKSkKIAorICAgICAgICAjIElzc3VlICMyMzc1NworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHlwZTJ0ZXN0KEx5aW5nVHVwbGUoKDIsKSkpLCBzZWxmLnR5cGUydGVzdCgoMSwpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR5cGUydGVzdChMeWluZ0xpc3QoWzJdKSksIHNlbGYudHlwZTJ0ZXN0KFsxXSkpCisKICAgICBkZWYgdGVzdF90cnV0aChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnR5cGUydGVzdCgpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi50eXBlMnRlc3QoWzQyXSkpCkBAIC0zOTIsNiArNDA0LDcgQEAKIAogICAgIGRlZiB0ZXN0X3BpY2tsZShzZWxmKToKICAgICAgICAgbHN0ID0gc2VsZi50eXBlMnRlc3QoWzQsIDUsIDYsIDddKQotICAgICAgICBsc3QyID0gcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhsc3QpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxzdDIsIGxzdCkKLSAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChpZChsc3QyKSwgaWQobHN0KSkKKyAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICBsc3QyID0gcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhsc3QsIHByb3RvKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobHN0MiwgbHN0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChpZChsc3QyKSwgaWQobHN0KSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3NvcnRwZXJmLnB5IGIvTGliL3Rlc3Qvc29ydHBlcmYucHkKaW5kZXggYWY3YzBiNC4uOTA3MjJmNyAxMDA2NDQKLS0tIGEvTGliL3Rlc3Qvc29ydHBlcmYucHkKKysrIGIvTGliL3Rlc3Qvc29ydHBlcmYucHkKQEAgLTIyLDcgKzIyLDcgQEAKICAgICBmbiA9IG9zLnBhdGguam9pbih0ZCwgInJyJTA2ZCIgJSBuKQogICAgIHRyeToKICAgICAgICAgZnAgPSBvcGVuKGZuLCAicmIiKQotICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICByID0gcmFuZG9tLnJhbmRvbQogICAgICAgICByZXN1bHQgPSBbcigpIGZvciBpIGluIHJhbmdlKG4pXQogICAgICAgICB0cnk6CkBAIC0zNSw5ICszNSw5IEBACiAgICAgICAgICAgICAgICAgaWYgZnA6CiAgICAgICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnVubGluayhmbikKLSAgICAgICAgICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgbXNnOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBtc2c6CiAgICAgICAgICAgICBwcmludCgiY2FuJ3Qgd3JpdGUiLCBmbiwgIjoiLCBtc2cpCiAgICAgZWxzZToKICAgICAgICAgcmVzdWx0ID0gbWFyc2hhbC5sb2FkKGZwKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3Qvc3NsX3NlcnZlcnMucHkgYi9MaWIvdGVzdC9zc2xfc2VydmVycy5weQppbmRleCA4Njg2MTUzLi43NTliM2Y0IDEwMDY0NAotLS0gYS9MaWIvdGVzdC9zc2xfc2VydmVycy5weQorKysgYi9MaWIvdGVzdC9zc2xfc2VydmVycy5weQpAQCAtMzUsNyArMzUsNyBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzb2NrLCBhZGRyID0gc2VsZi5zb2NrZXQuYWNjZXB0KCkKICAgICAgICAgICAgIHNzbGNvbm4gPSBzZWxmLmNvbnRleHQud3JhcF9zb2NrZXQoc29jaywgc2VydmVyX3NpZGU9VHJ1ZSkKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBlOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgIyBzb2NrZXQgZXJyb3JzIGFyZSBzaWxlbmNlZCBieSB0aGUgY2FsbGVyLCBwcmludCB0aGVtIGhlcmUKICAgICAgICAgICAgIGlmIHN1cHBvcnQudmVyYm9zZToKICAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJHb3QgYW4gZXJyb3I6XG4lc1xuIiAlIGUpCkBAIC0xNDcsOSArMTQ3LDExIEBACiAgICAgICAgIHNlbGYuc2VydmVyLnNodXRkb3duKCkKIAogCi1kZWYgbWFrZV9odHRwc19zZXJ2ZXIoY2FzZSwgY2VydGZpbGU9Q0VSVEZJTEUsIGhvc3Q9SE9TVCwgaGFuZGxlcl9jbGFzcz1Ob25lKToKLSAgICAjIHdlIGFzc3VtZSB0aGUgY2VydGZpbGUgY29udGFpbnMgYm90aCBwcml2YXRlIGtleSBhbmQgY2VydGlmaWNhdGUKLSAgICBjb250ZXh0ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1NTTHYyMykKK2RlZiBtYWtlX2h0dHBzX3NlcnZlcihjYXNlLCAqLCBjb250ZXh0PU5vbmUsIGNlcnRmaWxlPUNFUlRGSUxFLAorICAgICAgICAgICAgICAgICAgICAgIGhvc3Q9SE9TVCwgaGFuZGxlcl9jbGFzcz1Ob25lKToKKyAgICBpZiBjb250ZXh0IGlzIE5vbmU6CisgICAgICAgIGNvbnRleHQgPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfU1NMdjIzKQorICAgICMgV2UgYXNzdW1lIHRoZSBjZXJ0ZmlsZSBjb250YWlucyBib3RoIHByaXZhdGUga2V5IGFuZCBjZXJ0aWZpY2F0ZQogICAgIGNvbnRleHQubG9hZF9jZXJ0X2NoYWluKGNlcnRmaWxlKQogICAgIHNlcnZlciA9IEhUVFBTU2VydmVyVGhyZWFkKGNvbnRleHQsIGhvc3QsIGhhbmRsZXJfY2xhc3MpCiAgICAgZmxhZyA9IHRocmVhZGluZy5FdmVudCgpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9zc2x0ZXN0cy5weSBiL0xpYi90ZXN0L3NzbHRlc3RzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliMGVkMjIKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC9zc2x0ZXN0cy5weQpAQCAtMCwwICsxLDIyIEBACisjIENvbnZlbmllbmNlIHRlc3QgbW9kdWxlIHRvIHJ1biBhbGwgb2YgdGhlIFNTTC1yZWxhdGVkIHRlc3RzIGluIHRoZQorIyBzdGFuZGFyZCBsaWJyYXJ5LgorCitpbXBvcnQgc3lzCitpbXBvcnQgc3VicHJvY2VzcworCitURVNUUyA9IFsndGVzdF9hc3luY2lvJywgJ3Rlc3RfZnRwbGliJywgJ3Rlc3RfaGFzaGxpYicsICd0ZXN0X2h0dHBsaWInLAorICAgICAgICAgJ3Rlc3RfaW1hcGxpYicsICd0ZXN0X25udHBsaWInLCAndGVzdF9wb3BsaWInLCAndGVzdF9zbXRwbGliJywKKyAgICAgICAgICd0ZXN0X3NtdHBuZXQnLCAndGVzdF91cmxsaWIyX2xvY2FsbmV0JywgJ3Rlc3RfdmVudiddCisKK2RlZiBydW5fcmVncnRlc3RzKCpleHRyYV9hcmdzKToKKyAgICBhcmdzID0gW3N5cy5leGVjdXRhYmxlLCAiLW0iLCAidGVzdCJdCisgICAgaWYgbm90IGV4dHJhX2FyZ3M6CisgICAgICAgIGFyZ3MuYXBwZW5kKCItdW5ldHdvcmsiKQorICAgIGVsc2U6CisgICAgICAgIGFyZ3MuZXh0ZW5kKGV4dHJhX2FyZ3MpCisgICAgYXJncy5leHRlbmQoVEVTVFMpCisgICAgcmVzdWx0ID0gc3VicHJvY2Vzcy5jYWxsKGFyZ3MpCisgICAgc3lzLmV4aXQocmVzdWx0KQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHJ1bl9yZWdydGVzdHMoKnN5cy5hcmd2WzE6XSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3N0cmluZ190ZXN0cy5weSBiL0xpYi90ZXN0L3N0cmluZ190ZXN0cy5weQppbmRleCA0ODAwZDZkLi4yNDJhOTMxIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9zdHJpbmdfdGVzdHMucHkKKysrIGIvTGliL3Rlc3Qvc3RyaW5nX3Rlc3RzLnB5CkBAIC0xLDUgKzEsNSBAQAogIiIiCi1Db21tb24gdGVzdHMgc2hhcmVkIGJ5IHRlc3Rfc3RyLCB0ZXN0X3VuaWNvZGUsIHRlc3RfdXNlcnN0cmluZyBhbmQgdGVzdF9zdHJpbmcuCitDb21tb24gdGVzdHMgc2hhcmVkIGJ5IHRlc3RfdW5pY29kZSwgdGVzdF91c2Vyc3RyaW5nIGFuZCB0ZXN0X3N0cmluZy4KICIiIgogCiBpbXBvcnQgdW5pdHRlc3QsIHN0cmluZywgc3lzLCBzdHJ1Y3QKQEAgLTc5LDExICs3OSw5IEBACiAgICAgZGVmIGNoZWNrcmFpc2VzKHNlbGYsIGV4Yywgb2JqLCBtZXRob2RuYW1lLCAqYXJncyk6CiAgICAgICAgIG9iaiA9IHNlbGYuZml4dHlwZShvYmopCiAgICAgICAgIGFyZ3MgPSBzZWxmLmZpeHR5cGUoYXJncykKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCi0gICAgICAgICAgICBleGMsCi0gICAgICAgICAgICBnZXRhdHRyKG9iaiwgbWV0aG9kbmFtZSksCi0gICAgICAgICAgICAqYXJncwotICAgICAgICApCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoZXhjKSBhcyBjbToKKyAgICAgICAgICAgIGdldGF0dHIob2JqLCBtZXRob2RuYW1lKSgqYXJncykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChzdHIoY20uZXhjZXB0aW9uKSwgJycpCiAKICAgICAjIGNhbGwgb2JqLm1ldGhvZCgqYXJncykgd2l0aG91dCBhbnkgY2hlY2tzCiAgICAgZGVmIGNoZWNrY2FsbChzZWxmLCBvYmosIG1ldGhvZG5hbWUsICphcmdzKToKQEAgLTMyNywxMyArMzI1LDI2IEBACiAgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnaGVsbG8nLCAndXBwZXInLCA0MikKIAogICAgIGRlZiB0ZXN0X2V4cGFuZHRhYnMoc2VsZik6Ci0gICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnYWJjXHJhYiAgICAgIGRlZlxuZyAgICAgICBoaScsICdhYmNccmFiXHRkZWZcbmdcdGhpJywgJ2V4cGFuZHRhYnMnKQotICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2FiY1xyYWIgICAgICBkZWZcbmcgICAgICAgaGknLCAnYWJjXHJhYlx0ZGVmXG5nXHRoaScsICdleHBhbmR0YWJzJywgOCkKLSAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdhYmNccmFiICBkZWZcbmcgICBoaScsICdhYmNccmFiXHRkZWZcbmdcdGhpJywgJ2V4cGFuZHRhYnMnLCA0KQotICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2FiY1xyXG5hYiAgZGVmXG5nICAgaGknLCAnYWJjXHJcbmFiXHRkZWZcbmdcdGhpJywgJ2V4cGFuZHRhYnMnLCA0KQotICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2FiY1xyYWIgICAgICBkZWZcbmcgICAgICAgaGknLCAnYWJjXHJhYlx0ZGVmXG5nXHRoaScsICdleHBhbmR0YWJzJykKLSAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdhYmNccmFiICAgICAgZGVmXG5nICAgICAgIGhpJywgJ2FiY1xyYWJcdGRlZlxuZ1x0aGknLCAnZXhwYW5kdGFicycsIDgpCi0gICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnYWJjXHJcbmFiXHJcbmRlZlxuZ1xyXG5oaScsICdhYmNcclxuYWJcclxuZGVmXG5nXHJcbmhpJywgJ2V4cGFuZHRhYnMnLCA0KQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2FiY1xyYWIgICAgICBkZWZcbmcgICAgICAgaGknLCAnYWJjXHJhYlx0ZGVmXG5nXHRoaScsCisgICAgICAgICAgICAgICAgICAgICAgICAnZXhwYW5kdGFicycpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnYWJjXHJhYiAgICAgIGRlZlxuZyAgICAgICBoaScsICdhYmNccmFiXHRkZWZcbmdcdGhpJywKKyAgICAgICAgICAgICAgICAgICAgICAgICdleHBhbmR0YWJzJywgOCkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdhYmNccmFiICBkZWZcbmcgICBoaScsICdhYmNccmFiXHRkZWZcbmdcdGhpJywKKyAgICAgICAgICAgICAgICAgICAgICAgICdleHBhbmR0YWJzJywgNCkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdhYmNcclxuYWIgICAgICBkZWZcbmcgICAgICAgaGknLCAnYWJjXHJcbmFiXHRkZWZcbmdcdGhpJywKKyAgICAgICAgICAgICAgICAgICAgICAgICdleHBhbmR0YWJzJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdhYmNcclxuYWIgICAgICBkZWZcbmcgICAgICAgaGknLCAnYWJjXHJcbmFiXHRkZWZcbmdcdGhpJywKKyAgICAgICAgICAgICAgICAgICAgICAgICdleHBhbmR0YWJzJywgOCkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdhYmNcclxuYWIgIGRlZlxuZyAgIGhpJywgJ2FiY1xyXG5hYlx0ZGVmXG5nXHRoaScsCisgICAgICAgICAgICAgICAgICAgICAgICAnZXhwYW5kdGFicycsIDQpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnYWJjXHJcbmFiXHJcbmRlZlxuZ1xyXG5oaScsICdhYmNcclxuYWJcclxuZGVmXG5nXHJcbmhpJywKKyAgICAgICAgICAgICAgICAgICAgICAgICdleHBhbmR0YWJzJywgNCkKKyAgICAgICAgIyBjaGVjayBrZXl3b3JkIGFyZ3MKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdhYmNccmFiICAgICAgZGVmXG5nICAgICAgIGhpJywgJ2FiY1xyYWJcdGRlZlxuZ1x0aGknLAorICAgICAgICAgICAgICAgICAgICAgICAgJ2V4cGFuZHRhYnMnLCB0YWJzaXplPTgpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnYWJjXHJhYiAgZGVmXG5nICAgaGknLCAnYWJjXHJhYlx0ZGVmXG5nXHRoaScsCisgICAgICAgICAgICAgICAgICAgICAgICAnZXhwYW5kdGFicycsIHRhYnNpemU9NCkKKwogICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJyAgYVxuIGInLCAnIFx0YVxuXHRiJywgJ2V4cGFuZHRhYnMnLCAxKQogCiAgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnaGVsbG8nLCAnZXhwYW5kdGFicycsIDQyLCA0MikKQEAgLTExMDYsOCArMTExNyw3IEBACiAgICAgZGVmIHRlc3Rfam9pbihzZWxmKToKICAgICAgICAgIyBqb2luIG5vdyB3b3JrcyB3aXRoIGFueSBzZXF1ZW5jZSB0eXBlCiAgICAgICAgICMgbW92ZWQgaGVyZSwgYmVjYXVzZSB0aGUgYXJndW1lbnQgb3JkZXIgaXMKLSAgICAgICAgIyBkaWZmZXJlbnQgaW4gc3RyaW5nLmpvaW4gKHNlZSB0aGUgdGVzdCBpbgotICAgICAgICAjIHRlc3QudGVzdF9zdHJpbmcuU3RyaW5nVGVzdC50ZXN0X2pvaW4pCisgICAgICAgICMgZGlmZmVyZW50IGluIHN0cmluZy5qb2luCiAgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnYSBiIGMgZCcsICcgJywgJ2pvaW4nLCBbJ2EnLCAnYicsICdjJywgJ2QnXSkKICAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdhYmNkJywgJycsICdqb2luJywgKCdhJywgJ2InLCAnYycsICdkJykpCiAgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnYmQnLCAnJywgJ2pvaW4nLCAoJycsICdiJywgJycsICdkJykpCkBAIC0xMTI3LDYgKzExMzcsNyBAQAogICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2EgYiBjJywgJyAnLCAnam9pbicsIEJhZFNlcTIoKSkKIAogICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFR5cGVFcnJvciwgJyAnLCAnam9pbicpCisgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnICcsICdqb2luJywgTm9uZSkKICAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhUeXBlRXJyb3IsICcgJywgJ2pvaW4nLCA3KQogICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFR5cGVFcnJvciwgJyAnLCAnam9pbicsIFsxLCAyLCBieXRlcygpXSkKICAgICAgICAgdHJ5OgpAQCAtMTE2NSw3ICsxMTc2LDggQEAKICAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhUeXBlRXJyb3IsICdhYmMnLCAnX19tb2RfXycpCiAgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnJShmb28pcycsICdfX21vZF9fJywgNDIpCiAgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnJXMlcycsICdfX21vZF9fJywgKDQyLCkpCi0gICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnJWMnLCAnX19tb2RfXycsIChOb25lLCkpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgorICAgICAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhUeXBlRXJyb3IsICclYycsICdfX21vZF9fJywgKE5vbmUsKSkKICAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhWYWx1ZUVycm9yLCAnJShmb28nLCAnX19tb2RfXycsIHt9KQogICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFR5cGVFcnJvciwgJyUoZm9vKXMgJShiYXIpcycsICdfX21vZF9fJywgKCdmb28nLCA0MikpCiAgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnJWQnLCAnX19tb2RfXycsICI0MiIpICMgbm90IG51bWVyaWMKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3N1YnByb2Nlc3NkYXRhL2ZkX3N0YXR1cy5weSBiL0xpYi90ZXN0L3N1YnByb2Nlc3NkYXRhL2ZkX3N0YXR1cy5weQppbmRleCAxZjYxZTEzLi5kMTJiZDk1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC9zdWJwcm9jZXNzZGF0YS9mZF9zdGF0dXMucHkKKysrIGIvTGliL3Rlc3Qvc3VicHJvY2Vzc2RhdGEvZmRfc3RhdHVzLnB5CkBAIC0xLDE3ICsxLDI3IEBACiAiIiJXaGVuIGNhbGxlZCBhcyBhIHNjcmlwdCwgcHJpbnQgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiB0aGUgb3BlbgotZmlsZSBkZXNjcmlwdG9ycyBvbiBzdGRvdXQuIiIiCitmaWxlIGRlc2NyaXB0b3JzIG9uIHN0ZG91dC4KKworVXNhZ2U6CitmZF9zdGF0cy5weTogY2hlY2sgYWxsIGZpbGUgZGVzY3JpcHRvcnMKK2ZkX3N0YXR1cy5weSBmZDEgZmQyIC4uLjogY2hlY2sgb25seSBzcGVjaWZpZWQgZmlsZSBkZXNjcmlwdG9ycworIiIiCiAKIGltcG9ydCBlcnJubwogaW1wb3J0IG9zCi0KLXRyeToKLSAgICBfTUFYRkQgPSBvcy5zeXNjb25mKCJTQ19PUEVOX01BWCIpCi1leGNlcHQ6Ci0gICAgX01BWEZEID0gMjU2CitpbXBvcnQgc3RhdAoraW1wb3J0IHN5cwogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIGZkcyA9IFtdCi0gICAgZm9yIGZkIGluIHJhbmdlKDAsIF9NQVhGRCk6CisgICAgaWYgbGVuKHN5cy5hcmd2KSA9PSAxOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBfTUFYRkQgPSBvcy5zeXNjb25mKCJTQ19PUEVOX01BWCIpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIF9NQVhGRCA9IDI1NgorICAgICAgICB0ZXN0X2ZkcyA9IHJhbmdlKDAsIF9NQVhGRCkKKyAgICBlbHNlOgorICAgICAgICB0ZXN0X2ZkcyA9IG1hcChpbnQsIHN5cy5hcmd2WzE6XSkKKyAgICBmb3IgZmQgaW4gdGVzdF9mZHM6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHN0ID0gb3MuZnN0YXQoZmQpCiAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CkBAIC0xOSw2ICsyOSw2IEBACiAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgICMgSWdub3JlIFNvbGFyaXMgZG9vciBmaWxlcwotICAgICAgICBpZiBzdC5zdF9tb2RlICYgMHhGMDAwICE9IDB4ZDAwMDoKKyAgICAgICAgaWYgbm90IHN0YXQuU19JU0RPT1Ioc3Quc3RfbW9kZSk6CiAgICAgICAgICAgICBmZHMuYXBwZW5kKGZkKQogICAgIHByaW50KCcsJy5qb2luKG1hcChzdHIsIGZkcykpKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3Qvc3VwcG9ydC9fX2luaXRfXy5weSBiL0xpYi90ZXN0L3N1cHBvcnQvX19pbml0X18ucHkKaW5kZXggNWMwM2Y1NC4uY2RmODZlNyAxMDA2NDQKLS0tIGEvTGliL3Rlc3Qvc3VwcG9ydC9fX2luaXRfXy5weQorKysgYi9MaWIvdGVzdC9zdXBwb3J0L19faW5pdF9fLnB5CkBAIC0zLDI4ICszLDMyIEBACiBpZiBfX25hbWVfXyAhPSAndGVzdC5zdXBwb3J0JzoKICAgICByYWlzZSBJbXBvcnRFcnJvcignc3VwcG9ydCBtdXN0IGJlIGltcG9ydGVkIGZyb20gdGhlIHRlc3QgcGFja2FnZScpCiAKK2ltcG9ydCBjb2xsZWN0aW9ucy5hYmMKIGltcG9ydCBjb250ZXh0bGliCiBpbXBvcnQgZXJybm8KK2ltcG9ydCBmYXVsdGhhbmRsZXIKK2ltcG9ydCBmbm1hdGNoCiBpbXBvcnQgZnVuY3Rvb2xzCiBpbXBvcnQgZ2MKLWltcG9ydCBzb2NrZXQKLWltcG9ydCBzeXMKK2ltcG9ydCBpbXBvcnRsaWIKK2ltcG9ydCBpbXBvcnRsaWIudXRpbAoraW1wb3J0IGxvZ2dpbmcuaGFuZGxlcnMKK2ltcG9ydCBubnRwbGliCiBpbXBvcnQgb3MKIGltcG9ydCBwbGF0Zm9ybQotaW1wb3J0IHNodXRpbAotaW1wb3J0IHdhcm5pbmdzCi1pbXBvcnQgdW5pdHRlc3QKLWltcG9ydCBpbXBvcnRsaWIKLWltcG9ydCBjb2xsZWN0aW9ucy5hYmMKIGltcG9ydCByZQotaW1wb3J0IHN1YnByb2Nlc3MKLWltcG9ydCBpbXAKLWltcG9ydCB0aW1lCi1pbXBvcnQgc3lzY29uZmlnCi1pbXBvcnQgZm5tYXRjaAotaW1wb3J0IGxvZ2dpbmcuaGFuZGxlcnMKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCBzb2NrZXQKK2ltcG9ydCBzdGF0CiBpbXBvcnQgc3RydWN0CitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHN5cworaW1wb3J0IHN5c2NvbmZpZwogaW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgdXJsbGliLmVycm9yCitpbXBvcnQgd2FybmluZ3MKIAogdHJ5OgogICAgIGltcG9ydCBfdGhyZWFkLCB0aHJlYWRpbmcKQEAgLTU2LDI2ICs2MCw0OSBAQAogZXhjZXB0IEltcG9ydEVycm9yOgogICAgIGx6bWEgPSBOb25lCiAKK3RyeToKKyAgICBpbXBvcnQgcmVzb3VyY2UKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICByZXNvdXJjZSA9IE5vbmUKKwogX19hbGxfXyA9IFsKLSAgICAiRXJyb3IiLCAiVGVzdEZhaWxlZCIsICJSZXNvdXJjZURlbmllZCIsICJpbXBvcnRfbW9kdWxlIiwgInZlcmJvc2UiLAotICAgICJ1c2VfcmVzb3VyY2VzIiwgIm1heF9tZW11c2UiLCAicmVjb3JkX29yaWdpbmFsX3N0ZG91dCIsCi0gICAgImdldF9vcmlnaW5hbF9zdGRvdXQiLCAidW5sb2FkIiwgInVubGluayIsICJybXRyZWUiLCAiZm9yZ2V0IiwKKyAgICAjIGdsb2JhbHMKKyAgICAiUElQRV9NQVhfU0laRSIsICJ2ZXJib3NlIiwgIm1heF9tZW11c2UiLCAidXNlX3Jlc291cmNlcyIsICJmYWlsZmFzdCIsCisgICAgIyBleGNlcHRpb25zCisgICAgIkVycm9yIiwgIlRlc3RGYWlsZWQiLCAiUmVzb3VyY2VEZW5pZWQiLAorICAgICMgaW1wb3J0cworICAgICJpbXBvcnRfbW9kdWxlIiwgImltcG9ydF9mcmVzaF9tb2R1bGUiLCAiQ2xlYW5JbXBvcnQiLAorICAgICMgbW9kdWxlcworICAgICJ1bmxvYWQiLCAiZm9yZ2V0IiwKKyAgICAjIGlvCisgICAgInJlY29yZF9vcmlnaW5hbF9zdGRvdXQiLCAiZ2V0X29yaWdpbmFsX3N0ZG91dCIsICJjYXB0dXJlZF9zdGRvdXQiLAorICAgICJjYXB0dXJlZF9zdGRpbiIsICJjYXB0dXJlZF9zdGRlcnIiLAorICAgICMgZmlsZXN5c3RlbQorICAgICJURVNURk4iLCAiU0FWRURDV0QiLCAidW5saW5rIiwgInJtdHJlZSIsICJ0ZW1wX2N3ZCIsICJmaW5kZmlsZSIsCisgICAgImNyZWF0ZV9lbXB0eV9maWxlIiwgImNhbl9zeW1saW5rIiwgImZzX2lzX2Nhc2VfaW5zZW5zaXRpdmUiLAorICAgICMgdW5pdHRlc3QKICAgICAiaXNfcmVzb3VyY2VfZW5hYmxlZCIsICJyZXF1aXJlcyIsICJyZXF1aXJlc19mcmVlYnNkX3ZlcnNpb24iLAotICAgICJyZXF1aXJlc19saW51eF92ZXJzaW9uIiwgInJlcXVpcmVzX21hY192ZXIiLCAiZmluZF91bnVzZWRfcG9ydCIsCi0gICAgImJpbmRfcG9ydCIsICJJUFY2X0VOQUJMRUQiLCAiaXNfanl0aG9uIiwgIlRFU1RGTiIsICJIT1NUIiwgIlNBVkVEQ1dEIiwKLSAgICAidGVtcF9jd2QiLCAiZmluZGZpbGUiLCAiY3JlYXRlX2VtcHR5X2ZpbGUiLCAic29ydGRpY3QiLAotICAgICJjaGVja19zeW50YXhfZXJyb3IiLCAib3Blbl91cmxyZXNvdXJjZSIsICJjaGVja193YXJuaW5ncyIsICJDbGVhbkltcG9ydCIsCi0gICAgIkVudmlyb25tZW50VmFyR3VhcmQiLCAiVHJhbnNpZW50UmVzb3VyY2UiLCAiY2FwdHVyZWRfc3Rkb3V0IiwKLSAgICAiY2FwdHVyZWRfc3RkaW4iLCAiY2FwdHVyZWRfc3RkZXJyIiwgInRpbWVfb3V0IiwgInNvY2tldF9wZWVyX3Jlc2V0IiwKLSAgICAiaW9lcnJvcl9wZWVyX3Jlc2V0IiwgInJ1bl93aXRoX2xvY2FsZSIsICd0ZW1wX3VtYXNrJywKLSAgICAidHJhbnNpZW50X2ludGVybmV0IiwgInNldF9tZW1saW1pdCIsICJiaWdtZW10ZXN0IiwgImJpZ2FkZHJzcGFjZXRlc3QiLAotICAgICJCYXNpY1Rlc3RSdW5uZXIiLCAicnVuX3VuaXR0ZXN0IiwgInJ1bl9kb2N0ZXN0IiwgInRocmVhZGluZ19zZXR1cCIsCi0gICAgInRocmVhZGluZ19jbGVhbnVwIiwgInJlYXBfY2hpbGRyZW4iLCAiY3B5dGhvbl9vbmx5IiwgImNoZWNrX2ltcGxfZGV0YWlsIiwKLSAgICAiZ2V0X2F0dHJpYnV0ZSIsICJzd2FwX2l0ZW0iLCAic3dhcF9hdHRyIiwgInJlcXVpcmVzX0lFRUVfNzU0IiwKLSAgICAiVGVzdEhhbmRsZXIiLCAiTWF0Y2hlciIsICJjYW5fc3ltbGluayIsICJza2lwX3VubGVzc19zeW1saW5rIiwKLSAgICAic2tpcF91bmxlc3NfeGF0dHIiLCAiaW1wb3J0X2ZyZXNoX21vZHVsZSIsICJyZXF1aXJlc196bGliIiwKLSAgICAiUElQRV9NQVhfU0laRSIsICJmYWlsZmFzdCIsICJhbnRpY2lwYXRlX2ZhaWx1cmUiLCAicnVuX3dpdGhfdHoiLAotICAgICJyZXF1aXJlc19nemlwIiwgInJlcXVpcmVzX2J6MiIsICJyZXF1aXJlc19sem1hIiwgInN1cHByZXNzX2NyYXNoX3BvcHVwIiwKKyAgICAicmVxdWlyZXNfbGludXhfdmVyc2lvbiIsICJyZXF1aXJlc19tYWNfdmVyIiwgImNoZWNrX3N5bnRheF9lcnJvciIsCisgICAgIlRyYW5zaWVudFJlc291cmNlIiwgInRpbWVfb3V0IiwgInNvY2tldF9wZWVyX3Jlc2V0IiwgImlvZXJyb3JfcGVlcl9yZXNldCIsCisgICAgInRyYW5zaWVudF9pbnRlcm5ldCIsICJCYXNpY1Rlc3RSdW5uZXIiLCAicnVuX3VuaXR0ZXN0IiwgInJ1bl9kb2N0ZXN0IiwKKyAgICAic2tpcF91bmxlc3Nfc3ltbGluayIsICJyZXF1aXJlc19nemlwIiwgInJlcXVpcmVzX2J6MiIsICJyZXF1aXJlc19sem1hIiwKKyAgICAiYmlnbWVtdGVzdCIsICJiaWdhZGRyc3BhY2V0ZXN0IiwgImNweXRob25fb25seSIsICJnZXRfYXR0cmlidXRlIiwKKyAgICAicmVxdWlyZXNfSUVFRV83NTQiLCAic2tpcF91bmxlc3NfeGF0dHIiLCAicmVxdWlyZXNfemxpYiIsCisgICAgImFudGljaXBhdGVfZmFpbHVyZSIsICJsb2FkX3BhY2thZ2VfdGVzdHMiLAorICAgICMgc3lzCisgICAgImlzX2p5dGhvbiIsICJjaGVja19pbXBsX2RldGFpbCIsCisgICAgIyBuZXR3b3JrCisgICAgIkhPU1QiLCAiSVBWNl9FTkFCTEVEIiwgImZpbmRfdW51c2VkX3BvcnQiLCAiYmluZF9wb3J0IiwgIm9wZW5fdXJscmVzb3VyY2UiLAorICAgICMgcHJvY2Vzc2VzCisgICAgJ3RlbXBfdW1hc2snLCAicmVhcF9jaGlsZHJlbiIsCisgICAgIyBsb2dnaW5nCisgICAgIlRlc3RIYW5kbGVyIiwKKyAgICAjIHRocmVhZHMKKyAgICAidGhyZWFkaW5nX3NldHVwIiwgInRocmVhZGluZ19jbGVhbnVwIiwgInJlYXBfdGhyZWFkcyIsICJzdGFydF90aHJlYWRzIiwKKyAgICAjIG1pc2NlbGxhbmVvdXMKKyAgICAiY2hlY2tfd2FybmluZ3MiLCAiRW52aXJvbm1lbnRWYXJHdWFyZCIsICJydW5fd2l0aF9sb2NhbGUiLCAic3dhcF9pdGVtIiwKKyAgICAic3dhcF9hdHRyIiwgIk1hdGNoZXIiLCAic2V0X21lbWxpbWl0IiwgIlN1cHByZXNzQ3Jhc2hSZXBvcnQiLCAic29ydGRpY3QiLAorICAgICJydW5fd2l0aF90eiIsCiAgICAgXQogCiBjbGFzcyBFcnJvcihFeGNlcHRpb24pOgpAQCAtOTcsNyArMTI0LDggQEAKICAgICAiIiJDb250ZXh0IG1hbmFnZXIgdG8gc3VwcHJlc3MgcGFja2FnZSBhbmQgbW9kdWxlIGRlcHJlY2F0aW9uCiAgICAgd2FybmluZ3Mgd2hlbiBpbXBvcnRpbmcgdGhlbS4KIAotICAgIElmIGlnbm9yZSBpcyBGYWxzZSwgdGhpcyBjb250ZXh0IG1hbmFnZXIgaGFzIG5vIGVmZmVjdC4iIiIKKyAgICBJZiBpZ25vcmUgaXMgRmFsc2UsIHRoaXMgY29udGV4dCBtYW5hZ2VyIGhhcyBubyBlZmZlY3QuCisgICAgIiIiCiAgICAgaWYgaWdub3JlOgogICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CiAgICAgICAgICAgICB3YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncygiaWdub3JlIiwgIi4rIChtb2R1bGV8cGFja2FnZSkiLApAQCAtMTA3LDE2ICsxMzUsMjEgQEAKICAgICAgICAgeWllbGQKIAogCi1kZWYgaW1wb3J0X21vZHVsZShuYW1lLCBkZXByZWNhdGVkPUZhbHNlKToKK2RlZiBpbXBvcnRfbW9kdWxlKG5hbWUsIGRlcHJlY2F0ZWQ9RmFsc2UsICosIHJlcXVpcmVkX29uPSgpKToKICAgICAiIiJJbXBvcnQgYW5kIHJldHVybiB0aGUgbW9kdWxlIHRvIGJlIHRlc3RlZCwgcmFpc2luZyBTa2lwVGVzdCBpZgogICAgIGl0IGlzIG5vdCBhdmFpbGFibGUuCiAKICAgICBJZiBkZXByZWNhdGVkIGlzIFRydWUsIGFueSBtb2R1bGUgb3IgcGFja2FnZSBkZXByZWNhdGlvbiBtZXNzYWdlcwotICAgIHdpbGwgYmUgc3VwcHJlc3NlZC4iIiIKKyAgICB3aWxsIGJlIHN1cHByZXNzZWQuIElmIGEgbW9kdWxlIGlzIHJlcXVpcmVkIG9uIGEgcGxhdGZvcm0gYnV0IG9wdGlvbmFsIGZvcgorICAgIG90aGVycywgc2V0IHJlcXVpcmVkX29uIHRvIGFuIGl0ZXJhYmxlIG9mIHBsYXRmb3JtIHByZWZpeGVzIHdoaWNoIHdpbGwgYmUKKyAgICBjb21wYXJlZCBhZ2FpbnN0IHN5cy5wbGF0Zm9ybS4KKyAgICAiIiIKICAgICB3aXRoIF9pZ25vcmVfZGVwcmVjYXRlZF9pbXBvcnRzKGRlcHJlY2F0ZWQpOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICByZXR1cm4gaW1wb3J0bGliLmltcG9ydF9tb2R1bGUobmFtZSkKICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yIGFzIG1zZzoKKyAgICAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKHR1cGxlKHJlcXVpcmVkX29uKSk6CisgICAgICAgICAgICAgICAgcmFpc2UKICAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KHN0cihtc2cpKQogCiAKQEAgLTE1OCw2ICsxOTEsMjUgQEAKICAgICAgICAgcmV0dXJuIHVuaXR0ZXN0LmV4cGVjdGVkRmFpbHVyZQogICAgIHJldHVybiBsYW1iZGEgZjogZgogCitkZWYgbG9hZF9wYWNrYWdlX3Rlc3RzKHBrZ19kaXIsIGxvYWRlciwgc3RhbmRhcmRfdGVzdHMsIHBhdHRlcm4pOgorICAgICIiIkdlbmVyaWMgbG9hZF90ZXN0cyBpbXBsZW1lbnRhdGlvbiBmb3Igc2ltcGxlIHRlc3QgcGFja2FnZXMuCisKKyAgICBNb3N0IHBhY2thZ2VzIGNhbiBpbXBsZW1lbnQgbG9hZF90ZXN0cyB1c2luZyB0aGlzIGZ1bmN0aW9uIGFzIGZvbGxvd3M6CisKKyAgICAgICBkZWYgbG9hZF90ZXN0cygqYXJncyk6CisgICAgICAgICAgIHJldHVybiBsb2FkX3BhY2thZ2VfdGVzdHMob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgKmFyZ3MpCisgICAgIiIiCisgICAgaWYgcGF0dGVybiBpcyBOb25lOgorICAgICAgICBwYXR0ZXJuID0gInRlc3QqIgorICAgIHRvcF9kaXIgPSBvcy5wYXRoLmRpcm5hbWUoICAgICAgICAgICAgICAjIExpYgorICAgICAgICAgICAgICAgICAgb3MucGF0aC5kaXJuYW1lKCAgICAgICAgICAgICAgIyB0ZXN0CisgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSkpICAgIyBzdXBwb3J0CisgICAgcGFja2FnZV90ZXN0cyA9IGxvYWRlci5kaXNjb3ZlcihzdGFydF9kaXI9cGtnX2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcF9sZXZlbF9kaXI9dG9wX2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm49cGF0dGVybikKKyAgICBzdGFuZGFyZF90ZXN0cy5hZGRUZXN0cyhwYWNrYWdlX3Rlc3RzKQorICAgIHJldHVybiBzdGFuZGFyZF90ZXN0cworCiAKIGRlZiBpbXBvcnRfZnJlc2hfbW9kdWxlKG5hbWUsIGZyZXNoPSgpLCBibG9ja2VkPSgpLCBkZXByZWNhdGVkPUZhbHNlKToKICAgICAiIiJJbXBvcnQgYW5kIHJldHVybiBhIG1vZHVsZSwgZGVsaWJlcmF0ZWx5IGJ5cGFzc2luZyBzeXMubW9kdWxlcy4KQEAgLTI1Nyw3ICszMDksNyBAQAogICAgICAgICAjIFRoZSBleHBvbmVudGlhbCBiYWNrb2ZmIG9mIHRoZSB0aW1lb3V0IGFtb3VudHMgdG8gYSB0b3RhbAogICAgICAgICAjIG9mIH4xIHNlY29uZCBhZnRlciB3aGljaCB0aGUgZGVsZXRpb24gaXMgcHJvYmFibHkgYW4gZXJyb3IKICAgICAgICAgIyBhbnl3YXkuCi0gICAgICAgICMgVGVzdGluZyBvbiBhIGk3QDQuM0dIeiBzaG93cyB0aGF0IHVzdWFsbHkgb25seSAxIGl0ZXJhdGlvbiBpcworICAgICAgICAjIFRlc3Rpbmcgb24gYW4gaTdANC4zR0h6IHNob3dzIHRoYXQgdXN1YWxseSBvbmx5IDEgaXRlcmF0aW9uIGlzCiAgICAgICAgICMgcmVxdWlyZWQgd2hlbiBjb250ZW50aW9uIG9jY3Vycy4KICAgICAgICAgdGltZW91dCA9IDAuMDAxCiAgICAgICAgIHdoaWxlIHRpbWVvdXQgPCAxLjA6CkBAIC0yODcsNyArMzM5LDEzIEBACiAgICAgICAgIGRlZiBfcm10cmVlX2lubmVyKHBhdGgpOgogICAgICAgICAgICAgZm9yIG5hbWUgaW4gb3MubGlzdGRpcihwYXRoKToKICAgICAgICAgICAgICAgICBmdWxsbmFtZSA9IG9zLnBhdGguam9pbihwYXRoLCBuYW1lKQotICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNkaXIoZnVsbG5hbWUpOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgbW9kZSA9IG9zLmxzdGF0KGZ1bGxuYW1lKS5zdF9tb2RlCisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgICAgICAgICBwcmludCgic3VwcG9ydC5ybXRyZWUoKTogb3MubHN0YXQoJXIpIGZhaWxlZCB3aXRoICVzIiAlIChmdWxsbmFtZSwgZXhjKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZT1zeXMuX19zdGRlcnJfXykKKyAgICAgICAgICAgICAgICAgICAgbW9kZSA9IDAKKyAgICAgICAgICAgICAgICBpZiBzdGF0LlNfSVNESVIobW9kZSk6CiAgICAgICAgICAgICAgICAgICAgIF93YWl0Zm9yKF9ybXRyZWVfaW5uZXIsIGZ1bGxuYW1lLCB3YWl0YWxsPVRydWUpCiAgICAgICAgICAgICAgICAgICAgIG9zLnJtZGlyKGZ1bGxuYW1lKQogICAgICAgICAgICAgICAgIGVsc2U6CkBAIC0zMDIsMjUgKzM2MCwyMCBAQAogZGVmIHVubGluayhmaWxlbmFtZSk6CiAgICAgdHJ5OgogICAgICAgICBfdW5saW5rKGZpbGVuYW1lKQotICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycm9yOgotICAgICAgICAjIFRoZSBmaWxlbmFtZSBuZWVkIG5vdCBleGlzdC4KLSAgICAgICAgaWYgZXJyb3IuZXJybm8gbm90IGluIChlcnJuby5FTk9FTlQsIGVycm5vLkVOT1RESVIpOgotICAgICAgICAgICAgcmFpc2UKKyAgICBleGNlcHQgKEZpbGVOb3RGb3VuZEVycm9yLCBOb3RBRGlyZWN0b3J5RXJyb3IpOgorICAgICAgICBwYXNzCiAKIGRlZiBybWRpcihkaXJuYW1lKToKICAgICB0cnk6CiAgICAgICAgIF9ybWRpcihkaXJuYW1lKQotICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycm9yOgotICAgICAgICAjIFRoZSBkaXJlY3RvcnkgbmVlZCBub3QgZXhpc3QuCi0gICAgICAgIGlmIGVycm9yLmVycm5vICE9IGVycm5vLkVOT0VOVDoKLSAgICAgICAgICAgIHJhaXNlCisgICAgZXhjZXB0IEZpbGVOb3RGb3VuZEVycm9yOgorICAgICAgICBwYXNzCiAKIGRlZiBybXRyZWUocGF0aCk6CiAgICAgdHJ5OgogICAgICAgICBfcm10cmVlKHBhdGgpCi0gICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyb3I6Ci0gICAgICAgIGlmIGVycm9yLmVycm5vICE9IGVycm5vLkVOT0VOVDoKLSAgICAgICAgICAgIHJhaXNlCisgICAgZXhjZXB0IEZpbGVOb3RGb3VuZEVycm9yOgorICAgICAgICBwYXNzCiAKIGRlZiBtYWtlX2xlZ2FjeV9weWMoc291cmNlKToKICAgICAiIiJNb3ZlIGEgUEVQIDMxNDcgcHljL3B5byBmaWxlIHRvIGl0cyBsZWdhY3kgcHljL3B5byBsb2NhdGlvbi4KQEAgLTMzMiw3ICszODUsNyBAQAogICAgICAgICBkb2VzIG5vdCBuZWVkIHRvIGV4aXN0LCBob3dldmVyIHRoZSBQRVAgMzE0NyBweWMgZmlsZSBtdXN0IGV4aXN0LgogICAgIDpyZXR1cm46IFRoZSBmaWxlIHN5c3RlbSBwYXRoIHRvIHRoZSBsZWdhY3kgcHljIGZpbGUuCiAgICAgIiIiCi0gICAgcHljX2ZpbGUgPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2Uoc291cmNlKQorICAgIHB5Y19maWxlID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2Uoc291cmNlKQogICAgIHVwX29uZSA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoc291cmNlKSkKICAgICBsZWdhY3lfcHljID0gb3MucGF0aC5qb2luKHVwX29uZSwgc291cmNlICsgKCdjJyBpZiBfX2RlYnVnX18gZWxzZSAnbycpKQogICAgIG9zLnJlbmFtZShweWNfZmlsZSwgbGVnYWN5X3B5YykKQEAgLTM1MSwxNSArNDA0LDE5IEBACiAgICAgICAgICMgY29tYmluYXRpb25zIG9mIFBFUCAzMTQ3IGFuZCBsZWdhY3kgcHljIGFuZCBweW8gZmlsZXMuCiAgICAgICAgIHVubGluayhzb3VyY2UgKyAnYycpCiAgICAgICAgIHVubGluayhzb3VyY2UgKyAnbycpCi0gICAgICAgIHVubGluayhpbXAuY2FjaGVfZnJvbV9zb3VyY2Uoc291cmNlLCBkZWJ1Z19vdmVycmlkZT1UcnVlKSkKLSAgICAgICAgdW5saW5rKGltcC5jYWNoZV9mcm9tX3NvdXJjZShzb3VyY2UsIGRlYnVnX292ZXJyaWRlPUZhbHNlKSkKKyAgICAgICAgdW5saW5rKGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHNvdXJjZSwgZGVidWdfb3ZlcnJpZGU9VHJ1ZSkpCisgICAgICAgIHVubGluayhpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShzb3VyY2UsIGRlYnVnX292ZXJyaWRlPUZhbHNlKSkKIAotIyBPbiBzb21lIHBsYXRmb3Jtcywgc2hvdWxkIG5vdCBydW4gZ3VpIHRlc3QgZXZlbiBpZiBpdCBpcyBhbGxvd2VkCi0jIGluIGB1c2VfcmVzb3VyY2VzJy4KLWlmIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCd3aW4nKToKLSAgICBpbXBvcnQgY3R5cGVzCi0gICAgaW1wb3J0IGN0eXBlcy53aW50eXBlcwotICAgIGRlZiBfaXNfZ3VpX2F2YWlsYWJsZSgpOgorIyBDaGVjayB3aGV0aGVyIGEgZ3VpIGlzIGFjdHVhbGx5IGF2YWlsYWJsZQorZGVmIF9pc19ndWlfYXZhaWxhYmxlKCk6CisgICAgaWYgaGFzYXR0cihfaXNfZ3VpX2F2YWlsYWJsZSwgJ3Jlc3VsdCcpOgorICAgICAgICByZXR1cm4gX2lzX2d1aV9hdmFpbGFibGUucmVzdWx0CisgICAgcmVhc29uID0gTm9uZQorICAgIGlmIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCd3aW4nKToKKyAgICAgICAgIyBpZiBQeXRob24gaXMgcnVubmluZyBhcyBhIHNlcnZpY2UgKHN1Y2ggYXMgdGhlIGJ1aWxkYm90IHNlcnZpY2UpLAorICAgICAgICAjIGd1aSBpbnRlcmFjdGlvbiBtYXkgYmUgZGlzYWxsb3dlZAorICAgICAgICBpbXBvcnQgY3R5cGVzCisgICAgICAgIGltcG9ydCBjdHlwZXMud2ludHlwZXMKICAgICAgICAgVU9JX0ZMQUdTID0gMQogICAgICAgICBXU0ZfVklTSUJMRSA9IDB4MDAwMQogICAgICAgICBjbGFzcyBVU0VST0JKRUNURkxBR1MoY3R5cGVzLlN0cnVjdHVyZSk6CkBAIC0zNzksMjkgKzQzNiw2MyBAQAogICAgICAgICAgICAgY3R5cGVzLmJ5cmVmKG5lZWRlZCkpCiAgICAgICAgIGlmIG5vdCByZXM6CiAgICAgICAgICAgICByYWlzZSBjdHlwZXMuV2luRXJyb3IoKQotICAgICAgICByZXR1cm4gYm9vbCh1b2YuZHdGbGFncyAmIFdTRl9WSVNJQkxFKQotZWxzZToKLSAgICBkZWYgX2lzX2d1aV9hdmFpbGFibGUoKToKLSAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgaWYgbm90IGJvb2wodW9mLmR3RmxhZ3MgJiBXU0ZfVklTSUJMRSk6CisgICAgICAgICAgICByZWFzb24gPSAiZ3VpIG5vdCBhdmFpbGFibGUgKFdTRl9WSVNJQkxFIGZsYWcgbm90IHNldCkiCisgICAgZWxpZiBzeXMucGxhdGZvcm0gPT0gJ2Rhcndpbic6CisgICAgICAgICMgVGhlIEFxdWEgVGsgaW1wbGVtZW50YXRpb25zIG9uIE9TIFggY2FuIGFib3J0IHRoZSBwcm9jZXNzIGlmCisgICAgICAgICMgYmVpbmcgY2FsbGVkIGluIGFuIGVudmlyb25tZW50IHdoZXJlIGEgd2luZG93IHNlcnZlciBjb25uZWN0aW9uCisgICAgICAgICMgY2Fubm90IGJlIG1hZGUsIGZvciBpbnN0YW5jZSB3aGVuIGludm9rZWQgYnkgYSBidWlsZGJvdCBvciBzc2gKKyAgICAgICAgIyBwcm9jZXNzIG5vdCBydW5uaW5nIHVuZGVyIHRoZSBzYW1lIHVzZXIgaWQgYXMgdGhlIGN1cnJlbnQgY29uc29sZQorICAgICAgICAjIHVzZXIuICBUbyBhdm9pZCB0aGF0LCByYWlzZSBhbiBleGNlcHRpb24gaWYgdGhlIHdpbmRvdyBtYW5hZ2VyCisgICAgICAgICMgY29ubmVjdGlvbiBpcyBub3QgYXZhaWxhYmxlLgorICAgICAgICBmcm9tIGN0eXBlcyBpbXBvcnQgY2RsbCwgY19pbnQsIHBvaW50ZXIsIFN0cnVjdHVyZQorICAgICAgICBmcm9tIGN0eXBlcy51dGlsIGltcG9ydCBmaW5kX2xpYnJhcnkKKworICAgICAgICBhcHBfc2VydmljZXMgPSBjZGxsLkxvYWRMaWJyYXJ5KGZpbmRfbGlicmFyeSgiQXBwbGljYXRpb25TZXJ2aWNlcyIpKQorCisgICAgICAgIGlmIGFwcF9zZXJ2aWNlcy5DR01haW5EaXNwbGF5SUQoKSA9PSAwOgorICAgICAgICAgICAgcmVhc29uID0gImd1aSB0ZXN0cyBjYW5ub3QgcnVuIHdpdGhvdXQgT1MgWCB3aW5kb3cgbWFuYWdlciIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNsYXNzIFByb2Nlc3NTZXJpYWxOdW1iZXIoU3RydWN0dXJlKToKKyAgICAgICAgICAgICAgICBfZmllbGRzXyA9IFsoImhpZ2hMb25nT2ZQU04iLCBjX2ludCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJsb3dMb25nT2ZQU04iLCBjX2ludCldCisgICAgICAgICAgICBwc24gPSBQcm9jZXNzU2VyaWFsTnVtYmVyKCkKKyAgICAgICAgICAgIHBzbl9wID0gcG9pbnRlcihwc24pCisgICAgICAgICAgICBpZiAoICAoYXBwX3NlcnZpY2VzLkdldEN1cnJlbnRQcm9jZXNzKHBzbl9wKSA8IDApIG9yCisgICAgICAgICAgICAgICAgICAoYXBwX3NlcnZpY2VzLlNldEZyb250UHJvY2Vzcyhwc25fcCkgPCAwKSApOgorICAgICAgICAgICAgICAgIHJlYXNvbiA9ICJjYW5ub3QgcnVuIHdpdGhvdXQgT1MgWCBndWkgcHJvY2VzcyIKKworICAgICMgY2hlY2sgb24gZXZlcnkgcGxhdGZvcm0gd2hldGhlciB0a2ludGVyIGNhbiBhY3R1YWxseSBkbyBhbnl0aGluZworICAgIGlmIG5vdCByZWFzb246CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZyb20gdGtpbnRlciBpbXBvcnQgVGsKKyAgICAgICAgICAgIHJvb3QgPSBUaygpCisgICAgICAgICAgICByb290LnVwZGF0ZSgpCisgICAgICAgICAgICByb290LmRlc3Ryb3koKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICBlcnJfc3RyaW5nID0gc3RyKGUpCisgICAgICAgICAgICBpZiBsZW4oZXJyX3N0cmluZykgPiA1MDoKKyAgICAgICAgICAgICAgICBlcnJfc3RyaW5nID0gZXJyX3N0cmluZ1s6NTBdICsgJyBbLi4uXScKKyAgICAgICAgICAgIHJlYXNvbiA9ICdUayB1bmF2YWlsYWJsZSBkdWUgdG8ge306IHt9Jy5mb3JtYXQodHlwZShlKS5fX25hbWVfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyX3N0cmluZykKKworICAgIF9pc19ndWlfYXZhaWxhYmxlLnJlYXNvbiA9IHJlYXNvbgorICAgIF9pc19ndWlfYXZhaWxhYmxlLnJlc3VsdCA9IG5vdCByZWFzb24KKworICAgIHJldHVybiBfaXNfZ3VpX2F2YWlsYWJsZS5yZXN1bHQKIAogZGVmIGlzX3Jlc291cmNlX2VuYWJsZWQocmVzb3VyY2UpOgotICAgICIiIlRlc3Qgd2hldGhlciBhIHJlc291cmNlIGlzIGVuYWJsZWQuICBLbm93biByZXNvdXJjZXMgYXJlIHNldCBieQotICAgIHJlZ3J0ZXN0LnB5LiIiIgotICAgIHJldHVybiB1c2VfcmVzb3VyY2VzIGlzIG5vdCBOb25lIGFuZCByZXNvdXJjZSBpbiB1c2VfcmVzb3VyY2VzCisgICAgIiIiVGVzdCB3aGV0aGVyIGEgcmVzb3VyY2UgaXMgZW5hYmxlZC4KKworICAgIEtub3duIHJlc291cmNlcyBhcmUgc2V0IGJ5IHJlZ3J0ZXN0LnB5LiAgSWYgbm90IHJ1bm5pbmcgdW5kZXIgcmVncnRlc3QucHksCisgICAgYWxsIHJlc291cmNlcyBhcmUgYXNzdW1lZCBlbmFibGVkIHVubGVzcyB1c2VfcmVzb3VyY2VzIGhhcyBiZWVuIHNldC4KKyAgICAiIiIKKyAgICByZXR1cm4gdXNlX3Jlc291cmNlcyBpcyBOb25lIG9yIHJlc291cmNlIGluIHVzZV9yZXNvdXJjZXMKIAogZGVmIHJlcXVpcmVzKHJlc291cmNlLCBtc2c9Tm9uZSk6Ci0gICAgIiIiUmFpc2UgUmVzb3VyY2VEZW5pZWQgaWYgdGhlIHNwZWNpZmllZCByZXNvdXJjZSBpcyBub3QgYXZhaWxhYmxlLgotCi0gICAgSWYgdGhlIGNhbGxlcidzIG1vZHVsZSBpcyBfX21haW5fXyB0aGVuIGF1dG9tYXRpY2FsbHkgcmV0dXJuIFRydWUuICBUaGUKLSAgICBwb3NzaWJpbGl0eSBvZiBGYWxzZSBiZWluZyByZXR1cm5lZCBvY2N1cnMgd2hlbiByZWdydGVzdC5weSBpcwotICAgIGV4ZWN1dGluZy4KLSAgICAiIiIKKyAgICAiIiJSYWlzZSBSZXNvdXJjZURlbmllZCBpZiB0aGUgc3BlY2lmaWVkIHJlc291cmNlIGlzIG5vdCBhdmFpbGFibGUuIiIiCiAgICAgaWYgcmVzb3VyY2UgPT0gJ2d1aScgYW5kIG5vdCBfaXNfZ3VpX2F2YWlsYWJsZSgpOgotICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiQ2Fubm90IHVzZSB0aGUgJ2d1aScgcmVzb3VyY2UiKQotICAgICMgc2VlIGlmIHRoZSBjYWxsZXIncyBtb2R1bGUgaXMgX19tYWluX18gLSBpZiBzbywgdHJlYXQgYXMgaWYKLSAgICAjIHRoZSByZXNvdXJjZSB3YXMgc2V0Ci0gICAgaWYgc3lzLl9nZXRmcmFtZSgxKS5mX2dsb2JhbHMuZ2V0KCJfX25hbWVfXyIpID09ICJfX21haW5fXyI6Ci0gICAgICAgIHJldHVybgorICAgICAgICByYWlzZSBSZXNvdXJjZURlbmllZChfaXNfZ3VpX2F2YWlsYWJsZS5yZWFzb24pCiAgICAgaWYgbm90IGlzX3Jlc291cmNlX2VuYWJsZWQocmVzb3VyY2UpOgogICAgICAgICBpZiBtc2cgaXMgTm9uZToKICAgICAgICAgICAgIG1zZyA9ICJVc2Ugb2YgdGhlICVyIHJlc291cmNlIG5vdCBlbmFibGVkIiAlIHJlc291cmNlCkBAIC01MTMsNyArNjA0LDcgQEAKICAgICB0aGUgU09fUkVVU0VBRERSIHNvY2tldCBvcHRpb24gaGF2aW5nIGRpZmZlcmVudCBzZW1hbnRpY3Mgb24gV2luZG93cyB2ZXJzdXMKICAgICBVbml4L0xpbnV4LiAgT24gVW5peCwgeW91IGNhbid0IGhhdmUgdHdvIEFGX0lORVQgU09DS19TVFJFQU0gc29ja2V0cyBiaW5kLAogICAgIGxpc3RlbiBhbmQgdGhlbiBhY2NlcHQgY29ubmVjdGlvbnMgb24gaWRlbnRpY2FsIGhvc3QvcG9ydHMuICBBbiBFQUREUklOVVNFCi0gICAgc29ja2V0LmVycm9yIHdpbGwgYmUgcmFpc2VkIGF0IHNvbWUgcG9pbnQgKGRlcGVuZGluZyBvbiB0aGUgcGxhdGZvcm0gYW5kCisgICAgT1NFcnJvciB3aWxsIGJlIHJhaXNlZCBhdCBzb21lIHBvaW50IChkZXBlbmRpbmcgb24gdGhlIHBsYXRmb3JtIGFuZAogICAgIHRoZSBvcmRlciBiaW5kIGFuZCBsaXN0ZW4gd2VyZSBjYWxsZWQgb24gZWFjaCBzb2NrZXQpLgogCiAgICAgSG93ZXZlciwgb24gV2luZG93cywgaWYgU09fUkVVU0VBRERSIGlzIHNldCBvbiB0aGUgc29ja2V0cywgbm8gRUFERFJJTlVTRQpAQCAtNTkxLDkgKzY4Miw5IEBACiAgICAgICAgIHNvY2sgPSBOb25lCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUNiwgc29ja2V0LlNPQ0tfU1RSRUFNKQotICAgICAgICAgICAgc29jay5iaW5kKCgnOjoxJywgMCkpCisgICAgICAgICAgICBzb2NrLmJpbmQoKEhPU1R2NiwgMCkpCiAgICAgICAgICAgICByZXR1cm4gVHJ1ZQotICAgICAgICBleGNlcHQgKHNvY2tldC5lcnJvciwgc29ja2V0LmdhaWVycm9yKToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBpZiBzb2NrOgpAQCAtNjAyLDYgKzY5MywxOCBAQAogCiBJUFY2X0VOQUJMRUQgPSBfaXNfaXB2Nl9lbmFibGVkKCkKIAorZGVmIHN5c3RlbV9tdXN0X3ZhbGlkYXRlX2NlcnQoZik6CisgICAgIiIiU2tpcCB0aGUgdGVzdCBvbiBUTFMgY2VydGlmaWNhdGUgdmFsaWRhdGlvbiBmYWlsdXJlcy4iIiIKKyAgICBAZnVuY3Rvb2xzLndyYXBzKGYpCisgICAgZGVmIGRlYygqYXJncywgKiprd2FyZ3MpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBmKCphcmdzLCAqKmt3YXJncykKKyAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGlmICJDRVJUSUZJQ0FURV9WRVJJRllfRkFJTEVEIiBpbiBzdHIoZSk6CisgICAgICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoInN5c3RlbSBkb2VzIG5vdCBjb250YWluICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmVjZXNzYXJ5IGNlcnRpZmljYXRlcyIpCisgICAgICAgICAgICByYWlzZQorICAgIHJldHVybiBkZWMKIAogIyBBIGNvbnN0YW50IGxpa2VseSBsYXJnZXIgdGhhbiB0aGUgdW5kZXJseWluZyBPUyBwaXBlIGJ1ZmZlciBzaXplLCB0bwogIyBtYWtlIHdyaXRlcyBibG9ja2luZy4KQEAgLTk0MCw3ICsxMDQzLDEyIEBACiAgICAgcmVxdWlyZXMoJ3VybGZldGNoJykKIAogICAgIHByaW50KCdcdGZldGNoaW5nICVzIC4uLicgJSB1cmwsIGZpbGU9Z2V0X29yaWdpbmFsX3N0ZG91dCgpKQotICAgIGYgPSB1cmxsaWIucmVxdWVzdC51cmxvcGVuKHVybCwgdGltZW91dD0xNSkKKyAgICBvcGVuZXIgPSB1cmxsaWIucmVxdWVzdC5idWlsZF9vcGVuZXIoKQorICAgIGlmIGd6aXA6CisgICAgICAgIG9wZW5lci5hZGRoZWFkZXJzLmFwcGVuZCgoJ0FjY2VwdC1FbmNvZGluZycsICdnemlwJykpCisgICAgZiA9IG9wZW5lci5vcGVuKHVybCwgdGltZW91dD0xNSkKKyAgICBpZiBnemlwIGFuZCBmLmhlYWRlcnMuZ2V0KCdDb250ZW50LUVuY29kaW5nJykgPT0gJ2d6aXAnOgorICAgICAgICBmID0gZ3ppcC5HemlwRmlsZShmaWxlb2JqPWYpCiAgICAgdHJ5OgogICAgICAgICB3aXRoIG9wZW4oZm4sICJ3YiIpIGFzIG91dDoKICAgICAgICAgICAgIHMgPSBmLnJlYWQoKQpAQCAtMTE4MCw5ICsxMjg4LDkgQEAKICMgQ29udGV4dCBtYW5hZ2VycyB0aGF0IHJhaXNlIFJlc291cmNlRGVuaWVkIHdoZW4gdmFyaW91cyBpc3N1ZXMKICMgd2l0aCB0aGUgSW50ZXJuZXQgY29ubmVjdGlvbiBtYW5pZmVzdCB0aGVtc2VsdmVzIGFzIGV4Y2VwdGlvbnMuCiAjIFhYWCBkZXByZWNhdGUgdGhlc2UgYW5kIHVzZSB0cmFuc2llbnRfaW50ZXJuZXQoKSBpbnN0ZWFkCi10aW1lX291dCA9IFRyYW5zaWVudFJlc291cmNlKElPRXJyb3IsIGVycm5vPWVycm5vLkVUSU1FRE9VVCkKLXNvY2tldF9wZWVyX3Jlc2V0ID0gVHJhbnNpZW50UmVzb3VyY2Uoc29ja2V0LmVycm9yLCBlcnJubz1lcnJuby5FQ09OTlJFU0VUKQotaW9lcnJvcl9wZWVyX3Jlc2V0ID0gVHJhbnNpZW50UmVzb3VyY2UoSU9FcnJvciwgZXJybm89ZXJybm8uRUNPTk5SRVNFVCkKK3RpbWVfb3V0ID0gVHJhbnNpZW50UmVzb3VyY2UoT1NFcnJvciwgZXJybm89ZXJybm8uRVRJTUVET1VUKQorc29ja2V0X3BlZXJfcmVzZXQgPSBUcmFuc2llbnRSZXNvdXJjZShPU0Vycm9yLCBlcnJubz1lcnJuby5FQ09OTlJFU0VUKQoraW9lcnJvcl9wZWVyX3Jlc2V0ID0gVHJhbnNpZW50UmVzb3VyY2UoT1NFcnJvciwgZXJybm89ZXJybm8uRUNPTk5SRVNFVCkKIAogCiBAY29udGV4dGxpYi5jb250ZXh0bWFuYWdlcgpAQCAtMTIxOCw2ICsxMzI2LDExIEBACiAgICAgICAgIG4gPSBnZXRhdHRyKGVyciwgJ2Vycm5vJywgTm9uZSkKICAgICAgICAgaWYgKGlzaW5zdGFuY2UoZXJyLCBzb2NrZXQudGltZW91dCkgb3IKICAgICAgICAgICAgIChpc2luc3RhbmNlKGVyciwgc29ja2V0LmdhaWVycm9yKSBhbmQgbiBpbiBnYWlfZXJybm9zKSBvcgorICAgICAgICAgICAgKGlzaW5zdGFuY2UoZXJyLCB1cmxsaWIuZXJyb3IuSFRUUEVycm9yKSBhbmQKKyAgICAgICAgICAgICA1MDAgPD0gZXJyLmNvZGUgPD0gNTk5KSBvcgorICAgICAgICAgICAgKGlzaW5zdGFuY2UoZXJyLCB1cmxsaWIuZXJyb3IuVVJMRXJyb3IpIGFuZAorICAgICAgICAgICAgICAgICAoKCJDb25uZWN0aW9uUmVmdXNlZEVycm9yIiBpbiBlcnIucmVhc29uKSBvcgorICAgICAgICAgICAgICAgICAgKCJUaW1lb3V0RXJyb3IiIGluIGVyci5yZWFzb24pKSkgb3IKICAgICAgICAgICAgIG4gaW4gY2FwdHVyZWRfZXJybm9zKToKICAgICAgICAgICAgIGlmIG5vdCB2ZXJib3NlOgogICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoZGVuaWVkLmFyZ3NbMF0gKyAiXG4iKQpAQCAtMTIyOCwxNyArMTM0MSwyMSBAQAogICAgICAgICBpZiB0aW1lb3V0IGlzIG5vdCBOb25lOgogICAgICAgICAgICAgc29ja2V0LnNldGRlZmF1bHR0aW1lb3V0KHRpbWVvdXQpCiAgICAgICAgIHlpZWxkCi0gICAgZXhjZXB0IElPRXJyb3IgYXMgZXJyOgorICAgIGV4Y2VwdCBubnRwbGliLk5OVFBUZW1wb3JhcnlFcnJvciBhcyBlcnI6CisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKGRlbmllZC5hcmdzWzBdICsgIlxuIikKKyAgICAgICAgcmFpc2UgZGVuaWVkIGZyb20gZXJyCisgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgogICAgICAgICAjIHVybGxpYiBjYW4gd3JhcCBvcmlnaW5hbCBzb2NrZXQgZXJyb3JzIG11bHRpcGxlIHRpbWVzICghKSwgd2UgbXVzdAogICAgICAgICAjIHVud3JhcCB0byBnZXQgYXQgdGhlIG9yaWdpbmFsIGVycm9yLgogICAgICAgICB3aGlsZSBUcnVlOgogICAgICAgICAgICAgYSA9IGVyci5hcmdzCi0gICAgICAgICAgICBpZiBsZW4oYSkgPj0gMSBhbmQgaXNpbnN0YW5jZShhWzBdLCBJT0Vycm9yKToKKyAgICAgICAgICAgIGlmIGxlbihhKSA+PSAxIGFuZCBpc2luc3RhbmNlKGFbMF0sIE9TRXJyb3IpOgogICAgICAgICAgICAgICAgIGVyciA9IGFbMF0KICAgICAgICAgICAgICMgVGhlIGVycm9yIGNhbiBhbHNvIGJlIHdyYXBwZWQgYXMgYXJnc1sxXToKICAgICAgICAgICAgICMgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBtc2c6Ci0gICAgICAgICAgICAjICAgICAgICByYWlzZSBJT0Vycm9yKCdzb2NrZXQgZXJyb3InLCBtc2cpLndpdGhfdHJhY2ViYWNrKHN5cy5leGNfaW5mbygpWzJdKQotICAgICAgICAgICAgZWxpZiBsZW4oYSkgPj0gMiBhbmQgaXNpbnN0YW5jZShhWzFdLCBJT0Vycm9yKToKKyAgICAgICAgICAgICMgICAgICAgIHJhaXNlIE9TRXJyb3IoJ3NvY2tldCBlcnJvcicsIG1zZykud2l0aF90cmFjZWJhY2soc3lzLmV4Y19pbmZvKClbMl0pCisgICAgICAgICAgICBlbGlmIGxlbihhKSA+PSAyIGFuZCBpc2luc3RhbmNlKGFbMV0sIE9TRXJyb3IpOgogICAgICAgICAgICAgICAgIGVyciA9IGFbMV0KICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgYnJlYWsKQEAgLTEyNjcsNyArMTM4NCw3IEBACiAKICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpIGFzIHN0ZG91dDoKICAgICAgICAgICAgcHJpbnQoImhlbGxvIikKLSAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dC5nZXR2YWx1ZSgpLCAiaGVsbG9cbiIpCisgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQuZ2V0dmFsdWUoKSwgImhlbGxvXFxuIikKICAgICAiIiIKICAgICByZXR1cm4gY2FwdHVyZWRfb3V0cHV0KCJzdGRvdXQiKQogCkBAIC0xMjc2LDcgKzEzOTMsNyBAQAogCiAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRlcnIoKSBhcyBzdGRlcnI6CiAgICAgICAgICAgIHByaW50KCJoZWxsbyIsIGZpbGU9c3lzLnN0ZGVycikKLSAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZGVyci5nZXR2YWx1ZSgpLCAiaGVsbG9cbiIpCisgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRlcnIuZ2V0dmFsdWUoKSwgImhlbGxvXFxuIikKICAgICAiIiIKICAgICByZXR1cm4gY2FwdHVyZWRfb3V0cHV0KCJzdGRlcnIiKQogCkBAIC0xMjg0LDcgKzE0MDEsNyBAQAogICAgICIiIkNhcHR1cmUgdGhlIGlucHV0IHRvIHN5cy5zdGRpbjoKIAogICAgICAgIHdpdGggY2FwdHVyZWRfc3RkaW4oKSBhcyBzdGRpbjoKLSAgICAgICAgICAgc3RkaW4ud3JpdGUoJ2hlbGxvXG4nKQorICAgICAgICAgICBzdGRpbi53cml0ZSgnaGVsbG9cXG4nKQogICAgICAgICAgICBzdGRpbi5zZWVrKDApCiAgICAgICAgICAgICMgY2FsbCB0ZXN0IGNvZGUgdGhhdCBjb25zdW1lcyBmcm9tIHN5cy5zdGRpbgogICAgICAgICAgICBjYXB0dXJlZCA9IGlucHV0KCkKQEAgLTEzMjcsNyArMTQ0NCw3IEBACiAgICAgZm9yIG9wdCBpbiBjZmxhZ3Muc3BsaXQoKToKICAgICAgICAgaWYgb3B0LnN0YXJ0c3dpdGgoJy1PJyk6CiAgICAgICAgICAgICBmaW5hbF9vcHQgPSBvcHQKLSAgICByZXR1cm4gZmluYWxfb3B0ICE9ICcnIGFuZCBmaW5hbF9vcHQgIT0gJy1PMCcKKyAgICByZXR1cm4gZmluYWxfb3B0IG5vdCBpbiAoJycsICctTzAnLCAnLU9nJykKIAogCiBfaGVhZGVyID0gJ25QJwpAQCAtMTU2NSw3ICsxNjgyLDcgQEAKIAogZGVmIHJlcXVpcmVzX3Jlc291cmNlKHJlc291cmNlKToKICAgICBpZiByZXNvdXJjZSA9PSAnZ3VpJyBhbmQgbm90IF9pc19ndWlfYXZhaWxhYmxlKCk6Ci0gICAgICAgIHJldHVybiB1bml0dGVzdC5za2lwKCJyZXNvdXJjZSAnZ3VpJyBpcyBub3QgYXZhaWxhYmxlIikKKyAgICAgICAgcmV0dXJuIHVuaXR0ZXN0LnNraXAoX2lzX2d1aV9hdmFpbGFibGUucmVhc29uKQogICAgIGlmIGlzX3Jlc291cmNlX2VuYWJsZWQocmVzb3VyY2UpOgogICAgICAgICByZXR1cm4gX2lkCiAgICAgZWxzZToKQEAgLTE2OTcsOSArMTgxNCwxOCBAQAogIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAjIENoZWNrIGZvciB0aGUgcHJlc2VuY2Ugb2YgZG9jc3RyaW5ncy4KIAotSEFWRV9ET0NTVFJJTkdTID0gKGNoZWNrX2ltcGxfZGV0YWlsKGNweXRob249RmFsc2UpIG9yCi0gICAgICAgICAgICAgICAgICAgc3lzLnBsYXRmb3JtID09ICd3aW4zMicgb3IKLSAgICAgICAgICAgICAgICAgICBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ1dJVEhfRE9DX1NUUklOR1MnKSkKKyMgUmF0aGVyIHRoYW4gdHJ5aW5nIHRvIGVudW1lcmF0ZSBhbGwgdGhlIGNhc2VzIHdoZXJlIGRvY3N0cmluZ3MgbWF5IGJlCisjIGRpc2FibGVkLCB3ZSBqdXN0IGNoZWNrIGZvciB0aGF0IGRpcmVjdGx5CisKK2RlZiBfY2hlY2tfZG9jc3RyaW5ncygpOgorICAgICIiIkp1c3QgdXNlZCB0byBjaGVjayBpZiBkb2NzdHJpbmdzIGFyZSBlbmFibGVkIiIiCisKK01JU1NJTkdfQ19ET0NTVFJJTkdTID0gKGNoZWNrX2ltcGxfZGV0YWlsKCkgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICBzeXMucGxhdGZvcm0gIT0gJ3dpbjMyJyBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vdCBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ1dJVEhfRE9DX1NUUklOR1MnKSkKKworSEFWRV9ET0NTVFJJTkdTID0gKF9jaGVja19kb2NzdHJpbmdzLl9fZG9jX18gaXMgbm90IE5vbmUgYW5kCisgICAgICAgICAgICAgICAgICAgbm90IE1JU1NJTkdfQ19ET0NTVFJJTkdTKQogCiByZXF1aXJlc19kb2NzdHJpbmdzID0gdW5pdHRlc3Quc2tpcFVubGVzcyhIQVZFX0RPQ1NUUklOR1MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdCByZXF1aXJlcyBkb2NzdHJpbmdzIikKQEAgLTE3NzQsMTIgKzE5MDAsMTIgQEAKIGRlZiB0aHJlYWRpbmdfY2xlYW51cCgqb3JpZ2luYWxfdmFsdWVzKToKICAgICBpZiBub3QgX3RocmVhZDoKICAgICAgICAgcmV0dXJuCi0gICAgX01BWF9DT1VOVCA9IDEwCisgICAgX01BWF9DT1VOVCA9IDEwMAogICAgIGZvciBjb3VudCBpbiByYW5nZShfTUFYX0NPVU5UKToKICAgICAgICAgdmFsdWVzID0gX3RocmVhZC5fY291bnQoKSwgdGhyZWFkaW5nLl9kYW5nbGluZwogICAgICAgICBpZiB2YWx1ZXMgPT0gb3JpZ2luYWxfdmFsdWVzOgogICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgdGltZS5zbGVlcCgwLjEpCisgICAgICAgIHRpbWUuc2xlZXAoMC4wMSkKICAgICAgICAgZ2NfY29sbGVjdCgpCiAgICAgIyBYWFggcHJpbnQgYSB3YXJuaW5nIGluIGNhc2Ugb2YgZmFpbHVyZT8KIApAQCAtMTgyMSw2ICsxOTQ3LDQyIEBACiAgICAgICAgICAgICAgICAgYnJlYWsKIAogQGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIKK2RlZiBzdGFydF90aHJlYWRzKHRocmVhZHMsIHVubG9jaz1Ob25lKToKKyAgICB0aHJlYWRzID0gbGlzdCh0aHJlYWRzKQorICAgIHN0YXJ0ZWQgPSBbXQorICAgIHRyeToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZm9yIHQgaW4gdGhyZWFkczoKKyAgICAgICAgICAgICAgICB0LnN0YXJ0KCkKKyAgICAgICAgICAgICAgICBzdGFydGVkLmFwcGVuZCh0KQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgICAgIHByaW50KCJDYW4ndCBzdGFydCAlZCB0aHJlYWRzLCBvbmx5ICVkIHRocmVhZHMgc3RhcnRlZCIgJQorICAgICAgICAgICAgICAgICAgICAgIChsZW4odGhyZWFkcyksIGxlbihzdGFydGVkKSkpCisgICAgICAgICAgICByYWlzZQorICAgICAgICB5aWVsZAorICAgIGZpbmFsbHk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIHVubG9jazoKKyAgICAgICAgICAgICAgICB1bmxvY2soKQorICAgICAgICAgICAgZW5kdGltZSA9IHN0YXJ0dGltZSA9IHRpbWUudGltZSgpCisgICAgICAgICAgICBmb3IgdGltZW91dCBpbiByYW5nZSgxLCAxNik6CisgICAgICAgICAgICAgICAgZW5kdGltZSArPSA2MAorICAgICAgICAgICAgICAgIGZvciB0IGluIHN0YXJ0ZWQ6CisgICAgICAgICAgICAgICAgICAgIHQuam9pbihtYXgoZW5kdGltZSAtIHRpbWUudGltZSgpLCAwLjAxKSkKKyAgICAgICAgICAgICAgICBzdGFydGVkID0gW3QgZm9yIHQgaW4gc3RhcnRlZCBpZiB0LmlzQWxpdmUoKV0KKyAgICAgICAgICAgICAgICBpZiBub3Qgc3RhcnRlZDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgICAgICAgICBwcmludCgnVW5hYmxlIHRvIGpvaW4gJWQgdGhyZWFkcyBkdXJpbmcgYSBwZXJpb2Qgb2YgJworICAgICAgICAgICAgICAgICAgICAgICAgICAnJWQgbWludXRlcycgJSAobGVuKHN0YXJ0ZWQpLCB0aW1lb3V0KSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHN0YXJ0ZWQgPSBbdCBmb3IgdCBpbiBzdGFydGVkIGlmIHQuaXNBbGl2ZSgpXQorICAgICAgICAgICAgaWYgc3RhcnRlZDoKKyAgICAgICAgICAgICAgICBmYXVsdGhhbmRsZXIuZHVtcF90cmFjZWJhY2soc3lzLnN0ZG91dCkKKyAgICAgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcignVW5hYmxlIHRvIGpvaW4gJWQgdGhyZWFkcycgJSBsZW4oc3RhcnRlZCkpCisKK0Bjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VyCiBkZWYgc3dhcF9hdHRyKG9iaiwgYXR0ciwgbmV3X3ZhbCk6CiAgICAgIiIiVGVtcG9yYXJ5IHN3YXAgb3V0IGFuIGF0dHJpYnV0ZSB3aXRoIGEgbmV3IG9iamVjdC4KIApAQCAtMTg4MSw3ICsyMDQzLDcgQEAKICAgICBUaGlzIHdpbGwgdHlwaWNhbGx5IGJlIHJ1biBvbiB0aGUgcmVzdWx0IG9mIHRoZSBjb21tdW5pY2F0ZSgpIG1ldGhvZAogICAgIG9mIGEgc3VicHJvY2Vzcy5Qb3BlbiBvYmplY3QuCiAgICAgIiIiCi0gICAgc3RkZXJyID0gcmUuc3ViKGJyIlxbXGQrIHJlZnNcXVxyP1xuPyIsIGIiIiwgc3RkZXJyKS5zdHJpcCgpCisgICAgc3RkZXJyID0gcmUuc3ViKGJyIlxbXGQrIHJlZnMsIFxkKyBibG9ja3NcXVxyP1xuPyIsIGIiIiwgc3RkZXJyKS5zdHJpcCgpCiAgICAgcmV0dXJuIHN0ZGVycgogCiBkZWYgYXJnc19mcm9tX2ludGVycHJldGVyX2ZsYWdzKCk6CkBAIC0yMDEyLDI3ICsyMTc0LDgwIEBACiAgICAgcmV0dXJuIHRlc3QgaWYgb2sgZWxzZSB1bml0dGVzdC5za2lwKG1zZykodGVzdCkKIAogCi1pZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnd2luJyk6Ci0gICAgQGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIKLSAgICBkZWYgc3VwcHJlc3NfY3Jhc2hfcG9wdXAoKToKLSAgICAgICAgIiIiRGlzYWJsZSBXaW5kb3dzIEVycm9yIFJlcG9ydGluZyBkaWFsb2dzIHVzaW5nIFNldEVycm9yTW9kZS4iIiIKLSAgICAgICAgIyBzZWUgaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L3dpbmRvd3MvZGVza3RvcC9tczY4MDYyMSUyOHY9dnMuODUlMjkuYXNweAotICAgICAgICAjIEdldEVycm9yTW9kZSBpcyBub3QgYXZhaWxhYmxlIG9uIFdpbmRvd3MgWFAgYW5kIFdpbmRvd3MgU2VydmVyIDIwMDMsCi0gICAgICAgICMgYnV0IFNldEVycm9yTW9kZSByZXR1cm5zIHRoZSBwcmV2aW91cyB2YWx1ZSwgc28gd2UgY2FuIHVzZSB0aGF0Ci0gICAgICAgIGltcG9ydCBjdHlwZXMKLSAgICAgICAgazMyID0gY3R5cGVzLndpbmRsbC5rZXJuZWwzMgotICAgICAgICBTRU1fTk9HUEZBVUxURVJST1JCT1ggPSAweDAyCi0gICAgICAgIG9sZF9lcnJvcl9tb2RlID0gazMyLlNldEVycm9yTW9kZShTRU1fTk9HUEZBVUxURVJST1JCT1gpCi0gICAgICAgIGszMi5TZXRFcnJvck1vZGUob2xkX2Vycm9yX21vZGUgfCBTRU1fTk9HUEZBVUxURVJST1JCT1gpCitkZWYgZnNfaXNfY2FzZV9pbnNlbnNpdGl2ZShkaXJlY3RvcnkpOgorICAgICIiIkRldGVjdHMgaWYgdGhlIGZpbGUgc3lzdGVtIGZvciB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yeSBpcyBjYXNlLWluc2Vuc2l0aXZlLiIiIgorICAgIHdpdGggdGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlGaWxlKGRpcj1kaXJlY3RvcnkpIGFzIGJhc2U6CisgICAgICAgIGJhc2VfcGF0aCA9IGJhc2UubmFtZQorICAgICAgICBjYXNlX3BhdGggPSBiYXNlX3BhdGgudXBwZXIoKQorICAgICAgICBpZiBjYXNlX3BhdGggPT0gYmFzZV9wYXRoOgorICAgICAgICAgICAgY2FzZV9wYXRoID0gYmFzZV9wYXRoLmxvd2VyKCkKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgeWllbGQKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGszMi5TZXRFcnJvck1vZGUob2xkX2Vycm9yX21vZGUpCi1lbHNlOgotICAgICMgdGhpcyBpcyBhIG5vLW9wIGZvciBvdGhlciBwbGF0Zm9ybXMKLSAgICBAY29udGV4dGxpYi5jb250ZXh0bWFuYWdlcgotICAgIGRlZiBzdXBwcmVzc19jcmFzaF9wb3B1cCgpOgotICAgICAgICB5aWVsZAorICAgICAgICAgICAgcmV0dXJuIG9zLnBhdGguc2FtZWZpbGUoYmFzZV9wYXRoLCBjYXNlX3BhdGgpCisgICAgICAgIGV4Y2VwdCBGaWxlTm90Rm91bmRFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisKK2NsYXNzIFN1cHByZXNzQ3Jhc2hSZXBvcnQ6CisgICAgIiIiVHJ5IHRvIHByZXZlbnQgYSBjcmFzaCByZXBvcnQgZnJvbSBwb3BwaW5nIHVwLgorCisgICAgT24gV2luZG93cywgZG9uJ3QgZGlzcGxheSB0aGUgV2luZG93cyBFcnJvciBSZXBvcnRpbmcgZGlhbG9nLiAgT24gVU5JWCwKKyAgICBkaXNhYmxlIHRoZSBjcmVhdGlvbiBvZiBjb3JlZHVtcCBmaWxlLgorICAgICIiIgorICAgIG9sZF92YWx1ZSA9IE5vbmUKKworICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgICIiIk9uIFdpbmRvd3MsIGRpc2FibGUgV2luZG93cyBFcnJvciBSZXBvcnRpbmcgZGlhbG9ncyB1c2luZworICAgICAgICBTZXRFcnJvck1vZGUuCisKKyAgICAgICAgT24gVU5JWCwgdHJ5IHRvIHNhdmUgdGhlIHByZXZpb3VzIGNvcmUgZmlsZSBzaXplIGxpbWl0LCB0aGVuIHNldAorICAgICAgICBzb2Z0IGxpbWl0IHRvIDAuCisgICAgICAgICIiIgorICAgICAgICBpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnd2luJyk6CisgICAgICAgICAgICAjIHNlZSBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvd2luZG93cy9kZXNrdG9wL21zNjgwNjIxLmFzcHgKKyAgICAgICAgICAgICMgR2V0RXJyb3JNb2RlIGlzIG5vdCBhdmFpbGFibGUgb24gV2luZG93cyBYUCBhbmQgV2luZG93cyBTZXJ2ZXIgMjAwMywKKyAgICAgICAgICAgICMgYnV0IFNldEVycm9yTW9kZSByZXR1cm5zIHRoZSBwcmV2aW91cyB2YWx1ZSwgc28gd2UgY2FuIHVzZSB0aGF0CisgICAgICAgICAgICBpbXBvcnQgY3R5cGVzCisgICAgICAgICAgICBzZWxmLl9rMzIgPSBjdHlwZXMud2luZGxsLmtlcm5lbDMyCisgICAgICAgICAgICBTRU1fTk9HUEZBVUxURVJST1JCT1ggPSAweDAyCisgICAgICAgICAgICBzZWxmLm9sZF92YWx1ZSA9IHNlbGYuX2szMi5TZXRFcnJvck1vZGUoU0VNX05PR1BGQVVMVEVSUk9SQk9YKQorICAgICAgICAgICAgc2VsZi5fazMyLlNldEVycm9yTW9kZShzZWxmLm9sZF92YWx1ZSB8IFNFTV9OT0dQRkFVTFRFUlJPUkJPWCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIHJlc291cmNlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5vbGRfdmFsdWUgPSByZXNvdXJjZS5nZXRybGltaXQocmVzb3VyY2UuUkxJTUlUX0NPUkUpCisgICAgICAgICAgICAgICAgICAgIHJlc291cmNlLnNldHJsaW1pdChyZXNvdXJjZS5STElNSVRfQ09SRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBzZWxmLm9sZF92YWx1ZVsxXSkpCisgICAgICAgICAgICAgICAgZXhjZXB0IChWYWx1ZUVycm9yLCBPU0Vycm9yKToKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nOgorICAgICAgICAgICAgICAgICMgQ2hlY2sgaWYgdGhlICdDcmFzaCBSZXBvcnRlcicgb24gT1NYIHdhcyBjb25maWd1cmVkCisgICAgICAgICAgICAgICAgIyBpbiAnRGV2ZWxvcGVyJyBtb2RlIGFuZCB3YXJuIHRoYXQgaXQgd2lsbCBnZXQgdHJpZ2dlcmVkCisgICAgICAgICAgICAgICAgIyB3aGVuIGl0IGlzLgorICAgICAgICAgICAgICAgICMKKyAgICAgICAgICAgICAgICAjIFRoaXMgYXNzdW1lcyB0aGF0IHRoaXMgY29udGV4dCBtYW5hZ2VyIGlzIHVzZWQgaW4gdGVzdHMKKyAgICAgICAgICAgICAgICAjIHRoYXQgbWlnaHQgdHJpZ2dlciB0aGUgbmV4dCBtYW5hZ2VyLgorICAgICAgICAgICAgICAgIHZhbHVlID0gc3VicHJvY2Vzcy5Qb3BlbihbJy91c3IvYmluL2RlZmF1bHRzJywgJ3JlYWQnLAorICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbS5hcHBsZS5DcmFzaFJlcG9ydGVyJywgJ0RpYWxvZ1R5cGUnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpLmNvbW11bmljYXRlKClbMF0KKyAgICAgICAgICAgICAgICBpZiB2YWx1ZS5zdHJpcCgpID09IGInZGV2ZWxvcGVyJzoKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoInRoaXMgdGVzdCB0cmlnZ2VycyB0aGUgQ3Jhc2ggUmVwb3J0ZXIsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgInRoYXQgaXMgaW50ZW50aW9uYWwiLCBlbmQ9JycsIGZsdXNoPVRydWUpCisKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqaWdub3JlX2V4Yyk6CisgICAgICAgICIiIlJlc3RvcmUgV2luZG93cyBFcnJvck1vZGUgb3IgY29yZSBmaWxlIGJlaGF2aW9yIHRvIGluaXRpYWwgdmFsdWUuIiIiCisgICAgICAgIGlmIHNlbGYub2xkX3ZhbHVlIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnd2luJyk6CisgICAgICAgICAgICBzZWxmLl9rMzIuU2V0RXJyb3JNb2RlKHNlbGYub2xkX3ZhbHVlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgcmVzb3VyY2UgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5zZXRybGltaXQocmVzb3VyY2UuUkxJTUlUX0NPUkUsIHNlbGYub2xkX3ZhbHVlKQorICAgICAgICAgICAgICAgIGV4Y2VwdCAoVmFsdWVFcnJvciwgT1NFcnJvcik6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKIAogCiBkZWYgcGF0Y2godGVzdF9pbnN0YW5jZSwgb2JqZWN0X3RvX3BhdGNoLCBhdHRyX25hbWUsIG5ld192YWx1ZSk6CkBAIC0yMDY3LDMgKzIyODIsMjMgQEAKIAogICAgICMgYWN0dWFsbHkgb3ZlcnJpZGUgdGhlIGF0dHJpYnV0ZQogICAgIHNldGF0dHIob2JqZWN0X3RvX3BhdGNoLCBhdHRyX25hbWUsIG5ld192YWx1ZSkKKworCitkZWYgcnVuX2luX3N1YmludGVycChjb2RlKToKKyAgICAiIiIKKyAgICBSdW4gY29kZSBpbiBhIHN1YmludGVycHJldGVyLiBSYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCBpZiB0aGUgdHJhY2VtYWxsb2MKKyAgICBtb2R1bGUgaXMgZW5hYmxlZC4KKyAgICAiIiIKKyAgICAjIElzc3VlICMxMDkxNSwgIzE1NzUxOiBQeUdJTFN0YXRlXyooKSBmdW5jdGlvbnMgZG9uJ3Qgd29yayB3aXRoCisgICAgIyBzdWItaW50ZXJwcmV0ZXJzLCB0aGUgdHJhY2VtYWxsb2MgbW9kdWxlIHVzZXMgdGhlc2UgZnVuY3Rpb25zIGludGVybmFsbHkKKyAgICB0cnk6CisgICAgICAgIGltcG9ydCB0cmFjZW1hbGxvYworICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgcGFzcworICAgIGVsc2U6CisgICAgICAgIGlmIHRyYWNlbWFsbG9jLmlzX3RyYWNpbmcoKToKKyAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJydW5faW5fc3ViaW50ZXJwKCkgY2Fubm90IGJlIHVzZWQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpZiB0cmFjZW1hbGxvYyBtb2R1bGUgaXMgdHJhY2luZyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1lbW9yeSBhbGxvY2F0aW9ucyIpCisgICAgaW1wb3J0IF90ZXN0Y2FwaQorICAgIHJldHVybiBfdGVzdGNhcGkucnVuX2luX3N1YmludGVycChjb2RlKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9fX2FsbF9fLnB5IGIvTGliL3Rlc3QvdGVzdF9fX2FsbF9fLnB5CmluZGV4IDYwOGVjMDEuLmU5NGQ5ODQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfX19hbGxfXy5weQorKysgYi9MaWIvdGVzdC90ZXN0X19fYWxsX18ucHkKQEAgLTI5LDE3ICsyOSwyMCBAQAogICAgICAgICBpZiBub3QgaGFzYXR0cihzeXMubW9kdWxlc1ttb2RuYW1lXSwgIl9fYWxsX18iKToKICAgICAgICAgICAgIHJhaXNlIE5vQWxsKG1vZG5hbWUpCiAgICAgICAgIG5hbWVzID0ge30KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZXhlYygiZnJvbSAlcyBpbXBvcnQgKiIgJSBtb2RuYW1lLCBuYW1lcykKLSAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgotICAgICAgICAgICAgIyBJbmNsdWRlIHRoZSBtb2R1bGUgbmFtZSBpbiB0aGUgZXhjZXB0aW9uIHN0cmluZwotICAgICAgICAgICAgc2VsZi5mYWlsKCJfX2FsbF9fIGZhaWx1cmUgaW4ge306IHt9OiB7fSIuZm9ybWF0KAotICAgICAgICAgICAgICAgICAgICAgIG1vZG5hbWUsIGUuX19jbGFzc19fLl9fbmFtZV9fLCBlKSkKLSAgICAgICAgaWYgIl9fYnVpbHRpbnNfXyIgaW4gbmFtZXM6Ci0gICAgICAgICAgICBkZWwgbmFtZXNbIl9fYnVpbHRpbnNfXyJdCi0gICAgICAgIGtleXMgPSBzZXQobmFtZXMpCi0gICAgICAgIGFsbCA9IHNldChzeXMubW9kdWxlc1ttb2RuYW1lXS5fX2FsbF9fKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGtleXMsIGFsbCkKKyAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QobW9kdWxlPW1vZG5hbWUpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGV4ZWMoImZyb20gJXMgaW1wb3J0ICoiICUgbW9kbmFtZSwgbmFtZXMpCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICAgICAgIyBJbmNsdWRlIHRoZSBtb2R1bGUgbmFtZSBpbiB0aGUgZXhjZXB0aW9uIHN0cmluZworICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiX19hbGxfXyBmYWlsdXJlIGluIHt9OiB7fToge30iLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kbmFtZSwgZS5fX2NsYXNzX18uX19uYW1lX18sIGUpKQorICAgICAgICAgICAgaWYgIl9fYnVpbHRpbnNfXyIgaW4gbmFtZXM6CisgICAgICAgICAgICAgICAgZGVsIG5hbWVzWyJfX2J1aWx0aW5zX18iXQorICAgICAgICAgICAga2V5cyA9IHNldChuYW1lcykKKyAgICAgICAgICAgIGFsbF9saXN0ID0gc3lzLm1vZHVsZXNbbW9kbmFtZV0uX19hbGxfXworICAgICAgICAgICAgYWxsX3NldCA9IHNldChhbGxfbGlzdCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Q291bnRFcXVhbChhbGxfc2V0LCBhbGxfbGlzdCwgImluIG1vZHVsZSB7fSIuZm9ybWF0KG1vZG5hbWUpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChrZXlzLCBhbGxfc2V0LCAiaW4gbW9kdWxlIHt9Ii5mb3JtYXQobW9kbmFtZSkpCiAKICAgICBkZWYgd2Fsa19tb2R1bGVzKHNlbGYsIGJhc2VkaXIsIG1vZHBhdGgpOgogICAgICAgICBmb3IgZm4gaW4gc29ydGVkKG9zLmxpc3RkaXIoYmFzZWRpcikpOgpAQCAtNjksMTMgKzcyLDE0IEBACiAKICAgICAgICAgIyBybGNvbXBsZXRlciBuZWVkcyBzcGVjaWFsIGNvbnNpZGVyYXRpb247IGl0IGltcG9ydCByZWFkbGluZSB3aGljaAogICAgICAgICAjIGluaXRpYWxpemVzIEdOVSByZWFkbGluZSB3aGljaCBjYWxscyBzZXRsb2NhbGUoTENfQ1RZUEUsICIiKS4uLiA6LSgKKyAgICAgICAgaW1wb3J0IGxvY2FsZQorICAgICAgICBsb2NhbGVfdHVwbGUgPSBsb2NhbGUuZ2V0bG9jYWxlKGxvY2FsZS5MQ19DVFlQRSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgaW1wb3J0IHJsY29tcGxldGVyCi0gICAgICAgICAgICBpbXBvcnQgbG9jYWxlCiAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGxvY2FsZS5zZXRsb2NhbGUobG9jYWxlLkxDX0NUWVBFLCAnQycpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBsb2NhbGUuc2V0bG9jYWxlKGxvY2FsZS5MQ19DVFlQRSwgbG9jYWxlX3R1cGxlKQogCiAgICAgICAgIGlnbm9yZWQgPSBbXQogICAgICAgICBmYWlsZWRfaW1wb3J0cyA9IFtdCkBAIC0xMTAsOCArMTE0LDUgQEAKICAgICAgICAgICAgIHByaW50KCdGb2xsb3dpbmcgbW9kdWxlcyBmYWlsZWQgdG8gYmUgaW1wb3J0ZWQ6JywgZmFpbGVkX2ltcG9ydHMpCiAKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KEFsbFRlc3QpCi0KIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfX2xvY2FsZS5weSBiL0xpYi90ZXN0L3Rlc3RfX2xvY2FsZS5weQppbmRleCA0MjMxZjM3Li41OGYyZjA0IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X19sb2NhbGUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9fbG9jYWxlLnB5CkBAIC05LDcgKzksNiBAQAogaW1wb3J0IHN5cwogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHBsYXRmb3JtIGltcG9ydCB1bmFtZQotZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAogCiBpZiB1bmFtZSgpLnN5c3RlbSA9PSAiRGFyd2luIjoKICAgICBtYWosIG1pbiwgbWljID0gW2ludChwYXJ0KSBmb3IgcGFydCBpbiB1bmFtZSgpLnJlbGVhc2Uuc3BsaXQoIi4iKV0KQEAgLTI0LDQ1ICsyMyw1NSBAQAogICAgICdkYV9ESycsICdubl9OTycsICdjc19DWicsICdkZV9MVScsICdlc19CTycsICdzcV9BTCcsICdza19TSycsICdmcl9DSCcsCiAgICAgJ2RlX0RFJywgJ3NyX1lVJywgJ2JyX0ZSJywgJ25sX0JFJywgJ3N2X0ZJJywgJ3BsX1BMJywgJ2ZyX0NBJywgJ2ZvX0ZPJywKICAgICAnYnNfQkEnLCAnZnJfTFUnLCAna2xfR0wnLCAnZmFfSVInLCAnZGVfQkUnLCAnc3ZfU0UnLCAnaXRfQ0gnLCAndWtfVUEnLAotICAgICdldV9FUycsICd2aV9WTicsICdhZl9aQScsICduYl9OTycsICdlbl9ESycsICd0Z19USicsICdlbl9VUycsCi0gICAgJ2VzX0VTLklTTzg4NTktMScsICdmcl9GUi5JU084ODU5LTE1JywgJ3J1X1JVLktPSTgtUicsICdrb19LUi5ldWNLUiddCisgICAgJ2V1X0VTJywgJ3ZpX1ZOJywgJ2FmX1pBJywgJ25iX05PJywgJ2VuX0RLJywgJ3RnX1RKJywgJ3BzX0FGJywgJ2VuX1VTJywKKyAgICAnZnJfRlIuSVNPODg1OS0xJywgJ2ZyX0ZSLlVURi04JywgJ2ZyX0ZSLklTTzg4NTktMTVAZXVybycsCisgICAgJ3J1X1JVLktPSTgtUicsICdrb19LUi5ldWNLUiddCiAKLSMgSXNzdWUgIzEzNDQxOiBTa2lwIHNvbWUgbG9jYWxlcyAoZS5nLiBjc19DWiBhbmQgaHVfSFUpIG9uIFNvbGFyaXMgdG8KLSMgd29ya2Fyb3VuZCBhIG1ic3Rvd2NzKCkgYnVnLiBGb3IgZXhhbXBsZSwgb24gU29sYXJpcywgdGhlIGh1X0hVIGxvY2FsZSB1c2VzCi0jIHRoZSBsb2NhbGUgZW5jb2RpbmcgSVNPLTg4NTktMiwgdGhlIHRob3VzYXVkcyBzZXBhcmF0b3IgaXMgYidceEEwJyBhbmQgaXQgaXMKLSMgZGVjb2RlZCBhcyBVKzMwMDAwMDIwIChhbiBpbnZhbGlkIGNoYXJhY3RlcikgYnkgbWJzdG93Y3MoKS4KLWlmIHN5cy5wbGF0Zm9ybSA9PSAnc3Vub3M1JzoKLSAgICBvbGRfbG9jYWxlID0gbG9jYWxlLnNldGxvY2FsZShsb2NhbGUuTENfQUxMKQotICAgIHRyeToKLSAgICAgICAgbG9jYWxlcyA9IFtdCi0gICAgICAgIGZvciBsb2MgaW4gY2FuZGlkYXRlX2xvY2FsZXM6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgbG9jYWxlLnNldGxvY2FsZShsb2NhbGUuTENfQUxMLCBsb2MpCi0gICAgICAgICAgICBleGNlcHQgRXJyb3I6Ci0gICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIGVuY29kaW5nID0gbG9jYWxlLmdldHByZWZlcnJlZGVuY29kaW5nKEZhbHNlKQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGxvY2FsZWNvbnYoKQotICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlcnI6Ci0gICAgICAgICAgICAgICAgcHJpbnQoIldBUk5JTkc6IFNraXAgbG9jYWxlICVzIChlbmNvZGluZyAlcyk6IFslc10gJXMiCi0gICAgICAgICAgICAgICAgICAgICAgJSAobG9jLCBlbmNvZGluZywgdHlwZShlcnIpLCBlcnIpKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBsb2NhbGVzLmFwcGVuZChsb2MpCi0gICAgICAgIGNhbmRpZGF0ZV9sb2NhbGVzID0gbG9jYWxlcwotICAgIGZpbmFsbHk6Ci0gICAgICAgIGxvY2FsZS5zZXRsb2NhbGUobG9jYWxlLkxDX0FMTCwgb2xkX2xvY2FsZSkKK2RlZiBzZXRVcE1vZHVsZSgpOgorICAgIGdsb2JhbCBjYW5kaWRhdGVfbG9jYWxlcworICAgICMgSXNzdWUgIzEzNDQxOiBTa2lwIHNvbWUgbG9jYWxlcyAoZS5nLiBjc19DWiBhbmQgaHVfSFUpIG9uIFNvbGFyaXMgdG8KKyAgICAjIHdvcmthcm91bmQgYSBtYnN0b3djcygpIGJ1Zy4gRm9yIGV4YW1wbGUsIG9uIFNvbGFyaXMsIHRoZSBodV9IVSBsb2NhbGUgdXNlcworICAgICMgdGhlIGxvY2FsZSBlbmNvZGluZyBJU08tODg1OS0yLCB0aGUgdGhvdXNhdWRzIHNlcGFyYXRvciBpcyBiJ1x4QTAnIGFuZCBpdCBpcworICAgICMgZGVjb2RlZCBhcyBVKzMwMDAwMDIwIChhbiBpbnZhbGlkIGNoYXJhY3RlcikgYnkgbWJzdG93Y3MoKS4KKyAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3N1bm9zNSc6CisgICAgICAgIG9sZF9sb2NhbGUgPSBsb2NhbGUuc2V0bG9jYWxlKGxvY2FsZS5MQ19BTEwpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGxvY2FsZXMgPSBbXQorICAgICAgICAgICAgZm9yIGxvYyBpbiBjYW5kaWRhdGVfbG9jYWxlczoKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGxvY2FsZS5zZXRsb2NhbGUobG9jYWxlLkxDX0FMTCwgbG9jKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBlbmNvZGluZyA9IGxvY2FsZS5nZXRwcmVmZXJyZWRlbmNvZGluZyhGYWxzZSkKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGxvY2FsZWNvbnYoKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXJyOgorICAgICAgICAgICAgICAgICAgICBwcmludCgiV0FSTklORzogU2tpcCBsb2NhbGUgJXMgKGVuY29kaW5nICVzKTogWyVzXSAlcyIKKyAgICAgICAgICAgICAgICAgICAgICAgICUgKGxvYywgZW5jb2RpbmcsIHR5cGUoZXJyKSwgZXJyKSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBsb2NhbGVzLmFwcGVuZChsb2MpCisgICAgICAgICAgICBjYW5kaWRhdGVfbG9jYWxlcyA9IGxvY2FsZXMKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGxvY2FsZS5zZXRsb2NhbGUobG9jYWxlLkxDX0FMTCwgb2xkX2xvY2FsZSkKIAotIyBXb3JrYXJvdW5kIGZvciBNU1ZDNihkZWJ1ZykgY3Jhc2ggYnVnCi1pZiAiTVNDIHYuMTIwMCIgaW4gc3lzLnZlcnNpb246Ci0gICAgZGVmIGFjY2VwdChsb2MpOgotICAgICAgICBhID0gbG9jLnNwbGl0KCIuIikKLSAgICAgICAgcmV0dXJuIG5vdChsZW4oYSkgPT0gMiBhbmQgbGVuKGFbLTFdKSA+PSA5KQotICAgIGNhbmRpZGF0ZV9sb2NhbGVzID0gW2xvYyBmb3IgbG9jIGluIGNhbmRpZGF0ZV9sb2NhbGVzIGlmIGFjY2VwdChsb2MpXQorICAgICMgV29ya2Fyb3VuZCBmb3IgTVNWQzYoZGVidWcpIGNyYXNoIGJ1ZworICAgIGlmICJNU0Mgdi4xMjAwIiBpbiBzeXMudmVyc2lvbjoKKyAgICAgICAgZGVmIGFjY2VwdChsb2MpOgorICAgICAgICAgICAgYSA9IGxvYy5zcGxpdCgiLiIpCisgICAgICAgICAgICByZXR1cm4gbm90KGxlbihhKSA9PSAyIGFuZCBsZW4oYVstMV0pID49IDkpCisgICAgICAgIGNhbmRpZGF0ZV9sb2NhbGVzID0gW2xvYyBmb3IgbG9jIGluIGNhbmRpZGF0ZV9sb2NhbGVzIGlmIGFjY2VwdChsb2MpXQogCiAjIExpc3Qga25vd24gbG9jYWxlIHZhbHVlcyB0byB0ZXN0IGFnYWluc3Qgd2hlbiBhdmFpbGFibGUuCiAjIERpY3QgZm9ybWF0dGVkIGFzIGBgPGxvY2FsZT4gOiAoPGRlY2ltYWxfcG9pbnQ+LCA8dGhvdXNhbmRzX3NlcD4pYGAuICBJZiBhCiAjIHZhbHVlIGlzIG5vdCBrbm93biwgdXNlICcnIC4KLWtub3duX251bWVyaWNzID0geydmcl9GUicgOiAoJywnLCAnJyksICdlbl9VUyc6KCcuJywgJywnKX0KK2tub3duX251bWVyaWNzID0geworICAgICdlbl9VUyc6ICgnLicsICcsJyksCisgICAgJ2RlX0RFJyA6ICgnLCcsICcuJyksCisgICAgIyBUaGUgRnJlbmNoIHRob3VzYW5kcyBzZXBhcmF0b3IgbWF5IGJlIGEgYnJlYWtpbmcgb3Igbm9uLWJyZWFraW5nIHNwYWNlCisgICAgIyBkZXBlbmRpbmcgb24gdGhlIHBsYXRmb3JtLCBzbyBkbyBub3QgdGVzdCBpdAorICAgICdmcl9GUicgOiAoJywnLCAnJyksCisgICAgJ3BzX0FGJzogKCdcdTA2NmInLCAnXHUwNjZjJyksCit9CiAKIGNsYXNzIF9Mb2NhbGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKQEAgLTkxLDEwICsxMDAsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGNfdmFsdWUsIGtub3duX3ZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsY190eXBlLCBkYXRhX3R5cGUsIHNldF9sb2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VkX2xvY2FsZSkpCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQogCiAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MobmxfbGFuZ2luZm8sICJubF9sYW5naW5mbyBpcyBub3QgYXZhaWxhYmxlIikKICAgICBkZWYgdGVzdF9sY19udW1lcmljX25sX2xhbmdpbmZvKHNlbGYpOgogICAgICAgICAjIFRlc3QgbmxfbGFuZ2luZm8gYWdhaW5zdCBrbm93biB2YWx1ZXMKKyAgICAgICAgdGVzdGVkID0gRmFsc2UKICAgICAgICAgZm9yIGxvYyBpbiBjYW5kaWRhdGVfbG9jYWxlczoKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzZXRsb2NhbGUoTENfTlVNRVJJQywgbG9jKQpAQCAtMTAzLDEwICsxMTQsMTQgQEAKICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgZm9yIGxpLCBsYyBpbiAoKFJBRElYQ0hBUiwgImRlY2ltYWxfcG9pbnQiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoVEhPVVNFUCwgInRob3VzYW5kc19zZXAiKSk6Ci0gICAgICAgICAgICAgICAgc2VsZi5udW1lcmljX3Rlc3RlcignbmxfbGFuZ2luZm8nLCBubF9sYW5naW5mbyhsaSksIGxjLCBsb2MpCisgICAgICAgICAgICAgICAgaWYgc2VsZi5udW1lcmljX3Rlc3RlcignbmxfbGFuZ2luZm8nLCBubF9sYW5naW5mbyhsaSksIGxjLCBsb2MpOgorICAgICAgICAgICAgICAgICAgICB0ZXN0ZWQgPSBUcnVlCisgICAgICAgIGlmIG5vdCB0ZXN0ZWQ6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCdubyBzdWl0YWJsZSBsb2NhbGVzJykKIAogICAgIGRlZiB0ZXN0X2xjX251bWVyaWNfbG9jYWxlY29udihzZWxmKToKICAgICAgICAgIyBUZXN0IGxvY2FsZWNvbnYgYWdhaW5zdCBrbm93biB2YWx1ZXMKKyAgICAgICAgdGVzdGVkID0gRmFsc2UKICAgICAgICAgZm9yIGxvYyBpbiBjYW5kaWRhdGVfbG9jYWxlczoKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzZXRsb2NhbGUoTENfTlVNRVJJQywgbG9jKQpAQCAtMTE2LDExICsxMzEsMTUgQEAKICAgICAgICAgICAgIGZvcm1hdHRpbmcgPSBsb2NhbGVjb252KCkKICAgICAgICAgICAgIGZvciBsYyBpbiAoImRlY2ltYWxfcG9pbnQiLAogICAgICAgICAgICAgICAgICAgICAgICAgInRob3VzYW5kc19zZXAiKToKLSAgICAgICAgICAgICAgICBzZWxmLm51bWVyaWNfdGVzdGVyKCdsb2NhbGVjb252JywgZm9ybWF0dGluZ1tsY10sIGxjLCBsb2MpCisgICAgICAgICAgICAgICAgaWYgc2VsZi5udW1lcmljX3Rlc3RlcignbG9jYWxlY29udicsIGZvcm1hdHRpbmdbbGNdLCBsYywgbG9jKToKKyAgICAgICAgICAgICAgICAgICAgdGVzdGVkID0gVHJ1ZQorICAgICAgICBpZiBub3QgdGVzdGVkOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgnbm8gc3VpdGFibGUgbG9jYWxlcycpCiAKICAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhubF9sYW5naW5mbywgIm5sX2xhbmdpbmZvIGlzIG5vdCBhdmFpbGFibGUiKQogICAgIGRlZiB0ZXN0X2xjX251bWVyaWNfYmFzaWMoc2VsZik6CiAgICAgICAgICMgVGVzdCBubF9sYW5naW5mbyBhZ2FpbnN0IGxvY2FsZWNvbnYKKyAgICAgICAgdGVzdGVkID0gRmFsc2UKICAgICAgICAgZm9yIGxvYyBpbiBjYW5kaWRhdGVfbG9jYWxlczoKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzZXRsb2NhbGUoTENfTlVNRVJJQywgbG9jKQpAQCAtMTQwLDEwICsxNTksMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIihzZXQgdG8gJXMsIHVzaW5nICVzKSIgJSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBubF9yYWRpeGNoYXIsIGxpX3JhZGl4Y2hhciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYywgc2V0X2xvY2FsZSkpCisgICAgICAgICAgICAgICAgdGVzdGVkID0gVHJ1ZQorICAgICAgICBpZiBub3QgdGVzdGVkOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgnbm8gc3VpdGFibGUgbG9jYWxlcycpCiAKICAgICBkZWYgdGVzdF9mbG9hdF9wYXJzaW5nKHNlbGYpOgogICAgICAgICAjIEJ1ZyAjMTM5MTg3MjogVGVzdCB3aGV0aGVyIGZsb2F0IHBhcnNpbmcgaXMgb2theSBvbiBFdXJvcGVhbgogICAgICAgICAjIGxvY2FsZXMuCisgICAgICAgIHRlc3RlZCA9IEZhbHNlCiAgICAgICAgIGZvciBsb2MgaW4gY2FuZGlkYXRlX2xvY2FsZXM6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc2V0bG9jYWxlKExDX05VTUVSSUMsIGxvYykKQEAgLTE2Miw5ICsxODUsMTAgQEAKICAgICAgICAgICAgIGlmIGxvY2FsZWNvbnYoKVsnZGVjaW1hbF9wb2ludCddICE9ICcuJzoKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmbG9hdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbGVjb252KClbJ2RlY2ltYWxfcG9pbnQnXS5qb2luKFsnMScsICcyMyddKSkKKyAgICAgICAgICAgIHRlc3RlZCA9IFRydWUKKyAgICAgICAgaWYgbm90IHRlc3RlZDoKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoJ25vIHN1aXRhYmxlIGxvY2FsZXMnKQogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgcnVuX3VuaXR0ZXN0KF9Mb2NhbGVUZXN0cykKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9fb3Bjb2RlLnB5IGIvTGliL3Rlc3QvdGVzdF9fb3Bjb2RlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxNTJlOWQKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X19vcGNvZGUucHkKQEAgLTAsMCArMSwyMyBAQAoraW1wb3J0IGRpcworZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgaW1wb3J0X21vZHVsZQoraW1wb3J0IHVuaXR0ZXN0CisKK19vcGNvZGUgPSBpbXBvcnRfbW9kdWxlKCJfb3Bjb2RlIikKKworY2xhc3MgT3Bjb2RlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc3RhY2tfZWZmZWN0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF9vcGNvZGUuc3RhY2tfZWZmZWN0KGRpcy5vcG1hcFsnUE9QX1RPUCddKSwgLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX29wY29kZS5zdGFja19lZmZlY3QoZGlzLm9wbWFwWydEVVBfVE9QX1RXTyddKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfb3Bjb2RlLnN0YWNrX2VmZmVjdChkaXMub3BtYXBbJ0JVSUxEX1NMSUNFJ10sIDApLCAtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfb3Bjb2RlLnN0YWNrX2VmZmVjdChkaXMub3BtYXBbJ0JVSUxEX1NMSUNFJ10sIDEpLCAtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfb3Bjb2RlLnN0YWNrX2VmZmVjdChkaXMub3BtYXBbJ0JVSUxEX1NMSUNFJ10sIDMpLCAtMikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgX29wY29kZS5zdGFja19lZmZlY3QsIDMwMDAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBfb3Bjb2RlLnN0YWNrX2VmZmVjdCwgZGlzLm9wbWFwWydCVUlMRF9TTElDRSddKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBfb3Bjb2RlLnN0YWNrX2VmZmVjdCwgZGlzLm9wbWFwWydQT1BfVE9QJ10sIDApCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICBydW5fdW5pdHRlc3QoT3Bjb2RlVGVzdHMpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfX29zeF9zdXBwb3J0LnB5IGIvTGliL3Rlc3QvdGVzdF9fb3N4X3N1cHBvcnQucHkKaW5kZXggZmIxNTllYy4uNWRjYWRmNyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9fb3N4X3N1cHBvcnQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9fb3N4X3N1cHBvcnQucHkKQEAgLTEwOSw3ICsxMDksOSBAQAogCiAgICAgZGVmIHRlc3RfX3N1cHBvcnRzX3VuaXZlcnNhbF9idWlsZHMoc2VsZik6CiAgICAgICAgIGltcG9ydCBwbGF0Zm9ybQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBsYXRmb3JtLm1hY192ZXIoKVswXS5zcGxpdCgnLicpID49IFsnMTAnLCAnNCddLAorICAgICAgICBtYWNfdmVyX3R1cGxlID0gdHVwbGUoaW50KGkpIGZvciBpIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhdGZvcm0ubWFjX3ZlcigpWzBdLnNwbGl0KCcuJylbMDoyXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYWNfdmVyX3R1cGxlID49ICgxMCwgNCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX29zeF9zdXBwb3J0Ll9zdXBwb3J0c191bml2ZXJzYWxfYnVpbGRzKCkpCiAKICAgICBkZWYgdGVzdF9fZmluZF9hcHByb3ByaWF0ZV9jb21waWxlcihzZWxmKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYWJjLnB5IGIvTGliL3Rlc3QvdGVzdF9hYmMucHkKaW5kZXggZDRkNzU1Ni4uZTE3NjVmMCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9hYmMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9hYmMucHkKQEAgLTY4LDYgKzY4LDE5IEBACiAKIGNsYXNzIFRlc3RBQkModW5pdHRlc3QuVGVzdENhc2UpOgogCisgICAgZGVmIHRlc3RfQUJDX2hlbHBlcihzZWxmKToKKyAgICAgICAgIyBjcmVhdGUgYW4gQUJDIHVzaW5nIHRoZSBoZWxwZXIgY2xhc3MgYW5kIHBlcmZvcm0gYmFzaWMgY2hlY2tzCisgICAgICAgIGNsYXNzIEMoYWJjLkFCQyk6CisgICAgICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgICAgIEBhYmMuYWJzdHJhY3RtZXRob2QKKyAgICAgICAgICAgIGRlZiBmb28oY2xzKTogcmV0dXJuIGNscy5fX25hbWVfXworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoQyksIGFiYy5BQkNNZXRhKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIEMpCisgICAgICAgIGNsYXNzIEQoQyk6CisgICAgICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgICAgIGRlZiBmb28oY2xzKTogcmV0dXJuIHN1cGVyKCkuZm9vKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChELmZvbygpLCAnRCcpCisKICAgICBkZWYgdGVzdF9hYnN0cmFjdG1ldGhvZF9iYXNpY3Moc2VsZik6CiAgICAgICAgIEBhYmMuYWJzdHJhY3RtZXRob2QKICAgICAgICAgZGVmIGZvbyhzZWxmKTogcGFzcwpAQCAtMTgxLDkgKzE5NCw5IEBACiAgICAgICAgICMgY2hlY2sgdGhhdCB0aGUgcHJvcGVydHkncyBfX2lzYWJzdHJhY3RtZXRob2RfXyBkZXNjcmlwdG9yIGRvZXMgdGhlCiAgICAgICAgICMgcmlnaHQgdGhpbmcgd2hlbiBwcmVzZW50ZWQgd2l0aCBhIHZhbHVlIHRoYXQgZmFpbHMgdHJ1dGggdGVzdGluZzoKICAgICAgICAgY2xhc3MgTm90Qm9vbChvYmplY3QpOgotICAgICAgICAgICAgZGVmIF9fbm9uemVyb19fKHNlbGYpOgorICAgICAgICAgICAgZGVmIF9fYm9vbF9fKHNlbGYpOgogICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoKQotICAgICAgICAgICAgX19sZW5fXyA9IF9fbm9uemVyb19fCisgICAgICAgICAgICBfX2xlbl9fID0gX19ib29sX18KICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKICAgICAgICAgICAgIGNsYXNzIEYoQyk6CiAgICAgICAgICAgICAgICAgZGVmIGJhcihzZWxmKToKQEAgLTI4OCw3ICszMDEsMTAgQEAKICAgICAgICAgYiA9IEIoKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzaW5zdGFuY2UoYiwgQSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNpbnN0YW5jZShiLCAoQSwpKSkKKyAgICAgICAgdG9rZW5fb2xkID0gYWJjLmdldF9jYWNoZV90b2tlbigpCiAgICAgICAgIEEucmVnaXN0ZXIoQikKKyAgICAgICAgdG9rZW5fbmV3ID0gYWJjLmdldF9jYWNoZV90b2tlbigpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwodG9rZW5fb2xkLCB0b2tlbl9uZXcpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGIsIEEpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShiLCAoQSwpKSkKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9haWZjLnB5IGIvTGliL3Rlc3QvdGVzdF9haWZjLnB5CmluZGV4IDEwMjYwZTMuLmFiNTE0MzcgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfYWlmYy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2FpZmMucHkKQEAgLTEsNiArMSw3IEBACiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgZmluZGZpbGUsIFRFU1RGTiwgdW5saW5rCiBpbXBvcnQgdW5pdHRlc3QKIGZyb20gdGVzdCBpbXBvcnQgYXVkaW90ZXN0cworZnJvbSBhdWRpb29wIGltcG9ydCBieXRlc3dhcAogaW1wb3J0IG9zCiBpbXBvcnQgaW8KIGltcG9ydCBzeXMKQEAgLTExOSw3ICsxMjAsNyBAQAogICAgICAgRTUwNDBDQkMgNjE3QzBBM0MgMDhCQzBBM0MgMkM3QzBCM0MgNTE3QzBFM0MgOEE4NDEwRkMgQjY4NDBFQkMgNDU3QzBBM0MgXAogICAgICAgIiIiKQogICAgIGlmIHN5cy5ieXRlb3JkZXIgIT0gJ2JpZyc6Ci0gICAgICAgIGZyYW1lcyA9IGF1ZGlvdGVzdHMuYnl0ZXN3YXAyKGZyYW1lcykKKyAgICAgICAgZnJhbWVzID0gYnl0ZXN3YXAoZnJhbWVzLCAyKQogCiAKIGNsYXNzIEFpZmNBTEFXVGVzdChBaWZjVGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtMTQwLDcgKzE0MSw3IEBACiAgICAgICBFNDgwMENDMCA2MjAwMEE0MCAwOEMwMEE0MCAyQjAwMEI0MCA1MjAwMEU0MCA4QTAwMTE4MCBCNjAwMEVDMCA0NjAwMEE0MCBcCiAgICAgICAiIiIpCiAgICAgaWYgc3lzLmJ5dGVvcmRlciAhPSAnYmlnJzoKLSAgICAgICAgZnJhbWVzID0gYXVkaW90ZXN0cy5ieXRlc3dhcDIoZnJhbWVzKQorICAgICAgICBmcmFtZXMgPSBieXRlc3dhcChmcmFtZXMsIDIpCiAKIAogY2xhc3MgQWlmY01pc2NUZXN0KGF1ZGlvdGVzdHMuQXVkaW9UZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtMTQ5LDYgKzE1MCwyMSBAQAogICAgICAgICAjVGhpcyBmaWxlIGNvbnRhaW5zIGNodW5rIHR5cGVzIGFpZmMgZG9lc24ndCByZWNvZ25pemUuCiAgICAgICAgIHNlbGYuZiA9IGFpZmMub3BlbihmaW5kZmlsZSgnU2luZS0xMDAwSHotMzAwbXMuYWlmJykpCiAKKyAgICBkZWYgdGVzdF9wYXJhbXNfYWRkZWQoc2VsZik6CisgICAgICAgIGYgPSBzZWxmLmYgPSBhaWZjLm9wZW4oVEVTVEZOLCAnd2InKQorICAgICAgICBmLmFpZmYoKQorICAgICAgICBmLnNldHBhcmFtcygoMSwgMSwgMSwgMSwgYidOT05FJywgYicnKSkKKyAgICAgICAgZi5jbG9zZSgpCisKKyAgICAgICAgZiA9IHNlbGYuZiA9IGFpZmMub3BlbihURVNURk4sICdyYicpCisgICAgICAgIHBhcmFtcyA9IGYuZ2V0cGFyYW1zKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJhbXMubmNoYW5uZWxzLCBmLmdldG5jaGFubmVscygpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcmFtcy5zYW1wd2lkdGgsIGYuZ2V0c2FtcHdpZHRoKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyYW1zLmZyYW1lcmF0ZSwgZi5nZXRmcmFtZXJhdGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJhbXMubmZyYW1lcywgZi5nZXRuZnJhbWVzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyYW1zLmNvbXB0eXBlLCBmLmdldGNvbXB0eXBlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyYW1zLmNvbXBuYW1lLCBmLmdldGNvbXBuYW1lKCkpCisKICAgICBkZWYgdGVzdF93cml0ZV9oZWFkZXJfY29tcHR5cGVfc2FtcHdpZHRoKHNlbGYpOgogICAgICAgICBmb3IgY29tcHR5cGUgaW4gKGInVUxBVycsIGIndWxhdycsIGInQUxBVycsIGInYWxhdycsIGInRzcyMicpOgogICAgICAgICAgICAgZm91dCA9IGFpZmMub3Blbihpby5CeXRlc0lPKCksICd3YicpCkBAIC0zNTIsMTIgKzM2OCwxNCBAQAogCiAgICAgZGVmIHRlc3Rfd3JpdGVfYWlmZl9ieV9leHRlbnNpb24oc2VsZik6CiAgICAgICAgIHNhbXB3aWR0aCA9IDIKLSAgICAgICAgZm91dCA9IHNlbGYuZm91dCA9IGFpZmMub3BlbihURVNURk4gKyAnLmFpZmYnLCAnd2InKQorICAgICAgICBmaWxlbmFtZSA9IFRFU1RGTiArICcuYWlmZicKKyAgICAgICAgZm91dCA9IHNlbGYuZm91dCA9IGFpZmMub3BlbihmaWxlbmFtZSwgJ3diJykKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHVubGluaywgZmlsZW5hbWUpCiAgICAgICAgIGZvdXQuc2V0cGFyYW1zKCgxLCBzYW1wd2lkdGgsIDEsIDEsIGInVUxBVycsIGInJykpCiAgICAgICAgIGZyYW1lcyA9IGInXHgwMCcgKiBmb3V0LmdldG5jaGFubmVscygpICogc2FtcHdpZHRoCiAgICAgICAgIGZvdXQud3JpdGVmcmFtZXMoZnJhbWVzKQogICAgICAgICBmb3V0LmNsb3NlKCkKLSAgICAgICAgZiA9IHNlbGYuZiA9IGFpZmMub3BlbihURVNURk4gKyAnLmFpZmYnLCAncmInKQorICAgICAgICBmID0gc2VsZi5mID0gYWlmYy5vcGVuKGZpbGVuYW1lLCAncmInKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZ2V0Y29tcHR5cGUoKSwgYidOT05FJykKICAgICAgICAgZi5jbG9zZSgpCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYXJncGFyc2UucHkgYi9MaWIvdGVzdC90ZXN0X2FyZ3BhcnNlLnB5CmluZGV4IDljYjE1YzcuLjVlZmRiNjcgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfYXJncGFyc2UucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9hcmdwYXJzZS5weQpAQCAtMTQsNiArMTQsNyBAQAogZnJvbSBpbyBpbXBvcnQgU3RyaW5nSU8KIAogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0Citmcm9tIHVuaXR0ZXN0IGltcG9ydCBtb2NrCiBjbGFzcyBTdGRJT0J1ZmZlcihTdHJpbmdJTyk6CiAgICAgcGFzcwogCkBAIC00Niw2ICs0Nyw5IEBACiAKICAgICBkZWYgdGVhckRvd24oc2VsZik6CiAgICAgICAgIG9zLmNoZGlyKHNlbGYub2xkX2RpcikKKyAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsoc2VsZi50ZW1wX2RpciwgdG9wZG93bj1GYWxzZSk6CisgICAgICAgICAgICBmb3IgbmFtZSBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICBvcy5jaG1vZChvcy5wYXRoLmpvaW4oc2VsZi50ZW1wX2RpciwgbmFtZSksIHN0YXQuU19JV1JJVEUpCiAgICAgICAgIHNodXRpbC5ybXRyZWUoc2VsZi50ZW1wX2RpciwgVHJ1ZSkKIAogICAgIGRlZiBjcmVhdGVfcmVhZG9ubHlfZmlsZShzZWxmLCBmaWxlbmFtZSk6CkBAIC0yMzEsOCArMjM1LDggQEAKICAgICAgICAgICAgICAgICBwYXJzZXIgPSBzZWxmLl9nZXRfcGFyc2VyKHRlc3RlcikKICAgICAgICAgICAgICAgICBmb3IgYXJnc19zdHIgaW4gdGVzdGVyLmZhaWx1cmVzOgogICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnc19zdHIuc3BsaXQoKQotICAgICAgICAgICAgICAgICAgICByYWlzZXMgPSB0ZXN0ZXIuYXNzZXJ0UmFpc2VzCi0gICAgICAgICAgICAgICAgICAgIHJhaXNlcyhBcmd1bWVudFBhcnNlckVycm9yLCBwYXJzZXIucGFyc2VfYXJncywgYXJncykKKyAgICAgICAgICAgICAgICAgICAgd2l0aCB0ZXN0ZXIuYXNzZXJ0UmFpc2VzKEFyZ3VtZW50UGFyc2VyRXJyb3IsIG1zZz1hcmdzKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlci5wYXJzZV9hcmdzKGFyZ3MpCiAKICAgICAgICAgICAgIGRlZiB0ZXN0X3N1Y2Nlc3NlcyhzZWxmLCB0ZXN0ZXIpOgogICAgICAgICAgICAgICAgIHBhcnNlciA9IHNlbGYuX2dldF9wYXJzZXIodGVzdGVyKQpAQCAtNjQwLDcgKzY0NCw3IEBACiAKIAogY2xhc3MgVGVzdE9wdGlvbmFsc1JlcXVpcmVkKFBhcnNlclRlc3RDYXNlKToKLSAgICAiIiJUZXN0cyB0aGUgYW4gb3B0aW9uYWwgYWN0aW9uIHRoYXQgaXMgcmVxdWlyZWQiIiIKKyAgICAiIiJUZXN0cyBhbiBvcHRpb25hbCBhY3Rpb24gdGhhdCBpcyByZXF1aXJlZCIiIgogCiAgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKICAgICAgICAgU2lnKCcteCcsIHR5cGU9aW50LCByZXF1aXJlZD1UcnVlKSwKQEAgLTE0MjEsNiArMTQyNSwxOSBAQAogICAgICAgICB0eXBlID0gYXJncGFyc2UuRmlsZVR5cGUoJ3diJywgMSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiRmlsZVR5cGUoJ3diJywgMSkiLCByZXByKHR5cGUpKQogCisgICAgZGVmIHRlc3Rfcl9sYXRpbihzZWxmKToKKyAgICAgICAgdHlwZSA9IGFyZ3BhcnNlLkZpbGVUeXBlKCdyJywgZW5jb2Rpbmc9J2xhdGluXzEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJGaWxlVHlwZSgncicsIGVuY29kaW5nPSdsYXRpbl8xJykiLCByZXByKHR5cGUpKQorCisgICAgZGVmIHRlc3Rfd19iaWc1X2lnbm9yZShzZWxmKToKKyAgICAgICAgdHlwZSA9IGFyZ3BhcnNlLkZpbGVUeXBlKCd3JywgZW5jb2Rpbmc9J2JpZzUnLCBlcnJvcnM9J2lnbm9yZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIkZpbGVUeXBlKCd3JywgZW5jb2Rpbmc9J2JpZzUnLCBlcnJvcnM9J2lnbm9yZScpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICByZXByKHR5cGUpKQorCisgICAgZGVmIHRlc3Rfcl8xX3JlcGxhY2Uoc2VsZik6CisgICAgICAgIHR5cGUgPSBhcmdwYXJzZS5GaWxlVHlwZSgncicsIDEsIGVycm9ycz0ncmVwbGFjZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIkZpbGVUeXBlKCdyJywgMSwgZXJyb3JzPSdyZXBsYWNlJykiLCByZXByKHR5cGUpKQorCiAKIGNsYXNzIFJGaWxlKG9iamVjdCk6CiAgICAgc2VlbiA9IHt9CkBAIC0xNTU3LDYgKzE1NzQsMjQgQEAKICAgICBdCiAKIAorY2xhc3MgVGVzdEZpbGVUeXBlT3BlbkFyZ3MoVGVzdENhc2UpOgorICAgICIiIlRlc3QgdGhhdCBvcGVuICh0aGUgYnVpbHRpbikgaXMgY29ycmVjdGx5IGNhbGxlZCIiIgorCisgICAgZGVmIHRlc3Rfb3Blbl9hcmdzKHNlbGYpOgorICAgICAgICBGVCA9IGFyZ3BhcnNlLkZpbGVUeXBlCisgICAgICAgIGNhc2VzID0gWworICAgICAgICAgICAgKEZUKCdyYicpLCAoJ3JiJywgLTEsIE5vbmUsIE5vbmUpKSwKKyAgICAgICAgICAgIChGVCgndycsIDEpLCAoJ3cnLCAxLCBOb25lLCBOb25lKSksCisgICAgICAgICAgICAoRlQoJ3cnLCBlcnJvcnM9J3JlcGxhY2UnKSwgKCd3JywgLTEsIE5vbmUsICdyZXBsYWNlJykpLAorICAgICAgICAgICAgKEZUKCd3YicsIGVuY29kaW5nPSdiaWc1JyksICgnd2InLCAtMSwgJ2JpZzUnLCBOb25lKSksCisgICAgICAgICAgICAoRlQoJ3cnLCAwLCAnbDEnLCAnc3RyaWN0JyksICgndycsIDAsICdsMScsICdzdHJpY3QnKSksCisgICAgICAgIF0KKyAgICAgICAgd2l0aCBtb2NrLnBhdGNoKCdidWlsdGlucy5vcGVuJykgYXMgbToKKyAgICAgICAgICAgIGZvciB0eXBlLCBhcmdzIGluIGNhc2VzOgorICAgICAgICAgICAgICAgIHR5cGUoJ2ZvbycpCisgICAgICAgICAgICAgICAgbS5hc3NlcnRfY2FsbGVkX3dpdGgoJ2ZvbycsICphcmdzKQorCisKIGNsYXNzIFRlc3RUeXBlQ2FsbGFibGUoUGFyc2VyVGVzdENhc2UpOgogICAgICIiIlRlc3Qgc29tZSBjYWxsYWJsZXMgYXMgb3B0aW9uL2FyZ3VtZW50IHR5cGVzIiIiCiAKQEAgLTI3NjAsNiArMjc5NSwxMyBAQAogICAgICAgICBwYXJzZXIgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcihwYXJlbnRzPVtwYXJlbnRdKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5TKHg9J2ZvbycpLCBwYXJzZXIucGFyc2VfYXJncyhbXSkpCiAKKyAgICBkZWYgdGVzdF9zZXRfZGVmYXVsdHNfb25fcGFyZW50X2FuZF9zdWJwYXJzZXIoc2VsZik6CisgICAgICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKKyAgICAgICAgeHBhcnNlciA9IHBhcnNlci5hZGRfc3VicGFyc2VycygpLmFkZF9wYXJzZXIoJ1gnKQorICAgICAgICBwYXJzZXIuc2V0X2RlZmF1bHRzKGZvbz0xKQorICAgICAgICB4cGFyc2VyLnNldF9kZWZhdWx0cyhmb289MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOUyhmb289MiksIHBhcnNlci5wYXJzZV9hcmdzKFsnWCddKSkKKwogICAgIGRlZiB0ZXN0X3NldF9kZWZhdWx0c19zYW1lX2FzX2FkZF9hcmd1bWVudChzZWxmKToKICAgICAgICAgcGFyc2VyID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIoKQogICAgICAgICBwYXJzZXIuc2V0X2RlZmF1bHRzKHc9J1cnLCB4PSdYJywgeT0nWScsIHo9J1onKQpAQCAtMjk3Nyw3ICszMDE5LDcgQEAKICAgICAnJydUZXN0IGV4dHJlbWVseSBzbWFsbCBudW1iZXIgb2YgY29sdW1ucy4KIAogICAgIFRlc3RDYXNlIHByZXZlbnRzICJDT0xVTU5TIiBmcm9tIGJlaW5nIHRvbyBzbWFsbCBpbiB0aGUgdGVzdHMgdGhlbXNlbHZlcywKLSAgICBidXQgd2UgZG9uJ3Qgd2FudCBhbnkgZXhjZXB0aW9ucyB0aHJvd24gaW4gc3VjaCBjYXNlLiBPbmx5IHVnbHkgcmVwcmVzZW50YXRpb24uCisgICAgYnV0IHdlIGRvbid0IHdhbnQgYW55IGV4Y2VwdGlvbnMgdGhyb3duIGluIHN1Y2ggY2FzZXMuIE9ubHkgdWdseSByZXByZXNlbnRhdGlvbi4KICAgICAnJycKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIGVudiA9IHN1cHBvcnQuRW52aXJvbm1lbnRWYXJHdWFyZCgpCkBAIC0zODAzLDM0ICszODQ1LDYgQEAKICAgICB2ZXJzaW9uID0gJycKIAogCi1jbGFzcyBUZXN0SGVscFZlcnNpb25PcHRpb25hbChIZWxwVGVzdENhc2UpOgotICAgICIiIlRlc3QgdGhhdCB0aGUgLS12ZXJzaW9uIGFyZ3VtZW50IGNhbiBiZSBzdXBwcmVzc2VkIGhlbHAgbWVzc2FnZXMiIiIKLQotICAgIHBhcnNlcl9zaWduYXR1cmUgPSBTaWcocHJvZz0nUFJPRycpCi0gICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKLSAgICAgICAgU2lnKCctdicsICctLXZlcnNpb24nLCBhY3Rpb249J3ZlcnNpb24nLCB2ZXJzaW9uPScxLjAnKSwKLSAgICAgICAgU2lnKCctLWZvbycsIGhlbHA9J2ZvbyBoZWxwJyksCi0gICAgICAgIFNpZygnc3BhbScsIGhlbHA9J3NwYW0gaGVscCcpLAotICAgIF0KLSAgICBhcmd1bWVudF9ncm91cF9zaWduYXR1cmVzID0gW10KLSAgICB1c2FnZSA9ICcnJ1wKLSAgICAgICAgdXNhZ2U6IFBST0cgWy1oXSBbLXZdIFstLWZvbyBGT09dIHNwYW0KLSAgICAgICAgJycnCi0gICAgaGVscCA9IHVzYWdlICsgJycnXAotCi0gICAgICAgIHBvc2l0aW9uYWwgYXJndW1lbnRzOgotICAgICAgICAgIHNwYW0gICAgICAgICAgIHNwYW0gaGVscAotCi0gICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKLSAgICAgICAgICAtaCwgLS1oZWxwICAgICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0Ci0gICAgICAgICAgLXYsIC0tdmVyc2lvbiAgc2hvdyBwcm9ncmFtJ3MgdmVyc2lvbiBudW1iZXIgYW5kIGV4aXQKLSAgICAgICAgICAtLWZvbyBGT08gICAgICBmb28gaGVscAotICAgICAgICAnJycKLSAgICB2ZXJzaW9uID0gJycnXAotICAgICAgICAxLjAKLSAgICAgICAgJycnCi0KLQogY2xhc3MgVGVzdEhlbHBOb25lKEhlbHBUZXN0Q2FzZSk6CiAgICAgIiIiVGVzdCB0aGF0IG5vIGVycm9ycyBvY2N1ciBpZiBubyBoZWxwIGlzIHNwZWNpZmllZCIiIgogCkBAIC00MDM4LDYgKzQwNTIsMzIgQEAKICAgICAgICAgJycnCiAgICAgdmVyc2lvbiA9ICcnCiAKKworY2xhc3MgVGVzdEhlbHBWZXJzaW9uQWN0aW9uU3VwcHJlc3MoSGVscFRlc3RDYXNlKToKKyAgICAiIiJUZXN0IHRoYXQgdGhlIC0tdmVyc2lvbiBhcmd1bWVudCBjYW4gYmUgc3VwcHJlc3NlZCBpbiBoZWxwIG1lc3NhZ2VzIiIiCisKKyAgICBwYXJzZXJfc2lnbmF0dXJlID0gU2lnKHByb2c9J1BST0cnKQorICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnLXYnLCAnLS12ZXJzaW9uJywgYWN0aW9uPSd2ZXJzaW9uJywgdmVyc2lvbj0nMS4wJywKKyAgICAgICAgICAgIGhlbHA9YXJncGFyc2UuU1VQUFJFU1MpLAorICAgICAgICBTaWcoJy0tZm9vJywgaGVscD0nZm9vIGhlbHAnKSwKKyAgICAgICAgU2lnKCdzcGFtJywgaGVscD0nc3BhbSBoZWxwJyksCisgICAgXQorICAgIGFyZ3VtZW50X2dyb3VwX3NpZ25hdHVyZXMgPSBbXQorICAgIHVzYWdlID0gJycnXAorICAgICAgICB1c2FnZTogUFJPRyBbLWhdIFstLWZvbyBGT09dIHNwYW0KKyAgICAgICAgJycnCisgICAgaGVscCA9IHVzYWdlICsgJycnXAorCisgICAgICAgIHBvc2l0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIHNwYW0gICAgICAgIHNwYW0gaGVscAorCisgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAtaCwgLS1oZWxwICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgICAgICAgLS1mb28gRk9PICAgZm9vIGhlbHAKKyAgICAgICAgJycnCisKKwogY2xhc3MgVGVzdEhlbHBTdWJwYXJzZXJzT3JkZXJpbmcoSGVscFRlc3RDYXNlKToKICAgICAiIiJUZXN0IG9yZGVyaW5nIG9mIHN1YmNvbW1hbmRzIGluIGhlbHAgbWF0Y2hlcyB0aGUgY29kZSIiIgogICAgIHBhcnNlcl9zaWduYXR1cmUgPSBTaWcocHJvZz0nUFJPRycsCkBAIC00MzgxLDcgKzQ0MjEsNyBAQAogICAgIGRlZiB0ZXN0X3ZlcnNpb25fZm9ybWF0KHNlbGYpOgogICAgICAgICBwYXJzZXIgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcihwcm9nPSdQUFAnKQogICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctdicsICctLXZlcnNpb24nLCBhY3Rpb249J3ZlcnNpb24nLCB2ZXJzaW9uPSclKHByb2cpcyAzLjUnKQotICAgICAgICBtc2cgPSBzZWxmLl9nZXRfZXJyb3IocGFyc2VyLnBhcnNlX2FyZ3MsIFsnLXYnXSkuc3RkZXJyCisgICAgICAgIG1zZyA9IHNlbGYuX2dldF9lcnJvcihwYXJzZXIucGFyc2VfYXJncywgWyctdiddKS5zdGRvdXQKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnUFBQIDMuNVxuJywgbXNnKQogCiAgICAgZGVmIHRlc3RfdmVyc2lvbl9ub19oZWxwKHNlbGYpOgpAQCAtNDM5NCw3ICs0NDM0LDcgQEAKICAgICBkZWYgdGVzdF92ZXJzaW9uX2FjdGlvbihzZWxmKToKICAgICAgICAgcGFyc2VyID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIocHJvZz0nWFhYJykKICAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLVYnLCBhY3Rpb249J3ZlcnNpb24nLCB2ZXJzaW9uPSclKHByb2cpcyAzLjcnKQotICAgICAgICBtc2cgPSBzZWxmLl9nZXRfZXJyb3IocGFyc2VyLnBhcnNlX2FyZ3MsIFsnLVYnXSkuc3RkZXJyCisgICAgICAgIG1zZyA9IHNlbGYuX2dldF9lcnJvcihwYXJzZXIucGFyc2VfYXJncywgWyctViddKS5zdGRvdXQKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnWFhYIDMuN1xuJywgbXNnKQogCiAgICAgZGVmIHRlc3Rfbm9faGVscChzZWxmKToKQEAgLTQ1MTYsNiArNDU1NiwxMiBAQAogICAgICAgICBzZWxmLmFzc2VydFRydWUobnMyICE9IG5zMykKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5zMiAhPSBuczQpCiAKKyAgICBkZWYgdGVzdF9lcXVhbGl0eV9yZXR1cm5zX25vdGltcGxlbWV0ZWQoc2VsZik6CisgICAgICAgICMgU2VlIGlzc3VlIDIxNDgxCisgICAgICAgIG5zID0gYXJncGFyc2UuTmFtZXNwYWNlKGE9MSwgYj0yKQorICAgICAgICBzZWxmLmFzc2VydElzKG5zLl9fZXFfXyhOb25lKSwgTm90SW1wbGVtZW50ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobnMuX19uZV9fKE5vbmUpLCBOb3RJbXBsZW1lbnRlZCkKKwogCiAjID09PT09PT09PT09PT09PT09PT0KICMgRmlsZSBlbmNvZGluZyB0ZXN0cwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hcnJheS5weSBiL0xpYi90ZXN0L3Rlc3RfYXJyYXkucHkKaW5kZXggZDY4Mjg0Zi4uMDdjOWJmOSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9hcnJheS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2FycmF5LnB5CkBAIC0yODUsMTcgKzI4NSwxOCBAQAogCiAgICAgZGVmIHRlc3RfaXRlcmF0b3JfcGlja2xlKHNlbGYpOgogICAgICAgICBkYXRhID0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgc2VsZi5leGFtcGxlKQotICAgICAgICBvcmdpdCA9IGl0ZXIoZGF0YSkKLSAgICAgICAgZCA9IHBpY2tsZS5kdW1wcyhvcmdpdCkKLSAgICAgICAgaXQgPSBwaWNrbGUubG9hZHMoZCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKG9yZ2l0KSwgdHlwZShpdCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpdCksIGxpc3QoZGF0YSkpCi0KLSAgICAgICAgaWYgbGVuKGRhdGEpOgorICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIG9yZ2l0ID0gaXRlcihkYXRhKQorICAgICAgICAgICAgZCA9IHBpY2tsZS5kdW1wcyhvcmdpdCwgcHJvdG8pCiAgICAgICAgICAgICBpdCA9IHBpY2tsZS5sb2FkcyhkKQotICAgICAgICAgICAgbmV4dChpdCkKLSAgICAgICAgICAgIGQgPSBwaWNrbGUuZHVtcHMoaXQpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoaXQpLCBsaXN0KGRhdGEpWzE6XSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShvcmdpdCksIHR5cGUoaXQpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGl0KSwgbGlzdChkYXRhKSkKKworICAgICAgICAgICAgaWYgbGVuKGRhdGEpOgorICAgICAgICAgICAgICAgIGl0ID0gcGlja2xlLmxvYWRzKGQpCisgICAgICAgICAgICAgICAgbmV4dChpdCkKKyAgICAgICAgICAgICAgICBkID0gcGlja2xlLmR1bXBzKGl0LCBwcm90bykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoaXQpLCBsaXN0KGRhdGEpWzE6XSkKIAogICAgIGRlZiB0ZXN0X2luc2VydChzZWxmKToKICAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHNlbGYuZXhhbXBsZSkKQEAgLTM1MywxMiArMzU0LDEyIEBACiAgICAgICAgICAgICBzdXBwb3J0LnVubGluayhzdXBwb3J0LlRFU1RGTikKIAogICAgIGRlZiB0ZXN0X2Zyb21maWxlX2lvZXJyb3Ioc2VsZik6Ci0gICAgICAgICMgSXNzdWUgIzUzOTU6IENoZWNrIGlmIGZyb21maWxlIHJhaXNlcyBhIHByb3BlciBJT0Vycm9yCisgICAgICAgICMgSXNzdWUgIzUzOTU6IENoZWNrIGlmIGZyb21maWxlIHJhaXNlcyBhIHByb3BlciBPU0Vycm9yCiAgICAgICAgICMgaW5zdGVhZCBvZiBFT0ZFcnJvci4KICAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUpCiAgICAgICAgIGYgPSBvcGVuKHN1cHBvcnQuVEVTVEZOLCAnd2InKQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBhLmZyb21maWxlLCBmLCBsZW4oc2VsZi5leGFtcGxlKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIGEuZnJvbWZpbGUsIGYsIGxlbihzZWxmLmV4YW1wbGUpKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgZi5jbG9zZSgpCiAgICAgICAgICAgICBzdXBwb3J0LnVubGluayhzdXBwb3J0LlRFU1RGTikKQEAgLTEwMjYsNiArMTAyNywxOCBAQAogICAgICAgICBiYXNlc2l6ZSA9IHN1cHBvcnQuY2FsY3ZvYmpzaXplKCdQbjJQaScpCiAgICAgICAgIHN1cHBvcnQuY2hlY2tfc2l6ZW9mKHNlbGYsIGEsIGJhc2VzaXplKQogCisgICAgZGVmIHRlc3RfaW5pdGlhbGl6ZV93aXRoX3VuaWNvZGUoc2VsZik6CisgICAgICAgIGlmIHNlbGYudHlwZWNvZGUgIT0gJ3UnOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgICAgIGEgPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCAnZm9vJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oImNhbm5vdCB1c2UgYSBzdHIiLCBzdHIoY20uZXhjZXB0aW9uKSkKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKSBhcyBjbToKKyAgICAgICAgICAgICAgICBhID0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgYXJyYXkuYXJyYXkoJ3UnLCAnZm9vJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCJjYW5ub3QgdXNlIGEgdW5pY29kZSBhcnJheSIsIHN0cihjbS5leGNlcHRpb24pKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsICJmb28iKQorICAgICAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIGFycmF5LmFycmF5KCd1JywgJ2ZvbycpKQorCiAKIGNsYXNzIFN0cmluZ1Rlc3QoQmFzZVRlc3QpOgogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FzdC5weSBiL0xpYi90ZXN0L3Rlc3RfYXN0LnB5CmluZGV4IDYzNTI4ODguLmE1MzNmODYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfYXN0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfYXN0LnB5CkBAIC0zNyw3ICszNyw3IEBACiAgICAgIyBGdW5jdGlvbkRlZiB3aXRoIGt3YXJncwogICAgICJkZWYgZigqKmt3YXJncyk6IHBhc3MiLAogICAgICMgRnVuY3Rpb25EZWYgd2l0aCBhbGwga2luZCBvZiBhcmdzCi0gICAgImRlZiBmKGEsIGI9MSwgYz1Ob25lLCBkPVtdLCBlPXt9LCAqYXJncywgKiprd2FyZ3MpOiBwYXNzIiwKKyAgICAiZGVmIGYoYSwgYj0xLCBjPU5vbmUsIGQ9W10sIGU9e30sICphcmdzLCBmPTQyLCAqKmt3YXJncyk6IHBhc3MiLAogICAgICMgQ2xhc3NEZWYKICAgICAiY2xhc3MgQzpwYXNzIiwKICAgICAjIENsYXNzRGVmLCBuZXcgc3R5bGUgY2xhc3MKQEAgLTI2MiwxNCArMjYyLDEzIEBACiAKICAgICBkZWYgdGVzdF9hcmd1bWVudHMoc2VsZik6CiAgICAgICAgIHggPSBhc3QuYXJndW1lbnRzKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4Ll9maWVsZHMsICgnYXJncycsICd2YXJhcmcnLCAndmFyYXJnYW5ub3RhdGlvbicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdrd29ubHlhcmdzJywgJ2t3YXJnJywgJ2t3YXJnYW5ub3RhdGlvbicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZWZhdWx0cycsICdrd19kZWZhdWx0cycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguX2ZpZWxkcywgKCdhcmdzJywgJ3ZhcmFyZycsICdrd29ubHlhcmdzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2t3X2RlZmF1bHRzJywgJ2t3YXJnJywgJ2RlZmF1bHRzJykpCiAKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvcik6CiAgICAgICAgICAgICB4LnZhcmFyZwogCi0gICAgICAgIHggPSBhc3QuYXJndW1lbnRzKCpyYW5nZSgxLCA5KSkKKyAgICAgICAgeCA9IGFzdC5hcmd1bWVudHMoKnJhbmdlKDEsIDcpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgudmFyYXJnLCAyKQogCiAgICAgZGVmIHRlc3RfZmllbGRfYXR0cl93cml0YWJsZShzZWxmKToKQEAgLTU2MCw4ICs1NTksOCBAQAogICAgICAgICBzZWxmLm1vZChtLCAibXVzdCBoYXZlIExvYWQgY29udGV4dCIsICJldmFsIikKIAogICAgIGRlZiBfY2hlY2tfYXJndW1lbnRzKHNlbGYsIGZhYywgY2hlY2spOgotICAgICAgICBkZWYgYXJndW1lbnRzKGFyZ3M9Tm9uZSwgdmFyYXJnPU5vbmUsIHZhcmFyZ2Fubm90YXRpb249Tm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICBrd29ubHlhcmdzPU5vbmUsIGt3YXJnPU5vbmUsIGt3YXJnYW5ub3RhdGlvbj1Ob25lLAorICAgICAgICBkZWYgYXJndW1lbnRzKGFyZ3M9Tm9uZSwgdmFyYXJnPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAga3dvbmx5YXJncz1Ob25lLCBrd2FyZz1Ob25lLAogICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRzPU5vbmUsIGt3X2RlZmF1bHRzPU5vbmUpOgogICAgICAgICAgICAgaWYgYXJncyBpcyBOb25lOgogICAgICAgICAgICAgICAgIGFyZ3MgPSBbXQpAQCAtNTcxLDIwICs1NzAsMTIgQEAKICAgICAgICAgICAgICAgICBkZWZhdWx0cyA9IFtdCiAgICAgICAgICAgICBpZiBrd19kZWZhdWx0cyBpcyBOb25lOgogICAgICAgICAgICAgICAgIGt3X2RlZmF1bHRzID0gW10KLSAgICAgICAgICAgIGFyZ3MgPSBhc3QuYXJndW1lbnRzKGFyZ3MsIHZhcmFyZywgdmFyYXJnYW5ub3RhdGlvbiwga3dvbmx5YXJncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt3YXJnLCBrd2FyZ2Fubm90YXRpb24sIGRlZmF1bHRzLCBrd19kZWZhdWx0cykKKyAgICAgICAgICAgIGFyZ3MgPSBhc3QuYXJndW1lbnRzKGFyZ3MsIHZhcmFyZywga3dvbmx5YXJncywga3dfZGVmYXVsdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrd2FyZywgZGVmYXVsdHMpCiAgICAgICAgICAgICByZXR1cm4gZmFjKGFyZ3MpCiAgICAgICAgIGFyZ3MgPSBbYXN0LmFyZygieCIsIGFzdC5OYW1lKCJ4IiwgYXN0LlN0b3JlKCkpKV0KICAgICAgICAgY2hlY2soYXJndW1lbnRzKGFyZ3M9YXJncyksICJtdXN0IGhhdmUgTG9hZCBjb250ZXh0IikKLSAgICAgICAgY2hlY2soYXJndW1lbnRzKHZhcmFyZ2Fubm90YXRpb249YXN0Lk51bSgzKSksCi0gICAgICAgICAgICAgICJ2YXJhcmdhbm5vdGF0aW9uIGJ1dCBubyB2YXJhcmciKQotICAgICAgICBjaGVjayhhcmd1bWVudHModmFyYXJnYW5ub3RhdGlvbj1hc3QuTmFtZSgieCIsIGFzdC5TdG9yZSgpKSwgdmFyYXJnPSJ4IiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIm11c3QgaGF2ZSBMb2FkIGNvbnRleHQiKQogICAgICAgICBjaGVjayhhcmd1bWVudHMoa3dvbmx5YXJncz1hcmdzKSwgIm11c3QgaGF2ZSBMb2FkIGNvbnRleHQiKQotICAgICAgICBjaGVjayhhcmd1bWVudHMoa3dhcmdhbm5vdGF0aW9uPWFzdC5OdW0oNDIpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgImt3YXJnYW5ub3RhdGlvbiBidXQgbm8ga3dhcmciKQotICAgICAgICBjaGVjayhhcmd1bWVudHMoa3dhcmdhbm5vdGF0aW9uPWFzdC5OYW1lKCJ4IiwgYXN0LlN0b3JlKCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICBrd2FyZz0ieCIpLCAibXVzdCBoYXZlIExvYWQgY29udGV4dCIpCiAgICAgICAgIGNoZWNrKGFyZ3VtZW50cyhkZWZhdWx0cz1bYXN0Lk51bSgzKV0pLAogICAgICAgICAgICAgICAgICAgICAgICAibW9yZSBwb3NpdGlvbmFsIGRlZmF1bHRzIHRoYW4gYXJncyIpCiAgICAgICAgIGNoZWNrKGFyZ3VtZW50cyhrd19kZWZhdWx0cz1bYXN0Lk51bSg0KV0pLApAQCAtNTk5LDcgKzU5MCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICJtdXN0IGhhdmUgTG9hZCBjb250ZXh0IikKIAogICAgIGRlZiB0ZXN0X2Z1bmNkZWYoc2VsZik6Ci0gICAgICAgIGEgPSBhc3QuYXJndW1lbnRzKFtdLCBOb25lLCBOb25lLCBbXSwgTm9uZSwgTm9uZSwgW10sIFtdKQorICAgICAgICBhID0gYXN0LmFyZ3VtZW50cyhbXSwgTm9uZSwgW10sIFtdLCBOb25lLCBbXSkKICAgICAgICAgZiA9IGFzdC5GdW5jdGlvbkRlZigieCIsIGEsIFtdLCBbXSwgTm9uZSkKICAgICAgICAgc2VsZi5zdG10KGYsICJlbXB0eSBib2R5IG9uIEZ1bmN0aW9uRGVmIikKICAgICAgICAgZiA9IGFzdC5GdW5jdGlvbkRlZigieCIsIGEsIFthc3QuUGFzcygpXSwgW2FzdC5OYW1lKCJ4IiwgYXN0LlN0b3JlKCkpXSwKQEAgLTc3MCw3ICs3NjEsNyBAQAogICAgICAgICBzZWxmLmV4cHIodSwgIm11c3QgaGF2ZSBMb2FkIGNvbnRleHQiKQogCiAgICAgZGVmIHRlc3RfbGFtYmRhKHNlbGYpOgotICAgICAgICBhID0gYXN0LmFyZ3VtZW50cyhbXSwgTm9uZSwgTm9uZSwgW10sIE5vbmUsIE5vbmUsIFtdLCBbXSkKKyAgICAgICAgYSA9IGFzdC5hcmd1bWVudHMoW10sIE5vbmUsIFtdLCBbXSwgTm9uZSwgW10pCiAgICAgICAgIHNlbGYuZXhwcihhc3QuTGFtYmRhKGEsIGFzdC5OYW1lKCJ4IiwgYXN0LlN0b3JlKCkpKSwKICAgICAgICAgICAgICAgICAgICJtdXN0IGhhdmUgTG9hZCBjb250ZXh0IikKICAgICAgICAgZGVmIGZhYyhhcmdzKToKQEAgLTkyOCw2ICs5MTksOSBAQAogICAgIGRlZiB0ZXN0X3R1cGxlKHNlbGYpOgogICAgICAgICBzZWxmLl9zZXF1ZW5jZShhc3QuVHVwbGUpCiAKKyAgICBkZWYgdGVzdF9uYW1lY29uc3RhbnQoc2VsZik6CisgICAgICAgIHNlbGYuZXhwcihhc3QuTmFtZUNvbnN0YW50KDQpLCAic2luZ2xldG9uIG11c3QgYmUgVHJ1ZSwgRmFsc2UsIG9yIE5vbmUiKQorCiAgICAgZGVmIHRlc3Rfc3RkbGliX3ZhbGlkYXRlcyhzZWxmKToKICAgICAgICAgc3RkbGliID0gb3MucGF0aC5kaXJuYW1lKGFzdC5fX2ZpbGVfXykKICAgICAgICAgdGVzdHMgPSBbZm4gZm9yIGZuIGluIG9zLmxpc3RkaXIoc3RkbGliKSBpZiBmbi5lbmRzd2l0aCgiLnB5IildCkBAIC05MzYsMTMgKzkzMCwxMCBAQAogICAgICAgICAgICAgZm4gPSBvcy5wYXRoLmpvaW4oc3RkbGliLCBtb2R1bGUpCiAgICAgICAgICAgICB3aXRoIG9wZW4oZm4sICJyIiwgZW5jb2Rpbmc9InV0Zi04IikgYXMgZnA6CiAgICAgICAgICAgICAgICAgc291cmNlID0gZnAucmVhZCgpCi0gICAgICAgICAgICBtb2QgPSBhc3QucGFyc2Uoc291cmNlKQorICAgICAgICAgICAgbW9kID0gYXN0LnBhcnNlKHNvdXJjZSwgZm4pCiAgICAgICAgICAgICBjb21waWxlKG1vZCwgZm4sICJleGVjIikKIAogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoQVNUX1Rlc3RzLCBBU1RIZWxwZXJzX1Rlc3QsIEFTVFZhbGlkYXRvclRlc3RzKQotCiBkZWYgbWFpbigpOgogICAgIGlmIF9fbmFtZV9fICE9ICdfX21haW5fXyc6CiAgICAgICAgIHJldHVybgpAQCAtOTU1LDIwICs5NDYsMjAgQEAKICAgICAgICAgICAgIHByaW50KCJdIikKICAgICAgICAgcHJpbnQoIm1haW4oKSIpCiAgICAgICAgIHJhaXNlIFN5c3RlbUV4aXQKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQogCiAjIyMjIEVWRVJZVEhJTkcgQkVMT1cgSVMgR0VORVJBVEVEICMjIyMjCiBleGVjX3Jlc3VsdHMgPSBbCi0oJ01vZHVsZScsIFsoJ0V4cHInLCAoMSwgMCksICgnTmFtZScsICgxLCAwKSwgJ05vbmUnLCAoJ0xvYWQnLCkpKV0pLAotKCdNb2R1bGUnLCBbKCdGdW5jdGlvbkRlZicsICgxLCAwKSwgJ2YnLCAoJ2FyZ3VtZW50cycsIFtdLCBOb25lLCBOb25lLCBbXSwgTm9uZSwgTm9uZSwgW10sIFtdKSwgWygnUGFzcycsICgxLCA5KSldLCBbXSwgTm9uZSldKSwKLSgnTW9kdWxlJywgWygnRnVuY3Rpb25EZWYnLCAoMSwgMCksICdmJywgKCdhcmd1bWVudHMnLCBbKCdhcmcnLCAnYScsIE5vbmUpXSwgTm9uZSwgTm9uZSwgW10sIE5vbmUsIE5vbmUsIFtdLCBbXSksIFsoJ1Bhc3MnLCAoMSwgMTApKV0sIFtdLCBOb25lKV0pLAotKCdNb2R1bGUnLCBbKCdGdW5jdGlvbkRlZicsICgxLCAwKSwgJ2YnLCAoJ2FyZ3VtZW50cycsIFsoJ2FyZycsICdhJywgTm9uZSldLCBOb25lLCBOb25lLCBbXSwgTm9uZSwgTm9uZSwgWygnTnVtJywgKDEsIDgpLCAwKV0sIFtdKSwgWygnUGFzcycsICgxLCAxMikpXSwgW10sIE5vbmUpXSksCi0oJ01vZHVsZScsIFsoJ0Z1bmN0aW9uRGVmJywgKDEsIDApLCAnZicsICgnYXJndW1lbnRzJywgW10sICdhcmdzJywgTm9uZSwgW10sIE5vbmUsIE5vbmUsIFtdLCBbXSksIFsoJ1Bhc3MnLCAoMSwgMTQpKV0sIFtdLCBOb25lKV0pLAotKCdNb2R1bGUnLCBbKCdGdW5jdGlvbkRlZicsICgxLCAwKSwgJ2YnLCAoJ2FyZ3VtZW50cycsIFtdLCBOb25lLCBOb25lLCBbXSwgJ2t3YXJncycsIE5vbmUsIFtdLCBbXSksIFsoJ1Bhc3MnLCAoMSwgMTcpKV0sIFtdLCBOb25lKV0pLAotKCdNb2R1bGUnLCBbKCdGdW5jdGlvbkRlZicsICgxLCAwKSwgJ2YnLCAoJ2FyZ3VtZW50cycsIFsoJ2FyZycsICdhJywgTm9uZSksICgnYXJnJywgJ2InLCBOb25lKSwgKCdhcmcnLCAnYycsIE5vbmUpLCAoJ2FyZycsICdkJywgTm9uZSksICgnYXJnJywgJ2UnLCBOb25lKV0sICdhcmdzJywgTm9uZSwgW10sICdrd2FyZ3MnLCBOb25lLCBbKCdOdW0nLCAoMSwgMTEpLCAxKSwgKCdOYW1lJywgKDEsIDE2KSwgJ05vbmUnLCAoJ0xvYWQnLCkpLCAoJ0xpc3QnLCAoMSwgMjQpLCBbXSwgKCdMb2FkJywpKSwgKCdEaWN0JywgKDEsIDMwKSwgW10sIFtdKV0sIFtdKSwgWygnUGFzcycsICgxLCA1MikpXSwgW10sIE5vbmUpXSksCisoJ01vZHVsZScsIFsoJ0V4cHInLCAoMSwgMCksICgnTmFtZUNvbnN0YW50JywgKDEsIDApLCBOb25lKSldKSwKKygnTW9kdWxlJywgWygnRnVuY3Rpb25EZWYnLCAoMSwgMCksICdmJywgKCdhcmd1bWVudHMnLCBbXSwgTm9uZSwgW10sIFtdLCBOb25lLCBbXSksIFsoJ1Bhc3MnLCAoMSwgOSkpXSwgW10sIE5vbmUpXSksCisoJ01vZHVsZScsIFsoJ0Z1bmN0aW9uRGVmJywgKDEsIDApLCAnZicsICgnYXJndW1lbnRzJywgWygnYXJnJywgKDEsIDYpLCAnYScsIE5vbmUpXSwgTm9uZSwgW10sIFtdLCBOb25lLCBbXSksIFsoJ1Bhc3MnLCAoMSwgMTApKV0sIFtdLCBOb25lKV0pLAorKCdNb2R1bGUnLCBbKCdGdW5jdGlvbkRlZicsICgxLCAwKSwgJ2YnLCAoJ2FyZ3VtZW50cycsIFsoJ2FyZycsICgxLCA2KSwgJ2EnLCBOb25lKV0sIE5vbmUsIFtdLCBbXSwgTm9uZSwgWygnTnVtJywgKDEsIDgpLCAwKV0pLCBbKCdQYXNzJywgKDEsIDEyKSldLCBbXSwgTm9uZSldKSwKKygnTW9kdWxlJywgWygnRnVuY3Rpb25EZWYnLCAoMSwgMCksICdmJywgKCdhcmd1bWVudHMnLCBbXSwgKCdhcmcnLCAoMSwgNyksICdhcmdzJywgTm9uZSksIFtdLCBbXSwgTm9uZSwgW10pLCBbKCdQYXNzJywgKDEsIDE0KSldLCBbXSwgTm9uZSldKSwKKygnTW9kdWxlJywgWygnRnVuY3Rpb25EZWYnLCAoMSwgMCksICdmJywgKCdhcmd1bWVudHMnLCBbXSwgTm9uZSwgW10sIFtdLCAoJ2FyZycsICgxLCA4KSwgJ2t3YXJncycsIE5vbmUpLCBbXSksIFsoJ1Bhc3MnLCAoMSwgMTcpKV0sIFtdLCBOb25lKV0pLAorKCdNb2R1bGUnLCBbKCdGdW5jdGlvbkRlZicsICgxLCAwKSwgJ2YnLCAoJ2FyZ3VtZW50cycsIFsoJ2FyZycsICgxLCA2KSwgJ2EnLCBOb25lKSwgKCdhcmcnLCAoMSwgOSksICdiJywgTm9uZSksICgnYXJnJywgKDEsIDE0KSwgJ2MnLCBOb25lKSwgKCdhcmcnLCAoMSwgMjIpLCAnZCcsIE5vbmUpLCAoJ2FyZycsICgxLCAyOCksICdlJywgTm9uZSldLCAoJ2FyZycsICgxLCAzNSksICdhcmdzJywgTm9uZSksIFsoJ2FyZycsICgxLCA0MSksICdmJywgTm9uZSldLCBbKCdOdW0nLCAoMSwgNDMpLCA0MildLCAoJ2FyZycsICgxLCA0OSksICdrd2FyZ3MnLCBOb25lKSwgWygnTnVtJywgKDEsIDExKSwgMSksICgnTmFtZUNvbnN0YW50JywgKDEsIDE2KSwgTm9uZSksICgnTGlzdCcsICgxLCAyNCksIFtdLCAoJ0xvYWQnLCkpLCAoJ0RpY3QnLCAoMSwgMzApLCBbXSwgW10pXSksIFsoJ1Bhc3MnLCAoMSwgNTgpKV0sIFtdLCBOb25lKV0pLAogKCdNb2R1bGUnLCBbKCdDbGFzc0RlZicsICgxLCAwKSwgJ0MnLCBbXSwgW10sIE5vbmUsIE5vbmUsIFsoJ1Bhc3MnLCAoMSwgOCkpXSwgW10pXSksCiAoJ01vZHVsZScsIFsoJ0NsYXNzRGVmJywgKDEsIDApLCAnQycsIFsoJ05hbWUnLCAoMSwgOCksICdvYmplY3QnLCAoJ0xvYWQnLCkpXSwgW10sIE5vbmUsIE5vbmUsIFsoJ1Bhc3MnLCAoMSwgMTcpKV0sIFtdKV0pLAotKCdNb2R1bGUnLCBbKCdGdW5jdGlvbkRlZicsICgxLCAwKSwgJ2YnLCAoJ2FyZ3VtZW50cycsIFtdLCBOb25lLCBOb25lLCBbXSwgTm9uZSwgTm9uZSwgW10sIFtdKSwgWygnUmV0dXJuJywgKDEsIDgpLCAoJ051bScsICgxLCAxNSksIDEpKV0sIFtdLCBOb25lKV0pLAorKCdNb2R1bGUnLCBbKCdGdW5jdGlvbkRlZicsICgxLCAwKSwgJ2YnLCAoJ2FyZ3VtZW50cycsIFtdLCBOb25lLCBbXSwgW10sIE5vbmUsIFtdKSwgWygnUmV0dXJuJywgKDEsIDgpLCAoJ051bScsICgxLCAxNSksIDEpKV0sIFtdLCBOb25lKV0pLAogKCdNb2R1bGUnLCBbKCdEZWxldGUnLCAoMSwgMCksIFsoJ05hbWUnLCAoMSwgNCksICd2JywgKCdEZWwnLCkpXSldKSwKICgnTW9kdWxlJywgWygnQXNzaWduJywgKDEsIDApLCBbKCdOYW1lJywgKDEsIDApLCAndicsICgnU3RvcmUnLCkpXSwgKCdOdW0nLCAoMSwgNCksIDEpKV0pLAogKCdNb2R1bGUnLCBbKCdBdWdBc3NpZ24nLCAoMSwgMCksICgnTmFtZScsICgxLCAwKSwgJ3YnLCAoJ1N0b3JlJywpKSwgKCdBZGQnLCksICgnTnVtJywgKDEsIDUpLCAxKSldKSwKQEAgLTEwMDIsMTQgKzk5MywxNCBAQAogKCdJbnRlcmFjdGl2ZScsIFsoJ0V4cHInLCAoMSwgMCksICgnQmluT3AnLCAoMSwgMCksICgnTnVtJywgKDEsIDApLCAxKSwgKCdBZGQnLCksICgnTnVtJywgKDEsIDIpLCAyKSkpXSksCiBdCiBldmFsX3Jlc3VsdHMgPSBbCi0oJ0V4cHJlc3Npb24nLCAoJ05hbWUnLCAoMSwgMCksICdOb25lJywgKCdMb2FkJywpKSksCisoJ0V4cHJlc3Npb24nLCAoJ05hbWVDb25zdGFudCcsICgxLCAwKSwgTm9uZSkpLAogKCdFeHByZXNzaW9uJywgKCdCb29sT3AnLCAoMSwgMCksICgnQW5kJywpLCBbKCdOYW1lJywgKDEsIDApLCAnYScsICgnTG9hZCcsKSksICgnTmFtZScsICgxLCA2KSwgJ2InLCAoJ0xvYWQnLCkpXSkpLAogKCdFeHByZXNzaW9uJywgKCdCaW5PcCcsICgxLCAwKSwgKCdOYW1lJywgKDEsIDApLCAnYScsICgnTG9hZCcsKSksICgnQWRkJywpLCAoJ05hbWUnLCAoMSwgNCksICdiJywgKCdMb2FkJywpKSkpLAogKCdFeHByZXNzaW9uJywgKCdVbmFyeU9wJywgKDEsIDApLCAoJ05vdCcsKSwgKCdOYW1lJywgKDEsIDQpLCAndicsICgnTG9hZCcsKSkpKSwKLSgnRXhwcmVzc2lvbicsICgnTGFtYmRhJywgKDEsIDApLCAoJ2FyZ3VtZW50cycsIFtdLCBOb25lLCBOb25lLCBbXSwgTm9uZSwgTm9uZSwgW10sIFtdKSwgKCdOYW1lJywgKDEsIDcpLCAnTm9uZScsICgnTG9hZCcsKSkpKSwKKygnRXhwcmVzc2lvbicsICgnTGFtYmRhJywgKDEsIDApLCAoJ2FyZ3VtZW50cycsIFtdLCBOb25lLCBbXSwgW10sIE5vbmUsIFtdKSwgKCdOYW1lQ29uc3RhbnQnLCAoMSwgNyksIE5vbmUpKSksCiAoJ0V4cHJlc3Npb24nLCAoJ0RpY3QnLCAoMSwgMCksIFsoJ051bScsICgxLCAyKSwgMSldLCBbKCdOdW0nLCAoMSwgNCksIDIpXSkpLAogKCdFeHByZXNzaW9uJywgKCdEaWN0JywgKDEsIDApLCBbXSwgW10pKSwKLSgnRXhwcmVzc2lvbicsICgnU2V0JywgKDEsIDApLCBbKCdOYW1lJywgKDEsIDEpLCAnTm9uZScsICgnTG9hZCcsKSldKSksCisoJ0V4cHJlc3Npb24nLCAoJ1NldCcsICgxLCAwKSwgWygnTmFtZUNvbnN0YW50JywgKDEsIDEpLCBOb25lKV0pKSwKICgnRXhwcmVzc2lvbicsICgnRGljdCcsICgxLCAwKSwgWygnTnVtJywgKDIsIDYpLCAxKV0sIFsoJ051bScsICg0LCAxMCksIDIpXSkpLAogKCdFeHByZXNzaW9uJywgKCdMaXN0Q29tcCcsICgxLCAxKSwgKCdOYW1lJywgKDEsIDEpLCAnYScsICgnTG9hZCcsKSksIFsoJ2NvbXByZWhlbnNpb24nLCAoJ05hbWUnLCAoMSwgNyksICdiJywgKCdTdG9yZScsKSksICgnTmFtZScsICgxLCAxMiksICdjJywgKCdMb2FkJywpKSwgWygnTmFtZScsICgxLCAxNyksICdkJywgKCdMb2FkJywpKV0pXSkpLAogKCdFeHByZXNzaW9uJywgKCdHZW5lcmF0b3JFeHAnLCAoMSwgMSksICgnTmFtZScsICgxLCAxKSwgJ2EnLCAoJ0xvYWQnLCkpLCBbKCdjb21wcmVoZW5zaW9uJywgKCdOYW1lJywgKDEsIDcpLCAnYicsICgnU3RvcmUnLCkpLCAoJ05hbWUnLCAoMSwgMTIpLCAnYycsICgnTG9hZCcsKSksIFsoJ05hbWUnLCAoMSwgMTcpLCAnZCcsICgnTG9hZCcsKSldKV0pKSwKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYXN5bmNoYXQucHkgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaGF0LnB5CmluZGV4IGM3OWZlNmYuLjJkYzlkMGMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfYXN5bmNoYXQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9hc3luY2hhdC5weQpAQCAtNSw5ICs1LDE0IEBACiAjIElmIHRoaXMgZmFpbHMsIHRoZSB0ZXN0IHdpbGwgYmUgc2tpcHBlZC4KIHRocmVhZCA9IHN1cHBvcnQuaW1wb3J0X21vZHVsZSgnX3RocmVhZCcpCiAKLWltcG9ydCBhc3luY29yZSwgYXN5bmNoYXQsIHNvY2tldCwgdGltZQotaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgYXN5bmNoYXQKK2ltcG9ydCBhc3luY29yZQoraW1wb3J0IGVycm5vCitpbXBvcnQgc29ja2V0CiBpbXBvcnQgc3lzCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgdW5pdHRlc3QubW9jawogdHJ5OgogICAgIGltcG9ydCB0aHJlYWRpbmcKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKQEAgLTE1LDYgKzIwLDcgQEAKIAogSE9TVCA9IHN1cHBvcnQuSE9TVAogU0VSVkVSX1FVSVQgPSBiJ1FVSVRcbicKK1RJTUVPVVQgPSAzLjAKIAogaWYgdGhyZWFkaW5nOgogICAgIGNsYXNzIGVjaG9fc2VydmVyKHRocmVhZGluZy5UaHJlYWQpOgpAQCAtMjcsOCArMzMsOCBAQAogICAgICAgICAgICAgc2VsZi5ldmVudCA9IGV2ZW50CiAgICAgICAgICAgICBzZWxmLnNvY2sgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCiAgICAgICAgICAgICBzZWxmLnBvcnQgPSBzdXBwb3J0LmJpbmRfcG9ydChzZWxmLnNvY2spCi0gICAgICAgICAgICAjIFRoaXMgd2lsbCBiZSBzZXQgaWYgdGhlIGNsaWVudCB3YW50cyB1cyB0byB3YWl0IGJlZm9yZSBlY2hvaW5nIGRhdGEKLSAgICAgICAgICAgICMgYmFjay4KKyAgICAgICAgICAgICMgVGhpcyB3aWxsIGJlIHNldCBpZiB0aGUgY2xpZW50IHdhbnRzIHVzIHRvIHdhaXQgYmVmb3JlIGVjaG9pbmcKKyAgICAgICAgICAgICMgZGF0YSBiYWNrLgogICAgICAgICAgICAgc2VsZi5zdGFydF9yZXNlbmRfZXZlbnQgPSBOb25lCiAKICAgICAgICAgZGVmIHJ1bihzZWxmKToKQEAgLTUxLDggKzU3LDggQEAKIAogICAgICAgICAgICAgIyByZS1zZW5kIGVudGlyZSBzZXQgb2YgY29sbGVjdGVkIGRhdGEKICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAjIHRoaXMgbWF5IGZhaWwgb24gc29tZSB0ZXN0cywgc3VjaCBhcyB0ZXN0X2Nsb3NlX3doZW5fZG9uZSwgc2luY2UKLSAgICAgICAgICAgICAgICAjIHRoZSBjbGllbnQgY2xvc2VzIHRoZSBjaGFubmVsIHdoZW4gaXQncyBkb25lIHNlbmRpbmcKKyAgICAgICAgICAgICAgICAjIHRoaXMgbWF5IGZhaWwgb24gc29tZSB0ZXN0cywgc3VjaCBhcyB0ZXN0X2Nsb3NlX3doZW5fZG9uZSwKKyAgICAgICAgICAgICAgICAjIHNpbmNlIHRoZSBjbGllbnQgY2xvc2VzIHRoZSBjaGFubmVsIHdoZW4gaXQncyBkb25lIHNlbmRpbmcKICAgICAgICAgICAgICAgICB3aGlsZSBzZWxmLmJ1ZmZlcjoKICAgICAgICAgICAgICAgICAgICAgbiA9IGNvbm4uc2VuZChzZWxmLmJ1ZmZlcls6c2VsZi5jaHVua19zaXplXSkKICAgICAgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgwLjAwMSkKQEAgLTk1LDcgKzEwMSw3IEBACiAgICAgICAgIHMuc3RhcnQoKQogICAgICAgICBldmVudC53YWl0KCkKICAgICAgICAgZXZlbnQuY2xlYXIoKQotICAgICAgICB0aW1lLnNsZWVwKDAuMDEpICMgR2l2ZSBzZXJ2ZXIgdGltZSB0byBzdGFydCBhY2NlcHRpbmcuCisgICAgICAgIHRpbWUuc2xlZXAoMC4wMSkgICAjIEdpdmUgc2VydmVyIHRpbWUgdG8gc3RhcnQgYWNjZXB0aW5nLgogICAgICAgICByZXR1cm4gcywgZXZlbnQKIAogCkBAIC0xMDMsMTAgKzEwOSwxMCBAQAogY2xhc3MgVGVzdEFzeW5jaGF0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICB1c2Vwb2xsID0gRmFsc2UKIAotICAgIGRlZiBzZXRVcCAoc2VsZik6CisgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBzZWxmLl90aHJlYWRzID0gc3VwcG9ydC50aHJlYWRpbmdfc2V0dXAoKQogCi0gICAgZGVmIHRlYXJEb3duIChzZWxmKToKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CiAgICAgICAgIHN1cHBvcnQudGhyZWFkaW5nX2NsZWFudXAoKnNlbGYuX3RocmVhZHMpCiAKICAgICBkZWYgbGluZV90ZXJtaW5hdG9yX2NoZWNrKHNlbGYsIHRlcm0sIHNlcnZlcl9jaHVuayk6CkBAIC0xMTYsMTQgKzEyMiwxNiBAQAogICAgICAgICBzLnN0YXJ0KCkKICAgICAgICAgZXZlbnQud2FpdCgpCiAgICAgICAgIGV2ZW50LmNsZWFyKCkKLSAgICAgICAgdGltZS5zbGVlcCgwLjAxKSAjIEdpdmUgc2VydmVyIHRpbWUgdG8gc3RhcnQgYWNjZXB0aW5nLgorICAgICAgICB0aW1lLnNsZWVwKDAuMDEpICAgIyBHaXZlIHNlcnZlciB0aW1lIHRvIHN0YXJ0IGFjY2VwdGluZy4KICAgICAgICAgYyA9IGVjaG9fY2xpZW50KHRlcm0sIHMucG9ydCkKICAgICAgICAgYy5wdXNoKGIiaGVsbG8gIikKICAgICAgICAgYy5wdXNoKGIid29ybGQiICsgdGVybSkKICAgICAgICAgYy5wdXNoKGIiSSdtIG5vdCBkZWFkIHlldCEiICsgdGVybSkKICAgICAgICAgYy5wdXNoKFNFUlZFUl9RVUlUKQogICAgICAgICBhc3luY29yZS5sb29wKHVzZV9wb2xsPXNlbGYudXNlcG9sbCwgY291bnQ9MzAwLCB0aW1lb3V0PS4wMSkKLSAgICAgICAgcy5qb2luKCkKKyAgICAgICAgcy5qb2luKHRpbWVvdXQ9VElNRU9VVCkKKyAgICAgICAgaWYgcy5pc19hbGl2ZSgpOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJqb2luKCkgdGltZWQgb3V0IikKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuY29udGVudHMsIFtiImhlbGxvIHdvcmxkIiwgYiJJJ20gbm90IGRlYWQgeWV0ISJdKQogCkBAIC0xMzMsMTcgKzE0MSwxNyBAQAogCiAgICAgZGVmIHRlc3RfbGluZV90ZXJtaW5hdG9yMShzZWxmKToKICAgICAgICAgIyB0ZXN0IG9uZS1jaGFyYWN0ZXIgdGVybWluYXRvcgotICAgICAgICBmb3IgbCBpbiAoMSwyLDMpOgorICAgICAgICBmb3IgbCBpbiAoMSwgMiwgMyk6CiAgICAgICAgICAgICBzZWxmLmxpbmVfdGVybWluYXRvcl9jaGVjayhiJ1xuJywgbCkKIAogICAgIGRlZiB0ZXN0X2xpbmVfdGVybWluYXRvcjIoc2VsZik6CiAgICAgICAgICMgdGVzdCB0d28tY2hhcmFjdGVyIHRlcm1pbmF0b3IKLSAgICAgICAgZm9yIGwgaW4gKDEsMiwzKToKKyAgICAgICAgZm9yIGwgaW4gKDEsIDIsIDMpOgogICAgICAgICAgICAgc2VsZi5saW5lX3Rlcm1pbmF0b3JfY2hlY2soYidcclxuJywgbCkKIAogICAgIGRlZiB0ZXN0X2xpbmVfdGVybWluYXRvcjMoc2VsZik6CiAgICAgICAgICMgdGVzdCB0aHJlZS1jaGFyYWN0ZXIgdGVybWluYXRvcgotICAgICAgICBmb3IgbCBpbiAoMSwyLDMpOgorICAgICAgICBmb3IgbCBpbiAoMSwgMiwgMyk6CiAgICAgICAgICAgICBzZWxmLmxpbmVfdGVybWluYXRvcl9jaGVjayhiJ3FxcScsIGwpCiAKICAgICBkZWYgbnVtZXJpY190ZXJtaW5hdG9yX2NoZWNrKHNlbGYsIHRlcm1sZW4pOgpAQCAtMTU0LDcgKzE2Miw5IEBACiAgICAgICAgIGMucHVzaChkYXRhKQogICAgICAgICBjLnB1c2goU0VSVkVSX1FVSVQpCiAgICAgICAgIGFzeW5jb3JlLmxvb3AodXNlX3BvbGw9c2VsZi51c2Vwb2xsLCBjb3VudD0zMDAsIHRpbWVvdXQ9LjAxKQotICAgICAgICBzLmpvaW4oKQorICAgICAgICBzLmpvaW4odGltZW91dD1USU1FT1VUKQorICAgICAgICBpZiBzLmlzX2FsaXZlKCk6CisgICAgICAgICAgICBzZWxmLmZhaWwoImpvaW4oKSB0aW1lZCBvdXQiKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5jb250ZW50cywgW2RhdGFbOnRlcm1sZW5dXSkKIApAQCAtMTc0LDcgKzE4NCw5IEBACiAgICAgICAgIGMucHVzaChkYXRhKQogICAgICAgICBjLnB1c2goU0VSVkVSX1FVSVQpCiAgICAgICAgIGFzeW5jb3JlLmxvb3AodXNlX3BvbGw9c2VsZi51c2Vwb2xsLCBjb3VudD0zMDAsIHRpbWVvdXQ9LjAxKQotICAgICAgICBzLmpvaW4oKQorICAgICAgICBzLmpvaW4odGltZW91dD1USU1FT1VUKQorICAgICAgICBpZiBzLmlzX2FsaXZlKCk6CisgICAgICAgICAgICBzZWxmLmZhaWwoImpvaW4oKSB0aW1lZCBvdXQiKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5jb250ZW50cywgW10pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5idWZmZXIsIGRhdGEpCkBAIC0xODYsNyArMTk4LDkgQEAKICAgICAgICAgcCA9IGFzeW5jaGF0LnNpbXBsZV9wcm9kdWNlcihkYXRhK1NFUlZFUl9RVUlULCBidWZmZXJfc2l6ZT04KQogICAgICAgICBjLnB1c2hfd2l0aF9wcm9kdWNlcihwKQogICAgICAgICBhc3luY29yZS5sb29wKHVzZV9wb2xsPXNlbGYudXNlcG9sbCwgY291bnQ9MzAwLCB0aW1lb3V0PS4wMSkKLSAgICAgICAgcy5qb2luKCkKKyAgICAgICAgcy5qb2luKHRpbWVvdXQ9VElNRU9VVCkKKyAgICAgICAgaWYgcy5pc19hbGl2ZSgpOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJqb2luKCkgdGltZWQgb3V0IikKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuY29udGVudHMsIFtiImhlbGxvIHdvcmxkIiwgYiJJJ20gbm90IGRlYWQgeWV0ISJdKQogCkBAIC0xOTYsNyArMjEwLDkgQEAKICAgICAgICAgZGF0YSA9IGIiaGVsbG8gd29ybGRcbkknbSBub3QgZGVhZCB5ZXQhXG4iCiAgICAgICAgIGMucHVzaF93aXRoX3Byb2R1Y2VyKGRhdGErU0VSVkVSX1FVSVQpCiAgICAgICAgIGFzeW5jb3JlLmxvb3AodXNlX3BvbGw9c2VsZi51c2Vwb2xsLCBjb3VudD0zMDAsIHRpbWVvdXQ9LjAxKQotICAgICAgICBzLmpvaW4oKQorICAgICAgICBzLmpvaW4odGltZW91dD1USU1FT1VUKQorICAgICAgICBpZiBzLmlzX2FsaXZlKCk6CisgICAgICAgICAgICBzZWxmLmZhaWwoImpvaW4oKSB0aW1lZCBvdXQiKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5jb250ZW50cywgW2IiaGVsbG8gd29ybGQiLCBiIkknbSBub3QgZGVhZCB5ZXQhIl0pCiAKQEAgLTIwNyw3ICsyMjMsOSBAQAogICAgICAgICBjLnB1c2goYiJoZWxsbyB3b3JsZFxuXG5JJ20gbm90IGRlYWQgeWV0IVxuIikKICAgICAgICAgYy5wdXNoKFNFUlZFUl9RVUlUKQogICAgICAgICBhc3luY29yZS5sb29wKHVzZV9wb2xsPXNlbGYudXNlcG9sbCwgY291bnQ9MzAwLCB0aW1lb3V0PS4wMSkKLSAgICAgICAgcy5qb2luKCkKKyAgICAgICAgcy5qb2luKHRpbWVvdXQ9VElNRU9VVCkKKyAgICAgICAgaWYgcy5pc19hbGl2ZSgpOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJqb2luKCkgdGltZWQgb3V0IikKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuY29udGVudHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgW2IiaGVsbG8gd29ybGQiLCBiIiIsIGIiSSdtIG5vdCBkZWFkIHlldCEiXSkKQEAgLTIyNiw3ICsyNDQsOSBAQAogICAgICAgICAjIHdoZXJlIHRoZSBzZXJ2ZXIgZWNob2VzIGFsbCBvZiBpdHMgZGF0YSBiZWZvcmUgd2UgY2FuIGNoZWNrIHRoYXQgaXQKICAgICAgICAgIyBnb3QgYW55IGRvd24gYmVsb3cuCiAgICAgICAgIHMuc3RhcnRfcmVzZW5kX2V2ZW50LnNldCgpCi0gICAgICAgIHMuam9pbigpCisgICAgICAgIHMuam9pbih0aW1lb3V0PVRJTUVPVVQpCisgICAgICAgIGlmIHMuaXNfYWxpdmUoKToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiam9pbigpIHRpbWVkIG91dCIpCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmNvbnRlbnRzLCBbXSkKICAgICAgICAgIyB0aGUgc2VydmVyIG1pZ2h0IGhhdmUgYmVlbiBhYmxlIHRvIHNlbmQgYSBieXRlIG9yIHR3byBiYWNrLCBidXQgdGhpcwpAQCAtMjM0LDE1ICsyNTQsNDggQEAKICAgICAgICAgIyAod2hpY2ggY291bGQgc3RpbGwgcmVzdWx0IGluIHRoZSBjbGllbnQgbm90IGhhdmluZyByZWNlaXZlZCBhbnl0aGluZykKICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKGxlbihzLmJ1ZmZlciksIDApCiAKKyAgICBkZWYgdGVzdF9wdXNoKHNlbGYpOgorICAgICAgICAjIElzc3VlICMxMjUyMzogcHVzaCgpIHNob3VsZCByYWlzZSBhIFR5cGVFcnJvciBpZiBpdCBkb2Vzbid0IGdldAorICAgICAgICAjIGEgYnl0ZXMgc3RyaW5nCisgICAgICAgIHMsIGV2ZW50ID0gc3RhcnRfZWNob19zZXJ2ZXIoKQorICAgICAgICBjID0gZWNob19jbGllbnQoYidcbicsIHMucG9ydCkKKyAgICAgICAgZGF0YSA9IGInYnl0ZXNcbicKKyAgICAgICAgYy5wdXNoKGRhdGEpCisgICAgICAgIGMucHVzaChieXRlYXJyYXkoZGF0YSkpCisgICAgICAgIGMucHVzaChtZW1vcnl2aWV3KGRhdGEpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMucHVzaCwgMTApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5wdXNoLCAndW5pY29kZScpCisgICAgICAgIGMucHVzaChTRVJWRVJfUVVJVCkKKyAgICAgICAgYXN5bmNvcmUubG9vcCh1c2VfcG9sbD1zZWxmLnVzZXBvbGwsIGNvdW50PTMwMCwgdGltZW91dD0uMDEpCisgICAgICAgIHMuam9pbih0aW1lb3V0PVRJTUVPVVQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5jb250ZW50cywgW2InYnl0ZXMnLCBiJ2J5dGVzJywgYidieXRlcyddKQorCiAKIGNsYXNzIFRlc3RBc3luY2hhdF9XaXRoUG9sbChUZXN0QXN5bmNoYXQpOgogICAgIHVzZXBvbGwgPSBUcnVlCiAKKworY2xhc3MgVGVzdEFzeW5jaGF0TW9ja2VkKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9ibG9ja2luZ2lvZXJyb3Ioc2VsZik6CisgICAgICAgICMgSXNzdWUgIzE2MTMzOiBoYW5kbGVfcmVhZCgpIG11c3QgaWdub3JlIEJsb2NraW5nSU9FcnJvcgorICAgICAgICBzb2NrID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc29jay5yZWN2LnNpZGVfZWZmZWN0ID0gQmxvY2tpbmdJT0Vycm9yKGVycm5vLkVBR0FJTikKKworICAgICAgICBkaXNwYXRjaGVyID0gYXN5bmNoYXQuYXN5bmNfY2hhdCgpCisgICAgICAgIGRpc3BhdGNoZXIuc2V0X3NvY2tldChzb2NrKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoZGlzcGF0Y2hlci5kZWxfY2hhbm5lbCkKKworICAgICAgICB3aXRoIHVuaXR0ZXN0Lm1vY2sucGF0Y2gub2JqZWN0KGRpc3BhdGNoZXIsICdoYW5kbGVfZXJyb3InKSBhcyBlcnJvcjoKKyAgICAgICAgICAgIGRpc3BhdGNoZXIuaGFuZGxlX3JlYWQoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGVycm9yLmNhbGxlZCkKKworCiBjbGFzcyBUZXN0SGVscGVyRnVuY3Rpb25zKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9maW5kX3ByZWZpeF9hdF9lbmQoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXN5bmNoYXQuZmluZF9wcmVmaXhfYXRfZW5kKCJxd2VydHlcciIsICJcclxuIiksIDEpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXN5bmNoYXQuZmluZF9wcmVmaXhfYXRfZW5kKCJxd2VydHlka2pmIiwgIlxyXG4iKSwgMCkKIAorCiBjbGFzcyBUZXN0Rmlmbyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RfYmFzaWMoc2VsZik6CiAgICAgICAgIGYgPSBhc3luY2hhdC5maWZvKCkKQEAgLTI2OCw5ICszMjEsMTMgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnBvcCgpLCAoMCwgTm9uZSkpCiAKIAotZGVmIHRlc3RfbWFpbih2ZXJib3NlPU5vbmUpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KFRlc3RBc3luY2hhdCwgVGVzdEFzeW5jaGF0X1dpdGhQb2xsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGVzdEhlbHBlckZ1bmN0aW9ucywgVGVzdEZpZm8pCitjbGFzcyBUZXN0Tm90Q29ubmVjdGVkKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9kaXNhbGxvd19uZWdhdGl2ZV90ZXJtaW5hdG9yKHNlbGYpOgorICAgICAgICAjIElzc3VlICMxMTI1OQorICAgICAgICBjbGllbnQgPSBhc3luY2hhdC5hc3luY19jaGF0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY2xpZW50LnNldF90ZXJtaW5hdG9yLCAtMSkKKworCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKHZlcmJvc2U9VHJ1ZSkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby9fX2luaXRfXy5weSBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MGE5ZWVhCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL19faW5pdF9fLnB5CkBAIC0wLDAgKzEsMTAgQEAKK2ltcG9ydCBvcworZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IGxvYWRfcGFja2FnZV90ZXN0cywgaW1wb3J0X21vZHVsZQorCisjIFNraXAgdGVzdHMgaWYgd2UgZG9uJ3QgaGF2ZSB0aHJlYWRpbmcuCitpbXBvcnRfbW9kdWxlKCd0aHJlYWRpbmcnKQorIyBTa2lwIHRlc3RzIGlmIHdlIGRvbid0IGhhdmUgY29uY3VycmVudC5mdXR1cmVzLgoraW1wb3J0X21vZHVsZSgnY29uY3VycmVudC5mdXR1cmVzJykKKworZGVmIGxvYWRfdGVzdHMoKmFyZ3MpOgorICAgIHJldHVybiBsb2FkX3BhY2thZ2VfdGVzdHMob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgKmFyZ3MpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vX19tYWluX18ucHkgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vX19tYWluX18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBhMjNhMgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby9fX21haW5fXy5weQpAQCAtMCwwICsxLDQgQEAKK2Zyb20gLiBpbXBvcnQgbG9hZF90ZXN0cworaW1wb3J0IHVuaXR0ZXN0CisKK3VuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hc3luY2lvL2VjaG8ucHkgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vZWNoby5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDYzNjRiCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL2VjaG8ucHkKQEAgLTAsMCArMSw4IEBACitpbXBvcnQgb3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB3aGlsZSBUcnVlOgorICAgICAgICBidWYgPSBvcy5yZWFkKDAsIDEwMjQpCisgICAgICAgIGlmIG5vdCBidWY6CisgICAgICAgICAgICBicmVhaworICAgICAgICBvcy53cml0ZSgxLCBidWYpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vZWNobzIucHkgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vZWNobzIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTgzY2EwOQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby9lY2hvMi5weQpAQCAtMCwwICsxLDYgQEAKK2ltcG9ydCBvcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIGJ1ZiA9IG9zLnJlYWQoMCwgMTAyNCkKKyAgICBvcy53cml0ZSgxLCBiJ09VVDonK2J1ZikKKyAgICBvcy53cml0ZSgyLCBiJ0VSUjonK2J1ZikKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby9lY2hvMy5weSBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby9lY2hvMy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjQ0OTY3Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL2VjaG8zLnB5CkBAIC0wLDAgKzEsMTEgQEAKK2ltcG9ydCBvcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHdoaWxlIFRydWU6CisgICAgICAgIGJ1ZiA9IG9zLnJlYWQoMCwgMTAyNCkKKyAgICAgICAgaWYgbm90IGJ1ZjoKKyAgICAgICAgICAgIGJyZWFrCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLndyaXRlKDEsIGInT1VUOicrYnVmKQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBleDoKKyAgICAgICAgICAgIG9zLndyaXRlKDIsIGInRVJSOicgKyBleC5fX2NsYXNzX18uX19uYW1lX18uZW5jb2RlKCdhc2NpaScpKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hc3luY2lvL2tleWNlcnQzLnBlbSBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby9rZXljZXJ0My5wZW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJmYTYyYwotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby9rZXljZXJ0My5wZW0KQEAgLTAsMCArMSw3MyBAQAorLS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCitNSUlDZGdJQkFEQU5CZ2txaGtpRzl3MEJBUUVGQUFTQ0FtQXdnZ0pjQWdFQUFvR0JBTUxnRDBrQUtEYjVjRnlQCitqYndOZlI1Q3Rld2RYQytrTVhBV0Q4REx4aVRUdmhNVzdxVm5sd09tMzZtWmxzekhLdnNSZjA1bFQ0cGVnaUZNCis5ejJqMU9sYU4rY2kvWDdOVTIyVE5ONmNyWVNpTjc3RmpZSlA0NjRqODc2bmRTeHlEK3J6eXMzODZUKzFyMWFaCithZ2dFZGtqMVRzU3N2MXpXSVlLbFBJamx2aHV4QWdNQkFBRUNnWUEwYUgrVDJWZjNXT1B2OEtka2NKZzZnQ1JlCit5SktYT1dnV1JjaWN4L0NVek9Fc1R4bUZJRFBMeHFBV0Ezazd2MEIrM3ZqR3c1WTlseWNWLzVYcVhOb1FJMTRqCit5MDlpTnN1bWRzMTN1NUFLa0dkVEpuWmhRN1VLZG9WSGZ1UDQ0WmRPdi9ySjUvVkQ2RjR6V3l3cGU5MHBjYksrCitBV0RWdHVzZ0dRQlNpZUVsMVFKQkFPeVZyVUc1bDJ5b1VCdGQyenIva2lHbS9EWXlYbEl0aFFPL0EzL0xuZ0RXCis1L3lkR3hWc1Q3bEFWT2dDc29UKzBMNGVmVGg5MFBqelc4TFBRclBCV1ZNQ1FRRFMzaC9GdFlZZDVsZnorRk5MCis5Q0VlMUYxdzlsOFA3NDl1TlVEMGczMTd6djF0YXRJcVZDc1FXSGZWSE5kVnZmUSt2U0Z3MzhPT1JPMDBYcXM5CisxR0pyQWtCa29YWEVreENab3k0UHRlaGVPLzhJV1dMR0dyNkw3ZGk2TXpGbDFsSXF3VDZEOEw5b2FWMnZ5bkZUCitEbktvcDBwYTA5VW5oanl3NTdLTU5tU0UyU1VKQWtFQXJsb1RFenBnUm1DcTRJSzIvTnBDZUdkSFM1dXFSbGJoCisxVklhL3hHcHM3RVdRbDVNbjhzd1FEZWwvWVAzV0dIVGpmeDdwZ1NlZ1Fma3lhUnRHcFo5T1FKQWE5VnVtajhtCitKQUF0STBCbmdhOGhnUXg3QmhUUVk0Q2FkRHh5aVJHT0dZaHdVellWQ3FrYjJzYlZSSDlIbndVYUpUN2NXQlkzCitSbkpkSE9NWFdlbTcvdz09CistLS0tLUVORCBQUklWQVRFIEtFWS0tLS0tCitDZXJ0aWZpY2F0ZToKKyAgICBEYXRhOgorICAgICAgICBWZXJzaW9uOiAxICgweDApCisgICAgICAgIFNlcmlhbCBOdW1iZXI6IDEyNzIzMzQyNjEyNzIxNDQzMjgxICgweGIwOTI2NGIxZjJkYTIxZDEpCisgICAgU2lnbmF0dXJlIEFsZ29yaXRobTogc2hhMVdpdGhSU0FFbmNyeXB0aW9uCisgICAgICAgIElzc3VlcjogQz1YWSwgTz1QeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiBDQSwgQ049b3VyLWNhLXNlcnZlcgorICAgICAgICBWYWxpZGl0eQorICAgICAgICAgICAgTm90IEJlZm9yZTogSmFuICA0IDE5OjQ3OjA3IDIwMTMgR01UCisgICAgICAgICAgICBOb3QgQWZ0ZXIgOiBOb3YgMTMgMTk6NDc6MDcgMjAyMiBHTVQKKyAgICAgICAgU3ViamVjdDogQz1YWSwgTD1DYXN0bGUgQW50aHJheCwgTz1QeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiwgQ049bG9jYWxob3N0CisgICAgICAgIFN1YmplY3QgUHVibGljIEtleSBJbmZvOgorICAgICAgICAgICAgUHVibGljIEtleSBBbGdvcml0aG06IHJzYUVuY3J5cHRpb24KKyAgICAgICAgICAgICAgICBQdWJsaWMtS2V5OiAoMTAyNCBiaXQpCisgICAgICAgICAgICAgICAgTW9kdWx1czoKKyAgICAgICAgICAgICAgICAgICAgMDA6YzI6ZTA6MGY6NDk6MDA6Mjg6MzY6Zjk6NzA6NWM6OGY6OGQ6YmM6MGQ6CisgICAgICAgICAgICAgICAgICAgIDdkOjFlOjQyOmI1OmVjOjFkOjVjOjJmOmE0OjMxOjcwOjE2OjBmOmMwOmNiOgorICAgICAgICAgICAgICAgICAgICBjNjoyNDpkMzpiZToxMzoxNjplZTphNTo2Nzo5NzowMzphNjpkZjphOTo5OToKKyAgICAgICAgICAgICAgICAgICAgOTY6Y2M6Yzc6MmE6ZmI6MTE6N2Y6NGU6NjU6NGY6OGE6NWU6ODI6MjE6NGM6CisgICAgICAgICAgICAgICAgICAgIGY3OjNkOmEzOmQ0OmU5OjVhOjM3OmU3OjIyOmZkOjdlOmNkOjUzOjZkOjkzOgorICAgICAgICAgICAgICAgICAgICAzNDpkZTo5YzphZDo4NDphMjozNzpiZTpjNTo4ZDo4Mjo0ZjplMzphZToyMzoKKyAgICAgICAgICAgICAgICAgICAgZjM6YmU6YTc6NzU6MmM6NzI6MGY6ZWE6ZjM6Y2E6Y2Q6ZmM6ZTk6M2Y6YjU6CisgICAgICAgICAgICAgICAgICAgIGFmOjU2Ojk5OjZhOjA4OjA0Ojc2OjQ4OmY1OjRlOmM0OmFjOmJmOjVjOmQ2OgorICAgICAgICAgICAgICAgICAgICAyMTo4MjphNTozYzo4ODplNTpiZToxYjpiMQorICAgICAgICAgICAgICAgIEV4cG9uZW50OiA2NTUzNyAoMHgxMDAwMSkKKyAgICBTaWduYXR1cmUgQWxnb3JpdGhtOiBzaGExV2l0aFJTQUVuY3J5cHRpb24KKyAgICAgICAgIDJmOjQyOjVmOmEzOjA5OjJjOmZhOjUxOjg4OmM3OjM3OjdmOmVhOjBlOjYzOmYwOmEyOjlhOgorICAgICAgICAgZTU6NWE6ZTI6Yzg6MjA6ZjA6M2Y6NjA6YmM6Yzg6MGY6YjY6YzY6NzY6Y2U6ZGI6ODM6OTM6CisgICAgICAgICBmNTphMzozMzo2NzowMTo4ZTowNDpjZDowMDo5YTo3MzpmZDpmMzozNTo4NjpmYTpkNzoxMzoKKyAgICAgICAgIGUyOjQ2OmM2OjlkOmMwOjI5OjUzOmQ0OmE5OjkwOmI4Ojc3OjRiOmU2OjgzOjc2OmU0OjkyOgorICAgICAgICAgZDY6OWM6NTA6Y2Y6NDM6ZDA6YzY6MDE6Nzc6NjE6OWE6ZGU6OWI6NzA6Zjc6NzI6Y2Q6NTk6CisgICAgICAgICAwMDozMTo2OTpkOTpiNDpjYTowNjo5Yzo2ZDpjMzpjNzo4MDo4Yzo2ODplNjpiNTphMjpmODoKKyAgICAgICAgIGVmOjFkOmJiOjE2OjlmOjc3Ojc3OmVmOjg3OjYyOjIyOjliOjRkOjY5OmE0OjNhOjFhOmYxOgorICAgICAgICAgMjE6NWU6OGM6MzI6YWM6OTI6ZmQ6MTU6NmI6MTg6YzI6N2Y6MTU6MGQ6OTg6MzA6Y2E6NzU6CisgICAgICAgICA4ZjoxYTo3MTpkZjpkYToxZDpiMjplZjo5YTplODoyZDoyZTowMjpmZDo0YTozYzphYTo5NjoKKyAgICAgICAgIDBiOjA2OjVkOjM1OmIzOjNkOjI0Ojg3OjRiOmUwOmIwOjU4OjYwOjJmOjQ1OmFjOjJlOjQ4OgorICAgICAgICAgOGE6YjA6OTk6MTA6NjU6Mjc6ZmY6Y2M6YjE6ZDg6ZmQ6YmQ6MjY6NmI6Yjk6MGM6MDU6MmE6CisgICAgICAgICBmNDo0NTo2MzozNTo1MTowNzplZDo4Mzo4NTpmZTo2Zjo2OTpjYjpiYjo0MDphODphZTpiNjoKKyAgICAgICAgIDNiOjU2OjRhOjJkOmE0OmVkOjZkOjExOjJjOjRkOmVkOjE3OjI0OmZkOjQ3OmJjOmQzOjQxOgorICAgICAgICAgYTI6ZDM6MDY6ZmU6MGM6OTA6ZDg6ZDg6OTQ6MjY6YzQ6ZmY6Y2M6YTE6ZDg6NDI6Nzc6ZWI6CisgICAgICAgICBmYzphOTo5NDo3MQorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlDcERDQ0FZd0NDUUN3a21TeDh0b2gwVEFOQmdrcWhraUc5dzBCQVFVRkFEQk5NUXN3Q1FZRFZRUUdFd0pZCitXVEVtTUNRR0ExVUVDZ3dkVUhsMGFHOXVJRk52Wm5SM1lYSmxJRVp2ZFc1a1lYUnBiMjRnUTBFeEZqQVVCZ05WCitCQU1NRFc5MWNpMWpZUzF6WlhKMlpYSXdIaGNOTVRNd01UQTBNVGswTnpBM1doY05Nakl4TVRFek1UazBOekEzCitXakJmTVFzd0NRWURWUVFHRXdKWVdURVhNQlVHQTFVRUJ4TU9RMkZ6ZEd4bElFRnVkR2h5WVhneEl6QWhCZ05WCitCQW9UR2xCNWRHaHZiaUJUYjJaMGQyRnlaU0JHYjNWdVpHRjBhVzl1TVJJd0VBWURWUVFERXdsc2IyTmhiR2h2CitjM1F3Z1o4d0RRWUpLb1pJaHZjTkFRRUJCUUFEZ1kwQU1JR0pBb0dCQU1MZ0Qwa0FLRGI1Y0Z5UGpid05mUjVDCit0ZXdkWEMra01YQVdEOERMeGlUVHZoTVc3cVZubHdPbTM2bVpsc3pIS3ZzUmYwNWxUNHBlZ2lGTTl6MmoxT2xhCitOK2NpL1g3TlUyMlROTjZjcllTaU43N0ZqWUpQNDY0ajg3Nm5kU3h5RCtyenlzMzg2VCsxcjFhWmFnZ0Vka2oxCitUc1NzdjF6V0lZS2xQSWpsdmh1eEFnTUJBQUV3RFFZSktvWklodmNOQVFFRkJRQURnZ0VCQUM5Q1g2TUpMUHBSCitpTWMzZitvT1kvQ2ltdVZhNHNnZzhEOWd2TWdQdHNaMnp0dURrL1dqTTJjQmpnVE5BSnB6L2ZNMWh2clhFK0pHCit4cDNBS1ZQVXFaQzRkMHZtZzNia2t0YWNVTTlEME1ZQmQyR2EzcHR3OTNMTldRQXhhZG0weWdhY2JjUEhnSXhvCis1cldpK084ZHV4YWZkM2Z2aDJJaW0wMXBwRG9hOFNGZWpES3NrdjBWYXhqQ2Z4VU5tRERLZFk4YWNkL2FIYkx2CittdWd0TGdMOVNqeXFsZ3NHWFRXelBTU0hTK0N3V0dBdlJhd3VTSXF3bVJCbEovL01zZGo5dlNacnVRd0ZLdlJGCitZelZSQisyRGhmNXZhY3U3UUtpdXRqdFdTaTJrN1cwUkxFM3RGeVQ5Ujd6VFFhTFRCdjRNa05qWWxDYkUvOHloCisyRUozNi95cGxIRT0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby9weWNhY2VydC5wZW0gYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vcHljYWNlcnQucGVtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5YjFmM2UKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vcHljYWNlcnQucGVtCkBAIC0wLDAgKzEsNzggQEAKK0NlcnRpZmljYXRlOgorICAgIERhdGE6CisgICAgICAgIFZlcnNpb246IDMgKDB4MikKKyAgICAgICAgU2VyaWFsIE51bWJlcjogMTI3MjMzNDI2MTI3MjE0NDMyODAgKDB4YjA5MjY0YjFmMmRhMjFkMCkKKyAgICBTaWduYXR1cmUgQWxnb3JpdGhtOiBzaGExV2l0aFJTQUVuY3J5cHRpb24KKyAgICAgICAgSXNzdWVyOiBDPVhZLCBPPVB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uIENBLCBDTj1vdXItY2Etc2VydmVyCisgICAgICAgIFZhbGlkaXR5CisgICAgICAgICAgICBOb3QgQmVmb3JlOiBKYW4gIDQgMTk6NDc6MDcgMjAxMyBHTVQKKyAgICAgICAgICAgIE5vdCBBZnRlciA6IEphbiAgMiAxOTo0NzowNyAyMDIzIEdNVAorICAgICAgICBTdWJqZWN0OiBDPVhZLCBPPVB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uIENBLCBDTj1vdXItY2Etc2VydmVyCisgICAgICAgIFN1YmplY3QgUHVibGljIEtleSBJbmZvOgorICAgICAgICAgICAgUHVibGljIEtleSBBbGdvcml0aG06IHJzYUVuY3J5cHRpb24KKyAgICAgICAgICAgICAgICBQdWJsaWMtS2V5OiAoMjA0OCBiaXQpCisgICAgICAgICAgICAgICAgTW9kdWx1czoKKyAgICAgICAgICAgICAgICAgICAgMDA6ZTc6ZGU6ZTk6ZTM6MGM6OWY6MDA6YjY6YTE6ZmQ6MmI6NWI6OTY6ZDI6CisgICAgICAgICAgICAgICAgICAgIDZmOmNjOmUwOmJlOjg2OmI5OjIwOjVlOmVjOjAzOjdhOjU1OmFiOmVhOmE0OgorICAgICAgICAgICAgICAgICAgICBlOTpmOTo0OTo4NTpkMjo2NjpkNTplZDpjNzo3YTplYTo1Njo4ZToyZDo4ZjoKKyAgICAgICAgICAgICAgICAgICAgZTc6NDI6ZTI6NjI6Mjg6YTk6OWY6ZDY6MWI6OGU6ZWI6YjU6YjQ6OWM6OWY6CisgICAgICAgICAgICAgICAgICAgIDE0OmFiOmRmOmU2Ojk0OjhiOjc2OjFkOjNlOjZkOjI0OjYxOmVkOjBjOmJmOgorICAgICAgICAgICAgICAgICAgICAwMDo4YTo2MTowYzpkZjo1YzpjODozNjo3MzoxNjowMDpjZDo0NzpiYTo2ZDoKKyAgICAgICAgICAgICAgICAgICAgYTQ6YTQ6NzQ6ODg6ODM6MjM6MGE6MTk6ZmM6MDk6YTc6M2M6NGE6NGI6ZDM6CisgICAgICAgICAgICAgICAgICAgIGU3OjFkOjJkOmU0OmVhOjRjOjU0OjIxOmYzOjI2OmRiOjg5OjM3OjE4OmQ0OgorICAgICAgICAgICAgICAgICAgICAwMjpiYjo0MDozMjo1ZjphNDpmZjoyZDoxYzpmNzpkNDpiYjplYzo4ZTpjZjoKKyAgICAgICAgICAgICAgICAgICAgNWM6ODI6YWM6ZTY6N2M6MDg6NmM6NDg6ODU6NjE6MDc6N2Y6MjU6ZTA6NWM6CisgICAgICAgICAgICAgICAgICAgIGUwOmJjOjM0OjVmOmUwOmI5OjA0OjQ3Ojc1OmM4OjQ3OjBiOjhkOmJjOmQ2OgorICAgICAgICAgICAgICAgICAgICBjODo2ODo1ZjozMzo4Mzo2MjpkMjoyMDo0NDozNTpiMTphZDo4MToxYTo4YToKKyAgICAgICAgICAgICAgICAgICAgY2Q6YmM6MzU6YjA6NWM6OGI6NDc6ZDY6MTg6ZTk6OWM6MTg6OTc6Y2M6MDE6CisgICAgICAgICAgICAgICAgICAgIDNjOjI5OmNjOmU4OjFlOmU0OmU0OmMxOmI4OmRlOmU3OmMyOjExOjE4Ojg3OgorICAgICAgICAgICAgICAgICAgICA1YTo5MzozNDpkODphNjoyNTpmNzoxNDo3MTplYjplNDoyMTphMjpkMjowZjoKKyAgICAgICAgICAgICAgICAgICAgMmU6MmU6ZDQ6NjI6MDA6MzU6ZDM6ZDY6ZWY6NWM6NjA6NGI6NGM6YTk6MTQ6CisgICAgICAgICAgICAgICAgICAgIGUyOmRkOjE1OjU4OjQ2OjM3OjMzOjI2OmI3OmU3OjJlOjVkOmVkOjQyOmU0OgorICAgICAgICAgICAgICAgICAgICBjNTo0ZAorICAgICAgICAgICAgICAgIEV4cG9uZW50OiA2NTUzNyAoMHgxMDAwMSkKKyAgICAgICAgWDUwOXYzIGV4dGVuc2lvbnM6CisgICAgICAgICAgICBYNTA5djMgU3ViamVjdCBLZXkgSWRlbnRpZmllcjogCisgICAgICAgICAgICAgICAgQkM6REQ6NjI6RDk6NzY6REE6MUI6RDI6NTQ6NkI6Q0Y6RTA6NjY6OUI6MUU6MUU6N0I6NTY6MEM6MEIKKyAgICAgICAgICAgIFg1MDl2MyBBdXRob3JpdHkgS2V5IElkZW50aWZpZXI6IAorICAgICAgICAgICAgICAgIGtleWlkOkJDOkREOjYyOkQ5Ojc2OkRBOjFCOkQyOjU0OjZCOkNGOkUwOjY2OjlCOjFFOjFFOjdCOjU2OjBDOjBCCisKKyAgICAgICAgICAgIFg1MDl2MyBCYXNpYyBDb25zdHJhaW50czogCisgICAgICAgICAgICAgICAgQ0E6VFJVRQorICAgIFNpZ25hdHVyZSBBbGdvcml0aG06IHNoYTFXaXRoUlNBRW5jcnlwdGlvbgorICAgICAgICAgN2Q6MGE6ZjU6Y2I6OGQ6ZDM6NWQ6YmQ6OTk6OGU6Zjg6MmI6MGY6YmE6ZWI6YzI6ZDk6YTY6CisgICAgICAgICAyNzo0ZjoyZTo3YjoyZjowZTo2NDpkODoxYzozNTo1MDo0ZTplZTpmYzo5MDpiOTo4ZDo2ZDoKKyAgICAgICAgIGE4OmM1OmM2OjA2OmIwOmFmOmYzOjJkOmJmOjNiOmI4OjQyOjA3OmRkOjE4OjdkOjZkOjk1OgorICAgICAgICAgNTQ6NTc6ODU6MTg6NjA6NDc6MmY6ZWI6Nzg6MWI6Zjk6ZTg6MTc6ZmQ6NWE6MGQ6ODc6MTc6CisgICAgICAgICAyODphYzo0Yzo2YTplNjpiYzoyOTpmNDpmNDo1NTo3MDoyOTo0MjpkZTo4NTplYTphYjo2YzoKKyAgICAgICAgIDIzOjA2OjY0OjMwOjc1OjAyOjhlOjUzOmJjOjVlOjAxOjMzOjM3OmNjOjFlOmNkOmI4OmE0OgorICAgICAgICAgZmQ6Y2E6ZTQ6NWY6NjU6M2I6ODM6MWM6ODY6ZjE6NTU6MDI6YTA6M2E6OGY6ZGI6OTE6Yjc6CisgICAgICAgICA0MDoxNDpiNDplNzo4ZDpkMjplZTo3MzpiYTplMzplNTozNDoyZDpiYzo5NDo2Zjo0ZToyNDoKKyAgICAgICAgIDA2OmY3OjVmOjhiOjBlOmE3OjhlOjZiOmRlOjVlOjc1OmY0OjMyOjlhOjUwOmIxOjQ0OjMzOgorICAgICAgICAgOWE6ZDA6MDU6ZTI6Nzg6ODI6ZmY6ZGI6ZGE6OGE6NjM6ZWI6YTk6ZGQ6ZDE6YmY6YTA6NjE6CisgICAgICAgICBhZDplMzo5ZTo4YToyNDo1ZDo2MjowZTplNzo0Yzo5MTo3ZjplZjpkZjozNDozNjozYjoyZjoKKyAgICAgICAgIDVkOmY1Ojg0OmIyOjJmOmM0OjZkOjkzOjk2OjFhOjZmOjMwOjI4OmYxOmRhOjEyOjlhOjY0OgorICAgICAgICAgYjQ6NDA6MzM6MWQ6YmQ6ZGU6MmI6NTM6YTg6ZWE6YmU6ZDY6YmM6NGU6OTY6ZjU6NDQ6ZmI6CisgICAgICAgICAzMjoxODphZTpkNToxZjpmNjo2OTphZjpiNjo0ZTo3YjoxZDo1ODplYzozYjphOTo1MzphMzoKKyAgICAgICAgIDVlOjU4OmM4OjllCistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSURiVENDQWxXZ0F3SUJBZ0lKQUxDU1pMSHkyaUhRTUEwR0NTcUdTSWIzRFFFQkJRVUFNRTB4Q3pBSkJnTlYKK0JBWVRBbGhaTVNZd0pBWURWUVFLREIxUWVYUm9iMjRnVTI5bWRIZGhjbVVnUm05MWJtUmhkR2x2YmlCRFFURVcKK01CUUdBMVVFQXd3TmIzVnlMV05oTFhObGNuWmxjakFlRncweE16QXhNRFF4T1RRM01EZGFGdzB5TXpBeE1ESXgKK09UUTNNRGRhTUUweEN6QUpCZ05WQkFZVEFsaFpNU1l3SkFZRFZRUUtEQjFRZVhSb2IyNGdVMjltZEhkaGNtVWcKK1JtOTFibVJoZEdsdmJpQkRRVEVXTUJRR0ExVUVBd3dOYjNWeUxXTmhMWE5sY25abGNqQ0NBU0l3RFFZSktvWkkKK2h2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBT2ZlNmVNTW53QzJvZjByVzViU2I4emd2b2E1SUY3c0EzcFYKK3ErcWs2ZmxKaGRKbTFlM0hldXBXamkyUDUwTGlZaWlwbjlZYmp1dTF0SnlmRkt2ZjVwU0xkaDArYlNSaDdReS8KK0FJcGhETjljeURaekZnRE5SN3B0cEtSMGlJTWpDaG44Q2FjOFNrdlQ1eDB0NU9wTVZDSHpKdHVKTnhqVUFydEEKK01sK2sveTBjOTlTNzdJN1BYSUtzNW53SWJFaUZZUWQvSmVCYzRMdzBYK0M1QkVkMXlFY0xqYnpXeUdoZk00TmkKKzBpQkVOYkd0Z1JxS3pidzFzRnlMUjlZWTZad1lsOHdCUENuTTZCN2s1TUc0M3VmQ0VSaUhXcE0wMktZbDl4UngKKzYrUWhvdElQTGk3VVlnQTEwOWJ2WEdCTFRLa1U0dDBWV0VZM015YTM1eTVkN1VMa3hVMENBd0VBQWFOUU1FNHcKK0hRWURWUjBPQkJZRUZMemRZdGwyMmh2U1ZHdlA0R2FiSGg1N1Znd0xNQjhHQTFVZEl3UVlNQmFBRkx6ZFl0bDIKKzJodlNWR3ZQNEdhYkhoNTdWZ3dMTUF3R0ExVWRFd1FGTUFNQkFmOHdEUVlKS29aSWh2Y05BUUVGQlFBRGdnRUIKK0FIMEs5Y3VOMDEyOW1ZNzRLdys2NjhMWnBpZFBMbnN2RG1UWUhEVlFUdTc4a0xtTmJhakZ4Z2F3ci9NdHZ6dTQKK1FnZmRHSDF0bFZSWGhSaGdSeS9yZUJ2NTZCZjlXZzJIRnlpc1RHcm12Q24wOUZWd0tVTGVoZXFyYkNNR1pEQjEKK0FvNVR2RjRCTXpmTUhzMjRwUDNLNUY5bE80TWNodkZWQXFBNmo5dVJ0MEFVdE9lTjB1NXp1dVBsTkMyOGxHOU8KK0pBYjNYNHNPcDQ1cjNsNTE5REthVUxGRU01clFCZUo0Z3YvYjJvcGo2Nm5kMGIrZ1lhM2pub29rWFdJTzUweVIKK2YrL2ZORFk3TDEzMWhMSXZ4RzJUbGhwdk1DangyaEthWkxSQU14MjkzaXRUcU9xKzFyeE9sdlZFK3pJWXJ0VWYKKzltbXZ0azU3SFZqc082bFRvMTVZeUo0PQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3NzbF9jZXJ0LnBlbSBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby9zc2xfY2VydC5wZW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdhN2Q3ZQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby9zc2xfY2VydC5wZW0KQEAgLTAsMCArMSwxNSBAQAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlDVkRDQ0FiMmdBd0lCQWdJSkFOZkhPQmtacjhKT01BMEdDU3FHU0liM0RRRUJCUVVBTUY4eEN6QUpCZ05WCitCQVlUQWxoWk1SY3dGUVlEVlFRSEV3NURZWE4wYkdVZ1FXNTBhSEpoZURFak1DRUdBMVVFQ2hNYVVIbDBhRzl1CitJRk52Wm5SM1lYSmxJRVp2ZFc1a1lYUnBiMjR4RWpBUUJnTlZCQU1UQ1d4dlkyRnNhRzl6ZERBZUZ3MHhNREV3CitNRGd5TXpBeE5UWmFGdzB5TURFd01EVXlNekF4TlRaYU1GOHhDekFKQmdOVkJBWVRBbGhaTVJjd0ZRWURWUVFICitFdzVEWVhOMGJHVWdRVzUwYUhKaGVERWpNQ0VHQTFVRUNoTWFVSGwwYUc5dUlGTnZablIzWVhKbElFWnZkVzVrCitZWFJwYjI0eEVqQVFCZ05WQkFNVENXeHZZMkZzYUc5emREQ0JuekFOQmdrcWhraUc5dzBCQVFFRkFBT0JqUUF3CitnWWtDZ1lFQTIxdlQ1aXNxN0Y2OGFtWXV1TnBTRmxLRFByTVVDYTRZV1lxWlJ0Mk9aKy8zTkthWjJ4QWlTd3I3Cis2TXJRRjcwdDVuTGJTUHBxRTUrNVZyUzU4U1krZy9zWExpRmQ2QXBsSDF3Slp3aDc4RG9mYkZZWFVnZ2t0Rk10CitwVHlpWDhqdFA2NmJrY1BrREFEQTA4OVJJMVRRUjZDYStuN0hGYTdjMWZhYlZWNmkzemtDQXdFQUFhTVlNQll3CitGQVlEVlIwUkJBMHdDNElKYkc5allXeG9iM04wTUEwR0NTcUdTSWIzRFFFQkJRVUFBNEdCQUhQY3RRQkVRNHdkCitCSjYrSmNwSXJhb3BMbjhCR2hiak5XajQwbW1ScVdCL05BV0Y2TTVuZTdLcEdBdTd0TGVHNGhiMXpMYWxkSzhHCitseHkyR1BTUkY2TEZTNDhkcEVqMkhiTXYybnZ2Nnh4YWxETUo5K0RpY1dnQUtUUTZiY1gyajNHVWtDUjBnL1QxCitDUmxOQkFBbHZoS3pPN0NscGY5bDBZS0JFZnJhSkJ5WAorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3NzbF9rZXkucGVtIGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3NzbF9rZXkucGVtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmZDNiYmQKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vc3NsX2tleS5wZW0KQEAgLTAsMCArMSwxNiBAQAorLS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCitNSUlDZHdJQkFEQU5CZ2txaGtpRzl3MEJBUUVGQUFTQ0FtRXdnZ0pkQWdFQUFvR0JBTnRiMCtZckt1eGV2R3BtCitMcmphVWhaU2d6NnpGQW11R0ZtS21VYmRqbWZ2OXpTbW1kc1FJa3NLKytqSzBCZTlMZVp5MjBqNmFoT2Z1VmEwCit1ZkVtUG9QN0Z5NGhYZWdLWlI5Y0NXY0llL0E2SDJ4V0YxSUlKTFJUTGFVOG9sL0k3VCt1bTVIRDVBd0F3TlBQCitVU05VMEVlZ212cCt4eFd1M05YMm0xVmVvdDg1QWdNQkFBRUNnWUEzWmRaNjczWDBvZXhGbHE3QUFtcnV0a0h0CitDTDdMdndycE9pYUJqaHlUeFRlU05XenZ0UUJrSVU4RE9JMGJJYXpBNFVyZUFGZmZ3dHZFdVBtb25EYjNGK0lxCitTTUF1NDJYY0d5VlpFbCtnSGxUUFU5WFJYN25UT1hWdCtNbFJSUnhMNnQ5R2tHZlVBWEkzWHhKRFhXM2MwdkJLCitVTDl4cUQ4Y09SWE9mRTA2clFKQkFQOG1FWDFFUmtSNjRQdHNvZTQyODF2alRsTmZJYnM3Tk1Qa1Vucm45Ti9ZCitCTGhqTklmUTNIRlpHOEJUTUxmWDdrQ1M5RDU5M0RXNXRWNFo5QlAvYzZjQ1FRRGNGekNjVkFyTmgySlN5d09RCitaZlRmUmJKZy9aNUx0OUZrbmd2MW1lZUdOUGdJTUxOOFNnNjc5cEFPT1dtemRNTzNWNzA2ck5QelNWTU1FN0U1CitvUElmQWtFQThwRGRkYXJQNXRDdlRUZ1VwbVRGYmFrbTBLb1RabTIrRnpIY25BNGpSaCtYTlRqVE92OThZNklrCitlTzVkMVpuS1hzZVd2a1puY1FneGZkbk1xcXBqNXdKQWNOcS9SVm5lMURiWWx3V2NoVDJTaTY1TVltbUo4dCtGCiswbWNzVUxxak9uRU13ZjVlK3B0cTVMendieXJIWllxNUZOazdvY3VmUHYvWlFyY1NTQytjRndKQkFLdk9KQnlTCit4NTZxeUdlWkxPUWxXUzJKUzNLSm81OVh1TEZHcWNiZ045T205eEZhNDFZYjROOU52cGxGaXZzdlpkdzNtMVEvCitTUElYUXVUOFJNUERWTlE9CistLS0tLUVORCBQUklWQVRFIEtFWS0tLS0tCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF9iYXNlX2V2ZW50cy5weSBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X2Jhc2VfZXZlbnRzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2NjA3MTcKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF9iYXNlX2V2ZW50cy5weQpAQCAtMCwwICsxLDE2NTUgQEAKKyIiIlRlc3RzIGZvciBiYXNlX2V2ZW50cy5weSIiIgorCitpbXBvcnQgZXJybm8KK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgbWF0aAoraW1wb3J0IG9zCitpbXBvcnQgc29ja2V0CitpbXBvcnQgc3lzCitpbXBvcnQgdGhyZWFkaW5nCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIHVuaXR0ZXN0IGltcG9ydCBtb2NrCisKK2ltcG9ydCBhc3luY2lvCitmcm9tIGFzeW5jaW8gaW1wb3J0IGJhc2VfZXZlbnRzCitmcm9tIGFzeW5jaW8gaW1wb3J0IGNvbnN0YW50cworZnJvbSBhc3luY2lvIGltcG9ydCB0ZXN0X3V0aWxzCit0cnk6CisgICAgZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgZnJvbSBhc3luY2lvIGltcG9ydCB0ZXN0X3N1cHBvcnQgYXMgc3VwcG9ydAordHJ5OgorICAgIGZyb20gdGVzdC5zdXBwb3J0LnNjcmlwdF9oZWxwZXIgaW1wb3J0IGFzc2VydF9weXRob25fb2sKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICB0cnk6CisgICAgICAgIGZyb20gdGVzdC5zY3JpcHRfaGVscGVyIGltcG9ydCBhc3NlcnRfcHl0aG9uX29rCisgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICBmcm9tIGFzeW5jaW8udGVzdF9zdXBwb3J0IGltcG9ydCBhc3NlcnRfcHl0aG9uX29rCisKKworTU9DS19BTlkgPSBtb2NrLkFOWQorUFkzNCA9IHN5cy52ZXJzaW9uX2luZm8gPj0gKDMsIDQpCisKKworZGVmIG1vY2tfc29ja2V0X21vZHVsZSgpOgorICAgIG1fc29ja2V0ID0gbW9jay5NYWdpY01vY2soc3BlYz1zb2NrZXQpCisgICAgZm9yIG5hbWUgaW4gKAorICAgICAgICAnQUZfSU5FVCcsICdBRl9JTkVUNicsICdBRl9VTlNQRUMnLCAnSVBQUk9UT19UQ1AnLCAnSVBQUk9UT19VRFAnLAorICAgICAgICAnU09DS19TVFJFQU0nLCAnU09DS19ER1JBTScsICdTT0xfU09DS0VUJywgJ1NPX1JFVVNFQUREUicsICdpbmV0X3B0b24nCisgICAgKToKKyAgICAgICAgaWYgaGFzYXR0cihzb2NrZXQsIG5hbWUpOgorICAgICAgICAgICAgc2V0YXR0cihtX3NvY2tldCwgbmFtZSwgZ2V0YXR0cihzb2NrZXQsIG5hbWUpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZGVsYXR0cihtX3NvY2tldCwgbmFtZSkKKworICAgIG1fc29ja2V0LnNvY2tldCA9IG1vY2suTWFnaWNNb2NrKCkKKyAgICBtX3NvY2tldC5zb2NrZXQucmV0dXJuX3ZhbHVlID0gdGVzdF91dGlscy5tb2NrX25vbmJsb2NraW5nX3NvY2tldCgpCisKKyAgICByZXR1cm4gbV9zb2NrZXQKKworCitkZWYgcGF0Y2hfc29ja2V0KGYpOgorICAgIHJldHVybiBtb2NrLnBhdGNoKCdhc3luY2lvLmJhc2VfZXZlbnRzLnNvY2tldCcsCisgICAgICAgICAgICAgICAgICAgICAgbmV3X2NhbGxhYmxlPW1vY2tfc29ja2V0X21vZHVsZSkoZikKKworCitjbGFzcyBCYXNlRXZlbnRUZXN0cyh0ZXN0X3V0aWxzLlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc3VwZXIoKS5zZXRVcCgpCisgICAgICAgIGJhc2VfZXZlbnRzLl9pcGFkZHJfaW5mby5jYWNoZV9jbGVhcigpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGJhc2VfZXZlbnRzLl9pcGFkZHJfaW5mby5jYWNoZV9jbGVhcigpCisgICAgICAgIHN1cGVyKCkudGVhckRvd24oKQorCisgICAgZGVmIHRlc3RfaXBhZGRyX2luZm8oc2VsZik6CisgICAgICAgIFVOU1BFQyA9IHNvY2tldC5BRl9VTlNQRUMKKyAgICAgICAgSU5FVCA9IHNvY2tldC5BRl9JTkVUCisgICAgICAgIElORVQ2ID0gc29ja2V0LkFGX0lORVQ2CisgICAgICAgIFNUUkVBTSA9IHNvY2tldC5TT0NLX1NUUkVBTQorICAgICAgICBER1JBTSA9IHNvY2tldC5TT0NLX0RHUkFNCisgICAgICAgIFRDUCA9IHNvY2tldC5JUFBST1RPX1RDUAorICAgICAgICBVRFAgPSBzb2NrZXQuSVBQUk9UT19VRFAKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgKElORVQsIFNUUkVBTSwgVENQLCAnJywgKCcxLjIuMy40JywgMSkpLAorICAgICAgICAgICAgYmFzZV9ldmVudHMuX2lwYWRkcl9pbmZvKCcxLjIuMy40JywgMSwgSU5FVCwgU1RSRUFNLCBUQ1ApKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAoSU5FVCwgU1RSRUFNLCBUQ1AsICcnLCAoJzEuMi4zLjQnLCAxKSksCisgICAgICAgICAgICBiYXNlX2V2ZW50cy5faXBhZGRyX2luZm8oJzEuMi4zLjQnLCAxLCBVTlNQRUMsIFNUUkVBTSwgVENQKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgKElORVQsIERHUkFNLCBVRFAsICcnLCAoJzEuMi4zLjQnLCAxKSksCisgICAgICAgICAgICBiYXNlX2V2ZW50cy5faXBhZGRyX2luZm8oJzEuMi4zLjQnLCAxLCBVTlNQRUMsIERHUkFNLCBVRFApKQorCisgICAgICAgICMgU29ja2V0IHR5cGUgU1RSRUFNIGltcGxpZXMgVENQIHByb3RvY29sLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgKElORVQsIFNUUkVBTSwgVENQLCAnJywgKCcxLjIuMy40JywgMSkpLAorICAgICAgICAgICAgYmFzZV9ldmVudHMuX2lwYWRkcl9pbmZvKCcxLjIuMy40JywgMSwgVU5TUEVDLCBTVFJFQU0sIDApKQorCisgICAgICAgICMgU29ja2V0IHR5cGUgREdSQU0gaW1wbGllcyBVRFAgcHJvdG9jb2wuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAoSU5FVCwgREdSQU0sIFVEUCwgJycsICgnMS4yLjMuNCcsIDEpKSwKKyAgICAgICAgICAgIGJhc2VfZXZlbnRzLl9pcGFkZHJfaW5mbygnMS4yLjMuNCcsIDEsIFVOU1BFQywgREdSQU0sIDApKQorCisgICAgICAgICMgTm8gc29ja2V0IHR5cGUuCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKAorICAgICAgICAgICAgYmFzZV9ldmVudHMuX2lwYWRkcl9pbmZvKCcxLjIuMy40JywgMSwgVU5TUEVDLCAwLCAwKSkKKworICAgICAgICAjIElQdjQgYWRkcmVzcyB3aXRoIGZhbWlseSBJUHY2LgorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSgKKyAgICAgICAgICAgIGJhc2VfZXZlbnRzLl9pcGFkZHJfaW5mbygnMS4yLjMuNCcsIDEsIElORVQ2LCBTVFJFQU0sIFRDUCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIChJTkVUNiwgU1RSRUFNLCBUQ1AsICcnLCAoJzo6MycsIDEpKSwKKyAgICAgICAgICAgIGJhc2VfZXZlbnRzLl9pcGFkZHJfaW5mbygnOjozJywgMSwgSU5FVDYsIFNUUkVBTSwgVENQKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgKElORVQ2LCBTVFJFQU0sIFRDUCwgJycsICgnOjozJywgMSkpLAorICAgICAgICAgICAgYmFzZV9ldmVudHMuX2lwYWRkcl9pbmZvKCc6OjMnLCAxLCBVTlNQRUMsIFNUUkVBTSwgVENQKSkKKworICAgICAgICAjIElQdjYgYWRkcmVzcyB3aXRoIGZhbWlseSBJUHY0LgorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSgKKyAgICAgICAgICAgIGJhc2VfZXZlbnRzLl9pcGFkZHJfaW5mbygnOjozJywgMSwgSU5FVCwgU1RSRUFNLCBUQ1ApKQorCisgICAgICAgICMgSVB2NiBhZGRyZXNzIHdpdGggem9uZSBpbmRleC4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIChJTkVUNiwgU1RSRUFNLCBUQ1AsICcnLCAoJzo6MyVsbzAnLCAxKSksCisgICAgICAgICAgICBiYXNlX2V2ZW50cy5faXBhZGRyX2luZm8oJzo6MyVsbzAnLCAxLCBJTkVUNiwgU1RSRUFNLCBUQ1ApKQorCisgICAgQHBhdGNoX3NvY2tldAorICAgIGRlZiB0ZXN0X2lwYWRkcl9pbmZvX25vX2luZXRfcHRvbihzZWxmLCBtX3NvY2tldCk6CisgICAgICAgIGRlbCBtX3NvY2tldC5pbmV0X3B0b24KKyAgICAgICAgc2VsZi50ZXN0X2lwYWRkcl9pbmZvKCkKKworICAgIGRlZiB0ZXN0X2NoZWNrX3Jlc29sdmVkX2FkZHJlc3Moc2VsZik6CisgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUKQorICAgICAgICB3aXRoIHNvY2s6CisgICAgICAgICAgICBiYXNlX2V2ZW50cy5fY2hlY2tfcmVzb2x2ZWRfYWRkcmVzcyhzb2NrLCAoJzEuMi4zLjQnLCAxKSkKKworICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVDYpCisgICAgICAgIHdpdGggc29jazoKKyAgICAgICAgICAgIGJhc2VfZXZlbnRzLl9jaGVja19yZXNvbHZlZF9hZGRyZXNzKHNvY2ssICgnOjozJywgMSkpCisgICAgICAgICAgICBiYXNlX2V2ZW50cy5fY2hlY2tfcmVzb2x2ZWRfYWRkcmVzcyhzb2NrLCAoJzo6MyVsbzAnLCAxKSkKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICAgICAgYmFzZV9ldmVudHMuX2NoZWNrX3Jlc29sdmVkX2FkZHJlc3Moc29jaywgKCdmb28nLCAxKSkKKworICAgIGRlZiB0ZXN0X2NoZWNrX3Jlc29sdmVkX3NvY2tfdHlwZShzZWxmKToKKyAgICAgICAgIyBFbnN1cmUgd2UgaWdub3JlIGV4dHJhIGZsYWdzIGluIHNvY2sudHlwZS4KKyAgICAgICAgaWYgaGFzYXR0cihzb2NrZXQsICdTT0NLX05PTkJMT0NLJyk6CisgICAgICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldCh0eXBlPXNvY2tldC5TT0NLX1NUUkVBTSB8IHNvY2tldC5TT0NLX05PTkJMT0NLKQorICAgICAgICAgICAgd2l0aCBzb2NrOgorICAgICAgICAgICAgICAgIGJhc2VfZXZlbnRzLl9jaGVja19yZXNvbHZlZF9hZGRyZXNzKHNvY2ssICgnMS4yLjMuNCcsIDEpKQorCisgICAgICAgIGlmIGhhc2F0dHIoc29ja2V0LCAnU09DS19DTE9FWEVDJyk6CisgICAgICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldCh0eXBlPXNvY2tldC5TT0NLX1NUUkVBTSB8IHNvY2tldC5TT0NLX0NMT0VYRUMpCisgICAgICAgICAgICB3aXRoIHNvY2s6CisgICAgICAgICAgICAgICAgYmFzZV9ldmVudHMuX2NoZWNrX3Jlc29sdmVkX2FkZHJlc3Moc29jaywgKCcxLjIuMy40JywgMSkpCisKKworY2xhc3MgQmFzZUV2ZW50TG9vcFRlc3RzKHRlc3RfdXRpbHMuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AgPSBiYXNlX2V2ZW50cy5CYXNlRXZlbnRMb29wKCkKKyAgICAgICAgc2VsZi5sb29wLl9zZWxlY3RvciA9IG1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5fc2VsZWN0b3Iuc2VsZWN0LnJldHVybl92YWx1ZSA9ICgpCisgICAgICAgIHNlbGYuc2V0X2V2ZW50X2xvb3Aoc2VsZi5sb29wKQorCisgICAgZGVmIHRlc3Rfbm90X2ltcGxlbWVudGVkKHNlbGYpOgorICAgICAgICBtID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLAorICAgICAgICAgICAgc2VsZi5sb29wLl9tYWtlX3NvY2tldF90cmFuc3BvcnQsIG0sIG0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwKKyAgICAgICAgICAgIHNlbGYubG9vcC5fbWFrZV9zc2xfdHJhbnNwb3J0LCBtLCBtLCBtLCBtKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsCisgICAgICAgICAgICBzZWxmLmxvb3AuX21ha2VfZGF0YWdyYW1fdHJhbnNwb3J0LCBtLCBtKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIHNlbGYubG9vcC5fcHJvY2Vzc19ldmVudHMsIFtdKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIHNlbGYubG9vcC5fd3JpdGVfdG9fc2VsZikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLAorICAgICAgICAgICAgc2VsZi5sb29wLl9tYWtlX3JlYWRfcGlwZV90cmFuc3BvcnQsIG0sIG0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwKKyAgICAgICAgICAgIHNlbGYubG9vcC5fbWFrZV93cml0ZV9waXBlX3RyYW5zcG9ydCwgbSwgbSkKKyAgICAgICAgZ2VuID0gc2VsZi5sb29wLl9tYWtlX3N1YnByb2Nlc3NfdHJhbnNwb3J0KG0sIG0sIG0sIG0sIG0sIG0sIG0pCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvcik6CisgICAgICAgICAgICBnZW4uc2VuZChOb25lKQorCisgICAgZGVmIHRlc3RfY2xvc2Uoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLmlzX2Nsb3NlZCgpKQorICAgICAgICBzZWxmLmxvb3AuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5sb29wLmlzX2Nsb3NlZCgpKQorCisgICAgICAgICMgaXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIGNhbGwgY2xvc2UoKSBtb3JlIHRoYW4gb25jZQorICAgICAgICBzZWxmLmxvb3AuY2xvc2UoKQorICAgICAgICBzZWxmLmxvb3AuY2xvc2UoKQorCisgICAgICAgICMgb3BlcmF0aW9uIGJsb2NrZWQgd2hlbiB0aGUgbG9vcCBpcyBjbG9zZWQKKyAgICAgICAgZiA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIHNlbGYubG9vcC5ydW5fZm9yZXZlcikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBmKQorCisgICAgZGVmIHRlc3RfX2FkZF9jYWxsYmFja19oYW5kbGUoc2VsZik6CisgICAgICAgIGggPSBhc3luY2lvLkhhbmRsZShsYW1iZGE6IEZhbHNlLCAoKSwgc2VsZi5sb29wKQorCisgICAgICAgIHNlbGYubG9vcC5fYWRkX2NhbGxiYWNrKGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLl9zY2hlZHVsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oaCwgc2VsZi5sb29wLl9yZWFkeSkKKworICAgIGRlZiB0ZXN0X19hZGRfY2FsbGJhY2tfY2FuY2VsbGVkX2hhbmRsZShzZWxmKToKKyAgICAgICAgaCA9IGFzeW5jaW8uSGFuZGxlKGxhbWJkYTogRmFsc2UsICgpLCBzZWxmLmxvb3ApCisgICAgICAgIGguY2FuY2VsKCkKKworICAgICAgICBzZWxmLmxvb3AuX2FkZF9jYWxsYmFjayhoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5fc2NoZWR1bGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5fcmVhZHkpCisKKyAgICBkZWYgdGVzdF9zZXRfZGVmYXVsdF9leGVjdXRvcihzZWxmKToKKyAgICAgICAgZXhlY3V0b3IgPSBtb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3Auc2V0X2RlZmF1bHRfZXhlY3V0b3IoZXhlY3V0b3IpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZXhlY3V0b3IsIHNlbGYubG9vcC5fZGVmYXVsdF9leGVjdXRvcikKKworICAgIGRlZiB0ZXN0X2dldG5hbWVpbmZvKHNlbGYpOgorICAgICAgICBzb2NrYWRkciA9IG1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5ydW5faW5fZXhlY3V0b3IgPSBtb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuZ2V0bmFtZWluZm8oc29ja2FkZHIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAoTm9uZSwgc29ja2V0LmdldG5hbWVpbmZvLCBzb2NrYWRkciwgMCksCisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX2luX2V4ZWN1dG9yLmNhbGxfYXJnc1swXSkKKworICAgIGRlZiB0ZXN0X2NhbGxfc29vbihzZWxmKToKKyAgICAgICAgZGVmIGNiKCk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgaCA9IHNlbGYubG9vcC5jYWxsX3Nvb24oY2IpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5fY2FsbGJhY2ssIGNiKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoaCwgYXN5bmNpby5IYW5kbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oaCwgc2VsZi5sb29wLl9yZWFkeSkKKworICAgIGRlZiB0ZXN0X2NhbGxfbGF0ZXIoc2VsZik6CisgICAgICAgIGRlZiBjYigpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGggPSBzZWxmLmxvb3AuY2FsbF9sYXRlcigxMC4wLCBjYikKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGgsIGFzeW5jaW8uVGltZXJIYW5kbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oaCwgc2VsZi5sb29wLl9zY2hlZHVsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oaCwgc2VsZi5sb29wLl9yZWFkeSkKKworICAgIGRlZiB0ZXN0X2NhbGxfbGF0ZXJfbmVnYXRpdmVfZGVsYXlzKHNlbGYpOgorICAgICAgICBjYWxscyA9IFtdCisKKyAgICAgICAgZGVmIGNiKGFyZyk6CisgICAgICAgICAgICBjYWxscy5hcHBlbmQoYXJnKQorCisgICAgICAgIHNlbGYubG9vcC5fcHJvY2Vzc19ldmVudHMgPSBtb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuY2FsbF9sYXRlcigtMSwgY2IsICdhJykKKyAgICAgICAgc2VsZi5sb29wLmNhbGxfbGF0ZXIoLTIsIGNiLCAnYicpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhbGxzLCBbJ2InLCAnYSddKQorCisgICAgZGVmIHRlc3RfdGltZV9hbmRfY2FsbF9hdChzZWxmKToKKyAgICAgICAgZGVmIGNiKCk6CisgICAgICAgICAgICBzZWxmLmxvb3Auc3RvcCgpCisKKyAgICAgICAgc2VsZi5sb29wLl9wcm9jZXNzX2V2ZW50cyA9IG1vY2suTW9jaygpCisgICAgICAgIGRlbGF5ID0gMC4xCisKKyAgICAgICAgd2hlbiA9IHNlbGYubG9vcC50aW1lKCkgKyBkZWxheQorICAgICAgICBzZWxmLmxvb3AuY2FsbF9hdCh3aGVuLCBjYikKKyAgICAgICAgdDAgPSBzZWxmLmxvb3AudGltZSgpCisgICAgICAgIHNlbGYubG9vcC5ydW5fZm9yZXZlcigpCisgICAgICAgIGR0ID0gc2VsZi5sb29wLnRpbWUoKSAtIHQwCisKKyAgICAgICAgIyA1MCBtczogbWF4aW11bSBncmFudWxhcml0eSBvZiB0aGUgZXZlbnQgbG9vcAorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChkdCwgZGVsYXkgLSAwLjA1MCwgZHQpCisgICAgICAgICMgdG9sZXJhdGUgYSBkaWZmZXJlbmNlIG9mICs4MDAgbXMgYmVjYXVzZSBzb21lIFB5dGhvbiBidWlsZGJvdHMKKyAgICAgICAgIyBhcmUgcmVhbGx5IHNsb3cKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwoZHQsIDAuOSwgZHQpCisKKyAgICBkZWYgY2hlY2tfdGhyZWFkKHNlbGYsIGxvb3AsIGRlYnVnKToKKyAgICAgICAgZGVmIGNiKCk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgbG9vcC5zZXRfZGVidWcoZGVidWcpCisgICAgICAgIGlmIGRlYnVnOgorICAgICAgICAgICAgbXNnID0gKCJOb24tdGhyZWFkLXNhZmUgb3BlcmF0aW9uIGludm9rZWQgb24gYW4gZXZlbnQgbG9vcCBvdGhlciAiCisgICAgICAgICAgICAgICAgICAidGhhbiB0aGUgY3VycmVudCBvbmUiKQorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFJ1bnRpbWVFcnJvciwgbXNnKToKKyAgICAgICAgICAgICAgICBsb29wLmNhbGxfc29vbihjYikKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChSdW50aW1lRXJyb3IsIG1zZyk6CisgICAgICAgICAgICAgICAgbG9vcC5jYWxsX2xhdGVyKDYwLCBjYikKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChSdW50aW1lRXJyb3IsIG1zZyk6CisgICAgICAgICAgICAgICAgbG9vcC5jYWxsX2F0KGxvb3AudGltZSgpICsgNjAsIGNiKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9vcC5jYWxsX3Nvb24oY2IpCisgICAgICAgICAgICBsb29wLmNhbGxfbGF0ZXIoNjAsIGNiKQorICAgICAgICAgICAgbG9vcC5jYWxsX2F0KGxvb3AudGltZSgpICsgNjAsIGNiKQorCisgICAgZGVmIHRlc3RfY2hlY2tfdGhyZWFkKHNlbGYpOgorICAgICAgICBkZWYgY2hlY2tfaW5fdGhyZWFkKGxvb3AsIGV2ZW50LCBkZWJ1ZywgY3JlYXRlX2xvb3AsIGZ1dCk6CisgICAgICAgICAgICAjIHdhaXQgdW50aWwgdGhlIGV2ZW50IGxvb3AgaXMgcnVubmluZworICAgICAgICAgICAgZXZlbnQud2FpdCgpCisKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpZiBjcmVhdGVfbG9vcDoKKyAgICAgICAgICAgICAgICAgICAgbG9vcDIgPSBiYXNlX2V2ZW50cy5CYXNlRXZlbnRMb29wKCkKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgYXN5bmNpby5zZXRfZXZlbnRfbG9vcChsb29wMikKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tfdGhyZWFkKGxvb3AsIGRlYnVnKQorICAgICAgICAgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgICAgICAgICAgYXN5bmNpby5zZXRfZXZlbnRfbG9vcChOb25lKQorICAgICAgICAgICAgICAgICAgICAgICAgbG9vcDIuY2xvc2UoKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tfdGhyZWFkKGxvb3AsIGRlYnVnKQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICAgICAgbG9vcC5jYWxsX3Nvb25fdGhyZWFkc2FmZShmdXQuc2V0X2V4Y2VwdGlvbiwgZXhjKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBsb29wLmNhbGxfc29vbl90aHJlYWRzYWZlKGZ1dC5zZXRfcmVzdWx0LCBOb25lKQorCisgICAgICAgIGRlZiB0ZXN0X3RocmVhZChsb29wLCBkZWJ1ZywgY3JlYXRlX2xvb3A9RmFsc2UpOgorICAgICAgICAgICAgZXZlbnQgPSB0aHJlYWRpbmcuRXZlbnQoKQorICAgICAgICAgICAgZnV0ID0gYXN5bmNpby5GdXR1cmUobG9vcD1sb29wKQorICAgICAgICAgICAgbG9vcC5jYWxsX3Nvb24oZXZlbnQuc2V0KQorICAgICAgICAgICAgYXJncyA9IChsb29wLCBldmVudCwgZGVidWcsIGNyZWF0ZV9sb29wLCBmdXQpCisgICAgICAgICAgICB0aHJlYWQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1jaGVja19pbl90aHJlYWQsIGFyZ3M9YXJncykKKyAgICAgICAgICAgIHRocmVhZC5zdGFydCgpCisgICAgICAgICAgICBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmdXQpCisgICAgICAgICAgICB0aHJlYWQuam9pbigpCisKKyAgICAgICAgc2VsZi5sb29wLl9wcm9jZXNzX2V2ZW50cyA9IG1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5fd3JpdGVfdG9fc2VsZiA9IG1vY2suTW9jaygpCisKKyAgICAgICAgIyByYWlzZSBSdW50aW1lRXJyb3IgaWYgdGhlIHRocmVhZCBoYXMgbm8gZXZlbnQgbG9vcAorICAgICAgICB0ZXN0X3RocmVhZChzZWxmLmxvb3AsIFRydWUpCisKKyAgICAgICAgIyBjaGVjayBkaXNhYmxlZCBpZiBkZWJ1ZyBtb2RlIGlzIGRpc2FibGVkCisgICAgICAgIHRlc3RfdGhyZWFkKHNlbGYubG9vcCwgRmFsc2UpCisKKyAgICAgICAgIyByYWlzZSBSdW50aW1lRXJyb3IgaWYgdGhlIGV2ZW50IGxvb3Agb2YgdGhlIHRocmVhZCBpcyBub3QgdGhlIGNhbGxlZAorICAgICAgICAjIGV2ZW50IGxvb3AKKyAgICAgICAgdGVzdF90aHJlYWQoc2VsZi5sb29wLCBUcnVlLCBjcmVhdGVfbG9vcD1UcnVlKQorCisgICAgICAgICMgY2hlY2sgZGlzYWJsZWQgaWYgZGVidWcgbW9kZSBpcyBkaXNhYmxlZAorICAgICAgICB0ZXN0X3RocmVhZChzZWxmLmxvb3AsIEZhbHNlLCBjcmVhdGVfbG9vcD1UcnVlKQorCisgICAgZGVmIHRlc3RfcnVuX29uY2VfaW5fZXhlY3V0b3JfaGFuZGxlKHNlbGYpOgorICAgICAgICBkZWYgY2IoKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIEFzc2VydGlvbkVycm9yLCBzZWxmLmxvb3AucnVuX2luX2V4ZWN1dG9yLAorICAgICAgICAgICAgTm9uZSwgYXN5bmNpby5IYW5kbGUoY2IsICgpLCBzZWxmLmxvb3ApLCAoJycsKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBBc3NlcnRpb25FcnJvciwgc2VsZi5sb29wLnJ1bl9pbl9leGVjdXRvciwKKyAgICAgICAgICAgIE5vbmUsIGFzeW5jaW8uVGltZXJIYW5kbGUoMTAsIGNiLCAoKSwgc2VsZi5sb29wKSkKKworICAgIGRlZiB0ZXN0X3J1bl9vbmNlX2luX2V4ZWN1dG9yX2NhbmNlbGxlZChzZWxmKToKKyAgICAgICAgZGVmIGNiKCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGggPSBhc3luY2lvLkhhbmRsZShjYiwgKCksIHNlbGYubG9vcCkKKyAgICAgICAgaC5jYW5jZWwoKQorCisgICAgICAgIGYgPSBzZWxmLmxvb3AucnVuX2luX2V4ZWN1dG9yKE5vbmUsIGgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmLCBhc3luY2lvLkZ1dHVyZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShmLnJlc3VsdCgpKQorCisgICAgZGVmIHRlc3RfcnVuX29uY2VfaW5fZXhlY3V0b3JfcGxhaW4oc2VsZik6CisgICAgICAgIGRlZiBjYigpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBoID0gYXN5bmNpby5IYW5kbGUoY2IsICgpLCBzZWxmLmxvb3ApCisgICAgICAgIGYgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZXhlY3V0b3IgPSBtb2NrLk1vY2soKQorICAgICAgICBleGVjdXRvci5zdWJtaXQucmV0dXJuX3ZhbHVlID0gZgorCisgICAgICAgIHNlbGYubG9vcC5zZXRfZGVmYXVsdF9leGVjdXRvcihleGVjdXRvcikKKworICAgICAgICByZXMgPSBzZWxmLmxvb3AucnVuX2luX2V4ZWN1dG9yKE5vbmUsIGgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZiwgcmVzKQorCisgICAgICAgIGV4ZWN1dG9yID0gbW9jay5Nb2NrKCkKKyAgICAgICAgZXhlY3V0b3Iuc3VibWl0LnJldHVybl92YWx1ZSA9IGYKKyAgICAgICAgcmVzID0gc2VsZi5sb29wLnJ1bl9pbl9leGVjdXRvcihleGVjdXRvciwgaCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhmLCByZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShleGVjdXRvci5zdWJtaXQuY2FsbGVkKQorCisgICAgICAgIGYuY2FuY2VsKCkgICMgRG9uJ3QgY29tcGxhaW4gYWJvdXQgYWJhbmRvbmVkIEZ1dHVyZS4KKworICAgIGRlZiB0ZXN0X19ydW5fb25jZShzZWxmKToKKyAgICAgICAgaDEgPSBhc3luY2lvLlRpbWVySGFuZGxlKHRpbWUubW9ub3RvbmljKCkgKyA1LjAsIGxhbWJkYTogVHJ1ZSwgKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxvb3ApCisgICAgICAgIGgyID0gYXN5bmNpby5UaW1lckhhbmRsZSh0aW1lLm1vbm90b25pYygpICsgMTAuMCwgbGFtYmRhOiBUcnVlLCAoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9vcCkKKworICAgICAgICBoMS5jYW5jZWwoKQorCisgICAgICAgIHNlbGYubG9vcC5fcHJvY2Vzc19ldmVudHMgPSBtb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuX3NjaGVkdWxlZC5hcHBlbmQoaDEpCisgICAgICAgIHNlbGYubG9vcC5fc2NoZWR1bGVkLmFwcGVuZChoMikKKyAgICAgICAgc2VsZi5sb29wLl9ydW5fb25jZSgpCisKKyAgICAgICAgdCA9IHNlbGYubG9vcC5fc2VsZWN0b3Iuc2VsZWN0LmNhbGxfYXJnc1swXVswXQorICAgICAgICBzZWxmLmFzc2VydFRydWUoOS41IDwgdCA8IDEwLjUsIHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW2gyXSwgc2VsZi5sb29wLl9zY2hlZHVsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmxvb3AuX3Byb2Nlc3NfZXZlbnRzLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X3NldF9kZWJ1ZyhzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLnNldF9kZWJ1ZyhUcnVlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5sb29wLmdldF9kZWJ1ZygpKQorICAgICAgICBzZWxmLmxvb3Auc2V0X2RlYnVnKEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5nZXRfZGVidWcoKSkKKworICAgIEBtb2NrLnBhdGNoKCdhc3luY2lvLmJhc2VfZXZlbnRzLmxvZ2dlcicpCisgICAgZGVmIHRlc3RfX3J1bl9vbmNlX2xvZ2dpbmcoc2VsZiwgbV9sb2dnZXIpOgorICAgICAgICBkZWYgc2xvd19zZWxlY3QodGltZW91dCk6CisgICAgICAgICAgICAjIFNsZWVwIGEgYml0IGxvbmdlciB0aGFuIGEgc2Vjb25kIHRvIGF2b2lkIHRpbWVyIHJlc29sdXRpb24KKyAgICAgICAgICAgICMgaXNzdWVzLgorICAgICAgICAgICAgdGltZS5zbGVlcCgxLjEpCisgICAgICAgICAgICByZXR1cm4gW10KKworICAgICAgICAjIGxvZ2dpbmcgbmVlZHMgZGVidWcgZmxhZworICAgICAgICBzZWxmLmxvb3Auc2V0X2RlYnVnKFRydWUpCisKKyAgICAgICAgIyBMb2cgdG8gSU5GTyBsZXZlbCBpZiB0aW1lb3V0ID4gMS4wIHNlYy4KKyAgICAgICAgc2VsZi5sb29wLl9zZWxlY3Rvci5zZWxlY3QgPSBzbG93X3NlbGVjdAorICAgICAgICBzZWxmLmxvb3AuX3Byb2Nlc3NfZXZlbnRzID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLl9ydW5fb25jZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9nZ2luZy5JTkZPLCBtX2xvZ2dlci5sb2cuY2FsbF9hcmdzWzBdWzBdKQorCisgICAgICAgIGRlZiBmYXN0X3NlbGVjdCh0aW1lb3V0KToKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4wMDEpCisgICAgICAgICAgICByZXR1cm4gW10KKworICAgICAgICBzZWxmLmxvb3AuX3NlbGVjdG9yLnNlbGVjdCA9IGZhc3Rfc2VsZWN0CisgICAgICAgIHNlbGYubG9vcC5fcnVuX29uY2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvZ2dpbmcuREVCVUcsIG1fbG9nZ2VyLmxvZy5jYWxsX2FyZ3NbMF1bMF0pCisKKyAgICBkZWYgdGVzdF9fcnVuX29uY2Vfc2NoZWR1bGVfaGFuZGxlKHNlbGYpOgorICAgICAgICBoYW5kbGUgPSBOb25lCisgICAgICAgIHByb2Nlc3NlZCA9IEZhbHNlCisKKyAgICAgICAgZGVmIGNiKGxvb3ApOgorICAgICAgICAgICAgbm9ubG9jYWwgcHJvY2Vzc2VkLCBoYW5kbGUKKyAgICAgICAgICAgIHByb2Nlc3NlZCA9IFRydWUKKyAgICAgICAgICAgIGhhbmRsZSA9IGxvb3AuY2FsbF9zb29uKGxhbWJkYTogVHJ1ZSkKKworICAgICAgICBoID0gYXN5bmNpby5UaW1lckhhbmRsZSh0aW1lLm1vbm90b25pYygpIC0gMSwgY2IsIChzZWxmLmxvb3AsKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sb29wKQorCisgICAgICAgIHNlbGYubG9vcC5fcHJvY2Vzc19ldmVudHMgPSBtb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuX3NjaGVkdWxlZC5hcHBlbmQoaCkKKyAgICAgICAgc2VsZi5sb29wLl9ydW5fb25jZSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHByb2Nlc3NlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbaGFuZGxlXSwgbGlzdChzZWxmLmxvb3AuX3JlYWR5KSkKKworICAgIGRlZiB0ZXN0X19ydW5fb25jZV9jYW5jZWxsZWRfZXZlbnRfY2xlYW51cChzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLl9wcm9jZXNzX2V2ZW50cyA9IG1vY2suTW9jaygpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKAorICAgICAgICAgICAgMCA8IGJhc2VfZXZlbnRzLl9NSU5fQ0FOQ0VMTEVEX1RJTUVSX0hBTkRMRVNfRlJBQ1RJT04gPCAxLjApCisKKyAgICAgICAgZGVmIGNiKCk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgIyBTZXQgdXAgb25lICJibG9ja2luZyIgZXZlbnQgdGhhdCB3aWxsIG5vdCBiZSBjYW5jZWxsZWQgdG8KKyAgICAgICAgIyBlbnN1cmUgbGF0ZXIgY2FuY2VsbGVkIGV2ZW50cyBkbyBub3QgbWFrZSBpdCB0byB0aGUgaGVhZAorICAgICAgICAjIG9mIHRoZSBxdWV1ZSBhbmQgZ2V0IGNsZWFuZWQuCisgICAgICAgIG5vdF9jYW5jZWxsZWRfY291bnQgPSAxCisgICAgICAgIHNlbGYubG9vcC5jYWxsX2xhdGVyKDMwMDAsIGNiKQorCisgICAgICAgICMgQWRkIGxlc3MgdGhhbiB0aHJlc2hvbGQgKGJhc2VfZXZlbnRzLl9NSU5fU0NIRURVTEVEX1RJTUVSX0hBTkRMRVMpCisgICAgICAgICMgY2FuY2VsbGVkIGhhbmRsZXMsIGVuc3VyZSB0aGV5IGFyZW4ndCByZW1vdmVkCisKKyAgICAgICAgY2FuY2VsbGVkX2NvdW50ID0gMgorICAgICAgICBmb3IgeCBpbiByYW5nZSgyKToKKyAgICAgICAgICAgIGggPSBzZWxmLmxvb3AuY2FsbF9sYXRlcigzNjAwLCBjYikKKyAgICAgICAgICAgIGguY2FuY2VsKCkKKworICAgICAgICAjIEFkZCBzb21lIGNhbmNlbGxlZCBldmVudHMgdGhhdCB3aWxsIGJlIGF0IGhlYWQgYW5kIHJlbW92ZWQKKyAgICAgICAgY2FuY2VsbGVkX2NvdW50ICs9IDIKKyAgICAgICAgZm9yIHggaW4gcmFuZ2UoMik6CisgICAgICAgICAgICBoID0gc2VsZi5sb29wLmNhbGxfbGF0ZXIoMTAwLCBjYikKKyAgICAgICAgICAgIGguY2FuY2VsKCkKKworICAgICAgICAjIFRoaXMgdGVzdCBpcyBpbnZhbGlkIGlmIF9NSU5fU0NIRURVTEVEX1RJTUVSX0hBTkRMRVMgaXMgdG9vIGxvdworICAgICAgICBzZWxmLmFzc2VydExlc3NFcXVhbChjYW5jZWxsZWRfY291bnQgKyBub3RfY2FuY2VsbGVkX2NvdW50LAorICAgICAgICAgICAgYmFzZV9ldmVudHMuX01JTl9TQ0hFRFVMRURfVElNRVJfSEFORExFUykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9vcC5fdGltZXJfY2FuY2VsbGVkX2NvdW50LCBjYW5jZWxsZWRfY291bnQpCisKKyAgICAgICAgc2VsZi5sb29wLl9ydW5fb25jZSgpCisKKyAgICAgICAgY2FuY2VsbGVkX2NvdW50IC09IDIKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9vcC5fdGltZXJfY2FuY2VsbGVkX2NvdW50LCBjYW5jZWxsZWRfY291bnQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5sb29wLl9zY2hlZHVsZWQpLAorICAgICAgICAgICAgY2FuY2VsbGVkX2NvdW50ICsgbm90X2NhbmNlbGxlZF9jb3VudCkKKworICAgICAgICAjIE5lZWQgZW5vdWdoIGV2ZW50cyB0byBwYXNzIF9NSU5fQ0FOQ0VMTEVEX1RJTUVSX0hBTkRMRVNfRlJBQ1RJT04KKyAgICAgICAgIyBzbyB0aGF0IGRlbGV0aW9uIG9mIGNhbmNlbGxlZCBldmVudHMgd2lsbCBvY2N1ciBvbiBuZXh0IF9ydW5fb25jZQorICAgICAgICBhZGRfY2FuY2VsX2NvdW50ID0gaW50KG1hdGguY2VpbCgKKyAgICAgICAgICAgIGJhc2VfZXZlbnRzLl9NSU5fU0NIRURVTEVEX1RJTUVSX0hBTkRMRVMgKgorICAgICAgICAgICAgYmFzZV9ldmVudHMuX01JTl9DQU5DRUxMRURfVElNRVJfSEFORExFU19GUkFDVElPTikpICsgMQorCisgICAgICAgIGFkZF9ub3RfY2FuY2VsX2NvdW50ID0gbWF4KGJhc2VfZXZlbnRzLl9NSU5fU0NIRURVTEVEX1RJTUVSX0hBTkRMRVMgLQorICAgICAgICAgICAgYWRkX2NhbmNlbF9jb3VudCwgMCkKKworICAgICAgICAjIEFkZCBzb21lIGV2ZW50cyB0aGF0IHdpbGwgbm90IGJlIGNhbmNlbGxlZAorICAgICAgICBub3RfY2FuY2VsbGVkX2NvdW50ICs9IGFkZF9ub3RfY2FuY2VsX2NvdW50CisgICAgICAgIGZvciB4IGluIHJhbmdlKGFkZF9ub3RfY2FuY2VsX2NvdW50KToKKyAgICAgICAgICAgIHNlbGYubG9vcC5jYWxsX2xhdGVyKDM2MDAsIGNiKQorCisgICAgICAgICMgQWRkIGVub3VnaCBjYW5jZWxsZWQgZXZlbnRzCisgICAgICAgIGNhbmNlbGxlZF9jb3VudCArPSBhZGRfY2FuY2VsX2NvdW50CisgICAgICAgIGZvciB4IGluIHJhbmdlKGFkZF9jYW5jZWxfY291bnQpOgorICAgICAgICAgICAgaCA9IHNlbGYubG9vcC5jYWxsX2xhdGVyKDM2MDAsIGNiKQorICAgICAgICAgICAgaC5jYW5jZWwoKQorCisgICAgICAgICMgRW5zdXJlIGFsbCBoYW5kbGVzIGFyZSBzdGlsbCBzY2hlZHVsZWQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5sb29wLl9zY2hlZHVsZWQpLAorICAgICAgICAgICAgY2FuY2VsbGVkX2NvdW50ICsgbm90X2NhbmNlbGxlZF9jb3VudCkKKworICAgICAgICBzZWxmLmxvb3AuX3J1bl9vbmNlKCkKKworICAgICAgICAjIEVuc3VyZSBjYW5jZWxsZWQgZXZlbnRzIHdlcmUgcmVtb3ZlZAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLmxvb3AuX3NjaGVkdWxlZCksIG5vdF9jYW5jZWxsZWRfY291bnQpCisKKyAgICAgICAgIyBFbnN1cmUgb25seSB1bmNhbmNlbGxlZCBldmVudHMgcmVtYWluIHNjaGVkdWxlZAorICAgICAgICBzZWxmLmFzc2VydFRydWUoYWxsKFtub3QgeC5fY2FuY2VsbGVkIGZvciB4IGluIHNlbGYubG9vcC5fc2NoZWR1bGVkXSkpCisKKyAgICBkZWYgdGVzdF9ydW5fdW50aWxfY29tcGxldGVfdHlwZV9lcnJvcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLAorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgJ2JsYWgnKQorCisgICAgZGVmIHRlc3RfcnVuX3VudGlsX2NvbXBsZXRlX2xvb3Aoc2VsZik6CisgICAgICAgIHRhc2sgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgb3RoZXJfbG9vcCA9IHNlbGYubmV3X3Rlc3RfbG9vcCgpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvdGhlcl9sb29wLmNsb3NlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLAorICAgICAgICAgICAgb3RoZXJfbG9vcC5ydW5fdW50aWxfY29tcGxldGUsIHRhc2spCisKKyAgICBkZWYgdGVzdF9zdWJwcm9jZXNzX2V4ZWNfaW52YWxpZF9hcmdzKHNlbGYpOgorICAgICAgICBhcmdzID0gW3N5cy5leGVjdXRhYmxlLCAnLWMnLCAncGFzcyddCisKKyAgICAgICAgIyBtaXNzaW5nIHByb2dyYW0gcGFyYW1ldGVyIChlbXB0eSBhcmdzKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsCisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBzZWxmLmxvb3Auc3VicHJvY2Vzc19leGVjLAorICAgICAgICAgICAgYXN5bmNpby5TdWJwcm9jZXNzUHJvdG9jb2wpCisKKyAgICAgICAgIyBleHBlY3RlZCBtdWx0aXBsZSBhcmd1bWVudHMsIG5vdCBhIGxpc3QKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLAorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgc2VsZi5sb29wLnN1YnByb2Nlc3NfZXhlYywKKyAgICAgICAgICAgIGFzeW5jaW8uU3VicHJvY2Vzc1Byb3RvY29sLCBhcmdzKQorCisgICAgICAgICMgcHJvZ3JhbSBhcmd1bWVudHMgbXVzdCBiZSBzdHJpbmdzLCBub3QgaW50CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIHNlbGYubG9vcC5zdWJwcm9jZXNzX2V4ZWMsCisgICAgICAgICAgICBhc3luY2lvLlN1YnByb2Nlc3NQcm90b2NvbCwgc3lzLmV4ZWN1dGFibGUsIDEyMykKKworICAgICAgICAjIHVuaXZlcnNhbF9uZXdsaW5lcywgc2hlbGwsIGJ1ZnNpemUgbXVzdCBub3QgYmUgc2V0CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgc2VsZi5sb29wLnN1YnByb2Nlc3NfZXhlYywKKyAgICAgICAgICAgIGFzeW5jaW8uU3VicHJvY2Vzc1Byb3RvY29sLCAqYXJncywgdW5pdmVyc2FsX25ld2xpbmVzPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIHNlbGYubG9vcC5zdWJwcm9jZXNzX2V4ZWMsCisgICAgICAgICAgICBhc3luY2lvLlN1YnByb2Nlc3NQcm90b2NvbCwgKmFyZ3MsIHNoZWxsPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIHNlbGYubG9vcC5zdWJwcm9jZXNzX2V4ZWMsCisgICAgICAgICAgICBhc3luY2lvLlN1YnByb2Nlc3NQcm90b2NvbCwgKmFyZ3MsIGJ1ZnNpemU9NDA5NikKKworICAgIGRlZiB0ZXN0X3N1YnByb2Nlc3Nfc2hlbGxfaW52YWxpZF9hcmdzKHNlbGYpOgorICAgICAgICAjIGV4cGVjdGVkIGEgc3RyaW5nLCBub3QgYW4gaW50IG9yIGEgbGlzdAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsCisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBzZWxmLmxvb3Auc3VicHJvY2Vzc19zaGVsbCwKKyAgICAgICAgICAgIGFzeW5jaW8uU3VicHJvY2Vzc1Byb3RvY29sLCAxMjMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIHNlbGYubG9vcC5zdWJwcm9jZXNzX3NoZWxsLAorICAgICAgICAgICAgYXN5bmNpby5TdWJwcm9jZXNzUHJvdG9jb2wsIFtzeXMuZXhlY3V0YWJsZSwgJy1jJywgJ3Bhc3MnXSkKKworICAgICAgICAjIHVuaXZlcnNhbF9uZXdsaW5lcywgc2hlbGwsIGJ1ZnNpemUgbXVzdCBub3QgYmUgc2V0CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIHNlbGYubG9vcC5zdWJwcm9jZXNzX3NoZWxsLAorICAgICAgICAgICAgYXN5bmNpby5TdWJwcm9jZXNzUHJvdG9jb2wsICdleGl0IDAnLCB1bml2ZXJzYWxfbmV3bGluZXM9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLAorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgc2VsZi5sb29wLnN1YnByb2Nlc3Nfc2hlbGwsCisgICAgICAgICAgICBhc3luY2lvLlN1YnByb2Nlc3NQcm90b2NvbCwgJ2V4aXQgMCcsIHNoZWxsPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIHNlbGYubG9vcC5zdWJwcm9jZXNzX3NoZWxsLAorICAgICAgICAgICAgYXN5bmNpby5TdWJwcm9jZXNzUHJvdG9jb2wsICdleGl0IDAnLCBidWZzaXplPTQwOTYpCisKKyAgICBkZWYgdGVzdF9kZWZhdWx0X2V4Y19oYW5kbGVyX2NhbGxiYWNrKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuX3Byb2Nlc3NfZXZlbnRzID0gbW9jay5Nb2NrKCkKKworICAgICAgICBkZWYgemVyb19lcnJvcihmdXQpOgorICAgICAgICAgICAgZnV0LnNldF9yZXN1bHQoVHJ1ZSkKKyAgICAgICAgICAgIDEvMAorCisgICAgICAgICMgVGVzdCBjYWxsX3Nvb24gKGV2ZW50cy5IYW5kbGUpCisgICAgICAgIHdpdGggbW9jay5wYXRjaCgnYXN5bmNpby5iYXNlX2V2ZW50cy5sb2dnZXInKSBhcyBsb2c6CisgICAgICAgICAgICBmdXQgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgICAgIHNlbGYubG9vcC5jYWxsX3Nvb24oemVyb19lcnJvciwgZnV0KQorICAgICAgICAgICAgZnV0LmFkZF9kb25lX2NhbGxiYWNrKGxhbWJkYSBmdXQ6IHNlbGYubG9vcC5zdG9wKCkpCisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX2ZvcmV2ZXIoKQorICAgICAgICAgICAgbG9nLmVycm9yLmFzc2VydF9jYWxsZWRfd2l0aCgKKyAgICAgICAgICAgICAgICB0ZXN0X3V0aWxzLk1vY2tQYXR0ZXJuKCdFeGNlcHRpb24gaW4gY2FsbGJhY2suKnplcm8nKSwKKyAgICAgICAgICAgICAgICBleGNfaW5mbz0oWmVyb0RpdmlzaW9uRXJyb3IsIE1PQ0tfQU5ZLCBNT0NLX0FOWSkpCisKKyAgICAgICAgIyBUZXN0IGNhbGxfbGF0ZXIgKGV2ZW50cy5UaW1lckhhbmRsZSkKKyAgICAgICAgd2l0aCBtb2NrLnBhdGNoKCdhc3luY2lvLmJhc2VfZXZlbnRzLmxvZ2dlcicpIGFzIGxvZzoKKyAgICAgICAgICAgIGZ1dCA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICAgICAgc2VsZi5sb29wLmNhbGxfbGF0ZXIoMC4wMSwgemVyb19lcnJvciwgZnV0KQorICAgICAgICAgICAgZnV0LmFkZF9kb25lX2NhbGxiYWNrKGxhbWJkYSBmdXQ6IHNlbGYubG9vcC5zdG9wKCkpCisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX2ZvcmV2ZXIoKQorICAgICAgICAgICAgbG9nLmVycm9yLmFzc2VydF9jYWxsZWRfd2l0aCgKKyAgICAgICAgICAgICAgICB0ZXN0X3V0aWxzLk1vY2tQYXR0ZXJuKCdFeGNlcHRpb24gaW4gY2FsbGJhY2suKnplcm8nKSwKKyAgICAgICAgICAgICAgICBleGNfaW5mbz0oWmVyb0RpdmlzaW9uRXJyb3IsIE1PQ0tfQU5ZLCBNT0NLX0FOWSkpCisKKyAgICBkZWYgdGVzdF9kZWZhdWx0X2V4Y19oYW5kbGVyX2Nvcm8oc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5fcHJvY2Vzc19ldmVudHMgPSBtb2NrLk1vY2soKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgemVyb19lcnJvcl9jb3JvKCk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIGFzeW5jaW8uc2xlZXAoMC4wMSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgICAgICAxLzAKKworICAgICAgICAjIFRlc3QgRnV0dXJlLl9fZGVsX18KKyAgICAgICAgd2l0aCBtb2NrLnBhdGNoKCdhc3luY2lvLmJhc2VfZXZlbnRzLmxvZ2dlcicpIGFzIGxvZzoKKyAgICAgICAgICAgIGZ1dCA9IGFzeW5jaW8uZW5zdXJlX2Z1dHVyZSh6ZXJvX2Vycm9yX2Nvcm8oKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgICAgICBmdXQuYWRkX2RvbmVfY2FsbGJhY2sobGFtYmRhICphcmdzOiBzZWxmLmxvb3Auc3RvcCgpKQorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl9mb3JldmVyKCkKKyAgICAgICAgICAgIGZ1dCA9IE5vbmUgIyBUcmlnZ2VyIEZ1dHVyZS5fX2RlbF9fIG9yIGZ1dHVyZXMuX1RyYWNlYmFja0xvZ2dlcgorICAgICAgICAgICAgaWYgUFkzNDoKKyAgICAgICAgICAgICAgICAjIEZ1dHVyZS5fX2RlbF9fIGluIFB5dGhvbiAzLjQgbG9ncyBlcnJvciB3aXRoCisgICAgICAgICAgICAgICAgIyBhbiBhY3R1YWwgZXhjZXB0aW9uIGNvbnRleHQKKyAgICAgICAgICAgICAgICBsb2cuZXJyb3IuYXNzZXJ0X2NhbGxlZF93aXRoKAorICAgICAgICAgICAgICAgICAgICB0ZXN0X3V0aWxzLk1vY2tQYXR0ZXJuKCcuKmV4Y2VwdGlvbiB3YXMgbmV2ZXIgcmV0cmlldmVkJyksCisgICAgICAgICAgICAgICAgICAgIGV4Y19pbmZvPShaZXJvRGl2aXNpb25FcnJvciwgTU9DS19BTlksIE1PQ0tfQU5ZKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBmdXR1cmVzLl9UcmFjZWJhY2tMb2dnZXIgbG9ncyBvbmx5IHRleHR1YWwgdHJhY2ViYWNrCisgICAgICAgICAgICAgICAgbG9nLmVycm9yLmFzc2VydF9jYWxsZWRfd2l0aCgKKyAgICAgICAgICAgICAgICAgICAgdGVzdF91dGlscy5Nb2NrUGF0dGVybigKKyAgICAgICAgICAgICAgICAgICAgICAgICcuKmV4Y2VwdGlvbiB3YXMgbmV2ZXIgcmV0cmlldmVkLipaZXJvRGl2JyksCisgICAgICAgICAgICAgICAgICAgIGV4Y19pbmZvPUZhbHNlKQorCisgICAgZGVmIHRlc3Rfc2V0X2V4Y19oYW5kbGVyX2ludmFsaWQoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUeXBlRXJyb3IsICdBIGNhbGxhYmxlIG9iamVjdCBvciBOb25lJyk6CisgICAgICAgICAgICBzZWxmLmxvb3Auc2V0X2V4Y2VwdGlvbl9oYW5kbGVyKCdzcGFtJykKKworICAgIGRlZiB0ZXN0X3NldF9leGNfaGFuZGxlcl9jdXN0b20oc2VsZik6CisgICAgICAgIGRlZiB6ZXJvX2Vycm9yKCk6CisgICAgICAgICAgICAxLzAKKworICAgICAgICBkZWYgcnVuX2xvb3AoKToKKyAgICAgICAgICAgIGhhbmRsZSA9IHNlbGYubG9vcC5jYWxsX3Nvb24oemVyb19lcnJvcikKKyAgICAgICAgICAgIHNlbGYubG9vcC5fcnVuX29uY2UoKQorICAgICAgICAgICAgcmV0dXJuIGhhbmRsZQorCisgICAgICAgIHNlbGYubG9vcC5zZXRfZGVidWcoVHJ1ZSkKKyAgICAgICAgc2VsZi5sb29wLl9wcm9jZXNzX2V2ZW50cyA9IG1vY2suTW9jaygpCisKKyAgICAgICAgbW9ja19oYW5kbGVyID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLnNldF9leGNlcHRpb25faGFuZGxlcihtb2NrX2hhbmRsZXIpCisgICAgICAgIGhhbmRsZSA9IHJ1bl9sb29wKCkKKyAgICAgICAgbW9ja19oYW5kbGVyLmFzc2VydF9jYWxsZWRfd2l0aChzZWxmLmxvb3AsIHsKKyAgICAgICAgICAgICdleGNlcHRpb24nOiBNT0NLX0FOWSwKKyAgICAgICAgICAgICdtZXNzYWdlJzogdGVzdF91dGlscy5Nb2NrUGF0dGVybigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0V4Y2VwdGlvbiBpbiBjYWxsYmFjay4qemVyb19lcnJvcicpLAorICAgICAgICAgICAgJ2hhbmRsZSc6IGhhbmRsZSwKKyAgICAgICAgICAgICdzb3VyY2VfdHJhY2ViYWNrJzogaGFuZGxlLl9zb3VyY2VfdHJhY2ViYWNrLAorICAgICAgICB9KQorICAgICAgICBtb2NrX2hhbmRsZXIucmVzZXRfbW9jaygpCisKKyAgICAgICAgc2VsZi5sb29wLnNldF9leGNlcHRpb25faGFuZGxlcihOb25lKQorICAgICAgICB3aXRoIG1vY2sucGF0Y2goJ2FzeW5jaW8uYmFzZV9ldmVudHMubG9nZ2VyJykgYXMgbG9nOgorICAgICAgICAgICAgcnVuX2xvb3AoKQorICAgICAgICAgICAgbG9nLmVycm9yLmFzc2VydF9jYWxsZWRfd2l0aCgKKyAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfdXRpbHMuTW9ja1BhdHRlcm4oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdFeGNlcHRpb24gaW4gY2FsbGJhY2suKnplcm8nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y19pbmZvPShaZXJvRGl2aXNpb25FcnJvciwgTU9DS19BTlksIE1PQ0tfQU5ZKSkKKworICAgICAgICBhc3NlcnQgbm90IG1vY2tfaGFuZGxlci5jYWxsZWQKKworICAgIGRlZiB0ZXN0X3NldF9leGNfaGFuZGxlcl9icm9rZW4oc2VsZik6CisgICAgICAgIGRlZiBydW5fbG9vcCgpOgorICAgICAgICAgICAgZGVmIHplcm9fZXJyb3IoKToKKyAgICAgICAgICAgICAgICAxLzAKKyAgICAgICAgICAgIHNlbGYubG9vcC5jYWxsX3Nvb24oemVyb19lcnJvcikKKyAgICAgICAgICAgIHNlbGYubG9vcC5fcnVuX29uY2UoKQorCisgICAgICAgIGRlZiBoYW5kbGVyKGxvb3AsIGNvbnRleHQpOgorICAgICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IoJ3NwYW0nKQorCisgICAgICAgIHNlbGYubG9vcC5fcHJvY2Vzc19ldmVudHMgPSBtb2NrLk1vY2soKQorCisgICAgICAgIHNlbGYubG9vcC5zZXRfZXhjZXB0aW9uX2hhbmRsZXIoaGFuZGxlcikKKworICAgICAgICB3aXRoIG1vY2sucGF0Y2goJ2FzeW5jaW8uYmFzZV9ldmVudHMubG9nZ2VyJykgYXMgbG9nOgorICAgICAgICAgICAgcnVuX2xvb3AoKQorICAgICAgICAgICAgbG9nLmVycm9yLmFzc2VydF9jYWxsZWRfd2l0aCgKKyAgICAgICAgICAgICAgICB0ZXN0X3V0aWxzLk1vY2tQYXR0ZXJuKAorICAgICAgICAgICAgICAgICAgICAnVW5oYW5kbGVkIGVycm9yIGluIGV4Y2VwdGlvbiBoYW5kbGVyJyksCisgICAgICAgICAgICAgICAgZXhjX2luZm89KEF0dHJpYnV0ZUVycm9yLCBNT0NLX0FOWSwgTU9DS19BTlkpKQorCisgICAgZGVmIHRlc3RfZGVmYXVsdF9leGNfaGFuZGxlcl9icm9rZW4oc2VsZik6CisgICAgICAgIF9jb250ZXh0ID0gTm9uZQorCisgICAgICAgIGNsYXNzIExvb3AoYmFzZV9ldmVudHMuQmFzZUV2ZW50TG9vcCk6CisKKyAgICAgICAgICAgIF9zZWxlY3RvciA9IG1vY2suTW9jaygpCisgICAgICAgICAgICBfcHJvY2Vzc19ldmVudHMgPSBtb2NrLk1vY2soKQorCisgICAgICAgICAgICBkZWYgZGVmYXVsdF9leGNlcHRpb25faGFuZGxlcihzZWxmLCBjb250ZXh0KToKKyAgICAgICAgICAgICAgICBub25sb2NhbCBfY29udGV4dAorICAgICAgICAgICAgICAgIF9jb250ZXh0ID0gY29udGV4dAorICAgICAgICAgICAgICAgICMgU2ltdWxhdGVzIGN1c3RvbSBidWdneSAiZGVmYXVsdF9leGNlcHRpb25faGFuZGxlciIKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdzcGFtJykKKworICAgICAgICBsb29wID0gTG9vcCgpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChsb29wLmNsb3NlKQorICAgICAgICBhc3luY2lvLnNldF9ldmVudF9sb29wKGxvb3ApCisKKyAgICAgICAgZGVmIHJ1bl9sb29wKCk6CisgICAgICAgICAgICBkZWYgemVyb19lcnJvcigpOgorICAgICAgICAgICAgICAgIDEvMAorICAgICAgICAgICAgbG9vcC5jYWxsX3Nvb24oemVyb19lcnJvcikKKyAgICAgICAgICAgIGxvb3AuX3J1bl9vbmNlKCkKKworICAgICAgICB3aXRoIG1vY2sucGF0Y2goJ2FzeW5jaW8uYmFzZV9ldmVudHMubG9nZ2VyJykgYXMgbG9nOgorICAgICAgICAgICAgcnVuX2xvb3AoKQorICAgICAgICAgICAgbG9nLmVycm9yLmFzc2VydF9jYWxsZWRfd2l0aCgKKyAgICAgICAgICAgICAgICAnRXhjZXB0aW9uIGluIGRlZmF1bHQgZXhjZXB0aW9uIGhhbmRsZXInLAorICAgICAgICAgICAgICAgIGV4Y19pbmZvPVRydWUpCisKKyAgICAgICAgZGVmIGN1c3RvbV9oYW5kbGVyKGxvb3AsIGNvbnRleHQpOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignaGFtJykKKworICAgICAgICBfY29udGV4dCA9IE5vbmUKKyAgICAgICAgbG9vcC5zZXRfZXhjZXB0aW9uX2hhbmRsZXIoY3VzdG9tX2hhbmRsZXIpCisgICAgICAgIHdpdGggbW9jay5wYXRjaCgnYXN5bmNpby5iYXNlX2V2ZW50cy5sb2dnZXInKSBhcyBsb2c6CisgICAgICAgICAgICBydW5fbG9vcCgpCisgICAgICAgICAgICBsb2cuZXJyb3IuYXNzZXJ0X2NhbGxlZF93aXRoKAorICAgICAgICAgICAgICAgIHRlc3RfdXRpbHMuTW9ja1BhdHRlcm4oJ0V4Y2VwdGlvbiBpbiBkZWZhdWx0IGV4Y2VwdGlvbi4qJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3doaWxlIGhhbmRsaW5nLippbiBjdXN0b20nKSwKKyAgICAgICAgICAgICAgICBleGNfaW5mbz1UcnVlKQorCisgICAgICAgICAgICAjIENoZWNrIHRoYXQgb3JpZ2luYWwgY29udGV4dCB3YXMgcGFzc2VkIHRvIGRlZmF1bHQKKyAgICAgICAgICAgICMgZXhjZXB0aW9uIGhhbmRsZXIuCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCdjb250ZXh0JywgX2NvbnRleHQpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUoX2NvbnRleHRbJ2NvbnRleHQnXVsnZXhjZXB0aW9uJ10pLAorICAgICAgICAgICAgICAgICAgICAgICAgICBaZXJvRGl2aXNpb25FcnJvcikKKworICAgIGRlZiB0ZXN0X3NldF90YXNrX2ZhY3RvcnlfaW52YWxpZChzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KAorICAgICAgICAgICAgVHlwZUVycm9yLCAndGFzayBmYWN0b3J5IG11c3QgYmUgYSBjYWxsYWJsZSBvciBOb25lJyk6CisKKyAgICAgICAgICAgIHNlbGYubG9vcC5zZXRfdGFza19mYWN0b3J5KDEpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc2VsZi5sb29wLmdldF90YXNrX2ZhY3RvcnkoKSkKKworICAgIGRlZiB0ZXN0X3NldF90YXNrX2ZhY3Rvcnkoc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5fcHJvY2Vzc19ldmVudHMgPSBtb2NrLk1vY2soKQorCisgICAgICAgIGNsYXNzIE15VGFzayhhc3luY2lvLlRhc2spOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgY29ybygpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGZhY3RvcnkgPSBsYW1iZGEgbG9vcCwgY29ybzogTXlUYXNrKGNvcm8sIGxvb3A9bG9vcCkKKworICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzZWxmLmxvb3AuZ2V0X3Rhc2tfZmFjdG9yeSgpKQorICAgICAgICBzZWxmLmxvb3Auc2V0X3Rhc2tfZmFjdG9yeShmYWN0b3J5KQorICAgICAgICBzZWxmLmFzc2VydElzKHNlbGYubG9vcC5nZXRfdGFza19mYWN0b3J5KCksIGZhY3RvcnkpCisKKyAgICAgICAgdGFzayA9IHNlbGYubG9vcC5jcmVhdGVfdGFzayhjb3JvKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHRhc2ssIE15VGFzaykpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUodGFzaykKKworICAgICAgICBzZWxmLmxvb3Auc2V0X3Rhc2tfZmFjdG9yeShOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzZWxmLmxvb3AuZ2V0X3Rhc2tfZmFjdG9yeSgpKQorCisgICAgICAgIHRhc2sgPSBzZWxmLmxvb3AuY3JlYXRlX3Rhc2soY29ybygpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZSh0YXNrLCBhc3luY2lvLlRhc2spKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzaW5zdGFuY2UodGFzaywgTXlUYXNrKSkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh0YXNrKQorCisgICAgZGVmIHRlc3RfZW52X3Zhcl9kZWJ1ZyhzZWxmKToKKyAgICAgICAgY29kZSA9ICdcbicuam9pbigoCisgICAgICAgICAgICAnaW1wb3J0IGFzeW5jaW8nLAorICAgICAgICAgICAgJ2xvb3AgPSBhc3luY2lvLmdldF9ldmVudF9sb29wKCknLAorICAgICAgICAgICAgJ3ByaW50KGxvb3AuZ2V0X2RlYnVnKCkpJykpCisKKyAgICAgICAgIyBUZXN0IHdpdGggLUUgdG8gbm90IGZhaWwgaWYgdGhlIHVuaXQgdGVzdCB3YXMgcnVuIHdpdGgKKyAgICAgICAgIyBQWVRIT05BU1lOQ0lPREVCVUcgc2V0IHRvIGEgbm9uLWVtcHR5IHN0cmluZworICAgICAgICBzdHMsIHN0ZG91dCwgc3RkZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygnLUUnLCAnLWMnLCBjb2RlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dC5yc3RyaXAoKSwgYidGYWxzZScpCisKKyAgICAgICAgc3RzLCBzdGRvdXQsIHN0ZGVyciA9IGFzc2VydF9weXRob25fb2soJy1jJywgY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFlUSE9OQVNZTkNJT0RFQlVHPScnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dC5yc3RyaXAoKSwgYidGYWxzZScpCisKKyAgICAgICAgc3RzLCBzdGRvdXQsIHN0ZGVyciA9IGFzc2VydF9weXRob25fb2soJy1jJywgY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFlUSE9OQVNZTkNJT0RFQlVHPScxJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQucnN0cmlwKCksIGInVHJ1ZScpCisKKyAgICAgICAgc3RzLCBzdGRvdXQsIHN0ZGVyciA9IGFzc2VydF9weXRob25fb2soJy1FJywgJy1jJywgY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFlUSE9OQVNZTkNJT0RFQlVHPScxJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQucnN0cmlwKCksIGInRmFsc2UnKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX3Rhc2soc2VsZik6CisgICAgICAgIGNsYXNzIE15VGFzayhhc3luY2lvLlRhc2spOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgdGVzdCgpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGNsYXNzIEV2ZW50TG9vcChiYXNlX2V2ZW50cy5CYXNlRXZlbnRMb29wKToKKyAgICAgICAgICAgIGRlZiBjcmVhdGVfdGFzayhzZWxmLCBjb3JvKToKKyAgICAgICAgICAgICAgICByZXR1cm4gTXlUYXNrKGNvcm8sIGxvb3A9bG9vcCkKKworICAgICAgICBsb29wID0gRXZlbnRMb29wKCkKKyAgICAgICAgc2VsZi5zZXRfZXZlbnRfbG9vcChsb29wKQorCisgICAgICAgIGNvcm8gPSB0ZXN0KCkKKyAgICAgICAgdGFzayA9IGFzeW5jaW8uZW5zdXJlX2Z1dHVyZShjb3JvLCBsb29wPWxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh0YXNrLCBNeVRhc2spCisKKyAgICAgICAgIyBtYWtlIHdhcm5pbmdzIHF1aWV0CisgICAgICAgIHRhc2suX2xvZ19kZXN0cm95X3BlbmRpbmcgPSBGYWxzZQorICAgICAgICBjb3JvLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X3J1bl9mb3JldmVyX2tleWJvYXJkX2ludGVycnVwdChzZWxmKToKKyAgICAgICAgIyBQeXRob24gaXNzdWUgIzIyNjAxOiBlbnN1cmUgdGhhdCB0aGUgdGVtcG9yYXJ5IHRhc2sgY3JlYXRlZCBieQorICAgICAgICAjIHJ1bl9mb3JldmVyKCkgY29uc3VtZXMgdGhlIEtleWJvYXJkSW50ZXJydXB0IGFuZCBzbyBkb24ndCBsb2cKKyAgICAgICAgIyBhIHdhcm5pbmcKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiByYWlzZV9rZXlib2FyZF9pbnRlcnJ1cHQoKToKKyAgICAgICAgICAgIHJhaXNlIEtleWJvYXJkSW50ZXJydXB0CisKKyAgICAgICAgc2VsZi5sb29wLl9wcm9jZXNzX2V2ZW50cyA9IG1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5jYWxsX2V4Y2VwdGlvbl9oYW5kbGVyID0gbW9jay5Nb2NrKCkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHJhaXNlX2tleWJvYXJkX2ludGVycnVwdCgpKQorICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYubG9vcC5jbG9zZSgpCisgICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3AuY2FsbF9leGNlcHRpb25faGFuZGxlci5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF9ydW5fdW50aWxfY29tcGxldGVfYmFzZWV4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgIyBQeXRob24gaXNzdWUgIzIyNDI5OiBydW5fdW50aWxfY29tcGxldGUoKSBtdXN0IG5vdCBzY2hlZHVsZSBhIHBlbmRpbmcKKyAgICAgICAgIyBjYWxsIHRvIHN0b3AoKSBpZiB0aGUgZnV0dXJlIHJhaXNlZCBhIEJhc2VFeGNlcHRpb24KKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiByYWlzZV9rZXlib2FyZF9pbnRlcnJ1cHQoKToKKyAgICAgICAgICAgIHJhaXNlIEtleWJvYXJkSW50ZXJydXB0CisKKyAgICAgICAgc2VsZi5sb29wLl9wcm9jZXNzX2V2ZW50cyA9IG1vY2suTW9jaygpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShyYWlzZV9rZXlib2FyZF9pbnRlcnJ1cHQoKSkKKyAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGRlZiBmdW5jKCk6CisgICAgICAgICAgICBzZWxmLmxvb3Auc3RvcCgpCisgICAgICAgICAgICBmdW5jLmNhbGxlZCA9IFRydWUKKyAgICAgICAgZnVuYy5jYWxsZWQgPSBGYWxzZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmxvb3AuY2FsbF9zb29uKGZ1bmMpCisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX2ZvcmV2ZXIoKQorICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmdW5jLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X3NpbmdsZV9zZWxlY3Rlcl9ldmVudF9jYWxsYmFja19hZnRlcl9zdG9wcGluZyhzZWxmKToKKyAgICAgICAgIyBQeXRob24gaXNzdWUgIzI1NTkzOiBBIHN0b3BwZWQgZXZlbnQgbG9vcCBtYXkgY2F1c2UgZXZlbnQgY2FsbGJhY2tzCisgICAgICAgICMgdG8gcnVuIG1vcmUgdGhhbiBvbmNlLgorICAgICAgICBldmVudF9zZW50aW5lbCA9IG9iamVjdCgpCisgICAgICAgIGNhbGxjb3VudCA9IDAKKyAgICAgICAgZG9lciA9IE5vbmUKKworICAgICAgICBkZWYgcHJvY19ldmVudHMoZXZlbnRfbGlzdCk6CisgICAgICAgICAgICBub25sb2NhbCBkb2VyCisgICAgICAgICAgICBpZiBldmVudF9zZW50aW5lbCBpbiBldmVudF9saXN0OgorICAgICAgICAgICAgICAgIGRvZXIgPSBzZWxmLmxvb3AuY2FsbF9zb29uKGRvX2V2ZW50KQorCisgICAgICAgIGRlZiBkb19ldmVudCgpOgorICAgICAgICAgICAgbm9ubG9jYWwgY2FsbGNvdW50CisgICAgICAgICAgICBjYWxsY291bnQgKz0gMQorICAgICAgICAgICAgc2VsZi5sb29wLmNhbGxfc29vbihjbGVhcl9zZWxlY3RvcikKKworICAgICAgICBkZWYgY2xlYXJfc2VsZWN0b3IoKToKKyAgICAgICAgICAgIGRvZXIuY2FuY2VsKCkKKyAgICAgICAgICAgIHNlbGYubG9vcC5fc2VsZWN0b3Iuc2VsZWN0LnJldHVybl92YWx1ZSA9ICgpCisKKyAgICAgICAgc2VsZi5sb29wLl9wcm9jZXNzX2V2ZW50cyA9IHByb2NfZXZlbnRzCisgICAgICAgIHNlbGYubG9vcC5fc2VsZWN0b3Iuc2VsZWN0LnJldHVybl92YWx1ZSA9IChldmVudF9zZW50aW5lbCwpCisKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSwgMyk6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdCgnTG9vcCAlZC8yJyAlIGkpOgorICAgICAgICAgICAgICAgIHNlbGYubG9vcC5jYWxsX3Nvb24oc2VsZi5sb29wLnN0b3ApCisgICAgICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl9mb3JldmVyKCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhbGxjb3VudCwgMSkKKworICAgIGRlZiB0ZXN0X3J1bl9vbmNlKHNlbGYpOgorICAgICAgICAjIFNpbXBsZSB0ZXN0IGZvciB0ZXN0X3V0aWxzLnJ1bl9vbmNlKCkuICBJdCBtYXkgc2VlbSBzdHJhbmdlCisgICAgICAgICMgdG8gaGF2ZSBhIHRlc3QgZm9yIHRoaXMgKHRoZSBmdW5jdGlvbiBpc24ndCBldmVuIHVzZWQhKSBidXQKKyAgICAgICAgIyBpdCdzIGEgZGUtZmFjdG9yIHN0YW5kYXJkIEFQSSBmb3IgbGlicmFyeSB0ZXN0cy4gIFRoaXMgdGVzdHMKKyAgICAgICAgIyB0aGUgaWRpb206IGxvb3AuY2FsbF9zb29uKGxvb3Auc3RvcCk7IGxvb3AucnVuX2ZvcmV2ZXIoKS4KKyAgICAgICAgY291bnQgPSAwCisKKyAgICAgICAgZGVmIGNhbGxiYWNrKCk6CisgICAgICAgICAgICBub25sb2NhbCBjb3VudAorICAgICAgICAgICAgY291bnQgKz0gMQorCisgICAgICAgIHNlbGYubG9vcC5fcHJvY2Vzc19ldmVudHMgPSBtb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuY2FsbF9zb29uKGNhbGxiYWNrKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9vbmNlKHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb3VudCwgMSkKKworICAgIGRlZiB0ZXN0X3J1bl9mb3JldmVyX3ByZV9zdG9wcGVkKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCB0aGUgb2xkIGlkaW9tIGZvciBwcmUtc3RvcHBpbmcgdGhlIGxvb3Agd29ya3MuCisgICAgICAgIHNlbGYubG9vcC5fcHJvY2Vzc19ldmVudHMgPSBtb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3Auc3RvcCgpCisgICAgICAgIHNlbGYubG9vcC5ydW5fZm9yZXZlcigpCisgICAgICAgIHNlbGYubG9vcC5fc2VsZWN0b3Iuc2VsZWN0LmFzc2VydF9jYWxsZWRfb25jZV93aXRoKDApCisKKworY2xhc3MgTXlQcm90byhhc3luY2lvLlByb3RvY29sKToKKyAgICBkb25lID0gTm9uZQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNyZWF0ZV9mdXR1cmU9RmFsc2UpOgorICAgICAgICBzZWxmLnN0YXRlID0gJ0lOSVRJQUwnCisgICAgICAgIHNlbGYubmJ5dGVzID0gMAorICAgICAgICBpZiBjcmVhdGVfZnV0dXJlOgorICAgICAgICAgICAgc2VsZi5kb25lID0gYXN5bmNpby5GdXR1cmUoKQorCisgICAgZGVmIGNvbm5lY3Rpb25fbWFkZShzZWxmLCB0cmFuc3BvcnQpOgorICAgICAgICBzZWxmLnRyYW5zcG9ydCA9IHRyYW5zcG9ydAorICAgICAgICBhc3NlcnQgc2VsZi5zdGF0ZSA9PSAnSU5JVElBTCcsIHNlbGYuc3RhdGUKKyAgICAgICAgc2VsZi5zdGF0ZSA9ICdDT05ORUNURUQnCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShiJ0dFVCAvIEhUVFAvMS4wXHJcbkhvc3Q6IGV4YW1wbGUuY29tXHJcblxyXG4nKQorCisgICAgZGVmIGRhdGFfcmVjZWl2ZWQoc2VsZiwgZGF0YSk6CisgICAgICAgIGFzc2VydCBzZWxmLnN0YXRlID09ICdDT05ORUNURUQnLCBzZWxmLnN0YXRlCisgICAgICAgIHNlbGYubmJ5dGVzICs9IGxlbihkYXRhKQorCisgICAgZGVmIGVvZl9yZWNlaXZlZChzZWxmKToKKyAgICAgICAgYXNzZXJ0IHNlbGYuc3RhdGUgPT0gJ0NPTk5FQ1RFRCcsIHNlbGYuc3RhdGUKKyAgICAgICAgc2VsZi5zdGF0ZSA9ICdFT0YnCisKKyAgICBkZWYgY29ubmVjdGlvbl9sb3N0KHNlbGYsIGV4Yyk6CisgICAgICAgIGFzc2VydCBzZWxmLnN0YXRlIGluICgnQ09OTkVDVEVEJywgJ0VPRicpLCBzZWxmLnN0YXRlCisgICAgICAgIHNlbGYuc3RhdGUgPSAnQ0xPU0VEJworICAgICAgICBpZiBzZWxmLmRvbmU6CisgICAgICAgICAgICBzZWxmLmRvbmUuc2V0X3Jlc3VsdChOb25lKQorCisKK2NsYXNzIE15RGF0YWdyYW1Qcm90byhhc3luY2lvLkRhdGFncmFtUHJvdG9jb2wpOgorICAgIGRvbmUgPSBOb25lCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY3JlYXRlX2Z1dHVyZT1GYWxzZSwgbG9vcD1Ob25lKToKKyAgICAgICAgc2VsZi5zdGF0ZSA9ICdJTklUSUFMJworICAgICAgICBzZWxmLm5ieXRlcyA9IDAKKyAgICAgICAgaWYgY3JlYXRlX2Z1dHVyZToKKyAgICAgICAgICAgIHNlbGYuZG9uZSA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9bG9vcCkKKworICAgIGRlZiBjb25uZWN0aW9uX21hZGUoc2VsZiwgdHJhbnNwb3J0KToKKyAgICAgICAgc2VsZi50cmFuc3BvcnQgPSB0cmFuc3BvcnQKKyAgICAgICAgYXNzZXJ0IHNlbGYuc3RhdGUgPT0gJ0lOSVRJQUwnLCBzZWxmLnN0YXRlCisgICAgICAgIHNlbGYuc3RhdGUgPSAnSU5JVElBTElaRUQnCisKKyAgICBkZWYgZGF0YWdyYW1fcmVjZWl2ZWQoc2VsZiwgZGF0YSwgYWRkcik6CisgICAgICAgIGFzc2VydCBzZWxmLnN0YXRlID09ICdJTklUSUFMSVpFRCcsIHNlbGYuc3RhdGUKKyAgICAgICAgc2VsZi5uYnl0ZXMgKz0gbGVuKGRhdGEpCisKKyAgICBkZWYgZXJyb3JfcmVjZWl2ZWQoc2VsZiwgZXhjKToKKyAgICAgICAgYXNzZXJ0IHNlbGYuc3RhdGUgPT0gJ0lOSVRJQUxJWkVEJywgc2VsZi5zdGF0ZQorCisgICAgZGVmIGNvbm5lY3Rpb25fbG9zdChzZWxmLCBleGMpOgorICAgICAgICBhc3NlcnQgc2VsZi5zdGF0ZSA9PSAnSU5JVElBTElaRUQnLCBzZWxmLnN0YXRlCisgICAgICAgIHNlbGYuc3RhdGUgPSAnQ0xPU0VEJworICAgICAgICBpZiBzZWxmLmRvbmU6CisgICAgICAgICAgICBzZWxmLmRvbmUuc2V0X3Jlc3VsdChOb25lKQorCisKK2NsYXNzIEJhc2VFdmVudExvb3BXaXRoU2VsZWN0b3JUZXN0cyh0ZXN0X3V0aWxzLlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5sb29wID0gYXN5bmNpby5uZXdfZXZlbnRfbG9vcCgpCisgICAgICAgIHNlbGYuc2V0X2V2ZW50X2xvb3Aoc2VsZi5sb29wKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICAjIENsZWFyIG1vY2tlZCBjb25zdGFudHMgbGlrZSBBRl9JTkVUIGZyb20gdGhlIGNhY2hlLgorICAgICAgICBiYXNlX2V2ZW50cy5faXBhZGRyX2luZm8uY2FjaGVfY2xlYXIoKQorICAgICAgICBzdXBlcigpLnRlYXJEb3duKCkKKworICAgIEBwYXRjaF9zb2NrZXQKKyAgICBkZWYgdGVzdF9jcmVhdGVfY29ubmVjdGlvbl9tdWx0aXBsZV9lcnJvcnMoc2VsZiwgbV9zb2NrZXQpOgorCisgICAgICAgIGNsYXNzIE15UHJvdG8oYXN5bmNpby5Qcm90b2NvbCk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBnZXRhZGRyaW5mbygqYXJncywgKiprdyk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIFtdCisgICAgICAgICAgICByZXR1cm4gWygyLCAxLCA2LCAnJywgKCcxMDcuNi4xMDYuODInLCA4MCkpLAorICAgICAgICAgICAgICAgICAgICAoMiwgMSwgNiwgJycsICgnMTA3LjYuMTA2LjgyJywgODApKV0KKworICAgICAgICBkZWYgZ2V0YWRkcmluZm9fdGFzaygqYXJncywgKiprd2RzKToKKyAgICAgICAgICAgIHJldHVybiBhc3luY2lvLlRhc2soZ2V0YWRkcmluZm8oKmFyZ3MsICoqa3dkcyksIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIGlkeCA9IC0xCisgICAgICAgIGVycm9ycyA9IFsnZXJyMScsICdlcnIyJ10KKworICAgICAgICBkZWYgX3NvY2tldCgqYXJncywgKiprdyk6CisgICAgICAgICAgICBub25sb2NhbCBpZHgsIGVycm9ycworICAgICAgICAgICAgaWR4ICs9IDEKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoZXJyb3JzW2lkeF0pCisKKyAgICAgICAgbV9zb2NrZXQuc29ja2V0ID0gX3NvY2tldAorCisgICAgICAgIHNlbGYubG9vcC5nZXRhZGRyaW5mbyA9IGdldGFkZHJpbmZvX3Rhc2sKKworICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV9jb25uZWN0aW9uKE15UHJvdG8sICdleGFtcGxlLmNvbScsIDgwKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb3JvKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGNtLmV4Y2VwdGlvbiksICdNdWx0aXBsZSBleGNlcHRpb25zOiBlcnIxLCBlcnIyJykKKworICAgIEBwYXRjaF9zb2NrZXQKKyAgICBkZWYgdGVzdF9jcmVhdGVfY29ubmVjdGlvbl90aW1lb3V0KHNlbGYsIG1fc29ja2V0KToKKyAgICAgICAgIyBFbnN1cmUgdGhhdCB0aGUgc29ja2V0IGlzIGNsb3NlZCBvbiB0aW1lb3V0CisgICAgICAgIHNvY2sgPSBtb2NrLk1vY2soKQorICAgICAgICBtX3NvY2tldC5zb2NrZXQucmV0dXJuX3ZhbHVlID0gc29jaworCisgICAgICAgIGRlZiBnZXRhZGRyaW5mbygqYXJncywgKiprdyk6CisgICAgICAgICAgICBmdXQgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgICAgIGFkZHIgPSAoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSwgMCwgJycsCisgICAgICAgICAgICAgICAgICAgICgnMTI3LjAuMC4xJywgODApKQorICAgICAgICAgICAgZnV0LnNldF9yZXN1bHQoW2FkZHJdKQorICAgICAgICAgICAgcmV0dXJuIGZ1dAorICAgICAgICBzZWxmLmxvb3AuZ2V0YWRkcmluZm8gPSBnZXRhZGRyaW5mbworCisgICAgICAgIHdpdGggbW9jay5wYXRjaC5vYmplY3Qoc2VsZi5sb29wLCAnc29ja19jb25uZWN0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWRlX2VmZmVjdD1hc3luY2lvLlRpbWVvdXRFcnJvcik6CisgICAgICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV9jb25uZWN0aW9uKE15UHJvdG8sICcxMjcuMC4wLjEnLCA4MCkKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoYXN5bmNpby5UaW1lb3V0RXJyb3IpOgorICAgICAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ybykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzb2NrLmNsb3NlLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9jb25uZWN0aW9uX2hvc3RfcG9ydF9zb2NrKHNlbGYpOgorICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV9jb25uZWN0aW9uKAorICAgICAgICAgICAgTXlQcm90bywgJ2V4YW1wbGUuY29tJywgODAsIHNvY2s9b2JqZWN0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIGNvcm8pCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfY29ubmVjdGlvbl9ub19ob3N0X3BvcnRfc29jayhzZWxmKToKKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfY29ubmVjdGlvbihNeVByb3RvKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBjb3JvKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX2Nvbm5lY3Rpb25fbm9fZ2V0YWRkcmluZm8oc2VsZik6CisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgZ2V0YWRkcmluZm8oKmFyZ3MsICoqa3cpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBbXQorCisgICAgICAgIGRlZiBnZXRhZGRyaW5mb190YXNrKCphcmdzLCAqKmt3ZHMpOgorICAgICAgICAgICAgcmV0dXJuIGFzeW5jaW8uVGFzayhnZXRhZGRyaW5mbygqYXJncywgKiprd2RzKSwgbG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgc2VsZi5sb29wLmdldGFkZHJpbmZvID0gZ2V0YWRkcmluZm9fdGFzaworICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV9jb25uZWN0aW9uKE15UHJvdG8sICdleGFtcGxlLmNvbScsIDgwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE9TRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIGNvcm8pCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfY29ubmVjdGlvbl9jb25uZWN0X2VycihzZWxmKToKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBnZXRhZGRyaW5mbygqYXJncywgKiprdyk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIFtdCisgICAgICAgICAgICByZXR1cm4gWygyLCAxLCA2LCAnJywgKCcxMDcuNi4xMDYuODInLCA4MCkpXQorCisgICAgICAgIGRlZiBnZXRhZGRyaW5mb190YXNrKCphcmdzLCAqKmt3ZHMpOgorICAgICAgICAgICAgcmV0dXJuIGFzeW5jaW8uVGFzayhnZXRhZGRyaW5mbygqYXJncywgKiprd2RzKSwgbG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgc2VsZi5sb29wLmdldGFkZHJpbmZvID0gZ2V0YWRkcmluZm9fdGFzaworICAgICAgICBzZWxmLmxvb3Auc29ja19jb25uZWN0ID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLnNvY2tfY29ubmVjdC5zaWRlX2VmZmVjdCA9IE9TRXJyb3IKKworICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV9jb25uZWN0aW9uKE15UHJvdG8sICdleGFtcGxlLmNvbScsIDgwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE9TRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIGNvcm8pCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfY29ubmVjdGlvbl9tdWx0aXBsZShzZWxmKToKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBnZXRhZGRyaW5mbygqYXJncywgKiprdyk6CisgICAgICAgICAgICByZXR1cm4gWygyLCAxLCA2LCAnJywgKCcwLjAuMC4xJywgODApKSwKKyAgICAgICAgICAgICAgICAgICAgKDIsIDEsIDYsICcnLCAoJzAuMC4wLjInLCA4MCkpXQorCisgICAgICAgIGRlZiBnZXRhZGRyaW5mb190YXNrKCphcmdzLCAqKmt3ZHMpOgorICAgICAgICAgICAgcmV0dXJuIGFzeW5jaW8uVGFzayhnZXRhZGRyaW5mbygqYXJncywgKiprd2RzKSwgbG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgc2VsZi5sb29wLmdldGFkZHJpbmZvID0gZ2V0YWRkcmluZm9fdGFzaworICAgICAgICBzZWxmLmxvb3Auc29ja19jb25uZWN0ID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLnNvY2tfY29ubmVjdC5zaWRlX2VmZmVjdCA9IE9TRXJyb3IKKworICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV9jb25uZWN0aW9uKAorICAgICAgICAgICAgTXlQcm90bywgJ2V4YW1wbGUuY29tJywgODAsIGZhbWlseT1zb2NrZXQuQUZfSU5FVCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKToKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ybykKKworICAgIEBwYXRjaF9zb2NrZXQKKyAgICBkZWYgdGVzdF9jcmVhdGVfY29ubmVjdGlvbl9tdWx0aXBsZV9lcnJvcnNfbG9jYWxfYWRkcihzZWxmLCBtX3NvY2tldCk6CisKKyAgICAgICAgZGVmIGJpbmQoYWRkcik6CisgICAgICAgICAgICBpZiBhZGRyWzBdID09ICcwLjAuMC4xJzoKKyAgICAgICAgICAgICAgICBlcnIgPSBPU0Vycm9yKCdFcnInKQorICAgICAgICAgICAgICAgIGVyci5zdHJlcnJvciA9ICdFcnInCisgICAgICAgICAgICAgICAgcmFpc2UgZXJyCisKKyAgICAgICAgbV9zb2NrZXQuc29ja2V0LnJldHVybl92YWx1ZS5iaW5kID0gYmluZAorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgZ2V0YWRkcmluZm8oKmFyZ3MsICoqa3cpOgorICAgICAgICAgICAgcmV0dXJuIFsoMiwgMSwgNiwgJycsICgnMC4wLjAuMScsIDgwKSksCisgICAgICAgICAgICAgICAgICAgICgyLCAxLCA2LCAnJywgKCcwLjAuMC4yJywgODApKV0KKworICAgICAgICBkZWYgZ2V0YWRkcmluZm9fdGFzaygqYXJncywgKiprd2RzKToKKyAgICAgICAgICAgIHJldHVybiBhc3luY2lvLlRhc2soZ2V0YWRkcmluZm8oKmFyZ3MsICoqa3dkcyksIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIHNlbGYubG9vcC5nZXRhZGRyaW5mbyA9IGdldGFkZHJpbmZvX3Rhc2sKKyAgICAgICAgc2VsZi5sb29wLnNvY2tfY29ubmVjdCA9IG1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5zb2NrX2Nvbm5lY3Quc2lkZV9lZmZlY3QgPSBPU0Vycm9yKCdFcnIyJykKKworICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV9jb25uZWN0aW9uKAorICAgICAgICAgICAgTXlQcm90bywgJ2V4YW1wbGUuY29tJywgODAsIGZhbWlseT1zb2NrZXQuQUZfSU5FVCwKKyAgICAgICAgICAgIGxvY2FsX2FkZHI9KE5vbmUsIDgwODApKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb3JvKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdHIoY20uZXhjZXB0aW9uKS5zdGFydHN3aXRoKCdNdWx0aXBsZSBleGNlcHRpb25zOiAnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1fc29ja2V0LnNvY2tldC5yZXR1cm5fdmFsdWUuY2xvc2UuY2FsbGVkKQorCisgICAgZGVmIF90ZXN0X2NyZWF0ZV9jb25uZWN0aW9uX2lwX2FkZHIoc2VsZiwgbV9zb2NrZXQsIGFsbG93X2luZXRfcHRvbik6CisgICAgICAgICMgVGVzdCB0aGUgZmFsbGJhY2sgY29kZSwgZXZlbiBpZiB0aGlzIHN5c3RlbSBoYXMgaW5ldF9wdG9uLgorICAgICAgICBpZiBub3QgYWxsb3dfaW5ldF9wdG9uOgorICAgICAgICAgICAgZGVsIG1fc29ja2V0LmluZXRfcHRvbgorCisgICAgICAgIGRlZiBnZXRhZGRyaW5mbygqYXJncywgKiprdyk6CisgICAgICAgICAgICBzZWxmLmZhaWwoJ3Nob3VsZCBub3QgaGF2ZSBjYWxsZWQgZ2V0YWRkcmluZm8nKQorCisgICAgICAgIG1fc29ja2V0LmdldGFkZHJpbmZvID0gZ2V0YWRkcmluZm8KKyAgICAgICAgc29jayA9IG1fc29ja2V0LnNvY2tldC5yZXR1cm5fdmFsdWUKKworICAgICAgICBzZWxmLmxvb3AuYWRkX3JlYWRlciA9IG1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5hZGRfcmVhZGVyLl9pc19jb3JvdXRpbmUgPSBGYWxzZQorICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlciA9IG1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5hZGRfd3JpdGVyLl9pc19jb3JvdXRpbmUgPSBGYWxzZQorCisgICAgICAgIGNvcm8gPSBzZWxmLmxvb3AuY3JlYXRlX2Nvbm5lY3Rpb24oYXN5bmNpby5Qcm90b2NvbCwgJzEuMi4zLjQnLCA4MCkKKyAgICAgICAgdCwgcCA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ybykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc29jay5jb25uZWN0LmFzc2VydF9jYWxsZWRfd2l0aCgoJzEuMi4zLjQnLCA4MCkpCisgICAgICAgICAgICBtX3NvY2tldC5zb2NrZXQuYXNzZXJ0X2NhbGxlZF93aXRoKGZhbWlseT1tX3NvY2tldC5BRl9JTkVULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90bz1tX3NvY2tldC5JUFBST1RPX1RDUCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1tX3NvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHQuY2xvc2UoKQorICAgICAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApICAjIGFsbG93IHRyYW5zcG9ydCB0byBjbG9zZQorCisgICAgICAgIHNvY2suZmFtaWx5ID0gc29ja2V0LkFGX0lORVQ2CisgICAgICAgIGNvcm8gPSBzZWxmLmxvb3AuY3JlYXRlX2Nvbm5lY3Rpb24oYXN5bmNpby5Qcm90b2NvbCwgJzo6MicsIDgwKQorICAgICAgICB0LCBwID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb3JvKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzb2NrLmNvbm5lY3QuYXNzZXJ0X2NhbGxlZF93aXRoKCgnOjoyJywgODApKQorICAgICAgICAgICAgbV9zb2NrZXQuc29ja2V0LmFzc2VydF9jYWxsZWRfd2l0aChmYW1pbHk9bV9zb2NrZXQuQUZfSU5FVDYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvPW1fc29ja2V0LklQUFJPVE9fVENQLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPW1fc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgdC5jbG9zZSgpCisgICAgICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkgICMgYWxsb3cgdHJhbnNwb3J0IHRvIGNsb3NlCisKKyAgICBAcGF0Y2hfc29ja2V0CisgICAgZGVmIHRlc3RfY3JlYXRlX2Nvbm5lY3Rpb25faXBfYWRkcihzZWxmLCBtX3NvY2tldCk6CisgICAgICAgIHNlbGYuX3Rlc3RfY3JlYXRlX2Nvbm5lY3Rpb25faXBfYWRkcihtX3NvY2tldCwgVHJ1ZSkKKworICAgIEBwYXRjaF9zb2NrZXQKKyAgICBkZWYgdGVzdF9jcmVhdGVfY29ubmVjdGlvbl9ub19pbmV0X3B0b24oc2VsZiwgbV9zb2NrZXQpOgorICAgICAgICBzZWxmLl90ZXN0X2NyZWF0ZV9jb25uZWN0aW9uX2lwX2FkZHIobV9zb2NrZXQsIEZhbHNlKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX2Nvbm5lY3Rpb25fbm9fbG9jYWxfYWRkcihzZWxmKToKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBnZXRhZGRyaW5mbyhob3N0LCAqYXJncywgKiprdyk6CisgICAgICAgICAgICBpZiBob3N0ID09ICdleGFtcGxlLmNvbSc6CisgICAgICAgICAgICAgICAgcmV0dXJuIFsoMiwgMSwgNiwgJycsICgnMTA3LjYuMTA2LjgyJywgODApKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICgyLCAxLCA2LCAnJywgKCcxMDcuNi4xMDYuODInLCA4MCkpXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gW10KKworICAgICAgICBkZWYgZ2V0YWRkcmluZm9fdGFzaygqYXJncywgKiprd2RzKToKKyAgICAgICAgICAgIHJldHVybiBhc3luY2lvLlRhc2soZ2V0YWRkcmluZm8oKmFyZ3MsICoqa3dkcyksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmxvb3AuZ2V0YWRkcmluZm8gPSBnZXRhZGRyaW5mb190YXNrCisKKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfY29ubmVjdGlvbigKKyAgICAgICAgICAgIE15UHJvdG8sICdleGFtcGxlLmNvbScsIDgwLCBmYW1pbHk9c29ja2V0LkFGX0lORVQsCisgICAgICAgICAgICBsb2NhbF9hZGRyPShOb25lLCA4MDgwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBPU0Vycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBjb3JvKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX2Nvbm5lY3Rpb25fc3NsX3NlcnZlcl9ob3N0bmFtZV9kZWZhdWx0KHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuZ2V0YWRkcmluZm8gPSBtb2NrLk1vY2soKQorCisgICAgICAgIGRlZiBtb2NrX2dldGFkZHJpbmZvKCphcmdzLCAqKmt3ZHMpOgorICAgICAgICAgICAgZiA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICAgICAgZi5zZXRfcmVzdWx0KFsoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tldC5TT0xfVENQLCAnJywgKCcxLjIuMy40JywgODApKV0pCisgICAgICAgICAgICByZXR1cm4gZgorCisgICAgICAgIHNlbGYubG9vcC5nZXRhZGRyaW5mby5zaWRlX2VmZmVjdCA9IG1vY2tfZ2V0YWRkcmluZm8KKyAgICAgICAgc2VsZi5sb29wLnNvY2tfY29ubmVjdCA9IG1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5zb2NrX2Nvbm5lY3QucmV0dXJuX3ZhbHVlID0gKCkKKyAgICAgICAgc2VsZi5sb29wLl9tYWtlX3NzbF90cmFuc3BvcnQgPSBtb2NrLk1vY2soKQorCisgICAgICAgIGNsYXNzIF9TZWxlY3RvclRyYW5zcG9ydE1vY2s6CisgICAgICAgICAgICBfc29jayA9IE5vbmUKKworICAgICAgICAgICAgZGVmIGdldF9leHRyYV9pbmZvKHNlbGYsIGtleSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIG1vY2suTW9jaygpCisKKyAgICAgICAgICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLl9zb2NrLmNsb3NlKCkKKworICAgICAgICBkZWYgbW9ja19tYWtlX3NzbF90cmFuc3BvcnQoc29jaywgcHJvdG9jb2wsIHNzbGNvbnRleHQsIHdhaXRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqa3dkcyk6CisgICAgICAgICAgICB3YWl0ZXIuc2V0X3Jlc3VsdChOb25lKQorICAgICAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yVHJhbnNwb3J0TW9jaygpCisgICAgICAgICAgICB0cmFuc3BvcnQuX3NvY2sgPSBzb2NrCisgICAgICAgICAgICByZXR1cm4gdHJhbnNwb3J0CisKKyAgICAgICAgc2VsZi5sb29wLl9tYWtlX3NzbF90cmFuc3BvcnQuc2lkZV9lZmZlY3QgPSBtb2NrX21ha2Vfc3NsX3RyYW5zcG9ydAorICAgICAgICBBTlkgPSBtb2NrLkFOWQorICAgICAgICAjIEZpcnN0IHRyeSB0aGUgZGVmYXVsdCBzZXJ2ZXJfaG9zdG5hbWUuCisgICAgICAgIHNlbGYubG9vcC5fbWFrZV9zc2xfdHJhbnNwb3J0LnJlc2V0X21vY2soKQorICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV9jb25uZWN0aW9uKE15UHJvdG8sICdweXRob24ub3JnJywgODAsIHNzbD1UcnVlKQorICAgICAgICB0cmFuc3BvcnQsIF8gPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvcm8pCisgICAgICAgIHRyYW5zcG9ydC5jbG9zZSgpCisgICAgICAgIHNlbGYubG9vcC5fbWFrZV9zc2xfdHJhbnNwb3J0LmFzc2VydF9jYWxsZWRfd2l0aCgKKyAgICAgICAgICAgIEFOWSwgQU5ZLCBBTlksIEFOWSwKKyAgICAgICAgICAgIHNlcnZlcl9zaWRlPUZhbHNlLAorICAgICAgICAgICAgc2VydmVyX2hvc3RuYW1lPSdweXRob24ub3JnJykKKyAgICAgICAgIyBOZXh0IHRyeSBhbiBleHBsaWNpdCBzZXJ2ZXJfaG9zdG5hbWUuCisgICAgICAgIHNlbGYubG9vcC5fbWFrZV9zc2xfdHJhbnNwb3J0LnJlc2V0X21vY2soKQorICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV9jb25uZWN0aW9uKE15UHJvdG8sICdweXRob24ub3JnJywgODAsIHNzbD1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9ob3N0bmFtZT0ncGVybC5jb20nKQorICAgICAgICB0cmFuc3BvcnQsIF8gPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvcm8pCisgICAgICAgIHRyYW5zcG9ydC5jbG9zZSgpCisgICAgICAgIHNlbGYubG9vcC5fbWFrZV9zc2xfdHJhbnNwb3J0LmFzc2VydF9jYWxsZWRfd2l0aCgKKyAgICAgICAgICAgIEFOWSwgQU5ZLCBBTlksIEFOWSwKKyAgICAgICAgICAgIHNlcnZlcl9zaWRlPUZhbHNlLAorICAgICAgICAgICAgc2VydmVyX2hvc3RuYW1lPSdwZXJsLmNvbScpCisgICAgICAgICMgRmluYWxseSB0cnkgYW4gZXhwbGljaXQgZW1wdHkgc2VydmVyX2hvc3RuYW1lLgorICAgICAgICBzZWxmLmxvb3AuX21ha2Vfc3NsX3RyYW5zcG9ydC5yZXNldF9tb2NrKCkKKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfY29ubmVjdGlvbihNeVByb3RvLCAncHl0aG9uLm9yZycsIDgwLCBzc2w9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfaG9zdG5hbWU9JycpCisgICAgICAgIHRyYW5zcG9ydCwgXyA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ybykKKyAgICAgICAgdHJhbnNwb3J0LmNsb3NlKCkKKyAgICAgICAgc2VsZi5sb29wLl9tYWtlX3NzbF90cmFuc3BvcnQuYXNzZXJ0X2NhbGxlZF93aXRoKEFOWSwgQU5ZLCBBTlksIEFOWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9zaWRlPUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX2hvc3RuYW1lPScnKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX2Nvbm5lY3Rpb25fbm9fc3NsX3NlcnZlcl9ob3N0bmFtZV9lcnJvcnMoc2VsZik6CisgICAgICAgICMgV2hlbiBub3QgdXNpbmcgc3NsLCBzZXJ2ZXJfaG9zdG5hbWUgbXVzdCBiZSBOb25lLgorICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV9jb25uZWN0aW9uKE15UHJvdG8sICdweXRob24ub3JnJywgODAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX2hvc3RuYW1lPScnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBjb3JvKQorICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV9jb25uZWN0aW9uKE15UHJvdG8sICdweXRob24ub3JnJywgODAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX2hvc3RuYW1lPSdweXRob24ub3JnJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgY29ybykKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9jb25uZWN0aW9uX3NzbF9zZXJ2ZXJfaG9zdG5hbWVfZXJyb3JzKHNlbGYpOgorICAgICAgICAjIFdoZW4gdXNpbmcgc3NsLCBzZXJ2ZXJfaG9zdG5hbWUgbWF5IGJlIE5vbmUgaWYgaG9zdCBpcyBub24tZW1wdHkuCisgICAgICAgIGNvcm8gPSBzZWxmLmxvb3AuY3JlYXRlX2Nvbm5lY3Rpb24oTXlQcm90bywgJycsIDgwLCBzc2w9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgY29ybykKKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfY29ubmVjdGlvbihNeVByb3RvLCBOb25lLCA4MCwgc3NsPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIGNvcm8pCisgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KCkKKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfY29ubmVjdGlvbihNeVByb3RvLCBOb25lLCBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbD1UcnVlLCBzb2NrPXNvY2spCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzb2NrLmNsb3NlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBjb3JvKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX3NlcnZlcl9lbXB0eV9ob3N0KHNlbGYpOgorICAgICAgICAjIGlmIGhvc3QgaXMgZW1wdHkgc3RyaW5nIHVzZSBOb25lIGluc3RlYWQKKyAgICAgICAgaG9zdCA9IG9iamVjdCgpCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBnZXRhZGRyaW5mbygqYXJncywgKiprdyk6CisgICAgICAgICAgICBub25sb2NhbCBob3N0CisgICAgICAgICAgICBob3N0ID0gYXJnc1swXQorICAgICAgICAgICAgeWllbGQgZnJvbSBbXQorCisgICAgICAgIGRlZiBnZXRhZGRyaW5mb190YXNrKCphcmdzLCAqKmt3ZHMpOgorICAgICAgICAgICAgcmV0dXJuIGFzeW5jaW8uVGFzayhnZXRhZGRyaW5mbygqYXJncywgKiprd2RzKSwgbG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgc2VsZi5sb29wLmdldGFkZHJpbmZvID0gZ2V0YWRkcmluZm9fdGFzaworICAgICAgICBmdXQgPSBzZWxmLmxvb3AuY3JlYXRlX3NlcnZlcihNeVByb3RvLCAnJywgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgZnV0KQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShob3N0KQorCisgICAgZGVmIHRlc3RfY3JlYXRlX3NlcnZlcl9ob3N0X3BvcnRfc29jayhzZWxmKToKKyAgICAgICAgZnV0ID0gc2VsZi5sb29wLmNyZWF0ZV9zZXJ2ZXIoCisgICAgICAgICAgICBNeVByb3RvLCAnMC4wLjAuMCcsIDAsIHNvY2s9b2JqZWN0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIGZ1dCkKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9zZXJ2ZXJfbm9faG9zdF9wb3J0X3NvY2soc2VsZik6CisgICAgICAgIGZ1dCA9IHNlbGYubG9vcC5jcmVhdGVfc2VydmVyKE15UHJvdG8pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIGZ1dCkKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9zZXJ2ZXJfbm9fZ2V0YWRkcmluZm8oc2VsZik6CisgICAgICAgIGdldGFkZHJpbmZvID0gc2VsZi5sb29wLmdldGFkZHJpbmZvID0gbW9jay5Nb2NrKCkKKyAgICAgICAgZ2V0YWRkcmluZm8ucmV0dXJuX3ZhbHVlID0gW10KKworICAgICAgICBmID0gc2VsZi5sb29wLmNyZWF0ZV9zZXJ2ZXIoTXlQcm90bywgJzAuMC4wLjAnLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBmKQorCisgICAgQHBhdGNoX3NvY2tldAorICAgIGRlZiB0ZXN0X2NyZWF0ZV9zZXJ2ZXJfbm9zb3JldXNlcG9ydChzZWxmLCBtX3NvY2tldCk6CisgICAgICAgIG1fc29ja2V0LmdldGFkZHJpbmZvID0gc29ja2V0LmdldGFkZHJpbmZvCisgICAgICAgIGRlbCBtX3NvY2tldC5TT19SRVVTRVBPUlQKKyAgICAgICAgbV9zb2NrZXQuc29ja2V0LnJldHVybl92YWx1ZSA9IG1vY2suTW9jaygpCisKKyAgICAgICAgZiA9IHNlbGYubG9vcC5jcmVhdGVfc2VydmVyKAorICAgICAgICAgICAgTXlQcm90bywgJzAuMC4wLjAnLCAwLCByZXVzZV9wb3J0PVRydWUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgZikKKworICAgIEBwYXRjaF9zb2NrZXQKKyAgICBkZWYgdGVzdF9jcmVhdGVfc2VydmVyX2NhbnRfYmluZChzZWxmLCBtX3NvY2tldCk6CisKKyAgICAgICAgY2xhc3MgRXJyKE9TRXJyb3IpOgorICAgICAgICAgICAgc3RyZXJyb3IgPSAnZXJyb3InCisKKyAgICAgICAgbV9zb2NrZXQuZ2V0YWRkcmluZm8ucmV0dXJuX3ZhbHVlID0gWworICAgICAgICAgICAgKDIsIDEsIDYsICcnLCAoJzEyNy4wLjAuMScsIDEwMTAwKSldCisgICAgICAgIG1fc29ja2V0LmdldGFkZHJpbmZvLl9pc19jb3JvdXRpbmUgPSBGYWxzZQorICAgICAgICBtX3NvY2sgPSBtX3NvY2tldC5zb2NrZXQucmV0dXJuX3ZhbHVlID0gbW9jay5Nb2NrKCkKKyAgICAgICAgbV9zb2NrLmJpbmQuc2lkZV9lZmZlY3QgPSBFcnIKKworICAgICAgICBmdXQgPSBzZWxmLmxvb3AuY3JlYXRlX3NlcnZlcihNeVByb3RvLCAnMC4wLjAuMCcsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIGZ1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1fc29jay5jbG9zZS5jYWxsZWQpCisKKyAgICBAcGF0Y2hfc29ja2V0CisgICAgZGVmIHRlc3RfY3JlYXRlX2RhdGFncmFtX2VuZHBvaW50X25vX2FkZHJpbmZvKHNlbGYsIG1fc29ja2V0KToKKyAgICAgICAgbV9zb2NrZXQuZ2V0YWRkcmluZm8ucmV0dXJuX3ZhbHVlID0gW10KKyAgICAgICAgbV9zb2NrZXQuZ2V0YWRkcmluZm8uX2lzX2Nvcm91dGluZSA9IEZhbHNlCisKKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnQoCisgICAgICAgICAgICBNeURhdGFncmFtUHJvdG8sIGxvY2FsX2FkZHI9KCdsb2NhbGhvc3QnLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBPU0Vycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBjb3JvKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX2RhdGFncmFtX2VuZHBvaW50X2FkZHJfZXJyb3Ioc2VsZik6CisgICAgICAgIGNvcm8gPSBzZWxmLmxvb3AuY3JlYXRlX2RhdGFncmFtX2VuZHBvaW50KAorICAgICAgICAgICAgTXlEYXRhZ3JhbVByb3RvLCBsb2NhbF9hZGRyPSdsb2NhbGhvc3QnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIEFzc2VydGlvbkVycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBjb3JvKQorICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV9kYXRhZ3JhbV9lbmRwb2ludCgKKyAgICAgICAgICAgIE15RGF0YWdyYW1Qcm90bywgbG9jYWxfYWRkcj0oJ2xvY2FsaG9zdCcsIDEsIDIsIDMpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIEFzc2VydGlvbkVycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBjb3JvKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX2RhdGFncmFtX2VuZHBvaW50X2Nvbm5lY3RfZXJyKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3Auc29ja19jb25uZWN0ID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLnNvY2tfY29ubmVjdC5zaWRlX2VmZmVjdCA9IE9TRXJyb3IKKworICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV9kYXRhZ3JhbV9lbmRwb2ludCgKKyAgICAgICAgICAgIGFzeW5jaW8uRGF0YWdyYW1Qcm90b2NvbCwgcmVtb3RlX2FkZHI9KCcxMjcuMC4wLjEnLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBPU0Vycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBjb3JvKQorCisgICAgQHBhdGNoX3NvY2tldAorICAgIGRlZiB0ZXN0X2NyZWF0ZV9kYXRhZ3JhbV9lbmRwb2ludF9zb2NrZXRfZXJyKHNlbGYsIG1fc29ja2V0KToKKyAgICAgICAgbV9zb2NrZXQuZ2V0YWRkcmluZm8gPSBzb2NrZXQuZ2V0YWRkcmluZm8KKyAgICAgICAgbV9zb2NrZXQuc29ja2V0LnNpZGVfZWZmZWN0ID0gT1NFcnJvcgorCisgICAgICAgIGNvcm8gPSBzZWxmLmxvb3AuY3JlYXRlX2RhdGFncmFtX2VuZHBvaW50KAorICAgICAgICAgICAgYXN5bmNpby5EYXRhZ3JhbVByb3RvY29sLCBmYW1pbHk9c29ja2V0LkFGX0lORVQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgT1NFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgY29ybykKKworICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV9kYXRhZ3JhbV9lbmRwb2ludCgKKyAgICAgICAgICAgIGFzeW5jaW8uRGF0YWdyYW1Qcm90b2NvbCwgbG9jYWxfYWRkcj0oJzEyNy4wLjAuMScsIDApKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE9TRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIGNvcm8pCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhzdXBwb3J0LklQVjZfRU5BQkxFRCwgJ0lQdjYgbm90IHN1cHBvcnRlZCBvciBlbmFibGVkJykKKyAgICBkZWYgdGVzdF9jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnRfbm9fbWF0Y2hpbmdfZmFtaWx5KHNlbGYpOgorICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV9kYXRhZ3JhbV9lbmRwb2ludCgKKyAgICAgICAgICAgIGFzeW5jaW8uRGF0YWdyYW1Qcm90b2NvbCwKKyAgICAgICAgICAgIHJlbW90ZV9hZGRyPSgnMTI3LjAuMC4xJywgMCksIGxvY2FsX2FkZHI9KCc6OjEnLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBWYWx1ZUVycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBjb3JvKQorCisgICAgQHBhdGNoX3NvY2tldAorICAgIGRlZiB0ZXN0X2NyZWF0ZV9kYXRhZ3JhbV9lbmRwb2ludF9zZXRibGtfZXJyKHNlbGYsIG1fc29ja2V0KToKKyAgICAgICAgbV9zb2NrZXQuc29ja2V0LnJldHVybl92YWx1ZS5zZXRibG9ja2luZy5zaWRlX2VmZmVjdCA9IE9TRXJyb3IKKworICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV9kYXRhZ3JhbV9lbmRwb2ludCgKKyAgICAgICAgICAgIGFzeW5jaW8uRGF0YWdyYW1Qcm90b2NvbCwgZmFtaWx5PXNvY2tldC5BRl9JTkVUKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE9TRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIGNvcm8pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgKKyAgICAgICAgICAgIG1fc29ja2V0LnNvY2tldC5yZXR1cm5fdmFsdWUuY2xvc2UuY2FsbGVkKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX2RhdGFncmFtX2VuZHBvaW50X25vYWRkcl9ub2ZhbWlseShzZWxmKToKKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnQoCisgICAgICAgICAgICBhc3luY2lvLkRhdGFncmFtUHJvdG9jb2wpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIGNvcm8pCisKKyAgICBAcGF0Y2hfc29ja2V0CisgICAgZGVmIHRlc3RfY3JlYXRlX2RhdGFncmFtX2VuZHBvaW50X2NhbnRfYmluZChzZWxmLCBtX3NvY2tldCk6CisgICAgICAgIGNsYXNzIEVycihPU0Vycm9yKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBtX3NvY2tldC5nZXRhZGRyaW5mbyA9IHNvY2tldC5nZXRhZGRyaW5mbworICAgICAgICBtX3NvY2sgPSBtX3NvY2tldC5zb2NrZXQucmV0dXJuX3ZhbHVlID0gbW9jay5Nb2NrKCkKKyAgICAgICAgbV9zb2NrLmJpbmQuc2lkZV9lZmZlY3QgPSBFcnIKKworICAgICAgICBmdXQgPSBzZWxmLmxvb3AuY3JlYXRlX2RhdGFncmFtX2VuZHBvaW50KAorICAgICAgICAgICAgTXlEYXRhZ3JhbVByb3RvLAorICAgICAgICAgICAgbG9jYWxfYWRkcj0oJzEyNy4wLjAuMScsIDApLCBmYW1pbHk9c29ja2V0LkFGX0lORVQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEVyciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgZnV0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUobV9zb2NrLmNsb3NlLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9kYXRhZ3JhbV9lbmRwb2ludF9zb2NrKHNlbGYpOgorICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfREdSQU0pCisgICAgICAgIHNvY2suYmluZCgoJzEyNy4wLjAuMScsIDApKQorICAgICAgICBmdXQgPSBzZWxmLmxvb3AuY3JlYXRlX2RhdGFncmFtX2VuZHBvaW50KAorICAgICAgICAgICAgbGFtYmRhOiBNeURhdGFncmFtUHJvdG8oY3JlYXRlX2Z1dHVyZT1UcnVlLCBsb29wPXNlbGYubG9vcCksCisgICAgICAgICAgICBzb2NrPXNvY2spCisgICAgICAgIHRyYW5zcG9ydCwgcHJvdG9jb2wgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGZ1dCkKKyAgICAgICAgdHJhbnNwb3J0LmNsb3NlKCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90b2NvbC5kb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdDTE9TRUQnLCBwcm90b2NvbC5zdGF0ZSkKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9kYXRhZ3JhbV9lbmRwb2ludF9zb2NrX3NvY2tvcHRzKHNlbGYpOgorICAgICAgICBmdXQgPSBzZWxmLmxvb3AuY3JlYXRlX2RhdGFncmFtX2VuZHBvaW50KAorICAgICAgICAgICAgTXlEYXRhZ3JhbVByb3RvLCBsb2NhbF9hZGRyPSgnMTI3LjAuMC4xJywgMCksIHNvY2s9b2JqZWN0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIGZ1dCkKKworICAgICAgICBmdXQgPSBzZWxmLmxvb3AuY3JlYXRlX2RhdGFncmFtX2VuZHBvaW50KAorICAgICAgICAgICAgTXlEYXRhZ3JhbVByb3RvLCByZW1vdGVfYWRkcj0oJzEyNy4wLjAuMScsIDApLCBzb2NrPW9iamVjdCgpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBmdXQpCisKKyAgICAgICAgZnV0ID0gc2VsZi5sb29wLmNyZWF0ZV9kYXRhZ3JhbV9lbmRwb2ludCgKKyAgICAgICAgICAgIE15RGF0YWdyYW1Qcm90bywgZmFtaWx5PTEsIHNvY2s9b2JqZWN0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIGZ1dCkKKworICAgICAgICBmdXQgPSBzZWxmLmxvb3AuY3JlYXRlX2RhdGFncmFtX2VuZHBvaW50KAorICAgICAgICAgICAgTXlEYXRhZ3JhbVByb3RvLCBwcm90bz0xLCBzb2NrPW9iamVjdCgpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBmdXQpCisKKyAgICAgICAgZnV0ID0gc2VsZi5sb29wLmNyZWF0ZV9kYXRhZ3JhbV9lbmRwb2ludCgKKyAgICAgICAgICAgIE15RGF0YWdyYW1Qcm90bywgZmxhZ3M9MSwgc29jaz1vYmplY3QoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgZnV0KQorCisgICAgICAgIGZ1dCA9IHNlbGYubG9vcC5jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnQoCisgICAgICAgICAgICBNeURhdGFncmFtUHJvdG8sIHJldXNlX2FkZHJlc3M9VHJ1ZSwgc29jaz1vYmplY3QoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgZnV0KQorCisgICAgICAgIGZ1dCA9IHNlbGYubG9vcC5jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnQoCisgICAgICAgICAgICBNeURhdGFncmFtUHJvdG8sIHJldXNlX3BvcnQ9VHJ1ZSwgc29jaz1vYmplY3QoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgZnV0KQorCisgICAgICAgIGZ1dCA9IHNlbGYubG9vcC5jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnQoCisgICAgICAgICAgICBNeURhdGFncmFtUHJvdG8sIGFsbG93X2Jyb2FkY2FzdD1UcnVlLCBzb2NrPW9iamVjdCgpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBmdXQpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnRfc29ja29wdHMoc2VsZik6CisgICAgICAgICMgU29ja2V0IG9wdGlvbnMgc2hvdWxkIG5vdCBiZSBhcHBsaWVkIHVubGVzcyBhc2tlZCBmb3IuCisgICAgICAgICMgU09fUkVVU0VBRERSIGRlZmF1bHRzIHRvIG9uIGZvciBVTklYLgorICAgICAgICAjIFNPX1JFVVNFUE9SVCBpcyBub3QgYXZhaWxhYmxlIG9uIGFsbCBwbGF0Zm9ybXMuCisKKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnQoCisgICAgICAgICAgICBsYW1iZGE6IE15RGF0YWdyYW1Qcm90byhjcmVhdGVfZnV0dXJlPVRydWUsIGxvb3A9c2VsZi5sb29wKSwKKyAgICAgICAgICAgIGxvY2FsX2FkZHI9KCcxMjcuMC4wLjEnLCAwKSkKKyAgICAgICAgdHJhbnNwb3J0LCBwcm90b2NvbCA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ybykKKyAgICAgICAgc29jayA9IHRyYW5zcG9ydC5nZXRfZXh0cmFfaW5mbygnc29ja2V0JykKKworICAgICAgICByZXVzZV9hZGRyZXNzX2RlZmF1bHRfb24gPSAoCisgICAgICAgICAgICBvcy5uYW1lID09ICdwb3NpeCcgYW5kIHN5cy5wbGF0Zm9ybSAhPSAnY3lnd2luJykKKyAgICAgICAgcmV1c2Vwb3J0X3N1cHBvcnRlZCA9IGhhc2F0dHIoc29ja2V0LCAnU09fUkVVU0VQT1JUJykKKworICAgICAgICBpZiByZXVzZV9hZGRyZXNzX2RlZmF1bHRfb246CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoCisgICAgICAgICAgICAgICAgc29jay5nZXRzb2Nrb3B0KAorICAgICAgICAgICAgICAgICAgICBzb2NrZXQuU09MX1NPQ0tFVCwgc29ja2V0LlNPX1JFVVNFQUREUikpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKAorICAgICAgICAgICAgICAgIHNvY2suZ2V0c29ja29wdCgKKyAgICAgICAgICAgICAgICAgICAgc29ja2V0LlNPTF9TT0NLRVQsIHNvY2tldC5TT19SRVVTRUFERFIpKQorICAgICAgICBpZiByZXVzZXBvcnRfc3VwcG9ydGVkOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgKKyAgICAgICAgICAgICAgICBzb2NrLmdldHNvY2tvcHQoCisgICAgICAgICAgICAgICAgICAgIHNvY2tldC5TT0xfU09DS0VULCBzb2NrZXQuU09fUkVVU0VQT1JUKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgKKyAgICAgICAgICAgIHNvY2suZ2V0c29ja29wdCgKKyAgICAgICAgICAgICAgICBzb2NrZXQuU09MX1NPQ0tFVCwgc29ja2V0LlNPX0JST0FEQ0FTVCkpCisKKyAgICAgICAgdHJhbnNwb3J0LmNsb3NlKCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90b2NvbC5kb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdDTE9TRUQnLCBwcm90b2NvbC5zdGF0ZSkKKworICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV9kYXRhZ3JhbV9lbmRwb2ludCgKKyAgICAgICAgICAgIGxhbWJkYTogTXlEYXRhZ3JhbVByb3RvKGNyZWF0ZV9mdXR1cmU9VHJ1ZSwgbG9vcD1zZWxmLmxvb3ApLAorICAgICAgICAgICAgbG9jYWxfYWRkcj0oJzEyNy4wLjAuMScsIDApLAorICAgICAgICAgICAgcmV1c2VfYWRkcmVzcz1UcnVlLAorICAgICAgICAgICAgcmV1c2VfcG9ydD1yZXVzZXBvcnRfc3VwcG9ydGVkLAorICAgICAgICAgICAgYWxsb3dfYnJvYWRjYXN0PVRydWUpCisgICAgICAgIHRyYW5zcG9ydCwgcHJvdG9jb2wgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvcm8pCisgICAgICAgIHNvY2sgPSB0cmFuc3BvcnQuZ2V0X2V4dHJhX2luZm8oJ3NvY2tldCcpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKAorICAgICAgICAgICAgc29jay5nZXRzb2Nrb3B0KAorICAgICAgICAgICAgICAgIHNvY2tldC5TT0xfU09DS0VULCBzb2NrZXQuU09fUkVVU0VBRERSKSkKKyAgICAgICAgaWYgcmV1c2Vwb3J0X3N1cHBvcnRlZDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgKKyAgICAgICAgICAgICAgICBzb2NrLmdldHNvY2tvcHQoCisgICAgICAgICAgICAgICAgICAgIHNvY2tldC5TT0xfU09DS0VULCBzb2NrZXQuU09fUkVVU0VQT1JUKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKAorICAgICAgICAgICAgc29jay5nZXRzb2Nrb3B0KAorICAgICAgICAgICAgICAgIHNvY2tldC5TT0xfU09DS0VULCBzb2NrZXQuU09fQlJPQURDQVNUKSkKKworICAgICAgICB0cmFuc3BvcnQuY2xvc2UoKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvY29sLmRvbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0NMT1NFRCcsIHByb3RvY29sLnN0YXRlKQorCisgICAgQHBhdGNoX3NvY2tldAorICAgIGRlZiB0ZXN0X2NyZWF0ZV9kYXRhZ3JhbV9lbmRwb2ludF9ub3NvcmV1c2Vwb3J0KHNlbGYsIG1fc29ja2V0KToKKyAgICAgICAgZGVsIG1fc29ja2V0LlNPX1JFVVNFUE9SVAorICAgICAgICBtX3NvY2tldC5zb2NrZXQucmV0dXJuX3ZhbHVlID0gbW9jay5Nb2NrKCkKKworICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV9kYXRhZ3JhbV9lbmRwb2ludCgKKyAgICAgICAgICAgIGxhbWJkYTogTXlEYXRhZ3JhbVByb3RvKGxvb3A9c2VsZi5sb29wKSwKKyAgICAgICAgICAgIGxvY2FsX2FkZHI9KCcxMjcuMC4wLjEnLCAwKSwKKyAgICAgICAgICAgIHJldXNlX2FkZHJlc3M9RmFsc2UsCisgICAgICAgICAgICByZXVzZV9wb3J0PVRydWUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgY29ybykKKworICAgIEBwYXRjaF9zb2NrZXQKKyAgICBkZWYgdGVzdF9jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnRfaXBfYWRkcihzZWxmLCBtX3NvY2tldCk6CisgICAgICAgIGRlZiBnZXRhZGRyaW5mbygqYXJncywgKiprdyk6CisgICAgICAgICAgICBzZWxmLmZhaWwoJ3Nob3VsZCBub3QgaGF2ZSBjYWxsZWQgZ2V0YWRkcmluZm8nKQorCisgICAgICAgIG1fc29ja2V0LmdldGFkZHJpbmZvID0gZ2V0YWRkcmluZm8KKyAgICAgICAgbV9zb2NrZXQuc29ja2V0LnJldHVybl92YWx1ZS5iaW5kID0gYmluZCA9IG1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5hZGRfcmVhZGVyID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLmFkZF9yZWFkZXIuX2lzX2Nvcm91dGluZSA9IEZhbHNlCisKKyAgICAgICAgcmV1c2Vwb3J0X3N1cHBvcnRlZCA9IGhhc2F0dHIoc29ja2V0LCAnU09fUkVVU0VQT1JUJykKKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnQoCisgICAgICAgICAgICBsYW1iZGE6IE15RGF0YWdyYW1Qcm90byhsb29wPXNlbGYubG9vcCksCisgICAgICAgICAgICBsb2NhbF9hZGRyPSgnMS4yLjMuNCcsIDApLAorICAgICAgICAgICAgcmV1c2VfYWRkcmVzcz1GYWxzZSwKKyAgICAgICAgICAgIHJldXNlX3BvcnQ9cmV1c2Vwb3J0X3N1cHBvcnRlZCkKKworICAgICAgICB0LCBwID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb3JvKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBiaW5kLmFzc2VydF9jYWxsZWRfd2l0aCgoJzEuMi4zLjQnLCAwKSkKKyAgICAgICAgICAgIG1fc29ja2V0LnNvY2tldC5hc3NlcnRfY2FsbGVkX3dpdGgoZmFtaWx5PW1fc29ja2V0LkFGX0lORVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvPW1fc29ja2V0LklQUFJPVE9fVURQLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPW1fc29ja2V0LlNPQ0tfREdSQU0pCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICB0LmNsb3NlKCkKKyAgICAgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKSAgIyBhbGxvdyB0cmFuc3BvcnQgdG8gY2xvc2UKKworICAgIGRlZiB0ZXN0X2FjY2VwdF9jb25uZWN0aW9uX3JldHJ5KHNlbGYpOgorICAgICAgICBzb2NrID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc29jay5hY2NlcHQuc2lkZV9lZmZlY3QgPSBCbG9ja2luZ0lPRXJyb3IoKQorCisgICAgICAgIHNlbGYubG9vcC5fYWNjZXB0X2Nvbm5lY3Rpb24oTXlQcm90bywgc29jaykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzb2NrLmNsb3NlLmNhbGxlZCkKKworICAgIEBtb2NrLnBhdGNoKCdhc3luY2lvLmJhc2VfZXZlbnRzLmxvZ2dlcicpCisgICAgZGVmIHRlc3RfYWNjZXB0X2Nvbm5lY3Rpb25fZXhjZXB0aW9uKHNlbGYsIG1fbG9nKToKKyAgICAgICAgc29jayA9IG1vY2suTW9jaygpCisgICAgICAgIHNvY2suZmlsZW5vLnJldHVybl92YWx1ZSA9IDEwCisgICAgICAgIHNvY2suYWNjZXB0LnNpZGVfZWZmZWN0ID0gT1NFcnJvcihlcnJuby5FTUZJTEUsICdUb28gbWFueSBvcGVuIGZpbGVzJykKKyAgICAgICAgc2VsZi5sb29wLnJlbW92ZV9yZWFkZXIgPSBtb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuY2FsbF9sYXRlciA9IG1vY2suTW9jaygpCisKKyAgICAgICAgc2VsZi5sb29wLl9hY2NlcHRfY29ubmVjdGlvbihNeVByb3RvLCBzb2NrKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobV9sb2cuZXJyb3IuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNvY2suY2xvc2UuY2FsbGVkKQorICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3JlYWRlci5hc3NlcnRfY2FsbGVkX3dpdGgoMTApCisgICAgICAgIHNlbGYubG9vcC5jYWxsX2xhdGVyLmFzc2VydF9jYWxsZWRfd2l0aChjb25zdGFudHMuQUNDRVBUX1JFVFJZX0RFTEFZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBzZWxmLmxvb3AuX3N0YXJ0X3NlcnZpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vY2suQU5ZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTXlQcm90bywgc29jaywgTm9uZSwgTm9uZSkKKworICAgIGRlZiB0ZXN0X2NhbGxfY29yb3V0aW5lKHNlbGYpOgorICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHNpbXBsZV9jb3JvdXRpbmUoKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBjb3JvX2Z1bmMgPSBzaW1wbGVfY29yb3V0aW5lCisgICAgICAgIGNvcm9fb2JqID0gY29yb19mdW5jKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGNvcm9fb2JqLmNsb3NlKQorICAgICAgICBmb3IgZnVuYyBpbiAoY29yb19mdW5jLCBjb3JvX29iaik6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICAgICAgc2VsZi5sb29wLmNhbGxfc29vbihmdW5jKQorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgICAgIHNlbGYubG9vcC5jYWxsX3Nvb25fdGhyZWFkc2FmZShmdW5jKQorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgICAgIHNlbGYubG9vcC5jYWxsX2xhdGVyKDYwLCBmdW5jKQorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgICAgIHNlbGYubG9vcC5jYWxsX2F0KHNlbGYubG9vcC50aW1lKCkgKyA2MCwgZnVuYykKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgICAgICBzZWxmLmxvb3AucnVuX2luX2V4ZWN1dG9yKE5vbmUsIGZ1bmMpCisKKyAgICBAbW9jay5wYXRjaCgnYXN5bmNpby5iYXNlX2V2ZW50cy5sb2dnZXInKQorICAgIGRlZiB0ZXN0X2xvZ19zbG93X2NhbGxiYWNrcyhzZWxmLCBtX2xvZ2dlcik6CisgICAgICAgIGRlZiBzdG9wX2xvb3BfY2IobG9vcCk6CisgICAgICAgICAgICBsb29wLnN0b3AoKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgc3RvcF9sb29wX2Nvcm8obG9vcCk6CisgICAgICAgICAgICB5aWVsZCBmcm9tICgpCisgICAgICAgICAgICBsb29wLnN0b3AoKQorCisgICAgICAgIGFzeW5jaW8uc2V0X2V2ZW50X2xvb3Aoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmxvb3Auc2V0X2RlYnVnKFRydWUpCisgICAgICAgIHNlbGYubG9vcC5zbG93X2NhbGxiYWNrX2R1cmF0aW9uID0gMC4wCisKKyAgICAgICAgIyBzbG93IGNhbGxiYWNrCisgICAgICAgIHNlbGYubG9vcC5jYWxsX3Nvb24oc3RvcF9sb29wX2NiLCBzZWxmLmxvb3ApCisgICAgICAgIHNlbGYubG9vcC5ydW5fZm9yZXZlcigpCisgICAgICAgIGZtdCwgKmFyZ3MgPSBtX2xvZ2dlci53YXJuaW5nLmNhbGxfYXJnc1swXQorICAgICAgICBzZWxmLmFzc2VydFJlZ2V4KGZtdCAlIHR1cGxlKGFyZ3MpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJeRXhlY3V0aW5nIDxIYW5kbGUuKnN0b3BfbG9vcF9jYi4qPiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgInRvb2sgLiogc2Vjb25kcyQiKQorCisgICAgICAgICMgc2xvdyB0YXNrCisgICAgICAgIGFzeW5jaW8uZW5zdXJlX2Z1dHVyZShzdG9wX2xvb3BfY29ybyhzZWxmLmxvb3ApLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl9mb3JldmVyKCkKKyAgICAgICAgZm10LCAqYXJncyA9IG1fbG9nZ2VyLndhcm5pbmcuY2FsbF9hcmdzWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXgoZm10ICUgdHVwbGUoYXJncyksCisgICAgICAgICAgICAgICAgICAgICAgICAgIl5FeGVjdXRpbmcgPFRhc2suKnN0b3BfbG9vcF9jb3JvLio+ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAidG9vayAuKiBzZWNvbmRzJCIpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X2V2ZW50cy5weSBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X2V2ZW50cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTc0NjA0Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3RfZXZlbnRzLnB5CkBAIC0wLDAgKzEsMjUxNyBAQAorIiIiVGVzdHMgZm9yIGV2ZW50cy5weS4iIiIKKworaW1wb3J0IGZ1bmN0b29scworaW1wb3J0IGdjCitpbXBvcnQgaW8KK2ltcG9ydCBvcworaW1wb3J0IHBsYXRmb3JtCitpbXBvcnQgcmUKK2ltcG9ydCBzaWduYWwKK2ltcG9ydCBzb2NrZXQKK3RyeToKKyAgICBpbXBvcnQgc3NsCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgc3NsID0gTm9uZQoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB0aHJlYWRpbmcKK2ltcG9ydCB0aW1lCitpbXBvcnQgZXJybm8KK2ltcG9ydCB1bml0dGVzdAorZnJvbSB1bml0dGVzdCBpbXBvcnQgbW9jaworaW1wb3J0IHdlYWtyZWYKKworCitpbXBvcnQgYXN5bmNpbworZnJvbSBhc3luY2lvIGltcG9ydCBwcm9hY3Rvcl9ldmVudHMKK2Zyb20gYXN5bmNpbyBpbXBvcnQgc2VsZWN0b3JfZXZlbnRzCitmcm9tIGFzeW5jaW8gaW1wb3J0IHNzbHByb3RvCitmcm9tIGFzeW5jaW8gaW1wb3J0IHRlc3RfdXRpbHMKK3RyeToKKyAgICBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBmcm9tIGFzeW5jaW8gaW1wb3J0IHRlc3Rfc3VwcG9ydCBhcyBzdXBwb3J0CisKKworZGVmIGRhdGFfZmlsZShmaWxlbmFtZSk6CisgICAgaWYgaGFzYXR0cihzdXBwb3J0LCAnVEVTVF9IT01FX0RJUicpOgorICAgICAgICBmdWxsbmFtZSA9IG9zLnBhdGguam9pbihzdXBwb3J0LlRFU1RfSE9NRV9ESVIsIGZpbGVuYW1lKQorICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShmdWxsbmFtZSk6CisgICAgICAgICAgICByZXR1cm4gZnVsbG5hbWUKKyAgICBmdWxsbmFtZSA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCBmaWxlbmFtZSkKKyAgICBpZiBvcy5wYXRoLmlzZmlsZShmdWxsbmFtZSk6CisgICAgICAgIHJldHVybiBmdWxsbmFtZQorICAgIHJhaXNlIEZpbGVOb3RGb3VuZEVycm9yKGZpbGVuYW1lKQorCisKK2RlZiBvc3hfdGlnZXIoKToKKyAgICAiIiJSZXR1cm4gVHJ1ZSBpZiB0aGUgcGxhdGZvcm0gaXMgTWFjIE9TIDEwLjQgb3Igb2xkZXIuIiIiCisgICAgaWYgc3lzLnBsYXRmb3JtICE9ICdkYXJ3aW4nOgorICAgICAgICByZXR1cm4gRmFsc2UKKyAgICB2ZXJzaW9uID0gcGxhdGZvcm0ubWFjX3ZlcigpWzBdCisgICAgdmVyc2lvbiA9IHR1cGxlKG1hcChpbnQsIHZlcnNpb24uc3BsaXQoJy4nKSkpCisgICAgcmV0dXJuIHZlcnNpb24gPCAoMTAsIDUpCisKKworT05MWUNFUlQgPSBkYXRhX2ZpbGUoJ3NzbF9jZXJ0LnBlbScpCitPTkxZS0VZID0gZGF0YV9maWxlKCdzc2xfa2V5LnBlbScpCitTSUdORURfQ0VSVEZJTEUgPSBkYXRhX2ZpbGUoJ2tleWNlcnQzLnBlbScpCitTSUdOSU5HX0NBID0gZGF0YV9maWxlKCdweWNhY2VydC5wZW0nKQorUEVFUkNFUlQgPSB7J3NlcmlhbE51bWJlcic6ICdCMDkyNjRCMUYyREEyMUQxJywKKyAgICAgICAgICAgICd2ZXJzaW9uJzogMSwKKyAgICAgICAgICAgICdzdWJqZWN0JzogKCgoJ2NvdW50cnlOYW1lJywgJ1hZJyksKSwKKyAgICAgICAgICAgICAgICAgICAgKCgnbG9jYWxpdHlOYW1lJywgJ0Nhc3RsZSBBbnRocmF4JyksKSwKKyAgICAgICAgICAgICAgICAgICAgKCgnb3JnYW5pemF0aW9uTmFtZScsICdQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbicpLCksCisgICAgICAgICAgICAgICAgICAgICgoJ2NvbW1vbk5hbWUnLCAnbG9jYWxob3N0JyksKSksCisgICAgICAgICAgICAnaXNzdWVyJzogKCgoJ2NvdW50cnlOYW1lJywgJ1hZJyksKSwKKyAgICAgICAgICAgICAgICAgICAgKCgnb3JnYW5pemF0aW9uTmFtZScsICdQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiBDQScpLCksCisgICAgICAgICAgICAgICAgICAgICgoJ2NvbW1vbk5hbWUnLCAnb3VyLWNhLXNlcnZlcicpLCkpLAorICAgICAgICAgICAgJ25vdEFmdGVyJzogJ05vdiAxMyAxOTo0NzowNyAyMDIyIEdNVCcsCisgICAgICAgICAgICAnbm90QmVmb3JlJzogJ0phbiAgNCAxOTo0NzowNyAyMDEzIEdNVCd9CisKKworY2xhc3MgTXlCYXNlUHJvdG8oYXN5bmNpby5Qcm90b2NvbCk6CisgICAgY29ubmVjdGVkID0gTm9uZQorICAgIGRvbmUgPSBOb25lCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbG9vcD1Ob25lKToKKyAgICAgICAgc2VsZi50cmFuc3BvcnQgPSBOb25lCisgICAgICAgIHNlbGYuc3RhdGUgPSAnSU5JVElBTCcKKyAgICAgICAgc2VsZi5uYnl0ZXMgPSAwCisgICAgICAgIGlmIGxvb3AgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLmNvbm5lY3RlZCA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9bG9vcCkKKyAgICAgICAgICAgIHNlbGYuZG9uZSA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9bG9vcCkKKworICAgIGRlZiBjb25uZWN0aW9uX21hZGUoc2VsZiwgdHJhbnNwb3J0KToKKyAgICAgICAgc2VsZi50cmFuc3BvcnQgPSB0cmFuc3BvcnQKKyAgICAgICAgYXNzZXJ0IHNlbGYuc3RhdGUgPT0gJ0lOSVRJQUwnLCBzZWxmLnN0YXRlCisgICAgICAgIHNlbGYuc3RhdGUgPSAnQ09OTkVDVEVEJworICAgICAgICBpZiBzZWxmLmNvbm5lY3RlZDoKKyAgICAgICAgICAgIHNlbGYuY29ubmVjdGVkLnNldF9yZXN1bHQoTm9uZSkKKworICAgIGRlZiBkYXRhX3JlY2VpdmVkKHNlbGYsIGRhdGEpOgorICAgICAgICBhc3NlcnQgc2VsZi5zdGF0ZSA9PSAnQ09OTkVDVEVEJywgc2VsZi5zdGF0ZQorICAgICAgICBzZWxmLm5ieXRlcyArPSBsZW4oZGF0YSkKKworICAgIGRlZiBlb2ZfcmVjZWl2ZWQoc2VsZik6CisgICAgICAgIGFzc2VydCBzZWxmLnN0YXRlID09ICdDT05ORUNURUQnLCBzZWxmLnN0YXRlCisgICAgICAgIHNlbGYuc3RhdGUgPSAnRU9GJworCisgICAgZGVmIGNvbm5lY3Rpb25fbG9zdChzZWxmLCBleGMpOgorICAgICAgICBhc3NlcnQgc2VsZi5zdGF0ZSBpbiAoJ0NPTk5FQ1RFRCcsICdFT0YnKSwgc2VsZi5zdGF0ZQorICAgICAgICBzZWxmLnN0YXRlID0gJ0NMT1NFRCcKKyAgICAgICAgaWYgc2VsZi5kb25lOgorICAgICAgICAgICAgc2VsZi5kb25lLnNldF9yZXN1bHQoTm9uZSkKKworCitjbGFzcyBNeVByb3RvKE15QmFzZVByb3RvKToKKyAgICBkZWYgY29ubmVjdGlvbl9tYWRlKHNlbGYsIHRyYW5zcG9ydCk6CisgICAgICAgIHN1cGVyKCkuY29ubmVjdGlvbl9tYWRlKHRyYW5zcG9ydCkKKyAgICAgICAgdHJhbnNwb3J0LndyaXRlKGInR0VUIC8gSFRUUC8xLjBcclxuSG9zdDogZXhhbXBsZS5jb21cclxuXHJcbicpCisKKworY2xhc3MgTXlEYXRhZ3JhbVByb3RvKGFzeW5jaW8uRGF0YWdyYW1Qcm90b2NvbCk6CisgICAgZG9uZSA9IE5vbmUKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb29wPU5vbmUpOgorICAgICAgICBzZWxmLnN0YXRlID0gJ0lOSVRJQUwnCisgICAgICAgIHNlbGYubmJ5dGVzID0gMAorICAgICAgICBpZiBsb29wIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5kb25lID0gYXN5bmNpby5GdXR1cmUobG9vcD1sb29wKQorCisgICAgZGVmIGNvbm5lY3Rpb25fbWFkZShzZWxmLCB0cmFuc3BvcnQpOgorICAgICAgICBzZWxmLnRyYW5zcG9ydCA9IHRyYW5zcG9ydAorICAgICAgICBhc3NlcnQgc2VsZi5zdGF0ZSA9PSAnSU5JVElBTCcsIHNlbGYuc3RhdGUKKyAgICAgICAgc2VsZi5zdGF0ZSA9ICdJTklUSUFMSVpFRCcKKworICAgIGRlZiBkYXRhZ3JhbV9yZWNlaXZlZChzZWxmLCBkYXRhLCBhZGRyKToKKyAgICAgICAgYXNzZXJ0IHNlbGYuc3RhdGUgPT0gJ0lOSVRJQUxJWkVEJywgc2VsZi5zdGF0ZQorICAgICAgICBzZWxmLm5ieXRlcyArPSBsZW4oZGF0YSkKKworICAgIGRlZiBlcnJvcl9yZWNlaXZlZChzZWxmLCBleGMpOgorICAgICAgICBhc3NlcnQgc2VsZi5zdGF0ZSA9PSAnSU5JVElBTElaRUQnLCBzZWxmLnN0YXRlCisKKyAgICBkZWYgY29ubmVjdGlvbl9sb3N0KHNlbGYsIGV4Yyk6CisgICAgICAgIGFzc2VydCBzZWxmLnN0YXRlID09ICdJTklUSUFMSVpFRCcsIHNlbGYuc3RhdGUKKyAgICAgICAgc2VsZi5zdGF0ZSA9ICdDTE9TRUQnCisgICAgICAgIGlmIHNlbGYuZG9uZToKKyAgICAgICAgICAgIHNlbGYuZG9uZS5zZXRfcmVzdWx0KE5vbmUpCisKKworY2xhc3MgTXlSZWFkUGlwZVByb3RvKGFzeW5jaW8uUHJvdG9jb2wpOgorICAgIGRvbmUgPSBOb25lCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbG9vcD1Ob25lKToKKyAgICAgICAgc2VsZi5zdGF0ZSA9IFsnSU5JVElBTCddCisgICAgICAgIHNlbGYubmJ5dGVzID0gMAorICAgICAgICBzZWxmLnRyYW5zcG9ydCA9IE5vbmUKKyAgICAgICAgaWYgbG9vcCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuZG9uZSA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9bG9vcCkKKworICAgIGRlZiBjb25uZWN0aW9uX21hZGUoc2VsZiwgdHJhbnNwb3J0KToKKyAgICAgICAgc2VsZi50cmFuc3BvcnQgPSB0cmFuc3BvcnQKKyAgICAgICAgYXNzZXJ0IHNlbGYuc3RhdGUgPT0gWydJTklUSUFMJ10sIHNlbGYuc3RhdGUKKyAgICAgICAgc2VsZi5zdGF0ZS5hcHBlbmQoJ0NPTk5FQ1RFRCcpCisKKyAgICBkZWYgZGF0YV9yZWNlaXZlZChzZWxmLCBkYXRhKToKKyAgICAgICAgYXNzZXJ0IHNlbGYuc3RhdGUgPT0gWydJTklUSUFMJywgJ0NPTk5FQ1RFRCddLCBzZWxmLnN0YXRlCisgICAgICAgIHNlbGYubmJ5dGVzICs9IGxlbihkYXRhKQorCisgICAgZGVmIGVvZl9yZWNlaXZlZChzZWxmKToKKyAgICAgICAgYXNzZXJ0IHNlbGYuc3RhdGUgPT0gWydJTklUSUFMJywgJ0NPTk5FQ1RFRCddLCBzZWxmLnN0YXRlCisgICAgICAgIHNlbGYuc3RhdGUuYXBwZW5kKCdFT0YnKQorCisgICAgZGVmIGNvbm5lY3Rpb25fbG9zdChzZWxmLCBleGMpOgorICAgICAgICBpZiAnRU9GJyBub3QgaW4gc2VsZi5zdGF0ZToKKyAgICAgICAgICAgIHNlbGYuc3RhdGUuYXBwZW5kKCdFT0YnKSAgIyBJdCBpcyBva2F5IGlmIEVPRiBpcyBtaXNzZWQuCisgICAgICAgIGFzc2VydCBzZWxmLnN0YXRlID09IFsnSU5JVElBTCcsICdDT05ORUNURUQnLCAnRU9GJ10sIHNlbGYuc3RhdGUKKyAgICAgICAgc2VsZi5zdGF0ZS5hcHBlbmQoJ0NMT1NFRCcpCisgICAgICAgIGlmIHNlbGYuZG9uZToKKyAgICAgICAgICAgIHNlbGYuZG9uZS5zZXRfcmVzdWx0KE5vbmUpCisKKworY2xhc3MgTXlXcml0ZVBpcGVQcm90byhhc3luY2lvLkJhc2VQcm90b2NvbCk6CisgICAgZG9uZSA9IE5vbmUKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb29wPU5vbmUpOgorICAgICAgICBzZWxmLnN0YXRlID0gJ0lOSVRJQUwnCisgICAgICAgIHNlbGYudHJhbnNwb3J0ID0gTm9uZQorICAgICAgICBpZiBsb29wIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5kb25lID0gYXN5bmNpby5GdXR1cmUobG9vcD1sb29wKQorCisgICAgZGVmIGNvbm5lY3Rpb25fbWFkZShzZWxmLCB0cmFuc3BvcnQpOgorICAgICAgICBzZWxmLnRyYW5zcG9ydCA9IHRyYW5zcG9ydAorICAgICAgICBhc3NlcnQgc2VsZi5zdGF0ZSA9PSAnSU5JVElBTCcsIHNlbGYuc3RhdGUKKyAgICAgICAgc2VsZi5zdGF0ZSA9ICdDT05ORUNURUQnCisKKyAgICBkZWYgY29ubmVjdGlvbl9sb3N0KHNlbGYsIGV4Yyk6CisgICAgICAgIGFzc2VydCBzZWxmLnN0YXRlID09ICdDT05ORUNURUQnLCBzZWxmLnN0YXRlCisgICAgICAgIHNlbGYuc3RhdGUgPSAnQ0xPU0VEJworICAgICAgICBpZiBzZWxmLmRvbmU6CisgICAgICAgICAgICBzZWxmLmRvbmUuc2V0X3Jlc3VsdChOb25lKQorCisKK2NsYXNzIE15U3VicHJvY2Vzc1Byb3RvY29sKGFzeW5jaW8uU3VicHJvY2Vzc1Byb3RvY29sKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb29wKToKKyAgICAgICAgc2VsZi5zdGF0ZSA9ICdJTklUSUFMJworICAgICAgICBzZWxmLnRyYW5zcG9ydCA9IE5vbmUKKyAgICAgICAgc2VsZi5jb25uZWN0ZWQgPSBhc3luY2lvLkZ1dHVyZShsb29wPWxvb3ApCisgICAgICAgIHNlbGYuY29tcGxldGVkID0gYXN5bmNpby5GdXR1cmUobG9vcD1sb29wKQorICAgICAgICBzZWxmLmRpc2Nvbm5lY3RzID0ge2ZkOiBhc3luY2lvLkZ1dHVyZShsb29wPWxvb3ApIGZvciBmZCBpbiByYW5nZSgzKX0KKyAgICAgICAgc2VsZi5kYXRhID0gezE6IGInJywgMjogYicnfQorICAgICAgICBzZWxmLnJldHVybmNvZGUgPSBOb25lCisgICAgICAgIHNlbGYuZ290X2RhdGEgPSB7MTogYXN5bmNpby5FdmVudChsb29wPWxvb3ApLAorICAgICAgICAgICAgICAgICAgICAgICAgIDI6IGFzeW5jaW8uRXZlbnQobG9vcD1sb29wKX0KKworICAgIGRlZiBjb25uZWN0aW9uX21hZGUoc2VsZiwgdHJhbnNwb3J0KToKKyAgICAgICAgc2VsZi50cmFuc3BvcnQgPSB0cmFuc3BvcnQKKyAgICAgICAgYXNzZXJ0IHNlbGYuc3RhdGUgPT0gJ0lOSVRJQUwnLCBzZWxmLnN0YXRlCisgICAgICAgIHNlbGYuc3RhdGUgPSAnQ09OTkVDVEVEJworICAgICAgICBzZWxmLmNvbm5lY3RlZC5zZXRfcmVzdWx0KE5vbmUpCisKKyAgICBkZWYgY29ubmVjdGlvbl9sb3N0KHNlbGYsIGV4Yyk6CisgICAgICAgIGFzc2VydCBzZWxmLnN0YXRlID09ICdDT05ORUNURUQnLCBzZWxmLnN0YXRlCisgICAgICAgIHNlbGYuc3RhdGUgPSAnQ0xPU0VEJworICAgICAgICBzZWxmLmNvbXBsZXRlZC5zZXRfcmVzdWx0KE5vbmUpCisKKyAgICBkZWYgcGlwZV9kYXRhX3JlY2VpdmVkKHNlbGYsIGZkLCBkYXRhKToKKyAgICAgICAgYXNzZXJ0IHNlbGYuc3RhdGUgPT0gJ0NPTk5FQ1RFRCcsIHNlbGYuc3RhdGUKKyAgICAgICAgc2VsZi5kYXRhW2ZkXSArPSBkYXRhCisgICAgICAgIHNlbGYuZ290X2RhdGFbZmRdLnNldCgpCisKKyAgICBkZWYgcGlwZV9jb25uZWN0aW9uX2xvc3Qoc2VsZiwgZmQsIGV4Yyk6CisgICAgICAgIGFzc2VydCBzZWxmLnN0YXRlID09ICdDT05ORUNURUQnLCBzZWxmLnN0YXRlCisgICAgICAgIGlmIGV4YzoKKyAgICAgICAgICAgIHNlbGYuZGlzY29ubmVjdHNbZmRdLnNldF9leGNlcHRpb24oZXhjKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5kaXNjb25uZWN0c1tmZF0uc2V0X3Jlc3VsdChleGMpCisKKyAgICBkZWYgcHJvY2Vzc19leGl0ZWQoc2VsZik6CisgICAgICAgIGFzc2VydCBzZWxmLnN0YXRlID09ICdDT05ORUNURUQnLCBzZWxmLnN0YXRlCisgICAgICAgIHNlbGYucmV0dXJuY29kZSA9IHNlbGYudHJhbnNwb3J0LmdldF9yZXR1cm5jb2RlKCkKKworCitjbGFzcyBFdmVudExvb3BUZXN0c01peGluOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzdXBlcigpLnNldFVwKCkKKyAgICAgICAgc2VsZi5sb29wID0gc2VsZi5jcmVhdGVfZXZlbnRfbG9vcCgpCisgICAgICAgIHNlbGYuc2V0X2V2ZW50X2xvb3Aoc2VsZi5sb29wKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICAjIGp1c3QgaW4gY2FzZSBpZiB3ZSBoYXZlIHRyYW5zcG9ydCBjbG9zZSBjYWxsYmFja3MKKyAgICAgICAgaWYgbm90IHNlbGYubG9vcC5pc19jbG9zZWQoKToKKyAgICAgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorCisgICAgICAgIHNlbGYubG9vcC5jbG9zZSgpCisgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICBzdXBlcigpLnRlYXJEb3duKCkKKworICAgIGRlZiB0ZXN0X3J1bl91bnRpbF9jb21wbGV0ZV9uZXN0aW5nKHNlbGYpOgorICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGNvcm8xKCk6CisgICAgICAgICAgICB5aWVsZAorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgY29ybzIoKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmxvb3AuaXNfcnVubmluZygpKQorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb3JvMSgpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgUnVudGltZUVycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBjb3JvMigpKQorCisgICAgIyBOb3RlOiBiZWNhdXNlIG9mIHRoZSBkZWZhdWx0IFdpbmRvd3MgdGltaW5nIGdyYW51bGFyaXR5IG9mCisgICAgIyAxNS42IG1zZWMsIHdlIHVzZSBmYWlybHkgbG9uZyBzbGVlcCB0aW1lcyBoZXJlICh+MTAwIG1zZWMpLgorCisgICAgZGVmIHRlc3RfcnVuX3VudGlsX2NvbXBsZXRlKHNlbGYpOgorICAgICAgICB0MCA9IHNlbGYubG9vcC50aW1lKCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShhc3luY2lvLnNsZWVwKDAuMSwgbG9vcD1zZWxmLmxvb3ApKQorICAgICAgICB0MSA9IHNlbGYubG9vcC50aW1lKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDAuMDggPD0gdDEtdDAgPD0gMC44LCB0MS10MCkKKworICAgIGRlZiB0ZXN0X3J1bl91bnRpbF9jb21wbGV0ZV9zdG9wcGVkKHNlbGYpOgorICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGNiKCk6CisgICAgICAgICAgICBzZWxmLmxvb3Auc3RvcCgpCisgICAgICAgICAgICB5aWVsZCBmcm9tIGFzeW5jaW8uc2xlZXAoMC4xLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdGFzayA9IGNiKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCB0YXNrKQorCisgICAgZGVmIHRlc3RfY2FsbF9sYXRlcihzZWxmKToKKyAgICAgICAgcmVzdWx0cyA9IFtdCisKKyAgICAgICAgZGVmIGNhbGxiYWNrKGFyZyk6CisgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChhcmcpCisgICAgICAgICAgICBzZWxmLmxvb3Auc3RvcCgpCisKKyAgICAgICAgc2VsZi5sb29wLmNhbGxfbGF0ZXIoMC4xLCBjYWxsYmFjaywgJ2hlbGxvIHdvcmxkJykKKyAgICAgICAgdDAgPSB0aW1lLm1vbm90b25pYygpCisgICAgICAgIHNlbGYubG9vcC5ydW5fZm9yZXZlcigpCisgICAgICAgIHQxID0gdGltZS5tb25vdG9uaWMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdHMsIFsnaGVsbG8gd29ybGQnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDAuMDggPD0gdDEtdDAgPD0gMC44LCB0MS10MCkKKworICAgIGRlZiB0ZXN0X2NhbGxfc29vbihzZWxmKToKKyAgICAgICAgcmVzdWx0cyA9IFtdCisKKyAgICAgICAgZGVmIGNhbGxiYWNrKGFyZzEsIGFyZzIpOgorICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoKGFyZzEsIGFyZzIpKQorICAgICAgICAgICAgc2VsZi5sb29wLnN0b3AoKQorCisgICAgICAgIHNlbGYubG9vcC5jYWxsX3Nvb24oY2FsbGJhY2ssICdoZWxsbycsICd3b3JsZCcpCisgICAgICAgIHNlbGYubG9vcC5ydW5fZm9yZXZlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0cywgWygnaGVsbG8nLCAnd29ybGQnKV0pCisKKyAgICBkZWYgdGVzdF9jYWxsX3Nvb25fdGhyZWFkc2FmZShzZWxmKToKKyAgICAgICAgcmVzdWx0cyA9IFtdCisgICAgICAgIGxvY2sgPSB0aHJlYWRpbmcuTG9jaygpCisKKyAgICAgICAgZGVmIGNhbGxiYWNrKGFyZyk6CisgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChhcmcpCisgICAgICAgICAgICBpZiBsZW4ocmVzdWx0cykgPj0gMjoKKyAgICAgICAgICAgICAgICBzZWxmLmxvb3Auc3RvcCgpCisKKyAgICAgICAgZGVmIHJ1bl9pbl90aHJlYWQoKToKKyAgICAgICAgICAgIHNlbGYubG9vcC5jYWxsX3Nvb25fdGhyZWFkc2FmZShjYWxsYmFjaywgJ2hlbGxvJykKKyAgICAgICAgICAgIGxvY2sucmVsZWFzZSgpCisKKyAgICAgICAgbG9jay5hY3F1aXJlKCkKKyAgICAgICAgdCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PXJ1bl9pbl90aHJlYWQpCisgICAgICAgIHQuc3RhcnQoKQorCisgICAgICAgIHdpdGggbG9jazoKKyAgICAgICAgICAgIHNlbGYubG9vcC5jYWxsX3Nvb24oY2FsbGJhY2ssICd3b3JsZCcpCisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX2ZvcmV2ZXIoKQorICAgICAgICB0LmpvaW4oKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdHMsIFsnaGVsbG8nLCAnd29ybGQnXSkKKworICAgIGRlZiB0ZXN0X2NhbGxfc29vbl90aHJlYWRzYWZlX3NhbWVfdGhyZWFkKHNlbGYpOgorICAgICAgICByZXN1bHRzID0gW10KKworICAgICAgICBkZWYgY2FsbGJhY2soYXJnKToKKyAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKGFyZykKKyAgICAgICAgICAgIGlmIGxlbihyZXN1bHRzKSA+PSAyOgorICAgICAgICAgICAgICAgIHNlbGYubG9vcC5zdG9wKCkKKworICAgICAgICBzZWxmLmxvb3AuY2FsbF9zb29uX3RocmVhZHNhZmUoY2FsbGJhY2ssICdoZWxsbycpCisgICAgICAgIHNlbGYubG9vcC5jYWxsX3Nvb24oY2FsbGJhY2ssICd3b3JsZCcpCisgICAgICAgIHNlbGYubG9vcC5ydW5fZm9yZXZlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0cywgWydoZWxsbycsICd3b3JsZCddKQorCisgICAgZGVmIHRlc3RfcnVuX2luX2V4ZWN1dG9yKHNlbGYpOgorICAgICAgICBkZWYgcnVuKGFyZyk6CisgICAgICAgICAgICByZXR1cm4gKGFyZywgdGhyZWFkaW5nLmdldF9pZGVudCgpKQorICAgICAgICBmMiA9IHNlbGYubG9vcC5ydW5faW5fZXhlY3V0b3IoTm9uZSwgcnVuLCAneW8nKQorICAgICAgICByZXMsIHRocmVhZF9pZCA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZjIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCAneW8nKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHRocmVhZF9pZCwgdGhyZWFkaW5nLmdldF9pZGVudCgpKQorCisgICAgZGVmIHRlc3RfcmVhZGVyX2NhbGxiYWNrKHNlbGYpOgorICAgICAgICByLCB3ID0gdGVzdF91dGlscy5zb2NrZXRwYWlyKCkKKyAgICAgICAgci5zZXRibG9ja2luZyhGYWxzZSkKKyAgICAgICAgYnl0ZXNfcmVhZCA9IGJ5dGVhcnJheSgpCisKKyAgICAgICAgZGVmIHJlYWRlcigpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGRhdGEgPSByLnJlY3YoMTAyNCkKKyAgICAgICAgICAgIGV4Y2VwdCBCbG9ja2luZ0lPRXJyb3I6CisgICAgICAgICAgICAgICAgIyBTcHVyaW91cyByZWFkaW5lc3Mgbm90aWZpY2F0aW9ucyBhcmUgcG9zc2libGUKKyAgICAgICAgICAgICAgICAjIGF0IGxlYXN0IG9uIExpbnV4IC0tIHNlZSBtYW4gc2VsZWN0LgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgaWYgZGF0YToKKyAgICAgICAgICAgICAgICBieXRlc19yZWFkLmV4dGVuZChkYXRhKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5sb29wLnJlbW92ZV9yZWFkZXIoci5maWxlbm8oKSkpCisgICAgICAgICAgICAgICAgci5jbG9zZSgpCisKKyAgICAgICAgc2VsZi5sb29wLmFkZF9yZWFkZXIoci5maWxlbm8oKSwgcmVhZGVyKQorICAgICAgICBzZWxmLmxvb3AuY2FsbF9zb29uKHcuc2VuZCwgYidhYmMnKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl91bnRpbChzZWxmLmxvb3AsIGxhbWJkYTogbGVuKGJ5dGVzX3JlYWQpID49IDMpCisgICAgICAgIHNlbGYubG9vcC5jYWxsX3Nvb24ody5zZW5kLCBiJ2RlZicpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX3VudGlsKHNlbGYubG9vcCwgbGFtYmRhOiBsZW4oYnl0ZXNfcmVhZCkgPj0gNikKKyAgICAgICAgc2VsZi5sb29wLmNhbGxfc29vbih3LmNsb3NlKQorICAgICAgICBzZWxmLmxvb3AuY2FsbF9zb29uKHNlbGYubG9vcC5zdG9wKQorICAgICAgICBzZWxmLmxvb3AucnVuX2ZvcmV2ZXIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ5dGVzX3JlYWQsIGInYWJjZGVmJykKKworICAgIGRlZiB0ZXN0X3dyaXRlcl9jYWxsYmFjayhzZWxmKToKKyAgICAgICAgciwgdyA9IHRlc3RfdXRpbHMuc29ja2V0cGFpcigpCisgICAgICAgIHcuc2V0YmxvY2tpbmcoRmFsc2UpCisKKyAgICAgICAgZGVmIHdyaXRlcihkYXRhKToKKyAgICAgICAgICAgIHcuc2VuZChkYXRhKQorICAgICAgICAgICAgc2VsZi5sb29wLnN0b3AoKQorCisgICAgICAgIGRhdGEgPSBiJ3gnICogMTAyNAorICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlcih3LmZpbGVubygpLCB3cml0ZXIsIGRhdGEpCisgICAgICAgIHNlbGYubG9vcC5ydW5fZm9yZXZlcigpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubG9vcC5yZW1vdmVfd3JpdGVyKHcuZmlsZW5vKCkpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5yZW1vdmVfd3JpdGVyKHcuZmlsZW5vKCkpKQorCisgICAgICAgIHcuY2xvc2UoKQorICAgICAgICByZWFkID0gci5yZWN2KGxlbihkYXRhKSAqIDIpCisgICAgICAgIHIuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWQsIGRhdGEpCisKKyAgICBkZWYgX2Jhc2V0ZXN0X3NvY2tfY2xpZW50X29wcyhzZWxmLCBodHRwZCwgc29jayk6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHNlbGYubG9vcCwgcHJvYWN0b3JfZXZlbnRzLkJhc2VQcm9hY3RvckV2ZW50TG9vcCk6CisgICAgICAgICAgICAjIGluIGRlYnVnIG1vZGUsIHNvY2tldCBvcGVyYXRpb25zIG11c3QgZmFpbAorICAgICAgICAgICAgIyBpZiB0aGUgc29ja2V0IGlzIG5vdCBpbiBibG9ja2luZyBtb2RlCisgICAgICAgICAgICBzZWxmLmxvb3Auc2V0X2RlYnVnKFRydWUpCisgICAgICAgICAgICBzb2NrLnNldGJsb2NraW5nKFRydWUpCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoCisgICAgICAgICAgICAgICAgICAgIHNlbGYubG9vcC5zb2NrX2Nvbm5lY3Qoc29jaywgaHR0cGQuYWRkcmVzcykpCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoCisgICAgICAgICAgICAgICAgICAgIHNlbGYubG9vcC5zb2NrX3NlbmRhbGwoc29jaywgYidHRVQgLyBIVFRQLzEuMFxyXG5cclxuJykpCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoCisgICAgICAgICAgICAgICAgICAgIHNlbGYubG9vcC5zb2NrX3JlY3Yoc29jaywgMTAyNCkpCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoCisgICAgICAgICAgICAgICAgICAgIHNlbGYubG9vcC5zb2NrX2FjY2VwdChzb2NrKSkKKworICAgICAgICAjIHRlc3QgaW4gbm9uLWJsb2NraW5nIG1vZGUKKyAgICAgICAgc29jay5zZXRibG9ja2luZyhGYWxzZSkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSgKKyAgICAgICAgICAgIHNlbGYubG9vcC5zb2NrX2Nvbm5lY3Qoc29jaywgaHR0cGQuYWRkcmVzcykpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoCisgICAgICAgICAgICBzZWxmLmxvb3Auc29ja19zZW5kYWxsKHNvY2ssIGInR0VUIC8gSFRUUC8xLjBcclxuXHJcbicpKQorICAgICAgICBkYXRhID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSgKKyAgICAgICAgICAgIHNlbGYubG9vcC5zb2NrX3JlY3Yoc29jaywgMTAyNCkpCisgICAgICAgICMgY29uc3VtZSBkYXRhCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoCisgICAgICAgICAgICBzZWxmLmxvb3Auc29ja19yZWN2KHNvY2ssIDEwMjQpKQorICAgICAgICBzb2NrLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRhdGEuc3RhcnRzd2l0aChiJ0hUVFAvMS4wIDIwMCBPSycpKQorCisgICAgZGVmIHRlc3Rfc29ja19jbGllbnRfb3BzKHNlbGYpOgorICAgICAgICB3aXRoIHRlc3RfdXRpbHMucnVuX3Rlc3Rfc2VydmVyKCkgYXMgaHR0cGQ6CisgICAgICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldCgpCisgICAgICAgICAgICBzZWxmLl9iYXNldGVzdF9zb2NrX2NsaWVudF9vcHMoaHR0cGQsIHNvY2spCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNvY2tldCwgJ0FGX1VOSVgnKSwgJ05vIFVOSVggU29ja2V0cycpCisgICAgZGVmIHRlc3RfdW5peF9zb2NrX2NsaWVudF9vcHMoc2VsZik6CisgICAgICAgIHdpdGggdGVzdF91dGlscy5ydW5fdGVzdF91bml4X3NlcnZlcigpIGFzIGh0dHBkOgorICAgICAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX1VOSVgpCisgICAgICAgICAgICBzZWxmLl9iYXNldGVzdF9zb2NrX2NsaWVudF9vcHMoaHR0cGQsIHNvY2spCisKKyAgICBkZWYgdGVzdF9zb2NrX2NsaWVudF9mYWlsKHNlbGYpOgorICAgICAgICAjIE1ha2Ugc3VyZSB0aGF0IHdlIHdpbGwgZ2V0IGFuIHVudXNlZCBwb3J0CisgICAgICAgIGFkZHJlc3MgPSBOb25lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHMgPSBzb2NrZXQuc29ja2V0KCkKKyAgICAgICAgICAgIHMuYmluZCgoJzEyNy4wLjAuMScsIDApKQorICAgICAgICAgICAgYWRkcmVzcyA9IHMuZ2V0c29ja25hbWUoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgcy5jbG9zZSgpCisKKyAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoKQorICAgICAgICBzb2NrLnNldGJsb2NraW5nKEZhbHNlKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKENvbm5lY3Rpb25SZWZ1c2VkRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSgKKyAgICAgICAgICAgICAgICBzZWxmLmxvb3Auc29ja19jb25uZWN0KHNvY2ssIGFkZHJlc3MpKQorICAgICAgICBzb2NrLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X3NvY2tfYWNjZXB0KHNlbGYpOgorICAgICAgICBsaXN0ZW5lciA9IHNvY2tldC5zb2NrZXQoKQorICAgICAgICBsaXN0ZW5lci5zZXRibG9ja2luZyhGYWxzZSkKKyAgICAgICAgbGlzdGVuZXIuYmluZCgoJzEyNy4wLjAuMScsIDApKQorICAgICAgICBsaXN0ZW5lci5saXN0ZW4oMSkKKyAgICAgICAgY2xpZW50ID0gc29ja2V0LnNvY2tldCgpCisgICAgICAgIGNsaWVudC5jb25uZWN0KGxpc3RlbmVyLmdldHNvY2tuYW1lKCkpCisKKyAgICAgICAgZiA9IHNlbGYubG9vcC5zb2NrX2FjY2VwdChsaXN0ZW5lcikKKyAgICAgICAgY29ubiwgYWRkciA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb25uLmdldHRpbWVvdXQoKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhZGRyLCBjbGllbnQuZ2V0c29ja25hbWUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbGllbnQuZ2V0cGVlcm5hbWUoKSwgbGlzdGVuZXIuZ2V0c29ja25hbWUoKSkKKyAgICAgICAgY2xpZW50LmNsb3NlKCkKKyAgICAgICAgY29ubi5jbG9zZSgpCisgICAgICAgIGxpc3RlbmVyLmNsb3NlKCkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc2lnbmFsLCAnU0lHS0lMTCcpLCAnTm8gU0lHS0lMTCcpCisgICAgZGVmIHRlc3RfYWRkX3NpZ25hbF9oYW5kbGVyKHNlbGYpOgorICAgICAgICBjYXVnaHQgPSAwCisKKyAgICAgICAgZGVmIG15X2hhbmRsZXIoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIGNhdWdodAorICAgICAgICAgICAgY2F1Z2h0ICs9IDEKKworICAgICAgICAjIENoZWNrIGVycm9yIGJlaGF2aW9yIGZpcnN0LgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFR5cGVFcnJvciwgc2VsZi5sb29wLmFkZF9zaWduYWxfaGFuZGxlciwgJ2Jvb20nLCBteV9oYW5kbGVyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFR5cGVFcnJvciwgc2VsZi5sb29wLnJlbW92ZV9zaWduYWxfaGFuZGxlciwgJ2Jvb20nKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFZhbHVlRXJyb3IsIHNlbGYubG9vcC5hZGRfc2lnbmFsX2hhbmRsZXIsIHNpZ25hbC5OU0lHKzEsCisgICAgICAgICAgICBteV9oYW5kbGVyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFZhbHVlRXJyb3IsIHNlbGYubG9vcC5yZW1vdmVfc2lnbmFsX2hhbmRsZXIsIHNpZ25hbC5OU0lHKzEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgVmFsdWVFcnJvciwgc2VsZi5sb29wLmFkZF9zaWduYWxfaGFuZGxlciwgMCwgbXlfaGFuZGxlcikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBWYWx1ZUVycm9yLCBzZWxmLmxvb3AucmVtb3ZlX3NpZ25hbF9oYW5kbGVyLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFZhbHVlRXJyb3IsIHNlbGYubG9vcC5hZGRfc2lnbmFsX2hhbmRsZXIsIC0xLCBteV9oYW5kbGVyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFZhbHVlRXJyb3IsIHNlbGYubG9vcC5yZW1vdmVfc2lnbmFsX2hhbmRsZXIsIC0xKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFJ1bnRpbWVFcnJvciwgc2VsZi5sb29wLmFkZF9zaWduYWxfaGFuZGxlciwgc2lnbmFsLlNJR0tJTEwsCisgICAgICAgICAgICBteV9oYW5kbGVyKQorICAgICAgICAjIFJlbW92aW5nIFNJR0tJTEwgZG9lc24ndCByYWlzZSwgc2luY2Ugd2UgZG9uJ3QgY2FsbCBzaWduYWwoKS4KKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3AucmVtb3ZlX3NpZ25hbF9oYW5kbGVyKHNpZ25hbC5TSUdLSUxMKSkKKyAgICAgICAgIyBOb3cgc2V0IGEgaGFuZGxlciBhbmQgaGFuZGxlIGl0LgorICAgICAgICBzZWxmLmxvb3AuYWRkX3NpZ25hbF9oYW5kbGVyKHNpZ25hbC5TSUdJTlQsIG15X2hhbmRsZXIpCisKKyAgICAgICAgb3Mua2lsbChvcy5nZXRwaWQoKSwgc2lnbmFsLlNJR0lOVCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fdW50aWwoc2VsZi5sb29wLCBsYW1iZGE6IGNhdWdodCkKKworICAgICAgICAjIFJlbW92aW5nIGl0IHNob3VsZCByZXN0b3JlIHRoZSBkZWZhdWx0IGhhbmRsZXIuCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmxvb3AucmVtb3ZlX3NpZ25hbF9oYW5kbGVyKHNpZ25hbC5TSUdJTlQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpZ25hbC5nZXRzaWduYWwoc2lnbmFsLlNJR0lOVCksCisgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmFsLmRlZmF1bHRfaW50X2hhbmRsZXIpCisgICAgICAgICMgUmVtb3ZpbmcgYWdhaW4gcmV0dXJucyBGYWxzZS4KKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3AucmVtb3ZlX3NpZ25hbF9oYW5kbGVyKHNpZ25hbC5TSUdJTlQpKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzaWduYWwsICdTSUdBTFJNJyksICdObyBTSUdBTFJNJykKKyAgICBkZWYgdGVzdF9zaWduYWxfaGFuZGxpbmdfd2hpbGVfc2VsZWN0aW5nKHNlbGYpOgorICAgICAgICAjIFRlc3Qgd2l0aCBhIHNpZ25hbCBhY3R1YWxseSBhcnJpdmluZyBkdXJpbmcgYSBzZWxlY3QoKSBjYWxsLgorICAgICAgICBjYXVnaHQgPSAwCisKKyAgICAgICAgZGVmIG15X2hhbmRsZXIoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIGNhdWdodAorICAgICAgICAgICAgY2F1Z2h0ICs9IDEKKyAgICAgICAgICAgIHNlbGYubG9vcC5zdG9wKCkKKworICAgICAgICBzZWxmLmxvb3AuYWRkX3NpZ25hbF9oYW5kbGVyKHNpZ25hbC5TSUdBTFJNLCBteV9oYW5kbGVyKQorCisgICAgICAgIHNpZ25hbC5zZXRpdGltZXIoc2lnbmFsLklUSU1FUl9SRUFMLCAwLjAxLCAwKSAgIyBTZW5kIFNJR0FMUk0gb25jZS4KKyAgICAgICAgc2VsZi5sb29wLnJ1bl9mb3JldmVyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYXVnaHQsIDEpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNpZ25hbCwgJ1NJR0FMUk0nKSwgJ05vIFNJR0FMUk0nKQorICAgIGRlZiB0ZXN0X3NpZ25hbF9oYW5kbGluZ19hcmdzKHNlbGYpOgorICAgICAgICBzb21lX2FyZ3MgPSAoNDIsKQorICAgICAgICBjYXVnaHQgPSAwCisKKyAgICAgICAgZGVmIG15X2hhbmRsZXIoKmFyZ3MpOgorICAgICAgICAgICAgbm9ubG9jYWwgY2F1Z2h0CisgICAgICAgICAgICBjYXVnaHQgKz0gMQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhcmdzLCBzb21lX2FyZ3MpCisKKyAgICAgICAgc2VsZi5sb29wLmFkZF9zaWduYWxfaGFuZGxlcihzaWduYWwuU0lHQUxSTSwgbXlfaGFuZGxlciwgKnNvbWVfYXJncykKKworICAgICAgICBzaWduYWwuc2V0aXRpbWVyKHNpZ25hbC5JVElNRVJfUkVBTCwgMC4xLCAwKSAgIyBTZW5kIFNJR0FMUk0gb25jZS4KKyAgICAgICAgc2VsZi5sb29wLmNhbGxfbGF0ZXIoMC41LCBzZWxmLmxvb3Auc3RvcCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl9mb3JldmVyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYXVnaHQsIDEpCisKKyAgICBkZWYgX2Jhc2V0ZXN0X2NyZWF0ZV9jb25uZWN0aW9uKHNlbGYsIGNvbm5lY3Rpb25fZnV0LCBjaGVja19zb2NrbmFtZT1UcnVlKToKKyAgICAgICAgdHIsIHByID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb25uZWN0aW9uX2Z1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHRyLCBhc3luY2lvLlRyYW5zcG9ydCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHByLCBhc3luY2lvLlByb3RvY29sKQorICAgICAgICBzZWxmLmFzc2VydElzKHByLnRyYW5zcG9ydCwgdHIpCisgICAgICAgIGlmIGNoZWNrX3NvY2tuYW1lOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUodHIuZ2V0X2V4dHJhX2luZm8oJ3NvY2tuYW1lJykpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHIuZG9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKHByLm5ieXRlcywgMCkKKyAgICAgICAgdHIuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX2Nvbm5lY3Rpb24oc2VsZik6CisgICAgICAgIHdpdGggdGVzdF91dGlscy5ydW5fdGVzdF9zZXJ2ZXIoKSBhcyBodHRwZDoKKyAgICAgICAgICAgIGNvbm5fZnV0ID0gc2VsZi5sb29wLmNyZWF0ZV9jb25uZWN0aW9uKAorICAgICAgICAgICAgICAgIGxhbWJkYTogTXlQcm90byhsb29wPXNlbGYubG9vcCksICpodHRwZC5hZGRyZXNzKQorICAgICAgICAgICAgc2VsZi5fYmFzZXRlc3RfY3JlYXRlX2Nvbm5lY3Rpb24oY29ubl9mdXQpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNvY2tldCwgJ0FGX1VOSVgnKSwgJ05vIFVOSVggU29ja2V0cycpCisgICAgZGVmIHRlc3RfY3JlYXRlX3VuaXhfY29ubmVjdGlvbihzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMjA2ODI6IE9uIE1hYyBPUyBYIFRpZ2VyLCBnZXRzb2NrbmFtZSgpIHJldHVybnMgYQorICAgICAgICAjIHplcm8tbGVuZ3RoIGFkZHJlc3MgZm9yIFVOSVggc29ja2V0LgorICAgICAgICBjaGVja19zb2NrbmFtZSA9IG5vdCBvc3hfdGlnZXIoKQorCisgICAgICAgIHdpdGggdGVzdF91dGlscy5ydW5fdGVzdF91bml4X3NlcnZlcigpIGFzIGh0dHBkOgorICAgICAgICAgICAgY29ubl9mdXQgPSBzZWxmLmxvb3AuY3JlYXRlX3VuaXhfY29ubmVjdGlvbigKKyAgICAgICAgICAgICAgICBsYW1iZGE6IE15UHJvdG8obG9vcD1zZWxmLmxvb3ApLCBodHRwZC5hZGRyZXNzKQorICAgICAgICAgICAgc2VsZi5fYmFzZXRlc3RfY3JlYXRlX2Nvbm5lY3Rpb24oY29ubl9mdXQsIGNoZWNrX3NvY2tuYW1lKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX2Nvbm5lY3Rpb25fc29jayhzZWxmKToKKyAgICAgICAgd2l0aCB0ZXN0X3V0aWxzLnJ1bl90ZXN0X3NlcnZlcigpIGFzIGh0dHBkOgorICAgICAgICAgICAgc29jayA9IE5vbmUKKyAgICAgICAgICAgIGluZm9zID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSgKKyAgICAgICAgICAgICAgICBzZWxmLmxvb3AuZ2V0YWRkcmluZm8oCisgICAgICAgICAgICAgICAgICAgICpodHRwZC5hZGRyZXNzLCB0eXBlPXNvY2tldC5TT0NLX1NUUkVBTSkpCisgICAgICAgICAgICBmb3IgZmFtaWx5LCB0eXBlLCBwcm90bywgY25hbWUsIGFkZHJlc3MgaW4gaW5mb3M6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldChmYW1pbHk9ZmFtaWx5LCB0eXBlPXR5cGUsIHByb3RvPXByb3RvKQorICAgICAgICAgICAgICAgICAgICBzb2NrLnNldGJsb2NraW5nKEZhbHNlKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sb29wLnNvY2tfY29ubmVjdChzb2NrLCBhZGRyZXNzKSkKKyAgICAgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBhc3NlcnQgRmFsc2UsICdDYW4gbm90IGNyZWF0ZSBzb2NrZXQuJworCisgICAgICAgICAgICBmID0gc2VsZi5sb29wLmNyZWF0ZV9jb25uZWN0aW9uKAorICAgICAgICAgICAgICAgIGxhbWJkYTogTXlQcm90byhsb29wPXNlbGYubG9vcCksIHNvY2s9c29jaykKKyAgICAgICAgICAgIHRyLCBwciA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh0ciwgYXN5bmNpby5UcmFuc3BvcnQpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocHIsIGFzeW5jaW8uUHJvdG9jb2wpCisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByLmRvbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIocHIubmJ5dGVzLCAwKQorICAgICAgICAgICAgdHIuY2xvc2UoKQorCisgICAgZGVmIGNoZWNrX3NzbF9leHRyYV9pbmZvKHNlbGYsIGNsaWVudCwgY2hlY2tfc29ja25hbWU9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVlcm5hbWU9Tm9uZSwgcGVlcmNlcnQ9e30pOgorICAgICAgICBpZiBjaGVja19zb2NrbmFtZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKGNsaWVudC5nZXRfZXh0cmFfaW5mbygnc29ja25hbWUnKSkKKyAgICAgICAgaWYgcGVlcm5hbWU6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBlZXJuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGllbnQuZ2V0X2V4dHJhX2luZm8oJ3BlZXJuYW1lJykpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShjbGllbnQuZ2V0X2V4dHJhX2luZm8oJ3BlZXJuYW1lJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGVlcmNlcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50LmdldF9leHRyYV9pbmZvKCdwZWVyY2VydCcpKQorCisgICAgICAgICMgdGVzdCBTU0wgY2lwaGVyCisgICAgICAgIGNpcGhlciA9IGNsaWVudC5nZXRfZXh0cmFfaW5mbygnY2lwaGVyJykKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGNpcGhlciwgdHVwbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGNpcGhlciksIDMsIGNpcGhlcikKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGNpcGhlclswXSwgc3RyKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoY2lwaGVyWzFdLCBzdHIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShjaXBoZXJbMl0sIGludCkKKworICAgICAgICAjIHRlc3QgU1NMIG9iamVjdAorICAgICAgICBzc2xvYmogPSBjbGllbnQuZ2V0X2V4dHJhX2luZm8oJ3NzbF9vYmplY3QnKQorICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShzc2xvYmopCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Nsb2JqLmNvbXByZXNzaW9uKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50LmdldF9leHRyYV9pbmZvKCdjb21wcmVzc2lvbicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNzbG9iai5jaXBoZXIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjbGllbnQuZ2V0X2V4dHJhX2luZm8oJ2NpcGhlcicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNzbG9iai5nZXRwZWVyY2VydCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWVudC5nZXRfZXh0cmFfaW5mbygncGVlcmNlcnQnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzc2xvYmouY29tcHJlc3Npb24oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjbGllbnQuZ2V0X2V4dHJhX2luZm8oJ2NvbXByZXNzaW9uJykpCisKKyAgICBkZWYgX2Jhc2V0ZXN0X2NyZWF0ZV9zc2xfY29ubmVjdGlvbihzZWxmLCBjb25uZWN0aW9uX2Z1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja19zb2NrbmFtZT1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZXJuYW1lPU5vbmUpOgorICAgICAgICB0ciwgcHIgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvbm5lY3Rpb25fZnV0KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodHIsIGFzeW5jaW8uVHJhbnNwb3J0KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocHIsIGFzeW5jaW8uUHJvdG9jb2wpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnc3NsJyBpbiB0ci5fX2NsYXNzX18uX19uYW1lX18ubG93ZXIoKSkKKyAgICAgICAgc2VsZi5jaGVja19zc2xfZXh0cmFfaW5mbyh0ciwgY2hlY2tfc29ja25hbWUsIHBlZXJuYW1lKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByLmRvbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihwci5uYnl0ZXMsIDApCisgICAgICAgIHRyLmNsb3NlKCkKKworICAgIGRlZiBfdGVzdF9jcmVhdGVfc3NsX2Nvbm5lY3Rpb24oc2VsZiwgaHR0cGQsIGNyZWF0ZV9jb25uZWN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tfc29ja25hbWU9VHJ1ZSwgcGVlcm5hbWU9Tm9uZSk6CisgICAgICAgIGNvbm5fZnV0ID0gY3JlYXRlX2Nvbm5lY3Rpb24oc3NsPXRlc3RfdXRpbHMuZHVtbXlfc3NsX2NvbnRleHQoKSkKKyAgICAgICAgc2VsZi5fYmFzZXRlc3RfY3JlYXRlX3NzbF9jb25uZWN0aW9uKGNvbm5fZnV0LCBjaGVja19zb2NrbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZXJuYW1lKQorCisgICAgICAgICMgc3NsLlB1cnBvc2Ugd2FzIGludHJvZHVjZWQgaW4gUHl0aG9uIDMuNAorICAgICAgICBpZiBoYXNhdHRyKHNzbCwgJ1B1cnBvc2UnKToKKyAgICAgICAgICAgIGRlZiBfZHVtbXlfc3NsX2NyZWF0ZV9jb250ZXh0KHB1cnBvc2U9c3NsLlB1cnBvc2UuU0VSVkVSX0FVVEgsICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWZpbGU9Tm9uZSwgY2FwYXRoPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWRhdGE9Tm9uZSk6CisgICAgICAgICAgICAgICAgIiIiCisgICAgICAgICAgICAgICAgQSBzc2wuY3JlYXRlX2RlZmF1bHRfY29udGV4dCgpIHJlcGxhY2VtZW50IHRoYXQgZG9lc24ndCBlbmFibGUKKyAgICAgICAgICAgICAgICBjZXJ0IHZhbGlkYXRpb24uCisgICAgICAgICAgICAgICAgIiIiCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwdXJwb3NlLCBzc2wuUHVycG9zZS5TRVJWRVJfQVVUSCkKKyAgICAgICAgICAgICAgICByZXR1cm4gdGVzdF91dGlscy5kdW1teV9zc2xfY29udGV4dCgpCisKKyAgICAgICAgICAgICMgV2l0aCBzc2w9VHJ1ZSwgc3NsLmNyZWF0ZV9kZWZhdWx0X2NvbnRleHQoKSBzaG91bGQgYmUgY2FsbGVkCisgICAgICAgICAgICB3aXRoIG1vY2sucGF0Y2goJ3NzbC5jcmVhdGVfZGVmYXVsdF9jb250ZXh0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWRlX2VmZmVjdD1fZHVtbXlfc3NsX2NyZWF0ZV9jb250ZXh0KSBhcyBtOgorICAgICAgICAgICAgICAgIGNvbm5fZnV0ID0gY3JlYXRlX2Nvbm5lY3Rpb24oc3NsPVRydWUpCisgICAgICAgICAgICAgICAgc2VsZi5fYmFzZXRlc3RfY3JlYXRlX3NzbF9jb25uZWN0aW9uKGNvbm5fZnV0LCBjaGVja19zb2NrbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVlcm5hbWUpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmNhbGxfY291bnQsIDEpCisKKyAgICAgICAgIyBXaXRoIHRoZSByZWFsIHNzbC5jcmVhdGVfZGVmYXVsdF9jb250ZXh0KCksIGNlcnRpZmljYXRlCisgICAgICAgICMgdmFsaWRhdGlvbiB3aWxsIGZhaWwKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzc2wuU1NMRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgY29ubl9mdXQgPSBjcmVhdGVfY29ubmVjdGlvbihzc2w9VHJ1ZSkKKyAgICAgICAgICAgICMgSWdub3JlIHRoZSAiU1NMIGhhbmRzaGFrZSBmYWlsZWQiIGxvZyBpbiBkZWJ1ZyBtb2RlCisgICAgICAgICAgICB3aXRoIHRlc3RfdXRpbHMuZGlzYWJsZV9sb2dnZXIoKToKKyAgICAgICAgICAgICAgICBzZWxmLl9iYXNldGVzdF9jcmVhdGVfc3NsX2Nvbm5lY3Rpb24oY29ubl9mdXQsIGNoZWNrX3NvY2tuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZWVybmFtZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5yZWFzb24sICdDRVJUSUZJQ0FURV9WRVJJRllfRkFJTEVEJykKKworICAgIEB1bml0dGVzdC5za2lwSWYoc3NsIGlzIE5vbmUsICdObyBzc2wgbW9kdWxlJykKKyAgICBkZWYgdGVzdF9jcmVhdGVfc3NsX2Nvbm5lY3Rpb24oc2VsZik6CisgICAgICAgIHdpdGggdGVzdF91dGlscy5ydW5fdGVzdF9zZXJ2ZXIodXNlX3NzbD1UcnVlKSBhcyBodHRwZDoKKyAgICAgICAgICAgIGNyZWF0ZV9jb25uZWN0aW9uID0gZnVuY3Rvb2xzLnBhcnRpYWwoCisgICAgICAgICAgICAgICAgc2VsZi5sb29wLmNyZWF0ZV9jb25uZWN0aW9uLAorICAgICAgICAgICAgICAgIGxhbWJkYTogTXlQcm90byhsb29wPXNlbGYubG9vcCksCisgICAgICAgICAgICAgICAgKmh0dHBkLmFkZHJlc3MpCisgICAgICAgICAgICBzZWxmLl90ZXN0X2NyZWF0ZV9zc2xfY29ubmVjdGlvbihodHRwZCwgY3JlYXRlX2Nvbm5lY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZWVybmFtZT1odHRwZC5hZGRyZXNzKQorCisgICAgZGVmIHRlc3RfbGVnYWN5X2NyZWF0ZV9zc2xfY29ubmVjdGlvbihzZWxmKToKKyAgICAgICAgd2l0aCB0ZXN0X3V0aWxzLmZvcmNlX2xlZ2FjeV9zc2xfc3VwcG9ydCgpOgorICAgICAgICAgICAgc2VsZi50ZXN0X2NyZWF0ZV9zc2xfY29ubmVjdGlvbigpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHNzbCBpcyBOb25lLCAnTm8gc3NsIG1vZHVsZScpCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzb2NrZXQsICdBRl9VTklYJyksICdObyBVTklYIFNvY2tldHMnKQorICAgIGRlZiB0ZXN0X2NyZWF0ZV9zc2xfdW5peF9jb25uZWN0aW9uKHNlbGYpOgorICAgICAgICAjIElzc3VlICMyMDY4MjogT24gTWFjIE9TIFggVGlnZXIsIGdldHNvY2tuYW1lKCkgcmV0dXJucyBhCisgICAgICAgICMgemVyby1sZW5ndGggYWRkcmVzcyBmb3IgVU5JWCBzb2NrZXQuCisgICAgICAgIGNoZWNrX3NvY2tuYW1lID0gbm90IG9zeF90aWdlcigpCisKKyAgICAgICAgd2l0aCB0ZXN0X3V0aWxzLnJ1bl90ZXN0X3VuaXhfc2VydmVyKHVzZV9zc2w9VHJ1ZSkgYXMgaHR0cGQ6CisgICAgICAgICAgICBjcmVhdGVfY29ubmVjdGlvbiA9IGZ1bmN0b29scy5wYXJ0aWFsKAorICAgICAgICAgICAgICAgIHNlbGYubG9vcC5jcmVhdGVfdW5peF9jb25uZWN0aW9uLAorICAgICAgICAgICAgICAgIGxhbWJkYTogTXlQcm90byhsb29wPXNlbGYubG9vcCksIGh0dHBkLmFkZHJlc3MsCisgICAgICAgICAgICAgICAgc2VydmVyX2hvc3RuYW1lPScxMjcuMC4wLjEnKQorCisgICAgICAgICAgICBzZWxmLl90ZXN0X2NyZWF0ZV9zc2xfY29ubmVjdGlvbihodHRwZCwgY3JlYXRlX2Nvbm5lY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja19zb2NrbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZXJuYW1lPWh0dHBkLmFkZHJlc3MpCisKKyAgICBkZWYgdGVzdF9sZWdhY3lfY3JlYXRlX3NzbF91bml4X2Nvbm5lY3Rpb24oc2VsZik6CisgICAgICAgIHdpdGggdGVzdF91dGlscy5mb3JjZV9sZWdhY3lfc3NsX3N1cHBvcnQoKToKKyAgICAgICAgICAgIHNlbGYudGVzdF9jcmVhdGVfc3NsX3VuaXhfY29ubmVjdGlvbigpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfY29ubmVjdGlvbl9sb2NhbF9hZGRyKHNlbGYpOgorICAgICAgICB3aXRoIHRlc3RfdXRpbHMucnVuX3Rlc3Rfc2VydmVyKCkgYXMgaHR0cGQ6CisgICAgICAgICAgICBwb3J0ID0gc3VwcG9ydC5maW5kX3VudXNlZF9wb3J0KCkKKyAgICAgICAgICAgIGYgPSBzZWxmLmxvb3AuY3JlYXRlX2Nvbm5lY3Rpb24oCisgICAgICAgICAgICAgICAgbGFtYmRhOiBNeVByb3RvKGxvb3A9c2VsZi5sb29wKSwKKyAgICAgICAgICAgICAgICAqaHR0cGQuYWRkcmVzcywgbG9jYWxfYWRkcj0oaHR0cGQuYWRkcmVzc1swXSwgcG9ydCkpCisgICAgICAgICAgICB0ciwgcHIgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGYpCisgICAgICAgICAgICBleHBlY3RlZCA9IHByLnRyYW5zcG9ydC5nZXRfZXh0cmFfaW5mbygnc29ja25hbWUnKVsxXQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3J0LCBleHBlY3RlZCkKKyAgICAgICAgICAgIHRyLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9jb25uZWN0aW9uX2xvY2FsX2FkZHJfaW5fdXNlKHNlbGYpOgorICAgICAgICB3aXRoIHRlc3RfdXRpbHMucnVuX3Rlc3Rfc2VydmVyKCkgYXMgaHR0cGQ6CisgICAgICAgICAgICBmID0gc2VsZi5sb29wLmNyZWF0ZV9jb25uZWN0aW9uKAorICAgICAgICAgICAgICAgIGxhbWJkYTogTXlQcm90byhsb29wPXNlbGYubG9vcCksCisgICAgICAgICAgICAgICAgKmh0dHBkLmFkZHJlc3MsIGxvY2FsX2FkZHI9aHR0cGQuYWRkcmVzcykKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcikgYXMgY206CisgICAgICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24uZXJybm8sIGVycm5vLkVBRERSSU5VU0UpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKHN0cihodHRwZC5hZGRyZXNzKSwgY20uZXhjZXB0aW9uLnN0cmVycm9yKQorCisgICAgQG1vY2sucGF0Y2goJ2FzeW5jaW8uYmFzZV9ldmVudHMuc29ja2V0JykKKyAgICBkZWYgY3JlYXRlX3NlcnZlcl9tdWx0aXBsZV9ob3N0cyhzZWxmLCBmYW1pbHksIGhvc3RzLCBtb2NrX3NvY2spOgorICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGdldGFkZHJpbmZvKGhvc3QsIHBvcnQsICphcmdzLCAqKmt3KToKKyAgICAgICAgICAgIGlmIGZhbWlseSA9PSBzb2NrZXQuQUZfSU5FVDoKKyAgICAgICAgICAgICAgICByZXR1cm4gW1tmYW1pbHksIHNvY2tldC5TT0NLX1NUUkVBTSwgNiwgJycsIChob3N0LCBwb3J0KV1dCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBbW2ZhbWlseSwgc29ja2V0LlNPQ0tfU1RSRUFNLCA2LCAnJywgKGhvc3QsIHBvcnQsIDAsIDApXV0KKworICAgICAgICBkZWYgZ2V0YWRkcmluZm9fdGFzaygqYXJncywgKiprd2RzKToKKyAgICAgICAgICAgIHJldHVybiBhc3luY2lvLlRhc2soZ2V0YWRkcmluZm8oKmFyZ3MsICoqa3dkcyksIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIGlmIGZhbWlseSA9PSBzb2NrZXQuQUZfSU5FVDoKKyAgICAgICAgICAgIG1vY2tfc29jay5zb2NrZXQoKS5nZXRzb2NrYnluYW1lLnNpZGVfZWZmZWN0ID0gWyhob3N0LCA4MCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBob3N0IGluIGhvc3RzXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbW9ja19zb2NrLnNvY2tldCgpLmdldHNvY2tieW5hbWUuc2lkZV9lZmZlY3QgPSBbKGhvc3QsIDgwLCAwLCAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGhvc3QgaW4gaG9zdHNdCisgICAgICAgIHNlbGYubG9vcC5nZXRhZGRyaW5mbyA9IGdldGFkZHJpbmZvX3Rhc2sKKyAgICAgICAgc2VsZi5sb29wLl9zdGFydF9zZXJ2aW5nID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLl9zdG9wX3NlcnZpbmcgPSBtb2NrLk1vY2soKQorICAgICAgICBmID0gc2VsZi5sb29wLmNyZWF0ZV9zZXJ2ZXIobGFtYmRhOiBNeVByb3RvKHNlbGYubG9vcCksIGhvc3RzLCA4MCkKKyAgICAgICAgc2VydmVyID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoc2VydmVyLmNsb3NlKQorICAgICAgICBzZXJ2ZXJfaG9zdHMgPSBbc29jay5nZXRzb2NrYnluYW1lKClbMF0gZm9yIHNvY2sgaW4gc2VydmVyLnNvY2tldHNdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VydmVyX2hvc3RzLCBob3N0cykKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9zZXJ2ZXJfbXVsdGlwbGVfaG9zdHNfaXB2NChzZWxmKToKKyAgICAgICAgc2VsZi5jcmVhdGVfc2VydmVyX211bHRpcGxlX2hvc3RzKHNvY2tldC5BRl9JTkVULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWycxLjIuMy40JywgJzUuNi43LjgnXSkKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9zZXJ2ZXJfbXVsdGlwbGVfaG9zdHNfaXB2NihzZWxmKToKKyAgICAgICAgc2VsZi5jcmVhdGVfc2VydmVyX211bHRpcGxlX2hvc3RzKHNvY2tldC5BRl9JTkVUNiwgWyc6OjEnLCAnOjoyJ10pCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfc2VydmVyKHNlbGYpOgorICAgICAgICBwcm90byA9IE15UHJvdG8oc2VsZi5sb29wKQorICAgICAgICBmID0gc2VsZi5sb29wLmNyZWF0ZV9zZXJ2ZXIobGFtYmRhOiBwcm90bywgJzAuMC4wLjAnLCAwKQorICAgICAgICBzZXJ2ZXIgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlcnZlci5zb2NrZXRzKSwgMSkKKyAgICAgICAgc29jayA9IHNlcnZlci5zb2NrZXRzWzBdCisgICAgICAgIGhvc3QsIHBvcnQgPSBzb2NrLmdldHNvY2tuYW1lKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChob3N0LCAnMC4wLjAuMCcpCisgICAgICAgIGNsaWVudCA9IHNvY2tldC5zb2NrZXQoKQorICAgICAgICBjbGllbnQuY29ubmVjdCgoJzEyNy4wLjAuMScsIHBvcnQpKQorICAgICAgICBjbGllbnQuc2VuZGFsbChiJ3h4eCcpCisKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90by5jb25uZWN0ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0NPTk5FQ1RFRCcsIHByb3RvLnN0YXRlKQorCisgICAgICAgIHRlc3RfdXRpbHMucnVuX3VudGlsKHNlbGYubG9vcCwgbGFtYmRhOiBwcm90by5uYnl0ZXMgPiAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDMsIHByb3RvLm5ieXRlcykKKworICAgICAgICAjIGV4dHJhIGluZm8gaXMgYXZhaWxhYmxlCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHByb3RvLnRyYW5zcG9ydC5nZXRfZXh0cmFfaW5mbygnc29ja25hbWUnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnMTI3LjAuMC4xJywKKyAgICAgICAgICAgICAgICAgICAgICAgICBwcm90by50cmFuc3BvcnQuZ2V0X2V4dHJhX2luZm8oJ3BlZXJuYW1lJylbMF0pCisKKyAgICAgICAgIyBjbG9zZSBjb25uZWN0aW9uCisgICAgICAgIHByb3RvLnRyYW5zcG9ydC5jbG9zZSgpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uZG9uZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdDTE9TRUQnLCBwcm90by5zdGF0ZSkKKworICAgICAgICAjIHRoZSBjbGllbnQgc29ja2V0IG11c3QgYmUgY2xvc2VkIGFmdGVyIHRvIGF2b2lkIEVDT05OUkVTRVQgdXBvbgorICAgICAgICAjIHJlY3YoKS9zZW5kKCkgb24gdGhlIHNlcnZpbmcgc29ja2V0CisgICAgICAgIGNsaWVudC5jbG9zZSgpCisKKyAgICAgICAgIyBjbG9zZSBzZXJ2ZXIKKyAgICAgICAgc2VydmVyLmNsb3NlKCkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc29ja2V0LCAnU09fUkVVU0VQT1JUJyksICdObyBTT19SRVVTRVBPUlQnKQorICAgIGRlZiB0ZXN0X2NyZWF0ZV9zZXJ2ZXJfcmV1c2VfcG9ydChzZWxmKToKKyAgICAgICAgcHJvdG8gPSBNeVByb3RvKHNlbGYubG9vcCkKKyAgICAgICAgZiA9IHNlbGYubG9vcC5jcmVhdGVfc2VydmVyKAorICAgICAgICAgICAgbGFtYmRhOiBwcm90bywgJzAuMC4wLjAnLCAwKQorICAgICAgICBzZXJ2ZXIgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlcnZlci5zb2NrZXRzKSwgMSkKKyAgICAgICAgc29jayA9IHNlcnZlci5zb2NrZXRzWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoCisgICAgICAgICAgICBzb2NrLmdldHNvY2tvcHQoCisgICAgICAgICAgICAgICAgc29ja2V0LlNPTF9TT0NLRVQsIHNvY2tldC5TT19SRVVTRVBPUlQpKQorICAgICAgICBzZXJ2ZXIuY2xvc2UoKQorCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorCisgICAgICAgIHByb3RvID0gTXlQcm90byhzZWxmLmxvb3ApCisgICAgICAgIGYgPSBzZWxmLmxvb3AuY3JlYXRlX3NlcnZlcigKKyAgICAgICAgICAgIGxhbWJkYTogcHJvdG8sICcwLjAuMC4wJywgMCwgcmV1c2VfcG9ydD1UcnVlKQorICAgICAgICBzZXJ2ZXIgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlcnZlci5zb2NrZXRzKSwgMSkKKyAgICAgICAgc29jayA9IHNlcnZlci5zb2NrZXRzWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgKKyAgICAgICAgICAgIHNvY2suZ2V0c29ja29wdCgKKyAgICAgICAgICAgICAgICBzb2NrZXQuU09MX1NPQ0tFVCwgc29ja2V0LlNPX1JFVVNFUE9SVCkpCisgICAgICAgIHNlcnZlci5jbG9zZSgpCisKKyAgICBkZWYgX21ha2VfdW5peF9zZXJ2ZXIoc2VsZiwgZmFjdG9yeSwgKiprd2FyZ3MpOgorICAgICAgICBwYXRoID0gdGVzdF91dGlscy5nZW5fdW5peF9zb2NrZXRfcGF0aCgpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChsYW1iZGE6IG9zLnBhdGguZXhpc3RzKHBhdGgpIGFuZCBvcy51bmxpbmsocGF0aCkpCisKKyAgICAgICAgZiA9IHNlbGYubG9vcC5jcmVhdGVfdW5peF9zZXJ2ZXIoZmFjdG9yeSwgcGF0aCwgKiprd2FyZ3MpCisgICAgICAgIHNlcnZlciA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZikKKworICAgICAgICByZXR1cm4gc2VydmVyLCBwYXRoCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNvY2tldCwgJ0FGX1VOSVgnKSwgJ05vIFVOSVggU29ja2V0cycpCisgICAgZGVmIHRlc3RfY3JlYXRlX3VuaXhfc2VydmVyKHNlbGYpOgorICAgICAgICBwcm90byA9IE15UHJvdG8obG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlcnZlciwgcGF0aCA9IHNlbGYuX21ha2VfdW5peF9zZXJ2ZXIobGFtYmRhOiBwcm90bykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VydmVyLnNvY2tldHMpLCAxKQorCisgICAgICAgIGNsaWVudCA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX1VOSVgpCisgICAgICAgIGNsaWVudC5jb25uZWN0KHBhdGgpCisgICAgICAgIGNsaWVudC5zZW5kYWxsKGIneHh4JykKKworICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmNvbm5lY3RlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnQ09OTkVDVEVEJywgcHJvdG8uc3RhdGUpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX3VudGlsKHNlbGYubG9vcCwgbGFtYmRhOiBwcm90by5uYnl0ZXMgPiAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDMsIHByb3RvLm5ieXRlcykKKworICAgICAgICAjIGNsb3NlIGNvbm5lY3Rpb24KKyAgICAgICAgcHJvdG8udHJhbnNwb3J0LmNsb3NlKCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90by5kb25lKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0NMT1NFRCcsIHByb3RvLnN0YXRlKQorCisgICAgICAgICMgdGhlIGNsaWVudCBzb2NrZXQgbXVzdCBiZSBjbG9zZWQgYWZ0ZXIgdG8gYXZvaWQgRUNPTk5SRVNFVCB1cG9uCisgICAgICAgICMgcmVjdigpL3NlbmQoKSBvbiB0aGUgc2VydmluZyBzb2NrZXQKKyAgICAgICAgY2xpZW50LmNsb3NlKCkKKworICAgICAgICAjIGNsb3NlIHNlcnZlcgorICAgICAgICBzZXJ2ZXIuY2xvc2UoKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzb2NrZXQsICdBRl9VTklYJyksICdObyBVTklYIFNvY2tldHMnKQorICAgIGRlZiB0ZXN0X2NyZWF0ZV91bml4X3NlcnZlcl9wYXRoX3NvY2tldF9lcnJvcihzZWxmKToKKyAgICAgICAgcHJvdG8gPSBNeVByb3RvKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldCgpCisgICAgICAgIHdpdGggc29jazoKKyAgICAgICAgICAgIGYgPSBzZWxmLmxvb3AuY3JlYXRlX3VuaXhfc2VydmVyKGxhbWJkYTogcHJvdG8sICcvdGVzdCcsIHNvY2s9c29jaykKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYXRoIGFuZCBzb2NrIGNhbiBub3QgYmUgc3BlY2lmaWVkICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXQgdGhlIHNhbWUgdGltZScpOgorICAgICAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZikKKworICAgIGRlZiBfY3JlYXRlX3NzbF9jb250ZXh0KHNlbGYsIGNlcnRmaWxlLCBrZXlmaWxlPU5vbmUpOgorICAgICAgICBzc2xjb250ZXh0ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1NTTHYyMykKKyAgICAgICAgc3NsY29udGV4dC5vcHRpb25zIHw9IHNzbC5PUF9OT19TU0x2MgorICAgICAgICBzc2xjb250ZXh0LmxvYWRfY2VydF9jaGFpbihjZXJ0ZmlsZSwga2V5ZmlsZSkKKyAgICAgICAgcmV0dXJuIHNzbGNvbnRleHQKKworICAgIGRlZiBfbWFrZV9zc2xfc2VydmVyKHNlbGYsIGZhY3RvcnksIGNlcnRmaWxlLCBrZXlmaWxlPU5vbmUpOgorICAgICAgICBzc2xjb250ZXh0ID0gc2VsZi5fY3JlYXRlX3NzbF9jb250ZXh0KGNlcnRmaWxlLCBrZXlmaWxlKQorCisgICAgICAgIGYgPSBzZWxmLmxvb3AuY3JlYXRlX3NlcnZlcihmYWN0b3J5LCAnMTI3LjAuMC4xJywgMCwgc3NsPXNzbGNvbnRleHQpCisgICAgICAgIHNlcnZlciA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZikKKworICAgICAgICBzb2NrID0gc2VydmVyLnNvY2tldHNbMF0KKyAgICAgICAgaG9zdCwgcG9ydCA9IHNvY2suZ2V0c29ja25hbWUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhvc3QsICcxMjcuMC4wLjEnKQorICAgICAgICByZXR1cm4gc2VydmVyLCBob3N0LCBwb3J0CisKKyAgICBkZWYgX21ha2Vfc3NsX3VuaXhfc2VydmVyKHNlbGYsIGZhY3RvcnksIGNlcnRmaWxlLCBrZXlmaWxlPU5vbmUpOgorICAgICAgICBzc2xjb250ZXh0ID0gc2VsZi5fY3JlYXRlX3NzbF9jb250ZXh0KGNlcnRmaWxlLCBrZXlmaWxlKQorICAgICAgICByZXR1cm4gc2VsZi5fbWFrZV91bml4X3NlcnZlcihmYWN0b3J5LCBzc2w9c3NsY29udGV4dCkKKworICAgIEB1bml0dGVzdC5za2lwSWYoc3NsIGlzIE5vbmUsICdObyBzc2wgbW9kdWxlJykKKyAgICBkZWYgdGVzdF9jcmVhdGVfc2VydmVyX3NzbChzZWxmKToKKyAgICAgICAgcHJvdG8gPSBNeVByb3RvKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZXJ2ZXIsIGhvc3QsIHBvcnQgPSBzZWxmLl9tYWtlX3NzbF9zZXJ2ZXIoCisgICAgICAgICAgICBsYW1iZGE6IHByb3RvLCBPTkxZQ0VSVCwgT05MWUtFWSkKKworICAgICAgICBmX2MgPSBzZWxmLmxvb3AuY3JlYXRlX2Nvbm5lY3Rpb24oTXlCYXNlUHJvdG8sIGhvc3QsIHBvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2w9dGVzdF91dGlscy5kdW1teV9zc2xfY29udGV4dCgpKQorICAgICAgICBjbGllbnQsIHByID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmX2MpCisKKyAgICAgICAgY2xpZW50LndyaXRlKGIneHh4JykKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90by5jb25uZWN0ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0NPTk5FQ1RFRCcsIHByb3RvLnN0YXRlKQorCisgICAgICAgIHRlc3RfdXRpbHMucnVuX3VudGlsKHNlbGYubG9vcCwgbGFtYmRhOiBwcm90by5uYnl0ZXMgPiAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDMsIHByb3RvLm5ieXRlcykKKworICAgICAgICAjIGV4dHJhIGluZm8gaXMgYXZhaWxhYmxlCisgICAgICAgIHNlbGYuY2hlY2tfc3NsX2V4dHJhX2luZm8oY2xpZW50LCBwZWVybmFtZT0oaG9zdCwgcG9ydCkpCisKKyAgICAgICAgIyBjbG9zZSBjb25uZWN0aW9uCisgICAgICAgIHByb3RvLnRyYW5zcG9ydC5jbG9zZSgpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uZG9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnQ0xPU0VEJywgcHJvdG8uc3RhdGUpCisKKyAgICAgICAgIyB0aGUgY2xpZW50IHNvY2tldCBtdXN0IGJlIGNsb3NlZCBhZnRlciB0byBhdm9pZCBFQ09OTlJFU0VUIHVwb24KKyAgICAgICAgIyByZWN2KCkvc2VuZCgpIG9uIHRoZSBzZXJ2aW5nIHNvY2tldAorICAgICAgICBjbGllbnQuY2xvc2UoKQorCisgICAgICAgICMgc3RvcCBzZXJ2aW5nCisgICAgICAgIHNlcnZlci5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9sZWdhY3lfY3JlYXRlX3NlcnZlcl9zc2woc2VsZik6CisgICAgICAgIHdpdGggdGVzdF91dGlscy5mb3JjZV9sZWdhY3lfc3NsX3N1cHBvcnQoKToKKyAgICAgICAgICAgIHNlbGYudGVzdF9jcmVhdGVfc2VydmVyX3NzbCgpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHNzbCBpcyBOb25lLCAnTm8gc3NsIG1vZHVsZScpCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzb2NrZXQsICdBRl9VTklYJyksICdObyBVTklYIFNvY2tldHMnKQorICAgIGRlZiB0ZXN0X2NyZWF0ZV91bml4X3NlcnZlcl9zc2woc2VsZik6CisgICAgICAgIHByb3RvID0gTXlQcm90byhsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VydmVyLCBwYXRoID0gc2VsZi5fbWFrZV9zc2xfdW5peF9zZXJ2ZXIoCisgICAgICAgICAgICBsYW1iZGE6IHByb3RvLCBPTkxZQ0VSVCwgT05MWUtFWSkKKworICAgICAgICBmX2MgPSBzZWxmLmxvb3AuY3JlYXRlX3VuaXhfY29ubmVjdGlvbigKKyAgICAgICAgICAgIE15QmFzZVByb3RvLCBwYXRoLCBzc2w9dGVzdF91dGlscy5kdW1teV9zc2xfY29udGV4dCgpLAorICAgICAgICAgICAgc2VydmVyX2hvc3RuYW1lPScnKQorCisgICAgICAgIGNsaWVudCwgcHIgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGZfYykKKworICAgICAgICBjbGllbnQud3JpdGUoYid4eHgnKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmNvbm5lY3RlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnQ09OTkVDVEVEJywgcHJvdG8uc3RhdGUpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX3VudGlsKHNlbGYubG9vcCwgbGFtYmRhOiBwcm90by5uYnl0ZXMgPiAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDMsIHByb3RvLm5ieXRlcykKKworICAgICAgICAjIGNsb3NlIGNvbm5lY3Rpb24KKyAgICAgICAgcHJvdG8udHJhbnNwb3J0LmNsb3NlKCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90by5kb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdDTE9TRUQnLCBwcm90by5zdGF0ZSkKKworICAgICAgICAjIHRoZSBjbGllbnQgc29ja2V0IG11c3QgYmUgY2xvc2VkIGFmdGVyIHRvIGF2b2lkIEVDT05OUkVTRVQgdXBvbgorICAgICAgICAjIHJlY3YoKS9zZW5kKCkgb24gdGhlIHNlcnZpbmcgc29ja2V0CisgICAgICAgIGNsaWVudC5jbG9zZSgpCisKKyAgICAgICAgIyBzdG9wIHNlcnZpbmcKKyAgICAgICAgc2VydmVyLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2xlZ2FjeV9jcmVhdGVfdW5peF9zZXJ2ZXJfc3NsKHNlbGYpOgorICAgICAgICB3aXRoIHRlc3RfdXRpbHMuZm9yY2VfbGVnYWN5X3NzbF9zdXBwb3J0KCk6CisgICAgICAgICAgICBzZWxmLnRlc3RfY3JlYXRlX3VuaXhfc2VydmVyX3NzbCgpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHNzbCBpcyBOb25lLCAnTm8gc3NsIG1vZHVsZScpCisgICAgZGVmIHRlc3RfY3JlYXRlX3NlcnZlcl9zc2xfdmVyaWZ5X2ZhaWxlZChzZWxmKToKKyAgICAgICAgcHJvdG8gPSBNeVByb3RvKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZXJ2ZXIsIGhvc3QsIHBvcnQgPSBzZWxmLl9tYWtlX3NzbF9zZXJ2ZXIoCisgICAgICAgICAgICBsYW1iZGE6IHByb3RvLCBTSUdORURfQ0VSVEZJTEUpCisKKyAgICAgICAgc3NsY29udGV4dF9jbGllbnQgPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfU1NMdjIzKQorICAgICAgICBzc2xjb250ZXh0X2NsaWVudC5vcHRpb25zIHw9IHNzbC5PUF9OT19TU0x2MgorICAgICAgICBzc2xjb250ZXh0X2NsaWVudC52ZXJpZnlfbW9kZSA9IHNzbC5DRVJUX1JFUVVJUkVECisgICAgICAgIGlmIGhhc2F0dHIoc3NsY29udGV4dF9jbGllbnQsICdjaGVja19ob3N0bmFtZScpOgorICAgICAgICAgICAgc3NsY29udGV4dF9jbGllbnQuY2hlY2tfaG9zdG5hbWUgPSBUcnVlCisKKworICAgICAgICAjIG5vIENBIGxvYWRlZAorICAgICAgICBmX2MgPSBzZWxmLmxvb3AuY3JlYXRlX2Nvbm5lY3Rpb24oTXlQcm90bywgaG9zdCwgcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbD1zc2xjb250ZXh0X2NsaWVudCkKKyAgICAgICAgd2l0aCBtb2NrLnBhdGNoLm9iamVjdChzZWxmLmxvb3AsICdjYWxsX2V4Y2VwdGlvbl9oYW5kbGVyJyk6CisgICAgICAgICAgICB3aXRoIHRlc3RfdXRpbHMuZGlzYWJsZV9sb2dnZXIoKToKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoc3NsLlNTTEVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2VydGlmaWNhdGUgdmVyaWZ5IGZhaWxlZCAnKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmX2MpCisKKyAgICAgICAgICAgICMgZXhlY3V0ZSB0aGUgbG9vcCB0byBsb2cgdGhlIGNvbm5lY3Rpb24gZXJyb3IKKyAgICAgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorCisgICAgICAgICMgY2xvc2UgY29ubmVjdGlvbgorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShwcm90by50cmFuc3BvcnQpCisgICAgICAgIHNlcnZlci5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9sZWdhY3lfY3JlYXRlX3NlcnZlcl9zc2xfdmVyaWZ5X2ZhaWxlZChzZWxmKToKKyAgICAgICAgd2l0aCB0ZXN0X3V0aWxzLmZvcmNlX2xlZ2FjeV9zc2xfc3VwcG9ydCgpOgorICAgICAgICAgICAgc2VsZi50ZXN0X2NyZWF0ZV9zZXJ2ZXJfc3NsX3ZlcmlmeV9mYWlsZWQoKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzc2wgaXMgTm9uZSwgJ05vIHNzbCBtb2R1bGUnKQorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc29ja2V0LCAnQUZfVU5JWCcpLCAnTm8gVU5JWCBTb2NrZXRzJykKKyAgICBkZWYgdGVzdF9jcmVhdGVfdW5peF9zZXJ2ZXJfc3NsX3ZlcmlmeV9mYWlsZWQoc2VsZik6CisgICAgICAgIHByb3RvID0gTXlQcm90byhsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VydmVyLCBwYXRoID0gc2VsZi5fbWFrZV9zc2xfdW5peF9zZXJ2ZXIoCisgICAgICAgICAgICBsYW1iZGE6IHByb3RvLCBTSUdORURfQ0VSVEZJTEUpCisKKyAgICAgICAgc3NsY29udGV4dF9jbGllbnQgPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfU1NMdjIzKQorICAgICAgICBzc2xjb250ZXh0X2NsaWVudC5vcHRpb25zIHw9IHNzbC5PUF9OT19TU0x2MgorICAgICAgICBzc2xjb250ZXh0X2NsaWVudC52ZXJpZnlfbW9kZSA9IHNzbC5DRVJUX1JFUVVJUkVECisgICAgICAgIGlmIGhhc2F0dHIoc3NsY29udGV4dF9jbGllbnQsICdjaGVja19ob3N0bmFtZScpOgorICAgICAgICAgICAgc3NsY29udGV4dF9jbGllbnQuY2hlY2tfaG9zdG5hbWUgPSBUcnVlCisKKyAgICAgICAgIyBubyBDQSBsb2FkZWQKKyAgICAgICAgZl9jID0gc2VsZi5sb29wLmNyZWF0ZV91bml4X2Nvbm5lY3Rpb24oTXlQcm90bywgcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsPXNzbGNvbnRleHRfY2xpZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfaG9zdG5hbWU9J2ludmFsaWQnKQorICAgICAgICB3aXRoIG1vY2sucGF0Y2gub2JqZWN0KHNlbGYubG9vcCwgJ2NhbGxfZXhjZXB0aW9uX2hhbmRsZXInKToKKyAgICAgICAgICAgIHdpdGggdGVzdF91dGlscy5kaXNhYmxlX2xvZ2dlcigpOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChzc2wuU1NMRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjZXJ0aWZpY2F0ZSB2ZXJpZnkgZmFpbGVkICcpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGZfYykKKworICAgICAgICAgICAgIyBleGVjdXRlIHRoZSBsb29wIHRvIGxvZyB0aGUgY29ubmVjdGlvbiBlcnJvcgorICAgICAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisKKyAgICAgICAgIyBjbG9zZSBjb25uZWN0aW9uCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHByb3RvLnRyYW5zcG9ydCkKKyAgICAgICAgc2VydmVyLmNsb3NlKCkKKworCisgICAgZGVmIHRlc3RfbGVnYWN5X2NyZWF0ZV91bml4X3NlcnZlcl9zc2xfdmVyaWZ5X2ZhaWxlZChzZWxmKToKKyAgICAgICAgd2l0aCB0ZXN0X3V0aWxzLmZvcmNlX2xlZ2FjeV9zc2xfc3VwcG9ydCgpOgorICAgICAgICAgICAgc2VsZi50ZXN0X2NyZWF0ZV91bml4X3NlcnZlcl9zc2xfdmVyaWZ5X2ZhaWxlZCgpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHNzbCBpcyBOb25lLCAnTm8gc3NsIG1vZHVsZScpCisgICAgZGVmIHRlc3RfY3JlYXRlX3NlcnZlcl9zc2xfbWF0Y2hfZmFpbGVkKHNlbGYpOgorICAgICAgICBwcm90byA9IE15UHJvdG8obG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlcnZlciwgaG9zdCwgcG9ydCA9IHNlbGYuX21ha2Vfc3NsX3NlcnZlcigKKyAgICAgICAgICAgIGxhbWJkYTogcHJvdG8sIFNJR05FRF9DRVJURklMRSkKKworICAgICAgICBzc2xjb250ZXh0X2NsaWVudCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9TU0x2MjMpCisgICAgICAgIHNzbGNvbnRleHRfY2xpZW50Lm9wdGlvbnMgfD0gc3NsLk9QX05PX1NTTHYyCisgICAgICAgIHNzbGNvbnRleHRfY2xpZW50LnZlcmlmeV9tb2RlID0gc3NsLkNFUlRfUkVRVUlSRUQKKyAgICAgICAgc3NsY29udGV4dF9jbGllbnQubG9hZF92ZXJpZnlfbG9jYXRpb25zKAorICAgICAgICAgICAgY2FmaWxlPVNJR05JTkdfQ0EpCisgICAgICAgIGlmIGhhc2F0dHIoc3NsY29udGV4dF9jbGllbnQsICdjaGVja19ob3N0bmFtZScpOgorICAgICAgICAgICAgc3NsY29udGV4dF9jbGllbnQuY2hlY2tfaG9zdG5hbWUgPSBUcnVlCisKKyAgICAgICAgIyBpbmNvcnJlY3Qgc2VydmVyX2hvc3RuYW1lCisgICAgICAgIGZfYyA9IHNlbGYubG9vcC5jcmVhdGVfY29ubmVjdGlvbihNeVByb3RvLCBob3N0LCBwb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsPXNzbGNvbnRleHRfY2xpZW50KQorICAgICAgICB3aXRoIG1vY2sucGF0Y2gub2JqZWN0KHNlbGYubG9vcCwgJ2NhbGxfZXhjZXB0aW9uX2hhbmRsZXInKToKKyAgICAgICAgICAgIHdpdGggdGVzdF91dGlscy5kaXNhYmxlX2xvZ2dlcigpOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleCgKKyAgICAgICAgICAgICAgICAgICAgICAgIHNzbC5DZXJ0aWZpY2F0ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgImhvc3RuYW1lICcxMjcuMC4wLjEnIGRvZXNuJ3QgbWF0Y2ggJ2xvY2FsaG9zdCciKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmX2MpCisKKyAgICAgICAgIyBjbG9zZSBjb25uZWN0aW9uCisgICAgICAgIHByb3RvLnRyYW5zcG9ydC5jbG9zZSgpCisgICAgICAgIHNlcnZlci5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9sZWdhY3lfY3JlYXRlX3NlcnZlcl9zc2xfbWF0Y2hfZmFpbGVkKHNlbGYpOgorICAgICAgICB3aXRoIHRlc3RfdXRpbHMuZm9yY2VfbGVnYWN5X3NzbF9zdXBwb3J0KCk6CisgICAgICAgICAgICBzZWxmLnRlc3RfY3JlYXRlX3NlcnZlcl9zc2xfbWF0Y2hfZmFpbGVkKCkKKworICAgIEB1bml0dGVzdC5za2lwSWYoc3NsIGlzIE5vbmUsICdObyBzc2wgbW9kdWxlJykKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNvY2tldCwgJ0FGX1VOSVgnKSwgJ05vIFVOSVggU29ja2V0cycpCisgICAgZGVmIHRlc3RfY3JlYXRlX3VuaXhfc2VydmVyX3NzbF92ZXJpZmllZChzZWxmKToKKyAgICAgICAgcHJvdG8gPSBNeVByb3RvKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZXJ2ZXIsIHBhdGggPSBzZWxmLl9tYWtlX3NzbF91bml4X3NlcnZlcigKKyAgICAgICAgICAgIGxhbWJkYTogcHJvdG8sIFNJR05FRF9DRVJURklMRSkKKworICAgICAgICBzc2xjb250ZXh0X2NsaWVudCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9TU0x2MjMpCisgICAgICAgIHNzbGNvbnRleHRfY2xpZW50Lm9wdGlvbnMgfD0gc3NsLk9QX05PX1NTTHYyCisgICAgICAgIHNzbGNvbnRleHRfY2xpZW50LnZlcmlmeV9tb2RlID0gc3NsLkNFUlRfUkVRVUlSRUQKKyAgICAgICAgc3NsY29udGV4dF9jbGllbnQubG9hZF92ZXJpZnlfbG9jYXRpb25zKGNhZmlsZT1TSUdOSU5HX0NBKQorICAgICAgICBpZiBoYXNhdHRyKHNzbGNvbnRleHRfY2xpZW50LCAnY2hlY2tfaG9zdG5hbWUnKToKKyAgICAgICAgICAgIHNzbGNvbnRleHRfY2xpZW50LmNoZWNrX2hvc3RuYW1lID0gVHJ1ZQorCisgICAgICAgICMgQ29ubmVjdGlvbiBzdWNjZWVkcyB3aXRoIGNvcnJlY3QgQ0EgYW5kIHNlcnZlciBob3N0bmFtZS4KKyAgICAgICAgZl9jID0gc2VsZi5sb29wLmNyZWF0ZV91bml4X2Nvbm5lY3Rpb24oTXlQcm90bywgcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsPXNzbGNvbnRleHRfY2xpZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfaG9zdG5hbWU9J2xvY2FsaG9zdCcpCisgICAgICAgIGNsaWVudCwgcHIgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGZfYykKKworICAgICAgICAjIGNsb3NlIGNvbm5lY3Rpb24KKyAgICAgICAgcHJvdG8udHJhbnNwb3J0LmNsb3NlKCkKKyAgICAgICAgY2xpZW50LmNsb3NlKCkKKyAgICAgICAgc2VydmVyLmNsb3NlKCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90by5kb25lKQorCisgICAgZGVmIHRlc3RfbGVnYWN5X2NyZWF0ZV91bml4X3NlcnZlcl9zc2xfdmVyaWZpZWQoc2VsZik6CisgICAgICAgIHdpdGggdGVzdF91dGlscy5mb3JjZV9sZWdhY3lfc3NsX3N1cHBvcnQoKToKKyAgICAgICAgICAgIHNlbGYudGVzdF9jcmVhdGVfdW5peF9zZXJ2ZXJfc3NsX3ZlcmlmaWVkKCkKKworICAgIEB1bml0dGVzdC5za2lwSWYoc3NsIGlzIE5vbmUsICdObyBzc2wgbW9kdWxlJykKKyAgICBkZWYgdGVzdF9jcmVhdGVfc2VydmVyX3NzbF92ZXJpZmllZChzZWxmKToKKyAgICAgICAgcHJvdG8gPSBNeVByb3RvKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZXJ2ZXIsIGhvc3QsIHBvcnQgPSBzZWxmLl9tYWtlX3NzbF9zZXJ2ZXIoCisgICAgICAgICAgICBsYW1iZGE6IHByb3RvLCBTSUdORURfQ0VSVEZJTEUpCisKKyAgICAgICAgc3NsY29udGV4dF9jbGllbnQgPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfU1NMdjIzKQorICAgICAgICBzc2xjb250ZXh0X2NsaWVudC5vcHRpb25zIHw9IHNzbC5PUF9OT19TU0x2MgorICAgICAgICBzc2xjb250ZXh0X2NsaWVudC52ZXJpZnlfbW9kZSA9IHNzbC5DRVJUX1JFUVVJUkVECisgICAgICAgIHNzbGNvbnRleHRfY2xpZW50LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhjYWZpbGU9U0lHTklOR19DQSkKKyAgICAgICAgaWYgaGFzYXR0cihzc2xjb250ZXh0X2NsaWVudCwgJ2NoZWNrX2hvc3RuYW1lJyk6CisgICAgICAgICAgICBzc2xjb250ZXh0X2NsaWVudC5jaGVja19ob3N0bmFtZSA9IFRydWUKKworICAgICAgICAjIENvbm5lY3Rpb24gc3VjY2VlZHMgd2l0aCBjb3JyZWN0IENBIGFuZCBzZXJ2ZXIgaG9zdG5hbWUuCisgICAgICAgIGZfYyA9IHNlbGYubG9vcC5jcmVhdGVfY29ubmVjdGlvbihNeVByb3RvLCBob3N0LCBwb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsPXNzbGNvbnRleHRfY2xpZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX2hvc3RuYW1lPSdsb2NhbGhvc3QnKQorICAgICAgICBjbGllbnQsIHByID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmX2MpCisKKyAgICAgICAgIyBleHRyYSBpbmZvIGlzIGF2YWlsYWJsZQorICAgICAgICBzZWxmLmNoZWNrX3NzbF9leHRyYV9pbmZvKGNsaWVudCxwZWVybmFtZT0oaG9zdCwgcG9ydCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVlcmNlcnQ9UEVFUkNFUlQpCisKKyAgICAgICAgIyBjbG9zZSBjb25uZWN0aW9uCisgICAgICAgIHByb3RvLnRyYW5zcG9ydC5jbG9zZSgpCisgICAgICAgIGNsaWVudC5jbG9zZSgpCisgICAgICAgIHNlcnZlci5jbG9zZSgpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uZG9uZSkKKworICAgIGRlZiB0ZXN0X2xlZ2FjeV9jcmVhdGVfc2VydmVyX3NzbF92ZXJpZmllZChzZWxmKToKKyAgICAgICAgd2l0aCB0ZXN0X3V0aWxzLmZvcmNlX2xlZ2FjeV9zc2xfc3VwcG9ydCgpOgorICAgICAgICAgICAgc2VsZi50ZXN0X2NyZWF0ZV9zZXJ2ZXJfc3NsX3ZlcmlmaWVkKCkKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9zZXJ2ZXJfc29jayhzZWxmKToKKyAgICAgICAgcHJvdG8gPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKworICAgICAgICBjbGFzcyBUZXN0TXlQcm90byhNeVByb3RvKToKKyAgICAgICAgICAgIGRlZiBjb25uZWN0aW9uX21hZGUoc2VsZiwgdHJhbnNwb3J0KToKKyAgICAgICAgICAgICAgICBzdXBlcigpLmNvbm5lY3Rpb25fbWFkZSh0cmFuc3BvcnQpCisgICAgICAgICAgICAgICAgcHJvdG8uc2V0X3Jlc3VsdChzZWxmKQorCisgICAgICAgIHNvY2tfb2IgPSBzb2NrZXQuc29ja2V0KHR5cGU9c29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICBzb2NrX29iLnNldHNvY2tvcHQoc29ja2V0LlNPTF9TT0NLRVQsIHNvY2tldC5TT19SRVVTRUFERFIsIDEpCisgICAgICAgIHNvY2tfb2IuYmluZCgoJzAuMC4wLjAnLCAwKSkKKworICAgICAgICBmID0gc2VsZi5sb29wLmNyZWF0ZV9zZXJ2ZXIoVGVzdE15UHJvdG8sIHNvY2s9c29ja19vYikKKyAgICAgICAgc2VydmVyID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmKQorICAgICAgICBzb2NrID0gc2VydmVyLnNvY2tldHNbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzb2NrLCBzb2NrX29iKQorCisgICAgICAgIGhvc3QsIHBvcnQgPSBzb2NrLmdldHNvY2tuYW1lKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChob3N0LCAnMC4wLjAuMCcpCisgICAgICAgIGNsaWVudCA9IHNvY2tldC5zb2NrZXQoKQorICAgICAgICBjbGllbnQuY29ubmVjdCgoJzEyNy4wLjAuMScsIHBvcnQpKQorICAgICAgICBjbGllbnQuc2VuZChiJ3h4eCcpCisgICAgICAgIGNsaWVudC5jbG9zZSgpCisgICAgICAgIHNlcnZlci5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfc2VydmVyX2FkZHJfaW5fdXNlKHNlbGYpOgorICAgICAgICBzb2NrX29iID0gc29ja2V0LnNvY2tldCh0eXBlPXNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAgc29ja19vYi5zZXRzb2Nrb3B0KHNvY2tldC5TT0xfU09DS0VULCBzb2NrZXQuU09fUkVVU0VBRERSLCAxKQorICAgICAgICBzb2NrX29iLmJpbmQoKCcwLjAuMC4wJywgMCkpCisKKyAgICAgICAgZiA9IHNlbGYubG9vcC5jcmVhdGVfc2VydmVyKE15UHJvdG8sIHNvY2s9c29ja19vYikKKyAgICAgICAgc2VydmVyID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmKQorICAgICAgICBzb2NrID0gc2VydmVyLnNvY2tldHNbMF0KKyAgICAgICAgaG9zdCwgcG9ydCA9IHNvY2suZ2V0c29ja25hbWUoKQorCisgICAgICAgIGYgPSBzZWxmLmxvb3AuY3JlYXRlX3NlcnZlcihNeVByb3RvLCBob3N0PWhvc3QsIHBvcnQ9cG9ydCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKSBhcyBjbToKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24uZXJybm8sIGVycm5vLkVBRERSSU5VU0UpCisKKyAgICAgICAgc2VydmVyLmNsb3NlKCkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHN1cHBvcnQuSVBWNl9FTkFCTEVELCAnSVB2NiBub3Qgc3VwcG9ydGVkIG9yIGVuYWJsZWQnKQorICAgIGRlZiB0ZXN0X2NyZWF0ZV9zZXJ2ZXJfZHVhbF9zdGFjayhzZWxmKToKKyAgICAgICAgZl9wcm90byA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIGNsYXNzIFRlc3RNeVByb3RvKE15UHJvdG8pOgorICAgICAgICAgICAgZGVmIGNvbm5lY3Rpb25fbWFkZShzZWxmLCB0cmFuc3BvcnQpOgorICAgICAgICAgICAgICAgIHN1cGVyKCkuY29ubmVjdGlvbl9tYWRlKHRyYW5zcG9ydCkKKyAgICAgICAgICAgICAgICBmX3Byb3RvLnNldF9yZXN1bHQoc2VsZikKKworICAgICAgICB0cnlfY291bnQgPSAwCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcG9ydCA9IHN1cHBvcnQuZmluZF91bnVzZWRfcG9ydCgpCisgICAgICAgICAgICAgICAgZiA9IHNlbGYubG9vcC5jcmVhdGVfc2VydmVyKFRlc3RNeVByb3RvLCBob3N0PU5vbmUsIHBvcnQ9cG9ydCkKKyAgICAgICAgICAgICAgICBzZXJ2ZXIgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGYpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBleDoKKyAgICAgICAgICAgICAgICBpZiBleC5lcnJubyA9PSBlcnJuby5FQUREUklOVVNFOgorICAgICAgICAgICAgICAgICAgICB0cnlfY291bnQgKz0gMQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbCg1LCB0cnlfY291bnQpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgY2xpZW50ID0gc29ja2V0LnNvY2tldCgpCisgICAgICAgIGNsaWVudC5jb25uZWN0KCgnMTI3LjAuMC4xJywgcG9ydCkpCisgICAgICAgIGNsaWVudC5zZW5kKGIneHh4JykKKyAgICAgICAgcHJvdG8gPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGZfcHJvdG8pCisgICAgICAgIHByb3RvLnRyYW5zcG9ydC5jbG9zZSgpCisgICAgICAgIGNsaWVudC5jbG9zZSgpCisKKyAgICAgICAgZl9wcm90byA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBjbGllbnQgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUNikKKyAgICAgICAgY2xpZW50LmNvbm5lY3QoKCc6OjEnLCBwb3J0KSkKKyAgICAgICAgY2xpZW50LnNlbmQoYid4eHgnKQorICAgICAgICBwcm90byA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZl9wcm90bykKKyAgICAgICAgcHJvdG8udHJhbnNwb3J0LmNsb3NlKCkKKyAgICAgICAgY2xpZW50LmNsb3NlKCkKKworICAgICAgICBzZXJ2ZXIuY2xvc2UoKQorCisgICAgZGVmIHRlc3Rfc2VydmVyX2Nsb3NlKHNlbGYpOgorICAgICAgICBmID0gc2VsZi5sb29wLmNyZWF0ZV9zZXJ2ZXIoTXlQcm90bywgJzAuMC4wLjAnLCAwKQorICAgICAgICBzZXJ2ZXIgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGYpCisgICAgICAgIHNvY2sgPSBzZXJ2ZXIuc29ja2V0c1swXQorICAgICAgICBob3N0LCBwb3J0ID0gc29jay5nZXRzb2NrbmFtZSgpCisKKyAgICAgICAgY2xpZW50ID0gc29ja2V0LnNvY2tldCgpCisgICAgICAgIGNsaWVudC5jb25uZWN0KCgnMTI3LjAuMC4xJywgcG9ydCkpCisgICAgICAgIGNsaWVudC5zZW5kKGIneHh4JykKKyAgICAgICAgY2xpZW50LmNsb3NlKCkKKworICAgICAgICBzZXJ2ZXIuY2xvc2UoKQorCisgICAgICAgIGNsaWVudCA9IHNvY2tldC5zb2NrZXQoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIENvbm5lY3Rpb25SZWZ1c2VkRXJyb3IsIGNsaWVudC5jb25uZWN0LCAoJzEyNy4wLjAuMScsIHBvcnQpKQorICAgICAgICBjbGllbnQuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX2RhdGFncmFtX2VuZHBvaW50KHNlbGYpOgorICAgICAgICBjbGFzcyBUZXN0TXlEYXRhZ3JhbVByb3RvKE15RGF0YWdyYW1Qcm90byk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oaW5uZXJfc2VsZik6CisgICAgICAgICAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhsb29wPXNlbGYubG9vcCkKKworICAgICAgICAgICAgZGVmIGRhdGFncmFtX3JlY2VpdmVkKHNlbGYsIGRhdGEsIGFkZHIpOgorICAgICAgICAgICAgICAgIHN1cGVyKCkuZGF0YWdyYW1fcmVjZWl2ZWQoZGF0YSwgYWRkcikKKyAgICAgICAgICAgICAgICBzZWxmLnRyYW5zcG9ydC5zZW5kdG8oYidyZXNwOicrZGF0YSwgYWRkcikKKworICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV9kYXRhZ3JhbV9lbmRwb2ludCgKKyAgICAgICAgICAgIFRlc3RNeURhdGFncmFtUHJvdG8sIGxvY2FsX2FkZHI9KCcxMjcuMC4wLjEnLCAwKSkKKyAgICAgICAgc190cmFuc3BvcnQsIHNlcnZlciA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ybykKKyAgICAgICAgaG9zdCwgcG9ydCA9IHNfdHJhbnNwb3J0LmdldF9leHRyYV9pbmZvKCdzb2NrbmFtZScpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHNfdHJhbnNwb3J0LCBhc3luY2lvLlRyYW5zcG9ydCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHNlcnZlciwgVGVzdE15RGF0YWdyYW1Qcm90bykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnSU5JVElBTElaRUQnLCBzZXJ2ZXIuc3RhdGUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc2VydmVyLnRyYW5zcG9ydCwgc190cmFuc3BvcnQpCisKKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnQoCisgICAgICAgICAgICBsYW1iZGE6IE15RGF0YWdyYW1Qcm90byhsb29wPXNlbGYubG9vcCksCisgICAgICAgICAgICByZW1vdGVfYWRkcj0oaG9zdCwgcG9ydCkpCisgICAgICAgIHRyYW5zcG9ydCwgY2xpZW50ID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb3JvKQorCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh0cmFuc3BvcnQsIGFzeW5jaW8uVHJhbnNwb3J0KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoY2xpZW50LCBNeURhdGFncmFtUHJvdG8pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0lOSVRJQUxJWkVEJywgY2xpZW50LnN0YXRlKQorICAgICAgICBzZWxmLmFzc2VydElzKGNsaWVudC50cmFuc3BvcnQsIHRyYW5zcG9ydCkKKworICAgICAgICB0cmFuc3BvcnQuc2VuZHRvKGIneHh4JykKKyAgICAgICAgdGVzdF91dGlscy5ydW5fdW50aWwoc2VsZi5sb29wLCBsYW1iZGE6IHNlcnZlci5uYnl0ZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMywgc2VydmVyLm5ieXRlcykKKyAgICAgICAgdGVzdF91dGlscy5ydW5fdW50aWwoc2VsZi5sb29wLCBsYW1iZGE6IGNsaWVudC5uYnl0ZXMpCisKKyAgICAgICAgIyByZWNlaXZlZAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDgsIGNsaWVudC5uYnl0ZXMpCisKKyAgICAgICAgIyBleHRyYSBpbmZvIGlzIGF2YWlsYWJsZQorICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZSh0cmFuc3BvcnQuZ2V0X2V4dHJhX2luZm8oJ3NvY2tuYW1lJykpCisKKyAgICAgICAgIyBjbG9zZSBjb25uZWN0aW9uCisgICAgICAgIHRyYW5zcG9ydC5jbG9zZSgpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY2xpZW50LmRvbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0NMT1NFRCcsIGNsaWVudC5zdGF0ZSkKKyAgICAgICAgc2VydmVyLnRyYW5zcG9ydC5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnRfc29jayhzZWxmKToKKyAgICAgICAgc29jayA9IE5vbmUKKyAgICAgICAgbG9jYWxfYWRkcmVzcyA9ICgnMTI3LjAuMC4xJywgMCkKKyAgICAgICAgaW5mb3MgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKAorICAgICAgICAgICAgc2VsZi5sb29wLmdldGFkZHJpbmZvKAorICAgICAgICAgICAgICAgICpsb2NhbF9hZGRyZXNzLCB0eXBlPXNvY2tldC5TT0NLX0RHUkFNKSkKKyAgICAgICAgZm9yIGZhbWlseSwgdHlwZSwgcHJvdG8sIGNuYW1lLCBhZGRyZXNzIGluIGluZm9zOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KGZhbWlseT1mYW1pbHksIHR5cGU9dHlwZSwgcHJvdG89cHJvdG8pCisgICAgICAgICAgICAgICAgc29jay5zZXRibG9ja2luZyhGYWxzZSkKKyAgICAgICAgICAgICAgICBzb2NrLmJpbmQoYWRkcmVzcykKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBhc3NlcnQgRmFsc2UsICdDYW4gbm90IGNyZWF0ZSBzb2NrZXQuJworCisgICAgICAgIGYgPSBzZWxmLmxvb3AuY3JlYXRlX2Nvbm5lY3Rpb24oCisgICAgICAgICAgICBsYW1iZGE6IE15RGF0YWdyYW1Qcm90byhsb29wPXNlbGYubG9vcCksIHNvY2s9c29jaykKKyAgICAgICAgdHIsIHByID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodHIsIGFzeW5jaW8uVHJhbnNwb3J0KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocHIsIE15RGF0YWdyYW1Qcm90bykKKyAgICAgICAgdHIuY2xvc2UoKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByLmRvbmUpCisKKyAgICBkZWYgdGVzdF9pbnRlcm5hbF9mZHMoc2VsZik6CisgICAgICAgIGxvb3AgPSBzZWxmLmNyZWF0ZV9ldmVudF9sb29wKCkKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UobG9vcCwgc2VsZWN0b3JfZXZlbnRzLkJhc2VTZWxlY3RvckV2ZW50TG9vcCk6CisgICAgICAgICAgICBsb29wLmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoJ2xvb3AgaXMgbm90IGEgQmFzZVNlbGVjdG9yRXZlbnRMb29wJykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxvb3AuX2ludGVybmFsX2ZkcykKKyAgICAgICAgbG9vcC5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgbG9vcC5faW50ZXJuYWxfZmRzKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShsb29wLl9jc29jaykKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUobG9vcC5fc3NvY2spCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhzeXMucGxhdGZvcm0gIT0gJ3dpbjMyJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAiRG9uJ3Qgc3VwcG9ydCBwaXBlcyBmb3IgV2luZG93cyIpCisgICAgZGVmIHRlc3RfcmVhZF9waXBlKHNlbGYpOgorICAgICAgICBwcm90byA9IE15UmVhZFBpcGVQcm90byhsb29wPXNlbGYubG9vcCkKKworICAgICAgICBycGlwZSwgd3BpcGUgPSBvcy5waXBlKCkKKyAgICAgICAgcGlwZW9iaiA9IGlvLm9wZW4ocnBpcGUsICdyYicsIDEwMjQpCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBjb25uZWN0KCk6CisgICAgICAgICAgICB0LCBwID0geWllbGQgZnJvbSBzZWxmLmxvb3AuY29ubmVjdF9yZWFkX3BpcGUoCisgICAgICAgICAgICAgICAgbGFtYmRhOiBwcm90bywgcGlwZW9iaikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMocCwgcHJvdG8pCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHQsIHByb3RvLnRyYW5zcG9ydCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWydJTklUSUFMJywgJ0NPTk5FQ1RFRCddLCBwcm90by5zdGF0ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcHJvdG8ubmJ5dGVzKQorCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ubmVjdCgpKQorCisgICAgICAgIG9zLndyaXRlKHdwaXBlLCBiJzEnKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl91bnRpbChzZWxmLmxvb3AsIGxhbWJkYTogcHJvdG8ubmJ5dGVzID49IDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgcHJvdG8ubmJ5dGVzKQorCisgICAgICAgIG9zLndyaXRlKHdwaXBlLCBiJzIzNDUnKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl91bnRpbChzZWxmLmxvb3AsIGxhbWJkYTogcHJvdG8ubmJ5dGVzID49IDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWydJTklUSUFMJywgJ0NPTk5FQ1RFRCddLCBwcm90by5zdGF0ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg1LCBwcm90by5uYnl0ZXMpCisKKyAgICAgICAgb3MuY2xvc2Uod3BpcGUpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uZG9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIFsnSU5JVElBTCcsICdDT05ORUNURUQnLCAnRU9GJywgJ0NMT1NFRCddLCBwcm90by5zdGF0ZSkKKyAgICAgICAgIyBleHRyYSBpbmZvIGlzIGF2YWlsYWJsZQorICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShwcm90by50cmFuc3BvcnQuZ2V0X2V4dHJhX2luZm8oJ3BpcGUnKSkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHN5cy5wbGF0Zm9ybSAhPSAnd2luMzInLAorICAgICAgICAgICAgICAgICAgICAgICAgICJEb24ndCBzdXBwb3J0IHBpcGVzIGZvciBXaW5kb3dzIikKKyAgICAjIHNlbGVjdCwgcG9sbCBhbmQga3F1ZXVlIGRvbid0IHN1cHBvcnQgY2hhcmFjdGVyIGRldmljZXMgKFBUWSkgb24gTWFjIE9TIFgKKyAgICAjIG9sZGVyIHRoYW4gMTAuNiAoU25vdyBMZW9wYXJkKQorICAgIEBzdXBwb3J0LnJlcXVpcmVzX21hY192ZXIoMTAsIDYpCisgICAgIyBJc3N1ZSAjMjA0OTU6IFRoZSB0ZXN0IGhhbmdzIG9uIEZyZWVCU0QgNy4yIGJ1dCBwYXNzIG9uIEZyZWVCU0QgOQorICAgIEBzdXBwb3J0LnJlcXVpcmVzX2ZyZWVic2RfdmVyc2lvbig4KQorICAgIGRlZiB0ZXN0X3JlYWRfcHR5X291dHB1dChzZWxmKToKKyAgICAgICAgcHJvdG8gPSBNeVJlYWRQaXBlUHJvdG8obG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgbWFzdGVyLCBzbGF2ZSA9IG9zLm9wZW5wdHkoKQorICAgICAgICBtYXN0ZXJfcmVhZF9vYmogPSBpby5vcGVuKG1hc3RlciwgJ3JiJywgMCkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGNvbm5lY3QoKToKKyAgICAgICAgICAgIHQsIHAgPSB5aWVsZCBmcm9tIHNlbGYubG9vcC5jb25uZWN0X3JlYWRfcGlwZShsYW1iZGE6IHByb3RvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc3Rlcl9yZWFkX29iaikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMocCwgcHJvdG8pCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHQsIHByb3RvLnRyYW5zcG9ydCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWydJTklUSUFMJywgJ0NPTk5FQ1RFRCddLCBwcm90by5zdGF0ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcHJvdG8ubmJ5dGVzKQorCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ubmVjdCgpKQorCisgICAgICAgIG9zLndyaXRlKHNsYXZlLCBiJzEnKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl91bnRpbChzZWxmLmxvb3AsIGxhbWJkYTogcHJvdG8ubmJ5dGVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHByb3RvLm5ieXRlcykKKworICAgICAgICBvcy53cml0ZShzbGF2ZSwgYicyMzQ1JykKKyAgICAgICAgdGVzdF91dGlscy5ydW5fdW50aWwoc2VsZi5sb29wLCBsYW1iZGE6IHByb3RvLm5ieXRlcyA+PSA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsnSU5JVElBTCcsICdDT05ORUNURUQnXSwgcHJvdG8uc3RhdGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNSwgcHJvdG8ubmJ5dGVzKQorCisgICAgICAgIG9zLmNsb3NlKHNsYXZlKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmRvbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBbJ0lOSVRJQUwnLCAnQ09OTkVDVEVEJywgJ0VPRicsICdDTE9TRUQnXSwgcHJvdG8uc3RhdGUpCisgICAgICAgICMgZXh0cmEgaW5mbyBpcyBhdmFpbGFibGUKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocHJvdG8udHJhbnNwb3J0LmdldF9leHRyYV9pbmZvKCdwaXBlJykpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhzeXMucGxhdGZvcm0gIT0gJ3dpbjMyJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAiRG9uJ3Qgc3VwcG9ydCBwaXBlcyBmb3IgV2luZG93cyIpCisgICAgZGVmIHRlc3Rfd3JpdGVfcGlwZShzZWxmKToKKyAgICAgICAgcnBpcGUsIHdwaXBlID0gb3MucGlwZSgpCisgICAgICAgIHBpcGVvYmogPSBpby5vcGVuKHdwaXBlLCAnd2InLCAxMDI0KQorCisgICAgICAgIHByb3RvID0gTXlXcml0ZVBpcGVQcm90byhsb29wPXNlbGYubG9vcCkKKyAgICAgICAgY29ubmVjdCA9IHNlbGYubG9vcC5jb25uZWN0X3dyaXRlX3BpcGUobGFtYmRhOiBwcm90bywgcGlwZW9iaikKKyAgICAgICAgdHJhbnNwb3J0LCBwID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb25uZWN0KQorICAgICAgICBzZWxmLmFzc2VydElzKHAsIHByb3RvKQorICAgICAgICBzZWxmLmFzc2VydElzKHRyYW5zcG9ydCwgcHJvdG8udHJhbnNwb3J0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdDT05ORUNURUQnLCBwcm90by5zdGF0ZSkKKworICAgICAgICB0cmFuc3BvcnQud3JpdGUoYicxJykKKworICAgICAgICBkYXRhID0gYnl0ZWFycmF5KCkKKyAgICAgICAgZGVmIHJlYWRlcihkYXRhKToKKyAgICAgICAgICAgIGNodW5rID0gb3MucmVhZChycGlwZSwgMTAyNCkKKyAgICAgICAgICAgIGRhdGEgKz0gY2h1bmsKKyAgICAgICAgICAgIHJldHVybiBsZW4oZGF0YSkKKworICAgICAgICB0ZXN0X3V0aWxzLnJ1bl91bnRpbChzZWxmLmxvb3AsIGxhbWJkYTogcmVhZGVyKGRhdGEpID49IDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYicxJywgZGF0YSkKKworICAgICAgICB0cmFuc3BvcnQud3JpdGUoYicyMzQ1JykKKyAgICAgICAgdGVzdF91dGlscy5ydW5fdW50aWwoc2VsZi5sb29wLCBsYW1iZGE6IHJlYWRlcihkYXRhKSA+PSA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInMTIzNDUnLCBkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdDT05ORUNURUQnLCBwcm90by5zdGF0ZSkKKworICAgICAgICBvcy5jbG9zZShycGlwZSkKKworICAgICAgICAjIGV4dHJhIGluZm8gaXMgYXZhaWxhYmxlCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHByb3RvLnRyYW5zcG9ydC5nZXRfZXh0cmFfaW5mbygncGlwZScpKQorCisgICAgICAgICMgY2xvc2UgY29ubmVjdGlvbgorICAgICAgICBwcm90by50cmFuc3BvcnQuY2xvc2UoKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmRvbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0NMT1NFRCcsIHByb3RvLnN0YXRlKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3lzLnBsYXRmb3JtICE9ICd3aW4zMicsCisgICAgICAgICAgICAgICAgICAgICAgICAgIkRvbid0IHN1cHBvcnQgcGlwZXMgZm9yIFdpbmRvd3MiKQorICAgIGRlZiB0ZXN0X3dyaXRlX3BpcGVfZGlzY29ubmVjdF9vbl9jbG9zZShzZWxmKToKKyAgICAgICAgcnNvY2ssIHdzb2NrID0gdGVzdF91dGlscy5zb2NrZXRwYWlyKCkKKyAgICAgICAgcnNvY2suc2V0YmxvY2tpbmcoRmFsc2UpCisgICAgICAgIHBpcGVvYmogPSBpby5vcGVuKHdzb2NrLmRldGFjaCgpLCAnd2InLCAxMDI0KQorCisgICAgICAgIHByb3RvID0gTXlXcml0ZVBpcGVQcm90byhsb29wPXNlbGYubG9vcCkKKyAgICAgICAgY29ubmVjdCA9IHNlbGYubG9vcC5jb25uZWN0X3dyaXRlX3BpcGUobGFtYmRhOiBwcm90bywgcGlwZW9iaikKKyAgICAgICAgdHJhbnNwb3J0LCBwID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb25uZWN0KQorICAgICAgICBzZWxmLmFzc2VydElzKHAsIHByb3RvKQorICAgICAgICBzZWxmLmFzc2VydElzKHRyYW5zcG9ydCwgcHJvdG8udHJhbnNwb3J0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdDT05ORUNURUQnLCBwcm90by5zdGF0ZSkKKworICAgICAgICB0cmFuc3BvcnQud3JpdGUoYicxJykKKyAgICAgICAgZGF0YSA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoc2VsZi5sb29wLnNvY2tfcmVjdihyc29jaywgMTAyNCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYicxJywgZGF0YSkKKworICAgICAgICByc29jay5jbG9zZSgpCisKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90by5kb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdDTE9TRUQnLCBwcm90by5zdGF0ZSkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHN5cy5wbGF0Zm9ybSAhPSAnd2luMzInLAorICAgICAgICAgICAgICAgICAgICAgICAgICJEb24ndCBzdXBwb3J0IHBpcGVzIGZvciBXaW5kb3dzIikKKyAgICAjIHNlbGVjdCwgcG9sbCBhbmQga3F1ZXVlIGRvbid0IHN1cHBvcnQgY2hhcmFjdGVyIGRldmljZXMgKFBUWSkgb24gTWFjIE9TIFgKKyAgICAjIG9sZGVyIHRoYW4gMTAuNiAoU25vdyBMZW9wYXJkKQorICAgIEBzdXBwb3J0LnJlcXVpcmVzX21hY192ZXIoMTAsIDYpCisgICAgZGVmIHRlc3Rfd3JpdGVfcHR5KHNlbGYpOgorICAgICAgICBtYXN0ZXIsIHNsYXZlID0gb3Mub3BlbnB0eSgpCisgICAgICAgIHNsYXZlX3dyaXRlX29iaiA9IGlvLm9wZW4oc2xhdmUsICd3YicsIDApCisKKyAgICAgICAgcHJvdG8gPSBNeVdyaXRlUGlwZVByb3RvKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBjb25uZWN0ID0gc2VsZi5sb29wLmNvbm5lY3Rfd3JpdGVfcGlwZShsYW1iZGE6IHByb3RvLCBzbGF2ZV93cml0ZV9vYmopCisgICAgICAgIHRyYW5zcG9ydCwgcCA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ubmVjdCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhwLCBwcm90bykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0cmFuc3BvcnQsIHByb3RvLnRyYW5zcG9ydCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnQ09OTkVDVEVEJywgcHJvdG8uc3RhdGUpCisKKyAgICAgICAgdHJhbnNwb3J0LndyaXRlKGInMScpCisKKyAgICAgICAgZGF0YSA9IGJ5dGVhcnJheSgpCisgICAgICAgIGRlZiByZWFkZXIoZGF0YSk6CisgICAgICAgICAgICBjaHVuayA9IG9zLnJlYWQobWFzdGVyLCAxMDI0KQorICAgICAgICAgICAgZGF0YSArPSBjaHVuaworICAgICAgICAgICAgcmV0dXJuIGxlbihkYXRhKQorCisgICAgICAgIHRlc3RfdXRpbHMucnVuX3VudGlsKHNlbGYubG9vcCwgbGFtYmRhOiByZWFkZXIoZGF0YSkgPj0gMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dD0xMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJzEnLCBkYXRhKQorCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShiJzIzNDUnKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl91bnRpbChzZWxmLmxvb3AsIGxhbWJkYTogcmVhZGVyKGRhdGEpID49IDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQ9MTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYicxMjM0NScsIGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0NPTk5FQ1RFRCcsIHByb3RvLnN0YXRlKQorCisgICAgICAgIG9zLmNsb3NlKG1hc3RlcikKKworICAgICAgICAjIGV4dHJhIGluZm8gaXMgYXZhaWxhYmxlCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHByb3RvLnRyYW5zcG9ydC5nZXRfZXh0cmFfaW5mbygncGlwZScpKQorCisgICAgICAgICMgY2xvc2UgY29ubmVjdGlvbgorICAgICAgICBwcm90by50cmFuc3BvcnQuY2xvc2UoKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmRvbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0NMT1NFRCcsIHByb3RvLnN0YXRlKQorCisgICAgZGVmIHRlc3RfcHJvbXB0X2NhbmNlbGxhdGlvbihzZWxmKToKKyAgICAgICAgciwgdyA9IHRlc3RfdXRpbHMuc29ja2V0cGFpcigpCisgICAgICAgIHIuc2V0YmxvY2tpbmcoRmFsc2UpCisgICAgICAgIGYgPSBzZWxmLmxvb3Auc29ja19yZWN2KHIsIDEpCisgICAgICAgIG92ID0gZ2V0YXR0cihmLCAnb3YnLCBOb25lKQorICAgICAgICBpZiBvdiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvdi5wZW5kaW5nKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgbWFpbigpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYubG9vcC5jYWxsX3Nvb24oZi5jYW5jZWwpCisgICAgICAgICAgICAgICAgeWllbGQgZnJvbSBmCisgICAgICAgICAgICBleGNlcHQgYXN5bmNpby5DYW5jZWxsZWRFcnJvcjoKKyAgICAgICAgICAgICAgICByZXMgPSAnY2FuY2VsbGVkJworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXMgPSBOb25lCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHNlbGYubG9vcC5zdG9wKCkKKyAgICAgICAgICAgIHJldHVybiByZXMKKworICAgICAgICBzdGFydCA9IHRpbWUubW9ub3RvbmljKCkKKyAgICAgICAgdCA9IGFzeW5jaW8uVGFzayhtYWluKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmxvb3AucnVuX2ZvcmV2ZXIoKQorICAgICAgICBlbGFwc2VkID0gdGltZS5tb25vdG9uaWMoKSAtIHN0YXJ0CisKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzKGVsYXBzZWQsIDAuMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnJlc3VsdCgpLCAnY2FuY2VsbGVkJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYXN5bmNpby5DYW5jZWxsZWRFcnJvciwgZi5yZXN1bHQpCisgICAgICAgIGlmIG92IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvdi5wZW5kaW5nKQorICAgICAgICBzZWxmLmxvb3AuX3N0b3Bfc2VydmluZyhyKQorCisgICAgICAgIHIuY2xvc2UoKQorICAgICAgICB3LmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X3RpbWVvdXRfcm91bmRpbmcoc2VsZik6CisgICAgICAgIGRlZiBfcnVuX29uY2UoKToKKyAgICAgICAgICAgIHNlbGYubG9vcC5fcnVuX29uY2VfY291bnRlciArPSAxCisgICAgICAgICAgICBvcmlnX3J1bl9vbmNlKCkKKworICAgICAgICBvcmlnX3J1bl9vbmNlID0gc2VsZi5sb29wLl9ydW5fb25jZQorICAgICAgICBzZWxmLmxvb3AuX3J1bl9vbmNlX2NvdW50ZXIgPSAwCisgICAgICAgIHNlbGYubG9vcC5fcnVuX29uY2UgPSBfcnVuX29uY2UKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHdhaXQoKToKKyAgICAgICAgICAgIGxvb3AgPSBzZWxmLmxvb3AKKyAgICAgICAgICAgIHlpZWxkIGZyb20gYXN5bmNpby5zbGVlcCgxZS0yLCBsb29wPWxvb3ApCisgICAgICAgICAgICB5aWVsZCBmcm9tIGFzeW5jaW8uc2xlZXAoMWUtNCwgbG9vcD1sb29wKQorICAgICAgICAgICAgeWllbGQgZnJvbSBhc3luY2lvLnNsZWVwKDFlLTYsIGxvb3A9bG9vcCkKKyAgICAgICAgICAgIHlpZWxkIGZyb20gYXN5bmNpby5zbGVlcCgxZS04LCBsb29wPWxvb3ApCisgICAgICAgICAgICB5aWVsZCBmcm9tIGFzeW5jaW8uc2xlZXAoMWUtMTAsIGxvb3A9bG9vcCkKKworICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHdhaXQoKSkKKyAgICAgICAgIyBUaGUgaWRlYWwgbnVtYmVyIG9mIGNhbGwgaXMgMTIsIGJ1dCBvbiBzb21lIHBsYXRmb3JtcywgdGhlIHNlbGVjdG9yCisgICAgICAgICMgbWF5IHNsZWVwIGF0IGxpdHRsZSBiaXQgbGVzcyB0aGFuIHRpbWVvdXQgZGVwZW5kaW5nIG9uIHRoZSByZXNvbHV0aW9uCisgICAgICAgICMgb2YgdGhlIGNsb2NrIHVzZWQgYnkgdGhlIGtlcm5lbC4gVG9sZXJhdGUgYSBmZXcgdXNlbGVzcyBjYWxscyBvbgorICAgICAgICAjIHRoZXNlIHBsYXRmb3Jtcy4KKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwoc2VsZi5sb29wLl9ydW5fb25jZV9jb3VudGVyLCAyMCwKKyAgICAgICAgICAgIHsnY2xvY2tfcmVzb2x1dGlvbic6IHNlbGYubG9vcC5fY2xvY2tfcmVzb2x1dGlvbiwKKyAgICAgICAgICAgICAnc2VsZWN0b3InOiBzZWxmLmxvb3AuX3NlbGVjdG9yLl9fY2xhc3NfXy5fX25hbWVfX30pCisKKyAgICBkZWYgdGVzdF9zb2NrX2Nvbm5lY3RfYWRkcmVzcyhzZWxmKToKKyAgICAgICAgYWRkcmVzc2VzID0gWyhzb2NrZXQuQUZfSU5FVCwgKCd3d3cucHl0aG9uLm9yZycsIDgwKSldCisgICAgICAgIGlmIHN1cHBvcnQuSVBWNl9FTkFCTEVEOgorICAgICAgICAgICAgYWRkcmVzc2VzLmV4dGVuZCgoCisgICAgICAgICAgICAgICAgKHNvY2tldC5BRl9JTkVUNiwgKCd3d3cucHl0aG9uLm9yZycsIDgwKSksCisgICAgICAgICAgICAgICAgKHNvY2tldC5BRl9JTkVUNiwgKCd3d3cucHl0aG9uLm9yZycsIDgwLCAwLCAwKSksCisgICAgICAgICAgICApKQorCisgICAgICAgIGZvciBmYW1pbHksIGFkZHJlc3MgaW4gYWRkcmVzc2VzOgorICAgICAgICAgICAgZm9yIHNvY2tfdHlwZSBpbiAoc29ja2V0LlNPQ0tfU1RSRUFNLCBzb2NrZXQuU09DS19ER1JBTSk6CisgICAgICAgICAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoZmFtaWx5LCBzb2NrX3R5cGUpCisgICAgICAgICAgICAgICAgd2l0aCBzb2NrOgorICAgICAgICAgICAgICAgICAgICBzb2NrLnNldGJsb2NraW5nKEZhbHNlKQorICAgICAgICAgICAgICAgICAgICBjb25uZWN0ID0gc2VsZi5sb29wLnNvY2tfY29ubmVjdChzb2NrLCBhZGRyZXNzKQorICAgICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb25uZWN0KQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKCdhZGRyZXNzIG11c3QgYmUgcmVzb2x2ZWQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cihjbS5leGNlcHRpb24pKQorCisgICAgZGVmIHRlc3RfcmVtb3ZlX2Zkc19hZnRlcl9jbG9zaW5nKHNlbGYpOgorICAgICAgICBsb29wID0gc2VsZi5jcmVhdGVfZXZlbnRfbG9vcCgpCisgICAgICAgIGNhbGxiYWNrID0gbGFtYmRhOiBOb25lCisgICAgICAgIHIsIHcgPSB0ZXN0X3V0aWxzLnNvY2tldHBhaXIoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoci5jbG9zZSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHcuY2xvc2UpCisgICAgICAgIGxvb3AuYWRkX3JlYWRlcihyLCBjYWxsYmFjaykKKyAgICAgICAgbG9vcC5hZGRfd3JpdGVyKHcsIGNhbGxiYWNrKQorICAgICAgICBsb29wLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShsb29wLnJlbW92ZV9yZWFkZXIocikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobG9vcC5yZW1vdmVfd3JpdGVyKHcpKQorCisgICAgZGVmIHRlc3RfYWRkX2Zkc19hZnRlcl9jbG9zaW5nKHNlbGYpOgorICAgICAgICBsb29wID0gc2VsZi5jcmVhdGVfZXZlbnRfbG9vcCgpCisgICAgICAgIGNhbGxiYWNrID0gbGFtYmRhOiBOb25lCisgICAgICAgIHIsIHcgPSB0ZXN0X3V0aWxzLnNvY2tldHBhaXIoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoci5jbG9zZSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHcuY2xvc2UpCisgICAgICAgIGxvb3AuY2xvc2UoKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvcik6CisgICAgICAgICAgICBsb29wLmFkZF9yZWFkZXIociwgY2FsbGJhY2spCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yKToKKyAgICAgICAgICAgIGxvb3AuYWRkX3dyaXRlcih3LCBjYWxsYmFjaykKKworICAgIGRlZiB0ZXN0X2Nsb3NlX3J1bm5pbmdfZXZlbnRfbG9vcChzZWxmKToKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBjbG9zZV9sb29wKGxvb3ApOgorICAgICAgICAgICAgc2VsZi5sb29wLmNsb3NlKCkKKworICAgICAgICBjb3JvID0gY2xvc2VfbG9vcChzZWxmLmxvb3ApCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yKToKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ybykKKworICAgIGRlZiB0ZXN0X2Nsb3NlKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuY2xvc2UoKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgdGVzdCgpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGZ1bmMgPSBsYW1iZGE6IEZhbHNlCisgICAgICAgIGNvcm8gPSB0ZXN0KCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGNvcm8uY2xvc2UpCisKKyAgICAgICAgIyBvcGVyYXRpb24gYmxvY2tlZCB3aGVuIHRoZSBsb29wIGlzIGNsb3NlZAorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvcik6CisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX2ZvcmV2ZXIoKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvcik6CisgICAgICAgICAgICBmdXQgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZnV0KQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvcik6CisgICAgICAgICAgICBzZWxmLmxvb3AuY2FsbF9zb29uKGZ1bmMpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yKToKKyAgICAgICAgICAgIHNlbGYubG9vcC5jYWxsX3Nvb25fdGhyZWFkc2FmZShmdW5jKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvcik6CisgICAgICAgICAgICBzZWxmLmxvb3AuY2FsbF9sYXRlcigxLjAsIGZ1bmMpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yKToKKyAgICAgICAgICAgIHNlbGYubG9vcC5jYWxsX2F0KHNlbGYubG9vcC50aW1lKCkgKyAuMCwgZnVuYykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl9pbl9leGVjdXRvcihOb25lLCBmdW5jKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvcik6CisgICAgICAgICAgICBzZWxmLmxvb3AuY3JlYXRlX3Rhc2soY29ybykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5sb29wLmFkZF9zaWduYWxfaGFuZGxlcihzaWduYWwuU0lHVEVSTSwgZnVuYykKKworCitjbGFzcyBTdWJwcm9jZXNzVGVzdHNNaXhpbjoKKworICAgIGRlZiBjaGVja190ZXJtaW5hdGVkKHNlbGYsIHJldHVybmNvZGUpOgorICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShyZXR1cm5jb2RlLCBpbnQpCisgICAgICAgICAgICAjIGV4cGVjdCAxIGJ1dCBzb21ldGltZXMgZ2V0IDAKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoLXNpZ25hbC5TSUdURVJNLCByZXR1cm5jb2RlKQorCisgICAgZGVmIGNoZWNrX2tpbGxlZChzZWxmLCByZXR1cm5jb2RlKToKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocmV0dXJuY29kZSwgaW50KQorICAgICAgICAgICAgIyBleHBlY3QgMSBidXQgc29tZXRpbWVzIGdldCAwCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKC1zaWduYWwuU0lHS0lMTCwgcmV0dXJuY29kZSkKKworICAgIGRlZiB0ZXN0X3N1YnByb2Nlc3NfZXhlYyhzZWxmKToKKyAgICAgICAgcHJvZyA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAnZWNoby5weScpCisKKyAgICAgICAgY29ubmVjdCA9IHNlbGYubG9vcC5zdWJwcm9jZXNzX2V4ZWMoCisgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdG9vbHMucGFydGlhbChNeVN1YnByb2Nlc3NQcm90b2NvbCwgc2VsZi5sb29wKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5leGVjdXRhYmxlLCBwcm9nKQorICAgICAgICB0cmFuc3AsIHByb3RvID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb25uZWN0KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocHJvdG8sIE15U3VicHJvY2Vzc1Byb3RvY29sKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmNvbm5lY3RlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnQ09OTkVDVEVEJywgcHJvdG8uc3RhdGUpCisKKyAgICAgICAgc3RkaW4gPSB0cmFuc3AuZ2V0X3BpcGVfdHJhbnNwb3J0KDApCisgICAgICAgIHN0ZGluLndyaXRlKGInUHl0aG9uIFRoZSBXaW5uZXInKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmdvdF9kYXRhWzFdLndhaXQoKSkKKyAgICAgICAgd2l0aCB0ZXN0X3V0aWxzLmRpc2FibGVfbG9nZ2VyKCk6CisgICAgICAgICAgICB0cmFuc3AuY2xvc2UoKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmNvbXBsZXRlZCkKKyAgICAgICAgc2VsZi5jaGVja19raWxsZWQocHJvdG8ucmV0dXJuY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ1B5dGhvbiBUaGUgV2lubmVyJywgcHJvdG8uZGF0YVsxXSkKKworICAgIGRlZiB0ZXN0X3N1YnByb2Nlc3NfaW50ZXJhY3RpdmUoc2VsZik6CisgICAgICAgIHByb2cgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJ2VjaG8ucHknKQorCisgICAgICAgIGNvbm5lY3QgPSBzZWxmLmxvb3Auc3VicHJvY2Vzc19leGVjKAorICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rvb2xzLnBhcnRpYWwoTXlTdWJwcm9jZXNzUHJvdG9jb2wsIHNlbGYubG9vcCksCisgICAgICAgICAgICAgICAgICAgICAgICBzeXMuZXhlY3V0YWJsZSwgcHJvZykKKyAgICAgICAgdHJhbnNwLCBwcm90byA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ubmVjdCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHByb3RvLCBNeVN1YnByb2Nlc3NQcm90b2NvbCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90by5jb25uZWN0ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0NPTk5FQ1RFRCcsIHByb3RvLnN0YXRlKQorCisgICAgICAgIHN0ZGluID0gdHJhbnNwLmdldF9waXBlX3RyYW5zcG9ydCgwKQorICAgICAgICBzdGRpbi53cml0ZShiJ1B5dGhvbiAnKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmdvdF9kYXRhWzFdLndhaXQoKSkKKyAgICAgICAgcHJvdG8uZ290X2RhdGFbMV0uY2xlYXIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInUHl0aG9uICcsIHByb3RvLmRhdGFbMV0pCisKKyAgICAgICAgc3RkaW4ud3JpdGUoYidUaGUgV2lubmVyJykKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90by5nb3RfZGF0YVsxXS53YWl0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidQeXRob24gVGhlIFdpbm5lcicsIHByb3RvLmRhdGFbMV0pCisKKyAgICAgICAgd2l0aCB0ZXN0X3V0aWxzLmRpc2FibGVfbG9nZ2VyKCk6CisgICAgICAgICAgICB0cmFuc3AuY2xvc2UoKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmNvbXBsZXRlZCkKKyAgICAgICAgc2VsZi5jaGVja19raWxsZWQocHJvdG8ucmV0dXJuY29kZSkKKworICAgIGRlZiB0ZXN0X3N1YnByb2Nlc3Nfc2hlbGwoc2VsZik6CisgICAgICAgIGNvbm5lY3QgPSBzZWxmLmxvb3Auc3VicHJvY2Vzc19zaGVsbCgKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0b29scy5wYXJ0aWFsKE15U3VicHJvY2Vzc1Byb3RvY29sLCBzZWxmLmxvb3ApLAorICAgICAgICAgICAgICAgICAgICAgICAgJ2VjaG8gUHl0aG9uJykKKyAgICAgICAgdHJhbnNwLCBwcm90byA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ubmVjdCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHByb3RvLCBNeVN1YnByb2Nlc3NQcm90b2NvbCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90by5jb25uZWN0ZWQpCisKKyAgICAgICAgdHJhbnNwLmdldF9waXBlX3RyYW5zcG9ydCgwKS5jbG9zZSgpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uY29tcGxldGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHByb3RvLnJldHVybmNvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhbGwoZi5kb25lKCkgZm9yIGYgaW4gcHJvdG8uZGlzY29ubmVjdHMudmFsdWVzKCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb3RvLmRhdGFbMV0ucnN0cmlwKGInXHJcbicpLCBiJ1B5dGhvbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvdG8uZGF0YVsyXSwgYicnKQorICAgICAgICB0cmFuc3AuY2xvc2UoKQorCisgICAgZGVmIHRlc3Rfc3VicHJvY2Vzc19leGl0Y29kZShzZWxmKToKKyAgICAgICAgY29ubmVjdCA9IHNlbGYubG9vcC5zdWJwcm9jZXNzX3NoZWxsKAorICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rvb2xzLnBhcnRpYWwoTXlTdWJwcm9jZXNzUHJvdG9jb2wsIHNlbGYubG9vcCksCisgICAgICAgICAgICAgICAgICAgICAgICAnZXhpdCA3Jywgc3RkaW49Tm9uZSwgc3Rkb3V0PU5vbmUsIHN0ZGVycj1Ob25lKQorICAgICAgICB0cmFuc3AsIHByb3RvID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb25uZWN0KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocHJvdG8sIE15U3VicHJvY2Vzc1Byb3RvY29sKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmNvbXBsZXRlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg3LCBwcm90by5yZXR1cm5jb2RlKQorICAgICAgICB0cmFuc3AuY2xvc2UoKQorCisgICAgZGVmIHRlc3Rfc3VicHJvY2Vzc19jbG9zZV9hZnRlcl9maW5pc2goc2VsZik6CisgICAgICAgIGNvbm5lY3QgPSBzZWxmLmxvb3Auc3VicHJvY2Vzc19zaGVsbCgKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0b29scy5wYXJ0aWFsKE15U3VicHJvY2Vzc1Byb3RvY29sLCBzZWxmLmxvb3ApLAorICAgICAgICAgICAgICAgICAgICAgICAgJ2V4aXQgNycsIHN0ZGluPU5vbmUsIHN0ZG91dD1Ob25lLCBzdGRlcnI9Tm9uZSkKKyAgICAgICAgdHJhbnNwLCBwcm90byA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ubmVjdCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHByb3RvLCBNeVN1YnByb2Nlc3NQcm90b2NvbCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodHJhbnNwLmdldF9waXBlX3RyYW5zcG9ydCgwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodHJhbnNwLmdldF9waXBlX3RyYW5zcG9ydCgxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodHJhbnNwLmdldF9waXBlX3RyYW5zcG9ydCgyKSkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90by5jb21wbGV0ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNywgcHJvdG8ucmV0dXJuY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodHJhbnNwLmNsb3NlKCkpCisKKyAgICBkZWYgdGVzdF9zdWJwcm9jZXNzX2tpbGwoc2VsZik6CisgICAgICAgIHByb2cgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJ2VjaG8ucHknKQorCisgICAgICAgIGNvbm5lY3QgPSBzZWxmLmxvb3Auc3VicHJvY2Vzc19leGVjKAorICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rvb2xzLnBhcnRpYWwoTXlTdWJwcm9jZXNzUHJvdG9jb2wsIHNlbGYubG9vcCksCisgICAgICAgICAgICAgICAgICAgICAgICBzeXMuZXhlY3V0YWJsZSwgcHJvZykKKyAgICAgICAgdHJhbnNwLCBwcm90byA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ubmVjdCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHByb3RvLCBNeVN1YnByb2Nlc3NQcm90b2NvbCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90by5jb25uZWN0ZWQpCisKKyAgICAgICAgdHJhbnNwLmtpbGwoKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmNvbXBsZXRlZCkKKyAgICAgICAgc2VsZi5jaGVja19raWxsZWQocHJvdG8ucmV0dXJuY29kZSkKKyAgICAgICAgdHJhbnNwLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X3N1YnByb2Nlc3NfdGVybWluYXRlKHNlbGYpOgorICAgICAgICBwcm9nID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICdlY2hvLnB5JykKKworICAgICAgICBjb25uZWN0ID0gc2VsZi5sb29wLnN1YnByb2Nlc3NfZXhlYygKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0b29scy5wYXJ0aWFsKE15U3VicHJvY2Vzc1Byb3RvY29sLCBzZWxmLmxvb3ApLAorICAgICAgICAgICAgICAgICAgICAgICAgc3lzLmV4ZWN1dGFibGUsIHByb2cpCisgICAgICAgIHRyYW5zcCwgcHJvdG8gPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvbm5lY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShwcm90bywgTXlTdWJwcm9jZXNzUHJvdG9jb2wpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uY29ubmVjdGVkKQorCisgICAgICAgIHRyYW5zcC50ZXJtaW5hdGUoKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmNvbXBsZXRlZCkKKyAgICAgICAgc2VsZi5jaGVja190ZXJtaW5hdGVkKHByb3RvLnJldHVybmNvZGUpCisgICAgICAgIHRyYW5zcC5jbG9zZSgpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInLCAiRG9uJ3QgaGF2ZSBTSUdIVVAiKQorICAgIGRlZiB0ZXN0X3N1YnByb2Nlc3Nfc2VuZF9zaWduYWwoc2VsZik6CisgICAgICAgIHByb2cgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJ2VjaG8ucHknKQorCisgICAgICAgIGNvbm5lY3QgPSBzZWxmLmxvb3Auc3VicHJvY2Vzc19leGVjKAorICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rvb2xzLnBhcnRpYWwoTXlTdWJwcm9jZXNzUHJvdG9jb2wsIHNlbGYubG9vcCksCisgICAgICAgICAgICAgICAgICAgICAgICBzeXMuZXhlY3V0YWJsZSwgcHJvZykKKyAgICAgICAgdHJhbnNwLCBwcm90byA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ubmVjdCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHByb3RvLCBNeVN1YnByb2Nlc3NQcm90b2NvbCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90by5jb25uZWN0ZWQpCisKKyAgICAgICAgdHJhbnNwLnNlbmRfc2lnbmFsKHNpZ25hbC5TSUdIVVApCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uY29tcGxldGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKC1zaWduYWwuU0lHSFVQLCBwcm90by5yZXR1cm5jb2RlKQorICAgICAgICB0cmFuc3AuY2xvc2UoKQorCisgICAgZGVmIHRlc3Rfc3VicHJvY2Vzc19zdGRlcnIoc2VsZik6CisgICAgICAgIHByb2cgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJ2VjaG8yLnB5JykKKworICAgICAgICBjb25uZWN0ID0gc2VsZi5sb29wLnN1YnByb2Nlc3NfZXhlYygKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0b29scy5wYXJ0aWFsKE15U3VicHJvY2Vzc1Byb3RvY29sLCBzZWxmLmxvb3ApLAorICAgICAgICAgICAgICAgICAgICAgICAgc3lzLmV4ZWN1dGFibGUsIHByb2cpCisgICAgICAgIHRyYW5zcCwgcHJvdG8gPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvbm5lY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShwcm90bywgTXlTdWJwcm9jZXNzUHJvdG9jb2wpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uY29ubmVjdGVkKQorCisgICAgICAgIHN0ZGluID0gdHJhbnNwLmdldF9waXBlX3RyYW5zcG9ydCgwKQorICAgICAgICBzdGRpbi53cml0ZShiJ3Rlc3QnKQorCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uY29tcGxldGVkKQorCisgICAgICAgIHRyYW5zcC5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidPVVQ6dGVzdCcsIHByb3RvLmRhdGFbMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwcm90by5kYXRhWzJdLnN0YXJ0c3dpdGgoYidFUlI6dGVzdCcpLCBwcm90by5kYXRhWzJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHByb3RvLnJldHVybmNvZGUpCisKKyAgICBkZWYgdGVzdF9zdWJwcm9jZXNzX3N0ZGVycl9yZWRpcmVjdF90b19zdGRvdXQoc2VsZik6CisgICAgICAgIHByb2cgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJ2VjaG8yLnB5JykKKworICAgICAgICBjb25uZWN0ID0gc2VsZi5sb29wLnN1YnByb2Nlc3NfZXhlYygKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0b29scy5wYXJ0aWFsKE15U3VicHJvY2Vzc1Byb3RvY29sLCBzZWxmLmxvb3ApLAorICAgICAgICAgICAgICAgICAgICAgICAgc3lzLmV4ZWN1dGFibGUsIHByb2csIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKKyAgICAgICAgdHJhbnNwLCBwcm90byA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ubmVjdCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHByb3RvLCBNeVN1YnByb2Nlc3NQcm90b2NvbCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90by5jb25uZWN0ZWQpCisKKyAgICAgICAgc3RkaW4gPSB0cmFuc3AuZ2V0X3BpcGVfdHJhbnNwb3J0KDApCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHRyYW5zcC5nZXRfcGlwZV90cmFuc3BvcnQoMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHRyYW5zcC5nZXRfcGlwZV90cmFuc3BvcnQoMikpCisKKyAgICAgICAgc3RkaW4ud3JpdGUoYid0ZXN0JykKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90by5jb21wbGV0ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwcm90by5kYXRhWzFdLnN0YXJ0c3dpdGgoYidPVVQ6dGVzdEVSUjp0ZXN0JyksCisgICAgICAgICAgICAgICAgICAgICAgICBwcm90by5kYXRhWzFdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInJywgcHJvdG8uZGF0YVsyXSkKKworICAgICAgICB0cmFuc3AuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHByb3RvLnJldHVybmNvZGUpCisKKyAgICBkZWYgdGVzdF9zdWJwcm9jZXNzX2Nsb3NlX2NsaWVudF9zdHJlYW0oc2VsZik6CisgICAgICAgIHByb2cgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJ2VjaG8zLnB5JykKKworICAgICAgICBjb25uZWN0ID0gc2VsZi5sb29wLnN1YnByb2Nlc3NfZXhlYygKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0b29scy5wYXJ0aWFsKE15U3VicHJvY2Vzc1Byb3RvY29sLCBzZWxmLmxvb3ApLAorICAgICAgICAgICAgICAgICAgICAgICAgc3lzLmV4ZWN1dGFibGUsIHByb2cpCisgICAgICAgIHRyYW5zcCwgcHJvdG8gPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvbm5lY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShwcm90bywgTXlTdWJwcm9jZXNzUHJvdG9jb2wpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uY29ubmVjdGVkKQorCisgICAgICAgIHN0ZGluID0gdHJhbnNwLmdldF9waXBlX3RyYW5zcG9ydCgwKQorICAgICAgICBzdGRvdXQgPSB0cmFuc3AuZ2V0X3BpcGVfdHJhbnNwb3J0KDEpCisgICAgICAgIHN0ZGluLndyaXRlKGIndGVzdCcpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uZ290X2RhdGFbMV0ud2FpdCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInT1VUOnRlc3QnLCBwcm90by5kYXRhWzFdKQorCisgICAgICAgIHN0ZG91dC5jbG9zZSgpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uZGlzY29ubmVjdHNbMV0pCisgICAgICAgIHN0ZGluLndyaXRlKGIneHh4JykKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90by5nb3RfZGF0YVsyXS53YWl0KCkpCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSAhPSAnd2luMzInOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ0VSUjpCcm9rZW5QaXBlRXJyb3InLCBwcm90by5kYXRhWzJdKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBBZnRlciBjbG9zaW5nIHRoZSByZWFkLWVuZCBvZiBhIHBpcGUsIHdyaXRpbmcgdG8gdGhlCisgICAgICAgICAgICAjIHdyaXRlLWVuZCB1c2luZyBvcy53cml0ZSgpIGZhaWxzIHdpdGggZXJybm89PUVJTlZBTCBhbmQKKyAgICAgICAgICAgICMgR2V0TGFzdEVycm9yKCk9PUVSUk9SX0lOVkFMSURfTkFNRSBvbiBXaW5kb3dzIT8hICAoVXNpbmcKKyAgICAgICAgICAgICMgV3JpdGVGaWxlKCkgd2UgZ2V0IEVSUk9SX0JST0tFTl9QSVBFIGFzIGV4cGVjdGVkLikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidFUlI6T1NFcnJvcicsIHByb3RvLmRhdGFbMl0pCisgICAgICAgIHdpdGggdGVzdF91dGlscy5kaXNhYmxlX2xvZ2dlcigpOgorICAgICAgICAgICAgdHJhbnNwLmNsb3NlKCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90by5jb21wbGV0ZWQpCisgICAgICAgIHNlbGYuY2hlY2tfa2lsbGVkKHByb3RvLnJldHVybmNvZGUpCisKKyAgICBkZWYgdGVzdF9zdWJwcm9jZXNzX3dhaXRfbm9fc2FtZV9ncm91cChzZWxmKToKKyAgICAgICAgIyBzdGFydCB0aGUgbmV3IHByb2Nlc3MgaW4gYSBuZXcgc2Vzc2lvbgorICAgICAgICBjb25uZWN0ID0gc2VsZi5sb29wLnN1YnByb2Nlc3Nfc2hlbGwoCisgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdG9vbHMucGFydGlhbChNeVN1YnByb2Nlc3NQcm90b2NvbCwgc2VsZi5sb29wKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdleGl0IDcnLCBzdGRpbj1Ob25lLCBzdGRvdXQ9Tm9uZSwgc3RkZXJyPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICBzdGFydF9uZXdfc2Vzc2lvbj1UcnVlKQorICAgICAgICBfLCBwcm90byA9IHlpZWxkIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ubmVjdCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHByb3RvLCBNeVN1YnByb2Nlc3NQcm90b2NvbCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90by5jb21wbGV0ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNywgcHJvdG8ucmV0dXJuY29kZSkKKworICAgIGRlZiB0ZXN0X3N1YnByb2Nlc3NfZXhlY19pbnZhbGlkX2FyZ3Moc2VsZik6CisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgY29ubmVjdCgqKmt3ZHMpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBzZWxmLmxvb3Auc3VicHJvY2Vzc19leGVjKAorICAgICAgICAgICAgICAgIGFzeW5jaW8uU3VicHJvY2Vzc1Byb3RvY29sLAorICAgICAgICAgICAgICAgICdwd2QnLCAqKmt3ZHMpCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ubmVjdCh1bml2ZXJzYWxfbmV3bGluZXM9VHJ1ZSkpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvbm5lY3QoYnVmc2l6ZT00MDk2KSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ubmVjdChzaGVsbD1UcnVlKSkKKworICAgIGRlZiB0ZXN0X3N1YnByb2Nlc3Nfc2hlbGxfaW52YWxpZF9hcmdzKHNlbGYpOgorICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGNvbm5lY3QoY21kPU5vbmUsICoqa3dkcyk6CisgICAgICAgICAgICBpZiBub3QgY21kOgorICAgICAgICAgICAgICAgIGNtZCA9ICdwd2QnCisgICAgICAgICAgICB5aWVsZCBmcm9tIHNlbGYubG9vcC5zdWJwcm9jZXNzX3NoZWxsKAorICAgICAgICAgICAgICAgIGFzeW5jaW8uU3VicHJvY2Vzc1Byb3RvY29sLAorICAgICAgICAgICAgICAgIGNtZCwgKiprd2RzKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvbm5lY3QoWydscycsICctbCddKSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ubmVjdCh1bml2ZXJzYWxfbmV3bGluZXM9VHJ1ZSkpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvbm5lY3QoYnVmc2l6ZT00MDk2KSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ubmVjdChzaGVsbD1GYWxzZSkpCisKKworaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6CisKKyAgICBjbGFzcyBTZWxlY3RFdmVudExvb3BUZXN0cyhFdmVudExvb3BUZXN0c01peGluLCB0ZXN0X3V0aWxzLlRlc3RDYXNlKToKKworICAgICAgICBkZWYgY3JlYXRlX2V2ZW50X2xvb3Aoc2VsZik6CisgICAgICAgICAgICByZXR1cm4gYXN5bmNpby5TZWxlY3RvckV2ZW50TG9vcCgpCisKKyAgICBjbGFzcyBQcm9hY3RvckV2ZW50TG9vcFRlc3RzKEV2ZW50TG9vcFRlc3RzTWl4aW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdWJwcm9jZXNzVGVzdHNNaXhpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfdXRpbHMuVGVzdENhc2UpOgorCisgICAgICAgIGRlZiBjcmVhdGVfZXZlbnRfbG9vcChzZWxmKToKKyAgICAgICAgICAgIHJldHVybiBhc3luY2lvLlByb2FjdG9yRXZlbnRMb29wKCkKKworICAgICAgICBpZiBub3Qgc3NscHJvdG8uX2lzX3NzbHByb3RvX2F2YWlsYWJsZSgpOgorICAgICAgICAgICAgZGVmIHRlc3RfY3JlYXRlX3NzbF9jb25uZWN0aW9uKHNlbGYpOgorICAgICAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJuZWVkIHB5dGhvbiAzLjUgKHNzbC5NZW1vcnlCSU8pIikKKworICAgICAgICAgICAgZGVmIHRlc3RfY3JlYXRlX3NlcnZlcl9zc2woc2VsZik6CisgICAgICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIm5lZWQgcHl0aG9uIDMuNSAoc3NsLk1lbW9yeUJJTykiKQorCisgICAgICAgICAgICBkZWYgdGVzdF9jcmVhdGVfc2VydmVyX3NzbF92ZXJpZnlfZmFpbGVkKHNlbGYpOgorICAgICAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJuZWVkIHB5dGhvbiAzLjUgKHNzbC5NZW1vcnlCSU8pIikKKworICAgICAgICAgICAgZGVmIHRlc3RfY3JlYXRlX3NlcnZlcl9zc2xfbWF0Y2hfZmFpbGVkKHNlbGYpOgorICAgICAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJuZWVkIHB5dGhvbiAzLjUgKHNzbC5NZW1vcnlCSU8pIikKKworICAgICAgICAgICAgZGVmIHRlc3RfY3JlYXRlX3NlcnZlcl9zc2xfdmVyaWZpZWQoc2VsZik6CisgICAgICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIm5lZWQgcHl0aG9uIDMuNSAoc3NsLk1lbW9yeUJJTykiKQorCisgICAgICAgIGRlZiB0ZXN0X2xlZ2FjeV9jcmVhdGVfc3NsX2Nvbm5lY3Rpb24oc2VsZik6CisgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiSW9jcEV2ZW50TG9vcCBpbmNvbXBhdGlibGUgd2l0aCBsZWdhY3kgU1NMIikKKworICAgICAgICBkZWYgdGVzdF9sZWdhY3lfY3JlYXRlX3NlcnZlcl9zc2woc2VsZik6CisgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiSW9jcEV2ZW50TG9vcCBpbmNvbXBhdGlibGUgd2l0aCBsZWdhY3kgU1NMIikKKworICAgICAgICBkZWYgdGVzdF9sZWdhY3lfY3JlYXRlX3NlcnZlcl9zc2xfdmVyaWZ5X2ZhaWxlZChzZWxmKToKKyAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJJb2NwRXZlbnRMb29wIGluY29tcGF0aWJsZSB3aXRoIGxlZ2FjeSBTU0wiKQorCisgICAgICAgIGRlZiB0ZXN0X2xlZ2FjeV9jcmVhdGVfc2VydmVyX3NzbF9tYXRjaF9mYWlsZWQoc2VsZik6CisgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiSW9jcEV2ZW50TG9vcCBpbmNvbXBhdGlibGUgd2l0aCBsZWdhY3kgU1NMIikKKworICAgICAgICBkZWYgdGVzdF9sZWdhY3lfY3JlYXRlX3NlcnZlcl9zc2xfdmVyaWZpZWQoc2VsZik6CisgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiSW9jcEV2ZW50TG9vcCBpbmNvbXBhdGlibGUgd2l0aCBsZWdhY3kgU1NMIikKKworICAgICAgICBkZWYgdGVzdF9yZWFkZXJfY2FsbGJhY2soc2VsZik6CisgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiSW9jcEV2ZW50TG9vcCBkb2VzIG5vdCBoYXZlIGFkZF9yZWFkZXIoKSIpCisKKyAgICAgICAgZGVmIHRlc3RfcmVhZGVyX2NhbGxiYWNrX2NhbmNlbChzZWxmKToKKyAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJJb2NwRXZlbnRMb29wIGRvZXMgbm90IGhhdmUgYWRkX3JlYWRlcigpIikKKworICAgICAgICBkZWYgdGVzdF93cml0ZXJfY2FsbGJhY2soc2VsZik6CisgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiSW9jcEV2ZW50TG9vcCBkb2VzIG5vdCBoYXZlIGFkZF93cml0ZXIoKSIpCisKKyAgICAgICAgZGVmIHRlc3Rfd3JpdGVyX2NhbGxiYWNrX2NhbmNlbChzZWxmKToKKyAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJJb2NwRXZlbnRMb29wIGRvZXMgbm90IGhhdmUgYWRkX3dyaXRlcigpIikKKworICAgICAgICBkZWYgdGVzdF9jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnQoc2VsZik6CisgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgKKyAgICAgICAgICAgICAgICAiSW9jcEV2ZW50TG9vcCBkb2VzIG5vdCBoYXZlIGNyZWF0ZV9kYXRhZ3JhbV9lbmRwb2ludCgpIikKKworICAgICAgICBkZWYgdGVzdF9yZW1vdmVfZmRzX2FmdGVyX2Nsb3Npbmcoc2VsZik6CisgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiSW9jcEV2ZW50TG9vcCBkb2VzIG5vdCBoYXZlIGFkZF9yZWFkZXIoKSIpCitlbHNlOgorICAgIGZyb20gYXN5bmNpbyBpbXBvcnQgc2VsZWN0b3JzCisKKyAgICBjbGFzcyBVbml4RXZlbnRMb29wVGVzdHNNaXhpbihFdmVudExvb3BUZXN0c01peGluKToKKyAgICAgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICAgICAgc3VwZXIoKS5zZXRVcCgpCisgICAgICAgICAgICB3YXRjaGVyID0gYXN5bmNpby5TYWZlQ2hpbGRXYXRjaGVyKCkKKyAgICAgICAgICAgIHdhdGNoZXIuYXR0YWNoX2xvb3Aoc2VsZi5sb29wKQorICAgICAgICAgICAgYXN5bmNpby5zZXRfY2hpbGRfd2F0Y2hlcih3YXRjaGVyKQorCisgICAgICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgICAgIGFzeW5jaW8uc2V0X2NoaWxkX3dhdGNoZXIoTm9uZSkKKyAgICAgICAgICAgIHN1cGVyKCkudGVhckRvd24oKQorCisgICAgaWYgaGFzYXR0cihzZWxlY3RvcnMsICdLcXVldWVTZWxlY3RvcicpOgorICAgICAgICBjbGFzcyBLcXVldWVFdmVudExvb3BUZXN0cyhVbml4RXZlbnRMb29wVGVzdHNNaXhpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VicHJvY2Vzc1Rlc3RzTWl4aW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfdXRpbHMuVGVzdENhc2UpOgorCisgICAgICAgICAgICBkZWYgY3JlYXRlX2V2ZW50X2xvb3Aoc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIGFzeW5jaW8uU2VsZWN0b3JFdmVudExvb3AoCisgICAgICAgICAgICAgICAgICAgIHNlbGVjdG9ycy5LcXVldWVTZWxlY3RvcigpKQorCisgICAgICAgICAgICAjIGtxdWV1ZSBkb2Vzbid0IHN1cHBvcnQgY2hhcmFjdGVyIGRldmljZXMgKFBUWSkgb24gTWFjIE9TIFggb2xkZXIKKyAgICAgICAgICAgICMgdGhhbiAxMC45IChNYXZlcmljaykKKyAgICAgICAgICAgIEBzdXBwb3J0LnJlcXVpcmVzX21hY192ZXIoMTAsIDkpCisgICAgICAgICAgICAjIElzc3VlICMyMDY2NzogS3F1ZXVlRXZlbnRMb29wVGVzdHMudGVzdF9yZWFkX3B0eV9vdXRwdXQoKQorICAgICAgICAgICAgIyBoYW5ncyBvbiBPcGVuQlNEIDUuNQorICAgICAgICAgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnb3BlbmJzZCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdCBoYW5ncyBvbiBPcGVuQlNEJykKKyAgICAgICAgICAgIGRlZiB0ZXN0X3JlYWRfcHR5X291dHB1dChzZWxmKToKKyAgICAgICAgICAgICAgICBzdXBlcigpLnRlc3RfcmVhZF9wdHlfb3V0cHV0KCkKKworICAgICAgICAgICAgIyBrcXVldWUgZG9lc24ndCBzdXBwb3J0IGNoYXJhY3RlciBkZXZpY2VzIChQVFkpIG9uIE1hYyBPUyBYIG9sZGVyCisgICAgICAgICAgICAjIHRoYW4gMTAuOSAoTWF2ZXJpY2spCisgICAgICAgICAgICBAc3VwcG9ydC5yZXF1aXJlc19tYWNfdmVyKDEwLCA5KQorICAgICAgICAgICAgZGVmIHRlc3Rfd3JpdGVfcHR5KHNlbGYpOgorICAgICAgICAgICAgICAgIHN1cGVyKCkudGVzdF93cml0ZV9wdHkoKQorCisgICAgaWYgaGFzYXR0cihzZWxlY3RvcnMsICdFcG9sbFNlbGVjdG9yJyk6CisgICAgICAgIGNsYXNzIEVQb2xsRXZlbnRMb29wVGVzdHMoVW5peEV2ZW50TG9vcFRlc3RzTWl4aW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VicHJvY2Vzc1Rlc3RzTWl4aW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF91dGlscy5UZXN0Q2FzZSk6CisKKyAgICAgICAgICAgIGRlZiBjcmVhdGVfZXZlbnRfbG9vcChzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gYXN5bmNpby5TZWxlY3RvckV2ZW50TG9vcChzZWxlY3RvcnMuRXBvbGxTZWxlY3RvcigpKQorCisgICAgaWYgaGFzYXR0cihzZWxlY3RvcnMsICdQb2xsU2VsZWN0b3InKToKKyAgICAgICAgY2xhc3MgUG9sbEV2ZW50TG9vcFRlc3RzKFVuaXhFdmVudExvb3BUZXN0c01peGluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VicHJvY2Vzc1Rlc3RzTWl4aW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X3V0aWxzLlRlc3RDYXNlKToKKworICAgICAgICAgICAgZGVmIGNyZWF0ZV9ldmVudF9sb29wKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBhc3luY2lvLlNlbGVjdG9yRXZlbnRMb29wKHNlbGVjdG9ycy5Qb2xsU2VsZWN0b3IoKSkKKworICAgICMgU2hvdWxkIGFsd2F5cyBleGlzdC4KKyAgICBjbGFzcyBTZWxlY3RFdmVudExvb3BUZXN0cyhVbml4RXZlbnRMb29wVGVzdHNNaXhpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdWJwcm9jZXNzVGVzdHNNaXhpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X3V0aWxzLlRlc3RDYXNlKToKKworICAgICAgICBkZWYgY3JlYXRlX2V2ZW50X2xvb3Aoc2VsZik6CisgICAgICAgICAgICByZXR1cm4gYXN5bmNpby5TZWxlY3RvckV2ZW50TG9vcChzZWxlY3RvcnMuU2VsZWN0U2VsZWN0b3IoKSkKKworCitkZWYgbm9vcCgqYXJncyk6CisgICAgcGFzcworCisKK2NsYXNzIEhhbmRsZVRlc3RzKHRlc3RfdXRpbHMuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AgPSBtb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuZ2V0X2RlYnVnLnJldHVybl92YWx1ZSA9IFRydWUKKworICAgIGRlZiB0ZXN0X2hhbmRsZShzZWxmKToKKyAgICAgICAgZGVmIGNhbGxiYWNrKCphcmdzKToKKyAgICAgICAgICAgIHJldHVybiBhcmdzCisKKyAgICAgICAgYXJncyA9ICgpCisgICAgICAgIGggPSBhc3luY2lvLkhhbmRsZShjYWxsYmFjaywgYXJncywgc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzKGguX2NhbGxiYWNrLCBjYWxsYmFjaykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhoLl9hcmdzLCBhcmdzKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGguX2NhbmNlbGxlZCkKKworICAgICAgICBoLmNhbmNlbCgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoLl9jYW5jZWxsZWQpCisKKyAgICBkZWYgdGVzdF9oYW5kbGVfZnJvbV9oYW5kbGUoc2VsZik6CisgICAgICAgIGRlZiBjYWxsYmFjaygqYXJncyk6CisgICAgICAgICAgICByZXR1cm4gYXJncworICAgICAgICBoMSA9IGFzeW5jaW8uSGFuZGxlKGNhbGxiYWNrLCAoKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgQXNzZXJ0aW9uRXJyb3IsIGFzeW5jaW8uSGFuZGxlLCBoMSwgKCksIHNlbGYubG9vcCkKKworICAgIGRlZiB0ZXN0X2NhbGxiYWNrX3dpdGhfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICBkZWYgY2FsbGJhY2soKToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoKQorCisgICAgICAgIHNlbGYubG9vcCA9IG1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5jYWxsX2V4Y2VwdGlvbl9oYW5kbGVyID0gbW9jay5Nb2NrKCkKKworICAgICAgICBoID0gYXN5bmNpby5IYW5kbGUoY2FsbGJhY2ssICgpLCBzZWxmLmxvb3ApCisgICAgICAgIGguX3J1bigpCisKKyAgICAgICAgc2VsZi5sb29wLmNhbGxfZXhjZXB0aW9uX2hhbmRsZXIuYXNzZXJ0X2NhbGxlZF93aXRoKHsKKyAgICAgICAgICAgICdtZXNzYWdlJzogdGVzdF91dGlscy5Nb2NrUGF0dGVybignRXhjZXB0aW9uIGluIGNhbGxiYWNrLionKSwKKyAgICAgICAgICAgICdleGNlcHRpb24nOiBtb2NrLkFOWSwKKyAgICAgICAgICAgICdoYW5kbGUnOiBoLAorICAgICAgICAgICAgJ3NvdXJjZV90cmFjZWJhY2snOiBoLl9zb3VyY2VfdHJhY2ViYWNrLAorICAgICAgICB9KQorCisgICAgZGVmIHRlc3RfaGFuZGxlX3dlYWtyZWYoc2VsZik6CisgICAgICAgIHdkID0gd2Vha3JlZi5XZWFrVmFsdWVEaWN0aW9uYXJ5KCkKKyAgICAgICAgaCA9IGFzeW5jaW8uSGFuZGxlKGxhbWJkYTogTm9uZSwgKCksIHNlbGYubG9vcCkKKyAgICAgICAgd2RbJ2gnXSA9IGggICMgV291bGQgZmFpbCB3aXRob3V0IF9fd2Vha3JlZl9fIHNsb3QuCisKKyAgICBkZWYgdGVzdF9oYW5kbGVfcmVwcihzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLmdldF9kZWJ1Zy5yZXR1cm5fdmFsdWUgPSBGYWxzZQorCisgICAgICAgICMgc2ltcGxlIGZ1bmN0aW9uCisgICAgICAgIGggPSBhc3luY2lvLkhhbmRsZShub29wLCAoMSwgMiksIHNlbGYubG9vcCkKKyAgICAgICAgZmlsZW5hbWUsIGxpbmVubyA9IHRlc3RfdXRpbHMuZ2V0X2Z1bmN0aW9uX3NvdXJjZShub29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoaCksCisgICAgICAgICAgICAgICAgICAgICAgICAnPEhhbmRsZSBub29wKDEsIDIpIGF0ICVzOiVzPicKKyAgICAgICAgICAgICAgICAgICAgICAgICUgKGZpbGVuYW1lLCBsaW5lbm8pKQorCisgICAgICAgICMgY2FuY2VsbGVkIGhhbmRsZQorICAgICAgICBoLmNhbmNlbCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICc8SGFuZGxlIGNhbmNlbGxlZD4nKQorCisgICAgICAgICMgZGVjb3JhdGVkIGZ1bmN0aW9uCisgICAgICAgIGNiID0gYXN5bmNpby5jb3JvdXRpbmUobm9vcCkKKyAgICAgICAgaCA9IGFzeW5jaW8uSGFuZGxlKGNiLCAoKSwgc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoaCksCisgICAgICAgICAgICAgICAgICAgICAgICAnPEhhbmRsZSBub29wKCkgYXQgJXM6JXM+JworICAgICAgICAgICAgICAgICAgICAgICAgJSAoZmlsZW5hbWUsIGxpbmVubykpCisKKyAgICAgICAgIyBwYXJ0aWFsIGZ1bmN0aW9uCisgICAgICAgIGNiID0gZnVuY3Rvb2xzLnBhcnRpYWwobm9vcCwgMSwgMikKKyAgICAgICAgaCA9IGFzeW5jaW8uSGFuZGxlKGNiLCAoMywpLCBzZWxmLmxvb3ApCisgICAgICAgIHJlZ2V4ID0gKHInXjxIYW5kbGUgbm9vcFwoMSwgMlwpXCgzXCkgYXQgJXM6JXM+JCcKKyAgICAgICAgICAgICAgICAgJSAocmUuZXNjYXBlKGZpbGVuYW1lKSwgbGluZW5vKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSZWdleChyZXByKGgpLCByZWdleCkKKworICAgICAgICAjIHBhcnRpYWwgbWV0aG9kCisgICAgICAgIGlmIHN5cy52ZXJzaW9uX2luZm8gPj0gKDMsIDQpOgorICAgICAgICAgICAgbWV0aG9kID0gSGFuZGxlVGVzdHMudGVzdF9oYW5kbGVfcmVwcgorICAgICAgICAgICAgY2IgPSBmdW5jdG9vbHMucGFydGlhbG1ldGhvZChtZXRob2QpCisgICAgICAgICAgICBmaWxlbmFtZSwgbGluZW5vID0gdGVzdF91dGlscy5nZXRfZnVuY3Rpb25fc291cmNlKG1ldGhvZCkKKyAgICAgICAgICAgIGggPSBhc3luY2lvLkhhbmRsZShjYiwgKCksIHNlbGYubG9vcCkKKworICAgICAgICAgICAgY2JfcmVnZXggPSByJzxmdW5jdGlvbiBIYW5kbGVUZXN0cy50ZXN0X2hhbmRsZV9yZXByIC4qPicKKyAgICAgICAgICAgIGNiX3JlZ2V4ID0gKHInZnVuY3Rvb2xzLnBhcnRpYWxtZXRob2RcKCVzLCAsIFwpXChcKScgJSBjYl9yZWdleCkKKyAgICAgICAgICAgIHJlZ2V4ID0gKHInXjxIYW5kbGUgJXMgYXQgJXM6JXM+JCcKKyAgICAgICAgICAgICAgICAgICAgICUgKGNiX3JlZ2V4LCByZS5lc2NhcGUoZmlsZW5hbWUpLCBsaW5lbm8pKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSZWdleChyZXByKGgpLCByZWdleCkKKworICAgIGRlZiB0ZXN0X2hhbmRsZV9yZXByX2RlYnVnKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuZ2V0X2RlYnVnLnJldHVybl92YWx1ZSA9IFRydWUKKworICAgICAgICAjIHNpbXBsZSBmdW5jdGlvbgorICAgICAgICBjcmVhdGVfZmlsZW5hbWUgPSBfX2ZpbGVfXworICAgICAgICBjcmVhdGVfbGluZW5vID0gc3lzLl9nZXRmcmFtZSgpLmZfbGluZW5vICsgMQorICAgICAgICBoID0gYXN5bmNpby5IYW5kbGUobm9vcCwgKDEsIDIpLCBzZWxmLmxvb3ApCisgICAgICAgIGZpbGVuYW1lLCBsaW5lbm8gPSB0ZXN0X3V0aWxzLmdldF9mdW5jdGlvbl9zb3VyY2Uobm9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGgpLAorICAgICAgICAgICAgICAgICAgICAgICAgJzxIYW5kbGUgbm9vcCgxLCAyKSBhdCAlczolcyBjcmVhdGVkIGF0ICVzOiVzPicKKyAgICAgICAgICAgICAgICAgICAgICAgICUgKGZpbGVuYW1lLCBsaW5lbm8sIGNyZWF0ZV9maWxlbmFtZSwgY3JlYXRlX2xpbmVubykpCisKKyAgICAgICAgIyBjYW5jZWxsZWQgaGFuZGxlCisgICAgICAgIGguY2FuY2VsKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHJlcHIoaCksCisgICAgICAgICAgICAnPEhhbmRsZSBjYW5jZWxsZWQgbm9vcCgxLCAyKSBhdCAlczolcyBjcmVhdGVkIGF0ICVzOiVzPicKKyAgICAgICAgICAgICUgKGZpbGVuYW1lLCBsaW5lbm8sIGNyZWF0ZV9maWxlbmFtZSwgY3JlYXRlX2xpbmVubykpCisKKyAgICAgICAgIyBkb3VibGUgY2FuY2VsbGF0aW9uIHdvbid0IG92ZXJ3cml0ZSBfcmVwcgorICAgICAgICBoLmNhbmNlbCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICByZXByKGgpLAorICAgICAgICAgICAgJzxIYW5kbGUgY2FuY2VsbGVkIG5vb3AoMSwgMikgYXQgJXM6JXMgY3JlYXRlZCBhdCAlczolcz4nCisgICAgICAgICAgICAlIChmaWxlbmFtZSwgbGluZW5vLCBjcmVhdGVfZmlsZW5hbWUsIGNyZWF0ZV9saW5lbm8pKQorCisgICAgZGVmIHRlc3RfaGFuZGxlX3NvdXJjZV90cmFjZWJhY2soc2VsZik6CisgICAgICAgIGxvb3AgPSBhc3luY2lvLmdldF9ldmVudF9sb29wX3BvbGljeSgpLm5ld19ldmVudF9sb29wKCkKKyAgICAgICAgbG9vcC5zZXRfZGVidWcoVHJ1ZSkKKyAgICAgICAgc2VsZi5zZXRfZXZlbnRfbG9vcChsb29wKQorCisgICAgICAgIGRlZiBjaGVja19zb3VyY2VfdHJhY2ViYWNrKGgpOgorICAgICAgICAgICAgbGluZW5vID0gc3lzLl9nZXRmcmFtZSgxKS5mX2xpbmVubyAtIDEKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShoLl9zb3VyY2VfdHJhY2ViYWNrLCBsaXN0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLl9zb3VyY2VfdHJhY2ViYWNrWy0xXVs6M10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX2ZpbGVfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVubywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0X2hhbmRsZV9zb3VyY2VfdHJhY2ViYWNrJykpCisKKyAgICAgICAgIyBjYWxsX3Nvb24KKyAgICAgICAgaCA9IGxvb3AuY2FsbF9zb29uKG5vb3ApCisgICAgICAgIGNoZWNrX3NvdXJjZV90cmFjZWJhY2soaCkKKworICAgICAgICAjIGNhbGxfc29vbl90aHJlYWRzYWZlCisgICAgICAgIGggPSBsb29wLmNhbGxfc29vbl90aHJlYWRzYWZlKG5vb3ApCisgICAgICAgIGNoZWNrX3NvdXJjZV90cmFjZWJhY2soaCkKKworICAgICAgICAjIGNhbGxfbGF0ZXIKKyAgICAgICAgaCA9IGxvb3AuY2FsbF9sYXRlcigwLCBub29wKQorICAgICAgICBjaGVja19zb3VyY2VfdHJhY2ViYWNrKGgpCisKKyAgICAgICAgIyBjYWxsX2F0CisgICAgICAgIGggPSBsb29wLmNhbGxfbGF0ZXIoMCwgbm9vcCkKKyAgICAgICAgY2hlY2tfc291cmNlX3RyYWNlYmFjayhoKQorCisKK2NsYXNzIFRpbWVyVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AgPSBtb2NrLk1vY2soKQorCisgICAgZGVmIHRlc3RfaGFzaChzZWxmKToKKyAgICAgICAgd2hlbiA9IHRpbWUubW9ub3RvbmljKCkKKyAgICAgICAgaCA9IGFzeW5jaW8uVGltZXJIYW5kbGUod2hlbiwgbGFtYmRhOiBGYWxzZSwgKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vY2suTW9jaygpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2goaCksIGhhc2god2hlbikpCisKKyAgICBkZWYgdGVzdF90aW1lcihzZWxmKToKKyAgICAgICAgZGVmIGNhbGxiYWNrKCphcmdzKToKKyAgICAgICAgICAgIHJldHVybiBhcmdzCisKKyAgICAgICAgYXJncyA9ICgxLCAyLCAzKQorICAgICAgICB3aGVuID0gdGltZS5tb25vdG9uaWMoKQorICAgICAgICBoID0gYXN5bmNpby5UaW1lckhhbmRsZSh3aGVuLCBjYWxsYmFjaywgYXJncywgbW9jay5Nb2NrKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoaC5fY2FsbGJhY2ssIGNhbGxiYWNrKQorICAgICAgICBzZWxmLmFzc2VydElzKGguX2FyZ3MsIGFyZ3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaC5fY2FuY2VsbGVkKQorCisgICAgICAgICMgY2FuY2VsCisgICAgICAgIGguY2FuY2VsKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGguX2NhbmNlbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoaC5fY2FsbGJhY2spCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGguX2FyZ3MpCisKKyAgICAgICAgIyB3aGVuIGNhbm5vdCBiZSBOb25lCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICBhc3luY2lvLlRpbWVySGFuZGxlLCBOb25lLCBjYWxsYmFjaywgYXJncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sb29wKQorCisgICAgZGVmIHRlc3RfdGltZXJfcmVwcihzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLmdldF9kZWJ1Zy5yZXR1cm5fdmFsdWUgPSBGYWxzZQorCisgICAgICAgICMgc2ltcGxlIGZ1bmN0aW9uCisgICAgICAgIGggPSBhc3luY2lvLlRpbWVySGFuZGxlKDEyMywgbm9vcCwgKCksIHNlbGYubG9vcCkKKyAgICAgICAgc3JjID0gdGVzdF91dGlscy5nZXRfZnVuY3Rpb25fc291cmNlKG5vb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICc8VGltZXJIYW5kbGUgd2hlbj0xMjMgbm9vcCgpIGF0ICVzOiVzPicgJSBzcmMpCisKKyAgICAgICAgIyBjYW5jZWxsZWQgaGFuZGxlCisgICAgICAgIGguY2FuY2VsKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGgpLAorICAgICAgICAgICAgICAgICAgICAgICAgJzxUaW1lckhhbmRsZSBjYW5jZWxsZWQgd2hlbj0xMjM+JykKKworICAgIGRlZiB0ZXN0X3RpbWVyX3JlcHJfZGVidWcoc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5nZXRfZGVidWcucmV0dXJuX3ZhbHVlID0gVHJ1ZQorCisgICAgICAgICMgc2ltcGxlIGZ1bmN0aW9uCisgICAgICAgIGNyZWF0ZV9maWxlbmFtZSA9IF9fZmlsZV9fCisgICAgICAgIGNyZWF0ZV9saW5lbm8gPSBzeXMuX2dldGZyYW1lKCkuZl9saW5lbm8gKyAxCisgICAgICAgIGggPSBhc3luY2lvLlRpbWVySGFuZGxlKDEyMywgbm9vcCwgKCksIHNlbGYubG9vcCkKKyAgICAgICAgZmlsZW5hbWUsIGxpbmVubyA9IHRlc3RfdXRpbHMuZ2V0X2Z1bmN0aW9uX3NvdXJjZShub29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoaCksCisgICAgICAgICAgICAgICAgICAgICAgICAnPFRpbWVySGFuZGxlIHdoZW49MTIzIG5vb3AoKSAnCisgICAgICAgICAgICAgICAgICAgICAgICAnYXQgJXM6JXMgY3JlYXRlZCBhdCAlczolcz4nCisgICAgICAgICAgICAgICAgICAgICAgICAlIChmaWxlbmFtZSwgbGluZW5vLCBjcmVhdGVfZmlsZW5hbWUsIGNyZWF0ZV9saW5lbm8pKQorCisgICAgICAgICMgY2FuY2VsbGVkIGhhbmRsZQorICAgICAgICBoLmNhbmNlbCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICc8VGltZXJIYW5kbGUgY2FuY2VsbGVkIHdoZW49MTIzIG5vb3AoKSAnCisgICAgICAgICAgICAgICAgICAgICAgICAnYXQgJXM6JXMgY3JlYXRlZCBhdCAlczolcz4nCisgICAgICAgICAgICAgICAgICAgICAgICAlIChmaWxlbmFtZSwgbGluZW5vLCBjcmVhdGVfZmlsZW5hbWUsIGNyZWF0ZV9saW5lbm8pKQorCisKKyAgICBkZWYgdGVzdF90aW1lcl9jb21wYXJpc29uKHNlbGYpOgorICAgICAgICBkZWYgY2FsbGJhY2soKmFyZ3MpOgorICAgICAgICAgICAgcmV0dXJuIGFyZ3MKKworICAgICAgICB3aGVuID0gdGltZS5tb25vdG9uaWMoKQorCisgICAgICAgIGgxID0gYXN5bmNpby5UaW1lckhhbmRsZSh3aGVuLCBjYWxsYmFjaywgKCksIHNlbGYubG9vcCkKKyAgICAgICAgaDIgPSBhc3luY2lvLlRpbWVySGFuZGxlKHdoZW4sIGNhbGxiYWNrLCAoKSwgc2VsZi5sb29wKQorICAgICAgICAjIFRPRE86IFVzZSBhc3NlcnRMZXNzIGV0Yy4KKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoMSA8IGgyKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGgyIDwgaDEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoMSA8PSBoMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGgyIDw9IGgxKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGgxID4gaDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaDIgPiBoMSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGgxID49IGgyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaDIgPj0gaDEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoMSA9PSBoMikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoMSAhPSBoMikKKworICAgICAgICBoMi5jYW5jZWwoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGgxID09IGgyKQorCisgICAgICAgIGgxID0gYXN5bmNpby5UaW1lckhhbmRsZSh3aGVuLCBjYWxsYmFjaywgKCksIHNlbGYubG9vcCkKKyAgICAgICAgaDIgPSBhc3luY2lvLlRpbWVySGFuZGxlKHdoZW4gKyAxMC4wLCBjYWxsYmFjaywgKCksIHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGgxIDwgaDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaDIgPCBoMSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGgxIDw9IGgyKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGgyIDw9IGgxKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGgxID4gaDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoMiA+IGgxKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGgxID49IGgyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaDIgPj0gaDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaDEgPT0gaDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoMSAhPSBoMikKKworICAgICAgICBoMyA9IGFzeW5jaW8uSGFuZGxlKGNhbGxiYWNrLCAoKSwgc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzKE5vdEltcGxlbWVudGVkLCBoMS5fX2VxX18oaDMpKQorICAgICAgICBzZWxmLmFzc2VydElzKE5vdEltcGxlbWVudGVkLCBoMS5fX25lX18oaDMpKQorCisKK2NsYXNzIEFic3RyYWN0RXZlbnRMb29wVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfbm90X2ltcGxlbWVudGVkKHNlbGYpOgorICAgICAgICBmID0gbW9jay5Nb2NrKCkKKyAgICAgICAgbG9vcCA9IGFzeW5jaW8uQWJzdHJhY3RFdmVudExvb3AoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIGxvb3AucnVuX2ZvcmV2ZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgbG9vcC5ydW5fdW50aWxfY29tcGxldGUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgbG9vcC5zdG9wKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIGxvb3AuaXNfcnVubmluZykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLmlzX2Nsb3NlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLmNsb3NlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIGxvb3AuY3JlYXRlX3Rhc2ssIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgbG9vcC5jYWxsX2xhdGVyLCBOb25lLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIGxvb3AuY2FsbF9hdCwgZiwgZikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLmNhbGxfc29vbiwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLnRpbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgbG9vcC5jYWxsX3Nvb25fdGhyZWFkc2FmZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLnJ1bl9pbl9leGVjdXRvciwgZiwgZikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLnNldF9kZWZhdWx0X2V4ZWN1dG9yLCBmKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIGxvb3AuZ2V0YWRkcmluZm8sICdsb2NhbGhvc3QnLCA4MDgwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIGxvb3AuZ2V0bmFtZWluZm8sICgnbG9jYWxob3N0JywgODA4MCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgbG9vcC5jcmVhdGVfY29ubmVjdGlvbiwgZikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLmNyZWF0ZV9zZXJ2ZXIsIGYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgbG9vcC5jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnQsIGYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgbG9vcC5hZGRfcmVhZGVyLCAxLCBmKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIGxvb3AucmVtb3ZlX3JlYWRlciwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLmFkZF93cml0ZXIsIDEsIGYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgbG9vcC5yZW1vdmVfd3JpdGVyLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIGxvb3Auc29ja19yZWN2LCBmLCAxMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLnNvY2tfc2VuZGFsbCwgZiwgMTApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgbG9vcC5zb2NrX2Nvbm5lY3QsIGYsIGYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgbG9vcC5zb2NrX2FjY2VwdCwgZikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLmFkZF9zaWduYWxfaGFuZGxlciwgMSwgZikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLnJlbW92ZV9zaWduYWxfaGFuZGxlciwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLnJlbW92ZV9zaWduYWxfaGFuZGxlciwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLmNvbm5lY3RfcmVhZF9waXBlLCBmLAorICAgICAgICAgICAgbW9jay5zZW50aW5lbC5waXBlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIGxvb3AuY29ubmVjdF93cml0ZV9waXBlLCBmLAorICAgICAgICAgICAgbW9jay5zZW50aW5lbC5waXBlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIGxvb3Auc3VicHJvY2Vzc19zaGVsbCwgZiwKKyAgICAgICAgICAgIG1vY2suc2VudGluZWwpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgbG9vcC5zdWJwcm9jZXNzX2V4ZWMsIGYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgbG9vcC5zZXRfZXhjZXB0aW9uX2hhbmRsZXIsIGYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgbG9vcC5kZWZhdWx0X2V4Y2VwdGlvbl9oYW5kbGVyLCBmKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIGxvb3AuY2FsbF9leGNlcHRpb25faGFuZGxlciwgZikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLmdldF9kZWJ1ZykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLnNldF9kZWJ1ZywgZikKKworCitjbGFzcyBQcm90b2NvbHNBYnNUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9lbXB0eShzZWxmKToKKyAgICAgICAgZiA9IG1vY2suTW9jaygpCisgICAgICAgIHAgPSBhc3luY2lvLlByb3RvY29sKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocC5jb25uZWN0aW9uX21hZGUoZikpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHAuY29ubmVjdGlvbl9sb3N0KGYpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShwLmRhdGFfcmVjZWl2ZWQoZikpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHAuZW9mX3JlY2VpdmVkKCkpCisKKyAgICAgICAgZHAgPSBhc3luY2lvLkRhdGFncmFtUHJvdG9jb2woKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShkcC5jb25uZWN0aW9uX21hZGUoZikpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGRwLmNvbm5lY3Rpb25fbG9zdChmKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZHAuZXJyb3JfcmVjZWl2ZWQoZikpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGRwLmRhdGFncmFtX3JlY2VpdmVkKGYsIGYpKQorCisgICAgICAgIHNwID0gYXN5bmNpby5TdWJwcm9jZXNzUHJvdG9jb2woKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzcC5jb25uZWN0aW9uX21hZGUoZikpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHNwLmNvbm5lY3Rpb25fbG9zdChmKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc3AucGlwZV9kYXRhX3JlY2VpdmVkKDEsIGYpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzcC5waXBlX2Nvbm5lY3Rpb25fbG9zdCgxLCBmKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc3AucHJvY2Vzc19leGl0ZWQoKSkKKworCitjbGFzcyBQb2xpY3lUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9ldmVudF9sb29wX3BvbGljeShzZWxmKToKKyAgICAgICAgcG9saWN5ID0gYXN5bmNpby5BYnN0cmFjdEV2ZW50TG9vcFBvbGljeSgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIHBvbGljeS5nZXRfZXZlbnRfbG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgcG9saWN5LnNldF9ldmVudF9sb29wLCBvYmplY3QoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgcG9saWN5Lm5ld19ldmVudF9sb29wKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBwb2xpY3kuZ2V0X2NoaWxkX3dhdGNoZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIHBvbGljeS5zZXRfY2hpbGRfd2F0Y2hlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0KCkpCisKKyAgICBkZWYgdGVzdF9nZXRfZXZlbnRfbG9vcChzZWxmKToKKyAgICAgICAgcG9saWN5ID0gYXN5bmNpby5EZWZhdWx0RXZlbnRMb29wUG9saWN5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocG9saWN5Ll9sb2NhbC5fbG9vcCkKKworICAgICAgICBsb29wID0gcG9saWN5LmdldF9ldmVudF9sb29wKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGxvb3AsIGFzeW5jaW8uQWJzdHJhY3RFdmVudExvb3ApCisKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhwb2xpY3kuX2xvY2FsLl9sb29wLCBsb29wKQorICAgICAgICBzZWxmLmFzc2VydElzKGxvb3AsIHBvbGljeS5nZXRfZXZlbnRfbG9vcCgpKQorICAgICAgICBsb29wLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2dldF9ldmVudF9sb29wX2NhbGxzX3NldF9ldmVudF9sb29wKHNlbGYpOgorICAgICAgICBwb2xpY3kgPSBhc3luY2lvLkRlZmF1bHRFdmVudExvb3BQb2xpY3koKQorCisgICAgICAgIHdpdGggbW9jay5wYXRjaC5vYmplY3QoCisgICAgICAgICAgICAgICAgcG9saWN5LCAic2V0X2V2ZW50X2xvb3AiLAorICAgICAgICAgICAgICAgIHdyYXBzPXBvbGljeS5zZXRfZXZlbnRfbG9vcCkgYXMgbV9zZXRfZXZlbnRfbG9vcDoKKworICAgICAgICAgICAgbG9vcCA9IHBvbGljeS5nZXRfZXZlbnRfbG9vcCgpCisKKyAgICAgICAgICAgICMgcG9saWN5Ll9sb2NhbC5fbG9vcCBtdXN0IGJlIHNldCB0aHJvdWdoIC5zZXRfZXZlbnRfbG9vcCgpCisgICAgICAgICAgICAjICh0aGUgdW5peCBEZWZhdWx0RXZlbnRMb29wUG9saWN5IG5lZWRzIHRoaXMgY2FsbCB0byBhdHRhY2gKKyAgICAgICAgICAgICMgdGhlIGNoaWxkIHdhdGNoZXIgY29ycmVjdGx5KQorICAgICAgICAgICAgbV9zZXRfZXZlbnRfbG9vcC5hc3NlcnRfY2FsbGVkX3dpdGgobG9vcCkKKworICAgICAgICBsb29wLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2dldF9ldmVudF9sb29wX2FmdGVyX3NldF9ub25lKHNlbGYpOgorICAgICAgICBwb2xpY3kgPSBhc3luY2lvLkRlZmF1bHRFdmVudExvb3BQb2xpY3koKQorICAgICAgICBwb2xpY3kuc2V0X2V2ZW50X2xvb3AoTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBwb2xpY3kuZ2V0X2V2ZW50X2xvb3ApCisKKyAgICBAbW9jay5wYXRjaCgnYXN5bmNpby5ldmVudHMudGhyZWFkaW5nLmN1cnJlbnRfdGhyZWFkJykKKyAgICBkZWYgdGVzdF9nZXRfZXZlbnRfbG9vcF90aHJlYWQoc2VsZiwgbV9jdXJyZW50X3RocmVhZCk6CisKKyAgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgIHBvbGljeSA9IGFzeW5jaW8uRGVmYXVsdEV2ZW50TG9vcFBvbGljeSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIHBvbGljeS5nZXRfZXZlbnRfbG9vcCkKKworICAgICAgICB0aCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PWYpCisgICAgICAgIHRoLnN0YXJ0KCkKKyAgICAgICAgdGguam9pbigpCisKKyAgICBkZWYgdGVzdF9uZXdfZXZlbnRfbG9vcChzZWxmKToKKyAgICAgICAgcG9saWN5ID0gYXN5bmNpby5EZWZhdWx0RXZlbnRMb29wUG9saWN5KCkKKworICAgICAgICBsb29wID0gcG9saWN5Lm5ld19ldmVudF9sb29wKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGxvb3AsIGFzeW5jaW8uQWJzdHJhY3RFdmVudExvb3ApCisgICAgICAgIGxvb3AuY2xvc2UoKQorCisgICAgZGVmIHRlc3Rfc2V0X2V2ZW50X2xvb3Aoc2VsZik6CisgICAgICAgIHBvbGljeSA9IGFzeW5jaW8uRGVmYXVsdEV2ZW50TG9vcFBvbGljeSgpCisgICAgICAgIG9sZF9sb29wID0gcG9saWN5LmdldF9ldmVudF9sb29wKCkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvciwgcG9saWN5LnNldF9ldmVudF9sb29wLCBvYmplY3QoKSkKKworICAgICAgICBsb29wID0gcG9saWN5Lm5ld19ldmVudF9sb29wKCkKKyAgICAgICAgcG9saWN5LnNldF9ldmVudF9sb29wKGxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobG9vcCwgcG9saWN5LmdldF9ldmVudF9sb29wKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3Qob2xkX2xvb3AsIHBvbGljeS5nZXRfZXZlbnRfbG9vcCgpKQorICAgICAgICBsb29wLmNsb3NlKCkKKyAgICAgICAgb2xkX2xvb3AuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfZ2V0X2V2ZW50X2xvb3BfcG9saWN5KHNlbGYpOgorICAgICAgICBwb2xpY3kgPSBhc3luY2lvLmdldF9ldmVudF9sb29wX3BvbGljeSgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShwb2xpY3ksIGFzeW5jaW8uQWJzdHJhY3RFdmVudExvb3BQb2xpY3kpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocG9saWN5LCBhc3luY2lvLmdldF9ldmVudF9sb29wX3BvbGljeSgpKQorCisgICAgZGVmIHRlc3Rfc2V0X2V2ZW50X2xvb3BfcG9saWN5KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIEFzc2VydGlvbkVycm9yLCBhc3luY2lvLnNldF9ldmVudF9sb29wX3BvbGljeSwgb2JqZWN0KCkpCisKKyAgICAgICAgb2xkX3BvbGljeSA9IGFzeW5jaW8uZ2V0X2V2ZW50X2xvb3BfcG9saWN5KCkKKworICAgICAgICBwb2xpY3kgPSBhc3luY2lvLkRlZmF1bHRFdmVudExvb3BQb2xpY3koKQorICAgICAgICBhc3luY2lvLnNldF9ldmVudF9sb29wX3BvbGljeShwb2xpY3kpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocG9saWN5LCBhc3luY2lvLmdldF9ldmVudF9sb29wX3BvbGljeSgpKQorICAgICAgICBzZWxmLmFzc2VydElzTm90KHBvbGljeSwgb2xkX3BvbGljeSkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3RfZnV0dXJlcy5weSBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X2Z1dHVyZXMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTVmZGZmMwotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X2Z1dHVyZXMucHkKQEAgLTAsMCArMSw0NzQgQEAKKyIiIlRlc3RzIGZvciBmdXR1cmVzLnB5LiIiIgorCitpbXBvcnQgY29uY3VycmVudC5mdXR1cmVzCitpbXBvcnQgcmUKK2ltcG9ydCBzeXMKK2ltcG9ydCB0aHJlYWRpbmcKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB1bml0dGVzdCBpbXBvcnQgbW9jaworCitpbXBvcnQgYXN5bmNpbworZnJvbSBhc3luY2lvIGltcG9ydCB0ZXN0X3V0aWxzCit0cnk6CisgICAgZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgZnJvbSBhc3luY2lvIGltcG9ydCB0ZXN0X3N1cHBvcnQgYXMgc3VwcG9ydAorCisKK2RlZiBfZmFrZWZ1bmMoZik6CisgICAgcmV0dXJuIGYKKworZGVmIGZpcnN0X2NiKCk6CisgICAgcGFzcworCitkZWYgbGFzdF9jYigpOgorICAgIHBhc3MKKworCitjbGFzcyBGdXR1cmVUZXN0cyh0ZXN0X3V0aWxzLlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5sb29wID0gc2VsZi5uZXdfdGVzdF9sb29wKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHNlbGYubG9vcC5jbG9zZSkKKworICAgIGRlZiB0ZXN0X2luaXRpYWxfc3RhdGUoc2VsZik6CisgICAgICAgIGYgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLmNhbmNlbGxlZCgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuZG9uZSgpKQorICAgICAgICBmLmNhbmNlbCgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLmNhbmNlbGxlZCgpKQorCisgICAgZGVmIHRlc3RfaW5pdF9jb25zdHJ1Y3Rvcl9kZWZhdWx0X2xvb3Aoc2VsZik6CisgICAgICAgIGFzeW5jaW8uc2V0X2V2ZW50X2xvb3Aoc2VsZi5sb29wKQorICAgICAgICBmID0gYXN5bmNpby5GdXR1cmUoKQorICAgICAgICBzZWxmLmFzc2VydElzKGYuX2xvb3AsIHNlbGYubG9vcCkKKworICAgIGRlZiB0ZXN0X2NvbnN0cnVjdG9yX3Bvc2l0aW9uYWwoc2VsZik6CisgICAgICAgICMgTWFrZSBzdXJlIEZ1dHVyZSBkb2Vzbid0IGFjY2VwdCBhIHBvc2l0aW9uYWwgYXJndW1lbnQKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhc3luY2lvLkZ1dHVyZSwgNDIpCisKKyAgICBkZWYgdGVzdF9jYW5jZWwoc2VsZik6CisgICAgICAgIGYgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuY2FuY2VsKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLmNhbmNlbGxlZCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGFzeW5jaW8uQ2FuY2VsbGVkRXJyb3IsIGYucmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhhc3luY2lvLkNhbmNlbGxlZEVycm9yLCBmLmV4Y2VwdGlvbikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYXN5bmNpby5JbnZhbGlkU3RhdGVFcnJvciwgZi5zZXRfcmVzdWx0LCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhhc3luY2lvLkludmFsaWRTdGF0ZUVycm9yLCBmLnNldF9leGNlcHRpb24sIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5jYW5jZWwoKSkKKworICAgIGRlZiB0ZXN0X3Jlc3VsdChzZWxmKToKKyAgICAgICAgZiA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhhc3luY2lvLkludmFsaWRTdGF0ZUVycm9yLCBmLnJlc3VsdCkKKworICAgICAgICBmLnNldF9yZXN1bHQoNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5jYW5jZWxsZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVzdWx0KCksIDQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZXhjZXB0aW9uKCksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGFzeW5jaW8uSW52YWxpZFN0YXRlRXJyb3IsIGYuc2V0X3Jlc3VsdCwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYXN5bmNpby5JbnZhbGlkU3RhdGVFcnJvciwgZi5zZXRfZXhjZXB0aW9uLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuY2FuY2VsKCkpCisKKyAgICBkZWYgdGVzdF9leGNlcHRpb24oc2VsZik6CisgICAgICAgIGV4YyA9IFJ1bnRpbWVFcnJvcigpCisgICAgICAgIGYgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYXN5bmNpby5JbnZhbGlkU3RhdGVFcnJvciwgZi5leGNlcHRpb24pCisKKyAgICAgICAgZi5zZXRfZXhjZXB0aW9uKGV4YykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLmNhbmNlbGxlZCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgZi5yZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5leGNlcHRpb24oKSwgZXhjKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhhc3luY2lvLkludmFsaWRTdGF0ZUVycm9yLCBmLnNldF9yZXN1bHQsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGFzeW5jaW8uSW52YWxpZFN0YXRlRXJyb3IsIGYuc2V0X2V4Y2VwdGlvbiwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLmNhbmNlbCgpKQorCisgICAgZGVmIHRlc3RfZXhjZXB0aW9uX2NsYXNzKHNlbGYpOgorICAgICAgICBmID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGYuc2V0X2V4Y2VwdGlvbihSdW50aW1lRXJyb3IpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmLmV4Y2VwdGlvbigpLCBSdW50aW1lRXJyb3IpCisKKyAgICBkZWYgdGVzdF95aWVsZF9mcm9tX3R3aWNlKHNlbGYpOgorICAgICAgICBmID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgZGVmIGZpeHR1cmUoKToKKyAgICAgICAgICAgIHlpZWxkICdBJworICAgICAgICAgICAgeCA9IHlpZWxkIGZyb20gZgorICAgICAgICAgICAgeWllbGQgJ0InLCB4CisgICAgICAgICAgICB5ID0geWllbGQgZnJvbSBmCisgICAgICAgICAgICB5aWVsZCAnQycsIHkKKworICAgICAgICBnID0gZml4dHVyZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV4dChnKSwgJ0EnKSAgIyB5aWVsZCAnQScuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV4dChnKSwgZikgICMgRmlyc3QgeWllbGQgZnJvbSBmLgorICAgICAgICBmLnNldF9yZXN1bHQoNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV4dChnKSwgKCdCJywgNDIpKSAgIyB5aWVsZCAnQicsIHguCisgICAgICAgICMgVGhlIHNlY29uZCAieWllbGQgZnJvbSBmIiBkb2VzIG5vdCB5aWVsZCBmLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5leHQoZyksICgnQycsIDQyKSkgICMgeWllbGQgJ0MnLCB5LgorCisgICAgZGVmIHRlc3RfZnV0dXJlX3JlcHIoc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5zZXRfZGVidWcoVHJ1ZSkKKyAgICAgICAgZl9wZW5kaW5nX2RlYnVnID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGZyYW1lID0gZl9wZW5kaW5nX2RlYnVnLl9zb3VyY2VfdHJhY2ViYWNrWy0xXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZl9wZW5kaW5nX2RlYnVnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnPEZ1dHVyZSBwZW5kaW5nIGNyZWF0ZWQgYXQgJXM6JXM+JworICAgICAgICAgICAgICAgICAgICAgICAgICUgKGZyYW1lWzBdLCBmcmFtZVsxXSkpCisgICAgICAgIGZfcGVuZGluZ19kZWJ1Zy5jYW5jZWwoKQorCisgICAgICAgIHNlbGYubG9vcC5zZXRfZGVidWcoRmFsc2UpCisgICAgICAgIGZfcGVuZGluZyA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZl9wZW5kaW5nKSwgJzxGdXR1cmUgcGVuZGluZz4nKQorICAgICAgICBmX3BlbmRpbmcuY2FuY2VsKCkKKworICAgICAgICBmX2NhbmNlbGxlZCA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmX2NhbmNlbGxlZC5jYW5jZWwoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZl9jYW5jZWxsZWQpLCAnPEZ1dHVyZSBjYW5jZWxsZWQ+JykKKworICAgICAgICBmX3Jlc3VsdCA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmX3Jlc3VsdC5zZXRfcmVzdWx0KDQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihmX3Jlc3VsdCksICc8RnV0dXJlIGZpbmlzaGVkIHJlc3VsdD00PicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZl9yZXN1bHQucmVzdWx0KCksIDQpCisKKyAgICAgICAgZXhjID0gUnVudGltZUVycm9yKCkKKyAgICAgICAgZl9leGNlcHRpb24gPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZl9leGNlcHRpb24uc2V0X2V4Y2VwdGlvbihleGMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihmX2V4Y2VwdGlvbiksCisgICAgICAgICAgICAgICAgICAgICAgICAgJzxGdXR1cmUgZmluaXNoZWQgZXhjZXB0aW9uPVJ1bnRpbWVFcnJvcigpPicpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZl9leGNlcHRpb24uZXhjZXB0aW9uKCksIGV4YykKKworICAgICAgICBkZWYgZnVuY19yZXByKGZ1bmMpOgorICAgICAgICAgICAgZmlsZW5hbWUsIGxpbmVubyA9IHRlc3RfdXRpbHMuZ2V0X2Z1bmN0aW9uX3NvdXJjZShmdW5jKQorICAgICAgICAgICAgdGV4dCA9ICclcygpIGF0ICVzOiVzJyAlIChmdW5jLl9fcXVhbG5hbWVfXywgZmlsZW5hbWUsIGxpbmVubykKKyAgICAgICAgICAgIHJldHVybiByZS5lc2NhcGUodGV4dCkKKworICAgICAgICBmX29uZV9jYWxsYmFja3MgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZl9vbmVfY2FsbGJhY2tzLmFkZF9kb25lX2NhbGxiYWNrKF9mYWtlZnVuYykKKyAgICAgICAgZmFrZV9yZXByID0gZnVuY19yZXByKF9mYWtlZnVuYykKKyAgICAgICAgc2VsZi5hc3NlcnRSZWdleChyZXByKGZfb25lX2NhbGxiYWNrcyksCisgICAgICAgICAgICAgICAgICAgICAgICAgcic8RnV0dXJlIHBlbmRpbmcgY2I9XFslc1xdPicgJSBmYWtlX3JlcHIpCisgICAgICAgIGZfb25lX2NhbGxiYWNrcy5jYW5jZWwoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZl9vbmVfY2FsbGJhY2tzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnPEZ1dHVyZSBjYW5jZWxsZWQ+JykKKworICAgICAgICBmX3R3b19jYWxsYmFja3MgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZl90d29fY2FsbGJhY2tzLmFkZF9kb25lX2NhbGxiYWNrKGZpcnN0X2NiKQorICAgICAgICBmX3R3b19jYWxsYmFja3MuYWRkX2RvbmVfY2FsbGJhY2sobGFzdF9jYikKKyAgICAgICAgZmlyc3RfcmVwciA9IGZ1bmNfcmVwcihmaXJzdF9jYikKKyAgICAgICAgbGFzdF9yZXByID0gZnVuY19yZXByKGxhc3RfY2IpCisgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXgocmVwcihmX3R3b19jYWxsYmFja3MpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHInPEZ1dHVyZSBwZW5kaW5nIGNiPVxbJXMsICVzXF0+JworICAgICAgICAgICAgICAgICAgICAgICAgICUgKGZpcnN0X3JlcHIsIGxhc3RfcmVwcikpCisKKyAgICAgICAgZl9tYW55X2NhbGxiYWNrcyA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmX21hbnlfY2FsbGJhY2tzLmFkZF9kb25lX2NhbGxiYWNrKGZpcnN0X2NiKQorICAgICAgICBmb3IgaSBpbiByYW5nZSg4KToKKyAgICAgICAgICAgIGZfbWFueV9jYWxsYmFja3MuYWRkX2RvbmVfY2FsbGJhY2soX2Zha2VmdW5jKQorICAgICAgICBmX21hbnlfY2FsbGJhY2tzLmFkZF9kb25lX2NhbGxiYWNrKGxhc3RfY2IpCisgICAgICAgIGNiX3JlZ2V4ID0gciclcywgPDggbW9yZT4sICVzJyAlIChmaXJzdF9yZXByLCBsYXN0X3JlcHIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXgocmVwcihmX21hbnlfY2FsbGJhY2tzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICByJzxGdXR1cmUgcGVuZGluZyBjYj1cWyVzXF0+JyAlIGNiX3JlZ2V4KQorICAgICAgICBmX21hbnlfY2FsbGJhY2tzLmNhbmNlbCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihmX21hbnlfY2FsbGJhY2tzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnPEZ1dHVyZSBjYW5jZWxsZWQ+JykKKworICAgIGRlZiB0ZXN0X2NvcHlfc3RhdGUoc2VsZik6CisgICAgICAgIGZyb20gYXN5bmNpby5mdXR1cmVzIGltcG9ydCBfY29weV9mdXR1cmVfc3RhdGUKKworICAgICAgICBmID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGYuc2V0X3Jlc3VsdCgxMCkKKworICAgICAgICBuZXdmID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIF9jb3B5X2Z1dHVyZV9zdGF0ZShmLCBuZXdmKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobmV3Zi5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3Zi5yZXN1bHQoKSwgMTApCisKKyAgICAgICAgZl9leGNlcHRpb24gPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZl9leGNlcHRpb24uc2V0X2V4Y2VwdGlvbihSdW50aW1lRXJyb3IoKSkKKworICAgICAgICBuZXdmX2V4Y2VwdGlvbiA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBfY29weV9mdXR1cmVfc3RhdGUoZl9leGNlcHRpb24sIG5ld2ZfZXhjZXB0aW9uKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobmV3Zl9leGNlcHRpb24uZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIG5ld2ZfZXhjZXB0aW9uLnJlc3VsdCkKKworICAgICAgICBmX2NhbmNlbGxlZCA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmX2NhbmNlbGxlZC5jYW5jZWwoKQorCisgICAgICAgIG5ld2ZfY2FuY2VsbGVkID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIF9jb3B5X2Z1dHVyZV9zdGF0ZShmX2NhbmNlbGxlZCwgbmV3Zl9jYW5jZWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShuZXdmX2NhbmNlbGxlZC5jYW5jZWxsZWQoKSkKKworICAgIGRlZiB0ZXN0X2l0ZXIoc2VsZik6CisgICAgICAgIGZ1dCA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIGRlZiBjb3JvKCk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIGZ1dAorCisgICAgICAgIGRlZiB0ZXN0KCk6CisgICAgICAgICAgICBhcmcxLCBhcmcyID0gY29ybygpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsIHRlc3QpCisgICAgICAgIGZ1dC5jYW5jZWwoKQorCisgICAgQG1vY2sucGF0Y2goJ2FzeW5jaW8uYmFzZV9ldmVudHMubG9nZ2VyJykKKyAgICBkZWYgdGVzdF90Yl9sb2dnZXJfYWJhbmRvbmVkKHNlbGYsIG1fbG9nKToKKyAgICAgICAgZnV0ID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGRlbCBmdXQKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtX2xvZy5lcnJvci5jYWxsZWQpCisKKyAgICBAbW9jay5wYXRjaCgnYXN5bmNpby5iYXNlX2V2ZW50cy5sb2dnZXInKQorICAgIGRlZiB0ZXN0X3RiX2xvZ2dlcl9yZXN1bHRfdW5yZXRyaWV2ZWQoc2VsZiwgbV9sb2cpOgorICAgICAgICBmdXQgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZnV0LnNldF9yZXN1bHQoNDIpCisgICAgICAgIGRlbCBmdXQKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtX2xvZy5lcnJvci5jYWxsZWQpCisKKyAgICBAbW9jay5wYXRjaCgnYXN5bmNpby5iYXNlX2V2ZW50cy5sb2dnZXInKQorICAgIGRlZiB0ZXN0X3RiX2xvZ2dlcl9yZXN1bHRfcmV0cmlldmVkKHNlbGYsIG1fbG9nKToKKyAgICAgICAgZnV0ID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGZ1dC5zZXRfcmVzdWx0KDQyKQorICAgICAgICBmdXQucmVzdWx0KCkKKyAgICAgICAgZGVsIGZ1dAorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG1fbG9nLmVycm9yLmNhbGxlZCkKKworICAgIEBtb2NrLnBhdGNoKCdhc3luY2lvLmJhc2VfZXZlbnRzLmxvZ2dlcicpCisgICAgZGVmIHRlc3RfdGJfbG9nZ2VyX2V4Y2VwdGlvbl91bnJldHJpZXZlZChzZWxmLCBtX2xvZyk6CisgICAgICAgIGZ1dCA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmdXQuc2V0X2V4Y2VwdGlvbihSdW50aW1lRXJyb3IoJ2Jvb20nKSkKKyAgICAgICAgZGVsIGZ1dAorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1fbG9nLmVycm9yLmNhbGxlZCkKKworICAgIEBtb2NrLnBhdGNoKCdhc3luY2lvLmJhc2VfZXZlbnRzLmxvZ2dlcicpCisgICAgZGVmIHRlc3RfdGJfbG9nZ2VyX2V4Y2VwdGlvbl9yZXRyaWV2ZWQoc2VsZiwgbV9sb2cpOgorICAgICAgICBmdXQgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZnV0LnNldF9leGNlcHRpb24oUnVudGltZUVycm9yKCdib29tJykpCisgICAgICAgIGZ1dC5leGNlcHRpb24oKQorICAgICAgICBkZWwgZnV0CisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobV9sb2cuZXJyb3IuY2FsbGVkKQorCisgICAgQG1vY2sucGF0Y2goJ2FzeW5jaW8uYmFzZV9ldmVudHMubG9nZ2VyJykKKyAgICBkZWYgdGVzdF90Yl9sb2dnZXJfZXhjZXB0aW9uX3Jlc3VsdF9yZXRyaWV2ZWQoc2VsZiwgbV9sb2cpOgorICAgICAgICBmdXQgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZnV0LnNldF9leGNlcHRpb24oUnVudGltZUVycm9yKCdib29tJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgZnV0LnJlc3VsdCkKKyAgICAgICAgZGVsIGZ1dAorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG1fbG9nLmVycm9yLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X3dyYXBfZnV0dXJlKHNlbGYpOgorCisgICAgICAgIGRlZiBydW4oYXJnKToKKyAgICAgICAgICAgIHJldHVybiAoYXJnLCB0aHJlYWRpbmcuZ2V0X2lkZW50KCkpCisgICAgICAgIGV4ID0gY29uY3VycmVudC5mdXR1cmVzLlRocmVhZFBvb2xFeGVjdXRvcigxKQorICAgICAgICBmMSA9IGV4LnN1Ym1pdChydW4sICdvaScpCisgICAgICAgIGYyID0gYXN5bmNpby53cmFwX2Z1dHVyZShmMSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHJlcywgaWRlbnQgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGYyKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZjIsIGFzeW5jaW8uRnV0dXJlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywgJ29pJykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChpZGVudCwgdGhyZWFkaW5nLmdldF9pZGVudCgpKQorCisgICAgZGVmIHRlc3Rfd3JhcF9mdXR1cmVfZnV0dXJlKHNlbGYpOgorICAgICAgICBmMSA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmMiA9IGFzeW5jaW8ud3JhcF9mdXR1cmUoZjEpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZjEsIGYyKQorCisgICAgQG1vY2sucGF0Y2goJ2FzeW5jaW8uZnV0dXJlcy5ldmVudHMnKQorICAgIGRlZiB0ZXN0X3dyYXBfZnV0dXJlX3VzZV9nbG9iYWxfbG9vcChzZWxmLCBtX2V2ZW50cyk6CisgICAgICAgIGRlZiBydW4oYXJnKToKKyAgICAgICAgICAgIHJldHVybiAoYXJnLCB0aHJlYWRpbmcuZ2V0X2lkZW50KCkpCisgICAgICAgIGV4ID0gY29uY3VycmVudC5mdXR1cmVzLlRocmVhZFBvb2xFeGVjdXRvcigxKQorICAgICAgICBmMSA9IGV4LnN1Ym1pdChydW4sICdvaScpCisgICAgICAgIGYyID0gYXN5bmNpby53cmFwX2Z1dHVyZShmMSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhtX2V2ZW50cy5nZXRfZXZlbnRfbG9vcC5yZXR1cm5fdmFsdWUsIGYyLl9sb29wKQorCisgICAgZGVmIHRlc3Rfd3JhcF9mdXR1cmVfY2FuY2VsKHNlbGYpOgorICAgICAgICBmMSA9IGNvbmN1cnJlbnQuZnV0dXJlcy5GdXR1cmUoKQorICAgICAgICBmMiA9IGFzeW5jaW8ud3JhcF9mdXR1cmUoZjEsIGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmMi5jYW5jZWwoKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYxLmNhbmNlbGxlZCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZjIuY2FuY2VsbGVkKCkpCisKKyAgICBkZWYgdGVzdF93cmFwX2Z1dHVyZV9jYW5jZWwyKHNlbGYpOgorICAgICAgICBmMSA9IGNvbmN1cnJlbnQuZnV0dXJlcy5GdXR1cmUoKQorICAgICAgICBmMiA9IGFzeW5jaW8ud3JhcF9mdXR1cmUoZjEsIGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmMS5zZXRfcmVzdWx0KDQyKQorICAgICAgICBmMi5jYW5jZWwoKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmMS5jYW5jZWxsZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmMS5yZXN1bHQoKSwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmMi5jYW5jZWxsZWQoKSkKKworICAgIGRlZiB0ZXN0X2Z1dHVyZV9zb3VyY2VfdHJhY2ViYWNrKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3Auc2V0X2RlYnVnKFRydWUpCisKKyAgICAgICAgZnV0dXJlID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGxpbmVubyA9IHN5cy5fZ2V0ZnJhbWUoKS5mX2xpbmVubyAtIDEKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGZ1dHVyZS5fc291cmNlX3RyYWNlYmFjaywgbGlzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmdXR1cmUuX3NvdXJjZV90cmFjZWJhY2tbLTFdWzozXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoX19maWxlX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVubywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3RfZnV0dXJlX3NvdXJjZV90cmFjZWJhY2snKSkKKworICAgIEBtb2NrLnBhdGNoKCdhc3luY2lvLmJhc2VfZXZlbnRzLmxvZ2dlcicpCisgICAgZGVmIGNoZWNrX2Z1dHVyZV9leGNlcHRpb25fbmV2ZXJfcmV0cmlldmVkKHNlbGYsIGRlYnVnLCBtX2xvZyk6CisgICAgICAgIHNlbGYubG9vcC5zZXRfZGVidWcoZGVidWcpCisKKyAgICAgICAgZGVmIG1lbW9yeV9lcnJvcigpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJhaXNlIE1lbW9yeUVycm9yKCkKKyAgICAgICAgICAgIGV4Y2VwdCBCYXNlRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgICAgICByZXR1cm4gZXhjCisgICAgICAgIGV4YyA9IG1lbW9yeV9lcnJvcigpCisKKyAgICAgICAgZnV0dXJlID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGlmIGRlYnVnOgorICAgICAgICAgICAgc291cmNlX3RyYWNlYmFjayA9IGZ1dHVyZS5fc291cmNlX3RyYWNlYmFjaworICAgICAgICBmdXR1cmUuc2V0X2V4Y2VwdGlvbihleGMpCisgICAgICAgIGZ1dHVyZSA9IE5vbmUKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCisKKyAgICAgICAgaWYgc3lzLnZlcnNpb25faW5mbyA+PSAoMywgNCk6CisgICAgICAgICAgICBpZiBkZWJ1ZzoKKyAgICAgICAgICAgICAgICBmcmFtZSA9IHNvdXJjZV90cmFjZWJhY2tbLTFdCisgICAgICAgICAgICAgICAgcmVnZXggPSAocideRnV0dXJlIGV4Y2VwdGlvbiB3YXMgbmV2ZXIgcmV0cmlldmVkXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgcidmdXR1cmU6IDxGdXR1cmUgZmluaXNoZWQgZXhjZXB0aW9uPU1lbW9yeUVycm9yXChcKSAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHInY3JlYXRlZCBhdCB7ZmlsZW5hbWV9OntsaW5lbm99PlxuJworICAgICAgICAgICAgICAgICAgICAgICAgIHInc291cmNlX3RyYWNlYmFjazogT2JqZWN0ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByJ2NyZWF0ZWQgYXQgXChtb3N0IHJlY2VudCBjYWxsIGxhc3RcKTpcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICByJyAgRmlsZScKKyAgICAgICAgICAgICAgICAgICAgICAgICByJy4qXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgcicgIEZpbGUgIntmaWxlbmFtZX0iLCBsaW5lIHtsaW5lbm99LCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcidpbiBjaGVja19mdXR1cmVfZXhjZXB0aW9uX25ldmVyX3JldHJpZXZlZFxuJworICAgICAgICAgICAgICAgICAgICAgICAgIHInICAgIGZ1dHVyZSA9IGFzeW5jaW9cLkZ1dHVyZVwobG9vcD1zZWxmXC5sb29wXCkkJworICAgICAgICAgICAgICAgICAgICAgICAgICkuZm9ybWF0KGZpbGVuYW1lPXJlLmVzY2FwZShmcmFtZVswXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZW5vPWZyYW1lWzFdKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZWdleCA9IChyJ15GdXR1cmUgZXhjZXB0aW9uIHdhcyBuZXZlciByZXRyaWV2ZWRcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICByJ2Z1dHVyZTogJworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHInPEZ1dHVyZSBmaW5pc2hlZCBleGNlcHRpb249TWVtb3J5RXJyb3JcKFwpPiQnCisgICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgZXhjX2luZm8gPSAodHlwZShleGMpLCBleGMsIGV4Yy5fX3RyYWNlYmFja19fKQorICAgICAgICAgICAgbV9sb2cuZXJyb3IuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgobW9jay5BTlksIGV4Y19pbmZvPWV4Y19pbmZvKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgZGVidWc6CisgICAgICAgICAgICAgICAgZnJhbWUgPSBzb3VyY2VfdHJhY2ViYWNrWy0xXQorICAgICAgICAgICAgICAgIHJlZ2V4ID0gKHInXkZ1dHVyZS9UYXNrIGV4Y2VwdGlvbiB3YXMgbmV2ZXIgcmV0cmlldmVkXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgcidGdXR1cmUvVGFzayBjcmVhdGVkIGF0IFwobW9zdCByZWNlbnQgY2FsbCBsYXN0XCk6XG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgcicgIEZpbGUnCisgICAgICAgICAgICAgICAgICAgICAgICAgcicuKlxuJworICAgICAgICAgICAgICAgICAgICAgICAgIHInICBGaWxlICJ7ZmlsZW5hbWV9IiwgbGluZSB7bGluZW5vfSwgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHInaW4gY2hlY2tfZnV0dXJlX2V4Y2VwdGlvbl9uZXZlcl9yZXRyaWV2ZWRcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICByJyAgICBmdXR1cmUgPSBhc3luY2lvXC5GdXR1cmVcKGxvb3A9c2VsZlwubG9vcFwpXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgcidUcmFjZWJhY2sgXChtb3N0IHJlY2VudCBjYWxsIGxhc3RcKTpcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICByJy4qXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgcidNZW1vcnlFcnJvciQnCisgICAgICAgICAgICAgICAgICAgICAgICAgKS5mb3JtYXQoZmlsZW5hbWU9cmUuZXNjYXBlKGZyYW1lWzBdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lbm89ZnJhbWVbMV0pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJlZ2V4ID0gKHInXkZ1dHVyZS9UYXNrIGV4Y2VwdGlvbiB3YXMgbmV2ZXIgcmV0cmlldmVkXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgcidUcmFjZWJhY2sgXChtb3N0IHJlY2VudCBjYWxsIGxhc3RcKTpcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICByJy4qXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgcidNZW1vcnlFcnJvciQnCisgICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgbV9sb2cuZXJyb3IuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgobW9jay5BTlksIGV4Y19pbmZvPUZhbHNlKQorICAgICAgICBtZXNzYWdlID0gbV9sb2cuZXJyb3IuY2FsbF9hcmdzWzBdWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXgobWVzc2FnZSwgcmUuY29tcGlsZShyZWdleCwgcmUuRE9UQUxMKSkKKworICAgIGRlZiB0ZXN0X2Z1dHVyZV9leGNlcHRpb25fbmV2ZXJfcmV0cmlldmVkKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX2Z1dHVyZV9leGNlcHRpb25fbmV2ZXJfcmV0cmlldmVkKEZhbHNlKQorCisgICAgZGVmIHRlc3RfZnV0dXJlX2V4Y2VwdGlvbl9uZXZlcl9yZXRyaWV2ZWRfZGVidWcoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfZnV0dXJlX2V4Y2VwdGlvbl9uZXZlcl9yZXRyaWV2ZWQoVHJ1ZSkKKworICAgIGRlZiB0ZXN0X3NldF9yZXN1bHRfdW5sZXNzX2NhbmNlbGxlZChzZWxmKToKKyAgICAgICAgZnJvbSBhc3luY2lvIGltcG9ydCBmdXR1cmVzCisgICAgICAgIGZ1dCA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmdXQuY2FuY2VsKCkKKyAgICAgICAgZnV0dXJlcy5fc2V0X3Jlc3VsdF91bmxlc3NfY2FuY2VsbGVkKGZ1dCwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZ1dC5jYW5jZWxsZWQoKSkKKworCitjbGFzcyBGdXR1cmVEb25lQ2FsbGJhY2tUZXN0cyh0ZXN0X3V0aWxzLlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5sb29wID0gc2VsZi5uZXdfdGVzdF9sb29wKCkKKworICAgIGRlZiBydW5fYnJpZWZseShzZWxmKToKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisKKyAgICBkZWYgX21ha2VfY2FsbGJhY2soc2VsZiwgYmFnLCB0aGluZyk6CisgICAgICAgICMgQ3JlYXRlIGEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBhcHBlbmRzIHRoaW5nIHRvIGJhZy4KKyAgICAgICAgZGVmIGJhZ19hcHBlbmRlcihmdXR1cmUpOgorICAgICAgICAgICAgYmFnLmFwcGVuZCh0aGluZykKKyAgICAgICAgcmV0dXJuIGJhZ19hcHBlbmRlcgorCisgICAgZGVmIF9uZXdfZnV0dXJlKHNlbGYpOgorICAgICAgICByZXR1cm4gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisKKyAgICBkZWYgdGVzdF9jYWxsYmFja3NfaW52b2tlZF9vbl9zZXRfcmVzdWx0KHNlbGYpOgorICAgICAgICBiYWcgPSBbXQorICAgICAgICBmID0gc2VsZi5fbmV3X2Z1dHVyZSgpCisgICAgICAgIGYuYWRkX2RvbmVfY2FsbGJhY2soc2VsZi5fbWFrZV9jYWxsYmFjayhiYWcsIDQyKSkKKyAgICAgICAgZi5hZGRfZG9uZV9jYWxsYmFjayhzZWxmLl9tYWtlX2NhbGxiYWNrKGJhZywgMTcpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmFnLCBbXSkKKyAgICAgICAgZi5zZXRfcmVzdWx0KCdmb28nKQorCisgICAgICAgIHNlbGYucnVuX2JyaWVmbHkoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmFnLCBbNDIsIDE3XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlc3VsdCgpLCAnZm9vJykKKworICAgIGRlZiB0ZXN0X2NhbGxiYWNrc19pbnZva2VkX29uX3NldF9leGNlcHRpb24oc2VsZik6CisgICAgICAgIGJhZyA9IFtdCisgICAgICAgIGYgPSBzZWxmLl9uZXdfZnV0dXJlKCkKKyAgICAgICAgZi5hZGRfZG9uZV9jYWxsYmFjayhzZWxmLl9tYWtlX2NhbGxiYWNrKGJhZywgMTAwKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhZywgW10pCisgICAgICAgIGV4YyA9IFJ1bnRpbWVFcnJvcigpCisgICAgICAgIGYuc2V0X2V4Y2VwdGlvbihleGMpCisKKyAgICAgICAgc2VsZi5ydW5fYnJpZWZseSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYWcsIFsxMDBdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZXhjZXB0aW9uKCksIGV4YykKKworICAgIGRlZiB0ZXN0X3JlbW92ZV9kb25lX2NhbGxiYWNrKHNlbGYpOgorICAgICAgICBiYWcgPSBbXQorICAgICAgICBmID0gc2VsZi5fbmV3X2Z1dHVyZSgpCisgICAgICAgIGNiMSA9IHNlbGYuX21ha2VfY2FsbGJhY2soYmFnLCAxKQorICAgICAgICBjYjIgPSBzZWxmLl9tYWtlX2NhbGxiYWNrKGJhZywgMikKKyAgICAgICAgY2IzID0gc2VsZi5fbWFrZV9jYWxsYmFjayhiYWcsIDMpCisKKyAgICAgICAgIyBBZGQgb25lIGNiMSBhbmQgb25lIGNiMi4KKyAgICAgICAgZi5hZGRfZG9uZV9jYWxsYmFjayhjYjEpCisgICAgICAgIGYuYWRkX2RvbmVfY2FsbGJhY2soY2IyKQorCisgICAgICAgICMgT25lIGluc3RhbmNlIG9mIGNiMiByZW1vdmVkLiBOb3cgdGhlcmUncyBvbmx5IG9uZSBjYjEuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZW1vdmVfZG9uZV9jYWxsYmFjayhjYjIpLCAxKQorCisgICAgICAgICMgTmV2ZXIgaGFkIGFueSBjYjMgaW4gdGhlcmUuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZW1vdmVfZG9uZV9jYWxsYmFjayhjYjMpLCAwKQorCisgICAgICAgICMgQWZ0ZXIgdGhpcyB0aGVyZSB3aWxsIGJlIDYgaW5zdGFuY2VzIG9mIGNiMSBhbmQgb25lIG9mIGNiMi4KKyAgICAgICAgZi5hZGRfZG9uZV9jYWxsYmFjayhjYjIpCisgICAgICAgIGZvciBpIGluIHJhbmdlKDUpOgorICAgICAgICAgICAgZi5hZGRfZG9uZV9jYWxsYmFjayhjYjEpCisKKyAgICAgICAgIyBSZW1vdmUgYWxsIGluc3RhbmNlcyBvZiBjYjEuIE9uZSBjYjIgcmVtYWlucy4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlbW92ZV9kb25lX2NhbGxiYWNrKGNiMSksIDYpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYWcsIFtdKQorICAgICAgICBmLnNldF9yZXN1bHQoJ2ZvbycpCisKKyAgICAgICAgc2VsZi5ydW5fYnJpZWZseSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYWcsIFsyXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlc3VsdCgpLCAnZm9vJykKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3RfbG9ja3MucHkgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF9sb2Nrcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZGY1ZDlkCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3RfbG9ja3MucHkKQEAgLTAsMCArMSw4OTIgQEAKKyIiIlRlc3RzIGZvciBsb2NrLnB5IiIiCisKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB1bml0dGVzdCBpbXBvcnQgbW9jaworaW1wb3J0IHJlCisKK2ltcG9ydCBhc3luY2lvCitmcm9tIGFzeW5jaW8gaW1wb3J0IHRlc3RfdXRpbHMKKworU1RSX1JHWF9SRVBSID0gKAorICAgIHInXjwoP1A8Y2xhc3M+Lio/KSBvYmplY3QgYXQgKD9QPGFkZHJlc3M+Lio/KScKKyAgICByJ1xbKD9QPGV4dHJhcz4nCisgICAgcicoc2V0fHVuc2V0fGxvY2tlZHx1bmxvY2tlZCkoLHZhbHVlOlxkKT8oLHdhaXRlcnM6XGQrKT8nCisgICAgcicpXF0+XFonCispCitSR1hfUkVQUiA9IHJlLmNvbXBpbGUoU1RSX1JHWF9SRVBSKQorCisKK2NsYXNzIExvY2tUZXN0cyh0ZXN0X3V0aWxzLlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5sb29wID0gc2VsZi5uZXdfdGVzdF9sb29wKCkKKworICAgIGRlZiB0ZXN0X2N0b3JfbG9vcChzZWxmKToKKyAgICAgICAgbG9vcCA9IG1vY2suTW9jaygpCisgICAgICAgIGxvY2sgPSBhc3luY2lvLkxvY2sobG9vcD1sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzKGxvY2suX2xvb3AsIGxvb3ApCisKKyAgICAgICAgbG9jayA9IGFzeW5jaW8uTG9jayhsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhsb2NrLl9sb29wLCBzZWxmLmxvb3ApCisKKyAgICBkZWYgdGVzdF9jdG9yX25vbG9vcChzZWxmKToKKyAgICAgICAgYXN5bmNpby5zZXRfZXZlbnRfbG9vcChzZWxmLmxvb3ApCisgICAgICAgIGxvY2sgPSBhc3luY2lvLkxvY2soKQorICAgICAgICBzZWxmLmFzc2VydElzKGxvY2suX2xvb3AsIHNlbGYubG9vcCkKKworICAgIGRlZiB0ZXN0X3JlcHIoc2VsZik6CisgICAgICAgIGxvY2sgPSBhc3luY2lvLkxvY2sobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXByKGxvY2spLmVuZHN3aXRoKCdbdW5sb2NrZWRdPicpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoUkdYX1JFUFIubWF0Y2gocmVwcihsb2NrKSkpCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBhY3F1aXJlX2xvY2soKToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gbG9jaworCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoYWNxdWlyZV9sb2NrKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXByKGxvY2spLmVuZHN3aXRoKCdbbG9ja2VkXT4nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFJHWF9SRVBSLm1hdGNoKHJlcHIobG9jaykpKQorCisgICAgZGVmIHRlc3RfbG9jayhzZWxmKToKKyAgICAgICAgbG9jayA9IGFzeW5jaW8uTG9jayhsb29wPXNlbGYubG9vcCkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGFjcXVpcmVfbG9jaygpOgorICAgICAgICAgICAgcmV0dXJuICh5aWVsZCBmcm9tIGxvY2spCisKKyAgICAgICAgcmVzID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShhY3F1aXJlX2xvY2soKSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobG9jay5sb2NrZWQoKSkKKworICAgICAgICBsb2NrLnJlbGVhc2UoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGxvY2subG9ja2VkKCkpCisKKyAgICBkZWYgdGVzdF9hY3F1aXJlKHNlbGYpOgorICAgICAgICBsb2NrID0gYXN5bmNpby5Mb2NrKGxvb3A9c2VsZi5sb29wKQorICAgICAgICByZXN1bHQgPSBbXQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGxvY2suYWNxdWlyZSgpKSkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGMxKHJlc3VsdCk6CisgICAgICAgICAgICBpZiAoeWllbGQgZnJvbSBsb2NrLmFjcXVpcmUoKSk6CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgxKQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGMyKHJlc3VsdCk6CisgICAgICAgICAgICBpZiAoeWllbGQgZnJvbSBsb2NrLmFjcXVpcmUoKSk6CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgyKQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGMzKHJlc3VsdCk6CisgICAgICAgICAgICBpZiAoeWllbGQgZnJvbSBsb2NrLmFjcXVpcmUoKSk6CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgzKQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICB0MSA9IGFzeW5jaW8uVGFzayhjMShyZXN1bHQpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdDIgPSBhc3luY2lvLlRhc2soYzIocmVzdWx0KSwgbG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW10sIHJlc3VsdCkKKworICAgICAgICBsb2NrLnJlbGVhc2UoKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbMV0sIHJlc3VsdCkKKworICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbMV0sIHJlc3VsdCkKKworICAgICAgICB0MyA9IGFzeW5jaW8uVGFzayhjMyhyZXN1bHQpLCBsb29wPXNlbGYubG9vcCkKKworICAgICAgICBsb2NrLnJlbGVhc2UoKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbMSwgMl0sIHJlc3VsdCkKKworICAgICAgICBsb2NrLnJlbGVhc2UoKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbMSwgMiwgM10sIHJlc3VsdCkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUodDEuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDEucmVzdWx0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0Mi5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0Mi5yZXN1bHQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQzLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQzLnJlc3VsdCgpKQorCisgICAgZGVmIHRlc3RfYWNxdWlyZV9jYW5jZWwoc2VsZik6CisgICAgICAgIGxvY2sgPSBhc3luY2lvLkxvY2sobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGxvY2suYWNxdWlyZSgpKSkKKworICAgICAgICB0YXNrID0gYXN5bmNpby5UYXNrKGxvY2suYWNxdWlyZSgpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5sb29wLmNhbGxfc29vbih0YXNrLmNhbmNlbCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBhc3luY2lvLkNhbmNlbGxlZEVycm9yLAorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgdGFzaykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShsb2NrLl93YWl0ZXJzKQorCisgICAgZGVmIHRlc3RfY2FuY2VsX3JhY2Uoc2VsZik6CisgICAgICAgICMgU2V2ZXJhbCB0YXNrczoKKyAgICAgICAgIyAtIEEgYWNxdWlyZXMgdGhlIGxvY2sKKyAgICAgICAgIyAtIEIgaXMgYmxvY2tlZCBpbiBhcWN1aXJlKCkKKyAgICAgICAgIyAtIEMgaXMgYmxvY2tlZCBpbiBhcWN1aXJlKCkKKyAgICAgICAgIworICAgICAgICAjIE5vdywgY29uY3VycmVudGx5OgorICAgICAgICAjIC0gQiBpcyBjYW5jZWxsZWQKKyAgICAgICAgIyAtIEEgcmVsZWFzZXMgdGhlIGxvY2sKKyAgICAgICAgIworICAgICAgICAjIElmIEIncyB3YWl0ZXIgaXMgbWFya2VkIGNhbmNlbGxlZCBidXQgbm90IHlldCByZW1vdmVkIGZyb20KKyAgICAgICAgIyBfd2FpdGVycywgQSdzIHJlbGVhc2UoKSBjYWxsIHdpbGwgY3Jhc2ggd2hlbiB0cnlpbmcgdG8gc2V0CisgICAgICAgICMgQidzIHdhaXRlcjsgaW5zdGVhZCwgaXQgc2hvdWxkIG1vdmUgb24gdG8gQydzIHdhaXRlci4KKworICAgICAgICAjIFNldHVwOiBBIGhhcyB0aGUgbG9jaywgYiBhbmQgYyBhcmUgd2FpdGluZy4KKyAgICAgICAgbG9jayA9IGFzeW5jaW8uTG9jayhsb29wPXNlbGYubG9vcCkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGxvY2tpdChuYW1lLCBibG9ja2VyKToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gbG9jay5hY3F1aXJlKCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpZiBibG9ja2VyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICB5aWVsZCBmcm9tIGJsb2NrZXIKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgbG9jay5yZWxlYXNlKCkKKworICAgICAgICBmYSA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0YSA9IGFzeW5jaW8uVGFzayhsb2NraXQoJ0EnLCBmYSksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxvY2subG9ja2VkKCkpCisgICAgICAgIHRiID0gYXN5bmNpby5UYXNrKGxvY2tpdCgnQicsIE5vbmUpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGxvY2suX3dhaXRlcnMpLCAxKQorICAgICAgICB0YyA9IGFzeW5jaW8uVGFzayhsb2NraXQoJ0MnLCBOb25lKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsb2NrLl93YWl0ZXJzKSwgMikKKworICAgICAgICAjIENyZWF0ZSB0aGUgcmFjZSBhbmQgY2hlY2suCisgICAgICAgICMgV2l0aG91dCB0aGUgZml4IHRoaXMgZmFpbGVkIGF0IHRoZSBsYXN0IGFzc2VydC4KKyAgICAgICAgZmEuc2V0X3Jlc3VsdChOb25lKQorICAgICAgICB0Yi5jYW5jZWwoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobG9jay5fd2FpdGVyc1swXS5jYW5jZWxsZWQoKSkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobG9jay5sb2NrZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRhLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRiLmNhbmNlbGxlZCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodGMuZG9uZSgpKQorCisgICAgZGVmIHRlc3RfcmVsZWFzZV9ub3RfYWNxdWlyZWQoc2VsZik6CisgICAgICAgIGxvY2sgPSBhc3luY2lvLkxvY2sobG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBsb2NrLnJlbGVhc2UpCisKKyAgICBkZWYgdGVzdF9yZWxlYXNlX25vX3dhaXRlcnMoc2VsZik6CisgICAgICAgIGxvY2sgPSBhc3luY2lvLkxvY2sobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUobG9jay5hY3F1aXJlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsb2NrLmxvY2tlZCgpKQorCisgICAgICAgIGxvY2sucmVsZWFzZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobG9jay5sb2NrZWQoKSkKKworICAgIGRlZiB0ZXN0X2NvbnRleHRfbWFuYWdlcihzZWxmKToKKyAgICAgICAgbG9jayA9IGFzeW5jaW8uTG9jayhsb29wPXNlbGYubG9vcCkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGFjcXVpcmVfbG9jaygpOgorICAgICAgICAgICAgcmV0dXJuICh5aWVsZCBmcm9tIGxvY2spCisKKyAgICAgICAgd2l0aCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGFjcXVpcmVfbG9jaygpKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsb2NrLmxvY2tlZCgpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobG9jay5sb2NrZWQoKSkKKworICAgIGRlZiB0ZXN0X2NvbnRleHRfbWFuYWdlcl9jYW50X3JldXNlKHNlbGYpOgorICAgICAgICBsb2NrID0gYXN5bmNpby5Mb2NrKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgYWNxdWlyZV9sb2NrKCk6CisgICAgICAgICAgICByZXR1cm4gKHlpZWxkIGZyb20gbG9jaykKKworICAgICAgICAjIFRoaXMgc3BlbGxzICJ5aWVsZCBmcm9tIGxvY2siIG91dHNpZGUgYSBnZW5lcmF0b3IuCisgICAgICAgIGNtID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShhY3F1aXJlX2xvY2soKSkKKyAgICAgICAgd2l0aCBjbToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsb2NrLmxvY2tlZCgpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobG9jay5sb2NrZWQoKSkKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yKToKKyAgICAgICAgICAgIHdpdGggY206CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgZGVmIHRlc3RfY29udGV4dF9tYW5hZ2VyX25vX3lpZWxkKHNlbGYpOgorICAgICAgICBsb2NrID0gYXN5bmNpby5Mb2NrKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggbG9jazoKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ1J1bnRpbWVFcnJvciBpcyBub3QgcmFpc2VkIGluIHdpdGggZXhwcmVzc2lvbicpCisgICAgICAgIGV4Y2VwdCBSdW50aW1lRXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICBzdHIoZXJyKSwKKyAgICAgICAgICAgICAgICAnInlpZWxkIGZyb20iIHNob3VsZCBiZSB1c2VkIGFzIGNvbnRleHQgbWFuYWdlciBleHByZXNzaW9uJykKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGxvY2subG9ja2VkKCkpCisKKworY2xhc3MgRXZlbnRUZXN0cyh0ZXN0X3V0aWxzLlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5sb29wID0gc2VsZi5uZXdfdGVzdF9sb29wKCkKKworICAgIGRlZiB0ZXN0X2N0b3JfbG9vcChzZWxmKToKKyAgICAgICAgbG9vcCA9IG1vY2suTW9jaygpCisgICAgICAgIGV2ID0gYXN5bmNpby5FdmVudChsb29wPWxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZXYuX2xvb3AsIGxvb3ApCisKKyAgICAgICAgZXYgPSBhc3luY2lvLkV2ZW50KGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzKGV2Ll9sb29wLCBzZWxmLmxvb3ApCisKKyAgICBkZWYgdGVzdF9jdG9yX25vbG9vcChzZWxmKToKKyAgICAgICAgYXN5bmNpby5zZXRfZXZlbnRfbG9vcChzZWxmLmxvb3ApCisgICAgICAgIGV2ID0gYXN5bmNpby5FdmVudCgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZXYuX2xvb3AsIHNlbGYubG9vcCkKKworICAgIGRlZiB0ZXN0X3JlcHIoc2VsZik6CisgICAgICAgIGV2ID0gYXN5bmNpby5FdmVudChsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcHIoZXYpLmVuZHN3aXRoKCdbdW5zZXRdPicpKQorICAgICAgICBtYXRjaCA9IFJHWF9SRVBSLm1hdGNoKHJlcHIoZXYpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGNoLmdyb3VwKCdleHRyYXMnKSwgJ3Vuc2V0JykKKworICAgICAgICBldi5zZXQoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVwcihldikuZW5kc3dpdGgoJ1tzZXRdPicpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoUkdYX1JFUFIubWF0Y2gocmVwcihldikpKQorCisgICAgICAgIGV2Ll93YWl0ZXJzLmFwcGVuZChtb2NrLk1vY2soKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCd3YWl0ZXJzOjEnIGluIHJlcHIoZXYpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoUkdYX1JFUFIubWF0Y2gocmVwcihldikpKQorCisgICAgZGVmIHRlc3Rfd2FpdChzZWxmKToKKyAgICAgICAgZXYgPSBhc3luY2lvLkV2ZW50KGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGV2LmlzX3NldCgpKQorCisgICAgICAgIHJlc3VsdCA9IFtdCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBjMShyZXN1bHQpOgorICAgICAgICAgICAgaWYgKHlpZWxkIGZyb20gZXYud2FpdCgpKToKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKDEpCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBjMihyZXN1bHQpOgorICAgICAgICAgICAgaWYgKHlpZWxkIGZyb20gZXYud2FpdCgpKToKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKDIpCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBjMyhyZXN1bHQpOgorICAgICAgICAgICAgaWYgKHlpZWxkIGZyb20gZXYud2FpdCgpKToKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKDMpCisKKyAgICAgICAgdDEgPSBhc3luY2lvLlRhc2soYzEocmVzdWx0KSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHQyID0gYXN5bmNpby5UYXNrKGMyKHJlc3VsdCksIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtdLCByZXN1bHQpCisKKyAgICAgICAgdDMgPSBhc3luY2lvLlRhc2soYzMocmVzdWx0KSwgbG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgZXYuc2V0KCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWzMsIDEsIDJdLCByZXN1bHQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodDEucmVzdWx0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0Mi5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHQyLnJlc3VsdCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDMuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh0My5yZXN1bHQoKSkKKworICAgIGRlZiB0ZXN0X3dhaXRfb25fc2V0KHNlbGYpOgorICAgICAgICBldiA9IGFzeW5jaW8uRXZlbnQobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGV2LnNldCgpCisKKyAgICAgICAgcmVzID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShldi53YWl0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXMpCisKKyAgICBkZWYgdGVzdF93YWl0X2NhbmNlbChzZWxmKToKKyAgICAgICAgZXYgPSBhc3luY2lvLkV2ZW50KGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIHdhaXQgPSBhc3luY2lvLlRhc2soZXYud2FpdCgpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5sb29wLmNhbGxfc29vbih3YWl0LmNhbmNlbCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBhc3luY2lvLkNhbmNlbGxlZEVycm9yLAorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgd2FpdCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShldi5fd2FpdGVycykKKworICAgIGRlZiB0ZXN0X2NsZWFyKHNlbGYpOgorICAgICAgICBldiA9IGFzeW5jaW8uRXZlbnQobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXYuaXNfc2V0KCkpCisKKyAgICAgICAgZXYuc2V0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGV2LmlzX3NldCgpKQorCisgICAgICAgIGV2LmNsZWFyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShldi5pc19zZXQoKSkKKworICAgIGRlZiB0ZXN0X2NsZWFyX3dpdGhfd2FpdGVycyhzZWxmKToKKyAgICAgICAgZXYgPSBhc3luY2lvLkV2ZW50KGxvb3A9c2VsZi5sb29wKQorICAgICAgICByZXN1bHQgPSBbXQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgYzEocmVzdWx0KToKKyAgICAgICAgICAgIGlmICh5aWVsZCBmcm9tIGV2LndhaXQoKSk6CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgxKQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICB0ID0gYXN5bmNpby5UYXNrKGMxKHJlc3VsdCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbXSwgcmVzdWx0KQorCisgICAgICAgIGV2LnNldCgpCisgICAgICAgIGV2LmNsZWFyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShldi5pc19zZXQoKSkKKworICAgICAgICBldi5zZXQoKQorICAgICAgICBldi5zZXQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxlbihldi5fd2FpdGVycykpCisKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWzFdLCByZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgbGVuKGV2Ll93YWl0ZXJzKSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUodC5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0LnJlc3VsdCgpKQorCisKK2NsYXNzIENvbmRpdGlvblRlc3RzKHRlc3RfdXRpbHMuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AgPSBzZWxmLm5ld190ZXN0X2xvb3AoKQorCisgICAgZGVmIHRlc3RfY3Rvcl9sb29wKHNlbGYpOgorICAgICAgICBsb29wID0gbW9jay5Nb2NrKCkKKyAgICAgICAgY29uZCA9IGFzeW5jaW8uQ29uZGl0aW9uKGxvb3A9bG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhjb25kLl9sb29wLCBsb29wKQorCisgICAgICAgIGNvbmQgPSBhc3luY2lvLkNvbmRpdGlvbihsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhjb25kLl9sb29wLCBzZWxmLmxvb3ApCisKKyAgICBkZWYgdGVzdF9jdG9yX25vbG9vcChzZWxmKToKKyAgICAgICAgYXN5bmNpby5zZXRfZXZlbnRfbG9vcChzZWxmLmxvb3ApCisgICAgICAgIGNvbmQgPSBhc3luY2lvLkNvbmRpdGlvbigpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoY29uZC5fbG9vcCwgc2VsZi5sb29wKQorCisgICAgZGVmIHRlc3Rfd2FpdChzZWxmKToKKyAgICAgICAgY29uZCA9IGFzeW5jaW8uQ29uZGl0aW9uKGxvb3A9c2VsZi5sb29wKQorICAgICAgICByZXN1bHQgPSBbXQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgYzEocmVzdWx0KToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gY29uZC5hY3F1aXJlKCkKKyAgICAgICAgICAgIGlmICh5aWVsZCBmcm9tIGNvbmQud2FpdCgpKToKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKDEpCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgYzIocmVzdWx0KToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gY29uZC5hY3F1aXJlKCkKKyAgICAgICAgICAgIGlmICh5aWVsZCBmcm9tIGNvbmQud2FpdCgpKToKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKDIpCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgYzMocmVzdWx0KToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gY29uZC5hY3F1aXJlKCkKKyAgICAgICAgICAgIGlmICh5aWVsZCBmcm9tIGNvbmQud2FpdCgpKToKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKDMpCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIHQxID0gYXN5bmNpby5UYXNrKGMxKHJlc3VsdCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0MiA9IGFzeW5jaW8uVGFzayhjMihyZXN1bHQpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdDMgPSBhc3luY2lvLlRhc2soYzMocmVzdWx0KSwgbG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW10sIHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjb25kLmxvY2tlZCgpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvbmQuYWNxdWlyZSgpKSkKKyAgICAgICAgY29uZC5ub3RpZnkoKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbXSwgcmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY29uZC5sb2NrZWQoKSkKKworICAgICAgICBjb25kLnJlbGVhc2UoKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbMV0sIHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvbmQubG9ja2VkKCkpCisKKyAgICAgICAgY29uZC5ub3RpZnkoMikKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWzFdLCByZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb25kLmxvY2tlZCgpKQorCisgICAgICAgIGNvbmQucmVsZWFzZSgpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsxLCAyXSwgcmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY29uZC5sb2NrZWQoKSkKKworICAgICAgICBjb25kLnJlbGVhc2UoKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbMSwgMiwgM10sIHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvbmQubG9ja2VkKCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxLnJlc3VsdCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDIuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDIucmVzdWx0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0My5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0My5yZXN1bHQoKSkKKworICAgIGRlZiB0ZXN0X3dhaXRfY2FuY2VsKHNlbGYpOgorICAgICAgICBjb25kID0gYXN5bmNpby5Db25kaXRpb24obG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29uZC5hY3F1aXJlKCkpCisKKyAgICAgICAgd2FpdCA9IGFzeW5jaW8uVGFzayhjb25kLndhaXQoKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYubG9vcC5jYWxsX3Nvb24od2FpdC5jYW5jZWwpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgYXN5bmNpby5DYW5jZWxsZWRFcnJvciwKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIHdhaXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY29uZC5fd2FpdGVycykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvbmQubG9ja2VkKCkpCisKKyAgICBkZWYgdGVzdF93YWl0X3VuYWNxdWlyZWQoc2VsZik6CisgICAgICAgIGNvbmQgPSBhc3luY2lvLkNvbmRpdGlvbihsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBSdW50aW1lRXJyb3IsCisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBjb25kLndhaXQoKSkKKworICAgIGRlZiB0ZXN0X3dhaXRfZm9yKHNlbGYpOgorICAgICAgICBjb25kID0gYXN5bmNpby5Db25kaXRpb24obG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHByZXN1bHQgPSBGYWxzZQorCisgICAgICAgIGRlZiBwcmVkaWNhdGUoKToKKyAgICAgICAgICAgIHJldHVybiBwcmVzdWx0CisKKyAgICAgICAgcmVzdWx0ID0gW10KKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGMxKHJlc3VsdCk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIGNvbmQuYWNxdWlyZSgpCisgICAgICAgICAgICBpZiAoeWllbGQgZnJvbSBjb25kLndhaXRfZm9yKHByZWRpY2F0ZSkpOgorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoMSkKKyAgICAgICAgICAgICAgICBjb25kLnJlbGVhc2UoKQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICB0ID0gYXN5bmNpby5UYXNrKGMxKHJlc3VsdCksIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtdLCByZXN1bHQpCisKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb25kLmFjcXVpcmUoKSkKKyAgICAgICAgY29uZC5ub3RpZnkoKQorICAgICAgICBjb25kLnJlbGVhc2UoKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbXSwgcmVzdWx0KQorCisgICAgICAgIHByZXN1bHQgPSBUcnVlCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29uZC5hY3F1aXJlKCkpCisgICAgICAgIGNvbmQubm90aWZ5KCkKKyAgICAgICAgY29uZC5yZWxlYXNlKCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWzFdLCByZXN1bHQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodC5yZXN1bHQoKSkKKworICAgIGRlZiB0ZXN0X3dhaXRfZm9yX3VuYWNxdWlyZWQoc2VsZik6CisgICAgICAgIGNvbmQgPSBhc3luY2lvLkNvbmRpdGlvbihsb29wPXNlbGYubG9vcCkKKworICAgICAgICAjIHByZWRpY2F0ZSBjYW4gcmV0dXJuIHRydWUgaW1tZWRpYXRlbHkKKyAgICAgICAgcmVzID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb25kLndhaXRfZm9yKGxhbWJkYTogWzEsIDIsIDNdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbMSwgMiwgM10sIHJlcykKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFJ1bnRpbWVFcnJvciwKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsCisgICAgICAgICAgICBjb25kLndhaXRfZm9yKGxhbWJkYTogRmFsc2UpKQorCisgICAgZGVmIHRlc3Rfbm90aWZ5KHNlbGYpOgorICAgICAgICBjb25kID0gYXN5bmNpby5Db25kaXRpb24obG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHJlc3VsdCA9IFtdCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBjMShyZXN1bHQpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBjb25kLmFjcXVpcmUoKQorICAgICAgICAgICAgaWYgKHlpZWxkIGZyb20gY29uZC53YWl0KCkpOgorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoMSkKKyAgICAgICAgICAgICAgICBjb25kLnJlbGVhc2UoKQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGMyKHJlc3VsdCk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIGNvbmQuYWNxdWlyZSgpCisgICAgICAgICAgICBpZiAoeWllbGQgZnJvbSBjb25kLndhaXQoKSk6CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgyKQorICAgICAgICAgICAgICAgIGNvbmQucmVsZWFzZSgpCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgYzMocmVzdWx0KToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gY29uZC5hY3F1aXJlKCkKKyAgICAgICAgICAgIGlmICh5aWVsZCBmcm9tIGNvbmQud2FpdCgpKToKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKDMpCisgICAgICAgICAgICAgICAgY29uZC5yZWxlYXNlKCkKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgdDEgPSBhc3luY2lvLlRhc2soYzEocmVzdWx0KSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHQyID0gYXN5bmNpby5UYXNrKGMyKHJlc3VsdCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0MyA9IGFzeW5jaW8uVGFzayhjMyhyZXN1bHQpLCBsb29wPXNlbGYubG9vcCkKKworICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbXSwgcmVzdWx0KQorCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29uZC5hY3F1aXJlKCkpCisgICAgICAgIGNvbmQubm90aWZ5KDEpCisgICAgICAgIGNvbmQucmVsZWFzZSgpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsxXSwgcmVzdWx0KQorCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29uZC5hY3F1aXJlKCkpCisgICAgICAgIGNvbmQubm90aWZ5KDEpCisgICAgICAgIGNvbmQubm90aWZ5KDIwNDgpCisgICAgICAgIGNvbmQucmVsZWFzZSgpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsxLCAyLCAzXSwgcmVzdWx0KQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MS5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MS5yZXN1bHQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQyLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQyLnJlc3VsdCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDMuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDMucmVzdWx0KCkpCisKKyAgICBkZWYgdGVzdF9ub3RpZnlfYWxsKHNlbGYpOgorICAgICAgICBjb25kID0gYXN5bmNpby5Db25kaXRpb24obG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgcmVzdWx0ID0gW10KKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGMxKHJlc3VsdCk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIGNvbmQuYWNxdWlyZSgpCisgICAgICAgICAgICBpZiAoeWllbGQgZnJvbSBjb25kLndhaXQoKSk6CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgxKQorICAgICAgICAgICAgICAgIGNvbmQucmVsZWFzZSgpCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgYzIocmVzdWx0KToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gY29uZC5hY3F1aXJlKCkKKyAgICAgICAgICAgIGlmICh5aWVsZCBmcm9tIGNvbmQud2FpdCgpKToKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKDIpCisgICAgICAgICAgICAgICAgY29uZC5yZWxlYXNlKCkKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgdDEgPSBhc3luY2lvLlRhc2soYzEocmVzdWx0KSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHQyID0gYXN5bmNpby5UYXNrKGMyKHJlc3VsdCksIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtdLCByZXN1bHQpCisKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb25kLmFjcXVpcmUoKSkKKyAgICAgICAgY29uZC5ub3RpZnlfYWxsKCkKKyAgICAgICAgY29uZC5yZWxlYXNlKCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWzEsIDJdLCByZXN1bHQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxLnJlc3VsdCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDIuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDIucmVzdWx0KCkpCisKKyAgICBkZWYgdGVzdF9ub3RpZnlfdW5hY3F1aXJlZChzZWxmKToKKyAgICAgICAgY29uZCA9IGFzeW5jaW8uQ29uZGl0aW9uKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIGNvbmQubm90aWZ5KQorCisgICAgZGVmIHRlc3Rfbm90aWZ5X2FsbF91bmFjcXVpcmVkKHNlbGYpOgorICAgICAgICBjb25kID0gYXN5bmNpby5Db25kaXRpb24obG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgY29uZC5ub3RpZnlfYWxsKQorCisgICAgZGVmIHRlc3RfcmVwcihzZWxmKToKKyAgICAgICAgY29uZCA9IGFzeW5jaW8uQ29uZGl0aW9uKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ3VubG9ja2VkJyBpbiByZXByKGNvbmQpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoUkdYX1JFUFIubWF0Y2gocmVwcihjb25kKSkpCisKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb25kLmFjcXVpcmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdsb2NrZWQnIGluIHJlcHIoY29uZCkpCisKKyAgICAgICAgY29uZC5fd2FpdGVycy5hcHBlbmQobW9jay5Nb2NrKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnd2FpdGVyczoxJyBpbiByZXByKGNvbmQpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoUkdYX1JFUFIubWF0Y2gocmVwcihjb25kKSkpCisKKyAgICAgICAgY29uZC5fd2FpdGVycy5hcHBlbmQobW9jay5Nb2NrKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnd2FpdGVyczoyJyBpbiByZXByKGNvbmQpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoUkdYX1JFUFIubWF0Y2gocmVwcihjb25kKSkpCisKKyAgICBkZWYgdGVzdF9jb250ZXh0X21hbmFnZXIoc2VsZik6CisgICAgICAgIGNvbmQgPSBhc3luY2lvLkNvbmRpdGlvbihsb29wPXNlbGYubG9vcCkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGFjcXVpcmVfY29uZCgpOgorICAgICAgICAgICAgcmV0dXJuICh5aWVsZCBmcm9tIGNvbmQpCisKKyAgICAgICAgd2l0aCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGFjcXVpcmVfY29uZCgpKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb25kLmxvY2tlZCgpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY29uZC5sb2NrZWQoKSkKKworICAgIGRlZiB0ZXN0X2NvbnRleHRfbWFuYWdlcl9ub195aWVsZChzZWxmKToKKyAgICAgICAgY29uZCA9IGFzeW5jaW8uQ29uZGl0aW9uKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggY29uZDoKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ1J1bnRpbWVFcnJvciBpcyBub3QgcmFpc2VkIGluIHdpdGggZXhwcmVzc2lvbicpCisgICAgICAgIGV4Y2VwdCBSdW50aW1lRXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICBzdHIoZXJyKSwKKyAgICAgICAgICAgICAgICAnInlpZWxkIGZyb20iIHNob3VsZCBiZSB1c2VkIGFzIGNvbnRleHQgbWFuYWdlciBleHByZXNzaW9uJykKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNvbmQubG9ja2VkKCkpCisKKyAgICBkZWYgdGVzdF9leHBsaWNpdF9sb2NrKHNlbGYpOgorICAgICAgICBsb2NrID0gYXN5bmNpby5Mb2NrKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBjb25kID0gYXN5bmNpby5Db25kaXRpb24obG9jaywgbG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhjb25kLl9sb2NrLCBsb2NrKQorICAgICAgICBzZWxmLmFzc2VydElzKGNvbmQuX2xvb3AsIGxvY2suX2xvb3ApCisKKyAgICBkZWYgdGVzdF9hbWJpZ3VvdXNfbG9vcHMoc2VsZik6CisgICAgICAgIGxvb3AgPSBzZWxmLm5ld190ZXN0X2xvb3AoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAobG9vcC5jbG9zZSkKKworICAgICAgICBsb2NrID0gYXN5bmNpby5Mb2NrKGxvb3A9c2VsZi5sb29wKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgYXN5bmNpby5Db25kaXRpb24obG9jaywgbG9vcD1sb29wKQorCisKK2NsYXNzIFNlbWFwaG9yZVRlc3RzKHRlc3RfdXRpbHMuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AgPSBzZWxmLm5ld190ZXN0X2xvb3AoKQorCisgICAgZGVmIHRlc3RfY3Rvcl9sb29wKHNlbGYpOgorICAgICAgICBsb29wID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc2VtID0gYXN5bmNpby5TZW1hcGhvcmUobG9vcD1sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzKHNlbS5fbG9vcCwgbG9vcCkKKworICAgICAgICBzZW0gPSBhc3luY2lvLlNlbWFwaG9yZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzZW0uX2xvb3AsIHNlbGYubG9vcCkKKworICAgIGRlZiB0ZXN0X2N0b3Jfbm9sb29wKHNlbGYpOgorICAgICAgICBhc3luY2lvLnNldF9ldmVudF9sb29wKHNlbGYubG9vcCkKKyAgICAgICAgc2VtID0gYXN5bmNpby5TZW1hcGhvcmUoKQorICAgICAgICBzZWxmLmFzc2VydElzKHNlbS5fbG9vcCwgc2VsZi5sb29wKQorCisgICAgZGVmIHRlc3RfaW5pdGlhbF92YWx1ZV96ZXJvKHNlbGYpOgorICAgICAgICBzZW0gPSBhc3luY2lvLlNlbWFwaG9yZSgwLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbS5sb2NrZWQoKSkKKworICAgIGRlZiB0ZXN0X3JlcHIoc2VsZik6CisgICAgICAgIHNlbSA9IGFzeW5jaW8uU2VtYXBob3JlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVwcihzZW0pLmVuZHN3aXRoKCdbdW5sb2NrZWQsdmFsdWU6MV0+JykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShSR1hfUkVQUi5tYXRjaChyZXByKHNlbSkpKQorCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoc2VtLmFjcXVpcmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcHIoc2VtKS5lbmRzd2l0aCgnW2xvY2tlZF0+JykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnd2FpdGVycycgbm90IGluIHJlcHIoc2VtKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFJHWF9SRVBSLm1hdGNoKHJlcHIoc2VtKSkpCisKKyAgICAgICAgc2VtLl93YWl0ZXJzLmFwcGVuZChtb2NrLk1vY2soKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCd3YWl0ZXJzOjEnIGluIHJlcHIoc2VtKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFJHWF9SRVBSLm1hdGNoKHJlcHIoc2VtKSkpCisKKyAgICAgICAgc2VtLl93YWl0ZXJzLmFwcGVuZChtb2NrLk1vY2soKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCd3YWl0ZXJzOjInIGluIHJlcHIoc2VtKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFJHWF9SRVBSLm1hdGNoKHJlcHIoc2VtKSkpCisKKyAgICBkZWYgdGVzdF9zZW1hcGhvcmUoc2VsZik6CisgICAgICAgIHNlbSA9IGFzeW5jaW8uU2VtYXBob3JlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHNlbS5fdmFsdWUpCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBhY3F1aXJlX2xvY2soKToKKyAgICAgICAgICAgIHJldHVybiAoeWllbGQgZnJvbSBzZW0pCisKKyAgICAgICAgcmVzID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShhY3F1aXJlX2xvY2soKSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VtLmxvY2tlZCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHNlbS5fdmFsdWUpCisKKyAgICAgICAgc2VtLnJlbGVhc2UoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbS5sb2NrZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBzZW0uX3ZhbHVlKQorCisgICAgZGVmIHRlc3Rfc2VtYXBob3JlX3ZhbHVlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBhc3luY2lvLlNlbWFwaG9yZSwgLTEpCisKKyAgICBkZWYgdGVzdF9hY3F1aXJlKHNlbGYpOgorICAgICAgICBzZW0gPSBhc3luY2lvLlNlbWFwaG9yZSgzLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgcmVzdWx0ID0gW10KKworICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShzZW0uYWNxdWlyZSgpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoc2VtLmFjcXVpcmUoKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VtLmxvY2tlZCgpKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgYzEocmVzdWx0KToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gc2VtLmFjcXVpcmUoKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgxKQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGMyKHJlc3VsdCk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIHNlbS5hY3F1aXJlKCkKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoMikKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBjMyhyZXN1bHQpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBzZW0uYWNxdWlyZSgpCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKDMpCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgYzQocmVzdWx0KToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gc2VtLmFjcXVpcmUoKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCg0KQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICB0MSA9IGFzeW5jaW8uVGFzayhjMShyZXN1bHQpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdDIgPSBhc3luY2lvLlRhc2soYzIocmVzdWx0KSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHQzID0gYXN5bmNpby5UYXNrKGMzKHJlc3VsdCksIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsxXSwgcmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VtLmxvY2tlZCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIsIGxlbihzZW0uX3dhaXRlcnMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHNlbS5fdmFsdWUpCisKKyAgICAgICAgdDQgPSBhc3luY2lvLlRhc2soYzQocmVzdWx0KSwgbG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgc2VtLnJlbGVhc2UoKQorICAgICAgICBzZW0ucmVsZWFzZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgc2VtLl92YWx1ZSkKKworICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBzZW0uX3ZhbHVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDMsIGxlbihyZXN1bHQpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VtLmxvY2tlZCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxlbihzZW0uX3dhaXRlcnMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHNlbS5fdmFsdWUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxLnJlc3VsdCgpKQorICAgICAgICByYWNlX3Rhc2tzID0gW3QyLCB0MywgdDRdCisgICAgICAgIGRvbmVfdGFza3MgPSBbdCBmb3IgdCBpbiByYWNlX3Rhc2tzIGlmIHQuZG9uZSgpIGFuZCB0LnJlc3VsdCgpXQorICAgICAgICBzZWxmLmFzc2VydFRydWUoMiwgbGVuKGRvbmVfdGFza3MpKQorCisgICAgICAgICMgY2xlYW51cCBsb2NrZWQgc2VtYXBob3JlCisgICAgICAgIHNlbS5yZWxlYXNlKCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShhc3luY2lvLmdhdGhlcigqcmFjZV90YXNrcykpCisKKyAgICBkZWYgdGVzdF9hY3F1aXJlX2NhbmNlbChzZWxmKToKKyAgICAgICAgc2VtID0gYXN5bmNpby5TZW1hcGhvcmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoc2VtLmFjcXVpcmUoKSkKKworICAgICAgICBhY3F1aXJlID0gYXN5bmNpby5UYXNrKHNlbS5hY3F1aXJlKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmxvb3AuY2FsbF9zb29uKGFjcXVpcmUuY2FuY2VsKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIGFzeW5jaW8uQ2FuY2VsbGVkRXJyb3IsCisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBhY3F1aXJlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKG5vdCBzZW0uX3dhaXRlcnMpIG9yCisgICAgICAgICAgICAgICAgICAgICAgICBhbGwod2FpdGVyLmRvbmUoKSBmb3Igd2FpdGVyIGluIHNlbS5fd2FpdGVycykpCisKKyAgICBkZWYgdGVzdF9hY3F1aXJlX2NhbmNlbF9iZWZvcmVfYXdva2VuKHNlbGYpOgorICAgICAgICBzZW0gPSBhc3luY2lvLlNlbWFwaG9yZSh2YWx1ZT0wLCBsb29wPXNlbGYubG9vcCkKKworICAgICAgICB0MSA9IGFzeW5jaW8uVGFzayhzZW0uYWNxdWlyZSgpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdDIgPSBhc3luY2lvLlRhc2soc2VtLmFjcXVpcmUoKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHQzID0gYXN5bmNpby5UYXNrKHNlbS5hY3F1aXJlKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0NCA9IGFzeW5jaW8uVGFzayhzZW0uYWNxdWlyZSgpLCBsb29wPXNlbGYubG9vcCkKKworICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKworICAgICAgICBzZW0ucmVsZWFzZSgpCisgICAgICAgIHQxLmNhbmNlbCgpCisgICAgICAgIHQyLmNhbmNlbCgpCisKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIG51bV9kb25lID0gc3VtKHQuZG9uZSgpIGZvciB0IGluIFt0MywgdDRdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG51bV9kb25lLCAxKQorCisgICAgICAgIHQzLmNhbmNlbCgpCisgICAgICAgIHQ0LmNhbmNlbCgpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorCisgICAgZGVmIHRlc3RfYWNxdWlyZV9oYW5nKHNlbGYpOgorICAgICAgICBzZW0gPSBhc3luY2lvLlNlbWFwaG9yZSh2YWx1ZT0wLCBsb29wPXNlbGYubG9vcCkKKworICAgICAgICB0MSA9IGFzeW5jaW8uVGFzayhzZW0uYWNxdWlyZSgpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdDIgPSBhc3luY2lvLlRhc2soc2VtLmFjcXVpcmUoKSwgbG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisKKyAgICAgICAgc2VtLnJlbGVhc2UoKQorICAgICAgICB0MS5jYW5jZWwoKQorCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VtLmxvY2tlZCgpKQorCisgICAgZGVmIHRlc3RfcmVsZWFzZV9ub3RfYWNxdWlyZWQoc2VsZik6CisgICAgICAgIHNlbSA9IGFzeW5jaW8uQm91bmRlZFNlbWFwaG9yZShsb29wPXNlbGYubG9vcCkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZW0ucmVsZWFzZSkKKworICAgIGRlZiB0ZXN0X3JlbGVhc2Vfbm9fd2FpdGVycyhzZWxmKToKKyAgICAgICAgc2VtID0gYXN5bmNpby5TZW1hcGhvcmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoc2VtLmFjcXVpcmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbS5sb2NrZWQoKSkKKworICAgICAgICBzZW0ucmVsZWFzZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VtLmxvY2tlZCgpKQorCisgICAgZGVmIHRlc3RfY29udGV4dF9tYW5hZ2VyKHNlbGYpOgorICAgICAgICBzZW0gPSBhc3luY2lvLlNlbWFwaG9yZSgyLCBsb29wPXNlbGYubG9vcCkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGFjcXVpcmVfbG9jaygpOgorICAgICAgICAgICAgcmV0dXJuICh5aWVsZCBmcm9tIHNlbSkKKworICAgICAgICB3aXRoIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoYWNxdWlyZV9sb2NrKCkpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZW0ubG9ja2VkKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHNlbS5fdmFsdWUpCisKKyAgICAgICAgICAgIHdpdGggc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShhY3F1aXJlX2xvY2soKSk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbS5sb2NrZWQoKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIsIHNlbS5fdmFsdWUpCisKKyAgICBkZWYgdGVzdF9jb250ZXh0X21hbmFnZXJfbm9feWllbGQoc2VsZik6CisgICAgICAgIHNlbSA9IGFzeW5jaW8uU2VtYXBob3JlKDIsIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggc2VtOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnUnVudGltZUVycm9yIGlzIG5vdCByYWlzZWQgaW4gd2l0aCBleHByZXNzaW9uJykKKyAgICAgICAgZXhjZXB0IFJ1bnRpbWVFcnJvciBhcyBlcnI6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgIHN0cihlcnIpLAorICAgICAgICAgICAgICAgICcieWllbGQgZnJvbSIgc2hvdWxkIGJlIHVzZWQgYXMgY29udGV4dCBtYW5hZ2VyIGV4cHJlc3Npb24nKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgc2VtLl92YWx1ZSkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3RfcHJvYWN0b3JfZXZlbnRzLnB5IGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3RfcHJvYWN0b3JfZXZlbnRzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhOTJiMWUKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF9wcm9hY3Rvcl9ldmVudHMucHkKQEAgLTAsMCArMSw1OTEgQEAKKyIiIlRlc3RzIGZvciBwcm9hY3Rvcl9ldmVudHMucHkiIiIKKworaW1wb3J0IHNvY2tldAoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIHVuaXR0ZXN0IGltcG9ydCBtb2NrCisKK2ltcG9ydCBhc3luY2lvCitmcm9tIGFzeW5jaW8ucHJvYWN0b3JfZXZlbnRzIGltcG9ydCBCYXNlUHJvYWN0b3JFdmVudExvb3AKK2Zyb20gYXN5bmNpby5wcm9hY3Rvcl9ldmVudHMgaW1wb3J0IF9Qcm9hY3RvclNvY2tldFRyYW5zcG9ydAorZnJvbSBhc3luY2lvLnByb2FjdG9yX2V2ZW50cyBpbXBvcnQgX1Byb2FjdG9yV3JpdGVQaXBlVHJhbnNwb3J0Citmcm9tIGFzeW5jaW8ucHJvYWN0b3JfZXZlbnRzIGltcG9ydCBfUHJvYWN0b3JEdXBsZXhQaXBlVHJhbnNwb3J0Citmcm9tIGFzeW5jaW8gaW1wb3J0IHRlc3RfdXRpbHMKKworCitkZWYgY2xvc2VfdHJhbnNwb3J0KHRyYW5zcG9ydCk6CisgICAgIyBEb24ndCBjYWxsIHRyYW5zcG9ydC5jbG9zZSgpIGJlY2F1c2UgdGhlIGV2ZW50IGxvb3AgYW5kIHRoZSBJT0NQIHByb2FjdG9yCisgICAgIyBhcmUgbW9ja2VkCisgICAgaWYgdHJhbnNwb3J0Ll9zb2NrIGlzIE5vbmU6CisgICAgICAgIHJldHVybgorICAgIHRyYW5zcG9ydC5fc29jay5jbG9zZSgpCisgICAgdHJhbnNwb3J0Ll9zb2NrID0gTm9uZQorCisKK2NsYXNzIFByb2FjdG9yU29ja2V0VHJhbnNwb3J0VGVzdHModGVzdF91dGlscy5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubG9vcCA9IHNlbGYubmV3X3Rlc3RfbG9vcCgpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzZWxmLmxvb3AuY2xvc2UpCisgICAgICAgIHNlbGYucHJvYWN0b3IgPSBtb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuX3Byb2FjdG9yID0gc2VsZi5wcm9hY3RvcgorICAgICAgICBzZWxmLnByb3RvY29sID0gdGVzdF91dGlscy5tYWtlX3Rlc3RfcHJvdG9jb2woYXN5bmNpby5Qcm90b2NvbCkKKyAgICAgICAgc2VsZi5zb2NrID0gbW9jay5Nb2NrKHNvY2tldC5zb2NrZXQpCisKKyAgICBkZWYgc29ja2V0X3RyYW5zcG9ydChzZWxmLCB3YWl0ZXI9Tm9uZSk6CisgICAgICAgIHRyYW5zcG9ydCA9IF9Qcm9hY3RvclNvY2tldFRyYW5zcG9ydChzZWxmLmxvb3AsIHNlbGYuc29jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucHJvdG9jb2wsIHdhaXRlcj13YWl0ZXIpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChjbG9zZV90cmFuc3BvcnQsIHRyYW5zcG9ydCkKKyAgICAgICAgcmV0dXJuIHRyYW5zcG9ydAorCisgICAgZGVmIHRlc3RfY3RvcihzZWxmKToKKyAgICAgICAgZnV0ID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHRyID0gc2VsZi5zb2NrZXRfdHJhbnNwb3J0KHdhaXRlcj1mdXQpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShmdXQucmVzdWx0KCkpCisgICAgICAgIHNlbGYucHJvdG9jb2wuY29ubmVjdGlvbl9tYWRlKHRyKQorICAgICAgICBzZWxmLnByb2FjdG9yLnJlY3YuYXNzZXJ0X2NhbGxlZF93aXRoKHNlbGYuc29jaywgNDA5NikKKworICAgIGRlZiB0ZXN0X2xvb3BfcmVhZGluZyhzZWxmKToKKyAgICAgICAgdHIgPSBzZWxmLnNvY2tldF90cmFuc3BvcnQoKQorICAgICAgICB0ci5fbG9vcF9yZWFkaW5nKCkKKyAgICAgICAgc2VsZi5sb29wLl9wcm9hY3Rvci5yZWN2LmFzc2VydF9jYWxsZWRfd2l0aChzZWxmLnNvY2ssIDQwOTYpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5wcm90b2NvbC5kYXRhX3JlY2VpdmVkLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnByb3RvY29sLmVvZl9yZWNlaXZlZC5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF9sb29wX3JlYWRpbmdfZGF0YShzZWxmKToKKyAgICAgICAgcmVzID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHJlcy5zZXRfcmVzdWx0KGInZGF0YScpCisKKyAgICAgICAgdHIgPSBzZWxmLnNvY2tldF90cmFuc3BvcnQoKQorICAgICAgICB0ci5fcmVhZF9mdXQgPSByZXMKKyAgICAgICAgdHIuX2xvb3BfcmVhZGluZyhyZXMpCisgICAgICAgIHNlbGYubG9vcC5fcHJvYWN0b3IucmVjdi5hc3NlcnRfY2FsbGVkX3dpdGgoc2VsZi5zb2NrLCA0MDk2KQorICAgICAgICBzZWxmLnByb3RvY29sLmRhdGFfcmVjZWl2ZWQuYXNzZXJ0X2NhbGxlZF93aXRoKGInZGF0YScpCisKKyAgICBkZWYgdGVzdF9sb29wX3JlYWRpbmdfbm9fZGF0YShzZWxmKToKKyAgICAgICAgcmVzID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHJlcy5zZXRfcmVzdWx0KGInJykKKworICAgICAgICB0ciA9IHNlbGYuc29ja2V0X3RyYW5zcG9ydCgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yLCB0ci5fbG9vcF9yZWFkaW5nLCByZXMpCisKKyAgICAgICAgdHIuY2xvc2UgPSBtb2NrLk1vY2soKQorICAgICAgICB0ci5fcmVhZF9mdXQgPSByZXMKKyAgICAgICAgdHIuX2xvb3BfcmVhZGluZyhyZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLl9wcm9hY3Rvci5yZWN2LmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYucHJvdG9jb2wuZW9mX3JlY2VpdmVkLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRyLmNsb3NlLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X2xvb3BfcmVhZGluZ19hYm9ydGVkKHNlbGYpOgorICAgICAgICBlcnIgPSBzZWxmLmxvb3AuX3Byb2FjdG9yLnJlY3Yuc2lkZV9lZmZlY3QgPSBDb25uZWN0aW9uQWJvcnRlZEVycm9yKCkKKworICAgICAgICB0ciA9IHNlbGYuc29ja2V0X3RyYW5zcG9ydCgpCisgICAgICAgIHRyLl9mYXRhbF9lcnJvciA9IG1vY2suTW9jaygpCisgICAgICAgIHRyLl9sb29wX3JlYWRpbmcoKQorICAgICAgICB0ci5fZmF0YWxfZXJyb3IuYXNzZXJ0X2NhbGxlZF93aXRoKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRmF0YWwgcmVhZCBlcnJvciBvbiBwaXBlIHRyYW5zcG9ydCcpCisKKyAgICBkZWYgdGVzdF9sb29wX3JlYWRpbmdfYWJvcnRlZF9jbG9zaW5nKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuX3Byb2FjdG9yLnJlY3Yuc2lkZV9lZmZlY3QgPSBDb25uZWN0aW9uQWJvcnRlZEVycm9yKCkKKworICAgICAgICB0ciA9IHNlbGYuc29ja2V0X3RyYW5zcG9ydCgpCisgICAgICAgIHRyLl9jbG9zaW5nID0gVHJ1ZQorICAgICAgICB0ci5fZmF0YWxfZXJyb3IgPSBtb2NrLk1vY2soKQorICAgICAgICB0ci5fbG9vcF9yZWFkaW5nKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0ci5fZmF0YWxfZXJyb3IuY2FsbGVkKQorCisgICAgZGVmIHRlc3RfbG9vcF9yZWFkaW5nX2Fib3J0ZWRfaXNfZmF0YWwoc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5fcHJvYWN0b3IucmVjdi5zaWRlX2VmZmVjdCA9IENvbm5lY3Rpb25BYm9ydGVkRXJyb3IoKQorICAgICAgICB0ciA9IHNlbGYuc29ja2V0X3RyYW5zcG9ydCgpCisgICAgICAgIHRyLl9jbG9zaW5nID0gRmFsc2UKKyAgICAgICAgdHIuX2ZhdGFsX2Vycm9yID0gbW9jay5Nb2NrKCkKKyAgICAgICAgdHIuX2xvb3BfcmVhZGluZygpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ci5fZmF0YWxfZXJyb3IuY2FsbGVkKQorCisgICAgZGVmIHRlc3RfbG9vcF9yZWFkaW5nX2Nvbm5fcmVzZXRfbG9zdChzZWxmKToKKyAgICAgICAgZXJyID0gc2VsZi5sb29wLl9wcm9hY3Rvci5yZWN2LnNpZGVfZWZmZWN0ID0gQ29ubmVjdGlvblJlc2V0RXJyb3IoKQorCisgICAgICAgIHRyID0gc2VsZi5zb2NrZXRfdHJhbnNwb3J0KCkKKyAgICAgICAgdHIuX2Nsb3NpbmcgPSBGYWxzZQorICAgICAgICB0ci5fZmF0YWxfZXJyb3IgPSBtb2NrLk1vY2soKQorICAgICAgICB0ci5fZm9yY2VfY2xvc2UgPSBtb2NrLk1vY2soKQorICAgICAgICB0ci5fbG9vcF9yZWFkaW5nKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0ci5fZmF0YWxfZXJyb3IuY2FsbGVkKQorICAgICAgICB0ci5fZm9yY2VfY2xvc2UuYXNzZXJ0X2NhbGxlZF93aXRoKGVycikKKworICAgIGRlZiB0ZXN0X2xvb3BfcmVhZGluZ19leGNlcHRpb24oc2VsZik6CisgICAgICAgIGVyciA9IHNlbGYubG9vcC5fcHJvYWN0b3IucmVjdi5zaWRlX2VmZmVjdCA9IChPU0Vycm9yKCkpCisKKyAgICAgICAgdHIgPSBzZWxmLnNvY2tldF90cmFuc3BvcnQoKQorICAgICAgICB0ci5fZmF0YWxfZXJyb3IgPSBtb2NrLk1vY2soKQorICAgICAgICB0ci5fbG9vcF9yZWFkaW5nKCkKKyAgICAgICAgdHIuX2ZhdGFsX2Vycm9yLmFzc2VydF9jYWxsZWRfd2l0aCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ZhdGFsIHJlYWQgZXJyb3Igb24gcGlwZSB0cmFuc3BvcnQnKQorCisgICAgZGVmIHRlc3Rfd3JpdGUoc2VsZik6CisgICAgICAgIHRyID0gc2VsZi5zb2NrZXRfdHJhbnNwb3J0KCkKKyAgICAgICAgdHIuX2xvb3Bfd3JpdGluZyA9IG1vY2suTW9jaygpCisgICAgICAgIHRyLndyaXRlKGInZGF0YScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHIuX2J1ZmZlciwgTm9uZSkKKyAgICAgICAgdHIuX2xvb3Bfd3JpdGluZy5hc3NlcnRfY2FsbGVkX3dpdGgoZGF0YT1iJ2RhdGEnKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfbm9fZGF0YShzZWxmKToKKyAgICAgICAgdHIgPSBzZWxmLnNvY2tldF90cmFuc3BvcnQoKQorICAgICAgICB0ci53cml0ZShiJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHIuX2J1ZmZlcikKKworICAgIGRlZiB0ZXN0X3dyaXRlX21vcmUoc2VsZik6CisgICAgICAgIHRyID0gc2VsZi5zb2NrZXRfdHJhbnNwb3J0KCkKKyAgICAgICAgdHIuX3dyaXRlX2Z1dCA9IG1vY2suTW9jaygpCisgICAgICAgIHRyLl9sb29wX3dyaXRpbmcgPSBtb2NrLk1vY2soKQorICAgICAgICB0ci53cml0ZShiJ2RhdGEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyLl9idWZmZXIsIGInZGF0YScpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHIuX2xvb3Bfd3JpdGluZy5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF9sb29wX3dyaXRpbmcoc2VsZik6CisgICAgICAgIHRyID0gc2VsZi5zb2NrZXRfdHJhbnNwb3J0KCkKKyAgICAgICAgdHIuX2J1ZmZlciA9IGJ5dGVhcnJheShiJ2RhdGEnKQorICAgICAgICB0ci5fbG9vcF93cml0aW5nKCkKKyAgICAgICAgc2VsZi5sb29wLl9wcm9hY3Rvci5zZW5kLmFzc2VydF9jYWxsZWRfd2l0aChzZWxmLnNvY2ssIGInZGF0YScpCisgICAgICAgIHNlbGYubG9vcC5fcHJvYWN0b3Iuc2VuZC5yZXR1cm5fdmFsdWUuYWRkX2RvbmVfY2FsbGJhY2suXAorICAgICAgICAgICAgYXNzZXJ0X2NhbGxlZF93aXRoKHRyLl9sb29wX3dyaXRpbmcpCisKKyAgICBAbW9jay5wYXRjaCgnYXN5bmNpby5wcm9hY3Rvcl9ldmVudHMubG9nZ2VyJykKKyAgICBkZWYgdGVzdF9sb29wX3dyaXRpbmdfZXJyKHNlbGYsIG1fbG9nKToKKyAgICAgICAgZXJyID0gc2VsZi5sb29wLl9wcm9hY3Rvci5zZW5kLnNpZGVfZWZmZWN0ID0gT1NFcnJvcigpCisgICAgICAgIHRyID0gc2VsZi5zb2NrZXRfdHJhbnNwb3J0KCkKKyAgICAgICAgdHIuX2ZhdGFsX2Vycm9yID0gbW9jay5Nb2NrKCkKKyAgICAgICAgdHIuX2J1ZmZlciA9IFtiJ2RhJywgYid0YSddCisgICAgICAgIHRyLl9sb29wX3dyaXRpbmcoKQorICAgICAgICB0ci5fZmF0YWxfZXJyb3IuYXNzZXJ0X2NhbGxlZF93aXRoKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRmF0YWwgd3JpdGUgZXJyb3Igb24gcGlwZSB0cmFuc3BvcnQnKQorICAgICAgICB0ci5fY29ubl9sb3N0ID0gMQorCisgICAgICAgIHRyLndyaXRlKGInZGF0YScpCisgICAgICAgIHRyLndyaXRlKGInZGF0YScpCisgICAgICAgIHRyLndyaXRlKGInZGF0YScpCisgICAgICAgIHRyLndyaXRlKGInZGF0YScpCisgICAgICAgIHRyLndyaXRlKGInZGF0YScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHIuX2J1ZmZlciwgTm9uZSkKKyAgICAgICAgbV9sb2cud2FybmluZy5hc3NlcnRfY2FsbGVkX3dpdGgoJ3NvY2tldC5zZW5kKCkgcmFpc2VkIGV4Y2VwdGlvbi4nKQorCisgICAgZGVmIHRlc3RfbG9vcF93cml0aW5nX3N0b3Aoc2VsZik6CisgICAgICAgIGZ1dCA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmdXQuc2V0X3Jlc3VsdChiJ2RhdGEnKQorCisgICAgICAgIHRyID0gc2VsZi5zb2NrZXRfdHJhbnNwb3J0KCkKKyAgICAgICAgdHIuX3dyaXRlX2Z1dCA9IGZ1dAorICAgICAgICB0ci5fbG9vcF93cml0aW5nKGZ1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodHIuX3dyaXRlX2Z1dCkKKworICAgIGRlZiB0ZXN0X2xvb3Bfd3JpdGluZ19jbG9zaW5nKHNlbGYpOgorICAgICAgICBmdXQgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZnV0LnNldF9yZXN1bHQoMSkKKworICAgICAgICB0ciA9IHNlbGYuc29ja2V0X3RyYW5zcG9ydCgpCisgICAgICAgIHRyLl93cml0ZV9mdXQgPSBmdXQKKyAgICAgICAgdHIuY2xvc2UoKQorICAgICAgICB0ci5fbG9vcF93cml0aW5nKGZ1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodHIuX3dyaXRlX2Z1dCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYucHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0LmFzc2VydF9jYWxsZWRfd2l0aChOb25lKQorCisgICAgZGVmIHRlc3RfYWJvcnQoc2VsZik6CisgICAgICAgIHRyID0gc2VsZi5zb2NrZXRfdHJhbnNwb3J0KCkKKyAgICAgICAgdHIuX2ZvcmNlX2Nsb3NlID0gbW9jay5Nb2NrKCkKKyAgICAgICAgdHIuYWJvcnQoKQorICAgICAgICB0ci5fZm9yY2VfY2xvc2UuYXNzZXJ0X2NhbGxlZF93aXRoKE5vbmUpCisKKyAgICBkZWYgdGVzdF9jbG9zZShzZWxmKToKKyAgICAgICAgdHIgPSBzZWxmLnNvY2tldF90cmFuc3BvcnQoKQorICAgICAgICB0ci5jbG9zZSgpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLnByb3RvY29sLmNvbm5lY3Rpb25fbG9zdC5hc3NlcnRfY2FsbGVkX3dpdGgoTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRyLmlzX2Nsb3NpbmcoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ci5fY29ubl9sb3N0LCAxKQorCisgICAgICAgIHNlbGYucHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0LnJlc2V0X21vY2soKQorICAgICAgICB0ci5jbG9zZSgpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYucHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0LmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X2Nsb3NlX3dyaXRlX2Z1dChzZWxmKToKKyAgICAgICAgdHIgPSBzZWxmLnNvY2tldF90cmFuc3BvcnQoKQorICAgICAgICB0ci5fd3JpdGVfZnV0ID0gbW9jay5Nb2NrKCkKKyAgICAgICAgdHIuY2xvc2UoKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnByb3RvY29sLmNvbm5lY3Rpb25fbG9zdC5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF9jbG9zZV9idWZmZXIoc2VsZik6CisgICAgICAgIHRyID0gc2VsZi5zb2NrZXRfdHJhbnNwb3J0KCkKKyAgICAgICAgdHIuX2J1ZmZlciA9IFtiJ2RhdGEnXQorICAgICAgICB0ci5jbG9zZSgpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYucHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0LmNhbGxlZCkKKworICAgIEBtb2NrLnBhdGNoKCdhc3luY2lvLmJhc2VfZXZlbnRzLmxvZ2dlcicpCisgICAgZGVmIHRlc3RfZmF0YWxfZXJyb3Ioc2VsZiwgbV9sb2dnaW5nKToKKyAgICAgICAgdHIgPSBzZWxmLnNvY2tldF90cmFuc3BvcnQoKQorICAgICAgICB0ci5fZm9yY2VfY2xvc2UgPSBtb2NrLk1vY2soKQorICAgICAgICB0ci5fZmF0YWxfZXJyb3IoTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRyLl9mb3JjZV9jbG9zZS5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtX2xvZ2dpbmcuZXJyb3IuY2FsbGVkKQorCisgICAgZGVmIHRlc3RfZm9yY2VfY2xvc2Uoc2VsZik6CisgICAgICAgIHRyID0gc2VsZi5zb2NrZXRfdHJhbnNwb3J0KCkKKyAgICAgICAgdHIuX2J1ZmZlciA9IFtiJ2RhdGEnXQorICAgICAgICByZWFkX2Z1dCA9IHRyLl9yZWFkX2Z1dCA9IG1vY2suTW9jaygpCisgICAgICAgIHdyaXRlX2Z1dCA9IHRyLl93cml0ZV9mdXQgPSBtb2NrLk1vY2soKQorICAgICAgICB0ci5fZm9yY2VfY2xvc2UoTm9uZSkKKworICAgICAgICByZWFkX2Z1dC5jYW5jZWwuYXNzZXJ0X2NhbGxlZF93aXRoKCkKKyAgICAgICAgd3JpdGVfZnV0LmNhbmNlbC5hc3NlcnRfY2FsbGVkX3dpdGgoKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QuYXNzZXJ0X2NhbGxlZF93aXRoKE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgdHIuX2J1ZmZlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ci5fY29ubl9sb3N0LCAxKQorCisgICAgZGVmIHRlc3RfZm9yY2VfY2xvc2VfaWRlbXBvdGVudChzZWxmKToKKyAgICAgICAgdHIgPSBzZWxmLnNvY2tldF90cmFuc3BvcnQoKQorICAgICAgICB0ci5fY2xvc2luZyA9IFRydWUKKyAgICAgICAgdHIuX2ZvcmNlX2Nsb3NlKE5vbmUpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYucHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0LmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X2ZhdGFsX2Vycm9yXzIoc2VsZik6CisgICAgICAgIHRyID0gc2VsZi5zb2NrZXRfdHJhbnNwb3J0KCkKKyAgICAgICAgdHIuX2J1ZmZlciA9IFtiJ2RhdGEnXQorICAgICAgICB0ci5fZm9yY2VfY2xvc2UoTm9uZSkKKworICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QuYXNzZXJ0X2NhbGxlZF93aXRoKE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgdHIuX2J1ZmZlcikKKworICAgIGRlZiB0ZXN0X2NhbGxfY29ubmVjdGlvbl9sb3N0KHNlbGYpOgorICAgICAgICB0ciA9IHNlbGYuc29ja2V0X3RyYW5zcG9ydCgpCisgICAgICAgIHRyLl9jYWxsX2Nvbm5lY3Rpb25fbG9zdChOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5zb2NrLmNsb3NlLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X3dyaXRlX2VvZihzZWxmKToKKyAgICAgICAgdHIgPSBzZWxmLnNvY2tldF90cmFuc3BvcnQoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHIuY2FuX3dyaXRlX2VvZigpKQorICAgICAgICB0ci53cml0ZV9lb2YoKQorICAgICAgICBzZWxmLnNvY2suc2h1dGRvd24uYXNzZXJ0X2NhbGxlZF93aXRoKHNvY2tldC5TSFVUX1dSKQorICAgICAgICB0ci53cml0ZV9lb2YoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc29jay5zaHV0ZG93bi5jYWxsX2NvdW50LCAxKQorICAgICAgICB0ci5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF93cml0ZV9lb2ZfYnVmZmVyKHNlbGYpOgorICAgICAgICB0ciA9IHNlbGYuc29ja2V0X3RyYW5zcG9ydCgpCisgICAgICAgIGYgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdHIuX2xvb3AuX3Byb2FjdG9yLnNlbmQucmV0dXJuX3ZhbHVlID0gZgorICAgICAgICB0ci53cml0ZShiJ2RhdGEnKQorICAgICAgICB0ci53cml0ZV9lb2YoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHIuX2VvZl93cml0dGVuKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuc29jay5zaHV0ZG93bi5jYWxsZWQpCisgICAgICAgIHRyLl9sb29wLl9wcm9hY3Rvci5zZW5kLmFzc2VydF9jYWxsZWRfd2l0aChzZWxmLnNvY2ssIGInZGF0YScpCisgICAgICAgIGYuc2V0X3Jlc3VsdCg0KQorICAgICAgICBzZWxmLmxvb3AuX3J1bl9vbmNlKCkKKyAgICAgICAgc2VsZi5zb2NrLnNodXRkb3duLmFzc2VydF9jYWxsZWRfd2l0aChzb2NrZXQuU0hVVF9XUikKKyAgICAgICAgdHIuY2xvc2UoKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfZW9mX3dyaXRlX3BpcGUoc2VsZik6CisgICAgICAgIHRyID0gX1Byb2FjdG9yV3JpdGVQaXBlVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ci5jYW5fd3JpdGVfZW9mKCkpCisgICAgICAgIHRyLndyaXRlX2VvZigpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ci5pc19jbG9zaW5nKCkpCisgICAgICAgIHNlbGYubG9vcC5fcnVuX29uY2UoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5zb2NrLmNsb3NlLmNhbGxlZCkKKyAgICAgICAgdHIuY2xvc2UoKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfZW9mX2J1ZmZlcl93cml0ZV9waXBlKHNlbGYpOgorICAgICAgICB0ciA9IF9Qcm9hY3RvcldyaXRlUGlwZVRyYW5zcG9ydChzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgZiA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0ci5fbG9vcC5fcHJvYWN0b3Iuc2VuZC5yZXR1cm5fdmFsdWUgPSBmCisgICAgICAgIHRyLndyaXRlKGInZGF0YScpCisgICAgICAgIHRyLndyaXRlX2VvZigpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ci5pc19jbG9zaW5nKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5zb2NrLnNodXRkb3duLmNhbGxlZCkKKyAgICAgICAgdHIuX2xvb3AuX3Byb2FjdG9yLnNlbmQuYXNzZXJ0X2NhbGxlZF93aXRoKHNlbGYuc29jaywgYidkYXRhJykKKyAgICAgICAgZi5zZXRfcmVzdWx0KDQpCisgICAgICAgIHNlbGYubG9vcC5fcnVuX29uY2UoKQorICAgICAgICBzZWxmLmxvb3AuX3J1bl9vbmNlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuc29jay5jbG9zZS5jYWxsZWQpCisgICAgICAgIHRyLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X3dyaXRlX2VvZl9kdXBsZXhfcGlwZShzZWxmKToKKyAgICAgICAgdHIgPSBfUHJvYWN0b3JEdXBsZXhQaXBlVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHIuY2FuX3dyaXRlX2VvZigpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IpOgorICAgICAgICAgICAgdHIud3JpdGVfZW9mKCkKKyAgICAgICAgY2xvc2VfdHJhbnNwb3J0KHRyKQorCisgICAgZGVmIHRlc3RfcGF1c2VfcmVzdW1lX3JlYWRpbmcoc2VsZik6CisgICAgICAgIHRyID0gc2VsZi5zb2NrZXRfdHJhbnNwb3J0KCkKKyAgICAgICAgZnV0dXJlcyA9IFtdCisgICAgICAgIGZvciBtc2cgaW4gW2InZGF0YTEnLCBiJ2RhdGEyJywgYidkYXRhMycsIGInZGF0YTQnLCBiJyddOgorICAgICAgICAgICAgZiA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICAgICAgZi5zZXRfcmVzdWx0KG1zZykKKyAgICAgICAgICAgIGZ1dHVyZXMuYXBwZW5kKGYpCisgICAgICAgIHNlbGYubG9vcC5fcHJvYWN0b3IucmVjdi5zaWRlX2VmZmVjdCA9IGZ1dHVyZXMKKyAgICAgICAgc2VsZi5sb29wLl9ydW5fb25jZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHIuX3BhdXNlZCkKKyAgICAgICAgc2VsZi5sb29wLl9ydW5fb25jZSgpCisgICAgICAgIHNlbGYucHJvdG9jb2wuZGF0YV9yZWNlaXZlZC5hc3NlcnRfY2FsbGVkX3dpdGgoYidkYXRhMScpCisgICAgICAgIHNlbGYubG9vcC5fcnVuX29uY2UoKQorICAgICAgICBzZWxmLnByb3RvY29sLmRhdGFfcmVjZWl2ZWQuYXNzZXJ0X2NhbGxlZF93aXRoKGInZGF0YTInKQorICAgICAgICB0ci5wYXVzZV9yZWFkaW5nKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRyLl9wYXVzZWQpCisgICAgICAgIGZvciBpIGluIHJhbmdlKDEwKToKKyAgICAgICAgICAgIHNlbGYubG9vcC5fcnVuX29uY2UoKQorICAgICAgICBzZWxmLnByb3RvY29sLmRhdGFfcmVjZWl2ZWQuYXNzZXJ0X2NhbGxlZF93aXRoKGInZGF0YTInKQorICAgICAgICB0ci5yZXN1bWVfcmVhZGluZygpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHIuX3BhdXNlZCkKKyAgICAgICAgc2VsZi5sb29wLl9ydW5fb25jZSgpCisgICAgICAgIHNlbGYucHJvdG9jb2wuZGF0YV9yZWNlaXZlZC5hc3NlcnRfY2FsbGVkX3dpdGgoYidkYXRhMycpCisgICAgICAgIHNlbGYubG9vcC5fcnVuX29uY2UoKQorICAgICAgICBzZWxmLnByb3RvY29sLmRhdGFfcmVjZWl2ZWQuYXNzZXJ0X2NhbGxlZF93aXRoKGInZGF0YTQnKQorICAgICAgICB0ci5jbG9zZSgpCisKKworICAgIGRlZiBwYXVzZV93cml0aW5nX3RyYW5zcG9ydChzZWxmLCBoaWdoKToKKyAgICAgICAgdHIgPSBzZWxmLnNvY2tldF90cmFuc3BvcnQoKQorICAgICAgICB0ci5zZXRfd3JpdGVfYnVmZmVyX2xpbWl0cyhoaWdoPWhpZ2gpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ci5nZXRfd3JpdGVfYnVmZmVyX3NpemUoKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnByb3RvY29sLnBhdXNlX3dyaXRpbmcuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYucHJvdG9jb2wucmVzdW1lX3dyaXRpbmcuY2FsbGVkKQorICAgICAgICByZXR1cm4gdHIKKworICAgIGRlZiB0ZXN0X3BhdXNlX3Jlc3VtZV93cml0aW5nKHNlbGYpOgorICAgICAgICB0ciA9IHNlbGYucGF1c2Vfd3JpdGluZ190cmFuc3BvcnQoaGlnaD00KQorCisgICAgICAgICMgd3JpdGUgYSBsYXJnZSBjaHVuaywgbXVzdCBwYXVzZSB3cml0aW5nCisgICAgICAgIGZ1dCA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmxvb3AuX3Byb2FjdG9yLnNlbmQucmV0dXJuX3ZhbHVlID0gZnV0CisgICAgICAgIHRyLndyaXRlKGInbGFyZ2UgZGF0YScpCisgICAgICAgIHNlbGYubG9vcC5fcnVuX29uY2UoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5wcm90b2NvbC5wYXVzZV93cml0aW5nLmNhbGxlZCkKKworICAgICAgICAjIGZsdXNoIHRoZSBidWZmZXIKKyAgICAgICAgZnV0LnNldF9yZXN1bHQoTm9uZSkKKyAgICAgICAgc2VsZi5sb29wLl9ydW5fb25jZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHIuZ2V0X3dyaXRlX2J1ZmZlcl9zaXplKCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnByb3RvY29sLnJlc3VtZV93cml0aW5nLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X3BhdXNlX3dyaXRpbmdfMndyaXRlKHNlbGYpOgorICAgICAgICB0ciA9IHNlbGYucGF1c2Vfd3JpdGluZ190cmFuc3BvcnQoaGlnaD00KQorCisgICAgICAgICMgZmlyc3Qgc2hvcnQgd3JpdGUsIHRoZSBidWZmZXIgaXMgbm90IGZ1bGwgKDMgPD0gNCkKKyAgICAgICAgZnV0MSA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmxvb3AuX3Byb2FjdG9yLnNlbmQucmV0dXJuX3ZhbHVlID0gZnV0MQorICAgICAgICB0ci53cml0ZShiJzEyMycpCisgICAgICAgIHNlbGYubG9vcC5fcnVuX29uY2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyLmdldF93cml0ZV9idWZmZXJfc2l6ZSgpLCAzKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYucHJvdG9jb2wucGF1c2Vfd3JpdGluZy5jYWxsZWQpCisKKyAgICAgICAgIyBmaWxsIHRoZSBidWZmZXIsIG11c3QgcGF1c2Ugd3JpdGluZyAoNiA+IDQpCisgICAgICAgIHRyLndyaXRlKGInYWJjJykKKyAgICAgICAgc2VsZi5sb29wLl9ydW5fb25jZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHIuZ2V0X3dyaXRlX2J1ZmZlcl9zaXplKCksIDYpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnByb3RvY29sLnBhdXNlX3dyaXRpbmcuY2FsbGVkKQorCisgICAgZGVmIHRlc3RfcGF1c2Vfd3JpdGluZ18zd3JpdGUoc2VsZik6CisgICAgICAgIHRyID0gc2VsZi5wYXVzZV93cml0aW5nX3RyYW5zcG9ydChoaWdoPTQpCisKKyAgICAgICAgIyBmaXJzdCBzaG9ydCB3cml0ZSwgdGhlIGJ1ZmZlciBpcyBub3QgZnVsbCAoMSA8PSA0KQorICAgICAgICBmdXQgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5sb29wLl9wcm9hY3Rvci5zZW5kLnJldHVybl92YWx1ZSA9IGZ1dAorICAgICAgICB0ci53cml0ZShiJzEnKQorICAgICAgICBzZWxmLmxvb3AuX3J1bl9vbmNlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ci5nZXRfd3JpdGVfYnVmZmVyX3NpemUoKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnByb3RvY29sLnBhdXNlX3dyaXRpbmcuY2FsbGVkKQorCisgICAgICAgICMgc2Vjb25kIHNob3J0IHdyaXRlLCB0aGUgYnVmZmVyIGlzIG5vdCBmdWxsICgzIDw9IDQpCisgICAgICAgIHRyLndyaXRlKGInMjMnKQorICAgICAgICBzZWxmLmxvb3AuX3J1bl9vbmNlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ci5nZXRfd3JpdGVfYnVmZmVyX3NpemUoKSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnByb3RvY29sLnBhdXNlX3dyaXRpbmcuY2FsbGVkKQorCisgICAgICAgICMgZmlsbCB0aGUgYnVmZmVyLCBtdXN0IHBhdXNlIHdyaXRpbmcgKDYgPiA0KQorICAgICAgICB0ci53cml0ZShiJ2FiYycpCisgICAgICAgIHNlbGYubG9vcC5fcnVuX29uY2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyLmdldF93cml0ZV9idWZmZXJfc2l6ZSgpLCA2KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5wcm90b2NvbC5wYXVzZV93cml0aW5nLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X2RvbnRfcGF1c2Vfd3JpdGluZyhzZWxmKToKKyAgICAgICAgdHIgPSBzZWxmLnBhdXNlX3dyaXRpbmdfdHJhbnNwb3J0KGhpZ2g9NCkKKworICAgICAgICAjIHdyaXRlIGEgbGFyZ2UgY2h1bmsgd2hpY2ggY29tcGxldGVzIGltbWVkaWFsdHksCisgICAgICAgICMgaXQgc2hvdWxkIG5vdCBwYXVzZSB3cml0aW5nCisgICAgICAgIGZ1dCA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmdXQuc2V0X3Jlc3VsdChOb25lKQorICAgICAgICBzZWxmLmxvb3AuX3Byb2FjdG9yLnNlbmQucmV0dXJuX3ZhbHVlID0gZnV0CisgICAgICAgIHRyLndyaXRlKGIndmVyeSBsYXJnZSBkYXRhJykKKyAgICAgICAgc2VsZi5sb29wLl9ydW5fb25jZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHIuZ2V0X3dyaXRlX2J1ZmZlcl9zaXplKCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5wcm90b2NvbC5wYXVzZV93cml0aW5nLmNhbGxlZCkKKworCitjbGFzcyBCYXNlUHJvYWN0b3JFdmVudExvb3BUZXN0cyh0ZXN0X3V0aWxzLlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5zb2NrID0gdGVzdF91dGlscy5tb2NrX25vbmJsb2NraW5nX3NvY2tldCgpCisgICAgICAgIHNlbGYucHJvYWN0b3IgPSBtb2NrLk1vY2soKQorCisgICAgICAgIHNlbGYuc3NvY2ssIHNlbGYuY3NvY2sgPSBtb2NrLk1vY2soKSwgbW9jay5Nb2NrKCkKKworICAgICAgICBjbGFzcyBFdmVudExvb3AoQmFzZVByb2FjdG9yRXZlbnRMb29wKToKKyAgICAgICAgICAgIGRlZiBfc29ja2V0cGFpcihzKToKKyAgICAgICAgICAgICAgICByZXR1cm4gKHNlbGYuc3NvY2ssIHNlbGYuY3NvY2spCisKKyAgICAgICAgc2VsZi5sb29wID0gRXZlbnRMb29wKHNlbGYucHJvYWN0b3IpCisgICAgICAgIHNlbGYuc2V0X2V2ZW50X2xvb3Aoc2VsZi5sb29wKQorCisgICAgQG1vY2sucGF0Y2gub2JqZWN0KEJhc2VQcm9hY3RvckV2ZW50TG9vcCwgJ2NhbGxfc29vbicpCisgICAgQG1vY2sucGF0Y2gub2JqZWN0KEJhc2VQcm9hY3RvckV2ZW50TG9vcCwgJ19zb2NrZXRwYWlyJykKKyAgICBkZWYgdGVzdF9jdG9yKHNlbGYsIHNvY2tldHBhaXIsIGNhbGxfc29vbik6CisgICAgICAgIHNzb2NrLCBjc29jayA9IHNvY2tldHBhaXIucmV0dXJuX3ZhbHVlID0gKAorICAgICAgICAgICAgbW9jay5Nb2NrKCksIG1vY2suTW9jaygpKQorICAgICAgICBsb29wID0gQmFzZVByb2FjdG9yRXZlbnRMb29wKHNlbGYucHJvYWN0b3IpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobG9vcC5fc3NvY2ssIHNzb2NrKQorICAgICAgICBzZWxmLmFzc2VydElzKGxvb3AuX2Nzb2NrLCBjc29jaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb29wLl9pbnRlcm5hbF9mZHMsIDEpCisgICAgICAgIGNhbGxfc29vbi5hc3NlcnRfY2FsbGVkX3dpdGgobG9vcC5fbG9vcF9zZWxmX3JlYWRpbmcpCisgICAgICAgIGxvb3AuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfY2xvc2Vfc2VsZl9waXBlKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuX2Nsb3NlX3NlbGZfcGlwZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb29wLl9pbnRlcm5hbF9mZHMsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnNzb2NrLmNsb3NlLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuY3NvY2suY2xvc2UuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzZWxmLmxvb3AuX3Nzb2NrKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzZWxmLmxvb3AuX2Nzb2NrKQorCisgICAgICAgICMgRG9uJ3QgY2FsbCBjbG9zZSgpOiBfY2xvc2Vfc2VsZl9waXBlKCkgY2Fubm90IGJlIGNhbGxlZCB0d2ljZQorICAgICAgICBzZWxmLmxvb3AuX2Nsb3NlZCA9IFRydWUKKworICAgIGRlZiB0ZXN0X2Nsb3NlKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuX2Nsb3NlX3NlbGZfcGlwZSA9IG1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmxvb3AuX2Nsb3NlX3NlbGZfcGlwZS5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnByb2FjdG9yLmNsb3NlLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc2VsZi5sb29wLl9wcm9hY3RvcikKKworICAgICAgICBzZWxmLmxvb3AuX2Nsb3NlX3NlbGZfcGlwZS5yZXNldF9tb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3AuX2Nsb3NlX3NlbGZfcGlwZS5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF9zb2NrX3JlY3Yoc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5zb2NrX3JlY3Yoc2VsZi5zb2NrLCAxMDI0KQorICAgICAgICBzZWxmLnByb2FjdG9yLnJlY3YuYXNzZXJ0X2NhbGxlZF93aXRoKHNlbGYuc29jaywgMTAyNCkKKworICAgIGRlZiB0ZXN0X3NvY2tfc2VuZGFsbChzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLnNvY2tfc2VuZGFsbChzZWxmLnNvY2ssIGInZGF0YScpCisgICAgICAgIHNlbGYucHJvYWN0b3Iuc2VuZC5hc3NlcnRfY2FsbGVkX3dpdGgoc2VsZi5zb2NrLCBiJ2RhdGEnKQorCisgICAgZGVmIHRlc3Rfc29ja19jb25uZWN0KHNlbGYpOgorICAgICAgICBzZWxmLmxvb3Auc29ja19jb25uZWN0KHNlbGYuc29jaywgKCcxLjIuMy40JywgMTIzKSkKKyAgICAgICAgc2VsZi5wcm9hY3Rvci5jb25uZWN0LmFzc2VydF9jYWxsZWRfd2l0aChzZWxmLnNvY2ssICgnMS4yLjMuNCcsIDEyMykpCisKKyAgICBkZWYgdGVzdF9zb2NrX2FjY2VwdChzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLnNvY2tfYWNjZXB0KHNlbGYuc29jaykKKyAgICAgICAgc2VsZi5wcm9hY3Rvci5hY2NlcHQuYXNzZXJ0X2NhbGxlZF93aXRoKHNlbGYuc29jaykKKworICAgIGRlZiB0ZXN0X3NvY2tldHBhaXIoc2VsZik6CisgICAgICAgIGNsYXNzIEV2ZW50TG9vcChCYXNlUHJvYWN0b3JFdmVudExvb3ApOgorICAgICAgICAgICAgIyBvdmVycmlkZSB0aGUgZGVzdHJ1Y3RvciB0byBub3QgbG9nIGEgUmVzb3VyY2VXYXJuaW5nCisgICAgICAgICAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgRXZlbnRMb29wLCBzZWxmLnByb2FjdG9yKQorCisgICAgZGVmIHRlc3RfbWFrZV9zb2NrZXRfdHJhbnNwb3J0KHNlbGYpOgorICAgICAgICB0ciA9IHNlbGYubG9vcC5fbWFrZV9zb2NrZXRfdHJhbnNwb3J0KHNlbGYuc29jaywgYXN5bmNpby5Qcm90b2NvbCgpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodHIsIF9Qcm9hY3RvclNvY2tldFRyYW5zcG9ydCkKKyAgICAgICAgY2xvc2VfdHJhbnNwb3J0KHRyKQorCisgICAgZGVmIHRlc3RfbG9vcF9zZWxmX3JlYWRpbmcoc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5fbG9vcF9zZWxmX3JlYWRpbmcoKQorICAgICAgICBzZWxmLnByb2FjdG9yLnJlY3YuYXNzZXJ0X2NhbGxlZF93aXRoKHNlbGYuc3NvY2ssIDQwOTYpCisgICAgICAgIHNlbGYucHJvYWN0b3IucmVjdi5yZXR1cm5fdmFsdWUuYWRkX2RvbmVfY2FsbGJhY2suYXNzZXJ0X2NhbGxlZF93aXRoKAorICAgICAgICAgICAgc2VsZi5sb29wLl9sb29wX3NlbGZfcmVhZGluZykKKworICAgIGRlZiB0ZXN0X2xvb3Bfc2VsZl9yZWFkaW5nX2Z1dChzZWxmKToKKyAgICAgICAgZnV0ID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLl9sb29wX3NlbGZfcmVhZGluZyhmdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmdXQucmVzdWx0LmNhbGxlZCkKKyAgICAgICAgc2VsZi5wcm9hY3Rvci5yZWN2LmFzc2VydF9jYWxsZWRfd2l0aChzZWxmLnNzb2NrLCA0MDk2KQorICAgICAgICBzZWxmLnByb2FjdG9yLnJlY3YucmV0dXJuX3ZhbHVlLmFkZF9kb25lX2NhbGxiYWNrLmFzc2VydF9jYWxsZWRfd2l0aCgKKyAgICAgICAgICAgIHNlbGYubG9vcC5fbG9vcF9zZWxmX3JlYWRpbmcpCisKKyAgICBkZWYgdGVzdF9sb29wX3NlbGZfcmVhZGluZ19leGNlcHRpb24oc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5jbG9zZSA9IG1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5jYWxsX2V4Y2VwdGlvbl9oYW5kbGVyID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5wcm9hY3Rvci5yZWN2LnNpZGVfZWZmZWN0ID0gT1NFcnJvcigpCisgICAgICAgIHNlbGYubG9vcC5fbG9vcF9zZWxmX3JlYWRpbmcoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5sb29wLmNhbGxfZXhjZXB0aW9uX2hhbmRsZXIuY2FsbGVkKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfdG9fc2VsZihzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLl93cml0ZV90b19zZWxmKCkKKyAgICAgICAgc2VsZi5jc29jay5zZW5kLmFzc2VydF9jYWxsZWRfd2l0aChiJ1wwJykKKworICAgIGRlZiB0ZXN0X3Byb2Nlc3NfZXZlbnRzKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuX3Byb2Nlc3NfZXZlbnRzKFtdKQorCisgICAgQG1vY2sucGF0Y2goJ2FzeW5jaW8uYmFzZV9ldmVudHMubG9nZ2VyJykKKyAgICBkZWYgdGVzdF9jcmVhdGVfc2VydmVyKHNlbGYsIG1fbG9nKToKKyAgICAgICAgcGYgPSBtb2NrLk1vY2soKQorICAgICAgICBjYWxsX3Nvb24gPSBzZWxmLmxvb3AuY2FsbF9zb29uID0gbW9jay5Nb2NrKCkKKworICAgICAgICBzZWxmLmxvb3AuX3N0YXJ0X3NlcnZpbmcocGYsIHNlbGYuc29jaykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNhbGxfc29vbi5jYWxsZWQpCisKKyAgICAgICAgIyBjYWxsYmFjaworICAgICAgICBsb29wID0gY2FsbF9zb29uLmNhbGxfYXJnc1swXVswXQorICAgICAgICBsb29wKCkKKyAgICAgICAgc2VsZi5wcm9hY3Rvci5hY2NlcHQuYXNzZXJ0X2NhbGxlZF93aXRoKHNlbGYuc29jaykKKworICAgICAgICAjIGNvbm4KKyAgICAgICAgZnV0ID0gbW9jay5Nb2NrKCkKKyAgICAgICAgZnV0LnJlc3VsdC5yZXR1cm5fdmFsdWUgPSAobW9jay5Nb2NrKCksIG1vY2suTW9jaygpKQorCisgICAgICAgIG1ha2VfdHIgPSBzZWxmLmxvb3AuX21ha2Vfc29ja2V0X3RyYW5zcG9ydCA9IG1vY2suTW9jaygpCisgICAgICAgIGxvb3AoZnV0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZnV0LnJlc3VsdC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYWtlX3RyLmNhbGxlZCkKKworICAgICAgICAjIGV4Y2VwdGlvbgorICAgICAgICBmdXQucmVzdWx0LnNpZGVfZWZmZWN0ID0gT1NFcnJvcigpCisgICAgICAgIGxvb3AoZnV0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5zb2NrLmNsb3NlLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1fbG9nLmVycm9yLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9zZXJ2ZXJfY2FuY2VsKHNlbGYpOgorICAgICAgICBwZiA9IG1vY2suTW9jaygpCisgICAgICAgIGNhbGxfc29vbiA9IHNlbGYubG9vcC5jYWxsX3Nvb24gPSBtb2NrLk1vY2soKQorCisgICAgICAgIHNlbGYubG9vcC5fc3RhcnRfc2VydmluZyhwZiwgc2VsZi5zb2NrKQorICAgICAgICBsb29wID0gY2FsbF9zb29uLmNhbGxfYXJnc1swXVswXQorCisgICAgICAgICMgY2FuY2VsbGVkCisgICAgICAgIGZ1dCA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmdXQuY2FuY2VsKCkKKyAgICAgICAgbG9vcChmdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnNvY2suY2xvc2UuY2FsbGVkKQorCisgICAgZGVmIHRlc3Rfc3RvcF9zZXJ2aW5nKHNlbGYpOgorICAgICAgICBzb2NrID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLl9zdG9wX3NlcnZpbmcoc29jaykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNvY2suY2xvc2UuY2FsbGVkKQorICAgICAgICBzZWxmLnByb2FjdG9yLl9zdG9wX3NlcnZpbmcuYXNzZXJ0X2NhbGxlZF93aXRoKHNvY2spCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X3F1ZXVlcy5weSBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X3F1ZXVlcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTFhOWJiCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3RfcXVldWVzLnB5CkBAIC0wLDAgKzEsNjI1IEBACisiIiJUZXN0cyBmb3IgcXVldWVzLnB5IiIiCisKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB1bml0dGVzdCBpbXBvcnQgbW9jaworCitpbXBvcnQgYXN5bmNpbworZnJvbSBhc3luY2lvIGltcG9ydCB0ZXN0X3V0aWxzCisKKworY2xhc3MgX1F1ZXVlVGVzdEJhc2UodGVzdF91dGlscy5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubG9vcCA9IHNlbGYubmV3X3Rlc3RfbG9vcCgpCisKKworY2xhc3MgUXVldWVCYXNpY1Rlc3RzKF9RdWV1ZVRlc3RCYXNlKToKKworICAgIGRlZiBfdGVzdF9yZXByX29yX3N0cihzZWxmLCBmbiwgZXhwZWN0X2lkKToKKyAgICAgICAgIiIiVGVzdCBRdWV1ZSdzIHJlcHIgb3Igc3RyLgorCisgICAgICAgIGZuIGlzIHJlcHIgb3Igc3RyLiBleHBlY3RfaWQgaXMgVHJ1ZSBpZiB3ZSBleHBlY3QgdGhlIFF1ZXVlJ3MgaWQgdG8KKyAgICAgICAgYXBwZWFyIGluIGZuKFF1ZXVlKCkpLgorICAgICAgICAiIiIKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgd2hlbiA9IHlpZWxkCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMSwgd2hlbikKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZCAwLjEKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4yLCB3aGVuKQorICAgICAgICAgICAgeWllbGQgMC4xCisKKyAgICAgICAgbG9vcCA9IHNlbGYubmV3X3Rlc3RfbG9vcChnZW4pCisKKyAgICAgICAgcSA9IGFzeW5jaW8uUXVldWUobG9vcD1sb29wKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZm4ocSkuc3RhcnRzd2l0aCgnPFF1ZXVlJyksIGZuKHEpKQorICAgICAgICBpZF9pc19wcmVzZW50ID0gaGV4KGlkKHEpKSBpbiBmbihxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdF9pZCwgaWRfaXNfcHJlc2VudCkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGFkZF9nZXR0ZXIoKToKKyAgICAgICAgICAgIHEgPSBhc3luY2lvLlF1ZXVlKGxvb3A9bG9vcCkKKyAgICAgICAgICAgICMgU3RhcnQgYSB0YXNrIHRoYXQgd2FpdHMgdG8gZ2V0LgorICAgICAgICAgICAgYXN5bmNpby5UYXNrKHEuZ2V0KCksIGxvb3A9bG9vcCkKKyAgICAgICAgICAgICMgTGV0IGl0IHN0YXJ0IHdhaXRpbmcuCisgICAgICAgICAgICB5aWVsZCBmcm9tIGFzeW5jaW8uc2xlZXAoMC4xLCBsb29wPWxvb3ApCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoJ19nZXR0ZXJzWzFdJyBpbiBmbihxKSkKKyAgICAgICAgICAgICMgcmVzdW1lIHEuZ2V0IGNvcm91dGluZSB0byBmaW5pc2ggZ2VuZXJhdG9yCisgICAgICAgICAgICBxLnB1dF9ub3dhaXQoMCkKKworICAgICAgICBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZShhZGRfZ2V0dGVyKCkpCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBhZGRfcHV0dGVyKCk6CisgICAgICAgICAgICBxID0gYXN5bmNpby5RdWV1ZShtYXhzaXplPTEsIGxvb3A9bG9vcCkKKyAgICAgICAgICAgIHEucHV0X25vd2FpdCgxKQorICAgICAgICAgICAgIyBTdGFydCBhIHRhc2sgdGhhdCB3YWl0cyB0byBwdXQuCisgICAgICAgICAgICBhc3luY2lvLlRhc2socS5wdXQoMiksIGxvb3A9bG9vcCkKKyAgICAgICAgICAgICMgTGV0IGl0IHN0YXJ0IHdhaXRpbmcuCisgICAgICAgICAgICB5aWVsZCBmcm9tIGFzeW5jaW8uc2xlZXAoMC4xLCBsb29wPWxvb3ApCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoJ19wdXR0ZXJzWzFdJyBpbiBmbihxKSkKKyAgICAgICAgICAgICMgcmVzdW1lIHEucHV0IGNvcm91dGluZSB0byBmaW5pc2ggZ2VuZXJhdG9yCisgICAgICAgICAgICBxLmdldF9ub3dhaXQoKQorCisgICAgICAgIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGFkZF9wdXR0ZXIoKSkKKworICAgICAgICBxID0gYXN5bmNpby5RdWV1ZShsb29wPWxvb3ApCisgICAgICAgIHEucHV0X25vd2FpdCgxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ19xdWV1ZT1bMV0nIGluIGZuKHEpKQorCisgICAgZGVmIHRlc3RfY3Rvcl9sb29wKHNlbGYpOgorICAgICAgICBsb29wID0gbW9jay5Nb2NrKCkKKyAgICAgICAgcSA9IGFzeW5jaW8uUXVldWUobG9vcD1sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzKHEuX2xvb3AsIGxvb3ApCisKKyAgICAgICAgcSA9IGFzeW5jaW8uUXVldWUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocS5fbG9vcCwgc2VsZi5sb29wKQorCisgICAgZGVmIHRlc3RfY3Rvcl9ub2xvb3Aoc2VsZik6CisgICAgICAgIGFzeW5jaW8uc2V0X2V2ZW50X2xvb3Aoc2VsZi5sb29wKQorICAgICAgICBxID0gYXN5bmNpby5RdWV1ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocS5fbG9vcCwgc2VsZi5sb29wKQorCisgICAgZGVmIHRlc3RfcmVwcihzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9yZXByX29yX3N0cihyZXByLCBUcnVlKQorCisgICAgZGVmIHRlc3Rfc3RyKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X3JlcHJfb3Jfc3RyKHN0ciwgRmFsc2UpCisKKyAgICBkZWYgdGVzdF9lbXB0eShzZWxmKToKKyAgICAgICAgcSA9IGFzeW5jaW8uUXVldWUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShxLmVtcHR5KCkpCisgICAgICAgIHEucHV0X25vd2FpdCgxKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHEuZW1wdHkoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBxLmdldF9ub3dhaXQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHEuZW1wdHkoKSkKKworICAgIGRlZiB0ZXN0X2Z1bGwoc2VsZik6CisgICAgICAgIHEgPSBhc3luY2lvLlF1ZXVlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHEuZnVsbCgpKQorCisgICAgICAgIHEgPSBhc3luY2lvLlF1ZXVlKG1heHNpemU9MSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHEucHV0X25vd2FpdCgxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocS5mdWxsKCkpCisKKyAgICBkZWYgdGVzdF9vcmRlcihzZWxmKToKKyAgICAgICAgcSA9IGFzeW5jaW8uUXVldWUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGZvciBpIGluIFsxLCAzLCAyXToKKyAgICAgICAgICAgIHEucHV0X25vd2FpdChpKQorCisgICAgICAgIGl0ZW1zID0gW3EuZ2V0X25vd2FpdCgpIGZvciBfIGluIHJhbmdlKDMpXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsxLCAzLCAyXSwgaXRlbXMpCisKKyAgICBkZWYgdGVzdF9tYXhzaXplKHNlbGYpOgorCisgICAgICAgIGRlZiBnZW4oKToKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZAorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjAxLCB3aGVuKQorICAgICAgICAgICAgd2hlbiA9IHlpZWxkIDAuMDEKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4wMiwgd2hlbikKKyAgICAgICAgICAgIHlpZWxkIDAuMDEKKworICAgICAgICBsb29wID0gc2VsZi5uZXdfdGVzdF9sb29wKGdlbikKKworICAgICAgICBxID0gYXN5bmNpby5RdWV1ZShtYXhzaXplPTIsIGxvb3A9bG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBxLm1heHNpemUpCisgICAgICAgIGhhdmVfYmVlbl9wdXQgPSBbXQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgcHV0dGVyKCk6CisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgzKToKKyAgICAgICAgICAgICAgICB5aWVsZCBmcm9tIHEucHV0KGkpCisgICAgICAgICAgICAgICAgaGF2ZV9iZWVuX3B1dC5hcHBlbmQoaSkKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiB0ZXN0KCk6CisgICAgICAgICAgICB0ID0gYXN5bmNpby5UYXNrKHB1dHRlcigpLCBsb29wPWxvb3ApCisgICAgICAgICAgICB5aWVsZCBmcm9tIGFzeW5jaW8uc2xlZXAoMC4wMSwgbG9vcD1sb29wKQorCisgICAgICAgICAgICAjIFRoZSBwdXR0ZXIgaXMgYmxvY2tlZCBhZnRlciBwdXR0aW5nIHR3byBpdGVtcy4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWzAsIDFdLCBoYXZlX2JlZW5fcHV0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBxLmdldF9ub3dhaXQoKSkKKworICAgICAgICAgICAgIyBMZXQgdGhlIHB1dHRlciByZXN1bWUgYW5kIHB1dCBsYXN0IGl0ZW0uCisgICAgICAgICAgICB5aWVsZCBmcm9tIGFzeW5jaW8uc2xlZXAoMC4wMSwgbG9vcD1sb29wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbMCwgMSwgMl0sIGhhdmVfYmVlbl9wdXQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHEuZ2V0X25vd2FpdCgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBxLmdldF9ub3dhaXQoKSkKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQuZG9uZSgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQucmVzdWx0KCkpCisKKyAgICAgICAgbG9vcC5ydW5fdW50aWxfY29tcGxldGUodGVzdCgpKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMDIsIGxvb3AudGltZSgpKQorCisKK2NsYXNzIFF1ZXVlR2V0VGVzdHMoX1F1ZXVlVGVzdEJhc2UpOgorCisgICAgZGVmIHRlc3RfYmxvY2tpbmdfZ2V0KHNlbGYpOgorICAgICAgICBxID0gYXN5bmNpby5RdWV1ZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgcS5wdXRfbm93YWl0KDEpCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBxdWV1ZV9nZXQoKToKKyAgICAgICAgICAgIHJldHVybiAoeWllbGQgZnJvbSBxLmdldCgpKQorCisgICAgICAgIHJlcyA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocXVldWVfZ2V0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgcmVzKQorCisgICAgZGVmIHRlc3RfZ2V0X3dpdGhfcHV0dGVycyhzZWxmKToKKyAgICAgICAgcSA9IGFzeW5jaW8uUXVldWUoMSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHEucHV0X25vd2FpdCgxKQorCisgICAgICAgIHdhaXRlciA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBxLl9wdXR0ZXJzLmFwcGVuZCh3YWl0ZXIpCisKKyAgICAgICAgcmVzID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShxLmdldCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHJlcykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdhaXRlci5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHdhaXRlci5yZXN1bHQoKSkKKworICAgIGRlZiB0ZXN0X2Jsb2NraW5nX2dldF93YWl0KHNlbGYpOgorCisgICAgICAgIGRlZiBnZW4oKToKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZAorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjAxLCB3aGVuKQorICAgICAgICAgICAgeWllbGQgMC4wMQorCisgICAgICAgIGxvb3AgPSBzZWxmLm5ld190ZXN0X2xvb3AoZ2VuKQorCisgICAgICAgIHEgPSBhc3luY2lvLlF1ZXVlKGxvb3A9bG9vcCkKKyAgICAgICAgc3RhcnRlZCA9IGFzeW5jaW8uRXZlbnQobG9vcD1sb29wKQorICAgICAgICBmaW5pc2hlZCA9IEZhbHNlCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBxdWV1ZV9nZXQoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIGZpbmlzaGVkCisgICAgICAgICAgICBzdGFydGVkLnNldCgpCisgICAgICAgICAgICByZXMgPSB5aWVsZCBmcm9tIHEuZ2V0KCkKKyAgICAgICAgICAgIGZpbmlzaGVkID0gVHJ1ZQorICAgICAgICAgICAgcmV0dXJuIHJlcworCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgcXVldWVfcHV0KCk6CisgICAgICAgICAgICBsb29wLmNhbGxfbGF0ZXIoMC4wMSwgcS5wdXRfbm93YWl0LCAxKQorICAgICAgICAgICAgcXVldWVfZ2V0X3Rhc2sgPSBhc3luY2lvLlRhc2socXVldWVfZ2V0KCksIGxvb3A9bG9vcCkKKyAgICAgICAgICAgIHlpZWxkIGZyb20gc3RhcnRlZC53YWl0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZmluaXNoZWQpCisgICAgICAgICAgICByZXMgPSB5aWVsZCBmcm9tIHF1ZXVlX2dldF90YXNrCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZmluaXNoZWQpCisgICAgICAgICAgICByZXR1cm4gcmVzCisKKyAgICAgICAgcmVzID0gbG9vcC5ydW5fdW50aWxfY29tcGxldGUocXVldWVfcHV0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgcmVzKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMDEsIGxvb3AudGltZSgpKQorCisgICAgZGVmIHRlc3Rfbm9uYmxvY2tpbmdfZ2V0KHNlbGYpOgorICAgICAgICBxID0gYXN5bmNpby5RdWV1ZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgcS5wdXRfbm93YWl0KDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgcS5nZXRfbm93YWl0KCkpCisKKyAgICBkZWYgdGVzdF9ub25ibG9ja2luZ19nZXRfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICBxID0gYXN5bmNpby5RdWV1ZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYXN5bmNpby5RdWV1ZUVtcHR5LCBxLmdldF9ub3dhaXQpCisKKyAgICBkZWYgdGVzdF9nZXRfY2FuY2VsbGVkKHNlbGYpOgorCisgICAgICAgIGRlZiBnZW4oKToKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZAorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjAxLCB3aGVuKQorICAgICAgICAgICAgd2hlbiA9IHlpZWxkIDAuMDEKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4wNjEsIHdoZW4pCisgICAgICAgICAgICB5aWVsZCAwLjA1CisKKyAgICAgICAgbG9vcCA9IHNlbGYubmV3X3Rlc3RfbG9vcChnZW4pCisKKyAgICAgICAgcSA9IGFzeW5jaW8uUXVldWUobG9vcD1sb29wKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgcXVldWVfZ2V0KCk6CisgICAgICAgICAgICByZXR1cm4gKHlpZWxkIGZyb20gYXN5bmNpby53YWl0X2ZvcihxLmdldCgpLCAwLjA1MSwgbG9vcD1sb29wKSkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHRlc3QoKToKKyAgICAgICAgICAgIGdldF90YXNrID0gYXN5bmNpby5UYXNrKHF1ZXVlX2dldCgpLCBsb29wPWxvb3ApCisgICAgICAgICAgICB5aWVsZCBmcm9tIGFzeW5jaW8uc2xlZXAoMC4wMSwgbG9vcD1sb29wKSAgIyBsZXQgdGhlIHRhc2sgc3RhcnQKKyAgICAgICAgICAgIHEucHV0X25vd2FpdCgxKQorICAgICAgICAgICAgcmV0dXJuICh5aWVsZCBmcm9tIGdldF90YXNrKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbG9vcC5ydW5fdW50aWxfY29tcGxldGUodGVzdCgpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjA2LCBsb29wLnRpbWUoKSkKKworICAgIGRlZiB0ZXN0X2dldF9jYW5jZWxsZWRfcmFjZShzZWxmKToKKyAgICAgICAgcSA9IGFzeW5jaW8uUXVldWUobG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgdDEgPSBhc3luY2lvLlRhc2socS5nZXQoKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHQyID0gYXN5bmNpby5UYXNrKHEuZ2V0KCksIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICB0MS5jYW5jZWwoKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxLmRvbmUoKSkKKyAgICAgICAgcS5wdXRfbm93YWl0KCdhJykKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDIucmVzdWx0KCksICdhJykKKworICAgIGRlZiB0ZXN0X2dldF93aXRoX3dhaXRpbmdfcHV0dGVycyhzZWxmKToKKyAgICAgICAgcSA9IGFzeW5jaW8uUXVldWUobG9vcD1zZWxmLmxvb3AsIG1heHNpemU9MSkKKyAgICAgICAgYXN5bmNpby5UYXNrKHEucHV0KCdhJyksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICBhc3luY2lvLlRhc2socS5wdXQoJ2InKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocS5nZXQoKSksICdhJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHEuZ2V0KCkpLCAnYicpCisKKyAgICBkZWYgdGVzdF93aHlfYXJlX2dldHRlcnNfd2FpdGluZyhzZWxmKToKKyAgICAgICAgIyBGcm9tIGlzc3VlICMyNjguCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBjb25zdW1lcihxdWV1ZSwgbnVtX2V4cGVjdGVkKToKKyAgICAgICAgICAgIGZvciBfIGluIHJhbmdlKG51bV9leHBlY3RlZCk6CisgICAgICAgICAgICAgICAgeWllbGQgZnJvbSBxdWV1ZS5nZXQoKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgcHJvZHVjZXIocXVldWUsIG51bV9pdGVtcyk6CisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShudW1faXRlbXMpOgorICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gcXVldWUucHV0KGkpCisKKyAgICAgICAgcXVldWVfc2l6ZSA9IDEKKyAgICAgICAgcHJvZHVjZXJfbnVtX2l0ZW1zID0gNQorICAgICAgICBxID0gYXN5bmNpby5RdWV1ZShxdWV1ZV9zaXplLCBsb29wPXNlbGYubG9vcCkKKworICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKAorICAgICAgICAgICAgYXN5bmNpby5nYXRoZXIocHJvZHVjZXIocSwgcHJvZHVjZXJfbnVtX2l0ZW1zKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWVyKHEsIHByb2R1Y2VyX251bV9pdGVtcyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29wPXNlbGYubG9vcCksCisgICAgICAgICAgICApCisKKworY2xhc3MgUXVldWVQdXRUZXN0cyhfUXVldWVUZXN0QmFzZSk6CisKKyAgICBkZWYgdGVzdF9ibG9ja2luZ19wdXQoc2VsZik6CisgICAgICAgIHEgPSBhc3luY2lvLlF1ZXVlKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgcXVldWVfcHV0KCk6CisgICAgICAgICAgICAjIE5vIG1heHNpemUsIHdvbid0IGJsb2NrLgorICAgICAgICAgICAgeWllbGQgZnJvbSBxLnB1dCgxKQorCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocXVldWVfcHV0KCkpCisKKyAgICBkZWYgdGVzdF9ibG9ja2luZ19wdXRfd2FpdChzZWxmKToKKworICAgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgICB3aGVuID0geWllbGQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4wMSwgd2hlbikKKyAgICAgICAgICAgIHlpZWxkIDAuMDEKKworICAgICAgICBsb29wID0gc2VsZi5uZXdfdGVzdF9sb29wKGdlbikKKworICAgICAgICBxID0gYXN5bmNpby5RdWV1ZShtYXhzaXplPTEsIGxvb3A9bG9vcCkKKyAgICAgICAgc3RhcnRlZCA9IGFzeW5jaW8uRXZlbnQobG9vcD1sb29wKQorICAgICAgICBmaW5pc2hlZCA9IEZhbHNlCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBxdWV1ZV9wdXQoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIGZpbmlzaGVkCisgICAgICAgICAgICBzdGFydGVkLnNldCgpCisgICAgICAgICAgICB5aWVsZCBmcm9tIHEucHV0KDEpCisgICAgICAgICAgICB5aWVsZCBmcm9tIHEucHV0KDIpCisgICAgICAgICAgICBmaW5pc2hlZCA9IFRydWUKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHF1ZXVlX2dldCgpOgorICAgICAgICAgICAgbG9vcC5jYWxsX2xhdGVyKDAuMDEsIHEuZ2V0X25vd2FpdCkKKyAgICAgICAgICAgIHF1ZXVlX3B1dF90YXNrID0gYXN5bmNpby5UYXNrKHF1ZXVlX3B1dCgpLCBsb29wPWxvb3ApCisgICAgICAgICAgICB5aWVsZCBmcm9tIHN0YXJ0ZWQud2FpdCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZpbmlzaGVkKQorICAgICAgICAgICAgeWllbGQgZnJvbSBxdWV1ZV9wdXRfdGFzaworICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZpbmlzaGVkKQorCisgICAgICAgIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHF1ZXVlX2dldCgpKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMDEsIGxvb3AudGltZSgpKQorCisgICAgZGVmIHRlc3Rfbm9uYmxvY2tpbmdfcHV0KHNlbGYpOgorICAgICAgICBxID0gYXN5bmNpby5RdWV1ZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgcS5wdXRfbm93YWl0KDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgcS5nZXRfbm93YWl0KCkpCisKKyAgICBkZWYgdGVzdF9nZXRfY2FuY2VsX2Ryb3Bfb25lX3BlbmRpbmdfcmVhZGVyKHNlbGYpOgorICAgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgICB5aWVsZCAwLjAxCisgICAgICAgICAgICB5aWVsZCAwLjEKKworICAgICAgICBsb29wID0gc2VsZi5uZXdfdGVzdF9sb29wKGdlbikKKworICAgICAgICBxID0gYXN5bmNpby5RdWV1ZShsb29wPWxvb3ApCisKKyAgICAgICAgcmVhZGVyID0gbG9vcC5jcmVhdGVfdGFzayhxLmdldCgpKQorCisgICAgICAgIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGFzeW5jaW8uc2xlZXAoMC4wMSwgbG9vcD1sb29wKSkKKworICAgICAgICBxLnB1dF9ub3dhaXQoMSkKKyAgICAgICAgcS5wdXRfbm93YWl0KDIpCisgICAgICAgIHJlYWRlci5jYW5jZWwoKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHJlYWRlcikKKyAgICAgICAgZXhjZXB0IGFzeW5jaW8uQ2FuY2VsbGVkRXJyb3I6CisgICAgICAgICAgICAjIHRyeSBhZ2FpbgorICAgICAgICAgICAgcmVhZGVyID0gbG9vcC5jcmVhdGVfdGFzayhxLmdldCgpKQorICAgICAgICAgICAgbG9vcC5ydW5fdW50aWxfY29tcGxldGUocmVhZGVyKQorCisgICAgICAgIHJlc3VsdCA9IHJlYWRlci5yZXN1bHQoKQorICAgICAgICAjIGlmIHdlIGdldCAyLCBpdCBtZWFucyAxIGdvdCBkcm9wcGVkIQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHJlc3VsdCkKKworICAgIGRlZiB0ZXN0X2dldF9jYW5jZWxfZHJvcF9tYW55X3BlbmRpbmdfcmVhZGVycyhzZWxmKToKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgeWllbGQgMC4wMQorICAgICAgICAgICAgeWllbGQgMC4xCisKKyAgICAgICAgbG9vcCA9IHNlbGYubmV3X3Rlc3RfbG9vcChnZW4pCisgICAgICAgIGxvb3Auc2V0X2RlYnVnKFRydWUpCisKKyAgICAgICAgcSA9IGFzeW5jaW8uUXVldWUobG9vcD1sb29wKQorCisgICAgICAgIHJlYWRlcjEgPSBsb29wLmNyZWF0ZV90YXNrKHEuZ2V0KCkpCisgICAgICAgIHJlYWRlcjIgPSBsb29wLmNyZWF0ZV90YXNrKHEuZ2V0KCkpCisgICAgICAgIHJlYWRlcjMgPSBsb29wLmNyZWF0ZV90YXNrKHEuZ2V0KCkpCisKKyAgICAgICAgbG9vcC5ydW5fdW50aWxfY29tcGxldGUoYXN5bmNpby5zbGVlcCgwLjAxLCBsb29wPWxvb3ApKQorCisgICAgICAgIHEucHV0X25vd2FpdCgxKQorICAgICAgICBxLnB1dF9ub3dhaXQoMikKKyAgICAgICAgcmVhZGVyMS5jYW5jZWwoKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHJlYWRlcjEpCisgICAgICAgIGV4Y2VwdCBhc3luY2lvLkNhbmNlbGxlZEVycm9yOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHJlYWRlcjMpCisKKyAgICAgICAgIyBJdCBpcyB1bmRlZmluZWQgaW4gd2hpY2ggb3JkZXIgY29uY3VycmVudCByZWFkZXJzIHJlY2VpdmUgcmVzdWx0cy4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh7cmVhZGVyMi5yZXN1bHQoKSwgcmVhZGVyMy5yZXN1bHQoKX0sIHsxLCAyfSkKKworICAgIGRlZiB0ZXN0X3B1dF9jYW5jZWxfZHJvcChzZWxmKToKKworICAgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgICB5aWVsZCAwLjAxCisgICAgICAgICAgICB5aWVsZCAwLjEKKworICAgICAgICBsb29wID0gc2VsZi5uZXdfdGVzdF9sb29wKGdlbikKKyAgICAgICAgcSA9IGFzeW5jaW8uUXVldWUoMSwgbG9vcD1sb29wKQorCisgICAgICAgIHEucHV0X25vd2FpdCgxKQorCisgICAgICAgICMgcHV0dGluZyBhIHNlY29uZCBpdGVtIGluIHRoZSBxdWV1ZSBoYXMgdG8gYmxvY2sgKHFzaXplPTEpCisgICAgICAgIHdyaXRlciA9IGxvb3AuY3JlYXRlX3Rhc2socS5wdXQoMikpCisgICAgICAgIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGFzeW5jaW8uc2xlZXAoMC4wMSwgbG9vcD1sb29wKSkKKworICAgICAgICB2YWx1ZTEgPSBxLmdldF9ub3dhaXQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlMSwgMSkKKworICAgICAgICB3cml0ZXIuY2FuY2VsKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbG9vcC5ydW5fdW50aWxfY29tcGxldGUod3JpdGVyKQorICAgICAgICBleGNlcHQgYXN5bmNpby5DYW5jZWxsZWRFcnJvcjoKKyAgICAgICAgICAgICMgdHJ5IGFnYWluCisgICAgICAgICAgICB3cml0ZXIgPSBsb29wLmNyZWF0ZV90YXNrKHEucHV0KDIpKQorICAgICAgICAgICAgbG9vcC5ydW5fdW50aWxfY29tcGxldGUod3JpdGVyKQorCisgICAgICAgIHZhbHVlMiA9IHEuZ2V0X25vd2FpdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWUyLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHEucXNpemUoKSwgMCkKKworICAgIGRlZiB0ZXN0X25vbmJsb2NraW5nX3B1dF9leGNlcHRpb24oc2VsZik6CisgICAgICAgIHEgPSBhc3luY2lvLlF1ZXVlKG1heHNpemU9MSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHEucHV0X25vd2FpdCgxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhhc3luY2lvLlF1ZXVlRnVsbCwgcS5wdXRfbm93YWl0LCAyKQorCisgICAgZGVmIHRlc3RfZmxvYXRfbWF4c2l6ZShzZWxmKToKKyAgICAgICAgcSA9IGFzeW5jaW8uUXVldWUobWF4c2l6ZT0xLjMsIGxvb3A9c2VsZi5sb29wKQorICAgICAgICBxLnB1dF9ub3dhaXQoMSkKKyAgICAgICAgcS5wdXRfbm93YWl0KDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShxLmZ1bGwoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYXN5bmNpby5RdWV1ZUZ1bGwsIHEucHV0X25vd2FpdCwgMykKKworICAgICAgICBxID0gYXN5bmNpby5RdWV1ZShtYXhzaXplPTEuMywgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgcXVldWVfcHV0KCk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIHEucHV0KDEpCisgICAgICAgICAgICB5aWVsZCBmcm9tIHEucHV0KDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocS5mdWxsKCkpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocXVldWVfcHV0KCkpCisKKyAgICBkZWYgdGVzdF9wdXRfY2FuY2VsbGVkKHNlbGYpOgorICAgICAgICBxID0gYXN5bmNpby5RdWV1ZShsb29wPXNlbGYubG9vcCkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHF1ZXVlX3B1dCgpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBxLnB1dCgxKQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHRlc3QoKToKKyAgICAgICAgICAgIHJldHVybiAoeWllbGQgZnJvbSBxLmdldCgpKQorCisgICAgICAgIHQgPSBhc3luY2lvLlRhc2socXVldWVfcHV0KCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUodGVzdCgpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodC5yZXN1bHQoKSkKKworICAgIGRlZiB0ZXN0X3B1dF9jYW5jZWxsZWRfcmFjZShzZWxmKToKKyAgICAgICAgcSA9IGFzeW5jaW8uUXVldWUobG9vcD1zZWxmLmxvb3AsIG1heHNpemU9MSkKKworICAgICAgICBwdXRfYSA9IGFzeW5jaW8uVGFzayhxLnB1dCgnYScpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgcHV0X2IgPSBhc3luY2lvLlRhc2socS5wdXQoJ2InKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHB1dF9jID0gYXN5bmNpby5UYXNrKHEucHV0KCdYJyksIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocHV0X2EuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHB1dF9iLmRvbmUoKSkKKworICAgICAgICBwdXRfYy5jYW5jZWwoKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHB1dF9jLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChxLmdldF9ub3dhaXQoKSwgJ2EnKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChxLmdldF9ub3dhaXQoKSwgJ2InKQorCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHV0X2IpCisKKyAgICBkZWYgdGVzdF9wdXRfd2l0aF93YWl0aW5nX2dldHRlcnMoc2VsZik6CisgICAgICAgIHEgPSBhc3luY2lvLlF1ZXVlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0ID0gYXN5bmNpby5UYXNrKHEuZ2V0KCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShxLnB1dCgnYScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUodCksICdhJykKKworICAgIGRlZiB0ZXN0X3doeV9hcmVfcHV0dGVyc193YWl0aW5nKHNlbGYpOgorICAgICAgICAjIEZyb20gaXNzdWUgIzI2NS4KKworICAgICAgICBxdWV1ZSA9IGFzeW5jaW8uUXVldWUoMiwgbG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBwdXR0ZXIoaXRlbSk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIHF1ZXVlLnB1dChpdGVtKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgZ2V0dGVyKCk6CisgICAgICAgICAgICB5aWVsZAorICAgICAgICAgICAgbnVtID0gcXVldWUucXNpemUoKQorICAgICAgICAgICAgZm9yIF8gaW4gcmFuZ2UobnVtKToKKyAgICAgICAgICAgICAgICBpdGVtID0gcXVldWUuZ2V0X25vd2FpdCgpCisKKyAgICAgICAgdDAgPSBwdXR0ZXIoMCkKKyAgICAgICAgdDEgPSBwdXR0ZXIoMSkKKyAgICAgICAgdDIgPSBwdXR0ZXIoMikKKyAgICAgICAgdDMgPSBwdXR0ZXIoMykKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSgKKyAgICAgICAgICAgIGFzeW5jaW8uZ2F0aGVyKGdldHRlcigpLCB0MCwgdDEsIHQyLCB0MywgbG9vcD1zZWxmLmxvb3ApKQorCisKK2NsYXNzIExpZm9RdWV1ZVRlc3RzKF9RdWV1ZVRlc3RCYXNlKToKKworICAgIGRlZiB0ZXN0X29yZGVyKHNlbGYpOgorICAgICAgICBxID0gYXN5bmNpby5MaWZvUXVldWUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGZvciBpIGluIFsxLCAzLCAyXToKKyAgICAgICAgICAgIHEucHV0X25vd2FpdChpKQorCisgICAgICAgIGl0ZW1zID0gW3EuZ2V0X25vd2FpdCgpIGZvciBfIGluIHJhbmdlKDMpXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsyLCAzLCAxXSwgaXRlbXMpCisKKworY2xhc3MgUHJpb3JpdHlRdWV1ZVRlc3RzKF9RdWV1ZVRlc3RCYXNlKToKKworICAgIGRlZiB0ZXN0X29yZGVyKHNlbGYpOgorICAgICAgICBxID0gYXN5bmNpby5Qcmlvcml0eVF1ZXVlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmb3IgaSBpbiBbMSwgMywgMl06CisgICAgICAgICAgICBxLnB1dF9ub3dhaXQoaSkKKworICAgICAgICBpdGVtcyA9IFtxLmdldF9ub3dhaXQoKSBmb3IgXyBpbiByYW5nZSgzKV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbMSwgMiwgM10sIGl0ZW1zKQorCisKK2NsYXNzIF9RdWV1ZUpvaW5UZXN0TWl4aW46CisKKyAgICBxX2NsYXNzID0gTm9uZQorCisgICAgZGVmIHRlc3RfdGFza19kb25lX3VuZGVyZmxvdyhzZWxmKToKKyAgICAgICAgcSA9IHNlbGYucV9jbGFzcyhsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcS50YXNrX2RvbmUpCisKKyAgICBkZWYgdGVzdF90YXNrX2RvbmUoc2VsZik6CisgICAgICAgIHEgPSBzZWxmLnFfY2xhc3MobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGZvciBpIGluIHJhbmdlKDEwMCk6CisgICAgICAgICAgICBxLnB1dF9ub3dhaXQoaSkKKworICAgICAgICBhY2N1bXVsYXRvciA9IDAKKworICAgICAgICAjIFR3byB3b3JrZXJzIGdldCBpdGVtcyBmcm9tIHRoZSBxdWV1ZSBhbmQgY2FsbCB0YXNrX2RvbmUgYWZ0ZXIgZWFjaC4KKyAgICAgICAgIyBKb2luIHRoZSBxdWV1ZSBhbmQgYXNzZXJ0IGFsbCBpdGVtcyBoYXZlIGJlZW4gcHJvY2Vzc2VkLgorICAgICAgICBydW5uaW5nID0gVHJ1ZQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgd29ya2VyKCk6CisgICAgICAgICAgICBub25sb2NhbCBhY2N1bXVsYXRvcgorCisgICAgICAgICAgICB3aGlsZSBydW5uaW5nOgorICAgICAgICAgICAgICAgIGl0ZW0gPSB5aWVsZCBmcm9tIHEuZ2V0KCkKKyAgICAgICAgICAgICAgICBhY2N1bXVsYXRvciArPSBpdGVtCisgICAgICAgICAgICAgICAgcS50YXNrX2RvbmUoKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgdGVzdCgpOgorICAgICAgICAgICAgdGFza3MgPSBbYXN5bmNpby5UYXNrKHdvcmtlcigpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgICAgICAgICAgICAgIGZvciBpbmRleCBpbiByYW5nZSgyKV0KKworICAgICAgICAgICAgeWllbGQgZnJvbSBxLmpvaW4oKQorICAgICAgICAgICAgcmV0dXJuIHRhc2tzCisKKyAgICAgICAgdGFza3MgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHRlc3QoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdW0ocmFuZ2UoMTAwKSksIGFjY3VtdWxhdG9yKQorCisgICAgICAgICMgY2xvc2UgcnVubmluZyBnZW5lcmF0b3JzCisgICAgICAgIHJ1bm5pbmcgPSBGYWxzZQorICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4odGFza3MpKToKKyAgICAgICAgICAgIHEucHV0X25vd2FpdCgwKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGFzeW5jaW8ud2FpdCh0YXNrcywgbG9vcD1zZWxmLmxvb3ApKQorCisgICAgZGVmIHRlc3Rfam9pbl9lbXB0eV9xdWV1ZShzZWxmKToKKyAgICAgICAgcSA9IHNlbGYucV9jbGFzcyhsb29wPXNlbGYubG9vcCkKKworICAgICAgICAjIFRlc3QgdGhhdCBhIHF1ZXVlIGpvaW4oKXMgc3VjY2Vzc2Z1bGx5LCBhbmQgYmVmb3JlIGFueXRoaW5nIGVsc2UKKyAgICAgICAgIyAoZG9uZSB0d2ljZSBmb3IgaW5zdXJhbmNlKS4KKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGpvaW4oKToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gcS5qb2luKCkKKyAgICAgICAgICAgIHlpZWxkIGZyb20gcS5qb2luKCkKKworICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGpvaW4oKSkKKworICAgIGRlZiB0ZXN0X2Zvcm1hdChzZWxmKToKKyAgICAgICAgcSA9IHNlbGYucV9jbGFzcyhsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChxLl9mb3JtYXQoKSwgJ21heHNpemU9MCcpCisKKyAgICAgICAgcS5fdW5maW5pc2hlZF90YXNrcyA9IDIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChxLl9mb3JtYXQoKSwgJ21heHNpemU9MCB0YXNrcz0yJykKKworCitjbGFzcyBRdWV1ZUpvaW5UZXN0cyhfUXVldWVKb2luVGVzdE1peGluLCBfUXVldWVUZXN0QmFzZSk6CisgICAgcV9jbGFzcyA9IGFzeW5jaW8uUXVldWUKKworCitjbGFzcyBMaWZvUXVldWVKb2luVGVzdHMoX1F1ZXVlSm9pblRlc3RNaXhpbiwgX1F1ZXVlVGVzdEJhc2UpOgorICAgIHFfY2xhc3MgPSBhc3luY2lvLkxpZm9RdWV1ZQorCisKK2NsYXNzIFByaW9yaXR5UXVldWVKb2luVGVzdHMoX1F1ZXVlSm9pblRlc3RNaXhpbiwgX1F1ZXVlVGVzdEJhc2UpOgorICAgIHFfY2xhc3MgPSBhc3luY2lvLlByaW9yaXR5UXVldWUKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3Rfc2VsZWN0b3JfZXZlbnRzLnB5IGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3Rfc2VsZWN0b3JfZXZlbnRzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzNWI1YWIKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF9zZWxlY3Rvcl9ldmVudHMucHkKQEAgLTAsMCArMSwxNzY1IEBACisiIiJUZXN0cyBmb3Igc2VsZWN0b3JfZXZlbnRzLnB5IiIiCisKK2ltcG9ydCBlcnJubworaW1wb3J0IHNvY2tldAoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIHVuaXR0ZXN0IGltcG9ydCBtb2NrCit0cnk6CisgICAgaW1wb3J0IHNzbAorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHNzbCA9IE5vbmUKKworaW1wb3J0IGFzeW5jaW8KK2Zyb20gYXN5bmNpbyBpbXBvcnQgc2VsZWN0b3JzCitmcm9tIGFzeW5jaW8gaW1wb3J0IHRlc3RfdXRpbHMKK2Zyb20gYXN5bmNpby5zZWxlY3Rvcl9ldmVudHMgaW1wb3J0IEJhc2VTZWxlY3RvckV2ZW50TG9vcAorZnJvbSBhc3luY2lvLnNlbGVjdG9yX2V2ZW50cyBpbXBvcnQgX1NlbGVjdG9yVHJhbnNwb3J0Citmcm9tIGFzeW5jaW8uc2VsZWN0b3JfZXZlbnRzIGltcG9ydCBfU2VsZWN0b3JTc2xUcmFuc3BvcnQKK2Zyb20gYXN5bmNpby5zZWxlY3Rvcl9ldmVudHMgaW1wb3J0IF9TZWxlY3RvclNvY2tldFRyYW5zcG9ydAorZnJvbSBhc3luY2lvLnNlbGVjdG9yX2V2ZW50cyBpbXBvcnQgX1NlbGVjdG9yRGF0YWdyYW1UcmFuc3BvcnQKKworCitNT0NLX0FOWSA9IG1vY2suQU5ZCisKKworY2xhc3MgVGVzdEJhc2VTZWxlY3RvckV2ZW50TG9vcChCYXNlU2VsZWN0b3JFdmVudExvb3ApOgorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICAjIERvbid0IGNhbGwgdGhlIGNsb3NlKCkgbWV0aG9kIG9mIHRoZSBwYXJlbnQgY2xhc3MsIGJlY2F1c2UgdGhlCisgICAgICAgICMgc2VsZWN0b3IgaXMgbW9ja2VkCisgICAgICAgIHNlbGYuX2Nsb3NlZCA9IFRydWUKKworICAgIGRlZiBfbWFrZV9zZWxmX3BpcGUoc2VsZik6CisgICAgICAgIHNlbGYuX3Nzb2NrID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5fY3NvY2sgPSBtb2NrLk1vY2soKQorICAgICAgICBzZWxmLl9pbnRlcm5hbF9mZHMgKz0gMQorCisKK2RlZiBsaXN0X3RvX2J1ZmZlcihsPSgpKToKKyAgICByZXR1cm4gYnl0ZWFycmF5KCkuam9pbihsKQorCisKK2RlZiBjbG9zZV90cmFuc3BvcnQodHJhbnNwb3J0KToKKyAgICAjIERvbid0IGNhbGwgdHJhbnNwb3J0LmNsb3NlKCkgYmVjYXVzZSB0aGUgZXZlbnQgbG9vcCBhbmQgdGhlIHNlbGVjdG9yCisgICAgIyBhcmUgbW9ja2VkCisgICAgaWYgdHJhbnNwb3J0Ll9zb2NrIGlzIE5vbmU6CisgICAgICAgIHJldHVybgorICAgIHRyYW5zcG9ydC5fc29jay5jbG9zZSgpCisgICAgdHJhbnNwb3J0Ll9zb2NrID0gTm9uZQorCisKK2NsYXNzIEJhc2VTZWxlY3RvckV2ZW50TG9vcFRlc3RzKHRlc3RfdXRpbHMuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnNlbGVjdG9yID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5zZWxlY3Rvci5zZWxlY3QucmV0dXJuX3ZhbHVlID0gW10KKyAgICAgICAgc2VsZi5sb29wID0gVGVzdEJhc2VTZWxlY3RvckV2ZW50TG9vcChzZWxmLnNlbGVjdG9yKQorICAgICAgICBzZWxmLnNldF9ldmVudF9sb29wKHNlbGYubG9vcCkKKworICAgIGRlZiB0ZXN0X21ha2Vfc29ja2V0X3RyYW5zcG9ydChzZWxmKToKKyAgICAgICAgbSA9IG1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5hZGRfcmVhZGVyID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLmFkZF9yZWFkZXIuX2lzX2Nvcm91dGluZSA9IEZhbHNlCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYubG9vcC5fbWFrZV9zb2NrZXRfdHJhbnNwb3J0KG0sIGFzeW5jaW8uUHJvdG9jb2woKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHRyYW5zcG9ydCwgX1NlbGVjdG9yU29ja2V0VHJhbnNwb3J0KQorCisgICAgICAgICMgQ2FsbGluZyByZXByKCkgbXVzdCBub3QgZmFpbCB3aGVuIHRoZSBldmVudCBsb29wIGlzIGNsb3NlZAorICAgICAgICBzZWxmLmxvb3AuY2xvc2UoKQorICAgICAgICByZXByKHRyYW5zcG9ydCkKKworICAgICAgICBjbG9zZV90cmFuc3BvcnQodHJhbnNwb3J0KQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzc2wgaXMgTm9uZSwgJ05vIHNzbCBtb2R1bGUnKQorICAgIGRlZiB0ZXN0X21ha2Vfc3NsX3RyYW5zcG9ydChzZWxmKToKKyAgICAgICAgbSA9IG1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5hZGRfcmVhZGVyID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLmFkZF9yZWFkZXIuX2lzX2Nvcm91dGluZSA9IEZhbHNlCisgICAgICAgIHNlbGYubG9vcC5hZGRfd3JpdGVyID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLnJlbW92ZV9yZWFkZXIgPSBtb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3dyaXRlciA9IG1vY2suTW9jaygpCisgICAgICAgIHdhaXRlciA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICB3aXRoIHRlc3RfdXRpbHMuZGlzYWJsZV9sb2dnZXIoKToKKyAgICAgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYubG9vcC5fbWFrZV9zc2xfdHJhbnNwb3J0KAorICAgICAgICAgICAgICAgIG0sIGFzeW5jaW8uUHJvdG9jb2woKSwgbSwgd2FpdGVyKQorICAgICAgICAgICAgIyBleGVjdXRlIHRoZSBoYW5kc2hha2Ugd2hpbGUgdGhlIGxvZ2dlciBpcyBkaXNhYmxlZAorICAgICAgICAgICAgIyB0byBpZ25vcmUgU1NMIGhhbmRzaGFrZSBmYWlsdXJlCisgICAgICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKworICAgICAgICAjIFNhbml0eSBjaGVjaworICAgICAgICBjbGFzc19uYW1lID0gdHJhbnNwb3J0Ll9fY2xhc3NfXy5fX25hbWVfXworICAgICAgICBzZWxmLmFzc2VydEluKCJzc2wiLCBjbGFzc19uYW1lLmxvd2VyKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oInRyYW5zcG9ydCIsIGNsYXNzX25hbWUubG93ZXIoKSkKKworICAgICAgICB0cmFuc3BvcnQuY2xvc2UoKQorICAgICAgICAjIGV4ZWN1dGUgcGVuZGluZyBjYWxsYmFja3MgdG8gY2xvc2UgdGhlIHNvY2tldCB0cmFuc3BvcnQKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisKKyAgICBAbW9jay5wYXRjaCgnYXN5bmNpby5zZWxlY3Rvcl9ldmVudHMuc3NsJywgTm9uZSkKKyAgICBAbW9jay5wYXRjaCgnYXN5bmNpby5zc2xwcm90by5zc2wnLCBOb25lKQorICAgIGRlZiB0ZXN0X21ha2Vfc3NsX3RyYW5zcG9ydF93aXRob3V0X3NzbF9lcnJvcihzZWxmKToKKyAgICAgICAgbSA9IG1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5hZGRfcmVhZGVyID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIgPSBtb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3JlYWRlciA9IG1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5yZW1vdmVfd3JpdGVyID0gbW9jay5Nb2NrKCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5sb29wLl9tYWtlX3NzbF90cmFuc3BvcnQobSwgbSwgbSwgbSkKKworICAgIGRlZiB0ZXN0X2Nsb3NlKHNlbGYpOgorICAgICAgICBjbGFzcyBFdmVudExvb3AoQmFzZVNlbGVjdG9yRXZlbnRMb29wKToKKyAgICAgICAgICAgIGRlZiBfbWFrZV9zZWxmX3BpcGUoc2VsZik6CisgICAgICAgICAgICAgICAgc2VsZi5fc3NvY2sgPSBtb2NrLk1vY2soKQorICAgICAgICAgICAgICAgIHNlbGYuX2Nzb2NrID0gbW9jay5Nb2NrKCkKKyAgICAgICAgICAgICAgICBzZWxmLl9pbnRlcm5hbF9mZHMgKz0gMQorCisgICAgICAgIHNlbGYubG9vcCA9IEV2ZW50TG9vcChzZWxmLnNlbGVjdG9yKQorICAgICAgICBzZWxmLnNldF9ldmVudF9sb29wKHNlbGYubG9vcCkKKworICAgICAgICBzc29jayA9IHNlbGYubG9vcC5fc3NvY2sKKyAgICAgICAgc3NvY2suZmlsZW5vLnJldHVybl92YWx1ZSA9IDcKKyAgICAgICAgY3NvY2sgPSBzZWxmLmxvb3AuX2Nzb2NrCisgICAgICAgIGNzb2NrLmZpbGVuby5yZXR1cm5fdmFsdWUgPSAxCisgICAgICAgIHJlbW92ZV9yZWFkZXIgPSBzZWxmLmxvb3AucmVtb3ZlX3JlYWRlciA9IG1vY2suTW9jaygpCisKKyAgICAgICAgc2VsZi5sb29wLl9zZWxlY3Rvci5jbG9zZSgpCisgICAgICAgIHNlbGYubG9vcC5fc2VsZWN0b3IgPSBzZWxlY3RvciA9IG1vY2suTW9jaygpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLmlzX2Nsb3NlZCgpKQorCisgICAgICAgIHNlbGYubG9vcC5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmxvb3AuaXNfY2xvc2VkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHNlbGYubG9vcC5fc2VsZWN0b3IpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHNlbGYubG9vcC5fY3NvY2spCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHNlbGYubG9vcC5fc3NvY2spCisgICAgICAgIHNlbGVjdG9yLmNsb3NlLmFzc2VydF9jYWxsZWRfd2l0aCgpCisgICAgICAgIHNzb2NrLmNsb3NlLmFzc2VydF9jYWxsZWRfd2l0aCgpCisgICAgICAgIGNzb2NrLmNsb3NlLmFzc2VydF9jYWxsZWRfd2l0aCgpCisgICAgICAgIHJlbW92ZV9yZWFkZXIuYXNzZXJ0X2NhbGxlZF93aXRoKDcpCisKKyAgICAgICAgIyBpdCBzaG91bGQgYmUgcG9zc2libGUgdG8gY2FsbCBjbG9zZSgpIG1vcmUgdGhhbiBvbmNlCisgICAgICAgIHNlbGYubG9vcC5jbG9zZSgpCisgICAgICAgIHNlbGYubG9vcC5jbG9zZSgpCisKKyAgICAgICAgIyBvcGVyYXRpb24gYmxvY2tlZCB3aGVuIHRoZSBsb29wIGlzIGNsb3NlZAorICAgICAgICBmID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgc2VsZi5sb29wLnJ1bl9mb3JldmVyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIGYpCisgICAgICAgIGZkID0gMAorICAgICAgICBkZWYgY2FsbGJhY2soKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBzZWxmLmxvb3AuYWRkX3JlYWRlciwgZmQsIGNhbGxiYWNrKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIHNlbGYubG9vcC5hZGRfd3JpdGVyLCBmZCwgY2FsbGJhY2spCisKKyAgICBkZWYgdGVzdF9jbG9zZV9ub19zZWxlY3RvcihzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLnJlbW92ZV9yZWFkZXIgPSBtb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuX3NlbGVjdG9yLmNsb3NlKCkKKyAgICAgICAgc2VsZi5sb29wLl9zZWxlY3RvciA9IE5vbmUKKyAgICAgICAgc2VsZi5sb29wLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc2VsZi5sb29wLl9zZWxlY3RvcikKKworICAgIGRlZiB0ZXN0X3NvY2tldHBhaXIoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIHNlbGYubG9vcC5fc29ja2V0cGFpcikKKworICAgIGRlZiB0ZXN0X3JlYWRfZnJvbV9zZWxmX3RyeWFnYWluKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuX3Nzb2NrLnJlY3Yuc2lkZV9lZmZlY3QgPSBCbG9ja2luZ0lPRXJyb3IKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc2VsZi5sb29wLl9yZWFkX2Zyb21fc2VsZigpKQorCisgICAgZGVmIHRlc3RfcmVhZF9mcm9tX3NlbGZfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuX3Nzb2NrLnJlY3Yuc2lkZV9lZmZlY3QgPSBPU0Vycm9yCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNlbGYubG9vcC5fcmVhZF9mcm9tX3NlbGYpCisKKyAgICBkZWYgdGVzdF93cml0ZV90b19zZWxmX3RyeWFnYWluKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuX2Nzb2NrLnNlbmQuc2lkZV9lZmZlY3QgPSBCbG9ja2luZ0lPRXJyb3IKKyAgICAgICAgd2l0aCB0ZXN0X3V0aWxzLmRpc2FibGVfbG9nZ2VyKCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzZWxmLmxvb3AuX3dyaXRlX3RvX3NlbGYoKSkKKworICAgIGRlZiB0ZXN0X3dyaXRlX3RvX3NlbGZfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICAjIF93cml0ZV90b19zZWxmKCkgc3dhbGxvd3MgT1NFcnJvcgorICAgICAgICBzZWxmLmxvb3AuX2Nzb2NrLnNlbmQuc2lkZV9lZmZlY3QgPSBSdW50aW1lRXJyb3IoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIHNlbGYubG9vcC5fd3JpdGVfdG9fc2VsZikKKworICAgIGRlZiB0ZXN0X3NvY2tfcmVjdihzZWxmKToKKyAgICAgICAgc29jayA9IHRlc3RfdXRpbHMubW9ja19ub25ibG9ja2luZ19zb2NrZXQoKQorICAgICAgICBzZWxmLmxvb3AuX3NvY2tfcmVjdiA9IG1vY2suTW9jaygpCisKKyAgICAgICAgZiA9IHNlbGYubG9vcC5zb2NrX3JlY3Yoc29jaywgMTAyNCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGYsIGFzeW5jaW8uRnV0dXJlKQorICAgICAgICBzZWxmLmxvb3AuX3NvY2tfcmVjdi5hc3NlcnRfY2FsbGVkX3dpdGgoZiwgRmFsc2UsIHNvY2ssIDEwMjQpCisKKyAgICBkZWYgdGVzdF9fc29ja19yZWN2X2NhbmNlbGVkX2Z1dChzZWxmKToKKyAgICAgICAgc29jayA9IG1vY2suTW9jaygpCisKKyAgICAgICAgZiA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmLmNhbmNlbCgpCisKKyAgICAgICAgc2VsZi5sb29wLl9zb2NrX3JlY3YoZiwgRmFsc2UsIHNvY2ssIDEwMjQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc29jay5yZWN2LmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X19zb2NrX3JlY3ZfdW5yZWdpc3RlcihzZWxmKToKKyAgICAgICAgc29jayA9IG1vY2suTW9jaygpCisgICAgICAgIHNvY2suZmlsZW5vLnJldHVybl92YWx1ZSA9IDEwCisKKyAgICAgICAgZiA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmLmNhbmNlbCgpCisKKyAgICAgICAgc2VsZi5sb29wLnJlbW92ZV9yZWFkZXIgPSBtb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuX3NvY2tfcmVjdihmLCBUcnVlLCBzb2NrLCAxMDI0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgxMCwpLCBzZWxmLmxvb3AucmVtb3ZlX3JlYWRlci5jYWxsX2FyZ3NbMF0pCisKKyAgICBkZWYgdGVzdF9fc29ja19yZWN2X3RyeWFnYWluKHNlbGYpOgorICAgICAgICBmID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNvY2sgPSBtb2NrLk1vY2soKQorICAgICAgICBzb2NrLmZpbGVuby5yZXR1cm5fdmFsdWUgPSAxMAorICAgICAgICBzb2NrLnJlY3Yuc2lkZV9lZmZlY3QgPSBCbG9ja2luZ0lPRXJyb3IKKworICAgICAgICBzZWxmLmxvb3AuYWRkX3JlYWRlciA9IG1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5fc29ja19yZWN2KGYsIEZhbHNlLCBzb2NrLCAxMDI0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgxMCwgc2VsZi5sb29wLl9zb2NrX3JlY3YsIGYsIFRydWUsIHNvY2ssIDEwMjQpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9vcC5hZGRfcmVhZGVyLmNhbGxfYXJnc1swXSkKKworICAgIGRlZiB0ZXN0X19zb2NrX3JlY3ZfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICBmID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNvY2sgPSBtb2NrLk1vY2soKQorICAgICAgICBzb2NrLmZpbGVuby5yZXR1cm5fdmFsdWUgPSAxMAorICAgICAgICBlcnIgPSBzb2NrLnJlY3Yuc2lkZV9lZmZlY3QgPSBPU0Vycm9yKCkKKworICAgICAgICBzZWxmLmxvb3AuX3NvY2tfcmVjdihmLCBGYWxzZSwgc29jaywgMTAyNCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhlcnIsIGYuZXhjZXB0aW9uKCkpCisKKyAgICBkZWYgdGVzdF9zb2NrX3NlbmRhbGwoc2VsZik6CisgICAgICAgIHNvY2sgPSB0ZXN0X3V0aWxzLm1vY2tfbm9uYmxvY2tpbmdfc29ja2V0KCkKKyAgICAgICAgc2VsZi5sb29wLl9zb2NrX3NlbmRhbGwgPSBtb2NrLk1vY2soKQorCisgICAgICAgIGYgPSBzZWxmLmxvb3Auc29ja19zZW5kYWxsKHNvY2ssIGInZGF0YScpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmLCBhc3luY2lvLkZ1dHVyZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIChmLCBGYWxzZSwgc29jaywgYidkYXRhJyksCisgICAgICAgICAgICBzZWxmLmxvb3AuX3NvY2tfc2VuZGFsbC5jYWxsX2FyZ3NbMF0pCisKKyAgICBkZWYgdGVzdF9zb2NrX3NlbmRhbGxfbm9kYXRhKHNlbGYpOgorICAgICAgICBzb2NrID0gdGVzdF91dGlscy5tb2NrX25vbmJsb2NraW5nX3NvY2tldCgpCisgICAgICAgIHNlbGYubG9vcC5fc29ja19zZW5kYWxsID0gbW9jay5Nb2NrKCkKKworICAgICAgICBmID0gc2VsZi5sb29wLnNvY2tfc2VuZGFsbChzb2NrLCBiJycpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmLCBhc3luY2lvLkZ1dHVyZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShmLnJlc3VsdCgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5fc29ja19zZW5kYWxsLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X19zb2NrX3NlbmRhbGxfY2FuY2VsZWRfZnV0KHNlbGYpOgorICAgICAgICBzb2NrID0gbW9jay5Nb2NrKCkKKworICAgICAgICBmID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGYuY2FuY2VsKCkKKworICAgICAgICBzZWxmLmxvb3AuX3NvY2tfc2VuZGFsbChmLCBGYWxzZSwgc29jaywgYidkYXRhJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzb2NrLnNlbmQuY2FsbGVkKQorCisgICAgZGVmIHRlc3RfX3NvY2tfc2VuZGFsbF91bnJlZ2lzdGVyKHNlbGYpOgorICAgICAgICBzb2NrID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc29jay5maWxlbm8ucmV0dXJuX3ZhbHVlID0gMTAKKworICAgICAgICBmID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGYuY2FuY2VsKCkKKworICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3dyaXRlciA9IG1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5fc29ja19zZW5kYWxsKGYsIFRydWUsIHNvY2ssIGInZGF0YScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDEwLCksIHNlbGYubG9vcC5yZW1vdmVfd3JpdGVyLmNhbGxfYXJnc1swXSkKKworICAgIGRlZiB0ZXN0X19zb2NrX3NlbmRhbGxfdHJ5YWdhaW4oc2VsZik6CisgICAgICAgIGYgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc29jayA9IG1vY2suTW9jaygpCisgICAgICAgIHNvY2suZmlsZW5vLnJldHVybl92YWx1ZSA9IDEwCisgICAgICAgIHNvY2suc2VuZC5zaWRlX2VmZmVjdCA9IEJsb2NraW5nSU9FcnJvcgorCisgICAgICAgIHNlbGYubG9vcC5hZGRfd3JpdGVyID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLl9zb2NrX3NlbmRhbGwoZiwgRmFsc2UsIHNvY2ssIGInZGF0YScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAoMTAsIHNlbGYubG9vcC5fc29ja19zZW5kYWxsLCBmLCBUcnVlLCBzb2NrLCBiJ2RhdGEnKSwKKyAgICAgICAgICAgIHNlbGYubG9vcC5hZGRfd3JpdGVyLmNhbGxfYXJnc1swXSkKKworICAgIGRlZiB0ZXN0X19zb2NrX3NlbmRhbGxfaW50ZXJydXB0ZWQoc2VsZik6CisgICAgICAgIGYgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc29jayA9IG1vY2suTW9jaygpCisgICAgICAgIHNvY2suZmlsZW5vLnJldHVybl92YWx1ZSA9IDEwCisgICAgICAgIHNvY2suc2VuZC5zaWRlX2VmZmVjdCA9IEludGVycnVwdGVkRXJyb3IKKworICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlciA9IG1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5fc29ja19zZW5kYWxsKGYsIEZhbHNlLCBzb2NrLCBiJ2RhdGEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgKDEwLCBzZWxmLmxvb3AuX3NvY2tfc2VuZGFsbCwgZiwgVHJ1ZSwgc29jaywgYidkYXRhJyksCisgICAgICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlci5jYWxsX2FyZ3NbMF0pCisKKyAgICBkZWYgdGVzdF9fc29ja19zZW5kYWxsX2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgZiA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzb2NrID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc29jay5maWxlbm8ucmV0dXJuX3ZhbHVlID0gMTAKKyAgICAgICAgZXJyID0gc29jay5zZW5kLnNpZGVfZWZmZWN0ID0gT1NFcnJvcigpCisKKyAgICAgICAgc2VsZi5sb29wLl9zb2NrX3NlbmRhbGwoZiwgRmFsc2UsIHNvY2ssIGInZGF0YScpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZi5leGNlcHRpb24oKSwgZXJyKQorCisgICAgZGVmIHRlc3RfX3NvY2tfc2VuZGFsbChzZWxmKToKKyAgICAgICAgc29jayA9IG1vY2suTW9jaygpCisKKyAgICAgICAgZiA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzb2NrLmZpbGVuby5yZXR1cm5fdmFsdWUgPSAxMAorICAgICAgICBzb2NrLnNlbmQucmV0dXJuX3ZhbHVlID0gNAorCisgICAgICAgIHNlbGYubG9vcC5fc29ja19zZW5kYWxsKGYsIEZhbHNlLCBzb2NrLCBiJ2RhdGEnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGYucmVzdWx0KCkpCisKKyAgICBkZWYgdGVzdF9fc29ja19zZW5kYWxsX3BhcnRpYWwoc2VsZik6CisgICAgICAgIHNvY2sgPSBtb2NrLk1vY2soKQorCisgICAgICAgIGYgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc29jay5maWxlbm8ucmV0dXJuX3ZhbHVlID0gMTAKKyAgICAgICAgc29jay5zZW5kLnJldHVybl92YWx1ZSA9IDIKKworICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlciA9IG1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5fc29ja19zZW5kYWxsKGYsIEZhbHNlLCBzb2NrLCBiJ2RhdGEnKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgKDEwLCBzZWxmLmxvb3AuX3NvY2tfc2VuZGFsbCwgZiwgVHJ1ZSwgc29jaywgYid0YScpLAorICAgICAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIuY2FsbF9hcmdzWzBdKQorCisgICAgZGVmIHRlc3RfX3NvY2tfc2VuZGFsbF9ub25lKHNlbGYpOgorICAgICAgICBzb2NrID0gbW9jay5Nb2NrKCkKKworICAgICAgICBmID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNvY2suZmlsZW5vLnJldHVybl92YWx1ZSA9IDEwCisgICAgICAgIHNvY2suc2VuZC5yZXR1cm5fdmFsdWUgPSAwCisKKyAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIgPSBtb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuX3NvY2tfc2VuZGFsbChmLCBGYWxzZSwgc29jaywgYidkYXRhJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICgxMCwgc2VsZi5sb29wLl9zb2NrX3NlbmRhbGwsIGYsIFRydWUsIHNvY2ssIGInZGF0YScpLAorICAgICAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIuY2FsbF9hcmdzWzBdKQorCisgICAgZGVmIHRlc3Rfc29ja19jb25uZWN0KHNlbGYpOgorICAgICAgICBzb2NrID0gdGVzdF91dGlscy5tb2NrX25vbmJsb2NraW5nX3NvY2tldCgpCisgICAgICAgIHNlbGYubG9vcC5fc29ja19jb25uZWN0ID0gbW9jay5Nb2NrKCkKKworICAgICAgICBmID0gc2VsZi5sb29wLnNvY2tfY29ubmVjdChzb2NrLCAoJzEyNy4wLjAuMScsIDgwODApKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZiwgYXN5bmNpby5GdXR1cmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAoZiwgc29jaywgKCcxMjcuMC4wLjEnLCA4MDgwKSksCisgICAgICAgICAgICBzZWxmLmxvb3AuX3NvY2tfY29ubmVjdC5jYWxsX2FyZ3NbMF0pCisKKyAgICBkZWYgdGVzdF9zb2NrX2Nvbm5lY3RfdGltZW91dChzZWxmKToKKyAgICAgICAgIyBhc3luY2lvIGlzc3VlICMyMDU6IHNvY2tfY29ubmVjdCgpIG11c3QgdW5yZWdpc3RlciB0aGUgc29ja2V0IG9uCisgICAgICAgICMgdGltZW91dCBlcnJvcgorCisgICAgICAgICMgcHJlcGFyZSBtb2NrcworICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlciA9IG1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5yZW1vdmVfd3JpdGVyID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc29jayA9IHRlc3RfdXRpbHMubW9ja19ub25ibG9ja2luZ19zb2NrZXQoKQorICAgICAgICBzb2NrLmNvbm5lY3Quc2lkZV9lZmZlY3QgPSBCbG9ja2luZ0lPRXJyb3IKKworICAgICAgICAjIGZpcnN0IGNhbGwgdG8gc29ja19jb25uZWN0KCkgcmVnaXN0ZXJzIHRoZSBzb2NrZXQKKyAgICAgICAgZnV0ID0gc2VsZi5sb29wLnNvY2tfY29ubmVjdChzb2NrLCAoJzEyNy4wLjAuMScsIDgwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNvY2suY29ubmVjdC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmxvb3AuYWRkX3dyaXRlci5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGZ1dC5fY2FsbGJhY2tzKSwgMSkKKworICAgICAgICAjIG9uIHRpbWVvdXQsIHRoZSBzb2NrZXQgbXVzdCBiZSB1bnJlZ2lzdGVyZWQKKyAgICAgICAgc29jay5jb25uZWN0LnJlc2V0X21vY2soKQorICAgICAgICBmdXQuc2V0X2V4Y2VwdGlvbihhc3luY2lvLlRpbWVvdXRFcnJvcikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhhc3luY2lvLlRpbWVvdXRFcnJvcik6CisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGZ1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubG9vcC5yZW1vdmVfd3JpdGVyLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X19zb2NrX2Nvbm5lY3Qoc2VsZik6CisgICAgICAgIGYgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKworICAgICAgICBzb2NrID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc29jay5maWxlbm8ucmV0dXJuX3ZhbHVlID0gMTAKKworICAgICAgICBzZWxmLmxvb3AuX3NvY2tfY29ubmVjdChmLCBzb2NrLCAoJzEyNy4wLjAuMScsIDgwODApKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGYucmVzdWx0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzb2NrLmNvbm5lY3QuY2FsbGVkKQorCisgICAgZGVmIHRlc3RfX3NvY2tfY29ubmVjdF9jYl9jYW5jZWxsZWRfZnV0KHNlbGYpOgorICAgICAgICBzb2NrID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLnJlbW92ZV93cml0ZXIgPSBtb2NrLk1vY2soKQorCisgICAgICAgIGYgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZi5jYW5jZWwoKQorCisgICAgICAgIHNlbGYubG9vcC5fc29ja19jb25uZWN0X2NiKGYsIHNvY2ssICgnMTI3LjAuMC4xJywgODA4MCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc29jay5nZXRzb2Nrb3B0LmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X19zb2NrX2Nvbm5lY3Rfd3JpdGVyKHNlbGYpOgorICAgICAgICAjIGNoZWNrIHRoYXQgdGhlIGZkIGlzIHJlZ2lzdGVyZWQgYW5kIHRoZW4gdW5yZWdpc3RlcmVkCisgICAgICAgIHNlbGYubG9vcC5fcHJvY2Vzc19ldmVudHMgPSBtb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlciA9IG1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5yZW1vdmVfd3JpdGVyID0gbW9jay5Nb2NrKCkKKworICAgICAgICBzb2NrID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc29jay5maWxlbm8ucmV0dXJuX3ZhbHVlID0gMTAKKyAgICAgICAgc29jay5jb25uZWN0LnNpZGVfZWZmZWN0ID0gQmxvY2tpbmdJT0Vycm9yCisgICAgICAgIHNvY2suZ2V0c29ja29wdC5yZXR1cm5fdmFsdWUgPSAwCisgICAgICAgIGFkZHJlc3MgPSAoJzEyNy4wLjAuMScsIDgwODApCisKKyAgICAgICAgZiA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmxvb3AuX3NvY2tfY29ubmVjdChmLCBzb2NrLCBhZGRyZXNzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5sb29wLmFkZF93cml0ZXIuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEwLCBzZWxmLmxvb3AuYWRkX3dyaXRlci5jYWxsX2FyZ3NbMF1bMF0pCisKKyAgICAgICAgc2VsZi5sb29wLl9zb2NrX2Nvbm5lY3RfY2IoZiwgc29jaywgYWRkcmVzcykKKyAgICAgICAgIyBuZWVkIHRvIHJ1biB0aGUgZXZlbnQgbG9vcCB0byBleGVjdXRlIF9zb2NrX2Nvbm5lY3RfZG9uZSgpIGNhbGxiYWNrCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMTAsKSwgc2VsZi5sb29wLnJlbW92ZV93cml0ZXIuY2FsbF9hcmdzWzBdKQorCisgICAgZGVmIHRlc3RfX3NvY2tfY29ubmVjdF9jYl90cnlhZ2FpbihzZWxmKToKKyAgICAgICAgZiA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzb2NrID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc29jay5maWxlbm8ucmV0dXJuX3ZhbHVlID0gMTAKKyAgICAgICAgc29jay5nZXRzb2Nrb3B0LnJldHVybl92YWx1ZSA9IGVycm5vLkVBR0FJTgorCisgICAgICAgICMgY2hlY2sgdGhhdCB0aGUgZXhjZXB0aW9uIGlzIGhhbmRsZWQKKyAgICAgICAgc2VsZi5sb29wLl9zb2NrX2Nvbm5lY3RfY2IoZiwgc29jaywgKCcxMjcuMC4wLjEnLCA4MDgwKSkKKworICAgIGRlZiB0ZXN0X19zb2NrX2Nvbm5lY3RfY2JfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICBmID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNvY2sgPSBtb2NrLk1vY2soKQorICAgICAgICBzb2NrLmZpbGVuby5yZXR1cm5fdmFsdWUgPSAxMAorICAgICAgICBzb2NrLmdldHNvY2tvcHQucmV0dXJuX3ZhbHVlID0gZXJybm8uRU5PVENPTk4KKworICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3dyaXRlciA9IG1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5fc29ja19jb25uZWN0X2NiKGYsIHNvY2ssICgnMTI3LjAuMC4xJywgODA4MCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmLmV4Y2VwdGlvbigpLCBPU0Vycm9yKQorCisgICAgZGVmIHRlc3Rfc29ja19hY2NlcHQoc2VsZik6CisgICAgICAgIHNvY2sgPSB0ZXN0X3V0aWxzLm1vY2tfbm9uYmxvY2tpbmdfc29ja2V0KCkKKyAgICAgICAgc2VsZi5sb29wLl9zb2NrX2FjY2VwdCA9IG1vY2suTW9jaygpCisKKyAgICAgICAgZiA9IHNlbGYubG9vcC5zb2NrX2FjY2VwdChzb2NrKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZiwgYXN5bmNpby5GdXR1cmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAoZiwgRmFsc2UsIHNvY2spLCBzZWxmLmxvb3AuX3NvY2tfYWNjZXB0LmNhbGxfYXJnc1swXSkKKworICAgIGRlZiB0ZXN0X19zb2NrX2FjY2VwdChzZWxmKToKKyAgICAgICAgZiA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIGNvbm4gPSBtb2NrLk1vY2soKQorCisgICAgICAgIHNvY2sgPSBtb2NrLk1vY2soKQorICAgICAgICBzb2NrLmZpbGVuby5yZXR1cm5fdmFsdWUgPSAxMAorICAgICAgICBzb2NrLmFjY2VwdC5yZXR1cm5fdmFsdWUgPSBjb25uLCAoJzEyNy4wLjAuMScsIDEwMDApCisKKyAgICAgICAgc2VsZi5sb29wLl9zb2NrX2FjY2VwdChmLCBGYWxzZSwgc29jaykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChjb25uLCAoJzEyNy4wLjAuMScsIDEwMDApKSwgZi5yZXN1bHQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoRmFsc2UsKSwgY29ubi5zZXRibG9ja2luZy5jYWxsX2FyZ3NbMF0pCisKKyAgICBkZWYgdGVzdF9fc29ja19hY2NlcHRfY2FuY2VsZWRfZnV0KHNlbGYpOgorICAgICAgICBzb2NrID0gbW9jay5Nb2NrKCkKKworICAgICAgICBmID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGYuY2FuY2VsKCkKKworICAgICAgICBzZWxmLmxvb3AuX3NvY2tfYWNjZXB0KGYsIEZhbHNlLCBzb2NrKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNvY2suYWNjZXB0LmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X19zb2NrX2FjY2VwdF91bnJlZ2lzdGVyKHNlbGYpOgorICAgICAgICBzb2NrID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc29jay5maWxlbm8ucmV0dXJuX3ZhbHVlID0gMTAKKworICAgICAgICBmID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGYuY2FuY2VsKCkKKworICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3JlYWRlciA9IG1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5fc29ja19hY2NlcHQoZiwgVHJ1ZSwgc29jaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMTAsKSwgc2VsZi5sb29wLnJlbW92ZV9yZWFkZXIuY2FsbF9hcmdzWzBdKQorCisgICAgZGVmIHRlc3RfX3NvY2tfYWNjZXB0X3RyeWFnYWluKHNlbGYpOgorICAgICAgICBmID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNvY2sgPSBtb2NrLk1vY2soKQorICAgICAgICBzb2NrLmZpbGVuby5yZXR1cm5fdmFsdWUgPSAxMAorICAgICAgICBzb2NrLmFjY2VwdC5zaWRlX2VmZmVjdCA9IEJsb2NraW5nSU9FcnJvcgorCisgICAgICAgIHNlbGYubG9vcC5hZGRfcmVhZGVyID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLl9zb2NrX2FjY2VwdChmLCBGYWxzZSwgc29jaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICgxMCwgc2VsZi5sb29wLl9zb2NrX2FjY2VwdCwgZiwgVHJ1ZSwgc29jayksCisgICAgICAgICAgICBzZWxmLmxvb3AuYWRkX3JlYWRlci5jYWxsX2FyZ3NbMF0pCisKKyAgICBkZWYgdGVzdF9fc29ja19hY2NlcHRfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICBmID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNvY2sgPSBtb2NrLk1vY2soKQorICAgICAgICBzb2NrLmZpbGVuby5yZXR1cm5fdmFsdWUgPSAxMAorICAgICAgICBlcnIgPSBzb2NrLmFjY2VwdC5zaWRlX2VmZmVjdCA9IE9TRXJyb3IoKQorCisgICAgICAgIHNlbGYubG9vcC5fc29ja19hY2NlcHQoZiwgRmFsc2UsIHNvY2spCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZXJyLCBmLmV4Y2VwdGlvbigpKQorCisgICAgZGVmIHRlc3RfYWRkX3JlYWRlcihzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLl9zZWxlY3Rvci5nZXRfa2V5LnNpZGVfZWZmZWN0ID0gS2V5RXJyb3IKKyAgICAgICAgY2IgPSBsYW1iZGE6IFRydWUKKyAgICAgICAgc2VsZi5sb29wLmFkZF9yZWFkZXIoMSwgY2IpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubG9vcC5fc2VsZWN0b3IucmVnaXN0ZXIuY2FsbGVkKQorICAgICAgICBmZCwgbWFzaywgKHIsIHcpID0gc2VsZi5sb29wLl9zZWxlY3Rvci5yZWdpc3Rlci5jYWxsX2FyZ3NbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBmZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxlY3RvcnMuRVZFTlRfUkVBRCwgbWFzaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYiwgci5fY2FsbGJhY2spCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHcpCisKKyAgICBkZWYgdGVzdF9hZGRfcmVhZGVyX2V4aXN0aW5nKHNlbGYpOgorICAgICAgICByZWFkZXIgPSBtb2NrLk1vY2soKQorICAgICAgICB3cml0ZXIgPSBtb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuX3NlbGVjdG9yLmdldF9rZXkucmV0dXJuX3ZhbHVlID0gc2VsZWN0b3JzLlNlbGVjdG9yS2V5KAorICAgICAgICAgICAgMSwgMSwgc2VsZWN0b3JzLkVWRU5UX1dSSVRFLCAocmVhZGVyLCB3cml0ZXIpKQorICAgICAgICBjYiA9IGxhbWJkYTogVHJ1ZQorICAgICAgICBzZWxmLmxvb3AuYWRkX3JlYWRlcigxLCBjYikKKworICAgICAgICBzZWxmLmFzc2VydFRydWUocmVhZGVyLmNhbmNlbC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLl9zZWxlY3Rvci5yZWdpc3Rlci5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmxvb3AuX3NlbGVjdG9yLm1vZGlmeS5jYWxsZWQpCisgICAgICAgIGZkLCBtYXNrLCAociwgdykgPSBzZWxmLmxvb3AuX3NlbGVjdG9yLm1vZGlmeS5jYWxsX2FyZ3NbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBmZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxlY3RvcnMuRVZFTlRfV1JJVEUgfCBzZWxlY3RvcnMuRVZFTlRfUkVBRCwgbWFzaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYiwgci5fY2FsbGJhY2spCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod3JpdGVyLCB3KQorCisgICAgZGVmIHRlc3RfYWRkX3JlYWRlcl9leGlzdGluZ193cml0ZXIoc2VsZik6CisgICAgICAgIHdyaXRlciA9IG1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5fc2VsZWN0b3IuZ2V0X2tleS5yZXR1cm5fdmFsdWUgPSBzZWxlY3RvcnMuU2VsZWN0b3JLZXkoCisgICAgICAgICAgICAxLCAxLCBzZWxlY3RvcnMuRVZFTlRfV1JJVEUsIChOb25lLCB3cml0ZXIpKQorICAgICAgICBjYiA9IGxhbWJkYTogVHJ1ZQorICAgICAgICBzZWxmLmxvb3AuYWRkX3JlYWRlcigxLCBjYikKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5fc2VsZWN0b3IucmVnaXN0ZXIuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5sb29wLl9zZWxlY3Rvci5tb2RpZnkuY2FsbGVkKQorICAgICAgICBmZCwgbWFzaywgKHIsIHcpID0gc2VsZi5sb29wLl9zZWxlY3Rvci5tb2RpZnkuY2FsbF9hcmdzWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgZmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZWN0b3JzLkVWRU5UX1dSSVRFIHwgc2VsZWN0b3JzLkVWRU5UX1JFQUQsIG1hc2spCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2IsIHIuX2NhbGxiYWNrKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdyaXRlciwgdykKKworICAgIGRlZiB0ZXN0X3JlbW92ZV9yZWFkZXIoc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5fc2VsZWN0b3IuZ2V0X2tleS5yZXR1cm5fdmFsdWUgPSBzZWxlY3RvcnMuU2VsZWN0b3JLZXkoCisgICAgICAgICAgICAxLCAxLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCwgKE5vbmUsIE5vbmUpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5yZW1vdmVfcmVhZGVyKDEpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmxvb3AuX3NlbGVjdG9yLnVucmVnaXN0ZXIuY2FsbGVkKQorCisgICAgZGVmIHRlc3RfcmVtb3ZlX3JlYWRlcl9yZWFkX3dyaXRlKHNlbGYpOgorICAgICAgICByZWFkZXIgPSBtb2NrLk1vY2soKQorICAgICAgICB3cml0ZXIgPSBtb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuX3NlbGVjdG9yLmdldF9rZXkucmV0dXJuX3ZhbHVlID0gc2VsZWN0b3JzLlNlbGVjdG9yS2V5KAorICAgICAgICAgICAgMSwgMSwgc2VsZWN0b3JzLkVWRU5UX1JFQUQgfCBzZWxlY3RvcnMuRVZFTlRfV1JJVEUsCisgICAgICAgICAgICAocmVhZGVyLCB3cml0ZXIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoCisgICAgICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3JlYWRlcigxKSkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5fc2VsZWN0b3IudW5yZWdpc3Rlci5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAoMSwgc2VsZWN0b3JzLkVWRU5UX1dSSVRFLCAoTm9uZSwgd3JpdGVyKSksCisgICAgICAgICAgICBzZWxmLmxvb3AuX3NlbGVjdG9yLm1vZGlmeS5jYWxsX2FyZ3NbMF0pCisKKyAgICBkZWYgdGVzdF9yZW1vdmVfcmVhZGVyX3Vua25vd24oc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5fc2VsZWN0b3IuZ2V0X2tleS5zaWRlX2VmZmVjdCA9IEtleUVycm9yCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoCisgICAgICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3JlYWRlcigxKSkKKworICAgIGRlZiB0ZXN0X2FkZF93cml0ZXIoc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5fc2VsZWN0b3IuZ2V0X2tleS5zaWRlX2VmZmVjdCA9IEtleUVycm9yCisgICAgICAgIGNiID0gbGFtYmRhOiBUcnVlCisgICAgICAgIHNlbGYubG9vcC5hZGRfd3JpdGVyKDEsIGNiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmxvb3AuX3NlbGVjdG9yLnJlZ2lzdGVyLmNhbGxlZCkKKyAgICAgICAgZmQsIG1hc2ssIChyLCB3KSA9IHNlbGYubG9vcC5fc2VsZWN0b3IucmVnaXN0ZXIuY2FsbF9hcmdzWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgZmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZWN0b3JzLkVWRU5UX1dSSVRFLCBtYXNrKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNiLCB3Ll9jYWxsYmFjaykKKworICAgIGRlZiB0ZXN0X2FkZF93cml0ZXJfZXhpc3Rpbmcoc2VsZik6CisgICAgICAgIHJlYWRlciA9IG1vY2suTW9jaygpCisgICAgICAgIHdyaXRlciA9IG1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5fc2VsZWN0b3IuZ2V0X2tleS5yZXR1cm5fdmFsdWUgPSBzZWxlY3RvcnMuU2VsZWN0b3JLZXkoCisgICAgICAgICAgICAxLCAxLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCwgKHJlYWRlciwgd3JpdGVyKSkKKyAgICAgICAgY2IgPSBsYW1iZGE6IFRydWUKKyAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIoMSwgY2IpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdyaXRlci5jYW5jZWwuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5fc2VsZWN0b3IucmVnaXN0ZXIuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5sb29wLl9zZWxlY3Rvci5tb2RpZnkuY2FsbGVkKQorICAgICAgICBmZCwgbWFzaywgKHIsIHcpID0gc2VsZi5sb29wLl9zZWxlY3Rvci5tb2RpZnkuY2FsbF9hcmdzWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgZmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZWN0b3JzLkVWRU5UX1dSSVRFIHwgc2VsZWN0b3JzLkVWRU5UX1JFQUQsIG1hc2spCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhZGVyLCByKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNiLCB3Ll9jYWxsYmFjaykKKworICAgIGRlZiB0ZXN0X3JlbW92ZV93cml0ZXIoc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5fc2VsZWN0b3IuZ2V0X2tleS5yZXR1cm5fdmFsdWUgPSBzZWxlY3RvcnMuU2VsZWN0b3JLZXkoCisgICAgICAgICAgICAxLCAxLCBzZWxlY3RvcnMuRVZFTlRfV1JJVEUsIChOb25lLCBOb25lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3AucmVtb3ZlX3dyaXRlcigxKSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5sb29wLl9zZWxlY3Rvci51bnJlZ2lzdGVyLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X3JlbW92ZV93cml0ZXJfcmVhZF93cml0ZShzZWxmKToKKyAgICAgICAgcmVhZGVyID0gbW9jay5Nb2NrKCkKKyAgICAgICAgd3JpdGVyID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLl9zZWxlY3Rvci5nZXRfa2V5LnJldHVybl92YWx1ZSA9IHNlbGVjdG9ycy5TZWxlY3RvcktleSgKKyAgICAgICAgICAgIDEsIDEsIHNlbGVjdG9ycy5FVkVOVF9SRUFEIHwgc2VsZWN0b3JzLkVWRU5UX1dSSVRFLAorICAgICAgICAgICAgKHJlYWRlciwgd3JpdGVyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKAorICAgICAgICAgICAgc2VsZi5sb29wLnJlbW92ZV93cml0ZXIoMSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3AuX3NlbGVjdG9yLnVucmVnaXN0ZXIuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgKDEsIHNlbGVjdG9ycy5FVkVOVF9SRUFELCAocmVhZGVyLCBOb25lKSksCisgICAgICAgICAgICBzZWxmLmxvb3AuX3NlbGVjdG9yLm1vZGlmeS5jYWxsX2FyZ3NbMF0pCisKKyAgICBkZWYgdGVzdF9yZW1vdmVfd3JpdGVyX3Vua25vd24oc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5fc2VsZWN0b3IuZ2V0X2tleS5zaWRlX2VmZmVjdCA9IEtleUVycm9yCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoCisgICAgICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3dyaXRlcigxKSkKKworICAgIGRlZiB0ZXN0X3Byb2Nlc3NfZXZlbnRzX3JlYWQoc2VsZik6CisgICAgICAgIHJlYWRlciA9IG1vY2suTW9jaygpCisgICAgICAgIHJlYWRlci5fY2FuY2VsbGVkID0gRmFsc2UKKworICAgICAgICBzZWxmLmxvb3AuX2FkZF9jYWxsYmFjayA9IG1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5fcHJvY2Vzc19ldmVudHMoCisgICAgICAgICAgICBbKHNlbGVjdG9ycy5TZWxlY3RvcktleSgKKyAgICAgICAgICAgICAgICAxLCAxLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCwgKHJlYWRlciwgTm9uZSkpLAorICAgICAgICAgICAgICBzZWxlY3RvcnMuRVZFTlRfUkVBRCldKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5sb29wLl9hZGRfY2FsbGJhY2suY2FsbGVkKQorICAgICAgICBzZWxmLmxvb3AuX2FkZF9jYWxsYmFjay5hc3NlcnRfY2FsbGVkX3dpdGgocmVhZGVyKQorCisgICAgZGVmIHRlc3RfcHJvY2Vzc19ldmVudHNfcmVhZF9jYW5jZWxsZWQoc2VsZik6CisgICAgICAgIHJlYWRlciA9IG1vY2suTW9jaygpCisgICAgICAgIHJlYWRlci5jYW5jZWxsZWQgPSBUcnVlCisKKyAgICAgICAgc2VsZi5sb29wLnJlbW92ZV9yZWFkZXIgPSBtb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuX3Byb2Nlc3NfZXZlbnRzKAorICAgICAgICAgICAgWyhzZWxlY3RvcnMuU2VsZWN0b3JLZXkoCisgICAgICAgICAgICAgICAgMSwgMSwgc2VsZWN0b3JzLkVWRU5UX1JFQUQsIChyZWFkZXIsIE5vbmUpKSwKKyAgICAgICAgICAgICBzZWxlY3RvcnMuRVZFTlRfUkVBRCldKQorICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3JlYWRlci5hc3NlcnRfY2FsbGVkX3dpdGgoMSkKKworICAgIGRlZiB0ZXN0X3Byb2Nlc3NfZXZlbnRzX3dyaXRlKHNlbGYpOgorICAgICAgICB3cml0ZXIgPSBtb2NrLk1vY2soKQorICAgICAgICB3cml0ZXIuX2NhbmNlbGxlZCA9IEZhbHNlCisKKyAgICAgICAgc2VsZi5sb29wLl9hZGRfY2FsbGJhY2sgPSBtb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuX3Byb2Nlc3NfZXZlbnRzKAorICAgICAgICAgICAgWyhzZWxlY3RvcnMuU2VsZWN0b3JLZXkoMSwgMSwgc2VsZWN0b3JzLkVWRU5UX1dSSVRFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKE5vbmUsIHdyaXRlcikpLAorICAgICAgICAgICAgICBzZWxlY3RvcnMuRVZFTlRfV1JJVEUpXSkKKyAgICAgICAgc2VsZi5sb29wLl9hZGRfY2FsbGJhY2suYXNzZXJ0X2NhbGxlZF93aXRoKHdyaXRlcikKKworICAgIGRlZiB0ZXN0X3Byb2Nlc3NfZXZlbnRzX3dyaXRlX2NhbmNlbGxlZChzZWxmKToKKyAgICAgICAgd3JpdGVyID0gbW9jay5Nb2NrKCkKKyAgICAgICAgd3JpdGVyLmNhbmNlbGxlZCA9IFRydWUKKyAgICAgICAgc2VsZi5sb29wLnJlbW92ZV93cml0ZXIgPSBtb2NrLk1vY2soKQorCisgICAgICAgIHNlbGYubG9vcC5fcHJvY2Vzc19ldmVudHMoCisgICAgICAgICAgICBbKHNlbGVjdG9ycy5TZWxlY3RvcktleSgxLCAxLCBzZWxlY3RvcnMuRVZFTlRfV1JJVEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoTm9uZSwgd3JpdGVyKSksCisgICAgICAgICAgICAgIHNlbGVjdG9ycy5FVkVOVF9XUklURSldKQorICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3dyaXRlci5hc3NlcnRfY2FsbGVkX3dpdGgoMSkKKworCitjbGFzcyBTZWxlY3RvclRyYW5zcG9ydFRlc3RzKHRlc3RfdXRpbHMuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AgPSBzZWxmLm5ld190ZXN0X2xvb3AoKQorICAgICAgICBzZWxmLnByb3RvY29sID0gdGVzdF91dGlscy5tYWtlX3Rlc3RfcHJvdG9jb2woYXN5bmNpby5Qcm90b2NvbCkKKyAgICAgICAgc2VsZi5zb2NrID0gbW9jay5Nb2NrKHNvY2tldC5zb2NrZXQpCisgICAgICAgIHNlbGYuc29jay5maWxlbm8ucmV0dXJuX3ZhbHVlID0gNworCisgICAgZGVmIGNyZWF0ZV90cmFuc3BvcnQoc2VsZik6CisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvclRyYW5zcG9ydChzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChjbG9zZV90cmFuc3BvcnQsIHRyYW5zcG9ydCkKKyAgICAgICAgcmV0dXJuIHRyYW5zcG9ydAorCisgICAgZGVmIHRlc3RfY3RvcihzZWxmKToKKyAgICAgICAgdHIgPSBzZWxmLmNyZWF0ZV90cmFuc3BvcnQoKQorICAgICAgICBzZWxmLmFzc2VydElzKHRyLl9sb29wLCBzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0SXModHIuX3NvY2ssIHNlbGYuc29jaykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0ci5fc29ja19mZCwgNykKKworICAgIGRlZiB0ZXN0X2Fib3J0KHNlbGYpOgorICAgICAgICB0ciA9IHNlbGYuY3JlYXRlX3RyYW5zcG9ydCgpCisgICAgICAgIHRyLl9mb3JjZV9jbG9zZSA9IG1vY2suTW9jaygpCisKKyAgICAgICAgdHIuYWJvcnQoKQorICAgICAgICB0ci5fZm9yY2VfY2xvc2UuYXNzZXJ0X2NhbGxlZF93aXRoKE5vbmUpCisKKyAgICBkZWYgdGVzdF9jbG9zZShzZWxmKToKKyAgICAgICAgdHIgPSBzZWxmLmNyZWF0ZV90cmFuc3BvcnQoKQorICAgICAgICB0ci5jbG9zZSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRyLmlzX2Nsb3NpbmcoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBzZWxmLmxvb3AucmVtb3ZlX3JlYWRlcl9jb3VudFs3XSkKKyAgICAgICAgc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QoTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ci5fY29ubl9sb3N0LCAxKQorCisgICAgICAgIHRyLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ci5fY29ubl9sb3N0LCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHNlbGYubG9vcC5yZW1vdmVfcmVhZGVyX2NvdW50WzddKQorCisgICAgZGVmIHRlc3RfY2xvc2Vfd3JpdGVfYnVmZmVyKHNlbGYpOgorICAgICAgICB0ciA9IHNlbGYuY3JlYXRlX3RyYW5zcG9ydCgpCisgICAgICAgIHRyLl9idWZmZXIuZXh0ZW5kKGInZGF0YScpCisgICAgICAgIHRyLmNsb3NlKCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5yZWFkZXJzKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnByb3RvY29sLmNvbm5lY3Rpb25fbG9zdC5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF9mb3JjZV9jbG9zZShzZWxmKToKKyAgICAgICAgdHIgPSBzZWxmLmNyZWF0ZV90cmFuc3BvcnQoKQorICAgICAgICB0ci5fYnVmZmVyLmV4dGVuZChiJzEnKQorICAgICAgICBzZWxmLmxvb3AuYWRkX3JlYWRlcig3LCBtb2NrLnNlbnRpbmVsKQorICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlcig3LCBtb2NrLnNlbnRpbmVsKQorICAgICAgICB0ci5fZm9yY2VfY2xvc2UoTm9uZSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUodHIuaXNfY2xvc2luZygpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyLl9idWZmZXIsIGxpc3RfdG9fYnVmZmVyKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLnJlYWRlcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLndyaXRlcnMpCisKKyAgICAgICAgIyBzZWNvbmQgY2xvc2Ugc2hvdWxkIG5vdCByZW1vdmUgcmVhZGVyCisgICAgICAgIHRyLl9mb3JjZV9jbG9zZShOb25lKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5yZWFkZXJzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHNlbGYubG9vcC5yZW1vdmVfcmVhZGVyX2NvdW50WzddKQorCisgICAgQG1vY2sucGF0Y2goJ2FzeW5jaW8ubG9nLmxvZ2dlci5lcnJvcicpCisgICAgZGVmIHRlc3RfZmF0YWxfZXJyb3Ioc2VsZiwgbV9leGMpOgorICAgICAgICBleGMgPSBPU0Vycm9yKCkKKyAgICAgICAgdHIgPSBzZWxmLmNyZWF0ZV90cmFuc3BvcnQoKQorICAgICAgICB0ci5fZm9yY2VfY2xvc2UgPSBtb2NrLk1vY2soKQorICAgICAgICB0ci5fZmF0YWxfZXJyb3IoZXhjKQorCisgICAgICAgIG1fZXhjLmFzc2VydF9jYWxsZWRfd2l0aCgKKyAgICAgICAgICAgIHRlc3RfdXRpbHMuTW9ja1BhdHRlcm4oCisgICAgICAgICAgICAgICAgJ0ZhdGFsIGVycm9yIG9uIHRyYW5zcG9ydFxucHJvdG9jb2w6LipcbnRyYW5zcG9ydDouKicpLAorICAgICAgICAgICAgZXhjX2luZm89KE9TRXJyb3IsIE1PQ0tfQU5ZLCBNT0NLX0FOWSkpCisKKyAgICAgICAgdHIuX2ZvcmNlX2Nsb3NlLmFzc2VydF9jYWxsZWRfd2l0aChleGMpCisKKyAgICBkZWYgdGVzdF9jb25uZWN0aW9uX2xvc3Qoc2VsZik6CisgICAgICAgIGV4YyA9IE9TRXJyb3IoKQorICAgICAgICB0ciA9IHNlbGYuY3JlYXRlX3RyYW5zcG9ydCgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHRyLl9wcm90b2NvbCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUodHIuX2xvb3ApCisgICAgICAgIHRyLl9jYWxsX2Nvbm5lY3Rpb25fbG9zdChleGMpCisKKyAgICAgICAgc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QuYXNzZXJ0X2NhbGxlZF93aXRoKGV4YykKKyAgICAgICAgc2VsZi5zb2NrLmNsb3NlLmFzc2VydF9jYWxsZWRfd2l0aCgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHRyLl9zb2NrKQorCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHRyLl9wcm90b2NvbCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodHIuX2xvb3ApCisKKworY2xhc3MgU2VsZWN0b3JTb2NrZXRUcmFuc3BvcnRUZXN0cyh0ZXN0X3V0aWxzLlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5sb29wID0gc2VsZi5uZXdfdGVzdF9sb29wKCkKKyAgICAgICAgc2VsZi5wcm90b2NvbCA9IHRlc3RfdXRpbHMubWFrZV90ZXN0X3Byb3RvY29sKGFzeW5jaW8uUHJvdG9jb2wpCisgICAgICAgIHNlbGYuc29jayA9IG1vY2suTW9jayhzb2NrZXQuc29ja2V0KQorICAgICAgICBzZWxmLnNvY2tfZmQgPSBzZWxmLnNvY2suZmlsZW5vLnJldHVybl92YWx1ZSA9IDcKKworICAgIGRlZiBzb2NrZXRfdHJhbnNwb3J0KHNlbGYsIHdhaXRlcj1Ob25lKToKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yU29ja2V0VHJhbnNwb3J0KHNlbGYubG9vcCwgc2VsZi5zb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wcm90b2NvbCwgd2FpdGVyPXdhaXRlcikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGNsb3NlX3RyYW5zcG9ydCwgdHJhbnNwb3J0KQorICAgICAgICByZXR1cm4gdHJhbnNwb3J0CisKKyAgICBkZWYgdGVzdF9jdG9yKHNlbGYpOgorICAgICAgICB3YWl0ZXIgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdHIgPSBzZWxmLnNvY2tldF90cmFuc3BvcnQod2FpdGVyPXdhaXRlcikKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh3YWl0ZXIpCisKKyAgICAgICAgc2VsZi5sb29wLmFzc2VydF9yZWFkZXIoNywgdHIuX3JlYWRfcmVhZHkpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLnByb3RvY29sLmNvbm5lY3Rpb25fbWFkZS5hc3NlcnRfY2FsbGVkX3dpdGgodHIpCisKKyAgICBkZWYgdGVzdF9jdG9yX3dpdGhfd2FpdGVyKHNlbGYpOgorICAgICAgICB3YWl0ZXIgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5zb2NrZXRfdHJhbnNwb3J0KHdhaXRlcj13YWl0ZXIpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUod2FpdGVyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHdhaXRlci5yZXN1bHQoKSkKKworICAgIGRlZiB0ZXN0X3BhdXNlX3Jlc3VtZV9yZWFkaW5nKHNlbGYpOgorICAgICAgICB0ciA9IHNlbGYuc29ja2V0X3RyYW5zcG9ydCgpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRyLl9wYXVzZWQpCisgICAgICAgIHNlbGYubG9vcC5hc3NlcnRfcmVhZGVyKDcsIHRyLl9yZWFkX3JlYWR5KQorICAgICAgICB0ci5wYXVzZV9yZWFkaW5nKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRyLl9wYXVzZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoNyBpbiBzZWxmLmxvb3AucmVhZGVycykKKyAgICAgICAgdHIucmVzdW1lX3JlYWRpbmcoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRyLl9wYXVzZWQpCisgICAgICAgIHNlbGYubG9vcC5hc3NlcnRfcmVhZGVyKDcsIHRyLl9yZWFkX3JlYWR5KQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvcik6CisgICAgICAgICAgICB0ci5yZXN1bWVfcmVhZGluZygpCisKKyAgICBkZWYgdGVzdF9yZWFkX3JlYWR5KHNlbGYpOgorICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLnNvY2tldF90cmFuc3BvcnQoKQorCisgICAgICAgIHNlbGYuc29jay5yZWN2LnJldHVybl92YWx1ZSA9IGInZGF0YScKKyAgICAgICAgdHJhbnNwb3J0Ll9yZWFkX3JlYWR5KCkKKworICAgICAgICBzZWxmLnByb3RvY29sLmRhdGFfcmVjZWl2ZWQuYXNzZXJ0X2NhbGxlZF93aXRoKGInZGF0YScpCisKKyAgICBkZWYgdGVzdF9yZWFkX3JlYWR5X2VvZihzZWxmKToKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5zb2NrZXRfdHJhbnNwb3J0KCkKKyAgICAgICAgdHJhbnNwb3J0LmNsb3NlID0gbW9jay5Nb2NrKCkKKworICAgICAgICBzZWxmLnNvY2sucmVjdi5yZXR1cm5fdmFsdWUgPSBiJycKKyAgICAgICAgdHJhbnNwb3J0Ll9yZWFkX3JlYWR5KCkKKworICAgICAgICBzZWxmLnByb3RvY29sLmVvZl9yZWNlaXZlZC5hc3NlcnRfY2FsbGVkX3dpdGgoKQorICAgICAgICB0cmFuc3BvcnQuY2xvc2UuYXNzZXJ0X2NhbGxlZF93aXRoKCkKKworICAgIGRlZiB0ZXN0X3JlYWRfcmVhZHlfZW9mX2tlZXBfb3BlbihzZWxmKToKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5zb2NrZXRfdHJhbnNwb3J0KCkKKyAgICAgICAgdHJhbnNwb3J0LmNsb3NlID0gbW9jay5Nb2NrKCkKKworICAgICAgICBzZWxmLnNvY2sucmVjdi5yZXR1cm5fdmFsdWUgPSBiJycKKyAgICAgICAgc2VsZi5wcm90b2NvbC5lb2ZfcmVjZWl2ZWQucmV0dXJuX3ZhbHVlID0gVHJ1ZQorICAgICAgICB0cmFuc3BvcnQuX3JlYWRfcmVhZHkoKQorCisgICAgICAgIHNlbGYucHJvdG9jb2wuZW9mX3JlY2VpdmVkLmFzc2VydF9jYWxsZWRfd2l0aCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHJhbnNwb3J0LmNsb3NlLmNhbGxlZCkKKworICAgIEBtb2NrLnBhdGNoKCdsb2dnaW5nLmV4Y2VwdGlvbicpCisgICAgZGVmIHRlc3RfcmVhZF9yZWFkeV90cnlhZ2FpbihzZWxmLCBtX2V4Yyk6CisgICAgICAgIHNlbGYuc29jay5yZWN2LnNpZGVfZWZmZWN0ID0gQmxvY2tpbmdJT0Vycm9yCisKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5zb2NrZXRfdHJhbnNwb3J0KCkKKyAgICAgICAgdHJhbnNwb3J0Ll9mYXRhbF9lcnJvciA9IG1vY2suTW9jaygpCisgICAgICAgIHRyYW5zcG9ydC5fcmVhZF9yZWFkeSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0cmFuc3BvcnQuX2ZhdGFsX2Vycm9yLmNhbGxlZCkKKworICAgIEBtb2NrLnBhdGNoKCdsb2dnaW5nLmV4Y2VwdGlvbicpCisgICAgZGVmIHRlc3RfcmVhZF9yZWFkeV90cnlhZ2Fpbl9pbnRlcnJ1cHRlZChzZWxmLCBtX2V4Yyk6CisgICAgICAgIHNlbGYuc29jay5yZWN2LnNpZGVfZWZmZWN0ID0gSW50ZXJydXB0ZWRFcnJvcgorCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuc29ja2V0X3RyYW5zcG9ydCgpCisgICAgICAgIHRyYW5zcG9ydC5fZmF0YWxfZXJyb3IgPSBtb2NrLk1vY2soKQorICAgICAgICB0cmFuc3BvcnQuX3JlYWRfcmVhZHkoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHJhbnNwb3J0Ll9mYXRhbF9lcnJvci5jYWxsZWQpCisKKyAgICBAbW9jay5wYXRjaCgnbG9nZ2luZy5leGNlcHRpb24nKQorICAgIGRlZiB0ZXN0X3JlYWRfcmVhZHlfY29ubl9yZXNldChzZWxmLCBtX2V4Yyk6CisgICAgICAgIGVyciA9IHNlbGYuc29jay5yZWN2LnNpZGVfZWZmZWN0ID0gQ29ubmVjdGlvblJlc2V0RXJyb3IoKQorCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuc29ja2V0X3RyYW5zcG9ydCgpCisgICAgICAgIHRyYW5zcG9ydC5fZm9yY2VfY2xvc2UgPSBtb2NrLk1vY2soKQorICAgICAgICB3aXRoIHRlc3RfdXRpbHMuZGlzYWJsZV9sb2dnZXIoKToKKyAgICAgICAgICAgIHRyYW5zcG9ydC5fcmVhZF9yZWFkeSgpCisgICAgICAgIHRyYW5zcG9ydC5fZm9yY2VfY2xvc2UuYXNzZXJ0X2NhbGxlZF93aXRoKGVycikKKworICAgIEBtb2NrLnBhdGNoKCdsb2dnaW5nLmV4Y2VwdGlvbicpCisgICAgZGVmIHRlc3RfcmVhZF9yZWFkeV9lcnIoc2VsZiwgbV9leGMpOgorICAgICAgICBlcnIgPSBzZWxmLnNvY2sucmVjdi5zaWRlX2VmZmVjdCA9IE9TRXJyb3IoKQorCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuc29ja2V0X3RyYW5zcG9ydCgpCisgICAgICAgIHRyYW5zcG9ydC5fZmF0YWxfZXJyb3IgPSBtb2NrLk1vY2soKQorICAgICAgICB0cmFuc3BvcnQuX3JlYWRfcmVhZHkoKQorCisgICAgICAgIHRyYW5zcG9ydC5fZmF0YWxfZXJyb3IuYXNzZXJ0X2NhbGxlZF93aXRoKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdGYXRhbCByZWFkIGVycm9yIG9uIHNvY2tldCB0cmFuc3BvcnQnKQorCisgICAgZGVmIHRlc3Rfd3JpdGUoc2VsZik6CisgICAgICAgIGRhdGEgPSBiJ2RhdGEnCisgICAgICAgIHNlbGYuc29jay5zZW5kLnJldHVybl92YWx1ZSA9IGxlbihkYXRhKQorCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuc29ja2V0X3RyYW5zcG9ydCgpCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShkYXRhKQorICAgICAgICBzZWxmLnNvY2suc2VuZC5hc3NlcnRfY2FsbGVkX3dpdGgoZGF0YSkKKworICAgIGRlZiB0ZXN0X3dyaXRlX2J5dGVhcnJheShzZWxmKToKKyAgICAgICAgZGF0YSA9IGJ5dGVhcnJheShiJ2RhdGEnKQorICAgICAgICBzZWxmLnNvY2suc2VuZC5yZXR1cm5fdmFsdWUgPSBsZW4oZGF0YSkKKworICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLnNvY2tldF90cmFuc3BvcnQoKQorICAgICAgICB0cmFuc3BvcnQud3JpdGUoZGF0YSkKKyAgICAgICAgc2VsZi5zb2NrLnNlbmQuYXNzZXJ0X2NhbGxlZF93aXRoKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgYnl0ZWFycmF5KGInZGF0YScpKSAgIyBIYXNuJ3QgYmVlbiBtdXRhdGVkLgorCisgICAgZGVmIHRlc3Rfd3JpdGVfbWVtb3J5dmlldyhzZWxmKToKKyAgICAgICAgZGF0YSA9IG1lbW9yeXZpZXcoYidkYXRhJykKKyAgICAgICAgc2VsZi5zb2NrLnNlbmQucmV0dXJuX3ZhbHVlID0gbGVuKGRhdGEpCisKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5zb2NrZXRfdHJhbnNwb3J0KCkKKyAgICAgICAgdHJhbnNwb3J0LndyaXRlKGRhdGEpCisgICAgICAgIHNlbGYuc29jay5zZW5kLmFzc2VydF9jYWxsZWRfd2l0aChkYXRhKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfbm9fZGF0YShzZWxmKToKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5zb2NrZXRfdHJhbnNwb3J0KCkKKyAgICAgICAgdHJhbnNwb3J0Ll9idWZmZXIuZXh0ZW5kKGInZGF0YScpCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShiJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5zb2NrLnNlbmQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3RfdG9fYnVmZmVyKFtiJ2RhdGEnXSksIHRyYW5zcG9ydC5fYnVmZmVyKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfYnVmZmVyKHNlbGYpOgorICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLnNvY2tldF90cmFuc3BvcnQoKQorICAgICAgICB0cmFuc3BvcnQuX2J1ZmZlci5leHRlbmQoYidkYXRhMScpCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShiJ2RhdGEyJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnNvY2suc2VuZC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdF90b19idWZmZXIoW2InZGF0YTEnLCBiJ2RhdGEyJ10pLAorICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zcG9ydC5fYnVmZmVyKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfcGFydGlhbChzZWxmKToKKyAgICAgICAgZGF0YSA9IGInZGF0YScKKyAgICAgICAgc2VsZi5zb2NrLnNlbmQucmV0dXJuX3ZhbHVlID0gMgorCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuc29ja2V0X3RyYW5zcG9ydCgpCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShkYXRhKQorCisgICAgICAgIHNlbGYubG9vcC5hc3NlcnRfd3JpdGVyKDcsIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdF90b19idWZmZXIoW2IndGEnXSksIHRyYW5zcG9ydC5fYnVmZmVyKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfcGFydGlhbF9ieXRlYXJyYXkoc2VsZik6CisgICAgICAgIGRhdGEgPSBieXRlYXJyYXkoYidkYXRhJykKKyAgICAgICAgc2VsZi5zb2NrLnNlbmQucmV0dXJuX3ZhbHVlID0gMgorCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuc29ja2V0X3RyYW5zcG9ydCgpCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShkYXRhKQorCisgICAgICAgIHNlbGYubG9vcC5hc3NlcnRfd3JpdGVyKDcsIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdF90b19idWZmZXIoW2IndGEnXSksIHRyYW5zcG9ydC5fYnVmZmVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIGJ5dGVhcnJheShiJ2RhdGEnKSkgICMgSGFzbid0IGJlZW4gbXV0YXRlZC4KKworICAgIGRlZiB0ZXN0X3dyaXRlX3BhcnRpYWxfbWVtb3J5dmlldyhzZWxmKToKKyAgICAgICAgZGF0YSA9IG1lbW9yeXZpZXcoYidkYXRhJykKKyAgICAgICAgc2VsZi5zb2NrLnNlbmQucmV0dXJuX3ZhbHVlID0gMgorCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuc29ja2V0X3RyYW5zcG9ydCgpCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShkYXRhKQorCisgICAgICAgIHNlbGYubG9vcC5hc3NlcnRfd3JpdGVyKDcsIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdF90b19idWZmZXIoW2IndGEnXSksIHRyYW5zcG9ydC5fYnVmZmVyKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfcGFydGlhbF9ub25lKHNlbGYpOgorICAgICAgICBkYXRhID0gYidkYXRhJworICAgICAgICBzZWxmLnNvY2suc2VuZC5yZXR1cm5fdmFsdWUgPSAwCisgICAgICAgIHNlbGYuc29jay5maWxlbm8ucmV0dXJuX3ZhbHVlID0gNworCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuc29ja2V0X3RyYW5zcG9ydCgpCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShkYXRhKQorCisgICAgICAgIHNlbGYubG9vcC5hc3NlcnRfd3JpdGVyKDcsIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdF90b19idWZmZXIoW2InZGF0YSddKSwgdHJhbnNwb3J0Ll9idWZmZXIpCisKKyAgICBkZWYgdGVzdF93cml0ZV90cnlhZ2FpbihzZWxmKToKKyAgICAgICAgc2VsZi5zb2NrLnNlbmQuc2lkZV9lZmZlY3QgPSBCbG9ja2luZ0lPRXJyb3IKKworICAgICAgICBkYXRhID0gYidkYXRhJworICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLnNvY2tldF90cmFuc3BvcnQoKQorICAgICAgICB0cmFuc3BvcnQud3JpdGUoZGF0YSkKKworICAgICAgICBzZWxmLmxvb3AuYXNzZXJ0X3dyaXRlcig3LCB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3RfdG9fYnVmZmVyKFtiJ2RhdGEnXSksIHRyYW5zcG9ydC5fYnVmZmVyKQorCisgICAgQG1vY2sucGF0Y2goJ2FzeW5jaW8uc2VsZWN0b3JfZXZlbnRzLmxvZ2dlcicpCisgICAgZGVmIHRlc3Rfd3JpdGVfZXhjZXB0aW9uKHNlbGYsIG1fbG9nKToKKyAgICAgICAgZXJyID0gc2VsZi5zb2NrLnNlbmQuc2lkZV9lZmZlY3QgPSBPU0Vycm9yKCkKKworICAgICAgICBkYXRhID0gYidkYXRhJworICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLnNvY2tldF90cmFuc3BvcnQoKQorICAgICAgICB0cmFuc3BvcnQuX2ZhdGFsX2Vycm9yID0gbW9jay5Nb2NrKCkKKyAgICAgICAgdHJhbnNwb3J0LndyaXRlKGRhdGEpCisgICAgICAgIHRyYW5zcG9ydC5fZmF0YWxfZXJyb3IuYXNzZXJ0X2NhbGxlZF93aXRoKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdGYXRhbCB3cml0ZSBlcnJvciBvbiBzb2NrZXQgdHJhbnNwb3J0JykKKyAgICAgICAgdHJhbnNwb3J0Ll9jb25uX2xvc3QgPSAxCisKKyAgICAgICAgc2VsZi5zb2NrLnJlc2V0X21vY2soKQorICAgICAgICB0cmFuc3BvcnQud3JpdGUoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnNvY2suc2VuZC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJhbnNwb3J0Ll9jb25uX2xvc3QsIDIpCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShkYXRhKQorICAgICAgICB0cmFuc3BvcnQud3JpdGUoZGF0YSkKKyAgICAgICAgdHJhbnNwb3J0LndyaXRlKGRhdGEpCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShkYXRhKQorICAgICAgICBtX2xvZy53YXJuaW5nLmFzc2VydF9jYWxsZWRfd2l0aCgnc29ja2V0LnNlbmQoKSByYWlzZWQgZXhjZXB0aW9uLicpCisKKyAgICBkZWYgdGVzdF93cml0ZV9zdHIoc2VsZik6CisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuc29ja2V0X3RyYW5zcG9ydCgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdHJhbnNwb3J0LndyaXRlLCAnc3RyJykKKworICAgIGRlZiB0ZXN0X3dyaXRlX2Nsb3Npbmcoc2VsZik6CisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuc29ja2V0X3RyYW5zcG9ydCgpCisgICAgICAgIHRyYW5zcG9ydC5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJhbnNwb3J0Ll9jb25uX2xvc3QsIDEpCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShiJ2RhdGEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyYW5zcG9ydC5fY29ubl9sb3N0LCAyKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfcmVhZHkoc2VsZik6CisgICAgICAgIGRhdGEgPSBiJ2RhdGEnCisgICAgICAgIHNlbGYuc29jay5zZW5kLnJldHVybl92YWx1ZSA9IGxlbihkYXRhKQorCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuc29ja2V0X3RyYW5zcG9ydCgpCisgICAgICAgIHRyYW5zcG9ydC5fYnVmZmVyLmV4dGVuZChkYXRhKQorICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlcig3LCB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5KQorICAgICAgICB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuc29jay5zZW5kLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3Aud3JpdGVycykKKworICAgIGRlZiB0ZXN0X3dyaXRlX3JlYWR5X2Nsb3Npbmcoc2VsZik6CisgICAgICAgIGRhdGEgPSBiJ2RhdGEnCisgICAgICAgIHNlbGYuc29jay5zZW5kLnJldHVybl92YWx1ZSA9IGxlbihkYXRhKQorCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuc29ja2V0X3RyYW5zcG9ydCgpCisgICAgICAgIHRyYW5zcG9ydC5fY2xvc2luZyA9IFRydWUKKyAgICAgICAgdHJhbnNwb3J0Ll9idWZmZXIuZXh0ZW5kKGRhdGEpCisgICAgICAgIHNlbGYubG9vcC5hZGRfd3JpdGVyKDcsIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkpCisgICAgICAgIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5zb2NrLnNlbmQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC53cml0ZXJzKQorICAgICAgICBzZWxmLnNvY2suY2xvc2UuYXNzZXJ0X2NhbGxlZF93aXRoKCkKKyAgICAgICAgc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QuYXNzZXJ0X2NhbGxlZF93aXRoKE5vbmUpCisKKyAgICBkZWYgdGVzdF93cml0ZV9yZWFkeV9ub19kYXRhKHNlbGYpOgorICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLnNvY2tldF90cmFuc3BvcnQoKQorICAgICAgICAjIFRoaXMgaXMgYW4gaW50ZXJuYWwgZXJyb3IuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yLCB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5KQorCisgICAgZGVmIHRlc3Rfd3JpdGVfcmVhZHlfcGFydGlhbChzZWxmKToKKyAgICAgICAgZGF0YSA9IGInZGF0YScKKyAgICAgICAgc2VsZi5zb2NrLnNlbmQucmV0dXJuX3ZhbHVlID0gMgorCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuc29ja2V0X3RyYW5zcG9ydCgpCisgICAgICAgIHRyYW5zcG9ydC5fYnVmZmVyLmV4dGVuZChkYXRhKQorICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlcig3LCB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5KQorICAgICAgICB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5KCkKKyAgICAgICAgc2VsZi5sb29wLmFzc2VydF93cml0ZXIoNywgdHJhbnNwb3J0Ll93cml0ZV9yZWFkeSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0X3RvX2J1ZmZlcihbYid0YSddKSwgdHJhbnNwb3J0Ll9idWZmZXIpCisKKyAgICBkZWYgdGVzdF93cml0ZV9yZWFkeV9wYXJ0aWFsX25vbmUoc2VsZik6CisgICAgICAgIGRhdGEgPSBiJ2RhdGEnCisgICAgICAgIHNlbGYuc29jay5zZW5kLnJldHVybl92YWx1ZSA9IDAKKworICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLnNvY2tldF90cmFuc3BvcnQoKQorICAgICAgICB0cmFuc3BvcnQuX2J1ZmZlci5leHRlbmQoZGF0YSkKKyAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIoNywgdHJhbnNwb3J0Ll93cml0ZV9yZWFkeSkKKyAgICAgICAgdHJhbnNwb3J0Ll93cml0ZV9yZWFkeSgpCisgICAgICAgIHNlbGYubG9vcC5hc3NlcnRfd3JpdGVyKDcsIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdF90b19idWZmZXIoW2InZGF0YSddKSwgdHJhbnNwb3J0Ll9idWZmZXIpCisKKyAgICBkZWYgdGVzdF93cml0ZV9yZWFkeV90cnlhZ2FpbihzZWxmKToKKyAgICAgICAgc2VsZi5zb2NrLnNlbmQuc2lkZV9lZmZlY3QgPSBCbG9ja2luZ0lPRXJyb3IKKworICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLnNvY2tldF90cmFuc3BvcnQoKQorICAgICAgICB0cmFuc3BvcnQuX2J1ZmZlciA9IGxpc3RfdG9fYnVmZmVyKFtiJ2RhdGExJywgYidkYXRhMiddKQorICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlcig3LCB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5KQorICAgICAgICB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5KCkKKworICAgICAgICBzZWxmLmxvb3AuYXNzZXJ0X3dyaXRlcig3LCB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3RfdG9fYnVmZmVyKFtiJ2RhdGExZGF0YTInXSksIHRyYW5zcG9ydC5fYnVmZmVyKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfcmVhZHlfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICBlcnIgPSBzZWxmLnNvY2suc2VuZC5zaWRlX2VmZmVjdCA9IE9TRXJyb3IoKQorCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuc29ja2V0X3RyYW5zcG9ydCgpCisgICAgICAgIHRyYW5zcG9ydC5fZmF0YWxfZXJyb3IgPSBtb2NrLk1vY2soKQorICAgICAgICB0cmFuc3BvcnQuX2J1ZmZlci5leHRlbmQoYidkYXRhJykKKyAgICAgICAgdHJhbnNwb3J0Ll93cml0ZV9yZWFkeSgpCisgICAgICAgIHRyYW5zcG9ydC5fZmF0YWxfZXJyb3IuYXNzZXJ0X2NhbGxlZF93aXRoKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdGYXRhbCB3cml0ZSBlcnJvciBvbiBzb2NrZXQgdHJhbnNwb3J0JykKKworICAgIEBtb2NrLnBhdGNoKCdhc3luY2lvLmJhc2VfZXZlbnRzLmxvZ2dlcicpCisgICAgZGVmIHRlc3Rfd3JpdGVfcmVhZHlfZXhjZXB0aW9uX2FuZF9jbG9zZShzZWxmLCBtX2xvZyk6CisgICAgICAgIHNlbGYuc29jay5zZW5kLnNpZGVfZWZmZWN0ID0gT1NFcnJvcigpCisgICAgICAgIHJlbW92ZV93cml0ZXIgPSBzZWxmLmxvb3AucmVtb3ZlX3dyaXRlciA9IG1vY2suTW9jaygpCisKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5zb2NrZXRfdHJhbnNwb3J0KCkKKyAgICAgICAgdHJhbnNwb3J0LmNsb3NlKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9idWZmZXIuZXh0ZW5kKGInZGF0YScpCisgICAgICAgIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkoKQorICAgICAgICByZW1vdmVfd3JpdGVyLmFzc2VydF9jYWxsZWRfd2l0aChzZWxmLnNvY2tfZmQpCisKKyAgICBkZWYgdGVzdF93cml0ZV9lb2Yoc2VsZik6CisgICAgICAgIHRyID0gc2VsZi5zb2NrZXRfdHJhbnNwb3J0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRyLmNhbl93cml0ZV9lb2YoKSkKKyAgICAgICAgdHIud3JpdGVfZW9mKCkKKyAgICAgICAgc2VsZi5zb2NrLnNodXRkb3duLmFzc2VydF9jYWxsZWRfd2l0aChzb2NrZXQuU0hVVF9XUikKKyAgICAgICAgdHIud3JpdGVfZW9mKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNvY2suc2h1dGRvd24uY2FsbF9jb3VudCwgMSkKKyAgICAgICAgdHIuY2xvc2UoKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfZW9mX2J1ZmZlcihzZWxmKToKKyAgICAgICAgdHIgPSBzZWxmLnNvY2tldF90cmFuc3BvcnQoKQorICAgICAgICBzZWxmLnNvY2suc2VuZC5zaWRlX2VmZmVjdCA9IEJsb2NraW5nSU9FcnJvcgorICAgICAgICB0ci53cml0ZShiJ2RhdGEnKQorICAgICAgICB0ci53cml0ZV9lb2YoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyLl9idWZmZXIsIGxpc3RfdG9fYnVmZmVyKFtiJ2RhdGEnXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ci5fZW9mKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuc29jay5zaHV0ZG93bi5jYWxsZWQpCisgICAgICAgIHNlbGYuc29jay5zZW5kLnNpZGVfZWZmZWN0ID0gbGFtYmRhIF86IDQKKyAgICAgICAgdHIuX3dyaXRlX3JlYWR5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuc29jay5zZW5kLmNhbGxlZCkKKyAgICAgICAgc2VsZi5zb2NrLnNodXRkb3duLmFzc2VydF9jYWxsZWRfd2l0aChzb2NrZXQuU0hVVF9XUikKKyAgICAgICAgdHIuY2xvc2UoKQorCisKK0B1bml0dGVzdC5za2lwSWYoc3NsIGlzIE5vbmUsICdObyBzc2wgbW9kdWxlJykKK2NsYXNzIFNlbGVjdG9yU3NsVHJhbnNwb3J0VGVzdHModGVzdF91dGlscy5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubG9vcCA9IHNlbGYubmV3X3Rlc3RfbG9vcCgpCisgICAgICAgIHNlbGYucHJvdG9jb2wgPSB0ZXN0X3V0aWxzLm1ha2VfdGVzdF9wcm90b2NvbChhc3luY2lvLlByb3RvY29sKQorICAgICAgICBzZWxmLnNvY2sgPSBtb2NrLk1vY2soc29ja2V0LnNvY2tldCkKKyAgICAgICAgc2VsZi5zb2NrLmZpbGVuby5yZXR1cm5fdmFsdWUgPSA3CisgICAgICAgIHNlbGYuc3Nsc29jayA9IG1vY2suTW9jaygpCisgICAgICAgIHNlbGYuc3Nsc29jay5maWxlbm8ucmV0dXJuX3ZhbHVlID0gMQorICAgICAgICBzZWxmLnNzbGNvbnRleHQgPSBtb2NrLk1vY2soKQorICAgICAgICBzZWxmLnNzbGNvbnRleHQud3JhcF9zb2NrZXQucmV0dXJuX3ZhbHVlID0gc2VsZi5zc2xzb2NrCisKKyAgICBkZWYgc3NsX3RyYW5zcG9ydChzZWxmLCB3YWl0ZXI9Tm9uZSwgc2VydmVyX2hvc3RuYW1lPU5vbmUpOgorICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JTc2xUcmFuc3BvcnQoc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNzbGNvbnRleHQsIHdhaXRlcj13YWl0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfaG9zdG5hbWU9c2VydmVyX2hvc3RuYW1lKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoY2xvc2VfdHJhbnNwb3J0LCB0cmFuc3BvcnQpCisgICAgICAgIHJldHVybiB0cmFuc3BvcnQKKworICAgIGRlZiBfbWFrZV9vbmUoc2VsZiwgY3JlYXRlX3dhaXRlcj1Ob25lKToKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5zc2xfdHJhbnNwb3J0KCkKKyAgICAgICAgc2VsZi5zb2NrLnJlc2V0X21vY2soKQorICAgICAgICBzZWxmLnNzbHNvY2sucmVzZXRfbW9jaygpCisgICAgICAgIHNlbGYuc3NsY29udGV4dC5yZXNldF9tb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLnJlc2V0X2NvdW50ZXJzKCkKKyAgICAgICAgcmV0dXJuIHRyYW5zcG9ydAorCisgICAgZGVmIHRlc3Rfb25faGFuZHNoYWtlKHNlbGYpOgorICAgICAgICB3YWl0ZXIgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdHIgPSBzZWxmLnNzbF90cmFuc3BvcnQod2FpdGVyPXdhaXRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuc3Nsc29jay5kb19oYW5kc2hha2UuY2FsbGVkKQorICAgICAgICBzZWxmLmxvb3AuYXNzZXJ0X3JlYWRlcigxLCB0ci5fcmVhZF9yZWFkeSkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHdhaXRlci5yZXN1bHQoKSkKKworICAgIGRlZiB0ZXN0X29uX2hhbmRzaGFrZV9yZWFkZXJfcmV0cnkoc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5zZXRfZGVidWcoRmFsc2UpCisgICAgICAgIHNlbGYuc3Nsc29jay5kb19oYW5kc2hha2Uuc2lkZV9lZmZlY3QgPSBzc2wuU1NMV2FudFJlYWRFcnJvcgorICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLnNzbF90cmFuc3BvcnQoKQorICAgICAgICBzZWxmLmxvb3AuYXNzZXJ0X3JlYWRlcigxLCB0cmFuc3BvcnQuX29uX2hhbmRzaGFrZSwgTm9uZSkKKworICAgIGRlZiB0ZXN0X29uX2hhbmRzaGFrZV93cml0ZXJfcmV0cnkoc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5zZXRfZGVidWcoRmFsc2UpCisgICAgICAgIHNlbGYuc3Nsc29jay5kb19oYW5kc2hha2Uuc2lkZV9lZmZlY3QgPSBzc2wuU1NMV2FudFdyaXRlRXJyb3IKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5zc2xfdHJhbnNwb3J0KCkKKyAgICAgICAgc2VsZi5sb29wLmFzc2VydF93cml0ZXIoMSwgdHJhbnNwb3J0Ll9vbl9oYW5kc2hha2UsIE5vbmUpCisKKyAgICBkZWYgdGVzdF9vbl9oYW5kc2hha2VfZXhjKHNlbGYpOgorICAgICAgICBleGMgPSBWYWx1ZUVycm9yKCkKKyAgICAgICAgc2VsZi5zc2xzb2NrLmRvX2hhbmRzaGFrZS5zaWRlX2VmZmVjdCA9IGV4YworICAgICAgICB3aXRoIHRlc3RfdXRpbHMuZGlzYWJsZV9sb2dnZXIoKToKKyAgICAgICAgICAgIHdhaXRlciA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5zc2xfdHJhbnNwb3J0KHdhaXRlcj13YWl0ZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3YWl0ZXIuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydElzKGV4Yywgd2FpdGVyLmV4Y2VwdGlvbigpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5zc2xzb2NrLmNsb3NlLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X29uX2hhbmRzaGFrZV9iYXNlX2V4YyhzZWxmKToKKyAgICAgICAgd2FpdGVyID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuc3NsX3RyYW5zcG9ydCh3YWl0ZXI9d2FpdGVyKQorICAgICAgICBleGMgPSBCYXNlRXhjZXB0aW9uKCkKKyAgICAgICAgc2VsZi5zc2xzb2NrLmRvX2hhbmRzaGFrZS5zaWRlX2VmZmVjdCA9IGV4YworICAgICAgICB3aXRoIHRlc3RfdXRpbHMuZGlzYWJsZV9sb2dnZXIoKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEJhc2VFeGNlcHRpb24sIHRyYW5zcG9ydC5fb25faGFuZHNoYWtlLCAwKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5zc2xzb2NrLmNsb3NlLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdhaXRlci5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZXhjLCB3YWl0ZXIuZXhjZXB0aW9uKCkpCisKKyAgICBkZWYgdGVzdF9jYW5jZWxfaGFuZHNoYWtlKHNlbGYpOgorICAgICAgICAjIFB5dGhvbiBpc3N1ZSAjMjMxOTc6IGNhbmNlbGxpbmcgYW4gaGFuZHNoYWtlIG11c3Qgbm90IHJhaXNlIGFuCisgICAgICAgICMgZXhjZXB0aW9uIG9yIGxvZyBhbiBlcnJvciwgZXZlbiBpZiB0aGUgaGFuZHNoYWtlIGZhaWxlZAorICAgICAgICB3YWl0ZXIgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5zc2xfdHJhbnNwb3J0KHdhaXRlcj13YWl0ZXIpCisgICAgICAgIHdhaXRlci5jYW5jZWwoKQorICAgICAgICBleGMgPSBWYWx1ZUVycm9yKCkKKyAgICAgICAgc2VsZi5zc2xzb2NrLmRvX2hhbmRzaGFrZS5zaWRlX2VmZmVjdCA9IGV4YworICAgICAgICB3aXRoIHRlc3RfdXRpbHMuZGlzYWJsZV9sb2dnZXIoKToKKyAgICAgICAgICAgIHRyYW5zcG9ydC5fb25faGFuZHNoYWtlKDApCisgICAgICAgIHRyYW5zcG9ydC5jbG9zZSgpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorCisgICAgZGVmIHRlc3RfcGF1c2VfcmVzdW1lX3JlYWRpbmcoc2VsZik6CisgICAgICAgIHRyID0gc2VsZi5fbWFrZV9vbmUoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRyLl9wYXVzZWQpCisgICAgICAgIHNlbGYubG9vcC5hc3NlcnRfcmVhZGVyKDEsIHRyLl9yZWFkX3JlYWR5KQorICAgICAgICB0ci5wYXVzZV9yZWFkaW5nKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRyLl9wYXVzZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoMSBpbiBzZWxmLmxvb3AucmVhZGVycykKKyAgICAgICAgdHIucmVzdW1lX3JlYWRpbmcoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRyLl9wYXVzZWQpCisgICAgICAgIHNlbGYubG9vcC5hc3NlcnRfcmVhZGVyKDEsIHRyLl9yZWFkX3JlYWR5KQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvcik6CisgICAgICAgICAgICB0ci5yZXN1bWVfcmVhZGluZygpCisKKyAgICBkZWYgdGVzdF93cml0ZShzZWxmKToKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV9vbmUoKQorICAgICAgICB0cmFuc3BvcnQud3JpdGUoYidkYXRhJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0X3RvX2J1ZmZlcihbYidkYXRhJ10pLCB0cmFuc3BvcnQuX2J1ZmZlcikKKworICAgIGRlZiB0ZXN0X3dyaXRlX2J5dGVhcnJheShzZWxmKToKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV9vbmUoKQorICAgICAgICBkYXRhID0gYnl0ZWFycmF5KGInZGF0YScpCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3RfdG9fYnVmZmVyKFtiJ2RhdGEnXSksIHRyYW5zcG9ydC5fYnVmZmVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIGJ5dGVhcnJheShiJ2RhdGEnKSkgICMgSGFzbid0IGJlZW4gbXV0YXRlZC4KKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdChkYXRhLCB0cmFuc3BvcnQuX2J1ZmZlcikgICMgSGFzbid0IGJlZW4gaW5jb3Jwb3JhdGVkLgorCisgICAgZGVmIHRlc3Rfd3JpdGVfbWVtb3J5dmlldyhzZWxmKToKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV9vbmUoKQorICAgICAgICBkYXRhID0gbWVtb3J5dmlldyhiJ2RhdGEnKQorICAgICAgICB0cmFuc3BvcnQud3JpdGUoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0X3RvX2J1ZmZlcihbYidkYXRhJ10pLCB0cmFuc3BvcnQuX2J1ZmZlcikKKworICAgIGRlZiB0ZXN0X3dyaXRlX25vX2RhdGEoc2VsZik6CisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuX21ha2Vfb25lKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9idWZmZXIuZXh0ZW5kKGInZGF0YScpCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShiJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdF90b19idWZmZXIoW2InZGF0YSddKSwgdHJhbnNwb3J0Ll9idWZmZXIpCisKKyAgICBkZWYgdGVzdF93cml0ZV9zdHIoc2VsZik6CisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuX21ha2Vfb25lKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0cmFuc3BvcnQud3JpdGUsICdzdHInKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfY2xvc2luZyhzZWxmKToKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV9vbmUoKQorICAgICAgICB0cmFuc3BvcnQuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyYW5zcG9ydC5fY29ubl9sb3N0LCAxKQorICAgICAgICB0cmFuc3BvcnQud3JpdGUoYidkYXRhJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmFuc3BvcnQuX2Nvbm5fbG9zdCwgMikKKworICAgIEBtb2NrLnBhdGNoKCdhc3luY2lvLnNlbGVjdG9yX2V2ZW50cy5sb2dnZXInKQorICAgIGRlZiB0ZXN0X3dyaXRlX2V4Y2VwdGlvbihzZWxmLCBtX2xvZyk6CisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuX21ha2Vfb25lKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9jb25uX2xvc3QgPSAxCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShiJ2RhdGEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyYW5zcG9ydC5fYnVmZmVyLCBsaXN0X3RvX2J1ZmZlcigpKQorICAgICAgICB0cmFuc3BvcnQud3JpdGUoYidkYXRhJykKKyAgICAgICAgdHJhbnNwb3J0LndyaXRlKGInZGF0YScpCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShiJ2RhdGEnKQorICAgICAgICB0cmFuc3BvcnQud3JpdGUoYidkYXRhJykKKyAgICAgICAgbV9sb2cud2FybmluZy5hc3NlcnRfY2FsbGVkX3dpdGgoJ3NvY2tldC5zZW5kKCkgcmFpc2VkIGV4Y2VwdGlvbi4nKQorCisgICAgZGVmIHRlc3RfcmVhZF9yZWFkeV9yZWN2KHNlbGYpOgorICAgICAgICBzZWxmLnNzbHNvY2sucmVjdi5yZXR1cm5fdmFsdWUgPSBiJ2RhdGEnCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuX21ha2Vfb25lKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9yZWFkX3JlYWR5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuc3Nsc29jay5yZWN2LmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoYidkYXRhJywpLCBzZWxmLnByb3RvY29sLmRhdGFfcmVjZWl2ZWQuY2FsbF9hcmdzWzBdKQorCisgICAgZGVmIHRlc3RfcmVhZF9yZWFkeV93cml0ZV93YW50c19yZWFkKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlciA9IG1vY2suTW9jaygpCisgICAgICAgIHNlbGYuc3Nsc29jay5yZWN2LnNpZGVfZWZmZWN0ID0gQmxvY2tpbmdJT0Vycm9yCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuX21ha2Vfb25lKCkKKyAgICAgICAgdHJhbnNwb3J0Ll93cml0ZV93YW50c19yZWFkID0gVHJ1ZQorICAgICAgICB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5ID0gbW9jay5Nb2NrKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9idWZmZXIuZXh0ZW5kKGInZGF0YScpCisgICAgICAgIHRyYW5zcG9ydC5fcmVhZF9yZWFkeSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0cmFuc3BvcnQuX3dyaXRlX3dhbnRzX3JlYWQpCisgICAgICAgIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkuYXNzZXJ0X2NhbGxlZF93aXRoKCkKKyAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIuYXNzZXJ0X2NhbGxlZF93aXRoKAorICAgICAgICAgICAgdHJhbnNwb3J0Ll9zb2NrX2ZkLCB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5KQorCisgICAgZGVmIHRlc3RfcmVhZF9yZWFkeV9yZWN2X2VvZihzZWxmKToKKyAgICAgICAgc2VsZi5zc2xzb2NrLnJlY3YucmV0dXJuX3ZhbHVlID0gYicnCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuX21ha2Vfb25lKCkKKyAgICAgICAgdHJhbnNwb3J0LmNsb3NlID0gbW9jay5Nb2NrKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9yZWFkX3JlYWR5KCkKKyAgICAgICAgdHJhbnNwb3J0LmNsb3NlLmFzc2VydF9jYWxsZWRfd2l0aCgpCisgICAgICAgIHNlbGYucHJvdG9jb2wuZW9mX3JlY2VpdmVkLmFzc2VydF9jYWxsZWRfd2l0aCgpCisKKyAgICBkZWYgdGVzdF9yZWFkX3JlYWR5X3JlY3ZfY29ubl9yZXNldChzZWxmKToKKyAgICAgICAgZXJyID0gc2VsZi5zc2xzb2NrLnJlY3Yuc2lkZV9lZmZlY3QgPSBDb25uZWN0aW9uUmVzZXRFcnJvcigpCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuX21ha2Vfb25lKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9mb3JjZV9jbG9zZSA9IG1vY2suTW9jaygpCisgICAgICAgIHdpdGggdGVzdF91dGlscy5kaXNhYmxlX2xvZ2dlcigpOgorICAgICAgICAgICAgdHJhbnNwb3J0Ll9yZWFkX3JlYWR5KCkKKyAgICAgICAgdHJhbnNwb3J0Ll9mb3JjZV9jbG9zZS5hc3NlcnRfY2FsbGVkX3dpdGgoZXJyKQorCisgICAgZGVmIHRlc3RfcmVhZF9yZWFkeV9yZWN2X3JldHJ5KHNlbGYpOgorICAgICAgICBzZWxmLnNzbHNvY2sucmVjdi5zaWRlX2VmZmVjdCA9IHNzbC5TU0xXYW50UmVhZEVycm9yCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuX21ha2Vfb25lKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9yZWFkX3JlYWR5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuc3Nsc29jay5yZWN2LmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnByb3RvY29sLmRhdGFfcmVjZWl2ZWQuY2FsbGVkKQorCisgICAgICAgIHNlbGYuc3Nsc29jay5yZWN2LnNpZGVfZWZmZWN0ID0gQmxvY2tpbmdJT0Vycm9yCisgICAgICAgIHRyYW5zcG9ydC5fcmVhZF9yZWFkeSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5wcm90b2NvbC5kYXRhX3JlY2VpdmVkLmNhbGxlZCkKKworICAgICAgICBzZWxmLnNzbHNvY2sucmVjdi5zaWRlX2VmZmVjdCA9IEludGVycnVwdGVkRXJyb3IKKyAgICAgICAgdHJhbnNwb3J0Ll9yZWFkX3JlYWR5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnByb3RvY29sLmRhdGFfcmVjZWl2ZWQuY2FsbGVkKQorCisgICAgZGVmIHRlc3RfcmVhZF9yZWFkeV9yZWN2X3dyaXRlKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3JlYWRlciA9IG1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5hZGRfd3JpdGVyID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5zc2xzb2NrLnJlY3Yuc2lkZV9lZmZlY3QgPSBzc2wuU1NMV2FudFdyaXRlRXJyb3IKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV9vbmUoKQorICAgICAgICB0cmFuc3BvcnQuX3JlYWRfcmVhZHkoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYucHJvdG9jb2wuZGF0YV9yZWNlaXZlZC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0cmFuc3BvcnQuX3JlYWRfd2FudHNfd3JpdGUpCisKKyAgICAgICAgc2VsZi5sb29wLnJlbW92ZV9yZWFkZXIuYXNzZXJ0X2NhbGxlZF93aXRoKHRyYW5zcG9ydC5fc29ja19mZCkKKyAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIuYXNzZXJ0X2NhbGxlZF93aXRoKAorICAgICAgICAgICAgdHJhbnNwb3J0Ll9zb2NrX2ZkLCB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5KQorCisgICAgZGVmIHRlc3RfcmVhZF9yZWFkeV9yZWN2X2V4YyhzZWxmKToKKyAgICAgICAgZXJyID0gc2VsZi5zc2xzb2NrLnJlY3Yuc2lkZV9lZmZlY3QgPSBPU0Vycm9yKCkKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV9vbmUoKQorICAgICAgICB0cmFuc3BvcnQuX2ZhdGFsX2Vycm9yID0gbW9jay5Nb2NrKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9yZWFkX3JlYWR5KCkKKyAgICAgICAgdHJhbnNwb3J0Ll9mYXRhbF9lcnJvci5hc3NlcnRfY2FsbGVkX3dpdGgoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ZhdGFsIHJlYWQgZXJyb3Igb24gU1NMIHRyYW5zcG9ydCcpCisKKyAgICBkZWYgdGVzdF93cml0ZV9yZWFkeV9zZW5kKHNlbGYpOgorICAgICAgICBzZWxmLnNzbHNvY2suc2VuZC5yZXR1cm5fdmFsdWUgPSA0CisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuX21ha2Vfb25lKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9idWZmZXIgPSBsaXN0X3RvX2J1ZmZlcihbYidkYXRhJ10pCisgICAgICAgIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3RfdG9fYnVmZmVyKCksIHRyYW5zcG9ydC5fYnVmZmVyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5zc2xzb2NrLnNlbmQuY2FsbGVkKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfcmVhZHlfc2VuZF9ub25lKHNlbGYpOgorICAgICAgICBzZWxmLnNzbHNvY2suc2VuZC5yZXR1cm5fdmFsdWUgPSAwCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuX21ha2Vfb25lKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9idWZmZXIgPSBsaXN0X3RvX2J1ZmZlcihbYidkYXRhMScsIGInZGF0YTInXSkKKyAgICAgICAgdHJhbnNwb3J0Ll93cml0ZV9yZWFkeSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnNzbHNvY2suc2VuZC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdF90b19idWZmZXIoW2InZGF0YTFkYXRhMiddKSwgdHJhbnNwb3J0Ll9idWZmZXIpCisKKyAgICBkZWYgdGVzdF93cml0ZV9yZWFkeV9zZW5kX3BhcnRpYWwoc2VsZik6CisgICAgICAgIHNlbGYuc3Nsc29jay5zZW5kLnJldHVybl92YWx1ZSA9IDIKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV9vbmUoKQorICAgICAgICB0cmFuc3BvcnQuX2J1ZmZlciA9IGxpc3RfdG9fYnVmZmVyKFtiJ2RhdGExJywgYidkYXRhMiddKQorICAgICAgICB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuc3Nsc29jay5zZW5kLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0X3RvX2J1ZmZlcihbYid0YTFkYXRhMiddKSwgdHJhbnNwb3J0Ll9idWZmZXIpCisKKyAgICBkZWYgdGVzdF93cml0ZV9yZWFkeV9zZW5kX2Nsb3NpbmdfcGFydGlhbChzZWxmKToKKyAgICAgICAgc2VsZi5zc2xzb2NrLnNlbmQucmV0dXJuX3ZhbHVlID0gMgorICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLl9tYWtlX29uZSgpCisgICAgICAgIHRyYW5zcG9ydC5fYnVmZmVyID0gbGlzdF90b19idWZmZXIoW2InZGF0YTEnLCBiJ2RhdGEyJ10pCisgICAgICAgIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5zc2xzb2NrLnNlbmQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuc3Nsc29jay5jbG9zZS5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF93cml0ZV9yZWFkeV9zZW5kX2Nsb3Npbmcoc2VsZik6CisgICAgICAgIHNlbGYuc3Nsc29jay5zZW5kLnJldHVybl92YWx1ZSA9IDQKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV9vbmUoKQorICAgICAgICB0cmFuc3BvcnQuY2xvc2UoKQorICAgICAgICB0cmFuc3BvcnQuX2J1ZmZlciA9IGxpc3RfdG9fYnVmZmVyKFtiJ2RhdGEnXSkKKyAgICAgICAgdHJhbnNwb3J0Ll93cml0ZV9yZWFkeSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLndyaXRlcnMpCisgICAgICAgIHNlbGYucHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0LmFzc2VydF9jYWxsZWRfd2l0aChOb25lKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfcmVhZHlfc2VuZF9jbG9zaW5nX2VtcHR5X2J1ZmZlcihzZWxmKToKKyAgICAgICAgc2VsZi5zc2xzb2NrLnNlbmQucmV0dXJuX3ZhbHVlID0gNAorICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLl9tYWtlX29uZSgpCisgICAgICAgIHRyYW5zcG9ydC5jbG9zZSgpCisgICAgICAgIHRyYW5zcG9ydC5fYnVmZmVyID0gbGlzdF90b19idWZmZXIoKQorICAgICAgICB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3Aud3JpdGVycykKKyAgICAgICAgc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QuYXNzZXJ0X2NhbGxlZF93aXRoKE5vbmUpCisKKyAgICBkZWYgdGVzdF93cml0ZV9yZWFkeV9zZW5kX3JldHJ5KHNlbGYpOgorICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLl9tYWtlX29uZSgpCisgICAgICAgIHRyYW5zcG9ydC5fYnVmZmVyID0gbGlzdF90b19idWZmZXIoW2InZGF0YSddKQorCisgICAgICAgIHNlbGYuc3Nsc29jay5zZW5kLnNpZGVfZWZmZWN0ID0gc3NsLlNTTFdhbnRXcml0ZUVycm9yCisgICAgICAgIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3RfdG9fYnVmZmVyKFtiJ2RhdGEnXSksIHRyYW5zcG9ydC5fYnVmZmVyKQorCisgICAgICAgIHNlbGYuc3Nsc29jay5zZW5kLnNpZGVfZWZmZWN0ID0gQmxvY2tpbmdJT0Vycm9yKCkKKyAgICAgICAgdHJhbnNwb3J0Ll93cml0ZV9yZWFkeSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdF90b19idWZmZXIoW2InZGF0YSddKSwgdHJhbnNwb3J0Ll9idWZmZXIpCisKKyAgICBkZWYgdGVzdF93cml0ZV9yZWFkeV9zZW5kX3JlYWQoc2VsZik6CisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuX21ha2Vfb25lKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9idWZmZXIgPSBsaXN0X3RvX2J1ZmZlcihbYidkYXRhJ10pCisKKyAgICAgICAgc2VsZi5sb29wLnJlbW92ZV93cml0ZXIgPSBtb2NrLk1vY2soKQorICAgICAgICBzZWxmLnNzbHNvY2suc2VuZC5zaWRlX2VmZmVjdCA9IHNzbC5TU0xXYW50UmVhZEVycm9yCisgICAgICAgIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYucHJvdG9jb2wuZGF0YV9yZWNlaXZlZC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0cmFuc3BvcnQuX3dyaXRlX3dhbnRzX3JlYWQpCisgICAgICAgIHNlbGYubG9vcC5yZW1vdmVfd3JpdGVyLmFzc2VydF9jYWxsZWRfd2l0aCh0cmFuc3BvcnQuX3NvY2tfZmQpCisKKyAgICBkZWYgdGVzdF93cml0ZV9yZWFkeV9zZW5kX2V4YyhzZWxmKToKKyAgICAgICAgZXJyID0gc2VsZi5zc2xzb2NrLnNlbmQuc2lkZV9lZmZlY3QgPSBPU0Vycm9yKCkKKworICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLl9tYWtlX29uZSgpCisgICAgICAgIHRyYW5zcG9ydC5fYnVmZmVyID0gbGlzdF90b19idWZmZXIoW2InZGF0YSddKQorICAgICAgICB0cmFuc3BvcnQuX2ZhdGFsX2Vycm9yID0gbW9jay5Nb2NrKCkKKyAgICAgICAgdHJhbnNwb3J0Ll93cml0ZV9yZWFkeSgpCisgICAgICAgIHRyYW5zcG9ydC5fZmF0YWxfZXJyb3IuYXNzZXJ0X2NhbGxlZF93aXRoKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdGYXRhbCB3cml0ZSBlcnJvciBvbiBTU0wgdHJhbnNwb3J0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0X3RvX2J1ZmZlcigpLCB0cmFuc3BvcnQuX2J1ZmZlcikKKworICAgIGRlZiB0ZXN0X3dyaXRlX3JlYWR5X3JlYWRfd2FudHNfd3JpdGUoc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5hZGRfcmVhZGVyID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5zc2xzb2NrLnNlbmQuc2lkZV9lZmZlY3QgPSBCbG9ja2luZ0lPRXJyb3IKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV9vbmUoKQorICAgICAgICB0cmFuc3BvcnQuX3JlYWRfd2FudHNfd3JpdGUgPSBUcnVlCisgICAgICAgIHRyYW5zcG9ydC5fcmVhZF9yZWFkeSA9IG1vY2suTW9jaygpCisgICAgICAgIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHJhbnNwb3J0Ll9yZWFkX3dhbnRzX3dyaXRlKQorICAgICAgICB0cmFuc3BvcnQuX3JlYWRfcmVhZHkuYXNzZXJ0X2NhbGxlZF93aXRoKCkKKyAgICAgICAgc2VsZi5sb29wLmFkZF9yZWFkZXIuYXNzZXJ0X2NhbGxlZF93aXRoKAorICAgICAgICAgICAgdHJhbnNwb3J0Ll9zb2NrX2ZkLCB0cmFuc3BvcnQuX3JlYWRfcmVhZHkpCisKKyAgICBkZWYgdGVzdF93cml0ZV9lb2Yoc2VsZik6CisgICAgICAgIHRyID0gc2VsZi5fbWFrZV9vbmUoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRyLmNhbl93cml0ZV9lb2YoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgdHIud3JpdGVfZW9mKQorCisgICAgZGVmIGNoZWNrX2Nsb3NlKHNlbGYpOgorICAgICAgICB0ciA9IHNlbGYuX21ha2Vfb25lKCkKKyAgICAgICAgdHIuY2xvc2UoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ci5pc19jbG9zaW5nKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgc2VsZi5sb29wLnJlbW92ZV9yZWFkZXJfY291bnRbMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHIuX2Nvbm5fbG9zdCwgMSkKKworICAgICAgICB0ci5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHIuX2Nvbm5fbG9zdCwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBzZWxmLmxvb3AucmVtb3ZlX3JlYWRlcl9jb3VudFsxXSkKKworICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKworICAgIGRlZiB0ZXN0X2Nsb3NlKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX2Nsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYucHJvdG9jb2wuY29ubmVjdGlvbl9tYWRlLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYucHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0LmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X2Nsb3NlX25vdF9jb25uZWN0ZWQoc2VsZik6CisgICAgICAgIHNlbGYuc3Nsc29jay5kb19oYW5kc2hha2Uuc2lkZV9lZmZlY3QgPSBzc2wuU1NMV2FudFJlYWRFcnJvcgorICAgICAgICBzZWxmLmNoZWNrX2Nsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnByb3RvY29sLmNvbm5lY3Rpb25fbWFkZS5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QuY2FsbGVkKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzc2wgaXMgTm9uZSwgJ05vIFNTTCBzdXBwb3J0JykKKyAgICBkZWYgdGVzdF9zZXJ2ZXJfaG9zdG5hbWUoc2VsZik6CisgICAgICAgIHNlbGYuc3NsX3RyYW5zcG9ydChzZXJ2ZXJfaG9zdG5hbWU9J2xvY2FsaG9zdCcpCisgICAgICAgIHNlbGYuc3NsY29udGV4dC53cmFwX3NvY2tldC5hc3NlcnRfY2FsbGVkX3dpdGgoCisgICAgICAgICAgICBzZWxmLnNvY2ssIGRvX2hhbmRzaGFrZV9vbl9jb25uZWN0PUZhbHNlLCBzZXJ2ZXJfc2lkZT1GYWxzZSwKKyAgICAgICAgICAgIHNlcnZlcl9ob3N0bmFtZT0nbG9jYWxob3N0JykKKworCitjbGFzcyBTZWxlY3RvclNzbFdpdGhvdXRTc2xUcmFuc3BvcnRUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBAbW9jay5wYXRjaCgnYXN5bmNpby5zZWxlY3Rvcl9ldmVudHMuc3NsJywgTm9uZSkKKyAgICBkZWYgdGVzdF9zc2xfdHJhbnNwb3J0X3JlcXVpcmVzX3NzbF9tb2R1bGUoc2VsZik6CisgICAgICAgIE1vY2sgPSBtb2NrLk1vY2sKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IpOgorICAgICAgICAgICAgX1NlbGVjdG9yU3NsVHJhbnNwb3J0KE1vY2soKSwgTW9jaygpLCBNb2NrKCksIE1vY2soKSkKKworCitjbGFzcyBTZWxlY3RvckRhdGFncmFtVHJhbnNwb3J0VGVzdHModGVzdF91dGlscy5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubG9vcCA9IHNlbGYubmV3X3Rlc3RfbG9vcCgpCisgICAgICAgIHNlbGYucHJvdG9jb2wgPSB0ZXN0X3V0aWxzLm1ha2VfdGVzdF9wcm90b2NvbChhc3luY2lvLkRhdGFncmFtUHJvdG9jb2wpCisgICAgICAgIHNlbGYuc29jayA9IG1vY2suTW9jayhzcGVjX3NldD1zb2NrZXQuc29ja2V0KQorICAgICAgICBzZWxmLnNvY2suZmlsZW5vLnJldHVybl92YWx1ZSA9IDcKKworICAgIGRlZiBkYXRhZ3JhbV90cmFuc3BvcnQoc2VsZiwgYWRkcmVzcz1Ob25lKToKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yRGF0YWdyYW1UcmFuc3BvcnQoc2VsZi5sb29wLCBzZWxmLnNvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucHJvdG9jb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3M9YWRkcmVzcykKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGNsb3NlX3RyYW5zcG9ydCwgdHJhbnNwb3J0KQorICAgICAgICByZXR1cm4gdHJhbnNwb3J0CisKKyAgICBkZWYgdGVzdF9yZWFkX3JlYWR5KHNlbGYpOgorICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLmRhdGFncmFtX3RyYW5zcG9ydCgpCisKKyAgICAgICAgc2VsZi5zb2NrLnJlY3Zmcm9tLnJldHVybl92YWx1ZSA9IChiJ2RhdGEnLCAoJzAuMC4wLjAnLCAxMjM0KSkKKyAgICAgICAgdHJhbnNwb3J0Ll9yZWFkX3JlYWR5KCkKKworICAgICAgICBzZWxmLnByb3RvY29sLmRhdGFncmFtX3JlY2VpdmVkLmFzc2VydF9jYWxsZWRfd2l0aCgKKyAgICAgICAgICAgIGInZGF0YScsICgnMC4wLjAuMCcsIDEyMzQpKQorCisgICAgZGVmIHRlc3RfcmVhZF9yZWFkeV90cnlhZ2FpbihzZWxmKToKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5kYXRhZ3JhbV90cmFuc3BvcnQoKQorCisgICAgICAgIHNlbGYuc29jay5yZWN2ZnJvbS5zaWRlX2VmZmVjdCA9IEJsb2NraW5nSU9FcnJvcgorICAgICAgICB0cmFuc3BvcnQuX2ZhdGFsX2Vycm9yID0gbW9jay5Nb2NrKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9yZWFkX3JlYWR5KCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRyYW5zcG9ydC5fZmF0YWxfZXJyb3IuY2FsbGVkKQorCisgICAgZGVmIHRlc3RfcmVhZF9yZWFkeV9lcnIoc2VsZik6CisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuZGF0YWdyYW1fdHJhbnNwb3J0KCkKKworICAgICAgICBlcnIgPSBzZWxmLnNvY2sucmVjdmZyb20uc2lkZV9lZmZlY3QgPSBSdW50aW1lRXJyb3IoKQorICAgICAgICB0cmFuc3BvcnQuX2ZhdGFsX2Vycm9yID0gbW9jay5Nb2NrKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9yZWFkX3JlYWR5KCkKKworICAgICAgICB0cmFuc3BvcnQuX2ZhdGFsX2Vycm9yLmFzc2VydF9jYWxsZWRfd2l0aCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRmF0YWwgcmVhZCBlcnJvciBvbiBkYXRhZ3JhbSB0cmFuc3BvcnQnKQorCisgICAgZGVmIHRlc3RfcmVhZF9yZWFkeV9vc2VycihzZWxmKToKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5kYXRhZ3JhbV90cmFuc3BvcnQoKQorCisgICAgICAgIGVyciA9IHNlbGYuc29jay5yZWN2ZnJvbS5zaWRlX2VmZmVjdCA9IE9TRXJyb3IoKQorICAgICAgICB0cmFuc3BvcnQuX2ZhdGFsX2Vycm9yID0gbW9jay5Nb2NrKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9yZWFkX3JlYWR5KCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRyYW5zcG9ydC5fZmF0YWxfZXJyb3IuY2FsbGVkKQorICAgICAgICBzZWxmLnByb3RvY29sLmVycm9yX3JlY2VpdmVkLmFzc2VydF9jYWxsZWRfd2l0aChlcnIpCisKKyAgICBkZWYgdGVzdF9zZW5kdG8oc2VsZik6CisgICAgICAgIGRhdGEgPSBiJ2RhdGEnCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuZGF0YWdyYW1fdHJhbnNwb3J0KCkKKyAgICAgICAgdHJhbnNwb3J0LnNlbmR0byhkYXRhLCAoJzAuMC4wLjAnLCAxMjM0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuc29jay5zZW5kdG8uY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgc2VsZi5zb2NrLnNlbmR0by5jYWxsX2FyZ3NbMF0sIChkYXRhLCAoJzAuMC4wLjAnLCAxMjM0KSkpCisKKyAgICBkZWYgdGVzdF9zZW5kdG9fYnl0ZWFycmF5KHNlbGYpOgorICAgICAgICBkYXRhID0gYnl0ZWFycmF5KGInZGF0YScpCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuZGF0YWdyYW1fdHJhbnNwb3J0KCkKKyAgICAgICAgdHJhbnNwb3J0LnNlbmR0byhkYXRhLCAoJzAuMC4wLjAnLCAxMjM0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuc29jay5zZW5kdG8uY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgc2VsZi5zb2NrLnNlbmR0by5jYWxsX2FyZ3NbMF0sIChkYXRhLCAoJzAuMC4wLjAnLCAxMjM0KSkpCisKKyAgICBkZWYgdGVzdF9zZW5kdG9fbWVtb3J5dmlldyhzZWxmKToKKyAgICAgICAgZGF0YSA9IG1lbW9yeXZpZXcoYidkYXRhJykKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5kYXRhZ3JhbV90cmFuc3BvcnQoKQorICAgICAgICB0cmFuc3BvcnQuc2VuZHRvKGRhdGEsICgnMC4wLjAuMCcsIDEyMzQpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5zb2NrLnNlbmR0by5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzZWxmLnNvY2suc2VuZHRvLmNhbGxfYXJnc1swXSwgKGRhdGEsICgnMC4wLjAuMCcsIDEyMzQpKSkKKworICAgIGRlZiB0ZXN0X3NlbmR0b19ub19kYXRhKHNlbGYpOgorICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLmRhdGFncmFtX3RyYW5zcG9ydCgpCisgICAgICAgIHRyYW5zcG9ydC5fYnVmZmVyLmFwcGVuZCgoYidkYXRhJywgKCcwLjAuMC4wJywgMTIzNDUpKSkKKyAgICAgICAgdHJhbnNwb3J0LnNlbmR0byhiJycsICgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuc29jay5zZW5kdG8uY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgWyhiJ2RhdGEnLCAoJzAuMC4wLjAnLCAxMjM0NSkpXSwgbGlzdCh0cmFuc3BvcnQuX2J1ZmZlcikpCisKKyAgICBkZWYgdGVzdF9zZW5kdG9fYnVmZmVyKHNlbGYpOgorICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLmRhdGFncmFtX3RyYW5zcG9ydCgpCisgICAgICAgIHRyYW5zcG9ydC5fYnVmZmVyLmFwcGVuZCgoYidkYXRhMScsICgnMC4wLjAuMCcsIDEyMzQ1KSkpCisgICAgICAgIHRyYW5zcG9ydC5zZW5kdG8oYidkYXRhMicsICgnMC4wLjAuMCcsIDEyMzQ1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnNvY2suc2VuZHRvLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIFsoYidkYXRhMScsICgnMC4wLjAuMCcsIDEyMzQ1KSksCisgICAgICAgICAgICAgKGInZGF0YTInLCAoJzAuMC4wLjAnLCAxMjM0NSkpXSwKKyAgICAgICAgICAgIGxpc3QodHJhbnNwb3J0Ll9idWZmZXIpKQorCisgICAgZGVmIHRlc3Rfc2VuZHRvX2J1ZmZlcl9ieXRlYXJyYXkoc2VsZik6CisgICAgICAgIGRhdGEyID0gYnl0ZWFycmF5KGInZGF0YTInKQorICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLmRhdGFncmFtX3RyYW5zcG9ydCgpCisgICAgICAgIHRyYW5zcG9ydC5fYnVmZmVyLmFwcGVuZCgoYidkYXRhMScsICgnMC4wLjAuMCcsIDEyMzQ1KSkpCisgICAgICAgIHRyYW5zcG9ydC5zZW5kdG8oZGF0YTIsICgnMC4wLjAuMCcsIDEyMzQ1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnNvY2suc2VuZHRvLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIFsoYidkYXRhMScsICgnMC4wLjAuMCcsIDEyMzQ1KSksCisgICAgICAgICAgICAgKGInZGF0YTInLCAoJzAuMC4wLjAnLCAxMjM0NSkpXSwKKyAgICAgICAgICAgIGxpc3QodHJhbnNwb3J0Ll9idWZmZXIpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodHJhbnNwb3J0Ll9idWZmZXJbMV1bMF0sIGJ5dGVzKQorCisgICAgZGVmIHRlc3Rfc2VuZHRvX2J1ZmZlcl9tZW1vcnl2aWV3KHNlbGYpOgorICAgICAgICBkYXRhMiA9IG1lbW9yeXZpZXcoYidkYXRhMicpCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuZGF0YWdyYW1fdHJhbnNwb3J0KCkKKyAgICAgICAgdHJhbnNwb3J0Ll9idWZmZXIuYXBwZW5kKChiJ2RhdGExJywgKCcwLjAuMC4wJywgMTIzNDUpKSkKKyAgICAgICAgdHJhbnNwb3J0LnNlbmR0byhkYXRhMiwgKCcwLjAuMC4wJywgMTIzNDUpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuc29jay5zZW5kdG8uY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgWyhiJ2RhdGExJywgKCcwLjAuMC4wJywgMTIzNDUpKSwKKyAgICAgICAgICAgICAoYidkYXRhMicsICgnMC4wLjAuMCcsIDEyMzQ1KSldLAorICAgICAgICAgICAgbGlzdCh0cmFuc3BvcnQuX2J1ZmZlcikpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh0cmFuc3BvcnQuX2J1ZmZlclsxXVswXSwgYnl0ZXMpCisKKyAgICBkZWYgdGVzdF9zZW5kdG9fdHJ5YWdhaW4oc2VsZik6CisgICAgICAgIGRhdGEgPSBiJ2RhdGEnCisKKyAgICAgICAgc2VsZi5zb2NrLnNlbmR0by5zaWRlX2VmZmVjdCA9IEJsb2NraW5nSU9FcnJvcgorCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuZGF0YWdyYW1fdHJhbnNwb3J0KCkKKyAgICAgICAgdHJhbnNwb3J0LnNlbmR0byhkYXRhLCAoJzAuMC4wLjAnLCAxMjM0NSkpCisKKyAgICAgICAgc2VsZi5sb29wLmFzc2VydF93cml0ZXIoNywgdHJhbnNwb3J0Ll9zZW5kdG9fcmVhZHkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBbKGInZGF0YScsICgnMC4wLjAuMCcsIDEyMzQ1KSldLCBsaXN0KHRyYW5zcG9ydC5fYnVmZmVyKSkKKworICAgIEBtb2NrLnBhdGNoKCdhc3luY2lvLnNlbGVjdG9yX2V2ZW50cy5sb2dnZXInKQorICAgIGRlZiB0ZXN0X3NlbmR0b19leGNlcHRpb24oc2VsZiwgbV9sb2cpOgorICAgICAgICBkYXRhID0gYidkYXRhJworICAgICAgICBlcnIgPSBzZWxmLnNvY2suc2VuZHRvLnNpZGVfZWZmZWN0ID0gUnVudGltZUVycm9yKCkKKworICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLmRhdGFncmFtX3RyYW5zcG9ydCgpCisgICAgICAgIHRyYW5zcG9ydC5fZmF0YWxfZXJyb3IgPSBtb2NrLk1vY2soKQorICAgICAgICB0cmFuc3BvcnQuc2VuZHRvKGRhdGEsICgpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0cmFuc3BvcnQuX2ZhdGFsX2Vycm9yLmNhbGxlZCkKKyAgICAgICAgdHJhbnNwb3J0Ll9mYXRhbF9lcnJvci5hc3NlcnRfY2FsbGVkX3dpdGgoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ZhdGFsIHdyaXRlIGVycm9yIG9uIGRhdGFncmFtIHRyYW5zcG9ydCcpCisgICAgICAgIHRyYW5zcG9ydC5fY29ubl9sb3N0ID0gMQorCisgICAgICAgIHRyYW5zcG9ydC5fYWRkcmVzcyA9ICgnMTIzJywpCisgICAgICAgIHRyYW5zcG9ydC5zZW5kdG8oZGF0YSkKKyAgICAgICAgdHJhbnNwb3J0LnNlbmR0byhkYXRhKQorICAgICAgICB0cmFuc3BvcnQuc2VuZHRvKGRhdGEpCisgICAgICAgIHRyYW5zcG9ydC5zZW5kdG8oZGF0YSkKKyAgICAgICAgdHJhbnNwb3J0LnNlbmR0byhkYXRhKQorICAgICAgICBtX2xvZy53YXJuaW5nLmFzc2VydF9jYWxsZWRfd2l0aCgnc29ja2V0LnNlbmQoKSByYWlzZWQgZXhjZXB0aW9uLicpCisKKyAgICBkZWYgdGVzdF9zZW5kdG9fZXJyb3JfcmVjZWl2ZWQoc2VsZik6CisgICAgICAgIGRhdGEgPSBiJ2RhdGEnCisKKyAgICAgICAgc2VsZi5zb2NrLnNlbmR0by5zaWRlX2VmZmVjdCA9IENvbm5lY3Rpb25SZWZ1c2VkRXJyb3IKKworICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLmRhdGFncmFtX3RyYW5zcG9ydCgpCisgICAgICAgIHRyYW5zcG9ydC5fZmF0YWxfZXJyb3IgPSBtb2NrLk1vY2soKQorICAgICAgICB0cmFuc3BvcnQuc2VuZHRvKGRhdGEsICgpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJhbnNwb3J0Ll9jb25uX2xvc3QsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHJhbnNwb3J0Ll9mYXRhbF9lcnJvci5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF9zZW5kdG9fZXJyb3JfcmVjZWl2ZWRfY29ubmVjdGVkKHNlbGYpOgorICAgICAgICBkYXRhID0gYidkYXRhJworCisgICAgICAgIHNlbGYuc29jay5zZW5kLnNpZGVfZWZmZWN0ID0gQ29ubmVjdGlvblJlZnVzZWRFcnJvcgorCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuZGF0YWdyYW1fdHJhbnNwb3J0KGFkZHJlc3M9KCcwLjAuMC4wJywgMSkpCisgICAgICAgIHRyYW5zcG9ydC5fZmF0YWxfZXJyb3IgPSBtb2NrLk1vY2soKQorICAgICAgICB0cmFuc3BvcnQuc2VuZHRvKGRhdGEpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0cmFuc3BvcnQuX2ZhdGFsX2Vycm9yLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYucHJvdG9jb2wuZXJyb3JfcmVjZWl2ZWQuY2FsbGVkKQorCisgICAgZGVmIHRlc3Rfc2VuZHRvX3N0cihzZWxmKToKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5kYXRhZ3JhbV90cmFuc3BvcnQoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHRyYW5zcG9ydC5zZW5kdG8sICdzdHInLCAoKSkKKworICAgIGRlZiB0ZXN0X3NlbmR0b19jb25uZWN0ZWRfYWRkcihzZWxmKToKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5kYXRhZ3JhbV90cmFuc3BvcnQoYWRkcmVzcz0oJzAuMC4wLjAnLCAxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBWYWx1ZUVycm9yLCB0cmFuc3BvcnQuc2VuZHRvLCBiJ3N0cicsICgnMC4wLjAuMCcsIDIpKQorCisgICAgZGVmIHRlc3Rfc2VuZHRvX2Nsb3Npbmcoc2VsZik6CisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuZGF0YWdyYW1fdHJhbnNwb3J0KGFkZHJlc3M9KDEsKSkKKyAgICAgICAgdHJhbnNwb3J0LmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmFuc3BvcnQuX2Nvbm5fbG9zdCwgMSkKKyAgICAgICAgdHJhbnNwb3J0LnNlbmR0byhiJ2RhdGEnLCAoMSwpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyYW5zcG9ydC5fY29ubl9sb3N0LCAyKQorCisgICAgZGVmIHRlc3Rfc2VuZHRvX3JlYWR5KHNlbGYpOgorICAgICAgICBkYXRhID0gYidkYXRhJworICAgICAgICBzZWxmLnNvY2suc2VuZHRvLnJldHVybl92YWx1ZSA9IGxlbihkYXRhKQorCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuZGF0YWdyYW1fdHJhbnNwb3J0KCkKKyAgICAgICAgdHJhbnNwb3J0Ll9idWZmZXIuYXBwZW5kKChkYXRhLCAoJzAuMC4wLjAnLCAxMjM0NSkpKQorICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlcig3LCB0cmFuc3BvcnQuX3NlbmR0b19yZWFkeSkKKyAgICAgICAgdHJhbnNwb3J0Ll9zZW5kdG9fcmVhZHkoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5zb2NrLnNlbmR0by5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzZWxmLnNvY2suc2VuZHRvLmNhbGxfYXJnc1swXSwgKGRhdGEsICgnMC4wLjAuMCcsIDEyMzQ1KSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLndyaXRlcnMpCisKKyAgICBkZWYgdGVzdF9zZW5kdG9fcmVhZHlfY2xvc2luZyhzZWxmKToKKyAgICAgICAgZGF0YSA9IGInZGF0YScKKyAgICAgICAgc2VsZi5zb2NrLnNlbmQucmV0dXJuX3ZhbHVlID0gbGVuKGRhdGEpCisKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5kYXRhZ3JhbV90cmFuc3BvcnQoKQorICAgICAgICB0cmFuc3BvcnQuX2Nsb3NpbmcgPSBUcnVlCisgICAgICAgIHRyYW5zcG9ydC5fYnVmZmVyLmFwcGVuZCgoZGF0YSwgKCkpKQorICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlcig3LCB0cmFuc3BvcnQuX3NlbmR0b19yZWFkeSkKKyAgICAgICAgdHJhbnNwb3J0Ll9zZW5kdG9fcmVhZHkoKQorICAgICAgICBzZWxmLnNvY2suc2VuZHRvLmFzc2VydF9jYWxsZWRfd2l0aChkYXRhLCAoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3Aud3JpdGVycykKKyAgICAgICAgc2VsZi5zb2NrLmNsb3NlLmFzc2VydF9jYWxsZWRfd2l0aCgpCisgICAgICAgIHNlbGYucHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0LmFzc2VydF9jYWxsZWRfd2l0aChOb25lKQorCisgICAgZGVmIHRlc3Rfc2VuZHRvX3JlYWR5X25vX2RhdGEoc2VsZik6CisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuZGF0YWdyYW1fdHJhbnNwb3J0KCkKKyAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIoNywgdHJhbnNwb3J0Ll9zZW5kdG9fcmVhZHkpCisgICAgICAgIHRyYW5zcG9ydC5fc2VuZHRvX3JlYWR5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnNvY2suc2VuZHRvLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3Aud3JpdGVycykKKworICAgIGRlZiB0ZXN0X3NlbmR0b19yZWFkeV90cnlhZ2FpbihzZWxmKToKKyAgICAgICAgc2VsZi5zb2NrLnNlbmR0by5zaWRlX2VmZmVjdCA9IEJsb2NraW5nSU9FcnJvcgorCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuZGF0YWdyYW1fdHJhbnNwb3J0KCkKKyAgICAgICAgdHJhbnNwb3J0Ll9idWZmZXIuZXh0ZW5kKFsoYidkYXRhMScsICgpKSwgKGInZGF0YTInLCAoKSldKQorICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlcig3LCB0cmFuc3BvcnQuX3NlbmR0b19yZWFkeSkKKyAgICAgICAgdHJhbnNwb3J0Ll9zZW5kdG9fcmVhZHkoKQorCisgICAgICAgIHNlbGYubG9vcC5hc3NlcnRfd3JpdGVyKDcsIHRyYW5zcG9ydC5fc2VuZHRvX3JlYWR5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgWyhiJ2RhdGExJywgKCkpLCAoYidkYXRhMicsICgpKV0sCisgICAgICAgICAgICBsaXN0KHRyYW5zcG9ydC5fYnVmZmVyKSkKKworICAgIGRlZiB0ZXN0X3NlbmR0b19yZWFkeV9leGNlcHRpb24oc2VsZik6CisgICAgICAgIGVyciA9IHNlbGYuc29jay5zZW5kdG8uc2lkZV9lZmZlY3QgPSBSdW50aW1lRXJyb3IoKQorCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuZGF0YWdyYW1fdHJhbnNwb3J0KCkKKyAgICAgICAgdHJhbnNwb3J0Ll9mYXRhbF9lcnJvciA9IG1vY2suTW9jaygpCisgICAgICAgIHRyYW5zcG9ydC5fYnVmZmVyLmFwcGVuZCgoYidkYXRhJywgKCkpKQorICAgICAgICB0cmFuc3BvcnQuX3NlbmR0b19yZWFkeSgpCisKKyAgICAgICAgdHJhbnNwb3J0Ll9mYXRhbF9lcnJvci5hc3NlcnRfY2FsbGVkX3dpdGgoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ZhdGFsIHdyaXRlIGVycm9yIG9uIGRhdGFncmFtIHRyYW5zcG9ydCcpCisKKyAgICBkZWYgdGVzdF9zZW5kdG9fcmVhZHlfZXJyb3JfcmVjZWl2ZWQoc2VsZik6CisgICAgICAgIHNlbGYuc29jay5zZW5kdG8uc2lkZV9lZmZlY3QgPSBDb25uZWN0aW9uUmVmdXNlZEVycm9yCisKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5kYXRhZ3JhbV90cmFuc3BvcnQoKQorICAgICAgICB0cmFuc3BvcnQuX2ZhdGFsX2Vycm9yID0gbW9jay5Nb2NrKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9idWZmZXIuYXBwZW5kKChiJ2RhdGEnLCAoKSkpCisgICAgICAgIHRyYW5zcG9ydC5fc2VuZHRvX3JlYWR5KCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRyYW5zcG9ydC5fZmF0YWxfZXJyb3IuY2FsbGVkKQorCisgICAgZGVmIHRlc3Rfc2VuZHRvX3JlYWR5X2Vycm9yX3JlY2VpdmVkX2Nvbm5lY3Rpb24oc2VsZik6CisgICAgICAgIHNlbGYuc29jay5zZW5kLnNpZGVfZWZmZWN0ID0gQ29ubmVjdGlvblJlZnVzZWRFcnJvcgorCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuZGF0YWdyYW1fdHJhbnNwb3J0KGFkZHJlc3M9KCcwLjAuMC4wJywgMSkpCisgICAgICAgIHRyYW5zcG9ydC5fZmF0YWxfZXJyb3IgPSBtb2NrLk1vY2soKQorICAgICAgICB0cmFuc3BvcnQuX2J1ZmZlci5hcHBlbmQoKGInZGF0YScsICgpKSkKKyAgICAgICAgdHJhbnNwb3J0Ll9zZW5kdG9fcmVhZHkoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHJhbnNwb3J0Ll9mYXRhbF9lcnJvci5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnByb3RvY29sLmVycm9yX3JlY2VpdmVkLmNhbGxlZCkKKworICAgIEBtb2NrLnBhdGNoKCdhc3luY2lvLmJhc2VfZXZlbnRzLmxvZ2dlci5lcnJvcicpCisgICAgZGVmIHRlc3RfZmF0YWxfZXJyb3JfY29ubmVjdGVkKHNlbGYsIG1fZXhjKToKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5kYXRhZ3JhbV90cmFuc3BvcnQoYWRkcmVzcz0oJzAuMC4wLjAnLCAxKSkKKyAgICAgICAgZXJyID0gQ29ubmVjdGlvblJlZnVzZWRFcnJvcigpCisgICAgICAgIHRyYW5zcG9ydC5fZmF0YWxfZXJyb3IoZXJyKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYucHJvdG9jb2wuZXJyb3JfcmVjZWl2ZWQuY2FsbGVkKQorICAgICAgICBtX2V4Yy5hc3NlcnRfY2FsbGVkX3dpdGgoCisgICAgICAgICAgICB0ZXN0X3V0aWxzLk1vY2tQYXR0ZXJuKAorICAgICAgICAgICAgICAgICdGYXRhbCBlcnJvciBvbiB0cmFuc3BvcnRcbnByb3RvY29sOi4qXG50cmFuc3BvcnQ6LionKSwKKyAgICAgICAgICAgIGV4Y19pbmZvPShDb25uZWN0aW9uUmVmdXNlZEVycm9yLCBNT0NLX0FOWSwgTU9DS19BTlkpKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF9zc2xwcm90by5weSBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X3NzbHByb3RvLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3Mjk2N2UKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF9zc2xwcm90by5weQpAQCAtMCwwICsxLDcxIEBACisiIiJUZXN0cyBmb3IgYXN5bmNpby9zc2xwcm90by5weS4iIiIKKworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIHVuaXR0ZXN0IGltcG9ydCBtb2NrCit0cnk6CisgICAgaW1wb3J0IHNzbAorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHNzbCA9IE5vbmUKKworaW1wb3J0IGFzeW5jaW8KK2Zyb20gYXN5bmNpbyBpbXBvcnQgc3NscHJvdG8KK2Zyb20gYXN5bmNpbyBpbXBvcnQgdGVzdF91dGlscworCisKK0B1bml0dGVzdC5za2lwSWYoc3NsIGlzIE5vbmUsICdObyBzc2wgbW9kdWxlJykKK2NsYXNzIFNzbFByb3RvSGFuZHNoYWtlVGVzdHModGVzdF91dGlscy5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubG9vcCA9IGFzeW5jaW8ubmV3X2V2ZW50X2xvb3AoKQorICAgICAgICBzZWxmLnNldF9ldmVudF9sb29wKHNlbGYubG9vcCkKKworICAgIGRlZiBzc2xfcHJvdG9jb2woc2VsZiwgd2FpdGVyPU5vbmUpOgorICAgICAgICBzc2xjb250ZXh0ID0gdGVzdF91dGlscy5kdW1teV9zc2xfY29udGV4dCgpCisgICAgICAgIGFwcF9wcm90byA9IGFzeW5jaW8uUHJvdG9jb2woKQorICAgICAgICBwcm90byA9IHNzbHByb3RvLlNTTFByb3RvY29sKHNlbGYubG9vcCwgYXBwX3Byb3RvLCBzc2xjb250ZXh0LCB3YWl0ZXIpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChwcm90by5fYXBwX3RyYW5zcG9ydC5jbG9zZSkKKyAgICAgICAgcmV0dXJuIHByb3RvCisKKyAgICBkZWYgY29ubmVjdGlvbl9tYWRlKHNlbGYsIHNzbF9wcm90bywgZG9faGFuZHNoYWtlPU5vbmUpOgorICAgICAgICB0cmFuc3BvcnQgPSBtb2NrLk1vY2soKQorICAgICAgICBzc2xwaXBlID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc3NscGlwZS5zaHV0ZG93bi5yZXR1cm5fdmFsdWUgPSBiJycKKyAgICAgICAgaWYgZG9faGFuZHNoYWtlOgorICAgICAgICAgICAgc3NscGlwZS5kb19oYW5kc2hha2Uuc2lkZV9lZmZlY3QgPSBkb19oYW5kc2hha2UKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGRlZiBtb2NrX2hhbmRzaGFrZShjYWxsYmFjayk6CisgICAgICAgICAgICAgICAgcmV0dXJuIFtdCisgICAgICAgICAgICBzc2xwaXBlLmRvX2hhbmRzaGFrZS5zaWRlX2VmZmVjdCA9IG1vY2tfaGFuZHNoYWtlCisgICAgICAgIHdpdGggbW9jay5wYXRjaCgnYXN5bmNpby5zc2xwcm90by5fU1NMUGlwZScsIHJldHVybl92YWx1ZT1zc2xwaXBlKToKKyAgICAgICAgICAgIHNzbF9wcm90by5jb25uZWN0aW9uX21hZGUodHJhbnNwb3J0KQorCisgICAgZGVmIHRlc3RfY2FuY2VsX2hhbmRzaGFrZShzZWxmKToKKyAgICAgICAgIyBQeXRob24gaXNzdWUgIzIzMTk3OiBjYW5jZWxsaW5nIGFuIGhhbmRzaGFrZSBtdXN0IG5vdCByYWlzZSBhbgorICAgICAgICAjIGV4Y2VwdGlvbiBvciBsb2cgYW4gZXJyb3IsIGV2ZW4gaWYgdGhlIGhhbmRzaGFrZSBmYWlsZWQKKyAgICAgICAgd2FpdGVyID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNzbF9wcm90byA9IHNlbGYuc3NsX3Byb3RvY29sKHdhaXRlcikKKyAgICAgICAgaGFuZHNoYWtlX2Z1dCA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIGRlZiBkb19oYW5kc2hha2UoY2FsbGJhY2spOgorICAgICAgICAgICAgZXhjID0gRXhjZXB0aW9uKCkKKyAgICAgICAgICAgIGNhbGxiYWNrKGV4YykKKyAgICAgICAgICAgIGhhbmRzaGFrZV9mdXQuc2V0X3Jlc3VsdChOb25lKQorICAgICAgICAgICAgcmV0dXJuIFtdCisKKyAgICAgICAgd2FpdGVyLmNhbmNlbCgpCisgICAgICAgIHNlbGYuY29ubmVjdGlvbl9tYWRlKHNzbF9wcm90bywgZG9faGFuZHNoYWtlKQorCisgICAgICAgIHdpdGggdGVzdF91dGlscy5kaXNhYmxlX2xvZ2dlcigpOgorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShoYW5kc2hha2VfZnV0KQorCisgICAgZGVmIHRlc3RfZW9mX3JlY2VpdmVkX3dhaXRlcihzZWxmKToKKyAgICAgICAgd2FpdGVyID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNzbF9wcm90byA9IHNlbGYuc3NsX3Byb3RvY29sKHdhaXRlcikKKyAgICAgICAgc2VsZi5jb25uZWN0aW9uX21hZGUoc3NsX3Byb3RvKQorICAgICAgICBzc2xfcHJvdG8uZW9mX3JlY2VpdmVkKCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh3YWl0ZXIuZXhjZXB0aW9uKCksIENvbm5lY3Rpb25SZXNldEVycm9yKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF9zdHJlYW1zLnB5IGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3Rfc3RyZWFtcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjExNWIxCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3Rfc3RyZWFtcy5weQpAQCAtMCwwICsxLDcyMyBAQAorIiIiVGVzdHMgZm9yIHN0cmVhbXMucHkuIiIiCisKK2ltcG9ydCBnYworaW1wb3J0IG9zCitpbXBvcnQgcXVldWUKK2ltcG9ydCBzb2NrZXQKK2ltcG9ydCBzeXMKK2ltcG9ydCB0aHJlYWRpbmcKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB1bml0dGVzdCBpbXBvcnQgbW9jawordHJ5OgorICAgIGltcG9ydCBzc2wKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBzc2wgPSBOb25lCisKK2ltcG9ydCBhc3luY2lvCitmcm9tIGFzeW5jaW8gaW1wb3J0IHRlc3RfdXRpbHMKKworCitjbGFzcyBTdHJlYW1SZWFkZXJUZXN0cyh0ZXN0X3V0aWxzLlRlc3RDYXNlKToKKworICAgIERBVEEgPSBiJ2xpbmUxXG5saW5lMlxubGluZTNcbicKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5sb29wID0gYXN5bmNpby5uZXdfZXZlbnRfbG9vcCgpCisgICAgICAgIHNlbGYuc2V0X2V2ZW50X2xvb3Aoc2VsZi5sb29wKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICAjIGp1c3QgaW4gY2FzZSBpZiB3ZSBoYXZlIHRyYW5zcG9ydCBjbG9zZSBjYWxsYmFja3MKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisKKyAgICAgICAgc2VsZi5sb29wLmNsb3NlKCkKKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIHN1cGVyKCkudGVhckRvd24oKQorCisgICAgQG1vY2sucGF0Y2goJ2FzeW5jaW8uc3RyZWFtcy5ldmVudHMnKQorICAgIGRlZiB0ZXN0X2N0b3JfZ2xvYmFsX2xvb3Aoc2VsZiwgbV9ldmVudHMpOgorICAgICAgICBzdHJlYW0gPSBhc3luY2lvLlN0cmVhbVJlYWRlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3RyZWFtLl9sb29wLCBtX2V2ZW50cy5nZXRfZXZlbnRfbG9vcC5yZXR1cm5fdmFsdWUpCisKKyAgICBkZWYgX2Jhc2V0ZXN0X29wZW5fY29ubmVjdGlvbihzZWxmLCBvcGVuX2Nvbm5lY3Rpb25fZnV0KToKKyAgICAgICAgcmVhZGVyLCB3cml0ZXIgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKG9wZW5fY29ubmVjdGlvbl9mdXQpCisgICAgICAgIHdyaXRlci53cml0ZShiJ0dFVCAvIEhUVFAvMS4wXHJcblxyXG4nKQorICAgICAgICBmID0gcmVhZGVyLnJlYWRsaW5lKCkKKyAgICAgICAgZGF0YSA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBiJ0hUVFAvMS4wIDIwMCBPS1xyXG4nKQorICAgICAgICBmID0gcmVhZGVyLnJlYWQoKQorICAgICAgICBkYXRhID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZGF0YS5lbmRzd2l0aChiJ1xyXG5cclxuVGVzdCBtZXNzYWdlJykpCisgICAgICAgIHdyaXRlci5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9vcGVuX2Nvbm5lY3Rpb24oc2VsZik6CisgICAgICAgIHdpdGggdGVzdF91dGlscy5ydW5fdGVzdF9zZXJ2ZXIoKSBhcyBodHRwZDoKKyAgICAgICAgICAgIGNvbm5fZnV0ID0gYXN5bmNpby5vcGVuX2Nvbm5lY3Rpb24oKmh0dHBkLmFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3A9c2VsZi5sb29wKQorICAgICAgICAgICAgc2VsZi5fYmFzZXRlc3Rfb3Blbl9jb25uZWN0aW9uKGNvbm5fZnV0KQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzb2NrZXQsICdBRl9VTklYJyksICdObyBVTklYIFNvY2tldHMnKQorICAgIGRlZiB0ZXN0X29wZW5fdW5peF9jb25uZWN0aW9uKHNlbGYpOgorICAgICAgICB3aXRoIHRlc3RfdXRpbHMucnVuX3Rlc3RfdW5peF9zZXJ2ZXIoKSBhcyBodHRwZDoKKyAgICAgICAgICAgIGNvbm5fZnV0ID0gYXN5bmNpby5vcGVuX3VuaXhfY29ubmVjdGlvbihodHRwZC5hZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3A9c2VsZi5sb29wKQorICAgICAgICAgICAgc2VsZi5fYmFzZXRlc3Rfb3Blbl9jb25uZWN0aW9uKGNvbm5fZnV0KQorCisgICAgZGVmIF9iYXNldGVzdF9vcGVuX2Nvbm5lY3Rpb25fbm9fbG9vcF9zc2woc2VsZiwgb3Blbl9jb25uZWN0aW9uX2Z1dCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlYWRlciwgd3JpdGVyID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShvcGVuX2Nvbm5lY3Rpb25fZnV0KQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgYXN5bmNpby5zZXRfZXZlbnRfbG9vcChOb25lKQorICAgICAgICB3cml0ZXIud3JpdGUoYidHRVQgLyBIVFRQLzEuMFxyXG5cclxuJykKKyAgICAgICAgZiA9IHJlYWRlci5yZWFkKCkKKyAgICAgICAgZGF0YSA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRhdGEuZW5kc3dpdGgoYidcclxuXHJcblRlc3QgbWVzc2FnZScpKQorCisgICAgICAgIHdyaXRlci5jbG9zZSgpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHNzbCBpcyBOb25lLCAnTm8gc3NsIG1vZHVsZScpCisgICAgZGVmIHRlc3Rfb3Blbl9jb25uZWN0aW9uX25vX2xvb3Bfc3NsKHNlbGYpOgorICAgICAgICB3aXRoIHRlc3RfdXRpbHMucnVuX3Rlc3Rfc2VydmVyKHVzZV9zc2w9VHJ1ZSkgYXMgaHR0cGQ6CisgICAgICAgICAgICBjb25uX2Z1dCA9IGFzeW5jaW8ub3Blbl9jb25uZWN0aW9uKAorICAgICAgICAgICAgICAgICpodHRwZC5hZGRyZXNzLAorICAgICAgICAgICAgICAgIHNzbD10ZXN0X3V0aWxzLmR1bW15X3NzbF9jb250ZXh0KCksCisgICAgICAgICAgICAgICAgbG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgICAgIHNlbGYuX2Jhc2V0ZXN0X29wZW5fY29ubmVjdGlvbl9ub19sb29wX3NzbChjb25uX2Z1dCkKKworICAgIEB1bml0dGVzdC5za2lwSWYoc3NsIGlzIE5vbmUsICdObyBzc2wgbW9kdWxlJykKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNvY2tldCwgJ0FGX1VOSVgnKSwgJ05vIFVOSVggU29ja2V0cycpCisgICAgZGVmIHRlc3Rfb3Blbl91bml4X2Nvbm5lY3Rpb25fbm9fbG9vcF9zc2woc2VsZik6CisgICAgICAgIHdpdGggdGVzdF91dGlscy5ydW5fdGVzdF91bml4X3NlcnZlcih1c2Vfc3NsPVRydWUpIGFzIGh0dHBkOgorICAgICAgICAgICAgY29ubl9mdXQgPSBhc3luY2lvLm9wZW5fdW5peF9jb25uZWN0aW9uKAorICAgICAgICAgICAgICAgIGh0dHBkLmFkZHJlc3MsCisgICAgICAgICAgICAgICAgc3NsPXRlc3RfdXRpbHMuZHVtbXlfc3NsX2NvbnRleHQoKSwKKyAgICAgICAgICAgICAgICBzZXJ2ZXJfaG9zdG5hbWU9JycsCisgICAgICAgICAgICAgICAgbG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgICAgIHNlbGYuX2Jhc2V0ZXN0X29wZW5fY29ubmVjdGlvbl9ub19sb29wX3NzbChjb25uX2Z1dCkKKworICAgIGRlZiBfYmFzZXRlc3Rfb3Blbl9jb25uZWN0aW9uX2Vycm9yKHNlbGYsIG9wZW5fY29ubmVjdGlvbl9mdXQpOgorICAgICAgICByZWFkZXIsIHdyaXRlciA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUob3Blbl9jb25uZWN0aW9uX2Z1dCkKKyAgICAgICAgd3JpdGVyLl9wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QoWmVyb0RpdmlzaW9uRXJyb3IoKSkKKyAgICAgICAgZiA9IHJlYWRlci5yZWFkKCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvcik6CisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGYpCisgICAgICAgIHdyaXRlci5jbG9zZSgpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorCisgICAgZGVmIHRlc3Rfb3Blbl9jb25uZWN0aW9uX2Vycm9yKHNlbGYpOgorICAgICAgICB3aXRoIHRlc3RfdXRpbHMucnVuX3Rlc3Rfc2VydmVyKCkgYXMgaHR0cGQ6CisgICAgICAgICAgICBjb25uX2Z1dCA9IGFzeW5jaW8ub3Blbl9jb25uZWN0aW9uKCpodHRwZC5hZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgICAgIHNlbGYuX2Jhc2V0ZXN0X29wZW5fY29ubmVjdGlvbl9lcnJvcihjb25uX2Z1dCkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc29ja2V0LCAnQUZfVU5JWCcpLCAnTm8gVU5JWCBTb2NrZXRzJykKKyAgICBkZWYgdGVzdF9vcGVuX3VuaXhfY29ubmVjdGlvbl9lcnJvcihzZWxmKToKKyAgICAgICAgd2l0aCB0ZXN0X3V0aWxzLnJ1bl90ZXN0X3VuaXhfc2VydmVyKCkgYXMgaHR0cGQ6CisgICAgICAgICAgICBjb25uX2Z1dCA9IGFzeW5jaW8ub3Blbl91bml4X2Nvbm5lY3Rpb24oaHR0cGQuYWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgICAgIHNlbGYuX2Jhc2V0ZXN0X29wZW5fY29ubmVjdGlvbl9lcnJvcihjb25uX2Z1dCkKKworICAgIGRlZiB0ZXN0X2ZlZWRfZW1wdHlfZGF0YShzZWxmKToKKyAgICAgICAgc3RyZWFtID0gYXN5bmNpby5TdHJlYW1SZWFkZXIobG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgc3RyZWFtLmZlZWRfZGF0YShiJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYicnLCBzdHJlYW0uX2J1ZmZlcikKKworICAgIGRlZiB0ZXN0X2ZlZWRfbm9uZW1wdHlfZGF0YShzZWxmKToKKyAgICAgICAgc3RyZWFtID0gYXN5bmNpby5TdHJlYW1SZWFkZXIobG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgc3RyZWFtLmZlZWRfZGF0YShzZWxmLkRBVEEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5EQVRBLCBzdHJlYW0uX2J1ZmZlcikKKworICAgIGRlZiB0ZXN0X3JlYWRfemVybyhzZWxmKToKKyAgICAgICAgIyBSZWFkIHplcm8gYnl0ZXMuCisgICAgICAgIHN0cmVhbSA9IGFzeW5jaW8uU3RyZWFtUmVhZGVyKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKHNlbGYuREFUQSkKKworICAgICAgICBkYXRhID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShzdHJlYW0ucmVhZCgwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJycsIGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5EQVRBLCBzdHJlYW0uX2J1ZmZlcikKKworICAgIGRlZiB0ZXN0X3JlYWQoc2VsZik6CisgICAgICAgICMgUmVhZCBieXRlcy4KKyAgICAgICAgc3RyZWFtID0gYXN5bmNpby5TdHJlYW1SZWFkZXIobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHJlYWRfdGFzayA9IGFzeW5jaW8uVGFzayhzdHJlYW0ucmVhZCgzMCksIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIGRlZiBjYigpOgorICAgICAgICAgICAgc3RyZWFtLmZlZWRfZGF0YShzZWxmLkRBVEEpCisgICAgICAgIHNlbGYubG9vcC5jYWxsX3Nvb24oY2IpCisKKyAgICAgICAgZGF0YSA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocmVhZF90YXNrKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuREFUQSwgZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJycsIHN0cmVhbS5fYnVmZmVyKQorCisgICAgZGVmIHRlc3RfcmVhZF9saW5lX2JyZWFrcyhzZWxmKToKKyAgICAgICAgIyBSZWFkIGJ5dGVzIHdpdGhvdXQgbGluZSBicmVha3MuCisgICAgICAgIHN0cmVhbSA9IGFzeW5jaW8uU3RyZWFtUmVhZGVyKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKGInbGluZTEnKQorICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKGInbGluZTInKQorCisgICAgICAgIGRhdGEgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHN0cmVhbS5yZWFkKDUpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidsaW5lMScsIGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidsaW5lMicsIHN0cmVhbS5fYnVmZmVyKQorCisgICAgZGVmIHRlc3RfcmVhZF9lb2Yoc2VsZik6CisgICAgICAgICMgUmVhZCBieXRlcywgc3RvcCBhdCBlb2YuCisgICAgICAgIHN0cmVhbSA9IGFzeW5jaW8uU3RyZWFtUmVhZGVyKGxvb3A9c2VsZi5sb29wKQorICAgICAgICByZWFkX3Rhc2sgPSBhc3luY2lvLlRhc2soc3RyZWFtLnJlYWQoMTAyNCksIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIGRlZiBjYigpOgorICAgICAgICAgICAgc3RyZWFtLmZlZWRfZW9mKCkKKyAgICAgICAgc2VsZi5sb29wLmNhbGxfc29vbihjYikKKworICAgICAgICBkYXRhID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShyZWFkX3Rhc2spCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYicnLCBkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInJywgc3RyZWFtLl9idWZmZXIpCisKKyAgICBkZWYgdGVzdF9yZWFkX3VudGlsX2VvZihzZWxmKToKKyAgICAgICAgIyBSZWFkIGFsbCBieXRlcyB1bnRpbCBlb2YuCisgICAgICAgIHN0cmVhbSA9IGFzeW5jaW8uU3RyZWFtUmVhZGVyKGxvb3A9c2VsZi5sb29wKQorICAgICAgICByZWFkX3Rhc2sgPSBhc3luY2lvLlRhc2soc3RyZWFtLnJlYWQoLTEpLCBsb29wPXNlbGYubG9vcCkKKworICAgICAgICBkZWYgY2IoKToKKyAgICAgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoYidjaHVuazFcbicpCisgICAgICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKGInY2h1bmsyJykKKyAgICAgICAgICAgIHN0cmVhbS5mZWVkX2VvZigpCisgICAgICAgIHNlbGYubG9vcC5jYWxsX3Nvb24oY2IpCisKKyAgICAgICAgZGF0YSA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocmVhZF90YXNrKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidjaHVuazFcbmNodW5rMicsIGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYicnLCBzdHJlYW0uX2J1ZmZlcikKKworICAgIGRlZiB0ZXN0X3JlYWRfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICBzdHJlYW0gPSBhc3luY2lvLlN0cmVhbVJlYWRlcihsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc3RyZWFtLmZlZWRfZGF0YShiJ2xpbmVcbicpCisKKyAgICAgICAgZGF0YSA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoc3RyZWFtLnJlYWQoMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidsaScsIGRhdGEpCisKKyAgICAgICAgc3RyZWFtLnNldF9leGNlcHRpb24oVmFsdWVFcnJvcigpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFZhbHVlRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIHN0cmVhbS5yZWFkKDIpKQorCisgICAgZGVmIHRlc3RfcmVhZGxpbmUoc2VsZik6CisgICAgICAgICMgUmVhZCBvbmUgbGluZS4gJ3JlYWRsaW5lJyB3aWxsIG5lZWQgdG8gd2FpdCBmb3IgdGhlIGRhdGEKKyAgICAgICAgIyB0byBjb21lIGZyb20gJ2NiJworICAgICAgICBzdHJlYW0gPSBhc3luY2lvLlN0cmVhbVJlYWRlcihsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc3RyZWFtLmZlZWRfZGF0YShiJ2NodW5rMSAnKQorICAgICAgICByZWFkX3Rhc2sgPSBhc3luY2lvLlRhc2soc3RyZWFtLnJlYWRsaW5lKCksIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIGRlZiBjYigpOgorICAgICAgICAgICAgc3RyZWFtLmZlZWRfZGF0YShiJ2NodW5rMiAnKQorICAgICAgICAgICAgc3RyZWFtLmZlZWRfZGF0YShiJ2NodW5rMyAnKQorICAgICAgICAgICAgc3RyZWFtLmZlZWRfZGF0YShiJ1xuIGNodW5rNCcpCisgICAgICAgIHNlbGYubG9vcC5jYWxsX3Nvb24oY2IpCisKKyAgICAgICAgbGluZSA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocmVhZF90YXNrKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInY2h1bmsxIGNodW5rMiBjaHVuazMgXG4nLCBsaW5lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInIGNodW5rNCcsIHN0cmVhbS5fYnVmZmVyKQorCisgICAgZGVmIHRlc3RfcmVhZGxpbmVfbGltaXRfd2l0aF9leGlzdGluZ19kYXRhKHNlbGYpOgorICAgICAgICAjIFJlYWQgb25lIGxpbmUuIFRoZSBkYXRhIGlzIGluIFN0cmVhbVJlYWRlcidzIGJ1ZmZlcgorICAgICAgICAjIGJlZm9yZSB0aGUgZXZlbnQgbG9vcCBpcyBydW4uCisKKyAgICAgICAgc3RyZWFtID0gYXN5bmNpby5TdHJlYW1SZWFkZXIobGltaXQ9MywgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoYidsaScpCisgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoYiduZTFcbmxpbmUyXG4nKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgVmFsdWVFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgc3RyZWFtLnJlYWRsaW5lKCkpCisgICAgICAgICMgVGhlIGJ1ZmZlciBzaG91bGQgY29udGFpbiB0aGUgcmVtYWluaW5nIGRhdGEgYWZ0ZXIgZXhjZXB0aW9uCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidsaW5lMlxuJywgc3RyZWFtLl9idWZmZXIpCisKKyAgICAgICAgc3RyZWFtID0gYXN5bmNpby5TdHJlYW1SZWFkZXIobGltaXQ9MywgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoYidsaScpCisgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoYiduZTEnKQorICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKGInbGknKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgVmFsdWVFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgc3RyZWFtLnJlYWRsaW5lKCkpCisgICAgICAgICMgTm8gYidcbicgYXQgdGhlIGVuZC4gVGhlICdsaW1pdCcgaXMgc2V0IHRvIDMuIFNvIGJlZm9yZQorICAgICAgICAjIHdhaXRpbmcgZm9yIHRoZSBuZXcgZGF0YSBpbiBidWZmZXIsICdyZWFkbGluZScgd2lsbCBjb25zdW1lCisgICAgICAgICMgdGhlIGVudGlyZSBidWZmZXIsIGFuZCBzaW5jZSB0aGUgbGVuZ3RoIG9mIHRoZSBjb25zdW1lZCBkYXRhCisgICAgICAgICMgaXMgbW9yZSB0aGFuIDMsIGl0IHdpbGwgcmFpc2UgYSBWYWx1ZUVycm9yLiBUaGUgYnVmZmVyIGlzCisgICAgICAgICMgZXhwZWN0ZWQgdG8gYmUgZW1wdHkgbm93LgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInJywgc3RyZWFtLl9idWZmZXIpCisKKyAgICBkZWYgdGVzdF9hdF9lb2Yoc2VsZik6CisgICAgICAgIHN0cmVhbSA9IGFzeW5jaW8uU3RyZWFtUmVhZGVyKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHN0cmVhbS5hdF9lb2YoKSkKKworICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKGInc29tZSBkYXRhXG4nKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHN0cmVhbS5hdF9lb2YoKSkKKworICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHN0cmVhbS5yZWFkbGluZSgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHN0cmVhbS5hdF9lb2YoKSkKKworICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKGInc29tZSBkYXRhXG4nKQorICAgICAgICBzdHJlYW0uZmVlZF9lb2YoKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHN0cmVhbS5yZWFkbGluZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3RyZWFtLmF0X2VvZigpKQorCisgICAgZGVmIHRlc3RfcmVhZGxpbmVfbGltaXQoc2VsZik6CisgICAgICAgICMgUmVhZCBvbmUgbGluZS4gU3RyZWFtUmVhZGVycyBhcmUgZmVkIHdpdGggZGF0YSBhZnRlcgorICAgICAgICAjIHRoZWlyICdyZWFkbGluZScgbWV0aG9kcyBhcmUgY2FsbGVkLgorCisgICAgICAgIHN0cmVhbSA9IGFzeW5jaW8uU3RyZWFtUmVhZGVyKGxpbWl0PTcsIGxvb3A9c2VsZi5sb29wKQorICAgICAgICBkZWYgY2IoKToKKyAgICAgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoYidjaHVuazEnKQorICAgICAgICAgICAgc3RyZWFtLmZlZWRfZGF0YShiJ2NodW5rMicpCisgICAgICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKGInY2h1bmszXG4nKQorICAgICAgICAgICAgc3RyZWFtLmZlZWRfZW9mKCkKKyAgICAgICAgc2VsZi5sb29wLmNhbGxfc29vbihjYikKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFZhbHVlRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIHN0cmVhbS5yZWFkbGluZSgpKQorICAgICAgICAjIFRoZSBidWZmZXIgaGFkIGp1c3Qgb25lIGxpbmUgb2YgZGF0YSwgYW5kIGFmdGVyIHJhaXNpbmcKKyAgICAgICAgIyBhIFZhbHVlRXJyb3IgaXQgc2hvdWxkIGJlIGVtcHR5LgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInJywgc3RyZWFtLl9idWZmZXIpCisKKyAgICAgICAgc3RyZWFtID0gYXN5bmNpby5TdHJlYW1SZWFkZXIobGltaXQ9NywgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGRlZiBjYigpOgorICAgICAgICAgICAgc3RyZWFtLmZlZWRfZGF0YShiJ2NodW5rMScpCisgICAgICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKGInY2h1bmsyXG4nKQorICAgICAgICAgICAgc3RyZWFtLmZlZWRfZGF0YShiJ2NodW5rM1xuJykKKyAgICAgICAgICAgIHN0cmVhbS5mZWVkX2VvZigpCisgICAgICAgIHNlbGYubG9vcC5jYWxsX3Nvb24oY2IpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBWYWx1ZUVycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBzdHJlYW0ucmVhZGxpbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ2NodW5rM1xuJywgc3RyZWFtLl9idWZmZXIpCisKKyAgICBkZWYgdGVzdF9yZWFkbGluZV9ub2xpbWl0X25vd2FpdChzZWxmKToKKyAgICAgICAgIyBBbGwgbmVlZGVkIGRhdGEgZm9yIHRoZSBmaXJzdCAncmVhZGxpbmUnIGNhbGwgd2lsbCBiZQorICAgICAgICAjIGluIHRoZSBidWZmZXIuCisgICAgICAgIHN0cmVhbSA9IGFzeW5jaW8uU3RyZWFtUmVhZGVyKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKHNlbGYuREFUQVs6Nl0pCisgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoc2VsZi5EQVRBWzY6XSkKKworICAgICAgICBsaW5lID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShzdHJlYW0ucmVhZGxpbmUoKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInbGluZTFcbicsIGxpbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidsaW5lMlxubGluZTNcbicsIHN0cmVhbS5fYnVmZmVyKQorCisgICAgZGVmIHRlc3RfcmVhZGxpbmVfZW9mKHNlbGYpOgorICAgICAgICBzdHJlYW0gPSBhc3luY2lvLlN0cmVhbVJlYWRlcihsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc3RyZWFtLmZlZWRfZGF0YShiJ3NvbWUgZGF0YScpCisgICAgICAgIHN0cmVhbS5mZWVkX2VvZigpCisKKyAgICAgICAgbGluZSA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoc3RyZWFtLnJlYWRsaW5lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidzb21lIGRhdGEnLCBsaW5lKQorCisgICAgZGVmIHRlc3RfcmVhZGxpbmVfZW1wdHlfZW9mKHNlbGYpOgorICAgICAgICBzdHJlYW0gPSBhc3luY2lvLlN0cmVhbVJlYWRlcihsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc3RyZWFtLmZlZWRfZW9mKCkKKworICAgICAgICBsaW5lID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShzdHJlYW0ucmVhZGxpbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJycsIGxpbmUpCisKKyAgICBkZWYgdGVzdF9yZWFkbGluZV9yZWFkX2J5dGVfY291bnQoc2VsZik6CisgICAgICAgIHN0cmVhbSA9IGFzeW5jaW8uU3RyZWFtUmVhZGVyKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKHNlbGYuREFUQSkKKworICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHN0cmVhbS5yZWFkbGluZSgpKQorCisgICAgICAgIGRhdGEgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHN0cmVhbS5yZWFkKDcpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidsaW5lMlxubCcsIGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidpbmUzXG4nLCBzdHJlYW0uX2J1ZmZlcikKKworICAgIGRlZiB0ZXN0X3JlYWRsaW5lX2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgc3RyZWFtID0gYXN5bmNpby5TdHJlYW1SZWFkZXIobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoYidsaW5lXG4nKQorCisgICAgICAgIGRhdGEgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHN0cmVhbS5yZWFkbGluZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInbGluZVxuJywgZGF0YSkKKworICAgICAgICBzdHJlYW0uc2V0X2V4Y2VwdGlvbihWYWx1ZUVycm9yKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgVmFsdWVFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgc3RyZWFtLnJlYWRsaW5lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYicnLCBzdHJlYW0uX2J1ZmZlcikKKworICAgIGRlZiB0ZXN0X3JlYWRleGFjdGx5X3plcm9fb3JfbGVzcyhzZWxmKToKKyAgICAgICAgIyBSZWFkIGV4YWN0IG51bWJlciBvZiBieXRlcyAoemVybyBvciBsZXNzKS4KKyAgICAgICAgc3RyZWFtID0gYXN5bmNpby5TdHJlYW1SZWFkZXIobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoc2VsZi5EQVRBKQorCisgICAgICAgIGRhdGEgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHN0cmVhbS5yZWFkZXhhY3RseSgwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJycsIGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5EQVRBLCBzdHJlYW0uX2J1ZmZlcikKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwgJ2xlc3MgdGhhbiB6ZXJvJyk6CisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHN0cmVhbS5yZWFkZXhhY3RseSgtMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5EQVRBLCBzdHJlYW0uX2J1ZmZlcikKKworICAgIGRlZiB0ZXN0X3JlYWRleGFjdGx5KHNlbGYpOgorICAgICAgICAjIFJlYWQgZXhhY3QgbnVtYmVyIG9mIGJ5dGVzLgorICAgICAgICBzdHJlYW0gPSBhc3luY2lvLlN0cmVhbVJlYWRlcihsb29wPXNlbGYubG9vcCkKKworICAgICAgICBuID0gMiAqIGxlbihzZWxmLkRBVEEpCisgICAgICAgIHJlYWRfdGFzayA9IGFzeW5jaW8uVGFzayhzdHJlYW0ucmVhZGV4YWN0bHkobiksIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIGRlZiBjYigpOgorICAgICAgICAgICAgc3RyZWFtLmZlZWRfZGF0YShzZWxmLkRBVEEpCisgICAgICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKHNlbGYuREFUQSkKKyAgICAgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoc2VsZi5EQVRBKQorICAgICAgICBzZWxmLmxvb3AuY2FsbF9zb29uKGNiKQorCisgICAgICAgIGRhdGEgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHJlYWRfdGFzaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLkRBVEEgKyBzZWxmLkRBVEEsIGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5EQVRBLCBzdHJlYW0uX2J1ZmZlcikKKworICAgIGRlZiB0ZXN0X3JlYWRleGFjdGx5X2VvZihzZWxmKToKKyAgICAgICAgIyBSZWFkIGV4YWN0IG51bWJlciBvZiBieXRlcyAoZW9mKS4KKyAgICAgICAgc3RyZWFtID0gYXN5bmNpby5TdHJlYW1SZWFkZXIobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIG4gPSAyICogbGVuKHNlbGYuREFUQSkKKyAgICAgICAgcmVhZF90YXNrID0gYXN5bmNpby5UYXNrKHN0cmVhbS5yZWFkZXhhY3RseShuKSwgbG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgZGVmIGNiKCk6CisgICAgICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKHNlbGYuREFUQSkKKyAgICAgICAgICAgIHN0cmVhbS5mZWVkX2VvZigpCisgICAgICAgIHNlbGYubG9vcC5jYWxsX3Nvb24oY2IpCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhhc3luY2lvLkluY29tcGxldGVSZWFkRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShyZWFkX3Rhc2spCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLnBhcnRpYWwsIHNlbGYuREFUQSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24uZXhwZWN0ZWQsIG4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGNtLmV4Y2VwdGlvbiksCisgICAgICAgICAgICAgICAgICAgICAgICAgJzE4IGJ5dGVzIHJlYWQgb24gYSB0b3RhbCBvZiAzNiBleHBlY3RlZCBieXRlcycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYicnLCBzdHJlYW0uX2J1ZmZlcikKKworICAgIGRlZiB0ZXN0X3JlYWRleGFjdGx5X2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgc3RyZWFtID0gYXN5bmNpby5TdHJlYW1SZWFkZXIobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoYidsaW5lXG4nKQorCisgICAgICAgIGRhdGEgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHN0cmVhbS5yZWFkZXhhY3RseSgyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ2xpJywgZGF0YSkKKworICAgICAgICBzdHJlYW0uc2V0X2V4Y2VwdGlvbihWYWx1ZUVycm9yKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgVmFsdWVFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgc3RyZWFtLnJlYWRleGFjdGx5KDIpKQorCisgICAgZGVmIHRlc3RfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICBzdHJlYW0gPSBhc3luY2lvLlN0cmVhbVJlYWRlcihsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc3RyZWFtLmV4Y2VwdGlvbigpKQorCisgICAgICAgIGV4YyA9IFZhbHVlRXJyb3IoKQorICAgICAgICBzdHJlYW0uc2V0X2V4Y2VwdGlvbihleGMpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3RyZWFtLmV4Y2VwdGlvbigpLCBleGMpCisKKyAgICBkZWYgdGVzdF9leGNlcHRpb25fd2FpdGVyKHNlbGYpOgorICAgICAgICBzdHJlYW0gPSBhc3luY2lvLlN0cmVhbVJlYWRlcihsb29wPXNlbGYubG9vcCkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHNldF9lcnIoKToKKyAgICAgICAgICAgIHN0cmVhbS5zZXRfZXhjZXB0aW9uKFZhbHVlRXJyb3IoKSkKKworICAgICAgICB0MSA9IGFzeW5jaW8uVGFzayhzdHJlYW0ucmVhZGxpbmUoKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHQyID0gYXN5bmNpby5UYXNrKHNldF9lcnIoKSwgbG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShhc3luY2lvLndhaXQoW3QxLCB0Ml0sIGxvb3A9c2VsZi5sb29wKSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0MS5yZXN1bHQpCisKKyAgICBkZWYgdGVzdF9leGNlcHRpb25fY2FuY2VsKHNlbGYpOgorICAgICAgICBzdHJlYW0gPSBhc3luY2lvLlN0cmVhbVJlYWRlcihsb29wPXNlbGYubG9vcCkKKworICAgICAgICB0ID0gYXN5bmNpby5UYXNrKHN0cmVhbS5yZWFkbGluZSgpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHQuY2FuY2VsKCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgICMgVGhlIGZvbGxvd2luZyBsaW5lIGZhaWxzIGlmIHNldF9leGNlcHRpb24oKSBpc24ndCBjYXJlZnVsLgorICAgICAgICBzdHJlYW0uc2V0X2V4Y2VwdGlvbihSdW50aW1lRXJyb3IoJ21lc3NhZ2UnKSkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3RyZWFtLl93YWl0ZXIsIE5vbmUpCisKKyAgICBkZWYgdGVzdF9zdGFydF9zZXJ2ZXIoc2VsZik6CisKKyAgICAgICAgY2xhc3MgTXlTZXJ2ZXI6CisKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb29wKToKKyAgICAgICAgICAgICAgICBzZWxmLnNlcnZlciA9IE5vbmUKKyAgICAgICAgICAgICAgICBzZWxmLmxvb3AgPSBsb29wCisKKyAgICAgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICAgICAgZGVmIGhhbmRsZV9jbGllbnQoc2VsZiwgY2xpZW50X3JlYWRlciwgY2xpZW50X3dyaXRlcik6CisgICAgICAgICAgICAgICAgZGF0YSA9IHlpZWxkIGZyb20gY2xpZW50X3JlYWRlci5yZWFkbGluZSgpCisgICAgICAgICAgICAgICAgY2xpZW50X3dyaXRlci53cml0ZShkYXRhKQorICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gY2xpZW50X3dyaXRlci5kcmFpbigpCisgICAgICAgICAgICAgICAgY2xpZW50X3dyaXRlci5jbG9zZSgpCisKKyAgICAgICAgICAgIGRlZiBzdGFydChzZWxmKToKKyAgICAgICAgICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldCgpCisgICAgICAgICAgICAgICAgc29jay5iaW5kKCgnMTI3LjAuMC4xJywgMCkpCisgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXIgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKAorICAgICAgICAgICAgICAgICAgICBhc3luY2lvLnN0YXJ0X3NlcnZlcihzZWxmLmhhbmRsZV9jbGllbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2s9c29jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9vcD1zZWxmLmxvb3ApKQorICAgICAgICAgICAgICAgIHJldHVybiBzb2NrLmdldHNvY2tuYW1lKCkKKworICAgICAgICAgICAgZGVmIGhhbmRsZV9jbGllbnRfY2FsbGJhY2soc2VsZiwgY2xpZW50X3JlYWRlciwgY2xpZW50X3dyaXRlcik6CisgICAgICAgICAgICAgICAgc2VsZi5sb29wLmNyZWF0ZV90YXNrKHNlbGYuaGFuZGxlX2NsaWVudChjbGllbnRfcmVhZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50X3dyaXRlcikpCisKKyAgICAgICAgICAgIGRlZiBzdGFydF9jYWxsYmFjayhzZWxmKToKKyAgICAgICAgICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldCgpCisgICAgICAgICAgICAgICAgc29jay5iaW5kKCgnMTI3LjAuMC4xJywgMCkpCisgICAgICAgICAgICAgICAgYWRkciA9IHNvY2suZ2V0c29ja25hbWUoKQorICAgICAgICAgICAgICAgIHNvY2suY2xvc2UoKQorICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSgKKyAgICAgICAgICAgICAgICAgICAgYXN5bmNpby5zdGFydF9zZXJ2ZXIoc2VsZi5oYW5kbGVfY2xpZW50X2NhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3N0PWFkZHJbMF0sIHBvcnQ9YWRkclsxXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9vcD1zZWxmLmxvb3ApKQorICAgICAgICAgICAgICAgIHJldHVybiBhZGRyCisKKyAgICAgICAgICAgIGRlZiBzdG9wKHNlbGYpOgorICAgICAgICAgICAgICAgIGlmIHNlbGYuc2VydmVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnNlcnZlci5jbG9zZSgpCisgICAgICAgICAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoc2VsZi5zZXJ2ZXIud2FpdF9jbG9zZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXIgPSBOb25lCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBjbGllbnQoYWRkcik6CisgICAgICAgICAgICByZWFkZXIsIHdyaXRlciA9IHlpZWxkIGZyb20gYXN5bmNpby5vcGVuX2Nvbm5lY3Rpb24oCisgICAgICAgICAgICAgICAgKmFkZHIsIGxvb3A9c2VsZi5sb29wKQorICAgICAgICAgICAgIyBzZW5kIGEgbGluZQorICAgICAgICAgICAgd3JpdGVyLndyaXRlKGIiaGVsbG8gd29ybGQhXG4iKQorICAgICAgICAgICAgIyByZWFkIGl0IGJhY2sKKyAgICAgICAgICAgIG1zZ2JhY2sgPSB5aWVsZCBmcm9tIHJlYWRlci5yZWFkbGluZSgpCisgICAgICAgICAgICB3cml0ZXIuY2xvc2UoKQorICAgICAgICAgICAgcmV0dXJuIG1zZ2JhY2sKKworICAgICAgICAjIHRlc3QgdGhlIHNlcnZlciB2YXJpYW50IHdpdGggYSBjb3JvdXRpbmUgYXMgY2xpZW50IGhhbmRsZXIKKyAgICAgICAgc2VydmVyID0gTXlTZXJ2ZXIoc2VsZi5sb29wKQorICAgICAgICBhZGRyID0gc2VydmVyLnN0YXJ0KCkKKyAgICAgICAgbXNnID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShhc3luY2lvLlRhc2soY2xpZW50KGFkZHIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29wPXNlbGYubG9vcCkpCisgICAgICAgIHNlcnZlci5zdG9wKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2csIGIiaGVsbG8gd29ybGQhXG4iKQorCisgICAgICAgICMgdGVzdCB0aGUgc2VydmVyIHZhcmlhbnQgd2l0aCBhIGNhbGxiYWNrIGFzIGNsaWVudCBoYW5kbGVyCisgICAgICAgIHNlcnZlciA9IE15U2VydmVyKHNlbGYubG9vcCkKKyAgICAgICAgYWRkciA9IHNlcnZlci5zdGFydF9jYWxsYmFjaygpCisgICAgICAgIG1zZyA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoYXN5bmNpby5UYXNrKGNsaWVudChhZGRyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9vcD1zZWxmLmxvb3ApKQorICAgICAgICBzZXJ2ZXIuc3RvcCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLCBiImhlbGxvIHdvcmxkIVxuIikKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc29ja2V0LCAnQUZfVU5JWCcpLCAnTm8gVU5JWCBTb2NrZXRzJykKKyAgICBkZWYgdGVzdF9zdGFydF91bml4X3NlcnZlcihzZWxmKToKKworICAgICAgICBjbGFzcyBNeVNlcnZlcjoKKworICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxvb3AsIHBhdGgpOgorICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyID0gTm9uZQorICAgICAgICAgICAgICAgIHNlbGYubG9vcCA9IGxvb3AKKyAgICAgICAgICAgICAgICBzZWxmLnBhdGggPSBwYXRoCisKKyAgICAgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICAgICAgZGVmIGhhbmRsZV9jbGllbnQoc2VsZiwgY2xpZW50X3JlYWRlciwgY2xpZW50X3dyaXRlcik6CisgICAgICAgICAgICAgICAgZGF0YSA9IHlpZWxkIGZyb20gY2xpZW50X3JlYWRlci5yZWFkbGluZSgpCisgICAgICAgICAgICAgICAgY2xpZW50X3dyaXRlci53cml0ZShkYXRhKQorICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gY2xpZW50X3dyaXRlci5kcmFpbigpCisgICAgICAgICAgICAgICAgY2xpZW50X3dyaXRlci5jbG9zZSgpCisKKyAgICAgICAgICAgIGRlZiBzdGFydChzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLnNlcnZlciA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoCisgICAgICAgICAgICAgICAgICAgIGFzeW5jaW8uc3RhcnRfdW5peF9zZXJ2ZXIoc2VsZi5oYW5kbGVfY2xpZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg9c2VsZi5wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3A9c2VsZi5sb29wKSkKKworICAgICAgICAgICAgZGVmIGhhbmRsZV9jbGllbnRfY2FsbGJhY2soc2VsZiwgY2xpZW50X3JlYWRlciwgY2xpZW50X3dyaXRlcik6CisgICAgICAgICAgICAgICAgc2VsZi5sb29wLmNyZWF0ZV90YXNrKHNlbGYuaGFuZGxlX2NsaWVudChjbGllbnRfcmVhZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50X3dyaXRlcikpCisKKyAgICAgICAgICAgIGRlZiBzdGFydF9jYWxsYmFjayhzZWxmKToKKyAgICAgICAgICAgICAgICBzdGFydCA9IGFzeW5jaW8uc3RhcnRfdW5peF9zZXJ2ZXIoc2VsZi5oYW5kbGVfY2xpZW50X2NhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoPXNlbGYucGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXIgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHN0YXJ0KQorCisgICAgICAgICAgICBkZWYgc3RvcChzZWxmKToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLnNlcnZlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXIuY2xvc2UoKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHNlbGYuc2VydmVyLndhaXRfY2xvc2VkKCkpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyID0gTm9uZQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgY2xpZW50KHBhdGgpOgorICAgICAgICAgICAgcmVhZGVyLCB3cml0ZXIgPSB5aWVsZCBmcm9tIGFzeW5jaW8ub3Blbl91bml4X2Nvbm5lY3Rpb24oCisgICAgICAgICAgICAgICAgcGF0aCwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgICAgICAjIHNlbmQgYSBsaW5lCisgICAgICAgICAgICB3cml0ZXIud3JpdGUoYiJoZWxsbyB3b3JsZCFcbiIpCisgICAgICAgICAgICAjIHJlYWQgaXQgYmFjaworICAgICAgICAgICAgbXNnYmFjayA9IHlpZWxkIGZyb20gcmVhZGVyLnJlYWRsaW5lKCkKKyAgICAgICAgICAgIHdyaXRlci5jbG9zZSgpCisgICAgICAgICAgICByZXR1cm4gbXNnYmFjaworCisgICAgICAgICMgdGVzdCB0aGUgc2VydmVyIHZhcmlhbnQgd2l0aCBhIGNvcm91dGluZSBhcyBjbGllbnQgaGFuZGxlcgorICAgICAgICB3aXRoIHRlc3RfdXRpbHMudW5peF9zb2NrZXRfcGF0aCgpIGFzIHBhdGg6CisgICAgICAgICAgICBzZXJ2ZXIgPSBNeVNlcnZlcihzZWxmLmxvb3AsIHBhdGgpCisgICAgICAgICAgICBzZXJ2ZXIuc3RhcnQoKQorICAgICAgICAgICAgbXNnID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShhc3luY2lvLlRhc2soY2xpZW50KHBhdGgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9vcD1zZWxmLmxvb3ApKQorICAgICAgICAgICAgc2VydmVyLnN0b3AoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2csIGIiaGVsbG8gd29ybGQhXG4iKQorCisgICAgICAgICMgdGVzdCB0aGUgc2VydmVyIHZhcmlhbnQgd2l0aCBhIGNhbGxiYWNrIGFzIGNsaWVudCBoYW5kbGVyCisgICAgICAgIHdpdGggdGVzdF91dGlscy51bml4X3NvY2tldF9wYXRoKCkgYXMgcGF0aDoKKyAgICAgICAgICAgIHNlcnZlciA9IE15U2VydmVyKHNlbGYubG9vcCwgcGF0aCkKKyAgICAgICAgICAgIHNlcnZlci5zdGFydF9jYWxsYmFjaygpCisgICAgICAgICAgICBtc2cgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGFzeW5jaW8uVGFzayhjbGllbnQocGF0aCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29wPXNlbGYubG9vcCkpCisgICAgICAgICAgICBzZXJ2ZXIuc3RvcCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZywgYiJoZWxsbyB3b3JsZCFcbiIpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInLCAiRG9uJ3QgaGF2ZSBwaXBlcyIpCisgICAgZGVmIHRlc3RfcmVhZF9hbGxfZnJvbV9waXBlX3JlYWRlcihzZWxmKToKKyAgICAgICAgIyBTZWUgYXN5bmNpbyBpc3N1ZSAxNjguICBUaGlzIHRlc3QgaXMgZGVyaXZlZCBmcm9tIHRoZSBleGFtcGxlCisgICAgICAgICMgc3VicHJvY2Vzc19hdHRhY2hfcmVhZF9waXBlLnB5LCBidXQgd2UgY29uZmlndXJlIHRoZQorICAgICAgICAjIFN0cmVhbVJlYWRlcidzIGxpbWl0IHNvIHRoYXQgdHdpY2UgaXQgaXMgbGVzcyB0aGFuIHRoZSBzaXplCisgICAgICAgICMgb2YgdGhlIGRhdGEgd3JpdHRlci4gIEFsc28gd2UgbXVzdCBleHBsaWNpdGx5IGF0dGFjaCBhIGNoaWxkCisgICAgICAgICMgd2F0Y2hlciB0byB0aGUgZXZlbnQgbG9vcC4KKworICAgICAgICBjb2RlID0gIiIiXAoraW1wb3J0IG9zLCBzeXMKK2ZkID0gaW50KHN5cy5hcmd2WzFdKQorb3Mud3JpdGUoZmQsIGInZGF0YScpCitvcy5jbG9zZShmZCkKKyIiIgorICAgICAgICByZmQsIHdmZCA9IG9zLnBpcGUoKQorICAgICAgICBhcmdzID0gW3N5cy5leGVjdXRhYmxlLCAnLWMnLCBjb2RlLCBzdHIod2ZkKV0KKworICAgICAgICBwaXBlID0gb3BlbihyZmQsICdyYicsIDApCisgICAgICAgIHJlYWRlciA9IGFzeW5jaW8uU3RyZWFtUmVhZGVyKGxvb3A9c2VsZi5sb29wLCBsaW1pdD0xKQorICAgICAgICBwcm90b2NvbCA9IGFzeW5jaW8uU3RyZWFtUmVhZGVyUHJvdG9jb2wocmVhZGVyLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdHJhbnNwb3J0LCBfID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSgKKyAgICAgICAgICAgIHNlbGYubG9vcC5jb25uZWN0X3JlYWRfcGlwZShsYW1iZGE6IHByb3RvY29sLCBwaXBlKSkKKworICAgICAgICB3YXRjaGVyID0gYXN5bmNpby5TYWZlQ2hpbGRXYXRjaGVyKCkKKyAgICAgICAgd2F0Y2hlci5hdHRhY2hfbG9vcChzZWxmLmxvb3ApCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGFzeW5jaW8uc2V0X2NoaWxkX3dhdGNoZXIod2F0Y2hlcikKKyAgICAgICAgICAgIGNyZWF0ZSA9IGFzeW5jaW8uY3JlYXRlX3N1YnByb2Nlc3NfZXhlYygqYXJncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzX2Zkcz17d2ZkfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgICAgIHByb2MgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNyZWF0ZSkKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvYy53YWl0KCkpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBhc3luY2lvLnNldF9jaGlsZF93YXRjaGVyKE5vbmUpCisKKyAgICAgICAgb3MuY2xvc2Uod2ZkKQorICAgICAgICBkYXRhID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShyZWFkZXIucmVhZCgtMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgYidkYXRhJykKKworICAgIGRlZiB0ZXN0X3N0cmVhbXJlYWRlcl9jb25zdHJ1Y3RvcihzZWxmKToKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGFzeW5jaW8uc2V0X2V2ZW50X2xvb3AsIE5vbmUpCisgICAgICAgIGFzeW5jaW8uc2V0X2V2ZW50X2xvb3Aoc2VsZi5sb29wKQorCisgICAgICAgICMgYXN5bmNpbyBpc3N1ZSAjMTg0OiBFbnN1cmUgdGhhdCBTdHJlYW1SZWFkZXJQcm90b2NvbCBjb25zdHJ1Y3RvcgorICAgICAgICAjIHJldHJpZXZlcyB0aGUgY3VycmVudCBsb29wIGlmIHRoZSBsb29wIHBhcmFtZXRlciBpcyBub3Qgc2V0CisgICAgICAgIHJlYWRlciA9IGFzeW5jaW8uU3RyZWFtUmVhZGVyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhyZWFkZXIuX2xvb3AsIHNlbGYubG9vcCkKKworICAgIGRlZiB0ZXN0X3N0cmVhbXJlYWRlcnByb3RvY29sX2NvbnN0cnVjdG9yKHNlbGYpOgorICAgICAgICBzZWxmLmFkZENsZWFudXAoYXN5bmNpby5zZXRfZXZlbnRfbG9vcCwgTm9uZSkKKyAgICAgICAgYXN5bmNpby5zZXRfZXZlbnRfbG9vcChzZWxmLmxvb3ApCisKKyAgICAgICAgIyBhc3luY2lvIGlzc3VlICMxODQ6IEVuc3VyZSB0aGF0IFN0cmVhbVJlYWRlclByb3RvY29sIGNvbnN0cnVjdG9yCisgICAgICAgICMgcmV0cmlldmVzIHRoZSBjdXJyZW50IGxvb3AgaWYgdGhlIGxvb3AgcGFyYW1ldGVyIGlzIG5vdCBzZXQKKyAgICAgICAgcmVhZGVyID0gbW9jay5Nb2NrKCkKKyAgICAgICAgcHJvdG9jb2wgPSBhc3luY2lvLlN0cmVhbVJlYWRlclByb3RvY29sKHJlYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhwcm90b2NvbC5fbG9vcCwgc2VsZi5sb29wKQorCisgICAgZGVmIHRlc3RfZHJhaW5fcmFpc2VzKHNlbGYpOgorICAgICAgICAjIFNlZSBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMjU0NDEKKworICAgICAgICAjIFRoaXMgdGVzdCBzaG91bGQgbm90IHVzZSBhc3luY2lvIGZvciB0aGUgbW9jayBzZXJ2ZXI7IHRoZQorICAgICAgICAjIHdob2xlIHBvaW50IG9mIHRoZSB0ZXN0IGlzIHRvIHRlc3QgZm9yIGEgYnVnIGluIGRyYWluKCkKKyAgICAgICAgIyB3aGVyZSBpdCBuZXZlciBnaXZlcyB1cCB0aGUgZXZlbnQgbG9vcCBidXQgdGhlIHNvY2tldCBpcworICAgICAgICAjIGNsb3NlZCBvbiB0aGUgIHNlcnZlciBzaWRlLgorCisgICAgICAgIHEgPSBxdWV1ZS5RdWV1ZSgpCisKKyAgICAgICAgZGVmIHNlcnZlcigpOgorICAgICAgICAgICAgIyBSdW5zIGluIGEgc2VwYXJhdGUgdGhyZWFkLgorICAgICAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoKQorICAgICAgICAgICAgd2l0aCBzb2NrOgorICAgICAgICAgICAgICAgIHNvY2suYmluZCgoJ2xvY2FsaG9zdCcsIDApKQorICAgICAgICAgICAgICAgIHNvY2subGlzdGVuKDEpCisgICAgICAgICAgICAgICAgYWRkciA9IHNvY2suZ2V0c29ja25hbWUoKQorICAgICAgICAgICAgICAgIHEucHV0KGFkZHIpCisgICAgICAgICAgICAgICAgY2x0LCBfID0gc29jay5hY2NlcHQoKQorICAgICAgICAgICAgICAgIGNsdC5jbG9zZSgpCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBjbGllbnQoaG9zdCwgcG9ydCk6CisgICAgICAgICAgICByZWFkZXIsIHdyaXRlciA9IHlpZWxkIGZyb20gYXN5bmNpby5vcGVuX2Nvbm5lY3Rpb24oaG9zdCwgcG9ydCwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgIHdyaXRlci53cml0ZShiImZvb1xuIikKKyAgICAgICAgICAgICAgICB5aWVsZCBmcm9tIHdyaXRlci5kcmFpbigpCisKKyAgICAgICAgIyBTdGFydCB0aGUgc2VydmVyIHRocmVhZCBhbmQgd2FpdCBmb3IgaXQgdG8gYmUgbGlzdGVuaW5nLgorICAgICAgICB0aHJlYWQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1zZXJ2ZXIpCisgICAgICAgIHRocmVhZC5zZXREYWVtb24oVHJ1ZSkKKyAgICAgICAgdGhyZWFkLnN0YXJ0KCkKKyAgICAgICAgYWRkciA9IHEuZ2V0KCkKKworICAgICAgICAjIFNob3VsZCBub3QgYmUgc3R1Y2sgaW4gYW4gaW5maW5pdGUgbG9vcC4KKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcygoQ29ubmVjdGlvblJlc2V0RXJyb3IsIEJyb2tlblBpcGVFcnJvcikpOgorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjbGllbnQoKmFkZHIpKQorCisgICAgICAgICMgQ2xlYW4gdXAgdGhlIHRocmVhZC4gIChPbmx5IG9uIHN1Y2Nlc3M7IG9uIGZhaWx1cmUsIGl0IG1heQorICAgICAgICAjIGJlIHN0dWNrIGluIGFjY2VwdCgpLikKKyAgICAgICAgdGhyZWFkLmpvaW4oKQorCisgICAgZGVmIHRlc3RfX19yZXByX18oc2VsZik6CisgICAgICAgIHN0cmVhbSA9IGFzeW5jaW8uU3RyZWFtUmVhZGVyKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCI8U3RyZWFtUmVhZGVyPiIsIHJlcHIoc3RyZWFtKSkKKworICAgIGRlZiB0ZXN0X19fcmVwcl9fbm9uZGVmYXVsdF9saW1pdChzZWxmKToKKyAgICAgICAgc3RyZWFtID0gYXN5bmNpby5TdHJlYW1SZWFkZXIobG9vcD1zZWxmLmxvb3AsIGxpbWl0PTEyMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiPFN0cmVhbVJlYWRlciBsPTEyMz4iLCByZXByKHN0cmVhbSkpCisKKyAgICBkZWYgdGVzdF9fX3JlcHJfX2VvZihzZWxmKToKKyAgICAgICAgc3RyZWFtID0gYXN5bmNpby5TdHJlYW1SZWFkZXIobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHN0cmVhbS5mZWVkX2VvZigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIjxTdHJlYW1SZWFkZXIgZW9mPiIsIHJlcHIoc3RyZWFtKSkKKworICAgIGRlZiB0ZXN0X19fcmVwcl9fZGF0YShzZWxmKToKKyAgICAgICAgc3RyZWFtID0gYXN5bmNpby5TdHJlYW1SZWFkZXIobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoYidkYXRhJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiPFN0cmVhbVJlYWRlciA0IGJ5dGVzPiIsIHJlcHIoc3RyZWFtKSkKKworICAgIGRlZiB0ZXN0X19fcmVwcl9fZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICBzdHJlYW0gPSBhc3luY2lvLlN0cmVhbVJlYWRlcihsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZXhjID0gUnVudGltZUVycm9yKCkKKyAgICAgICAgc3RyZWFtLnNldF9leGNlcHRpb24oZXhjKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCI8U3RyZWFtUmVhZGVyIGU9UnVudGltZUVycm9yKCk+IiwgcmVwcihzdHJlYW0pKQorCisgICAgZGVmIHRlc3RfX19yZXByX193YWl0ZXIoc2VsZik6CisgICAgICAgIHN0cmVhbSA9IGFzeW5jaW8uU3RyZWFtUmVhZGVyKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzdHJlYW0uX3dhaXRlciA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydFJlZ2V4KAorICAgICAgICAgICAgcmVwcihzdHJlYW0pLAorICAgICAgICAgICAgIjxTdHJlYW1SZWFkZXIgdz08RnV0dXJlIHBlbmRpbmdbXFMgXSo+PiIpCisgICAgICAgIHN0cmVhbS5fd2FpdGVyLnNldF9yZXN1bHQoTm9uZSkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShzdHJlYW0uX3dhaXRlcikKKyAgICAgICAgc3RyZWFtLl93YWl0ZXIgPSBOb25lCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIjxTdHJlYW1SZWFkZXI+IiwgcmVwcihzdHJlYW0pKQorCisgICAgZGVmIHRlc3RfX19yZXByX190cmFuc3BvcnQoc2VsZik6CisgICAgICAgIHN0cmVhbSA9IGFzeW5jaW8uU3RyZWFtUmVhZGVyKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzdHJlYW0uX3RyYW5zcG9ydCA9IG1vY2suTW9jaygpCisgICAgICAgIHN0cmVhbS5fdHJhbnNwb3J0Ll9fcmVwcl9fID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc3RyZWFtLl90cmFuc3BvcnQuX19yZXByX18ucmV0dXJuX3ZhbHVlID0gIjxUcmFuc3BvcnQ+IgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCI8U3RyZWFtUmVhZGVyIHQ9PFRyYW5zcG9ydD4+IiwgcmVwcihzdHJlYW0pKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF9zdWJwcm9jZXNzLnB5IGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3Rfc3VicHJvY2Vzcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTBmMTdkCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3Rfc3VicHJvY2Vzcy5weQpAQCAtMCwwICsxLDQ3MiBAQAoraW1wb3J0IHNpZ25hbAoraW1wb3J0IHN5cworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgd2FybmluZ3MKK2Zyb20gdW5pdHRlc3QgaW1wb3J0IG1vY2sKKworaW1wb3J0IGFzeW5jaW8KK2Zyb20gYXN5bmNpbyBpbXBvcnQgYmFzZV9zdWJwcm9jZXNzCitmcm9tIGFzeW5jaW8gaW1wb3J0IHN1YnByb2Nlc3MKK2Zyb20gYXN5bmNpbyBpbXBvcnQgdGVzdF91dGlscwordHJ5OgorICAgIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGZyb20gYXN5bmNpbyBpbXBvcnQgdGVzdF9zdXBwb3J0IGFzIHN1cHBvcnQKK2lmIHN5cy5wbGF0Zm9ybSAhPSAnd2luMzInOgorICAgIGZyb20gYXN5bmNpbyBpbXBvcnQgdW5peF9ldmVudHMKKworIyBQcm9ncmFtIGJsb2NraW5nCitQUk9HUkFNX0JMT0NLRUQgPSBbc3lzLmV4ZWN1dGFibGUsICctYycsICdpbXBvcnQgdGltZTsgdGltZS5zbGVlcCgzNjAwKSddCisKKyMgUHJvZ3JhbSBjb3B5aW5nIGlucHV0IHRvIG91dHB1dAorUFJPR1JBTV9DQVQgPSBbCisgICAgc3lzLmV4ZWN1dGFibGUsICctYycsCisgICAgJzsnLmpvaW4oKCdpbXBvcnQgc3lzJywKKyAgICAgICAgICAgICAgJ2RhdGEgPSBzeXMuc3RkaW4uYnVmZmVyLnJlYWQoKScsCisgICAgICAgICAgICAgICdzeXMuc3Rkb3V0LmJ1ZmZlci53cml0ZShkYXRhKScpKV0KKworY2xhc3MgVGVzdFN1YnByb2Nlc3NUcmFuc3BvcnQoYmFzZV9zdWJwcm9jZXNzLkJhc2VTdWJwcm9jZXNzVHJhbnNwb3J0KToKKyAgICBkZWYgX3N0YXJ0KHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHNlbGYuX3Byb2MgPSBtb2NrLk1vY2soKQorICAgICAgICBzZWxmLl9wcm9jLnN0ZGluID0gTm9uZQorICAgICAgICBzZWxmLl9wcm9jLnN0ZG91dCA9IE5vbmUKKyAgICAgICAgc2VsZi5fcHJvYy5zdGRlcnIgPSBOb25lCisKKworY2xhc3MgU3VicHJvY2Vzc1RyYW5zcG9ydFRlc3RzKHRlc3RfdXRpbHMuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5sb29wID0gc2VsZi5uZXdfdGVzdF9sb29wKCkKKyAgICAgICAgc2VsZi5zZXRfZXZlbnRfbG9vcChzZWxmLmxvb3ApCisKKworICAgIGRlZiBjcmVhdGVfdHJhbnNwb3J0KHNlbGYsIHdhaXRlcj1Ob25lKToKKyAgICAgICAgcHJvdG9jb2wgPSBtb2NrLk1vY2soKQorICAgICAgICBwcm90b2NvbC5jb25uZWN0aW9uX21hZGUuX2lzX2Nvcm91dGluZSA9IEZhbHNlCisgICAgICAgIHByb3RvY29sLnByb2Nlc3NfZXhpdGVkLl9pc19jb3JvdXRpbmUgPSBGYWxzZQorICAgICAgICB0cmFuc3BvcnQgPSBUZXN0U3VicHJvY2Vzc1RyYW5zcG9ydCgKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9vcCwgcHJvdG9jb2wsIFsndGVzdCddLCBGYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUsIE5vbmUsIE5vbmUsIDAsIHdhaXRlcj13YWl0ZXIpCisgICAgICAgIHJldHVybiAodHJhbnNwb3J0LCBwcm90b2NvbCkKKworICAgIGRlZiB0ZXN0X3Byb2NfZXhpdGVkKHNlbGYpOgorICAgICAgICB3YWl0ZXIgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdHJhbnNwb3J0LCBwcm90b2NvbCA9IHNlbGYuY3JlYXRlX3RyYW5zcG9ydCh3YWl0ZXIpCisgICAgICAgIHRyYW5zcG9ydC5fcHJvY2Vzc19leGl0ZWQoNikKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh3YWl0ZXIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmFuc3BvcnQuZ2V0X3JldHVybmNvZGUoKSwgNikKKworICAgICAgICBzZWxmLmFzc2VydFRydWUocHJvdG9jb2wuY29ubmVjdGlvbl9tYWRlLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHByb3RvY29sLnByb2Nlc3NfZXhpdGVkLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHByb3RvY29sLmNvbm5lY3Rpb25fbG9zdC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0LmNhbGxfYXJnc1swXSwgKE5vbmUsKSkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRyYW5zcG9ydC5pc19jbG9zaW5nKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHRyYW5zcG9ydC5fbG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodHJhbnNwb3J0Ll9wcm9jKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh0cmFuc3BvcnQuX3Byb3RvY29sKQorCisgICAgICAgICMgbWV0aG9kcyBtdXN0IHJhaXNlIFByb2Nlc3NMb29rdXBFcnJvciBpZiB0aGUgcHJvY2VzcyBleGl0ZWQKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUHJvY2Vzc0xvb2t1cEVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc3BvcnQuc2VuZF9zaWduYWwsIHNpZ25hbC5TSUdURVJNKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhQcm9jZXNzTG9va3VwRXJyb3IsIHRyYW5zcG9ydC50ZXJtaW5hdGUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFByb2Nlc3NMb29rdXBFcnJvciwgdHJhbnNwb3J0LmtpbGwpCisKKyAgICAgICAgdHJhbnNwb3J0LmNsb3NlKCkKKworCitjbGFzcyBTdWJwcm9jZXNzTWl4aW46CisKKyAgICBkZWYgdGVzdF9zdGRpbl9zdGRvdXQoc2VsZik6CisgICAgICAgIGFyZ3MgPSBQUk9HUkFNX0NBVAorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgcnVuKGRhdGEpOgorICAgICAgICAgICAgcHJvYyA9IHlpZWxkIGZyb20gYXN5bmNpby5jcmVhdGVfc3VicHJvY2Vzc19leGVjKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmFyZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRpbj1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgICAgICMgZmVlZCBkYXRhCisgICAgICAgICAgICBwcm9jLnN0ZGluLndyaXRlKGRhdGEpCisgICAgICAgICAgICB5aWVsZCBmcm9tIHByb2Muc3RkaW4uZHJhaW4oKQorICAgICAgICAgICAgcHJvYy5zdGRpbi5jbG9zZSgpCisKKyAgICAgICAgICAgICMgZ2V0IG91dHB1dCBhbmQgZXhpdGNvZGUKKyAgICAgICAgICAgIGRhdGEgPSB5aWVsZCBmcm9tIHByb2Muc3Rkb3V0LnJlYWQoKQorICAgICAgICAgICAgZXhpdGNvZGUgPSB5aWVsZCBmcm9tIHByb2Mud2FpdCgpCisgICAgICAgICAgICByZXR1cm4gKGV4aXRjb2RlLCBkYXRhKQorCisgICAgICAgIHRhc2sgPSBydW4oYidzb21lIGRhdGEnKQorICAgICAgICB0YXNrID0gYXN5bmNpby53YWl0X2Zvcih0YXNrLCA2MC4wLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZXhpdGNvZGUsIHN0ZG91dCA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUodGFzaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleGl0Y29kZSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQsIGInc29tZSBkYXRhJykKKworICAgIGRlZiB0ZXN0X2NvbW11bmljYXRlKHNlbGYpOgorICAgICAgICBhcmdzID0gUFJPR1JBTV9DQVQKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHJ1bihkYXRhKToKKyAgICAgICAgICAgIHByb2MgPSB5aWVsZCBmcm9tIGFzeW5jaW8uY3JlYXRlX3N1YnByb2Nlc3NfZXhlYygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICphcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkaW49c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3A9c2VsZi5sb29wKQorICAgICAgICAgICAgc3Rkb3V0LCBzdGRlcnIgPSB5aWVsZCBmcm9tIHByb2MuY29tbXVuaWNhdGUoZGF0YSkKKyAgICAgICAgICAgIHJldHVybiBwcm9jLnJldHVybmNvZGUsIHN0ZG91dAorCisgICAgICAgIHRhc2sgPSBydW4oYidzb21lIGRhdGEnKQorICAgICAgICB0YXNrID0gYXN5bmNpby53YWl0X2Zvcih0YXNrLCA2MC4wLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZXhpdGNvZGUsIHN0ZG91dCA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUodGFzaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleGl0Y29kZSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQsIGInc29tZSBkYXRhJykKKworICAgIGRlZiB0ZXN0X3NoZWxsKHNlbGYpOgorICAgICAgICBjcmVhdGUgPSBhc3luY2lvLmNyZWF0ZV9zdWJwcm9jZXNzX3NoZWxsKCdleGl0IDcnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3A9c2VsZi5sb29wKQorICAgICAgICBwcm9jID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjcmVhdGUpCisgICAgICAgIGV4aXRjb2RlID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm9jLndhaXQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleGl0Y29kZSwgNykKKworICAgIGRlZiB0ZXN0X3N0YXJ0X25ld19zZXNzaW9uKHNlbGYpOgorICAgICAgICAjIHN0YXJ0IHRoZSBuZXcgcHJvY2VzcyBpbiBhIG5ldyBzZXNzaW9uCisgICAgICAgIGNyZWF0ZSA9IGFzeW5jaW8uY3JlYXRlX3N1YnByb2Nlc3Nfc2hlbGwoJ2V4aXQgOCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRfbmV3X3Nlc3Npb249VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgcHJvYyA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY3JlYXRlKQorICAgICAgICBleGl0Y29kZSA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvYy53YWl0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhpdGNvZGUsIDgpCisKKyAgICBkZWYgdGVzdF9raWxsKHNlbGYpOgorICAgICAgICBhcmdzID0gUFJPR1JBTV9CTE9DS0VECisgICAgICAgIGNyZWF0ZSA9IGFzeW5jaW8uY3JlYXRlX3N1YnByb2Nlc3NfZXhlYygqYXJncywgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHByb2MgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNyZWF0ZSkKKyAgICAgICAgcHJvYy5raWxsKCkKKyAgICAgICAgcmV0dXJuY29kZSA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvYy53YWl0KCkpCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHJldHVybmNvZGUsIGludCkKKyAgICAgICAgICAgICMgZXhwZWN0IDEgYnV0IHNvbWV0aW1lcyBnZXQgMAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgtc2lnbmFsLlNJR0tJTEwsIHJldHVybmNvZGUpCisKKyAgICBkZWYgdGVzdF90ZXJtaW5hdGUoc2VsZik6CisgICAgICAgIGFyZ3MgPSBQUk9HUkFNX0JMT0NLRUQKKyAgICAgICAgY3JlYXRlID0gYXN5bmNpby5jcmVhdGVfc3VicHJvY2Vzc19leGVjKCphcmdzLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgcHJvYyA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY3JlYXRlKQorICAgICAgICBwcm9jLnRlcm1pbmF0ZSgpCisgICAgICAgIHJldHVybmNvZGUgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb2Mud2FpdCgpKQorICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShyZXR1cm5jb2RlLCBpbnQpCisgICAgICAgICAgICAjIGV4cGVjdCAxIGJ1dCBzb21ldGltZXMgZ2V0IDAKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoLXNpZ25hbC5TSUdURVJNLCByZXR1cm5jb2RlKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJywgIkRvbid0IGhhdmUgU0lHSFVQIikKKyAgICBkZWYgdGVzdF9zZW5kX3NpZ25hbChzZWxmKToKKyAgICAgICAgY29kZSA9ICdpbXBvcnQgdGltZTsgcHJpbnQoInNsZWVwaW5nIiwgZmx1c2g9VHJ1ZSk7IHRpbWUuc2xlZXAoMzYwMCknCisgICAgICAgIGFyZ3MgPSBbc3lzLmV4ZWN1dGFibGUsICctYycsIGNvZGVdCisgICAgICAgIGNyZWF0ZSA9IGFzeW5jaW8uY3JlYXRlX3N1YnByb2Nlc3NfZXhlYygqYXJncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgcHJvYyA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY3JlYXRlKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgc2VuZF9zaWduYWwocHJvYyk6CisgICAgICAgICAgICAjIGJhc2ljIHN5bmNocm9uaXphdGlvbiB0byB3YWl0IHVudGlsIHRoZSBwcm9ncmFtIGlzIHNsZWVwaW5nCisgICAgICAgICAgICBsaW5lID0geWllbGQgZnJvbSBwcm9jLnN0ZG91dC5yZWFkbGluZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmUsIGInc2xlZXBpbmdcbicpCisKKyAgICAgICAgICAgIHByb2Muc2VuZF9zaWduYWwoc2lnbmFsLlNJR0hVUCkKKyAgICAgICAgICAgIHJldHVybmNvZGUgPSAoeWllbGQgZnJvbSBwcm9jLndhaXQoKSkKKyAgICAgICAgICAgIHJldHVybiByZXR1cm5jb2RlCisKKyAgICAgICAgcmV0dXJuY29kZSA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoc2VuZF9zaWduYWwocHJvYykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoLXNpZ25hbC5TSUdIVVAsIHJldHVybmNvZGUpCisKKyAgICBkZWYgcHJlcGFyZV9icm9rZW5fcGlwZV90ZXN0KHNlbGYpOgorICAgICAgICAjIGJ1ZmZlciBsYXJnZSBlbm91Z2ggdG8gZmVlZCB0aGUgd2hvbGUgcGlwZSBidWZmZXIKKyAgICAgICAgbGFyZ2VfZGF0YSA9IGIneCcgKiBzdXBwb3J0LlBJUEVfTUFYX1NJWkUKKworICAgICAgICAjIHRoZSBwcm9ncmFtIGVuZHMgYmVmb3JlIHRoZSBzdGRpbiBjYW4gYmUgZmVlZGVkCisgICAgICAgIGNyZWF0ZSA9IGFzeW5jaW8uY3JlYXRlX3N1YnByb2Nlc3NfZXhlYygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzLmV4ZWN1dGFibGUsICctYycsICdwYXNzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkaW49c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgcHJvYyA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY3JlYXRlKQorICAgICAgICByZXR1cm4gKHByb2MsIGxhcmdlX2RhdGEpCisKKyAgICBkZWYgdGVzdF9zdGRpbl9icm9rZW5fcGlwZShzZWxmKToKKyAgICAgICAgcHJvYywgbGFyZ2VfZGF0YSA9IHNlbGYucHJlcGFyZV9icm9rZW5fcGlwZV90ZXN0KCkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHdyaXRlX3N0ZGluKHByb2MsIGRhdGEpOgorICAgICAgICAgICAgcHJvYy5zdGRpbi53cml0ZShkYXRhKQorICAgICAgICAgICAgeWllbGQgZnJvbSBwcm9jLnN0ZGluLmRyYWluKCkKKworICAgICAgICBjb3JvID0gd3JpdGVfc3RkaW4ocHJvYywgbGFyZ2VfZGF0YSkKKyAgICAgICAgIyBkcmFpbigpIG11c3QgcmFpc2UgQnJva2VuUGlwZUVycm9yIG9yIENvbm5lY3Rpb25SZXNldEVycm9yCisgICAgICAgIHdpdGggdGVzdF91dGlscy5kaXNhYmxlX2xvZ2dlcigpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoKEJyb2tlblBpcGVFcnJvciwgQ29ubmVjdGlvblJlc2V0RXJyb3IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgY29ybykKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm9jLndhaXQoKSkKKworICAgIGRlZiB0ZXN0X2NvbW11bmljYXRlX2lnbm9yZV9icm9rZW5fcGlwZShzZWxmKToKKyAgICAgICAgcHJvYywgbGFyZ2VfZGF0YSA9IHNlbGYucHJlcGFyZV9icm9rZW5fcGlwZV90ZXN0KCkKKworICAgICAgICAjIGNvbW11bmljYXRlKCkgbXVzdCBpZ25vcmUgQnJva2VuUGlwZUVycm9yIHdoZW4gZmVlZGluZyBzdGRpbgorICAgICAgICB3aXRoIHRlc3RfdXRpbHMuZGlzYWJsZV9sb2dnZXIoKToKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvYy5jb21tdW5pY2F0ZShsYXJnZV9kYXRhKSkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm9jLndhaXQoKSkKKworICAgIGRlZiB0ZXN0X3BhdXNlX3JlYWRpbmcoc2VsZik6CisgICAgICAgIGxpbWl0ID0gMTAKKyAgICAgICAgc2l6ZSA9IChsaW1pdCAqIDIgKyAxKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgdGVzdF9wYXVzZV9yZWFkaW5nKCk6CisgICAgICAgICAgICBjb2RlID0gJ1xuJy5qb2luKCgKKyAgICAgICAgICAgICAgICAnaW1wb3J0IHN5cycsCisgICAgICAgICAgICAgICAgJ3N5cy5zdGRvdXQud3JpdGUoIngiICogJXMpJyAlIHNpemUsCisgICAgICAgICAgICAgICAgJ3N5cy5zdGRvdXQuZmx1c2goKScsCisgICAgICAgICAgICApKQorCisgICAgICAgICAgICBjb25uZWN0X3JlYWRfcGlwZSA9IHNlbGYubG9vcC5jb25uZWN0X3JlYWRfcGlwZQorCisgICAgICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgICAgIGRlZiBjb25uZWN0X3JlYWRfcGlwZV9tb2NrKCphcmdzLCAqKmt3KToKKyAgICAgICAgICAgICAgICB0cmFuc3BvcnQsIHByb3RvY29sID0geWllbGQgZnJvbSBjb25uZWN0X3JlYWRfcGlwZSgqYXJncywgKiprdykKKyAgICAgICAgICAgICAgICB0cmFuc3BvcnQucGF1c2VfcmVhZGluZyA9IG1vY2suTW9jaygpCisgICAgICAgICAgICAgICAgdHJhbnNwb3J0LnJlc3VtZV9yZWFkaW5nID0gbW9jay5Nb2NrKCkKKyAgICAgICAgICAgICAgICByZXR1cm4gKHRyYW5zcG9ydCwgcHJvdG9jb2wpCisKKyAgICAgICAgICAgIHNlbGYubG9vcC5jb25uZWN0X3JlYWRfcGlwZSA9IGNvbm5lY3RfcmVhZF9waXBlX21vY2sKKworICAgICAgICAgICAgcHJvYyA9IHlpZWxkIGZyb20gYXN5bmNpby5jcmVhdGVfc3VicHJvY2Vzc19leGVjKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXMuZXhlY3V0YWJsZSwgJy1jJywgY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkaW49YXN5bmNpby5zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1hc3luY2lvLnN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGltaXQ9bGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3A9c2VsZi5sb29wKQorICAgICAgICAgICAgc3Rkb3V0X3RyYW5zcG9ydCA9IHByb2MuX3RyYW5zcG9ydC5nZXRfcGlwZV90cmFuc3BvcnQoMSkKKworICAgICAgICAgICAgc3Rkb3V0LCBzdGRlcnIgPSB5aWVsZCBmcm9tIHByb2MuY29tbXVuaWNhdGUoKQorCisgICAgICAgICAgICAjIFRoZSBjaGlsZCBwcm9jZXNzIHByb2R1Y2VkIG1vcmUgdGhhbiBsaW1pdCBieXRlcyBvZiBvdXRwdXQsCisgICAgICAgICAgICAjIHRoZSBzdHJlYW0gcmVhZGVyIHRyYW5zcG9ydCBzaG91bGQgcGF1c2UgdGhlIHByb3RvY29sIHRvIG5vdAorICAgICAgICAgICAgIyBhbGxvY2F0ZSB0b28gbXVjaCBtZW1vcnkuCisgICAgICAgICAgICByZXR1cm4gKHN0ZG91dCwgc3Rkb3V0X3RyYW5zcG9ydCkKKworICAgICAgICAjIElzc3VlICMyMjY4NTogRW5zdXJlIHRoYXQgdGhlIHN0cmVhbSByZWFkZXIgcGF1c2VzIHRoZSBwcm90b2NvbAorICAgICAgICAjIHdoZW4gdGhlIGNoaWxkIHByb2Nlc3MgcHJvZHVjZXMgdG9vIG11Y2ggZGF0YQorICAgICAgICBzdGRvdXQsIHRyYW5zcG9ydCA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUodGVzdF9wYXVzZV9yZWFkaW5nKCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQsIGIneCcgKiBzaXplKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHJhbnNwb3J0LnBhdXNlX3JlYWRpbmcuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHJhbnNwb3J0LnJlc3VtZV9yZWFkaW5nLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X3N0ZGluX25vdF9pbmhlcml0YWJsZShzZWxmKToKKyAgICAgICAgIyBhc3luY2lvIGlzc3VlICMyMDk6IHN0ZGluIG11c3Qgbm90IGJlIGluaGVyaXRhYmxlLCBvdGhlcndpc2UKKyAgICAgICAgIyB0aGUgUHJvY2Vzcy5jb21tdW5pY2F0ZSgpIGhhbmdzCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgbGVuX21lc3NhZ2UobWVzc2FnZSk6CisgICAgICAgICAgICBjb2RlID0gJ2ltcG9ydCBzeXM7IGRhdGEgPSBzeXMuc3RkaW4ucmVhZCgpOyBwcmludChsZW4oZGF0YSkpJworICAgICAgICAgICAgcHJvYyA9IHlpZWxkIGZyb20gYXN5bmNpby5jcmVhdGVfc3VicHJvY2Vzc19leGVjKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzLmV4ZWN1dGFibGUsICctYycsIGNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRpbj1hc3luY2lvLnN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1hc3luY2lvLnN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1hc3luY2lvLnN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlX2Zkcz1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3A9c2VsZi5sb29wKQorICAgICAgICAgICAgc3Rkb3V0LCBzdGRlcnIgPSB5aWVsZCBmcm9tIHByb2MuY29tbXVuaWNhdGUobWVzc2FnZSkKKyAgICAgICAgICAgIGV4aXRjb2RlID0geWllbGQgZnJvbSBwcm9jLndhaXQoKQorICAgICAgICAgICAgcmV0dXJuIChzdGRvdXQsIGV4aXRjb2RlKQorCisgICAgICAgIG91dHB1dCwgZXhpdGNvZGUgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGxlbl9tZXNzYWdlKGInYWJjJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0cHV0LnJzdHJpcCgpLCBiJzMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4aXRjb2RlLCAwKQorCisgICAgZGVmIHRlc3RfY2FuY2VsX3Byb2Nlc3Nfd2FpdChzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMjMxNDA6IGNhbmNlbCBQcm9jZXNzLndhaXQoKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgY2FuY2VsX3dhaXQoKToKKyAgICAgICAgICAgIHByb2MgPSB5aWVsZCBmcm9tIGFzeW5jaW8uY3JlYXRlX3N1YnByb2Nlc3NfZXhlYygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpQUk9HUkFNX0JMT0NLRUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29wPXNlbGYubG9vcCkKKworICAgICAgICAgICAgIyBDcmVhdGUgYW4gaW50ZXJuYWwgZnV0dXJlIHdhaXRpbmcgb24gdGhlIHByb2Nlc3MgZXhpdAorICAgICAgICAgICAgdGFzayA9IHNlbGYubG9vcC5jcmVhdGVfdGFzayhwcm9jLndhaXQoKSkKKyAgICAgICAgICAgIHNlbGYubG9vcC5jYWxsX3Nvb24odGFzay5jYW5jZWwpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgeWllbGQgZnJvbSB0YXNrCisgICAgICAgICAgICBleGNlcHQgYXN5bmNpby5DYW5jZWxsZWRFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgICAgICMgQ2FuY2VsIHRoZSBmdXR1cmUKKyAgICAgICAgICAgIHRhc2suY2FuY2VsKCkKKworICAgICAgICAgICAgIyBLaWxsIHRoZSBwcm9jZXNzIGFuZCB3YWl0IHVudGlsIGl0IGlzIGRvbmUKKyAgICAgICAgICAgIHByb2Mua2lsbCgpCisgICAgICAgICAgICB5aWVsZCBmcm9tIHByb2Mud2FpdCgpCisKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjYW5jZWxfd2FpdCgpKQorCisgICAgZGVmIHRlc3RfY2FuY2VsX21ha2Vfc3VicHJvY2Vzc190cmFuc3BvcnRfZXhlYyhzZWxmKToKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBjYW5jZWxfbWFrZV90cmFuc3BvcnQoKToKKyAgICAgICAgICAgIGNvcm8gPSBhc3luY2lvLmNyZWF0ZV9zdWJwcm9jZXNzX2V4ZWMoKlBST0dSQU1fQkxPQ0tFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgICAgICB0YXNrID0gc2VsZi5sb29wLmNyZWF0ZV90YXNrKGNvcm8pCisKKyAgICAgICAgICAgIHNlbGYubG9vcC5jYWxsX3Nvb24odGFzay5jYW5jZWwpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgeWllbGQgZnJvbSB0YXNrCisgICAgICAgICAgICBleGNlcHQgYXN5bmNpby5DYW5jZWxsZWRFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgIyBpZ25vcmUgdGhlIGxvZzoKKyAgICAgICAgIyAiRXhjZXB0aW9uIGR1cmluZyBzdWJwcm9jZXNzIGNyZWF0aW9uLCBraWxsIHRoZSBzdWJwcm9jZXNzIgorICAgICAgICB3aXRoIHRlc3RfdXRpbHMuZGlzYWJsZV9sb2dnZXIoKToKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY2FuY2VsX21ha2VfdHJhbnNwb3J0KCkpCisKKyAgICBkZWYgdGVzdF9jYW5jZWxfcG9zdF9pbml0KHNlbGYpOgorICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGNhbmNlbF9tYWtlX3RyYW5zcG9ydCgpOgorICAgICAgICAgICAgY29ybyA9IHNlbGYubG9vcC5zdWJwcm9jZXNzX2V4ZWMoYXN5bmNpby5TdWJwcm9jZXNzUHJvdG9jb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqUFJPR1JBTV9CTE9DS0VEKQorICAgICAgICAgICAgdGFzayA9IHNlbGYubG9vcC5jcmVhdGVfdGFzayhjb3JvKQorCisgICAgICAgICAgICBzZWxmLmxvb3AuY2FsbF9zb29uKHRhc2suY2FuY2VsKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gdGFzaworICAgICAgICAgICAgZXhjZXB0IGFzeW5jaW8uQ2FuY2VsbGVkRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICMgaWdub3JlIHRoZSBsb2c6CisgICAgICAgICMgIkV4Y2VwdGlvbiBkdXJpbmcgc3VicHJvY2VzcyBjcmVhdGlvbiwga2lsbCB0aGUgc3VicHJvY2VzcyIKKyAgICAgICAgd2l0aCB0ZXN0X3V0aWxzLmRpc2FibGVfbG9nZ2VyKCk6CisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNhbmNlbF9tYWtlX3RyYW5zcG9ydCgpKQorICAgICAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisKKyAgICBkZWYgdGVzdF9jbG9zZV9raWxsX3J1bm5pbmcoc2VsZik6CisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYga2lsbF9ydW5uaW5nKCk6CisgICAgICAgICAgICBjcmVhdGUgPSBzZWxmLmxvb3Auc3VicHJvY2Vzc19leGVjKGFzeW5jaW8uU3VicHJvY2Vzc1Byb3RvY29sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqUFJPR1JBTV9CTE9DS0VEKQorICAgICAgICAgICAgdHJhbnNwb3J0LCBwcm90b2NvbCA9IHlpZWxkIGZyb20gY3JlYXRlCisKKyAgICAgICAgICAgIGtpbGxfY2FsbGVkID0gRmFsc2UKKyAgICAgICAgICAgIGRlZiBraWxsKCk6CisgICAgICAgICAgICAgICAgbm9ubG9jYWwga2lsbF9jYWxsZWQKKyAgICAgICAgICAgICAgICBraWxsX2NhbGxlZCA9IFRydWUKKyAgICAgICAgICAgICAgICBvcmlnX2tpbGwoKQorCisgICAgICAgICAgICBwcm9jID0gdHJhbnNwb3J0LmdldF9leHRyYV9pbmZvKCdzdWJwcm9jZXNzJykKKyAgICAgICAgICAgIG9yaWdfa2lsbCA9IHByb2Mua2lsbAorICAgICAgICAgICAgcHJvYy5raWxsID0ga2lsbAorICAgICAgICAgICAgcmV0dXJuY29kZSA9IHRyYW5zcG9ydC5nZXRfcmV0dXJuY29kZSgpCisgICAgICAgICAgICB0cmFuc3BvcnQuY2xvc2UoKQorICAgICAgICAgICAgeWllbGQgZnJvbSB0cmFuc3BvcnQuX3dhaXQoKQorICAgICAgICAgICAgcmV0dXJuIChyZXR1cm5jb2RlLCBraWxsX2NhbGxlZCkKKworICAgICAgICAjIElnbm9yZSAiQ2xvc2UgcnVubmluZyBjaGlsZCBwcm9jZXNzOiBraWxsIC4uLiIgbG9nCisgICAgICAgIHdpdGggdGVzdF91dGlscy5kaXNhYmxlX2xvZ2dlcigpOgorICAgICAgICAgICAgcmV0dXJuY29kZSwga2lsbGVkID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShraWxsX3J1bm5pbmcoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmV0dXJuY29kZSkKKworICAgICAgICAjIHRyYW5zcG9ydC5jbG9zZSgpIG11c3Qga2lsbCB0aGUgcHJvY2VzcyBpZiBpdCBpcyBzdGlsbCBydW5uaW5nCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShraWxsZWQpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorCisgICAgZGVmIHRlc3RfY2xvc2VfZG9udF9raWxsX2ZpbmlzaGVkKHNlbGYpOgorICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGtpbGxfcnVubmluZygpOgorICAgICAgICAgICAgY3JlYXRlID0gc2VsZi5sb29wLnN1YnByb2Nlc3NfZXhlYyhhc3luY2lvLlN1YnByb2Nlc3NQcm90b2NvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlBST0dSQU1fQkxPQ0tFRCkKKyAgICAgICAgICAgIHRyYW5zcG9ydCwgcHJvdG9jb2wgPSB5aWVsZCBmcm9tIGNyZWF0ZQorICAgICAgICAgICAgcHJvYyA9IHRyYW5zcG9ydC5nZXRfZXh0cmFfaW5mbygnc3VicHJvY2VzcycpCisKKyAgICAgICAgICAgICMga2lsbCB0aGUgcHJvY2VzcyAoYnV0IGFzeW5jaW8gaXMgbm90IG5vdGlmaWVkIGltbWVkaWF0bHkpCisgICAgICAgICAgICBwcm9jLmtpbGwoKQorICAgICAgICAgICAgcHJvYy53YWl0KCkKKworICAgICAgICAgICAgcHJvYy5raWxsID0gbW9jay5Nb2NrKCkKKyAgICAgICAgICAgIHByb2NfcmV0dXJuY29kZSA9IHByb2MucG9sbCgpCisgICAgICAgICAgICB0cmFuc3BvcnRfcmV0dXJuY29kZSA9IHRyYW5zcG9ydC5nZXRfcmV0dXJuY29kZSgpCisgICAgICAgICAgICB0cmFuc3BvcnQuY2xvc2UoKQorICAgICAgICAgICAgcmV0dXJuIChwcm9jX3JldHVybmNvZGUsIHRyYW5zcG9ydF9yZXR1cm5jb2RlLCBwcm9jLmtpbGwuY2FsbGVkKQorCisgICAgICAgICMgSWdub3JlICJVbmtub3duIGNoaWxkIHByb2Nlc3MgcGlkIC4uLiIgbG9nIG9mIFNhZmVDaGlsZFdhdGNoZXIsCisgICAgICAgICMgZW1pdHRlZCBiZWNhdXNlIHRoZSB0ZXN0IGFscmVhZHkgY29uc3VtZXMgdGhlIGV4aXQgc3RhdHVzOgorICAgICAgICAjIHByb2Mud2FpdCgpCisgICAgICAgIHdpdGggdGVzdF91dGlscy5kaXNhYmxlX2xvZ2dlcigpOgorICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShraWxsX3J1bm5pbmcoKSkKKyAgICAgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorCisgICAgICAgIHByb2NfcmV0dXJuY29kZSwgdHJhbnNwb3J0X3JldHVybl9jb2RlLCBraWxsZWQgPSByZXN1bHQKKworICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShwcm9jX3JldHVybmNvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHRyYW5zcG9ydF9yZXR1cm5fY29kZSkKKworICAgICAgICAjIHRyYW5zcG9ydC5jbG9zZSgpIG11c3Qgbm90IGtpbGwgdGhlIHByb2Nlc3MgaWYgaXQgZmluaXNoZWQsIGV2ZW4gaWYKKyAgICAgICAgIyB0aGUgdHJhbnNwb3J0IHdhcyBub3Qgbm90aWZpZWQgeWV0CisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoa2lsbGVkKQorCisgICAgZGVmIHRlc3RfcG9wZW5fZXJyb3Ioc2VsZik6CisgICAgICAgICMgSXNzdWUgIzI0NzYzOiBjaGVjayB0aGF0IHRoZSBzdWJwcm9jZXNzIHRyYW5zcG9ydCBpcyBjbG9zZWQKKyAgICAgICAgIyB3aGVuIEJhc2VTdWJwcm9jZXNzVHJhbnNwb3J0IGZhaWxzCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgorICAgICAgICAgICAgdGFyZ2V0ID0gJ2FzeW5jaW8ud2luZG93c191dGlscy5Qb3BlbicKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHRhcmdldCA9ICdzdWJwcm9jZXNzLlBvcGVuJworICAgICAgICB3aXRoIG1vY2sucGF0Y2godGFyZ2V0KSBhcyBwb3BlbjoKKyAgICAgICAgICAgIGV4YyA9IFplcm9EaXZpc2lvbkVycm9yCisgICAgICAgICAgICBwb3Blbi5zaWRlX2VmZmVjdCA9IGV4YworCisgICAgICAgICAgICBjcmVhdGUgPSBhc3luY2lvLmNyZWF0ZV9zdWJwcm9jZXNzX2V4ZWMoc3lzLmV4ZWN1dGFibGUsICctYycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Bhc3MnLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MocmVjb3JkPVRydWUpIGFzIHdhcm5zOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoZXhjKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjcmVhdGUpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3YXJucywgW10pCisKKworaWYgc3lzLnBsYXRmb3JtICE9ICd3aW4zMic6CisgICAgIyBVbml4CisgICAgY2xhc3MgU3VicHJvY2Vzc1dhdGNoZXJNaXhpbihTdWJwcm9jZXNzTWl4aW4pOgorCisgICAgICAgIFdhdGNoZXIgPSBOb25lCisKKyAgICAgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICAgICAgcG9saWN5ID0gYXN5bmNpby5nZXRfZXZlbnRfbG9vcF9wb2xpY3koKQorICAgICAgICAgICAgc2VsZi5sb29wID0gcG9saWN5Lm5ld19ldmVudF9sb29wKCkKKyAgICAgICAgICAgIHNlbGYuc2V0X2V2ZW50X2xvb3Aoc2VsZi5sb29wKQorCisgICAgICAgICAgICB3YXRjaGVyID0gc2VsZi5XYXRjaGVyKCkKKyAgICAgICAgICAgIHdhdGNoZXIuYXR0YWNoX2xvb3Aoc2VsZi5sb29wKQorICAgICAgICAgICAgcG9saWN5LnNldF9jaGlsZF93YXRjaGVyKHdhdGNoZXIpCisgICAgICAgICAgICBzZWxmLmFkZENsZWFudXAocG9saWN5LnNldF9jaGlsZF93YXRjaGVyLCBOb25lKQorCisgICAgY2xhc3MgU3VicHJvY2Vzc1NhZmVXYXRjaGVyVGVzdHMoU3VicHJvY2Vzc1dhdGNoZXJNaXhpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X3V0aWxzLlRlc3RDYXNlKToKKworICAgICAgICBXYXRjaGVyID0gdW5peF9ldmVudHMuU2FmZUNoaWxkV2F0Y2hlcgorCisgICAgY2xhc3MgU3VicHJvY2Vzc0Zhc3RXYXRjaGVyVGVzdHMoU3VicHJvY2Vzc1dhdGNoZXJNaXhpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X3V0aWxzLlRlc3RDYXNlKToKKworICAgICAgICBXYXRjaGVyID0gdW5peF9ldmVudHMuRmFzdENoaWxkV2F0Y2hlcgorCitlbHNlOgorICAgICMgV2luZG93cworICAgIGNsYXNzIFN1YnByb2Nlc3NQcm9hY3RvclRlc3RzKFN1YnByb2Nlc3NNaXhpbiwgdGVzdF91dGlscy5UZXN0Q2FzZSk6CisKKyAgICAgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5sb29wID0gYXN5bmNpby5Qcm9hY3RvckV2ZW50TG9vcCgpCisgICAgICAgICAgICBzZWxmLnNldF9ldmVudF9sb29wKHNlbGYubG9vcCkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3RfdGFza3MucHkgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF90YXNrcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZWUyMGY2Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3RfdGFza3MucHkKQEAgLTAsMCArMSwyMjM5IEBACisiIiJUZXN0cyBmb3IgdGFza3MucHkuIiIiCisKK2ltcG9ydCBjb250ZXh0bGliCitpbXBvcnQgZnVuY3Rvb2xzCitpbXBvcnQgaW8KK2ltcG9ydCBvcworaW1wb3J0IHJlCitpbXBvcnQgc3lzCitpbXBvcnQgdHlwZXMKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHdlYWtyZWYKK2Zyb20gdW5pdHRlc3QgaW1wb3J0IG1vY2sKKworaW1wb3J0IGFzeW5jaW8KK2Zyb20gYXN5bmNpbyBpbXBvcnQgY29yb3V0aW5lcworZnJvbSBhc3luY2lvIGltcG9ydCB0ZXN0X3V0aWxzCit0cnk6CisgICAgZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgZnJvbSBhc3luY2lvIGltcG9ydCB0ZXN0X3N1cHBvcnQgYXMgc3VwcG9ydAordHJ5OgorICAgIGZyb20gdGVzdC5zdXBwb3J0LnNjcmlwdF9oZWxwZXIgaW1wb3J0IGFzc2VydF9weXRob25fb2sKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICB0cnk6CisgICAgICAgIGZyb20gdGVzdC5zY3JpcHRfaGVscGVyIGltcG9ydCBhc3NlcnRfcHl0aG9uX29rCisgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICBmcm9tIGFzeW5jaW8udGVzdF9zdXBwb3J0IGltcG9ydCBhc3NlcnRfcHl0aG9uX29rCisKKworUFkzNCA9IChzeXMudmVyc2lvbl9pbmZvID49ICgzLCA0KSkKK1BZMzUgPSAoc3lzLnZlcnNpb25faW5mbyA+PSAoMywgNSkpCisKKworQGFzeW5jaW8uY29yb3V0aW5lCitkZWYgY29yb3V0aW5lX2Z1bmN0aW9uKCk6CisgICAgcGFzcworCisKK0Bjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VyCitkZWYgc2V0X2Nvcm91dGluZV9kZWJ1ZyhlbmFibGVkKToKKyAgICBjb3JvdXRpbmVzID0gYXN5bmNpby5jb3JvdXRpbmVzCisKKyAgICBvbGRfZGVidWcgPSBjb3JvdXRpbmVzLl9ERUJVRworICAgIHRyeToKKyAgICAgICAgY29yb3V0aW5lcy5fREVCVUcgPSBlbmFibGVkCisgICAgICAgIHlpZWxkCisgICAgZmluYWxseToKKyAgICAgICAgY29yb3V0aW5lcy5fREVCVUcgPSBvbGRfZGVidWcKKworCisKK2RlZiBmb3JtYXRfY29yb3V0aW5lKHF1YWxuYW1lLCBzdGF0ZSwgc3JjLCBzb3VyY2VfdHJhY2ViYWNrLCBnZW5lcmF0b3I9RmFsc2UpOgorICAgIGlmIGdlbmVyYXRvcjoKKyAgICAgICAgc3RhdGUgPSAnJXMnICUgc3RhdGUKKyAgICBlbHNlOgorICAgICAgICBzdGF0ZSA9ICclcywgZGVmaW5lZCcgJSBzdGF0ZQorICAgIGlmIHNvdXJjZV90cmFjZWJhY2sgaXMgbm90IE5vbmU6CisgICAgICAgIGZyYW1lID0gc291cmNlX3RyYWNlYmFja1stMV0KKyAgICAgICAgcmV0dXJuICgnY29ybz08JXMoKSAlcyBhdCAlcz4gY3JlYXRlZCBhdCAlczolcycKKyAgICAgICAgICAgICAgICAlIChxdWFsbmFtZSwgc3RhdGUsIHNyYywgZnJhbWVbMF0sIGZyYW1lWzFdKSkKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gJ2Nvcm89PCVzKCkgJXMgYXQgJXM+JyAlIChxdWFsbmFtZSwgc3RhdGUsIHNyYykKKworCitjbGFzcyBEdW1teToKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICc8RHVtbXk+JworCisgICAgZGVmIF9fY2FsbF9fKHNlbGYsICphcmdzKToKKyAgICAgICAgcGFzcworCisKK2NsYXNzIFRhc2tUZXN0cyh0ZXN0X3V0aWxzLlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5sb29wID0gc2VsZi5uZXdfdGVzdF9sb29wKCkKKworICAgIGRlZiB0ZXN0X290aGVyX2xvb3BfZnV0dXJlKHNlbGYpOgorICAgICAgICBvdGhlcl9sb29wID0gYXN5bmNpby5uZXdfZXZlbnRfbG9vcCgpCisgICAgICAgIGZ1dCA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9b3RoZXJfbG9vcCkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHJ1bihmdXQpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBmdXQKKworICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoUnVudGltZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHInVGFzayAuKiBnb3QgRnV0dXJlIC4qIGF0dGFjaGVkJyk6CisgICAgICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShydW4oZnV0KSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG90aGVyX2xvb3AuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfdGFza19jbGFzcyhzZWxmKToKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBub3RtdWNoKCk6CisgICAgICAgICAgICByZXR1cm4gJ29rJworICAgICAgICB0ID0gYXN5bmNpby5UYXNrKG5vdG11Y2goKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUodCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQucmVzdWx0KCksICdvaycpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModC5fbG9vcCwgc2VsZi5sb29wKQorCisgICAgICAgIGxvb3AgPSBhc3luY2lvLm5ld19ldmVudF9sb29wKCkKKyAgICAgICAgc2VsZi5zZXRfZXZlbnRfbG9vcChsb29wKQorICAgICAgICB0ID0gYXN5bmNpby5UYXNrKG5vdG11Y2goKSwgbG9vcD1sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzKHQuX2xvb3AsIGxvb3ApCisgICAgICAgIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHQpCisgICAgICAgIGxvb3AuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfZW5zdXJlX2Z1dHVyZV9jb3JvdXRpbmUoc2VsZik6CisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgbm90bXVjaCgpOgorICAgICAgICAgICAgcmV0dXJuICdvaycKKyAgICAgICAgdCA9IGFzeW5jaW8uZW5zdXJlX2Z1dHVyZShub3RtdWNoKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0LmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnJlc3VsdCgpLCAnb2snKQorICAgICAgICBzZWxmLmFzc2VydElzKHQuX2xvb3AsIHNlbGYubG9vcCkKKworICAgICAgICBsb29wID0gYXN5bmNpby5uZXdfZXZlbnRfbG9vcCgpCisgICAgICAgIHNlbGYuc2V0X2V2ZW50X2xvb3AobG9vcCkKKyAgICAgICAgdCA9IGFzeW5jaW8uZW5zdXJlX2Z1dHVyZShub3RtdWNoKCksIGxvb3A9bG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0Ll9sb29wLCBsb29wKQorICAgICAgICBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh0KQorICAgICAgICBsb29wLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2Vuc3VyZV9mdXR1cmVfZnV0dXJlKHNlbGYpOgorICAgICAgICBmX29yaWcgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZl9vcmlnLnNldF9yZXN1bHQoJ2tvJykKKworICAgICAgICBmID0gYXN5bmNpby5lbnN1cmVfZnV0dXJlKGZfb3JpZykKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZXN1bHQoKSwgJ2tvJykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhmLCBmX29yaWcpCisKKyAgICAgICAgbG9vcCA9IGFzeW5jaW8ubmV3X2V2ZW50X2xvb3AoKQorICAgICAgICBzZWxmLnNldF9ldmVudF9sb29wKGxvb3ApCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGYgPSBhc3luY2lvLmVuc3VyZV9mdXR1cmUoZl9vcmlnLCBsb29wPWxvb3ApCisKKyAgICAgICAgbG9vcC5jbG9zZSgpCisKKyAgICAgICAgZiA9IGFzeW5jaW8uZW5zdXJlX2Z1dHVyZShmX29yaWcsIGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzKGYsIGZfb3JpZykKKworICAgIGRlZiB0ZXN0X2Vuc3VyZV9mdXR1cmVfdGFzayhzZWxmKToKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBub3RtdWNoKCk6CisgICAgICAgICAgICByZXR1cm4gJ29rJworICAgICAgICB0X29yaWcgPSBhc3luY2lvLlRhc2sobm90bXVjaCgpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdCA9IGFzeW5jaW8uZW5zdXJlX2Z1dHVyZSh0X29yaWcpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUodCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQucmVzdWx0KCksICdvaycpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModCwgdF9vcmlnKQorCisgICAgICAgIGxvb3AgPSBhc3luY2lvLm5ld19ldmVudF9sb29wKCkKKyAgICAgICAgc2VsZi5zZXRfZXZlbnRfbG9vcChsb29wKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICB0ID0gYXN5bmNpby5lbnN1cmVfZnV0dXJlKHRfb3JpZywgbG9vcD1sb29wKQorCisgICAgICAgIGxvb3AuY2xvc2UoKQorCisgICAgICAgIHQgPSBhc3luY2lvLmVuc3VyZV9mdXR1cmUodF9vcmlnLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0LCB0X29yaWcpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhQWTM1LCAnbmVlZCBweXRob24gMy41IG9yIGxhdGVyJykKKyAgICBkZWYgdGVzdF9lbnN1cmVfZnV0dXJlX2F3YWl0YWJsZShzZWxmKToKKyAgICAgICAgY2xhc3MgQXc6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgY29ybyk6CisgICAgICAgICAgICAgICAgc2VsZi5jb3JvID0gY29ybworICAgICAgICAgICAgZGVmIF9fYXdhaXRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gKHlpZWxkIGZyb20gc2VsZi5jb3JvKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgY29ybygpOgorICAgICAgICAgICAgcmV0dXJuICdvaycKKworICAgICAgICBsb29wID0gYXN5bmNpby5uZXdfZXZlbnRfbG9vcCgpCisgICAgICAgIHNlbGYuc2V0X2V2ZW50X2xvb3AobG9vcCkKKyAgICAgICAgZnV0ID0gYXN5bmNpby5lbnN1cmVfZnV0dXJlKEF3KGNvcm8oKSksIGxvb3A9bG9vcCkKKyAgICAgICAgbG9vcC5ydW5fdW50aWxfY29tcGxldGUoZnV0KQorICAgICAgICBhc3NlcnQgZnV0LnJlc3VsdCgpID09ICdvaycKKworICAgIGRlZiB0ZXN0X2Vuc3VyZV9mdXR1cmVfbmVpdGhlcihzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgYXN5bmNpby5lbnN1cmVfZnV0dXJlKCdvaycpCisKKyAgICBkZWYgdGVzdF9hc3luY193YXJuaW5nKHNlbGYpOgorICAgICAgICBmID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJuc1JlZ2V4KERlcHJlY2F0aW9uV2FybmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Z1bmN0aW9uIGlzIGRlcHJlY2F0ZWQsIHVzZSBlbnN1cmVfJyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzKGYsIGFzeW5jaW8uYXN5bmMoZikpCisKKyAgICBkZWYgdGVzdF9nZXRfc3RhY2soc2VsZik6CisgICAgICAgIFQgPSBOb25lCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBmb28oKToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gYmFyKCkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGJhcigpOgorICAgICAgICAgICAgIyB0ZXN0IGdldF9zdGFjaygpCisgICAgICAgICAgICBmID0gVC5nZXRfc3RhY2sobGltaXQ9MSkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZbMF0uZl9jb2RlLmNvX25hbWUsICdmb28nKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBmID0gTm9uZQorCisgICAgICAgICAgICAjIHRlc3QgcHJpbnRfc3RhY2soKQorICAgICAgICAgICAgZmlsZSA9IGlvLlN0cmluZ0lPKCkKKyAgICAgICAgICAgIFQucHJpbnRfc3RhY2sobGltaXQ9MSwgZmlsZT1maWxlKQorICAgICAgICAgICAgZmlsZS5zZWVrKDApCisgICAgICAgICAgICB0YiA9IGZpbGUucmVhZCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJlZ2V4KHRiLCByJ2Zvb1woXCkgcnVubmluZycpCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBydW5uZXIoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIFQKKyAgICAgICAgICAgIFQgPSBhc3luY2lvLmVuc3VyZV9mdXR1cmUoZm9vKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICAgICAgeWllbGQgZnJvbSBUCisKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShydW5uZXIoKSkKKworICAgIGRlZiB0ZXN0X3Rhc2tfcmVwcihzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLnNldF9kZWJ1ZyhGYWxzZSkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIG5vdG11Y2goKToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gW10KKyAgICAgICAgICAgIHJldHVybiAnYWJjJworCisgICAgICAgICMgdGVzdCBjb3JvdXRpbmUgZnVuY3Rpb24KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChub3RtdWNoLl9fbmFtZV9fLCAnbm90bXVjaCcpCisgICAgICAgIGlmIFBZMzU6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5vdG11Y2guX19xdWFsbmFtZV9fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVGFza1Rlc3RzLnRlc3RfdGFza19yZXByLjxsb2NhbHM+Lm5vdG11Y2gnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5vdG11Y2guX19tb2R1bGVfXywgX19uYW1lX18pCisKKyAgICAgICAgZmlsZW5hbWUsIGxpbmVubyA9IHRlc3RfdXRpbHMuZ2V0X2Z1bmN0aW9uX3NvdXJjZShub3RtdWNoKQorICAgICAgICBzcmMgPSAiJXM6JXMiICUgKGZpbGVuYW1lLCBsaW5lbm8pCisKKyAgICAgICAgIyB0ZXN0IGNvcm91dGluZSBvYmplY3QKKyAgICAgICAgZ2VuID0gbm90bXVjaCgpCisgICAgICAgIGlmIGNvcm91dGluZXMuX0RFQlVHIG9yIFBZMzU6CisgICAgICAgICAgICBjb3JvX3F1YWxuYW1lID0gJ1Rhc2tUZXN0cy50ZXN0X3Rhc2tfcmVwci48bG9jYWxzPi5ub3RtdWNoJworICAgICAgICBlbHNlOgorICAgICAgICAgICAgY29yb19xdWFsbmFtZSA9ICdub3RtdWNoJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdlbi5fX25hbWVfXywgJ25vdG11Y2gnKQorICAgICAgICBpZiBQWTM1OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZW4uX19xdWFsbmFtZV9fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JvX3F1YWxuYW1lKQorCisgICAgICAgICMgdGVzdCBwZW5kaW5nIFRhc2sKKyAgICAgICAgdCA9IGFzeW5jaW8uVGFzayhnZW4sIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0LmFkZF9kb25lX2NhbGxiYWNrKER1bW15KCkpCisKKyAgICAgICAgY29ybyA9IGZvcm1hdF9jb3JvdXRpbmUoY29yb19xdWFsbmFtZSwgJ3J1bm5pbmcnLCBzcmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQuX3NvdXJjZV90cmFjZWJhY2ssIGdlbmVyYXRvcj1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIodCksCisgICAgICAgICAgICAgICAgICAgICAgICAgJzxUYXNrIHBlbmRpbmcgJXMgY2I9WzxEdW1teT4oKV0+JyAlIGNvcm8pCisKKyAgICAgICAgIyB0ZXN0IGNhbmNlbGxpbmcgVGFzaworICAgICAgICB0LmNhbmNlbCgpICAjIERvZXMgbm90IHRha2UgaW1tZWRpYXRlIGVmZmVjdCEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICc8VGFzayBjYW5jZWxsaW5nICVzIGNiPVs8RHVtbXk+KCldPicgJSBjb3JvKQorCisgICAgICAgICMgdGVzdCBjYW5jZWxsZWQgVGFzaworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhhc3luY2lvLkNhbmNlbGxlZEVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCB0KQorICAgICAgICBjb3JvID0gZm9ybWF0X2Nvcm91dGluZShjb3JvX3F1YWxuYW1lLCAnZG9uZScsIHNyYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdC5fc291cmNlX3RyYWNlYmFjaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICc8VGFzayBjYW5jZWxsZWQgJXM+JyAlIGNvcm8pCisKKyAgICAgICAgIyB0ZXN0IGZpbmlzaGVkIFRhc2sKKyAgICAgICAgdCA9IGFzeW5jaW8uVGFzayhub3RtdWNoKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHQpCisgICAgICAgIGNvcm8gPSBmb3JtYXRfY29yb3V0aW5lKGNvcm9fcXVhbG5hbWUsICdkb25lJywgc3JjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Ll9zb3VyY2VfdHJhY2ViYWNrKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIodCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIjxUYXNrIGZpbmlzaGVkICVzIHJlc3VsdD0nYWJjJz4iICUgY29ybykKKworICAgIGRlZiB0ZXN0X3Rhc2tfcmVwcl9jb3JvX2RlY29yYXRvcihzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLnNldF9kZWJ1ZyhGYWxzZSkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIG5vdG11Y2goKToKKyAgICAgICAgICAgICMgbm90bXVjaCgpIGZ1bmN0aW9uIGRvZXNuJ3QgdXNlIHlpZWxkIGZyb206IGl0IHdpbGwgYmUgd3JhcHBlZCBieQorICAgICAgICAgICAgIyBAY29yb3V0aW5lIGRlY29yYXRvcgorICAgICAgICAgICAgcmV0dXJuIDEyMworCisgICAgICAgICMgdGVzdCBjb3JvdXRpbmUgZnVuY3Rpb24KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChub3RtdWNoLl9fbmFtZV9fLCAnbm90bXVjaCcpCisgICAgICAgIGlmIFBZMzU6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5vdG11Y2guX19xdWFsbmFtZV9fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVGFza1Rlc3RzLnRlc3RfdGFza19yZXByX2Nvcm9fZGVjb3JhdG9yJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLjxsb2NhbHM+Lm5vdG11Y2gnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5vdG11Y2guX19tb2R1bGVfXywgX19uYW1lX18pCisKKyAgICAgICAgIyB0ZXN0IGNvcm91dGluZSBvYmplY3QKKyAgICAgICAgZ2VuID0gbm90bXVjaCgpCisgICAgICAgIGlmIGNvcm91dGluZXMuX0RFQlVHIG9yIFBZMzU6CisgICAgICAgICAgICAjIE9uIFB5dGhvbiA+PSAzLjUsIGdlbmVyYXRvcnMgbm93IGluaGVyaXQgdGhlIG5hbWUgb2YgdGhlCisgICAgICAgICAgICAjIGZ1bmN0aW9uLCBhcyBleHBlY3RlZCwgYW5kIGhhdmUgYSBxdWFsaWZpZWQgbmFtZSAoX19xdWFsbmFtZV9fCisgICAgICAgICAgICAjIGF0dHJpYnV0ZSkuCisgICAgICAgICAgICBjb3JvX25hbWUgPSAnbm90bXVjaCcKKyAgICAgICAgICAgIGNvcm9fcXVhbG5hbWUgPSAoJ1Rhc2tUZXN0cy50ZXN0X3Rhc2tfcmVwcl9jb3JvX2RlY29yYXRvcicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy48bG9jYWxzPi5ub3RtdWNoJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgT24gUHl0aG9uIDwgMy41LCBnZW5lcmF0b3JzIGluaGVyaXQgdGhlIG5hbWUgb2YgdGhlIGNvZGUsIG5vdCBvZgorICAgICAgICAgICAgIyB0aGUgZnVuY3Rpb24uIFNlZTogaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTIxMjA1CisgICAgICAgICAgICBjb3JvX25hbWUgPSBjb3JvX3F1YWxuYW1lID0gJ2Nvcm8nCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2VuLl9fbmFtZV9fLCBjb3JvX25hbWUpCisgICAgICAgIGlmIFBZMzU6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdlbi5fX3F1YWxuYW1lX18sIGNvcm9fcXVhbG5hbWUpCisKKyAgICAgICAgIyB0ZXN0IHJlcHIoQ29yb1dyYXBwZXIpCisgICAgICAgIGlmIGNvcm91dGluZXMuX0RFQlVHOgorICAgICAgICAgICAgIyBmb3JtYXQgdGhlIGNvcm91dGluZSBvYmplY3QKKyAgICAgICAgICAgIGlmIGNvcm91dGluZXMuX0RFQlVHOgorICAgICAgICAgICAgICAgIGZpbGVuYW1lLCBsaW5lbm8gPSB0ZXN0X3V0aWxzLmdldF9mdW5jdGlvbl9zb3VyY2Uobm90bXVjaCkKKyAgICAgICAgICAgICAgICBmcmFtZSA9IGdlbi5fc291cmNlX3RyYWNlYmFja1stMV0KKyAgICAgICAgICAgICAgICBjb3JvID0gKCclcygpIHJ1bm5pbmcsIGRlZmluZWQgYXQgJXM6JXMsIGNyZWF0ZWQgYXQgJXM6JXMnCisgICAgICAgICAgICAgICAgICAgICAgICAlIChjb3JvX3F1YWxuYW1lLCBmaWxlbmFtZSwgbGluZW5vLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVbMF0sIGZyYW1lWzFdKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgY29kZSA9IGdlbi5naV9jb2RlCisgICAgICAgICAgICAgICAgY29ybyA9ICgnJXMoKSBydW5uaW5nIGF0ICVzOiVzJworICAgICAgICAgICAgICAgICAgICAgICAgJSAoY29yb19xdWFsbmFtZSwgY29kZS5jb19maWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUuY29fZmlyc3RsaW5lbm8pKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZ2VuKSwgJzxDb3JvV3JhcHBlciAlcz4nICUgY29ybykKKworICAgICAgICAjIHRlc3QgcGVuZGluZyBUYXNrCisgICAgICAgIHQgPSBhc3luY2lvLlRhc2soZ2VuLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdC5hZGRfZG9uZV9jYWxsYmFjayhEdW1teSgpKQorCisgICAgICAgICMgZm9ybWF0IHRoZSBjb3JvdXRpbmUgb2JqZWN0CisgICAgICAgIGlmIGNvcm91dGluZXMuX0RFQlVHOgorICAgICAgICAgICAgc3JjID0gJyVzOiVzJyAlIHRlc3RfdXRpbHMuZ2V0X2Z1bmN0aW9uX3NvdXJjZShub3RtdWNoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY29kZSA9IGdlbi5naV9jb2RlCisgICAgICAgICAgICBzcmMgPSAnJXM6JXMnICUgKGNvZGUuY29fZmlsZW5hbWUsIGNvZGUuY29fZmlyc3RsaW5lbm8pCisgICAgICAgIGNvcm8gPSBmb3JtYXRfY29yb3V0aW5lKGNvcm9fcXVhbG5hbWUsICdydW5uaW5nJywgc3JjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Ll9zb3VyY2VfdHJhY2ViYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3I9bm90IGNvcm91dGluZXMuX0RFQlVHKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIodCksCisgICAgICAgICAgICAgICAgICAgICAgICAgJzxUYXNrIHBlbmRpbmcgJXMgY2I9WzxEdW1teT4oKV0+JyAlIGNvcm8pCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUodCkKKworICAgIGRlZiB0ZXN0X3Rhc2tfcmVwcl93YWl0X2ZvcihzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLnNldF9kZWJ1ZyhGYWxzZSkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHdhaXRfZm9yKGZ1dCk6CisgICAgICAgICAgICByZXR1cm4gKHlpZWxkIGZyb20gZnV0KQorCisgICAgICAgIGZ1dCA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0YXNrID0gYXN5bmNpby5UYXNrKHdhaXRfZm9yKGZ1dCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRSZWdleChyZXByKHRhc2spLAorICAgICAgICAgICAgICAgICAgICAgICAgICc8VGFzayAuKiB3YWl0X2Zvcj0lcz4nICUgcmUuZXNjYXBlKHJlcHIoZnV0KSkpCisKKyAgICAgICAgZnV0LnNldF9yZXN1bHQoTm9uZSkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh0YXNrKQorCisgICAgZGVmIHRlc3RfdGFza19yZXByX3BhcnRpYWxfY29yb3dyYXBwZXIoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzIyMjogcmVwcihDb3JvV3JhcHBlcikgbXVzdCBub3QgZmFpbCBpbiBkZWJ1ZyBtb2RlIGlmIHRoZQorICAgICAgICAjIGNvcm91dGluZSBpcyBhIHBhcnRpYWwgZnVuY3Rpb24KKyAgICAgICAgd2l0aCBzZXRfY29yb3V0aW5lX2RlYnVnKFRydWUpOgorICAgICAgICAgICAgc2VsZi5sb29wLnNldF9kZWJ1ZyhUcnVlKQorCisgICAgICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgICAgIGRlZiBmdW5jKHgsIHkpOgorICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gYXN5bmNpby5zbGVlcCgwKQorCisgICAgICAgICAgICBwYXJ0aWFsX2Z1bmMgPSBhc3luY2lvLmNvcm91dGluZShmdW5jdG9vbHMucGFydGlhbChmdW5jLCAxKSkKKyAgICAgICAgICAgIHRhc2sgPSBzZWxmLmxvb3AuY3JlYXRlX3Rhc2socGFydGlhbF9mdW5jKDIpKQorCisgICAgICAgICAgICAjIG1ha2Ugd2FybmluZ3MgcXVpZXQKKyAgICAgICAgICAgIHRhc2suX2xvZ19kZXN0cm95X3BlbmRpbmcgPSBGYWxzZQorICAgICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHRhc2suX2Nvcm8uY2xvc2UpCisKKyAgICAgICAgY29yb19yZXByID0gcmVwcih0YXNrLl9jb3JvKQorICAgICAgICBleHBlY3RlZCA9ICgnPENvcm9XcmFwcGVyIFRhc2tUZXN0cy50ZXN0X3Rhc2tfcmVwcl9wYXJ0aWFsX2Nvcm93cmFwcGVyJworICAgICAgICAgICAgICAgICAgICAnLjxsb2NhbHM+LmZ1bmMoMSkoKSBydW5uaW5nLCAnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY29yb19yZXByLnN0YXJ0c3dpdGgoZXhwZWN0ZWQpLAorICAgICAgICAgICAgICAgICAgICAgICAgY29yb19yZXByKQorCisgICAgZGVmIHRlc3RfdGFza19iYXNpY3Moc2VsZik6CisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgb3V0ZXIoKToKKyAgICAgICAgICAgIGEgPSB5aWVsZCBmcm9tIGlubmVyMSgpCisgICAgICAgICAgICBiID0geWllbGQgZnJvbSBpbm5lcjIoKQorICAgICAgICAgICAgcmV0dXJuIGErYgorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgaW5uZXIxKCk6CisgICAgICAgICAgICByZXR1cm4gNDIKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGlubmVyMigpOgorICAgICAgICAgICAgcmV0dXJuIDEwMDAKKworICAgICAgICB0ID0gb3V0ZXIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUodCksIDEwNDIpCisKKyAgICBkZWYgdGVzdF9jYW5jZWwoc2VsZik6CisKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgd2hlbiA9IHlpZWxkCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDEwLjAsIHdoZW4pCisgICAgICAgICAgICB5aWVsZCAwCisKKyAgICAgICAgbG9vcCA9IHNlbGYubmV3X3Rlc3RfbG9vcChnZW4pCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiB0YXNrKCk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIGFzeW5jaW8uc2xlZXAoMTAuMCwgbG9vcD1sb29wKQorICAgICAgICAgICAgcmV0dXJuIDEyCisKKyAgICAgICAgdCA9IGFzeW5jaW8uVGFzayh0YXNrKCksIGxvb3A9bG9vcCkKKyAgICAgICAgbG9vcC5jYWxsX3Nvb24odC5jYW5jZWwpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoYXN5bmNpby5DYW5jZWxsZWRFcnJvcik6CisgICAgICAgICAgICBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUodC5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0LmNhbmNlbGxlZCgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHQuY2FuY2VsKCkpCisKKyAgICBkZWYgdGVzdF9jYW5jZWxfeWllbGQoc2VsZik6CisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgdGFzaygpOgorICAgICAgICAgICAgeWllbGQKKyAgICAgICAgICAgIHlpZWxkCisgICAgICAgICAgICByZXR1cm4gMTIKKworICAgICAgICB0ID0gYXN5bmNpby5UYXNrKHRhc2soKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKSAgIyBzdGFydCBjb3JvCisgICAgICAgIHQuY2FuY2VsKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBhc3luY2lvLkNhbmNlbGxlZEVycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCB0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUodC5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0LmNhbmNlbGxlZCgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHQuY2FuY2VsKCkpCisKKyAgICBkZWYgdGVzdF9jYW5jZWxfaW5uZXJfZnV0dXJlKHNlbGYpOgorICAgICAgICBmID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiB0YXNrKCk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIGYKKyAgICAgICAgICAgIHJldHVybiAxMgorCisgICAgICAgIHQgPSBhc3luY2lvLlRhc2sodGFzaygpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApICAjIHN0YXJ0IHRhc2sKKyAgICAgICAgZi5jYW5jZWwoKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGFzeW5jaW8uQ2FuY2VsbGVkRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5jYW5jZWxsZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQuY2FuY2VsbGVkKCkpCisKKyAgICBkZWYgdGVzdF9jYW5jZWxfYm90aF90YXNrX2FuZF9pbm5lcl9mdXR1cmUoc2VsZik6CisgICAgICAgIGYgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHRhc2soKToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gZgorICAgICAgICAgICAgcmV0dXJuIDEyCisKKyAgICAgICAgdCA9IGFzeW5jaW8uVGFzayh0YXNrKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKworICAgICAgICBmLmNhbmNlbCgpCisgICAgICAgIHQuY2FuY2VsKCkKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGFzeW5jaW8uQ2FuY2VsbGVkRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh0KQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0LmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuY2FuY2VsbGVkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0LmNhbmNlbGxlZCgpKQorCisgICAgZGVmIHRlc3RfY2FuY2VsX3Rhc2tfY2F0Y2hpbmcoc2VsZik6CisgICAgICAgIGZ1dDEgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZnV0MiA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgdGFzaygpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBmdXQxCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgeWllbGQgZnJvbSBmdXQyCisgICAgICAgICAgICBleGNlcHQgYXN5bmNpby5DYW5jZWxsZWRFcnJvcjoKKyAgICAgICAgICAgICAgICByZXR1cm4gNDIKKworICAgICAgICB0ID0gYXN5bmNpby5UYXNrKHRhc2soKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzKHQuX2Z1dF93YWl0ZXIsIGZ1dDEpICAjIFdoaXRlLWJveCB0ZXN0LgorICAgICAgICBmdXQxLnNldF9yZXN1bHQoTm9uZSkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0SXModC5fZnV0X3dhaXRlciwgZnV0MikgICMgV2hpdGUtYm94IHRlc3QuCisgICAgICAgIHQuY2FuY2VsKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZ1dDIuY2FuY2VsbGVkKCkpCisgICAgICAgIHJlcyA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUodCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIDQyKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHQuY2FuY2VsbGVkKCkpCisKKyAgICBkZWYgdGVzdF9jYW5jZWxfdGFza19pZ25vcmluZyhzZWxmKToKKyAgICAgICAgZnV0MSA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmdXQyID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGZ1dDMgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHRhc2soKToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gZnV0MQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gZnV0MgorICAgICAgICAgICAgZXhjZXB0IGFzeW5jaW8uQ2FuY2VsbGVkRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgcmVzID0geWllbGQgZnJvbSBmdXQzCisgICAgICAgICAgICByZXR1cm4gcmVzCisKKyAgICAgICAgdCA9IGFzeW5jaW8uVGFzayh0YXNrKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0Ll9mdXRfd2FpdGVyLCBmdXQxKSAgIyBXaGl0ZS1ib3ggdGVzdC4KKyAgICAgICAgZnV0MS5zZXRfcmVzdWx0KE5vbmUpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzKHQuX2Z1dF93YWl0ZXIsIGZ1dDIpICAjIFdoaXRlLWJveCB0ZXN0LgorICAgICAgICB0LmNhbmNlbCgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmdXQyLmNhbmNlbGxlZCgpKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0Ll9mdXRfd2FpdGVyLCBmdXQzKSAgIyBXaGl0ZS1ib3ggdGVzdC4KKyAgICAgICAgZnV0My5zZXRfcmVzdWx0KDQyKQorICAgICAgICByZXMgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmdXQzLmNhbmNlbGxlZCgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHQuY2FuY2VsbGVkKCkpCisKKyAgICBkZWYgdGVzdF9jYW5jZWxfY3VycmVudF90YXNrKHNlbGYpOgorICAgICAgICBsb29wID0gYXN5bmNpby5uZXdfZXZlbnRfbG9vcCgpCisgICAgICAgIHNlbGYuc2V0X2V2ZW50X2xvb3AobG9vcCkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHRhc2soKToKKyAgICAgICAgICAgIHQuY2FuY2VsKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0Ll9tdXN0X2NhbmNlbCkgICMgV2hpdGUtYm94IHRlc3QuCisgICAgICAgICAgICAjIFRoZSBzbGVlcCBzaG91bGQgYmUgY2FuY2VsbGVkIGltbWVkaWF0ZWx5LgorICAgICAgICAgICAgeWllbGQgZnJvbSBhc3luY2lvLnNsZWVwKDEwMCwgbG9vcD1sb29wKQorICAgICAgICAgICAgcmV0dXJuIDEyCisKKyAgICAgICAgdCA9IGFzeW5jaW8uVGFzayh0YXNrKCksIGxvb3A9bG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBhc3luY2lvLkNhbmNlbGxlZEVycm9yLCBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgdCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHQuX211c3RfY2FuY2VsKSAgIyBXaGl0ZS1ib3ggdGVzdC4KKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0LmNhbmNlbCgpKQorCisgICAgZGVmIHRlc3Rfc3RvcF93aGlsZV9ydW5faW5fY29tcGxldGUoc2VsZik6CisKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgd2hlbiA9IHlpZWxkCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMSwgd2hlbikKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZCAwLjEKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4yLCB3aGVuKQorICAgICAgICAgICAgd2hlbiA9IHlpZWxkIDAuMQorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjMsIHdoZW4pCisgICAgICAgICAgICB5aWVsZCAwLjEKKworICAgICAgICBsb29wID0gc2VsZi5uZXdfdGVzdF9sb29wKGdlbikKKworICAgICAgICB4ID0gMAorICAgICAgICB3YWl0ZXJzID0gW10KKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHRhc2soKToKKyAgICAgICAgICAgIG5vbmxvY2FsIHgKKyAgICAgICAgICAgIHdoaWxlIHggPCAxMDoKKyAgICAgICAgICAgICAgICB3YWl0ZXJzLmFwcGVuZChhc3luY2lvLnNsZWVwKDAuMSwgbG9vcD1sb29wKSkKKyAgICAgICAgICAgICAgICB5aWVsZCBmcm9tIHdhaXRlcnNbLTFdCisgICAgICAgICAgICAgICAgeCArPSAxCisgICAgICAgICAgICAgICAgaWYgeCA9PSAyOgorICAgICAgICAgICAgICAgICAgICBsb29wLnN0b3AoKQorCisgICAgICAgIHQgPSBhc3luY2lvLlRhc2sodGFzaygpLCBsb29wPWxvb3ApCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yKSBhcyBjbToKKyAgICAgICAgICAgIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGNtLmV4Y2VwdGlvbiksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ0V2ZW50IGxvb3Agc3RvcHBlZCBiZWZvcmUgRnV0dXJlIGNvbXBsZXRlZC4nKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHQuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4zLCBsb29wLnRpbWUoKSkKKworICAgICAgICAjIGNsb3NlIGdlbmVyYXRvcnMKKyAgICAgICAgZm9yIHcgaW4gd2FpdGVyczoKKyAgICAgICAgICAgIHcuY2xvc2UoKQorICAgICAgICB0LmNhbmNlbCgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGFzeW5jaW8uQ2FuY2VsbGVkRXJyb3IsIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCB0KQorCisgICAgZGVmIHRlc3Rfd2FpdF9mb3Ioc2VsZik6CisKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgd2hlbiA9IHlpZWxkCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMiwgd2hlbikKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZCAwCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMSwgd2hlbikKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZCAwLjEKKworICAgICAgICBsb29wID0gc2VsZi5uZXdfdGVzdF9sb29wKGdlbikKKworICAgICAgICBmb29fcnVubmluZyA9IE5vbmUKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGZvbygpOgorICAgICAgICAgICAgbm9ubG9jYWwgZm9vX3J1bm5pbmcKKyAgICAgICAgICAgIGZvb19ydW5uaW5nID0gVHJ1ZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gYXN5bmNpby5zbGVlcCgwLjIsIGxvb3A9bG9vcCkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgZm9vX3J1bm5pbmcgPSBGYWxzZQorICAgICAgICAgICAgcmV0dXJuICdkb25lJworCisgICAgICAgIGZ1dCA9IGFzeW5jaW8uVGFzayhmb28oKSwgbG9vcD1sb29wKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoYXN5bmNpby5UaW1lb3V0RXJyb3IpOgorICAgICAgICAgICAgbG9vcC5ydW5fdW50aWxfY29tcGxldGUoYXN5bmNpby53YWl0X2ZvcihmdXQsIDAuMSwgbG9vcD1sb29wKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZ1dC5kb25lKCkpCisgICAgICAgICMgaXQgc2hvdWxkIGhhdmUgYmVlbiBjYW5jZWxsZWQgZHVlIHRvIHRoZSB0aW1lb3V0CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmdXQuY2FuY2VsbGVkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4xLCBsb29wLnRpbWUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb29fcnVubmluZywgRmFsc2UpCisKKyAgICBkZWYgdGVzdF93YWl0X2Zvcl9ibG9ja2luZyhzZWxmKToKKyAgICAgICAgbG9vcCA9IHNlbGYubmV3X3Rlc3RfbG9vcCgpCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBjb3JvKCk6CisgICAgICAgICAgICByZXR1cm4gJ2RvbmUnCisKKyAgICAgICAgcmVzID0gbG9vcC5ydW5fdW50aWxfY29tcGxldGUoYXN5bmNpby53YWl0X2Zvcihjb3JvKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dD1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3A9bG9vcCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCAnZG9uZScpCisKKyAgICBkZWYgdGVzdF93YWl0X2Zvcl93aXRoX2dsb2JhbF9sb29wKHNlbGYpOgorCisgICAgICAgIGRlZiBnZW4oKToKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZAorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjIsIHdoZW4pCisgICAgICAgICAgICB3aGVuID0geWllbGQgMAorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjAxLCB3aGVuKQorICAgICAgICAgICAgeWllbGQgMC4wMQorCisgICAgICAgIGxvb3AgPSBzZWxmLm5ld190ZXN0X2xvb3AoZ2VuKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgZm9vKCk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIGFzeW5jaW8uc2xlZXAoMC4yLCBsb29wPWxvb3ApCisgICAgICAgICAgICByZXR1cm4gJ2RvbmUnCisKKyAgICAgICAgYXN5bmNpby5zZXRfZXZlbnRfbG9vcChsb29wKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmdXQgPSBhc3luY2lvLlRhc2soZm9vKCksIGxvb3A9bG9vcCkKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoYXN5bmNpby5UaW1lb3V0RXJyb3IpOgorICAgICAgICAgICAgICAgIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGFzeW5jaW8ud2FpdF9mb3IoZnV0LCAwLjAxKSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGFzeW5jaW8uc2V0X2V2ZW50X2xvb3AoTm9uZSkKKworICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMDEsIGxvb3AudGltZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZnV0LmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZ1dC5jYW5jZWxsZWQoKSkKKworICAgIGRlZiB0ZXN0X3dhaXRfZm9yX3JhY2VfY29uZGl0aW9uKHNlbGYpOgorCisgICAgICAgIGRlZiBnZW4oKToKKyAgICAgICAgICAgIHlpZWxkIDAuMQorICAgICAgICAgICAgeWllbGQgMC4xCisgICAgICAgICAgICB5aWVsZCAwLjEKKworICAgICAgICBsb29wID0gc2VsZi5uZXdfdGVzdF9sb29wKGdlbikKKworICAgICAgICBmdXQgPSBhc3luY2lvLkZ1dHVyZShsb29wPWxvb3ApCisgICAgICAgIHRhc2sgPSBhc3luY2lvLndhaXRfZm9yKGZ1dCwgdGltZW91dD0wLjIsIGxvb3A9bG9vcCkKKyAgICAgICAgbG9vcC5jYWxsX2xhdGVyKDAuMSwgZnV0LnNldF9yZXN1bHQsICJvayIpCisgICAgICAgIHJlcyA9IGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHRhc2spCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCAib2siKQorCisgICAgZGVmIHRlc3Rfd2FpdChzZWxmKToKKworICAgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgICB3aGVuID0geWllbGQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4xLCB3aGVuKQorICAgICAgICAgICAgd2hlbiA9IHlpZWxkIDAKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4xNSwgd2hlbikKKyAgICAgICAgICAgIHlpZWxkIDAuMTUKKworICAgICAgICBsb29wID0gc2VsZi5uZXdfdGVzdF9sb29wKGdlbikKKworICAgICAgICBhID0gYXN5bmNpby5UYXNrKGFzeW5jaW8uc2xlZXAoMC4xLCBsb29wPWxvb3ApLCBsb29wPWxvb3ApCisgICAgICAgIGIgPSBhc3luY2lvLlRhc2soYXN5bmNpby5zbGVlcCgwLjE1LCBsb29wPWxvb3ApLCBsb29wPWxvb3ApCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBmb28oKToKKyAgICAgICAgICAgIGRvbmUsIHBlbmRpbmcgPSB5aWVsZCBmcm9tIGFzeW5jaW8ud2FpdChbYiwgYV0sIGxvb3A9bG9vcCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZG9uZSwgc2V0KFthLCBiXSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBlbmRpbmcsIHNldCgpKQorICAgICAgICAgICAgcmV0dXJuIDQyCisKKyAgICAgICAgcmVzID0gbG9vcC5ydW5fdW50aWxfY29tcGxldGUoYXN5bmNpby5UYXNrKGZvbygpLCBsb29wPWxvb3ApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4xNSwgbG9vcC50aW1lKCkpCisKKyAgICAgICAgIyBEb2luZyBpdCBhZ2FpbiBzaG91bGQgdGFrZSBubyB0aW1lIGFuZCBleGVyY2lzZSBhIGRpZmZlcmVudCBwYXRoLgorICAgICAgICByZXMgPSBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZShhc3luY2lvLlRhc2soZm9vKCksIGxvb3A9bG9vcCkpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4xNSwgbG9vcC50aW1lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCA0MikKKworICAgIGRlZiB0ZXN0X3dhaXRfd2l0aF9nbG9iYWxfbG9vcChzZWxmKToKKworICAgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgICB3aGVuID0geWllbGQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4wMSwgd2hlbikKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZCAwCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMDE1LCB3aGVuKQorICAgICAgICAgICAgeWllbGQgMC4wMTUKKworICAgICAgICBsb29wID0gc2VsZi5uZXdfdGVzdF9sb29wKGdlbikKKworICAgICAgICBhID0gYXN5bmNpby5UYXNrKGFzeW5jaW8uc2xlZXAoMC4wMSwgbG9vcD1sb29wKSwgbG9vcD1sb29wKQorICAgICAgICBiID0gYXN5bmNpby5UYXNrKGFzeW5jaW8uc2xlZXAoMC4wMTUsIGxvb3A9bG9vcCksIGxvb3A9bG9vcCkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGZvbygpOgorICAgICAgICAgICAgZG9uZSwgcGVuZGluZyA9IHlpZWxkIGZyb20gYXN5bmNpby53YWl0KFtiLCBhXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZG9uZSwgc2V0KFthLCBiXSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBlbmRpbmcsIHNldCgpKQorICAgICAgICAgICAgcmV0dXJuIDQyCisKKyAgICAgICAgYXN5bmNpby5zZXRfZXZlbnRfbG9vcChsb29wKQorICAgICAgICByZXMgPSBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZSgKKyAgICAgICAgICAgIGFzeW5jaW8uVGFzayhmb28oKSwgbG9vcD1sb29wKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywgNDIpCisKKyAgICBkZWYgdGVzdF93YWl0X2R1cGxpY2F0ZV9jb3JvdXRpbmVzKHNlbGYpOgorICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGNvcm8ocyk6CisgICAgICAgICAgICByZXR1cm4gcworICAgICAgICBjID0gY29ybygndGVzdCcpCisKKyAgICAgICAgdGFzayA9IGFzeW5jaW8uVGFzaygKKyAgICAgICAgICAgIGFzeW5jaW8ud2FpdChbYywgYywgY29ybygnc3BhbScpXSwgbG9vcD1zZWxmLmxvb3ApLAorICAgICAgICAgICAgbG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgZG9uZSwgcGVuZGluZyA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUodGFzaykKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHBlbmRpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KGYucmVzdWx0KCkgZm9yIGYgaW4gZG9uZSksIHsndGVzdCcsICdzcGFtJ30pCisKKyAgICBkZWYgdGVzdF93YWl0X2Vycm9ycyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBWYWx1ZUVycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLAorICAgICAgICAgICAgYXN5bmNpby53YWl0KHNldCgpLCBsb29wPXNlbGYubG9vcCkpCisKKyAgICAgICAgIyAtMSBpcyBhbiBpbnZhbGlkIHJldHVybl93aGVuIHZhbHVlCisgICAgICAgIHNsZWVwX2Nvcm8gPSBhc3luY2lvLnNsZWVwKDEwLjAsIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB3YWl0X2Nvcm8gPSBhc3luY2lvLndhaXQoW3NsZWVwX2Nvcm9dLCByZXR1cm5fd2hlbj0tMSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIHdhaXRfY29ybykKKworICAgICAgICBzbGVlcF9jb3JvLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X3dhaXRfZmlyc3RfY29tcGxldGVkKHNlbGYpOgorCisgICAgICAgIGRlZiBnZW4oKToKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZAorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgxMC4wLCB3aGVuKQorICAgICAgICAgICAgd2hlbiA9IHlpZWxkIDAKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4xLCB3aGVuKQorICAgICAgICAgICAgeWllbGQgMC4xCisKKyAgICAgICAgbG9vcCA9IHNlbGYubmV3X3Rlc3RfbG9vcChnZW4pCisKKyAgICAgICAgYSA9IGFzeW5jaW8uVGFzayhhc3luY2lvLnNsZWVwKDEwLjAsIGxvb3A9bG9vcCksIGxvb3A9bG9vcCkKKyAgICAgICAgYiA9IGFzeW5jaW8uVGFzayhhc3luY2lvLnNsZWVwKDAuMSwgbG9vcD1sb29wKSwgbG9vcD1sb29wKQorICAgICAgICB0YXNrID0gYXN5bmNpby5UYXNrKAorICAgICAgICAgICAgYXN5bmNpby53YWl0KFtiLCBhXSwgcmV0dXJuX3doZW49YXN5bmNpby5GSVJTVF9DT01QTEVURUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgbG9vcD1sb29wKSwKKyAgICAgICAgICAgIGxvb3A9bG9vcCkKKworICAgICAgICBkb25lLCBwZW5kaW5nID0gbG9vcC5ydW5fdW50aWxfY29tcGxldGUodGFzaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh7Yn0sIGRvbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoe2F9LCBwZW5kaW5nKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGEuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYi5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGIucmVzdWx0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4xLCBsb29wLnRpbWUoKSkKKworICAgICAgICAjIG1vdmUgZm9yd2FyZCB0byBjbG9zZSBnZW5lcmF0b3IKKyAgICAgICAgbG9vcC5hZHZhbmNlX3RpbWUoMTApCisgICAgICAgIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGFzeW5jaW8ud2FpdChbYSwgYl0sIGxvb3A9bG9vcCkpCisKKyAgICBkZWYgdGVzdF93YWl0X3JlYWxseV9kb25lKHNlbGYpOgorICAgICAgICAjIHRoZXJlIGlzIHBvc3NpYmlsaXR5IHRoYXQgc29tZSB0YXNrcyBpbiB0aGUgcGVuZGluZyBsaXN0CisgICAgICAgICMgYmVjYW1lIGRvbmUgYnV0IHRoZWlyIGNhbGxiYWNrcyBoYXZlbid0IGFsbCBiZWVuIGNhbGxlZCB5ZXQKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGNvcm8xKCk6CisgICAgICAgICAgICB5aWVsZAorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgY29ybzIoKToKKyAgICAgICAgICAgIHlpZWxkCisgICAgICAgICAgICB5aWVsZAorCisgICAgICAgIGEgPSBhc3luY2lvLlRhc2soY29ybzEoKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGIgPSBhc3luY2lvLlRhc2soY29ybzIoKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHRhc2sgPSBhc3luY2lvLlRhc2soCisgICAgICAgICAgICBhc3luY2lvLndhaXQoW2IsIGFdLCByZXR1cm5fd2hlbj1hc3luY2lvLkZJUlNUX0NPTVBMRVRFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBsb29wPXNlbGYubG9vcCksCisgICAgICAgICAgICBsb29wPXNlbGYubG9vcCkKKworICAgICAgICBkb25lLCBwZW5kaW5nID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh0YXNrKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHthLCBifSwgZG9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShhLnJlc3VsdCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYi5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGIucmVzdWx0KCkpCisKKyAgICBkZWYgdGVzdF93YWl0X2ZpcnN0X2V4Y2VwdGlvbihzZWxmKToKKworICAgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgICB3aGVuID0geWllbGQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMTAuMCwgd2hlbikKKyAgICAgICAgICAgIHlpZWxkIDAKKworICAgICAgICBsb29wID0gc2VsZi5uZXdfdGVzdF9sb29wKGdlbikKKworICAgICAgICAjIGZpcnN0X2V4Y2VwdGlvbiwgdGFzayBhbHJlYWR5IGhhcyBleGNlcHRpb24KKyAgICAgICAgYSA9IGFzeW5jaW8uVGFzayhhc3luY2lvLnNsZWVwKDEwLjAsIGxvb3A9bG9vcCksIGxvb3A9bG9vcCkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGV4YygpOgorICAgICAgICAgICAgcmFpc2UgWmVyb0RpdmlzaW9uRXJyb3IoJ2VycicpCisKKyAgICAgICAgYiA9IGFzeW5jaW8uVGFzayhleGMoKSwgbG9vcD1sb29wKQorICAgICAgICB0YXNrID0gYXN5bmNpby5UYXNrKAorICAgICAgICAgICAgYXN5bmNpby53YWl0KFtiLCBhXSwgcmV0dXJuX3doZW49YXN5bmNpby5GSVJTVF9FWENFUFRJT04sCisgICAgICAgICAgICAgICAgICAgICAgICAgbG9vcD1sb29wKSwKKyAgICAgICAgICAgIGxvb3A9bG9vcCkKKworICAgICAgICBkb25lLCBwZW5kaW5nID0gbG9vcC5ydW5fdW50aWxfY29tcGxldGUodGFzaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh7Yn0sIGRvbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoe2F9LCBwZW5kaW5nKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAsIGxvb3AudGltZSgpKQorCisgICAgICAgICMgbW92ZSBmb3J3YXJkIHRvIGNsb3NlIGdlbmVyYXRvcgorICAgICAgICBsb29wLmFkdmFuY2VfdGltZSgxMCkKKyAgICAgICAgbG9vcC5ydW5fdW50aWxfY29tcGxldGUoYXN5bmNpby53YWl0KFthLCBiXSwgbG9vcD1sb29wKSkKKworICAgIGRlZiB0ZXN0X3dhaXRfZmlyc3RfZXhjZXB0aW9uX2luX3dhaXQoc2VsZik6CisKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgd2hlbiA9IHlpZWxkCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDEwLjAsIHdoZW4pCisgICAgICAgICAgICB3aGVuID0geWllbGQgMAorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjAxLCB3aGVuKQorICAgICAgICAgICAgeWllbGQgMC4wMQorCisgICAgICAgIGxvb3AgPSBzZWxmLm5ld190ZXN0X2xvb3AoZ2VuKQorCisgICAgICAgICMgZmlyc3RfZXhjZXB0aW9uLCBleGNlcHRpb24gZHVyaW5nIHdhaXRpbmcKKyAgICAgICAgYSA9IGFzeW5jaW8uVGFzayhhc3luY2lvLnNsZWVwKDEwLjAsIGxvb3A9bG9vcCksIGxvb3A9bG9vcCkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGV4YygpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBhc3luY2lvLnNsZWVwKDAuMDEsIGxvb3A9bG9vcCkKKyAgICAgICAgICAgIHJhaXNlIFplcm9EaXZpc2lvbkVycm9yKCdlcnInKQorCisgICAgICAgIGIgPSBhc3luY2lvLlRhc2soZXhjKCksIGxvb3A9bG9vcCkKKyAgICAgICAgdGFzayA9IGFzeW5jaW8ud2FpdChbYiwgYV0sIHJldHVybl93aGVuPWFzeW5jaW8uRklSU1RfRVhDRVBUSU9OLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3A9bG9vcCkKKworICAgICAgICBkb25lLCBwZW5kaW5nID0gbG9vcC5ydW5fdW50aWxfY29tcGxldGUodGFzaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh7Yn0sIGRvbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoe2F9LCBwZW5kaW5nKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMDEsIGxvb3AudGltZSgpKQorCisgICAgICAgICMgbW92ZSBmb3J3YXJkIHRvIGNsb3NlIGdlbmVyYXRvcgorICAgICAgICBsb29wLmFkdmFuY2VfdGltZSgxMCkKKyAgICAgICAgbG9vcC5ydW5fdW50aWxfY29tcGxldGUoYXN5bmNpby53YWl0KFthLCBiXSwgbG9vcD1sb29wKSkKKworICAgIGRlZiB0ZXN0X3dhaXRfd2l0aF9leGNlcHRpb24oc2VsZik6CisKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgd2hlbiA9IHlpZWxkCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMSwgd2hlbikKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZCAwCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMTUsIHdoZW4pCisgICAgICAgICAgICB5aWVsZCAwLjE1CisKKyAgICAgICAgbG9vcCA9IHNlbGYubmV3X3Rlc3RfbG9vcChnZW4pCisKKyAgICAgICAgYSA9IGFzeW5jaW8uVGFzayhhc3luY2lvLnNsZWVwKDAuMSwgbG9vcD1sb29wKSwgbG9vcD1sb29wKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgc2xlZXBlcigpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBhc3luY2lvLnNsZWVwKDAuMTUsIGxvb3A9bG9vcCkKKyAgICAgICAgICAgIHJhaXNlIFplcm9EaXZpc2lvbkVycm9yKCdyZWFsbHknKQorCisgICAgICAgIGIgPSBhc3luY2lvLlRhc2soc2xlZXBlcigpLCBsb29wPWxvb3ApCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBmb28oKToKKyAgICAgICAgICAgIGRvbmUsIHBlbmRpbmcgPSB5aWVsZCBmcm9tIGFzeW5jaW8ud2FpdChbYiwgYV0sIGxvb3A9bG9vcCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGRvbmUpLCAyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwZW5kaW5nLCBzZXQoKSkKKyAgICAgICAgICAgIGVycm9ycyA9IHNldChmIGZvciBmIGluIGRvbmUgaWYgZi5leGNlcHRpb24oKSBpcyBub3QgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGVycm9ycyksIDEpCisKKyAgICAgICAgbG9vcC5ydW5fdW50aWxfY29tcGxldGUoYXN5bmNpby5UYXNrKGZvbygpLCBsb29wPWxvb3ApKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMTUsIGxvb3AudGltZSgpKQorCisgICAgICAgIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGFzeW5jaW8uVGFzayhmb28oKSwgbG9vcD1sb29wKSkKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjE1LCBsb29wLnRpbWUoKSkKKworICAgIGRlZiB0ZXN0X3dhaXRfd2l0aF90aW1lb3V0KHNlbGYpOgorCisgICAgICAgIGRlZiBnZW4oKToKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZAorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjEsIHdoZW4pCisgICAgICAgICAgICB3aGVuID0geWllbGQgMAorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjE1LCB3aGVuKQorICAgICAgICAgICAgd2hlbiA9IHlpZWxkIDAKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4xMSwgd2hlbikKKyAgICAgICAgICAgIHlpZWxkIDAuMTEKKworICAgICAgICBsb29wID0gc2VsZi5uZXdfdGVzdF9sb29wKGdlbikKKworICAgICAgICBhID0gYXN5bmNpby5UYXNrKGFzeW5jaW8uc2xlZXAoMC4xLCBsb29wPWxvb3ApLCBsb29wPWxvb3ApCisgICAgICAgIGIgPSBhc3luY2lvLlRhc2soYXN5bmNpby5zbGVlcCgwLjE1LCBsb29wPWxvb3ApLCBsb29wPWxvb3ApCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBmb28oKToKKyAgICAgICAgICAgIGRvbmUsIHBlbmRpbmcgPSB5aWVsZCBmcm9tIGFzeW5jaW8ud2FpdChbYiwgYV0sIHRpbWVvdXQ9MC4xMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29wPWxvb3ApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRvbmUsIHNldChbYV0pKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwZW5kaW5nLCBzZXQoW2JdKSkKKworICAgICAgICBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZShhc3luY2lvLlRhc2soZm9vKCksIGxvb3A9bG9vcCkpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4xMSwgbG9vcC50aW1lKCkpCisKKyAgICAgICAgIyBtb3ZlIGZvcndhcmQgdG8gY2xvc2UgZ2VuZXJhdG9yCisgICAgICAgIGxvb3AuYWR2YW5jZV90aW1lKDEwKQorICAgICAgICBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZShhc3luY2lvLndhaXQoW2EsIGJdLCBsb29wPWxvb3ApKQorCisgICAgZGVmIHRlc3Rfd2FpdF9jb25jdXJyZW50X2NvbXBsZXRlKHNlbGYpOgorCisgICAgICAgIGRlZiBnZW4oKToKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZAorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjEsIHdoZW4pCisgICAgICAgICAgICB3aGVuID0geWllbGQgMAorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjE1LCB3aGVuKQorICAgICAgICAgICAgd2hlbiA9IHlpZWxkIDAKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4xLCB3aGVuKQorICAgICAgICAgICAgeWllbGQgMC4xCisKKyAgICAgICAgbG9vcCA9IHNlbGYubmV3X3Rlc3RfbG9vcChnZW4pCisKKyAgICAgICAgYSA9IGFzeW5jaW8uVGFzayhhc3luY2lvLnNsZWVwKDAuMSwgbG9vcD1sb29wKSwgbG9vcD1sb29wKQorICAgICAgICBiID0gYXN5bmNpby5UYXNrKGFzeW5jaW8uc2xlZXAoMC4xNSwgbG9vcD1sb29wKSwgbG9vcD1sb29wKQorCisgICAgICAgIGRvbmUsIHBlbmRpbmcgPSBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZSgKKyAgICAgICAgICAgIGFzeW5jaW8ud2FpdChbYiwgYV0sIHRpbWVvdXQ9MC4xLCBsb29wPWxvb3ApKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZG9uZSwgc2V0KFthXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGVuZGluZywgc2V0KFtiXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4xLCBsb29wLnRpbWUoKSkKKworICAgICAgICAjIG1vdmUgZm9yd2FyZCB0byBjbG9zZSBnZW5lcmF0b3IKKyAgICAgICAgbG9vcC5hZHZhbmNlX3RpbWUoMTApCisgICAgICAgIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGFzeW5jaW8ud2FpdChbYSwgYl0sIGxvb3A9bG9vcCkpCisKKyAgICBkZWYgdGVzdF9hc19jb21wbGV0ZWQoc2VsZik6CisKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgeWllbGQgMAorICAgICAgICAgICAgeWllbGQgMAorICAgICAgICAgICAgeWllbGQgMC4wMQorICAgICAgICAgICAgeWllbGQgMAorCisgICAgICAgIGxvb3AgPSBzZWxmLm5ld190ZXN0X2xvb3AoZ2VuKQorICAgICAgICAjIGRpc2FibGUgInNsb3cgY2FsbGJhY2siIHdhcm5pbmcKKyAgICAgICAgbG9vcC5zbG93X2NhbGxiYWNrX2R1cmF0aW9uID0gMS4wCisgICAgICAgIGNvbXBsZXRlZCA9IHNldCgpCisgICAgICAgIHRpbWVfc2hpZnRlZCA9IEZhbHNlCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBzbGVlcGVyKGR0LCB4KToKKyAgICAgICAgICAgIG5vbmxvY2FsIHRpbWVfc2hpZnRlZAorICAgICAgICAgICAgeWllbGQgZnJvbSBhc3luY2lvLnNsZWVwKGR0LCBsb29wPWxvb3ApCisgICAgICAgICAgICBjb21wbGV0ZWQuYWRkKHgpCisgICAgICAgICAgICBpZiBub3QgdGltZV9zaGlmdGVkIGFuZCAnYScgaW4gY29tcGxldGVkIGFuZCAnYicgaW4gY29tcGxldGVkOgorICAgICAgICAgICAgICAgIHRpbWVfc2hpZnRlZCA9IFRydWUKKyAgICAgICAgICAgICAgICBsb29wLmFkdmFuY2VfdGltZSgwLjE0KQorICAgICAgICAgICAgcmV0dXJuIHgKKworICAgICAgICBhID0gc2xlZXBlcigwLjAxLCAnYScpCisgICAgICAgIGIgPSBzbGVlcGVyKDAuMDEsICdiJykKKyAgICAgICAgYyA9IHNsZWVwZXIoMC4xNSwgJ2MnKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgZm9vKCk6CisgICAgICAgICAgICB2YWx1ZXMgPSBbXQorICAgICAgICAgICAgZm9yIGYgaW4gYXN5bmNpby5hc19jb21wbGV0ZWQoW2IsIGMsIGFdLCBsb29wPWxvb3ApOgorICAgICAgICAgICAgICAgIHZhbHVlcy5hcHBlbmQoKHlpZWxkIGZyb20gZikpCisgICAgICAgICAgICByZXR1cm4gdmFsdWVzCisKKyAgICAgICAgcmVzID0gbG9vcC5ydW5fdW50aWxfY29tcGxldGUoYXN5bmNpby5UYXNrKGZvbygpLCBsb29wPWxvb3ApKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMTUsIGxvb3AudGltZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ2EnIGluIHJlc1s6Ml0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnYicgaW4gcmVzWzoyXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNbMl0sICdjJykKKworICAgICAgICAjIERvaW5nIGl0IGFnYWluIHNob3VsZCB0YWtlIG5vIHRpbWUgYW5kIGV4ZXJjaXNlIGEgZGlmZmVyZW50IHBhdGguCisgICAgICAgIHJlcyA9IGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGFzeW5jaW8uVGFzayhmb28oKSwgbG9vcD1sb29wKSkKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjE1LCBsb29wLnRpbWUoKSkKKworICAgIGRlZiB0ZXN0X2FzX2NvbXBsZXRlZF93aXRoX3RpbWVvdXQoc2VsZik6CisKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgeWllbGQKKyAgICAgICAgICAgIHlpZWxkIDAKKyAgICAgICAgICAgIHlpZWxkIDAKKyAgICAgICAgICAgIHlpZWxkIDAuMQorCisgICAgICAgIGxvb3AgPSBzZWxmLm5ld190ZXN0X2xvb3AoZ2VuKQorCisgICAgICAgIGEgPSBhc3luY2lvLnNsZWVwKDAuMSwgJ2EnLCBsb29wPWxvb3ApCisgICAgICAgIGIgPSBhc3luY2lvLnNsZWVwKDAuMTUsICdiJywgbG9vcD1sb29wKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgZm9vKCk6CisgICAgICAgICAgICB2YWx1ZXMgPSBbXQorICAgICAgICAgICAgZm9yIGYgaW4gYXN5bmNpby5hc19jb21wbGV0ZWQoW2EsIGJdLCB0aW1lb3V0PTAuMTIsIGxvb3A9bG9vcCk6CisgICAgICAgICAgICAgICAgaWYgdmFsdWVzOgorICAgICAgICAgICAgICAgICAgICBsb29wLmFkdmFuY2VfdGltZSgwLjAyKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgdiA9IHlpZWxkIGZyb20gZgorICAgICAgICAgICAgICAgICAgICB2YWx1ZXMuYXBwZW5kKCgxLCB2KSkKKyAgICAgICAgICAgICAgICBleGNlcHQgYXN5bmNpby5UaW1lb3V0RXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgICAgICAgICB2YWx1ZXMuYXBwZW5kKCgyLCBleGMpKQorICAgICAgICAgICAgcmV0dXJuIHZhbHVlcworCisgICAgICAgIHJlcyA9IGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGFzeW5jaW8uVGFzayhmb28oKSwgbG9vcD1sb29wKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzKSwgMiwgcmVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc1swXSwgKDEsICdhJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzWzFdWzBdLCAyKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocmVzWzFdWzFdLCBhc3luY2lvLlRpbWVvdXRFcnJvcikKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjEyLCBsb29wLnRpbWUoKSkKKworICAgICAgICAjIG1vdmUgZm9yd2FyZCB0byBjbG9zZSBnZW5lcmF0b3IKKyAgICAgICAgbG9vcC5hZHZhbmNlX3RpbWUoMTApCisgICAgICAgIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGFzeW5jaW8ud2FpdChbYSwgYl0sIGxvb3A9bG9vcCkpCisKKyAgICBkZWYgdGVzdF9hc19jb21wbGV0ZWRfd2l0aF91bnVzZWRfdGltZW91dChzZWxmKToKKworICAgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgICB5aWVsZAorICAgICAgICAgICAgeWllbGQgMAorICAgICAgICAgICAgeWllbGQgMC4wMQorCisgICAgICAgIGxvb3AgPSBzZWxmLm5ld190ZXN0X2xvb3AoZ2VuKQorCisgICAgICAgIGEgPSBhc3luY2lvLnNsZWVwKDAuMDEsICdhJywgbG9vcD1sb29wKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgZm9vKCk6CisgICAgICAgICAgICBmb3IgZiBpbiBhc3luY2lvLmFzX2NvbXBsZXRlZChbYV0sIHRpbWVvdXQ9MSwgbG9vcD1sb29wKToKKyAgICAgICAgICAgICAgICB2ID0geWllbGQgZnJvbSBmCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2LCAnYScpCisKKyAgICAgICAgbG9vcC5ydW5fdW50aWxfY29tcGxldGUoYXN5bmNpby5UYXNrKGZvbygpLCBsb29wPWxvb3ApKQorCisgICAgZGVmIHRlc3RfYXNfY29tcGxldGVkX3JldmVyc2Vfd2FpdChzZWxmKToKKworICAgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgICB5aWVsZCAwCisgICAgICAgICAgICB5aWVsZCAwLjA1CisgICAgICAgICAgICB5aWVsZCAwCisKKyAgICAgICAgbG9vcCA9IHNlbGYubmV3X3Rlc3RfbG9vcChnZW4pCisKKyAgICAgICAgYSA9IGFzeW5jaW8uc2xlZXAoMC4wNSwgJ2EnLCBsb29wPWxvb3ApCisgICAgICAgIGIgPSBhc3luY2lvLnNsZWVwKDAuMTAsICdiJywgbG9vcD1sb29wKQorICAgICAgICBmcyA9IHthLCBifQorICAgICAgICBmdXRzID0gbGlzdChhc3luY2lvLmFzX2NvbXBsZXRlZChmcywgbG9vcD1sb29wKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZnV0cyksIDIpCisKKyAgICAgICAgeCA9IGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGZ1dHNbMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgJ2EnKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMDUsIGxvb3AudGltZSgpKQorICAgICAgICBsb29wLmFkdmFuY2VfdGltZSgwLjA1KQorICAgICAgICB5ID0gbG9vcC5ydW5fdW50aWxfY29tcGxldGUoZnV0c1swXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh5LCAnYicpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4xMCwgbG9vcC50aW1lKCkpCisKKyAgICBkZWYgdGVzdF9hc19jb21wbGV0ZWRfY29uY3VycmVudChzZWxmKToKKworICAgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgICB3aGVuID0geWllbGQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4wNSwgd2hlbikKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZCAwCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMDUsIHdoZW4pCisgICAgICAgICAgICB5aWVsZCAwLjA1CisKKyAgICAgICAgbG9vcCA9IHNlbGYubmV3X3Rlc3RfbG9vcChnZW4pCisKKyAgICAgICAgYSA9IGFzeW5jaW8uc2xlZXAoMC4wNSwgJ2EnLCBsb29wPWxvb3ApCisgICAgICAgIGIgPSBhc3luY2lvLnNsZWVwKDAuMDUsICdiJywgbG9vcD1sb29wKQorICAgICAgICBmcyA9IHthLCBifQorICAgICAgICBmdXRzID0gbGlzdChhc3luY2lvLmFzX2NvbXBsZXRlZChmcywgbG9vcD1sb29wKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZnV0cyksIDIpCisgICAgICAgIHdhaXRlciA9IGFzeW5jaW8ud2FpdChmdXRzLCBsb29wPWxvb3ApCisgICAgICAgIGRvbmUsIHBlbmRpbmcgPSBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh3YWl0ZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KGYucmVzdWx0KCkgZm9yIGYgaW4gZG9uZSksIHsnYScsICdiJ30pCisKKyAgICBkZWYgdGVzdF9hc19jb21wbGV0ZWRfZHVwbGljYXRlX2Nvcm91dGluZXMoc2VsZik6CisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBjb3JvKHMpOgorICAgICAgICAgICAgcmV0dXJuIHMKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHJ1bm5lcigpOgorICAgICAgICAgICAgcmVzdWx0ID0gW10KKyAgICAgICAgICAgIGMgPSBjb3JvKCdoYW0nKQorICAgICAgICAgICAgZm9yIGYgaW4gYXN5bmNpby5hc19jb21wbGV0ZWQoW2MsIGMsIGNvcm8oJ3NwYW0nKV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29wPXNlbGYubG9vcCk6CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgoeWllbGQgZnJvbSBmKSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQKKworICAgICAgICBmdXQgPSBhc3luY2lvLlRhc2socnVubmVyKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGZ1dCkKKyAgICAgICAgcmVzdWx0ID0gZnV0LnJlc3VsdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KHJlc3VsdCksIHsnaGFtJywgJ3NwYW0nfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0KSwgMikKKworICAgIGRlZiB0ZXN0X3NsZWVwKHNlbGYpOgorCisgICAgICAgIGRlZiBnZW4oKToKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZAorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjA1LCB3aGVuKQorICAgICAgICAgICAgd2hlbiA9IHlpZWxkIDAuMDUKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4xLCB3aGVuKQorICAgICAgICAgICAgeWllbGQgMC4wNQorCisgICAgICAgIGxvb3AgPSBzZWxmLm5ld190ZXN0X2xvb3AoZ2VuKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgc2xlZXBlcihkdCwgYXJnKToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gYXN5bmNpby5zbGVlcChkdC8yLCBsb29wPWxvb3ApCisgICAgICAgICAgICByZXMgPSB5aWVsZCBmcm9tIGFzeW5jaW8uc2xlZXAoZHQvMiwgYXJnLCBsb29wPWxvb3ApCisgICAgICAgICAgICByZXR1cm4gcmVzCisKKyAgICAgICAgdCA9IGFzeW5jaW8uVGFzayhzbGVlcGVyKDAuMSwgJ3llYWgnKSwgbG9vcD1sb29wKQorICAgICAgICBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUodC5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5yZXN1bHQoKSwgJ3llYWgnKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMSwgbG9vcC50aW1lKCkpCisKKyAgICBkZWYgdGVzdF9zbGVlcF9jYW5jZWwoc2VsZik6CisKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgd2hlbiA9IHlpZWxkCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDEwLjAsIHdoZW4pCisgICAgICAgICAgICB5aWVsZCAwCisKKyAgICAgICAgbG9vcCA9IHNlbGYubmV3X3Rlc3RfbG9vcChnZW4pCisKKyAgICAgICAgdCA9IGFzeW5jaW8uVGFzayhhc3luY2lvLnNsZWVwKDEwLjAsICd5ZWFoJywgbG9vcD1sb29wKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBsb29wPWxvb3ApCisKKyAgICAgICAgaGFuZGxlID0gTm9uZQorICAgICAgICBvcmlnX2NhbGxfbGF0ZXIgPSBsb29wLmNhbGxfbGF0ZXIKKworICAgICAgICBkZWYgY2FsbF9sYXRlcihkZWxheSwgY2FsbGJhY2ssICphcmdzKToKKyAgICAgICAgICAgIG5vbmxvY2FsIGhhbmRsZQorICAgICAgICAgICAgaGFuZGxlID0gb3JpZ19jYWxsX2xhdGVyKGRlbGF5LCBjYWxsYmFjaywgKmFyZ3MpCisgICAgICAgICAgICByZXR1cm4gaGFuZGxlCisKKyAgICAgICAgbG9vcC5jYWxsX2xhdGVyID0gY2FsbF9sYXRlcgorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KGxvb3ApCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYW5kbGUuX2NhbmNlbGxlZCkKKworICAgICAgICB0LmNhbmNlbCgpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkobG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhbmRsZS5fY2FuY2VsbGVkKQorCisgICAgZGVmIHRlc3RfdGFza19jYW5jZWxfc2xlZXBpbmdfdGFzayhzZWxmKToKKworICAgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgICB3aGVuID0geWllbGQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4xLCB3aGVuKQorICAgICAgICAgICAgd2hlbiA9IHlpZWxkIDAKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoNTAwMCwgd2hlbikKKyAgICAgICAgICAgIHlpZWxkIDAuMQorCisgICAgICAgIGxvb3AgPSBzZWxmLm5ld190ZXN0X2xvb3AoZ2VuKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgc2xlZXAoZHQpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBhc3luY2lvLnNsZWVwKGR0LCBsb29wPWxvb3ApCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBkb2l0KCk6CisgICAgICAgICAgICBzbGVlcGVyID0gYXN5bmNpby5UYXNrKHNsZWVwKDUwMDApLCBsb29wPWxvb3ApCisgICAgICAgICAgICBsb29wLmNhbGxfbGF0ZXIoMC4xLCBzbGVlcGVyLmNhbmNlbCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB5aWVsZCBmcm9tIHNsZWVwZXIKKyAgICAgICAgICAgIGV4Y2VwdCBhc3luY2lvLkNhbmNlbGxlZEVycm9yOgorICAgICAgICAgICAgICAgIHJldHVybiAnY2FuY2VsbGVkJworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gJ3NsZXB0IGluJworCisgICAgICAgIGRvZXIgPSBkb2l0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb29wLnJ1bl91bnRpbF9jb21wbGV0ZShkb2VyKSwgJ2NhbmNlbGxlZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4xLCBsb29wLnRpbWUoKSkKKworICAgIGRlZiB0ZXN0X3Rhc2tfY2FuY2VsX3dhaXRlcl9mdXR1cmUoc2VsZik6CisgICAgICAgIGZ1dCA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgY29ybygpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBmdXQKKworICAgICAgICB0YXNrID0gYXN5bmNpby5UYXNrKGNvcm8oKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzKHRhc2suX2Z1dF93YWl0ZXIsIGZ1dCkKKworICAgICAgICB0YXNrLmNhbmNlbCgpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIGFzeW5jaW8uQ2FuY2VsbGVkRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIHRhc2spCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHRhc2suX2Z1dF93YWl0ZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmdXQuY2FuY2VsbGVkKCkpCisKKyAgICBkZWYgdGVzdF9zdGVwX2luX2NvbXBsZXRlZF90YXNrKHNlbGYpOgorICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIG5vdG11Y2goKToKKyAgICAgICAgICAgIHJldHVybiAna28nCisKKyAgICAgICAgZ2VuID0gbm90bXVjaCgpCisgICAgICAgIHRhc2sgPSBhc3luY2lvLlRhc2soZ2VuLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdGFzay5zZXRfcmVzdWx0KCdvaycpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsIHRhc2suX3N0ZXApCisgICAgICAgIGdlbi5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9zdGVwX3Jlc3VsdChzZWxmKToKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBub3RtdWNoKCk6CisgICAgICAgICAgICB5aWVsZCBOb25lCisgICAgICAgICAgICB5aWVsZCAxCisgICAgICAgICAgICByZXR1cm4gJ2tvJworCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgUnVudGltZUVycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBub3RtdWNoKCkpCisKKyAgICBkZWYgdGVzdF9zdGVwX3Jlc3VsdF9mdXR1cmUoc2VsZik6CisgICAgICAgICMgSWYgY29yb3V0aW5lIHJldHVybnMgZnV0dXJlLCB0YXNrIHdhaXRzIG9uIHRoaXMgZnV0dXJlLgorCisgICAgICAgIGNsYXNzIEZ1dChhc3luY2lvLkZ1dHVyZSk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dkcyk6CisgICAgICAgICAgICAgICAgc2VsZi5jYl9hZGRlZCA9IEZhbHNlCisgICAgICAgICAgICAgICAgc3VwZXIoKS5fX2luaXRfXygqYXJncywgKiprd2RzKQorCisgICAgICAgICAgICBkZWYgYWRkX2RvbmVfY2FsbGJhY2soc2VsZiwgZm4pOgorICAgICAgICAgICAgICAgIHNlbGYuY2JfYWRkZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgc3VwZXIoKS5hZGRfZG9uZV9jYWxsYmFjayhmbikKKworICAgICAgICBmdXQgPSBGdXQobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHJlc3VsdCA9IE5vbmUKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHdhaXRfZm9yX2Z1dHVyZSgpOgorICAgICAgICAgICAgbm9ubG9jYWwgcmVzdWx0CisgICAgICAgICAgICByZXN1bHQgPSB5aWVsZCBmcm9tIGZ1dAorCisgICAgICAgIHQgPSBhc3luY2lvLlRhc2sod2FpdF9mb3JfZnV0dXJlKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZ1dC5jYl9hZGRlZCkKKworICAgICAgICByZXMgPSBvYmplY3QoKQorICAgICAgICBmdXQuc2V0X3Jlc3VsdChyZXMpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzKHJlcywgcmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUodC5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHQucmVzdWx0KCkpCisKKyAgICBkZWYgdGVzdF9zdGVwX3dpdGhfYmFzZWV4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBub3RtdXRjaCgpOgorICAgICAgICAgICAgcmFpc2UgQmFzZUV4Y2VwdGlvbigpCisKKyAgICAgICAgdGFzayA9IGFzeW5jaW8uVGFzayhub3RtdXRjaCgpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQmFzZUV4Y2VwdGlvbiwgdGFzay5fc3RlcCkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUodGFzay5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh0YXNrLmV4Y2VwdGlvbigpLCBCYXNlRXhjZXB0aW9uKQorCisgICAgZGVmIHRlc3RfYmFzZWV4Y2VwdGlvbl9kdXJpbmdfY2FuY2VsKHNlbGYpOgorCisgICAgICAgIGRlZiBnZW4oKToKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZAorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgxMC4wLCB3aGVuKQorICAgICAgICAgICAgeWllbGQgMAorCisgICAgICAgIGxvb3AgPSBzZWxmLm5ld190ZXN0X2xvb3AoZ2VuKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgc2xlZXBlcigpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBhc3luY2lvLnNsZWVwKDEwLCBsb29wPWxvb3ApCisKKyAgICAgICAgYmFzZV9leGMgPSBCYXNlRXhjZXB0aW9uKCkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIG5vdG11dGNoKCk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgeWllbGQgZnJvbSBzbGVlcGVyKCkKKyAgICAgICAgICAgIGV4Y2VwdCBhc3luY2lvLkNhbmNlbGxlZEVycm9yOgorICAgICAgICAgICAgICAgIHJhaXNlIGJhc2VfZXhjCisKKyAgICAgICAgdGFzayA9IGFzeW5jaW8uVGFzayhub3RtdXRjaCgpLCBsb29wPWxvb3ApCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkobG9vcCkKKworICAgICAgICB0YXNrLmNhbmNlbCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodGFzay5kb25lKCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQmFzZUV4Y2VwdGlvbiwgdGVzdF91dGlscy5ydW5fYnJpZWZseSwgbG9vcCkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUodGFzay5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodGFzay5jYW5jZWxsZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0YXNrLmV4Y2VwdGlvbigpLCBiYXNlX2V4YykKKworICAgIGRlZiB0ZXN0X2lzY29yb3V0aW5lZnVuY3Rpb24oc2VsZik6CisgICAgICAgIGRlZiBmbigpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYXN5bmNpby5pc2Nvcm91dGluZWZ1bmN0aW9uKGZuKSkKKworICAgICAgICBkZWYgZm4xKCk6CisgICAgICAgICAgICB5aWVsZAorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGFzeW5jaW8uaXNjb3JvdXRpbmVmdW5jdGlvbihmbjEpKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgZm4yKCk6CisgICAgICAgICAgICB5aWVsZAorICAgICAgICBzZWxmLmFzc2VydFRydWUoYXN5bmNpby5pc2Nvcm91dGluZWZ1bmN0aW9uKGZuMikpCisKKyAgICBkZWYgdGVzdF95aWVsZF92c195aWVsZF9mcm9tKHNlbGYpOgorICAgICAgICBmdXQgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHdhaXRfZm9yX2Z1dHVyZSgpOgorICAgICAgICAgICAgeWllbGQgZnV0CisKKyAgICAgICAgdGFzayA9IHdhaXRfZm9yX2Z1dHVyZSgpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yKToKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUodGFzaykKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZ1dC5kb25lKCkpCisKKyAgICBkZWYgdGVzdF95aWVsZF92c195aWVsZF9mcm9tX2dlbmVyYXRvcihzZWxmKToKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBjb3JvKCk6CisgICAgICAgICAgICB5aWVsZAorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgd2FpdF9mb3JfZnV0dXJlKCk6CisgICAgICAgICAgICBnZW4gPSBjb3JvKCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB5aWVsZCBnZW4KKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgZ2VuLmNsb3NlKCkKKworICAgICAgICB0YXNrID0gd2FpdF9mb3JfZnV0dXJlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBSdW50aW1lRXJyb3IsCisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCB0YXNrKQorCisgICAgZGVmIHRlc3RfY29yb3V0aW5lX25vbl9nZW5fZnVuY3Rpb24oc2VsZik6CisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgZnVuYygpOgorICAgICAgICAgICAgcmV0dXJuICd0ZXN0JworCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhc3luY2lvLmlzY29yb3V0aW5lZnVuY3Rpb24oZnVuYykpCisKKyAgICAgICAgY29ybyA9IGZ1bmMoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYXN5bmNpby5pc2Nvcm91dGluZShjb3JvKSkKKworICAgICAgICByZXMgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvcm8pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCAndGVzdCcpCisKKyAgICBkZWYgdGVzdF9jb3JvdXRpbmVfbm9uX2dlbl9mdW5jdGlvbl9yZXR1cm5fZnV0dXJlKHNlbGYpOgorICAgICAgICBmdXQgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGZ1bmMoKToKKyAgICAgICAgICAgIHJldHVybiBmdXQKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGNvcm8oKToKKyAgICAgICAgICAgIGZ1dC5zZXRfcmVzdWx0KCd0ZXN0JykKKworICAgICAgICB0MSA9IGFzeW5jaW8uVGFzayhmdW5jKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0MiA9IGFzeW5jaW8uVGFzayhjb3JvKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICByZXMgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHQxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywgJ3Rlc3QnKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh0Mi5yZXN1bHQoKSkKKworICAgIGRlZiB0ZXN0X2N1cnJlbnRfdGFzayhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoYXN5bmNpby5UYXNrLmN1cnJlbnRfdGFzayhsb29wPXNlbGYubG9vcCkpCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBjb3JvKGxvb3ApOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFzeW5jaW8uVGFzay5jdXJyZW50X3Rhc2sobG9vcD1sb29wKSBpcyB0YXNrKQorCisgICAgICAgIHRhc2sgPSBhc3luY2lvLlRhc2soY29ybyhzZWxmLmxvb3ApLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh0YXNrKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShhc3luY2lvLlRhc2suY3VycmVudF90YXNrKGxvb3A9c2VsZi5sb29wKSkKKworICAgIGRlZiB0ZXN0X2N1cnJlbnRfdGFza193aXRoX2ludGVybGVhdmluZ190YXNrcyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoYXN5bmNpby5UYXNrLmN1cnJlbnRfdGFzayhsb29wPXNlbGYubG9vcCkpCisKKyAgICAgICAgZnV0MSA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmdXQyID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBjb3JvMShsb29wKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhc3luY2lvLlRhc2suY3VycmVudF90YXNrKGxvb3A9bG9vcCkgaXMgdGFzazEpCisgICAgICAgICAgICB5aWVsZCBmcm9tIGZ1dDEKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhc3luY2lvLlRhc2suY3VycmVudF90YXNrKGxvb3A9bG9vcCkgaXMgdGFzazEpCisgICAgICAgICAgICBmdXQyLnNldF9yZXN1bHQoVHJ1ZSkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGNvcm8yKGxvb3ApOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFzeW5jaW8uVGFzay5jdXJyZW50X3Rhc2sobG9vcD1sb29wKSBpcyB0YXNrMikKKyAgICAgICAgICAgIGZ1dDEuc2V0X3Jlc3VsdChUcnVlKQorICAgICAgICAgICAgeWllbGQgZnJvbSBmdXQyCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoYXN5bmNpby5UYXNrLmN1cnJlbnRfdGFzayhsb29wPWxvb3ApIGlzIHRhc2syKQorCisgICAgICAgIHRhc2sxID0gYXN5bmNpby5UYXNrKGNvcm8xKHNlbGYubG9vcCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0YXNrMiA9IGFzeW5jaW8uVGFzayhjb3JvMihzZWxmLmxvb3ApLCBsb29wPXNlbGYubG9vcCkKKworICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGFzeW5jaW8ud2FpdCgodGFzazEsIHRhc2syKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9vcD1zZWxmLmxvb3ApKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShhc3luY2lvLlRhc2suY3VycmVudF90YXNrKGxvb3A9c2VsZi5sb29wKSkKKworICAgICMgU29tZSB0aG9yb3VnaCB0ZXN0cyBmb3IgY2FuY2VsbGF0aW9uIHByb3BhZ2F0aW9uIHRocm91Z2gKKyAgICAjIGNvcm91dGluZXMsIHRhc2tzIGFuZCB3YWl0KCkuCisKKyAgICBkZWYgdGVzdF95aWVsZF9mdXR1cmVfcGFzc2VzX2NhbmNlbChzZWxmKToKKyAgICAgICAgIyBDYW5jZWxsaW5nIG91dGVyKCkgY2FuY2VscyBpbm5lcigpIGNhbmNlbHMgd2FpdGVyLgorICAgICAgICBwcm9vZiA9IDAKKyAgICAgICAgd2FpdGVyID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBpbm5lcigpOgorICAgICAgICAgICAgbm9ubG9jYWwgcHJvb2YKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB5aWVsZCBmcm9tIHdhaXRlcgorICAgICAgICAgICAgZXhjZXB0IGFzeW5jaW8uQ2FuY2VsbGVkRXJyb3I6CisgICAgICAgICAgICAgICAgcHJvb2YgKz0gMQorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnZ290IHBhc3Qgc2xlZXAoKSBpbiBpbm5lcigpJykKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIG91dGVyKCk6CisgICAgICAgICAgICBub25sb2NhbCBwcm9vZgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gaW5uZXIoKQorICAgICAgICAgICAgZXhjZXB0IGFzeW5jaW8uQ2FuY2VsbGVkRXJyb3I6CisgICAgICAgICAgICAgICAgcHJvb2YgKz0gMTAwICAjIEV4cGVjdCB0aGlzIHBhdGguCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHByb29mICs9IDEwCisKKyAgICAgICAgZiA9IGFzeW5jaW8uZW5zdXJlX2Z1dHVyZShvdXRlcigpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIGYuY2FuY2VsKCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb29mLCAxMDEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3YWl0ZXIuY2FuY2VsbGVkKCkpCisKKyAgICBkZWYgdGVzdF95aWVsZF93YWl0X2RvZXNfbm90X3NoaWVsZF9jYW5jZWwoc2VsZik6CisgICAgICAgICMgQ2FuY2VsbGluZyBvdXRlcigpIG1ha2VzIHdhaXQoKSByZXR1cm4gZWFybHksIGxlYXZlcyBpbm5lcigpCisgICAgICAgICMgcnVubmluZy4KKyAgICAgICAgcHJvb2YgPSAwCisgICAgICAgIHdhaXRlciA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgaW5uZXIoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIHByb29mCisgICAgICAgICAgICB5aWVsZCBmcm9tIHdhaXRlcgorICAgICAgICAgICAgcHJvb2YgKz0gMQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgb3V0ZXIoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIHByb29mCisgICAgICAgICAgICBkLCBwID0geWllbGQgZnJvbSBhc3luY2lvLndhaXQoW2lubmVyKCldLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgICAgIHByb29mICs9IDEwMAorCisgICAgICAgIGYgPSBhc3luY2lvLmVuc3VyZV9mdXR1cmUob3V0ZXIoKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBmLmNhbmNlbCgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgYXN5bmNpby5DYW5jZWxsZWRFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgZikKKyAgICAgICAgd2FpdGVyLnNldF9yZXN1bHQoTm9uZSkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvb2YsIDEpCisKKyAgICBkZWYgdGVzdF9zaGllbGRfcmVzdWx0KHNlbGYpOgorICAgICAgICBpbm5lciA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBvdXRlciA9IGFzeW5jaW8uc2hpZWxkKGlubmVyKQorICAgICAgICBpbm5lci5zZXRfcmVzdWx0KDQyKQorICAgICAgICByZXMgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKG91dGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywgNDIpCisKKyAgICBkZWYgdGVzdF9zaGllbGRfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICBpbm5lciA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBvdXRlciA9IGFzeW5jaW8uc2hpZWxkKGlubmVyKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgZXhjID0gUnVudGltZUVycm9yKCdleHBlY3RlZCcpCisgICAgICAgIGlubmVyLnNldF9leGNlcHRpb24oZXhjKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhvdXRlci5leGNlcHRpb24oKSwgZXhjKQorCisgICAgZGVmIHRlc3Rfc2hpZWxkX2NhbmNlbChzZWxmKToKKyAgICAgICAgaW5uZXIgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgb3V0ZXIgPSBhc3luY2lvLnNoaWVsZChpbm5lcikKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIGlubmVyLmNhbmNlbCgpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3V0ZXIuY2FuY2VsbGVkKCkpCisKKyAgICBkZWYgdGVzdF9zaGllbGRfc2hvcnRjdXQoc2VsZik6CisgICAgICAgIGZ1dCA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmdXQuc2V0X3Jlc3VsdCg0MikKKyAgICAgICAgcmVzID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShhc3luY2lvLnNoaWVsZChmdXQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywgNDIpCisKKyAgICBkZWYgdGVzdF9zaGllbGRfZWZmZWN0KHNlbGYpOgorICAgICAgICAjIENhbmNlbGxpbmcgb3V0ZXIoKSBkb2VzIG5vdCBhZmZlY3QgaW5uZXIoKS4KKyAgICAgICAgcHJvb2YgPSAwCisgICAgICAgIHdhaXRlciA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgaW5uZXIoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIHByb29mCisgICAgICAgICAgICB5aWVsZCBmcm9tIHdhaXRlcgorICAgICAgICAgICAgcHJvb2YgKz0gMQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgb3V0ZXIoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIHByb29mCisgICAgICAgICAgICB5aWVsZCBmcm9tIGFzeW5jaW8uc2hpZWxkKGlubmVyKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICAgICAgcHJvb2YgKz0gMTAwCisKKyAgICAgICAgZiA9IGFzeW5jaW8uZW5zdXJlX2Z1dHVyZShvdXRlcigpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIGYuY2FuY2VsKCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhhc3luY2lvLkNhbmNlbGxlZEVycm9yKToKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZikKKyAgICAgICAgd2FpdGVyLnNldF9yZXN1bHQoTm9uZSkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvb2YsIDEpCisKKyAgICBkZWYgdGVzdF9zaGllbGRfZ2F0aGVyKHNlbGYpOgorICAgICAgICBjaGlsZDEgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgY2hpbGQyID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHBhcmVudCA9IGFzeW5jaW8uZ2F0aGVyKGNoaWxkMSwgY2hpbGQyLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgb3V0ZXIgPSBhc3luY2lvLnNoaWVsZChwYXJlbnQsIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgb3V0ZXIuY2FuY2VsKCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvdXRlci5jYW5jZWxsZWQoKSkKKyAgICAgICAgY2hpbGQxLnNldF9yZXN1bHQoMSkKKyAgICAgICAgY2hpbGQyLnNldF9yZXN1bHQoMikKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyZW50LnJlc3VsdCgpLCBbMSwgMl0pCisKKyAgICBkZWYgdGVzdF9nYXRoZXJfc2hpZWxkKHNlbGYpOgorICAgICAgICBjaGlsZDEgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgY2hpbGQyID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGlubmVyMSA9IGFzeW5jaW8uc2hpZWxkKGNoaWxkMSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGlubmVyMiA9IGFzeW5jaW8uc2hpZWxkKGNoaWxkMiwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHBhcmVudCA9IGFzeW5jaW8uZ2F0aGVyKGlubmVyMSwgaW5uZXIyLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHBhcmVudC5jYW5jZWwoKQorICAgICAgICAjIFRoaXMgc2hvdWxkIGNhbmNlbCBpbm5lcjEgYW5kIGlubmVyMiBidXQgYm90IGNoaWxkMSBhbmQgY2hpbGQyLgorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHBhcmVudC5leGNlcHRpb24oKSwgYXN5bmNpby5DYW5jZWxsZWRFcnJvcikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlubmVyMS5jYW5jZWxsZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlubmVyMi5jYW5jZWxsZWQoKSkKKyAgICAgICAgY2hpbGQxLnNldF9yZXN1bHQoMSkKKyAgICAgICAgY2hpbGQyLnNldF9yZXN1bHQoMikKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisKKyAgICBkZWYgdGVzdF9hc19jb21wbGV0ZWRfaW52YWxpZF9hcmdzKHNlbGYpOgorICAgICAgICBmdXQgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKworICAgICAgICAjIGFzX2NvbXBsZXRlZCgpIGV4cGVjdHMgYSBsaXN0IG9mIGZ1dHVyZXMsIG5vdCBhIGZ1dHVyZSBpbnN0YW5jZQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsCisgICAgICAgICAgICBhc3luY2lvLmFzX2NvbXBsZXRlZChmdXQsIGxvb3A9c2VsZi5sb29wKSkKKyAgICAgICAgY29ybyA9IGNvcm91dGluZV9mdW5jdGlvbigpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwKKyAgICAgICAgICAgIGFzeW5jaW8uYXNfY29tcGxldGVkKGNvcm8sIGxvb3A9c2VsZi5sb29wKSkKKyAgICAgICAgY29yby5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF93YWl0X2ludmFsaWRfYXJncyhzZWxmKToKKyAgICAgICAgZnV0ID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgIyB3YWl0KCkgZXhwZWN0cyBhIGxpc3Qgb2YgZnV0dXJlcywgbm90IGEgZnV0dXJlIGluc3RhbmNlCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwKKyAgICAgICAgICAgIGFzeW5jaW8ud2FpdChmdXQsIGxvb3A9c2VsZi5sb29wKSkKKyAgICAgICAgY29ybyA9IGNvcm91dGluZV9mdW5jdGlvbigpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwKKyAgICAgICAgICAgIGFzeW5jaW8ud2FpdChjb3JvLCBsb29wPXNlbGYubG9vcCkpCisgICAgICAgIGNvcm8uY2xvc2UoKQorCisgICAgICAgICMgd2FpdCgpIGV4cGVjdHMgYXQgbGVhc3QgYSBmdXR1cmUKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwKKyAgICAgICAgICAgIGFzeW5jaW8ud2FpdChbXSwgbG9vcD1zZWxmLmxvb3ApKQorCisgICAgZGVmIHRlc3RfY29yb3dyYXBwZXJfbW9ja3NfZ2VuZXJhdG9yKHNlbGYpOgorCisgICAgICAgIGRlZiBjaGVjaygpOgorICAgICAgICAgICAgIyBBIGZ1bmN0aW9uIHRoYXQgYXNzZXJ0cyB2YXJpb3VzIHRoaW5ncy4KKyAgICAgICAgICAgICMgQ2FsbGVkIHR3aWNlLCB3aXRoIGRpZmZlcmVudCBkZWJ1ZyBmbGFnIHZhbHVlcy4KKworICAgICAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgICAgICBkZWYgY29ybygpOgorICAgICAgICAgICAgICAgICMgVGhlIGFjdHVhbCBjb3JvdXRpbmUuCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGdlbi5naV9ydW5uaW5nKQorICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gZnV0CisKKyAgICAgICAgICAgICMgQSBjb21wbGV0ZWQgRnV0dXJlIHVzZWQgdG8gcnVuIHRoZSBjb3JvdXRpbmUuCisgICAgICAgICAgICBmdXQgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgICAgIGZ1dC5zZXRfcmVzdWx0KE5vbmUpCisKKyAgICAgICAgICAgICMgQ2FsbCB0aGUgY29yb3V0aW5lLgorICAgICAgICAgICAgZ2VuID0gY29ybygpCisKKyAgICAgICAgICAgICMgQ2hlY2sgc29tZSBwcm9wZXJ0aWVzLgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFzeW5jaW8uaXNjb3JvdXRpbmUoZ2VuKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShnZW4uZ2lfZnJhbWUsIHR5cGVzLkZyYW1lVHlwZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZ2VuLmdpX3J1bm5pbmcpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZ2VuLmdpX2NvZGUsIHR5cGVzLkNvZGVUeXBlKQorCisgICAgICAgICAgICAjIFJ1biBpdC4KKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZ2VuKQorCisgICAgICAgICAgICAjIFRoZSBmcmFtZSBzaG91bGQgaGF2ZSBjaGFuZ2VkLgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZ2VuLmdpX2ZyYW1lKQorCisgICAgICAgICMgVGVzdCB3aXRoIGRlYnVnIGZsYWcgY2xlYXJlZC4KKyAgICAgICAgd2l0aCBzZXRfY29yb3V0aW5lX2RlYnVnKEZhbHNlKToKKyAgICAgICAgICAgIGNoZWNrKCkKKworICAgICAgICAjIFRlc3Qgd2l0aCBkZWJ1ZyBmbGFnIHNldC4KKyAgICAgICAgd2l0aCBzZXRfY29yb3V0aW5lX2RlYnVnKFRydWUpOgorICAgICAgICAgICAgY2hlY2soKQorCisgICAgZGVmIHRlc3RfeWllbGRfZnJvbV9jb3Jvd3JhcHBlcihzZWxmKToKKyAgICAgICAgd2l0aCBzZXRfY29yb3V0aW5lX2RlYnVnKFRydWUpOgorICAgICAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgICAgICBkZWYgdDEoKToKKyAgICAgICAgICAgICAgICByZXR1cm4gKHlpZWxkIGZyb20gdDIoKSkKKworICAgICAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgICAgICBkZWYgdDIoKToKKyAgICAgICAgICAgICAgICBmID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgICAgICAgICAgYXN5bmNpby5UYXNrKHQzKGYpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgICAgICAgICByZXR1cm4gKHlpZWxkIGZyb20gZikKKworICAgICAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgICAgICBkZWYgdDMoZik6CisgICAgICAgICAgICAgICAgZi5zZXRfcmVzdWx0KCgxLCAyLCAzKSkKKworICAgICAgICAgICAgdGFzayA9IGFzeW5jaW8uVGFzayh0MSgpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgICAgIHZhbCA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUodGFzaykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsLCAoMSwgMiwgMykpCisKKyAgICBkZWYgdGVzdF95aWVsZF9mcm9tX2Nvcm93cmFwcGVyX3NlbmQoc2VsZik6CisgICAgICAgIGRlZiBmb28oKToKKyAgICAgICAgICAgIGEgPSB5aWVsZAorICAgICAgICAgICAgcmV0dXJuIGEKKworICAgICAgICBkZWYgY2FsbChhcmcpOgorICAgICAgICAgICAgY3cgPSBhc3luY2lvLmNvcm91dGluZXMuQ29yb1dyYXBwZXIoZm9vKCkpCisgICAgICAgICAgICBjdy5zZW5kKE5vbmUpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgY3cuc2VuZChhcmcpCisgICAgICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbiBhcyBleDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZXguYXJnc1swXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcignU3RvcEl0ZXJhdGlvbiB3YXMgZXhwZWN0ZWQnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FsbCgoMSwgMikpLCAoMSwgMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FsbCgnc3BhbScpLCAnc3BhbScpCisKKyAgICBkZWYgdGVzdF9jb3Jvd3JhcHBlcl93ZWFrcmVmKHNlbGYpOgorICAgICAgICB3ZCA9IHdlYWtyZWYuV2Vha1ZhbHVlRGljdGlvbmFyeSgpCisgICAgICAgIGRlZiBmb28oKTogeWllbGQgZnJvbSBbXQorICAgICAgICBjdyA9IGFzeW5jaW8uY29yb3V0aW5lcy5Db3JvV3JhcHBlcihmb28oKSkKKyAgICAgICAgd2RbJ2N3J10gPSBjdyAgIyBXb3VsZCBmYWlsIHdpdGhvdXQgX193ZWFrcmVmX18gc2xvdC4KKyAgICAgICAgY3cuZ2VuID0gTm9uZSAgIyBTdXBwcmVzcyB3YXJuaW5nIGZyb20gX19kZWxfXy4KKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKFBZMzQsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ25lZWQgcHl0aG9uIDMuNCBvciBsYXRlcicpCisgICAgZGVmIHRlc3RfbG9nX2Rlc3Ryb3llZF9wZW5kaW5nX3Rhc2soc2VsZik6CisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYga2lsbF9tZShsb29wKToKKyAgICAgICAgICAgIGZ1dHVyZSA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9bG9vcCkKKyAgICAgICAgICAgIHlpZWxkIGZyb20gZnV0dXJlCisgICAgICAgICAgICAjIGF0IHRoaXMgcG9pbnQsIHRoZSBvbmx5IHJlZmVyZW5jZSB0byBraWxsX21lKCkgdGFzayBpcworICAgICAgICAgICAgIyB0aGUgVGFzay5fd2FrZXVwKCkgbWV0aG9kIGluIGZ1dHVyZS5fY2FsbGJhY2tzCisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oImNvZGUgbmV2ZXIgcmVhY2hlZCIpCisKKyAgICAgICAgbW9ja19oYW5kbGVyID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLnNldF9kZWJ1ZyhUcnVlKQorICAgICAgICBzZWxmLmxvb3Auc2V0X2V4Y2VwdGlvbl9oYW5kbGVyKG1vY2tfaGFuZGxlcikKKworICAgICAgICAjIHNjaGVkdWxlIHRoZSB0YXNrCisgICAgICAgIGNvcm8gPSBraWxsX21lKHNlbGYubG9vcCkKKyAgICAgICAgdGFzayA9IGFzeW5jaW8uZW5zdXJlX2Z1dHVyZShjb3JvLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhc3luY2lvLlRhc2suYWxsX3Rhc2tzKGxvb3A9c2VsZi5sb29wKSwge3Rhc2t9KQorCisgICAgICAgICMgZXhlY3V0ZSB0aGUgdGFzayBzbyBpdCB3YWl0cyBmb3IgZnV0dXJlCisgICAgICAgIHNlbGYubG9vcC5fcnVuX29uY2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLmxvb3AuX3JlYWR5KSwgMCkKKworICAgICAgICAjIHJlbW92ZSB0aGUgZnV0dXJlIHVzZWQgaW4ga2lsbF9tZSgpLCBhbmQgcmVmZXJlbmNlcyB0byB0aGUgdGFzaworICAgICAgICBkZWwgY29yby5naV9mcmFtZS5mX2xvY2Fsc1snZnV0dXJlJ10KKyAgICAgICAgY29ybyA9IE5vbmUKKyAgICAgICAgc291cmNlX3RyYWNlYmFjayA9IHRhc2suX3NvdXJjZV90cmFjZWJhY2sKKyAgICAgICAgdGFzayA9IE5vbmUKKworICAgICAgICAjIG5vIG1vcmUgcmVmZXJlbmNlIHRvIGtpbGxfbWUoKSB0YXNrOiB0aGUgdGFzayBpcyBkZXN0cm95ZWQgYnkgdGhlIEdDCisgICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhc3luY2lvLlRhc2suYWxsX3Rhc2tzKGxvb3A9c2VsZi5sb29wKSwgc2V0KCkpCisKKyAgICAgICAgbW9ja19oYW5kbGVyLmFzc2VydF9jYWxsZWRfd2l0aChzZWxmLmxvb3AsIHsKKyAgICAgICAgICAgICdtZXNzYWdlJzogJ1Rhc2sgd2FzIGRlc3Ryb3llZCBidXQgaXQgaXMgcGVuZGluZyEnLAorICAgICAgICAgICAgJ3Rhc2snOiBtb2NrLkFOWSwKKyAgICAgICAgICAgICdzb3VyY2VfdHJhY2ViYWNrJzogc291cmNlX3RyYWNlYmFjaywKKyAgICAgICAgfSkKKyAgICAgICAgbW9ja19oYW5kbGVyLnJlc2V0X21vY2soKQorCisgICAgQG1vY2sucGF0Y2goJ2FzeW5jaW8uY29yb3V0aW5lcy5sb2dnZXInKQorICAgIGRlZiB0ZXN0X2Nvcm91dGluZV9uZXZlcl95aWVsZGVkKHNlbGYsIG1fbG9nKToKKyAgICAgICAgd2l0aCBzZXRfY29yb3V0aW5lX2RlYnVnKFRydWUpOgorICAgICAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgICAgICBkZWYgY29yb19ub29wKCk6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIHRiX2ZpbGVuYW1lID0gX19maWxlX18KKyAgICAgICAgdGJfbGluZW5vID0gc3lzLl9nZXRmcmFtZSgpLmZfbGluZW5vICsgMgorICAgICAgICAjIGNyZWF0ZSBhIGNvcm91dGluZSBvYmplY3QgYnV0IGRvbid0IHVzZSBpdAorICAgICAgICBjb3JvX25vb3AoKQorICAgICAgICBzdXBwb3J0LmdjX2NvbGxlY3QoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtX2xvZy5lcnJvci5jYWxsZWQpCisgICAgICAgIG1lc3NhZ2UgPSBtX2xvZy5lcnJvci5jYWxsX2FyZ3NbMF1bMF0KKyAgICAgICAgZnVuY19maWxlbmFtZSwgZnVuY19saW5lbm8gPSB0ZXN0X3V0aWxzLmdldF9mdW5jdGlvbl9zb3VyY2UoY29yb19ub29wKQorCisgICAgICAgIHJlZ2V4ID0gKHInXjxDb3JvV3JhcHBlciAlc1woP1wpPyAuKiBhdCAlczolcywgLio+ICcKKyAgICAgICAgICAgICAgICAgICAgcid3YXMgbmV2ZXIgeWllbGRlZCBmcm9tXG4nCisgICAgICAgICAgICAgICAgIHInQ29yb3V0aW5lIG9iamVjdCBjcmVhdGVkIGF0IFwobW9zdCByZWNlbnQgY2FsbCBsYXN0XCk6XG4nCisgICAgICAgICAgICAgICAgIHInLipcbicKKyAgICAgICAgICAgICAgICAgcicgIEZpbGUgIiVzIiwgbGluZSAlcywgaW4gdGVzdF9jb3JvdXRpbmVfbmV2ZXJfeWllbGRlZFxuJworICAgICAgICAgICAgICAgICByJyAgICBjb3JvX25vb3BcKFwpJCcKKyAgICAgICAgICAgICAgICAgJSAocmUuZXNjYXBlKGNvcm9fbm9vcC5fX3F1YWxuYW1lX18pLAorICAgICAgICAgICAgICAgICAgICByZS5lc2NhcGUoZnVuY19maWxlbmFtZSksIGZ1bmNfbGluZW5vLAorICAgICAgICAgICAgICAgICAgICByZS5lc2NhcGUodGJfZmlsZW5hbWUpLCB0Yl9saW5lbm8pKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXgobWVzc2FnZSwgcmUuY29tcGlsZShyZWdleCwgcmUuRE9UQUxMKSkKKworICAgIGRlZiB0ZXN0X3Rhc2tfc291cmNlX3RyYWNlYmFjayhzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLnNldF9kZWJ1ZyhUcnVlKQorCisgICAgICAgIHRhc2sgPSBhc3luY2lvLlRhc2soY29yb3V0aW5lX2Z1bmN0aW9uKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICBsaW5lbm8gPSBzeXMuX2dldGZyYW1lKCkuZl9saW5lbm8gLSAxCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh0YXNrLl9zb3VyY2VfdHJhY2ViYWNrLCBsaXN0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRhc2suX3NvdXJjZV90cmFjZWJhY2tbLTFdWzozXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoX19maWxlX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVubywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3RfdGFza19zb3VyY2VfdHJhY2ViYWNrJykpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUodGFzaykKKworICAgIGRlZiBfdGVzdF9jYW5jZWxfd2FpdF9mb3Ioc2VsZiwgdGltZW91dCk6CisgICAgICAgIGxvb3AgPSBhc3luY2lvLm5ld19ldmVudF9sb29wKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGxvb3AuY2xvc2UpCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBibG9ja2luZ19jb3JvdXRpbmUoKToKKyAgICAgICAgICAgIGZ1dCA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9bG9vcCkKKyAgICAgICAgICAgICMgQmxvY2s6IGZ1dCByZXN1bHQgaXMgbmV2ZXIgc2V0CisgICAgICAgICAgICB5aWVsZCBmcm9tIGZ1dAorCisgICAgICAgIHRhc2sgPSBsb29wLmNyZWF0ZV90YXNrKGJsb2NraW5nX2Nvcm91dGluZSgpKQorCisgICAgICAgIHdhaXQgPSBsb29wLmNyZWF0ZV90YXNrKGFzeW5jaW8ud2FpdF9mb3IodGFzaywgdGltZW91dCwgbG9vcD1sb29wKSkKKyAgICAgICAgbG9vcC5jYWxsX3Nvb24od2FpdC5jYW5jZWwpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYXN5bmNpby5DYW5jZWxsZWRFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbG9vcC5ydW5fdW50aWxfY29tcGxldGUsIHdhaXQpCisKKyAgICAgICAgIyBQeXRob24gaXNzdWUgIzIzMjE5OiBjYW5jZWxsaW5nIHRoZSB3YWl0IG11c3QgYWxzbyBjYW5jZWwgdGhlIHRhc2sKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRhc2suY2FuY2VsbGVkKCkpCisKKyAgICBkZWYgdGVzdF9jYW5jZWxfYmxvY2tpbmdfd2FpdF9mb3Ioc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfY2FuY2VsX3dhaXRfZm9yKE5vbmUpCisKKyAgICBkZWYgdGVzdF9jYW5jZWxfd2FpdF9mb3Ioc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfY2FuY2VsX3dhaXRfZm9yKDYwLjApCisKKworY2xhc3MgR2F0aGVyVGVzdHNCYXNlOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm9uZV9sb29wID0gc2VsZi5uZXdfdGVzdF9sb29wKCkKKyAgICAgICAgc2VsZi5vdGhlcl9sb29wID0gc2VsZi5uZXdfdGVzdF9sb29wKCkKKyAgICAgICAgc2VsZi5zZXRfZXZlbnRfbG9vcChzZWxmLm9uZV9sb29wLCBjbGVhbnVwPUZhbHNlKQorCisgICAgZGVmIF9ydW5fbG9vcChzZWxmLCBsb29wKToKKyAgICAgICAgd2hpbGUgbG9vcC5fcmVhZHk6CisgICAgICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KGxvb3ApCisKKyAgICBkZWYgX2NoZWNrX3N1Y2Nlc3Moc2VsZiwgKiprd2FyZ3MpOgorICAgICAgICBhLCBiLCBjID0gW2FzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5vbmVfbG9vcCkgZm9yIGkgaW4gcmFuZ2UoMyldCisgICAgICAgIGZ1dCA9IGFzeW5jaW8uZ2F0aGVyKCpzZWxmLndyYXBfZnV0dXJlcyhhLCBiLCBjKSwgKiprd2FyZ3MpCisgICAgICAgIGNiID0gdGVzdF91dGlscy5Nb2NrQ2FsbGJhY2soKQorICAgICAgICBmdXQuYWRkX2RvbmVfY2FsbGJhY2soY2IpCisgICAgICAgIGIuc2V0X3Jlc3VsdCgxKQorICAgICAgICBhLnNldF9yZXN1bHQoMikKKyAgICAgICAgc2VsZi5fcnVuX2xvb3Aoc2VsZi5vbmVfbG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYi5jYWxsZWQsIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZ1dC5kb25lKCkpCisgICAgICAgIGMuc2V0X3Jlc3VsdCgzKQorICAgICAgICBzZWxmLl9ydW5fbG9vcChzZWxmLm9uZV9sb29wKQorICAgICAgICBjYi5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aChmdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnV0LnJlc3VsdCgpLCBbMiwgMSwgM10pCisKKyAgICBkZWYgdGVzdF9zdWNjZXNzKHNlbGYpOgorICAgICAgICBzZWxmLl9jaGVja19zdWNjZXNzKCkKKyAgICAgICAgc2VsZi5fY2hlY2tfc3VjY2VzcyhyZXR1cm5fZXhjZXB0aW9ucz1GYWxzZSkKKworICAgIGRlZiB0ZXN0X3Jlc3VsdF9leGNlcHRpb25fc3VjY2VzcyhzZWxmKToKKyAgICAgICAgc2VsZi5fY2hlY2tfc3VjY2VzcyhyZXR1cm5fZXhjZXB0aW9ucz1UcnVlKQorCisgICAgZGVmIHRlc3Rfb25lX2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgYSwgYiwgYywgZCwgZSA9IFthc3luY2lvLkZ1dHVyZShsb29wPXNlbGYub25lX2xvb3ApIGZvciBpIGluIHJhbmdlKDUpXQorICAgICAgICBmdXQgPSBhc3luY2lvLmdhdGhlcigqc2VsZi53cmFwX2Z1dHVyZXMoYSwgYiwgYywgZCwgZSkpCisgICAgICAgIGNiID0gdGVzdF91dGlscy5Nb2NrQ2FsbGJhY2soKQorICAgICAgICBmdXQuYWRkX2RvbmVfY2FsbGJhY2soY2IpCisgICAgICAgIGV4YyA9IFplcm9EaXZpc2lvbkVycm9yKCkKKyAgICAgICAgYS5zZXRfcmVzdWx0KDEpCisgICAgICAgIGIuc2V0X2V4Y2VwdGlvbihleGMpCisgICAgICAgIHNlbGYuX3J1bl9sb29wKHNlbGYub25lX2xvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmdXQuZG9uZSgpKQorICAgICAgICBjYi5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aChmdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZnV0LmV4Y2VwdGlvbigpLCBleGMpCisgICAgICAgICMgRG9lcyBub3RoaW5nCisgICAgICAgIGMuc2V0X3Jlc3VsdCgzKQorICAgICAgICBkLmNhbmNlbCgpCisgICAgICAgIGUuc2V0X2V4Y2VwdGlvbihSdW50aW1lRXJyb3IoKSkKKyAgICAgICAgZS5leGNlcHRpb24oKQorCisgICAgZGVmIHRlc3RfcmV0dXJuX2V4Y2VwdGlvbnMoc2VsZik6CisgICAgICAgIGEsIGIsIGMsIGQgPSBbYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLm9uZV9sb29wKSBmb3IgaSBpbiByYW5nZSg0KV0KKyAgICAgICAgZnV0ID0gYXN5bmNpby5nYXRoZXIoKnNlbGYud3JhcF9mdXR1cmVzKGEsIGIsIGMsIGQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5fZXhjZXB0aW9ucz1UcnVlKQorICAgICAgICBjYiA9IHRlc3RfdXRpbHMuTW9ja0NhbGxiYWNrKCkKKyAgICAgICAgZnV0LmFkZF9kb25lX2NhbGxiYWNrKGNiKQorICAgICAgICBleGMgPSBaZXJvRGl2aXNpb25FcnJvcigpCisgICAgICAgIGV4YzIgPSBSdW50aW1lRXJyb3IoKQorICAgICAgICBiLnNldF9yZXN1bHQoMSkKKyAgICAgICAgYy5zZXRfZXhjZXB0aW9uKGV4YykKKyAgICAgICAgYS5zZXRfcmVzdWx0KDMpCisgICAgICAgIHNlbGYuX3J1bl9sb29wKHNlbGYub25lX2xvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZnV0LmRvbmUoKSkKKyAgICAgICAgZC5zZXRfZXhjZXB0aW9uKGV4YzIpCisgICAgICAgIHNlbGYuX3J1bl9sb29wKHNlbGYub25lX2xvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmdXQuZG9uZSgpKQorICAgICAgICBjYi5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aChmdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnV0LnJlc3VsdCgpLCBbMywgMSwgZXhjLCBleGMyXSkKKworICAgIGRlZiB0ZXN0X2Vudl92YXJfZGVidWcoc2VsZik6CisgICAgICAgIGFpb19wYXRoID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShhc3luY2lvLl9fZmlsZV9fKSkKKworICAgICAgICBjb2RlID0gJ1xuJy5qb2luKCgKKyAgICAgICAgICAgICdpbXBvcnQgYXN5bmNpby5jb3JvdXRpbmVzJywKKyAgICAgICAgICAgICdwcmludChhc3luY2lvLmNvcm91dGluZXMuX0RFQlVHKScpKQorCisgICAgICAgICMgVGVzdCB3aXRoIC1FIHRvIG5vdCBmYWlsIGlmIHRoZSB1bml0IHRlc3Qgd2FzIHJ1biB3aXRoCisgICAgICAgICMgUFlUSE9OQVNZTkNJT0RFQlVHIHNldCB0byBhIG5vbi1lbXB0eSBzdHJpbmcKKyAgICAgICAgc3RzLCBzdGRvdXQsIHN0ZGVyciA9IGFzc2VydF9weXRob25fb2soJy1FJywgJy1jJywgY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFlUSE9OUEFUSD1haW9fcGF0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQucnN0cmlwKCksIGInRmFsc2UnKQorCisgICAgICAgIHN0cywgc3Rkb3V0LCBzdGRlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCctYycsIGNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBZVEhPTkFTWU5DSU9ERUJVRz0nJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFlUSE9OUEFUSD1haW9fcGF0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQucnN0cmlwKCksIGInRmFsc2UnKQorCisgICAgICAgIHN0cywgc3Rkb3V0LCBzdGRlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCctYycsIGNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBZVEhPTkFTWU5DSU9ERUJVRz0nMScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBZVEhPTlBBVEg9YWlvX3BhdGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LnJzdHJpcCgpLCBiJ1RydWUnKQorCisgICAgICAgIHN0cywgc3Rkb3V0LCBzdGRlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCctRScsICctYycsIGNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBZVEhPTkFTWU5DSU9ERUJVRz0nMScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBZVEhPTlBBVEg9YWlvX3BhdGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LnJzdHJpcCgpLCBiJ0ZhbHNlJykKKworCitjbGFzcyBGdXR1cmVHYXRoZXJUZXN0cyhHYXRoZXJUZXN0c0Jhc2UsIHRlc3RfdXRpbHMuVGVzdENhc2UpOgorCisgICAgZGVmIHdyYXBfZnV0dXJlcyhzZWxmLCAqZnV0dXJlcyk6CisgICAgICAgIHJldHVybiBmdXR1cmVzCisKKyAgICBkZWYgX2NoZWNrX2VtcHR5X3NlcXVlbmNlKHNlbGYsIHNlcV9vcl9pdGVyKToKKyAgICAgICAgYXN5bmNpby5zZXRfZXZlbnRfbG9vcChzZWxmLm9uZV9sb29wKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoYXN5bmNpby5zZXRfZXZlbnRfbG9vcCwgTm9uZSkKKyAgICAgICAgZnV0ID0gYXN5bmNpby5nYXRoZXIoKnNlcV9vcl9pdGVyKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZnV0LCBhc3luY2lvLkZ1dHVyZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhmdXQuX2xvb3AsIHNlbGYub25lX2xvb3ApCisgICAgICAgIHNlbGYuX3J1bl9sb29wKHNlbGYub25lX2xvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmdXQuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZ1dC5yZXN1bHQoKSwgW10pCisgICAgICAgIGZ1dCA9IGFzeW5jaW8uZ2F0aGVyKCpzZXFfb3JfaXRlciwgbG9vcD1zZWxmLm90aGVyX2xvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZnV0Ll9sb29wLCBzZWxmLm90aGVyX2xvb3ApCisKKyAgICBkZWYgdGVzdF9jb25zdHJ1Y3Rvcl9lbXB0eV9zZXF1ZW5jZShzZWxmKToKKyAgICAgICAgc2VsZi5fY2hlY2tfZW1wdHlfc2VxdWVuY2UoW10pCisgICAgICAgIHNlbGYuX2NoZWNrX2VtcHR5X3NlcXVlbmNlKCgpKQorICAgICAgICBzZWxmLl9jaGVja19lbXB0eV9zZXF1ZW5jZShzZXQoKSkKKyAgICAgICAgc2VsZi5fY2hlY2tfZW1wdHlfc2VxdWVuY2UoaXRlcigiIikpCisKKyAgICBkZWYgdGVzdF9jb25zdHJ1Y3Rvcl9oZXRlcm9nZW5vdXNfZnV0dXJlcyhzZWxmKToKKyAgICAgICAgZnV0MSA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5vbmVfbG9vcCkKKyAgICAgICAgZnV0MiA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5vdGhlcl9sb29wKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgYXN5bmNpby5nYXRoZXIoZnV0MSwgZnV0MikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGFzeW5jaW8uZ2F0aGVyKGZ1dDEsIGxvb3A9c2VsZi5vdGhlcl9sb29wKQorCisgICAgZGVmIHRlc3RfY29uc3RydWN0b3JfaG9tb2dlbm91c19mdXR1cmVzKHNlbGYpOgorICAgICAgICBjaGlsZHJlbiA9IFthc3luY2lvLkZ1dHVyZShsb29wPXNlbGYub3RoZXJfbG9vcCkgZm9yIGkgaW4gcmFuZ2UoMyldCisgICAgICAgIGZ1dCA9IGFzeW5jaW8uZ2F0aGVyKCpjaGlsZHJlbikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhmdXQuX2xvb3AsIHNlbGYub3RoZXJfbG9vcCkKKyAgICAgICAgc2VsZi5fcnVuX2xvb3Aoc2VsZi5vdGhlcl9sb29wKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZ1dC5kb25lKCkpCisgICAgICAgIGZ1dCA9IGFzeW5jaW8uZ2F0aGVyKCpjaGlsZHJlbiwgbG9vcD1zZWxmLm90aGVyX2xvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZnV0Ll9sb29wLCBzZWxmLm90aGVyX2xvb3ApCisgICAgICAgIHNlbGYuX3J1bl9sb29wKHNlbGYub3RoZXJfbG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmdXQuZG9uZSgpKQorCisgICAgZGVmIHRlc3Rfb25lX2NhbmNlbGxhdGlvbihzZWxmKToKKyAgICAgICAgYSwgYiwgYywgZCwgZSA9IFthc3luY2lvLkZ1dHVyZShsb29wPXNlbGYub25lX2xvb3ApIGZvciBpIGluIHJhbmdlKDUpXQorICAgICAgICBmdXQgPSBhc3luY2lvLmdhdGhlcihhLCBiLCBjLCBkLCBlKQorICAgICAgICBjYiA9IHRlc3RfdXRpbHMuTW9ja0NhbGxiYWNrKCkKKyAgICAgICAgZnV0LmFkZF9kb25lX2NhbGxiYWNrKGNiKQorICAgICAgICBhLnNldF9yZXN1bHQoMSkKKyAgICAgICAgYi5jYW5jZWwoKQorICAgICAgICBzZWxmLl9ydW5fbG9vcChzZWxmLm9uZV9sb29wKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZnV0LmRvbmUoKSkKKyAgICAgICAgY2IuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoZnV0KQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZ1dC5jYW5jZWxsZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGZ1dC5leGNlcHRpb24oKSwgYXN5bmNpby5DYW5jZWxsZWRFcnJvcikKKyAgICAgICAgIyBEb2VzIG5vdGhpbmcKKyAgICAgICAgYy5zZXRfcmVzdWx0KDMpCisgICAgICAgIGQuY2FuY2VsKCkKKyAgICAgICAgZS5zZXRfZXhjZXB0aW9uKFJ1bnRpbWVFcnJvcigpKQorICAgICAgICBlLmV4Y2VwdGlvbigpCisKKyAgICBkZWYgdGVzdF9yZXN1bHRfZXhjZXB0aW9uX29uZV9jYW5jZWxsYXRpb24oc2VsZik6CisgICAgICAgIGEsIGIsIGMsIGQsIGUsIGYgPSBbYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLm9uZV9sb29wKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDYpXQorICAgICAgICBmdXQgPSBhc3luY2lvLmdhdGhlcihhLCBiLCBjLCBkLCBlLCBmLCByZXR1cm5fZXhjZXB0aW9ucz1UcnVlKQorICAgICAgICBjYiA9IHRlc3RfdXRpbHMuTW9ja0NhbGxiYWNrKCkKKyAgICAgICAgZnV0LmFkZF9kb25lX2NhbGxiYWNrKGNiKQorICAgICAgICBhLnNldF9yZXN1bHQoMSkKKyAgICAgICAgemRlID0gWmVyb0RpdmlzaW9uRXJyb3IoKQorICAgICAgICBiLnNldF9leGNlcHRpb24oemRlKQorICAgICAgICBjLmNhbmNlbCgpCisgICAgICAgIHNlbGYuX3J1bl9sb29wKHNlbGYub25lX2xvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZnV0LmRvbmUoKSkKKyAgICAgICAgZC5zZXRfcmVzdWx0KDMpCisgICAgICAgIGUuY2FuY2VsKCkKKyAgICAgICAgcnRlID0gUnVudGltZUVycm9yKCkKKyAgICAgICAgZi5zZXRfZXhjZXB0aW9uKHJ0ZSkKKyAgICAgICAgcmVzID0gc2VsZi5vbmVfbG9vcC5ydW5fdW50aWxfY29tcGxldGUoZnV0KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocmVzWzJdLCBhc3luY2lvLkNhbmNlbGxlZEVycm9yKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocmVzWzRdLCBhc3luY2lvLkNhbmNlbGxlZEVycm9yKQorICAgICAgICByZXNbMl0gPSByZXNbNF0gPSBOb25lCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCBbMSwgemRlLCBOb25lLCAzLCBOb25lLCBydGVdKQorICAgICAgICBjYi5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aChmdXQpCisKKworY2xhc3MgQ29yb3V0aW5lR2F0aGVyVGVzdHMoR2F0aGVyVGVzdHNCYXNlLCB0ZXN0X3V0aWxzLlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc3VwZXIoKS5zZXRVcCgpCisgICAgICAgIGFzeW5jaW8uc2V0X2V2ZW50X2xvb3Aoc2VsZi5vbmVfbG9vcCkKKworICAgIGRlZiB3cmFwX2Z1dHVyZXMoc2VsZiwgKmZ1dHVyZXMpOgorICAgICAgICBjb3JvcyA9IFtdCisgICAgICAgIGZvciBmdXQgaW4gZnV0dXJlczoKKyAgICAgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICAgICAgZGVmIGNvcm8oZnV0PWZ1dCk6CisgICAgICAgICAgICAgICAgcmV0dXJuICh5aWVsZCBmcm9tIGZ1dCkKKyAgICAgICAgICAgIGNvcm9zLmFwcGVuZChjb3JvKCkpCisgICAgICAgIHJldHVybiBjb3JvcworCisgICAgZGVmIHRlc3RfY29uc3RydWN0b3JfbG9vcF9zZWxlY3Rpb24oc2VsZik6CisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgY29ybygpOgorICAgICAgICAgICAgcmV0dXJuICdhYmMnCisgICAgICAgIGdlbjEgPSBjb3JvKCkKKyAgICAgICAgZ2VuMiA9IGNvcm8oKQorICAgICAgICBmdXQgPSBhc3luY2lvLmdhdGhlcihnZW4xLCBnZW4yKQorICAgICAgICBzZWxmLmFzc2VydElzKGZ1dC5fbG9vcCwgc2VsZi5vbmVfbG9vcCkKKyAgICAgICAgc2VsZi5vbmVfbG9vcC5ydW5fdW50aWxfY29tcGxldGUoZnV0KQorCisgICAgICAgIHNlbGYuc2V0X2V2ZW50X2xvb3Aoc2VsZi5vdGhlcl9sb29wLCBjbGVhbnVwPUZhbHNlKQorICAgICAgICBnZW4zID0gY29ybygpCisgICAgICAgIGdlbjQgPSBjb3JvKCkKKyAgICAgICAgZnV0MiA9IGFzeW5jaW8uZ2F0aGVyKGdlbjMsIGdlbjQsIGxvb3A9c2VsZi5vdGhlcl9sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzKGZ1dDIuX2xvb3AsIHNlbGYub3RoZXJfbG9vcCkKKyAgICAgICAgc2VsZi5vdGhlcl9sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmdXQyKQorCisgICAgZGVmIHRlc3RfZHVwbGljYXRlX2Nvcm91dGluZXMoc2VsZik6CisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgY29ybyhzKToKKyAgICAgICAgICAgIHJldHVybiBzCisgICAgICAgIGMgPSBjb3JvKCdhYmMnKQorICAgICAgICBmdXQgPSBhc3luY2lvLmdhdGhlcihjLCBjLCBjb3JvKCdkZWYnKSwgYywgbG9vcD1zZWxmLm9uZV9sb29wKQorICAgICAgICBzZWxmLl9ydW5fbG9vcChzZWxmLm9uZV9sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZ1dC5yZXN1bHQoKSwgWydhYmMnLCAnYWJjJywgJ2RlZicsICdhYmMnXSkKKworICAgIGRlZiB0ZXN0X2NhbmNlbGxhdGlvbl9icm9hZGNhc3Qoc2VsZik6CisgICAgICAgICMgQ2FuY2VsbGluZyBvdXRlcigpIGNhbmNlbHMgYWxsIGNoaWxkcmVuLgorICAgICAgICBwcm9vZiA9IDAKKyAgICAgICAgd2FpdGVyID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLm9uZV9sb29wKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgaW5uZXIoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIHByb29mCisgICAgICAgICAgICB5aWVsZCBmcm9tIHdhaXRlcgorICAgICAgICAgICAgcHJvb2YgKz0gMQorCisgICAgICAgIGNoaWxkMSA9IGFzeW5jaW8uZW5zdXJlX2Z1dHVyZShpbm5lcigpLCBsb29wPXNlbGYub25lX2xvb3ApCisgICAgICAgIGNoaWxkMiA9IGFzeW5jaW8uZW5zdXJlX2Z1dHVyZShpbm5lcigpLCBsb29wPXNlbGYub25lX2xvb3ApCisgICAgICAgIGdhdGhlcmVyID0gTm9uZQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgb3V0ZXIoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIHByb29mLCBnYXRoZXJlcgorICAgICAgICAgICAgZ2F0aGVyZXIgPSBhc3luY2lvLmdhdGhlcihjaGlsZDEsIGNoaWxkMiwgbG9vcD1zZWxmLm9uZV9sb29wKQorICAgICAgICAgICAgeWllbGQgZnJvbSBnYXRoZXJlcgorICAgICAgICAgICAgcHJvb2YgKz0gMTAwCisKKyAgICAgICAgZiA9IGFzeW5jaW8uZW5zdXJlX2Z1dHVyZShvdXRlcigpLCBsb29wPXNlbGYub25lX2xvb3ApCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5vbmVfbG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuY2FuY2VsKCkpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoYXN5bmNpby5DYW5jZWxsZWRFcnJvcik6CisgICAgICAgICAgICBzZWxmLm9uZV9sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGdhdGhlcmVyLmNhbmNlbCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUod2FpdGVyLmNhbmNlbGxlZCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY2hpbGQxLmNhbmNlbGxlZCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY2hpbGQyLmNhbmNlbGxlZCgpKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYub25lX2xvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvb2YsIDApCisKKyAgICBkZWYgdGVzdF9leGNlcHRpb25fbWFya2luZyhzZWxmKToKKyAgICAgICAgIyBUZXN0IGZvciB0aGUgZmlyc3QgbGluZSBtYXJrZWQgIk1hcmsgZXhjZXB0aW9uIHJldHJpZXZlZC4iCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBpbm5lcihmKToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gZgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdzaG91bGQgbm90IGJlIGlnbm9yZWQnKQorCisgICAgICAgIGEgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYub25lX2xvb3ApCisgICAgICAgIGIgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYub25lX2xvb3ApCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBvdXRlcigpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBhc3luY2lvLmdhdGhlcihpbm5lcihhKSwgaW5uZXIoYiksIGxvb3A9c2VsZi5vbmVfbG9vcCkKKworICAgICAgICBmID0gYXN5bmNpby5lbnN1cmVfZnV0dXJlKG91dGVyKCksIGxvb3A9c2VsZi5vbmVfbG9vcCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLm9uZV9sb29wKQorICAgICAgICBhLnNldF9yZXN1bHQoTm9uZSkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLm9uZV9sb29wKQorICAgICAgICBiLnNldF9yZXN1bHQoTm9uZSkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLm9uZV9sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZi5leGNlcHRpb24oKSwgUnVudGltZUVycm9yKQorCisKK2NsYXNzIFJ1bkNvcm91dGluZVRocmVhZHNhZmVUZXN0cyh0ZXN0X3V0aWxzLlRlc3RDYXNlKToKKyAgICAiIiJUZXN0IGNhc2UgZm9yIGFzeW5jaW8ucnVuX2Nvcm91dGluZV90aHJlYWRzYWZlLiIiIgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AgPSBhc3luY2lvLm5ld19ldmVudF9sb29wKCkKKyAgICAgICAgc2VsZi5zZXRfZXZlbnRfbG9vcChzZWxmLmxvb3ApICMgV2lsbCBjbGVhbnVwIHByb3Blcmx5CisKKyAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICBkZWYgYWRkKHNlbGYsIGEsIGIsIGZhaWw9RmFsc2UsIGNhbmNlbD1GYWxzZSk6CisgICAgICAgICIiIldhaXQgMC4wNSBzZWNvbmQgYW5kIHJldHVybiBhICsgYi4iIiIKKyAgICAgICAgeWllbGQgZnJvbSBhc3luY2lvLnNsZWVwKDAuMDUsIGxvb3A9c2VsZi5sb29wKQorICAgICAgICBpZiBmYWlsOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJGYWlsISIpCisgICAgICAgIGlmIGNhbmNlbDoKKyAgICAgICAgICAgIGFzeW5jaW8udGFza3MuVGFzay5jdXJyZW50X3Rhc2soc2VsZi5sb29wKS5jYW5jZWwoKQorICAgICAgICAgICAgeWllbGQKKyAgICAgICAgcmV0dXJuIGEgKyBiCisKKyAgICBkZWYgdGFyZ2V0KHNlbGYsIGZhaWw9RmFsc2UsIGNhbmNlbD1GYWxzZSwgdGltZW91dD1Ob25lLAorICAgICAgICAgICAgICAgYWR2YW5jZV9jb3JvPUZhbHNlKToKKyAgICAgICAgIiIiUnVuIGFkZCBjb3JvdXRpbmUgaW4gdGhlIGV2ZW50IGxvb3AuIiIiCisgICAgICAgIGNvcm8gPSBzZWxmLmFkZCgxLCAyLCBmYWlsPWZhaWwsIGNhbmNlbD1jYW5jZWwpCisgICAgICAgIGZ1dHVyZSA9IGFzeW5jaW8ucnVuX2Nvcm91dGluZV90aHJlYWRzYWZlKGNvcm8sIHNlbGYubG9vcCkKKyAgICAgICAgaWYgYWR2YW5jZV9jb3JvOgorICAgICAgICAgICAgIyB0aGlzIGlzIGZvciB0ZXN0X3J1bl9jb3JvdXRpbmVfdGhyZWFkc2FmZV90YXNrX2ZhY3RvcnlfZXhjZXB0aW9uOworICAgICAgICAgICAgIyBvdGhlcndpc2UgaXQgc3BpbGxzIGVycm9ycyBhbmQgYnJlYWtzICoqb3RoZXIqKiB1bml0dGVzdHMsIHNpbmNlCisgICAgICAgICAgICAjICd0YXJnZXQnIGlzIGludGVyYWN0aW5nIHdpdGggdGhyZWFkcy4KKworICAgICAgICAgICAgIyBXaXRoIHRoaXMgY2FsbCwgYGNvcm9gIHdpbGwgYmUgYWR2YW5jZWQsIHNvIHRoYXQKKyAgICAgICAgICAgICMgQ29yb1dyYXBwZXIuX19kZWxfXyB3b24ndCBkbyBhbnl0aGluZyB3aGVuIGFzeW5jaW8gdGVzdHMgcnVuCisgICAgICAgICAgICAjIGluIGRlYnVnIG1vZGUuCisgICAgICAgICAgICBzZWxmLmxvb3AuY2FsbF9zb29uX3RocmVhZHNhZmUoY29yby5zZW5kLCBOb25lKQorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gZnV0dXJlLnJlc3VsdCh0aW1lb3V0KQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZnV0dXJlLmRvbmUoKSBvciBmdXR1cmUuY2FuY2VsKCkKKworICAgIGRlZiB0ZXN0X3J1bl9jb3JvdXRpbmVfdGhyZWFkc2FmZShzZWxmKToKKyAgICAgICAgIiIiVGVzdCBjb3JvdXRpbmUgc3VibWlzc2lvbiBmcm9tIGEgdGhyZWFkIHRvIGFuIGV2ZW50IGxvb3AuIiIiCisgICAgICAgIGZ1dHVyZSA9IHNlbGYubG9vcC5ydW5faW5fZXhlY3V0b3IoTm9uZSwgc2VsZi50YXJnZXQpCisgICAgICAgIHJlc3VsdCA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZnV0dXJlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgMykKKworICAgIGRlZiB0ZXN0X3J1bl9jb3JvdXRpbmVfdGhyZWFkc2FmZV93aXRoX2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgIiIiVGVzdCBjb3JvdXRpbmUgc3VibWlzc2lvbiBmcm9tIGEgdGhyZWFkIHRvIGFuIGV2ZW50IGxvb3AKKyAgICAgICAgd2hlbiBhbiBleGNlcHRpb24gaXMgcmFpc2VkLiIiIgorICAgICAgICBmdXR1cmUgPSBzZWxmLmxvb3AucnVuX2luX2V4ZWN1dG9yKE5vbmUsIHNlbGYudGFyZ2V0LCBUcnVlKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvcikgYXMgZXhjX2NvbnRleHQ6CisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGZ1dHVyZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiRmFpbCEiLCBleGNfY29udGV4dC5leGNlcHRpb24uYXJncykKKworICAgIGRlZiB0ZXN0X3J1bl9jb3JvdXRpbmVfdGhyZWFkc2FmZV93aXRoX3RpbWVvdXQoc2VsZik6CisgICAgICAgICIiIlRlc3QgY29yb3V0aW5lIHN1Ym1pc3Npb24gZnJvbSBhIHRocmVhZCB0byBhbiBldmVudCBsb29wCisgICAgICAgIHdoZW4gYSB0aW1lb3V0IGlzIHJhaXNlZC4iIiIKKyAgICAgICAgY2FsbGJhY2sgPSBsYW1iZGE6IHNlbGYudGFyZ2V0KHRpbWVvdXQ9MCkKKyAgICAgICAgZnV0dXJlID0gc2VsZi5sb29wLnJ1bl9pbl9leGVjdXRvcihOb25lLCBjYWxsYmFjaykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhhc3luY2lvLlRpbWVvdXRFcnJvcik6CisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGZ1dHVyZSkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgICMgQ2hlY2sgdGhhdCB0aGVyZSdzIG5vIHBlbmRpbmcgdGFzayAoYWRkIGhhcyBiZWVuIGNhbmNlbGxlZCkKKyAgICAgICAgZm9yIHRhc2sgaW4gYXN5bmNpby5UYXNrLmFsbF90YXNrcyhzZWxmLmxvb3ApOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRhc2suZG9uZSgpKQorCisgICAgZGVmIHRlc3RfcnVuX2Nvcm91dGluZV90aHJlYWRzYWZlX3Rhc2tfY2FuY2VsbGVkKHNlbGYpOgorICAgICAgICAiIiJUZXN0IGNvcm91dGluZSBzdWJtaXNzaW9uIGZyb20gYSB0cmVhZCB0byBhbiBldmVudCBsb29wCisgICAgICAgIHdoZW4gdGhlIHRhc2sgaXMgY2FuY2VsbGVkLiIiIgorICAgICAgICBjYWxsYmFjayA9IGxhbWJkYTogc2VsZi50YXJnZXQoY2FuY2VsPVRydWUpCisgICAgICAgIGZ1dHVyZSA9IHNlbGYubG9vcC5ydW5faW5fZXhlY3V0b3IoTm9uZSwgY2FsbGJhY2spCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoYXN5bmNpby5DYW5jZWxsZWRFcnJvcik6CisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGZ1dHVyZSkKKworICAgIGRlZiB0ZXN0X3J1bl9jb3JvdXRpbmVfdGhyZWFkc2FmZV90YXNrX2ZhY3RvcnlfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICAiIiJUZXN0IGNvcm91dGluZSBzdWJtaXNzaW9uIGZyb20gYSB0cmVhZCB0byBhbiBldmVudCBsb29wCisgICAgICAgIHdoZW4gdGhlIHRhc2sgZmFjdG9yeSByYWlzZSBhbiBleGNlcHRpb24uIiIiCisgICAgICAgICMgU2NoZWR1bGUgdGhlIHRhcmdldAorICAgICAgICBmdXR1cmUgPSBzZWxmLmxvb3AucnVuX2luX2V4ZWN1dG9yKAorICAgICAgICAgICAgTm9uZSwgbGFtYmRhOiBzZWxmLnRhcmdldChhZHZhbmNlX2Nvcm89VHJ1ZSkpCisgICAgICAgICMgU2V0IGNvcnJ1cHRlZCB0YXNrIGZhY3RvcnkKKyAgICAgICAgc2VsZi5sb29wLnNldF90YXNrX2ZhY3RvcnkobGFtYmRhIGxvb3AsIGNvcm86IHdyb25nX25hbWUpCisgICAgICAgICMgU2V0IGV4Y2VwdGlvbiBoYW5kbGVyCisgICAgICAgIGNhbGxiYWNrID0gdGVzdF91dGlscy5Nb2NrQ2FsbGJhY2soKQorICAgICAgICBzZWxmLmxvb3Auc2V0X2V4Y2VwdGlvbl9oYW5kbGVyKGNhbGxiYWNrKQorICAgICAgICAjIFJ1biBldmVudCBsb29wCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoTmFtZUVycm9yKSBhcyBleGNfY29udGV4dDoKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZnV0dXJlKQorICAgICAgICAjIENoZWNrIGV4Y2VwdGlvbnMKKyAgICAgICAgc2VsZi5hc3NlcnRJbignd3JvbmdfbmFtZScsIGV4Y19jb250ZXh0LmV4Y2VwdGlvbi5hcmdzWzBdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjYWxsYmFjay5jYWxsX2FyZ3NfbGlzdCksIDEpCisgICAgICAgIChsb29wLCBjb250ZXh0KSwga3dhcmdzID0gY2FsbGJhY2suY2FsbF9hcmdzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29udGV4dFsnZXhjZXB0aW9uJ10sIGV4Y19jb250ZXh0LmV4Y2VwdGlvbikKKworCitjbGFzcyBTbGVlcFRlc3RzKHRlc3RfdXRpbHMuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5sb29wID0gYXN5bmNpby5uZXdfZXZlbnRfbG9vcCgpCisgICAgICAgIGFzeW5jaW8uc2V0X2V2ZW50X2xvb3AoTm9uZSkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLmNsb3NlKCkKKyAgICAgICAgc2VsZi5sb29wID0gTm9uZQorCisgICAgZGVmIHRlc3Rfc2xlZXBfemVybyhzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gMAorCisgICAgICAgIGRlZiBpbmNfcmVzdWx0KG51bSk6CisgICAgICAgICAgICBub25sb2NhbCByZXN1bHQKKyAgICAgICAgICAgIHJlc3VsdCArPSBudW0KKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGNvcm8oKToKKyAgICAgICAgICAgIHNlbGYubG9vcC5jYWxsX3Nvb24oaW5jX3Jlc3VsdCwgMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCAwKQorICAgICAgICAgICAgbnVtID0geWllbGQgZnJvbSBhc3luY2lvLnNsZWVwKDAsIGxvb3A9c2VsZi5sb29wLCByZXN1bHQ9MTApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgMSkgIyBpbmMnZWQgYnkgY2FsbF9zb29uCisgICAgICAgICAgICBpbmNfcmVzdWx0KG51bSkgIyBudW0gc2hvdWxkIGJlIDExCisKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb3JvKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCAxMSkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3RfdHJhbnNwb3J0cy5weSBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X3RyYW5zcG9ydHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I2ZTNkNgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X3RyYW5zcG9ydHMucHkKQEAgLTAsMCArMSw5MSBAQAorIiIiVGVzdHMgZm9yIHRyYW5zcG9ydHMucHkuIiIiCisKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB1bml0dGVzdCBpbXBvcnQgbW9jaworCitpbXBvcnQgYXN5bmNpbworZnJvbSBhc3luY2lvIGltcG9ydCB0cmFuc3BvcnRzCisKKworY2xhc3MgVHJhbnNwb3J0VGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfY3Rvcl9leHRyYV9pc19ub25lKHNlbGYpOgorICAgICAgICB0cmFuc3BvcnQgPSBhc3luY2lvLlRyYW5zcG9ydCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJhbnNwb3J0Ll9leHRyYSwge30pCisKKyAgICBkZWYgdGVzdF9nZXRfZXh0cmFfaW5mbyhzZWxmKToKKyAgICAgICAgdHJhbnNwb3J0ID0gYXN5bmNpby5UcmFuc3BvcnQoeydleHRyYSc6ICdpbmZvJ30pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2luZm8nLCB0cmFuc3BvcnQuZ2V0X2V4dHJhX2luZm8oJ2V4dHJhJykpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHRyYW5zcG9ydC5nZXRfZXh0cmFfaW5mbygndW5rbm93bicpKQorCisgICAgICAgIGRlZmF1bHQgPSBvYmplY3QoKQorICAgICAgICBzZWxmLmFzc2VydElzKGRlZmF1bHQsIHRyYW5zcG9ydC5nZXRfZXh0cmFfaW5mbygndW5rbm93bicsIGRlZmF1bHQpKQorCisgICAgZGVmIHRlc3Rfd3JpdGVsaW5lcyhzZWxmKToKKyAgICAgICAgdHJhbnNwb3J0ID0gYXN5bmNpby5UcmFuc3BvcnQoKQorICAgICAgICB0cmFuc3BvcnQud3JpdGUgPSBtb2NrLk1vY2soKQorCisgICAgICAgIHRyYW5zcG9ydC53cml0ZWxpbmVzKFtiJ2xpbmUxJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVhcnJheShiJ2xpbmUyJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1vcnl2aWV3KGInbGluZTMnKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgdHJhbnNwb3J0LndyaXRlLmNhbGxfY291bnQpCisgICAgICAgIHRyYW5zcG9ydC53cml0ZS5hc3NlcnRfY2FsbGVkX3dpdGgoYidsaW5lMWxpbmUybGluZTMnKQorCisgICAgZGVmIHRlc3Rfbm90X2ltcGxlbWVudGVkKHNlbGYpOgorICAgICAgICB0cmFuc3BvcnQgPSBhc3luY2lvLlRyYW5zcG9ydCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNwb3J0LnNldF93cml0ZV9idWZmZXJfbGltaXRzKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCB0cmFuc3BvcnQuZ2V0X3dyaXRlX2J1ZmZlcl9zaXplKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCB0cmFuc3BvcnQud3JpdGUsICdkYXRhJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgdHJhbnNwb3J0LndyaXRlX2VvZikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgdHJhbnNwb3J0LmNhbl93cml0ZV9lb2YpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIHRyYW5zcG9ydC5wYXVzZV9yZWFkaW5nKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCB0cmFuc3BvcnQucmVzdW1lX3JlYWRpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIHRyYW5zcG9ydC5jbG9zZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgdHJhbnNwb3J0LmFib3J0KQorCisgICAgZGVmIHRlc3RfZGdyYW1fbm90X2ltcGxlbWVudGVkKHNlbGYpOgorICAgICAgICB0cmFuc3BvcnQgPSBhc3luY2lvLkRhdGFncmFtVHJhbnNwb3J0KCkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCB0cmFuc3BvcnQuc2VuZHRvLCAnZGF0YScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIHRyYW5zcG9ydC5hYm9ydCkKKworICAgIGRlZiB0ZXN0X3N1YnByb2Nlc3NfdHJhbnNwb3J0X25vdF9pbXBsZW1lbnRlZChzZWxmKToKKyAgICAgICAgdHJhbnNwb3J0ID0gYXN5bmNpby5TdWJwcm9jZXNzVHJhbnNwb3J0KCkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCB0cmFuc3BvcnQuZ2V0X3BpZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgdHJhbnNwb3J0LmdldF9yZXR1cm5jb2RlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCB0cmFuc3BvcnQuZ2V0X3BpcGVfdHJhbnNwb3J0LCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCB0cmFuc3BvcnQuc2VuZF9zaWduYWwsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIHRyYW5zcG9ydC50ZXJtaW5hdGUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIHRyYW5zcG9ydC5raWxsKQorCisgICAgZGVmIHRlc3RfZmxvd2NvbnRyb2xfbWl4aW5fc2V0X3dyaXRlX2xpbWl0cyhzZWxmKToKKworICAgICAgICBjbGFzcyBNeVRyYW5zcG9ydCh0cmFuc3BvcnRzLl9GbG93Q29udHJvbE1peGluLAorICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc3BvcnRzLlRyYW5zcG9ydCk6CisKKyAgICAgICAgICAgIGRlZiBnZXRfd3JpdGVfYnVmZmVyX3NpemUoc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIDUxMgorCisgICAgICAgIGxvb3AgPSBtb2NrLk1vY2soKQorICAgICAgICB0cmFuc3BvcnQgPSBNeVRyYW5zcG9ydChsb29wPWxvb3ApCisgICAgICAgIHRyYW5zcG9ydC5fcHJvdG9jb2wgPSBtb2NrLk1vY2soKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHJhbnNwb3J0Ll9wcm90b2NvbF9wYXVzZWQpCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsICdoaWdoLiptdXN0IGJlID49IGxvdycpOgorICAgICAgICAgICAgdHJhbnNwb3J0LnNldF93cml0ZV9idWZmZXJfbGltaXRzKGhpZ2g9MCwgbG93PTEpCisKKyAgICAgICAgdHJhbnNwb3J0LnNldF93cml0ZV9idWZmZXJfbGltaXRzKGhpZ2g9MTAyNCwgbG93PTEyOCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0cmFuc3BvcnQuX3Byb3RvY29sX3BhdXNlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmFuc3BvcnQuZ2V0X3dyaXRlX2J1ZmZlcl9saW1pdHMoKSwgKDEyOCwgMTAyNCkpCisKKyAgICAgICAgdHJhbnNwb3J0LnNldF93cml0ZV9idWZmZXJfbGltaXRzKGhpZ2g9MjU2LCBsb3c9MTI4KQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHJhbnNwb3J0Ll9wcm90b2NvbF9wYXVzZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJhbnNwb3J0LmdldF93cml0ZV9idWZmZXJfbGltaXRzKCksICgxMjgsIDI1NikpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X3VuaXhfZXZlbnRzLnB5IGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3RfdW5peF9ldmVudHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjJkYzY4OAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X3VuaXhfZXZlbnRzLnB5CkBAIC0wLDAgKzEsMTU2MSBAQAorIiIiVGVzdHMgZm9yIHVuaXhfZXZlbnRzLnB5LiIiIgorCitpbXBvcnQgY29sbGVjdGlvbnMKK2ltcG9ydCBlcnJubworaW1wb3J0IGlvCitpbXBvcnQgb3MKK2ltcG9ydCBzaWduYWwKK2ltcG9ydCBzb2NrZXQKK2ltcG9ydCBzdGF0CitpbXBvcnQgc3lzCitpbXBvcnQgdGVtcGZpbGUKK2ltcG9ydCB0aHJlYWRpbmcKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB1bml0dGVzdCBpbXBvcnQgbW9jaworCitpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKKyAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgnVU5JWCBvbmx5JykKKworCitpbXBvcnQgYXN5bmNpbworZnJvbSBhc3luY2lvIGltcG9ydCBsb2cKK2Zyb20gYXN5bmNpbyBpbXBvcnQgdGVzdF91dGlscworZnJvbSBhc3luY2lvIGltcG9ydCB1bml4X2V2ZW50cworCisKK01PQ0tfQU5ZID0gbW9jay5BTlkKKworCitkZWYgY2xvc2VfcGlwZV90cmFuc3BvcnQodHJhbnNwb3J0KToKKyAgICAjIERvbid0IGNhbGwgdHJhbnNwb3J0LmNsb3NlKCkgYmVjYXVzZSB0aGUgZXZlbnQgbG9vcCBhbmQgdGhlIHNlbGVjdG9yCisgICAgIyBhcmUgbW9ja2VkCisgICAgaWYgdHJhbnNwb3J0Ll9waXBlIGlzIE5vbmU6CisgICAgICAgIHJldHVybgorICAgIHRyYW5zcG9ydC5fcGlwZS5jbG9zZSgpCisgICAgdHJhbnNwb3J0Ll9waXBlID0gTm9uZQorCisKK0B1bml0dGVzdC5za2lwVW5sZXNzKHNpZ25hbCwgJ1NpZ25hbHMgYXJlIG5vdCBzdXBwb3J0ZWQnKQorY2xhc3MgU2VsZWN0b3JFdmVudExvb3BTaWduYWxUZXN0cyh0ZXN0X3V0aWxzLlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5sb29wID0gYXN5bmNpby5TZWxlY3RvckV2ZW50TG9vcCgpCisgICAgICAgIHNlbGYuc2V0X2V2ZW50X2xvb3Aoc2VsZi5sb29wKQorCisgICAgZGVmIHRlc3RfY2hlY2tfc2lnbmFsKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFR5cGVFcnJvciwgc2VsZi5sb29wLl9jaGVja19zaWduYWwsICcxJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBWYWx1ZUVycm9yLCBzZWxmLmxvb3AuX2NoZWNrX3NpZ25hbCwgc2lnbmFsLk5TSUcgKyAxKQorCisgICAgZGVmIHRlc3RfaGFuZGxlX3NpZ25hbF9ub19oYW5kbGVyKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuX2hhbmRsZV9zaWduYWwoc2lnbmFsLk5TSUcgKyAxKQorCisgICAgZGVmIHRlc3RfaGFuZGxlX3NpZ25hbF9jYW5jZWxsZWRfaGFuZGxlcihzZWxmKToKKyAgICAgICAgaCA9IGFzeW5jaW8uSGFuZGxlKG1vY2suTW9jaygpLCAoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3A9bW9jay5Nb2NrKCkpCisgICAgICAgIGguY2FuY2VsKCkKKyAgICAgICAgc2VsZi5sb29wLl9zaWduYWxfaGFuZGxlcnNbc2lnbmFsLk5TSUcgKyAxXSA9IGgKKyAgICAgICAgc2VsZi5sb29wLnJlbW92ZV9zaWduYWxfaGFuZGxlciA9IG1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5faGFuZGxlX3NpZ25hbChzaWduYWwuTlNJRyArIDEpCisgICAgICAgIHNlbGYubG9vcC5yZW1vdmVfc2lnbmFsX2hhbmRsZXIuYXNzZXJ0X2NhbGxlZF93aXRoKHNpZ25hbC5OU0lHICsgMSkKKworICAgIEBtb2NrLnBhdGNoKCdhc3luY2lvLnVuaXhfZXZlbnRzLnNpZ25hbCcpCisgICAgZGVmIHRlc3RfYWRkX3NpZ25hbF9oYW5kbGVyX3NldHVwX2Vycm9yKHNlbGYsIG1fc2lnbmFsKToKKyAgICAgICAgbV9zaWduYWwuTlNJRyA9IHNpZ25hbC5OU0lHCisgICAgICAgIG1fc2lnbmFsLnNldF93YWtldXBfZmQuc2lkZV9lZmZlY3QgPSBWYWx1ZUVycm9yCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBSdW50aW1lRXJyb3IsCisgICAgICAgICAgICBzZWxmLmxvb3AuYWRkX3NpZ25hbF9oYW5kbGVyLAorICAgICAgICAgICAgc2lnbmFsLlNJR0lOVCwgbGFtYmRhOiBUcnVlKQorCisgICAgQG1vY2sucGF0Y2goJ2FzeW5jaW8udW5peF9ldmVudHMuc2lnbmFsJykKKyAgICBkZWYgdGVzdF9hZGRfc2lnbmFsX2hhbmRsZXJfY29yb3V0aW5lX2Vycm9yKHNlbGYsIG1fc2lnbmFsKToKKyAgICAgICAgbV9zaWduYWwuTlNJRyA9IHNpZ25hbC5OU0lHCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBzaW1wbGVfY29yb3V0aW5lKCk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIFtdCisKKyAgICAgICAgIyBjYWxsYmFjayBtdXN0IG5vdCBiZSBhIGNvcm91dGluZSBmdW5jdGlvbgorICAgICAgICBjb3JvX2Z1bmMgPSBzaW1wbGVfY29yb3V0aW5lCisgICAgICAgIGNvcm9fb2JqID0gY29yb19mdW5jKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGNvcm9fb2JqLmNsb3NlKQorICAgICAgICBmb3IgZnVuYyBpbiAoY29yb19mdW5jLCBjb3JvX29iaik6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KAorICAgICAgICAgICAgICAgIFR5cGVFcnJvciwgJ2Nvcm91dGluZXMgY2Fubm90IGJlIHVzZWQgd2l0aCBhZGRfc2lnbmFsX2hhbmRsZXInLAorICAgICAgICAgICAgICAgIHNlbGYubG9vcC5hZGRfc2lnbmFsX2hhbmRsZXIsCisgICAgICAgICAgICAgICAgc2lnbmFsLlNJR0lOVCwgZnVuYykKKworICAgIEBtb2NrLnBhdGNoKCdhc3luY2lvLnVuaXhfZXZlbnRzLnNpZ25hbCcpCisgICAgZGVmIHRlc3RfYWRkX3NpZ25hbF9oYW5kbGVyKHNlbGYsIG1fc2lnbmFsKToKKyAgICAgICAgbV9zaWduYWwuTlNJRyA9IHNpZ25hbC5OU0lHCisKKyAgICAgICAgY2IgPSBsYW1iZGE6IFRydWUKKyAgICAgICAgc2VsZi5sb29wLmFkZF9zaWduYWxfaGFuZGxlcihzaWduYWwuU0lHSFVQLCBjYikKKyAgICAgICAgaCA9IHNlbGYubG9vcC5fc2lnbmFsX2hhbmRsZXJzLmdldChzaWduYWwuU0lHSFVQKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoaCwgYXN5bmNpby5IYW5kbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5fY2FsbGJhY2ssIGNiKQorCisgICAgQG1vY2sucGF0Y2goJ2FzeW5jaW8udW5peF9ldmVudHMuc2lnbmFsJykKKyAgICBkZWYgdGVzdF9hZGRfc2lnbmFsX2hhbmRsZXJfaW5zdGFsbF9lcnJvcihzZWxmLCBtX3NpZ25hbCk6CisgICAgICAgIG1fc2lnbmFsLk5TSUcgPSBzaWduYWwuTlNJRworCisgICAgICAgIGRlZiBzZXRfd2FrZXVwX2ZkKGZkKToKKyAgICAgICAgICAgIGlmIGZkID09IC0xOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoKQorICAgICAgICBtX3NpZ25hbC5zZXRfd2FrZXVwX2ZkID0gc2V0X3dha2V1cF9mZAorCisgICAgICAgIGNsYXNzIEVycihPU0Vycm9yKToKKyAgICAgICAgICAgIGVycm5vID0gZXJybm8uRUZBVUxUCisgICAgICAgIG1fc2lnbmFsLnNpZ25hbC5zaWRlX2VmZmVjdCA9IEVycgorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgRXJyLAorICAgICAgICAgICAgc2VsZi5sb29wLmFkZF9zaWduYWxfaGFuZGxlciwKKyAgICAgICAgICAgIHNpZ25hbC5TSUdJTlQsIGxhbWJkYTogVHJ1ZSkKKworICAgIEBtb2NrLnBhdGNoKCdhc3luY2lvLnVuaXhfZXZlbnRzLnNpZ25hbCcpCisgICAgQG1vY2sucGF0Y2goJ2FzeW5jaW8uYmFzZV9ldmVudHMubG9nZ2VyJykKKyAgICBkZWYgdGVzdF9hZGRfc2lnbmFsX2hhbmRsZXJfaW5zdGFsbF9lcnJvcjIoc2VsZiwgbV9sb2dnaW5nLCBtX3NpZ25hbCk6CisgICAgICAgIG1fc2lnbmFsLk5TSUcgPSBzaWduYWwuTlNJRworCisgICAgICAgIGNsYXNzIEVycihPU0Vycm9yKToKKyAgICAgICAgICAgIGVycm5vID0gZXJybm8uRUlOVkFMCisgICAgICAgIG1fc2lnbmFsLnNpZ25hbC5zaWRlX2VmZmVjdCA9IEVycgorCisgICAgICAgIHNlbGYubG9vcC5fc2lnbmFsX2hhbmRsZXJzW3NpZ25hbC5TSUdIVVBdID0gbGFtYmRhOiBUcnVlCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgUnVudGltZUVycm9yLAorICAgICAgICAgICAgc2VsZi5sb29wLmFkZF9zaWduYWxfaGFuZGxlciwKKyAgICAgICAgICAgIHNpZ25hbC5TSUdJTlQsIGxhbWJkYTogVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtX2xvZ2dpbmcuaW5mby5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbV9zaWduYWwuc2V0X3dha2V1cF9mZC5jYWxsX2NvdW50KQorCisgICAgQG1vY2sucGF0Y2goJ2FzeW5jaW8udW5peF9ldmVudHMuc2lnbmFsJykKKyAgICBAbW9jay5wYXRjaCgnYXN5bmNpby5iYXNlX2V2ZW50cy5sb2dnZXInKQorICAgIGRlZiB0ZXN0X2FkZF9zaWduYWxfaGFuZGxlcl9pbnN0YWxsX2Vycm9yMyhzZWxmLCBtX2xvZ2dpbmcsIG1fc2lnbmFsKToKKyAgICAgICAgY2xhc3MgRXJyKE9TRXJyb3IpOgorICAgICAgICAgICAgZXJybm8gPSBlcnJuby5FSU5WQUwKKyAgICAgICAgbV9zaWduYWwuc2lnbmFsLnNpZGVfZWZmZWN0ID0gRXJyCisgICAgICAgIG1fc2lnbmFsLk5TSUcgPSBzaWduYWwuTlNJRworCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgUnVudGltZUVycm9yLAorICAgICAgICAgICAgc2VsZi5sb29wLmFkZF9zaWduYWxfaGFuZGxlciwKKyAgICAgICAgICAgIHNpZ25hbC5TSUdJTlQsIGxhbWJkYTogVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtX2xvZ2dpbmcuaW5mby5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgbV9zaWduYWwuc2V0X3dha2V1cF9mZC5jYWxsX2NvdW50KQorCisgICAgQG1vY2sucGF0Y2goJ2FzeW5jaW8udW5peF9ldmVudHMuc2lnbmFsJykKKyAgICBkZWYgdGVzdF9yZW1vdmVfc2lnbmFsX2hhbmRsZXIoc2VsZiwgbV9zaWduYWwpOgorICAgICAgICBtX3NpZ25hbC5OU0lHID0gc2lnbmFsLk5TSUcKKworICAgICAgICBzZWxmLmxvb3AuYWRkX3NpZ25hbF9oYW5kbGVyKHNpZ25hbC5TSUdIVVAsIGxhbWJkYTogVHJ1ZSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoCisgICAgICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3NpZ25hbF9oYW5kbGVyKHNpZ25hbC5TSUdIVVApKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobV9zaWduYWwuc2V0X3dha2V1cF9mZC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtX3NpZ25hbC5zaWduYWwuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgKHNpZ25hbC5TSUdIVVAsIG1fc2lnbmFsLlNJR19ERkwpLCBtX3NpZ25hbC5zaWduYWwuY2FsbF9hcmdzWzBdKQorCisgICAgQG1vY2sucGF0Y2goJ2FzeW5jaW8udW5peF9ldmVudHMuc2lnbmFsJykKKyAgICBkZWYgdGVzdF9yZW1vdmVfc2lnbmFsX2hhbmRsZXJfMihzZWxmLCBtX3NpZ25hbCk6CisgICAgICAgIG1fc2lnbmFsLk5TSUcgPSBzaWduYWwuTlNJRworICAgICAgICBtX3NpZ25hbC5TSUdJTlQgPSBzaWduYWwuU0lHSU5UCisKKyAgICAgICAgc2VsZi5sb29wLmFkZF9zaWduYWxfaGFuZGxlcihzaWduYWwuU0lHSU5ULCBsYW1iZGE6IFRydWUpCisgICAgICAgIHNlbGYubG9vcC5fc2lnbmFsX2hhbmRsZXJzW3NpZ25hbC5TSUdIVVBdID0gb2JqZWN0KCkKKyAgICAgICAgbV9zaWduYWwuc2V0X3dha2V1cF9mZC5yZXNldF9tb2NrKCkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoCisgICAgICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3NpZ25hbF9oYW5kbGVyKHNpZ25hbC5TSUdJTlQpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG1fc2lnbmFsLnNldF93YWtldXBfZmQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobV9zaWduYWwuc2lnbmFsLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIChzaWduYWwuU0lHSU5ULCBtX3NpZ25hbC5kZWZhdWx0X2ludF9oYW5kbGVyKSwKKyAgICAgICAgICAgIG1fc2lnbmFsLnNpZ25hbC5jYWxsX2FyZ3NbMF0pCisKKyAgICBAbW9jay5wYXRjaCgnYXN5bmNpby51bml4X2V2ZW50cy5zaWduYWwnKQorICAgIEBtb2NrLnBhdGNoKCdhc3luY2lvLmJhc2VfZXZlbnRzLmxvZ2dlcicpCisgICAgZGVmIHRlc3RfcmVtb3ZlX3NpZ25hbF9oYW5kbGVyX2NsZWFudXBfZXJyb3Ioc2VsZiwgbV9sb2dnaW5nLCBtX3NpZ25hbCk6CisgICAgICAgIG1fc2lnbmFsLk5TSUcgPSBzaWduYWwuTlNJRworICAgICAgICBzZWxmLmxvb3AuYWRkX3NpZ25hbF9oYW5kbGVyKHNpZ25hbC5TSUdIVVAsIGxhbWJkYTogVHJ1ZSkKKworICAgICAgICBtX3NpZ25hbC5zZXRfd2FrZXVwX2ZkLnNpZGVfZWZmZWN0ID0gVmFsdWVFcnJvcgorCisgICAgICAgIHNlbGYubG9vcC5yZW1vdmVfc2lnbmFsX2hhbmRsZXIoc2lnbmFsLlNJR0hVUCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1fbG9nZ2luZy5pbmZvKQorCisgICAgQG1vY2sucGF0Y2goJ2FzeW5jaW8udW5peF9ldmVudHMuc2lnbmFsJykKKyAgICBkZWYgdGVzdF9yZW1vdmVfc2lnbmFsX2hhbmRsZXJfZXJyb3Ioc2VsZiwgbV9zaWduYWwpOgorICAgICAgICBtX3NpZ25hbC5OU0lHID0gc2lnbmFsLk5TSUcKKyAgICAgICAgc2VsZi5sb29wLmFkZF9zaWduYWxfaGFuZGxlcihzaWduYWwuU0lHSFVQLCBsYW1iZGE6IFRydWUpCisKKyAgICAgICAgbV9zaWduYWwuc2lnbmFsLnNpZGVfZWZmZWN0ID0gT1NFcnJvcgorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgT1NFcnJvciwgc2VsZi5sb29wLnJlbW92ZV9zaWduYWxfaGFuZGxlciwgc2lnbmFsLlNJR0hVUCkKKworICAgIEBtb2NrLnBhdGNoKCdhc3luY2lvLnVuaXhfZXZlbnRzLnNpZ25hbCcpCisgICAgZGVmIHRlc3RfcmVtb3ZlX3NpZ25hbF9oYW5kbGVyX2Vycm9yMihzZWxmLCBtX3NpZ25hbCk6CisgICAgICAgIG1fc2lnbmFsLk5TSUcgPSBzaWduYWwuTlNJRworICAgICAgICBzZWxmLmxvb3AuYWRkX3NpZ25hbF9oYW5kbGVyKHNpZ25hbC5TSUdIVVAsIGxhbWJkYTogVHJ1ZSkKKworICAgICAgICBjbGFzcyBFcnIoT1NFcnJvcik6CisgICAgICAgICAgICBlcnJubyA9IGVycm5vLkVJTlZBTAorICAgICAgICBtX3NpZ25hbC5zaWduYWwuc2lkZV9lZmZlY3QgPSBFcnIKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFJ1bnRpbWVFcnJvciwgc2VsZi5sb29wLnJlbW92ZV9zaWduYWxfaGFuZGxlciwgc2lnbmFsLlNJR0hVUCkKKworICAgIEBtb2NrLnBhdGNoKCdhc3luY2lvLnVuaXhfZXZlbnRzLnNpZ25hbCcpCisgICAgZGVmIHRlc3RfY2xvc2Uoc2VsZiwgbV9zaWduYWwpOgorICAgICAgICBtX3NpZ25hbC5OU0lHID0gc2lnbmFsLk5TSUcKKworICAgICAgICBzZWxmLmxvb3AuYWRkX3NpZ25hbF9oYW5kbGVyKHNpZ25hbC5TSUdIVVAsIGxhbWJkYTogVHJ1ZSkKKyAgICAgICAgc2VsZi5sb29wLmFkZF9zaWduYWxfaGFuZGxlcihzaWduYWwuU0lHQ0hMRCwgbGFtYmRhOiBUcnVlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYubG9vcC5fc2lnbmFsX2hhbmRsZXJzKSwgMikKKworICAgICAgICBtX3NpZ25hbC5zZXRfd2FrZXVwX2ZkLnJlc2V0X21vY2soKQorCisgICAgICAgIHNlbGYubG9vcC5jbG9zZSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5sb29wLl9zaWduYWxfaGFuZGxlcnMpLCAwKQorICAgICAgICBtX3NpZ25hbC5zZXRfd2FrZXVwX2ZkLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKC0xKQorCisKK0B1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc29ja2V0LCAnQUZfVU5JWCcpLAorICAgICAgICAgICAgICAgICAgICAgJ1VOSVggU29ja2V0cyBhcmUgbm90IHN1cHBvcnRlZCcpCitjbGFzcyBTZWxlY3RvckV2ZW50TG9vcFVuaXhTb2NrZXRUZXN0cyh0ZXN0X3V0aWxzLlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5sb29wID0gYXN5bmNpby5TZWxlY3RvckV2ZW50TG9vcCgpCisgICAgICAgIHNlbGYuc2V0X2V2ZW50X2xvb3Aoc2VsZi5sb29wKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX3VuaXhfc2VydmVyX2V4aXN0aW5nX3BhdGhfc29jayhzZWxmKToKKyAgICAgICAgd2l0aCB0ZXN0X3V0aWxzLnVuaXhfc29ja2V0X3BhdGgoKSBhcyBwYXRoOgorICAgICAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX1VOSVgpCisgICAgICAgICAgICBzb2NrLmJpbmQocGF0aCkKKyAgICAgICAgICAgIHdpdGggc29jazoKKyAgICAgICAgICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV91bml4X3NlcnZlcihsYW1iZGE6IE5vbmUsIHBhdGgpCisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KE9TRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBZGRyZXNzLippcyBhbHJlYWR5IGluIHVzZScpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvcm8pCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfdW5peF9zZXJ2ZXJfZXhpc3RpbmdfcGF0aF9ub25zb2NrKHNlbGYpOgorICAgICAgICB3aXRoIHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZSgpIGFzIGZpbGU6CisgICAgICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV91bml4X3NlcnZlcihsYW1iZGE6IE5vbmUsIGZpbGUubmFtZSkKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChPU0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBZGRyZXNzLippcyBhbHJlYWR5IGluIHVzZScpOgorICAgICAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ybykKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV91bml4X3NlcnZlcl9zc2xfYm9vbChzZWxmKToKKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfdW5peF9zZXJ2ZXIobGFtYmRhOiBOb25lLCBwYXRoPSdzcGFtJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsPVRydWUpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3NsIGFyZ3VtZW50IG11c3QgYmUgYW4gU1NMQ29udGV4dCcpOgorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb3JvKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX3VuaXhfc2VydmVyX25vcGF0aF9ub3NvY2soc2VsZik6CisgICAgICAgIGNvcm8gPSBzZWxmLmxvb3AuY3JlYXRlX3VuaXhfc2VydmVyKGxhbWJkYTogTm9uZSwgcGF0aD1Ob25lKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYXRoIHdhcyBub3Qgc3BlY2lmaWVkLCBhbmQgbm8gc29jaycpOgorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb3JvKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX3VuaXhfc2VydmVyX3BhdGhfaW5ldHNvY2soc2VsZik6CisgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KCkKKyAgICAgICAgd2l0aCBzb2NrOgorICAgICAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfdW5peF9zZXJ2ZXIobGFtYmRhOiBOb25lLCBwYXRoPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrPXNvY2spCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQSBVTklYIERvbWFpbiBTb2NrZXQgd2FzIGV4cGVjdGVkJyk6CisgICAgICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb3JvKQorCisgICAgQG1vY2sucGF0Y2goJ2FzeW5jaW8udW5peF9ldmVudHMuc29ja2V0JykKKyAgICBkZWYgdGVzdF9jcmVhdGVfdW5peF9zZXJ2ZXJfYmluZF9lcnJvcihzZWxmLCBtX3NvY2tldCk6CisgICAgICAgICMgRW5zdXJlIHRoYXQgdGhlIHNvY2tldCBpcyBjbG9zZWQgb24gYW55IGJpbmQgZXJyb3IKKyAgICAgICAgc29jayA9IG1vY2suTW9jaygpCisgICAgICAgIG1fc29ja2V0LnNvY2tldC5yZXR1cm5fdmFsdWUgPSBzb2NrCisKKyAgICAgICAgc29jay5iaW5kLnNpZGVfZWZmZWN0ID0gT1NFcnJvcgorICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV91bml4X3NlcnZlcihsYW1iZGE6IE5vbmUsIHBhdGg9Ii90ZXN0IikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKToKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ybykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNvY2suY2xvc2UuY2FsbGVkKQorCisgICAgICAgIHNvY2suYmluZC5zaWRlX2VmZmVjdCA9IE1lbW9yeUVycm9yCisgICAgICAgIGNvcm8gPSBzZWxmLmxvb3AuY3JlYXRlX3VuaXhfc2VydmVyKGxhbWJkYTogTm9uZSwgcGF0aD0iL3Rlc3QiKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE1lbW9yeUVycm9yKToKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ybykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNvY2suY2xvc2UuY2FsbGVkKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX3VuaXhfY29ubmVjdGlvbl9wYXRoX3NvY2soc2VsZik6CisgICAgICAgIGNvcm8gPSBzZWxmLmxvb3AuY3JlYXRlX3VuaXhfY29ubmVjdGlvbigKKyAgICAgICAgICAgIGxhbWJkYTogTm9uZSwgb3MuZGV2bnVsbCwgc29jaz1vYmplY3QoKSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsICdwYXRoIGFuZCBzb2NrIGNhbiBub3QgYmUnKToKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ybykKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV91bml4X2Nvbm5lY3Rpb25fbm9wYXRoX25vc29jayhzZWxmKToKKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfdW5peF9jb25uZWN0aW9uKAorICAgICAgICAgICAgbGFtYmRhOiBOb25lLCBOb25lKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdubyBwYXRoIGFuZCBzb2NrIHdlcmUgc3BlY2lmaWVkJyk6CisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvcm8pCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfdW5peF9jb25uZWN0aW9uX25vc3NsX3NlcnZlcmhvc3Qoc2VsZik6CisgICAgICAgIGNvcm8gPSBzZWxmLmxvb3AuY3JlYXRlX3VuaXhfY29ubmVjdGlvbigKKyAgICAgICAgICAgIGxhbWJkYTogTm9uZSwgb3MuZGV2bnVsbCwgc2VydmVyX2hvc3RuYW1lPSdzcGFtJykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2VydmVyX2hvc3RuYW1lIGlzIG9ubHkgbWVhbmluZ2Z1bCcpOgorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb3JvKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX3VuaXhfY29ubmVjdGlvbl9zc2xfbm9zZXJ2ZXJob3N0KHNlbGYpOgorICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV91bml4X2Nvbm5lY3Rpb24oCisgICAgICAgICAgICBsYW1iZGE6IE5vbmUsIG9zLmRldm51bGwsIHNzbD1UcnVlKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleCgKKyAgICAgICAgICAgIFZhbHVlRXJyb3IsICd5b3UgaGF2ZSB0byBwYXNzIHNlcnZlcl9ob3N0bmFtZSB3aGVuIHVzaW5nIHNzbCcpOgorCisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvcm8pCisKKworY2xhc3MgVW5peFJlYWRQaXBlVHJhbnNwb3J0VGVzdHModGVzdF91dGlscy5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubG9vcCA9IHNlbGYubmV3X3Rlc3RfbG9vcCgpCisgICAgICAgIHNlbGYucHJvdG9jb2wgPSB0ZXN0X3V0aWxzLm1ha2VfdGVzdF9wcm90b2NvbChhc3luY2lvLlByb3RvY29sKQorICAgICAgICBzZWxmLnBpcGUgPSBtb2NrLk1vY2soc3BlY19zZXQ9aW8uUmF3SU9CYXNlKQorICAgICAgICBzZWxmLnBpcGUuZmlsZW5vLnJldHVybl92YWx1ZSA9IDUKKworICAgICAgICBibG9ja2luZ19wYXRjaGVyID0gbW9jay5wYXRjaCgnYXN5bmNpby51bml4X2V2ZW50cy5fc2V0X25vbmJsb2NraW5nJykKKyAgICAgICAgYmxvY2tpbmdfcGF0Y2hlci5zdGFydCgpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChibG9ja2luZ19wYXRjaGVyLnN0b3ApCisKKyAgICAgICAgZnN0YXRfcGF0Y2hlciA9IG1vY2sucGF0Y2goJ29zLmZzdGF0JykKKyAgICAgICAgbV9mc3RhdCA9IGZzdGF0X3BhdGNoZXIuc3RhcnQoKQorICAgICAgICBzdCA9IG1vY2suTW9jaygpCisgICAgICAgIHN0LnN0X21vZGUgPSBzdGF0LlNfSUZJRk8KKyAgICAgICAgbV9mc3RhdC5yZXR1cm5fdmFsdWUgPSBzdAorICAgICAgICBzZWxmLmFkZENsZWFudXAoZnN0YXRfcGF0Y2hlci5zdG9wKQorCisgICAgZGVmIHJlYWRfcGlwZV90cmFuc3BvcnQoc2VsZiwgd2FpdGVyPU5vbmUpOgorICAgICAgICB0cmFuc3BvcnQgPSB1bml4X2V2ZW50cy5fVW5peFJlYWRQaXBlVHJhbnNwb3J0KHNlbGYubG9vcCwgc2VsZi5waXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucHJvdG9jb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FpdGVyPXdhaXRlcikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGNsb3NlX3BpcGVfdHJhbnNwb3J0LCB0cmFuc3BvcnQpCisgICAgICAgIHJldHVybiB0cmFuc3BvcnQKKworICAgIGRlZiB0ZXN0X2N0b3Ioc2VsZik6CisgICAgICAgIHdhaXRlciA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0ciA9IHNlbGYucmVhZF9waXBlX3RyYW5zcG9ydCh3YWl0ZXI9d2FpdGVyKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHdhaXRlcikKKworICAgICAgICBzZWxmLnByb3RvY29sLmNvbm5lY3Rpb25fbWFkZS5hc3NlcnRfY2FsbGVkX3dpdGgodHIpCisgICAgICAgIHNlbGYubG9vcC5hc3NlcnRfcmVhZGVyKDUsIHRyLl9yZWFkX3JlYWR5KQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh3YWl0ZXIucmVzdWx0KCkpCisKKyAgICBAbW9jay5wYXRjaCgnb3MucmVhZCcpCisgICAgZGVmIHRlc3RfX3JlYWRfcmVhZHkoc2VsZiwgbV9yZWFkKToKKyAgICAgICAgdHIgPSBzZWxmLnJlYWRfcGlwZV90cmFuc3BvcnQoKQorICAgICAgICBtX3JlYWQucmV0dXJuX3ZhbHVlID0gYidkYXRhJworICAgICAgICB0ci5fcmVhZF9yZWFkeSgpCisKKyAgICAgICAgbV9yZWFkLmFzc2VydF9jYWxsZWRfd2l0aCg1LCB0ci5tYXhfc2l6ZSkKKyAgICAgICAgc2VsZi5wcm90b2NvbC5kYXRhX3JlY2VpdmVkLmFzc2VydF9jYWxsZWRfd2l0aChiJ2RhdGEnKQorCisgICAgQG1vY2sucGF0Y2goJ29zLnJlYWQnKQorICAgIGRlZiB0ZXN0X19yZWFkX3JlYWR5X2VvZihzZWxmLCBtX3JlYWQpOgorICAgICAgICB0ciA9IHNlbGYucmVhZF9waXBlX3RyYW5zcG9ydCgpCisgICAgICAgIG1fcmVhZC5yZXR1cm5fdmFsdWUgPSBiJycKKyAgICAgICAgdHIuX3JlYWRfcmVhZHkoKQorCisgICAgICAgIG1fcmVhZC5hc3NlcnRfY2FsbGVkX3dpdGgoNSwgdHIubWF4X3NpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLnJlYWRlcnMpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLnByb3RvY29sLmVvZl9yZWNlaXZlZC5hc3NlcnRfY2FsbGVkX3dpdGgoKQorICAgICAgICBzZWxmLnByb3RvY29sLmNvbm5lY3Rpb25fbG9zdC5hc3NlcnRfY2FsbGVkX3dpdGgoTm9uZSkKKworICAgIEBtb2NrLnBhdGNoKCdvcy5yZWFkJykKKyAgICBkZWYgdGVzdF9fcmVhZF9yZWFkeV9ibG9ja2VkKHNlbGYsIG1fcmVhZCk6CisgICAgICAgIHRyID0gc2VsZi5yZWFkX3BpcGVfdHJhbnNwb3J0KCkKKyAgICAgICAgbV9yZWFkLnNpZGVfZWZmZWN0ID0gQmxvY2tpbmdJT0Vycm9yCisgICAgICAgIHRyLl9yZWFkX3JlYWR5KCkKKworICAgICAgICBtX3JlYWQuYXNzZXJ0X2NhbGxlZF93aXRoKDUsIHRyLm1heF9zaXplKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnByb3RvY29sLmRhdGFfcmVjZWl2ZWQuY2FsbGVkKQorCisgICAgQG1vY2sucGF0Y2goJ2FzeW5jaW8ubG9nLmxvZ2dlci5lcnJvcicpCisgICAgQG1vY2sucGF0Y2goJ29zLnJlYWQnKQorICAgIGRlZiB0ZXN0X19yZWFkX3JlYWR5X2Vycm9yKHNlbGYsIG1fcmVhZCwgbV9sb2dleGMpOgorICAgICAgICB0ciA9IHNlbGYucmVhZF9waXBlX3RyYW5zcG9ydCgpCisgICAgICAgIGVyciA9IE9TRXJyb3IoKQorICAgICAgICBtX3JlYWQuc2lkZV9lZmZlY3QgPSBlcnIKKyAgICAgICAgdHIuX2Nsb3NlID0gbW9jay5Nb2NrKCkKKyAgICAgICAgdHIuX3JlYWRfcmVhZHkoKQorCisgICAgICAgIG1fcmVhZC5hc3NlcnRfY2FsbGVkX3dpdGgoNSwgdHIubWF4X3NpemUpCisgICAgICAgIHRyLl9jbG9zZS5hc3NlcnRfY2FsbGVkX3dpdGgoZXJyKQorICAgICAgICBtX2xvZ2V4Yy5hc3NlcnRfY2FsbGVkX3dpdGgoCisgICAgICAgICAgICB0ZXN0X3V0aWxzLk1vY2tQYXR0ZXJuKAorICAgICAgICAgICAgICAgICdGYXRhbCByZWFkIGVycm9yIG9uIHBpcGUgdHJhbnNwb3J0JworICAgICAgICAgICAgICAgICdcbnByb3RvY29sOi4qXG50cmFuc3BvcnQ6LionKSwKKyAgICAgICAgICAgIGV4Y19pbmZvPShPU0Vycm9yLCBNT0NLX0FOWSwgTU9DS19BTlkpKQorCisgICAgQG1vY2sucGF0Y2goJ29zLnJlYWQnKQorICAgIGRlZiB0ZXN0X3BhdXNlX3JlYWRpbmcoc2VsZiwgbV9yZWFkKToKKyAgICAgICAgdHIgPSBzZWxmLnJlYWRfcGlwZV90cmFuc3BvcnQoKQorICAgICAgICBtID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLmFkZF9yZWFkZXIoNSwgbSkKKyAgICAgICAgdHIucGF1c2VfcmVhZGluZygpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLnJlYWRlcnMpCisKKyAgICBAbW9jay5wYXRjaCgnb3MucmVhZCcpCisgICAgZGVmIHRlc3RfcmVzdW1lX3JlYWRpbmcoc2VsZiwgbV9yZWFkKToKKyAgICAgICAgdHIgPSBzZWxmLnJlYWRfcGlwZV90cmFuc3BvcnQoKQorICAgICAgICB0ci5yZXN1bWVfcmVhZGluZygpCisgICAgICAgIHNlbGYubG9vcC5hc3NlcnRfcmVhZGVyKDUsIHRyLl9yZWFkX3JlYWR5KQorCisgICAgQG1vY2sucGF0Y2goJ29zLnJlYWQnKQorICAgIGRlZiB0ZXN0X2Nsb3NlKHNlbGYsIG1fcmVhZCk6CisgICAgICAgIHRyID0gc2VsZi5yZWFkX3BpcGVfdHJhbnNwb3J0KCkKKyAgICAgICAgdHIuX2Nsb3NlID0gbW9jay5Nb2NrKCkKKyAgICAgICAgdHIuY2xvc2UoKQorICAgICAgICB0ci5fY2xvc2UuYXNzZXJ0X2NhbGxlZF93aXRoKE5vbmUpCisKKyAgICBAbW9jay5wYXRjaCgnb3MucmVhZCcpCisgICAgZGVmIHRlc3RfY2xvc2VfYWxyZWFkeV9jbG9zaW5nKHNlbGYsIG1fcmVhZCk6CisgICAgICAgIHRyID0gc2VsZi5yZWFkX3BpcGVfdHJhbnNwb3J0KCkKKyAgICAgICAgdHIuX2Nsb3NpbmcgPSBUcnVlCisgICAgICAgIHRyLl9jbG9zZSA9IG1vY2suTW9jaygpCisgICAgICAgIHRyLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0ci5fY2xvc2UuY2FsbGVkKQorCisgICAgQG1vY2sucGF0Y2goJ29zLnJlYWQnKQorICAgIGRlZiB0ZXN0X19jbG9zZShzZWxmLCBtX3JlYWQpOgorICAgICAgICB0ciA9IHNlbGYucmVhZF9waXBlX3RyYW5zcG9ydCgpCisgICAgICAgIGVyciA9IG9iamVjdCgpCisgICAgICAgIHRyLl9jbG9zZShlcnIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ci5pc19jbG9zaW5nKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLnJlYWRlcnMpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLnByb3RvY29sLmNvbm5lY3Rpb25fbG9zdC5hc3NlcnRfY2FsbGVkX3dpdGgoZXJyKQorCisgICAgZGVmIHRlc3RfX2NhbGxfY29ubmVjdGlvbl9sb3N0KHNlbGYpOgorICAgICAgICB0ciA9IHNlbGYucmVhZF9waXBlX3RyYW5zcG9ydCgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHRyLl9wcm90b2NvbCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUodHIuX2xvb3ApCisKKyAgICAgICAgZXJyID0gTm9uZQorICAgICAgICB0ci5fY2FsbF9jb25uZWN0aW9uX2xvc3QoZXJyKQorICAgICAgICBzZWxmLnByb3RvY29sLmNvbm5lY3Rpb25fbG9zdC5hc3NlcnRfY2FsbGVkX3dpdGgoZXJyKQorICAgICAgICBzZWxmLnBpcGUuY2xvc2UuYXNzZXJ0X2NhbGxlZF93aXRoKCkKKworICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh0ci5fcHJvdG9jb2wpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHRyLl9sb29wKQorCisgICAgZGVmIHRlc3RfX2NhbGxfY29ubmVjdGlvbl9sb3N0X3dpdGhfZXJyKHNlbGYpOgorICAgICAgICB0ciA9IHNlbGYucmVhZF9waXBlX3RyYW5zcG9ydCgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHRyLl9wcm90b2NvbCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUodHIuX2xvb3ApCisKKyAgICAgICAgZXJyID0gT1NFcnJvcigpCisgICAgICAgIHRyLl9jYWxsX2Nvbm5lY3Rpb25fbG9zdChlcnIpCisgICAgICAgIHNlbGYucHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0LmFzc2VydF9jYWxsZWRfd2l0aChlcnIpCisgICAgICAgIHNlbGYucGlwZS5jbG9zZS5hc3NlcnRfY2FsbGVkX3dpdGgoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHRyLl9wcm90b2NvbCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodHIuX2xvb3ApCisKKworY2xhc3MgVW5peFdyaXRlUGlwZVRyYW5zcG9ydFRlc3RzKHRlc3RfdXRpbHMuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AgPSBzZWxmLm5ld190ZXN0X2xvb3AoKQorICAgICAgICBzZWxmLnByb3RvY29sID0gdGVzdF91dGlscy5tYWtlX3Rlc3RfcHJvdG9jb2woYXN5bmNpby5CYXNlUHJvdG9jb2wpCisgICAgICAgIHNlbGYucGlwZSA9IG1vY2suTW9jayhzcGVjX3NldD1pby5SYXdJT0Jhc2UpCisgICAgICAgIHNlbGYucGlwZS5maWxlbm8ucmV0dXJuX3ZhbHVlID0gNQorCisgICAgICAgIGJsb2NraW5nX3BhdGNoZXIgPSBtb2NrLnBhdGNoKCdhc3luY2lvLnVuaXhfZXZlbnRzLl9zZXRfbm9uYmxvY2tpbmcnKQorICAgICAgICBibG9ja2luZ19wYXRjaGVyLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGJsb2NraW5nX3BhdGNoZXIuc3RvcCkKKworICAgICAgICBmc3RhdF9wYXRjaGVyID0gbW9jay5wYXRjaCgnb3MuZnN0YXQnKQorICAgICAgICBtX2ZzdGF0ID0gZnN0YXRfcGF0Y2hlci5zdGFydCgpCisgICAgICAgIHN0ID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc3Quc3RfbW9kZSA9IHN0YXQuU19JRlNPQ0sKKyAgICAgICAgbV9mc3RhdC5yZXR1cm5fdmFsdWUgPSBzdAorICAgICAgICBzZWxmLmFkZENsZWFudXAoZnN0YXRfcGF0Y2hlci5zdG9wKQorCisgICAgZGVmIHdyaXRlX3BpcGVfdHJhbnNwb3J0KHNlbGYsIHdhaXRlcj1Ob25lKToKKyAgICAgICAgdHJhbnNwb3J0ID0gdW5peF9ldmVudHMuX1VuaXhXcml0ZVBpcGVUcmFuc3BvcnQoc2VsZi5sb29wLCBzZWxmLnBpcGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucHJvdG9jb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhaXRlcj13YWl0ZXIpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChjbG9zZV9waXBlX3RyYW5zcG9ydCwgdHJhbnNwb3J0KQorICAgICAgICByZXR1cm4gdHJhbnNwb3J0CisKKyAgICBkZWYgdGVzdF9jdG9yKHNlbGYpOgorICAgICAgICB3YWl0ZXIgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdHIgPSBzZWxmLndyaXRlX3BpcGVfdHJhbnNwb3J0KHdhaXRlcj13YWl0ZXIpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUod2FpdGVyKQorCisgICAgICAgIHNlbGYucHJvdG9jb2wuY29ubmVjdGlvbl9tYWRlLmFzc2VydF9jYWxsZWRfd2l0aCh0cikKKyAgICAgICAgc2VsZi5sb29wLmFzc2VydF9yZWFkZXIoNSwgdHIuX3JlYWRfcmVhZHkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgd2FpdGVyLnJlc3VsdCgpKQorCisgICAgZGVmIHRlc3RfY2FuX3dyaXRlX2VvZihzZWxmKToKKyAgICAgICAgdHIgPSBzZWxmLndyaXRlX3BpcGVfdHJhbnNwb3J0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRyLmNhbl93cml0ZV9lb2YoKSkKKworICAgIEBtb2NrLnBhdGNoKCdvcy53cml0ZScpCisgICAgZGVmIHRlc3Rfd3JpdGUoc2VsZiwgbV93cml0ZSk6CisgICAgICAgIHRyID0gc2VsZi53cml0ZV9waXBlX3RyYW5zcG9ydCgpCisgICAgICAgIG1fd3JpdGUucmV0dXJuX3ZhbHVlID0gNAorICAgICAgICB0ci53cml0ZShiJ2RhdGEnKQorICAgICAgICBtX3dyaXRlLmFzc2VydF9jYWxsZWRfd2l0aCg1LCBiJ2RhdGEnKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC53cml0ZXJzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtdLCB0ci5fYnVmZmVyKQorCisgICAgQG1vY2sucGF0Y2goJ29zLndyaXRlJykKKyAgICBkZWYgdGVzdF93cml0ZV9ub19kYXRhKHNlbGYsIG1fd3JpdGUpOgorICAgICAgICB0ciA9IHNlbGYud3JpdGVfcGlwZV90cmFuc3BvcnQoKQorICAgICAgICB0ci53cml0ZShiJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobV93cml0ZS5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLndyaXRlcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW10sIHRyLl9idWZmZXIpCisKKyAgICBAbW9jay5wYXRjaCgnb3Mud3JpdGUnKQorICAgIGRlZiB0ZXN0X3dyaXRlX3BhcnRpYWwoc2VsZiwgbV93cml0ZSk6CisgICAgICAgIHRyID0gc2VsZi53cml0ZV9waXBlX3RyYW5zcG9ydCgpCisgICAgICAgIG1fd3JpdGUucmV0dXJuX3ZhbHVlID0gMgorICAgICAgICB0ci53cml0ZShiJ2RhdGEnKQorICAgICAgICBtX3dyaXRlLmFzc2VydF9jYWxsZWRfd2l0aCg1LCBiJ2RhdGEnKQorICAgICAgICBzZWxmLmxvb3AuYXNzZXJ0X3dyaXRlcig1LCB0ci5fd3JpdGVfcmVhZHkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW2IndGEnXSwgdHIuX2J1ZmZlcikKKworICAgIEBtb2NrLnBhdGNoKCdvcy53cml0ZScpCisgICAgZGVmIHRlc3Rfd3JpdGVfYnVmZmVyKHNlbGYsIG1fd3JpdGUpOgorICAgICAgICB0ciA9IHNlbGYud3JpdGVfcGlwZV90cmFuc3BvcnQoKQorICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlcig1LCB0ci5fd3JpdGVfcmVhZHkpCisgICAgICAgIHRyLl9idWZmZXIgPSBbYidwcmV2aW91cyddCisgICAgICAgIHRyLndyaXRlKGInZGF0YScpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobV93cml0ZS5jYWxsZWQpCisgICAgICAgIHNlbGYubG9vcC5hc3NlcnRfd3JpdGVyKDUsIHRyLl93cml0ZV9yZWFkeSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbYidwcmV2aW91cycsIGInZGF0YSddLCB0ci5fYnVmZmVyKQorCisgICAgQG1vY2sucGF0Y2goJ29zLndyaXRlJykKKyAgICBkZWYgdGVzdF93cml0ZV9hZ2FpbihzZWxmLCBtX3dyaXRlKToKKyAgICAgICAgdHIgPSBzZWxmLndyaXRlX3BpcGVfdHJhbnNwb3J0KCkKKyAgICAgICAgbV93cml0ZS5zaWRlX2VmZmVjdCA9IEJsb2NraW5nSU9FcnJvcigpCisgICAgICAgIHRyLndyaXRlKGInZGF0YScpCisgICAgICAgIG1fd3JpdGUuYXNzZXJ0X2NhbGxlZF93aXRoKDUsIGInZGF0YScpCisgICAgICAgIHNlbGYubG9vcC5hc3NlcnRfd3JpdGVyKDUsIHRyLl93cml0ZV9yZWFkeSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbYidkYXRhJ10sIHRyLl9idWZmZXIpCisKKyAgICBAbW9jay5wYXRjaCgnYXN5bmNpby51bml4X2V2ZW50cy5sb2dnZXInKQorICAgIEBtb2NrLnBhdGNoKCdvcy53cml0ZScpCisgICAgZGVmIHRlc3Rfd3JpdGVfZXJyKHNlbGYsIG1fd3JpdGUsIG1fbG9nKToKKyAgICAgICAgdHIgPSBzZWxmLndyaXRlX3BpcGVfdHJhbnNwb3J0KCkKKyAgICAgICAgZXJyID0gT1NFcnJvcigpCisgICAgICAgIG1fd3JpdGUuc2lkZV9lZmZlY3QgPSBlcnIKKyAgICAgICAgdHIuX2ZhdGFsX2Vycm9yID0gbW9jay5Nb2NrKCkKKyAgICAgICAgdHIud3JpdGUoYidkYXRhJykKKyAgICAgICAgbV93cml0ZS5hc3NlcnRfY2FsbGVkX3dpdGgoNSwgYidkYXRhJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3Aud3JpdGVycykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbXSwgdHIuX2J1ZmZlcikKKyAgICAgICAgdHIuX2ZhdGFsX2Vycm9yLmFzc2VydF9jYWxsZWRfd2l0aCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ZhdGFsIHdyaXRlIGVycm9yIG9uIHBpcGUgdHJhbnNwb3J0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCB0ci5fY29ubl9sb3N0KQorCisgICAgICAgIHRyLndyaXRlKGInZGF0YScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgdHIuX2Nvbm5fbG9zdCkKKyAgICAgICAgdHIud3JpdGUoYidkYXRhJykKKyAgICAgICAgdHIud3JpdGUoYidkYXRhJykKKyAgICAgICAgdHIud3JpdGUoYidkYXRhJykKKyAgICAgICAgdHIud3JpdGUoYidkYXRhJykKKyAgICAgICAgIyBUaGlzIGlzIGEgYml0IG92ZXJzcGVjaWZpZWQuIDotKAorICAgICAgICBtX2xvZy53YXJuaW5nLmFzc2VydF9jYWxsZWRfd2l0aCgKKyAgICAgICAgICAgICdwaXBlIGNsb3NlZCBieSBwZWVyIG9yIG9zLndyaXRlKHBpcGUsIGRhdGEpIHJhaXNlZCBleGNlcHRpb24uJykKKyAgICAgICAgdHIuY2xvc2UoKQorCisgICAgQG1vY2sucGF0Y2goJ29zLndyaXRlJykKKyAgICBkZWYgdGVzdF93cml0ZV9jbG9zZShzZWxmLCBtX3dyaXRlKToKKyAgICAgICAgdHIgPSBzZWxmLndyaXRlX3BpcGVfdHJhbnNwb3J0KCkKKyAgICAgICAgdHIuX3JlYWRfcmVhZHkoKSAgIyBwaXBlIHdhcyBjbG9zZWQgYnkgcGVlcgorCisgICAgICAgIHRyLndyaXRlKGInZGF0YScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHIuX2Nvbm5fbG9zdCwgMSkKKyAgICAgICAgdHIud3JpdGUoYidkYXRhJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ci5fY29ubl9sb3N0LCAyKQorCisgICAgZGVmIHRlc3RfX3JlYWRfcmVhZHkoc2VsZik6CisgICAgICAgIHRyID0gc2VsZi53cml0ZV9waXBlX3RyYW5zcG9ydCgpCisgICAgICAgIHRyLl9yZWFkX3JlYWR5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3AucmVhZGVycykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3Aud3JpdGVycykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRyLmlzX2Nsb3NpbmcoKSkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYucHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0LmFzc2VydF9jYWxsZWRfd2l0aChOb25lKQorCisgICAgQG1vY2sucGF0Y2goJ29zLndyaXRlJykKKyAgICBkZWYgdGVzdF9fd3JpdGVfcmVhZHkoc2VsZiwgbV93cml0ZSk6CisgICAgICAgIHRyID0gc2VsZi53cml0ZV9waXBlX3RyYW5zcG9ydCgpCisgICAgICAgIHNlbGYubG9vcC5hZGRfd3JpdGVyKDUsIHRyLl93cml0ZV9yZWFkeSkKKyAgICAgICAgdHIuX2J1ZmZlciA9IFtiJ2RhJywgYid0YSddCisgICAgICAgIG1fd3JpdGUucmV0dXJuX3ZhbHVlID0gNAorICAgICAgICB0ci5fd3JpdGVfcmVhZHkoKQorICAgICAgICBtX3dyaXRlLmFzc2VydF9jYWxsZWRfd2l0aCg1LCBiJ2RhdGEnKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC53cml0ZXJzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtdLCB0ci5fYnVmZmVyKQorCisgICAgQG1vY2sucGF0Y2goJ29zLndyaXRlJykKKyAgICBkZWYgdGVzdF9fd3JpdGVfcmVhZHlfcGFydGlhbChzZWxmLCBtX3dyaXRlKToKKyAgICAgICAgdHIgPSBzZWxmLndyaXRlX3BpcGVfdHJhbnNwb3J0KCkKKyAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIoNSwgdHIuX3dyaXRlX3JlYWR5KQorICAgICAgICB0ci5fYnVmZmVyID0gW2InZGEnLCBiJ3RhJ10KKyAgICAgICAgbV93cml0ZS5yZXR1cm5fdmFsdWUgPSAzCisgICAgICAgIHRyLl93cml0ZV9yZWFkeSgpCisgICAgICAgIG1fd3JpdGUuYXNzZXJ0X2NhbGxlZF93aXRoKDUsIGInZGF0YScpCisgICAgICAgIHNlbGYubG9vcC5hc3NlcnRfd3JpdGVyKDUsIHRyLl93cml0ZV9yZWFkeSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbYidhJ10sIHRyLl9idWZmZXIpCisKKyAgICBAbW9jay5wYXRjaCgnb3Mud3JpdGUnKQorICAgIGRlZiB0ZXN0X193cml0ZV9yZWFkeV9hZ2FpbihzZWxmLCBtX3dyaXRlKToKKyAgICAgICAgdHIgPSBzZWxmLndyaXRlX3BpcGVfdHJhbnNwb3J0KCkKKyAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIoNSwgdHIuX3dyaXRlX3JlYWR5KQorICAgICAgICB0ci5fYnVmZmVyID0gW2InZGEnLCBiJ3RhJ10KKyAgICAgICAgbV93cml0ZS5zaWRlX2VmZmVjdCA9IEJsb2NraW5nSU9FcnJvcigpCisgICAgICAgIHRyLl93cml0ZV9yZWFkeSgpCisgICAgICAgIG1fd3JpdGUuYXNzZXJ0X2NhbGxlZF93aXRoKDUsIGInZGF0YScpCisgICAgICAgIHNlbGYubG9vcC5hc3NlcnRfd3JpdGVyKDUsIHRyLl93cml0ZV9yZWFkeSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbYidkYXRhJ10sIHRyLl9idWZmZXIpCisKKyAgICBAbW9jay5wYXRjaCgnb3Mud3JpdGUnKQorICAgIGRlZiB0ZXN0X193cml0ZV9yZWFkeV9lbXB0eShzZWxmLCBtX3dyaXRlKToKKyAgICAgICAgdHIgPSBzZWxmLndyaXRlX3BpcGVfdHJhbnNwb3J0KCkKKyAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIoNSwgdHIuX3dyaXRlX3JlYWR5KQorICAgICAgICB0ci5fYnVmZmVyID0gW2InZGEnLCBiJ3RhJ10KKyAgICAgICAgbV93cml0ZS5yZXR1cm5fdmFsdWUgPSAwCisgICAgICAgIHRyLl93cml0ZV9yZWFkeSgpCisgICAgICAgIG1fd3JpdGUuYXNzZXJ0X2NhbGxlZF93aXRoKDUsIGInZGF0YScpCisgICAgICAgIHNlbGYubG9vcC5hc3NlcnRfd3JpdGVyKDUsIHRyLl93cml0ZV9yZWFkeSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbYidkYXRhJ10sIHRyLl9idWZmZXIpCisKKyAgICBAbW9jay5wYXRjaCgnYXN5bmNpby5sb2cubG9nZ2VyLmVycm9yJykKKyAgICBAbW9jay5wYXRjaCgnb3Mud3JpdGUnKQorICAgIGRlZiB0ZXN0X193cml0ZV9yZWFkeV9lcnIoc2VsZiwgbV93cml0ZSwgbV9sb2dleGMpOgorICAgICAgICB0ciA9IHNlbGYud3JpdGVfcGlwZV90cmFuc3BvcnQoKQorICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlcig1LCB0ci5fd3JpdGVfcmVhZHkpCisgICAgICAgIHRyLl9idWZmZXIgPSBbYidkYScsIGIndGEnXQorICAgICAgICBtX3dyaXRlLnNpZGVfZWZmZWN0ID0gZXJyID0gT1NFcnJvcigpCisgICAgICAgIHRyLl93cml0ZV9yZWFkeSgpCisgICAgICAgIG1fd3JpdGUuYXNzZXJ0X2NhbGxlZF93aXRoKDUsIGInZGF0YScpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLndyaXRlcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLnJlYWRlcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW10sIHRyLl9idWZmZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ci5pc19jbG9zaW5nKCkpCisgICAgICAgIG1fbG9nZXhjLmFzc2VydF9jYWxsZWRfd2l0aCgKKyAgICAgICAgICAgIHRlc3RfdXRpbHMuTW9ja1BhdHRlcm4oCisgICAgICAgICAgICAgICAgJ0ZhdGFsIHdyaXRlIGVycm9yIG9uIHBpcGUgdHJhbnNwb3J0JworICAgICAgICAgICAgICAgICdcbnByb3RvY29sOi4qXG50cmFuc3BvcnQ6LionKSwKKyAgICAgICAgICAgIGV4Y19pbmZvPShPU0Vycm9yLCBNT0NLX0FOWSwgTU9DS19BTlkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHRyLl9jb25uX2xvc3QpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLnByb3RvY29sLmNvbm5lY3Rpb25fbG9zdC5hc3NlcnRfY2FsbGVkX3dpdGgoZXJyKQorCisgICAgQG1vY2sucGF0Y2goJ29zLndyaXRlJykKKyAgICBkZWYgdGVzdF9fd3JpdGVfcmVhZHlfY2xvc2luZyhzZWxmLCBtX3dyaXRlKToKKyAgICAgICAgdHIgPSBzZWxmLndyaXRlX3BpcGVfdHJhbnNwb3J0KCkKKyAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIoNSwgdHIuX3dyaXRlX3JlYWR5KQorICAgICAgICB0ci5fY2xvc2luZyA9IFRydWUKKyAgICAgICAgdHIuX2J1ZmZlciA9IFtiJ2RhJywgYid0YSddCisgICAgICAgIG1fd3JpdGUucmV0dXJuX3ZhbHVlID0gNAorICAgICAgICB0ci5fd3JpdGVfcmVhZHkoKQorICAgICAgICBtX3dyaXRlLmFzc2VydF9jYWxsZWRfd2l0aCg1LCBiJ2RhdGEnKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC53cml0ZXJzKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5yZWFkZXJzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtdLCB0ci5fYnVmZmVyKQorICAgICAgICBzZWxmLnByb3RvY29sLmNvbm5lY3Rpb25fbG9zdC5hc3NlcnRfY2FsbGVkX3dpdGgoTm9uZSkKKyAgICAgICAgc2VsZi5waXBlLmNsb3NlLmFzc2VydF9jYWxsZWRfd2l0aCgpCisKKyAgICBAbW9jay5wYXRjaCgnb3Mud3JpdGUnKQorICAgIGRlZiB0ZXN0X2Fib3J0KHNlbGYsIG1fd3JpdGUpOgorICAgICAgICB0ciA9IHNlbGYud3JpdGVfcGlwZV90cmFuc3BvcnQoKQorICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlcig1LCB0ci5fd3JpdGVfcmVhZHkpCisgICAgICAgIHNlbGYubG9vcC5hZGRfcmVhZGVyKDUsIHRyLl9yZWFkX3JlYWR5KQorICAgICAgICB0ci5fYnVmZmVyID0gW2InZGEnLCBiJ3RhJ10KKyAgICAgICAgdHIuYWJvcnQoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG1fd3JpdGUuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5yZWFkZXJzKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC53cml0ZXJzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtdLCB0ci5fYnVmZmVyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHIuaXNfY2xvc2luZygpKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QuYXNzZXJ0X2NhbGxlZF93aXRoKE5vbmUpCisKKyAgICBkZWYgdGVzdF9fY2FsbF9jb25uZWN0aW9uX2xvc3Qoc2VsZik6CisgICAgICAgIHRyID0gc2VsZi53cml0ZV9waXBlX3RyYW5zcG9ydCgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHRyLl9wcm90b2NvbCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUodHIuX2xvb3ApCisKKyAgICAgICAgZXJyID0gTm9uZQorICAgICAgICB0ci5fY2FsbF9jb25uZWN0aW9uX2xvc3QoZXJyKQorICAgICAgICBzZWxmLnByb3RvY29sLmNvbm5lY3Rpb25fbG9zdC5hc3NlcnRfY2FsbGVkX3dpdGgoZXJyKQorICAgICAgICBzZWxmLnBpcGUuY2xvc2UuYXNzZXJ0X2NhbGxlZF93aXRoKCkKKworICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh0ci5fcHJvdG9jb2wpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHRyLl9sb29wKQorCisgICAgZGVmIHRlc3RfX2NhbGxfY29ubmVjdGlvbl9sb3N0X3dpdGhfZXJyKHNlbGYpOgorICAgICAgICB0ciA9IHNlbGYud3JpdGVfcGlwZV90cmFuc3BvcnQoKQorICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZSh0ci5fcHJvdG9jb2wpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHRyLl9sb29wKQorCisgICAgICAgIGVyciA9IE9TRXJyb3IoKQorICAgICAgICB0ci5fY2FsbF9jb25uZWN0aW9uX2xvc3QoZXJyKQorICAgICAgICBzZWxmLnByb3RvY29sLmNvbm5lY3Rpb25fbG9zdC5hc3NlcnRfY2FsbGVkX3dpdGgoZXJyKQorICAgICAgICBzZWxmLnBpcGUuY2xvc2UuYXNzZXJ0X2NhbGxlZF93aXRoKCkKKworICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh0ci5fcHJvdG9jb2wpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHRyLl9sb29wKQorCisgICAgZGVmIHRlc3RfY2xvc2Uoc2VsZik6CisgICAgICAgIHRyID0gc2VsZi53cml0ZV9waXBlX3RyYW5zcG9ydCgpCisgICAgICAgIHRyLndyaXRlX2VvZiA9IG1vY2suTW9jaygpCisgICAgICAgIHRyLmNsb3NlKCkKKyAgICAgICAgdHIud3JpdGVfZW9mLmFzc2VydF9jYWxsZWRfd2l0aCgpCisKKyAgICAgICAgIyBjbG9zaW5nIHRoZSB0cmFuc3BvcnQgdHdpY2UgbXVzdCBub3QgZmFpbAorICAgICAgICB0ci5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9jbG9zZV9jbG9zaW5nKHNlbGYpOgorICAgICAgICB0ciA9IHNlbGYud3JpdGVfcGlwZV90cmFuc3BvcnQoKQorICAgICAgICB0ci53cml0ZV9lb2YgPSBtb2NrLk1vY2soKQorICAgICAgICB0ci5fY2xvc2luZyA9IFRydWUKKyAgICAgICAgdHIuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRyLndyaXRlX2VvZi5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF93cml0ZV9lb2Yoc2VsZik6CisgICAgICAgIHRyID0gc2VsZi53cml0ZV9waXBlX3RyYW5zcG9ydCgpCisgICAgICAgIHRyLndyaXRlX2VvZigpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ci5pc19jbG9zaW5nKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLnJlYWRlcnMpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLnByb3RvY29sLmNvbm5lY3Rpb25fbG9zdC5hc3NlcnRfY2FsbGVkX3dpdGgoTm9uZSkKKworICAgIGRlZiB0ZXN0X3dyaXRlX2VvZl9wZW5kaW5nKHNlbGYpOgorICAgICAgICB0ciA9IHNlbGYud3JpdGVfcGlwZV90cmFuc3BvcnQoKQorICAgICAgICB0ci5fYnVmZmVyID0gW2InZGF0YSddCisgICAgICAgIHRyLndyaXRlX2VvZigpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ci5pc19jbG9zaW5nKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QuY2FsbGVkKQorCisKK2NsYXNzIEFic3RyYWN0Q2hpbGRXYXRjaGVyVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfbm90X2ltcGxlbWVudGVkKHNlbGYpOgorICAgICAgICBmID0gbW9jay5Nb2NrKCkKKyAgICAgICAgd2F0Y2hlciA9IGFzeW5jaW8uQWJzdHJhY3RDaGlsZFdhdGNoZXIoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIHdhdGNoZXIuYWRkX2NoaWxkX2hhbmRsZXIsIGYsIGYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgd2F0Y2hlci5yZW1vdmVfY2hpbGRfaGFuZGxlciwgZikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCB3YXRjaGVyLmF0dGFjaF9sb29wLCBmKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIHdhdGNoZXIuY2xvc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgd2F0Y2hlci5fX2VudGVyX18pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgd2F0Y2hlci5fX2V4aXRfXywgZiwgZiwgZikKKworCitjbGFzcyBCYXNlQ2hpbGRXYXRjaGVyVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfbm90X2ltcGxlbWVudGVkKHNlbGYpOgorICAgICAgICBmID0gbW9jay5Nb2NrKCkKKyAgICAgICAgd2F0Y2hlciA9IHVuaXhfZXZlbnRzLkJhc2VDaGlsZFdhdGNoZXIoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIHdhdGNoZXIuX2RvX3dhaXRwaWQsIGYpCisKKworV2FpdFBpZE1vY2tzID0gY29sbGVjdGlvbnMubmFtZWR0dXBsZSgiV2FpdFBpZE1vY2tzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJ3YWl0cGlkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJXSUZFWElURUQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIldJRlNJR05BTEVEIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJXRVhJVFNUQVRVUyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiV1RFUk1TSUciLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSkKKworCitjbGFzcyBDaGlsZFdhdGNoZXJUZXN0c01peGluOgorCisgICAgaWdub3JlX3dhcm5pbmdzID0gbW9jay5wYXRjaC5vYmplY3QobG9nLmxvZ2dlciwgIndhcm5pbmciKQorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AgPSBzZWxmLm5ld190ZXN0X2xvb3AoKQorICAgICAgICBzZWxmLnJ1bm5pbmcgPSBGYWxzZQorICAgICAgICBzZWxmLnpvbWJpZXMgPSB7fQorCisgICAgICAgIHdpdGggbW9jay5wYXRjaC5vYmplY3QoCisgICAgICAgICAgICAgICAgc2VsZi5sb29wLCAiYWRkX3NpZ25hbF9oYW5kbGVyIikgYXMgc2VsZi5tX2FkZF9zaWduYWxfaGFuZGxlcjoKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlciA9IHNlbGYuY3JlYXRlX3dhdGNoZXIoKQorICAgICAgICAgICAgc2VsZi53YXRjaGVyLmF0dGFjaF9sb29wKHNlbGYubG9vcCkKKworICAgIGRlZiB3YWl0cGlkKHNlbGYsIHBpZCwgZmxhZ3MpOgorICAgICAgICBpZiBpc2luc3RhbmNlKHNlbGYud2F0Y2hlciwgYXN5bmNpby5TYWZlQ2hpbGRXYXRjaGVyKSBvciBwaWQgIT0gLTE6CisgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIocGlkLCAwKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBwaWQgPCAwOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnpvbWJpZXMucG9waXRlbSgpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBwaWQsIHNlbGYuem9tYmllcy5wb3AocGlkKQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGlmIHNlbGYucnVubmluZzoKKyAgICAgICAgICAgIHJldHVybiAwLCAwCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBDaGlsZFByb2Nlc3NFcnJvcigpCisKKyAgICBkZWYgYWRkX3pvbWJpZShzZWxmLCBwaWQsIHJldHVybmNvZGUpOgorICAgICAgICBzZWxmLnpvbWJpZXNbcGlkXSA9IHJldHVybmNvZGUgKyAzMjc2OAorCisgICAgZGVmIFdJRkVYSVRFRChzZWxmLCBzdGF0dXMpOgorICAgICAgICByZXR1cm4gc3RhdHVzID49IDMyNzY4CisKKyAgICBkZWYgV0lGU0lHTkFMRUQoc2VsZiwgc3RhdHVzKToKKyAgICAgICAgcmV0dXJuIDMyNzAwIDwgc3RhdHVzIDwgMzI3NjgKKworICAgIGRlZiBXRVhJVFNUQVRVUyhzZWxmLCBzdGF0dXMpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5XSUZFWElURUQoc3RhdHVzKSkKKyAgICAgICAgcmV0dXJuIHN0YXR1cyAtIDMyNzY4CisKKyAgICBkZWYgV1RFUk1TSUcoc2VsZiwgc3RhdHVzKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuV0lGU0lHTkFMRUQoc3RhdHVzKSkKKyAgICAgICAgcmV0dXJuIDMyNzY4IC0gc3RhdHVzCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfd2F0Y2hlcihzZWxmKToKKyAgICAgICAgc2VsZi5tX2FkZF9zaWduYWxfaGFuZGxlci5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgKKyAgICAgICAgICAgIHNpZ25hbC5TSUdDSExELCBzZWxmLndhdGNoZXIuX3NpZ19jaGxkKQorCisgICAgZGVmIHdhaXRwaWRfbW9ja3MoZnVuYyk6CisgICAgICAgIGRlZiB3cmFwcGVkX2Z1bmMoc2VsZik6CisgICAgICAgICAgICBkZWYgcGF0Y2godGFyZ2V0LCB3cmFwcGVyKToKKyAgICAgICAgICAgICAgICByZXR1cm4gbW9jay5wYXRjaCh0YXJnZXQsIHdyYXBzPXdyYXBwZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3X2NhbGxhYmxlPW1vY2suTW9jaykKKworICAgICAgICAgICAgd2l0aCBwYXRjaCgnb3MuV1RFUk1TSUcnLCBzZWxmLldURVJNU0lHKSBhcyBtX1dURVJNU0lHLCBcCisgICAgICAgICAgICAgICAgIHBhdGNoKCdvcy5XRVhJVFNUQVRVUycsIHNlbGYuV0VYSVRTVEFUVVMpIGFzIG1fV0VYSVRTVEFUVVMsIFwKKyAgICAgICAgICAgICAgICAgcGF0Y2goJ29zLldJRlNJR05BTEVEJywgc2VsZi5XSUZTSUdOQUxFRCkgYXMgbV9XSUZTSUdOQUxFRCwgXAorICAgICAgICAgICAgICAgICBwYXRjaCgnb3MuV0lGRVhJVEVEJywgc2VsZi5XSUZFWElURUQpIGFzIG1fV0lGRVhJVEVELCBcCisgICAgICAgICAgICAgICAgIHBhdGNoKCdvcy53YWl0cGlkJywgc2VsZi53YWl0cGlkKSBhcyBtX3dhaXRwaWQ6CisgICAgICAgICAgICAgICAgZnVuYyhzZWxmLCBXYWl0UGlkTW9ja3MobV93YWl0cGlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fV0lGRVhJVEVELCBtX1dJRlNJR05BTEVELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fV0VYSVRTVEFUVVMsIG1fV1RFUk1TSUcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSkKKyAgICAgICAgcmV0dXJuIHdyYXBwZWRfZnVuYworCisgICAgQHdhaXRwaWRfbW9ja3MKKyAgICBkZWYgdGVzdF9zaWdjaGxkKHNlbGYsIG0pOgorICAgICAgICAjIHJlZ2lzdGVyIGEgY2hpbGQKKyAgICAgICAgY2FsbGJhY2sgPSBtb2NrLk1vY2soKQorCisgICAgICAgIHdpdGggc2VsZi53YXRjaGVyOgorICAgICAgICAgICAgc2VsZi5ydW5uaW5nID0gVHJ1ZQorICAgICAgICAgICAgc2VsZi53YXRjaGVyLmFkZF9jaGlsZF9oYW5kbGVyKDQyLCBjYWxsYmFjaywgOSwgMTAsIDE0KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2suY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0lGRVhJVEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldJRlNJR05BTEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldFWElUU1RBVFVTLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldURVJNU0lHLmNhbGxlZCkKKworICAgICAgICAjIGNoaWxkIGlzIHJ1bm5pbmcKKyAgICAgICAgc2VsZi53YXRjaGVyLl9zaWdfY2hsZCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjay5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XSUZFWElURUQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0lGU0lHTkFMRUQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0VYSVRTVEFUVVMuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV1RFUk1TSUcuY2FsbGVkKQorCisgICAgICAgICMgY2hpbGQgdGVybWluYXRlcyAocmV0dXJuY29kZSAxMikKKyAgICAgICAgc2VsZi5ydW5uaW5nID0gRmFsc2UKKyAgICAgICAgc2VsZi5hZGRfem9tYmllKDQyLCAxMikKKyAgICAgICAgc2VsZi53YXRjaGVyLl9zaWdfY2hsZCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG0uV0lGRVhJVEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG0uV0VYSVRTVEFUVVMuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV1RFUk1TSUcuY2FsbGVkKQorICAgICAgICBjYWxsYmFjay5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCg0MiwgMTIsIDksIDEwLCAxNCkKKworICAgICAgICBtLldJRlNJR05BTEVELnJlc2V0X21vY2soKQorICAgICAgICBtLldJRkVYSVRFRC5yZXNldF9tb2NrKCkKKyAgICAgICAgbS5XRVhJVFNUQVRVUy5yZXNldF9tb2NrKCkKKyAgICAgICAgY2FsbGJhY2sucmVzZXRfbW9jaygpCisKKyAgICAgICAgIyBlbnN1cmUgdGhhdCB0aGUgY2hpbGQgaXMgZWZmZWN0aXZlbHkgcmVhcGVkCisgICAgICAgIHNlbGYuYWRkX3pvbWJpZSg0MiwgMTMpCisgICAgICAgIHdpdGggc2VsZi5pZ25vcmVfd2FybmluZ3M6CisgICAgICAgICAgICBzZWxmLndhdGNoZXIuX3NpZ19jaGxkKCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldURVJNU0lHLmNhbGxlZCkKKworICAgICAgICBtLldJRlNJR05BTEVELnJlc2V0X21vY2soKQorICAgICAgICBtLldJRkVYSVRFRC5yZXNldF9tb2NrKCkKKyAgICAgICAgbS5XRVhJVFNUQVRVUy5yZXNldF9tb2NrKCkKKworICAgICAgICAjIHNpZ2NobGQgY2FsbGVkIGFnYWluCisgICAgICAgIHNlbGYuem9tYmllcy5jbGVhcigpCisgICAgICAgIHNlbGYud2F0Y2hlci5fc2lnX2NobGQoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2suY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0lGRVhJVEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldJRlNJR05BTEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldFWElUU1RBVFVTLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldURVJNU0lHLmNhbGxlZCkKKworICAgIEB3YWl0cGlkX21vY2tzCisgICAgZGVmIHRlc3Rfc2lnY2hsZF90d29fY2hpbGRyZW4oc2VsZiwgbSk6CisgICAgICAgIGNhbGxiYWNrMSA9IG1vY2suTW9jaygpCisgICAgICAgIGNhbGxiYWNrMiA9IG1vY2suTW9jaygpCisKKyAgICAgICAgIyByZWdpc3RlciBjaGlsZCAxCisgICAgICAgIHdpdGggc2VsZi53YXRjaGVyOgorICAgICAgICAgICAgc2VsZi5ydW5uaW5nID0gVHJ1ZQorICAgICAgICAgICAgc2VsZi53YXRjaGVyLmFkZF9jaGlsZF9oYW5kbGVyKDQzLCBjYWxsYmFjazEsIDcsIDgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjazEuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrMi5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XSUZFWElURUQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0lGU0lHTkFMRUQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0VYSVRTVEFUVVMuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV1RFUk1TSUcuY2FsbGVkKQorCisgICAgICAgICMgcmVnaXN0ZXIgY2hpbGQgMgorICAgICAgICB3aXRoIHNlbGYud2F0Y2hlcjoKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5hZGRfY2hpbGRfaGFuZGxlcig0NCwgY2FsbGJhY2syLCAxNDcsIDE4KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2sxLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjazIuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0lGRVhJVEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldJRlNJR05BTEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldFWElUU1RBVFVTLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldURVJNU0lHLmNhbGxlZCkKKworICAgICAgICAjIGNoaWxkcmVuIGFyZSBydW5uaW5nCisgICAgICAgIHNlbGYud2F0Y2hlci5fc2lnX2NobGQoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2sxLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjazIuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0lGRVhJVEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldJRlNJR05BTEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldFWElUU1RBVFVTLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldURVJNU0lHLmNhbGxlZCkKKworICAgICAgICAjIGNoaWxkIDEgdGVybWluYXRlcyAoc2lnbmFsIDMpCisgICAgICAgIHNlbGYuYWRkX3pvbWJpZSg0MywgLTMpCisgICAgICAgIHNlbGYud2F0Y2hlci5fc2lnX2NobGQoKQorCisgICAgICAgIGNhbGxiYWNrMS5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCg0MywgLTMsIDcsIDgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2syLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG0uV0lGU0lHTkFMRUQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0VYSVRTVEFUVVMuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobS5XVEVSTVNJRy5jYWxsZWQpCisKKyAgICAgICAgbS5XSUZTSUdOQUxFRC5yZXNldF9tb2NrKCkKKyAgICAgICAgbS5XSUZFWElURUQucmVzZXRfbW9jaygpCisgICAgICAgIG0uV1RFUk1TSUcucmVzZXRfbW9jaygpCisgICAgICAgIGNhbGxiYWNrMS5yZXNldF9tb2NrKCkKKworICAgICAgICAjIGNoaWxkIDIgc3RpbGwgcnVubmluZworICAgICAgICBzZWxmLndhdGNoZXIuX3NpZ19jaGxkKCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrMS5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2syLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldJRkVYSVRFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XSUZTSUdOQUxFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XRVhJVFNUQVRVUy5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XVEVSTVNJRy5jYWxsZWQpCisKKyAgICAgICAgIyBjaGlsZCAyIHRlcm1pbmF0ZXMgKGNvZGUgMTA4KQorICAgICAgICBzZWxmLmFkZF96b21iaWUoNDQsIDEwOCkKKyAgICAgICAgc2VsZi5ydW5uaW5nID0gRmFsc2UKKyAgICAgICAgc2VsZi53YXRjaGVyLl9zaWdfY2hsZCgpCisKKyAgICAgICAgY2FsbGJhY2syLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKDQ0LCAxMDgsIDE0NywgMTgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2sxLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG0uV0lGRVhJVEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG0uV0VYSVRTVEFUVVMuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV1RFUk1TSUcuY2FsbGVkKQorCisgICAgICAgIG0uV0lGU0lHTkFMRUQucmVzZXRfbW9jaygpCisgICAgICAgIG0uV0lGRVhJVEVELnJlc2V0X21vY2soKQorICAgICAgICBtLldFWElUU1RBVFVTLnJlc2V0X21vY2soKQorICAgICAgICBjYWxsYmFjazIucmVzZXRfbW9jaygpCisKKyAgICAgICAgIyBlbnN1cmUgdGhhdCB0aGUgY2hpbGRyZW4gYXJlIGVmZmVjdGl2ZWx5IHJlYXBlZAorICAgICAgICBzZWxmLmFkZF96b21iaWUoNDMsIDE0KQorICAgICAgICBzZWxmLmFkZF96b21iaWUoNDQsIDE1KQorICAgICAgICB3aXRoIHNlbGYuaWdub3JlX3dhcm5pbmdzOgorICAgICAgICAgICAgc2VsZi53YXRjaGVyLl9zaWdfY2hsZCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjazEuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrMi5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XVEVSTVNJRy5jYWxsZWQpCisKKyAgICAgICAgbS5XSUZTSUdOQUxFRC5yZXNldF9tb2NrKCkKKyAgICAgICAgbS5XSUZFWElURUQucmVzZXRfbW9jaygpCisgICAgICAgIG0uV0VYSVRTVEFUVVMucmVzZXRfbW9jaygpCisKKyAgICAgICAgIyBzaWdjaGxkIGNhbGxlZCBhZ2FpbgorICAgICAgICBzZWxmLnpvbWJpZXMuY2xlYXIoKQorICAgICAgICBzZWxmLndhdGNoZXIuX3NpZ19jaGxkKCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrMS5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2syLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldJRkVYSVRFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XSUZTSUdOQUxFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XRVhJVFNUQVRVUy5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XVEVSTVNJRy5jYWxsZWQpCisKKyAgICBAd2FpdHBpZF9tb2NrcworICAgIGRlZiB0ZXN0X3NpZ2NobGRfdHdvX2NoaWxkcmVuX3Rlcm1pbmF0aW5nX3RvZ2V0aGVyKHNlbGYsIG0pOgorICAgICAgICBjYWxsYmFjazEgPSBtb2NrLk1vY2soKQorICAgICAgICBjYWxsYmFjazIgPSBtb2NrLk1vY2soKQorCisgICAgICAgICMgcmVnaXN0ZXIgY2hpbGQgMQorICAgICAgICB3aXRoIHNlbGYud2F0Y2hlcjoKKyAgICAgICAgICAgIHNlbGYucnVubmluZyA9IFRydWUKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5hZGRfY2hpbGRfaGFuZGxlcig0NSwgY2FsbGJhY2sxLCAxNywgOCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrMS5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2syLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldJRkVYSVRFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XSUZTSUdOQUxFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XRVhJVFNUQVRVUy5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XVEVSTVNJRy5jYWxsZWQpCisKKyAgICAgICAgIyByZWdpc3RlciBjaGlsZCAyCisgICAgICAgIHdpdGggc2VsZi53YXRjaGVyOgorICAgICAgICAgICAgc2VsZi53YXRjaGVyLmFkZF9jaGlsZF9oYW5kbGVyKDQ2LCBjYWxsYmFjazIsIDExNDcsIDE4KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2sxLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjazIuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0lGRVhJVEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldJRlNJR05BTEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldFWElUU1RBVFVTLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldURVJNU0lHLmNhbGxlZCkKKworICAgICAgICAjIGNoaWxkcmVuIGFyZSBydW5uaW5nCisgICAgICAgIHNlbGYud2F0Y2hlci5fc2lnX2NobGQoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2sxLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjazIuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0lGRVhJVEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldJRlNJR05BTEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldFWElUU1RBVFVTLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldURVJNU0lHLmNhbGxlZCkKKworICAgICAgICAjIGNoaWxkIDEgdGVybWluYXRlcyAoY29kZSA3OCkKKyAgICAgICAgIyBjaGlsZCAyIHRlcm1pbmF0ZXMgKHNpZ25hbCA1KQorICAgICAgICBzZWxmLmFkZF96b21iaWUoNDUsIDc4KQorICAgICAgICBzZWxmLmFkZF96b21iaWUoNDYsIC01KQorICAgICAgICBzZWxmLnJ1bm5pbmcgPSBGYWxzZQorICAgICAgICBzZWxmLndhdGNoZXIuX3NpZ19jaGxkKCkKKworICAgICAgICBjYWxsYmFjazEuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoNDUsIDc4LCAxNywgOCkKKyAgICAgICAgY2FsbGJhY2syLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKDQ2LCAtNSwgMTE0NywgMTgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtLldJRlNJR05BTEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG0uV0lGRVhJVEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG0uV0VYSVRTVEFUVVMuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobS5XVEVSTVNJRy5jYWxsZWQpCisKKyAgICAgICAgbS5XSUZTSUdOQUxFRC5yZXNldF9tb2NrKCkKKyAgICAgICAgbS5XSUZFWElURUQucmVzZXRfbW9jaygpCisgICAgICAgIG0uV1RFUk1TSUcucmVzZXRfbW9jaygpCisgICAgICAgIG0uV0VYSVRTVEFUVVMucmVzZXRfbW9jaygpCisgICAgICAgIGNhbGxiYWNrMS5yZXNldF9tb2NrKCkKKyAgICAgICAgY2FsbGJhY2syLnJlc2V0X21vY2soKQorCisgICAgICAgICMgZW5zdXJlIHRoYXQgdGhlIGNoaWxkcmVuIGFyZSBlZmZlY3RpdmVseSByZWFwZWQKKyAgICAgICAgc2VsZi5hZGRfem9tYmllKDQ1LCAxNCkKKyAgICAgICAgc2VsZi5hZGRfem9tYmllKDQ2LCAxNSkKKyAgICAgICAgd2l0aCBzZWxmLmlnbm9yZV93YXJuaW5nczoKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5fc2lnX2NobGQoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2sxLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjazIuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV1RFUk1TSUcuY2FsbGVkKQorCisgICAgQHdhaXRwaWRfbW9ja3MKKyAgICBkZWYgdGVzdF9zaWdjaGxkX3JhY2VfY29uZGl0aW9uKHNlbGYsIG0pOgorICAgICAgICAjIHJlZ2lzdGVyIGEgY2hpbGQKKyAgICAgICAgY2FsbGJhY2sgPSBtb2NrLk1vY2soKQorCisgICAgICAgIHdpdGggc2VsZi53YXRjaGVyOgorICAgICAgICAgICAgIyBjaGlsZCB0ZXJtaW5hdGVzIGJlZm9yZSBiZWluZyByZWdpc3RlcmVkCisgICAgICAgICAgICBzZWxmLmFkZF96b21iaWUoNTAsIDQpCisgICAgICAgICAgICBzZWxmLndhdGNoZXIuX3NpZ19jaGxkKCkKKworICAgICAgICAgICAgc2VsZi53YXRjaGVyLmFkZF9jaGlsZF9oYW5kbGVyKDUwLCBjYWxsYmFjaywgMSwgMTIpCisKKyAgICAgICAgY2FsbGJhY2suYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoNTAsIDQsIDEsIDEyKQorICAgICAgICBjYWxsYmFjay5yZXNldF9tb2NrKCkKKworICAgICAgICAjIGVuc3VyZSB0aGF0IHRoZSBjaGlsZCBpcyBlZmZlY3RpdmVseSByZWFwZWQKKyAgICAgICAgc2VsZi5hZGRfem9tYmllKDUwLCAtMSkKKyAgICAgICAgd2l0aCBzZWxmLmlnbm9yZV93YXJuaW5nczoKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5fc2lnX2NobGQoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2suY2FsbGVkKQorCisgICAgQHdhaXRwaWRfbW9ja3MKKyAgICBkZWYgdGVzdF9zaWdjaGxkX3JlcGxhY2VfaGFuZGxlcihzZWxmLCBtKToKKyAgICAgICAgY2FsbGJhY2sxID0gbW9jay5Nb2NrKCkKKyAgICAgICAgY2FsbGJhY2syID0gbW9jay5Nb2NrKCkKKworICAgICAgICAjIHJlZ2lzdGVyIGEgY2hpbGQKKyAgICAgICAgd2l0aCBzZWxmLndhdGNoZXI6CisgICAgICAgICAgICBzZWxmLnJ1bm5pbmcgPSBUcnVlCisgICAgICAgICAgICBzZWxmLndhdGNoZXIuYWRkX2NoaWxkX2hhbmRsZXIoNTEsIGNhbGxiYWNrMSwgMTkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjazEuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrMi5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XSUZFWElURUQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0lGU0lHTkFMRUQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0VYSVRTVEFUVVMuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV1RFUk1TSUcuY2FsbGVkKQorCisgICAgICAgICMgcmVnaXN0ZXIgdGhlIHNhbWUgY2hpbGQgYWdhaW4KKyAgICAgICAgd2l0aCBzZWxmLndhdGNoZXI6CisgICAgICAgICAgICBzZWxmLndhdGNoZXIuYWRkX2NoaWxkX2hhbmRsZXIoNTEsIGNhbGxiYWNrMiwgMjEpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjazEuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrMi5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XSUZFWElURUQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0lGU0lHTkFMRUQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0VYSVRTVEFUVVMuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV1RFUk1TSUcuY2FsbGVkKQorCisgICAgICAgICMgY2hpbGQgdGVybWluYXRlcyAoc2lnbmFsIDgpCisgICAgICAgIHNlbGYucnVubmluZyA9IEZhbHNlCisgICAgICAgIHNlbGYuYWRkX3pvbWJpZSg1MSwgLTgpCisgICAgICAgIHNlbGYud2F0Y2hlci5fc2lnX2NobGQoKQorCisgICAgICAgIGNhbGxiYWNrMi5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCg1MSwgLTgsIDIxKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrMS5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtLldJRlNJR05BTEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldFWElUU1RBVFVTLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG0uV1RFUk1TSUcuY2FsbGVkKQorCisgICAgICAgIG0uV0lGU0lHTkFMRUQucmVzZXRfbW9jaygpCisgICAgICAgIG0uV0lGRVhJVEVELnJlc2V0X21vY2soKQorICAgICAgICBtLldURVJNU0lHLnJlc2V0X21vY2soKQorICAgICAgICBjYWxsYmFjazIucmVzZXRfbW9jaygpCisKKyAgICAgICAgIyBlbnN1cmUgdGhhdCB0aGUgY2hpbGQgaXMgZWZmZWN0aXZlbHkgcmVhcGVkCisgICAgICAgIHNlbGYuYWRkX3pvbWJpZSg1MSwgMTMpCisgICAgICAgIHdpdGggc2VsZi5pZ25vcmVfd2FybmluZ3M6CisgICAgICAgICAgICBzZWxmLndhdGNoZXIuX3NpZ19jaGxkKCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrMS5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2syLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldURVJNU0lHLmNhbGxlZCkKKworICAgIEB3YWl0cGlkX21vY2tzCisgICAgZGVmIHRlc3Rfc2lnY2hsZF9yZW1vdmVfaGFuZGxlcihzZWxmLCBtKToKKyAgICAgICAgY2FsbGJhY2sgPSBtb2NrLk1vY2soKQorCisgICAgICAgICMgcmVnaXN0ZXIgYSBjaGlsZAorICAgICAgICB3aXRoIHNlbGYud2F0Y2hlcjoKKyAgICAgICAgICAgIHNlbGYucnVubmluZyA9IFRydWUKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5hZGRfY2hpbGRfaGFuZGxlcig1MiwgY2FsbGJhY2ssIDE5ODQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjay5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XSUZFWElURUQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0lGU0lHTkFMRUQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0VYSVRTVEFUVVMuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV1RFUk1TSUcuY2FsbGVkKQorCisgICAgICAgICMgdW5yZWdpc3RlciB0aGUgY2hpbGQKKyAgICAgICAgc2VsZi53YXRjaGVyLnJlbW92ZV9jaGlsZF9oYW5kbGVyKDUyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2suY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0lGRVhJVEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldJRlNJR05BTEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldFWElUU1RBVFVTLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldURVJNU0lHLmNhbGxlZCkKKworICAgICAgICAjIGNoaWxkIHRlcm1pbmF0ZXMgKGNvZGUgOTkpCisgICAgICAgIHNlbGYucnVubmluZyA9IEZhbHNlCisgICAgICAgIHNlbGYuYWRkX3pvbWJpZSg1MiwgOTkpCisgICAgICAgIHdpdGggc2VsZi5pZ25vcmVfd2FybmluZ3M6CisgICAgICAgICAgICBzZWxmLndhdGNoZXIuX3NpZ19jaGxkKCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrLmNhbGxlZCkKKworICAgIEB3YWl0cGlkX21vY2tzCisgICAgZGVmIHRlc3Rfc2lnY2hsZF91bmtub3duX3N0YXR1cyhzZWxmLCBtKToKKyAgICAgICAgY2FsbGJhY2sgPSBtb2NrLk1vY2soKQorCisgICAgICAgICMgcmVnaXN0ZXIgYSBjaGlsZAorICAgICAgICB3aXRoIHNlbGYud2F0Y2hlcjoKKyAgICAgICAgICAgIHNlbGYucnVubmluZyA9IFRydWUKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5hZGRfY2hpbGRfaGFuZGxlcig1MywgY2FsbGJhY2ssIC0xOSkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldJRkVYSVRFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XSUZTSUdOQUxFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XRVhJVFNUQVRVUy5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XVEVSTVNJRy5jYWxsZWQpCisKKyAgICAgICAgIyB0ZXJtaW5hdGUgd2l0aCB1bmtub3duIHN0YXR1cworICAgICAgICBzZWxmLnpvbWJpZXNbNTNdID0gMTE3OAorICAgICAgICBzZWxmLnJ1bm5pbmcgPSBGYWxzZQorICAgICAgICBzZWxmLndhdGNoZXIuX3NpZ19jaGxkKCkKKworICAgICAgICBjYWxsYmFjay5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCg1MywgMTE3OCwgLTE5KQorICAgICAgICBzZWxmLmFzc2VydFRydWUobS5XSUZFWElURUQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobS5XSUZTSUdOQUxFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XRVhJVFNUQVRVUy5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XVEVSTVNJRy5jYWxsZWQpCisKKyAgICAgICAgY2FsbGJhY2sucmVzZXRfbW9jaygpCisgICAgICAgIG0uV0lGRVhJVEVELnJlc2V0X21vY2soKQorICAgICAgICBtLldJRlNJR05BTEVELnJlc2V0X21vY2soKQorCisgICAgICAgICMgZW5zdXJlIHRoYXQgdGhlIGNoaWxkIGlzIGVmZmVjdGl2ZWx5IHJlYXBlZAorICAgICAgICBzZWxmLmFkZF96b21iaWUoNTMsIDEwMSkKKyAgICAgICAgd2l0aCBzZWxmLmlnbm9yZV93YXJuaW5nczoKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5fc2lnX2NobGQoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2suY2FsbGVkKQorCisgICAgQHdhaXRwaWRfbW9ja3MKKyAgICBkZWYgdGVzdF9yZW1vdmVfY2hpbGRfaGFuZGxlcihzZWxmLCBtKToKKyAgICAgICAgY2FsbGJhY2sxID0gbW9jay5Nb2NrKCkKKyAgICAgICAgY2FsbGJhY2syID0gbW9jay5Nb2NrKCkKKyAgICAgICAgY2FsbGJhY2szID0gbW9jay5Nb2NrKCkKKworICAgICAgICAjIHJlZ2lzdGVyIGNoaWxkcmVuCisgICAgICAgIHdpdGggc2VsZi53YXRjaGVyOgorICAgICAgICAgICAgc2VsZi5ydW5uaW5nID0gVHJ1ZQorICAgICAgICAgICAgc2VsZi53YXRjaGVyLmFkZF9jaGlsZF9oYW5kbGVyKDU0LCBjYWxsYmFjazEsIDEpCisgICAgICAgICAgICBzZWxmLndhdGNoZXIuYWRkX2NoaWxkX2hhbmRsZXIoNTUsIGNhbGxiYWNrMiwgMikKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5hZGRfY2hpbGRfaGFuZGxlcig1NiwgY2FsbGJhY2szLCAzKQorCisgICAgICAgICMgcmVtb3ZlIGNoaWxkIGhhbmRsZXIgMQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi53YXRjaGVyLnJlbW92ZV9jaGlsZF9oYW5kbGVyKDU0KSkKKworICAgICAgICAjIHJlbW92ZSBjaGlsZCBoYW5kbGVyIDIgbXVsdGlwbGUgdGltZXMKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYud2F0Y2hlci5yZW1vdmVfY2hpbGRfaGFuZGxlcig1NSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi53YXRjaGVyLnJlbW92ZV9jaGlsZF9oYW5kbGVyKDU1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLndhdGNoZXIucmVtb3ZlX2NoaWxkX2hhbmRsZXIoNTUpKQorCisgICAgICAgICMgYWxsIGNoaWxkcmVuIHRlcm1pbmF0ZQorICAgICAgICBzZWxmLmFkZF96b21iaWUoNTQsIDApCisgICAgICAgIHNlbGYuYWRkX3pvbWJpZSg1NSwgMSkKKyAgICAgICAgc2VsZi5hZGRfem9tYmllKDU2LCAyKQorICAgICAgICBzZWxmLnJ1bm5pbmcgPSBGYWxzZQorICAgICAgICB3aXRoIHNlbGYuaWdub3JlX3dhcm5pbmdzOgorICAgICAgICAgICAgc2VsZi53YXRjaGVyLl9zaWdfY2hsZCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjazEuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrMi5jYWxsZWQpCisgICAgICAgIGNhbGxiYWNrMy5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCg1NiwgMiwgMykKKworICAgIEB3YWl0cGlkX21vY2tzCisgICAgZGVmIHRlc3Rfc2lnY2hsZF91bmhhbmRsZWRfZXhjZXB0aW9uKHNlbGYsIG0pOgorICAgICAgICBjYWxsYmFjayA9IG1vY2suTW9jaygpCisKKyAgICAgICAgIyByZWdpc3RlciBhIGNoaWxkCisgICAgICAgIHdpdGggc2VsZi53YXRjaGVyOgorICAgICAgICAgICAgc2VsZi5ydW5uaW5nID0gVHJ1ZQorICAgICAgICAgICAgc2VsZi53YXRjaGVyLmFkZF9jaGlsZF9oYW5kbGVyKDU3LCBjYWxsYmFjaykKKworICAgICAgICAjIHJhaXNlIGFuIGV4Y2VwdGlvbgorICAgICAgICBtLndhaXRwaWQuc2lkZV9lZmZlY3QgPSBWYWx1ZUVycm9yCisKKyAgICAgICAgd2l0aCBtb2NrLnBhdGNoLm9iamVjdChsb2cubG9nZ2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlcnJvcicpIGFzIG1fZXJyb3I6CisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi53YXRjaGVyLl9zaWdfY2hsZCgpLCBOb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1fZXJyb3IuY2FsbGVkKQorCisgICAgQHdhaXRwaWRfbW9ja3MKKyAgICBkZWYgdGVzdF9zaWdjaGxkX2NoaWxkX3JlYXBlZF9lbHNld2hlcmUoc2VsZiwgbSk6CisgICAgICAgICMgcmVnaXN0ZXIgYSBjaGlsZAorICAgICAgICBjYWxsYmFjayA9IG1vY2suTW9jaygpCisKKyAgICAgICAgd2l0aCBzZWxmLndhdGNoZXI6CisgICAgICAgICAgICBzZWxmLnJ1bm5pbmcgPSBUcnVlCisgICAgICAgICAgICBzZWxmLndhdGNoZXIuYWRkX2NoaWxkX2hhbmRsZXIoNTgsIGNhbGxiYWNrKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2suY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0lGRVhJVEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldJRlNJR05BTEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldFWElUU1RBVFVTLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldURVJNU0lHLmNhbGxlZCkKKworICAgICAgICAjIGNoaWxkIHRlcm1pbmF0ZXMKKyAgICAgICAgc2VsZi5ydW5uaW5nID0gRmFsc2UKKyAgICAgICAgc2VsZi5hZGRfem9tYmllKDU4LCA0KQorCisgICAgICAgICMgd2FpdHBpZCBpcyBjYWxsZWQgZWxzZXdoZXJlCisgICAgICAgIG9zLndhaXRwaWQoNTgsIG9zLldOT0hBTkcpCisKKyAgICAgICAgbS53YWl0cGlkLnJlc2V0X21vY2soKQorCisgICAgICAgICMgc2lnY2hsZAorICAgICAgICB3aXRoIHNlbGYuaWdub3JlX3dhcm5pbmdzOgorICAgICAgICAgICAgc2VsZi53YXRjaGVyLl9zaWdfY2hsZCgpCisKKyAgICAgICAgaWYgaXNpbnN0YW5jZShzZWxmLndhdGNoZXIsIGFzeW5jaW8uRmFzdENoaWxkV2F0Y2hlcik6CisgICAgICAgICAgICAjIGhlcmUgdGhlIEZhc3RDaGlsZFdhdGNoZSBlbnRlcnMgYSBkZWFkbG9jaworICAgICAgICAgICAgIyAodGhlcmUgaXMgbm8gd2F5IHRvIHByZXZlbnQgaXQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrLmNhbGxlZCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNhbGxiYWNrLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKDU4LCAyNTUpCisKKyAgICBAd2FpdHBpZF9tb2NrcworICAgIGRlZiB0ZXN0X3NpZ2NobGRfdW5rbm93bl9waWRfZHVyaW5nX3JlZ2lzdHJhdGlvbihzZWxmLCBtKToKKyAgICAgICAgIyByZWdpc3RlciB0d28gY2hpbGRyZW4KKyAgICAgICAgY2FsbGJhY2sxID0gbW9jay5Nb2NrKCkKKyAgICAgICAgY2FsbGJhY2syID0gbW9jay5Nb2NrKCkKKworICAgICAgICB3aXRoIHNlbGYuaWdub3JlX3dhcm5pbmdzLCBzZWxmLndhdGNoZXI6CisgICAgICAgICAgICBzZWxmLnJ1bm5pbmcgPSBUcnVlCisgICAgICAgICAgICAjIGNoaWxkIDEgdGVybWluYXRlcworICAgICAgICAgICAgc2VsZi5hZGRfem9tYmllKDU5MSwgNykKKyAgICAgICAgICAgICMgYW4gdW5rbm93biBjaGlsZCB0ZXJtaW5hdGVzCisgICAgICAgICAgICBzZWxmLmFkZF96b21iaWUoNTkzLCAxNykKKworICAgICAgICAgICAgc2VsZi53YXRjaGVyLl9zaWdfY2hsZCgpCisKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5hZGRfY2hpbGRfaGFuZGxlcig1OTEsIGNhbGxiYWNrMSkKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5hZGRfY2hpbGRfaGFuZGxlcig1OTIsIGNhbGxiYWNrMikKKworICAgICAgICBjYWxsYmFjazEuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoNTkxLCA3KQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrMi5jYWxsZWQpCisKKyAgICBAd2FpdHBpZF9tb2NrcworICAgIGRlZiB0ZXN0X3NldF9sb29wKHNlbGYsIG0pOgorICAgICAgICAjIHJlZ2lzdGVyIGEgY2hpbGQKKyAgICAgICAgY2FsbGJhY2sgPSBtb2NrLk1vY2soKQorCisgICAgICAgIHdpdGggc2VsZi53YXRjaGVyOgorICAgICAgICAgICAgc2VsZi5ydW5uaW5nID0gVHJ1ZQorICAgICAgICAgICAgc2VsZi53YXRjaGVyLmFkZF9jaGlsZF9oYW5kbGVyKDYwLCBjYWxsYmFjaykKKworICAgICAgICAjIGF0dGFjaCBhIG5ldyBsb29wCisgICAgICAgIG9sZF9sb29wID0gc2VsZi5sb29wCisgICAgICAgIHNlbGYubG9vcCA9IHNlbGYubmV3X3Rlc3RfbG9vcCgpCisgICAgICAgIHBhdGNoID0gbW9jay5wYXRjaC5vYmplY3QKKworICAgICAgICB3aXRoIHBhdGNoKG9sZF9sb29wLCAicmVtb3ZlX3NpZ25hbF9oYW5kbGVyIikgYXMgbV9vbGRfcmVtb3ZlLCBcCisgICAgICAgICAgICAgcGF0Y2goc2VsZi5sb29wLCAiYWRkX3NpZ25hbF9oYW5kbGVyIikgYXMgbV9uZXdfYWRkOgorCisgICAgICAgICAgICBzZWxmLndhdGNoZXIuYXR0YWNoX2xvb3Aoc2VsZi5sb29wKQorCisgICAgICAgICAgICBtX29sZF9yZW1vdmUuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoCisgICAgICAgICAgICAgICAgc2lnbmFsLlNJR0NITEQpCisgICAgICAgICAgICBtX25ld19hZGQuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoCisgICAgICAgICAgICAgICAgc2lnbmFsLlNJR0NITEQsIHNlbGYud2F0Y2hlci5fc2lnX2NobGQpCisKKyAgICAgICAgIyBjaGlsZCB0ZXJtaW5hdGVzCisgICAgICAgIHNlbGYucnVubmluZyA9IEZhbHNlCisgICAgICAgIHNlbGYuYWRkX3pvbWJpZSg2MCwgOSkKKyAgICAgICAgc2VsZi53YXRjaGVyLl9zaWdfY2hsZCgpCisKKyAgICAgICAgY2FsbGJhY2suYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoNjAsIDkpCisKKyAgICBAd2FpdHBpZF9tb2NrcworICAgIGRlZiB0ZXN0X3NldF9sb29wX3JhY2VfY29uZGl0aW9uKHNlbGYsIG0pOgorICAgICAgICAjIHJlZ2lzdGVyIDMgY2hpbGRyZW4KKyAgICAgICAgY2FsbGJhY2sxID0gbW9jay5Nb2NrKCkKKyAgICAgICAgY2FsbGJhY2syID0gbW9jay5Nb2NrKCkKKyAgICAgICAgY2FsbGJhY2szID0gbW9jay5Nb2NrKCkKKworICAgICAgICB3aXRoIHNlbGYud2F0Y2hlcjoKKyAgICAgICAgICAgIHNlbGYucnVubmluZyA9IFRydWUKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5hZGRfY2hpbGRfaGFuZGxlcig2MSwgY2FsbGJhY2sxKQorICAgICAgICAgICAgc2VsZi53YXRjaGVyLmFkZF9jaGlsZF9oYW5kbGVyKDYyLCBjYWxsYmFjazIpCisgICAgICAgICAgICBzZWxmLndhdGNoZXIuYWRkX2NoaWxkX2hhbmRsZXIoNjIyLCBjYWxsYmFjazMpCisKKyAgICAgICAgIyBkZXRhY2ggdGhlIGxvb3AKKyAgICAgICAgb2xkX2xvb3AgPSBzZWxmLmxvb3AKKyAgICAgICAgc2VsZi5sb29wID0gTm9uZQorCisgICAgICAgIHdpdGggbW9jay5wYXRjaC5vYmplY3QoCisgICAgICAgICAgICAgICAgb2xkX2xvb3AsICJyZW1vdmVfc2lnbmFsX2hhbmRsZXIiKSBhcyBtX3JlbW92ZV9zaWduYWxfaGFuZGxlcjoKKworICAgICAgICAgICAgc2VsZi53YXRjaGVyLmF0dGFjaF9sb29wKE5vbmUpCisKKyAgICAgICAgICAgIG1fcmVtb3ZlX3NpZ25hbF9oYW5kbGVyLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKAorICAgICAgICAgICAgICAgIHNpZ25hbC5TSUdDSExEKQorCisgICAgICAgICMgY2hpbGQgMSAmIDIgdGVybWluYXRlCisgICAgICAgIHNlbGYuYWRkX3pvbWJpZSg2MSwgMTEpCisgICAgICAgIHNlbGYuYWRkX3pvbWJpZSg2MiwgLTUpCisKKyAgICAgICAgIyBTSUdDSExEIHdhcyBub3QgY2F1Z2h0CisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2sxLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjazIuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrMy5jYWxsZWQpCisKKyAgICAgICAgIyBhdHRhY2ggYSBuZXcgbG9vcAorICAgICAgICBzZWxmLmxvb3AgPSBzZWxmLm5ld190ZXN0X2xvb3AoKQorCisgICAgICAgIHdpdGggbW9jay5wYXRjaC5vYmplY3QoCisgICAgICAgICAgICAgICAgc2VsZi5sb29wLCAiYWRkX3NpZ25hbF9oYW5kbGVyIikgYXMgbV9hZGRfc2lnbmFsX2hhbmRsZXI6CisKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5hdHRhY2hfbG9vcChzZWxmLmxvb3ApCisKKyAgICAgICAgICAgIG1fYWRkX3NpZ25hbF9oYW5kbGVyLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKAorICAgICAgICAgICAgICAgIHNpZ25hbC5TSUdDSExELCBzZWxmLndhdGNoZXIuX3NpZ19jaGxkKQorICAgICAgICAgICAgY2FsbGJhY2sxLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKDYxLCAxMSkgICMgcmFjZSBjb25kaXRpb24hCisgICAgICAgICAgICBjYWxsYmFjazIuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoNjIsIC01KSAgIyByYWNlIGNvbmRpdGlvbiEKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2szLmNhbGxlZCkKKworICAgICAgICBjYWxsYmFjazEucmVzZXRfbW9jaygpCisgICAgICAgIGNhbGxiYWNrMi5yZXNldF9tb2NrKCkKKworICAgICAgICAjIGNoaWxkIDMgdGVybWluYXRlcworICAgICAgICBzZWxmLnJ1bm5pbmcgPSBGYWxzZQorICAgICAgICBzZWxmLmFkZF96b21iaWUoNjIyLCAxOSkKKyAgICAgICAgc2VsZi53YXRjaGVyLl9zaWdfY2hsZCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjazEuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrMi5jYWxsZWQpCisgICAgICAgIGNhbGxiYWNrMy5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCg2MjIsIDE5KQorCisgICAgQHdhaXRwaWRfbW9ja3MKKyAgICBkZWYgdGVzdF9jbG9zZShzZWxmLCBtKToKKyAgICAgICAgIyByZWdpc3RlciB0d28gY2hpbGRyZW4KKyAgICAgICAgY2FsbGJhY2sxID0gbW9jay5Nb2NrKCkKKworICAgICAgICB3aXRoIHNlbGYud2F0Y2hlcjoKKyAgICAgICAgICAgIHNlbGYucnVubmluZyA9IFRydWUKKyAgICAgICAgICAgICMgY2hpbGQgMSB0ZXJtaW5hdGVzCisgICAgICAgICAgICBzZWxmLmFkZF96b21iaWUoNjMsIDkpCisgICAgICAgICAgICAjIG90aGVyIGNoaWxkIHRlcm1pbmF0ZXMKKyAgICAgICAgICAgIHNlbGYuYWRkX3pvbWJpZSg2NSwgMTgpCisgICAgICAgICAgICBzZWxmLndhdGNoZXIuX3NpZ19jaGxkKCkKKworICAgICAgICAgICAgc2VsZi53YXRjaGVyLmFkZF9jaGlsZF9oYW5kbGVyKDYzLCBjYWxsYmFjazEpCisgICAgICAgICAgICBzZWxmLndhdGNoZXIuYWRkX2NoaWxkX2hhbmRsZXIoNjQsIGNhbGxiYWNrMSkKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi53YXRjaGVyLl9jYWxsYmFja3MpLCAxKQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShzZWxmLndhdGNoZXIsIGFzeW5jaW8uRmFzdENoaWxkV2F0Y2hlcik6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi53YXRjaGVyLl96b21iaWVzKSwgMSkKKworICAgICAgICAgICAgd2l0aCBtb2NrLnBhdGNoLm9iamVjdCgKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5sb29wLAorICAgICAgICAgICAgICAgICAgICAicmVtb3ZlX3NpZ25hbF9oYW5kbGVyIikgYXMgbV9yZW1vdmVfc2lnbmFsX2hhbmRsZXI6CisKKyAgICAgICAgICAgICAgICBzZWxmLndhdGNoZXIuY2xvc2UoKQorCisgICAgICAgICAgICAgICAgbV9yZW1vdmVfc2lnbmFsX2hhbmRsZXIuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoCisgICAgICAgICAgICAgICAgICAgIHNpZ25hbC5TSUdDSExEKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi53YXRjaGVyLl9jYWxsYmFja3MpCisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShzZWxmLndhdGNoZXIsIGFzeW5jaW8uRmFzdENoaWxkV2F0Y2hlcik6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi53YXRjaGVyLl96b21iaWVzKQorCisKK2NsYXNzIFNhZmVDaGlsZFdhdGNoZXJUZXN0cyAoQ2hpbGRXYXRjaGVyVGVzdHNNaXhpbiwgdGVzdF91dGlscy5UZXN0Q2FzZSk6CisgICAgZGVmIGNyZWF0ZV93YXRjaGVyKHNlbGYpOgorICAgICAgICByZXR1cm4gYXN5bmNpby5TYWZlQ2hpbGRXYXRjaGVyKCkKKworCitjbGFzcyBGYXN0Q2hpbGRXYXRjaGVyVGVzdHMgKENoaWxkV2F0Y2hlclRlc3RzTWl4aW4sIHRlc3RfdXRpbHMuVGVzdENhc2UpOgorICAgIGRlZiBjcmVhdGVfd2F0Y2hlcihzZWxmKToKKyAgICAgICAgcmV0dXJuIGFzeW5jaW8uRmFzdENoaWxkV2F0Y2hlcigpCisKKworY2xhc3MgUG9saWN5VGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIGNyZWF0ZV9wb2xpY3koc2VsZik6CisgICAgICAgIHJldHVybiBhc3luY2lvLkRlZmF1bHRFdmVudExvb3BQb2xpY3koKQorCisgICAgZGVmIHRlc3RfZ2V0X2NoaWxkX3dhdGNoZXIoc2VsZik6CisgICAgICAgIHBvbGljeSA9IHNlbGYuY3JlYXRlX3BvbGljeSgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHBvbGljeS5fd2F0Y2hlcikKKworICAgICAgICB3YXRjaGVyID0gcG9saWN5LmdldF9jaGlsZF93YXRjaGVyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHdhdGNoZXIsIGFzeW5jaW8uU2FmZUNoaWxkV2F0Y2hlcikKKworICAgICAgICBzZWxmLmFzc2VydElzKHBvbGljeS5fd2F0Y2hlciwgd2F0Y2hlcikKKworICAgICAgICBzZWxmLmFzc2VydElzKHdhdGNoZXIsIHBvbGljeS5nZXRfY2hpbGRfd2F0Y2hlcigpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh3YXRjaGVyLl9sb29wKQorCisgICAgZGVmIHRlc3RfZ2V0X2NoaWxkX3dhdGNoZXJfYWZ0ZXJfc2V0KHNlbGYpOgorICAgICAgICBwb2xpY3kgPSBzZWxmLmNyZWF0ZV9wb2xpY3koKQorICAgICAgICB3YXRjaGVyID0gYXN5bmNpby5GYXN0Q2hpbGRXYXRjaGVyKCkKKworICAgICAgICBwb2xpY3kuc2V0X2NoaWxkX3dhdGNoZXIod2F0Y2hlcikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhwb2xpY3kuX3dhdGNoZXIsIHdhdGNoZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMod2F0Y2hlciwgcG9saWN5LmdldF9jaGlsZF93YXRjaGVyKCkpCisKKyAgICBkZWYgdGVzdF9nZXRfY2hpbGRfd2F0Y2hlcl93aXRoX21haW5sb29wX2V4aXN0aW5nKHNlbGYpOgorICAgICAgICBwb2xpY3kgPSBzZWxmLmNyZWF0ZV9wb2xpY3koKQorICAgICAgICBsb29wID0gcG9saWN5LmdldF9ldmVudF9sb29wKCkKKworICAgICAgICBzZWxmLmFzc2VydElzTm9uZShwb2xpY3kuX3dhdGNoZXIpCisgICAgICAgIHdhdGNoZXIgPSBwb2xpY3kuZ2V0X2NoaWxkX3dhdGNoZXIoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh3YXRjaGVyLCBhc3luY2lvLlNhZmVDaGlsZFdhdGNoZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMod2F0Y2hlci5fbG9vcCwgbG9vcCkKKworICAgICAgICBsb29wLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2dldF9jaGlsZF93YXRjaGVyX3RocmVhZChzZWxmKToKKworICAgICAgICBkZWYgZigpOgorICAgICAgICAgICAgcG9saWN5LnNldF9ldmVudF9sb29wKHBvbGljeS5uZXdfZXZlbnRfbG9vcCgpKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocG9saWN5LmdldF9ldmVudF9sb29wKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXN5bmNpby5BYnN0cmFjdEV2ZW50TG9vcCkKKyAgICAgICAgICAgIHdhdGNoZXIgPSBwb2xpY3kuZ2V0X2NoaWxkX3dhdGNoZXIoKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uod2F0Y2hlciwgYXN5bmNpby5TYWZlQ2hpbGRXYXRjaGVyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUod2F0Y2hlci5fbG9vcCkKKworICAgICAgICAgICAgcG9saWN5LmdldF9ldmVudF9sb29wKCkuY2xvc2UoKQorCisgICAgICAgIHBvbGljeSA9IHNlbGYuY3JlYXRlX3BvbGljeSgpCisKKyAgICAgICAgdGggPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1mKQorICAgICAgICB0aC5zdGFydCgpCisgICAgICAgIHRoLmpvaW4oKQorCisgICAgZGVmIHRlc3RfY2hpbGRfd2F0Y2hlcl9yZXBsYWNlX21haW5sb29wX2V4aXN0aW5nKHNlbGYpOgorICAgICAgICBwb2xpY3kgPSBzZWxmLmNyZWF0ZV9wb2xpY3koKQorICAgICAgICBsb29wID0gcG9saWN5LmdldF9ldmVudF9sb29wKCkKKworICAgICAgICB3YXRjaGVyID0gcG9saWN5LmdldF9jaGlsZF93YXRjaGVyKCkKKworICAgICAgICBzZWxmLmFzc2VydElzKHdhdGNoZXIuX2xvb3AsIGxvb3ApCisKKyAgICAgICAgbmV3X2xvb3AgPSBwb2xpY3kubmV3X2V2ZW50X2xvb3AoKQorICAgICAgICBwb2xpY3kuc2V0X2V2ZW50X2xvb3AobmV3X2xvb3ApCisKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh3YXRjaGVyLl9sb29wLCBuZXdfbG9vcCkKKworICAgICAgICBwb2xpY3kuc2V0X2V2ZW50X2xvb3AoTm9uZSkKKworICAgICAgICBzZWxmLmFzc2VydElzKHdhdGNoZXIuX2xvb3AsIE5vbmUpCisKKyAgICAgICAgbG9vcC5jbG9zZSgpCisgICAgICAgIG5ld19sb29wLmNsb3NlKCkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3Rfd2luZG93c19ldmVudHMucHkgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF93aW5kb3dzX2V2ZW50cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmNmNDAyCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3Rfd2luZG93c19ldmVudHMucHkKQEAgLTAsMCArMSwxNjEgQEAKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIHVuaXR0ZXN0IGltcG9ydCBtb2NrCisKK2lmIHN5cy5wbGF0Zm9ybSAhPSAnd2luMzInOgorICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCdXaW5kb3dzIG9ubHknKQorCitpbXBvcnQgX3dpbmFwaQorCitpbXBvcnQgYXN5bmNpbworZnJvbSBhc3luY2lvIGltcG9ydCBfb3ZlcmxhcHBlZAorZnJvbSBhc3luY2lvIGltcG9ydCB0ZXN0X3V0aWxzCitmcm9tIGFzeW5jaW8gaW1wb3J0IHdpbmRvd3NfZXZlbnRzCisKKworY2xhc3MgVXBwZXJQcm90byhhc3luY2lvLlByb3RvY29sKToKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuYnVmID0gW10KKworICAgIGRlZiBjb25uZWN0aW9uX21hZGUoc2VsZiwgdHJhbnMpOgorICAgICAgICBzZWxmLnRyYW5zID0gdHJhbnMKKworICAgIGRlZiBkYXRhX3JlY2VpdmVkKHNlbGYsIGRhdGEpOgorICAgICAgICBzZWxmLmJ1Zi5hcHBlbmQoZGF0YSkKKyAgICAgICAgaWYgYidcbicgaW4gZGF0YToKKyAgICAgICAgICAgIHNlbGYudHJhbnMud3JpdGUoYicnLmpvaW4oc2VsZi5idWYpLnVwcGVyKCkpCisgICAgICAgICAgICBzZWxmLnRyYW5zLmNsb3NlKCkKKworCitjbGFzcyBQcm9hY3RvclRlc3RzKHRlc3RfdXRpbHMuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AgPSBhc3luY2lvLlByb2FjdG9yRXZlbnRMb29wKCkKKyAgICAgICAgc2VsZi5zZXRfZXZlbnRfbG9vcChzZWxmLmxvb3ApCisKKyAgICBkZWYgdGVzdF9jbG9zZShzZWxmKToKKyAgICAgICAgYSwgYiA9IHNlbGYubG9vcC5fc29ja2V0cGFpcigpCisgICAgICAgIHRyYW5zID0gc2VsZi5sb29wLl9tYWtlX3NvY2tldF90cmFuc3BvcnQoYSwgYXN5bmNpby5Qcm90b2NvbCgpKQorICAgICAgICBmID0gYXN5bmNpby5lbnN1cmVfZnV0dXJlKHNlbGYubG9vcC5zb2NrX3JlY3YoYiwgMTAwKSkKKyAgICAgICAgdHJhbnMuY2xvc2UoKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZXN1bHQoKSwgYicnKQorICAgICAgICBiLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2RvdWJsZV9iaW5kKHNlbGYpOgorICAgICAgICBBRERSRVNTID0gcidcXC5ccGlwZVx0ZXN0X2RvdWJsZV9iaW5kLSVzJyAlIG9zLmdldHBpZCgpCisgICAgICAgIHNlcnZlcjEgPSB3aW5kb3dzX2V2ZW50cy5QaXBlU2VydmVyKEFERFJFU1MpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUGVybWlzc2lvbkVycm9yKToKKyAgICAgICAgICAgIHdpbmRvd3NfZXZlbnRzLlBpcGVTZXJ2ZXIoQUREUkVTUykKKyAgICAgICAgc2VydmVyMS5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9waXBlKHNlbGYpOgorICAgICAgICByZXMgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHNlbGYuX3Rlc3RfcGlwZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywgJ2RvbmUnKQorCisgICAgZGVmIF90ZXN0X3BpcGUoc2VsZik6CisgICAgICAgIEFERFJFU1MgPSByJ1xcLlxwaXBlXF90ZXN0X3BpcGUtJXMnICUgb3MuZ2V0cGlkKCkKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEZpbGVOb3RGb3VuZEVycm9yKToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gc2VsZi5sb29wLmNyZWF0ZV9waXBlX2Nvbm5lY3Rpb24oCisgICAgICAgICAgICAgICAgYXN5bmNpby5Qcm90b2NvbCwgQUREUkVTUykKKworICAgICAgICBbc2VydmVyXSA9IHlpZWxkIGZyb20gc2VsZi5sb29wLnN0YXJ0X3NlcnZpbmdfcGlwZSgKKyAgICAgICAgICAgIFVwcGVyUHJvdG8sIEFERFJFU1MpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzZXJ2ZXIsIHdpbmRvd3NfZXZlbnRzLlBpcGVTZXJ2ZXIpCisKKyAgICAgICAgY2xpZW50cyA9IFtdCisgICAgICAgIGZvciBpIGluIHJhbmdlKDUpOgorICAgICAgICAgICAgc3RyZWFtX3JlYWRlciA9IGFzeW5jaW8uU3RyZWFtUmVhZGVyKGxvb3A9c2VsZi5sb29wKQorICAgICAgICAgICAgcHJvdG9jb2wgPSBhc3luY2lvLlN0cmVhbVJlYWRlclByb3RvY29sKHN0cmVhbV9yZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgICAgICB0cmFucywgcHJvdG8gPSB5aWVsZCBmcm9tIHNlbGYubG9vcC5jcmVhdGVfcGlwZV9jb25uZWN0aW9uKAorICAgICAgICAgICAgICAgIGxhbWJkYTogcHJvdG9jb2wsIEFERFJFU1MpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodHJhbnMsIGFzeW5jaW8uVHJhbnNwb3J0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm90b2NvbCwgcHJvdG8pCisgICAgICAgICAgICBjbGllbnRzLmFwcGVuZCgoc3RyZWFtX3JlYWRlciwgdHJhbnMpKQorCisgICAgICAgIGZvciBpLCAociwgdykgaW4gZW51bWVyYXRlKGNsaWVudHMpOgorICAgICAgICAgICAgdy53cml0ZSgnbG93ZXIte31cbicuZm9ybWF0KGkpLmVuY29kZSgpKQorCisgICAgICAgIGZvciBpLCAociwgdykgaW4gZW51bWVyYXRlKGNsaWVudHMpOgorICAgICAgICAgICAgcmVzcG9uc2UgPSB5aWVsZCBmcm9tIHIucmVhZGxpbmUoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwb25zZSwgJ0xPV0VSLXt9XG4nLmZvcm1hdChpKS5lbmNvZGUoKSkKKyAgICAgICAgICAgIHcuY2xvc2UoKQorCisgICAgICAgIHNlcnZlci5jbG9zZSgpCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhGaWxlTm90Rm91bmRFcnJvcik6CisgICAgICAgICAgICB5aWVsZCBmcm9tIHNlbGYubG9vcC5jcmVhdGVfcGlwZV9jb25uZWN0aW9uKAorICAgICAgICAgICAgICAgIGFzeW5jaW8uUHJvdG9jb2wsIEFERFJFU1MpCisKKyAgICAgICAgcmV0dXJuICdkb25lJworCisgICAgZGVmIHRlc3RfY29ubmVjdF9waXBlX2NhbmNlbChzZWxmKToKKyAgICAgICAgZXhjID0gT1NFcnJvcigpCisgICAgICAgIGV4Yy53aW5lcnJvciA9IF9vdmVybGFwcGVkLkVSUk9SX1BJUEVfQlVTWQorICAgICAgICB3aXRoIG1vY2sucGF0Y2gub2JqZWN0KF9vdmVybGFwcGVkLCAnQ29ubmVjdFBpcGUnLCBzaWRlX2VmZmVjdD1leGMpIGFzIGNvbm5lY3Q6CisgICAgICAgICAgICBjb3JvID0gc2VsZi5sb29wLl9wcm9hY3Rvci5jb25uZWN0X3BpcGUoJ3BpcGVfYWRkcmVzcycpCisgICAgICAgICAgICB0YXNrID0gc2VsZi5sb29wLmNyZWF0ZV90YXNrKGNvcm8pCisKKyAgICAgICAgICAgICMgY2hlY2sgdGhhdCBpdCdzIHBvc3NpYmxlIHRvIGNhbmNlbCBjb25uZWN0X3BpcGUoKQorICAgICAgICAgICAgdGFzay5jYW5jZWwoKQorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhhc3luY2lvLkNhbmNlbGxlZEVycm9yKToKKyAgICAgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHRhc2spCisKKyAgICBkZWYgdGVzdF93YWl0X2Zvcl9oYW5kbGUoc2VsZik6CisgICAgICAgIGV2ZW50ID0gX292ZXJsYXBwZWQuQ3JlYXRlRXZlbnQoTm9uZSwgVHJ1ZSwgRmFsc2UsIE5vbmUpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChfd2luYXBpLkNsb3NlSGFuZGxlLCBldmVudCkKKworICAgICAgICAjIFdhaXQgZm9yIHVuc2V0IGV2ZW50IHdpdGggMC41cyB0aW1lb3V0OworICAgICAgICAjIHJlc3VsdCBzaG91bGQgYmUgRmFsc2UgYXQgdGltZW91dAorICAgICAgICBmdXQgPSBzZWxmLmxvb3AuX3Byb2FjdG9yLndhaXRfZm9yX2hhbmRsZShldmVudCwgMC41KQorICAgICAgICBzdGFydCA9IHNlbGYubG9vcC50aW1lKCkKKyAgICAgICAgZG9uZSA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZnV0KQorICAgICAgICBlbGFwc2VkID0gc2VsZi5sb29wLnRpbWUoKSAtIHN0YXJ0CisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkb25lLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmdXQucmVzdWx0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgwLjQ4IDwgZWxhcHNlZCA8IDAuOSwgZWxhcHNlZCkKKworICAgICAgICBfb3ZlcmxhcHBlZC5TZXRFdmVudChldmVudCkKKworICAgICAgICAjIFdhaXQgZm9yIHNldCBldmVudDsKKyAgICAgICAgIyByZXN1bHQgc2hvdWxkIGJlIFRydWUgaW1tZWRpYXRlbHkKKyAgICAgICAgZnV0ID0gc2VsZi5sb29wLl9wcm9hY3Rvci53YWl0X2Zvcl9oYW5kbGUoZXZlbnQsIDEwKQorICAgICAgICBzdGFydCA9IHNlbGYubG9vcC50aW1lKCkKKyAgICAgICAgZG9uZSA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZnV0KQorICAgICAgICBlbGFwc2VkID0gc2VsZi5sb29wLnRpbWUoKSAtIHN0YXJ0CisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkb25lLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZnV0LnJlc3VsdCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoMCA8PSBlbGFwc2VkIDwgMC4zLCBlbGFwc2VkKQorCisgICAgICAgICMgYXN5bmNpbyBpc3N1ZSAjMTk1OiBjYW5jZWxsaW5nIGEgZG9uZSBfV2FpdEhhbmRsZUZ1dHVyZQorICAgICAgICAjIG11c3Qgbm90IGNyYXNoCisgICAgICAgIGZ1dC5jYW5jZWwoKQorCisgICAgZGVmIHRlc3Rfd2FpdF9mb3JfaGFuZGxlX2NhbmNlbChzZWxmKToKKyAgICAgICAgZXZlbnQgPSBfb3ZlcmxhcHBlZC5DcmVhdGVFdmVudChOb25lLCBUcnVlLCBGYWxzZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKF93aW5hcGkuQ2xvc2VIYW5kbGUsIGV2ZW50KQorCisgICAgICAgICMgV2FpdCBmb3IgdW5zZXQgZXZlbnQgd2l0aCBhIGNhbmNlbGxlZCBmdXR1cmU7CisgICAgICAgICMgQ2FuY2VsbGVkRXJyb3Igc2hvdWxkIGJlIHJhaXNlZCBpbW1lZGlhdGVseQorICAgICAgICBmdXQgPSBzZWxmLmxvb3AuX3Byb2FjdG9yLndhaXRfZm9yX2hhbmRsZShldmVudCwgMTApCisgICAgICAgIGZ1dC5jYW5jZWwoKQorICAgICAgICBzdGFydCA9IHNlbGYubG9vcC50aW1lKCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhhc3luY2lvLkNhbmNlbGxlZEVycm9yKToKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZnV0KQorICAgICAgICBlbGFwc2VkID0gc2VsZi5sb29wLnRpbWUoKSAtIHN0YXJ0CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgwIDw9IGVsYXBzZWQgPCAwLjEsIGVsYXBzZWQpCisKKyAgICAgICAgIyBhc3luY2lvIGlzc3VlICMxOTU6IGNhbmNlbGxpbmcgYSBfV2FpdEhhbmRsZUZ1dHVyZSB0d2ljZQorICAgICAgICAjIG11c3Qgbm90IGNyYXNoCisgICAgICAgIGZ1dCA9IHNlbGYubG9vcC5fcHJvYWN0b3Iud2FpdF9mb3JfaGFuZGxlKGV2ZW50KQorICAgICAgICBmdXQuY2FuY2VsKCkKKyAgICAgICAgZnV0LmNhbmNlbCgpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X3dpbmRvd3NfdXRpbHMucHkgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF93aW5kb3dzX3V0aWxzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0OGI4YmMKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF93aW5kb3dzX3V0aWxzLnB5CkBAIC0wLDAgKzEsMTgyIEBACisiIiJUZXN0cyBmb3Igd2luZG93X3V0aWxzIiIiCisKK2ltcG9ydCBzb2NrZXQKK2ltcG9ydCBzeXMKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHdhcm5pbmdzCitmcm9tIHVuaXR0ZXN0IGltcG9ydCBtb2NrCisKK2lmIHN5cy5wbGF0Zm9ybSAhPSAnd2luMzInOgorICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCdXaW5kb3dzIG9ubHknKQorCitpbXBvcnQgX3dpbmFwaQorCitmcm9tIGFzeW5jaW8gaW1wb3J0IF9vdmVybGFwcGVkCitmcm9tIGFzeW5jaW8gaW1wb3J0IHdpbmRvd3NfdXRpbHMKK3RyeToKKyAgICBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBmcm9tIGFzeW5jaW8gaW1wb3J0IHRlc3Rfc3VwcG9ydCBhcyBzdXBwb3J0CisKKworY2xhc3MgV2luc29ja2V0cGFpclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBjaGVja193aW5zb2NrZXRwYWlyKHNlbGYsIHNzb2NrLCBjc29jayk6CisgICAgICAgIGNzb2NrLnNlbmQoYid4eHgnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIneHh4Jywgc3NvY2sucmVjdigxMDI0KSkKKyAgICAgICAgY3NvY2suY2xvc2UoKQorICAgICAgICBzc29jay5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF93aW5zb2NrZXRwYWlyKHNlbGYpOgorICAgICAgICBzc29jaywgY3NvY2sgPSB3aW5kb3dzX3V0aWxzLnNvY2tldHBhaXIoKQorICAgICAgICBzZWxmLmNoZWNrX3dpbnNvY2tldHBhaXIoc3NvY2ssIGNzb2NrKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3VwcG9ydC5JUFY2X0VOQUJMRUQsICdJUHY2IG5vdCBzdXBwb3J0ZWQgb3IgZW5hYmxlZCcpCisgICAgZGVmIHRlc3Rfd2luc29ja2V0cGFpcl9pcHY2KHNlbGYpOgorICAgICAgICBzc29jaywgY3NvY2sgPSB3aW5kb3dzX3V0aWxzLnNvY2tldHBhaXIoZmFtaWx5PXNvY2tldC5BRl9JTkVUNikKKyAgICAgICAgc2VsZi5jaGVja193aW5zb2NrZXRwYWlyKHNzb2NrLCBjc29jaykKKworICAgIEB1bml0dGVzdC5za2lwSWYoaGFzYXR0cihzb2NrZXQsICdzb2NrZXRwYWlyJyksCisgICAgICAgICAgICAgICAgICAgICAnc29ja2V0LnNvY2tldHBhaXIgaXMgYXZhaWxhYmxlJykKKyAgICBAbW9jay5wYXRjaCgnYXN5bmNpby53aW5kb3dzX3V0aWxzLnNvY2tldCcpCisgICAgZGVmIHRlc3Rfd2luc29ja2V0cGFpcl9leGMoc2VsZiwgbV9zb2NrZXQpOgorICAgICAgICBtX3NvY2tldC5BRl9JTkVUID0gc29ja2V0LkFGX0lORVQKKyAgICAgICAgbV9zb2NrZXQuU09DS19TVFJFQU0gPSBzb2NrZXQuU09DS19TVFJFQU0KKyAgICAgICAgbV9zb2NrZXQuc29ja2V0LnJldHVybl92YWx1ZS5nZXRzb2NrbmFtZS5yZXR1cm5fdmFsdWUgPSAoJycsIDEyMzQ1KQorICAgICAgICBtX3NvY2tldC5zb2NrZXQucmV0dXJuX3ZhbHVlLmFjY2VwdC5yZXR1cm5fdmFsdWUgPSBvYmplY3QoKSwgb2JqZWN0KCkKKyAgICAgICAgbV9zb2NrZXQuc29ja2V0LnJldHVybl92YWx1ZS5jb25uZWN0LnNpZGVfZWZmZWN0ID0gT1NFcnJvcigpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgd2luZG93c191dGlscy5zb2NrZXRwYWlyKQorCisgICAgZGVmIHRlc3Rfd2luc29ja2V0cGFpcl9pbnZhbGlkX2FyZ3Moc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvd3NfdXRpbHMuc29ja2V0cGFpciwgZmFtaWx5PXNvY2tldC5BRl9VTlNQRUMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvd3NfdXRpbHMuc29ja2V0cGFpciwgdHlwZT1zb2NrZXQuU09DS19ER1JBTSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93c191dGlscy5zb2NrZXRwYWlyLCBwcm90bz0xKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihoYXNhdHRyKHNvY2tldCwgJ3NvY2tldHBhaXInKSwKKyAgICAgICAgICAgICAgICAgICAgICdzb2NrZXQuc29ja2V0cGFpciBpcyBhdmFpbGFibGUnKQorICAgIEBtb2NrLnBhdGNoKCdhc3luY2lvLndpbmRvd3NfdXRpbHMuc29ja2V0JykKKyAgICBkZWYgdGVzdF93aW5zb2NrZXRwYWlyX2Nsb3NlKHNlbGYsIG1fc29ja2V0KToKKyAgICAgICAgbV9zb2NrZXQuQUZfSU5FVCA9IHNvY2tldC5BRl9JTkVUCisgICAgICAgIG1fc29ja2V0LlNPQ0tfU1RSRUFNID0gc29ja2V0LlNPQ0tfU1RSRUFNCisgICAgICAgIHNvY2sgPSBtb2NrLk1vY2soKQorICAgICAgICBtX3NvY2tldC5zb2NrZXQucmV0dXJuX3ZhbHVlID0gc29jaworICAgICAgICBzb2NrLmJpbmQuc2lkZV9lZmZlY3QgPSBPU0Vycm9yCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHdpbmRvd3NfdXRpbHMuc29ja2V0cGFpcikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNvY2suY2xvc2UuY2FsbGVkKQorCisKK2NsYXNzIFBpcGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9waXBlX292ZXJsYXBwZWQoc2VsZik6CisgICAgICAgIGgxLCBoMiA9IHdpbmRvd3NfdXRpbHMucGlwZShvdmVybGFwcGVkPShUcnVlLCBUcnVlKSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3YxID0gX292ZXJsYXBwZWQuT3ZlcmxhcHBlZCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG92MS5wZW5kaW5nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdjEuZXJyb3IsIDApCisKKyAgICAgICAgICAgIG92MS5SZWFkRmlsZShoMSwgMTAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG92MS5wZW5kaW5nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdjEuZXJyb3IsIF93aW5hcGkuRVJST1JfSU9fUEVORElORykKKyAgICAgICAgICAgIEVSUk9SX0lPX0lOQ09NUExFVEUgPSA5OTYKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBvdjEuZ2V0cmVzdWx0KCkKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLndpbmVycm9yLCBFUlJPUl9JT19JTkNPTVBMRVRFKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ2V4cGVjdGVkIEVSUk9SX0lPX0lOQ09NUExFVEUnKQorCisgICAgICAgICAgICBvdjIgPSBfb3ZlcmxhcHBlZC5PdmVybGFwcGVkKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3YyLnBlbmRpbmcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG92Mi5lcnJvciwgMCkKKworICAgICAgICAgICAgb3YyLldyaXRlRmlsZShoMiwgYiJoZWxsbyIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKG92Mi5lcnJvciwgezAsIF93aW5hcGkuRVJST1JfSU9fUEVORElOR30pCisKKyAgICAgICAgICAgIHJlcyA9IF93aW5hcGkuV2FpdEZvck11bHRpcGxlT2JqZWN0cyhbb3YyLmV2ZW50XSwgRmFsc2UsIDEwMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCBfd2luYXBpLldBSVRfT0JKRUNUXzApCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3YxLnBlbmRpbmcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG92MS5lcnJvciwgRVJST1JfSU9fSU5DT01QTEVURSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3YyLnBlbmRpbmcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKG92Mi5lcnJvciwgezAsIF93aW5hcGkuRVJST1JfSU9fUEVORElOR30pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG92MS5nZXRyZXN1bHQoKSwgYiJoZWxsbyIpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBfd2luYXBpLkNsb3NlSGFuZGxlKGgxKQorICAgICAgICAgICAgX3dpbmFwaS5DbG9zZUhhbmRsZShoMikKKworICAgIGRlZiB0ZXN0X3BpcGVfaGFuZGxlKHNlbGYpOgorICAgICAgICBoLCBfID0gd2luZG93c191dGlscy5waXBlKG92ZXJsYXBwZWQ9KFRydWUsIFRydWUpKQorICAgICAgICBfd2luYXBpLkNsb3NlSGFuZGxlKF8pCisgICAgICAgIHAgPSB3aW5kb3dzX3V0aWxzLlBpcGVIYW5kbGUoaCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmZpbGVubygpLCBoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuaGFuZGxlLCBoKQorCisgICAgICAgICMgY2hlY2sgZ2FyYmFnZSBjb2xsZWN0aW9uIG9mIHAgY2xvc2VzIGhhbmRsZQorICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICB3YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncygiaWdub3JlIiwgIiIsICBSZXNvdXJjZVdhcm5pbmcpCisgICAgICAgICAgICBkZWwgcAorICAgICAgICAgICAgc3VwcG9ydC5nY19jb2xsZWN0KCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgX3dpbmFwaS5DbG9zZUhhbmRsZShoKQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLndpbmVycm9yLCA2KSAgICAgIyBFUlJPUl9JTlZBTElEX0hBTkRMRQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdleHBlY3RlZCBFUlJPUl9JTlZBTElEX0hBTkRMRScpCisKKworY2xhc3MgUG9wZW5UZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9wb3BlbihzZWxmKToKKyAgICAgICAgY29tbWFuZCA9IHIiIiJpZiAxOgorICAgICAgICAgICAgaW1wb3J0IHN5cworICAgICAgICAgICAgcyA9IHN5cy5zdGRpbi5yZWFkbGluZSgpCisgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKHMudXBwZXIoKSkKKyAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJ3N0ZGVycicpCisgICAgICAgICAgICAiIiIKKyAgICAgICAgbXNnID0gYiJibGFoXG4iCisKKyAgICAgICAgcCA9IHdpbmRvd3NfdXRpbHMuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAnLWMnLCBjb21tYW5kXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkaW49d2luZG93c191dGlscy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9d2luZG93c191dGlscy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9d2luZG93c191dGlscy5QSVBFKQorCisgICAgICAgIGZvciBmIGluIFtwLnN0ZGluLCBwLnN0ZG91dCwgcC5zdGRlcnJdOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGYsIHdpbmRvd3NfdXRpbHMuUGlwZUhhbmRsZSkKKworICAgICAgICBvdmluID0gX292ZXJsYXBwZWQuT3ZlcmxhcHBlZCgpCisgICAgICAgIG92b3V0ID0gX292ZXJsYXBwZWQuT3ZlcmxhcHBlZCgpCisgICAgICAgIG92ZXJyID0gX292ZXJsYXBwZWQuT3ZlcmxhcHBlZCgpCisKKyAgICAgICAgb3Zpbi5Xcml0ZUZpbGUocC5zdGRpbi5oYW5kbGUsIG1zZykKKyAgICAgICAgb3ZvdXQuUmVhZEZpbGUocC5zdGRvdXQuaGFuZGxlLCAxMDApCisgICAgICAgIG92ZXJyLlJlYWRGaWxlKHAuc3RkZXJyLmhhbmRsZSwgMTAwKQorCisgICAgICAgIGV2ZW50cyA9IFtvdmluLmV2ZW50LCBvdm91dC5ldmVudCwgb3ZlcnIuZXZlbnRdCisgICAgICAgICMgU3VwZXItbG9uZyB0aW1lb3V0IGZvciBzbG93IGJ1aWxkYm90cy4KKyAgICAgICAgcmVzID0gX3dpbmFwaS5XYWl0Rm9yTXVsdGlwbGVPYmplY3RzKGV2ZW50cywgVHJ1ZSwgMTAwMDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCBfd2luYXBpLldBSVRfT0JKRUNUXzApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3ZvdXQucGVuZGluZykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvdmVyci5wZW5kaW5nKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG92aW4ucGVuZGluZykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG92aW4uZ2V0cmVzdWx0KCksIGxlbihtc2cpKQorICAgICAgICBvdXQgPSBvdm91dC5nZXRyZXN1bHQoKS5yc3RyaXAoKQorICAgICAgICBlcnIgPSBvdmVyci5nZXRyZXN1bHQoKS5yc3RyaXAoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihsZW4ob3V0KSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKGxlbihlcnIpLCAwKQorICAgICAgICAjIGFsbG93IGZvciBwYXJ0aWFsIHJlYWRzLi4uCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtc2cudXBwZXIoKS5yc3RyaXAoKS5zdGFydHN3aXRoKG91dCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiInN0ZGVyciIuc3RhcnRzd2l0aChlcnIpKQorCisgICAgICAgICMgVGhlIGNvbnRleHQgbWFuYWdlciBjYWxscyB3YWl0KCkgYW5kIGNsb3NlcyByZXNvdXJjZXMKKyAgICAgICAgd2l0aCBwOgorICAgICAgICAgICAgcGFzcworCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FzeW5jb3JlLnB5IGIvTGliL3Rlc3QvdGVzdF9hc3luY29yZS5weQppbmRleCA1ZDA2MzJlLi5kNDQ3MjZkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2FzeW5jb3JlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNvcmUucHkKQEAgLTUsMjAgKzUsMTkgQEAKIGltcG9ydCBzb2NrZXQKIGltcG9ydCBzeXMKIGltcG9ydCB0aW1lCi1pbXBvcnQgd2FybmluZ3MKIGltcG9ydCBlcnJubwogaW1wb3J0IHN0cnVjdAoraW1wb3J0IHdhcm5pbmdzCiAKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAotZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IFRFU1RGTiwgcnVuX3VuaXR0ZXN0LCB1bmxpbmssIEhPU1QsIEhPU1R2NgogZnJvbSBpbyBpbXBvcnQgQnl0ZXNJTwotZnJvbSBpbyBpbXBvcnQgU3RyaW5nSU8KIAogdHJ5OgogICAgIGltcG9ydCB0aHJlYWRpbmcKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICB0aHJlYWRpbmcgPSBOb25lCiAKK1RJTUVPVVQgPSAzCiBIQVNfVU5JWF9TT0NLRVRTID0gaGFzYXR0cihzb2NrZXQsICdBRl9VTklYJykKIAogY2xhc3MgZHVtbXlzb2NrZXQ6CkBAIC05Myw3ICs5Miw3IEBACiAgICAgIiIiSGVscGVyIGZ1bmN0aW9uIHRvIGJpbmQgYSBzb2NrZXQgYWNjb3JkaW5nIHRvIGl0cyBmYW1pbHkuIiIiCiAgICAgaWYgSEFTX1VOSVhfU09DS0VUUyBhbmQgc29jay5mYW1pbHkgPT0gc29ja2V0LkFGX1VOSVg6CiAgICAgICAgICMgTWFrZSBzdXJlIHRoZSBwYXRoIGRvZXNuJ3QgZXhpc3QuCi0gICAgICAgIHVubGluayhhZGRyKQorICAgICAgICBzdXBwb3J0LnVubGluayhhZGRyKQogICAgIHNvY2suYmluZChhZGRyKQogCiAKQEAgLTI1Niw0MCArMjU1LDI5IEBACiAgICAgICAgIGQgPSBhc3luY29yZS5kaXNwYXRjaGVyKCkKIAogICAgICAgICAjIGNhcHR1cmUgb3V0cHV0IG9mIGRpc3BhdGNoZXIubG9nKCkgKHRvIHN0ZGVycikKLSAgICAgICAgZnAgPSBTdHJpbmdJTygpCi0gICAgICAgIHN0ZGVyciA9IHN5cy5zdGRlcnIKICAgICAgICAgbDEgPSAiTG92ZWx5IHNwYW0hIFdvbmRlcmZ1bCBzcGFtISIKICAgICAgICAgbDIgPSAiSSBkb24ndCBsaWtlIHNwYW0hIgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzeXMuc3RkZXJyID0gZnAKKyAgICAgICAgd2l0aCBzdXBwb3J0LmNhcHR1cmVkX3N0ZGVycigpIGFzIHN0ZGVycjoKICAgICAgICAgICAgIGQubG9nKGwxKQogICAgICAgICAgICAgZC5sb2cobDIpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBzeXMuc3RkZXJyID0gc3RkZXJyCiAKLSAgICAgICAgbGluZXMgPSBmcC5nZXR2YWx1ZSgpLnNwbGl0bGluZXMoKQorICAgICAgICBsaW5lcyA9IHN0ZGVyci5nZXR2YWx1ZSgpLnNwbGl0bGluZXMoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmVzLCBbJ2xvZzogJXMnICUgbDEsICdsb2c6ICVzJyAlIGwyXSkKIAogICAgIGRlZiB0ZXN0X2xvZ19pbmZvKHNlbGYpOgogICAgICAgICBkID0gYXN5bmNvcmUuZGlzcGF0Y2hlcigpCiAKICAgICAgICAgIyBjYXB0dXJlIG91dHB1dCBvZiBkaXNwYXRjaGVyLmxvZ19pbmZvKCkgKHRvIHN0ZG91dCB2aWEgcHJpbnQpCi0gICAgICAgIGZwID0gU3RyaW5nSU8oKQotICAgICAgICBzdGRvdXQgPSBzeXMuc3Rkb3V0CiAgICAgICAgIGwxID0gIkhhdmUgeW91IGdvdCBhbnl0aGluZyB3aXRob3V0IHNwYW0/IgogICAgICAgICBsMiA9ICJXaHkgY2FuJ3Qgc2hlIGhhdmUgZWdnIGJhY29uIHNwYW0gYW5kIHNhdXNhZ2U/IgogICAgICAgICBsMyA9ICJUSEFUJ1MgZ290IHNwYW0gaW4gaXQhIgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzeXMuc3Rkb3V0ID0gZnAKKyAgICAgICAgd2l0aCBzdXBwb3J0LmNhcHR1cmVkX3N0ZG91dCgpIGFzIHN0ZG91dDoKICAgICAgICAgICAgIGQubG9nX2luZm8obDEsICdFR0dTJykKICAgICAgICAgICAgIGQubG9nX2luZm8obDIpCiAgICAgICAgICAgICBkLmxvZ19pbmZvKGwzLCAnU1BBTScpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBzeXMuc3Rkb3V0ID0gc3Rkb3V0CiAKLSAgICAgICAgbGluZXMgPSBmcC5nZXR2YWx1ZSgpLnNwbGl0bGluZXMoKQorICAgICAgICBsaW5lcyA9IHN0ZG91dC5nZXR2YWx1ZSgpLnNwbGl0bGluZXMoKQogICAgICAgICBleHBlY3RlZCA9IFsnRUdHUzogJXMnICUgbDEsICdpbmZvOiAlcycgJSBsMiwgJ1NQQU06ICVzJyAlIGwzXQotCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZXMsIGV4cGVjdGVkKQogCiAgICAgZGVmIHRlc3RfdW5oYW5kbGVkKHNlbGYpOgpAQCAtMjk3LDE4ICsyODUsMTMgQEAKICAgICAgICAgZC5pZ25vcmVfbG9nX3R5cGVzID0gKCkKIAogICAgICAgICAjIGNhcHR1cmUgb3V0cHV0IG9mIGRpc3BhdGNoZXIubG9nX2luZm8oKSAodG8gc3Rkb3V0IHZpYSBwcmludCkKLSAgICAgICAgZnAgPSBTdHJpbmdJTygpCi0gICAgICAgIHN0ZG91dCA9IHN5cy5zdGRvdXQKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgc3lzLnN0ZG91dCA9IGZwCisgICAgICAgIHdpdGggc3VwcG9ydC5jYXB0dXJlZF9zdGRvdXQoKSBhcyBzdGRvdXQ6CiAgICAgICAgICAgICBkLmhhbmRsZV9leHB0KCkKICAgICAgICAgICAgIGQuaGFuZGxlX3JlYWQoKQogICAgICAgICAgICAgZC5oYW5kbGVfd3JpdGUoKQogICAgICAgICAgICAgZC5oYW5kbGVfY29ubmVjdCgpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBzeXMuc3Rkb3V0ID0gc3Rkb3V0CiAKLSAgICAgICAgbGluZXMgPSBmcC5nZXR2YWx1ZSgpLnNwbGl0bGluZXMoKQorICAgICAgICBsaW5lcyA9IHN0ZG91dC5nZXR2YWx1ZSgpLnNwbGl0bGluZXMoKQogICAgICAgICBleHBlY3RlZCA9IFsnd2FybmluZzogdW5oYW5kbGVkIGluY29taW5nIHByaW9yaXR5IGV2ZW50JywKICAgICAgICAgICAgICAgICAgICAgJ3dhcm5pbmc6IHVuaGFuZGxlZCByZWFkIGV2ZW50JywKICAgICAgICAgICAgICAgICAgICAgJ3dhcm5pbmc6IHVuaGFuZGxlZCB3cml0ZSBldmVudCcsCkBAIC0zNzcsNyArMzYwLDcgQEAKICAgICAgICAgICAgIGRhdGEgPSBiIlN1cHBvc2UgdGhlcmUgaXNuJ3QgYSAxNi10b24gd2VpZ2h0PyIKICAgICAgICAgICAgIGQgPSBkaXNwYXRjaGVyd2l0aHNlbmRfbm9yZWFkKCkKICAgICAgICAgICAgIGQuY3JlYXRlX3NvY2tldCgpCi0gICAgICAgICAgICBkLmNvbm5lY3QoKEhPU1QsIHBvcnQpKQorICAgICAgICAgICAgZC5jb25uZWN0KChzdXBwb3J0LkhPU1QsIHBvcnQpKQogCiAgICAgICAgICAgICAjIGdpdmUgdGltZSBmb3Igc29ja2V0IHRvIGNvbm5lY3QKICAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4xKQpAQCAtMzk1LDcgKzM3OCwxMCBAQAogCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhcC5nZXR2YWx1ZSgpLCBkYXRhKjIpCiAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICB0LmpvaW4oKQorICAgICAgICAgICAgdC5qb2luKHRpbWVvdXQ9VElNRU9VVCkKKyAgICAgICAgICAgIGlmIHQuaXNfYWxpdmUoKToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoImpvaW4oKSB0aW1lZCBvdXQiKQorCiAKIAogY2xhc3MgRGlzcGF0Y2hlcldpdGhTZW5kVGVzdHNfVXNlUG9sbChEaXNwYXRjaGVyV2l0aFNlbmRUZXN0cyk6CkBAIC00MDYsMTQgKzM5MiwxNCBAQAogY2xhc3MgRmlsZVdyYXBwZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIHNlbGYuZCA9IGIiSXQncyBub3QgZGVhZCwgaXQncyBzbGVlcGluZyEiCi0gICAgICAgIHdpdGggb3BlbihURVNURk4sICd3YicpIGFzIGZpbGU6CisgICAgICAgIHdpdGggb3BlbihzdXBwb3J0LlRFU1RGTiwgJ3diJykgYXMgZmlsZToKICAgICAgICAgICAgIGZpbGUud3JpdGUoc2VsZi5kKQogCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgotICAgICAgICB1bmxpbmsoVEVTVEZOKQorICAgICAgICBzdXBwb3J0LnVubGluayhzdXBwb3J0LlRFU1RGTikKIAogICAgIGRlZiB0ZXN0X3JlY3Yoc2VsZik6Ci0gICAgICAgIGZkID0gb3Mub3BlbihURVNURk4sIG9zLk9fUkRPTkxZKQorICAgICAgICBmZCA9IG9zLm9wZW4oc3VwcG9ydC5URVNURk4sIG9zLk9fUkRPTkxZKQogICAgICAgICB3ID0gYXN5bmNvcmUuZmlsZV93cmFwcGVyKGZkKQogICAgICAgICBvcy5jbG9zZShmZCkKIApAQCAtNDI3LDIwICs0MTMsMjAgQEAKICAgICBkZWYgdGVzdF9zZW5kKHNlbGYpOgogICAgICAgICBkMSA9IGIiQ29tZSBhZ2Fpbj8iCiAgICAgICAgIGQyID0gYiJJIHdhbnQgdG8gYnV5IHNvbWUgY2hlZXNlLiIKLSAgICAgICAgZmQgPSBvcy5vcGVuKFRFU1RGTiwgb3MuT19XUk9OTFkgfCBvcy5PX0FQUEVORCkKKyAgICAgICAgZmQgPSBvcy5vcGVuKHN1cHBvcnQuVEVTVEZOLCBvcy5PX1dST05MWSB8IG9zLk9fQVBQRU5EKQogICAgICAgICB3ID0gYXN5bmNvcmUuZmlsZV93cmFwcGVyKGZkKQogICAgICAgICBvcy5jbG9zZShmZCkKIAogICAgICAgICB3LndyaXRlKGQxKQogICAgICAgICB3LnNlbmQoZDIpCiAgICAgICAgIHcuY2xvc2UoKQotICAgICAgICB3aXRoIG9wZW4oVEVTVEZOLCAncmInKSBhcyBmaWxlOgorICAgICAgICB3aXRoIG9wZW4oc3VwcG9ydC5URVNURk4sICdyYicpIGFzIGZpbGU6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGUucmVhZCgpLCBzZWxmLmQgKyBkMSArIGQyKQogCiAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihhc3luY29yZSwgJ2ZpbGVfZGlzcGF0Y2hlcicpLAogICAgICAgICAgICAgICAgICAgICAgICAgICdhc3luY29yZS5maWxlX2Rpc3BhdGNoZXIgcmVxdWlyZWQnKQogICAgIGRlZiB0ZXN0X2Rpc3BhdGNoZXIoc2VsZik6Ci0gICAgICAgIGZkID0gb3Mub3BlbihURVNURk4sIG9zLk9fUkRPTkxZKQorICAgICAgICBmZCA9IG9zLm9wZW4oc3VwcG9ydC5URVNURk4sIG9zLk9fUkRPTkxZKQogICAgICAgICBkYXRhID0gW10KICAgICAgICAgY2xhc3MgRmlsZURpc3BhdGNoZXIoYXN5bmNvcmUuZmlsZV9kaXNwYXRjaGVyKToKICAgICAgICAgICAgIGRlZiBoYW5kbGVfcmVhZChzZWxmKToKQEAgLTQ1MCw2ICs0MzYsMjYgQEAKICAgICAgICAgYXN5bmNvcmUubG9vcCh0aW1lb3V0PTAuMDEsIHVzZV9wb2xsPVRydWUsIGNvdW50PTIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiIiLmpvaW4oZGF0YSksIHNlbGYuZCkKIAorICAgIGRlZiB0ZXN0X3Jlc291cmNlX3dhcm5pbmcoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzExNDUzCisgICAgICAgIGZkID0gb3Mub3BlbihzdXBwb3J0LlRFU1RGTiwgb3MuT19SRE9OTFkpCisgICAgICAgIGYgPSBhc3luY29yZS5maWxlX3dyYXBwZXIoZmQpCisKKyAgICAgICAgb3MuY2xvc2UoZmQpCisgICAgICAgIHdpdGggc3VwcG9ydC5jaGVja193YXJuaW5ncygoJycsIFJlc291cmNlV2FybmluZykpOgorICAgICAgICAgICAgZiA9IE5vbmUKKyAgICAgICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCisKKyAgICBkZWYgdGVzdF9jbG9zZV90d2ljZShzZWxmKToKKyAgICAgICAgZmQgPSBvcy5vcGVuKHN1cHBvcnQuVEVTVEZOLCBvcy5PX1JET05MWSkKKyAgICAgICAgZiA9IGFzeW5jb3JlLmZpbGVfd3JhcHBlcihmZCkKKyAgICAgICAgb3MuY2xvc2UoZmQpCisKKyAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5mZCwgLTEpCisgICAgICAgICMgY2FsbGluZyBjbG9zZSB0d2ljZSBzaG91bGQgbm90IGZhaWwKKyAgICAgICAgZi5jbG9zZSgpCisKIAogY2xhc3MgQmFzZVRlc3RIYW5kbGVyKGFzeW5jb3JlLmRpc3BhdGNoZXIpOgogCkBAIC03NDAsNyArNzQ2LDEyIEBACiAgICAgICAgIHMuY3JlYXRlX3NvY2tldChzZWxmLmZhbWlseSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnNvY2tldC5mYW1pbHksIHNlbGYuZmFtaWx5KQogICAgICAgICBTT0NLX05PTkJMT0NLID0gZ2V0YXR0cihzb2NrZXQsICdTT0NLX05PTkJMT0NLJywgMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnNvY2tldC50eXBlLCBzb2NrZXQuU09DS19TVFJFQU0gfCBTT0NLX05PTkJMT0NLKQorICAgICAgICBzb2NrX3R5cGUgPSBzb2NrZXQuU09DS19TVFJFQU0gfCBTT0NLX05PTkJMT0NLCisgICAgICAgIGlmIGhhc2F0dHIoc29ja2V0LCAnU09DS19DTE9FWEVDJyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEluKHMuc29ja2V0LnR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIChzb2NrX3R5cGUgfCBzb2NrZXQuU09DS19DTE9FWEVDLCBzb2NrX3R5cGUpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnNvY2tldC50eXBlLCBzb2NrX3R5cGUpCiAKICAgICBkZWYgdGVzdF9iaW5kKHNlbGYpOgogICAgICAgICBpZiBIQVNfVU5JWF9TT0NLRVRTIGFuZCBzZWxmLmZhbWlseSA9PSBzb2NrZXQuQUZfVU5JWDoKQEAgLTc1NCw3ICs3NjUsNyBAQAogICAgICAgICBzMiA9IGFzeW5jb3JlLmRpc3BhdGNoZXIoKQogICAgICAgICBzMi5jcmVhdGVfc29ja2V0KHNlbGYuZmFtaWx5KQogICAgICAgICAjIEVBRERSSU5VU0UgaW5kaWNhdGVzIHRoZSBzb2NrZXQgd2FzIGNvcnJlY3RseSBib3VuZAotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IsIHMyLmJpbmQsIChzZWxmLmFkZHJbMF0sIHBvcnQpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBzMi5iaW5kLCAoc2VsZi5hZGRyWzBdLCBwb3J0KSkKIAogICAgIGRlZiB0ZXN0X3NldF9yZXVzZV9hZGRyKHNlbGYpOgogICAgICAgICBpZiBIQVNfVU5JWF9TT0NLRVRTIGFuZCBzZWxmLmZhbWlseSA9PSBzb2NrZXQuQUZfVU5JWDoKQEAgLTc2Miw3ICs3NzMsNyBAQAogICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldChzZWxmLmZhbWlseSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc29jay5zZXRzb2Nrb3B0KHNvY2tldC5TT0xfU09DS0VULCBzb2NrZXQuU09fUkVVU0VBRERSLCAxKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHVuaXR0ZXN0LnNraXAoIlNPX1JFVVNFQUREUiBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0iKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgIyBpZiBTT19SRVVTRUFERFIgc3VjY2VlZGVkIGZvciBzb2NrIHdlIGV4cGVjdCBhc3luY29yZQpAQCAtNzg3LDcgKzc5OCwxMSBAQAogICAgICAgICAgICAgdCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PWxhbWJkYTogYXN5bmNvcmUubG9vcCh0aW1lb3V0PTAuMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ9NTAwKSkKICAgICAgICAgICAgIHQuc3RhcnQoKQotICAgICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHQuam9pbikKKyAgICAgICAgICAgIGRlZiBjbGVhbnVwKCk6CisgICAgICAgICAgICAgICAgdC5qb2luKHRpbWVvdXQ9VElNRU9VVCkKKyAgICAgICAgICAgICAgICBpZiB0LmlzX2FsaXZlKCk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiam9pbigpIHRpbWVkIG91dCIpCisgICAgICAgICAgICBzZWxmLmFkZENsZWFudXAoY2xlYW51cCkKIAogICAgICAgICAgICAgcyA9IHNvY2tldC5zb2NrZXQoc2VsZi5mYW1pbHksIHNvY2tldC5TT0NLX1NUUkVBTSkKICAgICAgICAgICAgIHMuc2V0dGltZW91dCguMikKQEAgLTc5NSwxOSArODEwLDE5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0LnBhY2soJ2lpJywgMSwgMCkpCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgcy5jb25uZWN0KHNlcnZlci5hZGRyZXNzKQotICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgcy5jbG9zZSgpCiAKIGNsYXNzIFRlc3RBUElfVXNlSVB2NFNvY2tldHMoQmFzZVRlc3RBUEkpOgogICAgIGZhbWlseSA9IHNvY2tldC5BRl9JTkVUCi0gICAgYWRkciA9IChIT1NULCAwKQorICAgIGFkZHIgPSAoc3VwcG9ydC5IT1NULCAwKQogCiBAdW5pdHRlc3Quc2tpcFVubGVzcyhzdXBwb3J0LklQVjZfRU5BQkxFRCwgJ0lQdjYgc3VwcG9ydCByZXF1aXJlZCcpCiBjbGFzcyBUZXN0QVBJX1VzZUlQdjZTb2NrZXRzKEJhc2VUZXN0QVBJKToKICAgICBmYW1pbHkgPSBzb2NrZXQuQUZfSU5FVDYKLSAgICBhZGRyID0gKEhPU1R2NiwgMCkKKyAgICBhZGRyID0gKHN1cHBvcnQuSE9TVHY2LCAwKQogCiBAdW5pdHRlc3Quc2tpcFVubGVzcyhIQVNfVU5JWF9TT0NLRVRTLCAnVW5peCBzb2NrZXRzIHJlcXVpcmVkJykKIGNsYXNzIFRlc3RBUElfVXNlVW5peFNvY2tldHMoQmFzZVRlc3RBUEkpOgpAQCAtODE2LDcgKzgzMSw3IEBACiAgICAgYWRkciA9IHN1cHBvcnQuVEVTVEZOCiAKICAgICBkZWYgdGVhckRvd24oc2VsZik6Ci0gICAgICAgIHVubGluayhzZWxmLmFkZHIpCisgICAgICAgIHN1cHBvcnQudW5saW5rKHNlbGYuYWRkcikKICAgICAgICAgQmFzZVRlc3RBUEkudGVhckRvd24oc2VsZikKIAogY2xhc3MgVGVzdEFQSV9Vc2VJUHY0U2VsZWN0KFRlc3RBUElfVXNlSVB2NFNvY2tldHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYXRleGl0LnB5IGIvTGliL3Rlc3QvdGVzdF9hdGV4aXQucHkKaW5kZXggMzBjM2I0YS4uNzBkMmYxYyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9hdGV4aXQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9hdGV4aXQucHkKQEAgLTIzLDcgKzIzLDkgQEAKIGRlZiByYWlzZTIoKToKICAgICByYWlzZSBTeXN0ZW1FcnJvcgogCi1jbGFzcyBUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKK2NsYXNzIEdlbmVyYWxUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKwogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgc2VsZi5zYXZlX3N0ZG91dCA9IHN5cy5zdGRvdXQKICAgICAgICAgc2VsZi5zYXZlX3N0ZGVyciA9IHN5cy5zdGRlcnIKQEAgLTE0MSw4ICsxNDMsNDMgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsLCBbNV0pCiAKIAorY2xhc3MgU3ViaW50ZXJwcmV0ZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2NhbGxiYWNrc19sZWFrKHNlbGYpOgorICAgICAgICAjIFRoaXMgdGVzdCBzaG93cyBhIGxlYWsgaW4gcmVmbGVhayBtb2RlIGlmIGF0ZXhpdCBkb2Vzbid0CisgICAgICAgICMgdGFrZSBjYXJlIHRvIGZyZWUgY2FsbGJhY2tzIGluIGl0cyBwZXItc3ViaW50ZXJwcmV0ZXIgbW9kdWxlCisgICAgICAgICMgc3RhdGUuCisgICAgICAgIG4gPSBhdGV4aXQuX25jYWxsYmFja3MoKQorICAgICAgICBjb2RlID0gciIiImlmIDE6CisgICAgICAgICAgICBpbXBvcnQgYXRleGl0CisgICAgICAgICAgICBkZWYgZigpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGF0ZXhpdC5yZWdpc3RlcihmKQorICAgICAgICAgICAgZGVsIGF0ZXhpdAorICAgICAgICAgICAgIiIiCisgICAgICAgIHJldCA9IHN1cHBvcnQucnVuX2luX3N1YmludGVycChjb2RlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldCwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdGV4aXQuX25jYWxsYmFja3MoKSwgbikKKworICAgIGRlZiB0ZXN0X2NhbGxiYWNrc19sZWFrX3JlZmN5Y2xlKHNlbGYpOgorICAgICAgICAjIFNpbWlsYXIgdG8gdGhlIGFib3ZlLCBidXQgd2l0aCBhIHJlZmN5Y2xlIHRocm91Z2ggdGhlIGF0ZXhpdAorICAgICAgICAjIG1vZHVsZS4KKyAgICAgICAgbiA9IGF0ZXhpdC5fbmNhbGxiYWNrcygpCisgICAgICAgIGNvZGUgPSByIiIiaWYgMToKKyAgICAgICAgICAgIGltcG9ydCBhdGV4aXQKKyAgICAgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgYXRleGl0LnJlZ2lzdGVyKGYpCisgICAgICAgICAgICBhdGV4aXQuX19hdGV4aXQgPSBhdGV4aXQKKyAgICAgICAgICAgICIiIgorICAgICAgICByZXQgPSBzdXBwb3J0LnJ1bl9pbl9zdWJpbnRlcnAoY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXQsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXRleGl0Ll9uY2FsbGJhY2tzKCksIG4pCisKKwogZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KFRlc3RDYXNlKQorICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KF9fbmFtZV9fKQorCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYXVkaW9vcC5weSBiL0xpYi90ZXN0L3Rlc3RfYXVkaW9vcC5weQppbmRleCBhOTJjZjg3Li44ZjM0ZDcyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2F1ZGlvb3AucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9hdWRpb29wLnB5CkBAIC01LDEzICs1LDE4IEBACiBkZWYgcGFjayh3aWR0aCwgZGF0YSk6CiAgICAgcmV0dXJuIGInJy5qb2luKHYudG9fYnl0ZXMod2lkdGgsIHN5cy5ieXRlb3JkZXIsIHNpZ25lZD1UcnVlKSBmb3IgdiBpbiBkYXRhKQogCi1wYWNrcyA9IHt3OiAobGFtYmRhICpkYXRhLCB3aWR0aD13OiBwYWNrKHdpZHRoLCBkYXRhKSkgZm9yIHcgaW4gKDEsIDIsIDQpfQotbWF4dmFsdWVzID0ge3c6ICgxIDw8ICg4ICogdyAtIDEpKSAtIDEgZm9yIHcgaW4gKDEsIDIsIDQpfQotbWludmFsdWVzID0ge3c6IC0xIDw8ICg4ICogdyAtIDEpIGZvciB3IGluICgxLCAyLCA0KX0KK2RlZiB1bnBhY2sod2lkdGgsIGRhdGEpOgorICAgIHJldHVybiBbaW50LmZyb21fYnl0ZXMoZGF0YVtpOiBpICsgd2lkdGhdLCBzeXMuYnl0ZW9yZGVyLCBzaWduZWQ9VHJ1ZSkKKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDAsIGxlbihkYXRhKSwgd2lkdGgpXQorCitwYWNrcyA9IHt3OiAobGFtYmRhICpkYXRhLCB3aWR0aD13OiBwYWNrKHdpZHRoLCBkYXRhKSkgZm9yIHcgaW4gKDEsIDIsIDMsIDQpfQorbWF4dmFsdWVzID0ge3c6ICgxIDw8ICg4ICogdyAtIDEpKSAtIDEgZm9yIHcgaW4gKDEsIDIsIDMsIDQpfQorbWludmFsdWVzID0ge3c6IC0xIDw8ICg4ICogdyAtIDEpIGZvciB3IGluICgxLCAyLCAzLCA0KX0KIAogZGF0YXMgPSB7CiAgICAgMTogYidceDAwXHgxMlx4NDVceGJiXHg3Zlx4ODBceGZmJywKICAgICAyOiBwYWNrc1syXSgwLCAweDEyMzQsIDB4NDU2NywgLTB4NDU2NywgMHg3ZmZmLCAtMHg4MDAwLCAtMSksCisgICAgMzogcGFja3NbM10oMCwgMHgxMjM0NTYsIDB4NDU2Nzg5LCAtMHg0NTY3ODksIDB4N2ZmZmZmLCAtMHg4MDAwMDAsIC0xKSwKICAgICA0OiBwYWNrc1s0XSgwLCAweDEyMzQ1Njc4LCAweDQ1Njc4OWFiLCAtMHg0NTY3ODlhYiwKICAgICAgICAgICAgICAgICAweDdmZmZmZmZmLCAtMHg4MDAwMDAwMCwgLTEpLAogfQpAQCAtMTksNiArMjQsNyBAQAogSU5WQUxJRF9EQVRBID0gWwogICAgIChiJ2FiYycsIDApLAogICAgIChiJ2FiYycsIDIpLAorICAgIChiJ2FiJywgMyksCiAgICAgKGInYWJjJywgNCksCiBdCiAKQEAgLTI2LDggKzMyLDEwIEBACiBjbGFzcyBUZXN0QXVkaW9vcCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgdGVzdF9tYXgoc2VsZik6Ci0gICAgICAgIGZvciB3IGluIDEsIDIsIDQ6CisgICAgICAgIGZvciB3IGluIDEsIDIsIDMsIDQ6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubWF4KGInJywgdyksIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubWF4KGJ5dGVhcnJheSgpLCB3KSwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5tYXgobWVtb3J5dmlldyhiJycpLCB3KSwgMCkKICAgICAgICAgICAgIHAgPSBwYWNrc1t3XQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLm1heChwKDUpLCB3KSwgNSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5tYXgocCg1LCAtOCwgLTEpLCB3KSwgOCkKQEAgLTM2LDkgKzQ0LDEzIEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubWF4KGRhdGFzW3ddLCB3KSwgLW1pbnZhbHVlc1t3XSkKIAogICAgIGRlZiB0ZXN0X21pbm1heChzZWxmKToKLSAgICAgICAgZm9yIHcgaW4gMSwgMiwgNDoKKyAgICAgICAgZm9yIHcgaW4gMSwgMiwgMywgNDoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5taW5tYXgoYicnLCB3KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4N2ZmZmZmZmYsIC0weDgwMDAwMDAwKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5taW5tYXgoYnl0ZWFycmF5KCksIHcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg3ZmZmZmZmZiwgLTB4ODAwMDAwMDApKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLm1pbm1heChtZW1vcnl2aWV3KGInJyksIHcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg3ZmZmZmZmZiwgLTB4ODAwMDAwMDApKQogICAgICAgICAgICAgcCA9IHBhY2tzW3ddCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubWlubWF4KHAoNSksIHcpLCAoNSwgNSkpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubWlubWF4KHAoNSwgLTgsIC0xKSwgdyksICgtOCwgNSkpCkBAIC01MCwxNiArNjIsMjAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1pbnZhbHVlc1t3XSwgbWF4dmFsdWVzW3ddKSkKIAogICAgIGRlZiB0ZXN0X21heHBwKHNlbGYpOgotICAgICAgICBmb3IgdyBpbiAxLCAyLCA0OgorICAgICAgICBmb3IgdyBpbiAxLCAyLCAzLCA0OgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLm1heHBwKGInJywgdyksIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubWF4cHAoYnl0ZWFycmF5KCksIHcpLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLm1heHBwKG1lbW9yeXZpZXcoYicnKSwgdyksIDApCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubWF4cHAocGFja3Nbd10oKnJhbmdlKDEwMCkpLCB3KSwgMCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5tYXhwcChwYWNrc1t3XSg5LCAxMCwgNSwgNSwgMCwgMSksIHcpLCAxMCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5tYXhwcChkYXRhc1t3XSwgdyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heHZhbHVlc1t3XSAtIG1pbnZhbHVlc1t3XSkKIAogICAgIGRlZiB0ZXN0X2F2ZyhzZWxmKToKLSAgICAgICAgZm9yIHcgaW4gMSwgMiwgNDoKKyAgICAgICAgZm9yIHcgaW4gMSwgMiwgMywgNDoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hdmcoYicnLCB3KSwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hdmcoYnl0ZWFycmF5KCksIHcpLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmF2ZyhtZW1vcnl2aWV3KGInJyksIHcpLCAwKQogICAgICAgICAgICAgcCA9IHBhY2tzW3ddCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYXZnKHAoNSksIHcpLCA1KQogICAgICAgICAgICAgc2VsZiAuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hdmcocCg1LCA4KSwgdyksIDYpCkBAIC03NCwxNyArOTAsMjIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAtMHg2MDAwMDAwMCkKIAogICAgIGRlZiB0ZXN0X2F2Z3BwKHNlbGYpOgotICAgICAgICBmb3IgdyBpbiAxLCAyLCA0OgorICAgICAgICBmb3IgdyBpbiAxLCAyLCAzLCA0OgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmF2Z3BwKGInJywgdyksIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYXZncHAoYnl0ZWFycmF5KCksIHcpLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmF2Z3BwKG1lbW9yeXZpZXcoYicnKSwgdyksIDApCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYXZncHAocGFja3Nbd10oKnJhbmdlKDEwMCkpLCB3KSwgMCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hdmdwcChwYWNrc1t3XSg5LCAxMCwgNSwgNSwgMCwgMSksIHcpLCAxMCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmF2Z3BwKGRhdGFzWzFdLCAxKSwgMTk2KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYXZncHAoZGF0YXNbMl0sIDIpLCA1MDUzNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmF2Z3BwKGRhdGFzWzNdLCAzKSwgMTI5MzcwOTYpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hdmdwcChkYXRhc1s0XSwgNCksIDMzMTE4OTcwMDIpCiAKICAgICBkZWYgdGVzdF9ybXMoc2VsZik6Ci0gICAgICAgIGZvciB3IGluIDEsIDIsIDQ6CisgICAgICAgIGZvciB3IGluIDEsIDIsIDMsIDQ6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3Aucm1zKGInJywgdyksIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3Aucm1zKGJ5dGVhcnJheSgpLCB3KSwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5ybXMobWVtb3J5dmlldyhiJycpLCB3KSwgMCkKICAgICAgICAgICAgIHAgPSBwYWNrc1t3XQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLnJtcyhwKCpyYW5nZSgxMDApKSwgdyksIDU3KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChhdWRpb29wLnJtcyhwKG1heHZhbHVlc1t3XSkgKiA1LCB3KSwKQEAgLTkzLDExICsxMTQsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLW1pbnZhbHVlc1t3XSwgZGVsdGE9MSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLnJtcyhkYXRhc1sxXSwgMSksIDc3KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3Aucm1zKGRhdGFzWzJdLCAyKSwgMjAwMDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5ybXMoZGF0YXNbM10sIDMpLCA1MTIwNTIzKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3Aucm1zKGRhdGFzWzRdLCA0KSwgMTMxMDg1NDE1MikKIAogICAgIGRlZiB0ZXN0X2Nyb3NzKHNlbGYpOgotICAgICAgICBmb3IgdyBpbiAxLCAyLCA0OgorICAgICAgICBmb3IgdyBpbiAxLCAyLCAzLCA0OgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmNyb3NzKGInJywgdyksIC0xKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmNyb3NzKGJ5dGVhcnJheSgpLCB3KSwgLTEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuY3Jvc3MobWVtb3J5dmlldyhiJycpLCB3KSwgLTEpCiAgICAgICAgICAgICBwID0gcGFja3Nbd10KICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5jcm9zcyhwKDAsIDEsIDIpLCB3KSwgMCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5jcm9zcyhwKDEsIDIsIC0zLCAtNCksIHcpLCAxKQpAQCAtMTA2LDIyICsxMzAsMjkgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5jcm9zcyhwKG1pbnZhbHVlc1t3XSwgbWF4dmFsdWVzW3ddKSwgdyksIDEpCiAKICAgICBkZWYgdGVzdF9hZGQoc2VsZik6Ci0gICAgICAgIGZvciB3IGluIDEsIDIsIDQ6CisgICAgICAgIGZvciB3IGluIDEsIDIsIDMsIDQ6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYWRkKGInJywgYicnLCB3KSwgYicnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmFkZChieXRlYXJyYXkoKSwgYnl0ZWFycmF5KCksIHcpLCBiJycpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYWRkKG1lbW9yeXZpZXcoYicnKSwgbWVtb3J5dmlldyhiJycpLCB3KSwgYicnKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmFkZChkYXRhc1t3XSwgYidcMCcgKiBsZW4oZGF0YXNbd10pLCB3KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YXNbd10pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hZGQoZGF0YXNbMV0sIGRhdGFzWzFdLCAxKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1x4MDBceDI0XHg3Zlx4ODBceDdmXHg4MFx4ZmUnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYWRkKGRhdGFzWzJdLCBkYXRhc1syXSwgMiksCiAgICAgICAgICAgICAgICAgcGFja3NbMl0oMCwgMHgyNDY4LCAweDdmZmYsIC0weDgwMDAsIDB4N2ZmZiwgLTB4ODAwMCwgLTIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYWRkKGRhdGFzWzNdLCBkYXRhc1szXSwgMyksCisgICAgICAgICAgICAgICAgcGFja3NbM10oMCwgMHgyNDY4YWMsIDB4N2ZmZmZmLCAtMHg4MDAwMDAsCisgICAgICAgICAgICAgICAgICAgICAgIDB4N2ZmZmZmLCAtMHg4MDAwMDAsIC0yKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmFkZChkYXRhc1s0XSwgZGF0YXNbNF0sIDQpLAogICAgICAgICAgICAgICAgIHBhY2tzWzRdKDAsIDB4MjQ2OGFjZjAsIDB4N2ZmZmZmZmYsIC0weDgwMDAwMDAwLAogICAgICAgICAgICAgICAgICAgICAgICAweDdmZmZmZmZmLCAtMHg4MDAwMDAwMCwgLTIpKQogCiAgICAgZGVmIHRlc3RfYmlhcyhzZWxmKToKLSAgICAgICAgZm9yIHcgaW4gMSwgMiwgNDoKKyAgICAgICAgZm9yIHcgaW4gMSwgMiwgMywgNDoKICAgICAgICAgICAgIGZvciBiaWFzIGluIDAsIDEsIC0xLCAxMjcsIC0xMjgsIDB4N2ZmZmZmZmYsIC0weDgwMDAwMDAwOgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5iaWFzKGInJywgdywgYmlhcyksIGInJykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYmlhcyhieXRlYXJyYXkoKSwgdywgYmlhcyksIGInJykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYmlhcyhtZW1vcnl2aWV3KGInJyksIHcsIGJpYXMpLCBiJycpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5iaWFzKGRhdGFzWzFdLCAxLCAxKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1x4MDFceDEzXHg0Nlx4YmNceDgwXHg4MVx4MDAnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYmlhcyhkYXRhc1sxXSwgMSwgLTEpLApAQCAtMTM4LDYgKzE2OSwxNyBAQAogICAgICAgICAgICAgICAgIHBhY2tzWzJdKC0xLCAweDEyMzMsIDB4NDU2NiwgLTB4NDU2OCwgMHg3ZmZlLCAweDdmZmYsIC0yKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmJpYXMoZGF0YXNbMl0sIDIsIC0weDgwMDAwMDAwKSwKICAgICAgICAgICAgICAgICBkYXRhc1syXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmJpYXMoZGF0YXNbM10sIDMsIDEpLAorICAgICAgICAgICAgICAgIHBhY2tzWzNdKDEsIDB4MTIzNDU3LCAweDQ1Njc4YSwgLTB4NDU2Nzg4LAorICAgICAgICAgICAgICAgICAgICAgICAgIC0weDgwMDAwMCwgLTB4N2ZmZmZmLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmJpYXMoZGF0YXNbM10sIDMsIC0xKSwKKyAgICAgICAgICAgICAgICBwYWNrc1szXSgtMSwgMHgxMjM0NTUsIDB4NDU2Nzg4LCAtMHg0NTY3OGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgMHg3ZmZmZmUsIDB4N2ZmZmZmLCAtMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5iaWFzKGRhdGFzWzNdLCAzLCAweDdmZmZmZmZmKSwKKyAgICAgICAgICAgICAgICBwYWNrc1szXSgtMSwgMHgxMjM0NTUsIDB4NDU2Nzg4LCAtMHg0NTY3OGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgMHg3ZmZmZmUsIDB4N2ZmZmZmLCAtMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5iaWFzKGRhdGFzWzNdLCAzLCAtMHg4MDAwMDAwMCksCisgICAgICAgICAgICAgICAgZGF0YXNbM10pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5iaWFzKGRhdGFzWzRdLCA0LCAxKSwKICAgICAgICAgICAgICAgICBwYWNrc1s0XSgxLCAweDEyMzQ1Njc5LCAweDQ1Njc4OWFjLCAtMHg0NTY3ODlhYSwKICAgICAgICAgICAgICAgICAgICAgICAgICAtMHg4MDAwMDAwMCwgLTB4N2ZmZmZmZmYsIDApKQpAQCAtMTUyLDk5ICsxOTQsMTU2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgLTEsIDAsIDB4N2ZmZmZmZmYpKQogCiAgICAgZGVmIHRlc3RfbGluMmxpbihzZWxmKToKLSAgICAgICAgZm9yIHcgaW4gMSwgMiwgNDoKKyAgICAgICAgZm9yIHcgaW4gMSwgMiwgMywgNDoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4ybGluKGRhdGFzW3ddLCB3LCB3KSwgZGF0YXNbd10pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMmxpbihieXRlYXJyYXkoZGF0YXNbd10pLCB3LCB3KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YXNbd10pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMmxpbihtZW1vcnl2aWV3KGRhdGFzW3ddKSwgdywgdyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFzW3ddKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4ybGluKGRhdGFzWzFdLCAxLCAyKSwKICAgICAgICAgICAgIHBhY2tzWzJdKDAsIDB4MTIwMCwgMHg0NTAwLCAtMHg0NTAwLCAweDdmMDAsIC0weDgwMDAsIC0weDEwMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4ybGluKGRhdGFzWzFdLCAxLCAzKSwKKyAgICAgICAgICAgIHBhY2tzWzNdKDAsIDB4MTIwMDAwLCAweDQ1MDAwMCwgLTB4NDUwMDAwLAorICAgICAgICAgICAgICAgICAgICAgMHg3ZjAwMDAsIC0weDgwMDAwMCwgLTB4MTAwMDApKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMmxpbihkYXRhc1sxXSwgMSwgNCksCiAgICAgICAgICAgICBwYWNrc1s0XSgwLCAweDEyMDAwMDAwLCAweDQ1MDAwMDAwLCAtMHg0NTAwMDAwMCwKICAgICAgICAgICAgICAgICAgICAgIDB4N2YwMDAwMDAsIC0weDgwMDAwMDAwLCAtMHgxMDAwMDAwKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJsaW4oZGF0YXNbMl0sIDIsIDEpLAogICAgICAgICAgICAgYidceDAwXHgxMlx4NDVceGJhXHg3Zlx4ODBceGZmJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJsaW4oZGF0YXNbMl0sIDIsIDMpLAorICAgICAgICAgICAgcGFja3NbM10oMCwgMHgxMjM0MDAsIDB4NDU2NzAwLCAtMHg0NTY3MDAsCisgICAgICAgICAgICAgICAgICAgICAweDdmZmYwMCwgLTB4ODAwMDAwLCAtMHgxMDApKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMmxpbihkYXRhc1syXSwgMiwgNCksCiAgICAgICAgICAgICBwYWNrc1s0XSgwLCAweDEyMzQwMDAwLCAweDQ1NjcwMDAwLCAtMHg0NTY3MDAwMCwKICAgICAgICAgICAgICAgICAgICAgIDB4N2ZmZjAwMDAsIC0weDgwMDAwMDAwLCAtMHgxMDAwMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4ybGluKGRhdGFzWzNdLCAzLCAxKSwKKyAgICAgICAgICAgIGInXHgwMFx4MTJceDQ1XHhiYVx4N2ZceDgwXHhmZicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4ybGluKGRhdGFzWzNdLCAzLCAyKSwKKyAgICAgICAgICAgIHBhY2tzWzJdKDAsIDB4MTIzNCwgMHg0NTY3LCAtMHg0NTY4LCAweDdmZmYsIC0weDgwMDAsIC0xKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJsaW4oZGF0YXNbM10sIDMsIDQpLAorICAgICAgICAgICAgcGFja3NbNF0oMCwgMHgxMjM0NTYwMCwgMHg0NTY3ODkwMCwgLTB4NDU2Nzg5MDAsCisgICAgICAgICAgICAgICAgICAgICAweDdmZmZmZjAwLCAtMHg4MDAwMDAwMCwgLTB4MTAwKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJsaW4oZGF0YXNbNF0sIDQsIDEpLAogICAgICAgICAgICAgYidceDAwXHgxMlx4NDVceGJhXHg3Zlx4ODBceGZmJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJsaW4oZGF0YXNbNF0sIDQsIDIpLAogICAgICAgICAgICAgcGFja3NbMl0oMCwgMHgxMjM0LCAweDQ1NjcsIC0weDQ1NjgsIDB4N2ZmZiwgLTB4ODAwMCwgLTEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMmxpbihkYXRhc1s0XSwgNCwgMyksCisgICAgICAgICAgICBwYWNrc1szXSgwLCAweDEyMzQ1NiwgMHg0NTY3ODksIC0weDQ1Njc4YSwKKyAgICAgICAgICAgICAgICAgICAgIDB4N2ZmZmZmLCAtMHg4MDAwMDAsIC0xKSkKIAogICAgIGRlZiB0ZXN0X2FkcGNtMmxpbihzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmFkcGNtMmxpbihiJ1x4MDdceDdmXHg3ZicsIDEsIE5vbmUpLAogICAgICAgICAgICAgICAgICAgICAgICAgIChiJ1x4MDBceDAwXHgwMFx4ZmZceDAwXHhmZicsICgtMTc5LCA0MCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYWRwY20ybGluKGJ5dGVhcnJheShiJ1x4MDdceDdmXHg3ZicpLCAxLCBOb25lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoYidceDAwXHgwMFx4MDBceGZmXHgwMFx4ZmYnLCAoLTE3OSwgNDApKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmFkcGNtMmxpbihtZW1vcnl2aWV3KGInXHgwN1x4N2ZceDdmJyksIDEsIE5vbmUpLAorICAgICAgICAgICAgICAgICAgICAgICAgIChiJ1x4MDBceDAwXHgwMFx4ZmZceDAwXHhmZicsICgtMTc5LCA0MCkpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYWRwY20ybGluKGInXHgwN1x4N2ZceDdmJywgMiwgTm9uZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhY2tzWzJdKDAsIDB4YiwgMHgyOSwgLTB4MTYsIDB4NzIsIC0weGIzKSwgKC0xNzksIDQwKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hZHBjbTJsaW4oYidceDA3XHg3Zlx4N2YnLCAzLCBOb25lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAocGFja3NbM10oMCwgMHhiMDAsIDB4MjkwMCwgLTB4MTYwMCwgMHg3MjAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMHhiMzAwKSwgKC0xNzksIDQwKSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hZHBjbTJsaW4oYidceDA3XHg3Zlx4N2YnLCA0LCBOb25lKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAocGFja3NbNF0oMCwgMHhiMDAwMCwgMHgyOTAwMDAsIC0weDE2MDAwMCwgMHg3MjAwMDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0weGIzMDAwMCksICgtMTc5LCA0MCkpKQogCiAgICAgICAgICMgVmVyeSBjdXJzb3J5IHRlc3QKLSAgICAgICAgZm9yIHcgaW4gMSwgMiwgNDoKKyAgICAgICAgZm9yIHcgaW4gMSwgMiwgMywgNDoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hZHBjbTJsaW4oYidcMCcgKiA1LCB3LCBOb25lKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGInXDAnICogdyAqIDEwLCAoMCwgMCkpKQogCiAgICAgZGVmIHRlc3RfbGluMmFkcGNtKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMmFkcGNtKGRhdGFzWzFdLCAxLCBOb25lKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAoYidceDA3XHg3Zlx4N2YnLCAoLTIyMSwgMzkpKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJhZHBjbShkYXRhc1syXSwgMiwgTm9uZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgKGInXHgwN1x4N2ZceDdmJywgKDMxLCAzOSkpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMmFkcGNtKGRhdGFzWzRdLCA0LCBOb25lKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAoYidceDA3XHg3Zlx4N2YnLCAoMzEsIDM5KSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4yYWRwY20oYnl0ZWFycmF5KGRhdGFzWzFdKSwgMSwgTm9uZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgKGInXHgwN1x4N2ZceDdmJywgKC0yMjEsIDM5KSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4yYWRwY20obWVtb3J5dmlldyhkYXRhc1sxXSksIDEsIE5vbmUpLAorICAgICAgICAgICAgICAgICAgICAgICAgIChiJ1x4MDdceDdmXHg3ZicsICgtMjIxLCAzOSkpKQorICAgICAgICBmb3IgdyBpbiAyLCAzLCA0OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJhZHBjbShkYXRhc1t3XSwgdywgTm9uZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChiJ1x4MDdceDdmXHg3ZicsICgzMSwgMzkpKSkKIAogICAgICAgICAjIFZlcnkgY3Vyc29yeSB0ZXN0Ci0gICAgICAgIGZvciB3IGluIDEsIDIsIDQ6CisgICAgICAgIGZvciB3IGluIDEsIDIsIDMsIDQ6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMmFkcGNtKGInXDAnICogdyAqIDEwLCB3LCBOb25lKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGInXDAnICogNSwgKDAsIDApKSkKIAorICAgIGRlZiB0ZXN0X2ludmFsaWRfYWRwY21fc3RhdGUoc2VsZik6CisgICAgICAgICMgc3RhdGUgbXVzdCBiZSBhIHR1cGxlIG9yIE5vbmUsIG5vdCBhbiBpbnRlZ2VyCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYXVkaW9vcC5hZHBjbTJsaW4sIGInXDAnLCAxLCA1NTUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYXVkaW9vcC5saW4yYWRwY20sIGInXDAnLCAxLCA1NTUpCisgICAgICAgICMgSXNzdWVzICMyNDQ1NiwgIzI0NDU3OiBpbmRleCBvdXQgb2YgcmFuZ2UKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYXVkaW9vcC5hZHBjbTJsaW4sIGInXDAnLCAxLCAoMCwgLTEpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBhdWRpb29wLmFkcGNtMmxpbiwgYidcMCcsIDEsICgwLCA4OSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGF1ZGlvb3AubGluMmFkcGNtLCBiJ1wwJywgMSwgKDAsIC0xKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYXVkaW9vcC5saW4yYWRwY20sIGInXDAnLCAxLCAoMCwgODkpKQorICAgICAgICAjIHZhbHVlIG91dCBvZiByYW5nZQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBhdWRpb29wLmFkcGNtMmxpbiwgYidcMCcsIDEsICgtMHg4MDAxLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYXVkaW9vcC5hZHBjbTJsaW4sIGInXDAnLCAxLCAoMHg4MDAwLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYXVkaW9vcC5saW4yYWRwY20sIGInXDAnLCAxLCAoLTB4ODAwMSwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGF1ZGlvb3AubGluMmFkcGNtLCBiJ1wwJywgMSwgKDB4ODAwMCwgMCkpCisKICAgICBkZWYgdGVzdF9saW4yYWxhdyhzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJhbGF3KGRhdGFzWzFdLCAxKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1x4ZDVceDg3XHhhNFx4MjRceGFhXHgyYVx4NWEnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMmFsYXcoZGF0YXNbMl0sIDIpLAotICAgICAgICAgICAgICAgICAgICAgICAgIGInXHhkNVx4ODdceGE0XHgyNFx4YWFceDJhXHg1NScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4yYWxhdyhkYXRhc1s0XSwgNCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgYidceGQ1XHg4N1x4YTRceDI0XHhhYVx4MmFceDU1JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJhbGF3KGJ5dGVhcnJheShkYXRhc1sxXSksIDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGInXHhkNVx4ODdceGE0XHgyNFx4YWFceDJhXHg1YScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4yYWxhdyhtZW1vcnl2aWV3KGRhdGFzWzFdKSwgMSksCisgICAgICAgICAgICAgICAgICAgICAgICAgYidceGQ1XHg4N1x4YTRceDI0XHhhYVx4MmFceDVhJykKKyAgICAgICAgZm9yIHcgaW4gMiwgMywgNDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4yYWxhdyhkYXRhc1t3XSwgdyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXHhkNVx4ODdceGE0XHgyNFx4YWFceDJhXHg1NScpCiAKICAgICBkZWYgdGVzdF9hbGF3MmxpbihzZWxmKToKICAgICAgICAgZW5jb2RlZCA9IGInXHgwMFx4MDNceDI0XHgyYVx4NTFceDU0XHg1NVx4NThceDZiXHg3MVx4N2YnXAogICAgICAgICAgICAgICAgICAgYidceDgwXHg4M1x4YTRceGFhXHhkMVx4ZDRceGQ1XHhkOFx4ZWJceGYxXHhmZicKICAgICAgICAgc3JjID0gWy02ODgsIC03MjAsIC0yMjQwLCAtNDAzMiwgLTksIC0zLCAtMSwgLTI3LCAtMjQ0LCAtODIsIC0xMDYsCiAgICAgICAgICAgICAgICA2ODgsIDcyMCwgMjI0MCwgNDAzMiwgOSwgMywgMSwgMjcsIDI0NCwgODIsIDEwNl0KLSAgICAgICAgZm9yIHcgaW4gMSwgMiwgNDoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hbGF3MmxpbihlbmNvZGVkLCB3KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja3Nbd10oKih4IDw8ICh3ICogOCkgPj4gMTMgZm9yIHggaW4gc3JjKSkpCisgICAgICAgIGZvciB3IGluIDEsIDIsIDMsIDQ6CisgICAgICAgICAgICBkZWNvZGVkID0gcGFja3Nbd10oKih4IDw8ICh3ICogOCkgPj4gMTMgZm9yIHggaW4gc3JjKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hbGF3MmxpbihlbmNvZGVkLCB3KSwgZGVjb2RlZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hbGF3MmxpbihieXRlYXJyYXkoZW5jb2RlZCksIHcpLCBkZWNvZGVkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmFsYXcybGluKG1lbW9yeXZpZXcoZW5jb2RlZCksIHcpLCBkZWNvZGVkKQogCiAgICAgICAgIGVuY29kZWQgPSBieXRlcyhyYW5nZSgyNTYpKQotICAgICAgICBmb3IgdyBpbiAyLCA0OgorICAgICAgICBmb3IgdyBpbiAyLCAzLCA0OgogICAgICAgICAgICAgZGVjb2RlZCA9IGF1ZGlvb3AuYWxhdzJsaW4oZW5jb2RlZCwgdykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4yYWxhdyhkZWNvZGVkLCB3KSwgZW5jb2RlZCkKIAogICAgIGRlZiB0ZXN0X2xpbjJ1bGF3KHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMnVsYXcoZGF0YXNbMV0sIDEpLAogICAgICAgICAgICAgICAgICAgICAgICAgIGInXHhmZlx4YWRceDhlXHgwZVx4ODBceDAwXHg2NycpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4ydWxhdyhkYXRhc1syXSwgMiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgYidceGZmXHhhZFx4OGVceDBlXHg4MFx4MDBceDdlJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJ1bGF3KGRhdGFzWzRdLCA0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBiJ1x4ZmZceGFkXHg4ZVx4MGVceDgwXHgwMFx4N2UnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMnVsYXcoYnl0ZWFycmF5KGRhdGFzWzFdKSwgMSksCisgICAgICAgICAgICAgICAgICAgICAgICAgYidceGZmXHhhZFx4OGVceDBlXHg4MFx4MDBceDY3JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJ1bGF3KG1lbW9yeXZpZXcoZGF0YXNbMV0pLCAxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBiJ1x4ZmZceGFkXHg4ZVx4MGVceDgwXHgwMFx4NjcnKQorICAgICAgICBmb3IgdyBpbiAyLCAzLCA0OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJ1bGF3KGRhdGFzW3ddLCB3KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYidceGZmXHhhZFx4OGVceDBlXHg4MFx4MDBceDdlJykKIAogICAgIGRlZiB0ZXN0X3VsYXcybGluKHNlbGYpOgogICAgICAgICBlbmNvZGVkID0gYidceDAwXHgwZVx4MjhceDNmXHg1N1x4NmFceDc2XHg3Y1x4N2VceDdmJ1wKICAgICAgICAgICAgICAgICAgIGInXHg4MFx4OGVceGE4XHhiZlx4ZDdceGVhXHhmNlx4ZmNceGZlXHhmZicKICAgICAgICAgc3JjID0gWy04MDMxLCAtNDQ0NywgLTE0NzEsIC00OTUsIC0xNjMsIC01MywgLTE4LCAtNiwgLTIsIDAsCiAgICAgICAgICAgICAgICA4MDMxLCA0NDQ3LCAxNDcxLCA0OTUsIDE2MywgNTMsIDE4LCA2LCAyLCAwXQotICAgICAgICBmb3IgdyBpbiAxLCAyLCA0OgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLnVsYXcybGluKGVuY29kZWQsIHcpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrc1t3XSgqKHggPDwgKHcgKiA4KSA+PiAxNCBmb3IgeCBpbiBzcmMpKSkKKyAgICAgICAgZm9yIHcgaW4gMSwgMiwgMywgNDoKKyAgICAgICAgICAgIGRlY29kZWQgPSBwYWNrc1t3XSgqKHggPDwgKHcgKiA4KSA+PiAxNCBmb3IgeCBpbiBzcmMpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLnVsYXcybGluKGVuY29kZWQsIHcpLCBkZWNvZGVkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLnVsYXcybGluKGJ5dGVhcnJheShlbmNvZGVkKSwgdyksIGRlY29kZWQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AudWxhdzJsaW4obWVtb3J5dmlldyhlbmNvZGVkKSwgdyksIGRlY29kZWQpCiAKICAgICAgICAgIyBDdXJyZW50IHUtbGF3IGltcGxlbWVudGF0aW9uIGhhcyB0d28gY29kZXMgZm8gMDogMHg3ZiBhbmQgMHhmZi4KICAgICAgICAgZW5jb2RlZCA9IGJ5dGVzKHJhbmdlKDEyNykpICsgYnl0ZXMocmFuZ2UoMTI4LCAyNTYpKQotICAgICAgICBmb3IgdyBpbiAyLCA0OgorICAgICAgICBmb3IgdyBpbiAyLCAzLCA0OgogICAgICAgICAgICAgZGVjb2RlZCA9IGF1ZGlvb3AudWxhdzJsaW4oZW5jb2RlZCwgdykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4ydWxhdyhkZWNvZGVkLCB3KSwgZW5jb2RlZCkKIAogICAgIGRlZiB0ZXN0X211bChzZWxmKToKLSAgICAgICAgZm9yIHcgaW4gMSwgMiwgNDoKKyAgICAgICAgZm9yIHcgaW4gMSwgMiwgMywgNDoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5tdWwoYicnLCB3LCAyKSwgYicnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLm11bChieXRlYXJyYXkoKSwgdywgMiksIGInJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5tdWwobWVtb3J5dmlldyhiJycpLCB3LCAyKSwgYicnKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLm11bChkYXRhc1t3XSwgdywgMCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXDAnICogbGVuKGRhdGFzW3ddKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5tdWwoZGF0YXNbd10sIHcsIDEpLApAQCAtMjUzLDI2ICszNTIsMzYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1x4MDBceDI0XHg3Zlx4ODBceDdmXHg4MFx4ZmUnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubXVsKGRhdGFzWzJdLCAyLCAyKSwKICAgICAgICAgICAgICAgICBwYWNrc1syXSgwLCAweDI0NjgsIDB4N2ZmZiwgLTB4ODAwMCwgMHg3ZmZmLCAtMHg4MDAwLCAtMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5tdWwoZGF0YXNbM10sIDMsIDIpLAorICAgICAgICAgICAgICAgIHBhY2tzWzNdKDAsIDB4MjQ2OGFjLCAweDdmZmZmZiwgLTB4ODAwMDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgIDB4N2ZmZmZmLCAtMHg4MDAwMDAsIC0yKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLm11bChkYXRhc1s0XSwgNCwgMiksCiAgICAgICAgICAgICAgICAgcGFja3NbNF0oMCwgMHgyNDY4YWNmMCwgMHg3ZmZmZmZmZiwgLTB4ODAwMDAwMDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3ZmZmZmZmZiwgLTB4ODAwMDAwMDAsIC0yKSkKIAogICAgIGRlZiB0ZXN0X3JhdGVjdihzZWxmKToKLSAgICAgICAgZm9yIHcgaW4gMSwgMiwgNDoKKyAgICAgICAgZm9yIHcgaW4gMSwgMiwgMywgNDoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5yYXRlY3YoYicnLCB3LCAxLCA4MDAwLCA4MDAwLCBOb25lKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGInJywgKC0xLCAoKDAsIDApLCkpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5yYXRlY3YoYnl0ZWFycmF5KCksIHcsIDEsIDgwMDAsIDgwMDAsIE5vbmUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYicnLCAoLTEsICgoMCwgMCksKSkpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLnJhdGVjdihtZW1vcnl2aWV3KGInJyksIHcsIDEsIDgwMDAsIDgwMDAsIE5vbmUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYicnLCAoLTEsICgoMCwgMCksKSkpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLnJhdGVjdihiJycsIHcsIDUsIDgwMDAsIDgwMDAsIE5vbmUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYicnLCAoLTEsICgoMCwgMCksKSAqIDUpKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5yYXRlY3YoYicnLCB3LCAxLCA4MDAwLCAxNjAwMCwgTm9uZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChiJycsICgtMiwgKCgwLCAwKSwpKSkpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AucmF0ZWN2KGRhdGFzW3ddLCB3LCAxLCA4MDAwLCA4MDAwLCBOb25lKVswXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YXNbd10pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AucmF0ZWN2KGRhdGFzW3ddLCB3LCAxLCA4MDAwLCA4MDAwLCBOb25lLCAxLCAwKVswXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YXNbd10pCisKICAgICAgICAgc3RhdGUgPSBOb25lCiAgICAgICAgIGQxLCBzdGF0ZSA9IGF1ZGlvb3AucmF0ZWN2KGInXHgwMFx4MDFceDAyJywgMSwgMSwgODAwMCwgMTYwMDAsIHN0YXRlKQogICAgICAgICBkMiwgc3RhdGUgPSBhdWRpb29wLnJhdGVjdihiJ1x4MDBceDAxXHgwMicsIDEsIDEsIDgwMDAsIDE2MDAwLCBzdGF0ZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMSArIGQyLCBiJ1wwMDBcMDAwXDAwMVwwMDFcMDAyXDAwMVwwMDBcMDAwXDAwMVwwMDFcMDAyJykKIAotICAgICAgICBmb3IgdyBpbiAxLCAyLCA0OgorICAgICAgICBmb3IgdyBpbiAxLCAyLCAzLCA0OgogICAgICAgICAgICAgZDAsIHN0YXRlMCA9IGF1ZGlvb3AucmF0ZWN2KGRhdGFzW3ddLCB3LCAxLCA4MDAwLCAxNjAwMCwgTm9uZSkKICAgICAgICAgICAgIGQsIHN0YXRlID0gYicnLCBOb25lCiAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCBsZW4oZGF0YXNbd10pLCB3KToKQEAgLTI4MiwxNCArMzkxLDMwIEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIGQwKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0ZSwgc3RhdGUwKQogCisgICAgICAgIGV4cGVjdGVkID0geworICAgICAgICAgICAgMTogcGFja3NbMV0oMCwgMHgwZCwgMHgzNywgLTB4MjYsIDB4NTUsIC0weDRiLCAtMHgxNCksCisgICAgICAgICAgICAyOiBwYWNrc1syXSgwLCAweDBkYTcsIDB4Mzc3NywgLTB4MjYzMCwgMHg1NjczLCAtMHg0YTY0LCAtMHgxMjlhKSwKKyAgICAgICAgICAgIDM6IHBhY2tzWzNdKDAsIDB4MGRhNzQwLCAweDM3Nzc3NiwgLTB4MjYyZmNhLAorICAgICAgICAgICAgICAgICAgICAgICAgMHg1Njc0MGMsIC0weDRhNjJmZCwgLTB4MTI5OGMwKSwKKyAgICAgICAgICAgIDQ6IHBhY2tzWzRdKDAsIDB4MGRhNzQwZGEsIDB4Mzc3Nzc3NzYsIC0weDI2MmZjOTYyLAorICAgICAgICAgICAgICAgICAgICAgICAgMHg1Njc0MGRhNiwgLTB4NGE2MmZjOTYsIC0weDEyOThiZjI2KSwKKyAgICAgICAgfQorICAgICAgICBmb3IgdyBpbiAxLCAyLCAzLCA0OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLnJhdGVjdihkYXRhc1t3XSwgdywgMSwgODAwMCwgODAwMCwgTm9uZSwgMywgMSlbMF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkW3ddKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLnJhdGVjdihkYXRhc1t3XSwgdywgMSwgODAwMCwgODAwMCwgTm9uZSwgMzAsIDEwKVswXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRbd10pCisKICAgICBkZWYgdGVzdF9yZXZlcnNlKHNlbGYpOgotICAgICAgICBmb3IgdyBpbiAxLCAyLCA0OgorICAgICAgICBmb3IgdyBpbiAxLCAyLCAzLCA0OgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLnJldmVyc2UoYicnLCB3KSwgYicnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLnJldmVyc2UoYnl0ZWFycmF5KCksIHcpLCBiJycpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AucmV2ZXJzZShtZW1vcnl2aWV3KGInJyksIHcpLCBiJycpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AucmV2ZXJzZShwYWNrc1t3XSgwLCAxLCAyKSwgdyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2tzW3ddKDIsIDEsIDApKQogCiAgICAgZGVmIHRlc3RfdG9tb25vKHNlbGYpOgotICAgICAgICBmb3IgdyBpbiAxLCAyLCA0OgorICAgICAgICBmb3IgdyBpbiAxLCAyLCAzLCA0OgogICAgICAgICAgICAgZGF0YTEgPSBkYXRhc1t3XQogICAgICAgICAgICAgZGF0YTIgPSBieXRlYXJyYXkoMiAqIGxlbihkYXRhMSkpCiAgICAgICAgICAgICBmb3IgayBpbiByYW5nZSh3KToKQEAgLTI5OSw5ICs0MjQsMTMgQEAKICAgICAgICAgICAgIGZvciBrIGluIHJhbmdlKHcpOgogICAgICAgICAgICAgICAgIGRhdGEyW2srdzo6Mip3XSA9IGRhdGExW2s6OnddCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AudG9tb25vKGRhdGEyLCB3LCAwLjUsIDAuNSksIGRhdGExKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLnRvbW9ubyhieXRlYXJyYXkoZGF0YTIpLCB3LCAwLjUsIDAuNSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGExKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLnRvbW9ubyhtZW1vcnl2aWV3KGRhdGEyKSwgdywgMC41LCAwLjUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhMSkKIAogICAgIGRlZiB0ZXN0X3Rvc3RlcmVvKHNlbGYpOgotICAgICAgICBmb3IgdyBpbiAxLCAyLCA0OgorICAgICAgICBmb3IgdyBpbiAxLCAyLCAzLCA0OgogICAgICAgICAgICAgZGF0YTEgPSBkYXRhc1t3XQogICAgICAgICAgICAgZGF0YTIgPSBieXRlYXJyYXkoMiAqIGxlbihkYXRhMSkpCiAgICAgICAgICAgICBmb3IgayBpbiByYW5nZSh3KToKQEAgLTMxMSwxNCArNDQwLDI1IEBACiAgICAgICAgICAgICBmb3IgayBpbiByYW5nZSh3KToKICAgICAgICAgICAgICAgICBkYXRhMltrK3c6OjIqd10gPSBkYXRhMVtrOjp3XQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLnRvc3RlcmVvKGRhdGExLCB3LCAxLCAxKSwgZGF0YTIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AudG9zdGVyZW8oYnl0ZWFycmF5KGRhdGExKSwgdywgMSwgMSksIGRhdGEyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLnRvc3RlcmVvKG1lbW9yeXZpZXcoZGF0YTEpLCB3LCAxLCAxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTIpCiAKICAgICBkZWYgdGVzdF9maW5kZmFjdG9yKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuZmluZGZhY3RvcihkYXRhc1syXSwgZGF0YXNbMl0pLCAxLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5maW5kZmFjdG9yKGJ5dGVhcnJheShkYXRhc1syXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVhcnJheShkYXRhc1syXSkpLCAxLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5maW5kZmFjdG9yKG1lbW9yeXZpZXcoZGF0YXNbMl0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1vcnl2aWV3KGRhdGFzWzJdKSksIDEuMCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmZpbmRmYWN0b3IoYidcMCcgKiBsZW4oZGF0YXNbMl0pLCBkYXRhc1syXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgMC4wKQogCiAgICAgZGVmIHRlc3RfZmluZGZpdChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmZpbmRmaXQoZGF0YXNbMl0sIGRhdGFzWzJdKSwgKDAsIDEuMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5maW5kZml0KGJ5dGVhcnJheShkYXRhc1syXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVhcnJheShkYXRhc1syXSkpLCAoMCwgMS4wKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmZpbmRmaXQobWVtb3J5dmlldyhkYXRhc1syXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeXZpZXcoZGF0YXNbMl0pKSwgKDAsIDEuMCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5maW5kZml0KGRhdGFzWzJdLCBwYWNrc1syXSgxLCAyLCAwKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgKDEsIDgwMzguOCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5maW5kZml0KGRhdGFzWzJdWzotMl0gKiA1ICsgZGF0YXNbMl0sIGRhdGFzWzJdKSwKQEAgLTMyNiwxNiArNDY2LDM3IEBACiAKICAgICBkZWYgdGVzdF9maW5kbWF4KHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuZmluZG1heChkYXRhc1syXSwgMSksIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5maW5kbWF4KGJ5dGVhcnJheShkYXRhc1syXSksIDEpLCA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuZmluZG1heChtZW1vcnl2aWV3KGRhdGFzWzJdKSwgMSksIDUpCiAKICAgICBkZWYgdGVzdF9nZXRzYW1wbGUoc2VsZik6Ci0gICAgICAgIGZvciB3IGluIDEsIDIsIDQ6CisgICAgICAgIGZvciB3IGluIDEsIDIsIDMsIDQ6CiAgICAgICAgICAgICBkYXRhID0gcGFja3Nbd10oMCwgMSwgLTEsIG1heHZhbHVlc1t3XSwgbWludmFsdWVzW3ddKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmdldHNhbXBsZShkYXRhLCB3LCAwKSwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5nZXRzYW1wbGUoYnl0ZWFycmF5KGRhdGEpLCB3LCAwKSwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5nZXRzYW1wbGUobWVtb3J5dmlldyhkYXRhKSwgdywgMCksIDApCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuZ2V0c2FtcGxlKGRhdGEsIHcsIDEpLCAxKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmdldHNhbXBsZShkYXRhLCB3LCAyKSwgLTEpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuZ2V0c2FtcGxlKGRhdGEsIHcsIDMpLCBtYXh2YWx1ZXNbd10pCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuZ2V0c2FtcGxlKGRhdGEsIHcsIDQpLCBtaW52YWx1ZXNbd10pCiAKKyAgICBkZWYgdGVzdF9ieXRlc3dhcChzZWxmKToKKyAgICAgICAgc3dhcHBlZF9kYXRhcyA9IHsKKyAgICAgICAgICAgIDE6IGRhdGFzWzFdLAorICAgICAgICAgICAgMjogcGFja3NbMl0oMCwgMHgzNDEyLCAweDY3NDUsIC0weDY2NDYsIC0weDgxLCAweDgwLCAtMSksCisgICAgICAgICAgICAzOiBwYWNrc1szXSgwLCAweDU2MzQxMiwgLTB4NzY5OGJiLCAweDc3OThiYSwgLTB4ODEsIDB4ODAsIC0xKSwKKyAgICAgICAgICAgIDQ6IHBhY2tzWzRdKDAsIDB4Nzg1NjM0MTIsIC0weDU0NzY5OGJiLCAweDU1NzY5OGJhLAorICAgICAgICAgICAgICAgICAgICAgICAgLTB4ODEsIDB4ODAsIC0xKSwKKyAgICAgICAgfQorICAgICAgICBmb3IgdyBpbiAxLCAyLCAzLCA0OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmJ5dGVzd2FwKGInJywgdyksIGInJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5ieXRlc3dhcChkYXRhc1t3XSwgdyksIHN3YXBwZWRfZGF0YXNbd10pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYnl0ZXN3YXAoc3dhcHBlZF9kYXRhc1t3XSwgdyksIGRhdGFzW3ddKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmJ5dGVzd2FwKGJ5dGVhcnJheShkYXRhc1t3XSksIHcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2FwcGVkX2RhdGFzW3ddKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmJ5dGVzd2FwKG1lbW9yeXZpZXcoZGF0YXNbd10pLCB3KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dhcHBlZF9kYXRhc1t3XSkKKwogICAgIGRlZiB0ZXN0X25lZ2F0aXZlbGVuKHNlbGYpOgogICAgICAgICAjIGZyb20gaXNzdWUgMzMwNiwgcHJldmlvdXNseSBpdCBzZWdmYXVsdGVkCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGF1ZGlvb3AuZXJyb3IsCkBAIC0zNjUsMTAgKzUyNiwzMyBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYXVkaW9vcC5lcnJvciwgYXVkaW9vcC5saW4yYWxhdywgZGF0YSwgc2l6ZSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGF1ZGlvb3AuZXJyb3IsIGF1ZGlvb3AubGluMmFkcGNtLCBkYXRhLCBzaXplLCBzdGF0ZSkKIAorICAgIGRlZiB0ZXN0X3N0cmluZyhzZWxmKToKKyAgICAgICAgZGF0YSA9ICdhYmNkJworICAgICAgICBzaXplID0gMgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGF1ZGlvb3AuZ2V0c2FtcGxlLCBkYXRhLCBzaXplLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGF1ZGlvb3AubWF4LCBkYXRhLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGF1ZGlvb3AubWlubWF4LCBkYXRhLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGF1ZGlvb3AuYXZnLCBkYXRhLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGF1ZGlvb3Aucm1zLCBkYXRhLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGF1ZGlvb3AuYXZncHAsIGRhdGEsIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYXVkaW9vcC5tYXhwcCwgZGF0YSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhdWRpb29wLmNyb3NzLCBkYXRhLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGF1ZGlvb3AubXVsLCBkYXRhLCBzaXplLCAxLjApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYXVkaW9vcC50b21vbm8sIGRhdGEsIHNpemUsIDAuNSwgMC41KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGF1ZGlvb3AudG9zdGVyZW8sIGRhdGEsIHNpemUsIDAuNSwgMC41KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGF1ZGlvb3AuYWRkLCBkYXRhLCBkYXRhLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGF1ZGlvb3AuYmlhcywgZGF0YSwgc2l6ZSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhdWRpb29wLnJldmVyc2UsIGRhdGEsIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYXVkaW9vcC5saW4ybGluLCBkYXRhLCBzaXplLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGF1ZGlvb3AucmF0ZWN2LCBkYXRhLCBzaXplLCAxLCAxLCAxLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGF1ZGlvb3AubGluMnVsYXcsIGRhdGEsIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYXVkaW9vcC5saW4yYWxhdywgZGF0YSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhdWRpb29wLmxpbjJhZHBjbSwgZGF0YSwgc2l6ZSwgTm9uZSkKKwogICAgIGRlZiB0ZXN0X3dyb25nc2l6ZShzZWxmKToKICAgICAgICAgZGF0YSA9IGInYWJjZGVmZ2gnCiAgICAgICAgIHN0YXRlID0gTm9uZQotICAgICAgICBmb3Igc2l6ZSBpbiAoLTEsIDAsIDMsIDUsIDEwMjQpOgorICAgICAgICBmb3Igc2l6ZSBpbiAoLTEsIDAsIDUsIDEwMjQpOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYXVkaW9vcC5lcnJvciwgYXVkaW9vcC51bGF3MmxpbiwgZGF0YSwgc2l6ZSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGF1ZGlvb3AuZXJyb3IsIGF1ZGlvb3AuYWxhdzJsaW4sIGRhdGEsIHNpemUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhhdWRpb29wLmVycm9yLCBhdWRpb29wLmFkcGNtMmxpbiwgZGF0YSwgc2l6ZSwgc3RhdGUpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2F1Z2Fzc2lnbi5weSBiL0xpYi90ZXN0L3Rlc3RfYXVnYXNzaWduLnB5CmluZGV4IDlhNTljNTguLjBlNzVjNmIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfYXVnYXNzaWduLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfYXVnYXNzaWduLnB5CkBAIC0xMzYsMTQgKzEzNiw2IEBACiAgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiX19pbXVsX18gY2FsbGVkIikKICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZgogCi0gICAgICAgICAgICBkZWYgX19kaXZfXyhzZWxmLCB2YWwpOgotICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoIl9fZGl2X18gY2FsbGVkIikKLSAgICAgICAgICAgIGRlZiBfX3JkaXZfXyhzZWxmLCB2YWwpOgotICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoIl9fcmRpdl9fIGNhbGxlZCIpCi0gICAgICAgICAgICBkZWYgX19pZGl2X18oc2VsZiwgdmFsKToKLSAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCJfX2lkaXZfXyBjYWxsZWQiKQotICAgICAgICAgICAgICAgIHJldHVybiBzZWxmCi0KICAgICAgICAgICAgIGRlZiBfX2Zsb29yZGl2X18oc2VsZiwgdmFsKToKICAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCJfX2Zsb29yZGl2X18gY2FsbGVkIikKICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9iYXNlNjQucHkgYi9MaWIvdGVzdC90ZXN0X2Jhc2U2NC5weQppbmRleCAxMzY5NWRlLi5iOTczOGRkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2Jhc2U2NC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2Jhc2U2NC5weQpAQCAtNSwxMCArNSwyMSBAQAogaW1wb3J0IG9zCiBpbXBvcnQgc3lzCiBpbXBvcnQgc3VicHJvY2VzcwotCitpbXBvcnQgc3RydWN0Citmcm9tIGFycmF5IGltcG9ydCBhcnJheQogCiAKIGNsYXNzIExlZ2FjeUJhc2U2NFRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgICMgTGVnYWN5IEFQSSBpcyBub3QgYXMgcGVybWlzc2l2ZSBhcyB0aGUgbW9kZXJuIEFQSQorICAgIGRlZiBjaGVja190eXBlX2Vycm9ycyhzZWxmLCBmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmLCAiIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmLCBbXSkKKyAgICAgICAgbXVsdGlkaW1lbnNpb25hbCA9IG1lbW9yeXZpZXcoYiIxMjM0IikuY2FzdCgnQicsICgyLCAyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmLCBtdWx0aWRpbWVuc2lvbmFsKQorICAgICAgICBpbnRfZGF0YSA9IG1lbW9yeXZpZXcoYiIxMjM0IikuY2FzdCgnSScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZiwgaW50X2RhdGEpCisKICAgICBkZWYgdGVzdF9lbmNvZGVieXRlcyhzZWxmKToKICAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCiAgICAgICAgIGVxKGJhc2U2NC5lbmNvZGVieXRlcyhiInd3dy5weXRob24ub3JnIiksIGIiZDNkM0xuQjVkR2h2Ymk1dmNtYz1cbiIpCkBAIC0yNCw3ICszNSw5IEBACiAgICAgICAgICAgIGIiWTNPRGtoUUNNd1hpWXFLQ2s3T2p3K0xDNGdXMTE3ZlE9PVxuIikKICAgICAgICAgIyBOb24tYnl0ZXMKICAgICAgICAgZXEoYmFzZTY0LmVuY29kZWJ5dGVzKGJ5dGVhcnJheShiJ2FiYycpKSwgYidZV0pqXG4nKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGJhc2U2NC5lbmNvZGVieXRlcywgIiIpCisgICAgICAgIGVxKGJhc2U2NC5lbmNvZGVieXRlcyhtZW1vcnl2aWV3KGInYWJjJykpLCBiJ1lXSmpcbicpCisgICAgICAgIGVxKGJhc2U2NC5lbmNvZGVieXRlcyhhcnJheSgnQicsIGInYWJjJykpLCBiJ1lXSmpcbicpCisgICAgICAgIHNlbGYuY2hlY2tfdHlwZV9lcnJvcnMoYmFzZTY0LmVuY29kZWJ5dGVzKQogCiAgICAgZGVmIHRlc3RfZGVjb2RlYnl0ZXMoc2VsZik6CiAgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbApAQCAtNDEsNyArNTQsOSBAQAogICAgICAgICBlcShiYXNlNjQuZGVjb2RlYnl0ZXMoYicnKSwgYicnKQogICAgICAgICAjIE5vbi1ieXRlcwogICAgICAgICBlcShiYXNlNjQuZGVjb2RlYnl0ZXMoYnl0ZWFycmF5KGInWVdKalxuJykpLCBiJ2FiYycpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYmFzZTY0LmRlY29kZWJ5dGVzLCAiIikKKyAgICAgICAgZXEoYmFzZTY0LmRlY29kZWJ5dGVzKG1lbW9yeXZpZXcoYidZV0pqXG4nKSksIGInYWJjJykKKyAgICAgICAgZXEoYmFzZTY0LmRlY29kZWJ5dGVzKGFycmF5KCdCJywgYidZV0pqXG4nKSksIGInYWJjJykKKyAgICAgICAgc2VsZi5jaGVja190eXBlX2Vycm9ycyhiYXNlNjQuZGVjb2RlYnl0ZXMpCiAKICAgICBkZWYgdGVzdF9lbmNvZGUoc2VsZik6CiAgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbApAQCAtNzMsNiArODgsNDIgQEAKIAogCiBjbGFzcyBCYXNlWFlUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICAjIE1vZGVybiBBUEkgY29tcGxldGVseSBpZ25vcmVzIGV4cG9ydGVkIGRpbWVuc2lvbiBhbmQgZm9ybWF0IGRhdGEgYW5kCisgICAgIyB0cmVhdHMgYW55IGJ1ZmZlciBhcyBhIHN0cmVhbSBvZiBieXRlcworICAgIGRlZiBjaGVja19lbmNvZGVfdHlwZV9lcnJvcnMoc2VsZiwgZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZiwgIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZiwgW10pCisKKyAgICBkZWYgY2hlY2tfZGVjb2RlX3R5cGVfZXJyb3JzKHNlbGYsIGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGYsIFtdKQorCisgICAgZGVmIGNoZWNrX290aGVyX3R5cGVzKHNlbGYsIGYsIGJ5dGVzX2RhdGEsIGV4cGVjdGVkKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIGIgPSBieXRlYXJyYXkoYnl0ZXNfZGF0YSkKKyAgICAgICAgZXEoZihiKSwgZXhwZWN0ZWQpCisgICAgICAgICMgVGhlIGJ5dGVhcnJheSB3YXNuJ3QgbXV0YXRlZAorICAgICAgICBlcShiLCBieXRlc19kYXRhKQorICAgICAgICBlcShmKG1lbW9yeXZpZXcoYnl0ZXNfZGF0YSkpLCBleHBlY3RlZCkKKyAgICAgICAgZXEoZihhcnJheSgnQicsIGJ5dGVzX2RhdGEpKSwgZXhwZWN0ZWQpCisgICAgICAgICMgWFhYIHdoeSBpcyBiNjRlbmNvZGUgaGFyZGNvZGVkIGhlcmU/CisgICAgICAgIHNlbGYuY2hlY2tfbm9uYnl0ZV9lbGVtZW50X2Zvcm1hdChiYXNlNjQuYjY0ZW5jb2RlLCBieXRlc19kYXRhKQorICAgICAgICBzZWxmLmNoZWNrX211bHRpZGltZW5zaW9uYWwoYmFzZTY0LmI2NGVuY29kZSwgYnl0ZXNfZGF0YSkKKworICAgIGRlZiBjaGVja19tdWx0aWRpbWVuc2lvbmFsKHNlbGYsIGYsIGRhdGEpOgorICAgICAgICBwYWRkaW5nID0gYiJceDAwIiBpZiBsZW4oZGF0YSkgJSAyIGVsc2UgYiIiCisgICAgICAgIGJ5dGVzX2RhdGEgPSBkYXRhICsgcGFkZGluZyAjIE1ha2Ugc3VyZSBjYXN0IHdvcmtzCisgICAgICAgIHNoYXBlID0gKGxlbihieXRlc19kYXRhKSAvLyAyLCAyKQorICAgICAgICBtdWx0aWRpbWVuc2lvbmFsID0gbWVtb3J5dmlldyhieXRlc19kYXRhKS5jYXN0KCdCJywgc2hhcGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZihtdWx0aWRpbWVuc2lvbmFsKSwgZihieXRlc19kYXRhKSkKKworICAgIGRlZiBjaGVja19ub25ieXRlX2VsZW1lbnRfZm9ybWF0KHNlbGYsIGYsIGRhdGEpOgorICAgICAgICBwYWRkaW5nID0gYiJceDAwIiAqICgoNCAtIGxlbihkYXRhKSkgJSA0KQorICAgICAgICBieXRlc19kYXRhID0gZGF0YSArIHBhZGRpbmcgIyBNYWtlIHN1cmUgY2FzdCB3b3JrcworICAgICAgICBpbnRfZGF0YSA9IG1lbW9yeXZpZXcoYnl0ZXNfZGF0YSkuY2FzdCgnSScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZihpbnRfZGF0YSksIGYoYnl0ZXNfZGF0YSkpCisKKwogICAgIGRlZiB0ZXN0X2I2NGVuY29kZShzZWxmKToKICAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCiAgICAgICAgICMgVGVzdCBkZWZhdWx0IGFscGhhYmV0CkBAIC05MCwxMyArMTQxLDE2IEBACiAgICAgICAgICAgIGIiWTNPRGtoUUNNd1hpWXFLQ2s3T2p3K0xDNGdXMTE3ZlE9PSIpCiAgICAgICAgICMgVGVzdCB3aXRoIGFyYml0cmFyeSBhbHRlcm5hdGl2ZSBjaGFyYWN0ZXJzCiAgICAgICAgIGVxKGJhc2U2NC5iNjRlbmNvZGUoYidceGQzVlx4YmVvXHhmN1x4MWQnLCBhbHRjaGFycz1iJyokJyksIGInMDFhKmIkY2QnKQotICAgICAgICAjIE5vbi1ieXRlcwotICAgICAgICBlcShiYXNlNjQuYjY0ZW5jb2RlKGJ5dGVhcnJheShiJ2FiY2QnKSksIGInWVdKalpBPT0nKQogICAgICAgICBlcShiYXNlNjQuYjY0ZW5jb2RlKGInXHhkM1ZceGJlb1x4ZjdceDFkJywgYWx0Y2hhcnM9Ynl0ZWFycmF5KGInKiQnKSksCiAgICAgICAgICAgIGInMDFhKmIkY2QnKQotICAgICAgICAjIENoZWNrIGlmIHBhc3NpbmcgYSBzdHIgb2JqZWN0IHJhaXNlcyBhbiBlcnJvcgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGJhc2U2NC5iNjRlbmNvZGUsICIiKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGJhc2U2NC5iNjRlbmNvZGUsIGIiIiwgYWx0Y2hhcnM9IiIpCisgICAgICAgIGVxKGJhc2U2NC5iNjRlbmNvZGUoYidceGQzVlx4YmVvXHhmN1x4MWQnLCBhbHRjaGFycz1tZW1vcnl2aWV3KGInKiQnKSksCisgICAgICAgICAgIGInMDFhKmIkY2QnKQorICAgICAgICBlcShiYXNlNjQuYjY0ZW5jb2RlKGInXHhkM1ZceGJlb1x4ZjdceDFkJywgYWx0Y2hhcnM9YXJyYXkoJ0InLCBiJyokJykpLAorICAgICAgICAgICBiJzAxYSpiJGNkJykKKyAgICAgICAgIyBOb24tYnl0ZXMKKyAgICAgICAgc2VsZi5jaGVja19vdGhlcl90eXBlcyhiYXNlNjQuYjY0ZW5jb2RlLCBiJ2FiY2QnLCBiJ1lXSmpaQT09JykKKyAgICAgICAgc2VsZi5jaGVja19lbmNvZGVfdHlwZV9lcnJvcnMoYmFzZTY0LmI2NGVuY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBiYXNlNjQuYjY0ZW5jb2RlLCBiIiIsIGFsdGNoYXJzPSIqJCIpCiAgICAgICAgICMgVGVzdCBzdGFuZGFyZCBhbHBoYWJldAogICAgICAgICBlcShiYXNlNjQuc3RhbmRhcmRfYjY0ZW5jb2RlKGIid3d3LnB5dGhvbi5vcmciKSwgYiJkM2QzTG5CNWRHaHZiaTV2Y21jPSIpCiAgICAgICAgIGVxKGJhc2U2NC5zdGFuZGFyZF9iNjRlbmNvZGUoYiJhIiksIGIiWVE9PSIpCkBAIC0xMTAsMTUgKzE2NCwxNSBAQAogICAgICAgICAgICBiIlJVWkhTRWxLUzB4TlRrOVFVVkpUVkZWV1YxaFpXakF4TWpNME5UIgogICAgICAgICAgICBiIlkzT0RraFFDTXdYaVlxS0NrN09qdytMQzRnVzExN2ZRPT0iKQogICAgICAgICAjIE5vbi1ieXRlcwotICAgICAgICBlcShiYXNlNjQuc3RhbmRhcmRfYjY0ZW5jb2RlKGJ5dGVhcnJheShiJ2FiY2QnKSksIGInWVdKalpBPT0nKQotICAgICAgICAjIENoZWNrIGlmIHBhc3NpbmcgYSBzdHIgb2JqZWN0IHJhaXNlcyBhbiBlcnJvcgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGJhc2U2NC5zdGFuZGFyZF9iNjRlbmNvZGUsICIiKQorICAgICAgICBzZWxmLmNoZWNrX290aGVyX3R5cGVzKGJhc2U2NC5zdGFuZGFyZF9iNjRlbmNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhYmNkJywgYidZV0pqWkE9PScpCisgICAgICAgIHNlbGYuY2hlY2tfZW5jb2RlX3R5cGVfZXJyb3JzKGJhc2U2NC5zdGFuZGFyZF9iNjRlbmNvZGUpCiAgICAgICAgICMgVGVzdCB3aXRoICdVUkwgc2FmZScgYWx0ZXJuYXRpdmUgY2hhcmFjdGVycwogICAgICAgICBlcShiYXNlNjQudXJsc2FmZV9iNjRlbmNvZGUoYidceGQzVlx4YmVvXHhmN1x4MWQnKSwgYicwMWEtYl9jZCcpCiAgICAgICAgICMgTm9uLWJ5dGVzCi0gICAgICAgIGVxKGJhc2U2NC51cmxzYWZlX2I2NGVuY29kZShieXRlYXJyYXkoYidceGQzVlx4YmVvXHhmN1x4MWQnKSksIGInMDFhLWJfY2QnKQotICAgICAgICAjIENoZWNrIGlmIHBhc3NpbmcgYSBzdHIgb2JqZWN0IHJhaXNlcyBhbiBlcnJvcgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGJhc2U2NC51cmxzYWZlX2I2NGVuY29kZSwgIiIpCisgICAgICAgIHNlbGYuY2hlY2tfb3RoZXJfdHlwZXMoYmFzZTY0LnVybHNhZmVfYjY0ZW5jb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXHhkM1ZceGJlb1x4ZjdceDFkJywgYicwMWEtYl9jZCcpCisgICAgICAgIHNlbGYuY2hlY2tfZW5jb2RlX3R5cGVfZXJyb3JzKGJhc2U2NC51cmxzYWZlX2I2NGVuY29kZSkKIAogICAgIGRlZiB0ZXN0X2I2NGRlY29kZShzZWxmKToKICAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCkBAIC0xNDEsNyArMTk1LDggQEAKICAgICAgICAgICAgIGVxKGJhc2U2NC5iNjRkZWNvZGUoZGF0YSksIHJlcykKICAgICAgICAgICAgIGVxKGJhc2U2NC5iNjRkZWNvZGUoZGF0YS5kZWNvZGUoJ2FzY2lpJykpLCByZXMpCiAgICAgICAgICMgTm9uLWJ5dGVzCi0gICAgICAgIGVxKGJhc2U2NC5iNjRkZWNvZGUoYnl0ZWFycmF5KGIiWVdKaiIpKSwgYiJhYmMiKQorICAgICAgICBzZWxmLmNoZWNrX290aGVyX3R5cGVzKGJhc2U2NC5iNjRkZWNvZGUsIGIiWVdKaiIsIGIiYWJjIikKKyAgICAgICAgc2VsZi5jaGVja19kZWNvZGVfdHlwZV9lcnJvcnMoYmFzZTY0LmI2NGRlY29kZSkKIAogICAgICAgICAjIFRlc3Qgd2l0aCBhcmJpdHJhcnkgYWx0ZXJuYXRpdmUgY2hhcmFjdGVycwogICAgICAgICB0ZXN0c19hbHRjaGFycyA9IHsoYicwMWEqYiRjZCcsIGInKiQnKTogYidceGQzVlx4YmVvXHhmN1x4MWQnLApAQCAtMTYwLDcgKzIxNSw4IEBACiAgICAgICAgICAgICBlcShiYXNlNjQuc3RhbmRhcmRfYjY0ZGVjb2RlKGRhdGEpLCByZXMpCiAgICAgICAgICAgICBlcShiYXNlNjQuc3RhbmRhcmRfYjY0ZGVjb2RlKGRhdGEuZGVjb2RlKCdhc2NpaScpKSwgcmVzKQogICAgICAgICAjIE5vbi1ieXRlcwotICAgICAgICBlcShiYXNlNjQuc3RhbmRhcmRfYjY0ZGVjb2RlKGJ5dGVhcnJheShiIllXSmoiKSksIGIiYWJjIikKKyAgICAgICAgc2VsZi5jaGVja19vdGhlcl90eXBlcyhiYXNlNjQuc3RhbmRhcmRfYjY0ZGVjb2RlLCBiIllXSmoiLCBiImFiYyIpCisgICAgICAgIHNlbGYuY2hlY2tfZGVjb2RlX3R5cGVfZXJyb3JzKGJhc2U2NC5zdGFuZGFyZF9iNjRkZWNvZGUpCiAKICAgICAgICAgIyBUZXN0IHdpdGggJ1VSTCBzYWZlJyBhbHRlcm5hdGl2ZSBjaGFyYWN0ZXJzCiAgICAgICAgIHRlc3RzX3VybHNhZmUgPSB7YicwMWEtYl9jZCc6IGInXHhkM1ZceGJlb1x4ZjdceDFkJywKQEAgLTE3MCw3ICsyMjYsOSBAQAogICAgICAgICAgICAgZXEoYmFzZTY0LnVybHNhZmVfYjY0ZGVjb2RlKGRhdGEpLCByZXMpCiAgICAgICAgICAgICBlcShiYXNlNjQudXJsc2FmZV9iNjRkZWNvZGUoZGF0YS5kZWNvZGUoJ2FzY2lpJykpLCByZXMpCiAgICAgICAgICMgTm9uLWJ5dGVzCi0gICAgICAgIGVxKGJhc2U2NC51cmxzYWZlX2I2NGRlY29kZShieXRlYXJyYXkoYicwMWEtYl9jZCcpKSwgYidceGQzVlx4YmVvXHhmN1x4MWQnKQorICAgICAgICBzZWxmLmNoZWNrX290aGVyX3R5cGVzKGJhc2U2NC51cmxzYWZlX2I2NGRlY29kZSwgYicwMWEtYl9jZCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYidceGQzVlx4YmVvXHhmN1x4MWQnKQorICAgICAgICBzZWxmLmNoZWNrX2RlY29kZV90eXBlX2Vycm9ycyhiYXNlNjQudXJsc2FmZV9iNjRkZWNvZGUpCiAKICAgICBkZWYgdGVzdF9iNjRkZWNvZGVfcGFkZGluZ19lcnJvcihzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYmluYXNjaWkuRXJyb3IsIGJhc2U2NC5iNjRkZWNvZGUsIGInYWJjJykKQEAgLTIwNSw4ICsyNjMsOCBAQAogICAgICAgICBlcShiYXNlNjQuYjMyZW5jb2RlKGInYWJjZCcpLCBiJ01GUkdHWkE9JykKICAgICAgICAgZXEoYmFzZTY0LmIzMmVuY29kZShiJ2FiY2RlJyksIGInTUZSR0daREYnKQogICAgICAgICAjIE5vbi1ieXRlcwotICAgICAgICBlcShiYXNlNjQuYjMyZW5jb2RlKGJ5dGVhcnJheShiJ2FiY2QnKSksIGInTUZSR0daQT0nKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGJhc2U2NC5iMzJlbmNvZGUsICIiKQorICAgICAgICBzZWxmLmNoZWNrX290aGVyX3R5cGVzKGJhc2U2NC5iMzJlbmNvZGUsIGInYWJjZCcsIGInTUZSR0daQT0nKQorICAgICAgICBzZWxmLmNoZWNrX2VuY29kZV90eXBlX2Vycm9ycyhiYXNlNjQuYjMyZW5jb2RlKQogCiAgICAgZGVmIHRlc3RfYjMyZGVjb2RlKHNlbGYpOgogICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKQEAgLTIyMiw3ICsyODAsOCBAQAogICAgICAgICAgICAgZXEoYmFzZTY0LmIzMmRlY29kZShkYXRhKSwgcmVzKQogICAgICAgICAgICAgZXEoYmFzZTY0LmIzMmRlY29kZShkYXRhLmRlY29kZSgnYXNjaWknKSksIHJlcykKICAgICAgICAgIyBOb24tYnl0ZXMKLSAgICAgICAgZXEoYmFzZTY0LmIzMmRlY29kZShieXRlYXJyYXkoYidNRlJHRz09PScpKSwgYidhYmMnKQorICAgICAgICBzZWxmLmNoZWNrX290aGVyX3R5cGVzKGJhc2U2NC5iMzJkZWNvZGUsIGInTUZSR0c9PT0nLCBiImFiYyIpCisgICAgICAgIHNlbGYuY2hlY2tfZGVjb2RlX3R5cGVfZXJyb3JzKGJhc2U2NC5iMzJkZWNvZGUpCiAKICAgICBkZWYgdGVzdF9iMzJkZWNvZGVfY2FzZWZvbGQoc2VsZik6CiAgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbApAQCAtMjc3LDggKzMzNiw5IEBACiAgICAgICAgIGVxKGJhc2U2NC5iMTZlbmNvZGUoYidceDAxXHgwMlx4YWJceGNkXHhlZicpLCBiJzAxMDJBQkNERUYnKQogICAgICAgICBlcShiYXNlNjQuYjE2ZW5jb2RlKGInXHgwMCcpLCBiJzAwJykKICAgICAgICAgIyBOb24tYnl0ZXMKLSAgICAgICAgZXEoYmFzZTY0LmIxNmVuY29kZShieXRlYXJyYXkoYidceDAxXHgwMlx4YWJceGNkXHhlZicpKSwgYicwMTAyQUJDREVGJykKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBiYXNlNjQuYjE2ZW5jb2RlLCAiIikKKyAgICAgICAgc2VsZi5jaGVja19vdGhlcl90eXBlcyhiYXNlNjQuYjE2ZW5jb2RlLCBiJ1x4MDFceDAyXHhhYlx4Y2RceGVmJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiJzAxMDJBQkNERUYnKQorICAgICAgICBzZWxmLmNoZWNrX2VuY29kZV90eXBlX2Vycm9ycyhiYXNlNjQuYjE2ZW5jb2RlKQogCiAgICAgZGVmIHRlc3RfYjE2ZGVjb2RlKHNlbGYpOgogICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKQEAgLTI5MywxNCArMzUzLDI2OCBAQAogICAgICAgICBlcShiYXNlNjQuYjE2ZGVjb2RlKGInMDEwMmFiY2RlZicsIFRydWUpLCBiJ1x4MDFceDAyXHhhYlx4Y2RceGVmJykKICAgICAgICAgZXEoYmFzZTY0LmIxNmRlY29kZSgnMDEwMmFiY2RlZicsIFRydWUpLCBiJ1x4MDFceDAyXHhhYlx4Y2RceGVmJykKICAgICAgICAgIyBOb24tYnl0ZXMKLSAgICAgICAgZXEoYmFzZTY0LmIxNmRlY29kZShieXRlYXJyYXkoYiIwMTAyQUJDREVGIikpLCBiJ1x4MDFceDAyXHhhYlx4Y2RceGVmJykKKyAgICAgICAgc2VsZi5jaGVja19vdGhlcl90eXBlcyhiYXNlNjQuYjE2ZGVjb2RlLCBiIjAxMDJBQkNERUYiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXHgwMVx4MDJceGFiXHhjZFx4ZWYnKQorICAgICAgICBzZWxmLmNoZWNrX2RlY29kZV90eXBlX2Vycm9ycyhiYXNlNjQuYjE2ZGVjb2RlKQorICAgICAgICBlcShiYXNlNjQuYjE2ZGVjb2RlKGJ5dGVhcnJheShiIjAxMDJhYmNkZWYiKSwgVHJ1ZSksCisgICAgICAgICAgIGInXHgwMVx4MDJceGFiXHhjZFx4ZWYnKQorICAgICAgICBlcShiYXNlNjQuYjE2ZGVjb2RlKG1lbW9yeXZpZXcoYiIwMTAyYWJjZGVmIiksIFRydWUpLAorICAgICAgICAgICBiJ1x4MDFceDAyXHhhYlx4Y2RceGVmJykKKyAgICAgICAgZXEoYmFzZTY0LmIxNmRlY29kZShhcnJheSgnQicsIGIiMDEwMmFiY2RlZiIpLCBUcnVlKSwKKyAgICAgICAgICAgYidceDAxXHgwMlx4YWJceGNkXHhlZicpCisKKyAgICBkZWYgdGVzdF9hODVlbmNvZGUoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorCisgICAgICAgIHRlc3RzID0geworICAgICAgICAgICAgYicnOiBiJycsCisgICAgICAgICAgICBiInd3dy5weXRob24ub3JnIjogYidHQlxcNmBFLVpQPURmLjFHRWI+JywKKyAgICAgICAgICAgIGJ5dGVzKHJhbmdlKDI1NSkpOiBiIiIiISEqLSciOWV1NyNSTGhHJGszW1cmLm9OZydHVkIiKGA9NTIqJCQiIiIKKyAgICAgICAgICAgICAgIGIiIiIoQis8X3BSLFVGY2Itbi1Wci8xaUotMEpQPT0xYzcwTTMmcyNdND9Za201WEBfKDZxJ1I4ODRjRSIiIgorICAgICAgICAgICAgICAgYiIiIkg5TUo4WDpmMStoPClsdCM9QlNnMz5bOlpDP3QhTVNBN11AY0JQRDNzQ2krJy5FLGZvPkZFTWJOIiIiCisgICAgICAgICAgICAgICBiIiIiR140VV5JIXBIbko6VzwpS1M+LzlMbCUiSU4vYGpZT0hHXWlQYS5RJFIkakQ0Uz1RN0RUVjgqVFUiIiIKKyAgICAgICAgICAgICAgIGIiIiJuc3JkVzJaZXRYS0FZL1lkKEw/WydkP09cXEBLMl9dWTIlb15xbW4qYDVUYTphTjtUSmJnIkdaZCIiIgorICAgICAgICAgICAgICAgYiIiIipeOmplQ0UuJWZcXCwhNWd0Z2lFaThOXFxValE1T2VraXFCdW0tWDYwbkY/KUBvXyVxUHEiYWRgIiIiCisgICAgICAgICAgICAgICBiIiIicjtIVCIiIiwKKyAgICAgICAgICAgIGIiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiIKKyAgICAgICAgICAgICAgICBiIjAxMjM0NTY3ODkhQCMwXiYqKCk7Ojw+LC4gW117fSI6CisgICAgICAgICAgICAgICAgYidAOkVfV0FTLFJnQmtoRiJEL085MkVINixCRmBxdFJIJFZiQzZVWEA0N24/M0Q5MiYmVCcKKyAgICAgICAgICAgICAgICBiIjpKYW5kO2NIYXQ9Jy9VLzBKUD09MWM3ME0zJnItSSw7PEZOLk9aYC0zXW9TVy9nK0EoSFtQIiwKKyAgICAgICAgICAgIGIibm8gcGFkZGluZy4uIjogYidESnBZOkA6V25fREooUlMnLAorICAgICAgICAgICAgYiJ6ZXJvIGNvbXByZXNzaW9uXDBcMFwwXDAiOiBiJ0g9Xyw4K0NmPixFLG9OMkYob1ExeicsCisgICAgICAgICAgICBiInplcm8gY29tcHJlc3Npb25cMFwwXDAiOiBiJ0g9Xyw4K0NmPixFLG9OMkYob1ExISEhIScsCisgICAgICAgICAgICBiIkJvdW5kYXJ5OlwwXDBcMFwwIjogYic2PnEhYUE3OU0oM1dLLVshIScsCisgICAgICAgICAgICBiIlNwYWNlIGNvbXByOiAgICAiOiBiJztmSC9UQUtZSyREL2FNVis8VmRMJywKKyAgICAgICAgICAgIGInXHhmZic6IGIncnInLAorICAgICAgICAgICAgYidceGZmJyoyOiBiJ3M4TicsCisgICAgICAgICAgICBiJ1x4ZmYnKjM6IGInczhXKicsCisgICAgICAgICAgICBiJ1x4ZmYnKjQ6IGInczhXLSEnLAorICAgICAgICAgICAgfQorCisgICAgICAgIGZvciBkYXRhLCByZXMgaW4gdGVzdHMuaXRlbXMoKToKKyAgICAgICAgICAgIGVxKGJhc2U2NC5hODVlbmNvZGUoZGF0YSksIHJlcywgZGF0YSkKKyAgICAgICAgICAgIGVxKGJhc2U2NC5hODVlbmNvZGUoZGF0YSwgYWRvYmU9RmFsc2UpLCByZXMsIGRhdGEpCisgICAgICAgICAgICBlcShiYXNlNjQuYTg1ZW5jb2RlKGRhdGEsIGFkb2JlPVRydWUpLCBiJzx+JyArIHJlcyArIGInfj4nLCBkYXRhKQorCisgICAgICAgIHNlbGYuY2hlY2tfb3RoZXJfdHlwZXMoYmFzZTY0LmE4NWVuY29kZSwgYiJ3d3cucHl0aG9uLm9yZyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYidHQlxcNmBFLVpQPURmLjFHRWI+JykKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGJhc2U2NC5hODVlbmNvZGUsICIiKQorCisgICAgICAgIGVxKGJhc2U2NC5hODVlbmNvZGUoYiJ3d3cucHl0aG9uLm9yZyIsIHdyYXBjb2w9NywgYWRvYmU9RmFsc2UpLAorICAgICAgICAgICBiJ0dCXFw2YEUtXG5aUD1EZi4xXG5HRWI+JykKKyAgICAgICAgZXEoYmFzZTY0LmE4NWVuY29kZShiIlwwXDBcMFwwd3d3LnB5dGhvbi5vcmciLCB3cmFwY29sPTcsIGFkb2JlPUZhbHNlKSwKKyAgICAgICAgICAgYid6R0JcXDZgRVxuLVpQPURmLlxuMUdFYj4nKQorICAgICAgICBlcShiYXNlNjQuYTg1ZW5jb2RlKGIid3d3LnB5dGhvbi5vcmciLCB3cmFwY29sPTcsIGFkb2JlPVRydWUpLAorICAgICAgICAgICBiJzx+R0JcXDZgXG5FLVpQPURmXG4uMUdFYj5cbn4+JykKKworICAgICAgICBlcShiYXNlNjQuYTg1ZW5jb2RlKGInICcqOCwgZm9sZHNwYWNlcz1UcnVlLCBhZG9iZT1GYWxzZSksIGIneXknKQorICAgICAgICBlcShiYXNlNjQuYTg1ZW5jb2RlKGInICcqNywgZm9sZHNwYWNlcz1UcnVlLCBhZG9iZT1GYWxzZSksIGIneSs8VmQnKQorICAgICAgICBlcShiYXNlNjQuYTg1ZW5jb2RlKGInICcqNiwgZm9sZHNwYWNlcz1UcnVlLCBhZG9iZT1GYWxzZSksIGIneSs8VScpCisgICAgICAgIGVxKGJhc2U2NC5hODVlbmNvZGUoYicgJyo1LCBmb2xkc3BhY2VzPVRydWUsIGFkb2JlPUZhbHNlKSwgYid5KzknKQorCisgICAgZGVmIHRlc3RfYjg1ZW5jb2RlKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKworICAgICAgICB0ZXN0cyA9IHsKKyAgICAgICAgICAgIGInJzogYicnLAorICAgICAgICAgICAgYid3d3cucHl0aG9uLm9yZyc6IGInY1h4TCNhQ3ZsU1oqREdjYSVUJywKKyAgICAgICAgICAgIGJ5dGVzKHJhbmdlKDI1NSkpOiBiIiIiMDA5QzYxTyl+TTJuaC1jMz1Jd3M1RF5qKzZjclgxNyNTS0g5MzM3WCIiIgorICAgICAgICAgICAgICAgIGIiIiJBUiFfbkJxYiYlQ0BDcntFRztmQ0ZmbFNTRyZNRmlJNXwyeUpVdT0/S3RWITdMYDZuTk5KJmFkIiIiCisgICAgICAgICAgICAgICAgYiIiIk9pZk50UCpHQS1SOD59MlNYbytJVHdQdllVfTBpb1dNeVYmWGxaSXxZO0E2RGFCKl5UYmFpJWoiIiIKKyAgICAgICAgICAgICAgICBiIiIiY3pKcXplMF9kQGZQc1I4Z29URU9oPjQxZWpFIzx1a2RjeTtsJERtM24zPFpKb1NtTVpwck45cCIiIgorICAgICAgICAgICAgICAgIGIiIiJxQHx7KHNIdil9dGdXdUV1KDdoVXc2KFVreFZnSCF5dUg0XnpgP0A5I0twJFAkalFwZiUrMWN2IiIiCisgICAgICAgICAgICAgICAgYiIiIig5elA8KVlhRDQqeEIwSyt9KzthO05qeHE8bUtrKT07YFh+P0N0TEZAYlU4Vl4hNGBsYDEkKCMiIiIKKyAgICAgICAgICAgICAgICBiIiIie1FkcCIiIiwKKyAgICAgICAgICAgIGIiIiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIiIiCisgICAgICAgICAgICAgICAgYiIiIjAxMjM0NTY3ODkhQCMwXiYqKCk7Ojw+LC4gW117fSIiIjoKKyAgICAgICAgICAgICAgICBiIiIiVlBhIXNXb0JuK1g9LWIxWkVrT0hhZExCWGIjYH1uZDNyJVlMcXRWSk1AVUlaT0g1NXBQZiRAKCIiIgorICAgICAgICAgICAgICAgIGIiIiJRJmQkfVM2RXFFRmZsU1NHJk1GaUk1e0NlQlFSYmpEa3YjQ0l5Xm9zRStBVzdkd2wiIiIsCisgICAgICAgICAgICBiJ25vIHBhZGRpbmcuLic6IGInWmZfdVBWUHNAIVpmN25vJywKKyAgICAgICAgICAgIGInemVybyBjb21wcmVzc2lvblx4MDBceDAwXHgwMFx4MDAnOiBiJ2RTIUJOQVkqVEJhQl5qSGI3Xm1HMDAwMDAnLAorICAgICAgICAgICAgYid6ZXJvIGNvbXByZXNzaW9uXHgwMFx4MDBceDAwJzogYidkUyFCTkFZKlRCYUJeakhiN15tRzAwMDAnLAorICAgICAgICAgICAgYiIiIkJvdW5kYXJ5Olx4MDBceDAwXHgwMFx4MDAiIiI6IGIiIiJMVGAwJFdNT2k3SXNnQ3cwMCIiIiwKKyAgICAgICAgICAgIGInU3BhY2UgY29tcHI6ICAgICc6IGInUSpkRXBXZ3VnM1pFJGlyQVJyKGgnLAorICAgICAgICAgICAgYidceGZmJzogYid7eycsCisgICAgICAgICAgICBiJ1x4ZmYnKjI6IGInfE5qJywKKyAgICAgICAgICAgIGInXHhmZicqMzogYid8TnM5JywKKyAgICAgICAgICAgIGInXHhmZicqNDogYid8TnNDMCcsCisgICAgICAgIH0KKworICAgICAgICBmb3IgZGF0YSwgcmVzIGluIHRlc3RzLml0ZW1zKCk6CisgICAgICAgICAgICBlcShiYXNlNjQuYjg1ZW5jb2RlKGRhdGEpLCByZXMpCisKKyAgICAgICAgc2VsZi5jaGVja19vdGhlcl90eXBlcyhiYXNlNjQuYjg1ZW5jb2RlLCBiInd3dy5weXRob24ub3JnIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NYeEwjYUN2bFNaKkRHY2ElVCcpCisKKyAgICBkZWYgdGVzdF9hODVkZWNvZGUoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorCisgICAgICAgIHRlc3RzID0geworICAgICAgICAgICAgYicnOiBiJycsCisgICAgICAgICAgICBiJ0dCXFw2YEUtWlA9RGYuMUdFYj4nOiBiJ3d3dy5weXRob24ub3JnJywKKyAgICAgICAgICAgIGIiIiIhICEgKiAtJyJcblx0XHQ5ZXVcclxuNyMgIFJMXHZoRyRrM1tXJi5vTmcnR1ZCIihgPTUyKiQkIiIiCisgICAgICAgICAgICAgICBiIiIiKEIrPF9wUixVRmNiLW4tVnIvMWlKLTBKUD09MWM3ME0zJnMjXTQ/WWttNVhAXyg2cSdSODg0Y0UiIiIKKyAgICAgICAgICAgICAgIGIiIiJIOU1KOFg6ZjEraDwpbHQjPUJTZzM+WzpaQz90IU1TQTddQGNCUEQzc0NpKycuRSxmbz5GRU1iTiIiIgorICAgICAgICAgICAgICAgYiIiIkdeNFVeSSFwSG5KOlc8KUtTPi85TGwlIklOL2BqWU9IR11pUGEuUSRSJGpENFM9UTdEVFY4KlRVIiIiCisgICAgICAgICAgICAgICBiIiIibnNyZFcyWmV0WEtBWS9ZZChMP1snZD9PXFxASzJfXVkyJW9ecW1uKmA1VGE6YU47VEpiZyJHWmQiIiIKKyAgICAgICAgICAgICAgIGIiIiIqXjpqZUNFLiVmXFwsITVndGdpRWk4TlxcVWpRNU9la2lxQnVtLVg2MG5GPylAb18lcVBxImFkYCIiIgorICAgICAgICAgICAgICAgYiIiInI7SFQiIiI6IGJ5dGVzKHJhbmdlKDI1NSkpLAorICAgICAgICAgICAgYiIiIkA6RV9XQVMsUmdCa2hGIkQvTzkyRUg2LEJGYHF0UkgkVmJDNlVYQDQ3bj8zRDkyJiZUOkphbmQ7YyIiIgorICAgICAgICAgICAgICAgIGIiIiJIYXQ9Jy9VLzBKUD09MWM3ME0zJnItSSw7PEZOLk9aYC0zXW9TVy9nK0EoSFtQIiIiOgorICAgICAgICAgICAgICAgIGInYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWjAxMjM0JworICAgICAgICAgICAgICAgIGInNTY3ODkhQCMwXiYqKCk7Ojw+LC4gW117fScsCisgICAgICAgICAgICBiJ0RKcFk6QDpXbl9ESihSUyc6IGInbm8gcGFkZGluZy4uJywKKyAgICAgICAgICAgIGInSD1fLDgrQ2Y+LEUsb04yRihvUTF6JzogYid6ZXJvIGNvbXByZXNzaW9uXHgwMFx4MDBceDAwXHgwMCcsCisgICAgICAgICAgICBiJ0g9Xyw4K0NmPixFLG9OMkYob1ExISEhISc6IGInemVybyBjb21wcmVzc2lvblx4MDBceDAwXHgwMCcsCisgICAgICAgICAgICBiJzY+cSFhQTc5TSgzV0stWyEhJzogYiJCb3VuZGFyeTpceDAwXHgwMFx4MDBceDAwIiwKKyAgICAgICAgICAgIGInO2ZIL1RBS1lLJEQvYU1WKzxWZEwnOiBiJ1NwYWNlIGNvbXByOiAgICAnLAorICAgICAgICAgICAgYidycic6IGInXHhmZicsCisgICAgICAgICAgICBiJ3M4Tic6IGInXHhmZicqMiwKKyAgICAgICAgICAgIGInczhXKic6IGInXHhmZicqMywKKyAgICAgICAgICAgIGInczhXLSEnOiBiJ1x4ZmYnKjQsCisgICAgICAgICAgICB9CisKKyAgICAgICAgZm9yIGRhdGEsIHJlcyBpbiB0ZXN0cy5pdGVtcygpOgorICAgICAgICAgICAgZXEoYmFzZTY0LmE4NWRlY29kZShkYXRhKSwgcmVzLCBkYXRhKQorICAgICAgICAgICAgZXEoYmFzZTY0LmE4NWRlY29kZShkYXRhLCBhZG9iZT1GYWxzZSksIHJlcywgZGF0YSkKKyAgICAgICAgICAgIGVxKGJhc2U2NC5hODVkZWNvZGUoZGF0YS5kZWNvZGUoImFzY2lpIiksIGFkb2JlPUZhbHNlKSwgcmVzLCBkYXRhKQorICAgICAgICAgICAgZXEoYmFzZTY0LmE4NWRlY29kZShiJzx+JyArIGRhdGEgKyBiJ34+JywgYWRvYmU9VHJ1ZSksIHJlcywgZGF0YSkKKyAgICAgICAgICAgIGVxKGJhc2U2NC5hODVkZWNvZGUoJzx+JXN+PicgJSBkYXRhLmRlY29kZSgiYXNjaWkiKSwgYWRvYmU9VHJ1ZSksCisgICAgICAgICAgICAgICByZXMsIGRhdGEpCisKKyAgICAgICAgZXEoYmFzZTY0LmE4NWRlY29kZShiJ3l5JywgZm9sZHNwYWNlcz1UcnVlLCBhZG9iZT1GYWxzZSksIGInICcqOCkKKyAgICAgICAgZXEoYmFzZTY0LmE4NWRlY29kZShiJ3krPFZkJywgZm9sZHNwYWNlcz1UcnVlLCBhZG9iZT1GYWxzZSksIGInICcqNykKKyAgICAgICAgZXEoYmFzZTY0LmE4NWRlY29kZShiJ3krPFUnLCBmb2xkc3BhY2VzPVRydWUsIGFkb2JlPUZhbHNlKSwgYicgJyo2KQorICAgICAgICBlcShiYXNlNjQuYTg1ZGVjb2RlKGIneSs5JywgZm9sZHNwYWNlcz1UcnVlLCBhZG9iZT1GYWxzZSksIGInICcqNSkKKworICAgICAgICBzZWxmLmNoZWNrX290aGVyX3R5cGVzKGJhc2U2NC5hODVkZWNvZGUsIGInR0JcXDZgRS1aUD1EZi4xR0ViPicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJ3d3cucHl0aG9uLm9yZyIpCisKKyAgICBkZWYgdGVzdF9iODVkZWNvZGUoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorCisgICAgICAgIHRlc3RzID0geworICAgICAgICAgICAgYicnOiBiJycsCisgICAgICAgICAgICBiJ2NYeEwjYUN2bFNaKkRHY2ElVCc6IGInd3d3LnB5dGhvbi5vcmcnLAorICAgICAgICAgICAgYiIiIjAwOUM2MU8pfk0ybmgtYzM9SXdzNUReais2Y3JYMTcjU0tIOTMzN1giIiIKKyAgICAgICAgICAgICAgICBiIiIiQVIhX25CcWImJUNAQ3J7RUc7ZkNGZmxTU0cmTUZpSTV8MnlKVXU9P0t0ViE3TGA2bk5OSiZhZCIiIgorICAgICAgICAgICAgICAgIGIiIiJPaWZOdFAqR0EtUjg+fTJTWG8rSVR3UHZZVX0waW9XTXlWJlhsWkl8WTtBNkRhQipeVGJhaSVqIiIiCisgICAgICAgICAgICAgICAgYiIiImN6SnF6ZTBfZEBmUHNSOGdvVEVPaD40MWVqRSM8dWtkY3k7bCREbTNuMzxaSm9TbU1acHJOOXAiIiIKKyAgICAgICAgICAgICAgICBiIiIicUB8eyhzSHYpfXRnV3VFdSg3aFV3NihVa3hWZ0gheXVINF56YD9AOSNLcCRQJGpRcGYlKzFjdiIiIgorICAgICAgICAgICAgICAgIGIiIiIoOXpQPClZYUQ0KnhCMEsrfSs7YTtOanhxPG1Layk9O2BYfj9DdExGQGJVOFZeITRgbGAxJCgjIiIiCisgICAgICAgICAgICAgICAgYiIiIntRZHAiIiI6IGJ5dGVzKHJhbmdlKDI1NSkpLAorICAgICAgICAgICAgYiIiIlZQYSFzV29CbitYPS1iMVpFa09IYWRMQlhiI2B9bmQzciVZTHF0VkpNQFVJWk9INTVwUGYkQCgiIiIKKyAgICAgICAgICAgICAgICBiIiIiUSZkJH1TNkVxRUZmbFNTRyZNRmlJNXtDZUJRUmJqRGt2I0NJeV5vc0UrQVc3ZHdsIiIiOgorICAgICAgICAgICAgICAgIGIiIiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIiIiCisgICAgICAgICAgICAgICAgYiIiIjAxMjM0NTY3ODkhQCMwXiYqKCk7Ojw+LC4gW117fSIiIiwKKyAgICAgICAgICAgIGInWmZfdVBWUHNAIVpmN25vJzogYidubyBwYWRkaW5nLi4nLAorICAgICAgICAgICAgYidkUyFCTkFZKlRCYUJeakhiN15tRzAwMDAwJzogYid6ZXJvIGNvbXByZXNzaW9uXHgwMFx4MDBceDAwXHgwMCcsCisgICAgICAgICAgICBiJ2RTIUJOQVkqVEJhQl5qSGI3Xm1HMDAwMCc6IGInemVybyBjb21wcmVzc2lvblx4MDBceDAwXHgwMCcsCisgICAgICAgICAgICBiIiIiTFRgMCRXTU9pN0lzZ0N3MDAiIiI6IGIiIiJCb3VuZGFyeTpceDAwXHgwMFx4MDBceDAwIiIiLAorICAgICAgICAgICAgYidRKmRFcFdndWczWkUkaXJBUnIoaCc6IGInU3BhY2UgY29tcHI6ICAgICcsCisgICAgICAgICAgICBiJ3t7JzogYidceGZmJywKKyAgICAgICAgICAgIGInfE5qJzogYidceGZmJyoyLAorICAgICAgICAgICAgYid8TnM5JzogYidceGZmJyozLAorICAgICAgICAgICAgYid8TnNDMCc6IGInXHhmZicqNCwKKyAgICAgICAgfQorCisgICAgICAgIGZvciBkYXRhLCByZXMgaW4gdGVzdHMuaXRlbXMoKToKKyAgICAgICAgICAgIGVxKGJhc2U2NC5iODVkZWNvZGUoZGF0YSksIHJlcykKKyAgICAgICAgICAgIGVxKGJhc2U2NC5iODVkZWNvZGUoZGF0YS5kZWNvZGUoImFzY2lpIikpLCByZXMpCisKKyAgICAgICAgc2VsZi5jaGVja19vdGhlcl90eXBlcyhiYXNlNjQuYjg1ZGVjb2RlLCBiJ2NYeEwjYUN2bFNaKkRHY2ElVCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJ3d3cucHl0aG9uLm9yZyIpCisKKyAgICBkZWYgdGVzdF9hODVfcGFkZGluZyhzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisKKyAgICAgICAgZXEoYmFzZTY0LmE4NWVuY29kZShiIngiLCBwYWQ9VHJ1ZSksIGInR1E3XkQnKQorICAgICAgICBlcShiYXNlNjQuYTg1ZW5jb2RlKGIieHgiLCBwYWQ9VHJ1ZSksIGIiR14nMmciKQorICAgICAgICBlcShiYXNlNjQuYTg1ZW5jb2RlKGIieHh4IiwgcGFkPVRydWUpLCBiJ0deK0g1JykKKyAgICAgICAgZXEoYmFzZTY0LmE4NWVuY29kZShiInh4eHgiLCBwYWQ9VHJ1ZSksIGInR14rSVgnKQorICAgICAgICBlcShiYXNlNjQuYTg1ZW5jb2RlKGIieHh4eHgiLCBwYWQ9VHJ1ZSksIGInR14rSVhHUTdeRCcpCisKKyAgICAgICAgZXEoYmFzZTY0LmE4NWRlY29kZShiJ0dRN15EJyksIGIieFx4MDBceDAwXHgwMCIpCisgICAgICAgIGVxKGJhc2U2NC5hODVkZWNvZGUoYiJHXicyZyIpLCBiInh4XHgwMFx4MDAiKQorICAgICAgICBlcShiYXNlNjQuYTg1ZGVjb2RlKGInR14rSDUnKSwgYiJ4eHhceDAwIikKKyAgICAgICAgZXEoYmFzZTY0LmE4NWRlY29kZShiJ0deK0lYJyksIGIieHh4eCIpCisgICAgICAgIGVxKGJhc2U2NC5hODVkZWNvZGUoYidHXitJWEdRN15EJyksIGIieHh4eHhceDAwXHgwMFx4MDAiKQorCisgICAgZGVmIHRlc3RfYjg1X3BhZGRpbmcoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorCisgICAgICAgIGVxKGJhc2U2NC5iODVlbmNvZGUoYiJ4IiwgcGFkPVRydWUpLCBiJ2NtTXpaJykKKyAgICAgICAgZXEoYmFzZTY0LmI4NWVuY29kZShiInh4IiwgcGFkPVRydWUpLCBiJ2N6NkgrJykKKyAgICAgICAgZXEoYmFzZTY0LmI4NWVuY29kZShiInh4eCIsIHBhZD1UcnVlKSwgYidjekFkSycpCisgICAgICAgIGVxKGJhc2U2NC5iODVlbmNvZGUoYiJ4eHh4IiwgcGFkPVRydWUpLCBiJ2N6QWV0JykKKyAgICAgICAgZXEoYmFzZTY0LmI4NWVuY29kZShiInh4eHh4IiwgcGFkPVRydWUpLCBiJ2N6QWV0Y21NelonKQorCisgICAgICAgIGVxKGJhc2U2NC5iODVkZWNvZGUoYidjbU16WicpLCBiInhceDAwXHgwMFx4MDAiKQorICAgICAgICBlcShiYXNlNjQuYjg1ZGVjb2RlKGInY3o2SCsnKSwgYiJ4eFx4MDBceDAwIikKKyAgICAgICAgZXEoYmFzZTY0LmI4NWRlY29kZShiJ2N6QWRLJyksIGIieHh4XHgwMCIpCisgICAgICAgIGVxKGJhc2U2NC5iODVkZWNvZGUoYidjekFldCcpLCBiInh4eHgiKQorICAgICAgICBlcShiYXNlNjQuYjg1ZGVjb2RlKGInY3pBZXRjbU16WicpLCBiInh4eHh4XHgwMFx4MDBceDAwIikKKworICAgIGRlZiB0ZXN0X2E4NWRlY29kZV9lcnJvcnMoc2VsZik6CisgICAgICAgIGlsbGVnYWwgPSAoc2V0KHJhbmdlKDMyKSkgfCBzZXQocmFuZ2UoMTE4LCAyNTYpKSkgLSBzZXQoYicgXHRcblxyXHYnKQorICAgICAgICBmb3IgYyBpbiBpbGxlZ2FsOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtc2c9Ynl0ZXMoW2NdKSk6CisgICAgICAgICAgICAgICAgYmFzZTY0LmE4NWRlY29kZShiJyEhISEnICsgYnl0ZXMoW2NdKSkKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbXNnPWJ5dGVzKFtjXSkpOgorICAgICAgICAgICAgICAgIGJhc2U2NC5hODVkZWNvZGUoYichISEhJyArIGJ5dGVzKFtjXSksIGFkb2JlPUZhbHNlKQorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtc2c9Ynl0ZXMoW2NdKSk6CisgICAgICAgICAgICAgICAgYmFzZTY0LmE4NWRlY29kZShiJzx+ISEhIScgKyBieXRlcyhbY10pICsgYid+PicsIGFkb2JlPVRydWUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYmFzZTY0LmE4NWRlY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJtYWxmb3JtZWQiLCBhZG9iZT1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBiYXNlNjQuYTg1ZGVjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiIjx+c3RpbGwgbWFsZm9ybWVkIiwgYWRvYmU9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYmFzZTY0LmE4NWRlY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJhbHNvIG1hbGZvcm1lZH4+IiwgYWRvYmU9VHJ1ZSkKKworICAgICAgICAjIFdpdGggYWRvYmU9RmFsc2UgKHRoZSBkZWZhdWx0KSwgQWRvYmUgZnJhbWluZyBtYXJrZXJzIGFyZSBkaXNhbGxvd2VkCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJhc2U2NC5hODVkZWNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiPH5+PiIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJhc2U2NC5hODVkZWNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiPH5+PiIsIGFkb2JlPUZhbHNlKQorICAgICAgICBiYXNlNjQuYTg1ZGVjb2RlKGIiPH5+PiIsIGFkb2JlPVRydWUpICAjIHNhbml0eSBjaGVjaworCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJhc2U2NC5hODVkZWNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiYWJjeCIsIGFkb2JlPUZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBiYXNlNjQuYTg1ZGVjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiImFiY2RleSIsIGFkb2JlPUZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBiYXNlNjQuYTg1ZGVjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiImEgYlxuYyIsIGFkb2JlPUZhbHNlLCBpZ25vcmVjaGFycz1iIiIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYmFzZTY0LmE4NWRlY29kZSwgYidzJywgYWRvYmU9RmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJhc2U2NC5hODVkZWNvZGUsIGInczgnLCBhZG9iZT1GYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYmFzZTY0LmE4NWRlY29kZSwgYidzOFcnLCBhZG9iZT1GYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYmFzZTY0LmE4NWRlY29kZSwgYidzOFctJywgYWRvYmU9RmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJhc2U2NC5hODVkZWNvZGUsIGInczhXLSInLCBhZG9iZT1GYWxzZSkKKworICAgIGRlZiB0ZXN0X2I4NWRlY29kZV9lcnJvcnMoc2VsZik6CisgICAgICAgIGlsbGVnYWwgPSBsaXN0KHJhbmdlKDMzKSkgKyBcCisgICAgICAgICAgICAgICAgICBsaXN0KGInIlwnLC4vOltcXF0nKSArIFwKKyAgICAgICAgICAgICAgICAgIGxpc3QocmFuZ2UoMTI4LCAyNTYpKQorICAgICAgICBmb3IgYyBpbiBpbGxlZ2FsOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtc2c9Ynl0ZXMoW2NdKSk6CisgICAgICAgICAgICAgICAgYmFzZTY0LmI4NWRlY29kZShiJzAwMDAnICsgYnl0ZXMoW2NdKSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBiYXNlNjQuYjg1ZGVjb2RlLCBiJ3wnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBiYXNlNjQuYjg1ZGVjb2RlLCBiJ3xOJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYmFzZTY0LmI4NWRlY29kZSwgYid8TnMnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBiYXNlNjQuYjg1ZGVjb2RlLCBiJ3xOc0MnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBiYXNlNjQuYjg1ZGVjb2RlLCBiJ3xOc0MxJykKIAogICAgIGRlZiB0ZXN0X2RlY29kZV9ub25hc2NpaV9zdHIoc2VsZik6CiAgICAgICAgIGRlY29kZV9mdW5jcyA9IChiYXNlNjQuYjY0ZGVjb2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTY0LnN0YW5kYXJkX2I2NGRlY29kZSwKICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U2NC51cmxzYWZlX2I2NGRlY29kZSwKICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U2NC5iMzJkZWNvZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICBiYXNlNjQuYjE2ZGVjb2RlKQorICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTY0LmIxNmRlY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U2NC5iODVkZWNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICBiYXNlNjQuYTg1ZGVjb2RlKQogICAgICAgICBmb3IgZiBpbiBkZWNvZGVfZnVuY3M6CiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmLCAnd2l0aCBub24tYXNjaWkgXHhjYicpCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYmluYXNjaWkucHkgYi9MaWIvdGVzdC90ZXN0X2JpbmFzY2lpLnB5CmluZGV4IDA0ZDhmOWQuLjM4OWRhYTAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfYmluYXNjaWkucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9iaW5hc2NpaS5weQpAQCAtMTM2LDYgKzEzNiwxOCBAQAogICAgICAgICAjIElzc3VlICM3NzAxIChjcmFzaCBvbiBhIHB5ZGVidWcgYnVpbGQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmluYXNjaWkuYjJhX3V1KGIneCcpLCBiJyE+ICAgXG4nKQogCisgICAgZGVmIHRlc3RfY3JjX2hxeChzZWxmKToKKyAgICAgICAgY3JjID0gYmluYXNjaWkuY3JjX2hxeChzZWxmLnR5cGUydGVzdChiIlRlc3QgdGhlIENSQy0zMiBvZiIpLCAwKQorICAgICAgICBjcmMgPSBiaW5hc2NpaS5jcmNfaHF4KHNlbGYudHlwZTJ0ZXN0KGIiIHRoaXMgc3RyaW5nLiIpLCBjcmMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3JjLCAxNDI5MCkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGJpbmFzY2lpLmNyY19ocXgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYmluYXNjaWkuY3JjX2hxeCwgc2VsZi50eXBlMnRlc3QoYicnKSkKKworICAgICAgICBmb3IgY3JjIGluIDAsIDEsIDB4MTIzNCwgMHgxMjM0NSwgMHgxMjM0NTY3OCwgLTE6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJpbmFzY2lpLmNyY19ocXgoc2VsZi50eXBlMnRlc3QoYicnKSwgY3JjKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JjICYgMHhmZmZmKQorCiAgICAgZGVmIHRlc3RfY3JjMzIoc2VsZik6CiAgICAgICAgIGNyYyA9IGJpbmFzY2lpLmNyYzMyKHNlbGYudHlwZTJ0ZXN0KGIiVGVzdCB0aGUgQ1JDLTMyIG9mIikpCiAgICAgICAgIGNyYyA9IGJpbmFzY2lpLmNyYzMyKHNlbGYudHlwZTJ0ZXN0KGIiIHRoaXMgc3RyaW5nLiIpLCBjcmMpCkBAIC0xNjIsOSArMTc0LDEzIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGJpbmFzY2lpLkVycm9yLCBiaW5hc2NpaS5hMmJfaGV4LCB0WzotMV0pCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGJpbmFzY2lpLkVycm9yLCBiaW5hc2NpaS5hMmJfaGV4LCB0WzotMV0gKyBiJ3EnKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmluYXNjaWkuaGV4bGlmeShiJ2EnKSwgYic2MScpCisgICAgICAgICMgQ29uZmlybSB0aGF0IGIyYV9oZXggPT0gaGV4bGlmeSBhbmQgYTJiX2hleCA9PSB1bmhleGxpZnkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiaW5hc2NpaS5oZXhsaWZ5KHNlbGYudHlwZTJ0ZXN0KHMpKSwgdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiaW5hc2NpaS51bmhleGxpZnkoc2VsZi50eXBlMnRlc3QodCkpLCB1KQogCiAgICAgZGVmIHRlc3RfcXAoc2VsZik6CisgICAgICAgIGJpbmFzY2lpLmEyYl9xcChkYXRhPWIiIiwgaGVhZGVyPUZhbHNlKSAgIyBLZXl3b3JkIGFyZ3VtZW50cyBhbGxvd2VkCisKICAgICAgICAgIyBBIHRlc3QgZm9yIFNGIGJ1ZyA1MzQzNDcgKHNlZ2ZhdWx0cyB3aXRob3V0IHRoZSBwcm9wZXIgZml4KQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBiaW5hc2NpaS5hMmJfcXAoYiIiLCAqKnsxOjF9KQpAQCAtMTcyLDYgKzE4OCw3IEBACiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLmZhaWwoImJpbmFzY2lpLmEyYl9xcCgqKnsxOjF9KSBkaWRuJ3QgcmFpc2UgVHlwZUVycm9yIikKKwogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJpbmFzY2lpLmEyYl9xcChiIj0gIiksIGIiPSAiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJpbmFzY2lpLmEyYl9xcChiIj09IiksIGIiPSIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmluYXNjaWkuYTJiX3FwKGIiPUFYIiksIGIiPUFYIikKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYmlub3AucHkgYi9MaWIvdGVzdC90ZXN0X2Jpbm9wLnB5CmluZGV4IDg0MTc5MTYuLjk2M2FhMDEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfYmlub3AucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9iaW5vcC5weQpAQCAtMyw2ICszLDcgQEAKIGltcG9ydCB1bml0dGVzdAogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiBmcm9tIG9wZXJhdG9yIGltcG9ydCBlcSwgbmUsIGx0LCBndCwgbGUsIGdlCitmcm9tIGFiYyBpbXBvcnQgQUJDTWV0YQogCiBkZWYgZ2NkKGEsIGIpOgogICAgICIiIkdyZWF0ZXN0IGNvbW1vbiBkaXZpc29yIHVzaW5nIEV1Y2xpZCdzIGFsZ29yaXRobS4iIiIKQEAgLTE5NCwxMCArMTk1LDYgQEAKICAgICAgICAgICAgIHJldHVybiBmbG9hdChzZWxmKSA9PSBvdGhlcgogICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKIAotICAgIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgotICAgICAgICAiIiJDb21wYXJlIHR3byBSYXRzIGZvciBpbmVxdWFsaXR5LiIiIgotICAgICAgICByZXR1cm4gbm90IHNlbGYgPT0gb3RoZXIKLQogY2xhc3MgUmF0VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICIiIlVuaXQgdGVzdHMgZm9yIFJhdCBjbGFzcyBhbmQgaXRzIHN1cHBvcnQgdXRpbGl0aWVzLiIiIgogCkBAIC0zMzYsNyArMzMzLDcgQEAKICAgICAgICAgc2VsZi5sb2dfb3BlcmF0aW9uKCdBLl9fZ2VfXycpCiAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAogCi1jbGFzcyBCKE9wZXJhdGlvbkxvZ2dlcik6CitjbGFzcyBCKE9wZXJhdGlvbkxvZ2dlciwgbWV0YWNsYXNzPUFCQ01ldGEpOgogICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgogICAgICAgICBzZWxmLmxvZ19vcGVyYXRpb24oJ0IuX19lcV9fJykKICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCkBAIC0zNTgsNiArMzU1LDIwIEBACiAgICAgICAgIHNlbGYubG9nX29wZXJhdGlvbignQy5fX2dlX18nKQogICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKIAorY2xhc3MgVihPcGVyYXRpb25Mb2dnZXIpOgorICAgICIiIlZpcnR1YWwgc3ViY2xhc3Mgb2YgQiIiIgorICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBzZWxmLmxvZ19vcGVyYXRpb24oJ1YuX19lcV9fJykKKyAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgZGVmIF9fbGVfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHNlbGYubG9nX29wZXJhdGlvbignVi5fX2xlX18nKQorICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICBkZWYgX19nZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgc2VsZi5sb2dfb3BlcmF0aW9uKCdWLl9fZ2VfXycpCisgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorQi5yZWdpc3RlcihWKQorCisKIGNsYXNzIE9wZXJhdGlvbk9yZGVyVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X2NvbXBhcmlzb25fb3JkZXJzKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wX3NlcXVlbmNlKGVxLCBBLCBBKSwgWydBLl9fZXFfXycsICdBLl9fZXFfXyddKQpAQCAtMzczLDggKzM4NCwxNCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wX3NlcXVlbmNlKGxlLCBCLCBDKSwgWydDLl9fZ2VfXycsICdCLl9fbGVfXyddKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wX3NlcXVlbmNlKGxlLCBDLCBCKSwgWydDLl9fbGVfXycsICdCLl9fZ2VfXyddKQogCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKFYsIEIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wX3NlcXVlbmNlKGVxLCBCLCBWKSwgWydCLl9fZXFfXycsICdWLl9fZXFfXyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wX3NlcXVlbmNlKGxlLCBCLCBWKSwgWydCLl9fbGVfXycsICdWLl9fZ2VfXyddKQorCisKIGRlZiB0ZXN0X21haW4oKToKICAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChSYXRUZXN0Q2FzZSwgT3BlcmF0aW9uT3JkZXJUZXN0cykKIAorCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2Jpc2VjdC5weSBiL0xpYi90ZXN0L3Rlc3RfYmlzZWN0LnB5CmluZGV4IDdiOWJkMTkuLjU4MGE5NjMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfYmlzZWN0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfYmlzZWN0LnB5CkBAIC03LDcgKzcsNyBAQAogY19iaXNlY3QgPSBzdXBwb3J0LmltcG9ydF9mcmVzaF9tb2R1bGUoJ2Jpc2VjdCcsIGZyZXNoPVsnX2Jpc2VjdCddKQogCiBjbGFzcyBSYW5nZShvYmplY3QpOgotICAgICIiIkEgdHJpdmlhbCByYW5nZSgpLWxpa2Ugb2JqZWN0IHdpdGhvdXQgYW55IGludGVnZXIgd2lkdGggbGltaXRhdGlvbnMuIiIiCisgICAgIiIiQSB0cml2aWFsIHJhbmdlKCktbGlrZSBvYmplY3QgdGhhdCBoYXMgYW4gaW5zZXJ0KCkgbWV0aG9kLiIiIgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzdGFydCwgc3RvcCk6CiAgICAgICAgIHNlbGYuc3RhcnQgPSBzdGFydAogICAgICAgICBzZWxmLnN0b3AgPSBzdG9wCkBAIC0xMjAsMTAgKzEyMCwxMCBAQAogICAgIGRlZiB0ZXN0X25lZ2F0aXZlX2xvKHNlbGYpOgogICAgICAgICAjIElzc3VlIDMzMDEKICAgICAgICAgbW9kID0gc2VsZi5tb2R1bGUKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbW9kLmJpc2VjdF9sZWZ0LCBbMSwgMiwgM10sIDUsIC0xLCAzKSwKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbW9kLmJpc2VjdF9yaWdodCwgWzEsIDIsIDNdLCA1LCAtMSwgMyksCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1vZC5pbnNvcnRfbGVmdCwgWzEsIDIsIDNdLCA1LCAtMSwgMyksCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1vZC5pbnNvcnRfcmlnaHQsIFsxLCAyLCAzXSwgNSwgLTEsIDMpLAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtb2QuYmlzZWN0X2xlZnQsIFsxLCAyLCAzXSwgNSwgLTEsIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1vZC5iaXNlY3RfcmlnaHQsIFsxLCAyLCAzXSwgNSwgLTEsIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1vZC5pbnNvcnRfbGVmdCwgWzEsIDIsIDNdLCA1LCAtMSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbW9kLmluc29ydF9yaWdodCwgWzEsIDIsIDNdLCA1LCAtMSwgMykKIAogICAgIGRlZiB0ZXN0X2xhcmdlX3JhbmdlKHNlbGYpOgogICAgICAgICAjIElzc3VlIDEzNDk2CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2Jvb2wucHkgYi9MaWIvdGVzdC90ZXN0X2Jvb2wucHkKaW5kZXggNGJhYjI4Yi4uMjUwNzQzOSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9ib29sLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfYm9vbC5weQpAQCAtMjY5LDEwICsyNjksOSBAQAogCiAgICAgZGVmIHRlc3RfcGlja2xlKHNlbGYpOgogICAgICAgICBpbXBvcnQgcGlja2xlCi0gICAgICAgIHNlbGYuYXNzZXJ0SXMocGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhUcnVlKSksIFRydWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0SXMocGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhGYWxzZSkpLCBGYWxzZSkKLSAgICAgICAgc2VsZi5hc3NlcnRJcyhwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKFRydWUsIFRydWUpKSwgVHJ1ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRJcyhwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKEZhbHNlLCBUcnVlKSksIEZhbHNlKQorICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMocGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhUcnVlLCBwcm90bykpLCBUcnVlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKEZhbHNlLCBwcm90bykpLCBGYWxzZSkKIAogICAgIGRlZiB0ZXN0X3BpY2tsZXZhbHVlcyhzZWxmKToKICAgICAgICAgIyBUZXN0IGZvciBzcGVjaWZpYyBiYWNrd2FyZHMtY29tcGF0aWJsZSBwaWNrbGUgdmFsdWVzCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2J1ZmZlci5weSBiL0xpYi90ZXN0L3Rlc3RfYnVmZmVyLnB5CmluZGV4IDA0ZTNmNjEuLmFhMTUzNzcgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfYnVmZmVyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfYnVmZmVyLnB5CkBAIC0xNDksMTUgKzE0OSwxNSBAQAogICAgICAgIGZvcm1hdCBjaGFyYWN0ZXIuIiIiCiAgICAgeCA9IHJhbmRyYW5nZSgqZm10ZGljdFttb2RlXVtjaGFyXSkKICAgICBpZiBjaGFyID09ICdjJzoKLSAgICAgICAgeCA9IGJ5dGVzKGNocih4KSwgJ2xhdGluMScpCisgICAgICAgIHggPSBieXRlcyhbeF0pCisgICAgICAgIGlmIG9iaiA9PSAnbnVtcHknIGFuZCB4ID09IGInXHgwMCc6CisgICAgICAgICAgICAjIGh0dHA6Ly9wcm9qZWN0cy5zY2lweS5vcmcvbnVtcHkvdGlja2V0LzE5MjUKKyAgICAgICAgICAgIHggPSBiJ1x4MDEnCiAgICAgaWYgY2hhciA9PSAnPyc6CiAgICAgICAgIHggPSBib29sKHgpCiAgICAgaWYgY2hhciA9PSAnZicgb3IgY2hhciA9PSAnZCc6CiAgICAgICAgIHggPSBzdHJ1Y3QucGFjayhjaGFyLCB4KQogICAgICAgICB4ID0gc3RydWN0LnVucGFjayhjaGFyLCB4KVswXQotICAgIGlmIG9iaiA9PSAnbnVtcHknIGFuZCB4ID09IGInXHgwMCc6Ci0gICAgICAgICMgaHR0cDovL3Byb2plY3RzLnNjaXB5Lm9yZy9udW1weS90aWNrZXQvMTkyNQotICAgICAgICB4ID0gYidceDAxJwogICAgIHJldHVybiB4CiAKIGRlZiBnZW5faXRlbShmbXQsIG9iaik6CkBAIC0yNDQ5LDYgKzI0NDksMjEgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS50b2J5dGVzKCksIGInJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS50b2xpc3QoKSwgW10pCiAKKyAgICBjaGVja19zaXplb2YgPSBzdXBwb3J0LmNoZWNrX3NpemVvZgorCisgICAgZGVmIHRlc3RfbWVtb3J5dmlld19zaXplb2Yoc2VsZik6CisgICAgICAgIGNoZWNrID0gc2VsZi5jaGVja19zaXplb2YKKyAgICAgICAgdnNpemUgPSBzdXBwb3J0LmNhbGN2b2Jqc2l6ZQorICAgICAgICBiYXNlX3N0cnVjdCA9ICdQbmluIDJQMm4yaTVQIDNjUCcKKyAgICAgICAgcGVyX2RpbSA9ICczbicKKworICAgICAgICBpdGVtcyA9IGxpc3QocmFuZ2UoOCkpCisgICAgICAgIGNoZWNrKG1lbW9yeXZpZXcoYicnKSwgdnNpemUoYmFzZV9zdHJ1Y3QgKyAxICogcGVyX2RpbSkpCisgICAgICAgIGEgPSBuZGFycmF5KGl0ZW1zLCBzaGFwZT1bMiwgNF0sIGZvcm1hdD0iYiIpCisgICAgICAgIGNoZWNrKG1lbW9yeXZpZXcoYSksIHZzaXplKGJhc2Vfc3RydWN0ICsgMiAqIHBlcl9kaW0pKQorICAgICAgICBhID0gbmRhcnJheShpdGVtcywgc2hhcGU9WzIsIDIsIDJdLCBmb3JtYXQ9ImIiKQorICAgICAgICBjaGVjayhtZW1vcnl2aWV3KGEpLCB2c2l6ZShiYXNlX3N0cnVjdCArIDMgKiBwZXJfZGltKSkKKwogICAgIGRlZiB0ZXN0X21lbW9yeXZpZXdfc3RydWN0X21vZHVsZShzZWxmKToKIAogICAgICAgICBjbGFzcyBJTlQob2JqZWN0KToKQEAgLTQyOTAsOSArNDMwNSw1IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEJ1ZmZlckVycm9yLCBtZW1vcnl2aWV3LCB4KQogCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChUZXN0QnVmZmVyUHJvdG9jb2wpCi0KLQogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9idWZpby5weSBiL0xpYi90ZXN0L3Rlc3RfYnVmaW8ucHkKaW5kZXggNjMzOGFkOC4uOTkzMWM4NCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9idWZpby5weQorKysgYi9MaWIvdGVzdC90ZXN0X2J1ZmlvLnB5CkBAIC0zNCw3ICszNCw3IEBACiAgICAgICAgICAgICBsaW5lID0gZi5yZWFkbGluZSgpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmUsIHMpCiAgICAgICAgICAgICBsaW5lID0gZi5yZWFkbGluZSgpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGxpbmUpICMgTXVzdCBiZSBhdCBFT0YKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobGluZSkgIyBNdXN0IGJlIGF0IEVPRgogICAgICAgICAgICAgZi5jbG9zZSgpCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBzdXBwb3J0LnVubGluayhzdXBwb3J0LlRFU1RGTikKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYnVpbHRpbi5weSBiL0xpYi90ZXN0L3Rlc3RfYnVpbHRpbi5weQppbmRleCBjMzQyYTQzLi5kMDBkMGI3IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2J1aWx0aW4ucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9idWlsdGluLnB5CkBAIC0xNiw2ICsxNiw3IEBACiBpbXBvcnQgd2FybmluZ3MKIGZyb20gb3BlcmF0b3IgaW1wb3J0IG5lZwogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IFRFU1RGTiwgdW5saW5rLCAgcnVuX3VuaXR0ZXN0LCBjaGVja193YXJuaW5ncworZnJvbSB0ZXN0LnNjcmlwdF9oZWxwZXIgaW1wb3J0IGFzc2VydF9weXRob25fb2sKIHRyeToKICAgICBpbXBvcnQgcHR5LCBzaWduYWwKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKQEAgLTEyMCw5ICsxMjEsOSBAQAogCiBjbGFzcyBCdWlsdGluVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgIyBIZWxwZXIgdG8gY2hlY2sgcGlja2xhYmlsaXR5Ci0gICAgZGVmIGNoZWNrX2l0ZXJfcGlja2xlKHNlbGYsIGl0LCBzZXEpOgorICAgIGRlZiBjaGVja19pdGVyX3BpY2tsZShzZWxmLCBpdCwgc2VxLCBwcm90byk6CiAgICAgICAgIGl0b3JnID0gaXQKLSAgICAgICAgZCA9IHBpY2tsZS5kdW1wcyhpdCkKKyAgICAgICAgZCA9IHBpY2tsZS5kdW1wcyhpdCwgcHJvdG8pCiAgICAgICAgIGl0ID0gcGlja2xlLmxvYWRzKGQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShpdG9yZyksIHR5cGUoaXQpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoaXQpLCBzZXEpCkBAIC0xMzMsNyArMTM0LDcgQEAKICAgICAgICAgICAgIG5leHQoaXQpCiAgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgogICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGQgPSBwaWNrbGUuZHVtcHMoaXQpCisgICAgICAgIGQgPSBwaWNrbGUuZHVtcHMoaXQsIHByb3RvKQogICAgICAgICBpdCA9IHBpY2tsZS5sb2FkcyhkKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoaXQpLCBzZXFbMTpdKQogCkBAIC00NjQsNiArNDY1LDExIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZXZhbCwgKCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yLCBldmFsLCBib21bOjJdICsgYidhJykKIAorICAgICAgICBjbGFzcyBYOgorICAgICAgICAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGtleSk6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBldmFsLCAiZm9vIiwge30sIFgoKSkKKwogICAgIGRlZiB0ZXN0X2dlbmVyYWxfZXZhbChzZWxmKToKICAgICAgICAgIyBUZXN0cyB0aGF0IGdlbmVyYWwgbWFwcGluZ3MgY2FuIGJlIHVzZWQgZm9yIHRoZSBsb2NhbHMgYXJndW1lbnQKIApAQCAtNTc5LDcgKzU4NSwxMCBAQAogICAgICAgICAgICAgICAgIHJhaXNlIGZyb3plbmRpY3RfZXJyb3IoImZyb3plbmRpY3QgaXMgcmVhZG9ubHkiKQogCiAgICAgICAgICMgcmVhZC1vbmx5IGJ1aWx0aW5zCi0gICAgICAgIGZyb3plbl9idWlsdGlucyA9IGZyb3plbmRpY3QoX19idWlsdGluc19fKQorICAgICAgICBpZiBpc2luc3RhbmNlKF9fYnVpbHRpbnNfXywgdHlwZXMuTW9kdWxlVHlwZSk6CisgICAgICAgICAgICBmcm96ZW5fYnVpbHRpbnMgPSBmcm96ZW5kaWN0KF9fYnVpbHRpbnNfXy5fX2RpY3RfXykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZyb3plbl9idWlsdGlucyA9IGZyb3plbmRpY3QoX19idWlsdGluc19fKQogICAgICAgICBjb2RlID0gY29tcGlsZSgiX19idWlsdGluc19fWydzdXBlcmdsb2JhbCddPTI7IHByaW50KHN1cGVyZ2xvYmFsKSIsICJ0ZXN0IiwgImV4ZWMiKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhmcm96ZW5kaWN0X2Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjLCBjb2RlLCB7J19fYnVpbHRpbnNfXyc6IGZyb3plbl9idWlsdGluc30pCkBAIC02MjcsOSArNjM2LDEwIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGlzdCwgZmlsdGVyKDQyLCAoMSwgMikpKQogCiAgICAgZGVmIHRlc3RfZmlsdGVyX3BpY2tsZShzZWxmKToKLSAgICAgICAgZjEgPSBmaWx0ZXIoZmlsdGVyX2NoYXIsICJhYmNkZWFiY2RlIikKLSAgICAgICAgZjIgPSBmaWx0ZXIoZmlsdGVyX2NoYXIsICJhYmNkZWFiY2RlIikKLSAgICAgICAgc2VsZi5jaGVja19pdGVyX3BpY2tsZShmMSwgbGlzdChmMikpCisgICAgICAgIGZvciBwcm90byBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgZjEgPSBmaWx0ZXIoZmlsdGVyX2NoYXIsICJhYmNkZWFiY2RlIikKKyAgICAgICAgICAgIGYyID0gZmlsdGVyKGZpbHRlcl9jaGFyLCAiYWJjZGVhYmNkZSIpCisgICAgICAgICAgICBzZWxmLmNoZWNrX2l0ZXJfcGlja2xlKGYxLCBsaXN0KGYyKSwgcHJvdG8pCiAKICAgICBkZWYgdGVzdF9nZXRhdHRyKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFRydWUoZ2V0YXR0cihzeXMsICdzdGRvdXQnKSBpcyBzeXMuc3Rkb3V0KQpAQCAtODI1LDkgKzgzNSwxMCBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIGxpc3QsIG1hcChiYWRmdW5jLCByYW5nZSg1KSkpCiAKICAgICBkZWYgdGVzdF9tYXBfcGlja2xlKHNlbGYpOgotICAgICAgICBtMSA9IG1hcChtYXBfY2hhciwgIklzIHRoaXMgdGhlIHJlYWwgbGlmZT8iKQotICAgICAgICBtMiA9IG1hcChtYXBfY2hhciwgIklzIHRoaXMgdGhlIHJlYWwgbGlmZT8iKQotICAgICAgICBzZWxmLmNoZWNrX2l0ZXJfcGlja2xlKG0xLCBsaXN0KG0yKSkKKyAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICBtMSA9IG1hcChtYXBfY2hhciwgIklzIHRoaXMgdGhlIHJlYWwgbGlmZT8iKQorICAgICAgICAgICAgbTIgPSBtYXAobWFwX2NoYXIsICJJcyB0aGlzIHRoZSByZWFsIGxpZmU/IikKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfaXRlcl9waWNrbGUobTEsIGxpc3QobTIpLCBwcm90bykKIAogICAgIGRlZiB0ZXN0X21heChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXgoJzEyMzEyMycpLCAnMycpCkBAIC04MzksOCArODUwLDE5IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF4KDEsIDIuMCwgMyksIDMpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF4KDEuMCwgMiwgMyksIDMpCiAKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtYXgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWF4LCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWF4LCAoKSkKKyAgICAgICAgY2xhc3MgQmFkU2VxOgorICAgICAgICAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGluZGV4KToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1heCwgQmFkU2VxKCkpCisKICAgICAgICAgZm9yIHN0bXQgaW4gKAogICAgICAgICAgICAgIm1heChrZXk9aW50KSIsICAgICAgICAgICAgICAgICAjIG5vIGFyZ3MKKyAgICAgICAgICAgICJtYXgoZGVmYXVsdD1Ob25lKSIsCisgICAgICAgICAgICAibWF4KDEsIDIsIGRlZmF1bHQ9Tm9uZSkiLCAgICAgICMgcmVxdWlyZSBjb250YWluZXIgZm9yIGRlZmF1bHQKKyAgICAgICAgICAgICJtYXgoZGVmYXVsdD1Ob25lLCBrZXk9aW50KSIsCiAgICAgICAgICAgICAibWF4KDEsIGtleT1pbnQpIiwgICAgICAgICAgICAgICMgc2luZ2xlIGFyZyBub3QgaXRlcmFibGUKICAgICAgICAgICAgICJtYXgoMSwgMiwga2V5c3RvbmU9aW50KSIsICAgICAgIyB3cm9uZyBrZXl3b3JkCiAgICAgICAgICAgICAibWF4KDEsIDIsIGtleT1pbnQsIGFiYz1pbnQpIiwgICMgdHdvIG1hbnkga2V5d29yZHMKQEAgLTg1Nyw2ICs4NzksMTMgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXgoKDEsMiksIGtleT1uZWcpLCAxKSAgICAjIHR3byBlbGVtIGl0ZXJhYmxlCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF4KDEsIDIsIGtleT1uZWcpLCAxKSAgICAgIyB0d28gZWxlbXMKIAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1heCgoKSwgZGVmYXVsdD1Ob25lKSwgTm9uZSkgICAgIyB6ZXJvIGVsZW0gaXRlcmFibGUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXgoKDEsKSwgZGVmYXVsdD1Ob25lKSwgMSkgICAgICMgb25lIGVsZW0gaXRlcmFibGUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXgoKDEsMiksIGRlZmF1bHQ9Tm9uZSksIDIpICAgICMgdHdvIGVsZW0gaXRlcmFibGUKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1heCgoKSwgZGVmYXVsdD0xLCBrZXk9bmVnKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXgoKDEsIDIpLCBkZWZhdWx0PTMsIGtleT1uZWcpLCAxKQorCiAgICAgICAgIGRhdGEgPSBbcmFuZG9tLnJhbmRyYW5nZSgyMDApIGZvciBpIGluIHJhbmdlKDEwMCldCiAgICAgICAgIGtleXMgPSBkaWN0KChlbGVtLCByYW5kb20ucmFuZHJhbmdlKDUwKSkgZm9yIGVsZW0gaW4gZGF0YSkKICAgICAgICAgZiA9IGtleXMuX19nZXRpdGVtX18KQEAgLTg4Myw2ICs5MTIsOSBAQAogCiAgICAgICAgIGZvciBzdG10IGluICgKICAgICAgICAgICAgICJtaW4oa2V5PWludCkiLCAgICAgICAgICAgICAgICAgIyBubyBhcmdzCisgICAgICAgICAgICAibWluKGRlZmF1bHQ9Tm9uZSkiLAorICAgICAgICAgICAgIm1pbigxLCAyLCBkZWZhdWx0PU5vbmUpIiwgICAgICAjIHJlcXVpcmUgY29udGFpbmVyIGZvciBkZWZhdWx0CisgICAgICAgICAgICAibWluKGRlZmF1bHQ9Tm9uZSwga2V5PWludCkiLAogICAgICAgICAgICAgIm1pbigxLCBrZXk9aW50KSIsICAgICAgICAgICAgICAjIHNpbmdsZSBhcmcgbm90IGl0ZXJhYmxlCiAgICAgICAgICAgICAibWluKDEsIDIsIGtleXN0b25lPWludCkiLCAgICAgICMgd3Jvbmcga2V5d29yZAogICAgICAgICAgICAgIm1pbigxLCAyLCBrZXk9aW50LCBhYmM9aW50KSIsICAjIHR3byBtYW55IGtleXdvcmRzCkBAIC04OTksNiArOTMxLDEzIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWluKCgxLDIpLCBrZXk9bmVnKSwgMikgICAgIyB0d28gZWxlbSBpdGVyYWJsZQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1pbigxLCAyLCBrZXk9bmVnKSwgMikgICAgICMgdHdvIGVsZW1zCiAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtaW4oKCksIGRlZmF1bHQ9Tm9uZSksIE5vbmUpICAgICMgemVybyBlbGVtIGl0ZXJhYmxlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWluKCgxLCksIGRlZmF1bHQ9Tm9uZSksIDEpICAgICAjIG9uZSBlbGVtIGl0ZXJhYmxlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWluKCgxLDIpLCBkZWZhdWx0PU5vbmUpLCAxKSAgICAjIHR3byBlbGVtIGl0ZXJhYmxlCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtaW4oKCksIGRlZmF1bHQ9MSwga2V5PW5lZyksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWluKCgxLCAyKSwgZGVmYXVsdD0xLCBrZXk9bmVnKSwgMikKKwogICAgICAgICBkYXRhID0gW3JhbmRvbS5yYW5kcmFuZ2UoMjAwKSBmb3IgaSBpbiByYW5nZSgxMDApXQogICAgICAgICBrZXlzID0gZGljdCgoZWxlbSwgcmFuZG9tLnJhbmRyYW5nZSg1MCkpIGZvciBlbGVtIGluIGRhdGEpCiAgICAgICAgIGYgPSBrZXlzLl9fZ2V0aXRlbV9fCkBAIC05NDAsMjkgKzk3OSwyNSBAQAogICAgIGRlZiB3cml0ZV90ZXN0ZmlsZShzZWxmKToKICAgICAgICAgIyBOQiB0aGUgZmlyc3QgNCBsaW5lcyBhcmUgYWxzbyB1c2VkIHRvIHRlc3QgaW5wdXQsIGJlbG93CiAgICAgICAgIGZwID0gb3BlbihURVNURk4sICd3JykKLSAgICAgICAgdHJ5OgorICAgICAgICBzZWxmLmFkZENsZWFudXAodW5saW5rLCBURVNURk4pCisgICAgICAgIHdpdGggZnA6CiAgICAgICAgICAgICBmcC53cml0ZSgnMSsxXG4nKQogICAgICAgICAgICAgZnAud3JpdGUoJ1RoZSBxdWljayBicm93biBmb3gganVtcHMgb3ZlciB0aGUgbGF6eSBkb2cnKQogICAgICAgICAgICAgZnAud3JpdGUoJy5cbicpCiAgICAgICAgICAgICBmcC53cml0ZSgnRGVhciBKb2huXG4nKQogICAgICAgICAgICAgZnAud3JpdGUoJ1hYWCcqMTAwKQogICAgICAgICAgICAgZnAud3JpdGUoJ1lZWScqMTAwKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgZnAuY2xvc2UoKQogCiAgICAgZGVmIHRlc3Rfb3BlbihzZWxmKToKICAgICAgICAgc2VsZi53cml0ZV90ZXN0ZmlsZSgpCiAgICAgICAgIGZwID0gb3BlbihURVNURk4sICdyJykKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIGZwOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmcC5yZWFkbGluZSg0KSwgJzErMVxuJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnAucmVhZGxpbmUoKSwgJ1RoZSBxdWljayBicm93biBmb3gganVtcHMgb3ZlciB0aGUgbGF6eSBkb2cuXG4nKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmcC5yZWFkbGluZSg0KSwgJ0RlYXInKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmcC5yZWFkbGluZSgxMDApLCAnIEpvaG5cbicpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZwLnJlYWQoMzAwKSwgJ1hYWCcqMTAwKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmcC5yZWFkKDEwMDApLCAnWVlZJyoxMDApCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBmcC5jbG9zZSgpCi0gICAgICAgICAgICB1bmxpbmsoVEVTVEZOKQogCiAgICAgZGVmIHRlc3Rfb3Blbl9kZWZhdWx0X2VuY29kaW5nKHNlbGYpOgogICAgICAgICBvbGRfZW52aXJvbiA9IGRpY3Qob3MuZW52aXJvbikKQEAgLTk3NywxNSArMTAxMiwxNyBAQAogICAgICAgICAgICAgc2VsZi53cml0ZV90ZXN0ZmlsZSgpCiAgICAgICAgICAgICBjdXJyZW50X2xvY2FsZV9lbmNvZGluZyA9IGxvY2FsZS5nZXRwcmVmZXJyZWRlbmNvZGluZyhGYWxzZSkKICAgICAgICAgICAgIGZwID0gb3BlbihURVNURk4sICd3JykKLSAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggZnA6CiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmcC5lbmNvZGluZywgY3VycmVudF9sb2NhbGVfZW5jb2RpbmcpCi0gICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgIGZwLmNsb3NlKCkKLSAgICAgICAgICAgICAgICB1bmxpbmsoVEVTVEZOKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgb3MuZW52aXJvbi5jbGVhcigpCiAgICAgICAgICAgICBvcy5lbnZpcm9uLnVwZGF0ZShvbGRfZW52aXJvbikKIAorICAgIGRlZiB0ZXN0X29wZW5fbm9uX2luaGVyaXRhYmxlKHNlbGYpOgorICAgICAgICBmaWxlb2JqID0gb3BlbihfX2ZpbGVfXykKKyAgICAgICAgd2l0aCBmaWxlb2JqOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5nZXRfaW5oZXJpdGFibGUoZmlsZW9iai5maWxlbm8oKSkpCisKICAgICBkZWYgdGVzdF9vcmQoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3JkKCcgJyksIDMyKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9yZCgnQScpLCA2NSkKQEAgLTEwOTYsODMgKzExMzMsNiBAQAogICAgICAgICAgICAgc3lzLnN0ZGluID0gc2F2ZXN0ZGluCiAgICAgICAgICAgICBzeXMuc3Rkb3V0ID0gc2F2ZXN0ZG91dAogICAgICAgICAgICAgZnAuY2xvc2UoKQotICAgICAgICAgICAgdW5saW5rKFRFU1RGTikKLQotICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHB0eSwgInRoZSBwdHkgYW5kIHNpZ25hbCBtb2R1bGVzIG11c3QgYmUgYXZhaWxhYmxlIikKLSAgICBkZWYgY2hlY2tfaW5wdXRfdHR5KHNlbGYsIHByb21wdCwgdGVybWluYWxfaW5wdXQsIHN0ZGlvX2VuY29kaW5nPU5vbmUpOgotICAgICAgICBpZiBub3Qgc3lzLnN0ZGluLmlzYXR0eSgpIG9yIG5vdCBzeXMuc3Rkb3V0LmlzYXR0eSgpOgotICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgic3RkaW4gYW5kIHN0ZG91dCBtdXN0IGJlIHR0eXMiKQotICAgICAgICByLCB3ID0gb3MucGlwZSgpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHBpZCwgZmQgPSBwdHkuZm9yaygpCi0gICAgICAgIGV4Y2VwdCAoT1NFcnJvciwgQXR0cmlidXRlRXJyb3IpIGFzIGU6Ci0gICAgICAgICAgICBvcy5jbG9zZShyKQotICAgICAgICAgICAgb3MuY2xvc2UodykKLSAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoInB0eS5mb3JrKCkgcmFpc2VkIHt9Ii5mb3JtYXQoZSkpCi0gICAgICAgIGlmIHBpZCA9PSAwOgotICAgICAgICAgICAgIyBDaGlsZAotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICMgTWFrZSBzdXJlIHdlIGRvbid0IGdldCBzdHVjayBpZiB0aGVyZSdzIGEgcHJvYmxlbQotICAgICAgICAgICAgICAgIHNpZ25hbC5hbGFybSgyKQotICAgICAgICAgICAgICAgIG9zLmNsb3NlKHIpCi0gICAgICAgICAgICAgICAgIyBDaGVjayB0aGUgZXJyb3IgaGFuZGxlcnMgYXJlIGFjY291bnRlZCBmb3IKLSAgICAgICAgICAgICAgICBpZiBzdGRpb19lbmNvZGluZzoKLSAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZGluID0gaW8uVGV4dElPV3JhcHBlcihzeXMuc3RkaW4uZGV0YWNoKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc9c3RkaW9fZW5jb2RpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzPSdzdXJyb2dhdGVlc2NhcGUnKQotICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0ID0gaW8uVGV4dElPV3JhcHBlcihzeXMuc3Rkb3V0LmRldGFjaCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGluZz1zdGRpb19lbmNvZGluZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzPSdyZXBsYWNlJykKLSAgICAgICAgICAgICAgICB3aXRoIG9wZW4odywgInciKSBhcyB3cGlwZToKLSAgICAgICAgICAgICAgICAgICAgcHJpbnQoInR0eSA9Iiwgc3lzLnN0ZGluLmlzYXR0eSgpIGFuZCBzeXMuc3Rkb3V0LmlzYXR0eSgpLCBmaWxlPXdwaXBlKQotICAgICAgICAgICAgICAgICAgICBwcmludChhc2NpaShpbnB1dChwcm9tcHQpKSwgZmlsZT13cGlwZSkKLSAgICAgICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKCkKLSAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgIyBXZSBkb24ndCB3YW50IHRvIHJldHVybiB0byB1bml0dGVzdC4uLgotICAgICAgICAgICAgICAgIG9zLl9leGl0KDApCi0gICAgICAgICMgUGFyZW50Ci0gICAgICAgIG9zLmNsb3NlKHcpCi0gICAgICAgIG9zLndyaXRlKGZkLCB0ZXJtaW5hbF9pbnB1dCArIGIiXHJcbiIpCi0gICAgICAgICMgR2V0IHJlc3VsdHMgZnJvbSB0aGUgcGlwZQotICAgICAgICB3aXRoIG9wZW4ociwgInIiKSBhcyBycGlwZToKLSAgICAgICAgICAgIGxpbmVzID0gW10KLSAgICAgICAgICAgIHdoaWxlIFRydWU6Ci0gICAgICAgICAgICAgICAgbGluZSA9IHJwaXBlLnJlYWRsaW5lKCkuc3RyaXAoKQotICAgICAgICAgICAgICAgIGlmIGxpbmUgPT0gIiI6Ci0gICAgICAgICAgICAgICAgICAgICMgVGhlIG90aGVyIGVuZCB3YXMgY2xvc2VkID0+IHRoZSBjaGlsZCBleGl0ZWQKLSAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQobGluZSkKLSAgICAgICAgIyBDaGVjayB0aGUgcmVzdWx0IHdhcyBnb3QgYW5kIGNvcnJlc3BvbmRzIHRvIHRoZSB1c2VyJ3MgdGVybWluYWwgaW5wdXQKLSAgICAgICAgaWYgbGVuKGxpbmVzKSAhPSAyOgotICAgICAgICAgICAgIyBTb21ldGhpbmcgd2VudCB3cm9uZywgdHJ5IHRvIGdldCBhdCBzdGRlcnIKLSAgICAgICAgICAgIHdpdGggb3BlbihmZCwgInIiLCBlbmNvZGluZz0iYXNjaWkiLCBlcnJvcnM9Imlnbm9yZSIpIGFzIGNoaWxkX291dHB1dDoKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWwoImdvdCAlZCBsaW5lcyBpbiBwaXBlIGJ1dCBleHBlY3RlZCAyLCBjaGlsZCBvdXRwdXQgd2FzOlxuJXMiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICUgKGxlbihsaW5lcyksIGNoaWxkX291dHB1dC5yZWFkKCkpKQotICAgICAgICBvcy5jbG9zZShmZCkKLSAgICAgICAgIyBDaGVjayB3ZSBkaWQgZXhlcmNpc2UgdGhlIEdOVSByZWFkbGluZSBwYXRoCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4obGluZXNbMF0sIHsndHR5ID0gVHJ1ZScsICd0dHkgPSBGYWxzZSd9KQotICAgICAgICBpZiBsaW5lc1swXSAhPSAndHR5ID0gVHJ1ZSc6Ci0gICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJzdGFuZGFyZCBJTyBpbiBzaG91bGQgaGF2ZSBiZWVuIGEgdHR5IikKLSAgICAgICAgaW5wdXRfcmVzdWx0ID0gZXZhbChsaW5lc1sxXSkgICAjIGFzY2lpKCkgLT4gZXZhbCgpIHJvdW5kdHJpcAotICAgICAgICBpZiBzdGRpb19lbmNvZGluZzoKLSAgICAgICAgICAgIGV4cGVjdGVkID0gdGVybWluYWxfaW5wdXQuZGVjb2RlKHN0ZGlvX2VuY29kaW5nLCAnc3Vycm9nYXRlZXNjYXBlJykKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGV4cGVjdGVkID0gdGVybWluYWxfaW5wdXQuZGVjb2RlKHN5cy5zdGRpbi5lbmNvZGluZykgICMgd2hhdCBlbHNlPwotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlucHV0X3Jlc3VsdCwgZXhwZWN0ZWQpCi0KLSAgICBkZWYgdGVzdF9pbnB1dF90dHkoc2VsZik6Ci0gICAgICAgICMgVGVzdCBpbnB1dCgpIGZ1bmN0aW9uYWxpdHkgd2hlbiB3aXJlZCB0byBhIHR0eSAodGhlIGNvZGUgcGF0aAotICAgICAgICAjIGlzIGRpZmZlcmVudCBhbmQgaW52b2tlcyBHTlUgcmVhZGxpbmUgaWYgYXZhaWxhYmxlKS4KLSAgICAgICAgc2VsZi5jaGVja19pbnB1dF90dHkoInByb21wdCIsIGIicXV1eCIpCi0KLSAgICBkZWYgdGVzdF9pbnB1dF90dHlfbm9uX2FzY2lpKHNlbGYpOgotICAgICAgICAjIENoZWNrIHN0ZGluL3N0ZG91dCBlbmNvZGluZyBpcyB1c2VkIHdoZW4gaW52b2tpbmcgR05VIHJlYWRsaW5lCi0gICAgICAgIHNlbGYuY2hlY2tfaW5wdXRfdHR5KCJwcm9tcHTDqSIsIGIicXV1eFx4ZTkiLCAidXRmLTgiKQotCi0gICAgZGVmIHRlc3RfaW5wdXRfdHR5X25vbl9hc2NpaV91bmljb2RlX2Vycm9ycyhzZWxmKToKLSAgICAgICAgIyBDaGVjayBzdGRpbi9zdGRvdXQgZXJyb3IgaGFuZGxlciBpcyB1c2VkIHdoZW4gaW52b2tpbmcgR05VIHJlYWRsaW5lCi0gICAgICAgIHNlbGYuY2hlY2tfaW5wdXRfdHR5KCJwcm9tcHTDqSIsIGIicXV1eFx4ZTkiLCAiYXNjaWkiKQogCiAgICAgIyB0ZXN0X2ludCgpOiBzZWUgdGVzdF9pbnQucHkgZm9yIHRlc3RzIG9mIGJ1aWx0LWluIGZ1bmN0aW9uIGludCgpLgogCkBAIC0xMzk5LDggKzEzNTksOSBAQAogICAgICAgICBhID0gKDEsIDIsIDMpCiAgICAgICAgIGIgPSAoNCwgNSwgNikKICAgICAgICAgdCA9IFsoMSwgNCksICgyLCA1KSwgKDMsIDYpXQotICAgICAgICB6MSA9IHppcChhLCBiKQotICAgICAgICBzZWxmLmNoZWNrX2l0ZXJfcGlja2xlKHoxLCB0KQorICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIHoxID0gemlwKGEsIGIpCisgICAgICAgICAgICBzZWxmLmNoZWNrX2l0ZXJfcGlja2xlKHoxLCB0LCBwcm90bykKIAogICAgIGRlZiB0ZXN0X2Zvcm1hdChzZWxmKToKICAgICAgICAgIyBUZXN0IHRoZSBiYXNpYyBtYWNoaW5lcnkgb2YgdGhlIGZvcm1hdCgpIGJ1aWx0aW4uICBEb24ndCB0ZXN0CkBAIC0xNDc2LDE3ICsxNDM3LDExIEBACiAgICAgICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgIyBJc3N1ZSAjNzk5NDogb2JqZWN0Ll9fZm9ybWF0X18gd2l0aCBhIG5vbi1lbXB0eSBmb3JtYXQgc3RyaW5nIGlzCiAgICAgICAgICMgIGRlcHJlY2F0ZWQKLSAgICAgICAgZGVmIHRlc3RfZGVwcmVjYXRlZF9mb3JtYXRfc3RyaW5nKG9iaiwgZm10X3N0ciwgc2hvdWxkX3JhaXNlX3dhcm5pbmcpOgotICAgICAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncyhyZWNvcmQ9VHJ1ZSkgYXMgdzoKLSAgICAgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoImFsd2F5cyIsIERlcHJlY2F0aW9uV2FybmluZykKLSAgICAgICAgICAgICAgICBmb3JtYXQob2JqLCBmbXRfc3RyKQotICAgICAgICAgICAgaWYgc2hvdWxkX3JhaXNlX3dhcm5pbmc6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odyksIDEpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHdbMF0ubWVzc2FnZSwgRGVwcmVjYXRpb25XYXJuaW5nKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ29iamVjdC5fX2Zvcm1hdF9fIHdpdGggYSBub24tZW1wdHkgZm9ybWF0ICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzdHJpbmcnLCBzdHIod1swXS5tZXNzYWdlKSkKKyAgICAgICAgZGVmIHRlc3RfZGVwcmVjYXRlZF9mb3JtYXRfc3RyaW5nKG9iaiwgZm10X3N0ciwgc2hvdWxkX3JhaXNlKToKKyAgICAgICAgICAgIGlmIHNob3VsZF9yYWlzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGZvcm1hdCwgb2JqLCBmbXRfc3RyKQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih3KSwgMCkKKyAgICAgICAgICAgICAgICBmb3JtYXQob2JqLCBmbXRfc3RyKQogCiAgICAgICAgIGZtdF9zdHJzID0gWycnLCAncyddCiAKQEAgLTE1MzMsNiArMTQ4OCwxMTkgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdHAsIDEsIDIpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHRwLCBhPTEsIGI9MikKIAorQHVuaXR0ZXN0LnNraXBVbmxlc3MocHR5LCAidGhlIHB0eSBhbmQgc2lnbmFsIG1vZHVsZXMgbXVzdCBiZSBhdmFpbGFibGUiKQorY2xhc3MgUHR5VGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIlRlc3RzIHRoYXQgdXNlIGEgcHNldWRvIHRlcm1pbmFsIHRvIGd1YXJhbnRlZSBzdGRpbiBhbmQgc3Rkb3V0IGFyZQorICAgIHRlcm1pbmFscyBpbiB0aGUgdGVzdCBlbnZpcm9ubWVudCIiIgorCisgICAgZGVmIHJ1bl9jaGlsZChzZWxmLCBjaGlsZCwgdGVybWluYWxfaW5wdXQpOgorICAgICAgICByLCB3ID0gb3MucGlwZSgpICAjIFBpcGUgdGVzdCByZXN1bHRzIGZyb20gY2hpbGQgYmFjayB0byBwYXJlbnQKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcGlkLCBmZCA9IHB0eS5mb3JrKCkKKyAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBBdHRyaWJ1dGVFcnJvcikgYXMgZToKKyAgICAgICAgICAgIG9zLmNsb3NlKHIpCisgICAgICAgICAgICBvcy5jbG9zZSh3KQorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgicHR5LmZvcmsoKSByYWlzZWQge30iLmZvcm1hdChlKSkKKyAgICAgICAgICAgIHJhaXNlCisgICAgICAgIGlmIHBpZCA9PSAwOgorICAgICAgICAgICAgIyBDaGlsZAorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICMgTWFrZSBzdXJlIHdlIGRvbid0IGdldCBzdHVjayBpZiB0aGVyZSdzIGEgcHJvYmxlbQorICAgICAgICAgICAgICAgIHNpZ25hbC5hbGFybSgyKQorICAgICAgICAgICAgICAgIG9zLmNsb3NlKHIpCisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKHcsICJ3IikgYXMgd3BpcGU6CisgICAgICAgICAgICAgICAgICAgIGNoaWxkKHdwaXBlKQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICAjIFdlIGRvbid0IHdhbnQgdG8gcmV0dXJuIHRvIHVuaXR0ZXN0Li4uCisgICAgICAgICAgICAgICAgb3MuX2V4aXQoMCkKKyAgICAgICAgIyBQYXJlbnQKKyAgICAgICAgb3MuY2xvc2UodykKKyAgICAgICAgb3Mud3JpdGUoZmQsIHRlcm1pbmFsX2lucHV0KQorICAgICAgICAjIEdldCByZXN1bHRzIGZyb20gdGhlIHBpcGUKKyAgICAgICAgd2l0aCBvcGVuKHIsICJyIikgYXMgcnBpcGU6CisgICAgICAgICAgICBsaW5lcyA9IFtdCisgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgIGxpbmUgPSBycGlwZS5yZWFkbGluZSgpLnN0cmlwKCkKKyAgICAgICAgICAgICAgICBpZiBsaW5lID09ICIiOgorICAgICAgICAgICAgICAgICAgICAjIFRoZSBvdGhlciBlbmQgd2FzIGNsb3NlZCA9PiB0aGUgY2hpbGQgZXhpdGVkCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKGxpbmUpCisgICAgICAgICMgQ2hlY2sgdGhlIHJlc3VsdCB3YXMgZ290IGFuZCBjb3JyZXNwb25kcyB0byB0aGUgdXNlcidzIHRlcm1pbmFsIGlucHV0CisgICAgICAgIGlmIGxlbihsaW5lcykgIT0gMjoKKyAgICAgICAgICAgICMgU29tZXRoaW5nIHdlbnQgd3JvbmcsIHRyeSB0byBnZXQgYXQgc3RkZXJyCisgICAgICAgICAgICAjIEJld2FyZSBvZiBMaW51eCByYWlzaW5nIEVJTyB3aGVuIHRoZSBzbGF2ZSBpcyBjbG9zZWQKKyAgICAgICAgICAgIGNoaWxkX291dHB1dCA9IGJ5dGVhcnJheSgpCisgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgY2h1bmsgPSBvcy5yZWFkKGZkLCAzMDAwKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOiAgIyBBc3N1bWUgRUlPCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgaWYgbm90IGNodW5rOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGNoaWxkX291dHB1dC5leHRlbmQoY2h1bmspCisgICAgICAgICAgICBvcy5jbG9zZShmZCkKKyAgICAgICAgICAgIGNoaWxkX291dHB1dCA9IGNoaWxkX291dHB1dC5kZWNvZGUoImFzY2lpIiwgImlnbm9yZSIpCisgICAgICAgICAgICBzZWxmLmZhaWwoImdvdCAlZCBsaW5lcyBpbiBwaXBlIGJ1dCBleHBlY3RlZCAyLCBjaGlsZCBvdXRwdXQgd2FzOlxuJXMiCisgICAgICAgICAgICAgICAgICAgICAgJSAobGVuKGxpbmVzKSwgY2hpbGRfb3V0cHV0KSkKKyAgICAgICAgb3MuY2xvc2UoZmQpCisgICAgICAgIHJldHVybiBsaW5lcworCisgICAgZGVmIGNoZWNrX2lucHV0X3R0eShzZWxmLCBwcm9tcHQsIHRlcm1pbmFsX2lucHV0LCBzdGRpb19lbmNvZGluZz1Ob25lKToKKyAgICAgICAgaWYgbm90IHN5cy5zdGRpbi5pc2F0dHkoKSBvciBub3Qgc3lzLnN0ZG91dC5pc2F0dHkoKToKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoInN0ZGluIGFuZCBzdGRvdXQgbXVzdCBiZSB0dHlzIikKKyAgICAgICAgZGVmIGNoaWxkKHdwaXBlKToKKyAgICAgICAgICAgICMgQ2hlY2sgdGhlIGVycm9yIGhhbmRsZXJzIGFyZSBhY2NvdW50ZWQgZm9yCisgICAgICAgICAgICBpZiBzdGRpb19lbmNvZGluZzoKKyAgICAgICAgICAgICAgICBzeXMuc3RkaW4gPSBpby5UZXh0SU9XcmFwcGVyKHN5cy5zdGRpbi5kZXRhY2goKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nPXN0ZGlvX2VuY29kaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzPSdzdXJyb2dhdGVlc2NhcGUnKQorICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQgPSBpby5UZXh0SU9XcmFwcGVyKHN5cy5zdGRvdXQuZGV0YWNoKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc9c3RkaW9fZW5jb2RpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzPSdyZXBsYWNlJykKKyAgICAgICAgICAgIHByaW50KCJ0dHkgPSIsIHN5cy5zdGRpbi5pc2F0dHkoKSBhbmQgc3lzLnN0ZG91dC5pc2F0dHkoKSwgZmlsZT13cGlwZSkKKyAgICAgICAgICAgIHByaW50KGFzY2lpKGlucHV0KHByb21wdCkpLCBmaWxlPXdwaXBlKQorICAgICAgICBsaW5lcyA9IHNlbGYucnVuX2NoaWxkKGNoaWxkLCB0ZXJtaW5hbF9pbnB1dCArIGIiXHJcbiIpCisgICAgICAgICMgQ2hlY2sgd2UgZGlkIGV4ZXJjaXNlIHRoZSBHTlUgcmVhZGxpbmUgcGF0aAorICAgICAgICBzZWxmLmFzc2VydEluKGxpbmVzWzBdLCB7J3R0eSA9IFRydWUnLCAndHR5ID0gRmFsc2UnfSkKKyAgICAgICAgaWYgbGluZXNbMF0gIT0gJ3R0eSA9IFRydWUnOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgic3RhbmRhcmQgSU8gaW4gc2hvdWxkIGhhdmUgYmVlbiBhIHR0eSIpCisgICAgICAgIGlucHV0X3Jlc3VsdCA9IGV2YWwobGluZXNbMV0pICAgIyBhc2NpaSgpIC0+IGV2YWwoKSByb3VuZHRyaXAKKyAgICAgICAgaWYgc3RkaW9fZW5jb2Rpbmc6CisgICAgICAgICAgICBleHBlY3RlZCA9IHRlcm1pbmFsX2lucHV0LmRlY29kZShzdGRpb19lbmNvZGluZywgJ3N1cnJvZ2F0ZWVzY2FwZScpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBleHBlY3RlZCA9IHRlcm1pbmFsX2lucHV0LmRlY29kZShzeXMuc3RkaW4uZW5jb2RpbmcpICAjIHdoYXQgZWxzZT8KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnB1dF9yZXN1bHQsIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfaW5wdXRfdHR5KHNlbGYpOgorICAgICAgICAjIFRlc3QgaW5wdXQoKSBmdW5jdGlvbmFsaXR5IHdoZW4gd2lyZWQgdG8gYSB0dHkgKHRoZSBjb2RlIHBhdGgKKyAgICAgICAgIyBpcyBkaWZmZXJlbnQgYW5kIGludm9rZXMgR05VIHJlYWRsaW5lIGlmIGF2YWlsYWJsZSkuCisgICAgICAgIHNlbGYuY2hlY2tfaW5wdXRfdHR5KCJwcm9tcHQiLCBiInF1dXgiKQorCisgICAgZGVmIHRlc3RfaW5wdXRfdHR5X25vbl9hc2NpaShzZWxmKToKKyAgICAgICAgIyBDaGVjayBzdGRpbi9zdGRvdXQgZW5jb2RpbmcgaXMgdXNlZCB3aGVuIGludm9raW5nIEdOVSByZWFkbGluZQorICAgICAgICBzZWxmLmNoZWNrX2lucHV0X3R0eSgicHJvbXB0w6kiLCBiInF1dXhceGU5IiwgInV0Zi04IikKKworICAgIGRlZiB0ZXN0X2lucHV0X3R0eV9ub25fYXNjaWlfdW5pY29kZV9lcnJvcnMoc2VsZik6CisgICAgICAgICMgQ2hlY2sgc3RkaW4vc3Rkb3V0IGVycm9yIGhhbmRsZXIgaXMgdXNlZCB3aGVuIGludm9raW5nIEdOVSByZWFkbGluZQorICAgICAgICBzZWxmLmNoZWNrX2lucHV0X3R0eSgicHJvbXB0w6kiLCBiInF1dXhceGU5IiwgImFzY2lpIikKKworICAgIGRlZiB0ZXN0X2lucHV0X25vX3N0ZG91dF9maWxlbm8oc2VsZik6CisgICAgICAgICMgSXNzdWUgIzI0NDAyOiBJZiBzdGRpbiBpcyB0aGUgb3JpZ2luYWwgdGVybWluYWwgYnV0IHN0ZG91dC5maWxlbm8oKQorICAgICAgICAjIGZhaWxzLCBkbyBub3QgdXNlIHRoZSBvcmlnaW5hbCBzdGRvdXQgZmlsZSBkZXNjcmlwdG9yCisgICAgICAgIGRlZiBjaGlsZCh3cGlwZSk6CisgICAgICAgICAgICBwcmludCgic3RkaW4uaXNhdHR5KCk6Iiwgc3lzLnN0ZGluLmlzYXR0eSgpLCBmaWxlPXdwaXBlKQorICAgICAgICAgICAgc3lzLnN0ZG91dCA9IGlvLlN0cmluZ0lPKCkgICMgRG9lcyBub3Qgc3VwcG9ydCBmaWxlbm8oKQorICAgICAgICAgICAgaW5wdXQoInByb21wdCIpCisgICAgICAgICAgICBwcmludCgiY2FwdHVyZWQ6IiwgYXNjaWkoc3lzLnN0ZG91dC5nZXR2YWx1ZSgpKSwgZmlsZT13cGlwZSkKKyAgICAgICAgbGluZXMgPSBzZWxmLnJ1bl9jaGlsZChjaGlsZCwgYiJxdXV4XHIiKQorICAgICAgICBleHBlY3RlZCA9ICgKKyAgICAgICAgICAgICJzdGRpbi5pc2F0dHkoKTogVHJ1ZSIsCisgICAgICAgICAgICAiY2FwdHVyZWQ6ICdwcm9tcHQnIiwKKyAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydFNlcXVlbmNlRXF1YWwobGluZXMsIGV4cGVjdGVkKQorCiBjbGFzcyBUZXN0U29ydGVkKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiB0ZXN0X2Jhc2ljKHNlbGYpOgpAQCAtMTU2NSwyMSArMTYzMyw0NSBAQAogICAgICAgICBkYXRhID0gJ1RoZSBxdWljayBCcm93biBmb3ggSnVtcGVkIG92ZXIgVGhlIGxhenkgRG9nJy5zcGxpdCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc29ydGVkLCBkYXRhLCBOb25lLCBsYW1iZGEgeCx5OiAwKQogCi1kZWYgdGVzdF9tYWluKHZlcmJvc2U9Tm9uZSk6Ci0gICAgdGVzdF9jbGFzc2VzID0gKEJ1aWx0aW5UZXN0LCBUZXN0U29ydGVkKQogCi0gICAgcnVuX3VuaXR0ZXN0KCp0ZXN0X2NsYXNzZXMpCitjbGFzcyBTaHV0ZG93blRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogCi0gICAgIyB2ZXJpZnkgcmVmZXJlbmNlIGNvdW50aW5nCi0gICAgaWYgdmVyYm9zZSBhbmQgaGFzYXR0cihzeXMsICJnZXR0b3RhbHJlZmNvdW50Iik6Ci0gICAgICAgIGltcG9ydCBnYwotICAgICAgICBjb3VudHMgPSBbTm9uZV0gKiA1Ci0gICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihjb3VudHMpKToKLSAgICAgICAgICAgIHJ1bl91bml0dGVzdCgqdGVzdF9jbGFzc2VzKQotICAgICAgICAgICAgZ2MuY29sbGVjdCgpCi0gICAgICAgICAgICBjb3VudHNbaV0gPSBzeXMuZ2V0dG90YWxyZWZjb3VudCgpCi0gICAgICAgIHByaW50KGNvdW50cykKKyAgICBkZWYgdGVzdF9jbGVhbnVwKHNlbGYpOgorICAgICAgICAjIElzc3VlICMxOTI1NTogYnVpbHRpbnMgYXJlIHN0aWxsIGF2YWlsYWJsZSBhdCBzaHV0ZG93bgorICAgICAgICBjb2RlID0gIiIiaWYgMToKKyAgICAgICAgICAgIGltcG9ydCBidWlsdGlucworICAgICAgICAgICAgaW1wb3J0IHN5cwogCisgICAgICAgICAgICBjbGFzcyBDOgorICAgICAgICAgICAgICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICBwcmludCgiYmVmb3JlIikKKyAgICAgICAgICAgICAgICAgICAgIyBDaGVjayB0aGF0IGJ1aWx0aW5zIHN0aWxsIGV4aXN0CisgICAgICAgICAgICAgICAgICAgIGxlbigoKSkKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoImFmdGVyIikKKworICAgICAgICAgICAgYyA9IEMoKQorICAgICAgICAgICAgIyBNYWtlIHRoaXMgbW9kdWxlIHN1cnZpdmUgdW50aWwgYnVpbHRpbnMgYW5kIHN5cyBhcmUgY2xlYW5lZAorICAgICAgICAgICAgYnVpbHRpbnMuaGVyZSA9IHN5cy5tb2R1bGVzW19fbmFtZV9fXQorICAgICAgICAgICAgc3lzLmhlcmUgPSBzeXMubW9kdWxlc1tfX25hbWVfX10KKyAgICAgICAgICAgICMgQ3JlYXRlIGEgcmVmZXJlbmNlIGxvb3Agc28gdGhhdCB0aGlzIG1vZHVsZSBuZWVkcyB0byBnbworICAgICAgICAgICAgIyB0aHJvdWdoIGEgR0MgcGhhc2UuCisgICAgICAgICAgICBoZXJlID0gc3lzLm1vZHVsZXNbX19uYW1lX19dCisgICAgICAgICAgICAiIiIKKyAgICAgICAgIyBJc3N1ZSAjMjA1OTk6IEZvcmNlIEFTQ0lJIGVuY29kaW5nIHRvIGdldCBhIGNvZGVjIGltcGxlbWVudGVkIGluIEMsCisgICAgICAgICMgb3RoZXJ3aXNlIHRoZSBjb2RlYyBtYXkgYmUgdW5sb2FkZWQgYmVmb3JlIEMuX19kZWxfXygpIGlzIGNhbGxlZCwgYW5kCisgICAgICAgICMgc28gcHJpbnQoImJlZm9yZSIpIGZhaWxzIGJlY2F1c2UgdGhlIGNvZGVjIGNhbm5vdCBiZSB1c2VkIHRvIGVuY29kZQorICAgICAgICAjICJiZWZvcmUiIHRvIHN5cy5zdGRvdXQuZW5jb2RpbmcuIEZvciBleGFtcGxlLCBvbiBXaW5kb3dzLAorICAgICAgICAjIHN5cy5zdGRvdXQuZW5jb2RpbmcgaXMgdGhlIE9FTSBjb2RlIHBhZ2UgYW5kIHRoZXNlIGNvZGUgcGFnZXMgYXJlCisgICAgICAgICMgaW1wbGVtZW50ZWQgaW4gUHl0aG9uCisgICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soIi1jIiwgY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQWVRIT05JT0VOQ09ESU5HPSJhc2NpaSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWyJiZWZvcmUiLCAiYWZ0ZXIiXSwgb3V0LmRlY29kZSgpLnNwbGl0bGluZXMoKSkKKworCitkZWYgbG9hZF90ZXN0cyhsb2FkZXIsIHRlc3RzLCBwYXR0ZXJuKToKKyAgICBmcm9tIGRvY3Rlc3QgaW1wb3J0IERvY1Rlc3RTdWl0ZQorICAgIHRlc3RzLmFkZFRlc3QoRG9jVGVzdFN1aXRlKGJ1aWx0aW5zKSkKKyAgICByZXR1cm4gdGVzdHMKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4odmVyYm9zZT1UcnVlKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9ieXRlcy5weSBiL0xpYi90ZXN0L3Rlc3RfYnl0ZXMucHkKaW5kZXggM2MwOTE0MS4uMGE3M2ZjYiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9ieXRlcy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2J5dGVzLnB5CkBAIC0xMyw5ICsxMywxMSBAQAogaW1wb3J0IHBpY2tsZQogaW1wb3J0IHRlbXBmaWxlCiBpbXBvcnQgdW5pdHRlc3QKKwogaW1wb3J0IHRlc3Quc3VwcG9ydAogaW1wb3J0IHRlc3Quc3RyaW5nX3Rlc3RzCiBpbXBvcnQgdGVzdC5idWZmZXJfdGVzdHMKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBiaWdhZGRyc3BhY2V0ZXN0LCBNQVhfUHlfc3NpemVfdAogCiAKIGlmIHN5cy5mbGFncy5ieXRlc193YXJuaW5nOgpAQCAtOTgsNiArMTAwLDE0IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi50eXBlMnRlc3QsIFswLjBdKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYudHlwZTJ0ZXN0LCBbTm9uZV0pCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi50eXBlMnRlc3QsIFtDKCldKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYudHlwZTJ0ZXN0LCAwLCAnYXNjaWknKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYudHlwZTJ0ZXN0LCBiJycsICdhc2NpaScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi50eXBlMnRlc3QsIDAsIGVycm9ycz0naWdub3JlJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnR5cGUydGVzdCwgYicnLCBlcnJvcnM9J2lnbm9yZScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi50eXBlMnRlc3QsICcnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYudHlwZTJ0ZXN0LCAnJywgZXJyb3JzPSdpZ25vcmUnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYudHlwZTJ0ZXN0LCAnJywgYidhc2NpaScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi50eXBlMnRlc3QsICcnLCAnYXNjaWknLCBiJ2lnbm9yZScpCiAKICAgICBkZWYgdGVzdF9jb25zdHJ1Y3Rvcl92YWx1ZV9lcnJvcnMoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYudHlwZTJ0ZXN0LCBbLTFdKQpAQCAtMTExLDYgKzEyMSwxNyBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnR5cGUydGVzdCwgW3N5cy5tYXhzaXplKzFdKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnR5cGUydGVzdCwgWzEwKioxMDBdKQogCisgICAgQGJpZ2FkZHJzcGFjZXRlc3QKKyAgICBkZWYgdGVzdF9jb25zdHJ1Y3Rvcl9vdmVyZmxvdyhzZWxmKToKKyAgICAgICAgc2l6ZSA9IE1BWF9QeV9zc2l6ZV90CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChPdmVyZmxvd0Vycm9yLCBNZW1vcnlFcnJvciksIHNlbGYudHlwZTJ0ZXN0LCBzaXplKQorICAgICAgICB0cnk6CisgICAgICAgICAgICAjIFNob3VsZCBlaXRoZXIgcGFzcyBvciByYWlzZSBhbiBlcnJvciAoZS5nLiBvbiBkZWJ1ZyBidWlsZHMgd2l0aAorICAgICAgICAgICAgIyBhZGRpdGlvbmFsIG1hbGxvYygpIG92ZXJoZWFkKSwgYnV0IHNob3VsZG4ndCBjcmFzaC4KKyAgICAgICAgICAgIGJ5dGVhcnJheShzaXplIC0gNCkKKyAgICAgICAgZXhjZXB0IChPdmVyZmxvd0Vycm9yLCBNZW1vcnlFcnJvcik6CisgICAgICAgICAgICBwYXNzCisKICAgICBkZWYgdGVzdF9jb21wYXJlKHNlbGYpOgogICAgICAgICBiMSA9IHNlbGYudHlwZTJ0ZXN0KFsxLCAyLCAzXSkKICAgICAgICAgYjIgPSBzZWxmLnR5cGUydGVzdChbMSwgMiwgM10pCkBAIC0yODgsOCArMzA5LDIzIEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHlwZTJ0ZXN0KGIiIikuam9pbihsc3QpLCBiImFiYyIpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHlwZTJ0ZXN0KGIiIikuam9pbih0dXBsZShsc3QpKSwgYiJhYmMiKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR5cGUydGVzdChiIiIpLmpvaW4oaXRlcihsc3QpKSwgYiJhYmMiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHlwZTJ0ZXN0KGIiLiIpLmpvaW4oW2IiYWIiLCBiImNkIl0pLCBiImFiLmNkIikKLSAgICAgICAgIyBYWFggbW9yZS4uLgorICAgICAgICBkb3Rfam9pbiA9IHNlbGYudHlwZTJ0ZXN0KGIiLjoiKS5qb2luCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZG90X2pvaW4oW2IiYWIiLCBiImNkIl0pLCBiImFiLjpjZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZG90X2pvaW4oW21lbW9yeXZpZXcoYiJhYiIpLCBiImNkIl0pLCBiImFiLjpjZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZG90X2pvaW4oW2IiYWIiLCBtZW1vcnl2aWV3KGIiY2QiKV0pLCBiImFiLjpjZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZG90X2pvaW4oW2J5dGVhcnJheShiImFiIiksIGIiY2QiXSksIGIiYWIuOmNkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkb3Rfam9pbihbYiJhYiIsIGJ5dGVhcnJheShiImNkIildKSwgYiJhYi46Y2QiKQorICAgICAgICAjIFN0cmVzcyBpdCB3aXRoIG1hbnkgaXRlbXMKKyAgICAgICAgc2VxID0gW2IiYWJjIl0gKiAxMDAwCisgICAgICAgIGV4cGVjdGVkID0gYiJhYmMiICsgYiIuOmFiYyIgKiA5OTkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkb3Rfam9pbihzZXEpLCBleHBlY3RlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnR5cGUydGVzdChiIiAiKS5qb2luLCBOb25lKQorICAgICAgICAjIEVycm9yIGhhbmRsaW5nIGFuZCBjbGVhbnVwIHdoZW4gc29tZSBpdGVtIGluIHRoZSBtaWRkbGUgb2YgdGhlCisgICAgICAgICMgc2VxdWVuY2UgaGFzIHRoZSB3cm9uZyB0eXBlLgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBkb3Rfam9pbihbYnl0ZWFycmF5KGIiYWIiKSwgImNkIiwgYiJlZiJdKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBkb3Rfam9pbihbbWVtb3J5dmlldyhiImFiIiksICJjZCIsIGIiZWYiXSkKIAogICAgIGRlZiB0ZXN0X2NvdW50KHNlbGYpOgogICAgICAgICBiID0gc2VsZi50eXBlMnRlc3QoYidtaXNzaXNzaXBwaScpCkBAIC01MTksMjIgKzU1NSwyMyBAQAogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiwgcSkKIAogICAgIGRlZiB0ZXN0X2l0ZXJhdG9yX3BpY2tsaW5nKHNlbGYpOgotICAgICAgICBmb3IgYiBpbiBiIiIsIGIiYSIsIGIiYWJjIiwgYiJceGZmYWJceDgwIiwgYiJcMFwwXDM3N1wwXDAiOgotICAgICAgICAgICAgaXQgPSBpdG9yZyA9IGl0ZXIoc2VsZi50eXBlMnRlc3QoYikpCi0gICAgICAgICAgICBkYXRhID0gbGlzdChzZWxmLnR5cGUydGVzdChiKSkKLSAgICAgICAgICAgIGQgPSBwaWNrbGUuZHVtcHMoaXQpCi0gICAgICAgICAgICBpdCA9IHBpY2tsZS5sb2FkcyhkKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGl0b3JnKSwgdHlwZShpdCkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoaXQpLCBkYXRhKQorICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIGZvciBiIGluIGIiIiwgYiJhIiwgYiJhYmMiLCBiIlx4ZmZhYlx4ODAiLCBiIlwwXDBcMzc3XDBcMCI6CisgICAgICAgICAgICAgICAgaXQgPSBpdG9yZyA9IGl0ZXIoc2VsZi50eXBlMnRlc3QoYikpCisgICAgICAgICAgICAgICAgZGF0YSA9IGxpc3Qoc2VsZi50eXBlMnRlc3QoYikpCisgICAgICAgICAgICAgICAgZCA9IHBpY2tsZS5kdW1wcyhpdCwgcHJvdG8pCisgICAgICAgICAgICAgICAgaXQgPSBwaWNrbGUubG9hZHMoZCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoaXRvcmcpLCB0eXBlKGl0KSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoaXQpLCBkYXRhKQogCi0gICAgICAgICAgICBpdCA9IHBpY2tsZS5sb2FkcyhkKQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIG5leHQoaXQpCi0gICAgICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKLSAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgZCA9IHBpY2tsZS5kdW1wcyhpdCkKLSAgICAgICAgICAgIGl0ID0gcGlja2xlLmxvYWRzKGQpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoaXQpLCBkYXRhWzE6XSkKKyAgICAgICAgICAgICAgICBpdCA9IHBpY2tsZS5sb2FkcyhkKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgbmV4dChpdCkKKyAgICAgICAgICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBkID0gcGlja2xlLmR1bXBzKGl0LCBwcm90bykKKyAgICAgICAgICAgICAgICBpdCA9IHBpY2tsZS5sb2FkcyhkKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpdCksIGRhdGFbMTpdKQogCiAgICAgZGVmIHRlc3Rfc3RyaXAoc2VsZik6CiAgICAgICAgIGIgPSBzZWxmLnR5cGUydGVzdChiJ21pc3Npc3NpcHBpJykKQEAgLTY4Niw3ICs3MjMsNyBAQAogICAgIHR5cGUydGVzdCA9IGJ5dGVzCiAKICAgICBkZWYgdGVzdF9idWZmZXJfaXNfcmVhZG9ubHkoc2VsZik6Ci0gICAgICAgIGZkID0gb3MuZHVwKHN5cy5zdGRpbi5maWxlbm8oKSkKKyAgICAgICAgZmQgPSBvcy5vcGVuKF9fZmlsZV9fLCBvcy5PX1JET05MWSkKICAgICAgICAgd2l0aCBvcGVuKGZkLCAicmIiLCBidWZmZXJpbmc9MCkgYXMgZjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZi5yZWFkaW50bywgYiIiKQogCkBAIC03MDcsNiArNzQ0LDE0IEBACiAgICAgICAgICAgICBkZWYgX19pbmRleF9fKHNlbGYpOgogICAgICAgICAgICAgICAgIHJldHVybiA0MgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ5dGVzKEEoKSksIGInYScpCisgICAgICAgICMgSXNzdWUgIzI0NzMxCisgICAgICAgIGNsYXNzIEE6CisgICAgICAgICAgICBkZWYgX19ieXRlc19fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBPdGhlckJ5dGVzU3ViY2xhc3MoYidhYmMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ5dGVzKEEoKSksIGInYWJjJykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKGJ5dGVzKEEoKSkpLCBPdGhlckJ5dGVzU3ViY2xhc3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQnl0ZXNTdWJjbGFzcyhBKCkpLCBiJ2FiYycpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShCeXRlc1N1YmNsYXNzKEEoKSkpLCBCeXRlc1N1YmNsYXNzKQogCiAgICAgIyBUZXN0IFB5Qnl0ZXNfRnJvbUZvcm1hdCgpCiAgICAgZGVmIHRlc3RfZnJvbV9mb3JtYXQoc2VsZik6CkBAIC03NjUsNyArODEwLDcgQEAKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBvcy5yZW1vdmUodGZuKQotICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgcGFzcwogCiAgICAgZGVmIHRlc3RfcmV2ZXJzZShzZWxmKToKQEAgLTkwMSw2ICs5NDYsMzEgQEAKICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CiAgICAgICAgICAgICAgICAgYlszOjRdID0gZWxlbQogCisgICAgZGVmIHRlc3Rfc2V0c2xpY2VfZXh0ZW5kKHNlbGYpOgorICAgICAgICAjIEV4ZXJjaXNlIHRoZSByZXNpemluZyBsb2dpYyAoc2VlIGlzc3VlICMxOTA4NykKKyAgICAgICAgYiA9IGJ5dGVhcnJheShyYW5nZSgxMDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoYiksIGxpc3QocmFuZ2UoMTAwKSkpCisgICAgICAgIGRlbCBiWzoxMF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGIpLCBsaXN0KHJhbmdlKDEwLCAxMDApKSkKKyAgICAgICAgYi5leHRlbmQocmFuZ2UoMTAwLCAxMTApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoYiksIGxpc3QocmFuZ2UoMTAsIDExMCkpKQorCisgICAgZGVmIHRlc3RfZmlmb19vdmVycnVuKHNlbGYpOgorICAgICAgICAjIFRlc3QgZm9yIGlzc3VlICMyMzk4NSwgYSBidWZmZXIgb3ZlcnJ1biB3aGVuIGltcGxlbWVudGluZyBhIEZJRk8KKyAgICAgICAgIyBCdWlsZCBQeXRob24gaW4gcHlkZWJ1ZyBtb2RlIGZvciBiZXN0IHJlc3VsdHMuCisgICAgICAgIGIgPSBieXRlYXJyYXkoMTApCisgICAgICAgIGIucG9wKCkgICAgICAgICMgRGVmZWF0IGV4cGFuZGluZyBidWZmZXIgb2ZmLWJ5LW9uZSBxdWlyaworICAgICAgICBkZWwgYls6MV0gICAgICAjIEFkdmFuY2Ugc3RhcnQgcG9pbnRlciB3aXRob3V0IHJlYWxsb2NhdGluZworICAgICAgICBiICs9IGJ5dGVzKDIpICAjIEFwcGVuZCBleGFjdGx5IHRoZSBudW1iZXIgb2YgZGVsZXRlZCBieXRlcworICAgICAgICBkZWwgYiAgICAgICAgICAjIEZyZWUgbWVtb3J5IGJ1ZmZlciwgYWxsb3dpbmcgcHlkZWJ1ZyB2ZXJpZmljYXRpb24KKworICAgIGRlZiB0ZXN0X2RlbF9leHBhbmQoc2VsZik6CisgICAgICAgICMgUmVkdWNpbmcgdGhlIHNpemUgc2hvdWxkIG5vdCBleHBhbmQgdGhlIGJ1ZmZlciAoaXNzdWUgIzIzOTg1KQorICAgICAgICBiID0gYnl0ZWFycmF5KDEwKQorICAgICAgICBzaXplID0gc3lzLmdldHNpemVvZihiKQorICAgICAgICBkZWwgYls6MV0KKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwoc3lzLmdldHNpemVvZihiKSwgc2l6ZSkKKwogICAgIGRlZiB0ZXN0X2V4dGVuZGVkX3NldF9kZWxfc2xpY2Uoc2VsZik6CiAgICAgICAgIGluZGljZXMgPSAoMCwgTm9uZSwgMSwgMywgMTksIDMwMCwgMTw8MzMzLCAtMSwgLTIsIC0zMSwgLTMwMCkKICAgICAgICAgZm9yIHN0YXJ0IGluIGluZGljZXM6CkBAIC05NjgsMTAgKzEwMzgsMjcgQEAKICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTAwKToKICAgICAgICAgICAgIGIgKz0gYiJ4IgogICAgICAgICAgICAgYWxsb2MgPSBiLl9fYWxsb2NfXygpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoYWxsb2MgPj0gbGVuKGIpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKGFsbG9jLCBsZW4oYikpICAjIGluY2x1ZGluZyB0cmFpbGluZyBudWxsIGJ5dGUKICAgICAgICAgICAgIGlmIGFsbG9jIG5vdCBpbiBzZXE6CiAgICAgICAgICAgICAgICAgc2VxLmFwcGVuZChhbGxvYykKIAorICAgIGRlZiB0ZXN0X2luaXRfYWxsb2Moc2VsZik6CisgICAgICAgIGIgPSBieXRlYXJyYXkoKQorICAgICAgICBkZWYgZygpOgorICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSwgMTAwKToKKyAgICAgICAgICAgICAgICB5aWVsZCBpCisgICAgICAgICAgICAgICAgYSA9IGxpc3QoYikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIGxpc3QocmFuZ2UoMSwgbGVuKGEpKzEpKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihiKSwgbGVuKGEpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKGxlbihiKSwgaSkKKyAgICAgICAgICAgICAgICBhbGxvYyA9IGIuX19hbGxvY19fKCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIoYWxsb2MsIGxlbihiKSkgICMgaW5jbHVkaW5nIHRyYWlsaW5nIG51bGwgYnl0ZQorICAgICAgICBiLl9faW5pdF9fKGcoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGIpLCBsaXN0KHJhbmdlKDEsIDEwMCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihiKSwgOTkpCisgICAgICAgIGFsbG9jID0gYi5fX2FsbG9jX18oKQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIoYWxsb2MsIGxlbihiKSkKKwogICAgIGRlZiB0ZXN0X2V4dGVuZChzZWxmKToKICAgICAgICAgb3JpZyA9IGInaGVsbG8nCiAgICAgICAgIGEgPSBieXRlYXJyYXkob3JpZykKQEAgLTEyODAsNiArMTM2NywxMSBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWwsIG5ld3ZhbCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh2YWwgaXMgbm90IG5ld3ZhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByKycgcmV0dXJuZWQgdmFsIG9uIGEgbXV0YWJsZSBvYmplY3QnKQorICAgICAgICBzZXAgPSBzZWxmLm1hcnNoYWwoYicnKQorICAgICAgICBuZXd2YWwgPSBzZXAuam9pbihbdmFsXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWwsIG5ld3ZhbCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdCh2YWwsIG5ld3ZhbCkKKwogCiBjbGFzcyBGaXhlZFN0cmluZ1Rlc3QodGVzdC5zdHJpbmdfdGVzdHMuQmFzZVRlc3QpOgogCkBAIC0xMzgxLDYgKzE0NzMsOSBAQAogY2xhc3MgQnl0ZXNTdWJjbGFzcyhieXRlcyk6CiAgICAgcGFzcwogCitjbGFzcyBPdGhlckJ5dGVzU3ViY2xhc3MoYnl0ZXMpOgorICAgIHBhc3MKKwogY2xhc3MgQnl0ZUFycmF5U3ViY2xhc3NUZXN0KFN1YmNsYXNzVGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgogICAgIHR5cGUydGVzdCA9IGJ5dGVhcnJheQogICAgIHN1YmNsYXNzMnRlc3QgPSBCeXRlQXJyYXlTdWJjbGFzcwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9iejIucHkgYi9MaWIvdGVzdC90ZXN0X2J6Mi5weQppbmRleCBjOGM5MzUxLi5iZWVmMjc1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2J6Mi5weQorKysgYi9MaWIvdGVzdC90ZXN0X2J6Mi5weQpAQCAtMSw1ICsxLDUgQEAKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAotZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IFRFU1RGTiwgYmlnbWVtdGVzdCwgXzRHCitmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgYmlnbWVtdGVzdCwgXzRHCiAKIGltcG9ydCB1bml0dGVzdAogZnJvbSBpbyBpbXBvcnQgQnl0ZXNJTwpAQCAtOCw2ICs4LDcgQEAKIGltcG9ydCByYW5kb20KIGltcG9ydCBzdWJwcm9jZXNzCiBpbXBvcnQgc3lzCitmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgdW5saW5rCiAKIHRyeToKICAgICBpbXBvcnQgdGhyZWFkaW5nCkBAIC0xOCwxMCArMTksMTAgQEAKIGJ6MiA9IHN1cHBvcnQuaW1wb3J0X21vZHVsZSgnYnoyJykKIGZyb20gYnoyIGltcG9ydCBCWjJGaWxlLCBCWjJDb21wcmVzc29yLCBCWjJEZWNvbXByZXNzb3IKIAotaGFzX2NtZGxpbmVfYnVuemlwMiA9IHN5cy5wbGF0Zm9ybSBub3QgaW4gKCJ3aW4zMiIsICJvczJlbXgiKQogCiBjbGFzcyBCYXNlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgIkJhc2UgZm9yIG90aGVyIHRlc3RjYXNlcy4iCisKICAgICBURVhUX0xJTkVTID0gWwogICAgICAgICBiJ3Jvb3Q6eDowOjA6cm9vdDovcm9vdDovYmluL2Jhc2hcbicsCiAgICAgICAgIGInYmluOng6MToxOmJpbjovYmluOlxuJywKQEAgLTUxLDEzICs1MiwxNyBAQAogICAgIEJBRF9EQVRBID0gYid0aGlzIGlzIG5vdCBhIHZhbGlkIGJ6aXAyIGZpbGUnCiAKICAgICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgIHNlbGYuZmlsZW5hbWUgPSBURVNURk4KKyAgICAgICAgc2VsZi5maWxlbmFtZSA9IHN1cHBvcnQuVEVTVEZOCiAKICAgICBkZWYgdGVhckRvd24oc2VsZik6CiAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKHNlbGYuZmlsZW5hbWUpOgogICAgICAgICAgICAgb3MudW5saW5rKHNlbGYuZmlsZW5hbWUpCiAKLSAgICBpZiBoYXNfY21kbGluZV9idW56aXAyOgorICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiOgorICAgICAgICAjIGJ1bnppcDIgaXNuJ3QgYXZhaWxhYmxlIHRvIHJ1biBvbiBXaW5kb3dzLgorICAgICAgICBkZWYgZGVjb21wcmVzcyhzZWxmLCBkYXRhKToKKyAgICAgICAgICAgIHJldHVybiBiejIuZGVjb21wcmVzcyhkYXRhKQorICAgIGVsc2U6CiAgICAgICAgIGRlZiBkZWNvbXByZXNzKHNlbGYsIGRhdGEpOgogICAgICAgICAgICAgcG9wID0gc3VicHJvY2Vzcy5Qb3BlbigiYnVuemlwMiIsIHNoZWxsPVRydWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwKQEAgLTcxLDEzICs3Niw5IEBACiAgICAgICAgICAgICAgICAgcmV0ID0gYnoyLmRlY29tcHJlc3MoZGF0YSkKICAgICAgICAgICAgIHJldHVybiByZXQKIAotICAgIGVsc2U6Ci0gICAgICAgICMgYnVuemlwMiBpc24ndCBhdmFpbGFibGUgdG8gcnVuIG9uIFdpbmRvd3MuCi0gICAgICAgIGRlZiBkZWNvbXByZXNzKHNlbGYsIGRhdGEpOgotICAgICAgICAgICAgcmV0dXJuIGJ6Mi5kZWNvbXByZXNzKGRhdGEpCiAKIGNsYXNzIEJaMkZpbGVUZXN0KEJhc2VUZXN0KToKLSAgICAiVGVzdCBCWjJGaWxlIHR5cGUgbWlzY2VsbGFuZW91cyBtZXRob2RzLiIKKyAgICAiVGVzdCB0aGUgQloyRmlsZSBjbGFzcy4iCiAKICAgICBkZWYgY3JlYXRlVGVtcEZpbGUoc2VsZiwgc3RyZWFtcz0xLCBzdWZmaXg9YiIiKToKICAgICAgICAgd2l0aCBvcGVuKHNlbGYuZmlsZW5hbWUsICJ3YiIpIGFzIGY6CkBAIC04NSwxOCArODYsMTIgQEAKICAgICAgICAgICAgIGYud3JpdGUoc3VmZml4KQogCiAgICAgZGVmIHRlc3RCYWRBcmdzKHNlbGYpOgotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6Ci0gICAgICAgICAgICBCWjJGaWxlKDEyMy40NTYpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6Ci0gICAgICAgICAgICBCWjJGaWxlKCIvZGV2L251bGwiLCAieiIpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6Ci0gICAgICAgICAgICBCWjJGaWxlKCIvZGV2L251bGwiLCAicngiKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgotICAgICAgICAgICAgQloyRmlsZSgiL2Rldi9udWxsIiwgInJidCIpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6Ci0gICAgICAgICAgICBCWjJGaWxlKCIvZGV2L251bGwiLCBjb21wcmVzc2xldmVsPTApCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6Ci0gICAgICAgICAgICBCWjJGaWxlKCIvZGV2L251bGwiLCBjb21wcmVzc2xldmVsPTEwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIEJaMkZpbGUsIDEyMy40NTYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIEJaMkZpbGUsIG9zLmRldm51bGwsICJ6IikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgQloyRmlsZSwgb3MuZGV2bnVsbCwgInJ4IikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgQloyRmlsZSwgb3MuZGV2bnVsbCwgInJidCIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIEJaMkZpbGUsIG9zLmRldm51bGwsIGNvbXByZXNzbGV2ZWw9MCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgQloyRmlsZSwgb3MuZGV2bnVsbCwgY29tcHJlc3NsZXZlbD0xMCkKIAogICAgIGRlZiB0ZXN0UmVhZChzZWxmKToKICAgICAgICAgc2VsZi5jcmVhdGVUZW1wRmlsZSgpCkBAIC0yMzIsOSArMjI3LDggQEAKICAgICAgICAgc2VsZi5jcmVhdGVUZW1wRmlsZSgpCiAgICAgICAgIGJ6MmYgPSBCWjJGaWxlKHNlbGYuZmlsZW5hbWUpCiAgICAgICAgIGJ6MmYuY2xvc2UoKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBiejJmLl9fbmV4dF9fKQotICAgICAgICAjIFRoaXMgY2FsbCB3aWxsIGRlYWRsb2NrIGlmIHRoZSBhYm92ZSAuX19uZXh0X18gY2FsbCBmYWlsZWQgdG8KLSAgICAgICAgIyByZWxlYXNlIHRoZSBsb2NrLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBuZXh0LCBiejJmKQorICAgICAgICAjIFRoaXMgY2FsbCB3aWxsIGRlYWRsb2NrIGlmIHRoZSBhYm92ZSBjYWxsIGZhaWxlZCB0byByZWxlYXNlIHRoZSBsb2NrLgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBiejJmLnJlYWRsaW5lcykKIAogICAgIGRlZiB0ZXN0V3JpdGUoc2VsZik6CkBAIC0yNzgsOCArMjcyLDggQEAKICAgICAgICAgICAgIGJ6MmYud3JpdGUoYiJhYmMiKQogCiAgICAgICAgIHdpdGggQloyRmlsZShzZWxmLmZpbGVuYW1lLCAiciIpIGFzIGJ6MmY6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBiejJmLndyaXRlLCBiImEiKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgYnoyZi53cml0ZWxpbmVzLCBbYiJhIl0pCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBiejJmLndyaXRlLCBiImEiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgYnoyZi53cml0ZWxpbmVzLCBbYiJhIl0pCiAKICAgICBkZWYgdGVzdEFwcGVuZChzZWxmKToKICAgICAgICAgd2l0aCBCWjJGaWxlKHNlbGYuZmlsZW5hbWUsICJ3IikgYXMgYnoyZjoKQEAgLTM5Nyw3ICszOTEsNyBAQAogICAgICAgICAgICAgYnoyZi5jbG9zZSgpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJ6MmYuc2Vla2FibGUpCiAKLSAgICAgICAgYnoyZiA9IEJaMkZpbGUoQnl0ZXNJTygpLCBtb2RlPSJ3IikKKyAgICAgICAgYnoyZiA9IEJaMkZpbGUoQnl0ZXNJTygpLCAidyIpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYnoyZi5zZWVrYWJsZSgpKQogICAgICAgICBmaW5hbGx5OgpAQCAtNDIzLDcgKzQxNyw3IEBACiAgICAgICAgICAgICBiejJmLmNsb3NlKCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYnoyZi5yZWFkYWJsZSkKIAotICAgICAgICBiejJmID0gQloyRmlsZShCeXRlc0lPKCksIG1vZGU9InciKQorICAgICAgICBiejJmID0gQloyRmlsZShCeXRlc0lPKCksICJ3IikKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShiejJmLnJlYWRhYmxlKCkpCiAgICAgICAgIGZpbmFsbHk6CkBAIC00NDAsNyArNDM0LDcgQEAKICAgICAgICAgICAgIGJ6MmYuY2xvc2UoKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBiejJmLndyaXRhYmxlKQogCi0gICAgICAgIGJ6MmYgPSBCWjJGaWxlKEJ5dGVzSU8oKSwgbW9kZT0idyIpCisgICAgICAgIGJ6MmYgPSBCWjJGaWxlKEJ5dGVzSU8oKSwgInciKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoYnoyZi53cml0YWJsZSgpKQogICAgICAgICBmaW5hbGx5OgpAQCAtNDU0LDcgKzQ0OCw3IEBACiAgICAgICAgICAgICBkZWwgbwogCiAgICAgZGVmIHRlc3RPcGVuTm9uZXhpc3RlbnQoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIEJaMkZpbGUsICIvbm9uL2V4aXN0ZW50IikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgQloyRmlsZSwgIi9ub24vZXhpc3RlbnQiKQogCiAgICAgZGVmIHRlc3RSZWFkbGluZXNOb05ld2xpbmUoc2VsZik6CiAgICAgICAgICMgSXNzdWUgIzExOTEwNDM6IHJlYWRsaW5lcygpIGZhaWxzIG9uIGEgZmlsZSBjb250YWluaW5nIG5vIG5ld2xpbmUuCkBAIC00OTQsMzkgKzQ4OCwzNiBAQAogICAgICAgICAjIElzc3VlICM3MjA1OiBVc2luZyBhIEJaMkZpbGUgZnJvbSBzZXZlcmFsIHRocmVhZHMgc2hvdWxkbid0IGRlYWRsb2NrLgogICAgICAgICBkYXRhID0gYiIxIiAqIDIqKjIwCiAgICAgICAgIG50aHJlYWRzID0gMTAKLSAgICAgICAgd2l0aCBiejIuQloyRmlsZShzZWxmLmZpbGVuYW1lLCAnd2InKSBhcyBmOgorICAgICAgICB3aXRoIEJaMkZpbGUoc2VsZi5maWxlbmFtZSwgJ3diJykgYXMgZjoKICAgICAgICAgICAgIGRlZiBjb21wKCk6CiAgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoNSk6CiAgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoZGF0YSkKICAgICAgICAgICAgIHRocmVhZHMgPSBbdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9Y29tcCkgZm9yIGkgaW4gcmFuZ2UobnRocmVhZHMpXQotICAgICAgICAgICAgZm9yIHQgaW4gdGhyZWFkczoKLSAgICAgICAgICAgICAgICB0LnN0YXJ0KCkKLSAgICAgICAgICAgIGZvciB0IGluIHRocmVhZHM6Ci0gICAgICAgICAgICAgICAgdC5qb2luKCkKKyAgICAgICAgICAgIHdpdGggc3VwcG9ydC5zdGFydF90aHJlYWRzKHRocmVhZHMpOgorICAgICAgICAgICAgICAgIHBhc3MKIAogICAgIGRlZiB0ZXN0V2l0aG91dFRocmVhZGluZyhzZWxmKToKLSAgICAgICAgYnoyID0gc3VwcG9ydC5pbXBvcnRfZnJlc2hfbW9kdWxlKCJiejIiLCBibG9ja2VkPSgidGhyZWFkaW5nIiwpKQotICAgICAgICB3aXRoIGJ6Mi5CWjJGaWxlKHNlbGYuZmlsZW5hbWUsICJ3YiIpIGFzIGY6CisgICAgICAgIG1vZHVsZSA9IHN1cHBvcnQuaW1wb3J0X2ZyZXNoX21vZHVsZSgiYnoyIiwgYmxvY2tlZD0oInRocmVhZGluZyIsKSkKKyAgICAgICAgd2l0aCBtb2R1bGUuQloyRmlsZShzZWxmLmZpbGVuYW1lLCAid2IiKSBhcyBmOgogICAgICAgICAgICAgZi53cml0ZShiImFiYyIpCi0gICAgICAgIHdpdGggYnoyLkJaMkZpbGUoc2VsZi5maWxlbmFtZSwgInJiIikgYXMgZjoKKyAgICAgICAgd2l0aCBtb2R1bGUuQloyRmlsZShzZWxmLmZpbGVuYW1lLCAicmIiKSBhcyBmOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgYiJhYmMiKQogCiAgICAgZGVmIHRlc3RNaXhlZEl0ZXJhdGlvbkFuZFJlYWRzKHNlbGYpOgogICAgICAgICBzZWxmLmNyZWF0ZVRlbXBGaWxlKCkKICAgICAgICAgbGluZWxlbiA9IGxlbihzZWxmLlRFWFRfTElORVNbMF0pCiAgICAgICAgIGhhbGZsZW4gPSBsaW5lbGVuIC8vIDIKLSAgICAgICAgd2l0aCBiejIuQloyRmlsZShzZWxmLmZpbGVuYW1lKSBhcyBiejJmOgorICAgICAgICB3aXRoIEJaMkZpbGUoc2VsZi5maWxlbmFtZSkgYXMgYnoyZjoKICAgICAgICAgICAgIGJ6MmYucmVhZChoYWxmbGVuKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXh0KGJ6MmYpLCBzZWxmLlRFWFRfTElORVNbMF1baGFsZmxlbjpdKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiejJmLnJlYWQoKSwgc2VsZi5URVhUW2xpbmVsZW46XSkKLSAgICAgICAgd2l0aCBiejIuQloyRmlsZShzZWxmLmZpbGVuYW1lKSBhcyBiejJmOgorICAgICAgICB3aXRoIEJaMkZpbGUoc2VsZi5maWxlbmFtZSkgYXMgYnoyZjoKICAgICAgICAgICAgIGJ6MmYucmVhZGxpbmUoKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXh0KGJ6MmYpLCBzZWxmLlRFWFRfTElORVNbMV0pCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ6MmYucmVhZGxpbmUoKSwgc2VsZi5URVhUX0xJTkVTWzJdKQotICAgICAgICB3aXRoIGJ6Mi5CWjJGaWxlKHNlbGYuZmlsZW5hbWUpIGFzIGJ6MmY6CisgICAgICAgIHdpdGggQloyRmlsZShzZWxmLmZpbGVuYW1lKSBhcyBiejJmOgogICAgICAgICAgICAgYnoyZi5yZWFkbGluZXMoKQotICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhTdG9wSXRlcmF0aW9uKToKLSAgICAgICAgICAgICAgICBuZXh0KGJ6MmYpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTdG9wSXRlcmF0aW9uLCBuZXh0LCBiejJmKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiejJmLnJlYWRsaW5lcygpLCBbXSkKIAogICAgIGRlZiB0ZXN0TXVsdGlTdHJlYW1PcmRlcmluZyhzZWxmKToKQEAgLTU5NCw2ICs1ODUsMjAgQEAKICAgICAgICAgICAgICAgICBiejJmLnNlZWsoLTE1MCwgMSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ6MmYucmVhZCgpLCBzZWxmLlRFWFRbNTAwLTE1MDpdKQogCisgICAgZGVmIHRlc3RfcmVhZF90cnVuY2F0ZWQoc2VsZik6CisgICAgICAgICMgRHJvcCB0aGUgZW9zX21hZ2ljIGZpZWxkICg2IGJ5dGVzKSBhbmQgQ1JDICg0IGJ5dGVzKS4KKyAgICAgICAgdHJ1bmNhdGVkID0gc2VsZi5EQVRBWzotMTBdCisgICAgICAgIHdpdGggQloyRmlsZShCeXRlc0lPKHRydW5jYXRlZCkpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFT0ZFcnJvciwgZi5yZWFkKQorICAgICAgICB3aXRoIEJaMkZpbGUoQnl0ZXNJTyh0cnVuY2F0ZWQpKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQobGVuKHNlbGYuVEVYVCkpLCBzZWxmLlRFWFQpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFT0ZFcnJvciwgZi5yZWFkLCAxKQorICAgICAgICAjIEluY29tcGxldGUgNC1ieXRlIGZpbGUgaGVhZGVyLCBhbmQgYmxvY2sgaGVhZGVyIG9mIGF0IGxlYXN0IDE0NiBiaXRzLgorICAgICAgICBmb3IgaSBpbiByYW5nZSgyMik6CisgICAgICAgICAgICB3aXRoIEJaMkZpbGUoQnl0ZXNJTyh0cnVuY2F0ZWRbOmldKSkgYXMgZjoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFT0ZFcnJvciwgZi5yZWFkLCAxKQorCisKIGNsYXNzIEJaMkNvbXByZXNzb3JUZXN0KEJhc2VUZXN0KToKICAgICBkZWYgdGVzdENvbXByZXNzKHNlbGYpOgogICAgICAgICBiejJjID0gQloyQ29tcHJlc3NvcigpCkBAIC02MzksOCArNjQ0LDkgQEAKICAgICAgICAgICAgIGRhdGEgPSBOb25lCiAKICAgICBkZWYgdGVzdFBpY2tsZShzZWxmKToKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgotICAgICAgICAgICAgcGlja2xlLmR1bXBzKEJaMkNvbXByZXNzb3IoKSkKKyAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICAgICAgcGlja2xlLmR1bXBzKEJaMkNvbXByZXNzb3IoKSwgcHJvdG8pCiAKIAogY2xhc3MgQloyRGVjb21wcmVzc29yVGVzdChCYXNlVGVzdCk6CkBAIC02OTUsOCArNzAxLDkgQEAKICAgICAgICAgICAgIGRlY29tcHJlc3NlZCA9IE5vbmUKIAogICAgIGRlZiB0ZXN0UGlja2xlKHNlbGYpOgotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6Ci0gICAgICAgICAgICBwaWNrbGUuZHVtcHMoQloyRGVjb21wcmVzc29yKCkpCisgICAgICAgIGZvciBwcm90byBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgICAgIHBpY2tsZS5kdW1wcyhCWjJEZWNvbXByZXNzb3IoKSwgcHJvdG8pCiAKIAogY2xhc3MgQ29tcHJlc3NEZWNvbXByZXNzVGVzdChCYXNlVGVzdCk6CkBAIC03NDAsOTcgKzc0NywxMjIgQEAKIAogCiBjbGFzcyBPcGVuVGVzdChCYXNlVGVzdCk6CisgICAgIlRlc3QgdGhlIG9wZW4gZnVuY3Rpb24uIgorCisgICAgZGVmIG9wZW4oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgcmV0dXJuIGJ6Mi5vcGVuKCphcmdzLCAqKmt3YXJncykKKwogICAgIGRlZiB0ZXN0X2JpbmFyeV9tb2RlcyhzZWxmKToKLSAgICAgICAgd2l0aCBiejIub3BlbihzZWxmLmZpbGVuYW1lLCAid2IiKSBhcyBmOgotICAgICAgICAgICAgZi53cml0ZShzZWxmLlRFWFQpCi0gICAgICAgIHdpdGggb3BlbihzZWxmLmZpbGVuYW1lLCAicmIiKSBhcyBmOgotICAgICAgICAgICAgZmlsZV9kYXRhID0gYnoyLmRlY29tcHJlc3MoZi5yZWFkKCkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVfZGF0YSwgc2VsZi5URVhUKQotICAgICAgICB3aXRoIGJ6Mi5vcGVuKHNlbGYuZmlsZW5hbWUsICJyYiIpIGFzIGY6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCBzZWxmLlRFWFQpCi0gICAgICAgIHdpdGggYnoyLm9wZW4oc2VsZi5maWxlbmFtZSwgImFiIikgYXMgZjoKLSAgICAgICAgICAgIGYud3JpdGUoc2VsZi5URVhUKQotICAgICAgICB3aXRoIG9wZW4oc2VsZi5maWxlbmFtZSwgInJiIikgYXMgZjoKLSAgICAgICAgICAgIGZpbGVfZGF0YSA9IGJ6Mi5kZWNvbXByZXNzKGYucmVhZCgpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlX2RhdGEsIHNlbGYuVEVYVCAqIDIpCisgICAgICAgIGZvciBtb2RlIGluICgid2IiLCAieGIiKToKKyAgICAgICAgICAgIGlmIG1vZGUgPT0gInhiIjoKKyAgICAgICAgICAgICAgICB1bmxpbmsoc2VsZi5maWxlbmFtZSkKKyAgICAgICAgICAgIHdpdGggc2VsZi5vcGVuKHNlbGYuZmlsZW5hbWUsIG1vZGUpIGFzIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZShzZWxmLlRFWFQpCisgICAgICAgICAgICB3aXRoIG9wZW4oc2VsZi5maWxlbmFtZSwgInJiIikgYXMgZjoKKyAgICAgICAgICAgICAgICBmaWxlX2RhdGEgPSBzZWxmLmRlY29tcHJlc3MoZi5yZWFkKCkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlX2RhdGEsIHNlbGYuVEVYVCkKKyAgICAgICAgICAgIHdpdGggc2VsZi5vcGVuKHNlbGYuZmlsZW5hbWUsICJyYiIpIGFzIGY6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgc2VsZi5URVhUKQorICAgICAgICAgICAgd2l0aCBzZWxmLm9wZW4oc2VsZi5maWxlbmFtZSwgImFiIikgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKHNlbGYuVEVYVCkKKyAgICAgICAgICAgIHdpdGggb3BlbihzZWxmLmZpbGVuYW1lLCAicmIiKSBhcyBmOgorICAgICAgICAgICAgICAgIGZpbGVfZGF0YSA9IHNlbGYuZGVjb21wcmVzcyhmLnJlYWQoKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVfZGF0YSwgc2VsZi5URVhUICogMikKIAogICAgIGRlZiB0ZXN0X2ltcGxpY2l0X2JpbmFyeV9tb2RlcyhzZWxmKToKICAgICAgICAgIyBUZXN0IGltcGxpY2l0IGJpbmFyeSBtb2RlcyAobm8gImIiIG9yICJ0IiBpbiBtb2RlIHN0cmluZykuCi0gICAgICAgIHdpdGggYnoyLm9wZW4oc2VsZi5maWxlbmFtZSwgInciKSBhcyBmOgotICAgICAgICAgICAgZi53cml0ZShzZWxmLlRFWFQpCi0gICAgICAgIHdpdGggb3BlbihzZWxmLmZpbGVuYW1lLCAicmIiKSBhcyBmOgotICAgICAgICAgICAgZmlsZV9kYXRhID0gYnoyLmRlY29tcHJlc3MoZi5yZWFkKCkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVfZGF0YSwgc2VsZi5URVhUKQotICAgICAgICB3aXRoIGJ6Mi5vcGVuKHNlbGYuZmlsZW5hbWUsICJyIikgYXMgZjoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIHNlbGYuVEVYVCkKLSAgICAgICAgd2l0aCBiejIub3BlbihzZWxmLmZpbGVuYW1lLCAiYSIpIGFzIGY6Ci0gICAgICAgICAgICBmLndyaXRlKHNlbGYuVEVYVCkKLSAgICAgICAgd2l0aCBvcGVuKHNlbGYuZmlsZW5hbWUsICJyYiIpIGFzIGY6Ci0gICAgICAgICAgICBmaWxlX2RhdGEgPSBiejIuZGVjb21wcmVzcyhmLnJlYWQoKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZV9kYXRhLCBzZWxmLlRFWFQgKiAyKQorICAgICAgICBmb3IgbW9kZSBpbiAoInciLCAieCIpOgorICAgICAgICAgICAgaWYgbW9kZSA9PSAieCI6CisgICAgICAgICAgICAgICAgdW5saW5rKHNlbGYuZmlsZW5hbWUpCisgICAgICAgICAgICB3aXRoIHNlbGYub3BlbihzZWxmLmZpbGVuYW1lLCBtb2RlKSBhcyBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUoc2VsZi5URVhUKQorICAgICAgICAgICAgd2l0aCBvcGVuKHNlbGYuZmlsZW5hbWUsICJyYiIpIGFzIGY6CisgICAgICAgICAgICAgICAgZmlsZV9kYXRhID0gc2VsZi5kZWNvbXByZXNzKGYucmVhZCgpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZV9kYXRhLCBzZWxmLlRFWFQpCisgICAgICAgICAgICB3aXRoIHNlbGYub3BlbihzZWxmLmZpbGVuYW1lLCAiciIpIGFzIGY6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgc2VsZi5URVhUKQorICAgICAgICAgICAgd2l0aCBzZWxmLm9wZW4oc2VsZi5maWxlbmFtZSwgImEiKSBhcyBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUoc2VsZi5URVhUKQorICAgICAgICAgICAgd2l0aCBvcGVuKHNlbGYuZmlsZW5hbWUsICJyYiIpIGFzIGY6CisgICAgICAgICAgICAgICAgZmlsZV9kYXRhID0gc2VsZi5kZWNvbXByZXNzKGYucmVhZCgpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZV9kYXRhLCBzZWxmLlRFWFQgKiAyKQogCiAgICAgZGVmIHRlc3RfdGV4dF9tb2RlcyhzZWxmKToKICAgICAgICAgdGV4dCA9IHNlbGYuVEVYVC5kZWNvZGUoImFzY2lpIikKICAgICAgICAgdGV4dF9uYXRpdmVfZW9sID0gdGV4dC5yZXBsYWNlKCJcbiIsIG9zLmxpbmVzZXApCi0gICAgICAgIHdpdGggYnoyLm9wZW4oc2VsZi5maWxlbmFtZSwgInd0IikgYXMgZjoKLSAgICAgICAgICAgIGYud3JpdGUodGV4dCkKLSAgICAgICAgd2l0aCBvcGVuKHNlbGYuZmlsZW5hbWUsICJyYiIpIGFzIGY6Ci0gICAgICAgICAgICBmaWxlX2RhdGEgPSBiejIuZGVjb21wcmVzcyhmLnJlYWQoKSkuZGVjb2RlKCJhc2NpaSIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVfZGF0YSwgdGV4dF9uYXRpdmVfZW9sKQotICAgICAgICB3aXRoIGJ6Mi5vcGVuKHNlbGYuZmlsZW5hbWUsICJydCIpIGFzIGY6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCB0ZXh0KQotICAgICAgICB3aXRoIGJ6Mi5vcGVuKHNlbGYuZmlsZW5hbWUsICJhdCIpIGFzIGY6Ci0gICAgICAgICAgICBmLndyaXRlKHRleHQpCi0gICAgICAgIHdpdGggb3BlbihzZWxmLmZpbGVuYW1lLCAicmIiKSBhcyBmOgotICAgICAgICAgICAgZmlsZV9kYXRhID0gYnoyLmRlY29tcHJlc3MoZi5yZWFkKCkpLmRlY29kZSgiYXNjaWkiKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlX2RhdGEsIHRleHRfbmF0aXZlX2VvbCAqIDIpCisgICAgICAgIGZvciBtb2RlIGluICgid3QiLCAieHQiKToKKyAgICAgICAgICAgIGlmIG1vZGUgPT0gInh0IjoKKyAgICAgICAgICAgICAgICB1bmxpbmsoc2VsZi5maWxlbmFtZSkKKyAgICAgICAgICAgIHdpdGggc2VsZi5vcGVuKHNlbGYuZmlsZW5hbWUsIG1vZGUpIGFzIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZSh0ZXh0KQorICAgICAgICAgICAgd2l0aCBvcGVuKHNlbGYuZmlsZW5hbWUsICJyYiIpIGFzIGY6CisgICAgICAgICAgICAgICAgZmlsZV9kYXRhID0gc2VsZi5kZWNvbXByZXNzKGYucmVhZCgpKS5kZWNvZGUoImFzY2lpIikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVfZGF0YSwgdGV4dF9uYXRpdmVfZW9sKQorICAgICAgICAgICAgd2l0aCBzZWxmLm9wZW4oc2VsZi5maWxlbmFtZSwgInJ0IikgYXMgZjoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCB0ZXh0KQorICAgICAgICAgICAgd2l0aCBzZWxmLm9wZW4oc2VsZi5maWxlbmFtZSwgImF0IikgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKHRleHQpCisgICAgICAgICAgICB3aXRoIG9wZW4oc2VsZi5maWxlbmFtZSwgInJiIikgYXMgZjoKKyAgICAgICAgICAgICAgICBmaWxlX2RhdGEgPSBzZWxmLmRlY29tcHJlc3MoZi5yZWFkKCkpLmRlY29kZSgiYXNjaWkiKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZV9kYXRhLCB0ZXh0X25hdGl2ZV9lb2wgKiAyKQorCisgICAgZGVmIHRlc3RfeF9tb2RlKHNlbGYpOgorICAgICAgICBmb3IgbW9kZSBpbiAoIngiLCAieGIiLCAieHQiKToKKyAgICAgICAgICAgIHVubGluayhzZWxmLmZpbGVuYW1lKQorICAgICAgICAgICAgd2l0aCBzZWxmLm9wZW4oc2VsZi5maWxlbmFtZSwgbW9kZSkgYXMgZjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEZpbGVFeGlzdHNFcnJvcik6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLm9wZW4oc2VsZi5maWxlbmFtZSwgbW9kZSkgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgcGFzcwogCiAgICAgZGVmIHRlc3RfZmlsZW9iaihzZWxmKToKLSAgICAgICAgd2l0aCBiejIub3BlbihCeXRlc0lPKHNlbGYuREFUQSksICJyIikgYXMgZjoKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oQnl0ZXNJTyhzZWxmLkRBVEEpLCAiciIpIGFzIGY6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCBzZWxmLlRFWFQpCi0gICAgICAgIHdpdGggYnoyLm9wZW4oQnl0ZXNJTyhzZWxmLkRBVEEpLCAicmIiKSBhcyBmOgorICAgICAgICB3aXRoIHNlbGYub3BlbihCeXRlc0lPKHNlbGYuREFUQSksICJyYiIpIGFzIGY6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCBzZWxmLlRFWFQpCiAgICAgICAgIHRleHQgPSBzZWxmLlRFWFQuZGVjb2RlKCJhc2NpaSIpCi0gICAgICAgIHdpdGggYnoyLm9wZW4oQnl0ZXNJTyhzZWxmLkRBVEEpLCAicnQiKSBhcyBmOgorICAgICAgICB3aXRoIHNlbGYub3BlbihCeXRlc0lPKHNlbGYuREFUQSksICJydCIpIGFzIGY6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCB0ZXh0KQogCiAgICAgZGVmIHRlc3RfYmFkX3BhcmFtcyhzZWxmKToKICAgICAgICAgIyBUZXN0IGludmFsaWQgcGFyYW1ldGVyIGNvbWJpbmF0aW9ucy4KLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKLSAgICAgICAgICAgIGJ6Mi5vcGVuKHNlbGYuZmlsZW5hbWUsICJ3YnQiKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgotICAgICAgICAgICAgYnoyLm9wZW4oc2VsZi5maWxlbmFtZSwgInJiIiwgZW5jb2Rpbmc9InV0Zi04IikKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKLSAgICAgICAgICAgIGJ6Mi5vcGVuKHNlbGYuZmlsZW5hbWUsICJyYiIsIGVycm9ycz0iaWdub3JlIikKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKLSAgICAgICAgICAgIGJ6Mi5vcGVuKHNlbGYuZmlsZW5hbWUsICJyYiIsIG5ld2xpbmU9IlxuIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vcGVuLCBzZWxmLmZpbGVuYW1lLCAid2J0IikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vcGVuLCBzZWxmLmZpbGVuYW1lLCAieGJ0IikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vcGVuLCBzZWxmLmZpbGVuYW1lLCAicmIiLCBlbmNvZGluZz0idXRmLTgiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm9wZW4sIHNlbGYuZmlsZW5hbWUsICJyYiIsIGVycm9ycz0iaWdub3JlIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vcGVuLCBzZWxmLmZpbGVuYW1lLCAicmIiLCBuZXdsaW5lPSJcbiIpCiAKICAgICBkZWYgdGVzdF9lbmNvZGluZyhzZWxmKToKICAgICAgICAgIyBUZXN0IG5vbi1kZWZhdWx0IGVuY29kaW5nLgogICAgICAgICB0ZXh0ID0gc2VsZi5URVhULmRlY29kZSgiYXNjaWkiKQogICAgICAgICB0ZXh0X25hdGl2ZV9lb2wgPSB0ZXh0LnJlcGxhY2UoIlxuIiwgb3MubGluZXNlcCkKLSAgICAgICAgd2l0aCBiejIub3BlbihzZWxmLmZpbGVuYW1lLCAid3QiLCBlbmNvZGluZz0idXRmLTE2LWxlIikgYXMgZjoKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oc2VsZi5maWxlbmFtZSwgInd0IiwgZW5jb2Rpbmc9InV0Zi0xNi1sZSIpIGFzIGY6CiAgICAgICAgICAgICBmLndyaXRlKHRleHQpCiAgICAgICAgIHdpdGggb3BlbihzZWxmLmZpbGVuYW1lLCAicmIiKSBhcyBmOgotICAgICAgICAgICAgZmlsZV9kYXRhID0gYnoyLmRlY29tcHJlc3MoZi5yZWFkKCkpLmRlY29kZSgidXRmLTE2LWxlIikKKyAgICAgICAgICAgIGZpbGVfZGF0YSA9IHNlbGYuZGVjb21wcmVzcyhmLnJlYWQoKSkuZGVjb2RlKCJ1dGYtMTYtbGUiKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlX2RhdGEsIHRleHRfbmF0aXZlX2VvbCkKLSAgICAgICAgd2l0aCBiejIub3BlbihzZWxmLmZpbGVuYW1lLCAicnQiLCBlbmNvZGluZz0idXRmLTE2LWxlIikgYXMgZjoKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oc2VsZi5maWxlbmFtZSwgInJ0IiwgZW5jb2Rpbmc9InV0Zi0xNi1sZSIpIGFzIGY6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCB0ZXh0KQogCiAgICAgZGVmIHRlc3RfZW5jb2RpbmdfZXJyb3JfaGFuZGxlcihzZWxmKToKICAgICAgICAgIyBUZXN0IHdpdGggbm9uLWRlZmF1bHQgZW5jb2RpbmcgZXJyb3IgaGFuZGxlci4KLSAgICAgICAgd2l0aCBiejIub3BlbihzZWxmLmZpbGVuYW1lLCAid2IiKSBhcyBmOgorICAgICAgICB3aXRoIHNlbGYub3BlbihzZWxmLmZpbGVuYW1lLCAid2IiKSBhcyBmOgogICAgICAgICAgICAgZi53cml0ZShiImZvb1x4ZmZiYXIiKQotICAgICAgICB3aXRoIGJ6Mi5vcGVuKHNlbGYuZmlsZW5hbWUsICJydCIsIGVuY29kaW5nPSJhc2NpaSIsIGVycm9ycz0iaWdub3JlIikgXAorICAgICAgICB3aXRoIHNlbGYub3BlbihzZWxmLmZpbGVuYW1lLCAicnQiLCBlbmNvZGluZz0iYXNjaWkiLCBlcnJvcnM9Imlnbm9yZSIpIFwKICAgICAgICAgICAgICAgICBhcyBmOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgImZvb2JhciIpCiAKICAgICBkZWYgdGVzdF9uZXdsaW5lKHNlbGYpOgogICAgICAgICAjIFRlc3Qgd2l0aCBleHBsaWNpdCBuZXdsaW5lICh1bml2ZXJzYWwgbmV3bGluZSBtb2RlIGRpc2FibGVkKS4KICAgICAgICAgdGV4dCA9IHNlbGYuVEVYVC5kZWNvZGUoImFzY2lpIikKLSAgICAgICAgd2l0aCBiejIub3BlbihzZWxmLmZpbGVuYW1lLCAid3QiLCBuZXdsaW5lPSJcbiIpIGFzIGY6CisgICAgICAgIHdpdGggc2VsZi5vcGVuKHNlbGYuZmlsZW5hbWUsICJ3dCIsIG5ld2xpbmU9IlxuIikgYXMgZjoKICAgICAgICAgICAgIGYud3JpdGUodGV4dCkKLSAgICAgICAgd2l0aCBiejIub3BlbihzZWxmLmZpbGVuYW1lLCAicnQiLCBuZXdsaW5lPSJcciIpIGFzIGY6CisgICAgICAgIHdpdGggc2VsZi5vcGVuKHNlbGYuZmlsZW5hbWUsICJydCIsIG5ld2xpbmU9IlxyIikgYXMgZjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkbGluZXMoKSwgW3RleHRdKQogCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY2FsZW5kYXIucHkgYi9MaWIvdGVzdC90ZXN0X2NhbGVuZGFyLnB5CmluZGV4IGY2ODBiNTIuLjkxOTM4NTcgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY2FsZW5kYXIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jYWxlbmRhci5weQpAQCAtMiwxMyArMiwxNCBAQAogaW1wb3J0IHVuaXR0ZXN0CiAKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAotZnJvbSB0ZXN0LnNjcmlwdF9oZWxwZXIgaW1wb3J0IGFzc2VydF9weXRob25fb2sKK2Zyb20gdGVzdC5zY3JpcHRfaGVscGVyIGltcG9ydCBhc3NlcnRfcHl0aG9uX29rLCBhc3NlcnRfcHl0aG9uX2ZhaWx1cmUKIGltcG9ydCB0aW1lCiBpbXBvcnQgbG9jYWxlCiBpbXBvcnQgc3lzCiBpbXBvcnQgZGF0ZXRpbWUKK2ltcG9ydCBvcwogCi1yZXN1bHRfMjAwNF8wMV90ZXh0ID0gIiIiCityZXN1bHRfMjAwNF8wMV90ZXh0ID0gIiIiXAogICAgIEphbnVhcnkgMjAwNAogTW8gVHUgV2UgVGggRnIgU2EgU3UKICAgICAgICAgICAxICAyICAzICA0CkBAIC0xOCw3ICsxOSw3IEBACiAyNiAyNyAyOCAyOSAzMCAzMQogIiIiCiAKLXJlc3VsdF8yMDA0X3RleHQgPSAiIiIKK3Jlc3VsdF8yMDA0X3RleHQgPSAiIiJcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAwNAogCiAgICAgICBKYW51YXJ5ICAgICAgICAgICAgICAgICAgIEZlYnJ1YXJ5ICAgICAgICAgICAgICAgICAgIE1hcmNoCkBAIC01Niw3ICs1Nyw3IEBACiAyNSAyNiAyNyAyOCAyOSAzMCAzMSAgICAgIDI5IDMwICAgICAgICAgICAgICAgICAgICAgMjcgMjggMjkgMzAgMzEKICIiIgogCi1yZXN1bHRfMjAwNF9odG1sID0gIiIiCityZXN1bHRfMjAwNF9odG1sID0gIiIiXAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iJShlKXMiPz4KIDwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFN0cmljdC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS1zdHJpY3QuZHRkIj4KIDxodG1sPgpAQCAtMzI3LDggKzMyOCw4IEBACiAgICAgZGVmIGNoZWNrX2h0bWxjYWxlbmRhcl9lbmNvZGluZyhzZWxmLCByZXEsIHJlcyk6CiAgICAgICAgIGNhbCA9IGNhbGVuZGFyLkhUTUxDYWxlbmRhcigpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAgICAgICBjYWwuZm9ybWF0eWVhcnBhZ2UoMjAwNCwgZW5jb2Rpbmc9cmVxKS5zdHJpcChiJyBcdFxuJyksCi0gICAgICAgICAgICAocmVzdWx0XzIwMDRfaHRtbCAlIHsnZSc6IHJlc30pLnN0cmlwKCcgXHRcbicpLmVuY29kZShyZXMpCisgICAgICAgICAgICBjYWwuZm9ybWF0eWVhcnBhZ2UoMjAwNCwgZW5jb2Rpbmc9cmVxKSwKKyAgICAgICAgICAgIChyZXN1bHRfMjAwNF9odG1sICUgeydlJzogcmVzfSkuZW5jb2RlKHJlcykKICAgICAgICAgKQogCiAgICAgZGVmIHRlc3Rfb3V0cHV0KHNlbGYpOgpAQCAtMzM5LDggKzM0MCw4IEBACiAKICAgICBkZWYgdGVzdF9vdXRwdXRfdGV4dGNhbGVuZGFyKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAotICAgICAgICAgICAgY2FsZW5kYXIuVGV4dENhbGVuZGFyKCkuZm9ybWF0eWVhcigyMDA0KS5zdHJpcCgpLAotICAgICAgICAgICAgcmVzdWx0XzIwMDRfdGV4dC5zdHJpcCgpCisgICAgICAgICAgICBjYWxlbmRhci5UZXh0Q2FsZW5kYXIoKS5mb3JtYXR5ZWFyKDIwMDQpLAorICAgICAgICAgICAgcmVzdWx0XzIwMDRfdGV4dAogICAgICAgICApCiAKICAgICBkZWYgdGVzdF9vdXRwdXRfaHRtbGNhbGVuZGFyX2VuY29kaW5nX2FzY2lpKHNlbGYpOgpAQCAtMzgzLDggKzM4NCw4IEBACiAKICAgICBkZWYgdGVzdF9mb3JtYXRtb250aChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgICAgICAgIGNhbGVuZGFyLlRleHRDYWxlbmRhcigpLmZvcm1hdG1vbnRoKDIwMDQsIDEpLnN0cmlwKCksCi0gICAgICAgICAgICByZXN1bHRfMjAwNF8wMV90ZXh0LnN0cmlwKCkKKyAgICAgICAgICAgIGNhbGVuZGFyLlRleHRDYWxlbmRhcigpLmZvcm1hdG1vbnRoKDIwMDQsIDEpLAorICAgICAgICAgICAgcmVzdWx0XzIwMDRfMDFfdGV4dAogICAgICAgICApCiAKICAgICBkZWYgdGVzdF9mb3JtYXRtb250aG5hbWVfd2l0aF95ZWFyKHNlbGYpOgpAQCAtNjkyLDIzICs2OTMsMTI3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FsZW5kYXIubGVhcGRheXMoMTk5NywyMDIwKSwgNSkKIAogCi1jbGFzcyBDb25zb2xlT3V0cHV0VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGRlZiB0ZXN0X291dHB1dHNfYnl0ZXMoc2VsZik6Ci0gICAgICAgIChyZXR1cm5fY29kZSwgc3Rkb3V0LCBzdGRlcnIpID0gYXNzZXJ0X3B5dGhvbl9vaygnLW0nLCAnY2FsZW5kYXInLCAnLS10eXBlPWh0bWwnLCAnMjAxMCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0Wzo2XSwgYic8P3htbCAnKQorZGVmIGNvbnYocyk6CisgICAgcmV0dXJuIHMucmVwbGFjZSgnXG4nLCBvcy5saW5lc2VwKS5lbmNvZGUoKQogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoCi0gICAgICAgIE91dHB1dFRlc3RDYXNlLAotICAgICAgICBDYWxlbmRhclRlc3RDYXNlLAotICAgICAgICBNb25kYXlUZXN0Q2FzZSwKLSAgICAgICAgU3VuZGF5VGVzdENhc2UsCi0gICAgICAgIFRpbWVnbVRlc3RDYXNlLAotICAgICAgICBNb250aFJhbmdlVGVzdENhc2UsCi0gICAgICAgIExlYXBkYXlzVGVzdENhc2UsCi0gICAgICAgIENvbnNvbGVPdXRwdXRUZXN0Q2FzZQotICAgICkKK2NsYXNzIENvbW1hbmRMaW5lVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBydW5fb2soc2VsZiwgKmFyZ3MpOgorICAgICAgICByZXR1cm4gYXNzZXJ0X3B5dGhvbl9vaygnLW0nLCAnY2FsZW5kYXInLCAqYXJncylbMV0KKworICAgIGRlZiBhc3NlcnRGYWlsdXJlKHNlbGYsICphcmdzKToKKyAgICAgICAgcmMsIHN0ZG91dCwgc3RkZXJyID0gYXNzZXJ0X3B5dGhvbl9mYWlsdXJlKCctbScsICdjYWxlbmRhcicsICphcmdzKQorICAgICAgICBzZWxmLmFzc2VydEluKGInVXNhZ2U6Jywgc3RkZXJyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJjLCAyKQorCisgICAgZGVmIHRlc3RfaGVscChzZWxmKToKKyAgICAgICAgc3Rkb3V0ID0gc2VsZi5ydW5fb2soJy1oJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbihiJ1VzYWdlOicsIHN0ZG91dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihiJ2NhbGVuZGFyLnB5Jywgc3Rkb3V0KQorICAgICAgICBzZWxmLmFzc2VydEluKGInLS1oZWxwJywgc3Rkb3V0KQorCisgICAgZGVmIHRlc3RfaWxsZWdhbF9hcmd1bWVudHMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RmFpbHVyZSgnLXonKQorICAgICAgICAjc2VsZi5hc3NlcnRGYWlsdXJlKCdzcGFtJykKKyAgICAgICAgI3NlbGYuYXNzZXJ0RmFpbHVyZSgnMjAwNCcsICdzcGFtJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWlsdXJlKCctdCcsICdodG1sJywgJzIwMDQnLCAnMScpCisKKyAgICBkZWYgdGVzdF9vdXRwdXRfY3VycmVudF95ZWFyKHNlbGYpOgorICAgICAgICBzdGRvdXQgPSBzZWxmLnJ1bl9vaygpCisgICAgICAgIHllYXIgPSBkYXRldGltZS5kYXRldGltZS5ub3coKS55ZWFyCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oKCcgJXMnICUgeWVhcikuZW5jb2RlKCksIHN0ZG91dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihiJ0phbnVhcnknLCBzdGRvdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oYidNbyBUdSBXZSBUaCBGciBTYSBTdScsIHN0ZG91dCkKKworICAgIGRlZiB0ZXN0X291dHB1dF95ZWFyKHNlbGYpOgorICAgICAgICBzdGRvdXQgPSBzZWxmLnJ1bl9vaygnMjAwNCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LCBjb252KHJlc3VsdF8yMDA0X3RleHQpKQorCisgICAgZGVmIHRlc3Rfb3V0cHV0X21vbnRoKHNlbGYpOgorICAgICAgICBzdGRvdXQgPSBzZWxmLnJ1bl9vaygnMjAwNCcsICcxJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQsIGNvbnYocmVzdWx0XzIwMDRfMDFfdGV4dCkpCisKKyAgICBkZWYgdGVzdF9vcHRpb25fZW5jb2Rpbmcoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RmFpbHVyZSgnLWUnKQorICAgICAgICBzZWxmLmFzc2VydEZhaWx1cmUoJy0tZW5jb2RpbmcnKQorICAgICAgICBzdGRvdXQgPSBzZWxmLnJ1bl9vaygnLS1lbmNvZGluZycsICd1dGYtMTYtbGUnLCAnMjAwNCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LCByZXN1bHRfMjAwNF90ZXh0LmVuY29kZSgndXRmLTE2LWxlJykpCisKKyAgICBkZWYgdGVzdF9vcHRpb25fbG9jYWxlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEZhaWx1cmUoJy1MJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWlsdXJlKCctLWxvY2FsZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFpbHVyZSgnLUwnLCAnZW4nKQorICAgICAgICBsYW5nLCBlbmMgPSBsb2NhbGUuZ2V0ZGVmYXVsdGxvY2FsZSgpCisgICAgICAgIGxhbmcgPSBsYW5nIG9yICdDJworICAgICAgICBlbmMgPSBlbmMgb3IgJ1VURi04JworICAgICAgICB0cnk6CisgICAgICAgICAgICBvbGRsb2NhbGUgPSBsb2NhbGUuZ2V0bG9jYWxlKGxvY2FsZS5MQ19USU1FKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGxvY2FsZS5zZXRsb2NhbGUobG9jYWxlLkxDX1RJTUUsIChsYW5nLCBlbmMpKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBsb2NhbGUuc2V0bG9jYWxlKGxvY2FsZS5MQ19USU1FLCBvbGRsb2NhbGUpCisgICAgICAgIGV4Y2VwdCAobG9jYWxlLkVycm9yLCBWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoJ2Nhbm5vdCBzZXQgdGhlIHN5c3RlbSBkZWZhdWx0IGxvY2FsZScpCisgICAgICAgIHN0ZG91dCA9IHNlbGYucnVuX29rKCctLWxvY2FsZScsIGxhbmcsICctLWVuY29kaW5nJywgZW5jLCAnMjAwNCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJzIwMDQnLmVuY29kZShlbmMpLCBzdGRvdXQpCisKKyAgICBkZWYgdGVzdF9vcHRpb25fd2lkdGgoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RmFpbHVyZSgnLXcnKQorICAgICAgICBzZWxmLmFzc2VydEZhaWx1cmUoJy0td2lkdGgnKQorICAgICAgICBzZWxmLmFzc2VydEZhaWx1cmUoJy13JywgJ3NwYW0nKQorICAgICAgICBzdGRvdXQgPSBzZWxmLnJ1bl9vaygnLS13aWR0aCcsICczJywgJzIwMDQnKQorICAgICAgICBzZWxmLmFzc2VydEluKGInTW9uIFR1ZSBXZWQgVGh1IEZyaSBTYXQgU3VuJywgc3Rkb3V0KQorCisgICAgZGVmIHRlc3Rfb3B0aW9uX2xpbmVzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEZhaWx1cmUoJy1sJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWlsdXJlKCctLWxpbmVzJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWlsdXJlKCctbCcsICdzcGFtJykKKyAgICAgICAgc3Rkb3V0ID0gc2VsZi5ydW5fb2soJy0tbGluZXMnLCAnMicsICcyMDA0JykKKyAgICAgICAgc2VsZi5hc3NlcnRJbihjb252KCdEZWNlbWJlclxuXG5NbyBUdSBXZScpLCBzdGRvdXQpCisKKyAgICBkZWYgdGVzdF9vcHRpb25fc3BhY2luZyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRGYWlsdXJlKCctcycpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFpbHVyZSgnLS1zcGFjaW5nJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWlsdXJlKCctcycsICdzcGFtJykKKyAgICAgICAgc3Rkb3V0ID0gc2VsZi5ydW5fb2soJy0tc3BhY2luZycsICc4JywgJzIwMDQnKQorICAgICAgICBzZWxmLmFzc2VydEluKGInU3UgICAgICAgIE1vJywgc3Rkb3V0KQorCisgICAgZGVmIHRlc3Rfb3B0aW9uX21vbnRocyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRGYWlsdXJlKCctbScpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFpbHVyZSgnLS1tb250aCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFpbHVyZSgnLW0nLCAnc3BhbScpCisgICAgICAgIHN0ZG91dCA9IHNlbGYucnVuX29rKCctLW1vbnRocycsICcxJywgJzIwMDQnKQorICAgICAgICBzZWxmLmFzc2VydEluKGNvbnYoJ1xuTW8gVHUgV2UgVGggRnIgU2EgU3VcbicpLCBzdGRvdXQpCisKKyAgICBkZWYgdGVzdF9vcHRpb25fdHlwZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRGYWlsdXJlKCctdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFpbHVyZSgnLS10eXBlJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWlsdXJlKCctdCcsICdzcGFtJykKKyAgICAgICAgc3Rkb3V0ID0gc2VsZi5ydW5fb2soJy0tdHlwZScsICd0ZXh0JywgJzIwMDQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dCwgY29udihyZXN1bHRfMjAwNF90ZXh0KSkKKyAgICAgICAgc3Rkb3V0ID0gc2VsZi5ydW5fb2soJy0tdHlwZScsICdodG1sJywgJzIwMDQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dFs6Nl0sIGInPD94bWwgJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbihiJzx0aXRsZT5DYWxlbmRhciBmb3IgMjAwNDwvdGl0bGU+Jywgc3Rkb3V0KQorCisgICAgZGVmIHRlc3RfaHRtbF9vdXRwdXRfY3VycmVudF95ZWFyKHNlbGYpOgorICAgICAgICBzdGRvdXQgPSBzZWxmLnJ1bl9vaygnLS10eXBlJywgJ2h0bWwnKQorICAgICAgICB5ZWFyID0gZGF0ZXRpbWUuZGF0ZXRpbWUubm93KCkueWVhcgorICAgICAgICBzZWxmLmFzc2VydEluKCgnPHRpdGxlPkNhbGVuZGFyIGZvciAlczwvdGl0bGU+JyAlIHllYXIpLmVuY29kZSgpLAorICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihiJzx0cj48dGggY29sc3Bhbj0iNyIgY2xhc3M9Im1vbnRoIj5KYW51YXJ5PC90aD48L3RyPicsCisgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0KQorCisgICAgZGVmIHRlc3RfaHRtbF9vdXRwdXRfeWVhcl9lbmNvZGluZyhzZWxmKToKKyAgICAgICAgc3Rkb3V0ID0gc2VsZi5ydW5fb2soJy10JywgJ2h0bWwnLCAnLS1lbmNvZGluZycsICdhc2NpaScsICcyMDA0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgKHJlc3VsdF8yMDA0X2h0bWwgJSB7J2UnOiAnYXNjaWknfSkuZW5jb2RlKCdhc2NpaScpKQorCisgICAgZGVmIHRlc3RfaHRtbF9vdXRwdXRfeWVhcl9jc3Moc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RmFpbHVyZSgnLXQnLCAnaHRtbCcsICctYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFpbHVyZSgnLXQnLCAnaHRtbCcsICctLWNzcycpCisgICAgICAgIHN0ZG91dCA9IHNlbGYucnVuX29rKCctdCcsICdodG1sJywgJy0tY3NzJywgJ2N1c3RvbS5jc3MnLCAnMjAwNCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oYic8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiAnCisgICAgICAgICAgICAgICAgICAgICAgYidocmVmPSJjdXN0b20uY3NzIiAvPicsIHN0ZG91dCkKIAogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2NhcGkucHkgYi9MaWIvdGVzdC90ZXN0X2NhcGkucHkKaW5kZXggNTBjNGJiYS4uYTBjMWU3OSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jYXBpLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY2FwaS5weQpAQCAtOSw2ICs5LDcgQEAKIGltcG9ydCB0aW1lCiBpbXBvcnQgdW5pdHRlc3QKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IE1JU1NJTkdfQ19ET0NTVFJJTkdTCiB0cnk6CiAgICAgaW1wb3J0IF9wb3NpeHN1YnByb2Nlc3MKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKQEAgLTQ0LDcgKzQ1LDcgQEAKIAogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZGluZywgJ1RocmVhZGluZyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCiAgICAgZGVmIHRlc3Rfbm9fRmF0YWxFcnJvcl9pbmZpbml0ZV9sb29wKHNlbGYpOgotICAgICAgICB3aXRoIHN1cHBvcnQuc3VwcHJlc3NfY3Jhc2hfcG9wdXAoKToKKyAgICAgICAgd2l0aCBzdXBwb3J0LlN1cHByZXNzQ3Jhc2hSZXBvcnQoKToKICAgICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW1wb3J0IF90ZXN0Y2FwaTsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ190ZXN0Y2FwaS5jcmFzaF9ub19jdXJyZW50X3RocmVhZCgpJ10sCkBAIC0xMTAsNiArMTExLDQ2IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgX3Bvc2l4c3VicHJvY2Vzcy5mb3JrX2V4ZWMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFooKSxbYicxJ10sMyxbMSwgMl0sNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3KQogCisgICAgQHVuaXR0ZXN0LnNraXBJZihNSVNTSU5HX0NfRE9DU1RSSU5HUywKKyAgICAgICAgICAgICAgICAgICAgICJTaWduYXR1cmUgaW5mb3JtYXRpb24gZm9yIGJ1aWx0aW5zIHJlcXVpcmVzIGRvY3N0cmluZ3MiKQorICAgIGRlZiB0ZXN0X2RvY3N0cmluZ19zaWduYXR1cmVfcGFyc2luZyhzZWxmKToKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF90ZXN0Y2FwaS5ub19kb2NzdHJpbmcuX19kb2NfXywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfdGVzdGNhcGkubm9fZG9jc3RyaW5nLl9fdGV4dF9zaWduYXR1cmVfXywgTm9uZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF90ZXN0Y2FwaS5kb2NzdHJpbmdfZW1wdHkuX19kb2NfXywgIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX3Rlc3RjYXBpLmRvY3N0cmluZ19lbXB0eS5fX3RleHRfc2lnbmF0dXJlX18sIE5vbmUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfdGVzdGNhcGkuZG9jc3RyaW5nX25vX3NpZ25hdHVyZS5fX2RvY19fLAorICAgICAgICAgICAgIlRoaXMgZG9jc3RyaW5nIGhhcyBubyBzaWduYXR1cmUuIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfdGVzdGNhcGkuZG9jc3RyaW5nX25vX3NpZ25hdHVyZS5fX3RleHRfc2lnbmF0dXJlX18sIE5vbmUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfdGVzdGNhcGkuZG9jc3RyaW5nX3dpdGhfaW52YWxpZF9zaWduYXR1cmUuX19kb2NfXywKKyAgICAgICAgICAgICJkb2NzdHJpbmdfd2l0aF9pbnZhbGlkX3NpZ25hdHVyZSgkbW9kdWxlLCAvLCBib28pXG4iCisgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAiVGhpcyBkb2NzdHJpbmcgaGFzIGFuIGludmFsaWQgc2lnbmF0dXJlLiIKKyAgICAgICAgICAgICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfdGVzdGNhcGkuZG9jc3RyaW5nX3dpdGhfaW52YWxpZF9zaWduYXR1cmUuX190ZXh0X3NpZ25hdHVyZV9fLCBOb25lKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX3Rlc3RjYXBpLmRvY3N0cmluZ193aXRoX2ludmFsaWRfc2lnbmF0dXJlMi5fX2RvY19fLAorICAgICAgICAgICAgImRvY3N0cmluZ193aXRoX2ludmFsaWRfc2lnbmF0dXJlMigkbW9kdWxlLCAvLCBib28pXG4iCisgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAiLS1cbiIKKyAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICJUaGlzIGRvY3N0cmluZyBhbHNvIGhhcyBhbiBpbnZhbGlkIHNpZ25hdHVyZS4iCisgICAgICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX3Rlc3RjYXBpLmRvY3N0cmluZ193aXRoX2ludmFsaWRfc2lnbmF0dXJlMi5fX3RleHRfc2lnbmF0dXJlX18sIE5vbmUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfdGVzdGNhcGkuZG9jc3RyaW5nX3dpdGhfc2lnbmF0dXJlLl9fZG9jX18sCisgICAgICAgICAgICAiVGhpcyBkb2NzdHJpbmcgaGFzIGEgdmFsaWQgc2lnbmF0dXJlLiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX3Rlc3RjYXBpLmRvY3N0cmluZ193aXRoX3NpZ25hdHVyZS5fX3RleHRfc2lnbmF0dXJlX18sICIoJG1vZHVsZSwgLywgc2lnKSIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfdGVzdGNhcGkuZG9jc3RyaW5nX3dpdGhfc2lnbmF0dXJlX2FuZF9leHRyYV9uZXdsaW5lcy5fX2RvY19fLAorICAgICAgICAgICAgIlxuVGhpcyBkb2NzdHJpbmcgaGFzIGEgdmFsaWQgc2lnbmF0dXJlIGFuZCBzb21lIGV4dHJhIG5ld2xpbmVzLiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX3Rlc3RjYXBpLmRvY3N0cmluZ193aXRoX3NpZ25hdHVyZV9hbmRfZXh0cmFfbmV3bGluZXMuX190ZXh0X3NpZ25hdHVyZV9fLAorICAgICAgICAgICAgIigkbW9kdWxlLCAvLCBwYXJhbWV0ZXIpIikKKworCiBAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWRpbmcsICdUaHJlYWRpbmcgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQogY2xhc3MgVGVzdFBlbmRpbmdDYWxscyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKQEAgLTE2MSwxNSArMjAyLDExIEBACiAgICAgICAgIGNvbnRleHQubG9jayA9IHRocmVhZGluZy5Mb2NrKCkKICAgICAgICAgY29udGV4dC5ldmVudCA9IHRocmVhZGluZy5FdmVudCgpCiAKLSAgICAgICAgZm9yIGkgaW4gcmFuZ2UoY29udGV4dC5uVGhyZWFkcyk6Ci0gICAgICAgICAgICB0ID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9c2VsZi5wZW5kaW5nY2FsbHNfdGhyZWFkLCBhcmdzID0gKGNvbnRleHQsKSkKLSAgICAgICAgICAgIHQuc3RhcnQoKQotICAgICAgICAgICAgdGhyZWFkcy5hcHBlbmQodCkKLQotICAgICAgICBzZWxmLnBlbmRpbmdjYWxsc193YWl0KGNvbnRleHQubCwgbiwgY29udGV4dCkKLQotICAgICAgICBmb3IgdCBpbiB0aHJlYWRzOgotICAgICAgICAgICAgdC5qb2luKCkKKyAgICAgICAgdGhyZWFkcyA9IFt0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1zZWxmLnBlbmRpbmdjYWxsc190aHJlYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzPShjb250ZXh0LCkpCisgICAgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoY29udGV4dC5uVGhyZWFkcyldCisgICAgICAgIHdpdGggc3VwcG9ydC5zdGFydF90aHJlYWRzKHRocmVhZHMpOgorICAgICAgICAgICAgc2VsZi5wZW5kaW5nY2FsbHNfd2FpdChjb250ZXh0LmwsIG4sIGNvbnRleHQpCiAKICAgICBkZWYgcGVuZGluZ2NhbGxzX3RocmVhZChzZWxmLCBjb250ZXh0KToKICAgICAgICAgdHJ5OgpAQCAtMTkzLDYgKzIzMCw5IEBACiAgICAgICAgIHNlbGYucGVuZGluZ2NhbGxzX3N1Ym1pdChsLCBuKQogICAgICAgICBzZWxmLnBlbmRpbmdjYWxsc193YWl0KGwsIG4pCiAKKworY2xhc3MgU3ViaW50ZXJwcmV0ZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKwogICAgIGRlZiB0ZXN0X3N1YmludGVycHMoc2VsZik6CiAgICAgICAgIGltcG9ydCBidWlsdGlucwogICAgICAgICByLCB3ID0gb3MucGlwZSgpCkBAIC0yMDMsNDcgKzI0MywxMTAgQEAKICAgICAgICAgICAgICAgICBwaWNrbGUuZHVtcChpZChidWlsdGlucyksIGYpCiAgICAgICAgICAgICAiIiIuZm9ybWF0KHcpCiAgICAgICAgIHdpdGggb3BlbihyLCAicmIiKSBhcyBmOgotICAgICAgICAgICAgcmV0ID0gX3Rlc3RjYXBpLnJ1bl9pbl9zdWJpbnRlcnAoY29kZSkKKyAgICAgICAgICAgIHJldCA9IHN1cHBvcnQucnVuX2luX3N1YmludGVycChjb2RlKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXQsIDApCiAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHBpY2tsZS5sb2FkKGYpLCBpZChzeXMubW9kdWxlcykpCiAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHBpY2tsZS5sb2FkKGYpLCBpZChidWlsdGlucykpCiAKKwogIyBCdWcgIzYwMTIKIGNsYXNzIFRlc3Q2MDEyKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfdGVzdGNhcGkuYXJncGFyc2luZygiSGVsbG8iLCAiV29ybGQiKSwgMSkKIAogCi1jbGFzcyBFbWJlZGRpbmdUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICAgIEB1bml0dGVzdC5za2lwSWYoCi0gICAgICAgIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCd3aW4nKSwKLSAgICAgICAgInRlc3QgZG9lc24ndCB3b3JrIHVuZGVyIFdpbmRvd3MiKQotICAgIGRlZiB0ZXN0X3N1YmludGVycHMoc2VsZik6Ci0gICAgICAgICMgWFhYIG9ubHkgdGVzdGVkIHVuZGVyIFVuaXggY2hlY2tvdXRzCi0gICAgICAgIGJhc2VwYXRoID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pKSkKLSAgICAgICAgb2xkY3dkID0gb3MuZ2V0Y3dkKCkKK2NsYXNzIEVtYmVkZGluZ1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIGhlcmUgPSBvcy5wYXRoLmFic3BhdGgoX19maWxlX18pCisgICAgICAgIGJhc2VwYXRoID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUoaGVyZSkpKQorICAgICAgICBleGVuYW1lID0gIl90ZXN0ZW1iZWQiCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCJ3aW4iKToKKyAgICAgICAgICAgIGV4dCA9ICgiX2QiIGlmICJfZCIgaW4gc3lzLmV4ZWN1dGFibGUgZWxzZSAiIikgKyAiLmV4ZSIKKyAgICAgICAgICAgIGV4ZW5hbWUgKz0gZXh0CisgICAgICAgICAgICBleGVwYXRoID0gb3MucGF0aC5kaXJuYW1lKHN5cy5leGVjdXRhYmxlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZXhlcGF0aCA9IG9zLnBhdGguam9pbihiYXNlcGF0aCwgIk1vZHVsZXMiKQorICAgICAgICBzZWxmLnRlc3RfZXhlID0gZXhlID0gb3MucGF0aC5qb2luKGV4ZXBhdGgsIGV4ZW5hbWUpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhleGUpOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiJXIgZG9lc24ndCBleGlzdCIgJSBleGUpCiAgICAgICAgICMgVGhpcyBpcyBuZWVkZWQgb3RoZXJ3aXNlIHdlIGdldCBhIGZhdGFsIGVycm9yOgogICAgICAgICAjICJQeV9Jbml0aWFsaXplOiBVbmFibGUgdG8gZ2V0IHRoZSBsb2NhbGUgZW5jb2RpbmcKICAgICAgICAgIyBMb29rdXBFcnJvcjogbm8gY29kZWMgc2VhcmNoIGZ1bmN0aW9ucyByZWdpc3RlcmVkOiBjYW4ndCBmaW5kIGVuY29kaW5nIgorICAgICAgICBzZWxmLm9sZGN3ZCA9IG9zLmdldGN3ZCgpCiAgICAgICAgIG9zLmNoZGlyKGJhc2VwYXRoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBvcy5jaGRpcihzZWxmLm9sZGN3ZCkKKworICAgIGRlZiBydW5fZW1iZWRkZWRfaW50ZXJwcmV0ZXIoc2VsZiwgKmFyZ3MpOgorICAgICAgICAiIiJSdW5zIGEgdGVzdCBpbiB0aGUgZW1iZWRkZWQgaW50ZXJwcmV0ZXIiIiIKKyAgICAgICAgY21kID0gW3NlbGYudGVzdF9leGVdCisgICAgICAgIGNtZC5leHRlbmQoYXJncykKKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oY21kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICAob3V0LCBlcnIpID0gcC5jb21tdW5pY2F0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5yZXR1cm5jb2RlLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICJiYWQgcmV0dXJuY29kZSAlZCwgc3RkZXJyIGlzICVyIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgKHAucmV0dXJuY29kZSwgZXJyKSkKKyAgICAgICAgcmV0dXJuIG91dC5kZWNvZGUoImxhdGluMSIpLCBlcnIuZGVjb2RlKCJsYXRpbjEiKQorCisgICAgZGVmIHRlc3Rfc3ViaW50ZXJwcyhzZWxmKToKKyAgICAgICAgIyBUaGlzIGlzIGp1c3QgYSAiZG9uJ3QgY3Jhc2giIHRlc3QKKyAgICAgICAgb3V0LCBlcnIgPSBzZWxmLnJ1bl9lbWJlZGRlZF9pbnRlcnByZXRlcigpCisgICAgICAgIGlmIHN1cHBvcnQudmVyYm9zZToKKyAgICAgICAgICAgIHByaW50KCkKKyAgICAgICAgICAgIHByaW50KG91dCkKKyAgICAgICAgICAgIHByaW50KGVycikKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgX2dldF9kZWZhdWx0X3BpcGVfZW5jb2RpbmcoKToKKyAgICAgICAgcnAsIHdwID0gb3MucGlwZSgpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIGV4ZSA9IG9zLnBhdGguam9pbihiYXNlcGF0aCwgIk1vZHVsZXMiLCAiX3Rlc3RlbWJlZCIpCi0gICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZXhlKToKLSAgICAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCIlciBkb2Vzbid0IGV4aXN0IiAlIGV4ZSkKLSAgICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtleGVdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCi0gICAgICAgICAgICAob3V0LCBlcnIpID0gcC5jb21tdW5pY2F0ZSgpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucmV0dXJuY29kZSwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJhZCByZXR1cm5jb2RlICVkLCBzdGRlcnIgaXMgJXIiICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHAucmV0dXJuY29kZSwgZXJyKSkKLSAgICAgICAgICAgIGlmIHN1cHBvcnQudmVyYm9zZToKLSAgICAgICAgICAgICAgICBwcmludCgpCi0gICAgICAgICAgICAgICAgcHJpbnQob3V0LmRlY29kZSgnbGF0aW4xJykpCi0gICAgICAgICAgICAgICAgcHJpbnQoZXJyLmRlY29kZSgnbGF0aW4xJykpCisgICAgICAgICAgICB3aXRoIG9zLmZkb3Blbih3cCwgJ3cnKSBhcyB3OgorICAgICAgICAgICAgICAgIGRlZmF1bHRfcGlwZV9lbmNvZGluZyA9IHcuZW5jb2RpbmcKICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIG9zLmNoZGlyKG9sZGN3ZCkKKyAgICAgICAgICAgIG9zLmNsb3NlKHJwKQorICAgICAgICByZXR1cm4gZGVmYXVsdF9waXBlX2VuY29kaW5nCisKKyAgICBkZWYgdGVzdF9mb3JjZWRfaW9fZW5jb2Rpbmcoc2VsZik6CisgICAgICAgICMgQ2hlY2tzIGZvcmNlZCBjb25maWd1cmF0aW9uIG9mIGVtYmVkZGVkIGludGVycHJldGVyIElPIHN0cmVhbXMKKyAgICAgICAgb3V0LCBlcnIgPSBzZWxmLnJ1bl9lbWJlZGRlZF9pbnRlcnByZXRlcigiZm9yY2VkX2lvX2VuY29kaW5nIikKKyAgICAgICAgaWYgc3VwcG9ydC52ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQoKQorICAgICAgICAgICAgcHJpbnQob3V0KQorICAgICAgICAgICAgcHJpbnQoZXJyKQorICAgICAgICBleHBlY3RlZF9zdGRpbl9lbmNvZGluZyA9IHN5cy5fX3N0ZGluX18uZW5jb2RpbmcKKyAgICAgICAgZXhwZWN0ZWRfcGlwZV9lbmNvZGluZyA9IHNlbGYuX2dldF9kZWZhdWx0X3BpcGVfZW5jb2RpbmcoKQorICAgICAgICBleHBlY3RlZF9vdXRwdXQgPSBvcy5saW5lc2VwLmpvaW4oWworICAgICAgICAiLS0tIFVzZSBkZWZhdWx0cyAtLS0iLAorICAgICAgICAiRXhwZWN0ZWQgZW5jb2Rpbmc6IGRlZmF1bHQiLAorICAgICAgICAiRXhwZWN0ZWQgZXJyb3JzOiBkZWZhdWx0IiwKKyAgICAgICAgInN0ZGluOiB7MH06c3RyaWN0IiwKKyAgICAgICAgInN0ZG91dDogezF9OnN0cmljdCIsCisgICAgICAgICJzdGRlcnI6IHsxfTpiYWNrc2xhc2hyZXBsYWNlIiwKKyAgICAgICAgIi0tLSBTZXQgZXJyb3JzIG9ubHkgLS0tIiwKKyAgICAgICAgIkV4cGVjdGVkIGVuY29kaW5nOiBkZWZhdWx0IiwKKyAgICAgICAgIkV4cGVjdGVkIGVycm9yczogc3Vycm9nYXRlZXNjYXBlIiwKKyAgICAgICAgInN0ZGluOiB7MH06c3Vycm9nYXRlZXNjYXBlIiwKKyAgICAgICAgInN0ZG91dDogezF9OnN1cnJvZ2F0ZWVzY2FwZSIsCisgICAgICAgICJzdGRlcnI6IHsxfTpiYWNrc2xhc2hyZXBsYWNlIiwKKyAgICAgICAgIi0tLSBTZXQgZW5jb2Rpbmcgb25seSAtLS0iLAorICAgICAgICAiRXhwZWN0ZWQgZW5jb2Rpbmc6IGxhdGluLTEiLAorICAgICAgICAiRXhwZWN0ZWQgZXJyb3JzOiBkZWZhdWx0IiwKKyAgICAgICAgInN0ZGluOiBsYXRpbi0xOnN0cmljdCIsCisgICAgICAgICJzdGRvdXQ6IGxhdGluLTE6c3RyaWN0IiwKKyAgICAgICAgInN0ZGVycjogbGF0aW4tMTpiYWNrc2xhc2hyZXBsYWNlIiwKKyAgICAgICAgIi0tLSBTZXQgZW5jb2RpbmcgYW5kIGVycm9ycyAtLS0iLAorICAgICAgICAiRXhwZWN0ZWQgZW5jb2Rpbmc6IGxhdGluLTEiLAorICAgICAgICAiRXhwZWN0ZWQgZXJyb3JzOiBzdXJyb2dhdGVlc2NhcGUiLAorICAgICAgICAic3RkaW46IGxhdGluLTE6c3Vycm9nYXRlZXNjYXBlIiwKKyAgICAgICAgInN0ZG91dDogbGF0aW4tMTpzdXJyb2dhdGVlc2NhcGUiLAorICAgICAgICAic3RkZXJyOiBsYXRpbi0xOmJhY2tzbGFzaHJlcGxhY2UiXSkuZm9ybWF0KGV4cGVjdGVkX3N0ZGluX2VuY29kaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX3BpcGVfZW5jb2RpbmcpCisgICAgICAgICMgVGhpcyBpcyB1c2VmdWwgaWYgd2UgZXZlciB0cmlwIG92ZXIgb2RkIHBsYXRmb3JtIGJlaGF2aW91cgorICAgICAgICBzZWxmLm1heERpZmYgPSBOb25lCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LnN0cmlwKCksIGV4cGVjdGVkX291dHB1dCkKIAogY2xhc3MgU2tpcGl0ZW1UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIApAQCAtMzU1LDggKzQ1OCw5IEBACiAgICAgZGVmIHRlc3RfX3Rlc3RjYXBpKHNlbGYpOgogICAgICAgICBmb3IgbmFtZSBpbiBkaXIoX3Rlc3RjYXBpKToKICAgICAgICAgICAgIGlmIG5hbWUuc3RhcnRzd2l0aCgndGVzdF8nKToKLSAgICAgICAgICAgICAgICB0ZXN0ID0gZ2V0YXR0cihfdGVzdGNhcGksIG5hbWUpCi0gICAgICAgICAgICAgICAgdGVzdCgpCisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoImludGVybmFsIiwgbmFtZT1uYW1lKToKKyAgICAgICAgICAgICAgICAgICAgdGVzdCA9IGdldGF0dHIoX3Rlc3RjYXBpLCBuYW1lKQorICAgICAgICAgICAgICAgICAgICB0ZXN0KCkKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY2dpLnB5IGIvTGliL3Rlc3QvdGVzdF9jZ2kucHkKaW5kZXggODZlMWYzYS4uNmIyODEwNiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jZ2kucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jZ2kucHkKQEAgLTE4Niw5ICsxODYsOSBAQAogICAgICAgICBjZ2kuaW5pdGxvZygiJXMiLCAiVGVzdGluZyBpbml0bG9nIDEiKQogICAgICAgICBjZ2kubG9nKCIlcyIsICJUZXN0aW5nIGxvZyAyIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjZ2kubG9nZnAuZ2V0dmFsdWUoKSwgIlRlc3RpbmcgaW5pdGxvZyAxXG5UZXN0aW5nIGxvZyAyXG4iKQotICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cygiL2Rldi9udWxsIik6CisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKG9zLmRldm51bGwpOgogICAgICAgICAgICAgY2dpLmxvZ2ZwID0gTm9uZQotICAgICAgICAgICAgY2dpLmxvZ2ZpbGUgPSAiL2Rldi9udWxsIgorICAgICAgICAgICAgY2dpLmxvZ2ZpbGUgPSBvcy5kZXZudWxsCiAgICAgICAgICAgICBjZ2kuaW5pdGxvZygiJXMiLCAiVGVzdGluZyBsb2cgMyIpCiAgICAgICAgICAgICBzZWxmLmFkZENsZWFudXAoY2dpLmNsb3NlbG9nKQogICAgICAgICAgICAgY2dpLmxvZygiVGVzdGluZyBsb2cgNCIpCkBAIC0yNDgsNiArMjQ4LDI1IEBACiAgICAgICAgICAgICAgICAgZ290ID0gZ2V0YXR0cihmcy5saXN0W3hdLCBrKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ290LCBleHApCiAKKyAgICBkZWYgdGVzdF9maWVsZHN0b3JhZ2VfbXVsdGlwYXJ0X2xlYWRpbmdfd2hpdGVzcGFjZShzZWxmKToKKyAgICAgICAgZW52ID0geworICAgICAgICAgICAgJ1JFUVVFU1RfTUVUSE9EJzogJ1BPU1QnLAorICAgICAgICAgICAgJ0NPTlRFTlRfVFlQRSc6ICdtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT17fScuZm9ybWF0KEJPVU5EQVJZKSwKKyAgICAgICAgICAgICdDT05URU5UX0xFTkdUSCc6ICc1NjAnfQorICAgICAgICAjIEFkZCBzb21lIGxlYWRpbmcgd2hpdGVzcGFjZSB0byBvdXIgcG9zdCBkYXRhIHRoYXQgd2lsbCBjYXVzZSB0aGUKKyAgICAgICAgIyBmaXJzdCBsaW5lIHRvIG5vdCBiZSB0aGUgaW5uZXJib3VuZGFyeS4KKyAgICAgICAgZnAgPSBCeXRlc0lPKGIiXHJcbiIgKyBQT1NUREFUQS5lbmNvZGUoJ2xhdGluLTEnKSkKKyAgICAgICAgZnMgPSBjZ2kuRmllbGRTdG9yYWdlKGZwLCBlbnZpcm9uPWVudiwgZW5jb2Rpbmc9ImxhdGluLTEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihmcy5saXN0KSwgNCkKKyAgICAgICAgZXhwZWN0ID0gW3snbmFtZSc6J2lkJywgJ2ZpbGVuYW1lJzpOb25lLCAndmFsdWUnOicxMjM0J30sCisgICAgICAgICAgICAgICAgICB7J25hbWUnOid0aXRsZScsICdmaWxlbmFtZSc6Tm9uZSwgJ3ZhbHVlJzonJ30sCisgICAgICAgICAgICAgICAgICB7J25hbWUnOidmaWxlJywgJ2ZpbGVuYW1lJzondGVzdC50eHQnLCAndmFsdWUnOmInVGVzdGluZyAxMjMuXG4nfSwKKyAgICAgICAgICAgICAgICAgIHsnbmFtZSc6J3N1Ym1pdCcsICdmaWxlbmFtZSc6Tm9uZSwgJ3ZhbHVlJzonIEFkZCAnfV0KKyAgICAgICAgZm9yIHggaW4gcmFuZ2UobGVuKGZzLmxpc3QpKToKKyAgICAgICAgICAgIGZvciBrLCBleHAgaW4gZXhwZWN0W3hdLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgZ290ID0gZ2V0YXR0cihmcy5saXN0W3hdLCBrKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ290LCBleHApCisKICAgICBkZWYgdGVzdF9maWVsZHN0b3JhZ2VfbXVsdGlwYXJ0X25vbl9hc2NpaShzZWxmKToKICAgICAgICAgI1Rlc3QgYmFzaWMgRmllbGRTdG9yYWdlIG11bHRpcGFydCBwYXJzaW5nCiAgICAgICAgIGVudiA9IHsnUkVRVUVTVF9NRVRIT0QnOidQT1NUJywKQEAgLTMwNyw2ICszMjYsMjUgQEAKICAgICAgICAgICAgICAgICBnb3QgPSBnZXRhdHRyKGZpbGVzW3hdLCBrKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ290LCBleHApCiAKKyAgICBkZWYgdGVzdF9maWVsZHN0b3JhZ2VfcGFydF9jb250ZW50X2xlbmd0aChzZWxmKToKKyAgICAgICAgQk9VTkRBUlkgPSAiSmZJU2EwMSIKKyAgICAgICAgUE9TVERBVEEgPSAiIiItLUpmSVNhMDEKK0NvbnRlbnQtRGlzcG9zaXRpb246IGZvcm0tZGF0YTsgbmFtZT0ic3VibWl0LW5hbWUiCitDb250ZW50LUxlbmd0aDogNQorCitMYXJyeQorLS1KZklTYTAxIiIiCisgICAgICAgIGVudiA9IHsKKyAgICAgICAgICAgICdSRVFVRVNUX01FVEhPRCc6ICdQT1NUJywKKyAgICAgICAgICAgICdDT05URU5UX1RZUEUnOiAnbXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9e30nLmZvcm1hdChCT1VOREFSWSksCisgICAgICAgICAgICAnQ09OVEVOVF9MRU5HVEgnOiBzdHIobGVuKFBPU1REQVRBKSl9CisgICAgICAgIGZwID0gQnl0ZXNJTyhQT1NUREFUQS5lbmNvZGUoJ2xhdGluLTEnKSkKKyAgICAgICAgZnMgPSBjZ2kuRmllbGRTdG9yYWdlKGZwLCBlbnZpcm9uPWVudiwgZW5jb2Rpbmc9ImxhdGluLTEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihmcy5saXN0KSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmcy5saXN0WzBdLm5hbWUsICdzdWJtaXQtbmFtZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnMubGlzdFswXS52YWx1ZSwgJ0xhcnJ5JykKKworCiAgICAgX3FzX3Jlc3VsdCA9IHsKICAgICAgICAgJ2tleTEnOiAndmFsdWUxJywKICAgICAgICAgJ2tleTInOiBbJ3ZhbHVlMngnLCAndmFsdWUyeSddLApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jbGFzcy5weSBiL0xpYi90ZXN0L3Rlc3RfY2xhc3MucHkKaW5kZXggYzcwMDNmYi4uZTM4ODNkNiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jbGFzcy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NsYXNzLnB5CkBAIC0xNSw2ICsxNSw4IEBACiAgICAgInJtdWwiLAogICAgICJ0cnVlZGl2IiwKICAgICAicnRydWVkaXYiLAorICAgICJmbG9vcmRpdiIsCisgICAgInJmbG9vcmRpdiIsCiAgICAgIm1vZCIsCiAgICAgInJtb2QiLAogICAgICJkaXZtb2QiLApAQCAtMTc0LDE1ICsxNzYsMjMgQEAKICAgICAgICAgMSAqIHRlc3RtZQogICAgICAgICBzZWxmLmFzc2VydENhbGxTdGFjayhbKCJfX3JtdWxfXyIsICh0ZXN0bWUsIDEpKV0pCiAKLSAgICAgICAgaWYgMS8yID09IDA6Ci0gICAgICAgICAgICBjYWxsTHN0WzpdID0gW10KLSAgICAgICAgICAgIHRlc3RtZSAvIDEKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Q2FsbFN0YWNrKFsoIl9fZGl2X18iLCAodGVzdG1lLCAxKSldKQorICAgICAgICBjYWxsTHN0WzpdID0gW10KKyAgICAgICAgdGVzdG1lIC8gMQorICAgICAgICBzZWxmLmFzc2VydENhbGxTdGFjayhbKCJfX3RydWVkaXZfXyIsICh0ZXN0bWUsIDEpKV0pCiAKIAotICAgICAgICAgICAgY2FsbExzdFs6XSA9IFtdCi0gICAgICAgICAgICAxIC8gdGVzdG1lCi0gICAgICAgICAgICBzZWxmLmFzc2VydENhbGxTdGFjayhbKCJfX3JkaXZfXyIsICh0ZXN0bWUsIDEpKV0pCisgICAgICAgIGNhbGxMc3RbOl0gPSBbXQorICAgICAgICAxIC8gdGVzdG1lCisgICAgICAgIHNlbGYuYXNzZXJ0Q2FsbFN0YWNrKFsoIl9fcnRydWVkaXZfXyIsICh0ZXN0bWUsIDEpKV0pCisKKyAgICAgICAgY2FsbExzdFs6XSA9IFtdCisgICAgICAgIHRlc3RtZSAvLyAxCisgICAgICAgIHNlbGYuYXNzZXJ0Q2FsbFN0YWNrKFsoIl9fZmxvb3JkaXZfXyIsICh0ZXN0bWUsIDEpKV0pCisKKworICAgICAgICBjYWxsTHN0WzpdID0gW10KKyAgICAgICAgMSAvLyB0ZXN0bWUKKyAgICAgICAgc2VsZi5hc3NlcnRDYWxsU3RhY2soWygiX19yZmxvb3JkaXZfXyIsICh0ZXN0bWUsIDEpKV0pCiAKICAgICAgICAgY2FsbExzdFs6XSA9IFtdCiAgICAgICAgIHRlc3RtZSAlIDEKQEAgLTQ0NCwxMiArNDU0LDE2IEBACiAgICAgICAgICAgICBkZWYgX19pbnRfXyhzZWxmKToKICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQogICAgICAgICAgICAgX19mbG9hdF9fID0gX19pbnRfXworICAgICAgICAgICAgX19jb21wbGV4X18gPSBfX2ludF9fCiAgICAgICAgICAgICBfX3N0cl9fID0gX19pbnRfXwogICAgICAgICAgICAgX19yZXByX18gPSBfX2ludF9fCi0gICAgICAgICAgICBfX29jdF9fID0gX19pbnRfXwotICAgICAgICAgICAgX19oZXhfXyA9IF9faW50X18KKyAgICAgICAgICAgIF9fYnl0ZXNfXyA9IF9faW50X18KKyAgICAgICAgICAgIF9fYm9vbF9fID0gX19pbnRfXworICAgICAgICAgICAgX19pbmRleF9fID0gX19pbnRfXworICAgICAgICBkZWYgaW5kZXgoeCk6CisgICAgICAgICAgICByZXR1cm4gW11beF0KIAotICAgICAgICBmb3IgZiBpbiBbaW50LCBmbG9hdCwgc3RyLCByZXByLCBvY3QsIGhleF06CisgICAgICAgIGZvciBmIGluIFtmbG9hdCwgY29tcGxleCwgc3RyLCByZXByLCBieXRlcywgYmluLCBvY3QsIGhleCwgYm9vbCwgaW5kZXhdOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmLCBCYWRUeXBlQ2xhc3MoKSkKIAogICAgIGRlZiB0ZXN0SGFzaFN0dWZmKHNlbGYpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jbWF0aC5weSBiL0xpYi90ZXN0L3Rlc3RfY21hdGgucHkKaW5kZXggNGRiNmIyYi4uNjhiZjE2ZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jbWF0aC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NtYXRoLnB5CkBAIC0xLDQgKzEsNCBAQAotZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgcmVxdWlyZXNfSUVFRV83NTQKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIHJlcXVpcmVzX0lFRUVfNzU0LCBjcHl0aG9uX29ubHkKIGZyb20gdGVzdC50ZXN0X21hdGggaW1wb3J0IHBhcnNlX3Rlc3RmaWxlLCB0ZXN0X2ZpbGUKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IGNtYXRoLCBtYXRoCkBAIC0zODEsMTcgKzM4MSw0OCBAQAogICAgICAgICAgICAgc2VsZi5yQXNzZXJ0QWxtb3N0RXF1YWwoZXhwZWN0ZWQuaW1hZywgYWN0dWFsLmltYWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnPWVycm9yX21lc3NhZ2UpCiAKLSAgICBkZWYgYXNzZXJ0Q0lTRXF1YWwoc2VsZiwgYSwgYik6Ci0gICAgICAgIGVwcyA9IDFFLTcKLSAgICAgICAgaWYgYWJzKGFbMF0gLSBiWzBdKSA+IGVwcyBvciBhYnMoYVsxXSAtIGJbMV0pID4gZXBzOgotICAgICAgICAgICAgc2VsZi5mYWlsKChhICxiKSkKKyAgICBkZWYgY2hlY2tfcG9sYXIoc2VsZiwgZnVuYyk6CisgICAgICAgIGRlZiBjaGVjayhhcmcsIGV4cGVjdGVkKToKKyAgICAgICAgICAgIGdvdCA9IGZ1bmMoYXJnKQorICAgICAgICAgICAgZm9yIGUsIGcgaW4gemlwKGV4cGVjdGVkLCBnb3QpOgorICAgICAgICAgICAgICAgIHNlbGYuckFzc2VydEFsbW9zdEVxdWFsKGUsIGcpCisgICAgICAgIGNoZWNrKDAsICgwLiwgMC4pKQorICAgICAgICBjaGVjaygxLCAoMS4sIDAuKSkKKyAgICAgICAgY2hlY2soLTEsICgxLiwgcGkpKQorICAgICAgICBjaGVjaygxaiwgKDEuLCBwaSAvIDIpKQorICAgICAgICBjaGVjaygtM2osICgzLiwgLXBpIC8gMikpCisgICAgICAgIGluZiA9IGZsb2F0KCdpbmYnKQorICAgICAgICBjaGVjayhjb21wbGV4KGluZiwgMCksIChpbmYsIDAuKSkKKyAgICAgICAgY2hlY2soY29tcGxleCgtaW5mLCAwKSwgKGluZiwgcGkpKQorICAgICAgICBjaGVjayhjb21wbGV4KDMsIGluZiksIChpbmYsIHBpIC8gMikpCisgICAgICAgIGNoZWNrKGNvbXBsZXgoNSwgLWluZiksIChpbmYsIC1waSAvIDIpKQorICAgICAgICBjaGVjayhjb21wbGV4KGluZiwgaW5mKSwgKGluZiwgcGkgLyA0KSkKKyAgICAgICAgY2hlY2soY29tcGxleChpbmYsIC1pbmYpLCAoaW5mLCAtcGkgLyA0KSkKKyAgICAgICAgY2hlY2soY29tcGxleCgtaW5mLCBpbmYpLCAoaW5mLCAzICogcGkgLyA0KSkKKyAgICAgICAgY2hlY2soY29tcGxleCgtaW5mLCAtaW5mKSwgKGluZiwgLTMgKiBwaSAvIDQpKQorICAgICAgICBuYW4gPSBmbG9hdCgnbmFuJykKKyAgICAgICAgY2hlY2soY29tcGxleChuYW4sIDApLCAobmFuLCBuYW4pKQorICAgICAgICBjaGVjayhjb21wbGV4KDAsIG5hbiksIChuYW4sIG5hbikpCisgICAgICAgIGNoZWNrKGNvbXBsZXgobmFuLCBuYW4pLCAobmFuLCBuYW4pKQorICAgICAgICBjaGVjayhjb21wbGV4KGluZiwgbmFuKSwgKGluZiwgbmFuKSkKKyAgICAgICAgY2hlY2soY29tcGxleCgtaW5mLCBuYW4pLCAoaW5mLCBuYW4pKQorICAgICAgICBjaGVjayhjb21wbGV4KG5hbiwgaW5mKSwgKGluZiwgbmFuKSkKKyAgICAgICAgY2hlY2soY29tcGxleChuYW4sIC1pbmYpLCAoaW5mLCBuYW4pKQogCiAgICAgZGVmIHRlc3RfcG9sYXIoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0Q0lTRXF1YWwocG9sYXIoMCksICgwLiwgMC4pKQotICAgICAgICBzZWxmLmFzc2VydENJU0VxdWFsKHBvbGFyKDEuKSwgKDEuLCAwLikpCi0gICAgICAgIHNlbGYuYXNzZXJ0Q0lTRXF1YWwocG9sYXIoLTEuKSwgKDEuLCBwaSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0Q0lTRXF1YWwocG9sYXIoMWopLCAoMS4sIHBpLzIpKQotICAgICAgICBzZWxmLmFzc2VydENJU0VxdWFsKHBvbGFyKC0xaiksICgxLiwgLXBpLzIpKQorICAgICAgICBzZWxmLmNoZWNrX3BvbGFyKHBvbGFyKQorCisgICAgQGNweXRob25fb25seQorICAgIGRlZiB0ZXN0X3BvbGFyX2Vycm5vKHNlbGYpOgorICAgICAgICAjIElzc3VlICMyNDQ4OTogY2hlY2sgYSBwcmV2aW91c2x5IHNldCBDIGVycm5vIGRvZXNuJ3QgZGlzdHVyYiBwb2xhcigpCisgICAgICAgIGZyb20gX3Rlc3RjYXBpIGltcG9ydCBzZXRfZXJybm8KKyAgICAgICAgZGVmIHBvbGFyX3dpdGhfZXJybm9fc2V0KHopOgorICAgICAgICAgICAgc2V0X2Vycm5vKDExKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJldHVybiBwb2xhcih6KQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBzZXRfZXJybm8oMCkKKyAgICAgICAgc2VsZi5jaGVja19wb2xhcihwb2xhcl93aXRoX2Vycm5vX3NldCkKIAogICAgIGRlZiB0ZXN0X3BoYXNlKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHBoYXNlKDApLCAwLikKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY21kLnB5IGIvTGliL3Rlc3QvdGVzdF9jbWQucHkKaW5kZXggZTlhMDIxMS4uZGQ4OTgxZiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jbWQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jbWQucHkKQEAgLTExMCw3ICsxMTAsNyBAQAogICAgIDUgIDEyICAxOQogICAgIDYgIDEzCiAKLSAgICBUaGlzIGlzIGEgaW50ZXJhY3RpdmUgdGVzdCwgcHV0IHNvbWUgY29tbWFuZHMgaW4gdGhlIGNtZHF1ZXVlIGF0dHJpYnV0ZQorICAgIFRoaXMgaXMgYW4gaW50ZXJhY3RpdmUgdGVzdCwgcHV0IHNvbWUgY29tbWFuZHMgaW4gdGhlIGNtZHF1ZXVlIGF0dHJpYnV0ZQogICAgIGFuZCBsZXQgaXQgZXhlY3V0ZQogICAgIFRoaXMgdGVzdCBpbmNsdWRlcyB0aGUgcHJlbG9vcCgpLCBwb3N0bG9vcCgpLCBkZWZhdWx0KCksIGVtcHR5bGluZSgpLAogICAgIHBhcnNlbGluZSgpLCBkb19oZWxwKCkgZnVuY3Rpb25zCkBAIC0yMjksNyArMjI5LDcgQEAKICAgICB0cmFjZSA9IHN1cHBvcnQuaW1wb3J0X21vZHVsZSgndHJhY2UnKQogICAgIHRyYWNlcj10cmFjZS5UcmFjZShpZ25vcmVkaXJzPVtzeXMuYmFzZV9wcmVmaXgsIHN5cy5iYXNlX2V4ZWNfcHJlZml4LF0sCiAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjZT0wLCBjb3VudD0xKQotICAgIHRyYWNlci5ydW4oJ3JlbG9hZChjbWQpO3Rlc3RfbWFpbigpJykKKyAgICB0cmFjZXIucnVuKCdpbXBvcnQgaW1wb3J0bGliOyBpbXBvcnRsaWIucmVsb2FkKGNtZCk7IHRlc3RfbWFpbigpJykKICAgICByPXRyYWNlci5yZXN1bHRzKCkKICAgICBwcmludCgiV3JpdGluZyBjb3ZlcmFnZSByZXN1bHRzLi4uIikKICAgICByLndyaXRlX3Jlc3VsdHMoc2hvd19taXNzaW5nPVRydWUsIHN1bW1hcnk9VHJ1ZSwgY292ZXJkaXI9Y292ZXJkaXIpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2NtZF9saW5lLnB5IGIvTGliL3Rlc3QvdGVzdF9jbWRfbGluZS5weQppbmRleCBhODlkN2U0Li41Y2FkM2VjIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2NtZF9saW5lLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY21kX2xpbmUucHkKQEAgLTQsOSArNCwxMSBAQAogCiBpbXBvcnQgdGVzdC5zdXBwb3J0LCB1bml0dGVzdAogaW1wb3J0IG9zCitpbXBvcnQgc2h1dGlsCiBpbXBvcnQgc3lzCiBpbXBvcnQgc3VicHJvY2VzcwogaW1wb3J0IHRlbXBmaWxlCitmcm9tIHRlc3QgaW1wb3J0IHNjcmlwdF9oZWxwZXIKIGZyb20gdGVzdC5zY3JpcHRfaGVscGVyIGltcG9ydCAoc3Bhd25fcHl0aG9uLCBraWxsX3B5dGhvbiwgYXNzZXJ0X3B5dGhvbl9vaywKICAgICBhc3NlcnRfcHl0aG9uX2ZhaWx1cmUpCiAKQEAgLTQxLDggKzQzLDEwIEBACiAKICAgICBkZWYgdGVzdF92ZXJzaW9uKHNlbGYpOgogICAgICAgICB2ZXJzaW9uID0gKCdQeXRob24gJWQuJWQnICUgc3lzLnZlcnNpb25faW5mb1s6Ml0pLmVuY29kZSgiYXNjaWkiKQotICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCctVicpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlcnIuc3RhcnRzd2l0aCh2ZXJzaW9uKSkKKyAgICAgICAgZm9yIHN3aXRjaCBpbiAnLVYnLCAnLS12ZXJzaW9uJzoKKyAgICAgICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soc3dpdGNoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShlcnIuc3RhcnRzd2l0aCh2ZXJzaW9uKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvdXQuc3RhcnRzd2l0aCh2ZXJzaW9uKSkKIAogICAgIGRlZiB0ZXN0X3ZlcmJvc2Uoc2VsZik6CiAgICAgICAgICMgLXYgY2F1c2VzIGltcG9ydHMgdG8gd3JpdGUgdG8gc3RkZXJyLiAgSWYgdGhlIHdyaXRlIHRvCkBAIC01NCwxNCArNTgsNDkgQEAKICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihiJ3N0YWNrIG92ZXJmbG93JywgZXJyKQogCiAgICAgZGVmIHRlc3RfeG9wdGlvbnMoc2VsZik6Ci0gICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soJy1jJywgJ2ltcG9ydCBzeXM7IHByaW50KHN5cy5feG9wdGlvbnMpJykKLSAgICAgICAgb3B0cyA9IGV2YWwob3V0LnNwbGl0bGluZXMoKVswXSkKKyAgICAgICAgZGVmIGdldF94b3B0aW9ucygqYXJncyk6CisgICAgICAgICAgICAjIHVzZSBzdWJwcm9jZXNzIG1vZHVsZSBkaXJlY3RseSBiZWNhdXNlIHRlc3Quc2NyaXB0X2hlbHBlciBhZGRzCisgICAgICAgICAgICAjICItWCBmYXVsdGhhbmRsZXIiIHRvIHRoZSBjb21tYW5kIGxpbmUKKyAgICAgICAgICAgIGFyZ3MgPSAoc3lzLmV4ZWN1dGFibGUsICctRScpICsgYXJncworICAgICAgICAgICAgYXJncyArPSAoJy1jJywgJ2ltcG9ydCBzeXM7IHByaW50KHN5cy5feG9wdGlvbnMpJykKKyAgICAgICAgICAgIG91dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGFyZ3MpCisgICAgICAgICAgICBvcHRzID0gZXZhbChvdXQuc3BsaXRsaW5lcygpWzBdKQorICAgICAgICAgICAgcmV0dXJuIG9wdHMKKworICAgICAgICBvcHRzID0gZ2V0X3hvcHRpb25zKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcHRzLCB7fSkKLSAgICAgICAgcmMsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygKLSAgICAgICAgICAgICctWGEnLCAnLVhiPWMsZD1lJywgJy1jJywgJ2ltcG9ydCBzeXM7IHByaW50KHN5cy5feG9wdGlvbnMpJykKLSAgICAgICAgb3B0cyA9IGV2YWwob3V0LnNwbGl0bGluZXMoKVswXSkKKworICAgICAgICBvcHRzID0gZ2V0X3hvcHRpb25zKCctWGEnLCAnLVhiPWMsZD1lJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcHRzLCB7J2EnOiBUcnVlLCAnYic6ICdjLGQ9ZSd9KQogCisgICAgZGVmIHRlc3Rfc2hvd3JlZmNvdW50KHNlbGYpOgorICAgICAgICBkZWYgcnVuX3B5dGhvbigqYXJncyk6CisgICAgICAgICAgICAjIHRoaXMgaXMgc2ltaWxhciB0byBhc3NlcnRfcHl0aG9uX29rIGJ1dCBkb2Vzbid0IHN0cmlwCisgICAgICAgICAgICAjIHRoZSByZWZjb3VudCBmcm9tIHN0ZGVyci4gIEl0IGNhbiBiZSByZXBsYWNlZCBvbmNlCisgICAgICAgICAgICAjIGFzc2VydF9weXRob25fb2sgc3RvcHMgZG9pbmcgdGhhdC4KKyAgICAgICAgICAgIGNtZCA9IFtzeXMuZXhlY3V0YWJsZV0KKyAgICAgICAgICAgIGNtZC5leHRlbmQoYXJncykKKyAgICAgICAgICAgIFBJUEUgPSBzdWJwcm9jZXNzLlBJUEUKKyAgICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKGNtZCwgc3Rkb3V0PVBJUEUsIHN0ZGVycj1QSVBFKQorICAgICAgICAgICAgb3V0LCBlcnIgPSBwLmNvbW11bmljYXRlKCkKKyAgICAgICAgICAgIHAuc3Rkb3V0LmNsb3NlKCkKKyAgICAgICAgICAgIHAuc3RkZXJyLmNsb3NlKCkKKyAgICAgICAgICAgIHJjID0gcC5yZXR1cm5jb2RlCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJjLCAwKQorICAgICAgICAgICAgcmV0dXJuIHJjLCBvdXQsIGVycgorICAgICAgICBjb2RlID0gJ2ltcG9ydCBzeXM7IHByaW50KHN5cy5feG9wdGlvbnMpJworICAgICAgICAjIG5vcm1hbGx5IHRoZSByZWZjb3VudCBpcyBoaWRkZW4KKyAgICAgICAgcmMsIG91dCwgZXJyID0gcnVuX3B5dGhvbignLWMnLCBjb2RlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dC5yc3RyaXAoKSwgYid7fScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLCBiJycpCisgICAgICAgICMgIi1YIHNob3dyZWZjb3VudCIgc2hvd3MgdGhlIHJlZmNvdW50LCBidXQgb25seSBpbiBkZWJ1ZyBidWlsZHMKKyAgICAgICAgcmMsIG91dCwgZXJyID0gcnVuX3B5dGhvbignLVgnLCAnc2hvd3JlZmNvdW50JywgJy1jJywgY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQucnN0cmlwKCksIGIieydzaG93cmVmY291bnQnOiBUcnVlfSIpCisgICAgICAgIGlmIGhhc2F0dHIoc3lzLCAnZ2V0dG90YWxyZWZjb3VudCcpOiAgIyBkZWJ1ZyBidWlsZAorICAgICAgICAgICAgc2VsZi5hc3NlcnRSZWdleChlcnIsIGJyJ15cW1xkKyByZWZzLCBcZCsgYmxvY2tzXF0nKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIsIGInJykKKwogICAgIGRlZiB0ZXN0X3J1bl9tb2R1bGUoc2VsZik6CiAgICAgICAgICMgVGVzdCBleHBlY3RlZCBvcGVyYXRpb24gb2YgdGhlICctbScgc3dpdGNoCiAgICAgICAgICMgU3dpdGNoIG5lZWRzIGFuIGFyZ3VtZW50CkBAIC03MCw5ICsxMDksOSBAQAogICAgICAgICBhc3NlcnRfcHl0aG9uX2ZhaWx1cmUoJy1tJywgJ2Zub3JkNDM1MjB4eXonKQogICAgICAgICAjIENoZWNrIHRoZSBydW5weSBtb2R1bGUgYWxzbyBnaXZlcyBhbiBlcnJvciBmb3IKICAgICAgICAgIyBhIG5vbmV4aXN0ZW50IG1vZHVsZQotICAgICAgICBhc3NlcnRfcHl0aG9uX2ZhaWx1cmUoJy1tJywgJ3J1bnB5JywgJ2Zub3JkNDM1MjB4eXonKSwKKyAgICAgICAgYXNzZXJ0X3B5dGhvbl9mYWlsdXJlKCctbScsICdydW5weScsICdmbm9yZDQzNTIweHl6JykKICAgICAgICAgIyBBbGwgZ29vZCBpZiBtb2R1bGUgaXMgbG9jYXRlZCBhbmQgcnVuIHN1Y2Nlc3NmdWxseQotICAgICAgICBhc3NlcnRfcHl0aG9uX29rKCctbScsICd0aW1laXQnLCAnLW4nLCAnMScpLAorICAgICAgICBhc3NlcnRfcHl0aG9uX29rKCctbScsICd0aW1laXQnLCAnLW4nLCAnMScpCiAKICAgICBkZWYgdGVzdF9ydW5fbW9kdWxlX2J1ZzE3NjQ0MDcoc2VsZik6CiAgICAgICAgICMgLW0gYW5kIC1pIG5lZWQgdG8gcGxheSB3ZWxsIHRvZ2V0aGVyCkBAIC0yMTMsOSArMjUyLDMwIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0SW4ocGF0aDEuZW5jb2RlKCdhc2NpaScpLCBvdXQpCiAgICAgICAgIHNlbGYuYXNzZXJ0SW4ocGF0aDIuZW5jb2RlKCdhc2NpaScpLCBvdXQpCiAKKyAgICBkZWYgdGVzdF9lbXB0eV9QWVRIT05QQVRIX2lzc3VlMTYzMDkoc2VsZik6CisgICAgICAgICMgT24gUG9zaXgsIGl0IGlzIGRvY3VtZW50ZWQgdGhhdCBzZXR0aW5nIFBBVEggdG8gdGhlCisgICAgICAgICMgZW1wdHkgc3RyaW5nIGlzIGVxdWl2YWxlbnQgdG8gbm90IHNldHRpbmcgUEFUSCBhdCBhbGwsCisgICAgICAgICMgd2hpY2ggaXMgYW4gZXhjZXB0aW9uIHRvIHRoZSBydWxlIHRoYXQgaW4gYSBzdHJpbmcgbGlrZQorICAgICAgICAjICIvYmluOjovdXNyL2JpbiIgdGhlIGVtcHR5IHN0cmluZyBpbiB0aGUgbWlkZGxlIGdldHMKKyAgICAgICAgIyBpbnRlcnByZXRlZCBhcyAnLicKKyAgICAgICAgY29kZSA9ICIiImlmIDE6CisgICAgICAgICAgICBpbXBvcnQgc3lzCisgICAgICAgICAgICBwYXRoID0gIjoiLmpvaW4oc3lzLnBhdGgpCisgICAgICAgICAgICBwYXRoID0gcGF0aC5lbmNvZGUoImFzY2lpIiwgImJhY2tzbGFzaHJlcGxhY2UiKQorICAgICAgICAgICAgc3lzLnN0ZG91dC5idWZmZXIud3JpdGUocGF0aCkiIiIKKyAgICAgICAgcmMxLCBvdXQxLCBlcnIxID0gYXNzZXJ0X3B5dGhvbl9vaygnLWMnLCBjb2RlLCBQWVRIT05QQVRIPSIiKQorICAgICAgICByYzIsIG91dDIsIGVycjIgPSBhc3NlcnRfcHl0aG9uX29rKCctYycsIGNvZGUsIF9faXNvbGF0ZWQ9RmFsc2UpCisgICAgICAgICMgcmVnYXJkaW5nIHRvIFBvc2l4IHNwZWNpZmljYXRpb24sIG91dHB1dHMgc2hvdWxkIGJlIGVxdWFsCisgICAgICAgICMgZm9yIGVtcHR5IGFuZCB1bnNldCBQWVRIT05QQVRICisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0MSwgb3V0MikKKwogICAgIGRlZiB0ZXN0X2Rpc3BsYXlob29rX3VuZW5jb2RhYmxlKHNlbGYpOgogICAgICAgICBmb3IgZW5jb2RpbmcgaW4gKCdhc2NpaScsICdsYXRpbi0xJywgJ3V0Zi04Jyk6Ci0gICAgICAgICAgICBlbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQorICAgICAgICAgICAgIyBXZSBhcmUgdGVzdGluZyBhIFBZVEhPTiBlbnZpcm9ubWVudCB2YXJpYWJsZSBoZXJlLCBzbyB3ZSBjYW4ndAorICAgICAgICAgICAgIyB1c2UgLUUsIC1JLCBvciBzY3JpcHRfaGVscGVyICh3aGljaCB1c2VzIHRoZW0pLiAgU28gaW5zdGVhZCB3ZSBkbworICAgICAgICAgICAgIyBwb29yLW1hbidzIGlzb2xhdGlvbiBieSBkZWxldGluZyB0aGUgUFlUSE9OIHZhcnMgZnJvbSBlbnYuCisgICAgICAgICAgICBlbnYgPSB7a2V5OnZhbHVlIGZvciAoa2V5LHZhbHVlKSBpbiBvcy5lbnZpcm9uLmNvcHkoKS5pdGVtcygpCisgICAgICAgICAgICAgICAgICAgaWYgbm90IGtleS5zdGFydHN3aXRoKCdQWVRIT04nKX0KICAgICAgICAgICAgIGVudlsnUFlUSE9OSU9FTkNPRElORyddID0gZW5jb2RpbmcKICAgICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKAogICAgICAgICAgICAgICAgIFtzeXMuZXhlY3V0YWJsZSwgJy1pJ10sCkBAIC0yOTAsNyArMzUwLDcgQEAKICAgICAgICAgcmMsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygnLWMnLCBjb2RlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInJywgb3V0KQogICAgICAgICBzZWxmLmFzc2VydFJlZ2V4KGVyci5kZWNvZGUoJ2FzY2lpJywgJ2lnbm9yZScpLAotICAgICAgICAgICAgICAgICAgICAgICAgICdFeGNlcHRpb24gT1NFcnJvcjogLiogaWdub3JlZCcpCisgICAgICAgICAgICAgICAgICAgICAgICAgJ0V4Y2VwdGlvbiBpZ25vcmVkIGluLipcbk9TRXJyb3I6IC4qJykKIAogICAgIGRlZiB0ZXN0X2Nsb3NlZF9zdGRvdXQoc2VsZik6CiAgICAgICAgICMgSXNzdWUgIzEzNDQ0OiBpZiBzdGRvdXQgaGFzIGJlZW4gZXhwbGljaXRseSBjbG9zZWQsIHdlIHNob3VsZApAQCAtMzQyLDEyICs0MDIsMjQgQEAKICAgICAgICAgIyBWZXJpZnkgdGhhdCAtUiBlbmFibGVzIGhhc2ggcmFuZG9taXphdGlvbjoKICAgICAgICAgc2VsZi52ZXJpZnlfdmFsaWRfZmxhZygnLVInKQogICAgICAgICBoYXNoZXMgPSBbXQotICAgICAgICBmb3IgaSBpbiByYW5nZSgyKToKKyAgICAgICAgaWYgb3MuZW52aXJvbi5nZXQoJ1BZVEhPTkhBU0hTRUVEJywgJ3JhbmRvbScpICE9ICdyYW5kb20nOgorICAgICAgICAgICAgZW52ID0gZGljdChvcy5lbnZpcm9uKSAgIyBjb3B5CisgICAgICAgICAgICAjIFdlIG5lZWQgdG8gdGVzdCB0aGF0IGl0IGlzIGVuYWJsZWQgYnkgZGVmYXVsdCB3aXRob3V0CisgICAgICAgICAgICAjIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBlbmFibGluZyBpdCBmb3IgdXMuCisgICAgICAgICAgICBkZWwgZW52WydQWVRIT05IQVNIU0VFRCddCisgICAgICAgICAgICBlbnZbJ19fY2xlYW5lbnYnXSA9ICcxJyAgIyBjb25zdW1lZCBieSBhc3NlcnRfcHl0aG9uX29rKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGVudiA9IHt9CisgICAgICAgIGZvciBpIGluIHJhbmdlKDMpOgogICAgICAgICAgICAgY29kZSA9ICdwcmludChoYXNoKCJzcGFtIikpJwotICAgICAgICAgICAgcmMsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygnLWMnLCBjb2RlKQorICAgICAgICAgICAgcmMsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygnLWMnLCBjb2RlLCAqKmVudikKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmMsIDApCiAgICAgICAgICAgICBoYXNoZXMuYXBwZW5kKG91dCkKLSAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChoYXNoZXNbMF0sIGhhc2hlc1sxXSkKKyAgICAgICAgaGFzaGVzID0gc29ydGVkKHNldChoYXNoZXMpKSAgIyB1bmlxCisgICAgICAgICMgUmFyZSBjaGFuY2Ugb2YgZmFpbHVyZSBkdWUgdG8gMyByYW5kb20gc2VlZHMgaG9uZXN0bHkgYmVpbmcgZXF1YWwuCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihsZW4oaGFzaGVzKSwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0nMyBydW5zIHByb2R1Y2VkIGFuIGlkZW50aWNhbCByYW5kb20gaGFzaCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyBmb3IgInNwYW0iOiB7fScuZm9ybWF0KGhhc2hlcykpCiAKICAgICAgICAgIyBWZXJpZnkgdGhhdCBzeXMuZmxhZ3MgY29udGFpbnMgaGFzaF9yYW5kb21pemF0aW9uCiAgICAgICAgIGNvZGUgPSAnaW1wb3J0IHN5czsgcHJpbnQoInJhbmRvbSBpcyIsIHN5cy5mbGFncy5oYXNoX3JhbmRvbWl6YXRpb24pJwpAQCAtMzg0LDYgKzQ1NiwzMiBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyci5zcGxpdGxpbmVzKCkuY291bnQoYidVbmtub3duIG9wdGlvbjogLWEnKSwgMSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJycsIG91dCkKIAorICAgIEB1bml0dGVzdC5za2lwSWYoc2NyaXB0X2hlbHBlci5faW50ZXJwcmV0ZXJfcmVxdWlyZXNfZW52aXJvbm1lbnQoKSwKKyAgICAgICAgICAgICAgICAgICAgICdDYW5ub3QgcnVuIC1JIHRlc3RzIHdoZW4gUFlUSE9OIGVudiB2YXJzIGFyZSByZXF1aXJlZC4nKQorICAgIGRlZiB0ZXN0X2lzb2xhdGVkbW9kZShzZWxmKToKKyAgICAgICAgc2VsZi52ZXJpZnlfdmFsaWRfZmxhZygnLUknKQorICAgICAgICBzZWxmLnZlcmlmeV92YWxpZF9mbGFnKCctSUVzJykKKyAgICAgICAgcmMsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygnLUknLCAnLWMnLAorICAgICAgICAgICAgJ2Zyb20gc3lzIGltcG9ydCBmbGFncyBhcyBmOyAnCisgICAgICAgICAgICAncHJpbnQoZi5ub191c2VyX3NpdGUsIGYuaWdub3JlX2Vudmlyb25tZW50LCBmLmlzb2xhdGVkKScsCisgICAgICAgICAgICAjIGR1bW15dmFyIHRvIHByZXZlbnQgZXh0cmFub3VzIC1FCisgICAgICAgICAgICBkdW1teXZhcj0iIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQuc3RyaXAoKSwgYicxIDEgMScpCisgICAgICAgIHdpdGggdGVzdC5zdXBwb3J0LnRlbXBfY3dkKCkgYXMgdG1wZGlyOgorICAgICAgICAgICAgZmFrZSA9IG9zLnBhdGguam9pbih0bXBkaXIsICJ1dWlkLnB5IikKKyAgICAgICAgICAgIG1haW4gPSBvcy5wYXRoLmpvaW4odG1wZGlyLCAibWFpbi5weSIpCisgICAgICAgICAgICB3aXRoIG9wZW4oZmFrZSwgInciKSBhcyBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUoInJhaXNlIFJ1bnRpbWVFcnJvcignaXNvbGF0ZWQgbW9kZSB0ZXN0JylcbiIpCisgICAgICAgICAgICB3aXRoIG9wZW4obWFpbiwgInciKSBhcyBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUoImltcG9ydCB1dWlkXG4iKQorICAgICAgICAgICAgICAgIGYud3JpdGUoInByaW50KCdvaycpXG4iKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX291dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzeXMuZXhlY3V0YWJsZSwgbWFpbl0sIGN3ZD10bXBkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5ERVZOVUxMKQorICAgICAgICAgICAgb3V0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoW3N5cy5leGVjdXRhYmxlLCAiLUkiLCBtYWluXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN3ZD10bXBkaXIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dC5zdHJpcCgpLCBiIm9rIikKIAogZGVmIHRlc3RfbWFpbigpOgogICAgIHRlc3Quc3VwcG9ydC5ydW5fdW5pdHRlc3QoQ21kTGluZVRlc3QpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2NtZF9saW5lX3NjcmlwdC5weSBiL0xpYi90ZXN0L3Rlc3RfY21kX2xpbmVfc2NyaXB0LnB5CmluZGV4IGI0MjY5YjkuLjczNTAxNjQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY21kX2xpbmVfc2NyaXB0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY21kX2xpbmVfc2NyaXB0LnB5CkBAIC0xLDUgKzEsNiBAQAogIyB0ZXN0cyBjb21tYW5kIGxpbmUgZXhlY3V0aW9uIG9mIHNjcmlwdHMKIAoraW1wb3J0IGNvbnRleHRsaWIKIGltcG9ydCBpbXBvcnRsaWIKIGltcG9ydCBpbXBvcnRsaWIubWFjaGluZXJ5CiBpbXBvcnQgemlwaW1wb3J0CkBAIC04LDYgKzksNyBAQAogaW1wb3J0IG9zCiBpbXBvcnQgb3MucGF0aAogaW1wb3J0IHB5X2NvbXBpbGUKK2ltcG9ydCBzdWJwcm9jZXNzCiAKIGltcG9ydCB0ZXh0d3JhcAogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CkBAIC00MSwxMSArNDMsMjggQEAKIF9sb2FkZXIgPSBfX2xvYWRlcl9fIGlmIF9fbG9hZGVyX18gaXMgQnVpbHRpbkltcG9ydGVyIGVsc2UgdHlwZShfX2xvYWRlcl9fKQogcHJpbnQoJ19fbG9hZGVyX189PSVhJyAlIF9sb2FkZXIpCiBwcmludCgnX19maWxlX189PSVhJyAlIF9fZmlsZV9fKQotYXNzZXJ0RXF1YWwoX19jYWNoZWRfXywgTm9uZSkKK3ByaW50KCdfX2NhY2hlZF9fPT0lYScgJSBfX2NhY2hlZF9fKQogcHJpbnQoJ19fcGFja2FnZV9fPT0lcicgJSBfX3BhY2thZ2VfXykKKyMgQ2hlY2sgUEVQIDQ1MSBkZXRhaWxzCitpbXBvcnQgb3MucGF0aAoraWYgX19wYWNrYWdlX18gaXMgbm90IE5vbmU6CisgICAgcHJpbnQoJ19fbWFpbl9fIHdhcyBsb2NhdGVkIHRocm91Z2ggdGhlIGltcG9ydCBzeXN0ZW0nKQorICAgIGFzc2VydElkZW50aWNhbChfX3NwZWNfXy5sb2FkZXIsIF9fbG9hZGVyX18pCisgICAgZXhwZWN0ZWRfc3BlY19uYW1lID0gb3MucGF0aC5zcGxpdGV4dChvcy5wYXRoLmJhc2VuYW1lKF9fZmlsZV9fKSlbMF0KKyAgICBpZiBfX3BhY2thZ2VfXzoKKyAgICAgICAgZXhwZWN0ZWRfc3BlY19uYW1lID0gX19wYWNrYWdlX18gKyAiLiIgKyBleHBlY3RlZF9zcGVjX25hbWUKKyAgICBhc3NlcnRFcXVhbChfX3NwZWNfXy5uYW1lLCBleHBlY3RlZF9zcGVjX25hbWUpCisgICAgYXNzZXJ0RXF1YWwoX19zcGVjX18ucGFyZW50LCBfX3BhY2thZ2VfXykKKyAgICBhc3NlcnRJZGVudGljYWwoX19zcGVjX18uc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMsIE5vbmUpCisgICAgYXNzZXJ0RXF1YWwoX19zcGVjX18ub3JpZ2luLCBfX2ZpbGVfXykKKyAgICBpZiBfX3NwZWNfXy5jYWNoZWQgaXMgbm90IE5vbmU6CisgICAgICAgIGFzc2VydEVxdWFsKF9fc3BlY19fLmNhY2hlZCwgX19jYWNoZWRfXykKICMgQ2hlY2sgdGhlIHN5cyBtb2R1bGUKIGltcG9ydCBzeXMKIGFzc2VydElkZW50aWNhbChnbG9iYWxzKCksIHN5cy5tb2R1bGVzW19fbmFtZV9fXS5fX2RpY3RfXykKK2lmIF9fc3BlY19fIGlzIG5vdCBOb25lOgorICAgICMgWFhYOiBXZSdyZSBub3QgY3VycmVudGx5IG1ha2luZyBfX21haW5fXyBhdmFpbGFibGUgdW5kZXIgaXRzIHJlYWwgbmFtZQorICAgIHBhc3MgIyBhc3NlcnRJZGVudGljYWwoZ2xvYmFscygpLCBzeXMubW9kdWxlc1tfX3NwZWNfXy5uYW1lXS5fX2RpY3RfXykKIGZyb20gdGVzdCBpbXBvcnQgdGVzdF9jbWRfbGluZV9zY3JpcHQKIGV4YW1wbGVfYXJnc19saXN0ID0gdGVzdF9jbWRfbGluZV9zY3JpcHQuZXhhbXBsZV9hcmdzCiBhc3NlcnRFcXVhbChzeXMuYXJndlsxOl0sIGV4YW1wbGVfYXJnc19saXN0KQpAQCAtOTUsNyArMTE0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfbG9hZGVyKToKICAgICAgICAgaWYgdmVyYm9zZSA+IDE6CiAgICAgICAgICAgICBwcmludCgiT3V0cHV0IGZyb20gdGVzdCBzY3JpcHQgJXI6IiAlIHNjcmlwdF9uYW1lKQotICAgICAgICAgICAgcHJpbnQoZGF0YSkKKyAgICAgICAgICAgIHByaW50KHJlcHIoZGF0YSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhpdF9jb2RlLCAwKQogICAgICAgICBwcmludGVkX2xvYWRlciA9ICdfX2xvYWRlcl9fPT0lYScgJSBleHBlY3RlZF9sb2FkZXIKICAgICAgICAgcHJpbnRlZF9maWxlID0gJ19fZmlsZV9fPT0lYScgJSBleHBlY3RlZF9maWxlCkBAIC0xMjMsNyArMTQyLDcgQEAKICAgICAgICAgaWYgbm90IF9fZGVidWdfXzoKICAgICAgICAgICAgIGNtZF9saW5lX3N3aXRjaGVzICs9ICgnLScgKyAnTycgKiBzeXMuZmxhZ3Mub3B0aW1pemUsKQogICAgICAgICBydW5fYXJncyA9IGNtZF9saW5lX3N3aXRjaGVzICsgKHNjcmlwdF9uYW1lLCkgKyB0dXBsZShleGFtcGxlX2FyZ3MpCi0gICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soKnJ1bl9hcmdzKQorICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCpydW5fYXJncywgX19pc29sYXRlZD1GYWxzZSkKICAgICAgICAgc2VsZi5fY2hlY2tfb3V0cHV0KHNjcmlwdF9uYW1lLCByYywgb3V0ICsgZXJyLCBleHBlY3RlZF9maWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfYXJndjAsIGV4cGVjdGVkX3BhdGgwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfcGFja2FnZSwgZXhwZWN0ZWRfbG9hZGVyKQpAQCAtMTM0LDcgKzE1Myw3IEBACiAgICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fZmFpbHVyZSgqcnVuX2FyZ3MpCiAgICAgICAgIGlmIHZlcmJvc2UgPiAxOgogICAgICAgICAgICAgcHJpbnQoJ091dHB1dCBmcm9tIHRlc3Qgc2NyaXB0ICVyOicgJSBzY3JpcHRfbmFtZSkKLSAgICAgICAgICAgIHByaW50KGVycikKKyAgICAgICAgICAgIHByaW50KHJlcHIoZXJyKSkKICAgICAgICAgICAgIHByaW50KCdFeHBlY3RlZCBvdXRwdXQ6ICVyJyAlIGV4cGVjdGVkX21zZykKICAgICAgICAgc2VsZi5hc3NlcnRJbihleHBlY3RlZF9tc2cuZW5jb2RlKCd1dGYtOCcpLCBlcnIpCiAKQEAgLTE1Niw2ICsxNzUsNTMgQEAKICAgICAgICAgZXhwZWN0ZWQgPSByZXByKGltcG9ydGxpYi5tYWNoaW5lcnkuQnVpbHRpbkltcG9ydGVyKS5lbmNvZGUoInV0Zi04IikKICAgICAgICAgc2VsZi5hc3NlcnRJbihleHBlY3RlZCwgb3V0KQogCisgICAgQGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIKKyAgICBkZWYgaW50ZXJhY3RpdmVfcHl0aG9uKHNlbGYsIHNlcGFyYXRlX3N0ZGVycj1GYWxzZSk6CisgICAgICAgIGlmIHNlcGFyYXRlX3N0ZGVycjoKKyAgICAgICAgICAgIHAgPSBzcGF3bl9weXRob24oJy1pJywgYnVmc2l6ZT0xLCBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICAgICAgc3RkZXJyID0gcC5zdGRlcnIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHAgPSBzcGF3bl9weXRob24oJy1pJywgYnVmc2l6ZT0xLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpCisgICAgICAgICAgICBzdGRlcnIgPSBwLnN0ZG91dAorICAgICAgICB0cnk6CisgICAgICAgICAgICAjIERyYWluIHN0ZGVyciB1bnRpbCBwcm9tcHQKKyAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgZGF0YSA9IHN0ZGVyci5yZWFkKDQpCisgICAgICAgICAgICAgICAgaWYgZGF0YSA9PSBiIj4+PiAiOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIHN0ZGVyci5yZWFkbGluZSgpCisgICAgICAgICAgICB5aWVsZCBwCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBraWxsX3B5dGhvbihwKQorICAgICAgICAgICAgc3RkZXJyLmNsb3NlKCkKKworICAgIGRlZiBjaGVja19yZXBsX3N0ZG91dF9mbHVzaChzZWxmLCBzZXBhcmF0ZV9zdGRlcnI9RmFsc2UpOgorICAgICAgICB3aXRoIHNlbGYuaW50ZXJhY3RpdmVfcHl0aG9uKHNlcGFyYXRlX3N0ZGVycikgYXMgcDoKKyAgICAgICAgICAgIHAuc3RkaW4ud3JpdGUoYiJwcmludCgnZm9vJylcbiIpCisgICAgICAgICAgICBwLnN0ZGluLmZsdXNoKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidmb28nLCBwLnN0ZG91dC5yZWFkbGluZSgpLnN0cmlwKCkpCisKKyAgICBkZWYgY2hlY2tfcmVwbF9zdGRlcnJfZmx1c2goc2VsZiwgc2VwYXJhdGVfc3RkZXJyPUZhbHNlKToKKyAgICAgICAgd2l0aCBzZWxmLmludGVyYWN0aXZlX3B5dGhvbihzZXBhcmF0ZV9zdGRlcnIpIGFzIHA6CisgICAgICAgICAgICBwLnN0ZGluLndyaXRlKGIiMS8wXG4iKQorICAgICAgICAgICAgcC5zdGRpbi5mbHVzaCgpCisgICAgICAgICAgICBzdGRlcnIgPSBwLnN0ZGVyciBpZiBzZXBhcmF0ZV9zdGRlcnIgZWxzZSBwLnN0ZG91dAorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihiJ1RyYWNlYmFjayAnLCBzdGRlcnIucmVhZGxpbmUoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oYidGaWxlICI8c3RkaW4+IicsIHN0ZGVyci5yZWFkbGluZSgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihiJ1plcm9EaXZpc2lvbkVycm9yJywgc3RkZXJyLnJlYWRsaW5lKCkpCisKKyAgICBkZWYgdGVzdF9yZXBsX3N0ZG91dF9mbHVzaChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19yZXBsX3N0ZG91dF9mbHVzaCgpCisKKyAgICBkZWYgdGVzdF9yZXBsX3N0ZG91dF9mbHVzaF9zZXBhcmF0ZV9zdGRlcnIoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfcmVwbF9zdGRvdXRfZmx1c2goVHJ1ZSkKKworICAgIGRlZiB0ZXN0X3JlcGxfc3RkZXJyX2ZsdXNoKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3JlcGxfc3RkZXJyX2ZsdXNoKCkKKworICAgIGRlZiB0ZXN0X3JlcGxfc3RkZXJyX2ZsdXNoX3NlcGFyYXRlX3N0ZGVycihzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19yZXBsX3N0ZGVycl9mbHVzaChUcnVlKQorCiAgICAgZGVmIHRlc3RfYmFzaWNfc2NyaXB0KHNlbGYpOgogICAgICAgICB3aXRoIHRlbXBfZGlyKCkgYXMgc2NyaXB0X2RpcjoKICAgICAgICAgICAgIHNjcmlwdF9uYW1lID0gX21ha2VfdGVzdF9zY3JpcHQoc2NyaXB0X2RpciwgJ3NjcmlwdCcpCkBAIC0yOTQsOSArMzYwLDkgQEAKICAgICAgICAgICAgICAgICBwa2dfZGlyID0gb3MucGF0aC5qb2luKHNjcmlwdF9kaXIsICd0ZXN0X3BrZycpCiAgICAgICAgICAgICAgICAgbWFrZV9wa2cocGtnX2RpciwgImltcG9ydCBzeXM7IHByaW50KCdpbml0X2FyZ3YwPT0lcicgJSBzeXMuYXJndlswXSkiKQogICAgICAgICAgICAgICAgIHNjcmlwdF9uYW1lID0gX21ha2VfdGVzdF9zY3JpcHQocGtnX2RpciwgJ3NjcmlwdCcpCi0gICAgICAgICAgICAgICAgcmMsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygnLW0nLCAndGVzdF9wa2cuc2NyaXB0JywgKmV4YW1wbGVfYXJncykKKyAgICAgICAgICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCctbScsICd0ZXN0X3BrZy5zY3JpcHQnLCAqZXhhbXBsZV9hcmdzLCBfX2lzb2xhdGVkPUZhbHNlKQogICAgICAgICAgICAgICAgIGlmIHZlcmJvc2UgPiAxOgotICAgICAgICAgICAgICAgICAgICBwcmludChvdXQpCisgICAgICAgICAgICAgICAgICAgIHByaW50KHJlcHIob3V0KSkKICAgICAgICAgICAgICAgICBleHBlY3RlZCA9ICJpbml0X2FyZ3YwPT0lciIgJSAnLW0nCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihleHBlY3RlZC5lbmNvZGUoJ3V0Zi04JyksIG91dCkKICAgICAgICAgICAgICAgICBzZWxmLl9jaGVja19vdXRwdXQoc2NyaXB0X25hbWUsIHJjLCBvdXQsCkBAIC0zMTEsOSArMzc3LDEwIEBACiAgICAgICAgICAgICAgICAgd2l0aCBvcGVuKCItYyIsICJ3IikgYXMgZjoKICAgICAgICAgICAgICAgICAgICAgZi53cml0ZSgiZGF0YSIpCiAgICAgICAgICAgICAgICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soJy1jJywKLSAgICAgICAgICAgICAgICAgICAgICAgICdpbXBvcnQgc3lzOyBwcmludCgic3lzLnBhdGhbMF09PSVyIiAlIHN5cy5wYXRoWzBdKScpCisgICAgICAgICAgICAgICAgICAgICAgICAnaW1wb3J0IHN5czsgcHJpbnQoInN5cy5wYXRoWzBdPT0lciIgJSBzeXMucGF0aFswXSknLAorICAgICAgICAgICAgICAgICAgICAgICAgX19pc29sYXRlZD1GYWxzZSkKICAgICAgICAgICAgICAgICAgICAgaWYgdmVyYm9zZSA+IDE6Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludChvdXQpCisgICAgICAgICAgICAgICAgICAgICAgICBwcmludChyZXByKG91dCkpCiAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gInN5cy5wYXRoWzBdPT0lciIgJSAnJwogICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKGV4cGVjdGVkLmVuY29kZSgndXRmLTgnKSwgb3V0KQogCkBAIC0zMjUsNyArMzkyLDggQEAKICAgICAgICAgICAgIHdpdGggc3VwcG9ydC5jaGFuZ2VfY3dkKHBhdGg9c2NyaXB0X2Rpcik6CiAgICAgICAgICAgICAgICAgd2l0aCBvcGVuKCItbSIsICJ3IikgYXMgZjoKICAgICAgICAgICAgICAgICAgICAgZi53cml0ZSgiZGF0YSIpCi0gICAgICAgICAgICAgICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soJy1tJywgJ290aGVyJywgKmV4YW1wbGVfYXJncykKKyAgICAgICAgICAgICAgICAgICAgcmMsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygnLW0nLCAnb3RoZXInLCAqZXhhbXBsZV9hcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9faXNvbGF0ZWQ9RmFsc2UpCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2NoZWNrX291dHB1dChzY3JpcHRfbmFtZSwgcmMsIG91dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0X25hbWUsIHNjcmlwdF9uYW1lLCAnJywgJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltcG9ydGxpYi5tYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcikKQEAgLTM0Miw3ICs0MTAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6IHJhaXNlIFZhbHVlRXJyb3IiKQogICAgICAgICAgICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fZmFpbHVyZSgnLW0nLCAndGVzdF9wa2cub3RoZXInLCAqZXhhbXBsZV9hcmdzKQogICAgICAgICAgICAgICAgIGlmIHZlcmJvc2UgPiAxOgotICAgICAgICAgICAgICAgICAgICBwcmludChvdXQpCisgICAgICAgICAgICAgICAgICAgIHByaW50KHJlcHIob3V0KSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJjLCAxKQogCiAgICAgZGVmIHRlc3RfcGVwXzQwOV92ZXJiaWFnZShzZWxmKToKQEAgLTM4Niw2ICs0NTQsMjQgQEAKICAgICAgICAgICAgICdzdGRvdXQ9JXIgc3RkZXJyPSVyJyAlIChzdGRvdXQsIHN0ZGVycikpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcmMpCiAKKyAgICBkZWYgdGVzdF9pc3N1ZTIwNTAwX2V4aXRfd2l0aF9leGNlcHRpb25fdmFsdWUoc2VsZik6CisgICAgICAgIHNjcmlwdCA9IHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBpbXBvcnQgc3lzCisgICAgICAgICAgICBlcnJvciA9IE5vbmUKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdzb21lIHRleHQnKQorICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgICAgIGVycm9yID0gZXJyCisKKyAgICAgICAgICAgIGlmIGVycm9yOgorICAgICAgICAgICAgICAgIHN5cy5leGl0KGVycm9yKQorICAgICAgICAgICAgIiIiKQorICAgICAgICB3aXRoIHRlbXBfZGlyKCkgYXMgc2NyaXB0X2RpcjoKKyAgICAgICAgICAgIHNjcmlwdF9uYW1lID0gX21ha2VfdGVzdF9zY3JpcHQoc2NyaXB0X2RpciwgJ3NjcmlwdCcsIHNjcmlwdCkKKyAgICAgICAgICAgIGV4aXRjb2RlLCBzdGRvdXQsIHN0ZGVyciA9IGFzc2VydF9weXRob25fZmFpbHVyZShzY3JpcHRfbmFtZSkKKyAgICAgICAgICAgIHRleHQgPSBzdGRlcnIuZGVjb2RlKCdhc2NpaScpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRleHQsICJzb21lIHRleHQiKQorCiAKIGRlZiB0ZXN0X21haW4oKToKICAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChDbWRMaW5lVGVzdCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY29kZV9tb2R1bGUucHkgYi9MaWIvdGVzdC90ZXN0X2NvZGVfbW9kdWxlLnB5CmluZGV4IGFkZWYxNzAuLjdhODBhODAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY29kZV9tb2R1bGUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jb2RlX21vZHVsZS5weQpAQCAtNTEsNyArNTEsNyBAQAogICAgICAgICBzZWxmLmluZnVuYy5zaWRlX2VmZmVjdCA9IFsidW5kZWZpbmVkIiwgRU9GRXJyb3IoJ0ZpbmlzaGVkJyldCiAgICAgICAgIHNlbGYuY29uc29sZS5pbnRlcmFjdCgpCiAgICAgICAgIGZvciBjYWxsIGluIHNlbGYuc3RkZXJyLm1ldGhvZF9jYWxsczoKLSAgICAgICAgICAgIGlmICdOYW1lRXJyb3I6JyBpbiAnJy5qb2luKGNhbGxbMV0pOgorICAgICAgICAgICAgaWYgJ05hbWVFcnJvcicgaW4gJycuam9pbihjYWxsWzFdKToKICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoIk5vIHN5bnRheCBlcnJvciBmcm9tIGNvbnNvbGUiKQpAQCAtNjQsNiArNjQsMjAgQEAKICAgICAgICAgc2VsZi5jb25zb2xlLmludGVyYWN0KCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhvb2suY2FsbGVkKQogCisgICAgZGVmIHRlc3RfYmFubmVyKHNlbGYpOgorICAgICAgICAjIHdpdGggYmFubmVyCisgICAgICAgIHNlbGYuaW5mdW5jLnNpZGVfZWZmZWN0ID0gRU9GRXJyb3IoJ0ZpbmlzaGVkJykKKyAgICAgICAgc2VsZi5jb25zb2xlLmludGVyYWN0KGJhbm5lcj0nRm9vJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5zdGRlcnIubWV0aG9kX2NhbGxzKSwgMikKKyAgICAgICAgYmFubmVyX2NhbGwgPSBzZWxmLnN0ZGVyci5tZXRob2RfY2FsbHNbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYW5uZXJfY2FsbCwgWyd3cml0ZScsICgnRm9vXG4nLCksIHt9XSkKKworICAgICAgICAjIG5vIGJhbm5lcgorICAgICAgICBzZWxmLnN0ZGVyci5yZXNldF9tb2NrKCkKKyAgICAgICAgc2VsZi5pbmZ1bmMuc2lkZV9lZmZlY3QgPSBFT0ZFcnJvcignRmluaXNoZWQnKQorICAgICAgICBzZWxmLmNvbnNvbGUuaW50ZXJhY3QoYmFubmVyPScnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLnN0ZGVyci5tZXRob2RfY2FsbHMpLCAxKQorCiAKIGRlZiB0ZXN0X21haW4oKToKICAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChUZXN0SW50ZXJhY3RpdmVDb25zb2xlKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jb2RlY2NhbGxiYWNrcy5weSBiL0xpYi90ZXN0L3Rlc3RfY29kZWNjYWxsYmFja3MucHkKaW5kZXggZmQ4ODUwNS4uMTMyN2YxMSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jb2RlY2NhbGxiYWNrcy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NvZGVjY2FsbGJhY2tzLnB5CkBAIC02LDE0ICs2LDYgQEAKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IHdhcm5pbmdzCiAKLXRyeToKLSAgICBpbXBvcnQgY3R5cGVzCi1leGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgY3R5cGVzID0gTm9uZQotICAgIFNJWkVPRl9XQ0hBUl9UID0gLTEKLWVsc2U6Ci0gICAgU0laRU9GX1dDSEFSX1QgPSBjdHlwZXMuc2l6ZW9mKGN0eXBlcy5jX3djaGFyKQotCiBjbGFzcyBQb3NSZXR1cm46CiAgICAgIyB0aGlzIGNhbiBiZSB1c2VkIGZvciBjb25maWd1cmFibGUgY2FsbGJhY2tzCiAKQEAgLTIxMiwxNCArMjA0LDEyIEBACiAgICAgICAgICAgICAgICAgYiJceDAwXHgwMFx4MDBceDAwXHgwMCIuZGVjb2RlLAogICAgICAgICAgICAgICAgICJ1bmljb2RlLWludGVybmFsIiwKICAgICAgICAgICAgICkKLSAgICAgICAgaWYgU0laRU9GX1dDSEFSX1QgPT0gNDoKLSAgICAgICAgICAgIGRlZiBoYW5kbGVyX3VuaWNvZGVpbnRlcm5hbChleGMpOgotICAgICAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGV4YywgVW5pY29kZURlY29kZUVycm9yKToKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJkb24ndCBrbm93IGhvdyB0byBoYW5kbGUgJXIiICUgZXhjKQotICAgICAgICAgICAgICAgIHJldHVybiAoIlx4MDEiLCAxKQorICAgICAgICAgICAgaWYgbGVuKCdcMCcuZW5jb2RlKCd1bmljb2RlLWludGVybmFsJykpID09IDQ6CisgICAgICAgICAgICAgICAgZGVmIGhhbmRsZXJfdW5pY29kZWludGVybmFsKGV4Yyk6CisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGV4YywgVW5pY29kZURlY29kZUVycm9yKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiZG9uJ3Qga25vdyBob3cgdG8gaGFuZGxlICVyIiAlIGV4YykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgiXHgwMSIsIDEpCiAKLSAgICAgICAgICAgIHdpdGggdGVzdC5zdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCgndW5pY29kZV9pbnRlcm5hbCBjb2RlYyBoYXMgYmVlbiAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RlcHJlY2F0ZWQnLCBEZXByZWNhdGlvbldhcm5pbmcpKToKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICAgICAgICAgICBiIlx4MDBceDAwXHgwMFx4MDBceDAwIi5kZWNvZGUoInVuaWNvZGUtaW50ZXJuYWwiLCAiaWdub3JlIiksCiAgICAgICAgICAgICAgICAgICAgICJcdTAwMDAiCkBAIC0zNjQsMTIgKzM1NCwxMSBAQAogICAgICAgICAgICAgWyJhc2NpaSIsICJcdWZmZmZ4IiwgMCwgMSwgIm91Y2giXSwKICAgICAgICAgICAgICInYXNjaWknIGNvZGVjIGNhbid0IGVuY29kZSBjaGFyYWN0ZXIgJ1xcdWZmZmYnIGluIHBvc2l0aW9uIDA6IG91Y2giCiAgICAgICAgICkKLSAgICAgICAgaWYgU0laRU9GX1dDSEFSX1QgPT0gNDoKLSAgICAgICAgICAgIHNlbGYuY2hlY2tfZXhjZXB0aW9ub2JqZWN0YXJncygKLSAgICAgICAgICAgICAgICBVbmljb2RlRW5jb2RlRXJyb3IsCi0gICAgICAgICAgICAgICAgWyJhc2NpaSIsICJcVTAwMDEwMDAweCIsIDAsIDEsICJvdWNoIl0sCi0gICAgICAgICAgICAgICAgIidhc2NpaScgY29kZWMgY2FuJ3QgZW5jb2RlIGNoYXJhY3RlciAnXFxVMDAwMTAwMDAnIGluIHBvc2l0aW9uIDA6IG91Y2giCi0gICAgICAgICAgICApCisgICAgICAgIHNlbGYuY2hlY2tfZXhjZXB0aW9ub2JqZWN0YXJncygKKyAgICAgICAgICAgIFVuaWNvZGVFbmNvZGVFcnJvciwKKyAgICAgICAgICAgIFsiYXNjaWkiLCAiXFUwMDAxMDAwMHgiLCAwLCAxLCAib3VjaCJdLAorICAgICAgICAgICAgIidhc2NpaScgY29kZWMgY2FuJ3QgZW5jb2RlIGNoYXJhY3RlciAnXFxVMDAwMTAwMDAnIGluIHBvc2l0aW9uIDA6IG91Y2giCisgICAgICAgICkKIAogICAgIGRlZiB0ZXN0X3VuaWNvZGVkZWNvZGVlcnJvcihzZWxmKToKICAgICAgICAgc2VsZi5jaGVja19leGNlcHRpb25vYmplY3RhcmdzKApAQCAtMzk5LDEyICszODgsMTEgQEAKICAgICAgICAgICAgIFsiZ1x1ZmZmZnJrIiwgMSwgMiwgIm91Y2giXSwKICAgICAgICAgICAgICJjYW4ndCB0cmFuc2xhdGUgY2hhcmFjdGVyICdcXHVmZmZmJyBpbiBwb3NpdGlvbiAxOiBvdWNoIgogICAgICAgICApCi0gICAgICAgIGlmIFNJWkVPRl9XQ0hBUl9UID09IDQ6Ci0gICAgICAgICAgICBzZWxmLmNoZWNrX2V4Y2VwdGlvbm9iamVjdGFyZ3MoCi0gICAgICAgICAgICAgICAgVW5pY29kZVRyYW5zbGF0ZUVycm9yLAotICAgICAgICAgICAgICAgIFsiZ1xVMDAwMTAwMDByayIsIDEsIDIsICJvdWNoIl0sCi0gICAgICAgICAgICAgICAgImNhbid0IHRyYW5zbGF0ZSBjaGFyYWN0ZXIgJ1xcVTAwMDEwMDAwJyBpbiBwb3NpdGlvbiAxOiBvdWNoIgotICAgICAgICAgICAgKQorICAgICAgICBzZWxmLmNoZWNrX2V4Y2VwdGlvbm9iamVjdGFyZ3MoCisgICAgICAgICAgICBVbmljb2RlVHJhbnNsYXRlRXJyb3IsCisgICAgICAgICAgICBbImdcVTAwMDEwMDAwcmsiLCAxLCAyLCAib3VjaCJdLAorICAgICAgICAgICAgImNhbid0IHRyYW5zbGF0ZSBjaGFyYWN0ZXIgJ1xcVTAwMDEwMDAwJyBpbiBwb3NpdGlvbiAxOiBvdWNoIgorICAgICAgICApCiAgICAgICAgIHNlbGYuY2hlY2tfZXhjZXB0aW9ub2JqZWN0YXJncygKICAgICAgICAgICAgIFVuaWNvZGVUcmFuc2xhdGVFcnJvciwKICAgICAgICAgICAgIFsiZ1x4ZmNyayIsIDEsIDMsICJvdWNoIl0sCkBAIC00MzEsNiArNDE5LDE2IEBACiAgICAgICAgICAgICBjb2RlY3Muc3RyaWN0X2Vycm9ycywKICAgICAgICAgICAgIFVuaWNvZGVFbmNvZGVFcnJvcigiYXNjaWkiLCAiXHUzMDQyIiwgMCwgMSwgIm91Y2giKQogICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgVW5pY29kZURlY29kZUVycm9yLAorICAgICAgICAgICAgY29kZWNzLnN0cmljdF9lcnJvcnMsCisgICAgICAgICAgICBVbmljb2RlRGVjb2RlRXJyb3IoImFzY2lpIiwgYnl0ZWFycmF5KGIiXHhmZiIpLCAwLCAxLCAib3VjaCIpCisgICAgICAgICkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBVbmljb2RlVHJhbnNsYXRlRXJyb3IsCisgICAgICAgICAgICBjb2RlY3Muc3RyaWN0X2Vycm9ycywKKyAgICAgICAgICAgIFVuaWNvZGVUcmFuc2xhdGVFcnJvcigiXHUzMDQyIiwgMCwgMSwgIm91Y2giKQorICAgICAgICApCiAKICAgICBkZWYgdGVzdF9iYWRhbmRnb29kaWdub3JlZXhjZXB0aW9ucyhzZWxmKToKICAgICAgICAgIyAiaWdub3JlIiBjb21wbGFpbnMgYWJvdXQgYSBub24tZXhjZXB0aW9uIHBhc3NlZCBpbgpAQCAtNDQ4LDE4ICs0NDYsMTggQEAKICAgICAgICAgIyBJZiB0aGUgY29ycmVjdCBleGNlcHRpb24gaXMgcGFzc2VkIGluLCAiaWdub3JlIiByZXR1cm5zIGFuIGVtcHR5IHJlcGxhY2VtZW50CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgICBjb2RlY3MuaWdub3JlX2Vycm9ycygKLSAgICAgICAgICAgICAgICBVbmljb2RlRW5jb2RlRXJyb3IoImFzY2lpIiwgIlx1MzA0MiIsIDAsIDEsICJvdWNoIikpLAotICAgICAgICAgICAgKCIiLCAxKQorICAgICAgICAgICAgICAgIFVuaWNvZGVFbmNvZGVFcnJvcigiYXNjaWkiLCAiYVx1MzA0MmIiLCAxLCAyLCAib3VjaCIpKSwKKyAgICAgICAgICAgICgiIiwgMikKICAgICAgICAgKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICAgY29kZWNzLmlnbm9yZV9lcnJvcnMoCi0gICAgICAgICAgICAgICAgVW5pY29kZURlY29kZUVycm9yKCJhc2NpaSIsIGJ5dGVhcnJheShiIlx4ZmYiKSwgMCwgMSwgIm91Y2giKSksCi0gICAgICAgICAgICAoIiIsIDEpCisgICAgICAgICAgICAgICAgVW5pY29kZURlY29kZUVycm9yKCJhc2NpaSIsIGJ5dGVhcnJheShiImFceGZmYiIpLCAxLCAyLCAib3VjaCIpKSwKKyAgICAgICAgICAgICgiIiwgMikKICAgICAgICAgKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICAgY29kZWNzLmlnbm9yZV9lcnJvcnMoCi0gICAgICAgICAgICAgICAgVW5pY29kZVRyYW5zbGF0ZUVycm9yKCJcdTMwNDIiLCAwLCAxLCAib3VjaCIpKSwKLSAgICAgICAgICAgICgiIiwgMSkKKyAgICAgICAgICAgICAgICBVbmljb2RlVHJhbnNsYXRlRXJyb3IoImFcdTMwNDJiIiwgMSwgMiwgIm91Y2giKSksCisgICAgICAgICAgICAoIiIsIDIpCiAgICAgICAgICkKIAogICAgIGRlZiB0ZXN0X2JhZGFuZGdvb2RyZXBsYWNlZXhjZXB0aW9ucyhzZWxmKToKQEAgLTQ4OCwxOCArNDg2LDE4IEBACiAgICAgICAgICMgV2l0aCB0aGUgY29ycmVjdCBleGNlcHRpb24sICJyZXBsYWNlIiByZXR1cm5zIGFuICI/IiBvciAiXHVmZmZkIiByZXBsYWNlbWVudAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICAgY29kZWNzLnJlcGxhY2VfZXJyb3JzKAotICAgICAgICAgICAgICAgIFVuaWNvZGVFbmNvZGVFcnJvcigiYXNjaWkiLCAiXHUzMDQyIiwgMCwgMSwgIm91Y2giKSksCi0gICAgICAgICAgICAoIj8iLCAxKQorICAgICAgICAgICAgICAgIFVuaWNvZGVFbmNvZGVFcnJvcigiYXNjaWkiLCAiYVx1MzA0MmIiLCAxLCAyLCAib3VjaCIpKSwKKyAgICAgICAgICAgICgiPyIsIDIpCiAgICAgICAgICkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgIGNvZGVjcy5yZXBsYWNlX2Vycm9ycygKLSAgICAgICAgICAgICAgICBVbmljb2RlRGVjb2RlRXJyb3IoImFzY2lpIiwgYnl0ZWFycmF5KGIiXHhmZiIpLCAwLCAxLCAib3VjaCIpKSwKLSAgICAgICAgICAgICgiXHVmZmZkIiwgMSkKKyAgICAgICAgICAgICAgICBVbmljb2RlRGVjb2RlRXJyb3IoImFzY2lpIiwgYnl0ZWFycmF5KGIiYVx4ZmZiIiksIDEsIDIsICJvdWNoIikpLAorICAgICAgICAgICAgKCJcdWZmZmQiLCAyKQogICAgICAgICApCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgICBjb2RlY3MucmVwbGFjZV9lcnJvcnMoCi0gICAgICAgICAgICAgICAgVW5pY29kZVRyYW5zbGF0ZUVycm9yKCJcdTMwNDIiLCAwLCAxLCAib3VjaCIpKSwKLSAgICAgICAgICAgICgiXHVmZmZkIiwgMSkKKyAgICAgICAgICAgICAgICBVbmljb2RlVHJhbnNsYXRlRXJyb3IoImFcdTMwNDJiIiwgMSwgMiwgIm91Y2giKSksCisgICAgICAgICAgICAoIlx1ZmZmZCIsIDIpCiAgICAgICAgICkKIAogICAgIGRlZiB0ZXN0X2JhZGFuZGdvb2R4bWxjaGFycmVmcmVwbGFjZWV4Y2VwdGlvbnMoc2VsZik6CkBAIC01MjcsMTMgKzUyNSwxNiBAQAogICAgICAgICAgICAgVW5pY29kZVRyYW5zbGF0ZUVycm9yKCJcdTMwNDIiLCAwLCAxLCAib3VjaCIpCiAgICAgICAgICkKICAgICAgICAgIyBVc2UgdGhlIGNvcnJlY3QgZXhjZXB0aW9uCi0gICAgICAgIGNzID0gKDAsIDEsIDksIDEwLCA5OSwgMTAwLCA5OTksIDEwMDAsIDk5OTksIDEwMDAwLCAweDMwNDIpCisgICAgICAgIGNzID0gKDAsIDEsIDksIDEwLCA5OSwgMTAwLCA5OTksIDEwMDAsIDk5OTksIDEwMDAwLCA5OTk5OSwgMTAwMDAwLAorICAgICAgICAgICAgICA5OTk5OTksIDEwMDAwMDApCisgICAgICAgIGNzICs9ICgweGQ4MDAsIDB4ZGZmZikKICAgICAgICAgcyA9ICIiLmpvaW4oY2hyKGMpIGZvciBjIGluIGNzKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICAgY29kZWNzLnhtbGNoYXJyZWZyZXBsYWNlX2Vycm9ycygKLSAgICAgICAgICAgICAgICBVbmljb2RlRW5jb2RlRXJyb3IoImFzY2lpIiwgcywgMCwgbGVuKHMpLCAib3VjaCIpCisgICAgICAgICAgICAgICAgVW5pY29kZUVuY29kZUVycm9yKCJhc2NpaSIsICJhIiArIHMgKyAiYiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIDEgKyBsZW4ocyksICJvdWNoIikKICAgICAgICAgICAgICksCi0gICAgICAgICAgICAoIiIuam9pbigiJiMlZDsiICUgb3JkKGMpIGZvciBjIGluIHMpLCBsZW4ocykpCisgICAgICAgICAgICAoIiIuam9pbigiJiMlZDsiICUgYyBmb3IgYyBpbiBjcyksIDEgKyBsZW4ocykpCiAgICAgICAgICkKIAogICAgIGRlZiB0ZXN0X2JhZGFuZGdvb2RiYWNrc2xhc2hyZXBsYWNlZXhjZXB0aW9ucyhzZWxmKToKQEAgLTU2MSw1NSArNTYyLDE0MSBAQAogICAgICAgICAgICAgVW5pY29kZVRyYW5zbGF0ZUVycm9yKCJcdTMwNDIiLCAwLCAxLCAib3VjaCIpCiAgICAgICAgICkKICAgICAgICAgIyBVc2UgdGhlIGNvcnJlY3QgZXhjZXB0aW9uCisgICAgICAgIHRlc3RzID0gWworICAgICAgICAgICAgKCJcdTMwNDIiLCAiXFx1MzA0MiIpLAorICAgICAgICAgICAgKCJcbiIsICJcXHgwYSIpLAorICAgICAgICAgICAgKCJhIiwgIlxceDYxIiksCisgICAgICAgICAgICAoIlx4MDAiLCAiXFx4MDAiKSwKKyAgICAgICAgICAgICgiXHhmZiIsICJcXHhmZiIpLAorICAgICAgICAgICAgKCJcdTAxMDAiLCAiXFx1MDEwMCIpLAorICAgICAgICAgICAgKCJcdWZmZmYiLCAiXFx1ZmZmZiIpLAorICAgICAgICAgICAgKCJcVTAwMDEwMDAwIiwgIlxcVTAwMDEwMDAwIiksCisgICAgICAgICAgICAoIlxVMDAxMGZmZmYiLCAiXFxVMDAxMGZmZmYiKSwKKyAgICAgICAgICAgICMgTG9uZSBzdXJyb2dhdGVzCisgICAgICAgICAgICAoIlx1ZDgwMCIsICJcXHVkODAwIiksCisgICAgICAgICAgICAoIlx1ZGZmZiIsICJcXHVkZmZmIiksCisgICAgICAgICAgICAoIlx1ZDgwMFx1ZGZmZiIsICJcXHVkODAwXFx1ZGZmZiIpLAorICAgICAgICBdCisgICAgICAgIGZvciBzLCByIGluIHRlc3RzOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3Qoc3RyPXMpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgICAgIGNvZGVjcy5iYWNrc2xhc2hyZXBsYWNlX2Vycm9ycygKKyAgICAgICAgICAgICAgICAgICAgICAgIFVuaWNvZGVFbmNvZGVFcnJvcigiYXNjaWkiLCAiYSIgKyBzICsgImIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIDEgKyBsZW4ocyksICJvdWNoIikpLAorICAgICAgICAgICAgICAgICAgICAociwgMSArIGxlbihzKSkKKyAgICAgICAgICAgICAgICApCisKKyAgICBkZWYgdGVzdF9iYWRhbmRnb29kc3Vycm9nYXRlZXNjYXBlZXhjZXB0aW9ucyhzZWxmKToKKyAgICAgICAgc3Vycm9nYXRlZXNjYXBlX2Vycm9ycyA9IGNvZGVjcy5sb29rdXBfZXJyb3IoJ3N1cnJvZ2F0ZWVzY2FwZScpCisgICAgICAgICMgInN1cnJvZ2F0ZWVzY2FwZSIgY29tcGxhaW5zIGFib3V0IGEgbm9uLWV4Y2VwdGlvbiBwYXNzZWQgaW4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgIFR5cGVFcnJvciwKKyAgICAgICAgICAgc3Vycm9nYXRlZXNjYXBlX2Vycm9ycywKKyAgICAgICAgICAgNDIKKyAgICAgICAgKQorICAgICAgICAjICJzdXJyb2dhdGVlc2NhcGUiIGNvbXBsYWlucyBhYm91dCB0aGUgd3JvbmcgZXhjZXB0aW9uIHR5cGVzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICBUeXBlRXJyb3IsCisgICAgICAgICAgIHN1cnJvZ2F0ZWVzY2FwZV9lcnJvcnMsCisgICAgICAgICAgIFVuaWNvZGVFcnJvcigib3VjaCIpCisgICAgICAgICkKKyAgICAgICAgIyAic3Vycm9nYXRlZXNjYXBlIiBjYW4gbm90IGJlIHVzZWQgZm9yIHRyYW5zbGF0aW5nCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgVHlwZUVycm9yLAorICAgICAgICAgICAgc3Vycm9nYXRlZXNjYXBlX2Vycm9ycywKKyAgICAgICAgICAgIFVuaWNvZGVUcmFuc2xhdGVFcnJvcigiXHVkYzgwIiwgMCwgMSwgIm91Y2giKQorICAgICAgICApCisgICAgICAgICMgVXNlIHRoZSBjb3JyZWN0IGV4Y2VwdGlvbgorICAgICAgICBmb3IgcyBpbiAoImEiLCAiXHVkYzdmIiwgIlx1ZGQwMCIpOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3Qoc3RyPXMpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgICAgICAgICBVbmljb2RlRW5jb2RlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgIHN1cnJvZ2F0ZWVzY2FwZV9lcnJvcnMsCisgICAgICAgICAgICAgICAgICAgIFVuaWNvZGVFbmNvZGVFcnJvcigiYXNjaWkiLCBzLCAwLCAxLCAib3VjaCIpCisgICAgICAgICAgICAgICAgKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAotICAgICAgICAgICAgY29kZWNzLmJhY2tzbGFzaHJlcGxhY2VfZXJyb3JzKAotICAgICAgICAgICAgICAgIFVuaWNvZGVFbmNvZGVFcnJvcigiYXNjaWkiLCAiXHUzMDQyIiwgMCwgMSwgIm91Y2giKSksCi0gICAgICAgICAgICAoIlxcdTMwNDIiLCAxKQorICAgICAgICAgICAgc3Vycm9nYXRlZXNjYXBlX2Vycm9ycygKKyAgICAgICAgICAgICAgICBVbmljb2RlRW5jb2RlRXJyb3IoImFzY2lpIiwgImFcdWRjODBiIiwgMSwgMiwgIm91Y2giKSksCisgICAgICAgICAgICAoYiJceDgwIiwgMikKKyAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFVuaWNvZGVEZWNvZGVFcnJvciwKKyAgICAgICAgICAgIHN1cnJvZ2F0ZWVzY2FwZV9lcnJvcnMsCisgICAgICAgICAgICBVbmljb2RlRGVjb2RlRXJyb3IoImFzY2lpIiwgYnl0ZWFycmF5KGIiYSIpLCAwLCAxLCAib3VjaCIpCiAgICAgICAgICkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgICAgICAgIGNvZGVjcy5iYWNrc2xhc2hyZXBsYWNlX2Vycm9ycygKLSAgICAgICAgICAgICAgICBVbmljb2RlRW5jb2RlRXJyb3IoImFzY2lpIiwgIlx4MDAiLCAwLCAxLCAib3VjaCIpKSwKLSAgICAgICAgICAgICgiXFx4MDAiLCAxKQorICAgICAgICAgICAgc3Vycm9nYXRlZXNjYXBlX2Vycm9ycygKKyAgICAgICAgICAgICAgICBVbmljb2RlRGVjb2RlRXJyb3IoImFzY2lpIiwgYnl0ZWFycmF5KGIiYVx4ODBiIiksIDEsIDIsICJvdWNoIikpLAorICAgICAgICAgICAgKCJcdWRjODAiLCAyKQogICAgICAgICApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAgICAgICBjb2RlY3MuYmFja3NsYXNocmVwbGFjZV9lcnJvcnMoCi0gICAgICAgICAgICAgICAgVW5pY29kZUVuY29kZUVycm9yKCJhc2NpaSIsICJceGZmIiwgMCwgMSwgIm91Y2giKSksCi0gICAgICAgICAgICAoIlxceGZmIiwgMSkKKworICAgIGRlZiB0ZXN0X2JhZGFuZGdvb2RzdXJyb2dhdGVwYXNzZXhjZXB0aW9ucyhzZWxmKToKKyAgICAgICAgc3Vycm9nYXRlcGFzc19lcnJvcnMgPSBjb2RlY3MubG9va3VwX2Vycm9yKCdzdXJyb2dhdGVwYXNzJykKKyAgICAgICAgIyAic3Vycm9nYXRlcGFzcyIgY29tcGxhaW5zIGFib3V0IGEgbm9uLWV4Y2VwdGlvbiBwYXNzZWQgaW4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgIFR5cGVFcnJvciwKKyAgICAgICAgICAgc3Vycm9nYXRlcGFzc19lcnJvcnMsCisgICAgICAgICAgIDQyCiAgICAgICAgICkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgICAgICAgIGNvZGVjcy5iYWNrc2xhc2hyZXBsYWNlX2Vycm9ycygKLSAgICAgICAgICAgICAgICBVbmljb2RlRW5jb2RlRXJyb3IoImFzY2lpIiwgIlx1MDEwMCIsIDAsIDEsICJvdWNoIikpLAotICAgICAgICAgICAgKCJcXHUwMTAwIiwgMSkKKyAgICAgICAgIyAic3Vycm9nYXRlcGFzcyIgY29tcGxhaW5zIGFib3V0IHRoZSB3cm9uZyBleGNlcHRpb24gdHlwZXMKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgIFR5cGVFcnJvciwKKyAgICAgICAgICAgc3Vycm9nYXRlcGFzc19lcnJvcnMsCisgICAgICAgICAgIFVuaWNvZGVFcnJvcigib3VjaCIpCiAgICAgICAgICkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgICAgICAgIGNvZGVjcy5iYWNrc2xhc2hyZXBsYWNlX2Vycm9ycygKLSAgICAgICAgICAgICAgICBVbmljb2RlRW5jb2RlRXJyb3IoImFzY2lpIiwgIlx1ZmZmZiIsIDAsIDEsICJvdWNoIikpLAotICAgICAgICAgICAgKCJcXHVmZmZmIiwgMSkKKyAgICAgICAgIyAic3Vycm9nYXRlcGFzcyIgY2FuIG5vdCBiZSB1c2VkIGZvciB0cmFuc2xhdGluZworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFR5cGVFcnJvciwKKyAgICAgICAgICAgIHN1cnJvZ2F0ZXBhc3NfZXJyb3JzLAorICAgICAgICAgICAgVW5pY29kZVRyYW5zbGF0ZUVycm9yKCJcdWQ4MDAiLCAwLCAxLCAib3VjaCIpCiAgICAgICAgICkKLSAgICAgICAgaWYgU0laRU9GX1dDSEFSX1QgPiAwOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgICAgICAgICAgICBjb2RlY3MuYmFja3NsYXNocmVwbGFjZV9lcnJvcnMoCi0gICAgICAgICAgICAgICAgICAgIFVuaWNvZGVFbmNvZGVFcnJvcigiYXNjaWkiLCAiXFUwMDAxMDAwMCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAxLCAib3VjaCIpKSwKLSAgICAgICAgICAgICAgICAoIlxcVTAwMDEwMDAwIiwgMSkKLSAgICAgICAgICAgICkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAgICAgICAgICAgY29kZWNzLmJhY2tzbGFzaHJlcGxhY2VfZXJyb3JzKAotICAgICAgICAgICAgICAgICAgICBVbmljb2RlRW5jb2RlRXJyb3IoImFzY2lpIiwgIlxVMDAxMGZmZmYiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMSwgIm91Y2giKSksCi0gICAgICAgICAgICAgICAgKCJcXFUwMDEwZmZmZiIsIDEpCi0gICAgICAgICAgICApCi0gICAgICAgICAgICAjIExvbmUgc3Vycm9nYXRlcyAocmVnYXJkbGVzcyBvZiB1bmljb2RlIHdpZHRoKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgICAgICAgICAgICBjb2RlY3MuYmFja3NsYXNocmVwbGFjZV9lcnJvcnMoCi0gICAgICAgICAgICAgICAgICAgIFVuaWNvZGVFbmNvZGVFcnJvcigiYXNjaWkiLCAiXHVkODAwIiwgMCwgMSwgIm91Y2giKSksCi0gICAgICAgICAgICAgICAgKCJcXHVkODAwIiwgMSkKLSAgICAgICAgICAgICkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAgICAgICAgICAgY29kZWNzLmJhY2tzbGFzaHJlcGxhY2VfZXJyb3JzKAotICAgICAgICAgICAgICAgICAgICBVbmljb2RlRW5jb2RlRXJyb3IoImFzY2lpIiwgIlx1ZGZmZiIsIDAsIDEsICJvdWNoIikpLAotICAgICAgICAgICAgICAgICgiXFx1ZGZmZiIsIDEpCi0gICAgICAgICAgICApCisgICAgICAgICMgVXNlIHRoZSBjb3JyZWN0IGV4Y2VwdGlvbgorICAgICAgICBmb3IgZW5jIGluICgidXRmLTgiLCAidXRmLTE2bGUiLCAidXRmLTE2YmUiLCAidXRmLTMybGUiLCAidXRmLTMyYmUiKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGVuY29kaW5nPWVuYyk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICAgICAgICAgIFVuaWNvZGVFbmNvZGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgc3Vycm9nYXRlcGFzc19lcnJvcnMsCisgICAgICAgICAgICAgICAgICAgIFVuaWNvZGVFbmNvZGVFcnJvcihlbmMsICJhIiwgMCwgMSwgIm91Y2giKQorICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgICAgICAgICAgVW5pY29kZURlY29kZUVycm9yLAorICAgICAgICAgICAgICAgICAgICBzdXJyb2dhdGVwYXNzX2Vycm9ycywKKyAgICAgICAgICAgICAgICAgICAgVW5pY29kZURlY29kZUVycm9yKGVuYywgImEiLmVuY29kZShlbmMpLCAwLCAxLCAib3VjaCIpCisgICAgICAgICAgICAgICAgKQorICAgICAgICB0ZXN0cyA9IFsKKyAgICAgICAgICAgICgiYXNjaWkiLCAiXHVkODAwIiwgYidceGVkXHhhMFx4ODAnLCAzKSwKKyAgICAgICAgICAgICgidXRmLTgiLCAiXHVkODAwIiwgYidceGVkXHhhMFx4ODAnLCAzKSwKKyAgICAgICAgICAgICgidXRmLTE2bGUiLCAiXHVkODAwIiwgYidceDAwXHhkOCcsIDIpLAorICAgICAgICAgICAgKCJ1dGYtMTZiZSIsICJcdWQ4MDAiLCBiJ1x4ZDhceDAwJywgMiksCisgICAgICAgICAgICAoInV0Zi0zMmxlIiwgIlx1ZDgwMCIsIGInXHgwMFx4ZDhceDAwXHgwMCcsIDQpLAorICAgICAgICAgICAgKCJ1dGYtMzJiZSIsICJcdWQ4MDAiLCBiJ1x4MDBceDAwXHhkOFx4MDAnLCA0KSwKKyAgICAgICAgICAgICgiYXNjaWkiLCAiXHVkZmZmIiwgYidceGVkXHhiZlx4YmYnLCAzKSwKKyAgICAgICAgICAgICgidXRmLTgiLCAiXHVkZmZmIiwgYidceGVkXHhiZlx4YmYnLCAzKSwKKyAgICAgICAgICAgICgidXRmLTE2bGUiLCAiXHVkZmZmIiwgYidceGZmXHhkZicsIDIpLAorICAgICAgICAgICAgKCJ1dGYtMTZiZSIsICJcdWRmZmYiLCBiJ1x4ZGZceGZmJywgMiksCisgICAgICAgICAgICAoInV0Zi0zMmxlIiwgIlx1ZGZmZiIsIGInXHhmZlx4ZGZceDAwXHgwMCcsIDQpLAorICAgICAgICAgICAgKCJ1dGYtMzJiZSIsICJcdWRmZmYiLCBiJ1x4MDBceDAwXHhkZlx4ZmYnLCA0KSwKKyAgICAgICAgICAgICgiYXNjaWkiLCAiXHVkODAwXHVkZmZmIiwgYidceGVkXHhhMFx4ODBceGVkXHhiZlx4YmYnLCAzKSwKKyAgICAgICAgICAgICgidXRmLTgiLCAiXHVkODAwXHVkZmZmIiwgYidceGVkXHhhMFx4ODBceGVkXHhiZlx4YmYnLCAzKSwKKyAgICAgICAgICAgICgidXRmLTE2bGUiLCAiXHVkODAwXHVkZmZmIiwgYidceDAwXHhkOFx4ZmZceGRmJywgMiksCisgICAgICAgICAgICAoInV0Zi0xNmJlIiwgIlx1ZDgwMFx1ZGZmZiIsIGInXHhkOFx4MDBceGRmXHhmZicsIDIpLAorICAgICAgICAgICAgKCJ1dGYtMzJsZSIsICJcdWQ4MDBcdWRmZmYiLCBiJ1x4MDBceGQ4XHgwMFx4MDBceGZmXHhkZlx4MDBceDAwJywgNCksCisgICAgICAgICAgICAoInV0Zi0zMmJlIiwgIlx1ZDgwMFx1ZGZmZiIsIGInXHgwMFx4MDBceGQ4XHgwMFx4MDBceDAwXHhkZlx4ZmYnLCA0KSwKKyAgICAgICAgXQorICAgICAgICBmb3IgZW5jLCBzLCBiLCBuIGluIHRlc3RzOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoZW5jb2Rpbmc9ZW5jLCBzdHI9cywgYnl0ZXM9Yik6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICAgICAgc3Vycm9nYXRlcGFzc19lcnJvcnMoCisgICAgICAgICAgICAgICAgICAgICAgICBVbmljb2RlRW5jb2RlRXJyb3IoZW5jLCAiYSIgKyBzICsgImIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIDEgKyBsZW4ocyksICJvdWNoIikpLAorICAgICAgICAgICAgICAgICAgICAoYiwgMSArIGxlbihzKSkKKyAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICAgICAgc3Vycm9nYXRlcGFzc19lcnJvcnMoCisgICAgICAgICAgICAgICAgICAgICAgICBVbmljb2RlRGVjb2RlRXJyb3IoZW5jLCBieXRlYXJyYXkoYiJhIiArIGJbOm5dICsgYiJiIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgbiwgIm91Y2giKSksCisgICAgICAgICAgICAgICAgICAgIChzWzoxXSwgMSArIG4pCisgICAgICAgICAgICAgICAgKQogCiAgICAgZGVmIHRlc3RfYmFkaGFuZGxlcnJlc3VsdHMoc2VsZik6CiAgICAgICAgIHJlc3VsdHMgPSAoIDQyLCAiZm9vIiwgKDEsMiwzKSwgKCJmb28iLCAxLCAzKSwgKCJmb28iLCBOb25lKSwgKCJmb28iLCksICgiZm9vIiwgMSwgMyksICgiZm9vIiwgTm9uZSksICgiZm9vIiwpICkKQEAgLTY4OCw5ICs3NzUsOCBAQAogICAgICAgICAjIGVuaGFuY2UgY292ZXJhZ2Ugb2Y6CiAgICAgICAgICMgUHl0aG9uL2NvZGVjcy5jOjpQeUNvZGVjX1hNTENoYXJSZWZSZXBsYWNlRXJyb3JzKCkKICAgICAgICAgIyBhbmQgaW5saW5lIGltcGxlbWVudGF0aW9ucwotICAgICAgICB2ID0gKDEsIDUsIDEwLCA1MCwgMTAwLCA1MDAsIDEwMDAsIDUwMDAsIDEwMDAwLCA1MDAwMCkKLSAgICAgICAgaWYgU0laRU9GX1dDSEFSX1QgPT0gNDoKLSAgICAgICAgICAgIHYgKz0gKDEwMDAwMCwgNTAwMDAwLCAxMDAwMDAwKQorICAgICAgICB2ID0gKDEsIDUsIDEwLCA1MCwgMTAwLCA1MDAsIDEwMDAsIDUwMDAsIDEwMDAwLCA1MDAwMCwgMTAwMDAwLAorICAgICAgICAgICAgIDUwMDAwMCwgMTAwMDAwMCkKICAgICAgICAgcyA9ICIiLmpvaW4oW2Nocih4KSBmb3IgeCBpbiB2XSkKICAgICAgICAgY29kZWNzLnJlZ2lzdGVyX2Vycm9yKCJ0ZXN0LnhtbGNoYXJyZWZyZXBsYWNlIiwgY29kZWNzLnhtbGNoYXJyZWZyZXBsYWNlX2Vycm9ycykKICAgICAgICAgZm9yIGVuYyBpbiAoImFzY2lpIiwgImlzby04ODU5LTE1Iik6CkBAIC04NzUsOCArOTYxLDI5IEBACiAgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgogICAgICAgICAgICAgICAgICAgICBkYXRhLmRlY29kZShlbmNvZGluZywgInRlc3QucmVwbGFjaW5nIikKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHRlc3Quc3VwcG9ydC5ydW5fdW5pdHRlc3QoQ29kZWNDYWxsYmFja1Rlc3QpCisgICAgZGVmIHRlc3RfZmFrZV9lcnJvcl9jbGFzcyhzZWxmKToKKyAgICAgICAgaGFuZGxlcnMgPSBbCisgICAgICAgICAgICBjb2RlY3Muc3RyaWN0X2Vycm9ycywKKyAgICAgICAgICAgIGNvZGVjcy5pZ25vcmVfZXJyb3JzLAorICAgICAgICAgICAgY29kZWNzLnJlcGxhY2VfZXJyb3JzLAorICAgICAgICAgICAgY29kZWNzLmJhY2tzbGFzaHJlcGxhY2VfZXJyb3JzLAorICAgICAgICAgICAgY29kZWNzLnhtbGNoYXJyZWZyZXBsYWNlX2Vycm9ycywKKyAgICAgICAgICAgIGNvZGVjcy5sb29rdXBfZXJyb3IoJ3N1cnJvZ2F0ZWVzY2FwZScpLAorICAgICAgICAgICAgY29kZWNzLmxvb2t1cF9lcnJvcignc3Vycm9nYXRlcGFzcycpLAorICAgICAgICBdCisgICAgICAgIGZvciBjbHMgaW4gVW5pY29kZUVuY29kZUVycm9yLCBVbmljb2RlRGVjb2RlRXJyb3IsIFVuaWNvZGVUcmFuc2xhdGVFcnJvcjoKKyAgICAgICAgICAgIGNsYXNzIEZha2VVbmljb2RlRXJyb3Ioc3RyKToKKyAgICAgICAgICAgICAgICBfX2NsYXNzX18gPSBjbHMKKyAgICAgICAgICAgIGZvciBoYW5kbGVyIGluIGhhbmRsZXJzOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGhhbmRsZXI9aGFuZGxlciwgZXJyb3JfY2xhc3M9Y2xzKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBoYW5kbGVyLCBGYWtlVW5pY29kZUVycm9yKCkpCisgICAgICAgICAgICBjbGFzcyBGYWtlVW5pY29kZUVycm9yKEV4Y2VwdGlvbik6CisgICAgICAgICAgICAgICAgX19jbGFzc19fID0gY2xzCisgICAgICAgICAgICBmb3IgaGFuZGxlciBpbiBoYW5kbGVyczoKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChoYW5kbGVyPWhhbmRsZXIsIGVycm9yX2NsYXNzPWNscyk6CisgICAgICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoKFR5cGVFcnJvciwgRmFrZVVuaWNvZGVFcnJvcikpOgorICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlcihGYWtlVW5pY29kZUVycm9yKCkpCisKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jb2RlY21hcHNfY24ucHkgYi9MaWIvdGVzdC90ZXN0X2NvZGVjbWFwc19jbi5weQppbmRleCA3NjYzMmEyLi5mMWJkMzg0IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2NvZGVjbWFwc19jbi5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NvZGVjbWFwc19jbi5weQpAQCAtMTAsMjMgKzEwLDE4IEBACiBjbGFzcyBUZXN0R0IyMzEyTWFwKG11bHRpYnl0ZWNvZGVjX3N1cHBvcnQuVGVzdEJhc2VfTWFwcGluZywKICAgICAgICAgICAgICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZW5jb2RpbmcgPSAnZ2IyMzEyJwotICAgIG1hcGZpbGV1cmwgPSAnaHR0cDovL3Blb3BsZS5mcmVlYnNkLm9yZy9+cGVya3kvaTE4bi9FVUMtQ04uVFhUJworICAgIG1hcGZpbGV1cmwgPSAnaHR0cDovL3d3dy5weXRob250ZXN0Lm5ldC91bmljb2RlL0VVQy1DTi5UWFQnCiAKIGNsYXNzIFRlc3RHQktNYXAobXVsdGlieXRlY29kZWNfc3VwcG9ydC5UZXN0QmFzZV9NYXBwaW5nLAogICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBlbmNvZGluZyA9ICdnYmsnCi0gICAgbWFwZmlsZXVybCA9ICdodHRwOi8vd3d3LnVuaWNvZGUub3JnL1B1YmxpYy9NQVBQSU5HUy9WRU5ET1JTLycgXAotICAgICAgICAgICAgICAgICAnTUlDU0ZUL1dJTkRPV1MvQ1A5MzYuVFhUJworICAgIG1hcGZpbGV1cmwgPSAnaHR0cDovL3d3dy5weXRob250ZXN0Lm5ldC91bmljb2RlL0NQOTM2LlRYVCcKIAogY2xhc3MgVGVzdEdCMTgwMzBNYXAobXVsdGlieXRlY29kZWNfc3VwcG9ydC5UZXN0QmFzZV9NYXBwaW5nLAogICAgICAgICAgICAgICAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGVuY29kaW5nID0gJ2diMTgwMzAnCi0gICAgbWFwZmlsZXVybCA9ICdodHRwOi8vc291cmNlLmljdS1wcm9qZWN0Lm9yZy9yZXBvcy9pY3UvZGF0YS8nIFwKLSAgICAgICAgICAgICAgICAgJ3RydW5rL2NoYXJzZXQvZGF0YS94bWwvZ2ItMTgwMzAtMjAwMC54bWwnCisgICAgbWFwZmlsZXVybCA9ICdodHRwOi8vd3d3LnB5dGhvbnRlc3QubmV0L3VuaWNvZGUvZ2ItMTgwMzAtMjAwMC54bWwnCiAKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KF9fbmFtZV9fKQotCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2NvZGVjbWFwc19oay5weSBiL0xpYi90ZXN0L3Rlc3RfY29kZWNtYXBzX2hrLnB5CmluZGV4IDI3OGFlMmYuLjRjMGM0MTUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY29kZWNtYXBzX2hrLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY29kZWNtYXBzX2hrLnB5CkBAIC0xMCwxMSArMTAsNyBAQAogY2xhc3MgVGVzdEJpZzVIS1NDU01hcChtdWx0aWJ5dGVjb2RlY19zdXBwb3J0LlRlc3RCYXNlX01hcHBpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBlbmNvZGluZyA9ICdiaWc1aGtzY3MnCi0gICAgbWFwZmlsZXVybCA9ICdodHRwOi8vcGVvcGxlLmZyZWVic2Qub3JnL35wZXJreS9pMThuL0JJRzVIS1NDUy0yMDA0LlRYVCcKLQotZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KF9fbmFtZV9fKQorICAgIG1hcGZpbGV1cmwgPSAnaHR0cDovL3d3dy5weXRob250ZXN0Lm5ldC91bmljb2RlL0JJRzVIS1NDUy0yMDA0LlRYVCcKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICBzdXBwb3J0LnVzZV9yZXNvdXJjZXMgPSBbJ3VybGZldGNoJ10KLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jb2RlY21hcHNfanAucHkgYi9MaWIvdGVzdC90ZXN0X2NvZGVjbWFwc19qcC5weQppbmRleCBmYTkzZjEyLi41NzczODIzIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2NvZGVjbWFwc19qcC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NvZGVjbWFwc19qcC5weQpAQCAtMTAsOCArMTAsNyBAQAogY2xhc3MgVGVzdENQOTMyTWFwKG11bHRpYnl0ZWNvZGVjX3N1cHBvcnQuVGVzdEJhc2VfTWFwcGluZywKICAgICAgICAgICAgICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZW5jb2RpbmcgPSAnY3A5MzInCi0gICAgbWFwZmlsZXVybCA9ICdodHRwOi8vd3d3LnVuaWNvZGUub3JnL1B1YmxpYy9NQVBQSU5HUy9WRU5ET1JTL01JQ1NGVC8nIFwKLSAgICAgICAgICAgICAgICAgJ1dJTkRPV1MvQ1A5MzIuVFhUJworICAgIG1hcGZpbGV1cmwgPSAnaHR0cDovL3d3dy5weXRob250ZXN0Lm5ldC91bmljb2RlL0NQOTMyLlRYVCcKICAgICBzdXBtYXBzID0gWwogICAgICAgICAoYidceDgwJywgJ1x1MDA4MCcpLAogICAgICAgICAoYidceGEwJywgJ1x1ZjhmMCcpLApAQCAtMjcsMTUgKzI2LDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGVuY29kaW5nID0gJ2V1Y19qcCcKICAgICBtYXBmaWxlbmFtZSA9ICdFVUMtSlAuVFhUJwotICAgIG1hcGZpbGV1cmwgPSAnaHR0cDovL3Blb3BsZS5mcmVlYnNkLm9yZy9+cGVya3kvaTE4bi9FVUMtSlAuVFhUJworICAgIG1hcGZpbGV1cmwgPSAnaHR0cDovL3d3dy5weXRob250ZXN0Lm5ldC91bmljb2RlL0VVQy1KUC5UWFQnCiAKIAogY2xhc3MgVGVzdFNKSVNDT01QQVRNYXAobXVsdGlieXRlY29kZWNfc3VwcG9ydC5UZXN0QmFzZV9NYXBwaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGVuY29kaW5nID0gJ3NoaWZ0X2ppcycKICAgICBtYXBmaWxlbmFtZSA9ICdTSElGVEpJUy5UWFQnCi0gICAgbWFwZmlsZXVybCA9ICdodHRwOi8vd3d3LnVuaWNvZGUub3JnL1B1YmxpYy9NQVBQSU5HUy9PQlNPTEVURScgXAotICAgICAgICAgICAgICAgICAnL0VBU1RBU0lBL0pJUy9TSElGVEpJUy5UWFQnCisgICAgbWFwZmlsZXVybCA9ICdodHRwOi8vd3d3LnB5dGhvbnRlc3QubmV0L3VuaWNvZGUvU0hJRlRKSVMuVFhUJwogICAgIHBhc3NfZW5jdGVzdCA9IFsKICAgICAgICAgKGInXHg4MV8nLCAnXFwnKSwKICAgICBdCkBAIC00OSwxOCArNDcsMTUgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZW5jb2RpbmcgPSAnZXVjX2ppc3gwMjEzJwogICAgIG1hcGZpbGVuYW1lID0gJ0VVQy1KSVNYMDIxMy5UWFQnCi0gICAgbWFwZmlsZXVybCA9ICdodHRwOi8vcGVvcGxlLmZyZWVic2Qub3JnL35wZXJreS9pMThuL0VVQy1KSVNYMDIxMy5UWFQnCisgICAgbWFwZmlsZXVybCA9ICdodHRwOi8vd3d3LnB5dGhvbnRlc3QubmV0L3VuaWNvZGUvRVVDLUpJU1gwMjEzLlRYVCcKIAogCiBjbGFzcyBUZXN0U0pJU1gwMjEzTWFwKG11bHRpYnl0ZWNvZGVjX3N1cHBvcnQuVGVzdEJhc2VfTWFwcGluZywKICAgICAgICAgICAgICAgICAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGVuY29kaW5nID0gJ3NoaWZ0X2ppc3gwMjEzJwogICAgIG1hcGZpbGVuYW1lID0gJ1NISUZUX0pJU1gwMjEzLlRYVCcKLSAgICBtYXBmaWxldXJsID0gJ2h0dHA6Ly9wZW9wbGUuZnJlZWJzZC5vcmcvfnBlcmt5L2kxOG4vU0hJRlRfSklTWDAyMTMuVFhUJworICAgIG1hcGZpbGV1cmwgPSAnaHR0cDovL3d3dy5weXRob250ZXN0Lm5ldC91bmljb2RlL1NISUZUX0pJU1gwMjEzLlRYVCcKIAogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoX19uYW1lX18pCi0KIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY29kZWNtYXBzX2tyLnB5IGIvTGliL3Rlc3QvdGVzdF9jb2RlY21hcHNfa3IucHkKaW5kZXggZTBiZjcxNi4uNmNiNDFjOCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jb2RlY21hcHNfa3IucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jb2RlY21hcHNfa3IucHkKQEAgLTEwLDE0ICsxMCwxMyBAQAogY2xhc3MgVGVzdENQOTQ5TWFwKG11bHRpYnl0ZWNvZGVjX3N1cHBvcnQuVGVzdEJhc2VfTWFwcGluZywKICAgICAgICAgICAgICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZW5jb2RpbmcgPSAnY3A5NDknCi0gICAgbWFwZmlsZXVybCA9ICdodHRwOi8vd3d3LnVuaWNvZGUub3JnL1B1YmxpYy9NQVBQSU5HUy9WRU5ET1JTL01JQ1NGVCcgXAotICAgICAgICAgICAgICAgICAnL1dJTkRPV1MvQ1A5NDkuVFhUJworICAgIG1hcGZpbGV1cmwgPSAnaHR0cDovL3d3dy5weXRob250ZXN0Lm5ldC91bmljb2RlL0NQOTQ5LlRYVCcKIAogCiBjbGFzcyBUZXN0RVVDS1JNYXAobXVsdGlieXRlY29kZWNfc3VwcG9ydC5UZXN0QmFzZV9NYXBwaW5nLAogICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBlbmNvZGluZyA9ICdldWNfa3InCi0gICAgbWFwZmlsZXVybCA9ICdodHRwOi8vcGVvcGxlLmZyZWVic2Qub3JnL35wZXJreS9pMThuL0VVQy1LUi5UWFQnCisgICAgbWFwZmlsZXVybCA9ICdodHRwOi8vd3d3LnB5dGhvbnRlc3QubmV0L3VuaWNvZGUvRVVDLUtSLlRYVCcKIAogICAgICMgQTRENCBIQU5HVUwgRklMTEVSIGluZGljYXRlcyB0aGUgYmVnaW4gb2YgOC1ieXRlcyBtYWtlLXVwIHNlcXVlbmNlLgogICAgIHBhc3NfZW5jdGVzdCA9IFsoYidceGE0XHhkNCcsICdcdTMxNjQnKV0KQEAgLTI3LDggKzI2LDcgQEAKIGNsYXNzIFRlc3RKT0hBQk1hcChtdWx0aWJ5dGVjb2RlY19zdXBwb3J0LlRlc3RCYXNlX01hcHBpbmcsCiAgICAgICAgICAgICAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGVuY29kaW5nID0gJ2pvaGFiJwotICAgIG1hcGZpbGV1cmwgPSAnaHR0cDovL3d3dy51bmljb2RlLm9yZy9QdWJsaWMvTUFQUElOR1MvT0JTT0xFVEUvRUFTVEFTSUEvJyBcCi0gICAgICAgICAgICAgICAgICdLU0MvSk9IQUIuVFhUJworICAgIG1hcGZpbGV1cmwgPSAnaHR0cDovL3d3dy5weXRob250ZXN0Lm5ldC91bmljb2RlL0pPSEFCLlRYVCcKICAgICAjIEtTIFggMTAwMSBzdGFuZGFyZCBhc3NpZ25lZCAweDVjIGFzIFdPTiBTSUdOLgogICAgICMgYnV0LCBpbiBlYXJseSA5MHMgdGhhdCBpcyB0aGUgb25seSBlcmEgdXNlZCBqb2hhYiB3aWRlbHksCiAgICAgIyB0aGUgbW9zdCBzb2Z0d2FyZXMgaW1wbGVtZW50cyBpdCBhcyBSRVZFUlNFIFNPTElEVVMuCkBAIC0zNiw4ICszNCw1IEBACiAgICAgcGFzc19lbmN0ZXN0ID0gWyhiJ1xcJywgJ1x1MjBhOScpXQogICAgIHBhc3NfZGVjdGVzdCA9IFsoYidcXCcsICdcdTIwYTknKV0KIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KF9fbmFtZV9fKQotCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2NvZGVjbWFwc190dy5weSBiL0xpYi90ZXN0L3Rlc3RfY29kZWNtYXBzX3R3LnB5CmluZGV4IDRkMjcwODAuLjJlYTQ0YjUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY29kZWNtYXBzX3R3LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY29kZWNtYXBzX3R3LnB5CkBAIC0xMCwxNCArMTAsMTIgQEAKIGNsYXNzIFRlc3RCSUc1TWFwKG11bHRpYnl0ZWNvZGVjX3N1cHBvcnQuVGVzdEJhc2VfTWFwcGluZywKICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBlbmNvZGluZyA9ICdiaWc1JwotICAgIG1hcGZpbGV1cmwgPSAnaHR0cDovL3d3dy51bmljb2RlLm9yZy9QdWJsaWMvTUFQUElOR1MvT0JTT0xFVEUvJyBcCi0gICAgICAgICAgICAgICAgICdFQVNUQVNJQS9PVEhFUi9CSUc1LlRYVCcKKyAgICBtYXBmaWxldXJsID0gJ2h0dHA6Ly93d3cucHl0aG9udGVzdC5uZXQvdW5pY29kZS9CSUc1LlRYVCcKIAogY2xhc3MgVGVzdENQOTUwTWFwKG11bHRpYnl0ZWNvZGVjX3N1cHBvcnQuVGVzdEJhc2VfTWFwcGluZywKICAgICAgICAgICAgICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZW5jb2RpbmcgPSAnY3A5NTAnCi0gICAgbWFwZmlsZXVybCA9ICdodHRwOi8vd3d3LnVuaWNvZGUub3JnL1B1YmxpYy9NQVBQSU5HUy9WRU5ET1JTL01JQ1NGVC8nIFwKLSAgICAgICAgICAgICAgICAgJ1dJTkRPV1MvQ1A5NTAuVFhUJworICAgIG1hcGZpbGV1cmwgPSAnaHR0cDovL3d3dy5weXRob250ZXN0Lm5ldC91bmljb2RlL0NQOTUwLlRYVCcKICAgICBwYXNzX2VuY3Rlc3QgPSBbCiAgICAgICAgIChiJ1x4YTJceGNjJywgJ1x1NTM0MScpLAogICAgICAgICAoYidceGEyXHhjZScsICdcdTUzNDUnKSwKQEAgLTI2LDggKzI0LDUgQEAKICAgICAgICAgKGIiXHhGRnh5IiwgInJlcGxhY2UiLCAgIlx1ZmZmZHh5IiksCiAgICAgKQogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoX19uYW1lX18pCi0KIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY29kZWNzLnB5IGIvTGliL3Rlc3QvdGVzdF9jb2RlY3MucHkKaW5kZXggYThiM2RhMC4uOGZlMjFmYiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jb2RlY3MucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jb2RlY3MucHkKQEAgLTEsNCArMSw1IEBACiBpbXBvcnQgY29kZWNzCitpbXBvcnQgY29udGV4dGxpYgogaW1wb3J0IGlvCiBpbXBvcnQgbG9jYWxlCiBpbXBvcnQgc3lzCkBAIC05Niw3ICs5Nyw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoci5yZWFkKCksICIiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHIuYnl0ZWJ1ZmZlciwgYiIiKQogCi0gICAgICAgICMgZG8gdGhlIGNoZWNrIGFnYWluLCB0aGlzIHRpbWUgdXNpbmcgYSBpbmNyZW1lbnRhbCBkZWNvZGVyCisgICAgICAgICMgZG8gdGhlIGNoZWNrIGFnYWluLCB0aGlzIHRpbWUgdXNpbmcgYW4gaW5jcmVtZW50YWwgZGVjb2RlcgogICAgICAgICBkID0gY29kZWNzLmdldGluY3JlbWVudGFsZGVjb2RlcihzZWxmLmVuY29kaW5nKSgpCiAgICAgICAgIHJlc3VsdCA9ICIiCiAgICAgICAgIGZvciAoYywgcGFydGlhbHJlc3VsdCkgaW4gemlwKGlucHV0LmVuY29kZShzZWxmLmVuY29kaW5nKSwgcGFydGlhbHJlc3VsdHMpOgpAQCAtMzQyLDggKzM0Myw0NiBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWRlci5yZWFkbGluZSgpLCBzNSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFkZXIucmVhZGxpbmUoKSwgIiIpCiAKKyAgICBpbGxfZm9ybWVkX3NlcXVlbmNlX3JlcGxhY2UgPSAiXHVmZmZkIgorCisgICAgZGVmIHRlc3RfbG9uZV9zdXJyb2dhdGVzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRW5jb2RlRXJyb3IsICJcdWQ4MDAiLmVuY29kZSwgc2VsZi5lbmNvZGluZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiW1x1REM4MF0iLmVuY29kZShzZWxmLmVuY29kaW5nLCAiYmFja3NsYXNocmVwbGFjZSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJbXFx1ZGM4MF0iLmVuY29kZShzZWxmLmVuY29kaW5nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiW1x1REM4MF0iLmVuY29kZShzZWxmLmVuY29kaW5nLCAieG1sY2hhcnJlZnJlcGxhY2UiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiWyYjNTY0NDg7XSIuZW5jb2RlKHNlbGYuZW5jb2RpbmcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJbXHVEQzgwXSIuZW5jb2RlKHNlbGYuZW5jb2RpbmcsICJpZ25vcmUiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiW10iLmVuY29kZShzZWxmLmVuY29kaW5nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiW1x1REM4MF0iLmVuY29kZShzZWxmLmVuY29kaW5nLCAicmVwbGFjZSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJbP10iLmVuY29kZShzZWxmLmVuY29kaW5nKSkKKworICAgICAgICBib20gPSAiIi5lbmNvZGUoc2VsZi5lbmNvZGluZykKKyAgICAgICAgZm9yIGJlZm9yZSwgYWZ0ZXIgaW4gWygiXFUwMDAxMGZmZiIsICJBIiksICgiWyIsICJdIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIkEiLCAiXFUwMDAxMGZmZiIpXToKKyAgICAgICAgICAgIGJlZm9yZV9zZXF1ZW5jZSA9IGJlZm9yZS5lbmNvZGUoc2VsZi5lbmNvZGluZylbbGVuKGJvbSk6XQorICAgICAgICAgICAgYWZ0ZXJfc2VxdWVuY2UgPSBhZnRlci5lbmNvZGUoc2VsZi5lbmNvZGluZylbbGVuKGJvbSk6XQorICAgICAgICAgICAgdGVzdF9zdHJpbmcgPSBiZWZvcmUgKyAiXHVEQzgwIiArIGFmdGVyCisgICAgICAgICAgICB0ZXN0X3NlcXVlbmNlID0gKGJvbSArIGJlZm9yZV9zZXF1ZW5jZSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaWxsX2Zvcm1lZF9zZXF1ZW5jZSArIGFmdGVyX3NlcXVlbmNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZURlY29kZUVycm9yLCB0ZXN0X3NlcXVlbmNlLmRlY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZW5jb2RpbmcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3Rfc3RyaW5nLmVuY29kZShzZWxmLmVuY29kaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1cnJvZ2F0ZXBhc3MiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9zZXF1ZW5jZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdF9zZXF1ZW5jZS5kZWNvZGUoc2VsZi5lbmNvZGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1cnJvZ2F0ZXBhc3MiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9zdHJpbmcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3Rfc2VxdWVuY2UuZGVjb2RlKHNlbGYuZW5jb2RpbmcsICJpZ25vcmUiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVmb3JlICsgYWZ0ZXIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3Rfc2VxdWVuY2UuZGVjb2RlKHNlbGYuZW5jb2RpbmcsICJyZXBsYWNlIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZm9yZSArIHNlbGYuaWxsX2Zvcm1lZF9zZXF1ZW5jZV9yZXBsYWNlICsgYWZ0ZXIpCisKIGNsYXNzIFVURjMyVGVzdChSZWFkVGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGVuY29kaW5nID0gInV0Zi0zMiIKKyAgICBpZiBzeXMuYnl0ZW9yZGVyID09ICdsaXR0bGUnOgorICAgICAgICBpbGxfZm9ybWVkX3NlcXVlbmNlID0gYiJceDgwXHhkY1x4MDBceDAwIgorICAgIGVsc2U6CisgICAgICAgIGlsbF9mb3JtZWRfc2VxdWVuY2UgPSBiIlx4MDBceDAwXHhkY1x4ODAiCiAKICAgICBzcGFtbGUgPSAoYidceGZmXHhmZVx4MDBceDAwJwogICAgICAgICAgICAgICBiJ3NceDAwXHgwMFx4MDBwXHgwMFx4MDBceDAwYVx4MDBceDAwXHgwMG1ceDAwXHgwMFx4MDAnCkBAIC00MzUsNiArNDc0LDcgQEAKIAogY2xhc3MgVVRGMzJMRVRlc3QoUmVhZFRlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBlbmNvZGluZyA9ICJ1dGYtMzItbGUiCisgICAgaWxsX2Zvcm1lZF9zZXF1ZW5jZSA9IGIiXHg4MFx4ZGNceDAwXHgwMCIKIAogICAgIGRlZiB0ZXN0X3BhcnRpYWwoc2VsZik6CiAgICAgICAgIHNlbGYuY2hlY2tfcGFydGlhbCgKQEAgLTQ3OSw2ICs1MTksNyBAQAogCiBjbGFzcyBVVEYzMkJFVGVzdChSZWFkVGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGVuY29kaW5nID0gInV0Zi0zMi1iZSIKKyAgICBpbGxfZm9ybWVkX3NlcXVlbmNlID0gYiJceDAwXHgwMFx4ZGNceDgwIgogCiAgICAgZGVmIHRlc3RfcGFydGlhbChzZWxmKToKICAgICAgICAgc2VsZi5jaGVja19wYXJ0aWFsKApAQCAtNTI0LDYgKzU2NSwxMCBAQAogCiBjbGFzcyBVVEYxNlRlc3QoUmVhZFRlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBlbmNvZGluZyA9ICJ1dGYtMTYiCisgICAgaWYgc3lzLmJ5dGVvcmRlciA9PSAnbGl0dGxlJzoKKyAgICAgICAgaWxsX2Zvcm1lZF9zZXF1ZW5jZSA9IGIiXHg4MFx4ZGMiCisgICAgZWxzZToKKyAgICAgICAgaWxsX2Zvcm1lZF9zZXF1ZW5jZSA9IGIiXHhkY1x4ODAiCiAKICAgICBzcGFtbGUgPSBiJ1x4ZmZceGZlc1x4MDBwXHgwMGFceDAwbVx4MDBzXHgwMHBceDAwYVx4MDBtXHgwMCcKICAgICBzcGFtYmUgPSBiJ1x4ZmVceGZmXHgwMHNceDAwcFx4MDBhXHgwMG1ceDAwc1x4MDBwXHgwMGFceDAwbScKQEAgLTU5OSwxMSArNjQ0LDE0IEBACiAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzdXBwb3J0LnVubGluaywgc3VwcG9ydC5URVNURk4pCiAgICAgICAgIHdpdGggb3BlbihzdXBwb3J0LlRFU1RGTiwgJ3diJykgYXMgZnA6CiAgICAgICAgICAgICBmcC53cml0ZShzKQotICAgICAgICB3aXRoIGNvZGVjcy5vcGVuKHN1cHBvcnQuVEVTVEZOLCAnVScsIGVuY29kaW5nPXNlbGYuZW5jb2RpbmcpIGFzIHJlYWRlcjoKKyAgICAgICAgd2l0aCBzdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCgnJywgRGVwcmVjYXRpb25XYXJuaW5nKSk6CisgICAgICAgICAgICByZWFkZXIgPSBjb2RlY3Mub3BlbihzdXBwb3J0LlRFU1RGTiwgJ1UnLCBlbmNvZGluZz1zZWxmLmVuY29kaW5nKQorICAgICAgICB3aXRoIHJlYWRlcjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhZGVyLnJlYWQoKSwgczEpCiAKIGNsYXNzIFVURjE2TEVUZXN0KFJlYWRUZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZW5jb2RpbmcgPSAidXRmLTE2LWxlIgorICAgIGlsbF9mb3JtZWRfc2VxdWVuY2UgPSBiIlx4ODBceGRjIgogCiAgICAgZGVmIHRlc3RfcGFydGlhbChzZWxmKToKICAgICAgICAgc2VsZi5jaGVja19wYXJ0aWFsKApAQCAtNjQ3LDYgKzY5NSw3IEBACiAKIGNsYXNzIFVURjE2QkVUZXN0KFJlYWRUZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZW5jb2RpbmcgPSAidXRmLTE2LWJlIgorICAgIGlsbF9mb3JtZWRfc2VxdWVuY2UgPSBiIlx4ZGNceDgwIgogCiAgICAgZGVmIHRlc3RfcGFydGlhbChzZWxmKToKICAgICAgICAgc2VsZi5jaGVja19wYXJ0aWFsKApAQCAtNjkwLDYgKzczOSw4IEBACiAKIGNsYXNzIFVURjhUZXN0KFJlYWRUZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZW5jb2RpbmcgPSAidXRmLTgiCisgICAgaWxsX2Zvcm1lZF9zZXF1ZW5jZSA9IGIiXHhlZFx4YjJceDgwIgorICAgIGlsbF9mb3JtZWRfc2VxdWVuY2VfcmVwbGFjZSA9ICJcdWZmZmQiICogMwogCiAgICAgZGVmIHRlc3RfcGFydGlhbChzZWxmKToKICAgICAgICAgc2VsZi5jaGVja19wYXJ0aWFsKApAQCAtNzE5LDE4ICs3NzAsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdSwgdS5lbmNvZGUoc2VsZi5lbmNvZGluZykpCiAKICAgICBkZWYgdGVzdF9sb25lX3N1cnJvZ2F0ZXMoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVFbmNvZGVFcnJvciwgIlx1ZDgwMCIuZW5jb2RlLCAidXRmLTgiKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRGVjb2RlRXJyb3IsIGIiXHhlZFx4YTBceDgwIi5kZWNvZGUsICJ1dGYtOCIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIltcdURDODBdIi5lbmNvZGUoInV0Zi04IiwgImJhY2tzbGFzaHJlcGxhY2UiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBiJ1tcXHVkYzgwXScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIltcdURDODBdIi5lbmNvZGUoInV0Zi04IiwgInhtbGNoYXJyZWZyZXBsYWNlIiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgYidbJiM1NjQ0ODtdJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiW1x1REM4MF0iLmVuY29kZSgidXRmLTgiLCAic3Vycm9nYXRlZXNjYXBlIiksCisgICAgICAgIHN1cGVyKCkudGVzdF9sb25lX3N1cnJvZ2F0ZXMoKQorICAgICAgICAjIG5vdCBzdXJlIGlmIHRoaXMgaXMgbWFraW5nIHNlbnNlIGZvcgorICAgICAgICAjIFVURi0xNiBhbmQgVVRGLTMyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIltcdURDODBdIi5lbmNvZGUoJ3V0Zi04JywgInN1cnJvZ2F0ZWVzY2FwZSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgIGInW1x4ODBdJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiW1x1REM4MF0iLmVuY29kZSgidXRmLTgiLCAiaWdub3JlIiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgYidbXScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIltcdURDODBdIi5lbmNvZGUoInV0Zi04IiwgInJlcGxhY2UiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBiJ1s/XScpCiAKICAgICBkZWYgdGVzdF9zdXJyb2dhdGVwYXNzX2hhbmRsZXIoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoImFiY1x1ZDgwMGRlZiIuZW5jb2RlKCJ1dGYtOCIsICJzdXJyb2dhdGVwYXNzIiksCkBAIC04NTQsNiArODk4LDMyIEBACiBjbGFzcyBVVEY3VGVzdChSZWFkVGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGVuY29kaW5nID0gInV0Zi03IgogCisgICAgZGVmIHRlc3RfYXNjaWkoc2VsZik6CisgICAgICAgICMgU2V0IEQgKGRpcmVjdGx5IGVuY29kZWQgY2hhcmFjdGVycykKKyAgICAgICAgc2V0X2QgPSAoJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJworICAgICAgICAgICAgICAgICAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonCisgICAgICAgICAgICAgICAgICcwMTIzNDU2Nzg5JworICAgICAgICAgICAgICAgICAnXCcoKSwtLi86PycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0X2QuZW5jb2RlKHNlbGYuZW5jb2RpbmcpLCBzZXRfZC5lbmNvZGUoJ2FzY2lpJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0X2QuZW5jb2RlKCdhc2NpaScpLmRlY29kZShzZWxmLmVuY29kaW5nKSwgc2V0X2QpCisgICAgICAgICMgU2V0IE8gKG9wdGlvbmFsIGRpcmVjdCBjaGFyYWN0ZXJzKQorICAgICAgICBzZXRfbyA9ICcgISIjJCUmKjs8PT5AW11eX2B7fH0nCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0X28uZW5jb2RlKHNlbGYuZW5jb2RpbmcpLCBzZXRfby5lbmNvZGUoJ2FzY2lpJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0X28uZW5jb2RlKCdhc2NpaScpLmRlY29kZShzZWxmLmVuY29kaW5nKSwgc2V0X28pCisgICAgICAgICMgKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdhK2InLmVuY29kZShzZWxmLmVuY29kaW5nKSwgYidhKy1iJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ2ErLWInLmRlY29kZShzZWxmLmVuY29kaW5nKSwgJ2ErYicpCisgICAgICAgICMgV2hpdGUgc3BhY2VzCisgICAgICAgIHdzID0gJyBcdFxuXHInCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod3MuZW5jb2RlKHNlbGYuZW5jb2RpbmcpLCB3cy5lbmNvZGUoJ2FzY2lpJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod3MuZW5jb2RlKCdhc2NpaScpLmRlY29kZShzZWxmLmVuY29kaW5nKSwgd3MpCisgICAgICAgICMgT3RoZXIgQVNDSUkgY2hhcmFjdGVycworICAgICAgICBvdGhlcl9hc2NpaSA9ICcnLmpvaW4oc29ydGVkKHNldChieXRlcyhyYW5nZSgweDgwKSkuZGVjb2RlKCkpIC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQoc2V0X2QgKyBzZXRfbyArICcrJyArIHdzKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3RoZXJfYXNjaWkuZW5jb2RlKHNlbGYuZW5jb2RpbmcpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGInK0FBQUFBUUFDQUFNQUJBQUZBQVlBQndBSUFBc0FEQUFPQUE4QUVBQVJBQklBRXdBVScKKyAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FCVUFGZ0FYQUJnQUdRQWFBQnNBSEFBZEFCNEFId0JjQUg0QWZ3LScpCisKICAgICBkZWYgdGVzdF9wYXJ0aWFsKHNlbGYpOgogICAgICAgICBzZWxmLmNoZWNrX3BhcnRpYWwoCiAgICAgICAgICAgICAnYSstYlx4MDBjXHg4MGRcdTAxMDBlXFUwMDAxMDAwMGYnLApAQCAtODk1LDcgKzk2NSw5IEBACiAKICAgICBkZWYgdGVzdF9lcnJvcnMoc2VsZik6CiAgICAgICAgIHRlc3RzID0gWworICAgICAgICAgICAgKGInXHhmZmInLCAnXHVmZmZkYicpLAogICAgICAgICAgICAgKGInYVx4ZmZiJywgJ2FcdWZmZmRiJyksCisgICAgICAgICAgICAoYidhXHhmZlx4ZmZiJywgJ2FcdWZmZmRcdWZmZmRiJyksCiAgICAgICAgICAgICAoYidhK0lLJywgJ2FcdWZmZmQnKSwKICAgICAgICAgICAgIChiJ2ErSUstYicsICdhXHVmZmZkYicpLAogICAgICAgICAgICAgKGInYStJSyxiJywgJ2FcdWZmZmRiJyksCkBAIC05MTEsMTYgKzk4Myw1MCBAQAogICAgICAgICAgICAgKGInYSsvLywrSUt3LWInLCAnYVx1ZmZmZFx1MjBhY2InKSwKICAgICAgICAgICAgIChiJ2ErLy8vLCtJS3ctYicsICdhXHVmZmZmXHVmZmZkXHUyMGFjYicpLAogICAgICAgICAgICAgKGInYSsvLy8vLCtJS3ctYicsICdhXHVmZmZmXHVmZmZkXHUyMGFjYicpLAorICAgICAgICAgICAgKGInYStJS3ctYlx4ZmYnLCAnYVx1MjBhY2JcdWZmZmQnKSwKKyAgICAgICAgICAgIChiJ2ErSUt3XHhmZmInLCAnYVx1MjBhY1x1ZmZmZGInKSwKICAgICAgICAgXQogICAgICAgICBmb3IgcmF3LCBleHBlY3RlZCBpbiB0ZXN0czoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVEZWNvZGVFcnJvciwgY29kZWNzLnV0Zl83X2RlY29kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhdywgJ3N0cmljdCcsIFRydWUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhdy5kZWNvZGUoJ3V0Zi03JywgJ3JlcGxhY2UnKSwgZXhwZWN0ZWQpCisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChyYXc9cmF3KToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRGVjb2RlRXJyb3IsIGNvZGVjcy51dGZfN19kZWNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhdywgJ3N0cmljdCcsIFRydWUpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYXcuZGVjb2RlKCd1dGYtNycsICdyZXBsYWNlJyksIGV4cGVjdGVkKQogCiAgICAgZGVmIHRlc3Rfbm9uYm1wKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdcVTAwMDEwNEEwJy5lbmNvZGUoc2VsZi5lbmNvZGluZyksIGInKzJBSGNvQS0nKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdcdWQ4MDFcdWRjYTAnLmVuY29kZShzZWxmLmVuY29kaW5nKSwgYicrMkFIY29BLScpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYicrMkFIY29BLScuZGVjb2RlKHNlbGYuZW5jb2RpbmcpLCAnXFUwMDAxMDRBMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYicrMkFIY29BJy5kZWNvZGUoc2VsZi5lbmNvZGluZyksICdcVTAwMDEwNEEwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnXHUyMGFjXFUwMDAxMDRBMCcuZW5jb2RlKHNlbGYuZW5jb2RpbmcpLCBiJytJS3pZQWR5Zy0nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInK0lLellBZHlnLScuZGVjb2RlKHNlbGYuZW5jb2RpbmcpLCAnXHUyMGFjXFUwMDAxMDRBMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYicrSUt6WUFkeWcnLmRlY29kZShzZWxmLmVuY29kaW5nKSwgJ1x1MjBhY1xVMDAwMTA0QTAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdcdTIwYWNcdTIwYWNcVTAwMDEwNEEwJy5lbmNvZGUoc2VsZi5lbmNvZGluZyksCisgICAgICAgICAgICAgICAgICAgICAgICAgYicrSUt3Z3JOZ0IzS0EtJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJytJS3dnck5nQjNLQS0nLmRlY29kZShzZWxmLmVuY29kaW5nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXHUyMGFjXHUyMGFjXFUwMDAxMDRBMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYicrSUt3Z3JOZ0IzS0EnLmRlY29kZShzZWxmLmVuY29kaW5nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXHUyMGFjXHUyMGFjXFUwMDAxMDRBMCcpCisKKyAgICBkZWYgdGVzdF9sb25lX3N1cnJvZ2F0ZXMoc2VsZik6CisgICAgICAgIHRlc3RzID0gWworICAgICAgICAgICAgKGInYSsyQUUtYicsICdhXHVkODAxYicpLAorICAgICAgICAgICAgKGInYSsyQUVceGZmYicsICdhXHVmZmZkYicpLAorICAgICAgICAgICAgKGInYSsyQUUnLCAnYVx1ZmZmZCcpLAorICAgICAgICAgICAgKGInYSsyQUVBLWInLCAnYVx1ZmZmZGInKSwKKyAgICAgICAgICAgIChiJ2ErMkFILWInLCAnYVx1ZmZmZGInKSwKKyAgICAgICAgICAgIChiJ2ErSUt6WUFRLWInLCAnYVx1MjBhY1x1ZDgwMWInKSwKKyAgICAgICAgICAgIChiJ2ErSUt6WUFRXHhmZmInLCAnYVx1MjBhY1x1ZmZmZGInKSwKKyAgICAgICAgICAgIChiJ2ErSUt6WUFRQS1iJywgJ2FcdTIwYWNcdWZmZmRiJyksCisgICAgICAgICAgICAoYidhK0lLellBZC1iJywgJ2FcdTIwYWNcdWZmZmRiJyksCisgICAgICAgICAgICAoYidhK0lLd2dyTmdCLWInLCAnYVx1MjBhY1x1MjBhY1x1ZDgwMWInKSwKKyAgICAgICAgICAgIChiJ2ErSUt3Z3JOZ0JceGZmYicsICdhXHUyMGFjXHUyMGFjXHVmZmZkYicpLAorICAgICAgICAgICAgKGInYStJS3dnck5nQicsICdhXHUyMGFjXHUyMGFjXHVmZmZkJyksCisgICAgICAgICAgICAoYidhK0lLd2dyTmdCQS1iJywgJ2FcdTIwYWNcdTIwYWNcdWZmZmRiJyksCisgICAgICAgIF0KKyAgICAgICAgZm9yIHJhdywgZXhwZWN0ZWQgaW4gdGVzdHM6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChyYXc9cmF3KToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhdy5kZWNvZGUoJ3V0Zi03JywgJ3JlcGxhY2UnKSwgZXhwZWN0ZWQpCisKIAogY2xhc3MgVVRGMTZFeFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogCkBAIC05NDYsNyArMTA1Miw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY29kZWNzLnJlYWRidWZmZXJfZW5jb2RlKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvZGVjcy5yZWFkYnVmZmVyX2VuY29kZSwgNDIpCiAKLWNsYXNzIFVURjhTaWdUZXN0KFJlYWRUZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBVVEY4U2lnVGVzdChVVEY4VGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGVuY29kaW5nID0gInV0Zi04LXNpZyIKIAogICAgIGRlZiB0ZXN0X3BhcnRpYWwoc2VsZik6CkBAIC0xMDkxLDYgKzExOTcsOCBAQAogICAgICAgICAjIFB5dGhvbiB1c2VkIHRvIGNyYXNoIG9uIHRoaXMgYXQgZXhpdCBiZWNhdXNlIG9mIGEgcmVmY291bnQKICAgICAgICAgIyBidWcgaW4gX2NvZGVjc21vZHVsZS5jCiAKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuY2xvc2VkKQorCiAjIEZyb20gUkZDIDM0OTIKIHB1bnljb2RlX3Rlc3RjYXNlcyA9IFsKICAgICAjIEEgQXJhYmljIChFZ3lwdGlhbik6CkBAIC0xNTQzLDYgKzE2NTEsMTYgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbmNvZGVyLmVuY29kZSgiYW1wbGUub3JnLiIpLCBiInhuLS14YW1wbGUtOXRhLm9yZy4iKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVuY29kZXIuZW5jb2RlKCIiLCBUcnVlKSwgYiIiKQogCisgICAgZGVmIHRlc3RfZXJyb3JzKHNlbGYpOgorICAgICAgICAiIiJPbmx5IHN1cHBvcnRzICJzdHJpY3QiIGVycm9yIGhhbmRsZXIiIiIKKyAgICAgICAgInB5dGhvbi5vcmciLmVuY29kZSgiaWRuYSIsICJzdHJpY3QiKQorICAgICAgICBiInB5dGhvbi5vcmciLmRlY29kZSgiaWRuYSIsICJzdHJpY3QiKQorICAgICAgICBmb3IgZXJyb3JzIGluICgiaWdub3JlIiwgInJlcGxhY2UiLCAiYmFja3NsYXNocmVwbGFjZSIsCisgICAgICAgICAgICAgICAgInN1cnJvZ2F0ZWVzY2FwZSIpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRXhjZXB0aW9uLCAicHl0aG9uLm9yZyIuZW5jb2RlLCAiaWRuYSIsIGVycm9ycykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEV4Y2VwdGlvbiwKKyAgICAgICAgICAgICAgICBiInB5dGhvbi5vcmciLmRlY29kZSwgImlkbmEiLCBlcnJvcnMpCisKIGNsYXNzIENvZGVjc01vZHVsZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3RfZGVjb2RlKHNlbGYpOgpAQCAtMTU5OCw2ICsxNzE2LDQ2IEBACiAgICAgICAgIGMgPSBjb2RlY3MubG9va3VwKCdBU0NJSScpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5uYW1lLCAnYXNjaWknKQogCisgICAgZGVmIHRlc3RfYWxsKHNlbGYpOgorICAgICAgICBhcGkgPSAoCisgICAgICAgICAgICAiZW5jb2RlIiwgImRlY29kZSIsCisgICAgICAgICAgICAicmVnaXN0ZXIiLCAiQ29kZWNJbmZvIiwgIkNvZGVjIiwgIkluY3JlbWVudGFsRW5jb2RlciIsCisgICAgICAgICAgICAiSW5jcmVtZW50YWxEZWNvZGVyIiwgIlN0cmVhbVJlYWRlciIsICJTdHJlYW1Xcml0ZXIiLCAibG9va3VwIiwKKyAgICAgICAgICAgICJnZXRlbmNvZGVyIiwgImdldGRlY29kZXIiLCAiZ2V0aW5jcmVtZW50YWxlbmNvZGVyIiwKKyAgICAgICAgICAgICJnZXRpbmNyZW1lbnRhbGRlY29kZXIiLCAiZ2V0cmVhZGVyIiwgImdldHdyaXRlciIsCisgICAgICAgICAgICAicmVnaXN0ZXJfZXJyb3IiLCAibG9va3VwX2Vycm9yIiwKKyAgICAgICAgICAgICJzdHJpY3RfZXJyb3JzIiwgInJlcGxhY2VfZXJyb3JzIiwgImlnbm9yZV9lcnJvcnMiLAorICAgICAgICAgICAgInhtbGNoYXJyZWZyZXBsYWNlX2Vycm9ycyIsICJiYWNrc2xhc2hyZXBsYWNlX2Vycm9ycyIsCisgICAgICAgICAgICAib3BlbiIsICJFbmNvZGVkRmlsZSIsCisgICAgICAgICAgICAiaXRlcmVuY29kZSIsICJpdGVyZGVjb2RlIiwKKyAgICAgICAgICAgICJCT00iLCAiQk9NX0JFIiwgIkJPTV9MRSIsCisgICAgICAgICAgICAiQk9NX1VURjgiLCAiQk9NX1VURjE2IiwgIkJPTV9VVEYxNl9CRSIsICJCT01fVVRGMTZfTEUiLAorICAgICAgICAgICAgIkJPTV9VVEYzMiIsICJCT01fVVRGMzJfQkUiLCAiQk9NX1VURjMyX0xFIiwKKyAgICAgICAgICAgICJCT00zMl9CRSIsICJCT00zMl9MRSIsICJCT002NF9CRSIsICJCT002NF9MRSIsICAjIFVuZG9jdW1lbnRlZAorICAgICAgICAgICAgIlN0cmVhbVJlYWRlcldyaXRlciIsICJTdHJlYW1SZWNvZGVyIiwKKyAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydENvdW50RXF1YWwoYXBpLCBjb2RlY3MuX19hbGxfXykKKyAgICAgICAgZm9yIGFwaSBpbiBjb2RlY3MuX19hbGxfXzoKKyAgICAgICAgICAgIGdldGF0dHIoY29kZWNzLCBhcGkpCisKKyAgICBkZWYgdGVzdF9vcGVuKHNlbGYpOgorICAgICAgICBzZWxmLmFkZENsZWFudXAoc3VwcG9ydC51bmxpbmssIHN1cHBvcnQuVEVTVEZOKQorICAgICAgICBmb3IgbW9kZSBpbiAoJ3cnLCAncicsICdyKycsICd3KycsICdhJywgJ2ErJyk6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChtb2RlKSwgXAorICAgICAgICAgICAgICAgICAgICBjb2RlY3Mub3BlbihzdXBwb3J0LlRFU1RGTiwgbW9kZSwgJ2FzY2lpJykgYXMgZmlsZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZmlsZSwgY29kZWNzLlN0cmVhbVJlYWRlcldyaXRlcikKKworICAgIGRlZiB0ZXN0X3VuZGVmaW5lZChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVycm9yLCBjb2RlY3MuZW5jb2RlLCAnYWJjJywgJ3VuZGVmaW5lZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVFcnJvciwgY29kZWNzLmRlY29kZSwgYidhYmMnLCAndW5kZWZpbmVkJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVycm9yLCBjb2RlY3MuZW5jb2RlLCAnJywgJ3VuZGVmaW5lZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVFcnJvciwgY29kZWNzLmRlY29kZSwgYicnLCAndW5kZWZpbmVkJykKKyAgICAgICAgZm9yIGVycm9ycyBpbiAoJ3N0cmljdCcsICdpZ25vcmUnLCAncmVwbGFjZScsICdiYWNrc2xhc2hyZXBsYWNlJyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRXJyb3IsCisgICAgICAgICAgICAgICAgY29kZWNzLmVuY29kZSwgJ2FiYycsICd1bmRlZmluZWQnLCBlcnJvcnMpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRXJyb3IsCisgICAgICAgICAgICAgICAgY29kZWNzLmRlY29kZSwgYidhYmMnLCAndW5kZWZpbmVkJywgZXJyb3JzKQorCiBjbGFzcyBTdHJlYW1SZWFkZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiBzZXRVcChzZWxmKToKQEAgLTE2MjgsNiArMTc4Niw3IEBACiAgICAgImNwMDM3IiwKICAgICAiY3AxMDA2IiwKICAgICAiY3AxMDI2IiwKKyAgICAiY3AxMTI1IiwKICAgICAiY3AxMTQwIiwKICAgICAiY3AxMjUwIiwKICAgICAiY3AxMjUxIiwKQEAgLTE3MzAsMTMgKzE4ODksMTAgQEAKICMgICAgInVuZGVmaW5lZCIKIAogIyBUaGUgZm9sbG93aW5nIGVuY29kaW5ncyBkb24ndCB3b3JrIGluIHN0YXRlZnVsIG1vZGUKLWJyb2tlbl91bmljb2RlX3dpdGhfc3RyZWFtcyA9IFsKK2Jyb2tlbl91bmljb2RlX3dpdGhfc3RhdGVmdWwgPSBbCiAgICAgInB1bnljb2RlIiwKICAgICAidW5pY29kZV9pbnRlcm5hbCIKIF0KLWJyb2tlbl9pbmNyZW1lbnRhbF9jb2RlcnMgPSBicm9rZW5fdW5pY29kZV93aXRoX3N0cmVhbXMgKyBbCi0gICAgImlkbmEiLAotXQogCiBjbGFzcyBCYXNpY1VuaWNvZGVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlLCBNaXhJbkNoZWNrU3RhdGVIYW5kbGluZyk6CiAgICAgZGVmIHRlc3RfYmFzaWNzKHNlbGYpOgpAQCAtMTc1Niw3ICsxOTEyLDcgQEAKICAgICAgICAgICAgICAgICAoY2hhcnMsIHNpemUpID0gY29kZWNzLmdldGRlY29kZXIoZW5jb2RpbmcpKGIpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjaGFycywgcywgImVuY29kaW5nPSVyIiAlIGVuY29kaW5nKQogCi0gICAgICAgICAgICBpZiBlbmNvZGluZyBub3QgaW4gYnJva2VuX3VuaWNvZGVfd2l0aF9zdHJlYW1zOgorICAgICAgICAgICAgaWYgZW5jb2Rpbmcgbm90IGluIGJyb2tlbl91bmljb2RlX3dpdGhfc3RhdGVmdWw6CiAgICAgICAgICAgICAgICAgIyBjaGVjayBzdHJlYW0gcmVhZGVyL3dyaXRlcgogICAgICAgICAgICAgICAgIHEgPSBRdWV1ZShiIiIpCiAgICAgICAgICAgICAgICAgd3JpdGVyID0gY29kZWNzLmdldHdyaXRlcihlbmNvZGluZykocSkKQEAgLTE3NzQsNyArMTkzMCw3IEBACiAgICAgICAgICAgICAgICAgICAgIGRlY29kZWRyZXN1bHQgKz0gcmVhZGVyLnJlYWQoKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVjb2RlZHJlc3VsdCwgcywgImVuY29kaW5nPSVyIiAlIGVuY29kaW5nKQogCi0gICAgICAgICAgICBpZiBlbmNvZGluZyBub3QgaW4gYnJva2VuX2luY3JlbWVudGFsX2NvZGVyczoKKyAgICAgICAgICAgIGlmIGVuY29kaW5nIG5vdCBpbiBicm9rZW5fdW5pY29kZV93aXRoX3N0YXRlZnVsOgogICAgICAgICAgICAgICAgICMgY2hlY2sgaW5jcmVtZW50YWwgZGVjb2Rlci9lbmNvZGVyIGFuZCBpdGVyZW5jb2RlKCkvaXRlcmRlY29kZSgpCiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBlbmNvZGVyID0gY29kZWNzLmdldGluY3JlbWVudGFsZW5jb2RlcihlbmNvZGluZykoKQpAQCAtMTgyMyw3ICsxOTc5LDcgQEAKICAgICAgICAgZnJvbSBfdGVzdGNhcGkgaW1wb3J0IGNvZGVjX2luY3JlbWVudGFsZW5jb2RlciwgY29kZWNfaW5jcmVtZW50YWxkZWNvZGVyCiAgICAgICAgIHMgPSAiYWJjMTIzIiAgIyBhbGwgY29kZWNzIHNob3VsZCBiZSBhYmxlIHRvIGVuY29kZSB0aGVzZQogICAgICAgICBmb3IgZW5jb2RpbmcgaW4gYWxsX3VuaWNvZGVfZW5jb2RpbmdzOgotICAgICAgICAgICAgaWYgZW5jb2Rpbmcgbm90IGluIGJyb2tlbl9pbmNyZW1lbnRhbF9jb2RlcnM6CisgICAgICAgICAgICBpZiBlbmNvZGluZyBub3QgaW4gYnJva2VuX3VuaWNvZGVfd2l0aF9zdGF0ZWZ1bDoKICAgICAgICAgICAgICAgICAjIGNoZWNrIGluY3JlbWVudGFsIGRlY29kZXIvZW5jb2RlciAoZmV0Y2hlZCB2aWEgdGhlIEMgQVBJKQogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgY2VuY29kZXIgPSBjb2RlY19pbmNyZW1lbnRhbGVuY29kZXIoZW5jb2RpbmcpCkBAIC0xODYzLDcgKzIwMTksNyBAQAogICAgICAgICBmb3IgZW5jb2RpbmcgaW4gYWxsX3VuaWNvZGVfZW5jb2RpbmdzOgogICAgICAgICAgICAgaWYgZW5jb2RpbmcgPT0gImlkbmEiOiAjIEZJWE1FOiBTZWUgU0YgYnVnICMxMTYzMTc4CiAgICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIGlmIGVuY29kaW5nIGluIGJyb2tlbl91bmljb2RlX3dpdGhfc3RyZWFtczoKKyAgICAgICAgICAgIGlmIGVuY29kaW5nIGluIGJyb2tlbl91bmljb2RlX3dpdGhfc3RhdGVmdWw6CiAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgIHJlYWRlciA9IGNvZGVjcy5nZXRyZWFkZXIoZW5jb2RpbmcpKGlvLkJ5dGVzSU8ocy5lbmNvZGUoZW5jb2RpbmcpKSkKICAgICAgICAgICAgIGZvciB0IGluIHJhbmdlKDUpOgpAQCAtMTg5Niw3ICsyMDUyLDcgQEAKICAgICAgICAgIyBDaGVjayB0aGF0IGdldHN0YXRlKCkgYW5kIHNldHN0YXRlKCkgaGFuZGxlIHRoZSBzdGF0ZSBwcm9wZXJseQogICAgICAgICB1ID0gImFiYzEyMyIKICAgICAgICAgZm9yIGVuY29kaW5nIGluIGFsbF91bmljb2RlX2VuY29kaW5nczoKLSAgICAgICAgICAgIGlmIGVuY29kaW5nIG5vdCBpbiBicm9rZW5faW5jcmVtZW50YWxfY29kZXJzOgorICAgICAgICAgICAgaWYgZW5jb2Rpbmcgbm90IGluIGJyb2tlbl91bmljb2RlX3dpdGhfc3RhdGVmdWw6CiAgICAgICAgICAgICAgICAgc2VsZi5jaGVja19zdGF0ZV9oYW5kbGluZ19kZWNvZGUoZW5jb2RpbmcsIHUsIHUuZW5jb2RlKGVuY29kaW5nKSkKICAgICAgICAgICAgICAgICBzZWxmLmNoZWNrX3N0YXRlX2hhbmRsaW5nX2VuY29kZShlbmNvZGluZywgdSwgdS5lbmNvZGUoZW5jb2RpbmcpKQogCkBAIC0yMTAwLDYgKzIyNTYsNyBAQAogICAgICAgICBmID0gaW8uQnl0ZXNJTyhiIlx4YzNceGJjIikKICAgICAgICAgd2l0aCBjb2RlY3MuRW5jb2RlZEZpbGUoZiwgImxhdGluLTEiLCAidXRmLTgiKSBhcyBlZjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZWYucmVhZCgpLCBiIlx4ZmMiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5jbG9zZWQpCiAKICAgICBkZWYgdGVzdF9zdHJlYW1yZWFkZXJ3cml0ZXIoc2VsZik6CiAgICAgICAgIGYgPSBpby5CeXRlc0lPKGIiXHhjM1x4YmMiKQpAQCAtMjM3MCw2MCArMjUyNyw5MyBAQAogICAgICJxdW9wcmlfY29kZWMiLAogICAgICJoZXhfY29kZWMiLAogXQorCit0cmFuc2Zvcm1fYWxpYXNlcyA9IHsKKyAgICAiYmFzZTY0X2NvZGVjIjogWyJiYXNlNjQiLCAiYmFzZV82NCJdLAorICAgICJ1dV9jb2RlYyI6IFsidXUiXSwKKyAgICAicXVvcHJpX2NvZGVjIjogWyJxdW9wcmkiLCAicXVvdGVkX3ByaW50YWJsZSIsICJxdW90ZWRwcmludGFibGUiXSwKKyAgICAiaGV4X2NvZGVjIjogWyJoZXgiXSwKKyAgICAicm90XzEzIjogWyJyb3QxMyJdLAorfQorCiB0cnk6CiAgICAgaW1wb3J0IHpsaWIKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICBwYXNzCisgICAgemxpYiA9IE5vbmUKIGVsc2U6CiAgICAgYnl0ZXNfdHJhbnNmb3JtX2VuY29kaW5ncy5hcHBlbmQoInpsaWJfY29kZWMiKQorICAgIHRyYW5zZm9ybV9hbGlhc2VzWyJ6bGliX2NvZGVjIl0gPSBbInppcCIsICJ6bGliIl0KIHRyeToKICAgICBpbXBvcnQgYnoyCiBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgcGFzcwogZWxzZToKICAgICBieXRlc190cmFuc2Zvcm1fZW5jb2RpbmdzLmFwcGVuZCgiYnoyX2NvZGVjIikKKyAgICB0cmFuc2Zvcm1fYWxpYXNlc1siYnoyX2NvZGVjIl0gPSBbImJ6MiJdCiAKIGNsYXNzIFRyYW5zZm9ybUNvZGVjVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgdGVzdF9iYXNpY3Moc2VsZik6CiAgICAgICAgIGJpbnB1dCA9IGJ5dGVzKHJhbmdlKDI1NikpCiAgICAgICAgIGZvciBlbmNvZGluZyBpbiBieXRlc190cmFuc2Zvcm1fZW5jb2RpbmdzOgotICAgICAgICAgICAgIyBnZW5lcmljIGNvZGVjcyBpbnRlcmZhY2UKLSAgICAgICAgICAgIChvLCBzaXplKSA9IGNvZGVjcy5nZXRlbmNvZGVyKGVuY29kaW5nKShiaW5wdXQpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpemUsIGxlbihiaW5wdXQpKQotICAgICAgICAgICAgKGksIHNpemUpID0gY29kZWNzLmdldGRlY29kZXIoZW5jb2RpbmcpKG8pCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpemUsIGxlbihvKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaSwgYmlucHV0KQorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoZW5jb2Rpbmc9ZW5jb2RpbmcpOgorICAgICAgICAgICAgICAgICMgZ2VuZXJpYyBjb2RlY3MgaW50ZXJmYWNlCisgICAgICAgICAgICAgICAgKG8sIHNpemUpID0gY29kZWNzLmdldGVuY29kZXIoZW5jb2RpbmcpKGJpbnB1dCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpemUsIGxlbihiaW5wdXQpKQorICAgICAgICAgICAgICAgIChpLCBzaXplKSA9IGNvZGVjcy5nZXRkZWNvZGVyKGVuY29kaW5nKShvKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZSwgbGVuKG8pKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaSwgYmlucHV0KQogCiAgICAgZGVmIHRlc3RfcmVhZChzZWxmKToKICAgICAgICAgZm9yIGVuY29kaW5nIGluIGJ5dGVzX3RyYW5zZm9ybV9lbmNvZGluZ3M6Ci0gICAgICAgICAgICBzaW4gPSBjb2RlY3MuZW5jb2RlKGIiXHg4MCIsIGVuY29kaW5nKQotICAgICAgICAgICAgcmVhZGVyID0gY29kZWNzLmdldHJlYWRlcihlbmNvZGluZykoaW8uQnl0ZXNJTyhzaW4pKQotICAgICAgICAgICAgc291dCA9IHJlYWRlci5yZWFkKCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291dCwgYiJceDgwIikKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGVuY29kaW5nPWVuY29kaW5nKToKKyAgICAgICAgICAgICAgICBzaW4gPSBjb2RlY3MuZW5jb2RlKGIiXHg4MCIsIGVuY29kaW5nKQorICAgICAgICAgICAgICAgIHJlYWRlciA9IGNvZGVjcy5nZXRyZWFkZXIoZW5jb2RpbmcpKGlvLkJ5dGVzSU8oc2luKSkKKyAgICAgICAgICAgICAgICBzb3V0ID0gcmVhZGVyLnJlYWQoKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291dCwgYiJceDgwIikKIAogICAgIGRlZiB0ZXN0X3JlYWRsaW5lKHNlbGYpOgogICAgICAgICBmb3IgZW5jb2RpbmcgaW4gYnl0ZXNfdHJhbnNmb3JtX2VuY29kaW5nczoKLSAgICAgICAgICAgIHNpbiA9IGNvZGVjcy5lbmNvZGUoYiJceDgwIiwgZW5jb2RpbmcpCi0gICAgICAgICAgICByZWFkZXIgPSBjb2RlY3MuZ2V0cmVhZGVyKGVuY29kaW5nKShpby5CeXRlc0lPKHNpbikpCi0gICAgICAgICAgICBzb3V0ID0gcmVhZGVyLnJlYWRsaW5lKCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291dCwgYiJceDgwIikKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGVuY29kaW5nPWVuY29kaW5nKToKKyAgICAgICAgICAgICAgICBzaW4gPSBjb2RlY3MuZW5jb2RlKGIiXHg4MCIsIGVuY29kaW5nKQorICAgICAgICAgICAgICAgIHJlYWRlciA9IGNvZGVjcy5nZXRyZWFkZXIoZW5jb2RpbmcpKGlvLkJ5dGVzSU8oc2luKSkKKyAgICAgICAgICAgICAgICBzb3V0ID0gcmVhZGVyLnJlYWRsaW5lKCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXQsIGIiXHg4MCIpCisKKyAgICBkZWYgdGVzdF9idWZmZXJfYXBpX3VzYWdlKHNlbGYpOgorICAgICAgICAjIFdlIGNoZWNrIGFsbCB0aGUgdHJhbnNmb3JtIGNvZGVjcyBhY2NlcHQgbWVtb3J5dmlldyBpbnB1dAorICAgICAgICAjIGZvciBlbmNvZGluZyBhbmQgZGVjb2RpbmcKKyAgICAgICAgIyBhbmQgYWxzbyB0aGF0IHRoZXkgcm91bmR0cmlwIGNvcnJlY3RseQorICAgICAgICBvcmlnaW5hbCA9IGIiMTIzNDVceDgwIgorICAgICAgICBmb3IgZW5jb2RpbmcgaW4gYnl0ZXNfdHJhbnNmb3JtX2VuY29kaW5nczoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGVuY29kaW5nPWVuY29kaW5nKToKKyAgICAgICAgICAgICAgICBkYXRhID0gb3JpZ2luYWwKKyAgICAgICAgICAgICAgICB2aWV3ID0gbWVtb3J5dmlldyhkYXRhKQorICAgICAgICAgICAgICAgIGRhdGEgPSBjb2RlY3MuZW5jb2RlKGRhdGEsIGVuY29kaW5nKQorICAgICAgICAgICAgICAgIHZpZXdfZW5jb2RlZCA9IGNvZGVjcy5lbmNvZGUodmlldywgZW5jb2RpbmcpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2aWV3X2VuY29kZWQsIGRhdGEpCisgICAgICAgICAgICAgICAgdmlldyA9IG1lbW9yeXZpZXcoZGF0YSkKKyAgICAgICAgICAgICAgICBkYXRhID0gY29kZWNzLmRlY29kZShkYXRhLCBlbmNvZGluZykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIG9yaWdpbmFsKQorICAgICAgICAgICAgICAgIHZpZXdfZGVjb2RlZCA9IGNvZGVjcy5kZWNvZGUodmlldywgZW5jb2RpbmcpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2aWV3X2RlY29kZWQsIGRhdGEpCiAKICAgICBkZWYgdGVzdF90ZXh0X3RvX2JpbmFyeV9ibGFja2xpc3RzX2JpbmFyeV90cmFuc2Zvcm1zKHNlbGYpOgogICAgICAgICAjIENoZWNrIGJpbmFyeSAtPiBiaW5hcnkgY29kZWNzIGdpdmUgYSBnb29kIGVycm9yIGZvciBzdHIgaW5wdXQKICAgICAgICAgYmFkX2lucHV0ID0gImJhZCBpbnB1dCB0eXBlIgogICAgICAgICBmb3IgZW5jb2RpbmcgaW4gYnl0ZXNfdHJhbnNmb3JtX2VuY29kaW5nczoKLSAgICAgICAgICAgIGZtdCA9IChyInshcn0gaXMgbm90IGEgdGV4dCBlbmNvZGluZzsgIgotICAgICAgICAgICAgICAgICAgIHIidXNlIGNvZGVjcy5lbmNvZGVcKFwpIHRvIGhhbmRsZSBhcmJpdHJhcnkgY29kZWNzIikKLSAgICAgICAgICAgIG1zZyA9IGZtdC5mb3JtYXQoZW5jb2RpbmcpCi0gICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoTG9va3VwRXJyb3IsIG1zZykgYXMgZmFpbHVyZToKLSAgICAgICAgICAgICAgICBiYWRfaW5wdXQuZW5jb2RlKGVuY29kaW5nKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZmFpbHVyZS5leGNlcHRpb24uX19jYXVzZV9fKQorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoZW5jb2Rpbmc9ZW5jb2RpbmcpOgorICAgICAgICAgICAgICAgIGZtdCA9ICggInshcn0gaXMgbm90IGEgdGV4dCBlbmNvZGluZzsgIgorICAgICAgICAgICAgICAgICAgICAgICAgInVzZSBjb2RlY3MuZW5jb2RlXChcKSB0byBoYW5kbGUgYXJiaXRyYXJ5IGNvZGVjcyIpCisgICAgICAgICAgICAgICAgbXNnID0gZm10LmZvcm1hdChlbmNvZGluZykKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoTG9va3VwRXJyb3IsIG1zZykgYXMgZmFpbHVyZToKKyAgICAgICAgICAgICAgICAgICAgYmFkX2lucHV0LmVuY29kZShlbmNvZGluZykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShmYWlsdXJlLmV4Y2VwdGlvbi5fX2NhdXNlX18pCiAKICAgICBkZWYgdGVzdF90ZXh0X3RvX2JpbmFyeV9ibGFja2xpc3RzX3RleHRfdHJhbnNmb3JtcyhzZWxmKToKICAgICAgICAgIyBDaGVjayBzdHIuZW5jb2RlIGdpdmVzIGEgZ29vZCBlcnJvciBtZXNzYWdlIGZvciBzdHIgLT4gc3RyIGNvZGVjcwogICAgICAgICBtc2cgPSAociJeJ3JvdF8xMycgaXMgbm90IGEgdGV4dCBlbmNvZGluZzsgIgotICAgICAgICAgICAgICAgciJ1c2UgY29kZWNzLmVuY29kZVwoXCkgdG8gaGFuZGxlIGFyYml0cmFyeSBjb2RlY3MiKQorICAgICAgICAgICAgICAgICJ1c2UgY29kZWNzLmVuY29kZVwoXCkgdG8gaGFuZGxlIGFyYml0cmFyeSBjb2RlY3MiKQogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoTG9va3VwRXJyb3IsIG1zZyk6CiAgICAgICAgICAgICAianVzdCBhbiBleGFtcGxlIG1lc3NhZ2UiLmVuY29kZSgicm90XzEzIikKIApAQCAtMjQzMiwyMyArMjYyMiwyNTAgQEAKICAgICAgICAgIyBtZXNzYWdlIGZvciBiaW5hcnkgLT4gYmluYXJ5IGNvZGVjcwogICAgICAgICBkYXRhID0gYiJlbmNvZGUgZmlyc3QgdG8gZW5zdXJlIHdlIG1lZXQgYW55IGZvcm1hdCByZXN0cmljdGlvbnMiCiAgICAgICAgIGZvciBlbmNvZGluZyBpbiBieXRlc190cmFuc2Zvcm1fZW5jb2RpbmdzOgotICAgICAgICAgICAgZW5jb2RlZF9kYXRhID0gY29kZWNzLmVuY29kZShkYXRhLCBlbmNvZGluZykKLSAgICAgICAgICAgIGZtdCA9IChyInshcn0gaXMgbm90IGEgdGV4dCBlbmNvZGluZzsgIgotICAgICAgICAgICAgICAgICAgIHIidXNlIGNvZGVjcy5kZWNvZGVcKFwpIHRvIGhhbmRsZSBhcmJpdHJhcnkgY29kZWNzIikKLSAgICAgICAgICAgIG1zZyA9IGZtdC5mb3JtYXQoZW5jb2RpbmcpCi0gICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoTG9va3VwRXJyb3IsIG1zZyk6Ci0gICAgICAgICAgICAgICAgZW5jb2RlZF9kYXRhLmRlY29kZShlbmNvZGluZykKLSAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChMb29rdXBFcnJvciwgbXNnKToKLSAgICAgICAgICAgICAgICBieXRlYXJyYXkoZW5jb2RlZF9kYXRhKS5kZWNvZGUoZW5jb2RpbmcpCisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChlbmNvZGluZz1lbmNvZGluZyk6CisgICAgICAgICAgICAgICAgZW5jb2RlZF9kYXRhID0gY29kZWNzLmVuY29kZShkYXRhLCBlbmNvZGluZykKKyAgICAgICAgICAgICAgICBmbXQgPSAociJ7IXJ9IGlzIG5vdCBhIHRleHQgZW5jb2Rpbmc7ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICJ1c2UgY29kZWNzLmRlY29kZVwoXCkgdG8gaGFuZGxlIGFyYml0cmFyeSBjb2RlY3MiKQorICAgICAgICAgICAgICAgIG1zZyA9IGZtdC5mb3JtYXQoZW5jb2RpbmcpCisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KExvb2t1cEVycm9yLCBtc2cpOgorICAgICAgICAgICAgICAgICAgICBlbmNvZGVkX2RhdGEuZGVjb2RlKGVuY29kaW5nKQorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChMb29rdXBFcnJvciwgbXNnKToKKyAgICAgICAgICAgICAgICAgICAgYnl0ZWFycmF5KGVuY29kZWRfZGF0YSkuZGVjb2RlKGVuY29kaW5nKQogCiAgICAgZGVmIHRlc3RfYmluYXJ5X3RvX3RleHRfYmxhY2tsaXN0c190ZXh0X3RyYW5zZm9ybXMoc2VsZik6CiAgICAgICAgICMgQ2hlY2sgc3RyIC0+IHN0ciBjb2RlYyBnaXZlcyBhIGdvb2QgZXJyb3IgZm9yIGJpbmFyeSBpbnB1dAogICAgICAgICBmb3IgYmFkX2lucHV0IGluIChiImltbXV0YWJsZSIsIGJ5dGVhcnJheShiIm11dGFibGUiKSk6Ci0gICAgICAgICAgICBtc2cgPSAociJeJ3JvdF8xMycgaXMgbm90IGEgdGV4dCBlbmNvZGluZzsgIgotICAgICAgICAgICAgICAgICAgIHIidXNlIGNvZGVjcy5kZWNvZGVcKFwpIHRvIGhhbmRsZSBhcmJpdHJhcnkgY29kZWNzIikKLSAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChMb29rdXBFcnJvciwgbXNnKSBhcyBmYWlsdXJlOgotICAgICAgICAgICAgICAgIGJhZF9pbnB1dC5kZWNvZGUoInJvdF8xMyIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShmYWlsdXJlLmV4Y2VwdGlvbi5fX2NhdXNlX18pCisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChiYWRfaW5wdXQ9YmFkX2lucHV0KToKKyAgICAgICAgICAgICAgICBtc2cgPSAociJeJ3JvdF8xMycgaXMgbm90IGEgdGV4dCBlbmNvZGluZzsgIgorICAgICAgICAgICAgICAgICAgICAgICAgInVzZSBjb2RlY3MuZGVjb2RlXChcKSB0byBoYW5kbGUgYXJiaXRyYXJ5IGNvZGVjcyIpCisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KExvb2t1cEVycm9yLCBtc2cpIGFzIGZhaWx1cmU6CisgICAgICAgICAgICAgICAgICAgIGJhZF9pbnB1dC5kZWNvZGUoInJvdF8xMyIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZmFpbHVyZS5leGNlcHRpb24uX19jYXVzZV9fKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoemxpYiwgIlJlcXVpcmVzIHpsaWIgc3VwcG9ydCIpCisgICAgZGVmIHRlc3RfY3VzdG9tX3psaWJfZXJyb3JfaXNfd3JhcHBlZChzZWxmKToKKyAgICAgICAgIyBDaGVjayB6bGliIGNvZGVjIGdpdmVzIGEgZ29vZCBlcnJvciBmb3IgbWFsZm9ybWVkIGlucHV0CisgICAgICAgIG1zZyA9ICJeZGVjb2Rpbmcgd2l0aCAnemxpYl9jb2RlYycgY29kZWMgZmFpbGVkIgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoRXhjZXB0aW9uLCBtc2cpIGFzIGZhaWx1cmU6CisgICAgICAgICAgICBjb2RlY3MuZGVjb2RlKGIiaGVsbG8iLCAiemxpYl9jb2RlYyIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmYWlsdXJlLmV4Y2VwdGlvbi5fX2NhdXNlX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlKGZhaWx1cmUuZXhjZXB0aW9uKSkKKworICAgIGRlZiB0ZXN0X2N1c3RvbV9oZXhfZXJyb3JfaXNfd3JhcHBlZChzZWxmKToKKyAgICAgICAgIyBDaGVjayBoZXggY29kZWMgZ2l2ZXMgYSBnb29kIGVycm9yIGZvciBtYWxmb3JtZWQgaW5wdXQKKyAgICAgICAgbXNnID0gIl5kZWNvZGluZyB3aXRoICdoZXhfY29kZWMnIGNvZGVjIGZhaWxlZCIKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KEV4Y2VwdGlvbiwgbXNnKSBhcyBmYWlsdXJlOgorICAgICAgICAgICAgY29kZWNzLmRlY29kZShiImhlbGxvIiwgImhleF9jb2RlYyIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmYWlsdXJlLmV4Y2VwdGlvbi5fX2NhdXNlX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlKGZhaWx1cmUuZXhjZXB0aW9uKSkKKworICAgICMgVW5mb3J0dW5hdGVseSwgdGhlIGJ6MiBtb2R1bGUgdGhyb3dzIE9TRXJyb3IsIHdoaWNoIHRoZSBjb2RlYworICAgICMgbWFjaGluZXJ5IGN1cnJlbnRseSBjYW4ndCB3cmFwIDooCisKKyAgICAjIEVuc3VyZSBjb2RlYyBhbGlhc2VzIGZyb20gaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTc0NzUgd29yaworICAgIGRlZiB0ZXN0X2FsaWFzZXMoc2VsZik6CisgICAgICAgIGZvciBjb2RlY19uYW1lLCBhbGlhc2VzIGluIHRyYW5zZm9ybV9hbGlhc2VzLml0ZW1zKCk6CisgICAgICAgICAgICBleHBlY3RlZF9uYW1lID0gY29kZWNzLmxvb2t1cChjb2RlY19uYW1lKS5uYW1lCisgICAgICAgICAgICBmb3IgYWxpYXMgaW4gYWxpYXNlczoKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChhbGlhcz1hbGlhcyk6CisgICAgICAgICAgICAgICAgICAgIGluZm8gPSBjb2RlY3MubG9va3VwKGFsaWFzKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm8ubmFtZSwgZXhwZWN0ZWRfbmFtZSkKKworICAgIGRlZiB0ZXN0X3F1b3ByaV9zdGF0ZWxlc3Moc2VsZik6CisgICAgICAgICMgU2hvdWxkIGVuY29kZSB3aXRoIHF1b3RldGFicz1UcnVlCisgICAgICAgIGVuY29kZWQgPSBjb2RlY3MuZW5jb2RlKGIic3BhY2UgdGFiXHRlb2wgXG4iLCAicXVvcHJpLWNvZGVjIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbmNvZGVkLCBiInNwYWNlPTIwdGFiPTA5ZW9sPTIwXG4iKQorICAgICAgICAjIEJ1dCBzaG91bGQgc3RpbGwgc3VwcG9ydCB1bmVzY2FwZWQgdGFicyBhbmQgc3BhY2VzCisgICAgICAgIHVuZXNjYXBlZCA9IGIic3BhY2UgdGFiIGVvbFxuIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvZGVjcy5kZWNvZGUodW5lc2NhcGVkLCAicXVvcHJpLWNvZGVjIiksIHVuZXNjYXBlZCkKKworICAgIGRlZiB0ZXN0X3V1X2ludmFsaWQoc2VsZik6CisgICAgICAgICMgTWlzc2luZyAiYmVnaW4iIGxpbmUKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY29kZWNzLmRlY29kZSwgYiIiLCAidXUtY29kZWMiKQorCisKKyMgVGhlIGNvZGVjIHN5c3RlbSB0cmllcyB0byB3cmFwIGV4Y2VwdGlvbnMgaW4gb3JkZXIgdG8gZW5zdXJlIHRoZSBlcnJvcgorIyBtZW50aW9ucyB0aGUgb3BlcmF0aW9uIGJlaW5nIHBlcmZvcm1lZCBhbmQgdGhlIGNvZGVjIGludm9sdmVkLiBXZQorIyBjdXJyZW50bHkgKm9ubHkqIHdhbnQgdGhpcyB0byBoYXBwZW4gZm9yIHJlbGF0aXZlbHkgc3RhdGVsZXNzCisjIGV4Y2VwdGlvbnMsIHdoZXJlIHRoZSBvbmx5IHNpZ25pZmljYW50IGluZm9ybWF0aW9uIHRoZXkgY29udGFpbiBpcyB0aGVpcgorIyB0eXBlIGFuZCBhIHNpbmdsZSBzdHIgYXJndW1lbnQuCisKKyMgVXNlIGEgbG9jYWwgY29kZWMgcmVnaXN0cnkgdG8gYXZvaWQgYXBwZWFyaW5nIHRvIGxlYWsgb2JqZWN0cyB3aGVuCisjIHJlZ2lzdGVyaW5nIG11bHRpcGxlIHNlYWNoIGZ1bmN0aW9ucworX1RFU1RfQ09ERUNTID0ge30KKworZGVmIF9nZXRfdGVzdF9jb2RlYyhjb2RlY19uYW1lKToKKyAgICByZXR1cm4gX1RFU1RfQ09ERUNTLmdldChjb2RlY19uYW1lKQorY29kZWNzLnJlZ2lzdGVyKF9nZXRfdGVzdF9jb2RlYykgIyBSZXR1cm5zIE5vbmUsIG5vdCB1c2FibGUgYXMgYSBkZWNvcmF0b3IKKwordHJ5OgorICAgICMgSXNzdWUgIzIyMTY2OiBBbHNvIG5lZWQgdG8gY2xlYXIgdGhlIGludGVybmFsIGNhY2hlIGluIENQeXRob24KKyAgICBmcm9tIF9jb2RlY3MgaW1wb3J0IF9mb3JnZXRfY29kZWMKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBkZWYgX2ZvcmdldF9jb2RlYyhjb2RlY19uYW1lKToKKyAgICAgICAgcGFzcworCisKK2NsYXNzIEV4Y2VwdGlvbkNoYWluaW5nVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgICMgVGhlcmUncyBubyB3YXkgdG8gdW5yZWdpc3RlciBhIGNvZGVjIHNlYXJjaCBmdW5jdGlvbiwgc28gd2UganVzdAorICAgICAgICAjIGVuc3VyZSB3ZSByZW5kZXIgdGhpcyBvbmUgZmFpcmx5IGhhcm1sZXNzIGFmdGVyIHRoZSB0ZXN0CisgICAgICAgICMgY2FzZSBmaW5pc2hlcyBieSB1c2luZyB0aGUgdGVzdCBjYXNlIHJlcHIgYXMgdGhlIGNvZGVjIG5hbWUKKyAgICAgICAgIyBUaGUgY29kZWNzIG1vZHVsZSBub3JtYWxpemVzIGNvZGVjIG5hbWVzLCBhbHRob3VnaCB0aGlzIGRvZXNuJ3QKKyAgICAgICAgIyBhcHBlYXIgdG8gYmUgZm9ybWFsbHkgZG9jdW1lbnRlZC4uLgorICAgICAgICAjIFdlIGFsc28gbWFrZSBzdXJlIHdlIHVzZSBhIHRydWx5IHVuaXF1ZSBpZCBmb3IgdGhlIGN1c3RvbSBjb2RlYworICAgICAgICAjIHRvIGF2b2lkIGlzc3VlcyB3aXRoIHRoZSBjb2RlYyBjYWNoZSB3aGVuIHJ1bm5pbmcgdGhlc2UgdGVzdHMKKyAgICAgICAgIyBtdWx0aXBsZSB0aW1lcyAoZS5nLiB3aGVuIGh1bnRpbmcgZm9yIHJlZmxlYWtzKQorICAgICAgICB1bmlxdWVfaWQgPSByZXByKHNlbGYpICsgc3RyKGlkKHNlbGYpKQorICAgICAgICBzZWxmLmNvZGVjX25hbWUgPSBlbmNvZGluZ3Mubm9ybWFsaXplX2VuY29kaW5nKHVuaXF1ZV9pZCkubG93ZXIoKQorCisgICAgICAgICMgV2Ugc3RvcmUgdGhlIG9iamVjdCB0byByYWlzZSBvbiB0aGUgaW5zdGFuY2UgYmVjYXVzZSBvZiBhIGJhZAorICAgICAgICAjIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIGNvZGVjIGNhY2hpbmcgKHdoaWNoIG1lYW5zIHdlIGNhbid0CisgICAgICAgICMgcmVjcmVhdGUgdGhlIGNvZGVjIGVudHJ5KSBhbmQgcmVncnRlc3QgcmVmbGVhayBodW50aW5nICh3aGljaAorICAgICAgICAjIHJ1bnMgdGhlIHNhbWUgdGVzdCBpbnN0YW5jZSBtdWx0aXBsZSB0aW1lcykuIFRoaXMgbWVhbnMgd2UKKyAgICAgICAgIyBuZWVkIHRvIGVuc3VyZSB0aGUgY29kZWNzIGNhbGwgYmFjayBpbiB0byB0aGUgaW5zdGFuY2UgdG8gZmluZAorICAgICAgICAjIG91dCB3aGljaCBleGNlcHRpb24gdG8gcmFpc2UgcmF0aGVyIHRoYW4gYmluZGluZyB0aGVtIGluIGEKKyAgICAgICAgIyBjbG9zdXJlIHRvIGFuIG9iamVjdCB0aGF0IG1heSBjaGFuZ2Ugb24gdGhlIG5leHQgcnVuCisgICAgICAgIHNlbGYub2JqX3RvX3JhaXNlID0gUnVudGltZUVycm9yCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIF9URVNUX0NPREVDUy5wb3Aoc2VsZi5jb2RlY19uYW1lLCBOb25lKQorICAgICAgICAjIElzc3VlICMyMjE2NjogQWxzbyBwb3AgZnJvbSBjYWNoZXMgdG8gYXZvaWQgYXBwZWFyYW5jZSBvZiByZWYgbGVha3MKKyAgICAgICAgZW5jb2RpbmdzLl9jYWNoZS5wb3Aoc2VsZi5jb2RlY19uYW1lLCBOb25lKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBfZm9yZ2V0X2NvZGVjKHNlbGYuY29kZWNfbmFtZSkKKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcGFzcworCisgICAgZGVmIHNldF9jb2RlYyhzZWxmLCBlbmNvZGUsIGRlY29kZSk6CisgICAgICAgIGNvZGVjX2luZm8gPSBjb2RlY3MuQ29kZWNJbmZvKGVuY29kZSwgZGVjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPXNlbGYuY29kZWNfbmFtZSkKKyAgICAgICAgX1RFU1RfQ09ERUNTW3NlbGYuY29kZWNfbmFtZV0gPSBjb2RlY19pbmZvCisKKyAgICBAY29udGV4dGxpYi5jb250ZXh0bWFuYWdlcgorICAgIGRlZiBhc3NlcnRXcmFwcGVkKHNlbGYsIG9wZXJhdGlvbiwgZXhjX3R5cGUsIG1zZyk6CisgICAgICAgIGZ1bGxfbXNnID0gciJ7fSB3aXRoIHshcn0gY29kZWMgZmFpbGVkIFwoe306IHt9XCkiLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiwgc2VsZi5jb2RlY19uYW1lLCBleGNfdHlwZS5fX25hbWVfXywgbXNnKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoZXhjX3R5cGUsIGZ1bGxfbXNnKSBhcyBjYXVnaHQ6CisgICAgICAgICAgICB5aWVsZCBjYXVnaHQKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGNhdWdodC5leGNlcHRpb24uX19jYXVzZV9fLCBleGNfdHlwZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoY2F1Z2h0LmV4Y2VwdGlvbi5fX2NhdXNlX18uX190cmFjZWJhY2tfXykKKworICAgIGRlZiByYWlzZV9vYmooc2VsZiwgKmFyZ3MsICoqa3dkcyk6CisgICAgICAgICMgSGVscGVyIHRvIGR5bmFtaWNhbGx5IGNoYW5nZSB0aGUgb2JqZWN0IHJhaXNlZCBieSBhIHRlc3QgY29kZWMKKyAgICAgICAgcmFpc2Ugc2VsZi5vYmpfdG9fcmFpc2UKKworICAgIGRlZiBjaGVja193cmFwcGVkKHNlbGYsIG9ial90b19yYWlzZSwgbXNnLCBleGNfdHlwZT1SdW50aW1lRXJyb3IpOgorICAgICAgICBzZWxmLm9ial90b19yYWlzZSA9IG9ial90b19yYWlzZQorICAgICAgICBzZWxmLnNldF9jb2RlYyhzZWxmLnJhaXNlX29iaiwgc2VsZi5yYWlzZV9vYmopCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXcmFwcGVkKCJlbmNvZGluZyIsIGV4Y190eXBlLCBtc2cpOgorICAgICAgICAgICAgInN0cl9pbnB1dCIuZW5jb2RlKHNlbGYuY29kZWNfbmFtZSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdyYXBwZWQoImVuY29kaW5nIiwgZXhjX3R5cGUsIG1zZyk6CisgICAgICAgICAgICBjb2RlY3MuZW5jb2RlKCJzdHJfaW5wdXQiLCBzZWxmLmNvZGVjX25hbWUpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXcmFwcGVkKCJkZWNvZGluZyIsIGV4Y190eXBlLCBtc2cpOgorICAgICAgICAgICAgYiJieXRlcyBpbnB1dCIuZGVjb2RlKHNlbGYuY29kZWNfbmFtZSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdyYXBwZWQoImRlY29kaW5nIiwgZXhjX3R5cGUsIG1zZyk6CisgICAgICAgICAgICBjb2RlY3MuZGVjb2RlKGIiYnl0ZXMgaW5wdXQiLCBzZWxmLmNvZGVjX25hbWUpCisKKyAgICBkZWYgdGVzdF9yYWlzZV9ieV90eXBlKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3dyYXBwZWQoUnVudGltZUVycm9yLCAiIikKKworICAgIGRlZiB0ZXN0X3JhaXNlX2J5X3ZhbHVlKHNlbGYpOgorICAgICAgICBtc2cgPSAiVGhpcyBzaG91bGQgYmUgd3JhcHBlZCIKKyAgICAgICAgc2VsZi5jaGVja193cmFwcGVkKFJ1bnRpbWVFcnJvcihtc2cpLCBtc2cpCisKKyAgICBkZWYgdGVzdF9yYWlzZV9ncmFuZGNoaWxkX3N1YmNsYXNzX2V4YWN0X3NpemUoc2VsZik6CisgICAgICAgIG1zZyA9ICJUaGlzIHNob3VsZCBiZSB3cmFwcGVkIgorICAgICAgICBjbGFzcyBNeVJ1bnRpbWVFcnJvcihSdW50aW1lRXJyb3IpOgorICAgICAgICAgICAgX19zbG90c19fID0gKCkKKyAgICAgICAgc2VsZi5jaGVja193cmFwcGVkKE15UnVudGltZUVycm9yKG1zZyksIG1zZywgTXlSdW50aW1lRXJyb3IpCisKKyAgICBkZWYgdGVzdF9yYWlzZV9zdWJjbGFzc193aXRoX3dlYWtyZWZfc3VwcG9ydChzZWxmKToKKyAgICAgICAgbXNnID0gIlRoaXMgc2hvdWxkIGJlIHdyYXBwZWQiCisgICAgICAgIGNsYXNzIE15UnVudGltZUVycm9yKFJ1bnRpbWVFcnJvcik6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuY2hlY2tfd3JhcHBlZChNeVJ1bnRpbWVFcnJvcihtc2cpLCBtc2csIE15UnVudGltZUVycm9yKQorCisgICAgZGVmIGNoZWNrX25vdF93cmFwcGVkKHNlbGYsIG9ial90b19yYWlzZSwgbXNnKToKKyAgICAgICAgZGVmIHJhaXNlX29iaigqYXJncywgKiprd2RzKToKKyAgICAgICAgICAgIHJhaXNlIG9ial90b19yYWlzZQorICAgICAgICBzZWxmLnNldF9jb2RlYyhyYWlzZV9vYmosIHJhaXNlX29iaikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFJ1bnRpbWVFcnJvciwgbXNnKToKKyAgICAgICAgICAgICJzdHIgaW5wdXQiLmVuY29kZShzZWxmLmNvZGVjX25hbWUpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChSdW50aW1lRXJyb3IsIG1zZyk6CisgICAgICAgICAgICBjb2RlY3MuZW5jb2RlKCJzdHIgaW5wdXQiLCBzZWxmLmNvZGVjX25hbWUpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChSdW50aW1lRXJyb3IsIG1zZyk6CisgICAgICAgICAgICBiImJ5dGVzIGlucHV0Ii5kZWNvZGUoc2VsZi5jb2RlY19uYW1lKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoUnVudGltZUVycm9yLCBtc2cpOgorICAgICAgICAgICAgY29kZWNzLmRlY29kZShiImJ5dGVzIGlucHV0Iiwgc2VsZi5jb2RlY19uYW1lKQorCisgICAgZGVmIHRlc3RfaW5pdF9vdmVycmlkZV9pc19ub3Rfd3JhcHBlZChzZWxmKToKKyAgICAgICAgY2xhc3MgQ3VzdG9tSW5pdChSdW50aW1lRXJyb3IpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5jaGVja19ub3Rfd3JhcHBlZChDdXN0b21Jbml0LCAiIikKKworICAgIGRlZiB0ZXN0X25ld19vdmVycmlkZV9pc19ub3Rfd3JhcHBlZChzZWxmKToKKyAgICAgICAgY2xhc3MgQ3VzdG9tTmV3KFJ1bnRpbWVFcnJvcik6CisgICAgICAgICAgICBkZWYgX19uZXdfXyhjbHMpOgorICAgICAgICAgICAgICAgIHJldHVybiBzdXBlcigpLl9fbmV3X18oY2xzKQorICAgICAgICBzZWxmLmNoZWNrX25vdF93cmFwcGVkKEN1c3RvbU5ldywgIiIpCisKKyAgICBkZWYgdGVzdF9pbnN0YW5jZV9hdHRyaWJ1dGVfaXNfbm90X3dyYXBwZWQoc2VsZik6CisgICAgICAgIG1zZyA9ICJUaGlzIHNob3VsZCBOT1QgYmUgd3JhcHBlZCIKKyAgICAgICAgZXhjID0gUnVudGltZUVycm9yKG1zZykKKyAgICAgICAgZXhjLmF0dHIgPSAxCisgICAgICAgIHNlbGYuY2hlY2tfbm90X3dyYXBwZWQoZXhjLCAiXnt9JCIuZm9ybWF0KG1zZykpCisKKyAgICBkZWYgdGVzdF9ub25fc3RyX2FyZ19pc19ub3Rfd3JhcHBlZChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19ub3Rfd3JhcHBlZChSdW50aW1lRXJyb3IoMSksICIxIikKKworICAgIGRlZiB0ZXN0X211bHRpcGxlX2FyZ3NfaXNfbm90X3dyYXBwZWQoc2VsZik6CisgICAgICAgIG1zZ19yZSA9IHIiXlwoJ2EnLCAnYicsICdjJ1wpJCIKKyAgICAgICAgc2VsZi5jaGVja19ub3Rfd3JhcHBlZChSdW50aW1lRXJyb3IoJ2EnLCAnYicsICdjJyksIG1zZ19yZSkKKworICAgICMgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTE5NjA5CisgICAgZGVmIHRlc3RfY29kZWNfbG9va3VwX2ZhaWx1cmVfbm90X3dyYXBwZWQoc2VsZik6CisgICAgICAgIG1zZyA9ICJedW5rbm93biBlbmNvZGluZzoge30kIi5mb3JtYXQoc2VsZi5jb2RlY19uYW1lKQorICAgICAgICAjIFRoZSBpbml0aWFsIGNvZGVjIGxvb2t1cCBzaG91bGQgbm90IGJlIHdyYXBwZWQKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KExvb2t1cEVycm9yLCBtc2cpOgorICAgICAgICAgICAgInN0ciBpbnB1dCIuZW5jb2RlKHNlbGYuY29kZWNfbmFtZSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KExvb2t1cEVycm9yLCBtc2cpOgorICAgICAgICAgICAgY29kZWNzLmVuY29kZSgic3RyIGlucHV0Iiwgc2VsZi5jb2RlY19uYW1lKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoTG9va3VwRXJyb3IsIG1zZyk6CisgICAgICAgICAgICBiImJ5dGVzIGlucHV0Ii5kZWNvZGUoc2VsZi5jb2RlY19uYW1lKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoTG9va3VwRXJyb3IsIG1zZyk6CisgICAgICAgICAgICBjb2RlY3MuZGVjb2RlKGIiYnl0ZXMgaW5wdXQiLCBzZWxmLmNvZGVjX25hbWUpCisKKyAgICBkZWYgdGVzdF91bmZsYWdnZWRfbm9uX3RleHRfY29kZWNfaGFuZGxpbmcoc2VsZik6CisgICAgICAgICMgVGhlIHN0ZGxpYiBub24tdGV4dCBjb2RlY3MgYXJlIG5vdyBtYXJrZWQgc28gdGhleSdyZQorICAgICAgICAjIHByZS1lbXB0aXZlbHkgc2tpcHBlZCBieSB0aGUgdGV4dCBtb2RlbCByZWxhdGVkIG1ldGhvZHMKKyAgICAgICAgIyBIb3dldmVyLCB0aGlyZCBwYXJ0eSBjb2RlY3Mgd29uJ3QgYmUgZmxhZ2dlZCwgc28gd2Ugc3RpbGwgbWFrZQorICAgICAgICAjIHN1cmUgdGhlIGNhc2Ugd2hlcmUgYW4gaW5hcHByb3ByaWF0ZSBvdXRwdXQgdHlwZSBpcyBwcm9kdWNlZCBpcworICAgICAgICAjIGhhbmRsZWQgYXBwcm9wcmlhdGVseQorICAgICAgICBkZWYgZW5jb2RlX3RvX3N0cigqYXJncywgKiprd2RzKToKKyAgICAgICAgICAgIHJldHVybiAibm90IGJ5dGVzISIsIDAKKyAgICAgICAgZGVmIGRlY29kZV90b19ieXRlcygqYXJncywgKiprd2RzKToKKyAgICAgICAgICAgIHJldHVybiBiIm5vdCBzdHIhIiwgMAorICAgICAgICBzZWxmLnNldF9jb2RlYyhlbmNvZGVfdG9fc3RyLCBkZWNvZGVfdG9fYnl0ZXMpCisgICAgICAgICMgTm8gaW5wdXQgb3Igb3V0cHV0IHR5cGUgY2hlY2tzIG9uIHRoZSBjb2RlY3MgbW9kdWxlIGZ1bmN0aW9ucworICAgICAgICBlbmNvZGVkID0gY29kZWNzLmVuY29kZShOb25lLCBzZWxmLmNvZGVjX25hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW5jb2RlZCwgIm5vdCBieXRlcyEiKQorICAgICAgICBkZWNvZGVkID0gY29kZWNzLmRlY29kZShOb25lLCBzZWxmLmNvZGVjX25hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVjb2RlZCwgYiJub3Qgc3RyISIpCisgICAgICAgICMgVGV4dCBtb2RlbCBtZXRob2RzIHNob3VsZCBjb21wbGFpbgorICAgICAgICBmbXQgPSAociJeeyFyfSBlbmNvZGVyIHJldHVybmVkICdzdHInIGluc3RlYWQgb2YgJ2J5dGVzJzsgIgorICAgICAgICAgICAgICAgICJ1c2UgY29kZWNzLmVuY29kZVwoXCkgdG8gZW5jb2RlIHRvIGFyYml0cmFyeSB0eXBlcyQiKQorICAgICAgICBtc2cgPSBmbXQuZm9ybWF0KHNlbGYuY29kZWNfbmFtZSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFR5cGVFcnJvciwgbXNnKToKKyAgICAgICAgICAgICJzdHJfaW5wdXQiLmVuY29kZShzZWxmLmNvZGVjX25hbWUpCisgICAgICAgIGZtdCA9IChyIl57IXJ9IGRlY29kZXIgcmV0dXJuZWQgJ2J5dGVzJyBpbnN0ZWFkIG9mICdzdHInOyAiCisgICAgICAgICAgICAgICAgInVzZSBjb2RlY3MuZGVjb2RlXChcKSB0byBkZWNvZGUgdG8gYXJiaXRyYXJ5IHR5cGVzJCIpCisgICAgICAgIG1zZyA9IGZtdC5mb3JtYXQoc2VsZi5jb2RlY19uYW1lKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVHlwZUVycm9yLCBtc2cpOgorICAgICAgICAgICAgYiJieXRlcyBpbnB1dCIuZGVjb2RlKHNlbGYuY29kZWNfbmFtZSkKKwogCiAKIEB1bml0dGVzdC5za2lwVW5sZXNzKHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInLApAQCAtMjQ2MCw4ICsyODc3LDggQEAKICAgICBkZWYgdGVzdF9pbnZhbGlkX2NvZGVfcGFnZShzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY29kZWNzLmNvZGVfcGFnZV9lbmNvZGUsIC0xLCAnYScpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNvZGVjcy5jb2RlX3BhZ2VfZGVjb2RlLCAtMSwgYidhJykKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoV2luZG93c0Vycm9yLCBjb2RlY3MuY29kZV9wYWdlX2VuY29kZSwgMTIzLCAnYScpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFdpbmRvd3NFcnJvciwgY29kZWNzLmNvZGVfcGFnZV9kZWNvZGUsIDEyMywgYidhJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgY29kZWNzLmNvZGVfcGFnZV9lbmNvZGUsIDEyMywgJ2EnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBjb2RlY3MuY29kZV9wYWdlX2RlY29kZSwgMTIzLCBiJ2EnKQogCiAgICAgZGVmIHRlc3RfY29kZV9wYWdlX25hbWUoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVW5pY29kZUVuY29kZUVycm9yLCAnY3A5MzInLApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jb2RpbmcucHkgYi9MaWIvdGVzdC90ZXN0X2NvZGluZy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmRiYjUxZi4uMDAwMDAwMAotLS0gYS9MaWIvdGVzdC90ZXN0X2NvZGluZy5weQorKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLWltcG9ydCB1bml0dGVzdAotZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IFRFU1RGTiwgdW5saW5rLCB1bmxvYWQKLWltcG9ydCBpbXBvcnRsaWIsIG9zLCBzeXMsIHN1YnByb2Nlc3MKLQotY2xhc3MgQ29kaW5nVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgZGVmIHRlc3RfYmFkX2NvZGluZyhzZWxmKToKLSAgICAgICAgbW9kdWxlX25hbWUgPSAnYmFkX2NvZGluZycKLSAgICAgICAgc2VsZi52ZXJpZnlfYmFkX21vZHVsZShtb2R1bGVfbmFtZSkKLQotICAgIGRlZiB0ZXN0X2JhZF9jb2RpbmcyKHNlbGYpOgotICAgICAgICBtb2R1bGVfbmFtZSA9ICdiYWRfY29kaW5nMicKLSAgICAgICAgc2VsZi52ZXJpZnlfYmFkX21vZHVsZShtb2R1bGVfbmFtZSkKLQotICAgIGRlZiB2ZXJpZnlfYmFkX21vZHVsZShzZWxmLCBtb2R1bGVfbmFtZSk6Ci0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yLCBfX2ltcG9ydF9fLCAndGVzdC4nICsgbW9kdWxlX25hbWUpCi0KLSAgICAgICAgcGF0aCA9IG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykKLSAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4ocGF0aCwgbW9kdWxlX25hbWUgKyAnLnB5JykKLSAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAicmIiKSBhcyBmcDoKLSAgICAgICAgICAgIGJ5dGVzID0gZnAucmVhZCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yLCBjb21waWxlLCBieXRlcywgZmlsZW5hbWUsICdleGVjJykKLQotICAgIGRlZiB0ZXN0X2V4ZWNfdmFsaWRfY29kaW5nKHNlbGYpOgotICAgICAgICBkID0ge30KLSAgICAgICAgZXhlYyhiJyMgY29kaW5nOiBjcDk0OVxuYSA9ICJceGFhXHhhNyJcbicsIGQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFsnYSddLCAnXHUzMDQ3JykKLQotICAgIGRlZiB0ZXN0X2ZpbGVfcGFyc2Uoc2VsZik6Ci0gICAgICAgICMgaXNzdWUxMTM0OiBhbGwgZW5jb2RpbmdzIG91dHNpZGUgbGF0aW4tMSBhbmQgdXRmLTggZmFpbCBvbgotICAgICAgICAjIG11bHRpbGluZSBzdHJpbmdzIGFuZCBsb25nIGxpbmVzICg+NTEyIGNvbHVtbnMpCi0gICAgICAgIHVubG9hZChURVNURk4pCi0gICAgICAgIGZpbGVuYW1lID0gVEVTVEZOICsgIi5weSIKLSAgICAgICAgZiA9IG9wZW4oZmlsZW5hbWUsICJ3IiwgZW5jb2Rpbmc9ImNwMTI1MiIpCi0gICAgICAgIHN5cy5wYXRoLmluc2VydCgwLCBvcy5jdXJkaXIpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHdpdGggZjoKLSAgICAgICAgICAgICAgICBmLndyaXRlKCIjIC0qLSBjb2Rpbmc6IGNwMTI1MiAtKi1cbiIpCi0gICAgICAgICAgICAgICAgZi53cml0ZSgiJycnQSBzaG9ydCBzdHJpbmdcbiIpCi0gICAgICAgICAgICAgICAgZi53cml0ZSgiJycnXG4iKQotICAgICAgICAgICAgICAgIGYud3JpdGUoIidBIHZlcnkgbG9uZyBzdHJpbmcgJXMnXG4iICUgKCJYIiAqIDEwMDApKQotCi0gICAgICAgICAgICBpbXBvcnRsaWIuaW52YWxpZGF0ZV9jYWNoZXMoKQotICAgICAgICAgICAgX19pbXBvcnRfXyhURVNURk4pCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBkZWwgc3lzLnBhdGhbMF0KLSAgICAgICAgICAgIHVubGluayhmaWxlbmFtZSkKLSAgICAgICAgICAgIHVubGluayhmaWxlbmFtZSArICJjIikKLSAgICAgICAgICAgIHVubGluayhmaWxlbmFtZSArICJvIikKLSAgICAgICAgICAgIHVubG9hZChURVNURk4pCi0KLSAgICBkZWYgdGVzdF9lcnJvcl9mcm9tX3N0cmluZyhzZWxmKToKLSAgICAgICAgIyBTZWUgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTYyODkKLSAgICAgICAgaW5wdXQgPSAiIyBjb2Rpbmc6IGFzY2lpXG5cTntTTk9XTUFOfSIuZW5jb2RlKCd1dGYtOCcpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IpIGFzIGM6Ci0gICAgICAgICAgICBjb21waWxlKGlucHV0LCAiPHN0cmluZz4iLCAiZXhlYyIpCi0gICAgICAgIGV4cGVjdGVkID0gIidhc2NpaScgY29kZWMgY2FuJ3QgZGVjb2RlIGJ5dGUgMHhlMiBpbiBwb3NpdGlvbiAxNjogIiBcCi0gICAgICAgICAgICAgICAgICAgIm9yZGluYWwgbm90IGluIHJhbmdlKDEyOCkiCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjLmV4Y2VwdGlvbi5hcmdzWzBdLnN0YXJ0c3dpdGgoZXhwZWN0ZWQpLAotICAgICAgICAgICAgICAgICAgICAgICAgbXNnPWMuZXhjZXB0aW9uLmFyZ3NbMF0pCi0KLSAgICBkZWYgdGVzdF8yMDczMShzZWxmKToKLSAgICAgICAgc3ViID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsCi0gICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29kaW5nMjA3MzEucHknKV0sCi0gICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQotICAgICAgICBlcnIgPSBzdWIuY29tbXVuaWNhdGUoKVsxXQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1Yi5yZXR1cm5jb2RlLCAwKQotICAgICAgICBzZWxmLmFzc2VydE5vdEluKGInU3ludGF4RXJyb3InLCBlcnIpCi0KLWlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2NvbGxlY3Rpb25zLnB5IGIvTGliL3Rlc3QvdGVzdF9jb2xsZWN0aW9ucy5weQppbmRleCBmZjUyNzU1Li4wODgyYmFjIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2NvbGxlY3Rpb25zLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY29sbGVjdGlvbnMucHkKQEAgLTEsMTYgKzEsMTkgQEAKICIiIlVuaXQgdGVzdHMgZm9yIGNvbGxlY3Rpb25zLnB5LiIiIgogCi1pbXBvcnQgdW5pdHRlc3QsIGRvY3Rlc3QsIG9wZXJhdG9yCi1mcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgVEVTVEZOLCBmb3JnZXQsIHVubGluawotaW1wb3J0IGluc3BlY3QKLWZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAotZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgbmFtZWR0dXBsZSwgQ291bnRlciwgT3JkZXJlZERpY3QsIF9jb3VudF9lbGVtZW50cwotZnJvbSB0ZXN0IGltcG9ydCBtYXBwaW5nX3Rlc3RzCi1pbXBvcnQgcGlja2xlLCBjb3B5Ci1mcm9tIHJhbmRvbSBpbXBvcnQgcmFuZHJhbmdlLCBzaHVmZmxlCitpbXBvcnQgY29sbGVjdGlvbnMKK2ltcG9ydCBjb3B5CitpbXBvcnQgZG9jdGVzdAogaW1wb3J0IGtleXdvcmQKK2ltcG9ydCBvcGVyYXRvcgoraW1wb3J0IHBpY2tsZQorZnJvbSByYW5kb20gaW1wb3J0IGNob2ljZSwgcmFuZHJhbmdlCiBpbXBvcnQgcmUKK2ltcG9ydCBzdHJpbmcKIGltcG9ydCBzeXMKK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAoraW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gY29sbGVjdGlvbnMgaW1wb3J0IG5hbWVkdHVwbGUsIENvdW50ZXIsIE9yZGVyZWREaWN0LCBfY291bnRfZWxlbWVudHMKIGZyb20gY29sbGVjdGlvbnMgaW1wb3J0IFVzZXJEaWN0CiBmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBDaGFpbk1hcAogZnJvbSBjb2xsZWN0aW9ucy5hYmMgaW1wb3J0IEhhc2hhYmxlLCBJdGVyYWJsZSwgSXRlcmF0b3IKQEAgLTYzLDEwICs2NiwxNyBAQAogICAgICAgICAgICAgZm9yIG0xLCBtMiBpbiB6aXAoZC5tYXBzWzE6XSwgZS5tYXBzWzE6XSk6CiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhtMSwgbTIpCiAKLSAgICAgICAgZm9yIGUgaW4gW3BpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMoZCkpLAotICAgICAgICAgICAgICAgICAgY29weS5kZWVwY29weShkKSwKKyAgICAgICAgIyBjaGVjayBkZWVwIGNvcGllcworICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIGUgPSBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKGQsIHByb3RvKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCwgZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5tYXBzLCBlLm1hcHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90KGQsIGUpCisgICAgICAgICAgICBmb3IgbTEsIG0yIGluIHppcChkLm1hcHMsIGUubWFwcyk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdChtMSwgbTIsIGUpCisgICAgICAgIGZvciBlIGluIFtjb3B5LmRlZXBjb3B5KGQpLAogICAgICAgICAgICAgICAgICAgZXZhbChyZXByKGQpKQotICAgICAgICAgICAgICAgIF06ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgY2hlY2sgZGVlcCBjb3BpZXMKKyAgICAgICAgICAgICAgICBdOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCBlKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLm1hcHMsIGUubWFwcykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QoZCwgZSkKQEAgLTExMiw2ICsxMjIsMzggQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWN0KGQpLCBkaWN0KGE9MSwgYj0yLCBjPTMwKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWN0KGQuaXRlbXMoKSksIGRpY3QoYT0xLCBiPTIsIGM9MzApKQogCisgICAgZGVmIHRlc3RfbmV3X2NoaWxkKHNlbGYpOgorICAgICAgICAnVGVzdHMgZm9yIGNoYW5nZXMgZm9yIGlzc3VlICMxNjYxMy4nCisgICAgICAgIGMgPSBDaGFpbk1hcCgpCisgICAgICAgIGNbJ2EnXSA9IDEKKyAgICAgICAgY1snYiddID0gMgorICAgICAgICBtID0geydiJzoyMCwgJ2MnOiAzMH0KKyAgICAgICAgZCA9IGMubmV3X2NoaWxkKG0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5tYXBzLCBbeydiJzoyMCwgJ2MnOjMwfSwgeydhJzoxLCAnYic6Mn1dKSAgIyBjaGVjayBpbnRlcm5hbCBzdGF0ZQorICAgICAgICBzZWxmLmFzc2VydElzKG0sIGQubWFwc1swXSkKKworICAgICAgICAjIFVzZSBhIGRpZmZlcmVudCBtYXAgdGhhbiBhIGRpY3QKKyAgICAgICAgY2xhc3MgbG93ZXJkaWN0KGRpY3QpOgorICAgICAgICAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGtleSk6CisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShrZXksIHN0cik6CisgICAgICAgICAgICAgICAgICAgIGtleSA9IGtleS5sb3dlcigpCisgICAgICAgICAgICAgICAgcmV0dXJuIGRpY3QuX19nZXRpdGVtX18oc2VsZiwga2V5KQorICAgICAgICAgICAgZGVmIF9fY29udGFpbnNfXyhzZWxmLCBrZXkpOgorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uoa2V5LCBzdHIpOgorICAgICAgICAgICAgICAgICAgICBrZXkgPSBrZXkubG93ZXIoKQorICAgICAgICAgICAgICAgIHJldHVybiBkaWN0Ll9fY29udGFpbnNfXyhzZWxmLCBrZXkpCisKKyAgICAgICAgYyA9IENoYWluTWFwKCkKKyAgICAgICAgY1snYSddID0gMQorICAgICAgICBjWydiJ10gPSAyCisgICAgICAgIG0gPSBsb3dlcmRpY3QoYj0yMCwgYz0zMCkKKyAgICAgICAgZCA9IGMubmV3X2NoaWxkKG0pCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobSwgZC5tYXBzWzBdKQorICAgICAgICBmb3Iga2V5IGluICdhYmMnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgY2hlY2sgY29udGFpbnMKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oa2V5LCBkKQorICAgICAgICBmb3IgaywgdiBpbiBkaWN0KGE9MSwgQj0yMCwgQz0zMCwgej0xMDApLml0ZW1zKCk6ICAgICAgICAgICAgICMgY2hlY2sgZ2V0CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZ2V0KGssIDEwMCksIHYpCisKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMjIyBOYW1lZCBUdXBsZXMKQEAgLTE4Niw3ICsyMjgsNiBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuX2ZpZWxkcywgKCd4JywgJ3knKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgdGVzdCBfZmllbGRzIGF0dHJpYnV0ZQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuX3JlcGxhY2UoeD0xKSwgKDEsIDIyKSkgICAgICAgICAgICAgICAgICAgICAgICAgICMgdGVzdCBfcmVwbGFjZSBtZXRob2QKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLl9hc2RpY3QoKSwgZGljdCh4PTExLCB5PTIyKSkgICAgICAgICAgICAgICAgICAgICAjIHRlc3QgX2FzZGljdCBtZXRob2QKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YXJzKHApLCBwLl9hc2RpY3QoKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHZlcmlmeSB0aGF0IHZhcnMoKSB3b3JrcwogCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHAuX3JlcGxhY2UoeD0xLCBlcnJvcj0yKQpAQCAtMjQzLDggKzI4NCw3IEBACiAKICAgICAgICAgIyBuID0gNTAwMAogICAgICAgICBuID0gMjU0ICMgU3ludGF4RXJyb3I6IG1vcmUgdGhhbiAyNTUgYXJndW1lbnRzOgotICAgICAgICBpbXBvcnQgc3RyaW5nLCByYW5kb20KLSAgICAgICAgbmFtZXMgPSBsaXN0KHNldCgnJy5qb2luKFtyYW5kb20uY2hvaWNlKHN0cmluZy5hc2NpaV9sZXR0ZXJzKQorICAgICAgICBuYW1lcyA9IGxpc3Qoc2V0KCcnLmpvaW4oW2Nob2ljZShzdHJpbmcuYXNjaWlfbGV0dGVycykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgaiBpbiByYW5nZSgxMCldKSBmb3IgaSBpbiByYW5nZShuKSkpCiAgICAgICAgIG4gPSBsZW4obmFtZXMpCiAgICAgICAgIEJpZyA9IG5hbWVkdHVwbGUoJ0JpZycsIG5hbWVzKQpAQCAtMjY5LDcgKzMwOSw3IEBACiAgICAgICAgIGZvciBtb2R1bGUgaW4gKHBpY2tsZSwpOgogICAgICAgICAgICAgbG9hZHMgPSBnZXRhdHRyKG1vZHVsZSwgJ2xvYWRzJykKICAgICAgICAgICAgIGR1bXBzID0gZ2V0YXR0cihtb2R1bGUsICdkdW1wcycpCi0gICAgICAgICAgICBmb3IgcHJvdG9jb2wgaW4gLTEsIDAsIDEsIDI6CisgICAgICAgICAgICBmb3IgcHJvdG9jb2wgaW4gcmFuZ2UoLTEsIG1vZHVsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CiAgICAgICAgICAgICAgICAgcSA9IGxvYWRzKGR1bXBzKHAsIHByb3RvY29sKSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAsIHEpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLl9maWVsZHMsIHEuX2ZpZWxkcykKQEAgLTM0MSw2ICszODEsMTcgQEAKICAgICAgICAgZ2xvYmFscygpLnBvcCgnTlRDb2xvcicsIE5vbmUpICAgICAgICAgICMgY2xlYW4tdXAgYWZ0ZXIgdGhpcyB0ZXN0CiAKIAorICAgIGRlZiB0ZXN0X25hbWVkdHVwbGVfc3ViY2xhc3NfaXNzdWVfMjQ5MzEoc2VsZik6CisgICAgICAgIGNsYXNzIFBvaW50KG5hbWVkdHVwbGUoJ19Qb2ludCcsIFsneCcsICd5J10pKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBhID0gUG9pbnQoMywgNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLl9hc2RpY3QoKSwgT3JkZXJlZERpY3QoWygneCcsIDMpLCAoJ3knLCA0KV0pKQorCisgICAgICAgIGEudyA9IDUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLl9fZGljdF9fLCB7J3cnOiA1fSkKKworCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyMjIEFic3RyYWN0IEJhc2UgQ2xhc3NlcwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKQEAgLTY4OCwxNCArNzM5LDE2NiBAQAogCiAgICAgICAgIGNzID0gTXlDb21wYXJhYmxlU2V0KCkKICAgICAgICAgbmNzID0gTXlOb25Db21wYXJhYmxlU2V0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShuY3MgPCBjcykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5jcyA8PSBjcykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShuY3MgPiBjcykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5jcyA+PSBjcykKKworICAgIGRlZiBhc3NlcnRTYW1lU2V0KHNlbGYsIHMxLCBzMik6CisgICAgICAgICMgY29lcmNlIGJvdGggdG8gYSByZWFsIHNldCB0aGVuIGNoZWNrIGVxdWFsaXR5CisgICAgICAgIHNlbGYuYXNzZXJ0U2V0RXF1YWwoc2V0KHMxKSwgc2V0KHMyKSkKKworICAgIGRlZiB0ZXN0X1NldF9pbnRlcm9wZXJhYmlsaXR5X3dpdGhfcmVhbF9zZXRzKHNlbGYpOgorICAgICAgICAjIElzc3VlOiA4NzQzCisgICAgICAgIGNsYXNzIExpc3RTZXQoU2V0KToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBlbGVtZW50cz0oKSk6CisgICAgICAgICAgICAgICAgc2VsZi5kYXRhID0gW10KKyAgICAgICAgICAgICAgICBmb3IgZWxlbSBpbiBlbGVtZW50czoKKyAgICAgICAgICAgICAgICAgICAgaWYgZWxlbSBub3QgaW4gc2VsZi5kYXRhOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kYXRhLmFwcGVuZChlbGVtKQorICAgICAgICAgICAgZGVmIF9fY29udGFpbnNfXyhzZWxmLCBlbGVtKToKKyAgICAgICAgICAgICAgICByZXR1cm4gZWxlbSBpbiBzZWxmLmRhdGEKKyAgICAgICAgICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gaXRlcihzZWxmLmRhdGEpCisgICAgICAgICAgICBkZWYgX19sZW5fXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gbGVuKHNlbGYuZGF0YSkKKyAgICAgICAgICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gJ1NldCh7IXJ9KScuZm9ybWF0KHNlbGYuZGF0YSkKKworICAgICAgICByMSA9IHNldCgnYWJjJykKKyAgICAgICAgcjIgPSBzZXQoJ2JjZCcpCisgICAgICAgIHIzID0gc2V0KCdhYmNkZScpCisgICAgICAgIGYxID0gTGlzdFNldCgnYWJjJykKKyAgICAgICAgZjIgPSBMaXN0U2V0KCdiY2QnKQorICAgICAgICBmMyA9IExpc3RTZXQoJ2FiY2RlJykKKyAgICAgICAgbDEgPSBsaXN0KCdhYmNjYmEnKQorICAgICAgICBsMiA9IGxpc3QoJ2JjZGRjYicpCisgICAgICAgIGwzID0gbGlzdCgnYWJjZGVlZGNiYScpCisKKyAgICAgICAgdGFyZ2V0ID0gcjEgJiByMgorICAgICAgICBzZWxmLmFzc2VydFNhbWVTZXQoZjEgJiBmMiwgdGFyZ2V0KQorICAgICAgICBzZWxmLmFzc2VydFNhbWVTZXQoZjEgJiByMiwgdGFyZ2V0KQorICAgICAgICBzZWxmLmFzc2VydFNhbWVTZXQocjIgJiBmMSwgdGFyZ2V0KQorICAgICAgICBzZWxmLmFzc2VydFNhbWVTZXQoZjEgJiBsMiwgdGFyZ2V0KQorCisgICAgICAgIHRhcmdldCA9IHIxIHwgcjIKKyAgICAgICAgc2VsZi5hc3NlcnRTYW1lU2V0KGYxIHwgZjIsIHRhcmdldCkKKyAgICAgICAgc2VsZi5hc3NlcnRTYW1lU2V0KGYxIHwgcjIsIHRhcmdldCkKKyAgICAgICAgc2VsZi5hc3NlcnRTYW1lU2V0KHIyIHwgZjEsIHRhcmdldCkKKyAgICAgICAgc2VsZi5hc3NlcnRTYW1lU2V0KGYxIHwgbDIsIHRhcmdldCkKKworICAgICAgICBmd2RfdGFyZ2V0ID0gcjEgLSByMgorICAgICAgICByZXZfdGFyZ2V0ID0gcjIgLSByMQorICAgICAgICBzZWxmLmFzc2VydFNhbWVTZXQoZjEgLSBmMiwgZndkX3RhcmdldCkKKyAgICAgICAgc2VsZi5hc3NlcnRTYW1lU2V0KGYyIC0gZjEsIHJldl90YXJnZXQpCisgICAgICAgIHNlbGYuYXNzZXJ0U2FtZVNldChmMSAtIHIyLCBmd2RfdGFyZ2V0KQorICAgICAgICBzZWxmLmFzc2VydFNhbWVTZXQoZjIgLSByMSwgcmV2X3RhcmdldCkKKyAgICAgICAgc2VsZi5hc3NlcnRTYW1lU2V0KHIxIC0gZjIsIGZ3ZF90YXJnZXQpCisgICAgICAgIHNlbGYuYXNzZXJ0U2FtZVNldChyMiAtIGYxLCByZXZfdGFyZ2V0KQorICAgICAgICBzZWxmLmFzc2VydFNhbWVTZXQoZjEgLSBsMiwgZndkX3RhcmdldCkKKyAgICAgICAgc2VsZi5hc3NlcnRTYW1lU2V0KGYyIC0gbDEsIHJldl90YXJnZXQpCisKKyAgICAgICAgdGFyZ2V0ID0gcjEgXiByMgorICAgICAgICBzZWxmLmFzc2VydFNhbWVTZXQoZjEgXiBmMiwgdGFyZ2V0KQorICAgICAgICBzZWxmLmFzc2VydFNhbWVTZXQoZjEgXiByMiwgdGFyZ2V0KQorICAgICAgICBzZWxmLmFzc2VydFNhbWVTZXQocjIgXiBmMSwgdGFyZ2V0KQorICAgICAgICBzZWxmLmFzc2VydFNhbWVTZXQoZjEgXiBsMiwgdGFyZ2V0KQorCisgICAgICAgICMgRG9uJ3QgY2hhbmdlIHRoZSBmb2xsb3dpbmcgdG8gdXNlIGFzc2VydExlc3Mgb3Igb3RoZXIKKyAgICAgICAgIyAibW9yZSBzcGVjaWZpYyIgdW5pdHRlc3QgYXNzZXJ0aW9ucy4gIFRoZSBjdXJyZW50CisgICAgICAgICMgYXNzZXJ0VHJ1ZS9hc3NlcnRGYWxzZSBzdHlsZSBtYWtlcyB0aGUgcGF0dGVybiBvZiB0ZXN0CisgICAgICAgICMgY2FzZSBjb21iaW5hdGlvbnMgY2xlYXIgYW5kIGFsbG93cyB1cyB0byBrbm93IGZvciBzdXJlCisgICAgICAgICMgdGhlIGV4YWN0IG9wZXJhdG9yIGJlaW5nIGludm9rZWQuCisKKyAgICAgICAgIyBwcm9wZXIgc3Vic2V0CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmMSA8IGYzKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYxIDwgZjEpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZjEgPCBmMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHIxIDwgZjMpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocjEgPCBmMSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyMSA8IGYyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocjEgPCByMykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyMSA8IHIxKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHIxIDwgcjIpCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKLSAgICAgICAgICAgIG5jcyA8IGNzCisgICAgICAgICAgICBmMSA8IGwzCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKLSAgICAgICAgICAgIG5jcyA8PSBjcworICAgICAgICAgICAgZjEgPCBsMQogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6Ci0gICAgICAgICAgICBjcyA+IG5jcworICAgICAgICAgICAgZjEgPCBsMgorCisgICAgICAgICMgYW55IHN1YnNldAorICAgICAgICBzZWxmLmFzc2VydFRydWUoZjEgPD0gZjMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmMSA8PSBmMSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmMSA8PSBmMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHIxIDw9IGYzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocjEgPD0gZjEpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocjEgPD0gZjIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyMSA8PSByMykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHIxIDw9IHIxKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHIxIDw9IHIyKQogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6Ci0gICAgICAgICAgICBjcyA+PSBuY3MKKyAgICAgICAgICAgIGYxIDw9IGwzCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGYxIDw9IGwxCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGYxIDw9IGwyCisKKyAgICAgICAgIyBwcm9wZXIgc3VwZXJzZXQKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYzID4gZjEpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZjEgPiBmMSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmMiA+IGYxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocjMgPiByMSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmMSA+IHIxKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYyID4gcjEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyMyA+IHIxKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHIxID4gcjEpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocjIgPiByMSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgZjEgPiBsMworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBmMSA+IGwxCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGYxID4gbDIKKworICAgICAgICAjIGFueSBzdXBlcnNldAorICAgICAgICBzZWxmLmFzc2VydFRydWUoZjMgPj0gZjEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmMSA+PSBmMSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmMiA+PSBmMSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHIzID49IHIxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZjEgPj0gcjEpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZjIgPj0gcjEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyMyA+PSByMSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHIxID49IHIxKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHIyID49IHIxKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBmMSA+PSBsMworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBmMSA+PWwxCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGYxID49IGwyCisKKyAgICAgICAgIyBlcXVhbGl0eQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZjEgPT0gZjEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyMSA9PSBmMSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYxID09IHIxKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYxID09IGYzKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHIxID09IGYzKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYxID09IHIzKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYxID09IGwzKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYxID09IGwxKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYxID09IGwyKQorCisgICAgICAgICMgaW5lcXVhbGl0eQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYxICE9IGYxKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHIxICE9IGYxKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYxICE9IHIxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZjEgIT0gZjMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyMSAhPSBmMykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYxICE9IHIzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZjEgIT0gbDMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmMSAhPSBsMSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYxICE9IGwyKQogCiAgICAgZGVmIHRlc3RfTWFwcGluZyhzZWxmKToKICAgICAgICAgZm9yIHNhbXBsZSBpbiBbZGljdF06CkBAIC03NTAsNiArOTUzLDggQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKHNhbXBsZSwgU2VxdWVuY2UpKQogICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocmFuZ2UoMTApLCBTZXF1ZW5jZSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MocmFuZ2UsIFNlcXVlbmNlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG1lbW9yeXZpZXcoYiIiKSwgU2VxdWVuY2UpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKG1lbW9yeXZpZXcsIFNlcXVlbmNlKSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3Moc3RyLCBTZXF1ZW5jZSkpCiAgICAgICAgIHNlbGYudmFsaWRhdGVfYWJzdHJhY3RfbWV0aG9kcyhTZXF1ZW5jZSwgJ19fY29udGFpbnNfXycsICdfX2l0ZXJfXycsICdfX2xlbl9fJywKICAgICAgICAgICAgICdfX2dldGl0ZW1fXycpCkBAIC04OTgsMjkgKzExMDMsNDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLnNldGRlZmF1bHQoJ2UnLCA1KSwgNSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjWydlJ10sIDUpCiAKKyAgICBkZWYgdGVzdF9pbml0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoQ291bnRlcihzZWxmPTQyKS5pdGVtcygpKSwgWygnc2VsZicsIDQyKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChDb3VudGVyKGl0ZXJhYmxlPTQyKS5pdGVtcygpKSwgWygnaXRlcmFibGUnLCA0MildKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoQ291bnRlcihpdGVyYWJsZT1Ob25lKS5pdGVtcygpKSwgWygnaXRlcmFibGUnLCBOb25lKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgQ291bnRlciwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgQ291bnRlciwgKCksICgpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIENvdW50ZXIuX19pbml0X18pCisKKyAgICBkZWYgdGVzdF91cGRhdGUoc2VsZik6CisgICAgICAgIGMgPSBDb3VudGVyKCkKKyAgICAgICAgYy51cGRhdGUoc2VsZj00MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGMuaXRlbXMoKSksIFsoJ3NlbGYnLCA0MildKQorICAgICAgICBjID0gQ291bnRlcigpCisgICAgICAgIGMudXBkYXRlKGl0ZXJhYmxlPTQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoYy5pdGVtcygpKSwgWygnaXRlcmFibGUnLCA0MildKQorICAgICAgICBjID0gQ291bnRlcigpCisgICAgICAgIGMudXBkYXRlKGl0ZXJhYmxlPU5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChjLml0ZW1zKCkpLCBbKCdpdGVyYWJsZScsIE5vbmUpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBDb3VudGVyKCkudXBkYXRlLCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBDb3VudGVyKCkudXBkYXRlLCB7fSwge30pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgQ291bnRlci51cGRhdGUpCisKICAgICBkZWYgdGVzdF9jb3B5aW5nKHNlbGYpOgogICAgICAgICAjIENoZWNrIHRoYXQgY291bnRlcnMgYXJlIGNvcHlhYmxlLCBkZWVwY29weWFibGUsIHBpY2tsYWJsZSwgYW5kCiAgICAgICAgICNoYXZlIGEgcmVwci9ldmFsIHJvdW5kLXRyaXAKICAgICAgICAgd29yZHMgPSBDb3VudGVyKCd3aGljaCB3aXRjaCBoYWQgd2hpY2ggd2l0Y2hlcyB3cmlzdCB3YXRjaCcuc3BsaXQoKSkKKyAgICAgICAgZGVmIGNoZWNrKGR1cCk6CisgICAgICAgICAgICBtc2cgPSAiXG5jb3B5OiAlc1xud29yZHM6ICVzIiAlIChkdXAsIHdvcmRzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdChkdXAsIHdvcmRzLCBtc2cpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR1cCwgd29yZHMpCisgICAgICAgIGNoZWNrKHdvcmRzLmNvcHkoKSkKKyAgICAgICAgY2hlY2soY29weS5jb3B5KHdvcmRzKSkKKyAgICAgICAgY2hlY2soY29weS5kZWVwY29weSh3b3JkcykpCisgICAgICAgIGZvciBwcm90byBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QocHJvdG89cHJvdG8pOgorICAgICAgICAgICAgICAgIGNoZWNrKHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMod29yZHMsIHByb3RvKSkpCisgICAgICAgIGNoZWNrKGV2YWwocmVwcih3b3JkcykpKQogICAgICAgICB1cGRhdGVfdGVzdCA9IENvdW50ZXIoKQogICAgICAgICB1cGRhdGVfdGVzdC51cGRhdGUod29yZHMpCi0gICAgICAgIGZvciBpLCBkdXAgaW4gZW51bWVyYXRlKFsKLSAgICAgICAgICAgICAgICAgICAgd29yZHMuY29weSgpLAotICAgICAgICAgICAgICAgICAgICBjb3B5LmNvcHkod29yZHMpLAotICAgICAgICAgICAgICAgICAgICBjb3B5LmRlZXBjb3B5KHdvcmRzKSwKLSAgICAgICAgICAgICAgICAgICAgcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyh3b3JkcywgMCkpLAotICAgICAgICAgICAgICAgICAgICBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKHdvcmRzLCAxKSksCi0gICAgICAgICAgICAgICAgICAgIHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMod29yZHMsIDIpKSwKLSAgICAgICAgICAgICAgICAgICAgcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyh3b3JkcywgLTEpKSwKLSAgICAgICAgICAgICAgICAgICAgZXZhbChyZXByKHdvcmRzKSksCi0gICAgICAgICAgICAgICAgICAgIHVwZGF0ZV90ZXN0LAotICAgICAgICAgICAgICAgICAgICBDb3VudGVyKHdvcmRzKSwKLSAgICAgICAgICAgICAgICAgICAgXSk6Ci0gICAgICAgICAgICBtc2cgPSAoaSwgZHVwLCB3b3JkcykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkdXAgaXMgbm90IHdvcmRzKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdXAsIHdvcmRzKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZHVwKSwgbGVuKHdvcmRzKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShkdXApLCB0eXBlKHdvcmRzKSkKKyAgICAgICAgY2hlY2sodXBkYXRlX3Rlc3QpCisgICAgICAgIGNoZWNrKENvdW50ZXIod29yZHMpKQogCiAgICAgZGVmIHRlc3RfY29weV9zdWJjbGFzcyhzZWxmKToKICAgICAgICAgY2xhc3MgTXlDb3VudGVyKENvdW50ZXIpOgpAQCAtMTAxNiw2ICsxMjM5LDE2IEBACiAgICAgICAgIGMuc3VidHJhY3QoJ2FhYWFiYmNjZScpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYywgQ291bnRlcihhPS0xLCBiPTAsIGM9LTEsIGQ9MSwgZT0tMSkpCiAKKyAgICAgICAgYyA9IENvdW50ZXIoKQorICAgICAgICBjLnN1YnRyYWN0KHNlbGY9NDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChjLml0ZW1zKCkpLCBbKCdzZWxmJywgLTQyKV0pCisgICAgICAgIGMgPSBDb3VudGVyKCkKKyAgICAgICAgYy5zdWJ0cmFjdChpdGVyYWJsZT00MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGMuaXRlbXMoKSksIFsoJ2l0ZXJhYmxlJywgLTQyKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgQ291bnRlcigpLnN1YnRyYWN0LCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBDb3VudGVyKCkuc3VidHJhY3QsIHt9LCB7fSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBDb3VudGVyLnN1YnRyYWN0KQorCiAgICAgZGVmIHRlc3RfdW5hcnkoc2VsZik6CiAgICAgICAgIGMgPSBDb3VudGVyKGE9LTUsIGI9MCwgYz01LCBkPTEwLCBlPTE1LGc9NDApCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGljdCgrYyksIGRpY3QoYz01LCBkPTEwLCBlPTE1LCBnPTQwKSkKQEAgLTEwNDMsMzAzICsxMjc2LDIwIEBACiAgICAgICAgICMgdGVzdCBmaWRlbGl0eSB0byB0aGUgcHVyZSBweXRob24gdmVyc2lvbgogICAgICAgICBjID0gQ291bnRlclN1YmNsYXNzV2l0aFNldEl0ZW0oJ2FicmFjYWRhYnJhJykKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGMuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpY3QoYyksIHsnYSc6IDUsICdiJzogMiwgJ2MnOiAxLCAnZCc6IDEsICdyJzoyIH0pCiAgICAgICAgIGMgPSBDb3VudGVyU3ViY2xhc3NXaXRoR2V0KCdhYnJhY2FkYWJyYScpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjLmNhbGxlZCkKLQotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyMjIE9yZGVyZWREaWN0Ci0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi1jbGFzcyBUZXN0T3JkZXJlZERpY3QodW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgZGVmIHRlc3RfaW5pdChzZWxmKToKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgotICAgICAgICAgICAgT3JkZXJlZERpY3QoWygnYScsIDEpLCAoJ2InLCAyKV0sIE5vbmUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB0b28gbWFueSBhcmdzCi0gICAgICAgIHBhaXJzID0gWygnYScsIDEpLCAoJ2InLCAyKSwgKCdjJywgMyksICgnZCcsIDQpLCAoJ2UnLCA1KV0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQoT3JkZXJlZERpY3QoZGljdChwYWlycykpLml0ZW1zKCkpLCBwYWlycykgICAgICAgICAgICMgZGljdCBpbnB1dAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChPcmRlcmVkRGljdCgqKmRpY3QocGFpcnMpKS5pdGVtcygpKSwgcGFpcnMpICAgICAgICAgIyBrd2RzIGlucHV0Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChPcmRlcmVkRGljdChwYWlycykuaXRlbXMoKSksIHBhaXJzKSAgICAgICAgICAgICAgICAgICAjIHBhaXJzIGlucHV0Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChPcmRlcmVkRGljdChbKCdhJywgMSksICgnYicsIDIpLCAoJ2MnLCA5KSwgKCdkJywgNCldLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYz0zLCBlPTUpLml0ZW1zKCkpLCBwYWlycykgICAgICAgICAgICAgICAgIyBtaXhlZCBpbnB1dAotCi0gICAgICAgICMgbWFrZSBzdXJlIG5vIHBvc2l0aW9uYWwgYXJncyBjb25mbGljdCB3aXRoIHBvc3NpYmxlIGt3ZGFyZ3MKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnNwZWN0LmdldGFyZ3NwZWMoT3JkZXJlZERpY3QuX19kaWN0X19bJ19faW5pdF9fJ10pLmFyZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgWydzZWxmJ10pCi0KLSAgICAgICAgIyBNYWtlIHN1cmUgdGhhdCBkaXJlY3QgY2FsbHMgdG8gX19pbml0X18gZG8gbm90IGNsZWFyIHByZXZpb3VzIGNvbnRlbnRzCi0gICAgICAgIGQgPSBPcmRlcmVkRGljdChbKCdhJywgMSksICgnYicsIDIpLCAoJ2MnLCAzKSwgKCdkJywgNDQpLCAoJ2UnLCA1NSldKQotICAgICAgICBkLl9faW5pdF9fKFsoJ2UnLCA1KSwgKCdmJywgNildLCBnPTcsIGQ9NCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGQuaXRlbXMoKSksCi0gICAgICAgICAgICBbKCdhJywgMSksICgnYicsIDIpLCAoJ2MnLCAzKSwgKCdkJywgNCksICgnZScsIDUpLCAoJ2YnLCA2KSwgKCdnJywgNyldKQotCi0gICAgZGVmIHRlc3RfdXBkYXRlKHNlbGYpOgotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6Ci0gICAgICAgICAgICBPcmRlcmVkRGljdCgpLnVwZGF0ZShbKCdhJywgMSksICgnYicsIDIpXSwgTm9uZSkgICAgICAgICAgICAgICAgICAgICAgICAjIHRvbyBtYW55IGFyZ3MKLSAgICAgICAgcGFpcnMgPSBbKCdhJywgMSksICgnYicsIDIpLCAoJ2MnLCAzKSwgKCdkJywgNCksICgnZScsIDUpXQotICAgICAgICBvZCA9IE9yZGVyZWREaWN0KCkKLSAgICAgICAgb2QudXBkYXRlKGRpY3QocGFpcnMpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChvZC5pdGVtcygpKSwgcGFpcnMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBkaWN0IGlucHV0Ci0gICAgICAgIG9kID0gT3JkZXJlZERpY3QoKQotICAgICAgICBvZC51cGRhdGUoKipkaWN0KHBhaXJzKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQob2QuaXRlbXMoKSksIHBhaXJzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMga3dkcyBpbnB1dAotICAgICAgICBvZCA9IE9yZGVyZWREaWN0KCkKLSAgICAgICAgb2QudXBkYXRlKHBhaXJzKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qob2QuaXRlbXMoKSksIHBhaXJzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBwYWlycyBpbnB1dAotICAgICAgICBvZCA9IE9yZGVyZWREaWN0KCkKLSAgICAgICAgb2QudXBkYXRlKFsoJ2EnLCAxKSwgKCdiJywgMiksICgnYycsIDkpLCAoJ2QnLCA0KV0sIGM9MywgZT01KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qob2QuaXRlbXMoKSksIHBhaXJzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBtaXhlZCBpbnB1dAotCi0gICAgICAgICMgSXNzdWUgOTEzNzogTmFtZWQgYXJndW1lbnQgY2FsbGVkICdvdGhlcicgb3IgJ3NlbGYnCi0gICAgICAgICMgc2hvdWxkbid0IGJlIHRyZWF0ZWQgc3BlY2lhbGx5LgotICAgICAgICBvZCA9IE9yZGVyZWREaWN0KCkKLSAgICAgICAgb2QudXBkYXRlKHNlbGY9MjMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChvZC5pdGVtcygpKSwgWygnc2VsZicsIDIzKV0pCi0gICAgICAgIG9kID0gT3JkZXJlZERpY3QoKQotICAgICAgICBvZC51cGRhdGUob3RoZXI9e30pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChvZC5pdGVtcygpKSwgWygnb3RoZXInLCB7fSldKQotICAgICAgICBvZCA9IE9yZGVyZWREaWN0KCkKLSAgICAgICAgb2QudXBkYXRlKHJlZD01LCBibHVlPTYsIG90aGVyPTcsIHNlbGY9OCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQobGlzdChvZC5pdGVtcygpKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgWygnYmx1ZScsIDYpLCAoJ290aGVyJywgNyksICgncmVkJywgNSksICgnc2VsZicsIDgpXSkKLQotICAgICAgICAjIE1ha2Ugc3VyZSB0aGF0IGRpcmVjdCBjYWxscyB0byB1cGRhdGUgZG8gbm90IGNsZWFyIHByZXZpb3VzIGNvbnRlbnRzCi0gICAgICAgICMgYWRkIHRoYXQgdXBkYXRlcyBpdGVtcyBhcmUgbm90IG1vdmVkIHRvIHRoZSBlbmQKLSAgICAgICAgZCA9IE9yZGVyZWREaWN0KFsoJ2EnLCAxKSwgKCdiJywgMiksICgnYycsIDMpLCAoJ2QnLCA0NCksICgnZScsIDU1KV0pCi0gICAgICAgIGQudXBkYXRlKFsoJ2UnLCA1KSwgKCdmJywgNildLCBnPTcsIGQ9NCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGQuaXRlbXMoKSksCi0gICAgICAgICAgICBbKCdhJywgMSksICgnYicsIDIpLCAoJ2MnLCAzKSwgKCdkJywgNCksICgnZScsIDUpLCAoJ2YnLCA2KSwgKCdnJywgNyldKQotCi0gICAgZGVmIHRlc3RfYWJjKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoT3JkZXJlZERpY3QoKSwgTXV0YWJsZU1hcHBpbmcpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKE9yZGVyZWREaWN0LCBNdXRhYmxlTWFwcGluZykpCi0KLSAgICBkZWYgdGVzdF9jbGVhcihzZWxmKToKLSAgICAgICAgcGFpcnMgPSBbKCdjJywgMSksICgnYicsIDIpLCAoJ2EnLCAzKSwgKCdkJywgNCksICgnZScsIDUpLCAoJ2YnLCA2KV0KLSAgICAgICAgc2h1ZmZsZShwYWlycykKLSAgICAgICAgb2QgPSBPcmRlcmVkRGljdChwYWlycykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ob2QpLCBsZW4ocGFpcnMpKQotICAgICAgICBvZC5jbGVhcigpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG9kKSwgMCkKLQotICAgIGRlZiB0ZXN0X2RlbGl0ZW0oc2VsZik6Ci0gICAgICAgIHBhaXJzID0gWygnYycsIDEpLCAoJ2InLCAyKSwgKCdhJywgMyksICgnZCcsIDQpLCAoJ2UnLCA1KSwgKCdmJywgNildCi0gICAgICAgIG9kID0gT3JkZXJlZERpY3QocGFpcnMpCi0gICAgICAgIGRlbCBvZFsnYSddCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ2EnLCBvZCkKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvcik6Ci0gICAgICAgICAgICBkZWwgb2RbJ2EnXQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qob2QuaXRlbXMoKSksIHBhaXJzWzoyXSArIHBhaXJzWzM6XSkKLQotICAgIGRlZiB0ZXN0X3NldGl0ZW0oc2VsZik6Ci0gICAgICAgIG9kID0gT3JkZXJlZERpY3QoWygnZCcsIDEpLCAoJ2InLCAyKSwgKCdjJywgMyksICgnYScsIDQpLCAoJ2UnLCA1KV0pCi0gICAgICAgIG9kWydjJ10gPSAxMCAgICAgICAgICAgIyBleGlzdGluZyBlbGVtZW50Ci0gICAgICAgIG9kWydmJ10gPSAyMCAgICAgICAgICAgIyBuZXcgZWxlbWVudAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qob2QuaXRlbXMoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgWygnZCcsIDEpLCAoJ2InLCAyKSwgKCdjJywgMTApLCAoJ2EnLCA0KSwgKCdlJywgNSksICgnZicsIDIwKV0pCi0KLSAgICBkZWYgdGVzdF9pdGVyYXRvcnMoc2VsZik6Ci0gICAgICAgIHBhaXJzID0gWygnYycsIDEpLCAoJ2InLCAyKSwgKCdhJywgMyksICgnZCcsIDQpLCAoJ2UnLCA1KSwgKCdmJywgNildCi0gICAgICAgIHNodWZmbGUocGFpcnMpCi0gICAgICAgIG9kID0gT3JkZXJlZERpY3QocGFpcnMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChvZCksIFt0WzBdIGZvciB0IGluIHBhaXJzXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG9kLmtleXMoKSksIFt0WzBdIGZvciB0IGluIHBhaXJzXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG9kLnZhbHVlcygpKSwgW3RbMV0gZm9yIHQgaW4gcGFpcnNdKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qob2QuaXRlbXMoKSksIHBhaXJzKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QocmV2ZXJzZWQob2QpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBbdFswXSBmb3IgdCBpbiByZXZlcnNlZChwYWlycyldKQotCi0gICAgZGVmIHRlc3RfcG9waXRlbShzZWxmKToKLSAgICAgICAgcGFpcnMgPSBbKCdjJywgMSksICgnYicsIDIpLCAoJ2EnLCAzKSwgKCdkJywgNCksICgnZScsIDUpLCAoJ2YnLCA2KV0KLSAgICAgICAgc2h1ZmZsZShwYWlycykKLSAgICAgICAgb2QgPSBPcmRlcmVkRGljdChwYWlycykKLSAgICAgICAgd2hpbGUgcGFpcnM6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9kLnBvcGl0ZW0oKSwgcGFpcnMucG9wKCkpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IpOgotICAgICAgICAgICAgb2QucG9waXRlbSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG9kKSwgMCkKLQotICAgIGRlZiB0ZXN0X3BvcChzZWxmKToKLSAgICAgICAgcGFpcnMgPSBbKCdjJywgMSksICgnYicsIDIpLCAoJ2EnLCAzKSwgKCdkJywgNCksICgnZScsIDUpLCAoJ2YnLCA2KV0KLSAgICAgICAgc2h1ZmZsZShwYWlycykKLSAgICAgICAgb2QgPSBPcmRlcmVkRGljdChwYWlycykKLSAgICAgICAgc2h1ZmZsZShwYWlycykKLSAgICAgICAgd2hpbGUgcGFpcnM6Ci0gICAgICAgICAgICBrLCB2ID0gcGFpcnMucG9wKCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2QucG9wKGspLCB2KQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yKToKLSAgICAgICAgICAgIG9kLnBvcCgneHl6JykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ob2QpLCAwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9kLnBvcChrLCAxMjM0NSksIDEyMzQ1KQotCi0gICAgICAgICMgbWFrZSBzdXJlIHBvcCBzdGlsbCB3b3JrcyB3aGVuIF9fbWlzc2luZ19fIGlzIGRlZmluZWQKLSAgICAgICAgY2xhc3MgTWlzc2luZyhPcmRlcmVkRGljdCk6Ci0gICAgICAgICAgICBkZWYgX19taXNzaW5nX18oc2VsZiwga2V5KToKLSAgICAgICAgICAgICAgICByZXR1cm4gMAotICAgICAgICBtID0gTWlzc2luZyhhPTEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5wb3AoJ2InLCA1KSwgNSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLnBvcCgnYScsIDYpLCAxKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0ucG9wKCdhJywgNiksIDYpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IpOgotICAgICAgICAgICAgbS5wb3AoJ2EnKQotCi0gICAgZGVmIHRlc3RfZXF1YWxpdHkoc2VsZik6Ci0gICAgICAgIHBhaXJzID0gWygnYycsIDEpLCAoJ2InLCAyKSwgKCdhJywgMyksICgnZCcsIDQpLCAoJ2UnLCA1KSwgKCdmJywgNildCi0gICAgICAgIHNodWZmbGUocGFpcnMpCi0gICAgICAgIG9kMSA9IE9yZGVyZWREaWN0KHBhaXJzKQotICAgICAgICBvZDIgPSBPcmRlcmVkRGljdChwYWlycykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvZDEsIG9kMikgICAgICAgICAgIyBzYW1lIG9yZGVyIGltcGxpZXMgZXF1YWxpdHkKLSAgICAgICAgcGFpcnMgPSBwYWlyc1syOl0gKyBwYWlyc1s6Ml0KLSAgICAgICAgb2QyID0gT3JkZXJlZERpY3QocGFpcnMpCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwob2QxLCBvZDIpICAgICAgICMgZGlmZmVyZW50IG9yZGVyIGltcGxpZXMgaW5lcXVhbGl0eQotICAgICAgICAjIGNvbXBhcmlzb24gdG8gcmVndWxhciBkaWN0IGlzIG5vdCBvcmRlciBzZW5zaXRpdmUKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvZDEsIGRpY3Qob2QyKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWN0KG9kMiksIG9kMSkKLSAgICAgICAgIyBkaWZmZXJlbnQgbGVuZ3RoIGltcGxpZWQgaW5lcXVhbGl0eQotICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKG9kMSwgT3JkZXJlZERpY3QocGFpcnNbOi0xXSkpCi0KLSAgICBkZWYgdGVzdF9jb3B5aW5nKHNlbGYpOgotICAgICAgICAjIENoZWNrIHRoYXQgb3JkZXJlZCBkaWN0cyBhcmUgY29weWFibGUsIGRlZXBjb3B5YWJsZSwgcGlja2xhYmxlLAotICAgICAgICAjIGFuZCBoYXZlIGEgcmVwci9ldmFsIHJvdW5kLXRyaXAKLSAgICAgICAgcGFpcnMgPSBbKCdjJywgMSksICgnYicsIDIpLCAoJ2EnLCAzKSwgKCdkJywgNCksICgnZScsIDUpLCAoJ2YnLCA2KV0KLSAgICAgICAgb2QgPSBPcmRlcmVkRGljdChwYWlycykKLSAgICAgICAgdXBkYXRlX3Rlc3QgPSBPcmRlcmVkRGljdCgpCi0gICAgICAgIHVwZGF0ZV90ZXN0LnVwZGF0ZShvZCkKLSAgICAgICAgZm9yIGksIGR1cCBpbiBlbnVtZXJhdGUoWwotICAgICAgICAgICAgICAgICAgICBvZC5jb3B5KCksCi0gICAgICAgICAgICAgICAgICAgIGNvcHkuY29weShvZCksCi0gICAgICAgICAgICAgICAgICAgIGNvcHkuZGVlcGNvcHkob2QpLAotICAgICAgICAgICAgICAgICAgICBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKG9kLCAwKSksCi0gICAgICAgICAgICAgICAgICAgIHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMob2QsIDEpKSwKLSAgICAgICAgICAgICAgICAgICAgcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhvZCwgMikpLAotICAgICAgICAgICAgICAgICAgICBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKG9kLCAzKSksCi0gICAgICAgICAgICAgICAgICAgIHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMob2QsIC0xKSksCi0gICAgICAgICAgICAgICAgICAgIGV2YWwocmVwcihvZCkpLAotICAgICAgICAgICAgICAgICAgICB1cGRhdGVfdGVzdCwKLSAgICAgICAgICAgICAgICAgICAgT3JkZXJlZERpY3Qob2QpLAotICAgICAgICAgICAgICAgICAgICBdKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkdXAgaXMgbm90IG9kKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdXAsIG9kKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGR1cC5pdGVtcygpKSwgbGlzdChvZC5pdGVtcygpKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGR1cCksIGxlbihvZCkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoZHVwKSwgdHlwZShvZCkpCi0KLSAgICBkZWYgdGVzdF95YW1sX2xpbmthZ2Uoc2VsZik6Ci0gICAgICAgICMgVmVyaWZ5IHRoYXQgX19yZWR1Y2VfXyBpcyBzZXR1cCBpbiBhIHdheSB0aGF0IHN1cHBvcnRzIFB5WUFNTCdzIGR1bXAoKSBmZWF0dXJlLgotICAgICAgICAjIEluIHlhbWwsIGxpc3RzIGFyZSBuYXRpdmUgYnV0IHR1cGxlcyBhcmUgbm90LgotICAgICAgICBwYWlycyA9IFsoJ2MnLCAxKSwgKCdiJywgMiksICgnYScsIDMpLCAoJ2QnLCA0KSwgKCdlJywgNSksICgnZicsIDYpXQotICAgICAgICBvZCA9IE9yZGVyZWREaWN0KHBhaXJzKQotICAgICAgICAjIHlhbWwuZHVtcChvZCkgLS0+Ci0gICAgICAgICMgJyEhcHl0aG9uL29iamVjdC9hcHBseTpfX21haW5fXy5PcmRlcmVkRGljdFxuLSAtIFthLCAxXVxuICAtIFtiLCAyXVxuJwotICAgICAgICBzZWxmLmFzc2VydFRydWUoYWxsKHR5cGUocGFpcik9PWxpc3QgZm9yIHBhaXIgaW4gb2QuX19yZWR1Y2VfXygpWzFdKSkKLQotICAgIGRlZiB0ZXN0X3JlZHVjZV9ub3RfdG9vX2ZhdChzZWxmKToKLSAgICAgICAgIyBkbyBub3Qgc2F2ZSBpbnN0YW5jZSBkaWN0aW9uYXJ5IGlmIG5vdCBuZWVkZWQKLSAgICAgICAgcGFpcnMgPSBbKCdjJywgMSksICgnYicsIDIpLCAoJ2EnLCAzKSwgKCdkJywgNCksICgnZScsIDUpLCAoJ2YnLCA2KV0KLSAgICAgICAgb2QgPSBPcmRlcmVkRGljdChwYWlycykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ob2QuX19yZWR1Y2VfXygpKSwgMikKLSAgICAgICAgb2QueCA9IDEwCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG9kLl9fcmVkdWNlX18oKSksIDMpCi0KLSAgICBkZWYgdGVzdF9yZXByKHNlbGYpOgotICAgICAgICBvZCA9IE9yZGVyZWREaWN0KFsoJ2MnLCAxKSwgKCdiJywgMiksICgnYScsIDMpLCAoJ2QnLCA0KSwgKCdlJywgNSksICgnZicsIDYpXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKG9kKSwKLSAgICAgICAgICAgICJPcmRlcmVkRGljdChbKCdjJywgMSksICgnYicsIDIpLCAoJ2EnLCAzKSwgKCdkJywgNCksICgnZScsIDUpLCAoJ2YnLCA2KV0pIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKHJlcHIob2QpKSwgb2QpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihPcmRlcmVkRGljdCgpKSwgIk9yZGVyZWREaWN0KCkiKQotCi0gICAgZGVmIHRlc3RfcmVwcl9yZWN1cnNpdmUoc2VsZik6Ci0gICAgICAgICMgU2VlIGlzc3VlICM5ODI2Ci0gICAgICAgIG9kID0gT3JkZXJlZERpY3QuZnJvbWtleXMoJ2FiYycpCi0gICAgICAgIG9kWyd4J10gPSBvZAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIob2QpLAotICAgICAgICAgICAgIk9yZGVyZWREaWN0KFsoJ2EnLCBOb25lKSwgKCdiJywgTm9uZSksICgnYycsIE5vbmUpLCAoJ3gnLCAuLi4pXSkiKQotCi0gICAgZGVmIHRlc3Rfc2V0ZGVmYXVsdChzZWxmKToKLSAgICAgICAgcGFpcnMgPSBbKCdjJywgMSksICgnYicsIDIpLCAoJ2EnLCAzKSwgKCdkJywgNCksICgnZScsIDUpLCAoJ2YnLCA2KV0KLSAgICAgICAgc2h1ZmZsZShwYWlycykKLSAgICAgICAgb2QgPSBPcmRlcmVkRGljdChwYWlycykKLSAgICAgICAgcGFpcl9vcmRlciA9IGxpc3Qob2QuaXRlbXMoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvZC5zZXRkZWZhdWx0KCdhJywgMTApLCAzKQotICAgICAgICAjIG1ha2Ugc3VyZSBvcmRlciBkaWRuJ3QgY2hhbmdlCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChvZC5pdGVtcygpKSwgcGFpcl9vcmRlcikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvZC5zZXRkZWZhdWx0KCd4JywgMTApLCAxMCkKLSAgICAgICAgIyBtYWtlIHN1cmUgJ3gnIGlzIGFkZGVkIHRvIHRoZSBlbmQKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG9kLml0ZW1zKCkpWy0xXSwgKCd4JywgMTApKQotCi0gICAgICAgICMgbWFrZSBzdXJlIHNldGRlZmF1bHQgc3RpbGwgd29ya3Mgd2hlbiBfX21pc3NpbmdfXyBpcyBkZWZpbmVkCi0gICAgICAgIGNsYXNzIE1pc3NpbmcoT3JkZXJlZERpY3QpOgotICAgICAgICAgICAgZGVmIF9fbWlzc2luZ19fKHNlbGYsIGtleSk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChNaXNzaW5nKCkuc2V0ZGVmYXVsdCg1LCA5KSwgOSkKLQotICAgIGRlZiB0ZXN0X3JlaW5zZXJ0KHNlbGYpOgotICAgICAgICAjIEdpdmVuIGluc2VydCBhLCBpbnNlcnQgYiwgZGVsZXRlIGEsIHJlLWluc2VydCBhLAotICAgICAgICAjIHZlcmlmeSB0aGF0IGEgaXMgbm93IGxhdGVyIHRoYW4gYi4KLSAgICAgICAgb2QgPSBPcmRlcmVkRGljdCgpCi0gICAgICAgIG9kWydhJ10gPSAxCi0gICAgICAgIG9kWydiJ10gPSAyCi0gICAgICAgIGRlbCBvZFsnYSddCi0gICAgICAgIG9kWydhJ10gPSAxCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChvZC5pdGVtcygpKSwgWygnYicsIDIpLCAoJ2EnLCAxKV0pCi0KLSAgICBkZWYgdGVzdF9tb3ZlX3RvX2VuZChzZWxmKToKLSAgICAgICAgb2QgPSBPcmRlcmVkRGljdC5mcm9ta2V5cygnYWJjZGUnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qob2QpLCBsaXN0KCdhYmNkZScpKQotICAgICAgICBvZC5tb3ZlX3RvX2VuZCgnYycpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChvZCksIGxpc3QoJ2FiZGVjJykpCi0gICAgICAgIG9kLm1vdmVfdG9fZW5kKCdjJywgMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG9kKSwgbGlzdCgnY2FiZGUnKSkKLSAgICAgICAgb2QubW92ZV90b19lbmQoJ2MnLCAwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qob2QpLCBsaXN0KCdjYWJkZScpKQotICAgICAgICBvZC5tb3ZlX3RvX2VuZCgnZScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChvZCksIGxpc3QoJ2NhYmRlJykpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IpOgotICAgICAgICAgICAgb2QubW92ZV90b19lbmQoJ3gnKQotCi0gICAgZGVmIHRlc3Rfc2l6ZW9mKHNlbGYpOgotICAgICAgICAjIFdpbXB5IHRlc3Q6IEp1c3QgdmVyaWZ5IHRoZSByZXBvcnRlZCBzaXplIGlzIGxhcmdlciB0aGFuIGEgcmVndWxhciBkaWN0Ci0gICAgICAgIGQgPSBkaWN0KGE9MSkKLSAgICAgICAgb2QgPSBPcmRlcmVkRGljdCgqKmQpCi0gICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihzeXMuZ2V0c2l6ZW9mKG9kKSwgc3lzLmdldHNpemVvZihkKSkKLQotICAgIGRlZiB0ZXN0X292ZXJyaWRlX3VwZGF0ZShzZWxmKToKLSAgICAgICAgIyBWZXJpZnkgdGhhdCBzdWJjbGFzc2VzIGNhbiBvdmVycmlkZSB1cGRhdGUoKSB3aXRob3V0IGJyZWFraW5nIF9faW5pdF9fKCkKLSAgICAgICAgY2xhc3MgTXlPRChPcmRlcmVkRGljdCk6Ci0gICAgICAgICAgICBkZWYgdXBkYXRlKHNlbGYsICphcmdzLCAqKmt3ZHMpOgotICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigpCi0gICAgICAgIGl0ZW1zID0gWygnYScsIDEpLCAoJ2MnLCAzKSwgKCdiJywgMildCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChNeU9EKGl0ZW1zKS5pdGVtcygpKSwgaXRlbXMpCi0KLWNsYXNzIEdlbmVyYWxNYXBwaW5nVGVzdHMobWFwcGluZ190ZXN0cy5CYXNpY1Rlc3RNYXBwaW5nUHJvdG9jb2wpOgotICAgIHR5cGUydGVzdCA9IE9yZGVyZWREaWN0Ci0KLSAgICBkZWYgdGVzdF9wb3BpdGVtKHNlbGYpOgotICAgICAgICBkID0gc2VsZi5fZW1wdHlfbWFwcGluZygpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBkLnBvcGl0ZW0pCi0KLWNsYXNzIE15T3JkZXJlZERpY3QoT3JkZXJlZERpY3QpOgotICAgIHBhc3MKLQotY2xhc3MgU3ViY2xhc3NNYXBwaW5nVGVzdHMobWFwcGluZ190ZXN0cy5CYXNpY1Rlc3RNYXBwaW5nUHJvdG9jb2wpOgotICAgIHR5cGUydGVzdCA9IE15T3JkZXJlZERpY3QKLQotICAgIGRlZiB0ZXN0X3BvcGl0ZW0oc2VsZik6Ci0gICAgICAgIGQgPSBzZWxmLl9lbXB0eV9tYXBwaW5nKCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIGQucG9waXRlbSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWN0KGMpLCB7J2EnOiA1LCAnYic6IDIsICdjJzogMSwgJ2QnOiAxLCAncic6MiB9KQogCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIyMgUnVuIHRlc3RzCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi1pbXBvcnQgZG9jdGVzdCwgY29sbGVjdGlvbnMKLQogZGVmIHRlc3RfbWFpbih2ZXJib3NlPU5vbmUpOgogICAgIE5hbWVkVHVwbGVEb2NzID0gZG9jdGVzdC5Eb2NUZXN0U3VpdGUobW9kdWxlPWNvbGxlY3Rpb25zKQogICAgIHRlc3RfY2xhc3NlcyA9IFtUZXN0TmFtZWRUdXBsZSwgTmFtZWRUdXBsZURvY3MsIFRlc3RPbmVUcmlja1BvbnlBQkNzLAotICAgICAgICAgICAgICAgICAgICBUZXN0Q29sbGVjdGlvbkFCQ3MsIFRlc3RDb3VudGVyLCBUZXN0Q2hhaW5NYXAsCi0gICAgICAgICAgICAgICAgICAgIFRlc3RPcmRlcmVkRGljdCwgR2VuZXJhbE1hcHBpbmdUZXN0cywgU3ViY2xhc3NNYXBwaW5nVGVzdHNdCisgICAgICAgICAgICAgICAgICAgIFRlc3RDb2xsZWN0aW9uQUJDcywgVGVzdENvdW50ZXIsIFRlc3RDaGFpbk1hcF0KICAgICBzdXBwb3J0LnJ1bl91bml0dGVzdCgqdGVzdF9jbGFzc2VzKQogICAgIHN1cHBvcnQucnVuX2RvY3Rlc3QoY29sbGVjdGlvbnMsIHZlcmJvc2UpCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY29sb3JzeXMucHkgYi9MaWIvdGVzdC90ZXN0X2NvbG9yc3lzLnB5CmluZGV4IGU0MDViOGEuLmEyNGUzYWQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY29sb3JzeXMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jb2xvcnN5cy5weQpAQCAtMSw0ICsxLDQgQEAKLWltcG9ydCB1bml0dGVzdCwgdGVzdC5zdXBwb3J0CitpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCBjb2xvcnN5cwogCiBkZWYgZnJhbmdlKHN0YXJ0LCBzdG9wLCBzdGVwKToKQEAgLTY5LDggKzY5LDMyIEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydFRyaXBsZUVxdWFsKGhscywgY29sb3JzeXMucmdiX3RvX2hscygqcmdiKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJpcGxlRXF1YWwocmdiLCBjb2xvcnN5cy5obHNfdG9fcmdiKCpobHMpKQogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgdGVzdC5zdXBwb3J0LnJ1bl91bml0dGVzdChDb2xvcnN5c1Rlc3QpCisgICAgZGVmIHRlc3RfeWlxX3JvdW5kdHJpcChzZWxmKToKKyAgICAgICAgZm9yIHIgaW4gZnJhbmdlKDAuMCwgMS4wLCAwLjIpOgorICAgICAgICAgICAgZm9yIGcgaW4gZnJhbmdlKDAuMCwgMS4wLCAwLjIpOgorICAgICAgICAgICAgICAgIGZvciBiIGluIGZyYW5nZSgwLjAsIDEuMCwgMC4yKToKKyAgICAgICAgICAgICAgICAgICAgcmdiID0gKHIsIGcsIGIpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJpcGxlRXF1YWwoCisgICAgICAgICAgICAgICAgICAgICAgICByZ2IsCisgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcnN5cy55aXFfdG9fcmdiKCpjb2xvcnN5cy5yZ2JfdG9feWlxKCpyZ2IpKQorICAgICAgICAgICAgICAgICAgICApCisKKyAgICBkZWYgdGVzdF95aXFfdmFsdWVzKHNlbGYpOgorICAgICAgICB2YWx1ZXMgPSBbCisgICAgICAgICAgICAjIHJnYiwgeWlxCisgICAgICAgICAgICAoKDAuMCwgMC4wLCAwLjApLCAoMC4wLCAwLjAsIDAuMCkpLCAjIGJsYWNrCisgICAgICAgICAgICAoKDAuMCwgMC4wLCAxLjApLCAoMC4xMSwgLTAuMzIxNywgMC4zMTIxKSksICMgYmx1ZQorICAgICAgICAgICAgKCgwLjAsIDEuMCwgMC4wKSwgKDAuNTksIC0wLjI3NzMsIC0wLjUyNTEpKSwgIyBncmVlbgorICAgICAgICAgICAgKCgwLjAsIDEuMCwgMS4wKSwgKDAuNywgLTAuNTk5LCAtMC4yMTMpKSwgIyBjeWFuCisgICAgICAgICAgICAoKDEuMCwgMC4wLCAwLjApLCAoMC4zLCAwLjU5OSwgMC4yMTMpKSwgIyByZWQKKyAgICAgICAgICAgICgoMS4wLCAwLjAsIDEuMCksICgwLjQxLCAwLjI3NzMsIDAuNTI1MSkpLCAjIHB1cnBsZQorICAgICAgICAgICAgKCgxLjAsIDEuMCwgMC4wKSwgKDAuODksIDAuMzIxNywgLTAuMzEyMSkpLCAjIHllbGxvdworICAgICAgICAgICAgKCgxLjAsIDEuMCwgMS4wKSwgKDEuMCwgMC4wLCAwLjApKSwgIyB3aGl0ZQorICAgICAgICAgICAgKCgwLjUsIDAuNSwgMC41KSwgKDAuNSwgMC4wLCAwLjApKSwgIyBncmV5CisgICAgICAgIF0KKyAgICAgICAgZm9yIChyZ2IsIHlpcSkgaW4gdmFsdWVzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcmlwbGVFcXVhbCh5aXEsIGNvbG9yc3lzLnJnYl90b195aXEoKnJnYikpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRyaXBsZUVxdWFsKHJnYiwgY29sb3JzeXMueWlxX3RvX3JnYigqeWlxKSkKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jb21wYXJlLnB5IGIvTGliL3Rlc3QvdGVzdF9jb21wYXJlLnB5CmluZGV4IGVlMzc5NGEuLmE2NjM4MzIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY29tcGFyZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NvbXBhcmUucHkKQEAgLTQ4LDggKzQ4LDY5IEBACiAgICAgZGVmIHRlc3RfbmVfZGVmYXVsdHNfdG9fbm90X2VxKHNlbGYpOgogICAgICAgICBhID0gQ21wKDEpCiAgICAgICAgIGIgPSBDbXAoMSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEgPT0gYikKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShhICE9IGIpCisgICAgICAgIGMgPSBDbXAoMikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhhID09IGIsIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoYSAhPSBiLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhhICE9IGMsIFRydWUpCisKKyAgICBkZWYgdGVzdF9uZV9oaWdoX3ByaW9yaXR5KHNlbGYpOgorICAgICAgICAiIiJvYmplY3QuX19uZV9fKCkgc2hvdWxkIGFsbG93IHJlZmxlY3RlZCBfX25lX18oKSB0byBiZSB0cmllZCIiIgorICAgICAgICBjYWxscyA9IFtdCisgICAgICAgIGNsYXNzIExlZnQ6CisgICAgICAgICAgICAjIEluaGVyaXRzIG9iamVjdC5fX25lX18oKQorICAgICAgICAgICAgZGVmIF9fZXFfXygqYXJncyk6CisgICAgICAgICAgICAgICAgY2FsbHMuYXBwZW5kKCdMZWZ0Ll9fZXFfXycpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgICAgIGNsYXNzIFJpZ2h0OgorICAgICAgICAgICAgZGVmIF9fZXFfXygqYXJncyk6CisgICAgICAgICAgICAgICAgY2FsbHMuYXBwZW5kKCdSaWdodC5fX2VxX18nKQorICAgICAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgICAgICAgICAgZGVmIF9fbmVfXygqYXJncyk6CisgICAgICAgICAgICAgICAgY2FsbHMuYXBwZW5kKCdSaWdodC5fX25lX18nKQorICAgICAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgICAgICBMZWZ0KCkgIT0gUmlnaHQoKQorICAgICAgICBzZWxmLmFzc2VydFNlcXVlbmNlRXF1YWwoY2FsbHMsIFsnTGVmdC5fX2VxX18nLCAnUmlnaHQuX19uZV9fJ10pCisKKyAgICBkZWYgdGVzdF9uZV9sb3dfcHJpb3JpdHkoc2VsZik6CisgICAgICAgICIiIm9iamVjdC5fX25lX18oKSBzaG91bGQgbm90IGludm9rZSByZWZsZWN0ZWQgX19lcV9fKCkiIiIKKyAgICAgICAgY2FsbHMgPSBbXQorICAgICAgICBjbGFzcyBCYXNlOgorICAgICAgICAgICAgIyBJbmhlcml0cyBvYmplY3QuX19uZV9fKCkKKyAgICAgICAgICAgIGRlZiBfX2VxX18oKmFyZ3MpOgorICAgICAgICAgICAgICAgIGNhbGxzLmFwcGVuZCgnQmFzZS5fX2VxX18nKQorICAgICAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgICAgICBjbGFzcyBEZXJpdmVkKEJhc2UpOiAgIyBTdWJjbGFzc2luZyBmb3JjZXMgaGlnaGVyIHByaW9yaXR5CisgICAgICAgICAgICBkZWYgX19lcV9fKCphcmdzKToKKyAgICAgICAgICAgICAgICBjYWxscy5hcHBlbmQoJ0Rlcml2ZWQuX19lcV9fJykKKyAgICAgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICAgICAgICAgIGRlZiBfX25lX18oKmFyZ3MpOgorICAgICAgICAgICAgICAgIGNhbGxzLmFwcGVuZCgnRGVyaXZlZC5fX25lX18nKQorICAgICAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgICAgICBCYXNlKCkgIT0gRGVyaXZlZCgpCisgICAgICAgIHNlbGYuYXNzZXJ0U2VxdWVuY2VFcXVhbChjYWxscywgWydEZXJpdmVkLl9fbmVfXycsICdCYXNlLl9fZXFfXyddKQorCisgICAgZGVmIHRlc3Rfb3RoZXJfZGVsZWdhdGlvbihzZWxmKToKKyAgICAgICAgIiIiTm8gZGVmYXVsdCBkZWxlZ2F0aW9uIGJldHdlZW4gb3BlcmF0aW9ucyBleGNlcHQgX19uZV9fKCkiIiIKKyAgICAgICAgb3BzID0gKAorICAgICAgICAgICAgKCdfX2VxX18nLCBsYW1iZGEgYSwgYjogYSA9PSBiKSwKKyAgICAgICAgICAgICgnX19sdF9fJywgbGFtYmRhIGEsIGI6IGEgPCBiKSwKKyAgICAgICAgICAgICgnX19sZV9fJywgbGFtYmRhIGEsIGI6IGEgPD0gYiksCisgICAgICAgICAgICAoJ19fZ3RfXycsIGxhbWJkYSBhLCBiOiBhID4gYiksCisgICAgICAgICAgICAoJ19fZ2VfXycsIGxhbWJkYSBhLCBiOiBhID49IGIpLAorICAgICAgICApCisgICAgICAgIGZvciBuYW1lLCBmdW5jIGluIG9wczoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG5hbWUpOgorICAgICAgICAgICAgICAgIGRlZiB1bmV4cGVjdGVkKCphcmdzKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdVbmV4cGVjdGVkIG9wZXJhdG9yIG1ldGhvZCBjYWxsZWQnKQorICAgICAgICAgICAgICAgIGNsYXNzIEM6CisgICAgICAgICAgICAgICAgICAgIF9fbmVfXyA9IHVuZXhwZWN0ZWQKKyAgICAgICAgICAgICAgICBmb3Igb3RoZXIsIF8gaW4gb3BzOgorICAgICAgICAgICAgICAgICAgICBpZiBvdGhlciAhPSBuYW1lOgorICAgICAgICAgICAgICAgICAgICAgICAgc2V0YXR0cihDLCBvdGhlciwgdW5leHBlY3RlZCkKKyAgICAgICAgICAgICAgICBpZiBuYW1lID09ICdfX2VxX18nOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzKGZ1bmMoQygpLCBvYmplY3QoKSksIEZhbHNlKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZnVuYywgQygpLCBvYmplY3QoKSkKIAogICAgIGRlZiB0ZXN0X2lzc3VlXzEzOTMoc2VsZik6CiAgICAgICAgIHggPSBsYW1iZGE6IE5vbmUKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY29tcGlsZS5weSBiL0xpYi90ZXN0L3Rlc3RfY29tcGlsZS5weQppbmRleCBjY2QwOGRiLi5lZTI4Y2E5IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2NvbXBpbGUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jb21waWxlLnB5CkBAIC0xLDggKzEsMTEgQEAKK2ltcG9ydCBtYXRoCitpbXBvcnQgb3MKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IHN5cwogaW1wb3J0IF9hc3QKK2ltcG9ydCB0ZW1wZmlsZQogaW1wb3J0IHR5cGVzCi1mcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydCwgc2NyaXB0X2hlbHBlcgogCiBjbGFzcyBUZXN0U3BlY2lmaWNzKHVuaXR0ZXN0LlRlc3RDYXNlKToKIApAQCAtMzAzLDkgKzMwNiwyNiBAQAogICAgICAgICBsID0gbGFtYmRhOiAiZm9vIgogICAgICAgICBzZWxmLmFzc2VydElzTm9uZShsLl9fZG9jX18pCiAKLSMjICAgICBkZWYgdGVzdF91bmljb2RlX2VuY29kaW5nKHNlbGYpOgotIyMgICAgICAgICBjb2RlID0gIiMgLSotIGNvZGluZzogdXRmLTggLSotXG5wYXNzXG4iCi0jIyAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yLCBjb21waWxlLCBjb2RlLCAidG1wIiwgImV4ZWMiKQorICAgIGRlZiB0ZXN0X2VuY29kaW5nKHNlbGYpOgorICAgICAgICBjb2RlID0gYicjIC0qLSBjb2Rpbmc6IGJhZGVuY29kaW5nIC0qLVxucGFzc1xuJworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvciwgY29tcGlsZSwgY29kZSwgJ3RtcCcsICdleGVjJykKKyAgICAgICAgY29kZSA9ICcjIC0qLSBjb2Rpbmc6IGJhZGVuY29kaW5nIC0qLVxuIlx4YzJceGE0IlxuJworICAgICAgICBjb21waWxlKGNvZGUsICd0bXAnLCAnZXhlYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbChjb2RlKSwgJ1x4YzJceGE0JykKKyAgICAgICAgY29kZSA9ICciXHhjMlx4YTQiXG4nCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbChjb2RlKSwgJ1x4YzJceGE0JykKKyAgICAgICAgY29kZSA9IGInIlx4YzJceGE0IlxuJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwoY29kZSksICdceGE0JykKKyAgICAgICAgY29kZSA9IGInIyAtKi0gY29kaW5nOiBsYXRpbjEgLSotXG4iXHhjMlx4YTQiXG4nCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbChjb2RlKSwgJ1x4YzJceGE0JykKKyAgICAgICAgY29kZSA9IGInIyAtKi0gY29kaW5nOiB1dGYtOCAtKi1cbiJceGMyXHhhNCJcbicKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKGNvZGUpLCAnXHhhNCcpCisgICAgICAgIGNvZGUgPSBiJyMgLSotIGNvZGluZzogaXNvODg1OS0xNSAtKi1cbiJceGMyXHhhNCJcbicKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKGNvZGUpLCAnXHhjMlx1MjBhYycpCisgICAgICAgIGNvZGUgPSAnIiIiXFxcbiMgLSotIGNvZGluZzogaXNvODg1OS0xNSAtKi1cblx4YzJceGE0IiIiXG4nCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbChjb2RlKSwgJyMgLSotIGNvZGluZzogaXNvODg1OS0xNSAtKi1cblx4YzJceGE0JykKKyAgICAgICAgY29kZSA9IGInIiIiXFxcbiMgLSotIGNvZGluZzogaXNvODg1OS0xNSAtKi1cblx4YzJceGE0IiIiXG4nCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbChjb2RlKSwgJyMgLSotIGNvZGluZzogaXNvODg1OS0xNSAtKi1cblx4YTQnKQogCiAgICAgZGVmIHRlc3Rfc3Vic2NyaXB0cyhzZWxmKToKICAgICAgICAgIyBTRiBidWcgMTQ0ODgwNApAQCAtNDc0LDYgKzQ5NCwyNiBAQAogICAgICAgICBzZWxmLmFzc2VydEludmFsaWRTaW5nbGUoJ2YoKVxueHkgIyBibGFoXG5ibGFoKCknKQogICAgICAgICBzZWxmLmFzc2VydEludmFsaWRTaW5nbGUoJ3ggPSA1ICMgY29tbWVudFxueCA9IDZcbicpCiAKKyAgICBkZWYgdGVzdF9wYXJ0aWN1bGFybHlfZXZpbF91bmRlY29kYWJsZShzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAyNDAyMgorICAgICAgICBzcmMgPSBiJzAwMDBceDAwXG4wMDAwMDAwMDAwMFxuXHgwMFxuXHg5ZVxuJworICAgICAgICB3aXRoIHRlbXBmaWxlLlRlbXBvcmFyeURpcmVjdG9yeSgpIGFzIHRtcGQ6CisgICAgICAgICAgICBmbiA9IG9zLnBhdGguam9pbih0bXBkLCAiYmFkLnB5IikKKyAgICAgICAgICAgIHdpdGggb3BlbihmbiwgIndiIikgYXMgZnA6CisgICAgICAgICAgICAgICAgZnAud3JpdGUoc3JjKQorICAgICAgICAgICAgcmVzID0gc2NyaXB0X2hlbHBlci5ydW5fcHl0aG9uX3VudGlsX2VuZChmbilbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRJbihiIk5vbi1VVEYtOCIsIHJlcy5lcnIpCisKKyAgICBkZWYgdGVzdF95ZXRfbW9yZV9ldmlsX3N0aWxsX3VuZGVjb2RhYmxlKHNlbGYpOgorICAgICAgICAjIElzc3VlICMyNTM4OAorICAgICAgICBzcmMgPSBiIiNceDAwXG4jXHhmZFxuIgorICAgICAgICB3aXRoIHRlbXBmaWxlLlRlbXBvcmFyeURpcmVjdG9yeSgpIGFzIHRtcGQ6CisgICAgICAgICAgICBmbiA9IG9zLnBhdGguam9pbih0bXBkLCAiYmFkLnB5IikKKyAgICAgICAgICAgIHdpdGggb3BlbihmbiwgIndiIikgYXMgZnA6CisgICAgICAgICAgICAgICAgZnAud3JpdGUoc3JjKQorICAgICAgICAgICAgcmVzID0gc2NyaXB0X2hlbHBlci5ydW5fcHl0aG9uX3VudGlsX2VuZChmbilbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRJbihiIk5vbi1VVEYtOCIsIHJlcy5lcnIpCisKICAgICBAc3VwcG9ydC5jcHl0aG9uX29ubHkKICAgICBkZWYgdGVzdF9jb21waWxlcl9yZWN1cnNpb25fbGltaXQoc2VsZik6CiAgICAgICAgICMgRXhwZWN0ZWQgbGltaXQgaXMgc3lzLmdldHJlY3Vyc2lvbmxpbWl0KCkgKiB0aGUgc2NhbGluZyBmYWN0b3IKQEAgLTUwMCw5ICs1NDAsNjUgQEAKICAgICAgICAgY2hlY2tfbGltaXQoImEiLCAiWzBdIikKICAgICAgICAgY2hlY2tfbGltaXQoImEiLCAiKmEiKQogCisgICAgZGVmIHRlc3RfbnVsbF90ZXJtaW5hdGVkKHNlbGYpOgorICAgICAgICAjIFRoZSBzb3VyY2UgY29kZSBpcyBudWxsLXRlcm1pbmF0ZWQgaW50ZXJuYWxseSwgYnV0IGJ5dGVzLWxpa2UKKyAgICAgICAgIyBvYmplY3RzIGFyZSBhY2NlcHRlZCwgd2hpY2ggY291bGQgYmUgbm90IHRlcm1pbmF0ZWQuCisgICAgICAgICMgRXhjZXB0aW9uIGNoYW5nZWQgZnJvbSBUeXBlRXJyb3IgdG8gVmFsdWVFcnJvciBpbiAzLjUKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KEV4Y2VwdGlvbiwgImNhbm5vdCBjb250YWluIG51bGwiKToKKyAgICAgICAgICAgIGNvbXBpbGUoIjEyM1x4MDAiLCAiPGR1bW15PiIsICJldmFsIikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KEV4Y2VwdGlvbiwgImNhbm5vdCBjb250YWluIG51bGwiKToKKyAgICAgICAgICAgIGNvbXBpbGUobWVtb3J5dmlldyhiIjEyM1x4MDAiKSwgIjxkdW1teT4iLCAiZXZhbCIpCisgICAgICAgIGNvZGUgPSBjb21waWxlKG1lbW9yeXZpZXcoYiIxMjNceDAwIilbMTotMV0sICI8ZHVtbXk+IiwgImV2YWwiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwoY29kZSksIDIzKQorICAgICAgICBjb2RlID0gY29tcGlsZShtZW1vcnl2aWV3KGIiMTIzNCIpWzE6LTFdLCAiPGR1bW15PiIsICJldmFsIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKGNvZGUpLCAyMykKKyAgICAgICAgY29kZSA9IGNvbXBpbGUobWVtb3J5dmlldyhiIiQyMyQiKVsxOi0xXSwgIjxkdW1teT4iLCAiZXZhbCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbChjb2RlKSwgMjMpCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChUZXN0U3BlY2lmaWNzKQorICAgICAgICAjIEFsc28gdGVzdCB3aGVuIGV2YWwoKSBhbmQgZXhlYygpIGRvIHRoZSBjb21waWxhdGlvbiBzdGVwCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbChtZW1vcnl2aWV3KGIiMTIzNCIpWzE6LTFdKSwgMjMpCisgICAgICAgIG5hbWVzcGFjZSA9IGRpY3QoKQorICAgICAgICBleGVjKG1lbW9yeXZpZXcoYiJheCA9IDEyMyIpWzE6LTFdLCBuYW1lc3BhY2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmFtZXNwYWNlWyd4J10sIDEyKQorCisKK2NsYXNzIFRlc3RTdGFja1NpemUodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMgVGhlc2UgdGVzdHMgY2hlY2sgdGhhdCB0aGUgY29tcHV0ZWQgc3RhY2sgc2l6ZSBmb3IgYSBjb2RlIG9iamVjdAorICAgICMgc3RheXMgd2l0aGluIHJlYXNvbmFibGUgYm91bmRzIChzZWUgaXNzdWUgIzIxNTIzIGZvciBhbiBleGFtcGxlCisgICAgIyBkeXNmdW5jdGlvbikuCisgICAgTiA9IDEwMAorCisgICAgZGVmIGNoZWNrX3N0YWNrX3NpemUoc2VsZiwgY29kZSk6CisgICAgICAgICMgVG8gYXNzZXJ0IHRoYXQgdGhlIGFsbGVnZWQgc3RhY2sgc2l6ZSBpcyBub3QgTyhOKSwgd2UKKyAgICAgICAgIyBjaGVjayB0aGF0IGl0IGlzIHNtYWxsZXIgdGhhbiBsb2coTikuCisgICAgICAgIGlmIGlzaW5zdGFuY2UoY29kZSwgc3RyKToKKyAgICAgICAgICAgIGNvZGUgPSBjb21waWxlKGNvZGUsICI8Zm9vPiIsICJzaW5nbGUiKQorICAgICAgICBtYXhfc2l6ZSA9IG1hdGguY2VpbChtYXRoLmxvZyhsZW4oY29kZS5jb19jb2RlKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKGNvZGUuY29fc3RhY2tzaXplLCBtYXhfc2l6ZSkKKworICAgIGRlZiB0ZXN0X2FuZChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19zdGFja19zaXplKCJ4IGFuZCAiICogc2VsZi5OICsgIngiKQorCisgICAgZGVmIHRlc3Rfb3Ioc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfc3RhY2tfc2l6ZSgieCBvciAiICogc2VsZi5OICsgIngiKQorCisgICAgZGVmIHRlc3RfYW5kX29yKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3N0YWNrX3NpemUoInggYW5kIHggb3IgIiAqIHNlbGYuTiArICJ4IikKKworICAgIGRlZiB0ZXN0X2NoYWluZWRfY29tcGFyaXNvbihzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19zdGFja19zaXplKCJ4IDwgIiAqIHNlbGYuTiArICJ4IikKKworICAgIGRlZiB0ZXN0X2lmX2Vsc2Uoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfc3RhY2tfc2l6ZSgieCBpZiB4IGVsc2UgIiAqIHNlbGYuTiArICJ4IikKKworICAgIGRlZiB0ZXN0X2Jpbm9wKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3N0YWNrX3NpemUoInggKyAiICogc2VsZi5OICsgIngiKQorCisgICAgZGVmIHRlc3RfZnVuY19hbmQoc2VsZik6CisgICAgICAgIGNvZGUgPSAiZGVmIGYoeCk6XG4iCisgICAgICAgIGNvZGUgKz0gIiAgIHggYW5kIHhcbiIgKiBzZWxmLk4KKyAgICAgICAgc2VsZi5jaGVja19zdGFja19zaXplKGNvZGUpCisKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jb21waWxlYWxsLnB5IGIvTGliL3Rlc3QvdGVzdF9jb21waWxlYWxsLnB5CmluZGV4IDA1MDVjNTIuLjdjNjFmYTMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY29tcGlsZWFsbC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NvbXBpbGVhbGwucHkKQEAgLTEsMTEgKzEsMTEgQEAKIGltcG9ydCBzeXMKIGltcG9ydCBjb21waWxlYWxsCi1pbXBvcnQgaW1wCitpbXBvcnQgaW1wb3J0bGliLnV0aWwKIGltcG9ydCBvcworaW1wb3J0IHBhdGhsaWIKIGltcG9ydCBweV9jb21waWxlCiBpbXBvcnQgc2h1dGlsCiBpbXBvcnQgc3RydWN0Ci1pbXBvcnQgc3VicHJvY2VzcwogaW1wb3J0IHRlbXBmaWxlCiBpbXBvcnQgdGltZQogaW1wb3J0IHVuaXR0ZXN0CkBAIC0xOCwxMSArMTgsMTEgQEAKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIHNlbGYuZGlyZWN0b3J5ID0gdGVtcGZpbGUubWtkdGVtcCgpCiAgICAgICAgIHNlbGYuc291cmNlX3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5kaXJlY3RvcnksICdfdGVzdC5weScpCi0gICAgICAgIHNlbGYuYmNfcGF0aCA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShzZWxmLnNvdXJjZV9wYXRoKQorICAgICAgICBzZWxmLmJjX3BhdGggPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShzZWxmLnNvdXJjZV9wYXRoKQogICAgICAgICB3aXRoIG9wZW4oc2VsZi5zb3VyY2VfcGF0aCwgJ3cnKSBhcyBmaWxlOgogICAgICAgICAgICAgZmlsZS53cml0ZSgneCA9IDEyM1xuJykKICAgICAgICAgc2VsZi5zb3VyY2VfcGF0aDIgPSBvcy5wYXRoLmpvaW4oc2VsZi5kaXJlY3RvcnksICdfdGVzdDIucHknKQotICAgICAgICBzZWxmLmJjX3BhdGgyID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKHNlbGYuc291cmNlX3BhdGgyKQorICAgICAgICBzZWxmLmJjX3BhdGgyID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2Uoc2VsZi5zb3VyY2VfcGF0aDIpCiAgICAgICAgIHNodXRpbC5jb3B5ZmlsZShzZWxmLnNvdXJjZV9wYXRoLCBzZWxmLnNvdXJjZV9wYXRoMikKICAgICAgICAgc2VsZi5zdWJkaXJlY3RvcnkgPSBvcy5wYXRoLmpvaW4oc2VsZi5kaXJlY3RvcnksICdfc3ViZGlyJykKICAgICAgICAgb3MubWtkaXIoc2VsZi5zdWJkaXJlY3RvcnkpCkBAIC0zNiw3ICszNiw3IEBACiAgICAgICAgIHdpdGggb3BlbihzZWxmLmJjX3BhdGgsICdyYicpIGFzIGZpbGU6CiAgICAgICAgICAgICBkYXRhID0gZmlsZS5yZWFkKDgpCiAgICAgICAgIG10aW1lID0gaW50KG9zLnN0YXQoc2VsZi5zb3VyY2VfcGF0aCkuc3RfbXRpbWUpCi0gICAgICAgIGNvbXBhcmUgPSBzdHJ1Y3QucGFjaygnPDRzbCcsIGltcC5nZXRfbWFnaWMoKSwgbXRpbWUpCisgICAgICAgIGNvbXBhcmUgPSBzdHJ1Y3QucGFjaygnPDRzbCcsIGltcG9ydGxpYi51dGlsLk1BR0lDX05VTUJFUiwgbXRpbWUpCiAgICAgICAgIHJldHVybiBkYXRhLCBjb21wYXJlCiAKICAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKG9zLCAnc3RhdCcpLCAndGVzdCBuZWVkcyBvcy5zdGF0KCknKQpAQCAtNTYsNyArNTYsOCBAQAogCiAgICAgZGVmIHRlc3RfbXRpbWUoc2VsZik6CiAgICAgICAgICMgVGVzdCBhIGNoYW5nZSBpbiBtdGltZSBsZWFkcyB0byBhIG5ldyAucHljLgotICAgICAgICBzZWxmLnJlY3JlYXRpb25fY2hlY2soc3RydWN0LnBhY2soJzw0c2wnLCBpbXAuZ2V0X21hZ2ljKCksIDEpKQorICAgICAgICBzZWxmLnJlY3JlYXRpb25fY2hlY2soc3RydWN0LnBhY2soJzw0c2wnLCBpbXBvcnRsaWIudXRpbC5NQUdJQ19OVU1CRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxKSkKIAogICAgIGRlZiB0ZXN0X21hZ2ljX251bWJlcihzZWxmKToKICAgICAgICAgIyBUZXN0IGEgY2hhbmdlIGluIG10aW1lIGxlYWRzIHRvIGEgbmV3IC5weWMuCkBAIC05NiwxNCArOTcsMTQgQEAKICAgICAgICAgIyBpbnRlcnByZXRlcidzIGNyZWF0ZXMgdGhlIGNvcnJlY3QgZmlsZSBuYW1lcwogICAgICAgICBvcHRpbWl6ZSA9IDEgaWYgX19kZWJ1Z19fIGVsc2UgMAogICAgICAgICBjb21waWxlYWxsLmNvbXBpbGVfZGlyKHNlbGYuZGlyZWN0b3J5LCBxdWlldD1UcnVlLCBvcHRpbWl6ZT1vcHRpbWl6ZSkKLSAgICAgICAgY2FjaGVkID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKHNlbGYuc291cmNlX3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z19vdmVycmlkZT1ub3Qgb3B0aW1pemUpCisgICAgICAgIGNhY2hlZCA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHNlbGYuc291cmNlX3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnX292ZXJyaWRlPW5vdCBvcHRpbWl6ZSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKGNhY2hlZCkpCi0gICAgICAgIGNhY2hlZDIgPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2Uoc2VsZi5zb3VyY2VfcGF0aDIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z19vdmVycmlkZT1ub3Qgb3B0aW1pemUpCisgICAgICAgIGNhY2hlZDIgPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShzZWxmLnNvdXJjZV9wYXRoMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnX292ZXJyaWRlPW5vdCBvcHRpbWl6ZSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKGNhY2hlZDIpKQotICAgICAgICBjYWNoZWQzID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKHNlbGYuc291cmNlX3BhdGgzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdfb3ZlcnJpZGU9bm90IG9wdGltaXplKQorICAgICAgICBjYWNoZWQzID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2Uoc2VsZi5zb3VyY2VfcGF0aDMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z19vdmVycmlkZT1ub3Qgb3B0aW1pemUpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShjYWNoZWQzKSkKIAogCkBAIC0xMzMsNiArMTM0LDMzIEBACiBjbGFzcyBDb21tYW5kTGluZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAiIiJUZXN0IGNvbXBpbGVhbGwncyBDTEkuIiIiCiAKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc2V0VXBDbGFzcyhjbHMpOgorICAgICAgICBmb3IgcGF0aCBpbiBmaWx0ZXIob3MucGF0aC5pc2Rpciwgc3lzLnBhdGgpOgorICAgICAgICAgICAgZGlyZWN0b3J5X2NyZWF0ZWQgPSBGYWxzZQorICAgICAgICAgICAgZGlyZWN0b3J5ID0gcGF0aGxpYi5QYXRoKHBhdGgpIC8gJ19fcHljYWNoZV9fJworICAgICAgICAgICAgcGF0aCA9IGRpcmVjdG9yeSAvICd0ZXN0LnRyeScKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpZiBub3QgZGlyZWN0b3J5LmlzX2RpcigpOgorICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkubWtkaXIoKQorICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnlfY3JlYXRlZCA9IFRydWUKKyAgICAgICAgICAgICAgICB3aXRoIHBhdGgub3BlbigndycpIGFzIGZpbGU6CisgICAgICAgICAgICAgICAgICAgIGZpbGUud3JpdGUoJyMgZm9yIHRlc3RfY29tcGlsZWFsbCcpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICBzeXNfcGF0aF93cml0YWJsZSA9IEZhbHNlCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgc3VwcG9ydC51bmxpbmsoc3RyKHBhdGgpKQorICAgICAgICAgICAgICAgIGlmIGRpcmVjdG9yeV9jcmVhdGVkOgorICAgICAgICAgICAgICAgICAgICBkaXJlY3Rvcnkucm1kaXIoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3lzX3BhdGhfd3JpdGFibGUgPSBUcnVlCisgICAgICAgIGNscy5fc3lzX3BhdGhfd3JpdGFibGUgPSBzeXNfcGF0aF93cml0YWJsZQorCisgICAgZGVmIF9za2lwX2lmX3N5c19wYXRoX25vdF93cml0YWJsZShzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuX3N5c19wYXRoX3dyaXRhYmxlOgorICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoJ25vdCBhbGwgZW50cmllcyBvbiBzeXMucGF0aCBhcmUgd3JpdGFibGUnKQorCiAgICAgZGVmIF9nZXRfcnVuX2FyZ3Moc2VsZiwgYXJncyk6CiAgICAgICAgIGludGVycF9hcmdzID0gWyctUyddCiAgICAgICAgIGlmIHN5cy5mbGFncy5vcHRpbWl6ZToKQEAgLTE1MSwxNCArMTc5LDE2IEBACiAgICAgICAgIHJldHVybiByYywgb3V0LCBlcnIKIAogICAgIGRlZiBhc3NlcnRDb21waWxlZChzZWxmLCBmbik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhpbXAuY2FjaGVfZnJvbV9zb3VyY2UoZm4pKSkKKyAgICAgICAgcGF0aCA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKGZuKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMocGF0aCkpCiAKICAgICBkZWYgYXNzZXJ0Tm90Q29tcGlsZWQoc2VsZiwgZm4pOgotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKGltcC5jYWNoZV9mcm9tX3NvdXJjZShmbikpKQorICAgICAgICBwYXRoID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoZm4pCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5leGlzdHMocGF0aCkpCiAKICAgICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgIHNlbGYuYWRkQ2xlYW51cChzZWxmLl9jbGVhbnVwKQogICAgICAgICBzZWxmLmRpcmVjdG9yeSA9IHRlbXBmaWxlLm1rZHRlbXAoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoc3VwcG9ydC5ybXRyZWUsIHNlbGYuZGlyZWN0b3J5KQogICAgICAgICBzZWxmLnBrZ2RpciA9IG9zLnBhdGguam9pbihzZWxmLmRpcmVjdG9yeSwgJ2ZvbycpCiAgICAgICAgIG9zLm1rZGlyKHNlbGYucGtnZGlyKQogICAgICAgICBzZWxmLnBrZ2Rpcl9jYWNoZWRpciA9IG9zLnBhdGguam9pbihzZWxmLnBrZ2RpciwgJ19fcHljYWNoZV9fJykKQEAgLTE2NiwxMSArMTk2LDkgQEAKICAgICAgICAgc2VsZi5pbml0Zm4gPSBzY3JpcHRfaGVscGVyLm1ha2Vfc2NyaXB0KHNlbGYucGtnZGlyLCAnX19pbml0X18nLCAnJykKICAgICAgICAgc2VsZi5iYXJmbiA9IHNjcmlwdF9oZWxwZXIubWFrZV9zY3JpcHQoc2VsZi5wa2dkaXIsICdiYXInLCAnJykKIAotICAgIGRlZiBfY2xlYW51cChzZWxmKToKLSAgICAgICAgc3VwcG9ydC5ybXRyZWUoc2VsZi5kaXJlY3RvcnkpCi0KICAgICBkZWYgdGVzdF9ub19hcmdzX2NvbXBpbGVzX3BhdGgoc2VsZik6CiAgICAgICAgICMgTm90ZSB0aGF0IC1sIGlzIGltcGxpZWQgZm9yIHRoZSBubyBhcmdzIGNhc2UuCisgICAgICAgIHNlbGYuX3NraXBfaWZfc3lzX3BhdGhfbm90X3dyaXRhYmxlKCkKICAgICAgICAgYmF6Zm4gPSBzY3JpcHRfaGVscGVyLm1ha2Vfc2NyaXB0KHNlbGYuZGlyZWN0b3J5LCAnYmF6JywgJycpCiAgICAgICAgIHNlbGYuYXNzZXJ0UnVuT0soUFlUSE9OUEFUSD1zZWxmLmRpcmVjdG9yeSkKICAgICAgICAgc2VsZi5hc3NlcnRDb21waWxlZChiYXpmbikKQEAgLTE3OCw5ICsyMDYsMTAgQEAKICAgICAgICAgc2VsZi5hc3NlcnROb3RDb21waWxlZChzZWxmLmJhcmZuKQogCiAgICAgZGVmIHRlc3Rfbm9fYXJnc19yZXNwZWN0c19mb3JjZV9mbGFnKHNlbGYpOgorICAgICAgICBzZWxmLl9za2lwX2lmX3N5c19wYXRoX25vdF93cml0YWJsZSgpCiAgICAgICAgIGJhemZuID0gc2NyaXB0X2hlbHBlci5tYWtlX3NjcmlwdChzZWxmLmRpcmVjdG9yeSwgJ2JheicsICcnKQogICAgICAgICBzZWxmLmFzc2VydFJ1bk9LKFBZVEhPTlBBVEg9c2VsZi5kaXJlY3RvcnkpCi0gICAgICAgIHB5Y3BhdGggPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2UoYmF6Zm4pCisgICAgICAgIHB5Y3BhdGggPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShiYXpmbikKICAgICAgICAgIyBTZXQgYXRpbWUvbXRpbWUgYmFja3dhcmQgdG8gYXZvaWQgZmlsZSB0aW1lc3RhbXAgcmVzb2x1dGlvbiBpc3N1ZXMKICAgICAgICAgb3MudXRpbWUocHljcGF0aCwgKHRpbWUudGltZSgpLTYwLCkqMikKICAgICAgICAgbXRpbWUgPSBvcy5zdGF0KHB5Y3BhdGgpLnN0X210aW1lCkBAIC0xOTQsNiArMjIzLDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChtdGltZSwgbXRpbWUyKQogCiAgICAgZGVmIHRlc3Rfbm9fYXJnc19yZXNwZWN0c19xdWlldF9mbGFnKHNlbGYpOgorICAgICAgICBzZWxmLl9za2lwX2lmX3N5c19wYXRoX25vdF93cml0YWJsZSgpCiAgICAgICAgIHNjcmlwdF9oZWxwZXIubWFrZV9zY3JpcHQoc2VsZi5kaXJlY3RvcnksICdiYXonLCAnJykKICAgICAgICAgbm9pc3kgPSBzZWxmLmFzc2VydFJ1bk9LKFBZVEhPTlBBVEg9c2VsZi5kaXJlY3RvcnkpCiAgICAgICAgIHNlbGYuYXNzZXJ0SW4oYidMaXN0aW5nICcsIG5vaXN5KQpAQCAtMjEyLDggKzI0Miw4IEBACiAgICAgICAgICAgICAgICAgWyctbScsICdjb21waWxlYWxsJywgJy1xJywgc2VsZi5wa2dkaXJdKSkKICAgICAgICAgICAgICMgVmVyaWZ5IHRoZSBfX3B5Y2FjaGVfXyBkaXJlY3RvcnkgY29udGVudHMuCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoc2VsZi5wa2dkaXJfY2FjaGVkaXIpKQotICAgICAgICAgICAgZXhwZWN0ZWQgPSBzb3J0ZWQoYmFzZS5mb3JtYXQoaW1wLmdldF90YWcoKSwgZXh0KSBmb3IgYmFzZSBpbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdfX2luaXRfXy57fS57fScsICdiYXIue30ue30nKSkKKyAgICAgICAgICAgIGV4cGVjdGVkID0gc29ydGVkKGJhc2UuZm9ybWF0KHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWcsIGV4dCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBiYXNlIGluICgnX19pbml0X18ue30ue30nLCAnYmFyLnt9Lnt9JykpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChvcy5saXN0ZGlyKHNlbGYucGtnZGlyX2NhY2hlZGlyKSksIGV4cGVjdGVkKQogICAgICAgICAgICAgIyBNYWtlIHN1cmUgdGhlcmUgYXJlIG5vIC5weWMgZmlsZXMgaW4gdGhlIHNvdXJjZSBkaXJlY3RvcnkuCiAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFtmbiBmb3IgZm4gaW4gb3MubGlzdGRpcihzZWxmLnBrZ2RpcikKQEAgLTI0Niw3ICsyNzYsNyBAQAogCiAgICAgZGVmIHRlc3RfZm9yY2Uoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UnVuT0soJy1xJywgc2VsZi5wa2dkaXIpCi0gICAgICAgIHB5Y3BhdGggPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2Uoc2VsZi5iYXJmbikKKyAgICAgICAgcHljcGF0aCA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHNlbGYuYmFyZm4pCiAgICAgICAgICMgc2V0IGF0aW1lL210aW1lIGJhY2t3YXJkIHRvIGF2b2lkIGZpbGUgdGltZXN0YW1wIHJlc29sdXRpb24gaXNzdWVzCiAgICAgICAgIG9zLnV0aW1lKHB5Y3BhdGgsICh0aW1lLnRpbWUoKS02MCwpKjIpCiAgICAgICAgIG10aW1lID0gb3Muc3RhdChweWNwYXRoKS5zdF9tdGltZQpAQCAtMjkzLDE0ICszMjMsNiBAQAogICAgICAgICBzZWxmLmFzc2VydENvbXBpbGVkKGluaXQyZm4pCiAgICAgICAgIHNlbGYuYXNzZXJ0Q29tcGlsZWQoYmFyMmZuKQogCi0gICAgZGVmIHRlc3RfZF90YWtlc19leGFjdGx5X29uZV9kaXIoc2VsZik6Ci0gICAgICAgIHJjLCBvdXQsIGVyciA9IHNlbGYuYXNzZXJ0UnVuTm90T0soJy1kJywgJ2ZvbycpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LCBiJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmVnZXgoZXJyLCBiJy1kJykKLSAgICAgICAgcmMsIG91dCwgZXJyID0gc2VsZi5hc3NlcnRSdW5Ob3RPSygnLWQnLCAnZm9vJywgJ2JhcicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LCBiJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmVnZXgoZXJyLCBiJy1kJykKLQogICAgIGRlZiB0ZXN0X2RfY29tcGlsZV9lcnJvcihzZWxmKToKICAgICAgICAgc2NyaXB0X2hlbHBlci5tYWtlX3NjcmlwdChzZWxmLnBrZ2RpciwgJ2NydW5jaHlmcm9nJywgJ2JhZChzeW50YXgnKQogICAgICAgICByYywgb3V0LCBlcnIgPSBzZWxmLmFzc2VydFJ1bk5vdE9LKCctcScsICctZCcsICdkaW5zZGFsZScsIHNlbGYucGtnZGlyKQpAQCAtMzEwLDEwICszMzIsMTAgQEAKICAgICAgICAgYmF6Zm4gPSBzY3JpcHRfaGVscGVyLm1ha2Vfc2NyaXB0KHNlbGYucGtnZGlyLCAnYmF6JywgJ3JhaXNlIEV4Y2VwdGlvbicpCiAgICAgICAgIHNlbGYuYXNzZXJ0UnVuT0soJy1xJywgJy1kJywgJ2RpbnNkYWxlJywgc2VsZi5wa2dkaXIpCiAgICAgICAgIGZuID0gc2NyaXB0X2hlbHBlci5tYWtlX3NjcmlwdChzZWxmLnBrZ2RpciwgJ2JpbmcnLCAnaW1wb3J0IGJheicpCi0gICAgICAgIHB5YyA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShiYXpmbikKKyAgICAgICAgcHljID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoYmF6Zm4pCiAgICAgICAgIG9zLnJlbmFtZShweWMsIG9zLnBhdGguam9pbihzZWxmLnBrZ2RpciwgJ2Jhei5weWMnKSkKICAgICAgICAgb3MucmVtb3ZlKGJhemZuKQotICAgICAgICByYywgb3V0LCBlcnIgPSBzY3JpcHRfaGVscGVyLmFzc2VydF9weXRob25fZmFpbHVyZShmbikKKyAgICAgICAgcmMsIG91dCwgZXJyID0gc2NyaXB0X2hlbHBlci5hc3NlcnRfcHl0aG9uX2ZhaWx1cmUoZm4sIF9faXNvbGF0ZWQ9RmFsc2UpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXgoZXJyLCBiJ0ZpbGUgImRpbnNkYWxlJykKIAogICAgIGRlZiB0ZXN0X2luY2x1ZGVfYmFkX2ZpbGUoc2VsZik6CkBAIC0zMjEsNyArMzQzLDcgQEAKICAgICAgICAgICAgICctaScsIG9zLnBhdGguam9pbihzZWxmLmRpcmVjdG9yeSwgJ25vc3VjaGZpbGUnKSwgc2VsZi5wa2dkaXIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXgob3V0LCBiJ3Jyb3IuKm5vc3VjaGZpbGUnKQogICAgICAgICBzZWxmLmFzc2VydE5vdFJlZ2V4KGVyciwgYidUcmFjZWJhY2snKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKGltcC5jYWNoZV9mcm9tX3NvdXJjZSgKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmV4aXN0cyhpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wa2dkaXJfY2FjaGVkaXIpKSkKIAogICAgIGRlZiB0ZXN0X2luY2x1ZGVfZmlsZV93aXRoX2FyZyhzZWxmKToKQEAgLTM3OCwxMyArNDAwLDUgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSZWdleChvdXQsIGIiQ2FuJ3QgbGlzdCAnYmFkZmlsZW5hbWUnIikKIAogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoCi0gICAgICAgIENvbW1hbmRMaW5lVGVzdHMsCi0gICAgICAgIENvbXBpbGVhbGxUZXN0cywKLSAgICAgICAgRW5jb2RpbmdUZXN0LAotICAgICAgICApCi0KLQogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jb21wbGV4LnB5IGIvTGliL3Rlc3QvdGVzdF9jb21wbGV4LnB5CmluZGV4IDFiZjQwOTcuLjBlZjlhN2EgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY29tcGxleC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NvbXBsZXgucHkKQEAgLTI3LDcgKzI3LDcgQEAKICAgICAgICAgICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRBbG1vc3RFcXVhbChzZWxmLCBhLCBiKQogCiAgICAgZGVmIGFzc2VydENsb3NlQWJzKHNlbGYsIHgsIHksIGVwcz0xZS05KToKLSAgICAgICAgIiIiUmV0dXJuIHRydWUgaWZmIGZsb2F0cyB4IGFuZCB5ICJhcmUgY2xvc2VcIiIiIgorICAgICAgICAiIiJSZXR1cm4gdHJ1ZSBpZmYgZmxvYXRzIHggYW5kIHkgImFyZSBjbG9zZSIuIiIiCiAgICAgICAgICMgcHV0IHRoZSBvbmUgd2l0aCBsYXJnZXIgbWFnbml0dWRlIHNlY29uZAogICAgICAgICBpZiBhYnMoeCkgPiBhYnMoeSk6CiAgICAgICAgICAgICB4LCB5ID0geSwgeApAQCAtNjIsNyArNjIsNyBAQAogICAgICAgICBzZWxmLmZhaWwobXNnLmZvcm1hdCh4LCB5KSkKIAogICAgIGRlZiBhc3NlcnRDbG9zZShzZWxmLCB4LCB5LCBlcHM9MWUtOSk6Ci0gICAgICAgICIiIlJldHVybiB0cnVlIGlmZiBjb21wbGV4ZXMgeCBhbmQgeSAiYXJlIGNsb3NlXCIiIiIKKyAgICAgICAgIiIiUmV0dXJuIHRydWUgaWZmIGNvbXBsZXhlcyB4IGFuZCB5ICJhcmUgY2xvc2UiLiIiIgogICAgICAgICBzZWxmLmFzc2VydENsb3NlQWJzKHgucmVhbCwgeS5yZWFsLCBlcHMpCiAgICAgICAgIHNlbGYuYXNzZXJ0Q2xvc2VBYnMoeC5pbWFnLCB5LmltYWcsIGVwcykKIApAQCAtMTA0LDYgKzEwNCwxMSBAQAogICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGNvbXBsZXguX190cnVlZGl2X18oMiswaiwgMSsxaiksIDEtMWopCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBjb21wbGV4Ll9fdHJ1ZWRpdl9fLCAxKzFqLCAwKzBqKQogCisgICAgICAgIGZvciBkZW5vbV9yZWFsLCBkZW5vbV9pbWFnIGluIFsoMCwgTkFOKSwgKE5BTiwgMCksIChOQU4sIE5BTildOgorICAgICAgICAgICAgeiA9IGNvbXBsZXgoMCwgMCkgLyBjb21wbGV4KGRlbm9tX3JlYWwsIGRlbm9tX2ltYWcpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNuYW4oei5yZWFsKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc25hbih6LmltYWcpKQorCiAgICAgZGVmIHRlc3RfZmxvb3JkaXYoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY29tcGxleC5fX2Zsb29yZGl2X18sIDMrMGosIDEuNSswaikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb21wbGV4Ll9fZmxvb3JkaXZfXywgMyswaiwgMCswaikKQEAgLTIyMCw2ICsyMjUsOCBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvbXBsZXgsIE9TKE5vbmUpKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvbXBsZXgsIE5TKE5vbmUpKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvbXBsZXgsIHt9KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvbXBsZXgsIE5TKDEuNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY29tcGxleCwgTlMoMSkpCiAKICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChjb21wbGV4KCIxKzEwaiIpLCAxKzEwaikKICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChjb21wbGV4KDEwKSwgMTArMGopCkBAIC0zMDEsNiArMzA4LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmbG9hdCwgNSszaikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY29tcGxleCwgIiIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY29tcGxleCwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUeXBlRXJyb3IsICJub3QgJ05vbmVUeXBlJyIsIGNvbXBsZXgsIE5vbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNvbXBsZXgsICJcMCIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNvbXBsZXgsICIzXDA5IikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb21wbGV4LCAiMSIsICIyIikKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY29uY3VycmVudF9mdXR1cmVzLnB5IGIvTGliL3Rlc3QvdGVzdF9jb25jdXJyZW50X2Z1dHVyZXMucHkKaW5kZXggMDRjNGMzNy4uYzc0YjJjYSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jb25jdXJyZW50X2Z1dHVyZXMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jb25jdXJyZW50X2Z1dHVyZXMucHkKQEAgLTE1LDYgKzE1LDcgQEAKIGltcG9ydCB0aHJlYWRpbmcKIGltcG9ydCB0aW1lCiBpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB3ZWFrcmVmCiAKIGZyb20gY29uY3VycmVudCBpbXBvcnQgZnV0dXJlcwogZnJvbSBjb25jdXJyZW50LmZ1dHVyZXMuX2Jhc2UgaW1wb3J0ICgKQEAgLTUyLDYgKzUzLDExIEBACiAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCiAKIAorY2xhc3MgTXlPYmplY3Qob2JqZWN0KToKKyAgICBkZWYgbXlfbWV0aG9kKHNlbGYpOgorICAgICAgICBwYXNzCisKKwogY2xhc3MgRXhlY3V0b3JNaXhpbjoKICAgICB3b3JrZXJfY291bnQgPSA1CiAKQEAgLTQwMyw2ICs0MDksMjIgQEAKICAgICAgICAgc2VsZi5leGVjdXRvci5tYXAoc3RyLCBbMl0gKiAoc2VsZi53b3JrZXJfY291bnQgKyAxKSkKICAgICAgICAgc2VsZi5leGVjdXRvci5zaHV0ZG93bigpCiAKKyAgICBAdGVzdC5zdXBwb3J0LmNweXRob25fb25seQorICAgIGRlZiB0ZXN0X25vX3N0YWxlX3JlZmVyZW5jZXMoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzE2Mjg0OiBjaGVjayB0aGF0IHRoZSBleGVjdXRvcnMgZG9uJ3QgdW5uZWNlc3NhcmlseSBoYW5nIG9udG8KKyAgICAgICAgIyByZWZlcmVuY2VzLgorICAgICAgICBteV9vYmplY3QgPSBNeU9iamVjdCgpCisgICAgICAgIG15X29iamVjdF9jb2xsZWN0ZWQgPSB0aHJlYWRpbmcuRXZlbnQoKQorICAgICAgICBteV9vYmplY3RfY2FsbGJhY2sgPSB3ZWFrcmVmLnJlZigKKyAgICAgICAgICAgIG15X29iamVjdCwgbGFtYmRhIG9iajogbXlfb2JqZWN0X2NvbGxlY3RlZC5zZXQoKSkKKyAgICAgICAgIyBEZWxpYmVyYXRlbHkgZGlzY2FyZGluZyB0aGUgZnV0dXJlLgorICAgICAgICBzZWxmLmV4ZWN1dG9yLnN1Ym1pdChteV9vYmplY3QubXlfbWV0aG9kKQorICAgICAgICBkZWwgbXlfb2JqZWN0CisKKyAgICAgICAgY29sbGVjdGVkID0gbXlfb2JqZWN0X2NvbGxlY3RlZC53YWl0KHRpbWVvdXQ9NS4wKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY29sbGVjdGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgIlN0YWxlIHJlZmVyZW5jZSBub3QgY29sbGVjdGVkIHdpdGhpbiB0aW1lb3V0LiIpCisKIAogY2xhc3MgVGhyZWFkUG9vbEV4ZWN1dG9yVGVzdChUaHJlYWRQb29sTWl4aW4sIEV4ZWN1dG9yVGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X21hcF9zdWJtaXRzX3dpdGhvdXRfaXRlcmF0aW9uKHNlbGYpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jb25maWdwYXJzZXIucHkgYi9MaWIvdGVzdC90ZXN0X2NvbmZpZ3BhcnNlci5weQppbmRleCA3OGJkMzE1Li4zYjAzNTAwIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2NvbmZpZ3BhcnNlci5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NvbmZpZ3BhcnNlci5weQpAQCAtODQ3LDcgKzg0Nyw4IEBACiAgICAgICAgICAgICJzb21ldGhpbmcgd2l0aCBsb3RzIG9mIGludGVycG9sYXRpb24gKDEwIHN0ZXBzKSIpCiAgICAgICAgIGUgPSBzZWxmLmdldF9lcnJvcihjZiwgY29uZmlncGFyc2VyLkludGVycG9sYXRpb25EZXB0aEVycm9yLCAiRm9vIiwgImJhcjExIikKICAgICAgICAgaWYgc2VsZi5pbnRlcnBvbGF0aW9uID09IGNvbmZpZ3BhcnNlci5fVU5TRVQ6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuYXJncywgKCJiYXIxMSIsICJGb28iLCAiJSh3aXRoMSlzIikpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuYXJncywgKCJiYXIxMSIsICJGb28iLAorICAgICAgICAgICAgICAgICJzb21ldGhpbmcgJSh3aXRoMTEpcyBsb3RzIG9mIGludGVycG9sYXRpb24gKDExIHN0ZXBzKSIpKQogICAgICAgICBlbGlmIGlzaW5zdGFuY2Uoc2VsZi5pbnRlcnBvbGF0aW9uLCBjb25maWdwYXJzZXIuTGVnYWN5SW50ZXJwb2xhdGlvbik6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuYXJncywgKCJiYXIxMSIsICJGb28iLAogICAgICAgICAgICAgICAgICJzb21ldGhpbmcgJSh3aXRoMTEpcyBsb3RzIG9mIGludGVycG9sYXRpb24gKDExIHN0ZXBzKSIpKQpAQCAtODYxLDcgKzg2Miw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5vcHRpb24sICJuYW1lIikKICAgICAgICAgaWYgc2VsZi5pbnRlcnBvbGF0aW9uID09IGNvbmZpZ3BhcnNlci5fVU5TRVQ6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuYXJncywgKCduYW1lJywgJ0ludGVycG9sYXRpb24gRXJyb3InLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJycsICdyZWZlcmVuY2UnKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICclKHJlZmVyZW5jZSlzJywgJ3JlZmVyZW5jZScpKQogICAgICAgICBlbGlmIGlzaW5zdGFuY2Uoc2VsZi5pbnRlcnBvbGF0aW9uLCBjb25maWdwYXJzZXIuTGVnYWN5SW50ZXJwb2xhdGlvbik6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuYXJncywgKCduYW1lJywgJ0ludGVycG9sYXRpb24gRXJyb3InLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyUocmVmZXJlbmNlKXMnLCAncmVmZXJlbmNlJykpCkBAIC0xMTc3LDcgKzExNzgsNyBAQAogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGV4Y2VwdGlvbl9jbGFzcykgYXMgY206CiAgICAgICAgICAgICBjZlsnaW50ZXJwb2xhdGVkJ11bJyR0cnlpbmcnXQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5yZWZlcmVuY2UsICdkb2xsYXJzOiR7c2ljaycpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLmFyZ3NbMl0sICd9JykgI3Jhd3ZhbAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5hcmdzWzJdLCAnJHtkb2xsYXJzOiR7c2lja319JykgI3Jhd3ZhbAogCiAgICAgZGVmIHRlc3RfY2FzZV9zZW5zaXRpdml0eV9iYXNpYyhzZWxmKToKICAgICAgICAgaW5pID0gdGV4dHdyYXAuZGVkZW50KCIiIgpAQCAtMTU5MSwxMDQgKzE1OTIsMTEzIEBACiAgICAgZGVmIHRlc3RfZXJyb3Ioc2VsZik6CiAgICAgICAgIGltcG9ydCBwaWNrbGUKICAgICAgICAgZTEgPSBjb25maWdwYXJzZXIuRXJyb3IoJ3ZhbHVlJykKLSAgICAgICAgcGlja2xlZCA9IHBpY2tsZS5kdW1wcyhlMSkKLSAgICAgICAgZTIgPSBwaWNrbGUubG9hZHMocGlja2xlZCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5tZXNzYWdlLCBlMi5tZXNzYWdlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZTEpLCByZXByKGUyKSkKKyAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICBwaWNrbGVkID0gcGlja2xlLmR1bXBzKGUxLCBwcm90bykKKyAgICAgICAgICAgIGUyID0gcGlja2xlLmxvYWRzKHBpY2tsZWQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLm1lc3NhZ2UsIGUyLm1lc3NhZ2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZTEpLCByZXByKGUyKSkKIAogICAgIGRlZiB0ZXN0X25vc2VjdGlvbmVycm9yKHNlbGYpOgogICAgICAgICBpbXBvcnQgcGlja2xlCiAgICAgICAgIGUxID0gY29uZmlncGFyc2VyLk5vU2VjdGlvbkVycm9yKCdzZWN0aW9uJykKLSAgICAgICAgcGlja2xlZCA9IHBpY2tsZS5kdW1wcyhlMSkKLSAgICAgICAgZTIgPSBwaWNrbGUubG9hZHMocGlja2xlZCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5tZXNzYWdlLCBlMi5tZXNzYWdlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLmFyZ3MsIGUyLmFyZ3MpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTEuc2VjdGlvbiwgZTIuc2VjdGlvbikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGUxKSwgcmVwcihlMikpCisgICAgICAgIGZvciBwcm90byBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgcGlja2xlZCA9IHBpY2tsZS5kdW1wcyhlMSwgcHJvdG8pCisgICAgICAgICAgICBlMiA9IHBpY2tsZS5sb2FkcyhwaWNrbGVkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5tZXNzYWdlLCBlMi5tZXNzYWdlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5hcmdzLCBlMi5hcmdzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5zZWN0aW9uLCBlMi5zZWN0aW9uKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGUxKSwgcmVwcihlMikpCiAKICAgICBkZWYgdGVzdF9ub29wdGlvbmVycm9yKHNlbGYpOgogICAgICAgICBpbXBvcnQgcGlja2xlCiAgICAgICAgIGUxID0gY29uZmlncGFyc2VyLk5vT3B0aW9uRXJyb3IoJ29wdGlvbicsICdzZWN0aW9uJykKLSAgICAgICAgcGlja2xlZCA9IHBpY2tsZS5kdW1wcyhlMSkKLSAgICAgICAgZTIgPSBwaWNrbGUubG9hZHMocGlja2xlZCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5tZXNzYWdlLCBlMi5tZXNzYWdlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLmFyZ3MsIGUyLmFyZ3MpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTEuc2VjdGlvbiwgZTIuc2VjdGlvbikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5vcHRpb24sIGUyLm9wdGlvbikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGUxKSwgcmVwcihlMikpCisgICAgICAgIGZvciBwcm90byBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgcGlja2xlZCA9IHBpY2tsZS5kdW1wcyhlMSwgcHJvdG8pCisgICAgICAgICAgICBlMiA9IHBpY2tsZS5sb2FkcyhwaWNrbGVkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5tZXNzYWdlLCBlMi5tZXNzYWdlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5hcmdzLCBlMi5hcmdzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5zZWN0aW9uLCBlMi5zZWN0aW9uKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5vcHRpb24sIGUyLm9wdGlvbikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihlMSksIHJlcHIoZTIpKQogCiAgICAgZGVmIHRlc3RfZHVwbGljYXRlc2VjdGlvbmVycm9yKHNlbGYpOgogICAgICAgICBpbXBvcnQgcGlja2xlCiAgICAgICAgIGUxID0gY29uZmlncGFyc2VyLkR1cGxpY2F0ZVNlY3Rpb25FcnJvcignc2VjdGlvbicsICdzb3VyY2UnLCAxMjMpCi0gICAgICAgIHBpY2tsZWQgPSBwaWNrbGUuZHVtcHMoZTEpCi0gICAgICAgIGUyID0gcGlja2xlLmxvYWRzKHBpY2tsZWQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTEubWVzc2FnZSwgZTIubWVzc2FnZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5hcmdzLCBlMi5hcmdzKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLnNlY3Rpb24sIGUyLnNlY3Rpb24pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTEuc291cmNlLCBlMi5zb3VyY2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTEubGluZW5vLCBlMi5saW5lbm8pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihlMSksIHJlcHIoZTIpKQorICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIHBpY2tsZWQgPSBwaWNrbGUuZHVtcHMoZTEsIHByb3RvKQorICAgICAgICAgICAgZTIgPSBwaWNrbGUubG9hZHMocGlja2xlZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTEubWVzc2FnZSwgZTIubWVzc2FnZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTEuYXJncywgZTIuYXJncykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTEuc2VjdGlvbiwgZTIuc2VjdGlvbikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTEuc291cmNlLCBlMi5zb3VyY2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLmxpbmVubywgZTIubGluZW5vKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGUxKSwgcmVwcihlMikpCiAKICAgICBkZWYgdGVzdF9kdXBsaWNhdGVvcHRpb25lcnJvcihzZWxmKToKICAgICAgICAgaW1wb3J0IHBpY2tsZQogICAgICAgICBlMSA9IGNvbmZpZ3BhcnNlci5EdXBsaWNhdGVPcHRpb25FcnJvcignc2VjdGlvbicsICdvcHRpb24nLCAnc291cmNlJywKICAgICAgICAgICAgIDEyMykKLSAgICAgICAgcGlja2xlZCA9IHBpY2tsZS5kdW1wcyhlMSkKLSAgICAgICAgZTIgPSBwaWNrbGUubG9hZHMocGlja2xlZCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5tZXNzYWdlLCBlMi5tZXNzYWdlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLmFyZ3MsIGUyLmFyZ3MpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTEuc2VjdGlvbiwgZTIuc2VjdGlvbikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5vcHRpb24sIGUyLm9wdGlvbikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5zb3VyY2UsIGUyLnNvdXJjZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5saW5lbm8sIGUyLmxpbmVubykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGUxKSwgcmVwcihlMikpCisgICAgICAgIGZvciBwcm90byBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgcGlja2xlZCA9IHBpY2tsZS5kdW1wcyhlMSwgcHJvdG8pCisgICAgICAgICAgICBlMiA9IHBpY2tsZS5sb2FkcyhwaWNrbGVkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5tZXNzYWdlLCBlMi5tZXNzYWdlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5hcmdzLCBlMi5hcmdzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5zZWN0aW9uLCBlMi5zZWN0aW9uKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5vcHRpb24sIGUyLm9wdGlvbikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTEuc291cmNlLCBlMi5zb3VyY2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLmxpbmVubywgZTIubGluZW5vKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGUxKSwgcmVwcihlMikpCiAKICAgICBkZWYgdGVzdF9pbnRlcnBvbGF0aW9uZXJyb3Ioc2VsZik6CiAgICAgICAgIGltcG9ydCBwaWNrbGUKICAgICAgICAgZTEgPSBjb25maWdwYXJzZXIuSW50ZXJwb2xhdGlvbkVycm9yKCdvcHRpb24nLCAnc2VjdGlvbicsICdtc2cnKQotICAgICAgICBwaWNrbGVkID0gcGlja2xlLmR1bXBzKGUxKQotICAgICAgICBlMiA9IHBpY2tsZS5sb2FkcyhwaWNrbGVkKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLm1lc3NhZ2UsIGUyLm1lc3NhZ2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTEuYXJncywgZTIuYXJncykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5zZWN0aW9uLCBlMi5zZWN0aW9uKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLm9wdGlvbiwgZTIub3B0aW9uKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZTEpLCByZXByKGUyKSkKKyAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICBwaWNrbGVkID0gcGlja2xlLmR1bXBzKGUxLCBwcm90bykKKyAgICAgICAgICAgIGUyID0gcGlja2xlLmxvYWRzKHBpY2tsZWQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLm1lc3NhZ2UsIGUyLm1lc3NhZ2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLmFyZ3MsIGUyLmFyZ3MpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLnNlY3Rpb24sIGUyLnNlY3Rpb24pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLm9wdGlvbiwgZTIub3B0aW9uKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGUxKSwgcmVwcihlMikpCiAKICAgICBkZWYgdGVzdF9pbnRlcnBvbGF0aW9ubWlzc2luZ29wdGlvbmVycm9yKHNlbGYpOgogICAgICAgICBpbXBvcnQgcGlja2xlCiAgICAgICAgIGUxID0gY29uZmlncGFyc2VyLkludGVycG9sYXRpb25NaXNzaW5nT3B0aW9uRXJyb3IoJ29wdGlvbicsICdzZWN0aW9uJywKICAgICAgICAgICAgICdyYXd2YWwnLCAncmVmZXJlbmNlJykKLSAgICAgICAgcGlja2xlZCA9IHBpY2tsZS5kdW1wcyhlMSkKLSAgICAgICAgZTIgPSBwaWNrbGUubG9hZHMocGlja2xlZCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5tZXNzYWdlLCBlMi5tZXNzYWdlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLmFyZ3MsIGUyLmFyZ3MpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTEuc2VjdGlvbiwgZTIuc2VjdGlvbikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5vcHRpb24sIGUyLm9wdGlvbikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5yZWZlcmVuY2UsIGUyLnJlZmVyZW5jZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGUxKSwgcmVwcihlMikpCisgICAgICAgIGZvciBwcm90byBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgcGlja2xlZCA9IHBpY2tsZS5kdW1wcyhlMSwgcHJvdG8pCisgICAgICAgICAgICBlMiA9IHBpY2tsZS5sb2FkcyhwaWNrbGVkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5tZXNzYWdlLCBlMi5tZXNzYWdlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5hcmdzLCBlMi5hcmdzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5zZWN0aW9uLCBlMi5zZWN0aW9uKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5vcHRpb24sIGUyLm9wdGlvbikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTEucmVmZXJlbmNlLCBlMi5yZWZlcmVuY2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZTEpLCByZXByKGUyKSkKIAogICAgIGRlZiB0ZXN0X2ludGVycG9sYXRpb25zeW50YXhlcnJvcihzZWxmKToKICAgICAgICAgaW1wb3J0IHBpY2tsZQogICAgICAgICBlMSA9IGNvbmZpZ3BhcnNlci5JbnRlcnBvbGF0aW9uU3ludGF4RXJyb3IoJ29wdGlvbicsICdzZWN0aW9uJywgJ21zZycpCi0gICAgICAgIHBpY2tsZWQgPSBwaWNrbGUuZHVtcHMoZTEpCi0gICAgICAgIGUyID0gcGlja2xlLmxvYWRzKHBpY2tsZWQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTEubWVzc2FnZSwgZTIubWVzc2FnZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5hcmdzLCBlMi5hcmdzKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLnNlY3Rpb24sIGUyLnNlY3Rpb24pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTEub3B0aW9uLCBlMi5vcHRpb24pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihlMSksIHJlcHIoZTIpKQorICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIHBpY2tsZWQgPSBwaWNrbGUuZHVtcHMoZTEsIHByb3RvKQorICAgICAgICAgICAgZTIgPSBwaWNrbGUubG9hZHMocGlja2xlZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTEubWVzc2FnZSwgZTIubWVzc2FnZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTEuYXJncywgZTIuYXJncykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTEuc2VjdGlvbiwgZTIuc2VjdGlvbikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTEub3B0aW9uLCBlMi5vcHRpb24pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZTEpLCByZXByKGUyKSkKIAogICAgIGRlZiB0ZXN0X2ludGVycG9sYXRpb25kZXB0aGVycm9yKHNlbGYpOgogICAgICAgICBpbXBvcnQgcGlja2xlCiAgICAgICAgIGUxID0gY29uZmlncGFyc2VyLkludGVycG9sYXRpb25EZXB0aEVycm9yKCdvcHRpb24nLCAnc2VjdGlvbicsCiAgICAgICAgICAgICAncmF3dmFsJykKLSAgICAgICAgcGlja2xlZCA9IHBpY2tsZS5kdW1wcyhlMSkKLSAgICAgICAgZTIgPSBwaWNrbGUubG9hZHMocGlja2xlZCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5tZXNzYWdlLCBlMi5tZXNzYWdlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLmFyZ3MsIGUyLmFyZ3MpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTEuc2VjdGlvbiwgZTIuc2VjdGlvbikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5vcHRpb24sIGUyLm9wdGlvbikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGUxKSwgcmVwcihlMikpCisgICAgICAgIGZvciBwcm90byBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgcGlja2xlZCA9IHBpY2tsZS5kdW1wcyhlMSwgcHJvdG8pCisgICAgICAgICAgICBlMiA9IHBpY2tsZS5sb2FkcyhwaWNrbGVkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5tZXNzYWdlLCBlMi5tZXNzYWdlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5hcmdzLCBlMi5hcmdzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5zZWN0aW9uLCBlMi5zZWN0aW9uKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5vcHRpb24sIGUyLm9wdGlvbikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihlMSksIHJlcHIoZTIpKQogCiAgICAgZGVmIHRlc3RfcGFyc2luZ2Vycm9yKHNlbGYpOgogICAgICAgICBpbXBvcnQgcGlja2xlCkBAIC0xNjk2LDM2ICsxNzA2LDM5IEBACiAgICAgICAgIGUxLmFwcGVuZCgxLCAnbGluZTEnKQogICAgICAgICBlMS5hcHBlbmQoMiwgJ2xpbmUyJykKICAgICAgICAgZTEuYXBwZW5kKDMsICdsaW5lMycpCi0gICAgICAgIHBpY2tsZWQgPSBwaWNrbGUuZHVtcHMoZTEpCi0gICAgICAgIGUyID0gcGlja2xlLmxvYWRzKHBpY2tsZWQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTEubWVzc2FnZSwgZTIubWVzc2FnZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5hcmdzLCBlMi5hcmdzKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLnNvdXJjZSwgZTIuc291cmNlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLmVycm9ycywgZTIuZXJyb3JzKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZTEpLCByZXByKGUyKSkKKyAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICBwaWNrbGVkID0gcGlja2xlLmR1bXBzKGUxLCBwcm90bykKKyAgICAgICAgICAgIGUyID0gcGlja2xlLmxvYWRzKHBpY2tsZWQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLm1lc3NhZ2UsIGUyLm1lc3NhZ2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLmFyZ3MsIGUyLmFyZ3MpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLnNvdXJjZSwgZTIuc291cmNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5lcnJvcnMsIGUyLmVycm9ycykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihlMSksIHJlcHIoZTIpKQogICAgICAgICBlMSA9IGNvbmZpZ3BhcnNlci5QYXJzaW5nRXJyb3IoZmlsZW5hbWU9J2ZpbGVuYW1lJykKICAgICAgICAgZTEuYXBwZW5kKDEsICdsaW5lMScpCiAgICAgICAgIGUxLmFwcGVuZCgyLCAnbGluZTInKQogICAgICAgICBlMS5hcHBlbmQoMywgJ2xpbmUzJykKLSAgICAgICAgcGlja2xlZCA9IHBpY2tsZS5kdW1wcyhlMSkKLSAgICAgICAgZTIgPSBwaWNrbGUubG9hZHMocGlja2xlZCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5tZXNzYWdlLCBlMi5tZXNzYWdlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLmFyZ3MsIGUyLmFyZ3MpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTEuc291cmNlLCBlMi5zb3VyY2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTEuZXJyb3JzLCBlMi5lcnJvcnMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihlMSksIHJlcHIoZTIpKQorICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIHBpY2tsZWQgPSBwaWNrbGUuZHVtcHMoZTEsIHByb3RvKQorICAgICAgICAgICAgZTIgPSBwaWNrbGUubG9hZHMocGlja2xlZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTEubWVzc2FnZSwgZTIubWVzc2FnZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTEuYXJncywgZTIuYXJncykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTEuc291cmNlLCBlMi5zb3VyY2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLmVycm9ycywgZTIuZXJyb3JzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGUxKSwgcmVwcihlMikpCiAKICAgICBkZWYgdGVzdF9taXNzaW5nc2VjdGlvbmhlYWRlcmVycm9yKHNlbGYpOgogICAgICAgICBpbXBvcnQgcGlja2xlCiAgICAgICAgIGUxID0gY29uZmlncGFyc2VyLk1pc3NpbmdTZWN0aW9uSGVhZGVyRXJyb3IoJ2ZpbGVuYW1lJywgMTIzLCAnbGluZScpCi0gICAgICAgIHBpY2tsZWQgPSBwaWNrbGUuZHVtcHMoZTEpCi0gICAgICAgIGUyID0gcGlja2xlLmxvYWRzKHBpY2tsZWQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTEubWVzc2FnZSwgZTIubWVzc2FnZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5hcmdzLCBlMi5hcmdzKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLmxpbmUsIGUyLmxpbmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTEuc291cmNlLCBlMi5zb3VyY2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTEubGluZW5vLCBlMi5saW5lbm8pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihlMSksIHJlcHIoZTIpKQorICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIHBpY2tsZWQgPSBwaWNrbGUuZHVtcHMoZTEsIHByb3RvKQorICAgICAgICAgICAgZTIgPSBwaWNrbGUubG9hZHMocGlja2xlZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTEubWVzc2FnZSwgZTIubWVzc2FnZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTEuYXJncywgZTIuYXJncykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTEubGluZSwgZTIubGluZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTEuc291cmNlLCBlMi5zb3VyY2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLmxpbmVubywgZTIubGluZW5vKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGUxKSwgcmVwcihlMikpCiAKIAogY2xhc3MgSW5saW5lQ29tbWVudFN0cmlwcGluZ1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY29udGV4dGxpYi5weSBiL0xpYi90ZXN0L3Rlc3RfY29udGV4dGxpYi5weQppbmRleCBlMzhkMDQzLi4yNjY5NjUxIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2NvbnRleHRsaWIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jb250ZXh0bGliLnB5CkBAIC0xLDUgKzEsNiBAQAogIiIiVW5pdCB0ZXN0cyBmb3IgY29udGV4dGxpYi5weSwgYW5kIG90aGVyIGNvbnRleHQgbWFuYWdlcnMuIiIiCiAKK2ltcG9ydCBpbwogaW1wb3J0IHN5cwogaW1wb3J0IHRlbXBmaWxlCiBpbXBvcnQgdW5pdHRlc3QKQEAgLTEwMCwxNSArMTAxLDMzIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmF6Ll9fbmFtZV9fLCdiYXonKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhei5mb28sICdiYXInKQogCi0gICAgQHVuaXR0ZXN0LnNraXBJZihzeXMuZmxhZ3Mub3B0aW1pemUgPj0gMiwKLSAgICAgICAgICAgICAgICAgICAgICJEb2NzdHJpbmdzIGFyZSBvbWl0dGVkIHdpdGggLU8yIGFuZCBhYm92ZSIpCisgICAgQHN1cHBvcnQucmVxdWlyZXNfZG9jc3RyaW5ncwogICAgIGRlZiB0ZXN0X2NvbnRleHRtYW5hZ2VyX2RvY19hdHRyaWIoc2VsZik6CiAgICAgICAgIGJheiA9IHNlbGYuX2NyZWF0ZV9jb250ZXh0bWFuYWdlcl9hdHRyaWJzKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXouX19kb2NfXywgIldoZWUhIikKIAorICAgIEBzdXBwb3J0LnJlcXVpcmVzX2RvY3N0cmluZ3MKKyAgICBkZWYgdGVzdF9pbnN0YW5jZV9kb2NzdHJpbmdfZ2l2ZW5fY21fZG9jc3RyaW5nKHNlbGYpOgorICAgICAgICBiYXogPSBzZWxmLl9jcmVhdGVfY29udGV4dG1hbmFnZXJfYXR0cmlicygpKE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmF6Ll9fZG9jX18sICJXaGVlISIpCisKKyAgICBkZWYgdGVzdF9rZXl3b3JkcyhzZWxmKToKKyAgICAgICAgIyBFbnN1cmUgbm8ga2V5d29yZCBhcmd1bWVudHMgYXJlIGluaGliaXRlZAorICAgICAgICBAY29udGV4dG1hbmFnZXIKKyAgICAgICAgZGVmIHdvb2hvbyhzZWxmLCBmdW5jLCBhcmdzLCBrd2RzKToKKyAgICAgICAgICAgIHlpZWxkIChzZWxmLCBmdW5jLCBhcmdzLCBrd2RzKQorICAgICAgICB3aXRoIHdvb2hvbyhzZWxmPTExLCBmdW5jPTIyLCBhcmdzPTMzLCBrd2RzPTQ0KSBhcyB0YXJnZXQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRhcmdldCwgKDExLCAyMiwgMzMsIDQ0KSkKKworCiBjbGFzcyBDbG9zaW5nVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogCi0gICAgIyBYWFggVGhpcyBuZWVkcyBtb3JlIHdvcmsKKyAgICBAc3VwcG9ydC5yZXF1aXJlc19kb2NzdHJpbmdzCisgICAgZGVmIHRlc3RfaW5zdGFuY2VfZG9jcyhzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAxOTMzMDogZW5zdXJlIGNvbnRleHQgbWFuYWdlciBpbnN0YW5jZXMgaGF2ZSBnb29kIGRvY3N0cmluZ3MKKyAgICAgICAgY21fZG9jc3RyaW5nID0gY2xvc2luZy5fX2RvY19fCisgICAgICAgIG9iaiA9IGNsb3NpbmcoTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmouX19kb2NfXywgY21fZG9jc3RyaW5nKQogCiAgICAgZGVmIHRlc3RfY2xvc2luZyhzZWxmKToKICAgICAgICAgc3RhdGUgPSBbXQpAQCAtMjA0LDYgKzIyMyw3IEBACiAKIAogY2xhc3MgbXljb250ZXh0KENvbnRleHREZWNvcmF0b3IpOgorICAgICIiIkV4YW1wbGUgZGVjb3JhdGlvbi1jb21wYXRpYmxlIGNvbnRleHQgbWFuYWdlciBmb3IgdGVzdGluZyIiIgogICAgIHN0YXJ0ZWQgPSBGYWxzZQogICAgIGV4YyA9IE5vbmUKICAgICBjYXRjaCA9IEZhbHNlCkBAIC0yMTksNiArMjM5LDEzIEBACiAKIGNsYXNzIFRlc3RDb250ZXh0RGVjb3JhdG9yKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAorICAgIEBzdXBwb3J0LnJlcXVpcmVzX2RvY3N0cmluZ3MKKyAgICBkZWYgdGVzdF9pbnN0YW5jZV9kb2NzKHNlbGYpOgorICAgICAgICAjIElzc3VlIDE5MzMwOiBlbnN1cmUgY29udGV4dCBtYW5hZ2VyIGluc3RhbmNlcyBoYXZlIGdvb2QgZG9jc3RyaW5ncworICAgICAgICBjbV9kb2NzdHJpbmcgPSBteWNvbnRleHQuX19kb2NfXworICAgICAgICBvYmogPSBteWNvbnRleHQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iai5fX2RvY19fLCBjbV9kb2NzdHJpbmcpCisKICAgICBkZWYgdGVzdF9jb250ZXh0ZGVjb3JhdG9yKHNlbGYpOgogICAgICAgICBjb250ZXh0ID0gbXljb250ZXh0KCkKICAgICAgICAgd2l0aCBjb250ZXh0IGFzIHJlc3VsdDoKQEAgLTM3Miw2ICszOTksMTMgQEAKIAogY2xhc3MgVGVzdEV4aXRTdGFjayh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKKyAgICBAc3VwcG9ydC5yZXF1aXJlc19kb2NzdHJpbmdzCisgICAgZGVmIHRlc3RfaW5zdGFuY2VfZG9jcyhzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAxOTMzMDogZW5zdXJlIGNvbnRleHQgbWFuYWdlciBpbnN0YW5jZXMgaGF2ZSBnb29kIGRvY3N0cmluZ3MKKyAgICAgICAgY21fZG9jc3RyaW5nID0gRXhpdFN0YWNrLl9fZG9jX18KKyAgICAgICAgb2JqID0gRXhpdFN0YWNrKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmouX19kb2NfXywgY21fZG9jc3RyaW5nKQorCiAgICAgZGVmIHRlc3Rfbm9fcmVzb3VyY2VzKHNlbGYpOgogICAgICAgICB3aXRoIEV4aXRTdGFjaygpOgogICAgICAgICAgICAgcGFzcwpAQCAtNjkyLDEwICs3MjYsMTEzIEBACiAgICAgICAgIHN0YWNrLnB1c2goY20pCiAgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3RhY2suX2V4aXRfY2FsbGJhY2tzWy0xXSwgY20pCiAKK2NsYXNzIFRlc3RSZWRpcmVjdFN0ZG91dCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKLSMgVGhpcyBpcyBuZWVkZWQgdG8gbWFrZSB0aGUgdGVzdCBhY3R1YWxseSBydW4gdW5kZXIgcmVncnRlc3QucHkhCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoX19uYW1lX18pCisgICAgQHN1cHBvcnQucmVxdWlyZXNfZG9jc3RyaW5ncworICAgIGRlZiB0ZXN0X2luc3RhbmNlX2RvY3Moc2VsZik6CisgICAgICAgICMgSXNzdWUgMTkzMzA6IGVuc3VyZSBjb250ZXh0IG1hbmFnZXIgaW5zdGFuY2VzIGhhdmUgZ29vZCBkb2NzdHJpbmdzCisgICAgICAgIGNtX2RvY3N0cmluZyA9IHJlZGlyZWN0X3N0ZG91dC5fX2RvY19fCisgICAgICAgIG9iaiA9IHJlZGlyZWN0X3N0ZG91dChOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iai5fX2RvY19fLCBjbV9kb2NzdHJpbmcpCisKKyAgICBkZWYgdGVzdF9ub19yZWRpcmVjdF9pbl9pbml0KHNlbGYpOgorICAgICAgICBvcmlnX3N0ZG91dCA9IHN5cy5zdGRvdXQKKyAgICAgICAgcmVkaXJlY3Rfc3Rkb3V0KE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3lzLnN0ZG91dCwgb3JpZ19zdGRvdXQpCisKKyAgICBkZWYgdGVzdF9yZWRpcmVjdF90b19zdHJpbmdfaW8oc2VsZik6CisgICAgICAgIGYgPSBpby5TdHJpbmdJTygpCisgICAgICAgIG1zZyA9ICJDb25zaWRlciBhbiBBUEkgbGlrZSBoZWxwKCksIHdoaWNoIHByaW50cyBkaXJlY3RseSB0byBzdGRvdXQiCisgICAgICAgIG9yaWdfc3Rkb3V0ID0gc3lzLnN0ZG91dAorICAgICAgICB3aXRoIHJlZGlyZWN0X3N0ZG91dChmKToKKyAgICAgICAgICAgIHByaW50KG1zZykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzeXMuc3Rkb3V0LCBvcmlnX3N0ZG91dCkKKyAgICAgICAgcyA9IGYuZ2V0dmFsdWUoKS5zdHJpcCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgbXNnKQorCisgICAgZGVmIHRlc3RfZW50ZXJfcmVzdWx0X2lzX3RhcmdldChzZWxmKToKKyAgICAgICAgZiA9IGlvLlN0cmluZ0lPKCkKKyAgICAgICAgd2l0aCByZWRpcmVjdF9zdGRvdXQoZikgYXMgZW50ZXJfcmVzdWx0OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhlbnRlcl9yZXN1bHQsIGYpCisKKyAgICBkZWYgdGVzdF9jbV9pc19yZXVzYWJsZShzZWxmKToKKyAgICAgICAgZiA9IGlvLlN0cmluZ0lPKCkKKyAgICAgICAgd3JpdGVfdG9fZiA9IHJlZGlyZWN0X3N0ZG91dChmKQorICAgICAgICBvcmlnX3N0ZG91dCA9IHN5cy5zdGRvdXQKKyAgICAgICAgd2l0aCB3cml0ZV90b19mOgorICAgICAgICAgICAgcHJpbnQoIkhlbGxvIiwgZW5kPSIgIikKKyAgICAgICAgd2l0aCB3cml0ZV90b19mOgorICAgICAgICAgICAgcHJpbnQoIldvcmxkISIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3lzLnN0ZG91dCwgb3JpZ19zdGRvdXQpCisgICAgICAgIHMgPSBmLmdldHZhbHVlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCAiSGVsbG8gV29ybGQhXG4iKQorCisgICAgZGVmIHRlc3RfY21faXNfcmVlbnRyYW50KHNlbGYpOgorICAgICAgICBmID0gaW8uU3RyaW5nSU8oKQorICAgICAgICB3cml0ZV90b19mID0gcmVkaXJlY3Rfc3Rkb3V0KGYpCisgICAgICAgIG9yaWdfc3Rkb3V0ID0gc3lzLnN0ZG91dAorICAgICAgICB3aXRoIHdyaXRlX3RvX2Y6CisgICAgICAgICAgICBwcmludCgiSGVsbG8iLCBlbmQ9IiAiKQorICAgICAgICAgICAgd2l0aCB3cml0ZV90b19mOgorICAgICAgICAgICAgICAgIHByaW50KCJXb3JsZCEiKQorICAgICAgICBzZWxmLmFzc2VydElzKHN5cy5zdGRvdXQsIG9yaWdfc3Rkb3V0KQorICAgICAgICBzID0gZi5nZXR2YWx1ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgIkhlbGxvIFdvcmxkIVxuIikKKworCitjbGFzcyBUZXN0U3VwcHJlc3ModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgQHN1cHBvcnQucmVxdWlyZXNfZG9jc3RyaW5ncworICAgIGRlZiB0ZXN0X2luc3RhbmNlX2RvY3Moc2VsZik6CisgICAgICAgICMgSXNzdWUgMTkzMzA6IGVuc3VyZSBjb250ZXh0IG1hbmFnZXIgaW5zdGFuY2VzIGhhdmUgZ29vZCBkb2NzdHJpbmdzCisgICAgICAgIGNtX2RvY3N0cmluZyA9IHN1cHByZXNzLl9fZG9jX18KKyAgICAgICAgb2JqID0gc3VwcHJlc3MoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iai5fX2RvY19fLCBjbV9kb2NzdHJpbmcpCisKKyAgICBkZWYgdGVzdF9ub19yZXN1bHRfZnJvbV9lbnRlcihzZWxmKToKKyAgICAgICAgd2l0aCBzdXBwcmVzcyhWYWx1ZUVycm9yKSBhcyBlbnRlcl9yZXN1bHQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShlbnRlcl9yZXN1bHQpCisKKyAgICBkZWYgdGVzdF9ub19leGNlcHRpb24oc2VsZik6CisgICAgICAgIHdpdGggc3VwcHJlc3MoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvdygyLCA1KSwgMzIpCisKKyAgICBkZWYgdGVzdF9leGFjdF9leGNlcHRpb24oc2VsZik6CisgICAgICAgIHdpdGggc3VwcHJlc3MoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGxlbig1KQorCisgICAgZGVmIHRlc3RfZXhjZXB0aW9uX2hpZXJhcmNoeShzZWxmKToKKyAgICAgICAgd2l0aCBzdXBwcmVzcyhMb29rdXBFcnJvcik6CisgICAgICAgICAgICAnSGVsbG8nWzUwXQorCisgICAgZGVmIHRlc3Rfb3RoZXJfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yKToKKyAgICAgICAgICAgIHdpdGggc3VwcHJlc3MoVHlwZUVycm9yKToKKyAgICAgICAgICAgICAgICAxLzAKKworICAgIGRlZiB0ZXN0X25vX2FyZ3Moc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IpOgorICAgICAgICAgICAgd2l0aCBzdXBwcmVzcygpOgorICAgICAgICAgICAgICAgIDEvMAorCisgICAgZGVmIHRlc3RfbXVsdGlwbGVfZXhjZXB0aW9uX2FyZ3Moc2VsZik6CisgICAgICAgIHdpdGggc3VwcHJlc3MoWmVyb0RpdmlzaW9uRXJyb3IsIFR5cGVFcnJvcik6CisgICAgICAgICAgICAxLzAKKyAgICAgICAgd2l0aCBzdXBwcmVzcyhaZXJvRGl2aXNpb25FcnJvciwgVHlwZUVycm9yKToKKyAgICAgICAgICAgIGxlbig1KQorCisgICAgZGVmIHRlc3RfY21faXNfcmVlbnRyYW50KHNlbGYpOgorICAgICAgICBpZ25vcmVfZXhjZXB0aW9ucyA9IHN1cHByZXNzKEV4Y2VwdGlvbikKKyAgICAgICAgd2l0aCBpZ25vcmVfZXhjZXB0aW9uczoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgd2l0aCBpZ25vcmVfZXhjZXB0aW9uczoKKyAgICAgICAgICAgIGxlbig1KQorICAgICAgICB3aXRoIGlnbm9yZV9leGNlcHRpb25zOgorICAgICAgICAgICAgd2l0aCBpZ25vcmVfZXhjZXB0aW9uczogIyBDaGVjayBuZXN0ZWQgdXNhZ2UKKyAgICAgICAgICAgICAgICBsZW4oNSkKKyAgICAgICAgICAgIG91dGVyX2NvbnRpbnVlZCA9IFRydWUKKyAgICAgICAgICAgIDEvMAorICAgICAgICBzZWxmLmFzc2VydFRydWUob3V0ZXJfY29udGludWVkKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2NvcHkucHkgYi9MaWIvdGVzdC90ZXN0X2NvcHkucHkKaW5kZXggZWI4ZDE4Yy4uMGM1MzU0YyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jb3B5LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY29weS5weQpAQCAtMTgwLDYgKzE4MCw5IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuZm9vID09IG90aGVyLmZvbwogICAgICAgICB4ID0gQyg0MikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb3B5LmNvcHkoeCksIHgpCisgICAgICAgICMgU3RhdGUgd2l0aCBib29sZWFuIHZhbHVlIGlzIGZhbHNlIChpc3N1ZSAjMjU3MTgpCisgICAgICAgIHggPSBDKDAuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb3B5LmNvcHkoeCksIHgpCiAKICAgICAjIFRoZSBkZWVwY29weSgpIG1ldGhvZAogCkBAIC00NDgsNiArNDUxLDEyIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeSwgeCkKICAgICAgICAgc2VsZi5hc3NlcnRJc05vdCh5LCB4KQogICAgICAgICBzZWxmLmFzc2VydElzTm90KHkuZm9vLCB4LmZvbykKKyAgICAgICAgIyBTdGF0ZSB3aXRoIGJvb2xlYW4gdmFsdWUgaXMgZmFsc2UgKGlzc3VlICMyNTcxOCkKKyAgICAgICAgeCA9IEMoW10pCisgICAgICAgIHkgPSBjb3B5LmRlZXBjb3B5KHgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeSwgeCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdCh5LCB4KQorICAgICAgICBzZWxmLmFzc2VydElzTm90KHkuZm9vLCB4LmZvbykKIAogICAgIGRlZiB0ZXN0X2RlZXBjb3B5X3JlZmxleGl2ZV9pbnN0KHNlbGYpOgogICAgICAgICBjbGFzcyBDOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jcHJvZmlsZS5weSBiL0xpYi90ZXN0L3Rlc3RfY3Byb2ZpbGUucHkKaW5kZXggNTY3NjY2OC4uY2U1ZDI3ZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jcHJvZmlsZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2Nwcm9maWxlLnB5CkBAIC02LDkgKzYsMTEgQEAKICMgcmlwIG9mZiBhbGwgaW50ZXJlc3Rpbmcgc3R1ZmYgZnJvbSB0ZXN0X3Byb2ZpbGUKIGltcG9ydCBjUHJvZmlsZQogZnJvbSB0ZXN0LnRlc3RfcHJvZmlsZSBpbXBvcnQgUHJvZmlsZVRlc3QsIHJlZ2VuZXJhdGVfZXhwZWN0ZWRfb3V0cHV0Citmcm9tIHRlc3QucHJvZmlsZWUgaW1wb3J0IHRlc3RmdW5jCiAKIGNsYXNzIENQcm9maWxlVGVzdChQcm9maWxlVGVzdCk6CiAgICAgcHJvZmlsZXJjbGFzcyA9IGNQcm9maWxlLlByb2ZpbGUKKyAgICBwcm9maWxlcm1vZHVsZSA9IGNQcm9maWxlCiAgICAgZXhwZWN0ZWRfbWF4X291dHB1dCA9ICJ7YnVpbHQtaW4gbWV0aG9kIG1heH0iCiAKICAgICBkZWYgZ2V0X2V4cGVjdGVkX291dHB1dChzZWxmKToKQEAgLTI3LDYgKzI5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgb2JqLmVuYWJsZSgpCiAgICAgICAgICAgICAgICAgICAgIG9iaiA9IF9sc3Byb2YuUHJvZmlsZXIoMSkKICAgICAgICAgICAgICAgICAgICAgb2JqLmRpc2FibGUoKQorICAgICAgICAgICAgICAgICAgICBvYmouY2xlYXIoKQogICAgICAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIgPSBvcmlnX3N0ZGVycgogICAgICAgICBmaW5hbGx5OgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jcnlwdC5weSBiL0xpYi90ZXN0L3Rlc3RfY3J5cHQucHkKaW5kZXggY2ZiNzM0MS4uNjI0ZDcwMiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jcnlwdC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NyeXB0LnB5CkBAIC0xLDExICsxLDcgQEAKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogaW1wb3J0IHVuaXR0ZXN0CiAKLWRlZiBzZXRVcE1vZHVsZSgpOgotICAgICMgdGhpcyBpbXBvcnQgd2lsbCByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCBpZiBfY3J5cHQgZG9lc24ndCBleGlzdCwKLSAgICAjIHNvIGl0IGhhcyB0byBiZSBkb25lIGluIHNldFVwTW9kdWxlIGZvciB0ZXN0IGRpc2NvdmVyeSB0byB3b3JrCi0gICAgZ2xvYmFsIGNyeXB0Ci0gICAgY3J5cHQgPSBzdXBwb3J0LmltcG9ydF9tb2R1bGUoJ2NyeXB0JykKK2NyeXB0ID0gc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCdjcnlwdCcpCiAKIGNsYXNzIENyeXB0VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2Nzdi5weSBiL0xpYi90ZXN0L3Rlc3RfY3N2LnB5CmluZGV4IDgzZjhjYjMuLjY1NDQ5YWUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY3N2LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY3N2LnB5CkBAIC0xMjQsMjQgKzEyNCwzMSBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlb2JqLnJlYWQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ICsgd3JpdGVyLmRpYWxlY3QubGluZXRlcm1pbmF0b3IpCiAKKyAgICBkZWYgX3dyaXRlX2Vycm9yX3Rlc3Qoc2VsZiwgZXhjLCBmaWVsZHMsICoqa3dhcmdzKToKKyAgICAgICAgd2l0aCBUZW1wb3JhcnlGaWxlKCJ3KyIsIG5ld2xpbmU9JycpIGFzIGZpbGVvYmo6CisgICAgICAgICAgICB3cml0ZXIgPSBjc3Yud3JpdGVyKGZpbGVvYmosICoqa3dhcmdzKQorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhleGMpOgorICAgICAgICAgICAgICAgIHdyaXRlci53cml0ZXJvdyhmaWVsZHMpCisgICAgICAgICAgICBmaWxlb2JqLnNlZWsoMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZW9iai5yZWFkKCksICcnKQorCiAgICAgZGVmIHRlc3Rfd3JpdGVfYXJnX3ZhbGlkKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhjc3YuRXJyb3IsIHNlbGYuX3dyaXRlX3Rlc3QsIE5vbmUsICcnKQorICAgICAgICBzZWxmLl93cml0ZV9lcnJvcl90ZXN0KGNzdi5FcnJvciwgTm9uZSkKICAgICAgICAgc2VsZi5fd3JpdGVfdGVzdCgoKSwgJycpCiAgICAgICAgIHNlbGYuX3dyaXRlX3Rlc3QoW05vbmVdLCAnIiInKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhjc3YuRXJyb3IsIHNlbGYuX3dyaXRlX3Rlc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFtOb25lXSwgTm9uZSwgcXVvdGluZyA9IGNzdi5RVU9URV9OT05FKQorICAgICAgICBzZWxmLl93cml0ZV9lcnJvcl90ZXN0KGNzdi5FcnJvciwgW05vbmVdLCBxdW90aW5nID0gY3N2LlFVT1RFX05PTkUpCiAgICAgICAgICMgQ2hlY2sgdGhhdCBleGNlcHRpb25zIGFyZSBwYXNzZWQgdXAgdGhlIGNoYWluCiAgICAgICAgIGNsYXNzIEJhZExpc3Q6CiAgICAgICAgICAgICBkZWYgX19sZW5fXyhzZWxmKToKICAgICAgICAgICAgICAgICByZXR1cm4gMTA7CiAgICAgICAgICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaSk6CiAgICAgICAgICAgICAgICAgaWYgaSA+IDI6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIElPRXJyb3IKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgc2VsZi5fd3JpdGVfdGVzdCwgQmFkTGlzdCgpLCAnJykKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcgorICAgICAgICBzZWxmLl93cml0ZV9lcnJvcl90ZXN0KE9TRXJyb3IsIEJhZExpc3QoKSkKICAgICAgICAgY2xhc3MgQmFkSXRlbToKICAgICAgICAgICAgIGRlZiBfX3N0cl9fKHNlbGYpOgotICAgICAgICAgICAgICAgIHJhaXNlIElPRXJyb3IKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgc2VsZi5fd3JpdGVfdGVzdCwgW0JhZEl0ZW0oKV0sICcnKQorICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IKKyAgICAgICAgc2VsZi5fd3JpdGVfZXJyb3JfdGVzdChPU0Vycm9yLCBbQmFkSXRlbSgpXSkKIAogICAgIGRlZiB0ZXN0X3dyaXRlX2JpZ2ZpZWxkKHNlbGYpOgogICAgICAgICAjIFRoaXMgZXhlcmNpc2VzIHRoZSBidWZmZXIgcmVhbGxvYyBmdW5jdGlvbmFsaXR5CkBAIC0xNTEsMTAgKzE1OCw4IEBACiAKICAgICBkZWYgdGVzdF93cml0ZV9xdW90aW5nKHNlbGYpOgogICAgICAgICBzZWxmLl93cml0ZV90ZXN0KFsnYScsMSwncCxxJ10sICdhLDEsInAscSInKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhjc3YuRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3dyaXRlX3Rlc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFsnYScsMSwncCxxJ10sICdhLDEscCxxJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcXVvdGluZyA9IGNzdi5RVU9URV9OT05FKQorICAgICAgICBzZWxmLl93cml0ZV9lcnJvcl90ZXN0KGNzdi5FcnJvciwgWydhJywxLCdwLHEnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdW90aW5nID0gY3N2LlFVT1RFX05PTkUpCiAgICAgICAgIHNlbGYuX3dyaXRlX3Rlc3QoWydhJywxLCdwLHEnXSwgJ2EsMSwicCxxIicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgcXVvdGluZyA9IGNzdi5RVU9URV9NSU5JTUFMKQogICAgICAgICBzZWxmLl93cml0ZV90ZXN0KFsnYScsMSwncCxxJ10sICciYSIsMSwicCxxIicsCkBAIC0xNjcsMTAgKzE3Miw4IEBACiAgICAgZGVmIHRlc3Rfd3JpdGVfZXNjYXBlKHNlbGYpOgogICAgICAgICBzZWxmLl93cml0ZV90ZXN0KFsnYScsMSwncCxxJ10sICdhLDEsInAscSInLAogICAgICAgICAgICAgICAgICAgICAgICAgIGVzY2FwZWNoYXI9J1xcJykKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoY3N2LkVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl93cml0ZV90ZXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICBbJ2EnLDEsJ3AsInEiJ10sICdhLDEsInAsXFwicVxcIiInLAotICAgICAgICAgICAgICAgICAgICAgICAgICBlc2NhcGVjaGFyPU5vbmUsIGRvdWJsZXF1b3RlPUZhbHNlKQorICAgICAgICBzZWxmLl93cml0ZV9lcnJvcl90ZXN0KGNzdi5FcnJvciwgWydhJywxLCdwLCJxIiddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzY2FwZWNoYXI9Tm9uZSwgZG91YmxlcXVvdGU9RmFsc2UpCiAgICAgICAgIHNlbGYuX3dyaXRlX3Rlc3QoWydhJywxLCdwLCJxIiddLCAnYSwxLCJwLFxcInFcXCIiJywKICAgICAgICAgICAgICAgICAgICAgICAgICBlc2NhcGVjaGFyPSdcXCcsIGRvdWJsZXF1b3RlID0gRmFsc2UpCiAgICAgICAgIHNlbGYuX3dyaXRlX3Rlc3QoWyciJ10sICciIiIiJywKQEAgLTE4Niw5ICsxODksOSBAQAogICAgIGRlZiB0ZXN0X3dyaXRlcm93cyhzZWxmKToKICAgICAgICAgY2xhc3MgQnJva2VuRmlsZToKICAgICAgICAgICAgIGRlZiB3cml0ZShzZWxmLCBidWYpOgotICAgICAgICAgICAgICAgIHJhaXNlIElPRXJyb3IKKyAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yCiAgICAgICAgIHdyaXRlciA9IGNzdi53cml0ZXIoQnJva2VuRmlsZSgpKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCB3cml0ZXIud3JpdGVyb3dzLCBbWydhJ11dKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCB3cml0ZXIud3JpdGVyb3dzLCBbWydhJ11dKQogCiAgICAgICAgIHdpdGggVGVtcG9yYXJ5RmlsZSgidysiLCBuZXdsaW5lPScnKSBhcyBmaWxlb2JqOgogICAgICAgICAgICAgd3JpdGVyID0gY3N2LndyaXRlcihmaWxlb2JqKQpAQCAtMzA4LDYgKzMxMSwxNSBAQAogICAgICAgICAgICAgZm9yIGksIHJvdyBpbiBlbnVtZXJhdGUoY3N2LnJlYWRlcihmaWxlb2JqKSk6CiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3csIHJvd3NbaV0pCiAKKyAgICBkZWYgdGVzdF9yb3VuZHRyaXBfZXNjYXBlZF91bnF1b3RlZF9uZXdsaW5lcyhzZWxmKToKKyAgICAgICAgd2l0aCBUZW1wb3JhcnlGaWxlKCJ3KyIsIG5ld2xpbmU9JycpIGFzIGZpbGVvYmo6CisgICAgICAgICAgICB3cml0ZXIgPSBjc3Yud3JpdGVyKGZpbGVvYmoscXVvdGluZz1jc3YuUVVPVEVfTk9ORSxlc2NhcGVjaGFyPSJcXCIpCisgICAgICAgICAgICByb3dzID0gW1snYVxuYicsJ2InXSxbJ2MnLCd4XHJcbmQnXV0KKyAgICAgICAgICAgIHdyaXRlci53cml0ZXJvd3Mocm93cykKKyAgICAgICAgICAgIGZpbGVvYmouc2VlaygwKQorICAgICAgICAgICAgZm9yIGksIHJvdyBpbiBlbnVtZXJhdGUoY3N2LnJlYWRlcihmaWxlb2JqLHF1b3Rpbmc9Y3N2LlFVT1RFX05PTkUsZXNjYXBlY2hhcj0iXFwiKSk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3cscm93c1tpXSkKKwogY2xhc3MgVGVzdERpYWxlY3RSZWdpc3RyeSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RfcmVnaXN0cnlfYmFkYXJncyhzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjc3YubGlzdF9kaWFsZWN0cywgTm9uZSkKQEAgLTgzNiwxMCArODQ4LDExIEBACiAgICAgICAgICAgICBkID0gbXlkaWFsZWN0KCkKIAogICAgICAgICBmb3IgZmllbGRfbmFtZSBpbiAoImRlbGltaXRlciIsICJlc2NhcGVjaGFyIiwgInF1b3RlY2hhciIpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoY3N2LkVycm9yLCBjcmVhdGVfaW52YWxpZCwgZmllbGRfbmFtZSwgIiIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhjc3YuRXJyb3IsIGNyZWF0ZV9pbnZhbGlkLCBmaWVsZF9uYW1lLCAiYWJjIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGNzdi5FcnJvciwgY3JlYXRlX2ludmFsaWQsIGZpZWxkX25hbWUsIGIneCcpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhjc3YuRXJyb3IsIGNyZWF0ZV9pbnZhbGlkLCBmaWVsZF9uYW1lLCA1KQorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoZmllbGRfbmFtZT1maWVsZF9uYW1lKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhjc3YuRXJyb3IsIGNyZWF0ZV9pbnZhbGlkLCBmaWVsZF9uYW1lLCAiIikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhjc3YuRXJyb3IsIGNyZWF0ZV9pbnZhbGlkLCBmaWVsZF9uYW1lLCAiYWJjIikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhjc3YuRXJyb3IsIGNyZWF0ZV9pbnZhbGlkLCBmaWVsZF9uYW1lLCBiJ3gnKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGNzdi5FcnJvciwgY3JlYXRlX2ludmFsaWQsIGZpZWxkX25hbWUsIDUpCiAKIAogY2xhc3MgVGVzdFNuaWZmZXIodW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtMTA1Myw3ICsxMDY2LDYgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZW9iai5yZWFkKCksIGV4cGVjdGVkKQogCiAKLQogZGVmIHRlc3RfbWFpbigpOgogICAgIG1vZCA9IHN5cy5tb2R1bGVzW19fbmFtZV9fXQogICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jdHlwZXMucHkgYi9MaWIvdGVzdC90ZXN0X2N0eXBlcy5weQppbmRleCA0OTYzNTVlLi42ODI2ODk5IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2N0eXBlcy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2N0eXBlcy5weQpAQCAtMSwxNiArMSw5IEBACiBpbXBvcnQgdW5pdHRlc3QKLQogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IGltcG9ydF9tb2R1bGUKIAotIyBTa2lwIHRlc3RzIGlmIF9jdHlwZXMgbW9kdWxlIHdhcyBub3QgYnVpbHQuCi1pbXBvcnRfbW9kdWxlKCdfY3R5cGVzJykKK2N0eXBlc190ZXN0ID0gaW1wb3J0X21vZHVsZSgnY3R5cGVzLnRlc3QnKQogCi1pbXBvcnQgY3R5cGVzLnRlc3QKLQotZGVmIGxvYWRfdGVzdHMoKmFyZ3MpOgotICAgIHNraXBwZWQsIHRlc3RjYXNlcyA9IGN0eXBlcy50ZXN0LmdldF90ZXN0cyhjdHlwZXMudGVzdCwgInRlc3RfKi5weSIsIHZlcmJvc2l0eT0wKQotICAgIHN1aXRlcyA9IFt1bml0dGVzdC5tYWtlU3VpdGUodCkgZm9yIHQgaW4gdGVzdGNhc2VzXQotICAgIHJldHVybiB1bml0dGVzdC5UZXN0U3VpdGUoc3VpdGVzKQorbG9hZF90ZXN0cyA9IGN0eXBlc190ZXN0LmxvYWRfdGVzdHMKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY3Vyc2VzLnB5IGIvTGliL3Rlc3QvdGVzdF9jdXJzZXMucHkKaW5kZXggNzMxMGFmYy4uYmQ3ZDRmYyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jdXJzZXMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jdXJzZXMucHkKQEAgLTIsMzY0ICsyLDM3NCBAQAogIyBUZXN0IHNjcmlwdCBmb3IgdGhlIGN1cnNlcyBtb2R1bGUKICMKICMgVGhpcyBzY3JpcHQgZG9lc24ndCBhY3R1YWxseSBkaXNwbGF5IGFueXRoaW5nIHZlcnkgY29oZXJlbnQuIGJ1dCBpdAotIyBkb2VzIGNhbGwgZXZlcnkgbWV0aG9kIGFuZCBmdW5jdGlvbi4KKyMgZG9lcyBjYWxsIChuZWFybHkpIGV2ZXJ5IG1ldGhvZCBhbmQgZnVuY3Rpb24uCiAjCiAjIEZ1bmN0aW9ucyBub3QgdGVzdGVkOiB7ZGVmLHJlc2V0fV97c2hlbGwscHJvZ31fbW9kZSwgZ2V0Y2goKSwgZ2V0c3RyKCksCiAjIGluaXRfY29sb3IoKQogIyBPbmx5IGNhbGxlZCwgbm90IHRlc3RlZDogZ2V0bW91c2UoKSwgdW5nZXRtb3VzZSgpCiAjCiAKLWltcG9ydCBzeXMsIHRlbXBmaWxlLCBvcworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgdGVtcGZpbGUKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcmVxdWlyZXMsIGltcG9ydF9tb2R1bGUsIHZlcmJvc2UKIAogIyBPcHRpb25hbGx5IHRlc3QgY3Vyc2VzIG1vZHVsZS4gIFRoaXMgY3VycmVudGx5IHJlcXVpcmVzIHRoYXQgdGhlCiAjICdjdXJzZXMnIHJlc291cmNlIGJlIGdpdmVuIG9uIHRoZSByZWdydGVzdCBjb21tYW5kIGxpbmUgdXNpbmcgdGhlIC11CiAjIG9wdGlvbi4gIElmIG5vdCBhdmFpbGFibGUsIG5vdGhpbmcgYWZ0ZXIgdGhpcyBsaW5lIHdpbGwgYmUgZXhlY3V0ZWQuCi0KLWltcG9ydCB1bml0dGVzdAotZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJlcXVpcmVzLCBpbXBvcnRfbW9kdWxlCitpbXBvcnQgaW5zcGVjdAogcmVxdWlyZXMoJ2N1cnNlcycpCiAKICMgSWYgZWl0aGVyIG9mIHRoZXNlIGRvbid0IGV4aXN0LCBza2lwIHRoZSB0ZXN0cy4KIGN1cnNlcyA9IGltcG9ydF9tb2R1bGUoJ2N1cnNlcycpCiBjdXJzZXMucGFuZWwgPSBpbXBvcnRfbW9kdWxlKCdjdXJzZXMucGFuZWwnKQogCit0ZXJtID0gb3MuZW52aXJvbi5nZXQoJ1RFUk0nLCAndW5rbm93bicpCiAKLSMgWFhYOiBpZiBuZXd0ZXJtIHdhcyBzdXBwb3J0ZWQgd2UgY291bGQgdXNlIGl0IGluc3RlYWQgb2YgaW5pdHNjciBhbmQgbm90IGV4aXQKLXRlcm0gPSBvcy5lbnZpcm9uLmdldCgnVEVSTScpCi1pZiBub3QgdGVybSBvciB0ZXJtID09ICd1bmtub3duJzoKLSAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiJFRFUk09JXIsIGNhbGxpbmcgaW5pdHNjcigpIG1heSBjYXVzZSBleGl0IiAlIHRlcm0pCitAdW5pdHRlc3Quc2tpcFVubGVzcyhzeXMuX19zdGRvdXRfXy5pc2F0dHkoKSwgJ3N5cy5fX3N0ZG91dF9fIGlzIG5vdCBhIHR0eScpCitAdW5pdHRlc3Quc2tpcElmKHRlcm0gPT0gJ3Vua25vd24nLAorICAgICAgICAgICAgICAgICAiJFRFUk09JXIsIGNhbGxpbmcgaW5pdHNjcigpIG1heSBjYXVzZSBleGl0IiAlIHRlcm0pCitAdW5pdHRlc3Quc2tpcElmKHN5cy5wbGF0Zm9ybSA9PSAiY3lnd2luIiwKKyAgICAgICAgICAgICAgICAgImN5Z3dpbidzIGN1cnNlcyBtb3N0bHkganVzdCBoYW5ncyIpCitjbGFzcyBUZXN0Q3Vyc2VzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc2V0VXBDbGFzcyhjbHMpOgorICAgICAgICBjdXJzZXMuc2V0dXB0ZXJtKGZkPXN5cy5fX3N0ZG91dF9fLmZpbGVubygpKQogCi1pZiBzeXMucGxhdGZvcm0gPT0gImN5Z3dpbiI6Ci0gICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoImN5Z3dpbidzIGN1cnNlcyBtb3N0bHkganVzdCBoYW5ncyIpCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgIyBqdXN0IHRvIG1ha2UgdGhlIHRlc3Qgb3V0cHV0IGEgbGl0dGxlIG1vcmUgcmVhZGFibGUKKyAgICAgICAgICAgIHByaW50KCkKKyAgICAgICAgc2VsZi5zdGRzY3IgPSBjdXJzZXMuaW5pdHNjcigpCisgICAgICAgIGN1cnNlcy5zYXZldHR5KCkKIAotZGVmIHdpbmRvd19mdW5jcyhzdGRzY3IpOgotICAgICJUZXN0IHRoZSBtZXRob2RzIG9mIHdpbmRvd3MiCi0gICAgd2luID0gY3Vyc2VzLm5ld3dpbigxMCwxMCkKLSAgICB3aW4gPSBjdXJzZXMubmV3d2luKDUsNSwgNSw1KQotICAgIHdpbjIgPSBjdXJzZXMubmV3d2luKDE1LDE1LCA1LDUpCi0KLSAgICBmb3IgbWV0aCBpbiBbc3Rkc2NyLmFkZGNoLCBzdGRzY3IuYWRkc3RyXToKLSAgICAgICAgZm9yIGFyZ3MgaW4gWygnYScpLCAoJ2EnLCBjdXJzZXMuQV9CT0xEKSwKLSAgICAgICAgICAgICAgICAgICAgICg0LDQsICdhJyksICg1LDUsICdhJywgY3Vyc2VzLkFfQk9MRCldOgotICAgICAgICAgICAgbWV0aCgqYXJncykKLQotICAgIGZvciBtZXRoIGluIFtzdGRzY3IuYm94LCBzdGRzY3IuY2xlYXIsIHN0ZHNjci5jbHJ0b2JvdCwKLSAgICAgICAgICAgICAgICAgc3Rkc2NyLmNscnRvZW9sLCBzdGRzY3IuY3Vyc3luY3VwLCBzdGRzY3IuZGVsY2gsCi0gICAgICAgICAgICAgICAgIHN0ZHNjci5kZWxldGVsbiwgc3Rkc2NyLmVyYXNlLCBzdGRzY3IuZ2V0YmVneXgsCi0gICAgICAgICAgICAgICAgIHN0ZHNjci5nZXRia2dkLCBzdGRzY3IuZ2V0a2V5LCBzdGRzY3IuZ2V0bWF4eXgsCi0gICAgICAgICAgICAgICAgIHN0ZHNjci5nZXRwYXJ5eCwgc3Rkc2NyLmdldHl4LCBzdGRzY3IuaW5jaCwKLSAgICAgICAgICAgICAgICAgc3Rkc2NyLmluc2VydGxuLCBzdGRzY3IuaW5zdHIsIHN0ZHNjci5pc193aW50b3VjaGVkLAotICAgICAgICAgICAgICAgICB3aW4ubm91dHJlZnJlc2gsIHN0ZHNjci5yZWRyYXd3aW4sIHN0ZHNjci5yZWZyZXNoLAotICAgICAgICAgICAgICAgICBzdGRzY3Iuc3RhbmRvdXQsIHN0ZHNjci5zdGFuZGVuZCwgc3Rkc2NyLnN5bmNkb3duLAotICAgICAgICAgICAgICAgICBzdGRzY3Iuc3luY3VwLCBzdGRzY3IudG91Y2h3aW4sIHN0ZHNjci51bnRvdWNod2luXToKLSAgICAgICAgbWV0aCgpCi0KLSAgICBzdGRzY3IuYWRkbnN0cignMTIzNCcsIDMpCi0gICAgc3Rkc2NyLmFkZG5zdHIoJzEyMzQnLCAzLCBjdXJzZXMuQV9CT0xEKQotICAgIHN0ZHNjci5hZGRuc3RyKDQsNCwgJzEyMzQnLCAzKQotICAgIHN0ZHNjci5hZGRuc3RyKDUsNSwgJzEyMzQnLCAzLCBjdXJzZXMuQV9CT0xEKQotCi0gICAgc3Rkc2NyLmF0dHJvbihjdXJzZXMuQV9CT0xEKQotICAgIHN0ZHNjci5hdHRyb2ZmKGN1cnNlcy5BX0JPTEQpCi0gICAgc3Rkc2NyLmF0dHJzZXQoY3Vyc2VzLkFfQk9MRCkKLSAgICBzdGRzY3IuYmtnZCgnICcpCi0gICAgc3Rkc2NyLmJrZ2QoJyAnLCBjdXJzZXMuQV9SRVZFUlNFKQotICAgIHN0ZHNjci5ia2dkc2V0KCcgJykKLSAgICBzdGRzY3IuYmtnZHNldCgnICcsIGN1cnNlcy5BX1JFVkVSU0UpCi0KLSAgICB3aW4uYm9yZGVyKDY1LCA2NiwgNjcsIDY4LAotICAgICAgICAgICAgICAgNjksIDcwLCA3MSwgNzIpCi0gICAgd2luLmJvcmRlcignfCcsICchJywgJy0nLCAnXycsCi0gICAgICAgICAgICAgICAnKycsICdcXCcsICcjJywgJy8nKQotICAgIHRyeToKLSAgICAgICAgd2luLmJvcmRlcig2NSwgNjYsIDY3LCA2OCwKLSAgICAgICAgICAgICAgICAgICA2OSwgW10sIDcxLCA3MikKLSAgICBleGNlcHQgVHlwZUVycm9yOgotICAgICAgICBwYXNzCi0gICAgZWxzZToKLSAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJFeHBlY3RlZCB3aW4uYm9yZGVyKCkgdG8gcmFpc2UgVHlwZUVycm9yIikKLQotICAgIHN0ZHNjci5jbGVhcm9rKDEpCi0KLSAgICB3aW40ID0gc3Rkc2NyLmRlcndpbigyLDIpCi0gICAgd2luNCA9IHN0ZHNjci5kZXJ3aW4oMSwxLCA1LDUpCi0gICAgd2luNC5tdmRlcndpbig5LDkpCi0KLSAgICBzdGRzY3IuZWNob2NoYXIoJ2EnKQotICAgIHN0ZHNjci5lY2hvY2hhcignYScsIGN1cnNlcy5BX0JPTEQpCi0gICAgc3Rkc2NyLmhsaW5lKCctJywgNSkKLSAgICBzdGRzY3IuaGxpbmUoJy0nLCA1LCBjdXJzZXMuQV9CT0xEKQotICAgIHN0ZHNjci5obGluZSgxLDEsJy0nLCA1KQotICAgIHN0ZHNjci5obGluZSgxLDEsJy0nLCA1LCBjdXJzZXMuQV9CT0xEKQotCi0gICAgc3Rkc2NyLmlkY29rKDEpCi0gICAgc3Rkc2NyLmlkbG9rKDEpCi0gICAgc3Rkc2NyLmltbWVkb2soMSkKLSAgICBzdGRzY3IuaW5zY2goJ2MnKQotICAgIHN0ZHNjci5pbnNkZWxsbigxKQotICAgIHN0ZHNjci5pbnNuc3RyKCdhYmMnLCAzKQotICAgIHN0ZHNjci5pbnNuc3RyKCdhYmMnLCAzLCBjdXJzZXMuQV9CT0xEKQotICAgIHN0ZHNjci5pbnNuc3RyKDUsIDUsICdhYmMnLCAzKQotICAgIHN0ZHNjci5pbnNuc3RyKDUsIDUsICdhYmMnLCAzLCBjdXJzZXMuQV9CT0xEKQotCi0gICAgc3Rkc2NyLmluc3N0cignZGVmJykKLSAgICBzdGRzY3IuaW5zc3RyKCdkZWYnLCBjdXJzZXMuQV9CT0xEKQotICAgIHN0ZHNjci5pbnNzdHIoNSwgNSwgJ2RlZicpCi0gICAgc3Rkc2NyLmluc3N0cig1LCA1LCAnZGVmJywgY3Vyc2VzLkFfQk9MRCkKLSAgICBzdGRzY3IuaXNfbGluZXRvdWNoZWQoMCkKLSAgICBzdGRzY3Iua2V5cGFkKDEpCi0gICAgc3Rkc2NyLmxlYXZlb2soMSkKLSAgICBzdGRzY3IubW92ZSgzLDMpCi0gICAgd2luLm12d2luKDIsMikKLSAgICBzdGRzY3Iubm9kZWxheSgxKQotICAgIHN0ZHNjci5ub3RpbWVvdXQoMSkKLSAgICB3aW4yLm92ZXJsYXkod2luKQotICAgIHdpbjIub3ZlcndyaXRlKHdpbikKLSAgICB3aW4yLm92ZXJsYXkod2luLCAxLCAyLCAzLCAzLCAyLCAxKQotICAgIHdpbjIub3ZlcndyaXRlKHdpbiwgMSwgMiwgMywgMywgMiwgMSkKLSAgICBzdGRzY3IucmVkcmF3bG4oMSwyKQotCi0gICAgc3Rkc2NyLnNjcm9sbG9rKDEpCi0gICAgc3Rkc2NyLnNjcm9sbCgpCi0gICAgc3Rkc2NyLnNjcm9sbCgyKQotICAgIHN0ZHNjci5zY3JvbGwoLTMpCi0KLSAgICBzdGRzY3IubW92ZSgxMiwgMikKLSAgICBzdGRzY3Iuc2V0c2NycmVnKDEwLDE1KQotICAgIHdpbjMgPSBzdGRzY3Iuc3Vid2luKDEwLDEwKQotICAgIHdpbjMgPSBzdGRzY3Iuc3Vid2luKDEwLDEwLCA1LDUpCi0gICAgc3Rkc2NyLnN5bmNvaygxKQotICAgIHN0ZHNjci50aW1lb3V0KDUpCi0gICAgc3Rkc2NyLnRvdWNobGluZSg1LDUpCi0gICAgc3Rkc2NyLnRvdWNobGluZSg1LDUsMCkKLSAgICBzdGRzY3IudmxpbmUoJ2EnLCAzKQotICAgIHN0ZHNjci52bGluZSgnYScsIDMsIGN1cnNlcy5BX1NUQU5ET1VUKQotICAgIHN0ZHNjci5jaGdhdCg1LCAyLCAzLCBjdXJzZXMuQV9CTElOSykKLSAgICBzdGRzY3IuY2hnYXQoMywgY3Vyc2VzLkFfQk9MRCkKLSAgICBzdGRzY3IuY2hnYXQoNSwgOCwgY3Vyc2VzLkFfVU5ERVJMSU5FKQotICAgIHN0ZHNjci5jaGdhdChjdXJzZXMuQV9CTElOSykKLSAgICBzdGRzY3IucmVmcmVzaCgpCi0KLSAgICBzdGRzY3IudmxpbmUoMSwxLCAnYScsIDMpCi0gICAgc3Rkc2NyLnZsaW5lKDEsMSwgJ2EnLCAzLCBjdXJzZXMuQV9TVEFORE9VVCkKLQotICAgIGlmIGhhc2F0dHIoY3Vyc2VzLCAncmVzaXplJyk6Ci0gICAgICAgIHN0ZHNjci5yZXNpemUoKQotICAgIGlmIGhhc2F0dHIoY3Vyc2VzLCAnZW5jbG9zZScpOgotICAgICAgICBzdGRzY3IuZW5jbG9zZSgpCi0KLQotZGVmIG1vZHVsZV9mdW5jcyhzdGRzY3IpOgotICAgICJUZXN0IG1vZHVsZS1sZXZlbCBmdW5jdGlvbnMiCi0KLSAgICBmb3IgZnVuYyBpbiBbY3Vyc2VzLmJhdWRyYXRlLCBjdXJzZXMuYmVlcCwgY3Vyc2VzLmNhbl9jaGFuZ2VfY29sb3IsCi0gICAgICAgICAgICAgICAgIGN1cnNlcy5jYnJlYWssIGN1cnNlcy5kZWZfcHJvZ19tb2RlLCBjdXJzZXMuZG91cGRhdGUsCi0gICAgICAgICAgICAgICAgIGN1cnNlcy5maWx0ZXIsIGN1cnNlcy5mbGFzaCwgY3Vyc2VzLmZsdXNoaW5wLAotICAgICAgICAgICAgICAgICBjdXJzZXMuaGFzX2NvbG9ycywgY3Vyc2VzLmhhc19pYywgY3Vyc2VzLmhhc19pbCwKLSAgICAgICAgICAgICAgICAgY3Vyc2VzLmlzZW5kd2luLCBjdXJzZXMua2lsbGNoYXIsIGN1cnNlcy5sb25nbmFtZSwKLSAgICAgICAgICAgICAgICAgY3Vyc2VzLm5vY2JyZWFrLCBjdXJzZXMubm9lY2hvLCBjdXJzZXMubm9ubCwKLSAgICAgICAgICAgICAgICAgY3Vyc2VzLm5vcWlmbHVzaCwgY3Vyc2VzLm5vcmF3LAotICAgICAgICAgICAgICAgICBjdXJzZXMucmVzZXRfcHJvZ19tb2RlLCBjdXJzZXMudGVybWF0dHJzLAotICAgICAgICAgICAgICAgICBjdXJzZXMudGVybW5hbWUsIGN1cnNlcy5lcmFzZWNoYXIsIGN1cnNlcy5nZXRzeXhdOgotICAgICAgICBmdW5jKCkKLQotICAgICMgRnVuY3Rpb25zIHRoYXQgYWN0dWFsbHkgbmVlZCBhcmd1bWVudHMKLSAgICBpZiBjdXJzZXMudGlnZXRzdHIoImNub3JtIik6Ci0gICAgICAgIGN1cnNlcy5jdXJzX3NldCgxKQotICAgIGN1cnNlcy5kZWxheV9vdXRwdXQoMSkKLSAgICBjdXJzZXMuZWNobygpIDsgY3Vyc2VzLmVjaG8oMSkKLQotICAgIGYgPSB0ZW1wZmlsZS5UZW1wb3JhcnlGaWxlKCkKLSAgICBzdGRzY3IucHV0d2luKGYpCi0gICAgZi5zZWVrKDApCi0gICAgY3Vyc2VzLmdldHdpbihmKQotICAgIGYuY2xvc2UoKQotCi0gICAgY3Vyc2VzLmhhbGZkZWxheSgxKQotICAgIGN1cnNlcy5pbnRyZmx1c2goMSkKLSAgICBjdXJzZXMubWV0YSgxKQotICAgIGN1cnNlcy5uYXBtcygxMDApCi0gICAgY3Vyc2VzLm5ld3BhZCg1MCw1MCkKLSAgICB3aW4gPSBjdXJzZXMubmV3d2luKDUsNSkKLSAgICB3aW4gPSBjdXJzZXMubmV3d2luKDUsNSwgMSwxKQotICAgIGN1cnNlcy5ubCgpIDsgY3Vyc2VzLm5sKDEpCi0gICAgY3Vyc2VzLnB1dHAoYidhYmMnKQotICAgIGN1cnNlcy5xaWZsdXNoKCkKLSAgICBjdXJzZXMucmF3KCkgOyBjdXJzZXMucmF3KDEpCi0gICAgY3Vyc2VzLnNldHN5eCg1LDUpCi0gICAgY3Vyc2VzLnRpZ2V0ZmxhZygnaGMnKQotICAgIGN1cnNlcy50aWdldG51bSgnY28nKQotICAgIGN1cnNlcy50aWdldHN0cignY3InKQotICAgIGN1cnNlcy50cGFybShiJ2NyJykKLSAgICBjdXJzZXMudHlwZWFoZWFkKHN5cy5fX3N0ZGluX18uZmlsZW5vKCkpCi0gICAgY3Vyc2VzLnVuY3RybCgnYScpCi0gICAgY3Vyc2VzLnVuZ2V0Y2goJ2EnKQotICAgIGN1cnNlcy51c2VfZW52KDEpCi0KLSAgICAjIEZ1bmN0aW9ucyBvbmx5IGF2YWlsYWJsZSBvbiBhIGZldyBwbGF0Zm9ybXMKLSAgICBpZiBjdXJzZXMuaGFzX2NvbG9ycygpOgotICAgICAgICBjdXJzZXMuc3RhcnRfY29sb3IoKQotICAgICAgICBjdXJzZXMuaW5pdF9wYWlyKDIsIDEsMSkKLSAgICAgICAgY3Vyc2VzLmNvbG9yX2NvbnRlbnQoMSkKLSAgICAgICAgY3Vyc2VzLmNvbG9yX3BhaXIoMikKLSAgICAgICAgY3Vyc2VzLnBhaXJfY29udGVudChjdXJzZXMuQ09MT1JfUEFJUlMgLSAxKQotICAgICAgICBjdXJzZXMucGFpcl9udW1iZXIoMCkKLQotICAgICAgICBpZiBoYXNhdHRyKGN1cnNlcywgJ3VzZV9kZWZhdWx0X2NvbG9ycycpOgotICAgICAgICAgICAgY3Vyc2VzLnVzZV9kZWZhdWx0X2NvbG9ycygpCi0KLSAgICBpZiBoYXNhdHRyKGN1cnNlcywgJ2tleW5hbWUnKToKLSAgICAgICAgY3Vyc2VzLmtleW5hbWUoMTMpCi0KLSAgICBpZiBoYXNhdHRyKGN1cnNlcywgJ2hhc19rZXknKToKLSAgICAgICAgY3Vyc2VzLmhhc19rZXkoMTMpCi0KLSAgICBpZiBoYXNhdHRyKGN1cnNlcywgJ2dldG1vdXNlJyk6Ci0gICAgICAgIChhdmFpbG1hc2ssIG9sZG1hc2spID0gY3Vyc2VzLm1vdXNlbWFzayhjdXJzZXMuQlVUVE9OMV9QUkVTU0VEKQotICAgICAgICAjIGF2YWlsbWFzayBpbmRpY2F0ZXMgdGhhdCBtb3VzZSBzdHVmZiBub3QgYXZhaWxhYmxlLgotICAgICAgICBpZiBhdmFpbG1hc2sgIT0gMDoKLSAgICAgICAgICAgIGN1cnNlcy5tb3VzZWludGVydmFsKDEwKQotICAgICAgICAgICAgIyBqdXN0IHZlcmlmeSB0aGVzZSBkb24ndCBjYXVzZSBlcnJvcnMKLSAgICAgICAgICAgIGN1cnNlcy51bmdldG1vdXNlKDAsIDAsIDAsIDAsIGN1cnNlcy5CVVRUT04xX1BSRVNTRUQpCi0gICAgICAgICAgICBtID0gY3Vyc2VzLmdldG1vdXNlKCkKLQotICAgIGlmIGhhc2F0dHIoY3Vyc2VzLCAnaXNfdGVybV9yZXNpemVkJyk6Ci0gICAgICAgIGN1cnNlcy5pc190ZXJtX3Jlc2l6ZWQoKnN0ZHNjci5nZXRtYXh5eCgpKQotICAgIGlmIGhhc2F0dHIoY3Vyc2VzLCAncmVzaXpldGVybScpOgotICAgICAgICBjdXJzZXMucmVzaXpldGVybSgqc3Rkc2NyLmdldG1heHl4KCkpCi0gICAgaWYgaGFzYXR0cihjdXJzZXMsICdyZXNpemVfdGVybScpOgotICAgICAgICBjdXJzZXMucmVzaXplX3Rlcm0oKnN0ZHNjci5nZXRtYXh5eCgpKQotCi1kZWYgdW5pdF90ZXN0cygpOgotICAgIGZyb20gY3Vyc2VzIGltcG9ydCBhc2NpaQotICAgIGZvciBjaCwgZXhwZWN0ZWQgaW4gWygnYScsICdhJyksICgnQScsICdBJyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgKCc7JywgJzsnKSwgKCcgJywgJyAnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAoJ1x4N2YnLCAnXj8nKSwgKCdcbicsICdeSicpLCAoJ1wwJywgJ15AJyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIyBNZXRhLWJpdCBjaGFyYWN0ZXJzCi0gICAgICAgICAgICAgICAgICAgICAgICAgKCdceDhhJywgJyFeSicpLCAoJ1x4YzEnLCAnIUEnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBdOgotICAgICAgICBpZiBhc2NpaS51bmN0cmwoY2gpICE9IGV4cGVjdGVkOgotICAgICAgICAgICAgcHJpbnQoJ2N1cnNlcy51bmN0cmwgZmFpbHMgb24gY2hhcmFjdGVyJywgcmVwcihjaCkpCi0KLQotZGVmIHRlc3RfdXNlcnB0cl93aXRob3V0X3NldChzdGRzY3IpOgotICAgIHcgPSBjdXJzZXMubmV3d2luKDEwLCAxMCkKLSAgICBwID0gY3Vyc2VzLnBhbmVsLm5ld19wYW5lbCh3KQotICAgICMgdHJ5IHRvIGFjY2VzcyB1c2VycHRyKCkgYmVmb3JlIGNhbGxpbmcgc2V0X3VzZXJwdHIoKSAtLSBzZWdmYXVsdHMKLSAgICB0cnk6Ci0gICAgICAgIHAudXNlcnB0cigpCi0gICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigndXNlcnB0ciBzaG91bGQgZmFpbCBzaW5jZSBub3Qgc2V0JykKLSAgICBleGNlcHQgY3Vyc2VzLnBhbmVsLmVycm9yOgotICAgICAgICBwYXNzCi0KLWRlZiB0ZXN0X3VzZXJwdHJfbWVtb3J5X2xlYWsoc3Rkc2NyKToKLSAgICB3ID0gY3Vyc2VzLm5ld3dpbigxMCwgMTApCi0gICAgcCA9IGN1cnNlcy5wYW5lbC5uZXdfcGFuZWwodykKLSAgICBvYmogPSBvYmplY3QoKQotICAgIG5yZWZzID0gc3lzLmdldHJlZmNvdW50KG9iaikKLSAgICBmb3IgaSBpbiByYW5nZSgxMDApOgotICAgICAgICBwLnNldF91c2VycHRyKG9iaikKLQotICAgIHAuc2V0X3VzZXJwdHIoTm9uZSkKLSAgICBpZiBzeXMuZ2V0cmVmY291bnQob2JqKSAhPSBucmVmczoKLSAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJzZXRfdXNlcnB0ciBsZWFrZWQgcmVmZXJlbmNlcyIpCi0KLWRlZiB0ZXN0X3VzZXJwdHJfc2VnZmF1bHQoc3Rkc2NyKToKLSAgICBwYW5lbCA9IGN1cnNlcy5wYW5lbC5uZXdfcGFuZWwoc3Rkc2NyKQotICAgIGNsYXNzIEE6Ci0gICAgICAgIGRlZiBfX2RlbF9fKHNlbGYpOgotICAgICAgICAgICAgcGFuZWwuc2V0X3VzZXJwdHIoTm9uZSkKLSAgICBwYW5lbC5zZXRfdXNlcnB0cihBKCkpCi0gICAgcGFuZWwuc2V0X3VzZXJwdHIoTm9uZSkKLQotZGVmIHRlc3RfcmVzaXplX3Rlcm0oc3Rkc2NyKToKLSAgICBpZiBoYXNhdHRyKGN1cnNlcywgJ3Jlc2l6ZXRlcm0nKToKLSAgICAgICAgbGluZXMsIGNvbHMgPSBjdXJzZXMuTElORVMsIGN1cnNlcy5DT0xTCi0gICAgICAgIGN1cnNlcy5yZXNpemV0ZXJtKGxpbmVzIC0gMSwgY29scyArIDEpCi0KLSAgICAgICAgaWYgY3Vyc2VzLkxJTkVTICE9IGxpbmVzIC0gMSBvciBjdXJzZXMuQ09MUyAhPSBjb2xzICsgMToKLSAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiRXhwZWN0ZWQgcmVzaXpldGVybSB0byB1cGRhdGUgTElORVMgYW5kIENPTFMiKQotCi1kZWYgdGVzdF9pc3N1ZTYyNDMoc3Rkc2NyKToKLSAgICBjdXJzZXMudW5nZXRjaCgxMDI1KQotICAgIHN0ZHNjci5nZXRrZXkoKQotCi1kZWYgdGVzdF91bmdldF93Y2goc3Rkc2NyKToKLSAgICBpZiBub3QgaGFzYXR0cihjdXJzZXMsICd1bmdldF93Y2gnKToKLSAgICAgICAgcmV0dXJuCi0gICAgZW5jb2RpbmcgPSBzdGRzY3IuZW5jb2RpbmcKLSAgICBmb3IgY2ggaW4gKCdhJywgJ1x4ZTknLCAnXHUyMGFjJywgJ1xVMDAxMEZGRkYnKToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgY2guZW5jb2RlKGVuY29kaW5nKQotICAgICAgICBleGNlcHQgVW5pY29kZUVuY29kZUVycm9yOgotICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgY3Vyc2VzLnVuZ2V0X3djaChjaCkKLSAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlcnI6Ci0gICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oInVuZ2V0X3djaCglYSkgZmFpbGVkIHdpdGggZW5jb2RpbmcgJXM6ICVzIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKGNoLCBzdGRzY3IuZW5jb2RpbmcsIGVycikpCi0gICAgICAgIHJlYWQgPSBzdGRzY3IuZ2V0X3djaCgpCi0gICAgICAgIGlmIHJlYWQgIT0gY2g6Ci0gICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigiJXIgIT0gJXIiICUgKHJlYWQsIGNoKSkKLQotICAgICAgICBjb2RlID0gb3JkKGNoKQotICAgICAgICBjdXJzZXMudW5nZXRfd2NoKGNvZGUpCi0gICAgICAgIHJlYWQgPSBzdGRzY3IuZ2V0X3djaCgpCi0gICAgICAgIGlmIHJlYWQgIT0gY2g6Ci0gICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigiJXIgIT0gJXIiICUgKHJlYWQsIGNoKSkKLQotZGVmIHRlc3RfaXNzdWUxMDU3MCgpOgotICAgIGIgPSBjdXJzZXMudHBhcm0oY3Vyc2VzLnRpZ2V0c3RyKCJjdXAiKSwgNSwgMykKLSAgICBhc3NlcnQgdHlwZShiKSBpcyBieXRlcwotICAgIGN1cnNlcy5wdXRwKGIpCi0KLWRlZiB0ZXN0X2VuY29kaW5nKHN0ZHNjcik6Ci0gICAgaW1wb3J0IGNvZGVjcwotICAgIGVuY29kaW5nID0gc3Rkc2NyLmVuY29kaW5nCi0gICAgY29kZWNzLmxvb2t1cChlbmNvZGluZykKLSAgICB0cnk6Ci0gICAgICAgIHN0ZHNjci5lbmNvZGluZyA9IDEwCi0gICAgZXhjZXB0IFR5cGVFcnJvcjoKLSAgICAgICAgcGFzcwotICAgIGVsc2U6Ci0gICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCJUeXBlRXJyb3Igbm90IHJhaXNlZCIpCi0gICAgc3Rkc2NyLmVuY29kaW5nID0gZW5jb2RpbmcKLSAgICB0cnk6Ci0gICAgICAgIGRlbCBzdGRzY3IuZW5jb2RpbmcKLSAgICBleGNlcHQgVHlwZUVycm9yOgotICAgICAgICBwYXNzCi0gICAgZWxzZToKLSAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoIlR5cGVFcnJvciBub3QgcmFpc2VkIikKLQotZGVmIG1haW4oc3Rkc2NyKToKLSAgICBjdXJzZXMuc2F2ZXR0eSgpCi0gICAgdHJ5OgotICAgICAgICBtb2R1bGVfZnVuY3Moc3Rkc2NyKQotICAgICAgICB3aW5kb3dfZnVuY3Moc3Rkc2NyKQotICAgICAgICB0ZXN0X3VzZXJwdHJfd2l0aG91dF9zZXQoc3Rkc2NyKQotICAgICAgICB0ZXN0X3VzZXJwdHJfbWVtb3J5X2xlYWsoc3Rkc2NyKQotICAgICAgICB0ZXN0X3VzZXJwdHJfc2VnZmF1bHQoc3Rkc2NyKQotICAgICAgICB0ZXN0X3Jlc2l6ZV90ZXJtKHN0ZHNjcikKLSAgICAgICAgdGVzdF9pc3N1ZTYyNDMoc3Rkc2NyKQotICAgICAgICB0ZXN0X3VuZ2V0X3djaChzdGRzY3IpCi0gICAgICAgIHRlc3RfaXNzdWUxMDU3MCgpCi0gICAgICAgIHRlc3RfZW5jb2Rpbmcoc3Rkc2NyKQotICAgIGZpbmFsbHk6CisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgogICAgICAgICBjdXJzZXMucmVzZXR0eSgpCi0KLWRlZiB0ZXN0X21haW4oKToKLSAgICBpZiBub3Qgc3lzLl9fc3Rkb3V0X18uaXNhdHR5KCk6Ci0gICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJzeXMuX19zdGRvdXRfXyBpcyBub3QgYSB0dHkiKQotICAgICMgdGVzdGluZyBzZXR1cHRlcm0oKSBpbnNpZGUgaW5pdHNjci9lbmR3aW4KLSAgICAjIGNhdXNlcyB0ZXJtaW5hbCBicmVha2FnZQotICAgIGN1cnNlcy5zZXR1cHRlcm0oZmQ9c3lzLl9fc3Rkb3V0X18uZmlsZW5vKCkpCi0gICAgdHJ5OgotICAgICAgICBzdGRzY3IgPSBjdXJzZXMuaW5pdHNjcigpCi0gICAgICAgIG1haW4oc3Rkc2NyKQotICAgIGZpbmFsbHk6CiAgICAgICAgIGN1cnNlcy5lbmR3aW4oKQotICAgIHVuaXRfdGVzdHMoKQorCisgICAgZGVmIHRlc3Rfd2luZG93X2Z1bmNzKHNlbGYpOgorICAgICAgICAiVGVzdCB0aGUgbWV0aG9kcyBvZiB3aW5kb3dzIgorICAgICAgICBzdGRzY3IgPSBzZWxmLnN0ZHNjcgorICAgICAgICB3aW4gPSBjdXJzZXMubmV3d2luKDEwLDEwKQorICAgICAgICB3aW4gPSBjdXJzZXMubmV3d2luKDUsNSwgNSw1KQorICAgICAgICB3aW4yID0gY3Vyc2VzLm5ld3dpbigxNSwxNSwgNSw1KQorCisgICAgICAgIGZvciBtZXRoIGluIFtzdGRzY3IuYWRkY2gsIHN0ZHNjci5hZGRzdHJdOgorICAgICAgICAgICAgZm9yIGFyZ3MgaW4gWygnYScpLCAoJ2EnLCBjdXJzZXMuQV9CT0xEKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoNCw0LCAnYScpLCAoNSw1LCAnYScsIGN1cnNlcy5BX0JPTEQpXToKKyAgICAgICAgICAgICAgICBtZXRoKCphcmdzKQorCisgICAgICAgIGZvciBtZXRoIGluIFtzdGRzY3IuYm94LCBzdGRzY3IuY2xlYXIsIHN0ZHNjci5jbHJ0b2JvdCwKKyAgICAgICAgICAgICAgICAgICAgIHN0ZHNjci5jbHJ0b2VvbCwgc3Rkc2NyLmN1cnN5bmN1cCwgc3Rkc2NyLmRlbGNoLAorICAgICAgICAgICAgICAgICAgICAgc3Rkc2NyLmRlbGV0ZWxuLCBzdGRzY3IuZXJhc2UsIHN0ZHNjci5nZXRiZWd5eCwKKyAgICAgICAgICAgICAgICAgICAgIHN0ZHNjci5nZXRia2dkLCBzdGRzY3IuZ2V0a2V5LCBzdGRzY3IuZ2V0bWF4eXgsCisgICAgICAgICAgICAgICAgICAgICBzdGRzY3IuZ2V0cGFyeXgsIHN0ZHNjci5nZXR5eCwgc3Rkc2NyLmluY2gsCisgICAgICAgICAgICAgICAgICAgICBzdGRzY3IuaW5zZXJ0bG4sIHN0ZHNjci5pbnN0ciwgc3Rkc2NyLmlzX3dpbnRvdWNoZWQsCisgICAgICAgICAgICAgICAgICAgICB3aW4ubm91dHJlZnJlc2gsIHN0ZHNjci5yZWRyYXd3aW4sIHN0ZHNjci5yZWZyZXNoLAorICAgICAgICAgICAgICAgICAgICAgc3Rkc2NyLnN0YW5kb3V0LCBzdGRzY3Iuc3RhbmRlbmQsIHN0ZHNjci5zeW5jZG93biwKKyAgICAgICAgICAgICAgICAgICAgIHN0ZHNjci5zeW5jdXAsIHN0ZHNjci50b3VjaHdpbiwgc3Rkc2NyLnVudG91Y2h3aW5dOgorICAgICAgICAgICAgbWV0aCgpCisKKyAgICAgICAgc3Rkc2NyLmFkZG5zdHIoJzEyMzQnLCAzKQorICAgICAgICBzdGRzY3IuYWRkbnN0cignMTIzNCcsIDMsIGN1cnNlcy5BX0JPTEQpCisgICAgICAgIHN0ZHNjci5hZGRuc3RyKDQsNCwgJzEyMzQnLCAzKQorICAgICAgICBzdGRzY3IuYWRkbnN0cig1LDUsICcxMjM0JywgMywgY3Vyc2VzLkFfQk9MRCkKKworICAgICAgICBzdGRzY3IuYXR0cm9uKGN1cnNlcy5BX0JPTEQpCisgICAgICAgIHN0ZHNjci5hdHRyb2ZmKGN1cnNlcy5BX0JPTEQpCisgICAgICAgIHN0ZHNjci5hdHRyc2V0KGN1cnNlcy5BX0JPTEQpCisgICAgICAgIHN0ZHNjci5ia2dkKCcgJykKKyAgICAgICAgc3Rkc2NyLmJrZ2QoJyAnLCBjdXJzZXMuQV9SRVZFUlNFKQorICAgICAgICBzdGRzY3IuYmtnZHNldCgnICcpCisgICAgICAgIHN0ZHNjci5ia2dkc2V0KCcgJywgY3Vyc2VzLkFfUkVWRVJTRSkKKworICAgICAgICB3aW4uYm9yZGVyKDY1LCA2NiwgNjcsIDY4LAorICAgICAgICAgICAgICAgICAgIDY5LCA3MCwgNzEsIDcyKQorICAgICAgICB3aW4uYm9yZGVyKCd8JywgJyEnLCAnLScsICdfJywKKyAgICAgICAgICAgICAgICAgICAnKycsICdcXCcsICcjJywgJy8nKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2c9IkV4cGVjdGVkIHdpbi5ib3JkZXIoKSB0byByYWlzZSBUeXBlRXJyb3IiKToKKyAgICAgICAgICAgIHdpbi5ib3JkZXIoNjUsIDY2LCA2NywgNjgsCisgICAgICAgICAgICAgICAgICAgICAgIDY5LCBbXSwgNzEsIDcyKQorCisgICAgICAgIHN0ZHNjci5jbGVhcm9rKDEpCisKKyAgICAgICAgd2luNCA9IHN0ZHNjci5kZXJ3aW4oMiwyKQorICAgICAgICB3aW40ID0gc3Rkc2NyLmRlcndpbigxLDEsIDUsNSkKKyAgICAgICAgd2luNC5tdmRlcndpbig5LDkpCisKKyAgICAgICAgc3Rkc2NyLmVjaG9jaGFyKCdhJykKKyAgICAgICAgc3Rkc2NyLmVjaG9jaGFyKCdhJywgY3Vyc2VzLkFfQk9MRCkKKyAgICAgICAgc3Rkc2NyLmhsaW5lKCctJywgNSkKKyAgICAgICAgc3Rkc2NyLmhsaW5lKCctJywgNSwgY3Vyc2VzLkFfQk9MRCkKKyAgICAgICAgc3Rkc2NyLmhsaW5lKDEsMSwnLScsIDUpCisgICAgICAgIHN0ZHNjci5obGluZSgxLDEsJy0nLCA1LCBjdXJzZXMuQV9CT0xEKQorCisgICAgICAgIHN0ZHNjci5pZGNvaygxKQorICAgICAgICBzdGRzY3IuaWRsb2soMSkKKyAgICAgICAgc3Rkc2NyLmltbWVkb2soMSkKKyAgICAgICAgc3Rkc2NyLmluc2NoKCdjJykKKyAgICAgICAgc3Rkc2NyLmluc2RlbGxuKDEpCisgICAgICAgIHN0ZHNjci5pbnNuc3RyKCdhYmMnLCAzKQorICAgICAgICBzdGRzY3IuaW5zbnN0cignYWJjJywgMywgY3Vyc2VzLkFfQk9MRCkKKyAgICAgICAgc3Rkc2NyLmluc25zdHIoNSwgNSwgJ2FiYycsIDMpCisgICAgICAgIHN0ZHNjci5pbnNuc3RyKDUsIDUsICdhYmMnLCAzLCBjdXJzZXMuQV9CT0xEKQorCisgICAgICAgIHN0ZHNjci5pbnNzdHIoJ2RlZicpCisgICAgICAgIHN0ZHNjci5pbnNzdHIoJ2RlZicsIGN1cnNlcy5BX0JPTEQpCisgICAgICAgIHN0ZHNjci5pbnNzdHIoNSwgNSwgJ2RlZicpCisgICAgICAgIHN0ZHNjci5pbnNzdHIoNSwgNSwgJ2RlZicsIGN1cnNlcy5BX0JPTEQpCisgICAgICAgIHN0ZHNjci5pc19saW5ldG91Y2hlZCgwKQorICAgICAgICBzdGRzY3Iua2V5cGFkKDEpCisgICAgICAgIHN0ZHNjci5sZWF2ZW9rKDEpCisgICAgICAgIHN0ZHNjci5tb3ZlKDMsMykKKyAgICAgICAgd2luLm12d2luKDIsMikKKyAgICAgICAgc3Rkc2NyLm5vZGVsYXkoMSkKKyAgICAgICAgc3Rkc2NyLm5vdGltZW91dCgxKQorICAgICAgICB3aW4yLm92ZXJsYXkod2luKQorICAgICAgICB3aW4yLm92ZXJ3cml0ZSh3aW4pCisgICAgICAgIHdpbjIub3ZlcmxheSh3aW4sIDEsIDIsIDIsIDEsIDMsIDMpCisgICAgICAgIHdpbjIub3ZlcndyaXRlKHdpbiwgMSwgMiwgMiwgMSwgMywgMykKKyAgICAgICAgc3Rkc2NyLnJlZHJhd2xuKDEsMikKKworICAgICAgICBzdGRzY3Iuc2Nyb2xsb2soMSkKKyAgICAgICAgc3Rkc2NyLnNjcm9sbCgpCisgICAgICAgIHN0ZHNjci5zY3JvbGwoMikKKyAgICAgICAgc3Rkc2NyLnNjcm9sbCgtMykKKworICAgICAgICBzdGRzY3IubW92ZSgxMiwgMikKKyAgICAgICAgc3Rkc2NyLnNldHNjcnJlZygxMCwxNSkKKyAgICAgICAgd2luMyA9IHN0ZHNjci5zdWJ3aW4oMTAsMTApCisgICAgICAgIHdpbjMgPSBzdGRzY3Iuc3Vid2luKDEwLDEwLCA1LDUpCisgICAgICAgIHN0ZHNjci5zeW5jb2soMSkKKyAgICAgICAgc3Rkc2NyLnRpbWVvdXQoNSkKKyAgICAgICAgc3Rkc2NyLnRvdWNobGluZSg1LDUpCisgICAgICAgIHN0ZHNjci50b3VjaGxpbmUoNSw1LDApCisgICAgICAgIHN0ZHNjci52bGluZSgnYScsIDMpCisgICAgICAgIHN0ZHNjci52bGluZSgnYScsIDMsIGN1cnNlcy5BX1NUQU5ET1VUKQorICAgICAgICBzdGRzY3IuY2hnYXQoNSwgMiwgMywgY3Vyc2VzLkFfQkxJTkspCisgICAgICAgIHN0ZHNjci5jaGdhdCgzLCBjdXJzZXMuQV9CT0xEKQorICAgICAgICBzdGRzY3IuY2hnYXQoNSwgOCwgY3Vyc2VzLkFfVU5ERVJMSU5FKQorICAgICAgICBzdGRzY3IuY2hnYXQoY3Vyc2VzLkFfQkxJTkspCisgICAgICAgIHN0ZHNjci5yZWZyZXNoKCkKKworICAgICAgICBzdGRzY3IudmxpbmUoMSwxLCAnYScsIDMpCisgICAgICAgIHN0ZHNjci52bGluZSgxLDEsICdhJywgMywgY3Vyc2VzLkFfU1RBTkRPVVQpCisKKyAgICAgICAgaWYgaGFzYXR0cihjdXJzZXMsICdyZXNpemUnKToKKyAgICAgICAgICAgIHN0ZHNjci5yZXNpemUoKQorICAgICAgICBpZiBoYXNhdHRyKGN1cnNlcywgJ2VuY2xvc2UnKToKKyAgICAgICAgICAgIHN0ZHNjci5lbmNsb3NlKCkKKworCisgICAgZGVmIHRlc3RfbW9kdWxlX2Z1bmNzKHNlbGYpOgorICAgICAgICAiVGVzdCBtb2R1bGUtbGV2ZWwgZnVuY3Rpb25zIgorICAgICAgICBzdGRzY3IgPSBzZWxmLnN0ZHNjcgorICAgICAgICBmb3IgZnVuYyBpbiBbY3Vyc2VzLmJhdWRyYXRlLCBjdXJzZXMuYmVlcCwgY3Vyc2VzLmNhbl9jaGFuZ2VfY29sb3IsCisgICAgICAgICAgICAgICAgICAgICBjdXJzZXMuY2JyZWFrLCBjdXJzZXMuZGVmX3Byb2dfbW9kZSwgY3Vyc2VzLmRvdXBkYXRlLAorICAgICAgICAgICAgICAgICAgICAgY3Vyc2VzLmZpbHRlciwgY3Vyc2VzLmZsYXNoLCBjdXJzZXMuZmx1c2hpbnAsCisgICAgICAgICAgICAgICAgICAgICBjdXJzZXMuaGFzX2NvbG9ycywgY3Vyc2VzLmhhc19pYywgY3Vyc2VzLmhhc19pbCwKKyAgICAgICAgICAgICAgICAgICAgIGN1cnNlcy5pc2VuZHdpbiwgY3Vyc2VzLmtpbGxjaGFyLCBjdXJzZXMubG9uZ25hbWUsCisgICAgICAgICAgICAgICAgICAgICBjdXJzZXMubm9jYnJlYWssIGN1cnNlcy5ub2VjaG8sIGN1cnNlcy5ub25sLAorICAgICAgICAgICAgICAgICAgICAgY3Vyc2VzLm5vcWlmbHVzaCwgY3Vyc2VzLm5vcmF3LAorICAgICAgICAgICAgICAgICAgICAgY3Vyc2VzLnJlc2V0X3Byb2dfbW9kZSwgY3Vyc2VzLnRlcm1hdHRycywKKyAgICAgICAgICAgICAgICAgICAgIGN1cnNlcy50ZXJtbmFtZSwgY3Vyc2VzLmVyYXNlY2hhciwgY3Vyc2VzLmdldHN5eF06CisgICAgICAgICAgICBmdW5jKCkKKworICAgICAgICAjIEZ1bmN0aW9ucyB0aGF0IGFjdHVhbGx5IG5lZWQgYXJndW1lbnRzCisgICAgICAgIGlmIGN1cnNlcy50aWdldHN0cigiY25vcm0iKToKKyAgICAgICAgICAgIGN1cnNlcy5jdXJzX3NldCgxKQorICAgICAgICBjdXJzZXMuZGVsYXlfb3V0cHV0KDEpCisgICAgICAgIGN1cnNlcy5lY2hvKCkgOyBjdXJzZXMuZWNobygxKQorCisgICAgICAgIGYgPSB0ZW1wZmlsZS5UZW1wb3JhcnlGaWxlKCkKKyAgICAgICAgc3Rkc2NyLnB1dHdpbihmKQorICAgICAgICBmLnNlZWsoMCkKKyAgICAgICAgY3Vyc2VzLmdldHdpbihmKQorICAgICAgICBmLmNsb3NlKCkKKworICAgICAgICBjdXJzZXMuaGFsZmRlbGF5KDEpCisgICAgICAgIGN1cnNlcy5pbnRyZmx1c2goMSkKKyAgICAgICAgY3Vyc2VzLm1ldGEoMSkKKyAgICAgICAgY3Vyc2VzLm5hcG1zKDEwMCkKKyAgICAgICAgY3Vyc2VzLm5ld3BhZCg1MCw1MCkKKyAgICAgICAgd2luID0gY3Vyc2VzLm5ld3dpbig1LDUpCisgICAgICAgIHdpbiA9IGN1cnNlcy5uZXd3aW4oNSw1LCAxLDEpCisgICAgICAgIGN1cnNlcy5ubCgpIDsgY3Vyc2VzLm5sKDEpCisgICAgICAgIGN1cnNlcy5wdXRwKGInYWJjJykKKyAgICAgICAgY3Vyc2VzLnFpZmx1c2goKQorICAgICAgICBjdXJzZXMucmF3KCkgOyBjdXJzZXMucmF3KDEpCisgICAgICAgIGN1cnNlcy5zZXRzeXgoNSw1KQorICAgICAgICBjdXJzZXMudGlnZXRmbGFnKCdoYycpCisgICAgICAgIGN1cnNlcy50aWdldG51bSgnY28nKQorICAgICAgICBjdXJzZXMudGlnZXRzdHIoJ2NyJykKKyAgICAgICAgY3Vyc2VzLnRwYXJtKGInY3InKQorICAgICAgICBjdXJzZXMudHlwZWFoZWFkKHN5cy5fX3N0ZGluX18uZmlsZW5vKCkpCisgICAgICAgIGN1cnNlcy51bmN0cmwoJ2EnKQorICAgICAgICBjdXJzZXMudW5nZXRjaCgnYScpCisgICAgICAgIGN1cnNlcy51c2VfZW52KDEpCisKKyAgICAgICAgIyBGdW5jdGlvbnMgb25seSBhdmFpbGFibGUgb24gYSBmZXcgcGxhdGZvcm1zCisgICAgICAgIGlmIGN1cnNlcy5oYXNfY29sb3JzKCk6CisgICAgICAgICAgICBjdXJzZXMuc3RhcnRfY29sb3IoKQorICAgICAgICAgICAgY3Vyc2VzLmluaXRfcGFpcigyLCAxLDEpCisgICAgICAgICAgICBjdXJzZXMuY29sb3JfY29udGVudCgxKQorICAgICAgICAgICAgY3Vyc2VzLmNvbG9yX3BhaXIoMikKKyAgICAgICAgICAgIGN1cnNlcy5wYWlyX2NvbnRlbnQoY3Vyc2VzLkNPTE9SX1BBSVJTIC0gMSkKKyAgICAgICAgICAgIGN1cnNlcy5wYWlyX251bWJlcigwKQorCisgICAgICAgICAgICBpZiBoYXNhdHRyKGN1cnNlcywgJ3VzZV9kZWZhdWx0X2NvbG9ycycpOgorICAgICAgICAgICAgICAgIGN1cnNlcy51c2VfZGVmYXVsdF9jb2xvcnMoKQorCisgICAgICAgIGlmIGhhc2F0dHIoY3Vyc2VzLCAna2V5bmFtZScpOgorICAgICAgICAgICAgY3Vyc2VzLmtleW5hbWUoMTMpCisKKyAgICAgICAgaWYgaGFzYXR0cihjdXJzZXMsICdoYXNfa2V5Jyk6CisgICAgICAgICAgICBjdXJzZXMuaGFzX2tleSgxMykKKworICAgICAgICBpZiBoYXNhdHRyKGN1cnNlcywgJ2dldG1vdXNlJyk6CisgICAgICAgICAgICAoYXZhaWxtYXNrLCBvbGRtYXNrKSA9IGN1cnNlcy5tb3VzZW1hc2soY3Vyc2VzLkJVVFRPTjFfUFJFU1NFRCkKKyAgICAgICAgICAgICMgYXZhaWxtYXNrIGluZGljYXRlcyB0aGF0IG1vdXNlIHN0dWZmIG5vdCBhdmFpbGFibGUuCisgICAgICAgICAgICBpZiBhdmFpbG1hc2sgIT0gMDoKKyAgICAgICAgICAgICAgICBjdXJzZXMubW91c2VpbnRlcnZhbCgxMCkKKyAgICAgICAgICAgICAgICAjIGp1c3QgdmVyaWZ5IHRoZXNlIGRvbid0IGNhdXNlIGVycm9ycworICAgICAgICAgICAgICAgIGN1cnNlcy51bmdldG1vdXNlKDAsIDAsIDAsIDAsIGN1cnNlcy5CVVRUT04xX1BSRVNTRUQpCisgICAgICAgICAgICAgICAgbSA9IGN1cnNlcy5nZXRtb3VzZSgpCisKKyAgICAgICAgaWYgaGFzYXR0cihjdXJzZXMsICdpc190ZXJtX3Jlc2l6ZWQnKToKKyAgICAgICAgICAgIGN1cnNlcy5pc190ZXJtX3Jlc2l6ZWQoKnN0ZHNjci5nZXRtYXh5eCgpKQorICAgICAgICBpZiBoYXNhdHRyKGN1cnNlcywgJ3Jlc2l6ZXRlcm0nKToKKyAgICAgICAgICAgIGN1cnNlcy5yZXNpemV0ZXJtKCpzdGRzY3IuZ2V0bWF4eXgoKSkKKyAgICAgICAgaWYgaGFzYXR0cihjdXJzZXMsICdyZXNpemVfdGVybScpOgorICAgICAgICAgICAgY3Vyc2VzLnJlc2l6ZV90ZXJtKCpzdGRzY3IuZ2V0bWF4eXgoKSkKKworICAgIGRlZiB0ZXN0X3VuY3RybChzZWxmKToKKyAgICAgICAgZnJvbSBjdXJzZXMgaW1wb3J0IGFzY2lpCisgICAgICAgIGZvciBjaCwgZXhwZWN0ZWQgaW4gWygnYScsICdhJyksICgnQScsICdBJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnOycsICc7JyksICgnICcsICcgJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnXHg3ZicsICdePycpLCAoJ1xuJywgJ15KJyksICgnXDAnLCAnXkAnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBNZXRhLWJpdCBjaGFyYWN0ZXJzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnXHg4YScsICchXkonKSwgKCdceGMxJywgJyFBJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF06CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFzY2lpLnVuY3RybChjaCksIGV4cGVjdGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY3Vyc2VzLnVuY3RybCBmYWlscyBvbiBjaGFyYWN0ZXIgJXInICUgY2gpCisKKworICAgIGRlZiB0ZXN0X3VzZXJwdHJfd2l0aG91dF9zZXQoc2VsZik6CisgICAgICAgIHcgPSBjdXJzZXMubmV3d2luKDEwLCAxMCkKKyAgICAgICAgcCA9IGN1cnNlcy5wYW5lbC5uZXdfcGFuZWwodykKKyAgICAgICAgIyB0cnkgdG8gYWNjZXNzIHVzZXJwdHIoKSBiZWZvcmUgY2FsbGluZyBzZXRfdXNlcnB0cigpIC0tIHNlZ2ZhdWx0cworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGN1cnNlcy5wYW5lbC5lcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2c9J3VzZXJwdHIgc2hvdWxkIGZhaWwgc2luY2Ugbm90IHNldCcpOgorICAgICAgICAgICAgcC51c2VycHRyKCkKKworICAgIGRlZiB0ZXN0X3VzZXJwdHJfbWVtb3J5X2xlYWsoc2VsZik6CisgICAgICAgIHcgPSBjdXJzZXMubmV3d2luKDEwLCAxMCkKKyAgICAgICAgcCA9IGN1cnNlcy5wYW5lbC5uZXdfcGFuZWwodykKKyAgICAgICAgb2JqID0gb2JqZWN0KCkKKyAgICAgICAgbnJlZnMgPSBzeXMuZ2V0cmVmY291bnQob2JqKQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxMDApOgorICAgICAgICAgICAgcC5zZXRfdXNlcnB0cihvYmopCisKKyAgICAgICAgcC5zZXRfdXNlcnB0cihOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN5cy5nZXRyZWZjb3VudChvYmopLCBucmVmcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAic2V0X3VzZXJwdHIgbGVha2VkIHJlZmVyZW5jZXMiKQorCisgICAgZGVmIHRlc3RfdXNlcnB0cl9zZWdmYXVsdChzZWxmKToKKyAgICAgICAgcGFuZWwgPSBjdXJzZXMucGFuZWwubmV3X3BhbmVsKHNlbGYuc3Rkc2NyKQorICAgICAgICBjbGFzcyBBOgorICAgICAgICAgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgICAgICAgICAgcGFuZWwuc2V0X3VzZXJwdHIoTm9uZSkKKyAgICAgICAgcGFuZWwuc2V0X3VzZXJwdHIoQSgpKQorICAgICAgICBwYW5lbC5zZXRfdXNlcnB0cihOb25lKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihjdXJzZXMsICdyZXNpemV0ZXJtJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAncmVzaXpldGVybSBub3QgYXZhaWxhYmxlJykKKyAgICBkZWYgdGVzdF9yZXNpemVfdGVybShzZWxmKToKKyAgICAgICAgbGluZXMsIGNvbHMgPSBjdXJzZXMuTElORVMsIGN1cnNlcy5DT0xTCisgICAgICAgIG5ld19saW5lcyA9IGxpbmVzIC0gMQorICAgICAgICBuZXdfY29scyA9IGNvbHMgKyAxCisgICAgICAgIGN1cnNlcy5yZXNpemV0ZXJtKG5ld19saW5lcywgbmV3X2NvbHMpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdXJzZXMuTElORVMsIG5ld19saW5lcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdXJzZXMuQ09MUywgbmV3X2NvbHMpCisKKyAgICBkZWYgdGVzdF9pc3N1ZTYyNDMoc2VsZik6CisgICAgICAgIGN1cnNlcy51bmdldGNoKDEwMjUpCisgICAgICAgIHNlbGYuc3Rkc2NyLmdldGtleSgpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKGN1cnNlcywgJ3VuZ2V0X3djaCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICd1bmdldF93Y2ggbm90IGF2YWlsYWJsZScpCisgICAgZGVmIHRlc3RfdW5nZXRfd2NoKHNlbGYpOgorICAgICAgICBzdGRzY3IgPSBzZWxmLnN0ZHNjcgorICAgICAgICBlbmNvZGluZyA9IHN0ZHNjci5lbmNvZGluZworICAgICAgICBmb3IgY2ggaW4gKCdhJywgJ1x4ZTknLCAnXHUyMGFjJywgJ1xVMDAxMEZGRkYnKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBjaC5lbmNvZGUoZW5jb2RpbmcpCisgICAgICAgICAgICBleGNlcHQgVW5pY29kZUVuY29kZUVycm9yOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgY3Vyc2VzLnVuZ2V0X3djaChjaCkKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXJyOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgidW5nZXRfd2NoKCVhKSBmYWlsZWQgd2l0aCBlbmNvZGluZyAlczogJXMiCisgICAgICAgICAgICAgICAgICAgICAgICAgICUgKGNoLCBzdGRzY3IuZW5jb2RpbmcsIGVycikpCisgICAgICAgICAgICByZWFkID0gc3Rkc2NyLmdldF93Y2goKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFkLCBjaCkKKworICAgICAgICAgICAgY29kZSA9IG9yZChjaCkKKyAgICAgICAgICAgIGN1cnNlcy51bmdldF93Y2goY29kZSkKKyAgICAgICAgICAgIHJlYWQgPSBzdGRzY3IuZ2V0X3djaCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWQsIGNoKQorCisgICAgZGVmIHRlc3RfaXNzdWUxMDU3MChzZWxmKToKKyAgICAgICAgYiA9IGN1cnNlcy50cGFybShjdXJzZXMudGlnZXRzdHIoImN1cCIpLCA1LCAzKQorICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUoYiksIGJ5dGVzKQorICAgICAgICBjdXJzZXMucHV0cChiKQorCisgICAgZGVmIHRlc3RfZW5jb2Rpbmcoc2VsZik6CisgICAgICAgIHN0ZHNjciA9IHNlbGYuc3Rkc2NyCisgICAgICAgIGltcG9ydCBjb2RlY3MKKyAgICAgICAgZW5jb2RpbmcgPSBzdGRzY3IuZW5jb2RpbmcKKyAgICAgICAgY29kZWNzLmxvb2t1cChlbmNvZGluZykKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBzdGRzY3IuZW5jb2RpbmcgPSAxMAorCisgICAgICAgIHN0ZHNjci5lbmNvZGluZyA9IGVuY29kaW5nCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGRlbCBzdGRzY3IuZW5jb2RpbmcKKworICAgIGRlZiB0ZXN0X2lzc3VlMjEwODgoc2VsZik6CisgICAgICAgIHN0ZHNjciA9IHNlbGYuc3Rkc2NyCisgICAgICAgICMKKyAgICAgICAgIyBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMjEwODgKKyAgICAgICAgIworICAgICAgICAjIHRoZSBidWc6CisgICAgICAgICMgd2hlbiBjb252ZXJ0aW5nIGN1cnNlcy53aW5kb3cuYWRkY2ggdG8gQXJndW1lbnQgQ2xpbmljCisgICAgICAgICMgdGhlIGZpcnN0IHR3byBwYXJhbWV0ZXJzIHdlcmUgc3dpdGNoZWQuCisKKyAgICAgICAgIyBpZiBzb21lZGF5IHdlIGNhbiByZXByZXNlbnQgdGhlIHNpZ25hdHVyZSBvZiBhZGRjaAorICAgICAgICAjIHdlIHdpbGwgbmVlZCB0byByZXdyaXRlIHRoaXMgdGVzdC4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2lnbmF0dXJlID0gaW5zcGVjdC5zaWduYXR1cmUoc3Rkc2NyLmFkZGNoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzaWduYXR1cmUpCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgIyBub3QgZ2VuZXJhdGluZyBhIHNpZ25hdHVyZSBpcyBmaW5lLgorICAgICAgICAgICAgcGFzcworCisgICAgICAgICMgU28uICBObyBzaWduYXR1cmUgZm9yIGFkZGNoLgorICAgICAgICAjIEJ1dCBBcmd1bWVudCBDbGluaWMgZ2F2ZSB1cyBhIGh1bWFuLXJlYWRhYmxlIGVxdWl2YWxlbnQKKyAgICAgICAgIyBhcyB0aGUgZmlyc3QgbGluZSBvZiB0aGUgZG9jc3RyaW5nLiAgU28gd2UgcGFyc2UgdGhhdCwKKyAgICAgICAgIyBhbmQgZW5zdXJlIHRoYXQgdGhlIHBhcmFtZXRlcnMgYXBwZWFyIGluIHRoZSBjb3JyZWN0IG9yZGVyLgorICAgICAgICAjIFNpbmNlIHRoaXMgaXMgcGFyc2luZyBvdXRwdXQgZnJvbSBBcmd1bWVudCBDbGluaWMsIHdlIGNhbgorICAgICAgICAjIGJlIHJlYXNvbmFibHkgY2VydGFpbiB0aGUgZ2VuZXJhdGVkIHBhcnNpbmcgY29kZSB3aWxsIGJlCisgICAgICAgICMgY29ycmVjdCB0b28uCisgICAgICAgIGh1bWFuX3JlYWRhYmxlX3NpZ25hdHVyZSA9IHN0ZHNjci5hZGRjaC5fX2RvY19fLnNwbGl0KCJcbiIpWzBdCisgICAgICAgIG9mZnNldCA9IGh1bWFuX3JlYWRhYmxlX3NpZ25hdHVyZS5maW5kKCJbeSwgeCxdIikKKyAgICAgICAgYXNzZXJ0IG9mZnNldCA+PSAwLCAiIgorCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgY3Vyc2VzLndyYXBwZXIobWFpbikKLSAgICB1bml0X3Rlc3RzKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZGJtLnB5IGIvTGliL3Rlc3QvdGVzdF9kYm0ucHkKaW5kZXggZDExZDkyNC4uNjIzZDk5MiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9kYm0ucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9kYm0ucHkKQEAgLTYxLDcgKzYxLDcgQEAKICAgICAgICAgcmV0dXJuIGtleXMKIAogICAgIGRlZiB0ZXN0X2Vycm9yKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhzZWxmLm1vZHVsZS5lcnJvciwgSU9FcnJvcikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKHNlbGYubW9kdWxlLmVycm9yLCBPU0Vycm9yKSkKIAogICAgIGRlZiB0ZXN0X2FueWRibV9ub3RfZXhpc3Rpbmcoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGRibS5lcnJvciwgZGJtLm9wZW4sIF9mbmFtZSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZGJtX2R1bWIucHkgYi9MaWIvdGVzdC90ZXN0X2RibV9kdW1iLnB5CmluZGV4IDRmMDNhZTcuLmRjODhjYTYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZGJtX2R1bWIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9kYm1fZHVtYi5weQpAQCAtMywxMCArMywxMiBAQAogIiIiCiAKIGltcG9ydCBpbworaW1wb3J0IG9wZXJhdG9yCiBpbXBvcnQgb3MKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IGRibS5kdW1iIGFzIGR1bWJkYm0KIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAorZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHBhcnRpYWwKIAogX2ZuYW1lID0gc3VwcG9ydC5URVNURk4KIApAQCAtMTgzLDYgKzE4NSw0NyBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgZ290KQogICAgICAgICAgICAgZi5jbG9zZSgpCiAKKyAgICBkZWYgdGVzdF9jb250ZXh0X21hbmFnZXIoc2VsZik6CisgICAgICAgIHdpdGggZHVtYmRibS5vcGVuKF9mbmFtZSwgJ2MnKSBhcyBkYjoKKyAgICAgICAgICAgIGRiWyJkdW1iZGJtIGNvbnRleHQgbWFuYWdlciJdID0gImNvbnRleHQgbWFuYWdlciIKKworICAgICAgICB3aXRoIGR1bWJkYm0ub3BlbihfZm5hbWUsICdyJykgYXMgZGI6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoZGIua2V5cygpKSwgW2IiZHVtYmRibSBjb250ZXh0IG1hbmFnZXIiXSkKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGR1bWJkYm0uZXJyb3IpOgorICAgICAgICAgICAgZGIua2V5cygpCisKKyAgICBkZWYgdGVzdF9jaGVja19jbG9zZWQoc2VsZik6CisgICAgICAgIGYgPSBkdW1iZGJtLm9wZW4oX2ZuYW1lLCAnYycpCisgICAgICAgIGYuY2xvc2UoKQorCisgICAgICAgIGZvciBtZXRoIGluIChwYXJ0aWFsKG9wZXJhdG9yLmRlbGl0ZW0sIGYpLAorICAgICAgICAgICAgICAgICAgICAgcGFydGlhbChvcGVyYXRvci5zZXRpdGVtLCBmLCAnYicpLAorICAgICAgICAgICAgICAgICAgICAgcGFydGlhbChvcGVyYXRvci5nZXRpdGVtLCBmKSwKKyAgICAgICAgICAgICAgICAgICAgIHBhcnRpYWwob3BlcmF0b3IuY29udGFpbnMsIGYpKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoZHVtYmRibS5lcnJvcikgYXMgY206CisgICAgICAgICAgICAgICAgbWV0aCgndGVzdCcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihjbS5leGNlcHRpb24pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiREJNIG9iamVjdCBoYXMgYWxyZWFkeSBiZWVuIGNsb3NlZCIpCisKKyAgICAgICAgZm9yIG1ldGggaW4gKG9wZXJhdG9yLm1ldGhvZGNhbGxlcigna2V5cycpLAorICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3IubWV0aG9kY2FsbGVyKCdpdGVya2V5cycpLAorICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3IubWV0aG9kY2FsbGVyKCdpdGVtcycpLAorICAgICAgICAgICAgICAgICAgICAgbGVuKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoZHVtYmRibS5lcnJvcikgYXMgY206CisgICAgICAgICAgICAgICAgbWV0aChmKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoY20uZXhjZXB0aW9uKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkRCTSBvYmplY3QgaGFzIGFscmVhZHkgYmVlbiBjbG9zZWQiKQorCisgICAgZGVmIHRlc3RfZXZhbChzZWxmKToKKyAgICAgICAgd2l0aCBvcGVuKF9mbmFtZSArICcuZGlyJywgJ3cnKSBhcyBzdHJlYW06CisgICAgICAgICAgICBzdHJlYW0ud3JpdGUoInN0cihwcmludCgnSGFja2VkIScpKSwgMFxuIikKKyAgICAgICAgd2l0aCBzdXBwb3J0LmNhcHR1cmVkX3N0ZG91dCgpIGFzIHN0ZG91dDoKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICAgICAgd2l0aCBkdW1iZGJtLm9wZW4oX2ZuYW1lKSBhcyBmOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dC5nZXR2YWx1ZSgpLCAnJykKKwogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKICAgICAgICAgX2RlbGV0ZV9maWxlcygpCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZGJtX2dudS5weSBiL0xpYi90ZXN0L3Rlc3RfZGJtX2dudS5weQppbmRleCA0ZmI2NmM1Li5hNzgwOGY1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2RibV9nbnUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9kYm1fZ251LnB5CkBAIC04MSw2ICs4MSwxNyBAQAogICAgICAgICBzaXplMiA9IG9zLnBhdGguZ2V0c2l6ZShmaWxlbmFtZSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNpemUxID4gc2l6ZTIgPj0gc2l6ZTApCiAKKyAgICBkZWYgdGVzdF9jb250ZXh0X21hbmFnZXIoc2VsZik6CisgICAgICAgIHdpdGggZ2RibS5vcGVuKGZpbGVuYW1lLCAnYycpIGFzIGRiOgorICAgICAgICAgICAgZGJbImdkYm0gY29udGV4dCBtYW5hZ2VyIl0gPSAiY29udGV4dCBtYW5hZ2VyIgorCisgICAgICAgIHdpdGggZ2RibS5vcGVuKGZpbGVuYW1lLCAncicpIGFzIGRiOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGRiLmtleXMoKSksIFtiImdkYm0gY29udGV4dCBtYW5hZ2VyIl0pCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhnZGJtLmVycm9yKSBhcyBjbToKKyAgICAgICAgICAgIGRiLmtleXMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihjbS5leGNlcHRpb24pLAorICAgICAgICAgICAgICAgICAgICAgICAgICJHREJNIG9iamVjdCBoYXMgYWxyZWFkeSBiZWVuIGNsb3NlZCIpCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2RibV9uZGJtLnB5IGIvTGliL3Rlc3QvdGVzdF9kYm1fbmRibS5weQppbmRleCBiNTdlMWYwLi4yMjkxNTYxIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2RibV9uZGJtLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZGJtX25kYm0ucHkKQEAgLTM3LDUgKzM3LDE4IEBACiAgICAgICAgICAgICBleGNlcHQgZXJyb3I6CiAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCkKIAorICAgIGRlZiB0ZXN0X2NvbnRleHRfbWFuYWdlcihzZWxmKToKKyAgICAgICAgd2l0aCBkYm0ubmRibS5vcGVuKHNlbGYuZmlsZW5hbWUsICdjJykgYXMgZGI6CisgICAgICAgICAgICBkYlsibmRibSBjb250ZXh0IG1hbmFnZXIiXSA9ICJjb250ZXh0IG1hbmFnZXIiCisKKyAgICAgICAgd2l0aCBkYm0ubmRibS5vcGVuKHNlbGYuZmlsZW5hbWUsICdyJykgYXMgZGI6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoZGIua2V5cygpKSwgW2IibmRibSBjb250ZXh0IG1hbmFnZXIiXSkKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGRibS5uZGJtLmVycm9yKSBhcyBjbToKKyAgICAgICAgICAgIGRiLmtleXMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihjbS5leGNlcHRpb24pLAorICAgICAgICAgICAgICAgICAgICAgICAgICJEQk0gb2JqZWN0IGhhcyBhbHJlYWR5IGJlZW4gY2xvc2VkIikKKworCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9kZWNpbWFsLnB5IGIvTGliL3Rlc3QvdGVzdF9kZWNpbWFsLnB5CmluZGV4IDQwMzEzNDcuLmExNzhmNmYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZGVjaW1hbC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2RlY2ltYWwucHkKQEAgLTEwNTcsNiArMTA1NywxMSBAQAogCiAgICAgICAgICAgICAjIGlzc3VlIDY4NTAKICAgICAgICAgICAgICgnYT0tNy4wJywgJzAuMTIzNDUnLCAnYWFhYTAuMScpLAorCisgICAgICAgICAgICAjIGlzc3VlIDIyMDkwCisgICAgICAgICAgICAoJzxeKzE1LjIwJScsICdpbmYnLCAnPDwrSW5maW5pdHklPDw8JyksCisgICAgICAgICAgICAoJ1x4MDc+LCUnLCAnc05hTjEyMzQ1NjcnLCAnc05hTjEyMzQ1NjclJyksCisgICAgICAgICAgICAoJz0xMC4xMCUnLCAnTmFOMTIzJywgJyAgIE5hTjEyMyUnKSwKICAgICAgICAgICAgIF0KICAgICAgICAgZm9yIGZtdCwgZCwgcmVzdWx0IGluIHRlc3RfdmFsdWVzOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoRGVjaW1hbChkKSwgZm10KSwgcmVzdWx0KQpAQCAtMjQwMSwzNyArMjQwNiw1NSBAQAogICAgICAgICBzZWxmLmFzc2VydE5vdElzSW5zdGFuY2UoRGVjaW1hbCgwKSwgbnVtYmVycy5SZWFsKQogCiAgICAgZGVmIHRlc3RfcGlja2xlKHNlbGYpOgotICAgICAgICBEZWNpbWFsID0gc2VsZi5kZWNpbWFsLkRlY2ltYWwKKyAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICBEZWNpbWFsID0gc2VsZi5kZWNpbWFsLkRlY2ltYWwKIAotICAgICAgICBzYXZlZGVjaW1hbCA9IHN5cy5tb2R1bGVzWydkZWNpbWFsJ10KKyAgICAgICAgICAgIHNhdmVkZWNpbWFsID0gc3lzLm1vZHVsZXNbJ2RlY2ltYWwnXQogCi0gICAgICAgICMgUm91bmQgdHJpcAotICAgICAgICBzeXMubW9kdWxlc1snZGVjaW1hbCddID0gc2VsZi5kZWNpbWFsCi0gICAgICAgIGQgPSBEZWNpbWFsKCctMy4xNDE1OTAwMDAnKQotICAgICAgICBwID0gcGlja2xlLmR1bXBzKGQpCi0gICAgICAgIGUgPSBwaWNrbGUubG9hZHMocCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCBlKQorICAgICAgICAgICAgIyBSb3VuZCB0cmlwCisgICAgICAgICAgICBzeXMubW9kdWxlc1snZGVjaW1hbCddID0gc2VsZi5kZWNpbWFsCisgICAgICAgICAgICBkID0gRGVjaW1hbCgnLTMuMTQxNTkwMDAwJykKKyAgICAgICAgICAgIHAgPSBwaWNrbGUuZHVtcHMoZCwgcHJvdG8pCisgICAgICAgICAgICBlID0gcGlja2xlLmxvYWRzKHApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIGUpCiAKLSAgICAgICAgaWYgQzoKLSAgICAgICAgICAgICMgVGVzdCBpbnRlcmNoYW5nZWFiaWxpdHkKLSAgICAgICAgICAgIHggPSBDLkRlY2ltYWwoJy0zLjEyM2U4MTcyMycpCi0gICAgICAgICAgICB5ID0gUC5EZWNpbWFsKCctMy4xMjNlODE3MjMnKQorICAgICAgICAgICAgaWYgQzoKKyAgICAgICAgICAgICAgICAjIFRlc3QgaW50ZXJjaGFuZ2VhYmlsaXR5CisgICAgICAgICAgICAgICAgeCA9IEMuRGVjaW1hbCgnLTMuMTIzZTgxNzIzJykKKyAgICAgICAgICAgICAgICB5ID0gUC5EZWNpbWFsKCctMy4xMjNlODE3MjMnKQogCi0gICAgICAgICAgICBzeXMubW9kdWxlc1snZGVjaW1hbCddID0gQwotICAgICAgICAgICAgc3ggPSBwaWNrbGUuZHVtcHMoeCkKLSAgICAgICAgICAgIHN5cy5tb2R1bGVzWydkZWNpbWFsJ10gPSBQCi0gICAgICAgICAgICByID0gcGlja2xlLmxvYWRzKHN4KQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHIsIFAuRGVjaW1hbCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwociwgeSkKKyAgICAgICAgICAgICAgICBzeXMubW9kdWxlc1snZGVjaW1hbCddID0gQworICAgICAgICAgICAgICAgIHN4ID0gcGlja2xlLmR1bXBzKHgsIHByb3RvKQorICAgICAgICAgICAgICAgIHN5cy5tb2R1bGVzWydkZWNpbWFsJ10gPSBQCisgICAgICAgICAgICAgICAgciA9IHBpY2tsZS5sb2FkcyhzeCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UociwgUC5EZWNpbWFsKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwociwgeSkKIAotICAgICAgICAgICAgc3lzLm1vZHVsZXNbJ2RlY2ltYWwnXSA9IFAKLSAgICAgICAgICAgIHN5ID0gcGlja2xlLmR1bXBzKHkpCi0gICAgICAgICAgICBzeXMubW9kdWxlc1snZGVjaW1hbCddID0gQwotICAgICAgICAgICAgciA9IHBpY2tsZS5sb2FkcyhzeSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShyLCBDLkRlY2ltYWwpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHIsIHgpCisgICAgICAgICAgICAgICAgc3lzLm1vZHVsZXNbJ2RlY2ltYWwnXSA9IFAKKyAgICAgICAgICAgICAgICBzeSA9IHBpY2tsZS5kdW1wcyh5LCBwcm90bykKKyAgICAgICAgICAgICAgICBzeXMubW9kdWxlc1snZGVjaW1hbCddID0gQworICAgICAgICAgICAgICAgIHIgPSBwaWNrbGUubG9hZHMoc3kpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHIsIEMuRGVjaW1hbCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHIsIHgpCiAKLSAgICAgICAgc3lzLm1vZHVsZXNbJ2RlY2ltYWwnXSA9IHNhdmVkZWNpbWFsCisgICAgICAgICAgICAgICAgeCA9IEMuRGVjaW1hbCgnLTMuMTIzZTgxNzIzJykuYXNfdHVwbGUoKQorICAgICAgICAgICAgICAgIHkgPSBQLkRlY2ltYWwoJy0zLjEyM2U4MTcyMycpLmFzX3R1cGxlKCkKKworICAgICAgICAgICAgICAgIHN5cy5tb2R1bGVzWydkZWNpbWFsJ10gPSBDCisgICAgICAgICAgICAgICAgc3ggPSBwaWNrbGUuZHVtcHMoeCwgcHJvdG8pCisgICAgICAgICAgICAgICAgc3lzLm1vZHVsZXNbJ2RlY2ltYWwnXSA9IFAKKyAgICAgICAgICAgICAgICByID0gcGlja2xlLmxvYWRzKHN4KQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShyLCBQLkRlY2ltYWxUdXBsZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHIsIHkpCisKKyAgICAgICAgICAgICAgICBzeXMubW9kdWxlc1snZGVjaW1hbCddID0gUAorICAgICAgICAgICAgICAgIHN5ID0gcGlja2xlLmR1bXBzKHksIHByb3RvKQorICAgICAgICAgICAgICAgIHN5cy5tb2R1bGVzWydkZWNpbWFsJ10gPSBDCisgICAgICAgICAgICAgICAgciA9IHBpY2tsZS5sb2FkcyhzeSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UociwgQy5EZWNpbWFsVHVwbGUpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyLCB4KQorCisgICAgICAgICAgICBzeXMubW9kdWxlc1snZGVjaW1hbCddID0gc2F2ZWRlY2ltYWwKIAogICAgIGRlZiB0ZXN0X2ludChzZWxmKToKICAgICAgICAgRGVjaW1hbCA9IHNlbGYuZGVjaW1hbC5EZWNpbWFsCkBAIC0yNzU1LDYzICsyNzc4LDY0IEBACiAKICAgICBkZWYgdGVzdF9waWNrbGUoc2VsZik6CiAKLSAgICAgICAgQ29udGV4dCA9IHNlbGYuZGVjaW1hbC5Db250ZXh0CisgICAgICAgIGZvciBwcm90byBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgQ29udGV4dCA9IHNlbGYuZGVjaW1hbC5Db250ZXh0CiAKLSAgICAgICAgc2F2ZWRlY2ltYWwgPSBzeXMubW9kdWxlc1snZGVjaW1hbCddCisgICAgICAgICAgICBzYXZlZGVjaW1hbCA9IHN5cy5tb2R1bGVzWydkZWNpbWFsJ10KIAotICAgICAgICAjIFJvdW5kIHRyaXAKLSAgICAgICAgc3lzLm1vZHVsZXNbJ2RlY2ltYWwnXSA9IHNlbGYuZGVjaW1hbAotICAgICAgICBjID0gQ29udGV4dCgpCi0gICAgICAgIGUgPSBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKGMpKQorICAgICAgICAgICAgIyBSb3VuZCB0cmlwCisgICAgICAgICAgICBzeXMubW9kdWxlc1snZGVjaW1hbCddID0gc2VsZi5kZWNpbWFsCisgICAgICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgICAgICBlID0gcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhjLCBwcm90bykpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLnByZWMsIGUucHJlYykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLkVtaW4sIGUuRW1pbikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLkVtYXgsIGUuRW1heCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLnJvdW5kaW5nLCBlLnJvdW5kaW5nKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuY2FwaXRhbHMsIGUuY2FwaXRhbHMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5jbGFtcCwgZS5jbGFtcCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmZsYWdzLCBlLmZsYWdzKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMudHJhcHMsIGUudHJhcHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMucHJlYywgZS5wcmVjKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLkVtaW4sIGUuRW1pbikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5FbWF4LCBlLkVtYXgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMucm91bmRpbmcsIGUucm91bmRpbmcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuY2FwaXRhbHMsIGUuY2FwaXRhbHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuY2xhbXAsIGUuY2xhbXApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuZmxhZ3MsIGUuZmxhZ3MpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMudHJhcHMsIGUudHJhcHMpCiAKLSAgICAgICAgIyBUZXN0IGludGVyY2hhbmdlYWJpbGl0eQotICAgICAgICBjb21iaW5hdGlvbnMgPSBbKEMsIFApLCAoUCwgQyldIGlmIEMgZWxzZSBbKFAsIFApXQotICAgICAgICBmb3IgZHVtcGVyLCBsb2FkZXIgaW4gY29tYmluYXRpb25zOgotICAgICAgICAgICAgZm9yIHJpLCBfIGluIGVudW1lcmF0ZShSb3VuZGluZ01vZGVzKToKLSAgICAgICAgICAgICAgICBmb3IgZmksIF8gaW4gZW51bWVyYXRlKE9yZGVyZWRTaWduYWxzW2R1bXBlcl0pOgotICAgICAgICAgICAgICAgICAgICBmb3IgdGksIF8gaW4gZW51bWVyYXRlKE9yZGVyZWRTaWduYWxzW2R1bXBlcl0pOgorICAgICAgICAgICAgIyBUZXN0IGludGVyY2hhbmdlYWJpbGl0eQorICAgICAgICAgICAgY29tYmluYXRpb25zID0gWyhDLCBQKSwgKFAsIEMpXSBpZiBDIGVsc2UgWyhQLCBQKV0KKyAgICAgICAgICAgIGZvciBkdW1wZXIsIGxvYWRlciBpbiBjb21iaW5hdGlvbnM6CisgICAgICAgICAgICAgICAgZm9yIHJpLCBfIGluIGVudW1lcmF0ZShSb3VuZGluZ01vZGVzKToKKyAgICAgICAgICAgICAgICAgICAgZm9yIGZpLCBfIGluIGVudW1lcmF0ZShPcmRlcmVkU2lnbmFsc1tkdW1wZXJdKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciB0aSwgXyBpbiBlbnVtZXJhdGUoT3JkZXJlZFNpZ25hbHNbZHVtcGVyXSk6CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIHByZWMgPSByYW5kb20ucmFuZHJhbmdlKDEsIDEwMCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGVtaW4gPSByYW5kb20ucmFuZHJhbmdlKC0xMDAsIDApCi0gICAgICAgICAgICAgICAgICAgICAgICBlbWF4ID0gcmFuZG9tLnJhbmRyYW5nZSgxLCAxMDApCi0gICAgICAgICAgICAgICAgICAgICAgICBjYXBzID0gcmFuZG9tLnJhbmRyYW5nZSgyKQotICAgICAgICAgICAgICAgICAgICAgICAgY2xhbXAgPSByYW5kb20ucmFuZHJhbmdlKDIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlYyA9IHJhbmRvbS5yYW5kcmFuZ2UoMSwgMTAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtaW4gPSByYW5kb20ucmFuZHJhbmdlKC0xMDAsIDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1heCA9IHJhbmRvbS5yYW5kcmFuZ2UoMSwgMTAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcHMgPSByYW5kb20ucmFuZHJhbmdlKDIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhbXAgPSByYW5kb20ucmFuZHJhbmdlKDIpCiAKLSAgICAgICAgICAgICAgICAgICAgICAgICMgT25lIG1vZHVsZSBkdW1wcwotICAgICAgICAgICAgICAgICAgICAgICAgc3lzLm1vZHVsZXNbJ2RlY2ltYWwnXSA9IGR1bXBlcgotICAgICAgICAgICAgICAgICAgICAgICAgYyA9IGR1bXBlci5Db250ZXh0KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlYz1wcmVjLCBFbWluPWVtaW4sIEVtYXg9ZW1heCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdW5kaW5nPVJvdW5kaW5nTW9kZXNbcmldLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FwaXRhbHM9Y2FwcywgY2xhbXA9Y2xhbXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncz1PcmRlcmVkU2lnbmFsc1tkdW1wZXJdWzpmaV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFwcz1PcmRlcmVkU2lnbmFsc1tkdW1wZXJdWzp0aV0KLSAgICAgICAgICAgICAgICAgICAgICAgICkKLSAgICAgICAgICAgICAgICAgICAgICAgIHMgPSBwaWNrbGUuZHVtcHMoYykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIE9uZSBtb2R1bGUgZHVtcHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXMubW9kdWxlc1snZGVjaW1hbCddID0gZHVtcGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYyA9IGR1bXBlci5Db250ZXh0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWM9cHJlYywgRW1pbj1lbWluLCBFbWF4PWVtYXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm91bmRpbmc9Um91bmRpbmdNb2Rlc1tyaV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FwaXRhbHM9Y2FwcywgY2xhbXA9Y2xhbXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3M9T3JkZXJlZFNpZ25hbHNbZHVtcGVyXVs6ZmldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYXBzPU9yZGVyZWRTaWduYWxzW2R1bXBlcl1bOnRpXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzID0gcGlja2xlLmR1bXBzKGMsIHByb3RvKQogCi0gICAgICAgICAgICAgICAgICAgICAgICAjIFRoZSBvdGhlciBtb2R1bGUgbG9hZHMKLSAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5tb2R1bGVzWydkZWNpbWFsJ10gPSBsb2FkZXIKLSAgICAgICAgICAgICAgICAgICAgICAgIGQgPSBwaWNrbGUubG9hZHMocykKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShkLCBsb2FkZXIuQ29udGV4dCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFRoZSBvdGhlciBtb2R1bGUgbG9hZHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXMubW9kdWxlc1snZGVjaW1hbCddID0gbG9hZGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZCA9IHBpY2tsZS5sb2FkcyhzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShkLCBsb2FkZXIuQ29udGV4dCkKIAotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLnByZWMsIHByZWMpCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuRW1pbiwgZW1pbikKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5FbWF4LCBlbWF4KQotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLnJvdW5kaW5nLCBSb3VuZGluZ01vZGVzW3JpXSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5jYXBpdGFscywgY2FwcykKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5jbGFtcCwgY2xhbXApCi0gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnRfc2lnbmFscyhzZWxmLCBkLCAnZmxhZ3MnLCBPcmRlcmVkU2lnbmFsc1tsb2FkZXJdWzpmaV0pCi0gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnRfc2lnbmFscyhzZWxmLCBkLCAndHJhcHMnLCBPcmRlcmVkU2lnbmFsc1tsb2FkZXJdWzp0aV0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLnByZWMsIHByZWMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLkVtaW4sIGVtaW4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLkVtYXgsIGVtYXgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLnJvdW5kaW5nLCBSb3VuZGluZ01vZGVzW3JpXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuY2FwaXRhbHMsIGNhcHMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmNsYW1wLCBjbGFtcCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnRfc2lnbmFscyhzZWxmLCBkLCAnZmxhZ3MnLCBPcmRlcmVkU2lnbmFsc1tsb2FkZXJdWzpmaV0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0X3NpZ25hbHMoc2VsZiwgZCwgJ3RyYXBzJywgT3JkZXJlZFNpZ25hbHNbbG9hZGVyXVs6dGldKQogCi0gICAgICAgIHN5cy5tb2R1bGVzWydkZWNpbWFsJ10gPSBzYXZlZGVjaW1hbAorICAgICAgICAgICAgc3lzLm1vZHVsZXNbJ2RlY2ltYWwnXSA9IHNhdmVkZWNpbWFsCiAKICAgICBkZWYgdGVzdF9lcXVhbGl0eV93aXRoX290aGVyX3R5cGVzKHNlbGYpOgogICAgICAgICBEZWNpbWFsID0gc2VsZi5kZWNpbWFsLkRlY2ltYWwKQEAgLTU0MTIsNyArNTQzNiw3IEBACiAgICAgYWxsX3Rlc3RzLmluc2VydCgwLCBDaGVja0F0dHJpYnV0ZXMpCiAKIAotZGVmIHRlc3RfbWFpbihhcml0aD1GYWxzZSwgdmVyYm9zZT1Ob25lLCB0b2RvX3Rlc3RzPU5vbmUsIGRlYnVnPU5vbmUpOgorZGVmIHRlc3RfbWFpbihhcml0aD1Ob25lLCB2ZXJib3NlPU5vbmUsIHRvZG9fdGVzdHM9Tm9uZSwgZGVidWc9Tm9uZSk6CiAgICAgIiIiIEV4ZWN1dGUgdGhlIHRlc3RzLgogCiAgICAgUnVucyBhbGwgYXJpdGhtZXRpYyB0ZXN0cyBpZiBhcml0aCBpcyBUcnVlIG9yIGlmIHRoZSAiZGVjaW1hbCIgcmVzb3VyY2UKQEAgLTU0MjIsNyArNTQ0Niw3IEBACiAgICAgaW5pdChDKQogICAgIGluaXQoUCkKICAgICBnbG9iYWwgVEVTVF9BTEwsIERFQlVHCi0gICAgVEVTVF9BTEwgPSBhcml0aCBvciBpc19yZXNvdXJjZV9lbmFibGVkKCdkZWNpbWFsJykKKyAgICBURVNUX0FMTCA9IGFyaXRoIGlmIGFyaXRoIGlzIG5vdCBOb25lIGVsc2UgaXNfcmVzb3VyY2VfZW5hYmxlZCgnZGVjaW1hbCcpCiAgICAgREVCVUcgPSBkZWJ1ZwogCiAgICAgaWYgdG9kb190ZXN0cyBpcyBOb25lOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9kZXF1ZS5weSBiL0xpYi90ZXN0L3Rlc3RfZGVxdWUucHkKaW5kZXggYTg0ODdkMi4uNWVjYmM3MyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9kZXF1ZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2RlcXVlLnB5CkBAIC00NzQsMTYgKzQ3NCwxNyBAQAogCiAgICAgZGVmIHRlc3RfaXRlcmF0b3JfcGlja2xlKHNlbGYpOgogICAgICAgICBkYXRhID0gZGVxdWUocmFuZ2UoMjAwKSkKLSAgICAgICAgaXQgPSBpdG9yZyA9IGl0ZXIoZGF0YSkKLSAgICAgICAgZCA9IHBpY2tsZS5kdW1wcyhpdCkKLSAgICAgICAgaXQgPSBwaWNrbGUubG9hZHMoZCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGl0b3JnKSwgdHlwZShpdCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpdCksIGxpc3QoZGF0YSkpCisgICAgICAgIGZvciBwcm90byBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgaXQgPSBpdG9yZyA9IGl0ZXIoZGF0YSkKKyAgICAgICAgICAgIGQgPSBwaWNrbGUuZHVtcHMoaXQsIHByb3RvKQorICAgICAgICAgICAgaXQgPSBwaWNrbGUubG9hZHMoZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShpdG9yZyksIHR5cGUoaXQpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGl0KSwgbGlzdChkYXRhKSkKIAotICAgICAgICBpdCA9IHBpY2tsZS5sb2FkcyhkKQotICAgICAgICBuZXh0KGl0KQotICAgICAgICBkID0gcGlja2xlLmR1bXBzKGl0KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoaXQpLCBsaXN0KGRhdGEpWzE6XSkKKyAgICAgICAgICAgIGl0ID0gcGlja2xlLmxvYWRzKGQpCisgICAgICAgICAgICBuZXh0KGl0KQorICAgICAgICAgICAgZCA9IHBpY2tsZS5kdW1wcyhpdCwgcHJvdG8pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoaXQpLCBsaXN0KGRhdGEpWzE6XSkKIAogICAgIGRlZiB0ZXN0X2RlZXBjb3B5KHNlbGYpOgogICAgICAgICBtdXQgPSBbMTBdCkBAIC01NDMsOCArNTQ0LDggQEAKICAgICAgICAgY2hlY2sgPSBzZWxmLmNoZWNrX3NpemVvZgogICAgICAgICBjaGVjayhkZXF1ZSgpLCBiYXNlc2l6ZSArIGJsb2Nrc2l6ZSkKICAgICAgICAgY2hlY2soZGVxdWUoJ2EnKSwgYmFzZXNpemUgKyBibG9ja3NpemUpCi0gICAgICAgIGNoZWNrKGRlcXVlKCdhJyAqIChCTE9DS0xFTiAvLyAyKSksIGJhc2VzaXplICsgYmxvY2tzaXplKQotICAgICAgICBjaGVjayhkZXF1ZSgnYScgKiAoQkxPQ0tMRU4gLy8gMiArIDEpKSwgYmFzZXNpemUgKyAyICogYmxvY2tzaXplKQorICAgICAgICBjaGVjayhkZXF1ZSgnYScgKiAoQkxPQ0tMRU4gLSAxKSksIGJhc2VzaXplICsgYmxvY2tzaXplKQorICAgICAgICBjaGVjayhkZXF1ZSgnYScgKiBCTE9DS0xFTiksIGJhc2VzaXplICsgMiAqIGJsb2Nrc2l6ZSkKICAgICAgICAgY2hlY2soZGVxdWUoJ2EnICogKDQyICogQkxPQ0tMRU4pKSwgYmFzZXNpemUgKyA0MyAqIGJsb2Nrc2l6ZSkKIAogY2xhc3MgVGVzdFZhcmlvdXNJdGVyYXRvckFyZ3ModW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtNjE0LDExICs2MTUsMTIgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGQpLCB0eXBlKGUpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoZCksIGxpc3QoZSkpCiAKLSAgICAgICAgcyA9IHBpY2tsZS5kdW1wcyhkKQotICAgICAgICBlID0gcGlja2xlLmxvYWRzKHMpCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoaWQoZCksIGlkKGUpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoZCksIHR5cGUoZSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChkKSwgbGlzdChlKSkKKyAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICBzID0gcGlja2xlLmR1bXBzKGQsIHByb3RvKQorICAgICAgICAgICAgZSA9IHBpY2tsZS5sb2FkcyhzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChpZChkKSwgaWQoZSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoZCksIHR5cGUoZSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoZCksIGxpc3QoZSkpCiAKICAgICAgICAgZCA9IERlcXVlKCdhYmNkZScsIG1heGxlbj00KQogCkBAIC02MzAsMTEgKzYzMiwxMiBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoZCksIHR5cGUoZSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChkKSwgbGlzdChlKSkKIAotICAgICAgICBzID0gcGlja2xlLmR1bXBzKGQpCi0gICAgICAgIGUgPSBwaWNrbGUubG9hZHMocykKLSAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChpZChkKSwgaWQoZSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShkKSwgdHlwZShlKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGQpLCBsaXN0KGUpKQorICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIHMgPSBwaWNrbGUuZHVtcHMoZCwgcHJvdG8pCisgICAgICAgICAgICBlID0gcGlja2xlLmxvYWRzKHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGlkKGQpLCBpZChlKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShkKSwgdHlwZShlKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChkKSwgbGlzdChlKSkKIAogIyMgICAgZGVmIHRlc3RfcGlja2xlKHNlbGYpOgogIyMgICAgICAgIGQgPSBEZXF1ZSgnYWJjJykKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZGVzY3IucHkgYi9MaWIvdGVzdC90ZXN0X2Rlc2NyLnB5CmluZGV4IDFhODkxYTguLjY0YTRhMzYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZGVzY3IucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9kZXNjci5weQpAQCAtMSw4ICsxLDExIEBACiBpbXBvcnQgYnVpbHRpbnMKK2ltcG9ydCBjb3B5cmVnCiBpbXBvcnQgZ2MKK2ltcG9ydCBpdGVydG9vbHMKK2ltcG9ydCBtYXRoCitpbXBvcnQgcGlja2xlCiBpbXBvcnQgc3lzCiBpbXBvcnQgdHlwZXMKLWltcG9ydCBtYXRoCiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCB3ZWFrcmVmCiAKQEAgLTE4LDcgKzIxLDggQEAKICAgICAgICAgICAgICdhZGQnOiAnKycsCiAgICAgICAgICAgICAnc3ViJzogJy0nLAogICAgICAgICAgICAgJ211bCc6ICcqJywKLSAgICAgICAgICAgICdkaXYnOiAnLycsCisgICAgICAgICAgICAndHJ1ZWRpdic6ICcvJywKKyAgICAgICAgICAgICdmbG9vcmRpdic6ICcvLycsCiAgICAgICAgICAgICAnZGl2bW9kJzogJ2Rpdm1vZCcsCiAgICAgICAgICAgICAncG93JzogJyoqJywKICAgICAgICAgICAgICdsc2hpZnQnOiAnPDwnLApAQCAtNDksOCArNTMsNiBAQAogICAgICAgICAgICAgJ2ludmVydCc6ICd+JywKICAgICAgICAgICAgICdpbnQnOiAnaW50JywKICAgICAgICAgICAgICdmbG9hdCc6ICdmbG9hdCcsCi0gICAgICAgICAgICAnb2N0JzogJ29jdCcsCi0gICAgICAgICAgICAnaGV4JzogJ2hleCcsCiAgICAgICAgIH0KIAogICAgICAgICBmb3IgbmFtZSwgZXhwciBpbiBsaXN0KHNlbGYudW5vcHMuaXRlbXMoKSk6CkBAIC03OSwxMiArODEsNiBAQAogICAgIGRlZiBiaW5vcF90ZXN0KHNlbGYsIGEsIGIsIHJlcywgZXhwcj0iYStiIiwgbWV0aD0iX19hZGRfXyIpOgogICAgICAgICBkID0geydhJzogYSwgJ2InOiBifQogCi0gICAgICAgICMgWFhYIEhhY2sgc28gdGhpcyBwYXNzZXMgYmVmb3JlIDIuMyB3aGVuIC1RbmV3IGlzIHNwZWNpZmllZC4KLSAgICAgICAgaWYgbWV0aCA9PSAiX19kaXZfXyIgYW5kIDEvMiA9PSAwLjU6Ci0gICAgICAgICAgICBtZXRoID0gIl9fdHJ1ZWRpdl9fIgotCi0gICAgICAgIGlmIG1ldGggPT0gJ19fZGl2bW9kX18nOiBwYXNzCi0KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKGV4cHIsIGQpLCByZXMpCiAgICAgICAgIHQgPSB0eXBlKGEpCiAgICAgICAgIG0gPSBnZXRhdHRyKHQsIG1ldGgpCkBAIC0yMTgsNyArMjE0LDcgQEAKICAgICBkZWYgbnVtYmVyX29wZXJhdG9ycyhzZWxmLCBhLCBiLCBza2lwPVtdKToKICAgICAgICAgZGljdCA9IHsnYSc6IGEsICdiJzogYn0KIAotICAgICAgICBmb3IgbmFtZSwgZXhwciBpbiBsaXN0KHNlbGYuYmlub3BzLml0ZW1zKCkpOgorICAgICAgICBmb3IgbmFtZSwgZXhwciBpbiBzZWxmLmJpbm9wcy5pdGVtcygpOgogICAgICAgICAgICAgaWYgbmFtZSBub3QgaW4gc2tpcDoKICAgICAgICAgICAgICAgICBuYW1lID0gIl9fJXNfXyIgJSBuYW1lCiAgICAgICAgICAgICAgICAgaWYgaGFzYXR0cihhLCBuYW1lKToKQEAgLTI1OCw3ICsyNTQsNyBAQAogICAgICAgICAjIFRlc3RpbmcgY29tcGxleCBvcGVyYXRpb25zLi4uCiAgICAgICAgIHNlbGYubnVtYmVyX29wZXJhdG9ycygxMDAuMGosIDMuMGosIHNraXA9WydsdCcsICdsZScsICdndCcsICdnZScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbnQnLCAnZmxvYXQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGl2bW9kJywgJ21vZCddKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZmxvb3JkaXYnLCAnZGl2bW9kJywgJ21vZCddKQogCiAgICAgICAgIGNsYXNzIE51bWJlcihjb21wbGV4KToKICAgICAgICAgICAgIF9fc2xvdHNfXyA9IFsncHJlYyddCkBAIC0xMTQ2LDcgKzExNDIsNyBAQAogICAgICAgICBleGNlcHQgKFR5cGVFcnJvciwgVW5pY29kZUVuY29kZUVycm9yKToKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJhaXNlIFRlc3RGYWlsZWQoIltjaHIoMTI4KV0gc2xvdHMgbm90IGNhdWdodCIpCisgICAgICAgICAgICBzZWxmLmZhaWwoIltjaHIoMTI4KV0gc2xvdHMgbm90IGNhdWdodCIpCiAKICAgICAgICAgIyBUZXN0IGxlYWtzCiAgICAgICAgIGNsYXNzIENvdW50ZWQob2JqZWN0KToKQEAgLTE3OTcsNiArMTc5Myw3IEBACiAgICAgICAgICAgICAoIl9fdHJ1bmNfXyIsIGludCwgemVybywgc2V0KCksIHt9KSwKICAgICAgICAgICAgICgiX19jZWlsX18iLCBtYXRoLmNlaWwsIHplcm8sIHNldCgpLCB7fSksCiAgICAgICAgICAgICAoIl9fZGlyX18iLCBkaXIsIGVtcHR5X3NlcSwgc2V0KCksIHt9KSwKKyAgICAgICAgICAgICgiX19yb3VuZF9fIiwgcm91bmQsIHplcm8sIHNldCgpLCB7fSksCiAgICAgICAgICAgICBdCiAKICAgICAgICAgY2xhc3MgQ2hlY2tlcihvYmplY3QpOgpAQCAtMjI1OCw3ICsyMjU1LDkgQEAKICAgICAgICAgbWluc3RhbmNlID0gTSgibSIpCiAgICAgICAgIG1pbnN0YW5jZS5iID0gMgogICAgICAgICBtaW5zdGFuY2UuYSA9IDEKLSAgICAgICAgbmFtZXMgPSBbeCBmb3IgeCBpbiBkaXIobWluc3RhbmNlKSBpZiB4IG5vdCBpbiBbIl9fbmFtZV9fIiwgIl9fZG9jX18iXV0KKyAgICAgICAgZGVmYXVsdF9hdHRyaWJ1dGVzID0gWydfX25hbWVfXycsICdfX2RvY19fJywgJ19fcGFja2FnZV9fJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfX2xvYWRlcl9fJywgJ19fc3BlY19fJ10KKyAgICAgICAgbmFtZXMgPSBbeCBmb3IgeCBpbiBkaXIobWluc3RhbmNlKSBpZiB4IG5vdCBpbiBkZWZhdWx0X2F0dHJpYnV0ZXNdCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmFtZXMsIFsnYScsICdiJ10pCiAKICAgICAgICAgY2xhc3MgTTIoTSk6CkBAIC0zMTUxLDE3NiArMzE1MCw2IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuYSwgMSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FuX2RlbGV0ZV9kaWN0KGUpLCBjYW5fZGVsZXRlX2RpY3QoVmFsdWVFcnJvcigpKSkKIAotICAgIGRlZiB0ZXN0X3BpY2tsZXMoc2VsZik6Ci0gICAgICAgICMgVGVzdGluZyBwaWNrbGluZyBhbmQgY29weWluZyBuZXctc3R5bGUgY2xhc3NlcyBhbmQgb2JqZWN0cy4uLgotICAgICAgICBpbXBvcnQgcGlja2xlCi0KLSAgICAgICAgZGVmIHNvcnRlZGl0ZW1zKGQpOgotICAgICAgICAgICAgTCA9IGxpc3QoZC5pdGVtcygpKQotICAgICAgICAgICAgTC5zb3J0KCkKLSAgICAgICAgICAgIHJldHVybiBMCi0KLSAgICAgICAgZ2xvYmFsIEMKLSAgICAgICAgY2xhc3MgQyhvYmplY3QpOgotICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGEsIGIpOgotICAgICAgICAgICAgICAgIHN1cGVyKEMsIHNlbGYpLl9faW5pdF9fKCkKLSAgICAgICAgICAgICAgICBzZWxmLmEgPSBhCi0gICAgICAgICAgICAgICAgc2VsZi5iID0gYgotICAgICAgICAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgICAgICAgICAgICAgIHJldHVybiAiQyglciwgJXIpIiAlIChzZWxmLmEsIHNlbGYuYikKLQotICAgICAgICBnbG9iYWwgQzEKLSAgICAgICAgY2xhc3MgQzEobGlzdCk6Ci0gICAgICAgICAgICBkZWYgX19uZXdfXyhjbHMsIGEsIGIpOgotICAgICAgICAgICAgICAgIHJldHVybiBzdXBlcihDMSwgY2xzKS5fX25ld19fKGNscykKLSAgICAgICAgICAgIGRlZiBfX2dldG5ld2FyZ3NfXyhzZWxmKToKLSAgICAgICAgICAgICAgICByZXR1cm4gKHNlbGYuYSwgc2VsZi5iKQotICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGEsIGIpOgotICAgICAgICAgICAgICAgIHNlbGYuYSA9IGEKLSAgICAgICAgICAgICAgICBzZWxmLmIgPSBiCi0gICAgICAgICAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJDMSglciwgJXIpPCVyPiIgJSAoc2VsZi5hLCBzZWxmLmIsIGxpc3Qoc2VsZikpCi0KLSAgICAgICAgZ2xvYmFsIEMyCi0gICAgICAgIGNsYXNzIEMyKGludCk6Ci0gICAgICAgICAgICBkZWYgX19uZXdfXyhjbHMsIGEsIGIsIHZhbD0wKToKLSAgICAgICAgICAgICAgICByZXR1cm4gc3VwZXIoQzIsIGNscykuX19uZXdfXyhjbHMsIHZhbCkKLSAgICAgICAgICAgIGRlZiBfX2dldG5ld2FyZ3NfXyhzZWxmKToKLSAgICAgICAgICAgICAgICByZXR1cm4gKHNlbGYuYSwgc2VsZi5iLCBpbnQoc2VsZikpCi0gICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgYSwgYiwgdmFsPTApOgotICAgICAgICAgICAgICAgIHNlbGYuYSA9IGEKLSAgICAgICAgICAgICAgICBzZWxmLmIgPSBiCi0gICAgICAgICAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJDMiglciwgJXIpPCVyPiIgJSAoc2VsZi5hLCBzZWxmLmIsIGludChzZWxmKSkKLQotICAgICAgICBnbG9iYWwgQzMKLSAgICAgICAgY2xhc3MgQzMob2JqZWN0KToKLSAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmb28pOgotICAgICAgICAgICAgICAgIHNlbGYuZm9vID0gZm9vCi0gICAgICAgICAgICBkZWYgX19nZXRzdGF0ZV9fKHNlbGYpOgotICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmZvbwotICAgICAgICAgICAgZGVmIF9fc2V0c3RhdGVfXyhzZWxmLCBmb28pOgotICAgICAgICAgICAgICAgIHNlbGYuZm9vID0gZm9vCi0KLSAgICAgICAgZ2xvYmFsIEM0Y2xhc3NpYywgQzQKLSAgICAgICAgY2xhc3MgQzRjbGFzc2ljOiAjIGNsYXNzaWMKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgY2xhc3MgQzQoQzRjbGFzc2ljLCBvYmplY3QpOiAjIG1peGVkIGluaGVyaXRhbmNlCi0gICAgICAgICAgICBwYXNzCi0KLSAgICAgICAgZm9yIGJpbiBpbiAwLCAxOgotICAgICAgICAgICAgZm9yIGNscyBpbiBDLCBDMSwgQzI6Ci0gICAgICAgICAgICAgICAgcyA9IHBpY2tsZS5kdW1wcyhjbHMsIGJpbikKLSAgICAgICAgICAgICAgICBjbHMyID0gcGlja2xlLmxvYWRzKHMpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhjbHMyLCBjbHMpCi0KLSAgICAgICAgICAgIGEgPSBDMSgxLCAyKTsgYS5hcHBlbmQoNDIpOyBhLmFwcGVuZCgyNCkKLSAgICAgICAgICAgIGIgPSBDMigiaGVsbG8iLCAid29ybGQiLCA0MikKLSAgICAgICAgICAgIHMgPSBwaWNrbGUuZHVtcHMoKGEsIGIpLCBiaW4pCi0gICAgICAgICAgICB4LCB5ID0gcGlja2xlLmxvYWRzKHMpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguX19jbGFzc19fLCBhLl9fY2xhc3NfXykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkaXRlbXMoeC5fX2RpY3RfXyksIHNvcnRlZGl0ZW1zKGEuX19kaWN0X18pKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh5Ll9fY2xhc3NfXywgYi5fX2NsYXNzX18pCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZGl0ZW1zKHkuX19kaWN0X18pLCBzb3J0ZWRpdGVtcyhiLl9fZGljdF9fKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcih4KSwgcmVwcihhKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcih5KSwgcmVwcihiKSkKLSAgICAgICAgICAgICMgVGVzdCBmb3IgX19nZXRzdGF0ZV9fIGFuZCBfX3NldHN0YXRlX18gb24gbmV3IHN0eWxlIGNsYXNzCi0gICAgICAgICAgICB1ID0gQzMoNDIpCi0gICAgICAgICAgICBzID0gcGlja2xlLmR1bXBzKHUsIGJpbikKLSAgICAgICAgICAgIHYgPSBwaWNrbGUubG9hZHMocykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodS5fX2NsYXNzX18sIHYuX19jbGFzc19fKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1LmZvbywgdi5mb28pCi0gICAgICAgICAgICAjIFRlc3QgZm9yIHBpY2tsYWJpbGl0eSBvZiBoeWJyaWQgY2xhc3MKLSAgICAgICAgICAgIHUgPSBDNCgpCi0gICAgICAgICAgICB1LmZvbyA9IDQyCi0gICAgICAgICAgICBzID0gcGlja2xlLmR1bXBzKHUsIGJpbikKLSAgICAgICAgICAgIHYgPSBwaWNrbGUubG9hZHMocykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodS5fX2NsYXNzX18sIHYuX19jbGFzc19fKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1LmZvbywgdi5mb28pCi0KLSAgICAgICAgIyBUZXN0aW5nIGNvcHkuZGVlcGNvcHkoKQotICAgICAgICBpbXBvcnQgY29weQotICAgICAgICBmb3IgY2xzIGluIEMsIEMxLCBDMjoKLSAgICAgICAgICAgIGNsczIgPSBjb3B5LmRlZXBjb3B5KGNscykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoY2xzMiwgY2xzKQotCi0gICAgICAgIGEgPSBDMSgxLCAyKTsgYS5hcHBlbmQoNDIpOyBhLmFwcGVuZCgyNCkKLSAgICAgICAgYiA9IEMyKCJoZWxsbyIsICJ3b3JsZCIsIDQyKQotICAgICAgICB4LCB5ID0gY29weS5kZWVwY29weSgoYSwgYikpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5fX2NsYXNzX18sIGEuX19jbGFzc19fKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZGl0ZW1zKHguX19kaWN0X18pLCBzb3J0ZWRpdGVtcyhhLl9fZGljdF9fKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh5Ll9fY2xhc3NfXywgYi5fX2NsYXNzX18pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkaXRlbXMoeS5fX2RpY3RfXyksIHNvcnRlZGl0ZW1zKGIuX19kaWN0X18pKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoeCksIHJlcHIoYSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcih5KSwgcmVwcihiKSkKLQotICAgIGRlZiB0ZXN0X3BpY2tsZV9zbG90cyhzZWxmKToKLSAgICAgICAgIyBUZXN0aW5nIHBpY2tsaW5nIG9mIGNsYXNzZXMgd2l0aCBfX3Nsb3RzX18gLi4uCi0gICAgICAgIGltcG9ydCBwaWNrbGUKLSAgICAgICAgIyBQaWNrbGluZyBvZiBjbGFzc2VzIHdpdGggX19zbG90c19fIGJ1dCB3aXRob3V0IF9fZ2V0c3RhdGVfXyBzaG91bGQgZmFpbAotICAgICAgICAjIChpZiB1c2luZyBwcm90b2NvbCAwIG9yIDEpCi0gICAgICAgIGdsb2JhbCBCLCBDLCBELCBFCi0gICAgICAgIGNsYXNzIEIob2JqZWN0KToKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZm9yIGJhc2UgaW4gW29iamVjdCwgQl06Ci0gICAgICAgICAgICBjbGFzcyBDKGJhc2UpOgotICAgICAgICAgICAgICAgIF9fc2xvdHNfXyA9IFsnYSddCi0gICAgICAgICAgICBjbGFzcyBEKEMpOgotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBwaWNrbGUuZHVtcHMoQygpLCAwKQotICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkIGZhaWw6IHBpY2tsZSBDIGluc3RhbmNlIC0gJXMiICUgYmFzZSkKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBwaWNrbGUuZHVtcHMoQygpLCAwKQotICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkIGZhaWw6IHBpY2tsZSBEIGluc3RhbmNlIC0gJXMiICUgYmFzZSkKLSAgICAgICAgICAgICMgR2l2ZSBDIGEgbmljZSBnZW5lcmljIF9fZ2V0c3RhdGVfXyBhbmQgX19zZXRzdGF0ZV9fCi0gICAgICAgICAgICBjbGFzcyBDKGJhc2UpOgotICAgICAgICAgICAgICAgIF9fc2xvdHNfXyA9IFsnYSddCi0gICAgICAgICAgICAgICAgZGVmIF9fZ2V0c3RhdGVfXyhzZWxmKToKLSAgICAgICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICAgICAgZCA9IHNlbGYuX19kaWN0X18uY29weSgpCi0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICAgICAgICAgICAgICAgICAgICAgIGQgPSB7fQotICAgICAgICAgICAgICAgICAgICBmb3IgY2xzIGluIHNlbGYuX19jbGFzc19fLl9fbXJvX186Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3Igc24gaW4gY2xzLl9fZGljdF9fLmdldCgnX19zbG90c19fJywgKCkpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZFtzbl0gPSBnZXRhdHRyKHNlbGYsIHNuKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZAotICAgICAgICAgICAgICAgIGRlZiBfX3NldHN0YXRlX18oc2VsZiwgZCk6Ci0gICAgICAgICAgICAgICAgICAgIGZvciBrLCB2IGluIGxpc3QoZC5pdGVtcygpKToKLSAgICAgICAgICAgICAgICAgICAgICAgIHNldGF0dHIoc2VsZiwgaywgdikKLSAgICAgICAgICAgIGNsYXNzIEQoQyk6Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgIyBOb3cgaXQgc2hvdWxkIHdvcmsKLSAgICAgICAgICAgIHggPSBDKCkKLSAgICAgICAgICAgIHkgPSBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKHgpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RIYXNBdHRyKHksICdhJykKLSAgICAgICAgICAgIHguYSA9IDQyCi0gICAgICAgICAgICB5ID0gcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyh4KSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeS5hLCA0MikKLSAgICAgICAgICAgIHggPSBEKCkKLSAgICAgICAgICAgIHguYSA9IDQyCi0gICAgICAgICAgICB4LmIgPSAxMDAKLSAgICAgICAgICAgIHkgPSBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKHgpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh5LmEgKyB5LmIsIDE0MikKLSAgICAgICAgICAgICMgQSBzdWJjbGFzcyB0aGF0IGFkZHMgYSBzbG90IHNob3VsZCBhbHNvIHdvcmsKLSAgICAgICAgICAgIGNsYXNzIEUoQyk6Ci0gICAgICAgICAgICAgICAgX19zbG90c19fID0gWydiJ10KLSAgICAgICAgICAgIHggPSBFKCkKLSAgICAgICAgICAgIHguYSA9IDQyCi0gICAgICAgICAgICB4LmIgPSAiZm9vIgotICAgICAgICAgICAgeSA9IHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMoeCkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHkuYSwgeC5hKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh5LmIsIHguYikKLQogICAgIGRlZiB0ZXN0X2JpbmFyeV9vcGVyYXRvcl9vdmVycmlkZShzZWxmKToKICAgICAgICAgIyBUZXN0aW5nIG92ZXJyaWRlcyBvZiBiaW5hcnkgb3BlcmF0aW9ucy4uLgogICAgICAgICBjbGFzcyBJKGludCk6CkBAIC0zNzQ1LDE4ICszNTc0LDggQEAKICAgICAgICAgIyBidWcpLgogICAgICAgICBkZWwgYwogCi0gICAgICAgICMgSWYgdGhhdCBkaWRuJ3QgYmxvdyB1cCwgaXQncyBhbHNvIGludGVyZXN0aW5nIHRvIHNlZSB3aGV0aGVyIGNsZWFyaW5nCi0gICAgICAgICMgdGhlIGxhc3QgY29udGFpbmVyIHNsb3Qgd29ya3M6IHRoYXQgd2lsbCBhdHRlbXB0IHRvIGRlbGV0ZSBjIGFnYWluLAotICAgICAgICAjIHdoaWNoIHdpbGwgY2F1c2UgYyB0byBnZXQgYXBwZW5kZWQgYmFjayB0byB0aGUgY29udGFpbmVyIGFnYWluCi0gICAgICAgICMgImR1cmluZyIgdGhlIGRlbC4gIChPbiBub24tQ1B5dGhvbiBpbXBsZW1lbnRhdGlvbnMsIGhvd2V2ZXIsIF9fZGVsX18KLSAgICAgICAgIyBpcyB0eXBpY2FsbHkgbm90IGNhbGxlZCBhZ2Fpbi4pCiAgICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKEMuY29udGFpbmVyKSwgMSkKLSAgICAgICAgZGVsIEMuY29udGFpbmVyWy0xXQotICAgICAgICBpZiBzdXBwb3J0LmNoZWNrX2ltcGxfZGV0YWlsKCk6Ci0gICAgICAgICAgICBzdXBwb3J0LmdjX2NvbGxlY3QoKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oQy5jb250YWluZXIpLCAxKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDLmNvbnRhaW5lclstMV0uYXR0ciwgNDIpCiAKICAgICAgICAgIyBNYWtlIGMgbW9ydGFsIGFnYWluLCBzbyB0aGF0IHRoZSB0ZXN0IGZyYW1ld29yayB3aXRoIC1sIGRvZXNuJ3QgcmVwb3J0CiAgICAgICAgICMgaXQgYXMgYSBsZWFrLgpAQCAtMzkxNiw2ICszNzM1LDM3IEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBhc3NlcnQgMCwgImJlc3RfYmFzZSBjYWxjdWxhdGlvbiBmb3VuZCB3YW50aW5nIgogCisgICAgZGVmIHRlc3RfdW5zdWJjbGFzc2FibGVfdHlwZXMoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGNsYXNzIFgodHlwZShOb25lKSk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBjbGFzcyBYKG9iamVjdCwgdHlwZShOb25lKSk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBjbGFzcyBYKHR5cGUoTm9uZSksIG9iamVjdCk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBjbGFzcyBPKG9iamVjdCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGNsYXNzIFgoTywgdHlwZShOb25lKSk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBjbGFzcyBYKHR5cGUoTm9uZSksIE8pOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICBjbGFzcyBYKG9iamVjdCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIFguX19iYXNlc19fID0gdHlwZShOb25lKSwKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgWC5fX2Jhc2VzX18gPSBvYmplY3QsIHR5cGUoTm9uZSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgWC5fX2Jhc2VzX18gPSB0eXBlKE5vbmUpLCBvYmplY3QKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgWC5fX2Jhc2VzX18gPSBPLCB0eXBlKE5vbmUpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIFguX19iYXNlc19fID0gdHlwZShOb25lKSwgTwogCiAgICAgZGVmIHRlc3RfbXV0YWJsZV9iYXNlc193aXRoX2ZhaWxpbmdfbXJvKHNlbGYpOgogICAgICAgICAjIFRlc3RpbmcgbXV0YWJsZSBiYXNlcyB3aXRoIGZhaWxpbmcgbXJvLi4uCkBAIC00MzM0LDkgKzQxODQsOCBAQAogICAgICAgICAgICAgICAgICgnX19hZGRfXycsICAgICAgJ3ggKyB5JywgICAgICAgICAgICAgICAgICAgJ3ggKz0geScpLAogICAgICAgICAgICAgICAgICgnX19zdWJfXycsICAgICAgJ3ggLSB5JywgICAgICAgICAgICAgICAgICAgJ3ggLT0geScpLAogICAgICAgICAgICAgICAgICgnX19tdWxfXycsICAgICAgJ3ggKiB5JywgICAgICAgICAgICAgICAgICAgJ3ggKj0geScpLAotICAgICAgICAgICAgICAgICgnX190cnVlZGl2X18nLCAgJ29wZXJhdG9yLnRydWVkaXYoeCwgeSknLCAgTm9uZSksCi0gICAgICAgICAgICAgICAgKCdfX2Zsb29yZGl2X18nLCAnb3BlcmF0b3IuZmxvb3JkaXYoeCwgeSknLCBOb25lKSwKLSAgICAgICAgICAgICAgICAoJ19fZGl2X18nLCAgICAgICd4IC8geScsICAgICAgICAgICAgICAgICAgICd4IC89IHknKSwKKyAgICAgICAgICAgICAgICAoJ19fdHJ1ZWRpdl9fJywgICd4IC8geScsICAgICAgICAgICAgICAgICAgICd4IC89IHknKSwKKyAgICAgICAgICAgICAgICAoJ19fZmxvb3JkaXZfXycsICd4IC8vIHknLCAgICAgICAgICAgICAgICAgICd4IC8vPSB5JyksCiAgICAgICAgICAgICAgICAgKCdfX21vZF9fJywgICAgICAneCAlIHknLCAgICAgICAgICAgICAgICAgICAneCAlPSB5JyksCiAgICAgICAgICAgICAgICAgKCdfX2Rpdm1vZF9fJywgICAnZGl2bW9kKHgsIHkpJywgICAgICAgICAgICBOb25lKSwKICAgICAgICAgICAgICAgICAoJ19fcG93X18nLCAgICAgICd4ICoqIHknLCAgICAgICAgICAgICAgICAgICd4ICoqPSB5JyksCkBAIC00Mzk4LDggKzQyNDcsOCBAQAogICAgICAgICAjIEFsc28gY2hlY2sgdHlwZV9nZXRhdHRybyBmb3IgY29ycmVjdG5lc3MuCiAgICAgICAgIGNsYXNzIE1ldGEodHlwZSk6CiAgICAgICAgICAgICBwYXNzCi0gICAgICAgIGNsYXNzIFgob2JqZWN0KToKLSAgICAgICAgICAgIF9fbWV0YWNsYXNzX18gPSBNZXRhCisgICAgICAgIGNsYXNzIFgobWV0YWNsYXNzPU1ldGEpOgorICAgICAgICAgICAgcGFzcwogICAgICAgICBYLmEgPSA0MgogICAgICAgICBNZXRhLmEgPSBEZXNjcigiYSIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWC5hLCA0MikKQEAgLTQ1MzYsNiArNDM4NSwxMyBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHR5cGUuX19kaWN0X19bJ19fcXVhbG5hbWVfXyddLl9fc2V0X18sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciwgJ09pbmsnKQogCisgICAgICAgIGdsb2JhbCBZCisgICAgICAgIGNsYXNzIFk6CisgICAgICAgICAgICBjbGFzcyBJbnNpZGU6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFkuX19xdWFsbmFtZV9fLCAnWScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWS5JbnNpZGUuX19xdWFsbmFtZV9fLCAnWS5JbnNpZGUnKQorCiAgICAgZGVmIHRlc3RfcXVhbG5hbWVfZGljdChzZWxmKToKICAgICAgICAgbnMgPSB7J19fcXVhbG5hbWVfXyc6ICdzb21lLm5hbWUnfQogICAgICAgICB0cCA9IHR5cGUoJ0ZvbycsICgpLCBucykKQEAgLTQ1ODEsNiArNDQzNywxNCBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjYXNlLCAxLCAyLCAzKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjYXNlLCAxLCAyLCBmb289MykKIAorICAgIGRlZiB0ZXN0X3N1YmNsYXNzaW5nX2RvZXNfbm90X2R1cGxpY2F0ZV9kaWN0X2Rlc2NyaXB0b3JzKHNlbGYpOgorICAgICAgICBjbGFzcyBCYXNlOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjbGFzcyBTdWIoQmFzZSk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oIl9fZGljdF9fIiwgQmFzZS5fX2RpY3RfXykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigiX19kaWN0X18iLCBTdWIuX19kaWN0X18pCisKIAogY2xhc3MgRGljdFByb3h5VGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiBzZXRVcChzZWxmKToKQEAgLTQ2OTEsMTEgKzQ1NTUsNzA5IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWC5teWtleTIsICdmcm9tIEJhc2UyJykKIAogCitjbGFzcyBQaWNrbGluZ1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBfY2hlY2tfcmVkdWNlKHNlbGYsIHByb3RvLCBvYmosIGFyZ3M9KCksIGt3YXJncz17fSwgc3RhdGU9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICBsaXN0aXRlbXM9Tm9uZSwgZGljdGl0ZW1zPU5vbmUpOgorICAgICAgICBpZiBwcm90byA+PSA0OgorICAgICAgICAgICAgcmVkdWNlX3ZhbHVlID0gb2JqLl9fcmVkdWNlX2V4X18ocHJvdG8pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlZHVjZV92YWx1ZVs6M10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb3B5cmVnLl9fbmV3b2JqX2V4X18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodHlwZShvYmopLCBhcmdzLCBrd2FyZ3MpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUpKQorICAgICAgICAgICAgaWYgbGlzdGl0ZW1zIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0TGlzdEVxdWFsKGxpc3QocmVkdWNlX3ZhbHVlWzNdKSwgbGlzdGl0ZW1zKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShyZWR1Y2VfdmFsdWVbM10pCisgICAgICAgICAgICBpZiBkaWN0aXRlbXMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnREaWN0RXF1YWwoZGljdChyZWR1Y2VfdmFsdWVbNF0pLCBkaWN0aXRlbXMpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlZHVjZV92YWx1ZVs0XSkKKyAgICAgICAgZWxpZiBwcm90byA+PSAyOgorICAgICAgICAgICAgcmVkdWNlX3ZhbHVlID0gb2JqLl9fcmVkdWNlX2V4X18ocHJvdG8pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlZHVjZV92YWx1ZVs6M10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb3B5cmVnLl9fbmV3b2JqX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodHlwZShvYmopLCkgKyBhcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUpKQorICAgICAgICAgICAgaWYgbGlzdGl0ZW1zIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0TGlzdEVxdWFsKGxpc3QocmVkdWNlX3ZhbHVlWzNdKSwgbGlzdGl0ZW1zKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShyZWR1Y2VfdmFsdWVbM10pCisgICAgICAgICAgICBpZiBkaWN0aXRlbXMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnREaWN0RXF1YWwoZGljdChyZWR1Y2VfdmFsdWVbNF0pLCBkaWN0aXRlbXMpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlZHVjZV92YWx1ZVs0XSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGJhc2VfdHlwZSA9IHR5cGUob2JqKS5fX2Jhc2VfXworICAgICAgICAgICAgcmVkdWNlX3ZhbHVlID0gKGNvcHlyZWcuX3JlY29uc3RydWN0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHR5cGUob2JqKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZV90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb25lIGlmIGJhc2VfdHlwZSBpcyBvYmplY3QgZWxzZSBiYXNlX3R5cGUob2JqKSkpCisgICAgICAgICAgICBpZiBzdGF0ZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICByZWR1Y2VfdmFsdWUgKz0gKHN0YXRlLCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqLl9fcmVkdWNlX2V4X18ocHJvdG8pLCByZWR1Y2VfdmFsdWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iai5fX3JlZHVjZV9fKCksIHJlZHVjZV92YWx1ZSkKKworICAgIGRlZiB0ZXN0X3JlZHVjZShzZWxmKToKKyAgICAgICAgcHJvdG9jb2xzID0gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKQorICAgICAgICBhcmdzID0gKC0xMDEsICJzcGFtIikKKyAgICAgICAga3dhcmdzID0geydiYWNvbic6IC0yMDEsICdmaXNoJzogLTMwMX0KKyAgICAgICAgc3RhdGUgPSB7J2NoZWVzZSc6IC00MDF9CisKKyAgICAgICAgY2xhc3MgQzE6CisgICAgICAgICAgICBkZWYgX19nZXRuZXdhcmdzX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIGFyZ3MKKyAgICAgICAgb2JqID0gQzEoKQorICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgorICAgICAgICAgICAgc2VsZi5fY2hlY2tfcmVkdWNlKHByb3RvLCBvYmosIGFyZ3MpCisKKyAgICAgICAgZm9yIG5hbWUsIHZhbHVlIGluIHN0YXRlLml0ZW1zKCk6CisgICAgICAgICAgICBzZXRhdHRyKG9iaiwgbmFtZSwgdmFsdWUpCisgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CisgICAgICAgICAgICBzZWxmLl9jaGVja19yZWR1Y2UocHJvdG8sIG9iaiwgYXJncywgc3RhdGU9c3RhdGUpCisKKyAgICAgICAgY2xhc3MgQzI6CisgICAgICAgICAgICBkZWYgX19nZXRuZXdhcmdzX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICJiYWQgYXJncyIKKyAgICAgICAgb2JqID0gQzIoKQorICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgorICAgICAgICAgICAgaWYgcHJvdG8gPj0gMjoKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICAgICAgICAgIG9iai5fX3JlZHVjZV9leF9fKHByb3RvKQorCisgICAgICAgIGNsYXNzIEMzOgorICAgICAgICAgICAgZGVmIF9fZ2V0bmV3YXJnc19leF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAoYXJncywga3dhcmdzKQorICAgICAgICBvYmogPSBDMygpCisgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CisgICAgICAgICAgICBpZiBwcm90byA+PSA0OgorICAgICAgICAgICAgICAgIHNlbGYuX2NoZWNrX3JlZHVjZShwcm90bywgb2JqLCBhcmdzLCBrd2FyZ3MpCisgICAgICAgICAgICBlbGlmIHByb3RvID49IDI6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgICAgICAgICAgb2JqLl9fcmVkdWNlX2V4X18ocHJvdG8pCisKKyAgICAgICAgY2xhc3MgQzQ6CisgICAgICAgICAgICBkZWYgX19nZXRuZXdhcmdzX2V4X18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIChhcmdzLCAiYmFkIGRpY3QiKQorICAgICAgICBjbGFzcyBDNToKKyAgICAgICAgICAgIGRlZiBfX2dldG5ld2FyZ3NfZXhfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gKCJiYWQgdHVwbGUiLCBrd2FyZ3MpCisgICAgICAgIGNsYXNzIEM2OgorICAgICAgICAgICAgZGVmIF9fZ2V0bmV3YXJnc19leF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAoKQorICAgICAgICBjbGFzcyBDNzoKKyAgICAgICAgICAgIGRlZiBfX2dldG5ld2FyZ3NfZXhfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gImJhZCBhcmdzIgorICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgorICAgICAgICAgICAgZm9yIGNscyBpbiBDNCwgQzUsIEM2LCBDNzoKKyAgICAgICAgICAgICAgICBvYmogPSBjbHMoKQorICAgICAgICAgICAgICAgIGlmIHByb3RvID49IDI6CisgICAgICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoKFR5cGVFcnJvciwgVmFsdWVFcnJvcikpOgorICAgICAgICAgICAgICAgICAgICAgICAgb2JqLl9fcmVkdWNlX2V4X18ocHJvdG8pCisKKyAgICAgICAgY2xhc3MgQzk6CisgICAgICAgICAgICBkZWYgX19nZXRuZXdhcmdzX2V4X18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIChhcmdzLCB7fSkKKyAgICAgICAgb2JqID0gQzkoKQorICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgorICAgICAgICAgICAgc2VsZi5fY2hlY2tfcmVkdWNlKHByb3RvLCBvYmosIGFyZ3MpCisKKyAgICAgICAgY2xhc3MgQzEwOgorICAgICAgICAgICAgZGVmIF9fZ2V0bmV3YXJnc19leF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJhaXNlIEluZGV4RXJyb3IKKyAgICAgICAgb2JqID0gQzEwKCkKKyAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKKyAgICAgICAgICAgIGlmIHByb3RvID49IDI6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yKToKKyAgICAgICAgICAgICAgICAgICAgb2JqLl9fcmVkdWNlX2V4X18ocHJvdG8pCisKKyAgICAgICAgY2xhc3MgQzExOgorICAgICAgICAgICAgZGVmIF9fZ2V0c3RhdGVfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGUKKyAgICAgICAgb2JqID0gQzExKCkKKyAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX3JlZHVjZShwcm90bywgb2JqLCBzdGF0ZT1zdGF0ZSkKKworICAgICAgICBjbGFzcyBDMTI6CisgICAgICAgICAgICBkZWYgX19nZXRzdGF0ZV9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAibm90IGRpY3QiCisgICAgICAgIG9iaiA9IEMxMigpCisgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CisgICAgICAgICAgICBzZWxmLl9jaGVja19yZWR1Y2UocHJvdG8sIG9iaiwgc3RhdGU9Im5vdCBkaWN0IikKKworICAgICAgICBjbGFzcyBDMTM6CisgICAgICAgICAgICBkZWYgX19nZXRzdGF0ZV9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJhaXNlIEluZGV4RXJyb3IKKyAgICAgICAgb2JqID0gQzEzKCkKKyAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvcik6CisgICAgICAgICAgICAgICAgb2JqLl9fcmVkdWNlX2V4X18ocHJvdG8pCisgICAgICAgICAgICBpZiBwcm90byA8IDI6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yKToKKyAgICAgICAgICAgICAgICAgICAgb2JqLl9fcmVkdWNlX18oKQorCisgICAgICAgIGNsYXNzIEMxNDoKKyAgICAgICAgICAgIF9fc2xvdHNfXyA9IHR1cGxlKHN0YXRlKQorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIGZvciBuYW1lLCB2YWx1ZSBpbiBzdGF0ZS5pdGVtcygpOgorICAgICAgICAgICAgICAgICAgICBzZXRhdHRyKHNlbGYsIG5hbWUsIHZhbHVlKQorCisgICAgICAgIG9iaiA9IEMxNCgpCisgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CisgICAgICAgICAgICBpZiBwcm90byA+PSAyOgorICAgICAgICAgICAgICAgIHNlbGYuX2NoZWNrX3JlZHVjZShwcm90bywgb2JqLCBzdGF0ZT0oTm9uZSwgc3RhdGUpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICAgICAgICAgIG9iai5fX3JlZHVjZV9leF9fKHByb3RvKQorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgICAgICAgICAgb2JqLl9fcmVkdWNlX18oKQorCisgICAgICAgIGNsYXNzIEMxNShkaWN0KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgb2JqID0gQzE1KHsicXVlYmVjIjogLTYwMX0pCisgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CisgICAgICAgICAgICBzZWxmLl9jaGVja19yZWR1Y2UocHJvdG8sIG9iaiwgZGljdGl0ZW1zPWRpY3Qob2JqKSkKKworICAgICAgICBjbGFzcyBDMTYobGlzdCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIG9iaiA9IEMxNihbInl1a29uIl0pCisgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CisgICAgICAgICAgICBzZWxmLl9jaGVja19yZWR1Y2UocHJvdG8sIG9iaiwgbGlzdGl0ZW1zPWxpc3Qob2JqKSkKKworICAgIGRlZiB0ZXN0X3NwZWNpYWxfbWV0aG9kX2xvb2t1cChzZWxmKToKKyAgICAgICAgcHJvdG9jb2xzID0gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKQorICAgICAgICBjbGFzcyBQaWNreToKKyAgICAgICAgICAgIGRlZiBfX2dldHN0YXRlX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHt9CisKKyAgICAgICAgICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBhdHRyKToKKyAgICAgICAgICAgICAgICBpZiBhdHRyIGluICgiX19nZXRuZXdhcmdzX18iLCAiX19nZXRuZXdhcmdzX2V4X18iKToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoYXR0cikKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBmb3IgcHJvdG9jb2wgaW4gcHJvdG9jb2xzOgorICAgICAgICAgICAgc3RhdGUgPSB7fSBpZiBwcm90b2NvbCA+PSAyIGVsc2UgTm9uZQorICAgICAgICAgICAgc2VsZi5fY2hlY2tfcmVkdWNlKHByb3RvY29sLCBQaWNreSgpLCBzdGF0ZT1zdGF0ZSkKKworICAgIGRlZiBfYXNzZXJ0X2lzX2NvcHkoc2VsZiwgb2JqLCBvYmpjb3B5LCBtc2c9Tm9uZSk6CisgICAgICAgICIiIlV0aWxpdHkgbWV0aG9kIHRvIHZlcmlmeSBpZiB0d28gb2JqZWN0cyBhcmUgY29waWVzIG9mIGVhY2ggb3RoZXJzLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgbXNnIGlzIE5vbmU6CisgICAgICAgICAgICBtc2cgPSAieyFyfSBpcyBub3QgYSBjb3B5IG9mIHshcn0iLmZvcm1hdChvYmosIG9iamNvcHkpCisgICAgICAgIGlmIHR5cGUob2JqKS5fX3JlcHJfXyBpcyBvYmplY3QuX19yZXByX186CisgICAgICAgICAgICAjIFdlIGhhdmUgdGhpcyBsaW1pdGF0aW9uIGZvciBub3cgYmVjYXVzZSB3ZSB1c2UgdGhlIG9iamVjdCdzIHJlcHIKKyAgICAgICAgICAgICMgdG8gaGVscCB1cyB2ZXJpZnkgdGhhdCB0aGUgdHdvIG9iamVjdHMgYXJlIGNvcGllcy4gVGhpcyBhbGxvd3MKKyAgICAgICAgICAgICMgdXMgdG8gZGVsZWdhdGUgdGhlIG5vbi1nZW5lcmljIHZlcmlmaWNhdGlvbiBsb2dpYyB0byB0aGUgb2JqZWN0cworICAgICAgICAgICAgIyB0aGVtc2VsdmVzLgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigib2JqZWN0IHBhc3NlZCB0byBfYXNzZXJ0X2lzX2NvcHkgbXVzdCAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm92ZXJyaWRlIHRoZSBfX3JlcHJfXyBtZXRob2QuIikKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdChvYmosIG9iamNvcHksIG1zZz1tc2cpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShvYmopLCB0eXBlKG9iamNvcHkpLCBtc2c9bXNnKQorICAgICAgICBpZiBoYXNhdHRyKG9iaiwgJ19fZGljdF9fJyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydERpY3RFcXVhbChvYmouX19kaWN0X18sIG9iamNvcHkuX19kaWN0X18sIG1zZz1tc2cpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90KG9iai5fX2RpY3RfXywgb2JqY29weS5fX2RpY3RfXywgbXNnPW1zZykKKyAgICAgICAgaWYgaGFzYXR0cihvYmosICdfX3Nsb3RzX18nKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0TGlzdEVxdWFsKG9iai5fX3Nsb3RzX18sIG9iamNvcHkuX19zbG90c19fLCBtc2c9bXNnKQorICAgICAgICAgICAgZm9yIHNsb3QgaW4gb2JqLl9fc2xvdHNfXzoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgICAgICBoYXNhdHRyKG9iaiwgc2xvdCksIGhhc2F0dHIob2JqY29weSwgc2xvdCksIG1zZz1tc2cpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRhdHRyKG9iaiwgc2xvdCwgTm9uZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRhdHRyKG9iamNvcHksIHNsb3QsIE5vbmUpLCBtc2c9bXNnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIob2JqKSwgcmVwcihvYmpjb3B5KSwgbXNnPW1zZykKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgX2dlbmVyYXRlX3BpY2tsZV9jb3BpZXJzKCk6CisgICAgICAgICIiIlV0aWxpdHkgbWV0aG9kIHRvIGdlbmVyYXRlIHRoZSBtYW55IHBvc3NpYmxlIHBpY2tsZSBjb25maWd1cmF0aW9ucy4KKyAgICAgICAgIiIiCisgICAgICAgIGNsYXNzIFBpY2tsZUNvcGllcjoKKyAgICAgICAgICAgICJUaGlzIGNsYXNzIGNvcGllcyBvYmplY3QgdXNpbmcgcGlja2xlLiIKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwcm90bywgZHVtcHMsIGxvYWRzKToKKyAgICAgICAgICAgICAgICBzZWxmLnByb3RvID0gcHJvdG8KKyAgICAgICAgICAgICAgICBzZWxmLmR1bXBzID0gZHVtcHMKKyAgICAgICAgICAgICAgICBzZWxmLmxvYWRzID0gbG9hZHMKKyAgICAgICAgICAgIGRlZiBjb3B5KHNlbGYsIG9iaik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYubG9hZHMoc2VsZi5kdW1wcyhvYmosIHNlbGYucHJvdG8pKQorICAgICAgICAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgICMgV2UgdHJ5IHRvIGJlIGFzIGRlc2NyaXB0aXZlIGFzIHBvc3NpYmxlIGhlcmUgc2luY2UgdGhpcyBpcworICAgICAgICAgICAgICAgICMgdGhlIHN0cmluZyB3aGljaCB3ZSB3aWxsIGFsbG93IHVzIHRvIHRlbGwgdGhlIHBpY2tsZQorICAgICAgICAgICAgICAgICMgY29uZmlndXJhdGlvbiB3ZSBhcmUgdXNpbmcgZHVyaW5nIGRlYnVnZ2luZy4KKyAgICAgICAgICAgICAgICByZXR1cm4gKCJQaWNrbGVDb3BpZXIocHJvdG89e30sIGR1bXBzPXt9Lnt9LCBsb2Fkcz17fS57fSkiCisgICAgICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KHNlbGYucHJvdG8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZHVtcHMuX19tb2R1bGVfXywgc2VsZi5kdW1wcy5fX3F1YWxuYW1lX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9hZHMuX19tb2R1bGVfXywgc2VsZi5sb2Fkcy5fX3F1YWxuYW1lX18pKQorICAgICAgICByZXR1cm4gKFBpY2tsZUNvcGllcigqYXJncykgZm9yIGFyZ3MgaW4KKyAgICAgICAgICAgICAgICAgICBpdGVydG9vbHMucHJvZHVjdChyYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwaWNrbGUuZHVtcHMsIHBpY2tsZS5fZHVtcHN9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwaWNrbGUubG9hZHMsIHBpY2tsZS5fbG9hZHN9KSkKKworICAgIGRlZiB0ZXN0X3BpY2tsZV9zbG90cyhzZWxmKToKKyAgICAgICAgIyBUZXN0cyBwaWNrbGluZyBvZiBjbGFzc2VzIHdpdGggX19zbG90c19fLgorCisgICAgICAgICMgUGlja2xpbmcgb2YgY2xhc3NlcyB3aXRoIF9fc2xvdHNfXyBidXQgd2l0aG91dCBfX2dldHN0YXRlX18gc2hvdWxkCisgICAgICAgICMgZmFpbCAoaWYgdXNpbmcgcHJvdG9jb2wgMCBvciAxKQorICAgICAgICBnbG9iYWwgQworICAgICAgICBjbGFzcyBDOgorICAgICAgICAgICAgX19zbG90c19fID0gWydhJ10KKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgcGlja2xlLmR1bXBzKEMoKSwgMCkKKworICAgICAgICBnbG9iYWwgRAorICAgICAgICBjbGFzcyBEKEMpOgorICAgICAgICAgICAgcGFzcworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBwaWNrbGUuZHVtcHMoRCgpLCAwKQorCisgICAgICAgIGNsYXNzIEM6CisgICAgICAgICAgICAiQSBjbGFzcyB3aXRoIF9fZ2V0c3RhdGVfXyBhbmQgX19zZXRzdGF0ZV9fIGltcGxlbWVudGVkLiIKKyAgICAgICAgICAgIF9fc2xvdHNfXyA9IFsnYSddCisgICAgICAgICAgICBkZWYgX19nZXRzdGF0ZV9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHN0YXRlID0gZ2V0YXR0cihzZWxmLCAnX19kaWN0X18nLCB7fSkuY29weSgpCisgICAgICAgICAgICAgICAgZm9yIGNscyBpbiB0eXBlKHNlbGYpLl9fbXJvX186CisgICAgICAgICAgICAgICAgICAgIGZvciBzbG90IGluIGNscy5fX2RpY3RfXy5nZXQoJ19fc2xvdHNfXycsICgpKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZVtzbG90XSA9IGdldGF0dHIoc2VsZiwgc2xvdCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRlCisgICAgICAgICAgICBkZWYgX19zZXRzdGF0ZV9fKHNlbGYsIHN0YXRlKToKKyAgICAgICAgICAgICAgICBmb3IgaywgdiBpbiBzdGF0ZS5pdGVtcygpOgorICAgICAgICAgICAgICAgICAgICBzZXRhdHRyKHNlbGYsIGssIHYpCisgICAgICAgICAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICIlcygpPCVyPiIgJSAodHlwZShzZWxmKS5fX25hbWVfXywgc2VsZi5fX2dldHN0YXRlX18oKSkKKworICAgICAgICBjbGFzcyBEKEMpOgorICAgICAgICAgICAgIkEgc3ViY2xhc3Mgb2YgYSBjbGFzcyB3aXRoIHNsb3RzLiIKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBnbG9iYWwgRQorICAgICAgICBjbGFzcyBFKEMpOgorICAgICAgICAgICAgIkEgc3ViY2xhc3Mgd2l0aCBhbiBleHRyYSBzbG90LiIKKyAgICAgICAgICAgIF9fc2xvdHNfXyA9IFsnYiddCisKKyAgICAgICAgIyBOb3cgaXQgc2hvdWxkIHdvcmsKKyAgICAgICAgZm9yIHBpY2tsZV9jb3BpZXIgaW4gc2VsZi5fZ2VuZXJhdGVfcGlja2xlX2NvcGllcnMoKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KHBpY2tsZV9jb3BpZXI9cGlja2xlX2NvcGllcik6CisgICAgICAgICAgICAgICAgeCA9IEMoKQorICAgICAgICAgICAgICAgIHkgPSBwaWNrbGVfY29waWVyLmNvcHkoeCkKKyAgICAgICAgICAgICAgICBzZWxmLl9hc3NlcnRfaXNfY29weSh4LCB5KQorCisgICAgICAgICAgICAgICAgeC5hID0gNDIKKyAgICAgICAgICAgICAgICB5ID0gcGlja2xlX2NvcGllci5jb3B5KHgpCisgICAgICAgICAgICAgICAgc2VsZi5fYXNzZXJ0X2lzX2NvcHkoeCwgeSkKKworICAgICAgICAgICAgICAgIHggPSBEKCkKKyAgICAgICAgICAgICAgICB4LmEgPSA0MgorICAgICAgICAgICAgICAgIHguYiA9IDEwMAorICAgICAgICAgICAgICAgIHkgPSBwaWNrbGVfY29waWVyLmNvcHkoeCkKKyAgICAgICAgICAgICAgICBzZWxmLl9hc3NlcnRfaXNfY29weSh4LCB5KQorCisgICAgICAgICAgICAgICAgeCA9IEUoKQorICAgICAgICAgICAgICAgIHguYSA9IDQyCisgICAgICAgICAgICAgICAgeC5iID0gImZvbyIKKyAgICAgICAgICAgICAgICB5ID0gcGlja2xlX2NvcGllci5jb3B5KHgpCisgICAgICAgICAgICAgICAgc2VsZi5fYXNzZXJ0X2lzX2NvcHkoeCwgeSkKKworICAgIGRlZiB0ZXN0X3JlZHVjZV9jb3B5aW5nKHNlbGYpOgorICAgICAgICAjIFRlc3RzIHBpY2tsaW5nIGFuZCBjb3B5aW5nIG5ldy1zdHlsZSBjbGFzc2VzIGFuZCBvYmplY3RzLgorICAgICAgICBnbG9iYWwgQzEKKyAgICAgICAgY2xhc3MgQzE6CisgICAgICAgICAgICAiVGhlIHN0YXRlIG9mIHRoaXMgY2xhc3MgaXMgY29weWFibGUgdmlhIGl0cyBpbnN0YW5jZSBkaWN0LiIKKyAgICAgICAgICAgIEFSR1MgPSAoMSwgMikKKyAgICAgICAgICAgIE5FRURfRElDVF9DT1BZSU5HID0gVHJ1ZQorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGEsIGIpOgorICAgICAgICAgICAgICAgIHN1cGVyKCkuX19pbml0X18oKQorICAgICAgICAgICAgICAgIHNlbGYuYSA9IGEKKyAgICAgICAgICAgICAgICBzZWxmLmIgPSBiCisgICAgICAgICAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICJDMSglciwgJXIpIiAlIChzZWxmLmEsIHNlbGYuYikKKworICAgICAgICBnbG9iYWwgQzIKKyAgICAgICAgY2xhc3MgQzIobGlzdCk6CisgICAgICAgICAgICAiQSBsaXN0IHN1YmNsYXNzIGNvcHlhYmxlIHZpYSBfX2dldG5ld2FyZ3NfXy4iCisgICAgICAgICAgICBBUkdTID0gKDEsIDIpCisgICAgICAgICAgICBORUVEX0RJQ1RfQ09QWUlORyA9IEZhbHNlCisgICAgICAgICAgICBkZWYgX19uZXdfXyhjbHMsIGEsIGIpOgorICAgICAgICAgICAgICAgIHNlbGYgPSBzdXBlcigpLl9fbmV3X18oY2xzKQorICAgICAgICAgICAgICAgIHNlbGYuYSA9IGEKKyAgICAgICAgICAgICAgICBzZWxmLmIgPSBiCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncyk6CisgICAgICAgICAgICAgICAgc3VwZXIoKS5fX2luaXRfXygpCisgICAgICAgICAgICAgICAgIyBUaGlzIGhlbHBzIHRlc3RpbmcgdGhhdCBfX2luaXRfXyBpcyBub3QgY2FsbGVkIGR1cmluZyB0aGUKKyAgICAgICAgICAgICAgICAjIHVucGlja2xpbmcgcHJvY2Vzcywgd2hpY2ggd291bGQgY2F1c2UgZXh0cmEgYXBwZW5kcy4KKyAgICAgICAgICAgICAgICBzZWxmLmFwcGVuZCgiY2hlZXNlIikKKyAgICAgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICAgICAgZGVmIF9fZ2V0bmV3YXJnc19fKGNscyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGNscy5BUkdTCisgICAgICAgICAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICJDMiglciwgJXIpPCVyPiIgJSAoc2VsZi5hLCBzZWxmLmIsIGxpc3Qoc2VsZikpCisKKyAgICAgICAgZ2xvYmFsIEMzCisgICAgICAgIGNsYXNzIEMzKGxpc3QpOgorICAgICAgICAgICAgIkEgbGlzdCBzdWJjbGFzcyBjb3B5YWJsZSB2aWEgX19nZXRzdGF0ZV9fLiIKKyAgICAgICAgICAgIEFSR1MgPSAoMSwgMikKKyAgICAgICAgICAgIE5FRURfRElDVF9DT1BZSU5HID0gRmFsc2UKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhLCBiKToKKyAgICAgICAgICAgICAgICBzZWxmLmEgPSBhCisgICAgICAgICAgICAgICAgc2VsZi5iID0gYgorICAgICAgICAgICAgICAgICMgVGhpcyBoZWxwcyB0ZXN0aW5nIHRoYXQgX19pbml0X18gaXMgbm90IGNhbGxlZCBkdXJpbmcgdGhlCisgICAgICAgICAgICAgICAgIyB1bnBpY2tsaW5nIHByb2Nlc3MsIHdoaWNoIHdvdWxkIGNhdXNlIGV4dHJhIGFwcGVuZHMuCisgICAgICAgICAgICAgICAgc2VsZi5hcHBlbmQoImNoZWVzZSIpCisgICAgICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgICAgIGRlZiBfX2dldHN0YXRlX18oY2xzKToKKyAgICAgICAgICAgICAgICByZXR1cm4gY2xzLkFSR1MKKyAgICAgICAgICAgIGRlZiBfX3NldHN0YXRlX18oc2VsZiwgc3RhdGUpOgorICAgICAgICAgICAgICAgIGEsIGIgPSBzdGF0ZQorICAgICAgICAgICAgICAgIHNlbGYuYSA9IGEKKyAgICAgICAgICAgICAgICBzZWxmLmIgPSBiCisgICAgICAgICAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICJDMyglciwgJXIpPCVyPiIgJSAoc2VsZi5hLCBzZWxmLmIsIGxpc3Qoc2VsZikpCisKKyAgICAgICAgZ2xvYmFsIEM0CisgICAgICAgIGNsYXNzIEM0KGludCk6CisgICAgICAgICAgICAiQW4gaW50IHN1YmNsYXNzIGNvcHlhYmxlIHZpYSBfX2dldG5ld2FyZ3NfXy4iCisgICAgICAgICAgICBBUkdTID0gKCJoZWxsbyIsICJ3b3JsZCIsIDEpCisgICAgICAgICAgICBORUVEX0RJQ1RfQ09QWUlORyA9IEZhbHNlCisgICAgICAgICAgICBkZWYgX19uZXdfXyhjbHMsIGEsIGIsIHZhbHVlKToKKyAgICAgICAgICAgICAgICBzZWxmID0gc3VwZXIoKS5fX25ld19fKGNscywgdmFsdWUpCisgICAgICAgICAgICAgICAgc2VsZi5hID0gYQorICAgICAgICAgICAgICAgIHNlbGYuYiA9IGIKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZgorICAgICAgICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgICAgICBkZWYgX19nZXRuZXdhcmdzX18oY2xzKToKKyAgICAgICAgICAgICAgICByZXR1cm4gY2xzLkFSR1MKKyAgICAgICAgICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gIkM0KCVyLCAlcik8JXI+IiAlIChzZWxmLmEsIHNlbGYuYiwgaW50KHNlbGYpKQorCisgICAgICAgIGdsb2JhbCBDNQorICAgICAgICBjbGFzcyBDNShpbnQpOgorICAgICAgICAgICAgIkFuIGludCBzdWJjbGFzcyBjb3B5YWJsZSB2aWEgX19nZXRuZXdhcmdzX2V4X18uIgorICAgICAgICAgICAgQVJHUyA9ICgxLCAyKQorICAgICAgICAgICAgS1dBUkdTID0geyd2YWx1ZSc6IDN9CisgICAgICAgICAgICBORUVEX0RJQ1RfQ09QWUlORyA9IEZhbHNlCisgICAgICAgICAgICBkZWYgX19uZXdfXyhjbHMsIGEsIGIsICosIHZhbHVlPTApOgorICAgICAgICAgICAgICAgIHNlbGYgPSBzdXBlcigpLl9fbmV3X18oY2xzLCB2YWx1ZSkKKyAgICAgICAgICAgICAgICBzZWxmLmEgPSBhCisgICAgICAgICAgICAgICAgc2VsZi5iID0gYgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmCisgICAgICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgICAgIGRlZiBfX2dldG5ld2FyZ3NfZXhfXyhjbHMpOgorICAgICAgICAgICAgICAgIHJldHVybiAoY2xzLkFSR1MsIGNscy5LV0FSR1MpCisgICAgICAgICAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICJDNSglciwgJXIpPCVyPiIgJSAoc2VsZi5hLCBzZWxmLmIsIGludChzZWxmKSkKKworICAgICAgICB0ZXN0X2NsYXNzZXMgPSAoQzEsIEMyLCBDMywgQzQsIEM1KQorICAgICAgICAjIFRlc3RpbmcgY29weWluZyB0aHJvdWdoIHBpY2tsZQorICAgICAgICBwaWNrbGVfY29waWVycyA9IHNlbGYuX2dlbmVyYXRlX3BpY2tsZV9jb3BpZXJzKCkKKyAgICAgICAgZm9yIGNscywgcGlja2xlX2NvcGllciBpbiBpdGVydG9vbHMucHJvZHVjdCh0ZXN0X2NsYXNzZXMsIHBpY2tsZV9jb3BpZXJzKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGNscz1jbHMsIHBpY2tsZV9jb3BpZXI9cGlja2xlX2NvcGllcik6CisgICAgICAgICAgICAgICAga3dhcmdzID0gZ2V0YXR0cihjbHMsICdLV0FSR1MnLCB7fSkKKyAgICAgICAgICAgICAgICBvYmogPSBjbHMoKmNscy5BUkdTLCAqKmt3YXJncykKKyAgICAgICAgICAgICAgICBwcm90byA9IHBpY2tsZV9jb3BpZXIucHJvdG8KKyAgICAgICAgICAgICAgICBpZiAyIDw9IHByb3RvIDwgNCBhbmQgaGFzYXR0cihjbHMsICdfX2dldG5ld2FyZ3NfZXhfXycpOgorICAgICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgICAgICAgICAgICAgcGlja2xlX2NvcGllci5kdW1wcyhvYmosIHByb3RvKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIG9iamNvcHkgPSBwaWNrbGVfY29waWVyLmNvcHkob2JqKQorICAgICAgICAgICAgICAgIHNlbGYuX2Fzc2VydF9pc19jb3B5KG9iaiwgb2JqY29weSkKKyAgICAgICAgICAgICAgICAjIEZvciB0ZXN0IGNsYXNzZXMgdGhhdCBzdXBwb3J0cyB0aGlzLCBtYWtlIHN1cmUgd2UgZGlkbid0IGdvCisgICAgICAgICAgICAgICAgIyBhcm91bmQgdGhlIHJlZHVjZSBwcm90b2NvbCBieSBzaW1wbHkgY29weWluZyB0aGUgYXR0cmlidXRlCisgICAgICAgICAgICAgICAgIyBkaWN0aW9uYXJ5LiBXZSBjbGVhciBhdHRyaWJ1dGVzIHVzaW5nIHRoZSBwcmV2aW91cyBjb3B5IHRvCisgICAgICAgICAgICAgICAgIyBub3QgbXV0YXRlIHRoZSBvcmlnaW5hbCBhcmd1bWVudC4KKyAgICAgICAgICAgICAgICBpZiBwcm90byA+PSAyIGFuZCBub3QgY2xzLk5FRURfRElDVF9DT1BZSU5HOgorICAgICAgICAgICAgICAgICAgICBvYmpjb3B5Ll9fZGljdF9fLmNsZWFyKCkKKyAgICAgICAgICAgICAgICAgICAgb2JqY29weTIgPSBwaWNrbGVfY29waWVyLmNvcHkob2JqY29weSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fYXNzZXJ0X2lzX2NvcHkob2JqLCBvYmpjb3B5MikKKworICAgICAgICAjIFRlc3RpbmcgY29weWluZyB0aHJvdWdoIGNvcHkuZGVlcGNvcHkoKQorICAgICAgICBmb3IgY2xzIGluIHRlc3RfY2xhc3NlczoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGNscz1jbHMpOgorICAgICAgICAgICAgICAgIGt3YXJncyA9IGdldGF0dHIoY2xzLCAnS1dBUkdTJywge30pCisgICAgICAgICAgICAgICAgb2JqID0gY2xzKCpjbHMuQVJHUywgKiprd2FyZ3MpCisgICAgICAgICAgICAgICAgIyBYWFg6IFdlIG5lZWQgdG8gbW9kaWZ5IHRoZSBjb3B5IG1vZHVsZSB0byBzdXBwb3J0IFBFUCAzMTU0J3MKKyAgICAgICAgICAgICAgICAjIHJlZHVjZSBwcm90b2NvbCA0LgorICAgICAgICAgICAgICAgIGlmIGhhc2F0dHIoY2xzLCAnX19nZXRuZXdhcmdzX2V4X18nKToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBvYmpjb3B5ID0gZGVlcGNvcHkob2JqKQorICAgICAgICAgICAgICAgIHNlbGYuX2Fzc2VydF9pc19jb3B5KG9iaiwgb2JqY29weSkKKyAgICAgICAgICAgICAgICAjIEZvciB0ZXN0IGNsYXNzZXMgdGhhdCBzdXBwb3J0cyB0aGlzLCBtYWtlIHN1cmUgd2UgZGlkbid0IGdvCisgICAgICAgICAgICAgICAgIyBhcm91bmQgdGhlIHJlZHVjZSBwcm90b2NvbCBieSBzaW1wbHkgY29weWluZyB0aGUgYXR0cmlidXRlCisgICAgICAgICAgICAgICAgIyBkaWN0aW9uYXJ5LiBXZSBjbGVhciBhdHRyaWJ1dGVzIHVzaW5nIHRoZSBwcmV2aW91cyBjb3B5IHRvCisgICAgICAgICAgICAgICAgIyBub3QgbXV0YXRlIHRoZSBvcmlnaW5hbCBhcmd1bWVudC4KKyAgICAgICAgICAgICAgICBpZiBub3QgY2xzLk5FRURfRElDVF9DT1BZSU5HOgorICAgICAgICAgICAgICAgICAgICBvYmpjb3B5Ll9fZGljdF9fLmNsZWFyKCkKKyAgICAgICAgICAgICAgICAgICAgb2JqY29weTIgPSBkZWVwY29weShvYmpjb3B5KQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9hc3NlcnRfaXNfY29weShvYmosIG9iamNvcHkyKQorCisgICAgZGVmIHRlc3RfaXNzdWUyNDA5NyhzZWxmKToKKyAgICAgICAgIyBTbG90IG5hbWUgaXMgZnJlZWQgaW5zaWRlIF9fZ2V0YXR0cl9fIGFuZCBpcyBsYXRlciB1c2VkLgorICAgICAgICBjbGFzcyBTKHN0cik6ICAjIE5vdCBpbnRlcm5lZAorICAgICAgICAgICAgcGFzcworICAgICAgICBjbGFzcyBBOgorICAgICAgICAgICAgX19zbG90bmFtZXNfXyA9IFtTKCdzcGFtJyldCisgICAgICAgICAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwgYXR0cik6CisgICAgICAgICAgICAgICAgaWYgYXR0ciA9PSAnc3BhbSc6CisgICAgICAgICAgICAgICAgICAgIEEuX19zbG90bmFtZXNfX1s6XSA9IFtTKCdzcGFtJyldCisgICAgICAgICAgICAgICAgICAgIHJldHVybiA0MgorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yCisKKyAgICAgICAgaW1wb3J0IGNvcHlyZWcKKyAgICAgICAgZXhwZWN0ZWQgPSAoY29weXJlZy5fX25ld29ial9fLCAoQSwpLCAoTm9uZSwgeydzcGFtJzogNDJ9KSwgTm9uZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChBKCkuX19yZWR1Y2VfXygyKSwgZXhwZWN0ZWQpICAjIFNob3VsZG4ndCBjcmFzaAorCisKK2NsYXNzIFNoYXJlZEtleVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIEBzdXBwb3J0LmNweXRob25fb25seQorICAgIGRlZiB0ZXN0X3N1YmNsYXNzZXMoc2VsZik6CisgICAgICAgICMgVmVyaWZ5IHRoYXQgc3ViY2xhc3NlcyBjYW4gc2hhcmUga2V5cyAocGVyIFBFUCA0MTIpCisgICAgICAgIGNsYXNzIEE6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGNsYXNzIEIoQSk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgYSwgYiA9IEEoKSwgQigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3lzLmdldHNpemVvZih2YXJzKGEpKSwgc3lzLmdldHNpemVvZih2YXJzKGIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzKHN5cy5nZXRzaXplb2YodmFycyhhKSksIHN5cy5nZXRzaXplb2Yoe30pKQorICAgICAgICBhLngsIGEueSwgYS56LCBhLncgPSByYW5nZSg0KQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHN5cy5nZXRzaXplb2YodmFycyhhKSksIHN5cy5nZXRzaXplb2YodmFycyhiKSkpCisgICAgICAgIGEyID0gQSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3lzLmdldHNpemVvZih2YXJzKGEpKSwgc3lzLmdldHNpemVvZih2YXJzKGEyKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzcyhzeXMuZ2V0c2l6ZW9mKHZhcnMoYSkpLCBzeXMuZ2V0c2l6ZW9mKHt9KSkKKyAgICAgICAgYi51LCBiLnYsIGIudywgYi50ID0gcmFuZ2UoNCkKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzKHN5cy5nZXRzaXplb2YodmFycyhiKSksIHN5cy5nZXRzaXplb2Yoe30pKQorCisKK2NsYXNzIERlYnVnSGVscGVyTWV0YSh0eXBlKToKKyAgICAiIiIKKyAgICBTZXRzIGRlZmF1bHQgX19kb2NfXyBhbmQgc2ltcGxpZmllcyByZXByKCkgb3V0cHV0LgorICAgICIiIgorICAgIGRlZiBfX25ld19fKG1jbHMsIG5hbWUsIGJhc2VzLCBhdHRycyk6CisgICAgICAgIGlmIGF0dHJzLmdldCgnX19kb2NfXycpIGlzIE5vbmU6CisgICAgICAgICAgICBhdHRyc1snX19kb2NfXyddID0gbmFtZSAgIyBoZWxwcyB3aGVuIGRlYnVnZ2luZyB3aXRoIGdkYgorICAgICAgICByZXR1cm4gdHlwZS5fX25ld19fKG1jbHMsIG5hbWUsIGJhc2VzLCBhdHRycykKKyAgICBkZWYgX19yZXByX18oY2xzKToKKyAgICAgICAgcmV0dXJuIHJlcHIoY2xzLl9fbmFtZV9fKQorCisKK2NsYXNzIE1yb1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIgorICAgIFJlZ3Jlc3Npb25zIGZvciBzb21lIGJ1Z3MgcmV2ZWFsZWQgdGhyb3VnaAorICAgIG1jc2wubXJvKCkgY3VzdG9taXphdGlvbiAodHlwZW9iamVjdC5jOiBtcm9faW50ZXJuYWwoKSkgYW5kCisgICAgY2xzLl9fYmFzZXNfXyBhc3NpZ25tZW50ICh0eXBlb2JqZWN0LmM6IHR5cGVfc2V0X2Jhc2VzKCkpLgorICAgICIiIgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnN0ZXAgPSAwCisgICAgICAgIHNlbGYucmVhZHkgPSBGYWxzZQorCisgICAgZGVmIHN0ZXBfdW50aWwoc2VsZiwgbGltaXQpOgorICAgICAgICByZXQgPSAoc2VsZi5zdGVwIDwgbGltaXQpCisgICAgICAgIGlmIHJldDoKKyAgICAgICAgICAgIHNlbGYuc3RlcCArPSAxCisgICAgICAgIHJldHVybiByZXQKKworICAgIGRlZiB0ZXN0X2luY29tcGxldGVfc2V0X2Jhc2VzX29uX3NlbGYoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICB0eXBlX3NldF9iYXNlcyBtdXN0IGJlIGF3YXJlIHRoYXQgdHlwZS0+dHBfbXJvIGNhbiBiZSBOVUxMLgorICAgICAgICAiIiIKKyAgICAgICAgY2xhc3MgTShEZWJ1Z0hlbHBlck1ldGEpOgorICAgICAgICAgICAgZGVmIG1ybyhjbHMpOgorICAgICAgICAgICAgICAgIGlmIHNlbGYuc3RlcF91bnRpbCgxKToKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IGNscy5fX21yb19fIGlzIE5vbmUKKyAgICAgICAgICAgICAgICAgICAgY2xzLl9fYmFzZXNfXyArPSAoKQorCisgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGUubXJvKGNscykKKworICAgICAgICBjbGFzcyBBKG1ldGFjbGFzcz1NKToKKyAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiB0ZXN0X3JlZW50X3NldF9iYXNlc19vbl9iYXNlKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgRGVlcCByZWVudHJhbmN5IG11c3Qgbm90IG92ZXItZGVjcmVmIG9sZF9tcm8uCisgICAgICAgICIiIgorICAgICAgICBjbGFzcyBNKERlYnVnSGVscGVyTWV0YSk6CisgICAgICAgICAgICBkZWYgbXJvKGNscyk6CisgICAgICAgICAgICAgICAgaWYgY2xzLl9fbXJvX18gaXMgbm90IE5vbmUgYW5kIGNscy5fX25hbWVfXyA9PSAnQic6CisgICAgICAgICAgICAgICAgICAgICMgNC01IHN0ZXBzIGFyZSB1c3VhbGx5IGVub3VnaCB0byBtYWtlIGl0IGNyYXNoIHNvbWV3aGVyZQorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLnN0ZXBfdW50aWwoMTApOgorICAgICAgICAgICAgICAgICAgICAgICAgQS5fX2Jhc2VzX18gKz0gKCkKKworICAgICAgICAgICAgICAgIHJldHVybiB0eXBlLm1ybyhjbHMpCisKKyAgICAgICAgY2xhc3MgQShtZXRhY2xhc3M9TSk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGNsYXNzIEIoQSk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIEIuX19iYXNlc19fICs9ICgpCisKKyAgICBkZWYgdGVzdF9yZWVudF9zZXRfYmFzZXNfb25fZGlyZWN0X2Jhc2Uoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBTaW1pbGFyIHRvIHRlc3RfcmVlbnRfc2V0X2Jhc2VzX29uX2Jhc2UsIGJ1dCBtYXkgY3Jhc2ggZGlmZmVyZW50bHkuCisgICAgICAgICIiIgorICAgICAgICBjbGFzcyBNKERlYnVnSGVscGVyTWV0YSk6CisgICAgICAgICAgICBkZWYgbXJvKGNscyk6CisgICAgICAgICAgICAgICAgYmFzZSA9IGNscy5fX2Jhc2VzX19bMF0KKyAgICAgICAgICAgICAgICBpZiBiYXNlIGlzIG5vdCBvYmplY3Q6CisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuc3RlcF91bnRpbCg1KToKKyAgICAgICAgICAgICAgICAgICAgICAgIGJhc2UuX19iYXNlc19fICs9ICgpCisKKyAgICAgICAgICAgICAgICByZXR1cm4gdHlwZS5tcm8oY2xzKQorCisgICAgICAgIGNsYXNzIEEobWV0YWNsYXNzPU0pOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjbGFzcyBCKEEpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjbGFzcyBDKEIpOgorICAgICAgICAgICAgcGFzcworCisgICAgZGVmIHRlc3RfcmVlbnRfc2V0X2Jhc2VzX3RwX2Jhc2VfY3ljbGUoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICB0eXBlX3NldF9iYXNlcyBtdXN0IGNoZWNrIGZvciBhbiBpbmhlcml0YW5jZSBjeWNsZSBub3Qgb25seSB0aHJvdWdoCisgICAgICAgIE1STyBvZiB0aGUgdHlwZSwgd2hpY2ggbWF5IGJlIG5vdCB5ZXQgdXBkYXRlZCBpbiBjYXNlIG9mIHJlZW50cmFuY2UsCisgICAgICAgIGJ1dCBhbHNvIHRocm91Z2ggdHBfYmFzZSBjaGFpbiwgd2hpY2ggaXMgYXNzaWduZWQgYmVmb3JlIGRpdmluZyBpbnRvCisgICAgICAgIGlubmVyIGNhbGxzIHRvIG1ybygpLgorCisgICAgICAgIE90aGVyd2lzZSwgdGhlIGZvbGxvd2luZyBzbmlwcGV0IGNhbiBsb29wIGZvcmV2ZXI6CisgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgLy8gLi4uCisgICAgICAgICAgICAgICAgdHlwZSA9IHR5cGUtPnRwX2Jhc2U7CisgICAgICAgICAgICB9IHdoaWxlICh0eXBlICE9IE5VTEwpOworCisgICAgICAgIEZ1bmN0aW9ucyB0aGF0IHJlbHkgb24gdHBfYmFzZSAobGlrZSBzb2xpZF9iYXNlIGFuZCBQeVR5cGVfSXNTdWJ0eXBlKQorICAgICAgICB3b3VsZCBub3QgYmUgaGFwcHkgaW4gdGhhdCBjYXNlLCBjYXVzaW5nIGEgc3RhY2sgb3ZlcmZsb3cuCisgICAgICAgICIiIgorICAgICAgICBjbGFzcyBNKERlYnVnSGVscGVyTWV0YSk6CisgICAgICAgICAgICBkZWYgbXJvKGNscyk6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5yZWFkeToKKyAgICAgICAgICAgICAgICAgICAgaWYgY2xzLl9fbmFtZV9fID09ICdCMSc6CisgICAgICAgICAgICAgICAgICAgICAgICBCMi5fX2Jhc2VzX18gPSAoQjEsKQorICAgICAgICAgICAgICAgICAgICBpZiBjbHMuX19uYW1lX18gPT0gJ0IyJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIEIxLl9fYmFzZXNfXyA9IChCMiwpCisgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGUubXJvKGNscykKKworICAgICAgICBjbGFzcyBBKG1ldGFjbGFzcz1NKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY2xhc3MgQjEoQSk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGNsYXNzIEIyKEEpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIHNlbGYucmVhZHkgPSBUcnVlCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIEIxLl9fYmFzZXNfXyArPSAoKQorCisgICAgZGVmIHRlc3RfdHBfc3ViY2xhc3Nlc19jeWNsZV9pbl91cGRhdGVfc2xvdHMoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICB0eXBlX3NldF9iYXNlcyBtdXN0IGNoZWNrIGZvciByZWVudHJhbmN5IHVwb24gZmluaXNoaW5nIGl0cyBqb2IKKyAgICAgICAgYnkgdXBkYXRpbmcgdHBfc3ViY2xhc3NlcyBvZiBvbGQvbmV3IGJhc2VzIG9mIHRoZSB0eXBlLgorICAgICAgICBPdGhlcndpc2UsIGFuIGltcGxpY2l0IGluaGVyaXRhbmNlIGN5Y2xlIHRocm91Z2ggdHBfc3ViY2xhc3NlcworICAgICAgICBjYW4gYnJlYWsgZnVuY3Rpb25zIHRoYXQgcmVjdXJzZSBvbiBlbGVtZW50cyBvZiB0aGF0IGZpZWxkCisgICAgICAgIChsaWtlIHJlY3Vyc2VfZG93bl9zdWJjbGFzc2VzIGFuZCBtcm9faGllcmFyY2h5KSBldmVudHVhbGx5CisgICAgICAgIGxlYWRpbmcgdG8gYSBzdGFjayBvdmVyZmxvdy4KKyAgICAgICAgIiIiCisgICAgICAgIGNsYXNzIE0oRGVidWdIZWxwZXJNZXRhKToKKyAgICAgICAgICAgIGRlZiBtcm8oY2xzKToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLnJlYWR5IGFuZCBjbHMuX19uYW1lX18gPT0gJ0MnOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnJlYWR5ID0gRmFsc2UKKyAgICAgICAgICAgICAgICAgICAgQy5fX2Jhc2VzX18gPSAoQjIsKQorICAgICAgICAgICAgICAgIHJldHVybiB0eXBlLm1ybyhjbHMpCisKKyAgICAgICAgY2xhc3MgQShtZXRhY2xhc3M9TSk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGNsYXNzIEIxKEEpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjbGFzcyBCMihBKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY2xhc3MgQyhBKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBzZWxmLnJlYWR5ID0gVHJ1ZQorICAgICAgICBDLl9fYmFzZXNfXyA9IChCMSwpCisgICAgICAgIEIxLl9fYmFzZXNfXyA9IChDLCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEMuX19iYXNlc19fLCAoQjIsKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChCMi5fX3N1YmNsYXNzZXNfXygpLCBbQ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQjEuX19zdWJjbGFzc2VzX18oKSwgW10pCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChCMS5fX2Jhc2VzX18sIChDLCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQy5fX3N1YmNsYXNzZXNfXygpLCBbQjFdKQorCisgICAgZGVmIHRlc3RfdHBfc3ViY2xhc3Nlc19jeWNsZV9lcnJvcl9yZXR1cm5fcGF0aChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFRoZSBzYW1lIGFzIHRlc3RfdHBfc3ViY2xhc3Nlc19jeWNsZV9pbl91cGRhdGVfc2xvdHMsIGJ1dCB0ZXN0cworICAgICAgICBhIGNvZGUgcGF0aCBleGVjdXRlZCBvbiBlcnJvciAoZ290byBiYWlsKS4KKyAgICAgICAgIiIiCisgICAgICAgIGNsYXNzIEUoRXhjZXB0aW9uKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY2xhc3MgTShEZWJ1Z0hlbHBlck1ldGEpOgorICAgICAgICAgICAgZGVmIG1ybyhjbHMpOgorICAgICAgICAgICAgICAgIGlmIHNlbGYucmVhZHkgYW5kIGNscy5fX25hbWVfXyA9PSAnQyc6CisgICAgICAgICAgICAgICAgICAgIGlmIEMuX19iYXNlc19fID09IChCMiwpOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5yZWFkeSA9IEZhbHNlCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBDLl9fYmFzZXNfXyA9IChCMiwpCisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBFCisgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGUubXJvKGNscykKKworICAgICAgICBjbGFzcyBBKG1ldGFjbGFzcz1NKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY2xhc3MgQjEoQSk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGNsYXNzIEIyKEEpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjbGFzcyBDKEEpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIHNlbGYucmVhZHkgPSBUcnVlCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoRSk6CisgICAgICAgICAgICBDLl9fYmFzZXNfXyA9IChCMSwpCisgICAgICAgIEIxLl9fYmFzZXNfXyA9IChDLCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEMuX19iYXNlc19fLCAoQjIsKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDLl9fbXJvX18sIHR1cGxlKHR5cGUubXJvKEMpKSkKKworICAgIGRlZiB0ZXN0X2luY29tcGxldGVfZXh0ZW5kKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgRXh0ZW5kaW5nIGFuIHVuaXRpYWxpemVkIHR5cGUgd2l0aCB0eXBlLT50cF9tcm8gPT0gTlVMTCBtdXN0CisgICAgICAgIHRocm93IGEgcmVhc29uYWJsZSBUeXBlRXJyb3IgZXhjZXB0aW9uLCBpbnN0ZWFkIG9mIGZhaWxpbmcKKyAgICAgICAgd2l0aCBQeUVycl9CYWRJbnRlcm5hbENhbGwuCisgICAgICAgICIiIgorICAgICAgICBjbGFzcyBNKERlYnVnSGVscGVyTWV0YSk6CisgICAgICAgICAgICBkZWYgbXJvKGNscyk6CisgICAgICAgICAgICAgICAgaWYgY2xzLl9fbXJvX18gaXMgTm9uZSBhbmQgY2xzLl9fbmFtZV9fICE9ICdYJzoKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MgWChjbHMpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAgICAgICAgIHJldHVybiB0eXBlLm1ybyhjbHMpCisKKyAgICAgICAgY2xhc3MgQShtZXRhY2xhc3M9TSk6CisgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgdGVzdF9pbmNvbXBsZXRlX3N1cGVyKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgQXR0cnVidXRlIGxvb2t1cCBvbiBhIHN1cGVyIG9iamVjdCBtdXN0IGJlIGF3YXJlIHRoYXQKKyAgICAgICAgaXRzIHRhcmdldCB0eXBlIGNhbiBiZSB1bmluaXRpYWxpemVkICh0eXBlLT50cF9tcm8gPT0gTlVMTCkuCisgICAgICAgICIiIgorICAgICAgICBjbGFzcyBNKERlYnVnSGVscGVyTWV0YSk6CisgICAgICAgICAgICBkZWYgbXJvKGNscyk6CisgICAgICAgICAgICAgICAgaWYgY2xzLl9fbXJvX18gaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvcik6CisgICAgICAgICAgICAgICAgICAgICAgICBzdXBlcihjbHMsIGNscykueHh4CisKKyAgICAgICAgICAgICAgICByZXR1cm4gdHlwZS5tcm8oY2xzKQorCisgICAgICAgIGNsYXNzIEEobWV0YWNsYXNzPU0pOgorICAgICAgICAgICAgcGFzcworCisKIGRlZiB0ZXN0X21haW4oKToKICAgICAjIFJ1biBhbGwgbG9jYWwgdGVzdCBjYXNlcywgd2l0aCBQVHlwZXNMb25nSW5pdFRlc3QgZmlyc3QuCiAgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoUFR5cGVzTG9uZ0luaXRUZXN0LCBPcGVyYXRvcnNUZXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIENsYXNzUHJvcGVydGllc0FuZE1ldGhvZHMsIERpY3RQcm94eVRlc3RzLAotICAgICAgICAgICAgICAgICAgICAgICAgIE1pc2NUZXN0cykKKyAgICAgICAgICAgICAgICAgICAgICAgICBNaXNjVGVzdHMsIFBpY2tsaW5nVGVzdHMsIFNoYXJlZEtleVRlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgIE1yb1Rlc3QpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZGV2cG9sbC5weSBiL0xpYi90ZXN0L3Rlc3RfZGV2cG9sbC5weQppbmRleCA5MTI5YWMwLi45NTU2MThhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2RldnBvbGwucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9kZXZwb2xsLnB5CkBAIC0yLDEzICsyLDE1IEBACiAKICMgSW5pdGlhbCB0ZXN0cyBhcmUgY29waWVkIGFzIGlzIGZyb20gInRlc3RfcG9sbC5weSIKIAotaW1wb3J0IG9zLCBzZWxlY3QsIHJhbmRvbSwgdW5pdHRlc3QsIHN5cworaW1wb3J0IG9zCitpbXBvcnQgcmFuZG9tCitpbXBvcnQgc2VsZWN0CitpbXBvcnQgc3lzCitpbXBvcnQgdW5pdHRlc3QKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBURVNURk4sIHJ1bl91bml0dGVzdCwgY3B5dGhvbl9vbmx5CiAKLXRyeToKLSAgICBzZWxlY3QuZGV2cG9sbAotZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJzZWxlY3QuZGV2cG9sbCBub3QgZGVmaW5lZCAtLSBza2lwcGluZyB0ZXN0X2RldnBvbGwiKQoraWYgbm90IGhhc2F0dHIoc2VsZWN0LCAnZGV2cG9sbCcpIDoKKyAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgndGVzdCB3b3JrcyBvbmx5IG9uIFNvbGFyaXMgT1MgZmFtaWx5JykKIAogCiBkZWYgZmluZF9yZWFkeV9tYXRjaGluZyhyZWFkeSwgZmxhZyk6CkBAIC04Nyw2ICs4OSwzNSBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBwb2xsc3Rlci5wb2xsLCAxIDw8IDYzKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBwb2xsc3Rlci5wb2xsLCAxIDw8IDY0KQogCisgICAgZGVmIHRlc3RfY2xvc2Uoc2VsZik6CisgICAgICAgIG9wZW5fZmlsZSA9IG9wZW4oX19maWxlX18sICJyYiIpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcGVuX2ZpbGUuY2xvc2UpCisgICAgICAgIGZkID0gb3Blbl9maWxlLmZpbGVubygpCisgICAgICAgIGRldnBvbGwgPSBzZWxlY3QuZGV2cG9sbCgpCisKKyAgICAgICAgIyB0ZXN0IGZpbGVubygpIG1ldGhvZCBhbmQgY2xvc2VkIGF0dHJpYnV0ZQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZGV2cG9sbC5maWxlbm8oKSwgaW50KQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGRldnBvbGwuY2xvc2VkKQorCisgICAgICAgICMgdGVzdCBjbG9zZSgpCisgICAgICAgIGRldnBvbGwuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZGV2cG9sbC5jbG9zZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGRldnBvbGwuZmlsZW5vKQorCisgICAgICAgICMgY2xvc2UoKSBjYW4gYmUgY2FsbGVkIG1vcmUgdGhhbiBvbmNlCisgICAgICAgIGRldnBvbGwuY2xvc2UoKQorCisgICAgICAgICMgb3BlcmF0aW9ucyBtdXN0IGZhaWwgd2l0aCBWYWx1ZUVycm9yKCJJL08gb3BlcmF0aW9uIG9uIGNsb3NlZCAuLi4iKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBkZXZwb2xsLm1vZGlmeSwgZmQsIHNlbGVjdC5QT0xMSU4pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGRldnBvbGwucG9sbCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZGV2cG9sbC5yZWdpc3RlciwgZmQsIGZkLCBzZWxlY3QuUE9MTElOKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBkZXZwb2xsLnVucmVnaXN0ZXIsIGZkKQorCisgICAgZGVmIHRlc3RfZmRfbm9uX2luaGVyaXRhYmxlKHNlbGYpOgorICAgICAgICBkZXZwb2xsID0gc2VsZWN0LmRldnBvbGwoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoZGV2cG9sbC5jbG9zZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5nZXRfaW5oZXJpdGFibGUoZGV2cG9sbC5maWxlbm8oKSksIEZhbHNlKQorCiAgICAgZGVmIHRlc3RfZXZlbnRzX21hc2tfb3ZlcmZsb3coc2VsZik6CiAgICAgICAgIHBvbGxzdGVyID0gc2VsZWN0LmRldnBvbGwoKQogICAgICAgICB3LCByID0gb3MucGlwZSgpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2RpY3QucHkgYi9MaWIvdGVzdC90ZXN0X2RpY3QucHkKaW5kZXggYmQzMDQwYS4uODBmZWI5MCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9kaWN0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZGljdC5weQpAQCAtNjAzLDcgKzYwMyw3IEBACiAgICAgICAgICMgKEQpIHN1YmNsYXNzIGRlZmluZXMgX19taXNzaW5nX18gbWV0aG9kIHJldHVybmluZyBhIHZhbHVlCiAgICAgICAgICMgKEUpIHN1YmNsYXNzIGRlZmluZXMgX19taXNzaW5nX18gbWV0aG9kIHJhaXNpbmcgUnVudGltZUVycm9yCiAgICAgICAgICMgKEYpIHN1YmNsYXNzIHNldHMgX19taXNzaW5nX18gaW5zdGFuY2UgdmFyaWFibGUgKG5vIGVmZmVjdCkKLSAgICAgICAgIyAoRykgc3ViY2xhc3MgZG9lc24ndCBkZWZpbmUgX19taXNzaW5nX18gYXQgYSBhbGwKKyAgICAgICAgIyAoRykgc3ViY2xhc3MgZG9lc24ndCBkZWZpbmUgX19taXNzaW5nX18gYXQgYWxsCiAgICAgICAgIGNsYXNzIEQoZGljdCk6CiAgICAgICAgICAgICBkZWYgX19taXNzaW5nX18oc2VsZiwga2V5KToKICAgICAgICAgICAgICAgICByZXR1cm4gNDIKQEAgLTgzNyw1NyArODM3LDYwIEBACiAgICAgICAgIHNlbGYuX3RyYWNrZWQoTXlEaWN0KCkpCiAKICAgICBkZWYgdGVzdF9pdGVyYXRvcl9waWNrbGluZyhzZWxmKToKLSAgICAgICAgZGF0YSA9IHsxOiJhIiwgMjoiYiIsIDM6ImMifQotICAgICAgICBpdCA9IGl0ZXIoZGF0YSkKLSAgICAgICAgZCA9IHBpY2tsZS5kdW1wcyhpdCkKLSAgICAgICAgaXQgPSBwaWNrbGUubG9hZHMoZCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQoaXQpLCBzb3J0ZWQoZGF0YSkpCisgICAgICAgIGZvciBwcm90byBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgZGF0YSA9IHsxOiJhIiwgMjoiYiIsIDM6ImMifQorICAgICAgICAgICAgaXQgPSBpdGVyKGRhdGEpCisgICAgICAgICAgICBkID0gcGlja2xlLmR1bXBzKGl0LCBwcm90bykKKyAgICAgICAgICAgIGl0ID0gcGlja2xlLmxvYWRzKGQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChpdCksIHNvcnRlZChkYXRhKSkKIAotICAgICAgICBpdCA9IHBpY2tsZS5sb2FkcyhkKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBkcm9wID0gbmV4dChpdCkKLSAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246Ci0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgZCA9IHBpY2tsZS5kdW1wcyhpdCkKLSAgICAgICAgaXQgPSBwaWNrbGUubG9hZHMoZCkKLSAgICAgICAgZGVsIGRhdGFbZHJvcF0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQoaXQpLCBzb3J0ZWQoZGF0YSkpCisgICAgICAgICAgICBpdCA9IHBpY2tsZS5sb2FkcyhkKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGRyb3AgPSBuZXh0KGl0KQorICAgICAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGQgPSBwaWNrbGUuZHVtcHMoaXQsIHByb3RvKQorICAgICAgICAgICAgaXQgPSBwaWNrbGUubG9hZHMoZCkKKyAgICAgICAgICAgIGRlbCBkYXRhW2Ryb3BdCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChpdCksIHNvcnRlZChkYXRhKSkKIAogICAgIGRlZiB0ZXN0X2l0ZW1pdGVyYXRvcl9waWNrbGluZyhzZWxmKToKLSAgICAgICAgZGF0YSA9IHsxOiJhIiwgMjoiYiIsIDM6ImMifQotICAgICAgICAjIGRpY3R2aWV3cyBhcmVuJ3QgcGlja2xhYmxlLCBvbmx5IHRoZWlyIGl0ZXJhdG9ycwotICAgICAgICBpdG9yZyA9IGl0ZXIoZGF0YS5pdGVtcygpKQotICAgICAgICBkID0gcGlja2xlLmR1bXBzKGl0b3JnKQotICAgICAgICBpdCA9IHBpY2tsZS5sb2FkcyhkKQotICAgICAgICAjIG5vdGUgdGhhdCB0aGUgdHlwZSBvZiB0eXBlIG9mIHRoZSB1bnBpY2tsZWQgaXRlcmF0b3IKLSAgICAgICAgIyBpcyBub3QgbmVjZXNzYXJpbHkgdGhlIHNhbWUgYXMgdGhlIG9yaWdpbmFsLiAgSXQgaXMKLSAgICAgICAgIyBtZXJlbHkgYW4gb2JqZWN0IHN1cHBvcnRpbmcgdGhlIGl0ZXJhdG9yIHByb3RvY29sLCB5aWVsZGluZwotICAgICAgICAjIHRoZSBzYW1lIG9iamVjdHMgYXMgdGhlIG9yaWdpbmFsIG9uZS4KLSAgICAgICAgIyBzZWxmLmFzc2VydEVxdWFsKHR5cGUoaXRvcmcpLCB0eXBlKGl0KSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoaXQsIGNvbGxlY3Rpb25zLmFiYy5JdGVyYXRvcikpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGljdChpdCksIGRhdGEpCisgICAgICAgIGZvciBwcm90byBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgZGF0YSA9IHsxOiJhIiwgMjoiYiIsIDM6ImMifQorICAgICAgICAgICAgIyBkaWN0dmlld3MgYXJlbid0IHBpY2tsYWJsZSwgb25seSB0aGVpciBpdGVyYXRvcnMKKyAgICAgICAgICAgIGl0b3JnID0gaXRlcihkYXRhLml0ZW1zKCkpCisgICAgICAgICAgICBkID0gcGlja2xlLmR1bXBzKGl0b3JnLCBwcm90bykKKyAgICAgICAgICAgIGl0ID0gcGlja2xlLmxvYWRzKGQpCisgICAgICAgICAgICAjIG5vdGUgdGhhdCB0aGUgdHlwZSBvZiB0eXBlIG9mIHRoZSB1bnBpY2tsZWQgaXRlcmF0b3IKKyAgICAgICAgICAgICMgaXMgbm90IG5lY2Vzc2FyaWx5IHRoZSBzYW1lIGFzIHRoZSBvcmlnaW5hbC4gIEl0IGlzCisgICAgICAgICAgICAjIG1lcmVseSBhbiBvYmplY3Qgc3VwcG9ydGluZyB0aGUgaXRlcmF0b3IgcHJvdG9jb2wsIHlpZWxkaW5nCisgICAgICAgICAgICAjIHRoZSBzYW1lIG9iamVjdHMgYXMgdGhlIG9yaWdpbmFsIG9uZS4KKyAgICAgICAgICAgICMgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGl0b3JnKSwgdHlwZShpdCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoaXQsIGNvbGxlY3Rpb25zLmFiYy5JdGVyYXRvcikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGljdChpdCksIGRhdGEpCiAKLSAgICAgICAgaXQgPSBwaWNrbGUubG9hZHMoZCkKLSAgICAgICAgZHJvcCA9IG5leHQoaXQpCi0gICAgICAgIGQgPSBwaWNrbGUuZHVtcHMoaXQpCi0gICAgICAgIGl0ID0gcGlja2xlLmxvYWRzKGQpCi0gICAgICAgIGRlbCBkYXRhW2Ryb3BbMF1dCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGljdChpdCksIGRhdGEpCisgICAgICAgICAgICBpdCA9IHBpY2tsZS5sb2FkcyhkKQorICAgICAgICAgICAgZHJvcCA9IG5leHQoaXQpCisgICAgICAgICAgICBkID0gcGlja2xlLmR1bXBzKGl0LCBwcm90bykKKyAgICAgICAgICAgIGl0ID0gcGlja2xlLmxvYWRzKGQpCisgICAgICAgICAgICBkZWwgZGF0YVtkcm9wWzBdXQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWN0KGl0KSwgZGF0YSkKIAogICAgIGRlZiB0ZXN0X3ZhbHVlc2l0ZXJhdG9yX3BpY2tsaW5nKHNlbGYpOgotICAgICAgICBkYXRhID0gezE6ImEiLCAyOiJiIiwgMzoiYyJ9Ci0gICAgICAgICMgZGF0YS52YWx1ZXMoKSBpc24ndCBwaWNrbGFibGUsIG9ubHkgaXRzIGl0ZXJhdG9yCi0gICAgICAgIGl0ID0gaXRlcihkYXRhLnZhbHVlcygpKQotICAgICAgICBkID0gcGlja2xlLmR1bXBzKGl0KQotICAgICAgICBpdCA9IHBpY2tsZS5sb2FkcyhkKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChsaXN0KGl0KSksIHNvcnRlZChsaXN0KGRhdGEudmFsdWVzKCkpKSkKKyAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MKToKKyAgICAgICAgICAgIGRhdGEgPSB7MToiYSIsIDI6ImIiLCAzOiJjIn0KKyAgICAgICAgICAgICMgZGF0YS52YWx1ZXMoKSBpc24ndCBwaWNrbGFibGUsIG9ubHkgaXRzIGl0ZXJhdG9yCisgICAgICAgICAgICBpdCA9IGl0ZXIoZGF0YS52YWx1ZXMoKSkKKyAgICAgICAgICAgIGQgPSBwaWNrbGUuZHVtcHMoaXQsIHByb3RvKQorICAgICAgICAgICAgaXQgPSBwaWNrbGUubG9hZHMoZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKGxpc3QoaXQpKSwgc29ydGVkKGxpc3QoZGF0YS52YWx1ZXMoKSkpKQogCi0gICAgICAgIGl0ID0gcGlja2xlLmxvYWRzKGQpCi0gICAgICAgIGRyb3AgPSBuZXh0KGl0KQotICAgICAgICBkID0gcGlja2xlLmR1bXBzKGl0KQotICAgICAgICBpdCA9IHBpY2tsZS5sb2FkcyhkKQotICAgICAgICB2YWx1ZXMgPSBsaXN0KGl0KSArIFtkcm9wXQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZCh2YWx1ZXMpLCBzb3J0ZWQobGlzdChkYXRhLnZhbHVlcygpKSkpCisgICAgICAgICAgICBpdCA9IHBpY2tsZS5sb2FkcyhkKQorICAgICAgICAgICAgZHJvcCA9IG5leHQoaXQpCisgICAgICAgICAgICBkID0gcGlja2xlLmR1bXBzKGl0LCBwcm90bykKKyAgICAgICAgICAgIGl0ID0gcGlja2xlLmxvYWRzKGQpCisgICAgICAgICAgICB2YWx1ZXMgPSBsaXN0KGl0KSArIFtkcm9wXQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQodmFsdWVzKSwgc29ydGVkKGxpc3QoZGF0YS52YWx1ZXMoKSkpKQogCiAgICAgZGVmIHRlc3RfaW5zdGFuY2VfZGljdF9nZXRhdHRyX3N0cl9zdWJjbGFzcyhzZWxmKToKICAgICAgICAgY2xhc3MgRm9vOgpAQCAtOTA2LDYgKzkwOSwzNCBAQAogICAgICAgICBmLmEgPSAnYScKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLl9fZGljdF9fLCB7MToxLCAnYSc6J2EnfSkKIAorICAgIGRlZiBjaGVja19yZWVudHJhbnRfaW5zZXJ0aW9uKHNlbGYsIG11dGF0ZSk6CisgICAgICAgICMgVGhpcyBvYmplY3Qgd2lsbCB0cmlnZ2VyIG11dGF0aW9uIG9mIHRoZSBkaWN0IHdoZW4gcmVwbGFjZWQKKyAgICAgICAgIyBieSBhbm90aGVyIHZhbHVlLiAgTm90ZSB0aGlzIHJlbGllcyBvbiByZWZjb3VudGluZzogdGhlIHRlc3QKKyAgICAgICAgIyB3b24ndCBhY2hpZXZlIGl0cyBwdXJwb3NlIG9uIGZ1bGx5LUdDZWQgUHl0aG9uIGltcGxlbWVudGF0aW9ucy4KKyAgICAgICAgY2xhc3MgTXV0YXRpbmc6CisgICAgICAgICAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBtdXRhdGUoZCkKKworICAgICAgICBkID0ge2s6IE11dGF0aW5nKCkgZm9yIGsgaW4gJ2FiY2RlZmdoaWprbG1ub3Bxcid9CisgICAgICAgIGZvciBrIGluIGxpc3QoZCk6CisgICAgICAgICAgICBkW2tdID0gaworCisgICAgZGVmIHRlc3RfcmVlbnRyYW50X2luc2VydGlvbihzZWxmKToKKyAgICAgICAgIyBSZWVudHJhbnQgaW5zZXJ0aW9uIHNob3VsZG4ndCBjcmFzaCAoc2VlIGlzc3VlICMyMjY1MykKKyAgICAgICAgZGVmIG11dGF0ZShkKToKKyAgICAgICAgICAgIGRbJ2InXSA9IDUKKyAgICAgICAgc2VsZi5jaGVja19yZWVudHJhbnRfaW5zZXJ0aW9uKG11dGF0ZSkKKworICAgICAgICBkZWYgbXV0YXRlKGQpOgorICAgICAgICAgICAgZC51cGRhdGUoc2VsZi5fX2RpY3RfXykKKyAgICAgICAgICAgIGQuY2xlYXIoKQorICAgICAgICBzZWxmLmNoZWNrX3JlZW50cmFudF9pbnNlcnRpb24obXV0YXRlKQorCisgICAgICAgIGRlZiBtdXRhdGUoZCk6CisgICAgICAgICAgICB3aGlsZSBkOgorICAgICAgICAgICAgICAgIGQucG9waXRlbSgpCisgICAgICAgIHNlbGYuY2hlY2tfcmVlbnRyYW50X2luc2VydGlvbihtdXRhdGUpCisKICAgICBkZWYgdGVzdF9tZXJnZV9hbmRfbXV0YXRlKHNlbGYpOgogICAgICAgICBjbGFzcyBYOgogICAgICAgICAgICAgZGVmIF9faGFzaF9fKHNlbGYpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9kaWN0dmlld3MucHkgYi9MaWIvdGVzdC90ZXN0X2RpY3R2aWV3cy5weQppbmRleCA3YjAyZWE5Li5jNzcxNGNmIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2RpY3R2aWV3cy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2RpY3R2aWV3cy5weQpAQCAtMSwzICsxLDUgQEAKK2ltcG9ydCBjb3B5CitpbXBvcnQgcGlja2xlCiBpbXBvcnQgdW5pdHRlc3QKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogCkBAIC0xOTgsNiArMjAwLDIyIEBACiAgICAgICAgIGRbNDJdID0gZC52YWx1ZXMoKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIHJlcHIsIGQpCiAKKyAgICBkZWYgdGVzdF9jb3B5KHNlbGYpOgorICAgICAgICBkID0gezE6IDEwLCAiYSI6ICJBQkMifQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvcHkuY29weSwgZC5rZXlzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY29weS5jb3B5LCBkLnZhbHVlcygpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvcHkuY29weSwgZC5pdGVtcygpKQorCisgICAgZGVmIHRlc3RfcGlja2xlKHNlbGYpOgorICAgICAgICBkID0gezE6IDEwLCAiYSI6ICJBQkMifQorICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChUeXBlRXJyb3IsIHBpY2tsZS5QaWNrbGluZ0Vycm9yKSwKKyAgICAgICAgICAgICAgICBwaWNrbGUuZHVtcHMsIGQua2V5cygpLCBwcm90bykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChUeXBlRXJyb3IsIHBpY2tsZS5QaWNrbGluZ0Vycm9yKSwKKyAgICAgICAgICAgICAgICBwaWNrbGUuZHVtcHMsIGQudmFsdWVzKCksIHByb3RvKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoKFR5cGVFcnJvciwgcGlja2xlLlBpY2tsaW5nRXJyb3IpLAorICAgICAgICAgICAgICAgIHBpY2tsZS5kdW1wcywgZC5pdGVtcygpLCBwcm90bykKKwogCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoRGljdFNldFRlc3QpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2RpZmZsaWIucHkgYi9MaWIvdGVzdC90ZXN0X2RpZmZsaWIucHkKaW5kZXggMzI1NDQ5YS4uMGJhOGYwZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9kaWZmbGliLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZGlmZmxpYi5weQpAQCAtNzYsNiArNzYsMTUgQEAKICAgICAgICAgZGlmZl9nZW4gPSBkaWZmbGliLnVuaWZpZWRfZGlmZihbXSwgW10pCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN0b3BJdGVyYXRpb24sIG5leHQsIGRpZmZfZ2VuKQogCisgICAgZGVmIHRlc3RfbWF0Y2hpbmdfYmxvY2tzX2NhY2hlKHNlbGYpOgorICAgICAgICAjIElzc3VlICMyMTYzNQorICAgICAgICBzID0gZGlmZmxpYi5TZXF1ZW5jZU1hdGNoZXIoTm9uZSwgImFieGNkIiwgImFiY2QiKQorICAgICAgICBmaXJzdCA9IHMuZ2V0X21hdGNoaW5nX2Jsb2NrcygpCisgICAgICAgIHNlY29uZCA9IHMuZ2V0X21hdGNoaW5nX2Jsb2NrcygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2Vjb25kWzBdLnNpemUsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2Vjb25kWzFdLnNpemUsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2Vjb25kWzJdLnNpemUsIDApCisKICAgICBkZWYgdGVzdF9hZGRlZF90YWJfaGludChzZWxmKToKICAgICAgICAgIyBDaGVjayBmaXggZm9yIGJ1ZyAjMTQ4ODk0MwogICAgICAgICBkaWZmID0gbGlzdChkaWZmbGliLkRpZmZlcigpLmNvbXBhcmUoWyJcdEkgYW0gYSBidWdneSJdLFsiXHRcdEkgYW0gYSBidWciXSkpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2Rpcy5weSBiL0xpYi90ZXN0L3Rlc3RfZGlzLnB5CmluZGV4IGI4NmNjODYuLmI4ZGFmZjcgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZGlzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZGlzLnB5CkBAIC0xLDEyICsxLDMwIEBACiAjIE1pbmltYWwgdGVzdHMgZm9yIGRpcyBtb2R1bGUKIAogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgY2FwdHVyZWRfc3Rkb3V0Citmcm9tIHRlc3QuYnl0ZWNvZGVfaGVscGVyIGltcG9ydCBCeXRlY29kZVRlc3RDYXNlCiBpbXBvcnQgZGlmZmxpYgogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgc3lzCiBpbXBvcnQgZGlzCiBpbXBvcnQgaW8KIGltcG9ydCByZQoraW1wb3J0IHR5cGVzCitpbXBvcnQgY29udGV4dGxpYgorCitkZWYgZ2V0X3RiKCk6CisgICAgZGVmIF9lcnJvcigpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICAxIC8gMAorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICB0YiA9IGUuX190cmFjZWJhY2tfXworICAgICAgICByZXR1cm4gdGIKKworICAgIHRiID0gX2Vycm9yKCkKKyAgICB3aGlsZSB0Yi50Yl9uZXh0OgorICAgICAgICB0YiA9IHRiLnRiX25leHQKKyAgICByZXR1cm4gdGIKKworVFJBQ0VCQUNLX0NPREUgPSBnZXRfdGIoKS50Yl9mcmFtZS5mX2NvZGUKIAogY2xhc3MgX0M6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHgpOgpAQCAtMjMsMTIgKzQxLDEyIEBACiAiIiIgJSAoX0MuX19pbml0X18uX19jb2RlX18uY29fZmlyc3RsaW5lbm8gKyAxLCkKIAogZGlzX2NfaW5zdGFuY2VfbWV0aG9kX2J5dGVzID0gIiIiXAotICAgICAgICAgIDAgTE9BRF9GQVNUICAgICAgICAgICAxICgxKQotICAgICAgICAgIDMgTE9BRF9DT05TVCAgICAgICAgICAxICgxKQotICAgICAgICAgIDYgQ09NUEFSRV9PUCAgICAgICAgICAyICg9PSkKLSAgICAgICAgICA5IExPQURfRkFTVCAgICAgICAgICAgMCAoMCkKLSAgICAgICAgIDEyIFNUT1JFX0FUVFIgICAgICAgICAgMCAoMCkKLSAgICAgICAgIDE1IExPQURfQ09OU1QgICAgICAgICAgMCAoMCkKKyAgICAgICAgICAwIExPQURfRkFTVCAgICAgICAgICAgICAgICAxICgxKQorICAgICAgICAgIDMgTE9BRF9DT05TVCAgICAgICAgICAgICAgIDEgKDEpCisgICAgICAgICAgNiBDT01QQVJFX09QICAgICAgICAgICAgICAgMiAoPT0pCisgICAgICAgICAgOSBMT0FEX0ZBU1QgICAgICAgICAgICAgICAgMCAoMCkKKyAgICAgICAgIDEyIFNUT1JFX0FUVFIgICAgICAgICAgICAgICAwICgwKQorICAgICAgICAgMTUgTE9BRF9DT05TVCAgICAgICAgICAgICAgIDAgKDApCiAgICAgICAgICAxOCBSRVRVUk5fVkFMVUUKICIiIgogCkBAIC00OSwxMSArNjcsMTEgQEAKIAogCiBkaXNfZl9jb19jb2RlID0gIiIiXAotICAgICAgICAgIDAgTE9BRF9HTE9CQUwgICAgICAgICAwICgwKQotICAgICAgICAgIDMgTE9BRF9GQVNUICAgICAgICAgICAwICgwKQotICAgICAgICAgIDYgQ0FMTF9GVU5DVElPTiAgICAgICAxICgxIHBvc2l0aW9uYWwsIDAga2V5d29yZCBwYWlyKQorICAgICAgICAgIDAgTE9BRF9HTE9CQUwgICAgICAgICAgICAgIDAgKDApCisgICAgICAgICAgMyBMT0FEX0ZBU1QgICAgICAgICAgICAgICAgMCAoMCkKKyAgICAgICAgICA2IENBTExfRlVOQ1RJT04gICAgICAgICAgICAxICgxIHBvc2l0aW9uYWwsIDAga2V5d29yZCBwYWlyKQogICAgICAgICAgIDkgUE9QX1RPUAotICAgICAgICAgMTAgTE9BRF9DT05TVCAgICAgICAgICAxICgxKQorICAgICAgICAgMTAgTE9BRF9DT05TVCAgICAgICAgICAgICAgIDEgKDEpCiAgICAgICAgICAxMyBSRVRVUk5fVkFMVUUKICIiIgogCkBAIC04OSw3ICsxMDcsNyBAQAogICAgIHBhc3MKIAogZGlzX2J1ZzEzMzM5ODIgPSAiIiJcCi0gJS00ZCAgICAgICAgIDAgTE9BRF9DT05TVCAgICAgICAgICAgICAgIDEgKDApCislM2QgICAgICAgICAgIDAgTE9BRF9DT05TVCAgICAgICAgICAgICAgIDEgKDApCiAgICAgICAgICAgICAgIDMgUE9QX0pVTVBfSUZfVFJVRSAgICAgICAgMzUKICAgICAgICAgICAgICAgNiBMT0FEX0dMT0JBTCAgICAgICAgICAgICAgMCAoQXNzZXJ0aW9uRXJyb3IpCiAgICAgICAgICAgICAgIDkgTE9BRF9DT05TVCAgICAgICAgICAgICAgIDIgKDxjb2RlIG9iamVjdCA8bGlzdGNvbXA+IGF0IDB4Li4uLCBmaWxlICIlcyIsIGxpbmUgJWQ+KQpAQCAtOTksMTIgKzExNywxMiBAQAogICAgICAgICAgICAgIDIxIEdFVF9JVEVSCiAgICAgICAgICAgICAgMjIgQ0FMTF9GVU5DVElPTiAgICAgICAgICAgIDEgKDEgcG9zaXRpb25hbCwgMCBrZXl3b3JkIHBhaXIpCiAKLSAlLTRkICAgICAgICAyNSBMT0FEX0NPTlNUICAgICAgICAgICAgICAgNCAoMSkKKyUzZCAgICAgICAgICAyNSBMT0FEX0NPTlNUICAgICAgICAgICAgICAgNCAoMSkKICAgICAgICAgICAgICAyOCBCSU5BUllfQURECiAgICAgICAgICAgICAgMjkgQ0FMTF9GVU5DVElPTiAgICAgICAgICAgIDEgKDEgcG9zaXRpb25hbCwgMCBrZXl3b3JkIHBhaXIpCiAgICAgICAgICAgICAgMzIgUkFJU0VfVkFSQVJHUyAgICAgICAgICAgIDEKIAotICUtNGQgICA+PiAgIDM1IExPQURfQ09OU1QgICAgICAgICAgICAgICAwIChOb25lKQorJTNkICAgICA+PiAgIDM1IExPQURfQ09OU1QgICAgICAgICAgICAgICAwIChOb25lKQogICAgICAgICAgICAgIDM4IFJFVFVSTl9WQUxVRQogIiIiICUgKGJ1ZzEzMzM5ODIuX19jb2RlX18uY29fZmlyc3RsaW5lbm8gKyAxLAogICAgICAgIF9fZmlsZV9fLApAQCAtMTYwLDQ5ICsxNzgsODEgQEAKICAgMSAgICAgICAgICAgMCBMT0FEX0NPTlNUICAgICAgICAgICAgICAgMCAoMCkKICAgICAgICAgICAgICAgMyBTVE9SRV9OQU1FICAgICAgICAgICAgICAgMCAoeCkKIAotICAyICAgICAgICAgICA2IFNFVFVQX0xPT1AgICAgICAgICAgICAgIDEzICh0byAyMikKKyAgMiAgICAgICAgICAgNiBTRVRVUF9MT09QICAgICAgICAgICAgICAxNCAodG8gMjMpCiAKICAgMyAgICAgPj4gICAgOSBMT0FEX05BTUUgICAgICAgICAgICAgICAgMCAoeCkKICAgICAgICAgICAgICAxMiBMT0FEX0NPTlNUICAgICAgICAgICAgICAgMSAoMSkKICAgICAgICAgICAgICAxNSBJTlBMQUNFX0FERAogICAgICAgICAgICAgIDE2IFNUT1JFX05BTUUgICAgICAgICAgICAgICAwICh4KQogICAgICAgICAgICAgIDE5IEpVTVBfQUJTT0xVVEUgICAgICAgICAgICA5Ci0gICAgICAgID4+ICAgMjIgTE9BRF9DT05TVCAgICAgICAgICAgICAgIDIgKE5vbmUpCi0gICAgICAgICAgICAgMjUgUkVUVVJOX1ZBTFVFCisgICAgICAgICAgICAgMjIgUE9QX0JMT0NLCisgICAgICAgID4+ICAgMjMgTE9BRF9DT05TVCAgICAgICAgICAgICAgIDIgKE5vbmUpCisgICAgICAgICAgICAgMjYgUkVUVVJOX1ZBTFVFCiAiIiIKIAorZGlzX3RyYWNlYmFjayA9ICIiIlwKKyAlLTRkICAgICAgICAgMCBTRVRVUF9FWENFUFQgICAgICAgICAgICAxMiAodG8gMTUpCisKKyAlLTRkICAgICAgICAgMyBMT0FEX0NPTlNUICAgICAgICAgICAgICAgMSAoMSkKKyAgICAgICAgICAgICAgNiBMT0FEX0NPTlNUICAgICAgICAgICAgICAgMiAoMCkKKyAgICAtLT4gICAgICAgOSBCSU5BUllfVFJVRV9ESVZJREUKKyAgICAgICAgICAgICAxMCBQT1BfVE9QCisgICAgICAgICAgICAgMTEgUE9QX0JMT0NLCisgICAgICAgICAgICAgMTIgSlVNUF9GT1JXQVJEICAgICAgICAgICAgNDYgKHRvIDYxKQorCisgJS00ZCAgID4+ICAgMTUgRFVQX1RPUAorICAgICAgICAgICAgIDE2IExPQURfR0xPQkFMICAgICAgICAgICAgICAwIChFeGNlcHRpb24pCisgICAgICAgICAgICAgMTkgQ09NUEFSRV9PUCAgICAgICAgICAgICAgMTAgKGV4Y2VwdGlvbiBtYXRjaCkKKyAgICAgICAgICAgICAyMiBQT1BfSlVNUF9JRl9GQUxTRSAgICAgICA2MAorICAgICAgICAgICAgIDI1IFBPUF9UT1AKKyAgICAgICAgICAgICAyNiBTVE9SRV9GQVNUICAgICAgICAgICAgICAgMCAoZSkKKyAgICAgICAgICAgICAyOSBQT1BfVE9QCisgICAgICAgICAgICAgMzAgU0VUVVBfRklOQUxMWSAgICAgICAgICAgMTQgKHRvIDQ3KQorCisgJS00ZCAgICAgICAgMzMgTE9BRF9GQVNUICAgICAgICAgICAgICAgIDAgKGUpCisgICAgICAgICAgICAgMzYgTE9BRF9BVFRSICAgICAgICAgICAgICAgIDEgKF9fdHJhY2ViYWNrX18pCisgICAgICAgICAgICAgMzkgU1RPUkVfRkFTVCAgICAgICAgICAgICAgIDEgKHRiKQorICAgICAgICAgICAgIDQyIFBPUF9CTE9DSworICAgICAgICAgICAgIDQzIFBPUF9FWENFUFQKKyAgICAgICAgICAgICA0NCBMT0FEX0NPTlNUICAgICAgICAgICAgICAgMCAoTm9uZSkKKyAgICAgICAgPj4gICA0NyBMT0FEX0NPTlNUICAgICAgICAgICAgICAgMCAoTm9uZSkKKyAgICAgICAgICAgICA1MCBTVE9SRV9GQVNUICAgICAgICAgICAgICAgMCAoZSkKKyAgICAgICAgICAgICA1MyBERUxFVEVfRkFTVCAgICAgICAgICAgICAgMCAoZSkKKyAgICAgICAgICAgICA1NiBFTkRfRklOQUxMWQorICAgICAgICAgICAgIDU3IEpVTVBfRk9SV0FSRCAgICAgICAgICAgICAxICh0byA2MSkKKyAgICAgICAgPj4gICA2MCBFTkRfRklOQUxMWQorCisgJS00ZCAgID4+ICAgNjEgTE9BRF9GQVNUICAgICAgICAgICAgICAgIDEgKHRiKQorICAgICAgICAgICAgIDY0IFJFVFVSTl9WQUxVRQorIiIiICUgKFRSQUNFQkFDS19DT0RFLmNvX2ZpcnN0bGluZW5vICsgMSwKKyAgICAgICBUUkFDRUJBQ0tfQ09ERS5jb19maXJzdGxpbmVubyArIDIsCisgICAgICAgVFJBQ0VCQUNLX0NPREUuY29fZmlyc3RsaW5lbm8gKyAzLAorICAgICAgIFRSQUNFQkFDS19DT0RFLmNvX2ZpcnN0bGluZW5vICsgNCwKKyAgICAgICBUUkFDRUJBQ0tfQ09ERS5jb19maXJzdGxpbmVubyArIDUpCisKIGNsYXNzIERpc1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiBnZXRfZGlzYXNzZW1ibHkoc2VsZiwgZnVuYywgbGFzdGk9LTEsIHdyYXBwZXI9VHJ1ZSk6Ci0gICAgICAgIHMgPSBpby5TdHJpbmdJTygpCi0gICAgICAgIHNhdmVfc3Rkb3V0ID0gc3lzLnN0ZG91dAotICAgICAgICBzeXMuc3Rkb3V0ID0gcwotICAgICAgICB0cnk6CisgICAgICAgICMgV2Ugd2FudCB0byB0ZXN0IHRoZSBkZWZhdWx0IHByaW50aW5nIGJlaGF2aW91ciwgbm90IHRoZSBmaWxlIGFyZworICAgICAgICBvdXRwdXQgPSBpby5TdHJpbmdJTygpCisgICAgICAgIHdpdGggY29udGV4dGxpYi5yZWRpcmVjdF9zdGRvdXQob3V0cHV0KToKICAgICAgICAgICAgIGlmIHdyYXBwZXI6CiAgICAgICAgICAgICAgICAgZGlzLmRpcyhmdW5jKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBkaXMuZGlzYXNzZW1ibGUoZnVuYywgbGFzdGkpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBzeXMuc3Rkb3V0ID0gc2F2ZV9zdGRvdXQKLSAgICAgICAgIyBUcmltIHRyYWlsaW5nIGJsYW5rcyAoaWYgYW55KS4KLSAgICAgICAgcmV0dXJuIFtsaW5lLnJzdHJpcCgpIGZvciBsaW5lIGluIHMuZ2V0dmFsdWUoKS5zcGxpdGxpbmVzKCldCisgICAgICAgIHJldHVybiBvdXRwdXQuZ2V0dmFsdWUoKQogCiAgICAgZGVmIGdldF9kaXNhc3NlbWJsZV9hc19zdHJpbmcoc2VsZiwgZnVuYywgbGFzdGk9LTEpOgotICAgICAgICByZXR1cm4gJ1xuJy5qb2luKHNlbGYuZ2V0X2Rpc2Fzc2VtYmx5KGZ1bmMsIGxhc3RpLCBGYWxzZSkpCisgICAgICAgIHJldHVybiBzZWxmLmdldF9kaXNhc3NlbWJseShmdW5jLCBsYXN0aSwgRmFsc2UpCisKKyAgICBkZWYgc3RyaXBfYWRkcmVzc2VzKHNlbGYsIHRleHQpOgorICAgICAgICByZXR1cm4gcmUuc3ViKHInXGIweFswLTlBLUZhLWZdK1xiJywgJzB4Li4uJywgdGV4dCkKIAogICAgIGRlZiBkb19kaXNhc3NlbWJseV90ZXN0KHNlbGYsIGZ1bmMsIGV4cGVjdGVkKToKLSAgICAgICAgbGluZXMgPSBzZWxmLmdldF9kaXNhc3NlbWJseShmdW5jKQotICAgICAgICBleHBlY3RlZCA9IGV4cGVjdGVkLnNwbGl0bGluZXMoKQotICAgICAgICBpZiBleHBlY3RlZCA9PSBsaW5lczoKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICBlbHNlOgotICAgICAgICAgICAgbGluZXMgPSBbcmUuc3ViKCcweFswLTlBLUZhLWZdKycsICcweC4uLicsIGwpIGZvciBsIGluIGxpbmVzXQotICAgICAgICAgICAgaWYgZXhwZWN0ZWQgPT0gbGluZXM6Ci0gICAgICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIHNlbGYuZmFpbCgKLSAgICAgICAgICAgICAgICAiZXZlbnRzIGRpZCBub3QgbWF0Y2ggZXhwZWN0YXRpb246XG4iICsKLSAgICAgICAgICAgICAgICAiXG4iLmpvaW4oZGlmZmxpYi5uZGlmZihleHBlY3RlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lcykpKQorICAgICAgICBnb3QgPSBzZWxmLmdldF9kaXNhc3NlbWJseShmdW5jKQorICAgICAgICBpZiBnb3QgIT0gZXhwZWN0ZWQ6CisgICAgICAgICAgICBnb3QgPSBzZWxmLnN0cmlwX2FkZHJlc3Nlcyhnb3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ290LCBleHBlY3RlZCkKIAogICAgIGRlZiB0ZXN0X29wbWFwKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpcy5vcG1hcFsiTk9QIl0sIDkpCkBAIC0yOTAsMzUgKzM0MCwzNSBAQAogICAgIGRlZiB0ZXN0X2Rpc19vYmplY3Qoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZGlzLmRpcywgb2JqZWN0KCkpCiAKK2NsYXNzIERpc1dpdGhGaWxlVGVzdHMoRGlzVGVzdHMpOgorCisgICAgIyBSdW4gdGhlIHRlc3RzIGFnYWluLCB1c2luZyB0aGUgZmlsZSBhcmcgaW5zdGVhZCBvZiBwcmludAorICAgIGRlZiBnZXRfZGlzYXNzZW1ibHkoc2VsZiwgZnVuYywgbGFzdGk9LTEsIHdyYXBwZXI9VHJ1ZSk6CisgICAgICAgIG91dHB1dCA9IGlvLlN0cmluZ0lPKCkKKyAgICAgICAgaWYgd3JhcHBlcjoKKyAgICAgICAgICAgIGRpcy5kaXMoZnVuYywgZmlsZT1vdXRwdXQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBkaXMuZGlzYXNzZW1ibGUoZnVuYywgbGFzdGksIGZpbGU9b3V0cHV0KQorICAgICAgICByZXR1cm4gb3V0cHV0LmdldHZhbHVlKCkKKworCisKIGNvZGVfaW5mb19jb2RlX2luZm8gPSAiIiJcCiBOYW1lOiAgICAgICAgICAgICAgY29kZV9pbmZvCiBGaWxlbmFtZTogICAgICAgICAgKC4qKQogQXJndW1lbnQgY291bnQ6ICAgIDEKIEt3LW9ubHkgYXJndW1lbnRzOiAwCiBOdW1iZXIgb2YgbG9jYWxzOiAgMQotU3RhY2sgc2l6ZTogICAgICAgIDQKK1N0YWNrIHNpemU6ICAgICAgICAzCiBGbGFnczogICAgICAgICAgICAgT1BUSU1JWkVELCBORVdMT0NBTFMsIE5PRlJFRQogQ29uc3RhbnRzOgogICAgMDogJXIKLSAgIDE6ICdfX2Z1bmNfXycKLSAgIDI6ICdfX2NvZGVfXycKLSAgIDM6ICc8Y29kZV9pbmZvPicKLSAgIDQ6ICdjb19jb2RlJwotICAgNTogImRvbid0IGtub3cgaG93IHRvIGRpc2Fzc2VtYmxlICUlcyBvYmplY3RzIgotJXNOYW1lczoKLSAgIDA6IGhhc2F0dHIKLSAgIDE6IF9fZnVuY19fCi0gICAyOiBfX2NvZGVfXwotICAgMzogaXNpbnN0YW5jZQotICAgNDogc3RyCi0gICA1OiBfdHJ5X2NvbXBpbGUKLSAgIDY6IF9mb3JtYXRfY29kZV9pbmZvCi0gICA3OiBUeXBlRXJyb3IKLSAgIDg6IHR5cGUKLSAgIDk6IF9fbmFtZV9fCitOYW1lczoKKyAgIDA6IF9mb3JtYXRfY29kZV9pbmZvCisgICAxOiBfZ2V0X2NvZGVfb2JqZWN0CiBWYXJpYWJsZSBuYW1lczoKLSAgIDA6IHgiIiIgJSAoKCdGb3JtYXR0ZWQgZGV0YWlscyBvZiBtZXRob2RzLCBmdW5jdGlvbnMsIG9yIGNvZGUuJywgJyAgIDY6IE5vbmVcbicpCi0gICAgICAgICAgICAgIGlmIHN5cy5mbGFncy5vcHRpbWl6ZSA8IDIgZWxzZSAoTm9uZSwgJycpKQorICAgMDogeCIiIiAlICgoJ0Zvcm1hdHRlZCBkZXRhaWxzIG9mIG1ldGhvZHMsIGZ1bmN0aW9ucywgb3IgY29kZS4nLCkKKyAgICAgICAgICAgICAgaWYgc3lzLmZsYWdzLm9wdGltaXplIDwgMiBlbHNlIChOb25lLCkpCiAKIEBzdGF0aWNtZXRob2QKIGRlZiB0cmlja3koeCwgeSwgej1UcnVlLCAqYXJncywgYywgZCwgZT1bXSwgKiprd2RzKToKQEAgLTM4Miw3ICs0MzIsNyBAQAogCiBjb2RlX2luZm9fZXhwcl9zdHIgPSAiIiJcCiBOYW1lOiAgICAgICAgICAgICAgPG1vZHVsZT4KLUZpbGVuYW1lOiAgICAgICAgICA8Y29kZV9pbmZvPgorRmlsZW5hbWU6ICAgICAgICAgIDxkaXNhc3NlbWJseT4KIEFyZ3VtZW50IGNvdW50OiAgICAwCiBLdy1vbmx5IGFyZ3VtZW50czogMAogTnVtYmVyIG9mIGxvY2FsczogIDAKQEAgLTM5NSw3ICs0NDUsNyBAQAogCiBjb2RlX2luZm9fc2ltcGxlX3N0bXRfc3RyID0gIiIiXAogTmFtZTogICAgICAgICAgICAgIDxtb2R1bGU+Ci1GaWxlbmFtZTogICAgICAgICAgPGNvZGVfaW5mbz4KK0ZpbGVuYW1lOiAgICAgICAgICA8ZGlzYXNzZW1ibHk+CiBBcmd1bWVudCBjb3VudDogICAgMAogS3ctb25seSBhcmd1bWVudHM6IDAKIE51bWJlciBvZiBsb2NhbHM6ICAwCkBAIC00MDksNyArNDU5LDcgQEAKIAogY29kZV9pbmZvX2NvbXBvdW5kX3N0bXRfc3RyID0gIiIiXAogTmFtZTogICAgICAgICAgICAgIDxtb2R1bGU+Ci1GaWxlbmFtZTogICAgICAgICAgPGNvZGVfaW5mbz4KK0ZpbGVuYW1lOiAgICAgICAgICA8ZGlzYXNzZW1ibHk+CiBBcmd1bWVudCBjb3VudDogICAgMAogS3ctb25seSBhcmd1bWVudHM6IDAKIE51bWJlciBvZiBsb2NhbHM6ICAwCkBAIC00NDMsNiArNDkzLDkgQEAKICAgICAgICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgb3V0cHV0OgogICAgICAgICAgICAgICAgIGRpcy5zaG93X2NvZGUoeCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXgob3V0cHV0LmdldHZhbHVlKCksIGV4cGVjdGVkKyJcbiIpCisgICAgICAgICAgICBvdXRwdXQgPSBpby5TdHJpbmdJTygpCisgICAgICAgICAgICBkaXMuc2hvd19jb2RlKHgsIGZpbGU9b3V0cHV0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSZWdleChvdXRwdXQuZ2V0dmFsdWUoKSwgZXhwZWN0ZWQpCiAKICAgICBkZWYgdGVzdF9jb2RlX2luZm9fb2JqZWN0KHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGRpcy5jb2RlX2luZm8sIG9iamVjdCgpKQpAQCAtNDUxLDUgKzUwNCwzMzAgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXMucHJldHR5X2ZsYWdzKDApLCAnMHgwJykKIAogCisjIEZvZGRlciBmb3IgaW5zdHJ1Y3Rpb24gaW50cm9zcGVjdGlvbiB0ZXN0cworIyAgIEVkaXRpbmcgYW55IG9mIHRoZXNlIG1heSByZXF1aXJlIHJlY2FsY3VsYXRpbmcgdGhlIGV4cGVjdGVkIG91dHB1dAorZGVmIG91dGVyKGE9MSwgYj0yKToKKyAgICBkZWYgZihjPTMsIGQ9NCk6CisgICAgICAgIGRlZiBpbm5lcihlPTUsIGY9Nik6CisgICAgICAgICAgICBwcmludChhLCBiLCBjLCBkLCBlLCBmKQorICAgICAgICBwcmludChhLCBiLCBjLCBkKQorICAgICAgICByZXR1cm4gaW5uZXIKKyAgICBwcmludChhLCBiLCAnJywgMSwgW10sIHt9LCAiSGVsbG8gd29ybGQhIikKKyAgICByZXR1cm4gZgorCitkZWYganVtcHkoKToKKyAgICAjIFRoaXMgd29uJ3QgYWN0dWFsbHkgcnVuIChidXQgdGhhdCdzIE9LLCB3ZSBvbmx5IGRpc2Fzc2VtYmxlIGl0KQorICAgIGZvciBpIGluIHJhbmdlKDEwKToKKyAgICAgICAgcHJpbnQoaSkKKyAgICAgICAgaWYgaSA8IDQ6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBpZiBpID4gNjoKKyAgICAgICAgICAgIGJyZWFrCisgICAgZWxzZToKKyAgICAgICAgcHJpbnQoIkkgY2FuIGhheiBlbHNlIGNsYXVzZT8iKQorICAgIHdoaWxlIGk6CisgICAgICAgIHByaW50KGkpCisgICAgICAgIGkgLT0gMQorICAgICAgICBpZiBpID4gNjoKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGlmIGkgPCA0OgorICAgICAgICAgICAgYnJlYWsKKyAgICBlbHNlOgorICAgICAgICBwcmludCgiV2hvIGxldCBsb2xjYXR6IGludG8gdGhpcyB0ZXN0IHN1aXRlPyIpCisgICAgdHJ5OgorICAgICAgICAxIC8gMAorICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvcjoKKyAgICAgICAgcHJpbnQoIkhlcmUgd2UgZ28sIGhlcmUgd2UgZ28sIGhlcmUgd2UgZ28uLi4iKQorICAgIGVsc2U6CisgICAgICAgIHdpdGggaSBhcyBkb2RneToKKyAgICAgICAgICAgIHByaW50KCJOZXZlciByZWFjaCB0aGlzIikKKyAgICBmaW5hbGx5OgorICAgICAgICBwcmludCgiT0ssIG5vdyB3ZSdyZSBkb25lIikKKworIyBFbmQgZm9kZGVyIGZvciBvcGluZm8gZ2VuZXJhdGlvbiB0ZXN0cworZXhwZWN0ZWRfb3V0ZXJfbGluZSA9IDEKK19saW5lX29mZnNldCA9IG91dGVyLl9fY29kZV9fLmNvX2ZpcnN0bGluZW5vIC0gMQorY29kZV9vYmplY3RfZiA9IG91dGVyLl9fY29kZV9fLmNvX2NvbnN0c1szXQorZXhwZWN0ZWRfZl9saW5lID0gY29kZV9vYmplY3RfZi5jb19maXJzdGxpbmVubyAtIF9saW5lX29mZnNldAorY29kZV9vYmplY3RfaW5uZXIgPSBjb2RlX29iamVjdF9mLmNvX2NvbnN0c1szXQorZXhwZWN0ZWRfaW5uZXJfbGluZSA9IGNvZGVfb2JqZWN0X2lubmVyLmNvX2ZpcnN0bGluZW5vIC0gX2xpbmVfb2Zmc2V0CitleHBlY3RlZF9qdW1weV9saW5lID0gMQorCisjIFRoZSBmb2xsb3dpbmcgbGluZXMgYXJlIHVzZWZ1bCB0byByZWdlbmVyYXRlIHRoZSBleHBlY3RlZCByZXN1bHRzIGFmdGVyCisjIGVpdGhlciB0aGUgZm9kZGVyIGlzIG1vZGlmaWVkIG9yIHRoZSBieXRlY29kZSBnZW5lcmF0aW9uIGNoYW5nZXMKKyMgQWZ0ZXIgcmVnZW5lcmF0aW9uLCB1cGRhdGUgdGhlIHJlZmVyZW5jZXMgdG8gY29kZV9vYmplY3RfZiBhbmQKKyMgY29kZV9vYmplY3RfaW5uZXIgYmVmb3JlIHJlcnVubmluZyB0aGUgdGVzdHMKKworI19pbnN0cnVjdGlvbnMgPSBkaXMuZ2V0X2luc3RydWN0aW9ucyhvdXRlciwgZmlyc3RfbGluZT1leHBlY3RlZF9vdXRlcl9saW5lKQorI3ByaW50KCdleHBlY3RlZF9vcGluZm9fb3V0ZXIgPSBbXG4gICcsCisgICAgICAjJyxcbiAgJy5qb2luKG1hcChzdHIsIF9pbnN0cnVjdGlvbnMpKSwgJyxcbl0nLCBzZXA9JycpCisjX2luc3RydWN0aW9ucyA9IGRpcy5nZXRfaW5zdHJ1Y3Rpb25zKG91dGVyKCksIGZpcnN0X2xpbmU9ZXhwZWN0ZWRfb3V0ZXJfbGluZSkKKyNwcmludCgnZXhwZWN0ZWRfb3BpbmZvX2YgPSBbXG4gICcsCisgICAgICAjJyxcbiAgJy5qb2luKG1hcChzdHIsIF9pbnN0cnVjdGlvbnMpKSwgJyxcbl0nLCBzZXA9JycpCisjX2luc3RydWN0aW9ucyA9IGRpcy5nZXRfaW5zdHJ1Y3Rpb25zKG91dGVyKCkoKSwgZmlyc3RfbGluZT1leHBlY3RlZF9vdXRlcl9saW5lKQorI3ByaW50KCdleHBlY3RlZF9vcGluZm9faW5uZXIgPSBbXG4gICcsCisgICAgICAjJyxcbiAgJy5qb2luKG1hcChzdHIsIF9pbnN0cnVjdGlvbnMpKSwgJyxcbl0nLCBzZXA9JycpCisjX2luc3RydWN0aW9ucyA9IGRpcy5nZXRfaW5zdHJ1Y3Rpb25zKGp1bXB5LCBmaXJzdF9saW5lPWV4cGVjdGVkX2p1bXB5X2xpbmUpCisjcHJpbnQoJ2V4cGVjdGVkX29waW5mb19qdW1weSA9IFtcbiAgJywKKyAgICAgICMnLFxuICAnLmpvaW4obWFwKHN0ciwgX2luc3RydWN0aW9ucykpLCAnLFxuXScsIHNlcD0nJykKKworCitJbnN0cnVjdGlvbiA9IGRpcy5JbnN0cnVjdGlvbgorZXhwZWN0ZWRfb3BpbmZvX291dGVyID0gWworICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ09OU1QnLCBvcGNvZGU9MTAwLCBhcmc9MSwgYXJndmFsPTMsIGFyZ3JlcHI9JzMnLCBvZmZzZXQ9MCwgc3RhcnRzX2xpbmU9MiwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ09OU1QnLCBvcGNvZGU9MTAwLCBhcmc9MiwgYXJndmFsPTQsIGFyZ3JlcHI9JzQnLCBvZmZzZXQ9Mywgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ0xPU1VSRScsIG9wY29kZT0xMzUsIGFyZz0wLCBhcmd2YWw9J2EnLCBhcmdyZXByPSdhJywgb2Zmc2V0PTYsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0NMT1NVUkUnLCBvcGNvZGU9MTM1LCBhcmc9MSwgYXJndmFsPSdiJywgYXJncmVwcj0nYicsIG9mZnNldD05LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nQlVJTERfVFVQTEUnLCBvcGNvZGU9MTAyLCBhcmc9MiwgYXJndmFsPTIsIGFyZ3JlcHI9JycsIG9mZnNldD0xMiwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ09OU1QnLCBvcGNvZGU9MTAwLCBhcmc9MywgYXJndmFsPWNvZGVfb2JqZWN0X2YsIGFyZ3JlcHI9cmVwcihjb2RlX29iamVjdF9mKSwgb2Zmc2V0PTE1LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz00LCBhcmd2YWw9J291dGVyLjxsb2NhbHM+LmYnLCBhcmdyZXByPSInb3V0ZXIuPGxvY2Fscz4uZiciLCBvZmZzZXQ9MTgsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdNQUtFX0NMT1NVUkUnLCBvcGNvZGU9MTM0LCBhcmc9MiwgYXJndmFsPTIsIGFyZ3JlcHI9JycsIG9mZnNldD0yMSwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1NUT1JFX0ZBU1QnLCBvcGNvZGU9MTI1LCBhcmc9MiwgYXJndmFsPSdmJywgYXJncmVwcj0nZicsIG9mZnNldD0yNCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfR0xPQkFMJywgb3Bjb2RlPTExNiwgYXJnPTAsIGFyZ3ZhbD0ncHJpbnQnLCBhcmdyZXByPSdwcmludCcsIG9mZnNldD0yNywgc3RhcnRzX2xpbmU9NywgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfREVSRUYnLCBvcGNvZGU9MTM2LCBhcmc9MCwgYXJndmFsPSdhJywgYXJncmVwcj0nYScsIG9mZnNldD0zMCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfREVSRUYnLCBvcGNvZGU9MTM2LCBhcmc9MSwgYXJndmFsPSdiJywgYXJncmVwcj0nYicsIG9mZnNldD0zMywgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ09OU1QnLCBvcGNvZGU9MTAwLCBhcmc9NSwgYXJndmFsPScnLCBhcmdyZXByPSInJyIsIG9mZnNldD0zNiwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ09OU1QnLCBvcGNvZGU9MTAwLCBhcmc9NiwgYXJndmFsPTEsIGFyZ3JlcHI9JzEnLCBvZmZzZXQ9MzksIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdCVUlMRF9MSVNUJywgb3Bjb2RlPTEwMywgYXJnPTAsIGFyZ3ZhbD0wLCBhcmdyZXByPScnLCBvZmZzZXQ9NDIsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdCVUlMRF9NQVAnLCBvcGNvZGU9MTA1LCBhcmc9MCwgYXJndmFsPTAsIGFyZ3JlcHI9JycsIG9mZnNldD00NSwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ09OU1QnLCBvcGNvZGU9MTAwLCBhcmc9NywgYXJndmFsPSdIZWxsbyB3b3JsZCEnLCBhcmdyZXByPSInSGVsbG8gd29ybGQhJyIsIG9mZnNldD00OCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0NBTExfRlVOQ1RJT04nLCBvcGNvZGU9MTMxLCBhcmc9NywgYXJndmFsPTcsIGFyZ3JlcHI9JzcgcG9zaXRpb25hbCwgMCBrZXl3b3JkIHBhaXInLCBvZmZzZXQ9NTEsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdQT1BfVE9QJywgb3Bjb2RlPTEsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTU0LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9GQVNUJywgb3Bjb2RlPTEyNCwgYXJnPTIsIGFyZ3ZhbD0nZicsIGFyZ3JlcHI9J2YnLCBvZmZzZXQ9NTUsIHN0YXJ0c19saW5lPTgsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdSRVRVUk5fVkFMVUUnLCBvcGNvZGU9ODMsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTU4LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCitdCisKK2V4cGVjdGVkX29waW5mb19mID0gWworICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ09OU1QnLCBvcGNvZGU9MTAwLCBhcmc9MSwgYXJndmFsPTUsIGFyZ3JlcHI9JzUnLCBvZmZzZXQ9MCwgc3RhcnRzX2xpbmU9MywgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ09OU1QnLCBvcGNvZGU9MTAwLCBhcmc9MiwgYXJndmFsPTYsIGFyZ3JlcHI9JzYnLCBvZmZzZXQ9Mywgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ0xPU1VSRScsIG9wY29kZT0xMzUsIGFyZz0yLCBhcmd2YWw9J2EnLCBhcmdyZXByPSdhJywgb2Zmc2V0PTYsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0NMT1NVUkUnLCBvcGNvZGU9MTM1LCBhcmc9MywgYXJndmFsPSdiJywgYXJncmVwcj0nYicsIG9mZnNldD05LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DTE9TVVJFJywgb3Bjb2RlPTEzNSwgYXJnPTAsIGFyZ3ZhbD0nYycsIGFyZ3JlcHI9J2MnLCBvZmZzZXQ9MTIsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0NMT1NVUkUnLCBvcGNvZGU9MTM1LCBhcmc9MSwgYXJndmFsPSdkJywgYXJncmVwcj0nZCcsIG9mZnNldD0xNSwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0JVSUxEX1RVUExFJywgb3Bjb2RlPTEwMiwgYXJnPTQsIGFyZ3ZhbD00LCBhcmdyZXByPScnLCBvZmZzZXQ9MTgsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0NPTlNUJywgb3Bjb2RlPTEwMCwgYXJnPTMsIGFyZ3ZhbD1jb2RlX29iamVjdF9pbm5lciwgYXJncmVwcj1yZXByKGNvZGVfb2JqZWN0X2lubmVyKSwgb2Zmc2V0PTIxLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz00LCBhcmd2YWw9J291dGVyLjxsb2NhbHM+LmYuPGxvY2Fscz4uaW5uZXInLCBhcmdyZXByPSInb3V0ZXIuPGxvY2Fscz4uZi48bG9jYWxzPi5pbm5lciciLCBvZmZzZXQ9MjQsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdNQUtFX0NMT1NVUkUnLCBvcGNvZGU9MTM0LCBhcmc9MiwgYXJndmFsPTIsIGFyZ3JlcHI9JycsIG9mZnNldD0yNywgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1NUT1JFX0ZBU1QnLCBvcGNvZGU9MTI1LCBhcmc9MiwgYXJndmFsPSdpbm5lcicsIGFyZ3JlcHI9J2lubmVyJywgb2Zmc2V0PTMwLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9HTE9CQUwnLCBvcGNvZGU9MTE2LCBhcmc9MCwgYXJndmFsPSdwcmludCcsIGFyZ3JlcHI9J3ByaW50Jywgb2Zmc2V0PTMzLCBzdGFydHNfbGluZT01LCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9ERVJFRicsIG9wY29kZT0xMzYsIGFyZz0yLCBhcmd2YWw9J2EnLCBhcmdyZXByPSdhJywgb2Zmc2V0PTM2LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9ERVJFRicsIG9wY29kZT0xMzYsIGFyZz0zLCBhcmd2YWw9J2InLCBhcmdyZXByPSdiJywgb2Zmc2V0PTM5LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9ERVJFRicsIG9wY29kZT0xMzYsIGFyZz0wLCBhcmd2YWw9J2MnLCBhcmdyZXByPSdjJywgb2Zmc2V0PTQyLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9ERVJFRicsIG9wY29kZT0xMzYsIGFyZz0xLCBhcmd2YWw9J2QnLCBhcmdyZXByPSdkJywgb2Zmc2V0PTQ1LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nQ0FMTF9GVU5DVElPTicsIG9wY29kZT0xMzEsIGFyZz00LCBhcmd2YWw9NCwgYXJncmVwcj0nNCBwb3NpdGlvbmFsLCAwIGtleXdvcmQgcGFpcicsIG9mZnNldD00OCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1BPUF9UT1AnLCBvcGNvZGU9MSwgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9NTEsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0ZBU1QnLCBvcGNvZGU9MTI0LCBhcmc9MiwgYXJndmFsPSdpbm5lcicsIGFyZ3JlcHI9J2lubmVyJywgb2Zmc2V0PTUyLCBzdGFydHNfbGluZT02LCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nUkVUVVJOX1ZBTFVFJywgb3Bjb2RlPTgzLCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD01NSwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorXQorCitleHBlY3RlZF9vcGluZm9faW5uZXIgPSBbCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9HTE9CQUwnLCBvcGNvZGU9MTE2LCBhcmc9MCwgYXJndmFsPSdwcmludCcsIGFyZ3JlcHI9J3ByaW50Jywgb2Zmc2V0PTAsIHN0YXJ0c19saW5lPTQsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0RFUkVGJywgb3Bjb2RlPTEzNiwgYXJnPTAsIGFyZ3ZhbD0nYScsIGFyZ3JlcHI9J2EnLCBvZmZzZXQ9Mywgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfREVSRUYnLCBvcGNvZGU9MTM2LCBhcmc9MSwgYXJndmFsPSdiJywgYXJncmVwcj0nYicsIG9mZnNldD02LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9ERVJFRicsIG9wY29kZT0xMzYsIGFyZz0yLCBhcmd2YWw9J2MnLCBhcmdyZXByPSdjJywgb2Zmc2V0PTksIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0RFUkVGJywgb3Bjb2RlPTEzNiwgYXJnPTMsIGFyZ3ZhbD0nZCcsIGFyZ3JlcHI9J2QnLCBvZmZzZXQ9MTIsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0ZBU1QnLCBvcGNvZGU9MTI0LCBhcmc9MCwgYXJndmFsPSdlJywgYXJncmVwcj0nZScsIG9mZnNldD0xNSwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfRkFTVCcsIG9wY29kZT0xMjQsIGFyZz0xLCBhcmd2YWw9J2YnLCBhcmdyZXByPSdmJywgb2Zmc2V0PTE4LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nQ0FMTF9GVU5DVElPTicsIG9wY29kZT0xMzEsIGFyZz02LCBhcmd2YWw9NiwgYXJncmVwcj0nNiBwb3NpdGlvbmFsLCAwIGtleXdvcmQgcGFpcicsIG9mZnNldD0yMSwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1BPUF9UT1AnLCBvcGNvZGU9MSwgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9MjQsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0NPTlNUJywgb3Bjb2RlPTEwMCwgYXJnPTAsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPSdOb25lJywgb2Zmc2V0PTI1LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nUkVUVVJOX1ZBTFVFJywgb3Bjb2RlPTgzLCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0yOCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorXQorCitleHBlY3RlZF9vcGluZm9fanVtcHkgPSBbCisgIEluc3RydWN0aW9uKG9wbmFtZT0nU0VUVVBfTE9PUCcsIG9wY29kZT0xMjAsIGFyZz03NCwgYXJndmFsPTc3LCBhcmdyZXByPSd0byA3NycsIG9mZnNldD0wLCBzdGFydHNfbGluZT0zLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9HTE9CQUwnLCBvcGNvZGU9MTE2LCBhcmc9MCwgYXJndmFsPSdyYW5nZScsIGFyZ3JlcHI9J3JhbmdlJywgb2Zmc2V0PTMsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0NPTlNUJywgb3Bjb2RlPTEwMCwgYXJnPTEsIGFyZ3ZhbD0xMCwgYXJncmVwcj0nMTAnLCBvZmZzZXQ9Niwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0NBTExfRlVOQ1RJT04nLCBvcGNvZGU9MTMxLCBhcmc9MSwgYXJndmFsPTEsIGFyZ3JlcHI9JzEgcG9zaXRpb25hbCwgMCBrZXl3b3JkIHBhaXInLCBvZmZzZXQ9OSwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0dFVF9JVEVSJywgb3Bjb2RlPTY4LCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0xMiwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0ZPUl9JVEVSJywgb3Bjb2RlPTkzLCBhcmc9NTAsIGFyZ3ZhbD02NiwgYXJncmVwcj0ndG8gNjYnLCBvZmZzZXQ9MTMsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PVRydWUpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1NUT1JFX0ZBU1QnLCBvcGNvZGU9MTI1LCBhcmc9MCwgYXJndmFsPSdpJywgYXJncmVwcj0naScsIG9mZnNldD0xNiwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfR0xPQkFMJywgb3Bjb2RlPTExNiwgYXJnPTEsIGFyZ3ZhbD0ncHJpbnQnLCBhcmdyZXByPSdwcmludCcsIG9mZnNldD0xOSwgc3RhcnRzX2xpbmU9NCwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfRkFTVCcsIG9wY29kZT0xMjQsIGFyZz0wLCBhcmd2YWw9J2knLCBhcmdyZXByPSdpJywgb2Zmc2V0PTIyLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nQ0FMTF9GVU5DVElPTicsIG9wY29kZT0xMzEsIGFyZz0xLCBhcmd2YWw9MSwgYXJncmVwcj0nMSBwb3NpdGlvbmFsLCAwIGtleXdvcmQgcGFpcicsIG9mZnNldD0yNSwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1BPUF9UT1AnLCBvcGNvZGU9MSwgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9MjgsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0ZBU1QnLCBvcGNvZGU9MTI0LCBhcmc9MCwgYXJndmFsPSdpJywgYXJncmVwcj0naScsIG9mZnNldD0yOSwgc3RhcnRzX2xpbmU9NSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ09OU1QnLCBvcGNvZGU9MTAwLCBhcmc9MiwgYXJndmFsPTQsIGFyZ3JlcHI9JzQnLCBvZmZzZXQ9MzIsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdDT01QQVJFX09QJywgb3Bjb2RlPTEwNywgYXJnPTAsIGFyZ3ZhbD0nPCcsIGFyZ3JlcHI9JzwnLCBvZmZzZXQ9MzUsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdQT1BfSlVNUF9JRl9GQUxTRScsIG9wY29kZT0xMTQsIGFyZz00NywgYXJndmFsPTQ3LCBhcmdyZXByPScnLCBvZmZzZXQ9MzgsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdKVU1QX0FCU09MVVRFJywgb3Bjb2RlPTExMywgYXJnPTEzLCBhcmd2YWw9MTMsIGFyZ3JlcHI9JycsIG9mZnNldD00MSwgc3RhcnRzX2xpbmU9NiwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0pVTVBfRk9SV0FSRCcsIG9wY29kZT0xMTAsIGFyZz0wLCBhcmd2YWw9NDcsIGFyZ3JlcHI9J3RvIDQ3Jywgb2Zmc2V0PTQ0LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9GQVNUJywgb3Bjb2RlPTEyNCwgYXJnPTAsIGFyZ3ZhbD0naScsIGFyZ3JlcHI9J2knLCBvZmZzZXQ9NDcsIHN0YXJ0c19saW5lPTcsIGlzX2p1bXBfdGFyZ2V0PVRydWUpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ09OU1QnLCBvcGNvZGU9MTAwLCBhcmc9MywgYXJndmFsPTYsIGFyZ3JlcHI9JzYnLCBvZmZzZXQ9NTAsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdDT01QQVJFX09QJywgb3Bjb2RlPTEwNywgYXJnPTQsIGFyZ3ZhbD0nPicsIGFyZ3JlcHI9Jz4nLCBvZmZzZXQ9NTMsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdQT1BfSlVNUF9JRl9GQUxTRScsIG9wY29kZT0xMTQsIGFyZz0xMywgYXJndmFsPTEzLCBhcmdyZXByPScnLCBvZmZzZXQ9NTYsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdCUkVBS19MT09QJywgb3Bjb2RlPTgwLCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD01OSwgc3RhcnRzX2xpbmU9OCwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0pVTVBfQUJTT0xVVEUnLCBvcGNvZGU9MTEzLCBhcmc9MTMsIGFyZ3ZhbD0xMywgYXJncmVwcj0nJywgb2Zmc2V0PTYwLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nSlVNUF9BQlNPTFVURScsIG9wY29kZT0xMTMsIGFyZz0xMywgYXJndmFsPTEzLCBhcmdyZXByPScnLCBvZmZzZXQ9NjMsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdQT1BfQkxPQ0snLCBvcGNvZGU9ODcsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTY2LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1UcnVlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0dMT0JBTCcsIG9wY29kZT0xMTYsIGFyZz0xLCBhcmd2YWw9J3ByaW50JywgYXJncmVwcj0ncHJpbnQnLCBvZmZzZXQ9NjcsIHN0YXJ0c19saW5lPTEwLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz00LCBhcmd2YWw9J0kgY2FuIGhheiBlbHNlIGNsYXVzZT8nLCBhcmdyZXByPSInSSBjYW4gaGF6IGVsc2UgY2xhdXNlPyciLCBvZmZzZXQ9NzAsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdDQUxMX0ZVTkNUSU9OJywgb3Bjb2RlPTEzMSwgYXJnPTEsIGFyZ3ZhbD0xLCBhcmdyZXByPScxIHBvc2l0aW9uYWwsIDAga2V5d29yZCBwYWlyJywgb2Zmc2V0PTczLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nUE9QX1RPUCcsIG9wY29kZT0xLCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD03Niwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1NFVFVQX0xPT1AnLCBvcGNvZGU9MTIwLCBhcmc9NzQsIGFyZ3ZhbD0xNTQsIGFyZ3JlcHI9J3RvIDE1NCcsIG9mZnNldD03Nywgc3RhcnRzX2xpbmU9MTEsIGlzX2p1bXBfdGFyZ2V0PVRydWUpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfRkFTVCcsIG9wY29kZT0xMjQsIGFyZz0wLCBhcmd2YWw9J2knLCBhcmdyZXByPSdpJywgb2Zmc2V0PTgwLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1UcnVlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdQT1BfSlVNUF9JRl9GQUxTRScsIG9wY29kZT0xMTQsIGFyZz0xNDMsIGFyZ3ZhbD0xNDMsIGFyZ3JlcHI9JycsIG9mZnNldD04Mywgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfR0xPQkFMJywgb3Bjb2RlPTExNiwgYXJnPTEsIGFyZ3ZhbD0ncHJpbnQnLCBhcmdyZXByPSdwcmludCcsIG9mZnNldD04Niwgc3RhcnRzX2xpbmU9MTIsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0ZBU1QnLCBvcGNvZGU9MTI0LCBhcmc9MCwgYXJndmFsPSdpJywgYXJncmVwcj0naScsIG9mZnNldD04OSwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0NBTExfRlVOQ1RJT04nLCBvcGNvZGU9MTMxLCBhcmc9MSwgYXJndmFsPTEsIGFyZ3JlcHI9JzEgcG9zaXRpb25hbCwgMCBrZXl3b3JkIHBhaXInLCBvZmZzZXQ9OTIsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdQT1BfVE9QJywgb3Bjb2RlPTEsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTk1LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9GQVNUJywgb3Bjb2RlPTEyNCwgYXJnPTAsIGFyZ3ZhbD0naScsIGFyZ3JlcHI9J2knLCBvZmZzZXQ9OTYsIHN0YXJ0c19saW5lPTEzLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz01LCBhcmd2YWw9MSwgYXJncmVwcj0nMScsIG9mZnNldD05OSwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0lOUExBQ0VfU1VCVFJBQ1QnLCBvcGNvZGU9NTYsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTEwMiwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1NUT1JFX0ZBU1QnLCBvcGNvZGU9MTI1LCBhcmc9MCwgYXJndmFsPSdpJywgYXJncmVwcj0naScsIG9mZnNldD0xMDMsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0ZBU1QnLCBvcGNvZGU9MTI0LCBhcmc9MCwgYXJndmFsPSdpJywgYXJncmVwcj0naScsIG9mZnNldD0xMDYsIHN0YXJ0c19saW5lPTE0LCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz0zLCBhcmd2YWw9NiwgYXJncmVwcj0nNicsIG9mZnNldD0xMDksIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdDT01QQVJFX09QJywgb3Bjb2RlPTEwNywgYXJnPTQsIGFyZ3ZhbD0nPicsIGFyZ3JlcHI9Jz4nLCBvZmZzZXQ9MTEyLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nUE9QX0pVTVBfSUZfRkFMU0UnLCBvcGNvZGU9MTE0LCBhcmc9MTI0LCBhcmd2YWw9MTI0LCBhcmdyZXByPScnLCBvZmZzZXQ9MTE1LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nSlVNUF9BQlNPTFVURScsIG9wY29kZT0xMTMsIGFyZz04MCwgYXJndmFsPTgwLCBhcmdyZXByPScnLCBvZmZzZXQ9MTE4LCBzdGFydHNfbGluZT0xNSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0pVTVBfRk9SV0FSRCcsIG9wY29kZT0xMTAsIGFyZz0wLCBhcmd2YWw9MTI0LCBhcmdyZXByPSd0byAxMjQnLCBvZmZzZXQ9MTIxLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9GQVNUJywgb3Bjb2RlPTEyNCwgYXJnPTAsIGFyZ3ZhbD0naScsIGFyZ3JlcHI9J2knLCBvZmZzZXQ9MTI0LCBzdGFydHNfbGluZT0xNiwgaXNfanVtcF90YXJnZXQ9VHJ1ZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz0yLCBhcmd2YWw9NCwgYXJncmVwcj0nNCcsIG9mZnNldD0xMjcsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdDT01QQVJFX09QJywgb3Bjb2RlPTEwNywgYXJnPTAsIGFyZ3ZhbD0nPCcsIGFyZ3JlcHI9JzwnLCBvZmZzZXQ9MTMwLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nUE9QX0pVTVBfSUZfRkFMU0UnLCBvcGNvZGU9MTE0LCBhcmc9ODAsIGFyZ3ZhbD04MCwgYXJncmVwcj0nJywgb2Zmc2V0PTEzMywgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0JSRUFLX0xPT1AnLCBvcGNvZGU9ODAsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTEzNiwgc3RhcnRzX2xpbmU9MTcsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdKVU1QX0FCU09MVVRFJywgb3Bjb2RlPTExMywgYXJnPTgwLCBhcmd2YWw9ODAsIGFyZ3JlcHI9JycsIG9mZnNldD0xMzcsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdKVU1QX0FCU09MVVRFJywgb3Bjb2RlPTExMywgYXJnPTgwLCBhcmd2YWw9ODAsIGFyZ3JlcHI9JycsIG9mZnNldD0xNDAsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdQT1BfQkxPQ0snLCBvcGNvZGU9ODcsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTE0Mywgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9VHJ1ZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9HTE9CQUwnLCBvcGNvZGU9MTE2LCBhcmc9MSwgYXJndmFsPSdwcmludCcsIGFyZ3JlcHI9J3ByaW50Jywgb2Zmc2V0PTE0NCwgc3RhcnRzX2xpbmU9MTksIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0NPTlNUJywgb3Bjb2RlPTEwMCwgYXJnPTYsIGFyZ3ZhbD0nV2hvIGxldCBsb2xjYXR6IGludG8gdGhpcyB0ZXN0IHN1aXRlPycsIGFyZ3JlcHI9IidXaG8gbGV0IGxvbGNhdHogaW50byB0aGlzIHRlc3Qgc3VpdGU/JyIsIG9mZnNldD0xNDcsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdDQUxMX0ZVTkNUSU9OJywgb3Bjb2RlPTEzMSwgYXJnPTEsIGFyZ3ZhbD0xLCBhcmdyZXByPScxIHBvc2l0aW9uYWwsIDAga2V5d29yZCBwYWlyJywgb2Zmc2V0PTE1MCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1BPUF9UT1AnLCBvcGNvZGU9MSwgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9MTUzLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nU0VUVVBfRklOQUxMWScsIG9wY29kZT0xMjIsIGFyZz03MiwgYXJndmFsPTIyOSwgYXJncmVwcj0ndG8gMjI5Jywgb2Zmc2V0PTE1NCwgc3RhcnRzX2xpbmU9MjAsIGlzX2p1bXBfdGFyZ2V0PVRydWUpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1NFVFVQX0VYQ0VQVCcsIG9wY29kZT0xMjEsIGFyZz0xMiwgYXJndmFsPTE3MiwgYXJncmVwcj0ndG8gMTcyJywgb2Zmc2V0PTE1Nywgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ09OU1QnLCBvcGNvZGU9MTAwLCBhcmc9NSwgYXJndmFsPTEsIGFyZ3JlcHI9JzEnLCBvZmZzZXQ9MTYwLCBzdGFydHNfbGluZT0yMSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ09OU1QnLCBvcGNvZGU9MTAwLCBhcmc9NywgYXJndmFsPTAsIGFyZ3JlcHI9JzAnLCBvZmZzZXQ9MTYzLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nQklOQVJZX1RSVUVfRElWSURFJywgb3Bjb2RlPTI3LCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0xNjYsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdQT1BfVE9QJywgb3Bjb2RlPTEsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTE2Nywgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1BPUF9CTE9DSycsIG9wY29kZT04NywgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9MTY4LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nSlVNUF9GT1JXQVJEJywgb3Bjb2RlPTExMCwgYXJnPTI4LCBhcmd2YWw9MjAwLCBhcmdyZXByPSd0byAyMDAnLCBvZmZzZXQ9MTY5LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nRFVQX1RPUCcsIG9wY29kZT00LCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0xNzIsIHN0YXJ0c19saW5lPTIyLCBpc19qdW1wX3RhcmdldD1UcnVlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0dMT0JBTCcsIG9wY29kZT0xMTYsIGFyZz0yLCBhcmd2YWw9J1plcm9EaXZpc2lvbkVycm9yJywgYXJncmVwcj0nWmVyb0RpdmlzaW9uRXJyb3InLCBvZmZzZXQ9MTczLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nQ09NUEFSRV9PUCcsIG9wY29kZT0xMDcsIGFyZz0xMCwgYXJndmFsPSdleGNlcHRpb24gbWF0Y2gnLCBhcmdyZXByPSdleGNlcHRpb24gbWF0Y2gnLCBvZmZzZXQ9MTc2LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nUE9QX0pVTVBfSUZfRkFMU0UnLCBvcGNvZGU9MTE0LCBhcmc9MTk5LCBhcmd2YWw9MTk5LCBhcmdyZXByPScnLCBvZmZzZXQ9MTc5LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nUE9QX1RPUCcsIG9wY29kZT0xLCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0xODIsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdQT1BfVE9QJywgb3Bjb2RlPTEsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTE4Mywgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1BPUF9UT1AnLCBvcGNvZGU9MSwgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9MTg0LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9HTE9CQUwnLCBvcGNvZGU9MTE2LCBhcmc9MSwgYXJndmFsPSdwcmludCcsIGFyZ3JlcHI9J3ByaW50Jywgb2Zmc2V0PTE4NSwgc3RhcnRzX2xpbmU9MjMsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0NPTlNUJywgb3Bjb2RlPTEwMCwgYXJnPTgsIGFyZ3ZhbD0nSGVyZSB3ZSBnbywgaGVyZSB3ZSBnbywgaGVyZSB3ZSBnby4uLicsIGFyZ3JlcHI9IidIZXJlIHdlIGdvLCBoZXJlIHdlIGdvLCBoZXJlIHdlIGdvLi4uJyIsIG9mZnNldD0xODgsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdDQUxMX0ZVTkNUSU9OJywgb3Bjb2RlPTEzMSwgYXJnPTEsIGFyZ3ZhbD0xLCBhcmdyZXByPScxIHBvc2l0aW9uYWwsIDAga2V5d29yZCBwYWlyJywgb2Zmc2V0PTE5MSwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1BPUF9UT1AnLCBvcGNvZGU9MSwgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9MTk0LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nUE9QX0VYQ0VQVCcsIG9wY29kZT04OSwgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9MTk1LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nSlVNUF9GT1JXQVJEJywgb3Bjb2RlPTExMCwgYXJnPTI2LCBhcmd2YWw9MjI1LCBhcmdyZXByPSd0byAyMjUnLCBvZmZzZXQ9MTk2LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nRU5EX0ZJTkFMTFknLCBvcGNvZGU9ODgsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTE5OSwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9VHJ1ZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9GQVNUJywgb3Bjb2RlPTEyNCwgYXJnPTAsIGFyZ3ZhbD0naScsIGFyZ3JlcHI9J2knLCBvZmZzZXQ9MjAwLCBzdGFydHNfbGluZT0yNSwgaXNfanVtcF90YXJnZXQ9VHJ1ZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nU0VUVVBfV0lUSCcsIG9wY29kZT0xNDMsIGFyZz0xNywgYXJndmFsPTIyMywgYXJncmVwcj0ndG8gMjIzJywgb2Zmc2V0PTIwMywgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1NUT1JFX0ZBU1QnLCBvcGNvZGU9MTI1LCBhcmc9MSwgYXJndmFsPSdkb2RneScsIGFyZ3JlcHI9J2RvZGd5Jywgb2Zmc2V0PTIwNiwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfR0xPQkFMJywgb3Bjb2RlPTExNiwgYXJnPTEsIGFyZ3ZhbD0ncHJpbnQnLCBhcmdyZXByPSdwcmludCcsIG9mZnNldD0yMDksIHN0YXJ0c19saW5lPTI2LCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz05LCBhcmd2YWw9J05ldmVyIHJlYWNoIHRoaXMnLCBhcmdyZXByPSInTmV2ZXIgcmVhY2ggdGhpcyciLCBvZmZzZXQ9MjEyLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nQ0FMTF9GVU5DVElPTicsIG9wY29kZT0xMzEsIGFyZz0xLCBhcmd2YWw9MSwgYXJncmVwcj0nMSBwb3NpdGlvbmFsLCAwIGtleXdvcmQgcGFpcicsIG9mZnNldD0yMTUsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdQT1BfVE9QJywgb3Bjb2RlPTEsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTIxOCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1BPUF9CTE9DSycsIG9wY29kZT04NywgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9MjE5LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz0wLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nTm9uZScsIG9mZnNldD0yMjAsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdXSVRIX0NMRUFOVVAnLCBvcGNvZGU9ODEsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTIyMywgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9VHJ1ZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nRU5EX0ZJTkFMTFknLCBvcGNvZGU9ODgsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTIyNCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1BPUF9CTE9DSycsIG9wY29kZT04NywgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9MjI1LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1UcnVlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0NPTlNUJywgb3Bjb2RlPTEwMCwgYXJnPTAsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPSdOb25lJywgb2Zmc2V0PTIyNiwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfR0xPQkFMJywgb3Bjb2RlPTExNiwgYXJnPTEsIGFyZ3ZhbD0ncHJpbnQnLCBhcmdyZXByPSdwcmludCcsIG9mZnNldD0yMjksIHN0YXJ0c19saW5lPTI4LCBpc19qdW1wX3RhcmdldD1UcnVlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0NPTlNUJywgb3Bjb2RlPTEwMCwgYXJnPTEwLCBhcmd2YWw9Ik9LLCBub3cgd2UncmUgZG9uZSIsIGFyZ3JlcHI9JyJPSywgbm93IHdlXCdyZSBkb25lIicsIG9mZnNldD0yMzIsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdDQUxMX0ZVTkNUSU9OJywgb3Bjb2RlPTEzMSwgYXJnPTEsIGFyZ3ZhbD0xLCBhcmdyZXByPScxIHBvc2l0aW9uYWwsIDAga2V5d29yZCBwYWlyJywgb2Zmc2V0PTIzNSwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1BPUF9UT1AnLCBvcGNvZGU9MSwgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9MjM4LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nRU5EX0ZJTkFMTFknLCBvcGNvZGU9ODgsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTIzOSwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ09OU1QnLCBvcGNvZGU9MTAwLCBhcmc9MCwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9J05vbmUnLCBvZmZzZXQ9MjQwLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nUkVUVVJOX1ZBTFVFJywgb3Bjb2RlPTgzLCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0yNDMsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKK10KKworIyBPbmUgbGFzdCBwaWVjZSBvZiBpbnNwZWN0IGZvZGRlciB0byBjaGVjayB0aGUgZGVmYXVsdCBsaW5lIG51bWJlciBoYW5kbGluZworZGVmIHNpbXBsZSgpOiBwYXNzCitleHBlY3RlZF9vcGluZm9fc2ltcGxlID0gWworICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ09OU1QnLCBvcGNvZGU9MTAwLCBhcmc9MCwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9J05vbmUnLCBvZmZzZXQ9MCwgc3RhcnRzX2xpbmU9c2ltcGxlLl9fY29kZV9fLmNvX2ZpcnN0bGluZW5vLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nUkVUVVJOX1ZBTFVFJywgb3Bjb2RlPTgzLCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0zLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSkKK10KKworCitjbGFzcyBJbnN0cnVjdGlvblRlc3RzKEJ5dGVjb2RlVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfZGVmYXVsdF9maXJzdF9saW5lKHNlbGYpOgorICAgICAgICBhY3R1YWwgPSBkaXMuZ2V0X2luc3RydWN0aW9ucyhzaW1wbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChhY3R1YWwpLCBleHBlY3RlZF9vcGluZm9fc2ltcGxlKQorCisgICAgZGVmIHRlc3RfZmlyc3RfbGluZV9zZXRfdG9fTm9uZShzZWxmKToKKyAgICAgICAgYWN0dWFsID0gZGlzLmdldF9pbnN0cnVjdGlvbnMoc2ltcGxlLCBmaXJzdF9saW5lPU5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChhY3R1YWwpLCBleHBlY3RlZF9vcGluZm9fc2ltcGxlKQorCisgICAgZGVmIHRlc3Rfb3V0ZXIoc2VsZik6CisgICAgICAgIGFjdHVhbCA9IGRpcy5nZXRfaW5zdHJ1Y3Rpb25zKG91dGVyLCBmaXJzdF9saW5lPWV4cGVjdGVkX291dGVyX2xpbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChhY3R1YWwpLCBleHBlY3RlZF9vcGluZm9fb3V0ZXIpCisKKyAgICBkZWYgdGVzdF9uZXN0ZWQoc2VsZik6CisgICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCk6CisgICAgICAgICAgICBmID0gb3V0ZXIoKQorICAgICAgICBhY3R1YWwgPSBkaXMuZ2V0X2luc3RydWN0aW9ucyhmLCBmaXJzdF9saW5lPWV4cGVjdGVkX2ZfbGluZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGFjdHVhbCksIGV4cGVjdGVkX29waW5mb19mKQorCisgICAgZGVmIHRlc3RfZG91Ymx5X25lc3RlZChzZWxmKToKKyAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKToKKyAgICAgICAgICAgIGlubmVyID0gb3V0ZXIoKSgpCisgICAgICAgIGFjdHVhbCA9IGRpcy5nZXRfaW5zdHJ1Y3Rpb25zKGlubmVyLCBmaXJzdF9saW5lPWV4cGVjdGVkX2lubmVyX2xpbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChhY3R1YWwpLCBleHBlY3RlZF9vcGluZm9faW5uZXIpCisKKyAgICBkZWYgdGVzdF9qdW1weShzZWxmKToKKyAgICAgICAgYWN0dWFsID0gZGlzLmdldF9pbnN0cnVjdGlvbnMoanVtcHksIGZpcnN0X2xpbmU9ZXhwZWN0ZWRfanVtcHlfbGluZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGFjdHVhbCksIGV4cGVjdGVkX29waW5mb19qdW1weSkKKworIyBnZXRfaW5zdHJ1Y3Rpb25zIGhhcyBpdHMgb3duIHRlc3RzIGFib3ZlLCBzbyBjYW4gcmVseSBvbiBpdCB0byB2YWxpZGF0ZQorIyB0aGUgb2JqZWN0IG9yaWVudGVkIEFQSQorY2xhc3MgQnl0ZWNvZGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfaW5zdGFudGlhdGlvbihzZWxmKToKKyAgICAgICAgIyBUZXN0IHdpdGggZnVuY3Rpb24sIG1ldGhvZCwgY29kZSBzdHJpbmcgYW5kIGNvZGUgb2JqZWN0CisgICAgICAgIGZvciBvYmogaW4gW19mLCBfQygxKS5fX2luaXRfXywgImE9MSIsIF9mLl9fY29kZV9fXToKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG9iaj1vYmopOgorICAgICAgICAgICAgICAgIGIgPSBkaXMuQnl0ZWNvZGUob2JqKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShiLmNvZGVvYmosIHR5cGVzLkNvZGVUeXBlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZGlzLkJ5dGVjb2RlLCBvYmplY3QoKSkKKworICAgIGRlZiB0ZXN0X2l0ZXJhdGlvbihzZWxmKToKKyAgICAgICAgZm9yIG9iaiBpbiBbX2YsIF9DKDEpLl9faW5pdF9fLCAiYT0xIiwgX2YuX19jb2RlX19dOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3Qob2JqPW9iaik6CisgICAgICAgICAgICAgICAgdmlhX29iamVjdCA9IGxpc3QoZGlzLkJ5dGVjb2RlKG9iaikpCisgICAgICAgICAgICAgICAgdmlhX2dlbmVyYXRvciA9IGxpc3QoZGlzLmdldF9pbnN0cnVjdGlvbnMob2JqKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZpYV9vYmplY3QsIHZpYV9nZW5lcmF0b3IpCisKKyAgICBkZWYgdGVzdF9leHBsaWNpdF9maXJzdF9saW5lKHNlbGYpOgorICAgICAgICBhY3R1YWwgPSBkaXMuQnl0ZWNvZGUob3V0ZXIsIGZpcnN0X2xpbmU9ZXhwZWN0ZWRfb3V0ZXJfbGluZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGFjdHVhbCksIGV4cGVjdGVkX29waW5mb19vdXRlcikKKworICAgIGRlZiB0ZXN0X3NvdXJjZV9saW5lX2luX2Rpc2Fzc2VtYmx5KHNlbGYpOgorICAgICAgICAjIFVzZSB0aGUgbGluZSBpbiB0aGUgc291cmNlIGNvZGUKKyAgICAgICAgYWN0dWFsID0gZGlzLkJ5dGVjb2RlKHNpbXBsZSkuZGlzKClbOjNdCisgICAgICAgIGV4cGVjdGVkID0gIns6PjN9Ii5mb3JtYXQoc2ltcGxlLl9fY29kZV9fLmNvX2ZpcnN0bGluZW5vKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQpCisgICAgICAgICMgVXNlIGFuIGV4cGxpY2l0IGZpcnN0IGxpbmUgbnVtYmVyCisgICAgICAgIGFjdHVhbCA9IGRpcy5CeXRlY29kZShzaW1wbGUsIGZpcnN0X2xpbmU9MzUwKS5kaXMoKVs6M10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhY3R1YWwsICIzNTAiKQorCisgICAgZGVmIHRlc3RfaW5mbyhzZWxmKToKKyAgICAgICAgc2VsZi5tYXhEaWZmID0gMTAwMAorICAgICAgICBmb3IgeCwgZXhwZWN0ZWQgaW4gQ29kZUluZm9UZXN0cy50ZXN0X3BhaXJzOgorICAgICAgICAgICAgYiA9IGRpcy5CeXRlY29kZSh4KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSZWdleChiLmluZm8oKSwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9kaXNhc3NlbWJsZWQoc2VsZik6CisgICAgICAgIGFjdHVhbCA9IGRpcy5CeXRlY29kZShfZikuZGlzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhY3R1YWwsIGRpc19mKQorCisgICAgZGVmIHRlc3RfZnJvbV90cmFjZWJhY2soc2VsZik6CisgICAgICAgIHRiID0gZ2V0X3RiKCkKKyAgICAgICAgYiA9IGRpcy5CeXRlY29kZS5mcm9tX3RyYWNlYmFjayh0YikKKyAgICAgICAgd2hpbGUgdGIudGJfbmV4dDogdGIgPSB0Yi50Yl9uZXh0CisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLmN1cnJlbnRfb2Zmc2V0LCB0Yi50Yl9sYXN0aSkKKworICAgIGRlZiB0ZXN0X2Zyb21fdHJhY2ViYWNrX2RpcyhzZWxmKToKKyAgICAgICAgdGIgPSBnZXRfdGIoKQorICAgICAgICBiID0gZGlzLkJ5dGVjb2RlLmZyb21fdHJhY2ViYWNrKHRiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuZGlzKCksIGRpc190cmFjZWJhY2spCisKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2RvY3Rlc3QucHkgYi9MaWIvdGVzdC90ZXN0X2RvY3Rlc3QucHkKaW5kZXggODYyNTljMy4uOTI5MmQ5MiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9kb2N0ZXN0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZG9jdGVzdC5weQpAQCAtNDA5LDcgKzQwOSw4IEBACiAKICIiIgogCi1kZWYgdGVzdF9Eb2NUZXN0RmluZGVyKCk6IHIiIiIKK2NsYXNzIHRlc3RfRG9jVGVzdEZpbmRlcjoKKyAgICBkZWYgYmFzaWNzKCk6IHIiIiIKIFVuaXQgdGVzdHMgZm9yIHRoZSBgRG9jVGVzdEZpbmRlcmAgY2xhc3MuCiAKIERvY1Rlc3RGaW5kZXIgaXMgdXNlZCB0byBleHRyYWN0IERvY1Rlc3RzIGZyb20gYW4gb2JqZWN0J3MgZG9jc3RyaW5nCkBAIC02NDYsNiArNjQ3LDM5IEBACiAgICAgWzEsIDksIDEyXQogIiIiCiAKKyAgICBpZiBpbnQuX19kb2NfXzogIyBzaW1wbGUgY2hlY2sgZm9yIC0td2l0aG91dC1kb2Mtc3RyaW5ncywgc2tpcCBpZiBsYWNraW5nCisgICAgICAgIGRlZiBub25fUHl0aG9uX21vZHVsZXMoKTogciIiIgorCitGaW5kaW5nIERvY3Rlc3RzIGluIE1vZHVsZXMgTm90IFdyaXR0ZW4gaW4gUHl0aG9uCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CitEb2NUZXN0RmluZGVyIGNhbiBhbHNvIGZpbmQgZG9jdGVzdHMgaW4gbW9zdCBtb2R1bGVzIG5vdCB3cml0dGVuIGluIFB5dGhvbi4KK1dlJ2xsIHVzZSBidWlsdGlucyBhcyBhbiBleGFtcGxlLCBzaW5jZSBpdCBhbG1vc3QgY2VydGFpbmx5IGlzbid0IHdyaXR0ZW4gaW4KK3BsYWluIG9sJyBQeXRob24gYW5kIGlzIGd1YXJhbnRlZWQgdG8gYmUgYXZhaWxhYmxlLgorCisgICAgPj4+IGltcG9ydCBidWlsdGlucworICAgID4+PiB0ZXN0cyA9IGRvY3Rlc3QuRG9jVGVzdEZpbmRlcigpLmZpbmQoYnVpbHRpbnMpCisgICAgPj4+IDc5MCA8IGxlbih0ZXN0cykgPCA4MDAgIyBhcHByb3hpbWF0ZSBudW1iZXIgb2Ygb2JqZWN0cyB3aXRoIGRvY3N0cmluZ3MKKyAgICBUcnVlCisgICAgPj4+IHJlYWxfdGVzdHMgPSBbdCBmb3IgdCBpbiB0ZXN0cyBpZiBsZW4odC5leGFtcGxlcykgPiAwXQorICAgID4+PiBsZW4ocmVhbF90ZXN0cykgIyBvYmplY3RzIHRoYXQgYWN0dWFsbHkgaGF2ZSBkb2N0ZXN0cworICAgIDgKKyAgICA+Pj4gZm9yIHQgaW4gcmVhbF90ZXN0czoKKyAgICAuLi4gICAgIHByaW50KCd7fSAge30nLmZvcm1hdChsZW4odC5leGFtcGxlcyksIHQubmFtZSkpCisgICAgLi4uCisgICAgMSAgYnVpbHRpbnMuYmluCisgICAgMyAgYnVpbHRpbnMuZmxvYXQuYXNfaW50ZWdlcl9yYXRpbworICAgIDIgIGJ1aWx0aW5zLmZsb2F0LmZyb21oZXgKKyAgICAyICBidWlsdGlucy5mbG9hdC5oZXgKKyAgICAxICBidWlsdGlucy5oZXgKKyAgICAxICBidWlsdGlucy5pbnQKKyAgICAyICBidWlsdGlucy5pbnQuYml0X2xlbmd0aAorICAgIDEgIGJ1aWx0aW5zLm9jdAorCitOb3RlIGhlcmUgdGhhdCAnYmluJywgJ29jdCcsIGFuZCAnaGV4JyBhcmUgZnVuY3Rpb25zOyAnZmxvYXQuYXNfaW50ZWdlcl9yYXRpbycsCisnZmxvYXQuaGV4JywgYW5kICdpbnQuYml0X2xlbmd0aCcgYXJlIG1ldGhvZHM7ICdmbG9hdC5mcm9taGV4JyBpcyBhIGNsYXNzbWV0aG9kLAorYW5kICdpbnQnIGlzIGEgdHlwZS4KKyIiIgorCiBkZWYgdGVzdF9Eb2NUZXN0UGFyc2VyKCk6IHIiIiIKIFVuaXQgdGVzdHMgZm9yIHRoZSBgRG9jVGVzdFBhcnNlcmAgY2xhc3MuCiAKQEAgLTE0MzYsOCArMTQ3MCw0MCBAQAogICAgICAgICAyCiAgICAgVGVzdFJlc3VsdHMoZmFpbGVkPTMsIGF0dGVtcHRlZD01KQogCi1Gb3IgdGhlIHB1cnBvc2VzIG9mIFJFUE9SVF9PTkxZX0ZJUlNUX0ZBSUxVUkUsIHVuZXhwZWN0ZWQgZXhjZXB0aW9ucwotY291bnQgYXMgZmFpbHVyZXM6CitUaGUgRkFJTF9GQVNUIGZsYWcgY2F1c2VzIHRoZSBydW5uZXIgdG8gZXhpdCBhZnRlciB0aGUgZmlyc3QgZmFpbGluZyBleGFtcGxlLAorc28gc3Vic2VxdWVudCBleGFtcGxlcyBhcmUgbm90IGV2ZW4gYXR0ZW1wdGVkOgorCisgICAgPj4+IGZsYWdzID0gZG9jdGVzdC5GQUlMX0ZBU1QKKyAgICA+Pj4gZG9jdGVzdC5Eb2NUZXN0UnVubmVyKHZlcmJvc2U9RmFsc2UsIG9wdGlvbmZsYWdzPWZsYWdzKS5ydW4odGVzdCkKKyAgICAuLi4gIyBkb2N0ZXN0OiArRUxMSVBTSVMKKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgRmlsZSAuLi4sIGxpbmUgNSwgaW4gZgorICAgIEZhaWxlZCBleGFtcGxlOgorICAgICAgICBwcmludCgyKSAjIGZpcnN0IGZhaWx1cmUKKyAgICBFeHBlY3RlZDoKKyAgICAgICAgMjAwCisgICAgR290OgorICAgICAgICAyCisgICAgVGVzdFJlc3VsdHMoZmFpbGVkPTEsIGF0dGVtcHRlZD0yKQorCitTcGVjaWZ5aW5nIGJvdGggRkFJTF9GQVNUIGFuZCBSRVBPUlRfT05MWV9GSVJTVF9GQUlMVVJFIGlzIGVxdWl2YWxlbnQgdG8KK0ZBSUxfRkFTVCBvbmx5OgorCisgICAgPj4+IGZsYWdzID0gZG9jdGVzdC5GQUlMX0ZBU1QgfCBkb2N0ZXN0LlJFUE9SVF9PTkxZX0ZJUlNUX0ZBSUxVUkUKKyAgICA+Pj4gZG9jdGVzdC5Eb2NUZXN0UnVubmVyKHZlcmJvc2U9RmFsc2UsIG9wdGlvbmZsYWdzPWZsYWdzKS5ydW4odGVzdCkKKyAgICAuLi4gIyBkb2N0ZXN0OiArRUxMSVBTSVMKKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgRmlsZSAuLi4sIGxpbmUgNSwgaW4gZgorICAgIEZhaWxlZCBleGFtcGxlOgorICAgICAgICBwcmludCgyKSAjIGZpcnN0IGZhaWx1cmUKKyAgICBFeHBlY3RlZDoKKyAgICAgICAgMjAwCisgICAgR290OgorICAgICAgICAyCisgICAgVGVzdFJlc3VsdHMoZmFpbGVkPTEsIGF0dGVtcHRlZD0yKQorCitGb3IgdGhlIHB1cnBvc2VzIG9mIGJvdGggUkVQT1JUX09OTFlfRklSU1RfRkFJTFVSRSBhbmQgRkFJTF9GQVNULCB1bmV4cGVjdGVkCitleGNlcHRpb25zIGNvdW50IGFzIGZhaWx1cmVzOgogCiAgICAgPj4+IGRlZiBmKHgpOgogICAgIC4uLiAgICAgcicnJwpAQCAtMTQ2NCw2ICsxNTMwLDE3IEBACiAgICAgICAgIC4uLgogICAgICAgICBWYWx1ZUVycm9yOiAyCiAgICAgVGVzdFJlc3VsdHMoZmFpbGVkPTMsIGF0dGVtcHRlZD01KQorICAgID4+PiBmbGFncyA9IGRvY3Rlc3QuRkFJTF9GQVNUCisgICAgPj4+IGRvY3Rlc3QuRG9jVGVzdFJ1bm5lcih2ZXJib3NlPUZhbHNlLCBvcHRpb25mbGFncz1mbGFncykucnVuKHRlc3QpCisgICAgLi4uICMgZG9jdGVzdDogK0VMTElQU0lTCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgIEZpbGUgLi4uLCBsaW5lIDUsIGluIGYKKyAgICBGYWlsZWQgZXhhbXBsZToKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigyKSAjIGZpcnN0IGZhaWx1cmUKKyAgICBFeGNlcHRpb24gcmFpc2VkOgorICAgICAgICAuLi4KKyAgICAgICAgVmFsdWVFcnJvcjogMgorICAgIFRlc3RSZXN1bHRzKGZhaWxlZD0xLCBhdHRlbXB0ZWQ9MikKIAogTmV3IG9wdGlvbiBmbGFncyBjYW4gYWxzbyBiZSByZWdpc3RlcmVkLCB2aWEgcmVnaXN0ZXJfb3B0aW9uZmxhZygpLiAgSGVyZQogd2UgcmVhY2ggaW50byBkb2N0ZXN0J3MgaW50ZXJuYWxzIGEgYml0LgpAQCAtMjA5Myw3ICsyMTcwLDcgQEAKICAgICAgICAgIC4uLgogICAgICAgICAgQXR0cmlidXRlRXJyb3I6ICdtb2R1bGUnIG9iamVjdCBoYXMgbm8gYXR0cmlidXRlICdzaWxseVNldHVwJwogCi0gICAgICAgVGhlIHNldFVwIGFuZCB0ZWFyRG93biBmdW50aW9ucyBhcmUgcGFzc2VkIHRlc3Qgb2JqZWN0cy4gSGVyZQorICAgICAgIFRoZSBzZXRVcCBhbmQgdGVhckRvd24gZnVuY3Rpb25zIGFyZSBwYXNzZWQgdGVzdCBvYmplY3RzLiBIZXJlCiAgICAgICAgd2UnbGwgdXNlIHRoZSBzZXRVcCBmdW5jdGlvbiB0byBzdXBwbHkgdGhlIG1pc3NpbmcgdmFyaWFibGUgeToKIAogICAgICAgICAgPj4+IGRlZiBzZXRVcCh0ZXN0KToKQEAgLTIyMzksNyArMjMxNiw3IEBACiAgICAgICAgICAuLi4KICAgICAgICAgIEF0dHJpYnV0ZUVycm9yOiAnbW9kdWxlJyBvYmplY3QgaGFzIG5vIGF0dHJpYnV0ZSAnc2lsbHlTZXR1cCcKIAotICAgICAgIFRoZSBzZXRVcCBhbmQgdGVhckRvd24gZnVudGlvbnMgYXJlIHBhc3NlZCB0ZXN0IG9iamVjdHMuCisgICAgICAgVGhlIHNldFVwIGFuZCB0ZWFyRG93biBmdW5jdGlvbnMgYXJlIHBhc3NlZCB0ZXN0IG9iamVjdHMuCiAgICAgICAgSGVyZSwgd2UnbGwgdXNlIGEgc2V0VXAgZnVuY3Rpb24gdG8gc2V0IHRoZSBmYXZvcml0ZSBjb2xvciBpbgogICAgICAgIHRlc3RfZG9jdGVzdC50eHQ6CiAKQEAgLTI1MzYsNiArMjYxMywzNiBAQAogICAgID4+PiBzeXMuYXJndiA9IHNhdmVfYXJndgogIiIiCiAKK2RlZiB0ZXN0X2xpbmVlbmRpbmdzKCk6IHIiIiIKKypuaXggc3lzdGVtcyB1c2UgXG4gbGluZSBlbmRpbmdzLCB3aGlsZSBXaW5kb3dzIHN5c3RlbXMgdXNlIFxyXG4uICBQeXRob24KK2hhbmRsZXMgdGhpcyB1c2luZyB1bml2ZXJzYWwgbmV3bGluZSBtb2RlIGZvciByZWFkaW5nIGZpbGVzLiAgTGV0J3MgbWFrZQorc3VyZSBkb2N0ZXN0IGRvZXMgc28gKGlzc3VlIDg0NzMpIGJ5IGNyZWF0aW5nIHRlbXBvcmFyeSB0ZXN0IGZpbGVzIHVzaW5nIGVhY2gKK29mIHRoZSB0d28gbGluZSBkaXNjaXBsaW5lcy4gIE9uZSBvZiB0aGUgdHdvIHdpbGwgYmUgdGhlICJ3cm9uZyIgb25lIGZvciB0aGUKK3BsYXRmb3JtIHRoZSB0ZXN0IGlzIHJ1biBvbi4KKworV2luZG93cyBsaW5lIGVuZGluZ3MgZmlyc3Q6CisKKyAgICA+Pj4gaW1wb3J0IHRlbXBmaWxlLCBvcworICAgID4+PiBmbiA9IHRlbXBmaWxlLm1rdGVtcCgpCisgICAgPj4+IHdpdGggb3BlbihmbiwgJ3diJykgYXMgZjoKKyAgICAuLi4gICAgZi53cml0ZShiJ1Rlc3Q6XHJcblxyXG4gID4+PiB4ID0gMSArIDFcclxuXHJcbkRvbmUuXHJcbicpCisgICAgMzUKKyAgICA+Pj4gZG9jdGVzdC50ZXN0ZmlsZShmbiwgRmFsc2UpCisgICAgVGVzdFJlc3VsdHMoZmFpbGVkPTAsIGF0dGVtcHRlZD0xKQorICAgID4+PiBvcy5yZW1vdmUoZm4pCisKK0FuZCBub3cgKm5peCBsaW5lIGVuZGluZ3M6CisKKyAgICA+Pj4gZm4gPSB0ZW1wZmlsZS5ta3RlbXAoKQorICAgID4+PiB3aXRoIG9wZW4oZm4sICd3YicpIGFzIGY6CisgICAgLi4uICAgICBmLndyaXRlKGInVGVzdDpcblxuICA+Pj4geCA9IDEgKyAxXG5cbkRvbmUuXG4nKQorICAgIDMwCisgICAgPj4+IGRvY3Rlc3QudGVzdGZpbGUoZm4sIEZhbHNlKQorICAgIFRlc3RSZXN1bHRzKGZhaWxlZD0wLCBhdHRlbXB0ZWQ9MSkKKyAgICA+Pj4gb3MucmVtb3ZlKGZuKQorCisiIiIKKwogZGVmIHRlc3RfdGVzdG1vZCgpOiByIiIiCiBUZXN0cyBmb3IgdGhlIHRlc3Rtb2QgZnVuY3Rpb24uICBNb3JlIG1pZ2h0IGJlIHVzZWZ1bCwgYnV0IGZvciBub3cgd2UncmUganVzdAogdGVzdGluZyB0aGUgY2FzZSByYWlzZWQgYnkgSXNzdWUgNjE5NSwgd2hlcmUgdHJ5aW5nIHRvIGRvY3Rlc3QgYSBDIG1vZHVsZSB3b3VsZApAQCAtMjU4MCw2ICsyNjg3LDI0MCBAQAogICAgIFRlc3RSZXN1bHRzKGZhaWxlZD0xLCBhdHRlbXB0ZWQ9MSkKICAgICAiIiIKIAorZGVmIHRlc3RfQ0xJKCk6IHIiIiIKK1RoZSBkb2N0ZXN0IG1vZHVsZSBjYW4gYmUgdXNlZCB0byBydW4gZG9jdGVzdHMgYWdhaW5zdCBhbiBhcmJpdHJhcnkgZmlsZS4KK1RoZXNlIHRlc3RzIHRlc3QgdGhpcyBDTEkgZnVuY3Rpb25hbGl0eS4KKworV2UnbGwgdXNlIHRoZSBzdXBwb3J0IG1vZHVsZSdzIHNjcmlwdF9oZWxwZXJzIGZvciB0aGlzLCBhbmQgd3JpdGUgYSB0ZXN0IGZpbGVzCit0byBhIHRlbXAgZGlyIHRvIHJ1biB0aGUgY29tbWFuZCBhZ2FpbnN0LiAgRHVlIHRvIGEgY3VycmVudCBsaW1pdGF0aW9uIGluCitzY3JpcHRfaGVscGVycywgdGhvdWdoLCB3ZSBuZWVkIGEgbGl0dGxlIHV0aWxpdHkgZnVuY3Rpb24gdG8gdHVybiB0aGUgcmV0dXJuZWQKK291dHB1dCBpbnRvIHNvbWV0aGluZyB3ZSBjYW4gZG9jdGVzdCBhZ2FpbnN0OgorCisgICAgPj4+IGRlZiBub3JtYWxpemUocyk6CisgICAgLi4uICAgICByZXR1cm4gJ1xuJy5qb2luKHMuZGVjb2RlKCkuc3BsaXRsaW5lcygpKQorCitOb3RlOiB3ZSBhbHNvIHBhc3MgVEVSTT0nJyB0byBhbGwgdGhlIGFzc2VydF9weXRob24gY2FsbHMgdG8gYXZvaWQgYSBidWcKK2luIHRoZSByZWFkbGluZSBsaWJyYXJ5IHRoYXQgaXMgdHJpZ2dlcmVkIGluIHRoZXNlIHRlc3RzIGJlY2F1c2Ugd2UgYXJlCitydW5uaW5nIHRoZW0gaW4gYSBuZXcgcHl0aG9uIHByb2Nlc3MuICBTZWU6CisKKyAgaHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1yZWFkbGluZS8yMDEzLTA2L21zZzAwMDAwLmh0bWwKKworV2l0aCB0aG9zZSBwcmVsaW1pbmFyaWVzIG91dCBvZiB0aGUgd2F5LCB3ZSdsbCBzdGFydCB3aXRoIGEgZmlsZSB3aXRoIHR3bworc2ltcGxlIHRlc3RzIGFuZCBubyBlcnJvcnMuICBXZSdsbCBydW4gYm90aCB0aGUgdW5hZG9ybmVkIGRvY3Rlc3QgY29tbWFuZCwgYW5kCit0aGUgdmVyYm9zZSB2ZXJzaW9uLCBhbmQgdGhlbiBjaGVjayB0aGUgb3V0cHV0OgorCisgICAgPj4+IGZyb20gdGVzdCBpbXBvcnQgc2NyaXB0X2hlbHBlcgorICAgID4+PiB3aXRoIHNjcmlwdF9oZWxwZXIudGVtcF9kaXIoKSBhcyB0bXBkaXI6CisgICAgLi4uICAgICBmbiA9IG9zLnBhdGguam9pbih0bXBkaXIsICdteWZpbGUuZG9jJykKKyAgICAuLi4gICAgIHdpdGggb3BlbihmbiwgJ3cnKSBhcyBmOgorICAgIC4uLiAgICAgICAgIF8gPSBmLndyaXRlKCdUaGlzIGlzIGEgdmVyeSBzaW1wbGUgdGVzdCBmaWxlLlxuJykKKyAgICAuLi4gICAgICAgICBfID0gZi53cml0ZSgnICAgPj4+IDEgKyAxXG4nKQorICAgIC4uLiAgICAgICAgIF8gPSBmLndyaXRlKCcgICAyXG4nKQorICAgIC4uLiAgICAgICAgIF8gPSBmLndyaXRlKCcgICA+Pj4gImEiXG4nKQorICAgIC4uLiAgICAgICAgIF8gPSBmLndyaXRlKCIgICAnYSdcbiIpCisgICAgLi4uICAgICAgICAgXyA9IGYud3JpdGUoJ1xuJykKKyAgICAuLi4gICAgICAgICBfID0gZi53cml0ZSgnQW5kIHRoYXQgaXMgaXQuXG4nKQorICAgIC4uLiAgICAgcmMxLCBvdXQxLCBlcnIxID0gc2NyaXB0X2hlbHBlci5hc3NlcnRfcHl0aG9uX29rKAorICAgIC4uLiAgICAgICAgICAgICAnLW0nLCAnZG9jdGVzdCcsIGZuLCBURVJNPScnKQorICAgIC4uLiAgICAgcmMyLCBvdXQyLCBlcnIyID0gc2NyaXB0X2hlbHBlci5hc3NlcnRfcHl0aG9uX29rKAorICAgIC4uLiAgICAgICAgICAgICAnLW0nLCAnZG9jdGVzdCcsICctdicsIGZuLCBURVJNPScnKQorCitXaXRoIG5vIGFyZ3VtZW50cyBhbmQgcGFzc2luZyB0ZXN0cywgd2Ugc2hvdWxkIGdldCBubyBvdXRwdXQ6CisKKyAgICA+Pj4gcmMxLCBvdXQxLCBlcnIxCisgICAgKDAsIGInJywgYicnKQorCitXaXRoIHRoZSB2ZXJib3NlIGZsYWcsIHdlIHNob3VsZCBzZWUgdGhlIHRlc3Qgb3V0cHV0LCBidXQgbm8gZXJyb3Igb3V0cHV0OgorCisgICAgPj4+IHJjMiwgZXJyMgorICAgICgwLCBiJycpCisgICAgPj4+IHByaW50KG5vcm1hbGl6ZShvdXQyKSkKKyAgICBUcnlpbmc6CisgICAgICAgIDEgKyAxCisgICAgRXhwZWN0aW5nOgorICAgICAgICAyCisgICAgb2sKKyAgICBUcnlpbmc6CisgICAgICAgICJhIgorICAgIEV4cGVjdGluZzoKKyAgICAgICAgJ2EnCisgICAgb2sKKyAgICAxIGl0ZW1zIHBhc3NlZCBhbGwgdGVzdHM6CisgICAgICAgMiB0ZXN0cyBpbiBteWZpbGUuZG9jCisgICAgMiB0ZXN0cyBpbiAxIGl0ZW1zLgorICAgIDIgcGFzc2VkIGFuZCAwIGZhaWxlZC4KKyAgICBUZXN0IHBhc3NlZC4KKworTm93IHdlJ2xsIHdyaXRlIGEgY291cGxlIGZpbGVzLCBvbmUgd2l0aCB0aHJlZSB0ZXN0cywgdGhlIG90aGVyIGEgcHl0aG9uIG1vZHVsZQord2l0aCB0d28gdGVzdHMsIGJvdGggb2YgdGhlIGZpbGVzIGhhdmluZyAiZXJyb3JzIiBpbiB0aGUgdGVzdHMgdGhhdCBjYW4gYmUgbWFkZQorbm9uLWVycm9ycyBieSBhcHBseWluZyB0aGUgYXBwcm9wcmlhdGUgZG9jdGVzdCBvcHRpb25zIHRvIHRoZSBydW4gKEVMTElQU0lTIGluCit0aGUgZmlyc3QgZmlsZSwgTk9STUFMSVpFX1dISVRFU1BBQ0UgaW4gdGhlIHNlY29uZCkuICBUaGlzIGNvbWJpbmF0aW9uIHdpbGwKK2FsbG93IHRvIHRob3JvdWdobHkgdGVzdCB0aGUgLWYgYW5kIC1vIGZsYWdzLCBhcyB3ZWxsIGFzIHRoZSBkb2N0ZXN0IGNvbW1hbmQncworYWJpbGl0eSB0byBwcm9jZXNzIG1vcmUgdGhhbiBvbmUgZmlsZSBvbiB0aGUgY29tbWFuZCBsaW5lIGFuZCwgc2luY2UgdGhlIHNlY29uZAorZmlsZSBlbmRzIGluICcucHknLCBpdHMgaGFuZGxpbmcgb2YgcHl0aG9uIG1vZHVsZSBmaWxlcyAoYXMgb3Bwb3NlZCB0byBzdHJhaWdodAordGV4dCBmaWxlcykuCisKKyAgICA+Pj4gZnJvbSB0ZXN0IGltcG9ydCBzY3JpcHRfaGVscGVyCisgICAgPj4+IHdpdGggc2NyaXB0X2hlbHBlci50ZW1wX2RpcigpIGFzIHRtcGRpcjoKKyAgICAuLi4gICAgIGZuID0gb3MucGF0aC5qb2luKHRtcGRpciwgJ215ZmlsZS5kb2MnKQorICAgIC4uLiAgICAgd2l0aCBvcGVuKGZuLCAndycpIGFzIGY6CisgICAgLi4uICAgICAgICAgXyA9IGYud3JpdGUoJ1RoaXMgaXMgYW5vdGhlciBzaW1wbGUgdGVzdCBmaWxlLlxuJykKKyAgICAuLi4gICAgICAgICBfID0gZi53cml0ZSgnICAgPj4+IDEgKyAxXG4nKQorICAgIC4uLiAgICAgICAgIF8gPSBmLndyaXRlKCcgICAyXG4nKQorICAgIC4uLiAgICAgICAgIF8gPSBmLndyaXRlKCcgICA+Pj4gImFiY2RlZiJcbicpCisgICAgLi4uICAgICAgICAgXyA9IGYud3JpdGUoIiAgICdhLi4uZidcbiIpCisgICAgLi4uICAgICAgICAgXyA9IGYud3JpdGUoJyAgID4+PiAiYWprbWwiXG4nKQorICAgIC4uLiAgICAgICAgIF8gPSBmLndyaXRlKCIgICAnYS4uLmwnXG4iKQorICAgIC4uLiAgICAgICAgIF8gPSBmLndyaXRlKCdcbicpCisgICAgLi4uICAgICAgICAgXyA9IGYud3JpdGUoJ0FuZCB0aGF0IGlzIGl0LlxuJykKKyAgICAuLi4gICAgIGZuMiA9IG9zLnBhdGguam9pbih0bXBkaXIsICdteWZpbGUyLnB5JykKKyAgICAuLi4gICAgIHdpdGggb3BlbihmbjIsICd3JykgYXMgZjoKKyAgICAuLi4gICAgICAgICBfID0gZi53cml0ZSgnZGVmIHRlc3RfZnVuYygpOlxuJykKKyAgICAuLi4gICAgICAgICBfID0gZi53cml0ZSgnICAgXCJcIlwiXG4nKQorICAgIC4uLiAgICAgICAgIF8gPSBmLndyaXRlKCcgICBUaGlzIGlzIHNpbXBsZSBweXRob24gdGVzdCBmdW5jdGlvbi5cbicpCisgICAgLi4uICAgICAgICAgXyA9IGYud3JpdGUoJyAgICAgICA+Pj4gMSArIDFcbicpCisgICAgLi4uICAgICAgICAgXyA9IGYud3JpdGUoJyAgICAgICAyXG4nKQorICAgIC4uLiAgICAgICAgIF8gPSBmLndyaXRlKCcgICAgICAgPj4+ICJhYmMgICBkZWYiXG4nKQorICAgIC4uLiAgICAgICAgIF8gPSBmLndyaXRlKCIgICAgICAgJ2FiYyBkZWYnXG4iKQorICAgIC4uLiAgICAgICAgIF8gPSBmLndyaXRlKCJcbiIpCisgICAgLi4uICAgICAgICAgXyA9IGYud3JpdGUoJyAgIFwiXCJcIlxuJykKKyAgICAuLi4gICAgIGltcG9ydCBzaHV0aWwKKyAgICAuLi4gICAgIHJjMSwgb3V0MSwgZXJyMSA9IHNjcmlwdF9oZWxwZXIuYXNzZXJ0X3B5dGhvbl9mYWlsdXJlKAorICAgIC4uLiAgICAgICAgICAgICAnLW0nLCAnZG9jdGVzdCcsIGZuLCBmbjIsIFRFUk09JycpCisgICAgLi4uICAgICByYzIsIG91dDIsIGVycjIgPSBzY3JpcHRfaGVscGVyLmFzc2VydF9weXRob25fb2soCisgICAgLi4uICAgICAgICAgICAgICctbScsICdkb2N0ZXN0JywgJy1vJywgJ0VMTElQU0lTJywgZm4sIFRFUk09JycpCisgICAgLi4uICAgICByYzMsIG91dDMsIGVycjMgPSBzY3JpcHRfaGVscGVyLmFzc2VydF9weXRob25fb2soCisgICAgLi4uICAgICAgICAgICAgICctbScsICdkb2N0ZXN0JywgJy1vJywgJ0VMTElQU0lTJywKKyAgICAuLi4gICAgICAgICAgICAgJy1vJywgJ05PUk1BTElaRV9XSElURVNQQUNFJywgZm4sIGZuMiwgVEVSTT0nJykKKyAgICAuLi4gICAgIHJjNCwgb3V0NCwgZXJyNCA9IHNjcmlwdF9oZWxwZXIuYXNzZXJ0X3B5dGhvbl9mYWlsdXJlKAorICAgIC4uLiAgICAgICAgICAgICAnLW0nLCAnZG9jdGVzdCcsICctZicsIGZuLCBmbjIsIFRFUk09JycpCisgICAgLi4uICAgICByYzUsIG91dDUsIGVycjUgPSBzY3JpcHRfaGVscGVyLmFzc2VydF9weXRob25fb2soCisgICAgLi4uICAgICAgICAgICAgICctbScsICdkb2N0ZXN0JywgJy12JywgJy1vJywgJ0VMTElQU0lTJywKKyAgICAuLi4gICAgICAgICAgICAgJy1vJywgJ05PUk1BTElaRV9XSElURVNQQUNFJywgZm4sIGZuMiwgVEVSTT0nJykKKworT3VyIGZpcnN0IHRlc3QgcnVuIHdpbGwgc2hvdyB0aGUgZXJyb3JzIGZyb20gdGhlIGZpcnN0IGZpbGUgKGRvY3Rlc3Qgc3RvcHMgaWYgYQorZmlsZSBoYXMgZXJyb3JzKS4gIE5vdGUgdGhhdCBkb2N0ZXN0IHRlc3QtcnVuIGVycm9yIG91dHB1dCBhcHBlYXJzIG9uIHN0ZG91dCwKK25vdCBzdGRlcnI6CisKKyAgICA+Pj4gcmMxLCBlcnIxCisgICAgKDEsIGInJykKKyAgICA+Pj4gcHJpbnQobm9ybWFsaXplKG91dDEpKSAgICAgICAgICAgICAgICAjIGRvY3Rlc3Q6ICtFTExJUFNJUworICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICBGaWxlICIuLi5teWZpbGUuZG9jIiwgbGluZSA0LCBpbiBteWZpbGUuZG9jCisgICAgRmFpbGVkIGV4YW1wbGU6CisgICAgICAgICJhYmNkZWYiCisgICAgRXhwZWN0ZWQ6CisgICAgICAgICdhLi4uZicKKyAgICBHb3Q6CisgICAgICAgICdhYmNkZWYnCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgIEZpbGUgIi4uLm15ZmlsZS5kb2MiLCBsaW5lIDYsIGluIG15ZmlsZS5kb2MKKyAgICBGYWlsZWQgZXhhbXBsZToKKyAgICAgICAgImFqa21sIgorICAgIEV4cGVjdGVkOgorICAgICAgICAnYS4uLmwnCisgICAgR290OgorICAgICAgICAnYWprbWwnCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgIDEgaXRlbXMgaGFkIGZhaWx1cmVzOgorICAgICAgIDIgb2YgICAzIGluIG15ZmlsZS5kb2MKKyAgICAqKipUZXN0IEZhaWxlZCoqKiAyIGZhaWx1cmVzLgorCitXaXRoIC1vIEVMTElQU0lTIHNwZWNpZmllZCwgdGhlIHNlY29uZCBydW4sIGFnYWluc3QganVzdCB0aGUgZmlyc3QgZmlsZSwgc2hvdWxkCitwcm9kdWNlIG5vIGVycm9ycywgYW5kIHdpdGggLW8gTk9STUFMSVpFX1dISVRFU1BBQ0UgYWxzbyBzcGVjaWZpZWQsIG5laXRoZXIKK3Nob3VsZCB0aGUgdGhpcmQsIHdoaWNoIHJhbiBhZ2FpbnN0IGJvdGggZmlsZXM6CisKKyAgICA+Pj4gcmMyLCBvdXQyLCBlcnIyCisgICAgKDAsIGInJywgYicnKQorICAgID4+PiByYzMsIG91dDMsIGVycjMKKyAgICAoMCwgYicnLCBiJycpCisKK1RoZSBmb3VydGggcnVuIHVzZXMgRkFJTF9GQVNULCBzbyB3ZSBzaG91bGQgc2VlIG9ubHkgb25lIGVycm9yOgorCisgICAgPj4+IHJjNCwgZXJyNAorICAgICgxLCBiJycpCisgICAgPj4+IHByaW50KG5vcm1hbGl6ZShvdXQ0KSkgICAgICAgICAgICAgICAgIyBkb2N0ZXN0OiArRUxMSVBTSVMKKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgRmlsZSAiLi4ubXlmaWxlLmRvYyIsIGxpbmUgNCwgaW4gbXlmaWxlLmRvYworICAgIEZhaWxlZCBleGFtcGxlOgorICAgICAgICAiYWJjZGVmIgorICAgIEV4cGVjdGVkOgorICAgICAgICAnYS4uLmYnCisgICAgR290OgorICAgICAgICAnYWJjZGVmJworICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAxIGl0ZW1zIGhhZCBmYWlsdXJlczoKKyAgICAgICAxIG9mICAgMiBpbiBteWZpbGUuZG9jCisgICAgKioqVGVzdCBGYWlsZWQqKiogMSBmYWlsdXJlcy4KKworVGhlIGZpZnRoIHRlc3QgdXNlcyB2ZXJib3NlIHdpdGggdGhlIHR3byBvcHRpb25zLCBzbyB3ZSBzaG91bGQgZ2V0IHZlcmJvc2UKK3N1Y2Nlc3Mgb3V0cHV0IGZvciB0aGUgdGVzdHMgaW4gYm90aCBmaWxlczoKKworICAgID4+PiByYzUsIGVycjUKKyAgICAoMCwgYicnKQorICAgID4+PiBwcmludChub3JtYWxpemUob3V0NSkpCisgICAgVHJ5aW5nOgorICAgICAgICAxICsgMQorICAgIEV4cGVjdGluZzoKKyAgICAgICAgMgorICAgIG9rCisgICAgVHJ5aW5nOgorICAgICAgICAiYWJjZGVmIgorICAgIEV4cGVjdGluZzoKKyAgICAgICAgJ2EuLi5mJworICAgIG9rCisgICAgVHJ5aW5nOgorICAgICAgICAiYWprbWwiCisgICAgRXhwZWN0aW5nOgorICAgICAgICAnYS4uLmwnCisgICAgb2sKKyAgICAxIGl0ZW1zIHBhc3NlZCBhbGwgdGVzdHM6CisgICAgICAgMyB0ZXN0cyBpbiBteWZpbGUuZG9jCisgICAgMyB0ZXN0cyBpbiAxIGl0ZW1zLgorICAgIDMgcGFzc2VkIGFuZCAwIGZhaWxlZC4KKyAgICBUZXN0IHBhc3NlZC4KKyAgICBUcnlpbmc6CisgICAgICAgIDEgKyAxCisgICAgRXhwZWN0aW5nOgorICAgICAgICAyCisgICAgb2sKKyAgICBUcnlpbmc6CisgICAgICAgICJhYmMgICBkZWYiCisgICAgRXhwZWN0aW5nOgorICAgICAgICAnYWJjIGRlZicKKyAgICBvaworICAgIDEgaXRlbXMgaGFkIG5vIHRlc3RzOgorICAgICAgICBteWZpbGUyCisgICAgMSBpdGVtcyBwYXNzZWQgYWxsIHRlc3RzOgorICAgICAgIDIgdGVzdHMgaW4gbXlmaWxlMi50ZXN0X2Z1bmMKKyAgICAyIHRlc3RzIGluIDIgaXRlbXMuCisgICAgMiBwYXNzZWQgYW5kIDAgZmFpbGVkLgorICAgIFRlc3QgcGFzc2VkLgorCitXZSBzaG91bGQgYWxzbyBjaGVjayBzb21lIHR5cGljYWwgZXJyb3IgY2FzZXMuCisKK0ludmFsaWQgZmlsZSBuYW1lOgorCisgICAgPj4+IHJjLCBvdXQsIGVyciA9IHNjcmlwdF9oZWxwZXIuYXNzZXJ0X3B5dGhvbl9mYWlsdXJlKAorICAgIC4uLiAgICAgICAgICctbScsICdkb2N0ZXN0JywgJ25vc3VjaGZpbGUnLCBURVJNPScnKQorICAgID4+PiByYywgb3V0CisgICAgKDEsIGInJykKKyAgICA+Pj4gcHJpbnQobm9ybWFsaXplKGVycikpICAgICAgICAgICAgICAgICAgICAjIGRvY3Rlc3Q6ICtFTExJUFNJUworICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgIC4uLgorICAgIEZpbGVOb3RGb3VuZEVycm9yOiBbRXJybm8gLi4uXSBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5OiAnbm9zdWNoZmlsZScKKworSW52YWxpZCBkb2N0ZXN0IG9wdGlvbjoKKworICAgID4+PiByYywgb3V0LCBlcnIgPSBzY3JpcHRfaGVscGVyLmFzc2VydF9weXRob25fZmFpbHVyZSgKKyAgICAuLi4gICAgICAgICAnLW0nLCAnZG9jdGVzdCcsICctbycsICdub3N1Y2hvcHRpb24nLCBURVJNPScnKQorICAgID4+PiByYywgb3V0CisgICAgKDIsIGInJykKKyAgICA+Pj4gcHJpbnQobm9ybWFsaXplKGVycikpICAgICAgICAgICAgICAgICAgICAjIGRvY3Rlc3Q6ICtFTExJUFNJUworICAgIHVzYWdlLi4uaW52YWxpZC4uLm5vc3VjaG9wdGlvbi4uLgorCisiIiIKKwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyMgTWFpbgogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9kb2N4bWxycGMucHkgYi9MaWIvdGVzdC90ZXN0X2RvY3htbHJwYy5weQppbmRleCBjYjYzNjZjLi4wNjE2MWYyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2RvY3htbHJwYy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2RvY3htbHJwYy5weQpAQCAtMTAsNyArMTAsNyBAQAogUE9SVCA9IE5vbmUKIAogZGVmIG1ha2VfcmVxdWVzdF9hbmRfc2tpcElmKGNvbmRpdGlvbiwgcmVhc29uKToKLSAgICAjIElmIHdlIHNraXAgdGhlIHRlc3QsIHdlIGhhdmUgdG8gbWFrZSBhIHJlcXVlc3QgYmVjYXVzZSB0aGUKKyAgICAjIElmIHdlIHNraXAgdGhlIHRlc3QsIHdlIGhhdmUgdG8gbWFrZSBhIHJlcXVlc3QgYmVjYXVzZQogICAgICMgdGhlIHNlcnZlciBjcmVhdGVkIGluIHNldFVwIGJsb2NrcyBleHBlY3Rpbmcgb25lIHRvIGNvbWUgaW4uCiAgICAgaWYgbm90IGNvbmRpdGlvbjoKICAgICAgICAgcmV0dXJuIGxhbWJkYSBmdW5jOiBmdW5jCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2R5bmFtaWNjbGFzc2F0dHJpYnV0ZS5weSBiL0xpYi90ZXN0L3Rlc3RfZHluYW1pY2NsYXNzYXR0cmlidXRlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjNmEzOWIKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2R5bmFtaWNjbGFzc2F0dHJpYnV0ZS5weQpAQCAtMCwwICsxLDMwNCBAQAorIyBUZXN0IGNhc2UgZm9yIER5bmFtaWNDbGFzc0F0dHJpYnV0ZQorIyBtb3JlIHRlc3RzIGFyZSBpbiB0ZXN0X2Rlc2NyCisKK2ltcG9ydCBhYmMKK2ltcG9ydCBzeXMKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAorZnJvbSB0eXBlcyBpbXBvcnQgRHluYW1pY0NsYXNzQXR0cmlidXRlCisKK2NsYXNzIFByb3BlcnR5QmFzZShFeGNlcHRpb24pOgorICAgIHBhc3MKKworY2xhc3MgUHJvcGVydHlHZXQoUHJvcGVydHlCYXNlKToKKyAgICBwYXNzCisKK2NsYXNzIFByb3BlcnR5U2V0KFByb3BlcnR5QmFzZSk6CisgICAgcGFzcworCitjbGFzcyBQcm9wZXJ0eURlbChQcm9wZXJ0eUJhc2UpOgorICAgIHBhc3MKKworY2xhc3MgQmFzZUNsYXNzKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLl9zcGFtID0gNQorCisgICAgQER5bmFtaWNDbGFzc0F0dHJpYnV0ZQorICAgIGRlZiBzcGFtKHNlbGYpOgorICAgICAgICAiIiJCYXNlQ2xhc3MuZ2V0dGVyIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9zcGFtCisKKyAgICBAc3BhbS5zZXR0ZXIKKyAgICBkZWYgc3BhbShzZWxmLCB2YWx1ZSk6CisgICAgICAgIHNlbGYuX3NwYW0gPSB2YWx1ZQorCisgICAgQHNwYW0uZGVsZXRlcgorICAgIGRlZiBzcGFtKHNlbGYpOgorICAgICAgICBkZWwgc2VsZi5fc3BhbQorCitjbGFzcyBTdWJDbGFzcyhCYXNlQ2xhc3MpOgorCisgICAgc3BhbSA9IEJhc2VDbGFzcy5fX2RpY3RfX1snc3BhbSddCisKKyAgICBAc3BhbS5nZXR0ZXIKKyAgICBkZWYgc3BhbShzZWxmKToKKyAgICAgICAgIiIiU3ViQ2xhc3MuZ2V0dGVyIiIiCisgICAgICAgIHJhaXNlIFByb3BlcnR5R2V0KHNlbGYuX3NwYW0pCisKKyAgICBAc3BhbS5zZXR0ZXIKKyAgICBkZWYgc3BhbShzZWxmLCB2YWx1ZSk6CisgICAgICAgIHJhaXNlIFByb3BlcnR5U2V0KHNlbGYuX3NwYW0pCisKKyAgICBAc3BhbS5kZWxldGVyCisgICAgZGVmIHNwYW0oc2VsZik6CisgICAgICAgIHJhaXNlIFByb3BlcnR5RGVsKHNlbGYuX3NwYW0pCisKK2NsYXNzIFByb3BlcnR5RG9jQmFzZShvYmplY3QpOgorICAgIF9zcGFtID0gMQorICAgIGRlZiBfZ2V0X3NwYW0oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9zcGFtCisgICAgc3BhbSA9IER5bmFtaWNDbGFzc0F0dHJpYnV0ZShfZ2V0X3NwYW0sIGRvYz0ic3BhbSBzcGFtIHNwYW0iKQorCitjbGFzcyBQcm9wZXJ0eURvY1N1YihQcm9wZXJ0eURvY0Jhc2UpOgorICAgIHNwYW0gPSBQcm9wZXJ0eURvY0Jhc2UuX19kaWN0X19bJ3NwYW0nXQorICAgIEBzcGFtLmdldHRlcgorICAgIGRlZiBzcGFtKHNlbGYpOgorICAgICAgICAiIiJUaGUgZGVjb3JhdG9yIGRvZXMgbm90IHVzZSB0aGlzIGRvYyBzdHJpbmciIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX3NwYW0KKworY2xhc3MgUHJvcGVydHlTdWJOZXdHZXR0ZXIoQmFzZUNsYXNzKToKKyAgICBzcGFtID0gQmFzZUNsYXNzLl9fZGljdF9fWydzcGFtJ10KKyAgICBAc3BhbS5nZXR0ZXIKKyAgICBkZWYgc3BhbShzZWxmKToKKyAgICAgICAgIiIibmV3IGRvY3N0cmluZyIiIgorICAgICAgICByZXR1cm4gNQorCitjbGFzcyBQcm9wZXJ0eU5ld0dldHRlcihvYmplY3QpOgorICAgIEBEeW5hbWljQ2xhc3NBdHRyaWJ1dGUKKyAgICBkZWYgc3BhbShzZWxmKToKKyAgICAgICAgIiIib3JpZ2luYWwgZG9jc3RyaW5nIiIiCisgICAgICAgIHJldHVybiAxCisgICAgQHNwYW0uZ2V0dGVyCisgICAgZGVmIHNwYW0oc2VsZik6CisgICAgICAgICIiIm5ldyBkb2NzdHJpbmciIiIKKyAgICAgICAgcmV0dXJuIDgKKworY2xhc3MgQ2xhc3NXaXRoQWJzdHJhY3RWaXJ0dWFsUHJvcGVydHkobWV0YWNsYXNzPWFiYy5BQkNNZXRhKToKKyAgICBARHluYW1pY0NsYXNzQXR0cmlidXRlCisgICAgQGFiYy5hYnN0cmFjdG1ldGhvZAorICAgIGRlZiBjb2xvcigpOgorICAgICAgICBwYXNzCisKK2NsYXNzIENsYXNzV2l0aFByb3BlcnR5QWJzdHJhY3RWaXJ0dWFsKG1ldGFjbGFzcz1hYmMuQUJDTWV0YSk6CisgICAgQGFiYy5hYnN0cmFjdG1ldGhvZAorICAgIEBEeW5hbWljQ2xhc3NBdHRyaWJ1dGUKKyAgICBkZWYgY29sb3IoKToKKyAgICAgICAgcGFzcworCitjbGFzcyBQcm9wZXJ0eVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9wcm9wZXJ0eV9kZWNvcmF0b3JfYmFzZWNsYXNzKHNlbGYpOgorICAgICAgICAjIHNlZSAjMTYyMAorICAgICAgICBiYXNlID0gQmFzZUNsYXNzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXNlLnNwYW0sIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmFzZS5fc3BhbSwgNSkKKyAgICAgICAgYmFzZS5zcGFtID0gMTAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXNlLnNwYW0sIDEwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhc2UuX3NwYW0sIDEwKQorICAgICAgICBkZWxhdHRyKGJhc2UsICJzcGFtIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBoYXNhdHRyKGJhc2UsICJzcGFtIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgaGFzYXR0cihiYXNlLCAiX3NwYW0iKSkKKyAgICAgICAgYmFzZS5zcGFtID0gMjAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXNlLnNwYW0sIDIwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhc2UuX3NwYW0sIDIwKQorCisgICAgZGVmIHRlc3RfcHJvcGVydHlfZGVjb3JhdG9yX3N1YmNsYXNzKHNlbGYpOgorICAgICAgICAjIHNlZSAjMTYyMAorICAgICAgICBzdWIgPSBTdWJDbGFzcygpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFByb3BlcnR5R2V0LCBnZXRhdHRyLCBzdWIsICJzcGFtIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUHJvcGVydHlTZXQsIHNldGF0dHIsIHN1YiwgInNwYW0iLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhQcm9wZXJ0eURlbCwgZGVsYXR0ciwgc3ViLCAic3BhbSIpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAorICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKKyAgICBkZWYgdGVzdF9wcm9wZXJ0eV9kZWNvcmF0b3Jfc3ViY2xhc3NfZG9jKHNlbGYpOgorICAgICAgICBzdWIgPSBTdWJDbGFzcygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3ViLl9fY2xhc3NfXy5fX2RpY3RfX1snc3BhbSddLl9fZG9jX18sICJTdWJDbGFzcy5nZXR0ZXIiKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMuZmxhZ3Mub3B0aW1pemUgPj0gMiwKKyAgICAgICAgICAgICAgICAgICAgICJEb2NzdHJpbmdzIGFyZSBvbWl0dGVkIHdpdGggLU8yIGFuZCBhYm92ZSIpCisgICAgZGVmIHRlc3RfcHJvcGVydHlfZGVjb3JhdG9yX2Jhc2VjbGFzc19kb2Moc2VsZik6CisgICAgICAgIGJhc2UgPSBCYXNlQ2xhc3MoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhc2UuX19jbGFzc19fLl9fZGljdF9fWydzcGFtJ10uX19kb2NfXywgIkJhc2VDbGFzcy5nZXR0ZXIiKQorCisgICAgZGVmIHRlc3RfcHJvcGVydHlfZGVjb3JhdG9yX2RvYyhzZWxmKToKKyAgICAgICAgYmFzZSA9IFByb3BlcnR5RG9jQmFzZSgpCisgICAgICAgIHN1YiA9IFByb3BlcnR5RG9jU3ViKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXNlLl9fY2xhc3NfXy5fX2RpY3RfX1snc3BhbSddLl9fZG9jX18sICJzcGFtIHNwYW0gc3BhbSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3ViLl9fY2xhc3NfXy5fX2RpY3RfX1snc3BhbSddLl9fZG9jX18sICJzcGFtIHNwYW0gc3BhbSIpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAorICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKKyAgICBkZWYgdGVzdF9wcm9wZXJ0eV9nZXR0ZXJfZG9jX292ZXJyaWRlKHNlbGYpOgorICAgICAgICBuZXdnZXR0ZXJzdWIgPSBQcm9wZXJ0eVN1Yk5ld0dldHRlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3Z2V0dGVyc3ViLnNwYW0sIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3Z2V0dGVyc3ViLl9fY2xhc3NfXy5fX2RpY3RfX1snc3BhbSddLl9fZG9jX18sICJuZXcgZG9jc3RyaW5nIikKKyAgICAgICAgbmV3Z2V0dGVyID0gUHJvcGVydHlOZXdHZXR0ZXIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld2dldHRlci5zcGFtLCA4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld2dldHRlci5fX2NsYXNzX18uX19kaWN0X19bJ3NwYW0nXS5fX2RvY19fLCAibmV3IGRvY3N0cmluZyIpCisKKyAgICBkZWYgdGVzdF9wcm9wZXJ0eV9fX2lzYWJzdHJhY3RtZXRob2RfX2Rlc2NyaXB0b3Ioc2VsZik6CisgICAgICAgIGZvciB2YWwgaW4gKFRydWUsIEZhbHNlLCBbXSwgWzFdLCAnJywgJzEnKToKKyAgICAgICAgICAgIGNsYXNzIEMob2JqZWN0KToKKyAgICAgICAgICAgICAgICBkZWYgZm9vKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgZm9vLl9faXNhYnN0cmFjdG1ldGhvZF9fID0gdmFsCisgICAgICAgICAgICAgICAgZm9vID0gRHluYW1pY0NsYXNzQXR0cmlidXRlKGZvbykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoQy5fX2RpY3RfX1snZm9vJ10uX19pc2Fic3RyYWN0bWV0aG9kX18sIGJvb2wodmFsKSkKKworICAgICAgICAjIGNoZWNrIHRoYXQgdGhlIER5bmFtaWNDbGFzc0F0dHJpYnV0ZSdzIF9faXNhYnN0cmFjdG1ldGhvZF9fIGRlc2NyaXB0b3IgZG9lcyB0aGUKKyAgICAgICAgIyByaWdodCB0aGluZyB3aGVuIHByZXNlbnRlZCB3aXRoIGEgdmFsdWUgdGhhdCBmYWlscyB0cnV0aCB0ZXN0aW5nOgorICAgICAgICBjbGFzcyBOb3RCb29sKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19ib29sX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigpCisgICAgICAgICAgICBfX2xlbl9fID0gX19ib29sX18KKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGNsYXNzIEMob2JqZWN0KToKKyAgICAgICAgICAgICAgICBkZWYgZm9vKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgZm9vLl9faXNhYnN0cmFjdG1ldGhvZF9fID0gTm90Qm9vbCgpCisgICAgICAgICAgICAgICAgZm9vID0gRHluYW1pY0NsYXNzQXR0cmlidXRlKGZvbykKKworICAgIGRlZiB0ZXN0X2Fic3RyYWN0X3ZpcnR1YWwoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgQ2xhc3NXaXRoQWJzdHJhY3RWaXJ0dWFsUHJvcGVydHkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgQ2xhc3NXaXRoUHJvcGVydHlBYnN0cmFjdFZpcnR1YWwpCisgICAgICAgIGNsYXNzIEFQVihDbGFzc1dpdGhQcm9wZXJ0eUFic3RyYWN0VmlydHVhbCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgQVBWKQorICAgICAgICBjbGFzcyBBVlAoQ2xhc3NXaXRoQWJzdHJhY3RWaXJ0dWFsUHJvcGVydHkpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIEFWUCkKKyAgICAgICAgY2xhc3MgT2theTEoQ2xhc3NXaXRoQWJzdHJhY3RWaXJ0dWFsUHJvcGVydHkpOgorICAgICAgICAgICAgQER5bmFtaWNDbGFzc0F0dHJpYnV0ZQorICAgICAgICAgICAgZGVmIGNvbG9yKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9jb2xvcgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHNlbGYuX2NvbG9yID0gJ2N5YW4nCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IpOgorICAgICAgICAgICAgT2theTEuY29sb3IKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChPa2F5MSgpLmNvbG9yLCAnY3lhbicpCisgICAgICAgIGNsYXNzIE9rYXkyKENsYXNzV2l0aEFic3RyYWN0VmlydHVhbFByb3BlcnR5KToKKyAgICAgICAgICAgIEBEeW5hbWljQ2xhc3NBdHRyaWJ1dGUKKyAgICAgICAgICAgIGRlZiBjb2xvcihzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fY29sb3IKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLl9jb2xvciA9ICdtYWdlbnRhJworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yKToKKyAgICAgICAgICAgIE9rYXkyLmNvbG9yCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoT2theTIoKS5jb2xvciwgJ21hZ2VudGEnKQorCisKKyMgSXNzdWUgNTg5MDogc3ViY2xhc3NlcyBvZiBEeW5hbWljQ2xhc3NBdHRyaWJ1dGUgZG8gbm90IHByZXNlcnZlIG1ldGhvZCBfX2RvY19fIHN0cmluZ3MKK2NsYXNzIFByb3BlcnR5U3ViKER5bmFtaWNDbGFzc0F0dHJpYnV0ZSk6CisgICAgIiIiVGhpcyBpcyBhIHN1YmNsYXNzIG9mIER5bmFtaWNDbGFzc0F0dHJpYnV0ZSIiIgorCitjbGFzcyBQcm9wZXJ0eVN1YlNsb3RzKER5bmFtaWNDbGFzc0F0dHJpYnV0ZSk6CisgICAgIiIiVGhpcyBpcyBhIHN1YmNsYXNzIG9mIER5bmFtaWNDbGFzc0F0dHJpYnV0ZSB0aGF0IGRlZmluZXMgX19zbG90c19fIiIiCisgICAgX19zbG90c19fID0gKCkKKworY2xhc3MgUHJvcGVydHlTdWJjbGFzc1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIEB1bml0dGVzdC5za2lwSWYoaGFzYXR0cihQcm9wZXJ0eVN1YlNsb3RzLCAnX19kb2NfXycpLAorICAgICAgICAgICAgIl9fZG9jX18gaXMgYWxyZWFkeSBwcmVzZW50LCBfX3Nsb3RzX18gd2lsbCBoYXZlIG5vIGVmZmVjdCIpCisgICAgZGVmIHRlc3Rfc2xvdHNfZG9jc3RyaW5nX2NvcHlfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBjbGFzcyBGb28ob2JqZWN0KToKKyAgICAgICAgICAgICAgICBAUHJvcGVydHlTdWJTbG90cworICAgICAgICAgICAgICAgIGRlZiBzcGFtKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICAiIiJUcnlpbmcgdG8gY29weSB0aGlzIGRvY3N0cmluZyB3aWxsIHJhaXNlIGFuIGV4Y2VwdGlvbiIiIgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICAgICAgICAgIHByaW50KCdcbicsc3BhbS5fX2RvY19fKQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIkF0dHJpYnV0ZUVycm9yIG5vdCByYWlzZWQiKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMuZmxhZ3Mub3B0aW1pemUgPj0gMiwKKyAgICAgICAgICAgICAgICAgICAgICJEb2NzdHJpbmdzIGFyZSBvbWl0dGVkIHdpdGggLU8yIGFuZCBhYm92ZSIpCisgICAgZGVmIHRlc3RfZG9jc3RyaW5nX2NvcHkoc2VsZik6CisgICAgICAgIGNsYXNzIEZvbyhvYmplY3QpOgorICAgICAgICAgICAgQFByb3BlcnR5U3ViCisgICAgICAgICAgICBkZWYgc3BhbShzZWxmKToKKyAgICAgICAgICAgICAgICAiIiJzcGFtIHdyYXBwZWQgaW4gRHluYW1pY0NsYXNzQXR0cmlidXRlIHN1YmNsYXNzIiIiCisgICAgICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIEZvby5fX2RpY3RfX1snc3BhbSddLl9fZG9jX18sCisgICAgICAgICAgICAic3BhbSB3cmFwcGVkIGluIER5bmFtaWNDbGFzc0F0dHJpYnV0ZSBzdWJjbGFzcyIpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAorICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKKyAgICBkZWYgdGVzdF9wcm9wZXJ0eV9zZXR0ZXJfY29waWVzX2dldHRlcl9kb2NzdHJpbmcoc2VsZik6CisgICAgICAgIGNsYXNzIEZvbyhvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOiBzZWxmLl9zcGFtID0gMQorICAgICAgICAgICAgQFByb3BlcnR5U3ViCisgICAgICAgICAgICBkZWYgc3BhbShzZWxmKToKKyAgICAgICAgICAgICAgICAiIiJzcGFtIHdyYXBwZWQgaW4gRHluYW1pY0NsYXNzQXR0cmlidXRlIHN1YmNsYXNzIiIiCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3NwYW0KKyAgICAgICAgICAgIEBzcGFtLnNldHRlcgorICAgICAgICAgICAgZGVmIHNwYW0oc2VsZiwgdmFsdWUpOgorICAgICAgICAgICAgICAgICIiInRoaXMgZG9jc3RyaW5nIGlzIGlnbm9yZWQiIiIKKyAgICAgICAgICAgICAgICBzZWxmLl9zcGFtID0gdmFsdWUKKyAgICAgICAgZm9vID0gRm9vKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb28uc3BhbSwgMSkKKyAgICAgICAgZm9vLnNwYW0gPSAyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9vLnNwYW0sIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBGb28uX19kaWN0X19bJ3NwYW0nXS5fX2RvY19fLAorICAgICAgICAgICAgInNwYW0gd3JhcHBlZCBpbiBEeW5hbWljQ2xhc3NBdHRyaWJ1dGUgc3ViY2xhc3MiKQorICAgICAgICBjbGFzcyBGb29TdWIoRm9vKToKKyAgICAgICAgICAgIHNwYW0gPSBGb28uX19kaWN0X19bJ3NwYW0nXQorICAgICAgICAgICAgQHNwYW0uc2V0dGVyCisgICAgICAgICAgICBkZWYgc3BhbShzZWxmLCB2YWx1ZSk6CisgICAgICAgICAgICAgICAgIiIiYW5vdGhlciBpZ25vcmVkIGRvY3N0cmluZyIiIgorICAgICAgICAgICAgICAgIHNlbGYuX3NwYW0gPSAnZWdncycKKyAgICAgICAgZm9vc3ViID0gRm9vU3ViKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb29zdWIuc3BhbSwgMSkKKyAgICAgICAgZm9vc3ViLnNwYW0gPSA3CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9vc3ViLnNwYW0sICdlZ2dzJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIEZvb1N1Yi5fX2RpY3RfX1snc3BhbSddLl9fZG9jX18sCisgICAgICAgICAgICAic3BhbSB3cmFwcGVkIGluIER5bmFtaWNDbGFzc0F0dHJpYnV0ZSBzdWJjbGFzcyIpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAorICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKKyAgICBkZWYgdGVzdF9wcm9wZXJ0eV9uZXdfZ2V0dGVyX25ld19kb2NzdHJpbmcoc2VsZik6CisKKyAgICAgICAgY2xhc3MgRm9vKG9iamVjdCk6CisgICAgICAgICAgICBAUHJvcGVydHlTdWIKKyAgICAgICAgICAgIGRlZiBzcGFtKHNlbGYpOgorICAgICAgICAgICAgICAgICIiImEgZG9jc3RyaW5nIiIiCisgICAgICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgICAgIEBzcGFtLmdldHRlcgorICAgICAgICAgICAgZGVmIHNwYW0oc2VsZik6CisgICAgICAgICAgICAgICAgIiIiYSBuZXcgZG9jc3RyaW5nIiIiCisgICAgICAgICAgICAgICAgcmV0dXJuIDIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGb28uX19kaWN0X19bJ3NwYW0nXS5fX2RvY19fLCAiYSBuZXcgZG9jc3RyaW5nIikKKyAgICAgICAgY2xhc3MgRm9vQmFzZShvYmplY3QpOgorICAgICAgICAgICAgQFByb3BlcnR5U3ViCisgICAgICAgICAgICBkZWYgc3BhbShzZWxmKToKKyAgICAgICAgICAgICAgICAiIiJhIGRvY3N0cmluZyIiIgorICAgICAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgIGNsYXNzIEZvbzIoRm9vQmFzZSk6CisgICAgICAgICAgICBzcGFtID0gRm9vQmFzZS5fX2RpY3RfX1snc3BhbSddCisgICAgICAgICAgICBAc3BhbS5nZXR0ZXIKKyAgICAgICAgICAgIGRlZiBzcGFtKHNlbGYpOgorICAgICAgICAgICAgICAgICIiImEgbmV3IGRvY3N0cmluZyIiIgorICAgICAgICAgICAgICAgIHJldHVybiAyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRm9vLl9fZGljdF9fWydzcGFtJ10uX19kb2NfXywgImEgbmV3IGRvY3N0cmluZyIpCisKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgcnVuX3VuaXR0ZXN0KFByb3BlcnR5VGVzdHMsIFByb3BlcnR5U3ViY2xhc3NUZXN0cykKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9lbWFpbC9fX2luaXRfXy5weSBiL0xpYi90ZXN0L3Rlc3RfZW1haWwvX19pbml0X18ucHkKaW5kZXggZjIwNmFjZS4uZDJmN2QzMSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9lbWFpbC9fX2luaXRfXy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2VtYWlsL19faW5pdF9fLnB5CkBAIC0xLDMwICsxLDE2IEBACiBpbXBvcnQgb3MKIGltcG9ydCBzeXMKIGltcG9ydCB1bml0dGVzdAotaW1wb3J0IHRlc3Quc3VwcG9ydAoraW1wb3J0IGNvbGxlY3Rpb25zCiBpbXBvcnQgZW1haWwKIGZyb20gZW1haWwubWVzc2FnZSBpbXBvcnQgTWVzc2FnZQogZnJvbSBlbWFpbC5fcG9saWN5YmFzZSBpbXBvcnQgY29tcGF0MzIKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBsb2FkX3BhY2thZ2VfdGVzdHMKIGZyb20gdGVzdC50ZXN0X2VtYWlsIGltcG9ydCBfX2ZpbGVfXyBhcyBsYW5kbWFyawogCi0jIFJ1biBhbGwgdGVzdHMgaW4gcGFja2FnZSBmb3IgJy1tIHVuaXR0ZXN0IHRlc3QudGVzdF9lbWFpbCcKLWRlZiBsb2FkX3Rlc3RzKGxvYWRlciwgc3RhbmRhcmRfdGVzdHMsIHBhdHRlcm4pOgotICAgIHRoaXNfZGlyID0gb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKQotICAgIGlmIHBhdHRlcm4gaXMgTm9uZToKLSAgICAgICAgcGF0dGVybiA9ICJ0ZXN0KiIKLSAgICBwYWNrYWdlX3Rlc3RzID0gbG9hZGVyLmRpc2NvdmVyKHN0YXJ0X2Rpcj10aGlzX2RpciwgcGF0dGVybj1wYXR0ZXJuKQotICAgIHN0YW5kYXJkX3Rlc3RzLmFkZFRlc3RzKHBhY2thZ2VfdGVzdHMpCi0gICAgcmV0dXJuIHN0YW5kYXJkX3Rlc3RzCi0KLQotIyB1c2VkIGJ5IHJlZ3J0ZXN0IGFuZCBfX21haW5fXy4KLWRlZiB0ZXN0X21haW4oKToKLSAgICBoZXJlID0gb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKQotICAgICMgVW5pdHRlc3QgbXVja3Mgd2l0aCB0aGUgcGF0aCwgc28gd2UgaGF2ZSB0byBzYXZlIGFuZCByZXN0b3JlCi0gICAgIyBpdCB0byBrZWVwIHJlZ3J0ZXN0IGhhcHB5LgotICAgIHNhdmVwYXRoID0gc3lzLnBhdGhbOl0KLSAgICB0ZXN0LnN1cHBvcnQuX3J1bl9zdWl0ZSh1bml0dGVzdC5kZWZhdWx0VGVzdExvYWRlci5kaXNjb3ZlcihoZXJlKSkKLSAgICBzeXMucGF0aFs6XSA9IHNhdmVwYXRoCisjIExvYWQgYWxsIHRlc3RzIGluIHBhY2thZ2UKK2RlZiBsb2FkX3Rlc3RzKCphcmdzKToKKyAgICByZXR1cm4gbG9hZF9wYWNrYWdlX3Rlc3RzKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICphcmdzKQogCiAKICMgaGVscGVyIGNvZGUgdXNlZCBieSBhIG51bWJlciBvZiB0ZXN0IG1vZHVsZXMuCkBAIC00Miw2ICsyOCw4IEBACiAgICAgIyBoZXJlIHdlIG1ha2UgbWluaW1hbCBjaGFuZ2VzIGluIHRoZSB0ZXN0X2VtYWlsIHRlc3RzIGNvbXBhcmVkIHRvIHRoZWlyCiAgICAgIyBwcmUtMy4zIHN0YXRlLgogICAgIHBvbGljeSA9IGNvbXBhdDMyCisgICAgIyBMaWtld2lzZSwgdGhlIGRlZmF1bHQgbWVzc2FnZSBvYmplY3QgaXMgTWVzc2FnZS4KKyAgICBtZXNzYWdlID0gTWVzc2FnZQogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3KToKICAgICAgICAgc3VwZXIoKS5fX2luaXRfXygqYXJncywgKiprdykKQEAgLTU0LDExICs0MiwyMyBAQAogICAgICAgICB3aXRoIG9wZW5maWxlKGZpbGVuYW1lKSBhcyBmcDoKICAgICAgICAgICAgIHJldHVybiBlbWFpbC5tZXNzYWdlX2Zyb21fZmlsZShmcCwgcG9saWN5PXNlbGYucG9saWN5KQogCi0gICAgZGVmIF9zdHJfbXNnKHNlbGYsIHN0cmluZywgbWVzc2FnZT1NZXNzYWdlLCBwb2xpY3k9Tm9uZSk6CisgICAgZGVmIF9zdHJfbXNnKHNlbGYsIHN0cmluZywgbWVzc2FnZT1Ob25lLCBwb2xpY3k9Tm9uZSk6CiAgICAgICAgIGlmIHBvbGljeSBpcyBOb25lOgogICAgICAgICAgICAgcG9saWN5ID0gc2VsZi5wb2xpY3kKKyAgICAgICAgaWYgbWVzc2FnZSBpcyBOb25lOgorICAgICAgICAgICAgbWVzc2FnZSA9IHNlbGYubWVzc2FnZQogICAgICAgICByZXR1cm4gZW1haWwubWVzc2FnZV9mcm9tX3N0cmluZyhzdHJpbmcsIG1lc3NhZ2UsIHBvbGljeT1wb2xpY3kpCiAKKyAgICBkZWYgX2J5dGVzX21zZyhzZWxmLCBieXRlc3RyaW5nLCBtZXNzYWdlPU5vbmUsIHBvbGljeT1Ob25lKToKKyAgICAgICAgaWYgcG9saWN5IGlzIE5vbmU6CisgICAgICAgICAgICBwb2xpY3kgPSBzZWxmLnBvbGljeQorICAgICAgICBpZiBtZXNzYWdlIGlzIE5vbmU6CisgICAgICAgICAgICBtZXNzYWdlID0gc2VsZi5tZXNzYWdlCisgICAgICAgIHJldHVybiBlbWFpbC5tZXNzYWdlX2Zyb21fYnl0ZXMoYnl0ZXN0cmluZywgbWVzc2FnZSwgcG9saWN5PXBvbGljeSkKKworICAgIGRlZiBfbWFrZV9tZXNzYWdlKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5tZXNzYWdlKHBvbGljeT1zZWxmLnBvbGljeSkKKwogICAgIGRlZiBfYnl0ZXNfcmVwcihzZWxmLCBiKToKICAgICAgICAgcmV0dXJuIFtyZXByKHgpIGZvciB4IGluIGIuc3BsaXRsaW5lcyhrZWVwZW5kcz1UcnVlKV0KIApAQCAtODcsNyArODcsNyBAQAogICAgIGVsZW1lbnQgdHVwbGVzLiAgSG93ZXZlciBkZXJpdmVkLCB0aGUgcmVzdWx0aW5nIHNlcXVlbmNlIGlzIHBhc3NlZCB2aWEKICAgICAqYXJncyB0byB0aGUgcGFyYW1ldGVyaXplZCB0ZXN0IGZ1bmN0aW9uLgogCi0gICAgSW4gYSBfcGFyYW1zIGRpY3Rpb2FucnksIHRoZSBrZXlzIGJlY29tZSBwYXJ0IG9mIHRoZSBuYW1lIG9mIHRoZSBnZW5lcmF0ZWQKKyAgICBJbiBhIF9wYXJhbXMgZGljdGlvbmFyeSwgdGhlIGtleXMgYmVjb21lIHBhcnQgb2YgdGhlIG5hbWUgb2YgdGhlIGdlbmVyYXRlZAogICAgIHRlc3RzLiAgSW4gYSBfcGFyYW1zIGxpc3QsIHRoZSB2YWx1ZXMgaW4gdGhlIGxpc3QgYXJlIGNvbnZlcnRlZCBpbnRvIGEKICAgICBzdHJpbmcgYnkgam9pbmluZyB0aGUgc3RyaW5nIHZhbHVlcyBvZiB0aGUgZWxlbWVudHMgb2YgdGhlIHR1cGxlIGJ5ICdfJyBhbmQKICAgICBjb252ZXJ0aW5nIGFueSBibGFua3MgaW50byAnXydzLCBhbmQgdGhpcyBiZWNvbWUgcGFydCBvZiB0aGUgbmFtZS4KQEAgLTEyMyw2ICsxMjMsNyBAQAogCiAgICAgIiIiCiAgICAgcGFyYW1kaWN0cyA9IHt9CisgICAgdGVzdGVycyA9IGNvbGxlY3Rpb25zLmRlZmF1bHRkaWN0KGxpc3QpCiAgICAgZm9yIG5hbWUsIGF0dHIgaW4gY2xzLl9fZGljdF9fLml0ZW1zKCk6CiAgICAgICAgIGlmIG5hbWUuZW5kc3dpdGgoJ19wYXJhbXMnKToKICAgICAgICAgICAgIGlmIG5vdCBoYXNhdHRyKGF0dHIsICdrZXlzJyk6CkBAIC0xMzQsNyArMTM1LDE1IEBACiAgICAgICAgICAgICAgICAgICAgIGRbbl0gPSB4CiAgICAgICAgICAgICAgICAgYXR0ciA9IGQKICAgICAgICAgICAgIHBhcmFtZGljdHNbbmFtZVs6LTddICsgJ19hc18nXSA9IGF0dHIKKyAgICAgICAgaWYgJ19hc18nIGluIG5hbWU6CisgICAgICAgICAgICB0ZXN0ZXJzW25hbWUuc3BsaXQoJ19hc18nKVswXSArICdfYXNfJ10uYXBwZW5kKG5hbWUpCiAgICAgdGVzdGZ1bmNzID0ge30KKyAgICBmb3IgbmFtZSBpbiBwYXJhbWRpY3RzOgorICAgICAgICBpZiBuYW1lIG5vdCBpbiB0ZXN0ZXJzOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiTm8gdGVzdGVyIGZvdW5kIGZvciB7fSIuZm9ybWF0KG5hbWUpKQorICAgIGZvciBuYW1lIGluIHRlc3RlcnM6CisgICAgICAgIGlmIG5hbWUgbm90IGluIHBhcmFtZGljdHM6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJObyBwYXJhbXMgZm91bmQgZm9yIHt9Ii5mb3JtYXQobmFtZSkpCiAgICAgZm9yIG5hbWUsIGF0dHIgaW4gY2xzLl9fZGljdF9fLml0ZW1zKCk6CiAgICAgICAgIGZvciBwYXJhbXNuYW1lLCBwYXJhbXNkaWN0IGluIHBhcmFtZGljdHMuaXRlbXMoKToKICAgICAgICAgICAgIGlmIG5hbWUuc3RhcnRzd2l0aChwYXJhbXNuYW1lKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZW1haWwvX19tYWluX18ucHkgYi9MaWIvdGVzdC90ZXN0X2VtYWlsL19fbWFpbl9fLnB5CmluZGV4IDk4YWY5ZWMuLjRiMTRmNzcgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZW1haWwvX19tYWluX18ucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9lbWFpbC9fX21haW5fXy5weQpAQCAtMSwzICsxLDQgQEAKLWZyb20gdGVzdC50ZXN0X2VtYWlsIGltcG9ydCB0ZXN0X21haW4KK2Zyb20gdGVzdC50ZXN0X2VtYWlsIGltcG9ydCBsb2FkX3Rlc3RzCitpbXBvcnQgdW5pdHRlc3QKIAotdGVzdF9tYWluKCkKK3VuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9lbWFpbC90ZXN0X19oZWFkZXJfdmFsdWVfcGFyc2VyLnB5IGIvTGliL3Rlc3QvdGVzdF9lbWFpbC90ZXN0X19oZWFkZXJfdmFsdWVfcGFyc2VyLnB5CmluZGV4IDMyOTk2Y2EuLmQwMjhmNzQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZW1haWwvdGVzdF9faGVhZGVyX3ZhbHVlX3BhcnNlci5weQorKysgYi9MaWIvdGVzdC90ZXN0X2VtYWlsL3Rlc3RfX2hlYWRlcl92YWx1ZV9wYXJzZXIucHkKQEAgLTI0NDMsNiArMjQ0MywxMjcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoYWRkcmVzc19saXN0LmFkZHJlc3Nlc1sxXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyKGFkZHJlc3NfbGlzdC5tYWlsYm94ZXNbMl0pKQogCisgICAgZGVmIHRlc3RfaW52YWxpZF9jb250ZW50X2Rpc3Bvc2l0aW9uKHNlbGYpOgorICAgICAgICBjb250ZW50X2Rpc3AgPSBzZWxmLl90ZXN0X3BhcnNlX3goCisgICAgICAgICAgICBwYXJzZXIucGFyc2VfY29udGVudF9kaXNwb3NpdGlvbl9oZWFkZXIsCisgICAgICAgICAgICAiO2F0dGFjaG1lbnQiLCAiOyBhdHRhY2htZW50IiwgIjthdHRhY2htZW50IiwKKyAgICAgICAgICAgIFtlcnJvcnMuSW52YWxpZEhlYWRlckRlZmVjdF0qMgorICAgICAgICApCisKKyAgICBkZWYgdGVzdF9pbnZhbGlkX2NvbnRlbnRfdHJhbnNmZXJfZW5jb2Rpbmcoc2VsZik6CisgICAgICAgIGN0ZSA9IHNlbGYuX3Rlc3RfcGFyc2VfeCgKKyAgICAgICAgICAgIHBhcnNlci5wYXJzZV9jb250ZW50X3RyYW5zZmVyX2VuY29kaW5nX2hlYWRlciwKKyAgICAgICAgICAgICI7Zm9vIiwgIjtmb28iLCAiO2ZvbyIsIFtlcnJvcnMuSW52YWxpZEhlYWRlckRlZmVjdF0qMworICAgICAgICApCisKKworQHBhcmFtZXRlcml6ZQorY2xhc3MgVGVzdF9wYXJzZV9taW1lX3BhcmFtZXRlcnMoVGVzdFBhcnNlck1peGluLCBUZXN0RW1haWxCYXNlKToKKworICAgIGRlZiBtaW1lX3BhcmFtZXRlcnNfYXNfdmFsdWUoc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGxfc3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGxfdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZlY3RzKToKKyAgICAgICAgbWltZV9wYXJhbWV0ZXJzID0gc2VsZi5fdGVzdF9wYXJzZV94KHBhcnNlci5wYXJzZV9taW1lX3BhcmFtZXRlcnMsCisgICAgICAgICAgICB2YWx1ZSwgdGxfc3RyLCB0bF92YWx1ZSwgZGVmZWN0cykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtaW1lX3BhcmFtZXRlcnMudG9rZW5fdHlwZSwgJ21pbWUtcGFyYW1ldGVycycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChtaW1lX3BhcmFtZXRlcnMucGFyYW1zKSwgcGFyYW1zKQorCisKKyAgICBtaW1lX3BhcmFtZXRlcnNfcGFyYW1zID0geworCisgICAgICAgICdzaW1wbGUnOiAoCisgICAgICAgICAgICAnZmlsZW5hbWU9ImFiYy5weSInLAorICAgICAgICAgICAgJyBmaWxlbmFtZT0iYWJjLnB5IicsCisgICAgICAgICAgICAnZmlsZW5hbWU9YWJjLnB5JywKKyAgICAgICAgICAgIFsoJ2ZpbGVuYW1lJywgJ2FiYy5weScpXSwKKyAgICAgICAgICAgIFtdKSwKKworICAgICAgICAnbXVsdGlwbGVfa2V5cyc6ICgKKyAgICAgICAgICAgICdmaWxlbmFtZT0iYWJjLnB5IjsgeHl6PWFiYycsCisgICAgICAgICAgICAnIGZpbGVuYW1lPSJhYmMucHkiOyB4eXo9ImFiYyInLAorICAgICAgICAgICAgJ2ZpbGVuYW1lPWFiYy5weTsgeHl6PWFiYycsCisgICAgICAgICAgICBbKCdmaWxlbmFtZScsICdhYmMucHknKSwgKCd4eXonLCAnYWJjJyldLAorICAgICAgICAgICAgW10pLAorCisgICAgICAgICdzcGxpdF92YWx1ZSc6ICgKKyAgICAgICAgICAgICJmaWxlbmFtZSowKj1pc28tODg1OS0xJyclMzIlMzAlMzElMkU7IGZpbGVuYW1lKjEqPSU3NCU2OSU2NiIsCisgICAgICAgICAgICAnIGZpbGVuYW1lPSIyMDEudGlmIicsCisgICAgICAgICAgICAiZmlsZW5hbWUqMCo9aXNvLTg4NTktMScnJTMyJTMwJTMxJTJFOyBmaWxlbmFtZSoxKj0lNzQlNjklNjYiLAorICAgICAgICAgICAgWygnZmlsZW5hbWUnLCAnMjAxLnRpZicpXSwKKyAgICAgICAgICAgIFtdKSwKKworICAgICAgICAjIE5vdGUgdGhhdCBpdCBpcyB1bmRlZmluZWQgd2hhdCB3ZSBzaG91bGQgZG8gZm9yIGVycm9yIHJlY292ZXJ5IHdoZW4KKyAgICAgICAgIyB0aGVyZSBhcmUgZHVwbGljYXRlIHBhcmFtZXRlciBuYW1lcyBvciBkdXBsaWNhdGUgcGFydHMgaW4gYSBzcGxpdAorICAgICAgICAjIHBhcnQuICBXZSBjaG9vc2UgdG8gaWdub3JlIGFsbCBkdXBsaWNhdGUgcGFyYW1ldGVycyBhZnRlciB0aGUgZmlyc3QKKyAgICAgICAgIyBhbmQgdG8gdGFrZSBkdXBsaWNhdGUgb3IgbWlzc2luZyByZmMgMjIzMSBwYXJ0cyBpbiBhcHBlcmFuY2Ugb3JkZXIuCisgICAgICAgICMgVGhpcyBpcyBiYWNrd2FyZCBjb21wYXRpYmxlIHdpdGggZ2V0X3BhcmFtJ3MgYmVoYXZpb3IsIGJ1dCB0aGUKKyAgICAgICAgIyBkZWNpc2lvbnMgYXJlIGFyYml0cmFyeS4KKworICAgICAgICAnZHVwbGljYXRlX2tleSc6ICgKKyAgICAgICAgICAgICdmaWxlbmFtZT1hYmMuZ2lmOyBmaWxlbmFtZT1kZWYudGlmZicsCisgICAgICAgICAgICAnIGZpbGVuYW1lPSJhYmMuZ2lmIicsCisgICAgICAgICAgICAiZmlsZW5hbWU9YWJjLmdpZjsgZmlsZW5hbWU9ZGVmLnRpZmYiLAorICAgICAgICAgICAgWygnZmlsZW5hbWUnLCAnYWJjLmdpZicpXSwKKyAgICAgICAgICAgIFtlcnJvcnMuSW52YWxpZEhlYWRlckRlZmVjdF0pLAorCisgICAgICAgICdkdXBsaWNhdGVfa2V5X3dpdGhfc3BsaXRfdmFsdWUnOiAoCisgICAgICAgICAgICAiZmlsZW5hbWUqMCo9aXNvLTg4NTktMScnJTMyJTMwJTMxJTJFOyBmaWxlbmFtZSoxKj0lNzQlNjklNjY7IgorICAgICAgICAgICAgICAgICIgZmlsZW5hbWU9YWJjLmdpZiIsCisgICAgICAgICAgICAnIGZpbGVuYW1lPSIyMDEudGlmIicsCisgICAgICAgICAgICAiZmlsZW5hbWUqMCo9aXNvLTg4NTktMScnJTMyJTMwJTMxJTJFOyBmaWxlbmFtZSoxKj0lNzQlNjklNjY7IgorICAgICAgICAgICAgICAgICIgZmlsZW5hbWU9YWJjLmdpZiIsCisgICAgICAgICAgICBbKCdmaWxlbmFtZScsICcyMDEudGlmJyldLAorICAgICAgICAgICAgW2Vycm9ycy5JbnZhbGlkSGVhZGVyRGVmZWN0XSksCisKKyAgICAgICAgJ2R1cGxpY2F0ZV9rZXlfd2l0aF9zcGxpdF92YWx1ZV9vdGhlcl9vcmRlcic6ICgKKyAgICAgICAgICAgICJmaWxlbmFtZT1hYmMuZ2lmOyAiCisgICAgICAgICAgICAgICAgIiBmaWxlbmFtZSowKj1pc28tODg1OS0xJyclMzIlMzAlMzElMkU7IGZpbGVuYW1lKjEqPSU3NCU2OSU2NiIsCisgICAgICAgICAgICAnIGZpbGVuYW1lPSJhYmMuZ2lmIicsCisgICAgICAgICAgICAiZmlsZW5hbWU9YWJjLmdpZjsiCisgICAgICAgICAgICAgICAgIiBmaWxlbmFtZSowKj1pc28tODg1OS0xJyclMzIlMzAlMzElMkU7IGZpbGVuYW1lKjEqPSU3NCU2OSU2NiIsCisgICAgICAgICAgICBbKCdmaWxlbmFtZScsICdhYmMuZ2lmJyldLAorICAgICAgICAgICAgW2Vycm9ycy5JbnZhbGlkSGVhZGVyRGVmZWN0XSksCisKKyAgICAgICAgJ2R1cGxpY2F0ZV9pbl9zcGxpdF92YWx1ZSc6ICgKKyAgICAgICAgICAgICJmaWxlbmFtZSowKj1pc28tODg1OS0xJyclMzIlMzAlMzElMkU7IGZpbGVuYW1lKjEqPSU3NCU2OSU2NjsiCisgICAgICAgICAgICAgICAgIiBmaWxlbmFtZSoxKj1hYmMuZ2lmIiwKKyAgICAgICAgICAgICcgZmlsZW5hbWU9IjIwMS50aWZhYmMuZ2lmIicsCisgICAgICAgICAgICAiZmlsZW5hbWUqMCo9aXNvLTg4NTktMScnJTMyJTMwJTMxJTJFOyBmaWxlbmFtZSoxKj0lNzQlNjklNjY7IgorICAgICAgICAgICAgICAgICIgZmlsZW5hbWUqMSo9YWJjLmdpZiIsCisgICAgICAgICAgICBbKCdmaWxlbmFtZScsICcyMDEudGlmYWJjLmdpZicpXSwKKyAgICAgICAgICAgIFtlcnJvcnMuSW52YWxpZEhlYWRlckRlZmVjdF0pLAorCisgICAgICAgICdtaXNzaW5nX3NwbGl0X3ZhbHVlJzogKAorICAgICAgICAgICAgImZpbGVuYW1lKjAqPWlzby04ODU5LTEnJyUzMiUzMCUzMSUyRTsgZmlsZW5hbWUqMyo9JTc0JTY5JTY2OyIsCisgICAgICAgICAgICAnIGZpbGVuYW1lPSIyMDEudGlmIicsCisgICAgICAgICAgICAiZmlsZW5hbWUqMCo9aXNvLTg4NTktMScnJTMyJTMwJTMxJTJFOyBmaWxlbmFtZSozKj0lNzQlNjklNjY7IiwKKyAgICAgICAgICAgIFsoJ2ZpbGVuYW1lJywgJzIwMS50aWYnKV0sCisgICAgICAgICAgICBbZXJyb3JzLkludmFsaWRIZWFkZXJEZWZlY3RdKSwKKworICAgICAgICAnZHVwbGljYXRlX2FuZF9taXNzaW5nX3NwbGl0X3ZhbHVlJzogKAorICAgICAgICAgICAgImZpbGVuYW1lKjAqPWlzby04ODU5LTEnJyUzMiUzMCUzMSUyRTsgZmlsZW5hbWUqMyo9JTc0JTY5JTY2OyIKKyAgICAgICAgICAgICAgICAiIGZpbGVuYW1lKjMqPWFiYy5naWYiLAorICAgICAgICAgICAgJyBmaWxlbmFtZT0iMjAxLnRpZmFiYy5naWYiJywKKyAgICAgICAgICAgICJmaWxlbmFtZSowKj1pc28tODg1OS0xJyclMzIlMzAlMzElMkU7IGZpbGVuYW1lKjMqPSU3NCU2OSU2NjsiCisgICAgICAgICAgICAgICAgIiBmaWxlbmFtZSozKj1hYmMuZ2lmIiwKKyAgICAgICAgICAgIFsoJ2ZpbGVuYW1lJywgJzIwMS50aWZhYmMuZ2lmJyldLAorICAgICAgICAgICAgW2Vycm9ycy5JbnZhbGlkSGVhZGVyRGVmZWN0XSoyKSwKKworICAgICAgICAjIEhlcmUgd2UgZGVwYXJ0IGZyb20gZ2V0X3BhcmFtIGFuZCBhc3N1bWUgdGhlICowKiB3YXMgbWlzc2luZy4KKyAgICAgICAgJ2R1cGxpY2F0ZV93aXRoX2Jyb2tlbl9zcGxpdF92YWx1ZSc6ICgKKyAgICAgICAgICAgICJmaWxlbmFtZT1hYmMuZ2lmOyAiCisgICAgICAgICAgICAgICAgIiBmaWxlbmFtZSoyKj1pc28tODg1OS0xJyclMzIlMzAlMzElMkU7IGZpbGVuYW1lKjMqPSU3NCU2OSU2NiIsCisgICAgICAgICAgICAnIGZpbGVuYW1lPSJhYmMuZ2lmMjAxLnRpZiInLAorICAgICAgICAgICAgImZpbGVuYW1lPWFiYy5naWY7IgorICAgICAgICAgICAgICAgICIgZmlsZW5hbWUqMio9aXNvLTg4NTktMScnJTMyJTMwJTMxJTJFOyBmaWxlbmFtZSozKj0lNzQlNjklNjYiLAorICAgICAgICAgICAgWygnZmlsZW5hbWUnLCAnYWJjLmdpZjIwMS50aWYnKV0sCisgICAgICAgICAgICAjIERlZmVjdHMgYXJlIGFwcGFyZW50IG1pc3NpbmcgKjAqLCBhbmQgdHdvICdvdXQgb2Ygc2VxdWVuY2UnLgorICAgICAgICAgICAgW2Vycm9ycy5JbnZhbGlkSGVhZGVyRGVmZWN0XSozKSwKKworICAgIH0KIAogQHBhcmFtZXRlcml6ZQogY2xhc3MgVGVzdF9wYXJzZV9taW1lX3ZlcnNpb24oVGVzdFBhcnNlck1peGluLCBUZXN0RW1haWxCYXNlKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZW1haWwvdGVzdF9jb250ZW50bWFuYWdlci5weSBiL0xpYi90ZXN0L3Rlc3RfZW1haWwvdGVzdF9jb250ZW50bWFuYWdlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZGIwNGU0Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9lbWFpbC90ZXN0X2NvbnRlbnRtYW5hZ2VyLnB5CkBAIC0wLDAgKzEsNzk2IEBACitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdC50ZXN0X2VtYWlsIGltcG9ydCBUZXN0RW1haWxCYXNlLCBwYXJhbWV0ZXJpemUKK2ltcG9ydCB0ZXh0d3JhcAorZnJvbSBlbWFpbCBpbXBvcnQgcG9saWN5Citmcm9tIGVtYWlsLm1lc3NhZ2UgaW1wb3J0IEVtYWlsTWVzc2FnZQorZnJvbSBlbWFpbC5jb250ZW50bWFuYWdlciBpbXBvcnQgQ29udGVudE1hbmFnZXIsIHJhd19kYXRhX21hbmFnZXIKKworCitAcGFyYW1ldGVyaXplCitjbGFzcyBUZXN0Q29udGVudE1hbmFnZXIoVGVzdEVtYWlsQmFzZSk6CisKKyAgICBwb2xpY3kgPSBwb2xpY3kuZGVmYXVsdAorICAgIG1lc3NhZ2UgPSBFbWFpbE1lc3NhZ2UKKworICAgIGdldF9rZXlfcGFyYW1zID0geworICAgICAgICAnZnVsbF90eXBlJzogICAgICAgICgxLCAndGV4dC9wbGFpbicsKSwKKyAgICAgICAgJ21haW50eXBlX29ubHknOiAgICAoMiwgJ3RleHQnLCksCisgICAgICAgICdudWxsX2tleSc6ICAgICAgICAgKDMsICcnLCksCisgICAgICAgIH0KKworICAgIGRlZiBnZXRfa2V5X2FzX2dldF9jb250ZW50X2tleShzZWxmLCBvcmRlciwga2V5KToKKyAgICAgICAgZGVmIGZvb19nZXR0ZXIobXNnLCBmb289Tm9uZSk6CisgICAgICAgICAgICBiYXIgPSBtc2dbJ1gtQmFyLUhlYWRlciddCisgICAgICAgICAgICByZXR1cm4gZm9vLCBiYXIKKyAgICAgICAgY20gPSBDb250ZW50TWFuYWdlcigpCisgICAgICAgIGNtLmFkZF9nZXRfaGFuZGxlcihrZXksIGZvb19nZXR0ZXIpCisgICAgICAgIG0gPSBzZWxmLl9tYWtlX21lc3NhZ2UoKQorICAgICAgICBtWydDb250ZW50LVR5cGUnXSA9ICd0ZXh0L3BsYWluJworICAgICAgICBtWydYLUJhci1IZWFkZXInXSA9ICdmb28nCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZ2V0X2NvbnRlbnQobSwgZm9vPSdiYXInKSwgKCdiYXInLCAnZm9vJykpCisKKyAgICBkZWYgZ2V0X2tleV9hc19nZXRfY29udGVudF9rZXlfb3JkZXIoc2VsZiwgb3JkZXIsIGtleSk6CisgICAgICAgIGRlZiBiYXJfZ2V0dGVyKG1zZyk6CisgICAgICAgICAgICByZXR1cm4gbXNnWydYLUJhci1IZWFkZXInXQorICAgICAgICBkZWYgZm9vX2dldHRlcihtc2cpOgorICAgICAgICAgICAgcmV0dXJuIG1zZ1snWC1Gb28tSGVhZGVyJ10KKyAgICAgICAgY20gPSBDb250ZW50TWFuYWdlcigpCisgICAgICAgIGNtLmFkZF9nZXRfaGFuZGxlcihrZXksIGZvb19nZXR0ZXIpCisgICAgICAgIGZvciBwcmVjZWRlbmNlLCBrZXkgaW4gc2VsZi5nZXRfa2V5X3BhcmFtcy52YWx1ZXMoKToKKyAgICAgICAgICAgIGlmIHByZWNlZGVuY2UgPiBvcmRlcjoKKyAgICAgICAgICAgICAgICBjbS5hZGRfZ2V0X2hhbmRsZXIoa2V5LCBiYXJfZ2V0dGVyKQorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgbVsnQ29udGVudC1UeXBlJ10gPSAndGV4dC9wbGFpbicKKyAgICAgICAgbVsnWC1CYXItSGVhZGVyJ10gPSAnYmFyJworICAgICAgICBtWydYLUZvby1IZWFkZXInXSA9ICdmb28nCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZ2V0X2NvbnRlbnQobSksICgnZm9vJykpCisKKyAgICBkZWYgdGVzdF9nZXRfY29udGVudF9yYWlzZXNfaWZfdW5rbm93bl9taW1ldHlwZV9hbmRfbm9fZGVmYXVsdChzZWxmKToKKyAgICAgICAgY20gPSBDb250ZW50TWFuYWdlcigpCisgICAgICAgIG0gPSBzZWxmLl9tYWtlX21lc3NhZ2UoKQorICAgICAgICBtWydDb250ZW50LVR5cGUnXSA9ICd0ZXh0L3BsYWluJworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoS2V5RXJyb3IsICd0ZXh0L3BsYWluJyk6CisgICAgICAgICAgICBjbS5nZXRfY29udGVudChtKQorCisgICAgY2xhc3MgQmFzZVRoaW5nKHN0cik6CisgICAgICAgIHBhc3MKKyAgICBiYXNlb2JqZWN0X2Z1bGxfcGF0aCA9IF9fbmFtZV9fICsgJy4nICsgJ1Rlc3RDb250ZW50TWFuYWdlci5CYXNlVGhpbmcnCisgICAgY2xhc3MgVGhpbmcoQmFzZVRoaW5nKToKKyAgICAgICAgcGFzcworICAgIHRlc3RvYmplY3RfZnVsbF9wYXRoID0gX19uYW1lX18gKyAnLicgKyAnVGVzdENvbnRlbnRNYW5hZ2VyLlRoaW5nJworCisgICAgc2V0X2tleV9wYXJhbXMgPSB7CisgICAgICAgICd0eXBlJzogICAgICAgICAgICAgKDAsICBUaGluZywpLAorICAgICAgICAnZnVsbF9wYXRoJzogICAgICAgICgxLCAgdGVzdG9iamVjdF9mdWxsX3BhdGgsKSwKKyAgICAgICAgJ3F1YWxuYW1lJzogICAgICAgICAoMiwgICdUZXN0Q29udGVudE1hbmFnZXIuVGhpbmcnLCksCisgICAgICAgICduYW1lJzogICAgICAgICAgICAgKDMsICAnVGhpbmcnLCksCisgICAgICAgICdiYXNlX3R5cGUnOiAgICAgICAgKDQsICBCYXNlVGhpbmcsKSwKKyAgICAgICAgJ2Jhc2VfZnVsbF9wYXRoJzogICAoNSwgIGJhc2VvYmplY3RfZnVsbF9wYXRoLCksCisgICAgICAgICdiYXNlX3F1YWxuYW1lJzogICAgKDYsICAnVGVzdENvbnRlbnRNYW5hZ2VyLkJhc2VUaGluZycsKSwKKyAgICAgICAgJ2Jhc2VfbmFtZSc6ICAgICAgICAoNywgICdCYXNlVGhpbmcnLCksCisgICAgICAgICdzdHJfdHlwZSc6ICAgICAgICAgKDgsICBzdHIsKSwKKyAgICAgICAgJ3N0cl9mdWxsX3BhdGgnOiAgICAoOSwgICdidWlsdGlucy5zdHInLCksCisgICAgICAgICdzdHJfbmFtZSc6ICAgICAgICAgKDEwLCAnc3RyJywpLCAgICMgc3RyIG5hbWUgYW5kIHF1YWxuYW1lIGFyZSB0aGUgc2FtZQorICAgICAgICAnbnVsbF9rZXknOiAgICAgICAgICgxMSwgTm9uZSwpLAorICAgICAgICB9CisKKyAgICBkZWYgc2V0X2tleV9hc19zZXRfY29udGVudF9rZXkoc2VsZiwgb3JkZXIsIGtleSk6CisgICAgICAgIGRlZiBmb29fc2V0dGVyKG1zZywgb2JqLCBmb289Tm9uZSk6CisgICAgICAgICAgICBtc2dbJ1gtRm9vLUhlYWRlciddID0gZm9vCisgICAgICAgICAgICBtc2cuc2V0X3BheWxvYWQob2JqKQorICAgICAgICBjbSA9IENvbnRlbnRNYW5hZ2VyKCkKKyAgICAgICAgY20uYWRkX3NldF9oYW5kbGVyKGtleSwgZm9vX3NldHRlcikKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIG1zZ19vYmogPSBzZWxmLlRoaW5nKCkKKyAgICAgICAgY20uc2V0X2NvbnRlbnQobSwgbXNnX29iaiwgZm9vPSdiYXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1bJ1gtRm9vLUhlYWRlciddLCAnYmFyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9wYXlsb2FkKCksIG1zZ19vYmopCisKKyAgICBkZWYgc2V0X2tleV9hc19zZXRfY29udGVudF9rZXlfb3JkZXIoc2VsZiwgb3JkZXIsIGtleSk6CisgICAgICAgIGRlZiBmb29fc2V0dGVyKG1zZywgb2JqKToKKyAgICAgICAgICAgIG1zZ1snWC1Gb29CYXItSGVhZGVyJ10gPSAnZm9vJworICAgICAgICAgICAgbXNnLnNldF9wYXlsb2FkKG9iaikKKyAgICAgICAgZGVmIGJhcl9zZXR0ZXIobXNnLCBvYmopOgorICAgICAgICAgICAgbXNnWydYLUZvb0Jhci1IZWFkZXInXSA9ICdiYXInCisgICAgICAgIGNtID0gQ29udGVudE1hbmFnZXIoKQorICAgICAgICBjbS5hZGRfc2V0X2hhbmRsZXIoa2V5LCBmb29fc2V0dGVyKQorICAgICAgICBmb3IgcHJlY2VkZW5jZSwga2V5IGluIHNlbGYuZ2V0X2tleV9wYXJhbXMudmFsdWVzKCk6CisgICAgICAgICAgICBpZiBwcmVjZWRlbmNlID4gb3JkZXI6CisgICAgICAgICAgICAgICAgY20uYWRkX3NldF9oYW5kbGVyKGtleSwgYmFyX3NldHRlcikKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIG1zZ19vYmogPSBzZWxmLlRoaW5nKCkKKyAgICAgICAgY20uc2V0X2NvbnRlbnQobSwgbXNnX29iaikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtWydYLUZvb0Jhci1IZWFkZXInXSwgJ2ZvbycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfcGF5bG9hZCgpLCBtc2dfb2JqKQorCisgICAgZGVmIHRlc3Rfc2V0X2NvbnRlbnRfcmFpc2VzX2lmX3Vua25vd25fdHlwZV9hbmRfbm9fZGVmYXVsdChzZWxmKToKKyAgICAgICAgY20gPSBDb250ZW50TWFuYWdlcigpCisgICAgICAgIG0gPSBzZWxmLl9tYWtlX21lc3NhZ2UoKQorICAgICAgICBtc2dfb2JqID0gc2VsZi5UaGluZygpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChLZXlFcnJvciwgc2VsZi50ZXN0b2JqZWN0X2Z1bGxfcGF0aCk6CisgICAgICAgICAgICBjbS5zZXRfY29udGVudChtLCBtc2dfb2JqKQorCisgICAgZGVmIHRlc3Rfc2V0X2NvbnRlbnRfcmFpc2VzX2lmX2NhbGxlZF9vbl9tdWx0aXBhcnQoc2VsZik6CisgICAgICAgIGNtID0gQ29udGVudE1hbmFnZXIoKQorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgbVsnQ29udGVudC1UeXBlJ10gPSAnbXVsdGlwYXJ0L2ZvbycKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgY20uc2V0X2NvbnRlbnQobSwgJ3Rlc3QnKQorCisgICAgZGVmIHRlc3Rfc2V0X2NvbnRlbnRfY2FsbHNfY2xlYXJfY29udGVudChzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIG1bJ0NvbnRlbnQtRm9vJ10gPSAnYmFyJworICAgICAgICBtWydDb250ZW50LVR5cGUnXSA9ICd0ZXh0L2h0bWwnCisgICAgICAgIG1bJ1RvJ10gPSAndGVzdCcKKyAgICAgICAgbS5zZXRfcGF5bG9hZCgnYWJjJykKKyAgICAgICAgY20gPSBDb250ZW50TWFuYWdlcigpCisgICAgICAgIGNtLmFkZF9zZXRfaGFuZGxlcihzdHIsIGxhbWJkYSAqYXJncywgKiprdzogTm9uZSkKKyAgICAgICAgbS5zZXRfY29udGVudCgneHl6JywgY29udGVudF9tYW5hZ2VyPWNtKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShtWydDb250ZW50LUZvbyddKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShtWydDb250ZW50LVR5cGUnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtWydUbyddLCAndGVzdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKG0uZ2V0X3BheWxvYWQoKSkKKworCitAcGFyYW1ldGVyaXplCitjbGFzcyBUZXN0UmF3RGF0YU1hbmFnZXIoVGVzdEVtYWlsQmFzZSk6CisgICAgIyBOb3RlOiB0aGVzZSB0ZXN0cyBhcmUgZGVwZW5kZW50IG9uIHRoZSBvcmRlciBpbiB3aGljaCBoZWFkZXJzIGFyZSBhZGRlZAorICAgICMgdG8gdGhlIG1lc3NhZ2Ugb2JqZWN0cyBieSB0aGUgY29kZS4gIFRoZXJlJ3Mgbm8gZGVmaW5lZCBvcmRlcmluZyBpbgorICAgICMgUkZDNTMyMi9NSU1FLCBzbyB0aGlzIG1ha2VzIHRoZSB0ZXN0cyBtb3JlIGZyYWdpbGUgdGhhbiB0aGUgc3RhbmRhcmRzCisgICAgIyByZXF1aXJlLiAgSG93ZXZlciwgaWYgdGhlIGhlYWRlciBvcmRlciBjaGFuZ2VzIGl0IGlzIGJlc3QgdG8gdW5kZXJzdGFuZAorICAgICMgKndoeSosIGFuZCBtYWtlIHN1cmUgaXQgaXNuJ3QgYSBzdWJ0bGUgYnVnIGluIHdoYXRldmVyIGNoYW5nZSB3YXMKKyAgICAjIGFwcGxpZWQuCisKKyAgICBwb2xpY3kgPSBwb2xpY3kuZGVmYXVsdC5jbG9uZShtYXhfbGluZV9sZW5ndGg9NjAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudF9tYW5hZ2VyPXJhd19kYXRhX21hbmFnZXIpCisgICAgbWVzc2FnZSA9IEVtYWlsTWVzc2FnZQorCisgICAgZGVmIHRlc3RfZ2V0X3RleHRfcGxhaW4oc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9zdHJfbXNnKHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW4KKworICAgICAgICAgICAgQmFzaWMgdGV4dC4KKyAgICAgICAgICAgICIiIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmF3X2RhdGFfbWFuYWdlci5nZXRfY29udGVudChtKSwgIkJhc2ljIHRleHQuXG4iKQorCisgICAgZGVmIHRlc3RfZ2V0X3RleHRfaHRtbChzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX3N0cl9tc2codGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9odG1sCisKKyAgICAgICAgICAgIDxwPkJhc2ljIHRleHQuPC9wPgorICAgICAgICAgICAgIiIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYXdfZGF0YV9tYW5hZ2VyLmdldF9jb250ZW50KG0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICI8cD5CYXNpYyB0ZXh0LjwvcD5cbiIpCisKKyAgICBkZWYgdGVzdF9nZXRfdGV4dF9wbGFpbl9sYXRpbjEoc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9ieXRlc19tc2codGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1sYXRpbjEKKworICAgICAgICAgICAgQmFzw6xjIHTDq3h0LgorICAgICAgICAgICAgIiIiKS5lbmNvZGUoJ2xhdGluMScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhd19kYXRhX21hbmFnZXIuZ2V0X2NvbnRlbnQobSksICJCYXPDrGMgdMOreHQuXG4iKQorCisgICAgZGVmIHRlc3RfZ2V0X3RleHRfcGxhaW5fbGF0aW4xX3F1b3RlZF9wcmludGFibGUoc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9zdHJfbXNnKHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9ImxhdGluLTEiCisgICAgICAgICAgICBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBxdW90ZWQtcHJpbnRhYmxlCisKKyAgICAgICAgICAgIEJhcz1FQ2MgdD1FQnh0LgorICAgICAgICAgICAgIiIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYXdfZGF0YV9tYW5hZ2VyLmdldF9jb250ZW50KG0pLCAiQmFzw6xjIHTDq3h0LlxuIikKKworICAgIGRlZiB0ZXN0X2dldF90ZXh0X3BsYWluX3V0ZjhfYmFzZTY0KHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fc3RyX21zZyh0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJ1dGY4IgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogYmFzZTY0CisKKyAgICAgICAgICAgIFFtRnp3NnhqSUhURHEzaDBMZ289CisgICAgICAgICAgICAiIiIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhd19kYXRhX21hbmFnZXIuZ2V0X2NvbnRlbnQobSksICJCYXPDrGMgdMOreHQuXG4iKQorCisgICAgZGVmIHRlc3RfZ2V0X3RleHRfcGxhaW5fYmFkX3V0ZjhfcXVvdGVkX3ByaW50YWJsZShzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX3N0cl9tc2codGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0idXRmOCIKKyAgICAgICAgICAgIENvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IHF1b3RlZC1wcmludGFibGUKKworICAgICAgICAgICAgQmFzPWMzPWFjYyB0PWMzPWFieHQ9ZmQuCisgICAgICAgICAgICAiIiIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhd19kYXRhX21hbmFnZXIuZ2V0X2NvbnRlbnQobSksICJCYXPDrGMgdMOreHTvv70uXG4iKQorCisgICAgZGVmIHRlc3RfZ2V0X3RleHRfcGxhaW5fYmFkX3V0ZjhfcXVvdGVkX3ByaW50YWJsZV9pZ25vcmVfZXJyb3JzKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fc3RyX21zZyh0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJ1dGY4IgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogcXVvdGVkLXByaW50YWJsZQorCisgICAgICAgICAgICBCYXM9YzM9YWNjIHQ9YzM9YWJ4dD1mZC4KKyAgICAgICAgICAgICIiIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmF3X2RhdGFfbWFuYWdlci5nZXRfY29udGVudChtLCBlcnJvcnM9J2lnbm9yZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJCYXPDrGMgdMOreHQuXG4iKQorCisgICAgZGVmIHRlc3RfZ2V0X3RleHRfcGxhaW5fdXRmOF9iYXNlNjRfcmVjb3ZlcmFibGVfYmFkX0NURV9kYXRhKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fc3RyX21zZyh0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJ1dGY4IgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogYmFzZTY0CisKKyAgICAgICAgICAgIFFtRnp3NnhqSUhURHEzaDBMZ29ceEZGPQorICAgICAgICAgICAgIiIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYXdfZGF0YV9tYW5hZ2VyLmdldF9jb250ZW50KG0sIGVycm9ycz0naWdub3JlJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgIkJhc8OsYyB0w6t4dC5cbiIpCisKKyAgICBkZWYgdGVzdF9nZXRfdGV4dF9pbnZhbGlkX2tleXdvcmQoc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9zdHJfbXNnKHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW4KKworICAgICAgICAgICAgQmFzaWMgdGV4dC4KKyAgICAgICAgICAgICIiIikpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHJhd19kYXRhX21hbmFnZXIuZ2V0X2NvbnRlbnQobSwgZm9vPSdpZ25vcmUnKQorCisgICAgZGVmIHRlc3RfZ2V0X25vbl90ZXh0KHNlbGYpOgorICAgICAgICB0ZW1wbGF0ZSA9IHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHt9CisgICAgICAgICAgICBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBiYXNlNjQKKworICAgICAgICAgICAgWW05bmRYTWdaR0YwWVE9PQorICAgICAgICAgICAgIiIiKQorICAgICAgICBmb3IgbWFpbnR5cGUgaW4gJ2F1ZGlvIGltYWdlIHZpZGVvIGFwcGxpY2F0aW9uJy5zcGxpdCgpOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QobWFpbnR5cGU9bWFpbnR5cGUpOgorICAgICAgICAgICAgICAgIG0gPSBzZWxmLl9zdHJfbXNnKHRlbXBsYXRlLmZvcm1hdChtYWludHlwZSsnL2ZvbycpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmF3X2RhdGFfbWFuYWdlci5nZXRfY29udGVudChtKSwgYiJib2d1cyBkYXRhIikKKworICAgIGRlZiB0ZXN0X2dldF9ub25fdGV4dF9pbnZhbGlkX2tleXdvcmQoc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9zdHJfbXNnKHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IGltYWdlL2pwZworICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogYmFzZTY0CisKKyAgICAgICAgICAgIFltOW5kWE1nWkdGMFlRPT0KKyAgICAgICAgICAgICIiIikpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHJhd19kYXRhX21hbmFnZXIuZ2V0X2NvbnRlbnQobSwgZXJyb3JzPSdpZ25vcmUnKQorCisgICAgZGVmIHRlc3RfZ2V0X3JhaXNlc19vbl9tdWx0aXBhcnQoc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9zdHJfbXNnKHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9Ij09PSIKKworICAgICAgICAgICAgLS09PT0KKyAgICAgICAgICAgIC0tPT09LS0KKyAgICAgICAgICAgICIiIikpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IpOgorICAgICAgICAgICAgcmF3X2RhdGFfbWFuYWdlci5nZXRfY29udGVudChtKQorCisgICAgZGVmIHRlc3RfZ2V0X21lc3NhZ2VfcmZjODIyX2FuZF9leHRlcm5hbF9ib2R5KHNlbGYpOgorICAgICAgICB0ZW1wbGF0ZSA9IHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IG1lc3NhZ2Uve30KKworICAgICAgICAgICAgVG86IGZvb0BleGFtcGxlLmNvbQorICAgICAgICAgICAgRnJvbTogYmFyQGV4YW1wbGUuY29tCisgICAgICAgICAgICBTdWJqZWN0OiBleGFtcGxlCisKKyAgICAgICAgICAgIGFuIGV4YW1wbGUgbWVzc2FnZQorICAgICAgICAgICAgIiIiKQorICAgICAgICBmb3Igc3VidHlwZSBpbiAncmZjODIyIGV4dGVybmFsLWJvZHknLnNwbGl0KCk6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChzdWJ0eXBlPXN1YnR5cGUpOgorICAgICAgICAgICAgICAgIG0gPSBzZWxmLl9zdHJfbXNnKHRlbXBsYXRlLmZvcm1hdChzdWJ0eXBlKSkKKyAgICAgICAgICAgICAgICBzdWJfbXNnID0gcmF3X2RhdGFfbWFuYWdlci5nZXRfY29udGVudChtKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzdWJfbXNnLCBzZWxmLm1lc3NhZ2UpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYXdfZGF0YV9tYW5hZ2VyLmdldF9jb250ZW50KHN1Yl9tc2cpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFuIGV4YW1wbGUgbWVzc2FnZVxuIikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1Yl9tc2dbJ3RvJ10sICdmb29AZXhhbXBsZS5jb20nKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3ViX21zZ1snZnJvbSddLmFkZHJlc3Nlc1swXS51c2VybmFtZSwgJ2JhcicpCisKKyAgICBkZWYgdGVzdF9nZXRfbWVzc2FnZV9ub25fcmZjODIyX29yX2V4dGVybmFsX2JvZHlfeWllbGRzX2J5dGVzKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fc3RyX21zZyh0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgQ29udGVudC1UeXBlOiBtZXNzYWdlL3BhcnRpYWwKKworICAgICAgICAgICAgVG86IGZvb0BleGFtcGxlLmNvbQorICAgICAgICAgICAgRnJvbTogYmFyQGV4YW1wbGUuY29tCisgICAgICAgICAgICBTdWJqZWN0OiBleGFtcGxlCisKKyAgICAgICAgICAgIFRoZSByZWFsIGJvZHkgaXMgaW4gYW5vdGhlciBtZXNzYWdlLgorICAgICAgICAgICAgIiIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYXdfZGF0YV9tYW5hZ2VyLmdldF9jb250ZW50KG0pWzoxMF0sIGInVG86IGZvb0BleCcpCisKKyAgICBkZWYgdGVzdF9zZXRfdGV4dF9wbGFpbihzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIGNvbnRlbnQgPSAiU2ltcGxlIG1lc3NhZ2UuXG4iCisgICAgICAgIHJhd19kYXRhX21hbmFnZXIuc2V0X2NvbnRlbnQobSwgY29udGVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIobSksIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InV0Zi04IgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogN2JpdAorCisgICAgICAgICAgICBTaW1wbGUgbWVzc2FnZS4KKyAgICAgICAgICAgICIiIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfcGF5bG9hZChkZWNvZGU9VHJ1ZSkuZGVjb2RlKCd1dGYtOCcpLCBjb250ZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2NvbnRlbnQoKSwgY29udGVudCkKKworICAgIGRlZiB0ZXN0X3NldF90ZXh0X2h0bWwoc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9tYWtlX21lc3NhZ2UoKQorICAgICAgICBjb250ZW50ID0gIjxwPlNpbXBsZSBtZXNzYWdlLjwvcD5cbiIKKyAgICAgICAgcmF3X2RhdGFfbWFuYWdlci5zZXRfY29udGVudChtLCBjb250ZW50LCBzdWJ0eXBlPSdodG1sJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIobSksIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD0idXRmLTgiCisgICAgICAgICAgICBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA3Yml0CisKKyAgICAgICAgICAgIDxwPlNpbXBsZSBtZXNzYWdlLjwvcD4KKyAgICAgICAgICAgICIiIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfcGF5bG9hZChkZWNvZGU9VHJ1ZSkuZGVjb2RlKCd1dGYtOCcpLCBjb250ZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2NvbnRlbnQoKSwgY29udGVudCkKKworICAgIGRlZiB0ZXN0X3NldF90ZXh0X2NoYXJzZXRfbGF0aW5fMShzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIGNvbnRlbnQgPSAiU2ltcGxlIG1lc3NhZ2UuXG4iCisgICAgICAgIHJhd19kYXRhX21hbmFnZXIuc2V0X2NvbnRlbnQobSwgY29udGVudCwgY2hhcnNldD0nbGF0aW4tMScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKG0pLCB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJpc28tODg1OS0xIgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogN2JpdAorCisgICAgICAgICAgICBTaW1wbGUgbWVzc2FnZS4KKyAgICAgICAgICAgICIiIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfcGF5bG9hZChkZWNvZGU9VHJ1ZSkuZGVjb2RlKCd1dGYtOCcpLCBjb250ZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2NvbnRlbnQoKSwgY29udGVudCkKKworICAgIGRlZiB0ZXN0X3NldF90ZXh0X3Nob3J0X2xpbmVfbWluaW1hbF9ub25fYXNjaWlfaGV1cmlzdGljcyhzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIGNvbnRlbnQgPSAiZXQgbMOgIGlsIGVzdCBtb250w6kgc3VyIG1vaSBldCBpbCBjb21tZW5jZSDDoCBtJ8OpdG8uXG4iCisgICAgICAgIHJhd19kYXRhX21hbmFnZXIuc2V0X2NvbnRlbnQobSwgY29udGVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChieXRlcyhtKSwgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0idXRmLTgiCisgICAgICAgICAgICBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKKyAgICAgICAgICAgIGV0IGzDoCBpbCBlc3QgbW9udMOpIHN1ciBtb2kgZXQgaWwgY29tbWVuY2Ugw6AgbSfDqXRvLgorICAgICAgICAgICAgIiIiKS5lbmNvZGUoJ3V0Zi04JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfcGF5bG9hZChkZWNvZGU9VHJ1ZSkuZGVjb2RlKCd1dGYtOCcpLCBjb250ZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2NvbnRlbnQoKSwgY29udGVudCkKKworICAgIGRlZiB0ZXN0X3NldF90ZXh0X2xvbmdfbGluZV9taW5pbWFsX25vbl9hc2NpaV9oZXVyaXN0aWNzKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgY29udGVudCA9ICgiaidhaSB1biBwcm9ibMOobWUgZGUgcHl0aG9uLiBpbCBlc3Qgc29ydGkgZGUgc29uIgorICAgICAgICAgICAgICAgICAgICIgdml2YXJpdW0uICBldCBsw6AgaWwgZXN0IG1vbnTDqSBzdXIgbW9pIGV0IGlsIGNvbW1lbmNlIgorICAgICAgICAgICAgICAgICAgICIgw6AgbSfDqXRvLlxuIikKKyAgICAgICAgcmF3X2RhdGFfbWFuYWdlci5zZXRfY29udGVudChtLCBjb250ZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ5dGVzKG0pLCB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJ1dGYtOCIKKyAgICAgICAgICAgIENvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IHF1b3RlZC1wcmludGFibGUKKworICAgICAgICAgICAgaidhaSB1biBwcm9ibD1DMz1BOG1lIGRlIHB5dGhvbi4gaWwgZXN0IHNvcnRpIGRlIHNvbiB2aXZhcmk9CisgICAgICAgICAgICB1bS4gIGV0IGw9QzM9QTAgaWwgZXN0IG1vbnQ9QzM9QTkgc3VyIG1vaSBldCBpbCBjb21tZW5jZSA9CisgICAgICAgICAgICA9QzM9QTAgbSc9QzM9QTl0by4KKyAgICAgICAgICAgICIiIikuZW5jb2RlKCd1dGYtOCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X3BheWxvYWQoZGVjb2RlPVRydWUpLmRlY29kZSgndXRmLTgnKSwgY29udGVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9jb250ZW50KCksIGNvbnRlbnQpCisKKyAgICBkZWYgdGVzdF9zZXRfdGV4dF8xMV9saW5lc19sb25nX2xpbmVfbWluaW1hbF9ub25fYXNjaWlfaGV1cmlzdGljcyhzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIGNvbnRlbnQgPSAnXG4nKjEwICsgKAorICAgICAgICAgICAgICAgICAgImonYWkgdW4gcHJvYmzDqG1lIGRlIHB5dGhvbi4gaWwgZXN0IHNvcnRpIGRlIHNvbiIKKyAgICAgICAgICAgICAgICAgICIgdml2YXJpdW0uICBldCBsw6AgaWwgZXN0IG1vbnTDqSBzdXIgbW9pIGV0IGlsIGNvbW1lbmNlIgorICAgICAgICAgICAgICAgICAgIiDDoCBtJ8OpdG8uXG4iKQorICAgICAgICByYXdfZGF0YV9tYW5hZ2VyLnNldF9jb250ZW50KG0sIGNvbnRlbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZXMobSksIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InV0Zi04IgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogcXVvdGVkLXByaW50YWJsZQorICAgICAgICAgICAgIiIiICsgJ1xuJyoxMCArICIiIgorICAgICAgICAgICAgaidhaSB1biBwcm9ibD1DMz1BOG1lIGRlIHB5dGhvbi4gaWwgZXN0IHNvcnRpIGRlIHNvbiB2aXZhcmk9CisgICAgICAgICAgICB1bS4gIGV0IGw9QzM9QTAgaWwgZXN0IG1vbnQ9QzM9QTkgc3VyIG1vaSBldCBpbCBjb21tZW5jZSA9CisgICAgICAgICAgICA9QzM9QTAgbSc9QzM9QTl0by4KKyAgICAgICAgICAgICIiIikuZW5jb2RlKCd1dGYtOCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X3BheWxvYWQoZGVjb2RlPVRydWUpLmRlY29kZSgndXRmLTgnKSwgY29udGVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9jb250ZW50KCksIGNvbnRlbnQpCisKKyAgICBkZWYgdGVzdF9zZXRfdGV4dF9tYXhpbWFsX25vbl9hc2NpaV9oZXVyaXN0aWNzKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgY29udGVudCA9ICLDocOgw6TDqcOoxJnDtsWRLlxuIgorICAgICAgICByYXdfZGF0YV9tYW5hZ2VyLnNldF9jb250ZW50KG0sIGNvbnRlbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZXMobSksIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InV0Zi04IgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCisgICAgICAgICAgICDDocOgw6TDqcOoxJnDtsWRLgorICAgICAgICAgICAgIiIiKS5lbmNvZGUoJ3V0Zi04JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfcGF5bG9hZChkZWNvZGU9VHJ1ZSkuZGVjb2RlKCd1dGYtOCcpLCBjb250ZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2NvbnRlbnQoKSwgY29udGVudCkKKworICAgIGRlZiB0ZXN0X3NldF90ZXh0XzExX2xpbmVzX21heGltYWxfbm9uX2FzY2lpX2hldXJpc3RpY3Moc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9tYWtlX21lc3NhZ2UoKQorICAgICAgICBjb250ZW50ID0gJ1xuJyoxMCArICLDocOgw6TDqcOoxJnDtsWRLlxuIgorICAgICAgICByYXdfZGF0YV9tYW5hZ2VyLnNldF9jb250ZW50KG0sIGNvbnRlbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZXMobSksIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InV0Zi04IgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorICAgICAgICAgICAgIiIiICsgJ1xuJyoxMCArICIiIgorICAgICAgICAgICAgw6HDoMOkw6nDqMSZw7bFkS4KKyAgICAgICAgICAgICIiIikuZW5jb2RlKCd1dGYtOCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X3BheWxvYWQoZGVjb2RlPVRydWUpLmRlY29kZSgndXRmLTgnKSwgY29udGVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9jb250ZW50KCksIGNvbnRlbnQpCisKKyAgICBkZWYgdGVzdF9zZXRfdGV4dF9sb25nX2xpbmVfbWF4aW1hbF9ub25fYXNjaWlfaGV1cmlzdGljcyhzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIGNvbnRlbnQgPSAoIsOhw6DDpMOpw6jEmcO2xZHDocOgw6TDqcOoxJnDtsWRw6HDoMOkw6nDqMSZw7bFkcOhw6DDpMOpw6jEmcO2xZEiCisgICAgICAgICAgICAgICAgICAgIsOhw6DDpMOpw6jEmcO2xZHDocOgw6TDqcOoxJnDtsWRw6HDoMOkw6nDqMSZw7bFkcOhw6DDpMOpw6jEmcO2xZEiCisgICAgICAgICAgICAgICAgICAgIsOhw6DDpMOpw6jEmcO2xZHDocOgw6TDqcOoxJnDtsWRw6HDoMOkw6nDqMSZw7bFkcOhw6DDpMOpw6jEmcO2xZEuXG4iKQorICAgICAgICByYXdfZGF0YV9tYW5hZ2VyLnNldF9jb250ZW50KG0sIGNvbnRlbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZXMobSksIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InV0Zi04IgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogYmFzZTY0CisKKyAgICAgICAgICAgIHc2SERvTU9rdzZuRHFNU1p3N2JGa2NPaHc2RERwTU9wdzZqRW1jTzJ4WkhEb2NPZ3c2VERxY09veEpuRAorICAgICAgICAgICAgdHNXUnc2SERvTU9rdzZuRHFNU1p3N2JGa2NPaHc2RERwTU9wdzZqRW1jTzJ4WkhEb2NPZ3c2VERxY09vCisgICAgICAgICAgICB4Sm5EdHNXUnc2SERvTU9rdzZuRHFNU1p3N2JGa2NPaHc2RERwTU9wdzZqRW1jTzJ4WkhEb2NPZ3c2VEQKKyAgICAgICAgICAgIHFjT294Sm5EdHNXUnc2SERvTU9rdzZuRHFNU1p3N2JGa2NPaHc2RERwTU9wdzZqRW1jTzJ4WkhEb2NPZworICAgICAgICAgICAgdzZURHFjT294Sm5EdHNXUkxnbz0KKyAgICAgICAgICAgICIiIikuZW5jb2RlKCd1dGYtOCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X3BheWxvYWQoZGVjb2RlPVRydWUpLmRlY29kZSgndXRmLTgnKSwgY29udGVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9jb250ZW50KCksIGNvbnRlbnQpCisKKyAgICBkZWYgdGVzdF9zZXRfdGV4dF8xMV9saW5lc19sb25nX2xpbmVfbWF4aW1hbF9ub25fYXNjaWlfaGV1cmlzdGljcyhzZWxmKToKKyAgICAgICAgIyBZZXMsIGl0IGNob29zZXMgIndyb25nIiBoZXJlLiAgSXQncyBhIGhldXJpc3RpYy4gIFNvIHRoaXMgcmVzdWx0CisgICAgICAgICMgY291bGQgY2hhbmdlIGlmIHdlIGNvbWUgdXAgd2l0aCBhIGJldHRlciBoZXVyaXN0aWMuCisgICAgICAgIG0gPSBzZWxmLl9tYWtlX21lc3NhZ2UoKQorICAgICAgICBjb250ZW50ID0gKCdcbicqMTAgKworICAgICAgICAgICAgICAgICAgICLDocOgw6TDqcOoxJnDtsWRw6HDoMOkw6nDqMSZw7bFkcOhw6DDpMOpw6jEmcO2xZHDocOgw6TDqcOoxJnDtsWRIgorICAgICAgICAgICAgICAgICAgICLDocOgw6TDqcOoxJnDtsWRw6HDoMOkw6nDqMSZw7bFkcOhw6DDpMOpw6jEmcO2xZHDocOgw6TDqcOoxJnDtsWRIgorICAgICAgICAgICAgICAgICAgICLDocOgw6TDqcOoxJnDtsWRw6HDoMOkw6nDqMSZw7bFkcOhw6DDpMOpw6jEmcO2xZHDocOgw6TDqcOoxJnDtsWRLlxuIikKKyAgICAgICAgcmF3X2RhdGFfbWFuYWdlci5zZXRfY29udGVudChtLCAiXG4iKjEwICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiw6HDoMOkw6nDqMSZw7bFkcOhw6DDpMOpw6jEmcO2xZHDocOgw6TDqcOoxJnDtsWRw6HDoMOkw6nDqMSZw7bFkSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiw6HDoMOkw6nDqMSZw7bFkcOhw6DDpMOpw6jEmcO2xZHDocOgw6TDqcOoxJnDtsWRw6HDoMOkw6nDqMSZw7bFkSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiw6HDoMOkw6nDqMSZw7bFkcOhw6DDpMOpw6jEmcO2xZHDocOgw6TDqcOoxJnDtsWRw6HDoMOkw6nDqMSZw7bFkS5cbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZXMobSksIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InV0Zi04IgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogcXVvdGVkLXByaW50YWJsZQorICAgICAgICAgICAgIiIiICsgJ1xuJyoxMCArICIiIgorICAgICAgICAgICAgPUMzPUExPUMzPUEwPUMzPUE0PUMzPUE5PUMzPUE4PUM0PTk5PUMzPUI2PUM1PTkxPUMzPUExPUMzPQorICAgICAgICAgICAgPUEwPUMzPUE0PUMzPUE5PUMzPUE4PUM0PTk5PUMzPUI2PUM1PTkxPUMzPUExPUMzPUEwPUMzPUE0PQorICAgICAgICAgICAgPUMzPUE5PUMzPUE4PUM0PTk5PUMzPUI2PUM1PTkxPUMzPUExPUMzPUEwPUMzPUE0PUMzPUE5PUMzPQorICAgICAgICAgICAgPUE4PUM0PTk5PUMzPUI2PUM1PTkxPUMzPUExPUMzPUEwPUMzPUE0PUMzPUE5PUMzPUE4PUM0PTk5PQorICAgICAgICAgICAgPUMzPUI2PUM1PTkxPUMzPUExPUMzPUEwPUMzPUE0PUMzPUE5PUMzPUE4PUM0PTk5PUMzPUI2PUM1PQorICAgICAgICAgICAgPTkxPUMzPUExPUMzPUEwPUMzPUE0PUMzPUE5PUMzPUE4PUM0PTk5PUMzPUI2PUM1PTkxPUMzPUExPQorICAgICAgICAgICAgPUMzPUEwPUMzPUE0PUMzPUE5PUMzPUE4PUM0PTk5PUMzPUI2PUM1PTkxPUMzPUExPUMzPUEwPUMzPQorICAgICAgICAgICAgPUE0PUMzPUE5PUMzPUE4PUM0PTk5PUMzPUI2PUM1PTkxPUMzPUExPUMzPUEwPUMzPUE0PUMzPUE5PQorICAgICAgICAgICAgPUMzPUE4PUM0PTk5PUMzPUI2PUM1PTkxPUMzPUExPUMzPUEwPUMzPUE0PUMzPUE5PUMzPUE4PUM0PQorICAgICAgICAgICAgPTk5PUMzPUI2PUM1PTkxPUMzPUExPUMzPUEwPUMzPUE0PUMzPUE5PUMzPUE4PUM0PTk5PUMzPUI2PQorICAgICAgICAgICAgPUM1PTkxLgorICAgICAgICAgICAgIiIiKS5lbmNvZGUoJ3V0Zi04JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfcGF5bG9hZChkZWNvZGU9VHJ1ZSkuZGVjb2RlKCd1dGYtOCcpLCBjb250ZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2NvbnRlbnQoKSwgY29udGVudCkKKworICAgIGRlZiB0ZXN0X3NldF90ZXh0X25vbl9hc2NpaV93aXRoX2N0ZV83Yml0X3JhaXNlcyhzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVycm9yKToKKyAgICAgICAgICAgIHJhd19kYXRhX21hbmFnZXIuc2V0X2NvbnRlbnQobSwiw6HDoMOkw6nDqMSZw7bFkS5cbiIsIGN0ZT0nN2JpdCcpCisKKyAgICBkZWYgdGVzdF9zZXRfdGV4dF9ub25fYXNjaWlfd2l0aF9jaGFyc2V0X2FzY2lpX3JhaXNlcyhzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVycm9yKToKKyAgICAgICAgICAgIHJhd19kYXRhX21hbmFnZXIuc2V0X2NvbnRlbnQobSwiw6HDoMOkw6nDqMSZw7bFkS5cbiIsIGNoYXJzZXQ9J2FzY2lpJykKKworICAgIGRlZiB0ZXN0X3NldF90ZXh0X25vbl9hc2NpaV93aXRoX2N0ZV83Yml0X2FuZF9jaGFyc2V0X2FzY2lpX3JhaXNlcyhzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVycm9yKToKKyAgICAgICAgICAgIHJhd19kYXRhX21hbmFnZXIuc2V0X2NvbnRlbnQobSwiw6HDoMOkw6nDqMSZw7bFkS5cbiIsIGN0ZT0nN2JpdCcsIGNoYXJzZXQ9J2FzY2lpJykKKworICAgIGRlZiB0ZXN0X3NldF9tZXNzYWdlKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgbVsnU3ViamVjdCddID0gIkZvcndhcmRlZCBtZXNzYWdlIgorICAgICAgICBjb250ZW50ID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgY29udGVudFsnVG8nXSA9ICdweXRob25Adml2YXJpdW0ub3JnJworICAgICAgICBjb250ZW50WydGcm9tJ10gPSAncG9saWNlQG1vbnR5Lm9yZycKKyAgICAgICAgY29udGVudFsnU3ViamVjdCddID0gImdldCBiYWNrIGluIHlvdXIgYm94IgorICAgICAgICBjb250ZW50LnNldF9jb250ZW50KCJPciBmYWNlIHRoZSBjb21meSBjaGFpci4iKQorICAgICAgICByYXdfZGF0YV9tYW5hZ2VyLnNldF9jb250ZW50KG0sIGNvbnRlbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKG0pLCB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgU3ViamVjdDogRm9yd2FyZGVkIG1lc3NhZ2UKKyAgICAgICAgICAgIENvbnRlbnQtVHlwZTogbWVzc2FnZS9yZmM4MjIKKyAgICAgICAgICAgIENvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworICAgICAgICAgICAgVG86IHB5dGhvbkB2aXZhcml1bS5vcmcKKyAgICAgICAgICAgIEZyb206IHBvbGljZUBtb250eS5vcmcKKyAgICAgICAgICAgIFN1YmplY3Q6IGdldCBiYWNrIGluIHlvdXIgYm94CisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InV0Zi04IgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogN2JpdAorICAgICAgICAgICAgTUlNRS1WZXJzaW9uOiAxLjAKKworICAgICAgICAgICAgT3IgZmFjZSB0aGUgY29tZnkgY2hhaXIuCisgICAgICAgICAgICAiIiIpKQorICAgICAgICBwYXlsb2FkID0gbS5nZXRfcGF5bG9hZCgwKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocGF5bG9hZCwgc2VsZi5tZXNzYWdlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihwYXlsb2FkKSwgc3RyKGNvbnRlbnQpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UobS5nZXRfY29udGVudCgpLCBzZWxmLm1lc3NhZ2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKG0uZ2V0X2NvbnRlbnQoKSksIHN0cihjb250ZW50KSkKKworICAgIGRlZiB0ZXN0X3NldF9tZXNzYWdlX3dpdGhfbm9uX2FzY2lpX2FuZF9jb2VyY2lvbl90b183Yml0KHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgbVsnU3ViamVjdCddID0gIkVzY2FwZSByZXBvcnQiCisgICAgICAgIGNvbnRlbnQgPSBzZWxmLl9tYWtlX21lc3NhZ2UoKQorICAgICAgICBjb250ZW50WydUbyddID0gJ3BvbGljZUBtb250eS5vcmcnCisgICAgICAgIGNvbnRlbnRbJ0Zyb20nXSA9ICd2aWN0aW1AbW9udHkub3JnJworICAgICAgICBjb250ZW50WydTdWJqZWN0J10gPSAiSGVscCIKKyAgICAgICAgY29udGVudC5zZXRfY29udGVudCgiaidhaSB1biBwcm9ibMOobWUgZGUgcHl0aG9uLiBpbCBlc3Qgc29ydGkgZGUgc29uIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgdml2YXJpdW0uIikKKyAgICAgICAgcmF3X2RhdGFfbWFuYWdlci5zZXRfY29udGVudChtLCBjb250ZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ5dGVzKG0pLCB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgU3ViamVjdDogRXNjYXBlIHJlcG9ydAorICAgICAgICAgICAgQ29udGVudC1UeXBlOiBtZXNzYWdlL3JmYzgyMgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCisgICAgICAgICAgICBUbzogcG9saWNlQG1vbnR5Lm9yZworICAgICAgICAgICAgRnJvbTogdmljdGltQG1vbnR5Lm9yZworICAgICAgICAgICAgU3ViamVjdDogSGVscAorICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJ1dGYtOCIKKyAgICAgICAgICAgIENvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKyAgICAgICAgICAgIE1JTUUtVmVyc2lvbjogMS4wCisKKyAgICAgICAgICAgIGonYWkgdW4gcHJvYmzDqG1lIGRlIHB5dGhvbi4gaWwgZXN0IHNvcnRpIGRlIHNvbiB2aXZhcml1bS4KKyAgICAgICAgICAgICIiIikuZW5jb2RlKCd1dGYtOCcpKQorICAgICAgICAjIFRoZSBjaG9pY2Ugb2YgYmFzZTY0IGZvciB0aGUgYm9keSBlbmNvZGluZyBpcyBiZWNhdXNlIGdlbmVyYXRvcgorICAgICAgICAjIGRvZXNuJ3QgYm90aGVyIHdpdGggaGV1cmlzdGljcyBhbmQgdXNlcyBpdCB1bmNvbmRpdGlvbmFsbHkgZm9yIHV0Zi04CisgICAgICAgICMgdGV4dC4KKyAgICAgICAgIyBYWFg6IHRoZSBmaXJzdCBjdGUgc2hvdWxkIGJlIDdiaXQsIHRvby4uLnRoYXQncyBhIGdlbmVyYXRvciBidWcuCisgICAgICAgICMgWFhYOiB0aGUgbGluZSBsZW5ndGggaW4gdGhlIGJvZHkgYWxzbyBsb29rcyBsaWtlIGEgZ2VuZXJhdG9yIGJ1Zy4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmFzX3N0cmluZyhtYXhoZWFkZXJsZW49c2VsZi5wb2xpY3kubWF4X2xpbmVfbGVuZ3RoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgU3ViamVjdDogRXNjYXBlIHJlcG9ydAorICAgICAgICAgICAgQ29udGVudC1UeXBlOiBtZXNzYWdlL3JmYzgyMgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCisgICAgICAgICAgICBUbzogcG9saWNlQG1vbnR5Lm9yZworICAgICAgICAgICAgRnJvbTogdmljdGltQG1vbnR5Lm9yZworICAgICAgICAgICAgU3ViamVjdDogSGVscAorICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJ1dGYtOCIKKyAgICAgICAgICAgIENvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IGJhc2U2NAorICAgICAgICAgICAgTUlNRS1WZXJzaW9uOiAxLjAKKworICAgICAgICAgICAgYWlkaGFTQjFiaUJ3Y205aWJNT29iV1VnWkdVZ2NIbDBhRzl1TGlCcGJDQmxjM1FnYzI5eWRHa2daR1VnYzI5dUlIWnBkbUZ5YVhWdAorICAgICAgICAgICAgTGdvPQorICAgICAgICAgICAgIiIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG0uZ2V0X2NvbnRlbnQoKSwgc2VsZi5tZXNzYWdlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihtLmdldF9jb250ZW50KCkpLCBzdHIoY29udGVudCkpCisKKyAgICBkZWYgdGVzdF9zZXRfbWVzc2FnZV9pbnZhbGlkX2N0ZV9yYWlzZXMoc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9tYWtlX21lc3NhZ2UoKQorICAgICAgICBjb250ZW50ID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgZm9yIGN0ZSBpbiAncXVvdGVkLXByaW50YWJsZSBiYXNlNjQnLnNwbGl0KCk6CisgICAgICAgICAgICBmb3Igc3VidHlwZSBpbiAncmZjODIyIGV4dGVybmFsLWJvZHknLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoY3RlPWN0ZSwgc3VidHlwZT1zdWJ0eXBlKToKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKSBhcyBhcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIG0uc2V0X2NvbnRlbnQoY29udGVudCwgc3VidHlwZSwgY3RlPWN0ZSkKKyAgICAgICAgICAgICAgICAgICAgZXhjID0gc3RyKGFyLmV4Y2VwdGlvbikKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihjdGUsIGV4YykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihzdWJ0eXBlLCBleGMpCisgICAgICAgIHN1YnR5cGUgPSAnZXh0ZXJuYWwtYm9keScKKyAgICAgICAgZm9yIGN0ZSBpbiAnOGJpdCBiaW5hcnknLnNwbGl0KCk6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChjdGU9Y3RlLCBzdWJ0eXBlPXN1YnR5cGUpOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcikgYXMgYXI6CisgICAgICAgICAgICAgICAgICAgIG0uc2V0X2NvbnRlbnQoY29udGVudCwgc3VidHlwZSwgY3RlPWN0ZSkKKyAgICAgICAgICAgICAgICBleGMgPSBzdHIoYXIuZXhjZXB0aW9uKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oY3RlLCBleGMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihzdWJ0eXBlLCBleGMpCisKKyAgICBkZWYgdGVzdF9zZXRfaW1hZ2VfanBnKHNlbGYpOgorICAgICAgICBmb3IgY29udGVudCBpbiAoYiJib2d1cyBjb250ZW50IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVhcnJheShiImJvZ3VzIGNvbnRlbnQiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeXZpZXcoYiJib2d1cyBjb250ZW50IikpOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoY29udGVudD1jb250ZW50KToKKyAgICAgICAgICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgICAgICAgICByYXdfZGF0YV9tYW5hZ2VyLnNldF9jb250ZW50KG0sIGNvbnRlbnQsICdpbWFnZScsICdqcGVnJykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihtKSwgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiBpbWFnZS9qcGVnCisgICAgICAgICAgICAgICAgICAgIENvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IGJhc2U2NAorCisgICAgICAgICAgICAgICAgICAgIFltOW5kWE1nWTI5dWRHVnVkQT09CisgICAgICAgICAgICAgICAgICAgICIiIikpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9wYXlsb2FkKGRlY29kZT1UcnVlKSwgY29udGVudCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2NvbnRlbnQoKSwgY29udGVudCkKKworICAgIGRlZiB0ZXN0X3NldF9hdWRpb19haWZfd2l0aF9xdW90ZWRfcHJpbnRhYmxlX2N0ZShzZWxmKToKKyAgICAgICAgIyBXaHkgeW91IHdvdWxkIHVzZSBxcCwgSSBkb24ndCBrbm93LCBidXQgaXQgaXMgdGVjaG5pY2FsbHkgc3VwcG9ydGVkLgorICAgICAgICAjIFhYWDogdGhlIGluY29ycmVjdCBsaW5lIGxlbmd0aCBpcyBiZWNhdXNlIGJpbmFzY2lpLmIyYV9xcCBkb2Vzbid0CisgICAgICAgICMgc3VwcG9ydCBhIGxpbmUgbGVuZ3RoIHBhcmFtZXRlciwgYnV0IHdlIG11c3QgdXNlIGl0IHRvIGdldCBuZXdsaW5lCisgICAgICAgICMgZW5jb2RpbmcuCisgICAgICAgICMgWFhYOiB3aGF0IGFib3V0IHRoYXQgbGFjayBvZiB0YWlsaW5nIG5ld2xpbmU/ICBEbyB3ZSBhY3R1YWxseSBoYW5kbGUKKyAgICAgICAgIyB0aGF0IGNvcnJlY3RseSBpbiBhbGwgY2FzZXM/ICBUaGF0IGlzLCBpZiB0aGUgKnNvdXJjZSogaGFzIGFuCisgICAgICAgICMgdW5lbmNvZGVkIG5ld2xpbmUsIGRvIHdlIGFkZCBhbiBleHRyYSBuZXdsaW5lIHRvIHRoZSByZXR1cm5lZCBwYXlsb2FkCisgICAgICAgICMgb3Igbm90PyAgQW5kIGNhbiB0aGF0IGFjdHVhbGx5IGJlIGRpc2FtYmlndWF0ZWQgYmFzZWQgb24gdGhlIFJGQz8KKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIGNvbnRlbnQgPSBiJ2JceEZGZ3VzXHRjb25cbnRccmVudCAnICsgYid6JyoxMDAKKyAgICAgICAgbS5zZXRfY29udGVudChjb250ZW50LCAnYXVkaW8nLCAnYWlmJywgY3RlPSdxdW90ZWQtcHJpbnRhYmxlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChieXRlcyhtKSwgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgIENvbnRlbnQtVHlwZTogYXVkaW8vYWlmCisgICAgICAgICAgICBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBxdW90ZWQtcHJpbnRhYmxlCisgICAgICAgICAgICBNSU1FLVZlcnNpb246IDEuMAorCisgICAgICAgICAgICBiPUZGZ3VzPTA5Y29uPTBBdD0wRGVudD0yMHp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6eno9CisgICAgICAgICAgICB6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enoiIiIpLmVuY29kZSgnbGF0aW4tMScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X3BheWxvYWQoZGVjb2RlPVRydWUpLCBjb250ZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2NvbnRlbnQoKSwgY29udGVudCkKKworICAgIGRlZiB0ZXN0X3NldF92aWRlb19tcGVnX3dpdGhfYmluYXJ5X2N0ZShzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIGNvbnRlbnQgPSBiJ2JceEZGZ3VzXHRjb25cbnRccmVudCAnICsgYid6JyoxMDAKKyAgICAgICAgbS5zZXRfY29udGVudChjb250ZW50LCAndmlkZW8nLCAnbXBlZycsIGN0ZT0nYmluYXJ5JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChieXRlcyhtKSwgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdmlkZW8vbXBlZworICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogYmluYXJ5CisgICAgICAgICAgICBNSU1FLVZlcnNpb246IDEuMAorCisgICAgICAgICAgICAiIiIpLmVuY29kZSgnYXNjaWknKSArCisgICAgICAgICAgICAjIFhYWDogdGhlIHNlY29uZCBcbiBvdWdodCB0byBiZSBhIFxyLCBidXQgZ2VuZXJhdG9yIGdldHMgaXQgd3JvbmcuCisgICAgICAgICAgICAjIFRISVMgTUVBTlMgV0UgRE9OJ1QgQUNUVUFMTFkgU1VQUE9SVCBUSEUgJ2JpbmFyeScgQ1RFLgorICAgICAgICAgICAgYidiXHhGRmd1c1x0Y29uXG50XG5lbnQgenp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6JyArCisgICAgICAgICAgICBiJ3p6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X3BheWxvYWQoZGVjb2RlPVRydWUpLCBjb250ZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2NvbnRlbnQoKSwgY29udGVudCkKKworICAgIGRlZiB0ZXN0X3NldF9hcHBsaWNhdGlvbl9vY3RldF9zdHJlYW1fd2l0aF84Yml0X2N0ZShzZWxmKToKKyAgICAgICAgIyBJbiA4Yml0IG1vZGUsIHVuaXZlcmFsIGxpbmUgZW5kIGxvZ2ljIGFwcGxpZXMuICBJdCBpcyB1cCB0byB0aGUKKyAgICAgICAgIyBhcHBsaWNhdGlvbiB0byBtYWtlIHN1cmUgdGhlIGxpbmVzIGFyZSBzaG9ydCBlbm91Z2g7IHdlIGRvbid0IGNoZWNrLgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgY29udGVudCA9IGInYlx4RkZndXNcdGNvblxudFxyZW50XG4nICsgYid6Jyo2MCArIGInXG4nCisgICAgICAgIG0uc2V0X2NvbnRlbnQoY29udGVudCwgJ2FwcGxpY2F0aW9uJywgJ29jdGV0LXN0cmVhbScsIGN0ZT0nOGJpdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZXMobSksIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorICAgICAgICAgICAgTUlNRS1WZXJzaW9uOiAxLjAKKworICAgICAgICAgICAgIiIiKS5lbmNvZGUoJ2FzY2lpJykgKworICAgICAgICAgICAgYidiXHhGRmd1c1x0Y29uXG50XG5lbnRcbicgKworICAgICAgICAgICAgYid6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enpcbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfcGF5bG9hZChkZWNvZGU9VHJ1ZSksIGNvbnRlbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfY29udGVudCgpLCBjb250ZW50KQorCisgICAgZGVmIHRlc3Rfc2V0X2hlYWRlcnNfZnJvbV9oZWFkZXJfb2JqZWN0cyhzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIGNvbnRlbnQgPSAiU2ltcGxlIG1lc3NhZ2UuXG4iCisgICAgICAgIGhlYWRlcl9mYWN0b3J5ID0gc2VsZi5wb2xpY3kuaGVhZGVyX2ZhY3RvcnkKKyAgICAgICAgcmF3X2RhdGFfbWFuYWdlci5zZXRfY29udGVudChtLCBjb250ZW50LCBoZWFkZXJzPSgKKyAgICAgICAgICAgIGhlYWRlcl9mYWN0b3J5KCJUbyIsICJmb29AZXhhbXBsZS5jb20iKSwKKyAgICAgICAgICAgIGhlYWRlcl9mYWN0b3J5KCJGcm9tIiwgImZvb0BleGFtcGxlLmNvbSIpLAorICAgICAgICAgICAgaGVhZGVyX2ZhY3RvcnkoIlN1YmplY3QiLCAiSSdtIHRhbGtpbmcgdG8gbXlzZWxmLiIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIobSksIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InV0Zi04IgorICAgICAgICAgICAgVG86IGZvb0BleGFtcGxlLmNvbQorICAgICAgICAgICAgRnJvbTogZm9vQGV4YW1wbGUuY29tCisgICAgICAgICAgICBTdWJqZWN0OiBJJ20gdGFsa2luZyB0byBteXNlbGYuCisgICAgICAgICAgICBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA3Yml0CisKKyAgICAgICAgICAgIFNpbXBsZSBtZXNzYWdlLgorICAgICAgICAgICAgIiIiKSkKKworICAgIGRlZiB0ZXN0X3NldF9oZWFkZXJzX2Zyb21fc3RyaW5ncyhzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIGNvbnRlbnQgPSAiU2ltcGxlIG1lc3NhZ2UuXG4iCisgICAgICAgIHJhd19kYXRhX21hbmFnZXIuc2V0X2NvbnRlbnQobSwgY29udGVudCwgaGVhZGVycz0oCisgICAgICAgICAgICAiWC1Gb28tSGVhZGVyOiBmb28iLAorICAgICAgICAgICAgIlgtQmFyLUhlYWRlcjogYmFyIiwpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihtKSwgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0idXRmLTgiCisgICAgICAgICAgICBYLUZvby1IZWFkZXI6IGZvbworICAgICAgICAgICAgWC1CYXItSGVhZGVyOiBiYXIKKyAgICAgICAgICAgIENvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDdiaXQKKworICAgICAgICAgICAgU2ltcGxlIG1lc3NhZ2UuCisgICAgICAgICAgICAiIiIpKQorCisgICAgZGVmIHRlc3Rfc2V0X2hlYWRlcnNfd2l0aF9pbnZhbGlkX2R1cGxpY2F0ZV9zdHJpbmdfaGVhZGVyX3JhaXNlcyhzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIGNvbnRlbnQgPSAiU2ltcGxlIG1lc3NhZ2UuXG4iCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLCAnQ29udGVudC1UeXBlJyk6CisgICAgICAgICAgICByYXdfZGF0YV9tYW5hZ2VyLnNldF9jb250ZW50KG0sIGNvbnRlbnQsIGhlYWRlcnM9KAorICAgICAgICAgICAgICAgICJDb250ZW50LVR5cGU6IGZvby9iYXIiLCkKKyAgICAgICAgICAgICAgICApCisKKyAgICBkZWYgdGVzdF9zZXRfaGVhZGVyc193aXRoX2ludmFsaWRfZHVwbGljYXRlX2hlYWRlcl9oZWFkZXJfcmFpc2VzKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgY29udGVudCA9ICJTaW1wbGUgbWVzc2FnZS5cbiIKKyAgICAgICAgaGVhZGVyX2ZhY3RvcnkgPSBzZWxmLnBvbGljeS5oZWFkZXJfZmFjdG9yeQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwgJ0NvbnRlbnQtVHlwZScpOgorICAgICAgICAgICAgcmF3X2RhdGFfbWFuYWdlci5zZXRfY29udGVudChtLCBjb250ZW50LCBoZWFkZXJzPSgKKyAgICAgICAgICAgICAgICBoZWFkZXJfZmFjdG9yeSgiQ29udGVudC1UeXBlIiwgIiBmb28vYmFyIiksKQorICAgICAgICAgICAgICAgICkKKworICAgIGRlZiB0ZXN0X3NldF9oZWFkZXJzX3dpdGhfZGVmZWN0aXZlX3N0cmluZ19oZWFkZXJfcmFpc2VzKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgY29udGVudCA9ICJTaW1wbGUgbWVzc2FnZS5cbiIKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsICdhQGZhaXJseUBAaW52YWxpZEBhZGRyZXNzJyk6CisgICAgICAgICAgICByYXdfZGF0YV9tYW5hZ2VyLnNldF9jb250ZW50KG0sIGNvbnRlbnQsIGhlYWRlcnM9KAorICAgICAgICAgICAgICAgICdUbzogYUBmYWlybHlAQGludmFsaWRAYWRkcmVzcycsKQorICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgIHByaW50KG1bJ1RvJ10uZGVmZWN0cykKKworICAgIGRlZiB0ZXN0X3NldF9oZWFkZXJzX3dpdGhfZGVmZWN0aXZlX2hlYWRlcl9oZWFkZXJfcmFpc2VzKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgY29udGVudCA9ICJTaW1wbGUgbWVzc2FnZS5cbiIKKyAgICAgICAgaGVhZGVyX2ZhY3RvcnkgPSBzZWxmLnBvbGljeS5oZWFkZXJfZmFjdG9yeQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwgJ2FAZmFpcmx5QEBpbnZhbGlkQGFkZHJlc3MnKToKKyAgICAgICAgICAgIHJhd19kYXRhX21hbmFnZXIuc2V0X2NvbnRlbnQobSwgY29udGVudCwgaGVhZGVycz0oCisgICAgICAgICAgICAgICAgaGVhZGVyX2ZhY3RvcnkoJ1RvJywgJ2FAZmFpcmx5QEBpbnZhbGlkQGFkZHJlc3MnKSwpCisgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgcHJpbnQobVsnVG8nXS5kZWZlY3RzKQorCisgICAgZGVmIHRlc3Rfc2V0X2Rpc3Bvc2l0aW9uX2lubGluZShzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIG0uc2V0X2NvbnRlbnQoJ2ZvbycsIGRpc3Bvc2l0aW9uPSdpbmxpbmUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1bJ0NvbnRlbnQtRGlzcG9zaXRpb24nXSwgJ2lubGluZScpCisKKyAgICBkZWYgdGVzdF9zZXRfZGlzcG9zaXRpb25fYXR0YWNobWVudChzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIG0uc2V0X2NvbnRlbnQoJ2ZvbycsIGRpc3Bvc2l0aW9uPSdhdHRhY2htZW50JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtWydDb250ZW50LURpc3Bvc2l0aW9uJ10sICdhdHRhY2htZW50JykKKworICAgIGRlZiB0ZXN0X3NldF9kaXNwb3NpdGlvbl9mb28oc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9tYWtlX21lc3NhZ2UoKQorICAgICAgICBtLnNldF9jb250ZW50KCdmb28nLCBkaXNwb3NpdGlvbj0nZm9vJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtWydDb250ZW50LURpc3Bvc2l0aW9uJ10sICdmb28nKQorCisgICAgIyBYWFg6IHdlIHNob3VsZCBoYXZlIGEgJ3N0cmljdCcgcG9saWN5IG1vZGUgKGJleW9uZCByYWlzZV9vbl9kZWZlY3QpIHRoYXQKKyAgICAjIHdvdWxkIGNhdXNlICdmb28nIGFib3ZlIHRvIHJhaXNlLgorCisgICAgZGVmIHRlc3Rfc2V0X2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgbS5zZXRfY29udGVudCgnZm9vJywgZmlsZW5hbWU9J2Jhci50eHQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1bJ0NvbnRlbnQtRGlzcG9zaXRpb24nXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnYXR0YWNobWVudDsgZmlsZW5hbWU9ImJhci50eHQiJykKKworICAgIGRlZiB0ZXN0X3NldF9maWxlbmFtZV9hbmRfZGlzcG9zaXRpb25faW5saW5lKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgbS5zZXRfY29udGVudCgnZm9vJywgZGlzcG9zaXRpb249J2lubGluZScsIGZpbGVuYW1lPSdiYXIudHh0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtWydDb250ZW50LURpc3Bvc2l0aW9uJ10sICdpbmxpbmU7IGZpbGVuYW1lPSJiYXIudHh0IicpCisKKyAgICBkZWYgdGVzdF9zZXRfbm9uX2FzY2lpX2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgbS5zZXRfY29udGVudCgnZm9vJywgZmlsZW5hbWU9J8OhYsOhcsOuLnR4dCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZXMobSksIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InV0Zi04IgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogN2JpdAorICAgICAgICAgICAgQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsKKyAgICAgICAgICAgICBmaWxlbmFtZSo9dXRmLTgnJyVDMyVBMWIlQzMlQTFyJUMzJUFFLnR4dAorICAgICAgICAgICAgTUlNRS1WZXJzaW9uOiAxLjAKKworICAgICAgICAgICAgZm9vCisgICAgICAgICAgICAiIiIpLmVuY29kZSgnYXNjaWknKSkKKworICAgIGNvbnRlbnRfb2JqZWN0X3BhcmFtcyA9IHsKKyAgICAgICAgJ3RleHRfcGxhaW4nOiAoJ2NvbnRlbnQnLCAoKSksCisgICAgICAgICd0ZXh0X2h0bWwnOiAoJ2NvbnRlbnQnLCAoJ2h0bWwnLCkpLAorICAgICAgICAnYXBwbGljYXRpb25fb2N0ZXRfc3RyZWFtJzogKGInY29udGVudCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdhcHBsaWNhdGlvbicsICdvY3RldF9zdHJlYW0nKSksCisgICAgICAgICdpbWFnZV9qcGVnJzogKGInY29udGVudCcsICgnaW1hZ2UnLCAnanBlZycpKSwKKyAgICAgICAgJ21lc3NhZ2VfcmZjODIyJzogKG1lc3NhZ2UoKSwgKCkpLAorICAgICAgICAnbWVzc2FnZV9leHRlcm5hbF9ib2R5JzogKG1lc3NhZ2UoKSwgKCdleHRlcm5hbC1ib2R5JywpKSwKKyAgICAgICAgfQorCisgICAgZGVmIGNvbnRlbnRfb2JqZWN0X2FzX2hlYWRlcl9yZWNlaXZlcihzZWxmLCBvYmosIG1pbWV0eXBlKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIG0uc2V0X2NvbnRlbnQob2JqLCAqbWltZXR5cGUsIGhlYWRlcnM9KAorICAgICAgICAgICAgJ1RvOiBmb29AZXhhbXBsZS5jb20nLAorICAgICAgICAgICAgJ0Zyb206IGJhckBzaW1wbGUubmV0JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobVsndG8nXSwgJ2Zvb0BleGFtcGxlLmNvbScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobVsnZnJvbSddLCAnYmFyQHNpbXBsZS5uZXQnKQorCisgICAgZGVmIGNvbnRlbnRfb2JqZWN0X2FzX2Rpc3Bvc2l0aW9uX2lubGluZV9yZWNlaXZlcihzZWxmLCBvYmosIG1pbWV0eXBlKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIG0uc2V0X2NvbnRlbnQob2JqLCAqbWltZXR5cGUsIGRpc3Bvc2l0aW9uPSdpbmxpbmUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1bJ0NvbnRlbnQtRGlzcG9zaXRpb24nXSwgJ2lubGluZScpCisKKyAgICBkZWYgY29udGVudF9vYmplY3RfYXNfbm9uX2FzY2lpX2ZpbGVuYW1lX3JlY2VpdmVyKHNlbGYsIG9iaiwgbWltZXR5cGUpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgbS5zZXRfY29udGVudChvYmosICptaW1ldHlwZSwgZGlzcG9zaXRpb249J2lubGluZScsIGZpbGVuYW1lPSdiw6FyLnR4dCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobVsnQ29udGVudC1EaXNwb3NpdGlvbiddLCAnaW5saW5lOyBmaWxlbmFtZT0iYsOhci50eHQiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9maWxlbmFtZSgpLCAiYsOhci50eHQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1bJ0NvbnRlbnQtRGlzcG9zaXRpb24nXS5wYXJhbXNbJ2ZpbGVuYW1lJ10sICJiw6FyLnR4dCIpCisKKyAgICBkZWYgY29udGVudF9vYmplY3RfYXNfY2lkX3JlY2VpdmVyKHNlbGYsIG9iaiwgbWltZXR5cGUpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgbS5zZXRfY29udGVudChvYmosICptaW1ldHlwZSwgY2lkPSdzb21lX3JhbmRvbV9zdHVmZicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobVsnQ29udGVudC1JRCddLCAnc29tZV9yYW5kb21fc3R1ZmYnKQorCisgICAgZGVmIGNvbnRlbnRfb2JqZWN0X2FzX3BhcmFtc19yZWNlaXZlcihzZWxmLCBvYmosIG1pbWV0eXBlKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIHBhcmFtcyA9IHsnZm9vJzogJ2LDoXInLCAnYWJjJzogJ3h5eid9CisgICAgICAgIG0uc2V0X2NvbnRlbnQob2JqLCAqbWltZXR5cGUsIHBhcmFtcz1wYXJhbXMpCisgICAgICAgIGlmIGlzaW5zdGFuY2Uob2JqLCBzdHIpOgorICAgICAgICAgICAgcGFyYW1zWydjaGFyc2V0J10gPSAndXRmLTgnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobVsnQ29udGVudC1UeXBlJ10ucGFyYW1zLCBwYXJhbXMpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZW1haWwvdGVzdF9lbWFpbC5weSBiL0xpYi90ZXN0L3Rlc3RfZW1haWwvdGVzdF9lbWFpbC5weQppbmRleCA1MWZlNzU2Li44NGY0ZTM4IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2VtYWlsL3Rlc3RfZW1haWwucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9lbWFpbC90ZXN0X2VtYWlsLnB5CkBAIC0xMCw2ICsxMCwxMSBAQAogCiBmcm9tIGlvIGltcG9ydCBTdHJpbmdJTywgQnl0ZXNJTwogZnJvbSBpdGVydG9vbHMgaW1wb3J0IGNoYWluCitmcm9tIHJhbmRvbSBpbXBvcnQgY2hvaWNlCit0cnk6CisgICAgZnJvbSB0aHJlYWRpbmcgaW1wb3J0IFRocmVhZAorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGZyb20gZHVtbXlfdGhyZWFkaW5nIGltcG9ydCBUaHJlYWQKIAogaW1wb3J0IGVtYWlsCiBpbXBvcnQgZW1haWwucG9saWN5CkBAIC0zMyw3ICszOCw3IEBACiBmcm9tIGVtYWlsIGltcG9ydCBiYXNlNjRtaW1lCiBmcm9tIGVtYWlsIGltcG9ydCBxdW9wcmltaW1lCiAKLWZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCB1bmxpbmsKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCB1bmxpbmssIHN0YXJ0X3RocmVhZHMKIGZyb20gdGVzdC50ZXN0X2VtYWlsIGltcG9ydCBvcGVuZmlsZSwgVGVzdEVtYWlsQmFzZQogCiAjIFRoZXNlIGltcG9ydHMgYXJlIGRvY3VtZW50ZWQgdG8gd29yaywgYnV0IHdlIGFyZSB0ZXN0aW5nIHRoZW0gdXNpbmcgYQpAQCAtMTI0LDYgKzEyOSwxNCBAQAogICAgICAgICBtc2cuc2V0X3BheWxvYWQoW10pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9wYXlsb2FkKCksIFtdKQogCisgICAgZGVmIHRlc3RfYXR0YWNoX3doZW5fcGF5bG9hZF9pc19zdHJpbmcoc2VsZik6CisgICAgICAgIG1zZyA9IE1lc3NhZ2UoKQorICAgICAgICBtc2dbJ0NvbnRlbnQtVHlwZSddID0gJ211bHRpcGFydC9taXhlZCcKKyAgICAgICAgbXNnLnNldF9wYXlsb2FkKCdzdHJpbmcgcGF5bG9hZCcpCisgICAgICAgIHN1Yl9tc2cgPSBNSU1FTWVzc2FnZShNZXNzYWdlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVHlwZUVycm9yLCAiW0FhXXR0YWNoLipub24tbXVsdGlwYXJ0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2cuYXR0YWNoLCBzdWJfbXNnKQorCiAgICAgZGVmIHRlc3RfZ2V0X2NoYXJzZXRzKHNlbGYpOgogICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKIApAQCAtMjgxLDE1ICsyOTQsNDIgQEAKICAgICAgICAgc2VsZi5hc3NlcnRJbignVE8nLCBtc2cpCiAKICAgICBkZWYgdGVzdF9hc19zdHJpbmcoc2VsZik6Ci0gICAgICAgIGVxID0gc2VsZi5uZGlmZkFzc2VydEVxdWFsCiAgICAgICAgIG1zZyA9IHNlbGYuX21zZ29iaignbXNnXzAxLnR4dCcpCiAgICAgICAgIHdpdGggb3BlbmZpbGUoJ21zZ18wMS50eHQnKSBhcyBmcDoKICAgICAgICAgICAgIHRleHQgPSBmcC5yZWFkKCkKLSAgICAgICAgZXEodGV4dCwgc3RyKG1zZykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGV4dCwgc3RyKG1zZykpCiAgICAgICAgIGZ1bGxyZXByID0gbXNnLmFzX3N0cmluZyh1bml4ZnJvbT1UcnVlKQogICAgICAgICBsaW5lcyA9IGZ1bGxyZXByLnNwbGl0KCdcbicpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsaW5lc1swXS5zdGFydHN3aXRoKCdGcm9tICcpKQotICAgICAgICBlcSh0ZXh0LCBOTC5qb2luKGxpbmVzWzE6XSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGV4dCwgTkwuam9pbihsaW5lc1sxOl0pKQorCisgICAgZGVmIHRlc3RfYXNfc3RyaW5nX3BvbGljeShzZWxmKToKKyAgICAgICAgbXNnID0gc2VsZi5fbXNnb2JqKCdtc2dfMDEudHh0JykKKyAgICAgICAgbmV3cG9saWN5ID0gbXNnLnBvbGljeS5jbG9uZShsaW5lc2VwPSdcclxuJykKKyAgICAgICAgZnVsbHJlcHIgPSBtc2cuYXNfc3RyaW5nKHBvbGljeT1uZXdwb2xpY3kpCisgICAgICAgIHMgPSBTdHJpbmdJTygpCisgICAgICAgIGcgPSBHZW5lcmF0b3IocywgcG9saWN5PW5ld3BvbGljeSkKKyAgICAgICAgZy5mbGF0dGVuKG1zZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmdWxscmVwciwgcy5nZXR2YWx1ZSgpKQorCisgICAgZGVmIHRlc3RfYXNfYnl0ZXMoc2VsZik6CisgICAgICAgIG1zZyA9IHNlbGYuX21zZ29iaignbXNnXzAxLnR4dCcpCisgICAgICAgIHdpdGggb3BlbmZpbGUoJ21zZ18wMS50eHQnKSBhcyBmcDoKKyAgICAgICAgICAgIGRhdGEgPSBmcC5yZWFkKCkuZW5jb2RlKCdhc2NpaScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgYnl0ZXMobXNnKSkKKyAgICAgICAgZnVsbHJlcHIgPSBtc2cuYXNfYnl0ZXModW5peGZyb209VHJ1ZSkKKyAgICAgICAgbGluZXMgPSBmdWxscmVwci5zcGxpdChiJ1xuJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxpbmVzWzBdLnN0YXJ0c3dpdGgoYidGcm9tICcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIGInXG4nLmpvaW4obGluZXNbMTpdKSkKKworICAgIGRlZiB0ZXN0X2FzX2J5dGVzX3BvbGljeShzZWxmKToKKyAgICAgICAgbXNnID0gc2VsZi5fbXNnb2JqKCdtc2dfMDEudHh0JykKKyAgICAgICAgbmV3cG9saWN5ID0gbXNnLnBvbGljeS5jbG9uZShsaW5lc2VwPSdcclxuJykKKyAgICAgICAgZnVsbHJlcHIgPSBtc2cuYXNfYnl0ZXMocG9saWN5PW5ld3BvbGljeSkKKyAgICAgICAgcyA9IEJ5dGVzSU8oKQorICAgICAgICBnID0gQnl0ZXNHZW5lcmF0b3Iocyxwb2xpY3k9bmV3cG9saWN5KQorICAgICAgICBnLmZsYXR0ZW4obXNnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZ1bGxyZXByLCBzLmdldHZhbHVlKCkpCiAKICAgICAjIHRlc3RfaGVhZGVycmVnaXN0cnkuVGVzdENvbnRlbnRUeXBlSGVhZGVyLmJhZF9wYXJhbXMKICAgICBkZWYgdGVzdF9iYWRfcGFyYW0oc2VsZik6CkBAIC03NDIsOCArNzgyLDE1IEBACiAgICAgICAgICMgd2hvc2Ugb3V0cHV0IGNoYXJhY3RlciBzZXQgaXMgN2JpdCBnZXRzIGEgdHJhbnNmZXItZW5jb2RpbmcKICAgICAgICAgIyBvZiA3Yml0LgogICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKLSAgICAgICAgbXNnID0gTUlNRVRleHQoJ+aWhycsIF9jaGFyc2V0PSdldWMtanAnKQorICAgICAgICBtc2cgPSBNSU1FVGV4dCgn5paHXG4nLCBfY2hhcnNldD0nZXVjLWpwJykKICAgICAgICAgZXEobXNnWydjb250ZW50LXRyYW5zZmVyLWVuY29kaW5nJ10sICc3Yml0JykKKyAgICAgICAgZXEobXNnLmFzX3N0cmluZygpLCB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgTUlNRS1WZXJzaW9uOiAxLjAKKyAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0iaXNvLTIwMjItanAiCisgICAgICAgICAgICBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA3Yml0CisKKyAgICAgICAgICAgIFx4MWIkQko4XHgxYihCCisgICAgICAgICAgICAiIiIpKQogCiAgICAgZGVmIHRlc3RfcXBfZW5jb2RlX2xhdGluMShzZWxmKToKICAgICAgICAgbXNnID0gTUlNRVRleHQoJ1x4ZTFceGY2XG4nLCAndGV4dCcsICdJU08tODg1OS0xJykKQEAgLTI5OTAsNyArMzAzNyw3IEBACiAgICAgICAgICMgaXNzdWUgMTY5MDYwOC4gIGVtYWlsLnV0aWxzLmZvcm1hdGFkZHIoKSBzaG91bGQgYmUgcmZjMjA0NyBhd2FyZS4KICAgICAgICAgbmFtZSA9ICJIXHUwMGU0bnMgV1x1MDBmY3JzdCIKICAgICAgICAgYWRkciA9ICdwZXJzb25AZG9tLmFpbicKLSAgICAgICAgIyBBIG9iamVjdCB3aXRob3V0IGEgaGVhZGVyX2VuY29kZSBtZXRob2Q6CisgICAgICAgICMgQW4gb2JqZWN0IHdpdGhvdXQgYSBoZWFkZXJfZW5jb2RlIG1ldGhvZDoKICAgICAgICAgYmFkX2NoYXJzZXQgPSBvYmplY3QoKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvciwgdXRpbHMuZm9ybWF0YWRkciwgKG5hbWUsIGFkZHIpLAogICAgICAgICAgICAgYmFkX2NoYXJzZXQpCkBAIC0zMTA5LDYgKzMxNTYsMjggQEAKICAgICAgICAgYWRkcnMgPSB1dGlscy5nZXRhZGRyZXNzZXMoWydVc2VyICgobmVzdGVkIGNvbW1lbnQpKSA8Zm9vQGJhci5jb20+J10pCiAgICAgICAgIGVxKGFkZHJzWzBdWzFdLCAnZm9vQGJhci5jb20nKQogCisgICAgZGVmIHRlc3RfbWFrZV9tc2dpZF9jb2xsaXNpb25zKHNlbGYpOgorICAgICAgICAjIFRlc3QgbWFrZV9tc2dpZCB1bmlxdWVuZXNzLCBldmVuIHdpdGggbXVsdGlwbGUgdGhyZWFkcworICAgICAgICBjbGFzcyBNc2dpZHNUaHJlYWQoVGhyZWFkKToKKyAgICAgICAgICAgIGRlZiBydW4oc2VsZik6CisgICAgICAgICAgICAgICAgIyBnZW5lcmF0ZSBtc2dpZHMgZm9yIDMgc2Vjb25kcworICAgICAgICAgICAgICAgIHNlbGYubXNnaWRzID0gW10KKyAgICAgICAgICAgICAgICBhcHBlbmQgPSBzZWxmLm1zZ2lkcy5hcHBlbmQKKyAgICAgICAgICAgICAgICBtYWtlX21zZ2lkID0gdXRpbHMubWFrZV9tc2dpZAorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgY2xvY2sgPSB0aW1lLm1vbm90b25pYworICAgICAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgY2xvY2sgPSB0aW1lLnRpbWUKKyAgICAgICAgICAgICAgICB0ZmluID0gY2xvY2soKSArIDMuMAorICAgICAgICAgICAgICAgIHdoaWxlIGNsb2NrKCkgPCB0ZmluOgorICAgICAgICAgICAgICAgICAgICBhcHBlbmQobWFrZV9tc2dpZChkb21haW49J3Rlc3Rkb21haW4tc3RyaW5nJykpCisKKyAgICAgICAgdGhyZWFkcyA9IFtNc2dpZHNUaHJlYWQoKSBmb3IgaSBpbiByYW5nZSg1KV0KKyAgICAgICAgd2l0aCBzdGFydF90aHJlYWRzKHRocmVhZHMpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBhbGxfaWRzID0gc3VtKFt0Lm1zZ2lkcyBmb3IgdCBpbiB0aHJlYWRzXSwgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNldChhbGxfaWRzKSksIGxlbihhbGxfaWRzKSkKKwogICAgIGRlZiB0ZXN0X3V0aWxzX3F1b3RlX3VucXVvdGUoc2VsZik6CiAgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAogICAgICAgICBtc2cgPSBNZXNzYWdlKCkKQEAgLTMzMTEsMTYgKzMzODAsNzcgQEAKICAgICAgICAgICAgIGJzZi5wdXNoKGlsKQogICAgICAgICAgICAgbnQgKz0gbgogICAgICAgICAgICAgbjEgPSAwCi0gICAgICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgICAgIG9sID0gYnNmLnJlYWRsaW5lKCkKLSAgICAgICAgICAgICAgICBpZiBvbCA9PSBOZWVkTW9yZURhdGE6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBmb3Igb2wgaW4gaXRlcihic2YucmVhZGxpbmUsIE5lZWRNb3JlRGF0YSk6CiAgICAgICAgICAgICAgICAgb20uYXBwZW5kKG9sKQogICAgICAgICAgICAgICAgIG4xICs9IDEKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobiwgbjEpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG9tKSwgbnQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJycuam9pbihbaWwgZm9yIGlsLCBuIGluIGltdF0pLCAnJy5qb2luKG9tKSkKIAorICAgIGRlZiB0ZXN0X3B1c2hfcmFuZG9tKHNlbGYpOgorICAgICAgICBmcm9tIGVtYWlsLmZlZWRwYXJzZXIgaW1wb3J0IEJ1ZmZlcmVkU3ViRmlsZSwgTmVlZE1vcmVEYXRhCisKKyAgICAgICAgbiA9IDEwMDAwCisgICAgICAgIGNodW5rc2l6ZSA9IDUKKyAgICAgICAgY2hhcnMgPSAnYWJjZCBcdFxyXG4nCisKKyAgICAgICAgcyA9ICcnLmpvaW4oY2hvaWNlKGNoYXJzKSBmb3IgaSBpbiByYW5nZShuKSkgKyAnXG4nCisgICAgICAgIHRhcmdldCA9IHMuc3BsaXRsaW5lcyhUcnVlKQorCisgICAgICAgIGJzZiA9IEJ1ZmZlcmVkU3ViRmlsZSgpCisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKHMpLCBjaHVua3NpemUpOgorICAgICAgICAgICAgY2h1bmsgPSBzW2k6aStjaHVua3NpemVdCisgICAgICAgICAgICBic2YucHVzaChjaHVuaykKKyAgICAgICAgICAgIGxpbmVzLmV4dGVuZChpdGVyKGJzZi5yZWFkbGluZSwgTmVlZE1vcmVEYXRhKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lcywgdGFyZ2V0KQorCisKK2NsYXNzIFRlc3RGZWVkUGFyc2VycyhUZXN0RW1haWxCYXNlKToKKworICAgIGRlZiBwYXJzZShzZWxmLCBjaHVua3MpOgorICAgICAgICBmcm9tIGVtYWlsLmZlZWRwYXJzZXIgaW1wb3J0IEZlZWRQYXJzZXIKKyAgICAgICAgZmVlZHBhcnNlciA9IEZlZWRQYXJzZXIoKQorICAgICAgICBmb3IgY2h1bmsgaW4gY2h1bmtzOgorICAgICAgICAgICAgZmVlZHBhcnNlci5mZWVkKGNodW5rKQorICAgICAgICByZXR1cm4gZmVlZHBhcnNlci5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9lbXB0eV9oZWFkZXJfbmFtZV9oYW5kbGVkKHNlbGYpOgorICAgICAgICAjIElzc3VlIDE5OTk2CisgICAgICAgIG1zZyA9IHNlbGYucGFyc2UoIkZpcnN0OiB2YWxcbjogYmFkXG5TZWNvbmQ6IHZhbCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnWydGaXJzdCddLCAndmFsJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2dbJ1NlY29uZCddLCAndmFsJykKKworICAgIGRlZiB0ZXN0X25ld2xpbmVzKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5wYXJzZShbJ2E6XG5iOlxyYzpcclxuZDpcbiddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0ua2V5cygpLCBbJ2EnLCAnYicsICdjJywgJ2QnXSkKKyAgICAgICAgbSA9IHNlbGYucGFyc2UoWydhOlxuYjpccmM6XHJcbmQ6J10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5rZXlzKCksIFsnYScsICdiJywgJ2MnLCAnZCddKQorICAgICAgICBtID0gc2VsZi5wYXJzZShbJ2E6XHJiJywgJ2M6XG4nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmtleXMoKSwgWydhJywgJ2JjJ10pCisgICAgICAgIG0gPSBzZWxmLnBhcnNlKFsnYTpccicsICdiOlxuJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5rZXlzKCksIFsnYScsICdiJ10pCisgICAgICAgIG0gPSBzZWxmLnBhcnNlKFsnYTpccicsICdcbmI6XG4nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmtleXMoKSwgWydhJywgJ2InXSkKKyAgICAgICAgbSA9IHNlbGYucGFyc2UoWydhOlx4ODViOlx1MjAyOGM6XG4nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLml0ZW1zKCksIFsoJ2EnLCAnXHg4NScpLCAoJ2InLCAnXHUyMDI4JyksICgnYycsICcnKV0pCisgICAgICAgIG0gPSBzZWxmLnBhcnNlKFsnYTpccicsICdiOlx4ODUnLCAnYzpcbiddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uaXRlbXMoKSwgWygnYScsICcnKSwgKCdiJywgJ1x4ODUnKSwgKCdjJywgJycpXSkKKworICAgIGRlZiB0ZXN0X2xvbmdfbGluZXMoc2VsZik6CisgICAgICAgICMgRXhwZWN0ZWQgcGVhayBtZW1vcnkgdXNlIG9uIDMyLWJpdCBwbGF0Zm9ybTogNipOKk0gYnl0ZXMuCisgICAgICAgIE0sIE4gPSAxMDAwLCAyMDAwMAorICAgICAgICBtID0gc2VsZi5wYXJzZShbJ2E6YlxuXG4nXSArIFsneCcqTV0gKiBOKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uaXRlbXMoKSwgWygnYScsICdiJyldKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X3BheWxvYWQoKSwgJ3gnKk0qTikKKyAgICAgICAgbSA9IHNlbGYucGFyc2UoWydhOmJcclxyJ10gKyBbJ3gnKk1dICogTikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLml0ZW1zKCksIFsoJ2EnLCAnYicpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9wYXlsb2FkKCksICd4JypNKk4pCisgICAgICAgIG0gPSBzZWxmLnBhcnNlKFsnYTpiXHJcciddICsgWyd4JypNKydceDg1J10gKiBOKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uaXRlbXMoKSwgWygnYScsICdiJyldKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X3BheWxvYWQoKSwgKCd4JypNKydceDg1JykqTikKKyAgICAgICAgbSA9IHNlbGYucGFyc2UoWydhOlxyJywgJ2I6ICddICsgWyd4JypNXSAqIE4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5pdGVtcygpLCBbKCdhJywgJycpLCAoJ2InLCAneCcqTSpOKV0pCiAKIAogY2xhc3MgVGVzdFBhcnNlcnMoVGVzdEVtYWlsQmFzZSk6CkBAIC0zMzQ4LDYgKzM0NzgsMzEgQEAKICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG1zZy5nZXRfcGF5bG9hZCgpLCBzdHIpCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShtc2cuZ2V0X3BheWxvYWQoZGVjb2RlPVRydWUpLCBieXRlcykKIAorICAgIGRlZiB0ZXN0X2J5dGVzX3BhcnNlcl9kb2VzX25vdF9jbG9zZV9maWxlKHNlbGYpOgorICAgICAgICB3aXRoIG9wZW5maWxlKCdtc2dfMDIudHh0JywgJ3JiJykgYXMgZnA6CisgICAgICAgICAgICBlbWFpbC5wYXJzZXIuQnl0ZXNQYXJzZXIoKS5wYXJzZShmcCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZnAuY2xvc2VkKQorCisgICAgZGVmIHRlc3RfYnl0ZXNfcGFyc2VyX29uX2V4Y2VwdGlvbl9kb2VzX25vdF9jbG9zZV9maWxlKHNlbGYpOgorICAgICAgICB3aXRoIG9wZW5maWxlKCdtc2dfMTUudHh0JywgJ3JiJykgYXMgZnA6CisgICAgICAgICAgICBieXRlc1BhcnNlciA9IGVtYWlsLnBhcnNlci5CeXRlc1BhcnNlcgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZW1haWwuZXJyb3JzLlN0YXJ0Qm91bmRhcnlOb3RGb3VuZERlZmVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzUGFyc2VyKHBvbGljeT1lbWFpbC5wb2xpY3kuc3RyaWN0KS5wYXJzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmcC5jbG9zZWQpCisKKyAgICBkZWYgdGVzdF9wYXJzZXJfZG9lc19ub3RfY2xvc2VfZmlsZShzZWxmKToKKyAgICAgICAgd2l0aCBvcGVuZmlsZSgnbXNnXzAyLnR4dCcsICdyJykgYXMgZnA6CisgICAgICAgICAgICBlbWFpbC5wYXJzZXIuUGFyc2VyKCkucGFyc2UoZnApCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZwLmNsb3NlZCkKKworICAgIGRlZiB0ZXN0X3BhcnNlcl9vbl9leGNlcHRpb25fZG9lc19ub3RfY2xvc2VfZmlsZShzZWxmKToKKyAgICAgICAgd2l0aCBvcGVuZmlsZSgnbXNnXzE1LnR4dCcsICdyJykgYXMgZnA6CisgICAgICAgICAgICBwYXJzZXIgPSBlbWFpbC5wYXJzZXIuUGFyc2VyCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhlbWFpbC5lcnJvcnMuU3RhcnRCb3VuZGFyeU5vdEZvdW5kRGVmZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VyKHBvbGljeT1lbWFpbC5wb2xpY3kuc3RyaWN0KS5wYXJzZSwgZnApCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZwLmNsb3NlZCkKKwogICAgIGRlZiB0ZXN0X3doaXRlc3BhY2VfY29udGludWF0aW9uKHNlbGYpOgogICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKICAgICAgICAgIyBUaGlzIG1lc3NhZ2UgY29udGFpbnMgYSBsaW5lIGFmdGVyIHRoZSBTdWJqZWN0OiBoZWFkZXIgdGhhdCBoYXMgb25seQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9lbWFpbC90ZXN0X2hlYWRlcnJlZ2lzdHJ5LnB5IGIvTGliL3Rlc3QvdGVzdF9lbWFpbC90ZXN0X2hlYWRlcnJlZ2lzdHJ5LnB5CmluZGV4IGFkYWYzZTguLjU1ZWNkZWEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZW1haWwvdGVzdF9oZWFkZXJyZWdpc3RyeS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2VtYWlsL3Rlc3RfaGVhZGVycmVnaXN0cnkucHkKQEAgLTEsNiArMSw3IEBACiBpbXBvcnQgZGF0ZXRpbWUKIGltcG9ydCB0ZXh0d3JhcAogaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgdHlwZXMKIGZyb20gZW1haWwgaW1wb3J0IGVycm9ycwogZnJvbSBlbWFpbCBpbXBvcnQgcG9saWN5CiBmcm9tIGVtYWlsLm1lc3NhZ2UgaW1wb3J0IE1lc3NhZ2UKQEAgLTIzNSw2ICsyMzYsOCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGgubWFpbnR5cGUsIG1haW50eXBlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguc3VidHlwZSwgc3VidHlwZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLnBhcmFtcywgcGFybWRpY3QpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGgucGFyYW1zWydhYmMnXSA9ICd4eXonICAgIyBwYXJhbXMgaXMgcmVhZC1vbmx5LgogICAgICAgICBzZWxmLmFzc2VydERlZmVjdHNFcXVhbChoLmRlZmVjdHMsIGRlZmVjdHMpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaCwgZGVjb2RlZCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLmZvbGQocG9saWN5PXBvbGljeS5kZWZhdWx0KSwgZm9sZGVkKQpAQCAtNjYxLDcgKzY2NCw3IEBACiAgICAgICAgICAgICAndGV4dC9wbGFpbjsgbmFtZT0iYXNjaWlfaXNfdGhlX2RlZmF1bHQiJyksCiAKICAgICAgICAgJ3JmYzIyMzFfYmFkX2NoYXJhY3Rlcl9pbl9jaGFyc2V0X3BhcmFtZXRlcl92YWx1ZSc6ICgKLSAgICAgICAgICAgICJ0ZXh0L3BsYWluOyBjaGFyc2V0Kj1hc2NpaScndXRmLTglRTIlODAlOUQiLAorICAgICAgICAgICAgInRleHQvcGxhaW47IGNoYXJzZXQqPWFzY2lpJyd1dGYtOCVGMSVGMiVGMyIsCiAgICAgICAgICAgICAndGV4dC9wbGFpbicsCiAgICAgICAgICAgICAndGV4dCcsCiAgICAgICAgICAgICAncGxhaW4nLApAQCAtNjY5LDYgKzY3MiwxOCBAQAogICAgICAgICAgICAgW2Vycm9ycy5VbmRlY29kYWJsZUJ5dGVzRGVmZWN0XSwKICAgICAgICAgICAgICd0ZXh0L3BsYWluOyBjaGFyc2V0PSJ1dGYtOFx1RkZGRFx1RkZGRFx1RkZGRCInKSwKIAorICAgICAgICAncmZjMjIzMV91dGZfOF9pbl9zdXBwb3NlZGx5X2FzY2lpX2NoYXJzZXRfcGFyYW1ldGVyX3ZhbHVlJzogKAorICAgICAgICAgICAgInRleHQvcGxhaW47IGNoYXJzZXQqPWFzY2lpJyd1dGYtOCVFMiU4MCU5RCIsCisgICAgICAgICAgICAndGV4dC9wbGFpbicsCisgICAgICAgICAgICAndGV4dCcsCisgICAgICAgICAgICAncGxhaW4nLAorICAgICAgICAgICAgeydjaGFyc2V0JzogJ3V0Zi044oCdJ30sCisgICAgICAgICAgICBbZXJyb3JzLlVuZGVjb2RhYmxlQnl0ZXNEZWZlY3RdLAorICAgICAgICAgICAgJ3RleHQvcGxhaW47IGNoYXJzZXQ9InV0Zi044oCdIicsCisgICAgICAgICAgICApLAorICAgICAgICAgICAgIyBYWFg6IGlmIHRoZSBhYm92ZSB3ZXJlICpyZSpmb2xkZWQsIGl0IHdvdWxkIGdldCB0YWdnZWQgYXMgdXRmLTgKKyAgICAgICAgICAgICMgaW5zdGVhZCBvZiBhc2NpaSBpbiB0aGUgcGFyYW0sIHNpbmNlIGl0IG5vdyBjb250YWlucyBub24tQVNDSUkuCisKICAgICAgICAgJ3JmYzIyMzFfZW5jb2RlZF90aGVuX3VuZW5jb2RlZF9zZWdtZW50cyc6ICgKICAgICAgICAgICAgICgnYXBwbGljYXRpb24veC1mb287JwogICAgICAgICAgICAgICAgICdcdG5hbWUqMCo9InVzLWFzY2lpXCdlbi11c1wnTXkiOycKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZW1haWwvdGVzdF9tZXNzYWdlLnB5IGIvTGliL3Rlc3QvdGVzdF9lbWFpbC90ZXN0X21lc3NhZ2UucHkKaW5kZXggOGNjM2Y4MC4uNTBlMWE2MyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9lbWFpbC90ZXN0X21lc3NhZ2UucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9lbWFpbC90ZXN0X21lc3NhZ2UucHkKQEAgLTEsNiArMSwxMyBAQAogaW1wb3J0IHVuaXR0ZXN0Ci1mcm9tIGVtYWlsIGltcG9ydCBwb2xpY3kKLWZyb20gdGVzdC50ZXN0X2VtYWlsIGltcG9ydCBUZXN0RW1haWxCYXNlCitpbXBvcnQgdGV4dHdyYXAKK2Zyb20gZW1haWwgaW1wb3J0IHBvbGljeSwgbWVzc2FnZV9mcm9tX3N0cmluZworZnJvbSBlbWFpbC5tZXNzYWdlIGltcG9ydCBFbWFpbE1lc3NhZ2UsIE1JTUVQYXJ0Citmcm9tIHRlc3QudGVzdF9lbWFpbCBpbXBvcnQgVGVzdEVtYWlsQmFzZSwgcGFyYW1ldGVyaXplCisKKworIyBIZWxwZXIuCitkZWYgZmlyc3QoaXRlcmFibGUpOgorICAgIHJldHVybiBuZXh0KGZpbHRlcihsYW1iZGEgeDogeCBpcyBub3QgTm9uZSwgaXRlcmFibGUpLCBOb25lKQogCiAKIGNsYXNzIFRlc3QoVGVzdEVtYWlsQmFzZSk6CkBAIC0xMyw2ICsyMCw3NjQgQEAKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKICAgICAgICAgICAgIG1bJ1RvJ10gPSAneHl6QGFiYycKIAorICAgIGRlZiB0ZXN0X3JmYzIwNDNfYXV0b19kZWNvZGVkX2FuZF9lbWFpbG1lc3NhZ2VfdXNlZChzZWxmKToKKyAgICAgICAgbSA9IG1lc3NhZ2VfZnJvbV9zdHJpbmcodGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgIFN1YmplY3Q6IEF5b25zIGFzcGVyZ2VzIHBvdXIgbGUgPT91dGYtOD9xP2Q9QzM9QTlqZXVuZXI/PQorICAgICAgICAgICAgRnJvbTogPT91dGYtOD9xP1BlcD1DMz1BOT89IExlIFBldyA8cGVwZUBleGFtcGxlLmNvbT4KKyAgICAgICAgICAgIFRvOiAiUGVuZWxvcGUgUHVzc3ljYXQiIDwicGVuZWxvcGVAZXhhbXBsZS5jb20iPgorICAgICAgICAgICAgTUlNRS1WZXJzaW9uOiAxLjAKKyAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0idXRmLTgiCisKKyAgICAgICAgICAgIHNhbXBsZSB0ZXh0CisgICAgICAgICAgICAiIiIpLCBwb2xpY3k9cG9saWN5LmRlZmF1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobVsnc3ViamVjdCddLCAiQXlvbnMgYXNwZXJnZXMgcG91ciBsZSBkw6lqZXVuZXIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1bJ2Zyb20nXSwgIlBlcMOpIExlIFBldyA8cGVwZUBleGFtcGxlLmNvbT4iKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UobSwgRW1haWxNZXNzYWdlKQorCisKK0BwYXJhbWV0ZXJpemUKK2NsYXNzIFRlc3RFbWFpbE1lc3NhZ2VCYXNlOgorCisgICAgcG9saWN5ID0gcG9saWN5LmRlZmF1bHQKKworICAgICMgVGhlIGZpcnN0IGFyZ3VtZW50IGlzIGEgdHJpcGxlIChyZWxhdGVkLCBodG1sLCBwbGFpbikgb2YgaW5kaWNlcyBpbnRvIHRoZQorICAgICMgbGlzdCByZXR1cm5lZCBieSAnd2FsaycgY2FsbGVkIG9uIGEgTWVzc2FnZSBjb25zdHJ1Y3RlZCBmcm9tIHRoZSB0aGlyZC4KKyAgICAjIFRoZSBpbmRpY2VzIGluZGljYXRlIHdoaWNoIHBhcnQgc2hvdWxkIG1hdGNoIHRoZSBjb3JyZXNwb25kaW5nIHBhcnQtdHlwZQorICAgICMgd2hlbiBwYXNzZWQgdG8gZ2V0X2JvZHkgKGllOiB0aGUgImZpcnN0IiBwYXJ0IG9mIHRoYXQgdHlwZSBpbiB0aGUKKyAgICAjIG1lc3NhZ2UpLiAgVGhlIHNlY29uZCBhcmd1bWVudCBpcyBhIGxpc3Qgb2YgaW5kaWNlcyBpbnRvIHRoZSAnd2FsaycgbGlzdAorICAgICMgb2YgdGhlIGF0dGFjaG1lbnRzIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkIGJ5IGEgY2FsbCB0bworICAgICMgJ2l0ZXJfYXR0YWNobWVudHMnLiAgVGhlIHRoaXJkIGFyZ3VtZW50IGlzIGEgbGlzdCBvZiBpbmRpY2VzIGludG8gJ3dhbGsnCisgICAgIyB0aGF0IHNob3VsZCBiZSByZXR1cm5lZCBieSBhIGNhbGwgdG8gJ2l0ZXJfcGFydHMnLiAgTm90ZSB0aGF0IHRoZSBmaXJzdAorICAgICMgaXRlbSByZXR1cm5lZCBieSAnd2FsaycgaXMgdGhlIE1lc3NhZ2UgaXRzZWxmLgorCisgICAgbWVzc2FnZV9wYXJhbXMgPSB7CisKKyAgICAgICAgJ2VtcHR5X21lc3NhZ2UnOiAoCisgICAgICAgICAgICAoTm9uZSwgTm9uZSwgMCksCisgICAgICAgICAgICAoKSwKKyAgICAgICAgICAgICgpLAorICAgICAgICAgICAgIiIpLAorCisgICAgICAgICdub25fbWltZV9wbGFpbic6ICgKKyAgICAgICAgICAgIChOb25lLCBOb25lLCAwKSwKKyAgICAgICAgICAgICgpLAorICAgICAgICAgICAgKCksCisgICAgICAgICAgICB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgICAgIFRvOiBmb29AZXhhbXBsZS5jb20KKworICAgICAgICAgICAgICAgIHNpbXBsZSB0ZXh0IGJvZHkKKyAgICAgICAgICAgICAgICAiIiIpKSwKKworICAgICAgICAnbWltZV9ub25fdGV4dCc6ICgKKyAgICAgICAgICAgIChOb25lLCBOb25lLCBOb25lKSwKKyAgICAgICAgICAgICgpLAorICAgICAgICAgICAgKCksCisgICAgICAgICAgICB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgICAgIFRvOiBmb29AZXhhbXBsZS5jb20KKyAgICAgICAgICAgICAgICBNSU1FLVZlcnNpb246IDEuMAorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogaW1hZ2UvanBnCisKKyAgICAgICAgICAgICAgICBib2d1cyBib2R5LgorICAgICAgICAgICAgICAgICIiIikpLAorCisgICAgICAgICdwbGFpbl9odG1sX2FsdGVybmF0aXZlJzogKAorICAgICAgICAgICAgKE5vbmUsIDIsIDEpLAorICAgICAgICAgICAgKCksCisgICAgICAgICAgICAoMSwgMiksCisgICAgICAgICAgICB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgICAgIFRvOiBmb29AZXhhbXBsZS5jb20KKyAgICAgICAgICAgICAgICBNSU1FLVZlcnNpb246IDEuMAorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L2FsdGVybmF0aXZlOyBib3VuZGFyeT0iPT09IgorCisgICAgICAgICAgICAgICAgcHJlYW1ibGUKKworICAgICAgICAgICAgICAgIC0tPT09CisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluCisKKyAgICAgICAgICAgICAgICBzaW1wbGUgYm9keQorCisgICAgICAgICAgICAgICAgLS09PT0KKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvaHRtbAorCisgICAgICAgICAgICAgICAgPHA+c2ltcGxlIGJvZHk8L3A+CisgICAgICAgICAgICAgICAgLS09PT0tLQorICAgICAgICAgICAgICAgICIiIikpLAorCisgICAgICAgICdwbGFpbl9odG1sX21peGVkJzogKAorICAgICAgICAgICAgKE5vbmUsIDIsIDEpLAorICAgICAgICAgICAgKCksCisgICAgICAgICAgICAoMSwgMiksCisgICAgICAgICAgICB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgICAgIFRvOiBmb29AZXhhbXBsZS5jb20KKyAgICAgICAgICAgICAgICBNSU1FLVZlcnNpb246IDEuMAorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT0iPT09IgorCisgICAgICAgICAgICAgICAgcHJlYW1ibGUKKworICAgICAgICAgICAgICAgIC0tPT09CisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluCisKKyAgICAgICAgICAgICAgICBzaW1wbGUgYm9keQorCisgICAgICAgICAgICAgICAgLS09PT0KKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvaHRtbAorCisgICAgICAgICAgICAgICAgPHA+c2ltcGxlIGJvZHk8L3A+CisKKyAgICAgICAgICAgICAgICAtLT09PS0tCisgICAgICAgICAgICAgICAgIiIiKSksCisKKyAgICAgICAgJ3BsYWluX2h0bWxfYXR0YWNobWVudF9taXhlZCc6ICgKKyAgICAgICAgICAgIChOb25lLCBOb25lLCAxKSwKKyAgICAgICAgICAgICgyLCksCisgICAgICAgICAgICAoMSwgMiksCisgICAgICAgICAgICB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgICAgIFRvOiBmb29AZXhhbXBsZS5jb20KKyAgICAgICAgICAgICAgICBNSU1FLVZlcnNpb246IDEuMAorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT0iPT09IgorCisgICAgICAgICAgICAgICAgLS09PT0KKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW4KKworICAgICAgICAgICAgICAgIHNpbXBsZSBib2R5CisKKyAgICAgICAgICAgICAgICAtLT09PQorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9odG1sCisgICAgICAgICAgICAgICAgQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudAorCisgICAgICAgICAgICAgICAgPHA+c2ltcGxlIGJvZHk8L3A+CisKKyAgICAgICAgICAgICAgICAtLT09PS0tCisgICAgICAgICAgICAgICAgIiIiKSksCisKKyAgICAgICAgJ2h0bWxfdGV4dF9hdHRhY2htZW50X21peGVkJzogKAorICAgICAgICAgICAgKE5vbmUsIDIsIE5vbmUpLAorICAgICAgICAgICAgKDEsKSwKKyAgICAgICAgICAgICgxLCAyKSwKKyAgICAgICAgICAgIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICAgICAgVG86IGZvb0BleGFtcGxlLmNvbQorICAgICAgICAgICAgICAgIE1JTUUtVmVyc2lvbjogMS4wCisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PSI9PT0iCisKKyAgICAgICAgICAgICAgICAtLT09PQorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9wbGFpbgorICAgICAgICAgICAgICAgIENvbnRlbnQtRGlzcG9zaXRpb246IEF0VGFDaG1lbnQKKworICAgICAgICAgICAgICAgIHNpbXBsZSBib2R5CisKKyAgICAgICAgICAgICAgICAtLT09PQorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9odG1sCisKKyAgICAgICAgICAgICAgICA8cD5zaW1wbGUgYm9keTwvcD4KKworICAgICAgICAgICAgICAgIC0tPT09LS0KKyAgICAgICAgICAgICAgICAiIiIpKSwKKworICAgICAgICAnaHRtbF90ZXh0X2F0dGFjaG1lbnRfaW5saW5lX21peGVkJzogKAorICAgICAgICAgICAgKE5vbmUsIDIsIDEpLAorICAgICAgICAgICAgKCksCisgICAgICAgICAgICAoMSwgMiksCisgICAgICAgICAgICB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgICAgIFRvOiBmb29AZXhhbXBsZS5jb20KKyAgICAgICAgICAgICAgICBNSU1FLVZlcnNpb246IDEuMAorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT0iPT09IgorCisgICAgICAgICAgICAgICAgLS09PT0KKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW4KKyAgICAgICAgICAgICAgICBDb250ZW50LURpc3Bvc2l0aW9uOiBJbkxpbmUKKworICAgICAgICAgICAgICAgIHNpbXBsZSBib2R5CisKKyAgICAgICAgICAgICAgICAtLT09PQorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9odG1sCisgICAgICAgICAgICAgICAgQ29udGVudC1EaXNwb3NpdGlvbjogaW5saW5lCisKKyAgICAgICAgICAgICAgICA8cD5zaW1wbGUgYm9keTwvcD4KKworICAgICAgICAgICAgICAgIC0tPT09LS0KKyAgICAgICAgICAgICAgICAiIiIpKSwKKworICAgICAgICAjIFJGQyAyMzg3CisgICAgICAgICdyZWxhdGVkJzogKAorICAgICAgICAgICAgKDAsIDEsIE5vbmUpLAorICAgICAgICAgICAgKDIsKSwKKyAgICAgICAgICAgICgxLCAyKSwKKyAgICAgICAgICAgIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICAgICAgVG86IGZvb0BleGFtcGxlLmNvbQorICAgICAgICAgICAgICAgIE1JTUUtVmVyc2lvbjogMS4wCisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvcmVsYXRlZDsgYm91bmRhcnk9Ij09PSI7IHR5cGU9dGV4dC9odG1sCisKKyAgICAgICAgICAgICAgICAtLT09PQorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9odG1sCisKKyAgICAgICAgICAgICAgICA8cD5zaW1wbGUgYm9keTwvcD4KKworICAgICAgICAgICAgICAgIC0tPT09CisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiBpbWFnZS9qcGcKKyAgICAgICAgICAgICAgICBDb250ZW50LUlEOiA8aW1hZ2UxPgorCisgICAgICAgICAgICAgICAgYm9ndXMgZGF0YQorCisgICAgICAgICAgICAgICAgLS09PT0tLQorICAgICAgICAgICAgICAgICIiIikpLAorCisgICAgICAgICMgVGhpcyBtZXNzYWdlIHN0cnVjdHVyZSB3aWxsIHByb2JhYmx5IG5ldmVyIGJlIHNlZW4gaW4gdGhlIHdpbGQsIGJ1dAorICAgICAgICAjIGl0IHByb3ZlcyB3ZSBkaXN0aW5ndWlzaCBiZXR3ZWVuIHRleHQgcGFydHMgYmFzZWQgb24gJ3N0YXJ0Jy4gIFRoZQorICAgICAgICAjIGNvbnRlbnQgd291bGQgbm90LCBvZiBjb3Vyc2UsIGFjdHVhbGx5IHdvcmsgOikKKyAgICAgICAgJ3JlbGF0ZWRfd2l0aF9zdGFydCc6ICgKKyAgICAgICAgICAgICgwLCAyLCBOb25lKSwKKyAgICAgICAgICAgICgxLCksCisgICAgICAgICAgICAoMSwgMiksCisgICAgICAgICAgICB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgICAgIFRvOiBmb29AZXhhbXBsZS5jb20KKyAgICAgICAgICAgICAgICBNSU1FLVZlcnNpb246IDEuMAorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L3JlbGF0ZWQ7IGJvdW5kYXJ5PSI9PT0iOyB0eXBlPXRleHQvaHRtbDsKKyAgICAgICAgICAgICAgICAgc3RhcnQ9Ijxib2R5PiIKKworICAgICAgICAgICAgICAgIC0tPT09CisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L2h0bWwKKyAgICAgICAgICAgICAgICBDb250ZW50LUlEOiA8aW5jbHVkZT4KKworICAgICAgICAgICAgICAgIHVzZWxlc3MgdGV4dAorCisgICAgICAgICAgICAgICAgLS09PT0KKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvaHRtbAorICAgICAgICAgICAgICAgIENvbnRlbnQtSUQ6IDxib2R5PgorCisgICAgICAgICAgICAgICAgPHA+c2ltcGxlIGJvZHk8L3A+CisgICAgICAgICAgICAgICAgPCEtLSNpbmNsdWRlIGZpbGU9IjxpbmNsdWRlPiItLT4KKworICAgICAgICAgICAgICAgIC0tPT09LS0KKyAgICAgICAgICAgICAgICAiIiIpKSwKKworCisgICAgICAgICdtaXhlZF9hbHRlcm5hdGl2ZV9wbGFpbl9yZWxhdGVkJzogKAorICAgICAgICAgICAgKDMsIDQsIDIpLAorICAgICAgICAgICAgKDYsIDcpLAorICAgICAgICAgICAgKDEsIDYsIDcpLAorICAgICAgICAgICAgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgICAgICBUbzogZm9vQGV4YW1wbGUuY29tCisgICAgICAgICAgICAgICAgTUlNRS1WZXJzaW9uOiAxLjAKKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9Ij09PSIKKworICAgICAgICAgICAgICAgIC0tPT09CisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvYWx0ZXJuYXRpdmU7IGJvdW5kYXJ5PSIrKysiCisKKyAgICAgICAgICAgICAgICAtLSsrKworICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9wbGFpbgorCisgICAgICAgICAgICAgICAgc2ltcGxlIGJvZHkKKworICAgICAgICAgICAgICAgIC0tKysrCisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvcmVsYXRlZDsgYm91bmRhcnk9Il9fXyIKKworICAgICAgICAgICAgICAgIC0tX19fCisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L2h0bWwKKworICAgICAgICAgICAgICAgIDxwPnNpbXBsZSBib2R5PC9wPgorCisgICAgICAgICAgICAgICAgLS1fX18KKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IGltYWdlL2pwZworICAgICAgICAgICAgICAgIENvbnRlbnQtSUQ6IDxpbWFnZTFAY2lkPgorCisgICAgICAgICAgICAgICAgYm9ndXMganBnIGJvZHkKKworICAgICAgICAgICAgICAgIC0tX19fLS0KKworICAgICAgICAgICAgICAgIC0tKysrLS0KKworICAgICAgICAgICAgICAgIC0tPT09CisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiBpbWFnZS9qcGcKKyAgICAgICAgICAgICAgICBDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50CisKKyAgICAgICAgICAgICAgICBib2d1cyBqcGcgYm9keQorCisgICAgICAgICAgICAgICAgLS09PT0KKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IGltYWdlL2pwZworICAgICAgICAgICAgICAgIENvbnRlbnQtRGlzcG9zaXRpb246IEF0dGFjSG1lblQKKworICAgICAgICAgICAgICAgIGFub3RoZXIgYm9ndXMganBnIGJvZHkKKworICAgICAgICAgICAgICAgIC0tPT09LS0KKyAgICAgICAgICAgICAgICAiIiIpKSwKKworICAgICAgICAjIFRoaXMgc3RydWN0dXJlIHN1Z2dlc3RlZCBieSBTdGVwaGVuIEouIFR1cm5idWxsLi4ubWF5IG5vdCBleGlzdC9iZQorICAgICAgICAjIHN1cHBvcnRlZCBpbiB0aGUgd2lsZCwgYnV0IHdlIHdhbnQgdG8gc3VwcG9ydCBpdC4KKyAgICAgICAgJ21peGVkX3JlbGF0ZWRfYWx0ZXJuYXRpdmVfcGxhaW5faHRtbCc6ICgKKyAgICAgICAgICAgICgxLCA0LCAzKSwKKyAgICAgICAgICAgICg2LCA3KSwKKyAgICAgICAgICAgICgxLCA2LCA3KSwKKyAgICAgICAgICAgIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICAgICAgVG86IGZvb0BleGFtcGxlLmNvbQorICAgICAgICAgICAgICAgIE1JTUUtVmVyc2lvbjogMS4wCisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PSI9PT0iCisKKyAgICAgICAgICAgICAgICAtLT09PQorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L3JlbGF0ZWQ7IGJvdW5kYXJ5PSIrKysiCisKKyAgICAgICAgICAgICAgICAtLSsrKworICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L2FsdGVybmF0aXZlOyBib3VuZGFyeT0iX19fIgorCisgICAgICAgICAgICAgICAgLS1fX18KKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW4KKworICAgICAgICAgICAgICAgIHNpbXBsZSBib2R5CisKKyAgICAgICAgICAgICAgICAtLV9fXworICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9odG1sCisKKyAgICAgICAgICAgICAgICA8cD5zaW1wbGUgYm9keTwvcD4KKworICAgICAgICAgICAgICAgIC0tX19fLS0KKworICAgICAgICAgICAgICAgIC0tKysrCisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiBpbWFnZS9qcGcKKyAgICAgICAgICAgICAgICBDb250ZW50LUlEOiA8aW1hZ2UxQGNpZD4KKworICAgICAgICAgICAgICAgIGJvZ3VzIGpwZyBib2R5CisKKyAgICAgICAgICAgICAgICAtLSsrKy0tCisKKyAgICAgICAgICAgICAgICAtLT09PQorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogaW1hZ2UvanBnCisgICAgICAgICAgICAgICAgQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudAorCisgICAgICAgICAgICAgICAgYm9ndXMganBnIGJvZHkKKworICAgICAgICAgICAgICAgIC0tPT09CisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiBpbWFnZS9qcGcKKyAgICAgICAgICAgICAgICBDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50CisKKyAgICAgICAgICAgICAgICBhbm90aGVyIGJvZ3VzIGpwZyBib2R5CisKKyAgICAgICAgICAgICAgICAtLT09PS0tCisgICAgICAgICAgICAgICAgIiIiKSksCisKKyAgICAgICAgIyBTYW1lIHRoaW5nLCBidXQgcHJvdmluZyB3ZSBvbmx5IGxvb2sgYXQgdGhlIHJvb3QgcGFydCwgd2hpY2ggaXMgdGhlCisgICAgICAgICMgZmlyc3Qgb25lIGlmIHRoZXJlIGlzbid0IGFueSBzdGFydCBwYXJhbWV0ZXIuICBUaGF0IGlzLCB0aGlzIGlzIGEKKyAgICAgICAgIyBicm9rZW4gcmVsYXRlZC4KKyAgICAgICAgJ21peGVkX3JlbGF0ZWRfYWx0ZXJuYXRpdmVfcGxhaW5faHRtbF93cm9uZ19vcmRlcic6ICgKKyAgICAgICAgICAgICgxLCBOb25lLCBOb25lKSwKKyAgICAgICAgICAgICg2LCA3KSwKKyAgICAgICAgICAgICgxLCA2LCA3KSwKKyAgICAgICAgICAgIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICAgICAgVG86IGZvb0BleGFtcGxlLmNvbQorICAgICAgICAgICAgICAgIE1JTUUtVmVyc2lvbjogMS4wCisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PSI9PT0iCisKKyAgICAgICAgICAgICAgICAtLT09PQorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L3JlbGF0ZWQ7IGJvdW5kYXJ5PSIrKysiCisKKyAgICAgICAgICAgICAgICAtLSsrKworICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogaW1hZ2UvanBnCisgICAgICAgICAgICAgICAgQ29udGVudC1JRDogPGltYWdlMUBjaWQ+CisKKyAgICAgICAgICAgICAgICBib2d1cyBqcGcgYm9keQorCisgICAgICAgICAgICAgICAgLS0rKysKKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IG11bHRpcGFydC9hbHRlcm5hdGl2ZTsgYm91bmRhcnk9Il9fXyIKKworICAgICAgICAgICAgICAgIC0tX19fCisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluCisKKyAgICAgICAgICAgICAgICBzaW1wbGUgYm9keQorCisgICAgICAgICAgICAgICAgLS1fX18KKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvaHRtbAorCisgICAgICAgICAgICAgICAgPHA+c2ltcGxlIGJvZHk8L3A+CisKKyAgICAgICAgICAgICAgICAtLV9fXy0tCisKKyAgICAgICAgICAgICAgICAtLSsrKy0tCisKKyAgICAgICAgICAgICAgICAtLT09PQorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogaW1hZ2UvanBnCisgICAgICAgICAgICAgICAgQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudAorCisgICAgICAgICAgICAgICAgYm9ndXMganBnIGJvZHkKKworICAgICAgICAgICAgICAgIC0tPT09CisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiBpbWFnZS9qcGcKKyAgICAgICAgICAgICAgICBDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50CisKKyAgICAgICAgICAgICAgICBhbm90aGVyIGJvZ3VzIGpwZyBib2R5CisKKyAgICAgICAgICAgICAgICAtLT09PS0tCisgICAgICAgICAgICAgICAgIiIiKSksCisKKyAgICAgICAgJ21lc3NhZ2VfcmZjODIyJzogKAorICAgICAgICAgICAgKE5vbmUsIE5vbmUsIE5vbmUpLAorICAgICAgICAgICAgKCksCisgICAgICAgICAgICAoKSwKKyAgICAgICAgICAgIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICAgICAgVG86IGZvb0BleGFtcGxlLmNvbQorICAgICAgICAgICAgICAgIE1JTUUtVmVyc2lvbjogMS4wCisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiBtZXNzYWdlL3JmYzgyMgorCisgICAgICAgICAgICAgICAgVG86IGJhckBleGFtcGxlLmNvbQorICAgICAgICAgICAgICAgIEZyb206IHJvYm90QGV4YW1wLmNvbQorCisgICAgICAgICAgICAgICAgdGhpcyBpcyBhIG1lc3NhZ2UgYm9keS4KKyAgICAgICAgICAgICAgICAiIiIpKSwKKworICAgICAgICAnbWl4ZWRfdGV4dF9tZXNzYWdlX3JmYzgyMic6ICgKKyAgICAgICAgICAgIChOb25lLCBOb25lLCAxKSwKKyAgICAgICAgICAgICgyLCksCisgICAgICAgICAgICAoMSwgMiksCisgICAgICAgICAgICB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgICAgIFRvOiBmb29AZXhhbXBsZS5jb20KKyAgICAgICAgICAgICAgICBNSU1FLVZlcnNpb246IDEuMAorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT0iPT09IgorCisgICAgICAgICAgICAgICAgLS09PT0KKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW4KKworICAgICAgICAgICAgICAgIFlvdXIgbWVzc2FnZSBoYXMgYm91bmNlZCwgc2VyLgorCisgICAgICAgICAgICAgICAgLS09PT0KKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IG1lc3NhZ2UvcmZjODIyCisKKyAgICAgICAgICAgICAgICBUbzogYmFyQGV4YW1wbGUuY29tCisgICAgICAgICAgICAgICAgRnJvbTogcm9ib3RAZXhhbXAuY29tCisKKyAgICAgICAgICAgICAgICB0aGlzIGlzIGEgbWVzc2FnZSBib2R5LgorCisgICAgICAgICAgICAgICAgLS09PT0tLQorICAgICAgICAgICAgICAgICIiIikpLAorCisgICAgICAgICB9CisKKyAgICBkZWYgbWVzc2FnZV9hc19nZXRfYm9keShzZWxmLCBib2R5X3BhcnRzLCBhdHRhY2htZW50cywgcGFydHMsIG1zZyk6CisgICAgICAgIG0gPSBzZWxmLl9zdHJfbXNnKG1zZykKKyAgICAgICAgYWxscGFydHMgPSBsaXN0KG0ud2FsaygpKQorICAgICAgICBleHBlY3RlZCA9IFtOb25lIGlmIG4gaXMgTm9uZSBlbHNlIGFsbHBhcnRzW25dIGZvciBuIGluIGJvZHlfcGFydHNdCisgICAgICAgIHJlbGF0ZWQgPSAwOyBodG1sID0gMTsgcGxhaW4gPSAyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfYm9keSgpLCBmaXJzdChleHBlY3RlZCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfYm9keShwcmVmZXJlbmNlbGlzdD0oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlbGF0ZWQnLCAnaHRtbCcsICdwbGFpbicpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdChleHBlY3RlZCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfYm9keShwcmVmZXJlbmNlbGlzdD0oJ3JlbGF0ZWQnLCAnaHRtbCcpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdChleHBlY3RlZFtyZWxhdGVkOmh0bWwrMV0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2JvZHkocHJlZmVyZW5jZWxpc3Q9KCdyZWxhdGVkJywgJ3BsYWluJykpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0KFtleHBlY3RlZFtyZWxhdGVkXSwgZXhwZWN0ZWRbcGxhaW5dXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfYm9keShwcmVmZXJlbmNlbGlzdD0oJ2h0bWwnLCAncGxhaW4nKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3QoZXhwZWN0ZWRbaHRtbDpwbGFpbisxXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfYm9keShwcmVmZXJlbmNlbGlzdD1bJ3JlbGF0ZWQnXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRbcmVsYXRlZF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfYm9keShwcmVmZXJlbmNlbGlzdD1bJ2h0bWwnXSksIGV4cGVjdGVkW2h0bWxdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2JvZHkocHJlZmVyZW5jZWxpc3Q9WydwbGFpbiddKSwgZXhwZWN0ZWRbcGxhaW5dKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2JvZHkocHJlZmVyZW5jZWxpc3Q9KCdwbGFpbicsICdodG1sJykpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0KGV4cGVjdGVkW3BsYWluOmh0bWwtMTotMV0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2JvZHkocHJlZmVyZW5jZWxpc3Q9KCdwbGFpbicsICdyZWxhdGVkJykpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0KFtleHBlY3RlZFtwbGFpbl0sIGV4cGVjdGVkW3JlbGF0ZWRdXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfYm9keShwcmVmZXJlbmNlbGlzdD0oJ2h0bWwnLCAncmVsYXRlZCcpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdChleHBlY3RlZFtodG1sOjotMV0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2JvZHkocHJlZmVyZW5jZWxpc3Q9KCdwbGFpbicsICdodG1sJywgJ3JlbGF0ZWQnKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3QoZXhwZWN0ZWRbOjotMV0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2JvZHkocHJlZmVyZW5jZWxpc3Q9KCdodG1sJywgJ3BsYWluJywgJ3JlbGF0ZWQnKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3QoW2V4cGVjdGVkW2h0bWxdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZFtwbGFpbl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkW3JlbGF0ZWRdXSkpCisKKyAgICBkZWYgbWVzc2FnZV9hc19pdGVyX2F0dGFjaG1lbnQoc2VsZiwgYm9keV9wYXJ0cywgYXR0YWNobWVudHMsIHBhcnRzLCBtc2cpOgorICAgICAgICBtID0gc2VsZi5fc3RyX21zZyhtc2cpCisgICAgICAgIGFsbHBhcnRzID0gbGlzdChtLndhbGsoKSkKKyAgICAgICAgYXR0YWNobWVudHMgPSBbYWxscGFydHNbbl0gZm9yIG4gaW4gYXR0YWNobWVudHNdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChtLml0ZXJfYXR0YWNobWVudHMoKSksIGF0dGFjaG1lbnRzKQorCisgICAgZGVmIG1lc3NhZ2VfYXNfaXRlcl9wYXJ0cyhzZWxmLCBib2R5X3BhcnRzLCBhdHRhY2htZW50cywgcGFydHMsIG1zZyk6CisgICAgICAgIG0gPSBzZWxmLl9zdHJfbXNnKG1zZykKKyAgICAgICAgYWxscGFydHMgPSBsaXN0KG0ud2FsaygpKQorICAgICAgICBwYXJ0cyA9IFthbGxwYXJ0c1tuXSBmb3IgbiBpbiBwYXJ0c10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG0uaXRlcl9wYXJ0cygpKSwgcGFydHMpCisKKyAgICBjbGFzcyBfVGVzdENvbnRlbnRNYW5hZ2VyOgorICAgICAgICBkZWYgZ2V0X2NvbnRlbnQoc2VsZiwgbXNnLCAqYXJncywgKiprdyk6CisgICAgICAgICAgICByZXR1cm4gbXNnLCBhcmdzLCBrdworICAgICAgICBkZWYgc2V0X2NvbnRlbnQoc2VsZiwgbXNnLCAqYXJncywgKiprdyk6CisgICAgICAgICAgICBzZWxmLm1zZyA9IG1zZworICAgICAgICAgICAgc2VsZi5hcmdzID0gYXJncworICAgICAgICAgICAgc2VsZi5rdyA9IGt3CisKKyAgICBkZWYgdGVzdF9nZXRfY29udGVudF93aXRoX2NtKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fc3RyX21zZygnJykKKyAgICAgICAgY20gPSBzZWxmLl9UZXN0Q29udGVudE1hbmFnZXIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2NvbnRlbnQoY29udGVudF9tYW5hZ2VyPWNtKSwgKG0sICgpLCB7fSkpCisgICAgICAgIG1zZywgYXJncywga3cgPSBtLmdldF9jb250ZW50KCdmb28nLCBjb250ZW50X21hbmFnZXI9Y20sIGJhcj0xLCBrPTIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLCBtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFyZ3MsICgnZm9vJywpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGt3LCBkaWN0KGJhcj0xLCBrPTIpKQorCisgICAgZGVmIHRlc3RfZ2V0X2NvbnRlbnRfZGVmYXVsdF9jbV9jb21lc19mcm9tX3BvbGljeShzZWxmKToKKyAgICAgICAgcCA9IHBvbGljeS5kZWZhdWx0LmNsb25lKGNvbnRlbnRfbWFuYWdlcj1zZWxmLl9UZXN0Q29udGVudE1hbmFnZXIoKSkKKyAgICAgICAgbSA9IHNlbGYuX3N0cl9tc2coJycsIHBvbGljeT1wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2NvbnRlbnQoKSwgKG0sICgpLCB7fSkpCisgICAgICAgIG1zZywgYXJncywga3cgPSBtLmdldF9jb250ZW50KCdmb28nLCBiYXI9MSwgaz0yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZywgbSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhcmdzLCAoJ2ZvbycsKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChrdywgZGljdChiYXI9MSwgaz0yKSkKKworICAgIGRlZiB0ZXN0X3NldF9jb250ZW50X3dpdGhfY20oc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9zdHJfbXNnKCcnKQorICAgICAgICBjbSA9IHNlbGYuX1Rlc3RDb250ZW50TWFuYWdlcigpCisgICAgICAgIG0uc2V0X2NvbnRlbnQoY29udGVudF9tYW5hZ2VyPWNtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLm1zZywgbSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5hcmdzLCAoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5rdywge30pCisgICAgICAgIG0uc2V0X2NvbnRlbnQoJ2ZvbycsIGNvbnRlbnRfbWFuYWdlcj1jbSwgYmFyPTEsIGs9MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5tc2csIG0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uYXJncywgKCdmb28nLCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20ua3csIGRpY3QoYmFyPTEsIGs9MikpCisKKyAgICBkZWYgdGVzdF9zZXRfY29udGVudF9kZWZhdWx0X2NtX2NvbWVzX2Zyb21fcG9saWN5KHNlbGYpOgorICAgICAgICBjbSA9IHNlbGYuX1Rlc3RDb250ZW50TWFuYWdlcigpCisgICAgICAgIHAgPSBwb2xpY3kuZGVmYXVsdC5jbG9uZShjb250ZW50X21hbmFnZXI9Y20pCisgICAgICAgIG0gPSBzZWxmLl9zdHJfbXNnKCcnLCBwb2xpY3k9cCkKKyAgICAgICAgbS5zZXRfY29udGVudCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20ubXNnLCBtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmFyZ3MsICgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmt3LCB7fSkKKyAgICAgICAgbS5zZXRfY29udGVudCgnZm9vJywgYmFyPTEsIGs9MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5tc2csIG0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uYXJncywgKCdmb28nLCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20ua3csIGRpY3QoYmFyPTEsIGs9MikpCisKKyAgICAjIG91dGNvbWUgaXMgd2hldGhlciB4eHhfbWV0aG9kIHNob3VsZCByYWlzZSBWYWx1ZUVycm9yIGVycm9yIHdoZW4gY2FsbGVkCisgICAgIyBvbiBtdWx0aXBhcnQvc3VidHlwZS4gIEJsYW5rIG91dGNvbWUgbWVhbnMgaXQgZGVwZW5kcyBvbiB4eHggKGFkZAorICAgICMgc3VjY2VlZHMsIG1ha2UgcmFpc2VzKS4gIE5vdGU6ICdub25lJyBtZWFucyB0aGVyZSBhcmUgY29udGVudC10eXBlCisgICAgIyBoZWFkZXJzIGJ1dCBwYXlsb2FkIGlzIE5vbmUuLi50aGlzIGhhcHBlbmluZyBpbiBwcmFjdGljZSB3b3VsZCBiZSB2ZXJ5CisgICAgIyB1bnVzdWFsLCBzbyB0cmVhdGluZyBpdCBhcyBpZiB0aGVyZSB3ZXJlIGNvbnRlbnQgc2VlbXMgcmVhc29uYWJsZS4KKyAgICAjICAgIG1ldGhvZCAgICAgICAgICBzdWJ0eXBlICAgICAgICAgICBvdXRjb21lCisgICAgc3VidHlwZV9wYXJhbXMgPSAoCisgICAgICAgICgncmVsYXRlZCcsICAgICAgJ25vX2NvbnRlbnQnLCAgICAgJ3N1Y2NlZWRzJyksCisgICAgICAgICgncmVsYXRlZCcsICAgICAgJ25vbmUnLCAgICAgICAgICAgJ3N1Y2NlZWRzJyksCisgICAgICAgICgncmVsYXRlZCcsICAgICAgJ3BsYWluJywgICAgICAgICAgJ3N1Y2NlZWRzJyksCisgICAgICAgICgncmVsYXRlZCcsICAgICAgJ3JlbGF0ZWQnLCAgICAgICAgJycpLAorICAgICAgICAoJ3JlbGF0ZWQnLCAgICAgICdhbHRlcm5hdGl2ZScsICAgICdyYWlzZXMnKSwKKyAgICAgICAgKCdyZWxhdGVkJywgICAgICAnbWl4ZWQnLCAgICAgICAgICAncmFpc2VzJyksCisgICAgICAgICgnYWx0ZXJuYXRpdmUnLCAgJ25vX2NvbnRlbnQnLCAgICAgJ3N1Y2NlZWRzJyksCisgICAgICAgICgnYWx0ZXJuYXRpdmUnLCAgJ25vbmUnLCAgICAgICAgICAgJ3N1Y2NlZWRzJyksCisgICAgICAgICgnYWx0ZXJuYXRpdmUnLCAgJ3BsYWluJywgICAgICAgICAgJ3N1Y2NlZWRzJyksCisgICAgICAgICgnYWx0ZXJuYXRpdmUnLCAgJ3JlbGF0ZWQnLCAgICAgICAgJ3N1Y2NlZWRzJyksCisgICAgICAgICgnYWx0ZXJuYXRpdmUnLCAgJ2FsdGVybmF0aXZlJywgICAgJycpLAorICAgICAgICAoJ2FsdGVybmF0aXZlJywgICdtaXhlZCcsICAgICAgICAgICdyYWlzZXMnKSwKKyAgICAgICAgKCdtaXhlZCcsICAgICAgICAnbm9fY29udGVudCcsICAgICAnc3VjY2VlZHMnKSwKKyAgICAgICAgKCdtaXhlZCcsICAgICAgICAnbm9uZScsICAgICAgICAgICAnc3VjY2VlZHMnKSwKKyAgICAgICAgKCdtaXhlZCcsICAgICAgICAncGxhaW4nLCAgICAgICAgICAnc3VjY2VlZHMnKSwKKyAgICAgICAgKCdtaXhlZCcsICAgICAgICAncmVsYXRlZCcsICAgICAgICAnc3VjY2VlZHMnKSwKKyAgICAgICAgKCdtaXhlZCcsICAgICAgICAnYWx0ZXJuYXRpdmUnLCAgICAnc3VjY2VlZHMnKSwKKyAgICAgICAgKCdtaXhlZCcsICAgICAgICAnbWl4ZWQnLCAgICAgICAgICAnJyksCisgICAgICAgICkKKworICAgIGRlZiBfbWFrZV9zdWJ0eXBlX3Rlc3RfbWVzc2FnZShzZWxmLCBzdWJ0eXBlKToKKyAgICAgICAgbSA9IHNlbGYubWVzc2FnZSgpCisgICAgICAgIHBheWxvYWQgPSBOb25lCisgICAgICAgIG1zZ19oZWFkZXJzID0gIFsKKyAgICAgICAgICAgICgnVG8nLCAnZm9vQGJhci5jb20nKSwKKyAgICAgICAgICAgICgnRnJvbScsICdiYXJAZm9vLmNvbScpLAorICAgICAgICAgICAgXQorICAgICAgICBpZiBzdWJ0eXBlICE9ICdub19jb250ZW50JzoKKyAgICAgICAgICAgICgnY29udGVudC1zaGFkb3cnLCAnTG9ncnVzJyksCisgICAgICAgIG1zZ19oZWFkZXJzLmFwcGVuZCgoJ1gtUmFuZG9tLUhlYWRlcicsICdDb3J3aW4nKSkKKyAgICAgICAgaWYgc3VidHlwZSA9PSAndGV4dCc6CisgICAgICAgICAgICBwYXlsb2FkID0gJycKKyAgICAgICAgICAgIG1zZ19oZWFkZXJzLmFwcGVuZCgoJ0NvbnRlbnQtVHlwZScsICd0ZXh0L3BsYWluJykpCisgICAgICAgICAgICBtLnNldF9wYXlsb2FkKCcnKQorICAgICAgICBlbGlmIHN1YnR5cGUgIT0gJ25vX2NvbnRlbnQnOgorICAgICAgICAgICAgcGF5bG9hZCA9IFtdCisgICAgICAgICAgICBtc2dfaGVhZGVycy5hcHBlbmQoKCdDb250ZW50LVR5cGUnLCAnbXVsdGlwYXJ0LycgKyBzdWJ0eXBlKSkKKyAgICAgICAgbXNnX2hlYWRlcnMuYXBwZW5kKCgnWC1UcnVtcCcsICdSYW5kb20nKSkKKyAgICAgICAgbS5zZXRfcGF5bG9hZChwYXlsb2FkKQorICAgICAgICBmb3IgbmFtZSwgdmFsdWUgaW4gbXNnX2hlYWRlcnM6CisgICAgICAgICAgICBtW25hbWVdID0gdmFsdWUKKyAgICAgICAgcmV0dXJuIG0sIG1zZ19oZWFkZXJzLCBwYXlsb2FkCisKKyAgICBkZWYgX2NoZWNrX2Rpc2FsbG93ZWRfc3VidHlwZV9yYWlzZXMoc2VsZiwgbSwgbWV0aG9kX25hbWUsIHN1YnR5cGUsIG1ldGhvZCk6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcikgYXMgYXI6CisgICAgICAgICAgICBnZXRhdHRyKG0sIG1ldGhvZCkoKQorICAgICAgICBleGNfdGV4dCA9IHN0cihhci5leGNlcHRpb24pCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oc3VidHlwZSwgZXhjX3RleHQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4obWV0aG9kX25hbWUsIGV4Y190ZXh0KQorCisgICAgZGVmIF9jaGVja19tYWtlX211bHRpcGFydChzZWxmLCBtLCBtc2dfaGVhZGVycywgcGF5bG9hZCk6CisgICAgICAgIGNvdW50ID0gMAorICAgICAgICBmb3IgbmFtZSwgdmFsdWUgaW4gbXNnX2hlYWRlcnM6CisgICAgICAgICAgICBpZiBub3QgbmFtZS5sb3dlcigpLnN0YXJ0c3dpdGgoJ2NvbnRlbnQtJyk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtW25hbWVdLCB2YWx1ZSkKKyAgICAgICAgICAgICAgICBjb3VudCArPSAxCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG0pLCBjb3VudCsxKSAjICsxIGZvciBuZXcgQ29udGVudC1UeXBlCisgICAgICAgIHBhcnQgPSBuZXh0KG0uaXRlcl9wYXJ0cygpKQorICAgICAgICBjb3VudCA9IDAKKyAgICAgICAgZm9yIG5hbWUsIHZhbHVlIGluIG1zZ19oZWFkZXJzOgorICAgICAgICAgICAgaWYgbmFtZS5sb3dlcigpLnN0YXJ0c3dpdGgoJ2NvbnRlbnQtJyk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJ0W25hbWVdLCB2YWx1ZSkKKyAgICAgICAgICAgICAgICBjb3VudCArPSAxCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHBhcnQpLCBjb3VudCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJ0LmdldF9wYXlsb2FkKCksIHBheWxvYWQpCisKKyAgICBkZWYgc3VidHlwZV9hc19tYWtlKHNlbGYsIG1ldGhvZCwgc3VidHlwZSwgb3V0Y29tZSk6CisgICAgICAgIG0sIG1zZ19oZWFkZXJzLCBwYXlsb2FkID0gc2VsZi5fbWFrZV9zdWJ0eXBlX3Rlc3RfbWVzc2FnZShzdWJ0eXBlKQorICAgICAgICBtYWtlX21ldGhvZCA9ICdtYWtlXycgKyBtZXRob2QKKyAgICAgICAgaWYgb3V0Y29tZSBpbiAoJycsICdyYWlzZXMnKToKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX2Rpc2FsbG93ZWRfc3VidHlwZV9yYWlzZXMobSwgbWV0aG9kLCBzdWJ0eXBlLCBtYWtlX21ldGhvZCkKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBnZXRhdHRyKG0sIG1ha2VfbWV0aG9kKSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfY29udGVudF9tYWludHlwZSgpLCAnbXVsdGlwYXJ0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9jb250ZW50X3N1YnR5cGUoKSwgbWV0aG9kKQorICAgICAgICBpZiBzdWJ0eXBlID09ICdub19jb250ZW50JzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG0uZ2V0X3BheWxvYWQoKSksIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uaXRlbXMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnX2hlYWRlcnMgKyBbKCdDb250ZW50LVR5cGUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ211bHRpcGFydC8nK21ldGhvZCldKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obS5nZXRfcGF5bG9hZCgpKSwgMSkKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX21ha2VfbXVsdGlwYXJ0KG0sIG1zZ19oZWFkZXJzLCBwYXlsb2FkKQorCisgICAgZGVmIHN1YnR5cGVfYXNfbWFrZV93aXRoX2JvdW5kYXJ5KHNlbGYsIG1ldGhvZCwgc3VidHlwZSwgb3V0Y29tZSk6CisgICAgICAgICMgRG9pbmcgYWxsIHZhcmlhdGlvbiBpcyBhIGJpdCBvZiBvdmVya2lsbC4uLgorICAgICAgICBtID0gc2VsZi5tZXNzYWdlKCkKKyAgICAgICAgaWYgb3V0Y29tZSBpbiAoJycsICdyYWlzZXMnKToKKyAgICAgICAgICAgIG1bJ0NvbnRlbnQtVHlwZSddID0gJ211bHRpcGFydC8nICsgc3VidHlwZQorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKSBhcyBjbToKKyAgICAgICAgICAgICAgICBnZXRhdHRyKG0sICdtYWtlXycgKyBtZXRob2QpKCkKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiBzdWJ0eXBlID09ICdwbGFpbic6CisgICAgICAgICAgICBtWydDb250ZW50LVR5cGUnXSA9ICd0ZXh0L3BsYWluJworICAgICAgICBlbGlmIHN1YnR5cGUgIT0gJ25vX2NvbnRlbnQnOgorICAgICAgICAgICAgbVsnQ29udGVudC1UeXBlJ10gPSAnbXVsdGlwYXJ0LycgKyBzdWJ0eXBlCisgICAgICAgIGdldGF0dHIobSwgJ21ha2VfJyArIG1ldGhvZCkoYm91bmRhcnk9ImFiYyIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtLmlzX211bHRpcGFydCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2JvdW5kYXJ5KCksICdhYmMnKQorCisgICAgZGVmIHRlc3RfcG9saWN5X29uX3BhcnRfbWFkZV9ieV9tYWtlX2NvbWVzX2Zyb21fbWVzc2FnZShzZWxmKToKKyAgICAgICAgZm9yIG1ldGhvZCBpbiAoJ21ha2VfcmVsYXRlZCcsICdtYWtlX2FsdGVybmF0aXZlJywgJ21ha2VfbWl4ZWQnKToKKyAgICAgICAgICAgIG0gPSBzZWxmLm1lc3NhZ2UocG9saWN5PXNlbGYucG9saWN5LmNsb25lKGNvbnRlbnRfbWFuYWdlcj0nZm9vJykpCisgICAgICAgICAgICBtWydDb250ZW50LVR5cGUnXSA9ICd0ZXh0L3BsYWluJworICAgICAgICAgICAgZ2V0YXR0cihtLCBtZXRob2QpKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfcGF5bG9hZCgwKS5wb2xpY3kuY29udGVudF9tYW5hZ2VyLCAnZm9vJykKKworICAgIGNsYXNzIF9UZXN0U2V0Q29udGVudE1hbmFnZXI6CisgICAgICAgIGRlZiBzZXRfY29udGVudChzZWxmLCBtc2csIGNvbnRlbnQsICphcmdzLCAqKmt3KToKKyAgICAgICAgICAgIG1zZ1snQ29udGVudC1UeXBlJ10gPSAndGV4dC9wbGFpbicKKyAgICAgICAgICAgIG1zZy5zZXRfcGF5bG9hZChjb250ZW50KQorCisgICAgZGVmIHN1YnR5cGVfYXNfYWRkKHNlbGYsIG1ldGhvZCwgc3VidHlwZSwgb3V0Y29tZSk6CisgICAgICAgIG0sIG1zZ19oZWFkZXJzLCBwYXlsb2FkID0gc2VsZi5fbWFrZV9zdWJ0eXBlX3Rlc3RfbWVzc2FnZShzdWJ0eXBlKQorICAgICAgICBjbSA9IHNlbGYuX1Rlc3RTZXRDb250ZW50TWFuYWdlcigpCisgICAgICAgIGFkZF9tZXRob2QgPSAnYWRkX2F0dGFjaG1lbnQnIGlmIG1ldGhvZD09J21peGVkJyBlbHNlICdhZGRfJyArIG1ldGhvZAorICAgICAgICBpZiBvdXRjb21lID09ICdyYWlzZXMnOgorICAgICAgICAgICAgc2VsZi5fY2hlY2tfZGlzYWxsb3dlZF9zdWJ0eXBlX3JhaXNlcyhtLCBtZXRob2QsIHN1YnR5cGUsIGFkZF9tZXRob2QpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZ2V0YXR0cihtLCBhZGRfbWV0aG9kKSgndGVzdCcsIGNvbnRlbnRfbWFuYWdlcj1jbSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9jb250ZW50X21haW50eXBlKCksICdtdWx0aXBhcnQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2NvbnRlbnRfc3VidHlwZSgpLCBtZXRob2QpCisgICAgICAgIGlmIG1ldGhvZCA9PSBzdWJ0eXBlIG9yIHN1YnR5cGUgPT0gJ25vX2NvbnRlbnQnOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obS5nZXRfcGF5bG9hZCgpKSwgMSkKKyAgICAgICAgICAgIGZvciBuYW1lLCB2YWx1ZSBpbiBtc2dfaGVhZGVyczoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1bbmFtZV0sIHZhbHVlKQorICAgICAgICAgICAgcGFydCA9IG0uZ2V0X3BheWxvYWQoKVswXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obS5nZXRfcGF5bG9hZCgpKSwgMikKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX21ha2VfbXVsdGlwYXJ0KG0sIG1zZ19oZWFkZXJzLCBwYXlsb2FkKQorICAgICAgICAgICAgcGFydCA9IG0uZ2V0X3BheWxvYWQoKVsxXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnQuZ2V0X2NvbnRlbnRfdHlwZSgpLCAndGV4dC9wbGFpbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFydC5nZXRfcGF5bG9hZCgpLCAndGVzdCcpCisgICAgICAgIGlmIG1ldGhvZD09J21peGVkJzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFydFsnQ29udGVudC1EaXNwb3NpdGlvbiddLCAnYXR0YWNobWVudCcpCisgICAgICAgIGVsaWYgbWV0aG9kPT0ncmVsYXRlZCc6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnRbJ0NvbnRlbnQtRGlzcG9zaXRpb24nXSwgJ2lubGluZScpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIE90aGVyd2lzZSB3ZSBkb24ndCBndWVzcy4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHBhcnRbJ0NvbnRlbnQtRGlzcG9zaXRpb24nXSkKKworICAgIGNsYXNzIF9UZXN0U2V0UmFpc2luZ0NvbnRlbnRNYW5hZ2VyOgorICAgICAgICBkZWYgc2V0X2NvbnRlbnQoc2VsZiwgbXNnLCBjb250ZW50LCAqYXJncywgKiprdyk6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ3Rlc3QnKQorCisgICAgZGVmIHRlc3RfZGVmYXVsdF9jb250ZW50X21hbmFnZXJfZm9yX2FkZF9jb21lc19mcm9tX3BvbGljeShzZWxmKToKKyAgICAgICAgY20gPSBzZWxmLl9UZXN0U2V0UmFpc2luZ0NvbnRlbnRNYW5hZ2VyKCkKKyAgICAgICAgbSA9IHNlbGYubWVzc2FnZShwb2xpY3k9c2VsZi5wb2xpY3kuY2xvbmUoY29udGVudF9tYW5hZ2VyPWNtKSkKKyAgICAgICAgZm9yIG1ldGhvZCBpbiAoJ2FkZF9yZWxhdGVkJywgJ2FkZF9hbHRlcm5hdGl2ZScsICdhZGRfYXR0YWNobWVudCcpOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhFeGNlcHRpb24pIGFzIGFyOgorICAgICAgICAgICAgICAgIGdldGF0dHIobSwgbWV0aG9kKSgnJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGFyLmV4Y2VwdGlvbiksICd0ZXN0JykKKworICAgIGRlZiBtZXNzYWdlX2FzX2NsZWFyKHNlbGYsIGJvZHlfcGFydHMsIGF0dGFjaG1lbnRzLCBwYXJ0cywgbXNnKToKKyAgICAgICAgbSA9IHNlbGYuX3N0cl9tc2cobXNnKQorICAgICAgICBtLmNsZWFyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obSksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChtLml0ZW1zKCkpLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUobS5nZXRfcGF5bG9hZCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QobS5pdGVyX3BhcnRzKCkpLCBbXSkKKworICAgIGRlZiBtZXNzYWdlX2FzX2NsZWFyX2NvbnRlbnQoc2VsZiwgYm9keV9wYXJ0cywgYXR0YWNobWVudHMsIHBhcnRzLCBtc2cpOgorICAgICAgICBtID0gc2VsZi5fc3RyX21zZyhtc2cpCisgICAgICAgIGV4cGVjdGVkX2hlYWRlcnMgPSBbaCBmb3IgaCBpbiBtLmtleXMoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBoLmxvd2VyKCkuc3RhcnRzd2l0aCgnY29udGVudC0nKV0KKyAgICAgICAgbS5jbGVhcl9jb250ZW50KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG0ua2V5cygpKSwgZXhwZWN0ZWRfaGVhZGVycykKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUobS5nZXRfcGF5bG9hZCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QobS5pdGVyX3BhcnRzKCkpLCBbXSkKKworICAgIGRlZiB0ZXN0X2lzX2F0dGFjaG1lbnQoc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9tYWtlX21lc3NhZ2UoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uaXNfYXR0YWNobWVudCgpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5pc19hdHRhY2htZW50KQorICAgICAgICBtWydDb250ZW50LURpc3Bvc2l0aW9uJ10gPSAnaW5saW5lJworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uaXNfYXR0YWNobWVudCgpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5pc19hdHRhY2htZW50KQorICAgICAgICBtLnJlcGxhY2VfaGVhZGVyKCdDb250ZW50LURpc3Bvc2l0aW9uJywgJ2F0dGFjaG1lbnQnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobS5pc19hdHRhY2htZW50KCkpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG0uaXNfYXR0YWNobWVudCkKKyAgICAgICAgbS5yZXBsYWNlX2hlYWRlcignQ29udGVudC1EaXNwb3NpdGlvbicsICdBdFRhY2hNZW50JykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG0uaXNfYXR0YWNobWVudCgpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtLmlzX2F0dGFjaG1lbnQpCisgICAgICAgIG0uc2V0X3BhcmFtKCdmaWxlbmFtZScsICdhYmMucG5nJywgJ0NvbnRlbnQtRGlzcG9zaXRpb24nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobS5pc19hdHRhY2htZW50KCkpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG0uaXNfYXR0YWNobWVudCkKKworCitjbGFzcyBUZXN0RW1haWxNZXNzYWdlKFRlc3RFbWFpbE1lc3NhZ2VCYXNlLCBUZXN0RW1haWxCYXNlKToKKyAgICBtZXNzYWdlID0gRW1haWxNZXNzYWdlCisKKyAgICBkZWYgdGVzdF9zZXRfY29udGVudF9hZGRzX01JTUVfVmVyc2lvbihzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX3N0cl9tc2coJycpCisgICAgICAgIGNtID0gc2VsZi5fVGVzdENvbnRlbnRNYW5hZ2VyKCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignTUlNRS1WZXJzaW9uJywgbSkKKyAgICAgICAgbS5zZXRfY29udGVudChjb250ZW50X21hbmFnZXI9Y20pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobVsnTUlNRS1WZXJzaW9uJ10sICcxLjAnKQorCisgICAgY2xhc3MgX01JTUVfVmVyc2lvbl9hZGRpbmdfQ006CisgICAgICAgIGRlZiBzZXRfY29udGVudChzZWxmLCBtc2csICphcmdzLCAqKmt3KToKKyAgICAgICAgICAgIG1zZ1snTUlNRS1WZXJzaW9uJ10gPSAnMS4wJworCisgICAgZGVmIHRlc3Rfc2V0X2NvbnRlbnRfZG9lc19ub3RfZHVwbGljYXRlX01JTUVfVmVyc2lvbihzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX3N0cl9tc2coJycpCisgICAgICAgIGNtID0gc2VsZi5fTUlNRV9WZXJzaW9uX2FkZGluZ19DTSgpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ01JTUUtVmVyc2lvbicsIG0pCisgICAgICAgIG0uc2V0X2NvbnRlbnQoY29udGVudF9tYW5hZ2VyPWNtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1bJ01JTUUtVmVyc2lvbiddLCAnMS4wJykKKworCitjbGFzcyBUZXN0TUlNRVBhcnQoVGVzdEVtYWlsTWVzc2FnZUJhc2UsIFRlc3RFbWFpbEJhc2UpOgorICAgICMgRG9pbmcgdGhlIGZ1bGwgdGVzdCBydW4gaGVyZSBtYXkgc2VlbSBhIGJpdCByZWR1bmRhbnQsIHNpbmNlIHRoZSB0d28KKyAgICAjIGNsYXNzZXMgYXJlIGFsbW9zdCBpZGVudGljYWwuICBCdXQgd2hhdCBpZiB0aGV5IGRyaWZ0IGFwYXJ0PyAgU28gd2UgZG8KKyAgICAjIHRoZSBmdWxsIHRlc3RzIHNvIHRoYXQgYW55IGZ1dHVyZSBkcmlmdCBkb2Vzbid0IGludHJvZHVjZSBidWdzLgorICAgIG1lc3NhZ2UgPSBNSU1FUGFydAorCisgICAgZGVmIHRlc3Rfc2V0X2NvbnRlbnRfZG9lc19ub3RfYWRkX01JTUVfVmVyc2lvbihzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX3N0cl9tc2coJycpCisgICAgICAgIGNtID0gc2VsZi5fVGVzdENvbnRlbnRNYW5hZ2VyKCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignTUlNRS1WZXJzaW9uJywgbSkKKyAgICAgICAgbS5zZXRfY29udGVudChjb250ZW50X21hbmFnZXI9Y20pCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ01JTUUtVmVyc2lvbicsIG0pCisKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZW1haWwvdGVzdF9waWNrbGVhYmxlLnB5IGIvTGliL3Rlc3QvdGVzdF9lbWFpbC90ZXN0X3BpY2tsZWFibGUucHkKaW5kZXggZGFhOGQyNS4uMTZiNDQ2NyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9lbWFpbC90ZXN0X3BpY2tsZWFibGUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9lbWFpbC90ZXN0X3BpY2tsZWFibGUucHkKQEAgLTMwLDkgKzMwLDEwIEBACiAKICAgICBkZWYgaGVhZGVyX2FzX3BpY2tsZShzZWxmLCBuYW1lLCB2YWx1ZSk6CiAgICAgICAgIGhlYWRlciA9IHNlbGYuaGVhZGVyX2ZhY3RvcnkobmFtZSwgdmFsdWUpCi0gICAgICAgIHAgPSBwaWNrbGUuZHVtcHMoaGVhZGVyKQotICAgICAgICBoID0gcGlja2xlLmxvYWRzKHApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGgpLCBzdHIoaGVhZGVyKSkKKyAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICBwID0gcGlja2xlLmR1bXBzKGhlYWRlciwgcHJvdG8pCisgICAgICAgICAgICBoID0gcGlja2xlLmxvYWRzKHApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihoKSwgc3RyKGhlYWRlcikpCiAKIAogQHBhcmFtZXRlcml6ZQpAQCAtNjUsOSArNjYsMTAgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cyLmFzX3N0cmluZygpLCBtc2cuYXNfc3RyaW5nKCkpCiAKICAgICBkZWYgbXNnX2FzX3BpY2tsZShzZWxmLCBtc2cpOgotICAgICAgICBwID0gcGlja2xlLmR1bXBzKG1zZykKLSAgICAgICAgbXNnMiA9IHBpY2tsZS5sb2FkcyhwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZzIuYXNfc3RyaW5nKCksIG1zZy5hc19zdHJpbmcoKSkKKyAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICBwID0gcGlja2xlLmR1bXBzKG1zZywgcHJvdG8pCisgICAgICAgICAgICBtc2cyID0gcGlja2xlLmxvYWRzKHApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZzIuYXNfc3RyaW5nKCksIG1zZy5hc19zdHJpbmcoKSkKIAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9lbWFpbC90ZXN0X3BvbGljeS5weSBiL0xpYi90ZXN0L3Rlc3RfZW1haWwvdGVzdF9wb2xpY3kucHkKaW5kZXggOTgzYmQ0OS4uZTc5N2YzNiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9lbWFpbC90ZXN0X3BvbGljeS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2VtYWlsL3Rlc3RfcG9saWN5LnB5CkBAIC0zMCw2ICszMCw3IEBACiAgICAgICAgICdyYWlzZV9vbl9kZWZlY3QnOiAgICAgICAgICBGYWxzZSwKICAgICAgICAgJ2hlYWRlcl9mYWN0b3J5JzogICAgICAgICAgIGVtYWlsLnBvbGljeS5FbWFpbFBvbGljeS5oZWFkZXJfZmFjdG9yeSwKICAgICAgICAgJ3JlZm9sZF9zb3VyY2UnOiAgICAgICAgICAgICdsb25nJywKKyAgICAgICAgJ2NvbnRlbnRfbWFuYWdlcic6ICAgICAgICAgIGVtYWlsLnBvbGljeS5FbWFpbFBvbGljeS5jb250ZW50X21hbmFnZXIsCiAgICAgICAgIH0pCiAKICAgICAjIEZvciBlYWNoIHBvbGljeSB1bmRlciB0ZXN0LCB3ZSBnaXZlIGhlcmUgd2hhdCB3ZSBleHBlY3QgdGhlIGRlZmF1bHRzIHRvCkBAIC0zMTgsNSArMzE5LDE0IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmFzX3N0cmluZygpLCAiU3ViamVjdDogdGVzdFhUbzogZm9vWFgiKQogCiAKK2NsYXNzIFRlc3RDb25jcmV0ZVBvbGljaWVzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2hlYWRlcl9zdG9yZV9wYXJzZV9yZWplY3RzX25ld2xpbmVzKHNlbGYpOgorICAgICAgICBpbnN0YW5jZSA9IGVtYWlsLnBvbGljeS5FbWFpbFBvbGljeSgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLmhlYWRlcl9zdG9yZV9wYXJzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ0Zyb20nLCAnc3BhbVxuZWdnQGZvby5weScpCisKKwogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZW1haWwvdGVzdF91dGlscy5weSBiL0xpYi90ZXN0L3Rlc3RfZW1haWwvdGVzdF91dGlscy5weQppbmRleCA0YWJkYzA0Li42ZGNiM2JiIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2VtYWlsL3Rlc3RfdXRpbHMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9lbWFpbC90ZXN0X3V0aWxzLnB5CkBAIC0xMzYsNSArMTM2LDI4IEBACiAgICAgICAgIHQxID0gdXRpbHMubG9jYWx0aW1lKHQwKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQxLnR6bmFtZSgpLCAnRUVUJykKIAorIyBJc3N1ZSAjMjQ4MzY6IFRoZSB0aW1lem9uZSBmaWxlcyBhcmUgb3V0IG9mIGRhdGUgKHByZSAyMDExaykKKyMgb24gTWFjIE9TIFggU25vdyBMZW9wYXJkLgorQHRlc3Quc3VwcG9ydC5yZXF1aXJlc19tYWNfdmVyKDEwLCA3KQorY2xhc3MgRm9ybWF0RGF0ZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIEB0ZXN0LnN1cHBvcnQucnVuX3dpdGhfdHooJ0V1cm9wZS9NaW5zaycpCisgICAgZGVmIHRlc3RfZm9ybWF0ZGF0ZShzZWxmKToKKyAgICAgICAgdGltZXZhbCA9IHRpbWUubWt0aW1lKCgyMDExLCAxMiwgMSwgMTgsIDAsIDAsIDQsIDMzNSwgMCkpCisgICAgICAgIHN0cmluZyA9IHV0aWxzLmZvcm1hdGRhdGUodGltZXZhbCwgbG9jYWx0aW1lPUZhbHNlLCB1c2VnbXQ9RmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyaW5nLCAnVGh1LCAwMSBEZWMgMjAxMSAxNTowMDowMCAtMDAwMCcpCisgICAgICAgIHN0cmluZyA9IHV0aWxzLmZvcm1hdGRhdGUodGltZXZhbCwgbG9jYWx0aW1lPUZhbHNlLCB1c2VnbXQ9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHJpbmcsICdUaHUsIDAxIERlYyAyMDExIDE1OjAwOjAwIEdNVCcpCisKKyAgICBAdGVzdC5zdXBwb3J0LnJ1bl93aXRoX3R6KCdFdXJvcGUvTWluc2snKQorICAgIGRlZiB0ZXN0X2Zvcm1hdGRhdGVfd2l0aF9sb2NhbHRpbWUoc2VsZik6CisgICAgICAgIHRpbWV2YWwgPSB0aW1lLm1rdGltZSgoMjAxMSwgMSwgMSwgMTgsIDAsIDAsIDYsIDEsIDApKQorICAgICAgICBzdHJpbmcgPSB1dGlscy5mb3JtYXRkYXRlKHRpbWV2YWwsIGxvY2FsdGltZT1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cmluZywgJ1NhdCwgMDEgSmFuIDIwMTEgMTg6MDA6MDAgKzAyMDAnKQorICAgICAgICAjIE1pbnNrIG1vdmVkIGZyb20gKzAyMDAgKHdpdGggRFNUKSB0byArMDMwMCAod2l0aG91dCBEU1QpIGluIDIwMTEKKyAgICAgICAgdGltZXZhbCA9IHRpbWUubWt0aW1lKCgyMDExLCAxMiwgMSwgMTgsIDAsIDAsIDQsIDMzNSwgMCkpCisgICAgICAgIHN0cmluZyA9IHV0aWxzLmZvcm1hdGRhdGUodGltZXZhbCwgbG9jYWx0aW1lPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyaW5nLCAnVGh1LCAwMSBEZWMgMjAxMSAxODowMDowMCArMDMwMCcpCisKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2VtYWlsL3RvcnR1cmVfdGVzdC5weSBiL0xpYi90ZXN0L3Rlc3RfZW1haWwvdG9ydHVyZV90ZXN0LnB5CmluZGV4IDU0NGIxYmIuLjE5Y2Y2NGYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZW1haWwvdG9ydHVyZV90ZXN0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZW1haWwvdG9ydHVyZV90ZXN0LnB5CkBAIC0yNyw3ICsyNyw3IEBACiAjIFByZXZlbnQgdGhpcyB0ZXN0IGZyb20gcnVubmluZyBpbiB0aGUgUHl0aG9uIGRpc3RybwogdHJ5OgogICAgIG9wZW5maWxlKCdjcmlzcGluLXRvcnR1cmUudHh0JykKLWV4Y2VwdCBJT0Vycm9yOgorZXhjZXB0IE9TRXJyb3I6CiAgICAgcmFpc2UgVGVzdFNraXBwZWQKIAogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2Vuc3VyZXBpcC5weSBiL0xpYi90ZXN0L3Rlc3RfZW5zdXJlcGlwLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkYzc2NGIKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2Vuc3VyZXBpcC5weQpAQCAtMCwwICsxLDM2MCBAQAoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgdW5pdHRlc3QubW9jaworaW1wb3J0IHRlc3Quc3VwcG9ydAoraW1wb3J0IG9zCitpbXBvcnQgb3MucGF0aAoraW1wb3J0IGNvbnRleHRsaWIKK2ltcG9ydCBzeXMKKworaW1wb3J0IGVuc3VyZXBpcAoraW1wb3J0IGVuc3VyZXBpcC5fdW5pbnN0YWxsCisKKyMgcGlwIGN1cnJlbnRseSByZXF1aXJlcyBzc2wgc3VwcG9ydCwgc28gd2UgZW5zdXJlIHdlIGhhbmRsZQorIyBpdCBiZWluZyBtaXNzaW5nIChodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTk3NDQpCitlbnN1cmVwaXBfbm9fc3NsID0gdGVzdC5zdXBwb3J0LmltcG9ydF9mcmVzaF9tb2R1bGUoImVuc3VyZXBpcCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tlZD1bInNzbCJdKQordHJ5OgorICAgIGltcG9ydCBzc2wKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBkZWYgcmVxdWlyZXNfdXNhYmxlX3BpcChmKToKKyAgICAgICAgZGVjbyA9IHVuaXR0ZXN0LnNraXAoZW5zdXJlcGlwLl9NSVNTSU5HX1NTTF9NRVNTQUdFKQorICAgICAgICByZXR1cm4gZGVjbyhmKQorZWxzZToKKyAgICBkZWYgcmVxdWlyZXNfdXNhYmxlX3BpcChmKToKKyAgICAgICAgcmV0dXJuIGYKKworY2xhc3MgVGVzdEVuc3VyZVBpcFZlcnNpb24odW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfcmV0dXJuc192ZXJzaW9uKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVuc3VyZXBpcC5fUElQX1ZFUlNJT04sIGVuc3VyZXBpcC52ZXJzaW9uKCkpCisKK2NsYXNzIEVuc3VyZXBpcE1peGluOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBydW5fcGlwX3BhdGNoID0gdW5pdHRlc3QubW9jay5wYXRjaCgiZW5zdXJlcGlwLl9ydW5fcGlwIikKKyAgICAgICAgc2VsZi5ydW5fcGlwID0gcnVuX3BpcF9wYXRjaC5zdGFydCgpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChydW5fcGlwX3BhdGNoLnN0b3ApCisKKyAgICAgICAgIyBBdm9pZCBzaWRlIGVmZmVjdHMgb24gdGhlIGFjdHVhbCBvcyBtb2R1bGUKKyAgICAgICAgcmVhbF9kZXZudWxsID0gb3MuZGV2bnVsbAorICAgICAgICBvc19wYXRjaCA9IHVuaXR0ZXN0Lm1vY2sucGF0Y2goImVuc3VyZXBpcC5vcyIpCisgICAgICAgIHBhdGNoZWRfb3MgPSBvc19wYXRjaC5zdGFydCgpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvc19wYXRjaC5zdG9wKQorICAgICAgICBwYXRjaGVkX29zLmRldm51bGwgPSByZWFsX2Rldm51bGwKKyAgICAgICAgcGF0Y2hlZF9vcy5wYXRoID0gb3MucGF0aAorICAgICAgICBzZWxmLm9zX2Vudmlyb24gPSBwYXRjaGVkX29zLmVudmlyb24gPSBvcy5lbnZpcm9uLmNvcHkoKQorCisKK2NsYXNzIFRlc3RCb290c3RyYXAoRW5zdXJlcGlwTWl4aW4sIHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIEByZXF1aXJlc191c2FibGVfcGlwCisgICAgZGVmIHRlc3RfYmFzaWNfYm9vdHN0cmFwcGluZyhzZWxmKToKKyAgICAgICAgZW5zdXJlcGlwLmJvb3RzdHJhcCgpCisKKyAgICAgICAgc2VsZi5ydW5fcGlwLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKAorICAgICAgICAgICAgWworICAgICAgICAgICAgICAgICJpbnN0YWxsIiwgIi0tbm8taW5kZXgiLCAiLS1maW5kLWxpbmtzIiwKKyAgICAgICAgICAgICAgICB1bml0dGVzdC5tb2NrLkFOWSwgInNldHVwdG9vbHMiLCAicGlwIiwKKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICB1bml0dGVzdC5tb2NrLkFOWSwKKyAgICAgICAgKQorCisgICAgICAgIGFkZGl0aW9uYWxfcGF0aHMgPSBzZWxmLnJ1bl9waXAuY2FsbF9hcmdzWzBdWzFdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGFkZGl0aW9uYWxfcGF0aHMpLCAyKQorCisgICAgQHJlcXVpcmVzX3VzYWJsZV9waXAKKyAgICBkZWYgdGVzdF9ib290c3RyYXBwaW5nX3dpdGhfcm9vdChzZWxmKToKKyAgICAgICAgZW5zdXJlcGlwLmJvb3RzdHJhcChyb290PSIvZm9vL2Jhci8iKQorCisgICAgICAgIHNlbGYucnVuX3BpcC5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgKKyAgICAgICAgICAgIFsKKyAgICAgICAgICAgICAgICAiaW5zdGFsbCIsICItLW5vLWluZGV4IiwgIi0tZmluZC1saW5rcyIsCisgICAgICAgICAgICAgICAgdW5pdHRlc3QubW9jay5BTlksICItLXJvb3QiLCAiL2Zvby9iYXIvIiwKKyAgICAgICAgICAgICAgICAic2V0dXB0b29scyIsICJwaXAiLAorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgIHVuaXR0ZXN0Lm1vY2suQU5ZLAorICAgICAgICApCisKKyAgICBAcmVxdWlyZXNfdXNhYmxlX3BpcAorICAgIGRlZiB0ZXN0X2Jvb3RzdHJhcHBpbmdfd2l0aF91c2VyKHNlbGYpOgorICAgICAgICBlbnN1cmVwaXAuYm9vdHN0cmFwKHVzZXI9VHJ1ZSkKKworICAgICAgICBzZWxmLnJ1bl9waXAuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoCisgICAgICAgICAgICBbCisgICAgICAgICAgICAgICAgImluc3RhbGwiLCAiLS1uby1pbmRleCIsICItLWZpbmQtbGlua3MiLAorICAgICAgICAgICAgICAgIHVuaXR0ZXN0Lm1vY2suQU5ZLCAiLS11c2VyIiwgInNldHVwdG9vbHMiLCAicGlwIiwKKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICB1bml0dGVzdC5tb2NrLkFOWSwKKyAgICAgICAgKQorCisgICAgQHJlcXVpcmVzX3VzYWJsZV9waXAKKyAgICBkZWYgdGVzdF9ib290c3RyYXBwaW5nX3dpdGhfdXBncmFkZShzZWxmKToKKyAgICAgICAgZW5zdXJlcGlwLmJvb3RzdHJhcCh1cGdyYWRlPVRydWUpCisKKyAgICAgICAgc2VsZi5ydW5fcGlwLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKAorICAgICAgICAgICAgWworICAgICAgICAgICAgICAgICJpbnN0YWxsIiwgIi0tbm8taW5kZXgiLCAiLS1maW5kLWxpbmtzIiwKKyAgICAgICAgICAgICAgICB1bml0dGVzdC5tb2NrLkFOWSwgIi0tdXBncmFkZSIsICJzZXR1cHRvb2xzIiwgInBpcCIsCisgICAgICAgICAgICBdLAorICAgICAgICAgICAgdW5pdHRlc3QubW9jay5BTlksCisgICAgICAgICkKKworICAgIEByZXF1aXJlc191c2FibGVfcGlwCisgICAgZGVmIHRlc3RfYm9vdHN0cmFwcGluZ193aXRoX3ZlcmJvc2l0eV8xKHNlbGYpOgorICAgICAgICBlbnN1cmVwaXAuYm9vdHN0cmFwKHZlcmJvc2l0eT0xKQorCisgICAgICAgIHNlbGYucnVuX3BpcC5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgKKyAgICAgICAgICAgIFsKKyAgICAgICAgICAgICAgICAiaW5zdGFsbCIsICItLW5vLWluZGV4IiwgIi0tZmluZC1saW5rcyIsCisgICAgICAgICAgICAgICAgdW5pdHRlc3QubW9jay5BTlksICItdiIsICJzZXR1cHRvb2xzIiwgInBpcCIsCisgICAgICAgICAgICBdLAorICAgICAgICAgICAgdW5pdHRlc3QubW9jay5BTlksCisgICAgICAgICkKKworICAgIEByZXF1aXJlc191c2FibGVfcGlwCisgICAgZGVmIHRlc3RfYm9vdHN0cmFwcGluZ193aXRoX3ZlcmJvc2l0eV8yKHNlbGYpOgorICAgICAgICBlbnN1cmVwaXAuYm9vdHN0cmFwKHZlcmJvc2l0eT0yKQorCisgICAgICAgIHNlbGYucnVuX3BpcC5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgKKyAgICAgICAgICAgIFsKKyAgICAgICAgICAgICAgICAiaW5zdGFsbCIsICItLW5vLWluZGV4IiwgIi0tZmluZC1saW5rcyIsCisgICAgICAgICAgICAgICAgdW5pdHRlc3QubW9jay5BTlksICItdnYiLCAic2V0dXB0b29scyIsICJwaXAiLAorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgIHVuaXR0ZXN0Lm1vY2suQU5ZLAorICAgICAgICApCisKKyAgICBAcmVxdWlyZXNfdXNhYmxlX3BpcAorICAgIGRlZiB0ZXN0X2Jvb3RzdHJhcHBpbmdfd2l0aF92ZXJib3NpdHlfMyhzZWxmKToKKyAgICAgICAgZW5zdXJlcGlwLmJvb3RzdHJhcCh2ZXJib3NpdHk9MykKKworICAgICAgICBzZWxmLnJ1bl9waXAuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoCisgICAgICAgICAgICBbCisgICAgICAgICAgICAgICAgImluc3RhbGwiLCAiLS1uby1pbmRleCIsICItLWZpbmQtbGlua3MiLAorICAgICAgICAgICAgICAgIHVuaXR0ZXN0Lm1vY2suQU5ZLCAiLXZ2diIsICJzZXR1cHRvb2xzIiwgInBpcCIsCisgICAgICAgICAgICBdLAorICAgICAgICAgICAgdW5pdHRlc3QubW9jay5BTlksCisgICAgICAgICkKKworICAgIEByZXF1aXJlc191c2FibGVfcGlwCisgICAgZGVmIHRlc3RfYm9vdHN0cmFwcGluZ193aXRoX3JlZ3VsYXJfaW5zdGFsbChzZWxmKToKKyAgICAgICAgZW5zdXJlcGlwLmJvb3RzdHJhcCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5vc19lbnZpcm9uWyJFTlNVUkVQSVBfT1BUSU9OUyJdLCAiaW5zdGFsbCIpCisKKyAgICBAcmVxdWlyZXNfdXNhYmxlX3BpcAorICAgIGRlZiB0ZXN0X2Jvb3RzdHJhcHBpbmdfd2l0aF9hbHRfaW5zdGFsbChzZWxmKToKKyAgICAgICAgZW5zdXJlcGlwLmJvb3RzdHJhcChhbHRpbnN0YWxsPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5vc19lbnZpcm9uWyJFTlNVUkVQSVBfT1BUSU9OUyJdLCAiYWx0aW5zdGFsbCIpCisKKyAgICBAcmVxdWlyZXNfdXNhYmxlX3BpcAorICAgIGRlZiB0ZXN0X2Jvb3RzdHJhcHBpbmdfd2l0aF9kZWZhdWx0X3BpcChzZWxmKToKKyAgICAgICAgZW5zdXJlcGlwLmJvb3RzdHJhcChkZWZhdWx0X3BpcD1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCJFTlNVUkVQSVBfT1BUSU9OUyIsIHNlbGYub3NfZW52aXJvbikKKworICAgIGRlZiB0ZXN0X2FsdGluc3RhbGxfZGVmYXVsdF9waXBfY29uZmxpY3Qoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBlbnN1cmVwaXAuYm9vdHN0cmFwKGFsdGluc3RhbGw9VHJ1ZSwgZGVmYXVsdF9waXA9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnJ1bl9waXAuY2FsbGVkKQorCisgICAgQHJlcXVpcmVzX3VzYWJsZV9waXAKKyAgICBkZWYgdGVzdF9waXBfZW52aXJvbm1lbnRfdmFyaWFibGVzX3JlbW92ZWQoc2VsZik6CisgICAgICAgICMgZW5zdXJlcGlwIGRlbGliZXJhdGVseSBpZ25vcmVzIGFsbCBwaXAgZW52aXJvbm1lbnQgdmFyaWFibGVzCisgICAgICAgICMgU2VlIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxOTczNCBmb3IgZGV0YWlscworICAgICAgICBzZWxmLm9zX2Vudmlyb25bIlBJUF9USElTX1NIT1VMRF9HT19BV0FZIl0gPSAidGVzdCBmb2RkZXIiCisgICAgICAgIGVuc3VyZXBpcC5ib290c3RyYXAoKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCJQSVBfVEhJU19TSE9VTERfR09fQVdBWSIsIHNlbGYub3NfZW52aXJvbikKKworICAgIEByZXF1aXJlc191c2FibGVfcGlwCisgICAgZGVmIHRlc3RfcGlwX2NvbmZpZ19maWxlX2Rpc2FibGVkKHNlbGYpOgorICAgICAgICAjIGVuc3VyZXBpcCBkZWxpYmVyYXRlbHkgaWdub3JlcyB0aGUgcGlwIGNvbmZpZyBmaWxlCisgICAgICAgICMgU2VlIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUyMDA1MyBmb3IgZGV0YWlscworICAgICAgICBlbnN1cmVwaXAuYm9vdHN0cmFwKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm9zX2Vudmlyb25bIlBJUF9DT05GSUdfRklMRSJdLCBvcy5kZXZudWxsKQorCitAY29udGV4dGxpYi5jb250ZXh0bWFuYWdlcgorZGVmIGZha2VfcGlwKHZlcnNpb249ZW5zdXJlcGlwLl9QSVBfVkVSU0lPTik6CisgICAgaWYgdmVyc2lvbiBpcyBOb25lOgorICAgICAgICBwaXAgPSBOb25lCisgICAgZWxzZToKKyAgICAgICAgY2xhc3MgRmFrZVBpcCgpOgorICAgICAgICAgICAgX192ZXJzaW9uX18gPSB2ZXJzaW9uCisgICAgICAgIHBpcCA9IEZha2VQaXAoKQorICAgIHNlbnRpbmVsID0gb2JqZWN0KCkKKyAgICBvcmlnX3BpcCA9IHN5cy5tb2R1bGVzLmdldCgicGlwIiwgc2VudGluZWwpCisgICAgc3lzLm1vZHVsZXNbInBpcCJdID0gcGlwCisgICAgdHJ5OgorICAgICAgICB5aWVsZCBwaXAKKyAgICBmaW5hbGx5OgorICAgICAgICBpZiBvcmlnX3BpcCBpcyBzZW50aW5lbDoKKyAgICAgICAgICAgIGRlbCBzeXMubW9kdWxlc1sicGlwIl0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHN5cy5tb2R1bGVzWyJwaXAiXSA9IG9yaWdfcGlwCisKK2NsYXNzIFRlc3RVbmluc3RhbGwoRW5zdXJlcGlwTWl4aW4sIHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3VuaW5zdGFsbF9za2lwcGVkX3doZW5fbm90X2luc3RhbGxlZChzZWxmKToKKyAgICAgICAgd2l0aCBmYWtlX3BpcChOb25lKToKKyAgICAgICAgICAgIGVuc3VyZXBpcC5fdW5pbnN0YWxsX2hlbHBlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5ydW5fcGlwLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X3VuaW5zdGFsbF9za2lwcGVkX3dpdGhfd2FybmluZ19mb3Jfd3JvbmdfdmVyc2lvbihzZWxmKToKKyAgICAgICAgd2l0aCBmYWtlX3BpcCgibm90IGEgdmFsaWQgdmVyc2lvbiIpOgorICAgICAgICAgICAgd2l0aCB0ZXN0LnN1cHBvcnQuY2FwdHVyZWRfc3RkZXJyKCkgYXMgc3RkZXJyOgorICAgICAgICAgICAgICAgIGVuc3VyZXBpcC5fdW5pbnN0YWxsX2hlbHBlcigpCisgICAgICAgIHdhcm5pbmcgPSBzdGRlcnIuZ2V0dmFsdWUoKS5zdHJpcCgpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oIm9ubHkgdW5pbnN0YWxsIGEgbWF0Y2hpbmcgdmVyc2lvbiIsIHdhcm5pbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5ydW5fcGlwLmNhbGxlZCkKKworCisgICAgQHJlcXVpcmVzX3VzYWJsZV9waXAKKyAgICBkZWYgdGVzdF91bmluc3RhbGwoc2VsZik6CisgICAgICAgIHdpdGggZmFrZV9waXAoKToKKyAgICAgICAgICAgIGVuc3VyZXBpcC5fdW5pbnN0YWxsX2hlbHBlcigpCisKKyAgICAgICAgc2VsZi5ydW5fcGlwLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKAorICAgICAgICAgICAgWworICAgICAgICAgICAgICAgICJ1bmluc3RhbGwiLCAiLXkiLCAiLS1kaXNhYmxlLXBpcC12ZXJzaW9uLWNoZWNrIiwgInBpcCIsCisgICAgICAgICAgICAgICAgInNldHVwdG9vbHMiLAorICAgICAgICAgICAgXQorICAgICAgICApCisKKyAgICBAcmVxdWlyZXNfdXNhYmxlX3BpcAorICAgIGRlZiB0ZXN0X3VuaW5zdGFsbF93aXRoX3ZlcmJvc2l0eV8xKHNlbGYpOgorICAgICAgICB3aXRoIGZha2VfcGlwKCk6CisgICAgICAgICAgICBlbnN1cmVwaXAuX3VuaW5zdGFsbF9oZWxwZXIodmVyYm9zaXR5PTEpCisKKyAgICAgICAgc2VsZi5ydW5fcGlwLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKAorICAgICAgICAgICAgWworICAgICAgICAgICAgICAgICJ1bmluc3RhbGwiLCAiLXkiLCAiLS1kaXNhYmxlLXBpcC12ZXJzaW9uLWNoZWNrIiwgIi12IiwgInBpcCIsCisgICAgICAgICAgICAgICAgInNldHVwdG9vbHMiLAorICAgICAgICAgICAgXQorICAgICAgICApCisKKyAgICBAcmVxdWlyZXNfdXNhYmxlX3BpcAorICAgIGRlZiB0ZXN0X3VuaW5zdGFsbF93aXRoX3ZlcmJvc2l0eV8yKHNlbGYpOgorICAgICAgICB3aXRoIGZha2VfcGlwKCk6CisgICAgICAgICAgICBlbnN1cmVwaXAuX3VuaW5zdGFsbF9oZWxwZXIodmVyYm9zaXR5PTIpCisKKyAgICAgICAgc2VsZi5ydW5fcGlwLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKAorICAgICAgICAgICAgWworICAgICAgICAgICAgICAgICJ1bmluc3RhbGwiLCAiLXkiLCAiLS1kaXNhYmxlLXBpcC12ZXJzaW9uLWNoZWNrIiwgIi12diIsICJwaXAiLAorICAgICAgICAgICAgICAgICJzZXR1cHRvb2xzIiwKKyAgICAgICAgICAgIF0KKyAgICAgICAgKQorCisgICAgQHJlcXVpcmVzX3VzYWJsZV9waXAKKyAgICBkZWYgdGVzdF91bmluc3RhbGxfd2l0aF92ZXJib3NpdHlfMyhzZWxmKToKKyAgICAgICAgd2l0aCBmYWtlX3BpcCgpOgorICAgICAgICAgICAgZW5zdXJlcGlwLl91bmluc3RhbGxfaGVscGVyKHZlcmJvc2l0eT0zKQorCisgICAgICAgIHNlbGYucnVuX3BpcC5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgKKyAgICAgICAgICAgIFsKKyAgICAgICAgICAgICAgICAidW5pbnN0YWxsIiwgIi15IiwgIi0tZGlzYWJsZS1waXAtdmVyc2lvbi1jaGVjayIsICItdnZ2IiwKKyAgICAgICAgICAgICAgICAicGlwIiwgInNldHVwdG9vbHMiLAorICAgICAgICAgICAgXQorICAgICAgICApCisKKyAgICBAcmVxdWlyZXNfdXNhYmxlX3BpcAorICAgIGRlZiB0ZXN0X3BpcF9lbnZpcm9ubWVudF92YXJpYWJsZXNfcmVtb3ZlZChzZWxmKToKKyAgICAgICAgIyBlbnN1cmVwaXAgZGVsaWJlcmF0ZWx5IGlnbm9yZXMgYWxsIHBpcCBlbnZpcm9ubWVudCB2YXJpYWJsZXMKKyAgICAgICAgIyBTZWUgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTE5NzM0IGZvciBkZXRhaWxzCisgICAgICAgIHNlbGYub3NfZW52aXJvblsiUElQX1RISVNfU0hPVUxEX0dPX0FXQVkiXSA9ICJ0ZXN0IGZvZGRlciIKKyAgICAgICAgd2l0aCBmYWtlX3BpcCgpOgorICAgICAgICAgICAgZW5zdXJlcGlwLl91bmluc3RhbGxfaGVscGVyKCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigiUElQX1RISVNfU0hPVUxEX0dPX0FXQVkiLCBzZWxmLm9zX2Vudmlyb24pCisKKyAgICBAcmVxdWlyZXNfdXNhYmxlX3BpcAorICAgIGRlZiB0ZXN0X3BpcF9jb25maWdfZmlsZV9kaXNhYmxlZChzZWxmKToKKyAgICAgICAgIyBlbnN1cmVwaXAgZGVsaWJlcmF0ZWx5IGlnbm9yZXMgdGhlIHBpcCBjb25maWcgZmlsZQorICAgICAgICAjIFNlZSBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMjAwNTMgZm9yIGRldGFpbHMKKyAgICAgICAgd2l0aCBmYWtlX3BpcCgpOgorICAgICAgICAgICAgZW5zdXJlcGlwLl91bmluc3RhbGxfaGVscGVyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm9zX2Vudmlyb25bIlBJUF9DT05GSUdfRklMRSJdLCBvcy5kZXZudWxsKQorCisKK2NsYXNzIFRlc3RNaXNzaW5nU1NMKEVuc3VyZXBpcE1peGluLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHN5cy5tb2R1bGVzWyJlbnN1cmVwaXAiXSA9IGVuc3VyZXBpcF9ub19zc2wKKyAgICAgICAgQHNlbGYuYWRkQ2xlYW51cAorICAgICAgICBkZWYgcmVzdG9yZV9tb2R1bGUoKToKKyAgICAgICAgICAgIHN5cy5tb2R1bGVzWyJlbnN1cmVwaXAiXSA9IGVuc3VyZXBpcAorICAgICAgICBzdXBlcigpLnNldFVwKCkKKworICAgIGRlZiB0ZXN0X2Jvb3RzdHJhcF9yZXF1aXJlc19zc2woc2VsZik6CisgICAgICAgIHNlbGYub3NfZW52aXJvblsiUElQX1RISVNfU0hPVUxEX1NUQVkiXSA9ICJ0ZXN0IGZvZGRlciIKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFJ1bnRpbWVFcnJvciwgInJlcXVpcmVzIFNTTC9UTFMiKToKKyAgICAgICAgICAgIGVuc3VyZXBpcF9ub19zc2wuYm9vdHN0cmFwKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnJ1bl9waXAuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEluKCJQSVBfVEhJU19TSE9VTERfU1RBWSIsIHNlbGYub3NfZW52aXJvbikKKworICAgIGRlZiB0ZXN0X3VuaW5zdGFsbF9yZXF1aXJlc19zc2woc2VsZik6CisgICAgICAgIHNlbGYub3NfZW52aXJvblsiUElQX1RISVNfU0hPVUxEX1NUQVkiXSA9ICJ0ZXN0IGZvZGRlciIKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFJ1bnRpbWVFcnJvciwgInJlcXVpcmVzIFNTTC9UTFMiKToKKyAgICAgICAgICAgIHdpdGggZmFrZV9waXAoKToKKyAgICAgICAgICAgICAgICBlbnN1cmVwaXBfbm9fc3NsLl91bmluc3RhbGxfaGVscGVyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnJ1bl9waXAuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEluKCJQSVBfVEhJU19TSE9VTERfU1RBWSIsIHNlbGYub3NfZW52aXJvbikKKworICAgIGRlZiB0ZXN0X21haW5fZXhpdHNfZWFybHlfd2l0aF93YXJuaW5nKHNlbGYpOgorICAgICAgICB3aXRoIHRlc3Quc3VwcG9ydC5jYXB0dXJlZF9zdGRlcnIoKSBhcyBzdGRlcnI6CisgICAgICAgICAgICBlbnN1cmVwaXBfbm9fc3NsLl9tYWluKFsiLS12ZXJzaW9uIl0pCisgICAgICAgIHdhcm5pbmcgPSBzdGRlcnIuZ2V0dmFsdWUoKS5zdHJpcCgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3YXJuaW5nLmVuZHN3aXRoKCJyZXF1aXJlcyBTU0wvVExTIiksIHdhcm5pbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5ydW5fcGlwLmNhbGxlZCkKKworIyBCYXNpYyB0ZXN0aW5nIG9mIHRoZSBtYWluIGZ1bmN0aW9ucyBhbmQgdGhlaXIgYXJndW1lbnQgcGFyc2luZworCitFWFBFQ1RFRF9WRVJTSU9OX09VVFBVVCA9ICJwaXAgIiArIGVuc3VyZXBpcC5fUElQX1ZFUlNJT04KKworY2xhc3MgVGVzdEJvb3RzdHJhcHBpbmdNYWluRnVuY3Rpb24oRW5zdXJlcGlwTWl4aW4sIHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIEByZXF1aXJlc191c2FibGVfcGlwCisgICAgZGVmIHRlc3RfYm9vdHN0cmFwX3ZlcnNpb24oc2VsZik6CisgICAgICAgIHdpdGggdGVzdC5zdXBwb3J0LmNhcHR1cmVkX3N0ZG91dCgpIGFzIHN0ZG91dDoKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoU3lzdGVtRXhpdCk6CisgICAgICAgICAgICAgICAgZW5zdXJlcGlwLl9tYWluKFsiLS12ZXJzaW9uIl0pCisgICAgICAgIHJlc3VsdCA9IHN0ZG91dC5nZXR2YWx1ZSgpLnN0cmlwKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIEVYUEVDVEVEX1ZFUlNJT05fT1VUUFVUKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYucnVuX3BpcC5jYWxsZWQpCisKKyAgICBAcmVxdWlyZXNfdXNhYmxlX3BpcAorICAgIGRlZiB0ZXN0X2Jhc2ljX2Jvb3RzdHJhcHBpbmcoc2VsZik6CisgICAgICAgIGVuc3VyZXBpcC5fbWFpbihbXSkKKworICAgICAgICBzZWxmLnJ1bl9waXAuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoCisgICAgICAgICAgICBbCisgICAgICAgICAgICAgICAgImluc3RhbGwiLCAiLS1uby1pbmRleCIsICItLWZpbmQtbGlua3MiLAorICAgICAgICAgICAgICAgIHVuaXR0ZXN0Lm1vY2suQU5ZLCAic2V0dXB0b29scyIsICJwaXAiLAorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgIHVuaXR0ZXN0Lm1vY2suQU5ZLAorICAgICAgICApCisKKyAgICAgICAgYWRkaXRpb25hbF9wYXRocyA9IHNlbGYucnVuX3BpcC5jYWxsX2FyZ3NbMF1bMV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYWRkaXRpb25hbF9wYXRocyksIDIpCisKK2NsYXNzIFRlc3RVbmluc3RhbGxhdGlvbk1haW5GdW5jdGlvbihFbnN1cmVwaXBNaXhpbiwgdW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfdW5pbnN0YWxsX3ZlcnNpb24oc2VsZik6CisgICAgICAgIHdpdGggdGVzdC5zdXBwb3J0LmNhcHR1cmVkX3N0ZG91dCgpIGFzIHN0ZG91dDoKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoU3lzdGVtRXhpdCk6CisgICAgICAgICAgICAgICAgZW5zdXJlcGlwLl91bmluc3RhbGwuX21haW4oWyItLXZlcnNpb24iXSkKKyAgICAgICAgcmVzdWx0ID0gc3Rkb3V0LmdldHZhbHVlKCkuc3RyaXAoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgRVhQRUNURURfVkVSU0lPTl9PVVRQVVQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5ydW5fcGlwLmNhbGxlZCkKKworICAgIEByZXF1aXJlc191c2FibGVfcGlwCisgICAgZGVmIHRlc3RfYmFzaWNfdW5pbnN0YWxsKHNlbGYpOgorICAgICAgICB3aXRoIGZha2VfcGlwKCk6CisgICAgICAgICAgICBlbnN1cmVwaXAuX3VuaW5zdGFsbC5fbWFpbihbXSkKKworICAgICAgICBzZWxmLnJ1bl9waXAuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoCisgICAgICAgICAgICBbCisgICAgICAgICAgICAgICAgInVuaW5zdGFsbCIsICIteSIsICItLWRpc2FibGUtcGlwLXZlcnNpb24tY2hlY2siLCAicGlwIiwKKyAgICAgICAgICAgICAgICAic2V0dXB0b29scyIsCisgICAgICAgICAgICBdCisgICAgICAgICkKKworCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdC5zdXBwb3J0LnJ1bl91bml0dGVzdChfX25hbWVfXykKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZW51bS5weSBiL0xpYi90ZXN0L3Rlc3RfZW51bS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZGI0MDQwCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9lbnVtLnB5CkBAIC0wLDAgKzEsMTYxMiBAQAoraW1wb3J0IGVudW0KK2ltcG9ydCBpbnNwZWN0CitpbXBvcnQgcHlkb2MKK2ltcG9ydCB1bml0dGVzdAorZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgT3JkZXJlZERpY3QKK2Zyb20gZW51bSBpbXBvcnQgRW51bSwgSW50RW51bSwgRW51bU1ldGEsIHVuaXF1ZQorZnJvbSBpbyBpbXBvcnQgU3RyaW5nSU8KK2Zyb20gcGlja2xlIGltcG9ydCBkdW1wcywgbG9hZHMsIFBpY2tsaW5nRXJyb3IsIEhJR0hFU1RfUFJPVE9DT0wKKworIyBmb3IgcGlja2xlIHRlc3RzCit0cnk6CisgICAgY2xhc3MgU3Rvb2dlcyhFbnVtKToKKyAgICAgICAgTEFSUlkgPSAxCisgICAgICAgIENVUkxZID0gMgorICAgICAgICBNT0UgPSAzCitleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICBTdG9vZ2VzID0gZXhjCisKK3RyeToKKyAgICBjbGFzcyBJbnRTdG9vZ2VzKGludCwgRW51bSk6CisgICAgICAgIExBUlJZID0gMQorICAgICAgICBDVVJMWSA9IDIKKyAgICAgICAgTU9FID0gMworZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgSW50U3Rvb2dlcyA9IGV4YworCit0cnk6CisgICAgY2xhc3MgRmxvYXRTdG9vZ2VzKGZsb2F0LCBFbnVtKToKKyAgICAgICAgTEFSUlkgPSAxLjM5CisgICAgICAgIENVUkxZID0gMi43MgorICAgICAgICBNT0UgPSAzLjE0MjU5NgorZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgRmxvYXRTdG9vZ2VzID0gZXhjCisKKyMgZm9yIHBpY2tsZSB0ZXN0IGFuZCBzdWJjbGFzcyB0ZXN0cwordHJ5OgorICAgIGNsYXNzIFN0ckVudW0oc3RyLCBFbnVtKToKKyAgICAgICAgJ2FjY2VwdHMgb25seSBzdHJpbmcgdmFsdWVzJworICAgIGNsYXNzIE5hbWUoU3RyRW51bSk6CisgICAgICAgIEJERkwgPSAnR3VpZG8gdmFuIFJvc3N1bScKKyAgICAgICAgRkxVRkwgPSAnQmFycnkgV2Fyc2F3JworZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgTmFtZSA9IGV4YworCit0cnk6CisgICAgUXVlc3Rpb24gPSBFbnVtKCdRdWVzdGlvbicsICd3aG8gd2hhdCB3aGVuIHdoZXJlIHdoeScsIG1vZHVsZT1fX25hbWVfXykKK2V4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgIFF1ZXN0aW9uID0gZXhjCisKK3RyeToKKyAgICBBbnN3ZXIgPSBFbnVtKCdBbnN3ZXInLCAnaGltIHRoaXMgdGhlbiB0aGVyZSBiZWNhdXNlJykKK2V4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgIEFuc3dlciA9IGV4YworCit0cnk6CisgICAgVGhlb3J5ID0gRW51bSgnVGhlb3J5JywgJ3J1bGUgbGF3IHN1cHBvc2l0aW9uJywgcXVhbG5hbWU9J3NwYW5pc2hfaW5xdWlzaXRpb24nKQorZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgVGhlb3J5ID0gZXhjCisKKyMgZm9yIGRvY3Rlc3RzCit0cnk6CisgICAgY2xhc3MgRnJ1aXQoRW51bSk6CisgICAgICAgIHRvbWF0byA9IDEKKyAgICAgICAgYmFuYW5hID0gMgorICAgICAgICBjaGVycnkgPSAzCitleGNlcHQgRXhjZXB0aW9uOgorICAgIHBhc3MKKworZGVmIHRlc3RfcGlja2xlX2R1bXBfbG9hZChhc3NlcnRpb24sIHNvdXJjZSwgdGFyZ2V0PU5vbmUsCisgICAgICAgICosIHByb3RvY29sPSgwLCBISUdIRVNUX1BST1RPQ09MKSk6CisgICAgc3RhcnQsIHN0b3AgPSBwcm90b2NvbAorICAgIGlmIHRhcmdldCBpcyBOb25lOgorICAgICAgICB0YXJnZXQgPSBzb3VyY2UKKyAgICBmb3IgcHJvdG9jb2wgaW4gcmFuZ2Uoc3RhcnQsIHN0b3ArMSk6CisgICAgICAgIGFzc2VydGlvbihsb2FkcyhkdW1wcyhzb3VyY2UsIHByb3RvY29sPXByb3RvY29sKSksIHRhcmdldCkKKworZGVmIHRlc3RfcGlja2xlX2V4Y2VwdGlvbihhc3NlcnRpb24sIGV4Y2VwdGlvbiwgb2JqLAorICAgICAgICAqLCBwcm90b2NvbD0oMCwgSElHSEVTVF9QUk9UT0NPTCkpOgorICAgIHN0YXJ0LCBzdG9wID0gcHJvdG9jb2wKKyAgICBmb3IgcHJvdG9jb2wgaW4gcmFuZ2Uoc3RhcnQsIHN0b3ArMSk6CisgICAgICAgIHdpdGggYXNzZXJ0aW9uKGV4Y2VwdGlvbik6CisgICAgICAgICAgICBkdW1wcyhvYmosIHByb3RvY29sPXByb3RvY29sKQorCitjbGFzcyBUZXN0SGVscGVycyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIyBfaXNfZGVzY3JpcHRvciwgX2lzX3N1bmRlciwgX2lzX2R1bmRlcgorCisgICAgZGVmIHRlc3RfaXNfZGVzY3JpcHRvcihzZWxmKToKKyAgICAgICAgY2xhc3MgZm9vOgorICAgICAgICAgICAgcGFzcworICAgICAgICBmb3IgYXR0ciBpbiAoJ19fZ2V0X18nLCdfX3NldF9fJywnX19kZWxldGVfXycpOgorICAgICAgICAgICAgb2JqID0gZm9vKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZW51bS5faXNfZGVzY3JpcHRvcihvYmopKQorICAgICAgICAgICAgc2V0YXR0cihvYmosIGF0dHIsIDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZW51bS5faXNfZGVzY3JpcHRvcihvYmopKQorCisgICAgZGVmIHRlc3RfaXNfc3VuZGVyKHNlbGYpOgorICAgICAgICBmb3IgcyBpbiAoJ19hXycsICdfYWFfJyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZW51bS5faXNfc3VuZGVyKHMpKQorCisgICAgICAgIGZvciBzIGluICgnYScsICdhXycsICdfYScsICdfX2EnLCAnYV9fJywgJ19fYV9fJywgJ19hX18nLCAnX19hXycsICdfJywKKyAgICAgICAgICAgICAgICAnX18nLCAnX19fJywgJ19fX18nLCAnX19fX18nLCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGVudW0uX2lzX3N1bmRlcihzKSkKKworICAgIGRlZiB0ZXN0X2lzX2R1bmRlcihzZWxmKToKKyAgICAgICAgZm9yIHMgaW4gKCdfX2FfXycsICdfX2FhX18nKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlbnVtLl9pc19kdW5kZXIocykpCisgICAgICAgIGZvciBzIGluICgnYScsICdhXycsICdfYScsICdfX2EnLCAnYV9fJywgJ19hXycsICdfYV9fJywgJ19fYV8nLCAnXycsCisgICAgICAgICAgICAgICAgJ19fJywgJ19fXycsICdfX19fJywgJ19fX19fJywpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShlbnVtLl9pc19kdW5kZXIocykpCisKKworY2xhc3MgVGVzdEVudW0odW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBjbGFzcyBTZWFzb24oRW51bSk6CisgICAgICAgICAgICBTUFJJTkcgPSAxCisgICAgICAgICAgICBTVU1NRVIgPSAyCisgICAgICAgICAgICBBVVRVTU4gPSAzCisgICAgICAgICAgICBXSU5URVIgPSA0CisgICAgICAgIHNlbGYuU2Vhc29uID0gU2Vhc29uCisKKyAgICAgICAgY2xhc3MgS29uc3RhbnRzKGZsb2F0LCBFbnVtKToKKyAgICAgICAgICAgIEUgPSAyLjcxODI4MTgKKyAgICAgICAgICAgIFBJID0gMy4xNDE1OTI2CisgICAgICAgICAgICBUQVUgPSAyICogUEkKKyAgICAgICAgc2VsZi5Lb25zdGFudHMgPSBLb25zdGFudHMKKworICAgICAgICBjbGFzcyBHcmFkZXMoSW50RW51bSk6CisgICAgICAgICAgICBBID0gNQorICAgICAgICAgICAgQiA9IDQKKyAgICAgICAgICAgIEMgPSAzCisgICAgICAgICAgICBEID0gMgorICAgICAgICAgICAgRiA9IDAKKyAgICAgICAgc2VsZi5HcmFkZXMgPSBHcmFkZXMKKworICAgICAgICBjbGFzcyBEaXJlY3Rpb25hbChzdHIsIEVudW0pOgorICAgICAgICAgICAgRUFTVCA9ICdlYXN0JworICAgICAgICAgICAgV0VTVCA9ICd3ZXN0JworICAgICAgICAgICAgTk9SVEggPSAnbm9ydGgnCisgICAgICAgICAgICBTT1VUSCA9ICdzb3V0aCcKKyAgICAgICAgc2VsZi5EaXJlY3Rpb25hbCA9IERpcmVjdGlvbmFsCisKKyAgICAgICAgZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZQorICAgICAgICBjbGFzcyBIb2xpZGF5KGRhdGUsIEVudW0pOgorICAgICAgICAgICAgTkVXX1lFQVIgPSAyMDEzLCAxLCAxCisgICAgICAgICAgICBJREVTX09GX01BUkNIID0gMjAxMywgMywgMTUKKyAgICAgICAgc2VsZi5Ib2xpZGF5ID0gSG9saWRheQorCisgICAgZGVmIHRlc3RfZGlyX29uX2NsYXNzKHNlbGYpOgorICAgICAgICBTZWFzb24gPSBzZWxmLlNlYXNvbgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgc2V0KGRpcihTZWFzb24pKSwKKyAgICAgICAgICAgIHNldChbJ19fY2xhc3NfXycsICdfX2RvY19fJywgJ19fbWVtYmVyc19fJywgJ19fbW9kdWxlX18nLAorICAgICAgICAgICAgICAgICdTUFJJTkcnLCAnU1VNTUVSJywgJ0FVVFVNTicsICdXSU5URVInXSksCisgICAgICAgICAgICApCisKKyAgICBkZWYgdGVzdF9kaXJfb25faXRlbShzZWxmKToKKyAgICAgICAgU2Vhc29uID0gc2VsZi5TZWFzb24KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHNldChkaXIoU2Vhc29uLldJTlRFUikpLAorICAgICAgICAgICAgc2V0KFsnX19jbGFzc19fJywgJ19fZG9jX18nLCAnX19tb2R1bGVfXycsICduYW1lJywgJ3ZhbHVlJ10pLAorICAgICAgICAgICAgKQorCisgICAgZGVmIHRlc3RfZGlyX3dpdGhfYWRkZWRfYmVoYXZpb3Ioc2VsZik6CisgICAgICAgIGNsYXNzIFRlc3QoRW51bSk6CisgICAgICAgICAgICB0aGlzID0gJ3RoYXQnCisgICAgICAgICAgICB0aGVzZSA9ICd0aG9zZScKKyAgICAgICAgICAgIGRlZiB3b3dzZXIoc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICgiV293c2VyISBJJ20gJXMhIiAlIHNlbGYubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICBzZXQoZGlyKFRlc3QpKSwKKyAgICAgICAgICAgICAgICBzZXQoWydfX2NsYXNzX18nLCAnX19kb2NfXycsICdfX21lbWJlcnNfXycsICdfX21vZHVsZV9fJywgJ3RoaXMnLCAndGhlc2UnXSksCisgICAgICAgICAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgIHNldChkaXIoVGVzdC50aGlzKSksCisgICAgICAgICAgICAgICAgc2V0KFsnX19jbGFzc19fJywgJ19fZG9jX18nLCAnX19tb2R1bGVfXycsICduYW1lJywgJ3ZhbHVlJywgJ3dvd3NlciddKSwKKyAgICAgICAgICAgICAgICApCisKKyAgICBkZWYgdGVzdF9kaXJfb25fc3ViX3dpdGhfYmVoYXZpb3Jfb25fc3VwZXIoc2VsZik6CisgICAgICAgICMgc2VlIGlzc3VlMjI1MDYKKyAgICAgICAgY2xhc3MgU3VwZXJFbnVtKEVudW0pOgorICAgICAgICAgICAgZGVmIGludmlzaWJsZShzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gImRpZCB5b3Ugc2VlIG1lPyIKKyAgICAgICAgY2xhc3MgU3ViRW51bShTdXBlckVudW0pOgorICAgICAgICAgICAgc2FtcGxlID0gNQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgIHNldChkaXIoU3ViRW51bS5zYW1wbGUpKSwKKyAgICAgICAgICAgICAgICBzZXQoWydfX2NsYXNzX18nLCAnX19kb2NfXycsICdfX21vZHVsZV9fJywgJ25hbWUnLCAndmFsdWUnLCAnaW52aXNpYmxlJ10pLAorICAgICAgICAgICAgICAgICkKKworICAgIGRlZiB0ZXN0X2VudW1faW5fZW51bV9vdXQoc2VsZik6CisgICAgICAgIFNlYXNvbiA9IHNlbGYuU2Vhc29uCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoU2Vhc29uKFNlYXNvbi5XSU5URVIpLCBTZWFzb24uV0lOVEVSKQorCisgICAgZGVmIHRlc3RfZW51bV92YWx1ZShzZWxmKToKKyAgICAgICAgU2Vhc29uID0gc2VsZi5TZWFzb24KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChTZWFzb24uU1BSSU5HLnZhbHVlLCAxKQorCisgICAgZGVmIHRlc3RfaW50ZW51bV92YWx1ZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChJbnRTdG9vZ2VzLkNVUkxZLnZhbHVlLCAyKQorCisgICAgZGVmIHRlc3RfZW51bShzZWxmKToKKyAgICAgICAgU2Vhc29uID0gc2VsZi5TZWFzb24KKyAgICAgICAgbHN0ID0gbGlzdChTZWFzb24pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGxzdCksIGxlbihTZWFzb24pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihTZWFzb24pLCA0LCBTZWFzb24pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBbU2Vhc29uLlNQUklORywgU2Vhc29uLlNVTU1FUiwgU2Vhc29uLkFVVFVNTiwgU2Vhc29uLldJTlRFUl0sIGxzdCkKKworICAgICAgICBmb3IgaSwgc2Vhc29uIGluIGVudW1lcmF0ZSgnU1BSSU5HIFNVTU1FUiBBVVRVTU4gV0lOVEVSJy5zcGxpdCgpLCAxKToKKyAgICAgICAgICAgIGUgPSBTZWFzb24oaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZSwgZ2V0YXR0cihTZWFzb24sIHNlYXNvbikpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUudmFsdWUsIGkpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGUsIGkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUubmFtZSwgc2Vhc29uKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlLCBTZWFzb24pCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUoZSksIFNlYXNvbikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShlLCBTZWFzb24pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlKSwgJ1NlYXNvbi4nICsgc2Vhc29uKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICAgICAgcmVwcihlKSwKKyAgICAgICAgICAgICAgICAgICAgJzxTZWFzb24uezB9OiB7MX0+Jy5mb3JtYXQoc2Vhc29uLCBpKSwKKyAgICAgICAgICAgICAgICAgICAgKQorCisgICAgZGVmIHRlc3RfdmFsdWVfbmFtZShzZWxmKToKKyAgICAgICAgU2Vhc29uID0gc2VsZi5TZWFzb24KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChTZWFzb24uU1BSSU5HLm5hbWUsICdTUFJJTkcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFNlYXNvbi5TUFJJTkcudmFsdWUsIDEpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IpOgorICAgICAgICAgICAgU2Vhc29uLlNQUklORy5uYW1lID0gJ2ludmllcm5vJworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yKToKKyAgICAgICAgICAgIFNlYXNvbi5TUFJJTkcudmFsdWUgPSAyCisKKyAgICBkZWYgdGVzdF9jaGFuZ2luZ19tZW1iZXIoc2VsZik6CisgICAgICAgIFNlYXNvbiA9IHNlbGYuU2Vhc29uCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IpOgorICAgICAgICAgICAgU2Vhc29uLldJTlRFUiA9ICdyZWFsbHkgY29sZCcKKworICAgIGRlZiB0ZXN0X2F0dHJpYnV0ZV9kZWxldGlvbihzZWxmKToKKyAgICAgICAgY2xhc3MgU2Vhc29uKEVudW0pOgorICAgICAgICAgICAgU1BSSU5HID0gMQorICAgICAgICAgICAgU1VNTUVSID0gMgorICAgICAgICAgICAgQVVUVU1OID0gMworICAgICAgICAgICAgV0lOVEVSID0gNAorCisgICAgICAgICAgICBkZWYgc3BhbShjbHMpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihTZWFzb24sICdzcGFtJykpCisgICAgICAgIGRlbCBTZWFzb24uc3BhbQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIoU2Vhc29uLCAnc3BhbScpKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IpOgorICAgICAgICAgICAgZGVsIFNlYXNvbi5TUFJJTkcKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvcik6CisgICAgICAgICAgICBkZWwgU2Vhc29uLkRSWQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yKToKKyAgICAgICAgICAgIGRlbCBTZWFzb24uU1BSSU5HLm5hbWUKKworICAgIGRlZiB0ZXN0X2ludmFsaWRfbmFtZXMoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBjbGFzcyBXcm9uZyhFbnVtKToKKyAgICAgICAgICAgICAgICBtcm8gPSA5CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBjbGFzcyBXcm9uZyhFbnVtKToKKyAgICAgICAgICAgICAgICBfY3JlYXRlXz0gMTEKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGNsYXNzIFdyb25nKEVudW0pOgorICAgICAgICAgICAgICAgIF9nZXRfbWl4aW5zXyA9IDkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGNsYXNzIFdyb25nKEVudW0pOgorICAgICAgICAgICAgICAgIF9maW5kX25ld18gPSAxCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBjbGFzcyBXcm9uZyhFbnVtKToKKyAgICAgICAgICAgICAgICBfYW55X25hbWVfID0gOQorCisgICAgZGVmIHRlc3RfY29udGFpbnMoc2VsZik6CisgICAgICAgIFNlYXNvbiA9IHNlbGYuU2Vhc29uCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oU2Vhc29uLkFVVFVNTiwgU2Vhc29uKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKDMsIFNlYXNvbikKKworICAgICAgICB2YWwgPSBTZWFzb24oMykKKyAgICAgICAgc2VsZi5hc3NlcnRJbih2YWwsIFNlYXNvbikKKworICAgICAgICBjbGFzcyBPdGhlckVudW0oRW51bSk6CisgICAgICAgICAgICBvbmUgPSAxOyB0d28gPSAyCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oT3RoZXJFbnVtLnR3bywgU2Vhc29uKQorCisgICAgZGVmIHRlc3RfY29tcGFyaXNvbnMoc2VsZik6CisgICAgICAgIFNlYXNvbiA9IHNlbGYuU2Vhc29uCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIFNlYXNvbi5TUFJJTkcgPCBTZWFzb24uV0lOVEVSCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIFNlYXNvbi5TUFJJTkcgPiA0CisKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChTZWFzb24uU1BSSU5HLCAxKQorCisgICAgICAgIGNsYXNzIFBhcnQoRW51bSk6CisgICAgICAgICAgICBTUFJJTkcgPSAxCisgICAgICAgICAgICBDTElQID0gMgorICAgICAgICAgICAgQkFSUkVMID0gMworCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoU2Vhc29uLlNQUklORywgUGFydC5TUFJJTkcpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIFNlYXNvbi5TUFJJTkcgPCBQYXJ0LkNMSVAKKworICAgIGRlZiB0ZXN0X2VudW1fZHVwbGljYXRlcyhzZWxmKToKKyAgICAgICAgY2xhc3MgU2Vhc29uKEVudW0pOgorICAgICAgICAgICAgU1BSSU5HID0gMQorICAgICAgICAgICAgU1VNTUVSID0gMgorICAgICAgICAgICAgQVVUVU1OID0gRkFMTCA9IDMKKyAgICAgICAgICAgIFdJTlRFUiA9IDQKKyAgICAgICAgICAgIEFOT1RIRVJfU1BSSU5HID0gMQorICAgICAgICBsc3QgPSBsaXN0KFNlYXNvbikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGxzdCwKKyAgICAgICAgICAgIFtTZWFzb24uU1BSSU5HLCBTZWFzb24uU1VNTUVSLAorICAgICAgICAgICAgIFNlYXNvbi5BVVRVTU4sIFNlYXNvbi5XSU5URVIsCisgICAgICAgICAgICBdKQorICAgICAgICBzZWxmLmFzc2VydElzKFNlYXNvbi5GQUxMLCBTZWFzb24uQVVUVU1OKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFNlYXNvbi5GQUxMLnZhbHVlLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFNlYXNvbi5BVVRVTU4udmFsdWUsIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoU2Vhc29uKDMpLCBTZWFzb24uQVVUVU1OKQorICAgICAgICBzZWxmLmFzc2VydElzKFNlYXNvbigxKSwgU2Vhc29uLlNQUklORykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChTZWFzb24uRkFMTC5uYW1lLCAnQVVUVU1OJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICBbayBmb3Igayx2IGluIFNlYXNvbi5fX21lbWJlcnNfXy5pdGVtcygpIGlmIHYubmFtZSAhPSBrXSwKKyAgICAgICAgICAgICAgICBbJ0ZBTEwnLCAnQU5PVEhFUl9TUFJJTkcnXSwKKyAgICAgICAgICAgICAgICApCisKKyAgICBkZWYgdGVzdF9kdXBsaWNhdGVfbmFtZShzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgY2xhc3MgQ29sb3IoRW51bSk6CisgICAgICAgICAgICAgICAgcmVkID0gMQorICAgICAgICAgICAgICAgIGdyZWVuID0gMgorICAgICAgICAgICAgICAgIGJsdWUgPSAzCisgICAgICAgICAgICAgICAgcmVkID0gNAorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGNsYXNzIENvbG9yKEVudW0pOgorICAgICAgICAgICAgICAgIHJlZCA9IDEKKyAgICAgICAgICAgICAgICBncmVlbiA9IDIKKyAgICAgICAgICAgICAgICBibHVlID0gMworICAgICAgICAgICAgICAgIGRlZiByZWQoc2VsZik6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAncmVkJworCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGNsYXNzIENvbG9yKEVudW0pOgorICAgICAgICAgICAgICAgIEBwcm9wZXJ0eQorICAgICAgICAgICAgICAgIGRlZiByZWQoc2VsZik6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAncmVkZGVyJworICAgICAgICAgICAgICAgIHJlZCA9IDEKKyAgICAgICAgICAgICAgICBncmVlbiA9IDIKKyAgICAgICAgICAgICAgICBibHVlID0gMworCisKKyAgICBkZWYgdGVzdF9lbnVtX3dpdGhfdmFsdWVfbmFtZShzZWxmKToKKyAgICAgICAgY2xhc3MgSHVoKEVudW0pOgorICAgICAgICAgICAgbmFtZSA9IDEKKyAgICAgICAgICAgIHZhbHVlID0gMgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgbGlzdChIdWgpLAorICAgICAgICAgICAgW0h1aC5uYW1lLCBIdWgudmFsdWVdLAorICAgICAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUoSHVoLm5hbWUpLCBIdWgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoSHVoLm5hbWUubmFtZSwgJ25hbWUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEh1aC5uYW1lLnZhbHVlLCAxKQorCisgICAgZGVmIHRlc3RfZm9ybWF0X2VudW0oc2VsZik6CisgICAgICAgIFNlYXNvbiA9IHNlbGYuU2Vhc29uCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3t9Jy5mb3JtYXQoU2Vhc29uLlNQUklORyksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3t9Jy5mb3JtYXQoc3RyKFNlYXNvbi5TUFJJTkcpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCggJ3s6fScuZm9ybWF0KFNlYXNvbi5TUFJJTkcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAnezp9Jy5mb3JtYXQoc3RyKFNlYXNvbi5TUFJJTkcpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezoyMH0nLmZvcm1hdChTZWFzb24uU1BSSU5HKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnezoyMH0nLmZvcm1hdChzdHIoU2Vhc29uLlNQUklORykpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7Ol4yMH0nLmZvcm1hdChTZWFzb24uU1BSSU5HKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnezpeMjB9Jy5mb3JtYXQoc3RyKFNlYXNvbi5TUFJJTkcpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezo+MjB9Jy5mb3JtYXQoU2Vhc29uLlNQUklORyksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3s6PjIwfScuZm9ybWF0KHN0cihTZWFzb24uU1BSSU5HKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3s6PDIwfScuZm9ybWF0KFNlYXNvbi5TUFJJTkcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICd7OjwyMH0nLmZvcm1hdChzdHIoU2Vhc29uLlNQUklORykpKQorCisgICAgZGVmIHRlc3RfZm9ybWF0X2VudW1fY3VzdG9tKHNlbGYpOgorICAgICAgICBjbGFzcyBUZXN0RmxvYXQoZmxvYXQsIEVudW0pOgorICAgICAgICAgICAgb25lID0gMS4wCisgICAgICAgICAgICB0d28gPSAyLjAKKyAgICAgICAgICAgIGRlZiBfX2Zvcm1hdF9fKHNlbGYsIHNwZWMpOgorICAgICAgICAgICAgICAgIHJldHVybiAnVGVzdEZsb2F0IHN1Y2Nlc3MhJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7fScuZm9ybWF0KFRlc3RGbG9hdC5vbmUpLCAnVGVzdEZsb2F0IHN1Y2Nlc3MhJykKKworICAgIGRlZiBhc3NlcnRGb3JtYXRJc1ZhbHVlKHNlbGYsIHNwZWMsIG1lbWJlcik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5mb3JtYXQobWVtYmVyKSwgc3BlYy5mb3JtYXQobWVtYmVyLnZhbHVlKSkKKworICAgIGRlZiB0ZXN0X2Zvcm1hdF9lbnVtX2RhdGUoc2VsZik6CisgICAgICAgIEhvbGlkYXkgPSBzZWxmLkhvbGlkYXkKKyAgICAgICAgc2VsZi5hc3NlcnRGb3JtYXRJc1ZhbHVlKCd7fScsIEhvbGlkYXkuSURFU19PRl9NQVJDSCkKKyAgICAgICAgc2VsZi5hc3NlcnRGb3JtYXRJc1ZhbHVlKCd7On0nLCBIb2xpZGF5LklERVNfT0ZfTUFSQ0gpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezoyMH0nLCBIb2xpZGF5LklERVNfT0ZfTUFSQ0gpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezpeMjB9JywgSG9saWRheS5JREVTX09GX01BUkNIKQorICAgICAgICBzZWxmLmFzc2VydEZvcm1hdElzVmFsdWUoJ3s6PjIwfScsIEhvbGlkYXkuSURFU19PRl9NQVJDSCkKKyAgICAgICAgc2VsZi5hc3NlcnRGb3JtYXRJc1ZhbHVlKCd7OjwyMH0nLCBIb2xpZGF5LklERVNfT0ZfTUFSQ0gpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezolWSAlbX0nLCBIb2xpZGF5LklERVNfT0ZfTUFSQ0gpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezolWSAlbSAlTTowMH0nLCBIb2xpZGF5LklERVNfT0ZfTUFSQ0gpCisKKyAgICBkZWYgdGVzdF9mb3JtYXRfZW51bV9mbG9hdChzZWxmKToKKyAgICAgICAgS29uc3RhbnRzID0gc2VsZi5Lb25zdGFudHMKKyAgICAgICAgc2VsZi5hc3NlcnRGb3JtYXRJc1ZhbHVlKCd7fScsIEtvbnN0YW50cy5UQVUpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezp9JywgS29uc3RhbnRzLlRBVSkKKyAgICAgICAgc2VsZi5hc3NlcnRGb3JtYXRJc1ZhbHVlKCd7OjIwfScsIEtvbnN0YW50cy5UQVUpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezpeMjB9JywgS29uc3RhbnRzLlRBVSkKKyAgICAgICAgc2VsZi5hc3NlcnRGb3JtYXRJc1ZhbHVlKCd7Oj4yMH0nLCBLb25zdGFudHMuVEFVKQorICAgICAgICBzZWxmLmFzc2VydEZvcm1hdElzVmFsdWUoJ3s6PDIwfScsIEtvbnN0YW50cy5UQVUpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezpufScsIEtvbnN0YW50cy5UQVUpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezo1LjJ9JywgS29uc3RhbnRzLlRBVSkKKyAgICAgICAgc2VsZi5hc3NlcnRGb3JtYXRJc1ZhbHVlKCd7OmZ9JywgS29uc3RhbnRzLlRBVSkKKworICAgIGRlZiB0ZXN0X2Zvcm1hdF9lbnVtX2ludChzZWxmKToKKyAgICAgICAgR3JhZGVzID0gc2VsZi5HcmFkZXMKKyAgICAgICAgc2VsZi5hc3NlcnRGb3JtYXRJc1ZhbHVlKCd7fScsIEdyYWRlcy5DKQorICAgICAgICBzZWxmLmFzc2VydEZvcm1hdElzVmFsdWUoJ3s6fScsIEdyYWRlcy5DKQorICAgICAgICBzZWxmLmFzc2VydEZvcm1hdElzVmFsdWUoJ3s6MjB9JywgR3JhZGVzLkMpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezpeMjB9JywgR3JhZGVzLkMpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezo+MjB9JywgR3JhZGVzLkMpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezo8MjB9JywgR3JhZGVzLkMpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezorfScsIEdyYWRlcy5DKQorICAgICAgICBzZWxmLmFzc2VydEZvcm1hdElzVmFsdWUoJ3s6MDhYfScsIEdyYWRlcy5DKQorICAgICAgICBzZWxmLmFzc2VydEZvcm1hdElzVmFsdWUoJ3s6Yn0nLCBHcmFkZXMuQykKKworICAgIGRlZiB0ZXN0X2Zvcm1hdF9lbnVtX3N0cihzZWxmKToKKyAgICAgICAgRGlyZWN0aW9uYWwgPSBzZWxmLkRpcmVjdGlvbmFsCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgne30nLCBEaXJlY3Rpb25hbC5XRVNUKQorICAgICAgICBzZWxmLmFzc2VydEZvcm1hdElzVmFsdWUoJ3s6fScsIERpcmVjdGlvbmFsLldFU1QpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezoyMH0nLCBEaXJlY3Rpb25hbC5XRVNUKQorICAgICAgICBzZWxmLmFzc2VydEZvcm1hdElzVmFsdWUoJ3s6XjIwfScsIERpcmVjdGlvbmFsLldFU1QpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezo+MjB9JywgRGlyZWN0aW9uYWwuV0VTVCkKKyAgICAgICAgc2VsZi5hc3NlcnRGb3JtYXRJc1ZhbHVlKCd7OjwyMH0nLCBEaXJlY3Rpb25hbC5XRVNUKQorCisgICAgZGVmIHRlc3RfaGFzaChzZWxmKToKKyAgICAgICAgU2Vhc29uID0gc2VsZi5TZWFzb24KKyAgICAgICAgZGF0ZXMgPSB7fQorICAgICAgICBkYXRlc1tTZWFzb24uV0lOVEVSXSA9ICcxMjI1JworICAgICAgICBkYXRlc1tTZWFzb24uU1BSSU5HXSA9ICcwMzE1JworICAgICAgICBkYXRlc1tTZWFzb24uU1VNTUVSXSA9ICcwNzA0JworICAgICAgICBkYXRlc1tTZWFzb24uQVVUVU1OXSA9ICcxMDMxJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGVzW1NlYXNvbi5BVVRVTU5dLCAnMTAzMScpCisKKyAgICBkZWYgdGVzdF9pbnRlbnVtX2Zyb21fc2NyYXRjaChzZWxmKToKKyAgICAgICAgY2xhc3MgcGh5KGludCwgRW51bSk6CisgICAgICAgICAgICBwaSA9IDMKKyAgICAgICAgICAgIHRhdSA9IDIgKiBwaQorICAgICAgICBzZWxmLmFzc2VydFRydWUocGh5LnBpIDwgcGh5LnRhdSkKKworICAgIGRlZiB0ZXN0X2ludGVudW1faW5oZXJpdGVkKHNlbGYpOgorICAgICAgICBjbGFzcyBJbnRFbnVtKGludCwgRW51bSk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGNsYXNzIHBoeShJbnRFbnVtKToKKyAgICAgICAgICAgIHBpID0gMworICAgICAgICAgICAgdGF1ID0gMiAqIHBpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwaHkucGkgPCBwaHkudGF1KQorCisgICAgZGVmIHRlc3RfZmxvYXRlbnVtX2Zyb21fc2NyYXRjaChzZWxmKToKKyAgICAgICAgY2xhc3MgcGh5KGZsb2F0LCBFbnVtKToKKyAgICAgICAgICAgIHBpID0gMy4xNDE1OTI2CisgICAgICAgICAgICB0YXUgPSAyICogcGkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBoeS5waSA8IHBoeS50YXUpCisKKyAgICBkZWYgdGVzdF9mbG9hdGVudW1faW5oZXJpdGVkKHNlbGYpOgorICAgICAgICBjbGFzcyBGbG9hdEVudW0oZmxvYXQsIEVudW0pOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjbGFzcyBwaHkoRmxvYXRFbnVtKToKKyAgICAgICAgICAgIHBpID0gMy4xNDE1OTI2CisgICAgICAgICAgICB0YXUgPSAyICogcGkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBoeS5waSA8IHBoeS50YXUpCisKKyAgICBkZWYgdGVzdF9zdHJlbnVtX2Zyb21fc2NyYXRjaChzZWxmKToKKyAgICAgICAgY2xhc3MgcGh5KHN0ciwgRW51bSk6CisgICAgICAgICAgICBwaSA9ICdQaScKKyAgICAgICAgICAgIHRhdSA9ICdUYXUnCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwaHkucGkgPCBwaHkudGF1KQorCisgICAgZGVmIHRlc3Rfc3RyZW51bV9pbmhlcml0ZWQoc2VsZik6CisgICAgICAgIGNsYXNzIFN0ckVudW0oc3RyLCBFbnVtKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY2xhc3MgcGh5KFN0ckVudW0pOgorICAgICAgICAgICAgcGkgPSAnUGknCisgICAgICAgICAgICB0YXUgPSAnVGF1JworICAgICAgICBzZWxmLmFzc2VydFRydWUocGh5LnBpIDwgcGh5LnRhdSkKKworCisgICAgZGVmIHRlc3RfaW50ZW51bShzZWxmKToKKyAgICAgICAgY2xhc3MgV2Vla0RheShJbnRFbnVtKToKKyAgICAgICAgICAgIFNVTkRBWSA9IDEKKyAgICAgICAgICAgIE1PTkRBWSA9IDIKKyAgICAgICAgICAgIFRVRVNEQVkgPSAzCisgICAgICAgICAgICBXRURORVNEQVkgPSA0CisgICAgICAgICAgICBUSFVSU0RBWSA9IDUKKyAgICAgICAgICAgIEZSSURBWSA9IDYKKyAgICAgICAgICAgIFNBVFVSREFZID0gNworCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWydhJywgJ2InLCAnYyddW1dlZWtEYXkuTU9OREFZXSwgJ2MnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtpIGZvciBpIGluIHJhbmdlKFdlZWtEYXkuVFVFU0RBWSldLCBbMCwgMSwgMl0pCisKKyAgICAgICAgbHN0ID0gbGlzdChXZWVrRGF5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsc3QpLCBsZW4oV2Vla0RheSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKFdlZWtEYXkpLCA3KQorICAgICAgICB0YXJnZXQgPSAnU1VOREFZIE1PTkRBWSBUVUVTREFZIFdFRE5FU0RBWSBUSFVSU0RBWSBGUklEQVkgU0FUVVJEQVknCisgICAgICAgIHRhcmdldCA9IHRhcmdldC5zcGxpdCgpCisgICAgICAgIGZvciBpLCB3ZWVrZGF5IGluIGVudW1lcmF0ZSh0YXJnZXQsIDEpOgorICAgICAgICAgICAgZSA9IFdlZWtEYXkoaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZSwgaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KGUpLCBpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLm5hbWUsIHdlZWtkYXkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGUsIFdlZWtEYXkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxzdC5pbmRleChlKSsxLCBpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDAgPCBlIDwgOCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShlKSwgV2Vla0RheSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShlLCBpbnQpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZSwgRW51bSkKKworICAgIGRlZiB0ZXN0X2ludGVudW1fZHVwbGljYXRlcyhzZWxmKToKKyAgICAgICAgY2xhc3MgV2Vla0RheShJbnRFbnVtKToKKyAgICAgICAgICAgIFNVTkRBWSA9IDEKKyAgICAgICAgICAgIE1PTkRBWSA9IDIKKyAgICAgICAgICAgIFRVRVNEQVkgPSBURVVTREFZID0gMworICAgICAgICAgICAgV0VETkVTREFZID0gNAorICAgICAgICAgICAgVEhVUlNEQVkgPSA1CisgICAgICAgICAgICBGUklEQVkgPSA2CisgICAgICAgICAgICBTQVRVUkRBWSA9IDcKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhXZWVrRGF5LlRFVVNEQVksIFdlZWtEYXkuVFVFU0RBWSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChXZWVrRGF5KDMpLm5hbWUsICdUVUVTREFZJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbayBmb3Igayx2IGluIFdlZWtEYXkuX19tZW1iZXJzX18uaXRlbXMoKQorICAgICAgICAgICAgICAgIGlmIHYubmFtZSAhPSBrXSwgWydURVVTREFZJywgXSkKKworICAgIGRlZiB0ZXN0X3BpY2tsZV9lbnVtKHNlbGYpOgorICAgICAgICBpZiBpc2luc3RhbmNlKFN0b29nZXMsIEV4Y2VwdGlvbik6CisgICAgICAgICAgICByYWlzZSBTdG9vZ2VzCisgICAgICAgIHRlc3RfcGlja2xlX2R1bXBfbG9hZChzZWxmLmFzc2VydElzLCBTdG9vZ2VzLkNVUkxZKQorICAgICAgICB0ZXN0X3BpY2tsZV9kdW1wX2xvYWQoc2VsZi5hc3NlcnRJcywgU3Rvb2dlcykKKworICAgIGRlZiB0ZXN0X3BpY2tsZV9pbnQoc2VsZik6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoSW50U3Rvb2dlcywgRXhjZXB0aW9uKToKKyAgICAgICAgICAgIHJhaXNlIEludFN0b29nZXMKKyAgICAgICAgdGVzdF9waWNrbGVfZHVtcF9sb2FkKHNlbGYuYXNzZXJ0SXMsIEludFN0b29nZXMuQ1VSTFkpCisgICAgICAgIHRlc3RfcGlja2xlX2R1bXBfbG9hZChzZWxmLmFzc2VydElzLCBJbnRTdG9vZ2VzKQorCisgICAgZGVmIHRlc3RfcGlja2xlX2Zsb2F0KHNlbGYpOgorICAgICAgICBpZiBpc2luc3RhbmNlKEZsb2F0U3Rvb2dlcywgRXhjZXB0aW9uKToKKyAgICAgICAgICAgIHJhaXNlIEZsb2F0U3Rvb2dlcworICAgICAgICB0ZXN0X3BpY2tsZV9kdW1wX2xvYWQoc2VsZi5hc3NlcnRJcywgRmxvYXRTdG9vZ2VzLkNVUkxZKQorICAgICAgICB0ZXN0X3BpY2tsZV9kdW1wX2xvYWQoc2VsZi5hc3NlcnRJcywgRmxvYXRTdG9vZ2VzKQorCisgICAgZGVmIHRlc3RfcGlja2xlX2VudW1fZnVuY3Rpb24oc2VsZik6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoQW5zd2VyLCBFeGNlcHRpb24pOgorICAgICAgICAgICAgcmFpc2UgQW5zd2VyCisgICAgICAgIHRlc3RfcGlja2xlX2R1bXBfbG9hZChzZWxmLmFzc2VydElzLCBBbnN3ZXIuaGltKQorICAgICAgICB0ZXN0X3BpY2tsZV9kdW1wX2xvYWQoc2VsZi5hc3NlcnRJcywgQW5zd2VyKQorCisgICAgZGVmIHRlc3RfcGlja2xlX2VudW1fZnVuY3Rpb25fd2l0aF9tb2R1bGUoc2VsZik6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoUXVlc3Rpb24sIEV4Y2VwdGlvbik6CisgICAgICAgICAgICByYWlzZSBRdWVzdGlvbgorICAgICAgICB0ZXN0X3BpY2tsZV9kdW1wX2xvYWQoc2VsZi5hc3NlcnRJcywgUXVlc3Rpb24ud2hvKQorICAgICAgICB0ZXN0X3BpY2tsZV9kdW1wX2xvYWQoc2VsZi5hc3NlcnRJcywgUXVlc3Rpb24pCisKKyAgICBkZWYgdGVzdF9lbnVtX2Z1bmN0aW9uX3dpdGhfcXVhbG5hbWUoc2VsZik6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoVGhlb3J5LCBFeGNlcHRpb24pOgorICAgICAgICAgICAgcmFpc2UgVGhlb3J5CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVGhlb3J5Ll9fcXVhbG5hbWVfXywgJ3NwYW5pc2hfaW5xdWlzaXRpb24nKQorCisgICAgZGVmIHRlc3RfY2xhc3NfbmVzdGVkX2VudW1fYW5kX3BpY2tsZV9wcm90b2NvbF9mb3VyKHNlbGYpOgorICAgICAgICAjIHdvdWxkIG5vcm1hbGx5IGp1c3QgaGF2ZSB0aGlzIGRpcmVjdGx5IGluIHRoZSBjbGFzcyBuYW1lc3BhY2UKKyAgICAgICAgY2xhc3MgTmVzdGVkRW51bShFbnVtKToKKyAgICAgICAgICAgIHR3aWdzID0gJ2NvbW1vbicKKyAgICAgICAgICAgIHNoaW55ID0gJ3JhcmUnCisKKyAgICAgICAgc2VsZi5fX2NsYXNzX18uTmVzdGVkRW51bSA9IE5lc3RlZEVudW0KKyAgICAgICAgc2VsZi5OZXN0ZWRFbnVtLl9fcXVhbG5hbWVfXyA9ICclcy5OZXN0ZWRFbnVtJyAlIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fCisgICAgICAgIHRlc3RfcGlja2xlX2V4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcywgUGlja2xpbmdFcnJvciwgc2VsZi5OZXN0ZWRFbnVtLnR3aWdzLAorICAgICAgICAgICAgICAgIHByb3RvY29sPSgwLCAzKSkKKyAgICAgICAgdGVzdF9waWNrbGVfZHVtcF9sb2FkKHNlbGYuYXNzZXJ0SXMsIHNlbGYuTmVzdGVkRW51bS50d2lncywKKyAgICAgICAgICAgICAgICBwcm90b2NvbD0oNCwgSElHSEVTVF9QUk9UT0NPTCkpCisKKyAgICBkZWYgdGVzdF9waWNrbGVfYnlfbmFtZShzZWxmKToKKyAgICAgICAgY2xhc3MgUmVwbGFjZUdsb2JhbEludChJbnRFbnVtKToKKyAgICAgICAgICAgIE9ORSA9IDEKKyAgICAgICAgICAgIFRXTyA9IDIKKyAgICAgICAgUmVwbGFjZUdsb2JhbEludC5fX3JlZHVjZV9leF9fID0gZW51bS5fcmVkdWNlX2V4X2J5X25hbWUKKyAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKEhJR0hFU1RfUFJPVE9DT0wpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChSZXBsYWNlR2xvYmFsSW50LlRXTy5fX3JlZHVjZV9leF9fKHByb3RvKSwgJ1RXTycpCisKKyAgICBkZWYgdGVzdF9leHBsb2RpbmdfcGlja2xlKHNlbGYpOgorICAgICAgICBCYWRQaWNrbGUgPSBFbnVtKAorICAgICAgICAgICAgICAgICdCYWRQaWNrbGUnLCAnZGlsbCBzd2VldCBicmVhZC1uLWJ1dHRlcicsIG1vZHVsZT1fX25hbWVfXykKKyAgICAgICAgZ2xvYmFscygpWydCYWRQaWNrbGUnXSA9IEJhZFBpY2tsZQorICAgICAgICAjIG5vdyBicmVhayBCYWRQaWNrbGUgdG8gdGVzdCBleGNlcHRpb24gcmFpc2luZworICAgICAgICBlbnVtLl9tYWtlX2NsYXNzX3VucGlja2xhYmxlKEJhZFBpY2tsZSkKKyAgICAgICAgdGVzdF9waWNrbGVfZXhjZXB0aW9uKHNlbGYuYXNzZXJ0UmFpc2VzLCBUeXBlRXJyb3IsIEJhZFBpY2tsZS5kaWxsKQorICAgICAgICB0ZXN0X3BpY2tsZV9leGNlcHRpb24oc2VsZi5hc3NlcnRSYWlzZXMsIFBpY2tsaW5nRXJyb3IsIEJhZFBpY2tsZSkKKworICAgIGRlZiB0ZXN0X3N0cmluZ19lbnVtKHNlbGYpOgorICAgICAgICBjbGFzcyBTa2lsbExldmVsKHN0ciwgRW51bSk6CisgICAgICAgICAgICBtYXN0ZXIgPSAnd2hhdCBpcyB0aGUgc291bmQgb2Ygb25lIGhhbmQgY2xhcHBpbmc/JworICAgICAgICAgICAgam91cm5leW1hbiA9ICd3aHkgZGlkIHRoZSBjaGlja2VuIGNyb3NzIHRoZSByb2FkPycKKyAgICAgICAgICAgIGFwcHJlbnRpY2UgPSAna25vY2ssIGtub2NrIScKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChTa2lsbExldmVsLmFwcHJlbnRpY2UsICdrbm9jaywga25vY2shJykKKworICAgIGRlZiB0ZXN0X2dldGF0dHJfZ2V0aXRlbShzZWxmKToKKyAgICAgICAgY2xhc3MgUGVyaW9kKEVudW0pOgorICAgICAgICAgICAgbW9ybmluZyA9IDEKKyAgICAgICAgICAgIG5vb24gPSAyCisgICAgICAgICAgICBldmVuaW5nID0gMworICAgICAgICAgICAgbmlnaHQgPSA0CisgICAgICAgIHNlbGYuYXNzZXJ0SXMoUGVyaW9kKDIpLCBQZXJpb2Qubm9vbikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhnZXRhdHRyKFBlcmlvZCwgJ25pZ2h0JyksIFBlcmlvZC5uaWdodCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhQZXJpb2RbJ21vcm5pbmcnXSwgUGVyaW9kLm1vcm5pbmcpCisKKyAgICBkZWYgdGVzdF9nZXRhdHRyX2R1bmRlcihzZWxmKToKKyAgICAgICAgU2Vhc29uID0gc2VsZi5TZWFzb24KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGdldGF0dHIoU2Vhc29uLCAnX19lcV9fJykpCisKKyAgICBkZWYgdGVzdF9pdGVyYXRpb25fb3JkZXIoc2VsZik6CisgICAgICAgIGNsYXNzIFNlYXNvbihFbnVtKToKKyAgICAgICAgICAgIFNVTU1FUiA9IDIKKyAgICAgICAgICAgIFdJTlRFUiA9IDQKKyAgICAgICAgICAgIEFVVFVNTiA9IDMKKyAgICAgICAgICAgIFNQUklORyA9IDEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICBsaXN0KFNlYXNvbiksCisgICAgICAgICAgICAgICAgW1NlYXNvbi5TVU1NRVIsIFNlYXNvbi5XSU5URVIsIFNlYXNvbi5BVVRVTU4sIFNlYXNvbi5TUFJJTkddLAorICAgICAgICAgICAgICAgICkKKworICAgIGRlZiB0ZXN0X3JldmVyc2VkX2l0ZXJhdGlvbl9vcmRlcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICBsaXN0KHJldmVyc2VkKHNlbGYuU2Vhc29uKSksCisgICAgICAgICAgICAgICAgW3NlbGYuU2Vhc29uLldJTlRFUiwgc2VsZi5TZWFzb24uQVVUVU1OLCBzZWxmLlNlYXNvbi5TVU1NRVIsCisgICAgICAgICAgICAgICAgIHNlbGYuU2Vhc29uLlNQUklOR10KKyAgICAgICAgICAgICAgICApCisKKyAgICBkZWYgdGVzdF9wcm9ncmFtYXRpY19mdW5jdGlvbl9zdHJpbmcoc2VsZik6CisgICAgICAgIFN1bW1lck1vbnRoID0gRW51bSgnU3VtbWVyTW9udGgnLCAnanVuZSBqdWx5IGF1Z3VzdCcpCisgICAgICAgIGxzdCA9IGxpc3QoU3VtbWVyTW9udGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGxzdCksIGxlbihTdW1tZXJNb250aCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKFN1bW1lck1vbnRoKSwgMywgU3VtbWVyTW9udGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgW1N1bW1lck1vbnRoLmp1bmUsIFN1bW1lck1vbnRoLmp1bHksIFN1bW1lck1vbnRoLmF1Z3VzdF0sCisgICAgICAgICAgICAgICAgbHN0LAorICAgICAgICAgICAgICAgICkKKyAgICAgICAgZm9yIGksIG1vbnRoIGluIGVudW1lcmF0ZSgnanVuZSBqdWx5IGF1Z3VzdCcuc3BsaXQoKSwgMSk6CisgICAgICAgICAgICBlID0gU3VtbWVyTW9udGgoaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KGUudmFsdWUpLCBpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChlLCBpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLm5hbWUsIG1vbnRoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlLCBTdW1tZXJNb250aCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShlKSwgU3VtbWVyTW9udGgpCisKKyAgICBkZWYgdGVzdF9wcm9ncmFtYXRpY19mdW5jdGlvbl9zdHJpbmdfbGlzdChzZWxmKToKKyAgICAgICAgU3VtbWVyTW9udGggPSBFbnVtKCdTdW1tZXJNb250aCcsIFsnanVuZScsICdqdWx5JywgJ2F1Z3VzdCddKQorICAgICAgICBsc3QgPSBsaXN0KFN1bW1lck1vbnRoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsc3QpLCBsZW4oU3VtbWVyTW9udGgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihTdW1tZXJNb250aCksIDMsIFN1bW1lck1vbnRoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgIFtTdW1tZXJNb250aC5qdW5lLCBTdW1tZXJNb250aC5qdWx5LCBTdW1tZXJNb250aC5hdWd1c3RdLAorICAgICAgICAgICAgICAgIGxzdCwKKyAgICAgICAgICAgICAgICApCisgICAgICAgIGZvciBpLCBtb250aCBpbiBlbnVtZXJhdGUoJ2p1bmUganVseSBhdWd1c3QnLnNwbGl0KCksIDEpOgorICAgICAgICAgICAgZSA9IFN1bW1lck1vbnRoKGkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludChlLnZhbHVlKSwgaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZSwgaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5uYW1lLCBtb250aCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZSwgU3VtbWVyTW9udGgpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUoZSksIFN1bW1lck1vbnRoKQorCisgICAgZGVmIHRlc3RfcHJvZ3JhbWF0aWNfZnVuY3Rpb25faXRlcmFibGUoc2VsZik6CisgICAgICAgIFN1bW1lck1vbnRoID0gRW51bSgKKyAgICAgICAgICAgICAgICAnU3VtbWVyTW9udGgnLAorICAgICAgICAgICAgICAgICgoJ2p1bmUnLCAxKSwgKCdqdWx5JywgMiksICgnYXVndXN0JywgMykpCisgICAgICAgICAgICAgICAgKQorICAgICAgICBsc3QgPSBsaXN0KFN1bW1lck1vbnRoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsc3QpLCBsZW4oU3VtbWVyTW9udGgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihTdW1tZXJNb250aCksIDMsIFN1bW1lck1vbnRoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgIFtTdW1tZXJNb250aC5qdW5lLCBTdW1tZXJNb250aC5qdWx5LCBTdW1tZXJNb250aC5hdWd1c3RdLAorICAgICAgICAgICAgICAgIGxzdCwKKyAgICAgICAgICAgICAgICApCisgICAgICAgIGZvciBpLCBtb250aCBpbiBlbnVtZXJhdGUoJ2p1bmUganVseSBhdWd1c3QnLnNwbGl0KCksIDEpOgorICAgICAgICAgICAgZSA9IFN1bW1lck1vbnRoKGkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludChlLnZhbHVlKSwgaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZSwgaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5uYW1lLCBtb250aCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZSwgU3VtbWVyTW9udGgpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUoZSksIFN1bW1lck1vbnRoKQorCisgICAgZGVmIHRlc3RfcHJvZ3JhbWF0aWNfZnVuY3Rpb25fZnJvbV9kaWN0KHNlbGYpOgorICAgICAgICBTdW1tZXJNb250aCA9IEVudW0oCisgICAgICAgICAgICAgICAgJ1N1bW1lck1vbnRoJywKKyAgICAgICAgICAgICAgICBPcmRlcmVkRGljdCgoKCdqdW5lJywgMSksICgnanVseScsIDIpLCAoJ2F1Z3VzdCcsIDMpKSkKKyAgICAgICAgICAgICAgICApCisgICAgICAgIGxzdCA9IGxpc3QoU3VtbWVyTW9udGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGxzdCksIGxlbihTdW1tZXJNb250aCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKFN1bW1lck1vbnRoKSwgMywgU3VtbWVyTW9udGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgW1N1bW1lck1vbnRoLmp1bmUsIFN1bW1lck1vbnRoLmp1bHksIFN1bW1lck1vbnRoLmF1Z3VzdF0sCisgICAgICAgICAgICAgICAgbHN0LAorICAgICAgICAgICAgICAgICkKKyAgICAgICAgZm9yIGksIG1vbnRoIGluIGVudW1lcmF0ZSgnanVuZSBqdWx5IGF1Z3VzdCcuc3BsaXQoKSwgMSk6CisgICAgICAgICAgICBlID0gU3VtbWVyTW9udGgoaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KGUudmFsdWUpLCBpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChlLCBpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLm5hbWUsIG1vbnRoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlLCBTdW1tZXJNb250aCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShlKSwgU3VtbWVyTW9udGgpCisKKyAgICBkZWYgdGVzdF9wcm9ncmFtYXRpY19mdW5jdGlvbl90eXBlKHNlbGYpOgorICAgICAgICBTdW1tZXJNb250aCA9IEVudW0oJ1N1bW1lck1vbnRoJywgJ2p1bmUganVseSBhdWd1c3QnLCB0eXBlPWludCkKKyAgICAgICAgbHN0ID0gbGlzdChTdW1tZXJNb250aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obHN0KSwgbGVuKFN1bW1lck1vbnRoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oU3VtbWVyTW9udGgpLCAzLCBTdW1tZXJNb250aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICBbU3VtbWVyTW9udGguanVuZSwgU3VtbWVyTW9udGguanVseSwgU3VtbWVyTW9udGguYXVndXN0XSwKKyAgICAgICAgICAgICAgICBsc3QsCisgICAgICAgICAgICAgICAgKQorICAgICAgICBmb3IgaSwgbW9udGggaW4gZW51bWVyYXRlKCdqdW5lIGp1bHkgYXVndXN0Jy5zcGxpdCgpLCAxKToKKyAgICAgICAgICAgIGUgPSBTdW1tZXJNb250aChpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLCBpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLm5hbWUsIG1vbnRoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlLCBTdW1tZXJNb250aCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShlKSwgU3VtbWVyTW9udGgpCisKKyAgICBkZWYgdGVzdF9wcm9ncmFtYXRpY19mdW5jdGlvbl90eXBlX2Zyb21fc3ViY2xhc3Moc2VsZik6CisgICAgICAgIFN1bW1lck1vbnRoID0gSW50RW51bSgnU3VtbWVyTW9udGgnLCAnanVuZSBqdWx5IGF1Z3VzdCcpCisgICAgICAgIGxzdCA9IGxpc3QoU3VtbWVyTW9udGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGxzdCksIGxlbihTdW1tZXJNb250aCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKFN1bW1lck1vbnRoKSwgMywgU3VtbWVyTW9udGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgW1N1bW1lck1vbnRoLmp1bmUsIFN1bW1lck1vbnRoLmp1bHksIFN1bW1lck1vbnRoLmF1Z3VzdF0sCisgICAgICAgICAgICAgICAgbHN0LAorICAgICAgICAgICAgICAgICkKKyAgICAgICAgZm9yIGksIG1vbnRoIGluIGVudW1lcmF0ZSgnanVuZSBqdWx5IGF1Z3VzdCcuc3BsaXQoKSwgMSk6CisgICAgICAgICAgICBlID0gU3VtbWVyTW9udGgoaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZSwgaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5uYW1lLCBtb250aCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZSwgU3VtbWVyTW9udGgpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUoZSksIFN1bW1lck1vbnRoKQorCisgICAgZGVmIHRlc3Rfc3ViY2xhc3Npbmcoc2VsZik6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoTmFtZSwgRXhjZXB0aW9uKToKKyAgICAgICAgICAgIHJhaXNlIE5hbWUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOYW1lLkJERkwsICdHdWlkbyB2YW4gUm9zc3VtJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKE5hbWUuQkRGTCwgTmFtZSgnR3VpZG8gdmFuIFJvc3N1bScpKQorICAgICAgICBzZWxmLmFzc2VydElzKE5hbWUuQkRGTCwgZ2V0YXR0cihOYW1lLCAnQkRGTCcpKQorICAgICAgICB0ZXN0X3BpY2tsZV9kdW1wX2xvYWQoc2VsZi5hc3NlcnRJcywgTmFtZS5CREZMKQorCisgICAgZGVmIHRlc3RfZXh0ZW5kaW5nKHNlbGYpOgorICAgICAgICBjbGFzcyBDb2xvcihFbnVtKToKKyAgICAgICAgICAgIHJlZCA9IDEKKyAgICAgICAgICAgIGdyZWVuID0gMgorICAgICAgICAgICAgYmx1ZSA9IDMKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgY2xhc3MgTW9yZUNvbG9yKENvbG9yKToKKyAgICAgICAgICAgICAgICBjeWFuID0gNAorICAgICAgICAgICAgICAgIG1hZ2VudGEgPSA1CisgICAgICAgICAgICAgICAgeWVsbG93ID0gNgorCisgICAgZGVmIHRlc3RfZXhjbHVkZV9tZXRob2RzKHNlbGYpOgorICAgICAgICBjbGFzcyB3aGF0ZXZlcihFbnVtKToKKyAgICAgICAgICAgIHRoaXMgPSAndGhhdCcKKyAgICAgICAgICAgIHRoZXNlID0gJ3Rob3NlJworICAgICAgICAgICAgZGVmIHJlYWxseShzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gJ25vLCBub3QgJXMnICUgc2VsZi52YWx1ZQorICAgICAgICBzZWxmLmFzc2VydElzTm90KHR5cGUod2hhdGV2ZXIucmVhbGx5KSwgd2hhdGV2ZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod2hhdGV2ZXIudGhpcy5yZWFsbHkoKSwgJ25vLCBub3QgdGhhdCcpCisKKyAgICBkZWYgdGVzdF93cm9uZ19pbmhlcml0YW5jZV9vcmRlcihzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgY2xhc3MgV3JvbmcoRW51bSwgc3RyKToKKyAgICAgICAgICAgICAgICBOb3RIZXJlID0gJ2Vycm9yIGJlZm9yZSB0aGlzIHBvaW50JworCisgICAgZGVmIHRlc3RfaW50ZW51bV90cmFuc2l0aXZpdHkoc2VsZik6CisgICAgICAgIGNsYXNzIG51bWJlcihJbnRFbnVtKToKKyAgICAgICAgICAgIG9uZSA9IDEKKyAgICAgICAgICAgIHR3byA9IDIKKyAgICAgICAgICAgIHRocmVlID0gMworICAgICAgICBjbGFzcyBudW1lcm8oSW50RW51bSk6CisgICAgICAgICAgICB1bm8gPSAxCisgICAgICAgICAgICBkb3MgPSAyCisgICAgICAgICAgICB0cmVzID0gMworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG51bWJlci5vbmUsIG51bWVyby51bm8pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnVtYmVyLnR3bywgbnVtZXJvLmRvcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChudW1iZXIudGhyZWUsIG51bWVyby50cmVzKQorCisgICAgZGVmIHRlc3Rfd3JvbmdfZW51bV9pbl9jYWxsKHNlbGYpOgorICAgICAgICBjbGFzcyBNb25vY2hyb21lKEVudW0pOgorICAgICAgICAgICAgYmxhY2sgPSAwCisgICAgICAgICAgICB3aGl0ZSA9IDEKKyAgICAgICAgY2xhc3MgR2VuZGVyKEVudW0pOgorICAgICAgICAgICAgbWFsZSA9IDAKKyAgICAgICAgICAgIGZlbWFsZSA9IDEKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgTW9ub2Nocm9tZSwgR2VuZGVyLm1hbGUpCisKKyAgICBkZWYgdGVzdF93cm9uZ19lbnVtX2luX21peGVkX2NhbGwoc2VsZik6CisgICAgICAgIGNsYXNzIE1vbm9jaHJvbWUoSW50RW51bSk6CisgICAgICAgICAgICBibGFjayA9IDAKKyAgICAgICAgICAgIHdoaXRlID0gMQorICAgICAgICBjbGFzcyBHZW5kZXIoRW51bSk6CisgICAgICAgICAgICBtYWxlID0gMAorICAgICAgICAgICAgZmVtYWxlID0gMQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBNb25vY2hyb21lLCBHZW5kZXIubWFsZSkKKworICAgIGRlZiB0ZXN0X21peGVkX2VudW1faW5fY2FsbF8xKHNlbGYpOgorICAgICAgICBjbGFzcyBNb25vY2hyb21lKEludEVudW0pOgorICAgICAgICAgICAgYmxhY2sgPSAwCisgICAgICAgICAgICB3aGl0ZSA9IDEKKyAgICAgICAgY2xhc3MgR2VuZGVyKEludEVudW0pOgorICAgICAgICAgICAgbWFsZSA9IDAKKyAgICAgICAgICAgIGZlbWFsZSA9IDEKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhNb25vY2hyb21lKEdlbmRlci5mZW1hbGUpLCBNb25vY2hyb21lLndoaXRlKQorCisgICAgZGVmIHRlc3RfbWl4ZWRfZW51bV9pbl9jYWxsXzIoc2VsZik6CisgICAgICAgIGNsYXNzIE1vbm9jaHJvbWUoRW51bSk6CisgICAgICAgICAgICBibGFjayA9IDAKKyAgICAgICAgICAgIHdoaXRlID0gMQorICAgICAgICBjbGFzcyBHZW5kZXIoSW50RW51bSk6CisgICAgICAgICAgICBtYWxlID0gMAorICAgICAgICAgICAgZmVtYWxlID0gMQorICAgICAgICBzZWxmLmFzc2VydElzKE1vbm9jaHJvbWUoR2VuZGVyLm1hbGUpLCBNb25vY2hyb21lLmJsYWNrKQorCisgICAgZGVmIHRlc3RfZmx1ZmxfZW51bShzZWxmKToKKyAgICAgICAgY2xhc3MgRmx1ZmxudW0oRW51bSk6CisgICAgICAgICAgICBkZWYgX19pbnRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gaW50KHNlbGYudmFsdWUpCisgICAgICAgIGNsYXNzIE1haWxNYW5PcHRpb25zKEZsdWZsbnVtKToKKyAgICAgICAgICAgIG9wdGlvbjEgPSAxCisgICAgICAgICAgICBvcHRpb24yID0gMgorICAgICAgICAgICAgb3B0aW9uMyA9IDMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoTWFpbE1hbk9wdGlvbnMub3B0aW9uMSksIDEpCisKKyAgICBkZWYgdGVzdF9pbnRyb3NwZWN0aW9uKHNlbGYpOgorICAgICAgICBjbGFzcyBOdW1iZXIoSW50RW51bSk6CisgICAgICAgICAgICBvbmUgPSAxMDAKKyAgICAgICAgICAgIHR3byA9IDIwMAorICAgICAgICBzZWxmLmFzc2VydElzKE51bWJlci5vbmUuX21lbWJlcl90eXBlXywgaW50KQorICAgICAgICBzZWxmLmFzc2VydElzKE51bWJlci5fbWVtYmVyX3R5cGVfLCBpbnQpCisgICAgICAgIGNsYXNzIFN0cmluZyhzdHIsIEVudW0pOgorICAgICAgICAgICAgeWFybiA9ICdzb2Z0JworICAgICAgICAgICAgcm9wZSA9ICdyb3VnaCcKKyAgICAgICAgICAgIHdpcmUgPSAnaGFyZCcKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhTdHJpbmcueWFybi5fbWVtYmVyX3R5cGVfLCBzdHIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoU3RyaW5nLl9tZW1iZXJfdHlwZV8sIHN0cikKKyAgICAgICAgY2xhc3MgUGxhaW4oRW51bSk6CisgICAgICAgICAgICB2YW5pbGxhID0gJ3doaXRlJworICAgICAgICAgICAgb25lID0gMQorICAgICAgICBzZWxmLmFzc2VydElzKFBsYWluLnZhbmlsbGEuX21lbWJlcl90eXBlXywgb2JqZWN0KQorICAgICAgICBzZWxmLmFzc2VydElzKFBsYWluLl9tZW1iZXJfdHlwZV8sIG9iamVjdCkKKworICAgIGRlZiB0ZXN0X25vX3N1Y2hfZW51bV9tZW1iZXIoc2VsZik6CisgICAgICAgIGNsYXNzIENvbG9yKEVudW0pOgorICAgICAgICAgICAgcmVkID0gMQorICAgICAgICAgICAgZ3JlZW4gPSAyCisgICAgICAgICAgICBibHVlID0gMworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgQ29sb3IoNCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvcik6CisgICAgICAgICAgICBDb2xvclsnY2hhcnRyZXVzZSddCisKKyAgICBkZWYgdGVzdF9uZXdfcmVwcihzZWxmKToKKyAgICAgICAgY2xhc3MgQ29sb3IoRW51bSk6CisgICAgICAgICAgICByZWQgPSAxCisgICAgICAgICAgICBncmVlbiA9IDIKKyAgICAgICAgICAgIGJsdWUgPSAzCisgICAgICAgICAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICJkb24ndCB5b3UganVzdCBsb3ZlIHNoYWRlcyBvZiAlcz8iICUgc2VsZi5uYW1lCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgcmVwcihDb2xvci5ibHVlKSwKKyAgICAgICAgICAgICAgICAiZG9uJ3QgeW91IGp1c3QgbG92ZSBzaGFkZXMgb2YgYmx1ZT8iLAorICAgICAgICAgICAgICAgICkKKworICAgIGRlZiB0ZXN0X2luaGVyaXRlZF9yZXByKHNlbGYpOgorICAgICAgICBjbGFzcyBNeUVudW0oRW51bSk6CisgICAgICAgICAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICJNeSBuYW1lIGlzICVzLiIgJSBzZWxmLm5hbWUKKyAgICAgICAgY2xhc3MgTXlJbnRFbnVtKGludCwgTXlFbnVtKToKKyAgICAgICAgICAgIHRoaXMgPSAxCisgICAgICAgICAgICB0aGF0ID0gMgorICAgICAgICAgICAgdGhlb3RoZXIgPSAzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihNeUludEVudW0udGhhdCksICJNeSBuYW1lIGlzIHRoYXQuIikKKworICAgIGRlZiB0ZXN0X211bHRpcGxlX21peGluX21ybyhzZWxmKToKKyAgICAgICAgY2xhc3MgYXV0b19lbnVtKHR5cGUoRW51bSkpOgorICAgICAgICAgICAgZGVmIF9fbmV3X18obWV0YWNscywgY2xzLCBiYXNlcywgY2xhc3NkaWN0KToKKyAgICAgICAgICAgICAgICB0ZW1wID0gdHlwZShjbGFzc2RpY3QpKCkKKyAgICAgICAgICAgICAgICBuYW1lcyA9IHNldChjbGFzc2RpY3QuX21lbWJlcl9uYW1lcykKKyAgICAgICAgICAgICAgICBpID0gMAorICAgICAgICAgICAgICAgIGZvciBrIGluIGNsYXNzZGljdC5fbWVtYmVyX25hbWVzOgorICAgICAgICAgICAgICAgICAgICB2ID0gY2xhc3NkaWN0W2tdCisgICAgICAgICAgICAgICAgICAgIGlmIHYgaXMgRWxsaXBzaXM6CisgICAgICAgICAgICAgICAgICAgICAgICB2ID0gaQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgaSA9IHYKKyAgICAgICAgICAgICAgICAgICAgaSArPSAxCisgICAgICAgICAgICAgICAgICAgIHRlbXBba10gPSB2CisgICAgICAgICAgICAgICAgZm9yIGssIHYgaW4gY2xhc3NkaWN0Lml0ZW1zKCk6CisgICAgICAgICAgICAgICAgICAgIGlmIGsgbm90IGluIG5hbWVzOgorICAgICAgICAgICAgICAgICAgICAgICAgdGVtcFtrXSA9IHYKKyAgICAgICAgICAgICAgICByZXR1cm4gc3VwZXIoYXV0b19lbnVtLCBtZXRhY2xzKS5fX25ld19fKAorICAgICAgICAgICAgICAgICAgICAgICAgbWV0YWNscywgY2xzLCBiYXNlcywgdGVtcCkKKworICAgICAgICBjbGFzcyBBdXRvTnVtYmVyZWRFbnVtKEVudW0sIG1ldGFjbGFzcz1hdXRvX2VudW0pOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGNsYXNzIEF1dG9JbnRFbnVtKEludEVudW0sIG1ldGFjbGFzcz1hdXRvX2VudW0pOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGNsYXNzIFRlc3RBdXRvTnVtYmVyKEF1dG9OdW1iZXJlZEVudW0pOgorICAgICAgICAgICAgYSA9IC4uLgorICAgICAgICAgICAgYiA9IDMKKyAgICAgICAgICAgIGMgPSAuLi4KKworICAgICAgICBjbGFzcyBUZXN0QXV0b0ludChBdXRvSW50RW51bSk6CisgICAgICAgICAgICBhID0gLi4uCisgICAgICAgICAgICBiID0gMworICAgICAgICAgICAgYyA9IC4uLgorCisgICAgZGVmIHRlc3Rfc3ViY2xhc3Nlc193aXRoX2dldG5ld2FyZ3Moc2VsZik6CisgICAgICAgIGNsYXNzIE5hbWVkSW50KGludCk6CisgICAgICAgICAgICBfX3F1YWxuYW1lX18gPSAnTmFtZWRJbnQnICAgICAgICMgbmVlZGVkIGZvciBwaWNrbGUgcHJvdG9jb2wgNAorICAgICAgICAgICAgZGVmIF9fbmV3X18oY2xzLCAqYXJncyk6CisgICAgICAgICAgICAgICAgX2FyZ3MgPSBhcmdzCisgICAgICAgICAgICAgICAgbmFtZSwgKmFyZ3MgPSBhcmdzCisgICAgICAgICAgICAgICAgaWYgbGVuKGFyZ3MpID09IDA6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigibmFtZSBhbmQgdmFsdWUgbXVzdCBiZSBzcGVjaWZpZWQiKQorICAgICAgICAgICAgICAgIHNlbGYgPSBpbnQuX19uZXdfXyhjbHMsICphcmdzKQorICAgICAgICAgICAgICAgIHNlbGYuX2ludG5hbWUgPSBuYW1lCisgICAgICAgICAgICAgICAgc2VsZi5fYXJncyA9IF9hcmdzCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKKyAgICAgICAgICAgIGRlZiBfX2dldG5ld2FyZ3NfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fYXJncworICAgICAgICAgICAgQHByb3BlcnR5CisgICAgICAgICAgICBkZWYgX19uYW1lX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2ludG5hbWUKKyAgICAgICAgICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICAjIHJlcHIoKSBpcyB1cGRhdGVkIHRvIGluY2x1ZGUgdGhlIG5hbWUgYW5kIHR5cGUgaW5mbworICAgICAgICAgICAgICAgIHJldHVybiAie30oeyFyfSwge30pIi5mb3JtYXQodHlwZShzZWxmKS5fX25hbWVfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX19uYW1lX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQuX19yZXByX18oc2VsZikpCisgICAgICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICAjIHN0cigpIGlzIHVuY2hhbmdlZCwgZXZlbiBpZiBpdCByZWxpZXMgb24gdGhlIHJlcHIoKSBmYWxsYmFjaworICAgICAgICAgICAgICAgIGJhc2UgPSBpbnQKKyAgICAgICAgICAgICAgICBiYXNlX3N0ciA9IGJhc2UuX19zdHJfXworICAgICAgICAgICAgICAgIGlmIGJhc2Vfc3RyLl9fb2JqY2xhc3NfXyBpcyBvYmplY3Q6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBiYXNlLl9fcmVwcl9fKHNlbGYpCisgICAgICAgICAgICAgICAgcmV0dXJuIGJhc2Vfc3RyKHNlbGYpCisgICAgICAgICAgICAjIGZvciBzaW1wbGljaXR5LCB3ZSBvbmx5IGRlZmluZSBvbmUgb3BlcmF0b3IgdGhhdAorICAgICAgICAgICAgIyBwcm9wYWdhdGVzIGV4cHJlc3Npb25zCisgICAgICAgICAgICBkZWYgX19hZGRfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgdGVtcCA9IGludChzZWxmKSArIGludCggb3RoZXIpCisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShzZWxmLCBOYW1lZEludCkgYW5kIGlzaW5zdGFuY2Uob3RoZXIsIE5hbWVkSW50KToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5hbWVkSW50KAorICAgICAgICAgICAgICAgICAgICAgICAgJyh7MH0gKyB7MX0pJy5mb3JtYXQoc2VsZi5fX25hbWVfXywgb3RoZXIuX19uYW1lX18pLAorICAgICAgICAgICAgICAgICAgICAgICAgdGVtcCApCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRlbXAKKworICAgICAgICBjbGFzcyBORUkoTmFtZWRJbnQsIEVudW0pOgorICAgICAgICAgICAgX19xdWFsbmFtZV9fID0gJ05FSScgICAgICAjIG5lZWRlZCBmb3IgcGlja2xlIHByb3RvY29sIDQKKyAgICAgICAgICAgIHggPSAoJ3RoZS14JywgMSkKKyAgICAgICAgICAgIHkgPSAoJ3RoZS15JywgMikKKworCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoTkVJLl9fbmV3X18sIEVudW0uX19uZXdfXykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKE5FSS54ICsgTkVJLnkpLCAiTmFtZWRJbnQoJyh0aGUteCArIHRoZS15KScsIDMpIikKKyAgICAgICAgZ2xvYmFscygpWydOYW1lZEludCddID0gTmFtZWRJbnQKKyAgICAgICAgZ2xvYmFscygpWydORUknXSA9IE5FSQorICAgICAgICBOSTUgPSBOYW1lZEludCgndGVzdCcsIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTkk1LCA1KQorICAgICAgICB0ZXN0X3BpY2tsZV9kdW1wX2xvYWQoc2VsZi5hc3NlcnRFcXVhbCwgTkk1LCA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5FSS55LnZhbHVlLCAyKQorICAgICAgICB0ZXN0X3BpY2tsZV9kdW1wX2xvYWQoc2VsZi5hc3NlcnRJcywgTkVJLnkpCisgICAgICAgIHRlc3RfcGlja2xlX2R1bXBfbG9hZChzZWxmLmFzc2VydElzLCBORUkpCisKKyAgICBkZWYgdGVzdF9zdWJjbGFzc2VzX3dpdGhfZ2V0bmV3YXJnc19leChzZWxmKToKKyAgICAgICAgY2xhc3MgTmFtZWRJbnQoaW50KToKKyAgICAgICAgICAgIF9fcXVhbG5hbWVfXyA9ICdOYW1lZEludCcgICAgICAgIyBuZWVkZWQgZm9yIHBpY2tsZSBwcm90b2NvbCA0CisgICAgICAgICAgICBkZWYgX19uZXdfXyhjbHMsICphcmdzKToKKyAgICAgICAgICAgICAgICBfYXJncyA9IGFyZ3MKKyAgICAgICAgICAgICAgICBuYW1lLCAqYXJncyA9IGFyZ3MKKyAgICAgICAgICAgICAgICBpZiBsZW4oYXJncykgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJuYW1lIGFuZCB2YWx1ZSBtdXN0IGJlIHNwZWNpZmllZCIpCisgICAgICAgICAgICAgICAgc2VsZiA9IGludC5fX25ld19fKGNscywgKmFyZ3MpCisgICAgICAgICAgICAgICAgc2VsZi5faW50bmFtZSA9IG5hbWUKKyAgICAgICAgICAgICAgICBzZWxmLl9hcmdzID0gX2FyZ3MKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZgorICAgICAgICAgICAgZGVmIF9fZ2V0bmV3YXJnc19leF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9hcmdzLCB7fQorICAgICAgICAgICAgQHByb3BlcnR5CisgICAgICAgICAgICBkZWYgX19uYW1lX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2ludG5hbWUKKyAgICAgICAgICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICAjIHJlcHIoKSBpcyB1cGRhdGVkIHRvIGluY2x1ZGUgdGhlIG5hbWUgYW5kIHR5cGUgaW5mbworICAgICAgICAgICAgICAgIHJldHVybiAie30oeyFyfSwge30pIi5mb3JtYXQodHlwZShzZWxmKS5fX25hbWVfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX19uYW1lX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQuX19yZXByX18oc2VsZikpCisgICAgICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICAjIHN0cigpIGlzIHVuY2hhbmdlZCwgZXZlbiBpZiBpdCByZWxpZXMgb24gdGhlIHJlcHIoKSBmYWxsYmFjaworICAgICAgICAgICAgICAgIGJhc2UgPSBpbnQKKyAgICAgICAgICAgICAgICBiYXNlX3N0ciA9IGJhc2UuX19zdHJfXworICAgICAgICAgICAgICAgIGlmIGJhc2Vfc3RyLl9fb2JqY2xhc3NfXyBpcyBvYmplY3Q6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBiYXNlLl9fcmVwcl9fKHNlbGYpCisgICAgICAgICAgICAgICAgcmV0dXJuIGJhc2Vfc3RyKHNlbGYpCisgICAgICAgICAgICAjIGZvciBzaW1wbGljaXR5LCB3ZSBvbmx5IGRlZmluZSBvbmUgb3BlcmF0b3IgdGhhdAorICAgICAgICAgICAgIyBwcm9wYWdhdGVzIGV4cHJlc3Npb25zCisgICAgICAgICAgICBkZWYgX19hZGRfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgdGVtcCA9IGludChzZWxmKSArIGludCggb3RoZXIpCisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShzZWxmLCBOYW1lZEludCkgYW5kIGlzaW5zdGFuY2Uob3RoZXIsIE5hbWVkSW50KToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5hbWVkSW50KAorICAgICAgICAgICAgICAgICAgICAgICAgJyh7MH0gKyB7MX0pJy5mb3JtYXQoc2VsZi5fX25hbWVfXywgb3RoZXIuX19uYW1lX18pLAorICAgICAgICAgICAgICAgICAgICAgICAgdGVtcCApCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRlbXAKKworICAgICAgICBjbGFzcyBORUkoTmFtZWRJbnQsIEVudW0pOgorICAgICAgICAgICAgX19xdWFsbmFtZV9fID0gJ05FSScgICAgICAjIG5lZWRlZCBmb3IgcGlja2xlIHByb3RvY29sIDQKKyAgICAgICAgICAgIHggPSAoJ3RoZS14JywgMSkKKyAgICAgICAgICAgIHkgPSAoJ3RoZS15JywgMikKKworCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoTkVJLl9fbmV3X18sIEVudW0uX19uZXdfXykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKE5FSS54ICsgTkVJLnkpLCAiTmFtZWRJbnQoJyh0aGUteCArIHRoZS15KScsIDMpIikKKyAgICAgICAgZ2xvYmFscygpWydOYW1lZEludCddID0gTmFtZWRJbnQKKyAgICAgICAgZ2xvYmFscygpWydORUknXSA9IE5FSQorICAgICAgICBOSTUgPSBOYW1lZEludCgndGVzdCcsIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTkk1LCA1KQorICAgICAgICB0ZXN0X3BpY2tsZV9kdW1wX2xvYWQoc2VsZi5hc3NlcnRFcXVhbCwgTkk1LCA1LCBwcm90b2NvbD0oNCwgNCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTkVJLnkudmFsdWUsIDIpCisgICAgICAgIHRlc3RfcGlja2xlX2R1bXBfbG9hZChzZWxmLmFzc2VydElzLCBORUkueSwgcHJvdG9jb2w9KDQsIDQpKQorICAgICAgICB0ZXN0X3BpY2tsZV9kdW1wX2xvYWQoc2VsZi5hc3NlcnRJcywgTkVJKQorCisgICAgZGVmIHRlc3Rfc3ViY2xhc3Nlc193aXRoX3JlZHVjZShzZWxmKToKKyAgICAgICAgY2xhc3MgTmFtZWRJbnQoaW50KToKKyAgICAgICAgICAgIF9fcXVhbG5hbWVfXyA9ICdOYW1lZEludCcgICAgICAgIyBuZWVkZWQgZm9yIHBpY2tsZSBwcm90b2NvbCA0CisgICAgICAgICAgICBkZWYgX19uZXdfXyhjbHMsICphcmdzKToKKyAgICAgICAgICAgICAgICBfYXJncyA9IGFyZ3MKKyAgICAgICAgICAgICAgICBuYW1lLCAqYXJncyA9IGFyZ3MKKyAgICAgICAgICAgICAgICBpZiBsZW4oYXJncykgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJuYW1lIGFuZCB2YWx1ZSBtdXN0IGJlIHNwZWNpZmllZCIpCisgICAgICAgICAgICAgICAgc2VsZiA9IGludC5fX25ld19fKGNscywgKmFyZ3MpCisgICAgICAgICAgICAgICAgc2VsZi5faW50bmFtZSA9IG5hbWUKKyAgICAgICAgICAgICAgICBzZWxmLl9hcmdzID0gX2FyZ3MKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZgorICAgICAgICAgICAgZGVmIF9fcmVkdWNlX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX19jbGFzc19fLCBzZWxmLl9hcmdzCisgICAgICAgICAgICBAcHJvcGVydHkKKyAgICAgICAgICAgIGRlZiBfX25hbWVfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5faW50bmFtZQorICAgICAgICAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgICMgcmVwcigpIGlzIHVwZGF0ZWQgdG8gaW5jbHVkZSB0aGUgbmFtZSBhbmQgdHlwZSBpbmZvCisgICAgICAgICAgICAgICAgcmV0dXJuICJ7fSh7IXJ9LCB7fSkiLmZvcm1hdCh0eXBlKHNlbGYpLl9fbmFtZV9fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fX25hbWVfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludC5fX3JlcHJfXyhzZWxmKSkKKyAgICAgICAgICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICAgICAgICAgICMgc3RyKCkgaXMgdW5jaGFuZ2VkLCBldmVuIGlmIGl0IHJlbGllcyBvbiB0aGUgcmVwcigpIGZhbGxiYWNrCisgICAgICAgICAgICAgICAgYmFzZSA9IGludAorICAgICAgICAgICAgICAgIGJhc2Vfc3RyID0gYmFzZS5fX3N0cl9fCisgICAgICAgICAgICAgICAgaWYgYmFzZV9zdHIuX19vYmpjbGFzc19fIGlzIG9iamVjdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJhc2UuX19yZXByX18oc2VsZikKKyAgICAgICAgICAgICAgICByZXR1cm4gYmFzZV9zdHIoc2VsZikKKyAgICAgICAgICAgICMgZm9yIHNpbXBsaWNpdHksIHdlIG9ubHkgZGVmaW5lIG9uZSBvcGVyYXRvciB0aGF0CisgICAgICAgICAgICAjIHByb3BhZ2F0ZXMgZXhwcmVzc2lvbnMKKyAgICAgICAgICAgIGRlZiBfX2FkZF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICB0ZW1wID0gaW50KHNlbGYpICsgaW50KCBvdGhlcikKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHNlbGYsIE5hbWVkSW50KSBhbmQgaXNpbnN0YW5jZShvdGhlciwgTmFtZWRJbnQpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTmFtZWRJbnQoCisgICAgICAgICAgICAgICAgICAgICAgICAnKHswfSArIHsxfSknLmZvcm1hdChzZWxmLl9fbmFtZV9fLCBvdGhlci5fX25hbWVfXyksCisgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wICkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGVtcAorCisgICAgICAgIGNsYXNzIE5FSShOYW1lZEludCwgRW51bSk6CisgICAgICAgICAgICBfX3F1YWxuYW1lX18gPSAnTkVJJyAgICAgICMgbmVlZGVkIGZvciBwaWNrbGUgcHJvdG9jb2wgNAorICAgICAgICAgICAgeCA9ICgndGhlLXgnLCAxKQorICAgICAgICAgICAgeSA9ICgndGhlLXknLCAyKQorCisKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhORUkuX19uZXdfXywgRW51bS5fX25ld19fKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoTkVJLnggKyBORUkueSksICJOYW1lZEludCgnKHRoZS14ICsgdGhlLXkpJywgMykiKQorICAgICAgICBnbG9iYWxzKClbJ05hbWVkSW50J10gPSBOYW1lZEludAorICAgICAgICBnbG9iYWxzKClbJ05FSSddID0gTkVJCisgICAgICAgIE5JNSA9IE5hbWVkSW50KCd0ZXN0JywgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOSTUsIDUpCisgICAgICAgIHRlc3RfcGlja2xlX2R1bXBfbG9hZChzZWxmLmFzc2VydEVxdWFsLCBOSTUsIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTkVJLnkudmFsdWUsIDIpCisgICAgICAgIHRlc3RfcGlja2xlX2R1bXBfbG9hZChzZWxmLmFzc2VydElzLCBORUkueSkKKyAgICAgICAgdGVzdF9waWNrbGVfZHVtcF9sb2FkKHNlbGYuYXNzZXJ0SXMsIE5FSSkKKworICAgIGRlZiB0ZXN0X3N1YmNsYXNzZXNfd2l0aF9yZWR1Y2VfZXgoc2VsZik6CisgICAgICAgIGNsYXNzIE5hbWVkSW50KGludCk6CisgICAgICAgICAgICBfX3F1YWxuYW1lX18gPSAnTmFtZWRJbnQnICAgICAgICMgbmVlZGVkIGZvciBwaWNrbGUgcHJvdG9jb2wgNAorICAgICAgICAgICAgZGVmIF9fbmV3X18oY2xzLCAqYXJncyk6CisgICAgICAgICAgICAgICAgX2FyZ3MgPSBhcmdzCisgICAgICAgICAgICAgICAgbmFtZSwgKmFyZ3MgPSBhcmdzCisgICAgICAgICAgICAgICAgaWYgbGVuKGFyZ3MpID09IDA6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigibmFtZSBhbmQgdmFsdWUgbXVzdCBiZSBzcGVjaWZpZWQiKQorICAgICAgICAgICAgICAgIHNlbGYgPSBpbnQuX19uZXdfXyhjbHMsICphcmdzKQorICAgICAgICAgICAgICAgIHNlbGYuX2ludG5hbWUgPSBuYW1lCisgICAgICAgICAgICAgICAgc2VsZi5fYXJncyA9IF9hcmdzCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKKyAgICAgICAgICAgIGRlZiBfX3JlZHVjZV9leF9fKHNlbGYsIHByb3RvKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fX2NsYXNzX18sIHNlbGYuX2FyZ3MKKyAgICAgICAgICAgIEBwcm9wZXJ0eQorICAgICAgICAgICAgZGVmIF9fbmFtZV9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9pbnRuYW1lCisgICAgICAgICAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgICAgICAgICAgIyByZXByKCkgaXMgdXBkYXRlZCB0byBpbmNsdWRlIHRoZSBuYW1lIGFuZCB0eXBlIGluZm8KKyAgICAgICAgICAgICAgICByZXR1cm4gInt9KHshcn0sIHt9KSIuZm9ybWF0KHR5cGUoc2VsZikuX19uYW1lX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9fbmFtZV9fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50Ll9fcmVwcl9fKHNlbGYpKQorICAgICAgICAgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgICAgICAgICAgIyBzdHIoKSBpcyB1bmNoYW5nZWQsIGV2ZW4gaWYgaXQgcmVsaWVzIG9uIHRoZSByZXByKCkgZmFsbGJhY2sKKyAgICAgICAgICAgICAgICBiYXNlID0gaW50CisgICAgICAgICAgICAgICAgYmFzZV9zdHIgPSBiYXNlLl9fc3RyX18KKyAgICAgICAgICAgICAgICBpZiBiYXNlX3N0ci5fX29iamNsYXNzX18gaXMgb2JqZWN0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gYmFzZS5fX3JlcHJfXyhzZWxmKQorICAgICAgICAgICAgICAgIHJldHVybiBiYXNlX3N0cihzZWxmKQorICAgICAgICAgICAgIyBmb3Igc2ltcGxpY2l0eSwgd2Ugb25seSBkZWZpbmUgb25lIG9wZXJhdG9yIHRoYXQKKyAgICAgICAgICAgICMgcHJvcGFnYXRlcyBleHByZXNzaW9ucworICAgICAgICAgICAgZGVmIF9fYWRkX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHRlbXAgPSBpbnQoc2VsZikgKyBpbnQoIG90aGVyKQorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uoc2VsZiwgTmFtZWRJbnQpIGFuZCBpc2luc3RhbmNlKG90aGVyLCBOYW1lZEludCk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOYW1lZEludCgKKyAgICAgICAgICAgICAgICAgICAgICAgICcoezB9ICsgezF9KScuZm9ybWF0KHNlbGYuX19uYW1lX18sIG90aGVyLl9fbmFtZV9fKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAgKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0ZW1wCisKKyAgICAgICAgY2xhc3MgTkVJKE5hbWVkSW50LCBFbnVtKToKKyAgICAgICAgICAgIF9fcXVhbG5hbWVfXyA9ICdORUknICAgICAgIyBuZWVkZWQgZm9yIHBpY2tsZSBwcm90b2NvbCA0CisgICAgICAgICAgICB4ID0gKCd0aGUteCcsIDEpCisgICAgICAgICAgICB5ID0gKCd0aGUteScsIDIpCisKKworICAgICAgICBzZWxmLmFzc2VydElzKE5FSS5fX25ld19fLCBFbnVtLl9fbmV3X18pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihORUkueCArIE5FSS55KSwgIk5hbWVkSW50KCcodGhlLXggKyB0aGUteSknLCAzKSIpCisgICAgICAgIGdsb2JhbHMoKVsnTmFtZWRJbnQnXSA9IE5hbWVkSW50CisgICAgICAgIGdsb2JhbHMoKVsnTkVJJ10gPSBORUkKKyAgICAgICAgTkk1ID0gTmFtZWRJbnQoJ3Rlc3QnLCA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5JNSwgNSkKKyAgICAgICAgdGVzdF9waWNrbGVfZHVtcF9sb2FkKHNlbGYuYXNzZXJ0RXF1YWwsIE5JNSwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChORUkueS52YWx1ZSwgMikKKyAgICAgICAgdGVzdF9waWNrbGVfZHVtcF9sb2FkKHNlbGYuYXNzZXJ0SXMsIE5FSS55KQorICAgICAgICB0ZXN0X3BpY2tsZV9kdW1wX2xvYWQoc2VsZi5hc3NlcnRJcywgTkVJKQorCisgICAgZGVmIHRlc3Rfc3ViY2xhc3Nlc193aXRob3V0X2RpcmVjdF9waWNrbGVfc3VwcG9ydChzZWxmKToKKyAgICAgICAgY2xhc3MgTmFtZWRJbnQoaW50KToKKyAgICAgICAgICAgIF9fcXVhbG5hbWVfXyA9ICdOYW1lZEludCcKKyAgICAgICAgICAgIGRlZiBfX25ld19fKGNscywgKmFyZ3MpOgorICAgICAgICAgICAgICAgIF9hcmdzID0gYXJncworICAgICAgICAgICAgICAgIG5hbWUsICphcmdzID0gYXJncworICAgICAgICAgICAgICAgIGlmIGxlbihhcmdzKSA9PSAwOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoIm5hbWUgYW5kIHZhbHVlIG11c3QgYmUgc3BlY2lmaWVkIikKKyAgICAgICAgICAgICAgICBzZWxmID0gaW50Ll9fbmV3X18oY2xzLCAqYXJncykKKyAgICAgICAgICAgICAgICBzZWxmLl9pbnRuYW1lID0gbmFtZQorICAgICAgICAgICAgICAgIHNlbGYuX2FyZ3MgPSBfYXJncworICAgICAgICAgICAgICAgIHJldHVybiBzZWxmCisgICAgICAgICAgICBAcHJvcGVydHkKKyAgICAgICAgICAgIGRlZiBfX25hbWVfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5faW50bmFtZQorICAgICAgICAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgICMgcmVwcigpIGlzIHVwZGF0ZWQgdG8gaW5jbHVkZSB0aGUgbmFtZSBhbmQgdHlwZSBpbmZvCisgICAgICAgICAgICAgICAgcmV0dXJuICJ7fSh7IXJ9LCB7fSkiLmZvcm1hdCh0eXBlKHNlbGYpLl9fbmFtZV9fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fX25hbWVfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludC5fX3JlcHJfXyhzZWxmKSkKKyAgICAgICAgICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICAgICAgICAgICMgc3RyKCkgaXMgdW5jaGFuZ2VkLCBldmVuIGlmIGl0IHJlbGllcyBvbiB0aGUgcmVwcigpIGZhbGxiYWNrCisgICAgICAgICAgICAgICAgYmFzZSA9IGludAorICAgICAgICAgICAgICAgIGJhc2Vfc3RyID0gYmFzZS5fX3N0cl9fCisgICAgICAgICAgICAgICAgaWYgYmFzZV9zdHIuX19vYmpjbGFzc19fIGlzIG9iamVjdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJhc2UuX19yZXByX18oc2VsZikKKyAgICAgICAgICAgICAgICByZXR1cm4gYmFzZV9zdHIoc2VsZikKKyAgICAgICAgICAgICMgZm9yIHNpbXBsaWNpdHksIHdlIG9ubHkgZGVmaW5lIG9uZSBvcGVyYXRvciB0aGF0CisgICAgICAgICAgICAjIHByb3BhZ2F0ZXMgZXhwcmVzc2lvbnMKKyAgICAgICAgICAgIGRlZiBfX2FkZF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICB0ZW1wID0gaW50KHNlbGYpICsgaW50KCBvdGhlcikKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHNlbGYsIE5hbWVkSW50KSBhbmQgaXNpbnN0YW5jZShvdGhlciwgTmFtZWRJbnQpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTmFtZWRJbnQoCisgICAgICAgICAgICAgICAgICAgICAgICAnKHswfSArIHsxfSknLmZvcm1hdChzZWxmLl9fbmFtZV9fLCBvdGhlci5fX25hbWVfXyksCisgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wICkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGVtcAorCisgICAgICAgIGNsYXNzIE5FSShOYW1lZEludCwgRW51bSk6CisgICAgICAgICAgICBfX3F1YWxuYW1lX18gPSAnTkVJJworICAgICAgICAgICAgeCA9ICgndGhlLXgnLCAxKQorICAgICAgICAgICAgeSA9ICgndGhlLXknLCAyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoTkVJLl9fbmV3X18sIEVudW0uX19uZXdfXykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKE5FSS54ICsgTkVJLnkpLCAiTmFtZWRJbnQoJyh0aGUteCArIHRoZS15KScsIDMpIikKKyAgICAgICAgZ2xvYmFscygpWydOYW1lZEludCddID0gTmFtZWRJbnQKKyAgICAgICAgZ2xvYmFscygpWydORUknXSA9IE5FSQorICAgICAgICBOSTUgPSBOYW1lZEludCgndGVzdCcsIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTkk1LCA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5FSS55LnZhbHVlLCAyKQorICAgICAgICB0ZXN0X3BpY2tsZV9leGNlcHRpb24oc2VsZi5hc3NlcnRSYWlzZXMsIFR5cGVFcnJvciwgTkVJLngpCisgICAgICAgIHRlc3RfcGlja2xlX2V4Y2VwdGlvbihzZWxmLmFzc2VydFJhaXNlcywgUGlja2xpbmdFcnJvciwgTkVJKQorCisgICAgZGVmIHRlc3Rfc3ViY2xhc3Nlc193aXRob3V0X2RpcmVjdF9waWNrbGVfc3VwcG9ydF91c2luZ19uYW1lKHNlbGYpOgorICAgICAgICBjbGFzcyBOYW1lZEludChpbnQpOgorICAgICAgICAgICAgX19xdWFsbmFtZV9fID0gJ05hbWVkSW50JworICAgICAgICAgICAgZGVmIF9fbmV3X18oY2xzLCAqYXJncyk6CisgICAgICAgICAgICAgICAgX2FyZ3MgPSBhcmdzCisgICAgICAgICAgICAgICAgbmFtZSwgKmFyZ3MgPSBhcmdzCisgICAgICAgICAgICAgICAgaWYgbGVuKGFyZ3MpID09IDA6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigibmFtZSBhbmQgdmFsdWUgbXVzdCBiZSBzcGVjaWZpZWQiKQorICAgICAgICAgICAgICAgIHNlbGYgPSBpbnQuX19uZXdfXyhjbHMsICphcmdzKQorICAgICAgICAgICAgICAgIHNlbGYuX2ludG5hbWUgPSBuYW1lCisgICAgICAgICAgICAgICAgc2VsZi5fYXJncyA9IF9hcmdzCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKKyAgICAgICAgICAgIEBwcm9wZXJ0eQorICAgICAgICAgICAgZGVmIF9fbmFtZV9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9pbnRuYW1lCisgICAgICAgICAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgICAgICAgICAgIyByZXByKCkgaXMgdXBkYXRlZCB0byBpbmNsdWRlIHRoZSBuYW1lIGFuZCB0eXBlIGluZm8KKyAgICAgICAgICAgICAgICByZXR1cm4gInt9KHshcn0sIHt9KSIuZm9ybWF0KHR5cGUoc2VsZikuX19uYW1lX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9fbmFtZV9fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50Ll9fcmVwcl9fKHNlbGYpKQorICAgICAgICAgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgICAgICAgICAgIyBzdHIoKSBpcyB1bmNoYW5nZWQsIGV2ZW4gaWYgaXQgcmVsaWVzIG9uIHRoZSByZXByKCkgZmFsbGJhY2sKKyAgICAgICAgICAgICAgICBiYXNlID0gaW50CisgICAgICAgICAgICAgICAgYmFzZV9zdHIgPSBiYXNlLl9fc3RyX18KKyAgICAgICAgICAgICAgICBpZiBiYXNlX3N0ci5fX29iamNsYXNzX18gaXMgb2JqZWN0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gYmFzZS5fX3JlcHJfXyhzZWxmKQorICAgICAgICAgICAgICAgIHJldHVybiBiYXNlX3N0cihzZWxmKQorICAgICAgICAgICAgIyBmb3Igc2ltcGxpY2l0eSwgd2Ugb25seSBkZWZpbmUgb25lIG9wZXJhdG9yIHRoYXQKKyAgICAgICAgICAgICMgcHJvcGFnYXRlcyBleHByZXNzaW9ucworICAgICAgICAgICAgZGVmIF9fYWRkX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHRlbXAgPSBpbnQoc2VsZikgKyBpbnQoIG90aGVyKQorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uoc2VsZiwgTmFtZWRJbnQpIGFuZCBpc2luc3RhbmNlKG90aGVyLCBOYW1lZEludCk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOYW1lZEludCgKKyAgICAgICAgICAgICAgICAgICAgICAgICcoezB9ICsgezF9KScuZm9ybWF0KHNlbGYuX19uYW1lX18sIG90aGVyLl9fbmFtZV9fKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAgKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0ZW1wCisKKyAgICAgICAgY2xhc3MgTkVJKE5hbWVkSW50LCBFbnVtKToKKyAgICAgICAgICAgIF9fcXVhbG5hbWVfXyA9ICdORUknCisgICAgICAgICAgICB4ID0gKCd0aGUteCcsIDEpCisgICAgICAgICAgICB5ID0gKCd0aGUteScsIDIpCisgICAgICAgICAgICBkZWYgX19yZWR1Y2VfZXhfXyhzZWxmLCBwcm90byk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGdldGF0dHIsIChzZWxmLl9fY2xhc3NfXywgc2VsZi5fbmFtZV8pCisKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhORUkuX19uZXdfXywgRW51bS5fX25ld19fKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoTkVJLnggKyBORUkueSksICJOYW1lZEludCgnKHRoZS14ICsgdGhlLXkpJywgMykiKQorICAgICAgICBnbG9iYWxzKClbJ05hbWVkSW50J10gPSBOYW1lZEludAorICAgICAgICBnbG9iYWxzKClbJ05FSSddID0gTkVJCisgICAgICAgIE5JNSA9IE5hbWVkSW50KCd0ZXN0JywgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOSTUsIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTkVJLnkudmFsdWUsIDIpCisgICAgICAgIHRlc3RfcGlja2xlX2R1bXBfbG9hZChzZWxmLmFzc2VydElzLCBORUkueSkKKyAgICAgICAgdGVzdF9waWNrbGVfZHVtcF9sb2FkKHNlbGYuYXNzZXJ0SXMsIE5FSSkKKworICAgIGRlZiB0ZXN0X3R1cGxlX3N1YmNsYXNzKHNlbGYpOgorICAgICAgICBjbGFzcyBTb21lVHVwbGUodHVwbGUsIEVudW0pOgorICAgICAgICAgICAgX19xdWFsbmFtZV9fID0gJ1NvbWVUdXBsZScgICAgICAjIG5lZWRlZCBmb3IgcGlja2xlIHByb3RvY29sIDQKKyAgICAgICAgICAgIGZpcnN0ID0gKDEsICdmb3IgdGhlIG1vbmV5JykKKyAgICAgICAgICAgIHNlY29uZCA9ICgyLCAnZm9yIHRoZSBzaG93JykKKyAgICAgICAgICAgIHRoaXJkID0gKDMsICdmb3IgdGhlIG11c2ljJykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKFNvbWVUdXBsZS5maXJzdCksIFNvbWVUdXBsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKFNvbWVUdXBsZS5zZWNvbmQsIHR1cGxlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFNvbWVUdXBsZS50aGlyZCwgKDMsICdmb3IgdGhlIG11c2ljJykpCisgICAgICAgIGdsb2JhbHMoKVsnU29tZVR1cGxlJ10gPSBTb21lVHVwbGUKKyAgICAgICAgdGVzdF9waWNrbGVfZHVtcF9sb2FkKHNlbGYuYXNzZXJ0SXMsIFNvbWVUdXBsZS5maXJzdCkKKworICAgIGRlZiB0ZXN0X2R1cGxpY2F0ZV92YWx1ZXNfZ2l2ZV91bmlxdWVfZW51bV9pdGVtcyhzZWxmKToKKyAgICAgICAgY2xhc3MgQXV0b051bWJlcihFbnVtKToKKyAgICAgICAgICAgIGZpcnN0ID0gKCkKKyAgICAgICAgICAgIHNlY29uZCA9ICgpCisgICAgICAgICAgICB0aGlyZCA9ICgpCisgICAgICAgICAgICBkZWYgX19uZXdfXyhjbHMpOgorICAgICAgICAgICAgICAgIHZhbHVlID0gbGVuKGNscy5fX21lbWJlcnNfXykgKyAxCisgICAgICAgICAgICAgICAgb2JqID0gb2JqZWN0Ll9fbmV3X18oY2xzKQorICAgICAgICAgICAgICAgIG9iai5fdmFsdWVfID0gdmFsdWUKKyAgICAgICAgICAgICAgICByZXR1cm4gb2JqCisgICAgICAgICAgICBkZWYgX19pbnRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gaW50KHNlbGYuX3ZhbHVlXykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICBsaXN0KEF1dG9OdW1iZXIpLAorICAgICAgICAgICAgICAgIFtBdXRvTnVtYmVyLmZpcnN0LCBBdXRvTnVtYmVyLnNlY29uZCwgQXV0b051bWJlci50aGlyZF0sCisgICAgICAgICAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludChBdXRvTnVtYmVyLnNlY29uZCksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQXV0b051bWJlci50aGlyZC52YWx1ZSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhBdXRvTnVtYmVyKDEpLCBBdXRvTnVtYmVyLmZpcnN0KQorCisgICAgZGVmIHRlc3RfaW5oZXJpdGVkX25ld19mcm9tX2VuaGFuY2VkX2VudW0oc2VsZik6CisgICAgICAgIGNsYXNzIEF1dG9OdW1iZXIoRW51bSk6CisgICAgICAgICAgICBkZWYgX19uZXdfXyhjbHMpOgorICAgICAgICAgICAgICAgIHZhbHVlID0gbGVuKGNscy5fX21lbWJlcnNfXykgKyAxCisgICAgICAgICAgICAgICAgb2JqID0gb2JqZWN0Ll9fbmV3X18oY2xzKQorICAgICAgICAgICAgICAgIG9iai5fdmFsdWVfID0gdmFsdWUKKyAgICAgICAgICAgICAgICByZXR1cm4gb2JqCisgICAgICAgICAgICBkZWYgX19pbnRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gaW50KHNlbGYuX3ZhbHVlXykKKyAgICAgICAgY2xhc3MgQ29sb3IoQXV0b051bWJlcik6CisgICAgICAgICAgICByZWQgPSAoKQorICAgICAgICAgICAgZ3JlZW4gPSAoKQorICAgICAgICAgICAgYmx1ZSA9ICgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChDb2xvciksIFtDb2xvci5yZWQsIENvbG9yLmdyZWVuLCBDb2xvci5ibHVlXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG1hcChpbnQsIENvbG9yKSksIFsxLCAyLCAzXSkKKworICAgIGRlZiB0ZXN0X2luaGVyaXRlZF9uZXdfZnJvbV9taXhlZF9lbnVtKHNlbGYpOgorICAgICAgICBjbGFzcyBBdXRvTnVtYmVyKEludEVudW0pOgorICAgICAgICAgICAgZGVmIF9fbmV3X18oY2xzKToKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGxlbihjbHMuX19tZW1iZXJzX18pICsgMQorICAgICAgICAgICAgICAgIG9iaiA9IGludC5fX25ld19fKGNscywgdmFsdWUpCisgICAgICAgICAgICAgICAgb2JqLl92YWx1ZV8gPSB2YWx1ZQorICAgICAgICAgICAgICAgIHJldHVybiBvYmoKKyAgICAgICAgY2xhc3MgQ29sb3IoQXV0b051bWJlcik6CisgICAgICAgICAgICByZWQgPSAoKQorICAgICAgICAgICAgZ3JlZW4gPSAoKQorICAgICAgICAgICAgYmx1ZSA9ICgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChDb2xvciksIFtDb2xvci5yZWQsIENvbG9yLmdyZWVuLCBDb2xvci5ibHVlXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG1hcChpbnQsIENvbG9yKSksIFsxLCAyLCAzXSkKKworICAgIGRlZiB0ZXN0X2VxdWFsaXR5KHNlbGYpOgorICAgICAgICBjbGFzcyBBbHdheXNFcXVhbDoKKyAgICAgICAgICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGNsYXNzIE9yZGluYXJ5RW51bShFbnVtKToKKyAgICAgICAgICAgIGEgPSAxCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQWx3YXlzRXF1YWwoKSwgT3JkaW5hcnlFbnVtLmEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoT3JkaW5hcnlFbnVtLmEsIEFsd2F5c0VxdWFsKCkpCisKKyAgICBkZWYgdGVzdF9vcmRlcmVkX21peGluKHNlbGYpOgorICAgICAgICBjbGFzcyBPcmRlcmVkRW51bShFbnVtKToKKyAgICAgICAgICAgIGRlZiBfX2dlX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIGlmIHNlbGYuX19jbGFzc19fIGlzIG90aGVyLl9fY2xhc3NfXzoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3ZhbHVlXyA+PSBvdGhlci5fdmFsdWVfCisgICAgICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgICAgICAgICBkZWYgX19ndF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLl9fY2xhc3NfXyBpcyBvdGhlci5fX2NsYXNzX186CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl92YWx1ZV8gPiBvdGhlci5fdmFsdWVfCisgICAgICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgICAgICAgICBkZWYgX19sZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLl9fY2xhc3NfXyBpcyBvdGhlci5fX2NsYXNzX186CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl92YWx1ZV8gPD0gb3RoZXIuX3ZhbHVlXworICAgICAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgICAgICAgICAgZGVmIF9fbHRfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5fX2NsYXNzX18gaXMgb3RoZXIuX19jbGFzc19fOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fdmFsdWVfIDwgb3RoZXIuX3ZhbHVlXworICAgICAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgICAgICBjbGFzcyBHcmFkZShPcmRlcmVkRW51bSk6CisgICAgICAgICAgICBBID0gNQorICAgICAgICAgICAgQiA9IDQKKyAgICAgICAgICAgIEMgPSAzCisgICAgICAgICAgICBEID0gMgorICAgICAgICAgICAgRiA9IDEKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKEdyYWRlLkEsIEdyYWRlLkIpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKEdyYWRlLkYsIEdyYWRlLkMpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzcyhHcmFkZS5ELCBHcmFkZS5BKQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChHcmFkZS5CLCBHcmFkZS5CKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEdyYWRlLkIsIEdyYWRlLkIpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoR3JhZGUuQywgR3JhZGUuRCkKKworICAgIGRlZiB0ZXN0X2V4dGVuZGluZzIoc2VsZik6CisgICAgICAgIGNsYXNzIFNoYWRlKEVudW0pOgorICAgICAgICAgICAgZGVmIHNoYWRlKHNlbGYpOgorICAgICAgICAgICAgICAgIHByaW50KHNlbGYubmFtZSkKKyAgICAgICAgY2xhc3MgQ29sb3IoU2hhZGUpOgorICAgICAgICAgICAgcmVkID0gMQorICAgICAgICAgICAgZ3JlZW4gPSAyCisgICAgICAgICAgICBibHVlID0gMworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBjbGFzcyBNb3JlQ29sb3IoQ29sb3IpOgorICAgICAgICAgICAgICAgIGN5YW4gPSA0CisgICAgICAgICAgICAgICAgbWFnZW50YSA9IDUKKyAgICAgICAgICAgICAgICB5ZWxsb3cgPSA2CisKKyAgICBkZWYgdGVzdF9leHRlbmRpbmczKHNlbGYpOgorICAgICAgICBjbGFzcyBTaGFkZShFbnVtKToKKyAgICAgICAgICAgIGRlZiBzaGFkZShzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5uYW1lCisgICAgICAgIGNsYXNzIENvbG9yKFNoYWRlKToKKyAgICAgICAgICAgIGRlZiBoZXgoc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICclcyBoZXhsaWZpZWQhJyAlIHNlbGYudmFsdWUKKyAgICAgICAgY2xhc3MgTW9yZUNvbG9yKENvbG9yKToKKyAgICAgICAgICAgIGN5YW4gPSA0CisgICAgICAgICAgICBtYWdlbnRhID0gNQorICAgICAgICAgICAgeWVsbG93ID0gNgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE1vcmVDb2xvci5tYWdlbnRhLmhleCgpLCAnNSBoZXhsaWZpZWQhJykKKworCisgICAgZGVmIHRlc3Rfbm9fZHVwbGljYXRlcyhzZWxmKToKKyAgICAgICAgY2xhc3MgVW5pcXVlRW51bShFbnVtKToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncyk6CisgICAgICAgICAgICAgICAgY2xzID0gc2VsZi5fX2NsYXNzX18KKyAgICAgICAgICAgICAgICBpZiBhbnkoc2VsZi52YWx1ZSA9PSBlLnZhbHVlIGZvciBlIGluIGNscyk6CisgICAgICAgICAgICAgICAgICAgIGEgPSBzZWxmLm5hbWUKKyAgICAgICAgICAgICAgICAgICAgZSA9IGNscyhzZWxmLnZhbHVlKS5uYW1lCisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFsaWFzZXMgbm90IGFsbG93ZWQgaW4gVW5pcXVlRW51bTogICVyIC0tPiAlciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChhLCBlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgY2xhc3MgQ29sb3IoVW5pcXVlRW51bSk6CisgICAgICAgICAgICByZWQgPSAxCisgICAgICAgICAgICBncmVlbiA9IDIKKyAgICAgICAgICAgIGJsdWUgPSAzCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBjbGFzcyBDb2xvcihVbmlxdWVFbnVtKToKKyAgICAgICAgICAgICAgICByZWQgPSAxCisgICAgICAgICAgICAgICAgZ3JlZW4gPSAyCisgICAgICAgICAgICAgICAgYmx1ZSA9IDMKKyAgICAgICAgICAgICAgICBncmVuZSA9IDIKKworICAgIGRlZiB0ZXN0X2luaXQoc2VsZik6CisgICAgICAgIGNsYXNzIFBsYW5ldChFbnVtKToKKyAgICAgICAgICAgIE1FUkNVUlkgPSAoMy4zMDNlKzIzLCAyLjQzOTdlNikKKyAgICAgICAgICAgIFZFTlVTICAgPSAoNC44NjllKzI0LCA2LjA1MThlNikKKyAgICAgICAgICAgIEVBUlRIICAgPSAoNS45NzZlKzI0LCA2LjM3ODE0ZTYpCisgICAgICAgICAgICBNQVJTICAgID0gKDYuNDIxZSsyMywgMy4zOTcyZTYpCisgICAgICAgICAgICBKVVBJVEVSID0gKDEuOWUrMjcsICAgNy4xNDkyZTcpCisgICAgICAgICAgICBTQVRVUk4gID0gKDUuNjg4ZSsyNiwgNi4wMjY4ZTcpCisgICAgICAgICAgICBVUkFOVVMgID0gKDguNjg2ZSsyNSwgMi41NTU5ZTcpCisgICAgICAgICAgICBORVBUVU5FID0gKDEuMDI0ZSsyNiwgMi40NzQ2ZTcpCisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgbWFzcywgcmFkaXVzKToKKyAgICAgICAgICAgICAgICBzZWxmLm1hc3MgPSBtYXNzICAgICAgICMgaW4ga2lsb2dyYW1zCisgICAgICAgICAgICAgICAgc2VsZi5yYWRpdXMgPSByYWRpdXMgICAjIGluIG1ldGVycworICAgICAgICAgICAgQHByb3BlcnR5CisgICAgICAgICAgICBkZWYgc3VyZmFjZV9ncmF2aXR5KHNlbGYpOgorICAgICAgICAgICAgICAgICMgdW5pdmVyc2FsIGdyYXZpdGF0aW9uYWwgY29uc3RhbnQgIChtMyBrZy0xIHMtMikKKyAgICAgICAgICAgICAgICBHID0gNi42NzMwMEUtMTEKKyAgICAgICAgICAgICAgICByZXR1cm4gRyAqIHNlbGYubWFzcyAvIChzZWxmLnJhZGl1cyAqIHNlbGYucmFkaXVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKFBsYW5ldC5FQVJUSC5zdXJmYWNlX2dyYXZpdHksIDIpLCA5LjgwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFBsYW5ldC5FQVJUSC52YWx1ZSwgKDUuOTc2ZSsyNCwgNi4zNzgxNGU2KSkKKworICAgIGRlZiB0ZXN0X25vbmhhc2hfdmFsdWUoc2VsZik6CisgICAgICAgIGNsYXNzIEF1dG9OdW1iZXJJbkFMaXN0KEVudW0pOgorICAgICAgICAgICAgZGVmIF9fbmV3X18oY2xzKToKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IFtsZW4oY2xzLl9fbWVtYmVyc19fKSArIDFdCisgICAgICAgICAgICAgICAgb2JqID0gb2JqZWN0Ll9fbmV3X18oY2xzKQorICAgICAgICAgICAgICAgIG9iai5fdmFsdWVfID0gdmFsdWUKKyAgICAgICAgICAgICAgICByZXR1cm4gb2JqCisgICAgICAgIGNsYXNzIENvbG9ySW5BTGlzdChBdXRvTnVtYmVySW5BTGlzdCk6CisgICAgICAgICAgICByZWQgPSAoKQorICAgICAgICAgICAgZ3JlZW4gPSAoKQorICAgICAgICAgICAgYmx1ZSA9ICgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChDb2xvckluQUxpc3QpLCBbQ29sb3JJbkFMaXN0LnJlZCwgQ29sb3JJbkFMaXN0LmdyZWVuLCBDb2xvckluQUxpc3QuYmx1ZV0pCisgICAgICAgIGZvciBlbnVtLCB2YWx1ZSBpbiB6aXAoQ29sb3JJbkFMaXN0LCByYW5nZSgzKSk6CisgICAgICAgICAgICB2YWx1ZSArPSAxCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVudW0udmFsdWUsIFt2YWx1ZV0pCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKENvbG9ySW5BTGlzdChbdmFsdWVdKSwgZW51bSkKKworICAgIGRlZiB0ZXN0X2NvbmZsaWN0aW5nX3R5cGVzX3Jlc29sdmVkX2luX25ldyhzZWxmKToKKyAgICAgICAgY2xhc3MgTGFiZWxsZWRJbnRFbnVtKGludCwgRW51bSk6CisgICAgICAgICAgICBkZWYgX19uZXdfXyhjbHMsICphcmdzKToKKyAgICAgICAgICAgICAgICB2YWx1ZSwgbGFiZWwgPSBhcmdzCisgICAgICAgICAgICAgICAgb2JqID0gaW50Ll9fbmV3X18oY2xzLCB2YWx1ZSkKKyAgICAgICAgICAgICAgICBvYmoubGFiZWwgPSBsYWJlbAorICAgICAgICAgICAgICAgIG9iai5fdmFsdWVfID0gdmFsdWUKKyAgICAgICAgICAgICAgICByZXR1cm4gb2JqCisKKyAgICAgICAgY2xhc3MgTGFiZWxsZWRMaXN0KExhYmVsbGVkSW50RW51bSk6CisgICAgICAgICAgICB1bnByb2Nlc3NlZCA9ICgxLCAiVW5wcm9jZXNzZWQiKQorICAgICAgICAgICAgcGF5bWVudF9jb21wbGV0ZSA9ICgyLCAiUGF5bWVudCBDb21wbGV0ZSIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KExhYmVsbGVkTGlzdCksIFtMYWJlbGxlZExpc3QudW5wcm9jZXNzZWQsIExhYmVsbGVkTGlzdC5wYXltZW50X2NvbXBsZXRlXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChMYWJlbGxlZExpc3QudW5wcm9jZXNzZWQsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTGFiZWxsZWRMaXN0KDEpLCBMYWJlbGxlZExpc3QudW5wcm9jZXNzZWQpCisKKworY2xhc3MgVGVzdFVuaXF1ZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF91bmlxdWVfY2xlYW4oc2VsZik6CisgICAgICAgIEB1bmlxdWUKKyAgICAgICAgY2xhc3MgQ2xlYW4oRW51bSk6CisgICAgICAgICAgICBvbmUgPSAxCisgICAgICAgICAgICB0d28gPSAnZG9zJworICAgICAgICAgICAgdHJlcyA9IDQuMAorICAgICAgICBAdW5pcXVlCisgICAgICAgIGNsYXNzIENsZWFuZXIoSW50RW51bSk6CisgICAgICAgICAgICBzaW5nbGUgPSAxCisgICAgICAgICAgICBkb3VibGUgPSAyCisgICAgICAgICAgICB0cmlwbGUgPSAzCisKKyAgICBkZWYgdGVzdF91bmlxdWVfZGlydHkoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLCAndHJlcy4qb25lJyk6CisgICAgICAgICAgICBAdW5pcXVlCisgICAgICAgICAgICBjbGFzcyBEaXJ0eShFbnVtKToKKyAgICAgICAgICAgICAgICBvbmUgPSAxCisgICAgICAgICAgICAgICAgdHdvID0gJ2RvcycKKyAgICAgICAgICAgICAgICB0cmVzID0gMQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoCisgICAgICAgICAgICAgICAgVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAnZG91YmxlLipzaW5nbGUuKnR1cmtleS4qdHJpcGxlJywKKyAgICAgICAgICAgICAgICApOgorICAgICAgICAgICAgQHVuaXF1ZQorICAgICAgICAgICAgY2xhc3MgRGlydGllcihJbnRFbnVtKToKKyAgICAgICAgICAgICAgICBzaW5nbGUgPSAxCisgICAgICAgICAgICAgICAgZG91YmxlID0gMQorICAgICAgICAgICAgICAgIHRyaXBsZSA9IDMKKyAgICAgICAgICAgICAgICB0dXJrZXkgPSAzCisKKworZXhwZWN0ZWRfaGVscF9vdXRwdXQgPSAiIiIKK0hlbHAgb24gY2xhc3MgQ29sb3IgaW4gbW9kdWxlICVzOgorCitjbGFzcyBDb2xvcihlbnVtLkVudW0pCisgfCAgTWV0aG9kIHJlc29sdXRpb24gb3JkZXI6CisgfCAgICAgIENvbG9yCisgfCAgICAgIGVudW0uRW51bQorIHwgICAgICBidWlsdGlucy5vYmplY3QKKyB8XHgyMFx4MjAKKyB8ICBEYXRhIGFuZCBvdGhlciBhdHRyaWJ1dGVzIGRlZmluZWQgaGVyZToKKyB8XHgyMFx4MjAKKyB8ICBibHVlID0gPENvbG9yLmJsdWU6IDM+CisgfFx4MjBceDIwCisgfCAgZ3JlZW4gPSA8Q29sb3IuZ3JlZW46IDI+CisgfFx4MjBceDIwCisgfCAgcmVkID0gPENvbG9yLnJlZDogMT4KKyB8XHgyMFx4MjAKKyB8ICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgfCAgRGF0YSBkZXNjcmlwdG9ycyBpbmhlcml0ZWQgZnJvbSBlbnVtLkVudW06CisgfFx4MjBceDIwCisgfCAgbmFtZQorIHwgICAgICBUaGUgbmFtZSBvZiB0aGUgRW51bSBtZW1iZXIuCisgfFx4MjBceDIwCisgfCAgdmFsdWUKKyB8ICAgICAgVGhlIHZhbHVlIG9mIHRoZSBFbnVtIG1lbWJlci4KKyB8XHgyMFx4MjAKKyB8ICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgfCAgRGF0YSBkZXNjcmlwdG9ycyBpbmhlcml0ZWQgZnJvbSBlbnVtLkVudW1NZXRhOgorIHxceDIwXHgyMAorIHwgIF9fbWVtYmVyc19fCisgfCAgICAgIFJldHVybnMgYSBtYXBwaW5nIG9mIG1lbWJlciBuYW1lLT52YWx1ZS4KKyB8XHgyMFx4MjBceDIwXHgyMFx4MjBceDIwCisgfCAgICAgIFRoaXMgbWFwcGluZyBsaXN0cyBhbGwgZW51bSBtZW1iZXJzLCBpbmNsdWRpbmcgYWxpYXNlcy4gTm90ZSB0aGF0IHRoaXMKKyB8ICAgICAgaXMgYSByZWFkLW9ubHkgdmlldyBvZiB0aGUgaW50ZXJuYWwgbWFwcGluZy4KKyIiIi5zdHJpcCgpCisKK2NsYXNzIFRlc3RTdGRMaWIodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgY2xhc3MgQ29sb3IoRW51bSk6CisgICAgICAgIHJlZCA9IDEKKyAgICAgICAgZ3JlZW4gPSAyCisgICAgICAgIGJsdWUgPSAzCisKKyAgICBkZWYgdGVzdF9weWRvYyhzZWxmKToKKyAgICAgICAgIyBpbmRpcmVjdGx5IHRlc3QgX19vYmpjbGFzc19fCisgICAgICAgIGV4cGVjdGVkX3RleHQgPSBleHBlY3RlZF9oZWxwX291dHB1dCAlIF9fbmFtZV9fCisgICAgICAgIG91dHB1dCA9IFN0cmluZ0lPKCkKKyAgICAgICAgaGVscGVyID0gcHlkb2MuSGVscGVyKG91dHB1dD1vdXRwdXQpCisgICAgICAgIGhlbHBlcihzZWxmLkNvbG9yKQorICAgICAgICByZXN1bHQgPSBvdXRwdXQuZ2V0dmFsdWUoKS5zdHJpcCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBleHBlY3RlZF90ZXh0KQorCisgICAgZGVmIHRlc3RfaW5zcGVjdF9nZXRtZW1iZXJzKHNlbGYpOgorICAgICAgICB2YWx1ZXMgPSBkaWN0KCgKKyAgICAgICAgICAgICAgICAoJ19fY2xhc3NfXycsIEVudW1NZXRhKSwKKyAgICAgICAgICAgICAgICAoJ19fZG9jX18nLCBOb25lKSwKKyAgICAgICAgICAgICAgICAoJ19fbWVtYmVyc19fJywgc2VsZi5Db2xvci5fX21lbWJlcnNfXyksCisgICAgICAgICAgICAgICAgKCdfX21vZHVsZV9fJywgX19uYW1lX18pLAorICAgICAgICAgICAgICAgICgnYmx1ZScsIHNlbGYuQ29sb3IuYmx1ZSksCisgICAgICAgICAgICAgICAgKCdncmVlbicsIHNlbGYuQ29sb3IuZ3JlZW4pLAorICAgICAgICAgICAgICAgICgnbmFtZScsIEVudW0uX19kaWN0X19bJ25hbWUnXSksCisgICAgICAgICAgICAgICAgKCdyZWQnLCBzZWxmLkNvbG9yLnJlZCksCisgICAgICAgICAgICAgICAgKCd2YWx1ZScsIEVudW0uX19kaWN0X19bJ3ZhbHVlJ10pLAorICAgICAgICAgICAgICAgICkpCisgICAgICAgIHJlc3VsdCA9IGRpY3QoaW5zcGVjdC5nZXRtZW1iZXJzKHNlbGYuQ29sb3IpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlcy5rZXlzKCksIHJlc3VsdC5rZXlzKCkpCisgICAgICAgIGZhaWxlZCA9IEZhbHNlCisgICAgICAgIGZvciBrIGluIHZhbHVlcy5rZXlzKCk6CisgICAgICAgICAgICBpZiByZXN1bHRba10gIT0gdmFsdWVzW2tdOgorICAgICAgICAgICAgICAgIHByaW50KCkKKyAgICAgICAgICAgICAgICBwcmludCgnXG4lc1xuICAgICBrZXk6ICVzXG4gIHJlc3VsdDogJXNcbmV4cGVjdGVkOiAlc1xuJXNcbicgJQorICAgICAgICAgICAgICAgICAgICAgICAgKCc9JyAqIDc1LCBrLCByZXN1bHRba10sIHZhbHVlc1trXSwgJz0nICogNzUpLCBzZXA9JycpCisgICAgICAgICAgICAgICAgZmFpbGVkID0gVHJ1ZQorICAgICAgICBpZiBmYWlsZWQ6CisgICAgICAgICAgICBzZWxmLmZhaWwoInJlc3VsdCBkb2VzIG5vdCBlcXVhbCBleHBlY3RlZCwgc2VlIHByaW50IGFib3ZlIikKKworICAgIGRlZiB0ZXN0X2luc3BlY3RfY2xhc3NpZnlfY2xhc3NfYXR0cnMoc2VsZik6CisgICAgICAgICMgaW5kaXJlY3RseSB0ZXN0IF9fb2JqY2xhc3NfXworICAgICAgICBmcm9tIGluc3BlY3QgaW1wb3J0IEF0dHJpYnV0ZQorICAgICAgICB2YWx1ZXMgPSBbCisgICAgICAgICAgICAgICAgQXR0cmlidXRlKG5hbWU9J19fY2xhc3NfXycsIGtpbmQ9J2RhdGEnLAorICAgICAgICAgICAgICAgICAgICBkZWZpbmluZ19jbGFzcz1vYmplY3QsIG9iamVjdD1FbnVtTWV0YSksCisgICAgICAgICAgICAgICAgQXR0cmlidXRlKG5hbWU9J19fZG9jX18nLCBraW5kPSdkYXRhJywKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5pbmdfY2xhc3M9c2VsZi5Db2xvciwgb2JqZWN0PU5vbmUpLAorICAgICAgICAgICAgICAgIEF0dHJpYnV0ZShuYW1lPSdfX21lbWJlcnNfXycsIGtpbmQ9J3Byb3BlcnR5JywKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5pbmdfY2xhc3M9RW51bU1ldGEsIG9iamVjdD1FbnVtTWV0YS5fX21lbWJlcnNfXyksCisgICAgICAgICAgICAgICAgQXR0cmlidXRlKG5hbWU9J19fbW9kdWxlX18nLCBraW5kPSdkYXRhJywKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5pbmdfY2xhc3M9c2VsZi5Db2xvciwgb2JqZWN0PV9fbmFtZV9fKSwKKyAgICAgICAgICAgICAgICBBdHRyaWJ1dGUobmFtZT0nYmx1ZScsIGtpbmQ9J2RhdGEnLAorICAgICAgICAgICAgICAgICAgICBkZWZpbmluZ19jbGFzcz1zZWxmLkNvbG9yLCBvYmplY3Q9c2VsZi5Db2xvci5ibHVlKSwKKyAgICAgICAgICAgICAgICBBdHRyaWJ1dGUobmFtZT0nZ3JlZW4nLCBraW5kPSdkYXRhJywKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5pbmdfY2xhc3M9c2VsZi5Db2xvciwgb2JqZWN0PXNlbGYuQ29sb3IuZ3JlZW4pLAorICAgICAgICAgICAgICAgIEF0dHJpYnV0ZShuYW1lPSdyZWQnLCBraW5kPSdkYXRhJywKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5pbmdfY2xhc3M9c2VsZi5Db2xvciwgb2JqZWN0PXNlbGYuQ29sb3IucmVkKSwKKyAgICAgICAgICAgICAgICBBdHRyaWJ1dGUobmFtZT0nbmFtZScsIGtpbmQ9J2RhdGEnLAorICAgICAgICAgICAgICAgICAgICBkZWZpbmluZ19jbGFzcz1FbnVtLCBvYmplY3Q9RW51bS5fX2RpY3RfX1snbmFtZSddKSwKKyAgICAgICAgICAgICAgICBBdHRyaWJ1dGUobmFtZT0ndmFsdWUnLCBraW5kPSdkYXRhJywKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5pbmdfY2xhc3M9RW51bSwgb2JqZWN0PUVudW0uX19kaWN0X19bJ3ZhbHVlJ10pLAorICAgICAgICAgICAgICAgIF0KKyAgICAgICAgdmFsdWVzLnNvcnQoa2V5PWxhbWJkYSBpdGVtOiBpdGVtLm5hbWUpCisgICAgICAgIHJlc3VsdCA9IGxpc3QoaW5zcGVjdC5jbGFzc2lmeV9jbGFzc19hdHRycyhzZWxmLkNvbG9yKSkKKyAgICAgICAgcmVzdWx0LnNvcnQoa2V5PWxhbWJkYSBpdGVtOiBpdGVtLm5hbWUpCisgICAgICAgIGZhaWxlZCA9IEZhbHNlCisgICAgICAgIGZvciB2LCByIGluIHppcCh2YWx1ZXMsIHJlc3VsdCk6CisgICAgICAgICAgICBpZiByICE9IHY6CisgICAgICAgICAgICAgICAgcHJpbnQoJ1xuJXNcbiVzXG4lc1xuJXNcbicgJSAoJz0nICogNzUsIHIsIHYsICc9JyAqIDc1KSwgc2VwPScnKQorICAgICAgICAgICAgICAgIGZhaWxlZCA9IFRydWUKKyAgICAgICAgaWYgZmFpbGVkOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJyZXN1bHQgZG9lcyBub3QgZXF1YWwgZXhwZWN0ZWQsIHNlZSBwcmludCBhYm92ZSIpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2VudW1lcmF0ZS5weSBiL0xpYi90ZXN0L3Rlc3RfZW51bWVyYXRlLnB5CmluZGV4IDRhZjIxN2IuLmU4NTI1NGMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZW51bWVyYXRlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZW51bWVyYXRlLnB5CkBAIC0xLDQgKzEsNSBAQAogaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgb3BlcmF0b3IKIGltcG9ydCBzeXMKIGltcG9ydCBwaWNrbGUKIApAQCAtNjUsMjAgKzY2LDIxIEBACiBjbGFzcyBQaWNrbGVUZXN0OgogICAgICMgSGVscGVyIHRvIGNoZWNrIHBpY2tsYWJpbGl0eQogICAgIGRlZiBjaGVja19waWNrbGUoc2VsZiwgaXRvcmcsIHNlcSk6Ci0gICAgICAgIGQgPSBwaWNrbGUuZHVtcHMoaXRvcmcpCi0gICAgICAgIGl0ID0gcGlja2xlLmxvYWRzKGQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShpdG9yZyksIHR5cGUoaXQpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoaXQpLCBzZXEpCisgICAgICAgIGZvciBwcm90byBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgZCA9IHBpY2tsZS5kdW1wcyhpdG9yZywgcHJvdG8pCisgICAgICAgICAgICBpdCA9IHBpY2tsZS5sb2FkcyhkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGl0b3JnKSwgdHlwZShpdCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoaXQpLCBzZXEpCiAKLSAgICAgICAgaXQgPSBwaWNrbGUubG9hZHMoZCkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgbmV4dChpdCkKLSAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlcVsxOl0pCi0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgZCA9IHBpY2tsZS5kdW1wcyhpdCkKLSAgICAgICAgaXQgPSBwaWNrbGUubG9hZHMoZCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGl0KSwgc2VxWzE6XSkKKyAgICAgICAgICAgIGl0ID0gcGlja2xlLmxvYWRzKGQpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbmV4dChpdCkKKyAgICAgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VxWzE6XSkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgZCA9IHBpY2tsZS5kdW1wcyhpdCwgcHJvdG8pCisgICAgICAgICAgICBpdCA9IHBpY2tsZS5sb2FkcyhkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGl0KSwgc2VxWzE6XSkKIAogY2xhc3MgRW51bWVyYXRlVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UsIFBpY2tsZVRlc3QpOgogCkBAIC0xNjgsMTUgKzE3MCwxMiBAQAogICAgICAgICB4ID0gcmFuZ2UoMSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHJldmVyc2VkKHgpKSwgdHlwZShpdGVyKHgpKSkKIAotICAgIEBzdXBwb3J0LmNweXRob25fb25seQogICAgIGRlZiB0ZXN0X2xlbihzZWxmKToKLSAgICAgICAgIyBUaGlzIGlzIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbCwgbm90IGFuIGludGVyZmFjZSByZXF1aXJlbWVudAotICAgICAgICBmcm9tIHRlc3QudGVzdF9pdGVybGVuIGltcG9ydCBsZW4KICAgICAgICAgZm9yIHMgaW4gKCdoZWxsbycsIHR1cGxlKCdoZWxsbycpLCBsaXN0KCdoZWxsbycpLCByYW5nZSg1KSk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXZlcnNlZChzKSksIGxlbihzKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IubGVuZ3RoX2hpbnQocmV2ZXJzZWQocykpLCBsZW4ocykpCiAgICAgICAgICAgICByID0gcmV2ZXJzZWQocykKICAgICAgICAgICAgIGxpc3QocikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHIpLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5sZW5ndGhfaGludChyKSwgMCkKICAgICAgICAgY2xhc3MgU2VxV2l0aFdlaXJkTGVuOgogICAgICAgICAgICAgY2FsbGVkID0gRmFsc2UKICAgICAgICAgICAgIGRlZiBfX2xlbl9fKHNlbGYpOgpAQCAtMTg3LDcgKzE4Niw3IEBACiAgICAgICAgICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaW5kZXgpOgogICAgICAgICAgICAgICAgIHJldHVybiBpbmRleAogICAgICAgICByID0gcmV2ZXJzZWQoU2VxV2l0aFdlaXJkTGVuKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBsZW4sIHIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBvcGVyYXRvci5sZW5ndGhfaGludCwgcikKIAogCiAgICAgZGVmIHRlc3RfZ2Moc2VsZik6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2Vwb2xsLnB5IGIvTGliL3Rlc3QvdGVzdF9lcG9sbC5weQppbmRleCA4NzFlZmIyLi5iMzdmMDMzIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2Vwb2xsLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZXBvbGwucHkKQEAgLTIxLDEwICsyMSwxMSBAQAogIiIiCiBUZXN0cyBmb3IgZXBvbGwgd3JhcHBlci4KICIiIgotaW1wb3J0IHNvY2tldAogaW1wb3J0IGVycm5vCi1pbXBvcnQgdGltZQoraW1wb3J0IG9zCiBpbXBvcnQgc2VsZWN0CitpbXBvcnQgc29ja2V0CitpbXBvcnQgdGltZQogaW1wb3J0IHVuaXR0ZXN0CiAKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydApAQCAtMzMsNyArMzQsNyBAQAogCiB0cnk6CiAgICAgc2VsZWN0LmVwb2xsKCkKLWV4Y2VwdCBJT0Vycm9yIGFzIGU6CitleGNlcHQgT1NFcnJvciBhcyBlOgogICAgIGlmIGUuZXJybm8gPT0gZXJybm8uRU5PU1lTOgogICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgia2VybmVsIGRvZXNuJ3Qgc3VwcG9ydCBlcG9sbCgpIikKICAgICByYWlzZQpAQCAtNTUsNyArNTYsNyBAQAogICAgICAgICBjbGllbnQuc2V0YmxvY2tpbmcoRmFsc2UpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGNsaWVudC5jb25uZWN0KCgnMTI3LjAuMC4xJywgc2VsZi5zZXJ2ZXJTb2NrZXQuZ2V0c29ja25hbWUoKVsxXSkpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5hcmdzWzBdLCBlcnJuby5FSU5QUk9HUkVTUykKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCJDb25uZWN0IHNob3VsZCBoYXZlIHJhaXNlZCBFSU5QUk9HUkVTUyIpCkBAIC04Niw2ICs4NywxMyBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGVjdC5lcG9sbCwgWydmb28nXSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxlY3QuZXBvbGwsIHt9KQogCisgICAgZGVmIHRlc3RfY29udGV4dF9tYW5hZ2VyKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGVjdC5lcG9sbCgxNikgYXMgZXA6CisgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIoZXAuZmlsZW5vKCksIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGVwLmNsb3NlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVwLmNsb3NlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZXAuZmlsZW5vKQorCiAgICAgZGVmIHRlc3RfYWRkKHNlbGYpOgogICAgICAgICBzZXJ2ZXIsIGNsaWVudCA9IHNlbGYuX2Nvbm5lY3RlZF9wYWlyKCkKIApAQCAtMTE0LDEyICsxMjIsMTIgQEAKICAgICAgICAgICAgICMgVmFsdWVFcnJvcjogZmlsZSBkZXNjcmlwdG9yIGNhbm5vdCBiZSBhIG5lZ2F0aXZlIGludGVnZXIgKC0xKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZXAucmVnaXN0ZXIsIC0xLAogICAgICAgICAgICAgICAgIHNlbGVjdC5FUE9MTElOIHwgc2VsZWN0LkVQT0xMT1VUKQotICAgICAgICAgICAgIyBJT0Vycm9yOiBbRXJybm8gOV0gQmFkIGZpbGUgZGVzY3JpcHRvcgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgZXAucmVnaXN0ZXIsIDEwMDAwLAorICAgICAgICAgICAgIyBPU0Vycm9yOiBbRXJybm8gOV0gQmFkIGZpbGUgZGVzY3JpcHRvcgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgZXAucmVnaXN0ZXIsIDEwMDAwLAogICAgICAgICAgICAgICAgIHNlbGVjdC5FUE9MTElOIHwgc2VsZWN0LkVQT0xMT1VUKQogICAgICAgICAgICAgIyByZWdpc3RlcmluZyB0d2ljZSBhbHNvIHJhaXNlcyBhbiBleGNlcHRpb24KICAgICAgICAgICAgIGVwLnJlZ2lzdGVyKHNlcnZlciwgc2VsZWN0LkVQT0xMSU4gfCBzZWxlY3QuRVBPTExPVVQpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBlcC5yZWdpc3Rlciwgc2VydmVyLAorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgZXAucmVnaXN0ZXIsIHNlcnZlciwKICAgICAgICAgICAgICAgICBzZWxlY3QuRVBPTExJTiB8IHNlbGVjdC5FUE9MTE9VVCkKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIGVwLmNsb3NlKCkKQEAgLTE0MSw3ICsxNDksNyBAQAogICAgICAgICBlcC5jbG9zZSgpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGVwMi5wb2xsKDEsIDQpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuYXJnc1swXSwgZXJybm8uRUJBREYsIGUpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLmZhaWwoImVwb2xsIG9uIGNsb3NlZCBmZCBkaWRuJ3QgcmFpc2UgRUJBREYiKQpAQCAtMTU1LDkgKzE2Myw5IEBACiAgICAgICAgIGVwLnJlZ2lzdGVyKGNsaWVudC5maWxlbm8oKSwKICAgICAgICAgICAgICAgICAgICBzZWxlY3QuRVBPTExJTiB8IHNlbGVjdC5FUE9MTE9VVCB8IHNlbGVjdC5FUE9MTEVUKQogCi0gICAgICAgIG5vdyA9IHRpbWUudGltZSgpCisgICAgICAgIG5vdyA9IHRpbWUubW9ub3RvbmljKCkKICAgICAgICAgZXZlbnRzID0gZXAucG9sbCgxLCA0KQotICAgICAgICB0aGVuID0gdGltZS50aW1lKCkKKyAgICAgICAgdGhlbiA9IHRpbWUubW9ub3RvbmljKCkKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0aGVuIC0gbm93ID4gMC4xLCB0aGVuIC0gbm93KQogCiAgICAgICAgIGV2ZW50cy5zb3J0KCkKQEAgLTE2NiwxOSArMTc0LDE2IEBACiAgICAgICAgIGV4cGVjdGVkLnNvcnQoKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZlbnRzLCBleHBlY3RlZCkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0aGVuIC0gbm93ID4gMC4wMSwgdGhlbiAtIG5vdykKIAotICAgICAgICBub3cgPSB0aW1lLnRpbWUoKQogICAgICAgICBldmVudHMgPSBlcC5wb2xsKHRpbWVvdXQ9Mi4xLCBtYXhldmVudHM9NCkKLSAgICAgICAgdGhlbiA9IHRpbWUudGltZSgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXZlbnRzKQogCiAgICAgICAgIGNsaWVudC5zZW5kKGIiSGVsbG8hIikKICAgICAgICAgc2VydmVyLnNlbmQoYiJ3b3JsZCEhISIpCiAKLSAgICAgICAgbm93ID0gdGltZS50aW1lKCkKKyAgICAgICAgbm93ID0gdGltZS5tb25vdG9uaWMoKQogICAgICAgICBldmVudHMgPSBlcC5wb2xsKDEsIDQpCi0gICAgICAgIHRoZW4gPSB0aW1lLnRpbWUoKQorICAgICAgICB0aGVuID0gdGltZS5tb25vdG9uaWMoKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRoZW4gLSBub3cgPiAwLjAxKQogCiAgICAgICAgIGV2ZW50cy5zb3J0KCkKQEAgLTE5MCw5ICsxOTUsOSBAQAogCiAgICAgICAgIGVwLnVucmVnaXN0ZXIoY2xpZW50LmZpbGVubygpKQogICAgICAgICBlcC5tb2RpZnkoc2VydmVyLmZpbGVubygpLCBzZWxlY3QuRVBPTExPVVQpCi0gICAgICAgIG5vdyA9IHRpbWUudGltZSgpCisgICAgICAgIG5vdyA9IHRpbWUubW9ub3RvbmljKCkKICAgICAgICAgZXZlbnRzID0gZXAucG9sbCgxLCA0KQotICAgICAgICB0aGVuID0gdGltZS50aW1lKCkKKyAgICAgICAgdGhlbiA9IHRpbWUubW9ub3RvbmljKCkKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0aGVuIC0gbm93ID4gMC4wMSkKIAogICAgICAgICBleHBlY3RlZCA9IFsoc2VydmVyLmZpbGVubygpLCBzZWxlY3QuRVBPTExPVVQpXQpAQCAtMjA5LDE0ICsyMTQsNDMgQEAKICAgICAgICAgZXAgPSBzZWxlY3QuZXBvbGwoMTYpCiAgICAgICAgIGVwLnJlZ2lzdGVyKHNlcnZlcikKIAotICAgICAgICBub3cgPSB0aW1lLnRpbWUoKQorICAgICAgICBub3cgPSB0aW1lLm1vbm90b25pYygpCiAgICAgICAgIGV2ZW50cyA9IGVwLnBvbGwoMSwgNCkKLSAgICAgICAgdGhlbiA9IHRpbWUudGltZSgpCisgICAgICAgIHRoZW4gPSB0aW1lLm1vbm90b25pYygpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodGhlbiAtIG5vdyA+IDAuMDEpCiAKICAgICAgICAgc2VydmVyLmNsb3NlKCkKICAgICAgICAgZXAudW5yZWdpc3RlcihmZCkKIAorICAgIGRlZiB0ZXN0X2Nsb3NlKHNlbGYpOgorICAgICAgICBvcGVuX2ZpbGUgPSBvcGVuKF9fZmlsZV9fLCAicmIiKQorICAgICAgICBzZWxmLmFkZENsZWFudXAob3Blbl9maWxlLmNsb3NlKQorICAgICAgICBmZCA9IG9wZW5fZmlsZS5maWxlbm8oKQorICAgICAgICBlcG9sbCA9IHNlbGVjdC5lcG9sbCgpCisKKyAgICAgICAgIyB0ZXN0IGZpbGVubygpIG1ldGhvZCBhbmQgY2xvc2VkIGF0dHJpYnV0ZQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZXBvbGwuZmlsZW5vKCksIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShlcG9sbC5jbG9zZWQpCisKKyAgICAgICAgIyB0ZXN0IGNsb3NlKCkKKyAgICAgICAgZXBvbGwuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZXBvbGwuY2xvc2VkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBlcG9sbC5maWxlbm8pCisKKyAgICAgICAgIyBjbG9zZSgpIGNhbiBiZSBjYWxsZWQgbW9yZSB0aGFuIG9uY2UKKyAgICAgICAgZXBvbGwuY2xvc2UoKQorCisgICAgICAgICMgb3BlcmF0aW9ucyBtdXN0IGZhaWwgd2l0aCBWYWx1ZUVycm9yKCJJL08gb3BlcmF0aW9uIG9uIGNsb3NlZCAuLi4iKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBlcG9sbC5tb2RpZnksIGZkLCBzZWxlY3QuRVBPTExJTikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZXBvbGwucG9sbCwgMS4wKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBlcG9sbC5yZWdpc3RlciwgZmQsIHNlbGVjdC5FUE9MTElOKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBlcG9sbC51bnJlZ2lzdGVyLCBmZCkKKworICAgIGRlZiB0ZXN0X2ZkX25vbl9pbmhlcml0YWJsZShzZWxmKToKKyAgICAgICAgZXBvbGwgPSBzZWxlY3QuZXBvbGwoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoZXBvbGwuY2xvc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MuZ2V0X2luaGVyaXRhYmxlKGVwb2xsLmZpbGVubygpKSwgRmFsc2UpCisKIAogZGVmIHRlc3RfbWFpbigpOgogICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KFRlc3RFUG9sbCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZXhjZXB0aW9ucy5weSBiL0xpYi90ZXN0L3Rlc3RfZXhjZXB0aW9ucy5weQppbmRleCA4ZDExZDkwLi5kOTU0MzAyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2V4Y2VwdGlvbnMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9leGNlcHRpb25zLnB5CkBAIC04LDggKzgsOCBAQAogaW1wb3J0IGVycm5vCiAKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCAoVEVTVEZOLCBjYXB0dXJlZF9vdXRwdXQsIGNoZWNrX2ltcGxfZGV0YWlsLAotICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja193YXJuaW5ncywgY3B5dGhvbl9vbmx5LCBnY19jb2xsZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICBub190cmFjaW5nLCBydW5fdW5pdHRlc3QsIHVubGluaykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tfd2FybmluZ3MsIGNweXRob25fb25seSwgZ2NfY29sbGVjdCwgcnVuX3VuaXR0ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBub190cmFjaW5nLCB1bmxpbmssIGltcG9ydF9tb2R1bGUpCiAKIGNsYXNzIE5haXZlRXhjZXB0aW9uKEV4Y2VwdGlvbik6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHgpOgpAQCAtMjMwLDYgKzIzMCw3IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHcud2luZXJyb3IsIDMpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHcuc3RyZXJyb3IsICdmb28nKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3LmZpbGVuYW1lLCAnYmFyJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwody5maWxlbmFtZTIsIE5vbmUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cih3KSwgIltXaW5FcnJvciAzXSBmb286ICdiYXInIikKICAgICAgICAgICAgICMgVW5rbm93biB3aW4gZXJyb3IgYmVjb21lcyBFSU5WQUwgKDIyKQogICAgICAgICAgICAgdyA9IE9TRXJyb3IoMCwgJ2ZvbycsIE5vbmUsIDEwMDEpCkBAIC0yMzcsNiArMjM4LDcgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwody53aW5lcnJvciwgMTAwMSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwody5zdHJlcnJvciwgJ2ZvbycpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHcuZmlsZW5hbWUsIE5vbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHcuZmlsZW5hbWUyLCBOb25lKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIodyksICJbV2luRXJyb3IgMTAwMV0gZm9vIikKICAgICAgICAgICAgICMgTm9uLW51bWVyaWMgImVycm5vIgogICAgICAgICAgICAgdyA9IE9TRXJyb3IoJ2JhcicsICdmb28nKQpAQCAtMjQ0LDYgKzI0NiwxNyBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3LndpbmVycm9yLCBOb25lKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3LnN0cmVycm9yLCAnZm9vJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwody5maWxlbmFtZSwgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwody5maWxlbmFtZTIsIE5vbmUpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdCBzcGVjaWZpYyB0byBXaW5kb3dzJykKKyAgICBkZWYgdGVzdF93aW5kb3dzX21lc3NhZ2Uoc2VsZik6CisgICAgICAgICIiIlNob3VsZCBmaWxsIGluIHVua25vd24gZXJyb3IgY29kZSBpbiBXaW5kb3dzIGVycm9yIG1lc3NhZ2UiIiIKKyAgICAgICAgY3R5cGVzID0gaW1wb3J0X21vZHVsZSgnY3R5cGVzJykKKyAgICAgICAgIyB0aGlzIGVycm9yIGNvZGUgaGFzIG5vIG1lc3NhZ2UsIFB5dGhvbiBmb3JtYXRzIGl0IGFzIGhleGFkZWNpbWFsCisgICAgICAgIGNvZGUgPSAzNzY1MjY5MzQ3CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChPU0Vycm9yLCAnV2luZG93cyBFcnJvciAweCV4JyAlIGNvZGUpOgorICAgICAgICAgICAgY3R5cGVzLnB5dGhvbmFwaS5QeUVycl9TZXRGcm9tV2luZG93c0Vycihjb2RlKQogCiAgICAgZGVmIHRlc3RBdHRyaWJ1dGVzKHNlbGYpOgogICAgICAgICAjIHRlc3QgdGhhdCBleGNlcHRpb24gYXR0cmlidXRlcyBhcmUgaGFwcHkKQEAgLTI1NywyNCArMjcwLDI3IEBACiAgICAgICAgICAgICAgICAgeydhcmdzJyA6ICgnZm9vJywgMSl9KSwKICAgICAgICAgICAgIChTeXN0ZW1FeGl0LCAoJ2ZvbycsKSwKICAgICAgICAgICAgICAgICB7J2FyZ3MnIDogKCdmb28nLCksICdjb2RlJyA6ICdmb28nfSksCi0gICAgICAgICAgICAoSU9FcnJvciwgKCdmb28nLCksCi0gICAgICAgICAgICAgICAgeydhcmdzJyA6ICgnZm9vJywpLCAnZmlsZW5hbWUnIDogTm9uZSwKKyAgICAgICAgICAgIChPU0Vycm9yLCAoJ2ZvbycsKSwKKyAgICAgICAgICAgICAgICB7J2FyZ3MnIDogKCdmb28nLCksICdmaWxlbmFtZScgOiBOb25lLCAnZmlsZW5hbWUyJyA6IE5vbmUsCiAgICAgICAgICAgICAgICAgICdlcnJubycgOiBOb25lLCAnc3RyZXJyb3InIDogTm9uZX0pLAotICAgICAgICAgICAgKElPRXJyb3IsICgnZm9vJywgJ2JhcicpLAotICAgICAgICAgICAgICAgIHsnYXJncycgOiAoJ2ZvbycsICdiYXInKSwgJ2ZpbGVuYW1lJyA6IE5vbmUsCisgICAgICAgICAgICAoT1NFcnJvciwgKCdmb28nLCAnYmFyJyksCisgICAgICAgICAgICAgICAgeydhcmdzJyA6ICgnZm9vJywgJ2JhcicpLAorICAgICAgICAgICAgICAgICAnZmlsZW5hbWUnIDogTm9uZSwgJ2ZpbGVuYW1lMicgOiBOb25lLAogICAgICAgICAgICAgICAgICAnZXJybm8nIDogJ2ZvbycsICdzdHJlcnJvcicgOiAnYmFyJ30pLAotICAgICAgICAgICAgKElPRXJyb3IsICgnZm9vJywgJ2JhcicsICdiYXonKSwKLSAgICAgICAgICAgICAgICB7J2FyZ3MnIDogKCdmb28nLCAnYmFyJyksICdmaWxlbmFtZScgOiAnYmF6JywKKyAgICAgICAgICAgIChPU0Vycm9yLCAoJ2ZvbycsICdiYXInLCAnYmF6JyksCisgICAgICAgICAgICAgICAgeydhcmdzJyA6ICgnZm9vJywgJ2JhcicpLAorICAgICAgICAgICAgICAgICAnZmlsZW5hbWUnIDogJ2JheicsICdmaWxlbmFtZTInIDogTm9uZSwKICAgICAgICAgICAgICAgICAgJ2Vycm5vJyA6ICdmb28nLCAnc3RyZXJyb3InIDogJ2Jhcid9KSwKLSAgICAgICAgICAgIChJT0Vycm9yLCAoJ2ZvbycsICdiYXInLCAnYmF6JywgJ3F1dXgnKSwKLSAgICAgICAgICAgICAgICB7J2FyZ3MnIDogKCdmb28nLCAnYmFyJywgJ2JheicsICdxdXV4Jyl9KSwKLSAgICAgICAgICAgIChFbnZpcm9ubWVudEVycm9yLCAoJ2Vycm5vU3RyJywgJ3N0ckVycm9yU3RyJywgJ2ZpbGVuYW1lU3RyJyksCisgICAgICAgICAgICAoT1NFcnJvciwgKCdmb28nLCAnYmFyJywgJ2JheicsIE5vbmUsICdxdXV4JyksCisgICAgICAgICAgICAgICAgeydhcmdzJyA6ICgnZm9vJywgJ2JhcicpLCAnZmlsZW5hbWUnIDogJ2JheicsICdmaWxlbmFtZTInOiAncXV1eCd9KSwKKyAgICAgICAgICAgIChPU0Vycm9yLCAoJ2Vycm5vU3RyJywgJ3N0ckVycm9yU3RyJywgJ2ZpbGVuYW1lU3RyJyksCiAgICAgICAgICAgICAgICAgeydhcmdzJyA6ICgnZXJybm9TdHInLCAnc3RyRXJyb3JTdHInKSwKICAgICAgICAgICAgICAgICAgJ3N0cmVycm9yJyA6ICdzdHJFcnJvclN0cicsICdlcnJubycgOiAnZXJybm9TdHInLAogICAgICAgICAgICAgICAgICAnZmlsZW5hbWUnIDogJ2ZpbGVuYW1lU3RyJ30pLAotICAgICAgICAgICAgKEVudmlyb25tZW50RXJyb3IsICgxLCAnc3RyRXJyb3JTdHInLCAnZmlsZW5hbWVTdHInKSwKKyAgICAgICAgICAgIChPU0Vycm9yLCAoMSwgJ3N0ckVycm9yU3RyJywgJ2ZpbGVuYW1lU3RyJyksCiAgICAgICAgICAgICAgICAgeydhcmdzJyA6ICgxLCAnc3RyRXJyb3JTdHInKSwgJ2Vycm5vJyA6IDEsCi0gICAgICAgICAgICAgICAgICdzdHJlcnJvcicgOiAnc3RyRXJyb3JTdHInLCAnZmlsZW5hbWUnIDogJ2ZpbGVuYW1lU3RyJ30pLAorICAgICAgICAgICAgICAgICAnc3RyZXJyb3InIDogJ3N0ckVycm9yU3RyJywKKyAgICAgICAgICAgICAgICAgJ2ZpbGVuYW1lJyA6ICdmaWxlbmFtZVN0cicsICdmaWxlbmFtZTInIDogTm9uZX0pLAogICAgICAgICAgICAgKFN5bnRheEVycm9yLCAoKSwgeydtc2cnIDogTm9uZSwgJ3RleHQnIDogTm9uZSwKICAgICAgICAgICAgICAgICAnZmlsZW5hbWUnIDogTm9uZSwgJ2xpbmVubycgOiBOb25lLCAnb2Zmc2V0JyA6IE5vbmUsCiAgICAgICAgICAgICAgICAgJ3ByaW50X2ZpbGVfYW5kX2xpbmUnIDogTm9uZX0pLApAQCAtMzMwLDcgKzM0Niw4IEBACiAgICAgICAgICAgICAgICAgKFdpbmRvd3NFcnJvciwgKDEsICdzdHJFcnJvclN0cicsICdmaWxlbmFtZVN0cicpLAogICAgICAgICAgICAgICAgICAgICB7J2FyZ3MnIDogKDEsICdzdHJFcnJvclN0cicpLAogICAgICAgICAgICAgICAgICAgICAgJ3N0cmVycm9yJyA6ICdzdHJFcnJvclN0cicsICd3aW5lcnJvcicgOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgJ2Vycm5vJyA6IDEsICdmaWxlbmFtZScgOiAnZmlsZW5hbWVTdHInfSkKKyAgICAgICAgICAgICAgICAgICAgICdlcnJubycgOiAxLAorICAgICAgICAgICAgICAgICAgICAgJ2ZpbGVuYW1lJyA6ICdmaWxlbmFtZVN0cicsICdmaWxlbmFtZTInIDogTm9uZX0pCiAgICAgICAgICAgICApCiAgICAgICAgIGV4Y2VwdCBOYW1lRXJyb3I6CiAgICAgICAgICAgICBwYXNzCkBAIC00MjIsNyArNDM5LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZS5fX2NvbnRleHRfXykKICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZS5fX2NhdXNlX18pCiAKLSAgICAgICAgY2xhc3MgTXlFeGNlcHRpb24oRW52aXJvbm1lbnRFcnJvcik6CisgICAgICAgIGNsYXNzIE15RXhjZXB0aW9uKE9TRXJyb3IpOgogICAgICAgICAgICAgcGFzcwogCiAgICAgICAgIGUgPSBNeUV4Y2VwdGlvbigpCkBAIC02NjEsNiArNjc4LDUyIEBACiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3lzLmV4Y19pbmZvKCksIChOb25lLCBOb25lLCBOb25lKSkKIAorICAgIGRlZiB0ZXN0X2dlbmVyYXRvcl9sZWFraW5nMyhzZWxmKToKKyAgICAgICAgIyBTZWUgaXNzdWUgIzIzMzUzLiAgV2hlbiBnZW4udGhyb3coKSBpcyBjYWxsZWQsIHRoZSBjYWxsZXIncworICAgICAgICAjIGV4Y2VwdGlvbiBzdGF0ZSBzaG91bGQgYmUgc2F2ZSBhbmQgcmVzdG9yZWQuCisgICAgICAgIGRlZiBnKCk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgeWllbGQKKyAgICAgICAgICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvcjoKKyAgICAgICAgICAgICAgICB5aWVsZCBzeXMuZXhjX2luZm8oKVsxXQorICAgICAgICBpdCA9IGcoKQorICAgICAgICBuZXh0KGl0KQorICAgICAgICB0cnk6CisgICAgICAgICAgICAxLzAKKyAgICAgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yIGFzIGU6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHN5cy5leGNfaW5mbygpWzFdLCBlKQorICAgICAgICAgICAgZ2VuX2V4YyA9IGl0LnRocm93KGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHN5cy5leGNfaW5mbygpWzFdLCBlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhnZW5fZXhjLCBlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN5cy5leGNfaW5mbygpLCAoTm9uZSwgTm9uZSwgTm9uZSkpCisKKyAgICBkZWYgdGVzdF9nZW5lcmF0b3JfbGVha2luZzQoc2VsZik6CisgICAgICAgICMgU2VlIGlzc3VlICMyMzM1My4gIFdoZW4gYW4gZXhjZXB0aW9uIGlzIHJhaXNlZCBieSBhIGdlbmVyYXRvciwKKyAgICAgICAgIyB0aGUgY2FsbGVyJ3MgZXhjZXB0aW9uIHN0YXRlIHNob3VsZCBzdGlsbCBiZSByZXN0b3JlZC4KKyAgICAgICAgZGVmIGcoKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAxLzAKKyAgICAgICAgICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvcjoKKyAgICAgICAgICAgICAgICB5aWVsZCBzeXMuZXhjX2luZm8oKVswXQorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgIGl0ID0gZygpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcgorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgIyBUaGUgY2FsbGVyJ3MgZXhjZXB0aW9uIHN0YXRlIChUeXBlRXJyb3IpIGlzIHRlbXBvcmFyaWx5CisgICAgICAgICAgICAjIHNhdmVkIGluIHRoZSBnZW5lcmF0b3IuCisgICAgICAgICAgICB0cCA9IG5leHQoaXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModHAsIFplcm9EaXZpc2lvbkVycm9yKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBuZXh0KGl0KQorICAgICAgICAgICAgIyBXZSBjYW4ndCBjaGVjayBpdCBpbW1lZGlhdGVseSwgYnV0IHdoaWxlIG5leHQoKSByZXR1cm5zCisgICAgICAgICAgICAjIHdpdGggYW4gZXhjZXB0aW9uLCBpdCBzaG91bGRuJ3QgaGF2ZSByZXN0b3JlZCB0aGUgb2xkCisgICAgICAgICAgICAjIGV4Y2VwdGlvbiBzdGF0ZSAoVHlwZUVycm9yKS4KKyAgICAgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yIGFzIGU6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHN5cy5leGNfaW5mbygpWzFdLCBlKQorICAgICAgICAjIFdlIHVzZWQgdG8gZmluZCBUeXBlRXJyb3IgaGVyZS4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzeXMuZXhjX2luZm8oKSwgKE5vbmUsIE5vbmUsIE5vbmUpKQorCiAgICAgZGVmIHRlc3RfZ2VuZXJhdG9yX2RvZXNudF9yZXRhaW5fb2xkX2V4YyhzZWxmKToKICAgICAgICAgZGVmIGcoKToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzeXMuZXhjX2luZm8oKVsxXSwgUnVudGltZUVycm9yKQpAQCAtNzYzLDcgKzgyNiw3IEBACiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZSwgKE5vbmUsIE5vbmUsIE5vbmUpKQogCi0gICAgZGVmIHRlc3RVbmljb2RlQ2hhbmdlQXR0cmlidXRlcyhzZWxmKToKKyAgICBkZWYgdGVzdF91bmljb2RlX2NoYW5nZV9hdHRyaWJ1dGVzKHNlbGYpOgogICAgICAgICAjIFNlZSBpc3N1ZSA3MzA5LiBUaGlzIHdhcyBhIGNyYXNoZXIuCiAKICAgICAgICAgdSA9IFVuaWNvZGVFbmNvZGVFcnJvcignYmF6JywgJ3h4eHh4JywgMSwgNSwgJ2ZvbycpCkBAIC04MDAsNiArODYzLDEyIEBACiAgICAgICAgIHUuc3RhcnQgPSAxMDAwCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHUpLCAiY2FuJ3QgdHJhbnNsYXRlIGNoYXJhY3RlcnMgaW4gcG9zaXRpb24gMTAwMC00OiA5NjUyMzA5NTE0NDM2ODU3MjQ5OTciKQogCisgICAgZGVmIHRlc3RfdW5pY29kZV9lcnJvcnNfbm9fb2JqZWN0KHNlbGYpOgorICAgICAgICAjIFNlZSBpc3N1ZSAjMjExMzQuCisgICAgICAgIGtsYXNzZXMgPSBVbmljb2RlRW5jb2RlRXJyb3IsIFVuaWNvZGVEZWNvZGVFcnJvciwgVW5pY29kZVRyYW5zbGF0ZUVycm9yCisgICAgICAgIGZvciBrbGFzcyBpbiBrbGFzc2VzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoa2xhc3MuX19uZXdfXyhrbGFzcykpLCAiIikKKwogICAgIEBub190cmFjaW5nCiAgICAgZGVmIHRlc3RfYmFkaXNpbnN0YW5jZShzZWxmKToKICAgICAgICAgIyBCdWcgIzI1NDI6IGlmIGlzc3ViY2xhc3MoZSwgTXlFeGNlcHRpb24pIHJhaXNlcyBhbiBleGNlcHRpb24sCkBAIC05NjgsOCArMTAzNyw1IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihhcmcpLCBzdHIoZXhjKSkKIAogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgcnVuX3VuaXR0ZXN0KEV4Y2VwdGlvblRlc3RzLCBJbXBvcnRFcnJvclRlc3RzKQotCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9mYXVsdGhhbmRsZXIucHkgYi9MaWIvdGVzdC90ZXN0X2ZhdWx0aGFuZGxlci5weQppbmRleCA3NzBlNzBjLi5lNjhhMDllIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ZhdWx0aGFuZGxlci5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ZhdWx0aGFuZGxlci5weQpAQCAtMTAsNiArMTAsNyBAQAogZnJvbSB0ZXN0LnNjcmlwdF9oZWxwZXIgaW1wb3J0IGFzc2VydF9weXRob25fb2sKIGltcG9ydCB0ZW1wZmlsZQogaW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRleHR3cmFwIGltcG9ydCBkZWRlbnQKIAogdHJ5OgogICAgIGltcG9ydCB0aHJlYWRpbmcKQEAgLTE5LDE4ICsyMCw2IEBACiAKIFRJTUVPVVQgPSAwLjUKIAotdHJ5OgotICAgIGZyb20gcmVzb3VyY2UgaW1wb3J0IHNldHJsaW1pdCwgUkxJTUlUX0NPUkUsIGVycm9yIGFzIHJlc291cmNlX2Vycm9yCi1leGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgcHJlcGFyZV9zdWJwcm9jZXNzID0gTm9uZQotZWxzZToKLSAgICBkZWYgcHJlcGFyZV9zdWJwcm9jZXNzKCk6Ci0gICAgICAgICMgZG9uJ3QgY3JlYXRlIGNvcmUgZmlsZQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZXRybGltaXQoUkxJTUlUX0NPUkUsICgwLCAwKSkKLSAgICAgICAgZXhjZXB0IChWYWx1ZUVycm9yLCByZXNvdXJjZV9lcnJvcik6Ci0gICAgICAgICAgICBwYXNzCi0KIGRlZiBleHBlY3RlZF90cmFjZWJhY2sobGluZW5vMSwgbGluZW5vMiwgaGVhZGVyLCBtaW5fY291bnQ9MSk6CiAgICAgcmVnZXggPSBoZWFkZXIKICAgICByZWdleCArPSAnICBGaWxlICI8c3RyaW5nPiIsIGxpbmUgJXMgaW4gZnVuY1xuJyAlIGxpbmVubzEKQEAgLTU5LDEwICs0OCw5IEBACiAgICAgICAgIGJ1aWxkLCBhbmQgcmVwbGFjZSAiQ3VycmVudCB0aHJlYWQgMHgwMDAwN2Y4ZDhmYmQ5NzAwIiBieSAiQ3VycmVudAogICAgICAgICB0aHJlYWQgWFhYIi4KICAgICAgICAgIiIiCi0gICAgICAgIG9wdGlvbnMgPSB7fQotICAgICAgICBpZiBwcmVwYXJlX3N1YnByb2Nlc3M6Ci0gICAgICAgICAgICBvcHRpb25zWydwcmVleGVjX2ZuJ10gPSBwcmVwYXJlX3N1YnByb2Nlc3MKLSAgICAgICAgcHJvY2VzcyA9IHNjcmlwdF9oZWxwZXIuc3Bhd25fcHl0aG9uKCctYycsIGNvZGUsICoqb3B0aW9ucykKKyAgICAgICAgY29kZSA9IGRlZGVudChjb2RlKS5zdHJpcCgpCisgICAgICAgIHdpdGggc3VwcG9ydC5TdXBwcmVzc0NyYXNoUmVwb3J0KCk6CisgICAgICAgICAgICBwcm9jZXNzID0gc2NyaXB0X2hlbHBlci5zcGF3bl9weXRob24oJy1jJywgY29kZSkKICAgICAgICAgc3Rkb3V0LCBzdGRlcnIgPSBwcm9jZXNzLmNvbW11bmljYXRlKCkKICAgICAgICAgZXhpdGNvZGUgPSBwcm9jZXNzLndhaXQoKQogICAgICAgICBvdXRwdXQgPSBzdXBwb3J0LnN0cmlwX3B5dGhvbl9zdGRlcnIoc3Rkb3V0KQpAQCAtODYsMjMgKzc0LDIyIEBACiAgICAgICAgIFJhaXNlIGFuIGVycm9yIGlmIHRoZSBvdXRwdXQgZG9lc24ndCBtYXRjaCB0aGUgZXhwZWN0ZWQgZm9ybWF0LgogICAgICAgICAiIiIKICAgICAgICAgaWYgYWxsX3RocmVhZHM6Ci0gICAgICAgICAgICBoZWFkZXIgPSAnQ3VycmVudCB0aHJlYWQgWFhYJworICAgICAgICAgICAgaGVhZGVyID0gJ0N1cnJlbnQgdGhyZWFkIFhYWCAobW9zdCByZWNlbnQgY2FsbCBmaXJzdCknCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBoZWFkZXIgPSAnVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGZpcnN0KScKKyAgICAgICAgICAgIGhlYWRlciA9ICdTdGFjayAobW9zdCByZWNlbnQgY2FsbCBmaXJzdCknCiAgICAgICAgIHJlZ2V4ID0gIiIiCi1eRmF0YWwgUHl0aG9uIGVycm9yOiB7bmFtZX0KKyAgICAgICAgICAgIF5GYXRhbCBQeXRob24gZXJyb3I6IHtuYW1lfQogCi17aGVhZGVyfToKLSAgRmlsZSAiPHN0cmluZz4iLCBsaW5lIHtsaW5lbm99IGluIDxtb2R1bGU+Ci0iIiIuc3RyaXAoKQotICAgICAgICByZWdleCA9IHJlZ2V4LmZvcm1hdCgKKyAgICAgICAgICAgIHtoZWFkZXJ9OgorICAgICAgICAgICAgICBGaWxlICI8c3RyaW5nPiIsIGxpbmUge2xpbmVub30gaW4gPG1vZHVsZT4KKyAgICAgICAgICAgICIiIgorICAgICAgICByZWdleCA9IGRlZGVudChyZWdleC5mb3JtYXQoCiAgICAgICAgICAgICBsaW5lbm89bGluZV9udW1iZXIsCiAgICAgICAgICAgICBuYW1lPW5hbWVfcmVnZXgsCi0gICAgICAgICAgICBoZWFkZXI9cmUuZXNjYXBlKGhlYWRlcikpCisgICAgICAgICAgICBoZWFkZXI9cmUuZXNjYXBlKGhlYWRlcikpKS5zdHJpcCgpCiAgICAgICAgIGlmIG90aGVyX3JlZ2V4OgogICAgICAgICAgICAgcmVnZXggKz0gJ3wnICsgb3RoZXJfcmVnZXgKLSAgICAgICAgd2l0aCBzdXBwb3J0LnN1cHByZXNzX2NyYXNoX3BvcHVwKCk6Ci0gICAgICAgICAgICBvdXRwdXQsIGV4aXRjb2RlID0gc2VsZi5nZXRfb3V0cHV0KGNvZGUsIGZpbGVuYW1lKQorICAgICAgICBvdXRwdXQsIGV4aXRjb2RlID0gc2VsZi5nZXRfb3V0cHV0KGNvZGUsIGZpbGVuYW1lKQogICAgICAgICBvdXRwdXQgPSAnXG4nLmpvaW4ob3V0cHV0KQogICAgICAgICBzZWxmLmFzc2VydFJlZ2V4KG91dHB1dCwgcmVnZXgpCiAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZXhpdGNvZGUsIDApCkBAIC0xMTEsMjkgKzk4LDI5IEBACiAgICAgICAgICAgICAgICAgICAgICAidGhlIGZpcnN0IHBhZ2Ugb2YgbWVtb3J5IGlzIGEgbWFwcGVkIHJlYWQtb25seSBvbiBBSVgiKQogICAgIGRlZiB0ZXN0X3JlYWRfbnVsbChzZWxmKToKICAgICAgICAgc2VsZi5jaGVja19mYXRhbF9lcnJvcigiIiIKLWltcG9ydCBmYXVsdGhhbmRsZXIKLWZhdWx0aGFuZGxlci5lbmFibGUoKQotZmF1bHRoYW5kbGVyLl9yZWFkX251bGwoKQotIiIiLnN0cmlwKCksCisgICAgICAgICAgICBpbXBvcnQgZmF1bHRoYW5kbGVyCisgICAgICAgICAgICBmYXVsdGhhbmRsZXIuZW5hYmxlKCkKKyAgICAgICAgICAgIGZhdWx0aGFuZGxlci5fcmVhZF9udWxsKCkKKyAgICAgICAgICAgICIiIiwKICAgICAgICAgICAgIDMsCiAgICAgICAgICAgICAjIElzc3VlICMxMjcwMDogUmVhZCBOVUxMIHJhaXNlcyBTSUdJTEwgb24gTWFjIE9TIFggTGlvbgogICAgICAgICAgICAgJyg/OlNlZ21lbnRhdGlvbiBmYXVsdHxCdXMgZXJyb3J8SWxsZWdhbCBpbnN0cnVjdGlvbiknKQogCiAgICAgZGVmIHRlc3Rfc2lnc2VndihzZWxmKToKICAgICAgICAgc2VsZi5jaGVja19mYXRhbF9lcnJvcigiIiIKLWltcG9ydCBmYXVsdGhhbmRsZXIKLWZhdWx0aGFuZGxlci5lbmFibGUoKQotZmF1bHRoYW5kbGVyLl9zaWdzZWd2KCkKLSIiIi5zdHJpcCgpLAorICAgICAgICAgICAgaW1wb3J0IGZhdWx0aGFuZGxlcgorICAgICAgICAgICAgZmF1bHRoYW5kbGVyLmVuYWJsZSgpCisgICAgICAgICAgICBmYXVsdGhhbmRsZXIuX3NpZ3NlZ3YoKQorICAgICAgICAgICAgIiIiLAogICAgICAgICAgICAgMywKICAgICAgICAgICAgICdTZWdtZW50YXRpb24gZmF1bHQnKQogCiAgICAgZGVmIHRlc3Rfc2lnYWJydChzZWxmKToKICAgICAgICAgc2VsZi5jaGVja19mYXRhbF9lcnJvcigiIiIKLWltcG9ydCBmYXVsdGhhbmRsZXIKLWZhdWx0aGFuZGxlci5lbmFibGUoKQotZmF1bHRoYW5kbGVyLl9zaWdhYnJ0KCkKLSIiIi5zdHJpcCgpLAorICAgICAgICAgICAgaW1wb3J0IGZhdWx0aGFuZGxlcgorICAgICAgICAgICAgZmF1bHRoYW5kbGVyLmVuYWJsZSgpCisgICAgICAgICAgICBmYXVsdGhhbmRsZXIuX3NpZ2FicnQoKQorICAgICAgICAgICAgIiIiLAogICAgICAgICAgICAgMywKICAgICAgICAgICAgICdBYm9ydGVkJykKIApAQCAtMTQxLDEwICsxMjgsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICJTSUdGUEUgY2Fubm90IGJlIGNhdWdodCBvbiBXaW5kb3dzIikKICAgICBkZWYgdGVzdF9zaWdmcGUoc2VsZik6CiAgICAgICAgIHNlbGYuY2hlY2tfZmF0YWxfZXJyb3IoIiIiCi1pbXBvcnQgZmF1bHRoYW5kbGVyCi1mYXVsdGhhbmRsZXIuZW5hYmxlKCkKLWZhdWx0aGFuZGxlci5fc2lnZnBlKCkKLSIiIi5zdHJpcCgpLAorICAgICAgICAgICAgaW1wb3J0IGZhdWx0aGFuZGxlcgorICAgICAgICAgICAgZmF1bHRoYW5kbGVyLmVuYWJsZSgpCisgICAgICAgICAgICBmYXVsdGhhbmRsZXIuX3NpZ2ZwZSgpCisgICAgICAgICAgICAiIiIsCiAgICAgICAgICAgICAzLAogICAgICAgICAgICAgJ0Zsb2F0aW5nIHBvaW50IGV4Y2VwdGlvbicpCiAKQEAgLTE1MiwxMCArMTM5LDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAibmVlZCBmYXVsdGhhbmRsZXIuX3NpZ2J1cygpIikKICAgICBkZWYgdGVzdF9zaWdidXMoc2VsZik6CiAgICAgICAgIHNlbGYuY2hlY2tfZmF0YWxfZXJyb3IoIiIiCi1pbXBvcnQgZmF1bHRoYW5kbGVyCi1mYXVsdGhhbmRsZXIuZW5hYmxlKCkKLWZhdWx0aGFuZGxlci5fc2lnYnVzKCkKLSIiIi5zdHJpcCgpLAorICAgICAgICAgICAgaW1wb3J0IGZhdWx0aGFuZGxlcgorICAgICAgICAgICAgZmF1bHRoYW5kbGVyLmVuYWJsZSgpCisgICAgICAgICAgICBmYXVsdGhhbmRsZXIuX3NpZ2J1cygpCisgICAgICAgICAgICAiIiIsCiAgICAgICAgICAgICAzLAogICAgICAgICAgICAgJ0J1cyBlcnJvcicpCiAKQEAgLTE2MywxOCArMTUwLDE4IEBACiAgICAgICAgICAgICAgICAgICAgICAibmVlZCBmYXVsdGhhbmRsZXIuX3NpZ2lsbCgpIikKICAgICBkZWYgdGVzdF9zaWdpbGwoc2VsZik6CiAgICAgICAgIHNlbGYuY2hlY2tfZmF0YWxfZXJyb3IoIiIiCi1pbXBvcnQgZmF1bHRoYW5kbGVyCi1mYXVsdGhhbmRsZXIuZW5hYmxlKCkKLWZhdWx0aGFuZGxlci5fc2lnaWxsKCkKLSIiIi5zdHJpcCgpLAorICAgICAgICAgICAgaW1wb3J0IGZhdWx0aGFuZGxlcgorICAgICAgICAgICAgZmF1bHRoYW5kbGVyLmVuYWJsZSgpCisgICAgICAgICAgICBmYXVsdGhhbmRsZXIuX3NpZ2lsbCgpCisgICAgICAgICAgICAiIiIsCiAgICAgICAgICAgICAzLAogICAgICAgICAgICAgJ0lsbGVnYWwgaW5zdHJ1Y3Rpb24nKQogCiAgICAgZGVmIHRlc3RfZmF0YWxfZXJyb3Ioc2VsZik6CiAgICAgICAgIHNlbGYuY2hlY2tfZmF0YWxfZXJyb3IoIiIiCi1pbXBvcnQgZmF1bHRoYW5kbGVyCi1mYXVsdGhhbmRsZXIuX2ZhdGFsX2Vycm9yKGIneHl6JykKLSIiIi5zdHJpcCgpLAorICAgICAgICAgICAgaW1wb3J0IGZhdWx0aGFuZGxlcgorICAgICAgICAgICAgZmF1bHRoYW5kbGVyLl9mYXRhbF9lcnJvcihiJ3h5eicpCisgICAgICAgICAgICAiIiIsCiAgICAgICAgICAgICAyLAogICAgICAgICAgICAgJ3h5eicpCiAKQEAgLTE4NSw1NiArMTcyLDU1IEBACiAgICAgICAgICAgICAgICAgICAgICAnbmVlZCBmYXVsdGhhbmRsZXIuX3N0YWNrX292ZXJmbG93KCknKQogICAgIGRlZiB0ZXN0X3N0YWNrX292ZXJmbG93KHNlbGYpOgogICAgICAgICBzZWxmLmNoZWNrX2ZhdGFsX2Vycm9yKCIiIgotaW1wb3J0IGZhdWx0aGFuZGxlcgotZmF1bHRoYW5kbGVyLmVuYWJsZSgpCi1mYXVsdGhhbmRsZXIuX3N0YWNrX292ZXJmbG93KCkKLSIiIi5zdHJpcCgpLAorICAgICAgICAgICAgaW1wb3J0IGZhdWx0aGFuZGxlcgorICAgICAgICAgICAgZmF1bHRoYW5kbGVyLmVuYWJsZSgpCisgICAgICAgICAgICBmYXVsdGhhbmRsZXIuX3N0YWNrX292ZXJmbG93KCkKKyAgICAgICAgICAgICIiIiwKICAgICAgICAgICAgIDMsCiAgICAgICAgICAgICAnKD86U2VnbWVudGF0aW9uIGZhdWx0fEJ1cyBlcnJvciknLAogICAgICAgICAgICAgb3RoZXJfcmVnZXg9J3VuYWJsZSB0byByYWlzZSBhIHN0YWNrIG92ZXJmbG93JykKIAogICAgIGRlZiB0ZXN0X2dpbF9yZWxlYXNlZChzZWxmKToKICAgICAgICAgc2VsZi5jaGVja19mYXRhbF9lcnJvcigiIiIKLWltcG9ydCBmYXVsdGhhbmRsZXIKLWZhdWx0aGFuZGxlci5lbmFibGUoKQotZmF1bHRoYW5kbGVyLl9yZWFkX251bGwoVHJ1ZSkKLSIiIi5zdHJpcCgpLAorICAgICAgICAgICAgaW1wb3J0IGZhdWx0aGFuZGxlcgorICAgICAgICAgICAgZmF1bHRoYW5kbGVyLmVuYWJsZSgpCisgICAgICAgICAgICBmYXVsdGhhbmRsZXIuX3NpZ3NlZ3YoVHJ1ZSkKKyAgICAgICAgICAgICIiIiwKICAgICAgICAgICAgIDMsCi0gICAgICAgICAgICAnKD86U2VnbWVudGF0aW9uIGZhdWx0fEJ1cyBlcnJvcnxJbGxlZ2FsIGluc3RydWN0aW9uKScpCisgICAgICAgICAgICAnU2VnbWVudGF0aW9uIGZhdWx0JykKIAogICAgIGRlZiB0ZXN0X2VuYWJsZV9maWxlKHNlbGYpOgogICAgICAgICB3aXRoIHRlbXBvcmFyeV9maWxlbmFtZSgpIGFzIGZpbGVuYW1lOgogICAgICAgICAgICAgc2VsZi5jaGVja19mYXRhbF9lcnJvcigiIiIKLWltcG9ydCBmYXVsdGhhbmRsZXIKLW91dHB1dCA9IG9wZW4oe2ZpbGVuYW1lfSwgJ3diJykKLWZhdWx0aGFuZGxlci5lbmFibGUob3V0cHV0KQotZmF1bHRoYW5kbGVyLl9zaWdzZWd2KCkKLSIiIi5zdHJpcCgpLmZvcm1hdChmaWxlbmFtZT1yZXByKGZpbGVuYW1lKSksCisgICAgICAgICAgICAgICAgaW1wb3J0IGZhdWx0aGFuZGxlcgorICAgICAgICAgICAgICAgIG91dHB1dCA9IG9wZW4oe2ZpbGVuYW1lfSwgJ3diJykKKyAgICAgICAgICAgICAgICBmYXVsdGhhbmRsZXIuZW5hYmxlKG91dHB1dCkKKyAgICAgICAgICAgICAgICBmYXVsdGhhbmRsZXIuX3NpZ3NlZ3YoKQorICAgICAgICAgICAgICAgICIiIi5mb3JtYXQoZmlsZW5hbWU9cmVwcihmaWxlbmFtZSkpLAogICAgICAgICAgICAgICAgIDQsCiAgICAgICAgICAgICAgICAgJ1NlZ21lbnRhdGlvbiBmYXVsdCcsCiAgICAgICAgICAgICAgICAgZmlsZW5hbWU9ZmlsZW5hbWUpCiAKICAgICBkZWYgdGVzdF9lbmFibGVfc2luZ2xlX3RocmVhZChzZWxmKToKICAgICAgICAgc2VsZi5jaGVja19mYXRhbF9lcnJvcigiIiIKLWltcG9ydCBmYXVsdGhhbmRsZXIKLWZhdWx0aGFuZGxlci5lbmFibGUoYWxsX3RocmVhZHM9RmFsc2UpCi1mYXVsdGhhbmRsZXIuX3NpZ3NlZ3YoKQotIiIiLnN0cmlwKCksCisgICAgICAgICAgICBpbXBvcnQgZmF1bHRoYW5kbGVyCisgICAgICAgICAgICBmYXVsdGhhbmRsZXIuZW5hYmxlKGFsbF90aHJlYWRzPUZhbHNlKQorICAgICAgICAgICAgZmF1bHRoYW5kbGVyLl9zaWdzZWd2KCkKKyAgICAgICAgICAgICIiIiwKICAgICAgICAgICAgIDMsCiAgICAgICAgICAgICAnU2VnbWVudGF0aW9uIGZhdWx0JywKICAgICAgICAgICAgIGFsbF90aHJlYWRzPUZhbHNlKQogCiAgICAgZGVmIHRlc3RfZGlzYWJsZShzZWxmKToKICAgICAgICAgY29kZSA9ICIiIgotaW1wb3J0IGZhdWx0aGFuZGxlcgotZmF1bHRoYW5kbGVyLmVuYWJsZSgpCi1mYXVsdGhhbmRsZXIuZGlzYWJsZSgpCi1mYXVsdGhhbmRsZXIuX3NpZ3NlZ3YoKQotIiIiLnN0cmlwKCkKKyAgICAgICAgICAgIGltcG9ydCBmYXVsdGhhbmRsZXIKKyAgICAgICAgICAgIGZhdWx0aGFuZGxlci5lbmFibGUoKQorICAgICAgICAgICAgZmF1bHRoYW5kbGVyLmRpc2FibGUoKQorICAgICAgICAgICAgZmF1bHRoYW5kbGVyLl9zaWdzZWd2KCkKKyAgICAgICAgICAgICIiIgogICAgICAgICBub3RfZXhwZWN0ZWQgPSAnRmF0YWwgUHl0aG9uIGVycm9yJwotICAgICAgICB3aXRoIHN1cHBvcnQuc3VwcHJlc3NfY3Jhc2hfcG9wdXAoKToKLSAgICAgICAgICAgIHN0ZGVyciwgZXhpdGNvZGUgPSBzZWxmLmdldF9vdXRwdXQoY29kZSkKLSAgICAgICAgc3RkZXIgPSAnXG4nLmpvaW4oc3RkZXJyKQorICAgICAgICBzdGRlcnIsIGV4aXRjb2RlID0gc2VsZi5nZXRfb3V0cHV0KGNvZGUpCisgICAgICAgIHN0ZGVyciA9ICdcbicuam9pbihzdGRlcnIpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3RfZXhwZWN0ZWQgbm90IGluIHN0ZGVyciwKICAgICAgICAgICAgICAgICAgICAgICIlciBpcyBwcmVzZW50IGluICVyIiAlIChub3RfZXhwZWN0ZWQsIHN0ZGVycikpCiAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZXhpdGNvZGUsIDApCkBAIC0yNjQsMTYgKzI1MCw0MiBAQAogICAgIGRlZiB0ZXN0X2Rpc2FibGVkX2J5X2RlZmF1bHQoc2VsZik6CiAgICAgICAgICMgQnkgZGVmYXVsdCwgdGhlIG1vZHVsZSBzaG91bGQgYmUgZGlzYWJsZWQKICAgICAgICAgY29kZSA9ICJpbXBvcnQgZmF1bHRoYW5kbGVyOyBwcmludChmYXVsdGhhbmRsZXIuaXNfZW5hYmxlZCgpKSIKLSAgICAgICAgcmMsIHN0ZG91dCwgc3RkZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygiLWMiLCBjb2RlKQotICAgICAgICBzdGRvdXQgPSAoc3Rkb3V0ICsgc3RkZXJyKS5zdHJpcCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LCBiIkZhbHNlIikKKyAgICAgICAgYXJncyA9IGZpbHRlcihOb25lLCAoc3lzLmV4ZWN1dGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItRSIgaWYgc3lzLmZsYWdzLmlnbm9yZV9lbnZpcm9ubWVudCBlbHNlICIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWMiLCBjb2RlKSkKKyAgICAgICAgZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKKyAgICAgICAgZW52LnBvcCgiUFlUSE9ORkFVTFRIQU5ETEVSIiwgTm9uZSkKKyAgICAgICAgIyBkb24ndCB1c2UgYXNzZXJ0X3B5dGhvbl9vaygpIGJlY2F1c2UgaXQgYWx3YXlzIGVuYWJsZXMgZmF1bHRoYW5kbGVyCisgICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGFyZ3MsIGVudj1lbnYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0cHV0LnJzdHJpcCgpLCBiIkZhbHNlIikKIAogICAgIGRlZiB0ZXN0X3N5c194b3B0aW9ucyhzZWxmKToKICAgICAgICAgIyBUZXN0IHB5dGhvbiAtWCBmYXVsdGhhbmRsZXIKICAgICAgICAgY29kZSA9ICJpbXBvcnQgZmF1bHRoYW5kbGVyOyBwcmludChmYXVsdGhhbmRsZXIuaXNfZW5hYmxlZCgpKSIKLSAgICAgICAgcmMsIHN0ZG91dCwgc3RkZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygiLVgiLCAiZmF1bHRoYW5kbGVyIiwgIi1jIiwgY29kZSkKLSAgICAgICAgc3Rkb3V0ID0gKHN0ZG91dCArIHN0ZGVycikuc3RyaXAoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dCwgYiJUcnVlIikKKyAgICAgICAgYXJncyA9IGZpbHRlcihOb25lLCAoc3lzLmV4ZWN1dGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItRSIgaWYgc3lzLmZsYWdzLmlnbm9yZV9lbnZpcm9ubWVudCBlbHNlICIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLVgiLCAiZmF1bHRoYW5kbGVyIiwgIi1jIiwgY29kZSkpCisgICAgICAgIGVudiA9IG9zLmVudmlyb24uY29weSgpCisgICAgICAgIGVudi5wb3AoIlBZVEhPTkZBVUxUSEFORExFUiIsIE5vbmUpCisgICAgICAgICMgZG9uJ3QgdXNlIGFzc2VydF9weXRob25fb2soKSBiZWNhdXNlIGl0IGFsd2F5cyBlbmFibGVzIGZhdWx0aGFuZGxlcgorICAgICAgICBvdXRwdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChhcmdzLCBlbnY9ZW52KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dHB1dC5yc3RyaXAoKSwgYiJUcnVlIikKKworICAgIGRlZiB0ZXN0X2Vudl92YXIoc2VsZik6CisgICAgICAgICMgZW1wdHkgZW52IHZhcgorICAgICAgICBjb2RlID0gImltcG9ydCBmYXVsdGhhbmRsZXI7IHByaW50KGZhdWx0aGFuZGxlci5pc19lbmFibGVkKCkpIgorICAgICAgICBhcmdzID0gKHN5cy5leGVjdXRhYmxlLCAiLWMiLCBjb2RlKQorICAgICAgICBlbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQorICAgICAgICBlbnZbJ1BZVEhPTkZBVUxUSEFORExFUiddID0gJycKKyAgICAgICAgIyBkb24ndCB1c2UgYXNzZXJ0X3B5dGhvbl9vaygpIGJlY2F1c2UgaXQgYWx3YXlzIGVuYWJsZXMgZmF1bHRoYW5kbGVyCisgICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGFyZ3MsIGVudj1lbnYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0cHV0LnJzdHJpcCgpLCBiIkZhbHNlIikKKworICAgICAgICAjIG5vbi1lbXB0eSBlbnYgdmFyCisgICAgICAgIGVudiA9IG9zLmVudmlyb24uY29weSgpCisgICAgICAgIGVudlsnUFlUSE9ORkFVTFRIQU5ETEVSJ10gPSAnMScKKyAgICAgICAgb3V0cHV0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoYXJncywgZW52PWVudikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXRwdXQucnN0cmlwKCksIGIiVHJ1ZSIpCiAKICAgICBkZWYgY2hlY2tfZHVtcF90cmFjZWJhY2soc2VsZiwgZmlsZW5hbWUpOgogICAgICAgICAiIiIKQEAgLTI4MSwyMCArMjkzLDIwIEBACiAgICAgICAgIFJhaXNlIGFuIGVycm9yIGlmIHRoZSBvdXRwdXQgZG9lc24ndCBtYXRjaCB0aGUgZXhwZWN0ZWQgZm9ybWF0LgogICAgICAgICAiIiIKICAgICAgICAgY29kZSA9ICIiIgotaW1wb3J0IGZhdWx0aGFuZGxlcgorICAgICAgICAgICAgaW1wb3J0IGZhdWx0aGFuZGxlcgogCi1kZWYgZnVuY0IoKToKLSAgICBpZiB7aGFzX2ZpbGVuYW1lfToKLSAgICAgICAgd2l0aCBvcGVuKHtmaWxlbmFtZX0sICJ3YiIpIGFzIGZwOgotICAgICAgICAgICAgZmF1bHRoYW5kbGVyLmR1bXBfdHJhY2ViYWNrKGZwLCBhbGxfdGhyZWFkcz1GYWxzZSkKLSAgICBlbHNlOgotICAgICAgICBmYXVsdGhhbmRsZXIuZHVtcF90cmFjZWJhY2soYWxsX3RocmVhZHM9RmFsc2UpCisgICAgICAgICAgICBkZWYgZnVuY0IoKToKKyAgICAgICAgICAgICAgICBpZiB7aGFzX2ZpbGVuYW1lfToKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBvcGVuKHtmaWxlbmFtZX0sICJ3YiIpIGFzIGZwOgorICAgICAgICAgICAgICAgICAgICAgICAgZmF1bHRoYW5kbGVyLmR1bXBfdHJhY2ViYWNrKGZwLCBhbGxfdGhyZWFkcz1GYWxzZSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBmYXVsdGhhbmRsZXIuZHVtcF90cmFjZWJhY2soYWxsX3RocmVhZHM9RmFsc2UpCiAKLWRlZiBmdW5jQSgpOgotICAgIGZ1bmNCKCkKKyAgICAgICAgICAgIGRlZiBmdW5jQSgpOgorICAgICAgICAgICAgICAgIGZ1bmNCKCkKIAotZnVuY0EoKQotIiIiLnN0cmlwKCkKKyAgICAgICAgICAgIGZ1bmNBKCkKKyAgICAgICAgICAgICIiIgogICAgICAgICBjb2RlID0gY29kZS5mb3JtYXQoCiAgICAgICAgICAgICBmaWxlbmFtZT1yZXByKGZpbGVuYW1lKSwKICAgICAgICAgICAgIGhhc19maWxlbmFtZT1ib29sKGZpbGVuYW1lKSwKQEAgLTMwNCw3ICszMTYsNyBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgbGluZW5vID0gOAogICAgICAgICBleHBlY3RlZCA9IFsKLSAgICAgICAgICAgICdUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgZmlyc3QpOicsCisgICAgICAgICAgICAnU3RhY2sgKG1vc3QgcmVjZW50IGNhbGwgZmlyc3QpOicsCiAgICAgICAgICAgICAnICBGaWxlICI8c3RyaW5nPiIsIGxpbmUgJXMgaW4gZnVuY0InICUgbGluZW5vLAogICAgICAgICAgICAgJyAgRmlsZSAiPHN0cmluZz4iLCBsaW5lIDExIGluIGZ1bmNBJywKICAgICAgICAgICAgICcgIEZpbGUgIjxzdHJpbmc+IiwgbGluZSAxMyBpbiA8bW9kdWxlPicKQEAgLTMyNSwxOCArMzM3LDE4IEBACiAgICAgICAgIGZ1bmNfbmFtZSA9ICd4JyAqIChtYXhsZW4gKyA1MCkKICAgICAgICAgdHJ1bmNhdGVkID0gJ3gnICogbWF4bGVuICsgJy4uLicKICAgICAgICAgY29kZSA9ICIiIgotaW1wb3J0IGZhdWx0aGFuZGxlcgorICAgICAgICAgICAgaW1wb3J0IGZhdWx0aGFuZGxlcgogCi1kZWYge2Z1bmNfbmFtZX0oKToKLSAgICBmYXVsdGhhbmRsZXIuZHVtcF90cmFjZWJhY2soYWxsX3RocmVhZHM9RmFsc2UpCisgICAgICAgICAgICBkZWYge2Z1bmNfbmFtZX0oKToKKyAgICAgICAgICAgICAgICBmYXVsdGhhbmRsZXIuZHVtcF90cmFjZWJhY2soYWxsX3RocmVhZHM9RmFsc2UpCiAKLXtmdW5jX25hbWV9KCkKLSIiIi5zdHJpcCgpCisgICAgICAgICAgICB7ZnVuY19uYW1lfSgpCisgICAgICAgICAgICAiIiIKICAgICAgICAgY29kZSA9IGNvZGUuZm9ybWF0KAogICAgICAgICAgICAgZnVuY19uYW1lPWZ1bmNfbmFtZSwKICAgICAgICAgKQogICAgICAgICBleHBlY3RlZCA9IFsKLSAgICAgICAgICAgICdUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgZmlyc3QpOicsCisgICAgICAgICAgICAnU3RhY2sgKG1vc3QgcmVjZW50IGNhbGwgZmlyc3QpOicsCiAgICAgICAgICAgICAnICBGaWxlICI8c3RyaW5nPiIsIGxpbmUgNCBpbiAlcycgJSB0cnVuY2F0ZWQsCiAgICAgICAgICAgICAnICBGaWxlICI8c3RyaW5nPiIsIGxpbmUgNiBpbiA8bW9kdWxlPicKICAgICAgICAgXQpAQCAtMzUxLDM3ICszNjMsMzcgQEAKICAgICAgICAgUmFpc2UgYW4gZXJyb3IgaWYgdGhlIG91dHB1dCBkb2Vzbid0IG1hdGNoIHRoZSBleHBlY3RlZCBmb3JtYXQuCiAgICAgICAgICIiIgogICAgICAgICBjb2RlID0gIiIiCi1pbXBvcnQgZmF1bHRoYW5kbGVyCi1mcm9tIHRocmVhZGluZyBpbXBvcnQgVGhyZWFkLCBFdmVudAotaW1wb3J0IHRpbWUKKyAgICAgICAgICAgIGltcG9ydCBmYXVsdGhhbmRsZXIKKyAgICAgICAgICAgIGZyb20gdGhyZWFkaW5nIGltcG9ydCBUaHJlYWQsIEV2ZW50CisgICAgICAgICAgICBpbXBvcnQgdGltZQogCi1kZWYgZHVtcCgpOgotICAgIGlmIHtmaWxlbmFtZX06Ci0gICAgICAgIHdpdGggb3Blbih7ZmlsZW5hbWV9LCAid2IiKSBhcyBmcDoKLSAgICAgICAgICAgIGZhdWx0aGFuZGxlci5kdW1wX3RyYWNlYmFjayhmcCwgYWxsX3RocmVhZHM9VHJ1ZSkKLSAgICBlbHNlOgotICAgICAgICBmYXVsdGhhbmRsZXIuZHVtcF90cmFjZWJhY2soYWxsX3RocmVhZHM9VHJ1ZSkKKyAgICAgICAgICAgIGRlZiBkdW1wKCk6CisgICAgICAgICAgICAgICAgaWYge2ZpbGVuYW1lfToKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBvcGVuKHtmaWxlbmFtZX0sICJ3YiIpIGFzIGZwOgorICAgICAgICAgICAgICAgICAgICAgICAgZmF1bHRoYW5kbGVyLmR1bXBfdHJhY2ViYWNrKGZwLCBhbGxfdGhyZWFkcz1UcnVlKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGZhdWx0aGFuZGxlci5kdW1wX3RyYWNlYmFjayhhbGxfdGhyZWFkcz1UcnVlKQogCi1jbGFzcyBXYWl0ZXIoVGhyZWFkKToKLSAgICAjIGF2b2lkIGJsb2NraW5nIGlmIHRoZSBtYWluIHRocmVhZCByYWlzZXMgYW4gZXhjZXB0aW9uLgotICAgIGRhZW1vbiA9IFRydWUKKyAgICAgICAgICAgIGNsYXNzIFdhaXRlcihUaHJlYWQpOgorICAgICAgICAgICAgICAgICMgYXZvaWQgYmxvY2tpbmcgaWYgdGhlIG1haW4gdGhyZWFkIHJhaXNlcyBhbiBleGNlcHRpb24uCisgICAgICAgICAgICAgICAgZGFlbW9uID0gVHJ1ZQogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICBUaHJlYWQuX19pbml0X18oc2VsZikKLSAgICAgICAgc2VsZi5ydW5uaW5nID0gRXZlbnQoKQotICAgICAgICBzZWxmLnN0b3AgPSBFdmVudCgpCisgICAgICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICBUaHJlYWQuX19pbml0X18oc2VsZikKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5ydW5uaW5nID0gRXZlbnQoKQorICAgICAgICAgICAgICAgICAgICBzZWxmLnN0b3AgPSBFdmVudCgpCiAKLSAgICBkZWYgcnVuKHNlbGYpOgotICAgICAgICBzZWxmLnJ1bm5pbmcuc2V0KCkKLSAgICAgICAgc2VsZi5zdG9wLndhaXQoKQorICAgICAgICAgICAgICAgIGRlZiBydW4oc2VsZik6CisgICAgICAgICAgICAgICAgICAgIHNlbGYucnVubmluZy5zZXQoKQorICAgICAgICAgICAgICAgICAgICBzZWxmLnN0b3Aud2FpdCgpCiAKLXdhaXRlciA9IFdhaXRlcigpCi13YWl0ZXIuc3RhcnQoKQotd2FpdGVyLnJ1bm5pbmcud2FpdCgpCi1kdW1wKCkKLXdhaXRlci5zdG9wLnNldCgpCi13YWl0ZXIuam9pbigpCi0iIiIuc3RyaXAoKQorICAgICAgICAgICAgd2FpdGVyID0gV2FpdGVyKCkKKyAgICAgICAgICAgIHdhaXRlci5zdGFydCgpCisgICAgICAgICAgICB3YWl0ZXIucnVubmluZy53YWl0KCkKKyAgICAgICAgICAgIGR1bXAoKQorICAgICAgICAgICAgd2FpdGVyLnN0b3Auc2V0KCkKKyAgICAgICAgICAgIHdhaXRlci5qb2luKCkKKyAgICAgICAgICAgICIiIgogICAgICAgICBjb2RlID0gY29kZS5mb3JtYXQoZmlsZW5hbWU9cmVwcihmaWxlbmFtZSkpCiAgICAgICAgIG91dHB1dCwgZXhpdGNvZGUgPSBzZWxmLmdldF9vdXRwdXQoY29kZSwgZmlsZW5hbWUpCiAgICAgICAgIG91dHB1dCA9ICdcbicuam9pbihvdXRwdXQpCkBAIC0zOTAsMTcgKzQwMiwxNyBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgbGluZW5vID0gMTAKICAgICAgICAgcmVnZXggPSAiIiIKLV5UaHJlYWQgMHhbMC05YS1mXSs6Ci0oPzogIEZpbGUgIi4qdGhyZWFkaW5nLnB5IiwgbGluZSBbMC05XSsgaW4gW19hLXpdKwotKXt7MSwzfX0gIEZpbGUgIjxzdHJpbmc+IiwgbGluZSAyMyBpbiBydW4KLSAgRmlsZSAiLip0aHJlYWRpbmcucHkiLCBsaW5lIFswLTldKyBpbiBfYm9vdHN0cmFwX2lubmVyCi0gIEZpbGUgIi4qdGhyZWFkaW5nLnB5IiwgbGluZSBbMC05XSsgaW4gX2Jvb3RzdHJhcAorICAgICAgICAgICAgXlRocmVhZCAweFswLTlhLWZdKyBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgICAgICAgICAgICg/OiAgRmlsZSAiLip0aHJlYWRpbmcucHkiLCBsaW5lIFswLTldKyBpbiBbX2Etel0rCisgICAgICAgICAgICApe3sxLDN9fSAgRmlsZSAiPHN0cmluZz4iLCBsaW5lIDIzIGluIHJ1bgorICAgICAgICAgICAgICBGaWxlICIuKnRocmVhZGluZy5weSIsIGxpbmUgWzAtOV0rIGluIF9ib290c3RyYXBfaW5uZXIKKyAgICAgICAgICAgICAgRmlsZSAiLip0aHJlYWRpbmcucHkiLCBsaW5lIFswLTldKyBpbiBfYm9vdHN0cmFwCiAKLUN1cnJlbnQgdGhyZWFkIFhYWDoKLSAgRmlsZSAiPHN0cmluZz4iLCBsaW5lIHtsaW5lbm99IGluIGR1bXAKLSAgRmlsZSAiPHN0cmluZz4iLCBsaW5lIDI4IGluIDxtb2R1bGU+JAotIiIiLnN0cmlwKCkKLSAgICAgICAgcmVnZXggPSByZWdleC5mb3JtYXQobGluZW5vPWxpbmVubykKKyAgICAgICAgICAgIEN1cnJlbnQgdGhyZWFkIFhYWCBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgICAgICAgICAgICAgRmlsZSAiPHN0cmluZz4iLCBsaW5lIHtsaW5lbm99IGluIGR1bXAKKyAgICAgICAgICAgICAgRmlsZSAiPHN0cmluZz4iLCBsaW5lIDI4IGluIDxtb2R1bGU+JAorICAgICAgICAgICAgIiIiCisgICAgICAgIHJlZ2V4ID0gZGVkZW50KHJlZ2V4LmZvcm1hdChsaW5lbm89bGluZW5vKSkuc3RyaXAoKQogICAgICAgICBzZWxmLmFzc2VydFJlZ2V4KG91dHB1dCwgcmVnZXgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhpdGNvZGUsIDApCiAKQEAgLTQyMSwyOSArNDMzLDI5IEBACiAgICAgICAgICIiIgogICAgICAgICB0aW1lb3V0X3N0ciA9IHN0cihkYXRldGltZS50aW1lZGVsdGEoc2Vjb25kcz1USU1FT1VUKSkKICAgICAgICAgY29kZSA9ICIiIgotaW1wb3J0IGZhdWx0aGFuZGxlcgotaW1wb3J0IHRpbWUKKyAgICAgICAgICAgIGltcG9ydCBmYXVsdGhhbmRsZXIKKyAgICAgICAgICAgIGltcG9ydCB0aW1lCiAKLWRlZiBmdW5jKHRpbWVvdXQsIHJlcGVhdCwgY2FuY2VsLCBmaWxlLCBsb29wcyk6Ci0gICAgZm9yIGxvb3AgaW4gcmFuZ2UobG9vcHMpOgotICAgICAgICBmYXVsdGhhbmRsZXIuZHVtcF90cmFjZWJhY2tfbGF0ZXIodGltZW91dCwgcmVwZWF0PXJlcGVhdCwgZmlsZT1maWxlKQotICAgICAgICBpZiBjYW5jZWw6Ci0gICAgICAgICAgICBmYXVsdGhhbmRsZXIuY2FuY2VsX2R1bXBfdHJhY2ViYWNrX2xhdGVyKCkKLSAgICAgICAgdGltZS5zbGVlcCh0aW1lb3V0ICogNSkKLSAgICAgICAgZmF1bHRoYW5kbGVyLmNhbmNlbF9kdW1wX3RyYWNlYmFja19sYXRlcigpCisgICAgICAgICAgICBkZWYgZnVuYyh0aW1lb3V0LCByZXBlYXQsIGNhbmNlbCwgZmlsZSwgbG9vcHMpOgorICAgICAgICAgICAgICAgIGZvciBsb29wIGluIHJhbmdlKGxvb3BzKToKKyAgICAgICAgICAgICAgICAgICAgZmF1bHRoYW5kbGVyLmR1bXBfdHJhY2ViYWNrX2xhdGVyKHRpbWVvdXQsIHJlcGVhdD1yZXBlYXQsIGZpbGU9ZmlsZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgY2FuY2VsOgorICAgICAgICAgICAgICAgICAgICAgICAgZmF1bHRoYW5kbGVyLmNhbmNlbF9kdW1wX3RyYWNlYmFja19sYXRlcigpCisgICAgICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAodGltZW91dCAqIDUpCisgICAgICAgICAgICAgICAgICAgIGZhdWx0aGFuZGxlci5jYW5jZWxfZHVtcF90cmFjZWJhY2tfbGF0ZXIoKQogCi10aW1lb3V0ID0ge3RpbWVvdXR9Ci1yZXBlYXQgPSB7cmVwZWF0fQotY2FuY2VsID0ge2NhbmNlbH0KLWxvb3BzID0ge2xvb3BzfQotaWYge2hhc19maWxlbmFtZX06Ci0gICAgZmlsZSA9IG9wZW4oe2ZpbGVuYW1lfSwgIndiIikKLWVsc2U6Ci0gICAgZmlsZSA9IE5vbmUKLWZ1bmModGltZW91dCwgcmVwZWF0LCBjYW5jZWwsIGZpbGUsIGxvb3BzKQotaWYgZmlsZSBpcyBub3QgTm9uZToKLSAgICBmaWxlLmNsb3NlKCkKLSIiIi5zdHJpcCgpCisgICAgICAgICAgICB0aW1lb3V0ID0ge3RpbWVvdXR9CisgICAgICAgICAgICByZXBlYXQgPSB7cmVwZWF0fQorICAgICAgICAgICAgY2FuY2VsID0ge2NhbmNlbH0KKyAgICAgICAgICAgIGxvb3BzID0ge2xvb3BzfQorICAgICAgICAgICAgaWYge2hhc19maWxlbmFtZX06CisgICAgICAgICAgICAgICAgZmlsZSA9IG9wZW4oe2ZpbGVuYW1lfSwgIndiIikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZmlsZSA9IE5vbmUKKyAgICAgICAgICAgIGZ1bmModGltZW91dCwgcmVwZWF0LCBjYW5jZWwsIGZpbGUsIGxvb3BzKQorICAgICAgICAgICAgaWYgZmlsZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBmaWxlLmNsb3NlKCkKKyAgICAgICAgICAgICIiIgogICAgICAgICBjb2RlID0gY29kZS5mb3JtYXQoCiAgICAgICAgICAgICB0aW1lb3V0PVRJTUVPVVQsCiAgICAgICAgICAgICByZXBlYXQ9cmVwZWF0LApAQCAtNDU5LDcgKzQ3MSw3IEBACiAgICAgICAgICAgICBjb3VudCA9IGxvb3BzCiAgICAgICAgICAgICBpZiByZXBlYXQ6CiAgICAgICAgICAgICAgICAgY291bnQgKj0gMgotICAgICAgICAgICAgaGVhZGVyID0gcidUaW1lb3V0IFwoJXNcKSFcblRocmVhZCAweFswLTlhLWZdKzpcbicgJSB0aW1lb3V0X3N0cgorICAgICAgICAgICAgaGVhZGVyID0gcidUaW1lb3V0IFwoJXNcKSFcblRocmVhZCAweFswLTlhLWZdKyBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKTpcbicgJSB0aW1lb3V0X3N0cgogICAgICAgICAgICAgcmVnZXggPSBleHBlY3RlZF90cmFjZWJhY2soOSwgMjAsIGhlYWRlciwgbWluX2NvdW50PWNvdW50KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRSZWdleCh0cmFjZSwgcmVnZXgpCiAgICAgICAgIGVsc2U6CkBAIC01MTAsNDUgKzUyMiw0NSBAQAogICAgICAgICAiIiIKICAgICAgICAgc2lnbnVtID0gc2lnbmFsLlNJR1VTUjEKICAgICAgICAgY29kZSA9ICIiIgotaW1wb3J0IGZhdWx0aGFuZGxlcgotaW1wb3J0IG9zCi1pbXBvcnQgc2lnbmFsCi1pbXBvcnQgc3lzCisgICAgICAgICAgICBpbXBvcnQgZmF1bHRoYW5kbGVyCisgICAgICAgICAgICBpbXBvcnQgb3MKKyAgICAgICAgICAgIGltcG9ydCBzaWduYWwKKyAgICAgICAgICAgIGltcG9ydCBzeXMKIAotZGVmIGZ1bmMoc2lnbnVtKToKLSAgICBvcy5raWxsKG9zLmdldHBpZCgpLCBzaWdudW0pCisgICAgICAgICAgICBkZWYgZnVuYyhzaWdudW0pOgorICAgICAgICAgICAgICAgIG9zLmtpbGwob3MuZ2V0cGlkKCksIHNpZ251bSkKIAotZGVmIGhhbmRsZXIoc2lnbnVtLCBmcmFtZSk6Ci0gICAgaGFuZGxlci5jYWxsZWQgPSBUcnVlCi1oYW5kbGVyLmNhbGxlZCA9IEZhbHNlCisgICAgICAgICAgICBkZWYgaGFuZGxlcihzaWdudW0sIGZyYW1lKToKKyAgICAgICAgICAgICAgICBoYW5kbGVyLmNhbGxlZCA9IFRydWUKKyAgICAgICAgICAgIGhhbmRsZXIuY2FsbGVkID0gRmFsc2UKIAotZXhpdGNvZGUgPSAwCi1zaWdudW0gPSB7c2lnbnVtfQotdW5yZWdpc3RlciA9IHt1bnJlZ2lzdGVyfQotY2hhaW4gPSB7Y2hhaW59CisgICAgICAgICAgICBleGl0Y29kZSA9IDAKKyAgICAgICAgICAgIHNpZ251bSA9IHtzaWdudW19CisgICAgICAgICAgICB1bnJlZ2lzdGVyID0ge3VucmVnaXN0ZXJ9CisgICAgICAgICAgICBjaGFpbiA9IHtjaGFpbn0KIAotaWYge2hhc19maWxlbmFtZX06Ci0gICAgZmlsZSA9IG9wZW4oe2ZpbGVuYW1lfSwgIndiIikKLWVsc2U6Ci0gICAgZmlsZSA9IE5vbmUKLWlmIGNoYWluOgotICAgIHNpZ25hbC5zaWduYWwoc2lnbnVtLCBoYW5kbGVyKQotZmF1bHRoYW5kbGVyLnJlZ2lzdGVyKHNpZ251bSwgZmlsZT1maWxlLAotICAgICAgICAgICAgICAgICAgICAgIGFsbF90aHJlYWRzPXthbGxfdGhyZWFkc30sIGNoYWluPXtjaGFpbn0pCi1pZiB1bnJlZ2lzdGVyOgotICAgIGZhdWx0aGFuZGxlci51bnJlZ2lzdGVyKHNpZ251bSkKLWZ1bmMoc2lnbnVtKQotaWYgY2hhaW4gYW5kIG5vdCBoYW5kbGVyLmNhbGxlZDoKLSAgICBpZiBmaWxlIGlzIG5vdCBOb25lOgotICAgICAgICBvdXRwdXQgPSBmaWxlCi0gICAgZWxzZToKLSAgICAgICAgb3V0cHV0ID0gc3lzLnN0ZGVycgotICAgIHByaW50KCJFcnJvcjogc2lnbmFsIGhhbmRsZXIgbm90IGNhbGxlZCEiLCBmaWxlPW91dHB1dCkKLSAgICBleGl0Y29kZSA9IDEKLWlmIGZpbGUgaXMgbm90IE5vbmU6Ci0gICAgZmlsZS5jbG9zZSgpCi1zeXMuZXhpdChleGl0Y29kZSkKLSIiIi5zdHJpcCgpCisgICAgICAgICAgICBpZiB7aGFzX2ZpbGVuYW1lfToKKyAgICAgICAgICAgICAgICBmaWxlID0gb3Blbih7ZmlsZW5hbWV9LCAid2IiKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBmaWxlID0gTm9uZQorICAgICAgICAgICAgaWYgY2hhaW46CisgICAgICAgICAgICAgICAgc2lnbmFsLnNpZ25hbChzaWdudW0sIGhhbmRsZXIpCisgICAgICAgICAgICBmYXVsdGhhbmRsZXIucmVnaXN0ZXIoc2lnbnVtLCBmaWxlPWZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsX3RocmVhZHM9e2FsbF90aHJlYWRzfSwgY2hhaW49e2NoYWlufSkKKyAgICAgICAgICAgIGlmIHVucmVnaXN0ZXI6CisgICAgICAgICAgICAgICAgZmF1bHRoYW5kbGVyLnVucmVnaXN0ZXIoc2lnbnVtKQorICAgICAgICAgICAgZnVuYyhzaWdudW0pCisgICAgICAgICAgICBpZiBjaGFpbiBhbmQgbm90IGhhbmRsZXIuY2FsbGVkOgorICAgICAgICAgICAgICAgIGlmIGZpbGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIG91dHB1dCA9IGZpbGUKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSBzeXMuc3RkZXJyCisgICAgICAgICAgICAgICAgcHJpbnQoIkVycm9yOiBzaWduYWwgaGFuZGxlciBub3QgY2FsbGVkISIsIGZpbGU9b3V0cHV0KQorICAgICAgICAgICAgICAgIGV4aXRjb2RlID0gMQorICAgICAgICAgICAgaWYgZmlsZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBmaWxlLmNsb3NlKCkKKyAgICAgICAgICAgIHN5cy5leGl0KGV4aXRjb2RlKQorICAgICAgICAgICAgIiIiCiAgICAgICAgIGNvZGUgPSBjb2RlLmZvcm1hdCgKICAgICAgICAgICAgIGZpbGVuYW1lPXJlcHIoZmlsZW5hbWUpLAogICAgICAgICAgICAgaGFzX2ZpbGVuYW1lPWJvb2woZmlsZW5hbWUpLApAQCAtNTYxLDkgKzU3Myw5IEBACiAgICAgICAgIHRyYWNlID0gJ1xuJy5qb2luKHRyYWNlKQogICAgICAgICBpZiBub3QgdW5yZWdpc3RlcjoKICAgICAgICAgICAgIGlmIGFsbF90aHJlYWRzOgotICAgICAgICAgICAgICAgIHJlZ2V4ID0gJ0N1cnJlbnQgdGhyZWFkIFhYWDpcbicKKyAgICAgICAgICAgICAgICByZWdleCA9ICdDdXJyZW50IHRocmVhZCBYWFggXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6XG4nCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJlZ2V4ID0gJ1RyYWNlYmFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKTpcbicKKyAgICAgICAgICAgICAgICByZWdleCA9ICdTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKTpcbicKICAgICAgICAgICAgIHJlZ2V4ID0gZXhwZWN0ZWRfdHJhY2ViYWNrKDcsIDI4LCByZWdleCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXgodHJhY2UsIHJlZ2V4KQogICAgICAgICBlbHNlOgpAQCAtNTg5LDkgKzYwMSwzMSBAQAogICAgIGRlZiB0ZXN0X3JlZ2lzdGVyX2NoYWluKHNlbGYpOgogICAgICAgICBzZWxmLmNoZWNrX3JlZ2lzdGVyKGNoYWluPVRydWUpCiAKKyAgICBAY29udGV4dG1hbmFnZXIKKyAgICBkZWYgY2hlY2tfc3RkZXJyX25vbmUoc2VsZik6CisgICAgICAgIHN0ZGVyciA9IHN5cy5zdGRlcnIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3lzLnN0ZGVyciA9IE5vbmUKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yKSBhcyBjbToKKyAgICAgICAgICAgICAgICB5aWVsZAorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoY20uZXhjZXB0aW9uKSwgInN5cy5zdGRlcnIgaXMgTm9uZSIpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzeXMuc3RkZXJyID0gc3RkZXJyCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChGYXVsdEhhbmRsZXJUZXN0cykKKyAgICBkZWYgdGVzdF9zdGRlcnJfTm9uZShzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMjE0OTc6IHByb3ZpZGUgYW4gaGVscGZ1bCBlcnJvciBpZiBzeXMuc3RkZXJyIGlzIE5vbmUsCisgICAgICAgICMgaW5zdGVhZCBvZiBqdXN0IGFuIGF0dHJpYnV0ZSBlcnJvcjogIk5vbmUgaGFzIG5vIGF0dHJpYnV0ZSBmaWxlbm8iLgorICAgICAgICB3aXRoIHNlbGYuY2hlY2tfc3RkZXJyX25vbmUoKToKKyAgICAgICAgICAgIGZhdWx0aGFuZGxlci5lbmFibGUoKQorICAgICAgICB3aXRoIHNlbGYuY2hlY2tfc3RkZXJyX25vbmUoKToKKyAgICAgICAgICAgIGZhdWx0aGFuZGxlci5kdW1wX3RyYWNlYmFjaygpCisgICAgICAgIGlmIGhhc2F0dHIoZmF1bHRoYW5kbGVyLCAnZHVtcF90cmFjZWJhY2tfbGF0ZXInKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5jaGVja19zdGRlcnJfbm9uZSgpOgorICAgICAgICAgICAgICAgIGZhdWx0aGFuZGxlci5kdW1wX3RyYWNlYmFja19sYXRlcigxZS0zKQorICAgICAgICBpZiBoYXNhdHRyKGZhdWx0aGFuZGxlciwgInJlZ2lzdGVyIik6CisgICAgICAgICAgICB3aXRoIHNlbGYuY2hlY2tfc3RkZXJyX25vbmUoKToKKyAgICAgICAgICAgICAgICBmYXVsdGhhbmRsZXIucmVnaXN0ZXIoc2lnbmFsLlNJR1VTUjEpCisKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9mY250bC5weSBiL0xpYi90ZXN0L3Rlc3RfZmNudGwucHkKaW5kZXggMTgxMGM0ZS4uZTNiN2VkMiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9mY250bC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ZjbnRsLnB5CkBAIC0xLDcgKzEsNCBAQAogIiIiVGVzdCBwcm9ncmFtIGZvciB0aGUgZmNudGwgQyBtb2R1bGUuCi0KLU9TLzIrRU1YIGRvZXNuJ3Qgc3VwcG9ydCB0aGUgZmlsZSBsb2NraW5nIG9wZXJhdGlvbnMuCi0KICIiIgogaW1wb3J0IHBsYXRmb3JtCiBpbXBvcnQgb3MKQEAgLTM5LDggKzM2LDYgQEAKICAgICAgICAgbG9ja2RhdGEgPSBzdHJ1Y3QucGFjaygncXFpaGhpJywgMCwgMCwgMCwgZmNudGwuRl9XUkxDSywgMCwgMCkKICAgICBlbGlmIHN5cy5wbGF0Zm9ybSBpbiBbJ2FpeDMnLCAnYWl4NCcsICdocC11eEInLCAndW5peHdhcmU3J106CiAgICAgICAgIGxvY2tkYXRhID0gc3RydWN0LnBhY2soJ2hobGxsaWknLCBmY250bC5GX1dSTENLLCAwLCAwLCAwLCAwLCAwLCAwKQotICAgIGVsaWYgc3lzLnBsYXRmb3JtIGluIFsnb3MyZW14J106Ci0gICAgICAgIGxvY2tkYXRhID0gTm9uZQogICAgIGVsc2U6CiAgICAgICAgIGxvY2tkYXRhID0gc3RydWN0LnBhY2soJ2hoJytzdGFydF9sZW4rJ2hoJywgZmNudGwuRl9XUkxDSywgMCwgMCwgMCwgMCwgMCkKICAgICBpZiBsb2NrZGF0YToKQEAgLTcyLDE4ICs2NywyMCBAQAogICAgICAgICBydiA9IGZjbnRsLmZjbnRsKHNlbGYuZi5maWxlbm8oKSwgZmNudGwuRl9TRVRGTCwgb3MuT19OT05CTE9DSykKICAgICAgICAgaWYgdmVyYm9zZToKICAgICAgICAgICAgIHByaW50KCdTdGF0dXMgZnJvbSBmY250bCB3aXRoIE9fTk9OQkxPQ0s6ICcsIHJ2KQotICAgICAgICBpZiBzeXMucGxhdGZvcm0gbm90IGluIFsnb3MyZW14J106Ci0gICAgICAgICAgICBydiA9IGZjbnRsLmZjbnRsKHNlbGYuZi5maWxlbm8oKSwgZmNudGwuRl9TRVRMS1csIGxvY2tkYXRhKQotICAgICAgICAgICAgaWYgdmVyYm9zZToKLSAgICAgICAgICAgICAgICBwcmludCgnU3RyaW5nIGZyb20gZmNudGwgd2l0aCBGX1NFVExLVzogJywgcmVwcihydikpCisgICAgICAgIHJ2ID0gZmNudGwuZmNudGwoc2VsZi5mLmZpbGVubygpLCBmY250bC5GX1NFVExLVywgbG9ja2RhdGEpCisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBwcmludCgnU3RyaW5nIGZyb20gZmNudGwgd2l0aCBGX1NFVExLVzogJywgcmVwcihydikpCiAgICAgICAgIHNlbGYuZi5jbG9zZSgpCiAKICAgICBkZWYgdGVzdF9mY250bF9maWxlX2Rlc2NyaXB0b3Ioc2VsZik6CiAgICAgICAgICMgYWdhaW4sIGJ1dCBwYXNzIHRoZSBmaWxlIHJhdGhlciB0aGFuIG51bWVyaWMgZGVzY3JpcHRvcgogICAgICAgICBzZWxmLmYgPSBvcGVuKFRFU1RGTiwgJ3diJykKICAgICAgICAgcnYgPSBmY250bC5mY250bChzZWxmLmYsIGZjbnRsLkZfU0VURkwsIG9zLk9fTk9OQkxPQ0spCi0gICAgICAgIGlmIHN5cy5wbGF0Zm9ybSBub3QgaW4gWydvczJlbXgnXToKLSAgICAgICAgICAgIHJ2ID0gZmNudGwuZmNudGwoc2VsZi5mLCBmY250bC5GX1NFVExLVywgbG9ja2RhdGEpCisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBwcmludCgnU3RhdHVzIGZyb20gZmNudGwgd2l0aCBPX05PTkJMT0NLOiAnLCBydikKKyAgICAgICAgcnYgPSBmY250bC5mY250bChzZWxmLmYsIGZjbnRsLkZfU0VUTEtXLCBsb2NrZGF0YSkKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHByaW50KCdTdHJpbmcgZnJvbSBmY250bCB3aXRoIEZfU0VUTEtXOiAnLCByZXByKHJ2KSkKICAgICAgICAgc2VsZi5mLmNsb3NlKCkKIAogICAgIGRlZiB0ZXN0X2ZjbnRsX2JhZF9maWxlKHNlbGYpOgpAQCAtMTI3LDYgKzEyNCwyNiBAQAogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgb3MuY2xvc2UoZmQpCiAKKyAgICBkZWYgdGVzdF9mbG9jayhzZWxmKToKKyAgICAgICAgIyBTb2xhcmlzIG5lZWRzIHJlYWRhYmxlIGZpbGUgZm9yIHNoYXJlZCBsb2NrCisgICAgICAgIHNlbGYuZiA9IG9wZW4oVEVTVEZOLCAnd2IrJykKKyAgICAgICAgZmlsZW5vID0gc2VsZi5mLmZpbGVubygpCisgICAgICAgIGZjbnRsLmZsb2NrKGZpbGVubywgZmNudGwuTE9DS19TSCkKKyAgICAgICAgZmNudGwuZmxvY2soZmlsZW5vLCBmY250bC5MT0NLX1VOKQorICAgICAgICBmY250bC5mbG9jayhzZWxmLmYsIGZjbnRsLkxPQ0tfU0ggfCBmY250bC5MT0NLX05CKQorICAgICAgICBmY250bC5mbG9jayhzZWxmLmYsIGZjbnRsLkxPQ0tfVU4pCisgICAgICAgIGZjbnRsLmZsb2NrKGZpbGVubywgZmNudGwuTE9DS19FWCkKKyAgICAgICAgZmNudGwuZmxvY2soZmlsZW5vLCBmY250bC5MT0NLX1VOKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGZjbnRsLmZsb2NrLCAtMSwgZmNudGwuTE9DS19TSCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmY250bC5mbG9jaywgJ3NwYW0nLCBmY250bC5MT0NLX1NIKQorCisgICAgQGNweXRob25fb25seQorICAgIGRlZiB0ZXN0X2Zsb2NrX292ZXJmbG93KHNlbGYpOgorICAgICAgICBpbXBvcnQgX3Rlc3RjYXBpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGZjbnRsLmZsb2NrLCBfdGVzdGNhcGkuSU5UX01BWCsxLAorICAgICAgICAgICAgICAgICAgICAgICAgICBmY250bC5MT0NLX1NIKQorCiAKIGRlZiB0ZXN0X21haW4oKToKICAgICBydW5fdW5pdHRlc3QoVGVzdEZjbnRsKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9maWxlLnB5IGIvTGliL3Rlc3QvdGVzdF9maWxlLnB5CmluZGV4IDc2YjE2OTQuLjRlMzkyYjcgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZmlsZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ZpbGUucHkKQEAgLTgzLDExICs4MywxMSBAQAogICAgIGRlZiB0ZXN0RXJyb3JzKHNlbGYpOgogICAgICAgICBmID0gc2VsZi5mCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5uYW1lLCBURVNURk4pCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgZi5pc2F0dHkoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBmLmNsb3NlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLmlzYXR0eSgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuY2xvc2VkKQogCiAgICAgICAgIGlmIGhhc2F0dHIoZiwgInJlYWRpbnRvIik6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoSU9FcnJvciwgVHlwZUVycm9yKSwgZi5yZWFkaW50bywgIiIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoT1NFcnJvciwgVHlwZUVycm9yKSwgZi5yZWFkaW50bywgIiIpCiAgICAgICAgIGYuY2xvc2UoKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5jbG9zZWQpCiAKQEAgLTEyNiw3ICsxMjYsNyBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmYuX19leGl0X18oKnN5cy5leGNfaW5mbygpKSwgTm9uZSkKIAogICAgIGRlZiB0ZXN0UmVhZFdoZW5Xcml0aW5nKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBzZWxmLmYucmVhZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc2VsZi5mLnJlYWQpCiAKIGNsYXNzIENBdXRvRmlsZVRlc3RzKEF1dG9GaWxlVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBvcGVuID0gaW8ub3BlbgpAQCAtMTc3LDcgKzE3Nyw3IEBACiAgICAgICAgICAgICAgICAgZCA9IGludChmLnJlYWQoKS5kZWNvZGUoImFzY2lpIikpCiAgICAgICAgICAgICAgICAgZi5jbG9zZSgpCiAgICAgICAgICAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBtc2c6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBtc2c6CiAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdlcnJvciBzZXR0aW5nIGJ1ZmZlciBzaXplICVkOiAlcycgJSAocywgc3RyKG1zZykpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCBzKQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ZpbGVjbXAucHkgYi9MaWIvdGVzdC90ZXN0X2ZpbGVjbXAucHkKaW5kZXggMDk1OTk3OS4uYjViMjRhMiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9maWxlY21wLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZmlsZWNtcC5weQpAQCAtMSw4ICsxLDEyIEBACi0KLWltcG9ydCBvcywgZmlsZWNtcCwgc2h1dGlsLCB0ZW1wZmlsZQoraW1wb3J0IGZpbGVjbXAKK2ltcG9ydCBvcworaW1wb3J0IHNodXRpbAoraW1wb3J0IHRlbXBmaWxlCiBpbXBvcnQgdW5pdHRlc3QKKwogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiAKKwogY2xhc3MgRmlsZUNvbXBhcmVUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBzZWxmLm5hbWUgPSBzdXBwb3J0LlRFU1RGTgpAQCAtMTAsMTMgKzE0LDExIEBACiAgICAgICAgIHNlbGYubmFtZV9kaWZmID0gc3VwcG9ydC5URVNURk4gKyAnLWRpZmYnCiAgICAgICAgIGRhdGEgPSAnQ29udGVudHMgb2YgZmlsZSBnbyBoZXJlLlxuJwogICAgICAgICBmb3IgbmFtZSBpbiBbc2VsZi5uYW1lLCBzZWxmLm5hbWVfc2FtZSwgc2VsZi5uYW1lX2RpZmZdOgotICAgICAgICAgICAgb3V0cHV0ID0gb3BlbihuYW1lLCAndycpCi0gICAgICAgICAgICBvdXRwdXQud3JpdGUoZGF0YSkKLSAgICAgICAgICAgIG91dHB1dC5jbG9zZSgpCisgICAgICAgICAgICB3aXRoIG9wZW4obmFtZSwgJ3cnKSBhcyBvdXRwdXQ6CisgICAgICAgICAgICAgICAgb3V0cHV0LndyaXRlKGRhdGEpCiAKLSAgICAgICAgb3V0cHV0ID0gb3BlbihzZWxmLm5hbWVfZGlmZiwgJ2ErJykKLSAgICAgICAgb3V0cHV0LndyaXRlKCdBbiBleHRyYSBsaW5lLlxuJykKLSAgICAgICAgb3V0cHV0LmNsb3NlKCkKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYubmFtZV9kaWZmLCAnYSsnKSBhcyBvdXRwdXQ6CisgICAgICAgICAgICBvdXRwdXQud3JpdGUoJ0FuIGV4dHJhIGxpbmUuXG4nKQogICAgICAgICBzZWxmLmRpciA9IHRlbXBmaWxlLmdldHRlbXBkaXIoKQogCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgpAQCAtMjUsMTMgKzI3LDEzIEBACiAgICAgICAgIG9zLnVubGluayhzZWxmLm5hbWVfZGlmZikKIAogICAgIGRlZiB0ZXN0X21hdGNoaW5nKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFRydWUoZmlsZWNtcC5jbXAoc2VsZi5uYW1lLCBzZWxmLm5hbWVfc2FtZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAiQ29tcGFyaW5nIGZpbGUgdG8gaXRzZWxmIGZhaWxzIikKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZpbGVjbXAuY21wKHNlbGYubmFtZSwgc2VsZi5uYW1lX3NhbWUsIHNoYWxsb3c9RmFsc2UpLAorICAgICAgICBzZWxmLmFzc2VydFRydWUoZmlsZWNtcC5jbXAoc2VsZi5uYW1lLCBzZWxmLm5hbWUpLAogICAgICAgICAgICAgICAgICAgICAgICAgIkNvbXBhcmluZyBmaWxlIHRvIGl0c2VsZiBmYWlscyIpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaWxlY21wLmNtcChzZWxmLm5hbWUsIHNlbGYubmFtZSwgc2hhbGxvdz1GYWxzZSksCisgICAgICAgICAgICAgICAgICAgICAgICAiQ29tcGFyaW5nIGZpbGUgdG8gaXRzZWxmIGZhaWxzIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZpbGVjbXAuY21wKHNlbGYubmFtZSwgc2VsZi5uYW1lX3NhbWUpLAogICAgICAgICAgICAgICAgICAgICAgICAgIkNvbXBhcmluZyBmaWxlIHRvIGlkZW50aWNhbCBmaWxlIGZhaWxzIikKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZpbGVjbXAuY21wKHNlbGYubmFtZSwgc2VsZi5uYW1lKSwKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZpbGVjbXAuY21wKHNlbGYubmFtZSwgc2VsZi5uYW1lX3NhbWUsIHNoYWxsb3c9RmFsc2UpLAogICAgICAgICAgICAgICAgICAgICAgICAgIkNvbXBhcmluZyBmaWxlIHRvIGlkZW50aWNhbCBmaWxlIGZhaWxzIikKIAogICAgIGRlZiB0ZXN0X2RpZmZlcmVudChzZWxmKToKQEAgLTQwLDMzICs0Miw0NSBAQAogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZpbGVjbXAuY21wKHNlbGYubmFtZSwgc2VsZi5kaXIpLAogICAgICAgICAgICAgICAgICAgICAiRmlsZSBhbmQgZGlyZWN0b3J5IGNvbXBhcmUgYXMgZXF1YWwiKQogCisgICAgZGVmIHRlc3RfY2FjaGVfY2xlYXIoc2VsZik6CisgICAgICAgIGZpcnN0X2NvbXBhcmUgPSBmaWxlY21wLmNtcChzZWxmLm5hbWUsIHNlbGYubmFtZV9zYW1lLCBzaGFsbG93PUZhbHNlKQorICAgICAgICBzZWNvbmRfY29tcGFyZSA9IGZpbGVjbXAuY21wKHNlbGYubmFtZSwgc2VsZi5uYW1lX2RpZmYsIHNoYWxsb3c9RmFsc2UpCisgICAgICAgIGZpbGVjbXAuY2xlYXJfY2FjaGUoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKGZpbGVjbXAuX2NhY2hlKSA9PSAwLAorICAgICAgICAgICAgICAgICAgICAgICAgIkNhY2hlIG5vdCBjbGVhcmVkIGFmdGVyIGNhbGxpbmcgY2xlYXJfY2FjaGUiKQorCiBjbGFzcyBEaXJDb21wYXJlVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgdG1wZGlyID0gdGVtcGZpbGUuZ2V0dGVtcGRpcigpCiAgICAgICAgIHNlbGYuZGlyID0gb3MucGF0aC5qb2luKHRtcGRpciwgJ2RpcicpCiAgICAgICAgIHNlbGYuZGlyX3NhbWUgPSBvcy5wYXRoLmpvaW4odG1wZGlyLCAnZGlyLXNhbWUnKQogICAgICAgICBzZWxmLmRpcl9kaWZmID0gb3MucGF0aC5qb2luKHRtcGRpciwgJ2Rpci1kaWZmJykKKworICAgICAgICAjIEFub3RoZXIgZGlyIGlzIGNyZWF0ZWQgdW5kZXIgZGlyX3NhbWUsIGJ1dCBpdCBoYXMgYSBuYW1lIGZyb20gdGhlCisgICAgICAgICMgaWdub3JlZCBsaXN0IHNvIGl0IHNob3VsZCBub3QgYWZmZWN0IHRlc3RpbmcgcmVzdWx0cy4KKyAgICAgICAgc2VsZi5kaXJfaWdub3JlZCA9IG9zLnBhdGguam9pbihzZWxmLmRpcl9zYW1lLCAnLmhnJykKKwogICAgICAgICBzZWxmLmNhc2VpbnNlbnNpdGl2ZSA9IG9zLnBhdGgubm9ybWNhc2UoJ0EnKSA9PSBvcy5wYXRoLm5vcm1jYXNlKCdhJykKICAgICAgICAgZGF0YSA9ICdDb250ZW50cyBvZiBmaWxlIGdvIGhlcmUuXG4nCi0gICAgICAgIGZvciBkaXIgaW4gW3NlbGYuZGlyLCBzZWxmLmRpcl9zYW1lLCBzZWxmLmRpcl9kaWZmXToKKyAgICAgICAgZm9yIGRpciBpbiAoc2VsZi5kaXIsIHNlbGYuZGlyX3NhbWUsIHNlbGYuZGlyX2RpZmYsIHNlbGYuZGlyX2lnbm9yZWQpOgogICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShkaXIsIFRydWUpCiAgICAgICAgICAgICBvcy5ta2RpcihkaXIpCiAgICAgICAgICAgICBpZiBzZWxmLmNhc2VpbnNlbnNpdGl2ZSBhbmQgZGlyIGlzIHNlbGYuZGlyX3NhbWU6CiAgICAgICAgICAgICAgICAgZm4gPSAnRmlMZScgICAgICMgVmVyaWZ5IGNhc2UtaW5zZW5zaXRpdmUgY29tcGFyaXNvbgogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBmbiA9ICdmaWxlJwotICAgICAgICAgICAgb3V0cHV0ID0gb3Blbihvcy5wYXRoLmpvaW4oZGlyLCBmbiksICd3JykKLSAgICAgICAgICAgIG91dHB1dC53cml0ZShkYXRhKQotICAgICAgICAgICAgb3V0cHV0LmNsb3NlKCkKKyAgICAgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oZGlyLCBmbiksICd3JykgYXMgb3V0cHV0OgorICAgICAgICAgICAgICAgIG91dHB1dC53cml0ZShkYXRhKQogCi0gICAgICAgIG91dHB1dCA9IG9wZW4ob3MucGF0aC5qb2luKHNlbGYuZGlyX2RpZmYsICdmaWxlMicpLCAndycpCi0gICAgICAgIG91dHB1dC53cml0ZSgnQW4gZXh0cmEgZmlsZS5cbicpCi0gICAgICAgIG91dHB1dC5jbG9zZSgpCisgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oc2VsZi5kaXJfZGlmZiwgJ2ZpbGUyJyksICd3JykgYXMgb3V0cHV0OgorICAgICAgICAgICAgb3V0cHV0LndyaXRlKCdBbiBleHRyYSBmaWxlLlxuJykKIAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKLSAgICAgICAgc2h1dGlsLnJtdHJlZShzZWxmLmRpcikKLSAgICAgICAgc2h1dGlsLnJtdHJlZShzZWxmLmRpcl9zYW1lKQotICAgICAgICBzaHV0aWwucm10cmVlKHNlbGYuZGlyX2RpZmYpCisgICAgICAgIGZvciBkaXIgaW4gKHNlbGYuZGlyLCBzZWxmLmRpcl9zYW1lLCBzZWxmLmRpcl9kaWZmKToKKyAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoZGlyKQorCisgICAgZGVmIHRlc3RfZGVmYXVsdF9pZ25vcmVzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEluKCcuaGcnLCBmaWxlY21wLkRFRkFVTFRfSUdOT1JFUykKIAogICAgIGRlZiB0ZXN0X2NtcGZpbGVzKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFRydWUoZmlsZWNtcC5jbXBmaWxlcyhzZWxmLmRpciwgc2VsZi5kaXIsIFsnZmlsZSddKSA9PQpAQCAtODYsOSArMTAwLDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICJDb21wYXJpbmcgZGlyZWN0b3J5IHRvIHNhbWUgZmFpbHMiKQogCiAgICAgICAgICMgQWRkIGRpZmZlcmVudCBmaWxlMgotICAgICAgICBvdXRwdXQgPSBvcGVuKG9zLnBhdGguam9pbihzZWxmLmRpciwgJ2ZpbGUyJyksICd3JykKLSAgICAgICAgb3V0cHV0LndyaXRlKCdEaWZmZXJlbnQgY29udGVudHMuXG4nKQotICAgICAgICBvdXRwdXQuY2xvc2UoKQorICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKHNlbGYuZGlyLCAnZmlsZTInKSwgJ3cnKSBhcyBvdXRwdXQ6CisgICAgICAgICAgICBvdXRwdXQud3JpdGUoJ0RpZmZlcmVudCBjb250ZW50cy5cbicpCiAKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmaWxlY21wLmNtcGZpbGVzKHNlbGYuZGlyLCBzZWxmLmRpcl9zYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnZmlsZScsICdmaWxlMiddKSA9PQpAQCAtMTA3LDMwICsxMjAsOTQgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW2QubGVmdF9saXN0LCBkLnJpZ2h0X2xpc3RdLFtbJ2ZpbGUnXSwgWydmaWxlJ11dKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuY29tbW9uLCBbJ2ZpbGUnXSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGQubGVmdF9vbmx5ID09IGQucmlnaHRfb25seSA9PSBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmxlZnRfb25seSwgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5yaWdodF9vbmx5LCBbXSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLnNhbWVfZmlsZXMsIFsnZmlsZSddKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZGlmZl9maWxlcywgW10pCisgICAgICAgIGV4cGVjdGVkX3JlcG9ydCA9IFsKKyAgICAgICAgICAgICJkaWZmIHt9IHt9Ii5mb3JtYXQoc2VsZi5kaXIsIHNlbGYuZGlyX3NhbWUpLAorICAgICAgICAgICAgIklkZW50aWNhbCBmaWxlcyA6IFsnZmlsZSddIiwKKyAgICAgICAgXQorICAgICAgICBzZWxmLl9hc3NlcnRfcmVwb3J0KGQucmVwb3J0LCBleHBlY3RlZF9yZXBvcnQpCiAKLSAgICAgICAgIyBDaGVjayBhdHRyaWJ1dGVzIGZvciBjb21wYXJpc29uIG9mIHR3byBkaWZmZXJlbnQgZGlyZWN0b3JpZXMKKyAgICAgICAgIyBDaGVjayBhdHRyaWJ1dGVzIGZvciBjb21wYXJpc29uIG9mIHR3byBkaWZmZXJlbnQgZGlyZWN0b3JpZXMgKHJpZ2h0KQogICAgICAgICBsZWZ0X2RpciwgcmlnaHRfZGlyID0gc2VsZi5kaXIsIHNlbGYuZGlyX2RpZmYKICAgICAgICAgZCA9IGZpbGVjbXAuZGlyY21wKGxlZnRfZGlyLCByaWdodF9kaXIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5sZWZ0LCBsZWZ0X2RpcikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLnJpZ2h0LCByaWdodF9kaXIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5sZWZ0X2xpc3QsIFsnZmlsZSddKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoZC5yaWdodF9saXN0ID09IFsnZmlsZScsICdmaWxlMiddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQucmlnaHRfbGlzdCwgWydmaWxlJywgJ2ZpbGUyJ10pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5jb21tb24sIFsnZmlsZSddKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQubGVmdF9vbmx5LCBbXSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLnJpZ2h0X29ubHksIFsnZmlsZTInXSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLnNhbWVfZmlsZXMsIFsnZmlsZSddKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZGlmZl9maWxlcywgW10pCisgICAgICAgIGV4cGVjdGVkX3JlcG9ydCA9IFsKKyAgICAgICAgICAgICJkaWZmIHt9IHt9Ii5mb3JtYXQoc2VsZi5kaXIsIHNlbGYuZGlyX2RpZmYpLAorICAgICAgICAgICAgIk9ubHkgaW4ge30gOiBbJ2ZpbGUyJ10iLmZvcm1hdChzZWxmLmRpcl9kaWZmKSwKKyAgICAgICAgICAgICJJZGVudGljYWwgZmlsZXMgOiBbJ2ZpbGUnXSIsCisgICAgICAgIF0KKyAgICAgICAgc2VsZi5fYXNzZXJ0X3JlcG9ydChkLnJlcG9ydCwgZXhwZWN0ZWRfcmVwb3J0KQorCisgICAgICAgICMgQ2hlY2sgYXR0cmlidXRlcyBmb3IgY29tcGFyaXNvbiBvZiB0d28gZGlmZmVyZW50IGRpcmVjdG9yaWVzIChsZWZ0KQorICAgICAgICBsZWZ0X2RpciwgcmlnaHRfZGlyID0gc2VsZi5kaXIsIHNlbGYuZGlyX2RpZmYKKyAgICAgICAgc2h1dGlsLm1vdmUoCisgICAgICAgICAgICBvcy5wYXRoLmpvaW4oc2VsZi5kaXJfZGlmZiwgJ2ZpbGUyJyksCisgICAgICAgICAgICBvcy5wYXRoLmpvaW4oc2VsZi5kaXIsICdmaWxlMicpCisgICAgICAgICkKKyAgICAgICAgZCA9IGZpbGVjbXAuZGlyY21wKGxlZnRfZGlyLCByaWdodF9kaXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5sZWZ0LCBsZWZ0X2RpcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLnJpZ2h0LCByaWdodF9kaXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5sZWZ0X2xpc3QsIFsnZmlsZScsICdmaWxlMiddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQucmlnaHRfbGlzdCwgWydmaWxlJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5jb21tb24sIFsnZmlsZSddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQubGVmdF9vbmx5LCBbJ2ZpbGUyJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5yaWdodF9vbmx5LCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLnNhbWVfZmlsZXMsIFsnZmlsZSddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZGlmZl9maWxlcywgW10pCisgICAgICAgIGV4cGVjdGVkX3JlcG9ydCA9IFsKKyAgICAgICAgICAgICJkaWZmIHt9IHt9Ii5mb3JtYXQoc2VsZi5kaXIsIHNlbGYuZGlyX2RpZmYpLAorICAgICAgICAgICAgIk9ubHkgaW4ge30gOiBbJ2ZpbGUyJ10iLmZvcm1hdChzZWxmLmRpciksCisgICAgICAgICAgICAiSWRlbnRpY2FsIGZpbGVzIDogWydmaWxlJ10iLAorICAgICAgICBdCisgICAgICAgIHNlbGYuX2Fzc2VydF9yZXBvcnQoZC5yZXBvcnQsIGV4cGVjdGVkX3JlcG9ydCkKIAogICAgICAgICAjIEFkZCBkaWZmZXJlbnQgZmlsZTIKLSAgICAgICAgb3V0cHV0ID0gb3Blbihvcy5wYXRoLmpvaW4oc2VsZi5kaXIsICdmaWxlMicpLCAndycpCi0gICAgICAgIG91dHB1dC53cml0ZSgnRGlmZmVyZW50IGNvbnRlbnRzLlxuJykKLSAgICAgICAgb3V0cHV0LmNsb3NlKCkKKyAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihzZWxmLmRpcl9kaWZmLCAnZmlsZTInKSwgJ3cnKSBhcyBvdXRwdXQ6CisgICAgICAgICAgICBvdXRwdXQud3JpdGUoJ0RpZmZlcmVudCBjb250ZW50cy5cbicpCiAgICAgICAgIGQgPSBmaWxlY21wLmRpcmNtcChzZWxmLmRpciwgc2VsZi5kaXJfZGlmZikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLnNhbWVfZmlsZXMsIFsnZmlsZSddKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZGlmZl9maWxlcywgWydmaWxlMiddKQorICAgICAgICBleHBlY3RlZF9yZXBvcnQgPSBbCisgICAgICAgICAgICAiZGlmZiB7fSB7fSIuZm9ybWF0KHNlbGYuZGlyLCBzZWxmLmRpcl9kaWZmKSwKKyAgICAgICAgICAgICJJZGVudGljYWwgZmlsZXMgOiBbJ2ZpbGUnXSIsCisgICAgICAgICAgICAiRGlmZmVyaW5nIGZpbGVzIDogWydmaWxlMiddIiwKKyAgICAgICAgXQorICAgICAgICBzZWxmLl9hc3NlcnRfcmVwb3J0KGQucmVwb3J0LCBleHBlY3RlZF9yZXBvcnQpCisKKyAgICBkZWYgdGVzdF9yZXBvcnRfcGFydGlhbF9jbG9zdXJlKHNlbGYpOgorICAgICAgICBsZWZ0X2RpciwgcmlnaHRfZGlyID0gc2VsZi5kaXIsIHNlbGYuZGlyX3NhbWUKKyAgICAgICAgZCA9IGZpbGVjbXAuZGlyY21wKGxlZnRfZGlyLCByaWdodF9kaXIpCisgICAgICAgIGV4cGVjdGVkX3JlcG9ydCA9IFsKKyAgICAgICAgICAgICJkaWZmIHt9IHt9Ii5mb3JtYXQoc2VsZi5kaXIsIHNlbGYuZGlyX3NhbWUpLAorICAgICAgICAgICAgIklkZW50aWNhbCBmaWxlcyA6IFsnZmlsZSddIiwKKyAgICAgICAgXQorICAgICAgICBzZWxmLl9hc3NlcnRfcmVwb3J0KGQucmVwb3J0X3BhcnRpYWxfY2xvc3VyZSwgZXhwZWN0ZWRfcmVwb3J0KQorCisgICAgZGVmIHRlc3RfcmVwb3J0X2Z1bGxfY2xvc3VyZShzZWxmKToKKyAgICAgICAgbGVmdF9kaXIsIHJpZ2h0X2RpciA9IHNlbGYuZGlyLCBzZWxmLmRpcl9zYW1lCisgICAgICAgIGQgPSBmaWxlY21wLmRpcmNtcChsZWZ0X2RpciwgcmlnaHRfZGlyKQorICAgICAgICBleHBlY3RlZF9yZXBvcnQgPSBbCisgICAgICAgICAgICAiZGlmZiB7fSB7fSIuZm9ybWF0KHNlbGYuZGlyLCBzZWxmLmRpcl9zYW1lKSwKKyAgICAgICAgICAgICJJZGVudGljYWwgZmlsZXMgOiBbJ2ZpbGUnXSIsCisgICAgICAgIF0KKyAgICAgICAgc2VsZi5fYXNzZXJ0X3JlcG9ydChkLnJlcG9ydF9mdWxsX2Nsb3N1cmUsIGV4cGVjdGVkX3JlcG9ydCkKKworICAgIGRlZiBfYXNzZXJ0X3JlcG9ydChzZWxmLCBkaXJjbXBfcmVwb3J0LCBleHBlY3RlZF9yZXBvcnRfbGluZXMpOgorICAgICAgICB3aXRoIHN1cHBvcnQuY2FwdHVyZWRfc3Rkb3V0KCkgYXMgc3Rkb3V0OgorICAgICAgICAgICAgZGlyY21wX3JlcG9ydCgpCisgICAgICAgICAgICByZXBvcnRfbGluZXMgPSBzdGRvdXQuZ2V0dmFsdWUoKS5zdHJpcCgpLnNwbGl0KCdcbicpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcG9ydF9saW5lcywgZXhwZWN0ZWRfcmVwb3J0X2xpbmVzKQogCiAKIGRlZiB0ZXN0X21haW4oKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZmlsZWlucHV0LnB5IGIvTGliL3Rlc3QvdGVzdF9maWxlaW5wdXQucHkKaW5kZXggYjk1MjNjYy4uNDc2NWEwNSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9maWxlaW5wdXQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9maWxlaW5wdXQucHkKQEAgLTE5LDExICsxOSwxMiBAQAogZXhjZXB0IEltcG9ydEVycm9yOgogICAgIGd6aXAgPSBOb25lCiAKLWZyb20gaW8gaW1wb3J0IFN0cmluZ0lPCitmcm9tIGlvIGltcG9ydCBCeXRlc0lPLCBTdHJpbmdJTwogZnJvbSBmaWxlaW5wdXQgaW1wb3J0IEZpbGVJbnB1dCwgaG9va19lbmNvZGVkCiAKLWZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCB2ZXJib3NlLCBURVNURk4sIHJ1bl91bml0dGVzdAorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHZlcmJvc2UsIFRFU1RGTiwgcnVuX3VuaXR0ZXN0LCBjaGVja193YXJuaW5ncwogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHVubGluayBhcyBzYWZlX3VubGluaworZnJvbSB1bml0dGVzdCBpbXBvcnQgbW9jawogCiAKICMgVGhlIGZpbGVpbnB1dCBtb2R1bGUgaGFzIDIgaW50ZXJmYWNlczogdGhlIEZpbGVJbnB1dCBjbGFzcyB3aGljaCBkb2VzCkBAIC0yMjQsMTIgKzIyNSwyMSBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICAjIHRyeSBvcGVuaW5nIGluIHVuaXZlcnNhbCBuZXdsaW5lIG1vZGUKICAgICAgICAgICAgIHQxID0gd3JpdGVUbXAoMSwgW2IiQVxuQlxyXG5DXHJEIl0sIG1vZGU9IndiIikKLSAgICAgICAgICAgIGZpID0gRmlsZUlucHV0KGZpbGVzPXQxLCBtb2RlPSJVIikKLSAgICAgICAgICAgIGxpbmVzID0gbGlzdChmaSkKKyAgICAgICAgICAgIHdpdGggY2hlY2tfd2FybmluZ3MoKCcnLCBEZXByZWNhdGlvbldhcm5pbmcpKToKKyAgICAgICAgICAgICAgICBmaSA9IEZpbGVJbnB1dChmaWxlcz10MSwgbW9kZT0iVSIpCisgICAgICAgICAgICB3aXRoIGNoZWNrX3dhcm5pbmdzKCgnJywgRGVwcmVjYXRpb25XYXJuaW5nKSk6CisgICAgICAgICAgICAgICAgbGluZXMgPSBsaXN0KGZpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lcywgWyJBXG4iLCAiQlxuIiwgIkNcbiIsICJEIl0pCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICByZW1vdmVfdGVtcGZpbGVzKHQxKQogCisgICAgZGVmIHRlc3Rfc3RkaW5fYmluYXJ5X21vZGUoc2VsZik6CisgICAgICAgIHdpdGggbW9jay5wYXRjaCgnc3lzLnN0ZGluJykgYXMgbV9zdGRpbjoKKyAgICAgICAgICAgIG1fc3RkaW4uYnVmZmVyID0gQnl0ZXNJTyhiJ3NwYW0sIGJhY29uLCBzYXVzYWdlLCBhbmQgc3BhbScpCisgICAgICAgICAgICBmaSA9IEZpbGVJbnB1dChmaWxlcz1bJy0nXSwgbW9kZT0ncmInKQorICAgICAgICAgICAgbGluZXMgPSBsaXN0KGZpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lcywgW2Inc3BhbSwgYmFjb24sIHNhdXNhZ2UsIGFuZCBzcGFtJ10pCisKICAgICBkZWYgdGVzdF9maWxlX29wZW5pbmdfaG9vayhzZWxmKToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgIyBjYW5ub3QgdXNlIG9wZW5ob29rIGFuZCBpbnBsYWNlIG1vZGUKQEAgLTI3OCw2ICsyODgsMjEgQEAKICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZURlY29kZUVycm9yKToKICAgICAgICAgICAgICAgICAjIFJlYWQgdG8gdGhlIGVuZCBvZiBmaWxlLgogICAgICAgICAgICAgICAgIGxpc3QoZmkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpLnJlYWRsaW5lKCksICcnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaS5yZWFkbGluZSgpLCAnJykKKworICAgIGRlZiB0ZXN0X3JlYWRsaW5lX2JpbmFyeV9tb2RlKHNlbGYpOgorICAgICAgICB3aXRoIG9wZW4oVEVTVEZOLCAnd2InKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShiJ0FcbkJcclxuQ1xyRCcpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzYWZlX3VubGluaywgVEVTVEZOKQorCisgICAgICAgIHdpdGggRmlsZUlucHV0KGZpbGVzPVRFU1RGTiwgbW9kZT0ncmInKSBhcyBmaToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmkucmVhZGxpbmUoKSwgYidBXG4nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaS5yZWFkbGluZSgpLCBiJ0JcclxuJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmkucmVhZGxpbmUoKSwgYidDXHJEJykKKyAgICAgICAgICAgICMgUmVhZCB0byB0aGUgZW5kIG9mIGZpbGUuCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpLnJlYWRsaW5lKCksIGInJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmkucmVhZGxpbmUoKSwgYicnKQogCiAgICAgZGVmIHRlc3RfY29udGV4dF9tYW5hZ2VyKHNlbGYpOgogICAgICAgICB0cnk6CkBAIC0yOTYsOCArMzIxLDggQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgdDEgPSB3cml0ZVRtcCgxLCBbIiJdKQogICAgICAgICAgICAgd2l0aCBGaWxlSW5wdXQoZmlsZXM9dDEpIGFzIGZpOgotICAgICAgICAgICAgICAgIHJhaXNlIElPRXJyb3IKLSAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmkuX2ZpbGVzLCAoKSkKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIHJlbW92ZV90ZW1wZmlsZXModDEpCkBAIC04NjksMjcgKzg5NCwxMyBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lcywgZXhwZWN0ZWRfbGluZXMpCiAKICAgICAgICAgY2hlY2soJ3InLCBbJ0FcbicsICdCXG4nLCAnQ1xuJywgJ0RcdTIwYWMnXSkKLSAgICAgICAgY2hlY2soJ3JVJywgWydBXG4nLCAnQlxuJywgJ0NcbicsICdEXHUyMGFjJ10pCi0gICAgICAgIGNoZWNrKCdVJywgWydBXG4nLCAnQlxuJywgJ0NcbicsICdEXHUyMGFjJ10pCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgorICAgICAgICAgICAgY2hlY2soJ3JVJywgWydBXG4nLCAnQlxuJywgJ0NcbicsICdEXHUyMGFjJ10pCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgorICAgICAgICAgICAgY2hlY2soJ1UnLCBbJ0FcbicsICdCXG4nLCAnQ1xuJywgJ0RcdTIwYWMnXSkKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKICAgICAgICAgICAgIGNoZWNrKCdyYicsIFsnQVxuJywgJ0JcclxuJywgJ0NccicsICdEXHUyMGFjJ10pCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBydW5fdW5pdHRlc3QoCi0gICAgICAgIEJ1ZmZlclNpemVzVGVzdHMsCi0gICAgICAgIEZpbGVJbnB1dFRlc3RzLAotICAgICAgICBUZXN0X2ZpbGVpbnB1dF9pbnB1dCwKLSAgICAgICAgVGVzdF9maWxlaW5wdXRfY2xvc2UsCi0gICAgICAgIFRlc3RfZmlsZWlucHV0X25leHRmaWxlLAotICAgICAgICBUZXN0X2ZpbGVpbnB1dF9maWxlbmFtZSwKLSAgICAgICAgVGVzdF9maWxlaW5wdXRfbGluZW5vLAotICAgICAgICBUZXN0X2ZpbGVpbnB1dF9maWxlbGluZW5vLAotICAgICAgICBUZXN0X2ZpbGVpbnB1dF9maWxlbm8sCi0gICAgICAgIFRlc3RfZmlsZWlucHV0X2lzZmlyc3RsaW5lLAotICAgICAgICBUZXN0X2ZpbGVpbnB1dF9pc3N0ZGluLAotICAgICAgICBUZXN0X2hvb2tfY29tcHJlc3NlZCwKLSAgICAgICAgVGVzdF9ob29rX2VuY29kZWQsCi0gICAgKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ZpbGVpby5weSBiL0xpYi90ZXN0L3Rlc3RfZmlsZWlvLnB5CmluZGV4IDQ0NGJlOTEuLmE0ZmQyMGQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZmlsZWlvLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZmlsZWlvLnB5CkBAIC0xMTMsMjIgKzExMywyMiBAQAogCiAgICAgZGVmIHRlc3RFcnJvcnMoc2VsZik6CiAgICAgICAgIGYgPSBzZWxmLmYKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBmLmlzYXR0eSgpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGYuY2xvc2VkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuaXNhdHR5KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5jbG9zZWQpCiAgICAgICAgICNzZWxmLmFzc2VydEVxdWFsKGYubmFtZSwgVEVTVEZOKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmLnJlYWQsIDEwKSAjIE9wZW4gZm9yIHJlYWRpbmcKICAgICAgICAgZi5jbG9zZSgpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLmNsb3NlZCkKICAgICAgICAgZiA9IF9GaWxlSU8oVEVTVEZOLCAncicpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZi5yZWFkaW50bywgIiIpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgZi5jbG9zZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5jbG9zZWQpCiAgICAgICAgIGYuY2xvc2UoKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5jbG9zZWQpCiAKICAgICBkZWYgdGVzdE1ldGhvZHMoc2VsZik6Ci0gICAgICAgIG1ldGhvZHMgPSBbJ2ZpbGVubycsICdpc2F0dHknLCAncmVhZCcsICdyZWFkaW50bycsCi0gICAgICAgICAgICAgICAgICAgJ3NlZWsnLCAndGVsbCcsICd0cnVuY2F0ZScsICd3cml0ZScsICdzZWVrYWJsZScsCi0gICAgICAgICAgICAgICAgICAgJ3JlYWRhYmxlJywgJ3dyaXRhYmxlJ10KKyAgICAgICAgbWV0aG9kcyA9IFsnZmlsZW5vJywgJ2lzYXR0eScsICdzZWVrYWJsZScsICdyZWFkYWJsZScsICd3cml0YWJsZScsCisgICAgICAgICAgICAgICAgICAgJ3JlYWQnLCAncmVhZGFsbCcsICdyZWFkbGluZScsICdyZWFkbGluZXMnLAorICAgICAgICAgICAgICAgICAgICd0ZWxsJywgJ3RydW5jYXRlJywgJ2ZsdXNoJ10KIAogICAgICAgICBzZWxmLmYuY2xvc2UoKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5mLmNsb3NlZCkKQEAgLTEzOCwyMiArMTM4LDMxIEBACiAgICAgICAgICAgICAjIHNob3VsZCByYWlzZSBvbiBjbG9zZWQgZmlsZQogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWV0aG9kKQogCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYuZi5yZWFkaW50bykgIyBYWFggc2hvdWxkIGJlIFR5cGVFcnJvcj8KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5mLnJlYWRpbnRvLCBieXRlYXJyYXkoMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYuZi5zZWVrKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLmYuc2VlaywgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5mLndyaXRlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLmYud3JpdGUsIGInJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmYud3JpdGVsaW5lcykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5mLndyaXRlbGluZXMsIGInJykKKwogICAgIGRlZiB0ZXN0T3BlbmRpcihzZWxmKToKICAgICAgICAgIyBJc3N1ZSAzNzAzOiBvcGVuaW5nIGEgZGlyZWN0b3J5IHNob3VsZCBmaWxsIHRoZSBlcnJubwogICAgICAgICAjIFdpbmRvd3MgYWx3YXlzIHJldHVybnMgIltFcnJubyAxM106IFBlcm1pc3Npb24gZGVuaWVkCiAgICAgICAgICMgVW5peCBjYWxscyBkaXJjaGVjaygpIGFuZCByZXR1cm5zICJbRXJybm8gMjFdOiBJcyBhIGRpcmVjdG9yeSIKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgX0ZpbGVJTygnLicsICdyJykKLSAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZS5lcnJubywgMCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5maWxlbmFtZSwgIi4iKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5mYWlsKCJTaG91bGQgaGF2ZSByYWlzZWQgSU9FcnJvciIpCisgICAgICAgICAgICBzZWxmLmZhaWwoIlNob3VsZCBoYXZlIHJhaXNlZCBPU0Vycm9yIikKIAogICAgIEB1bml0dGVzdC5za2lwSWYob3MubmFtZSA9PSAnbnQnLCAidGVzdCBvbmx5IHdvcmtzIG9uIGEgUE9TSVgtbGlrZSBzeXN0ZW0iKQogICAgIGRlZiB0ZXN0T3BlbkRpckZEKHNlbGYpOgogICAgICAgICBmZCA9IG9zLm9wZW4oJy4nLCBvcy5PX1JET05MWSkKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yKSBhcyBjbToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKSBhcyBjbToKICAgICAgICAgICAgIF9GaWxlSU8oZmQsICdyJykKICAgICAgICAgb3MuY2xvc2UoZmQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLmVycm5vLCBlcnJuby5FSVNESVIpCkBAIC0xNzEsNyArMTgwLDcgQEAKICAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBzZWxmLmYuY2xvc2UoKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgIHJldHVybiB3cmFwcGVyCiAKQEAgLTE4MywxNCArMTkyLDE0IEBACiAgICAgICAgICAgICBvcy5jbG9zZShmLmZpbGVubygpKQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGZ1bmMoc2VsZiwgZikKLSAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5lcnJubywgZXJybm8uRUJBREYpCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiU2hvdWxkIGhhdmUgcmFpc2VkIElPRXJyb3IiKQorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiU2hvdWxkIGhhdmUgcmFpc2VkIE9TRXJyb3IiKQogICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuZi5jbG9zZSgpCi0gICAgICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgcmV0dXJuIHdyYXBwZXIKIApAQCAtMjM3LDcgKzI0Niw3IEBACiAgICAgZGVmIFJlb3BlbkZvclJlYWQoc2VsZik6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYuZi5jbG9zZSgpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgc2VsZi5mID0gX0ZpbGVJTyhURVNURk4sICdyJykKICAgICAgICAgb3MuY2xvc2Uoc2VsZi5mLmZpbGVubygpKQpAQCAtMjg1LDcgKzI5NCw3IEBACiAgICAgICAgICAgICBpZiBzeXMucGxhdGZvcm0gIT0gIndpbjMyIjoKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIGYgPSBfRmlsZUlPKCIvZGV2L3R0eSIsICJhIikKLSAgICAgICAgICAgICAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvcjoKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgIyBXaGVuIHJ1biBpbiBhIGNyb24gam9iIHRoZXJlIGp1c3QgYXJlbid0IGFueQogICAgICAgICAgICAgICAgICAgICAjIHR0eXMsIHNvIHNraXAgdGhlIHRlc3QuICBUaGlzIGFsc28gaGFuZGxlcyBvdGhlcgogICAgICAgICAgICAgICAgICAgICAjIE9TJ2VzIHRoYXQgZG9uJ3Qgc3VwcG9ydCAvZGV2L3R0eS4KQEAgLTM2MCw3ICszNjksNyBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBfRmlsZUlPLCBtYWtlX2JhZF9mZCgpKQogICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKICAgICAgICAgICAgIGltcG9ydCBtc3ZjcnQKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIG1zdmNydC5nZXRfb3NmaGFuZGxlLCBtYWtlX2JhZF9mZCgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgbXN2Y3J0LmdldF9vc2ZoYW5kbGUsIG1ha2VfYmFkX2ZkKCkpCiAKICAgICBAY3B5dGhvbl9vbmx5CiAgICAgZGVmIHRlc3RJbnZhbGlkRmRfb3ZlcmZsb3coc2VsZik6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ZpbmFsaXphdGlvbi5weSBiL0xpYi90ZXN0L3Rlc3RfZmluYWxpemF0aW9uLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzYWMxYWEKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2ZpbmFsaXphdGlvbi5weQpAQCAtMCwwICsxLDUyMiBAQAorIiIiCitUZXN0cyBmb3Igb2JqZWN0IGZpbmFsaXphdGlvbiBzZW1hbnRpY3MsIGFzIG91dGxpbmVkIGluIFBFUCA0NDIuCisiIiIKKworaW1wb3J0IGNvbnRleHRsaWIKK2ltcG9ydCBnYworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgd2Vha3JlZgorCit0cnk6CisgICAgZnJvbSBfdGVzdGNhcGkgaW1wb3J0IHdpdGhfdHBfZGVsCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgZGVmIHdpdGhfdHBfZGVsKGNscyk6CisgICAgICAgIGNsYXNzIEMob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX25ld19fKGNscywgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ3JlcXVpcmVzIF90ZXN0Y2FwaS53aXRoX3RwX2RlbCcpCisgICAgICAgIHJldHVybiBDCisKK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAorCisKK2NsYXNzIE5vbkdDU2ltcGxlQmFzZToKKyAgICAiIiIKKyAgICBUaGUgYmFzZSBjbGFzcyBmb3IgYWxsIHRoZSBvYmplY3RzIHVuZGVyIHRlc3QsIGVxdWlwcGVkIHdpdGggdmFyaW91cworICAgIHRlc3RpbmcgZmVhdHVyZXMuCisgICAgIiIiCisKKyAgICBzdXJ2aXZvcnMgPSBbXQorICAgIGRlbF9jYWxscyA9IFtdCisgICAgdHBfZGVsX2NhbGxzID0gW10KKyAgICBlcnJvcnMgPSBbXQorCisgICAgX2NsZWFuaW5nID0gRmFsc2UKKworICAgIF9fc2xvdHNfXyA9ICgpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX2NsZWFudXAoY2xzKToKKyAgICAgICAgY2xzLnN1cnZpdm9ycy5jbGVhcigpCisgICAgICAgIGNscy5lcnJvcnMuY2xlYXIoKQorICAgICAgICBnYy5nYXJiYWdlLmNsZWFyKCkKKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIGNscy5kZWxfY2FsbHMuY2xlYXIoKQorICAgICAgICBjbHMudHBfZGVsX2NhbGxzLmNsZWFyKCkKKworICAgIEBjbGFzc21ldGhvZAorICAgIEBjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VyCisgICAgZGVmIHRlc3QoY2xzKToKKyAgICAgICAgIiIiCisgICAgICAgIEEgY29udGV4dCBtYW5hZ2VyIHRvIHVzZSBhcm91bmQgYWxsIGZpbmFsaXphdGlvbiB0ZXN0cy4KKyAgICAgICAgIiIiCisgICAgICAgIHdpdGggc3VwcG9ydC5kaXNhYmxlX2djKCk6CisgICAgICAgICAgICBjbHMuZGVsX2NhbGxzLmNsZWFyKCkKKyAgICAgICAgICAgIGNscy50cF9kZWxfY2FsbHMuY2xlYXIoKQorICAgICAgICAgICAgTm9uR0NTaW1wbGVCYXNlLl9jbGVhbmluZyA9IEZhbHNlCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgeWllbGQKKyAgICAgICAgICAgICAgICBpZiBjbHMuZXJyb3JzOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBjbHMuZXJyb3JzWzBdCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIE5vbkdDU2ltcGxlQmFzZS5fY2xlYW5pbmcgPSBUcnVlCisgICAgICAgICAgICAgICAgY2xzLl9jbGVhbnVwKCkKKworICAgIGRlZiBjaGVja19zYW5pdHkoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBDaGVjayB0aGUgb2JqZWN0IGlzIHNhbmUgKG5vbi1icm9rZW4pLgorICAgICAgICAiIiIKKworICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgUEVQIDQ0MiBmaW5hbGl6ZXIuICBSZWNvcmQgdGhhdCB0aGlzIHdhcyBjYWxsZWQsIGNoZWNrIHRoZQorICAgICAgICBvYmplY3QgaXMgaW4gYSBzYW5lIHN0YXRlLCBhbmQgaW52b2tlIGEgc2lkZSBlZmZlY3QuCisgICAgICAgICIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5fY2xlYW5pbmc6CisgICAgICAgICAgICAgICAgc2VsZi5kZWxfY2FsbHMuYXBwZW5kKGlkKHNlbGYpKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tfc2FuaXR5KCkKKyAgICAgICAgICAgICAgICBzZWxmLnNpZGVfZWZmZWN0KCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgc2VsZi5lcnJvcnMuYXBwZW5kKGUpCisKKyAgICBkZWYgc2lkZV9lZmZlY3Qoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBBIHNpZGUgZWZmZWN0IGNhbGxlZCBvbiBkZXN0cnVjdGlvbi4KKyAgICAgICAgIiIiCisKKworY2xhc3MgU2ltcGxlQmFzZShOb25HQ1NpbXBsZUJhc2UpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLmlkXyA9IGlkKHNlbGYpCisKKyAgICBkZWYgY2hlY2tfc2FuaXR5KHNlbGYpOgorICAgICAgICBhc3NlcnQgc2VsZi5pZF8gPT0gaWQoc2VsZikKKworCitjbGFzcyBOb25HQyhOb25HQ1NpbXBsZUJhc2UpOgorICAgIF9fc2xvdHNfXyA9ICgpCisKK2NsYXNzIE5vbkdDUmVzdXJyZWN0b3IoTm9uR0NTaW1wbGVCYXNlKToKKyAgICBfX3Nsb3RzX18gPSAoKQorCisgICAgZGVmIHNpZGVfZWZmZWN0KHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgUmVzdXJyZWN0IHNlbGYgYnkgc3RvcmluZyBzZWxmIGluIGEgY2xhc3Mtd2lkZSBsaXN0LgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5zdXJ2aXZvcnMuYXBwZW5kKHNlbGYpCisKK2NsYXNzIFNpbXBsZShTaW1wbGVCYXNlKToKKyAgICBwYXNzCisKK2NsYXNzIFNpbXBsZVJlc3VycmVjdG9yKE5vbkdDUmVzdXJyZWN0b3IsIFNpbXBsZUJhc2UpOgorICAgIHBhc3MKKworCitjbGFzcyBUZXN0QmFzZToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5vbGRfZ2FyYmFnZSA9IGdjLmdhcmJhZ2VbOl0KKyAgICAgICAgZ2MuZ2FyYmFnZVs6XSA9IFtdCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgICMgTm9uZSBvZiB0aGUgdGVzdHMgaGVyZSBzaG91bGQgcHV0IGFueXRoaW5nIGluIGdjLmdhcmJhZ2UKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnYy5nYXJiYWdlLCBbXSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGRlbCBzZWxmLm9sZF9nYXJiYWdlCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKworICAgIGRlZiBhc3NlcnRfZGVsX2NhbGxzKHNlbGYsIGlkcyk6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKFNpbXBsZUJhc2UuZGVsX2NhbGxzKSwgc29ydGVkKGlkcykpCisKKyAgICBkZWYgYXNzZXJ0X3RwX2RlbF9jYWxscyhzZWxmLCBpZHMpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChTaW1wbGVCYXNlLnRwX2RlbF9jYWxscyksIHNvcnRlZChpZHMpKQorCisgICAgZGVmIGFzc2VydF9zdXJ2aXZvcnMoc2VsZiwgaWRzKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQoaWQoeCkgZm9yIHggaW4gU2ltcGxlQmFzZS5zdXJ2aXZvcnMpLCBzb3J0ZWQoaWRzKSkKKworICAgIGRlZiBhc3NlcnRfZ2FyYmFnZShzZWxmLCBpZHMpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChpZCh4KSBmb3IgeCBpbiBnYy5nYXJiYWdlKSwgc29ydGVkKGlkcykpCisKKyAgICBkZWYgY2xlYXJfc3Vydml2b3JzKHNlbGYpOgorICAgICAgICBTaW1wbGVCYXNlLnN1cnZpdm9ycy5jbGVhcigpCisKKworY2xhc3MgU2ltcGxlRmluYWxpemF0aW9uVGVzdChUZXN0QmFzZSwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIgorICAgIFRlc3QgZmluYWxpemF0aW9uIHdpdGhvdXQgcmVmY3ljbGVzLgorICAgICIiIgorCisgICAgZGVmIHRlc3Rfc2ltcGxlKHNlbGYpOgorICAgICAgICB3aXRoIFNpbXBsZUJhc2UudGVzdCgpOgorICAgICAgICAgICAgcyA9IFNpbXBsZSgpCisgICAgICAgICAgICBpZHMgPSBbaWQocyldCisgICAgICAgICAgICB3ciA9IHdlYWtyZWYucmVmKHMpCisgICAgICAgICAgICBkZWwgcworICAgICAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9kZWxfY2FsbHMoaWRzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfc3Vydml2b3JzKFtdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh3cigpLCBOb25lKQorICAgICAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9kZWxfY2FsbHMoaWRzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfc3Vydml2b3JzKFtdKQorCisgICAgZGVmIHRlc3Rfc2ltcGxlX3Jlc3VycmVjdChzZWxmKToKKyAgICAgICAgd2l0aCBTaW1wbGVCYXNlLnRlc3QoKToKKyAgICAgICAgICAgIHMgPSBTaW1wbGVSZXN1cnJlY3RvcigpCisgICAgICAgICAgICBpZHMgPSBbaWQocyldCisgICAgICAgICAgICB3ciA9IHdlYWtyZWYucmVmKHMpCisgICAgICAgICAgICBkZWwgcworICAgICAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9kZWxfY2FsbHMoaWRzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfc3Vydml2b3JzKGlkcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3Qod3IoKSwgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuY2xlYXJfc3Vydml2b3JzKCkKKyAgICAgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfZGVsX2NhbGxzKGlkcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X3N1cnZpdm9ycyhbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh3cigpLCBOb25lKQorCisgICAgZGVmIHRlc3Rfbm9uX2djKHNlbGYpOgorICAgICAgICB3aXRoIFNpbXBsZUJhc2UudGVzdCgpOgorICAgICAgICAgICAgcyA9IE5vbkdDKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZ2MuaXNfdHJhY2tlZChzKSkKKyAgICAgICAgICAgIGlkcyA9IFtpZChzKV0KKyAgICAgICAgICAgIGRlbCBzCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2RlbF9jYWxscyhpZHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9zdXJ2aXZvcnMoW10pCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2RlbF9jYWxscyhpZHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9zdXJ2aXZvcnMoW10pCisKKyAgICBkZWYgdGVzdF9ub25fZ2NfcmVzdXJyZWN0KHNlbGYpOgorICAgICAgICB3aXRoIFNpbXBsZUJhc2UudGVzdCgpOgorICAgICAgICAgICAgcyA9IE5vbkdDUmVzdXJyZWN0b3IoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShnYy5pc190cmFja2VkKHMpKQorICAgICAgICAgICAgaWRzID0gW2lkKHMpXQorICAgICAgICAgICAgZGVsIHMKKyAgICAgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfZGVsX2NhbGxzKGlkcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X3N1cnZpdm9ycyhpZHMpCisgICAgICAgICAgICBzZWxmLmNsZWFyX3N1cnZpdm9ycygpCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2RlbF9jYWxscyhpZHMgKiAyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfc3Vydml2b3JzKGlkcykKKworCitjbGFzcyBTZWxmQ3ljbGVCYXNlOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzdXBlcigpLl9faW5pdF9fKCkKKyAgICAgICAgc2VsZi5yZWYgPSBzZWxmCisKKyAgICBkZWYgY2hlY2tfc2FuaXR5KHNlbGYpOgorICAgICAgICBzdXBlcigpLmNoZWNrX3Nhbml0eSgpCisgICAgICAgIGFzc2VydCBzZWxmLnJlZiBpcyBzZWxmCisKK2NsYXNzIFNpbXBsZVNlbGZDeWNsZShTZWxmQ3ljbGVCYXNlLCBTaW1wbGUpOgorICAgIHBhc3MKKworY2xhc3MgU2VsZkN5Y2xlUmVzdXJyZWN0b3IoU2VsZkN5Y2xlQmFzZSwgU2ltcGxlUmVzdXJyZWN0b3IpOgorICAgIHBhc3MKKworY2xhc3MgU3VpY2lkYWxTZWxmQ3ljbGUoU2VsZkN5Y2xlQmFzZSwgU2ltcGxlKToKKworICAgIGRlZiBzaWRlX2VmZmVjdChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIEV4cGxpY2l0bHkgYnJlYWsgdGhlIHJlZmVyZW5jZSBjeWNsZS4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYucmVmID0gTm9uZQorCisKK2NsYXNzIFNlbGZDeWNsZUZpbmFsaXphdGlvblRlc3QoVGVzdEJhc2UsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiIKKyAgICBUZXN0IGZpbmFsaXphdGlvbiBvZiBhbiBvYmplY3QgaGF2aW5nIGEgc2luZ2xlIGN5Y2xpYyByZWZlcmVuY2UgdG8KKyAgICBpdHNlbGYuCisgICAgIiIiCisKKyAgICBkZWYgdGVzdF9zaW1wbGUoc2VsZik6CisgICAgICAgIHdpdGggU2ltcGxlQmFzZS50ZXN0KCk6CisgICAgICAgICAgICBzID0gU2ltcGxlU2VsZkN5Y2xlKCkKKyAgICAgICAgICAgIGlkcyA9IFtpZChzKV0KKyAgICAgICAgICAgIHdyID0gd2Vha3JlZi5yZWYocykKKyAgICAgICAgICAgIGRlbCBzCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2RlbF9jYWxscyhpZHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9zdXJ2aXZvcnMoW10pCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHdyKCksIE5vbmUpCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2RlbF9jYWxscyhpZHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9zdXJ2aXZvcnMoW10pCisKKyAgICBkZWYgdGVzdF9zaW1wbGVfcmVzdXJyZWN0KHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBfX2RlbF9fIGNhbiByZXN1cnJlY3QgdGhlIG9iamVjdCBiZWluZyBmaW5hbGl6ZWQuCisgICAgICAgIHdpdGggU2ltcGxlQmFzZS50ZXN0KCk6CisgICAgICAgICAgICBzID0gU2VsZkN5Y2xlUmVzdXJyZWN0b3IoKQorICAgICAgICAgICAgaWRzID0gW2lkKHMpXQorICAgICAgICAgICAgd3IgPSB3ZWFrcmVmLnJlZihzKQorICAgICAgICAgICAgZGVsIHMKKyAgICAgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfZGVsX2NhbGxzKGlkcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X3N1cnZpdm9ycyhpZHMpCisgICAgICAgICAgICAjIFhYWCBpcyB0aGlzIGRlc2lyYWJsZT8KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMod3IoKSwgTm9uZSkKKyAgICAgICAgICAgICMgV2hlbiB0cnlpbmcgdG8gZGVzdHJveSB0aGUgb2JqZWN0IGEgc2Vjb25kIHRpbWUsIF9fZGVsX18KKyAgICAgICAgICAgICMgaXNuJ3QgY2FsbGVkIGFueW1vcmUgKGFuZCB0aGUgb2JqZWN0IGlzbid0IHJlc3VycmVjdGVkKS4KKyAgICAgICAgICAgIHNlbGYuY2xlYXJfc3Vydml2b3JzKCkKKyAgICAgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfZGVsX2NhbGxzKGlkcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X3N1cnZpdm9ycyhbXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMod3IoKSwgTm9uZSkKKworICAgIGRlZiB0ZXN0X3NpbXBsZV9zdWljaWRlKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhlIEdDIGlzIGFibGUgdG8gZGVhbCB3aXRoIGFuIG9iamVjdCB0aGF0IGtpbGxzIGl0cyBsYXN0CisgICAgICAgICMgcmVmZXJlbmNlIGR1cmluZyBfX2RlbF9fLgorICAgICAgICB3aXRoIFNpbXBsZUJhc2UudGVzdCgpOgorICAgICAgICAgICAgcyA9IFN1aWNpZGFsU2VsZkN5Y2xlKCkKKyAgICAgICAgICAgIGlkcyA9IFtpZChzKV0KKyAgICAgICAgICAgIHdyID0gd2Vha3JlZi5yZWYocykKKyAgICAgICAgICAgIGRlbCBzCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2RlbF9jYWxscyhpZHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9zdXJ2aXZvcnMoW10pCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHdyKCksIE5vbmUpCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2RlbF9jYWxscyhpZHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9zdXJ2aXZvcnMoW10pCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHdyKCksIE5vbmUpCisKKworY2xhc3MgQ2hhaW5lZEJhc2U6CisKKyAgICBkZWYgY2hhaW4oc2VsZiwgbGVmdCk6CisgICAgICAgIHNlbGYuc3VpY2lkZWQgPSBGYWxzZQorICAgICAgICBzZWxmLmxlZnQgPSBsZWZ0CisgICAgICAgIGxlZnQucmlnaHQgPSBzZWxmCisKKyAgICBkZWYgY2hlY2tfc2FuaXR5KHNlbGYpOgorICAgICAgICBzdXBlcigpLmNoZWNrX3Nhbml0eSgpCisgICAgICAgIGlmIHNlbGYuc3VpY2lkZWQ6CisgICAgICAgICAgICBhc3NlcnQgc2VsZi5sZWZ0IGlzIE5vbmUKKyAgICAgICAgICAgIGFzc2VydCBzZWxmLnJpZ2h0IGlzIE5vbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxlZnQgPSBzZWxmLmxlZnQKKyAgICAgICAgICAgIGlmIGxlZnQuc3VpY2lkZWQ6CisgICAgICAgICAgICAgICAgYXNzZXJ0IGxlZnQucmlnaHQgaXMgTm9uZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBhc3NlcnQgbGVmdC5yaWdodCBpcyBzZWxmCisgICAgICAgICAgICByaWdodCA9IHNlbGYucmlnaHQKKyAgICAgICAgICAgIGlmIHJpZ2h0LnN1aWNpZGVkOgorICAgICAgICAgICAgICAgIGFzc2VydCByaWdodC5sZWZ0IGlzIE5vbmUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYXNzZXJ0IHJpZ2h0LmxlZnQgaXMgc2VsZgorCitjbGFzcyBTaW1wbGVDaGFpbmVkKENoYWluZWRCYXNlLCBTaW1wbGUpOgorICAgIHBhc3MKKworY2xhc3MgQ2hhaW5lZFJlc3VycmVjdG9yKENoYWluZWRCYXNlLCBTaW1wbGVSZXN1cnJlY3Rvcik6CisgICAgcGFzcworCitjbGFzcyBTdWljaWRhbENoYWluZWQoQ2hhaW5lZEJhc2UsIFNpbXBsZSk6CisKKyAgICBkZWYgc2lkZV9lZmZlY3Qoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBFeHBsaWNpdGx5IGJyZWFrIHRoZSByZWZlcmVuY2UgY3ljbGUuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLnN1aWNpZGVkID0gVHJ1ZQorICAgICAgICBzZWxmLmxlZnQgPSBOb25lCisgICAgICAgIHNlbGYucmlnaHQgPSBOb25lCisKKworY2xhc3MgQ3ljbGVDaGFpbkZpbmFsaXphdGlvblRlc3QoVGVzdEJhc2UsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiIKKyAgICBUZXN0IGZpbmFsaXphdGlvbiBvZiBhIGN5Y2xpYyBjaGFpbi4gIFRoZXNlIHRlc3RzIGFyZSBzaW1pbGFyIGluCisgICAgc3Bpcml0IHRvIHRoZSBzZWxmLWN5Y2xlIHRlc3RzIGFib3ZlLCBidXQgdGhlIGNvbGxlY3RhYmxlIG9iamVjdAorICAgIGdyYXBoIGlzbid0IHRyaXZpYWwgYW55bW9yZS4KKyAgICAiIiIKKworICAgIGRlZiBidWlsZF9jaGFpbihzZWxmLCBjbGFzc2VzKToKKyAgICAgICAgbm9kZXMgPSBbY2xzKCkgZm9yIGNscyBpbiBjbGFzc2VzXQorICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4obm9kZXMpKToKKyAgICAgICAgICAgIG5vZGVzW2ldLmNoYWluKG5vZGVzW2ktMV0pCisgICAgICAgIHJldHVybiBub2RlcworCisgICAgZGVmIGNoZWNrX25vbl9yZXN1cnJlY3RpbmdfY2hhaW4oc2VsZiwgY2xhc3Nlcyk6CisgICAgICAgIE4gPSBsZW4oY2xhc3NlcykKKyAgICAgICAgd2l0aCBTaW1wbGVCYXNlLnRlc3QoKToKKyAgICAgICAgICAgIG5vZGVzID0gc2VsZi5idWlsZF9jaGFpbihjbGFzc2VzKQorICAgICAgICAgICAgaWRzID0gW2lkKHMpIGZvciBzIGluIG5vZGVzXQorICAgICAgICAgICAgd3JzID0gW3dlYWtyZWYucmVmKHMpIGZvciBzIGluIG5vZGVzXQorICAgICAgICAgICAgZGVsIG5vZGVzCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2RlbF9jYWxscyhpZHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9zdXJ2aXZvcnMoW10pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFt3cigpIGZvciB3ciBpbiB3cnNdLCBbTm9uZV0gKiBOKQorICAgICAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9kZWxfY2FsbHMoaWRzKQorCisgICAgZGVmIGNoZWNrX3Jlc3VycmVjdGluZ19jaGFpbihzZWxmLCBjbGFzc2VzKToKKyAgICAgICAgTiA9IGxlbihjbGFzc2VzKQorICAgICAgICB3aXRoIFNpbXBsZUJhc2UudGVzdCgpOgorICAgICAgICAgICAgbm9kZXMgPSBzZWxmLmJ1aWxkX2NoYWluKGNsYXNzZXMpCisgICAgICAgICAgICBOID0gbGVuKG5vZGVzKQorICAgICAgICAgICAgaWRzID0gW2lkKHMpIGZvciBzIGluIG5vZGVzXQorICAgICAgICAgICAgc3Vydml2b3JfaWRzID0gW2lkKHMpIGZvciBzIGluIG5vZGVzIGlmIGlzaW5zdGFuY2UocywgU2ltcGxlUmVzdXJyZWN0b3IpXQorICAgICAgICAgICAgd3JzID0gW3dlYWtyZWYucmVmKHMpIGZvciBzIGluIG5vZGVzXQorICAgICAgICAgICAgZGVsIG5vZGVzCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2RlbF9jYWxscyhpZHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9zdXJ2aXZvcnMoc3Vydml2b3JfaWRzKQorICAgICAgICAgICAgIyBYWFggZGVzaXJhYmxlPworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbd3IoKSBmb3Igd3IgaW4gd3JzXSwgW05vbmVdICogTikKKyAgICAgICAgICAgIHNlbGYuY2xlYXJfc3Vydml2b3JzKCkKKyAgICAgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfZGVsX2NhbGxzKGlkcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X3N1cnZpdm9ycyhbXSkKKworICAgIGRlZiB0ZXN0X2hvbW9nZW5vdXMoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfbm9uX3Jlc3VycmVjdGluZ19jaGFpbihbU2ltcGxlQ2hhaW5lZF0gKiAzKQorCisgICAgZGVmIHRlc3RfaG9tb2dlbm91c19yZXN1cnJlY3Qoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfcmVzdXJyZWN0aW5nX2NoYWluKFtDaGFpbmVkUmVzdXJyZWN0b3JdICogMykKKworICAgIGRlZiB0ZXN0X2hvbW9nZW5vdXNfc3VpY2lkYWwoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfbm9uX3Jlc3VycmVjdGluZ19jaGFpbihbU3VpY2lkYWxDaGFpbmVkXSAqIDMpCisKKyAgICBkZWYgdGVzdF9oZXRlcm9nZW5vdXNfc3VpY2lkYWxfb25lKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX25vbl9yZXN1cnJlY3RpbmdfY2hhaW4oW1N1aWNpZGFsQ2hhaW5lZCwgU2ltcGxlQ2hhaW5lZF0gKiAyKQorCisgICAgZGVmIHRlc3RfaGV0ZXJvZ2Vub3VzX3N1aWNpZGFsX3R3byhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19ub25fcmVzdXJyZWN0aW5nX2NoYWluKAorICAgICAgICAgICAgW1N1aWNpZGFsQ2hhaW5lZF0gKiAyICsgW1NpbXBsZUNoYWluZWRdICogMikKKworICAgIGRlZiB0ZXN0X2hldGVyb2dlbm91c19yZXN1cnJlY3Rfb25lKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3Jlc3VycmVjdGluZ19jaGFpbihbQ2hhaW5lZFJlc3VycmVjdG9yLCBTaW1wbGVDaGFpbmVkXSAqIDIpCisKKyAgICBkZWYgdGVzdF9oZXRlcm9nZW5vdXNfcmVzdXJyZWN0X3R3byhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19yZXN1cnJlY3RpbmdfY2hhaW4oCisgICAgICAgICAgICBbQ2hhaW5lZFJlc3VycmVjdG9yLCBTaW1wbGVDaGFpbmVkLCBTdWljaWRhbENoYWluZWRdICogMikKKworICAgIGRlZiB0ZXN0X2hldGVyb2dlbm91c19yZXN1cnJlY3RfdGhyZWUoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfcmVzdXJyZWN0aW5nX2NoYWluKAorICAgICAgICAgICAgW0NoYWluZWRSZXN1cnJlY3Rvcl0gKiAyICsgW1NpbXBsZUNoYWluZWRdICogMiArIFtTdWljaWRhbENoYWluZWRdICogMikKKworCisjIE5PVEU6IHRoZSB0cF9kZWwgc2xvdCBpc24ndCBhdXRvbWF0aWNhbGx5IGluaGVyaXRlZCwgc28gd2UgaGF2ZSB0byBjYWxsCisjIHdpdGhfdHBfZGVsKCkgZm9yIGVhY2ggaW5zdGFudGlhdGVkIGNsYXNzLgorCitjbGFzcyBMZWdhY3lCYXNlKFNpbXBsZUJhc2UpOgorCisgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgRG8gbm90IGludm9rZSBzaWRlX2VmZmVjdCBoZXJlLCBzaW5jZSB3ZSBhcmUgbm93IGV4ZXJjaXNpbmcKKyAgICAgICAgICAgICMgdGhlIHRwX2RlbCBzbG90LgorICAgICAgICAgICAgaWYgbm90IHNlbGYuX2NsZWFuaW5nOgorICAgICAgICAgICAgICAgIHNlbGYuZGVsX2NhbGxzLmFwcGVuZChpZChzZWxmKSkKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrX3Nhbml0eSgpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIHNlbGYuZXJyb3JzLmFwcGVuZChlKQorCisgICAgZGVmIF9fdHBfZGVsX18oc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBMZWdhY3kgKHByZS1QRVAgNDQyKSBmaW5hbGl6ZXIsIG1hcHBlZCB0byBhIHRwX2RlbCBzbG90LgorICAgICAgICAiIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgbm90IHNlbGYuX2NsZWFuaW5nOgorICAgICAgICAgICAgICAgIHNlbGYudHBfZGVsX2NhbGxzLmFwcGVuZChpZChzZWxmKSkKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrX3Nhbml0eSgpCisgICAgICAgICAgICAgICAgc2VsZi5zaWRlX2VmZmVjdCgpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIHNlbGYuZXJyb3JzLmFwcGVuZChlKQorCitAd2l0aF90cF9kZWwKK2NsYXNzIExlZ2FjeShMZWdhY3lCYXNlKToKKyAgICBwYXNzCisKK0B3aXRoX3RwX2RlbAorY2xhc3MgTGVnYWN5UmVzdXJyZWN0b3IoTGVnYWN5QmFzZSk6CisKKyAgICBkZWYgc2lkZV9lZmZlY3Qoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBSZXN1cnJlY3Qgc2VsZiBieSBzdG9yaW5nIHNlbGYgaW4gYSBjbGFzcy13aWRlIGxpc3QuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLnN1cnZpdm9ycy5hcHBlbmQoc2VsZikKKworQHdpdGhfdHBfZGVsCitjbGFzcyBMZWdhY3lTZWxmQ3ljbGUoU2VsZkN5Y2xlQmFzZSwgTGVnYWN5QmFzZSk6CisgICAgcGFzcworCisKK0BzdXBwb3J0LmNweXRob25fb25seQorY2xhc3MgTGVnYWN5RmluYWxpemF0aW9uVGVzdChUZXN0QmFzZSwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIgorICAgIFRlc3QgZmluYWxpemF0aW9uIG9mIG9iamVjdHMgd2l0aCBhIHRwX2RlbC4KKyAgICAiIiIKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgIyBUaGVzZSB0ZXN0cyBuZWVkIHRvIGNsZWFuIHVwIGEgYml0IG1vcmUsIHNpbmNlIHRoZXkgY3JlYXRlCisgICAgICAgICMgdW5jb2xsZWN0YWJsZSBvYmplY3RzLgorICAgICAgICBnYy5nYXJiYWdlLmNsZWFyKCkKKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIHN1cGVyKCkudGVhckRvd24oKQorCisgICAgZGVmIHRlc3RfbGVnYWN5KHNlbGYpOgorICAgICAgICB3aXRoIFNpbXBsZUJhc2UudGVzdCgpOgorICAgICAgICAgICAgcyA9IExlZ2FjeSgpCisgICAgICAgICAgICBpZHMgPSBbaWQocyldCisgICAgICAgICAgICB3ciA9IHdlYWtyZWYucmVmKHMpCisgICAgICAgICAgICBkZWwgcworICAgICAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9kZWxfY2FsbHMoaWRzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfdHBfZGVsX2NhbGxzKGlkcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X3N1cnZpdm9ycyhbXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMod3IoKSwgTm9uZSkKKyAgICAgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfZGVsX2NhbGxzKGlkcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X3RwX2RlbF9jYWxscyhpZHMpCisKKyAgICBkZWYgdGVzdF9sZWdhY3lfcmVzdXJyZWN0KHNlbGYpOgorICAgICAgICB3aXRoIFNpbXBsZUJhc2UudGVzdCgpOgorICAgICAgICAgICAgcyA9IExlZ2FjeVJlc3VycmVjdG9yKCkKKyAgICAgICAgICAgIGlkcyA9IFtpZChzKV0KKyAgICAgICAgICAgIHdyID0gd2Vha3JlZi5yZWYocykKKyAgICAgICAgICAgIGRlbCBzCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2RlbF9jYWxscyhpZHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydF90cF9kZWxfY2FsbHMoaWRzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfc3Vydml2b3JzKGlkcykKKyAgICAgICAgICAgICMgd2Vha3JlZnMgYXJlIGNsZWFyZWQgYmVmb3JlIHRwX2RlbCBpcyBjYWxsZWQuCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHdyKCksIE5vbmUpCisgICAgICAgICAgICBzZWxmLmNsZWFyX3N1cnZpdm9ycygpCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2RlbF9jYWxscyhpZHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydF90cF9kZWxfY2FsbHMoaWRzICogMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X3N1cnZpdm9ycyhpZHMpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMod3IoKSwgTm9uZSkKKworICAgIGRlZiB0ZXN0X2xlZ2FjeV9zZWxmX2N5Y2xlKHNlbGYpOgorICAgICAgICAjIFNlbGYtY3ljbGVzIHdpdGggbGVnYWN5IGZpbmFsaXplcnMgZW5kIHVwIGluIGdjLmdhcmJhZ2UuCisgICAgICAgIHdpdGggU2ltcGxlQmFzZS50ZXN0KCk6CisgICAgICAgICAgICBzID0gTGVnYWN5U2VsZkN5Y2xlKCkKKyAgICAgICAgICAgIGlkcyA9IFtpZChzKV0KKyAgICAgICAgICAgIHdyID0gd2Vha3JlZi5yZWYocykKKyAgICAgICAgICAgIGRlbCBzCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2RlbF9jYWxscyhbXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X3RwX2RlbF9jYWxscyhbXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X3N1cnZpdm9ycyhbXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2dhcmJhZ2UoaWRzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdCh3cigpLCBOb25lKQorICAgICAgICAgICAgIyBCcmVhayB0aGUgY3ljbGUgdG8gYWxsb3cgY29sbGVjdGlvbgorICAgICAgICAgICAgZ2MuZ2FyYmFnZVswXS5yZWYgPSBOb25lCisgICAgICAgIHNlbGYuYXNzZXJ0X2dhcmJhZ2UoW10pCisgICAgICAgIHNlbGYuYXNzZXJ0SXMod3IoKSwgTm9uZSkKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoX19uYW1lX18pCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZmxvYXQucHkgYi9MaWIvdGVzdC90ZXN0X2Zsb2F0LnB5CmluZGV4IDk2ZDkwN2EuLjI0ZmUxMjggMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZmxvYXQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9mbG9hdC5weQpAQCAtMSwxMiArMSwxNiBAQAogCi1pbXBvcnQgdW5pdHRlc3QsIHN0cnVjdAotaW1wb3J0IG9zCi1pbXBvcnQgc3lzCi1mcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKK2ltcG9ydCBmcmFjdGlvbnMKIGltcG9ydCBtYXRoCi1mcm9tIG1hdGggaW1wb3J0IGlzaW5mLCBpc25hbiwgY29weXNpZ24sIGxkZXhwCiBpbXBvcnQgb3BlcmF0b3IKLWltcG9ydCByYW5kb20sIGZyYWN0aW9ucworaW1wb3J0IG9zCitpbXBvcnQgcmFuZG9tCitpbXBvcnQgc3lzCitpbXBvcnQgc3RydWN0CitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAorZnJvbSBtYXRoIGltcG9ydCBpc2luZiwgaXNuYW4sIGNvcHlzaWduLCBsZGV4cAogCiBJTkYgPSBmbG9hdCgiaW5mIikKIE5BTiA9IGZsb2F0KCJuYW4iKQpAQCAtMjEsMTMgKzI1LDE4IEBACiB0ZXN0X2RpciA9IG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykgb3Igb3MuY3VyZGlyCiBmb3JtYXRfdGVzdGZpbGUgPSBvcy5wYXRoLmpvaW4odGVzdF9kaXIsICdmb3JtYXRmbG9hdF90ZXN0Y2FzZXMudHh0JykKIAorY2xhc3MgRmxvYXRTdWJjbGFzcyhmbG9hdCk6CisgICAgcGFzcworCitjbGFzcyBPdGhlckZsb2F0U3ViY2xhc3MoZmxvYXQpOgorICAgIHBhc3MKKwogY2xhc3MgR2VuZXJhbEZsb2F0Q2FzZXModW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3RfZmxvYXQoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmxvYXQoMy4xNCksIDMuMTQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmxvYXQoMzE0KSwgMzE0LjApCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmxvYXQoIiAgMy4xNCAgIiksIDMuMTQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmxvYXQoYiIgMy4xNCAgIiksIDMuMTQpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGZsb2F0LCAiICAweDMuMSAgIikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZmxvYXQsICIgIC0weDMucC0xICAiKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmbG9hdCwgIiAgKzB4My5wLTEgICIpCkBAIC0zOSw4ICs0OCw4IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGZsb2F0LCAiKy5pbmYiKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmbG9hdCwgIi4iKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmbG9hdCwgIi0uIikKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZmxvYXQsIGIiLSIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZmxvYXQsIHt9KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFR5cGVFcnJvciwgIm5vdCAnZGljdCciLCBmbG9hdCwge30pCiAgICAgICAgICMgTG9uZSBzdXJyb2dhdGUKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVuY29kZUVycm9yLCBmbG9hdCwgJ1x1RDhGMCcpCiAgICAgICAgICMgY2hlY2sgdGhhdCB3ZSBkb24ndCBhY2NlcHQgYWx0ZXJuYXRlIGV4cG9uZW50IG1hcmtlcnMKQEAgLTUyLDYgKzYxLDQyIEBACiAgICAgICAgIGZsb2F0KGInLicgKyBiJzEnKjEwMDApCiAgICAgICAgIGZsb2F0KCcuJyArICcxJyoxMDAwKQogCisgICAgZGVmIHRlc3Rfbm9uX251bWVyaWNfaW5wdXRfdHlwZXMoc2VsZik6CisgICAgICAgICMgVGVzdCBwb3NzaWJsZSBub24tbnVtZXJpYyB0eXBlcyBmb3IgdGhlIGFyZ3VtZW50IHgsIGluY2x1ZGluZworICAgICAgICAjIHN1YmNsYXNzZXMgb2YgdGhlIGV4cGxpY2l0bHkgZG9jdW1lbnRlZCBhY2NlcHRlZCB0eXBlcy4KKyAgICAgICAgY2xhc3MgQ3VzdG9tU3RyKHN0cik6IHBhc3MKKyAgICAgICAgY2xhc3MgQ3VzdG9tQnl0ZXMoYnl0ZXMpOiBwYXNzCisgICAgICAgIGNsYXNzIEN1c3RvbUJ5dGVBcnJheShieXRlYXJyYXkpOiBwYXNzCisKKyAgICAgICAgZmFjdG9yaWVzID0gWworICAgICAgICAgICAgYnl0ZXMsCisgICAgICAgICAgICBieXRlYXJyYXksCisgICAgICAgICAgICBsYW1iZGEgYjogQ3VzdG9tU3RyKGIuZGVjb2RlKCkpLAorICAgICAgICAgICAgQ3VzdG9tQnl0ZXMsCisgICAgICAgICAgICBDdXN0b21CeXRlQXJyYXksCisgICAgICAgICAgICBtZW1vcnl2aWV3LAorICAgICAgICBdCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZyb20gYXJyYXkgaW1wb3J0IGFycmF5CisgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZhY3Rvcmllcy5hcHBlbmQobGFtYmRhIGI6IGFycmF5KCdCJywgYikpCisKKyAgICAgICAgZm9yIGYgaW4gZmFjdG9yaWVzOgorICAgICAgICAgICAgeCA9IGYoYiIgMy4xNCAgIikKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KHR5cGUoeCkpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmxvYXQoeCksIDMuMTQpCisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsICJjb3VsZCBub3QgY29udmVydCIpOgorICAgICAgICAgICAgICAgICAgICBmbG9hdChmKGInQScgKiAweDEwKSkKKworICAgIGRlZiB0ZXN0X2Zsb2F0X21lbW9yeXZpZXcoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmxvYXQobWVtb3J5dmlldyhiJzEyLjMnKVsxOjRdKSwgMi4zKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZsb2F0KG1lbW9yeXZpZXcoYicxMi4zXHgwMCcpWzE6NF0pLCAyLjMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmxvYXQobWVtb3J5dmlldyhiJzEyLjMgJylbMTo0XSksIDIuMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbG9hdChtZW1vcnl2aWV3KGInMTIuM0EnKVsxOjRdKSwgMi4zKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZsb2F0KG1lbW9yeXZpZXcoYicxMi4zNCcpWzE6NF0pLCAyLjMpCisKICAgICBkZWYgdGVzdF9lcnJvcl9tZXNzYWdlKHNlbGYpOgogICAgICAgICB0ZXN0bGlzdCA9ICgnXHhiZCcsICcxMjNceGJkJywgJyAgMTIzIDQ1NiAgJykKICAgICAgICAgZm9yIHMgaW4gdGVzdGxpc3Q6CkBAIC05MiwxMCArMTM3LDYgQEAKIAogICAgIGRlZiB0ZXN0X2Zsb2F0Y29udmVyc2lvbihzZWxmKToKICAgICAgICAgIyBNYWtlIHN1cmUgdGhhdCBjYWxscyB0byBfX2Zsb2F0X18oKSB3b3JrIHByb3Blcmx5Ci0gICAgICAgIGNsYXNzIEZvbzA6Ci0gICAgICAgICAgICBkZWYgX19mbG9hdF9fKHNlbGYpOgotICAgICAgICAgICAgICAgIHJldHVybiA0Mi4KLQogICAgICAgICBjbGFzcyBGb28xKG9iamVjdCk6CiAgICAgICAgICAgICBkZWYgX19mbG9hdF9fKHNlbGYpOgogICAgICAgICAgICAgICAgIHJldHVybiA0Mi4KQEAgLTEyMSwxMyArMTYyLDI2IEBACiAgICAgICAgICAgICBkZWYgX19mbG9hdF9fKHNlbGYpOgogICAgICAgICAgICAgICAgIHJldHVybiBmbG9hdChzdHIoc2VsZikpICsgMQogCi0gICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoZmxvYXQoRm9vMCgpKSwgNDIuKQogICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGZsb2F0KEZvbzEoKSksIDQyLikKICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChmbG9hdChGb28yKCkpLCA0Mi4pCiAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoZmxvYXQoRm9vMygyMSkpLCA0Mi4pCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZmxvYXQsIEZvbzQoNDIpKQogICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGZsb2F0KEZvb1N0cignOCcpKSwgOS4pCiAKKyAgICAgICAgY2xhc3MgRm9vNToKKyAgICAgICAgICAgIGRlZiBfX2Zsb2F0X18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICIiCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdGltZS5zbGVlcCwgRm9vNSgpKQorCisgICAgICAgICMgSXNzdWUgIzI0NzMxCisgICAgICAgIGNsYXNzIEY6CisgICAgICAgICAgICBkZWYgX19mbG9hdF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBPdGhlckZsb2F0U3ViY2xhc3MoNDIuKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGZsb2F0KEYoKSksIDQyLikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKGZsb2F0KEYoKSkpLCBPdGhlckZsb2F0U3ViY2xhc3MpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoRmxvYXRTdWJjbGFzcyhGKCkpLCA0Mi4pCisgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShGbG9hdFN1YmNsYXNzKEYoKSkpLCBGbG9hdFN1YmNsYXNzKQorCiAgICAgZGVmIHRlc3RfaXNfaW50ZWdlcihzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgoMS4xKS5pc19pbnRlZ2VyKCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoMS4pLmlzX2ludGVnZXIoKSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZm9yazEucHkgYi9MaWIvdGVzdC90ZXN0X2ZvcmsxLnB5CmluZGV4IDgxOTJjMzguLmUwNjI2ZGYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZm9yazEucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9mb3JrMS5weQpAQCAtMSw3ICsxLDcgQEAKICIiIlRoaXMgdGVzdCBjaGVja3MgZm9yIGNvcnJlY3QgZm9yaygpIGJlaGF2aW9yLgogIiIiCiAKLWltcG9ydCBpbXAKK2ltcG9ydCBfaW1wIGFzIGltcAogaW1wb3J0IG9zCiBpbXBvcnQgc2lnbmFsCiBpbXBvcnQgc3lzCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2Zvcm1hdC5weSBiL0xpYi90ZXN0L3Rlc3RfZm9ybWF0LnB5CmluZGV4IGVhNWE3MzEuLmZjNzFlNDggMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZm9ybWF0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZm9ybWF0LnB5CkBAIC0xNDIsNyArMTQyLDggQEAKICAgICAgICAgdGVzdGZvcm1hdCgiJSMrMDI3LjIzWCIsIGJpZywgIiswWDAwMDEyMzQ1Njc4OTBBQkNERUYxMjM0NSIpCiAgICAgICAgICMgc2FtZSwgZXhjZXB0IG5vIDAgZmxhZwogICAgICAgICB0ZXN0Zm9ybWF0KCIlIysyNy4yM1giLCBiaWcsICIgKzBYMDAxMjM0NTY3ODkwQUJDREVGMTIzNDUiKQotICAgICAgICB0ZXN0Zm9ybWF0KCIleCIsIGZsb2F0KGJpZyksICIxMjM0NTZfX19fX19fX19fX19fX18iLCA2KQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgIHRlc3Rmb3JtYXQoIiV4IiwgZmxvYXQoYmlnKSwgIjEyMzQ1Nl9fX19fX19fX19fX19fXyIsIDYpCiAgICAgICAgIGJpZyA9IDBvMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAgICMgMzIgb2N0YWwgZGlnaXRzCiAgICAgICAgIHRlc3Rmb3JtYXQoIiVvIiwgYmlnLCAiMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAiKQogICAgICAgICB0ZXN0Zm9ybWF0KCIlbyIsIC1iaWcsICItMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAiKQpAQCAtMTgyLDcgKzE4Myw4IEBACiAgICAgICAgIHRlc3Rmb3JtYXQoIiUwMzQuMzNvIiwgYmlnLCAiMDAxMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MCIpCiAgICAgICAgICMgYmFzZSBtYXJrZXIgc2hvdWxkbid0IGNoYW5nZSB0aGF0CiAgICAgICAgIHRlc3Rmb3JtYXQoIiUwIzM0LjMzbyIsIGJpZywgIjBvMDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwIikKLSAgICAgICAgdGVzdGZvcm1hdCgiJW8iLCBmbG9hdChiaWcpLCAiMTIzNDU2X19fX19fX19fX19fX19fX19fX19fX19fX18iLCA2KQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgIHRlc3Rmb3JtYXQoIiVvIiwgZmxvYXQoYmlnKSwgIjEyMzQ1Nl9fX19fX19fX19fX19fX19fX19fX19fX19fIiwgNikKICAgICAgICAgIyBTb21lIHNtYWxsIGludHMsIGluIGJvdGggUHl0aG9uIGludCBhbmQgZmxhdm9ycykuCiAgICAgICAgIHRlc3Rmb3JtYXQoIiVkIiwgNDIsICI0MiIpCiAgICAgICAgIHRlc3Rmb3JtYXQoIiVkIiwgLTQyLCAiLTQyIikKQEAgLTE5Myw3ICsxOTUsOCBAQAogICAgICAgICB0ZXN0Zm9ybWF0KCIlI3giLCAxLCAiMHgxIikKICAgICAgICAgdGVzdGZvcm1hdCgiJSNYIiwgMSwgIjBYMSIpCiAgICAgICAgIHRlc3Rmb3JtYXQoIiUjWCIsIDEsICIwWDEiKQotICAgICAgICB0ZXN0Zm9ybWF0KCIlI3giLCAxLjAsICIweDEiKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgIHRlc3Rmb3JtYXQoIiUjeCIsIDEuMCwgIjB4MSIpCiAgICAgICAgIHRlc3Rmb3JtYXQoIiUjbyIsIDEsICIwbzEiKQogICAgICAgICB0ZXN0Zm9ybWF0KCIlI28iLCAxLCAiMG8xIikKICAgICAgICAgdGVzdGZvcm1hdCgiJSNvIiwgMCwgIjBvMCIpCkBAIC0yMTAsMTIgKzIxMywxNCBAQAogICAgICAgICB0ZXN0Zm9ybWF0KCIleCIsIC0weDQyLCAiLTQyIikKICAgICAgICAgdGVzdGZvcm1hdCgiJXgiLCAweDQyLCAiNDIiKQogICAgICAgICB0ZXN0Zm9ybWF0KCIleCIsIC0weDQyLCAiLTQyIikKLSAgICAgICAgdGVzdGZvcm1hdCgiJXgiLCBmbG9hdCgweDQyKSwgIjQyIikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6CisgICAgICAgICAgICB0ZXN0Zm9ybWF0KCIleCIsIGZsb2F0KDB4NDIpLCAiNDIiKQogICAgICAgICB0ZXN0Zm9ybWF0KCIlbyIsIDBvNDIsICI0MiIpCiAgICAgICAgIHRlc3Rmb3JtYXQoIiVvIiwgLTBvNDIsICItNDIiKQogICAgICAgICB0ZXN0Zm9ybWF0KCIlbyIsIDBvNDIsICI0MiIpCiAgICAgICAgIHRlc3Rmb3JtYXQoIiVvIiwgLTBvNDIsICItNDIiKQotICAgICAgICB0ZXN0Zm9ybWF0KCIlbyIsIGZsb2F0KDBvNDIpLCAiNDIiKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgIHRlc3Rmb3JtYXQoIiVvIiwgZmxvYXQoMG80MiksICI0MiIpCiAgICAgICAgIHRlc3Rmb3JtYXQoIiVyIiwgIlx1MDM3OCIsICInXFx1MDM3OCciKSAgIyBub24gcHJpbnRhYmxlCiAgICAgICAgIHRlc3Rmb3JtYXQoIiVhIiwgIlx1MDM3OCIsICInXFx1MDM3OCciKSAgIyBub24gcHJpbnRhYmxlCiAgICAgICAgIHRlc3Rmb3JtYXQoIiVyIiwgIlx1MDM3NCIsICInXHUwMzc0JyIpICAgIyBwcmludGFibGUKQEAgLTMwNywxMCArMzEyLDI1IEBACiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBsb2NhbGUuc2V0bG9jYWxlKGxvY2FsZS5MQ19BTEwsIG9sZGxvYykKIAorICAgIEBzdXBwb3J0LmNweXRob25fb25seQorICAgIGRlZiB0ZXN0X29wdGltaXNhdGlvbnMoc2VsZik6CisgICAgICAgIHRleHQgPSAiYWJjZGUiICMgNSBjaGFyYWN0ZXJzCiAKKyAgICAgICAgc2VsZi5hc3NlcnRJcygiJXMiICUgdGV4dCwgdGV4dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcygiJS41cyIgJSB0ZXh0LCB0ZXh0KQorICAgICAgICBzZWxmLmFzc2VydElzKCIlLjEwcyIgJSB0ZXh0LCB0ZXh0KQorICAgICAgICBzZWxmLmFzc2VydElzKCIlMXMiICUgdGV4dCwgdGV4dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcygiJTVzIiAlIHRleHQsIHRleHQpCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChGb3JtYXRUZXN0KQorICAgICAgICBzZWxmLmFzc2VydElzKCJ7MH0iLmZvcm1hdCh0ZXh0KSwgdGV4dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcygiezA6c30iLmZvcm1hdCh0ZXh0KSwgdGV4dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcygiezA6LjVzfSIuZm9ybWF0KHRleHQpLCB0ZXh0KQorICAgICAgICBzZWxmLmFzc2VydElzKCJ7MDouMTBzfSIuZm9ybWF0KHRleHQpLCB0ZXh0KQorICAgICAgICBzZWxmLmFzc2VydElzKCJ7MDoxc30iLmZvcm1hdCh0ZXh0KSwgdGV4dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcygiezA6NXN9Ii5mb3JtYXQodGV4dCksIHRleHQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0ZXh0ICUgKCksIHRleHQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModGV4dC5mb3JtYXQoKSwgdGV4dCkKIAogICAgIGRlZiB0ZXN0X3ByZWNpc2lvbihzZWxmKToKICAgICAgICAgZiA9IDEuMgpAQCAtMzE4LDE0ICszMzgsMTIgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoZiwgIi4zZiIpLCAiMS4yMDAiKQogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpIGFzIGNtOgogICAgICAgICAgICAgZm9ybWF0KGYsICIuJXNmIiAlIChzeXMubWF4c2l6ZSArIDEpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihjbS5leGNlcHRpb24pLCAicHJlY2lzaW9uIHRvbyBiaWciKQogCiAgICAgICAgIGMgPSBjb21wbGV4KGYpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KGMsICIuMGYiKSwgIjErMGoiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdChjLCAiLjNmIiksICIxLjIwMCswLjAwMGoiKQogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpIGFzIGNtOgogICAgICAgICAgICAgZm9ybWF0KGMsICIuJXNmIiAlIChzeXMubWF4c2l6ZSArIDEpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihjbS5leGNlcHRpb24pLCAicHJlY2lzaW9uIHRvbyBiaWciKQogCiAgICAgQHN1cHBvcnQuY3B5dGhvbl9vbmx5CiAgICAgZGVmIHRlc3RfcHJlY2lzaW9uX2NfbGltaXRzKHNlbGYpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9mcmFjdGlvbnMucHkgYi9MaWIvdGVzdC90ZXN0X2ZyYWN0aW9ucy5weQppbmRleCAxZmFkOTIxLi4zMzM2NTMyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ZyYWN0aW9ucy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ZyYWN0aW9ucy5weQpAQCAtMTQ2LDkgKzE0NiwxMCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgwLCAxKSwgX2NvbXBvbmVudHMoRigtMC4wKSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDM2MDI4Nzk3MDE4OTYzOTcsIDM2MDI4Nzk3MDE4OTYzOTY4KSwKICAgICAgICAgICAgICAgICAgICAgICAgICBfY29tcG9uZW50cyhGKDAuMSkpKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIEYsIGZsb2F0KCduYW4nKSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBGLCBmbG9hdCgnaW5mJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgRiwgZmxvYXQoJy1pbmYnKSkKKyAgICAgICAgIyBidWcgMTY0Njk6IGVycm9yIHR5cGVzIHNob3VsZCBiZSBjb25zaXN0ZW50IHdpdGggZmxvYXQgLT4gaW50CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIEYsIGZsb2F0KCduYW4nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgRiwgZmxvYXQoJ2luZicpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBGLCBmbG9hdCgnLWluZicpKQogCiAgICAgZGVmIHRlc3RJbml0RnJvbURlY2ltYWwoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDExLCAxMCksCkBAIC0xNTcsMTAgKzE1OCwxMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIF9jb21wb25lbnRzKEYoRGVjaW1hbCgnMy41ZS0yJykpKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMCwgMSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbXBvbmVudHMoRihEZWNpbWFsKCcuMDAwZTIwJykpKSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBGLCBEZWNpbWFsKCduYW4nKSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBGLCBEZWNpbWFsKCdzbmFuJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgRiwgRGVjaW1hbCgnaW5mJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgRiwgRGVjaW1hbCgnLWluZicpKQorICAgICAgICAjIGJ1ZyAxNjQ2OTogZXJyb3IgdHlwZXMgc2hvdWxkIGJlIGNvbnNpc3RlbnQgd2l0aCBkZWNpbWFsIC0+IGludAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBGLCBEZWNpbWFsKCduYW4nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgRiwgRGVjaW1hbCgnc25hbicpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBGLCBEZWNpbWFsKCdpbmYnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgRiwgRGVjaW1hbCgnLWluZicpKQogCiAgICAgZGVmIHRlc3RGcm9tU3RyaW5nKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCg1LCAxKSwgX2NvbXBvbmVudHMoRigiNSIpKSkKQEAgLTI0OCwxNCArMjUwLDE1IEBACiAKICAgICAgICAgaW5mID0gMWUxMDAwCiAgICAgICAgIG5hbiA9IGluZiAtIGluZgorICAgICAgICAjIGJ1ZyAxNjQ2OTogZXJyb3IgdHlwZXMgc2hvdWxkIGJlIGNvbnNpc3RlbnQgd2l0aCBmbG9hdCAtPiBpbnQKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNNZXNzYWdlKAotICAgICAgICAgICAgVHlwZUVycm9yLCAiQ2Fubm90IGNvbnZlcnQgaW5mIHRvIEZyYWN0aW9uLiIsCisgICAgICAgICAgICBPdmVyZmxvd0Vycm9yLCAiQ2Fubm90IGNvbnZlcnQgaW5mIHRvIEZyYWN0aW9uLiIsCiAgICAgICAgICAgICBGLmZyb21fZmxvYXQsIGluZikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNNZXNzYWdlKAotICAgICAgICAgICAgVHlwZUVycm9yLCAiQ2Fubm90IGNvbnZlcnQgLWluZiB0byBGcmFjdGlvbi4iLAorICAgICAgICAgICAgT3ZlcmZsb3dFcnJvciwgIkNhbm5vdCBjb252ZXJ0IC1pbmYgdG8gRnJhY3Rpb24uIiwKICAgICAgICAgICAgIEYuZnJvbV9mbG9hdCwgLWluZikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNNZXNzYWdlKAotICAgICAgICAgICAgVHlwZUVycm9yLCAiQ2Fubm90IGNvbnZlcnQgbmFuIHRvIEZyYWN0aW9uLiIsCisgICAgICAgICAgICBWYWx1ZUVycm9yLCAiQ2Fubm90IGNvbnZlcnQgbmFuIHRvIEZyYWN0aW9uLiIsCiAgICAgICAgICAgICBGLmZyb21fZmxvYXQsIG5hbikKIAogICAgIGRlZiB0ZXN0RnJvbURlY2ltYWwoc2VsZik6CkBAIC0yNjgsMTcgKzI3MSwxOCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEgLSBGKDEsIDEwKiozMCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgRi5mcm9tX2RlY2ltYWwoRGVjaW1hbCgiMC4iICsgIjkiICogMzApKSkKIAorICAgICAgICAjIGJ1ZyAxNjQ2OTogZXJyb3IgdHlwZXMgc2hvdWxkIGJlIGNvbnNpc3RlbnQgd2l0aCBkZWNpbWFsIC0+IGludAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlc01lc3NhZ2UoCi0gICAgICAgICAgICBUeXBlRXJyb3IsICJDYW5ub3QgY29udmVydCBJbmZpbml0eSB0byBGcmFjdGlvbi4iLAorICAgICAgICAgICAgT3ZlcmZsb3dFcnJvciwgIkNhbm5vdCBjb252ZXJ0IEluZmluaXR5IHRvIEZyYWN0aW9uLiIsCiAgICAgICAgICAgICBGLmZyb21fZGVjaW1hbCwgRGVjaW1hbCgiaW5mIikpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzTWVzc2FnZSgKLSAgICAgICAgICAgIFR5cGVFcnJvciwgIkNhbm5vdCBjb252ZXJ0IC1JbmZpbml0eSB0byBGcmFjdGlvbi4iLAorICAgICAgICAgICAgT3ZlcmZsb3dFcnJvciwgIkNhbm5vdCBjb252ZXJ0IC1JbmZpbml0eSB0byBGcmFjdGlvbi4iLAogICAgICAgICAgICAgRi5mcm9tX2RlY2ltYWwsIERlY2ltYWwoIi1pbmYiKSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNNZXNzYWdlKAotICAgICAgICAgICAgVHlwZUVycm9yLCAiQ2Fubm90IGNvbnZlcnQgTmFOIHRvIEZyYWN0aW9uLiIsCisgICAgICAgICAgICBWYWx1ZUVycm9yLCAiQ2Fubm90IGNvbnZlcnQgTmFOIHRvIEZyYWN0aW9uLiIsCiAgICAgICAgICAgICBGLmZyb21fZGVjaW1hbCwgRGVjaW1hbCgibmFuIikpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzTWVzc2FnZSgKLSAgICAgICAgICAgIFR5cGVFcnJvciwgIkNhbm5vdCBjb252ZXJ0IHNOYU4gdG8gRnJhY3Rpb24uIiwKKyAgICAgICAgICAgIFZhbHVlRXJyb3IsICJDYW5ub3QgY29udmVydCBzTmFOIHRvIEZyYWN0aW9uLiIsCiAgICAgICAgICAgICBGLmZyb21fZGVjaW1hbCwgRGVjaW1hbCgic25hbiIpKQogCiAgICAgZGVmIHRlc3RMaW1pdERlbm9taW5hdG9yKHNlbGYpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9mcmFtZS5weSBiL0xpYi90ZXN0L3Rlc3RfZnJhbWUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQwMmVjMwotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfZnJhbWUucHkKQEAgLTAsMCArMSwxNjggQEAKK2ltcG9ydCBnYworaW1wb3J0IHN5cworaW1wb3J0IHR5cGVzCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB3ZWFrcmVmCisKK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAorCisKK2NsYXNzIENsZWFyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiCisgICAgVGVzdHMgZm9yIGZyYW1lLmNsZWFyKCkuCisgICAgIiIiCisKKyAgICBkZWYgaW5uZXIoc2VsZiwgeD01LCAqKmt3YXJncyk6CisgICAgICAgIDEvMAorCisgICAgZGVmIG91dGVyKHNlbGYsICoqa3dhcmdzKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5pbm5lcigqKmt3YXJncykKKyAgICAgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yIGFzIGU6CisgICAgICAgICAgICBleGMgPSBlCisgICAgICAgIHJldHVybiBleGMKKworICAgIGRlZiBjbGVhcl90cmFjZWJhY2tfZnJhbWVzKHNlbGYsIHRiKToKKyAgICAgICAgIiIiCisgICAgICAgIENsZWFyIGFsbCBmcmFtZXMgaW4gYSB0cmFjZWJhY2suCisgICAgICAgICIiIgorICAgICAgICB3aGlsZSB0YiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHRiLnRiX2ZyYW1lLmNsZWFyKCkKKyAgICAgICAgICAgIHRiID0gdGIudGJfbmV4dAorCisgICAgZGVmIHRlc3RfY2xlYXJfbG9jYWxzKHNlbGYpOgorICAgICAgICBjbGFzcyBDOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjID0gQygpCisgICAgICAgIHdyID0gd2Vha3JlZi5yZWYoYykKKyAgICAgICAgZXhjID0gc2VsZi5vdXRlcihjPWMpCisgICAgICAgIGRlbCBjCisgICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCisgICAgICAgICMgQSByZWZlcmVuY2UgdG8gYyBpcyBoZWxkIHRocm91Z2ggdGhlIGZyYW1lcworICAgICAgICBzZWxmLmFzc2VydElzTm90KE5vbmUsIHdyKCkpCisgICAgICAgIHNlbGYuY2xlYXJfdHJhY2ViYWNrX2ZyYW1lcyhleGMuX190cmFjZWJhY2tfXykKKyAgICAgICAgc3VwcG9ydC5nY19jb2xsZWN0KCkKKyAgICAgICAgIyBUaGUgcmVmZXJlbmNlIHdhcyByZWxlYXNlZCBieSAuY2xlYXIoKQorICAgICAgICBzZWxmLmFzc2VydElzKE5vbmUsIHdyKCkpCisKKyAgICBkZWYgdGVzdF9jbGVhcl9nZW5lcmF0b3Ioc2VsZik6CisgICAgICAgIGVuZGx5ID0gRmFsc2UKKyAgICAgICAgZGVmIGcoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIGVuZGx5CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgeWllbGQKKyAgICAgICAgICAgICAgICBpbm5lcigpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIGVuZGx5ID0gVHJ1ZQorICAgICAgICBnZW4gPSBnKCkKKyAgICAgICAgbmV4dChnZW4pCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZW5kbHkpCisgICAgICAgICMgQ2xlYXJpbmcgdGhlIGZyYW1lIGNsb3NlcyB0aGUgZ2VuZXJhdG9yCisgICAgICAgIGdlbi5naV9mcmFtZS5jbGVhcigpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlbmRseSkKKworICAgIGRlZiB0ZXN0X2NsZWFyX2V4ZWN1dGluZyhzZWxmKToKKyAgICAgICAgIyBBdHRlbXB0aW5nIHRvIGNsZWFyIGFuIGV4ZWN1dGluZyBmcmFtZSBpcyBmb3JiaWRkZW4uCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIDEvMAorICAgICAgICBleGNlcHQgWmVyb0RpdmlzaW9uRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGYgPSBlLl9fdHJhY2ViYWNrX18udGJfZnJhbWUKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IpOgorICAgICAgICAgICAgZi5jbGVhcigpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yKToKKyAgICAgICAgICAgIGYuZl9iYWNrLmNsZWFyKCkKKworICAgIGRlZiB0ZXN0X2NsZWFyX2V4ZWN1dGluZ19nZW5lcmF0b3Ioc2VsZik6CisgICAgICAgICMgQXR0ZW1wdGluZyB0byBjbGVhciBhbiBleGVjdXRpbmcgZ2VuZXJhdG9yIGZyYW1lIGlzIGZvcmJpZGRlbi4KKyAgICAgICAgZW5kbHkgPSBGYWxzZQorICAgICAgICBkZWYgZygpOgorICAgICAgICAgICAgbm9ubG9jYWwgZW5kbHkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAxLzAKKyAgICAgICAgICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIGYgPSBlLl9fdHJhY2ViYWNrX18udGJfZnJhbWUKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvcik6CisgICAgICAgICAgICAgICAgICAgIGYuY2xlYXIoKQorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yKToKKyAgICAgICAgICAgICAgICAgICAgZi5mX2JhY2suY2xlYXIoKQorICAgICAgICAgICAgICAgIHlpZWxkIGYKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgZW5kbHkgPSBUcnVlCisgICAgICAgIGdlbiA9IGcoKQorICAgICAgICBmID0gbmV4dChnZW4pCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZW5kbHkpCisgICAgICAgICMgQ2xlYXJpbmcgdGhlIGZyYW1lIGNsb3NlcyB0aGUgZ2VuZXJhdG9yCisgICAgICAgIGYuY2xlYXIoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZW5kbHkpCisKKyAgICBAc3VwcG9ydC5jcHl0aG9uX29ubHkKKyAgICBkZWYgdGVzdF9jbGVhcl9yZWZjeWNsZXMoc2VsZik6CisgICAgICAgICMgLmNsZWFyKCkgZG9lc24ndCBsZWF2ZSBhbnkgcmVmY3ljbGUgYmVoaW5kCisgICAgICAgIHdpdGggc3VwcG9ydC5kaXNhYmxlX2djKCk6CisgICAgICAgICAgICBjbGFzcyBDOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGMgPSBDKCkKKyAgICAgICAgICAgIHdyID0gd2Vha3JlZi5yZWYoYykKKyAgICAgICAgICAgIGV4YyA9IHNlbGYub3V0ZXIoYz1jKQorICAgICAgICAgICAgZGVsIGMKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QoTm9uZSwgd3IoKSkKKyAgICAgICAgICAgIHNlbGYuY2xlYXJfdHJhY2ViYWNrX2ZyYW1lcyhleGMuX190cmFjZWJhY2tfXykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoTm9uZSwgd3IoKSkKKworCitjbGFzcyBGcmFtZUxvY2Fsc1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIgorICAgIFRlc3RzIGZvciB0aGUgLmZfbG9jYWxzIGF0dHJpYnV0ZS4KKyAgICAiIiIKKworICAgIGRlZiBtYWtlX2ZyYW1lcyhzZWxmKToKKyAgICAgICAgZGVmIG91dGVyKCk6CisgICAgICAgICAgICB4ID0gNQorICAgICAgICAgICAgeSA9IDYKKyAgICAgICAgICAgIGRlZiBpbm5lcigpOgorICAgICAgICAgICAgICAgIHogPSB4ICsgMgorICAgICAgICAgICAgICAgIDEvMAorICAgICAgICAgICAgICAgIHQgPSA5CisgICAgICAgICAgICByZXR1cm4gaW5uZXIoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBvdXRlcigpCisgICAgICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvciBhcyBlOgorICAgICAgICAgICAgdGIgPSBlLl9fdHJhY2ViYWNrX18KKyAgICAgICAgICAgIGZyYW1lcyA9IFtdCisgICAgICAgICAgICB3aGlsZSB0YjoKKyAgICAgICAgICAgICAgICBmcmFtZXMuYXBwZW5kKHRiLnRiX2ZyYW1lKQorICAgICAgICAgICAgICAgIHRiID0gdGIudGJfbmV4dAorICAgICAgICByZXR1cm4gZnJhbWVzCisKKyAgICBkZWYgdGVzdF9sb2NhbHMoc2VsZik6CisgICAgICAgIGYsIG91dGVyLCBpbm5lciA9IHNlbGYubWFrZV9mcmFtZXMoKQorICAgICAgICBvdXRlcl9sb2NhbHMgPSBvdXRlci5mX2xvY2FscworICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uob3V0ZXJfbG9jYWxzLnBvcCgnaW5uZXInKSwgdHlwZXMuRnVuY3Rpb25UeXBlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dGVyX2xvY2Fscywgeyd4JzogNSwgJ3knOiA2fSkKKyAgICAgICAgaW5uZXJfbG9jYWxzID0gaW5uZXIuZl9sb2NhbHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbm5lcl9sb2NhbHMsIHsneCc6IDUsICd6JzogN30pCisKKyAgICBkZWYgdGVzdF9jbGVhcl9sb2NhbHMoc2VsZik6CisgICAgICAgICMgVGVzdCBmX2xvY2FscyBhZnRlciBjbGVhcigpIChpc3N1ZSAjMjE4OTcpCisgICAgICAgIGYsIG91dGVyLCBpbm5lciA9IHNlbGYubWFrZV9mcmFtZXMoKQorICAgICAgICBvdXRlci5jbGVhcigpCisgICAgICAgIGlubmVyLmNsZWFyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXRlci5mX2xvY2Fscywge30pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5uZXIuZl9sb2NhbHMsIHt9KQorCisgICAgZGVmIHRlc3RfbG9jYWxzX2NsZWFyX2xvY2FscyhzZWxmKToKKyAgICAgICAgIyBUZXN0IGZfbG9jYWxzIGJlZm9yZSBhbmQgYWZ0ZXIgY2xlYXIoKSAodG8gZXhlcmNpc2UgY2FjaGluZykKKyAgICAgICAgZiwgb3V0ZXIsIGlubmVyID0gc2VsZi5tYWtlX2ZyYW1lcygpCisgICAgICAgIG91dGVyLmZfbG9jYWxzCisgICAgICAgIGlubmVyLmZfbG9jYWxzCisgICAgICAgIG91dGVyLmNsZWFyKCkKKyAgICAgICAgaW5uZXIuY2xlYXIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dGVyLmZfbG9jYWxzLCB7fSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbm5lci5mX2xvY2Fscywge30pCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KF9fbmFtZV9fKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2Zyb3plbi5weSBiL0xpYi90ZXN0L3Rlc3RfZnJvemVuLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZDY3NjFjLi4wMDAwMDAwCi0tLSBhL0xpYi90ZXN0L3Rlc3RfZnJvemVuLnB5CisrKyAvZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAotIyBUZXN0IHRoZSBmcm96ZW4gbW9kdWxlIGRlZmluZWQgaW4gZnJvemVuLmMuCi0KLWZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBjYXB0dXJlZF9zdGRvdXQsIHJ1bl91bml0dGVzdAotaW1wb3J0IHVuaXR0ZXN0Ci1pbXBvcnQgc3lzCi0KLWNsYXNzIEZyb3plblRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICAgIG1vZHVsZV9hdHRycyA9IGZyb3plbnNldChbJ19fYnVpbHRpbnNfXycsICdfX2NhY2hlZF9fJywgJ19fZG9jX18nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fbG9hZGVyX18nLCAnX19uYW1lX18nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fcGFja2FnZV9fJ10pCi0gICAgcGFja2FnZV9hdHRycyA9IGZyb3plbnNldChsaXN0KG1vZHVsZV9hdHRycykgKyBbJ19fcGF0aF9fJ10pCi0KLSAgICBkZWYgdGVzdF9mcm96ZW4oc2VsZik6Ci0gICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgc3Rkb3V0OgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGltcG9ydCBfX2hlbGxvX18KLSAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvciBhcyB4OgotICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiaW1wb3J0IF9faGVsbG9fXyBmYWlsZWQ6IiArIHN0cih4KSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX19oZWxsb19fLmluaXRpYWxpemVkLCBUcnVlKQotICAgICAgICAgICAgZXhwZWN0ID0gc2V0KHNlbGYubW9kdWxlX2F0dHJzKQotICAgICAgICAgICAgZXhwZWN0LmFkZCgnaW5pdGlhbGl6ZWQnKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQoZGlyKF9faGVsbG9fXykpLCBleHBlY3QpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dC5nZXR2YWx1ZSgpLCAnSGVsbG8gd29ybGQhXG4nKQotCi0gICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgc3Rkb3V0OgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGltcG9ydCBfX3BoZWxsb19fCi0gICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3IgYXMgeDoKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWwoImltcG9ydCBfX3BoZWxsb19fIGZhaWxlZDoiICsgc3RyKHgpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfX3BoZWxsb19fLmluaXRpYWxpemVkLCBUcnVlKQotICAgICAgICAgICAgZXhwZWN0ID0gc2V0KHNlbGYucGFja2FnZV9hdHRycykKLSAgICAgICAgICAgIGV4cGVjdC5hZGQoJ2luaXRpYWxpemVkJykKLSAgICAgICAgICAgIGlmIG5vdCAiX19waGVsbG9fXy5zcGFtIiBpbiBzeXMubW9kdWxlczoKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChkaXIoX19waGVsbG9fXykpLCBleHBlY3QpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGV4cGVjdC5hZGQoJ3NwYW0nKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KGRpcihfX3BoZWxsb19fKSksIGV4cGVjdCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX19waGVsbG9fXy5fX3BhdGhfXywgW19fcGhlbGxvX18uX19uYW1lX19dKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQuZ2V0dmFsdWUoKSwgJ0hlbGxvIHdvcmxkIVxuJykKLQotICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpIGFzIHN0ZG91dDoKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBpbXBvcnQgX19waGVsbG9fXy5zcGFtCi0gICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3IgYXMgeDoKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWwoImltcG9ydCBfX3BoZWxsb19fLnNwYW0gZmFpbGVkOiIgKyBzdHIoeCkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF9fcGhlbGxvX18uc3BhbS5pbml0aWFsaXplZCwgVHJ1ZSkKLSAgICAgICAgICAgIHNwYW1fZXhwZWN0ID0gc2V0KHNlbGYubW9kdWxlX2F0dHJzKQotICAgICAgICAgICAgc3BhbV9leHBlY3QuYWRkKCdpbml0aWFsaXplZCcpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChkaXIoX19waGVsbG9fXy5zcGFtKSksIHNwYW1fZXhwZWN0KQotICAgICAgICAgICAgcGhlbGxvX2V4cGVjdCA9IHNldChzZWxmLnBhY2thZ2VfYXR0cnMpCi0gICAgICAgICAgICBwaGVsbG9fZXhwZWN0LmFkZCgnaW5pdGlhbGl6ZWQnKQotICAgICAgICAgICAgcGhlbGxvX2V4cGVjdC5hZGQoJ3NwYW0nKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQoZGlyKF9fcGhlbGxvX18pKSwgcGhlbGxvX2V4cGVjdCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LmdldHZhbHVlKCksICdIZWxsbyB3b3JsZCFcbicpCi0KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgaW1wb3J0IF9fcGhlbGxvX18uZm9vCi0gICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiaW1wb3J0IF9fcGhlbGxvX18uZm9vIHNob3VsZCBoYXZlIGZhaWxlZCIpCi0KLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBpbXBvcnQgX19waGVsbG9fXy5mb28KLSAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiaW1wb3J0IF9fcGhlbGxvX18uZm9vIHNob3VsZCBoYXZlIGZhaWxlZCIpCi0KLSAgICAgICAgZGVsIHN5cy5tb2R1bGVzWydfX2hlbGxvX18nXQotICAgICAgICBkZWwgc3lzLm1vZHVsZXNbJ19fcGhlbGxvX18nXQotICAgICAgICBkZWwgc3lzLm1vZHVsZXNbJ19fcGhlbGxvX18uc3BhbSddCi0KLWRlZiB0ZXN0X21haW4oKToKLSAgICBydW5fdW5pdHRlc3QoRnJvemVuVGVzdHMpCi0KLWlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZnRwbGliLnB5IGIvTGliL3Rlc3QvdGVzdF9mdHBsaWIucHkKaW5kZXggNmM5NWM0OS4uZDNiZTdkNiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9mdHBsaWIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9mdHBsaWIucHkKQEAgLTIxLDYgKzIxLDcgQEAKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBIT1NULCBIT1NUdjYKIHRocmVhZGluZyA9IHN1cHBvcnQuaW1wb3J0X21vZHVsZSgndGhyZWFkaW5nJykKIAorVElNRU9VVCA9IDMKICMgdGhlIGR1bW15IGRhdGEgcmV0dXJuZWQgYnkgc2VydmVyIG92ZXIgdGhlIGRhdGEgY2hhbm5lbCB3aGVuCiAjIFJFVFIsIExJU1QsIE5MU1QsIE1MU0QgY29tbWFuZHMgYXJlIGlzc3VlZAogUkVUUl9EQVRBID0gJ2FiY2RlMTIzNDVcclxuJyAqIDEwMDAKQEAgLTEyNiw3ICsxMjcsNyBAQAogICAgICAgICBhZGRyID0gbGlzdChtYXAoaW50LCBhcmcuc3BsaXQoJywnKSkpCiAgICAgICAgIGlwID0gJyVkLiVkLiVkLiVkJyAldHVwbGUoYWRkcls6NF0pCiAgICAgICAgIHBvcnQgPSAoYWRkcls0XSAqIDI1NikgKyBhZGRyWzVdCi0gICAgICAgIHMgPSBzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb24oKGlwLCBwb3J0KSwgdGltZW91dD0yKQorICAgICAgICBzID0gc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uKChpcCwgcG9ydCksIHRpbWVvdXQ9VElNRU9VVCkKICAgICAgICAgc2VsZi5kdHAgPSBzZWxmLmR0cF9oYW5kbGVyKHMsIGJhc2VjbGFzcz1zZWxmKQogICAgICAgICBzZWxmLnB1c2goJzIwMCBhY3RpdmUgZGF0YSBjb25uZWN0aW9uIGVzdGFibGlzaGVkJykKIApAQCAtMTM0LDcgKzEzNSw3IEBACiAgICAgICAgIHdpdGggc29ja2V0LnNvY2tldCgpIGFzIHNvY2s6CiAgICAgICAgICAgICBzb2NrLmJpbmQoKHNlbGYuc29ja2V0LmdldHNvY2tuYW1lKClbMF0sIDApKQogICAgICAgICAgICAgc29jay5saXN0ZW4oNSkKLSAgICAgICAgICAgIHNvY2suc2V0dGltZW91dCgxMCkKKyAgICAgICAgICAgIHNvY2suc2V0dGltZW91dChUSU1FT1VUKQogICAgICAgICAgICAgaXAsIHBvcnQgPSBzb2NrLmdldHNvY2tuYW1lKClbOjJdCiAgICAgICAgICAgICBpcCA9IGlwLnJlcGxhY2UoJy4nLCAnLCcpOyBwMSA9IHBvcnQgLyAyNTY7IHAyID0gcG9ydCAlIDI1NgogICAgICAgICAgICAgc2VsZi5wdXNoKCcyMjcgZW50ZXJpbmcgcGFzc2l2ZSBtb2RlICglcywlZCwlZCknICUoaXAsIHAxLCBwMikpCkBAIC0xNDQsNyArMTQ1LDcgQEAKICAgICBkZWYgY21kX2VwcnQoc2VsZiwgYXJnKToKICAgICAgICAgYWYsIGlwLCBwb3J0ID0gYXJnLnNwbGl0KGFyZ1swXSlbMTotMV0KICAgICAgICAgcG9ydCA9IGludChwb3J0KQotICAgICAgICBzID0gc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uKChpcCwgcG9ydCksIHRpbWVvdXQ9MikKKyAgICAgICAgcyA9IHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbigoaXAsIHBvcnQpLCB0aW1lb3V0PVRJTUVPVVQpCiAgICAgICAgIHNlbGYuZHRwID0gc2VsZi5kdHBfaGFuZGxlcihzLCBiYXNlY2xhc3M9c2VsZikKICAgICAgICAgc2VsZi5wdXNoKCcyMDAgYWN0aXZlIGRhdGEgY29ubmVjdGlvbiBlc3RhYmxpc2hlZCcpCiAKQEAgLTE1Miw3ICsxNTMsNyBAQAogICAgICAgICB3aXRoIHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQ2KSBhcyBzb2NrOgogICAgICAgICAgICAgc29jay5iaW5kKChzZWxmLnNvY2tldC5nZXRzb2NrbmFtZSgpWzBdLCAwKSkKICAgICAgICAgICAgIHNvY2subGlzdGVuKDUpCi0gICAgICAgICAgICBzb2NrLnNldHRpbWVvdXQoMTApCisgICAgICAgICAgICBzb2NrLnNldHRpbWVvdXQoVElNRU9VVCkKICAgICAgICAgICAgIHBvcnQgPSBzb2NrLmdldHNvY2tuYW1lKClbMV0KICAgICAgICAgICAgIHNlbGYucHVzaCgnMjI5IGVudGVyaW5nIGV4dGVuZGVkIHBhc3NpdmUgbW9kZSAofHx8JWR8KScgJXBvcnQpCiAgICAgICAgICAgICBjb25uLCBhZGRyID0gc29jay5hY2NlcHQoKQpAQCAtMzAwLDcgKzMwMSw4IEBACiAKIGlmIHNzbCBpcyBub3QgTm9uZToKIAotICAgIENFUlRGSUxFID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICJrZXljZXJ0LnBlbSIpCisgICAgQ0VSVEZJTEUgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgImtleWNlcnQzLnBlbSIpCisgICAgQ0FGSUxFID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICJweWNhY2VydC5wZW0iKQogCiAgICAgY2xhc3MgU1NMQ29ubmVjdGlvbihhc3luY29yZS5kaXNwYXRjaGVyKToKICAgICAgICAgIiIiQW4gYXN5bmNvcmUuZGlzcGF0Y2hlciBzdWJjbGFzcyBzdXBwb3J0aW5nIFRMUy9TU0wuIiIiCkBAIC0zMjcsNyArMzI5LDcgQEAKICAgICAgICAgICAgICAgICBlbGlmIGVyci5hcmdzWzBdID09IHNzbC5TU0xfRVJST1JfRU9GOgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5oYW5kbGVfY2xvc2UoKQogICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIGVycjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKICAgICAgICAgICAgICAgICBpZiBlcnIuYXJnc1swXSA9PSBlcnJuby5FQ09OTkFCT1JURUQ6CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmhhbmRsZV9jbG9zZSgpCiAgICAgICAgICAgICBlbHNlOgpAQCAtMzQxLDcgKzM0Myw3IEBACiAgICAgICAgICAgICAgICAgaWYgZXJyLmFyZ3NbMF0gaW4gKHNzbC5TU0xfRVJST1JfV0FOVF9SRUFELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2wuU1NMX0VSUk9SX1dBTlRfV1JJVEUpOgogICAgICAgICAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgogICAgICAgICAgICAgICAgICMgQW55ICJzb2NrZXQgZXJyb3IiIGNvcnJlc3BvbmRzIHRvIGEgU1NMX0VSUk9SX1NZU0NBTEwgcmV0dXJuCiAgICAgICAgICAgICAgICAgIyBmcm9tIE9wZW5TU0wncyBTU0xfc2h1dGRvd24oKSwgY29ycmVzcG9uZGluZyB0byBhCiAgICAgICAgICAgICAgICAgIyBjbG9zZWQgc29ja2V0IGNvbmRpdGlvbi4gU2VlIGFsc286CkBAIC00NjAsNyArNDYyLDcgQEAKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIHNlbGYuc2VydmVyID0gRHVtbXlGVFBTZXJ2ZXIoKEhPU1QsIDApKQogICAgICAgICBzZWxmLnNlcnZlci5zdGFydCgpCi0gICAgICAgIHNlbGYuY2xpZW50ID0gZnRwbGliLkZUUCh0aW1lb3V0PTIpCisgICAgICAgIHNlbGYuY2xpZW50ID0gZnRwbGliLkZUUCh0aW1lb3V0PVRJTUVPVVQpCiAgICAgICAgIHNlbGYuY2xpZW50LmNvbm5lY3Qoc2VsZi5zZXJ2ZXIuaG9zdCwgc2VsZi5zZXJ2ZXIucG9ydCkKIAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKQEAgLTQ4OCw3ICs0OTAsNyBAQAogCiAgICAgZGVmIHRlc3RfYWxsX2Vycm9ycyhzZWxmKToKICAgICAgICAgZXhjZXB0aW9ucyA9IChmdHBsaWIuZXJyb3JfcmVwbHksIGZ0cGxpYi5lcnJvcl90ZW1wLCBmdHBsaWIuZXJyb3JfcGVybSwKLSAgICAgICAgICAgICAgICAgICAgICBmdHBsaWIuZXJyb3JfcHJvdG8sIGZ0cGxpYi5FcnJvciwgSU9FcnJvciwgRU9GRXJyb3IpCisgICAgICAgICAgICAgICAgICAgICAgZnRwbGliLmVycm9yX3Byb3RvLCBmdHBsaWIuRXJyb3IsIE9TRXJyb3IsIEVPRkVycm9yKQogICAgICAgICBmb3IgeCBpbiBleGNlcHRpb25zOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHJhaXNlIHgoJ2V4Y2VwdGlvbiBub3QgaW5jbHVkZWQgaW4gYWxsX2Vycm9ycyBzZXQnKQpAQCAtNjc4LDcgKzY4MCw3IEBACiAKICAgICBkZWYgdGVzdF9tYWtlcGFzdihzZWxmKToKICAgICAgICAgaG9zdCwgcG9ydCA9IHNlbGYuY2xpZW50Lm1ha2VwYXN2KCkKLSAgICAgICAgY29ubiA9IHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbigoaG9zdCwgcG9ydCksIDEwKQorICAgICAgICBjb25uID0gc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uKChob3N0LCBwb3J0KSwgdGltZW91dD1USU1FT1VUKQogICAgICAgICBjb25uLmNsb3NlKCkKICAgICAgICAgIyBJUHY0IGlzIGluIHVzZSwganVzdCBtYWtlIHN1cmUgc2VuZF9lcHN2IGhhcyBub3QgYmVlbiB1c2VkCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXJ2ZXIuaGFuZGxlcl9pbnN0YW5jZS5sYXN0X3JlY2VpdmVkX2NtZCwgJ3Bhc3YnKQpAQCAtNjkxLDEyICs2OTMsMTIgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzZWxmLmNsaWVudC5zZW5kY21kKCdub29wJykKLSAgICAgICAgICAgIGV4Y2VwdCAoc29ja2V0LmVycm9yLCBFT0ZFcnJvcik6CisgICAgICAgICAgICBleGNlcHQgKE9TRXJyb3IsIEVPRkVycm9yKToKICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgICAgIHJldHVybiBUcnVlCiAKICAgICAgICAgIyBiYXNlIHRlc3QKLSAgICAgICAgd2l0aCBmdHBsaWIuRlRQKHRpbWVvdXQ9MikgYXMgc2VsZi5jbGllbnQ6CisgICAgICAgIHdpdGggZnRwbGliLkZUUCh0aW1lb3V0PVRJTUVPVVQpIGFzIHNlbGYuY2xpZW50OgogICAgICAgICAgICAgc2VsZi5jbGllbnQuY29ubmVjdChzZWxmLnNlcnZlci5ob3N0LCBzZWxmLnNlcnZlci5wb3J0KQogICAgICAgICAgICAgc2VsZi5jbGllbnQuc2VuZGNtZCgnbm9vcCcpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNfY2xpZW50X2Nvbm5lY3RlZCgpKQpAQCAtNzA0LDcgKzcwNiw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNfY2xpZW50X2Nvbm5lY3RlZCgpKQogCiAgICAgICAgICMgUVVJVCBzZW50IGluc2lkZSB0aGUgd2l0aCBibG9jawotICAgICAgICB3aXRoIGZ0cGxpYi5GVFAodGltZW91dD0yKSBhcyBzZWxmLmNsaWVudDoKKyAgICAgICAgd2l0aCBmdHBsaWIuRlRQKHRpbWVvdXQ9VElNRU9VVCkgYXMgc2VsZi5jbGllbnQ6CiAgICAgICAgICAgICBzZWxmLmNsaWVudC5jb25uZWN0KHNlbGYuc2VydmVyLmhvc3QsIHNlbGYuc2VydmVyLnBvcnQpCiAgICAgICAgICAgICBzZWxmLmNsaWVudC5zZW5kY21kKCdub29wJykKICAgICAgICAgICAgIHNlbGYuY2xpZW50LnF1aXQoKQpAQCAtNzE0LDcgKzcxNiw3IEBACiAgICAgICAgICMgZm9yY2UgYSB3cm9uZyByZXNwb25zZSBjb2RlIHRvIGJlIHNlbnQgb24gUVVJVDogZXJyb3JfcGVybQogICAgICAgICAjIGlzIGV4cGVjdGVkIGFuZCB0aGUgY29ubmVjdGlvbiBpcyBzdXBwb3NlZCB0byBiZSBjbG9zZWQKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgd2l0aCBmdHBsaWIuRlRQKHRpbWVvdXQ9MikgYXMgc2VsZi5jbGllbnQ6CisgICAgICAgICAgICB3aXRoIGZ0cGxpYi5GVFAodGltZW91dD1USU1FT1VUKSBhcyBzZWxmLmNsaWVudDoKICAgICAgICAgICAgICAgICBzZWxmLmNsaWVudC5jb25uZWN0KHNlbGYuc2VydmVyLmhvc3QsIHNlbGYuc2VydmVyLnBvcnQpCiAgICAgICAgICAgICAgICAgc2VsZi5jbGllbnQuc2VuZGNtZCgnbm9vcCcpCiAgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXIuaGFuZGxlcl9pbnN0YW5jZS5uZXh0X3Jlc3BvbnNlID0gJzU1MCBlcnJvciBvbiBxdWl0JwpAQCAtNzM2LDcgKzczOCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZV9hZGRyZXNzPShIT1NULCBwb3J0KSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jbGllbnQuc29jay5nZXRzb2NrbmFtZSgpWzFdLCBwb3J0KQogICAgICAgICAgICAgc2VsZi5jbGllbnQucXVpdCgpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICBpZiBlLmVycm5vID09IGVycm5vLkVBRERSSU5VU0U6CiAgICAgICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiY291bGRuJ3QgYmluZCB0byBwb3J0ICVkIiAlIHBvcnQpCiAgICAgICAgICAgICByYWlzZQpAQCAtNzQ3LDcgKzc0OSw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHdpdGggc2VsZi5jbGllbnQudHJhbnNmZXJjbWQoJ2xpc3QnKSBhcyBzb2NrOgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29jay5nZXRzb2NrbmFtZSgpWzFdLCBwb3J0KQotICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FQUREUklOVVNFOgogICAgICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoImNvdWxkbid0IGJpbmQgdG8gcG9ydCAlZCIgJSBwb3J0KQogICAgICAgICAgICAgcmFpc2UKQEAgLTc4NSw3ICs3ODcsNyBAQAogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgc2VsZi5zZXJ2ZXIgPSBEdW1teUZUUFNlcnZlcigoSE9TVHY2LCAwKSwgYWY9c29ja2V0LkFGX0lORVQ2KQogICAgICAgICBzZWxmLnNlcnZlci5zdGFydCgpCi0gICAgICAgIHNlbGYuY2xpZW50ID0gZnRwbGliLkZUUCgpCisgICAgICAgIHNlbGYuY2xpZW50ID0gZnRwbGliLkZUUCh0aW1lb3V0PVRJTUVPVVQpCiAgICAgICAgIHNlbGYuY2xpZW50LmNvbm5lY3Qoc2VsZi5zZXJ2ZXIuaG9zdCwgc2VsZi5zZXJ2ZXIucG9ydCkKIAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKQEAgLTgwMiw3ICs4MDQsNyBAQAogCiAgICAgZGVmIHRlc3RfbWFrZXBhc3Yoc2VsZik6CiAgICAgICAgIGhvc3QsIHBvcnQgPSBzZWxmLmNsaWVudC5tYWtlcGFzdigpCi0gICAgICAgIGNvbm4gPSBzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb24oKGhvc3QsIHBvcnQpLCAxMCkKKyAgICAgICAgY29ubiA9IHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbigoaG9zdCwgcG9ydCksIHRpbWVvdXQ9VElNRU9VVCkKICAgICAgICAgY29ubi5jbG9zZSgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXJ2ZXIuaGFuZGxlcl9pbnN0YW5jZS5sYXN0X3JlY2VpdmVkX2NtZCwgJ2Vwc3YnKQogCkBAIC04MjksNyArODMxLDcgQEAKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIHNlbGYuc2VydmVyID0gRHVtbXlUTFNfRlRQU2VydmVyKChIT1NULCAwKSkKICAgICAgICAgc2VsZi5zZXJ2ZXIuc3RhcnQoKQotICAgICAgICBzZWxmLmNsaWVudCA9IGZ0cGxpYi5GVFBfVExTKHRpbWVvdXQ9MikKKyAgICAgICAgc2VsZi5jbGllbnQgPSBmdHBsaWIuRlRQX1RMUyh0aW1lb3V0PVRJTUVPVVQpCiAgICAgICAgIHNlbGYuY2xpZW50LmNvbm5lY3Qoc2VsZi5zZXJ2ZXIuaG9zdCwgc2VsZi5zZXJ2ZXIucG9ydCkKICAgICAgICAgIyBlbmFibGUgVExTCiAgICAgICAgIHNlbGYuY2xpZW50LmF1dGgoKQpAQCAtODQzLDcgKzg0NSw3IEBACiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBzZWxmLnNlcnZlciA9IER1bW15VExTX0ZUUFNlcnZlcigoSE9TVCwgMCkpCiAgICAgICAgIHNlbGYuc2VydmVyLnN0YXJ0KCkKLSAgICAgICAgc2VsZi5jbGllbnQgPSBmdHBsaWIuRlRQX1RMUyh0aW1lb3V0PTIpCisgICAgICAgIHNlbGYuY2xpZW50ID0gZnRwbGliLkZUUF9UTFModGltZW91dD1USU1FT1VUKQogICAgICAgICBzZWxmLmNsaWVudC5jb25uZWN0KHNlbGYuc2VydmVyLmhvc3QsIHNlbGYuc2VydmVyLnBvcnQpCiAKICAgICBkZWYgdGVhckRvd24oc2VsZik6CkBAIC04ODcsNyArODg5LDcgQEAKIAogICAgIGRlZiB0ZXN0X2F1dGhfc3NsKHNlbGYpOgogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmLmNsaWVudC5zc2xfdmVyc2lvbiA9IHNzbC5QUk9UT0NPTF9TU0x2MworICAgICAgICAgICAgc2VsZi5jbGllbnQuc3NsX3ZlcnNpb24gPSBzc2wuUFJPVE9DT0xfU1NMdjIzCiAgICAgICAgICAgICBzZWxmLmNsaWVudC5hdXRoKCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYuY2xpZW50LmF1dGgpCiAgICAgICAgIGZpbmFsbHk6CkBAIC05MDMsNyArOTA1LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZnRwbGliLkZUUF9UTFMsIGNlcnRmaWxlPUNFUlRGSUxFLAogICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlmaWxlPUNFUlRGSUxFLCBjb250ZXh0PWN0eCkKIAotICAgICAgICBzZWxmLmNsaWVudCA9IGZ0cGxpYi5GVFBfVExTKGNvbnRleHQ9Y3R4LCB0aW1lb3V0PTIpCisgICAgICAgIHNlbGYuY2xpZW50ID0gZnRwbGliLkZUUF9UTFMoY29udGV4dD1jdHgsIHRpbWVvdXQ9VElNRU9VVCkKICAgICAgICAgc2VsZi5jbGllbnQuY29ubmVjdChzZWxmLnNlcnZlci5ob3N0LCBzZWxmLnNlcnZlci5wb3J0KQogICAgICAgICBzZWxmLmFzc2VydE5vdElzSW5zdGFuY2Uoc2VsZi5jbGllbnQuc29jaywgc3NsLlNTTFNvY2tldCkKICAgICAgICAgc2VsZi5jbGllbnQuYXV0aCgpCkBAIC05MjIsNiArOTI0LDM2IEBACiAgICAgICAgIHNlbGYuY2xpZW50LmNjYygpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYuY2xpZW50LnNvY2sudW53cmFwKQogCisgICAgZGVmIHRlc3RfY2hlY2tfaG9zdG5hbWUoc2VsZik6CisgICAgICAgIHNlbGYuY2xpZW50LnF1aXQoKQorICAgICAgICBjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgIGN0eC52ZXJpZnlfbW9kZSA9IHNzbC5DRVJUX1JFUVVJUkVECisgICAgICAgIGN0eC5jaGVja19ob3N0bmFtZSA9IFRydWUKKyAgICAgICAgY3R4LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhDQUZJTEUpCisgICAgICAgIHNlbGYuY2xpZW50ID0gZnRwbGliLkZUUF9UTFMoY29udGV4dD1jdHgsIHRpbWVvdXQ9VElNRU9VVCkKKworICAgICAgICAjIDEyNy4wLjAuMSBkb2Vzbid0IG1hdGNoIFNBTgorICAgICAgICBzZWxmLmNsaWVudC5jb25uZWN0KHNlbGYuc2VydmVyLmhvc3QsIHNlbGYuc2VydmVyLnBvcnQpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc3NsLkNlcnRpZmljYXRlRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5jbGllbnQuYXV0aCgpCisgICAgICAgICMgZXhjZXB0aW9uIHF1aXRzIGNvbm5lY3Rpb24KKworICAgICAgICBzZWxmLmNsaWVudC5jb25uZWN0KHNlbGYuc2VydmVyLmhvc3QsIHNlbGYuc2VydmVyLnBvcnQpCisgICAgICAgIHNlbGYuY2xpZW50LnByb3RfcCgpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc3NsLkNlcnRpZmljYXRlRXJyb3IpOgorICAgICAgICAgICAgd2l0aCBzZWxmLmNsaWVudC50cmFuc2ZlcmNtZCgibGlzdCIpIGFzIHNvY2s6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmNsaWVudC5xdWl0KCkKKworICAgICAgICBzZWxmLmNsaWVudC5jb25uZWN0KCJsb2NhbGhvc3QiLCBzZWxmLnNlcnZlci5wb3J0KQorICAgICAgICBzZWxmLmNsaWVudC5hdXRoKCkKKyAgICAgICAgc2VsZi5jbGllbnQucXVpdCgpCisKKyAgICAgICAgc2VsZi5jbGllbnQuY29ubmVjdCgibG9jYWxob3N0Iiwgc2VsZi5zZXJ2ZXIucG9ydCkKKyAgICAgICAgc2VsZi5jbGllbnQucHJvdF9wKCkKKyAgICAgICAgd2l0aCBzZWxmLmNsaWVudC50cmFuc2ZlcmNtZCgibGlzdCIpIGFzIHNvY2s6CisgICAgICAgICAgICBwYXNzCisKIAogY2xhc3MgVGVzdFRpbWVvdXRzKFRlc3RDYXNlKToKIApAQCAtMTAxNyw4ICsxMDQ5LDE5IEBACiAgICAgICAgIGZ0cC5jbG9zZSgpCiAKIAorY2xhc3MgVGVzdE5ldHJjRGVwcmVjYXRpb24oVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfZGVwcmVjYXRpb24oc2VsZik6CisgICAgICAgIHdpdGggc3VwcG9ydC50ZW1wX2N3ZCgpLCBzdXBwb3J0LkVudmlyb25tZW50VmFyR3VhcmQoKSBhcyBlbnY6CisgICAgICAgICAgICBlbnZbJ0hPTUUnXSA9IG9zLmdldGN3ZCgpCisgICAgICAgICAgICBvcGVuKCcubmV0cmMnLCAndycpLmNsb3NlKCkKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgorICAgICAgICAgICAgICAgIGZ0cGxpYi5OZXRyYygpCisKKworCiBkZWYgdGVzdF9tYWluKCk6Ci0gICAgdGVzdHMgPSBbVGVzdEZUUENsYXNzLCBUZXN0VGltZW91dHMsCisgICAgdGVzdHMgPSBbVGVzdEZUUENsYXNzLCBUZXN0VGltZW91dHMsIFRlc3ROZXRyY0RlcHJlY2F0aW9uLAogICAgICAgICAgICAgIFRlc3RJUHY2RW52aXJvbm1lbnQsCiAgICAgICAgICAgICAgVGVzdFRMU19GVFBDbGFzc01peGluLCBUZXN0VExTX0ZUUENsYXNzXQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2Z1bmNhdHRycy5weSBiL0xpYi90ZXN0L3Rlc3RfZnVuY2F0dHJzLnB5CmluZGV4IGM4ZWQ4MzAuLjUwOTRmN2IgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZnVuY2F0dHJzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZnVuY2F0dHJzLnB5CkBAIC03LDYgKzcsMTEgQEAKICAgICBkZWYgaW5uZXJfZnVuY3Rpb24oKToKICAgICAgICAgY2xhc3MgTG9jYWxDbGFzczoKICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZ2xvYmFsIGlubmVyX2dsb2JhbF9mdW5jdGlvbgorICAgICAgICBkZWYgaW5uZXJfZ2xvYmFsX2Z1bmN0aW9uKCk6CisgICAgICAgICAgICBkZWYgaW5uZXJfZnVuY3Rpb24yKCk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgcmV0dXJuIGlubmVyX2Z1bmN0aW9uMgogICAgICAgICByZXR1cm4gTG9jYWxDbGFzcwogICAgIHJldHVybiBsYW1iZGE6IGlubmVyX2Z1bmN0aW9uCiAKQEAgLTExNiw2ICsxMjEsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICdnbG9iYWxfZnVuY3Rpb24uPGxvY2Fscz4uaW5uZXJfZnVuY3Rpb24nKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdsb2JhbF9mdW5jdGlvbigpKCkoKS5fX3F1YWxuYW1lX18sCiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2dsb2JhbF9mdW5jdGlvbi48bG9jYWxzPi5pbm5lcl9mdW5jdGlvbi48bG9jYWxzPi5Mb2NhbENsYXNzJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbm5lcl9nbG9iYWxfZnVuY3Rpb24uX19xdWFsbmFtZV9fLCAnaW5uZXJfZ2xvYmFsX2Z1bmN0aW9uJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbm5lcl9nbG9iYWxfZnVuY3Rpb24oKS5fX3F1YWxuYW1lX18sICdpbm5lcl9nbG9iYWxfZnVuY3Rpb24uPGxvY2Fscz4uaW5uZXJfZnVuY3Rpb24yJykKICAgICAgICAgc2VsZi5iLl9fcXVhbG5hbWVfXyA9ICdjJwogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYi5fX3F1YWxuYW1lX18sICdjJykKICAgICAgICAgc2VsZi5iLl9fcXVhbG5hbWVfXyA9ICdkJwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9mdW5jdG9vbHMucHkgYi9MaWIvdGVzdC90ZXN0X2Z1bmN0b29scy5weQppbmRleCBkMWNlMmE5Li5jMGQyNGQ4YyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9mdW5jdG9vbHMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9mdW5jdG9vbHMucHkKQEAgLTEsNjYgKzEsNTIgQEAKLWltcG9ydCBmdW5jdG9vbHMKK2ltcG9ydCBhYmMKIGltcG9ydCBjb2xsZWN0aW9ucwotaW1wb3J0IHN5cwotaW1wb3J0IHVuaXR0ZXN0Ci1mcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKLWZyb20gd2Vha3JlZiBpbXBvcnQgcHJveHkKK2Zyb20gaXRlcnRvb2xzIGltcG9ydCBwZXJtdXRhdGlvbnMKIGltcG9ydCBwaWNrbGUKIGZyb20gcmFuZG9tIGltcG9ydCBjaG9pY2UKK2ltcG9ydCBzeXMKK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIHdlYWtyZWYgaW1wb3J0IHByb3h5CiAKLUBzdGF0aWNtZXRob2QKLWRlZiBQeXRob25QYXJ0aWFsKGZ1bmMsICphcmdzLCAqKmtleXdvcmRzKToKLSAgICAnUHVyZSBQeXRob24gYXBwcm94aW1hdGlvbiBvZiBwYXJ0aWFsKCknCi0gICAgZGVmIG5ld2Z1bmMoKmZhcmdzLCAqKmZrZXl3b3Jkcyk6Ci0gICAgICAgIG5ld2tleXdvcmRzID0ga2V5d29yZHMuY29weSgpCi0gICAgICAgIG5ld2tleXdvcmRzLnVwZGF0ZShma2V5d29yZHMpCi0gICAgICAgIHJldHVybiBmdW5jKCooYXJncyArIGZhcmdzKSwgKipuZXdrZXl3b3JkcykKLSAgICBuZXdmdW5jLmZ1bmMgPSBmdW5jCi0gICAgbmV3ZnVuYy5hcmdzID0gYXJncwotICAgIG5ld2Z1bmMua2V5d29yZHMgPSBrZXl3b3JkcwotICAgIHJldHVybiBuZXdmdW5jCitpbXBvcnQgZnVuY3Rvb2xzCisKK3B5X2Z1bmN0b29scyA9IHN1cHBvcnQuaW1wb3J0X2ZyZXNoX21vZHVsZSgnZnVuY3Rvb2xzJywgYmxvY2tlZD1bJ19mdW5jdG9vbHMnXSkKK2NfZnVuY3Rvb2xzID0gc3VwcG9ydC5pbXBvcnRfZnJlc2hfbW9kdWxlKCdmdW5jdG9vbHMnLCBmcmVzaD1bJ19mdW5jdG9vbHMnXSkKKworZGVjaW1hbCA9IHN1cHBvcnQuaW1wb3J0X2ZyZXNoX21vZHVsZSgnZGVjaW1hbCcsIGZyZXNoPVsnX2RlY2ltYWwnXSkKKwogCiBkZWYgY2FwdHVyZSgqYXJncywgKiprdyk6CiAgICAgIiIiY2FwdHVyZSBhbGwgcG9zaXRpb25hbCBhbmQga2V5d29yZCBhcmd1bWVudHMiIiIKICAgICByZXR1cm4gYXJncywga3cKIAorCiBkZWYgc2lnbmF0dXJlKHBhcnQpOgogICAgICIiIiByZXR1cm4gdGhlIHNpZ25hdHVyZSBvZiBhIHBhcnRpYWwgb2JqZWN0ICIiIgogICAgIHJldHVybiAocGFydC5mdW5jLCBwYXJ0LmFyZ3MsIHBhcnQua2V5d29yZHMsIHBhcnQuX19kaWN0X18pCiAKLWNsYXNzIFRlc3RQYXJ0aWFsKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAotICAgIHRoZXR5cGUgPSBmdW5jdG9vbHMucGFydGlhbAorY2xhc3MgVGVzdFBhcnRpYWw6CiAKICAgICBkZWYgdGVzdF9iYXNpY19leGFtcGxlcyhzZWxmKToKLSAgICAgICAgcCA9IHNlbGYudGhldHlwZShjYXB0dXJlLCAxLCAyLCBhPTEwLCBiPTIwKQorICAgICAgICBwID0gc2VsZi5wYXJ0aWFsKGNhcHR1cmUsIDEsIDIsIGE9MTAsIGI9MjApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjYWxsYWJsZShwKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwKDMsIDQsIGI9MzAsIGM9NDApLAogICAgICAgICAgICAgICAgICAgICAgICAgICgoMSwgMiwgMywgNCksIGRpY3QoYT0xMCwgYj0zMCwgYz00MCkpKQotICAgICAgICBwID0gc2VsZi50aGV0eXBlKG1hcCwgbGFtYmRhIHg6IHgqMTApCisgICAgICAgIHAgPSBzZWxmLnBhcnRpYWwobWFwLCBsYW1iZGEgeDogeCoxMCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHAoWzEsMiwzLDRdKSksIFsxMCwgMjAsIDMwLCA0MF0pCiAKICAgICBkZWYgdGVzdF9hdHRyaWJ1dGVzKHNlbGYpOgotICAgICAgICBwID0gc2VsZi50aGV0eXBlKGNhcHR1cmUsIDEsIDIsIGE9MTAsIGI9MjApCisgICAgICAgIHAgPSBzZWxmLnBhcnRpYWwoY2FwdHVyZSwgMSwgMiwgYT0xMCwgYj0yMCkKICAgICAgICAgIyBhdHRyaWJ1dGVzIHNob3VsZCBiZSByZWFkYWJsZQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuZnVuYywgY2FwdHVyZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmFyZ3MsICgxLCAyKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmtleXdvcmRzLCBkaWN0KGE9MTAsIGI9MjApKQotICAgICAgICAjIGF0dHJpYnV0ZXMgc2hvdWxkIG5vdCBiZSB3cml0YWJsZQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvciwgc2V0YXR0ciwgcCwgJ2Z1bmMnLCBtYXApCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yLCBzZXRhdHRyLCBwLCAnYXJncycsICgxLCAyKSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IsIHNldGF0dHIsIHAsICdrZXl3b3JkcycsIGRpY3QoYT0xLCBiPTIpKQotCi0gICAgICAgIHAgPSBzZWxmLnRoZXR5cGUoaGV4KQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBkZWwgcC5fX2RpY3RfXwotICAgICAgICBleGNlcHQgVHlwZUVycm9yOgotICAgICAgICAgICAgcGFzcwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5mYWlsKCdwYXJ0aWFsIG9iamVjdCBhbGxvd2VkIF9fZGljdF9fIHRvIGJlIGRlbGV0ZWQnKQogCiAgICAgZGVmIHRlc3RfYXJndW1lbnRfY2hlY2tpbmcoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi50aGV0eXBlKSAgICAgIyBuZWVkIGF0IGxlYXN0IGEgZnVuYyBhcmcKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnBhcnRpYWwpICAgICAjIG5lZWQgYXQgbGVhc3QgYSBmdW5jIGFyZwogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmLnRoZXR5cGUoMikoKQorICAgICAgICAgICAgc2VsZi5wYXJ0aWFsKDIpKCkKICAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgZWxzZToKQEAgLTcxLDcgKzU3LDcgQEAKICAgICAgICAgZGVmIGZ1bmMoYT0xMCwgYj0yMCk6CiAgICAgICAgICAgICByZXR1cm4gYQogICAgICAgICBkID0geydhJzozfQotICAgICAgICBwID0gc2VsZi50aGV0eXBlKGZ1bmMsIGE9NSkKKyAgICAgICAgcCA9IHNlbGYucGFydGlhbChmdW5jLCBhPTUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCgqKmQpLCAzKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIHsnYSc6M30pCiAgICAgICAgIHAoYj03KQpAQCAtODAsMjAgKzY2LDIyIEBACiAgICAgZGVmIHRlc3RfYXJnX2NvbWJpbmF0aW9ucyhzZWxmKToKICAgICAgICAgIyBleGVyY2lzZSBzcGVjaWFsIGNvZGUgcGF0aHMgZm9yIHplcm8gYXJncyBpbiBlaXRoZXIgcGFydGlhbAogICAgICAgICAjIG9iamVjdCBvciB0aGUgY2FsbGVyCi0gICAgICAgIHAgPSBzZWxmLnRoZXR5cGUoY2FwdHVyZSkKKyAgICAgICAgcCA9IHNlbGYucGFydGlhbChjYXB0dXJlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAoKSwgKCgpLCB7fSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCgxLDIpLCAoKDEsMiksIHt9KSkKLSAgICAgICAgcCA9IHNlbGYudGhldHlwZShjYXB0dXJlLCAxLCAyKQorICAgICAgICBwID0gc2VsZi5wYXJ0aWFsKGNhcHR1cmUsIDEsIDIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCgpLCAoKDEsMiksIHt9KSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwKDMsNCksICgoMSwyLDMsNCksIHt9KSkKIAogICAgIGRlZiB0ZXN0X2t3X2NvbWJpbmF0aW9ucyhzZWxmKToKICAgICAgICAgIyBleGVyY2lzZSBzcGVjaWFsIGNvZGUgcGF0aHMgZm9yIG5vIGtleXdvcmQgYXJncyBpbgogICAgICAgICAjIGVpdGhlciB0aGUgcGFydGlhbCBvYmplY3Qgb3IgdGhlIGNhbGxlcgotICAgICAgICBwID0gc2VsZi50aGV0eXBlKGNhcHR1cmUpCisgICAgICAgIHAgPSBzZWxmLnBhcnRpYWwoY2FwdHVyZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmtleXdvcmRzLCB7fSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwKCksICgoKSwge30pKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAoYT0xKSwgKCgpLCB7J2EnOjF9KSkKLSAgICAgICAgcCA9IHNlbGYudGhldHlwZShjYXB0dXJlLCBhPTEpCisgICAgICAgIHAgPSBzZWxmLnBhcnRpYWwoY2FwdHVyZSwgYT0xKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAua2V5d29yZHMsIHsnYSc6MX0pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCgpLCAoKCksIHsnYSc6MX0pKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAoYj0yKSwgKCgpLCB7J2EnOjEsICdiJzoyfSkpCiAgICAgICAgICMga2V5d29yZCBhcmdzIGluIHRoZSBjYWxsIG92ZXJyaWRlIHRob3NlIGluIHRoZSBwYXJ0aWFsIG9iamVjdApAQCAtMTAyLDcgKzkwLDcgQEAKICAgICBkZWYgdGVzdF9wb3NpdGlvbmFsKHNlbGYpOgogICAgICAgICAjIG1ha2Ugc3VyZSBwb3NpdGlvbmFsIGFyZ3VtZW50cyBhcmUgY2FwdHVyZWQgY29ycmVjdGx5CiAgICAgICAgIGZvciBhcmdzIGluIFsoKSwgKDAsKSwgKDAsMSksICgwLDEsMiksICgwLDEsMiwzKV06Ci0gICAgICAgICAgICBwID0gc2VsZi50aGV0eXBlKGNhcHR1cmUsICphcmdzKQorICAgICAgICAgICAgcCA9IHNlbGYucGFydGlhbChjYXB0dXJlLCAqYXJncykKICAgICAgICAgICAgIGV4cGVjdGVkID0gYXJncyArICgneCcsKQogICAgICAgICAgICAgZ290LCBlbXB0eSA9IHAoJ3gnKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGV4cGVjdGVkID09IGdvdCBhbmQgZW1wdHkgPT0ge30pCkBAIC0xMTAsMTQgKzk4LDE0IEBACiAgICAgZGVmIHRlc3Rfa2V5d29yZChzZWxmKToKICAgICAgICAgIyBtYWtlIHN1cmUga2V5d29yZCBhcmd1bWVudHMgYXJlIGNhcHR1cmVkIGNvcnJlY3RseQogICAgICAgICBmb3IgYSBpbiBbJ2EnLCAwLCBOb25lLCAzLjVdOgotICAgICAgICAgICAgcCA9IHNlbGYudGhldHlwZShjYXB0dXJlLCBhPWEpCisgICAgICAgICAgICBwID0gc2VsZi5wYXJ0aWFsKGNhcHR1cmUsIGE9YSkKICAgICAgICAgICAgIGV4cGVjdGVkID0geydhJzphLCd4JzpOb25lfQogICAgICAgICAgICAgZW1wdHksIGdvdCA9IHAoeD1Ob25lKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGV4cGVjdGVkID09IGdvdCBhbmQgZW1wdHkgPT0gKCkpCiAKICAgICBkZWYgdGVzdF9ub19zaWRlX2VmZmVjdHMoc2VsZik6CiAgICAgICAgICMgbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBzaWRlIGVmZmVjdHMgdGhhdCBhZmZlY3Qgc3Vic2VxdWVudCBjYWxscwotICAgICAgICBwID0gc2VsZi50aGV0eXBlKGNhcHR1cmUsIDAsIGE9MSkKKyAgICAgICAgcCA9IHNlbGYucGFydGlhbChjYXB0dXJlLCAwLCBhPTEpCiAgICAgICAgIGFyZ3MxLCBrdzEgPSBwKDEsIGI9MikKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFyZ3MxID09ICgwLDEpIGFuZCBrdzEgPT0geydhJzoxLCdiJzoyfSkKICAgICAgICAgYXJnczIsIGt3MiA9IHAoKQpAQCAtMTI2LDEzICsxMTQsMTMgQEAKICAgICBkZWYgdGVzdF9lcnJvcl9wcm9wYWdhdGlvbihzZWxmKToKICAgICAgICAgZGVmIGYoeCwgeSk6CiAgICAgICAgICAgICB4IC8geQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwgc2VsZi50aGV0eXBlKGYsIDEsIDApKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwgc2VsZi50aGV0eXBlKGYsIDEpLCAwKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwgc2VsZi50aGV0eXBlKGYpLCAxLCAwKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwgc2VsZi50aGV0eXBlKGYsIHk9MCksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBzZWxmLnBhcnRpYWwoZiwgMSwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBzZWxmLnBhcnRpYWwoZiwgMSksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBzZWxmLnBhcnRpYWwoZiksIDEsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBzZWxmLnBhcnRpYWwoZiwgeT0wKSwgMSkKIAogICAgIGRlZiB0ZXN0X3dlYWtyZWYoc2VsZik6Ci0gICAgICAgIGYgPSBzZWxmLnRoZXR5cGUoaW50LCBiYXNlPTE2KQorICAgICAgICBmID0gc2VsZi5wYXJ0aWFsKGludCwgYmFzZT0xNikKICAgICAgICAgcCA9IHByb3h5KGYpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5mdW5jLCBwLmZ1bmMpCiAgICAgICAgIGYgPSBOb25lCkBAIC0xNDAsNDIgKzEyOCw2NyBAQAogCiAgICAgZGVmIHRlc3Rfd2l0aF9ib3VuZF9hbmRfdW5ib3VuZF9tZXRob2RzKHNlbGYpOgogICAgICAgICBkYXRhID0gbGlzdChtYXAoc3RyLCByYW5nZSgxMCkpKQotICAgICAgICBqb2luID0gc2VsZi50aGV0eXBlKHN0ci5qb2luLCAnJykKKyAgICAgICAgam9pbiA9IHNlbGYucGFydGlhbChzdHIuam9pbiwgJycpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoam9pbihkYXRhKSwgJzAxMjM0NTY3ODknKQotICAgICAgICBqb2luID0gc2VsZi50aGV0eXBlKCcnLmpvaW4pCisgICAgICAgIGpvaW4gPSBzZWxmLnBhcnRpYWwoJycuam9pbikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChqb2luKGRhdGEpLCAnMDEyMzQ1Njc4OScpCiAKKworQHVuaXR0ZXN0LnNraXBVbmxlc3MoY19mdW5jdG9vbHMsICdyZXF1aXJlcyB0aGUgQyBfZnVuY3Rvb2xzIG1vZHVsZScpCitjbGFzcyBUZXN0UGFydGlhbEMoVGVzdFBhcnRpYWwsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBpZiBjX2Z1bmN0b29sczoKKyAgICAgICAgcGFydGlhbCA9IGNfZnVuY3Rvb2xzLnBhcnRpYWwKKworICAgIGRlZiB0ZXN0X2F0dHJpYnV0ZXNfdW53cml0YWJsZShzZWxmKToKKyAgICAgICAgIyBhdHRyaWJ1dGVzIHNob3VsZCBub3QgYmUgd3JpdGFibGUKKyAgICAgICAgcCA9IHNlbGYucGFydGlhbChjYXB0dXJlLCAxLCAyLCBhPTEwLCBiPTIwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvciwgc2V0YXR0ciwgcCwgJ2Z1bmMnLCBtYXApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yLCBzZXRhdHRyLCBwLCAnYXJncycsICgxLCAyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IsIHNldGF0dHIsIHAsICdrZXl3b3JkcycsIGRpY3QoYT0xLCBiPTIpKQorCisgICAgICAgIHAgPSBzZWxmLnBhcnRpYWwoaGV4KQorICAgICAgICB0cnk6CisgICAgICAgICAgICBkZWwgcC5fX2RpY3RfXworICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCdwYXJ0aWFsIG9iamVjdCBhbGxvd2VkIF9fZGljdF9fIHRvIGJlIGRlbGV0ZWQnKQorCiAgICAgZGVmIHRlc3RfcmVwcihzZWxmKToKICAgICAgICAgYXJncyA9IChvYmplY3QoKSwgb2JqZWN0KCkpCiAgICAgICAgIGFyZ3NfcmVwciA9ICcsICcuam9pbihyZXByKGEpIGZvciBhIGluIGFyZ3MpCiAgICAgICAgIGt3YXJncyA9IHsnYSc6IG9iamVjdCgpLCAnYic6IG9iamVjdCgpfQotICAgICAgICBrd2FyZ3NfcmVwciA9ICcsICcuam9pbigiJXM9JXIiICUgKGssIHYpIGZvciBrLCB2IGluIGt3YXJncy5pdGVtcygpKQotICAgICAgICBpZiBzZWxmLnRoZXR5cGUgaXMgZnVuY3Rvb2xzLnBhcnRpYWw6CisgICAgICAgIGt3YXJnc19yZXBycyA9IFsnYT17YSFyfSwgYj17YiFyfScuZm9ybWF0X21hcChrd2FyZ3MpLAorICAgICAgICAgICAgICAgICAgICAgICAgJ2I9e2Ihcn0sIGE9e2Ehcn0nLmZvcm1hdF9tYXAoa3dhcmdzKV0KKyAgICAgICAgaWYgc2VsZi5wYXJ0aWFsIGlzIGNfZnVuY3Rvb2xzLnBhcnRpYWw6CiAgICAgICAgICAgICBuYW1lID0gJ2Z1bmN0b29scy5wYXJ0aWFsJwogICAgICAgICBlbHNlOgotICAgICAgICAgICAgbmFtZSA9IHNlbGYudGhldHlwZS5fX25hbWVfXworICAgICAgICAgICAgbmFtZSA9IHNlbGYucGFydGlhbC5fX25hbWVfXwogCi0gICAgICAgIGYgPSBzZWxmLnRoZXR5cGUoY2FwdHVyZSkKKyAgICAgICAgZiA9IHNlbGYucGFydGlhbChjYXB0dXJlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7fSh7IXJ9KScuZm9ybWF0KG5hbWUsIGNhcHR1cmUpLAogICAgICAgICAgICAgICAgICAgICAgICAgIHJlcHIoZikpCiAKLSAgICAgICAgZiA9IHNlbGYudGhldHlwZShjYXB0dXJlLCAqYXJncykKKyAgICAgICAgZiA9IHNlbGYucGFydGlhbChjYXB0dXJlLCAqYXJncykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgne30oeyFyfSwge30pJy5mb3JtYXQobmFtZSwgY2FwdHVyZSwgYXJnc19yZXByKSwKICAgICAgICAgICAgICAgICAgICAgICAgICByZXByKGYpKQogCi0gICAgICAgIGYgPSBzZWxmLnRoZXR5cGUoY2FwdHVyZSwgKiprd2FyZ3MpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3t9KHshcn0sIHt9KScuZm9ybWF0KG5hbWUsIGNhcHR1cmUsIGt3YXJnc19yZXByKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICByZXByKGYpKQorICAgICAgICBmID0gc2VsZi5wYXJ0aWFsKGNhcHR1cmUsICoqa3dhcmdzKQorICAgICAgICBzZWxmLmFzc2VydEluKHJlcHIoZiksCisgICAgICAgICAgICAgICAgICAgICAgWyd7fSh7IXJ9LCB7fSknLmZvcm1hdChuYW1lLCBjYXB0dXJlLCBrd2FyZ3NfcmVwcikKKyAgICAgICAgICAgICAgICAgICAgICAgZm9yIGt3YXJnc19yZXByIGluIGt3YXJnc19yZXByc10pCiAKLSAgICAgICAgZiA9IHNlbGYudGhldHlwZShjYXB0dXJlLCAqYXJncywgKiprd2FyZ3MpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3t9KHshcn0sIHt9LCB7fSknLmZvcm1hdChuYW1lLCBjYXB0dXJlLCBhcmdzX3JlcHIsIGt3YXJnc19yZXByKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICByZXByKGYpKQorICAgICAgICBmID0gc2VsZi5wYXJ0aWFsKGNhcHR1cmUsICphcmdzLCAqKmt3YXJncykKKyAgICAgICAgc2VsZi5hc3NlcnRJbihyZXByKGYpLAorICAgICAgICAgICAgICAgICAgICAgIFsne30oeyFyfSwge30sIHt9KScuZm9ybWF0KG5hbWUsIGNhcHR1cmUsIGFyZ3NfcmVwciwga3dhcmdzX3JlcHIpCisgICAgICAgICAgICAgICAgICAgICAgIGZvciBrd2FyZ3NfcmVwciBpbiBrd2FyZ3NfcmVwcnNdKQogCiAgICAgZGVmIHRlc3RfcGlja2xlKHNlbGYpOgotICAgICAgICBmID0gc2VsZi50aGV0eXBlKHNpZ25hdHVyZSwgJ2FzZGYnLCBiYXI9VHJ1ZSkKKyAgICAgICAgZiA9IHNlbGYucGFydGlhbChzaWduYXR1cmUsICdhc2RmJywgYmFyPVRydWUpCiAgICAgICAgIGYuYWRkX3NvbWV0aGluZ190b19fZGljdF9fID0gVHJ1ZQotICAgICAgICBmX2NvcHkgPSBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKGYpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpZ25hdHVyZShmKSwgc2lnbmF0dXJlKGZfY29weSkpCisgICAgICAgIGZvciBwcm90byBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgZl9jb3B5ID0gcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhmLCBwcm90bykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpZ25hdHVyZShmKSwgc2lnbmF0dXJlKGZfY29weSkpCiAKICAgICAjIElzc3VlIDYwODM6IFJlZmVyZW5jZSBjb3VudGluZyBidWcKICAgICBkZWYgdGVzdF9zZXRzdGF0ZV9yZWZjb3VudChzZWxmKToKQEAgLTE5MSwzMCArMjA0LDE0MCBAQAogICAgICAgICAgICAgICAgICAgICByZXR1cm4ge30KICAgICAgICAgICAgICAgICByYWlzZSBJbmRleEVycm9yCiAKLSAgICAgICAgZiA9IHNlbGYudGhldHlwZShvYmplY3QpCisgICAgICAgIGYgPSBzZWxmLnBhcnRpYWwob2JqZWN0KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFN5c3RlbUVycm9yLAogICAgICAgICAgICAgICAgICJuZXcgc3R5bGUgZ2V0YXJncyBmb3JtYXQgYnV0IGFyZ3VtZW50IGlzIG5vdCBhIHR1cGxlIiwKICAgICAgICAgICAgICAgICBmLl9fc2V0c3RhdGVfXywgQmFkU2VxdWVuY2UoKSkKIAotY2xhc3MgUGFydGlhbFN1YmNsYXNzKGZ1bmN0b29scy5wYXJ0aWFsKToKLSAgICBwYXNzCiAKLWNsYXNzIFRlc3RQYXJ0aWFsU3ViY2xhc3MoVGVzdFBhcnRpYWwpOgorY2xhc3MgVGVzdFBhcnRpYWxQeShUZXN0UGFydGlhbCwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIHBhcnRpYWwgPSBzdGF0aWNtZXRob2QocHlfZnVuY3Rvb2xzLnBhcnRpYWwpCiAKLSAgICB0aGV0eXBlID0gUGFydGlhbFN1YmNsYXNzCiAKLWNsYXNzIFRlc3RQeXRob25QYXJ0aWFsKFRlc3RQYXJ0aWFsKToKK2lmIGNfZnVuY3Rvb2xzOgorICAgIGNsYXNzIFBhcnRpYWxTdWJjbGFzcyhjX2Z1bmN0b29scy5wYXJ0aWFsKToKKyAgICAgICAgcGFzcwogCi0gICAgdGhldHlwZSA9IFB5dGhvblBhcnRpYWwKIAotICAgICMgdGhlIHB5dGhvbiB2ZXJzaW9uIGhhc24ndCBhIG5pY2UgcmVwcgotICAgIHRlc3RfcmVwciA9IE5vbmUKK0B1bml0dGVzdC5za2lwVW5sZXNzKGNfZnVuY3Rvb2xzLCAncmVxdWlyZXMgdGhlIEMgX2Z1bmN0b29scyBtb2R1bGUnKQorY2xhc3MgVGVzdFBhcnRpYWxDU3ViY2xhc3MoVGVzdFBhcnRpYWxDKToKKyAgICBpZiBjX2Z1bmN0b29sczoKKyAgICAgICAgcGFydGlhbCA9IFBhcnRpYWxTdWJjbGFzcwogCi0gICAgIyB0aGUgcHl0aG9uIHZlcnNpb24gaXNuJ3QgcGlja2xhYmxlCi0gICAgdGVzdF9waWNrbGUgPSB0ZXN0X3NldHN0YXRlX3JlZmNvdW50ID0gTm9uZQogCi0gICAgIyB0aGUgcHl0aG9uIHZlcnNpb24gaXNuJ3QgYSB0eXBlCi0gICAgdGVzdF9hdHRyaWJ1dGVzID0gTm9uZQorY2xhc3MgVGVzdFBhcnRpYWxNZXRob2QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgY2xhc3MgQShvYmplY3QpOgorICAgICAgICBub3RoaW5nID0gZnVuY3Rvb2xzLnBhcnRpYWxtZXRob2QoY2FwdHVyZSkKKyAgICAgICAgcG9zaXRpb25hbCA9IGZ1bmN0b29scy5wYXJ0aWFsbWV0aG9kKGNhcHR1cmUsIDEpCisgICAgICAgIGtleXdvcmRzID0gZnVuY3Rvb2xzLnBhcnRpYWxtZXRob2QoY2FwdHVyZSwgYT0yKQorICAgICAgICBib3RoID0gZnVuY3Rvb2xzLnBhcnRpYWxtZXRob2QoY2FwdHVyZSwgMywgYj00KQorCisgICAgICAgIG5lc3RlZCA9IGZ1bmN0b29scy5wYXJ0aWFsbWV0aG9kKHBvc2l0aW9uYWwsIDUpCisKKyAgICAgICAgb3Zlcl9wYXJ0aWFsID0gZnVuY3Rvb2xzLnBhcnRpYWxtZXRob2QoZnVuY3Rvb2xzLnBhcnRpYWwoY2FwdHVyZSwgYz02KSwgNykKKworICAgICAgICBzdGF0aWMgPSBmdW5jdG9vbHMucGFydGlhbG1ldGhvZChzdGF0aWNtZXRob2QoY2FwdHVyZSksIDgpCisgICAgICAgIGNscyA9IGZ1bmN0b29scy5wYXJ0aWFsbWV0aG9kKGNsYXNzbWV0aG9kKGNhcHR1cmUpLCBkPTkpCisKKyAgICBhID0gQSgpCisKKyAgICBkZWYgdGVzdF9hcmdfY29tYmluYXRpb25zKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYS5ub3RoaW5nKCksICgoc2VsZi5hLCksIHt9KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmEubm90aGluZyg1KSwgKChzZWxmLmEsIDUpLCB7fSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5hLm5vdGhpbmcoYz02KSwgKChzZWxmLmEsKSwgeydjJzogNn0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYS5ub3RoaW5nKDUsIGM9NiksICgoc2VsZi5hLCA1KSwgeydjJzogNn0pKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5hLnBvc2l0aW9uYWwoKSwgKChzZWxmLmEsIDEpLCB7fSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5hLnBvc2l0aW9uYWwoNSksICgoc2VsZi5hLCAxLCA1KSwge30pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYS5wb3NpdGlvbmFsKGM9NiksICgoc2VsZi5hLCAxKSwgeydjJzogNn0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYS5wb3NpdGlvbmFsKDUsIGM9NiksICgoc2VsZi5hLCAxLCA1KSwgeydjJzogNn0pKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5hLmtleXdvcmRzKCksICgoc2VsZi5hLCksIHsnYSc6IDJ9KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmEua2V5d29yZHMoNSksICgoc2VsZi5hLCA1KSwgeydhJzogMn0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYS5rZXl3b3JkcyhjPTYpLCAoKHNlbGYuYSwpLCB7J2EnOiAyLCAnYyc6IDZ9KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmEua2V5d29yZHMoNSwgYz02KSwgKChzZWxmLmEsIDUpLCB7J2EnOiAyLCAnYyc6IDZ9KSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYS5ib3RoKCksICgoc2VsZi5hLCAzKSwgeydiJzogNH0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYS5ib3RoKDUpLCAoKHNlbGYuYSwgMywgNSksIHsnYic6IDR9KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmEuYm90aChjPTYpLCAoKHNlbGYuYSwgMyksIHsnYic6IDQsICdjJzogNn0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYS5ib3RoKDUsIGM9NiksICgoc2VsZi5hLCAzLCA1KSwgeydiJzogNCwgJ2MnOiA2fSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLkEuYm90aChzZWxmLmEsIDUsIGM9NiksICgoc2VsZi5hLCAzLCA1KSwgeydiJzogNCwgJ2MnOiA2fSkpCisKKyAgICBkZWYgdGVzdF9uZXN0ZWQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5hLm5lc3RlZCgpLCAoKHNlbGYuYSwgMSwgNSksIHt9KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmEubmVzdGVkKDYpLCAoKHNlbGYuYSwgMSwgNSwgNiksIHt9KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmEubmVzdGVkKGQ9NyksICgoc2VsZi5hLCAxLCA1KSwgeydkJzogN30pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYS5uZXN0ZWQoNiwgZD03KSwgKChzZWxmLmEsIDEsIDUsIDYpLCB7J2QnOiA3fSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLkEubmVzdGVkKHNlbGYuYSwgNiwgZD03KSwgKChzZWxmLmEsIDEsIDUsIDYpLCB7J2QnOiA3fSkpCisKKyAgICBkZWYgdGVzdF9vdmVyX3BhcnRpYWwoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5hLm92ZXJfcGFydGlhbCgpLCAoKHNlbGYuYSwgNyksIHsnYyc6IDZ9KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmEub3Zlcl9wYXJ0aWFsKDUpLCAoKHNlbGYuYSwgNywgNSksIHsnYyc6IDZ9KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmEub3Zlcl9wYXJ0aWFsKGQ9OCksICgoc2VsZi5hLCA3KSwgeydjJzogNiwgJ2QnOiA4fSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5hLm92ZXJfcGFydGlhbCg1LCBkPTgpLCAoKHNlbGYuYSwgNywgNSksIHsnYyc6IDYsICdkJzogOH0pKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5BLm92ZXJfcGFydGlhbChzZWxmLmEsIDUsIGQ9OCksICgoc2VsZi5hLCA3LCA1KSwgeydjJzogNiwgJ2QnOiA4fSkpCisKKyAgICBkZWYgdGVzdF9ib3VuZF9tZXRob2RfaW50cm9zcGVjdGlvbihzZWxmKToKKyAgICAgICAgb2JqID0gc2VsZi5hCisgICAgICAgIHNlbGYuYXNzZXJ0SXMob2JqLmJvdGguX19zZWxmX18sIG9iaikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhvYmoubmVzdGVkLl9fc2VsZl9fLCBvYmopCisgICAgICAgIHNlbGYuYXNzZXJ0SXMob2JqLm92ZXJfcGFydGlhbC5fX3NlbGZfXywgb2JqKQorICAgICAgICBzZWxmLmFzc2VydElzKG9iai5jbHMuX19zZWxmX18sIHNlbGYuQSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzZWxmLkEuY2xzLl9fc2VsZl9fLCBzZWxmLkEpCisKKyAgICBkZWYgdGVzdF91bmJvdW5kX21ldGhvZF9yZXRyaWV2YWwoc2VsZik6CisgICAgICAgIG9iaiA9IHNlbGYuQQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIob2JqLmJvdGgsICJfX3NlbGZfXyIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIob2JqLm5lc3RlZCwgIl9fc2VsZl9fIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihvYmoub3Zlcl9wYXJ0aWFsLCAiX19zZWxmX18iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKG9iai5zdGF0aWMsICJfX3NlbGZfXyIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIoc2VsZi5hLnN0YXRpYywgIl9fc2VsZl9fIikpCisKKyAgICBkZWYgdGVzdF9kZXNjcmlwdG9ycyhzZWxmKToKKyAgICAgICAgZm9yIG9iaiBpbiBbc2VsZi5BLCBzZWxmLmFdOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3Qob2JqPW9iaik6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmouc3RhdGljKCksICgoOCwpLCB7fSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmouc3RhdGljKDUpLCAoKDgsIDUpLCB7fSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmouc3RhdGljKGQ9OCksICgoOCwpLCB7J2QnOiA4fSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmouc3RhdGljKDUsIGQ9OCksICgoOCwgNSksIHsnZCc6IDh9KSkKKworICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqLmNscygpLCAoKHNlbGYuQSwpLCB7J2QnOiA5fSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmouY2xzKDUpLCAoKHNlbGYuQSwgNSksIHsnZCc6IDl9KSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iai5jbHMoYz04KSwgKChzZWxmLkEsKSwgeydjJzogOCwgJ2QnOiA5fSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmouY2xzKDUsIGM9OCksICgoc2VsZi5BLCA1KSwgeydjJzogOCwgJ2QnOiA5fSkpCisKKyAgICBkZWYgdGVzdF9vdmVycmlkaW5nX2tleXdvcmRzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYS5rZXl3b3JkcyhhPTMpLCAoKHNlbGYuYSwpLCB7J2EnOiAzfSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5BLmtleXdvcmRzKHNlbGYuYSwgYT0zKSwgKChzZWxmLmEsKSwgeydhJzogM30pKQorCisgICAgZGVmIHRlc3RfaW52YWxpZF9hcmdzKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBjbGFzcyBCKG9iamVjdCk6CisgICAgICAgICAgICAgICAgbWV0aG9kID0gZnVuY3Rvb2xzLnBhcnRpYWxtZXRob2QoTm9uZSwgMSkKKworICAgIGRlZiB0ZXN0X3JlcHIoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcih2YXJzKHNlbGYuQSlbJ2JvdGgnXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ2Z1bmN0b29scy5wYXJ0aWFsbWV0aG9kKHt9LCAzLCBiPTQpJy5mb3JtYXQoY2FwdHVyZSkpCisKKyAgICBkZWYgdGVzdF9hYnN0cmFjdChzZWxmKToKKyAgICAgICAgY2xhc3MgQWJzdHJhY3QoYWJjLkFCQ01ldGEpOgorCisgICAgICAgICAgICBAYWJjLmFic3RyYWN0bWV0aG9kCisgICAgICAgICAgICBkZWYgYWRkKHNlbGYsIHgsIHkpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAgICAgYWRkNSA9IGZ1bmN0b29scy5wYXJ0aWFsbWV0aG9kKGFkZCwgNSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoQWJzdHJhY3QuYWRkLl9faXNhYnN0cmFjdG1ldGhvZF9fKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoQWJzdHJhY3QuYWRkNS5fX2lzYWJzdHJhY3RtZXRob2RfXykKKworICAgICAgICBmb3IgZnVuYyBpbiBbc2VsZi5BLnN0YXRpYywgc2VsZi5BLmNscywgc2VsZi5BLm92ZXJfcGFydGlhbCwgc2VsZi5BLm5lc3RlZCwgc2VsZi5BLmJvdGhdOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShnZXRhdHRyKGZ1bmMsICdfX2lzYWJzdHJhY3RtZXRob2RfXycsIEZhbHNlKSkKKwogCiBjbGFzcyBUZXN0VXBkYXRlV3JhcHBlcih1bml0dGVzdC5UZXN0Q2FzZSk6CiAKQEAgLTIyMywxOSArMzQ2LDI2IEBACiAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlZD1mdW5jdG9vbHMuV1JBUFBFUl9VUERBVEVTKToKICAgICAgICAgIyBDaGVjayBhdHRyaWJ1dGVzIHdlcmUgYXNzaWduZWQKICAgICAgICAgZm9yIG5hbWUgaW4gYXNzaWduZWQ6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZ2V0YXR0cih3cmFwcGVyLCBuYW1lKSBpcyBnZXRhdHRyKHdyYXBwZWQsIG5hbWUpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhnZXRhdHRyKHdyYXBwZXIsIG5hbWUpLCBnZXRhdHRyKHdyYXBwZWQsIG5hbWUpKQogICAgICAgICAjIENoZWNrIGF0dHJpYnV0ZXMgd2VyZSB1cGRhdGVkCiAgICAgICAgIGZvciBuYW1lIGluIHVwZGF0ZWQ6CiAgICAgICAgICAgICB3cmFwcGVyX2F0dHIgPSBnZXRhdHRyKHdyYXBwZXIsIG5hbWUpCiAgICAgICAgICAgICB3cmFwcGVkX2F0dHIgPSBnZXRhdHRyKHdyYXBwZWQsIG5hbWUpCiAgICAgICAgICAgICBmb3Iga2V5IGluIHdyYXBwZWRfYXR0cjoKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUod3JhcHBlZF9hdHRyW2tleV0gaXMgd3JhcHBlcl9hdHRyW2tleV0pCisgICAgICAgICAgICAgICAgaWYgbmFtZSA9PSAiX19kaWN0X18iIGFuZCBrZXkgPT0gIl9fd3JhcHBlZF9fIjoKKyAgICAgICAgICAgICAgICAgICAgIyBfX3dyYXBwZWRfXyBpcyBvdmVyd3JpdHRlbiBieSB0aGUgdXBkYXRlIGNvZGUKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzKHdyYXBwZWRfYXR0cltrZXldLCB3cmFwcGVyX2F0dHJba2V5XSkKKyAgICAgICAgIyBDaGVjayBfX3dyYXBwZWRfXworICAgICAgICBzZWxmLmFzc2VydElzKHdyYXBwZXIuX193cmFwcGVkX18sIHdyYXBwZWQpCisKIAogICAgIGRlZiBfZGVmYXVsdF91cGRhdGUoc2VsZik6CiAgICAgICAgIGRlZiBmKGE6J1RoaXMgaXMgYSBuZXcgYW5ub3RhdGlvbicpOgogICAgICAgICAgICAgIiIiVGhpcyBpcyBhIHRlc3QiIiIKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgZi5hdHRyID0gJ1RoaXMgaXMgYWxzbyBhIHRlc3QnCisgICAgICAgIGYuX193cmFwcGVkX18gPSAiVGhpcyBpcyBhIGJhbGQgZmFjZWQgbGllIgogICAgICAgICBkZWYgd3JhcHBlcihiOidUaGlzIGlzIHRoZSBwcmlvciBhbm5vdGF0aW9uJyk6CiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGZ1bmN0b29scy51cGRhdGVfd3JhcHBlcih3cmFwcGVyLCBmKQpAQCAtMzIyLDYgKzQ1Miw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3cmFwcGVyLl9fZG9jX18uc3RhcnRzd2l0aCgnbWF4KCcpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdyYXBwZXIuX19hbm5vdGF0aW9uc19fLCB7fSkKIAorCiBjbGFzcyBUZXN0V3JhcHMoVGVzdFVwZGF0ZVdyYXBwZXIpOgogCiAgICAgZGVmIF9kZWZhdWx0X3VwZGF0ZShzZWxmKToKQEAgLTMyOSwxNCArNDYwLDE1IEBACiAgICAgICAgICAgICAiIiJUaGlzIGlzIGEgdGVzdCIiIgogICAgICAgICAgICAgcGFzcwogICAgICAgICBmLmF0dHIgPSAnVGhpcyBpcyBhbHNvIGEgdGVzdCcKKyAgICAgICAgZi5fX3dyYXBwZWRfXyA9ICJUaGlzIGlzIHN0aWxsIGEgYmFsZCBmYWNlZCBsaWUiCiAgICAgICAgIEBmdW5jdG9vbHMud3JhcHMoZikKICAgICAgICAgZGVmIHdyYXBwZXIoKToKICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgc2VsZi5jaGVja193cmFwcGVyKHdyYXBwZXIsIGYpCiAgICAgICAgIHJldHVybiB3cmFwcGVyLCBmCiAKICAgICBkZWYgdGVzdF9kZWZhdWx0X3VwZGF0ZShzZWxmKToKICAgICAgICAgd3JhcHBlciwgZiA9IHNlbGYuX2RlZmF1bHRfdXBkYXRlKCkKKyAgICAgICAgc2VsZi5jaGVja193cmFwcGVyKHdyYXBwZXIsIGYpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod3JhcHBlci5fX25hbWVfXywgJ2YnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdyYXBwZXIuX19xdWFsbmFtZV9fLCBmLl9fcXVhbG5hbWVfXykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3cmFwcGVyLmF0dHIsICdUaGlzIGlzIGFsc28gYSB0ZXN0JykKQEAgLTM4Miw2ICs1MTQsNyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdyYXBwZXIuYXR0ciwgJ1RoaXMgaXMgYSBkaWZmZXJlbnQgdGVzdCcpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod3JhcHBlci5kaWN0X2F0dHIsIGYuZGljdF9hdHRyKQogCisKIGNsYXNzIFRlc3RSZWR1Y2UodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGZ1bmMgPSBmdW5jdG9vbHMucmVkdWNlCiAKQEAgLTQ2MiwyNCArNTk1LDI5IEBACiAgICAgICAgIGQgPSB7Im9uZSI6IDEsICJ0d28iOiAyLCAidGhyZWUiOiAzfQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhhZGQsIGQpLCAiIi5qb2luKGQua2V5cygpKSkKIAotY2xhc3MgVGVzdENtcFRvS2V5KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworY2xhc3MgVGVzdENtcFRvS2V5OgogCiAgICAgZGVmIHRlc3RfY21wX3RvX2tleShzZWxmKToKICAgICAgICAgZGVmIGNtcDEoeCwgeSk6CiAgICAgICAgICAgICByZXR1cm4gKHggPiB5KSAtICh4IDwgeSkKLSAgICAgICAga2V5ID0gZnVuY3Rvb2xzLmNtcF90b19rZXkoY21wMSkKKyAgICAgICAga2V5ID0gc2VsZi5jbXBfdG9fa2V5KGNtcDEpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoa2V5KDMpLCBrZXkoMykpCiAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihrZXkoMyksIGtleSgxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoa2V5KDMpLCBrZXkoMykpCisKICAgICAgICAgZGVmIGNtcDIoeCwgeSk6CiAgICAgICAgICAgICByZXR1cm4gaW50KHgpIC0gaW50KHkpCi0gICAgICAgIGtleSA9IGZ1bmN0b29scy5jbXBfdG9fa2V5KGNtcDIpCisgICAgICAgIGtleSA9IHNlbGYuY21wX3RvX2tleShjbXAyKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGtleSg0LjApLCBrZXkoJzQnKSkKICAgICAgICAgc2VsZi5hc3NlcnRMZXNzKGtleSgyKSwga2V5KCczNScpKQorICAgICAgICBzZWxmLmFzc2VydExlc3NFcXVhbChrZXkoMiksIGtleSgnMzUnKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChrZXkoMiksIGtleSgnMzUnKSkKIAogICAgIGRlZiB0ZXN0X2NtcF90b19rZXlfYXJndW1lbnRzKHNlbGYpOgogICAgICAgICBkZWYgY21wMSh4LCB5KToKICAgICAgICAgICAgIHJldHVybiAoeCA+IHkpIC0gKHggPCB5KQotICAgICAgICBrZXkgPSBmdW5jdG9vbHMuY21wX3RvX2tleShteWNtcD1jbXAxKQorICAgICAgICBrZXkgPSBzZWxmLmNtcF90b19rZXkobXljbXA9Y21wMSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChrZXkob2JqPTMpLCBrZXkob2JqPTMpKQogICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIoa2V5KG9iaj0zKSwga2V5KG9iaj0xKSkKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcygoVHlwZUVycm9yLCBBdHRyaWJ1dGVFcnJvcikpOgpAQCAtNDg3LDEwICs2MjUsMTAgQEAKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcygoVHlwZUVycm9yLCBBdHRyaWJ1dGVFcnJvcikpOgogICAgICAgICAgICAgMSA8IGtleSgzKSAgICAjIGxocyBpcyBub3QgYSBLIG9iamVjdAogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6Ci0gICAgICAgICAgICBrZXkgPSBmdW5jdG9vbHMuY21wX3RvX2tleSgpICAgICAgICAgICAgICMgdG9vIGZldyBhcmdzCisgICAgICAgICAgICBrZXkgPSBzZWxmLmNtcF90b19rZXkoKSAgICAgICAgICAgICAjIHRvbyBmZXcgYXJncwogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6Ci0gICAgICAgICAgICBrZXkgPSBmdW5jdG9vbHMuY21wX3RvX2tleShjbXAxLCBOb25lKSAgICMgdG9vIG1hbnkgYXJncwotICAgICAgICBrZXkgPSBmdW5jdG9vbHMuY21wX3RvX2tleShjbXAxKQorICAgICAgICAgICAga2V5ID0gc2VsZi5jbXBfdG9fa2V5KGNtcDEsIE5vbmUpICAgIyB0b28gbWFueSBhcmdzCisgICAgICAgIGtleSA9IHNlbGYuY21wX3RvX2tleShjbXAxKQogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CiAgICAgICAgICAgICBrZXkoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgdG9vIGZldyBhcmdzCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKQEAgLTQ5OSw3ICs2MzcsNyBAQAogICAgIGRlZiB0ZXN0X2JhZF9jbXAoc2VsZik6CiAgICAgICAgIGRlZiBjbXAxKHgsIHkpOgogICAgICAgICAgICAgcmFpc2UgWmVyb0RpdmlzaW9uRXJyb3IKLSAgICAgICAga2V5ID0gZnVuY3Rvb2xzLmNtcF90b19rZXkoY21wMSkKKyAgICAgICAga2V5ID0gc2VsZi5jbXBfdG9fa2V5KGNtcDEpCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IpOgogICAgICAgICAgICAga2V5KDMpID4ga2V5KDEpCiAKQEAgLTUxNCwxMyArNjUyLDEzIEBACiAgICAgZGVmIHRlc3Rfb2JqX2ZpZWxkKHNlbGYpOgogICAgICAgICBkZWYgY21wMSh4LCB5KToKICAgICAgICAgICAgIHJldHVybiAoeCA+IHkpIC0gKHggPCB5KQotICAgICAgICBrZXkgPSBmdW5jdG9vbHMuY21wX3RvX2tleShteWNtcD1jbXAxKQorICAgICAgICBrZXkgPSBzZWxmLmNtcF90b19rZXkobXljbXA9Y21wMSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChrZXkoNTApLm9iaiwgNTApCiAKICAgICBkZWYgdGVzdF9zb3J0X2ludChzZWxmKToKICAgICAgICAgZGVmIG15Y21wKHgsIHkpOgogICAgICAgICAgICAgcmV0dXJuIHkgLSB4Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKHJhbmdlKDUpLCBrZXk9ZnVuY3Rvb2xzLmNtcF90b19rZXkobXljbXApKSwKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQocmFuZ2UoNSksIGtleT1zZWxmLmNtcF90b19rZXkobXljbXApKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBbNCwgMywgMiwgMSwgMF0pCiAKICAgICBkZWYgdGVzdF9zb3J0X2ludF9zdHIoc2VsZik6CkBAIC01MjgsMTggKzY2NiwyOSBAQAogICAgICAgICAgICAgeCwgeSA9IGludCh4KSwgaW50KHkpCiAgICAgICAgICAgICByZXR1cm4gKHggPiB5KSAtICh4IDwgeSkKICAgICAgICAgdmFsdWVzID0gWzUsICczJywgNywgMiwgJzAnLCAnMScsIDQsICcxMCcsIDFdCi0gICAgICAgIHZhbHVlcyA9IHNvcnRlZCh2YWx1ZXMsIGtleT1mdW5jdG9vbHMuY21wX3RvX2tleShteWNtcCkpCisgICAgICAgIHZhbHVlcyA9IHNvcnRlZCh2YWx1ZXMsIGtleT1zZWxmLmNtcF90b19rZXkobXljbXApKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtpbnQodmFsdWUpIGZvciB2YWx1ZSBpbiB2YWx1ZXNdLAogICAgICAgICAgICAgICAgICAgICAgICAgIFswLCAxLCAxLCAyLCAzLCA0LCA1LCA3LCAxMF0pCiAKICAgICBkZWYgdGVzdF9oYXNoKHNlbGYpOgogICAgICAgICBkZWYgbXljbXAoeCwgeSk6CiAgICAgICAgICAgICByZXR1cm4geSAtIHgKLSAgICAgICAga2V5ID0gZnVuY3Rvb2xzLmNtcF90b19rZXkobXljbXApCisgICAgICAgIGtleSA9IHNlbGYuY21wX3RvX2tleShteWNtcCkKICAgICAgICAgayA9IGtleSgxMCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBoYXNoLCBrKQogICAgICAgICBzZWxmLmFzc2VydE5vdElzSW5zdGFuY2UoaywgY29sbGVjdGlvbnMuSGFzaGFibGUpCiAKKworQHVuaXR0ZXN0LnNraXBVbmxlc3MoY19mdW5jdG9vbHMsICdyZXF1aXJlcyB0aGUgQyBfZnVuY3Rvb2xzIG1vZHVsZScpCitjbGFzcyBUZXN0Q21wVG9LZXlDKFRlc3RDbXBUb0tleSwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGlmIGNfZnVuY3Rvb2xzOgorICAgICAgICBjbXBfdG9fa2V5ID0gY19mdW5jdG9vbHMuY21wX3RvX2tleQorCisKK2NsYXNzIFRlc3RDbXBUb0tleVB5KFRlc3RDbXBUb0tleSwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGNtcF90b19rZXkgPSBzdGF0aWNtZXRob2QocHlfZnVuY3Rvb2xzLmNtcF90b19rZXkpCisKKwogY2xhc3MgVGVzdFRvdGFsT3JkZXJpbmcodW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3RfdG90YWxfb3JkZXJpbmdfbHQoc2VsZik6CkBAIC01NTcsNiArNzA2LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEEoMikgPj0gQSgxKSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEEoMikgPD0gQSgyKSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEEoMikgPj0gQSgyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShBKDEpID4gQSgyKSkKIAogICAgIGRlZiB0ZXN0X3RvdGFsX29yZGVyaW5nX2xlKHNlbGYpOgogICAgICAgICBAZnVuY3Rvb2xzLnRvdGFsX29yZGVyaW5nCkBAIC01NzMsNiArNzIzLDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEEoMikgPj0gQSgxKSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEEoMikgPD0gQSgyKSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEEoMikgPj0gQSgyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShBKDEpID49IEEoMikpCiAKICAgICBkZWYgdGVzdF90b3RhbF9vcmRlcmluZ19ndChzZWxmKToKICAgICAgICAgQGZ1bmN0b29scy50b3RhbF9vcmRlcmluZwpAQCAtNTg5LDYgKzc0MCw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShBKDIpID49IEEoMSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShBKDIpIDw9IEEoMikpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShBKDIpID49IEEoMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoQSgyKSA8IEEoMSkpCiAKICAgICBkZWYgdGVzdF90b3RhbF9vcmRlcmluZ19nZShzZWxmKToKICAgICAgICAgQGZ1bmN0b29scy50b3RhbF9vcmRlcmluZwpAQCAtNjA1LDYgKzc1Nyw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShBKDIpID49IEEoMSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShBKDIpIDw9IEEoMikpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShBKDIpID49IEEoMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoQSgyKSA8PSBBKDEpKQogCiAgICAgZGVmIHRlc3RfdG90YWxfb3JkZXJpbmdfbm9fb3ZlcndyaXRlKHNlbGYpOgogICAgICAgICAjIG5ldyBtZXRob2RzIHNob3VsZCBub3Qgb3ZlcndyaXRlIGV4aXN0aW5nCkBAIC02MjQsMjcgKzc3NywxMTggQEAKICAgICAgICAgICAgIGNsYXNzIEE6CiAgICAgICAgICAgICAgICAgcGFzcwogCi0gICAgZGVmIHRlc3RfYnVnXzEwMDQyKHNlbGYpOgorICAgIGRlZiB0ZXN0X3R5cGVfZXJyb3Jfd2hlbl9ub3RfaW1wbGVtZW50ZWQoc2VsZik6CisgICAgICAgICMgYnVnIDEwMDQyOyBlbnN1cmUgc3RhY2sgb3ZlcmZsb3cgZG9lcyBub3Qgb2NjdXIKKyAgICAgICAgIyB3aGVuIGRlY29yYXRlZCB0eXBlcyByZXR1cm4gTm90SW1wbGVtZW50ZWQKICAgICAgICAgQGZ1bmN0b29scy50b3RhbF9vcmRlcmluZwotICAgICAgICBjbGFzcyBUZXN0VE86CisgICAgICAgIGNsYXNzIEltcGxlbWVudHNMZXNzVGhhbjoKICAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZSk6CiAgICAgICAgICAgICAgICAgc2VsZi52YWx1ZSA9IHZhbHVlCiAgICAgICAgICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKLSAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBUZXN0VE8pOgorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIEltcGxlbWVudHNMZXNzVGhhbik6CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnZhbHVlID09IG90aGVyLnZhbHVlCiAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgICAgICBkZWYgX19sdF9fKHNlbGYsIG90aGVyKToKLSAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBUZXN0VE8pOgorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIEltcGxlbWVudHNMZXNzVGhhbik6CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnZhbHVlIDwgb3RoZXIudmFsdWUKLSAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgotICAgICAgICAgICAgVGVzdFRPKDgpIDw9ICgpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisKKyAgICAgICAgQGZ1bmN0b29scy50b3RhbF9vcmRlcmluZworICAgICAgICBjbGFzcyBJbXBsZW1lbnRzR3JlYXRlclRoYW46CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWUpOgorICAgICAgICAgICAgICAgIHNlbGYudmFsdWUgPSB2YWx1ZQorICAgICAgICAgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgSW1wbGVtZW50c0dyZWF0ZXJUaGFuKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYudmFsdWUgPT0gb3RoZXIudmFsdWUKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgIGRlZiBfX2d0X18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIEltcGxlbWVudHNHcmVhdGVyVGhhbik6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnZhbHVlID4gb3RoZXIudmFsdWUKKyAgICAgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKworICAgICAgICBAZnVuY3Rvb2xzLnRvdGFsX29yZGVyaW5nCisgICAgICAgIGNsYXNzIEltcGxlbWVudHNMZXNzVGhhbkVxdWFsVG86CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWUpOgorICAgICAgICAgICAgICAgIHNlbGYudmFsdWUgPSB2YWx1ZQorICAgICAgICAgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgSW1wbGVtZW50c0xlc3NUaGFuRXF1YWxUbyk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnZhbHVlID09IG90aGVyLnZhbHVlCisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICAgICBkZWYgX19sZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBJbXBsZW1lbnRzTGVzc1RoYW5FcXVhbFRvKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYudmFsdWUgPD0gb3RoZXIudmFsdWUKKyAgICAgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKworICAgICAgICBAZnVuY3Rvb2xzLnRvdGFsX29yZGVyaW5nCisgICAgICAgIGNsYXNzIEltcGxlbWVudHNHcmVhdGVyVGhhbkVxdWFsVG86CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWUpOgorICAgICAgICAgICAgICAgIHNlbGYudmFsdWUgPSB2YWx1ZQorICAgICAgICAgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgSW1wbGVtZW50c0dyZWF0ZXJUaGFuRXF1YWxUbyk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnZhbHVlID09IG90aGVyLnZhbHVlCisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICAgICBkZWYgX19nZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBJbXBsZW1lbnRzR3JlYXRlclRoYW5FcXVhbFRvKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYudmFsdWUgPj0gb3RoZXIudmFsdWUKKyAgICAgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKworICAgICAgICBAZnVuY3Rvb2xzLnRvdGFsX29yZGVyaW5nCisgICAgICAgIGNsYXNzIENvbXBhcmF0b3JOb3RJbXBsZW1lbnRlZDoKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZSk6CisgICAgICAgICAgICAgICAgc2VsZi52YWx1ZSA9IHZhbHVlCisgICAgICAgICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBDb21wYXJhdG9yTm90SW1wbGVtZW50ZWQpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi52YWx1ZSA9PSBvdGhlci52YWx1ZQorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgZGVmIF9fbHRfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisKKyAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoIkxUIDwgMSIpLCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgSW1wbGVtZW50c0xlc3NUaGFuKC0xKSA8IDEKKworICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdCgiTFQgPCBMRSIpLCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgSW1wbGVtZW50c0xlc3NUaGFuKDApIDwgSW1wbGVtZW50c0xlc3NUaGFuRXF1YWxUbygwKQorCisgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KCJMVCA8IEdUIiksIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBJbXBsZW1lbnRzTGVzc1RoYW4oMSkgPCBJbXBsZW1lbnRzR3JlYXRlclRoYW4oMSkKKworICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdCgiTEUgPD0gTFQiKSwgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIEltcGxlbWVudHNMZXNzVGhhbkVxdWFsVG8oMikgPD0gSW1wbGVtZW50c0xlc3NUaGFuKDIpCisKKyAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoIkxFIDw9IEdFIiksIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBJbXBsZW1lbnRzTGVzc1RoYW5FcXVhbFRvKDMpIDw9IEltcGxlbWVudHNHcmVhdGVyVGhhbkVxdWFsVG8oMykKKworICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdCgiR1QgPiBHRSIpLCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgSW1wbGVtZW50c0dyZWF0ZXJUaGFuKDQpID4gSW1wbGVtZW50c0dyZWF0ZXJUaGFuRXF1YWxUbyg0KQorCisgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KCJHVCA+IExUIiksIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBJbXBsZW1lbnRzR3JlYXRlclRoYW4oNSkgPiBJbXBsZW1lbnRzTGVzc1RoYW4oNSkKKworICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdCgiR0UgPj0gR1QiKSwgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIEltcGxlbWVudHNHcmVhdGVyVGhhbkVxdWFsVG8oNikgPj0gSW1wbGVtZW50c0dyZWF0ZXJUaGFuKDYpCisKKyAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoIkdFID49IExFIiksIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBJbXBsZW1lbnRzR3JlYXRlclRoYW5FcXVhbFRvKDcpID49IEltcGxlbWVudHNMZXNzVGhhbkVxdWFsVG8oNykKKworICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdCgiR0Ugd2hlbiBlcXVhbCIpOgorICAgICAgICAgICAgYSA9IENvbXBhcmF0b3JOb3RJbXBsZW1lbnRlZCg4KQorICAgICAgICAgICAgYiA9IENvbXBhcmF0b3JOb3RJbXBsZW1lbnRlZCg4KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBiKQorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgICAgIGEgPj0gYgorCisgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KCJMRSB3aGVuIGVxdWFsIik6CisgICAgICAgICAgICBhID0gQ29tcGFyYXRvck5vdEltcGxlbWVudGVkKDkpCisgICAgICAgICAgICBiID0gQ29tcGFyYXRvck5vdEltcGxlbWVudGVkKDkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIGIpCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICAgICAgYSA8PSBiCiAKIGNsYXNzIFRlc3RMUlUodW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3RfbHJ1KHNlbGYpOgogICAgICAgICBkZWYgb3JpZyh4LCB5KToKLSAgICAgICAgICAgIHJldHVybiAzKngreQorICAgICAgICAgICAgcmV0dXJuIDMgKiB4ICsgeQogICAgICAgICBmID0gZnVuY3Rvb2xzLmxydV9jYWNoZShtYXhzaXplPTIwKShvcmlnKQogICAgICAgICBoaXRzLCBtaXNzZXMsIG1heHNpemUsIGN1cnJzaXplID0gZi5jYWNoZV9pbmZvKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXhzaXplLCAyMCkKQEAgLTc0OSw3ICs5OTMsNyBAQAogICAgICAgICAjIFZlcmlmeSB0aGF0IHVzZXJfZnVuY3Rpb24gZXhjZXB0aW9ucyBnZXQgcGFzc2VkIHRocm91Z2ggd2l0aG91dAogICAgICAgICAjIGNyZWF0aW5nIGEgaGFyZC10by1yZWFkIGNoYWluZWQgZXhjZXB0aW9uLgogICAgICAgICAjIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxMzE3NwotICAgICAgICBmb3IgbWF4c2l6ZSBpbiAoTm9uZSwgMTAwKToKKyAgICAgICAgZm9yIG1heHNpemUgaW4gKE5vbmUsIDEyOCk6CiAgICAgICAgICAgICBAZnVuY3Rvb2xzLmxydV9jYWNoZShtYXhzaXplKQogICAgICAgICAgICAgZGVmIGZ1bmMoaSk6CiAgICAgICAgICAgICAgICAgcmV0dXJuICdhYmMnW2ldCkBAIC03NjIsNyArMTAwNiw3IEBACiAgICAgICAgICAgICAgICAgZnVuYygxNSkKIAogICAgIGRlZiB0ZXN0X2xydV93aXRoX3R5cGVzKHNlbGYpOgotICAgICAgICBmb3IgbWF4c2l6ZSBpbiAoTm9uZSwgMTAwKToKKyAgICAgICAgZm9yIG1heHNpemUgaW4gKE5vbmUsIDEyOCk6CiAgICAgICAgICAgICBAZnVuY3Rvb2xzLmxydV9jYWNoZShtYXhzaXplPW1heHNpemUsIHR5cGVkPVRydWUpCiAgICAgICAgICAgICBkZWYgc3F1YXJlKHgpOgogICAgICAgICAgICAgICAgIHJldHVybiB4ICogeApAQCAtNzc3LDYgKzEwMjEsMzYgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3F1YXJlLmNhY2hlX2luZm8oKS5oaXRzLCA0KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcXVhcmUuY2FjaGVfaW5mbygpLm1pc3NlcywgNCkKIAorICAgIGRlZiB0ZXN0X2xydV93aXRoX2tleXdvcmRfYXJncyhzZWxmKToKKyAgICAgICAgQGZ1bmN0b29scy5scnVfY2FjaGUoKQorICAgICAgICBkZWYgZmliKG4pOgorICAgICAgICAgICAgaWYgbiA8IDI6CisgICAgICAgICAgICAgICAgcmV0dXJuIG4KKyAgICAgICAgICAgIHJldHVybiBmaWIobj1uLTEpICsgZmliKG49bi0yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgW2ZpYihuPW51bWJlcikgZm9yIG51bWJlciBpbiByYW5nZSgxNildLAorICAgICAgICAgICAgWzAsIDEsIDEsIDIsIDMsIDUsIDgsIDEzLCAyMSwgMzQsIDU1LCA4OSwgMTQ0LCAyMzMsIDM3NywgNjEwXQorICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmliLmNhY2hlX2luZm8oKSwKKyAgICAgICAgICAgIGZ1bmN0b29scy5fQ2FjaGVJbmZvKGhpdHM9MjgsIG1pc3Nlcz0xNiwgbWF4c2l6ZT0xMjgsIGN1cnJzaXplPTE2KSkKKyAgICAgICAgZmliLmNhY2hlX2NsZWFyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWIuY2FjaGVfaW5mbygpLAorICAgICAgICAgICAgZnVuY3Rvb2xzLl9DYWNoZUluZm8oaGl0cz0wLCBtaXNzZXM9MCwgbWF4c2l6ZT0xMjgsIGN1cnJzaXplPTApKQorCisgICAgZGVmIHRlc3RfbHJ1X3dpdGhfa2V5d29yZF9hcmdzX21heHNpemVfbm9uZShzZWxmKToKKyAgICAgICAgQGZ1bmN0b29scy5scnVfY2FjaGUobWF4c2l6ZT1Ob25lKQorICAgICAgICBkZWYgZmliKG4pOgorICAgICAgICAgICAgaWYgbiA8IDI6CisgICAgICAgICAgICAgICAgcmV0dXJuIG4KKyAgICAgICAgICAgIHJldHVybiBmaWIobj1uLTEpICsgZmliKG49bi0yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtmaWIobj1udW1iZXIpIGZvciBudW1iZXIgaW4gcmFuZ2UoMTYpXSwKKyAgICAgICAgICAgIFswLCAxLCAxLCAyLCAzLCA1LCA4LCAxMywgMjEsIDM0LCA1NSwgODksIDE0NCwgMjMzLCAzNzcsIDYxMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmliLmNhY2hlX2luZm8oKSwKKyAgICAgICAgICAgIGZ1bmN0b29scy5fQ2FjaGVJbmZvKGhpdHM9MjgsIG1pc3Nlcz0xNiwgbWF4c2l6ZT1Ob25lLCBjdXJyc2l6ZT0xNikpCisgICAgICAgIGZpYi5jYWNoZV9jbGVhcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmliLmNhY2hlX2luZm8oKSwKKyAgICAgICAgICAgIGZ1bmN0b29scy5fQ2FjaGVJbmZvKGhpdHM9MCwgbWlzc2VzPTAsIG1heHNpemU9Tm9uZSwgY3VycnNpemU9MCkpCisKICAgICBkZWYgdGVzdF9uZWVkX2Zvcl9ybG9jayhzZWxmKToKICAgICAgICAgIyBUaGlzIHdpbGwgZGVhZGxvY2sgb24gYW4gTFJVIGNhY2hlIHRoYXQgdXNlcyBhIHJlZ3VsYXIgbG9jawogCkBAIC04MDEsMTggKzEwNzUsNTIxIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdF9mdW5jKERvdWJsZUVxKDIpKSwgICAgIyBUcmlnZ2VyIGEgcmUtZW50cmFudCBfX2VxX18gY2FsbAogICAgICAgICAgICAgICAgICAgICAgICAgIERvdWJsZUVxKDIpKSAgICAgICAgICAgICAgICMgVmVyaWZ5IHRoZSBjb3JyZWN0IHJldHVybiB2YWx1ZQogCisgICAgZGVmIHRlc3RfZWFybHlfZGV0ZWN0aW9uX29mX2JhZF9jYWxsKHNlbGYpOgorICAgICAgICAjIElzc3VlICMyMjE4NAorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBAZnVuY3Rvb2xzLmxydV9jYWNoZQorICAgICAgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKworY2xhc3MgVGVzdFNpbmdsZURpc3BhdGNoKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9zaW1wbGVfb3ZlcmxvYWRzKHNlbGYpOgorICAgICAgICBAZnVuY3Rvb2xzLnNpbmdsZWRpc3BhdGNoCisgICAgICAgIGRlZiBnKG9iaik6CisgICAgICAgICAgICByZXR1cm4gImJhc2UiCisgICAgICAgIGRlZiBnX2ludChpKToKKyAgICAgICAgICAgIHJldHVybiAiaW50ZWdlciIKKyAgICAgICAgZy5yZWdpc3RlcihpbnQsIGdfaW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoInN0ciIpLCAiYmFzZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZygxKSwgImludGVnZXIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoWzEsMiwzXSksICJiYXNlIikKKworICAgIGRlZiB0ZXN0X21ybyhzZWxmKToKKyAgICAgICAgQGZ1bmN0b29scy5zaW5nbGVkaXNwYXRjaAorICAgICAgICBkZWYgZyhvYmopOgorICAgICAgICAgICAgcmV0dXJuICJiYXNlIgorICAgICAgICBjbGFzcyBBOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjbGFzcyBDKEEpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjbGFzcyBCKEEpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjbGFzcyBEKEMsIEIpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBkZWYgZ19BKGEpOgorICAgICAgICAgICAgcmV0dXJuICJBIgorICAgICAgICBkZWYgZ19CKGIpOgorICAgICAgICAgICAgcmV0dXJuICJCIgorICAgICAgICBnLnJlZ2lzdGVyKEEsIGdfQSkKKyAgICAgICAgZy5yZWdpc3RlcihCLCBnX0IpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhBKCkpLCAiQSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhCKCkpLCAiQiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhDKCkpLCAiQSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhEKCkpLCAiQiIpCisKKyAgICBkZWYgdGVzdF9yZWdpc3Rlcl9kZWNvcmF0b3Ioc2VsZik6CisgICAgICAgIEBmdW5jdG9vbHMuc2luZ2xlZGlzcGF0Y2gKKyAgICAgICAgZGVmIGcob2JqKToKKyAgICAgICAgICAgIHJldHVybiAiYmFzZSIKKyAgICAgICAgQGcucmVnaXN0ZXIoaW50KQorICAgICAgICBkZWYgZ19pbnQoaSk6CisgICAgICAgICAgICByZXR1cm4gImludCAlcyIgJSAoaSwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZygiIiksICJiYXNlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKDEyKSwgImludCAxMiIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZy5kaXNwYXRjaChpbnQpLCBnX2ludCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhnLmRpc3BhdGNoKG9iamVjdCksIGcuZGlzcGF0Y2goc3RyKSkKKyAgICAgICAgIyBOb3RlOiBpbiB0aGUgYXNzZXJ0IGFib3ZlIHRoaXMgaXMgbm90IGcuCisgICAgICAgICMgQHNpbmdsZWRpc3BhdGNoIHJldHVybnMgdGhlIHdyYXBwZXIuCisKKyAgICBkZWYgdGVzdF93cmFwcGluZ19hdHRyaWJ1dGVzKHNlbGYpOgorICAgICAgICBAZnVuY3Rvb2xzLnNpbmdsZWRpc3BhdGNoCisgICAgICAgIGRlZiBnKG9iaik6CisgICAgICAgICAgICAiU2ltcGxlIHRlc3QiCisgICAgICAgICAgICByZXR1cm4gIlRlc3QiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZy5fX25hbWVfXywgImciKQorICAgICAgICBpZiBzeXMuZmxhZ3Mub3B0aW1pemUgPCAyOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnLl9fZG9jX18sICJTaW1wbGUgdGVzdCIpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhkZWNpbWFsLCAncmVxdWlyZXMgX2RlY2ltYWwnKQorICAgIEBzdXBwb3J0LmNweXRob25fb25seQorICAgIGRlZiB0ZXN0X2NfY2xhc3NlcyhzZWxmKToKKyAgICAgICAgQGZ1bmN0b29scy5zaW5nbGVkaXNwYXRjaAorICAgICAgICBkZWYgZyhvYmopOgorICAgICAgICAgICAgcmV0dXJuICJiYXNlIgorICAgICAgICBAZy5yZWdpc3RlcihkZWNpbWFsLkRlY2ltYWxFeGNlcHRpb24pCisgICAgICAgIGRlZiBfKG9iaik6CisgICAgICAgICAgICByZXR1cm4gb2JqLmFyZ3MKKyAgICAgICAgc3VibiA9IGRlY2ltYWwuU3Vibm9ybWFsKCJFeHBvbmVudCA8IEVtaW4iKQorICAgICAgICBybmQgPSBkZWNpbWFsLlJvdW5kZWQoIk51bWJlciBnb3Qgcm91bmRlZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhzdWJuKSwgKCJFeHBvbmVudCA8IEVtaW4iLCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhybmQpLCAoIk51bWJlciBnb3Qgcm91bmRlZCIsKSkKKyAgICAgICAgQGcucmVnaXN0ZXIoZGVjaW1hbC5TdWJub3JtYWwpCisgICAgICAgIGRlZiBfKG9iaik6CisgICAgICAgICAgICByZXR1cm4gIlRvbyBzbWFsbCB0byBjYXJlLiIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKHN1Ym4pLCAiVG9vIHNtYWxsIHRvIGNhcmUuIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKHJuZCksICgiTnVtYmVyIGdvdCByb3VuZGVkIiwpKQorCisgICAgZGVmIHRlc3RfY29tcG9zZV9tcm8oc2VsZik6CisgICAgICAgICMgTm9uZSBvZiB0aGUgZXhhbXBsZXMgaW4gdGhpcyB0ZXN0IGRlcGVuZCBvbiBoYXlzdGFjayBvcmRlcmluZy4KKyAgICAgICAgYyA9IGNvbGxlY3Rpb25zCisgICAgICAgIG1ybyA9IGZ1bmN0b29scy5fY29tcG9zZV9tcm8KKyAgICAgICAgYmFzZXMgPSBbYy5TZXF1ZW5jZSwgYy5NdXRhYmxlTWFwcGluZywgYy5NYXBwaW5nLCBjLlNldF0KKyAgICAgICAgZm9yIGhheXN0YWNrIGluIHBlcm11dGF0aW9ucyhiYXNlcyk6CisgICAgICAgICAgICBtID0gbXJvKGRpY3QsIGhheXN0YWNrKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLCBbZGljdCwgYy5NdXRhYmxlTWFwcGluZywgYy5NYXBwaW5nLCBjLlNpemVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5JdGVyYWJsZSwgYy5Db250YWluZXIsIG9iamVjdF0pCisgICAgICAgIGJhc2VzID0gW2MuQ29udGFpbmVyLCBjLk1hcHBpbmcsIGMuTXV0YWJsZU1hcHBpbmcsIGMuT3JkZXJlZERpY3RdCisgICAgICAgIGZvciBoYXlzdGFjayBpbiBwZXJtdXRhdGlvbnMoYmFzZXMpOgorICAgICAgICAgICAgbSA9IG1ybyhjLkNoYWluTWFwLCBoYXlzdGFjaykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobSwgW2MuQ2hhaW5NYXAsIGMuTXV0YWJsZU1hcHBpbmcsIGMuTWFwcGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuU2l6ZWQsIGMuSXRlcmFibGUsIGMuQ29udGFpbmVyLCBvYmplY3RdKQorCisgICAgICAgICMgSWYgdGhlcmUncyBhIGdlbmVyaWMgZnVuY3Rpb24gd2l0aCBpbXBsZW1lbnRhdGlvbnMgcmVnaXN0ZXJlZCBmb3IKKyAgICAgICAgIyBib3RoIFNpemVkIGFuZCBDb250YWluZXIsIHBhc3NpbmcgYSBkZWZhdWx0ZGljdCB0byBpdCByZXN1bHRzIGluIGFuCisgICAgICAgICMgYW1iaWd1b3VzIGRpc3BhdGNoIHdoaWNoIHdpbGwgY2F1c2UgYSBSdW50aW1lRXJyb3IgKHNlZQorICAgICAgICAjIHRlc3RfbXJvX2NvbmZsaWN0cykuCisgICAgICAgIGJhc2VzID0gW2MuQ29udGFpbmVyLCBjLlNpemVkLCBzdHJdCisgICAgICAgIGZvciBoYXlzdGFjayBpbiBwZXJtdXRhdGlvbnMoYmFzZXMpOgorICAgICAgICAgICAgbSA9IG1ybyhjLmRlZmF1bHRkaWN0LCBbYy5TaXplZCwgYy5Db250YWluZXIsIHN0cl0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0sIFtjLmRlZmF1bHRkaWN0LCBkaWN0LCBjLlNpemVkLCBjLkNvbnRhaW5lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdF0pCisKKyAgICAgICAgIyBNdXRhYmxlU2VxdWVuY2UgYmVsb3cgaXMgcmVnaXN0ZXJlZCBkaXJlY3RseSBvbiBELiBJbiBvdGhlciB3b3JkcywgaXQKKyAgICAgICAgIyBwcmVjZWVkcyBNdXRhYmxlTWFwcGluZyB3aGljaCBtZWFucyBzaW5nbGUgZGlzcGF0Y2ggd2lsbCBhbHdheXMKKyAgICAgICAgIyBjaG9vc2UgTXV0YWJsZVNlcXVlbmNlIGhlcmUuCisgICAgICAgIGNsYXNzIEQoYy5kZWZhdWx0ZGljdCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGMuTXV0YWJsZVNlcXVlbmNlLnJlZ2lzdGVyKEQpCisgICAgICAgIGJhc2VzID0gW2MuTXV0YWJsZVNlcXVlbmNlLCBjLk11dGFibGVNYXBwaW5nXQorICAgICAgICBmb3IgaGF5c3RhY2sgaW4gcGVybXV0YXRpb25zKGJhc2VzKToKKyAgICAgICAgICAgIG0gPSBtcm8oRCwgYmFzZXMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0sIFtELCBjLk11dGFibGVTZXF1ZW5jZSwgYy5TZXF1ZW5jZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZGVmYXVsdGRpY3QsIGRpY3QsIGMuTXV0YWJsZU1hcHBpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLk1hcHBpbmcsIGMuU2l6ZWQsIGMuSXRlcmFibGUsIGMuQ29udGFpbmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0XSkKKworICAgICAgICAjIENvbnRhaW5lciBhbmQgQ2FsbGFibGUgYXJlIHJlZ2lzdGVyZWQgb24gZGlmZmVyZW50IGJhc2UgY2xhc3NlcyBhbmQKKyAgICAgICAgIyBhIGdlbmVyaWMgZnVuY3Rpb24gc3VwcG9ydGluZyBib3RoIHNob3VsZCBhbHdheXMgcGljayB0aGUgQ2FsbGFibGUKKyAgICAgICAgIyBpbXBsZW1lbnRhdGlvbiBpZiBhIEMgaW5zdGFuY2UgaXMgcGFzc2VkLgorICAgICAgICBjbGFzcyBDKGMuZGVmYXVsdGRpY3QpOgorICAgICAgICAgICAgZGVmIF9fY2FsbF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgYmFzZXMgPSBbYy5TaXplZCwgYy5DYWxsYWJsZSwgYy5Db250YWluZXIsIGMuTWFwcGluZ10KKyAgICAgICAgZm9yIGhheXN0YWNrIGluIHBlcm11dGF0aW9ucyhiYXNlcyk6CisgICAgICAgICAgICBtID0gbXJvKEMsIGhheXN0YWNrKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLCBbQywgYy5DYWxsYWJsZSwgYy5kZWZhdWx0ZGljdCwgZGljdCwgYy5NYXBwaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5TaXplZCwgYy5JdGVyYWJsZSwgYy5Db250YWluZXIsIG9iamVjdF0pCisKKyAgICBkZWYgdGVzdF9yZWdpc3Rlcl9hYmMoc2VsZik6CisgICAgICAgIGMgPSBjb2xsZWN0aW9ucworICAgICAgICBkID0geyJhIjogImIifQorICAgICAgICBsID0gWzEsIDIsIDNdCisgICAgICAgIHMgPSB7b2JqZWN0KCksIE5vbmV9CisgICAgICAgIGYgPSBmcm96ZW5zZXQocykKKyAgICAgICAgdCA9ICgxLCAyLCAzKQorICAgICAgICBAZnVuY3Rvb2xzLnNpbmdsZWRpc3BhdGNoCisgICAgICAgIGRlZiBnKG9iaik6CisgICAgICAgICAgICByZXR1cm4gImJhc2UiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhkKSwgImJhc2UiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcobCksICJiYXNlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKHMpLCAiYmFzZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhmKSwgImJhc2UiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcodCksICJiYXNlIikKKyAgICAgICAgZy5yZWdpc3RlcihjLlNpemVkLCBsYW1iZGEgb2JqOiAic2l6ZWQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZCksICJzaXplZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhsKSwgInNpemVkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKHMpLCAic2l6ZWQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZiksICJzaXplZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyh0KSwgInNpemVkIikKKyAgICAgICAgZy5yZWdpc3RlcihjLk11dGFibGVNYXBwaW5nLCBsYW1iZGEgb2JqOiAibXV0YWJsZW1hcHBpbmciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZCksICJtdXRhYmxlbWFwcGluZyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhsKSwgInNpemVkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKHMpLCAic2l6ZWQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZiksICJzaXplZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyh0KSwgInNpemVkIikKKyAgICAgICAgZy5yZWdpc3RlcihjLkNoYWluTWFwLCBsYW1iZGEgb2JqOiAiY2hhaW5tYXAiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZCksICJtdXRhYmxlbWFwcGluZyIpICAjIGlycmVsZXZhbnQgQUJDcyByZWdpc3RlcmVkCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhsKSwgInNpemVkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKHMpLCAic2l6ZWQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZiksICJzaXplZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyh0KSwgInNpemVkIikKKyAgICAgICAgZy5yZWdpc3RlcihjLk11dGFibGVTZXF1ZW5jZSwgbGFtYmRhIG9iajogIm11dGFibGVzZXF1ZW5jZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhkKSwgIm11dGFibGVtYXBwaW5nIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGwpLCAibXV0YWJsZXNlcXVlbmNlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKHMpLCAic2l6ZWQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZiksICJzaXplZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyh0KSwgInNpemVkIikKKyAgICAgICAgZy5yZWdpc3RlcihjLk11dGFibGVTZXQsIGxhbWJkYSBvYmo6ICJtdXRhYmxlc2V0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGQpLCAibXV0YWJsZW1hcHBpbmciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcobCksICJtdXRhYmxlc2VxdWVuY2UiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcocyksICJtdXRhYmxlc2V0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGYpLCAic2l6ZWQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcodCksICJzaXplZCIpCisgICAgICAgIGcucmVnaXN0ZXIoYy5NYXBwaW5nLCBsYW1iZGEgb2JqOiAibWFwcGluZyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhkKSwgIm11dGFibGVtYXBwaW5nIikgICMgbm90IHNwZWNpZmljIGVub3VnaAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcobCksICJtdXRhYmxlc2VxdWVuY2UiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcocyksICJtdXRhYmxlc2V0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGYpLCAic2l6ZWQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcodCksICJzaXplZCIpCisgICAgICAgIGcucmVnaXN0ZXIoYy5TZXF1ZW5jZSwgbGFtYmRhIG9iajogInNlcXVlbmNlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGQpLCAibXV0YWJsZW1hcHBpbmciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcobCksICJtdXRhYmxlc2VxdWVuY2UiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcocyksICJtdXRhYmxlc2V0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGYpLCAic2l6ZWQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcodCksICJzZXF1ZW5jZSIpCisgICAgICAgIGcucmVnaXN0ZXIoYy5TZXQsIGxhbWJkYSBvYmo6ICJzZXQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZCksICJtdXRhYmxlbWFwcGluZyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhsKSwgIm11dGFibGVzZXF1ZW5jZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhzKSwgIm11dGFibGVzZXQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZiksICJzZXQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcodCksICJzZXF1ZW5jZSIpCisgICAgICAgIGcucmVnaXN0ZXIoZGljdCwgbGFtYmRhIG9iajogImRpY3QiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZCksICJkaWN0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGwpLCAibXV0YWJsZXNlcXVlbmNlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKHMpLCAibXV0YWJsZXNldCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhmKSwgInNldCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyh0KSwgInNlcXVlbmNlIikKKyAgICAgICAgZy5yZWdpc3RlcihsaXN0LCBsYW1iZGEgb2JqOiAibGlzdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhkKSwgImRpY3QiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcobCksICJsaXN0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKHMpLCAibXV0YWJsZXNldCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhmKSwgInNldCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyh0KSwgInNlcXVlbmNlIikKKyAgICAgICAgZy5yZWdpc3RlcihzZXQsIGxhbWJkYSBvYmo6ICJjb25jcmV0ZS1zZXQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZCksICJkaWN0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGwpLCAibGlzdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhzKSwgImNvbmNyZXRlLXNldCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhmKSwgInNldCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyh0KSwgInNlcXVlbmNlIikKKyAgICAgICAgZy5yZWdpc3Rlcihmcm96ZW5zZXQsIGxhbWJkYSBvYmo6ICJmcm96ZW4tc2V0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGQpLCAiZGljdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhsKSwgImxpc3QiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcocyksICJjb25jcmV0ZS1zZXQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZiksICJmcm96ZW4tc2V0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKHQpLCAic2VxdWVuY2UiKQorICAgICAgICBnLnJlZ2lzdGVyKHR1cGxlLCBsYW1iZGEgb2JqOiAidHVwbGUiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZCksICJkaWN0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGwpLCAibGlzdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhzKSwgImNvbmNyZXRlLXNldCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhmKSwgImZyb3plbi1zZXQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcodCksICJ0dXBsZSIpCisKKyAgICBkZWYgdGVzdF9jM19hYmMoc2VsZik6CisgICAgICAgIGMgPSBjb2xsZWN0aW9ucworICAgICAgICBtcm8gPSBmdW5jdG9vbHMuX2MzX21ybworICAgICAgICBjbGFzcyBBKG9iamVjdCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGNsYXNzIEIoQSk6CisgICAgICAgICAgICBkZWYgX19sZW5fXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gMCAgICMgaW1wbGllcyBTaXplZAorICAgICAgICBAYy5Db250YWluZXIucmVnaXN0ZXIKKyAgICAgICAgY2xhc3MgQyhvYmplY3QpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjbGFzcyBEKG9iamVjdCk6CisgICAgICAgICAgICBwYXNzICAgIyB1bnJlbGF0ZWQKKyAgICAgICAgY2xhc3MgWChELCBDLCBCKToKKyAgICAgICAgICAgIGRlZiBfX2NhbGxfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzICAgIyBpbXBsaWVzIENhbGxhYmxlCisgICAgICAgIGV4cGVjdGVkID0gW1gsIGMuQ2FsbGFibGUsIEQsIEMsIGMuQ29udGFpbmVyLCBCLCBjLlNpemVkLCBBLCBvYmplY3RdCisgICAgICAgIGZvciBhYmNzIGluIHBlcm11dGF0aW9ucyhbYy5TaXplZCwgYy5DYWxsYWJsZSwgYy5Db250YWluZXJdKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXJvKFgsIGFiY3M9YWJjcyksIGV4cGVjdGVkKQorICAgICAgICAjIHVucmVsYXRlZCBBQkNzIGRvbid0IGFwcGVhciBpbiB0aGUgcmVzdWx0aW5nIE1STworICAgICAgICBtYW55X2FiY3MgPSBbYy5NYXBwaW5nLCBjLlNpemVkLCBjLkNhbGxhYmxlLCBjLkNvbnRhaW5lciwgYy5JdGVyYWJsZV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtcm8oWCwgYWJjcz1tYW55X2FiY3MpLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X2ZhbHNlX21ldGEoc2VsZik6CisgICAgICAgICMgc2VlIGlzc3VlMjM1NzIKKyAgICAgICAgY2xhc3MgTWV0YUEodHlwZSk6CisgICAgICAgICAgICBkZWYgX19sZW5fXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICBjbGFzcyBBKG1ldGFjbGFzcz1NZXRhQSk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGNsYXNzIEFBKEEpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBAZnVuY3Rvb2xzLnNpbmdsZWRpc3BhdGNoCisgICAgICAgIGRlZiBmdW4oYSk6CisgICAgICAgICAgICByZXR1cm4gJ2Jhc2UgQScKKyAgICAgICAgQGZ1bi5yZWdpc3RlcihBKQorICAgICAgICBkZWYgXyhhKToKKyAgICAgICAgICAgIHJldHVybiAnZnVuIEEnCisgICAgICAgIGFhID0gQUEoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZ1bihhYSksICdmdW4gQScpCisKKyAgICBkZWYgdGVzdF9tcm9fY29uZmxpY3RzKHNlbGYpOgorICAgICAgICBjID0gY29sbGVjdGlvbnMKKyAgICAgICAgQGZ1bmN0b29scy5zaW5nbGVkaXNwYXRjaAorICAgICAgICBkZWYgZyhhcmcpOgorICAgICAgICAgICAgcmV0dXJuICJiYXNlIgorICAgICAgICBjbGFzcyBPKGMuU2l6ZWQpOgorICAgICAgICAgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgbyA9IE8oKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcobyksICJiYXNlIikKKyAgICAgICAgZy5yZWdpc3RlcihjLkl0ZXJhYmxlLCBsYW1iZGEgYXJnOiAiaXRlcmFibGUiKQorICAgICAgICBnLnJlZ2lzdGVyKGMuQ29udGFpbmVyLCBsYW1iZGEgYXJnOiAiY29udGFpbmVyIikKKyAgICAgICAgZy5yZWdpc3RlcihjLlNpemVkLCBsYW1iZGEgYXJnOiAic2l6ZWQiKQorICAgICAgICBnLnJlZ2lzdGVyKGMuU2V0LCBsYW1iZGEgYXJnOiAic2V0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKG8pLCAic2l6ZWQiKQorICAgICAgICBjLkl0ZXJhYmxlLnJlZ2lzdGVyKE8pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhvKSwgInNpemVkIikgICAjIGJlY2F1c2UgaXQncyBleHBsaWNpdGx5IGluIF9fbXJvX18KKyAgICAgICAgYy5Db250YWluZXIucmVnaXN0ZXIoTykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKG8pLCAic2l6ZWQiKSAgICMgc2VlIGFib3ZlOiBTaXplZCBpcyBpbiBfX21yb19fCisgICAgICAgIGMuU2V0LnJlZ2lzdGVyKE8pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhvKSwgInNldCIpICAgICAjIGJlY2F1c2UgYy5TZXQgaXMgYSBzdWJjbGFzcyBvZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBjLlNpemVkIGFuZCBjLkNvbnRhaW5lcgorICAgICAgICBjbGFzcyBQOgorICAgICAgICAgICAgcGFzcworICAgICAgICBwID0gUCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhwKSwgImJhc2UiKQorICAgICAgICBjLkl0ZXJhYmxlLnJlZ2lzdGVyKFApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhwKSwgIml0ZXJhYmxlIikKKyAgICAgICAgYy5Db250YWluZXIucmVnaXN0ZXIoUCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IpIGFzIHJlX29uZToKKyAgICAgICAgICAgIGcocCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigKKyAgICAgICAgICAgIHN0cihyZV9vbmUuZXhjZXB0aW9uKSwKKyAgICAgICAgICAgICgoIkFtYmlndW91cyBkaXNwYXRjaDogPGNsYXNzICdjb2xsZWN0aW9ucy5hYmMuQ29udGFpbmVyJz4gIgorICAgICAgICAgICAgICAib3IgPGNsYXNzICdjb2xsZWN0aW9ucy5hYmMuSXRlcmFibGUnPiIpLAorICAgICAgICAgICAgICgiQW1iaWd1b3VzIGRpc3BhdGNoOiA8Y2xhc3MgJ2NvbGxlY3Rpb25zLmFiYy5JdGVyYWJsZSc+ICIKKyAgICAgICAgICAgICAgIm9yIDxjbGFzcyAnY29sbGVjdGlvbnMuYWJjLkNvbnRhaW5lcic+IikpLAorICAgICAgICApCisgICAgICAgIGNsYXNzIFEoYy5TaXplZCk6CisgICAgICAgICAgICBkZWYgX19sZW5fXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICBxID0gUSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhxKSwgInNpemVkIikKKyAgICAgICAgYy5JdGVyYWJsZS5yZWdpc3RlcihRKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcocSksICJzaXplZCIpICAgIyBiZWNhdXNlIGl0J3MgZXhwbGljaXRseSBpbiBfX21yb19fCisgICAgICAgIGMuU2V0LnJlZ2lzdGVyKFEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhxKSwgInNldCIpICAgICAjIGJlY2F1c2UgYy5TZXQgaXMgYSBzdWJjbGFzcyBvZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBjLlNpemVkIGFuZCBjLkl0ZXJhYmxlCisgICAgICAgIEBmdW5jdG9vbHMuc2luZ2xlZGlzcGF0Y2gKKyAgICAgICAgZGVmIGgoYXJnKToKKyAgICAgICAgICAgIHJldHVybiAiYmFzZSIKKyAgICAgICAgQGgucmVnaXN0ZXIoYy5TaXplZCkKKyAgICAgICAgZGVmIF8oYXJnKToKKyAgICAgICAgICAgIHJldHVybiAic2l6ZWQiCisgICAgICAgIEBoLnJlZ2lzdGVyKGMuQ29udGFpbmVyKQorICAgICAgICBkZWYgXyhhcmcpOgorICAgICAgICAgICAgcmV0dXJuICJjb250YWluZXIiCisgICAgICAgICMgRXZlbiB0aG91Z2ggU2l6ZWQgYW5kIENvbnRhaW5lciBhcmUgZXhwbGljaXQgYmFzZXMgb2YgTXV0YWJsZU1hcHBpbmcsCisgICAgICAgICMgdGhpcyBBQkMgaXMgaW1wbGljaXRseSByZWdpc3RlcmVkIG9uIGRlZmF1bHRkaWN0IHdoaWNoIG1ha2VzIGFsbCBvZgorICAgICAgICAjIE11dGFibGVNYXBwaW5nJ3MgYmFzZXMgaW1wbGljaXQgYXMgd2VsbCBmcm9tIGRlZmF1bHRkaWN0J3MKKyAgICAgICAgIyBwZXJzcGVjdGl2ZS4KKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IpIGFzIHJlX3R3bzoKKyAgICAgICAgICAgIGgoYy5kZWZhdWx0ZGljdChsYW1iZGE6IDApKQorICAgICAgICBzZWxmLmFzc2VydEluKAorICAgICAgICAgICAgc3RyKHJlX3R3by5leGNlcHRpb24pLAorICAgICAgICAgICAgKCgiQW1iaWd1b3VzIGRpc3BhdGNoOiA8Y2xhc3MgJ2NvbGxlY3Rpb25zLmFiYy5Db250YWluZXInPiAiCisgICAgICAgICAgICAgICJvciA8Y2xhc3MgJ2NvbGxlY3Rpb25zLmFiYy5TaXplZCc+IiksCisgICAgICAgICAgICAgKCJBbWJpZ3VvdXMgZGlzcGF0Y2g6IDxjbGFzcyAnY29sbGVjdGlvbnMuYWJjLlNpemVkJz4gIgorICAgICAgICAgICAgICAib3IgPGNsYXNzICdjb2xsZWN0aW9ucy5hYmMuQ29udGFpbmVyJz4iKSksCisgICAgICAgICkKKyAgICAgICAgY2xhc3MgUihjLmRlZmF1bHRkaWN0KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgYy5NdXRhYmxlU2VxdWVuY2UucmVnaXN0ZXIoUikKKyAgICAgICAgQGZ1bmN0b29scy5zaW5nbGVkaXNwYXRjaAorICAgICAgICBkZWYgaShhcmcpOgorICAgICAgICAgICAgcmV0dXJuICJiYXNlIgorICAgICAgICBAaS5yZWdpc3RlcihjLk11dGFibGVNYXBwaW5nKQorICAgICAgICBkZWYgXyhhcmcpOgorICAgICAgICAgICAgcmV0dXJuICJtYXBwaW5nIgorICAgICAgICBAaS5yZWdpc3RlcihjLk11dGFibGVTZXF1ZW5jZSkKKyAgICAgICAgZGVmIF8oYXJnKToKKyAgICAgICAgICAgIHJldHVybiAic2VxdWVuY2UiCisgICAgICAgIHIgPSBSKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpKHIpLCAic2VxdWVuY2UiKQorICAgICAgICBjbGFzcyBTOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjbGFzcyBUKFMsIGMuU2l6ZWQpOgorICAgICAgICAgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgdCA9IFQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGgodCksICJzaXplZCIpCisgICAgICAgIGMuQ29udGFpbmVyLnJlZ2lzdGVyKFQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaCh0KSwgInNpemVkIikgICAjIGJlY2F1c2UgaXQncyBleHBsaWNpdGx5IGluIHRoZSBNUk8KKyAgICAgICAgY2xhc3MgVToKKyAgICAgICAgICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgIHUgPSBVKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoKHUpLCAic2l6ZWQiKSAgICMgaW1wbGljaXQgU2l6ZWQgc3ViY2xhc3MgaW5mZXJyZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZnJvbSB0aGUgZXhpc3RlbmNlIG9mIF9fbGVuX18oKQorICAgICAgICBjLkNvbnRhaW5lci5yZWdpc3RlcihVKQorICAgICAgICAjIFRoZXJlIGlzIG5vIHByZWZlcmVuY2UgZm9yIHJlZ2lzdGVyZWQgdmVyc3VzIGluZmVycmVkIEFCQ3MuCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yKSBhcyByZV90aHJlZToKKyAgICAgICAgICAgIGgodSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigKKyAgICAgICAgICAgIHN0cihyZV90aHJlZS5leGNlcHRpb24pLAorICAgICAgICAgICAgKCgiQW1iaWd1b3VzIGRpc3BhdGNoOiA8Y2xhc3MgJ2NvbGxlY3Rpb25zLmFiYy5Db250YWluZXInPiAiCisgICAgICAgICAgICAgICJvciA8Y2xhc3MgJ2NvbGxlY3Rpb25zLmFiYy5TaXplZCc+IiksCisgICAgICAgICAgICAgKCJBbWJpZ3VvdXMgZGlzcGF0Y2g6IDxjbGFzcyAnY29sbGVjdGlvbnMuYWJjLlNpemVkJz4gIgorICAgICAgICAgICAgICAib3IgPGNsYXNzICdjb2xsZWN0aW9ucy5hYmMuQ29udGFpbmVyJz4iKSksCisgICAgICAgICkKKyAgICAgICAgY2xhc3MgVihjLlNpemVkLCBTKToKKyAgICAgICAgICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgIEBmdW5jdG9vbHMuc2luZ2xlZGlzcGF0Y2gKKyAgICAgICAgZGVmIGooYXJnKToKKyAgICAgICAgICAgIHJldHVybiAiYmFzZSIKKyAgICAgICAgQGoucmVnaXN0ZXIoUykKKyAgICAgICAgZGVmIF8oYXJnKToKKyAgICAgICAgICAgIHJldHVybiAicyIKKyAgICAgICAgQGoucmVnaXN0ZXIoYy5Db250YWluZXIpCisgICAgICAgIGRlZiBfKGFyZyk6CisgICAgICAgICAgICByZXR1cm4gImNvbnRhaW5lciIKKyAgICAgICAgdiA9IFYoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGoodiksICJzIikKKyAgICAgICAgYy5Db250YWluZXIucmVnaXN0ZXIoVikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChqKHYpLCAiY29udGFpbmVyIikgICAjIGJlY2F1c2UgaXQgZW5kcyB1cCByaWdodCBhZnRlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgU2l6ZWQgaW4gdGhlIE1STworCisgICAgZGVmIHRlc3RfY2FjaGVfaW52YWxpZGF0aW9uKHNlbGYpOgorICAgICAgICBmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBVc2VyRGljdAorICAgICAgICBjbGFzcyBUcmFjaW5nRGljdChVc2VyRGljdCk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgICAgICAgICBzdXBlcihUcmFjaW5nRGljdCwgc2VsZikuX19pbml0X18oKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICAgICAgICAgIHNlbGYuc2V0X29wcyA9IFtdCisgICAgICAgICAgICAgICAgc2VsZi5nZXRfb3BzID0gW10KKyAgICAgICAgICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBrZXkpOgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuZGF0YVtrZXldCisgICAgICAgICAgICAgICAgc2VsZi5nZXRfb3BzLmFwcGVuZChrZXkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAorICAgICAgICAgICAgZGVmIF9fc2V0aXRlbV9fKHNlbGYsIGtleSwgdmFsdWUpOgorICAgICAgICAgICAgICAgIHNlbGYuc2V0X29wcy5hcHBlbmQoa2V5KQorICAgICAgICAgICAgICAgIHNlbGYuZGF0YVtrZXldID0gdmFsdWUKKyAgICAgICAgICAgIGRlZiBjbGVhcihzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLmRhdGEuY2xlYXIoKQorICAgICAgICBfb3JpZ193a2QgPSBmdW5jdG9vbHMuV2Vha0tleURpY3Rpb25hcnkKKyAgICAgICAgdGQgPSBUcmFjaW5nRGljdCgpCisgICAgICAgIGZ1bmN0b29scy5XZWFrS2V5RGljdGlvbmFyeSA9IGxhbWJkYTogdGQKKyAgICAgICAgYyA9IGNvbGxlY3Rpb25zCisgICAgICAgIEBmdW5jdG9vbHMuc2luZ2xlZGlzcGF0Y2gKKyAgICAgICAgZGVmIGcoYXJnKToKKyAgICAgICAgICAgIHJldHVybiAiYmFzZSIKKyAgICAgICAgZCA9IHt9CisgICAgICAgIGwgPSBbXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0ZCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhkKSwgImJhc2UiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0ZCksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGQuZ2V0X29wcywgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGQuc2V0X29wcywgW2RpY3RdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRkLmRhdGFbZGljdF0sIGcucmVnaXN0cnlbb2JqZWN0XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGwpLCAiYmFzZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHRkKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZC5nZXRfb3BzLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZC5zZXRfb3BzLCBbZGljdCwgbGlzdF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGQuZGF0YVtkaWN0XSwgZy5yZWdpc3RyeVtvYmplY3RdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRkLmRhdGFbbGlzdF0sIGcucmVnaXN0cnlbb2JqZWN0XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZC5kYXRhW2RpY3RdLCB0ZC5kYXRhW2xpc3RdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcobCksICJiYXNlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGQpLCAiYmFzZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGQuZ2V0X29wcywgW2xpc3QsIGRpY3RdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRkLnNldF9vcHMsIFtkaWN0LCBsaXN0XSkKKyAgICAgICAgZy5yZWdpc3RlcihsaXN0LCBsYW1iZGEgYXJnOiAibGlzdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGQuZ2V0X29wcywgW2xpc3QsIGRpY3RdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0ZCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhkKSwgImJhc2UiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0ZCksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGQuZ2V0X29wcywgW2xpc3QsIGRpY3RdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRkLnNldF9vcHMsIFtkaWN0LCBsaXN0LCBkaWN0XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZC5kYXRhW2RpY3RdLAorICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0b29scy5fZmluZF9pbXBsKGRpY3QsIGcucmVnaXN0cnkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcobCksICJsaXN0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odGQpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRkLmdldF9vcHMsIFtsaXN0LCBkaWN0XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZC5zZXRfb3BzLCBbZGljdCwgbGlzdCwgZGljdCwgbGlzdF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGQuZGF0YVtsaXN0XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdG9vbHMuX2ZpbmRfaW1wbChsaXN0LCBnLnJlZ2lzdHJ5KSkKKyAgICAgICAgY2xhc3MgWDoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgYy5NdXRhYmxlTWFwcGluZy5yZWdpc3RlcihYKSAgICMgV2lsbCBub3QgaW52YWxpZGF0ZSB0aGUgY2FjaGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG5vdCB1c2luZyBBQkNzIHlldC4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGQpLCAiYmFzZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhsKSwgImxpc3QiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRkLmdldF9vcHMsIFtsaXN0LCBkaWN0LCBkaWN0LCBsaXN0XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZC5zZXRfb3BzLCBbZGljdCwgbGlzdCwgZGljdCwgbGlzdF0pCisgICAgICAgIGcucmVnaXN0ZXIoYy5TaXplZCwgbGFtYmRhIGFyZzogInNpemVkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odGQpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZCksICJzaXplZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHRkKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZC5nZXRfb3BzLCBbbGlzdCwgZGljdCwgZGljdCwgbGlzdF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGQuc2V0X29wcywgW2RpY3QsIGxpc3QsIGRpY3QsIGxpc3QsIGRpY3RdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcobCksICJsaXN0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odGQpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRkLmdldF9vcHMsIFtsaXN0LCBkaWN0LCBkaWN0LCBsaXN0XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZC5zZXRfb3BzLCBbZGljdCwgbGlzdCwgZGljdCwgbGlzdCwgZGljdCwgbGlzdF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhsKSwgImxpc3QiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZCksICJzaXplZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGQuZ2V0X29wcywgW2xpc3QsIGRpY3QsIGRpY3QsIGxpc3QsIGxpc3QsIGRpY3RdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRkLnNldF9vcHMsIFtkaWN0LCBsaXN0LCBkaWN0LCBsaXN0LCBkaWN0LCBsaXN0XSkKKyAgICAgICAgZy5kaXNwYXRjaChsaXN0KQorICAgICAgICBnLmRpc3BhdGNoKGRpY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGQuZ2V0X29wcywgW2xpc3QsIGRpY3QsIGRpY3QsIGxpc3QsIGxpc3QsIGRpY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QsIGRpY3RdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRkLnNldF9vcHMsIFtkaWN0LCBsaXN0LCBkaWN0LCBsaXN0LCBkaWN0LCBsaXN0XSkKKyAgICAgICAgYy5NdXRhYmxlU2V0LnJlZ2lzdGVyKFgpICAgICAgICMgV2lsbCBpbnZhbGlkYXRlIHRoZSBjYWNoZS4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odGQpLCAyKSAgICMgU3RhbGUgY2FjaGUuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhsKSwgImxpc3QiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0ZCksIDEpCisgICAgICAgIGcucmVnaXN0ZXIoYy5NdXRhYmxlTWFwcGluZywgbGFtYmRhIGFyZzogIm11dGFibGVtYXBwaW5nIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odGQpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZCksICJtdXRhYmxlbWFwcGluZyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHRkKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGwpLCAibGlzdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHRkKSwgMikKKyAgICAgICAgZy5yZWdpc3RlcihkaWN0LCBsYW1iZGEgYXJnOiAiZGljdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhkKSwgImRpY3QiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcobCksICJsaXN0IikKKyAgICAgICAgZy5fY2xlYXJfY2FjaGUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0ZCksIDApCisgICAgICAgIGZ1bmN0b29scy5XZWFrS2V5RGljdGlvbmFyeSA9IF9vcmlnX3drZAorCiAKIGRlZiB0ZXN0X21haW4odmVyYm9zZT1Ob25lKToKICAgICB0ZXN0X2NsYXNzZXMgPSAoCi0gICAgICAgIFRlc3RQYXJ0aWFsLAotICAgICAgICBUZXN0UGFydGlhbFN1YmNsYXNzLAotICAgICAgICBUZXN0UHl0aG9uUGFydGlhbCwKKyAgICAgICAgVGVzdFBhcnRpYWxDLAorICAgICAgICBUZXN0UGFydGlhbFB5LAorICAgICAgICBUZXN0UGFydGlhbENTdWJjbGFzcywKKyAgICAgICAgVGVzdFBhcnRpYWxNZXRob2QsCiAgICAgICAgIFRlc3RVcGRhdGVXcmFwcGVyLAogICAgICAgICBUZXN0VG90YWxPcmRlcmluZywKLSAgICAgICAgVGVzdENtcFRvS2V5LAorICAgICAgICBUZXN0Q21wVG9LZXlDLAorICAgICAgICBUZXN0Q21wVG9LZXlQeSwKICAgICAgICAgVGVzdFdyYXBzLAogICAgICAgICBUZXN0UmVkdWNlLAogICAgICAgICBUZXN0TFJVLAorICAgICAgICBUZXN0U2luZ2xlRGlzcGF0Y2gsCiAgICAgKQogICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KCp0ZXN0X2NsYXNzZXMpCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZnV0dXJlLnB5IGIvTGliL3Rlc3QvdGVzdF9mdXR1cmUucHkKaW5kZXggYTBjMTU2Zi4uYmVhYzk5MyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9mdXR1cmUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9mdXR1cmUucHkKQEAgLTgyLDYgKzgyLDE0IEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLmZhaWwoImV4cGVjdGVkIGV4Y2VwdGlvbiBkaWRuJ3Qgb2NjdXIiKQogCisgICAgZGVmIHRlc3RfYmFkZnV0dXJlMTAoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZyb20gdGVzdCBpbXBvcnQgYmFkc3ludGF4X2Z1dHVyZTEwCisgICAgICAgIGV4Y2VwdCBTeW50YXhFcnJvciBhcyBtc2c6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF9lcnJvcl9sb2NhdGlvbihtc2cpLCAoImJhZHN5bnRheF9mdXR1cmUxMCIsICczJykpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoImV4cGVjdGVkIGV4Y2VwdGlvbiBkaWRuJ3Qgb2NjdXIiKQorCiAgICAgZGVmIHRlc3RfcGFyc2VyaGFjayhzZWxmKToKICAgICAgICAgIyB0ZXN0IHRoYXQgdGhlIHBhcnNlci5jOjpmdXR1cmVfaGFjayBmdW5jdGlvbiB3b3JrcyBhcyBleHBlY3RlZAogICAgICAgICAjIE5vdGU6IGFsdGhvdWdoIHRoaXMgdGVzdCBtdXN0IHBhc3MsIGl0J3Mgbm90IHRlc3RpbmcgdGhlIG9yaWdpbmFsCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2djLnB5IGIvTGliL3Rlc3QvdGVzdF9nYy5weQppbmRleCBjNTliNzJlLi4yYWMxZDRiIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2djLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZ2MucHkKQEAgLTEsNiArMSw4IEBACiBpbXBvcnQgdW5pdHRlc3QKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCAodmVyYm9zZSwgcmVmY291bnRfdGVzdCwgcnVuX3VuaXR0ZXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmlwX3B5dGhvbl9zdGRlcnIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaXBfcHl0aG9uX3N0ZGVyciwgY3B5dGhvbl9vbmx5LCBzdGFydF90aHJlYWRzKQorZnJvbSB0ZXN0LnNjcmlwdF9oZWxwZXIgaW1wb3J0IGFzc2VydF9weXRob25fb2ssIG1ha2Vfc2NyaXB0LCB0ZW1wX2RpcgorCiBpbXBvcnQgc3lzCiBpbXBvcnQgdGltZQogaW1wb3J0IGdjCkBAIC0xMSw2ICsxMywxNSBAQAogZXhjZXB0IEltcG9ydEVycm9yOgogICAgIHRocmVhZGluZyA9IE5vbmUKIAordHJ5OgorICAgIGZyb20gX3Rlc3RjYXBpIGltcG9ydCB3aXRoX3RwX2RlbAorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGRlZiB3aXRoX3RwX2RlbChjbHMpOgorICAgICAgICBjbGFzcyBDKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19uZXdfXyhjbHMsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdyZXF1aXJlcyBfdGVzdGNhcGkud2l0aF90cF9kZWwnKQorICAgICAgICByZXR1cm4gQworCiAjIyMgU3VwcG9ydCBjb2RlCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKQEAgLTM4LDYgKzQ5LDcgQEAKICAgICAgICAgIyBnYyBjb2xsZWN0cyBpdC4KICAgICAgICAgc2VsZi53ciA9IHdlYWtyZWYucmVmKEMxMDU1ODIwKDY2NiksIGl0X2hhcHBlbmVkKQogCitAd2l0aF90cF9kZWwKIGNsYXNzIFVuY29sbGVjdGFibGUob2JqZWN0KToKICAgICAiIiJDcmVhdGUgYSByZWZlcmVuY2UgY3ljbGUgd2l0aCBtdWx0aXBsZSBfX2RlbF9fIG1ldGhvZHMuCiAKQEAgLTUwLDcgKzYyLDcgQEAKICAgICAgICAgICAgIHNlbGYucGFydG5lciA9IFVuY29sbGVjdGFibGUocGFydG5lcj1zZWxmKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5wYXJ0bmVyID0gcGFydG5lcgotICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgIGRlZiBfX3RwX2RlbF9fKHNlbGYpOgogICAgICAgICBwYXNzCiAKICMjIyBUZXN0cwpAQCAtMTM5LDExICsxNTEsMTMgQEAKICAgICAgICAgZGVsIGEKICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChnYy5jb2xsZWN0KCksIDApCiAKLSAgICBkZWYgdGVzdF9maW5hbGl6ZXIoc2VsZik6CisgICAgQGNweXRob25fb25seQorICAgIGRlZiB0ZXN0X2xlZ2FjeV9maW5hbGl6ZXIoc2VsZik6CiAgICAgICAgICMgQSgpIGlzIHVuY29sbGVjdGFibGUgaWYgaXQgaXMgcGFydCBvZiBhIGN5Y2xlLCBtYWtlIHN1cmUgaXQgc2hvd3MgdXAKICAgICAgICAgIyBpbiBnYy5nYXJiYWdlLgorICAgICAgICBAd2l0aF90cF9kZWwKICAgICAgICAgY2xhc3MgQToKLSAgICAgICAgICAgIGRlZiBfX2RlbF9fKHNlbGYpOiBwYXNzCisgICAgICAgICAgICBkZWYgX190cF9kZWxfXyhzZWxmKTogcGFzcwogICAgICAgICBjbGFzcyBCOgogICAgICAgICAgICAgcGFzcwogICAgICAgICBhID0gQSgpCkBAIC0xNjMsMTEgKzE3NywxMyBAQAogICAgICAgICAgICAgc2VsZi5mYWlsKCJkaWRuJ3QgZmluZCBvYmogaW4gZ2FyYmFnZSAoZmluYWxpemVyKSIpCiAgICAgICAgIGdjLmdhcmJhZ2UucmVtb3ZlKG9iaikKIAotICAgIGRlZiB0ZXN0X2ZpbmFsaXplcl9uZXdjbGFzcyhzZWxmKToKKyAgICBAY3B5dGhvbl9vbmx5CisgICAgZGVmIHRlc3RfbGVnYWN5X2ZpbmFsaXplcl9uZXdjbGFzcyhzZWxmKToKICAgICAgICAgIyBBKCkgaXMgdW5jb2xsZWN0YWJsZSBpZiBpdCBpcyBwYXJ0IG9mIGEgY3ljbGUsIG1ha2Ugc3VyZSBpdCBzaG93cyB1cAogICAgICAgICAjIGluIGdjLmdhcmJhZ2UuCisgICAgICAgIEB3aXRoX3RwX2RlbAogICAgICAgICBjbGFzcyBBKG9iamVjdCk6Ci0gICAgICAgICAgICBkZWYgX19kZWxfXyhzZWxmKTogcGFzcworICAgICAgICAgICAgZGVmIF9fdHBfZGVsX18oc2VsZik6IHBhc3MKICAgICAgICAgY2xhc3MgQihvYmplY3QpOgogICAgICAgICAgICAgcGFzcwogICAgICAgICBhID0gQSgpCkBAIC0zODEsMTcgKzM5NywxMyBAQAogICAgICAgICBvbGRfc3dpdGNoaW50ZXJ2YWwgPSBzeXMuZ2V0c3dpdGNoaW50ZXJ2YWwoKQogICAgICAgICBzeXMuc2V0c3dpdGNoaW50ZXJ2YWwoMWUtNSkKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgZXhpdCA9IEZhbHNlCisgICAgICAgICAgICBleGl0ID0gW10KICAgICAgICAgICAgIHRocmVhZHMgPSBbXQogICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoTl9USFJFQURTKToKICAgICAgICAgICAgICAgICB0ID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9cnVuX3RocmVhZCkKICAgICAgICAgICAgICAgICB0aHJlYWRzLmFwcGVuZCh0KQotICAgICAgICAgICAgZm9yIHQgaW4gdGhyZWFkczoKLSAgICAgICAgICAgICAgICB0LnN0YXJ0KCkKLSAgICAgICAgICAgIHRpbWUuc2xlZXAoMS4wKQotICAgICAgICAgICAgZXhpdCA9IFRydWUKLSAgICAgICAgICAgIGZvciB0IGluIHRocmVhZHM6Ci0gICAgICAgICAgICAgICAgdC5qb2luKCkKKyAgICAgICAgICAgIHdpdGggc3RhcnRfdGhyZWFkcyh0aHJlYWRzLCBsYW1iZGE6IGV4aXQuYXBwZW5kKDEpKToKKyAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDEuMCkKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIHN5cy5zZXRzd2l0Y2hpbnRlcnZhbChvbGRfc3dpdGNoaW50ZXJ2YWwpCiAgICAgICAgIGdjLmNvbGxlY3QoKQpAQCAtNTY0LDE2ICs1NzYsNTEgQEAKICAgICAgICAgICAgICMgd291bGQgYmUgZGFtYWdlZCwgd2l0aCBhbiBlbXB0eSBfX2RpY3RfXy4KICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgTm9uZSkKIAorICAgIGRlZiB0ZXN0X2J1ZzIxNDM1KHNlbGYpOgorICAgICAgICAjIFRoaXMgaXMgYSBwb29yIHRlc3QgLSBpdHMgb25seSB2aXJ0dWUgaXMgdGhhdCBpdCBoYXBwZW5lZCB0bworICAgICAgICAjIHNlZ2ZhdWx0IG9uIFRpbSdzIFdpbmRvd3MgYm94IGJlZm9yZSB0aGUgcGF0Y2ggZm9yIDIxNDM1IHdhcworICAgICAgICAjIGFwcGxpZWQuICBUaGF0J3MgYSBuYXN0eSBidWcgcmVseWluZyBvbiBzcGVjaWZpYyBwaWVjZXMgb2YgY3ljbGljCisgICAgICAgICMgdHJhc2ggYXBwZWFyaW5nIGluIGV4YWN0bHkgdGhlIHJpZ2h0IG9yZGVyIGluIGZpbmFsaXplX2dhcmJhZ2UoKSdzCisgICAgICAgICMgaW5wdXQgbGlzdC4KKyAgICAgICAgIyBCdXQgdGhlcmUncyBubyByZWxpYWJsZSB3YXkgdG8gZm9yY2UgdGhhdCBvcmRlciBmcm9tIFB5dGhvbiBjb2RlLAorICAgICAgICAjIHNvIG92ZXIgdGltZSBjaGFuY2VzIGFyZSBnb29kIHRoaXMgdGVzdCB3b24ndCByZWFsbHkgYmUgdGVzdGluZyBtdWNoCisgICAgICAgICMgb2YgYW55dGhpbmcgYW55bW9yZS4gIFN0aWxsLCBpZiBpdCBibG93cyB1cCwgdGhlcmUncyBfc29tZV8KKyAgICAgICAgIyBwcm9ibGVtIDstKQorICAgICAgICBnYy5jb2xsZWN0KCkKKworICAgICAgICBjbGFzcyBBOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGNsYXNzIEI6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgeCk6CisgICAgICAgICAgICAgICAgc2VsZi54ID0geAorCisgICAgICAgICAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLmF0dHIgPSBOb25lCisKKyAgICAgICAgZGVmIGRvX3dvcmsoKToKKyAgICAgICAgICAgIGEgPSBBKCkKKyAgICAgICAgICAgIGIgPSBCKEEoKSkKKworICAgICAgICAgICAgYS5hdHRyID0gYgorICAgICAgICAgICAgYi5hdHRyID0gYQorCisgICAgICAgIGRvX3dvcmsoKQorICAgICAgICBnYy5jb2xsZWN0KCkgIyB0aGlzIGJsb3dzIHVwIChiYWQgQyBwb2ludGVyKSB3aGVuIGl0IGZhaWxzCisKKyAgICBAY3B5dGhvbl9vbmx5CiAgICAgZGVmIHRlc3RfZ2FyYmFnZV9hdF9zaHV0ZG93bihzZWxmKToKICAgICAgICAgaW1wb3J0IHN1YnByb2Nlc3MKICAgICAgICAgY29kZSA9ICIiImlmIDE6CiAgICAgICAgICAgICBpbXBvcnQgZ2MKKyAgICAgICAgICAgIGltcG9ydCBfdGVzdGNhcGkKKyAgICAgICAgICAgIEBfdGVzdGNhcGkud2l0aF90cF9kZWwKICAgICAgICAgICAgIGNsYXNzIFg6CiAgICAgICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUpOgogICAgICAgICAgICAgICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCiAgICAgICAgICAgICAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gIjxYICUlcj4iICUlIHNlbGYubmFtZQotICAgICAgICAgICAgICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIGRlZiBfX3RwX2RlbF9fKHNlbGYpOgogICAgICAgICAgICAgICAgICAgICBwYXNzCiAKICAgICAgICAgICAgIHggPSBYKCdmaXJzdCcpCkBAIC02MTAsNiArNjU3LDY2IEBACiAgICAgICAgIHN0ZGVyciA9IHJ1bl9jb21tYW5kKGNvZGUgJSAiZ2MuREVCVUdfU0FWRUFMTCIpCiAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oYiJ1bmNvbGxlY3RhYmxlIG9iamVjdHMgYXQgc2h1dGRvd24iLCBzdGRlcnIpCiAKKyAgICBkZWYgdGVzdF9nY19tYWluX21vZHVsZV9hdF9zaHV0ZG93bihzZWxmKToKKyAgICAgICAgIyBDcmVhdGUgYSByZWZlcmVuY2UgY3ljbGUgdGhyb3VnaCB0aGUgX19tYWluX18gbW9kdWxlIGFuZCBjaGVjaworICAgICAgICAjIGl0IGdldHMgY29sbGVjdGVkIGF0IGludGVycHJldGVyIHNodXRkb3duLgorICAgICAgICBjb2RlID0gIiIiaWYgMToKKyAgICAgICAgICAgIGltcG9ydCB3ZWFrcmVmCisgICAgICAgICAgICBjbGFzcyBDOgorICAgICAgICAgICAgICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICBwcmludCgnX19kZWxfXyBjYWxsZWQnKQorICAgICAgICAgICAgbCA9IFtDKCldCisgICAgICAgICAgICBsLmFwcGVuZChsKQorICAgICAgICAgICAgIiIiCisgICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soJy1jJywgY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQuc3RyaXAoKSwgYidfX2RlbF9fIGNhbGxlZCcpCisKKyAgICBkZWYgdGVzdF9nY19vcmRpbmFyeV9tb2R1bGVfYXRfc2h1dGRvd24oc2VsZik6CisgICAgICAgICMgU2FtZSBhcyBhYm92ZSwgYnV0IHdpdGggYSBub24tX19tYWluX18gbW9kdWxlLgorICAgICAgICB3aXRoIHRlbXBfZGlyKCkgYXMgc2NyaXB0X2RpcjoKKyAgICAgICAgICAgIG1vZHVsZSA9ICIiImlmIDE6CisgICAgICAgICAgICAgICAgaW1wb3J0IHdlYWtyZWYKKyAgICAgICAgICAgICAgICBjbGFzcyBDOgorICAgICAgICAgICAgICAgICAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCdfX2RlbF9fIGNhbGxlZCcpCisgICAgICAgICAgICAgICAgbCA9IFtDKCldCisgICAgICAgICAgICAgICAgbC5hcHBlbmQobCkKKyAgICAgICAgICAgICAgICAiIiIKKyAgICAgICAgICAgIGNvZGUgPSAiIiJpZiAxOgorICAgICAgICAgICAgICAgIGltcG9ydCBzeXMKKyAgICAgICAgICAgICAgICBzeXMucGF0aC5pbnNlcnQoMCwgJXIpCisgICAgICAgICAgICAgICAgaW1wb3J0IGdjdGVzdAorICAgICAgICAgICAgICAgICIiIiAlIChzY3JpcHRfZGlyLCkKKyAgICAgICAgICAgIG1ha2Vfc2NyaXB0KHNjcmlwdF9kaXIsICdnY3Rlc3QnLCBtb2R1bGUpCisgICAgICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCctYycsIGNvZGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dC5zdHJpcCgpLCBiJ19fZGVsX18gY2FsbGVkJykKKworICAgIGRlZiB0ZXN0X2dldF9zdGF0cyhzZWxmKToKKyAgICAgICAgc3RhdHMgPSBnYy5nZXRfc3RhdHMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzdGF0cyksIDMpCisgICAgICAgIGZvciBzdCBpbiBzdGF0czoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzdCwgZGljdCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KHN0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyJjb2xsZWN0ZWQiLCAiY29sbGVjdGlvbnMiLCAidW5jb2xsZWN0YWJsZSJ9KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoc3RbImNvbGxlY3RlZCJdLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoc3RbImNvbGxlY3Rpb25zIl0sIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChzdFsidW5jb2xsZWN0YWJsZSJdLCAwKQorICAgICAgICAjIENoZWNrIHRoYXQgY29sbGVjdGlvbiBjb3VudHMgYXJlIGluY3JlbWVudGVkIGNvcnJlY3RseQorICAgICAgICBpZiBnYy5pc2VuYWJsZWQoKToKKyAgICAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChnYy5lbmFibGUpCisgICAgICAgICAgICBnYy5kaXNhYmxlKCkKKyAgICAgICAgb2xkID0gZ2MuZ2V0X3N0YXRzKCkKKyAgICAgICAgZ2MuY29sbGVjdCgwKQorICAgICAgICBuZXcgPSBnYy5nZXRfc3RhdHMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld1swXVsiY29sbGVjdGlvbnMiXSwgb2xkWzBdWyJjb2xsZWN0aW9ucyJdICsgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXdbMV1bImNvbGxlY3Rpb25zIl0sIG9sZFsxXVsiY29sbGVjdGlvbnMiXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXdbMl1bImNvbGxlY3Rpb25zIl0sIG9sZFsyXVsiY29sbGVjdGlvbnMiXSkKKyAgICAgICAgZ2MuY29sbGVjdCgyKQorICAgICAgICBuZXcgPSBnYy5nZXRfc3RhdHMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld1swXVsiY29sbGVjdGlvbnMiXSwgb2xkWzBdWyJjb2xsZWN0aW9ucyJdICsgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXdbMV1bImNvbGxlY3Rpb25zIl0sIG9sZFsxXVsiY29sbGVjdGlvbnMiXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXdbMl1bImNvbGxlY3Rpb25zIl0sIG9sZFsyXVsiY29sbGVjdGlvbnMiXSArIDEpCisKIAogY2xhc3MgR0NDYWxsYmFja1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgc2V0VXAoc2VsZik6CkBAIC02OTYsNiArODAzLDcgQEAKICAgICAgICAgICAgIGluZm8gPSB2WzJdCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm9bImdlbmVyYXRpb24iXSwgMikKIAorICAgIEBjcHl0aG9uX29ubHkKICAgICBkZWYgdGVzdF9jb2xsZWN0X2dhcmJhZ2Uoc2VsZik6CiAgICAgICAgIHNlbGYucHJlY2xlYW4oKQogICAgICAgICAjIEVhY2ggb2YgdGhlc2UgY2F1c2UgZm91ciBvYmplY3RzIHRvIGJlIGdhcmJhZ2U6IFR3bwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9nZGIucHkgYi9MaWIvdGVzdC90ZXN0X2dkYi5weQppbmRleCA4NDY0MjJiLi5iNTAxN2I5IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2dkYi5weQorKysgYi9MaWIvdGVzdC90ZXN0X2dkYi5weQpAQCAtNSw2ICs1LDcgQEAKIAogaW1wb3J0IG9zCiBpbXBvcnQgcmUKK2ltcG9ydCBwcHJpbnQKIGltcG9ydCBzdWJwcm9jZXNzCiBpbXBvcnQgc3lzCiBpbXBvcnQgc3lzY29uZmlnCkBAIC0xNywyMSArMTgsMzcgQEAKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICBfdGhyZWFkID0gTm9uZQogCitmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIGZpbmRmaWxlLCBweXRob25faXNfb3B0aW1pemVkCiAKLXRyeToKLSAgICBnZGJfdmVyc2lvbiwgXyA9IHN1YnByb2Nlc3MuUG9wZW4oWyJnZGIiLCAiLS12ZXJzaW9uIl0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpLmNvbW11bmljYXRlKCkKLWV4Y2VwdCBPU0Vycm9yOgotICAgICMgVGhpcyBpcyB3aGF0ICJubyBnZGIiIGxvb2tzIGxpa2UuICBUaGVyZSBtYXksIGhvd2V2ZXIsIGJlIG90aGVyCi0gICAgIyBlcnJvcnMgdGhhdCBtYW5pZmVzdCB0aGlzIHdheSB0b28uCi0gICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIkNvdWxkbid0IGZpbmQgZ2RiIG9uIHRoZSBwYXRoIikKLWdkYl92ZXJzaW9uX251bWJlciA9IHJlLnNlYXJjaChiIl5HTlUgZ2RiIFteXGRdKihcZCspXC4oXGQpIiwgZ2RiX3ZlcnNpb24pCi1nZGJfbWFqb3JfdmVyc2lvbiA9IGludChnZGJfdmVyc2lvbl9udW1iZXIuZ3JvdXAoMSkpCi1nZGJfbWlub3JfdmVyc2lvbiA9IGludChnZGJfdmVyc2lvbl9udW1iZXIuZ3JvdXAoMikpCitkZWYgZ2V0X2dkYl92ZXJzaW9uKCk6CisgICAgdHJ5OgorICAgICAgICBwcm9jID0gc3VicHJvY2Vzcy5Qb3BlbihbImdkYiIsICItbngiLCAiLS12ZXJzaW9uIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXZlcnNhbF9uZXdsaW5lcz1UcnVlKQorICAgICAgICB3aXRoIHByb2M6CisgICAgICAgICAgICB2ZXJzaW9uID0gcHJvYy5jb21tdW5pY2F0ZSgpWzBdCisgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICMgVGhpcyBpcyB3aGF0ICJubyBnZGIiIGxvb2tzIGxpa2UuICBUaGVyZSBtYXksIGhvd2V2ZXIsIGJlIG90aGVyCisgICAgICAgICMgZXJyb3JzIHRoYXQgbWFuaWZlc3QgdGhpcyB3YXkgdG9vLgorICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiQ291bGRuJ3QgZmluZCBnZGIgb24gdGhlIHBhdGgiKQorCisgICAgIyBSZWdleCB0byBwYXJzZToKKyAgICAjICdHTlUgZ2RiIChHREI7IFNVU0UgTGludXggRW50ZXJwcmlzZSAxMikgNy43XG4nIC0+IDcuNworICAgICMgJ0dOVSBnZGIgKEdEQikgRmVkb3JhIDcuOS4xLTE3LmZjMjJcbicgLT4gNy45CisgICAgIyAnR05VIGdkYiA2LjEuMSBbRnJlZUJTRF1cbicgLT4gNi4xCisgICAgIyAnR05VIGdkYiAoR0RCKSBGZWRvcmEgKDcuNS4xLTM3LmZjMTgpXG4nIC0+IDcuNQorICAgIG1hdGNoID0gcmUuc2VhcmNoKHIiXkdOVSBnZGIuKj9cYihcZCspXC4oXGQrKSIsIHZlcnNpb24pCisgICAgaWYgbWF0Y2ggaXMgTm9uZToKKyAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJ1bmFibGUgdG8gcGFyc2UgR0RCIHZlcnNpb246ICVyIiAlIHZlcnNpb24pCisgICAgcmV0dXJuICh2ZXJzaW9uLCBpbnQobWF0Y2guZ3JvdXAoMSkpLCBpbnQobWF0Y2guZ3JvdXAoMikpKQorCitnZGJfdmVyc2lvbiwgZ2RiX21ham9yX3ZlcnNpb24sIGdkYl9taW5vcl92ZXJzaW9uID0gZ2V0X2dkYl92ZXJzaW9uKCkKIGlmIGdkYl9tYWpvcl92ZXJzaW9uIDwgNzoKLSAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiZ2RiIHZlcnNpb25zIGJlZm9yZSA3LjAgZGlkbid0IHN1cHBvcnQgcHl0aG9uIGVtYmVkZGluZyIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIFNhdzpcbiIgKyBnZGJfdmVyc2lvbi5kZWNvZGUoJ2FzY2lpJywgJ3JlcGxhY2UnKSkKKyAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiZ2RiIHZlcnNpb25zIGJlZm9yZSA3LjAgZGlkbid0IHN1cHBvcnQgcHl0aG9uICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZW1iZWRkaW5nLiBTYXcgJXMuJXM6XG4lcyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChnZGJfbWFqb3JfdmVyc2lvbiwgZ2RiX21pbm9yX3ZlcnNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2RiX3ZlcnNpb24pKQogCiBpZiBub3Qgc3lzY29uZmlnLmlzX3B5dGhvbl9idWlsZCgpOgogICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJ0ZXN0X2dkYiBvbmx5IHdvcmtzIG9uIHNvdXJjZSBidWlsZHMgYXQgdGhlIG1vbWVudC4iKQpAQCAtNDAsNiArNTcsOCBAQAogY2hlY2tvdXRfaG9va19wYXRoID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShzeXMuZXhlY3V0YWJsZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3B5dGhvbi1nZGIucHknKQogCitQWVRIT05IQVNIU0VFRCA9ICcxMjMnCisKIGRlZiBydW5fZ2RiKCphcmdzLCAqKmVudl92YXJzKToKICAgICAiIiJSdW5zIGdkYiBpbiAtLWJhdGNoIG1vZGUgd2l0aCB0aGUgYWRkaXRpb25hbCBhcmd1bWVudHMgZ2l2ZW4gYnkgKmFyZ3MuCiAKQEAgLTUwLDEyICs2OSwxNyBAQAogICAgICAgICBlbnYudXBkYXRlKGVudl92YXJzKQogICAgIGVsc2U6CiAgICAgICAgIGVudiA9IE5vbmUKLSAgICBiYXNlX2NtZCA9ICgnZ2RiJywgJy0tYmF0Y2gnKQorICAgICMgLW54OiBEbyBub3QgZXhlY3V0ZSBjb21tYW5kcyBmcm9tIGFueSAuZ2RiaW5pdCBpbml0aWFsaXphdGlvbiBmaWxlcworICAgICMgICAgICAoaXNzdWUgIzIyMTg4KQorICAgIGJhc2VfY21kID0gKCdnZGInLCAnLS1iYXRjaCcsICctbngnKQogICAgIGlmIChnZGJfbWFqb3JfdmVyc2lvbiwgZ2RiX21pbm9yX3ZlcnNpb24pID49ICg3LCA0KToKICAgICAgICAgYmFzZV9jbWQgKz0gKCctaWV4JywgJ2FkZC1hdXRvLWxvYWQtc2FmZS1wYXRoICcgKyBjaGVja291dF9ob29rX3BhdGgpCi0gICAgb3V0LCBlcnIgPSBzdWJwcm9jZXNzLlBvcGVuKGJhc2VfY21kICsgYXJncywKLSAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSwgZW52PWVudiwKLSAgICAgICAgKS5jb21tdW5pY2F0ZSgpCisgICAgcHJvYyA9IHN1YnByb2Nlc3MuUG9wZW4oYmFzZV9jbWQgKyBhcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnY9ZW52KQorICAgIHdpdGggcHJvYzoKKyAgICAgICAgb3V0LCBlcnIgPSBwcm9jLmNvbW11bmljYXRlKCkKICAgICByZXR1cm4gb3V0LmRlY29kZSgndXRmLTgnLCAncmVwbGFjZScpLCBlcnIuZGVjb2RlKCd1dGYtOCcsICdyZXBsYWNlJykKIAogIyBWZXJpZnkgdGhhdCAiZ2RiIiB3YXMgYnVpbHQgd2l0aCB0aGUgZW1iZWRkZWQgcHl0aG9uIHN1cHBvcnQgZW5hYmxlZDoKQEAgLTExNyw3ICsxNDEsMjggQEAKICAgICAgICAgIyBHZW5lcmF0ZSBhIGxpc3Qgb2YgY29tbWFuZHMgaW4gZ2RiJ3MgbGFuZ3VhZ2U6CiAgICAgICAgIGNvbW1hbmRzID0gWydzZXQgYnJlYWtwb2ludCBwZW5kaW5nIHllcycsCiAgICAgICAgICAgICAgICAgICAgICdicmVhayAlcycgJSBicmVha3BvaW50LAorCisgICAgICAgICAgICAgICAgICAgICMgVGhlIHRlc3RzIGFzc3VtZSB0aGF0IHRoZSBmaXJzdCBmcmFtZSBvZiBwcmludGVkCisgICAgICAgICAgICAgICAgICAgICMgIGJhY2t0cmFjZSB3aWxsIG5vdCBjb250YWluIHByb2dyYW0gY291bnRlciwKKyAgICAgICAgICAgICAgICAgICAgIyAgdGhhdCBpcyBob3dldmVyIG5vdCBndWFyYW50ZWVkIGJ5IGdkYgorICAgICAgICAgICAgICAgICAgICAjICB0aGVyZWZvcmUgd2UgbmVlZCB0byB1c2UgJ3NldCBwcmludCBhZGRyZXNzIG9mZicgdG8KKyAgICAgICAgICAgICAgICAgICAgIyAgbWFrZSBzdXJlIHRoZSBjb3VudGVyIGlzIG5vdCB0aGVyZS4gRm9yIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgICMgIzAgaW4gUHlPYmplY3RfUHJpbnQgLi4uCisgICAgICAgICAgICAgICAgICAgICMgIGlzIGFzc3VtZWQsIGJ1dCBzb21ldGltZXMgdGhpcyBjYW4gYmUgZS5nLgorICAgICAgICAgICAgICAgICAgICAjICMwIDB4MDAwMDNmZmZiN2RkMTc5OCBpbiBQeU9iamVjdF9QcmludCAuLi4KKyAgICAgICAgICAgICAgICAgICAgJ3NldCBwcmludCBhZGRyZXNzIG9mZicsCisKICAgICAgICAgICAgICAgICAgICAgJ3J1biddCisKKyAgICAgICAgIyBHREIgYXMgb2YgNy40IG9ud2FyZHMgY2FuIGRpc3Rpbmd1aXNoIGJldHdlZW4gdGhlCisgICAgICAgICMgdmFsdWUgb2YgYSB2YXJpYWJsZSBhdCBlbnRyeSB2cyBjdXJyZW50IHZhbHVlOgorICAgICAgICAjICAgaHR0cDovL3NvdXJjZXdhcmUub3JnL2dkYi9vbmxpbmVkb2NzL2dkYi9WYXJpYWJsZXMuaHRtbAorICAgICAgICAjIHdoaWNoIGxlYWRzIHRvIHRoZSBzZWxmdGVzdHMgZmFpbGluZyB3aXRoIGVycm9ycyBsaWtlIHRoaXM6CisgICAgICAgICMgICBBc3NlcnRpb25FcnJvcjogJ3ZAZW50cnk9KCknICE9ICcoKScKKyAgICAgICAgIyBEaXNhYmxlIHRoaXM6CisgICAgICAgIGlmIChnZGJfbWFqb3JfdmVyc2lvbiwgZ2RiX21pbm9yX3ZlcnNpb24pID49ICg3LCA0KToKKyAgICAgICAgICAgIGNvbW1hbmRzICs9IFsnc2V0IHByaW50IGVudHJ5LXZhbHVlcyBubyddCisKICAgICAgICAgaWYgY21kc19hZnRlcl9icmVha3BvaW50OgogICAgICAgICAgICAgY29tbWFuZHMgKz0gY21kc19hZnRlcl9icmVha3BvaW50CiAgICAgICAgIGVsc2U6CkBAIC0xMjYsNyArMTcxLDcgQEAKICAgICAgICAgIyBwcmludCBjb21tYW5kcwogCiAgICAgICAgICMgVXNlICJjb21tYW5kcyIgdG8gZ2VuZXJhdGUgdGhlIGFyZ3VtZW50cyB3aXRoIHdoaWNoIHRvIGludm9rZSAiZ2RiIjoKLSAgICAgICAgYXJncyA9IFsiZ2RiIiwgIi0tYmF0Y2giXQorICAgICAgICBhcmdzID0gWyJnZGIiLCAiLS1iYXRjaCIsICItbngiXQogICAgICAgICBhcmdzICs9IFsnLS1ldmFsLWNvbW1hbmQ9JXMnICUgY21kIGZvciBjbWQgaW4gY29tbWFuZHNdCiAgICAgICAgIGFyZ3MgKz0gWyItLWFyZ3MiLAogICAgICAgICAgICAgICAgICBzeXMuZXhlY3V0YWJsZV0KQEAgLTE0NCw3ICsxODksNyBAQAogICAgICAgICAjIHByaW50ICgnICcuam9pbihhcmdzKSkKIAogICAgICAgICAjIFVzZSAiYXJncyIgdG8gaW52b2tlIGdkYiwgY2FwdHVyaW5nIHN0ZG91dCwgc3RkZXJyOgotICAgICAgICBvdXQsIGVyciA9IHJ1bl9nZGIoKmFyZ3MsIFBZVEhPTkhBU0hTRUVEPScwJykKKyAgICAgICAgb3V0LCBlcnIgPSBydW5fZ2RiKCphcmdzLCBQWVRIT05IQVNIU0VFRD1QWVRIT05IQVNIU0VFRCkKIAogICAgICAgICBlcnJsaW5lcyA9IGVyci5zcGxpdGxpbmVzKCkKICAgICAgICAgdW5leHBlY3RlZF9lcnJsaW5lcyA9IFtdCkBAIC0xNjMsOCArMjA4LDE0IEBACiAgICAgICAgICAgICAnbGludXgtdmRzby5zbycsCiAgICAgICAgICAgICAnd2FybmluZzogQ291bGQgbm90IGxvYWQgc2hhcmVkIGxpYnJhcnkgc3ltYm9scyBmb3IgJwogICAgICAgICAgICAgJ2xpbnV4LWdhdGUuc28nLAorICAgICAgICAgICAgJ3dhcm5pbmc6IENvdWxkIG5vdCBsb2FkIHNoYXJlZCBsaWJyYXJ5IHN5bWJvbHMgZm9yICcKKyAgICAgICAgICAgICdsaW51eC12ZHNvNjQuc28nLAogICAgICAgICAgICAgJ0RvIHlvdSBuZWVkICJzZXQgc29saWItc2VhcmNoLXBhdGgiIG9yICcKICAgICAgICAgICAgICcic2V0IHN5c3Jvb3QiPycsCisgICAgICAgICAgICAnd2FybmluZzogU291cmNlIGZpbGUgaXMgbW9yZSByZWNlbnQgdGhhbiBleGVjdXRhYmxlLicsCisgICAgICAgICAgICAjIElzc3VlICMxOTc1MzogbWlzc2luZyBzeW1ib2xzIG9uIFN5c3RlbSBaCisgICAgICAgICAgICAnTWlzc2luZyBzZXBhcmF0ZSBkZWJ1Z2luZm8gZm9yICcsCisgICAgICAgICAgICAnVHJ5OiB6eXBwZXIgaW5zdGFsbCAtQyAnLAogICAgICAgICAgICAgKQogICAgICAgICBmb3IgbGluZSBpbiBlcnJsaW5lczoKICAgICAgICAgICAgIGlmIG5vdCBsaW5lLnN0YXJ0c3dpdGgoaWdub3JlX3BhdHRlcm5zKToKQEAgLTI0OCw5ICsyOTksOCBAQAogICAgIGRlZiB0ZXN0X2RpY3RzKHNlbGYpOgogICAgICAgICAnVmVyaWZ5IHRoZSBwcmV0dHktcHJpbnRpbmcgb2YgZGljdGlvbmFyaWVzJwogICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIoe30pCi0gICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcih7J2Zvbyc6ICdiYXInfSkKLSAgICAgICAgc2VsZi5hc3NlcnRHZGJSZXByKHsnZm9vJzogJ2JhcicsICdkb3VnbGFzJzogNDJ9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInsnZm9vJzogJ2JhcicsICdkb3VnbGFzJzogNDJ9IikKKyAgICAgICAgc2VsZi5hc3NlcnRHZGJSZXByKHsnZm9vJzogJ2Jhcid9LCAieydmb28nOiAnYmFyJ30iKQorICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIoeydmb28nOiAnYmFyJywgJ2RvdWdsYXMnOiA0Mn0sICJ7J2RvdWdsYXMnOiA0MiwgJ2Zvbyc6ICdiYXInfSIpCiAKICAgICBkZWYgdGVzdF9saXN0cyhzZWxmKToKICAgICAgICAgJ1ZlcmlmeSB0aGUgcHJldHR5LXByaW50aW5nIG9mIGxpc3RzJwpAQCAtMzA1LDI2ICszNTUsMzAgQEAKIAogICAgIGRlZiB0ZXN0X3R1cGxlcyhzZWxmKToKICAgICAgICAgJ1ZlcmlmeSB0aGUgcHJldHR5LXByaW50aW5nIG9mIHR1cGxlcycKLSAgICAgICAgc2VsZi5hc3NlcnRHZGJSZXByKHR1cGxlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcih0dXBsZSgpLCAnKCknKQogICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIoKDEsKSwgJygxLCknKQogICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIoKCdmb28nLCAnYmFyJywgJ2JheicpKQogCiAgICAgZGVmIHRlc3Rfc2V0cyhzZWxmKToKICAgICAgICAgJ1ZlcmlmeSB0aGUgcHJldHR5LXByaW50aW5nIG9mIHNldHMnCi0gICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcihzZXQoKSkKKyAgICAgICAgaWYgKGdkYl9tYWpvcl92ZXJzaW9uLCBnZGJfbWlub3JfdmVyc2lvbikgPCAoNywgMyk6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJwcmV0dHktcHJpbnRpbmcgb2Ygc2V0cyBuZWVkcyBnZGIgNy4zIG9yIGxhdGVyIikKKyAgICAgICAgc2VsZi5hc3NlcnRHZGJSZXByKHNldCgpLCAnc2V0KCknKQogICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIoc2V0KFsnYScsICdiJ10pLCAieydhJywgJ2InfSIpCiAgICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcihzZXQoWzQsIDUsIDZdKSwgIns0LCA1LCA2fSIpCiAKICAgICAgICAgIyBFbnN1cmUgdGhhdCB3ZSBoYW5kbGUgc2V0cyBjb250YWluaW5nIHRoZSAiZHVtbXkiIGtleSB2YWx1ZSwKICAgICAgICAgIyB3aGljaCBoYXBwZW5zIG9uIGRlbGV0aW9uOgogICAgICAgICBnZGJfcmVwciwgZ2RiX291dHB1dCA9IHNlbGYuZ2V0X2dkYl9yZXByKCcnJ3MgPSBzZXQoWydhJywnYiddKQotcy5wb3AoKQorcy5yZW1vdmUoJ2EnKQogaWQocyknJycpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2RiX3JlcHIsICJ7J2InfSIpCiAKICAgICBkZWYgdGVzdF9mcm96ZW5zZXRzKHNlbGYpOgogICAgICAgICAnVmVyaWZ5IHRoZSBwcmV0dHktcHJpbnRpbmcgb2YgZnJvemVuc2V0cycKLSAgICAgICAgc2VsZi5hc3NlcnRHZGJSZXByKGZyb3plbnNldCgpKQorICAgICAgICBpZiAoZ2RiX21ham9yX3ZlcnNpb24sIGdkYl9taW5vcl92ZXJzaW9uKSA8ICg3LCAzKToKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoInByZXR0eS1wcmludGluZyBvZiBmcm96ZW5zZXRzIG5lZWRzIGdkYiA3LjMgb3IgbGF0ZXIiKQorICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIoZnJvemVuc2V0KCksICdmcm96ZW5zZXQoKScpCiAgICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcihmcm96ZW5zZXQoWydhJywgJ2InXSksICJmcm96ZW5zZXQoeydhJywgJ2InfSkiKQogICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIoZnJvemVuc2V0KFs0LCA1LCA2XSksICJmcm96ZW5zZXQoezQsIDUsIDZ9KSIpCiAKQEAgLTg0MSw2ICs4OTUsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIiLipcbmEgPSAxXG5iID0gMlxuYyA9IDNcbi4qIikKIAogZGVmIHRlc3RfbWFpbigpOgorICAgIGlmIHN1cHBvcnQudmVyYm9zZToKKyAgICAgICAgcHJpbnQoIkdEQiB2ZXJzaW9uICVzLiVzOiIgJSAoZ2RiX21ham9yX3ZlcnNpb24sIGdkYl9taW5vcl92ZXJzaW9uKSkKKyAgICAgICAgZm9yIGxpbmUgaW4gZ2RiX3ZlcnNpb24uc3BsaXRsaW5lcygpOgorICAgICAgICAgICAgcHJpbnQoIiAiICogNCArIGxpbmUpCiAgICAgcnVuX3VuaXR0ZXN0KFByZXR0eVByaW50VGVzdHMsCiAgICAgICAgICAgICAgICAgIFB5TGlzdFRlc3RzLAogICAgICAgICAgICAgICAgICBTdGFja05hdmlnYXRpb25UZXN0cywKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZ2VuZXJhdG9ycy5weSBiL0xpYi90ZXN0L3Rlc3RfZ2VuZXJhdG9ycy5weQppbmRleCA5NTgwNTRhLi42MDRlMTJkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2dlbmVyYXRvcnMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9nZW5lcmF0b3JzLnB5CkBAIC0xLDMgKzEsMjA0IEBACitpbXBvcnQgY29weQoraW1wb3J0IGdjCitpbXBvcnQgcGlja2xlCitpbXBvcnQgc3lzCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB3ZWFrcmVmCisKK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAorCisKK2NsYXNzIEZpbmFsaXphdGlvblRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfZnJhbWVfcmVzdXJyZWN0KHNlbGYpOgorICAgICAgICAjIEEgZ2VuZXJhdG9yIGZyYW1lIGNhbiBiZSByZXN1cnJlY3RlZCBieSBhIGdlbmVyYXRvcidzIGZpbmFsaXphdGlvbi4KKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgbm9ubG9jYWwgZnJhbWUKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB5aWVsZAorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBmcmFtZSA9IHN5cy5fZ2V0ZnJhbWUoKQorCisgICAgICAgIGcgPSBnZW4oKQorICAgICAgICB3ciA9IHdlYWtyZWYucmVmKGcpCisgICAgICAgIG5leHQoZykKKyAgICAgICAgZGVsIGcKKyAgICAgICAgc3VwcG9ydC5nY19jb2xsZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh3cigpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZnJhbWUpCisgICAgICAgIGRlbCBmcmFtZQorICAgICAgICBzdXBwb3J0LmdjX2NvbGxlY3QoKQorCisgICAgZGVmIHRlc3RfcmVmY3ljbGUoc2VsZik6CisgICAgICAgICMgQSBnZW5lcmF0b3IgY2F1Z2h0IGluIGEgcmVmY3ljbGUgZ2V0cyBmaW5hbGl6ZWQgYW55d2F5LgorICAgICAgICBvbGRfZ2FyYmFnZSA9IGdjLmdhcmJhZ2VbOl0KKyAgICAgICAgZmluYWxpemVkID0gRmFsc2UKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgbm9ubG9jYWwgZmluYWxpemVkCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZyA9IHlpZWxkCisgICAgICAgICAgICAgICAgeWllbGQgMQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBmaW5hbGl6ZWQgPSBUcnVlCisKKyAgICAgICAgZyA9IGdlbigpCisgICAgICAgIG5leHQoZykKKyAgICAgICAgZy5zZW5kKGcpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihzeXMuZ2V0cmVmY291bnQoZyksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZmluYWxpemVkKQorICAgICAgICBkZWwgZworICAgICAgICBzdXBwb3J0LmdjX2NvbGxlY3QoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZmluYWxpemVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdjLmdhcmJhZ2UsIG9sZF9nYXJiYWdlKQorCisgICAgZGVmIHRlc3RfbGFtYmRhX2dlbmVyYXRvcihzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMjMxOTI6IFRlc3QgdGhhdCBhIGxhbWJkYSByZXR1cm5pbmcgYSBnZW5lcmF0b3IgYmVoYXZlcworICAgICAgICAjIGxpa2UgdGhlIGVxdWl2YWxlbnQgZnVuY3Rpb24KKyAgICAgICAgZiA9IGxhbWJkYTogKHlpZWxkIDEpCisgICAgICAgIGRlZiBnKCk6IHJldHVybiAoeWllbGQgMSkKKworICAgICAgICAjIHRlc3QgJ3lpZWxkIGZyb20nCisgICAgICAgIGYyID0gbGFtYmRhOiAoeWllbGQgZnJvbSBnKCkpCisgICAgICAgIGRlZiBnMigpOiByZXR1cm4gKHlpZWxkIGZyb20gZygpKQorCisgICAgICAgIGYzID0gbGFtYmRhOiAoeWllbGQgZnJvbSBmKCkpCisgICAgICAgIGRlZiBnMygpOiByZXR1cm4gKHlpZWxkIGZyb20gZigpKQorCisgICAgICAgIGZvciBnZW5fZnVuIGluIChmLCBnLCBmMiwgZzIsIGYzLCBnMyk6CisgICAgICAgICAgICBnZW4gPSBnZW5fZnVuKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV4dChnZW4pLCAxKQorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhTdG9wSXRlcmF0aW9uKSBhcyBjbToKKyAgICAgICAgICAgICAgICBnZW4uc2VuZCgyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24udmFsdWUsIDIpCisKKworY2xhc3MgR2VuZXJhdG9yVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9jb3B5KHNlbGYpOgorICAgICAgICBkZWYgZigpOgorICAgICAgICAgICAgeWllbGQgMQorICAgICAgICBnID0gZigpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGNvcHkuY29weShnKQorCisgICAgZGVmIHRlc3RfcGlja2xlKHNlbGYpOgorICAgICAgICBkZWYgZigpOgorICAgICAgICAgICAgeWllbGQgMQorICAgICAgICBnID0gZigpCisgICAgICAgIGZvciBwcm90byBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcygoVHlwZUVycm9yLCBwaWNrbGUuUGlja2xpbmdFcnJvcikpOgorICAgICAgICAgICAgICAgIHBpY2tsZS5kdW1wcyhnLCBwcm90bykKKworCitjbGFzcyBFeGNlcHRpb25UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIFRlc3RzIGZvciB0aGUgaXNzdWUgIzIzMzUzOiBjaGVjayB0aGF0IHRoZSBjdXJyZW50bHkgaGFuZGxlZCBleGNlcHRpb24KKyAgICAjIGlzIGNvcnJlY3RseSBzYXZlZC9yZXN0b3JlZCBpbiBQeUV2YWxfRXZhbEZyYW1lRXgoKS4KKworICAgIGRlZiB0ZXN0X2V4Y2VwdF90aHJvdyhzZWxmKToKKyAgICAgICAgZGVmIHN0b3JlX3JhaXNlX2V4Y19nZW5lcmF0b3IoKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN5cy5leGNfaW5mbygpWzBdLCBOb25lKQorICAgICAgICAgICAgICAgIHlpZWxkCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgICAgICAjIGV4Y2VwdGlvbiByYWlzZWQgYnkgZ2VuLnRocm93KGV4YykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN5cy5leGNfaW5mbygpWzBdLCBWYWx1ZUVycm9yKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGV4Yy5fX2NvbnRleHRfXykKKyAgICAgICAgICAgICAgICB5aWVsZAorCisgICAgICAgICAgICAgICAgIyBlbnN1cmUgdGhhdCB0aGUgZXhjZXB0aW9uIGlzIG5vdCBsb3N0CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzeXMuZXhjX2luZm8oKVswXSwgVmFsdWVFcnJvcikKKyAgICAgICAgICAgICAgICB5aWVsZAorCisgICAgICAgICAgICAgICAgIyB3ZSBzaG91bGQgYmUgYWJsZSB0byByYWlzZSBiYWNrIHRoZSBWYWx1ZUVycm9yCisgICAgICAgICAgICAgICAgcmFpc2UKKworICAgICAgICBtYWtlID0gc3RvcmVfcmFpc2VfZXhjX2dlbmVyYXRvcigpCisgICAgICAgIG5leHQobWFrZSkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbWFrZS50aHJvdyhleGMpCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICBuZXh0KG1ha2UpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcikgYXMgY206CisgICAgICAgICAgICBuZXh0KG1ha2UpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGNtLmV4Y2VwdGlvbi5fX2NvbnRleHRfXykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN5cy5leGNfaW5mbygpLCAoTm9uZSwgTm9uZSwgTm9uZSkpCisKKyAgICBkZWYgdGVzdF9leGNlcHRfbmV4dChzZWxmKToKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzeXMuZXhjX2luZm8oKVswXSwgVmFsdWVFcnJvcikKKyAgICAgICAgICAgIHlpZWxkICJkb25lIgorCisgICAgICAgIGcgPSBnZW4oKQorICAgICAgICB0cnk6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5leHQoZyksICJkb25lIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzeXMuZXhjX2luZm8oKSwgKE5vbmUsIE5vbmUsIE5vbmUpKQorCisgICAgZGVmIHRlc3RfZXhjZXB0X2dlbl9leGNlcHQoc2VsZik6CisgICAgICAgIGRlZiBnZW4oKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN5cy5leGNfaW5mbygpWzBdLCBOb25lKQorICAgICAgICAgICAgICAgIHlpZWxkCisgICAgICAgICAgICAgICAgIyB3ZSBhcmUgY2FsbGVkIGZyb20gImV4Y2VwdCBWYWx1ZUVycm9yOiIsIFR5cGVFcnJvciBtdXN0CisgICAgICAgICAgICAgICAgIyBpbmhlcml0IFZhbHVlRXJyb3IgaW4gaXRzIGNvbnRleHQKKyAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoKQorICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvciBhcyBleGM6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzeXMuZXhjX2luZm8oKVswXSwgVHlwZUVycm9yKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShleGMuX19jb250ZXh0X18pLCBWYWx1ZUVycm9yKQorICAgICAgICAgICAgIyBoZXJlIHdlIGFyZSBzdGlsbCBjYWxsZWQgZnJvbSB0aGUgImV4Y2VwdCBWYWx1ZUVycm9yOiIKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3lzLmV4Y19pbmZvKClbMF0sIFZhbHVlRXJyb3IpCisgICAgICAgICAgICB5aWVsZAorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc3lzLmV4Y19pbmZvKClbMF0pCisgICAgICAgICAgICB5aWVsZCAiZG9uZSIKKworICAgICAgICBnID0gZ2VuKCkKKyAgICAgICAgbmV4dChnKQorICAgICAgICB0cnk6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICBuZXh0KGcpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXh0KGcpLCAiZG9uZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3lzLmV4Y19pbmZvKCksIChOb25lLCBOb25lLCBOb25lKSkKKworICAgIGRlZiB0ZXN0X2V4Y2VwdF90aHJvd19leGNlcHRpb25fY29udGV4dChzZWxmKToKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzeXMuZXhjX2luZm8oKVswXSwgTm9uZSkKKyAgICAgICAgICAgICAgICAgICAgeWllbGQKKyAgICAgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgIyB3ZSBhcmUgY2FsbGVkIGZyb20gImV4Y2VwdCBWYWx1ZUVycm9yOiIKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzeXMuZXhjX2luZm8oKVswXSwgVmFsdWVFcnJvcikKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCkKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3lzLmV4Y19pbmZvKClbMF0sIFR5cGVFcnJvcikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoZXhjLl9fY29udGV4dF9fKSwgVmFsdWVFcnJvcikKKyAgICAgICAgICAgICMgd2UgYXJlIHN0aWxsIGNhbGxlZCBmcm9tICJleGNlcHQgVmFsdWVFcnJvcjoiCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN5cy5leGNfaW5mbygpWzBdLCBWYWx1ZUVycm9yKQorICAgICAgICAgICAgeWllbGQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHN5cy5leGNfaW5mbygpWzBdKQorICAgICAgICAgICAgeWllbGQgImRvbmUiCisKKyAgICAgICAgZyA9IGdlbigpCisgICAgICAgIG5leHQoZykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcgorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgIGcudGhyb3coZXhjKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV4dChnKSwgImRvbmUiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN5cy5leGNfaW5mbygpLCAoTm9uZSwgTm9uZSwgTm9uZSkpCisKKwogdHV0b3JpYWxfdGVzdHMgPSAiIiIKIExldCdzIHRyeSBhIHNpbXBsZSBnZW5lcmF0b3I6CiAKQEAgLTM4NCw4ICs1ODUsOCBAQAogPj4+IFtzIGZvciBzIGluIGRpcihpKSBpZiBub3Qgcy5zdGFydHN3aXRoKCdfJyldCiBbJ2Nsb3NlJywgJ2dpX2NvZGUnLCAnZ2lfZnJhbWUnLCAnZ2lfcnVubmluZycsICdzZW5kJywgJ3Rocm93J10KID4+PiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgSEFWRV9ET0NTVFJJTkdTCi0+Pj4gcHJpbnQoaS5fX25leHRfXy5fX2RvY19fIGlmIEhBVkVfRE9DU1RSSU5HUyBlbHNlICd4Ll9fbmV4dF9fKCkgPD09PiBuZXh0KHgpJykKLXguX19uZXh0X18oKSA8PT0+IG5leHQoeCkKKz4+PiBwcmludChpLl9fbmV4dF9fLl9fZG9jX18gaWYgSEFWRV9ET0NTVFJJTkdTIGVsc2UgJ0ltcGxlbWVudCBuZXh0KHNlbGYpLicpCitJbXBsZW1lbnQgbmV4dChzZWxmKS4KID4+PiBpdGVyKGkpIGlzIGkKIFRydWUKID4+PiBpbXBvcnQgdHlwZXMKQEAgLTE3MjksOSArMTkzMCw3IEBACiA+Pj4gZyA9IGYoKQogPj4+IG5leHQoZykKID4+PiBkZWwgZwotPj4+IHN5cy5zdGRlcnIuZ2V0dmFsdWUoKS5zdGFydHN3aXRoKAotLi4uICAgICAiRXhjZXB0aW9uIFJ1bnRpbWVFcnJvcjogJ2dlbmVyYXRvciBpZ25vcmVkIEdlbmVyYXRvckV4aXQnIGluICIKLS4uLiApCis+Pj4gIlJ1bnRpbWVFcnJvcjogZ2VuZXJhdG9yIGlnbm9yZWQgR2VuZXJhdG9yRXhpdCIgaW4gc3lzLnN0ZGVyci5nZXR2YWx1ZSgpCiBUcnVlCiA+Pj4gc3lzLnN0ZGVyciA9IG9sZAogCkBAIC0xODQxLDIyICsyMDQwLDIzIEBACiAuLi4gICAgIHN5cy5zdGRlcnIgPSBpby5TdHJpbmdJTygpCiAuLi4gICAgIGNsYXNzIExlYWtlcjoKIC4uLiAgICAgICAgIGRlZiBfX2RlbF9fKHNlbGYpOgotLi4uICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcgorLi4uICAgICAgICAgICAgIGRlZiBpbnZva2UobWVzc2FnZSk6CisuLi4gICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcihtZXNzYWdlKQorLi4uICAgICAgICAgICAgIGludm9rZSgidGVzdCIpCiAuLi4KIC4uLiAgICAgbCA9IExlYWtlcigpCiAuLi4gICAgIGRlbCBsCiAuLi4gICAgIGVyciA9IHN5cy5zdGRlcnIuZ2V0dmFsdWUoKS5zdHJpcCgpCi0uLi4gICAgIGVyci5zdGFydHN3aXRoKAotLi4uICAgICAgICAgIkV4Y2VwdGlvbiBSdW50aW1lRXJyb3I6IFJ1bnRpbWVFcnJvcigpIGluIDwiCi0uLi4gICAgICkKLS4uLiAgICAgZXJyLmVuZHN3aXRoKCI+IGlnbm9yZWQiKQotLi4uICAgICBsZW4oZXJyLnNwbGl0bGluZXMoKSkKKy4uLiAgICAgIkV4Y2VwdGlvbiBpZ25vcmVkIGluIiBpbiBlcnIKKy4uLiAgICAgIlJ1bnRpbWVFcnJvcjogdGVzdCIgaW4gZXJyCisuLi4gICAgICJUcmFjZWJhY2siIGluIGVycgorLi4uICAgICAiaW4gaW52b2tlIiBpbiBlcnIKIC4uLiBmaW5hbGx5OgogLi4uICAgICBzeXMuc3RkZXJyID0gb2xkCiBUcnVlCiBUcnVlCi0xCi0KK1RydWUKK1RydWUKIAogCiBUaGVzZSByZWZsZWFrIHRlc3RzIHNob3VsZCBwZXJoYXBzIGJlIGluIGEgdGVzdGZpbGUgb2YgdGhlaXIgb3duLApAQCAtMTg4MSw2ICsyMDgxLDcgQEAKICMgc28gdGhpcyB3b3JrcyBhcyBleHBlY3RlZCBpbiBib3RoIHdheXMgb2YgcnVubmluZyByZWdydGVzdC4KIGRlZiB0ZXN0X21haW4odmVyYm9zZT1Ob25lKToKICAgICBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQsIHRlc3RfZ2VuZXJhdG9ycworICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KF9fbmFtZV9fKQogICAgIHN1cHBvcnQucnVuX2RvY3Rlc3QodGVzdF9nZW5lcmF0b3JzLCB2ZXJib3NlKQogCiAjIFRoaXMgcGFydCBpc24ndCBuZWVkZWQgZm9yIHJlZ3J0ZXN0LCBidXQgZm9yIHJ1bm5pbmcgdGhlIHRlc3QgZGlyZWN0bHkuCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2dlbmVyaWNwYXRoLnB5IGIvTGliL3Rlc3QvdGVzdF9nZW5lcmljcGF0aC5weQppbmRleCBiNTA2OGU0Li5lNTllZDRkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2dlbmVyaWNwYXRoLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZ2VuZXJpY3BhdGgucHkKQEAgLTE4OCwxMiArMTg4LDkzIEBACiAgICAgICAgICAgICBzdXBwb3J0LnVubGluayhzdXBwb3J0LlRFU1RGTikKICAgICAgICAgICAgIHNhZmVfcm1kaXIoc3VwcG9ydC5URVNURk4pCiAKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIF9jcmVhdGVfZmlsZShmaWxlbmFtZSk6CisgICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSwgJ3diJykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoYidmb28nKQorCisgICAgZGVmIHRlc3Rfc2FtZWZpbGUoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRlc3RfZm4gPSBzdXBwb3J0LlRFU1RGTiArICIxIgorICAgICAgICAgICAgc2VsZi5fY3JlYXRlX2ZpbGUodGVzdF9mbikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnBhdGhtb2R1bGUuc2FtZWZpbGUodGVzdF9mbiwgdGVzdF9mbikpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYucGF0aG1vZHVsZS5zYW1lZmlsZSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLnJlbW92ZSh0ZXN0X2ZuKQorCisgICAgQHN1cHBvcnQuc2tpcF91bmxlc3Nfc3ltbGluaworICAgIGRlZiB0ZXN0X3NhbWVmaWxlX29uX3N5bWxpbmsoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3Rfc2FtZWZpbGVfb25fbGlua19mdW5jKG9zLnN5bWxpbmspCisKKyAgICBkZWYgdGVzdF9zYW1lZmlsZV9vbl9saW5rKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X3NhbWVmaWxlX29uX2xpbmtfZnVuYyhvcy5saW5rKQorCisgICAgZGVmIF90ZXN0X3NhbWVmaWxlX29uX2xpbmtfZnVuYyhzZWxmLCBmdW5jKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdGVzdF9mbjEgPSBzdXBwb3J0LlRFU1RGTiArICIxIgorICAgICAgICAgICAgdGVzdF9mbjIgPSBzdXBwb3J0LlRFU1RGTiArICIyIgorICAgICAgICAgICAgc2VsZi5fY3JlYXRlX2ZpbGUodGVzdF9mbjEpCisKKyAgICAgICAgICAgIGZ1bmModGVzdF9mbjEsIHRlc3RfZm4yKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYucGF0aG1vZHVsZS5zYW1lZmlsZSh0ZXN0X2ZuMSwgdGVzdF9mbjIpKQorICAgICAgICAgICAgb3MucmVtb3ZlKHRlc3RfZm4yKQorCisgICAgICAgICAgICBzZWxmLl9jcmVhdGVfZmlsZSh0ZXN0X2ZuMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5wYXRobW9kdWxlLnNhbWVmaWxlKHRlc3RfZm4xLCB0ZXN0X2ZuMikpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvcy5yZW1vdmUodGVzdF9mbjEpCisgICAgICAgICAgICBvcy5yZW1vdmUodGVzdF9mbjIpCisKKyAgICBkZWYgdGVzdF9zYW1lc3RhdChzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdGVzdF9mbiA9IHN1cHBvcnQuVEVTVEZOICsgIjEiCisgICAgICAgICAgICBzZWxmLl9jcmVhdGVfZmlsZSh0ZXN0X2ZuKQorICAgICAgICAgICAgdGVzdF9mbnMgPSBbdGVzdF9mbl0qMgorICAgICAgICAgICAgc3RhdHMgPSBtYXAob3Muc3RhdCwgdGVzdF9mbnMpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5wYXRobW9kdWxlLnNhbWVzdGF0KCpzdGF0cykpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvcy5yZW1vdmUodGVzdF9mbikKKworICAgIEBzdXBwb3J0LnNraXBfdW5sZXNzX3N5bWxpbmsKKyAgICBkZWYgdGVzdF9zYW1lc3RhdF9vbl9zeW1saW5rKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X3NhbWVzdGF0X29uX2xpbmtfZnVuYyhvcy5zeW1saW5rKQorCisgICAgZGVmIHRlc3Rfc2FtZXN0YXRfb25fbGluayhzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9zYW1lc3RhdF9vbl9saW5rX2Z1bmMob3MubGluaykKKworICAgIGRlZiBfdGVzdF9zYW1lc3RhdF9vbl9saW5rX2Z1bmMoc2VsZiwgZnVuYyk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRlc3RfZm4xID0gc3VwcG9ydC5URVNURk4gKyAiMSIKKyAgICAgICAgICAgIHRlc3RfZm4yID0gc3VwcG9ydC5URVNURk4gKyAiMiIKKyAgICAgICAgICAgIHNlbGYuX2NyZWF0ZV9maWxlKHRlc3RfZm4xKQorICAgICAgICAgICAgdGVzdF9mbnMgPSAodGVzdF9mbjEsIHRlc3RfZm4yKQorICAgICAgICAgICAgZnVuYygqdGVzdF9mbnMpCisgICAgICAgICAgICBzdGF0cyA9IG1hcChvcy5zdGF0LCB0ZXN0X2ZucykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnBhdGhtb2R1bGUuc2FtZXN0YXQoKnN0YXRzKSkKKyAgICAgICAgICAgIG9zLnJlbW92ZSh0ZXN0X2ZuMikKKworICAgICAgICAgICAgc2VsZi5fY3JlYXRlX2ZpbGUodGVzdF9mbjIpCisgICAgICAgICAgICBzdGF0cyA9IG1hcChvcy5zdGF0LCB0ZXN0X2ZucykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5wYXRobW9kdWxlLnNhbWVzdGF0KCpzdGF0cykpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5wYXRobW9kdWxlLnNhbWVzdGF0KQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MucmVtb3ZlKHRlc3RfZm4xKQorICAgICAgICAgICAgb3MucmVtb3ZlKHRlc3RfZm4yKQorCisgICAgZGVmIHRlc3Rfc2FtZW9wZW5maWxlKHNlbGYpOgorICAgICAgICBmbmFtZSA9IHN1cHBvcnQuVEVTVEZOICsgIjEiCisgICAgICAgIHdpdGggb3BlbihmbmFtZSwgIndiIikgYXMgYSwgb3BlbihmbmFtZSwgIndiIikgYXMgYjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnBhdGhtb2R1bGUuc2FtZW9wZW5maWxlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhLmZpbGVubygpLCBiLmZpbGVubygpKSkKKwogY2xhc3MgVGVzdEdlbmVyaWNUZXN0KEdlbmVyaWNUZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgIyBJc3N1ZSAxNjg1MjogR2VuZXJpY1Rlc3QgY2FuJ3QgaW5oZXJpdCBmcm9tIHVuaXR0ZXN0LlRlc3RDYXNlCiAgICAgIyBmb3IgdGVzdCBkaXNjb3ZlcnkgcHVycG9zZXM7IENvbW1vblRlc3QgaW5oZXJpdHMgZnJvbSBHZW5lcmljVGVzdAogICAgICMgYW5kIGlzIG9ubHkgbWVhbnQgdG8gYmUgaW5oZXJpdGVkIGJ5IG90aGVycy4KICAgICBwYXRobW9kdWxlID0gZ2VuZXJpY3BhdGgKIAorCiAjIEZvbGxvd2luZyBUZXN0Q2FzZSBpcyBub3Qgc3VwcG9zZWQgdG8gYmUgcnVuIGZyb20gdGVzdF9nZW5lcmljcGF0aC4KICMgSXQgaXMgaW5oZXJpdGVkIGJ5IG90aGVyIHRlc3QgbW9kdWxlcyAobWFjcGF0aCwgbnRwYXRoLCBwb3NpeHBhdGgpLgogCkBAIC0zNDgsNyArNDI5LDYgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoIm5lZWQgc3VwcG9ydC5URVNURk5fTk9OQVNDSUkiKQogCi0gICAgICAgICMgVGVzdCBub24tQVNDSUksIG5vbi1VVEY4IGJ5dGVzIGluIHRoZSBwYXRoLgogICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CiAgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoImlnbm9yZSIsIERlcHJlY2F0aW9uV2FybmluZykKICAgICAgICAgICAgIHdpdGggc3VwcG9ydC50ZW1wX2N3ZChuYW1lKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZ2VuZXhwcy5weSBiL0xpYi90ZXN0L3Rlc3RfZ2VuZXhwcy5weQppbmRleCAyMDNiMzM2Li5mYjUzMWQ2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2dlbmV4cHMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9nZW5leHBzLnB5CkBAIC0yMjIsOCArMjIyLDggQEAKICAgICBUcnVlCiAKICAgICA+Pj4gZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IEhBVkVfRE9DU1RSSU5HUwotICAgID4+PiBwcmludChnLl9fbmV4dF9fLl9fZG9jX18gaWYgSEFWRV9ET0NTVFJJTkdTIGVsc2UgJ3guX19uZXh0X18oKSA8PT0+IG5leHQoeCknKQotICAgIHguX19uZXh0X18oKSA8PT0+IG5leHQoeCkKKyAgICA+Pj4gcHJpbnQoZy5fX25leHRfXy5fX2RvY19fIGlmIEhBVkVfRE9DU1RSSU5HUyBlbHNlICdJbXBsZW1lbnQgbmV4dChzZWxmKS4nKQorICAgIEltcGxlbWVudCBuZXh0KHNlbGYpLgogICAgID4+PiBpbXBvcnQgdHlwZXMKICAgICA+Pj4gaXNpbnN0YW5jZShnLCB0eXBlcy5HZW5lcmF0b3JUeXBlKQogICAgIFRydWUKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZ2V0YXJnczIucHkgYi9MaWIvdGVzdC90ZXN0X2dldGFyZ3MyLnB5CmluZGV4IGZlNjRlZTEuLjE4NTNhMmQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZ2V0YXJnczIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9nZXRhcmdzMi5weQpAQCAtMywzOCArMyw0MCBAQAogIyBTa2lwIHRoaXMgdGVzdCBpZiB0aGUgX3Rlc3RjYXBpIG1vZHVsZSBpc24ndCBhdmFpbGFibGUuCiBzdXBwb3J0LmltcG9ydF9tb2R1bGUoJ190ZXN0Y2FwaScpCiBmcm9tIF90ZXN0Y2FwaSBpbXBvcnQgZ2V0YXJnc19rZXl3b3JkcywgZ2V0YXJnc19rZXl3b3JkX29ubHkKK3RyeToKKyAgICBmcm9tIF90ZXN0Y2FwaSBpbXBvcnQgZ2V0YXJnc19MLCBnZXRhcmdzX0sKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBnZXRhcmdzX0wgPSBOb25lICMgUFlfTE9OR19MT05HIG5vdCBhdmFpbGFibGUKIAotIiIiCi0+IEhvdyBhYm91dCB0aGUgZm9sbG93aW5nIGNvdW50ZXJwcm9wb3NhbC4gVGhpcyBhbHNvIGNoYW5nZXMgc29tZSBvZgotPiB0aGUgb3RoZXIgZm9ybWF0IGNvZGVzIHRvIGJlIGEgbGl0dGxlIG1vcmUgcmVndWxhci4KLT4KLT4gQ29kZSBDIHR5cGUgUmFuZ2UgY2hlY2sKLT4KLT4gYiB1bnNpZ25lZCBjaGFyIDAuLlVDSEFSX01BWAotPiBoIHNpZ25lZCBzaG9ydCBTSFJUX01JTi4uU0hSVF9NQVgKLT4gQiB1bnNpZ25lZCBjaGFyIG5vbmUgKioKLT4gSCB1bnNpZ25lZCBzaG9ydCBub25lICoqCi0+IGsgKiB1bnNpZ25lZCBsb25nIG5vbmUKLT4gSSAqIHVuc2lnbmVkIGludCAwLi5VSU5UX01BWAotCi0KLT4gaSBpbnQgSU5UX01JTi4uSU5UX01BWAotPiBsIGxvbmcgTE9OR19NSU4uLkxPTkdfTUFYCi0KLT4gSyAqIHVuc2lnbmVkIGxvbmcgbG9uZyBub25lCi0+IEwgbG9uZyBsb25nIExMT05HX01JTi4uTExPTkdfTUFYCi0KLT4gTm90ZXM6Ci0+Ci0+ICogTmV3IGZvcm1hdCBjb2Rlcy4KLT4KLT4gKiogQ2hhbmdlZCBmcm9tIHByZXZpb3VzICJyYW5nZS1hbmQtYS1oYWxmIiB0byAibm9uZSI7IHRoZQotPiByYW5nZS1hbmQtYS1oYWxmIGNoZWNraW5nIHdhc24ndCBwYXJ0aWN1bGFybHkgdXNlZnVsLgotCi1QbHVzIGEgQyBBUEkgb3IgdHdvLCBlLmcuIFB5SW50X0FzTG9uZ01hc2soKSAtPgotdW5zaWduZWQgbG9uZyBhbmQgUHlJbnRfQXNMb25nTG9uZ01hc2soKSAtPiB1bnNpZ25lZAotbG9uZyBsb25nIChpZiB0aGF0IGV4aXN0cykuCi0iIiIKKyMgPiBIb3cgYWJvdXQgdGhlIGZvbGxvd2luZyBjb3VudGVycHJvcG9zYWwuIFRoaXMgYWxzbyBjaGFuZ2VzIHNvbWUgb2YKKyMgPiB0aGUgb3RoZXIgZm9ybWF0IGNvZGVzIHRvIGJlIGEgbGl0dGxlIG1vcmUgcmVndWxhci4KKyMgPgorIyA+IENvZGUgQyB0eXBlIFJhbmdlIGNoZWNrCisjID4KKyMgPiBiIHVuc2lnbmVkIGNoYXIgMC4uVUNIQVJfTUFYCisjID4gaCBzaWduZWQgc2hvcnQgU0hSVF9NSU4uLlNIUlRfTUFYCisjID4gQiB1bnNpZ25lZCBjaGFyIG5vbmUgKioKKyMgPiBIIHVuc2lnbmVkIHNob3J0IG5vbmUgKioKKyMgPiBrICogdW5zaWduZWQgbG9uZyBub25lCisjID4gSSAqIHVuc2lnbmVkIGludCAwLi5VSU5UX01BWAorIworIworIyA+IGkgaW50IElOVF9NSU4uLklOVF9NQVgKKyMgPiBsIGxvbmcgTE9OR19NSU4uLkxPTkdfTUFYCisjCisjID4gSyAqIHVuc2lnbmVkIGxvbmcgbG9uZyBub25lCisjID4gTCBsb25nIGxvbmcgTExPTkdfTUlOLi5MTE9OR19NQVgKKyMKKyMgPiBOb3RlczoKKyMgPgorIyA+ICogTmV3IGZvcm1hdCBjb2Rlcy4KKyMgPgorIyA+ICoqIENoYW5nZWQgZnJvbSBwcmV2aW91cyAicmFuZ2UtYW5kLWEtaGFsZiIgdG8gIm5vbmUiOyB0aGUKKyMgPiByYW5nZS1hbmQtYS1oYWxmIGNoZWNraW5nIHdhc24ndCBwYXJ0aWN1bGFybHkgdXNlZnVsLgorIworIyBQbHVzIGEgQyBBUEkgb3IgdHdvLCBlLmcuIFB5SW50X0FzTG9uZ01hc2soKSAtPgorIyB1bnNpZ25lZCBsb25nIGFuZCBQeUludF9Bc0xvbmdMb25nTWFzaygpIC0+IHVuc2lnbmVkCisjIGxvbmcgbG9uZyAoaWYgdGhhdCBleGlzdHMpLgogCiBMQVJHRSA9IDB4N0ZGRkZGRkYKIFZFUllfTEFSR0UgPSAweEZGMDAwMDEyMTIxMjEyMTIxMjEyMTI0MgpAQCAtNzcsNyArNzksOCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDk5LCBnZXRhcmdzX2IoSW50KCkpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGdldGFyZ3NfYihJbnRTdWJjbGFzcygpKSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhcmdzX2IsIEJhZEludCgpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGdldGFyZ3NfYihCYWRJbnQyKCkpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgZ2V0YXJnc19iKEJhZEludDIoKSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgZ2V0YXJnc19iKEJhZEludDMoKSkpCiAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgZ2V0YXJnc19iLCAtMSkKQEAgLTk1LDcgKzk4LDggQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg5OSwgZ2V0YXJnc19CKEludCgpKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBnZXRhcmdzX0IoSW50U3ViY2xhc3MoKSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXJnc19CLCBCYWRJbnQoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBnZXRhcmdzX0IoQmFkSW50MigpKSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGdldGFyZ3NfQihCYWRJbnQyKCkpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGdldGFyZ3NfQihCYWRJbnQzKCkpKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVUNIQVJfTUFYLCBnZXRhcmdzX0IoLTEpKQpAQCAtMTEzLDcgKzExNyw4IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoOTksIGdldGFyZ3NfSChJbnQoKSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgZ2V0YXJnc19IKEludFN1YmNsYXNzKCkpKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldGFyZ3NfSCwgQmFkSW50KCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgZ2V0YXJnc19IKEJhZEludDIoKSkpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBnZXRhcmdzX0goQmFkSW50MigpKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBnZXRhcmdzX0goQmFkSW50MygpKSkKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFVTSFJUX01BWCwgZ2V0YXJnc19IKC0xKSkKQEAgLTEzMiw3ICsxMzcsOCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDk5LCBnZXRhcmdzX0koSW50KCkpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGdldGFyZ3NfSShJbnRTdWJjbGFzcygpKSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhcmdzX0ksIEJhZEludCgpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGdldGFyZ3NfSShCYWRJbnQyKCkpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgZ2V0YXJnc19JKEJhZEludDIoKSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgZ2V0YXJnc19JKEJhZEludDMoKSkpCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChVSU5UX01BWCwgZ2V0YXJnc19JKC0xKSkKQEAgLTE3Miw3ICsxNzgsOCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDk5LCBnZXRhcmdzX2goSW50KCkpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGdldGFyZ3NfaChJbnRTdWJjbGFzcygpKSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhcmdzX2gsIEJhZEludCgpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGdldGFyZ3NfaChCYWRJbnQyKCkpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgZ2V0YXJnc19oKEJhZEludDIoKSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgZ2V0YXJnc19oKEJhZEludDMoKSkpCiAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgZ2V0YXJnc19oLCBTSFJUX01JTi0xKQpAQCAtMTkwLDcgKzE5Nyw4IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoOTksIGdldGFyZ3NfaShJbnQoKSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgZ2V0YXJnc19pKEludFN1YmNsYXNzKCkpKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldGFyZ3NfaSwgQmFkSW50KCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgZ2V0YXJnc19pKEJhZEludDIoKSkpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBnZXRhcmdzX2koQmFkSW50MigpKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBnZXRhcmdzX2koQmFkSW50MygpKSkKIAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBnZXRhcmdzX2ksIElOVF9NSU4tMSkKQEAgLTIwOCw3ICsyMTYsOCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDk5LCBnZXRhcmdzX2woSW50KCkpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGdldGFyZ3NfbChJbnRTdWJjbGFzcygpKSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhcmdzX2wsIEJhZEludCgpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGdldGFyZ3NfbChCYWRJbnQyKCkpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgZ2V0YXJnc19sKEJhZEludDIoKSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgZ2V0YXJnc19sKEJhZEludDMoKSkpCiAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgZ2V0YXJnc19sLCBMT05HX01JTi0xKQpAQCAtMjM5LDYgKzI0OCw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGdldGFyZ3NfbiwgVkVSWV9MQVJHRSkKIAogCitAdW5pdHRlc3Quc2tpcElmKGdldGFyZ3NfTCBpcyBOb25lLCAnUFlfTE9OR19MT05HIGlzIG5vdCBhdmFpbGFibGUnKQogY2xhc3MgTG9uZ0xvbmdfVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X0woc2VsZik6CiAgICAgICAgIGZyb20gX3Rlc3RjYXBpIGltcG9ydCBnZXRhcmdzX0wKQEAgLTI0OSw3ICsyNTksOCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDk5LCBnZXRhcmdzX0woSW50KCkpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGdldGFyZ3NfTChJbnRTdWJjbGFzcygpKSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhcmdzX0wsIEJhZEludCgpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGdldGFyZ3NfTChCYWRJbnQyKCkpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgZ2V0YXJnc19MKEJhZEludDIoKSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgZ2V0YXJnc19MKEJhZEludDMoKSkpCiAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgZ2V0YXJnc19MLCBMTE9OR19NSU4tMSkKQEAgLTYwMCwyNCArNjExLDUgQEAKICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZ2V0YXJnc19aX2hhc2goTm9uZSkpCiAKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHRlc3RzID0gWwotICAgICAgICBTaWduZWRfVGVzdENhc2UsCi0gICAgICAgIFVuc2lnbmVkX1Rlc3RDYXNlLAotICAgICAgICBCb29sZWFuX1Rlc3RDYXNlLAotICAgICAgICBUdXBsZV9UZXN0Q2FzZSwKLSAgICAgICAgS2V5d29yZHNfVGVzdENhc2UsCi0gICAgICAgIEtleXdvcmRPbmx5X1Rlc3RDYXNlLAotICAgICAgICBCeXRlc19UZXN0Q2FzZSwKLSAgICAgICAgVW5pY29kZV9UZXN0Q2FzZSwKLSAgICBdCi0gICAgdHJ5OgotICAgICAgICBmcm9tIF90ZXN0Y2FwaSBpbXBvcnQgZ2V0YXJnc19MLCBnZXRhcmdzX0sKLSAgICBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgICAgIHBhc3MgIyBQWV9MT05HX0xPTkcgbm90IGF2YWlsYWJsZQotICAgIGVsc2U6Ci0gICAgICAgIHRlc3RzLmFwcGVuZChMb25nTG9uZ19UZXN0Q2FzZSkKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdCgqdGVzdHMpCi0KIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZ2V0cGFzcy5weSBiL0xpYi90ZXN0L3Rlc3RfZ2V0cGFzcy5weQppbmRleCAxNzMxYmQ0Li4zNDUyZTQ2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2dldHBhc3MucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9nZXRwYXNzLnB5CkBAIC0xLDcgKzEsNyBAQAogaW1wb3J0IGdldHBhc3MKIGltcG9ydCBvcwogaW1wb3J0IHVuaXR0ZXN0Ci1mcm9tIGlvIGltcG9ydCBCeXRlc0lPLCBTdHJpbmdJTworZnJvbSBpbyBpbXBvcnQgQnl0ZXNJTywgU3RyaW5nSU8sIFRleHRJT1dyYXBwZXIKIGZyb20gdW5pdHRlc3QgaW1wb3J0IG1vY2sKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogCkBAIC02OSw2ICs2OSwxNCBAQAogICAgICAgICBnZXRwYXNzLl9yYXdfaW5wdXQoc3RyZWFtPVN0cmluZ0lPKCkpCiAgICAgICAgIG1vY2tfaW5wdXQucmVhZGxpbmUuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoKQogCisgICAgQG1vY2sucGF0Y2goJ3N5cy5zdGRpbicpCisgICAgZGVmIHRlc3RfdXNlc19zdGRpbl9hc19kaWZmZXJlbnRfbG9jYWxlKHNlbGYsIG1vY2tfaW5wdXQpOgorICAgICAgICBzdHJlYW0gPSBUZXh0SU9XcmFwcGVyKEJ5dGVzSU8oKSwgZW5jb2Rpbmc9ImFzY2lpIikKKyAgICAgICAgbW9ja19pbnB1dC5yZWFkbGluZS5yZXR1cm5fdmFsdWUgPSAiSGFzw4XigJpvOiAiCisgICAgICAgIGdldHBhc3MuX3Jhd19pbnB1dChwcm9tcHQ9Ikhhc8OF4oCabzogIixzdHJlYW09c3RyZWFtKQorICAgICAgICBtb2NrX2lucHV0LnJlYWRsaW5lLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKCkKKworCiAgICAgZGVmIHRlc3RfcmFpc2VzX29uX2VtcHR5X2lucHV0KHNlbGYpOgogICAgICAgICBpbnB1dCA9IFN0cmluZ0lPKCcnKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFT0ZFcnJvciwgZ2V0cGFzcy5fcmF3X2lucHV0LCBpbnB1dD1pbnB1dCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZ2V0dGV4dC5weSBiL0xpYi90ZXN0L3Rlc3RfZ2V0dGV4dC5weQppbmRleCA1NDU2OTQ4Li4yNzM3ZTgxIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2dldHRleHQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9nZXR0ZXh0LnB5CkBAIC03Nyw4ICs3NywxNCBAQAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKICAgICAgICAgc2VsZi5lbnYuX19leGl0X18oKQogICAgICAgICBkZWwgc2VsZi5lbnYKLSAgICAgICAgc2h1dGlsLnJtdHJlZShvcy5wYXRoLnNwbGl0KExPQ0FMRURJUilbMF0pCisgICAgICAgIHN1cHBvcnQucm10cmVlKG9zLnBhdGguc3BsaXQoTE9DQUxFRElSKVswXSkKIAorR05VX01PX0RBVEFfSVNTVUVfMTc4OTggPSBiJycnXAorM2hJRWxRQUFBQUFCQUFBQUhBQUFBQ1FBQUFBQUFBQUFBQUFBQUFBQUFBQXNBQUFBZ2dBQUFDMEFBQUFBVUd4MWNtRnNMVVp2Y20xegorT2lCdWNHeDFjbUZzY3oweU95QndiSFZ5WVd3OUtHNGdJVDBnTVNrN0NpTXRJeTBqTFNNdEl5QWdiV1Z6YzJGblpYTXVjRzhnS0VWaworV0NCVGRIVmthVzhwSUNBakxTTXRJeTBqTFNNS1EyOXVkR1Z1ZEMxVWVYQmxPaUIwWlhoMEwzQnNZV2x1T3lCamFHRnljMlYwUFZWVQorUmkwNENnQT0KKycnJwogCiBjbGFzcyBHZXR0ZXh0VGVzdENhc2UxKEdldHRleHRCYXNlVGVzdCk6CiAgICAgZGVmIHNldFVwKHNlbGYpOgpAQCAtMjkwLDYgKzI5NiwxNCBAQAogICAgICAgICAjIFRlc3QgZm9yIGEgZGFuZ2Vyb3VzIGV4cHJlc3Npb24KICAgICAgICAgcmFpc2VzKFZhbHVlRXJyb3IsIGdldHRleHQuYzJweSwgIm9zLmNobW9kKCcvZXRjL3Bhc3N3ZCcsMDc3NykiKQogCitjbGFzcyBHTlVUcmFuc2xhdGlvblBhcnNpbmdUZXN0KEdldHRleHRCYXNlVGVzdCk6CisgICAgZGVmIHRlc3RfcGx1cmFsX2Zvcm1fZXJyb3JfaXNzdWUxNzg5OChzZWxmKToKKyAgICAgICAgd2l0aCBvcGVuKE1PRklMRSwgJ3diJykgYXMgZnA6CisgICAgICAgICAgICBmcC53cml0ZShiYXNlNjQuZGVjb2RlYnl0ZXMoR05VX01PX0RBVEFfSVNTVUVfMTc4OTgpKQorICAgICAgICB3aXRoIG9wZW4oTU9GSUxFLCAncmInKSBhcyBmcDoKKyAgICAgICAgICAgICMgSWYgdGhpcyBydW5zIGNsZWFubHksIHRoZSBidWcgaXMgZml4ZWQuCisgICAgICAgICAgICB0ID0gZ2V0dGV4dC5HTlVUcmFuc2xhdGlvbnMoZnApCisKIAogY2xhc3MgVW5pY29kZVRyYW5zbGF0aW9uc1Rlc3QoR2V0dGV4dEJhc2VUZXN0KToKICAgICBkZWYgc2V0VXAoc2VsZik6CkBAIC00NjUsMyArNDc5LDE2IEBACiAiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogcXVvdGVkLXByaW50YWJsZVxuIgogIkdlbmVyYXRlZC1CeTogcHlnZXR0ZXh0LnB5IDEuM1xuIgogJycnCisKKyMKKyMgbWVzc2FnZXMucG8sIHVzZWQgZm9yIGJ1ZyAxNzg5OAorIworCisnJycKKyMgdGVzdCBmaWxlIGZvciBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTc4OTgKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTI7IHBsdXJhbD0obiAhPSAxKTtcbiIKKyIjLSMtIy0jLSMgIG1lc3NhZ2VzLnBvIChFZFggU3R1ZGlvKSAgIy0jLSMtIy0jXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCisnJycKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZ2xvYi5weSBiL0xpYi90ZXN0L3Rlc3RfZ2xvYi5weQppbmRleCBlYjlhZWI1Li5hNWFiOGQ2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2dsb2IucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9nbG9iLnB5CkBAIC0xNjksNiArMTY5LDI4IEBACiAgICAgICAgIGVxKGdsb2IuZ2xvYignXFxcXCpcXCpcXCcpLCBbXSkKICAgICAgICAgZXEoZ2xvYi5nbG9iKGInXFxcXCpcXCpcXCcpLCBbXSkKIAorICAgIGRlZiBjaGVja19lc2NhcGUoc2VsZiwgYXJnLCBleHBlY3RlZCk6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2xvYi5lc2NhcGUoYXJnKSwgZXhwZWN0ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2xvYi5lc2NhcGUob3MuZnNlbmNvZGUoYXJnKSksIG9zLmZzZW5jb2RlKGV4cGVjdGVkKSkKKworICAgIGRlZiB0ZXN0X2VzY2FwZShzZWxmKToKKyAgICAgICAgY2hlY2sgPSBzZWxmLmNoZWNrX2VzY2FwZQorICAgICAgICBjaGVjaygnYWJjJywgJ2FiYycpCisgICAgICAgIGNoZWNrKCdbJywgJ1tbXScpCisgICAgICAgIGNoZWNrKCc/JywgJ1s/XScpCisgICAgICAgIGNoZWNrKCcqJywgJ1sqXScpCisgICAgICAgIGNoZWNrKCdbW18vKj8qL19dXScsICdbW11bW11fL1sqXVs/XVsqXS9fXV0nKQorICAgICAgICBjaGVjaygnL1tbXy8qPyovX11dLycsICcvW1tdW1tdXy9bKl1bP11bKl0vX11dLycpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhzeXMucGxhdGZvcm0gPT0gIndpbjMyIiwgIldpbjMyIHNwZWNpZmljIHRlc3QiKQorICAgIGRlZiB0ZXN0X2VzY2FwZV93aW5kb3dzKHNlbGYpOgorICAgICAgICBjaGVjayA9IHNlbGYuY2hlY2tfZXNjYXBlCisgICAgICAgIGNoZWNrKCc/Oj8nLCAnPzpbP10nKQorICAgICAgICBjaGVjaygnKjoqJywgJyo6WypdJykKKyAgICAgICAgY2hlY2socidcXD9cYzpcPycsIHInXFw/XGM6XFs/XScpCisgICAgICAgIGNoZWNrKHInXFwqXCpcKicsIHInXFwqXCpcWypdJykKKyAgICAgICAgY2hlY2soJy8vPy9jOi8/JywgJy8vPy9jOi9bP10nKQorICAgICAgICBjaGVjaygnLy8qLyovKicsICcvLyovKi9bKl0nKQogCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgcnVuX3VuaXR0ZXN0KEdsb2JUZXN0cykKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZ3JhbW1hci5weSBiL0xpYi90ZXN0L3Rlc3RfZ3JhbW1hci5weQppbmRleCA2YjMyNmJkLi4yNTA0NTIzIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2dyYW1tYXIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9ncmFtbWFyLnB5CkBAIC04MCw2ICs4MCwxMiBAQAogICAgICAgICB4ID0gLjNlMTQKICAgICAgICAgeCA9IDMuMWU0CiAKKyAgICBkZWYgdGVzdF9mbG9hdF9leHBvbmVudF90b2tlbml6YXRpb24oc2VsZik6CisgICAgICAgICMgU2VlIGlzc3VlIDIxNjQyLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEgaWYgMWVsc2UgMCwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxIGlmIDBlbHNlIDAsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yLCBldmFsLCAiMCBpZiAxRWxzZSAwIikKKwogICAgIGRlZiB0ZXN0X3N0cmluZ19saXRlcmFscyhzZWxmKToKICAgICAgICAgeCA9ICcnOyB5ID0gIiI7IHNlbGYuYXNzZXJ0VHJ1ZShsZW4oeCkgPT0gMCBhbmQgeCA9PSB5KQogICAgICAgICB4ID0gJ1wnJzsgeSA9ICInIjsgc2VsZi5hc3NlcnRUcnVlKGxlbih4KSA9PSAxIGFuZCB4ID09IHkgYW5kIG9yZCh4KSA9PSAzOSkKQEAgLTE5OCw3ICsyMDQsOSBAQAogICAgICAgICBkMDEoKQogICAgICAgICBkMDEoMSkKICAgICAgICAgZDAxKCooMSwpKQorICAgICAgICBkMDEoKltdIG9yIFsyXSkKICAgICAgICAgZDAxKCoqeydhJzoyfSkKKyAgICAgICAgZDAxKCoqeydhJzoyfSBvciB7fSkKICAgICAgICAgZGVmIGQxMShhLCBiPTEpOiBwYXNzCiAgICAgICAgIGQxMSgxKQogICAgICAgICBkMTEoMSwgMikKQEAgLTI5NiwyNCArMzA0LDMxIEBACiAgICAgICAgICMgYXJndW1lbnQgYW5ub3RhdGlvbiB0ZXN0cwogICAgICAgICBkZWYgZih4KSAtPiBsaXN0OiBwYXNzCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5fX2Fubm90YXRpb25zX18sIHsncmV0dXJuJzogbGlzdH0pCi0gICAgICAgIGRlZiBmKHg6aW50KTogcGFzcworICAgICAgICBkZWYgZih4OiBpbnQpOiBwYXNzCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5fX2Fubm90YXRpb25zX18sIHsneCc6IGludH0pCi0gICAgICAgIGRlZiBmKCp4OnN0cik6IHBhc3MKKyAgICAgICAgZGVmIGYoKng6IHN0cik6IHBhc3MKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLl9fYW5ub3RhdGlvbnNfXywgeyd4Jzogc3RyfSkKLSAgICAgICAgZGVmIGYoKip4OmZsb2F0KTogcGFzcworICAgICAgICBkZWYgZigqKng6IGZsb2F0KTogcGFzcwogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuX19hbm5vdGF0aW9uc19fLCB7J3gnOiBmbG9hdH0pCi0gICAgICAgIGRlZiBmKHgsIHk6MSsyKTogcGFzcworICAgICAgICBkZWYgZih4LCB5OiAxKzIpOiBwYXNzCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5fX2Fubm90YXRpb25zX18sIHsneSc6IDN9KQotICAgICAgICBkZWYgZihhLCBiOjEsIGM6MiwgZCk6IHBhc3MKKyAgICAgICAgZGVmIGYoYSwgYjogMSwgYzogMiwgZCk6IHBhc3MKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLl9fYW5ub3RhdGlvbnNfXywgeydiJzogMSwgJ2MnOiAyfSkKLSAgICAgICAgZGVmIGYoYSwgYjoxLCBjOjIsIGQsIGU6Mz00LCBmPTUsICpnOjYpOiBwYXNzCisgICAgICAgIGRlZiBmKGEsIGI6IDEsIGM6IDIsIGQsIGU6IDMgPSA0LCBmPTUsICpnOiA2KTogcGFzcwogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuX19hbm5vdGF0aW9uc19fLAotICAgICAgICAgICAgICAgICAgICAgICAgICB7J2InOiAxLCAnYyc6IDIsICdlJzogMywgJ2cnOiA2fSkKLSAgICAgICAgZGVmIGYoYSwgYjoxLCBjOjIsIGQsIGU6Mz00LCBmPTUsICpnOjYsIGg6NywgaT04LCBqOjk9MTAsCi0gICAgICAgICAgICAgICoqazoxMSkgLT4gMTI6IHBhc3MKKyAgICAgICAgICAgICAgICAgICAgICAgICB7J2InOiAxLCAnYyc6IDIsICdlJzogMywgJ2cnOiA2fSkKKyAgICAgICAgZGVmIGYoYSwgYjogMSwgYzogMiwgZCwgZTogMyA9IDQsIGY9NSwgKmc6IDYsIGg6IDcsIGk9OCwgajogOSA9IDEwLAorICAgICAgICAgICAgICAqKms6IDExKSAtPiAxMjogcGFzcwogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuX19hbm5vdGF0aW9uc19fLAotICAgICAgICAgICAgICAgICAgICAgICAgICB7J2InOiAxLCAnYyc6IDIsICdlJzogMywgJ2cnOiA2LCAnaCc6IDcsICdqJzogOSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICdrJzogMTEsICdyZXR1cm4nOiAxMn0pCisgICAgICAgICAgICAgICAgICAgICAgICAgeydiJzogMSwgJ2MnOiAyLCAnZSc6IDMsICdnJzogNiwgJ2gnOiA3LCAnaic6IDksCisgICAgICAgICAgICAgICAgICAgICAgICAgICdrJzogMTEsICdyZXR1cm4nOiAxMn0pCisgICAgICAgICMgQ2hlY2sgZm9yIGlzc3VlICMyMDYyNSAtLSBhbm5vdGF0aW9ucyBtYW5nbGluZworICAgICAgICBjbGFzcyBTcGFtOgorICAgICAgICAgICAgZGVmIGYoc2VsZiwgKiwgX19rdzogMSk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBjbGFzcyBIYW0oU3BhbSk6IHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChTcGFtLmYuX19hbm5vdGF0aW9uc19fLCB7J19TcGFtX19rdyc6IDF9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEhhbS5mLl9fYW5ub3RhdGlvbnNfXywgeydfU3BhbV9fa3cnOiAxfSkKICAgICAgICAgIyBDaGVjayBmb3IgU0YgQnVnICMxNjk3MjQ4IC0gbWl4aW5nIGRlY29yYXRvcnMgYW5kIGEgcmV0dXJuIGFubm90YXRpb24KICAgICAgICAgZGVmIG51bGwoeCk6IHJldHVybiB4CiAgICAgICAgIEBudWxsCkBAIC0zNzcsNiArMzkyLDMxIEBACiAgICAgICAgIGNoZWNrX3N5bnRheF9lcnJvcihzZWxmLCAieCArIDEgPSAxIikKICAgICAgICAgY2hlY2tfc3ludGF4X2Vycm9yKHNlbGYsICJhICsgMSA9IGIgKyAyIikKIAorICAgICMgQ2hlY2sgdGhlIGhldXJpc3RpYyBmb3IgcHJpbnQgJiBleGVjIGNvdmVycyBzaWduaWZpY2FudCBjYXNlcworICAgICMgQXMgd2VsbCBhcyBwbGFjaW5nIHNvbWUgbGltaXRzIG9uIGZhbHNlIHBvc2l0aXZlcworICAgIGRlZiB0ZXN0X2Zvcm1lcl9zdGF0ZW1lbnRzX3JlZmVyX3RvX2J1aWx0aW5zKHNlbGYpOgorICAgICAgICBrZXl3b3JkcyA9ICJwcmludCIsICJleGVjIgorICAgICAgICAjIENhc2VzIHdoZXJlIHdlIHdhbnQgdGhlIGN1c3RvbSBlcnJvcgorICAgICAgICBjYXNlcyA9IFsKKyAgICAgICAgICAgICJ7fSBmb28iLAorICAgICAgICAgICAgInt9IHt7MTpmb299fSIsCisgICAgICAgICAgICAiaWYgMToge30gZm9vIiwKKyAgICAgICAgICAgICJpZiAxOiB7fSB7ezE6Zm9vfX0iLAorICAgICAgICAgICAgImlmIDE6XG4gICAge30gZm9vIiwKKyAgICAgICAgICAgICJpZiAxOlxuICAgIHt9IHt7MTpmb299fSIsCisgICAgICAgIF0KKyAgICAgICAgZm9yIGtleXdvcmQgaW4ga2V5d29yZHM6CisgICAgICAgICAgICBjdXN0b21fbXNnID0gImNhbGwgdG8gJ3t9JyIuZm9ybWF0KGtleXdvcmQpCisgICAgICAgICAgICBmb3IgY2FzZSBpbiBjYXNlczoKKyAgICAgICAgICAgICAgICBzb3VyY2UgPSBjYXNlLmZvcm1hdChrZXl3b3JkKQorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KHNvdXJjZT1zb3VyY2UpOgorICAgICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoU3ludGF4RXJyb3IsIGN1c3RvbV9tc2cpOgorICAgICAgICAgICAgICAgICAgICAgICAgZXhlYyhzb3VyY2UpCisgICAgICAgICAgICAgICAgc291cmNlID0gc291cmNlLnJlcGxhY2UoImZvbyIsICIoZm9vLikiKQorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KHNvdXJjZT1zb3VyY2UpOgorICAgICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoU3ludGF4RXJyb3IsICJpbnZhbGlkIHN5bnRheCIpOgorICAgICAgICAgICAgICAgICAgICAgICAgZXhlYyhzb3VyY2UpCisKICAgICBkZWYgdGVzdF9kZWxfc3RtdChzZWxmKToKICAgICAgICAgIyAnZGVsJyBleHBybGlzdAogICAgICAgICBhYmMgPSBbMSwyLDNdCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2d6aXAucHkgYi9MaWIvdGVzdC90ZXN0X2d6aXAucHkKaW5kZXggMDM0YWNiMC4uYjQxNzA0NCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9nemlwLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZ3ppcC5weQpAQCAtNDMsNiArNDMsMTQgQEAKIAogCiBjbGFzcyBUZXN0R3ppcChCYXNlVGVzdCk6CisgICAgZGVmIHdyaXRlX2FuZF9yZWFkX2JhY2soc2VsZiwgZGF0YSwgbW9kZT0nYicpOgorICAgICAgICBiX2RhdGEgPSBieXRlcyhkYXRhKQorICAgICAgICB3aXRoIGd6aXAuR3ppcEZpbGUoc2VsZi5maWxlbmFtZSwgJ3cnK21vZGUpIGFzIGY6CisgICAgICAgICAgICBsID0gZi53cml0ZShkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGwsIGxlbihiX2RhdGEpKQorICAgICAgICB3aXRoIGd6aXAuR3ppcEZpbGUoc2VsZi5maWxlbmFtZSwgJ3InK21vZGUpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCBiX2RhdGEpCisKICAgICBkZWYgdGVzdF93cml0ZShzZWxmKToKICAgICAgICAgd2l0aCBnemlwLkd6aXBGaWxlKHNlbGYuZmlsZW5hbWUsICd3YicpIGFzIGY6CiAgICAgICAgICAgICBmLndyaXRlKGRhdGExICogNTApCkBAIC01Nyw2ICs2NSwzMSBAQAogICAgICAgICAjIFRlc3QgbXVsdGlwbGUgY2xvc2UoKSBjYWxscy4KICAgICAgICAgZi5jbG9zZSgpCiAKKyAgICAjIFRoZSBmb2xsb3dpbmcgdGVzdF93cml0ZV94eSBtZXRob2RzIHRlc3QgdGhhdCB3cml0ZSBhY2NlcHRzCisgICAgIyB0aGUgY29ycmVzcG9uZGluZyBieXRlcy1saWtlIG9iamVjdCB0eXBlIGFzIGlucHV0CisgICAgIyBhbmQgdGhhdCB0aGUgZGF0YSB3cml0dGVuIGVxdWFscyBieXRlcyh4eSkgaW4gYWxsIGNhc2VzLgorICAgIGRlZiB0ZXN0X3dyaXRlX21lbW9yeXZpZXcoc2VsZik6CisgICAgICAgIHNlbGYud3JpdGVfYW5kX3JlYWRfYmFjayhtZW1vcnl2aWV3KGRhdGExICogNTApKQorICAgICAgICBtID0gbWVtb3J5dmlldyhieXRlcyhyYW5nZSgyNTYpKSkKKyAgICAgICAgZGF0YSA9IG0uY2FzdCgnQicsIHNoYXBlPVs4LDgsNF0pCisgICAgICAgIHNlbGYud3JpdGVfYW5kX3JlYWRfYmFjayhkYXRhKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfYnl0ZWFycmF5KHNlbGYpOgorICAgICAgICBzZWxmLndyaXRlX2FuZF9yZWFkX2JhY2soYnl0ZWFycmF5KGRhdGExICogNTApKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfaW5jb21wYXRpYmxlX3R5cGUoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IG5vbi1ieXRlcy1saWtlIHR5cGVzIHJhaXNlIFR5cGVFcnJvci4KKyAgICAgICAgIyBJc3N1ZSAjMjE1NjA6IGF0dGVtcHRzIHRvIHdyaXRlIGluY29tcGF0aWJsZSB0eXBlcworICAgICAgICAjIHNob3VsZCBub3QgYWZmZWN0IHRoZSBzdGF0ZSBvZiB0aGUgZmlsZW9iamVjdAorICAgICAgICB3aXRoIGd6aXAuR3ppcEZpbGUoc2VsZi5maWxlbmFtZSwgJ3diJykgYXMgZjoKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgICAgICBmLndyaXRlKCdhJykKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgICAgICBmLndyaXRlKFsxXSkKKyAgICAgICAgICAgIGYud3JpdGUoZGF0YTEpCisgICAgICAgIHdpdGggZ3ppcC5HemlwRmlsZShzZWxmLmZpbGVuYW1lLCAncmInKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgZGF0YTEpCisKICAgICBkZWYgdGVzdF9yZWFkKHNlbGYpOgogICAgICAgICBzZWxmLnRlc3Rfd3JpdGUoKQogICAgICAgICAjIFRyeSByZWFkaW5nLgpAQCAtMTMwLDYgKzE2MywxNCBAQAogICAgICAgICAgICAgICAgIGlmIG5vdCB6dHh0OiBicmVhawogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbnRlbnRzLCBiJ2EnKjIwMSkKIAorICAgIGRlZiB0ZXN0X2V4Y2x1c2l2ZV93cml0ZShzZWxmKToKKyAgICAgICAgd2l0aCBnemlwLkd6aXBGaWxlKHNlbGYuZmlsZW5hbWUsICd4YicpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKGRhdGExICogNTApCisgICAgICAgIHdpdGggZ3ppcC5HemlwRmlsZShzZWxmLmZpbGVuYW1lLCAncmInKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgZGF0YTEgKiA1MCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhGaWxlRXhpc3RzRXJyb3IpOgorICAgICAgICAgICAgZ3ppcC5HemlwRmlsZShzZWxmLmZpbGVuYW1lLCAneGInKQorCiAgICAgZGVmIHRlc3RfYnVmZmVyZWRfcmVhZGVyKHNlbGYpOgogICAgICAgICAjIElzc3VlICM3NDcxOiBhIEd6aXBGaWxlIGNhbiBiZSB3cmFwcGVkIGluIGEgQnVmZmVyZWRSZWFkZXIgZm9yCiAgICAgICAgICMgcGVyZm9ybWFuY2UuCkBAIC0yMDUsNiArMjQ2LDkgQEAKICAgICAgICAgc2VsZi50ZXN0X3dyaXRlKCkKICAgICAgICAgd2l0aCBnemlwLkd6aXBGaWxlKHNlbGYuZmlsZW5hbWUsICdyJykgYXMgZjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5teWZpbGVvYmoubW9kZSwgJ3JiJykKKyAgICAgICAgc3VwcG9ydC51bmxpbmsoc2VsZi5maWxlbmFtZSkKKyAgICAgICAgd2l0aCBnemlwLkd6aXBGaWxlKHNlbGYuZmlsZW5hbWUsICd4JykgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5teWZpbGVvYmoubW9kZSwgJ3hiJykKIAogICAgIGRlZiB0ZXN0XzE2NDc0ODQoc2VsZik6CiAgICAgICAgIGZvciBtb2RlIGluICgnd2InLCAncmInKToKQEAgLTM4OCw2ICs0MzIsMjAgQEAKICAgICAgICAgICAgIGRhdGFjID0gZ3ppcC5jb21wcmVzcyhkYXRhKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnemlwLmRlY29tcHJlc3MoZGF0YWMpLCBkYXRhKQogCisgICAgZGVmIHRlc3RfcmVhZF90cnVuY2F0ZWQoc2VsZik6CisgICAgICAgIGRhdGEgPSBkYXRhMSo1MAorICAgICAgICAjIERyb3AgdGhlIENSQyAoNCBieXRlcykgYW5kIGZpbGUgc2l6ZSAoNCBieXRlcykuCisgICAgICAgIHRydW5jYXRlZCA9IGd6aXAuY29tcHJlc3MoZGF0YSlbOi04XQorICAgICAgICB3aXRoIGd6aXAuR3ppcEZpbGUoZmlsZW9iaj1pby5CeXRlc0lPKHRydW5jYXRlZCkpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFT0ZFcnJvciwgZi5yZWFkKQorICAgICAgICB3aXRoIGd6aXAuR3ppcEZpbGUoZmlsZW9iaj1pby5CeXRlc0lPKHRydW5jYXRlZCkpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZChsZW4oZGF0YSkpLCBkYXRhKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRU9GRXJyb3IsIGYucmVhZCwgMSkKKyAgICAgICAgIyBJbmNvbXBsZXRlIDEwLWJ5dGUgaGVhZGVyLgorICAgICAgICBmb3IgaSBpbiByYW5nZSgyLCAxMCk6CisgICAgICAgICAgICB3aXRoIGd6aXAuR3ppcEZpbGUoZmlsZW9iaj1pby5CeXRlc0lPKHRydW5jYXRlZFs6aV0pKSBhcyBmOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEVPRkVycm9yLCBmLnJlYWQsIDEpCisKICAgICBkZWYgdGVzdF9yZWFkX3dpdGhfZXh0cmEoc2VsZik6CiAgICAgICAgICMgR3ppcCBkYXRhIHdpdGggYW4gZXh0cmEgZmllbGQKICAgICAgICAgZ3pkYXRhID0gKGInXHgxZlx4OGJceDA4XHgwNFx4YjJceDE3Y1FceDAyXHhmZicKQEAgLTQwNiwzNSArNDY0LDU5IEBACiBjbGFzcyBUZXN0T3BlbihCYXNlVGVzdCk6CiAgICAgZGVmIHRlc3RfYmluYXJ5X21vZGVzKHNlbGYpOgogICAgICAgICB1bmNvbXByZXNzZWQgPSBkYXRhMSAqIDUwCisKICAgICAgICAgd2l0aCBnemlwLm9wZW4oc2VsZi5maWxlbmFtZSwgIndiIikgYXMgZjoKICAgICAgICAgICAgIGYud3JpdGUodW5jb21wcmVzc2VkKQogICAgICAgICB3aXRoIG9wZW4oc2VsZi5maWxlbmFtZSwgInJiIikgYXMgZjoKICAgICAgICAgICAgIGZpbGVfZGF0YSA9IGd6aXAuZGVjb21wcmVzcyhmLnJlYWQoKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZV9kYXRhLCB1bmNvbXByZXNzZWQpCisKICAgICAgICAgd2l0aCBnemlwLm9wZW4oc2VsZi5maWxlbmFtZSwgInJiIikgYXMgZjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIHVuY29tcHJlc3NlZCkKKwogICAgICAgICB3aXRoIGd6aXAub3BlbihzZWxmLmZpbGVuYW1lLCAiYWIiKSBhcyBmOgogICAgICAgICAgICAgZi53cml0ZSh1bmNvbXByZXNzZWQpCiAgICAgICAgIHdpdGggb3BlbihzZWxmLmZpbGVuYW1lLCAicmIiKSBhcyBmOgogICAgICAgICAgICAgZmlsZV9kYXRhID0gZ3ppcC5kZWNvbXByZXNzKGYucmVhZCgpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlX2RhdGEsIHVuY29tcHJlc3NlZCAqIDIpCiAKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhGaWxlRXhpc3RzRXJyb3IpOgorICAgICAgICAgICAgZ3ppcC5vcGVuKHNlbGYuZmlsZW5hbWUsICJ4YiIpCisgICAgICAgIHN1cHBvcnQudW5saW5rKHNlbGYuZmlsZW5hbWUpCisgICAgICAgIHdpdGggZ3ppcC5vcGVuKHNlbGYuZmlsZW5hbWUsICJ4YiIpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKHVuY29tcHJlc3NlZCkKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYuZmlsZW5hbWUsICJyYiIpIGFzIGY6CisgICAgICAgICAgICBmaWxlX2RhdGEgPSBnemlwLmRlY29tcHJlc3MoZi5yZWFkKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVfZGF0YSwgdW5jb21wcmVzc2VkKQorCiAgICAgZGVmIHRlc3RfaW1wbGljaXRfYmluYXJ5X21vZGVzKHNlbGYpOgogICAgICAgICAjIFRlc3QgaW1wbGljaXQgYmluYXJ5IG1vZGVzIChubyAiYiIgb3IgInQiIGluIG1vZGUgc3RyaW5nKS4KICAgICAgICAgdW5jb21wcmVzc2VkID0gZGF0YTEgKiA1MAorCiAgICAgICAgIHdpdGggZ3ppcC5vcGVuKHNlbGYuZmlsZW5hbWUsICJ3IikgYXMgZjoKICAgICAgICAgICAgIGYud3JpdGUodW5jb21wcmVzc2VkKQogICAgICAgICB3aXRoIG9wZW4oc2VsZi5maWxlbmFtZSwgInJiIikgYXMgZjoKICAgICAgICAgICAgIGZpbGVfZGF0YSA9IGd6aXAuZGVjb21wcmVzcyhmLnJlYWQoKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZV9kYXRhLCB1bmNvbXByZXNzZWQpCisKICAgICAgICAgd2l0aCBnemlwLm9wZW4oc2VsZi5maWxlbmFtZSwgInIiKSBhcyBmOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgdW5jb21wcmVzc2VkKQorCiAgICAgICAgIHdpdGggZ3ppcC5vcGVuKHNlbGYuZmlsZW5hbWUsICJhIikgYXMgZjoKICAgICAgICAgICAgIGYud3JpdGUodW5jb21wcmVzc2VkKQogICAgICAgICB3aXRoIG9wZW4oc2VsZi5maWxlbmFtZSwgInJiIikgYXMgZjoKICAgICAgICAgICAgIGZpbGVfZGF0YSA9IGd6aXAuZGVjb21wcmVzcyhmLnJlYWQoKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZV9kYXRhLCB1bmNvbXByZXNzZWQgKiAyKQogCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoRmlsZUV4aXN0c0Vycm9yKToKKyAgICAgICAgICAgIGd6aXAub3BlbihzZWxmLmZpbGVuYW1lLCAieCIpCisgICAgICAgIHN1cHBvcnQudW5saW5rKHNlbGYuZmlsZW5hbWUpCisgICAgICAgIHdpdGggZ3ppcC5vcGVuKHNlbGYuZmlsZW5hbWUsICJ4IikgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUodW5jb21wcmVzc2VkKQorICAgICAgICB3aXRoIG9wZW4oc2VsZi5maWxlbmFtZSwgInJiIikgYXMgZjoKKyAgICAgICAgICAgIGZpbGVfZGF0YSA9IGd6aXAuZGVjb21wcmVzcyhmLnJlYWQoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZV9kYXRhLCB1bmNvbXByZXNzZWQpCisKICAgICBkZWYgdGVzdF90ZXh0X21vZGVzKHNlbGYpOgogICAgICAgICB1bmNvbXByZXNzZWQgPSBkYXRhMS5kZWNvZGUoImFzY2lpIikgKiA1MAogICAgICAgICB1bmNvbXByZXNzZWRfcmF3ID0gdW5jb21wcmVzc2VkLnJlcGxhY2UoIlxuIiwgb3MubGluZXNlcCkKQEAgLTQ2OSw2ICs1NTEsOCBAQAogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgogICAgICAgICAgICAgZ3ppcC5vcGVuKHNlbGYuZmlsZW5hbWUsICJ3YnQiKQogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgZ3ppcC5vcGVuKHNlbGYuZmlsZW5hbWUsICJ4YnQiKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgogICAgICAgICAgICAgZ3ppcC5vcGVuKHNlbGYuZmlsZW5hbWUsICJyYiIsIGVuY29kaW5nPSJ1dGYtOCIpCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CiAgICAgICAgICAgICBnemlwLm9wZW4oc2VsZi5maWxlbmFtZSwgInJiIiwgZXJyb3JzPSJpZ25vcmUiKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9oYXNoLnB5IGIvTGliL3Rlc3QvdGVzdF9oYXNoLnB5CmluZGV4IDIyZWJiY2MuLmY2NDdjNmYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaGFzaC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2hhc2gucHkKQEAgLTEyLDYgKzEyLDQwIEBACiAKIElTXzY0QklUID0gc3lzLm1heHNpemUgPiAyKiozMgogCitkZWYgbGNnKHgsIGxlbmd0aD0xNik6CisgICAgIiIiTGluZWFyIGNvbmdydWVudGlhbCBnZW5lcmF0b3IiIiIKKyAgICBpZiB4ID09IDA6CisgICAgICAgIHJldHVybiBieXRlcyhsZW5ndGgpCisgICAgb3V0ID0gYnl0ZWFycmF5KGxlbmd0aCkKKyAgICBmb3IgaSBpbiByYW5nZShsZW5ndGgpOgorICAgICAgICB4ID0gKDIxNDAxMyAqIHggKyAyNTMxMDExKSAmIDB4N2ZmZmZmZmYKKyAgICAgICAgb3V0W2ldID0gKHggPj4gMTYpICYgMHhmZgorICAgIHJldHVybiBieXRlcyhvdXQpCisKK2RlZiBweXNpcGhhc2godWludDY0KToKKyAgICAiIiJDb252ZXJ0IFNpcEhhc2gyNCBvdXRwdXQgdG8gUHlfaGFzaF90CisgICAgIiIiCisgICAgYXNzZXJ0IDAgPD0gdWludDY0IDwgKDEgPDwgNjQpCisgICAgIyBzaW1wbGUgdW5zaWduZWQgdG8gc2lnbmVkIGludDY0CisgICAgaWYgdWludDY0ID4gKDEgPDwgNjMpIC0gMToKKyAgICAgICAgaW50NjQgPSB1aW50NjQgLSAoMSA8PCA2NCkKKyAgICBlbHNlOgorICAgICAgICBpbnQ2NCA9IHVpbnQ2NAorICAgICMgbWFuZ2xlIHVpbnQ2NCB0byB1aW50MzIKKyAgICB1aW50MzIgPSAodWludDY0IF4gdWludDY0ID4+IDMyKSAmIDB4ZmZmZmZmZmYKKyAgICAjIHNpbXBsZSB1bnNpZ25lZCB0byBzaWduZWQgaW50MzIKKyAgICBpZiB1aW50MzIgPiAoMSA8PCAzMSkgLSAxOgorICAgICAgICBpbnQzMiA9IHVpbnQzMiAtICgxIDw8IDMyKQorICAgIGVsc2U6CisgICAgICAgIGludDMyID0gdWludDMyCisgICAgcmV0dXJuIGludDMyLCBpbnQ2NAorCitkZWYgc2tpcF91bmxlc3NfaW50ZXJuYWxoYXNoKHRlc3QpOgorICAgICIiIlNraXAgZGVjb3JhdG9yIGZvciB0ZXN0cyB0aGF0IGRlcGVuZCBvbiBTaXBIYXNoMjQgb3IgRk5WIiIiCisgICAgb2sgPSBzeXMuaGFzaF9pbmZvLmFsZ29yaXRobSBpbiB7ImZudiIsICJzaXBoYXNoMjQifQorICAgIG1zZyA9ICJSZXF1aXJlcyBTaXBIYXNoMjQgb3IgRk5WIgorICAgIHJldHVybiB0ZXN0IGlmIG9rIGVsc2UgdW5pdHRlc3Quc2tpcChtc2cpKHRlc3QpCisKIAogY2xhc3MgSGFzaEVxdWFsaXR5VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogCkBAIC0xNjEsMTIgKzE5NSw2NCBAQAogICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHJ1bjEsIHJ1bjIpCiAKIGNsYXNzIFN0cmluZ2xpa2VIYXNoUmFuZG9taXphdGlvblRlc3RzKEhhc2hSYW5kb21pemF0aW9uVGVzdHMpOgorICAgIHJlcHJfID0gTm9uZQorICAgIHJlcHJfbG9uZyA9IE5vbmUKKworICAgICMgMzJiaXQgbGl0dGxlLCA2NGJpdCBsaXR0bGUsIDMyYml0IGJpZywgNjRiaXQgYmlnCisgICAga25vd25faGFzaGVzID0geworICAgICAgICAnZGpiYTMzeCc6IFsgIyBvbmx5IHVzZWQgZm9yIHNtYWxsIHN0cmluZ3MKKyAgICAgICAgICAgICMgc2VlZCAwLCAnYWJjJworICAgICAgICAgICAgWzE5MzQ4NTk2MCwgMTkzNDg1OTYwLCAgMTkzNDg1OTYwLCAxOTM0ODU5NjBdLAorICAgICAgICAgICAgIyBzZWVkIDQyLCAnYWJjJworICAgICAgICAgICAgWy02Nzg5NjYxOTYsIDU3Mzc2MzQyNjI2MzIyMzM3MiwgLTgyMDQ4OTM4OCwgLTQyODI5MDU4MDQ4MjYwMzk2NjVdLAorICAgICAgICAgICAgXSwKKyAgICAgICAgJ3NpcGhhc2gyNCc6IFsKKyAgICAgICAgICAgICMgTk9URTogUHlVQ1MyIGxheW91dCBkZXBlbmRzIG9uIGVuZGlhbmVzcworICAgICAgICAgICAgIyBzZWVkIDAsICdhYmMnCisgICAgICAgICAgICBbMTE5ODU4MzUxOCwgNDU5NjA2OTIwMDcxMDEzNTUxOCwgMTE5ODU4MzUxOCwgNDU5NjA2OTIwMDcxMDEzNTUxOF0sCisgICAgICAgICAgICAjIHNlZWQgNDIsICdhYmMnCisgICAgICAgICAgICBbMjczODc2ODg2LCAtNDUwMTYxODE1MjUyNDU0NDEwNiwgMjczODc2ODg2LCAtNDUwMTYxODE1MjUyNDU0NDEwNl0sCisgICAgICAgICAgICAjIHNlZWQgNDIsICdhYmNkZWZnaGlqaycKKyAgICAgICAgICAgIFstMTc0NTIxNTMxMywgNDQzNjcxOTU4ODg5Mjg3Njk3NSwgLTE3NDUyMTUzMTMsIDQ0MzY3MTk1ODg4OTI4NzY5NzVdLAorICAgICAgICAgICAgIyBzZWVkIDAsICfDpMO64oiR4oSHJworICAgICAgICAgICAgWzQ5MzU3MDgwNiwgNTc0OTk4NjQ4NDE4OTYxMjc5MCwgLTEwMDYzODE1NjQsIC01OTE1MTExNDUwMTk5NDY4NTQwXSwKKyAgICAgICAgICAgICMgc2VlZCA0MiwgJ8Okw7riiJHihIcnCisgICAgICAgICAgICBbLTE2NzcxMTA4MTYsIC0yOTQ3OTgxMzQyMjI3NzM4MTQ0LCAtMTg2MDIwNzc5MywgLTQyOTY2OTkyMTc2NTI1MTYwMTddLAorICAgICAgICBdLAorICAgICAgICAnZm52JzogWworICAgICAgICAgICAgIyBzZWVkIDAsICdhYmMnCisgICAgICAgICAgICBbLTE2MDA5MjU1MzMsIDE0NTMwNzk3MjkxODgwOTgyMTEsIC0xNjAwOTI1NTMzLAorICAgICAgICAgICAgIDE0NTMwNzk3MjkxODgwOTgyMTFdLAorICAgICAgICAgICAgIyBzZWVkIDQyLCAnYWJjJworICAgICAgICAgICAgWy0yMDYwNzY3OTksIC00NDEwOTExNTAyMzAzODc4NTA5LCAtMTAyNDAxNDQ1NywKKyAgICAgICAgICAgICAtMzU3MDE1MDk2OTQ3OTk5NDEzMF0sCisgICAgICAgICAgICAjIHNlZWQgNDIsICdhYmNkZWZnaGlqaycKKyAgICAgICAgICAgIFs4MTExMzY3NTEsIC01MDQ2MjMwMDQ5Mzc2MTE4NzQ2LCAtNzcyMDgwNTMgLAorICAgICAgICAgICAgIC00Nzc5MDI5NjE1MjgxMDE5NjY2XSwKKyAgICAgICAgICAgICMgc2VlZCAwLCAnw6TDuuKIkeKEhycKKyAgICAgICAgICAgIFs0NDQwMjgxNywgODk5ODI5NzU3OTg0NTk4NzQzMSwgLTE5NTYyNDAzMzEsCisgICAgICAgICAgICAgLTc4MjY5Nzg4ODYxNDA0Nzg4N10sCisgICAgICAgICAgICAjIHNlZWQgNDIsICfDpMO64oiR4oSHJworICAgICAgICAgICAgWy0yODMwNjYzNjUsIC00NTc2NzI5ODgzODI0NjAxNTQzLCAtMjcxODcxNDA3LAorICAgICAgICAgICAgIC0zOTI3Njk1NTAxMTg3MjQ3MDg0XSwKKyAgICAgICAgXQorICAgIH0KKworICAgIGRlZiBnZXRfZXhwZWN0ZWRfaGFzaChzZWxmLCBwb3NpdGlvbiwgbGVuZ3RoKToKKyAgICAgICAgaWYgbGVuZ3RoIDwgc3lzLmhhc2hfaW5mby5jdXRvZmY6CisgICAgICAgICAgICBhbGdvcml0aG0gPSAiZGpiYTMzeCIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFsZ29yaXRobSA9IHN5cy5oYXNoX2luZm8uYWxnb3JpdGhtCisgICAgICAgIGlmIHN5cy5ieXRlb3JkZXIgPT0gJ2xpdHRsZSc6CisgICAgICAgICAgICBwbGF0Zm9ybSA9IDEgaWYgSVNfNjRCSVQgZWxzZSAwCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBhc3NlcnQoc3lzLmJ5dGVvcmRlciA9PSAnYmlnJykKKyAgICAgICAgICAgIHBsYXRmb3JtID0gMyBpZiBJU182NEJJVCBlbHNlIDIKKyAgICAgICAgcmV0dXJuIHNlbGYua25vd25faGFzaGVzW2FsZ29yaXRobV1bcG9zaXRpb25dW3BsYXRmb3JtXQorCiAgICAgZGVmIHRlc3RfbnVsbF9oYXNoKHNlbGYpOgogICAgICAgICAjIFBZVEhPTkhBU0hTRUVEPTAgZGlzYWJsZXMgdGhlIHJhbmRvbWl6ZWQgaGFzaAotICAgICAgICBpZiBJU182NEJJVDoKLSAgICAgICAgICAgIGtub3duX2hhc2hfb2Zfb2JqID0gMTQ1MzA3OTcyOTE4ODA5ODIxMQotICAgICAgICBlbHNlOgotICAgICAgICAgICAga25vd25faGFzaF9vZl9vYmogPSAtMTYwMDkyNTUzMworICAgICAgICBrbm93bl9oYXNoX29mX29iaiA9IHNlbGYuZ2V0X2V4cGVjdGVkX2hhc2goMCwgMykKIAogICAgICAgICAjIFJhbmRvbWl6YXRpb24gaXMgZW5hYmxlZCBieSBkZWZhdWx0OgogICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHNlbGYuZ2V0X2hhc2goc2VsZi5yZXByXyksIGtub3duX2hhc2hfb2Zfb2JqKQpAQCAtMTc0LDM5ICsyNjAsNTMgQEAKICAgICAgICAgIyBJdCBjYW4gYWxzbyBiZSBkaXNhYmxlZCBieSBzZXR0aW5nIHRoZSBzZWVkIHRvIDA6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5nZXRfaGFzaChzZWxmLnJlcHJfLCBzZWVkPTApLCBrbm93bl9oYXNoX29mX29iaikKIAorICAgIEBza2lwX3VubGVzc19pbnRlcm5hbGhhc2gKICAgICBkZWYgdGVzdF9maXhlZF9oYXNoKHNlbGYpOgogICAgICAgICAjIHRlc3QgYSBmaXhlZCBzZWVkIGZvciB0aGUgcmFuZG9taXplZCBoYXNoCiAgICAgICAgICMgTm90ZSB0aGF0IGFsbCB0eXBlcyBzaGFyZSB0aGUgc2FtZSB2YWx1ZXM6Ci0gICAgICAgIGlmIElTXzY0QklUOgotICAgICAgICAgICAgaWYgc3lzLmJ5dGVvcmRlciA9PSAnbGl0dGxlJzoKLSAgICAgICAgICAgICAgICBoID0gLTQ0MTA5MTE1MDIzMDM4Nzg1MDkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgaCA9IC0zNTcwMTUwOTY5NDc5OTk0MTMwCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBpZiBzeXMuYnl0ZW9yZGVyID09ICdsaXR0bGUnOgotICAgICAgICAgICAgICAgIGggPSAtMjA2MDc2Nzk5Ci0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGggPSAtMTAyNDAxNDQ1NworICAgICAgICBoID0gc2VsZi5nZXRfZXhwZWN0ZWRfaGFzaCgxLCAzKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZ2V0X2hhc2goc2VsZi5yZXByXywgc2VlZD00MiksIGgpCiAKKyAgICBAc2tpcF91bmxlc3NfaW50ZXJuYWxoYXNoCisgICAgZGVmIHRlc3RfbG9uZ19maXhlZF9oYXNoKHNlbGYpOgorICAgICAgICBpZiBzZWxmLnJlcHJfbG9uZyBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGggPSBzZWxmLmdldF9leHBlY3RlZF9oYXNoKDIsIDExKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZ2V0X2hhc2goc2VsZi5yZXByX2xvbmcsIHNlZWQ9NDIpLCBoKQorCisKIGNsYXNzIFN0ckhhc2hSYW5kb21pemF0aW9uVGVzdHMoU3RyaW5nbGlrZUhhc2hSYW5kb21pemF0aW9uVGVzdHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICByZXByXyA9IHJlcHIoJ2FiYycpCisgICAgcmVwcl9sb25nID0gcmVwcignYWJjZGVmZ2hpamsnKQorICAgIHJlcHJfdWNzMiA9IHJlcHIoJ8Okw7riiJHihIcnKQogCisgICAgQHNraXBfdW5sZXNzX2ludGVybmFsaGFzaAogICAgIGRlZiB0ZXN0X2VtcHR5X3N0cmluZyhzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoKCIiKSwgMCkKIAorICAgIEBza2lwX3VubGVzc19pbnRlcm5hbGhhc2gKKyAgICBkZWYgdGVzdF91Y3MyX3N0cmluZyhzZWxmKToKKyAgICAgICAgaCA9IHNlbGYuZ2V0X2V4cGVjdGVkX2hhc2goMywgNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmdldF9oYXNoKHNlbGYucmVwcl91Y3MyLCBzZWVkPTApLCBoKQorICAgICAgICBoID0gc2VsZi5nZXRfZXhwZWN0ZWRfaGFzaCg0LCA2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZ2V0X2hhc2goc2VsZi5yZXByX3VjczIsIHNlZWQ9NDIpLCBoKQorCiBjbGFzcyBCeXRlc0hhc2hSYW5kb21pemF0aW9uVGVzdHMoU3RyaW5nbGlrZUhhc2hSYW5kb21pemF0aW9uVGVzdHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UpOgogICAgIHJlcHJfID0gcmVwcihiJ2FiYycpCisgICAgcmVwcl9sb25nID0gcmVwcihiJ2FiY2RlZmdoaWprJykKIAorICAgIEBza2lwX3VubGVzc19pbnRlcm5hbGhhc2gKICAgICBkZWYgdGVzdF9lbXB0eV9zdHJpbmcoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaChiIiIpLCAwKQogCiBjbGFzcyBNZW1vcnl2aWV3SGFzaFJhbmRvbWl6YXRpb25UZXN0cyhTdHJpbmdsaWtlSGFzaFJhbmRvbWl6YXRpb25UZXN0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICByZXByXyA9ICJtZW1vcnl2aWV3KGInYWJjJykiCisgICAgcmVwcl9sb25nID0gIm1lbW9yeXZpZXcoYidhYmNkZWZnaGlqaycpIgogCisgICAgQHNraXBfdW5sZXNzX2ludGVybmFsaGFzaAogICAgIGRlZiB0ZXN0X2VtcHR5X3N0cmluZyhzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoKG1lbW9yeXZpZXcoYiIiKSksIDApCiAKQEAgLTIyNCw1ICszMjQsMjMgQEAKICAgICByZXByXyA9IHJlcHIoZGF0ZXRpbWUudGltZSgwKSkKIAogCitjbGFzcyBIYXNoRGlzdHJpYnV0aW9uVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfaGFzaF9kaXN0cmlidXRpb24oc2VsZik6CisgICAgICAgICMgY2hlY2sgZm9yIGhhc2ggY29sbGlzaW9uCisgICAgICAgIGJhc2UgPSAiYWJjZGVmZ2hhYmNkZWZnIgorICAgICAgICBmb3IgaSBpbiByYW5nZSgxLCBsZW4oYmFzZSkpOgorICAgICAgICAgICAgcHJlZml4ID0gYmFzZVs6aV0KKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KHByZWZpeD1wcmVmaXgpOgorICAgICAgICAgICAgICAgIHMxNSA9IHNldCgpCisgICAgICAgICAgICAgICAgczI1NSA9IHNldCgpCisgICAgICAgICAgICAgICAgZm9yIGMgaW4gcmFuZ2UoMjU2KToKKyAgICAgICAgICAgICAgICAgICAgaCA9IGhhc2gocHJlZml4ICsgY2hyKGMpKQorICAgICAgICAgICAgICAgICAgICBzMTUuYWRkKGggJiAweGYpCisgICAgICAgICAgICAgICAgICAgIHMyNTUuYWRkKGggJiAweGZmKQorICAgICAgICAgICAgICAgICMgU2lwSGFzaDI0IGRpc3RyaWJ1dGlvbiBkZXBlbmRzIG9uIGtleSwgdXN1YWxseSA+IDYwJQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihsZW4oczE1KSwgOCwgcHJlZml4KQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihsZW4oczI1NSksIDEyOCwgcHJlZml4KQorCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9oYXNobGliLnB5IGIvTGliL3Rlc3QvdGVzdF9oYXNobGliLnB5CmluZGV4IGMwNDcwZDYuLjg1ZWMyZjkgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaGFzaGxpYi5weQorKysgYi9MaWIvdGVzdC90ZXN0X2hhc2hsaWIucHkKQEAgLTE4LDExICsxOCwxMyBAQAogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgd2FybmluZ3MKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAotZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IF80RywgYmlnbWVtdGVzdAorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IF80RywgYmlnbWVtdGVzdCwgaW1wb3J0X2ZyZXNoX21vZHVsZQogCiAjIFdlcmUgd2UgY29tcGlsZWQgLS13aXRoLXB5ZGVidWcgb3Igd2l0aCAjZGVmaW5lIFB5X0RFQlVHPwogQ09NUElMRURfV0lUSF9QWURFQlVHID0gaGFzYXR0cihzeXMsICdnZXR0b3RhbHJlZmNvdW50JykKIAorY19oYXNobGliID0gaW1wb3J0X2ZyZXNoX21vZHVsZSgnaGFzaGxpYicsIGZyZXNoPVsnX2hhc2hsaWInXSkKK3B5X2hhc2hsaWIgPSBpbXBvcnRfZnJlc2hfbW9kdWxlKCdoYXNobGliJywgYmxvY2tlZD1bJ19oYXNobGliJ10pCiAKIGRlZiBoZXhzdHIocyk6CiAgICAgYXNzZXJ0IGlzaW5zdGFuY2UocywgYnl0ZXMpLCByZXByKHMpCkBAIC0zNiw3ICszOCw3IEBACiBjbGFzcyBIYXNoTGliVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIHN1cHBvcnRlZF9oYXNoX25hbWVzID0gKCAnbWQ1JywgJ01ENScsICdzaGExJywgJ1NIQTEnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2hhMjI0JywgJ1NIQTIyNCcsICdzaGEyNTYnLCAnU0hBMjU2JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NoYTM4NCcsICdTSEEzODQnLCAnc2hhNTEyJywgJ1NIQTUxMicgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2hhMzg0JywgJ1NIQTM4NCcsICdzaGE1MTInLCAnU0hBNTEyJykKIAogICAgICMgSXNzdWUgIzE0NjkzOiBmYWxsYmFjayBtb2R1bGVzIGFyZSBhbHdheXMgY29tcGlsZWQgdW5kZXIgUE9TSVgKICAgICBfd2Fybl9vbl9leHRlbnNpb25faW1wb3J0ID0gb3MubmFtZSA9PSAncG9zaXgnIG9yIENPTVBJTEVEX1dJVEhfUFlERUJVRwpAQCAtNzIsMjcgKzc0LDMxIEBACiAgICAgICAgIGlmIF9oYXNobGliOgogICAgICAgICAgICAgIyBUaGVzZSB0d28gYWxnb3JpdGhtcyBzaG91bGQgYWx3YXlzIGJlIHByZXNlbnQgd2hlbiB0aGlzIG1vZHVsZQogICAgICAgICAgICAgIyBpcyBjb21waWxlZC4gIElmIG5vdCwgc29tZXRoaW5nIHdhcyBjb21waWxlZCB3cm9uZy4KLSAgICAgICAgICAgIGFzc2VydCBoYXNhdHRyKF9oYXNobGliLCAnb3BlbnNzbF9tZDUnKQotICAgICAgICAgICAgYXNzZXJ0IGhhc2F0dHIoX2hhc2hsaWIsICdvcGVuc3NsX3NoYTEnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoX2hhc2hsaWIsICdvcGVuc3NsX21kNScpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoX2hhc2hsaWIsICdvcGVuc3NsX3NoYTEnKSkKICAgICAgICAgICAgIGZvciBhbGdvcml0aG0sIGNvbnN0cnVjdG9ycyBpbiBzZWxmLmNvbnN0cnVjdG9yc190b190ZXN0Lml0ZW1zKCk6CiAgICAgICAgICAgICAgICAgY29uc3RydWN0b3IgPSBnZXRhdHRyKF9oYXNobGliLCAnb3BlbnNzbF8nK2FsZ29yaXRobSwgTm9uZSkKICAgICAgICAgICAgICAgICBpZiBjb25zdHJ1Y3RvcjoKICAgICAgICAgICAgICAgICAgICAgY29uc3RydWN0b3JzLmFkZChjb25zdHJ1Y3RvcikKIAorICAgICAgICBkZWYgYWRkX2J1aWx0aW5fY29uc3RydWN0b3IobmFtZSk6CisgICAgICAgICAgICBjb25zdHJ1Y3RvciA9IGdldGF0dHIoaGFzaGxpYiwgIl9fZ2V0X2J1aWx0aW5fY29uc3RydWN0b3IiKShuYW1lKQorICAgICAgICAgICAgc2VsZi5jb25zdHJ1Y3RvcnNfdG9fdGVzdFtuYW1lXS5hZGQoY29uc3RydWN0b3IpCisKICAgICAgICAgX21kNSA9IHNlbGYuX2NvbmRpdGlvbmFsX2ltcG9ydF9tb2R1bGUoJ19tZDUnKQogICAgICAgICBpZiBfbWQ1OgotICAgICAgICAgICAgc2VsZi5jb25zdHJ1Y3RvcnNfdG9fdGVzdFsnbWQ1J10uYWRkKF9tZDUubWQ1KQorICAgICAgICAgICAgYWRkX2J1aWx0aW5fY29uc3RydWN0b3IoJ21kNScpCiAgICAgICAgIF9zaGExID0gc2VsZi5fY29uZGl0aW9uYWxfaW1wb3J0X21vZHVsZSgnX3NoYTEnKQogICAgICAgICBpZiBfc2hhMToKLSAgICAgICAgICAgIHNlbGYuY29uc3RydWN0b3JzX3RvX3Rlc3RbJ3NoYTEnXS5hZGQoX3NoYTEuc2hhMSkKKyAgICAgICAgICAgIGFkZF9idWlsdGluX2NvbnN0cnVjdG9yKCdzaGExJykKICAgICAgICAgX3NoYTI1NiA9IHNlbGYuX2NvbmRpdGlvbmFsX2ltcG9ydF9tb2R1bGUoJ19zaGEyNTYnKQogICAgICAgICBpZiBfc2hhMjU2OgotICAgICAgICAgICAgc2VsZi5jb25zdHJ1Y3RvcnNfdG9fdGVzdFsnc2hhMjI0J10uYWRkKF9zaGEyNTYuc2hhMjI0KQotICAgICAgICAgICAgc2VsZi5jb25zdHJ1Y3RvcnNfdG9fdGVzdFsnc2hhMjU2J10uYWRkKF9zaGEyNTYuc2hhMjU2KQorICAgICAgICAgICAgYWRkX2J1aWx0aW5fY29uc3RydWN0b3IoJ3NoYTIyNCcpCisgICAgICAgICAgICBhZGRfYnVpbHRpbl9jb25zdHJ1Y3Rvcignc2hhMjU2JykKICAgICAgICAgX3NoYTUxMiA9IHNlbGYuX2NvbmRpdGlvbmFsX2ltcG9ydF9tb2R1bGUoJ19zaGE1MTInKQogICAgICAgICBpZiBfc2hhNTEyOgotICAgICAgICAgICAgc2VsZi5jb25zdHJ1Y3RvcnNfdG9fdGVzdFsnc2hhMzg0J10uYWRkKF9zaGE1MTIuc2hhMzg0KQotICAgICAgICAgICAgc2VsZi5jb25zdHJ1Y3RvcnNfdG9fdGVzdFsnc2hhNTEyJ10uYWRkKF9zaGE1MTIuc2hhNTEyKQorICAgICAgICAgICAgYWRkX2J1aWx0aW5fY29uc3RydWN0b3IoJ3NoYTM4NCcpCisgICAgICAgICAgICBhZGRfYnVpbHRpbl9jb25zdHJ1Y3Rvcignc2hhNTEyJykKIAogICAgICAgICBzdXBlcihIYXNoTGliVGVzdENhc2UsIHNlbGYpLl9faW5pdF9fKCphcmdzLCAqKmt3YXJncykKIApAQCAtMTIxLDggKzEyNywxMCBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGhhc2hsaWIubmV3LCAxKQogCiAgICAgZGVmIHRlc3RfZ2V0X2J1aWx0aW5fY29uc3RydWN0b3Ioc2VsZik6Ci0gICAgICAgIGdldF9idWlsdGluX2NvbnN0cnVjdG9yID0gaGFzaGxpYi5fX2RpY3RfX1sKLSAgICAgICAgICAgICAgICAnX19nZXRfYnVpbHRpbl9jb25zdHJ1Y3RvciddCisgICAgICAgIGdldF9idWlsdGluX2NvbnN0cnVjdG9yID0gZ2V0YXR0cihoYXNobGliLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fZ2V0X2J1aWx0aW5fY29uc3RydWN0b3InKQorICAgICAgICBidWlsdGluX2NvbnN0cnVjdG9yX2NhY2hlID0gZ2V0YXR0cihoYXNobGliLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX19idWlsdGluX2NvbnN0cnVjdG9yX2NhY2hlJykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZ2V0X2J1aWx0aW5fY29uc3RydWN0b3IsICd0ZXN0JykKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgaW1wb3J0IF9tZDUKQEAgLTEzMCw2ICsxMzgsOCBAQAogICAgICAgICAgICAgcGFzcwogICAgICAgICAjIFRoaXMgZm9yY2VzIGFuIEltcG9ydEVycm9yIGZvciAiaW1wb3J0IF9tZDUiIHN0YXRlbWVudHMKICAgICAgICAgc3lzLm1vZHVsZXNbJ19tZDUnXSA9IE5vbmUKKyAgICAgICAgIyBjbGVhciB0aGUgY2FjaGUKKyAgICAgICAgYnVpbHRpbl9jb25zdHJ1Y3Rvcl9jYWNoZS5jbGVhcigpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGdldF9idWlsdGluX2NvbnN0cnVjdG9yLCAnbWQ1JykKICAgICAgICAgZmluYWxseToKQEAgLTEzOCwxMyArMTQ4LDIzIEBACiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIGRlbCBzeXMubW9kdWxlc1snX21kNSddCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0X2J1aWx0aW5fY29uc3RydWN0b3IsIDMpCisgICAgICAgIGNvbnN0cnVjdG9yID0gZ2V0X2J1aWx0aW5fY29uc3RydWN0b3IoJ21kNScpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoY29uc3RydWN0b3IsIF9tZDUubWQ1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChidWlsdGluX2NvbnN0cnVjdG9yX2NhY2hlKSwgWydNRDUnLCAnbWQ1J10pCiAKICAgICBkZWYgdGVzdF9oZXhkaWdlc3Qoc2VsZik6CiAgICAgICAgIGZvciBjb25zIGluIHNlbGYuaGFzaF9jb25zdHJ1Y3RvcnM6CiAgICAgICAgICAgICBoID0gY29ucygpCi0gICAgICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShoLmRpZ2VzdCgpLCBieXRlcyksIG5hbWUKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShoLmRpZ2VzdCgpLCBieXRlcykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGV4c3RyKGguZGlnZXN0KCkpLCBoLmhleGRpZ2VzdCgpKQogCisgICAgZGVmIHRlc3RfbmFtZV9hdHRyaWJ1dGUoc2VsZik6CisgICAgICAgIGZvciBjb25zIGluIHNlbGYuaGFzaF9jb25zdHJ1Y3RvcnM6CisgICAgICAgICAgICBoID0gY29ucygpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoaC5uYW1lLCBzdHIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGgubmFtZSwgc2VsZi5zdXBwb3J0ZWRfaGFzaF9uYW1lcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5uYW1lLCBoYXNobGliLm5ldyhoLm5hbWUpLm5hbWUpCisKICAgICBkZWYgdGVzdF9sYXJnZV91cGRhdGUoc2VsZik6CiAgICAgICAgIGFhcyA9IGInYScgKiAxMjgKICAgICAgICAgYmVlcyA9IGInYicgKiAxMjcKQEAgLTIxMyw4ICsyMzMsOSBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmJsb2NrX3NpemUsIGJsb2NrX3NpemUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZGlnZXN0X3NpemUsIGRpZ2VzdF9zaXplKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obS5kaWdlc3QoKSksIGRpZ2VzdF9zaXplKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLm5hbWUubG93ZXIoKSwgbmFtZS5sb3dlcigpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihuYW1lLnNwbGl0KCJfIilbMF0sIHJlcHIobSkubG93ZXIoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5uYW1lLCBuYW1lKQorICAgICAgICAgICAgIyBzcGxpdCBmb3Igc2hhM181MTIgLyBfc2hhMy5zaGEzIG9iamVjdAorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihuYW1lLnNwbGl0KCJfIilbMF0sIHJlcHIobSkpCiAKICAgICBkZWYgdGVzdF9ibG9ja3NpemVfbmFtZShzZWxmKToKICAgICAgICAgc2VsZi5jaGVja19ibG9ja3NpemVfbmFtZSgnbWQ1JywgNjQsIDE2KQpAQCAtNDAwLDggKzQyMSw4IEBACiAgICAgICAgIGV2ZW50cyA9IFtdCiAgICAgICAgIGZvciB0aHJlYWRudW0gaW4gcmFuZ2UobnVtX3RocmVhZHMpOgogICAgICAgICAgICAgY2h1bmtfc2l6ZSA9IGxlbihkYXRhKSAvLyAoMTAqKnRocmVhZG51bSkKLSAgICAgICAgICAgIGFzc2VydCBjaHVua19zaXplID4gMAotICAgICAgICAgICAgYXNzZXJ0IGNodW5rX3NpemUgJSBsZW4oc21hbGxlc3RfZGF0YSkgPT0gMAorICAgICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKGNodW5rX3NpemUsIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNodW5rX3NpemUgJSBsZW4oc21hbGxlc3RfZGF0YSksIDApCiAgICAgICAgICAgICBldmVudCA9IHRocmVhZGluZy5FdmVudCgpCiAgICAgICAgICAgICBldmVudHMuYXBwZW5kKGV2ZW50KQogICAgICAgICAgICAgdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9aGFzaF9pbl9jaHVua3MsCkBAIC00MTIsOCArNDMzLDk1IEBACiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZF9oYXNoLCBoYXNoZXIuaGV4ZGlnZXN0KCkpCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChIYXNoTGliVGVzdENhc2UpCisKK2NsYXNzIEtERlRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIHBia2RmMl90ZXN0X3ZlY3RvcnMgPSBbCisgICAgICAgIChiJ3Bhc3N3b3JkJywgYidzYWx0JywgMSwgTm9uZSksCisgICAgICAgIChiJ3Bhc3N3b3JkJywgYidzYWx0JywgMiwgTm9uZSksCisgICAgICAgIChiJ3Bhc3N3b3JkJywgYidzYWx0JywgNDA5NiwgTm9uZSksCisgICAgICAgICMgdG9vIHNsb3csIGl0IHRha2VzIG92ZXIgYSBtaW51dGUgb24gYSBmYXN0IENQVS4KKyAgICAgICAgIyhiJ3Bhc3N3b3JkJywgYidzYWx0JywgMTY3NzcyMTYsIE5vbmUpLAorICAgICAgICAoYidwYXNzd29yZFBBU1NXT1JEcGFzc3dvcmQnLCBiJ3NhbHRTQUxUc2FsdFNBTFRzYWx0U0FMVHNhbHRTQUxUc2FsdCcsCisgICAgICAgICA0MDk2LCAtMSksCisgICAgICAgIChiJ3Bhc3NcMHdvcmQnLCBiJ3NhXDBsdCcsIDQwOTYsIDE2KSwKKyAgICBdCisKKyAgICBwYmtkZjJfcmVzdWx0cyA9IHsKKyAgICAgICAgInNoYTEiOiBbCisgICAgICAgICAgICAjIG9mZmljYWwgdGVzdCB2ZWN0b3JzIGZyb20gUkZDIDYwNzAKKyAgICAgICAgICAgIChieXRlcy5mcm9taGV4KCcwYzYwYzgwZjk2MWYwZTcxZjNhOWI1MjRhZjYwMTIwNjJmZTAzN2E2JyksIE5vbmUpLAorICAgICAgICAgICAgKGJ5dGVzLmZyb21oZXgoJ2VhNmMwMTRkYzcyZDZmOGNjZDFlZDkyYWNlMWQ0MWYwZDhkZTg5NTcnKSwgTm9uZSksCisgICAgICAgICAgICAoYnl0ZXMuZnJvbWhleCgnNGIwMDc5MDFiNzY1NDg5YWJlYWQ0OWQ5MjZmNzIxZDA2NWE0MjljMScpLCBOb25lKSwKKyAgICAgICAgICAgICMoYnl0ZXMuZnJvbWhleCgnZWVmZTNkNjFjZDRkYTRlNGU5OTQ1YjNkNmJhMjE1OGMyNjM0ZTk4NCcpLCBOb25lKSwKKyAgICAgICAgICAgIChieXRlcy5mcm9taGV4KCczZDJlZWM0ZmU0MWM4NDliODBjOGQ4MzY2MmMwZTQ0YThiMjkxYTk2NGMnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnZjJmMDcwMzgnKSwgMjUpLAorICAgICAgICAgICAgKGJ5dGVzLmZyb21oZXgoJzU2ZmE2YWE3NTU0ODA5OWRjYzM3ZDdmMDM0MjVlMGMzJyksIE5vbmUpLF0sCisgICAgICAgICJzaGEyNTYiOiBbCisgICAgICAgICAgICAoYnl0ZXMuZnJvbWhleCgnMTIwZmI2Y2ZmY2Y4YjMyYzQzZTcyMjUyNTZjNGY4MzcnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnYTg2NTQ4YzkyY2NjMzU0ODA4MDU5ODdjYjcwYmUxN2InKSwgTm9uZSksCisgICAgICAgICAgICAoYnl0ZXMuZnJvbWhleCgnYWU0ZDBjOTVhZjZiNDZkMzJkMGFkZmY5MjhmMDZkZDAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnMmEzMDNmOGVmM2MyNTFkZmQ2ZTJkODVhOTU0NzRjNDMnKSwgTm9uZSksCisgICAgICAgICAgICAoYnl0ZXMuZnJvbWhleCgnYzVlNDc4ZDU5Mjg4Yzg0MWFhNTMwZGI2ODQ1YzRjOGQnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnOTYyODkzYTAwMWNlNGUxMWE0OTYzODczYWE5ODEzNGEnKSwgTm9uZSksCisgICAgICAgICAgICAjKGJ5dGVzLmZyb21oZXgoJ2NmODFjNjZmZThjZmMwNGQxZjMxZWNiNjVkYWI0MDg5JworICAgICAgICAgICAgIyAgICAgICAgICAgICAgICdmN2YxNzllODliM2IwYmNiMTdhZDEwZTNhYzZlYmE0NicpLCBOb25lKSwKKyAgICAgICAgICAgIChieXRlcy5mcm9taGV4KCczNDhjODlkYmNiZDMyYjJmMzJkODE0YjgxMTZlODRjZjJiMTcnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnMzQ3ZWJjMTgwMDE4MWM0ZTJhMWZiOGRkNTNlMWM2MzU1MThjN2RhYzQ3ZTknKSwgNDApLAorICAgICAgICAgICAgKGJ5dGVzLmZyb21oZXgoJzg5YjY5ZDA1MTZmODI5ODkzYzY5NjIyNjY1MGE4Njg3JyksIE5vbmUpLF0sCisgICAgICAgICJzaGE1MTIiOiBbCisgICAgICAgICAgICAoYnl0ZXMuZnJvbWhleCgnODY3ZjcwY2YxYWRlMDJjZmYzNzUyNTk5YTNhNTNkYzRhZjM0YzdhNjY5ODE1YWU1JworICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Q1MTM1NTRlMWM4Y2YyNTJjMDJkNDcwYTI4NWEwNTAxYmFkOTk5YmZlOTQzYzA4ZicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICcwNTAyMzVkN2Q2OGIxZGE1NWU2M2Y3M2I2MGE1N2ZjZScpLCBOb25lKSwKKyAgICAgICAgICAgIChieXRlcy5mcm9taGV4KCdlMWQ5YzE2YWE2ODE3MDhhNDVmNWM3YzRlMjE1Y2ViNjZlMDExYTJlOWYwMDQwNzEnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnM2YxOGFlZmRiODY2ZDUzY2Y3NmNhYjI4NjhhMzliOWY3ODQwZWRjZTRmZWY1YTgyJworICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JlNjczMzVjNzdhNjA2OGUwNDExMjc1NGYyN2NjZjRlJyksIE5vbmUpLAorICAgICAgICAgICAgKGJ5dGVzLmZyb21oZXgoJ2QxOTdiMWIzM2RiMDE0M2UwMThiMTJmM2QxZDE0NzllNmNkZWJkY2M5N2M1YzBmOCcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICc3ZjY5MDJlMDcyZjQ1N2I1MTQzZjMwNjAyNjQxYjNkNTVjZDMzNTk4OGNiMzZiODQnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnMzc2MDYwZWNkNTMyZTAzOWI3NDJhMjM5NDM0YWYyZDUnKSwgTm9uZSksCisgICAgICAgICAgICAoYnl0ZXMuZnJvbWhleCgnOGMwNTExZjRjNmU1OTdjNmFjNjMxNWQ4ZjAzNjJlMjI1ZjNjNTAxNDk1YmEyM2I4JworICAgICAgICAgICAgICAgICAgICAgICAgICAgJzY4YzAwNTE3NGRjNGVlNzExMTViNTlmOWU2MGNkOTUzMmZhMzNlMGY3NWFlZmUzMCcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICcyMjVjNTgzYTE4NmNkODJiZDRkYWVhOTcyNGEzZDNiOCcpLCA2NCksCisgICAgICAgICAgICAoYnl0ZXMuZnJvbWhleCgnOWQ5ZTljNGNkMjFmZTRiZTI0ZDViODI0NGM3NTk2NjUnKSwgTm9uZSksXSwKKyAgICB9CisKKyAgICBkZWYgX3Rlc3RfcGJrZGYyX2htYWMoc2VsZiwgcGJrZGYyKToKKyAgICAgICAgZm9yIGRpZ2VzdF9uYW1lLCByZXN1bHRzIGluIHNlbGYucGJrZGYyX3Jlc3VsdHMuaXRlbXMoKToKKyAgICAgICAgICAgIGZvciBpLCB2ZWN0b3IgaW4gZW51bWVyYXRlKHNlbGYucGJrZGYyX3Rlc3RfdmVjdG9ycyk6CisgICAgICAgICAgICAgICAgcGFzc3dvcmQsIHNhbHQsIHJvdW5kcywgZGtsZW4gPSB2ZWN0b3IKKyAgICAgICAgICAgICAgICBleHBlY3RlZCwgb3ZlcndyaXRlX2RrbGVuID0gcmVzdWx0c1tpXQorICAgICAgICAgICAgICAgIGlmIG92ZXJ3cml0ZV9ka2xlbjoKKyAgICAgICAgICAgICAgICAgICAgZGtsZW4gPSBvdmVyd3JpdGVfZGtsZW4KKyAgICAgICAgICAgICAgICBvdXQgPSBwYmtkZjIoZGlnZXN0X25hbWUsIHBhc3N3b3JkLCBzYWx0LCByb3VuZHMsIGRrbGVuKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LCBleHBlY3RlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkaWdlc3RfbmFtZSwgcGFzc3dvcmQsIHNhbHQsIHJvdW5kcywgZGtsZW4pKQorICAgICAgICAgICAgICAgIG91dCA9IHBia2RmMihkaWdlc3RfbmFtZSwgbWVtb3J5dmlldyhwYXNzd29yZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeXZpZXcoc2FsdCksIHJvdW5kcywgZGtsZW4pCisgICAgICAgICAgICAgICAgb3V0ID0gcGJrZGYyKGRpZ2VzdF9uYW1lLCBieXRlYXJyYXkocGFzc3dvcmQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlYXJyYXkoc2FsdCksIHJvdW5kcywgZGtsZW4pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQsIGV4cGVjdGVkKQorICAgICAgICAgICAgICAgIGlmIGRrbGVuIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIG91dCA9IHBia2RmMihkaWdlc3RfbmFtZSwgcGFzc3dvcmQsIHNhbHQsIHJvdW5kcykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQsIGV4cGVjdGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkaWdlc3RfbmFtZSwgcGFzc3dvcmQsIHNhbHQsIHJvdW5kcykpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwYmtkZjIsIGInc2hhMScsIGIncGFzcycsIGInc2FsdCcsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcGJrZGYyLCAnc2hhMScsICdwYXNzJywgJ3NhbHQnLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwYmtkZjIsICdzaGExJywgYidwYXNzJywgYidzYWx0JywgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcGJrZGYyLCAnc2hhMScsIGIncGFzcycsIGInc2FsdCcsIC0xKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwYmtkZjIsICdzaGExJywgYidwYXNzJywgYidzYWx0JywgMSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcGJrZGYyLCAnc2hhMScsIGIncGFzcycsIGInc2FsdCcsIDEsIC0xKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwgJ3Vuc3VwcG9ydGVkIGhhc2ggdHlwZScpOgorICAgICAgICAgICAgcGJrZGYyKCd1bmtub3duJywgYidwYXNzJywgYidzYWx0JywgMSkKKworICAgIGRlZiB0ZXN0X3Bia2RmMl9obWFjX3B5KHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X3Bia2RmMl9obWFjKHB5X2hhc2hsaWIucGJrZGYyX2htYWMpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKGNfaGFzaGxpYiwgJ3Bia2RmMl9obWFjJyksCisgICAgICAgICAgICAgICAgICAgICAnICAgdGVzdCByZXF1aXJlcyBPcGVuU1NMID4gMS4wJykKKyAgICBkZWYgdGVzdF9wYmtkZjJfaG1hY19jKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X3Bia2RmMl9obWFjKGNfaGFzaGxpYi5wYmtkZjJfaG1hYykKKwogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2htYWMucHkgYi9MaWIvdGVzdC90ZXN0X2htYWMucHkKaW5kZXggNGNhN2NlYy4uY2RlNTZmZCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9obWFjLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaG1hYy5weQpAQCAtMSwxNyArMSwzOSBAQAoraW1wb3J0IGZ1bmN0b29scwogaW1wb3J0IGhtYWMKIGltcG9ydCBoYXNobGliCiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCB3YXJuaW5ncwogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiAKKworZGVmIGlnbm9yZV93YXJuaW5nKGZ1bmMpOgorICAgIEBmdW5jdG9vbHMud3JhcHMoZnVuYykKKyAgICBkZWYgd3JhcHBlcigqYXJncywgKiprd2FyZ3MpOgorICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICB3YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncygiaWdub3JlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGVnb3J5PVBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgICAgICByZXR1cm4gZnVuYygqYXJncywgKiprd2FyZ3MpCisgICAgcmV0dXJuIHdyYXBwZXIKKworCiBjbGFzcyBUZXN0VmVjdG9yc1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiB0ZXN0X21kNV92ZWN0b3JzKHNlbGYpOgogICAgICAgICAjIFRlc3QgdGhlIEhNQUMgbW9kdWxlIGFnYWluc3QgdGVzdCB2ZWN0b3JzIGZyb20gdGhlIFJGQy4KIAogICAgICAgICBkZWYgbWQ1dGVzdChrZXksIGRhdGEsIGRpZ2VzdCk6Ci0gICAgICAgICAgICBoID0gaG1hYy5ITUFDKGtleSwgZGF0YSkKKyAgICAgICAgICAgIGggPSBobWFjLkhNQUMoa2V5LCBkYXRhLCBkaWdlc3Rtb2Q9aGFzaGxpYi5tZDUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguaGV4ZGlnZXN0KCkudXBwZXIoKSwgZGlnZXN0LnVwcGVyKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGgubmFtZSwgImhtYWMtbWQ1IikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5kaWdlc3Rfc2l6ZSwgMTYpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguYmxvY2tfc2l6ZSwgNjQpCisKKyAgICAgICAgICAgIGggPSBobWFjLkhNQUMoa2V5LCBkYXRhLCBkaWdlc3Rtb2Q9J21kNScpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguaGV4ZGlnZXN0KCkudXBwZXIoKSwgZGlnZXN0LnVwcGVyKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGgubmFtZSwgImhtYWMtbWQ1IikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5kaWdlc3Rfc2l6ZSwgMTYpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguYmxvY2tfc2l6ZSwgNjQpCisKIAogICAgICAgICBtZDV0ZXN0KGIiXHgwYiIgKiAxNiwKICAgICAgICAgICAgICAgICBiIkhpIFRoZXJlIiwKQEAgLTQ2LDYgKzY4LDE2IEBACiAgICAgICAgIGRlZiBzaGF0ZXN0KGtleSwgZGF0YSwgZGlnZXN0KToKICAgICAgICAgICAgIGggPSBobWFjLkhNQUMoa2V5LCBkYXRhLCBkaWdlc3Rtb2Q9aGFzaGxpYi5zaGExKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLmhleGRpZ2VzdCgpLnVwcGVyKCksIGRpZ2VzdC51cHBlcigpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLm5hbWUsICJobWFjLXNoYTEiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLmRpZ2VzdF9zaXplLCAyMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5ibG9ja19zaXplLCA2NCkKKworICAgICAgICAgICAgaCA9IGhtYWMuSE1BQyhrZXksIGRhdGEsIGRpZ2VzdG1vZD0nc2hhMScpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguaGV4ZGlnZXN0KCkudXBwZXIoKSwgZGlnZXN0LnVwcGVyKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGgubmFtZSwgImhtYWMtc2hhMSIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguZGlnZXN0X3NpemUsIDIwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLmJsb2NrX3NpemUsIDY0KQorCiAKICAgICAgICAgc2hhdGVzdChiIlx4MGIiICogMjAsCiAgICAgICAgICAgICAgICAgYiJIaSBUaGVyZSIsCkBAIC03NiwxMCArMTA4LDIxIEBACiAgICAgICAgICAgICAgICAgIGIiYW5kIExhcmdlciBUaGFuIE9uZSBCbG9jay1TaXplIERhdGEiKSwKICAgICAgICAgICAgICAgICAiZThlOTlkMGY0NTIzN2Q3ODZkNmJiYWE3OTY1Yzc4MDhiYmZmMWE5MSIpCiAKLSAgICBkZWYgX3JmYzQyMzFfdGVzdF9jYXNlcyhzZWxmLCBoYXNoZnVuYyk6CisgICAgZGVmIF9yZmM0MjMxX3Rlc3RfY2FzZXMoc2VsZiwgaGFzaGZ1bmMsIGhhc2hfbmFtZSwgZGlnZXN0X3NpemUsIGJsb2NrX3NpemUpOgogICAgICAgICBkZWYgaG1hY3Rlc3Qoa2V5LCBkYXRhLCBoZXhkaWdlc3RzKToKKyAgICAgICAgICAgIGhtYWNfbmFtZSA9ICJobWFjLSIgKyBoYXNoX25hbWUKICAgICAgICAgICAgIGggPSBobWFjLkhNQUMoa2V5LCBkYXRhLCBkaWdlc3Rtb2Q9aGFzaGZ1bmMpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguaGV4ZGlnZXN0KCkubG93ZXIoKSwgaGV4ZGlnZXN0c1toYXNoZnVuY10pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGgubmFtZSwgaG1hY19uYW1lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLmRpZ2VzdF9zaXplLCBkaWdlc3Rfc2l6ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5ibG9ja19zaXplLCBibG9ja19zaXplKQorCisgICAgICAgICAgICBoID0gaG1hYy5ITUFDKGtleSwgZGF0YSwgZGlnZXN0bW9kPWhhc2hfbmFtZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5oZXhkaWdlc3QoKS5sb3dlcigpLCBoZXhkaWdlc3RzW2hhc2hmdW5jXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5uYW1lLCBobWFjX25hbWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguZGlnZXN0X3NpemUsIGRpZ2VzdF9zaXplKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLmJsb2NrX3NpemUsIGJsb2NrX3NpemUpCisKIAogICAgICAgICAjIDQuMi4gIFRlc3QgQ2FzZSAxCiAgICAgICAgIGhtYWN0ZXN0KGtleSA9IGInXHgwYicqMjAsCkBAIC0xODksMTYgKzIzMiwxNiBAQAogICAgICAgICAgICAgICAgICB9KQogCiAgICAgZGVmIHRlc3Rfc2hhMjI0X3JmYzQyMzEoc2VsZik6Ci0gICAgICAgIHNlbGYuX3JmYzQyMzFfdGVzdF9jYXNlcyhoYXNobGliLnNoYTIyNCkKKyAgICAgICAgc2VsZi5fcmZjNDIzMV90ZXN0X2Nhc2VzKGhhc2hsaWIuc2hhMjI0LCAnc2hhMjI0JywgMjgsIDY0KQogCiAgICAgZGVmIHRlc3Rfc2hhMjU2X3JmYzQyMzEoc2VsZik6Ci0gICAgICAgIHNlbGYuX3JmYzQyMzFfdGVzdF9jYXNlcyhoYXNobGliLnNoYTI1NikKKyAgICAgICAgc2VsZi5fcmZjNDIzMV90ZXN0X2Nhc2VzKGhhc2hsaWIuc2hhMjU2LCAnc2hhMjU2JywgMzIsIDY0KQogCiAgICAgZGVmIHRlc3Rfc2hhMzg0X3JmYzQyMzEoc2VsZik6Ci0gICAgICAgIHNlbGYuX3JmYzQyMzFfdGVzdF9jYXNlcyhoYXNobGliLnNoYTM4NCkKKyAgICAgICAgc2VsZi5fcmZjNDIzMV90ZXN0X2Nhc2VzKGhhc2hsaWIuc2hhMzg0LCAnc2hhMzg0JywgNDgsIDEyOCkKIAogICAgIGRlZiB0ZXN0X3NoYTUxMl9yZmM0MjMxKHNlbGYpOgotICAgICAgICBzZWxmLl9yZmM0MjMxX3Rlc3RfY2FzZXMoaGFzaGxpYi5zaGE1MTIpCisgICAgICAgIHNlbGYuX3JmYzQyMzFfdGVzdF9jYXNlcyhoYXNobGliLnNoYTUxMiwgJ3NoYTUxMicsIDY0LCAxMjgpCiAKICAgICBkZWYgdGVzdF9sZWdhY3lfYmxvY2tfc2l6ZV93YXJuaW5ncyhzZWxmKToKICAgICAgICAgY2xhc3MgTW9ja0NyYXp5SGFzaChvYmplY3QpOgpAQCAtMjIyLDQ2ICsyNjUsNzQgQEAKICAgICAgICAgICAgICAgICBobWFjLkhNQUMoYidhJywgYidiJywgZGlnZXN0bW9kPU1vY2tDcmF6eUhhc2gpCiAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdFeHBlY3RlZCB3YXJuaW5nIGFib3V0IHNtYWxsIGJsb2NrX3NpemUnKQogCisgICAgZGVmIHRlc3Rfd2l0aF9kaWdlc3Rtb2Rfd2FybmluZyhzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcpOgorICAgICAgICAgICAga2V5ID0gYiJceDBiIiAqIDE2CisgICAgICAgICAgICBkYXRhID0gYiJIaSBUaGVyZSIKKyAgICAgICAgICAgIGRpZ2VzdCA9ICI5Mjk0NzI3QTM2MzhCQjFDMTNGNDhFRjgxNThCRkM5RCIKKyAgICAgICAgICAgIGggPSBobWFjLkhNQUMoa2V5LCBkYXRhKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLmhleGRpZ2VzdCgpLnVwcGVyKCksIGRpZ2VzdCkKIAogCiBjbGFzcyBDb25zdHJ1Y3RvclRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAorICAgIEBpZ25vcmVfd2FybmluZwogICAgIGRlZiB0ZXN0X25vcm1hbChzZWxmKToKICAgICAgICAgIyBTdGFuZGFyZCBjb25zdHJ1Y3RvciBjYWxsLgogICAgICAgICBmYWlsZWQgPSAwCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGggPSBobWFjLkhNQUMoYiJrZXkiKQotICAgICAgICBleGNlcHQ6CisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgICAgICBzZWxmLmZhaWwoIlN0YW5kYXJkIGNvbnN0cnVjdG9yIGNhbGwgcmFpc2VkIGV4Y2VwdGlvbi4iKQogCisgICAgQGlnbm9yZV93YXJuaW5nCiAgICAgZGVmIHRlc3Rfd2l0aF9zdHJfa2V5KHNlbGYpOgogICAgICAgICAjIFBhc3MgYSBrZXkgb2YgdHlwZSBzdHIsIHdoaWNoIGlzIGFuIGVycm9yLCBiZWNhdXNlIGl0IGV4cGVjdHMgYSBrZXkKICAgICAgICAgIyBvZiB0eXBlIGJ5dGVzCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKICAgICAgICAgICAgIGggPSBobWFjLkhNQUMoImtleSIpCiAKKyAgICBAaWdub3JlX3dhcm5pbmcKICAgICBkZWYgdGVzdF9kb3RfbmV3X3dpdGhfc3RyX2tleShzZWxmKToKICAgICAgICAgIyBQYXNzIGEga2V5IG9mIHR5cGUgc3RyLCB3aGljaCBpcyBhbiBlcnJvciwgYmVjYXVzZSBpdCBleHBlY3RzIGEga2V5CiAgICAgICAgICMgb2YgdHlwZSBieXRlcwogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CiAgICAgICAgICAgICBoID0gaG1hYy5uZXcoImtleSIpCiAKKyAgICBAaWdub3JlX3dhcm5pbmcKICAgICBkZWYgdGVzdF93aXRodGV4dChzZWxmKToKICAgICAgICAgIyBDb25zdHJ1Y3RvciBjYWxsIHdpdGggdGV4dC4KICAgICAgICAgdHJ5OgogICAgICAgICAgICAgaCA9IGhtYWMuSE1BQyhiImtleSIsIGIiaGFzaCB0aGlzISIpCi0gICAgICAgIGV4Y2VwdDoKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKICAgICAgICAgICAgIHNlbGYuZmFpbCgiQ29uc3RydWN0b3IgY2FsbCB3aXRoIHRleHQgYXJndW1lbnQgcmFpc2VkIGV4Y2VwdGlvbi4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguaGV4ZGlnZXN0KCksICczNDMyNWI2MzlkYTRjZmQ5NTczNWIzODFlMjhjYjg2NCcpCisKKyAgICBkZWYgdGVzdF93aXRoX2J5dGVhcnJheShzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaCA9IGhtYWMuSE1BQyhieXRlYXJyYXkoYiJrZXkiKSwgYnl0ZWFycmF5KGIiaGFzaCB0aGlzISIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBkaWdlc3Rtb2Q9Im1kNSIpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICBzZWxmLmZhaWwoIkNvbnN0cnVjdG9yIGNhbGwgd2l0aCBieXRlYXJyYXkgYXJndW1lbnRzIHJhaXNlZCBleGNlcHRpb24uIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLmhleGRpZ2VzdCgpLCAnMzQzMjViNjM5ZGE0Y2ZkOTU3MzViMzgxZTI4Y2I4NjQnKQorCisgICAgZGVmIHRlc3Rfd2l0aF9tZW1vcnl2aWV3X21zZyhzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaCA9IGhtYWMuSE1BQyhiImtleSIsIG1lbW9yeXZpZXcoYiJoYXNoIHRoaXMhIiksIGRpZ2VzdG1vZD0ibWQ1IikKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiQ29uc3RydWN0b3IgY2FsbCB3aXRoIG1lbW9yeXZpZXcgbXNnIHJhaXNlZCBleGNlcHRpb24uIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLmhleGRpZ2VzdCgpLCAnMzQzMjViNjM5ZGE0Y2ZkOTU3MzViMzgxZTI4Y2I4NjQnKQogCiAgICAgZGVmIHRlc3Rfd2l0aG1vZHVsZShzZWxmKToKICAgICAgICAgIyBDb25zdHJ1Y3RvciBjYWxsIHdpdGggdGV4dCBhbmQgZGlnZXN0IG1vZHVsZS4KICAgICAgICAgdHJ5OgogICAgICAgICAgICAgaCA9IGhtYWMuSE1BQyhiImtleSIsIGIiIiwgaGFzaGxpYi5zaGExKQotICAgICAgICBleGNlcHQ6CisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgICAgICBzZWxmLmZhaWwoIkNvbnN0cnVjdG9yIGNhbGwgd2l0aCBoYXNobGliLnNoYTEgcmFpc2VkIGV4Y2VwdGlvbi4iKQogCiBjbGFzcyBTYW5pdHlUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKKyAgICBAaWdub3JlX3dhcm5pbmcKICAgICBkZWYgdGVzdF9kZWZhdWx0X2lzX21kNShzZWxmKToKICAgICAgICAgIyBUZXN0aW5nIGlmIEhNQUMgZGVmYXVsdHMgdG8gTUQ1IGFsZ29yaXRobS4KICAgICAgICAgIyBOT1RFOiB0aGlzIHdoaXRlYm94IHRlc3QgZGVwZW5kcyBvbiB0aGUgaG1hYyBjbGFzcyBpbnRlcm5hbHMKQEAgLTI3MiwxOSArMzQzLDE5IEBACiAgICAgICAgICMgRXhlcmNpc2luZyBhbGwgbWV0aG9kcyBvbmNlLgogICAgICAgICAjIFRoaXMgbXVzdCBub3QgcmFpc2UgYW55IGV4Y2VwdGlvbnMKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgaCA9IGhtYWMuSE1BQyhiIm15IHNlY3JldCBrZXkiKQorICAgICAgICAgICAgaCA9IGhtYWMuSE1BQyhiIm15IHNlY3JldCBrZXkiLCBkaWdlc3Rtb2Q9Im1kNSIpCiAgICAgICAgICAgICBoLnVwZGF0ZShiImNvbXB1dGUgdGhlIGhhc2ggb2YgdGhpcyB0ZXh0ISIpCiAgICAgICAgICAgICBkaWcgPSBoLmRpZ2VzdCgpCiAgICAgICAgICAgICBkaWcgPSBoLmhleGRpZ2VzdCgpCiAgICAgICAgICAgICBoMiA9IGguY29weSgpCi0gICAgICAgIGV4Y2VwdDoKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKICAgICAgICAgICAgIHNlbGYuZmFpbCgiRXhjZXB0aW9uIHJhaXNlZCBkdXJpbmcgbm9ybWFsIHVzYWdlIG9mIEhNQUMgY2xhc3MuIikKIAogY2xhc3MgQ29weVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiB0ZXN0X2F0dHJpYnV0ZXMoc2VsZik6CiAgICAgICAgICMgVGVzdGluZyBpZiBhdHRyaWJ1dGVzIGFyZSBvZiBzYW1lIHR5cGUuCi0gICAgICAgIGgxID0gaG1hYy5ITUFDKGIia2V5IikKKyAgICAgICAgaDEgPSBobWFjLkhNQUMoYiJrZXkiLCBkaWdlc3Rtb2Q9Im1kNSIpCiAgICAgICAgIGgyID0gaDEuY29weSgpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoMS5kaWdlc3RfY29ucyA9PSBoMi5kaWdlc3RfY29ucywKICAgICAgICAgICAgICJkaWdlc3QgY29uc3RydWN0b3JzIGRvbid0IG1hdGNoLiIpCkBAIC0yOTUsNyArMzY2LDcgQEAKIAogICAgIGRlZiB0ZXN0X3JlYWxjb3B5KHNlbGYpOgogICAgICAgICAjIFRlc3RpbmcgaWYgdGhlIGNvcHkgbWV0aG9kIGNyZWF0ZWQgYSByZWFsIGNvcHkuCi0gICAgICAgIGgxID0gaG1hYy5ITUFDKGIia2V5IikKKyAgICAgICAgaDEgPSBobWFjLkhNQUMoYiJrZXkiLCBkaWdlc3Rtb2Q9Im1kNSIpCiAgICAgICAgIGgyID0gaDEuY29weSgpCiAgICAgICAgICMgVXNpbmcgaWQoKSBpbiBjYXNlIHNvbWVib2R5IGhhcyBvdmVycmlkZGVuIF9fZXFfXy9fX25lX18uCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpZChoMSkgIT0gaWQoaDIpLCAiTm8gcmVhbCBjb3B5IG9mIHRoZSBITUFDIGluc3RhbmNlLiIpCkBAIC0zMDYsNyArMzc3LDcgQEAKIAogICAgIGRlZiB0ZXN0X2VxdWFsaXR5KHNlbGYpOgogICAgICAgICAjIFRlc3RpbmcgaWYgdGhlIGNvcHkgaGFzIHRoZSBzYW1lIGRpZ2VzdHMuCi0gICAgICAgIGgxID0gaG1hYy5ITUFDKGIia2V5IikKKyAgICAgICAgaDEgPSBobWFjLkhNQUMoYiJrZXkiLCBkaWdlc3Rtb2Q9Im1kNSIpCiAgICAgICAgIGgxLnVwZGF0ZShiInNvbWUgcmFuZG9tIHRleHQiKQogICAgICAgICBoMiA9IGgxLmNvcHkoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGgxLmRpZ2VzdCgpLCBoMi5kaWdlc3QoKSwKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaHRtbC5weSBiL0xpYi90ZXN0L3Rlc3RfaHRtbC5weQppbmRleCAzMGRhYzU4Li5kNmYwYWU4IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2h0bWwucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9odG1sLnB5CkBAIC0xNiw5ICsxNiw4OSBAQAogICAgICAgICAgICAgaHRtbC5lc2NhcGUoJ1wnPHNjcmlwdD4iJmZvbzsiPC9zY3JpcHQ+XCcnLCBGYWxzZSksCiAgICAgICAgICAgICAnXCcmbHQ7c2NyaXB0Jmd0OyImYW1wO2ZvbzsiJmx0Oy9zY3JpcHQmZ3Q7XCcnKQogCisgICAgZGVmIHRlc3RfdW5lc2NhcGUoc2VsZik6CisgICAgICAgIG51bWVyaWNfZm9ybWF0cyA9IFsnJiMlZCcsICcmIyVkOycsICcmI3gleCcsICcmI3gleDsnXQorICAgICAgICBlcnJtc2cgPSAndW5lc2NhcGUoJXIpIHNob3VsZCBoYXZlIHJldHVybmVkICVyJworICAgICAgICBkZWYgY2hlY2sodGV4dCwgZXhwZWN0ZWQpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChodG1sLnVuZXNjYXBlKHRleHQpLCBleHBlY3RlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnPWVycm1zZyAlICh0ZXh0LCBleHBlY3RlZCkpCisgICAgICAgIGRlZiBjaGVja19udW0obnVtLCBleHBlY3RlZCk6CisgICAgICAgICAgICBmb3IgZm9ybWF0IGluIG51bWVyaWNfZm9ybWF0czoKKyAgICAgICAgICAgICAgICB0ZXh0ID0gZm9ybWF0ICUgbnVtCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChodG1sLnVuZXNjYXBlKHRleHQpLCBleHBlY3RlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZz1lcnJtc2cgJSAodGV4dCwgZXhwZWN0ZWQpKQorICAgICAgICAjIGNoZWNrIHRleHQgd2l0aCBubyBjaGFyYWN0ZXIgcmVmZXJlbmNlcworICAgICAgICBjaGVjaygnbm8gY2hhcmFjdGVyIHJlZmVyZW5jZXMnLCAnbm8gY2hhcmFjdGVyIHJlZmVyZW5jZXMnKQorICAgICAgICAjIGNoZWNrICYgZm9sbG93ZWQgYnkgaW52YWxpZCBjaGFycworICAgICAgICBjaGVjaygnJlxuJlx0JiAmJicsICcmXG4mXHQmICYmJykKKyAgICAgICAgIyBjaGVjayAmIGZvbGxvd2VkIGJ5IG51bWJlcnMgYW5kIGxldHRlcnMKKyAgICAgICAgY2hlY2soJyYwICY5ICZhICYwOyAmOTsgJmE7JywgJyYwICY5ICZhICYwOyAmOTsgJmE7JykKKyAgICAgICAgIyBjaGVjayBpbmNvbXBsZXRlIGVudGl0aWVzIGF0IHRoZSBlbmQgb2YgdGhlIHN0cmluZworICAgICAgICBmb3IgeCBpbiBbJyYnLCAnJiMnLCAnJiN4JywgJyYjWCcsICcmI3knLCAnJiN4eScsICcmI1h5J106CisgICAgICAgICAgICBjaGVjayh4LCB4KQorICAgICAgICAgICAgY2hlY2soeCsnOycsIHgrJzsnKQorICAgICAgICAjIGNoZWNrIHNldmVyYWwgY29tYmluYXRpb25zIG9mIG51bWVyaWMgY2hhcmFjdGVyIHJlZmVyZW5jZXMsCisgICAgICAgICMgcG9zc2libHkgZm9sbG93ZWQgYnkgZGlmZmVyZW50IGNoYXJhY3RlcnMKKyAgICAgICAgZm9ybWF0cyA9IFsnJiMlZCcsICcmIyUwN2QnLCAnJiMlZDsnLCAnJiMlMDdkOycsCisgICAgICAgICAgICAgICAgICAgJyYjeCV4JywgJyYjeCUwNngnLCAnJiN4JXg7JywgJyYjeCUwNng7JywKKyAgICAgICAgICAgICAgICAgICAnJiN4JVgnLCAnJiN4JTA2WCcsICcmI1gleDsnLCAnJiNYJTA2eDsnXQorICAgICAgICBmb3IgbnVtLCBjaGFyIGluIHppcChbNjUsIDk3LCAzNCwgMzgsIDB4MjYwMywgMHgxMDEyMzRdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJ0EnLCAnYScsICciJywgJyYnLCAnXHUyNjAzJywgJ1xVMDAxMDEyMzQnXSk6CisgICAgICAgICAgICBmb3IgcyBpbiBmb3JtYXRzOgorICAgICAgICAgICAgICAgIGNoZWNrKHMgJSBudW0sIGNoYXIpCisgICAgICAgICAgICAgICAgZm9yIGVuZCBpbiBbJyAnLCAnWCddOgorICAgICAgICAgICAgICAgICAgICBjaGVjaygocytlbmQpICUgbnVtLCBjaGFyK2VuZCkKKyAgICAgICAgIyBjaGVjayBpbnZhbGlkIGNvZGUgcG9pbnRzCisgICAgICAgIGZvciBjcCBpbiBbMHhEODAwLCAweERCMDAsIDB4REMwMCwgMHhERkZGLCAweDExMDAwMF06CisgICAgICAgICAgICBjaGVja19udW0oY3AsICdcdUZGRkQnKQorICAgICAgICAjIGNoZWNrIG1vcmUgaW52YWxpZCBjb2RlIHBvaW50cworICAgICAgICBmb3IgY3AgaW4gWzB4MSwgMHhiLCAweGUsIDB4N2YsIDB4ZmZmZSwgMHhmZmZmLCAweDEwZmZmZSwgMHgxMGZmZmZdOgorICAgICAgICAgICAgY2hlY2tfbnVtKGNwLCAnJykKKyAgICAgICAgIyBjaGVjayBpbnZhbGlkIG51bWJlcnMKKyAgICAgICAgZm9yIG51bSwgY2ggaW4gemlwKFsweDBkLCAweDgwLCAweDk1LCAweDlkXSwgJ1xyXHUyMGFjXHUyMDIyXHg5ZCcpOgorICAgICAgICAgICAgY2hlY2tfbnVtKG51bSwgY2gpCisgICAgICAgICMgY2hlY2sgc21hbGwgbnVtYmVycworICAgICAgICBjaGVja19udW0oMCwgJ1x1RkZGRCcpCisgICAgICAgIGNoZWNrX251bSg5LCAnXHQnKQorICAgICAgICAjIGNoZWNrIGEgYmlnIG51bWJlcgorICAgICAgICBjaGVja19udW0oMTAwMDAwMDAwMDAwMDAwMDAwMCwgJ1x1RkZGRCcpCisgICAgICAgICMgY2hlY2sgdGhhdCBtdWx0aXBsZSB0cmFpbGluZyBzZW1pY29sb25zIGFyZSBoYW5kbGVkIGNvcnJlY3RseQorICAgICAgICBmb3IgZSBpbiBbJyZxdW90OzsnLCAnJiMzNDs7JywgJyYjeDIyOzsnLCAnJiNYMjI7OyddOgorICAgICAgICAgICAgY2hlY2soZSwgJyI7JykKKyAgICAgICAgIyBjaGVjayB0aGF0IHNlbWljb2xvbnMgaW4gdGhlIG1pZGRsZSBkb24ndCBjcmVhdGUgcHJvYmxlbXMKKyAgICAgICAgZm9yIGUgaW4gWycmcXVvdDtxdW90OycsICcmIzM0O3F1b3Q7JywgJyYjeDIyO3F1b3Q7JywgJyYjWDIyO3F1b3Q7J106CisgICAgICAgICAgICBjaGVjayhlLCAnInF1b3Q7JykKKyAgICAgICAgIyBjaGVjayB0cmlwbGUgYWRqYWNlbnQgY2hhcnJlZnMKKyAgICAgICAgZm9yIGUgaW4gWycmcXVvdCcsICcmIzM0JywgJyYjeDIyJywgJyYjWDIyJ106CisgICAgICAgICAgICBjaGVjayhlKjMsICciIiInKQorICAgICAgICAgICAgY2hlY2soKGUrJzsnKSozLCAnIiIiJykKKyAgICAgICAgIyBjaGVjayB0aGF0IHRoZSBjYXNlIGlzIHJlc3BlY3RlZAorICAgICAgICBmb3IgZSBpbiBbJyZhbXAnLCAnJmFtcDsnLCAnJkFNUCcsICcmQU1QOyddOgorICAgICAgICAgICAgY2hlY2soZSwgJyYnKQorICAgICAgICBmb3IgZSBpbiBbJyZBbXAnLCAnJkFtcDsnXToKKyAgICAgICAgICAgIGNoZWNrKGUsIGUpCisgICAgICAgICMgY2hlY2sgdGhhdCBub24tZXhpc3RlbnQgbmFtZWQgZW50aXRpZXMgYXJlIHJldHVybmVkIHVuY2hhbmdlZAorICAgICAgICBjaGVjaygnJnN2YWRpbGZhcmk7JywgJyZzdmFkaWxmYXJpOycpCisgICAgICAgICMgdGhlIGZvbGxvd2luZyBleGFtcGxlcyBhcmUgaW4gdGhlIGh0bWw1IHNwZWNzCisgICAgICAgIGNoZWNrKCcmbm90aXQnLCAnwqxpdCcpCisgICAgICAgIGNoZWNrKCcmbm90aXQ7JywgJ8KsaXQ7JykKKyAgICAgICAgY2hlY2soJyZub3RpbicsICfCrGluJykKKyAgICAgICAgY2hlY2soJyZub3RpbjsnLCAn4oiJJykKKyAgICAgICAgIyBhIHNpbWlsYXIgZXhhbXBsZSB3aXRoIGEgbG9uZyBuYW1lCisgICAgICAgIGNoZWNrKCcmbm90UmVhbGx5QW5FeGlzdGluZ05hbWVkQ2hhcmFjdGVyUmVmZXJlbmNlOycsCisgICAgICAgICAgICAgICfCrFJlYWxseUFuRXhpc3RpbmdOYW1lZENoYXJhY3RlclJlZmVyZW5jZTsnKQorICAgICAgICAjIGxvbmdlc3QgdmFsaWQgbmFtZQorICAgICAgICBjaGVjaygnJkNvdW50ZXJDbG9ja3dpc2VDb250b3VySW50ZWdyYWw7JywgJ+KIsycpCisgICAgICAgICMgY2hlY2sgYSBjaGFycmVmIHRoYXQgbWFwcyB0byB0d28gdW5pY29kZSBjaGFycworICAgICAgICBjaGVjaygnJmFjRTsnLCAnXHUyMjNFXHUwMzMzJykKKyAgICAgICAgY2hlY2soJyZhY0UnLCAnJmFjRScpCisgICAgICAgICMgc2VlICMxMjg4OAorICAgICAgICBjaGVjaygnJiMxMjM7ICcgKiAxMDUwLCAneyAnICogMTA1MCkKKyAgICAgICAgIyBzZWUgIzE1MTU2CisgICAgICAgIGNoZWNrKCcmRWFjdXRlcmljJkVhY3V0ZTtyaWMmYWxwaGFjZW50YXVyaSZhbHBoYTtjZW50YXVyaScsCisgICAgICAgICAgICAgICfDiXJpY8OJcmljJmFscGhhY2VudGF1cmnOsWNlbnRhdXJpJykKKyAgICAgICAgY2hlY2soJyZjbzsnLCAnJmNvOycpCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBydW5fdW5pdHRlc3QoSHRtbFRlc3RzKQogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2h0bWxwYXJzZXIucHkgYi9MaWIvdGVzdC90ZXN0X2h0bWxwYXJzZXIucHkKaW5kZXggMTFkOWM5Yy4uMTQ0ZjgyMCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9odG1scGFyc2VyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaHRtbHBhcnNlci5weQpAQCAtNzAsNiArNzAsMTUgQEAKICAgICAgICAgc2VsZi5hcHBlbmQoKCJzdGFydHRhZ190ZXh0Iiwgc2VsZi5nZXRfc3RhcnR0YWdfdGV4dCgpKSkKIAogCitjbGFzcyBFdmVudENvbGxlY3RvckNoYXJyZWZzKEV2ZW50Q29sbGVjdG9yKToKKworICAgIGRlZiBoYW5kbGVfY2hhcnJlZihzZWxmLCBkYXRhKToKKyAgICAgICAgc2VsZi5mYWlsKCdUaGlzIHNob3VsZCBuZXZlciBiZSBjYWxsZWQgd2l0aCBjb252ZXJ0X2NoYXJyZWZzPVRydWUnKQorCisgICAgZGVmIGhhbmRsZV9lbnRpdHlyZWYoc2VsZiwgZGF0YSk6CisgICAgICAgIHNlbGYuZmFpbCgnVGhpcyBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIHdpdGggY29udmVydF9jaGFycmVmcz1UcnVlJykKKworCiBjbGFzcyBUZXN0Q2FzZUJhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIGdldF9jb2xsZWN0b3Ioc2VsZik6CkBAIC04NCwyNiArOTMsMzAgQEAKICAgICAgICAgcGFyc2VyLmNsb3NlKCkKICAgICAgICAgZXZlbnRzID0gcGFyc2VyLmdldF9ldmVudHMoKQogICAgICAgICBpZiBldmVudHMgIT0gZXhwZWN0ZWRfZXZlbnRzOgotICAgICAgICAgICAgc2VsZi5mYWlsKCJyZWNlaXZlZCBldmVudHMgZGlkIG5vdCBtYXRjaCBleHBlY3RlZCBldmVudHNcbiIKLSAgICAgICAgICAgICAgICAgICAgICAiRXhwZWN0ZWQ6XG4iICsgcHByaW50LnBmb3JtYXQoZXhwZWN0ZWRfZXZlbnRzKSArCisgICAgICAgICAgICBzZWxmLmZhaWwoInJlY2VpdmVkIGV2ZW50cyBkaWQgbm90IG1hdGNoIGV4cGVjdGVkIGV2ZW50cyIgKworICAgICAgICAgICAgICAgICAgICAgICJcblNvdXJjZTpcbiIgKyByZXByKHNvdXJjZSkgKworICAgICAgICAgICAgICAgICAgICAgICJcbkV4cGVjdGVkOlxuIiArIHBwcmludC5wZm9ybWF0KGV4cGVjdGVkX2V2ZW50cykgKwogICAgICAgICAgICAgICAgICAgICAgICJcblJlY2VpdmVkOlxuIiArIHBwcmludC5wZm9ybWF0KGV2ZW50cykpCiAKICAgICBkZWYgX3J1bl9jaGVja19leHRyYShzZWxmLCBzb3VyY2UsIGV2ZW50cyk6Ci0gICAgICAgIHNlbGYuX3J1bl9jaGVjayhzb3VyY2UsIGV2ZW50cywgRXZlbnRDb2xsZWN0b3JFeHRyYSgpKQorICAgICAgICBzZWxmLl9ydW5fY2hlY2soc291cmNlLCBldmVudHMsCisgICAgICAgICAgICAgICAgICAgICAgICBFdmVudENvbGxlY3RvckV4dHJhKGNvbnZlcnRfY2hhcnJlZnM9RmFsc2UpKQogCiAgICAgZGVmIF9wYXJzZV9lcnJvcihzZWxmLCBzb3VyY2UpOgogICAgICAgICBkZWYgcGFyc2Uoc291cmNlPXNvdXJjZSk6CiAgICAgICAgICAgICBwYXJzZXIgPSBzZWxmLmdldF9jb2xsZWN0b3IoKQogICAgICAgICAgICAgcGFyc2VyLmZlZWQoc291cmNlKQogICAgICAgICAgICAgcGFyc2VyLmNsb3NlKCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoaHRtbC5wYXJzZXIuSFRNTFBhcnNlRXJyb3IsIHBhcnNlKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGh0bWwucGFyc2VyLkhUTUxQYXJzZUVycm9yKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgorICAgICAgICAgICAgICAgIHBhcnNlKCkKIAogCiBjbGFzcyBIVE1MUGFyc2VyU3RyaWN0VGVzdENhc2UoVGVzdENhc2VCYXNlKToKIAogICAgIGRlZiBnZXRfY29sbGVjdG9yKHNlbGYpOgogICAgICAgICB3aXRoIHN1cHBvcnQuY2hlY2tfd2FybmluZ3MoKCIiLCBEZXByZWNhdGlvbldhcm5pbmcpLCBxdWl0ZT1GYWxzZSk6Ci0gICAgICAgICAgICByZXR1cm4gRXZlbnRDb2xsZWN0b3Ioc3RyaWN0PVRydWUpCisgICAgICAgICAgICByZXR1cm4gRXZlbnRDb2xsZWN0b3Ioc3RyaWN0PVRydWUsIGNvbnZlcnRfY2hhcnJlZnM9RmFsc2UpCiAKICAgICBkZWYgdGVzdF9wcm9jZXNzaW5nX2luc3RydWN0aW9uX29ubHkoc2VsZik6CiAgICAgICAgIHNlbGYuX3J1bl9jaGVjaygiPD9wcm9jZXNzaW5nIGluc3RydWN0aW9uPiIsIFsKQEAgLTMzOSw3ICszNTIsNyBAQAogICAgICAgICAgICAgc2VsZi5fcnVuX2NoZWNrKHMsIFsoInN0YXJ0dGFnIiwgZWxlbWVudF9sb3dlciwgW10pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoImRhdGEiLCBjb250ZW50KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJlbmR0YWciLCBlbGVtZW50X2xvd2VyKV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbGVjdG9yPUNvbGxlY3RvcigpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rvcj1Db2xsZWN0b3IoY29udmVydF9jaGFycmVmcz1GYWxzZSkpCiAKICAgICBkZWYgdGVzdF9jb21tZW50cyhzZWxmKToKICAgICAgICAgaHRtbCA9ICgiPCEtLSBJJ20gYSB2YWxpZCBjb21tZW50IC0tPiIKQEAgLTM2NywxMSArMzgwLDYwIEBACiAgICAgICAgICAgICAgICAgICAgICgnY29tbWVudCcsICdbaWYgbHRlIElFIDddPnByZXR0eT88IVtlbmRpZl0nKV0KICAgICAgICAgc2VsZi5fcnVuX2NoZWNrKGh0bWwsIGV4cGVjdGVkKQogCisgICAgZGVmIHRlc3RfY29udmVydF9jaGFycmVmcyhzZWxmKToKKyAgICAgICAgY29sbGVjdG9yID0gbGFtYmRhOiBFdmVudENvbGxlY3RvckNoYXJyZWZzKGNvbnZlcnRfY2hhcnJlZnM9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvbGxlY3RvcigpLmNvbnZlcnRfY2hhcnJlZnMpCisgICAgICAgIGNoYXJyZWZzID0gWycmcXVvdDsnLCAnJiMzNDsnLCAnJiN4MjI7JywgJyZxdW90JywgJyYjMzQnLCAnJiN4MjInXQorICAgICAgICAjIGNoZWNrIGNoYXJyZWZzIGluIHRoZSBtaWRkbGUgb2YgdGhlIHRleHQvYXR0cmlidXRlcworICAgICAgICBleHBlY3RlZCA9IFsoJ3N0YXJ0dGFnJywgJ2EnLCBbKCdocmVmJywgJ2ZvbyJ6YXInKV0pLAorICAgICAgICAgICAgICAgICAgICAoJ2RhdGEnLCAnYSJ6JyksICgnZW5kdGFnJywgJ2EnKV0KKyAgICAgICAgZm9yIGNoYXJyZWYgaW4gY2hhcnJlZnM6CisgICAgICAgICAgICBzZWxmLl9ydW5fY2hlY2soJzxhIGhyZWY9ImZvb3swfXphciI+YXswfXo8L2E+Jy5mb3JtYXQoY2hhcnJlZiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQsIGNvbGxlY3Rvcj1jb2xsZWN0b3IoKSkKKyAgICAgICAgIyBjaGVjayBjaGFycmVmcyBhdCB0aGUgYmVnaW5uaW5nL2VuZCBvZiB0aGUgdGV4dC9hdHRyaWJ1dGVzCisgICAgICAgIGV4cGVjdGVkID0gWygnZGF0YScsICciJyksCisgICAgICAgICAgICAgICAgICAgICgnc3RhcnR0YWcnLCAnYScsIFsoJ3gnLCAnIicpLCAoJ3knLCAnIlgnKSwgKCd6JywgJ1giJyldKSwKKyAgICAgICAgICAgICAgICAgICAgKCdkYXRhJywgJyInKSwgKCdlbmR0YWcnLCAnYScpLCAoJ2RhdGEnLCAnIicpXQorICAgICAgICBmb3IgY2hhcnJlZiBpbiBjaGFycmVmczoKKyAgICAgICAgICAgIHNlbGYuX3J1bl9jaGVjaygnezB9PGEgeD0iezB9IiB5PSJ7MH1YIiB6PSJYezB9Ij4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3swfTwvYT57MH0nLmZvcm1hdChjaGFycmVmKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCwgY29sbGVjdG9yPWNvbGxlY3RvcigpKQorICAgICAgICAjIGNoZWNrIGNoYXJyZWZzIGluIDxzY3JpcHQ+LzxzdHlsZT4gZWxlbWVudHMKKyAgICAgICAgZm9yIGNoYXJyZWYgaW4gY2hhcnJlZnM6CisgICAgICAgICAgICB0ZXh0ID0gJ1gnLmpvaW4oW2NoYXJyZWZdKjMpCisgICAgICAgICAgICBleHBlY3RlZCA9IFsoJ2RhdGEnLCAnIicpLAorICAgICAgICAgICAgICAgICAgICAgICAgKCdzdGFydHRhZycsICdzY3JpcHQnLCBbXSksICgnZGF0YScsIHRleHQpLAorICAgICAgICAgICAgICAgICAgICAgICAgKCdlbmR0YWcnLCAnc2NyaXB0JyksICgnZGF0YScsICciJyksCisgICAgICAgICAgICAgICAgICAgICAgICAoJ3N0YXJ0dGFnJywgJ3N0eWxlJywgW10pLCAoJ2RhdGEnLCB0ZXh0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICgnZW5kdGFnJywgJ3N0eWxlJyksICgnZGF0YScsICciJyldCisgICAgICAgICAgICBzZWxmLl9ydW5fY2hlY2soJ3sxfTxzY3JpcHQ+ezB9PC9zY3JpcHQ+ezF9JworICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8c3R5bGU+ezB9PC9zdHlsZT57MX0nLmZvcm1hdCh0ZXh0LCBjaGFycmVmKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCwgY29sbGVjdG9yPWNvbGxlY3RvcigpKQorICAgICAgICAjIGNoZWNrIHRydW5jYXRlZCBjaGFycmVmcyBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlCisgICAgICAgIGh0bWwgPSAnJnF1byAmIyAmI3gnCisgICAgICAgIGZvciB4IGluIHJhbmdlKDEsIGxlbihodG1sKSk6CisgICAgICAgICAgICBzZWxmLl9ydW5fY2hlY2soaHRtbFs6eF0sIFsoJ2RhdGEnLCBodG1sWzp4XSldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rvcj1jb2xsZWN0b3IoKSkKKyAgICAgICAgIyBjaGVjayBhIHN0cmluZyB3aXRoIG5vIGNoYXJyZWZzCisgICAgICAgIHNlbGYuX3J1bl9jaGVjaygnbm8gY2hhcnJlZnMgaGVyZScsIFsoJ2RhdGEnLCAnbm8gY2hhcnJlZnMgaGVyZScpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rvcj1jb2xsZWN0b3IoKSkKKwogCiBjbGFzcyBIVE1MUGFyc2VyVG9sZXJhbnRUZXN0Q2FzZShIVE1MUGFyc2VyU3RyaWN0VGVzdENhc2UpOgogCiAgICAgZGVmIGdldF9jb2xsZWN0b3Ioc2VsZik6Ci0gICAgICAgIHJldHVybiBFdmVudENvbGxlY3RvcihzdHJpY3Q9RmFsc2UpCisgICAgICAgIHJldHVybiBFdmVudENvbGxlY3Rvcihjb252ZXJ0X2NoYXJyZWZzPUZhbHNlKQorCisgICAgZGVmIHRlc3RfZGVwcmVjYXRpb25fd2FybmluZ3Moc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgorICAgICAgICAgICAgRXZlbnRDb2xsZWN0b3IoKSAgIyBjb252ZXJ0X2NoYXJyZWZzIG5vdCBwYXNzZWQgZXhwbGljaXRseQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgIEV2ZW50Q29sbGVjdG9yKHN0cmljdD1UcnVlKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgIEV2ZW50Q29sbGVjdG9yKHN0cmljdD1GYWxzZSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhodG1sLnBhcnNlci5IVE1MUGFyc2VFcnJvcik6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgICAgICBFdmVudENvbGxlY3RvcigpLmVycm9yKCd0ZXN0JykKIAogICAgIGRlZiB0ZXN0X3RvbGVyYW50X3BhcnNpbmcoc2VsZik6CiAgICAgICAgIHNlbGYuX3J1bl9jaGVjaygnPGh0bWwgPGh0bWw+dGU+Pnh0JmE8PGJjPC9hPjwvaHRtbD5cbicKQEAgLTU2NCwxNyArNjI2LDEyIEBACiAgICAgICAgIGZvciBodG1sLCBleHBlY3RlZCBpbiBkYXRhOgogICAgICAgICAgICAgc2VsZi5fcnVuX2NoZWNrKGh0bWwsIGV4cGVjdGVkKQogCi0gICAgZGVmIHRlc3RfdW5lc2NhcGVfZnVuY3Rpb24oc2VsZik6CisgICAgZGVmIHRlc3RfdW5lc2NhcGVfbWV0aG9kKHNlbGYpOgorICAgICAgICBmcm9tIGh0bWwgaW1wb3J0IHVuZXNjYXBlCiAgICAgICAgIHAgPSBzZWxmLmdldF9jb2xsZWN0b3IoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAudW5lc2NhcGUoJyYjYmFkOycpLCcmI2JhZDsnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAudW5lc2NhcGUoJyYjMDAzODsnKSwnJicpCi0gICAgICAgICMgc2VlICMxMjg4OAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAudW5lc2NhcGUoJyYjMTIzOyAnICogMTA1MCksICd7ICcgKiAxMDUwKQotICAgICAgICAjIHNlZSAjMTUxNTYKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnVuZXNjYXBlKCcmRWFjdXRlcmljJkVhY3V0ZTtyaWMnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJmFscGhhY2VudGF1cmkmYWxwaGE7Y2VudGF1cmknKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICfDiXJpY8OJcmljJmFscGhhY2VudGF1cmnOsWNlbnRhdXJpJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnVuZXNjYXBlKCcmY287JyksICcmY287JykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6CisgICAgICAgICAgICBzID0gJyZxdW90OyYjMzQ7JiN4MjI7JnF1b3QmIzM0JiN4MjImI2JhZDsnCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAudW5lc2NhcGUocyksIHVuZXNjYXBlKHMpKQogCiAgICAgZGVmIHRlc3RfYnJva2VuX2NvbW1lbnRzKHNlbGYpOgogICAgICAgICBodG1sID0gKCc8ISBub3QgcmVhbGx5IGEgY29tbWVudCA+JwpAQCAtNjI1LDEyICs2ODIsMjQgQEAKICAgICAgICAgXQogICAgICAgICBzZWxmLl9ydW5fY2hlY2soaHRtbCwgZXhwZWN0ZWQpCiAKKyAgICBkZWYgdGVzdF9jb252ZXJ0X2NoYXJyZWZzX2Ryb3BwZWRfdGV4dChzZWxmKToKKyAgICAgICAgIyAjMjMxNDQ6IG1ha2Ugc3VyZSB0aGF0IGFsbCB0aGUgZXZlbnRzIGFyZSB0cmlnZ2VyZWQgd2hlbgorICAgICAgICAjIGNvbnZlcnRfY2hhcnJlZnMgaXMgVHJ1ZSwgZXZlbiBpZiB3ZSBkb24ndCBjYWxsIC5jbG9zZSgpCisgICAgICAgIHBhcnNlciA9IEV2ZW50Q29sbGVjdG9yKGNvbnZlcnRfY2hhcnJlZnM9VHJ1ZSkKKyAgICAgICAgIyBiZWZvcmUgdGhlIGZpeCwgYmFyICYgYmF6IHdhcyBtaXNzaW5nCisgICAgICAgIHBhcnNlci5mZWVkKCJmb28gPGE+bGluazwvYT4gYmFyICZhbXA7IGJheiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBwYXJzZXIuZ2V0X2V2ZW50cygpLAorICAgICAgICAgICAgWygnZGF0YScsICdmb28gJyksICgnc3RhcnR0YWcnLCAnYScsIFtdKSwgKCdkYXRhJywgJ2xpbmsnKSwKKyAgICAgICAgICAgICAoJ2VuZHRhZycsICdhJyksICgnZGF0YScsICcgYmFyICYgYmF6JyldCisgICAgICAgICkKKwogCiBjbGFzcyBBdHRyaWJ1dGVzU3RyaWN0VGVzdENhc2UoVGVzdENhc2VCYXNlKToKIAogICAgIGRlZiBnZXRfY29sbGVjdG9yKHNlbGYpOgogICAgICAgICB3aXRoIHN1cHBvcnQuY2hlY2tfd2FybmluZ3MoKCIiLCBEZXByZWNhdGlvbldhcm5pbmcpLCBxdWl0ZT1GYWxzZSk6Ci0gICAgICAgICAgICByZXR1cm4gRXZlbnRDb2xsZWN0b3Ioc3RyaWN0PVRydWUpCisgICAgICAgICAgICByZXR1cm4gRXZlbnRDb2xsZWN0b3Ioc3RyaWN0PVRydWUsIGNvbnZlcnRfY2hhcnJlZnM9RmFsc2UpCiAKICAgICBkZWYgdGVzdF9hdHRyX3N5bnRheChzZWxmKToKICAgICAgICAgb3V0cHV0ID0gWwpAQCAtNjkxLDcgKzc2MCw3IEBACiBjbGFzcyBBdHRyaWJ1dGVzVG9sZXJhbnRUZXN0Q2FzZShBdHRyaWJ1dGVzU3RyaWN0VGVzdENhc2UpOgogCiAgICAgZGVmIGdldF9jb2xsZWN0b3Ioc2VsZik6Ci0gICAgICAgIHJldHVybiBFdmVudENvbGxlY3RvcihzdHJpY3Q9RmFsc2UpCisgICAgICAgIHJldHVybiBFdmVudENvbGxlY3Rvcihjb252ZXJ0X2NoYXJyZWZzPUZhbHNlKQogCiAgICAgZGVmIHRlc3RfYXR0cl9mdW5reV9uYW1lczIoc2VsZik6CiAgICAgICAgIHNlbGYuX3J1bl9jaGVjaygKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaHR0cF9jb29raWVqYXIucHkgYi9MaWIvdGVzdC90ZXN0X2h0dHBfY29va2llamFyLnB5CmluZGV4IGZiNjZmNmYuLjUwMjYwZmYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaHR0cF9jb29raWVqYXIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9odHRwX2Nvb2tpZWphci5weQpAQCAtNDc5LDYgKzQ3OSw5IEBACiAgICAgICAgIGludGVyYWN0X25ldHNjYXBlKGMsICJodHRwOi8vd3d3LmFjbWUuY29tOjgwLyIsICdmb289YmFyOyBleHBpcmVzPScpCiAgICAgICAgIGludGVyYWN0X25ldHNjYXBlKGMsICJodHRwOi8vd3d3LmFjbWUuY29tOjgwLyIsICdzcGFtPWVnZ3M7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4cGlyZXM9IkZvbyBCYXIgMjUgMzM6MjI6MTEgMzAyMiInKQorICAgICAgICBpbnRlcmFjdF9uZXRzY2FwZShjLCAnaHR0cDovL3d3dy5hY21lLmNvbS8nLCAnZm9ydHl0d289JykKKyAgICAgICAgaW50ZXJhY3RfbmV0c2NhcGUoYywgJ2h0dHA6Ly93d3cuYWNtZS5jb20vJywgJz11bmxhZGVuc3dhbGxvdycpCisgICAgICAgIGludGVyYWN0X25ldHNjYXBlKGMsICdodHRwOi8vd3d3LmFjbWUuY29tLycsICdob2x5aGFuZGdyZW5hZGUnKQogCiAgICAgICAgIGNvb2tpZSA9IGMuX2Nvb2tpZXNbIi5hY21lLmNvbSJdWyIvIl1bInNwYW0iXQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvb2tpZS5kb21haW4sICIuYWNtZS5jb20iKQpAQCAtNTA1LDYgKzUwOCwxNiBAQAogICAgICAgICBzZWxmLmFzc2VydElzTm9uZShmb28uZXhwaXJlcykKICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc3BhbS5leHBpcmVzKQogCisgICAgICAgIGNvb2tpZSA9IGMuX2Nvb2tpZXNbJ3d3dy5hY21lLmNvbSddWycvJ11bJ2ZvcnR5dHdvJ10KKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoY29va2llLnZhbHVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvb2tpZS52YWx1ZSwgJycpCisKKyAgICAgICAgIyB0aGVyZSBzaG91bGQgYmUgYSBkaXN0aW5jdGlvbiBiZXR3ZWVuIGEgcHJlc2VudCBidXQgZW1wdHkgdmFsdWUKKyAgICAgICAgIyAoYWJvdmUpIGFuZCBhIHZhbHVlIHRoYXQncyBlbnRpcmVseSBtaXNzaW5nIChiZWxvdykKKworICAgICAgICBjb29raWUgPSBjLl9jb29raWVzWyd3d3cuYWNtZS5jb20nXVsnLyddWydob2x5aGFuZGdyZW5hZGUnXQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShjb29raWUudmFsdWUpCisKICAgICBkZWYgdGVzdF9uc19wYXJzZXJfc3BlY2lhbF9uYW1lcyhzZWxmKToKICAgICAgICAgIyBuYW1lcyBzdWNoIGFzICdleHBpcmVzJyBhcmUgbm90IHNwZWNpYWwgaW4gZmlyc3QgbmFtZT12YWx1ZSBwYWlyCiAgICAgICAgICMgb2YgU2V0LUNvb2tpZTogaGVhZGVyCkBAIC01NTMsNiArNTY2LDE1IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGMpLCAxKQogICAgICAgICBzZWxmLmFzc2VydEluKCdzcGFtPSJiYXIiJywgaCkKIAorICAgICAgICAjIHRlc3QgaWYgZnJhY3Rpb25hbCBleHBpcnkgaXMgYWNjZXB0ZWQKKyAgICAgICAgY29va2llICA9IENvb2tpZSgwLCAibmFtZSIsICJ2YWx1ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgTm9uZSwgRmFsc2UsICJ3d3cucHl0aG9uLm9yZyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgVHJ1ZSwgRmFsc2UsICIvIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBGYWxzZSwgRmFsc2UsICIxNDQ0MzEyMzgzLjAxODMwNyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgRmFsc2UsIE5vbmUsIE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAge30pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29va2llLmV4cGlyZXMsIDE0NDQzMTIzODMpCisKICAgICAgICAgIyBYWFggUkZDIDI5NjUgZXhwaXJ5IHJ1bGVzIChzb21lIGFwcGx5IHRvIFYwIHRvbykKIAogICAgIGRlZiB0ZXN0X2RlZmF1bHRfcGF0aChzZWxmKToKQEAgLTEwODAsNiArMTEwMiwxMyBAQAogICAgICAgICAgICAgcGFyc2VfbnNfaGVhZGVycyhbImZvbyJdKSwKICAgICAgICAgICAgIFtbKCJmb28iLCBOb25lKSwgKCJ2ZXJzaW9uIiwgIjAiKV1dCiAgICAgICAgICAgICApCisgICAgICAgICMgbWlzc2luZyBjb29raWUgdmFsdWVzIGZvciBwYXJzZWQgYXR0cmlidXRlcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgcGFyc2VfbnNfaGVhZGVycyhbJ2Zvbz1iYXI7IGV4cGlyZXMnXSksCisgICAgICAgICAgICBbWygnZm9vJywgJ2JhcicpLCAoJ2V4cGlyZXMnLCBOb25lKSwgKCd2ZXJzaW9uJywgJzAnKV1dKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgcGFyc2VfbnNfaGVhZGVycyhbJ2Zvbz1iYXI7IHZlcnNpb24nXSksCisgICAgICAgICAgICBbWygnZm9vJywgJ2JhcicpLCAoJ3ZlcnNpb24nLCBOb25lKV1dKQogICAgICAgICAjIHNob3VsZG4ndCBhZGQgdmVyc2lvbiBpZiBoZWFkZXIgaXMgZW1wdHkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZV9uc19oZWFkZXJzKFsiIl0pLCBbXSkKIApAQCAtMTA5Miw2ICsxMTIxLDggQEAKICAgICAgICAgICAgIGMuZXh0cmFjdF9jb29raWVzKHIsIHJlcSkKICAgICAgICAgICAgIHJldHVybiBjCiAKKyAgICAgICAgZnV0dXJlID0gdGltZTJuZXRzY2FwZSh0aW1lLnRpbWUoKSszNjAwKQorCiAgICAgICAgICMgbm9uZSBvZiB0aGVzZSBiYWQgaGVhZGVycyBzaG91bGQgY2F1c2UgYW4gZXhjZXB0aW9uIHRvIGJlIHJhaXNlZAogICAgICAgICBmb3IgaGVhZGVycyBpbiBbCiAgICAgICAgICAgICBbIlNldC1Db29raWU6ICJdLCAgIyBhY3R1YWxseSwgbm90aGluZyB3cm9uZyB3aXRoIHRoaXMKQEAgLTExMDIsNiArMTEzMyw3IEBACiAgICAgICAgICAgICBbIlNldC1Db29raWU6IGI9Zm9vOyBtYXgtYWdlPW9vcHMiXSwKICAgICAgICAgICAgICMgYmFkIHZlcnNpb24KICAgICAgICAgICAgIFsiU2V0LUNvb2tpZTogYj1mb287IHZlcnNpb249c3BhbSJdLAorICAgICAgICAgICAgWyJTZXQtQ29va2llOjsgRXhwaXJlcz0lcyIgJSBmdXR1cmVdLAogICAgICAgICAgICAgXToKICAgICAgICAgICAgIGMgPSBjb29raWVqYXJfZnJvbV9jb29raWVfaGVhZGVycyhoZWFkZXJzKQogICAgICAgICAgICAgIyB0aGVzZSBiYWQgY29va2llcyBzaG91bGRuJ3QgYmUgc2V0CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2h0dHBfY29va2llcy5weSBiL0xpYi90ZXN0L3Rlc3RfaHR0cF9jb29raWVzLnB5CmluZGV4IDhkN2MyMjAuLmM3YjY4MGIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaHR0cF9jb29raWVzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaHR0cF9jb29raWVzLnB5CkBAIC0zLDcgKzMsNyBAQAogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgcnVuX2RvY3Rlc3QsIGNoZWNrX3dhcm5pbmdzCiBpbXBvcnQgdW5pdHRlc3QKIGZyb20gaHR0cCBpbXBvcnQgY29va2llcwotCitpbXBvcnQgcGlja2xlCiBpbXBvcnQgd2FybmluZ3MKIAogY2xhc3MgQ29va2llVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtMTI3LDcgKzEyNyw3IEBACiAgICAgICAgIENbJ0N1c3RvbWVyJ11bJ3NlY3VyZSddID0gVHJ1ZQogICAgICAgICBDWydDdXN0b21lciddWydodHRwb25seSddID0gVHJ1ZQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEMub3V0cHV0KCksCi0gICAgICAgICAgICAnU2V0LUNvb2tpZTogQ3VzdG9tZXI9IldJTEVfRV9DT1lPVEUiOyBodHRwb25seTsgc2VjdXJlJykKKyAgICAgICAgICAgICdTZXQtQ29va2llOiBDdXN0b21lcj0iV0lMRV9FX0NPWU9URSI7IEh0dHBPbmx5OyBTZWN1cmUnKQogCiAgICAgZGVmIHRlc3Rfc2VjdXJlX2h0dHBvbmx5X2ZhbHNlX2lmX25vdF9wcmVzZW50KHNlbGYpOgogICAgICAgICBDID0gY29va2llcy5TaW1wbGVDb29raWUoKQpAQCAtMTY1LDcgKzE2NSw3IEBACiAgICAgICAgIEMgPSBjb29raWVzLlNpbXBsZUNvb2tpZSgpCiAgICAgICAgIEMubG9hZCgnZWdncyAgPSAgc2NyYW1ibGVkICA7ICBzZWN1cmUgIDsgIHBhdGggID0gIGJhciAgIDsgZm9vPWZvbyAgICcpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQy5vdXRwdXQoKSwKLSAgICAgICAgICAgICdTZXQtQ29va2llOiBlZ2dzPXNjcmFtYmxlZDsgUGF0aD1iYXI7IHNlY3VyZVxyXG5TZXQtQ29va2llOiBmb289Zm9vJykKKyAgICAgICAgICAgICdTZXQtQ29va2llOiBlZ2dzPXNjcmFtYmxlZDsgUGF0aD1iYXI7IFNlY3VyZVxyXG5TZXQtQ29va2llOiBmb289Zm9vJykKIAogICAgIGRlZiB0ZXN0X3F1b3RlZF9tZXRhKHNlbGYpOgogICAgICAgICAjIFRyeSBjb29raWUgd2l0aCBxdW90ZWQgbWV0YS1kYXRhCkBAIC0yMDAsNiArMjAwLDE5IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpY3QoQyksIHt9KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDLm91dHB1dCgpLCAnJykKIAorICAgIGRlZiB0ZXN0X3BpY2tsZShzZWxmKToKKyAgICAgICAgcmF3ZGF0YSA9ICdDdXN0b21lcj0iV0lMRV9FX0NPWU9URSI7IFBhdGg9L2FjbWU7IFZlcnNpb249MScKKyAgICAgICAgZXhwZWN0ZWRfb3V0cHV0ID0gJ1NldC1Db29raWU6ICVzJyAlIHJhd2RhdGEKKworICAgICAgICBDID0gY29va2llcy5TaW1wbGVDb29raWUoKQorICAgICAgICBDLmxvYWQocmF3ZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDLm91dHB1dCgpLCBleHBlY3RlZF9vdXRwdXQpCisKKyAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChwcm90bz1wcm90byk6CisgICAgICAgICAgICAgICAgQzEgPSBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKEMsIHByb3RvY29sPXByb3RvKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEMxLm91dHB1dCgpLCBleHBlY3RlZF9vdXRwdXQpCisKIAogY2xhc3MgTW9yc2VsVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgICIiIlRlc3RzIGZvciB0aGUgTW9yc2VsIG9iamVjdC4iIiIKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaHR0cGxpYi5weSBiL0xpYi90ZXN0L3Rlc3RfaHR0cGxpYi5weQppbmRleCBjOGRlZDkyLi5kZjlhOWUzIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2h0dHBsaWIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9odHRwbGliLnB5CkBAIC0xLDYgKzEsNyBAQAogaW1wb3J0IGVycm5vCiBmcm9tIGh0dHAgaW1wb3J0IGNsaWVudAogaW1wb3J0IGlvCitpbXBvcnQgaXRlcnRvb2xzCiBpbXBvcnQgb3MKIGltcG9ydCBhcnJheQogaW1wb3J0IHNvY2tldApAQCAtMTUsMjYgKzE2LDQwIEBACiBDRVJUX2xvY2FsaG9zdCA9IG9zLnBhdGguam9pbihoZXJlLCAna2V5Y2VydC5wZW0nKQogIyBTZWxmLXNpZ25lZCBjZXJ0IGZpbGUgZm9yICdmYWtlaG9zdG5hbWUnCiBDRVJUX2Zha2Vob3N0bmFtZSA9IG9zLnBhdGguam9pbihoZXJlLCAna2V5Y2VydDIucGVtJykKLSMgUm9vdCBjZXJ0IGZpbGUgKENBKSBmb3Igc3ZuLnB5dGhvbi5vcmcncyBjZXJ0Ci1DQUNFUlRfc3ZuX3B5dGhvbl9vcmcgPSBvcy5wYXRoLmpvaW4oaGVyZSwgJ2h0dHBzX3N2bl9weXRob25fb3JnX3Jvb3QucGVtJykKKyMgU2VsZi1zaWduZWQgY2VydCBmaWxlIGZvciBzZWxmLXNpZ25lZC5weXRob250ZXN0Lm5ldAorQ0VSVF9zZWxmc2lnbmVkX3B5dGhvbnRlc3Rkb3RuZXQgPSBvcy5wYXRoLmpvaW4oaGVyZSwgJ3NlbGZzaWduZWRfcHl0aG9udGVzdGRvdG5ldC5wZW0nKQogCiBIT1NUID0gc3VwcG9ydC5IT1NUCiAKIGNsYXNzIEZha2VTb2NrZXQ6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHRleHQsIGZpbGVjbGFzcz1pby5CeXRlc0lPKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGV4dCwgZmlsZWNsYXNzPWlvLkJ5dGVzSU8sIGhvc3Q9Tm9uZSwgcG9ydD1Ob25lKToKICAgICAgICAgaWYgaXNpbnN0YW5jZSh0ZXh0LCBzdHIpOgogICAgICAgICAgICAgdGV4dCA9IHRleHQuZW5jb2RlKCJhc2NpaSIpCiAgICAgICAgIHNlbGYudGV4dCA9IHRleHQKICAgICAgICAgc2VsZi5maWxlY2xhc3MgPSBmaWxlY2xhc3MKICAgICAgICAgc2VsZi5kYXRhID0gYicnCisgICAgICAgIHNlbGYuc2VuZGFsbF9jYWxscyA9IDAKKyAgICAgICAgc2VsZi5maWxlX2Nsb3NlZCA9IEZhbHNlCisgICAgICAgIHNlbGYuaG9zdCA9IGhvc3QKKyAgICAgICAgc2VsZi5wb3J0ID0gcG9ydAogCiAgICAgZGVmIHNlbmRhbGwoc2VsZiwgZGF0YSk6CisgICAgICAgIHNlbGYuc2VuZGFsbF9jYWxscyArPSAxCiAgICAgICAgIHNlbGYuZGF0YSArPSBkYXRhCiAKICAgICBkZWYgbWFrZWZpbGUoc2VsZiwgbW9kZSwgYnVmc2l6ZT1Ob25lKToKICAgICAgICAgaWYgbW9kZSAhPSAncicgYW5kIG1vZGUgIT0gJ3JiJzoKICAgICAgICAgICAgIHJhaXNlIGNsaWVudC5VbmltcGxlbWVudGVkRmlsZU1vZGUoKQotICAgICAgICByZXR1cm4gc2VsZi5maWxlY2xhc3Moc2VsZi50ZXh0KQorICAgICAgICAjIGtlZXAgdGhlIGZpbGUgYXJvdW5kIHNvIHdlIGNhbiBjaGVjayBob3cgbXVjaCB3YXMgcmVhZCBmcm9tIGl0CisgICAgICAgIHNlbGYuZmlsZSA9IHNlbGYuZmlsZWNsYXNzKHNlbGYudGV4dCkKKyAgICAgICAgc2VsZi5maWxlLmNsb3NlID0gc2VsZi5maWxlX2Nsb3NlICNuZXJmIGNsb3NlICgpCisgICAgICAgIHJldHVybiBzZWxmLmZpbGUKKworICAgIGRlZiBmaWxlX2Nsb3NlKHNlbGYpOgorICAgICAgICBzZWxmLmZpbGVfY2xvc2VkID0gVHJ1ZQorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICBwYXNzCiAKIGNsYXNzIEVQaXBlU29ja2V0KEZha2VTb2NrZXQpOgogCkBAIC00NSw3ICs2MCw3IEBACiAKICAgICBkZWYgc2VuZGFsbChzZWxmLCBkYXRhKToKICAgICAgICAgaWYgc2VsZi5waXBlX3RyaWdnZXIgaW4gZGF0YToKLSAgICAgICAgICAgIHJhaXNlIHNvY2tldC5lcnJvcihlcnJuby5FUElQRSwgImdvdGNoYSIpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKGVycm5vLkVQSVBFLCAiZ290Y2hhIikKICAgICAgICAgc2VsZi5kYXRhICs9IGRhdGEKIAogICAgIGRlZiBjbG9zZShzZWxmKToKQEAgLTExMSwyMSArMTI2LDU5IEBACiAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29udGVudF9sZW5ndGggPSBrdlsxXS5zdHJpcCgpCiAgICAgICAgICAgICAgICAgbGlzdC5hcHBlbmQoc2VsZiwgaXRlbSkKIAotICAgICAgICAjIFBPU1Qgd2l0aCBlbXB0eSBib2R5Ci0gICAgICAgIGNvbm4gPSBjbGllbnQuSFRUUENvbm5lY3Rpb24oJ2V4YW1wbGUuY29tJykKLSAgICAgICAgY29ubi5zb2NrID0gRmFrZVNvY2tldChOb25lKQotICAgICAgICBjb25uLl9idWZmZXIgPSBDb250ZW50TGVuZ3RoQ2hlY2tlcigpCi0gICAgICAgIGNvbm4ucmVxdWVzdCgnUE9TVCcsICcvJywgJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29ubi5fYnVmZmVyLmNvbnRlbnRfbGVuZ3RoLCBiJzAnLAotICAgICAgICAgICAgICAgICAgICAgICAgJ0hlYWRlciBDb250ZW50LUxlbmd0aCBub3Qgc2V0JykKKyAgICAgICAgIyBIZXJlLCB3ZSdyZSB0ZXN0aW5nIHRoYXQgbWV0aG9kcyBleHBlY3RpbmcgYSBib2R5IGdldCBhCisgICAgICAgICMgY29udGVudC1sZW5ndGggc2V0IHRvIHplcm8gaWYgdGhlIGJvZHkgaXMgZW1wdHkgKGVpdGhlciBOb25lIG9yICcnKQorICAgICAgICBib2RpZXMgPSAoTm9uZSwgJycpCisgICAgICAgIG1ldGhvZHNfd2l0aF9ib2R5ID0gKCdQVVQnLCAnUE9TVCcsICdQQVRDSCcpCisgICAgICAgIGZvciBtZXRob2QsIGJvZHkgaW4gaXRlcnRvb2xzLnByb2R1Y3QobWV0aG9kc193aXRoX2JvZHksIGJvZGllcyk6CisgICAgICAgICAgICBjb25uID0gY2xpZW50LkhUVFBDb25uZWN0aW9uKCdleGFtcGxlLmNvbScpCisgICAgICAgICAgICBjb25uLnNvY2sgPSBGYWtlU29ja2V0KE5vbmUpCisgICAgICAgICAgICBjb25uLl9idWZmZXIgPSBDb250ZW50TGVuZ3RoQ2hlY2tlcigpCisgICAgICAgICAgICBjb25uLnJlcXVlc3QobWV0aG9kLCAnLycsIGJvZHkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgIGNvbm4uX2J1ZmZlci5jb250ZW50X2xlbmd0aCwgYicwJywKKyAgICAgICAgICAgICAgICAnSGVhZGVyIENvbnRlbnQtTGVuZ3RoIGluY29ycmVjdCBvbiB7fScuZm9ybWF0KG1ldGhvZCkKKyAgICAgICAgICAgICkKIAotICAgICAgICAjIFBVVCByZXF1ZXN0IHdpdGggZW1wdHkgYm9keQotICAgICAgICBjb25uID0gY2xpZW50LkhUVFBDb25uZWN0aW9uKCdleGFtcGxlLmNvbScpCi0gICAgICAgIGNvbm4uc29jayA9IEZha2VTb2NrZXQoTm9uZSkKLSAgICAgICAgY29ubi5fYnVmZmVyID0gQ29udGVudExlbmd0aENoZWNrZXIoKQotICAgICAgICBjb25uLnJlcXVlc3QoJ1BVVCcsICcvJywgJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29ubi5fYnVmZmVyLmNvbnRlbnRfbGVuZ3RoLCBiJzAnLAotICAgICAgICAgICAgICAgICAgICAgICAgJ0hlYWRlciBDb250ZW50LUxlbmd0aCBub3Qgc2V0JykKKyAgICAgICAgIyBGb3IgdGhlc2UgbWV0aG9kcywgd2UgbWFrZSBzdXJlIHRoYXQgY29udGVudC1sZW5ndGggaXMgbm90IHNldCB3aGVuCisgICAgICAgICMgdGhlIGJvZHkgaXMgTm9uZSBiZWNhdXNlIGl0IG1pZ2h0IGNhdXNlIHVuZXhwZWN0ZWQgYmVoYXZpb3VyIG9uIHRoZQorICAgICAgICAjIHNlcnZlci4KKyAgICAgICAgbWV0aG9kc193aXRob3V0X2JvZHkgPSAoCisgICAgICAgICAgICAgJ0dFVCcsICdDT05ORUNUJywgJ0RFTEVURScsICdIRUFEJywgJ09QVElPTlMnLCAnVFJBQ0UnLAorICAgICAgICApCisgICAgICAgIGZvciBtZXRob2QgaW4gbWV0aG9kc193aXRob3V0X2JvZHk6CisgICAgICAgICAgICBjb25uID0gY2xpZW50LkhUVFBDb25uZWN0aW9uKCdleGFtcGxlLmNvbScpCisgICAgICAgICAgICBjb25uLnNvY2sgPSBGYWtlU29ja2V0KE5vbmUpCisgICAgICAgICAgICBjb25uLl9idWZmZXIgPSBDb250ZW50TGVuZ3RoQ2hlY2tlcigpCisgICAgICAgICAgICBjb25uLnJlcXVlc3QobWV0aG9kLCAnLycsIE5vbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgIGNvbm4uX2J1ZmZlci5jb250ZW50X2xlbmd0aCwgTm9uZSwKKyAgICAgICAgICAgICAgICAnSGVhZGVyIENvbnRlbnQtTGVuZ3RoIHNldCBmb3IgZW1wdHkgYm9keSBvbiB7fScuZm9ybWF0KG1ldGhvZCkKKyAgICAgICAgICAgICkKKworICAgICAgICAjIElmIHRoZSBib2R5IGlzIHNldCB0byAnJywgdGhhdCdzIGNvbnNpZGVyZWQgdG8gYmUgInByZXNlbnQgYnV0CisgICAgICAgICMgZW1wdHkiIHJhdGhlciB0aGFuICJtaXNzaW5nIiwgc28gY29udGVudCBsZW5ndGggd291bGQgYmUgc2V0LCBldmVuCisgICAgICAgICMgZm9yIG1ldGhvZHMgdGhhdCBkb24ndCBleHBlY3QgYSBib2R5LgorICAgICAgICBmb3IgbWV0aG9kIGluIG1ldGhvZHNfd2l0aG91dF9ib2R5OgorICAgICAgICAgICAgY29ubiA9IGNsaWVudC5IVFRQQ29ubmVjdGlvbignZXhhbXBsZS5jb20nKQorICAgICAgICAgICAgY29ubi5zb2NrID0gRmFrZVNvY2tldChOb25lKQorICAgICAgICAgICAgY29ubi5fYnVmZmVyID0gQ29udGVudExlbmd0aENoZWNrZXIoKQorICAgICAgICAgICAgY29ubi5yZXF1ZXN0KG1ldGhvZCwgJy8nLCAnJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgY29ubi5fYnVmZmVyLmNvbnRlbnRfbGVuZ3RoLCBiJzAnLAorICAgICAgICAgICAgICAgICdIZWFkZXIgQ29udGVudC1MZW5ndGggaW5jb3JyZWN0IG9uIHt9Jy5mb3JtYXQobWV0aG9kKQorICAgICAgICAgICAgKQorCisgICAgICAgICMgSWYgdGhlIGJvZHkgaXMgc2V0LCBtYWtlIHN1cmUgQ29udGVudC1MZW5ndGggaXMgc2V0LgorICAgICAgICBmb3IgbWV0aG9kIGluIGl0ZXJ0b29scy5jaGFpbihtZXRob2RzX3dpdGhvdXRfYm9keSwgbWV0aG9kc193aXRoX2JvZHkpOgorICAgICAgICAgICAgY29ubiA9IGNsaWVudC5IVFRQQ29ubmVjdGlvbignZXhhbXBsZS5jb20nKQorICAgICAgICAgICAgY29ubi5zb2NrID0gRmFrZVNvY2tldChOb25lKQorICAgICAgICAgICAgY29ubi5fYnVmZmVyID0gQ29udGVudExlbmd0aENoZWNrZXIoKQorICAgICAgICAgICAgY29ubi5yZXF1ZXN0KG1ldGhvZCwgJy8nLCAnICcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgIGNvbm4uX2J1ZmZlci5jb250ZW50X2xlbmd0aCwgYicxJywKKyAgICAgICAgICAgICAgICAnSGVhZGVyIENvbnRlbnQtTGVuZ3RoIGluY29ycmVjdCBvbiB7fScuZm9ybWF0KG1ldGhvZCkKKyAgICAgICAgICAgICkKIAogICAgIGRlZiB0ZXN0X3B1dGhlYWRlcihzZWxmKToKICAgICAgICAgY29ubiA9IGNsaWVudC5IVFRQQ29ubmVjdGlvbignZXhhbXBsZS5jb20nKQpAQCAtMTM0LDYgKzE4NywzMyBAQAogICAgICAgICBjb25uLnB1dGhlYWRlcignQ29udGVudC1sZW5ndGgnLCA0MikKICAgICAgICAgc2VsZi5hc3NlcnRJbihiJ0NvbnRlbnQtbGVuZ3RoOiA0MicsIGNvbm4uX2J1ZmZlcikKIAorICAgICAgICBjb25uLnB1dGhlYWRlcignRm9vJywgJyBiYXIgJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbihiJ0ZvbzogIGJhciAnLCBjb25uLl9idWZmZXIpCisgICAgICAgIGNvbm4ucHV0aGVhZGVyKCdCYXInLCAnXHRiYXpcdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oYidCYXI6IFx0YmF6XHQnLCBjb25uLl9idWZmZXIpCisgICAgICAgIGNvbm4ucHV0aGVhZGVyKCdBdXRob3JpemF0aW9uJywgJ0JlYXJlciBteXRva2VuJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbihiJ0F1dGhvcml6YXRpb246IEJlYXJlciBteXRva2VuJywgY29ubi5fYnVmZmVyKQorICAgICAgICBjb25uLnB1dGhlYWRlcignSXRlckhlYWRlcicsICdJdGVyQScsICdJdGVyQicpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oYidJdGVySGVhZGVyOiBJdGVyQVxyXG5cdEl0ZXJCJywgY29ubi5fYnVmZmVyKQorICAgICAgICBjb25uLnB1dGhlYWRlcignTGF0aW5IZWFkZXInLCBiJ1x4RkYnKQorICAgICAgICBzZWxmLmFzc2VydEluKGInTGF0aW5IZWFkZXI6IFx4RkYnLCBjb25uLl9idWZmZXIpCisgICAgICAgIGNvbm4ucHV0aGVhZGVyKCdVdGY4SGVhZGVyJywgYidceGMzXHg4MCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oYidVdGY4SGVhZGVyOiBceGMzXHg4MCcsIGNvbm4uX2J1ZmZlcikKKyAgICAgICAgY29ubi5wdXRoZWFkZXIoJ0MxLUNvbnRyb2wnLCBiJ25leHRceDg1bGluZScpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oYidDMS1Db250cm9sOiBuZXh0XHg4NWxpbmUnLCBjb25uLl9idWZmZXIpCisgICAgICAgIGNvbm4ucHV0aGVhZGVyKCdFbWJlZGRlZC1Gb2xkLVNwYWNlJywgJ2lzXHJcbiBhbGxvd2VkJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbihiJ0VtYmVkZGVkLUZvbGQtU3BhY2U6IGlzXHJcbiBhbGxvd2VkJywgY29ubi5fYnVmZmVyKQorICAgICAgICBjb25uLnB1dGhlYWRlcignRW1iZWRkZWQtRm9sZC1UYWInLCAnaXNcclxuXHRhbGxvd2VkJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbihiJ0VtYmVkZGVkLUZvbGQtVGFiOiBpc1xyXG5cdGFsbG93ZWQnLCBjb25uLl9idWZmZXIpCisgICAgICAgIGNvbm4ucHV0aGVhZGVyKCdLZXkgU3BhY2UnLCAndmFsdWUnKQorICAgICAgICBzZWxmLmFzc2VydEluKGInS2V5IFNwYWNlOiB2YWx1ZScsIGNvbm4uX2J1ZmZlcikKKyAgICAgICAgY29ubi5wdXRoZWFkZXIoJ0tleVNwYWNlICcsICd2YWx1ZScpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oYidLZXlTcGFjZSA6IHZhbHVlJywgY29ubi5fYnVmZmVyKQorICAgICAgICBjb25uLnB1dGhlYWRlcihiJ05vbmJyZWFrXHhhMFNwYWNlJywgJ3ZhbHVlJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbihiJ05vbmJyZWFrXHhhMFNwYWNlOiB2YWx1ZScsIGNvbm4uX2J1ZmZlcikKKyAgICAgICAgY29ubi5wdXRoZWFkZXIoYidceGEwTm9uYnJlYWtTcGFjZScsICd2YWx1ZScpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oYidceGEwTm9uYnJlYWtTcGFjZTogdmFsdWUnLCBjb25uLl9idWZmZXIpCisKICAgICBkZWYgdGVzdF9pcHY2aG9zdF9oZWFkZXIoc2VsZik6CiAgICAgICAgICMgRGVmYXVsdCBob3N0IGhlYWRlciBvbiBJUHY2IHRyYW5zYWN0aW9uIHNob3VsZCB3cmFwcGVkIGJ5IFtdIGlmCiAgICAgICAgICMgaXRzIGFjdHVhbCBJUHY2IGFkZHJlc3MKQEAgLTE1Myw2ICsyMzMsNDYgQEAKICAgICAgICAgY29ubi5yZXF1ZXN0KCdHRVQnLCAnL2ZvbycpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzb2NrLmRhdGEuc3RhcnRzd2l0aChleHBlY3RlZCkpCiAKKyAgICBkZWYgdGVzdF9tYWxmb3JtZWRfaGVhZGVyc19jb3BlZF93aXRoKHNlbGYpOgorICAgICAgICAjIElzc3VlIDE5OTk2CisgICAgICAgIGJvZHkgPSAiSFRUUC8xLjEgMjAwIE9LXHJcbkZpcnN0OiB2YWxcclxuOiBudmFsXHJcblNlY29uZDogdmFsXHJcblxyXG4iCisgICAgICAgIHNvY2sgPSBGYWtlU29ja2V0KGJvZHkpCisgICAgICAgIHJlc3AgPSBjbGllbnQuSFRUUFJlc3BvbnNlKHNvY2spCisgICAgICAgIHJlc3AuYmVnaW4oKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzcC5nZXRoZWFkZXIoJ0ZpcnN0JyksICd2YWwnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3AuZ2V0aGVhZGVyKCdTZWNvbmQnKSwgJ3ZhbCcpCisKKyAgICBkZWYgdGVzdF9pbnZhbGlkX2hlYWRlcnMoc2VsZik6CisgICAgICAgIGNvbm4gPSBjbGllbnQuSFRUUENvbm5lY3Rpb24oJ2V4YW1wbGUuY29tJykKKyAgICAgICAgY29ubi5zb2NrID0gRmFrZVNvY2tldCgnJykKKyAgICAgICAgY29ubi5wdXRyZXF1ZXN0KCdHRVQnLCAnLycpCisKKyAgICAgICAgIyBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMwI3NlY3Rpb24tMy4yLjQsIHdoaXRlc3BhY2UgaXMgbm8KKyAgICAgICAgIyBsb25nZXIgYWxsb3dlZCBpbiBoZWFkZXIgbmFtZXMKKyAgICAgICAgY2FzZXMgPSAoCisgICAgICAgICAgICAoYidJbnZhbGlkXHJcbk5hbWUnLCBiJ1ZhbGlkVmFsdWUnKSwKKyAgICAgICAgICAgIChiJ0ludmFsaWRcck5hbWUnLCBiJ1ZhbGlkVmFsdWUnKSwKKyAgICAgICAgICAgIChiJ0ludmFsaWRcbk5hbWUnLCBiJ1ZhbGlkVmFsdWUnKSwKKyAgICAgICAgICAgIChiJ1xyXG5JbnZhbGlkTmFtZScsIGInVmFsaWRWYWx1ZScpLAorICAgICAgICAgICAgKGInXHJJbnZhbGlkTmFtZScsIGInVmFsaWRWYWx1ZScpLAorICAgICAgICAgICAgKGInXG5JbnZhbGlkTmFtZScsIGInVmFsaWRWYWx1ZScpLAorICAgICAgICAgICAgKGInIEludmFsaWROYW1lJywgYidWYWxpZFZhbHVlJyksCisgICAgICAgICAgICAoYidcdEludmFsaWROYW1lJywgYidWYWxpZFZhbHVlJyksCisgICAgICAgICAgICAoYidJbnZhbGlkOk5hbWUnLCBiJ1ZhbGlkVmFsdWUnKSwKKyAgICAgICAgICAgIChiJzpJbnZhbGlkTmFtZScsIGInVmFsaWRWYWx1ZScpLAorICAgICAgICAgICAgKGInVmFsaWROYW1lJywgYidJbnZhbGlkXHJcblZhbHVlJyksCisgICAgICAgICAgICAoYidWYWxpZE5hbWUnLCBiJ0ludmFsaWRcclZhbHVlJyksCisgICAgICAgICAgICAoYidWYWxpZE5hbWUnLCBiJ0ludmFsaWRcblZhbHVlJyksCisgICAgICAgICAgICAoYidWYWxpZE5hbWUnLCBiJ0ludmFsaWRWYWx1ZVxyXG4nKSwKKyAgICAgICAgICAgIChiJ1ZhbGlkTmFtZScsIGInSW52YWxpZFZhbHVlXHInKSwKKyAgICAgICAgICAgIChiJ1ZhbGlkTmFtZScsIGInSW52YWxpZFZhbHVlXG4nKSwKKyAgICAgICAgKQorICAgICAgICBmb3IgbmFtZSwgdmFsdWUgaW4gY2FzZXM6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdCgobmFtZSwgdmFsdWUpKToKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwgJ0ludmFsaWQgaGVhZGVyJyk6CisgICAgICAgICAgICAgICAgICAgIGNvbm4ucHV0aGVhZGVyKG5hbWUsIHZhbHVlKQorCiAKIGNsYXNzIEJhc2ljVGVzdChUZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3Rfc3RhdHVzX2xpbmVzKHNlbGYpOgpAQCAtNjAwLDcgKzcyMCw3IEBACiAgICAgICAgICAgICBiIkNvbnRlbnQtTGVuZ3RoIikKICAgICAgICAgY29ubiA9IGNsaWVudC5IVFRQQ29ubmVjdGlvbigiZXhhbXBsZS5jb20iKQogICAgICAgICBjb25uLnNvY2sgPSBzb2NrCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFtYmRhOiBjb25uLnJlcXVlc3QoIlBVVCIsICIvdXJsIiwgImJvZHkiKSkKICAgICAgICAgcmVzcCA9IGNvbm4uZ2V0cmVzcG9uc2UoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDQwMSwgcmVzcC5zdGF0dXMpCkBAIC02NDYsNyArNzY2LDYwIEBACiAgICAgICAgIHJlc3AuY2xvc2UoKQogICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzcC5jbG9zZWQpCiAKKyAgICBkZWYgdGVzdF9kZWxheWVkX2Fja19vcHQoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IE5hZ2xlL2RlbGF5ZWRfYWNrIG9wdGltaXN0YWlvbiB3b3JrcyBjb3JyZWN0bHkuCisKKyAgICAgICAgIyBGb3Igc21hbGwgcGF5bG9hZHMsIGl0IHNob3VsZCBjb2FsZXNjZSB0aGUgYm9keSB3aXRoCisgICAgICAgICMgaGVhZGVycywgcmVzdWx0aW5nIGluIGEgc2luZ2xlIHNlbmRhbGwoKSBjYWxsCisgICAgICAgIGNvbm4gPSBjbGllbnQuSFRUUENvbm5lY3Rpb24oJ2V4YW1wbGUuY29tJykKKyAgICAgICAgc29jayA9IEZha2VTb2NrZXQoTm9uZSkKKyAgICAgICAgY29ubi5zb2NrID0gc29jaworICAgICAgICBib2R5ID0gYid4JyAqIChjb25uLm1zcyAtIDEpCisgICAgICAgIGNvbm4ucmVxdWVzdCgnUE9TVCcsICcvJywgYm9keSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb2NrLnNlbmRhbGxfY2FsbHMsIDEpCisKKyAgICAgICAgIyBGb3IgbGFyZ2UgcGF5bG9hZHMsIGl0IHNob3VsZCBzZW5kIHRoZSBoZWFkZXJzIGFuZAorICAgICAgICAjIHRoZW4gdGhlIGJvZHksIHJlc3VsdGluZyBpbiBtb3JlIHRoYW4gb25lIHNlbmRhbGwoKQorICAgICAgICAjIGNhbGwKKyAgICAgICAgY29ubiA9IGNsaWVudC5IVFRQQ29ubmVjdGlvbignZXhhbXBsZS5jb20nKQorICAgICAgICBzb2NrID0gRmFrZVNvY2tldChOb25lKQorICAgICAgICBjb25uLnNvY2sgPSBzb2NrCisgICAgICAgIGJvZHkgPSBiJ3gnICogY29ubi5tc3MKKyAgICAgICAgY29ubi5yZXF1ZXN0KCdQT1NUJywgJy8nLCBib2R5KQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIoc29jay5zZW5kYWxsX2NhbGxzLCAxKQorCisgICAgZGVmIHRlc3RfZXJyb3JfbGVhayhzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgdGhlIHNvY2tldCBpcyBub3QgbGVha2VkIGlmIGdldHJlc3BvbnNlKCkgZmFpbHMKKyAgICAgICAgY29ubiA9IGNsaWVudC5IVFRQQ29ubmVjdGlvbignZXhhbXBsZS5jb20nKQorICAgICAgICByZXNwb25zZSA9IE5vbmUKKyAgICAgICAgY2xhc3MgUmVzcG9uc2UoY2xpZW50LkhUVFBSZXNwb25zZSk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgKnBvcywgKiprdyk6CisgICAgICAgICAgICAgICAgbm9ubG9jYWwgcmVzcG9uc2UKKyAgICAgICAgICAgICAgICByZXNwb25zZSA9IHNlbGYgICMgQXZvaWQgZ2FyYmFnZSBjb2xsZWN0b3IgY2xvc2luZyB0aGUgc29ja2V0CisgICAgICAgICAgICAgICAgY2xpZW50LkhUVFBSZXNwb25zZS5fX2luaXRfXyhzZWxmLCAqcG9zLCAqKmt3KQorICAgICAgICBjb25uLnJlc3BvbnNlX2NsYXNzID0gUmVzcG9uc2UKKyAgICAgICAgY29ubi5zb2NrID0gRmFrZVNvY2tldCgnJykgICMgRW11bGF0ZSBzZXJ2ZXIgZHJvcHBpbmcgY29ubmVjdGlvbgorICAgICAgICBjb25uLnJlcXVlc3QoJ0dFVCcsICcvJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoY2xpZW50LkJhZFN0YXR1c0xpbmUsIGNvbm4uZ2V0cmVzcG9uc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXNwb25zZS5jbG9zZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb25uLnNvY2suZmlsZV9jbG9zZWQpCisKKwogY2xhc3MgT2ZmbGluZVRlc3QoVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2FsbChzZWxmKToKKyAgICAgICAgIyBEb2N1bWVudGVkIG9iamVjdHMgZGVmaW5lZCBpbiB0aGUgbW9kdWxlIHNob3VsZCBiZSBpbiBfX2FsbF9fCisgICAgICAgIGV4cGVjdGVkID0geyJyZXNwb25zZXMifSAgIyBXaGl0ZS1saXN0IGRvY3VtZW50ZWQgZGljdCgpIG9iamVjdAorICAgICAgICAjIEhUVFBNZXNzYWdlLCBwYXJzZV9oZWFkZXJzKCksIGFuZCB0aGUgSFRUUCBzdGF0dXMgY29kZSBjb25zdGFudHMgYXJlCisgICAgICAgICMgaW50ZW50aW9uYWxseSBvbWl0dGVkIGZvciBzaW1wbGljaXR5CisgICAgICAgIGJsYWNrbGlzdCA9IHsiSFRUUE1lc3NhZ2UiLCAicGFyc2VfaGVhZGVycyJ9CisgICAgICAgIGZvciBuYW1lIGluIGRpcihjbGllbnQpOgorICAgICAgICAgICAgaWYgbmFtZSBpbiBibGFja2xpc3Q6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIG1vZHVsZV9vYmplY3QgPSBnZXRhdHRyKGNsaWVudCwgbmFtZSkKKyAgICAgICAgICAgIGlmIGdldGF0dHIobW9kdWxlX29iamVjdCwgIl9fbW9kdWxlX18iLCBOb25lKSA9PSAiaHR0cC5jbGllbnQiOgorICAgICAgICAgICAgICAgIGV4cGVjdGVkLmFkZChuYW1lKQorICAgICAgICBzZWxmLmFzc2VydENvdW50RXF1YWwoY2xpZW50Ll9fYWxsX18sIGV4cGVjdGVkKQorCiAgICAgZGVmIHRlc3RfcmVzcG9uc2VzKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNsaWVudC5yZXNwb25zZXNbY2xpZW50Lk5PVF9GT1VORF0sICJOb3QgRm91bmQiKQogCkBAIC03MzYsNTEgKzkwOSw4NCBAQAogCiAgICAgZGVmIG1ha2Vfc2VydmVyKHNlbGYsIGNlcnRmaWxlKToKICAgICAgICAgZnJvbSB0ZXN0LnNzbF9zZXJ2ZXJzIGltcG9ydCBtYWtlX2h0dHBzX3NlcnZlcgotICAgICAgICByZXR1cm4gbWFrZV9odHRwc19zZXJ2ZXIoc2VsZiwgY2VydGZpbGUpCisgICAgICAgIHJldHVybiBtYWtlX2h0dHBzX3NlcnZlcihzZWxmLCBjZXJ0ZmlsZT1jZXJ0ZmlsZSkKIAogICAgIGRlZiB0ZXN0X2F0dHJpYnV0ZXMoc2VsZik6CiAgICAgICAgICMgc2ltcGxlIHRlc3QgdG8gY2hlY2sgaXQncyBzdG9yaW5nIHRoZSB0aW1lb3V0CiAgICAgICAgIGggPSBjbGllbnQuSFRUUFNDb25uZWN0aW9uKEhPU1QsIFRpbWVvdXRUZXN0LlBPUlQsIHRpbWVvdXQ9MzApCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC50aW1lb3V0LCAzMCkKIAotICAgIGRlZiBfY2hlY2tfc3ZuX3B5dGhvbl9vcmcoc2VsZiwgcmVzcCk6Ci0gICAgICAgICMgSnVzdCBhIHNpbXBsZSBjaGVjayB0aGF0IGV2ZXJ5dGhpbmcgd2VudCBmaW5lCi0gICAgICAgIHNlcnZlcl9zdHJpbmcgPSByZXNwLmdldGhlYWRlcignc2VydmVyJykKLSAgICAgICAgc2VsZi5hc3NlcnRJbignQXBhY2hlJywgc2VydmVyX3N0cmluZykKLQogICAgIGRlZiB0ZXN0X25ldHdvcmtlZChzZWxmKToKLSAgICAgICAgIyBEZWZhdWx0IHNldHRpbmdzOiBubyBjZXJ0IHZlcmlmaWNhdGlvbiBpcyBkb25lCi0gICAgICAgIHN1cHBvcnQucmVxdWlyZXMoJ25ldHdvcmsnKQotICAgICAgICB3aXRoIHN1cHBvcnQudHJhbnNpZW50X2ludGVybmV0KCdzdm4ucHl0aG9uLm9yZycpOgotICAgICAgICAgICAgaCA9IGNsaWVudC5IVFRQU0Nvbm5lY3Rpb24oJ3N2bi5weXRob24ub3JnJywgNDQzKQotICAgICAgICAgICAgaC5yZXF1ZXN0KCdHRVQnLCAnLycpCi0gICAgICAgICAgICByZXNwID0gaC5nZXRyZXNwb25zZSgpCi0gICAgICAgICAgICBzZWxmLl9jaGVja19zdm5fcHl0aG9uX29yZyhyZXNwKQotCi0gICAgZGVmIHRlc3RfbmV0d29ya2VkX2dvb2RfY2VydChzZWxmKToKLSAgICAgICAgIyBXZSBmZWVkIGEgQ0EgY2VydCB0aGF0IHZhbGlkYXRlcyB0aGUgc2VydmVyJ3MgY2VydAorICAgICAgICAjIERlZmF1bHQgc2V0dGluZ3M6IHJlcXVpcmVzIGEgdmFsaWQgY2VydCBmcm9tIGEgdHJ1c3RlZCBDQQogICAgICAgICBpbXBvcnQgc3NsCiAgICAgICAgIHN1cHBvcnQucmVxdWlyZXMoJ25ldHdvcmsnKQotICAgICAgICB3aXRoIHN1cHBvcnQudHJhbnNpZW50X2ludGVybmV0KCdzdm4ucHl0aG9uLm9yZycpOgotICAgICAgICAgICAgY29udGV4dCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MSkKLSAgICAgICAgICAgIGNvbnRleHQudmVyaWZ5X21vZGUgPSBzc2wuQ0VSVF9SRVFVSVJFRAotICAgICAgICAgICAgY29udGV4dC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoQ0FDRVJUX3N2bl9weXRob25fb3JnKQotICAgICAgICAgICAgaCA9IGNsaWVudC5IVFRQU0Nvbm5lY3Rpb24oJ3N2bi5weXRob24ub3JnJywgNDQzLCBjb250ZXh0PWNvbnRleHQpCisgICAgICAgIHdpdGggc3VwcG9ydC50cmFuc2llbnRfaW50ZXJuZXQoJ3NlbGYtc2lnbmVkLnB5dGhvbnRlc3QubmV0Jyk6CisgICAgICAgICAgICBoID0gY2xpZW50LkhUVFBTQ29ubmVjdGlvbignc2VsZi1zaWduZWQucHl0aG9udGVzdC5uZXQnLCA0NDMpCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNzbC5TU0xFcnJvcikgYXMgZXhjX2luZm86CisgICAgICAgICAgICAgICAgaC5yZXF1ZXN0KCdHRVQnLCAnLycpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4Y19pbmZvLmV4Y2VwdGlvbi5yZWFzb24sICdDRVJUSUZJQ0FURV9WRVJJRllfRkFJTEVEJykKKworICAgIGRlZiB0ZXN0X25ldHdvcmtlZF9ub3ZlcmlmaWNhdGlvbihzZWxmKToKKyAgICAgICAgIyBTd2l0Y2ggb2ZmIGNlcnQgdmVyaWZpY2F0aW9uCisgICAgICAgIGltcG9ydCBzc2wKKyAgICAgICAgc3VwcG9ydC5yZXF1aXJlcygnbmV0d29yaycpCisgICAgICAgIHdpdGggc3VwcG9ydC50cmFuc2llbnRfaW50ZXJuZXQoJ3NlbGYtc2lnbmVkLnB5dGhvbnRlc3QubmV0Jyk6CisgICAgICAgICAgICBjb250ZXh0ID0gc3NsLl9jcmVhdGVfdW52ZXJpZmllZF9jb250ZXh0KCkKKyAgICAgICAgICAgIGggPSBjbGllbnQuSFRUUFNDb25uZWN0aW9uKCdzZWxmLXNpZ25lZC5weXRob250ZXN0Lm5ldCcsIDQ0MywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ9Y29udGV4dCkKICAgICAgICAgICAgIGgucmVxdWVzdCgnR0VUJywgJy8nKQogICAgICAgICAgICAgcmVzcCA9IGguZ2V0cmVzcG9uc2UoKQotICAgICAgICAgICAgc2VsZi5fY2hlY2tfc3ZuX3B5dGhvbl9vcmcocmVzcCkKKyAgICAgICAgICAgIGguY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignbmdpbngnLCByZXNwLmdldGhlYWRlcignc2VydmVyJykpCisKKyAgICBAc3VwcG9ydC5zeXN0ZW1fbXVzdF92YWxpZGF0ZV9jZXJ0CisgICAgZGVmIHRlc3RfbmV0d29ya2VkX3RydXN0ZWRfYnlfZGVmYXVsdF9jZXJ0KHNlbGYpOgorICAgICAgICAjIERlZmF1bHQgc2V0dGluZ3M6IHJlcXVpcmVzIGEgdmFsaWQgY2VydCBmcm9tIGEgdHJ1c3RlZCBDQQorICAgICAgICBzdXBwb3J0LnJlcXVpcmVzKCduZXR3b3JrJykKKyAgICAgICAgd2l0aCBzdXBwb3J0LnRyYW5zaWVudF9pbnRlcm5ldCgnd3d3LnB5dGhvbi5vcmcnKToKKyAgICAgICAgICAgIGggPSBjbGllbnQuSFRUUFNDb25uZWN0aW9uKCd3d3cucHl0aG9uLm9yZycsIDQ0MykKKyAgICAgICAgICAgIGgucmVxdWVzdCgnR0VUJywgJy8nKQorICAgICAgICAgICAgcmVzcCA9IGguZ2V0cmVzcG9uc2UoKQorICAgICAgICAgICAgY29udGVudF90eXBlID0gcmVzcC5nZXRoZWFkZXIoJ2NvbnRlbnQtdHlwZScpCisgICAgICAgICAgICBoLmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3RleHQvaHRtbCcsIGNvbnRlbnRfdHlwZSkKKworICAgIGRlZiB0ZXN0X25ldHdvcmtlZF9nb29kX2NlcnQoc2VsZik6CisgICAgICAgICMgV2UgZmVlZCB0aGUgc2VydmVyJ3MgY2VydCBhcyBhIHZhbGlkYXRpbmcgY2VydAorICAgICAgICBpbXBvcnQgc3NsCisgICAgICAgIHN1cHBvcnQucmVxdWlyZXMoJ25ldHdvcmsnKQorICAgICAgICB3aXRoIHN1cHBvcnQudHJhbnNpZW50X2ludGVybmV0KCdzZWxmLXNpZ25lZC5weXRob250ZXN0Lm5ldCcpOgorICAgICAgICAgICAgY29udGV4dCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MSkKKyAgICAgICAgICAgIGNvbnRleHQudmVyaWZ5X21vZGUgPSBzc2wuQ0VSVF9SRVFVSVJFRAorICAgICAgICAgICAgY29udGV4dC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoQ0VSVF9zZWxmc2lnbmVkX3B5dGhvbnRlc3Rkb3RuZXQpCisgICAgICAgICAgICBoID0gY2xpZW50LkhUVFBTQ29ubmVjdGlvbignc2VsZi1zaWduZWQucHl0aG9udGVzdC5uZXQnLCA0NDMsIGNvbnRleHQ9Y29udGV4dCkKKyAgICAgICAgICAgIGgucmVxdWVzdCgnR0VUJywgJy8nKQorICAgICAgICAgICAgcmVzcCA9IGguZ2V0cmVzcG9uc2UoKQorICAgICAgICAgICAgc2VydmVyX3N0cmluZyA9IHJlc3AuZ2V0aGVhZGVyKCdzZXJ2ZXInKQorICAgICAgICAgICAgaC5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCduZ2lueCcsIHNlcnZlcl9zdHJpbmcpCiAKICAgICBkZWYgdGVzdF9uZXR3b3JrZWRfYmFkX2NlcnQoc2VsZik6CiAgICAgICAgICMgV2UgZmVlZCBhICJDQSIgY2VydCB0aGF0IGlzIHVucmVsYXRlZCB0byB0aGUgc2VydmVyJ3MgY2VydAogICAgICAgICBpbXBvcnQgc3NsCiAgICAgICAgIHN1cHBvcnQucmVxdWlyZXMoJ25ldHdvcmsnKQotICAgICAgICB3aXRoIHN1cHBvcnQudHJhbnNpZW50X2ludGVybmV0KCdzdm4ucHl0aG9uLm9yZycpOgorICAgICAgICB3aXRoIHN1cHBvcnQudHJhbnNpZW50X2ludGVybmV0KCdzZWxmLXNpZ25lZC5weXRob250ZXN0Lm5ldCcpOgogICAgICAgICAgICAgY29udGV4dCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MSkKICAgICAgICAgICAgIGNvbnRleHQudmVyaWZ5X21vZGUgPSBzc2wuQ0VSVF9SRVFVSVJFRAogICAgICAgICAgICAgY29udGV4dC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoQ0VSVF9sb2NhbGhvc3QpCi0gICAgICAgICAgICBoID0gY2xpZW50LkhUVFBTQ29ubmVjdGlvbignc3ZuLnB5dGhvbi5vcmcnLCA0NDMsIGNvbnRleHQ9Y29udGV4dCkKLSAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc3NsLlNTTEVycm9yKToKKyAgICAgICAgICAgIGggPSBjbGllbnQuSFRUUFNDb25uZWN0aW9uKCdzZWxmLXNpZ25lZC5weXRob250ZXN0Lm5ldCcsIDQ0MywgY29udGV4dD1jb250ZXh0KQorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzc2wuU1NMRXJyb3IpIGFzIGV4Y19pbmZvOgogICAgICAgICAgICAgICAgIGgucmVxdWVzdCgnR0VUJywgJy8nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleGNfaW5mby5leGNlcHRpb24ucmVhc29uLCAnQ0VSVElGSUNBVEVfVkVSSUZZX0ZBSUxFRCcpCisKKyAgICBkZWYgdGVzdF9sb2NhbF91bmtub3duX2NlcnQoc2VsZik6CisgICAgICAgICMgVGhlIGN1c3RvbSBjZXJ0IGlzbid0IGtub3duIHRvIHRoZSBkZWZhdWx0IHRydXN0IGJ1bmRsZQorICAgICAgICBpbXBvcnQgc3NsCisgICAgICAgIHNlcnZlciA9IHNlbGYubWFrZV9zZXJ2ZXIoQ0VSVF9sb2NhbGhvc3QpCisgICAgICAgIGggPSBjbGllbnQuSFRUUFNDb25uZWN0aW9uKCdsb2NhbGhvc3QnLCBzZXJ2ZXIucG9ydCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzc2wuU1NMRXJyb3IpIGFzIGV4Y19pbmZvOgorICAgICAgICAgICAgaC5yZXF1ZXN0KCdHRVQnLCAnLycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhjX2luZm8uZXhjZXB0aW9uLnJlYXNvbiwgJ0NFUlRJRklDQVRFX1ZFUklGWV9GQUlMRUQnKQogCiAgICAgZGVmIHRlc3RfbG9jYWxfZ29vZF9ob3N0bmFtZShzZWxmKToKICAgICAgICAgIyBUaGUgKHZhbGlkKSBjZXJ0IHZhbGlkYXRlcyB0aGUgSFRUUCBob3N0bmFtZQpAQCAtNzkzLDcgKzk5OSw2IEBACiAgICAgICAgIGgucmVxdWVzdCgnR0VUJywgJy9ub25leGlzdGVudCcpCiAgICAgICAgIHJlc3AgPSBoLmdldHJlc3BvbnNlKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwLnN0YXR1cywgNDA0KQotICAgICAgICBkZWwgc2VydmVyCiAKICAgICBkZWYgdGVzdF9sb2NhbF9iYWRfaG9zdG5hbWUoc2VsZik6CiAgICAgICAgICMgVGhlICh2YWxpZCkgY2VydCBkb2Vzbid0IHZhbGlkYXRlIHRoZSBIVFRQIGhvc3RuYW1lCkBAIC04MDEsNiArMTAwNiw3IEBACiAgICAgICAgIHNlcnZlciA9IHNlbGYubWFrZV9zZXJ2ZXIoQ0VSVF9mYWtlaG9zdG5hbWUpCiAgICAgICAgIGNvbnRleHQgPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCiAgICAgICAgIGNvbnRleHQudmVyaWZ5X21vZGUgPSBzc2wuQ0VSVF9SRVFVSVJFRAorICAgICAgICBjb250ZXh0LmNoZWNrX2hvc3RuYW1lID0gVHJ1ZQogICAgICAgICBjb250ZXh0LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhDRVJUX2Zha2Vob3N0bmFtZSkKICAgICAgICAgaCA9IGNsaWVudC5IVFRQU0Nvbm5lY3Rpb24oJ2xvY2FsaG9zdCcsIHNlcnZlci5wb3J0LCBjb250ZXh0PWNvbnRleHQpCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc3NsLkNlcnRpZmljYXRlRXJyb3IpOgpAQCAtODExLDEyICsxMDE3LDI0IEBACiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc3NsLkNlcnRpZmljYXRlRXJyb3IpOgogICAgICAgICAgICAgaC5yZXF1ZXN0KCdHRVQnLCAnLycpCiAgICAgICAgICMgV2l0aCBjaGVja19ob3N0bmFtZT1GYWxzZSwgdGhlIG1pc21hdGNoaW5nIGlzIGlnbm9yZWQKKyAgICAgICAgY29udGV4dC5jaGVja19ob3N0bmFtZSA9IEZhbHNlCiAgICAgICAgIGggPSBjbGllbnQuSFRUUFNDb25uZWN0aW9uKCdsb2NhbGhvc3QnLCBzZXJ2ZXIucG9ydCwgY29udGV4dD1jb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja19ob3N0bmFtZT1GYWxzZSkKICAgICAgICAgaC5yZXF1ZXN0KCdHRVQnLCAnL25vbmV4aXN0ZW50JykKICAgICAgICAgcmVzcCA9IGguZ2V0cmVzcG9uc2UoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3Auc3RhdHVzLCA0MDQpCi0gICAgICAgIGRlbCBzZXJ2ZXIKKyAgICAgICAgIyBUaGUgY29udGV4dCdzIGNoZWNrX2hvc3RuYW1lIHNldHRpbmcgaXMgdXNlZCBpZiBvbmUgaXNuJ3QgcGFzc2VkIHRvCisgICAgICAgICMgSFRUUFNDb25uZWN0aW9uLgorICAgICAgICBjb250ZXh0LmNoZWNrX2hvc3RuYW1lID0gRmFsc2UKKyAgICAgICAgaCA9IGNsaWVudC5IVFRQU0Nvbm5lY3Rpb24oJ2xvY2FsaG9zdCcsIHNlcnZlci5wb3J0LCBjb250ZXh0PWNvbnRleHQpCisgICAgICAgIGgucmVxdWVzdCgnR0VUJywgJy9ub25leGlzdGVudCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5nZXRyZXNwb25zZSgpLnN0YXR1cywgNDA0KQorICAgICAgICAjIFBhc3NpbmcgY2hlY2tfaG9zdG5hbWUgdG8gSFRUUFNDb25uZWN0aW9uIHNob3VsZCBvdmVycmlkZSB0aGUKKyAgICAgICAgIyBjb250ZXh0J3Mgc2V0dGluZy4KKyAgICAgICAgaCA9IGNsaWVudC5IVFRQU0Nvbm5lY3Rpb24oJ2xvY2FsaG9zdCcsIHNlcnZlci5wb3J0LCBjb250ZXh0PWNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrX2hvc3RuYW1lPVRydWUpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc3NsLkNlcnRpZmljYXRlRXJyb3IpOgorICAgICAgICAgICAgaC5yZXF1ZXN0KCdHRVQnLCAnLycpCiAKICAgICBAdW5pdHRlc3Quc2tpcElmKG5vdCBoYXNhdHRyKGNsaWVudCwgJ0hUVFBTQ29ubmVjdGlvbicpLAogICAgICAgICAgICAgICAgICAgICAgJ2h0dHAuY2xpZW50LkhUVFBTQ29ubmVjdGlvbiBub3QgYXZhaWxhYmxlJykKQEAgLTk0NiwxMCArMTE2NCw3MSBAQAogICAgICAgICBoZWFkZXIgPSBzZWxmLnJlc3AuZ2V0aGVhZGVyKCdOby1TdWNoLUhlYWRlcicsZGVmYXVsdD00MikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoZWFkZXIsIDQyKQogCitjbGFzcyBUdW5uZWxUZXN0cyhUZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICByZXNwb25zZV90ZXh0ID0gKAorICAgICAgICAgICAgJ0hUVFAvMS4wIDIwMCBPS1xyXG5cclxuJyAjIFJlcGx5IHRvIENPTk5FQ1QKKyAgICAgICAgICAgICdIVFRQLzEuMSAyMDAgT0tcclxuJyAjIFJlcGx5IHRvIEhFQUQKKyAgICAgICAgICAgICdDb250ZW50LUxlbmd0aDogNDJcclxuXHJcbicKKyAgICAgICAgKQorCisgICAgICAgIGRlZiBjcmVhdGVfY29ubmVjdGlvbihhZGRyZXNzLCB0aW1lb3V0PU5vbmUsIHNvdXJjZV9hZGRyZXNzPU5vbmUpOgorICAgICAgICAgICAgcmV0dXJuIEZha2VTb2NrZXQocmVzcG9uc2VfdGV4dCwgaG9zdD1hZGRyZXNzWzBdLCBwb3J0PWFkZHJlc3NbMV0pCisKKyAgICAgICAgc2VsZi5ob3N0ID0gJ3Byb3h5LmNvbScKKyAgICAgICAgc2VsZi5jb25uID0gY2xpZW50LkhUVFBDb25uZWN0aW9uKHNlbGYuaG9zdCkKKyAgICAgICAgc2VsZi5jb25uLl9jcmVhdGVfY29ubmVjdGlvbiA9IGNyZWF0ZV9jb25uZWN0aW9uCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYuY29ubi5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9zZXRfdHVubmVsX2hvc3RfcG9ydF9oZWFkZXJzKHNlbGYpOgorICAgICAgICB0dW5uZWxfaG9zdCA9ICdkZXN0aW5hdGlvbi5jb20nCisgICAgICAgIHR1bm5lbF9wb3J0ID0gODg4OAorICAgICAgICB0dW5uZWxfaGVhZGVycyA9IHsnVXNlci1BZ2VudCc6ICdNb3ppbGxhLzUuMCAoY29tcGF0aWJsZSwgTVNJRSAxMSknfQorICAgICAgICBzZWxmLmNvbm4uc2V0X3R1bm5lbCh0dW5uZWxfaG9zdCwgcG9ydD10dW5uZWxfcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVycz10dW5uZWxfaGVhZGVycykKKyAgICAgICAgc2VsZi5jb25uLnJlcXVlc3QoJ0hFQUQnLCAnLycsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY29ubi5zb2NrLmhvc3QsIHNlbGYuaG9zdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNvbm4uc29jay5wb3J0LCBjbGllbnQuSFRUUF9QT1JUKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY29ubi5fdHVubmVsX2hvc3QsIHR1bm5lbF9ob3N0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY29ubi5fdHVubmVsX3BvcnQsIHR1bm5lbF9wb3J0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY29ubi5fdHVubmVsX2hlYWRlcnMsIHR1bm5lbF9oZWFkZXJzKQorCisgICAgZGVmIHRlc3RfZGlzYWxsb3dfc2V0X3R1bm5lbF9hZnRlcl9jb25uZWN0KHNlbGYpOgorICAgICAgICAjIE9uY2UgY29ubmVjdGVkLCB3ZSBzaG91bGRuJ3QgYmUgYWJsZSB0byB0dW5uZWwgYW55bW9yZQorICAgICAgICBzZWxmLmNvbm4uY29ubmVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgc2VsZi5jb25uLnNldF90dW5uZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICdkZXN0aW5hdGlvbi5jb20nKQorCisgICAgZGVmIHRlc3RfY29ubmVjdF93aXRoX3R1bm5lbChzZWxmKToKKyAgICAgICAgc2VsZi5jb25uLnNldF90dW5uZWwoJ2Rlc3RpbmF0aW9uLmNvbScpCisgICAgICAgIHNlbGYuY29ubi5yZXF1ZXN0KCdIRUFEJywgJy8nLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNvbm4uc29jay5ob3N0LCBzZWxmLmhvc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jb25uLnNvY2sucG9ydCwgY2xpZW50LkhUVFBfUE9SVCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihiJ0NPTk5FQ1QgZGVzdGluYXRpb24uY29tJywgc2VsZi5jb25uLnNvY2suZGF0YSkKKyAgICAgICAgIyBpc3N1ZTIyMDk1CisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oYidIb3N0OiBkZXN0aW5hdGlvbi5jb206Tm9uZScsIHNlbGYuY29ubi5zb2NrLmRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oYidIb3N0OiBkZXN0aW5hdGlvbi5jb20nLCBzZWxmLmNvbm4uc29jay5kYXRhKQorCisgICAgICAgICMgVGhpcyB0ZXN0IHNob3VsZCBiZSByZW1vdmVkIHdoZW4gQ09OTkVDVCBnZXRzIHRoZSBIVFRQLzEuMSBibGVzc2luZworICAgICAgICBzZWxmLmFzc2VydE5vdEluKGInSG9zdDogcHJveHkuY29tJywgc2VsZi5jb25uLnNvY2suZGF0YSkKKworICAgIGRlZiB0ZXN0X2Nvbm5lY3RfcHV0X3JlcXVlc3Qoc2VsZik6CisgICAgICAgIHNlbGYuY29ubi5zZXRfdHVubmVsKCdkZXN0aW5hdGlvbi5jb20nKQorICAgICAgICBzZWxmLmNvbm4ucmVxdWVzdCgnUFVUJywgJy8nLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNvbm4uc29jay5ob3N0LCBzZWxmLmhvc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jb25uLnNvY2sucG9ydCwgY2xpZW50LkhUVFBfUE9SVCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihiJ0NPTk5FQ1QgZGVzdGluYXRpb24uY29tJywgc2VsZi5jb25uLnNvY2suZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihiJ0hvc3Q6IGRlc3RpbmF0aW9uLmNvbScsIHNlbGYuY29ubi5zb2NrLmRhdGEpCisKKworCitAc3VwcG9ydC5yZWFwX3RocmVhZHMKIGRlZiB0ZXN0X21haW4odmVyYm9zZT1Ob25lKToKICAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChIZWFkZXJUZXN0cywgT2ZmbGluZVRlc3QsIEJhc2ljVGVzdCwgVGltZW91dFRlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgSFRUUFNUZXN0LCBSZXF1ZXN0Qm9keVRlc3QsIFNvdXJjZUFkZHJlc3NUZXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgIEhUVFBSZXNwb25zZVRlc3QpCisgICAgICAgICAgICAgICAgICAgICAgICAgSFRUUFJlc3BvbnNlVGVzdCwgVHVubmVsVGVzdHMpCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaHR0cHNlcnZlcnMucHkgYi9MaWIvdGVzdC90ZXN0X2h0dHBzZXJ2ZXJzLnB5CmluZGV4IGJlNWQ4ZGUuLjZlNWYyZGIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaHR0cHNlcnZlcnMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9odHRwc2VydmVycy5weQpAQCAtMTQsNiArMTQsNyBAQAogaW1wb3J0IGJhc2U2NAogaW1wb3J0IHNodXRpbAogaW1wb3J0IHVybGxpYi5wYXJzZQoraW1wb3J0IGh0bWwKIGltcG9ydCBodHRwLmNsaWVudAogaW1wb3J0IHRlbXBmaWxlCiBmcm9tIGlvIGltcG9ydCBCeXRlc0lPCkBAIC05Miw2ICs5MywxMyBAQAogICAgICAgICBkZWYgZG9fS0VZRVJST1Ioc2VsZik6CiAgICAgICAgICAgICBzZWxmLnNlbmRfZXJyb3IoOTk5KQogCisgICAgICAgIGRlZiBkb19OT1RGT1VORChzZWxmKToKKyAgICAgICAgICAgIHNlbGYuc2VuZF9lcnJvcig0MDQpCisKKyAgICAgICAgZGVmIGRvX0VYUExBSU5FUlJPUihzZWxmKToKKyAgICAgICAgICAgIHNlbGYuc2VuZF9lcnJvcig5OTksICJTaG9ydCBNZXNzYWdlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGhpcyBpcyBhIGxvbmcgXG4gZXhwbGFpbmF0aW9uIikKKwogICAgICAgICBkZWYgZG9fQ1VTVE9NKHNlbGYpOgogICAgICAgICAgICAgc2VsZi5zZW5kX3Jlc3BvbnNlKDk5OSkKICAgICAgICAgICAgIHNlbGYuc2VuZF9oZWFkZXIoJ0NvbnRlbnQtVHlwZScsICd0ZXh0L2h0bWwnKQpAQCAtMTE4LDcgKzEyNiw3IEBACiAKICAgICBkZWYgdGVzdF9yZXF1ZXN0X2xpbmVfdHJpbW1pbmcoc2VsZik6CiAgICAgICAgIHNlbGYuY29uLl9odHRwX3Zzbl9zdHIgPSAnSFRUUC8xLjFcbicKLSAgICAgICAgc2VsZi5jb24ucHV0cmVxdWVzdCgnR0VUJywgJy8nKQorICAgICAgICBzZWxmLmNvbi5wdXRyZXF1ZXN0KCdYWVpCT0dVUycsICcvJykKICAgICAgICAgc2VsZi5jb24uZW5kaGVhZGVycygpCiAgICAgICAgIHJlcyA9IHNlbGYuY29uLmdldHJlc3BvbnNlKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMuc3RhdHVzLCA1MDEpCkBAIC0xNDUsOCArMTUzLDkgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMuc3RhdHVzLCA1MDEpCiAKICAgICBkZWYgdGVzdF92ZXJzaW9uX25vbmUoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IGEgdmFsaWQgbWV0aG9kIGlzIHJlamVjdGVkIHdoZW4gbm90IEhUVFAvMS54CiAgICAgICAgIHNlbGYuY29uLl9odHRwX3Zzbl9zdHIgPSAnJwotICAgICAgICBzZWxmLmNvbi5wdXRyZXF1ZXN0KCdQVVQnLCAnLycpCisgICAgICAgIHNlbGYuY29uLnB1dHJlcXVlc3QoJ0NVU1RPTScsICcvJykKICAgICAgICAgc2VsZi5jb24uZW5kaGVhZGVycygpCiAgICAgICAgIHJlcyA9IHNlbGYuY29uLmdldHJlc3BvbnNlKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMuc3RhdHVzLCA0MDApCkBAIC0yMDMsNiArMjEyLDEyIEBACiAgICAgICAgIHJlcyA9IHNlbGYuY29uLmdldHJlc3BvbnNlKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMuc3RhdHVzLCA5OTkpCiAKKyAgICBkZWYgdGVzdF9yZXR1cm5fZXhwbGFpbl9lcnJvcihzZWxmKToKKyAgICAgICAgc2VsZi5jb24ucmVxdWVzdCgnRVhQTEFJTkVSUk9SJywgJy8nKQorICAgICAgICByZXMgPSBzZWxmLmNvbi5nZXRyZXNwb25zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLnN0YXR1cywgOTk5KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaW50KHJlcy5nZXRoZWFkZXIoJ0NvbnRlbnQtTGVuZ3RoJykpKQorCiAgICAgZGVmIHRlc3RfbGF0aW4xX2hlYWRlcihzZWxmKToKICAgICAgICAgc2VsZi5jb24ucmVxdWVzdCgnTEFUSU5PTkVIRUFERVInLCAnLycsIGhlYWRlcnM9ewogICAgICAgICAgICAgJ1gtU3BlY2lhbC1JbmNvbWluZyc6ICAgICAgICfDhHJnZXIgbWl0IFVuaWNvZGUnCkBAIC0yMTEsNiArMjI2LDE0IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLmdldGhlYWRlcignWC1TcGVjaWFsJyksICdEw6RuZ2Vyb3VzIE1pbmQnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcy5yZWFkKCksICfDhHJnZXIgbWl0IFVuaWNvZGUnLmVuY29kZSgndXRmLTgnKSkKIAorICAgIGRlZiB0ZXN0X2Vycm9yX2NvbnRlbnRfbGVuZ3RoKHNlbGYpOgorICAgICAgICAjIElzc3VlICMxNjA4ODogc3RhbmRhcmQgZXJyb3IgcmVzcG9uc2VzIHNob3VsZCBoYXZlIGEgY29udGVudC1sZW5ndGgKKyAgICAgICAgc2VsZi5jb24ucmVxdWVzdCgnTk9URk9VTkQnLCAnLycpCisgICAgICAgIHJlcyA9IHNlbGYuY29uLmdldHJlc3BvbnNlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMuc3RhdHVzLCA0MDQpCisgICAgICAgIGRhdGEgPSByZXMucmVhZCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KHJlcy5nZXRoZWFkZXIoJ0NvbnRlbnQtTGVuZ3RoJykpLCBsZW4oZGF0YSkpCisKIAogY2xhc3MgU2ltcGxlSFRUUFNlcnZlclRlc3RDYXNlKEJhc2VUZXN0Q2FzZSk6CiAgICAgY2xhc3MgcmVxdWVzdF9oYW5kbGVyKE5vTG9nUmVxdWVzdEhhbmRsZXIsIFNpbXBsZUhUVFBSZXF1ZXN0SGFuZGxlcik6CkBAIC0yNDQsNiArMjY3LDMzIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHJlc3BvbnNlLnJlYXNvbikKICAgICAgICAgaWYgZGF0YToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgYm9keSkKKyAgICAgICAgcmV0dXJuIGJvZHkKKworICAgIEBzdXBwb3J0LnJlcXVpcmVzX21hY192ZXIoMTAsIDUpCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3VwcG9ydC5URVNURk5fVU5ERUNPREFCTEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ25lZWQgc3VwcG9ydC5URVNURk5fVU5ERUNPREFCTEUnKQorICAgIGRlZiB0ZXN0X3VuZGVjb2RhYmxlX2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICBlbmMgPSBzeXMuZ2V0ZmlsZXN5c3RlbWVuY29kaW5nKCkKKyAgICAgICAgZmlsZW5hbWUgPSBvcy5mc2RlY29kZShzdXBwb3J0LlRFU1RGTl9VTkRFQ09EQUJMRSkgKyAnLnR4dCcKKyAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihzZWxmLnRlbXBkaXIsIGZpbGVuYW1lKSwgJ3diJykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoc3VwcG9ydC5URVNURk5fVU5ERUNPREFCTEUpCisgICAgICAgIHJlc3BvbnNlID0gc2VsZi5yZXF1ZXN0KHNlbGYudGVtcGRpcl9uYW1lICsgJy8nKQorICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ2Rhcndpbic6CisgICAgICAgICAgICAjIE9uIE1hYyBPUyB0aGUgSEZTKyBmaWxlc3lzdGVtIHJlcGxhY2VzIGJ5dGVzIHRoYXQgYXJlbid0IHZhbGlkCisgICAgICAgICAgICAjIFVURi04IGludG8gYSBwZXJjZW50LWVuY29kZWQgdmFsdWUuCisgICAgICAgICAgICBmb3IgbmFtZSBpbiBvcy5saXN0ZGlyKHNlbGYudGVtcGRpcik6CisgICAgICAgICAgICAgICAgaWYgbmFtZSAhPSAndGVzdCc6ICMgSWdub3JlIGEgZmlsZW5hbWUgY3JlYXRlZCBpbiBzZXRVcCgpLgorICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSA9IG5hbWUKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgYm9keSA9IHNlbGYuY2hlY2tfc3RhdHVzX2FuZF9yZWFzb24ocmVzcG9uc2UsIDIwMCkKKyAgICAgICAgcXVvdGVkbmFtZSA9IHVybGxpYi5wYXJzZS5xdW90ZShmaWxlbmFtZSwgZXJyb3JzPSdzdXJyb2dhdGVwYXNzJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbigoJ2hyZWY9IiVzIicgJSBxdW90ZWRuYW1lKQorICAgICAgICAgICAgICAgICAgICAgIC5lbmNvZGUoZW5jLCAnc3Vycm9nYXRlZXNjYXBlJyksIGJvZHkpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oKCc+JXM8JyAlIGh0bWwuZXNjYXBlKGZpbGVuYW1lKSkKKyAgICAgICAgICAgICAgICAgICAgICAuZW5jb2RlKGVuYywgJ3N1cnJvZ2F0ZWVzY2FwZScpLCBib2R5KQorICAgICAgICByZXNwb25zZSA9IHNlbGYucmVxdWVzdChzZWxmLnRlbXBkaXJfbmFtZSArICcvJyArIHF1b3RlZG5hbWUpCisgICAgICAgIHNlbGYuY2hlY2tfc3RhdHVzX2FuZF9yZWFzb24ocmVzcG9uc2UsIDIwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhPXN1cHBvcnQuVEVTVEZOX1VOREVDT0RBQkxFKQogCiAgICAgZGVmIHRlc3RfZ2V0KHNlbGYpOgogICAgICAgICAjY29uc3RydWN0cyB0aGUgcGF0aCByZWxhdGl2ZSB0byB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhlIEhUVFBTZXJ2ZXIKQEAgLTI1Niw2ICszMDYsMTIgQEAKICAgICAgICAgc2VsZi5jaGVja19zdGF0dXNfYW5kX3JlYXNvbihyZXNwb25zZSwgMjAwKQogICAgICAgICByZXNwb25zZSA9IHNlbGYucmVxdWVzdChzZWxmLnRlbXBkaXJfbmFtZSkKICAgICAgICAgc2VsZi5jaGVja19zdGF0dXNfYW5kX3JlYXNvbihyZXNwb25zZSwgMzAxKQorICAgICAgICByZXNwb25zZSA9IHNlbGYucmVxdWVzdChzZWxmLnRlbXBkaXJfbmFtZSArICcvP2hpPTInKQorICAgICAgICBzZWxmLmNoZWNrX3N0YXR1c19hbmRfcmVhc29uKHJlc3BvbnNlLCAyMDApCisgICAgICAgIHJlc3BvbnNlID0gc2VsZi5yZXF1ZXN0KHNlbGYudGVtcGRpcl9uYW1lICsgJz9oaT0xJykKKyAgICAgICAgc2VsZi5jaGVja19zdGF0dXNfYW5kX3JlYXNvbihyZXNwb25zZSwgMzAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3BvbnNlLmdldGhlYWRlcigiTG9jYXRpb24iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRlbXBkaXJfbmFtZSArICIvP2hpPTEiKQogICAgICAgICByZXNwb25zZSA9IHNlbGYucmVxdWVzdCgnL1RoaXNEb2VzTm90RXhpc3QnKQogICAgICAgICBzZWxmLmNoZWNrX3N0YXR1c19hbmRfcmVhc29uKHJlc3BvbnNlLCA0MDQpCiAgICAgICAgIHJlc3BvbnNlID0gc2VsZi5yZXF1ZXN0KCcvJyArICdUaGlzRG9lc05vdEV4aXN0JyArICcvJykKQEAgLTI4NCw3ICszNDAsNyBAQAogICAgICAgICByZXNwb25zZSA9IHNlbGYucmVxdWVzdCgnLycsIG1ldGhvZD0nRk9PJykKICAgICAgICAgc2VsZi5jaGVja19zdGF0dXNfYW5kX3JlYXNvbihyZXNwb25zZSwgNTAxKQogICAgICAgICAjIHJlcXVlc3RzIG11c3QgYmUgY2FzZSBzZW5zaXRpdmUsc28gdGhpcyBzaG91bGQgZmFpbCB0b28KLSAgICAgICAgcmVzcG9uc2UgPSBzZWxmLnJlcXVlc3QoJy8nLCBtZXRob2Q9J2dldCcpCisgICAgICAgIHJlc3BvbnNlID0gc2VsZi5yZXF1ZXN0KCcvJywgbWV0aG9kPSdjdXN0b20nKQogICAgICAgICBzZWxmLmNoZWNrX3N0YXR1c19hbmRfcmVhc29uKHJlc3BvbnNlLCA1MDEpCiAgICAgICAgIHJlc3BvbnNlID0gc2VsZi5yZXF1ZXN0KCcvJywgbWV0aG9kPSdHRVRzJykKICAgICAgICAgc2VsZi5jaGVja19zdGF0dXNfYW5kX3JlYXNvbihyZXNwb25zZSwgNTAxKQpAQCAtMzEwLDYgKzM2NiwxNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtLmdldGZpcnN0KCJiYWNvbiIpKSkKICIiIgogCitjZ2lfZmlsZTQgPSAiIiJcCisjISVzCitpbXBvcnQgb3MKKworcHJpbnQoIkNvbnRlbnQtdHlwZTogdGV4dC9odG1sIikKK3ByaW50KCkKKworcHJpbnQob3MuZW52aXJvblsiJXMiXSkKKyIiIgorCiAKIEB1bml0dGVzdC5za2lwSWYoaGFzYXR0cihvcywgJ2dldGV1aWQnKSBhbmQgb3MuZ2V0ZXVpZCgpID09IDAsCiAgICAgICAgICJUaGlzIHRlc3QgY2FuJ3QgYmUgcnVuIHJlbGlhYmx5IGFzIHJvb3QgKGlzc3VlICMxMzMwOCkuIikKQEAgLTMzMSw2ICszOTcsNyBAQAogICAgICAgICBzZWxmLmZpbGUxX3BhdGggPSBOb25lCiAgICAgICAgIHNlbGYuZmlsZTJfcGF0aCA9IE5vbmUKICAgICAgICAgc2VsZi5maWxlM19wYXRoID0gTm9uZQorICAgICAgICBzZWxmLmZpbGU0X3BhdGggPSBOb25lCiAKICAgICAgICAgIyBUaGUgc2hlYmFuZyBsaW5lIHNob3VsZCBiZSBwdXJlIEFTQ0lJOiB1c2Ugc3ltbGluayBpZiBwb3NzaWJsZS4KICAgICAgICAgIyBTZWUgaXNzdWUgIzc2NjguCkBAIC0zNjksNiArNDM2LDExIEBACiAgICAgICAgICAgICBmaWxlMy53cml0ZShjZ2lfZmlsZTEgJSBzZWxmLnB5dGhvbmV4ZSkKICAgICAgICAgb3MuY2htb2Qoc2VsZi5maWxlM19wYXRoLCAwbzc3NykKIAorICAgICAgICBzZWxmLmZpbGU0X3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5jZ2lfZGlyLCAnZmlsZTQucHknKQorICAgICAgICB3aXRoIG9wZW4oc2VsZi5maWxlNF9wYXRoLCAndycsIGVuY29kaW5nPSd1dGYtOCcpIGFzIGZpbGU0OgorICAgICAgICAgICAgZmlsZTQud3JpdGUoY2dpX2ZpbGU0ICUgKHNlbGYucHl0aG9uZXhlLCAnUVVFUllfU1RSSU5HJykpCisgICAgICAgIG9zLmNobW9kKHNlbGYuZmlsZTRfcGF0aCwgMG83NzcpCisKICAgICAgICAgb3MuY2hkaXIoc2VsZi5wYXJlbnRfZGlyKQogCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgpAQCAtMzg0LDYgKzQ1Niw4IEBACiAgICAgICAgICAgICAgICAgb3MucmVtb3ZlKHNlbGYuZmlsZTJfcGF0aCkKICAgICAgICAgICAgIGlmIHNlbGYuZmlsZTNfcGF0aDoKICAgICAgICAgICAgICAgICBvcy5yZW1vdmUoc2VsZi5maWxlM19wYXRoKQorICAgICAgICAgICAgaWYgc2VsZi5maWxlNF9wYXRoOgorICAgICAgICAgICAgICAgIG9zLnJlbW92ZShzZWxmLmZpbGU0X3BhdGgpCiAgICAgICAgICAgICBvcy5ybWRpcihzZWxmLmNnaV9jaGlsZF9kaXIpCiAgICAgICAgICAgICBvcy5ybWRpcihzZWxmLmNnaV9kaXIpCiAgICAgICAgICAgICBvcy5ybWRpcihzZWxmLnBhcmVudF9kaXIpCkBAIC00ODUsNiArNTU5LDE5IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKGInSGVsbG8gV29ybGQnICsgc2VsZi5saW5lc2VwLCAndGV4dC9odG1sJywgMjAwKSwKICAgICAgICAgICAgICAgICAocmVzLnJlYWQoKSwgcmVzLmdldGhlYWRlcignQ29udGVudC10eXBlJyksIHJlcy5zdGF0dXMpKQogCisgICAgZGVmIHRlc3RfcXVlcnlfd2l0aF9tdWx0aXBsZV9xdWVzdGlvbl9tYXJrKHNlbGYpOgorICAgICAgICByZXMgPSBzZWxmLnJlcXVlc3QoJy9jZ2ktYmluL2ZpbGU0LnB5P2E9Yj9jPWQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgKGInYT1iP2M9ZCcgKyBzZWxmLmxpbmVzZXAsICd0ZXh0L2h0bWwnLCAyMDApLAorICAgICAgICAgICAgKHJlcy5yZWFkKCksIHJlcy5nZXRoZWFkZXIoJ0NvbnRlbnQtdHlwZScpLCByZXMuc3RhdHVzKSkKKworICAgIGRlZiB0ZXN0X3F1ZXJ5X3dpdGhfY29udGludW91c19zbGFzaGVzKHNlbGYpOgorICAgICAgICByZXMgPSBzZWxmLnJlcXVlc3QoJy9jZ2ktYmluL2ZpbGU0LnB5P2s9YWElMkYlMkZiYiYvL3EvL3AvLz0vL2EvL2IvLycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAoYidrPWFhJTJGJTJGYmImLy9xLy9wLy89Ly9hLy9iLy8nICsgc2VsZi5saW5lc2VwLAorICAgICAgICAgICAgICd0ZXh0L2h0bWwnLCAyMDApLAorICAgICAgICAgICAgKHJlcy5yZWFkKCksIHJlcy5nZXRoZWFkZXIoJ0NvbnRlbnQtdHlwZScpLCByZXMuc3RhdHVzKSkKKwogCiBjbGFzcyBTb2NrZXRsZXNzUmVxdWVzdEhhbmRsZXIoU2ltcGxlSFRUUFJlcXVlc3RIYW5kbGVyKToKICAgICBkZWYgX19pbml0X18oc2VsZik6CkBAIC01NjAsNiArNjQ3LDExIEBACiAgICAgICAgIHNlbGYudmVyaWZ5X2V4cGVjdGVkX2hlYWRlcnMocmVzdWx0WzE6LTFdKQogICAgICAgICBzZWxmLnZlcmlmeV9nZXRfY2FsbGVkKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHRbLTFdLCBiJzxodG1sPjxib2R5PkRhdGE8L2JvZHk+PC9odG1sPlxyXG4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuaGFuZGxlci5yZXF1ZXN0bGluZSwgJ0dFVCAvIEhUVFAvMS4xJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmhhbmRsZXIuY29tbWFuZCwgJ0dFVCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5oYW5kbGVyLnBhdGgsICcvJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmhhbmRsZXIucmVxdWVzdF92ZXJzaW9uLCAnSFRUUC8xLjEnKQorICAgICAgICBzZWxmLmFzc2VydFNlcXVlbmNlRXF1YWwoc2VsZi5oYW5kbGVyLmhlYWRlcnMuaXRlbXMoKSwgKCkpCiAKICAgICBkZWYgdGVzdF9odHRwXzFfMChzZWxmKToKICAgICAgICAgcmVzdWx0ID0gc2VsZi5zZW5kX3R5cGljYWxfcmVxdWVzdChiJ0dFVCAvIEhUVFAvMS4wXHJcblxyXG4nKQpAQCAtNTY3LDYgKzY1OSwxMSBAQAogICAgICAgICBzZWxmLnZlcmlmeV9leHBlY3RlZF9oZWFkZXJzKHJlc3VsdFsxOi0xXSkKICAgICAgICAgc2VsZi52ZXJpZnlfZ2V0X2NhbGxlZCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Wy0xXSwgYic8aHRtbD48Ym9keT5EYXRhPC9ib2R5PjwvaHRtbD5cclxuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmhhbmRsZXIucmVxdWVzdGxpbmUsICdHRVQgLyBIVFRQLzEuMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5oYW5kbGVyLmNvbW1hbmQsICdHRVQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuaGFuZGxlci5wYXRoLCAnLycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5oYW5kbGVyLnJlcXVlc3RfdmVyc2lvbiwgJ0hUVFAvMS4wJykKKyAgICAgICAgc2VsZi5hc3NlcnRTZXF1ZW5jZUVxdWFsKHNlbGYuaGFuZGxlci5oZWFkZXJzLml0ZW1zKCksICgpKQogCiAgICAgZGVmIHRlc3RfaHR0cF8wXzkoc2VsZik6CiAgICAgICAgIHJlc3VsdCA9IHNlbGYuc2VuZF90eXBpY2FsX3JlcXVlc3QoYidHRVQgLyBIVFRQLzAuOVxyXG5cclxuJykKQEAgLTU4MCw2ICs2NzcsMTIgQEAKICAgICAgICAgc2VsZi52ZXJpZnlfZXhwZWN0ZWRfaGVhZGVycyhyZXN1bHRbMTotMV0pCiAgICAgICAgIHNlbGYudmVyaWZ5X2dldF9jYWxsZWQoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdFstMV0sIGInPGh0bWw+PGJvZHk+RGF0YTwvYm9keT48L2h0bWw+XHJcbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5oYW5kbGVyLnJlcXVlc3RsaW5lLCAnR0VUIC8gSFRUUC8xLjAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuaGFuZGxlci5jb21tYW5kLCAnR0VUJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmhhbmRsZXIucGF0aCwgJy8nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuaGFuZGxlci5yZXF1ZXN0X3ZlcnNpb24sICdIVFRQLzEuMCcpCisgICAgICAgIGhlYWRlcnMgPSAoKCJFeHBlY3QiLCAiMTAwLWNvbnRpbnVlIiksKQorICAgICAgICBzZWxmLmFzc2VydFNlcXVlbmNlRXF1YWwoc2VsZi5oYW5kbGVyLmhlYWRlcnMuaXRlbXMoKSwgaGVhZGVycykKIAogICAgIGRlZiB0ZXN0X3dpdGhfY29udGludWVfMV8xKHNlbGYpOgogICAgICAgICByZXN1bHQgPSBzZWxmLnNlbmRfdHlwaWNhbF9yZXF1ZXN0KGInR0VUIC8gSFRUUC8xLjFcclxuRXhwZWN0OiAxMDAtY29udGludWVcclxuXHJcbicpCkBAIC01ODksNiArNjkyLDEyIEBACiAgICAgICAgIHNlbGYudmVyaWZ5X2V4cGVjdGVkX2hlYWRlcnMocmVzdWx0WzI6LTFdKQogICAgICAgICBzZWxmLnZlcmlmeV9nZXRfY2FsbGVkKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHRbLTFdLCBiJzxodG1sPjxib2R5PkRhdGE8L2JvZHk+PC9odG1sPlxyXG4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuaGFuZGxlci5yZXF1ZXN0bGluZSwgJ0dFVCAvIEhUVFAvMS4xJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmhhbmRsZXIuY29tbWFuZCwgJ0dFVCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5oYW5kbGVyLnBhdGgsICcvJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmhhbmRsZXIucmVxdWVzdF92ZXJzaW9uLCAnSFRUUC8xLjEnKQorICAgICAgICBoZWFkZXJzID0gKCgiRXhwZWN0IiwgIjEwMC1jb250aW51ZSIpLCkKKyAgICAgICAgc2VsZi5hc3NlcnRTZXF1ZW5jZUVxdWFsKHNlbGYuaGFuZGxlci5oZWFkZXJzLml0ZW1zKCksIGhlYWRlcnMpCiAKICAgICBkZWYgdGVzdF9oZWFkZXJfYnVmZmVyaW5nX29mX3NlbmRfZXJyb3Ioc2VsZik6CiAKQEAgLTY3NCw2ICs3ODMsNyBAQAogICAgICAgICByZXN1bHQgPSBzZWxmLnNlbmRfdHlwaWNhbF9yZXF1ZXN0KGInR0VUICcgKyBiJ3gnICogNjU1MzcpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0WzBdLCBiJ0hUVFAvMS4xIDQxNCBSZXF1ZXN0LVVSSSBUb28gTG9uZ1xyXG4nKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuaGFuZGxlci5nZXRfY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc2VsZi5oYW5kbGVyLnJlcXVlc3RsaW5lLCBzdHIpCiAKICAgICBkZWYgdGVzdF9oZWFkZXJfbGVuZ3RoKHNlbGYpOgogICAgICAgICAjIElzc3VlICM2NzkxOiBzYW1lIGZvciBoZWFkZXJzCkBAIC02ODEsNiArNzkxLDIyIEBACiAgICAgICAgICAgICBiJ0dFVCAvIEhUVFAvMS4xXHJcblgtRm9vOiBiYXInICsgYidyJyAqIDY1NTM3ICsgYidcclxuXHJcbicpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0WzBdLCBiJ0hUVFAvMS4xIDQwMCBMaW5lIHRvbyBsb25nXHJcbicpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5oYW5kbGVyLmdldF9jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5oYW5kbGVyLnJlcXVlc3RsaW5lLCAnR0VUIC8gSFRUUC8xLjEnKQorCisgICAgZGVmIHRlc3RfY2xvc2VfY29ubmVjdGlvbihzZWxmKToKKyAgICAgICAgIyBoYW5kbGVfb25lX3JlcXVlc3QoKSBzaG91bGQgYmUgcmVwZWF0ZWRseSBjYWxsZWQgdW50aWwKKyAgICAgICAgIyBpdCBzZXRzIGNsb3NlX2Nvbm5lY3Rpb24KKyAgICAgICAgZGVmIGhhbmRsZV9vbmVfcmVxdWVzdCgpOgorICAgICAgICAgICAgc2VsZi5oYW5kbGVyLmNsb3NlX2Nvbm5lY3Rpb24gPSBuZXh0KGNsb3NlX3ZhbHVlcykKKyAgICAgICAgc2VsZi5oYW5kbGVyLmhhbmRsZV9vbmVfcmVxdWVzdCA9IGhhbmRsZV9vbmVfcmVxdWVzdAorCisgICAgICAgIGNsb3NlX3ZhbHVlcyA9IGl0ZXIoKFRydWUsKSkKKyAgICAgICAgc2VsZi5oYW5kbGVyLmhhbmRsZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN0b3BJdGVyYXRpb24sIG5leHQsIGNsb3NlX3ZhbHVlcykKKworICAgICAgICBjbG9zZV92YWx1ZXMgPSBpdGVyKChGYWxzZSwgRmFsc2UsIFRydWUpKQorICAgICAgICBzZWxmLmhhbmRsZXIuaGFuZGxlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3RvcEl0ZXJhdGlvbiwgbmV4dCwgY2xvc2VfdmFsdWVzKQogCiBjbGFzcyBTaW1wbGVIVFRQUmVxdWVzdEhhbmRsZXJUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgIiIiIFRlc3QgdXJsIHBhcnNpbmcgIiIiCkBAIC03MDQsNiArODMwLDE5IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGF0aCwgc2VsZi50cmFuc2xhdGVkKQogCiAKK2NsYXNzIE1pc2NUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfYWxsKHNlbGYpOgorICAgICAgICBleHBlY3RlZCA9IFtdCisgICAgICAgIGJsYWNrbGlzdCA9IHsnZXhlY3V0YWJsZScsICdub2JvZHlfdWlkJywgJ3Rlc3QnfQorICAgICAgICBmb3IgbmFtZSBpbiBkaXIoc2VydmVyKToKKyAgICAgICAgICAgIGlmIG5hbWUuc3RhcnRzd2l0aCgnXycpIG9yIG5hbWUgaW4gYmxhY2tsaXN0OgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBtb2R1bGVfb2JqZWN0ID0gZ2V0YXR0cihzZXJ2ZXIsIG5hbWUpCisgICAgICAgICAgICBpZiBnZXRhdHRyKG1vZHVsZV9vYmplY3QsICdfX21vZHVsZV9fJywgTm9uZSkgPT0gJ2h0dHAuc2VydmVyJzoKKyAgICAgICAgICAgICAgICBleHBlY3RlZC5hcHBlbmQobmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRDb3VudEVxdWFsKHNlcnZlci5fX2FsbF9fLCBleHBlY3RlZCkKKworCiBkZWYgdGVzdF9tYWluKHZlcmJvc2U9Tm9uZSk6CiAgICAgY3dkID0gb3MuZ2V0Y3dkKCkKICAgICB0cnk6CkBAIC03MTMsNiArODUyLDcgQEAKICAgICAgICAgICAgIFNpbXBsZUhUVFBTZXJ2ZXJUZXN0Q2FzZSwKICAgICAgICAgICAgIENHSUhUVFBTZXJ2ZXJUZXN0Q2FzZSwKICAgICAgICAgICAgIFNpbXBsZUhUVFBSZXF1ZXN0SGFuZGxlclRlc3RDYXNlLAorICAgICAgICAgICAgTWlzY1Rlc3RDYXNlLAogICAgICAgICApCiAgICAgZmluYWxseToKICAgICAgICAgb3MuY2hkaXIoY3dkKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pZGxlLnB5IGIvTGliL3Rlc3QvdGVzdF9pZGxlLnB5CmluZGV4IDc3NzBlZTUuLjEzMjY1N2IgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaWRsZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2lkbGUucHkKQEAgLTEsMjMgKzEsMTMgQEAKIGltcG9ydCB1bml0dGVzdAotZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0Ci1mcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgaW1wb3J0X21vZHVsZSwgdXNlX3Jlc291cmNlcworZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IGltcG9ydF9tb2R1bGUsIGltcG9ydF9mcmVzaF9tb2R1bGUKIAogIyBTa2lwIHRlc3QgaWYgX3RocmVhZCBvciBfdGtpbnRlciB3YXNuJ3QgYnVpbHQgb3IgaWRsZWxpYiB3YXMgZGVsZXRlZC4KIGltcG9ydF9tb2R1bGUoJ3RocmVhZGluZycpICAjIGltcG9ydGVkIGJ5IFB5U2hlbGwsIGltcG9ydHMgX3RocmVhZAogdGsgPSBpbXBvcnRfbW9kdWxlKCd0a2ludGVyJykgICMgaW1wb3J0cyBfdGtpbnRlcgogaWRsZXRlc3QgPSBpbXBvcnRfbW9kdWxlKCdpZGxlbGliLmlkbGVfdGVzdCcpCi0KLSMgSWYgYnVpbGRib3QgaW1wcm9wZXJseSBzZXRzIGd1aSByZXNvdXJjZSAoIzE4MzY1LCAjMTg0NDEpLCByZW1vdmUgaXQKLSMgc28gcmVxdWlyZXMoJ2d1aScpIHRlc3RzIGFyZSBza2lwcGVkIHdoaWxlIG5vbi1ndWkgdGVzdHMgc3RpbGwgcnVuLgotIyBJZiB0aGVyZSBpcyBhIHByb2JsZW0gd2l0aCBNYWNzLCBzZWUgIzE4NDQxLCBtc2cgMTkzODA1Ci1pZiB1c2VfcmVzb3VyY2VzIGFuZCAnZ3VpJyBpbiB1c2VfcmVzb3VyY2VzOgotICAgIHRyeToKLSAgICAgICAgcm9vdCA9IHRrLlRrKCkKLSAgICAgICAgcm9vdC5kZXN0cm95KCkKLSAgICAgICAgZGVsIHJvb3QKLSAgICBleGNlcHQgdGsuVGNsRXJyb3I6Ci0gICAgICAgIHdoaWxlICdndWknIGluIHVzZV9yZXNvdXJjZXM6Ci0gICAgICAgICAgICB1c2VfcmVzb3VyY2VzLnJlbW92ZSgnZ3VpJykKKyMgTWFrZSBzdXJlIFRDTF9MSUJSQVJZIGlzIHNldCBwcm9wZXJseSBvbiBXaW5kb3dzLiAgTm90ZSB0aGF0IHRoaXMgd2lsbAorIyBjYXVzZSBhIHdhcm5pbmcgYWJvdXQgdGVzdF9pZGxlIG1vZGlmeWluZyB0aGUgZW52aXJvbm1lbnQKK2ltcG9ydF9mcmVzaF9tb2R1bGUoJ3RraW50ZXIuX2ZpeCcpCiAKICMgV2l0aG91dCB0ZXN0X21haW4gcHJlc2VudCwgcmVncnRlc3QucnVudGVzdF9pbm5lciAobGluZTEyMTkpIGNhbGxzCiAjIHVuaXR0ZXN0LlRlc3RMb2FkZXIoKS5sb2FkVGVzdHNGcm9tTW9kdWxlKHRoaXNfbW9kdWxlKSB3aGljaCBjYWxscwpAQCAtMjUsOCArMTUsNCBAQAogbG9hZF90ZXN0cyA9IGlkbGV0ZXN0LmxvYWRfdGVzdHMKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICAjIFVudGlsIHVuaXR0ZXN0IHN1cHBvcnRzIHJlc291cmNlcywgd2UgZW11bGF0ZSByZWdydGVzdCdzIC11Z3VpCi0gICAgIyBzbyBsb2FkZWQgdGVzdHMgcnVuIHRoZSBzYW1lIGFzIGlmIHRleHR1YWxseSBwcmVzZW50IGhlcmUuCi0gICAgIyBJZiBhbnkgSWRsZSB0ZXN0IGV2ZXIgbmVlZHMgYW5vdGhlciByZXNvdXJjZSwgYWRkIGl0IHRvIHRoZSBsaXN0LgotICAgIHN1cHBvcnQudXNlX3Jlc291cmNlcyA9IFsnZ3VpJ10gICMgdXNlX3Jlc291cmNlcyBpcyBpbml0aWFsbHkgTm9uZQogICAgIHVuaXR0ZXN0Lm1haW4odmVyYm9zaXR5PTIsIGV4aXQ9RmFsc2UpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltYXBsaWIucHkgYi9MaWIvdGVzdC90ZXN0X2ltYXBsaWIucHkKaW5kZXggN2M5YWZkOS4uODM4NDExZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbWFwbGliLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1hcGxpYi5weQpAQCAtMjAsNiArMjAsNyBAQAogICAgIHNzbCA9IE5vbmUKIAogQ0VSVEZJTEUgPSBOb25lCitDQUZJTEUgPSBOb25lCiAKIAogY2xhc3MgVGVzdEltYXBsaWIodW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtNTQsNyArNTUsOSBAQAogICAgICAgICAgICAgICAgICciMTgtTWF5LTIwMzMgMDU6MzM6MjAgKzAyMDAiJ10KIAogICAgIEBydW5fd2l0aF9sb2NhbGUoJ0xDX0FMTCcsICdkZV9ERScsICdmcl9GUicpCi0gICAgQHJ1bl93aXRoX3R6KCdTVEQtMURTVCcpCisgICAgIyBEU1QgcnVsZXMgaW5jbHVkZWQgdG8gd29yayBhcm91bmQgcXVpcmsgd2hlcmUgdGhlIEdudSBDIGxpYnJhcnkgbWF5IG5vdAorICAgICMgb3RoZXJ3aXNlIHJlc3RvcmUgdGhlIHByZXZpb3VzIHRpbWUgem9uZQorICAgIEBydW5fd2l0aF90eignU1RELTFEU1QsTTMuMi4wLE0xMS4xLjAnKQogICAgIGRlZiB0ZXN0X1RpbWUySW50ZXJuYWxkYXRlKHNlbGYpOgogICAgICAgICBleHBlY3RlZCA9ICciMTgtTWF5LTIwMzMgMDU6MzM6MjAgKzAyMDAiJwogCkBAIC0xMjUsNyArMTI4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICMgTmFrZWQgc29ja2V0cyByZXR1cm4gZW1wdHkgc3RyaW5ncy4uCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgICAgICAgICAgICAgbGluZSArPSBwYXJ0Ci0gICAgICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgICMgLi5idXQgU1NMU29ja2V0cyByYWlzZSBleGNlcHRpb25zLgogICAgICAgICAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgICAgICAgICBpZiBsaW5lLmVuZHN3aXRoKGInXHJcbicpOgpAQCAtMzI0LDYgKzMyNywyNSBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXQsICJPSyIpCiAKIAorCisgICAgQHJlYXBfdGhyZWFkcworICAgIGRlZiB0ZXN0X2Fib3J0ZWRfYXV0aGVudGljYXRpb24oc2VsZik6CisKKyAgICAgICAgY2xhc3MgTXlTZXJ2ZXIoU2ltcGxlSU1BUEhhbmRsZXIpOgorCisgICAgICAgICAgICBkZWYgY21kX0FVVEhFTlRJQ0FURShzZWxmLCB0YWcsIGFyZ3MpOgorICAgICAgICAgICAgICAgIHNlbGYuX3NlbmRfdGV4dGxpbmUoJysnKQorICAgICAgICAgICAgICAgIHNlbGYucmVzcG9uc2UgPSB5aWVsZAorCisgICAgICAgICAgICAgICAgaWYgc2VsZi5yZXNwb25zZSA9PSBiJypcclxuJzoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fc2VuZF90YWdnZWQodGFnLCAnTk8nLCAnW0FVVEhFTlRJQ0FUSU9ORkFJTEVEXSBhYm9ydGVkJykKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9zZW5kX3RhZ2dlZCh0YWcsICdPSycsICdNWUFVVEggc3VjY2Vzc2Z1bCcpCisKKyAgICAgICAgd2l0aCBzZWxmLnJlYXBlZF9wYWlyKE15U2VydmVyKSBhcyAoc2VydmVyLCBjbGllbnQpOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhpbWFwbGliLklNQVA0LmVycm9yKToKKyAgICAgICAgICAgICAgICBjb2RlLCBkYXRhID0gY2xpZW50LmF1dGhlbnRpY2F0ZSgnTVlBVVRIJywgbGFtYmRhIHg6IE5vbmUpCisKICAgICBkZWYgdGVzdF9saW5ldG9vbG9uZyhzZWxmKToKICAgICAgICAgY2xhc3MgVG9vTG9uZ0hhbmRsZXIoU2ltcGxlSU1BUEhhbmRsZXIpOgogICAgICAgICAgICAgZGVmIGhhbmRsZShzZWxmKToKQEAgLTM0Nyw2ICszNjksMjUgQEAKICAgICBzZXJ2ZXJfY2xhc3MgPSBTZWN1cmVUQ1BTZXJ2ZXIKICAgICBpbWFwX2NsYXNzID0gSU1BUDRfU1NMCiAKKyAgICBAcmVhcF90aHJlYWRzCisgICAgZGVmIHRlc3Rfc3NsX3ZlcmlmaWVkKHNlbGYpOgorICAgICAgICBzc2xfY29udGV4dCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9TU0x2MjMpCisgICAgICAgIHNzbF9jb250ZXh0LnZlcmlmeV9tb2RlID0gc3NsLkNFUlRfUkVRVUlSRUQKKyAgICAgICAgc3NsX2NvbnRleHQuY2hlY2tfaG9zdG5hbWUgPSBUcnVlCisgICAgICAgIHNzbF9jb250ZXh0LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhDQUZJTEUpCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KHNzbC5DZXJ0aWZpY2F0ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhvc3RuYW1lICcxMjcuMC4wLjEnIGRvZXNuJ3QgbWF0Y2ggJ2xvY2FsaG9zdCciKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5yZWFwZWRfc2VydmVyKFNpbXBsZUlNQVBIYW5kbGVyKSBhcyBzZXJ2ZXI6CisgICAgICAgICAgICAgICAgY2xpZW50ID0gc2VsZi5pbWFwX2NsYXNzKCpzZXJ2ZXIuc2VydmVyX2FkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbF9jb250ZXh0PXNzbF9jb250ZXh0KQorICAgICAgICAgICAgICAgIGNsaWVudC5zaHV0ZG93bigpCisKKyAgICAgICAgd2l0aCBzZWxmLnJlYXBlZF9zZXJ2ZXIoU2ltcGxlSU1BUEhhbmRsZXIpIGFzIHNlcnZlcjoKKyAgICAgICAgICAgIGNsaWVudCA9IHNlbGYuaW1hcF9jbGFzcygibG9jYWxob3N0Iiwgc2VydmVyLnNlcnZlcl9hZGRyZXNzWzFdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbF9jb250ZXh0PXNzbF9jb250ZXh0KQorICAgICAgICAgICAgY2xpZW50LnNodXRkb3duKCkKKwogCiBjbGFzcyBSZW1vdGVJTUFQVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgaG9zdCA9ICdjeXJ1cy5hbmRyZXcuY211LmVkdScKQEAgLTQ1OSwxMSArNTAwLDE1IEBACiAKICAgICBpZiBzdXBwb3J0LmlzX3Jlc291cmNlX2VuYWJsZWQoJ25ldHdvcmsnKToKICAgICAgICAgaWYgc3NsOgotICAgICAgICAgICAgZ2xvYmFsIENFUlRGSUxFCisgICAgICAgICAgICBnbG9iYWwgQ0VSVEZJTEUsIENBRklMRQogICAgICAgICAgICAgQ0VSVEZJTEUgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSBvciBvcy5jdXJkaXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAia2V5Y2VydC5wZW0iKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImtleWNlcnQzLnBlbSIpCiAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoQ0VSVEZJTEUpOgogICAgICAgICAgICAgICAgIHJhaXNlIHN1cHBvcnQuVGVzdEZhaWxlZCgiQ2FuJ3QgcmVhZCBjZXJ0aWZpY2F0ZSBmaWxlcyEiKQorICAgICAgICAgICAgQ0FGSUxFID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykgb3Igb3MuY3VyZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB5Y2FjZXJ0LnBlbSIpCisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoQ0FGSUxFKToKKyAgICAgICAgICAgICAgICByYWlzZSBzdXBwb3J0LlRlc3RGYWlsZWQoIkNhbid0IHJlYWQgQ0EgZmlsZSEiKQogICAgICAgICB0ZXN0cy5leHRlbmQoWwogICAgICAgICAgICAgVGhyZWFkZWROZXR3b3JrZWRUZXN0cywgVGhyZWFkZWROZXR3b3JrZWRUZXN0c1NTTCwKICAgICAgICAgICAgIFJlbW90ZUlNQVBUZXN0LCBSZW1vdGVJTUFQX1NTTFRlc3QsIFJlbW90ZUlNQVBfU1RBUlRUTFNUZXN0LApAQCAtNDczLDUgKzUxOCw0IEBACiAKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICBzdXBwb3J0LnVzZV9yZXNvdXJjZXMgPSBbJ25ldHdvcmsnXQogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXAucHkgYi9MaWIvdGVzdC90ZXN0X2ltcC5weQppbmRleCA3MWMyMjBmLi44MGI5ZWMzIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcC5weQpAQCAtMSwxNCArMSwyOSBAQAotaW1wb3J0IGltcAordHJ5OgorICAgIGltcG9ydCBfdGhyZWFkCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgX3RocmVhZCA9IE5vbmUKIGltcG9ydCBpbXBvcnRsaWIKIGltcG9ydCBvcwogaW1wb3J0IG9zLnBhdGgKIGltcG9ydCBzaHV0aWwKIGltcG9ydCBzeXMKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAotZnJvbSB0ZXN0LnRlc3RfaW1wb3J0bGliIGltcG9ydCB1dGlsCiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCB3YXJuaW5ncword2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignaWdub3JlJywgUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZykKKyAgICBpbXBvcnQgaW1wCiAKKworZGVmIHJlcXVpcmVzX2xvYWRfZHluYW1pYyhtZXRoKToKKyAgICAiIiJEZWNvcmF0b3IgdG8gc2tpcCBhIHRlc3QgaWYgbm90IHJ1bm5pbmcgdW5kZXIgQ1B5dGhvbiBvciBsYWNraW5nCisgICAgaW1wLmxvYWRfZHluYW1pYygpLiIiIgorICAgIG1ldGggPSBzdXBwb3J0LmNweXRob25fb25seShtZXRoKQorICAgIHJldHVybiB1bml0dGVzdC5za2lwSWYobm90IGhhc2F0dHIoaW1wLCAnbG9hZF9keW5hbWljJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW1wLmxvYWRfZHluYW1pYygpIHJlcXVpcmVkJykobWV0aCkKKworCitAdW5pdHRlc3Quc2tpcElmKF90aHJlYWQgaXMgTm9uZSwgJ190aHJlYWQgbW9kdWxlIGlzIHJlcXVpcmVkJykKIGNsYXNzIExvY2tUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICAiIiJWZXJ5IGJhc2ljIHRlc3Qgb2YgaW1wb3J0IGxvY2sgZnVuY3Rpb25zLiIiIgpAQCAtMTUwLDcgKzE2NSw3IEBACiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoZmlsZSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZmlsZW5hbWVbOi0zXS5lbmRzd2l0aCh0ZW1wX21vZF9uYW1lKSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm9bMF0sICcucHknKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mb1sxXSwgJ1UnKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mb1sxXSwgJ3InKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mb1syXSwgaW1wLlBZX1NPVVJDRSkKIAogICAgICAgICAgICAgICAgIG1vZCA9IGltcC5sb2FkX21vZHVsZSh0ZW1wX21vZF9uYW1lLCBmaWxlLCBmaWxlbmFtZSwgaW5mbykKQEAgLTE4Myw2ICsxOTgsNyBAQAogICAgICAgICAgICAgICAgIHN1cHBvcnQudW5saW5rKHRlbXBfbW9kX25hbWUgKyBleHQpCiAgICAgICAgICAgICAgICAgc3VwcG9ydC51bmxpbmsoaW5pdF9maWxlX25hbWUgKyBleHQpCiAgICAgICAgICAgICBzdXBwb3J0LnJtdHJlZSh0ZXN0X3BhY2thZ2VfbmFtZSkKKyAgICAgICAgICAgIHN1cHBvcnQucm10cmVlKCdfX3B5Y2FjaGVfXycpCiAKICAgICBkZWYgdGVzdF9pc3N1ZTkzMTkoc2VsZik6CiAgICAgICAgIHBhdGggPSBvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pCkBAIC0yMDgsOSArMjI0LDcgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMob3JpZ19wYXRoLCBuZXdfb3MucGF0aCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3Qob3JpZ19nZXRlbnYsIG5ld19vcy5nZXRlbnYpCiAKLSAgICBAc3VwcG9ydC5jcHl0aG9uX29ubHkKLSAgICBAdW5pdHRlc3Quc2tpcElmKG5vdCBoYXNhdHRyKGltcCwgJ2xvYWRfZHluYW1pYycpLAotICAgICAgICAgICAgICAgICAgICAgJ2ltcC5sb2FkX2R5bmFtaWMoKSByZXF1aXJlZCcpCisgICAgQHJlcXVpcmVzX2xvYWRfZHluYW1pYwogICAgIGRlZiB0ZXN0X2lzc3VlMTU4MjhfbG9hZF9leHRlbnNpb25zKHNlbGYpOgogICAgICAgICAjIElzc3VlIDE1ODI4IHBpY2tlZCB1cCB0aGF0IHRoZSBhZGFwdGVyIGJldHdlZW4gdGhlIG9sZCBpbXAgQVBJCiAgICAgICAgICMgYW5kIGltcG9ydGxpYiBjb3VsZG4ndCBoYW5kbGUgQyBleHRlbnNpb25zCkBAIC0yMjIsNiArMjM2LDIyIEBACiAgICAgICAgIG1vZCA9IGltcC5sb2FkX21vZHVsZShleGFtcGxlLCAqeCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2QuX19uYW1lX18sIGV4YW1wbGUpCiAKKyAgICBAcmVxdWlyZXNfbG9hZF9keW5hbWljCisgICAgZGVmIHRlc3RfaXNzdWUxNjQyMV9tdWx0aXBsZV9tb2R1bGVzX2luX29uZV9kbGwoc2VsZik6CisgICAgICAgICMgSXNzdWUgMTY0MjE6IGxvYWRpbmcgc2V2ZXJhbCBtb2R1bGVzIGZyb20gdGhlIHNhbWUgY29tcGlsZWQgZmlsZSBmYWlscworICAgICAgICBtID0gJ190ZXN0aW1wb3J0bXVsdGlwbGUnCisgICAgICAgIGZpbGVvYmosIHBhdGhuYW1lLCBkZXNjcmlwdGlvbiA9IGltcC5maW5kX21vZHVsZShtKQorICAgICAgICBmaWxlb2JqLmNsb3NlKCkKKyAgICAgICAgbW9kMCA9IGltcC5sb2FkX2R5bmFtaWMobSwgcGF0aG5hbWUpCisgICAgICAgIG1vZDEgPSBpbXAubG9hZF9keW5hbWljKCdfdGVzdGltcG9ydG11bHRpcGxlX2ZvbycsIHBhdGhuYW1lKQorICAgICAgICBtb2QyID0gaW1wLmxvYWRfZHluYW1pYygnX3Rlc3RpbXBvcnRtdWx0aXBsZV9iYXInLCBwYXRobmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2QwLl9fbmFtZV9fLCBtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZDEuX19uYW1lX18sICdfdGVzdGltcG9ydG11bHRpcGxlX2ZvbycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kMi5fX25hbWVfXywgJ190ZXN0aW1wb3J0bXVsdGlwbGVfYmFyJykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcik6CisgICAgICAgICAgICBpbXAubG9hZF9keW5hbWljKCdub25leGlzdGVudCcsIHBhdGhuYW1lKQorCisgICAgQHJlcXVpcmVzX2xvYWRfZHluYW1pYwogICAgIGRlZiB0ZXN0X2xvYWRfZHluYW1pY19JbXBvcnRFcnJvcl9wYXRoKHNlbGYpOgogICAgICAgICAjIElzc3VlICMxNTU5NTQ5IGFkZGVkIGBuYW1lYCBhbmQgYHBhdGhgIGF0dHJpYnV0ZXMgdG8gSW1wb3J0RXJyb3IKICAgICAgICAgIyBpbiBvcmRlciB0byBwcm92aWRlIGJldHRlciBkZXRhaWwuIElzc3VlICMxMDg1NCBpbXBsZW1lbnRlZCB0aG9zZQpAQCAtMjMzLDE0ICsyNjMsMTIgQEAKICAgICAgICAgc2VsZi5hc3NlcnRJbihwYXRoLCBlcnIuZXhjZXB0aW9uLnBhdGgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmFtZSwgZXJyLmV4Y2VwdGlvbi5uYW1lKQogCi0gICAgQHN1cHBvcnQuY3B5dGhvbl9vbmx5Ci0gICAgQHVuaXR0ZXN0LnNraXBJZihub3QgaGFzYXR0cihpbXAsICdsb2FkX2R5bmFtaWMnKSwKLSAgICAgICAgICAgICAgICAgICAgICdpbXAubG9hZF9keW5hbWljKCkgcmVxdWlyZWQnKQorICAgIEByZXF1aXJlc19sb2FkX2R5bmFtaWMKICAgICBkZWYgdGVzdF9sb2FkX21vZHVsZV9leHRlbnNpb25fZmlsZV9pc19Ob25lKHNlbGYpOgogICAgICAgICAjIFdoZW4gbG9hZGluZyBhbiBleHRlbnNpb24gbW9kdWxlIGFuZCB0aGUgZmlsZSBpcyBOb25lLCBvcGVuIG9uZQogICAgICAgICAjIG9uIHRoZSBiZWhhbGYgb2YgaW1wLmxvYWRfZHluYW1pYygpLgogICAgICAgICAjIElzc3VlICMxNTkwMgotICAgICAgICBuYW1lID0gJ19oZWFwcScKKyAgICAgICAgbmFtZSA9ICdfdGVzdGltcG9ydG11bHRpcGxlJwogICAgICAgICBmb3VuZCA9IGltcC5maW5kX21vZHVsZShuYW1lKQogICAgICAgICBpZiBmb3VuZFswXSBpcyBub3QgTm9uZToKICAgICAgICAgICAgIGZvdW5kWzBdLmNsb3NlKCkKQEAgLTI0OCw2ICsyNzYsMTUgQEAKICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoImZvdW5kIG1vZHVsZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIEMgZXh0ZW5zaW9uIikKICAgICAgICAgaW1wLmxvYWRfbW9kdWxlKG5hbWUsIE5vbmUsICpmb3VuZFsxOl0pCiAKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5kb250X3dyaXRlX2J5dGVjb2RlLAorICAgICAgICAidGVzdCBtZWFuaW5nZnVsIG9ubHkgd2hlbiB3cml0aW5nIGJ5dGVjb2RlIikKKyAgICBkZWYgdGVzdF9idWc3NzMyKHNlbGYpOgorICAgICAgICB3aXRoIHN1cHBvcnQudGVtcF9jd2QoKToKKyAgICAgICAgICAgIHNvdXJjZSA9IHN1cHBvcnQuVEVTVEZOICsgJy5weScKKyAgICAgICAgICAgIG9zLm1rZGlyKHNvdXJjZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoSW1wb3J0RXJyb3IsICdeTm8gbW9kdWxlJywKKyAgICAgICAgICAgICAgICBpbXAuZmluZF9tb2R1bGUsIHN1cHBvcnQuVEVTVEZOLCBbIi4iXSkKKwogICAgIGRlZiB0ZXN0X211bHRpcGxlX2NhbGxzX3RvX2dldF9kYXRhKHNlbGYpOgogICAgICAgICAjIElzc3VlICMxODc1NTogbWFrZSBzdXJlIG11bHRpcGxlIGNhbGxzIHRvIGdldF9kYXRhKCkgY2FuIHN1Y2NlZWQuCiAgICAgICAgIGxvYWRlciA9IGltcC5fTG9hZFNvdXJjZUNvbXBhdGliaWxpdHkoJ2ltcCcsIGltcC5fX2ZpbGVfXywKQEAgLTI5MywyMiArMzMwLDYgQEAKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KEltcG9ydEVycm9yLCAnaHRtbCcpOgogICAgICAgICAgICAgaW1wLnJlbG9hZChwYXJzZXIpCiAKLSAgICBkZWYgdGVzdF9tb2R1bGVfcmVwbGFjZWQoc2VsZik6Ci0gICAgICAgICMgc2VlICMxODY5OAotICAgICAgICBkZWYgY29kZSgpOgotICAgICAgICAgICAgbW9kdWxlID0gdHlwZShzeXMpKCd0b3BfbGV2ZWwnKQotICAgICAgICAgICAgbW9kdWxlLnNwYW0gPSAzCi0gICAgICAgICAgICBzeXMubW9kdWxlc1sndG9wX2xldmVsJ10gPSBtb2R1bGUKLSAgICAgICAgbW9jayA9IHV0aWwubW9ja19tb2R1bGVzKCd0b3BfbGV2ZWwnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlX2NvZGU9eyd0b3BfbGV2ZWwnOiBjb2RlfSkKLSAgICAgICAgd2l0aCBtb2NrOgotICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W21vY2tdKToKLSAgICAgICAgICAgICAgICBtb2R1bGUgPSBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZSgndG9wX2xldmVsJykKLSAgICAgICAgICAgICAgICByZWxvYWRlZCA9IGltcC5yZWxvYWQobW9kdWxlKQotICAgICAgICAgICAgICAgIGFjdHVhbCA9IHN5cy5tb2R1bGVzWyd0b3BfbGV2ZWwnXQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0dWFsLnNwYW0sIDMpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWxvYWRlZC5zcGFtLCAzKQotCiAKIGNsYXNzIFBFUDMxNDdUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgIiIiVGVzdHMgb2YgUEVQIDMxNDcuIiIiCkBAIC00NjEsMjAgKzQ4Miw1IEBACiAgICAgICAgICAgICBvcy5ybWRpcihuYW1lKQogCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICB0ZXN0cyA9IFsKLSAgICAgICAgSW1wb3J0VGVzdHMsCi0gICAgICAgIFBFUDMxNDdUZXN0cywKLSAgICAgICAgUmVsb2FkVGVzdHMsCi0gICAgICAgIE51bGxJbXBvcnRlclRlc3RzLAotICAgICAgICBdCi0gICAgdHJ5OgotICAgICAgICBpbXBvcnQgX3RocmVhZAotICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAgICAgcGFzcwotICAgIGVsc2U6Ci0gICAgICAgIHRlc3RzLmFwcGVuZChMb2NrVGVzdHMpCi0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoKnRlc3RzKQotCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydC5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0LnB5CmluZGV4IGRmMDhlNmEuLmI0ODQyYzUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0LnB5CkBAIC0xLDkgKzEsOCBAQAogIyBXZSBpbXBvcnQgaW1wb3J0bGliICpBU0FQKiBpbiBvcmRlciB0byB0ZXN0ICMxNTM4NgogaW1wb3J0IGltcG9ydGxpYgoraW1wb3J0IGltcG9ydGxpYi51dGlsCiBmcm9tIGltcG9ydGxpYi5fYm9vdHN0cmFwIGltcG9ydCBfZ2V0X3NvdXJjZWZpbGUKIGltcG9ydCBidWlsdGlucwotaW1wb3J0IGltcAotZnJvbSB0ZXN0LnRlc3RfaW1wb3J0bGliLmltcG9ydF8gaW1wb3J0IHV0aWwgYXMgaW1wb3J0bGliX3V0aWwKIGltcG9ydCBtYXJzaGFsCiBpbXBvcnQgb3MKIGltcG9ydCBwbGF0Zm9ybQpAQCAtMjIsNyArMjEsNyBAQAogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0ICgKICAgICBFbnZpcm9ubWVudFZhckd1YXJkLCBURVNURk4sIGNoZWNrX3dhcm5pbmdzLCBmb3JnZXQsIGlzX2p5dGhvbiwKICAgICBtYWtlX2xlZ2FjeV9weWMsIHJtdHJlZSwgcnVuX3VuaXR0ZXN0LCBzd2FwX2F0dHIsIHN3YXBfaXRlbSwgdGVtcF91bWFzaywKLSAgICB1bmxpbmssIHVubG9hZCwgY3JlYXRlX2VtcHR5X2ZpbGUsIGNweXRob25fb25seSkKKyAgICB1bmxpbmssIHVubG9hZCwgY3JlYXRlX2VtcHR5X2ZpbGUsIGNweXRob25fb25seSwgVEVTVEZOX1VORU5DT0RBQkxFKQogZnJvbSB0ZXN0IGltcG9ydCBzY3JpcHRfaGVscGVyCiAKIApAQCAtNzAsOCArNjksNiBAQAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKICAgICAgICAgdW5sb2FkKFRFU1RGTikKIAotICAgIHNldFVwID0gdGVhckRvd24KLQogICAgIGRlZiB0ZXN0X2Nhc2Vfc2Vuc2l0aXZpdHkoc2VsZik6CiAgICAgICAgICMgQnJpZWYgZGlncmVzc2lvbiB0byB0ZXN0IHRoYXQgaW1wb3J0IGlzIGNhc2Utc2Vuc2l0aXZlOiAgaWYgd2UgZ290CiAgICAgICAgICMgdGhpcyBmYXIsIHdlIGtub3cgZm9yIHN1cmUgdGhhdCAicmFuZG9tIiBleGlzdHMuCkBAIC0xMjksMTYgKzEyNiw2IEBACiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBkZWwgc3lzLnBhdGhbMF0KIAotICAgIEBza2lwX2lmX2RvbnRfd3JpdGVfYnl0ZWNvZGUKLSAgICBkZWYgdGVzdF9idWc3NzMyKHNlbGYpOgotICAgICAgICBzb3VyY2UgPSBURVNURk4gKyAnLnB5JwotICAgICAgICBvcy5ta2Rpcihzb3VyY2UpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoSW1wb3J0RXJyb3IsICdeTm8gbW9kdWxlJywKLSAgICAgICAgICAgICAgICBpbXAuZmluZF9tb2R1bGUsIFRFU1RGTiwgWyIuIl0pCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBvcy5ybWRpcihzb3VyY2UpCi0KICAgICBkZWYgdGVzdF9tb2R1bGVfd2l0aF9sYXJnZV9zdGFjayhzZWxmLCBtb2R1bGU9J2xvbmdsaXN0Jyk6CiAgICAgICAgICMgUmVncmVzc2lvbiB0ZXN0IGZvciBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlNTYxODU4LgogICAgICAgICBmaWxlbmFtZSA9IG1vZHVsZSArICcucHknCkBAIC0xNjEsMTYgKzE0OCwyNCBAQAogICAgICAgICBzeXMucGF0aC5hcHBlbmQoJycpCiAgICAgICAgIGltcG9ydGxpYi5pbnZhbGlkYXRlX2NhY2hlcygpCiAKKyAgICAgICAgbmFtZXNwYWNlID0ge30KICAgICAgICAgdHJ5OgogICAgICAgICAgICAgbWFrZV9sZWdhY3lfcHljKGZpbGVuYW1lKQogICAgICAgICAgICAgIyBUaGlzIHVzZWQgdG8gY3Jhc2guCi0gICAgICAgICAgICBleGVjKCdpbXBvcnQgJyArIG1vZHVsZSkKKyAgICAgICAgICAgIGV4ZWMoJ2ltcG9ydCAnICsgbW9kdWxlLCBOb25lLCBuYW1lc3BhY2UpCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAjIENsZWFudXAuCiAgICAgICAgICAgICBkZWwgc3lzLnBhdGhbLTFdCiAgICAgICAgICAgICB1bmxpbmsoZmlsZW5hbWUgKyAnYycpCiAgICAgICAgICAgICB1bmxpbmsoZmlsZW5hbWUgKyAnbycpCiAKKyAgICAgICAgICAgICMgUmVtb3ZlIHJlZmVyZW5jZXMgdG8gdGhlIG1vZHVsZSAodW5sb2FkIHRoZSBtb2R1bGUpCisgICAgICAgICAgICBuYW1lc3BhY2UuY2xlYXIoKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGRlbCBzeXMubW9kdWxlc1ttb2R1bGVdCisgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworCiAgICAgZGVmIHRlc3RfZmFpbGluZ19pbXBvcnRfc3RpY2tzKHNlbGYpOgogICAgICAgICBzb3VyY2UgPSBURVNURk4gKyAiLnB5IgogICAgICAgICB3aXRoIG9wZW4oc291cmNlLCAidyIpIGFzIGY6CkBAIC0xOTUsMTIgKzE5MCwxMiBAQAogICAgICAgICAjIGltcG9ydCB4LnkueiBiaW5kcyB4IGluIHRoZSBjdXJyZW50IG5hbWVzcGFjZQogICAgICAgICBpbXBvcnQgdGVzdCBhcyB4CiAgICAgICAgIGltcG9ydCB0ZXN0LnN1cHBvcnQKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHggaXMgdGVzdCwgeC5fX25hbWVfXykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh4LCB0ZXN0LCB4Ll9fbmFtZV9fKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cih0ZXN0LnN1cHBvcnQsICJfX2ZpbGVfXyIpKQogCiAgICAgICAgICMgaW1wb3J0IHgueS56IGFzIHcgYmluZHMgeiBhcyB3CiAgICAgICAgIGltcG9ydCB0ZXN0LnN1cHBvcnQgYXMgeQotICAgICAgICBzZWxmLmFzc2VydFRydWUoeSBpcyB0ZXN0LnN1cHBvcnQsIHkuX19uYW1lX18pCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoeSwgdGVzdC5zdXBwb3J0LCB5Ll9fbmFtZV9fKQogCiAgICAgZGVmIHRlc3RfZmFpbGluZ19yZWxvYWQoc2VsZik6CiAgICAgICAgICMgQSBmYWlsaW5nIHJlbG9hZCBzaG91bGQgbGVhdmUgdGhlIG1vZHVsZSBvYmplY3QgaW4gc3lzLm1vZHVsZXMuCkBAIC0yMjUsMTAgKzIyMCwxMCBAQAogICAgICAgICAgICAgd2l0aCBvcGVuKHNvdXJjZSwgInciKSBhcyBmOgogICAgICAgICAgICAgICAgIGYud3JpdGUoImEgPSAxMFxuYj0yMC8vMFxuIikKIAotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IsIGltcC5yZWxvYWQsIG1vZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBpbXBvcnRsaWIucmVsb2FkLCBtb2QpCiAgICAgICAgICAgICAjIEJ1dCB3ZSBzdGlsbCBleHBlY3QgdGhlIG1vZHVsZSB0byBiZSBpbiBzeXMubW9kdWxlcy4KICAgICAgICAgICAgIG1vZCA9IHN5cy5tb2R1bGVzLmdldChURVNURk4pCi0gICAgICAgICAgICBzZWxmLmFzc2VydElzTm90KG1vZCwgTm9uZSwgImV4cGVjdGVkIG1vZHVsZSB0byBiZSBpbiBzeXMubW9kdWxlcyIpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShtb2QsICJleHBlY3RlZCBtb2R1bGUgdG8gYmUgaW4gc3lzLm1vZHVsZXMiKQogCiAgICAgICAgICAgICAjIFdlIHNob3VsZCBoYXZlIHJlcGxhY2VkIGEgdy8gMTAsIGJ1dCB0aGUgb2xkIGIgdmFsdWUgc2hvdWxkCiAgICAgICAgICAgICAjIHN0aWNrLgpAQCAtMjgwLDcgKzI3NSw3IEBACiAgICAgICAgICAgICBpbXBvcnQgc3lzCiAgICAgICAgICAgICBjbGFzcyBDOgogICAgICAgICAgICAgICAgZGVmIF9fZGVsX18oc2VsZik6Ci0gICAgICAgICAgICAgICAgICBpbXBvcnQgaW1wCisgICAgICAgICAgICAgICAgICBpbXBvcnQgaW1wb3J0bGliCiAgICAgICAgICAgICBzeXMuYXJndi5pbnNlcnQoMCwgQygpKQogICAgICAgICAgICAgIiIiKSkKICAgICAgICAgc2NyaXB0X2hlbHBlci5hc3NlcnRfcHl0aG9uX29rKHRlc3RmbikKQEAgLTI5MSw3ICsyODYsNyBAQAogICAgICAgICBzeXMucGF0aC5pbnNlcnQoMCwgb3MuY3VyZGlyKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzb3VyY2UgPSBURVNURk4gKyAiLnB5IgotICAgICAgICAgICAgY29tcGlsZWQgPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2Uoc291cmNlKQorICAgICAgICAgICAgY29tcGlsZWQgPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShzb3VyY2UpCiAgICAgICAgICAgICB3aXRoIG9wZW4oc291cmNlLCAndycpIGFzIGY6CiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgdHJ5OgpAQCAtMzIyLDYgKzMxNywxNCBAQAogICAgICAgICBzdGRvdXQsIHN0ZGVyciA9IHBvcGVuLmNvbW11bmljYXRlKCkKICAgICAgICAgc2VsZi5hc3NlcnRJbihiIkltcG9ydEVycm9yIiwgc3Rkb3V0KQogCisgICAgZGVmIHRlc3RfZnJvbV9pbXBvcnRfbWVzc2FnZV9mb3Jfbm9uZXhpc3RlbnRfbW9kdWxlKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoSW1wb3J0RXJyb3IsICJeTm8gbW9kdWxlIG5hbWVkICdib2d1cyciKToKKyAgICAgICAgICAgIGZyb20gYm9ndXMgaW1wb3J0IGZvbworCisgICAgZGVmIHRlc3RfZnJvbV9pbXBvcnRfbWVzc2FnZV9mb3JfZXhpc3RpbmdfbW9kdWxlKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoSW1wb3J0RXJyb3IsICJeY2Fubm90IGltcG9ydCBuYW1lICdib2d1cyciKToKKyAgICAgICAgICAgIGZyb20gcmUgaW1wb3J0IGJvZ3VzCisKIAogQHNraXBfaWZfZG9udF93cml0ZV9ieXRlY29kZQogY2xhc3MgRmlsZVBlcm1pc3Npb25UZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC0zMzIsNyArMzM1LDcgQEAKICAgICBkZWYgdGVzdF9jcmVhdGlvbl9tb2RlKHNlbGYpOgogICAgICAgICBtYXNrID0gMG8wMjIKICAgICAgICAgd2l0aCB0ZW1wX3VtYXNrKG1hc2spLCBfcmVhZHlfdG9faW1wb3J0KCkgYXMgKG5hbWUsIHBhdGgpOgotICAgICAgICAgICAgY2FjaGVkX3BhdGggPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2UocGF0aCkKKyAgICAgICAgICAgIGNhY2hlZF9wYXRoID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UocGF0aCkKICAgICAgICAgICAgIG1vZHVsZSA9IF9faW1wb3J0X18obmFtZSkKICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhjYWNoZWRfcGF0aCk6CiAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJfX2ltcG9ydF9fIGRpZCBub3QgcmVzdWx0IGluIGNyZWF0aW9uIG9mICIKQEAgLTM1MCw3ICszNTMsNyBAQAogICAgICAgICAjIHBlcm1pc3Npb25zIG9mIC5weWMgc2hvdWxkIG1hdGNoIHRob3NlIG9mIC5weSwgcmVnYXJkbGVzcyBvZiBtYXNrCiAgICAgICAgIG1vZGUgPSAwbzYwMAogICAgICAgICB3aXRoIHRlbXBfdW1hc2soMG8wMjIpLCBfcmVhZHlfdG9faW1wb3J0KCkgYXMgKG5hbWUsIHBhdGgpOgotICAgICAgICAgICAgY2FjaGVkX3BhdGggPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2UocGF0aCkKKyAgICAgICAgICAgIGNhY2hlZF9wYXRoID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UocGF0aCkKICAgICAgICAgICAgIG9zLmNobW9kKHBhdGgsIG1vZGUpCiAgICAgICAgICAgICBfX2ltcG9ydF9fKG5hbWUpCiAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoY2FjaGVkX3BhdGgpOgpAQCAtMzY1LDcgKzM2OCw3IEBACiAgICAgZGVmIHRlc3RfY2FjaGVkX3JlYWRvbmx5KHNlbGYpOgogICAgICAgICBtb2RlID0gMG80MDAKICAgICAgICAgd2l0aCB0ZW1wX3VtYXNrKDBvMDIyKSwgX3JlYWR5X3RvX2ltcG9ydCgpIGFzIChuYW1lLCBwYXRoKToKLSAgICAgICAgICAgIGNhY2hlZF9wYXRoID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKHBhdGgpCisgICAgICAgICAgICBjYWNoZWRfcGF0aCA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHBhdGgpCiAgICAgICAgICAgICBvcy5jaG1vZChwYXRoLCBtb2RlKQogICAgICAgICAgICAgX19pbXBvcnRfXyhuYW1lKQogICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGNhY2hlZF9wYXRoKToKQEAgLTQwNSw3ICs0MDgsNyBAQAogICAgICAgICAgICAgICAgIGJ5dGVjb2RlX29ubHkgPSBwYXRoICsgImMiCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIGJ5dGVjb2RlX29ubHkgPSBwYXRoICsgIm8iCi0gICAgICAgICAgICBvcy5yZW5hbWUoaW1wLmNhY2hlX2Zyb21fc291cmNlKHBhdGgpLCBieXRlY29kZV9vbmx5KQorICAgICAgICAgICAgb3MucmVuYW1lKGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHBhdGgpLCBieXRlY29kZV9vbmx5KQogICAgICAgICAgICAgbSA9IF9faW1wb3J0X18obmFtZSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS54LCAncmV3cml0dGVuJykKIApAQCAtNDI3LDcgKzQzMCw3IEBACiAiIiIKICAgICBkaXJfbmFtZSA9IG9zLnBhdGguYWJzcGF0aChURVNURk4pCiAgICAgZmlsZV9uYW1lID0gb3MucGF0aC5qb2luKGRpcl9uYW1lLCBtb2R1bGVfbmFtZSkgKyBvcy5leHRzZXAgKyAicHkiCi0gICAgY29tcGlsZWRfbmFtZSA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShmaWxlX25hbWUpCisgICAgY29tcGlsZWRfbmFtZSA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKGZpbGVfbmFtZSkKIAogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgc2VsZi5zeXNfcGF0aCA9IHN5cy5wYXRoWzpdCkBAIC00ODgsNyArNDkxLDcgQEAKICAgICAgICAgICAgIGhlYWRlciA9IGYucmVhZCgxMikKICAgICAgICAgICAgIGNvZGUgPSBtYXJzaGFsLmxvYWQoZikKICAgICAgICAgY29uc3RhbnRzID0gbGlzdChjb2RlLmNvX2NvbnN0cykKLSAgICAgICAgZm9yZWlnbl9jb2RlID0gdGVzdF9tYWluLl9fY29kZV9fCisgICAgICAgIGZvcmVpZ25fY29kZSA9IGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlLl9fY29kZV9fCiAgICAgICAgIHBvcyA9IGNvbnN0YW50cy5pbmRleCgxKQogICAgICAgICBjb25zdGFudHNbcG9zXSA9IGZvcmVpZ25fY29kZQogICAgICAgICBjb2RlID0gdHlwZShjb2RlKShjb2RlLmNvX2FyZ2NvdW50LCBjb2RlLmNvX2t3b25seWFyZ2NvdW50LApAQCAtNjMwLDcgKzYzMyw3IEBACiBjbGFzcyBQeWNhY2hlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgICMgVGVzdCB0aGUgdmFyaW91cyBQRVAgMzE0NyByZWxhdGVkIGJlaGF2aW9ycy4KIAotICAgIHRhZyA9IGltcC5nZXRfdGFnKCkKKyAgICB0YWcgPSBzeXMuaW1wbGVtZW50YXRpb24uY2FjaGVfdGFnCiAKICAgICBkZWYgX2NsZWFuKHNlbGYpOgogICAgICAgICBmb3JnZXQoVEVTVEZOKQpAQCAtNjc4LDEwICs2ODEsMTEgQEAKICAgICAgICAgIyBXaXRoIFBFUCAzMTQ3IGNhY2hlIGxheW91dCwgcmVtb3ZpbmcgdGhlIHNvdXJjZSBidXQgbGVhdmluZyB0aGUgcHljCiAgICAgICAgICMgZmlsZSBkb2VzIG5vdCBzYXRpc2Z5IHRoZSBpbXBvcnQuCiAgICAgICAgIF9faW1wb3J0X18oVEVTVEZOKQotICAgICAgICBweWNfZmlsZSA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShzZWxmLnNvdXJjZSkKKyAgICAgICAgcHljX2ZpbGUgPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShzZWxmLnNvdXJjZSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHB5Y19maWxlKSkKICAgICAgICAgb3MucmVtb3ZlKHNlbGYuc291cmNlKQogICAgICAgICBmb3JnZXQoVEVTVEZOKQorICAgICAgICBpbXBvcnRsaWIuaW52YWxpZGF0ZV9jYWNoZXMoKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvciwgX19pbXBvcnRfXywgVEVTVEZOKQogCiAgICAgQHNraXBfaWZfZG9udF93cml0ZV9ieXRlY29kZQpAQCAtNzAzLDcgKzcwNyw3IEBACiAgICAgZGVmIHRlc3RfX19jYWNoZWRfXyhzZWxmKToKICAgICAgICAgIyBNb2R1bGVzIG5vdyBhbHNvIGhhdmUgYW4gX19jYWNoZWRfXyB0aGF0IHBvaW50cyB0byB0aGUgcHljIGZpbGUuCiAgICAgICAgIG0gPSBfX2ltcG9ydF9fKFRFU1RGTikKLSAgICAgICAgcHljX2ZpbGUgPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2UoVEVTVEZOICsgJy5weScpCisgICAgICAgIHB5Y19maWxlID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoVEVTVEZOICsgJy5weScpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5fX2NhY2hlZF9fLCBvcy5wYXRoLmpvaW4ob3MuY3VyZGlyLCBweWNfZmlsZSkpCiAKICAgICBAc2tpcF9pZl9kb250X3dyaXRlX2J5dGVjb2RlCkBAIC03MzgsMTAgKzc0MiwxMCBAQAogICAgICAgICAgICAgcGFzcwogICAgICAgICBpbXBvcnRsaWIuaW52YWxpZGF0ZV9jYWNoZXMoKQogICAgICAgICBtID0gX19pbXBvcnRfXygncGVwMzE0Ny5mb28nKQotICAgICAgICBpbml0X3B5YyA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZSgKKyAgICAgICAgaW5pdF9weWMgPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZSgKICAgICAgICAgICAgIG9zLnBhdGguam9pbigncGVwMzE0NycsICdfX2luaXRfXy5weScpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uX19jYWNoZWRfXywgb3MucGF0aC5qb2luKG9zLmN1cmRpciwgaW5pdF9weWMpKQotICAgICAgICBmb29fcHljID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKG9zLnBhdGguam9pbigncGVwMzE0NycsICdmb28ucHknKSkKKyAgICAgICAgZm9vX3B5YyA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKG9zLnBhdGguam9pbigncGVwMzE0NycsICdmb28ucHknKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzeXMubW9kdWxlc1sncGVwMzE0Ny5mb28nXS5fX2NhY2hlZF9fLAogICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihvcy5jdXJkaXIsIGZvb19weWMpKQogCkBAIC03NjUsMTAgKzc2OSwxMCBAQAogICAgICAgICB1bmxvYWQoJ3BlcDMxNDcnKQogICAgICAgICBpbXBvcnRsaWIuaW52YWxpZGF0ZV9jYWNoZXMoKQogICAgICAgICBtID0gX19pbXBvcnRfXygncGVwMzE0Ny5mb28nKQotICAgICAgICBpbml0X3B5YyA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZSgKKyAgICAgICAgaW5pdF9weWMgPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZSgKICAgICAgICAgICAgIG9zLnBhdGguam9pbigncGVwMzE0NycsICdfX2luaXRfXy5weScpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uX19jYWNoZWRfXywgb3MucGF0aC5qb2luKG9zLmN1cmRpciwgaW5pdF9weWMpKQotICAgICAgICBmb29fcHljID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKG9zLnBhdGguam9pbigncGVwMzE0NycsICdmb28ucHknKSkKKyAgICAgICAgZm9vX3B5YyA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKG9zLnBhdGguam9pbigncGVwMzE0NycsICdmb28ucHknKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzeXMubW9kdWxlc1sncGVwMzE0Ny5mb28nXS5fX2NhY2hlZF9fLAogICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihvcy5jdXJkaXIsIGZvb19weWMpKQogCkBAIC04NTIsNyArODU2LDYgQEAKICAgICAgICAgZnJvbSBpbXBvcnRsaWIgaW1wb3J0IG1hY2hpbmVyeQogICAgICAgICBtb2QgPSBzeXMubW9kdWxlc1snX2Zyb3plbl9pbXBvcnRsaWInXQogICAgICAgICBzZWxmLmFzc2VydElzKG1hY2hpbmVyeS5GaWxlRmluZGVyLCBtb2QuRmlsZUZpbmRlcikKLSAgICAgICAgc2VsZi5hc3NlcnRJcyhpbXAubmV3X21vZHVsZSwgbW9kLm5ld19tb2R1bGUpCiAKIAogQGNweXRob25fb25seQpAQCAtMTAzMywxMSArMTAzNiwxNCBAQAogICAgICAgICAjIGF3YXkgZnJvbSB0aGUgdHJhY2ViYWNrLgogICAgICAgICBzZWxmLmNyZWF0ZV9tb2R1bGUoImZvbyIsICIiKQogICAgICAgICBpbXBvcnRsaWIgPSBzeXMubW9kdWxlc1snX2Zyb3plbl9pbXBvcnRsaWInXQotICAgICAgICBvbGRfbG9hZF9tb2R1bGUgPSBpbXBvcnRsaWIuU291cmNlTG9hZGVyLmxvYWRfbW9kdWxlCisgICAgICAgIGlmICdsb2FkX21vZHVsZScgaW4gdmFycyhpbXBvcnRsaWIuU291cmNlTG9hZGVyKToKKyAgICAgICAgICAgIG9sZF9leGVjX21vZHVsZSA9IGltcG9ydGxpYi5Tb3VyY2VMb2FkZXIuZXhlY19tb2R1bGUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG9sZF9leGVjX21vZHVsZSA9IE5vbmUKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgZGVmIGxvYWRfbW9kdWxlKCphcmdzKToKKyAgICAgICAgICAgIGRlZiBleGVjX21vZHVsZSgqYXJncyk6CiAgICAgICAgICAgICAgICAgMS8wCi0gICAgICAgICAgICBpbXBvcnRsaWIuU291cmNlTG9hZGVyLmxvYWRfbW9kdWxlID0gbG9hZF9tb2R1bGUKKyAgICAgICAgICAgIGltcG9ydGxpYi5Tb3VyY2VMb2FkZXIuZXhlY19tb2R1bGUgPSBleGVjX21vZHVsZQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGltcG9ydCBmb28KICAgICAgICAgICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvciBhcyBlOgpAQCAtMTA0NiwxOSArMTA1MiwyMiBAQAogICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiWmVyb0RpdmlzaW9uRXJyb3Igc2hvdWxkIGhhdmUgYmVlbiByYWlzZWQiKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRfdHJhY2ViYWNrKHRiLCBbX19maWxlX18sICc8ZnJvemVuIGltcG9ydGxpYicsIF9fZmlsZV9fXSkKICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGltcG9ydGxpYi5Tb3VyY2VMb2FkZXIubG9hZF9tb2R1bGUgPSBvbGRfbG9hZF9tb2R1bGUKKyAgICAgICAgICAgIGlmIG9sZF9leGVjX21vZHVsZSBpcyBOb25lOgorICAgICAgICAgICAgICAgIGRlbCBpbXBvcnRsaWIuU291cmNlTG9hZGVyLmV4ZWNfbW9kdWxlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGltcG9ydGxpYi5Tb3VyY2VMb2FkZXIuZXhlY19tb2R1bGUgPSBvbGRfZXhlY19tb2R1bGUKIAotCi1kZWYgdGVzdF9tYWluKHZlcmJvc2U9Tm9uZSk6Ci0gICAgcnVuX3VuaXR0ZXN0KEltcG9ydFRlc3RzLCBQeWNhY2hlVGVzdHMsIEZpbGVQZXJtaXNzaW9uVGVzdHMsCi0gICAgICAgICAgICAgICAgIFB5Y1Jld3JpdGluZ1Rlc3RzLCBQYXRoc1Rlc3RzLCBSZWxhdGl2ZUltcG9ydFRlc3RzLAotICAgICAgICAgICAgICAgICBPdmVycmlkaW5nSW1wb3J0QnVpbHRpblRlc3RzLAotICAgICAgICAgICAgICAgICBJbXBvcnRsaWJCb290c3RyYXBUZXN0cywgR2V0U291cmNlZmlsZVRlc3RzLAotICAgICAgICAgICAgICAgICBUZXN0U3ltYm9saWNhbGx5TGlua2VkUGFja2FnZSwKLSAgICAgICAgICAgICAgICAgSW1wb3J0VHJhY2ViYWNrVGVzdHMpCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoVEVTVEZOX1VORU5DT0RBQkxFLCAnbmVlZCBURVNURk5fVU5FTkNPREFCTEUnKQorICAgIGRlZiB0ZXN0X3VuZW5jb2RhYmxlX2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICAjIElzc3VlICMxMTYxOTogVGhlIFB5dGhvbiBwYXJzZXIgYW5kIHRoZSBpbXBvcnQgbWFjaGluZXJ5IG11c3Qgbm90CisgICAgICAgICMgZW5jb2RlIGZpbGVuYW1lcywgZXNwZWNpYWxseSBvbiBXaW5kb3dzCisgICAgICAgIHB5bmFtZSA9IHNjcmlwdF9oZWxwZXIubWFrZV9zY3JpcHQoJycsIFRFU1RGTl9VTkVOQ09EQUJMRSwgJ3Bhc3MnKQorICAgICAgICBzZWxmLmFkZENsZWFudXAodW5saW5rLCBweW5hbWUpCisgICAgICAgIG5hbWUgPSBweW5hbWVbOi0zXQorICAgICAgICBzY3JpcHRfaGVscGVyLmFzc2VydF9weXRob25fb2soIi1jIiwgIm1vZCA9IF9faW1wb3J0X18oJWEpIiAlIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2lzb2xhdGVkPUZhbHNlKQogCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgIyBUZXN0IG5lZWRzIHRvIGJlIGEgcGFja2FnZSwgc28gd2UgY2FuIGRvIHJlbGF0aXZlIGltcG9ydHMuCi0gICAgZnJvbSB0ZXN0LnRlc3RfaW1wb3J0IGltcG9ydCB0ZXN0X21haW4KLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRob29rcy5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0aG9va3MucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhMjJkMWEuLjAwMDAwMDAKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRob29rcy5weQorKysgL2Rldi9udWxsCkBAIC0xLDI1MCArMCwwIEBACi1pbXBvcnQgc3lzCi1pbXBvcnQgaW1wCi1pbXBvcnQgb3MKLWltcG9ydCB1bml0dGVzdAotZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0Ci0KLQotdGVzdF9zcmMgPSAiIiJcCi1kZWYgZ2V0X25hbWUoKToKLSAgICByZXR1cm4gX19uYW1lX18KLWRlZiBnZXRfZmlsZSgpOgotICAgIHJldHVybiBfX2ZpbGVfXwotIiIiCi0KLWFic2ltcCA9ICJpbXBvcnQgc3ViXG4iCi1yZWxpbXAgPSAiZnJvbSAuIGltcG9ydCBzdWJcbiIKLWRlZXByZWxpbXAgPSAiZnJvbSAuLi4uIGltcG9ydCBzdWJcbiIKLWZ1dGltcCA9ICJmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydFxuIgotCi1yZWxvYWRfc3JjID0gdGVzdF9zcmMrIiIiXAotcmVsb2FkZWQgPSBUcnVlCi0iIiIKLQotdGVzdF9jbyA9IGNvbXBpbGUodGVzdF9zcmMsICI8Pz8/PiIsICJleGVjIikKLXJlbG9hZF9jbyA9IGNvbXBpbGUocmVsb2FkX3NyYywgIjw/Pz8+IiwgImV4ZWMiKQotCi10ZXN0Ml9vbGRhYnNfY28gPSBjb21waWxlKGFic2ltcCArIHRlc3Rfc3JjLCAiPD8/Pz4iLCAiZXhlYyIpCi10ZXN0Ml9uZXdhYnNfY28gPSBjb21waWxlKGZ1dGltcCArIGFic2ltcCArIHRlc3Rfc3JjLCAiPD8/Pz4iLCAiZXhlYyIpCi10ZXN0Ml9uZXdyZWxfY28gPSBjb21waWxlKHJlbGltcCArIHRlc3Rfc3JjLCAiPD8/Pz4iLCAiZXhlYyIpCi10ZXN0Ml9kZWVwcmVsX2NvID0gY29tcGlsZShkZWVwcmVsaW1wICsgdGVzdF9zcmMsICI8Pz8/PiIsICJleGVjIikKLXRlc3QyX2Z1dHJlbF9jbyA9IGNvbXBpbGUoZnV0aW1wICsgcmVsaW1wICsgdGVzdF9zcmMsICI8Pz8/PiIsICJleGVjIikKLQotdGVzdF9wYXRoID0gIiEhIV90ZXN0XyEhISIKLQotCi1jbGFzcyBUZXN0SW1wb3J0ZXI6Ci0KLSAgICBtb2R1bGVzID0gewotICAgICAgICAiaG9va3Rlc3Rtb2R1bGUiOiAoRmFsc2UsIHRlc3RfY28pLAotICAgICAgICAiaG9va3Rlc3RwYWNrYWdlIjogKFRydWUsIHRlc3RfY28pLAotICAgICAgICAiaG9va3Rlc3RwYWNrYWdlLnN1YiI6IChUcnVlLCB0ZXN0X2NvKSwKLSAgICAgICAgImhvb2t0ZXN0cGFja2FnZS5zdWIuc3ViYmVyIjogKFRydWUsIHRlc3RfY28pLAotICAgICAgICAiaG9va3Rlc3RwYWNrYWdlLm9sZGFicyI6IChGYWxzZSwgdGVzdDJfb2xkYWJzX2NvKSwKLSAgICAgICAgImhvb2t0ZXN0cGFja2FnZS5uZXdhYnMiOiAoRmFsc2UsIHRlc3QyX25ld2Fic19jbyksCi0gICAgICAgICJob29rdGVzdHBhY2thZ2UubmV3cmVsIjogKEZhbHNlLCB0ZXN0Ml9uZXdyZWxfY28pLAotICAgICAgICAiaG9va3Rlc3RwYWNrYWdlLnN1Yi5zdWJiZXIuc3ViZXN0IjogKFRydWUsIHRlc3QyX2RlZXByZWxfY28pLAotICAgICAgICAiaG9va3Rlc3RwYWNrYWdlLmZ1dHJlbCI6IChGYWxzZSwgdGVzdDJfZnV0cmVsX2NvKSwKLSAgICAgICAgInN1YiI6IChGYWxzZSwgdGVzdF9jbyksCi0gICAgICAgICJyZWxvYWRtb2R1bGUiOiAoRmFsc2UsIHRlc3RfY28pLAotICAgIH0KLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXRoPXRlc3RfcGF0aCk6Ci0gICAgICAgIGlmIHBhdGggIT0gdGVzdF9wYXRoOgotICAgICAgICAgICAgIyBpZiBvdXIgY2xhc3MgaXMgb24gc3lzLnBhdGhfaG9va3MsIHdlIG11c3QgcmFpc2UKLSAgICAgICAgICAgICMgSW1wb3J0RXJyb3IgZm9yIGFueSBwYXRoIGl0ZW0gdGhhdCB3ZSBjYW4ndCBoYW5kbGUuCi0gICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcgotICAgICAgICBzZWxmLnBhdGggPSBwYXRoCi0KLSAgICBkZWYgX2dldF9fcGF0aF9fKHNlbGYpOgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCi0KLSAgICBkZWYgZmluZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUsIHBhdGg9Tm9uZSk6Ci0gICAgICAgIGlmIGZ1bGxuYW1lIGluIHNlbGYubW9kdWxlczoKLSAgICAgICAgICAgIHJldHVybiBzZWxmCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgZGVmIGxvYWRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lKToKLSAgICAgICAgaXNwa2csIGNvZGUgPSBzZWxmLm1vZHVsZXNbZnVsbG5hbWVdCi0gICAgICAgIG1vZCA9IHN5cy5tb2R1bGVzLnNldGRlZmF1bHQoZnVsbG5hbWUsaW1wLm5ld19tb2R1bGUoZnVsbG5hbWUpKQotICAgICAgICBtb2QuX19maWxlX18gPSAiPCVzPiIgJSBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXwotICAgICAgICBtb2QuX19sb2FkZXJfXyA9IHNlbGYKLSAgICAgICAgaWYgaXNwa2c6Ci0gICAgICAgICAgICBtb2QuX19wYXRoX18gPSBzZWxmLl9nZXRfX3BhdGhfXygpCi0gICAgICAgIGV4ZWMoY29kZSwgbW9kLl9fZGljdF9fKQotICAgICAgICByZXR1cm4gbW9kCi0KLQotY2xhc3MgTWV0YUltcG9ydGVyKFRlc3RJbXBvcnRlcik6Ci0gICAgZGVmIF9nZXRfX3BhdGhfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuIFtdCi0KLWNsYXNzIFBhdGhJbXBvcnRlcihUZXN0SW1wb3J0ZXIpOgotICAgIGRlZiBfZ2V0X19wYXRoX18oc2VsZik6Ci0gICAgICAgIHJldHVybiBbc2VsZi5wYXRoXQotCi0KLWNsYXNzIEltcG9ydEJsb2NrZXI6Ci0gICAgIiIiUGxhY2UgYW4gSW1wb3J0QmxvY2tlciBpbnN0YW5jZSBvbiBzeXMubWV0YV9wYXRoIGFuZCB5b3UKLSAgICBjYW4gYmUgc3VyZSB0aGUgbW9kdWxlcyB5b3Ugc3BlY2lmaWVkIGNhbid0IGJlIGltcG9ydGVkLCBldmVuCi0gICAgaWYgaXQncyBhIGJ1aWx0aW4uIiIiCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsICpuYW1lc3RvYmxvY2spOgotICAgICAgICBzZWxmLm5hbWVzdG9ibG9jayA9IGRpY3QuZnJvbWtleXMobmFtZXN0b2Jsb2NrKQotICAgIGRlZiBmaW5kX21vZHVsZShzZWxmLCBmdWxsbmFtZSwgcGF0aD1Ob25lKToKLSAgICAgICAgaWYgZnVsbG5hbWUgaW4gc2VsZi5uYW1lc3RvYmxvY2s6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZgotICAgICAgICByZXR1cm4gTm9uZQotICAgIGRlZiBsb2FkX21vZHVsZShzZWxmLCBmdWxsbmFtZSk6Ci0gICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCJJIGRhcmUgeW91IikKLQotCi1jbGFzcyBJbXBXcmFwcGVyOgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGg9Tm9uZSk6Ci0gICAgICAgIGlmIHBhdGggaXMgbm90IE5vbmUgYW5kIG5vdCBvcy5wYXRoLmlzZGlyKHBhdGgpOgotICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IKLSAgICAgICAgc2VsZi5wYXRoID0gcGF0aAotCi0gICAgZGVmIGZpbmRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lLCBwYXRoPU5vbmUpOgotICAgICAgICBzdWJuYW1lID0gZnVsbG5hbWUuc3BsaXQoIi4iKVstMV0KLSAgICAgICAgaWYgc3VibmFtZSAhPSBmdWxsbmFtZSBhbmQgc2VsZi5wYXRoIGlzIE5vbmU6Ci0gICAgICAgICAgICByZXR1cm4gTm9uZQotICAgICAgICBpZiBzZWxmLnBhdGggaXMgTm9uZToKLSAgICAgICAgICAgIHBhdGggPSBOb25lCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBwYXRoID0gW3NlbGYucGF0aF0KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZmlsZSwgZmlsZW5hbWUsIHN0dWZmID0gaW1wLmZpbmRfbW9kdWxlKHN1Ym5hbWUsIHBhdGgpCi0gICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAgICAgICAgIHJldHVybiBOb25lCi0gICAgICAgIHJldHVybiBJbXBMb2FkZXIoZmlsZSwgZmlsZW5hbWUsIHN0dWZmKQotCi0KLWNsYXNzIEltcExvYWRlcjoKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlLCBmaWxlbmFtZSwgc3R1ZmYpOgotICAgICAgICBzZWxmLmZpbGUgPSBmaWxlCi0gICAgICAgIHNlbGYuZmlsZW5hbWUgPSBmaWxlbmFtZQotICAgICAgICBzZWxmLnN0dWZmID0gc3R1ZmYKLQotICAgIGRlZiBsb2FkX21vZHVsZShzZWxmLCBmdWxsbmFtZSk6Ci0gICAgICAgIG1vZCA9IGltcC5sb2FkX21vZHVsZShmdWxsbmFtZSwgc2VsZi5maWxlLCBzZWxmLmZpbGVuYW1lLCBzZWxmLnN0dWZmKQotICAgICAgICBpZiBzZWxmLmZpbGU6Ci0gICAgICAgICAgICBzZWxmLmZpbGUuY2xvc2UoKQotICAgICAgICBtb2QuX19sb2FkZXJfXyA9IHNlbGYgICMgZm9yIGludHJvc3BlY3Rpb24KLSAgICAgICAgcmV0dXJuIG1vZAotCi0KLWNsYXNzIEltcG9ydEhvb2tzQmFzZVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgc2VsZi5wYXRoID0gc3lzLnBhdGhbOl0KLSAgICAgICAgc2VsZi5tZXRhX3BhdGggPSBzeXMubWV0YV9wYXRoWzpdCi0gICAgICAgIHNlbGYucGF0aF9ob29rcyA9IHN5cy5wYXRoX2hvb2tzWzpdCi0gICAgICAgIHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlLmNsZWFyKCkKLSAgICAgICAgc2VsZi5tb2R1bGVzX2JlZm9yZSA9IHN1cHBvcnQubW9kdWxlc19zZXR1cCgpCi0KLSAgICBkZWYgdGVhckRvd24oc2VsZik6Ci0gICAgICAgIHN5cy5wYXRoWzpdID0gc2VsZi5wYXRoCi0gICAgICAgIHN5cy5tZXRhX3BhdGhbOl0gPSBzZWxmLm1ldGFfcGF0aAotICAgICAgICBzeXMucGF0aF9ob29rc1s6XSA9IHNlbGYucGF0aF9ob29rcwotICAgICAgICBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZS5jbGVhcigpCi0gICAgICAgIHN1cHBvcnQubW9kdWxlc19jbGVhbnVwKCpzZWxmLm1vZHVsZXNfYmVmb3JlKQotCi0KLWNsYXNzIEltcG9ydEhvb2tzVGVzdENhc2UoSW1wb3J0SG9va3NCYXNlVGVzdENhc2UpOgotCi0gICAgZGVmIGRvVGVzdEltcG9ydHMoc2VsZiwgaW1wb3J0ZXI9Tm9uZSk6Ci0gICAgICAgIGltcG9ydCBob29rdGVzdG1vZHVsZQotICAgICAgICBpbXBvcnQgaG9va3Rlc3RwYWNrYWdlCi0gICAgICAgIGltcG9ydCBob29rdGVzdHBhY2thZ2Uuc3ViCi0gICAgICAgIGltcG9ydCBob29rdGVzdHBhY2thZ2Uuc3ViLnN1YmJlcgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhvb2t0ZXN0bW9kdWxlLmdldF9uYW1lKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgImhvb2t0ZXN0bW9kdWxlIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChob29rdGVzdHBhY2thZ2UuZ2V0X25hbWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiaG9va3Rlc3RwYWNrYWdlIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChob29rdGVzdHBhY2thZ2Uuc3ViLmdldF9uYW1lKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgImhvb2t0ZXN0cGFja2FnZS5zdWIiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhvb2t0ZXN0cGFja2FnZS5zdWIuc3ViYmVyLmdldF9uYW1lKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgImhvb2t0ZXN0cGFja2FnZS5zdWIuc3ViYmVyIikKLSAgICAgICAgaWYgaW1wb3J0ZXI6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhvb2t0ZXN0bW9kdWxlLl9fbG9hZGVyX18sIGltcG9ydGVyKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChob29rdGVzdHBhY2thZ2UuX19sb2FkZXJfXywgaW1wb3J0ZXIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhvb2t0ZXN0cGFja2FnZS5zdWIuX19sb2FkZXJfXywgaW1wb3J0ZXIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhvb2t0ZXN0cGFja2FnZS5zdWIuc3ViYmVyLl9fbG9hZGVyX18sIGltcG9ydGVyKQotCi0gICAgICAgIFRlc3RJbXBvcnRlci5tb2R1bGVzWydyZWxvYWRtb2R1bGUnXSA9IChGYWxzZSwgdGVzdF9jbykKLSAgICAgICAgaW1wb3J0IHJlbG9hZG1vZHVsZQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIocmVsb2FkbW9kdWxlLCdyZWxvYWRlZCcpKQotCi0gICAgICAgIGltcG9ydCBob29rdGVzdHBhY2thZ2UubmV3cmVsCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaG9va3Rlc3RwYWNrYWdlLm5ld3JlbC5nZXRfbmFtZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICJob29rdGVzdHBhY2thZ2UubmV3cmVsIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChob29rdGVzdHBhY2thZ2UubmV3cmVsLnN1YiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBob29rdGVzdHBhY2thZ2Uuc3ViKQotCi0gICAgICAgIGltcG9ydCBob29rdGVzdHBhY2thZ2Uuc3ViLnN1YmJlci5zdWJlc3QgYXMgc3ViZXN0Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3ViZXN0LmdldF9uYW1lKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgImhvb2t0ZXN0cGFja2FnZS5zdWIuc3ViYmVyLnN1YmVzdCIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3ViZXN0LnN1YiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBob29rdGVzdHBhY2thZ2Uuc3ViKQotCi0gICAgICAgIGltcG9ydCBob29rdGVzdHBhY2thZ2UuZnV0cmVsCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaG9va3Rlc3RwYWNrYWdlLmZ1dHJlbC5nZXRfbmFtZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICJob29rdGVzdHBhY2thZ2UuZnV0cmVsIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChob29rdGVzdHBhY2thZ2UuZnV0cmVsLnN1YiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBob29rdGVzdHBhY2thZ2Uuc3ViKQotCi0gICAgICAgIGltcG9ydCBzdWIKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWIuZ2V0X25hbWUoKSwgInN1YiIpCi0KLSAgICAgICAgaW1wb3J0IGhvb2t0ZXN0cGFja2FnZS5vbGRhYnMKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChob29rdGVzdHBhY2thZ2Uub2xkYWJzLmdldF9uYW1lKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgImhvb2t0ZXN0cGFja2FnZS5vbGRhYnMiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhvb2t0ZXN0cGFja2FnZS5vbGRhYnMuc3ViLCBzdWIpCi0KLSAgICAgICAgaW1wb3J0IGhvb2t0ZXN0cGFja2FnZS5uZXdhYnMKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChob29rdGVzdHBhY2thZ2UubmV3YWJzLmdldF9uYW1lKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgImhvb2t0ZXN0cGFja2FnZS5uZXdhYnMiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhvb2t0ZXN0cGFja2FnZS5uZXdhYnMuc3ViLCBzdWIpCi0KLSAgICBkZWYgdGVzdE1ldGFQYXRoKHNlbGYpOgotICAgICAgICBpID0gTWV0YUltcG9ydGVyKCkKLSAgICAgICAgc3lzLm1ldGFfcGF0aC5hcHBlbmQoaSkKLSAgICAgICAgc2VsZi5kb1Rlc3RJbXBvcnRzKGkpCi0KLSAgICBkZWYgdGVzdFBhdGhIb29rKHNlbGYpOgotICAgICAgICBzeXMucGF0aF9ob29rcy5pbnNlcnQoMCwgUGF0aEltcG9ydGVyKQotICAgICAgICBzeXMucGF0aC5hcHBlbmQodGVzdF9wYXRoKQotICAgICAgICBzZWxmLmRvVGVzdEltcG9ydHMoKQotCi0gICAgZGVmIHRlc3RCbG9ja2VyKHNlbGYpOgotICAgICAgICBtbmFtZSA9ICJleGNlcHRpb25zIiAgIyBhbiBhcmJpdHJhcnkgaGFybWxlc3MgYnVpbHRpbiBtb2R1bGUKLSAgICAgICAgc3VwcG9ydC51bmxvYWQobW5hbWUpCi0gICAgICAgIHN5cy5tZXRhX3BhdGguYXBwZW5kKEltcG9ydEJsb2NrZXIobW5hbWUpKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvciwgX19pbXBvcnRfXywgbW5hbWUpCi0KLSAgICBkZWYgdGVzdEltcFdyYXBwZXIoc2VsZik6Ci0gICAgICAgIGkgPSBJbXBXcmFwcGVyKCkKLSAgICAgICAgc3lzLm1ldGFfcGF0aC5hcHBlbmQoaSkKLSAgICAgICAgc3lzLnBhdGhfaG9va3MuaW5zZXJ0KDAsIEltcFdyYXBwZXIpCi0gICAgICAgIG1uYW1lcyA9ICgKLSAgICAgICAgICAgICJjb2xvcnN5cyIsICJ1cmxsaWIucGFyc2UiLCAiZGlzdHV0aWxzLmNvcmUiLCAic3lzIiwKLSAgICAgICAgKQotICAgICAgICBmb3IgbW5hbWUgaW4gbW5hbWVzOgotICAgICAgICAgICAgcGFyZW50ID0gbW5hbWUuc3BsaXQoIi4iKVswXQotICAgICAgICAgICAgZm9yIG4gaW4gbGlzdChzeXMubW9kdWxlcyk6Ci0gICAgICAgICAgICAgICAgaWYgbi5zdGFydHN3aXRoKHBhcmVudCk6Ci0gICAgICAgICAgICAgICAgICAgIGRlbCBzeXMubW9kdWxlc1tuXQotICAgICAgICBmb3IgbW5hbWUgaW4gbW5hbWVzOgotICAgICAgICAgICAgbSA9IF9faW1wb3J0X18obW5hbWUsIGdsb2JhbHMoKSwgbG9jYWxzKCksIFsiX19kdW1teV9fIl0pCi0gICAgICAgICAgICAjIHRvIG1ha2Ugc3VyZSB3ZSBhY3R1YWxseSBoYW5kbGVkIHRoZSBpbXBvcnQKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKG0sICJfX2xvYWRlcl9fIikpCi0KLQotZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KEltcG9ydEhvb2tzVGVzdENhc2UpCi0KLWlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL19faW5pdF9fLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvX19pbml0X18ucHkKaW5kZXggMGUzNDVjZC4uNGIxNmVjYyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvX19pbml0X18ucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvX19pbml0X18ucHkKQEAgLTEsMzMgKzEsNSBAQAogaW1wb3J0IG9zCi1pbXBvcnQgc3lzCi1mcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKLWltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IGxvYWRfcGFja2FnZV90ZXN0cwogCi1kZWYgdGVzdF9zdWl0ZShwYWNrYWdlPV9fcGFja2FnZV9fLCBkaXJlY3Rvcnk9b3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSk6Ci0gICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoKQotICAgIGZvciBuYW1lIGluIG9zLmxpc3RkaXIoZGlyZWN0b3J5KToKLSAgICAgICAgaWYgbmFtZS5zdGFydHN3aXRoKCgnLicsICdfXycpKToKLSAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oZGlyZWN0b3J5LCBuYW1lKQotICAgICAgICBpZiAob3MucGF0aC5pc2ZpbGUocGF0aCkgYW5kIG5hbWUuc3RhcnRzd2l0aCgndGVzdF8nKSBhbmQKLSAgICAgICAgICAgICAgICBuYW1lLmVuZHN3aXRoKCcucHknKSk6Ci0gICAgICAgICAgICBzdWJtb2R1bGVfbmFtZSA9IG9zLnBhdGguc3BsaXRleHQobmFtZSlbMF0KLSAgICAgICAgICAgIG1vZHVsZV9uYW1lID0gInswfS57MX0iLmZvcm1hdChwYWNrYWdlLCBzdWJtb2R1bGVfbmFtZSkKLSAgICAgICAgICAgIF9faW1wb3J0X18obW9kdWxlX25hbWUsIGxldmVsPTApCi0gICAgICAgICAgICBtb2R1bGVfdGVzdHMgPSB1bml0dGVzdC5maW5kVGVzdENhc2VzKHN5cy5tb2R1bGVzW21vZHVsZV9uYW1lXSkKLSAgICAgICAgICAgIHN1aXRlLmFkZFRlc3QobW9kdWxlX3Rlc3RzKQotICAgICAgICBlbGlmIG9zLnBhdGguaXNkaXIocGF0aCk6Ci0gICAgICAgICAgICBwYWNrYWdlX25hbWUgPSAiezB9LnsxfSIuZm9ybWF0KHBhY2thZ2UsIG5hbWUpCi0gICAgICAgICAgICBfX2ltcG9ydF9fKHBhY2thZ2VfbmFtZSwgbGV2ZWw9MCkKLSAgICAgICAgICAgIHBhY2thZ2VfdGVzdHMgPSBnZXRhdHRyKHN5cy5tb2R1bGVzW3BhY2thZ2VfbmFtZV0sICd0ZXN0X3N1aXRlJykoKQotICAgICAgICAgICAgc3VpdGUuYWRkVGVzdChwYWNrYWdlX3Rlc3RzKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgY29udGludWUKLSAgICByZXR1cm4gc3VpdGUKLQotCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgc3RhcnRfZGlyID0gb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKQotICAgIHRvcF9kaXIgPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKHN0YXJ0X2RpcikpCi0gICAgdGVzdF9sb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdCh0ZXN0X2xvYWRlci5kaXNjb3ZlcihzdGFydF9kaXIsIHRvcF9sZXZlbF9kaXI9dG9wX2RpcikpCitkZWYgbG9hZF90ZXN0cygqYXJncyk6CisgICAgcmV0dXJuIGxvYWRfcGFja2FnZV90ZXN0cyhvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAqYXJncykKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL19fbWFpbl9fLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvX19tYWluX18ucHkKaW5kZXggYzM5NzEyOC4uNDBhMjNhMiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvX19tYWluX18ucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvX19tYWluX18ucHkKQEAgLTEsMjAgKzEsNCBAQAotIiIiUnVuIGltcG9ydGxpYidzIHRlc3Qgc3VpdGUuCitmcm9tIC4gaW1wb3J0IGxvYWRfdGVzdHMKK2ltcG9ydCB1bml0dGVzdAogCi1TcGVjaWZ5aW5nIHRoZSBgYC0tYnVpbHRpbmBgIGZsYWcgd2lsbCBydW4gdGVzdHMsIHdoZXJlIGFwcGxpY2FibGUsIHdpdGgKLWJ1aWx0aW5zLl9faW1wb3J0X18gaW5zdGVhZCBvZiBpbXBvcnRsaWIuX19pbXBvcnRfXy4KLQotIiIiCi1mcm9tIC4gaW1wb3J0IHRlc3RfbWFpbgotCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgaW1wb3J0IGFyZ3BhcnNlCi0KLSAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihkZXNjcmlwdGlvbj0nRXhlY3V0ZSB0aGUgaW1wb3J0bGliIHRlc3QgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3VpdGUnKQotICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1iJywgJy0tYnVpbHRpbicsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlZmF1bHQ9RmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSd1c2UgYnVpbHRpbnMuX19pbXBvcnRfXygpIGluc3RlYWQgb2YgaW1wb3J0bGliJykKLSAgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQotICAgIGlmIGFyZ3MuYnVpbHRpbjoKLSAgICAgICAgdXRpbC51c2luZ19fX2ltcG9ydF9fID0gVHJ1ZQotICAgIHRlc3RfbWFpbigpCit1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2FiYy5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2FiYy5weQppbmRleCAyYzE3YWMzLi4yMDcwZGFkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9hYmMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvYWJjLnB5CkBAIC0yLDcgKzIsNyBAQAogaW1wb3J0IHVuaXR0ZXN0CiAKIAotY2xhc3MgRmluZGVyVGVzdHModW5pdHRlc3QuVGVzdENhc2UsIG1ldGFjbGFzcz1hYmMuQUJDTWV0YSk6CitjbGFzcyBGaW5kZXJUZXN0cyhtZXRhY2xhc3M9YWJjLkFCQ01ldGEpOgogCiAgICAgIiIiQmFzaWMgdGVzdHMgZm9yIGEgZmluZGVyIHRvIHBhc3MuIiIiCiAKQEAgLTM5LDcgKzM5LDcgQEAKICAgICAgICAgcGFzcwogCiAKLWNsYXNzIExvYWRlclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlLCBtZXRhY2xhc3M9YWJjLkFCQ01ldGEpOgorY2xhc3MgTG9hZGVyVGVzdHMobWV0YWNsYXNzPWFiYy5BQkNNZXRhKToKIAogICAgIEBhYmMuYWJzdHJhY3RtZXRob2QKICAgICBkZWYgdGVzdF9tb2R1bGUoc2VsZik6CkBAIC04MSwxMSArODEsNiBAQAogICAgICAgICBwYXNzCiAKICAgICBAYWJjLmFic3RyYWN0bWV0aG9kCi0gICAgZGVmIHRlc3RfbW9kdWxlX3JldXNlKHNlbGYpOgotICAgICAgICAiIiJJZiBhIG1vZHVsZSBpcyBhbHJlYWR5IGluIHN5cy5tb2R1bGVzLCBpdCBzaG91bGQgYmUgcmV1c2VkLiIiIgotICAgICAgICBwYXNzCi0KLSAgICBAYWJjLmFic3RyYWN0bWV0aG9kCiAgICAgZGVmIHRlc3Rfc3RhdGVfYWZ0ZXJfZmFpbHVyZShzZWxmKToKICAgICAgICAgIiIiSWYgYSBtb2R1bGUgaXMgYWxyZWFkeSBpbiBzeXMubW9kdWxlcyBhbmQgYSByZWxvYWQgZmFpbHMKICAgICAgICAgKGUuZy4gYSBTeW50YXhFcnJvciksIHRoZSBtb2R1bGUgc2hvdWxkIGJlIGluIHRoZSBzdGF0ZSBpdCB3YXMgYmVmb3JlCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9idWlsdGluL19faW5pdF9fLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvYnVpbHRpbi9fX2luaXRfXy5weQppbmRleCAxNWMwYWRlLi40YjE2ZWNjIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9idWlsdGluL19faW5pdF9fLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2J1aWx0aW4vX19pbml0X18ucHkKQEAgLTEsMTIgKzEsNSBAQAotZnJvbSAuLiBpbXBvcnQgdGVzdF9zdWl0ZQogaW1wb3J0IG9zCitmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgbG9hZF9wYWNrYWdlX3Rlc3RzCiAKLQotZGVmIHRlc3Rfc3VpdGUoKToKLSAgICBkaXJlY3RvcnkgPSBvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pCi0gICAgcmV0dXJuIHRlc3Rfc3VpdGUoJ2ltcG9ydGxpYi50ZXN0LmJ1aWx0aW4nLCBkaXJlY3RvcnkpCi0KLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0Ci0gICAgcnVuX3VuaXR0ZXN0KHRlc3Rfc3VpdGUoKSkKK2RlZiBsb2FkX3Rlc3RzKCphcmdzKToKKyAgICByZXR1cm4gbG9hZF9wYWNrYWdlX3Rlc3RzKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICphcmdzKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvYnVpbHRpbi9fX21haW5fXy5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2J1aWx0aW4vX19tYWluX18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBhMjNhMgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2J1aWx0aW4vX19tYWluX18ucHkKQEAgLTAsMCArMSw0IEBACitmcm9tIC4gaW1wb3J0IGxvYWRfdGVzdHMKK2ltcG9ydCB1bml0dGVzdAorCit1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2J1aWx0aW4vdGVzdF9maW5kZXIucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9idWlsdGluL3Rlc3RfZmluZGVyLnB5CmluZGV4IGRhMGVmMjguLjkzNDU2MmYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2J1aWx0aW4vdGVzdF9maW5kZXIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvYnVpbHRpbi90ZXN0X2ZpbmRlci5weQpAQCAtMSwxMSArMSw1MyBAQAotZnJvbSBpbXBvcnRsaWIgaW1wb3J0IG1hY2hpbmVyeQogZnJvbSAuLiBpbXBvcnQgYWJjCiBmcm9tIC4uIGltcG9ydCB1dGlsCiBmcm9tIC4gaW1wb3J0IHV0aWwgYXMgYnVpbHRpbl91dGlsCiAKK2Zyb3plbl9tYWNoaW5lcnksIHNvdXJjZV9tYWNoaW5lcnkgPSB1dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYi5tYWNoaW5lcnknKQorCiBpbXBvcnQgc3lzCiBpbXBvcnQgdW5pdHRlc3QKIAorCitjbGFzcyBGaW5kU3BlY1Rlc3RzKGFiYy5GaW5kZXJUZXN0cyk6CisKKyAgICAiIiJUZXN0IGZpbmRfc3BlYygpIGZvciBidWlsdC1pbiBtb2R1bGVzLiIiIgorCisgICAgZGVmIHRlc3RfbW9kdWxlKHNlbGYpOgorICAgICAgICAjIENvbW1vbiBjYXNlLgorICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShidWlsdGluX3V0aWwuTkFNRSk6CisgICAgICAgICAgICBmb3VuZCA9IHNlbGYubWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlci5maW5kX3NwZWMoYnVpbHRpbl91dGlsLk5BTUUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZm91bmQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvdW5kLm9yaWdpbiwgJ2J1aWx0LWluJykKKworICAgICMgQnVpbHQtaW4gbW9kdWxlcyBjYW5ub3QgYmUgYSBwYWNrYWdlLgorICAgIHRlc3RfcGFja2FnZSA9IE5vbmUKKworICAgICMgQnVpbHQtaW4gbW9kdWxlcyBjYW5ub2J0IGJlIGluIGEgcGFja2FnZS4KKyAgICB0ZXN0X21vZHVsZV9pbl9wYWNrYWdlID0gTm9uZQorCisgICAgIyBCdWlsdC1pbiBtb2R1bGVzIGNhbm5vdCBiZSBhIHBhY2thZ2UuCisgICAgdGVzdF9wYWNrYWdlX2luX3BhY2thZ2UgPSBOb25lCisKKyAgICAjIEJ1aWx0LWluIG1vZHVsZXMgY2Fubm90IGJlIGEgcGFja2FnZS4KKyAgICB0ZXN0X3BhY2thZ2Vfb3Zlcl9tb2R1bGUgPSBOb25lCisKKyAgICBkZWYgdGVzdF9mYWlsdXJlKHNlbGYpOgorICAgICAgICBuYW1lID0gJ2ltcG9ydGxpYicKKyAgICAgICAgYXNzZXJ0IG5hbWUgbm90IGluIHN5cy5idWlsdGluX21vZHVsZV9uYW1lcworICAgICAgICBzcGVjID0gc2VsZi5tYWNoaW5lcnkuQnVpbHRpbkltcG9ydGVyLmZpbmRfc3BlYyhuYW1lKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzcGVjKQorCisgICAgZGVmIHRlc3RfaWdub3JlX3BhdGgoc2VsZik6CisgICAgICAgICMgVGhlIHZhbHVlIGZvciAncGF0aCcgc2hvdWxkIGFsd2F5cyB0cmlnZ2VyIGEgZmFpbGVkIGltcG9ydC4KKyAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUoYnVpbHRpbl91dGlsLk5BTUUpOgorICAgICAgICAgICAgc3BlYyA9IHNlbGYubWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlci5maW5kX3NwZWMoYnVpbHRpbl91dGlsLk5BTUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJ3BrZyddKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc3BlYykKKworRnJvemVuX0ZpbmRTcGVjVGVzdHMsIFNvdXJjZV9GaW5kU3BlY1Rlc3RzID0gdXRpbC50ZXN0X2JvdGgoRmluZFNwZWNUZXN0cywKKyAgICAgICAgbWFjaGluZXJ5PVtmcm96ZW5fbWFjaGluZXJ5LCBzb3VyY2VfbWFjaGluZXJ5XSkKKworCiBjbGFzcyBGaW5kZXJUZXN0cyhhYmMuRmluZGVyVGVzdHMpOgogCiAgICAgIiIiVGVzdCBmaW5kX21vZHVsZSgpIGZvciBidWlsdC1pbiBtb2R1bGVzLiIiIgpAQCAtMTMsOCArNTUsOSBAQAogICAgIGRlZiB0ZXN0X21vZHVsZShzZWxmKToKICAgICAgICAgIyBDb21tb24gY2FzZS4KICAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUoYnVpbHRpbl91dGlsLk5BTUUpOgotICAgICAgICAgICAgZm91bmQgPSBtYWNoaW5lcnkuQnVpbHRpbkltcG9ydGVyLmZpbmRfbW9kdWxlKGJ1aWx0aW5fdXRpbC5OQU1FKQorICAgICAgICAgICAgZm91bmQgPSBzZWxmLm1hY2hpbmVyeS5CdWlsdGluSW1wb3J0ZXIuZmluZF9tb2R1bGUoYnVpbHRpbl91dGlsLk5BTUUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZm91bmQpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihmb3VuZCwgJ2xvYWRfbW9kdWxlJykpCiAKICAgICAjIEJ1aWx0LWluIG1vZHVsZXMgY2Fubm90IGJlIGEgcGFja2FnZS4KICAgICB0ZXN0X3BhY2thZ2UgPSB0ZXN0X3BhY2thZ2VfaW5fcGFja2FnZSA9IHRlc3RfcGFja2FnZV9vdmVyX21vZHVsZSA9IE5vbmUKQEAgLTI0LDIyICs2NywxOSBAQAogCiAgICAgZGVmIHRlc3RfZmFpbHVyZShzZWxmKToKICAgICAgICAgYXNzZXJ0ICdpbXBvcnRsaWInIG5vdCBpbiBzeXMuYnVpbHRpbl9tb2R1bGVfbmFtZXMKLSAgICAgICAgbG9hZGVyID0gbWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlci5maW5kX21vZHVsZSgnaW1wb3J0bGliJykKKyAgICAgICAgbG9hZGVyID0gc2VsZi5tYWNoaW5lcnkuQnVpbHRpbkltcG9ydGVyLmZpbmRfbW9kdWxlKCdpbXBvcnRsaWInKQogICAgICAgICBzZWxmLmFzc2VydElzTm9uZShsb2FkZXIpCiAKICAgICBkZWYgdGVzdF9pZ25vcmVfcGF0aChzZWxmKToKICAgICAgICAgIyBUaGUgdmFsdWUgZm9yICdwYXRoJyBzaG91bGQgYWx3YXlzIHRyaWdnZXIgYSBmYWlsZWQgaW1wb3J0LgogICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShidWlsdGluX3V0aWwuTkFNRSk6Ci0gICAgICAgICAgICBsb2FkZXIgPSBtYWNoaW5lcnkuQnVpbHRpbkltcG9ydGVyLmZpbmRfbW9kdWxlKGJ1aWx0aW5fdXRpbC5OQU1FLAorICAgICAgICAgICAgbG9hZGVyID0gc2VsZi5tYWNoaW5lcnkuQnVpbHRpbkltcG9ydGVyLmZpbmRfbW9kdWxlKGJ1aWx0aW5fdXRpbC5OQU1FLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWydwa2cnXSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGxvYWRlcikKIAotCi0KLWRlZiB0ZXN0X21haW4oKToKLSAgICBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0Ci0gICAgcnVuX3VuaXR0ZXN0KEZpbmRlclRlc3RzKQorRnJvemVuX0ZpbmRlclRlc3RzLCBTb3VyY2VfRmluZGVyVGVzdHMgPSB1dGlsLnRlc3RfYm90aChGaW5kZXJUZXN0cywKKyAgICAgICAgbWFjaGluZXJ5PVtmcm96ZW5fbWFjaGluZXJ5LCBzb3VyY2VfbWFjaGluZXJ5XSkKIAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9idWlsdGluL3Rlc3RfbG9hZGVyLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvYnVpbHRpbi90ZXN0X2xvYWRlci5weQppbmRleCAxMmE3OWM2Li4xZjgzNTc0IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9idWlsdGluL3Rlc3RfbG9hZGVyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2J1aWx0aW4vdGVzdF9sb2FkZXIucHkKQEAgLTEsOSArMSw5IEBACi1pbXBvcnQgaW1wb3J0bGliCi1mcm9tIGltcG9ydGxpYiBpbXBvcnQgbWFjaGluZXJ5CiBmcm9tIC4uIGltcG9ydCBhYmMKIGZyb20gLi4gaW1wb3J0IHV0aWwKIGZyb20gLiBpbXBvcnQgdXRpbCBhcyBidWlsdGluX3V0aWwKIAorZnJvemVuX21hY2hpbmVyeSwgc291cmNlX21hY2hpbmVyeSA9IHV0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliLm1hY2hpbmVyeScpCisKIGltcG9ydCBzeXMKIGltcG9ydCB0eXBlcwogaW1wb3J0IHVuaXR0ZXN0CkBAIC0xMyw4ICsxMyw5IEBACiAKICAgICAiIiJUZXN0IGxvYWRfbW9kdWxlKCkgZm9yIGJ1aWx0LWluIG1vZHVsZXMuIiIiCiAKLSAgICB2ZXJpZmljYXRpb24gPSB7J19fbmFtZV9fJzogJ2Vycm5vJywgJ19fcGFja2FnZV9fJzogJycsCi0gICAgICAgICAgICAgICAgICAgICdfX2xvYWRlcl9fJzogbWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlcn0KKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYudmVyaWZpY2F0aW9uID0geydfX25hbWVfXyc6ICdlcnJubycsICdfX3BhY2thZ2VfXyc6ICcnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX19sb2FkZXJfXyc6IHNlbGYubWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlcn0KIAogICAgIGRlZiB2ZXJpZnkoc2VsZiwgbW9kdWxlKToKICAgICAgICAgIiIiVmVyaWZ5IHRoYXQgdGhlIG1vZHVsZSBtYXRjaGVzIGFnYWluc3Qgd2hhdCBpdCBzaG91bGQgaGF2ZS4iIiIKQEAgLTIzLDggKzI0LDggQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXR0cihtb2R1bGUsIGF0dHIpLCB2YWx1ZSkKICAgICAgICAgc2VsZi5hc3NlcnRJbihtb2R1bGUuX19uYW1lX18sIHN5cy5tb2R1bGVzKQogCi0gICAgbG9hZF9tb2R1bGUgPSBzdGF0aWNtZXRob2QobGFtYmRhIG5hbWU6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hY2hpbmVyeS5CdWlsdGluSW1wb3J0ZXIubG9hZF9tb2R1bGUobmFtZSkpCisgICAgZGVmIGxvYWRfbW9kdWxlKHNlbGYsIG5hbWUpOgorICAgICAgICByZXR1cm4gc2VsZi5tYWNoaW5lcnkuQnVpbHRpbkltcG9ydGVyLmxvYWRfbW9kdWxlKG5hbWUpCiAKICAgICBkZWYgdGVzdF9tb2R1bGUoc2VsZik6CiAgICAgICAgICMgQ29tbW9uIGNhc2UuCkBAIC01NSw0NSArNTYsNTEgQEAKICAgICBkZWYgdGVzdF9hbHJlYWR5X2ltcG9ydGVkKHNlbGYpOgogICAgICAgICAjIFVzaW5nIHRoZSBuYW1lIG9mIGEgbW9kdWxlIGFscmVhZHkgaW1wb3J0ZWQgYnV0IG5vdCBhIGJ1aWx0LWluIHNob3VsZAogICAgICAgICAjIHN0aWxsIGZhaWwuCi0gICAgICAgIGFzc2VydCBoYXNhdHRyKGltcG9ydGxpYiwgJ19fZmlsZV9fJykgICMgTm90IGEgYnVpbHQtaW4uCisgICAgICAgIG1vZHVsZV9uYW1lID0gJ2J1aWx0aW5fcmVsb2FkX3Rlc3QnCisgICAgICAgIGFzc2VydCBtb2R1bGVfbmFtZSBub3QgaW4gc3lzLmJ1aWx0aW5fbW9kdWxlX25hbWVzCisgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG1vZHVsZV9uYW1lKToKKyAgICAgICAgICAgIG1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUobW9kdWxlX25hbWUpCisgICAgICAgICAgICBzeXMubW9kdWxlc1ttb2R1bGVfbmFtZV0gPSBtb2R1bGUKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcikgYXMgY206Ci0gICAgICAgICAgICBzZWxmLmxvYWRfbW9kdWxlKCdpbXBvcnRsaWInKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5uYW1lLCAnaW1wb3J0bGliJykKKyAgICAgICAgICAgIHNlbGYubG9hZF9tb2R1bGUobW9kdWxlX25hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLm5hbWUsIG1vZHVsZV9uYW1lKQogCiAKLWNsYXNzIEluc3BlY3RMb2FkZXJUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CitGcm96ZW5fTG9hZGVyVGVzdHMsIFNvdXJjZV9Mb2FkZXJUZXN0cyA9IHV0aWwudGVzdF9ib3RoKExvYWRlclRlc3RzLAorICAgICAgICBtYWNoaW5lcnk9W2Zyb3plbl9tYWNoaW5lcnksIHNvdXJjZV9tYWNoaW5lcnldKQorCisKK2NsYXNzIEluc3BlY3RMb2FkZXJUZXN0czoKIAogICAgICIiIlRlc3RzIGZvciBJbnNwZWN0TG9hZGVyIG1ldGhvZHMgZm9yIEJ1aWx0aW5JbXBvcnRlci4iIiIKIAogICAgIGRlZiB0ZXN0X2dldF9jb2RlKHNlbGYpOgogICAgICAgICAjIFRoZXJlIGlzIG5vIGNvZGUgb2JqZWN0LgotICAgICAgICByZXN1bHQgPSBtYWNoaW5lcnkuQnVpbHRpbkltcG9ydGVyLmdldF9jb2RlKGJ1aWx0aW5fdXRpbC5OQU1FKQorICAgICAgICByZXN1bHQgPSBzZWxmLm1hY2hpbmVyeS5CdWlsdGluSW1wb3J0ZXIuZ2V0X2NvZGUoYnVpbHRpbl91dGlsLk5BTUUpCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlc3VsdCkKIAogICAgIGRlZiB0ZXN0X2dldF9zb3VyY2Uoc2VsZik6CiAgICAgICAgICMgVGhlcmUgaXMgbm8gc291cmNlLgotICAgICAgICByZXN1bHQgPSBtYWNoaW5lcnkuQnVpbHRpbkltcG9ydGVyLmdldF9zb3VyY2UoYnVpbHRpbl91dGlsLk5BTUUpCisgICAgICAgIHJlc3VsdCA9IHNlbGYubWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlci5nZXRfc291cmNlKGJ1aWx0aW5fdXRpbC5OQU1FKQogICAgICAgICBzZWxmLmFzc2VydElzTm9uZShyZXN1bHQpCiAKICAgICBkZWYgdGVzdF9pc19wYWNrYWdlKHNlbGYpOgogICAgICAgICAjIENhbm5vdCBiZSBhIHBhY2thZ2UuCi0gICAgICAgIHJlc3VsdCA9IG1hY2hpbmVyeS5CdWlsdGluSW1wb3J0ZXIuaXNfcGFja2FnZShidWlsdGluX3V0aWwuTkFNRSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCByZXN1bHQpCisgICAgICAgIHJlc3VsdCA9IHNlbGYubWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlci5pc19wYWNrYWdlKGJ1aWx0aW5fdXRpbC5OQU1FKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHJlc3VsdCkKIAogICAgIGRlZiB0ZXN0X25vdF9idWlsdGluKHNlbGYpOgogICAgICAgICAjIE1vZHVsZXMgbm90IGJ1aWx0LWluIHNob3VsZCByYWlzZSBJbXBvcnRFcnJvci4KICAgICAgICAgZm9yIG1ldGhfbmFtZSBpbiAoJ2dldF9jb2RlJywgJ2dldF9zb3VyY2UnLCAnaXNfcGFja2FnZScpOgotICAgICAgICAgICAgbWV0aG9kID0gZ2V0YXR0cihtYWNoaW5lcnkuQnVpbHRpbkltcG9ydGVyLCBtZXRoX25hbWUpCisgICAgICAgICAgICBtZXRob2QgPSBnZXRhdHRyKHNlbGYubWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlciwgbWV0aF9uYW1lKQogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKSBhcyBjbToKICAgICAgICAgICAgIG1ldGhvZChidWlsdGluX3V0aWwuQkFEX05BTUUpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGJ1aWx0aW5fdXRpbC5CQURfTkFNRSkKIAotCi0KLWRlZiB0ZXN0X21haW4oKToKLSAgICBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0Ci0gICAgcnVuX3VuaXR0ZXN0KExvYWRlclRlc3RzLCBJbnNwZWN0TG9hZGVyVGVzdHMpCitGcm96ZW5fSW5zcGVjdExvYWRlclRlc3RzLCBTb3VyY2VfSW5zcGVjdExvYWRlclRlc3RzID0gdXRpbC50ZXN0X2JvdGgoCisgICAgICAgIEluc3BlY3RMb2FkZXJUZXN0cywKKyAgICAgICAgbWFjaGluZXJ5PVtmcm96ZW5fbWFjaGluZXJ5LCBzb3VyY2VfbWFjaGluZXJ5XSkKIAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9leHRlbnNpb24vX19pbml0X18ucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9leHRlbnNpb24vX19pbml0X18ucHkKaW5kZXggYzAzMzkyMy4uNGIxNmVjYyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZXh0ZW5zaW9uL19faW5pdF9fLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2V4dGVuc2lvbi9fX2luaXRfXy5weQpAQCAtMSwxMyArMSw1IEBACi1mcm9tIC4uIGltcG9ydCB0ZXN0X3N1aXRlCi1pbXBvcnQgb3MucGF0aAotaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgb3MKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBsb2FkX3BhY2thZ2VfdGVzdHMKIAotCi1kZWYgdGVzdF9zdWl0ZSgpOgotICAgIGRpcmVjdG9yeSA9IG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykKLSAgICByZXR1cm4gdGVzdF9zdWl0ZSgnaW1wb3J0bGliLnRlc3QuZXh0ZW5zaW9uJywgZGlyZWN0b3J5KQotCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAotICAgIHJ1bl91bml0dGVzdCh0ZXN0X3N1aXRlKCkpCitkZWYgbG9hZF90ZXN0cygqYXJncyk6CisgICAgcmV0dXJuIGxvYWRfcGFja2FnZV90ZXN0cyhvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAqYXJncykKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2V4dGVuc2lvbi9fX21haW5fXy5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2V4dGVuc2lvbi9fX21haW5fXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGEyM2EyCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZXh0ZW5zaW9uL19fbWFpbl9fLnB5CkBAIC0wLDAgKzEsNCBAQAorZnJvbSAuIGltcG9ydCBsb2FkX3Rlc3RzCitpbXBvcnQgdW5pdHRlc3QKKwordW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9leHRlbnNpb24vdGVzdF9jYXNlX3NlbnNpdGl2aXR5LnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZXh0ZW5zaW9uL3Rlc3RfY2FzZV9zZW5zaXRpdml0eS5weQppbmRleCA3NmM1M2U0Li5iYjI1MjhlIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9leHRlbnNpb24vdGVzdF9jYXNlX3NlbnNpdGl2aXR5LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2V4dGVuc2lvbi90ZXN0X2Nhc2Vfc2Vuc2l0aXZpdHkucHkKQEAgLTEsMjIgKzEsMjcgQEAKLWltcG9ydCBpbXAKK2Zyb20gaW1wb3J0bGliIGltcG9ydCBfYm9vdHN0cmFwCiBpbXBvcnQgc3lzCiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIGltcG9ydCB1bml0dGVzdAotZnJvbSBpbXBvcnRsaWIgaW1wb3J0IF9ib290c3RyYXAKKwogZnJvbSAuLiBpbXBvcnQgdXRpbAogZnJvbSAuIGltcG9ydCB1dGlsIGFzIGV4dF91dGlsCiAKK2Zyb3plbl9tYWNoaW5lcnksIHNvdXJjZV9tYWNoaW5lcnkgPSB1dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYi5tYWNoaW5lcnknKQogCisKKyMgWFhYIGZpbmRfc3BlYyB0ZXN0cworCitAdW5pdHRlc3Quc2tpcElmKGV4dF91dGlsLkZJTEVOQU1FIGlzIE5vbmUsICdfdGVzdGNhcGkgbm90IGF2YWlsYWJsZScpCiBAdXRpbC5jYXNlX2luc2Vuc2l0aXZlX3Rlc3RzCi1jbGFzcyBFeHRlbnNpb25Nb2R1bGVDYXNlU2Vuc2l0aXZpdHlUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKK2NsYXNzIEV4dGVuc2lvbk1vZHVsZUNhc2VTZW5zaXRpdml0eVRlc3Q6CiAKICAgICBkZWYgZmluZF9tb2R1bGUoc2VsZik6CiAgICAgICAgIGdvb2RfbmFtZSA9IGV4dF91dGlsLk5BTUUKICAgICAgICAgYmFkX25hbWUgPSBnb29kX25hbWUudXBwZXIoKQogICAgICAgICBhc3NlcnQgZ29vZF9uYW1lICE9IGJhZF9uYW1lCi0gICAgICAgIGZpbmRlciA9IF9ib290c3RyYXAuRmlsZUZpbmRlcihleHRfdXRpbC5QQVRILAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfYm9vdHN0cmFwLkV4dGVuc2lvbkZpbGVMb2FkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9ib290c3RyYXAuRVhURU5TSU9OX1NVRkZJWEVTKSkKKyAgICAgICAgZmluZGVyID0gc2VsZi5tYWNoaW5lcnkuRmlsZUZpbmRlcihleHRfdXRpbC5QQVRILAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYubWFjaGluZXJ5LkV4dGVuc2lvbkZpbGVMb2FkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYWNoaW5lcnkuRVhURU5TSU9OX1NVRkZJWEVTKSkKICAgICAgICAgcmV0dXJuIGZpbmRlci5maW5kX21vZHVsZShiYWRfbmFtZSkKIAogICAgIGRlZiB0ZXN0X2Nhc2Vfc2Vuc2l0aXZlKHNlbGYpOgpAQCAtMzcsMTQgKzQyLDEwIEBACiAgICAgICAgICAgICBsb2FkZXIgPSBzZWxmLmZpbmRfbW9kdWxlKCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKGxvYWRlciwgJ2xvYWRfbW9kdWxlJykpCiAKLQotCi0KLWRlZiB0ZXN0X21haW4oKToKLSAgICBpZiBleHRfdXRpbC5GSUxFTkFNRSBpcyBOb25lOgotICAgICAgICByZXR1cm4KLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChFeHRlbnNpb25Nb2R1bGVDYXNlU2Vuc2l0aXZpdHlUZXN0KQorRnJvemVuX0V4dGVuc2lvbkNhc2VTZW5zaXRpdml0eSwgU291cmNlX0V4dGVuc2lvbkNhc2VTZW5zaXRpdml0eSA9IHV0aWwudGVzdF9ib3RoKAorICAgICAgICBFeHRlbnNpb25Nb2R1bGVDYXNlU2Vuc2l0aXZpdHlUZXN0LAorICAgICAgICBtYWNoaW5lcnk9W2Zyb3plbl9tYWNoaW5lcnksIHNvdXJjZV9tYWNoaW5lcnldKQogCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2V4dGVuc2lvbi90ZXN0X2ZpbmRlci5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2V4dGVuc2lvbi90ZXN0X2ZpbmRlci5weQppbmRleCAzN2Y2NzcyLi45OTBmMjljIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9leHRlbnNpb24vdGVzdF9maW5kZXIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZXh0ZW5zaW9uL3Rlc3RfZmluZGVyLnB5CkBAIC0xLDE4ICsxLDI1IEBACi1mcm9tIGltcG9ydGxpYiBpbXBvcnQgbWFjaGluZXJ5CiBmcm9tIC4uIGltcG9ydCBhYmMKK2Zyb20gLi4gaW1wb3J0IHV0aWwgYXMgdGVzdF91dGlsCiBmcm9tIC4gaW1wb3J0IHV0aWwKIAorbWFjaGluZXJ5ID0gdGVzdF91dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYi5tYWNoaW5lcnknKQorCiBpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB3YXJuaW5ncworCisjIFhYWCBmaW5kX3NwZWMgdGVzdHMKIAogY2xhc3MgRmluZGVyVGVzdHMoYWJjLkZpbmRlclRlc3RzKToKIAogICAgICIiIlRlc3QgdGhlIGZpbmRlciBmb3IgZXh0ZW5zaW9uIG1vZHVsZXMuIiIiCiAKICAgICBkZWYgZmluZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUpOgotICAgICAgICBpbXBvcnRlciA9IG1hY2hpbmVyeS5GaWxlRmluZGVyKHV0aWwuUEFUSCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWFjaGluZXJ5LkV4dGVuc2lvbkZpbGVMb2FkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hY2hpbmVyeS5FWFRFTlNJT05fU1VGRklYRVMpKQotICAgICAgICByZXR1cm4gaW1wb3J0ZXIuZmluZF9tb2R1bGUoZnVsbG5hbWUpCisgICAgICAgIGltcG9ydGVyID0gc2VsZi5tYWNoaW5lcnkuRmlsZUZpbmRlcih1dGlsLlBBVEgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLm1hY2hpbmVyeS5FeHRlbnNpb25GaWxlTG9hZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYWNoaW5lcnkuRVhURU5TSU9OX1NVRkZJWEVTKSkKKyAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdpZ25vcmUnLCBEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgICAgICByZXR1cm4gaW1wb3J0ZXIuZmluZF9tb2R1bGUoZnVsbG5hbWUpCiAKICAgICBkZWYgdGVzdF9tb2R1bGUoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmZpbmRfbW9kdWxlKHV0aWwuTkFNRSkpCkBAIC0yOSwxMSArMzYsOSBAQAogICAgIGRlZiB0ZXN0X2ZhaWx1cmUoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHNlbGYuZmluZF9tb2R1bGUoJ2FzZGZqa2w7JykpCiAKLQotZGVmIHRlc3RfbWFpbigpOgotICAgIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKLSAgICBydW5fdW5pdHRlc3QoRmluZGVyVGVzdHMpCitGcm96ZW5fRmluZGVyVGVzdHMsIFNvdXJjZV9GaW5kZXJUZXN0cyA9IHRlc3RfdXRpbC50ZXN0X2JvdGgoCisgICAgICAgIEZpbmRlclRlc3RzLCBtYWNoaW5lcnk9bWFjaGluZXJ5KQogCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2V4dGVuc2lvbi90ZXN0X2xvYWRlci5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2V4dGVuc2lvbi90ZXN0X2xvYWRlci5weQppbmRleCBlNzkwNjc1Li5mZDlhYmYyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9leHRlbnNpb24vdGVzdF9sb2FkZXIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZXh0ZW5zaW9uL3Rlc3RfbG9hZGVyLnB5CkBAIC0xLDEwICsxLDEyIEBACi1mcm9tIGltcG9ydGxpYiBpbXBvcnQgbWFjaGluZXJ5CiBmcm9tIC4gaW1wb3J0IHV0aWwgYXMgZXh0X3V0aWwKIGZyb20gLi4gaW1wb3J0IGFiYwogZnJvbSAuLiBpbXBvcnQgdXRpbAogCittYWNoaW5lcnkgPSB1dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYi5tYWNoaW5lcnknKQorCiBpbXBvcnQgb3MucGF0aAogaW1wb3J0IHN5cworaW1wb3J0IHR5cGVzCiBpbXBvcnQgdW5pdHRlc3QKIAogCkBAIC0xMyw4ICsxNSw4IEBACiAgICAgIiIiVGVzdCBsb2FkX21vZHVsZSgpIGZvciBleHRlbnNpb24gbW9kdWxlcy4iIiIKIAogICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgc2VsZi5sb2FkZXIgPSBtYWNoaW5lcnkuRXh0ZW5zaW9uRmlsZUxvYWRlcihleHRfdXRpbC5OQU1FLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRfdXRpbC5GSUxFUEFUSCkKKyAgICAgICAgc2VsZi5sb2FkZXIgPSBzZWxmLm1hY2hpbmVyeS5FeHRlbnNpb25GaWxlTG9hZGVyKGV4dF91dGlsLk5BTUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRfdXRpbC5GSUxFUEFUSCkKIAogICAgIGRlZiBsb2FkX21vZHVsZShzZWxmLCBmdWxsbmFtZSk6CiAgICAgICAgIHJldHVybiBzZWxmLmxvYWRlci5sb2FkX21vZHVsZShmdWxsbmFtZSkKQEAgLTI2LDYgKzI4LDE1IEBACiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpOgogICAgICAgICAgICAgc2VsZi5sb2FkX21vZHVsZSgnWFhYJykKIAorICAgIGRlZiB0ZXN0X2VxdWFsaXR5KHNlbGYpOgorICAgICAgICBvdGhlciA9IHNlbGYubWFjaGluZXJ5LkV4dGVuc2lvbkZpbGVMb2FkZXIoZXh0X3V0aWwuTkFNRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dF91dGlsLkZJTEVQQVRIKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9hZGVyLCBvdGhlcikKKworICAgIGRlZiB0ZXN0X2luZXF1YWxpdHkoc2VsZik6CisgICAgICAgIG90aGVyID0gc2VsZi5tYWNoaW5lcnkuRXh0ZW5zaW9uRmlsZUxvYWRlcignXycgKyBleHRfdXRpbC5OQU1FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0X3V0aWwuRklMRVBBVEgpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoc2VsZi5sb2FkZXIsIG90aGVyKQogCiAgICAgZGVmIHRlc3RfbW9kdWxlKHNlbGYpOgogICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShleHRfdXRpbC5OQU1FKToKQEAgLTM2LDcgKzQ3LDcgQEAKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGF0dHIobW9kdWxlLCBhdHRyKSwgdmFsdWUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEluKGV4dF91dGlsLk5BTUUsIHN5cy5tb2R1bGVzKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG1vZHVsZS5fX2xvYWRlcl9fLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hY2hpbmVyeS5FeHRlbnNpb25GaWxlTG9hZGVyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWFjaGluZXJ5LkV4dGVuc2lvbkZpbGVMb2FkZXIpCiAKICAgICAjIE5vIGV4dGVuc2lvbiBtb2R1bGUgYXMgX19pbml0X18gYXZhaWxhYmxlIGZvciB0ZXN0aW5nLgogICAgIHRlc3RfcGFja2FnZSA9IE5vbmUKQEAgLTYxLDE2ICs3MiwxNSBAQAogCiAgICAgZGVmIHRlc3RfaXNfcGFja2FnZShzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvYWRlci5pc19wYWNrYWdlKGV4dF91dGlsLk5BTUUpKQotICAgICAgICBmb3Igc3VmZml4IGluIG1hY2hpbmVyeS5FWFRFTlNJT05fU1VGRklYRVM6CisgICAgICAgIGZvciBzdWZmaXggaW4gc2VsZi5tYWNoaW5lcnkuRVhURU5TSU9OX1NVRkZJWEVTOgogICAgICAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbignc29tZScsICdwYXRoJywgJ3BrZycsICdfX2luaXRfXycgKyBzdWZmaXgpCi0gICAgICAgICAgICBsb2FkZXIgPSBtYWNoaW5lcnkuRXh0ZW5zaW9uRmlsZUxvYWRlcigncGtnJywgcGF0aCkKKyAgICAgICAgICAgIGxvYWRlciA9IHNlbGYubWFjaGluZXJ5LkV4dGVuc2lvbkZpbGVMb2FkZXIoJ3BrZycsIHBhdGgpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobG9hZGVyLmlzX3BhY2thZ2UoJ3BrZycpKQogCitGcm96ZW5fTG9hZGVyVGVzdHMsIFNvdXJjZV9Mb2FkZXJUZXN0cyA9IHV0aWwudGVzdF9ib3RoKAorICAgICAgICBMb2FkZXJUZXN0cywgbWFjaGluZXJ5PW1hY2hpbmVyeSkKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKLSAgICBydW5fdW5pdHRlc3QoTG9hZGVyVGVzdHMpCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZXh0ZW5zaW9uL3Rlc3RfcGF0aF9ob29rLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZXh0ZW5zaW9uL3Rlc3RfcGF0aF9ob29rLnB5CmluZGV4IDFkOTY5YTEuLjQ5ZDY3MzQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2V4dGVuc2lvbi90ZXN0X3BhdGhfaG9vay5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9leHRlbnNpb24vdGVzdF9wYXRoX2hvb2sucHkKQEAgLTEsMzIgKzEsMzIgQEAKLWZyb20gaW1wb3J0bGliIGltcG9ydCBtYWNoaW5lcnkKK2Zyb20gLi4gaW1wb3J0IHV0aWwgYXMgdGVzdF91dGlsCiBmcm9tIC4gaW1wb3J0IHV0aWwKIAorbWFjaGluZXJ5ID0gdGVzdF91dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYi5tYWNoaW5lcnknKQorCiBpbXBvcnQgY29sbGVjdGlvbnMKLWltcG9ydCBpbXAKIGltcG9ydCBzeXMKIGltcG9ydCB1bml0dGVzdAogCiAKLWNsYXNzIFBhdGhIb29rVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorY2xhc3MgUGF0aEhvb2tUZXN0czoKIAogICAgICIiIlRlc3QgdGhlIHBhdGggaG9vayBmb3IgZXh0ZW5zaW9uIG1vZHVsZXMuIiIiCiAgICAgIyBYWFggU2hvdWxkIGl0IG9ubHkgc3VjY2VlZCBmb3IgcHJlLWV4aXN0aW5nIGRpcmVjdG9yaWVzPwogICAgICMgWFhYIFNob3VsZCBpdCBvbmx5IHdvcmsgZm9yIGRpcmVjdG9yaWVzIGNvbnRhaW5pbmcgYW4gZXh0ZW5zaW9uIG1vZHVsZT8KIAogICAgIGRlZiBob29rKHNlbGYsIGVudHJ5KToKLSAgICAgICAgcmV0dXJuIG1hY2hpbmVyeS5GaWxlRmluZGVyLnBhdGhfaG9vaygobWFjaGluZXJ5LkV4dGVuc2lvbkZpbGVMb2FkZXIsCi0gICAgICAgICAgICBtYWNoaW5lcnkuRVhURU5TSU9OX1NVRkZJWEVTKSkoZW50cnkpCisgICAgICAgIHJldHVybiBzZWxmLm1hY2hpbmVyeS5GaWxlRmluZGVyLnBhdGhfaG9vaygKKyAgICAgICAgICAgICAgICAoc2VsZi5tYWNoaW5lcnkuRXh0ZW5zaW9uRmlsZUxvYWRlciwKKyAgICAgICAgICAgICAgICAgc2VsZi5tYWNoaW5lcnkuRVhURU5TSU9OX1NVRkZJWEVTKSkoZW50cnkpCiAKICAgICBkZWYgdGVzdF9zdWNjZXNzKHNlbGYpOgogICAgICAgICAjIFBhdGggaG9vayBzaG91bGQgaGFuZGxlIGEgZGlyZWN0b3J5IHdoZXJlIGEga25vd24gZXh0ZW5zaW9uIG1vZHVsZQogICAgICAgICAjIGV4aXN0cy4KICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoc2VsZi5ob29rKHV0aWwuUEFUSCksICdmaW5kX21vZHVsZScpKQogCi0KLWRlZiB0ZXN0X21haW4oKToKLSAgICBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0Ci0gICAgcnVuX3VuaXR0ZXN0KFBhdGhIb29rVGVzdHMpCitGcm96ZW5fUGF0aEhvb2tzVGVzdHMsIFNvdXJjZV9QYXRoSG9va3NUZXN0cyA9IHRlc3RfdXRpbC50ZXN0X2JvdGgoCisgICAgICAgIFBhdGhIb29rVGVzdHMsIG1hY2hpbmVyeT1tYWNoaW5lcnkpCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZXh0ZW5zaW9uL3V0aWwucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9leHRlbnNpb24vdXRpbC5weQppbmRleCBhMjY2ZGQ5Li44ZDA4OWYwIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9leHRlbnNpb24vdXRpbC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9leHRlbnNpb24vdXRpbC5weQpAQCAtMSw0ICsxLDMgQEAKLWltcG9ydCBpbXAKIGZyb20gaW1wb3J0bGliIGltcG9ydCBtYWNoaW5lcnkKIGltcG9ydCBvcwogaW1wb3J0IHN5cwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZnJvemVuL19faW5pdF9fLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZnJvemVuL19faW5pdF9fLnB5CmluZGV4IDllZjEwM2IuLjRiMTZlY2MgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2Zyb3plbi9fX2luaXRfXy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9mcm96ZW4vX19pbml0X18ucHkKQEAgLTEsMTMgKzEsNSBAQAotZnJvbSAuLiBpbXBvcnQgdGVzdF9zdWl0ZQotaW1wb3J0IG9zLnBhdGgKLWltcG9ydCB1bml0dGVzdAoraW1wb3J0IG9zCitmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgbG9hZF9wYWNrYWdlX3Rlc3RzCiAKLQotZGVmIHRlc3Rfc3VpdGUoKToKLSAgICBkaXJlY3RvcnkgPSBvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pCi0gICAgcmV0dXJuIHRlc3Rfc3VpdGUoJ2ltcG9ydGxpYi50ZXN0LmZyb3plbicsIGRpcmVjdG9yeSkKLQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKLSAgICBydW5fdW5pdHRlc3QodGVzdF9zdWl0ZSgpKQorZGVmIGxvYWRfdGVzdHMoKmFyZ3MpOgorICAgIHJldHVybiBsb2FkX3BhY2thZ2VfdGVzdHMob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgKmFyZ3MpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9mcm96ZW4vX19tYWluX18ucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9mcm96ZW4vX19tYWluX18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBhMjNhMgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2Zyb3plbi9fX21haW5fXy5weQpAQCAtMCwwICsxLDQgQEAKK2Zyb20gLiBpbXBvcnQgbG9hZF90ZXN0cworaW1wb3J0IHVuaXR0ZXN0CisKK3VuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZnJvemVuL3Rlc3RfZmluZGVyLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZnJvemVuL3Rlc3RfZmluZGVyLnB5CmluZGV4IGYwYWJlMGUuLmY5Zjk3ZjMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2Zyb3plbi90ZXN0X2ZpbmRlci5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9mcm96ZW4vdGVzdF9maW5kZXIucHkKQEAgLTEsMTUgKzEsNTIgQEAKLWZyb20gaW1wb3J0bGliIGltcG9ydCBtYWNoaW5lcnkKIGZyb20gLi4gaW1wb3J0IGFiYworZnJvbSAuLiBpbXBvcnQgdXRpbAorCittYWNoaW5lcnkgPSB1dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYi5tYWNoaW5lcnknKQogCiBpbXBvcnQgdW5pdHRlc3QKIAogCitjbGFzcyBGaW5kU3BlY1Rlc3RzKGFiYy5GaW5kZXJUZXN0cyk6CisKKyAgICAiIiJUZXN0IGZpbmRpbmcgZnJvemVuIG1vZHVsZXMuIiIiCisKKyAgICBkZWYgZmluZChzZWxmLCBuYW1lLCBwYXRoPU5vbmUpOgorICAgICAgICBmaW5kZXIgPSBzZWxmLm1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlcgorICAgICAgICByZXR1cm4gZmluZGVyLmZpbmRfc3BlYyhuYW1lLCBwYXRoKQorCisgICAgZGVmIHRlc3RfbW9kdWxlKHNlbGYpOgorICAgICAgICBuYW1lID0gJ19faGVsbG9fXycKKyAgICAgICAgc3BlYyA9IHNlbGYuZmluZChuYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMub3JpZ2luLCAnZnJvemVuJykKKworICAgIGRlZiB0ZXN0X3BhY2thZ2Uoc2VsZik6CisgICAgICAgIHNwZWMgPSBzZWxmLmZpbmQoJ19fcGhlbGxvX18nKQorICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShzcGVjKQorCisgICAgZGVmIHRlc3RfbW9kdWxlX2luX3BhY2thZ2Uoc2VsZik6CisgICAgICAgIHNwZWMgPSBzZWxmLmZpbmQoJ19fcGhlbGxvX18uc3BhbScsIFsnX19waGVsbG9fXyddKQorICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShzcGVjKQorCisgICAgIyBObyBmcm96ZW4gcGFja2FnZSB3aXRoaW4gYW5vdGhlciBwYWNrYWdlIHRvIHRlc3Qgd2l0aC4KKyAgICB0ZXN0X3BhY2thZ2VfaW5fcGFja2FnZSA9IE5vbmUKKworICAgICMgTm8gZWFzeSB3YXkgdG8gdGVzdC4KKyAgICB0ZXN0X3BhY2thZ2Vfb3Zlcl9tb2R1bGUgPSBOb25lCisKKyAgICBkZWYgdGVzdF9mYWlsdXJlKHNlbGYpOgorICAgICAgICBzcGVjID0gc2VsZi5maW5kKCc8bm90IHJlYWw+JykKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc3BlYykKKworRnJvemVuX0ZpbmRTcGVjVGVzdHMsIFNvdXJjZV9GaW5kU3BlY1Rlc3RzID0gdXRpbC50ZXN0X2JvdGgoRmluZFNwZWNUZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hY2hpbmVyeT1tYWNoaW5lcnkpCisKKwogY2xhc3MgRmluZGVyVGVzdHMoYWJjLkZpbmRlclRlc3RzKToKIAogICAgICIiIlRlc3QgZmluZGluZyBmcm96ZW4gbW9kdWxlcy4iIiIKIAogICAgIGRlZiBmaW5kKHNlbGYsIG5hbWUsIHBhdGg9Tm9uZSk6Ci0gICAgICAgIGZpbmRlciA9IG1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlcgorICAgICAgICBmaW5kZXIgPSBzZWxmLm1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlcgogICAgICAgICByZXR1cm4gZmluZGVyLmZpbmRfbW9kdWxlKG5hbWUsIHBhdGgpCiAKICAgICBkZWYgdGVzdF9tb2R1bGUoc2VsZik6CkBAIC0zNSwxMSArNzIsOSBAQAogICAgICAgICBsb2FkZXIgPSBzZWxmLmZpbmQoJzxub3QgcmVhbD4nKQogICAgICAgICBzZWxmLmFzc2VydElzTm9uZShsb2FkZXIpCiAKLQotZGVmIHRlc3RfbWFpbigpOgotICAgIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKLSAgICBydW5fdW5pdHRlc3QoRmluZGVyVGVzdHMpCitGcm96ZW5fRmluZGVyVGVzdHMsIFNvdXJjZV9GaW5kZXJUZXN0cyA9IHV0aWwudGVzdF9ib3RoKEZpbmRlclRlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWNoaW5lcnk9bWFjaGluZXJ5KQogCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2Zyb3plbi90ZXN0X2xvYWRlci5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2Zyb3plbi90ZXN0X2xvYWRlci5weQppbmRleCBmM2E4YmY2Li43YzAxNDY0IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9mcm96ZW4vdGVzdF9sb2FkZXIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZnJvemVuL3Rlc3RfbG9hZGVyLnB5CkBAIC0xLDE4ICsxLDEwNCBAQAotZnJvbSBpbXBvcnRsaWIgaW1wb3J0IG1hY2hpbmVyeQotaW1wb3J0IGltcAotaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIC4uIGltcG9ydCBhYmMKIGZyb20gLi4gaW1wb3J0IHV0aWwKKworbWFjaGluZXJ5ID0gdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWIubWFjaGluZXJ5JykKKworCitpbXBvcnQgc3lzCiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgY2FwdHVyZWRfc3Rkb3V0CitpbXBvcnQgdHlwZXMKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHdhcm5pbmdzCisKKworY2xhc3MgRXhlY01vZHVsZVRlc3RzKGFiYy5Mb2FkZXJUZXN0cyk6CisKKyAgICBkZWYgZXhlY19tb2R1bGUoc2VsZiwgbmFtZSk6CisgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpLCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBzdGRvdXQ6CisgICAgICAgICAgICBzcGVjID0gc2VsZi5tYWNoaW5lcnkuTW9kdWxlU3BlYygKKyAgICAgICAgICAgICAgICAgICAgbmFtZSwgc2VsZi5tYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIsIG9yaWdpbj0nZnJvemVuJywKKyAgICAgICAgICAgICAgICAgICAgaXNfcGFja2FnZT1zZWxmLm1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlci5pc19wYWNrYWdlKG5hbWUpKQorICAgICAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZShuYW1lKQorICAgICAgICAgICAgbW9kdWxlLl9fc3BlY19fID0gc3BlYworICAgICAgICAgICAgYXNzZXJ0IG5vdCBoYXNhdHRyKG1vZHVsZSwgJ2luaXRpYWxpemVkJykKKyAgICAgICAgICAgIHNlbGYubWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLmV4ZWNfbW9kdWxlKG1vZHVsZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtb2R1bGUuaW5pdGlhbGl6ZWQpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihtb2R1bGUsICdfX3NwZWNfXycpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19zcGVjX18ub3JpZ2luLCAnZnJvemVuJykKKyAgICAgICAgICAgIHJldHVybiBtb2R1bGUsIHN0ZG91dC5nZXR2YWx1ZSgpCisKKyAgICBkZWYgdGVzdF9tb2R1bGUoc2VsZik6CisgICAgICAgIG5hbWUgPSAnX19oZWxsb19fJworICAgICAgICBtb2R1bGUsIG91dHB1dCA9IHNlbGYuZXhlY19tb2R1bGUobmFtZSkKKyAgICAgICAgY2hlY2sgPSB7J19fbmFtZV9fJzogbmFtZX0KKyAgICAgICAgZm9yIGF0dHIsIHZhbHVlIGluIGNoZWNrLml0ZW1zKCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGF0dHIobW9kdWxlLCBhdHRyKSwgdmFsdWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0cHV0LCAnSGVsbG8gd29ybGQhXG4nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihtb2R1bGUsICdfX3NwZWNfXycpKQorCisgICAgZGVmIHRlc3RfcGFja2FnZShzZWxmKToKKyAgICAgICAgbmFtZSA9ICdfX3BoZWxsb19fJworICAgICAgICBtb2R1bGUsIG91dHB1dCA9IHNlbGYuZXhlY19tb2R1bGUobmFtZSkKKyAgICAgICAgY2hlY2sgPSB7J19fbmFtZV9fJzogbmFtZX0KKyAgICAgICAgZm9yIGF0dHIsIHZhbHVlIGluIGNoZWNrLml0ZW1zKCk6CisgICAgICAgICAgICBhdHRyX3ZhbHVlID0gZ2V0YXR0cihtb2R1bGUsIGF0dHIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJfdmFsdWUsIHZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgJ2ZvciB7bmFtZX0ue2F0dHJ9LCB7Z2l2ZW4hcn0gIT0ge2V4cGVjdGVkIXJ9Jy5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPW5hbWUsIGF0dHI9YXR0ciwgZ2l2ZW49YXR0cl92YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkPXZhbHVlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXRwdXQsICdIZWxsbyB3b3JsZCFcbicpCisKKyAgICBkZWYgdGVzdF9sYWNraW5nX3BhcmVudChzZWxmKToKKyAgICAgICAgbmFtZSA9ICdfX3BoZWxsb19fLnNwYW0nCisgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKCdfX3BoZWxsb19fJyk6CisgICAgICAgICAgICBtb2R1bGUsIG91dHB1dCA9IHNlbGYuZXhlY19tb2R1bGUobmFtZSkKKyAgICAgICAgICAgIGNoZWNrID0geydfX25hbWVfXyc6IG5hbWV9CisgICAgICAgICAgICBmb3IgYXR0ciwgdmFsdWUgaW4gY2hlY2suaXRlbXMoKToKKyAgICAgICAgICAgICAgICBhdHRyX3ZhbHVlID0gZ2V0YXR0cihtb2R1bGUsIGF0dHIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRyX3ZhbHVlLCB2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdmb3Ige25hbWV9LnthdHRyfSwge2dpdmVufSAhPSB7ZXhwZWN0ZWQhcn0nLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9bmFtZSwgYXR0cj1hdHRyLCBnaXZlbj1hdHRyX3ZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQ9dmFsdWUpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXRwdXQsICdIZWxsbyB3b3JsZCFcbicpCisKKyAgICBkZWYgdGVzdF9tb2R1bGVfcmVwcihzZWxmKToKKyAgICAgICAgbmFtZSA9ICdfX2hlbGxvX18nCisgICAgICAgIG1vZHVsZSwgb3V0cHV0ID0gc2VsZi5leGVjX21vZHVsZShuYW1lKQorICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2lnbm9yZScsIERlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgICAgIHJlcHJfc3RyID0gc2VsZi5tYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIubW9kdWxlX3JlcHIobW9kdWxlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHJfc3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICI8bW9kdWxlICdfX2hlbGxvX18nIChmcm96ZW4pPiIpCisKKyAgICBkZWYgdGVzdF9tb2R1bGVfcmVwcl9pbmRpcmVjdChzZWxmKToKKyAgICAgICAgbmFtZSA9ICdfX2hlbGxvX18nCisgICAgICAgIG1vZHVsZSwgb3V0cHV0ID0gc2VsZi5leGVjX21vZHVsZShuYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIobW9kdWxlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiPG1vZHVsZSAnX19oZWxsb19fJyAoZnJvemVuKT4iKQorCisgICAgIyBObyB3YXkgdG8gdHJpZ2dlciBhbiBlcnJvciBpbiBhIGZyb3plbiBtb2R1bGUuCisgICAgdGVzdF9zdGF0ZV9hZnRlcl9mYWlsdXJlID0gTm9uZQorCisgICAgZGVmIHRlc3RfdW5sb2FkYWJsZShzZWxmKToKKyAgICAgICAgYXNzZXJ0IHNlbGYubWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLmZpbmRfbW9kdWxlKCdfbm90X3JlYWwnKSBpcyBOb25lCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgc2VsZi5leGVjX21vZHVsZSgnX25vdF9yZWFsJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24ubmFtZSwgJ19ub3RfcmVhbCcpCisKK0Zyb3plbl9FeGVjTW9kdWxlVGVzdHMsIFNvdXJjZV9FeGVjTW9kdWxlVGVzdHMgPSB1dGlsLnRlc3RfYm90aChFeGVjTW9kdWxlVGVzdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hY2hpbmVyeT1tYWNoaW5lcnkpCisKIAogY2xhc3MgTG9hZGVyVGVzdHMoYWJjLkxvYWRlclRlc3RzKToKIAogICAgIGRlZiB0ZXN0X21vZHVsZShzZWxmKToKICAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUoJ19faGVsbG9fXycpLCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBzdGRvdXQ6Ci0gICAgICAgICAgICBtb2R1bGUgPSBtYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIubG9hZF9tb2R1bGUoJ19faGVsbG9fXycpCisgICAgICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdpZ25vcmUnLCBEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5tYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIubG9hZF9tb2R1bGUoJ19faGVsbG9fXycpCiAgICAgICAgICAgICBjaGVjayA9IHsnX19uYW1lX18nOiAnX19oZWxsb19fJywKICAgICAgICAgICAgICAgICAgICAgJ19fcGFja2FnZV9fJzogJycsCi0gICAgICAgICAgICAgICAgICAgICdfX2xvYWRlcl9fJzogbWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLAorICAgICAgICAgICAgICAgICAgICAnX19sb2FkZXJfXyc6IHNlbGYubWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLAogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICBmb3IgYXR0ciwgdmFsdWUgaW4gY2hlY2suaXRlbXMoKToKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGF0dHIobW9kdWxlLCBhdHRyKSwgdmFsdWUpCkBAIC0yMSwxMSArMTA3LDEzIEBACiAKICAgICBkZWYgdGVzdF9wYWNrYWdlKHNlbGYpOgogICAgICAgICB3aXRoIHV0aWwudW5jYWNoZSgnX19waGVsbG9fXycpLCAgY2FwdHVyZWRfc3Rkb3V0KCkgYXMgc3Rkb3V0OgotICAgICAgICAgICAgbW9kdWxlID0gbWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLmxvYWRfbW9kdWxlKCdfX3BoZWxsb19fJykKKyAgICAgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2lnbm9yZScsIERlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLm1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlci5sb2FkX21vZHVsZSgnX19waGVsbG9fXycpCiAgICAgICAgICAgICBjaGVjayA9IHsnX19uYW1lX18nOiAnX19waGVsbG9fXycsCiAgICAgICAgICAgICAgICAgICAgICAnX19wYWNrYWdlX18nOiAnX19waGVsbG9fXycsCi0gICAgICAgICAgICAgICAgICAgICAnX19wYXRoX18nOiBbJ19fcGhlbGxvX18nXSwKLSAgICAgICAgICAgICAgICAgICAgICdfX2xvYWRlcl9fJzogbWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLAorICAgICAgICAgICAgICAgICAgICAgJ19fcGF0aF9fJzogW10sCisgICAgICAgICAgICAgICAgICAgICAnX19sb2FkZXJfXyc6IHNlbGYubWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLAogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgZm9yIGF0dHIsIHZhbHVlIGluIGNoZWNrLml0ZW1zKCk6CiAgICAgICAgICAgICAgICAgYXR0cl92YWx1ZSA9IGdldGF0dHIobW9kdWxlLCBhdHRyKQpAQCAtMzgsMTAgKzEyNiwxMiBAQAogICAgIGRlZiB0ZXN0X2xhY2tpbmdfcGFyZW50KHNlbGYpOgogICAgICAgICB3aXRoIHV0aWwudW5jYWNoZSgnX19waGVsbG9fXycsICdfX3BoZWxsb19fLnNwYW0nKSwgXAogICAgICAgICAgICAgIGNhcHR1cmVkX3N0ZG91dCgpIGFzIHN0ZG91dDoKLSAgICAgICAgICAgIG1vZHVsZSA9IG1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlci5sb2FkX21vZHVsZSgnX19waGVsbG9fXy5zcGFtJykKKyAgICAgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2lnbm9yZScsIERlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLm1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlci5sb2FkX21vZHVsZSgnX19waGVsbG9fXy5zcGFtJykKICAgICAgICAgICAgIGNoZWNrID0geydfX25hbWVfXyc6ICdfX3BoZWxsb19fLnNwYW0nLAogICAgICAgICAgICAgICAgICAgICAnX19wYWNrYWdlX18nOiAnX19waGVsbG9fXycsCi0gICAgICAgICAgICAgICAgICAgICdfX2xvYWRlcl9fJzogbWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLAorICAgICAgICAgICAgICAgICAgICAnX19sb2FkZXJfXyc6IHNlbGYubWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLAogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICBmb3IgYXR0ciwgdmFsdWUgaW4gY2hlY2suaXRlbXMoKToKICAgICAgICAgICAgICAgICBhdHRyX3ZhbHVlID0gZ2V0YXR0cihtb2R1bGUsIGF0dHIpCkBAIC01MywyOSArMTQzLDQzIEBACiAKICAgICBkZWYgdGVzdF9tb2R1bGVfcmV1c2Uoc2VsZik6CiAgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKCdfX2hlbGxvX18nKSwgY2FwdHVyZWRfc3Rkb3V0KCkgYXMgc3Rkb3V0OgotICAgICAgICAgICAgbW9kdWxlMSA9IG1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlci5sb2FkX21vZHVsZSgnX19oZWxsb19fJykKLSAgICAgICAgICAgIG1vZHVsZTIgPSBtYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIubG9hZF9tb2R1bGUoJ19faGVsbG9fXycpCisgICAgICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdpZ25vcmUnLCBEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgICAgICAgICAgbW9kdWxlMSA9IHNlbGYubWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLmxvYWRfbW9kdWxlKCdfX2hlbGxvX18nKQorICAgICAgICAgICAgICAgIG1vZHVsZTIgPSBzZWxmLm1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlci5sb2FkX21vZHVsZSgnX19oZWxsb19fJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMobW9kdWxlMSwgbW9kdWxlMikKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LmdldHZhbHVlKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdIZWxsbyB3b3JsZCFcbkhlbGxvIHdvcmxkIVxuJykKIAogICAgIGRlZiB0ZXN0X21vZHVsZV9yZXByKHNlbGYpOgogICAgICAgICB3aXRoIHV0aWwudW5jYWNoZSgnX19oZWxsb19fJyksIGNhcHR1cmVkX3N0ZG91dCgpOgotICAgICAgICAgICAgbW9kdWxlID0gbWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLmxvYWRfbW9kdWxlKCdfX2hlbGxvX18nKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKG1vZHVsZSksCisgICAgICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdpZ25vcmUnLCBEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5tYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIubG9hZF9tb2R1bGUoJ19faGVsbG9fXycpCisgICAgICAgICAgICAgICAgcmVwcl9zdHIgPSBzZWxmLm1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlci5tb2R1bGVfcmVwcihtb2R1bGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHJfc3RyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPG1vZHVsZSAnX19oZWxsb19fJyAoZnJvemVuKT4iKQogCisgICAgZGVmIHRlc3RfbW9kdWxlX3JlcHJfaW5kaXJlY3Qoc2VsZik6CisgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKCdfX2hlbGxvX18nKSwgY2FwdHVyZWRfc3Rkb3V0KCk6CisgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLm1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlci5sb2FkX21vZHVsZSgnX19oZWxsb19fJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKG1vZHVsZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgIjxtb2R1bGUgJ19faGVsbG9fXycgKGZyb3plbik+IikKKwogICAgICMgTm8gd2F5IHRvIHRyaWdnZXIgYW4gZXJyb3IgaW4gYSBmcm96ZW4gbW9kdWxlLgogICAgIHRlc3Rfc3RhdGVfYWZ0ZXJfZmFpbHVyZSA9IE5vbmUKIAogICAgIGRlZiB0ZXN0X3VubG9hZGFibGUoc2VsZik6Ci0gICAgICAgIGFzc2VydCBtYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIuZmluZF9tb2R1bGUoJ19ub3RfcmVhbCcpIGlzIE5vbmUKKyAgICAgICAgYXNzZXJ0IHNlbGYubWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLmZpbmRfbW9kdWxlKCdfbm90X3JlYWwnKSBpcyBOb25lCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpIGFzIGNtOgotICAgICAgICAgICAgbWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLmxvYWRfbW9kdWxlKCdfbm90X3JlYWwnKQorICAgICAgICAgICAgc2VsZi5tYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIubG9hZF9tb2R1bGUoJ19ub3RfcmVhbCcpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLm5hbWUsICdfbm90X3JlYWwnKQogCitGcm96ZW5fTG9hZGVyVGVzdHMsIFNvdXJjZV9Mb2FkZXJUZXN0cyA9IHV0aWwudGVzdF9ib3RoKExvYWRlclRlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWNoaW5lcnk9bWFjaGluZXJ5KQogCi1jbGFzcyBJbnNwZWN0TG9hZGVyVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCitjbGFzcyBJbnNwZWN0TG9hZGVyVGVzdHM6CiAKICAgICAiIiJUZXN0cyBmb3IgdGhlIEluc3BlY3RMb2FkZXIgbWV0aG9kcyBmb3IgRnJvemVuSW1wb3J0ZXIuIiIiCiAKQEAgLTgzLDE1ICsxODcsMTUgQEAKICAgICAgICAgIyBNYWtlIHN1cmUgdGhhdCB0aGUgY29kZSBvYmplY3QgaXMgZ29vZC4KICAgICAgICAgbmFtZSA9ICdfX2hlbGxvX18nCiAgICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgc3Rkb3V0OgotICAgICAgICAgICAgY29kZSA9IG1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlci5nZXRfY29kZShuYW1lKQotICAgICAgICAgICAgbW9kID0gaW1wLm5ld19tb2R1bGUobmFtZSkKKyAgICAgICAgICAgIGNvZGUgPSBzZWxmLm1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlci5nZXRfY29kZShuYW1lKQorICAgICAgICAgICAgbW9kID0gdHlwZXMuTW9kdWxlVHlwZShuYW1lKQogICAgICAgICAgICAgZXhlYyhjb2RlLCBtb2QuX19kaWN0X18pCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihtb2QsICdpbml0aWFsaXplZCcpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQuZ2V0dmFsdWUoKSwgJ0hlbGxvIHdvcmxkIVxuJykKIAogICAgIGRlZiB0ZXN0X2dldF9zb3VyY2Uoc2VsZik6CiAgICAgICAgICMgU2hvdWxkIGFsd2F5cyByZXR1cm4gTm9uZS4KLSAgICAgICAgcmVzdWx0ID0gbWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLmdldF9zb3VyY2UoJ19faGVsbG9fXycpCisgICAgICAgIHJlc3VsdCA9IHNlbGYubWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLmdldF9zb3VyY2UoJ19faGVsbG9fXycpCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlc3VsdCkKIAogICAgIGRlZiB0ZXN0X2lzX3BhY2thZ2Uoc2VsZik6CkBAIC05OSwyMiArMjAzLDIwIEBACiAgICAgICAgIHRlc3RfZm9yID0gKCgnX19oZWxsb19fJywgRmFsc2UpLCAoJ19fcGhlbGxvX18nLCBUcnVlKSwKICAgICAgICAgICAgICAgICAgICAgKCdfX3BoZWxsb19fLnNwYW0nLCBGYWxzZSkpCiAgICAgICAgIGZvciBuYW1lLCBpc19wYWNrYWdlIGluIHRlc3RfZm9yOgotICAgICAgICAgICAgcmVzdWx0ID0gbWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLmlzX3BhY2thZ2UobmFtZSkKKyAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYubWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLmlzX3BhY2thZ2UobmFtZSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYm9vbChyZXN1bHQpLCBpc19wYWNrYWdlKQogCiAgICAgZGVmIHRlc3RfZmFpbHVyZShzZWxmKToKICAgICAgICAgIyBSYWlzZSBJbXBvcnRFcnJvciBmb3IgbW9kdWxlcyB0aGF0IGFyZSBub3QgZnJvemVuLgogICAgICAgICBmb3IgbWV0aF9uYW1lIGluICgnZ2V0X2NvZGUnLCAnZ2V0X3NvdXJjZScsICdpc19wYWNrYWdlJyk6Ci0gICAgICAgICAgICBtZXRob2QgPSBnZXRhdHRyKG1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlciwgbWV0aF9uYW1lKQorICAgICAgICAgICAgbWV0aG9kID0gZ2V0YXR0cihzZWxmLm1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlciwgbWV0aF9uYW1lKQogICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcikgYXMgY206CiAgICAgICAgICAgICAgICAgbWV0aG9kKCdpbXBvcnRsaWInKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24ubmFtZSwgJ2ltcG9ydGxpYicpCiAKLQotZGVmIHRlc3RfbWFpbigpOgotICAgIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKLSAgICBydW5fdW5pdHRlc3QoTG9hZGVyVGVzdHMsIEluc3BlY3RMb2FkZXJUZXN0cykKK0Zyb3plbl9JTFRlc3RzLCBTb3VyY2VfSUxUZXN0cyA9IHV0aWwudGVzdF9ib3RoKEluc3BlY3RMb2FkZXJUZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hY2hpbmVyeT1tYWNoaW5lcnkpCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy9fX2luaXRfXy5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vX19pbml0X18ucHkKaW5kZXggMzY2ZTUzMS4uNGIxNmVjYyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy9fX2luaXRfXy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL19faW5pdF9fLnB5CkBAIC0xLDEzICsxLDUgQEAKLWZyb20gLi4gaW1wb3J0IHRlc3Rfc3VpdGUKLWltcG9ydCBvcy5wYXRoCi1pbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBvcworZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IGxvYWRfcGFja2FnZV90ZXN0cwogCi0KLWRlZiB0ZXN0X3N1aXRlKCk6Ci0gICAgZGlyZWN0b3J5ID0gb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKQotICAgIHJldHVybiB0ZXN0X3N1aXRlKCdpbXBvcnRsaWIudGVzdC5pbXBvcnRfJywgZGlyZWN0b3J5KQotCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAotICAgIHJ1bl91bml0dGVzdCh0ZXN0X3N1aXRlKCkpCitkZWYgbG9hZF90ZXN0cygqYXJncyk6CisgICAgcmV0dXJuIGxvYWRfcGFja2FnZV90ZXN0cyhvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAqYXJncykKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vX19tYWluX18ucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL19fbWFpbl9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwYTIzYTIKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL19fbWFpbl9fLnB5CkBAIC0wLDAgKzEsNCBAQAorZnJvbSAuIGltcG9ydCBsb2FkX3Rlc3RzCitpbXBvcnQgdW5pdHRlc3QKKwordW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfX19sb2FkZXJfXy5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9fX2xvYWRlcl9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkZjgwMTAKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfX19sb2FkZXJfXy5weQpAQCAtMCwwICsxLDcwIEBACitmcm9tIGltcG9ydGxpYiBpbXBvcnQgbWFjaGluZXJ5CitpbXBvcnQgc3lzCitpbXBvcnQgdHlwZXMKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIC4uIGltcG9ydCB1dGlsCitmcm9tIC4gaW1wb3J0IHV0aWwgYXMgaW1wb3J0X3V0aWwKKworCitjbGFzcyBTcGVjTG9hZGVyTW9jazoKKworICAgIGRlZiBmaW5kX3NwZWMoc2VsZiwgZnVsbG5hbWUsIHBhdGg9Tm9uZSwgdGFyZ2V0PU5vbmUpOgorICAgICAgICByZXR1cm4gbWFjaGluZXJ5Lk1vZHVsZVNwZWMoZnVsbG5hbWUsIHNlbGYpCisKKyAgICBkZWYgZXhlY19tb2R1bGUoc2VsZiwgbW9kdWxlKToKKyAgICAgICAgcGFzcworCisKK2NsYXNzIFNwZWNMb2FkZXJBdHRyaWJ1dGVUZXN0czoKKworICAgIGRlZiB0ZXN0X19fbG9hZGVyX18oc2VsZik6CisgICAgICAgIGxvYWRlciA9IFNwZWNMb2FkZXJNb2NrKCkKKyAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUoJ2JsYWgnKSwgdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVtsb2FkZXJdKToKKyAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuX19pbXBvcnRfXygnYmxhaCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVyLCBtb2R1bGUuX19sb2FkZXJfXykKKworRnJvemVuX1NwZWNUZXN0cywgU291cmNlX1NwZWNUZXN0cyA9IHV0aWwudGVzdF9ib3RoKAorICAgICAgICBTcGVjTG9hZGVyQXR0cmlidXRlVGVzdHMsIF9faW1wb3J0X189aW1wb3J0X3V0aWwuX19pbXBvcnRfXykKKworCitjbGFzcyBMb2FkZXJNb2NrOgorCisgICAgZGVmIGZpbmRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lLCBwYXRoPU5vbmUpOgorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIGxvYWRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lKToKKyAgICAgICAgc3lzLm1vZHVsZXNbZnVsbG5hbWVdID0gc2VsZi5tb2R1bGUKKyAgICAgICAgcmV0dXJuIHNlbGYubW9kdWxlCisKKworY2xhc3MgTG9hZGVyQXR0cmlidXRlVGVzdHM6CisKKyAgICBkZWYgdGVzdF9fX2xvYWRlcl9fX21pc3Npbmcoc2VsZik6CisgICAgICAgIG1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUoJ2JsYWgnKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBkZWwgbW9kdWxlLl9fbG9hZGVyX18KKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBsb2FkZXIgPSBMb2FkZXJNb2NrKCkKKyAgICAgICAgbG9hZGVyLm1vZHVsZSA9IG1vZHVsZQorICAgICAgICB3aXRoIHV0aWwudW5jYWNoZSgnYmxhaCcpLCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W2xvYWRlcl0pOgorICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5fX2ltcG9ydF9fKCdibGFoJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZXIsIG1vZHVsZS5fX2xvYWRlcl9fKQorCisgICAgZGVmIHRlc3RfX19sb2FkZXJfX19pc19Ob25lKHNlbGYpOgorICAgICAgICBtb2R1bGUgPSB0eXBlcy5Nb2R1bGVUeXBlKCdibGFoJykKKyAgICAgICAgbW9kdWxlLl9fbG9hZGVyX18gPSBOb25lCisgICAgICAgIGxvYWRlciA9IExvYWRlck1vY2soKQorICAgICAgICBsb2FkZXIubW9kdWxlID0gbW9kdWxlCisgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKCdibGFoJyksIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bbG9hZGVyXSk6CisgICAgICAgICAgICByZXR1cm5lZF9tb2R1bGUgPSBzZWxmLl9faW1wb3J0X18oJ2JsYWgnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlciwgbW9kdWxlLl9fbG9hZGVyX18pCisKKworRnJvemVuX1Rlc3RzLCBTb3VyY2VfVGVzdHMgPSB1dGlsLnRlc3RfYm90aChMb2FkZXJBdHRyaWJ1dGVUZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pbXBvcnRfXz1pbXBvcnRfdXRpbC5fX2ltcG9ydF9fKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfX19wYWNrYWdlX18ucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfX19wYWNrYWdlX18ucHkKaW5kZXggNzgzY2RlMS4uMmUxOTcyNSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X19fcGFja2FnZV9fLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9fX3BhY2thZ2VfXy5weQpAQCAtOSw3ICs5LDcgQEAKIGZyb20gLiBpbXBvcnQgdXRpbCBhcyBpbXBvcnRfdXRpbAogCiAKLWNsYXNzIFVzaW5nX19wYWNrYWdlX18odW5pdHRlc3QuVGVzdENhc2UpOgorY2xhc3MgVXNpbmdfX3BhY2thZ2VfXzoKIAogICAgICIiIlVzZSBvZiBfX3BhY2thZ2VfXyBzdXBlcmNlZGVzIHRoZSB1c2Ugb2YgX19uYW1lX18vX19wYXRoX18gdG8gY2FsY3VsYXRlCiAgICAgd2hhdCBwYWNrYWdlIGEgbW9kdWxlIGJlbG9uZ3MgdG8uIFRoZSBiYXNpYyBhbGdvcml0aG0gaXMgW19fcGFja2FnZV9fXTo6CkBAIC0zNiwxMCArMzYsMTAgQEAKIAogICAgIGRlZiB0ZXN0X3VzaW5nX19fcGFja2FnZV9fKHNlbGYpOgogICAgICAgICAjIFtfX3BhY2thZ2VfX10KLSAgICAgICAgd2l0aCB1dGlsLm1vY2tfbW9kdWxlcygncGtnLl9faW5pdF9fJywgJ3BrZy5mYWtlJykgYXMgaW1wb3J0ZXI6CisgICAgICAgIHdpdGggc2VsZi5tb2NrX21vZHVsZXMoJ3BrZy5fX2luaXRfXycsICdwa2cuZmFrZScpIGFzIGltcG9ydGVyOgogICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W2ltcG9ydGVyXSk6Ci0gICAgICAgICAgICAgICAgaW1wb3J0X3V0aWwuaW1wb3J0XygncGtnLmZha2UnKQotICAgICAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydF91dGlsLmltcG9ydF8oJycsCisgICAgICAgICAgICAgICAgc2VsZi5fX2ltcG9ydF9fKCdwa2cuZmFrZScpCisgICAgICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5fX2ltcG9ydF9fKCcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWxzPXsnX19wYWNrYWdlX18nOiAncGtnLmZha2UnfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbWxpc3Q9WydhdHRyJ10sIGxldmVsPTIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCAncGtnJykKQEAgLTQ5LDEwICs0OSwxMCBAQAogICAgICAgICBnbG9iYWxzXyA9IHsnX19uYW1lX18nOiAncGtnLmZha2UnLCAnX19wYXRoX18nOiBbXX0KICAgICAgICAgaWYgcGFja2FnZV9hc19Ob25lOgogICAgICAgICAgICAgZ2xvYmFsc19bJ19fcGFja2FnZV9fJ10gPSBOb25lCi0gICAgICAgIHdpdGggdXRpbC5tb2NrX21vZHVsZXMoJ3BrZy5fX2luaXRfXycsICdwa2cuZmFrZScpIGFzIGltcG9ydGVyOgorICAgICAgICB3aXRoIHNlbGYubW9ja19tb2R1bGVzKCdwa2cuX19pbml0X18nLCAncGtnLmZha2UnKSBhcyBpbXBvcnRlcjoKICAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVtpbXBvcnRlcl0pOgotICAgICAgICAgICAgICAgIGltcG9ydF91dGlsLmltcG9ydF8oJ3BrZy5mYWtlJykKLSAgICAgICAgICAgICAgICBtb2R1bGUgPSBpbXBvcnRfdXRpbC5pbXBvcnRfKCcnLCBnbG9iYWxzPSBnbG9iYWxzXywKKyAgICAgICAgICAgICAgICBzZWxmLl9faW1wb3J0X18oJ3BrZy5mYWtlJykKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLl9faW1wb3J0X18oJycsIGdsb2JhbHM9IGdsb2JhbHNfLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbWxpc3Q9WydhdHRyJ10sIGxldmVsPTIpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX25hbWVfXywgJ3BrZycpCiAKQEAgLTYzLDE2ICs2MywyNyBAQAogICAgIGRlZiB0ZXN0X2JhZF9fcGFja2FnZV9fKHNlbGYpOgogICAgICAgICBnbG9iYWxzID0geydfX3BhY2thZ2VfXyc6ICc8bm90IHJlYWw+J30KICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhTeXN0ZW1FcnJvcik6Ci0gICAgICAgICAgICBpbXBvcnRfdXRpbC5pbXBvcnRfKCcnLCBnbG9iYWxzLCB7fSwgWydyZWxpbXBvcnQnXSwgMSkKKyAgICAgICAgICAgIHNlbGYuX19pbXBvcnRfXygnJywgZ2xvYmFscywge30sIFsncmVsaW1wb3J0J10sIDEpCiAKICAgICBkZWYgdGVzdF9idW5rX19wYWNrYWdlX18oc2VsZik6CiAgICAgICAgIGdsb2JhbHMgPSB7J19fcGFja2FnZV9fJzogNDJ9CiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKLSAgICAgICAgICAgIGltcG9ydF91dGlsLmltcG9ydF8oJycsIGdsb2JhbHMsIHt9LCBbJ3JlbGltcG9ydCddLCAxKQorICAgICAgICAgICAgc2VsZi5fX2ltcG9ydF9fKCcnLCBnbG9iYWxzLCB7fSwgWydyZWxpbXBvcnQnXSwgMSkKKworY2xhc3MgVXNpbmdfX3BhY2thZ2VfX1BFUDMwMihVc2luZ19fcGFja2FnZV9fKToKKyAgICBtb2NrX21vZHVsZXMgPSB1dGlsLm1vY2tfbW9kdWxlcworCitGcm96ZW5fVXNpbmdQYWNrYWdlUEVQMzAyLCBTb3VyY2VfVXNpbmdQYWNrYWdlUEVQMzAyID0gdXRpbC50ZXN0X2JvdGgoCisgICAgICAgIFVzaW5nX19wYWNrYWdlX19QRVAzMDIsIF9faW1wb3J0X189aW1wb3J0X3V0aWwuX19pbXBvcnRfXykKKworY2xhc3MgVXNpbmdfX3BhY2thZ2VfX1BFUDMwMihVc2luZ19fcGFja2FnZV9fKToKKyAgICBtb2NrX21vZHVsZXMgPSB1dGlsLm1vY2tfc3BlYworCitGcm96ZW5fVXNpbmdQYWNrYWdlUEVQNDUxLCBTb3VyY2VfVXNpbmdQYWNrYWdlUEVQNDUxID0gdXRpbC50ZXN0X2JvdGgoCisgICAgICAgIFVzaW5nX19wYWNrYWdlX19QRVAzMDIsIF9faW1wb3J0X189aW1wb3J0X3V0aWwuX19pbXBvcnRfXykKIAogCi1AaW1wb3J0X3V0aWwuaW1wb3J0bGliX29ubHkKLWNsYXNzIFNldHRpbmdfX3BhY2thZ2VfXyh1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBTZXR0aW5nX19wYWNrYWdlX186CiAKICAgICAiIiJCZWNhdXNlIF9fcGFja2FnZV9fIGlzIGEgbmV3IGZlYXR1cmUsIGl0IGlzIG5vdCBhbHdheXMgc2V0IGJ5IGEgbG9hZGVyLgogICAgIEltcG9ydCB3aWxsIHNldCBpdCBhcyBuZWVkZWQgdG8gaGVscCB3aXRoIHRoZSB0cmFuc2l0aW9uIHRvIHJlbHlpbmcgb24KQEAgLTg0LDM2ICs5NSwzOSBAQAogCiAgICAgIiIiCiAKKyAgICBfX2ltcG9ydF9fID0gaW1wb3J0X3V0aWwuX19pbXBvcnRfX1sxXQorCiAgICAgIyBbdG9wLWxldmVsXQogICAgIGRlZiB0ZXN0X3RvcF9sZXZlbChzZWxmKToKLSAgICAgICAgd2l0aCB1dGlsLm1vY2tfbW9kdWxlcygndG9wX2xldmVsJykgYXMgbW9jazoKKyAgICAgICAgd2l0aCBzZWxmLm1vY2tfbW9kdWxlcygndG9wX2xldmVsJykgYXMgbW9jazoKICAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVttb2NrXSk6CiAgICAgICAgICAgICAgICAgZGVsIG1vY2tbJ3RvcF9sZXZlbCddLl9fcGFja2FnZV9fCi0gICAgICAgICAgICAgICAgbW9kdWxlID0gaW1wb3J0X3V0aWwuaW1wb3J0XygndG9wX2xldmVsJykKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLl9faW1wb3J0X18oJ3RvcF9sZXZlbCcpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19wYWNrYWdlX18sICcnKQogCiAgICAgIyBbcGFja2FnZV0KICAgICBkZWYgdGVzdF9wYWNrYWdlKHNlbGYpOgotICAgICAgICB3aXRoIHV0aWwubW9ja19tb2R1bGVzKCdwa2cuX19pbml0X18nKSBhcyBtb2NrOgorICAgICAgICB3aXRoIHNlbGYubW9ja19tb2R1bGVzKCdwa2cuX19pbml0X18nKSBhcyBtb2NrOgogICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W21vY2tdKToKICAgICAgICAgICAgICAgICBkZWwgbW9ja1sncGtnJ10uX19wYWNrYWdlX18KLSAgICAgICAgICAgICAgICBtb2R1bGUgPSBpbXBvcnRfdXRpbC5pbXBvcnRfKCdwa2cnKQorICAgICAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuX19pbXBvcnRfXygncGtnJykKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX3BhY2thZ2VfXywgJ3BrZycpCiAKICAgICAjIFtzdWJtb2R1bGVdCiAgICAgZGVmIHRlc3Rfc3VibW9kdWxlKHNlbGYpOgotICAgICAgICB3aXRoIHV0aWwubW9ja19tb2R1bGVzKCdwa2cuX19pbml0X18nLCAncGtnLm1vZCcpIGFzIG1vY2s6CisgICAgICAgIHdpdGggc2VsZi5tb2NrX21vZHVsZXMoJ3BrZy5fX2luaXRfXycsICdwa2cubW9kJykgYXMgbW9jazoKICAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVttb2NrXSk6CiAgICAgICAgICAgICAgICAgZGVsIG1vY2tbJ3BrZy5tb2QnXS5fX3BhY2thZ2VfXwotICAgICAgICAgICAgICAgIHBrZyA9IGltcG9ydF91dGlsLmltcG9ydF8oJ3BrZy5tb2QnKQorICAgICAgICAgICAgICAgIHBrZyA9IHNlbGYuX19pbXBvcnRfXygncGtnLm1vZCcpCiAgICAgICAgICAgICAgICAgbW9kdWxlID0gZ2V0YXR0cihwa2csICdtb2QnKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fcGFja2FnZV9fLCAncGtnJykKIAorY2xhc3MgU2V0dGluZ19fcGFja2FnZV9fUEVQMzAyKFNldHRpbmdfX3BhY2thZ2VfXywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIG1vY2tfbW9kdWxlcyA9IHV0aWwubW9ja19tb2R1bGVzCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0Ci0gICAgcnVuX3VuaXR0ZXN0KFVzaW5nX19wYWNrYWdlX18sIFNldHRpbmdfX3BhY2thZ2VfXykKK2NsYXNzIFNldHRpbmdfX3BhY2thZ2VfX1BFUDQ1MShTZXR0aW5nX19wYWNrYWdlX18sIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBtb2NrX21vZHVsZXMgPSB1dGlsLm1vY2tfc3BlYwogCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9hcGkucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfYXBpLnB5CmluZGV4IDNkNGNkOTQuLjQzOWMxMDUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9hcGkucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X2FwaS5weQpAQCAtMSwyMyArMSw0MSBAQAotZnJvbSAuLiBpbXBvcnQgdXRpbCBhcyBpbXBvcnRsaWJfdGVzdF91dGlsCi1mcm9tIC4gaW1wb3J0IHV0aWwKLWltcG9ydCBpbXAKK2Zyb20gLi4gaW1wb3J0IHV0aWwKK2Zyb20gLiBpbXBvcnQgdXRpbCBhcyBpbXBvcnRfdXRpbAorCitmcm9tIGltcG9ydGxpYiBpbXBvcnQgbWFjaGluZXJ5CiBpbXBvcnQgc3lzCitpbXBvcnQgdHlwZXMKIGltcG9ydCB1bml0dGVzdAogCitQS0dfTkFNRSA9ICdmaW5lJworU1VCTU9EX05BTUUgPSAnZmluZS5ib2d1cycKIAotY2xhc3MgQmFkTG9hZGVyRmluZGVyOgotICAgIGJhZCA9ICdmaW5lLmJvZ3VzJworCitjbGFzcyBCYWRTcGVjRmluZGVyTG9hZGVyOgogICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBmaW5kX21vZHVsZShjbHMsIGZ1bGxuYW1lLCBwYXRoKToKLSAgICAgICAgaWYgZnVsbG5hbWUgPT0gY2xzLmJhZDoKLSAgICAgICAgICAgIHJldHVybiBjbHMKLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgbG9hZF9tb2R1bGUoY2xzLCBmdWxsbmFtZSk6Ci0gICAgICAgIGlmIGZ1bGxuYW1lID09IGNscy5iYWQ6CisgICAgZGVmIGZpbmRfc3BlYyhjbHMsIGZ1bGxuYW1lLCBwYXRoPU5vbmUsIHRhcmdldD1Ob25lKToKKyAgICAgICAgaWYgZnVsbG5hbWUgPT0gU1VCTU9EX05BTUU6CisgICAgICAgICAgICBzcGVjID0gbWFjaGluZXJ5Lk1vZHVsZVNwZWMoZnVsbG5hbWUsIGNscykKKyAgICAgICAgICAgIHJldHVybiBzcGVjCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGV4ZWNfbW9kdWxlKG1vZHVsZSk6CisgICAgICAgIGlmIG1vZHVsZS5fX25hbWVfXyA9PSBTVUJNT0RfTkFNRToKICAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCdJIGNhbm5vdCBiZSBsb2FkZWQhJykKIAogCi1jbGFzcyBBUElUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKK2NsYXNzIEJhZExvYWRlckZpbmRlcjoKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZmluZF9tb2R1bGUoY2xzLCBmdWxsbmFtZSwgcGF0aCk6CisgICAgICAgIGlmIGZ1bGxuYW1lID09IFNVQk1PRF9OQU1FOgorICAgICAgICAgICAgcmV0dXJuIGNscworCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGxvYWRfbW9kdWxlKGNscywgZnVsbG5hbWUpOgorICAgICAgICBpZiBmdWxsbmFtZSA9PSBTVUJNT0RfTkFNRToKKyAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCdJIGNhbm5vdCBiZSBsb2FkZWQhJykKKworCitjbGFzcyBBUElUZXN0OgogCiAgICAgIiIiVGVzdCBBUEktc3BlY2lmaWMgZGV0YWlscyBmb3IgX19pbXBvcnRfXyAoZS5nLiByYWlzaW5nIHRoZSByaWdodAogICAgIGV4Y2VwdGlvbiB3aGVuIHBhc3NpbmcgaW4gYW4gaW50IGZvciB0aGUgbW9kdWxlIG5hbWUpLiIiIgpAQCAtMjUsNDMgKzQzLDUyIEBACiAgICAgZGVmIHRlc3RfbmFtZV9yZXF1aXJlc19ycGFyaXRpb24oc2VsZik6CiAgICAgICAgICMgUmFpc2UgVHlwZUVycm9yIGlmIGEgbm9uLXN0cmluZyBpcyBwYXNzZWQgaW4gZm9yIHRoZSBtb2R1bGUgbmFtZS4KICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgotICAgICAgICAgICAgdXRpbC5pbXBvcnRfKDQyKQorICAgICAgICAgICAgc2VsZi5fX2ltcG9ydF9fKDQyKQogCiAgICAgZGVmIHRlc3RfbmVnYXRpdmVfbGV2ZWwoc2VsZik6CiAgICAgICAgICMgUmFpc2UgVmFsdWVFcnJvciB3aGVuIGEgbmVnYXRpdmUgbGV2ZWwgaXMgc3BlY2lmaWVkLgogICAgICAgICAjIFBFUCAzMjggZGlkIGF3YXkgd2l0aCBzeXMubW9kdWxlIE5vbmUgZW50cmllcyBhbmQgdGhlIGFtYmlndWl0eSBvZgogICAgICAgICAjIGFic29sdXRlL3JlbGF0aXZlIGltcG9ydHMuCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6Ci0gICAgICAgICAgICB1dGlsLmltcG9ydF8oJ29zJywgZ2xvYmFscygpLCBsZXZlbD0tMSkKKyAgICAgICAgICAgIHNlbGYuX19pbXBvcnRfXygnb3MnLCBnbG9iYWxzKCksIGxldmVsPS0xKQogCiAgICAgZGVmIHRlc3Rfbm9uZXhpc3RlbnRfZnJvbWxpc3RfZW50cnkoc2VsZik6CiAgICAgICAgICMgSWYgc29tZXRoaW5nIGluIGZyb21saXN0IGRvZXNuJ3QgZXhpc3QsIHRoYXQncyBva2F5LgogICAgICAgICAjIGlzc3VlMTU3MTUKLSAgICAgICAgbW9kID0gaW1wLm5ld19tb2R1bGUoJ2ZpbmUnKQorICAgICAgICBtb2QgPSB0eXBlcy5Nb2R1bGVUeXBlKFBLR19OQU1FKQogICAgICAgICBtb2QuX19wYXRoX18gPSBbJ1hYWCddCi0gICAgICAgIHdpdGggaW1wb3J0bGliX3Rlc3RfdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVtCYWRMb2FkZXJGaW5kZXJdKToKLSAgICAgICAgICAgIHdpdGggaW1wb3J0bGliX3Rlc3RfdXRpbC51bmNhY2hlKCdmaW5lJyk6Ci0gICAgICAgICAgICAgICAgc3lzLm1vZHVsZXNbJ2ZpbmUnXSA9IG1vZAotICAgICAgICAgICAgICAgIHV0aWwuaW1wb3J0XygnZmluZScsIGZyb21saXN0PVsnbm90IGhlcmUnXSkKKyAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W3NlbGYuYmFkX2ZpbmRlcl9sb2FkZXJdKToKKyAgICAgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKFBLR19OQU1FKToKKyAgICAgICAgICAgICAgICBzeXMubW9kdWxlc1tQS0dfTkFNRV0gPSBtb2QKKyAgICAgICAgICAgICAgICBzZWxmLl9faW1wb3J0X18oUEtHX05BTUUsIGZyb21saXN0PVsnbm90IGhlcmUnXSkKIAogICAgIGRlZiB0ZXN0X2Zyb21saXN0X2xvYWRfZXJyb3JfcHJvcGFnYXRlcyhzZWxmKToKICAgICAgICAgIyBJZiBzb21ldGhpbmcgaW4gZnJvbWxpc3QgdHJpZ2dlcnMgYW4gZXhjZXB0aW9uIG5vdCByZWxhdGVkIHRvIG5vdAogICAgICAgICAjIGV4aXN0aW5nLCBsZXQgdGhhdCBleGNlcHRpb24gcHJvcGFnYXRlLgogICAgICAgICAjIGlzc3VlMTUzMTYKLSAgICAgICAgbW9kID0gaW1wLm5ld19tb2R1bGUoJ2ZpbmUnKQorICAgICAgICBtb2QgPSB0eXBlcy5Nb2R1bGVUeXBlKFBLR19OQU1FKQogICAgICAgICBtb2QuX19wYXRoX18gPSBbJ1hYWCddCi0gICAgICAgIHdpdGggaW1wb3J0bGliX3Rlc3RfdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVtCYWRMb2FkZXJGaW5kZXJdKToKLSAgICAgICAgICAgIHdpdGggaW1wb3J0bGliX3Rlc3RfdXRpbC51bmNhY2hlKCdmaW5lJyk6Ci0gICAgICAgICAgICAgICAgc3lzLm1vZHVsZXNbJ2ZpbmUnXSA9IG1vZAorICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bc2VsZi5iYWRfZmluZGVyX2xvYWRlcl0pOgorICAgICAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUoUEtHX05BTUUpOgorICAgICAgICAgICAgICAgIHN5cy5tb2R1bGVzW1BLR19OQU1FXSA9IG1vZAogICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpOgotICAgICAgICAgICAgICAgICAgICB1dGlsLmltcG9ydF8oJ2ZpbmUnLCBmcm9tbGlzdD1bJ2JvZ3VzJ10pCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX19pbXBvcnRfXyhQS0dfTkFNRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb21saXN0PVtTVUJNT0RfTkFNRS5ycGFydGl0aW9uKCcuJylbLTFdXSkKIAogCitjbGFzcyBPbGRBUElUZXN0cyhBUElUZXN0KToKKyAgICBiYWRfZmluZGVyX2xvYWRlciA9IEJhZExvYWRlckZpbmRlcgogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAotICAgIHJ1bl91bml0dGVzdChBUElUZXN0KQorRnJvemVuX09sZEFQSVRlc3RzLCBTb3VyY2VfT2xkQVBJVGVzdHMgPSB1dGlsLnRlc3RfYm90aCgKKyAgICAgICAgT2xkQVBJVGVzdHMsIF9faW1wb3J0X189aW1wb3J0X3V0aWwuX19pbXBvcnRfXykKKworCitjbGFzcyBTcGVjQVBJVGVzdHMoQVBJVGVzdCk6CisgICAgYmFkX2ZpbmRlcl9sb2FkZXIgPSBCYWRTcGVjRmluZGVyTG9hZGVyCisKK0Zyb3plbl9TcGVjQVBJVGVzdHMsIFNvdXJjZV9TcGVjQVBJVGVzdHMgPSB1dGlsLnRlc3RfYm90aCgKKyAgICAgICAgU3BlY0FQSVRlc3RzLCBfX2ltcG9ydF9fPWltcG9ydF91dGlsLl9faW1wb3J0X18pCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X2NhY2hpbmcucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfY2FjaGluZy5weQppbmRleCAyMDczNzhhLi5jMjkyZWU0IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfY2FjaGluZy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfY2FjaGluZy5weQpAQCAtNiw3ICs2LDcgQEAKIGltcG9ydCB1bml0dGVzdAogCiAKLWNsYXNzIFVzZUNhY2hlKHVuaXR0ZXN0LlRlc3RDYXNlKToKK2NsYXNzIFVzZUNhY2hlOgogCiAgICAgIiIiV2hlbiBpdCBjb21lcyB0byBzeXMubW9kdWxlcywgaW1wb3J0IHByZWZlcnMgaXQgb3ZlciBhbnl0aGluZyBlbHNlLgogCkBAIC0yMSwxMiArMjEsMTMgQEAKICAgICBJbXBvcnRFcnJvciBpcyByYWlzZWQgW05vbmUgaW4gY2FjaGVdLgogCiAgICAgIiIiCisKICAgICBkZWYgdGVzdF91c2luZ19jYWNoZShzZWxmKToKICAgICAgICAgIyBbdXNlIGNhY2hlXQogICAgICAgICBtb2R1bGVfdG9fdXNlID0gInNvbWUgbW9kdWxlIGZvdW5kISIKICAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUoJ3NvbWVfbW9kdWxlJyk6CiAgICAgICAgICAgICBzeXMubW9kdWxlc1snc29tZV9tb2R1bGUnXSA9IG1vZHVsZV90b191c2UKLSAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydF91dGlsLmltcG9ydF8oJ3NvbWVfbW9kdWxlJykKKyAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuX19pbXBvcnRfXygnc29tZV9tb2R1bGUnKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpZChtb2R1bGVfdG9fdXNlKSwgaWQobW9kdWxlKSkKIAogICAgIGRlZiB0ZXN0X05vbmVfaW5fY2FjaGUoc2VsZik6CkBAIC0zNSw5ICszNiwxOSBAQAogICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKToKICAgICAgICAgICAgIHN5cy5tb2R1bGVzW25hbWVdID0gTm9uZQogICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcikgYXMgY206Ci0gICAgICAgICAgICAgICAgaW1wb3J0X3V0aWwuaW1wb3J0XyhuYW1lKQorICAgICAgICAgICAgICAgIHNlbGYuX19pbXBvcnRfXyhuYW1lKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24ubmFtZSwgbmFtZSkKIAorRnJvemVuX1VzZUNhY2hlLCBTb3VyY2VfVXNlQ2FjaGUgPSB1dGlsLnRlc3RfYm90aCgKKyAgICAgICAgVXNlQ2FjaGUsIF9faW1wb3J0X189aW1wb3J0X3V0aWwuX19pbXBvcnRfXykKKworCitjbGFzcyBJbXBvcnRsaWJVc2VDYWNoZShVc2VDYWNoZSwgdW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgIyBQZXJ0aW5lbnQgb25seSB0byBQRVAgMzAyOyBleGVjX21vZHVsZSgpIGRvZXNuJ3QgcmV0dXJuIGEgbW9kdWxlLgorCisgICAgX19pbXBvcnRfXyA9IGltcG9ydF91dGlsLl9faW1wb3J0X19bMV0KKwogICAgIGRlZiBjcmVhdGVfbW9jayhzZWxmLCAqbmFtZXMsIHJldHVybl89Tm9uZSk6CiAgICAgICAgIG1vY2sgPSB1dGlsLm1vY2tfbW9kdWxlcygqbmFtZXMpCiAgICAgICAgIG9yaWdpbmFsX2xvYWQgPSBtb2NrLmxvYWRfbW9kdWxlCkBAIC00OSw0MCArNjAsMzMgQEAKIAogICAgICMgX19pbXBvcnRfXyBpbmNvbnNpc3RlbnQgYmV0d2VlbiBsb2FkZXJzIGFuZCBidWlsdC1pbiBpbXBvcnQgd2hlbiBpdCBjb21lcwogICAgICMgICB0byB3aGVuIHRvIHVzZSB0aGUgbW9kdWxlIGluIHN5cy5tb2R1bGVzIGFuZCB3aGVuIG5vdCB0by4KLSAgICBAaW1wb3J0X3V0aWwuaW1wb3J0bGliX29ubHkKICAgICBkZWYgdGVzdF91c2luZ19jYWNoZV9hZnRlcl9sb2FkZXIoc2VsZik6CiAgICAgICAgICMgW2Zyb20gY2FjaGUgb24gcmV0dXJuXQogICAgICAgICB3aXRoIHNlbGYuY3JlYXRlX21vY2soJ21vZHVsZScpIGFzIG1vY2s6CiAgICAgICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bbW9ja10pOgotICAgICAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydF91dGlsLmltcG9ydF8oJ21vZHVsZScpCisgICAgICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5fX2ltcG9ydF9fKCdtb2R1bGUnKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaWQobW9kdWxlKSwgaWQoc3lzLm1vZHVsZXNbJ21vZHVsZSddKSkKIAogICAgICMgU2VlIHRlc3RfdXNpbmdfY2FjaGVfYWZ0ZXJfbG9hZGVyKCkgZm9yIHJlYXNvbmluZy4KLSAgICBAaW1wb3J0X3V0aWwuaW1wb3J0bGliX29ubHkKICAgICBkZWYgdGVzdF91c2luZ19jYWNoZV9mb3JfYXNzaWduaW5nX3RvX2F0dHJpYnV0ZShzZWxmKToKICAgICAgICAgIyBbZnJvbSBjYWNoZSB0byBhdHRyaWJ1dGVdCiAgICAgICAgIHdpdGggc2VsZi5jcmVhdGVfbW9jaygncGtnLl9faW5pdF9fJywgJ3BrZy5tb2R1bGUnKSBhcyBpbXBvcnRlcjoKICAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVtpbXBvcnRlcl0pOgotICAgICAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydF91dGlsLmltcG9ydF8oJ3BrZy5tb2R1bGUnKQorICAgICAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuX19pbXBvcnRfXygncGtnLm1vZHVsZScpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIobW9kdWxlLCAnbW9kdWxlJykpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpZChtb2R1bGUubW9kdWxlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkKHN5cy5tb2R1bGVzWydwa2cubW9kdWxlJ10pKQogCiAgICAgIyBTZWUgdGVzdF91c2luZ19jYWNoZV9hZnRlcl9sb2FkZXIoKSBmb3IgcmVhc29uaW5nLgotICAgIEBpbXBvcnRfdXRpbC5pbXBvcnRsaWJfb25seQogICAgIGRlZiB0ZXN0X3VzaW5nX2NhY2hlX2Zvcl9mcm9tbGlzdChzZWxmKToKICAgICAgICAgIyBbZnJvbSBjYWNoZSBmb3IgZnJvbWxpc3RdCiAgICAgICAgIHdpdGggc2VsZi5jcmVhdGVfbW9jaygncGtnLl9faW5pdF9fJywgJ3BrZy5tb2R1bGUnKSBhcyBpbXBvcnRlcjoKICAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVtpbXBvcnRlcl0pOgotICAgICAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydF91dGlsLmltcG9ydF8oJ3BrZycsIGZyb21saXN0PVsnbW9kdWxlJ10pCisgICAgICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5fX2ltcG9ydF9fKCdwa2cnLCBmcm9tbGlzdD1bJ21vZHVsZSddKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKG1vZHVsZSwgJ21vZHVsZScpKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaWQobW9kdWxlLm1vZHVsZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZChzeXMubW9kdWxlc1sncGtnLm1vZHVsZSddKSkKIAogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAotICAgIHJ1bl91bml0dGVzdChVc2VDYWNoZSkKLQogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X2Zyb21saXN0LnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X2Zyb21saXN0LnB5CmluZGV4IGMxNmMzMzcuLmE3NTViNzUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9mcm9tbGlzdC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfZnJvbWxpc3QucHkKQEAgLTEsMTAgKzEsMTAgQEAKICIiIlRlc3QgdGhhdCB0aGUgc2VtYW50aWNzIHJlbGF0aW5nIHRvIHRoZSAnZnJvbWxpc3QnIGFyZ3VtZW50IGFyZSBjb3JyZWN0LiIiIgogZnJvbSAuLiBpbXBvcnQgdXRpbAogZnJvbSAuIGltcG9ydCB1dGlsIGFzIGltcG9ydF91dGlsCi1pbXBvcnQgaW1wCiBpbXBvcnQgdW5pdHRlc3QKIAotY2xhc3MgUmV0dXJuVmFsdWUodW5pdHRlc3QuVGVzdENhc2UpOgorCitjbGFzcyBSZXR1cm5WYWx1ZToKIAogICAgICIiIlRoZSB1c2Ugb2YgZnJvbWxpc3QgaW5mbHVlbmNlcyB3aGF0IGltcG9ydCByZXR1cm5zLgogCkBAIC0xNywyMCArMTcsMjMgQEAKIAogICAgIGRlZiB0ZXN0X3JldHVybl9mcm9tX2ltcG9ydChzZWxmKToKICAgICAgICAgIyBbaW1wb3J0IHJldHVybl0KLSAgICAgICAgd2l0aCB1dGlsLm1vY2tfbW9kdWxlcygncGtnLl9faW5pdF9fJywgJ3BrZy5tb2R1bGUnKSBhcyBpbXBvcnRlcjoKKyAgICAgICAgd2l0aCB1dGlsLm1vY2tfc3BlYygncGtnLl9faW5pdF9fJywgJ3BrZy5tb2R1bGUnKSBhcyBpbXBvcnRlcjoKICAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVtpbXBvcnRlcl0pOgotICAgICAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydF91dGlsLmltcG9ydF8oJ3BrZy5tb2R1bGUnKQorICAgICAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuX19pbXBvcnRfXygncGtnLm1vZHVsZScpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19uYW1lX18sICdwa2cnKQogCiAgICAgZGVmIHRlc3RfcmV0dXJuX2Zyb21fZnJvbV9pbXBvcnQoc2VsZik6CiAgICAgICAgICMgW2Zyb20gcmV0dXJuXQogICAgICAgICB3aXRoIHV0aWwubW9ja19tb2R1bGVzKCdwa2cuX19pbml0X18nLCAncGtnLm1vZHVsZScpYXMgaW1wb3J0ZXI6CiAgICAgICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1baW1wb3J0ZXJdKToKLSAgICAgICAgICAgICAgICBtb2R1bGUgPSBpbXBvcnRfdXRpbC5pbXBvcnRfKCdwa2cubW9kdWxlJywgZnJvbWxpc3Q9WydhdHRyJ10pCisgICAgICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5fX2ltcG9ydF9fKCdwa2cubW9kdWxlJywgZnJvbWxpc3Q9WydhdHRyJ10pCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19uYW1lX18sICdwa2cubW9kdWxlJykKIAorRnJvemVuX1JldHVyblZhbHVlLCBTb3VyY2VfUmV0dXJuVmFsdWUgPSB1dGlsLnRlc3RfYm90aCgKKyAgICAgICAgUmV0dXJuVmFsdWUsIF9faW1wb3J0X189aW1wb3J0X3V0aWwuX19pbXBvcnRfXykKIAotY2xhc3MgSGFuZGxpbmdGcm9tbGlzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKK2NsYXNzIEhhbmRsaW5nRnJvbWxpc3Q6CiAKICAgICAiIiJVc2luZyBmcm9tbGlzdCB0cmlnZ2VycyBkaWZmZXJlbnQgYWN0aW9ucyBiYXNlZCBvbiB3aGF0IGlzIGJlaW5nIGFza2VkCiAgICAgb2YgaXQuCkBAIC00OSwyMiArNTIsMjIgQEAKICAgICAgICAgIyBbb2JqZWN0IGNhc2VdCiAgICAgICAgIHdpdGggdXRpbC5tb2NrX21vZHVsZXMoJ21vZHVsZScpIGFzIGltcG9ydGVyOgogICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W2ltcG9ydGVyXSk6Ci0gICAgICAgICAgICAgICAgbW9kdWxlID0gaW1wb3J0X3V0aWwuaW1wb3J0XygnbW9kdWxlJywgZnJvbWxpc3Q9WydhdHRyJ10pCisgICAgICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5fX2ltcG9ydF9fKCdtb2R1bGUnLCBmcm9tbGlzdD1bJ2F0dHInXSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX25hbWVfXywgJ21vZHVsZScpCiAKICAgICBkZWYgdGVzdF9ub25leGlzdGVudF9vYmplY3Qoc2VsZik6CiAgICAgICAgICMgW2JhZCBvYmplY3RdCiAgICAgICAgIHdpdGggdXRpbC5tb2NrX21vZHVsZXMoJ21vZHVsZScpIGFzIGltcG9ydGVyOgogICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W2ltcG9ydGVyXSk6Ci0gICAgICAgICAgICAgICAgbW9kdWxlID0gaW1wb3J0X3V0aWwuaW1wb3J0XygnbW9kdWxlJywgZnJvbWxpc3Q9Wydub25fZXhpc3RlbnQnXSkKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLl9faW1wb3J0X18oJ21vZHVsZScsIGZyb21saXN0PVsnbm9uX2V4aXN0ZW50J10pCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19uYW1lX18sICdtb2R1bGUnKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgaGFzYXR0cihtb2R1bGUsICdub25fZXhpc3RlbnQnKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIobW9kdWxlLCAnbm9uX2V4aXN0ZW50JykpCiAKICAgICBkZWYgdGVzdF9tb2R1bGVfZnJvbV9wYWNrYWdlKHNlbGYpOgogICAgICAgICAjIFttb2R1bGVdCiAgICAgICAgIHdpdGggdXRpbC5tb2NrX21vZHVsZXMoJ3BrZy5fX2luaXRfXycsICdwa2cubW9kdWxlJykgYXMgaW1wb3J0ZXI6CiAgICAgICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1baW1wb3J0ZXJdKToKLSAgICAgICAgICAgICAgICBtb2R1bGUgPSBpbXBvcnRfdXRpbC5pbXBvcnRfKCdwa2cnLCBmcm9tbGlzdD1bJ21vZHVsZSddKQorICAgICAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuX19pbXBvcnRfXygncGtnJywgZnJvbWxpc3Q9Wydtb2R1bGUnXSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX25hbWVfXywgJ3BrZycpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIobW9kdWxlLCAnbW9kdWxlJykpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUubW9kdWxlLl9fbmFtZV9fLCAncGtnLm1vZHVsZScpCkBAIC03OSwxMyArODIsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVfY29kZT17J3BrZy5tb2QnOiBtb2R1bGVfY29kZX0pIGFzIGltcG9ydGVyOgogICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W2ltcG9ydGVyXSk6CiAgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcikgYXMgZXhjOgotICAgICAgICAgICAgICAgICAgICBpbXBvcnRfdXRpbC5pbXBvcnRfKCdwa2cnLCBmcm9tbGlzdD1bJ21vZCddKQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9faW1wb3J0X18oJ3BrZycsIGZyb21saXN0PVsnbW9kJ10pCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnaV9kb19ub3RfZXhpc3QnLCBleGMuZXhjZXB0aW9uLm5hbWUpCiAKICAgICBkZWYgdGVzdF9lbXB0eV9zdHJpbmcoc2VsZik6CiAgICAgICAgIHdpdGggdXRpbC5tb2NrX21vZHVsZXMoJ3BrZy5fX2luaXRfXycsICdwa2cubW9kJykgYXMgaW1wb3J0ZXI6CiAgICAgICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1baW1wb3J0ZXJdKToKLSAgICAgICAgICAgICAgICBtb2R1bGUgPSBpbXBvcnRfdXRpbC5pbXBvcnRfKCdwa2cubW9kJywgZnJvbWxpc3Q9WycnXSkKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLl9faW1wb3J0X18oJ3BrZy5tb2QnLCBmcm9tbGlzdD1bJyddKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCAncGtnLm1vZCcpCiAKICAgICBkZWYgYmFzaWNfc3Rhcl90ZXN0KHNlbGYsIGZyb21saXN0PVsnKiddKToKQEAgLTkzLDcgKzk2LDcgQEAKICAgICAgICAgd2l0aCB1dGlsLm1vY2tfbW9kdWxlcygncGtnLl9faW5pdF9fJywgJ3BrZy5tb2R1bGUnKSBhcyBtb2NrOgogICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W21vY2tdKToKICAgICAgICAgICAgICAgICBtb2NrWydwa2cnXS5fX2FsbF9fID0gWydtb2R1bGUnXQotICAgICAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydF91dGlsLmltcG9ydF8oJ3BrZycsIGZyb21saXN0PWZyb21saXN0KQorICAgICAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuX19pbXBvcnRfXygncGtnJywgZnJvbWxpc3Q9ZnJvbWxpc3QpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19uYW1lX18sICdwa2cnKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKG1vZHVsZSwgJ21vZHVsZScpKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLm1vZHVsZS5fX25hbWVfXywgJ3BrZy5tb2R1bGUnKQpAQCAtMTExLDE3ICsxMTQsMTYgQEAKICAgICAgICAgd2l0aCBjb250ZXh0IGFzIG1vY2s6CiAgICAgICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bbW9ja10pOgogICAgICAgICAgICAgICAgIG1vY2tbJ3BrZyddLl9fYWxsX18gPSBbJ21vZHVsZTEnXQotICAgICAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydF91dGlsLmltcG9ydF8oJ3BrZycsIGZyb21saXN0PVsnbW9kdWxlMicsICcqJ10pCisgICAgICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5fX2ltcG9ydF9fKCdwa2cnLCBmcm9tbGlzdD1bJ21vZHVsZTInLCAnKiddKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCAncGtnJykKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihtb2R1bGUsICdtb2R1bGUxJykpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIobW9kdWxlLCAnbW9kdWxlMicpKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLm1vZHVsZTEuX19uYW1lX18sICdwa2cubW9kdWxlMScpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUubW9kdWxlMi5fX25hbWVfXywgJ3BrZy5tb2R1bGUyJykKIAorRnJvemVuX0Zyb21MaXN0LCBTb3VyY2VfRnJvbUxpc3QgPSB1dGlsLnRlc3RfYm90aCgKKyAgICAgICAgSGFuZGxpbmdGcm9tbGlzdCwgX19pbXBvcnRfXz1pbXBvcnRfdXRpbC5fX2ltcG9ydF9fKQogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAotICAgIHJ1bl91bml0dGVzdChSZXR1cm5WYWx1ZSwgSGFuZGxpbmdGcm9tbGlzdCkKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X21ldGFfcGF0aC5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9tZXRhX3BhdGgucHkKaW5kZXggNGQ4NWY4MC4uNWVlYjE0NSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X21ldGFfcGF0aC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfbWV0YV9wYXRoLnB5CkBAIC03LDcgKzcsNyBAQAogaW1wb3J0IHdhcm5pbmdzCiAKIAotY2xhc3MgQ2FsbGluZ09yZGVyKHVuaXR0ZXN0LlRlc3RDYXNlKToKK2NsYXNzIENhbGxpbmdPcmRlcjoKIAogICAgICIiIkNhbGxzIHRvIHRoZSBpbXBvcnRlcnMgb24gc3lzLm1ldGFfcGF0aCBoYXBwZW4gaW4gb3JkZXIgdGhhdCB0aGV5IGFyZQogICAgIHNwZWNpZmllZCBpbiB0aGUgc2VxdWVuY2UsIHN0YXJ0aW5nIHdpdGggdGhlIGZpcnN0IGltcG9ydGVyCkBAIC0xOCwyMyArMTgsMTggQEAKICAgICBkZWYgdGVzdF9maXJzdF9jYWxsZWQoc2VsZik6CiAgICAgICAgICMgW2ZpcnN0IGNhbGxlZF0KICAgICAgICAgbW9kID0gJ3RvcF9sZXZlbCcKLSAgICAgICAgZmlyc3QgPSB1dGlsLm1vY2tfbW9kdWxlcyhtb2QpCi0gICAgICAgIHNlY29uZCA9IHV0aWwubW9ja19tb2R1bGVzKG1vZCkKLSAgICAgICAgd2l0aCB1dGlsLm1vY2tfbW9kdWxlcyhtb2QpIGFzIGZpcnN0LCB1dGlsLm1vY2tfbW9kdWxlcyhtb2QpIGFzIHNlY29uZDoKLSAgICAgICAgICAgIGZpcnN0Lm1vZHVsZXNbbW9kXSA9IDQyCi0gICAgICAgICAgICBzZWNvbmQubW9kdWxlc1ttb2RdID0gLTEzCisgICAgICAgIHdpdGggdXRpbC5tb2NrX3NwZWMobW9kKSBhcyBmaXJzdCwgdXRpbC5tb2NrX3NwZWMobW9kKSBhcyBzZWNvbmQ6CiAgICAgICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bZmlyc3QsIHNlY29uZF0pOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1wb3J0X3V0aWwuaW1wb3J0Xyhtb2QpLCA0MikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzKHNlbGYuX19pbXBvcnRfXyhtb2QpLCBmaXJzdC5tb2R1bGVzW21vZF0pCiAKICAgICBkZWYgdGVzdF9jb250aW51aW5nKHNlbGYpOgogICAgICAgICAjIFtjb250aW51aW5nXQogICAgICAgICBtb2RfbmFtZSA9ICdmb3JfcmVhbCcKLSAgICAgICAgd2l0aCB1dGlsLm1vY2tfbW9kdWxlcygnbm9uZXhpc3RlbnQnKSBhcyBmaXJzdCwgXAotICAgICAgICAgICAgIHV0aWwubW9ja19tb2R1bGVzKG1vZF9uYW1lKSBhcyBzZWNvbmQ6Ci0gICAgICAgICAgICBmaXJzdC5maW5kX21vZHVsZSA9IGxhbWJkYSBzZWxmLCBmdWxsbmFtZSwgcGF0aD1Ob25lOiBOb25lCi0gICAgICAgICAgICBzZWNvbmQubW9kdWxlc1ttb2RfbmFtZV0gPSA0MgorICAgICAgICB3aXRoIHV0aWwubW9ja19zcGVjKCdub25leGlzdGVudCcpIGFzIGZpcnN0LCBcCisgICAgICAgICAgICAgdXRpbC5tb2NrX3NwZWMobW9kX25hbWUpIGFzIHNlY29uZDoKKyAgICAgICAgICAgIGZpcnN0LmZpbmRfc3BlYyA9IGxhbWJkYSBzZWxmLCBmdWxsbmFtZSwgcGF0aD1Ob25lLCBwYXJlbnQ9Tm9uZTogTm9uZQogICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W2ZpcnN0LCBzZWNvbmRdKToKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltcG9ydF91dGlsLmltcG9ydF8obW9kX25hbWUpLCA0MikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzKHNlbGYuX19pbXBvcnRfXyhtb2RfbmFtZSksIHNlY29uZC5tb2R1bGVzW21vZF9uYW1lXSkKIAogICAgIGRlZiB0ZXN0X2VtcHR5KHNlbGYpOgogICAgICAgICAjIFJhaXNlIGFuIEltcG9ydFdhcm5pbmcgaWYgc3lzLm1ldGFfcGF0aCBpcyBlbXB0eS4KQEAgLTQ2LDQxICs0MSw0MiBAQAogICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bXSk6CiAgICAgICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKHJlY29yZD1UcnVlKSBhcyB3OgogICAgICAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignYWx3YXlzJykKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShpbXBvcnRsaWIuX2Jvb3RzdHJhcC5fZmluZF9tb2R1bGUoJ25vdGhpbmcnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb25lKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShpbXBvcnRsaWIuX2Jvb3RzdHJhcC5fZmluZF9zcGVjKCdub3RoaW5nJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUpKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHcpLCAxKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKHdbLTFdLmNhdGVnb3J5LCBJbXBvcnRXYXJuaW5nKSkKIAorRnJvemVuX0NhbGxpbmdPcmRlciwgU291cmNlX0NhbGxpbmdPcmRlciA9IHV0aWwudGVzdF9ib3RoKAorICAgICAgICBDYWxsaW5nT3JkZXIsIF9faW1wb3J0X189aW1wb3J0X3V0aWwuX19pbXBvcnRfXykKIAotY2xhc3MgQ2FsbFNpZ25hdHVyZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKK2NsYXNzIENhbGxTaWduYXR1cmU6CiAKICAgICAiIiJJZiB0aGVyZSBpcyBubyBfX3BhdGhfXyBlbnRyeSBvbiB0aGUgcGFyZW50IG1vZHVsZSwgdGhlbiAncGF0aCcgaXMgTm9uZQogICAgIFtubyBwYXRoXS4gT3RoZXJ3aXNlLCB0aGUgdmFsdWUgZm9yIF9fcGF0aF9fIGlzIHBhc3NlZCBpbiBmb3IgdGhlICdwYXRoJwogICAgIGFyZ3VtZW50IFtwYXRoIHNldF0uIiIiCiAKLSAgICBkZWYgbG9nKHNlbGYsIGZ4bik6CisgICAgZGVmIGxvZ19maW5kZXIoc2VsZiwgaW1wb3J0ZXIpOgorICAgICAgICBmeG4gPSBnZXRhdHRyKGltcG9ydGVyLCBzZWxmLmZpbmRlcl9uYW1lKQogICAgICAgICBsb2cgPSBbXQogICAgICAgICBkZWYgd3JhcHBlcihzZWxmLCAqYXJncywgKiprd2FyZ3MpOgogICAgICAgICAgICAgbG9nLmFwcGVuZChbYXJncywga3dhcmdzXSkKICAgICAgICAgICAgIHJldHVybiBmeG4oKmFyZ3MsICoqa3dhcmdzKQogICAgICAgICByZXR1cm4gbG9nLCB3cmFwcGVyCiAKLQogICAgIGRlZiB0ZXN0X25vX3BhdGgoc2VsZik6CiAgICAgICAgICMgW25vIHBhdGhdCiAgICAgICAgIG1vZF9uYW1lID0gJ3RvcF9sZXZlbCcKICAgICAgICAgYXNzZXJ0ICcuJyBub3QgaW4gbW9kX25hbWUKLSAgICAgICAgd2l0aCB1dGlsLm1vY2tfbW9kdWxlcyhtb2RfbmFtZSkgYXMgaW1wb3J0ZXI6Ci0gICAgICAgICAgICBsb2csIHdyYXBwZWRfY2FsbCA9IHNlbGYubG9nKGltcG9ydGVyLmZpbmRfbW9kdWxlKQotICAgICAgICAgICAgaW1wb3J0ZXIuZmluZF9tb2R1bGUgPSBNZXRob2RUeXBlKHdyYXBwZWRfY2FsbCwgaW1wb3J0ZXIpCisgICAgICAgIHdpdGggc2VsZi5tb2NrX21vZHVsZXMobW9kX25hbWUpIGFzIGltcG9ydGVyOgorICAgICAgICAgICAgbG9nLCB3cmFwcGVkX2NhbGwgPSBzZWxmLmxvZ19maW5kZXIoaW1wb3J0ZXIpCisgICAgICAgICAgICBzZXRhdHRyKGltcG9ydGVyLCBzZWxmLmZpbmRlcl9uYW1lLCBNZXRob2RUeXBlKHdyYXBwZWRfY2FsbCwgaW1wb3J0ZXIpKQogICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W2ltcG9ydGVyXSk6Ci0gICAgICAgICAgICAgICAgaW1wb3J0X3V0aWwuaW1wb3J0Xyhtb2RfbmFtZSkKKyAgICAgICAgICAgICAgICBzZWxmLl9faW1wb3J0X18obW9kX25hbWUpCiAgICAgICAgICAgICAgICAgYXNzZXJ0IGxlbihsb2cpID09IDEKICAgICAgICAgICAgICAgICBhcmdzID0gbG9nWzBdWzBdCiAgICAgICAgICAgICAgICAga3dhcmdzID0gbG9nWzBdWzFdCiAgICAgICAgICAgICAgICAgIyBBc3N1bWluZyBhbGwgYXJndW1lbnRzIGFyZSBwb3NpdGlvbmFsLgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGFyZ3MpLCAyKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGt3YXJncyksIDApCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhcmdzWzBdLCBtb2RfbmFtZSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShhcmdzWzFdKQogCkBAIC05MCwyNiArODYsMzQgQEAKICAgICAgICAgbW9kX25hbWUgPSBwa2dfbmFtZSArICcubW9kdWxlJwogICAgICAgICBwYXRoID0gWzQyXQogICAgICAgICBhc3NlcnQgJy4nIGluIG1vZF9uYW1lCi0gICAgICAgIHdpdGggdXRpbC5tb2NrX21vZHVsZXMocGtnX25hbWUrJy5fX2luaXRfXycsIG1vZF9uYW1lKSBhcyBpbXBvcnRlcjoKKyAgICAgICAgd2l0aCBzZWxmLm1vY2tfbW9kdWxlcyhwa2dfbmFtZSsnLl9faW5pdF9fJywgbW9kX25hbWUpIGFzIGltcG9ydGVyOgogICAgICAgICAgICAgaW1wb3J0ZXIubW9kdWxlc1twa2dfbmFtZV0uX19wYXRoX18gPSBwYXRoCi0gICAgICAgICAgICBsb2csIHdyYXBwZWRfY2FsbCA9IHNlbGYubG9nKGltcG9ydGVyLmZpbmRfbW9kdWxlKQotICAgICAgICAgICAgaW1wb3J0ZXIuZmluZF9tb2R1bGUgPSBNZXRob2RUeXBlKHdyYXBwZWRfY2FsbCwgaW1wb3J0ZXIpCisgICAgICAgICAgICBsb2csIHdyYXBwZWRfY2FsbCA9IHNlbGYubG9nX2ZpbmRlcihpbXBvcnRlcikKKyAgICAgICAgICAgIHNldGF0dHIoaW1wb3J0ZXIsIHNlbGYuZmluZGVyX25hbWUsIE1ldGhvZFR5cGUod3JhcHBlZF9jYWxsLCBpbXBvcnRlcikpCiAgICAgICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1baW1wb3J0ZXJdKToKLSAgICAgICAgICAgICAgICBpbXBvcnRfdXRpbC5pbXBvcnRfKG1vZF9uYW1lKQorICAgICAgICAgICAgICAgIHNlbGYuX19pbXBvcnRfXyhtb2RfbmFtZSkKICAgICAgICAgICAgICAgICBhc3NlcnQgbGVuKGxvZykgPT0gMgogICAgICAgICAgICAgICAgIGFyZ3MgPSBsb2dbMV1bMF0KICAgICAgICAgICAgICAgICBrd2FyZ3MgPSBsb2dbMV1bMV0KICAgICAgICAgICAgICAgICAjIEFzc3VtaW5nIGFsbCBhcmd1bWVudHMgYXJlIHBvc2l0aW9uYWwuCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBrd2FyZ3MpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShrd2FyZ3MpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhcmdzWzBdLCBtb2RfbmFtZSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzKGFyZ3NbMV0sIHBhdGgpCiAKK2NsYXNzIENhbGxTaWduYXR1cmVQRVAzMDIoQ2FsbFNpZ25hdHVyZSk6CisgICAgbW9ja19tb2R1bGVzID0gdXRpbC5tb2NrX21vZHVsZXMKKyAgICBmaW5kZXJfbmFtZSA9ICdmaW5kX21vZHVsZScKIAorRnJvemVuX0NhbGxTaWduYXR1cmVQRVAzMDIsIFNvdXJjZV9DYWxsU2lnbmF0dXJlUEVQMzAyID0gdXRpbC50ZXN0X2JvdGgoCisgICAgICAgIENhbGxTaWduYXR1cmVQRVAzMDIsIF9faW1wb3J0X189aW1wb3J0X3V0aWwuX19pbXBvcnRfXykKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKLSAgICBydW5fdW5pdHRlc3QoQ2FsbGluZ09yZGVyLCBDYWxsU2lnbmF0dXJlKQorY2xhc3MgQ2FsbFNpZ25hdHVyZVBFUDQ1MShDYWxsU2lnbmF0dXJlKToKKyAgICBtb2NrX21vZHVsZXMgPSB1dGlsLm1vY2tfc3BlYworICAgIGZpbmRlcl9uYW1lID0gJ2ZpbmRfc3BlYycKKworRnJvemVuX0NhbGxTaWduYXR1cmVQRVA0NTEsIFNvdXJjZV9DYWxsU2lnbmF0dXJlUEVQNDUxID0gdXRpbC50ZXN0X2JvdGgoCisgICAgICAgIENhbGxTaWduYXR1cmVQRVA0NTEsIF9faW1wb3J0X189aW1wb3J0X3V0aWwuX19pbXBvcnRfXykKIAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfcGFja2FnZXMucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfcGFja2FnZXMucHkKaW5kZXggYmZhMThkYy4uNTVhNWQxNCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X3BhY2thZ2VzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9wYWNrYWdlcy5weQpAQCAtNiwzNyArNiwzNyBAQAogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiAKIAotY2xhc3MgUGFyZW50TW9kdWxlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorY2xhc3MgUGFyZW50TW9kdWxlVGVzdHM6CiAKICAgICAiIiJJbXBvcnRpbmcgYSBzdWJtb2R1bGUgc2hvdWxkIGltcG9ydCB0aGUgcGFyZW50IG1vZHVsZXMuIiIiCiAKICAgICBkZWYgdGVzdF9pbXBvcnRfcGFyZW50KHNlbGYpOgotICAgICAgICB3aXRoIHV0aWwubW9ja19tb2R1bGVzKCdwa2cuX19pbml0X18nLCAncGtnLm1vZHVsZScpIGFzIG1vY2s6CisgICAgICAgIHdpdGggdXRpbC5tb2NrX3NwZWMoJ3BrZy5fX2luaXRfXycsICdwa2cubW9kdWxlJykgYXMgbW9jazoKICAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVttb2NrXSk6Ci0gICAgICAgICAgICAgICAgbW9kdWxlID0gaW1wb3J0X3V0aWwuaW1wb3J0XygncGtnLm1vZHVsZScpCisgICAgICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5fX2ltcG9ydF9fKCdwa2cubW9kdWxlJykKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKCdwa2cnLCBzeXMubW9kdWxlcykKIAogICAgIGRlZiB0ZXN0X2JhZF9wYXJlbnQoc2VsZik6Ci0gICAgICAgIHdpdGggdXRpbC5tb2NrX21vZHVsZXMoJ3BrZy5tb2R1bGUnKSBhcyBtb2NrOgorICAgICAgICB3aXRoIHV0aWwubW9ja19zcGVjKCdwa2cubW9kdWxlJykgYXMgbW9jazoKICAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVttb2NrXSk6CiAgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcikgYXMgY206Ci0gICAgICAgICAgICAgICAgICAgIGltcG9ydF91dGlsLmltcG9ydF8oJ3BrZy5tb2R1bGUnKQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9faW1wb3J0X18oJ3BrZy5tb2R1bGUnKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLm5hbWUsICdwa2cnKQogCiAgICAgZGVmIHRlc3RfcmFpc2luZ19wYXJlbnRfYWZ0ZXJfaW1wb3J0aW5nX2NoaWxkKHNlbGYpOgogICAgICAgICBkZWYgX19pbml0X18oKToKICAgICAgICAgICAgIGltcG9ydCBwa2cubW9kdWxlCiAgICAgICAgICAgICAxLzAKLSAgICAgICAgbW9jayA9IHV0aWwubW9ja19tb2R1bGVzKCdwa2cuX19pbml0X18nLCAncGtnLm1vZHVsZScsCisgICAgICAgIG1vY2sgPSB1dGlsLm1vY2tfc3BlYygncGtnLl9faW5pdF9fJywgJ3BrZy5tb2R1bGUnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlX2NvZGU9eydwa2cnOiBfX2luaXRfX30pCiAgICAgICAgIHdpdGggbW9jazoKICAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVttb2NrXSk6CiAgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvcik6Ci0gICAgICAgICAgICAgICAgICAgIGltcG9ydF91dGlsLmltcG9ydF8oJ3BrZycpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX19pbXBvcnRfXygncGtnJykKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdwa2cnLCBzeXMubW9kdWxlcykKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKCdwa2cubW9kdWxlJywgc3lzLm1vZHVsZXMpCiAgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvcik6Ci0gICAgICAgICAgICAgICAgICAgIGltcG9ydF91dGlsLmltcG9ydF8oJ3BrZy5tb2R1bGUnKQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9faW1wb3J0X18oJ3BrZy5tb2R1bGUnKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ3BrZycsIHN5cy5tb2R1bGVzKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3BrZy5tb2R1bGUnLCBzeXMubW9kdWxlcykKIApAQCAtNDQsMTcgKzQ0LDE3IEBACiAgICAgICAgIGRlZiBfX2luaXRfXygpOgogICAgICAgICAgICAgZnJvbSAuIGltcG9ydCBtb2R1bGUKICAgICAgICAgICAgIDEvMAotICAgICAgICBtb2NrID0gdXRpbC5tb2NrX21vZHVsZXMoJ3BrZy5fX2luaXRfXycsICdwa2cubW9kdWxlJywKKyAgICAgICAgbW9jayA9IHV0aWwubW9ja19zcGVjKCdwa2cuX19pbml0X18nLCAncGtnLm1vZHVsZScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVfY29kZT17J3BrZyc6IF9faW5pdF9ffSkKICAgICAgICAgd2l0aCBtb2NrOgogICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W21vY2tdKToKICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKChaZXJvRGl2aXNpb25FcnJvciwgSW1wb3J0RXJyb3IpKToKICAgICAgICAgICAgICAgICAgICAgIyBUaGlzIHJhaXNlcyBJbXBvcnRFcnJvciBvbiB0aGUgImZyb20gLiBpbXBvcnQgbW9kdWxlIgogICAgICAgICAgICAgICAgICAgICAjIGxpbmUsIG5vdCBzdXJlIHdoeS4KLSAgICAgICAgICAgICAgICAgICAgaW1wb3J0X3V0aWwuaW1wb3J0XygncGtnJykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fX2ltcG9ydF9fKCdwa2cnKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ3BrZycsIHN5cy5tb2R1bGVzKQogICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoKFplcm9EaXZpc2lvbkVycm9yLCBJbXBvcnRFcnJvcikpOgotICAgICAgICAgICAgICAgICAgICBpbXBvcnRfdXRpbC5pbXBvcnRfKCdwa2cubW9kdWxlJykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fX2ltcG9ydF9fKCdwa2cubW9kdWxlJykKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdwa2cnLCBzeXMubW9kdWxlcykKICAgICAgICAgICAgICAgICAjIFhYWCBGYWxzZQogICAgICAgICAgICAgICAgICNzZWxmLmFzc2VydEluKCdwa2cubW9kdWxlJywgc3lzLm1vZHVsZXMpCkBAIC02Myw3ICs2Myw3IEBACiAgICAgICAgIGRlZiBfX2luaXRfXygpOgogICAgICAgICAgICAgZnJvbSAuLnN1YnBrZyBpbXBvcnQgbW9kdWxlCiAgICAgICAgICAgICAxLzAKLSAgICAgICAgbW9jayA9IHV0aWwubW9ja19tb2R1bGVzKCdwa2cuX19pbml0X18nLCAncGtnLnN1YnBrZy5fX2luaXRfXycsCisgICAgICAgIG1vY2sgPSB1dGlsLm1vY2tfc3BlYygncGtnLl9faW5pdF9fJywgJ3BrZy5zdWJwa2cuX19pbml0X18nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BrZy5zdWJwa2cubW9kdWxlJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZV9jb2RlPXsncGtnLnN1YnBrZyc6IF9faW5pdF9ffSkKICAgICAgICAgd2l0aCBtb2NrOgpAQCAtNzEsMTAgKzcxLDEwIEBACiAgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcygoWmVyb0RpdmlzaW9uRXJyb3IsIEltcG9ydEVycm9yKSk6CiAgICAgICAgICAgICAgICAgICAgICMgVGhpcyByYWlzZXMgSW1wb3J0RXJyb3Igb24gdGhlICJmcm9tIC4uc3VicGtnIGltcG9ydCBtb2R1bGUiCiAgICAgICAgICAgICAgICAgICAgICMgbGluZSwgbm90IHN1cmUgd2h5LgotICAgICAgICAgICAgICAgICAgICBpbXBvcnRfdXRpbC5pbXBvcnRfKCdwa2cuc3VicGtnJykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fX2ltcG9ydF9fKCdwa2cuc3VicGtnJykKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdwa2cuc3VicGtnJywgc3lzLm1vZHVsZXMpCiAgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcygoWmVyb0RpdmlzaW9uRXJyb3IsIEltcG9ydEVycm9yKSk6Ci0gICAgICAgICAgICAgICAgICAgIGltcG9ydF91dGlsLmltcG9ydF8oJ3BrZy5zdWJwa2cubW9kdWxlJykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fX2ltcG9ydF9fKCdwa2cuc3VicGtnLm1vZHVsZScpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbigncGtnLnN1YnBrZycsIHN5cy5tb2R1bGVzKQogICAgICAgICAgICAgICAgICMgWFhYIEZhbHNlCiAgICAgICAgICAgICAgICAgI3NlbGYuYXNzZXJ0SW4oJ3BrZy5zdWJwa2cubW9kdWxlJywgc3lzLm1vZHVsZXMpCkBAIC04Myw3ICs4Myw3IEBACiAgICAgICAgICMgVHJ5IHRvIGltcG9ydCBhIHN1Ym1vZHVsZSBmcm9tIGEgbm9uLXBhY2thZ2Ugc2hvdWxkIHJhaXNlIEltcG9ydEVycm9yLgogICAgICAgICBhc3NlcnQgbm90IGhhc2F0dHIoc3lzLCAnX19wYXRoX18nKQogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKSBhcyBjbToKLSAgICAgICAgICAgIGltcG9ydF91dGlsLmltcG9ydF8oJ3N5cy5ub19zdWJtb2R1bGVzX2hlcmUnKQorICAgICAgICAgICAgc2VsZi5fX2ltcG9ydF9fKCdzeXMubm9fc3VibW9kdWxlc19oZXJlJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24ubmFtZSwgJ3N5cy5ub19zdWJtb2R1bGVzX2hlcmUnKQogCiAgICAgZGVmIHRlc3RfbW9kdWxlX25vdF9wYWNrYWdlX2J1dF9zaWRlX2VmZmVjdHMoc2VsZik6CkBAIC05MywyMCArOTMsMTggQEAKICAgICAgICAgc3VibmFtZSA9IG5hbWUgKyAnLmInCiAgICAgICAgIGRlZiBtb2R1bGVfaW5qZWN0aW9uKCk6CiAgICAgICAgICAgICBzeXMubW9kdWxlc1tzdWJuYW1lXSA9ICd0b3RhbCBidW5rJwotICAgICAgICBtb2NrX21vZHVsZXMgPSB1dGlsLm1vY2tfbW9kdWxlcygnbW9kJywKKyAgICAgICAgbW9ja19zcGVjID0gdXRpbC5tb2NrX3NwZWMoJ21vZCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZV9jb2RlPXsnbW9kJzogbW9kdWxlX2luamVjdGlvbn0pCi0gICAgICAgIHdpdGggbW9ja19tb2R1bGVzIGFzIG1vY2s6CisgICAgICAgIHdpdGggbW9ja19zcGVjIGFzIG1vY2s6CiAgICAgICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bbW9ja10pOgogICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgc3VibW9kdWxlID0gaW1wb3J0X3V0aWwuaW1wb3J0XyhzdWJuYW1lKQorICAgICAgICAgICAgICAgICAgICBzdWJtb2R1bGUgPSBzZWxmLl9faW1wb3J0X18oc3VibmFtZSkKICAgICAgICAgICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgICAgICAgICBzdXBwb3J0LnVubG9hZChzdWJuYW1lKQogCi0KLWRlZiB0ZXN0X21haW4oKToKLSAgICBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0Ci0gICAgcnVuX3VuaXR0ZXN0KFBhcmVudE1vZHVsZVRlc3RzKQorRnJvemVuX1BhcmVudFRlc3RzLCBTb3VyY2VfUGFyZW50VGVzdHMgPSB1dGlsLnRlc3RfYm90aCgKKyAgICAgICAgUGFyZW50TW9kdWxlVGVzdHMsIF9faW1wb3J0X189aW1wb3J0X3V0aWwuX19pbXBvcnRfXykKIAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfcGF0aC5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9wYXRoLnB5CmluZGV4IGQ4MmI3ZjYuLjEyNzRmOGMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9wYXRoLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9wYXRoLnB5CkBAIC0xLDggKzEsOSBAQAotZnJvbSBpbXBvcnRsaWIgaW1wb3J0IF9ib290c3RyYXAKLWZyb20gaW1wb3J0bGliIGltcG9ydCBtYWNoaW5lcnkKLWZyb20gaW1wb3J0bGliIGltcG9ydCBpbXBvcnRfbW9kdWxlCiBmcm9tIC4uIGltcG9ydCB1dGlsCiBmcm9tIC4gaW1wb3J0IHV0aWwgYXMgaW1wb3J0X3V0aWwKKworaW1wb3J0bGliID0gdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWInKQorbWFjaGluZXJ5ID0gdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWIubWFjaGluZXJ5JykKKwogaW1wb3J0IG9zCiBpbXBvcnQgc3lzCiBmcm9tIHR5cGVzIGltcG9ydCBNb2R1bGVUeXBlCkBAIC0xMSwyNSArMTIsMjUgQEAKIGltcG9ydCB6aXBpbXBvcnQKIAogCi1jbGFzcyBGaW5kZXJUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBGaW5kZXJUZXN0czoKIAogICAgICIiIlRlc3RzIGZvciBQYXRoRmluZGVyLiIiIgogCiAgICAgZGVmIHRlc3RfZmFpbHVyZShzZWxmKToKLSAgICAgICAgIyBUZXN0IE5vbmUgcmV0dXJuZWQgdXBvbiBub3QgZmluZGluZyBhIHN1aXRhYmxlIGZpbmRlci4KKyAgICAgICAgIyBUZXN0IE5vbmUgcmV0dXJuZWQgdXBvbiBub3QgZmluZGluZyBhIHN1aXRhYmxlIGxvYWRlci4KICAgICAgICAgbW9kdWxlID0gJzx0ZXN0IG1vZHVsZT4nCiAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUoKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKG1hY2hpbmVyeS5QYXRoRmluZGVyLmZpbmRfbW9kdWxlKG1vZHVsZSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzZWxmLm1hY2hpbmVyeS5QYXRoRmluZGVyLmZpbmRfbW9kdWxlKG1vZHVsZSkpCiAKICAgICBkZWYgdGVzdF9zeXNfcGF0aChzZWxmKToKICAgICAgICAgIyBUZXN0IHRoYXQgc3lzLnBhdGggaXMgdXNlZCB3aGVuICdwYXRoJyBpcyBOb25lLgogICAgICAgICAjIEltcGxpY2l0bHkgdGVzdHMgdGhhdCBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZSBpcyB1c2VkLgogICAgICAgICBtb2R1bGUgPSAnPHRlc3QgbW9kdWxlPicKICAgICAgICAgcGF0aCA9ICc8dGVzdCBwYXRoPicKLSAgICAgICAgaW1wb3J0ZXIgPSB1dGlsLm1vY2tfbW9kdWxlcyhtb2R1bGUpCisgICAgICAgIGltcG9ydGVyID0gdXRpbC5tb2NrX3NwZWMobW9kdWxlKQogICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKHBhdGhfaW1wb3J0ZXJfY2FjaGU9e3BhdGg6IGltcG9ydGVyfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoPVtwYXRoXSk6Ci0gICAgICAgICAgICBsb2FkZXIgPSBtYWNoaW5lcnkuUGF0aEZpbmRlci5maW5kX21vZHVsZShtb2R1bGUpCisgICAgICAgICAgICBsb2FkZXIgPSBzZWxmLm1hY2hpbmVyeS5QYXRoRmluZGVyLmZpbmRfbW9kdWxlKG1vZHVsZSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMobG9hZGVyLCBpbXBvcnRlcikKIAogICAgIGRlZiB0ZXN0X3BhdGgoc2VsZik6CkBAIC0zNywyOSArMzgsMjkgQEAKICAgICAgICAgIyBJbXBsaWNpdGx5IHRlc3RzIHRoYXQgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGUgaXMgdXNlZC4KICAgICAgICAgbW9kdWxlID0gJzx0ZXN0IG1vZHVsZT4nCiAgICAgICAgIHBhdGggPSAnPHRlc3QgcGF0aD4nCi0gICAgICAgIGltcG9ydGVyID0gdXRpbC5tb2NrX21vZHVsZXMobW9kdWxlKQorICAgICAgICBpbXBvcnRlciA9IHV0aWwubW9ja19zcGVjKG1vZHVsZSkKICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShwYXRoX2ltcG9ydGVyX2NhY2hlPXtwYXRoOiBpbXBvcnRlcn0pOgotICAgICAgICAgICAgbG9hZGVyID0gbWFjaGluZXJ5LlBhdGhGaW5kZXIuZmluZF9tb2R1bGUobW9kdWxlLCBbcGF0aF0pCisgICAgICAgICAgICBsb2FkZXIgPSBzZWxmLm1hY2hpbmVyeS5QYXRoRmluZGVyLmZpbmRfbW9kdWxlKG1vZHVsZSwgW3BhdGhdKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhsb2FkZXIsIGltcG9ydGVyKQogCiAgICAgZGVmIHRlc3RfZW1wdHlfbGlzdChzZWxmKToKICAgICAgICAgIyBBbiBlbXB0eSBsaXN0IHNob3VsZCBub3QgY291bnQgYXMgYXNraW5nIGZvciBzeXMucGF0aC4KICAgICAgICAgbW9kdWxlID0gJ21vZHVsZScKICAgICAgICAgcGF0aCA9ICc8dGVzdCBwYXRoPicKLSAgICAgICAgaW1wb3J0ZXIgPSB1dGlsLm1vY2tfbW9kdWxlcyhtb2R1bGUpCisgICAgICAgIGltcG9ydGVyID0gdXRpbC5tb2NrX3NwZWMobW9kdWxlKQogICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKHBhdGhfaW1wb3J0ZXJfY2FjaGU9e3BhdGg6IGltcG9ydGVyfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoPVtwYXRoXSk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShtYWNoaW5lcnkuUGF0aEZpbmRlci5maW5kX21vZHVsZSgnbW9kdWxlJywgW10pKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc2VsZi5tYWNoaW5lcnkuUGF0aEZpbmRlci5maW5kX21vZHVsZSgnbW9kdWxlJywgW10pKQogCiAgICAgZGVmIHRlc3RfcGF0aF9ob29rcyhzZWxmKToKICAgICAgICAgIyBUZXN0IHRoYXQgc3lzLnBhdGhfaG9va3MgaXMgdXNlZC4KICAgICAgICAgIyBUZXN0IHRoYXQgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGUgaXMgc2V0LgogICAgICAgICBtb2R1bGUgPSAnPHRlc3QgbW9kdWxlPicKICAgICAgICAgcGF0aCA9ICc8dGVzdCBwYXRoPicKLSAgICAgICAgaW1wb3J0ZXIgPSB1dGlsLm1vY2tfbW9kdWxlcyhtb2R1bGUpCisgICAgICAgIGltcG9ydGVyID0gdXRpbC5tb2NrX3NwZWMobW9kdWxlKQogICAgICAgICBob29rID0gaW1wb3J0X3V0aWwubW9ja19wYXRoX2hvb2socGF0aCwgaW1wb3J0ZXI9aW1wb3J0ZXIpCiAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUocGF0aF9ob29rcz1baG9va10pOgotICAgICAgICAgICAgbG9hZGVyID0gbWFjaGluZXJ5LlBhdGhGaW5kZXIuZmluZF9tb2R1bGUobW9kdWxlLCBbcGF0aF0pCisgICAgICAgICAgICBsb2FkZXIgPSBzZWxmLm1hY2hpbmVyeS5QYXRoRmluZGVyLmZpbmRfbW9kdWxlKG1vZHVsZSwgW3BhdGhdKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhsb2FkZXIsIGltcG9ydGVyKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihwYXRoLCBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGVbcGF0aF0sIGltcG9ydGVyKQpAQCAtNzIsNyArNzMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg9W3BhdGhfZW50cnldKToKICAgICAgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MocmVjb3JkPVRydWUpIGFzIHc6CiAgICAgICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdhbHdheXMnKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKG1hY2hpbmVyeS5QYXRoRmluZGVyLmZpbmRfbW9kdWxlKCdvcycpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHNlbGYubWFjaGluZXJ5LlBhdGhGaW5kZXIuZmluZF9tb2R1bGUoJ29zJykpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGVbcGF0aF9lbnRyeV0pCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odyksIDEpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3Mod1stMV0uY2F0ZWdvcnksIEltcG9ydFdhcm5pbmcpKQpAQCAtODEsMTIgKzgyLDEyIEBACiAgICAgICAgICMgVGhlIGVtcHR5IHN0cmluZyBzaG91bGQgY3JlYXRlIGEgZmluZGVyIHVzaW5nIHRoZSBjd2QuCiAgICAgICAgIHBhdGggPSAnJwogICAgICAgICBtb2R1bGUgPSAnPHRlc3QgbW9kdWxlPicKLSAgICAgICAgaW1wb3J0ZXIgPSB1dGlsLm1vY2tfbW9kdWxlcyhtb2R1bGUpCi0gICAgICAgIGhvb2sgPSBpbXBvcnRfdXRpbC5tb2NrX3BhdGhfaG9vayhvcy5jdXJkaXIsIGltcG9ydGVyPWltcG9ydGVyKQorICAgICAgICBpbXBvcnRlciA9IHV0aWwubW9ja19zcGVjKG1vZHVsZSkKKyAgICAgICAgaG9vayA9IGltcG9ydF91dGlsLm1vY2tfcGF0aF9ob29rKG9zLmdldGN3ZCgpLCBpbXBvcnRlcj1pbXBvcnRlcikKICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShwYXRoPVtwYXRoXSwgcGF0aF9ob29rcz1baG9va10pOgotICAgICAgICAgICAgbG9hZGVyID0gbWFjaGluZXJ5LlBhdGhGaW5kZXIuZmluZF9tb2R1bGUobW9kdWxlKQorICAgICAgICAgICAgbG9hZGVyID0gc2VsZi5tYWNoaW5lcnkuUGF0aEZpbmRlci5maW5kX21vZHVsZShtb2R1bGUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydElzKGxvYWRlciwgaW1wb3J0ZXIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEluKG9zLmN1cmRpciwgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKG9zLmdldGN3ZCgpLCBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZSkKIAogICAgIGRlZiB0ZXN0X05vbmVfb25fc3lzX3BhdGgoc2VsZik6CiAgICAgICAgICMgUHV0dGluZyBOb25lIGluIHN5cy5wYXRoWzBdIGNhdXNlZCBhbiBpbXBvcnQgcmVncmVzc2lvbiBmcm9tIFB5dGhvbgpAQCAtOTYsOCArOTcsOCBAQAogICAgICAgICBuZXdfcGF0aF9pbXBvcnRlcl9jYWNoZSA9IHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlLmNvcHkoKQogICAgICAgICBuZXdfcGF0aF9pbXBvcnRlcl9jYWNoZS5wb3AoTm9uZSwgTm9uZSkKICAgICAgICAgbmV3X3BhdGhfaG9va3MgPSBbemlwaW1wb3J0LnppcGltcG9ydGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICBfYm9vdHN0cmFwLkZpbGVGaW5kZXIucGF0aF9ob29rKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKl9ib290c3RyYXAuX2dldF9zdXBwb3J0ZWRfZmlsZV9sb2FkZXJzKCkpXQorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1hY2hpbmVyeS5GaWxlRmluZGVyLnBhdGhfaG9vaygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpzZWxmLmltcG9ydGxpYi5fYm9vdHN0cmFwLl9nZXRfc3VwcG9ydGVkX2ZpbGVfbG9hZGVycygpKV0KICAgICAgICAgbWlzc2luZyA9IG9iamVjdCgpCiAgICAgICAgIGVtYWlsID0gc3lzLm1vZHVsZXMucG9wKCdlbWFpbCcsIG1pc3NpbmcpCiAgICAgICAgIHRyeToKQEAgLTEwNSwxNiArMTA2LDM5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg9bmV3X3BhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhfaW1wb3J0ZXJfY2FjaGU9bmV3X3BhdGhfaW1wb3J0ZXJfY2FjaGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhfaG9va3M9bmV3X3BhdGhfaG9va3MpOgotICAgICAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydF9tb2R1bGUoJ2VtYWlsJykKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLmltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKCdlbWFpbCcpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG1vZHVsZSwgTW9kdWxlVHlwZSkKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIGlmIGVtYWlsIGlzIG5vdCBtaXNzaW5nOgogICAgICAgICAgICAgICAgIHN5cy5tb2R1bGVzWydlbWFpbCddID0gZW1haWwKIAorRnJvemVuX0ZpbmRlclRlc3RzLCBTb3VyY2VfRmluZGVyVGVzdHMgPSB1dGlsLnRlc3RfYm90aCgKKyAgICAgICAgRmluZGVyVGVzdHMsIGltcG9ydGxpYj1pbXBvcnRsaWIsIG1hY2hpbmVyeT1tYWNoaW5lcnkpCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0Ci0gICAgcnVuX3VuaXR0ZXN0KEZpbmRlclRlc3RzKQorCitjbGFzcyBQYXRoRW50cnlGaW5kZXJUZXN0czoKKworICAgIGRlZiB0ZXN0X2ZpbmRlcl93aXRoX2ZhaWxpbmdfZmluZF9tb2R1bGUoc2VsZik6CisgICAgICAgICMgUGF0aEVudHJ5RmluZGVyIHdpdGggZmluZF9tb2R1bGUoKSBkZWZpbmVkIHNob3VsZCB3b3JrLgorICAgICAgICAjIElzc3VlICMyMDc2My4KKyAgICAgICAgY2xhc3MgRmluZGVyOgorICAgICAgICAgICAgcGF0aF9sb2NhdGlvbiA9ICd0ZXN0X2ZpbmRlcl93aXRoX2ZpbmRfbW9kdWxlJworICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGgpOgorICAgICAgICAgICAgICAgIGlmIHBhdGggIT0gc2VsZi5wYXRoX2xvY2F0aW9uOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcgorCisgICAgICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgICAgICBkZWYgZmluZF9tb2R1bGUoZnVsbG5hbWUpOgorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisKKworICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKHBhdGg9W0ZpbmRlci5wYXRoX2xvY2F0aW9uXStzeXMucGF0aFs6XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoX2hvb2tzPVtGaW5kZXJdKToKKyAgICAgICAgICAgIHNlbGYubWFjaGluZXJ5LlBhdGhGaW5kZXIuZmluZF9zcGVjKCdpbXBvcnRsaWInKQorCitGcm96ZW5fUEVGVGVzdHMsIFNvdXJjZV9QRUZUZXN0cyA9IHV0aWwudGVzdF9ib3RoKAorICAgICAgICBQYXRoRW50cnlGaW5kZXJUZXN0cywgbWFjaGluZXJ5PW1hY2hpbmVyeSkKKwogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfcmVsYXRpdmVfaW1wb3J0cy5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9yZWxhdGl2ZV9pbXBvcnRzLnB5CmluZGV4IDQ1NjljMjYuLmIyMTZlOWMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9yZWxhdGl2ZV9pbXBvcnRzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9yZWxhdGl2ZV9pbXBvcnRzLnB5CkBAIC00LDcgKzQsNyBAQAogaW1wb3J0IHN5cwogaW1wb3J0IHVuaXR0ZXN0CiAKLWNsYXNzIFJlbGF0aXZlSW1wb3J0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBSZWxhdGl2ZUltcG9ydHM6CiAKICAgICAiIiJQRVAgMzI4IGludHJvZHVjZWQgcmVsYXRpdmUgaW1wb3J0cy4gVGhpcyBhbGxvd3MgZm9yIGltcG9ydHMgdG8gb2NjdXIKICAgICBmcm9tIHdpdGhpbiBhIHBhY2thZ2Ugd2l0aG91dCBoYXZpbmcgdG8gc3BlY2lmeSB0aGUgYWN0dWFsIHBhY2thZ2UgbmFtZS4KQEAgLTY0LDcgKzY0LDcgQEAKICAgICAgICAgICAgICAgICB1bmNhY2hlX25hbWVzLmFwcGVuZChuYW1lKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICB1bmNhY2hlX25hbWVzLmFwcGVuZChuYW1lWzotbGVuKCcuX19pbml0X18nKV0pCi0gICAgICAgIHdpdGggdXRpbC5tb2NrX21vZHVsZXMoKmNyZWF0ZSkgYXMgaW1wb3J0ZXI6CisgICAgICAgIHdpdGggdXRpbC5tb2NrX3NwZWMoKmNyZWF0ZSkgYXMgaW1wb3J0ZXI6CiAgICAgICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1baW1wb3J0ZXJdKToKICAgICAgICAgICAgICAgICBmb3IgZ2xvYmFsXyBpbiBnbG9iYWxzXzoKICAgICAgICAgICAgICAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUoKnVuY2FjaGVfbmFtZXMpOgpAQCAtNzYsOCArNzYsOCBAQAogICAgICAgICBjcmVhdGUgPSAncGtnLl9faW5pdF9fJywgJ3BrZy5tb2QyJwogICAgICAgICBnbG9iYWxzXyA9IHsnX19wYWNrYWdlX18nOiAncGtnJ30sIHsnX19uYW1lX18nOiAncGtnLm1vZDEnfQogICAgICAgICBkZWYgY2FsbGJhY2soZ2xvYmFsXyk6Ci0gICAgICAgICAgICBpbXBvcnRfdXRpbC5pbXBvcnRfKCdwa2cnKSAgIyBGb3IgX19pbXBvcnRfXygpLgotICAgICAgICAgICAgbW9kdWxlID0gaW1wb3J0X3V0aWwuaW1wb3J0XygnJywgZ2xvYmFsXywgZnJvbWxpc3Q9Wydtb2QyJ10sIGxldmVsPTEpCisgICAgICAgICAgICBzZWxmLl9faW1wb3J0X18oJ3BrZycpICAjIEZvciBfX2ltcG9ydF9fKCkuCisgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLl9faW1wb3J0X18oJycsIGdsb2JhbF8sIGZyb21saXN0PVsnbW9kMiddLCBsZXZlbD0xKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19uYW1lX18sICdwa2cnKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIobW9kdWxlLCAnbW9kMicpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUubW9kMi5hdHRyLCAncGtnLm1vZDInKQpAQCAtODgsOCArODgsOCBAQAogICAgICAgICBjcmVhdGUgPSAncGtnLl9faW5pdF9fJywgJ3BrZy5tb2QyJwogICAgICAgICBnbG9iYWxzXyA9IHsnX19wYWNrYWdlX18nOiAncGtnJ30sIHsnX19uYW1lX18nOiAncGtnLm1vZDEnfQogICAgICAgICBkZWYgY2FsbGJhY2soZ2xvYmFsXyk6Ci0gICAgICAgICAgICBpbXBvcnRfdXRpbC5pbXBvcnRfKCdwa2cnKSAgIyBGb3IgX19pbXBvcnRfXygpLgotICAgICAgICAgICAgbW9kdWxlID0gaW1wb3J0X3V0aWwuaW1wb3J0XygnbW9kMicsIGdsb2JhbF8sIGZyb21saXN0PVsnYXR0ciddLAorICAgICAgICAgICAgc2VsZi5fX2ltcG9ydF9fKCdwa2cnKSAgIyBGb3IgX19pbXBvcnRfXygpLgorICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5fX2ltcG9ydF9fKCdtb2QyJywgZ2xvYmFsXywgZnJvbWxpc3Q9WydhdHRyJ10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsPTEpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX25hbWVfXywgJ3BrZy5tb2QyJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLmF0dHIsICdwa2cubW9kMicpCkBAIC0xMDEsOCArMTAxLDggQEAKICAgICAgICAgZ2xvYmFsc18gPSAoeydfX3BhY2thZ2VfXyc6ICdwa2cnfSwKICAgICAgICAgICAgICAgICAgICAgeydfX25hbWVfXyc6ICdwa2cnLCAnX19wYXRoX18nOiBbJ2JsYWgnXX0pCiAgICAgICAgIGRlZiBjYWxsYmFjayhnbG9iYWxfKToKLSAgICAgICAgICAgIGltcG9ydF91dGlsLmltcG9ydF8oJ3BrZycpICAjIEZvciBfX2ltcG9ydF9fKCkuCi0gICAgICAgICAgICBtb2R1bGUgPSBpbXBvcnRfdXRpbC5pbXBvcnRfKCcnLCBnbG9iYWxfLCBmcm9tbGlzdD1bJ21vZHVsZSddLAorICAgICAgICAgICAgc2VsZi5fX2ltcG9ydF9fKCdwa2cnKSAgIyBGb3IgX19pbXBvcnRfXygpLgorICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5fX2ltcG9ydF9fKCcnLCBnbG9iYWxfLCBmcm9tbGlzdD1bJ21vZHVsZSddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbD0xKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19uYW1lX18sICdwa2cnKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIobW9kdWxlLCAnbW9kdWxlJykpCkBAIC0xMTQsOCArMTE0LDggQEAKICAgICAgICAgY3JlYXRlID0gJ3BrZy5fX2luaXRfXycsICdwa2cubW9kdWxlJwogICAgICAgICBnbG9iYWxzXyA9IHsnX19wYWNrYWdlX18nOiAncGtnJ30sIHsnX19uYW1lX18nOiAncGtnLm1vZHVsZSd9CiAgICAgICAgIGRlZiBjYWxsYmFjayhnbG9iYWxfKToKLSAgICAgICAgICAgIGltcG9ydF91dGlsLmltcG9ydF8oJ3BrZycpICAjIEZvciBfX2ltcG9ydF9fKCkuCi0gICAgICAgICAgICBtb2R1bGUgPSBpbXBvcnRfdXRpbC5pbXBvcnRfKCcnLCBnbG9iYWxfLCBmcm9tbGlzdD1bJ2F0dHInXSwgbGV2ZWw9MSkKKyAgICAgICAgICAgIHNlbGYuX19pbXBvcnRfXygncGtnJykgICMgRm9yIF9faW1wb3J0X18oKS4KKyAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuX19pbXBvcnRfXygnJywgZ2xvYmFsXywgZnJvbWxpc3Q9WydhdHRyJ10sIGxldmVsPTEpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX25hbWVfXywgJ3BrZycpCiAgICAgICAgIHNlbGYucmVsYXRpdmVfaW1wb3J0X3Rlc3QoY3JlYXRlLCBnbG9iYWxzXywgY2FsbGJhY2spCiAKQEAgLTEyNiw3ICsxMjYsNyBAQAogICAgICAgICBnbG9iYWxzXyA9ICAoeydfX3BhY2thZ2VfXyc6ICdwa2cuc3VicGtnMSd9LAogICAgICAgICAgICAgICAgICAgICAgeydfX25hbWVfXyc6ICdwa2cuc3VicGtnMScsICdfX3BhdGhfXyc6IFsnYmxhaCddfSkKICAgICAgICAgZGVmIGNhbGxiYWNrKGdsb2JhbF8pOgotICAgICAgICAgICAgbW9kdWxlID0gaW1wb3J0X3V0aWwuaW1wb3J0XygnJywgZ2xvYmFsXywgZnJvbWxpc3Q9WydzdWJwa2cyJ10sCisgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLl9faW1wb3J0X18oJycsIGdsb2JhbF8sIGZyb21saXN0PVsnc3VicGtnMiddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbD0yKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19uYW1lX18sICdwa2cnKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIobW9kdWxlLCAnc3VicGtnMicpKQpAQCAtMTQyLDggKzE0Miw4IEBACiAgICAgICAgICAgICAgICAgICAgIHsnX19uYW1lX18nOiAncGtnLnBrZzEucGtnMi5wa2czLnBrZzQucGtnNScsCiAgICAgICAgICAgICAgICAgICAgICAgICAnX19wYXRoX18nOiBbJ2JsYWgnXX0pCiAgICAgICAgIGRlZiBjYWxsYmFjayhnbG9iYWxfKToKLSAgICAgICAgICAgIGltcG9ydF91dGlsLmltcG9ydF8oZ2xvYmFsc19bMF1bJ19fcGFja2FnZV9fJ10pCi0gICAgICAgICAgICBtb2R1bGUgPSBpbXBvcnRfdXRpbC5pbXBvcnRfKCcnLCBnbG9iYWxfLCBmcm9tbGlzdD1bJ2F0dHInXSwgbGV2ZWw9NikKKyAgICAgICAgICAgIHNlbGYuX19pbXBvcnRfXyhnbG9iYWxzX1swXVsnX19wYWNrYWdlX18nXSkKKyAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuX19pbXBvcnRfXygnJywgZ2xvYmFsXywgZnJvbWxpc3Q9WydhdHRyJ10sIGxldmVsPTYpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX25hbWVfXywgJ3BrZycpCiAgICAgICAgIHNlbGYucmVsYXRpdmVfaW1wb3J0X3Rlc3QoY3JlYXRlLCBnbG9iYWxzXywgY2FsbGJhY2spCiAKQEAgLTE1Myw5ICsxNTMsOSBAQAogICAgICAgICBnbG9iYWxzXyA9ICh7J19fcGFja2FnZV9fJzogJ3BrZyd9LAogICAgICAgICAgICAgICAgICAgICB7J19fbmFtZV9fJzogJ3BrZycsICdfX3BhdGhfXyc6IFsnYmxhaCddfSkKICAgICAgICAgZGVmIGNhbGxiYWNrKGdsb2JhbF8pOgotICAgICAgICAgICAgaW1wb3J0X3V0aWwuaW1wb3J0XygncGtnJykKKyAgICAgICAgICAgIHNlbGYuX19pbXBvcnRfXygncGtnJykKICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6Ci0gICAgICAgICAgICAgICAgaW1wb3J0X3V0aWwuaW1wb3J0XygnJywgZ2xvYmFsXywgZnJvbWxpc3Q9Wyd0b3BfbGV2ZWwnXSwKKyAgICAgICAgICAgICAgICBzZWxmLl9faW1wb3J0X18oJycsIGdsb2JhbF8sIGZyb21saXN0PVsndG9wX2xldmVsJ10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbD0yKQogICAgICAgICBzZWxmLnJlbGF0aXZlX2ltcG9ydF90ZXN0KGNyZWF0ZSwgZ2xvYmFsc18sIGNhbGxiYWNrKQogCkBAIC0xNjQsMTYgKzE2NCwxNiBAQAogICAgICAgICBjcmVhdGUgPSBbJ3RvcF9sZXZlbCcsICdwa2cuX19pbml0X18nLCAncGtnLm1vZHVsZSddCiAgICAgICAgIGdsb2JhbHNfID0geydfX3BhY2thZ2VfXyc6ICdwa2cnfSwgeydfX25hbWVfXyc6ICdwa2cubW9kdWxlJ30KICAgICAgICAgZGVmIGNhbGxiYWNrKGdsb2JhbF8pOgotICAgICAgICAgICAgaW1wb3J0X3V0aWwuaW1wb3J0XygncGtnJykKKyAgICAgICAgICAgIHNlbGYuX19pbXBvcnRfXygncGtnJykKICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6Ci0gICAgICAgICAgICAgICAgaW1wb3J0X3V0aWwuaW1wb3J0XygnJywgZ2xvYmFsXywgZnJvbWxpc3Q9Wyd0b3BfbGV2ZWwnXSwKKyAgICAgICAgICAgICAgICBzZWxmLl9faW1wb3J0X18oJycsIGdsb2JhbF8sIGZyb21saXN0PVsndG9wX2xldmVsJ10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbD0yKQogICAgICAgICBzZWxmLnJlbGF0aXZlX2ltcG9ydF90ZXN0KGNyZWF0ZSwgZ2xvYmFsc18sIGNhbGxiYWNrKQogCiAgICAgZGVmIHRlc3RfZW1wdHlfbmFtZV93X2xldmVsXzAoc2VsZik6CiAgICAgICAgICMgW2VtcHR5IG5hbWVdCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6Ci0gICAgICAgICAgICBpbXBvcnRfdXRpbC5pbXBvcnRfKCcnKQorICAgICAgICAgICAgc2VsZi5fX2ltcG9ydF9fKCcnKQogCiAgICAgZGVmIHRlc3RfaW1wb3J0X2Zyb21fZGlmZmVyZW50X3BhY2thZ2Uoc2VsZik6CiAgICAgICAgICMgVGVzdCBpbXBvcnRpbmcgZnJvbSBhIGRpZmZlcmVudCBwYWNrYWdlIHRoYW4gdGhlIGNhbGxlci4KQEAgLTE4Niw4ICsxODYsOCBAQAogICAgICAgICAgICAgICAgICAgICAnX19ydW5weV9wa2dfXy51bmNsZS5jb3VzaW4ubmVwaGV3J10KICAgICAgICAgZ2xvYmFsc18gPSB7J19fcGFja2FnZV9fJzogJ19fcnVucHlfcGtnX18uX19ydW5weV9wa2dfXyd9CiAgICAgICAgIGRlZiBjYWxsYmFjayhnbG9iYWxfKToKLSAgICAgICAgICAgIGltcG9ydF91dGlsLmltcG9ydF8oJ19fcnVucHlfcGtnX18uX19ydW5weV9wa2dfXycpCi0gICAgICAgICAgICBtb2R1bGUgPSBpbXBvcnRfdXRpbC5pbXBvcnRfKCd1bmNsZS5jb3VzaW4nLCBnbG9iYWxzXywge30sCisgICAgICAgICAgICBzZWxmLl9faW1wb3J0X18oJ19fcnVucHlfcGtnX18uX19ydW5weV9wa2dfXycpCisgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLl9faW1wb3J0X18oJ3VuY2xlLmNvdXNpbicsIGdsb2JhbHNfLCB7fSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb21saXN0PVsnbmVwaGV3J10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsPTIpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX25hbWVfXywgJ19fcnVucHlfcGtnX18udW5jbGUuY291c2luJykKQEAgLTE5OCwyMCArMTk4LDE5IEBACiAgICAgICAgIGNyZWF0ZSA9IFsnY3Jhc2guX19pbml0X18nLCAnY3Jhc2gubW9kJ10KICAgICAgICAgZ2xvYmFsc18gPSBbeydfX3BhY2thZ2VfXyc6ICdjcmFzaCcsICdfX25hbWVfXyc6ICdjcmFzaCd9XQogICAgICAgICBkZWYgY2FsbGJhY2soZ2xvYmFsXyk6Ci0gICAgICAgICAgICBpbXBvcnRfdXRpbC5pbXBvcnRfKCdjcmFzaCcpCi0gICAgICAgICAgICBtb2QgPSBpbXBvcnRfdXRpbC5pbXBvcnRfKCdtb2QnLCBnbG9iYWxfLCB7fSwgW10sIDEpCisgICAgICAgICAgICBzZWxmLl9faW1wb3J0X18oJ2NyYXNoJykKKyAgICAgICAgICAgIG1vZCA9IHNlbGYuX19pbXBvcnRfXygnbW9kJywgZ2xvYmFsXywge30sIFtdLCAxKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2QuX19uYW1lX18sICdjcmFzaC5tb2QnKQogICAgICAgICBzZWxmLnJlbGF0aXZlX2ltcG9ydF90ZXN0KGNyZWF0ZSwgZ2xvYmFsc18sIGNhbGxiYWNrKQogCiAgICAgZGVmIHRlc3RfcmVsYXRpdmVfaW1wb3J0X25vX2dsb2JhbHMoc2VsZik6CiAgICAgICAgICMgTm8gZ2xvYmFscyBmb3IgYSByZWxhdGl2ZSBpbXBvcnQgaXMgYW4gZXJyb3IuCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IpOgotICAgICAgICAgICAgaW1wb3J0X3V0aWwuaW1wb3J0Xygnc3lzJywgbGV2ZWw9MSkKKyAgICAgICAgICAgIHNlbGYuX19pbXBvcnRfXygnc3lzJywgbGV2ZWw9MSkKIAorRnJvemVuX1JlbGF0aXZlSW1wb3J0cywgU291cmNlX1JlbGF0aXZlSW1wb3J0cyA9IHV0aWwudGVzdF9ib3RoKAorICAgICAgICBSZWxhdGl2ZUltcG9ydHMsIF9faW1wb3J0X189aW1wb3J0X3V0aWwuX19pbXBvcnRfXykKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKLSAgICBydW5fdW5pdHRlc3QoUmVsYXRpdmVJbXBvcnRzKQogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3V0aWwucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3V0aWwucHkKaW5kZXggODZhYzA2NS4uZGNiNDkwZiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy91dGlsLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdXRpbC5weQpAQCAtMSwyMiArMSwxNCBAQAorZnJvbSAuLiBpbXBvcnQgdXRpbAorCitmcm96ZW5faW1wb3J0bGliLCBzb3VyY2VfaW1wb3J0bGliID0gdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWInKQorCitpbXBvcnQgYnVpbHRpbnMKIGltcG9ydCBmdW5jdG9vbHMKIGltcG9ydCBpbXBvcnRsaWIKIGltcG9ydCB1bml0dGVzdAogCiAKLXVzaW5nX19faW1wb3J0X18gPSBGYWxzZQotCi0KLWRlZiBpbXBvcnRfKCphcmdzLCAqKmt3YXJncyk6Ci0gICAgIiIiRGVsZWdhdGUgdG8gYWxsb3cgZm9yIGluamVjdGluZyBkaWZmZXJlbnQgaW1wbGVtZW50YXRpb25zIG9mIGltcG9ydC4iIiIKLSAgICBpZiB1c2luZ19fX2ltcG9ydF9fOgotICAgICAgICByZXR1cm4gX19pbXBvcnRfXygqYXJncywgKiprd2FyZ3MpCi0gICAgZWxzZToKLSAgICAgICAgcmV0dXJuIGltcG9ydGxpYi5fX2ltcG9ydF9fKCphcmdzLCAqKmt3YXJncykKLQotCi1kZWYgaW1wb3J0bGliX29ubHkoZnhuKToKLSAgICAiIiJEZWNvcmF0b3IgdG8gc2tpcCBhIHRlc3QgaWYgdXNpbmcgX19idWlsdGluc19fLl9faW1wb3J0X18uIiIiCi0gICAgcmV0dXJuIHVuaXR0ZXN0LnNraXBJZih1c2luZ19fX2ltcG9ydF9fLCAiaW1wb3J0bGliLXNwZWNpZmljIHRlc3QiKShmeG4pCitfX2ltcG9ydF9fID0gc3RhdGljbWV0aG9kKGJ1aWx0aW5zLl9faW1wb3J0X18pLCBzdGF0aWNtZXRob2Qoc291cmNlX2ltcG9ydGxpYi5fX2ltcG9ydF9fKQogCiAKIGRlZiBtb2NrX3BhdGhfaG9vaygqZW50cmllcywgaW1wb3J0ZXIpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvbmFtZXNwYWNlX3BrZ3MvYm90aF9wb3J0aW9ucy9mb28vb25lLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvbmFtZXNwYWNlX3BrZ3MvYm90aF9wb3J0aW9ucy9mb28vb25lLnB5CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBMaWIvdGVzdC9uYW1lc3BhY2VfcGtncy9ib3RoX3BvcnRpb25zL2Zvby9vbmUucHkKcmVuYW1lIHRvIExpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL25hbWVzcGFjZV9wa2dzL2JvdGhfcG9ydGlvbnMvZm9vL29uZS5weQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvbmFtZXNwYWNlX3BrZ3MvYm90aF9wb3J0aW9ucy9mb28vdHdvLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvbmFtZXNwYWNlX3BrZ3MvYm90aF9wb3J0aW9ucy9mb28vdHdvLnB5CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBMaWIvdGVzdC9uYW1lc3BhY2VfcGtncy9ib3RoX3BvcnRpb25zL2Zvby90d28ucHkKcmVuYW1lIHRvIExpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL25hbWVzcGFjZV9wa2dzL2JvdGhfcG9ydGlvbnMvZm9vL3R3by5weQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvbmFtZXNwYWNlX3BrZ3MvbWlzc2luZ19kaXJlY3RvcnkuemlwIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvbmFtZXNwYWNlX3BrZ3MvbWlzc2luZ19kaXJlY3RvcnkuemlwCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBMaWIvdGVzdC9uYW1lc3BhY2VfcGtncy9taXNzaW5nX2RpcmVjdG9yeS56aXAKcmVuYW1lIHRvIExpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL25hbWVzcGFjZV9wa2dzL21pc3NpbmdfZGlyZWN0b3J5LnppcApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9uYW1lc3BhY2VfcGtncy9tb2R1bGVfYW5kX25hbWVzcGFjZV9wYWNrYWdlL2FfdGVzdC5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL25hbWVzcGFjZV9wa2dzL21vZHVsZV9hbmRfbmFtZXNwYWNlX3BhY2thZ2UvYV90ZXN0LnB5CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBMaWIvdGVzdC9uYW1lc3BhY2VfcGtncy9tb2R1bGVfYW5kX25hbWVzcGFjZV9wYWNrYWdlL2FfdGVzdC5weQpyZW5hbWUgdG8gTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvbmFtZXNwYWNlX3BrZ3MvbW9kdWxlX2FuZF9uYW1lc3BhY2VfcGFja2FnZS9hX3Rlc3QucHkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L25hbWVzcGFjZV9wa2dzL21vZHVsZV9hbmRfbmFtZXNwYWNlX3BhY2thZ2UvYV90ZXN0L2VtcHR5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvbmFtZXNwYWNlX3BrZ3MvbW9kdWxlX2FuZF9uYW1lc3BhY2VfcGFja2FnZS9hX3Rlc3QvZW1wdHkKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIExpYi90ZXN0L25hbWVzcGFjZV9wa2dzL21vZHVsZV9hbmRfbmFtZXNwYWNlX3BhY2thZ2UvYV90ZXN0L2VtcHR5CnJlbmFtZSB0byBMaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9uYW1lc3BhY2VfcGtncy9tb2R1bGVfYW5kX25hbWVzcGFjZV9wYWNrYWdlL2FfdGVzdC9lbXB0eQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvbmFtZXNwYWNlX3BrZ3MvbmVzdGVkX3BvcnRpb24xLnppcCBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL25hbWVzcGFjZV9wa2dzL25lc3RlZF9wb3J0aW9uMS56aXAKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIExpYi90ZXN0L25hbWVzcGFjZV9wa2dzL25lc3RlZF9wb3J0aW9uMS56aXAKcmVuYW1lIHRvIExpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL25hbWVzcGFjZV9wa2dzL25lc3RlZF9wb3J0aW9uMS56aXAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvbmFtZXNwYWNlX3BrZ3Mvbm90X2FfbmFtZXNwYWNlX3BrZy9mb28vX19pbml0X18ucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9uYW1lc3BhY2VfcGtncy9ub3RfYV9uYW1lc3BhY2VfcGtnL2Zvby9fX2luaXRfXy5weQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gTGliL3Rlc3QvbmFtZXNwYWNlX3BrZ3Mvbm90X2FfbmFtZXNwYWNlX3BrZy9mb28vX19pbml0X18ucHkKcmVuYW1lIHRvIExpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL25hbWVzcGFjZV9wa2dzL25vdF9hX25hbWVzcGFjZV9wa2cvZm9vL19faW5pdF9fLnB5CmRpZmYgLS1naXQgYS9MaWIvdGVzdC9uYW1lc3BhY2VfcGtncy9ub3RfYV9uYW1lc3BhY2VfcGtnL2Zvby9vbmUucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9uYW1lc3BhY2VfcGtncy9ub3RfYV9uYW1lc3BhY2VfcGtnL2Zvby9vbmUucHkKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIExpYi90ZXN0L25hbWVzcGFjZV9wa2dzL25vdF9hX25hbWVzcGFjZV9wa2cvZm9vL29uZS5weQpyZW5hbWUgdG8gTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvbmFtZXNwYWNlX3BrZ3Mvbm90X2FfbmFtZXNwYWNlX3BrZy9mb28vb25lLnB5CmRpZmYgLS1naXQgYS9MaWIvdGVzdC9uYW1lc3BhY2VfcGtncy9wb3J0aW9uMS9mb28vb25lLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvbmFtZXNwYWNlX3BrZ3MvcG9ydGlvbjEvZm9vL29uZS5weQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gTGliL3Rlc3QvbmFtZXNwYWNlX3BrZ3MvcG9ydGlvbjEvZm9vL29uZS5weQpyZW5hbWUgdG8gTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvbmFtZXNwYWNlX3BrZ3MvcG9ydGlvbjEvZm9vL29uZS5weQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvbmFtZXNwYWNlX3BrZ3MvcG9ydGlvbjIvZm9vL3R3by5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL25hbWVzcGFjZV9wa2dzL3BvcnRpb24yL2Zvby90d28ucHkKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIExpYi90ZXN0L25hbWVzcGFjZV9wa2dzL3BvcnRpb24yL2Zvby90d28ucHkKcmVuYW1lIHRvIExpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL25hbWVzcGFjZV9wa2dzL3BvcnRpb24yL2Zvby90d28ucHkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L25hbWVzcGFjZV9wa2dzL3Byb2plY3QxL3BhcmVudC9jaGlsZC9vbmUucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9uYW1lc3BhY2VfcGtncy9wcm9qZWN0MS9wYXJlbnQvY2hpbGQvb25lLnB5CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBMaWIvdGVzdC9uYW1lc3BhY2VfcGtncy9wcm9qZWN0MS9wYXJlbnQvY2hpbGQvb25lLnB5CnJlbmFtZSB0byBMaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9uYW1lc3BhY2VfcGtncy9wcm9qZWN0MS9wYXJlbnQvY2hpbGQvb25lLnB5CmRpZmYgLS1naXQgYS9MaWIvdGVzdC9uYW1lc3BhY2VfcGtncy9wcm9qZWN0Mi9wYXJlbnQvY2hpbGQvdHdvLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvbmFtZXNwYWNlX3BrZ3MvcHJvamVjdDIvcGFyZW50L2NoaWxkL3R3by5weQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gTGliL3Rlc3QvbmFtZXNwYWNlX3BrZ3MvcHJvamVjdDIvcGFyZW50L2NoaWxkL3R3by5weQpyZW5hbWUgdG8gTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvbmFtZXNwYWNlX3BrZ3MvcHJvamVjdDIvcGFyZW50L2NoaWxkL3R3by5weQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvbmFtZXNwYWNlX3BrZ3MvcHJvamVjdDMvcGFyZW50L2NoaWxkL3RocmVlLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvbmFtZXNwYWNlX3BrZ3MvcHJvamVjdDMvcGFyZW50L2NoaWxkL3RocmVlLnB5CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBMaWIvdGVzdC9uYW1lc3BhY2VfcGtncy9wcm9qZWN0My9wYXJlbnQvY2hpbGQvdGhyZWUucHkKcmVuYW1lIHRvIExpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL25hbWVzcGFjZV9wa2dzL3Byb2plY3QzL3BhcmVudC9jaGlsZC90aHJlZS5weQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvbmFtZXNwYWNlX3BrZ3MvdG9wX2xldmVsX3BvcnRpb24xLnppcCBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL25hbWVzcGFjZV9wa2dzL3RvcF9sZXZlbF9wb3J0aW9uMS56aXAKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIExpYi90ZXN0L25hbWVzcGFjZV9wa2dzL3RvcF9sZXZlbF9wb3J0aW9uMS56aXAKcmVuYW1lIHRvIExpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL25hbWVzcGFjZV9wa2dzL3RvcF9sZXZlbF9wb3J0aW9uMS56aXAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvc291cmNlL19faW5pdF9fLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvc291cmNlL19faW5pdF9fLnB5CmluZGV4IDNlZjk3ZjMuLjRiMTZlY2MgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS9fX2luaXRfXy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9zb3VyY2UvX19pbml0X18ucHkKQEAgLTEsMTMgKzEsNSBAQAotZnJvbSAuLiBpbXBvcnQgdGVzdF9zdWl0ZQotaW1wb3J0IG9zLnBhdGgKLWltcG9ydCB1bml0dGVzdAoraW1wb3J0IG9zCitmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgbG9hZF9wYWNrYWdlX3Rlc3RzCiAKLQotZGVmIHRlc3Rfc3VpdGUoKToKLSAgICBkaXJlY3RvcnkgPSBvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pCi0gICAgcmV0dXJuIHRlc3QudGVzdF9zdWl0ZSgnaW1wb3J0bGliLnRlc3Quc291cmNlJywgZGlyZWN0b3J5KQotCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAotICAgIHJ1bl91bml0dGVzdCh0ZXN0X3N1aXRlKCkpCitkZWYgbG9hZF90ZXN0cygqYXJncyk6CisgICAgcmV0dXJuIGxvYWRfcGFja2FnZV90ZXN0cyhvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAqYXJncykKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS9fX21haW5fXy5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS9fX21haW5fXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGEyM2EyCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvc291cmNlL19fbWFpbl9fLnB5CkBAIC0wLDAgKzEsNCBAQAorZnJvbSAuIGltcG9ydCBsb2FkX3Rlc3RzCitpbXBvcnQgdW5pdHRlc3QKKwordW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9zb3VyY2UvdGVzdF9hYmNfbG9hZGVyLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvc291cmNlL3Rlc3RfYWJjX2xvYWRlci5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGQ5MTJiNi4uMDAwMDAwMAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9zb3VyY2UvdGVzdF9hYmNfbG9hZGVyLnB5CisrKyAvZGV2L251bGwKQEAgLTEsOTA2ICswLDAgQEAKLWltcG9ydCBpbXBvcnRsaWIKLWZyb20gaW1wb3J0bGliIGltcG9ydCBhYmMKLQotZnJvbSAuLiBpbXBvcnQgYWJjIGFzIHRlc3RpbmdfYWJjCi1mcm9tIC4uIGltcG9ydCB1dGlsCi1mcm9tIC4gaW1wb3J0IHV0aWwgYXMgc291cmNlX3V0aWwKLQotaW1wb3J0IGltcAotaW1wb3J0IGluc3BlY3QKLWltcG9ydCBpbwotaW1wb3J0IG1hcnNoYWwKLWltcG9ydCBvcwotaW1wb3J0IHN5cwotaW1wb3J0IHR5cGVzCi1pbXBvcnQgdW5pdHRlc3QKLWltcG9ydCB3YXJuaW5ncwotCi0KLWNsYXNzIFNvdXJjZU9ubHlMb2FkZXJNb2NrKGFiYy5Tb3VyY2VMb2FkZXIpOgotCi0gICAgIyBHbG9iYWxzIHRoYXQgc2hvdWxkIGJlIGRlZmluZWQgZm9yIGFsbCBtb2R1bGVzLgotICAgIHNvdXJjZSA9IChiIl8gPSAnOjonLmpvaW4oW19fbmFtZV9fLCBfX2ZpbGVfXywgX19jYWNoZWRfXywgX19wYWNrYWdlX18sICIKLSAgICAgICAgICAgICAgYiJyZXByKF9fbG9hZGVyX18pXSkiKQotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGgpOgotICAgICAgICBzZWxmLnBhdGggPSBwYXRoCi0KLSAgICBkZWYgZ2V0X2RhdGEoc2VsZiwgcGF0aCk6Ci0gICAgICAgIGFzc2VydCBzZWxmLnBhdGggPT0gcGF0aAotICAgICAgICByZXR1cm4gc2VsZi5zb3VyY2UKLQotICAgIGRlZiBnZXRfZmlsZW5hbWUoc2VsZiwgZnVsbG5hbWUpOgotICAgICAgICByZXR1cm4gc2VsZi5wYXRoCi0KLSAgICBkZWYgbW9kdWxlX3JlcHIoc2VsZiwgbW9kdWxlKToKLSAgICAgICAgcmV0dXJuICc8bW9kdWxlPicKLQotCi1jbGFzcyBTb3VyY2VMb2FkZXJNb2NrKFNvdXJjZU9ubHlMb2FkZXJNb2NrKToKLQotICAgIHNvdXJjZV9tdGltZSA9IDEKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXRoLCBtYWdpYz1pbXAuZ2V0X21hZ2ljKCkpOgotICAgICAgICBzdXBlcigpLl9faW5pdF9fKHBhdGgpCi0gICAgICAgIHNlbGYuYnl0ZWNvZGVfcGF0aCA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShzZWxmLnBhdGgpCi0gICAgICAgIHNlbGYuc291cmNlX3NpemUgPSBsZW4oc2VsZi5zb3VyY2UpCi0gICAgICAgIGRhdGEgPSBieXRlYXJyYXkobWFnaWMpCi0gICAgICAgIGRhdGEuZXh0ZW5kKGltcG9ydGxpYi5fd19sb25nKHNlbGYuc291cmNlX210aW1lKSkKLSAgICAgICAgZGF0YS5leHRlbmQoaW1wb3J0bGliLl93X2xvbmcoc2VsZi5zb3VyY2Vfc2l6ZSkpCi0gICAgICAgIGNvZGVfb2JqZWN0ID0gY29tcGlsZShzZWxmLnNvdXJjZSwgc2VsZi5wYXRoLCAnZXhlYycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbnRfaW5oZXJpdD1UcnVlKQotICAgICAgICBkYXRhLmV4dGVuZChtYXJzaGFsLmR1bXBzKGNvZGVfb2JqZWN0KSkKLSAgICAgICAgc2VsZi5ieXRlY29kZSA9IGJ5dGVzKGRhdGEpCi0gICAgICAgIHNlbGYud3JpdHRlbiA9IHt9Ci0KLSAgICBkZWYgZ2V0X2RhdGEoc2VsZiwgcGF0aCk6Ci0gICAgICAgIGlmIHBhdGggPT0gc2VsZi5wYXRoOgotICAgICAgICAgICAgcmV0dXJuIHN1cGVyKCkuZ2V0X2RhdGEocGF0aCkKLSAgICAgICAgZWxpZiBwYXRoID09IHNlbGYuYnl0ZWNvZGVfcGF0aDoKLSAgICAgICAgICAgIHJldHVybiBzZWxmLmJ5dGVjb2RlCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yCi0KLSAgICBkZWYgcGF0aF9zdGF0cyhzZWxmLCBwYXRoKToKLSAgICAgICAgYXNzZXJ0IHBhdGggPT0gc2VsZi5wYXRoCi0gICAgICAgIHJldHVybiB7J210aW1lJzogc2VsZi5zb3VyY2VfbXRpbWUsICdzaXplJzogc2VsZi5zb3VyY2Vfc2l6ZX0KLQotICAgIGRlZiBzZXRfZGF0YShzZWxmLCBwYXRoLCBkYXRhKToKLSAgICAgICAgc2VsZi53cml0dGVuW3BhdGhdID0gYnl0ZXMoZGF0YSkKLSAgICAgICAgcmV0dXJuIHBhdGggPT0gc2VsZi5ieXRlY29kZV9wYXRoCi0KLQotY2xhc3MgUHlMb2FkZXJNb2NrKGFiYy5QeUxvYWRlcik6Ci0KLSAgICAjIEdsb2JhbHMgdGhhdCBzaG91bGQgYmUgZGVmaW5lZCBmb3IgYWxsIG1vZHVsZXMuCi0gICAgc291cmNlID0gKGIiXyA9ICc6Oicuam9pbihbX19uYW1lX18sIF9fZmlsZV9fLCBfX3BhY2thZ2VfXywgIgotICAgICAgICAgICAgICBiInJlcHIoX19sb2FkZXJfXyldKSIpCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgZGF0YSk6Ci0gICAgICAgICIiIlRha2UgYSBkaWN0IG9mICdtb2R1bGVfbmFtZTogcGF0aCcgcGFpcmluZ3MuCi0KLSAgICAgICAgUGF0aHMgc2hvdWxkIGhhdmUgbm8gZmlsZSBleHRlbnNpb24sIGFsbG93aW5nIHBhY2thZ2VzIHRvIGJlIGRlbm90ZWQgYnkKLSAgICAgICAgZW5kaW5nIGluICdfX2luaXRfXycuCi0KLSAgICAgICAgIiIiCi0gICAgICAgIHNlbGYubW9kdWxlX3BhdGhzID0gZGF0YQotICAgICAgICBzZWxmLnBhdGhfdG9fbW9kdWxlID0ge3ZhbDprZXkgZm9yIGtleSx2YWwgaW4gZGF0YS5pdGVtcygpfQotCi0gICAgZGVmIGdldF9kYXRhKHNlbGYsIHBhdGgpOgotICAgICAgICBpZiBwYXRoIG5vdCBpbiBzZWxmLnBhdGhfdG9fbW9kdWxlOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcgotICAgICAgICByZXR1cm4gc2VsZi5zb3VyY2UKLQotICAgIGRlZiBpc19wYWNrYWdlKHNlbGYsIG5hbWUpOgotICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUoc2VsZi5nZXRfZmlsZW5hbWUobmFtZSkpCi0gICAgICAgIHJldHVybiBvcy5wYXRoLnNwbGl0ZXh0KGZpbGVuYW1lKVswXSA9PSAnX19pbml0X18nCi0KLSAgICBkZWYgc291cmNlX3BhdGgoc2VsZiwgbmFtZSk6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLm1vZHVsZV9wYXRoc1tuYW1lXQotICAgICAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcgotCi0gICAgZGVmIGdldF9maWxlbmFtZShzZWxmLCBuYW1lKToKLSAgICAgICAgIiIiU2lsZW5jZSBkZXByZWNhdGlvbiB3YXJuaW5nLiIiIgotICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKHJlY29yZD1UcnVlKSBhcyB3OgotICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCJhbHdheXMiKQotICAgICAgICAgICAgcGF0aCA9IHN1cGVyKCkuZ2V0X2ZpbGVuYW1lKG5hbWUpCi0gICAgICAgICAgICBhc3NlcnQgbGVuKHcpID09IDEKLSAgICAgICAgICAgIGFzc2VydCBpc3N1YmNsYXNzKHdbMF0uY2F0ZWdvcnksIERlcHJlY2F0aW9uV2FybmluZykKLSAgICAgICAgICAgIHJldHVybiBwYXRoCi0KLSAgICBkZWYgbW9kdWxlX3JlcHIoc2VsZik6Ci0gICAgICAgIHJldHVybiAnPG1vZHVsZT4nCi0KLQotY2xhc3MgUHlMb2FkZXJDb21wYXRNb2NrKFB5TG9hZGVyTW9jayk6Ci0KLSAgICAiIiJNb2NrIHRoYXQgbWF0Y2hlcyB3aGF0IGlzIHN1Z2dlc3RlZCB0byBoYXZlIGEgbG9hZGVyIHRoYXQgaXMgY29tcGF0aWJsZQotICAgIGZyb20gUHl0aG9uIDMuMSBvbndhcmRzLiIiIgotCi0gICAgZGVmIGdldF9maWxlbmFtZShzZWxmLCBmdWxsbmFtZSk6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLm1vZHVsZV9wYXRoc1tmdWxsbmFtZV0KLSAgICAgICAgZXhjZXB0IEtleUVycm9yOgotICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IKLQotICAgIGRlZiBzb3VyY2VfcGF0aChzZWxmLCBmdWxsbmFtZSk6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLmdldF9maWxlbmFtZShmdWxsbmFtZSkKLSAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgotICAgICAgICAgICAgcmV0dXJuIE5vbmUKLQotCi1jbGFzcyBQeVB5Y0xvYWRlck1vY2soYWJjLlB5UHljTG9hZGVyLCBQeUxvYWRlck1vY2spOgotCi0gICAgZGVmYXVsdF9tdGltZSA9IDEKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzb3VyY2UsIGJjPXt9KToKLSAgICAgICAgIiIiSW5pdGlhbGl6ZSBtb2NrLgotCi0gICAgICAgICdiYycgaXMgYSBkaWN0IGtleWVkIG9uIGEgbW9kdWxlJ3MgbmFtZS4gVGhlIHZhbHVlIGlzIGRpY3Qgd2l0aAotICAgICAgICBwb3NzaWJsZSBrZXlzIG9mICdwYXRoJywgJ210aW1lJywgJ21hZ2ljJywgYW5kICdiYycuIEV4Y2VwdCBmb3IgJ3BhdGgnLAotICAgICAgICBlYWNoIG9mIHRob3NlIGtleXMgY29udHJvbCBpZiBhbnkgcGFydCBvZiBjcmVhdGVkIGJ5dGVjb2RlIGlzIHRvCi0gICAgICAgIGRldmlhdGUgZnJvbSBkZWZhdWx0IHZhbHVlcy4KLQotICAgICAgICAiIiIKLSAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhzb3VyY2UpCi0gICAgICAgIHNlbGYubW9kdWxlX2J5dGVjb2RlID0ge30KLSAgICAgICAgc2VsZi5wYXRoX3RvX2J5dGVjb2RlID0ge30KLSAgICAgICAgc2VsZi5ieXRlY29kZV90b19wYXRoID0ge30KLSAgICAgICAgZm9yIG5hbWUsIGRhdGEgaW4gYmMuaXRlbXMoKToKLSAgICAgICAgICAgIHNlbGYucGF0aF90b19ieXRlY29kZVtkYXRhWydwYXRoJ11dID0gbmFtZQotICAgICAgICAgICAgc2VsZi5ieXRlY29kZV90b19wYXRoW25hbWVdID0gZGF0YVsncGF0aCddCi0gICAgICAgICAgICBtYWdpYyA9IGRhdGEuZ2V0KCdtYWdpYycsIGltcC5nZXRfbWFnaWMoKSkKLSAgICAgICAgICAgIG10aW1lID0gaW1wb3J0bGliLl93X2xvbmcoZGF0YS5nZXQoJ210aW1lJywgc2VsZi5kZWZhdWx0X210aW1lKSkKLSAgICAgICAgICAgIHNvdXJjZV9zaXplID0gaW1wb3J0bGliLl93X2xvbmcobGVuKHNlbGYuc291cmNlKSAmIDB4RkZGRkZGRkYpCi0gICAgICAgICAgICBpZiAnYmMnIGluIGRhdGE6Ci0gICAgICAgICAgICAgICAgYmMgPSBkYXRhWydiYyddCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGJjID0gc2VsZi5jb21waWxlX2JjKG5hbWUpCi0gICAgICAgICAgICBzZWxmLm1vZHVsZV9ieXRlY29kZVtuYW1lXSA9IG1hZ2ljICsgbXRpbWUgKyBzb3VyY2Vfc2l6ZSArIGJjCi0KLSAgICBkZWYgY29tcGlsZV9iYyhzZWxmLCBuYW1lKToKLSAgICAgICAgc291cmNlX3BhdGggPSBzZWxmLm1vZHVsZV9wYXRocy5nZXQobmFtZSwgJzx0ZXN0PicpIG9yICc8dGVzdD4nCi0gICAgICAgIGNvZGUgPSBjb21waWxlKHNlbGYuc291cmNlLCBzb3VyY2VfcGF0aCwgJ2V4ZWMnKQotICAgICAgICByZXR1cm4gbWFyc2hhbC5kdW1wcyhjb2RlKQotCi0gICAgZGVmIHNvdXJjZV9tdGltZShzZWxmLCBuYW1lKToKLSAgICAgICAgaWYgbmFtZSBpbiBzZWxmLm1vZHVsZV9wYXRoczoKLSAgICAgICAgICAgIHJldHVybiBzZWxmLmRlZmF1bHRfbXRpbWUKLSAgICAgICAgZWxpZiBuYW1lIGluIHNlbGYubW9kdWxlX2J5dGVjb2RlOgotICAgICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yCi0KLSAgICBkZWYgYnl0ZWNvZGVfcGF0aChzZWxmLCBuYW1lKToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuYnl0ZWNvZGVfdG9fcGF0aFtuYW1lXQotICAgICAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgICAgICBpZiBuYW1lIGluIHNlbGYubW9kdWxlX3BhdGhzOgotICAgICAgICAgICAgICAgIHJldHVybiBOb25lCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yCi0KLSAgICBkZWYgd3JpdGVfYnl0ZWNvZGUoc2VsZiwgbmFtZSwgYnl0ZWNvZGUpOgotICAgICAgICBzZWxmLm1vZHVsZV9ieXRlY29kZVtuYW1lXSA9IGJ5dGVjb2RlCi0gICAgICAgIHJldHVybiBUcnVlCi0KLSAgICBkZWYgZ2V0X2RhdGEoc2VsZiwgcGF0aCk6Ci0gICAgICAgIGlmIHBhdGggaW4gc2VsZi5wYXRoX3RvX21vZHVsZToKLSAgICAgICAgICAgIHJldHVybiBzdXBlcigpLmdldF9kYXRhKHBhdGgpCi0gICAgICAgIGVsaWYgcGF0aCBpbiBzZWxmLnBhdGhfdG9fYnl0ZWNvZGU6Ci0gICAgICAgICAgICBuYW1lID0gc2VsZi5wYXRoX3RvX2J5dGVjb2RlW3BhdGhdCi0gICAgICAgICAgICByZXR1cm4gc2VsZi5tb2R1bGVfYnl0ZWNvZGVbbmFtZV0KLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IKLQotICAgIGRlZiBpc19wYWNrYWdlKHNlbGYsIG5hbWUpOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICByZXR1cm4gc3VwZXIoKS5pc19wYWNrYWdlKG5hbWUpCi0gICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6Ci0gICAgICAgICAgICByZXR1cm4gJ19faW5pdF9fJyBpbiBzZWxmLmJ5dGVjb2RlX3RvX3BhdGhbbmFtZV0KLQotICAgIGRlZiBnZXRfY29kZShzZWxmLCBuYW1lKToKLSAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncyhyZWNvcmQ9VHJ1ZSkgYXMgdzoKLSAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcigiYWx3YXlzIikKLSAgICAgICAgICAgIGNvZGVfb2JqZWN0ID0gc3VwZXIoKS5nZXRfY29kZShuYW1lKQotICAgICAgICAgICAgYXNzZXJ0IGxlbih3KSA9PSAxCi0gICAgICAgICAgICBhc3NlcnQgaXNzdWJjbGFzcyh3WzBdLmNhdGVnb3J5LCBEZXByZWNhdGlvbldhcm5pbmcpCi0gICAgICAgICAgICByZXR1cm4gY29kZV9vYmplY3QKLQotY2xhc3MgUHlMb2FkZXJUZXN0cyh0ZXN0aW5nX2FiYy5Mb2FkZXJUZXN0cyk6Ci0KLSAgICAiIiJUZXN0cyBmb3IgaW1wb3J0bGliLmFiYy5QeUxvYWRlci4iIiIKLQotICAgIG1vY2tlciA9IFB5TG9hZGVyTW9jawotCi0gICAgZGVmIGVxX2F0dHJzKHNlbGYsIG9iLCAqKmt3YXJncyk6Ci0gICAgICAgIGZvciBhdHRyLCB2YWwgaW4ga3dhcmdzLml0ZW1zKCk6Ci0gICAgICAgICAgICBmb3VuZCA9IGdldGF0dHIob2IsIGF0dHIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvdW5kLCB2YWwsCi0gICAgICAgICAgICAgICAgICAgICJ7fSBhdHRyaWJ1dGU6IHt9ICE9IHt9Ii5mb3JtYXQoYXR0ciwgZm91bmQsIHZhbCkpCi0KLSAgICBkZWYgdGVzdF9tb2R1bGUoc2VsZik6Ci0gICAgICAgIG5hbWUgPSAnPG1vZHVsZT4nCi0gICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oJycsICdwYXRoJywgJ3RvJywgJ21vZHVsZScpCi0gICAgICAgIG1vY2sgPSBzZWxmLm1vY2tlcih7bmFtZTogcGF0aH0pCi0gICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpOgotICAgICAgICAgICAgbW9kdWxlID0gbW9jay5sb2FkX21vZHVsZShuYW1lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihuYW1lLCBzeXMubW9kdWxlcykKLSAgICAgICAgc2VsZi5lcV9hdHRycyhtb2R1bGUsIF9fbmFtZV9fPW5hbWUsIF9fZmlsZV9fPXBhdGgsIF9fcGFja2FnZV9fPScnLAotICAgICAgICAgICAgICAgICAgICAgICAgX19sb2FkZXJfXz1tb2NrKQotICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGhhc2F0dHIobW9kdWxlLCAnX19wYXRoX18nKSkKLSAgICAgICAgcmV0dXJuIG1vY2ssIG5hbWUKLQotICAgIGRlZiB0ZXN0X3BhY2thZ2Uoc2VsZik6Ci0gICAgICAgIG5hbWUgPSAnPHBrZz4nCi0gICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oJ3BhdGgnLCAndG8nLCBuYW1lLCAnX19pbml0X18nKQotICAgICAgICBtb2NrID0gc2VsZi5tb2NrZXIoe25hbWU6IHBhdGh9KQotICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKToKLSAgICAgICAgICAgIG1vZHVsZSA9IG1vY2subG9hZF9tb2R1bGUobmFtZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4obmFtZSwgc3lzLm1vZHVsZXMpCi0gICAgICAgIHNlbGYuZXFfYXR0cnMobW9kdWxlLCBfX25hbWVfXz1uYW1lLCBfX2ZpbGVfXz1wYXRoLAotICAgICAgICAgICAgICAgIF9fcGF0aF9fPVtvcy5wYXRoLmRpcm5hbWUocGF0aCldLCBfX3BhY2thZ2VfXz1uYW1lLAotICAgICAgICAgICAgICAgIF9fbG9hZGVyX189bW9jaykKLSAgICAgICAgcmV0dXJuIG1vY2ssIG5hbWUKLQotICAgIGRlZiB0ZXN0X2xhY2tpbmdfcGFyZW50KHNlbGYpOgotICAgICAgICBuYW1lID0gJ3BrZy5tb2QnCi0gICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oJ3BhdGgnLCAndG8nLCAncGtnJywgJ21vZCcpCi0gICAgICAgIG1vY2sgPSBzZWxmLm1vY2tlcih7bmFtZTogcGF0aH0pCi0gICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpOgotICAgICAgICAgICAgbW9kdWxlID0gbW9jay5sb2FkX21vZHVsZShuYW1lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihuYW1lLCBzeXMubW9kdWxlcykKLSAgICAgICAgc2VsZi5lcV9hdHRycyhtb2R1bGUsIF9fbmFtZV9fPW5hbWUsIF9fZmlsZV9fPXBhdGgsIF9fcGFja2FnZV9fPSdwa2cnLAotICAgICAgICAgICAgICAgICAgICAgICAgX19sb2FkZXJfXz1tb2NrKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIobW9kdWxlLCAnX19wYXRoX18nKSkKLSAgICAgICAgcmV0dXJuIG1vY2ssIG5hbWUKLQotICAgIGRlZiB0ZXN0X21vZHVsZV9yZXVzZShzZWxmKToKLSAgICAgICAgbmFtZSA9ICdtb2QnCi0gICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oJ3BhdGgnLCAndG8nLCAnbW9kJykKLSAgICAgICAgbW9kdWxlID0gaW1wLm5ld19tb2R1bGUobmFtZSkKLSAgICAgICAgbW9jayA9IHNlbGYubW9ja2VyKHtuYW1lOiBwYXRofSkKLSAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSk6Ci0gICAgICAgICAgICBzeXMubW9kdWxlc1tuYW1lXSA9IG1vZHVsZQotICAgICAgICAgICAgbG9hZGVkX21vZHVsZSA9IG1vY2subG9hZF9tb2R1bGUobmFtZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMobG9hZGVkX21vZHVsZSwgbW9kdWxlKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhzeXMubW9kdWxlc1tuYW1lXSwgbW9kdWxlKQotICAgICAgICByZXR1cm4gbW9jaywgbmFtZQotCi0gICAgZGVmIHRlc3Rfc3RhdGVfYWZ0ZXJfZmFpbHVyZShzZWxmKToKLSAgICAgICAgbmFtZSA9ICJtb2QiCi0gICAgICAgIG1vZHVsZSA9IGltcC5uZXdfbW9kdWxlKG5hbWUpCi0gICAgICAgIG1vZHVsZS5ibGFoID0gTm9uZQotICAgICAgICBtb2NrID0gc2VsZi5tb2NrZXIoe25hbWU6IG9zLnBhdGguam9pbigncGF0aCcsICd0bycsICdtb2QnKX0pCi0gICAgICAgIG1vY2suc291cmNlID0gYiIxLzAiCi0gICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpOgotICAgICAgICAgICAgc3lzLm1vZHVsZXNbbmFtZV0gPSBtb2R1bGUKLSAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IpOgotICAgICAgICAgICAgICAgIG1vY2subG9hZF9tb2R1bGUobmFtZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3lzLm1vZHVsZXNbbmFtZV0sIG1vZHVsZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKG1vZHVsZSwgJ2JsYWgnKSkKLSAgICAgICAgcmV0dXJuIG1vY2sKLQotICAgIGRlZiB0ZXN0X3VubG9hZGFibGUoc2VsZik6Ci0gICAgICAgIG5hbWUgPSAibW9kIgotICAgICAgICBtb2NrID0gc2VsZi5tb2NrZXIoe25hbWU6IG9zLnBhdGguam9pbigncGF0aCcsICd0bycsICdtb2QnKX0pCi0gICAgICAgIG1vY2suc291cmNlID0gYiIxLzAiCi0gICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpOgotICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvcik6Ci0gICAgICAgICAgICAgICAgbW9jay5sb2FkX21vZHVsZShuYW1lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihuYW1lLCBzeXMubW9kdWxlcykKLSAgICAgICAgcmV0dXJuIG1vY2sKLQotCi1jbGFzcyBQeUxvYWRlckNvbXBhdFRlc3RzKFB5TG9hZGVyVGVzdHMpOgotCi0gICAgIiIiVGVzdCB0aGF0IHRoZSBzdWdnZXN0ZWQgY29kZSB0byBtYWtlIGEgbG9hZGVyIHRoYXQgaXMgY29tcGF0aWJsZSBmcm9tCi0gICAgUHl0aG9uIDMuMSBmb3J3YXJkIHdvcmtzLiIiIgotCi0gICAgbW9ja2VyID0gUHlMb2FkZXJDb21wYXRNb2NrCi0KLQotY2xhc3MgUHlMb2FkZXJJbnRlcmZhY2VUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICAiIiJUZXN0cyBmb3IgaW1wb3J0bGliLmFiYy5QeUxvYWRlciB0byBtYWtlIHN1cmUgdGhhdCB3aGVuIHNvdXJjZV9wYXRoKCkKLSAgICBkb2Vzbid0IHJldHVybiBhIHBhdGggZXZlcnl0aGluZyB3b3JrcyBhcyBleHBlY3RlZC4iIiIKLQotICAgIGRlZiB0ZXN0X25vX3NvdXJjZV9wYXRoKHNlbGYpOgotICAgICAgICAjIE5vIHNvdXJjZSBwYXRoIHNob3VsZCBsZWFkIHRvIEltcG9ydEVycm9yLgotICAgICAgICBuYW1lID0gJ21vZCcKLSAgICAgICAgbW9jayA9IFB5TG9hZGVyTW9jayh7fSkKLSAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSksIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKToKLSAgICAgICAgICAgIG1vY2subG9hZF9tb2R1bGUobmFtZSkKLQotICAgIGRlZiB0ZXN0X3NvdXJjZV9wYXRoX2lzX05vbmUoc2VsZik6Ci0gICAgICAgIG5hbWUgPSAnbW9kJwotICAgICAgICBtb2NrID0gUHlMb2FkZXJNb2NrKHtuYW1lOiBOb25lfSkKLSAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSksIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKToKLSAgICAgICAgICAgIG1vY2subG9hZF9tb2R1bGUobmFtZSkKLQotICAgIGRlZiB0ZXN0X2dldF9maWxlbmFtZV93aXRoX3NvdXJjZV9wYXRoKHNlbGYpOgotICAgICAgICAjIGdldF9maWxlbmFtZSgpIHNob3VsZCByZXR1cm4gd2hhdCBzb3VyY2VfcGF0aCgpIHJldHVybnMuCi0gICAgICAgIG5hbWUgPSAnbW9kJwotICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKCdwYXRoJywgJ3RvJywgJ3NvdXJjZScpCi0gICAgICAgIG1vY2sgPSBQeUxvYWRlck1vY2soe25hbWU6IHBhdGh9KQotICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9jay5nZXRfZmlsZW5hbWUobmFtZSksIHBhdGgpCi0KLSAgICBkZWYgdGVzdF9nZXRfZmlsZW5hbWVfbm9fc291cmNlX3BhdGgoc2VsZik6Ci0gICAgICAgICMgZ2V0X2ZpbGVuYW1lKCkgc2hvdWxkIHJhaXNlIEltcG9ydEVycm9yIGlmIHNvdXJjZV9wYXRoIHJldHVybnMgTm9uZS4KLSAgICAgICAgbmFtZSA9ICdtb2QnCi0gICAgICAgIG1vY2sgPSBQeUxvYWRlck1vY2soe25hbWU6IE5vbmV9KQotICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKSwgc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpOgotICAgICAgICAgICAgbW9jay5nZXRfZmlsZW5hbWUobmFtZSkKLQotCi1jbGFzcyBQeVB5Y0xvYWRlclRlc3RzKFB5TG9hZGVyVGVzdHMpOgotCi0gICAgIiIiVGVzdHMgZm9yIGltcG9ydGxpYi5hYmMuUHlQeWNMb2FkZXIuIiIiCi0KLSAgICBtb2NrZXIgPSBQeVB5Y0xvYWRlck1vY2sKLQotICAgIEBzb3VyY2VfdXRpbC53cml0ZXNfYnl0ZWNvZGVfZmlsZXMKLSAgICBkZWYgdmVyaWZ5X2J5dGVjb2RlKHNlbGYsIG1vY2ssIG5hbWUpOgotICAgICAgICBhc3NlcnQgbmFtZSBpbiBtb2NrLm1vZHVsZV9wYXRocwotICAgICAgICBzZWxmLmFzc2VydEluKG5hbWUsIG1vY2subW9kdWxlX2J5dGVjb2RlKQotICAgICAgICBtYWdpYyA9IG1vY2subW9kdWxlX2J5dGVjb2RlW25hbWVdWzo0XQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hZ2ljLCBpbXAuZ2V0X21hZ2ljKCkpCi0gICAgICAgIG10aW1lID0gaW1wb3J0bGliLl9yX2xvbmcobW9jay5tb2R1bGVfYnl0ZWNvZGVbbmFtZV1bNDo4XSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtdGltZSwgMSkKLSAgICAgICAgc291cmNlX3NpemUgPSBtb2NrLm1vZHVsZV9ieXRlY29kZVtuYW1lXVs4OjEyXQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihtb2NrLnNvdXJjZSkgJiAweEZGRkZGRkZGLAotICAgICAgICAgICAgICAgICAgICAgICAgIGltcG9ydGxpYi5fcl9sb25nKHNvdXJjZV9zaXplKSkKLSAgICAgICAgYmMgPSBtb2NrLm1vZHVsZV9ieXRlY29kZVtuYW1lXVsxMjpdCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmMsIG1vY2suY29tcGlsZV9iYyhuYW1lKSkKLQotICAgIGRlZiB0ZXN0X21vZHVsZShzZWxmKToKLSAgICAgICAgbW9jaywgbmFtZSA9IHN1cGVyKCkudGVzdF9tb2R1bGUoKQotICAgICAgICBzZWxmLnZlcmlmeV9ieXRlY29kZShtb2NrLCBuYW1lKQotCi0gICAgZGVmIHRlc3RfcGFja2FnZShzZWxmKToKLSAgICAgICAgbW9jaywgbmFtZSA9IHN1cGVyKCkudGVzdF9wYWNrYWdlKCkKLSAgICAgICAgc2VsZi52ZXJpZnlfYnl0ZWNvZGUobW9jaywgbmFtZSkKLQotICAgIGRlZiB0ZXN0X2xhY2tpbmdfcGFyZW50KHNlbGYpOgotICAgICAgICBtb2NrLCBuYW1lID0gc3VwZXIoKS50ZXN0X2xhY2tpbmdfcGFyZW50KCkKLSAgICAgICAgc2VsZi52ZXJpZnlfYnl0ZWNvZGUobW9jaywgbmFtZSkKLQotICAgIGRlZiB0ZXN0X21vZHVsZV9yZXVzZShzZWxmKToKLSAgICAgICAgbW9jaywgbmFtZSA9IHN1cGVyKCkudGVzdF9tb2R1bGVfcmV1c2UoKQotICAgICAgICBzZWxmLnZlcmlmeV9ieXRlY29kZShtb2NrLCBuYW1lKQotCi0gICAgZGVmIHRlc3Rfc3RhdGVfYWZ0ZXJfZmFpbHVyZShzZWxmKToKLSAgICAgICAgc3VwZXIoKS50ZXN0X3N0YXRlX2FmdGVyX2ZhaWx1cmUoKQotCi0gICAgZGVmIHRlc3RfdW5sb2FkYWJsZShzZWxmKToKLSAgICAgICAgc3VwZXIoKS50ZXN0X3VubG9hZGFibGUoKQotCi0KLWNsYXNzIFB5UHljTG9hZGVySW50ZXJmYWNlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgIiIiVGVzdCBmb3IgdGhlIGludGVyZmFjZSBvZiBpbXBvcnRsaWIuYWJjLlB5UHljTG9hZGVyLiIiIgotCi0gICAgZGVmIGdldF9maWxlbmFtZV9jaGVjayhzZWxmLCBzcmNfcGF0aCwgYmNfcGF0aCwgZXhwZWN0KToKLSAgICAgICAgbmFtZSA9ICdtb2QnCi0gICAgICAgIG1vY2sgPSBQeVB5Y0xvYWRlck1vY2soe25hbWU6IHNyY19wYXRofSwge25hbWU6IHsncGF0aCc6IGJjX3BhdGh9fSkKLSAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSk6Ci0gICAgICAgICAgICBhc3NlcnQgbW9jay5zb3VyY2VfcGF0aChuYW1lKSA9PSBzcmNfcGF0aAotICAgICAgICAgICAgYXNzZXJ0IG1vY2suYnl0ZWNvZGVfcGF0aChuYW1lKSA9PSBiY19wYXRoCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vY2suZ2V0X2ZpbGVuYW1lKG5hbWUpLCBleHBlY3QpCi0KLSAgICBkZWYgdGVzdF9maWxlbmFtZV93aXRoX3NvdXJjZV9iYyhzZWxmKToKLSAgICAgICAgIyBXaGVuIHNvdXJjZSBhbmQgYnl0ZWNvZGUgcGF0aHMgcHJlc2VudCwgcmV0dXJuIHRoZSBzb3VyY2UgcGF0aC4KLSAgICAgICAgc2VsZi5nZXRfZmlsZW5hbWVfY2hlY2soJ3NvdXJjZV9wYXRoJywgJ2JjX3BhdGgnLCAnc291cmNlX3BhdGgnKQotCi0gICAgZGVmIHRlc3RfZmlsZW5hbWVfd2l0aF9zb3VyY2Vfbm9fYmMoc2VsZik6Ci0gICAgICAgICMgV2l0aCBzb3VyY2UgYnV0IG5vIGJjLCByZXR1cm4gc291cmNlIHBhdGguCi0gICAgICAgIHNlbGYuZ2V0X2ZpbGVuYW1lX2NoZWNrKCdzb3VyY2VfcGF0aCcsIE5vbmUsICdzb3VyY2VfcGF0aCcpCi0KLSAgICBkZWYgdGVzdF9maWxlbmFtZV93aXRoX25vX3NvdXJjZV9iYyhzZWxmKToKLSAgICAgICAgIyBXaXRoIG5vdCBzb3VyY2UgYnV0IGJjLCByZXR1cm4gdGhlIGJjIHBhdGguCi0gICAgICAgIHNlbGYuZ2V0X2ZpbGVuYW1lX2NoZWNrKE5vbmUsICdiY19wYXRoJywgJ2JjX3BhdGgnKQotCi0gICAgZGVmIHRlc3RfZmlsZW5hbWVfd2l0aF9ub19zb3VyY2Vfb3JfYmMoc2VsZik6Ci0gICAgICAgICMgV2l0aCBubyBzb3VyY2Ugb3IgYmMsIHJhaXNlIEltcG9ydEVycm9yLgotICAgICAgICBuYW1lID0gJ21vZCcKLSAgICAgICAgbW9jayA9IFB5UHljTG9hZGVyTW9jayh7bmFtZTogTm9uZX0sIHtuYW1lOiB7J3BhdGgnOiBOb25lfX0pCi0gICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpLCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcik6Ci0gICAgICAgICAgICBtb2NrLmdldF9maWxlbmFtZShuYW1lKQotCi0KLWNsYXNzIFNraXBXcml0aW5nQnl0ZWNvZGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICAiIiJUZXN0IHRoYXQgYnl0ZWNvZGUgaXMgcHJvcGVybHkgaGFuZGxlZCBiYXNlZCBvbgotICAgIHN5cy5kb250X3dyaXRlX2J5dGVjb2RlLiIiIgotCi0gICAgQHNvdXJjZV91dGlsLndyaXRlc19ieXRlY29kZV9maWxlcwotICAgIGRlZiBydW5fdGVzdChzZWxmLCBkb250X3dyaXRlX2J5dGVjb2RlKToKLSAgICAgICAgbmFtZSA9ICdtb2QnCi0gICAgICAgIG1vY2sgPSBQeVB5Y0xvYWRlck1vY2soe25hbWU6IG9zLnBhdGguam9pbigncGF0aCcsICd0bycsICdtb2QnKX0pCi0gICAgICAgIHN5cy5kb250X3dyaXRlX2J5dGVjb2RlID0gZG9udF93cml0ZV9ieXRlY29kZQotICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKToKLSAgICAgICAgICAgIG1vY2subG9hZF9tb2R1bGUobmFtZSkKLSAgICAgICAgc2VsZi5hc3NlcnRJc05vdChuYW1lIGluIG1vY2subW9kdWxlX2J5dGVjb2RlLCBkb250X3dyaXRlX2J5dGVjb2RlKQotCi0gICAgZGVmIHRlc3Rfbm9fYnl0ZWNvZGVfd3JpdHRlbihzZWxmKToKLSAgICAgICAgc2VsZi5ydW5fdGVzdChUcnVlKQotCi0gICAgZGVmIHRlc3RfYnl0ZWNvZGVfd3JpdHRlbihzZWxmKToKLSAgICAgICAgc2VsZi5ydW5fdGVzdChGYWxzZSkKLQotCi1jbGFzcyBSZWdlbmVyYXRlZEJ5dGVjb2RlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgIiIiVGVzdCB0aGF0IGJ5dGVjb2RlIGlzIHJlZ2VuZXJhdGVkIGFzIGV4cGVjdGVkLiIiIgotCi0gICAgQHNvdXJjZV91dGlsLndyaXRlc19ieXRlY29kZV9maWxlcwotICAgIGRlZiB0ZXN0X2RpZmZlcmVudF9tYWdpYyhzZWxmKToKLSAgICAgICAgIyBBIGRpZmZlcmVudCBtYWdpYyBudW1iZXIgc2hvdWxkIGxlYWQgdG8gbmV3IGJ5dGVjb2RlLgotICAgICAgICBuYW1lID0gJ21vZCcKLSAgICAgICAgYmFkX21hZ2ljID0gYidceDAwXHgwMFx4MDBceDAwJwotICAgICAgICBhc3NlcnQgYmFkX21hZ2ljICE9IGltcC5nZXRfbWFnaWMoKQotICAgICAgICBtb2NrID0gUHlQeWNMb2FkZXJNb2NrKHtuYW1lOiBvcy5wYXRoLmpvaW4oJ3BhdGgnLCAndG8nLCAnbW9kJyl9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7bmFtZTogeydwYXRoJzogb3MucGF0aC5qb2luKCdwYXRoJywgJ3RvJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbW9kLmJ5dGVjb2RlJyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hZ2ljJzogYmFkX21hZ2ljfX0pCi0gICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpOgotICAgICAgICAgICAgbW9jay5sb2FkX21vZHVsZShuYW1lKQotICAgICAgICBzZWxmLmFzc2VydEluKG5hbWUsIG1vY2subW9kdWxlX2J5dGVjb2RlKQotICAgICAgICBtYWdpYyA9IG1vY2subW9kdWxlX2J5dGVjb2RlW25hbWVdWzo0XQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hZ2ljLCBpbXAuZ2V0X21hZ2ljKCkpCi0KLSAgICBAc291cmNlX3V0aWwud3JpdGVzX2J5dGVjb2RlX2ZpbGVzCi0gICAgZGVmIHRlc3Rfb2xkX210aW1lKHNlbGYpOgotICAgICAgICAjIEJ5dGVjb2RlIHdpdGggYW4gb2xkZXIgbXRpbWUgc2hvdWxkIGJlIHJlZ2VuZXJhdGVkLgotICAgICAgICBuYW1lID0gJ21vZCcKLSAgICAgICAgb2xkX210aW1lID0gUHlQeWNMb2FkZXJNb2NrLmRlZmF1bHRfbXRpbWUgLSAxCi0gICAgICAgIG1vY2sgPSBQeVB5Y0xvYWRlck1vY2soe25hbWU6IG9zLnBhdGguam9pbigncGF0aCcsICd0bycsICdtb2QnKX0sCi0gICAgICAgICAgICAgICAge25hbWU6IHsncGF0aCc6ICdwYXRoL3RvL21vZC5ieXRlY29kZScsICdtdGltZSc6IG9sZF9tdGltZX19KQotICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKToKLSAgICAgICAgICAgIG1vY2subG9hZF9tb2R1bGUobmFtZSkKLSAgICAgICAgc2VsZi5hc3NlcnRJbihuYW1lLCBtb2NrLm1vZHVsZV9ieXRlY29kZSkKLSAgICAgICAgbXRpbWUgPSBpbXBvcnRsaWIuX3JfbG9uZyhtb2NrLm1vZHVsZV9ieXRlY29kZVtuYW1lXVs0OjhdKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG10aW1lLCBQeVB5Y0xvYWRlck1vY2suZGVmYXVsdF9tdGltZSkKLQotCi1jbGFzcyBCYWRCeXRlY29kZUZhaWx1cmVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICAiIiJUZXN0IGltcG9ydCBmYWlsdXJlcyB3aGVuIHRoZXJlIGlzIG5vIHNvdXJjZSBhbmQgcGFydHMgb2YgdGhlIGJ5dGVjb2RlCi0gICAgaXMgYmFkLiIiIgotCi0gICAgZGVmIHRlc3RfYmFkX21hZ2ljKHNlbGYpOgotICAgICAgICAjIEEgYmFkIG1hZ2ljIG51bWJlciBzaG91bGQgbGVhZCB0byBhbiBJbXBvcnRFcnJvci4KLSAgICAgICAgbmFtZSA9ICdtb2QnCi0gICAgICAgIGJhZF9tYWdpYyA9IGInXHgwMFx4MDBceDAwXHgwMCcKLSAgICAgICAgYmMgPSB7bmFtZToKLSAgICAgICAgICAgICAgICB7J3BhdGgnOiBvcy5wYXRoLmpvaW4oJ3BhdGgnLCAndG8nLCAnbW9kJyksCi0gICAgICAgICAgICAgICAgICdtYWdpYyc6IGJhZF9tYWdpY319Ci0gICAgICAgIG1vY2sgPSBQeVB5Y0xvYWRlck1vY2soe25hbWU6IE5vbmV9LCBiYykKLSAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSksIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKSBhcyBjbToKLSAgICAgICAgICAgIG1vY2subG9hZF9tb2R1bGUobmFtZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24ubmFtZSwgbmFtZSkKLQotICAgIGRlZiB0ZXN0X25vX2J5dGVjb2RlKHNlbGYpOgotICAgICAgICAjIE1pc3NpbmcgY29kZSBvYmplY3QgYnl0ZWNvZGUgc2hvdWxkIGxlYWQgdG8gYW4gRU9GRXJyb3IuCi0gICAgICAgIG5hbWUgPSAnbW9kJwotICAgICAgICBiYyA9IHtuYW1lOiB7J3BhdGgnOiBvcy5wYXRoLmpvaW4oJ3BhdGgnLCAndG8nLCAnbW9kJyksICdiYyc6IGInJ319Ci0gICAgICAgIG1vY2sgPSBQeVB5Y0xvYWRlck1vY2soe25hbWU6IE5vbmV9LCBiYykKLSAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSksIHNlbGYuYXNzZXJ0UmFpc2VzKEVPRkVycm9yKToKLSAgICAgICAgICAgIG1vY2subG9hZF9tb2R1bGUobmFtZSkKLQotICAgIGRlZiB0ZXN0X2JhZF9ieXRlY29kZShzZWxmKToKLSAgICAgICAgIyBNYWxmb3JtZWQgY29kZSBvYmplY3QgYnl0ZWNvZGUgc2hvdWxkIGxlYWQgdG8gYSBWYWx1ZUVycm9yLgotICAgICAgICBuYW1lID0gJ21vZCcKLSAgICAgICAgYmMgPSB7bmFtZTogeydwYXRoJzogb3MucGF0aC5qb2luKCdwYXRoJywgJ3RvJywgJ21vZCcpLCAnYmMnOiBiJzEyMzQnfX0KLSAgICAgICAgbW9jayA9IFB5UHljTG9hZGVyTW9jayh7bmFtZTogTm9uZX0sIGJjKQotICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKSwgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6Ci0gICAgICAgICAgICBtb2NrLmxvYWRfbW9kdWxlKG5hbWUpCi0KLQotZGVmIHJhaXNlX0ltcG9ydEVycm9yKCphcmdzLCAqKmt3YXJncyk6Ci0gICAgcmFpc2UgSW1wb3J0RXJyb3IKLQotY2xhc3MgTWlzc2luZ1BhdGhzVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgIiIiVGVzdCB3aGF0IGhhcHBlbnMgd2hlbiBhIHNvdXJjZSBvciBieXRlY29kZSBwYXRoIGRvZXMgbm90IGV4aXN0IChlaXRoZXIKLSAgICBmcm9tICpfcGF0aCByZXR1cm5pbmcgTm9uZSBvciByYWlzaW5nIEltcG9ydEVycm9yKS4iIiIKLQotICAgIGRlZiB0ZXN0X3NvdXJjZV9wYXRoX05vbmUoc2VsZik6Ci0gICAgICAgICMgQnl0ZWNvZGUgc2hvdWxkIGJlIHVzZWQgd2hlbiBzb3VyY2VfcGF0aCByZXR1cm5zIE5vbmUsIGFsb25nIHdpdGgKLSAgICAgICAgIyBfX2ZpbGVfXyBiZWluZyBzZXQgdG8gdGhlIGJ5dGVjb2RlIHBhdGguCi0gICAgICAgIG5hbWUgPSAnbW9kJwotICAgICAgICBieXRlY29kZV9wYXRoID0gJ3BhdGgvdG8vbW9kJwotICAgICAgICBtb2NrID0gUHlQeWNMb2FkZXJNb2NrKHtuYW1lOiBOb25lfSwge25hbWU6IHsncGF0aCc6IGJ5dGVjb2RlX3BhdGh9fSkKLSAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSk6Ci0gICAgICAgICAgICBtb2R1bGUgPSBtb2NrLmxvYWRfbW9kdWxlKG5hbWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fZmlsZV9fLCBieXRlY29kZV9wYXRoKQotCi0gICAgIyBUZXN0aW5nIGZvciBieXRlY29kZV9wYXRoIHJldHVybmluZyBOb25lIGhhbmRsZWQgYnkgYWxsIHRlc3RzIHdoZXJlIG5vCi0gICAgIyBieXRlY29kZSBpbml0aWFsbHkgZXhpc3RzLgotCi0gICAgZGVmIHRlc3RfYWxsX3BhdGhzX05vbmUoc2VsZik6Ci0gICAgICAgICMgSWYgYWxsICpfcGF0aCBtZXRob2RzIHJldHVybiBOb25lLCByYWlzZSBJbXBvcnRFcnJvci4KLSAgICAgICAgbmFtZSA9ICdtb2QnCi0gICAgICAgIG1vY2sgPSBQeVB5Y0xvYWRlck1vY2soe25hbWU6IE5vbmV9KQotICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKSwgc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpIGFzIGNtOgotICAgICAgICAgICAgbW9jay5sb2FkX21vZHVsZShuYW1lKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5uYW1lLCBuYW1lKQotCi0gICAgZGVmIHRlc3Rfc291cmNlX3BhdGhfSW1wb3J0RXJyb3Ioc2VsZik6Ci0gICAgICAgICMgQW4gSW1wb3J0RXJyb3IgZnJvbSBzb3VyY2VfcGF0aCBzaG91bGQgdHJpZ2dlciBhbiBJbXBvcnRFcnJvci4KLSAgICAgICAgbmFtZSA9ICdtb2QnCi0gICAgICAgIG1vY2sgPSBQeVB5Y0xvYWRlck1vY2soe30sIHtuYW1lOiB7J3BhdGgnOiBvcy5wYXRoLmpvaW4oJ3BhdGgnLCAndG8nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtb2QnKX19KQotICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKSwgc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpOgotICAgICAgICAgICAgbW9jay5sb2FkX21vZHVsZShuYW1lKQotCi0gICAgZGVmIHRlc3RfYnl0ZWNvZGVfcGF0aF9JbXBvcnRFcnJvcihzZWxmKToKLSAgICAgICAgIyBBbiBJbXBvcnRFcnJvciBmcm9tIGJ5dGVjb2RlX3BhdGggc2hvdWxkIHRyaWdnZXIgYW4gSW1wb3J0RXJyb3IuCi0gICAgICAgIG5hbWUgPSAnbW9kJwotICAgICAgICBtb2NrID0gUHlQeWNMb2FkZXJNb2NrKHtuYW1lOiBvcy5wYXRoLmpvaW4oJ3BhdGgnLCAndG8nLCAnbW9kJyl9KQotICAgICAgICBiYWRfbWV0aCA9IHR5cGVzLk1ldGhvZFR5cGUocmFpc2VfSW1wb3J0RXJyb3IsIG1vY2spCi0gICAgICAgIG1vY2suYnl0ZWNvZGVfcGF0aCA9IGJhZF9tZXRoCi0gICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpLCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcikgYXMgY206Ci0gICAgICAgICAgICBtb2NrLmxvYWRfbW9kdWxlKG5hbWUpCi0KLQotY2xhc3MgU291cmNlTG9hZGVyVGVzdEhhcm5lc3ModW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgZGVmIHNldFVwKHNlbGYsICosIGlzX3BhY2thZ2U9VHJ1ZSwgKiprd2FyZ3MpOgotICAgICAgICBzZWxmLnBhY2thZ2UgPSAncGtnJwotICAgICAgICBpZiBpc19wYWNrYWdlOgotICAgICAgICAgICAgc2VsZi5wYXRoID0gb3MucGF0aC5qb2luKHNlbGYucGFja2FnZSwgJ19faW5pdF9fLnB5JykKLSAgICAgICAgICAgIHNlbGYubmFtZSA9IHNlbGYucGFja2FnZQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgbW9kdWxlX25hbWUgPSAnbW9kJwotICAgICAgICAgICAgc2VsZi5wYXRoID0gb3MucGF0aC5qb2luKHNlbGYucGFja2FnZSwgJy4nLmpvaW4oWydtb2QnLCAncHknXSkpCi0gICAgICAgICAgICBzZWxmLm5hbWUgPSAnLicuam9pbihbc2VsZi5wYWNrYWdlLCBtb2R1bGVfbmFtZV0pCi0gICAgICAgIHNlbGYuY2FjaGVkID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKHNlbGYucGF0aCkKLSAgICAgICAgc2VsZi5sb2FkZXIgPSBzZWxmLmxvYWRlcl9tb2NrKHNlbGYucGF0aCwgKiprd2FyZ3MpCi0KLSAgICBkZWYgdmVyaWZ5X21vZHVsZShzZWxmLCBtb2R1bGUpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX25hbWVfXywgc2VsZi5uYW1lKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX2ZpbGVfXywgc2VsZi5wYXRoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX2NhY2hlZF9fLCBzZWxmLmNhY2hlZCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19wYWNrYWdlX18sIHNlbGYucGFja2FnZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19sb2FkZXJfXywgc2VsZi5sb2FkZXIpCi0gICAgICAgIHZhbHVlcyA9IG1vZHVsZS5fLnNwbGl0KCc6OicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWVzWzBdLCBzZWxmLm5hbWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWVzWzFdLCBzZWxmLnBhdGgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWVzWzJdLCBzZWxmLmNhY2hlZCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZXNbM10sIHNlbGYucGFja2FnZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZXNbNF0sIHJlcHIoc2VsZi5sb2FkZXIpKQotCi0gICAgZGVmIHZlcmlmeV9jb2RlKHNlbGYsIGNvZGVfb2JqZWN0KToKLSAgICAgICAgbW9kdWxlID0gaW1wLm5ld19tb2R1bGUoc2VsZi5uYW1lKQotICAgICAgICBtb2R1bGUuX19maWxlX18gPSBzZWxmLnBhdGgKLSAgICAgICAgbW9kdWxlLl9fY2FjaGVkX18gPSBzZWxmLmNhY2hlZAotICAgICAgICBtb2R1bGUuX19wYWNrYWdlX18gPSBzZWxmLnBhY2thZ2UKLSAgICAgICAgbW9kdWxlLl9fbG9hZGVyX18gPSBzZWxmLmxvYWRlcgotICAgICAgICBtb2R1bGUuX19wYXRoX18gPSBbXQotICAgICAgICBleGVjKGNvZGVfb2JqZWN0LCBtb2R1bGUuX19kaWN0X18pCi0gICAgICAgIHNlbGYudmVyaWZ5X21vZHVsZShtb2R1bGUpCi0KLQotY2xhc3MgU291cmNlT25seUxvYWRlclRlc3RzKFNvdXJjZUxvYWRlclRlc3RIYXJuZXNzKToKLQotICAgICIiIlRlc3QgaW1wb3J0bGliLmFiYy5Tb3VyY2VMb2FkZXIgZm9yIHNvdXJjZS1vbmx5IGxvYWRpbmcuCi0KLSAgICBSZWxvYWQgdGVzdGluZyBpcyBzdWJzdW1lZCBieSB0aGUgdGVzdHMgZm9yCi0gICAgaW1wb3J0bGliLnV0aWwubW9kdWxlX2Zvcl9sb2FkZXIuCi0KLSAgICAiIiIKLQotICAgIGxvYWRlcl9tb2NrID0gU291cmNlT25seUxvYWRlck1vY2sKLQotICAgIGRlZiB0ZXN0X2dldF9zb3VyY2Uoc2VsZik6Ci0gICAgICAgICMgVmVyaWZ5IHRoZSBzb3VyY2UgY29kZSBpcyByZXR1cm5lZCBhcyBhIHN0cmluZy4KLSAgICAgICAgIyBJZiBhbiBJT0Vycm9yIGlzIHJhaXNlZCBieSBnZXRfZGF0YSB0aGVuIHJhaXNlIEltcG9ydEVycm9yLgotICAgICAgICBleHBlY3RlZF9zb3VyY2UgPSBzZWxmLmxvYWRlci5zb3VyY2UuZGVjb2RlKCd1dGYtOCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb2FkZXIuZ2V0X3NvdXJjZShzZWxmLm5hbWUpLCBleHBlY3RlZF9zb3VyY2UpCi0gICAgICAgIGRlZiByYWlzZV9JT0Vycm9yKHBhdGgpOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcgotICAgICAgICBzZWxmLmxvYWRlci5nZXRfZGF0YSA9IHJhaXNlX0lPRXJyb3IKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcikgYXMgY206Ci0gICAgICAgICAgICBzZWxmLmxvYWRlci5nZXRfc291cmNlKHNlbGYubmFtZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24ubmFtZSwgc2VsZi5uYW1lKQotCi0gICAgZGVmIHRlc3RfaXNfcGFja2FnZShzZWxmKToKLSAgICAgICAgIyBQcm9wZXJseSBkZXRlY3Qgd2hlbiBsb2FkaW5nIGEgcGFja2FnZS4KLSAgICAgICAgc2VsZi5zZXRVcChpc19wYWNrYWdlPUZhbHNlKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9hZGVyLmlzX3BhY2thZ2Uoc2VsZi5uYW1lKSkKLSAgICAgICAgc2VsZi5zZXRVcChpc19wYWNrYWdlPVRydWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmxvYWRlci5pc19wYWNrYWdlKHNlbGYubmFtZSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb2FkZXIuaXNfcGFja2FnZShzZWxmLm5hbWUgKyAnLl9faW5pdF9fJykpCi0KLSAgICBkZWYgdGVzdF9nZXRfY29kZShzZWxmKToKLSAgICAgICAgIyBWZXJpZnkgdGhlIGNvZGUgb2JqZWN0IGlzIGNyZWF0ZWQuCi0gICAgICAgIGNvZGVfb2JqZWN0ID0gc2VsZi5sb2FkZXIuZ2V0X2NvZGUoc2VsZi5uYW1lKQotICAgICAgICBzZWxmLnZlcmlmeV9jb2RlKGNvZGVfb2JqZWN0KQotCi0gICAgZGVmIHRlc3RfbG9hZF9tb2R1bGUoc2VsZik6Ci0gICAgICAgICMgTG9hZGluZyBhIG1vZHVsZSBzaG91bGQgc2V0IF9fbmFtZV9fLCBfX2xvYWRlcl9fLCBfX3BhY2thZ2VfXywKLSAgICAgICAgIyBfX3BhdGhfXyAoZm9yIHBhY2thZ2VzKSwgX19maWxlX18sIGFuZCBfX2NhY2hlZF9fLgotICAgICAgICAjIFRoZSBtb2R1bGUgc2hvdWxkIGFsc28gYmUgcHV0IGludG8gc3lzLm1vZHVsZXMuCi0gICAgICAgIHdpdGggdXRpbC51bmNhY2hlKHNlbGYubmFtZSk6Ci0gICAgICAgICAgICBtb2R1bGUgPSBzZWxmLmxvYWRlci5sb2FkX21vZHVsZShzZWxmLm5hbWUpCi0gICAgICAgICAgICBzZWxmLnZlcmlmeV9tb2R1bGUobW9kdWxlKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19wYXRoX18sIFtvcy5wYXRoLmRpcm5hbWUoc2VsZi5wYXRoKV0pCi0gICAgICAgICAgICBzZWxmLmFzc2VydEluKHNlbGYubmFtZSwgc3lzLm1vZHVsZXMpCi0KLSAgICBkZWYgdGVzdF9wYWNrYWdlX3NldHRpbmdzKHNlbGYpOgotICAgICAgICAjIF9fcGFja2FnZV9fIG5lZWRzIHRvIGJlIHNldCwgd2hpbGUgX19wYXRoX18gaXMgc2V0IG9uIGlmIHRoZSBtb2R1bGUKLSAgICAgICAgIyBpcyBhIHBhY2thZ2UuCi0gICAgICAgICMgVGVzdGluZyB0aGUgdmFsdWVzIGZvciBhIHBhY2thZ2UgYXJlIGNvdmVyZWQgYnkgdGVzdF9sb2FkX21vZHVsZS4KLSAgICAgICAgc2VsZi5zZXRVcChpc19wYWNrYWdlPUZhbHNlKQotICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShzZWxmLm5hbWUpOgotICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5sb2FkZXIubG9hZF9tb2R1bGUoc2VsZi5uYW1lKQotICAgICAgICAgICAgc2VsZi52ZXJpZnlfbW9kdWxlKG1vZHVsZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgaGFzYXR0cihtb2R1bGUsICdfX3BhdGhfXycpKQotCi0gICAgZGVmIHRlc3RfZ2V0X3NvdXJjZV9lbmNvZGluZyhzZWxmKToKLSAgICAgICAgIyBTb3VyY2UgaXMgY29uc2lkZXJlZCBlbmNvZGVkIGluIFVURi04IGJ5IGRlZmF1bHQgdW5sZXNzIG90aGVyd2lzZQotICAgICAgICAjIHNwZWNpZmllZCBieSBhbiBlbmNvZGluZyBsaW5lLgotICAgICAgICBzb3VyY2UgPSAiXyA9ICfDvCciCi0gICAgICAgIHNlbGYubG9hZGVyLnNvdXJjZSA9IHNvdXJjZS5lbmNvZGUoJ3V0Zi04JykKLSAgICAgICAgcmV0dXJuZWRfc291cmNlID0gc2VsZi5sb2FkZXIuZ2V0X3NvdXJjZShzZWxmLm5hbWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmV0dXJuZWRfc291cmNlLCBzb3VyY2UpCi0gICAgICAgIHNvdXJjZSA9ICIjIGNvZGluZzogbGF0aW4tMVxuXyA9IMO8IgotICAgICAgICBzZWxmLmxvYWRlci5zb3VyY2UgPSBzb3VyY2UuZW5jb2RlKCdsYXRpbi0xJykKLSAgICAgICAgcmV0dXJuZWRfc291cmNlID0gc2VsZi5sb2FkZXIuZ2V0X3NvdXJjZShzZWxmLm5hbWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmV0dXJuZWRfc291cmNlLCBzb3VyY2UpCi0KLQotQHVuaXR0ZXN0LnNraXBJZihzeXMuZG9udF93cml0ZV9ieXRlY29kZSwgInN5cy5kb250X3dyaXRlX2J5dGVjb2RlIGlzIHRydWUiKQotY2xhc3MgU291cmNlTG9hZGVyQnl0ZWNvZGVUZXN0cyhTb3VyY2VMb2FkZXJUZXN0SGFybmVzcyk6Ci0KLSAgICAiIiJUZXN0IGltcG9ydGxpYi5hYmMuU291cmNlTG9hZGVyJ3MgdXNlIG9mIGJ5dGVjb2RlLgotCi0gICAgU291cmNlLW9ubHkgdGVzdGluZyBoYW5kbGVkIGJ5IFNvdXJjZU9ubHlMb2FkZXJUZXN0cy4KLQotICAgICIiIgotCi0gICAgbG9hZGVyX21vY2sgPSBTb3VyY2VMb2FkZXJNb2NrCi0KLSAgICBkZWYgdmVyaWZ5X2NvZGUoc2VsZiwgY29kZV9vYmplY3QsICosIGJ5dGVjb2RlX3dyaXR0ZW49RmFsc2UpOgotICAgICAgICBzdXBlcigpLnZlcmlmeV9jb2RlKGNvZGVfb2JqZWN0KQotICAgICAgICBpZiBieXRlY29kZV93cml0dGVuOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihzZWxmLmNhY2hlZCwgc2VsZi5sb2FkZXIud3JpdHRlbikKLSAgICAgICAgICAgIGRhdGEgPSBieXRlYXJyYXkoaW1wLmdldF9tYWdpYygpKQotICAgICAgICAgICAgZGF0YS5leHRlbmQoaW1wb3J0bGliLl93X2xvbmcoc2VsZi5sb2FkZXIuc291cmNlX210aW1lKSkKLSAgICAgICAgICAgIGRhdGEuZXh0ZW5kKGltcG9ydGxpYi5fd19sb25nKHNlbGYubG9hZGVyLnNvdXJjZV9zaXplKSkKLSAgICAgICAgICAgIGRhdGEuZXh0ZW5kKG1hcnNoYWwuZHVtcHMoY29kZV9vYmplY3QpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvYWRlci53cml0dGVuW3NlbGYuY2FjaGVkXSwgYnl0ZXMoZGF0YSkpCi0KLSAgICBkZWYgdGVzdF9jb2RlX3dpdGhfZXZlcnl0aGluZyhzZWxmKToKLSAgICAgICAgIyBXaGVuIGV2ZXJ5dGhpbmcgc2hvdWxkIHdvcmsuCi0gICAgICAgIGNvZGVfb2JqZWN0ID0gc2VsZi5sb2FkZXIuZ2V0X2NvZGUoc2VsZi5uYW1lKQotICAgICAgICBzZWxmLnZlcmlmeV9jb2RlKGNvZGVfb2JqZWN0KQotCi0gICAgZGVmIHRlc3Rfbm9fYnl0ZWNvZGUoc2VsZik6Ci0gICAgICAgICMgSWYgbm8gYnl0ZWNvZGUgZXhpc3RzIHRoZW4gbW92ZSBvbiB0byB0aGUgc291cmNlLgotICAgICAgICBzZWxmLmxvYWRlci5ieXRlY29kZV9wYXRoID0gIjxkb2VzIG5vdCBleGlzdD4iCi0gICAgICAgICMgU2FuaXR5IGNoZWNrCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvcik6Ci0gICAgICAgICAgICBieXRlY29kZV9wYXRoID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKHNlbGYucGF0aCkKLSAgICAgICAgICAgIHNlbGYubG9hZGVyLmdldF9kYXRhKGJ5dGVjb2RlX3BhdGgpCi0gICAgICAgIGNvZGVfb2JqZWN0ID0gc2VsZi5sb2FkZXIuZ2V0X2NvZGUoc2VsZi5uYW1lKQotICAgICAgICBzZWxmLnZlcmlmeV9jb2RlKGNvZGVfb2JqZWN0LCBieXRlY29kZV93cml0dGVuPVRydWUpCi0KLSAgICBkZWYgdGVzdF9jb2RlX2JhZF90aW1lc3RhbXAoc2VsZik6Ci0gICAgICAgICMgQnl0ZWNvZGUgaXMgb25seSB1c2VkIHdoZW4gdGhlIHRpbWVzdGFtcCBtYXRjaGVzIHRoZSBzb3VyY2UgRVhBQ1RMWS4KLSAgICAgICAgZm9yIHNvdXJjZV9tdGltZSBpbiAoMCwgMik6Ci0gICAgICAgICAgICBhc3NlcnQgc291cmNlX210aW1lICE9IHNlbGYubG9hZGVyLnNvdXJjZV9tdGltZQotICAgICAgICAgICAgb3JpZ2luYWwgPSBzZWxmLmxvYWRlci5zb3VyY2VfbXRpbWUKLSAgICAgICAgICAgIHNlbGYubG9hZGVyLnNvdXJjZV9tdGltZSA9IHNvdXJjZV9tdGltZQotICAgICAgICAgICAgIyBJZiBieXRlY29kZSBpcyB1c2VkIHRoZW4gRU9GRXJyb3Igd291bGQgYmUgcmFpc2VkIGJ5IG1hcnNoYWwuCi0gICAgICAgICAgICBzZWxmLmxvYWRlci5ieXRlY29kZSA9IHNlbGYubG9hZGVyLmJ5dGVjb2RlWzg6XQotICAgICAgICAgICAgY29kZV9vYmplY3QgPSBzZWxmLmxvYWRlci5nZXRfY29kZShzZWxmLm5hbWUpCi0gICAgICAgICAgICBzZWxmLnZlcmlmeV9jb2RlKGNvZGVfb2JqZWN0LCBieXRlY29kZV93cml0dGVuPVRydWUpCi0gICAgICAgICAgICBzZWxmLmxvYWRlci5zb3VyY2VfbXRpbWUgPSBvcmlnaW5hbAotCi0gICAgZGVmIHRlc3RfY29kZV9iYWRfbWFnaWMoc2VsZik6Ci0gICAgICAgICMgU2tpcCBvdmVyIGJ5dGVjb2RlIHdpdGggYSBiYWQgbWFnaWMgbnVtYmVyLgotICAgICAgICBzZWxmLnNldFVwKG1hZ2ljPWInMDAwMCcpCi0gICAgICAgICMgSWYgYnl0ZWNvZGUgaXMgdXNlZCB0aGVuIEVPRkVycm9yIHdvdWxkIGJlIHJhaXNlZCBieSBtYXJzaGFsLgotICAgICAgICBzZWxmLmxvYWRlci5ieXRlY29kZSA9IHNlbGYubG9hZGVyLmJ5dGVjb2RlWzg6XQotICAgICAgICBjb2RlX29iamVjdCA9IHNlbGYubG9hZGVyLmdldF9jb2RlKHNlbGYubmFtZSkKLSAgICAgICAgc2VsZi52ZXJpZnlfY29kZShjb2RlX29iamVjdCwgYnl0ZWNvZGVfd3JpdHRlbj1UcnVlKQotCi0gICAgZGVmIHRlc3RfZG9udF93cml0ZV9ieXRlY29kZShzZWxmKToKLSAgICAgICAgIyBCeXRlY29kZSBpcyBub3Qgd3JpdHRlbiBpZiBzeXMuZG9udF93cml0ZV9ieXRlY29kZSBpcyB0cnVlLgotICAgICAgICAjIENhbiBhc3N1bWUgaXQgaXMgZmFsc2UgYWxyZWFkeSB0aGFua3MgdG8gdGhlIHNraXBJZiBjbGFzcyBkZWNvcmF0b3IuCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHN5cy5kb250X3dyaXRlX2J5dGVjb2RlID0gVHJ1ZQotICAgICAgICAgICAgc2VsZi5sb2FkZXIuYnl0ZWNvZGVfcGF0aCA9ICI8ZG9lcyBub3QgZXhpc3Q+IgotICAgICAgICAgICAgY29kZV9vYmplY3QgPSBzZWxmLmxvYWRlci5nZXRfY29kZShzZWxmLm5hbWUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKHNlbGYuY2FjaGVkLCBzZWxmLmxvYWRlci53cml0dGVuKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgc3lzLmRvbnRfd3JpdGVfYnl0ZWNvZGUgPSBGYWxzZQotCi0gICAgZGVmIHRlc3Rfbm9fc2V0X2RhdGEoc2VsZik6Ci0gICAgICAgICMgSWYgc2V0X2RhdGEgaXMgbm90IGRlZmluZWQsIG9uZSBjYW4gc3RpbGwgcmVhZCBieXRlY29kZS4KLSAgICAgICAgc2VsZi5zZXRVcChtYWdpYz1iJzAwMDAnKQotICAgICAgICBvcmlnaW5hbF9zZXRfZGF0YSA9IHNlbGYubG9hZGVyLl9fY2xhc3NfXy5zZXRfZGF0YQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBkZWwgc2VsZi5sb2FkZXIuX19jbGFzc19fLnNldF9kYXRhCi0gICAgICAgICAgICBjb2RlX29iamVjdCA9IHNlbGYubG9hZGVyLmdldF9jb2RlKHNlbGYubmFtZSkKLSAgICAgICAgICAgIHNlbGYudmVyaWZ5X2NvZGUoY29kZV9vYmplY3QpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBzZWxmLmxvYWRlci5fX2NsYXNzX18uc2V0X2RhdGEgPSBvcmlnaW5hbF9zZXRfZGF0YQotCi0gICAgZGVmIHRlc3Rfc2V0X2RhdGFfcmFpc2VzX2V4Y2VwdGlvbnMoc2VsZik6Ci0gICAgICAgICMgUmFpc2luZyBOb3RJbXBsZW1lbnRlZEVycm9yIG9yIElPRXJyb3IgaXMgb2theSBmb3Igc2V0X2RhdGEuCi0gICAgICAgIGRlZiByYWlzZV9leGNlcHRpb24oZXhjKToKLSAgICAgICAgICAgIGRlZiBjbG9zdXJlKCphcmdzLCAqKmt3YXJncyk6Ci0gICAgICAgICAgICAgICAgcmFpc2UgZXhjCi0gICAgICAgICAgICByZXR1cm4gY2xvc3VyZQotCi0gICAgICAgIHNlbGYuc2V0VXAobWFnaWM9YicwMDAwJykKLSAgICAgICAgc2VsZi5sb2FkZXIuc2V0X2RhdGEgPSByYWlzZV9leGNlcHRpb24oTm90SW1wbGVtZW50ZWRFcnJvcikKLSAgICAgICAgY29kZV9vYmplY3QgPSBzZWxmLmxvYWRlci5nZXRfY29kZShzZWxmLm5hbWUpCi0gICAgICAgIHNlbGYudmVyaWZ5X2NvZGUoY29kZV9vYmplY3QpCi0KLQotY2xhc3MgU291cmNlTG9hZGVyR2V0U291cmNlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgIiIiVGVzdHMgZm9yIGltcG9ydGxpYi5hYmMuU291cmNlTG9hZGVyLmdldF9zb3VyY2UoKS4iIiIKLQotICAgIGRlZiB0ZXN0X2RlZmF1bHRfZW5jb2Rpbmcoc2VsZik6Ci0gICAgICAgICMgU2hvdWxkIGhhdmUgbm8gcHJvYmxlbXMgd2l0aCBVVEYtOCB0ZXh0LgotICAgICAgICBuYW1lID0gJ21vZCcKLSAgICAgICAgbW9jayA9IFNvdXJjZU9ubHlMb2FkZXJNb2NrKCdtb2QuZmlsZScpCi0gICAgICAgIHNvdXJjZSA9ICd4ID0gIsO8IicKLSAgICAgICAgbW9jay5zb3VyY2UgPSBzb3VyY2UuZW5jb2RlKCd1dGYtOCcpCi0gICAgICAgIHJldHVybmVkX3NvdXJjZSA9IG1vY2suZ2V0X3NvdXJjZShuYW1lKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldHVybmVkX3NvdXJjZSwgc291cmNlKQotCi0gICAgZGVmIHRlc3RfZGVjb2RlZF9zb3VyY2Uoc2VsZik6Ci0gICAgICAgICMgRGVjb2Rpbmcgc2hvdWxkIHdvcmsuCi0gICAgICAgIG5hbWUgPSAnbW9kJwotICAgICAgICBtb2NrID0gU291cmNlT25seUxvYWRlck1vY2soIm1vZC5maWxlIikKLSAgICAgICAgc291cmNlID0gIiMgY29kaW5nOiBMYXRpbi0xXG54PSfDvCciCi0gICAgICAgIGFzc2VydCBzb3VyY2UuZW5jb2RlKCdsYXRpbi0xJykgIT0gc291cmNlLmVuY29kZSgndXRmLTgnKQotICAgICAgICBtb2NrLnNvdXJjZSA9IHNvdXJjZS5lbmNvZGUoJ2xhdGluLTEnKQotICAgICAgICByZXR1cm5lZF9zb3VyY2UgPSBtb2NrLmdldF9zb3VyY2UobmFtZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXR1cm5lZF9zb3VyY2UsIHNvdXJjZSkKLQotICAgIGRlZiB0ZXN0X3VuaXZlcnNhbF9uZXdsaW5lcyhzZWxmKToKLSAgICAgICAgIyBQRVAgMzAyIHNheXMgdW5pdmVyc2FsIG5ld2xpbmVzIHNob3VsZCBiZSB1c2VkLgotICAgICAgICBuYW1lID0gJ21vZCcKLSAgICAgICAgbW9jayA9IFNvdXJjZU9ubHlMb2FkZXJNb2NrKCdtb2QuZmlsZScpCi0gICAgICAgIHNvdXJjZSA9ICJ4ID0gNDJcclxueSA9IC0xM1xyXG4iCi0gICAgICAgIG1vY2suc291cmNlID0gc291cmNlLmVuY29kZSgndXRmLTgnKQotICAgICAgICBleHBlY3QgPSBpby5JbmNyZW1lbnRhbE5ld2xpbmVEZWNvZGVyKE5vbmUsIFRydWUpLmRlY29kZShzb3VyY2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9jay5nZXRfc291cmNlKG5hbWUpLCBleHBlY3QpCi0KLQotY2xhc3MgQWJzdHJhY3RNZXRob2RJbXBsVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgIiIiVGVzdCB0aGUgY29uY3JldGUgYWJzdHJhY3RtZXRob2QgaW1wbGVtZW50YXRpb25zLiIiIgotCi0gICAgY2xhc3MgTWV0YVBhdGhGaW5kZXIoYWJjLk1ldGFQYXRoRmluZGVyKToKLSAgICAgICAgZGVmIGZpbmRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lLCBwYXRoKToKLSAgICAgICAgICAgIHN1cGVyKCkuZmluZF9tb2R1bGUoZnVsbG5hbWUsIHBhdGgpCi0KLSAgICBjbGFzcyBQYXRoRW50cnlGaW5kZXIoYWJjLlBhdGhFbnRyeUZpbmRlcik6Ci0gICAgICAgIGRlZiBmaW5kX21vZHVsZShzZWxmLCBfKToKLSAgICAgICAgICAgIHN1cGVyKCkuZmluZF9tb2R1bGUoXykKLQotICAgICAgICBkZWYgZmluZF9sb2FkZXIoc2VsZiwgXyk6Ci0gICAgICAgICAgICBzdXBlcigpLmZpbmRfbG9hZGVyKF8pCi0KLSAgICBjbGFzcyBGaW5kZXIoYWJjLkZpbmRlcik6Ci0gICAgICAgIGRlZiBmaW5kX21vZHVsZShzZWxmLCBmdWxsbmFtZSwgcGF0aCk6Ci0gICAgICAgICAgICBzdXBlcigpLmZpbmRfbW9kdWxlKGZ1bGxuYW1lLCBwYXRoKQotCi0gICAgY2xhc3MgTG9hZGVyKGFiYy5Mb2FkZXIpOgotICAgICAgICBkZWYgbG9hZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUpOgotICAgICAgICAgICAgc3VwZXIoKS5sb2FkX21vZHVsZShmdWxsbmFtZSkKLSAgICAgICAgZGVmIG1vZHVsZV9yZXByKHNlbGYsIG1vZHVsZSk6Ci0gICAgICAgICAgICBzdXBlcigpLm1vZHVsZV9yZXByKG1vZHVsZSkKLQotICAgIGNsYXNzIFJlc291cmNlTG9hZGVyKExvYWRlciwgYWJjLlJlc291cmNlTG9hZGVyKToKLSAgICAgICAgZGVmIGdldF9kYXRhKHNlbGYsIF8pOgotICAgICAgICAgICAgc3VwZXIoKS5nZXRfZGF0YShfKQotCi0gICAgY2xhc3MgSW5zcGVjdExvYWRlcihMb2FkZXIsIGFiYy5JbnNwZWN0TG9hZGVyKToKLSAgICAgICAgZGVmIGlzX3BhY2thZ2Uoc2VsZiwgXyk6Ci0gICAgICAgICAgICBzdXBlcigpLmlzX3BhY2thZ2UoXykKLQotICAgICAgICBkZWYgZ2V0X2NvZGUoc2VsZiwgXyk6Ci0gICAgICAgICAgICBzdXBlcigpLmdldF9jb2RlKF8pCi0KLSAgICAgICAgZGVmIGdldF9zb3VyY2Uoc2VsZiwgXyk6Ci0gICAgICAgICAgICBzdXBlcigpLmdldF9zb3VyY2UoXykKLQotICAgIGNsYXNzIEV4ZWN1dGlvbkxvYWRlcihJbnNwZWN0TG9hZGVyLCBhYmMuRXhlY3V0aW9uTG9hZGVyKToKLSAgICAgICAgZGVmIGdldF9maWxlbmFtZShzZWxmLCBfKToKLSAgICAgICAgICAgIHN1cGVyKCkuZ2V0X2ZpbGVuYW1lKF8pCi0KLSAgICBjbGFzcyBTb3VyY2VMb2FkZXIoUmVzb3VyY2VMb2FkZXIsIEV4ZWN1dGlvbkxvYWRlciwgYWJjLlNvdXJjZUxvYWRlcik6Ci0gICAgICAgIHBhc3MKLQotICAgIGNsYXNzIFB5TG9hZGVyKFJlc291cmNlTG9hZGVyLCBJbnNwZWN0TG9hZGVyLCBhYmMuUHlMb2FkZXIpOgotICAgICAgICBkZWYgc291cmNlX3BhdGgoc2VsZiwgXyk6Ci0gICAgICAgICAgICBzdXBlcigpLnNvdXJjZV9wYXRoKF8pCi0KLSAgICBjbGFzcyBQeVB5Y0xvYWRlcihQeUxvYWRlciwgYWJjLlB5UHljTG9hZGVyKToKLSAgICAgICAgZGVmIGJ5dGVjb2RlX3BhdGgoc2VsZiwgXyk6Ci0gICAgICAgICAgICBzdXBlcigpLmJ5dGVjb2RlX3BhdGgoXykKLQotICAgICAgICBkZWYgc291cmNlX210aW1lKHNlbGYsIF8pOgotICAgICAgICAgICAgc3VwZXIoKS5zb3VyY2VfbXRpbWUoXykKLQotICAgICAgICBkZWYgd3JpdGVfYnl0ZWNvZGUoc2VsZiwgXywgXzIpOgotICAgICAgICAgICAgc3VwZXIoKS53cml0ZV9ieXRlY29kZShfLCBfMikKLQotICAgIGRlZiByYWlzZXNfTm90SW1wbGVtZW50ZWRFcnJvcihzZWxmLCBpbnMsICphcmdzKToKLSAgICAgICAgZm9yIG1ldGhvZF9uYW1lIGluIGFyZ3M6Ci0gICAgICAgICAgICBtZXRob2QgPSBnZXRhdHRyKGlucywgbWV0aG9kX25hbWUpCi0gICAgICAgICAgICBhcmdfY291bnQgPSBsZW4oaW5zcGVjdC5nZXRmdWxsYXJnc3BlYyhtZXRob2QpWzBdKSAtIDEKLSAgICAgICAgICAgIGFyZ3MgPSBbJyddICogYXJnX2NvdW50Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgbWV0aG9kKCphcmdzKQotICAgICAgICAgICAgZXhjZXB0IE5vdEltcGxlbWVudGVkRXJyb3I6Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBtc2cgPSAie30ue30gZGlkIG5vdCByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yIgotICAgICAgICAgICAgICAgIHNlbGYuZmFpbChtc2cuZm9ybWF0KGlucy5fX2NsYXNzX18uX19uYW1lX18sIG1ldGhvZF9uYW1lKSkKLQotICAgIGRlZiB0ZXN0X0xvYWRlcihzZWxmKToKLSAgICAgICAgc2VsZi5yYWlzZXNfTm90SW1wbGVtZW50ZWRFcnJvcihzZWxmLkxvYWRlcigpLCAnbG9hZF9tb2R1bGUnKQotCi0gICAgIyBYWFggbWlzcGxhY2VkOyBzaG91bGQgYmUgc29tZXdoZXJlIGVsc2UKLSAgICBkZWYgdGVzdF9GaW5kZXIoc2VsZik6Ci0gICAgICAgIHNlbGYucmFpc2VzX05vdEltcGxlbWVudGVkRXJyb3Ioc2VsZi5GaW5kZXIoKSwgJ2ZpbmRfbW9kdWxlJykKLQotICAgIGRlZiB0ZXN0X1Jlc291cmNlTG9hZGVyKHNlbGYpOgotICAgICAgICBzZWxmLnJhaXNlc19Ob3RJbXBsZW1lbnRlZEVycm9yKHNlbGYuUmVzb3VyY2VMb2FkZXIoKSwgJ2xvYWRfbW9kdWxlJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZ2V0X2RhdGEnKQotCi0gICAgZGVmIHRlc3RfSW5zcGVjdExvYWRlcihzZWxmKToKLSAgICAgICAgc2VsZi5yYWlzZXNfTm90SW1wbGVtZW50ZWRFcnJvcihzZWxmLkluc3BlY3RMb2FkZXIoKSwgJ2xvYWRfbW9kdWxlJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaXNfcGFja2FnZScsICdnZXRfY29kZScsICdnZXRfc291cmNlJykKLQotICAgIGRlZiB0ZXN0X0V4ZWN1dGlvbkxvYWRlcihzZWxmKToKLSAgICAgICAgc2VsZi5yYWlzZXNfTm90SW1wbGVtZW50ZWRFcnJvcihzZWxmLkV4ZWN1dGlvbkxvYWRlcigpLCAnbG9hZF9tb2R1bGUnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpc19wYWNrYWdlJywgJ2dldF9jb2RlJywgJ2dldF9zb3VyY2UnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdnZXRfZmlsZW5hbWUnKQotCi0gICAgZGVmIHRlc3RfU291cmNlTG9hZGVyKHNlbGYpOgotICAgICAgICBpbnMgPSBzZWxmLlNvdXJjZUxvYWRlcigpCi0gICAgICAgICMgUmVxdWlyZWQgYWJzdHJhY3RtZXRob2RzLgotICAgICAgICBzZWxmLnJhaXNlc19Ob3RJbXBsZW1lbnRlZEVycm9yKGlucywgJ2dldF9maWxlbmFtZScsICdnZXRfZGF0YScpCi0gICAgICAgICMgT3B0aW9uYWwgYWJzdHJhY3RtZXRob2RzLgotICAgICAgICBzZWxmLnJhaXNlc19Ob3RJbXBsZW1lbnRlZEVycm9yKGlucywncGF0aF9zdGF0cycsICdzZXRfZGF0YScpCi0KLSAgICBkZWYgdGVzdF9QeUxvYWRlcihzZWxmKToKLSAgICAgICAgc2VsZi5yYWlzZXNfTm90SW1wbGVtZW50ZWRFcnJvcihzZWxmLlB5TG9hZGVyKCksICdzb3VyY2VfcGF0aCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2dldF9kYXRhJywgJ2lzX3BhY2thZ2UnKQotCi0gICAgZGVmIHRlc3RfUHlQeWNMb2FkZXIoc2VsZik6Ci0gICAgICAgIHNlbGYucmFpc2VzX05vdEltcGxlbWVudGVkRXJyb3Ioc2VsZi5QeVB5Y0xvYWRlcigpLCAnc291cmNlX3BhdGgnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzb3VyY2VfbXRpbWUnLCAnYnl0ZWNvZGVfcGF0aCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dyaXRlX2J5dGVjb2RlJykKLQotCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAotICAgIHJ1bl91bml0dGVzdChQeUxvYWRlclRlc3RzLCBQeUxvYWRlckNvbXBhdFRlc3RzLAotICAgICAgICAgICAgICAgICAgICBQeUxvYWRlckludGVyZmFjZVRlc3RzLAotICAgICAgICAgICAgICAgICAgICBQeVB5Y0xvYWRlclRlc3RzLCBQeVB5Y0xvYWRlckludGVyZmFjZVRlc3RzLAotICAgICAgICAgICAgICAgICAgICBTa2lwV3JpdGluZ0J5dGVjb2RlVGVzdHMsIFJlZ2VuZXJhdGVkQnl0ZWNvZGVUZXN0cywKLSAgICAgICAgICAgICAgICAgICAgQmFkQnl0ZWNvZGVGYWlsdXJlVGVzdHMsIE1pc3NpbmdQYXRoc1Rlc3RzLAotICAgICAgICAgICAgICAgICAgICBTb3VyY2VPbmx5TG9hZGVyVGVzdHMsCi0gICAgICAgICAgICAgICAgICAgIFNvdXJjZUxvYWRlckJ5dGVjb2RlVGVzdHMsCi0gICAgICAgICAgICAgICAgICAgIFNvdXJjZUxvYWRlckdldFNvdXJjZVRlc3RzLAotICAgICAgICAgICAgICAgICAgICBBYnN0cmFjdE1ldGhvZEltcGxUZXN0cykKLQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9zb3VyY2UvdGVzdF9jYXNlX3NlbnNpdGl2aXR5LnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvc291cmNlL3Rlc3RfY2FzZV9zZW5zaXRpdml0eS5weQppbmRleCAyNDExNzNmLi5lZmQzMTQ2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9zb3VyY2UvdGVzdF9jYXNlX3NlbnNpdGl2aXR5LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS90ZXN0X2Nhc2Vfc2Vuc2l0aXZpdHkucHkKQEAgLTEsOSArMSwxMCBAQAogIiIiVGVzdCBjYXNlLXNlbnNpdGl2aXR5IChQRVAgMjM1KS4iIiIKLWZyb20gaW1wb3J0bGliIGltcG9ydCBfYm9vdHN0cmFwCi1mcm9tIGltcG9ydGxpYiBpbXBvcnQgbWFjaGluZXJ5CiBmcm9tIC4uIGltcG9ydCB1dGlsCiBmcm9tIC4gaW1wb3J0IHV0aWwgYXMgc291cmNlX3V0aWwKLWltcG9ydCBpbXAKKworaW1wb3J0bGliID0gdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWInKQorbWFjaGluZXJ5ID0gdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWIubWFjaGluZXJ5JykKKwogaW1wb3J0IG9zCiBpbXBvcnQgc3lzCiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQgYXMgdGVzdF9zdXBwb3J0CkBAIC0xMSw3ICsxMiw3IEBACiAKIAogQHV0aWwuY2FzZV9pbnNlbnNpdGl2ZV90ZXN0cwotY2xhc3MgQ2FzZVNlbnNpdGl2aXR5VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBDYXNlU2Vuc2l0aXZpdHlUZXN0OgogCiAgICAgIiIiUEVQIDIzNSBkaWN0YXRlcyB0aGF0IG9uIGNhc2UtcHJlc2VydmluZywgY2FzZS1pbnNlbnNpdGl2ZSBmaWxlIHN5c3RlbXMKICAgICB0aGF0IGltcG9ydHMgYXJlIGNhc2Utc2Vuc2l0aXZlIHVubGVzcyB0aGUgUFlUSE9OQ0FTRU9LIGVudmlyb25tZW50CkBAIC0yMCwxMyArMjEsMTIgQEAKICAgICBuYW1lID0gJ01vRHVMZScKICAgICBhc3NlcnQgbmFtZSAhPSBuYW1lLmxvd2VyKCkKIAotICAgIGRlZiBmaW5kKHNlbGYsIHBhdGgpOgotICAgICAgICBmaW5kZXIgPSBtYWNoaW5lcnkuRmlsZUZpbmRlcihwYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hY2hpbmVyeS5TT1VSQ0VfU1VGRklYRVMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYWNoaW5lcnkuU291cmNlbGVzc0ZpbGVMb2FkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hY2hpbmVyeS5CWVRFQ09ERV9TVUZGSVhFUykpCi0gICAgICAgIHJldHVybiBmaW5kZXIuZmluZF9tb2R1bGUoc2VsZi5uYW1lKQorICAgIGRlZiBmaW5kZXIoc2VsZiwgcGF0aCk6CisgICAgICAgIHJldHVybiBzZWxmLm1hY2hpbmVyeS5GaWxlRmluZGVyKHBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLm1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1hY2hpbmVyeS5TT1VSQ0VfU1VGRklYRVMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLm1hY2hpbmVyeS5Tb3VyY2VsZXNzRmlsZUxvYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYWNoaW5lcnkuQllURUNPREVfU1VGRklYRVMpKQogCiAgICAgZGVmIHNlbnNpdGl2aXR5X3Rlc3Qoc2VsZik6CiAgICAgICAgICIiIkxvb2sgZm9yIGEgbW9kdWxlIHdpdGggbWF0Y2hpbmcgYW5kIG5vbi1tYXRjaGluZyBzZW5zaXRpdml0eS4iIiIKQEAgLTM2LDM1ICszNiw0OCBAQAogICAgICAgICB3aXRoIGNvbnRleHQgYXMgbWFwcGluZzoKICAgICAgICAgICAgIHNlbnNpdGl2ZV9wYXRoID0gb3MucGF0aC5qb2luKG1hcHBpbmdbJy5yb290J10sICdzZW5zaXRpdmUnKQogICAgICAgICAgICAgaW5zZW5zaXRpdmVfcGF0aCA9IG9zLnBhdGguam9pbihtYXBwaW5nWycucm9vdCddLCAnaW5zZW5zaXRpdmUnKQotICAgICAgICAgICAgcmV0dXJuIHNlbGYuZmluZChzZW5zaXRpdmVfcGF0aCksIHNlbGYuZmluZChpbnNlbnNpdGl2ZV9wYXRoKQorICAgICAgICAgICAgc2Vuc2l0aXZlX2ZpbmRlciA9IHNlbGYuZmluZGVyKHNlbnNpdGl2ZV9wYXRoKQorICAgICAgICAgICAgaW5zZW5zaXRpdmVfZmluZGVyID0gc2VsZi5maW5kZXIoaW5zZW5zaXRpdmVfcGF0aCkKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmZpbmQoc2Vuc2l0aXZlX2ZpbmRlciksIHNlbGYuZmluZChpbnNlbnNpdGl2ZV9maW5kZXIpCiAKICAgICBkZWYgdGVzdF9zZW5zaXRpdmUoc2VsZik6CiAgICAgICAgIHdpdGggdGVzdF9zdXBwb3J0LkVudmlyb25tZW50VmFyR3VhcmQoKSBhcyBlbnY6CiAgICAgICAgICAgICBlbnYudW5zZXQoJ1BZVEhPTkNBU0VPSycpCi0gICAgICAgICAgICBpZiBiJ1BZVEhPTkNBU0VPSycgaW4gX2Jvb3RzdHJhcC5fb3MuZW52aXJvbjoKKyAgICAgICAgICAgIGlmIGInUFlUSE9OQ0FTRU9LJyBpbiBzZWxmLmltcG9ydGxpYi5fYm9vdHN0cmFwLl9vcy5lbnZpcm9uOgogICAgICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoJ29zLmVudmlyb24gY2hhbmdlcyBub3QgcmVmbGVjdGVkIGluICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfb3MuZW52aXJvbicpCiAgICAgICAgICAgICBzZW5zaXRpdmUsIGluc2Vuc2l0aXZlID0gc2VsZi5zZW5zaXRpdml0eV90ZXN0KCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKHNlbnNpdGl2ZSwgJ2xvYWRfbW9kdWxlJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShzZW5zaXRpdmUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEluKHNlbGYubmFtZSwgc2Vuc2l0aXZlLmdldF9maWxlbmFtZShzZWxmLm5hbWUpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoaW5zZW5zaXRpdmUpCiAKICAgICBkZWYgdGVzdF9pbnNlbnNpdGl2ZShzZWxmKToKICAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuRW52aXJvbm1lbnRWYXJHdWFyZCgpIGFzIGVudjoKICAgICAgICAgICAgIGVudi5zZXQoJ1BZVEhPTkNBU0VPSycsICcxJykKLSAgICAgICAgICAgIGlmIGInUFlUSE9OQ0FTRU9LJyBub3QgaW4gX2Jvb3RzdHJhcC5fb3MuZW52aXJvbjoKKyAgICAgICAgICAgIGlmIGInUFlUSE9OQ0FTRU9LJyBub3QgaW4gc2VsZi5pbXBvcnRsaWIuX2Jvb3RzdHJhcC5fb3MuZW52aXJvbjoKICAgICAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCdvcy5lbnZpcm9uIGNoYW5nZXMgbm90IHJlZmxlY3RlZCBpbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX29zLmVudmlyb24nKQogICAgICAgICAgICAgc2Vuc2l0aXZlLCBpbnNlbnNpdGl2ZSA9IHNlbGYuc2Vuc2l0aXZpdHlfdGVzdCgpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihzZW5zaXRpdmUsICdsb2FkX21vZHVsZScpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoc2Vuc2l0aXZlKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihzZWxmLm5hbWUsIHNlbnNpdGl2ZS5nZXRfZmlsZW5hbWUoc2VsZi5uYW1lKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKGluc2Vuc2l0aXZlLCAnbG9hZF9tb2R1bGUnKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKGluc2Vuc2l0aXZlKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihzZWxmLm5hbWUsIGluc2Vuc2l0aXZlLmdldF9maWxlbmFtZShzZWxmLm5hbWUpKQogCitjbGFzcyBDYXNlU2Vuc2l0aXZpdHlUZXN0UEVQMzAyKENhc2VTZW5zaXRpdml0eVRlc3QpOgorICAgIGRlZiBmaW5kKHNlbGYsIGZpbmRlcik6CisgICAgICAgIHJldHVybiBmaW5kZXIuZmluZF9tb2R1bGUoc2VsZi5uYW1lKQogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChDYXNlU2Vuc2l0aXZpdHlUZXN0KQorRnJvemVuX0Nhc2VTZW5zaXRpdml0eVRlc3RQRVAzMDIsIFNvdXJjZV9DYXNlU2Vuc2l0aXZpdHlUZXN0UEVQMzAyID0gdXRpbC50ZXN0X2JvdGgoCisgICAgQ2FzZVNlbnNpdGl2aXR5VGVzdFBFUDMwMiwgaW1wb3J0bGliPWltcG9ydGxpYiwgbWFjaGluZXJ5PW1hY2hpbmVyeSkKKworY2xhc3MgQ2FzZVNlbnNpdGl2aXR5VGVzdFBFUDQ1MShDYXNlU2Vuc2l0aXZpdHlUZXN0KToKKyAgICBkZWYgZmluZChzZWxmLCBmaW5kZXIpOgorICAgICAgICBmb3VuZCA9IGZpbmRlci5maW5kX3NwZWMoc2VsZi5uYW1lKQorICAgICAgICByZXR1cm4gZm91bmQubG9hZGVyIGlmIGZvdW5kIGlzIG5vdCBOb25lIGVsc2UgZm91bmQKKworRnJvemVuX0Nhc2VTZW5zaXRpdml0eVRlc3RQRVA0NTEsIFNvdXJjZV9DYXNlU2Vuc2l0aXZpdHlUZXN0UEVQNDUxID0gdXRpbC50ZXN0X2JvdGgoCisgICAgQ2FzZVNlbnNpdGl2aXR5VGVzdFBFUDQ1MSwgaW1wb3J0bGliPWltcG9ydGxpYiwgbWFjaGluZXJ5PW1hY2hpbmVyeSkKIAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9zb3VyY2UvdGVzdF9maWxlX2xvYWRlci5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS90ZXN0X2ZpbGVfbG9hZGVyLnB5CmluZGV4IGQ3MTFjYjMuLjJkNDE1ZjkgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS90ZXN0X2ZpbGVfbG9hZGVyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS90ZXN0X2ZpbGVfbG9hZGVyLnB5CkBAIC0xLDUyICsxLDUyIEBACi1mcm9tIGltcG9ydGxpYiBpbXBvcnQgbWFjaGluZXJ5Ci1pbXBvcnQgaW1wb3J0bGliCi1pbXBvcnQgaW1wb3J0bGliLmFiYwogZnJvbSAuLiBpbXBvcnQgYWJjCiBmcm9tIC4uIGltcG9ydCB1dGlsCiBmcm9tIC4gaW1wb3J0IHV0aWwgYXMgc291cmNlX3V0aWwKIAoraW1wb3J0bGliID0gdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWInKQoraW1wb3J0bGliX2FiYyA9IHV0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliLmFiYycpCittYWNoaW5lcnkgPSB1dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYi5tYWNoaW5lcnknKQoraW1wb3J0bGliX3V0aWwgPSB1dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYi51dGlsJykKKwogaW1wb3J0IGVycm5vCi1pbXBvcnQgaW1wCiBpbXBvcnQgbWFyc2hhbAogaW1wb3J0IG9zCiBpbXBvcnQgcHlfY29tcGlsZQogaW1wb3J0IHNodXRpbAogaW1wb3J0IHN0YXQKIGltcG9ydCBzeXMKK2ltcG9ydCB0eXBlcwogaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgd2FybmluZ3MKIAotZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IG1ha2VfbGVnYWN5X3B5YworZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IG1ha2VfbGVnYWN5X3B5YywgdW5sb2FkCiAKIAotY2xhc3MgU2ltcGxlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBTaW1wbGVUZXN0KGFiYy5Mb2FkZXJUZXN0cyk6CiAKICAgICAiIiJTaG91bGQgaGF2ZSBubyBpc3N1ZSBpbXBvcnRpbmcgYSBzb3VyY2UgbW9kdWxlIFtiYXNpY10uIEFuZCBpZiB0aGVyZSBpcwogICAgIGEgc3ludGF4IGVycm9yLCBpdCBzaG91bGQgcmFpc2UgYSBTeW50YXhFcnJvciBbc3ludGF4IGVycm9yXS4KIAogICAgICIiIgogCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm5hbWUgPSAnc3BhbScKKyAgICAgICAgc2VsZi5maWxlcGF0aCA9IG9zLnBhdGguam9pbignaGFtJywgc2VsZi5uYW1lICsgJy5weScpCisgICAgICAgIHNlbGYubG9hZGVyID0gc2VsZi5tYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcihzZWxmLm5hbWUsIHNlbGYuZmlsZXBhdGgpCisKICAgICBkZWYgdGVzdF9sb2FkX21vZHVsZV9BUEkoc2VsZik6Ci0gICAgICAgICMgSWYgZnVsbG5hbWUgaXMgbm90IHNwZWNpZmllZCB0aGF0IGFzc3VtZSBzZWxmLm5hbWUgaXMgZGVzaXJlZC4KLSAgICAgICAgY2xhc3MgVGVzdGVyTWl4aW4oaW1wb3J0bGliLmFiYy5Mb2FkZXIpOgotICAgICAgICAgICAgZGVmIGxvYWRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lKTogcmV0dXJuIGZ1bGxuYW1lCi0gICAgICAgICAgICBkZWYgbW9kdWxlX3JlcHIoc2VsZiwgbW9kdWxlKTogcmV0dXJuICc8bW9kdWxlPicKKyAgICAgICAgY2xhc3MgVGVzdGVyKHNlbGYuYWJjLkZpbGVMb2FkZXIpOgorICAgICAgICAgICAgZGVmIGdldF9zb3VyY2Uoc2VsZiwgXyk6IHJldHVybiAnYXR0ciA9IDQyJworICAgICAgICAgICAgZGVmIGlzX3BhY2thZ2Uoc2VsZiwgXyk6IHJldHVybiBGYWxzZQogCi0gICAgICAgIGNsYXNzIFRlc3RlcihpbXBvcnRsaWIuYWJjLkZpbGVMb2FkZXIsIFRlc3Rlck1peGluKToKLSAgICAgICAgICAgIGRlZiBnZXRfY29kZShzZWxmLCBfKTogcGFzcwotICAgICAgICAgICAgZGVmIGdldF9zb3VyY2Uoc2VsZiwgXyk6IHBhc3MKLSAgICAgICAgICAgIGRlZiBpc19wYWNrYWdlKHNlbGYsIF8pOiBwYXNzCi0KLSAgICAgICAgbmFtZSA9ICdtb2RfbmFtZScKLSAgICAgICAgbG9hZGVyID0gVGVzdGVyKG5hbWUsICdzb21lX3BhdGgnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5hbWUsIGxvYWRlci5sb2FkX21vZHVsZSgpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5hbWUsIGxvYWRlci5sb2FkX21vZHVsZShOb25lKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuYW1lLCBsb2FkZXIubG9hZF9tb2R1bGUobmFtZSkpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpOgotICAgICAgICAgICAgbG9hZGVyLmxvYWRfbW9kdWxlKGxvYWRlci5uYW1lICsgJ1hYWCcpCisgICAgICAgIGxvYWRlciA9IFRlc3RlcignYmxhaCcsICdibGFoLnB5JykKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHVubG9hZCwgJ2JsYWgnKQorICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2lnbm9yZScsIERlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgICAgIG1vZHVsZSA9IGxvYWRlci5sb2FkX21vZHVsZSgpICAjIFNob3VsZCBub3QgcmFpc2UgYW4gZXhjZXB0aW9uLgogCiAgICAgZGVmIHRlc3RfZ2V0X2ZpbGVuYW1lX0FQSShzZWxmKToKICAgICAgICAgIyBJZiBmdWxsbmFtZSBpcyBub3Qgc2V0IHRoZW4gYXNzdW1lIHNlbGYucGF0aCBpcyBkZXNpcmVkLgotICAgICAgICBjbGFzcyBUZXN0ZXIoaW1wb3J0bGliLmFiYy5GaWxlTG9hZGVyKToKKyAgICAgICAgY2xhc3MgVGVzdGVyKHNlbGYuYWJjLkZpbGVMb2FkZXIpOgogICAgICAgICAgICAgZGVmIGdldF9jb2RlKHNlbGYsIF8pOiBwYXNzCiAgICAgICAgICAgICBkZWYgZ2V0X3NvdXJjZShzZWxmLCBfKTogcGFzcwogICAgICAgICAgICAgZGVmIGlzX3BhY2thZ2Uoc2VsZiwgXyk6IHBhc3MKQEAgLTYxLDExICs2MSwyMSBAQAogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKToKICAgICAgICAgICAgIGxvYWRlci5nZXRfZmlsZW5hbWUobmFtZSArICdYWFgnKQogCisgICAgZGVmIHRlc3RfZXF1YWxpdHkoc2VsZik6CisgICAgICAgIG90aGVyID0gc2VsZi5tYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcihzZWxmLm5hbWUsIHNlbGYuZmlsZXBhdGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb2FkZXIsIG90aGVyKQorCisgICAgZGVmIHRlc3RfaW5lcXVhbGl0eShzZWxmKToKKyAgICAgICAgb3RoZXIgPSBzZWxmLm1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyKCdfJyArIHNlbGYubmFtZSwgc2VsZi5maWxlcGF0aCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChzZWxmLmxvYWRlciwgb3RoZXIpCisKICAgICAjIFtiYXNpY10KICAgICBkZWYgdGVzdF9tb2R1bGUoc2VsZik6CiAgICAgICAgIHdpdGggc291cmNlX3V0aWwuY3JlYXRlX21vZHVsZXMoJ190ZW1wJykgYXMgbWFwcGluZzoKLSAgICAgICAgICAgIGxvYWRlciA9IG1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyKCdfdGVtcCcsIG1hcHBpbmdbJ190ZW1wJ10pCi0gICAgICAgICAgICBtb2R1bGUgPSBsb2FkZXIubG9hZF9tb2R1bGUoJ190ZW1wJykKKyAgICAgICAgICAgIGxvYWRlciA9IHNlbGYubWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIoJ190ZW1wJywgbWFwcGluZ1snX3RlbXAnXSkKKyAgICAgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2lnbm9yZScsIERlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSBsb2FkZXIubG9hZF9tb2R1bGUoJ190ZW1wJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ190ZW1wJywgc3lzLm1vZHVsZXMpCiAgICAgICAgICAgICBjaGVjayA9IHsnX19uYW1lX18nOiAnX3RlbXAnLCAnX19maWxlX18nOiBtYXBwaW5nWydfdGVtcCddLAogICAgICAgICAgICAgICAgICAgICAgJ19fcGFja2FnZV9fJzogJyd9CkBAIC03NCw5ICs4NCwxMSBAQAogCiAgICAgZGVmIHRlc3RfcGFja2FnZShzZWxmKToKICAgICAgICAgd2l0aCBzb3VyY2VfdXRpbC5jcmVhdGVfbW9kdWxlcygnX3BrZy5fX2luaXRfXycpIGFzIG1hcHBpbmc6Ci0gICAgICAgICAgICBsb2FkZXIgPSBtYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcignX3BrZycsCisgICAgICAgICAgICBsb2FkZXIgPSBzZWxmLm1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyKCdfcGtnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nWydfcGtnLl9faW5pdF9fJ10pCi0gICAgICAgICAgICBtb2R1bGUgPSBsb2FkZXIubG9hZF9tb2R1bGUoJ19wa2cnKQorICAgICAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignaWdub3JlJywgRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICAgICAgICAgIG1vZHVsZSA9IGxvYWRlci5sb2FkX21vZHVsZSgnX3BrZycpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEluKCdfcGtnJywgc3lzLm1vZHVsZXMpCiAgICAgICAgICAgICBjaGVjayA9IHsnX19uYW1lX18nOiAnX3BrZycsICdfX2ZpbGVfXyc6IG1hcHBpbmdbJ19wa2cuX19pbml0X18nXSwKICAgICAgICAgICAgICAgICAgICAgICdfX3BhdGhfXyc6IFtvcy5wYXRoLmRpcm5hbWUobWFwcGluZ1snX3BrZy5fX2luaXRfXyddKV0sCkBAIC04Nyw5ICs5OSwxMSBAQAogCiAgICAgZGVmIHRlc3RfbGFja2luZ19wYXJlbnQoc2VsZik6CiAgICAgICAgIHdpdGggc291cmNlX3V0aWwuY3JlYXRlX21vZHVsZXMoJ19wa2cuX19pbml0X18nLCAnX3BrZy5tb2QnKWFzIG1hcHBpbmc6Ci0gICAgICAgICAgICBsb2FkZXIgPSBtYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcignX3BrZy5tb2QnLAorICAgICAgICAgICAgbG9hZGVyID0gc2VsZi5tYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcignX3BrZy5tb2QnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdbJ19wa2cubW9kJ10pCi0gICAgICAgICAgICBtb2R1bGUgPSBsb2FkZXIubG9hZF9tb2R1bGUoJ19wa2cubW9kJykKKyAgICAgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2lnbm9yZScsIERlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSBsb2FkZXIubG9hZF9tb2R1bGUoJ19wa2cubW9kJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ19wa2cubW9kJywgc3lzLm1vZHVsZXMpCiAgICAgICAgICAgICBjaGVjayA9IHsnX19uYW1lX18nOiAnX3BrZy5tb2QnLCAnX19maWxlX18nOiBtYXBwaW5nWydfcGtnLm1vZCddLAogICAgICAgICAgICAgICAgICAgICAgJ19fcGFja2FnZV9fJzogJ19wa2cnfQpAQCAtMTAyLDEzICsxMTYsMTcgQEAKIAogICAgIGRlZiB0ZXN0X21vZHVsZV9yZXVzZShzZWxmKToKICAgICAgICAgd2l0aCBzb3VyY2VfdXRpbC5jcmVhdGVfbW9kdWxlcygnX3RlbXAnKSBhcyBtYXBwaW5nOgotICAgICAgICAgICAgbG9hZGVyID0gbWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIoJ190ZW1wJywgbWFwcGluZ1snX3RlbXAnXSkKLSAgICAgICAgICAgIG1vZHVsZSA9IGxvYWRlci5sb2FkX21vZHVsZSgnX3RlbXAnKQorICAgICAgICAgICAgbG9hZGVyID0gc2VsZi5tYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcignX3RlbXAnLCBtYXBwaW5nWydfdGVtcCddKQorICAgICAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignaWdub3JlJywgRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICAgICAgICAgIG1vZHVsZSA9IGxvYWRlci5sb2FkX21vZHVsZSgnX3RlbXAnKQogICAgICAgICAgICAgbW9kdWxlX2lkID0gaWQobW9kdWxlKQogICAgICAgICAgICAgbW9kdWxlX2RpY3RfaWQgPSBpZChtb2R1bGUuX19kaWN0X18pCiAgICAgICAgICAgICB3aXRoIG9wZW4obWFwcGluZ1snX3RlbXAnXSwgJ3cnKSBhcyBmaWxlOgogICAgICAgICAgICAgICAgIGZpbGUud3JpdGUoInRlc3RpbmdfdmFyID0gNDJcbiIpCi0gICAgICAgICAgICBtb2R1bGUgPSBsb2FkZXIubG9hZF9tb2R1bGUoJ190ZW1wJykKKyAgICAgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2lnbm9yZScsIERlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSBsb2FkZXIubG9hZF9tb2R1bGUoJ190ZW1wJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3Rlc3RpbmdfdmFyJywgbW9kdWxlLl9fZGljdF9fLAogICAgICAgICAgICAgICAgICAgICAgICAgICIndGVzdGluZ192YXInIG5vdCBpbiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInswfSIuZm9ybWF0KGxpc3QobW9kdWxlLl9fZGljdF9fLmtleXMoKSkpKQpAQCAtMTIyLDE0ICsxNDAsMjAgQEAKICAgICAgICAgdmFsdWUgPSAnPHRlc3Q+JwogICAgICAgICBuYW1lID0gJ190ZW1wJwogICAgICAgICB3aXRoIHNvdXJjZV91dGlsLmNyZWF0ZV9tb2R1bGVzKG5hbWUpIGFzIG1hcHBpbmc6Ci0gICAgICAgICAgICBvcmlnX21vZHVsZSA9IGltcC5uZXdfbW9kdWxlKG5hbWUpCisgICAgICAgICAgICBvcmlnX21vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUobmFtZSkKICAgICAgICAgICAgIGZvciBhdHRyIGluIGF0dHJpYnV0ZXM6CiAgICAgICAgICAgICAgICAgc2V0YXR0cihvcmlnX21vZHVsZSwgYXR0ciwgdmFsdWUpCiAgICAgICAgICAgICB3aXRoIG9wZW4obWFwcGluZ1tuYW1lXSwgJ3cnKSBhcyBmaWxlOgogICAgICAgICAgICAgICAgIGZpbGUud3JpdGUoJysrKyBiYWQgc3ludGF4ICsrKycpCi0gICAgICAgICAgICBsb2FkZXIgPSBtYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcignX3RlbXAnLCBtYXBwaW5nWydfdGVtcCddKQorICAgICAgICAgICAgbG9hZGVyID0gc2VsZi5tYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcignX3RlbXAnLCBtYXBwaW5nWydfdGVtcCddKQogICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvcik6Ci0gICAgICAgICAgICAgICAgbG9hZGVyLmxvYWRfbW9kdWxlKG5hbWUpCisgICAgICAgICAgICAgICAgbG9hZGVyLmV4ZWNfbW9kdWxlKG9yaWdfbW9kdWxlKQorICAgICAgICAgICAgZm9yIGF0dHIgaW4gYXR0cmlidXRlczoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGF0dHIob3JpZ19tb2R1bGUsIGF0dHIpLCB2YWx1ZSkKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IpOgorICAgICAgICAgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdpZ25vcmUnLCBEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgICAgICAgICAgICAgIGxvYWRlci5sb2FkX21vZHVsZShuYW1lKQogICAgICAgICAgICAgZm9yIGF0dHIgaW4gYXR0cmlidXRlczoKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGF0dHIob3JpZ19tb2R1bGUsIGF0dHIpLCB2YWx1ZSkKIApAQCAtMTM4LDkgKzE2MiwxMSBAQAogICAgICAgICB3aXRoIHNvdXJjZV91dGlsLmNyZWF0ZV9tb2R1bGVzKCdfdGVtcCcpIGFzIG1hcHBpbmc6CiAgICAgICAgICAgICB3aXRoIG9wZW4obWFwcGluZ1snX3RlbXAnXSwgJ3cnKSBhcyBmaWxlOgogICAgICAgICAgICAgICAgIGZpbGUud3JpdGUoJz0nKQotICAgICAgICAgICAgbG9hZGVyID0gbWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIoJ190ZW1wJywgbWFwcGluZ1snX3RlbXAnXSkKKyAgICAgICAgICAgIGxvYWRlciA9IHNlbGYubWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIoJ190ZW1wJywgbWFwcGluZ1snX3RlbXAnXSkKICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IpOgotICAgICAgICAgICAgICAgIGxvYWRlci5sb2FkX21vZHVsZSgnX3RlbXAnKQorICAgICAgICAgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdpZ25vcmUnLCBEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgICAgICAgICAgICAgIGxvYWRlci5sb2FkX21vZHVsZSgnX3RlbXAnKQogICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbignX3RlbXAnLCBzeXMubW9kdWxlcykKIAogICAgIGRlZiB0ZXN0X2ZpbGVfZnJvbV9lbXB0eV9zdHJpbmdfZGlyKHNlbGYpOgpAQCAtMTUxLDE0ICsxNzcsMTYgQEAKICAgICAgICAgICAgIGZpbGUud3JpdGUoIiMgdGVzdCBmaWxlIGZvciBpbXBvcnRsaWIiKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICB3aXRoIHV0aWwudW5jYWNoZSgnX3RlbXAnKToKLSAgICAgICAgICAgICAgICBsb2FkZXIgPSBtYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcignX3RlbXAnLCBmaWxlX3BhdGgpCi0gICAgICAgICAgICAgICAgbW9kID0gbG9hZGVyLmxvYWRfbW9kdWxlKCdfdGVtcCcpCisgICAgICAgICAgICAgICAgbG9hZGVyID0gc2VsZi5tYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcignX3RlbXAnLCBmaWxlX3BhdGgpCisgICAgICAgICAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2lnbm9yZScsIERlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgICAgICAgICAgICAgbW9kID0gbG9hZGVyLmxvYWRfbW9kdWxlKCdfdGVtcCcpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlX3BhdGgsIG1vZC5fX2ZpbGVfXykKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltcC5jYWNoZV9mcm9tX3NvdXJjZShmaWxlX3BhdGgpLAorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKGZpbGVfcGF0aCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2QuX19jYWNoZWRfXykKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIG9zLnVubGluayhmaWxlX3BhdGgpCi0gICAgICAgICAgICBweWNhY2hlID0gb3MucGF0aC5kaXJuYW1lKGltcC5jYWNoZV9mcm9tX3NvdXJjZShmaWxlX3BhdGgpKQorICAgICAgICAgICAgcHljYWNoZSA9IG9zLnBhdGguZGlybmFtZShzZWxmLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoZmlsZV9wYXRoKSkKICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHB5Y2FjaGUpOgogICAgICAgICAgICAgICAgIHNodXRpbC5ybXRyZWUocHljYWNoZSkKIApAQCAtMTY4LDcgKzE5Niw3IEBACiAgICAgICAgICMgdHJ1bmNhdGVkIHJhdGhlciB0aGFuIHJhaXNlIGFuIE92ZXJmbG93RXJyb3IuCiAgICAgICAgIHdpdGggc291cmNlX3V0aWwuY3JlYXRlX21vZHVsZXMoJ190ZW1wJykgYXMgbWFwcGluZzoKICAgICAgICAgICAgIHNvdXJjZSA9IG1hcHBpbmdbJ190ZW1wJ10KLSAgICAgICAgICAgIGNvbXBpbGVkID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKHNvdXJjZSkKKyAgICAgICAgICAgIGNvbXBpbGVkID0gc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHNvdXJjZSkKICAgICAgICAgICAgIHdpdGggb3Blbihzb3VyY2UsICd3JykgYXMgZjoKICAgICAgICAgICAgICAgICBmLndyaXRlKCJ4ID0gNSIpCiAgICAgICAgICAgICB0cnk6CkBAIC0xNzksMjAgKzIwNyw0OCBAQAogICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZ2V0YXR0cihlcnJubywgJ0VPVkVSRkxPVycsIE5vbmUpOgogICAgICAgICAgICAgICAgICAgICByYWlzZQogICAgICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoImNhbm5vdCBzZXQgbW9kaWZpY2F0aW9uIHRpbWUgdG8gbGFyZ2UgaW50ZWdlciAoe30pIi5mb3JtYXQoZSkpCi0gICAgICAgICAgICBsb2FkZXIgPSBtYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcignX3RlbXAnLCBtYXBwaW5nWydfdGVtcCddKQotICAgICAgICAgICAgbW9kID0gbG9hZGVyLmxvYWRfbW9kdWxlKCdfdGVtcCcpCisgICAgICAgICAgICBsb2FkZXIgPSBzZWxmLm1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyKCdfdGVtcCcsIG1hcHBpbmdbJ190ZW1wJ10pCisgICAgICAgICAgICAjIFBFUCA0NTEKKyAgICAgICAgICAgIG1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUoJ190ZW1wJykKKyAgICAgICAgICAgIG1vZHVsZS5fX3NwZWNfXyA9IHNlbGYudXRpbC5zcGVjX2Zyb21fbG9hZGVyKCdfdGVtcCcsIGxvYWRlcikKKyAgICAgICAgICAgIGxvYWRlci5leGVjX21vZHVsZShtb2R1bGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS54LCA1KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKGNvbXBpbGVkKSkKKyAgICAgICAgICAgIG9zLnVubGluayhjb21waWxlZCkKKyAgICAgICAgICAgICMgUEVQIDMwMgorICAgICAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignaWdub3JlJywgRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICAgICAgICAgIG1vZCA9IGxvYWRlci5sb2FkX21vZHVsZSgnX3RlbXAnKSAjIFhYWAogICAgICAgICAgICAgIyBTYW5pdHkgY2hlY2tzLgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2QuX19jYWNoZWRfXywgY29tcGlsZWQpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZC54LCA1KQogICAgICAgICAgICAgIyBUaGUgcHljIGZpbGUgd2FzIGNyZWF0ZWQuCi0gICAgICAgICAgICBvcy5zdGF0KGNvbXBpbGVkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKGNvbXBpbGVkKSkKKworICAgIGRlZiB0ZXN0X3VubG9hZGFibGUoc2VsZik6CisgICAgICAgIGxvYWRlciA9IHNlbGYubWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIoJ2dvb2QgbmFtZScsIHt9KQorICAgICAgICBtb2R1bGUgPSB0eXBlcy5Nb2R1bGVUeXBlKCdiYWQgbmFtZScpCisgICAgICAgIG1vZHVsZS5fX3NwZWNfXyA9IHNlbGYubWFjaGluZXJ5Lk1vZHVsZVNwZWMoJ2JhZCBuYW1lJywgbG9hZGVyKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKToKKyAgICAgICAgICAgIGxvYWRlci5leGVjX21vZHVsZShtb2R1bGUpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpOgorICAgICAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignaWdub3JlJywgRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICAgICAgICAgIGxvYWRlci5sb2FkX21vZHVsZSgnYmFkIG5hbWUnKQorCitGcm96ZW5fU2ltcGxlVGVzdCwgU291cmNlX1NpbXBsZVRlc3QgPSB1dGlsLnRlc3RfYm90aCgKKyAgICAgICAgU2ltcGxlVGVzdCwgaW1wb3J0bGliPWltcG9ydGxpYiwgbWFjaGluZXJ5PW1hY2hpbmVyeSwgYWJjPWltcG9ydGxpYl9hYmMsCisgICAgICAgIHV0aWw9aW1wb3J0bGliX3V0aWwpCiAKIAotY2xhc3MgQmFkQnl0ZWNvZGVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKK2NsYXNzIEJhZEJ5dGVjb2RlVGVzdDoKIAogICAgIGRlZiBpbXBvcnRfKHNlbGYsIGZpbGUsIG1vZHVsZV9uYW1lKToKICAgICAgICAgbG9hZGVyID0gc2VsZi5sb2FkZXIobW9kdWxlX25hbWUsIGZpbGUpCi0gICAgICAgIG1vZHVsZSA9IGxvYWRlci5sb2FkX21vZHVsZShtb2R1bGVfbmFtZSkKKyAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdpZ25vcmUnLCBEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgICAgICAjIFhYWCBDaGFuZ2UgdG8gdXNlIGV4ZWNfbW9kdWxlKCkuCisgICAgICAgICAgICBtb2R1bGUgPSBsb2FkZXIubG9hZF9tb2R1bGUobW9kdWxlX25hbWUpCiAgICAgICAgIHNlbGYuYXNzZXJ0SW4obW9kdWxlX25hbWUsIHN5cy5tb2R1bGVzKQogCiAgICAgZGVmIG1hbmlwdWxhdGVfYnl0ZWNvZGUoc2VsZiwgbmFtZSwgbWFwcGluZywgbWFuaXB1bGF0b3IsICosCkBAIC0yMDUsNyArMjYxLDcgQEAKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgcHlfY29tcGlsZS5jb21waWxlKG1hcHBpbmdbbmFtZV0pCiAgICAgICAgIGlmIG5vdCBkZWxfc291cmNlOgotICAgICAgICAgICAgYnl0ZWNvZGVfcGF0aCA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShtYXBwaW5nW25hbWVdKQorICAgICAgICAgICAgYnl0ZWNvZGVfcGF0aCA9IHNlbGYudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShtYXBwaW5nW25hbWVdKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgb3MudW5saW5rKG1hcHBpbmdbbmFtZV0pCiAgICAgICAgICAgICBieXRlY29kZV9wYXRoID0gbWFrZV9sZWdhY3lfcHljKG1hcHBpbmdbbmFtZV0pCkBAIC0yOTEsMTAgKzM0NywyOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFtYmRhIGJjOiBiJ1x4MDBceDAwXHgwMFx4MDAnICsgYmNbNDpdKQogICAgICAgICAgICAgdGVzdCgnX3RlbXAnLCBtYXBwaW5nLCBiY19wYXRoKQogCitjbGFzcyBCYWRCeXRlY29kZVRlc3RQRVA0NTEoQmFkQnl0ZWNvZGVUZXN0KToKIAotY2xhc3MgU291cmNlTG9hZGVyQmFkQnl0ZWNvZGVUZXN0KEJhZEJ5dGVjb2RlVGVzdCk6CisgICAgZGVmIGltcG9ydF8oc2VsZiwgZmlsZSwgbW9kdWxlX25hbWUpOgorICAgICAgICBsb2FkZXIgPSBzZWxmLmxvYWRlcihtb2R1bGVfbmFtZSwgZmlsZSkKKyAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZShtb2R1bGVfbmFtZSkKKyAgICAgICAgbW9kdWxlLl9fc3BlY19fID0gc2VsZi51dGlsLnNwZWNfZnJvbV9sb2FkZXIobW9kdWxlX25hbWUsIGxvYWRlcikKKyAgICAgICAgbG9hZGVyLmV4ZWNfbW9kdWxlKG1vZHVsZSkKIAotICAgIGxvYWRlciA9IG1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyCitjbGFzcyBCYWRCeXRlY29kZVRlc3RQRVAzMDIoQmFkQnl0ZWNvZGVUZXN0KToKKworICAgIGRlZiBpbXBvcnRfKHNlbGYsIGZpbGUsIG1vZHVsZV9uYW1lKToKKyAgICAgICAgbG9hZGVyID0gc2VsZi5sb2FkZXIobW9kdWxlX25hbWUsIGZpbGUpCisgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignaWdub3JlJywgRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICAgICAgbW9kdWxlID0gbG9hZGVyLmxvYWRfbW9kdWxlKG1vZHVsZV9uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEluKG1vZHVsZV9uYW1lLCBzeXMubW9kdWxlcykKKworCitjbGFzcyBTb3VyY2VMb2FkZXJCYWRCeXRlY29kZVRlc3Q6CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc2V0VXBDbGFzcyhjbHMpOgorICAgICAgICBjbHMubG9hZGVyID0gY2xzLm1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyCiAKICAgICBAc291cmNlX3V0aWwud3JpdGVzX2J5dGVjb2RlX2ZpbGVzCiAgICAgZGVmIHRlc3RfZW1wdHlfZmlsZShzZWxmKToKQEAgLTMzMyw3ICs0MDgsOCBAQAogICAgICAgICBkZWYgdGVzdChuYW1lLCBtYXBwaW5nLCBieXRlY29kZV9wYXRoKToKICAgICAgICAgICAgIHNlbGYuaW1wb3J0XyhtYXBwaW5nW25hbWVdLCBuYW1lKQogICAgICAgICAgICAgd2l0aCBvcGVuKGJ5dGVjb2RlX3BhdGgsICdyYicpIGFzIGJ5dGVjb2RlX2ZpbGU6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChieXRlY29kZV9maWxlLnJlYWQoNCksIGltcC5nZXRfbWFnaWMoKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ5dGVjb2RlX2ZpbGUucmVhZCg0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudXRpbC5NQUdJQ19OVU1CRVIpCiAKICAgICAgICAgc2VsZi5fdGVzdF9iYWRfbWFnaWModGVzdCkKIApAQCAtMzgzLDEzICs0NTksMTMgQEAKICAgICAgICAgemVyb3MgPSBiJ1x4MDBceDAwXHgwMFx4MDAnCiAgICAgICAgIHdpdGggc291cmNlX3V0aWwuY3JlYXRlX21vZHVsZXMoJ190ZW1wJykgYXMgbWFwcGluZzoKICAgICAgICAgICAgIHB5X2NvbXBpbGUuY29tcGlsZShtYXBwaW5nWydfdGVtcCddKQotICAgICAgICAgICAgYnl0ZWNvZGVfcGF0aCA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShtYXBwaW5nWydfdGVtcCddKQorICAgICAgICAgICAgYnl0ZWNvZGVfcGF0aCA9IHNlbGYudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShtYXBwaW5nWydfdGVtcCddKQogICAgICAgICAgICAgd2l0aCBvcGVuKGJ5dGVjb2RlX3BhdGgsICdyK2InKSBhcyBieXRlY29kZV9maWxlOgogICAgICAgICAgICAgICAgIGJ5dGVjb2RlX2ZpbGUuc2Vlayg0KQogICAgICAgICAgICAgICAgIGJ5dGVjb2RlX2ZpbGUud3JpdGUoemVyb3MpCiAgICAgICAgICAgICBzZWxmLmltcG9ydF8obWFwcGluZ1snX3RlbXAnXSwgJ190ZW1wJykKICAgICAgICAgICAgIHNvdXJjZV9tdGltZSA9IG9zLnBhdGguZ2V0bXRpbWUobWFwcGluZ1snX3RlbXAnXSkKLSAgICAgICAgICAgIHNvdXJjZV90aW1lc3RhbXAgPSBpbXBvcnRsaWIuX3dfbG9uZyhzb3VyY2VfbXRpbWUpCisgICAgICAgICAgICBzb3VyY2VfdGltZXN0YW1wID0gc2VsZi5pbXBvcnRsaWIuX3dfbG9uZyhzb3VyY2VfbXRpbWUpCiAgICAgICAgICAgICB3aXRoIG9wZW4oYnl0ZWNvZGVfcGF0aCwgJ3JiJykgYXMgYnl0ZWNvZGVfZmlsZToKICAgICAgICAgICAgICAgICBieXRlY29kZV9maWxlLnNlZWsoNCkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ5dGVjb2RlX2ZpbGUucmVhZCg0KSwgc291cmNlX3RpbWVzdGFtcCkKQEAgLTQwMSw3ICs0NzcsNyBAQAogICAgICAgICB3aXRoIHNvdXJjZV91dGlsLmNyZWF0ZV9tb2R1bGVzKCdfdGVtcCcpIGFzIG1hcHBpbmc6CiAgICAgICAgICAgICAjIENyZWF0ZSBieXRlY29kZSB0aGF0IHdpbGwgbmVlZCB0byBiZSByZS1jcmVhdGVkLgogICAgICAgICAgICAgcHlfY29tcGlsZS5jb21waWxlKG1hcHBpbmdbJ190ZW1wJ10pCi0gICAgICAgICAgICBieXRlY29kZV9wYXRoID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKG1hcHBpbmdbJ190ZW1wJ10pCisgICAgICAgICAgICBieXRlY29kZV9wYXRoID0gc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKG1hcHBpbmdbJ190ZW1wJ10pCiAgICAgICAgICAgICB3aXRoIG9wZW4oYnl0ZWNvZGVfcGF0aCwgJ3IrYicpIGFzIGJ5dGVjb2RlX2ZpbGU6CiAgICAgICAgICAgICAgICAgYnl0ZWNvZGVfZmlsZS5zZWVrKDApCiAgICAgICAgICAgICAgICAgYnl0ZWNvZGVfZmlsZS53cml0ZShiJ1x4MDBceDAwXHgwMFx4MDAnKQpAQCAtNDA5LDE2ICs0ODUsMzQgQEAKICAgICAgICAgICAgIG9zLmNobW9kKGJ5dGVjb2RlX3BhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LlNfSVJVU1IgfCBzdGF0LlNfSVJHUlAgfCBzdGF0LlNfSVJPVEgpCiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgIyBTaG91bGQgbm90IHJhaXNlIElPRXJyb3IhCisgICAgICAgICAgICAgICAgIyBTaG91bGQgbm90IHJhaXNlIE9TRXJyb3IhCiAgICAgICAgICAgICAgICAgc2VsZi5pbXBvcnRfKG1hcHBpbmdbJ190ZW1wJ10sICdfdGVtcCcpCiAgICAgICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgICAgICMgTWFrZSB3cml0YWJsZSBmb3IgZXZlbnR1YWwgY2xlYW4tdXAuCiAgICAgICAgICAgICAgICAgb3MuY2htb2QoYnl0ZWNvZGVfcGF0aCwgc3RhdC5TX0lXVVNSKQogCitjbGFzcyBTb3VyY2VMb2FkZXJCYWRCeXRlY29kZVRlc3RQRVA0NTEoCisgICAgICAgIFNvdXJjZUxvYWRlckJhZEJ5dGVjb2RlVGVzdCwgQmFkQnl0ZWNvZGVUZXN0UEVQNDUxKToKKyAgICBwYXNzCiAKLWNsYXNzIFNvdXJjZWxlc3NMb2FkZXJCYWRCeXRlY29kZVRlc3QoQmFkQnl0ZWNvZGVUZXN0KToKK0Zyb3plbl9Tb3VyY2VCYWRCeXRlY29kZVBFUDQ1MSwgU291cmNlX1NvdXJjZUJhZEJ5dGVjb2RlUEVQNDUxID0gdXRpbC50ZXN0X2JvdGgoCisgICAgICAgIFNvdXJjZUxvYWRlckJhZEJ5dGVjb2RlVGVzdFBFUDQ1MSwgaW1wb3J0bGliPWltcG9ydGxpYiwgbWFjaGluZXJ5PW1hY2hpbmVyeSwKKyAgICAgICAgYWJjPWltcG9ydGxpYl9hYmMsIHV0aWw9aW1wb3J0bGliX3V0aWwpCiAKLSAgICBsb2FkZXIgPSBtYWNoaW5lcnkuU291cmNlbGVzc0ZpbGVMb2FkZXIKK2NsYXNzIFNvdXJjZUxvYWRlckJhZEJ5dGVjb2RlVGVzdFBFUDMwMigKKyAgICAgICAgU291cmNlTG9hZGVyQmFkQnl0ZWNvZGVUZXN0LCBCYWRCeXRlY29kZVRlc3RQRVAzMDIpOgorICAgIHBhc3MKKworRnJvemVuX1NvdXJjZUJhZEJ5dGVjb2RlUEVQMzAyLCBTb3VyY2VfU291cmNlQmFkQnl0ZWNvZGVQRVAzMDIgPSB1dGlsLnRlc3RfYm90aCgKKyAgICAgICAgU291cmNlTG9hZGVyQmFkQnl0ZWNvZGVUZXN0UEVQMzAyLCBpbXBvcnRsaWI9aW1wb3J0bGliLCBtYWNoaW5lcnk9bWFjaGluZXJ5LAorICAgICAgICBhYmM9aW1wb3J0bGliX2FiYywgdXRpbD1pbXBvcnRsaWJfdXRpbCkKKworCitjbGFzcyBTb3VyY2VsZXNzTG9hZGVyQmFkQnl0ZWNvZGVUZXN0OgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3MoY2xzKToKKyAgICAgICAgY2xzLmxvYWRlciA9IGNscy5tYWNoaW5lcnkuU291cmNlbGVzc0ZpbGVMb2FkZXIKIAogICAgIGRlZiB0ZXN0X2VtcHR5X2ZpbGUoc2VsZik6CiAgICAgICAgIGRlZiB0ZXN0KG5hbWUsIG1hcHBpbmcsIGJ5dGVjb2RlX3BhdGgpOgpAQCAtNDczLDE0ICs1NjcsMjIgQEAKICAgICBkZWYgdGVzdF9ub25fY29kZV9tYXJzaGFsKHNlbGYpOgogICAgICAgICBzZWxmLl90ZXN0X25vbl9jb2RlX21hcnNoYWwoZGVsX3NvdXJjZT1UcnVlKQogCitjbGFzcyBTb3VyY2VsZXNzTG9hZGVyQmFkQnl0ZWNvZGVUZXN0UEVQNDUxKFNvdXJjZWxlc3NMb2FkZXJCYWRCeXRlY29kZVRlc3QsCisgICAgICAgIEJhZEJ5dGVjb2RlVGVzdFBFUDQ1MSk6CisgICAgcGFzcwogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAotICAgIHJ1bl91bml0dGVzdChTaW1wbGVUZXN0LAotICAgICAgICAgICAgICAgICBTb3VyY2VMb2FkZXJCYWRCeXRlY29kZVRlc3QsCi0gICAgICAgICAgICAgICAgIFNvdXJjZWxlc3NMb2FkZXJCYWRCeXRlY29kZVRlc3QKLSAgICAgICAgICAgICAgICApCitGcm96ZW5fU291cmNlbGVzc0JhZEJ5dGVjb2RlUEVQNDUxLCBTb3VyY2VfU291cmNlbGVzc0JhZEJ5dGVjb2RlUEVQNDUxID0gdXRpbC50ZXN0X2JvdGgoCisgICAgICAgIFNvdXJjZWxlc3NMb2FkZXJCYWRCeXRlY29kZVRlc3RQRVA0NTEsIGltcG9ydGxpYj1pbXBvcnRsaWIsCisgICAgICAgIG1hY2hpbmVyeT1tYWNoaW5lcnksIGFiYz1pbXBvcnRsaWJfYWJjLCB1dGlsPWltcG9ydGxpYl91dGlsKQorCitjbGFzcyBTb3VyY2VsZXNzTG9hZGVyQmFkQnl0ZWNvZGVUZXN0UEVQMzAyKFNvdXJjZWxlc3NMb2FkZXJCYWRCeXRlY29kZVRlc3QsCisgICAgICAgIEJhZEJ5dGVjb2RlVGVzdFBFUDMwMik6CisgICAgcGFzcworCitGcm96ZW5fU291cmNlbGVzc0JhZEJ5dGVjb2RlUEVQMzAyLCBTb3VyY2VfU291cmNlbGVzc0JhZEJ5dGVjb2RlUEVQMzAyID0gdXRpbC50ZXN0X2JvdGgoCisgICAgICAgIFNvdXJjZWxlc3NMb2FkZXJCYWRCeXRlY29kZVRlc3RQRVAzMDIsIGltcG9ydGxpYj1pbXBvcnRsaWIsCisgICAgICAgIG1hY2hpbmVyeT1tYWNoaW5lcnksIGFiYz1pbXBvcnRsaWJfYWJjLCB1dGlsPWltcG9ydGxpYl91dGlsKQogCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS90ZXN0X2ZpbmRlci5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS90ZXN0X2ZpbmRlci5weQppbmRleCA4ZTQ5ODY4Li40NzMyOTdiIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9zb3VyY2UvdGVzdF9maW5kZXIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvc291cmNlL3Rlc3RfZmluZGVyLnB5CkBAIC0xLDkgKzEsMTAgQEAKIGZyb20gLi4gaW1wb3J0IGFiYworZnJvbSAuLiBpbXBvcnQgdXRpbAogZnJvbSAuIGltcG9ydCB1dGlsIGFzIHNvdXJjZV91dGlsCiAKLWZyb20gaW1wb3J0bGliIGltcG9ydCBtYWNoaW5lcnkKK21hY2hpbmVyeSA9IHV0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliLm1hY2hpbmVyeScpCisKIGltcG9ydCBlcnJubwotaW1wb3J0IGltcAogaW1wb3J0IG9zCiBpbXBvcnQgcHlfY29tcGlsZQogaW1wb3J0IHN0YXQKQEAgLTM5LDE0ICs0MCwxNSBAQAogICAgICIiIgogCiAgICAgZGVmIGdldF9maW5kZXIoc2VsZiwgcm9vdCk6Ci0gICAgICAgIGxvYWRlcl9kZXRhaWxzID0gWyhtYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWNoaW5lcnkuU09VUkNFX1NVRkZJWEVTKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hY2hpbmVyeS5Tb3VyY2VsZXNzRmlsZUxvYWRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWNoaW5lcnkuQllURUNPREVfU1VGRklYRVMpXQotICAgICAgICByZXR1cm4gbWFjaGluZXJ5LkZpbGVGaW5kZXIocm9vdCwgKmxvYWRlcl9kZXRhaWxzKQorICAgICAgICBsb2FkZXJfZGV0YWlscyA9IFsoc2VsZi5tYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1hY2hpbmVyeS5TT1VSQ0VfU1VGRklYRVMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZi5tYWNoaW5lcnkuU291cmNlbGVzc0ZpbGVMb2FkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYWNoaW5lcnkuQllURUNPREVfU1VGRklYRVMpXQorICAgICAgICByZXR1cm4gc2VsZi5tYWNoaW5lcnkuRmlsZUZpbmRlcihyb290LCAqbG9hZGVyX2RldGFpbHMpCiAKICAgICBkZWYgaW1wb3J0XyhzZWxmLCByb290LCBtb2R1bGUpOgotICAgICAgICByZXR1cm4gc2VsZi5nZXRfZmluZGVyKHJvb3QpLmZpbmRfbW9kdWxlKG1vZHVsZSkKKyAgICAgICAgZmluZGVyID0gc2VsZi5nZXRfZmluZGVyKHJvb3QpCisgICAgICAgIHJldHVybiBzZWxmLl9maW5kKGZpbmRlciwgbW9kdWxlLCBsb2FkZXJfb25seT1UcnVlKQogCiAgICAgZGVmIHJ1bl90ZXN0KHNlbGYsIHRlc3QsIGNyZWF0ZT1Ob25lLCAqLCBjb21waWxlXz1Ob25lLCB1bmxpbms9Tm9uZSk6CiAgICAgICAgICIiIlRlc3QgdGhlIGZpbmRpbmcgb2YgJ3Rlc3QnIHdpdGggdGhlIGNyZWF0aW9uIG9mIG1vZHVsZXMgbGlzdGVkIGluCkBAIC0xMjQsMjAgKzEyNiwyMCBAQAogCiAgICAgZGVmIHRlc3RfZW1wdHlfc3RyaW5nX2Zvcl9kaXIoc2VsZik6CiAgICAgICAgICMgVGhlIGVtcHR5IHN0cmluZyBmcm9tIHN5cy5wYXRoIG1lYW5zIHRvIHNlYXJjaCBpbiB0aGUgY3dkLgotICAgICAgICBmaW5kZXIgPSBtYWNoaW5lcnkuRmlsZUZpbmRlcignJywgKG1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyLAotICAgICAgICAgICAgbWFjaGluZXJ5LlNPVVJDRV9TVUZGSVhFUykpCisgICAgICAgIGZpbmRlciA9IHNlbGYubWFjaGluZXJ5LkZpbGVGaW5kZXIoJycsIChzZWxmLm1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyLAorICAgICAgICAgICAgc2VsZi5tYWNoaW5lcnkuU09VUkNFX1NVRkZJWEVTKSkKICAgICAgICAgd2l0aCBvcGVuKCdtb2QucHknLCAndycpIGFzIGZpbGU6CiAgICAgICAgICAgICBmaWxlLndyaXRlKCIjIHRlc3QgZmlsZSBmb3IgaW1wb3J0bGliIikKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgbG9hZGVyID0gZmluZGVyLmZpbmRfbW9kdWxlKCdtb2QnKQorICAgICAgICAgICAgbG9hZGVyID0gc2VsZi5fZmluZChmaW5kZXIsICdtb2QnLCBsb2FkZXJfb25seT1UcnVlKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIobG9hZGVyLCAnbG9hZF9tb2R1bGUnKSkKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIG9zLnVubGluaygnbW9kLnB5JykKIAogICAgIGRlZiB0ZXN0X2ludmFsaWRhdGVfY2FjaGVzKHNlbGYpOgogICAgICAgICAjIGludmFsaWRhdGVfY2FjaGVzKCkgc2hvdWxkIHJlc2V0IHRoZSBtdGltZS4KLSAgICAgICAgZmluZGVyID0gbWFjaGluZXJ5LkZpbGVGaW5kZXIoJycsIChtYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlciwKLSAgICAgICAgICAgIG1hY2hpbmVyeS5TT1VSQ0VfU1VGRklYRVMpKQorICAgICAgICBmaW5kZXIgPSBzZWxmLm1hY2hpbmVyeS5GaWxlRmluZGVyKCcnLCAoc2VsZi5tYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlciwKKyAgICAgICAgICAgIHNlbGYubWFjaGluZXJ5LlNPVVJDRV9TVUZGSVhFUykpCiAgICAgICAgIGZpbmRlci5fcGF0aF9tdGltZSA9IDQyCiAgICAgICAgIGZpbmRlci5pbnZhbGlkYXRlX2NhY2hlcygpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmluZGVyLl9wYXRoX210aW1lLCAtMSkKQEAgLTE0Nyw4ICsxNDksMTAgQEAKICAgICAgICAgbW9kID0gJ21vZCcKICAgICAgICAgd2l0aCBzb3VyY2VfdXRpbC5jcmVhdGVfbW9kdWxlcyhtb2QpIGFzIG1hcHBpbmc6CiAgICAgICAgICAgICBmaW5kZXIgPSBzZWxmLmdldF9maW5kZXIobWFwcGluZ1snLnJvb3QnXSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKGZpbmRlci5maW5kX21vZHVsZShtb2QpKQotICAgICAgICBzZWxmLmFzc2VydElzTm9uZShmaW5kZXIuZmluZF9tb2R1bGUobW9kKSkKKyAgICAgICAgICAgIGZvdW5kID0gc2VsZi5fZmluZChmaW5kZXIsICdtb2QnLCBsb2FkZXJfb25seT1UcnVlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoZm91bmQpCisgICAgICAgIGZvdW5kID0gc2VsZi5fZmluZChmaW5kZXIsICdtb2QnLCBsb2FkZXJfb25seT1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShmb3VuZCkKIAogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHN5cy5wbGF0Zm9ybSAhPSAnd2luMzInLAogICAgICAgICAgICAgJ29zLmNobW9kKCkgZG9lcyBub3Qgc3VwcG9ydCB0aGUgbmVlZGVkIGFyZ3VtZW50cyB1bmRlciBXaW5kb3dzJykKQEAgLTE3MiwyMCArMTc2LDU3IEBACiAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChjbGVhbnVwLCB0ZW1wZGlyKQogICAgICAgICBvcy5jaG1vZCh0ZW1wZGlyLm5hbWUsIHN0YXQuU19JV1VTUiB8IHN0YXQuU19JWFVTUikKICAgICAgICAgZmluZGVyID0gc2VsZi5nZXRfZmluZGVyKHRlbXBkaXIubmFtZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoTm9uZSwgW10pLCBmaW5kZXIuZmluZF9sb2FkZXIoJ2RvZXNub3RleGlzdCcpKQorICAgICAgICBmb3VuZCA9IHNlbGYuX2ZpbmQoZmluZGVyLCAnZG9lc25vdGV4aXN0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3VuZCwgc2VsZi5OT1RfRk9VTkQpCiAKICAgICBkZWYgdGVzdF9pZ25vcmVfZmlsZShzZWxmKToKICAgICAgICAgIyBJZiBhIGRpcmVjdG9yeSBnb3QgY2hhbmdlZCB0byBhIGZpbGUgZnJvbSB1bmRlcm5lYXRoIHVzLCB0aGVuIGRvbid0CiAgICAgICAgICMgd29ycnkgYWJvdXQgbG9va2luZyBmb3Igc3VibW9kdWxlcy4KICAgICAgICAgd2l0aCB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUoKSBhcyBmaWxlX29iajoKICAgICAgICAgICAgIGZpbmRlciA9IHNlbGYuZ2V0X2ZpbmRlcihmaWxlX29iai5uYW1lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoTm9uZSwgW10pLCBmaW5kZXIuZmluZF9sb2FkZXIoJ2RvZXNub3RleGlzdCcpKQorICAgICAgICAgICAgZm91bmQgPSBzZWxmLl9maW5kKGZpbmRlciwgJ2RvZXNub3RleGlzdCcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvdW5kLCBzZWxmLk5PVF9GT1VORCkKIAogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAotICAgIHJ1bl91bml0dGVzdChGaW5kZXJUZXN0cykKK2NsYXNzIEZpbmRlclRlc3RzUEVQNDUxKEZpbmRlclRlc3RzKToKKworICAgIE5PVF9GT1VORCA9IE5vbmUKKworICAgIGRlZiBfZmluZChzZWxmLCBmaW5kZXIsIG5hbWUsIGxvYWRlcl9vbmx5PUZhbHNlKToKKyAgICAgICAgc3BlYyA9IGZpbmRlci5maW5kX3NwZWMobmFtZSkKKyAgICAgICAgcmV0dXJuIHNwZWMubG9hZGVyIGlmIHNwZWMgaXMgbm90IE5vbmUgZWxzZSBzcGVjCisKK0Zyb3plbl9GaW5kZXJUZXN0c1BFUDQ1MSwgU291cmNlX0ZpbmRlclRlc3RzUEVQNDUxID0gdXRpbC50ZXN0X2JvdGgoCisgICAgICAgIEZpbmRlclRlc3RzUEVQNDUxLCBtYWNoaW5lcnk9bWFjaGluZXJ5KQorCisKK2NsYXNzIEZpbmRlclRlc3RzUEVQNDIwKEZpbmRlclRlc3RzKToKKworICAgIE5PVF9GT1VORCA9IChOb25lLCBbXSkKKworICAgIGRlZiBfZmluZChzZWxmLCBmaW5kZXIsIG5hbWUsIGxvYWRlcl9vbmx5PUZhbHNlKToKKyAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCJpZ25vcmUiLCBEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgICAgICBsb2FkZXJfcG9ydGlvbnMgPSBmaW5kZXIuZmluZF9sb2FkZXIobmFtZSkKKyAgICAgICAgICAgIHJldHVybiBsb2FkZXJfcG9ydGlvbnNbMF0gaWYgbG9hZGVyX29ubHkgZWxzZSBsb2FkZXJfcG9ydGlvbnMKKworRnJvemVuX0ZpbmRlclRlc3RzUEVQNDIwLCBTb3VyY2VfRmluZGVyVGVzdHNQRVA0MjAgPSB1dGlsLnRlc3RfYm90aCgKKyAgICAgICAgRmluZGVyVGVzdHNQRVA0MjAsIG1hY2hpbmVyeT1tYWNoaW5lcnkpCisKKworY2xhc3MgRmluZGVyVGVzdHNQRVAzMDIoRmluZGVyVGVzdHMpOgorCisgICAgTk9UX0ZPVU5EID0gTm9uZQorCisgICAgZGVmIF9maW5kKHNlbGYsIGZpbmRlciwgbmFtZSwgbG9hZGVyX29ubHk9RmFsc2UpOgorICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoImlnbm9yZSIsIERlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgICAgIHJldHVybiBmaW5kZXIuZmluZF9tb2R1bGUobmFtZSkKKworRnJvemVuX0ZpbmRlclRlc3RzUEVQMzAyLCBTb3VyY2VfRmluZGVyVGVzdHNQRVAzMDIgPSB1dGlsLnRlc3RfYm90aCgKKyAgICAgICAgRmluZGVyVGVzdHNQRVAzMDIsIG1hY2hpbmVyeT1tYWNoaW5lcnkpCisKIAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9zb3VyY2UvdGVzdF9wYXRoX2hvb2sucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9zb3VyY2UvdGVzdF9wYXRoX2hvb2sucHkKaW5kZXggNmE3ODc5Mi4uOTJkYTc3MiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvc291cmNlL3Rlc3RfcGF0aF9ob29rLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS90ZXN0X3BhdGhfaG9vay5weQpAQCAtMSwxNyArMSwxOCBAQAorZnJvbSAuLiBpbXBvcnQgdXRpbAogZnJvbSAuIGltcG9ydCB1dGlsIGFzIHNvdXJjZV91dGlsCiAKLWZyb20gaW1wb3J0bGliIGltcG9ydCBtYWNoaW5lcnkKLWltcG9ydCBpbXAKK21hY2hpbmVyeSA9IHV0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliLm1hY2hpbmVyeScpCisKIGltcG9ydCB1bml0dGVzdAogCiAKLWNsYXNzIFBhdGhIb29rVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBQYXRoSG9va1Rlc3Q6CiAKICAgICAiIiJUZXN0IHRoZSBwYXRoIGhvb2sgZm9yIHNvdXJjZS4iIiIKIAogICAgIGRlZiBwYXRoX2hvb2soc2VsZik6Ci0gICAgICAgIHJldHVybiBtYWNoaW5lcnkuRmlsZUZpbmRlci5wYXRoX2hvb2soKG1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyLAotICAgICAgICAgICAgbWFjaGluZXJ5LlNPVVJDRV9TVUZGSVhFUykpCisgICAgICAgIHJldHVybiBzZWxmLm1hY2hpbmVyeS5GaWxlRmluZGVyLnBhdGhfaG9vaygoc2VsZi5tYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlciwKKyAgICAgICAgICAgIHNlbGYubWFjaGluZXJ5LlNPVVJDRV9TVUZGSVhFUykpCiAKICAgICBkZWYgdGVzdF9zdWNjZXNzKHNlbGYpOgogICAgICAgICB3aXRoIHNvdXJjZV91dGlsLmNyZWF0ZV9tb2R1bGVzKCdkdW1teScpIGFzIG1hcHBpbmc6CkBAIC0yMiwxMSArMjMsOCBAQAogICAgICAgICAjIFRoZSBlbXB0eSBzdHJpbmcgcmVwcmVzZW50cyB0aGUgY3dkLgogICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihzZWxmLnBhdGhfaG9vaygpKCcnKSwgJ2ZpbmRfbW9kdWxlJykpCiAKLQotZGVmIHRlc3RfbWFpbigpOgotICAgIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKLSAgICBydW5fdW5pdHRlc3QoUGF0aEhvb2tUZXN0KQorRnJvemVuX1BhdGhIb29rVGVzdCwgU291cmNlX1BhdGhIb29rdGVzdCA9IHV0aWwudGVzdF9ib3RoKFBhdGhIb29rVGVzdCwgbWFjaGluZXJ5PW1hY2hpbmVyeSkKIAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9zb3VyY2UvdGVzdF9zb3VyY2VfZW5jb2RpbmcucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9zb3VyY2UvdGVzdF9zb3VyY2VfZW5jb2RpbmcucHkKaW5kZXggYmEwMmI0NC4uYzYyZGZhMSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvc291cmNlL3Rlc3Rfc291cmNlX2VuY29kaW5nLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS90ZXN0X3NvdXJjZV9lbmNvZGluZy5weQpAQCAtMSwxOSArMSwyNCBAQAorZnJvbSAuLiBpbXBvcnQgdXRpbAogZnJvbSAuIGltcG9ydCB1dGlsIGFzIHNvdXJjZV91dGlsCiAKLWZyb20gaW1wb3J0bGliIGltcG9ydCBfYm9vdHN0cmFwCittYWNoaW5lcnkgPSB1dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYi5tYWNoaW5lcnknKQorCiBpbXBvcnQgY29kZWNzCitpbXBvcnQgaW1wb3J0bGliLnV0aWwKIGltcG9ydCByZQogaW1wb3J0IHN5cworaW1wb3J0IHR5cGVzCiAjIEJlY2F1c2Ugc3lzLnBhdGggZ2V0cyBlc3NlbnRpYWxseSBibGFua2VkLCBuZWVkIHRvIGhhdmUgdW5pY29kZWRhdGEgYWxyZWFkeQogIyBpbXBvcnRlZCBmb3IgdGhlIHBhcnNlciB0byB1c2UuCiBpbXBvcnQgdW5pY29kZWRhdGEKIGltcG9ydCB1bml0dGVzdAoraW1wb3J0IHdhcm5pbmdzCiAKIAogQ09ESU5HX1JFID0gcmUuY29tcGlsZShyJ15bIFx0XGZdKiMuKmNvZGluZ1s6PV1bIFx0XSooWy1cdy5dKyknLCByZS5BU0NJSSkKIAogCi1jbGFzcyBFbmNvZGluZ1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorY2xhc3MgRW5jb2RpbmdUZXN0OgogCiAgICAgIiIiUEVQIDMxMjAgbWFrZXMgVVRGLTggdGhlIGRlZmF1bHQgZW5jb2RpbmcgZm9yIHNvdXJjZSBjb2RlCiAgICAgW2RlZmF1bHQgZW5jb2RpbmddLgpAQCAtMzUsOSArNDAsOSBAQAogICAgICAgICB3aXRoIHNvdXJjZV91dGlsLmNyZWF0ZV9tb2R1bGVzKHNlbGYubW9kdWxlX25hbWUpIGFzIG1hcHBpbmc6CiAgICAgICAgICAgICB3aXRoIG9wZW4obWFwcGluZ1tzZWxmLm1vZHVsZV9uYW1lXSwgJ3diJykgYXMgZmlsZToKICAgICAgICAgICAgICAgICBmaWxlLndyaXRlKHNvdXJjZSkKLSAgICAgICAgICAgIGxvYWRlciA9IF9ib290c3RyYXAuU291cmNlRmlsZUxvYWRlcihzZWxmLm1vZHVsZV9uYW1lLAorICAgICAgICAgICAgbG9hZGVyID0gc2VsZi5tYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcihzZWxmLm1vZHVsZV9uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nW3NlbGYubW9kdWxlX25hbWVdKQotICAgICAgICAgICAgcmV0dXJuIGxvYWRlci5sb2FkX21vZHVsZShzZWxmLm1vZHVsZV9uYW1lKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYubG9hZChsb2FkZXIpCiAKICAgICBkZWYgY3JlYXRlX3NvdXJjZShzZWxmLCBlbmNvZGluZyk6CiAgICAgICAgIGVuY29kaW5nX2xpbmUgPSAiIyBjb2Rpbmc9ezB9Ii5mb3JtYXQoZW5jb2RpbmcpCkBAIC04NCw4ICs4OSwyOSBAQAogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yKToKICAgICAgICAgICAgIHNlbGYucnVuX3Rlc3Qoc291cmNlKQogCitjbGFzcyBFbmNvZGluZ1Rlc3RQRVA0NTEoRW5jb2RpbmdUZXN0KToKIAotY2xhc3MgTGluZUVuZGluZ1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBsb2FkKHNlbGYsIGxvYWRlcik6CisgICAgICAgIG1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUoc2VsZi5tb2R1bGVfbmFtZSkKKyAgICAgICAgbW9kdWxlLl9fc3BlY19fID0gaW1wb3J0bGliLnV0aWwuc3BlY19mcm9tX2xvYWRlcihzZWxmLm1vZHVsZV9uYW1lLCBsb2FkZXIpCisgICAgICAgIGxvYWRlci5leGVjX21vZHVsZShtb2R1bGUpCisgICAgICAgIHJldHVybiBtb2R1bGUKKworRnJvemVuX0VuY29kaW5nVGVzdFBFUDQ1MSwgU291cmNlX0VuY29kaW5nVGVzdFBFUDQ1MSA9IHV0aWwudGVzdF9ib3RoKAorICAgICAgICBFbmNvZGluZ1Rlc3RQRVA0NTEsIG1hY2hpbmVyeT1tYWNoaW5lcnkpCisKK2NsYXNzIEVuY29kaW5nVGVzdFBFUDMwMihFbmNvZGluZ1Rlc3QpOgorCisgICAgZGVmIGxvYWQoc2VsZiwgbG9hZGVyKToKKyAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdpZ25vcmUnLCBEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgICAgICByZXR1cm4gbG9hZGVyLmxvYWRfbW9kdWxlKHNlbGYubW9kdWxlX25hbWUpCisKK0Zyb3plbl9FbmNvZGluZ1Rlc3RQRVAzMDIsIFNvdXJjZV9FbmNvZGluZ1Rlc3RQRVAzMDIgPSB1dGlsLnRlc3RfYm90aCgKKyAgICAgICAgRW5jb2RpbmdUZXN0UEVQMzAyLCBtYWNoaW5lcnk9bWFjaGluZXJ5KQorCisKK2NsYXNzIExpbmVFbmRpbmdUZXN0OgogCiAgICAgciIiIlNvdXJjZSB3cml0dGVuIHdpdGggdGhlIHRocmVlIHR5cGVzIG9mIGxpbmUgZW5kaW5ncyAoXG4sIFxyXG4sIFxyKQogICAgIG5lZWQgdG8gYmUgcmVhZGFibGUgW2NyXVtjcmxmXVtsZl0uIiIiCkBAIC05Nyw5ICsxMjMsOSBAQAogICAgICAgICB3aXRoIHNvdXJjZV91dGlsLmNyZWF0ZV9tb2R1bGVzKG1vZHVsZV9uYW1lKSBhcyBtYXBwaW5nOgogICAgICAgICAgICAgd2l0aCBvcGVuKG1hcHBpbmdbbW9kdWxlX25hbWVdLCAnd2InKSBhcyBmaWxlOgogICAgICAgICAgICAgICAgIGZpbGUud3JpdGUoc291cmNlKQotICAgICAgICAgICAgbG9hZGVyID0gX2Jvb3RzdHJhcC5Tb3VyY2VGaWxlTG9hZGVyKG1vZHVsZV9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdbbW9kdWxlX25hbWVdKQotICAgICAgICAgICAgcmV0dXJuIGxvYWRlci5sb2FkX21vZHVsZShtb2R1bGVfbmFtZSkKKyAgICAgICAgICAgIGxvYWRlciA9IHNlbGYubWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIobW9kdWxlX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdbbW9kdWxlX25hbWVdKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYubG9hZChsb2FkZXIsIG1vZHVsZV9uYW1lKQogCiAgICAgIyBbY3JdCiAgICAgZGVmIHRlc3RfY3Ioc2VsZik6CkBAIC0xMTMsMTEgKzEzOSwyNyBAQAogICAgIGRlZiB0ZXN0X2xmKHNlbGYpOgogICAgICAgICBzZWxmLnJ1bl90ZXN0KGInXG4nKQogCitjbGFzcyBMaW5lRW5kaW5nVGVzdFBFUDQ1MShMaW5lRW5kaW5nVGVzdCk6CiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0Ci0gICAgcnVuX3VuaXR0ZXN0KEVuY29kaW5nVGVzdCwgTGluZUVuZGluZ1Rlc3QpCisgICAgZGVmIGxvYWQoc2VsZiwgbG9hZGVyLCBtb2R1bGVfbmFtZSk6CisgICAgICAgIG1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUobW9kdWxlX25hbWUpCisgICAgICAgIG1vZHVsZS5fX3NwZWNfXyA9IGltcG9ydGxpYi51dGlsLnNwZWNfZnJvbV9sb2FkZXIobW9kdWxlX25hbWUsIGxvYWRlcikKKyAgICAgICAgbG9hZGVyLmV4ZWNfbW9kdWxlKG1vZHVsZSkKKyAgICAgICAgcmV0dXJuIG1vZHVsZQorCitGcm96ZW5fTGluZUVuZGluZ1Rlc3RQRVA0NTEsIFNvdXJjZV9MaW5lRW5kaW5nVGVzdFBFUDQ1MSA9IHV0aWwudGVzdF9ib3RoKAorICAgICAgICBMaW5lRW5kaW5nVGVzdFBFUDQ1MSwgbWFjaGluZXJ5PW1hY2hpbmVyeSkKKworY2xhc3MgTGluZUVuZGluZ1Rlc3RQRVAzMDIoTGluZUVuZGluZ1Rlc3QpOgorCisgICAgZGVmIGxvYWQoc2VsZiwgbG9hZGVyLCBtb2R1bGVfbmFtZSk6CisgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignaWdub3JlJywgRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICAgICAgcmV0dXJuIGxvYWRlci5sb2FkX21vZHVsZShtb2R1bGVfbmFtZSkKKworRnJvemVuX0xpbmVFbmRpbmdUZXN0UEVQMzAyLCBTb3VyY2VfTGluZUVuZGluZ1Rlc3RQRVAzMDIgPSB1dGlsLnRlc3RfYm90aCgKKyAgICAgICAgTGluZUVuZGluZ1Rlc3RQRVAzMDIsIG1hY2hpbmVyeT1tYWNoaW5lcnkpCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvc291cmNlL3V0aWwucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9zb3VyY2UvdXRpbC5weQppbmRleCBhZTY1NjYzLi42M2NkMjVhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9zb3VyY2UvdXRpbC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9zb3VyY2UvdXRpbC5weQpAQCAtMiw3ICsyLDYgQEAKIGltcG9ydCBjb250ZXh0bGliCiBpbXBvcnQgZXJybm8KIGltcG9ydCBmdW5jdG9vbHMKLWltcG9ydCBpbXAKIGltcG9ydCBvcwogaW1wb3J0IG9zLnBhdGgKIGltcG9ydCBzeXMKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3Rlc3RfYWJjLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvdGVzdF9hYmMucHkKaW5kZXggYzYyMGMzNy4uYTFmOGU3NiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvdGVzdF9hYmMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvdGVzdF9hYmMucHkKQEAgLTEsOSArMSwyMyBAQAotZnJvbSBpbXBvcnRsaWIgaW1wb3J0IGFiYwotZnJvbSBpbXBvcnRsaWIgaW1wb3J0IG1hY2hpbmVyeQoraW1wb3J0IGNvbnRleHRsaWIKIGltcG9ydCBpbnNwZWN0CitpbXBvcnQgaW8KK2ltcG9ydCBtYXJzaGFsCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAoraW1wb3J0IHR5cGVzCiBpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdW5pdHRlc3QgaW1wb3J0IG1vY2sKK2ltcG9ydCB3YXJuaW5ncwogCitmcm9tIC4gaW1wb3J0IHV0aWwKIAorZnJvemVuX2luaXQsIHNvdXJjZV9pbml0ID0gdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWInKQorZnJvemVuX2FiYywgc291cmNlX2FiYyA9IHV0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliLmFiYycpCittYWNoaW5lcnkgPSB1dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYi5tYWNoaW5lcnknKQorZnJvemVuX3V0aWwsIHNvdXJjZV91dGlsID0gdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWIudXRpbCcpCisKKyMjIyMjIEluaGVyaXRhbmNlICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiBjbGFzcyBJbmhlcml0YW5jZVRlc3RzOgogCiAgICAgIiIiVGVzdCB0aGF0IHRoZSBzcGVjaWZpZWQgY2xhc3MgaXMgYSBzdWJjbGFzcy9zdXBlcmNsYXNzIG9mIHRoZSBleHBlY3RlZApAQCAtMTQsOCArMjgsMTkgQEAKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgogICAgICAgICBzdXBlcigpLl9faW5pdF9fKCphcmdzLCAqKmt3YXJncykKKyAgICAgICAgc2VsZi5zdXBlcmNsYXNzZXMgPSBbZ2V0YXR0cihzZWxmLmFiYywgY2xhc3NfbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGNsYXNzX25hbWUgaW4gc2VsZi5zdXBlcmNsYXNzX25hbWVzXQorICAgICAgICBpZiBoYXNhdHRyKHNlbGYsICdzdWJjbGFzc19uYW1lcycpOgorICAgICAgICAgICAgIyBCZWNhdXNlIHRlc3Quc3VwcG9ydC5pbXBvcnRfZnJlc2hfbW9kdWxlKCkgY3JlYXRlcyBhIG5ldworICAgICAgICAgICAgIyBpbXBvcnRsaWIuX2Jvb3RzdHJhcCBwZXIgbW9kdWxlLCBpbmhlcml0YW5jZSBjaGVja3MgZmFpbCB3aGVuCisgICAgICAgICAgICAjIGNoZWNraW5nIGFjcm9zcyBtb2R1bGUgYm91bmRhcmllcyAoaS5lLiB0aGUgX2Jvb3RzdHJhcCBpbiBhYmMgaXMKKyAgICAgICAgICAgICMgbm90IHRoZSBzYW1lIGFzIHRoZSBvbmUgaW4gbWFjaGluZXJ5KS4gVGhhdCBtZWFucyBzdGVhbGluZyBvbmUgb2YKKyAgICAgICAgICAgICMgdGhlIG1vZHVsZXMgZnJvbSB0aGUgb3RoZXIgdG8gbWFrZSBzdXJlIHRoZSBzYW1lIGluc3RhbmNlIGlzIHVzZWQuCisgICAgICAgICAgICBzZWxmLnN1YmNsYXNzZXMgPSBbZ2V0YXR0cihzZWxmLmFiYy5tYWNoaW5lcnksIGNsYXNzX25hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBjbGFzc19uYW1lIGluIHNlbGYuc3ViY2xhc3NfbmFtZXNdCiAgICAgICAgIGFzc2VydCBzZWxmLnN1YmNsYXNzZXMgb3Igc2VsZi5zdXBlcmNsYXNzZXMsIHNlbGYuX19jbGFzc19fCi0gICAgICAgIHNlbGYuX190ZXN0ID0gZ2V0YXR0cihhYmMsIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fKQorICAgICAgICB0ZXN0aW5nID0gc2VsZi5fX2NsYXNzX18uX19uYW1lX18ucGFydGl0aW9uKCdfJylbMl0KKyAgICAgICAgc2VsZi5fX3Rlc3QgPSBnZXRhdHRyKHNlbGYuYWJjLCB0ZXN0aW5nKQogCiAgICAgZGVmIHRlc3Rfc3ViY2xhc3NlcyhzZWxmKToKICAgICAgICAgIyBUZXN0IHRoYXQgdGhlIGV4cGVjdGVkIHN1YmNsYXNzZXMgaW5oZXJpdC4KQEAgLTI5LDc1ICs1NCw4OTggQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKHNlbGYuX190ZXN0LCBzdXBlcmNsYXNzKSwKICAgICAgICAgICAgICAgICJ7MH0gaXMgbm90IGEgc3VwZXJjbGFzcyBvZiB7MX0iLmZvcm1hdChzdXBlcmNsYXNzLCBzZWxmLl9fdGVzdCkpCiAKK2RlZiBjcmVhdGVfaW5oZXJpdGFuY2VfdGVzdHMoYmFzZV9jbGFzcyk6CisgICAgZGVmIHNldF9mcm96ZW4obnMpOgorICAgICAgICBuc1snYWJjJ10gPSBmcm96ZW5fYWJjCisgICAgZGVmIHNldF9zb3VyY2UobnMpOgorICAgICAgICBuc1snYWJjJ10gPSBzb3VyY2VfYWJjCiAKLWNsYXNzIE1ldGFQYXRoRmluZGVyKEluaGVyaXRhbmNlVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICAgIHN1cGVyY2xhc3NlcyA9IFthYmMuRmluZGVyXQotICAgIHN1YmNsYXNzZXMgPSBbbWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlciwgbWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLAotICAgICAgICAgICAgICAgICAgICBtYWNoaW5lcnkuUGF0aEZpbmRlciwgbWFjaGluZXJ5LldpbmRvd3NSZWdpc3RyeUZpbmRlcl0KLQotCi1jbGFzcyBQYXRoRW50cnlGaW5kZXIoSW5oZXJpdGFuY2VUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgc3VwZXJjbGFzc2VzID0gW2FiYy5GaW5kZXJdCi0gICAgc3ViY2xhc3NlcyA9IFttYWNoaW5lcnkuRmlsZUZpbmRlcl0KLQotCi1jbGFzcyBMb2FkZXIoSW5oZXJpdGFuY2VUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgc3ViY2xhc3NlcyA9IFthYmMuUHlMb2FkZXJdCi0KLQotY2xhc3MgUmVzb3VyY2VMb2FkZXIoSW5oZXJpdGFuY2VUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgc3VwZXJjbGFzc2VzID0gW2FiYy5Mb2FkZXJdCi0KLQotY2xhc3MgSW5zcGVjdExvYWRlcihJbmhlcml0YW5jZVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICBzdXBlcmNsYXNzZXMgPSBbYWJjLkxvYWRlcl0KLSAgICBzdWJjbGFzc2VzID0gW2FiYy5QeUxvYWRlciwgbWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlciwKLSAgICAgICAgICAgICAgICAgICAgbWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLCBtYWNoaW5lcnkuRXh0ZW5zaW9uRmlsZUxvYWRlcl0KLQotCi1jbGFzcyBFeGVjdXRpb25Mb2FkZXIoSW5oZXJpdGFuY2VUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgc3VwZXJjbGFzc2VzID0gW2FiYy5JbnNwZWN0TG9hZGVyXQotICAgIHN1YmNsYXNzZXMgPSBbYWJjLlB5TG9hZGVyXQotCi0KLWNsYXNzIEZpbGVMb2FkZXIoSW5oZXJpdGFuY2VUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgc3VwZXJjbGFzc2VzID0gW2FiYy5SZXNvdXJjZUxvYWRlciwgYWJjLkV4ZWN1dGlvbkxvYWRlcl0KLSAgICBzdWJjbGFzc2VzID0gW21hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyLCBtYWNoaW5lcnkuU291cmNlbGVzc0ZpbGVMb2FkZXJdCi0KLQotY2xhc3MgU291cmNlTG9hZGVyKEluaGVyaXRhbmNlVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICAgIHN1cGVyY2xhc3NlcyA9IFthYmMuUmVzb3VyY2VMb2FkZXIsIGFiYy5FeGVjdXRpb25Mb2FkZXJdCi0gICAgc3ViY2xhc3NlcyA9IFttYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcl0KLQotCi1jbGFzcyBQeUxvYWRlcihJbmhlcml0YW5jZVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICBzdXBlcmNsYXNzZXMgPSBbYWJjLkxvYWRlciwgYWJjLlJlc291cmNlTG9hZGVyLCBhYmMuRXhlY3V0aW9uTG9hZGVyXQotCi0KLWNsYXNzIFB5UHljTG9hZGVyKEluaGVyaXRhbmNlVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICAgIHN1cGVyY2xhc3NlcyA9IFthYmMuUHlMb2FkZXJdCi0KLQotZGVmIHRlc3RfbWFpbigpOgotICAgIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKICAgICBjbGFzc2VzID0gW10KLSAgICBmb3IgY2xhc3NfIGluIGdsb2JhbHMoKS52YWx1ZXMoKToKLSAgICAgICAgaWYgKGluc3BlY3QuaXNjbGFzcyhjbGFzc18pIGFuZAotICAgICAgICAgICAgICAgIGlzc3ViY2xhc3MoY2xhc3NfLCB1bml0dGVzdC5UZXN0Q2FzZSkgYW5kCi0gICAgICAgICAgICAgICAgaXNzdWJjbGFzcyhjbGFzc18sIEluaGVyaXRhbmNlVGVzdHMpKToKLSAgICAgICAgICAgIGNsYXNzZXMuYXBwZW5kKGNsYXNzXykKLSAgICBydW5fdW5pdHRlc3QoKmNsYXNzZXMpCisgICAgZm9yIHByZWZpeCwgbnNfc2V0IGluIFsoJ0Zyb3plbicsIHNldF9mcm96ZW4pLCAoJ1NvdXJjZScsIHNldF9zb3VyY2UpXToKKyAgICAgICAgY2xhc3Nlcy5hcHBlbmQodHlwZXMubmV3X2NsYXNzKCdfJy5qb2luKFtwcmVmaXgsIGJhc2VfY2xhc3MuX19uYW1lX19dKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChiYXNlX2NsYXNzLCB1bml0dGVzdC5UZXN0Q2FzZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjX2JvZHk9bnNfc2V0KSkKKyAgICByZXR1cm4gY2xhc3NlcworCisKK2NsYXNzIE1ldGFQYXRoRmluZGVyKEluaGVyaXRhbmNlVGVzdHMpOgorICAgIHN1cGVyY2xhc3NfbmFtZXMgPSBbJ0ZpbmRlciddCisgICAgc3ViY2xhc3NfbmFtZXMgPSBbJ0J1aWx0aW5JbXBvcnRlcicsICdGcm96ZW5JbXBvcnRlcicsICdQYXRoRmluZGVyJywKKyAgICAgICAgICAgICAgICAgICAgICAnV2luZG93c1JlZ2lzdHJ5RmluZGVyJ10KKwordGVzdHMgPSBjcmVhdGVfaW5oZXJpdGFuY2VfdGVzdHMoTWV0YVBhdGhGaW5kZXIpCitGcm96ZW5fTWV0YVBhdGhGaW5kZXJJbmhlcml0YW5jZVRlc3RzLCBTb3VyY2VfTWV0YVBhdGhGaW5kZXJJbmhlcml0YW5jZVRlc3RzID0gdGVzdHMKKworCitjbGFzcyBQYXRoRW50cnlGaW5kZXIoSW5oZXJpdGFuY2VUZXN0cyk6CisgICAgc3VwZXJjbGFzc19uYW1lcyA9IFsnRmluZGVyJ10KKyAgICBzdWJjbGFzc19uYW1lcyA9IFsnRmlsZUZpbmRlciddCisKK3Rlc3RzID0gY3JlYXRlX2luaGVyaXRhbmNlX3Rlc3RzKFBhdGhFbnRyeUZpbmRlcikKK0Zyb3plbl9QYXRoRW50cnlGaW5kZXJJbmhlcml0YW5jZVRlc3RzLCBTb3VyY2VfUGF0aEVudHJ5RmluZGVySW5oZXJpdGFuY2VUZXN0cyA9IHRlc3RzCisKKworY2xhc3MgUmVzb3VyY2VMb2FkZXIoSW5oZXJpdGFuY2VUZXN0cyk6CisgICAgc3VwZXJjbGFzc19uYW1lcyA9IFsnTG9hZGVyJ10KKwordGVzdHMgPSBjcmVhdGVfaW5oZXJpdGFuY2VfdGVzdHMoUmVzb3VyY2VMb2FkZXIpCitGcm96ZW5fUmVzb3VyY2VMb2FkZXJJbmhlcml0YW5jZVRlc3RzLCBTb3VyY2VfUmVzb3VyY2VMb2FkZXJJbmhlcml0YW5jZVRlc3RzID0gdGVzdHMKKworCitjbGFzcyBJbnNwZWN0TG9hZGVyKEluaGVyaXRhbmNlVGVzdHMpOgorICAgIHN1cGVyY2xhc3NfbmFtZXMgPSBbJ0xvYWRlciddCisgICAgc3ViY2xhc3NfbmFtZXMgPSBbJ0J1aWx0aW5JbXBvcnRlcicsICdGcm96ZW5JbXBvcnRlcicsICdFeHRlbnNpb25GaWxlTG9hZGVyJ10KKwordGVzdHMgPSBjcmVhdGVfaW5oZXJpdGFuY2VfdGVzdHMoSW5zcGVjdExvYWRlcikKK0Zyb3plbl9JbnNwZWN0TG9hZGVySW5oZXJpdGFuY2VUZXN0cywgU291cmNlX0luc3BlY3RMb2FkZXJJbmhlcml0YW5jZVRlc3RzID0gdGVzdHMKKworCitjbGFzcyBFeGVjdXRpb25Mb2FkZXIoSW5oZXJpdGFuY2VUZXN0cyk6CisgICAgc3VwZXJjbGFzc19uYW1lcyA9IFsnSW5zcGVjdExvYWRlciddCisgICAgc3ViY2xhc3NfbmFtZXMgPSBbJ0V4dGVuc2lvbkZpbGVMb2FkZXInXQorCit0ZXN0cyA9IGNyZWF0ZV9pbmhlcml0YW5jZV90ZXN0cyhFeGVjdXRpb25Mb2FkZXIpCitGcm96ZW5fRXhlY3V0aW9uTG9hZGVySW5oZXJpdGFuY2VUZXN0cywgU291cmNlX0V4ZWN1dGlvbkxvYWRlckluaGVyaXRhbmNlVGVzdHMgPSB0ZXN0cworCisKK2NsYXNzIEZpbGVMb2FkZXIoSW5oZXJpdGFuY2VUZXN0cyk6CisgICAgc3VwZXJjbGFzc19uYW1lcyA9IFsnUmVzb3VyY2VMb2FkZXInLCAnRXhlY3V0aW9uTG9hZGVyJ10KKyAgICBzdWJjbGFzc19uYW1lcyA9IFsnU291cmNlRmlsZUxvYWRlcicsICdTb3VyY2VsZXNzRmlsZUxvYWRlciddCisKK3Rlc3RzID0gY3JlYXRlX2luaGVyaXRhbmNlX3Rlc3RzKEZpbGVMb2FkZXIpCitGcm96ZW5fRmlsZUxvYWRlckluaGVyaXRhbmNlVGVzdHMsIFNvdXJjZV9GaWxlTG9hZGVySW5oZXJpdGFuY2VUZXN0cyA9IHRlc3RzCisKKworY2xhc3MgU291cmNlTG9hZGVyKEluaGVyaXRhbmNlVGVzdHMpOgorICAgIHN1cGVyY2xhc3NfbmFtZXMgPSBbJ1Jlc291cmNlTG9hZGVyJywgJ0V4ZWN1dGlvbkxvYWRlciddCisgICAgc3ViY2xhc3NfbmFtZXMgPSBbJ1NvdXJjZUZpbGVMb2FkZXInXQorCit0ZXN0cyA9IGNyZWF0ZV9pbmhlcml0YW5jZV90ZXN0cyhTb3VyY2VMb2FkZXIpCitGcm96ZW5fU291cmNlTG9hZGVySW5oZXJpdGFuY2VUZXN0cywgU291cmNlX1NvdXJjZUxvYWRlckluaGVyaXRhbmNlVGVzdHMgPSB0ZXN0cworCisjIyMjIyBEZWZhdWx0IHJldHVybiB2YWx1ZXMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworZGVmIG1ha2VfYWJjX3N1YmNsYXNzZXMoYmFzZV9jbGFzcyk6CisgICAgY2xhc3NlcyA9IFtdCisgICAgZm9yIGtpbmQsIGFiYyBpbiBbKCdGcm96ZW4nLCBmcm96ZW5fYWJjKSwgKCdTb3VyY2UnLCBzb3VyY2VfYWJjKV06CisgICAgICAgIG5hbWUgPSAnXycuam9pbihba2luZCwgYmFzZV9jbGFzcy5fX25hbWVfX10pCisgICAgICAgIGJhc2VfY2xhc3NlcyA9IGJhc2VfY2xhc3MsIGdldGF0dHIoYWJjLCBiYXNlX2NsYXNzLl9fbmFtZV9fKQorICAgICAgICBjbGFzc2VzLmFwcGVuZCh0eXBlcy5uZXdfY2xhc3MobmFtZSwgYmFzZV9jbGFzc2VzKSkKKyAgICByZXR1cm4gY2xhc3NlcworCitkZWYgbWFrZV9yZXR1cm5fdmFsdWVfdGVzdHMoYmFzZV9jbGFzcywgdGVzdF9jbGFzcyk6CisgICAgZnJvemVuX2NsYXNzLCBzb3VyY2VfY2xhc3MgPSBtYWtlX2FiY19zdWJjbGFzc2VzKGJhc2VfY2xhc3MpCisgICAgdGVzdHMgPSBbXQorICAgIGZvciBwcmVmaXgsIGNsYXNzX2luX3Rlc3QgaW4gWygnRnJvemVuJywgZnJvemVuX2NsYXNzKSwgKCdTb3VyY2UnLCBzb3VyY2VfY2xhc3MpXToKKyAgICAgICAgZGVmIHNldF9ucyhucyk6CisgICAgICAgICAgICBuc1snaW5zJ10gPSBjbGFzc19pbl90ZXN0KCkKKyAgICAgICAgdGVzdHMuYXBwZW5kKHR5cGVzLm5ld19jbGFzcygnXycuam9pbihbcHJlZml4LCB0ZXN0X2NsYXNzLl9fbmFtZV9fXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRlc3RfY2xhc3MsIHVuaXR0ZXN0LlRlc3RDYXNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjX2JvZHk9c2V0X25zKSkKKyAgICByZXR1cm4gdGVzdHMKKworCitjbGFzcyBNZXRhUGF0aEZpbmRlcjoKKworICAgIGRlZiBmaW5kX21vZHVsZShzZWxmLCBmdWxsbmFtZSwgcGF0aCk6CisgICAgICAgIHJldHVybiBzdXBlcigpLmZpbmRfbW9kdWxlKGZ1bGxuYW1lLCBwYXRoKQorCitGcm96ZW5fTVBGLCBTb3VyY2VfTVBGID0gbWFrZV9hYmNfc3ViY2xhc3NlcyhNZXRhUGF0aEZpbmRlcikKKworCitjbGFzcyBNZXRhUGF0aEZpbmRlckRlZmF1bHRzVGVzdHM6CisKKyAgICBkZWYgdGVzdF9maW5kX21vZHVsZShzZWxmKToKKyAgICAgICAgIyBEZWZhdWx0IHNob3VsZCByZXR1cm4gTm9uZS4KKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc2VsZi5pbnMuZmluZF9tb2R1bGUoJ3NvbWV0aGluZycsIE5vbmUpKQorCisgICAgZGVmIHRlc3RfaW52YWxpZGF0ZV9jYWNoZXMoc2VsZik6CisgICAgICAgICMgQ2FsbGluZyB0aGUgbWV0aG9kIGlzIGEgbm8tb3AuCisgICAgICAgIHNlbGYuaW5zLmludmFsaWRhdGVfY2FjaGVzKCkKKworCit0ZXN0cyA9IG1ha2VfcmV0dXJuX3ZhbHVlX3Rlc3RzKE1ldGFQYXRoRmluZGVyLCBNZXRhUGF0aEZpbmRlckRlZmF1bHRzVGVzdHMpCitGcm96ZW5fTVBGRGVmYXVsdFRlc3RzLCBTb3VyY2VfTVBGRGVmYXVsdFRlc3RzID0gdGVzdHMKKworCitjbGFzcyBQYXRoRW50cnlGaW5kZXI6CisKKyAgICBkZWYgZmluZF9sb2FkZXIoc2VsZiwgZnVsbG5hbWUpOgorICAgICAgICByZXR1cm4gc3VwZXIoKS5maW5kX2xvYWRlcihmdWxsbmFtZSkKKworRnJvemVuX1BFRiwgU291cmNlX1BFRiA9IG1ha2VfYWJjX3N1YmNsYXNzZXMoUGF0aEVudHJ5RmluZGVyKQorCisKK2NsYXNzIFBhdGhFbnRyeUZpbmRlckRlZmF1bHRzVGVzdHM6CisKKyAgICBkZWYgdGVzdF9maW5kX2xvYWRlcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoTm9uZSwgW10pLCBzZWxmLmlucy5maW5kX2xvYWRlcignc29tZXRoaW5nJykpCisKKyAgICBkZWYgZmluZF9tb2R1bGUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgc2VsZi5pbnMuZmluZF9tb2R1bGUoJ3NvbWV0aGluZycpKQorCisgICAgZGVmIHRlc3RfaW52YWxpZGF0ZV9jYWNoZXMoc2VsZik6CisgICAgICAgICMgU2hvdWxkIGJlIGEgbm8tb3AuCisgICAgICAgIHNlbGYuaW5zLmludmFsaWRhdGVfY2FjaGVzKCkKKworCit0ZXN0cyA9IG1ha2VfcmV0dXJuX3ZhbHVlX3Rlc3RzKFBhdGhFbnRyeUZpbmRlciwgUGF0aEVudHJ5RmluZGVyRGVmYXVsdHNUZXN0cykKK0Zyb3plbl9QRUZEZWZhdWx0VGVzdHMsIFNvdXJjZV9QRUZEZWZhdWx0VGVzdHMgPSB0ZXN0cworCisKK2NsYXNzIExvYWRlcjoKKworICAgIGRlZiBsb2FkX21vZHVsZShzZWxmLCBmdWxsbmFtZSk6CisgICAgICAgIHJldHVybiBzdXBlcigpLmxvYWRfbW9kdWxlKGZ1bGxuYW1lKQorCisKK0Zyb3plbl9MLCBTb3VyY2VfTCA9IG1ha2VfYWJjX3N1YmNsYXNzZXMoTG9hZGVyKQorCisKK2NsYXNzIExvYWRlckRlZmF1bHRzVGVzdHM6CisKKyAgICBkZWYgdGVzdF9sb2FkX21vZHVsZShzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcik6CisgICAgICAgICAgICBzZWxmLmlucy5sb2FkX21vZHVsZSgnc29tZXRoaW5nJykKKworICAgIGRlZiB0ZXN0X21vZHVsZV9yZXByKHNlbGYpOgorICAgICAgICBtb2QgPSB0eXBlcy5Nb2R1bGVUeXBlKCdibGFoJykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yKToKKyAgICAgICAgICAgIHNlbGYuaW5zLm1vZHVsZV9yZXByKG1vZCkKKyAgICAgICAgb3JpZ2luYWxfcmVwciA9IHJlcHIobW9kKQorICAgICAgICBtb2QuX19sb2FkZXJfXyA9IHNlbGYuaW5zCisgICAgICAgICMgU2hvdWxkIHN0aWxsIHJldHVybiBhIHByb3BlciByZXByLgorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVwcihtb2QpKQorCisKK3Rlc3RzID0gbWFrZV9yZXR1cm5fdmFsdWVfdGVzdHMoTG9hZGVyLCBMb2FkZXJEZWZhdWx0c1Rlc3RzKQorRnJvemVuX0xEZWZhdWx0VGVzdHMsIFNvdXJjZUxEZWZhdWx0VGVzdHMgPSB0ZXN0cworCisKK2NsYXNzIFJlc291cmNlTG9hZGVyKExvYWRlcik6CisKKyAgICBkZWYgZ2V0X2RhdGEoc2VsZiwgcGF0aCk6CisgICAgICAgIHJldHVybiBzdXBlcigpLmdldF9kYXRhKHBhdGgpCisKKworRnJvemVuX1JMLCBTb3VyY2VfUkwgPSBtYWtlX2FiY19zdWJjbGFzc2VzKFJlc291cmNlTG9hZGVyKQorCisKK2NsYXNzIFJlc291cmNlTG9hZGVyRGVmYXVsdHNUZXN0czoKKworICAgIGRlZiB0ZXN0X2dldF9kYXRhKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5pbnMuZ2V0X2RhdGEoJy9zb21lL3BhdGgnKQorCisKK3Rlc3RzID0gbWFrZV9yZXR1cm5fdmFsdWVfdGVzdHMoUmVzb3VyY2VMb2FkZXIsIFJlc291cmNlTG9hZGVyRGVmYXVsdHNUZXN0cykKK0Zyb3plbl9STERlZmF1bHRUZXN0cywgU291cmNlX1JMRGVmYXVsdFRlc3RzID0gdGVzdHMKKworCitjbGFzcyBJbnNwZWN0TG9hZGVyKExvYWRlcik6CisKKyAgICBkZWYgaXNfcGFja2FnZShzZWxmLCBmdWxsbmFtZSk6CisgICAgICAgIHJldHVybiBzdXBlcigpLmlzX3BhY2thZ2UoZnVsbG5hbWUpCisKKyAgICBkZWYgZ2V0X3NvdXJjZShzZWxmLCBmdWxsbmFtZSk6CisgICAgICAgIHJldHVybiBzdXBlcigpLmdldF9zb3VyY2UoZnVsbG5hbWUpCisKKworRnJvemVuX0lMLCBTb3VyY2VfSUwgPSBtYWtlX2FiY19zdWJjbGFzc2VzKEluc3BlY3RMb2FkZXIpCisKKworY2xhc3MgSW5zcGVjdExvYWRlckRlZmF1bHRzVGVzdHM6CisKKyAgICBkZWYgdGVzdF9pc19wYWNrYWdlKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKToKKyAgICAgICAgICAgIHNlbGYuaW5zLmlzX3BhY2thZ2UoJ2JsYWgnKQorCisgICAgZGVmIHRlc3RfZ2V0X3NvdXJjZShzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcik6CisgICAgICAgICAgICBzZWxmLmlucy5nZXRfc291cmNlKCdibGFoJykKKworCit0ZXN0cyA9IG1ha2VfcmV0dXJuX3ZhbHVlX3Rlc3RzKEluc3BlY3RMb2FkZXIsIEluc3BlY3RMb2FkZXJEZWZhdWx0c1Rlc3RzKQorRnJvemVuX0lMRGVmYXVsdFRlc3RzLCBTb3VyY2VfSUxEZWZhdWx0VGVzdHMgPSB0ZXN0cworCisKK2NsYXNzIEV4ZWN1dGlvbkxvYWRlcihJbnNwZWN0TG9hZGVyKToKKworICAgIGRlZiBnZXRfZmlsZW5hbWUoc2VsZiwgZnVsbG5hbWUpOgorICAgICAgICByZXR1cm4gc3VwZXIoKS5nZXRfZmlsZW5hbWUoZnVsbG5hbWUpCisKK0Zyb3plbl9FTCwgU291cmNlX0VMID0gbWFrZV9hYmNfc3ViY2xhc3NlcyhFeGVjdXRpb25Mb2FkZXIpCisKKworY2xhc3MgRXhlY3V0aW9uTG9hZGVyRGVmYXVsdHNUZXN0czoKKworICAgIGRlZiB0ZXN0X2dldF9maWxlbmFtZShzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcik6CisgICAgICAgICAgICBzZWxmLmlucy5nZXRfZmlsZW5hbWUoJ2JsYWgnKQorCisKK3Rlc3RzID0gbWFrZV9yZXR1cm5fdmFsdWVfdGVzdHMoRXhlY3V0aW9uTG9hZGVyLCBJbnNwZWN0TG9hZGVyRGVmYXVsdHNUZXN0cykKK0Zyb3plbl9FTERlZmF1bHRUZXN0cywgU291cmNlX0VMRGVmYXVsdHNUZXN0cyA9IHRlc3RzCisKKyMjIyMjIE1ldGFQYXRoRmluZGVyIGNvbmNyZXRlIG1ldGhvZHMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2NsYXNzIE1ldGFQYXRoRmluZGVyRmluZE1vZHVsZVRlc3RzOgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGZpbmRlcihjbHMsIHNwZWMpOgorICAgICAgICBjbGFzcyBNZXRhUGF0aFNwZWNGaW5kZXIoY2xzLmFiYy5NZXRhUGF0aEZpbmRlcik6CisKKyAgICAgICAgICAgIGRlZiBmaW5kX3NwZWMoc2VsZiwgZnVsbG5hbWUsIHBhdGgsIHRhcmdldD1Ob25lKToKKyAgICAgICAgICAgICAgICBzZWxmLmNhbGxlZF9mb3IgPSBmdWxsbmFtZSwgcGF0aAorICAgICAgICAgICAgICAgIHJldHVybiBzcGVjCisKKyAgICAgICAgcmV0dXJuIE1ldGFQYXRoU3BlY0ZpbmRlcigpCisKKyAgICBkZWYgdGVzdF9ub19zcGVjKHNlbGYpOgorICAgICAgICBmaW5kZXIgPSBzZWxmLmZpbmRlcihOb25lKQorICAgICAgICBwYXRoID0gWydhJywgJ2InLCAnYyddCisgICAgICAgIG5hbWUgPSAnYmxhaCcKKyAgICAgICAgZm91bmQgPSBmaW5kZXIuZmluZF9tb2R1bGUobmFtZSwgcGF0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZm91bmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmFtZSwgZmluZGVyLmNhbGxlZF9mb3JbMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGF0aCwgZmluZGVyLmNhbGxlZF9mb3JbMV0pCisKKyAgICBkZWYgdGVzdF9zcGVjKHNlbGYpOgorICAgICAgICBsb2FkZXIgPSBvYmplY3QoKQorICAgICAgICBzcGVjID0gc2VsZi51dGlsLnNwZWNfZnJvbV9sb2FkZXIoJ2JsYWgnLCBsb2FkZXIpCisgICAgICAgIGZpbmRlciA9IHNlbGYuZmluZGVyKHNwZWMpCisgICAgICAgIGZvdW5kID0gZmluZGVyLmZpbmRfbW9kdWxlKCdibGFoJywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhmb3VuZCwgc3BlYy5sb2FkZXIpCisKKworRnJvemVuX01QRkZpbmRNb2R1bGVUZXN0cywgU291cmNlX01QRkZpbmRNb2R1bGVUZXN0cyA9IHV0aWwudGVzdF9ib3RoKAorICAgICAgICBNZXRhUGF0aEZpbmRlckZpbmRNb2R1bGVUZXN0cywKKyAgICAgICAgYWJjPShmcm96ZW5fYWJjLCBzb3VyY2VfYWJjKSwKKyAgICAgICAgdXRpbD0oZnJvemVuX3V0aWwsIHNvdXJjZV91dGlsKSkKKworIyMjIyMgUGF0aEVudHJ5RmluZGVyIGNvbmNyZXRlIG1ldGhvZHMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworY2xhc3MgUGF0aEVudHJ5RmluZGVyRmluZExvYWRlclRlc3RzOgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGZpbmRlcihjbHMsIHNwZWMpOgorICAgICAgICBjbGFzcyBQYXRoRW50cnlTcGVjRmluZGVyKGNscy5hYmMuUGF0aEVudHJ5RmluZGVyKToKKworICAgICAgICAgICAgZGVmIGZpbmRfc3BlYyhzZWxmLCBmdWxsbmFtZSwgdGFyZ2V0PU5vbmUpOgorICAgICAgICAgICAgICAgIHNlbGYuY2FsbGVkX2ZvciA9IGZ1bGxuYW1lCisgICAgICAgICAgICAgICAgcmV0dXJuIHNwZWMKKworICAgICAgICByZXR1cm4gUGF0aEVudHJ5U3BlY0ZpbmRlcigpCisKKyAgICBkZWYgdGVzdF9ub19zcGVjKHNlbGYpOgorICAgICAgICBmaW5kZXIgPSBzZWxmLmZpbmRlcihOb25lKQorICAgICAgICBuYW1lID0gJ2JsYWgnCisgICAgICAgIGZvdW5kID0gZmluZGVyLmZpbmRfbG9hZGVyKG5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGZvdW5kWzBdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtdLCBmb3VuZFsxXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuYW1lLCBmaW5kZXIuY2FsbGVkX2ZvcikKKworICAgIGRlZiB0ZXN0X3NwZWNfd2l0aF9sb2FkZXIoc2VsZik6CisgICAgICAgIGxvYWRlciA9IG9iamVjdCgpCisgICAgICAgIHNwZWMgPSBzZWxmLnV0aWwuc3BlY19mcm9tX2xvYWRlcignYmxhaCcsIGxvYWRlcikKKyAgICAgICAgZmluZGVyID0gc2VsZi5maW5kZXIoc3BlYykKKyAgICAgICAgZm91bmQgPSBmaW5kZXIuZmluZF9sb2FkZXIoJ2JsYWgnKQorICAgICAgICBzZWxmLmFzc2VydElzKGZvdW5kWzBdLCBzcGVjLmxvYWRlcikKKworICAgIGRlZiB0ZXN0X3NwZWNfd2l0aF9wb3J0aW9ucyhzZWxmKToKKyAgICAgICAgc3BlYyA9IHNlbGYubWFjaGluZXJ5Lk1vZHVsZVNwZWMoJ2JsYWgnLCBOb25lKQorICAgICAgICBwYXRocyA9IFsnYScsICdiJywgJ2MnXQorICAgICAgICBzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zID0gcGF0aHMKKyAgICAgICAgZmluZGVyID0gc2VsZi5maW5kZXIoc3BlYykKKyAgICAgICAgZm91bmQgPSBmaW5kZXIuZmluZF9sb2FkZXIoJ2JsYWgnKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShmb3VuZFswXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXRocywgZm91bmRbMV0pCisKKworRnJvemVuX1BFRkZpbmRMb2FkZXJUZXN0cywgU291cmNlX1BFRkZpbmRMb2FkZXJUZXN0cyA9IHV0aWwudGVzdF9ib3RoKAorICAgICAgICBQYXRoRW50cnlGaW5kZXJGaW5kTG9hZGVyVGVzdHMsCisgICAgICAgIGFiYz0oZnJvemVuX2FiYywgc291cmNlX2FiYyksCisgICAgICAgIG1hY2hpbmVyeT1tYWNoaW5lcnksCisgICAgICAgIHV0aWw9KGZyb3plbl91dGlsLCBzb3VyY2VfdXRpbCkpCisKKworIyMjIyMgTG9hZGVyIGNvbmNyZXRlIG1ldGhvZHMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK2NsYXNzIExvYWRlckxvYWRNb2R1bGVUZXN0czoKKworICAgIGRlZiBsb2FkZXIoc2VsZik6CisgICAgICAgIGNsYXNzIFNwZWNMb2FkZXIoc2VsZi5hYmMuTG9hZGVyKToKKyAgICAgICAgICAgIGZvdW5kID0gTm9uZQorICAgICAgICAgICAgZGVmIGV4ZWNfbW9kdWxlKHNlbGYsIG1vZHVsZSk6CisgICAgICAgICAgICAgICAgc2VsZi5mb3VuZCA9IG1vZHVsZQorCisgICAgICAgICAgICBkZWYgaXNfcGFja2FnZShzZWxmLCBmdWxsbmFtZSk6CisgICAgICAgICAgICAgICAgIiIiRm9yY2Ugc29tZSBub24tZGVmYXVsdCBtb2R1bGUgc3RhdGUgdG8gYmUgc2V0LiIiIgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgcmV0dXJuIFNwZWNMb2FkZXIoKQorCisgICAgZGVmIHRlc3RfZnJlc2goc2VsZik6CisgICAgICAgIGxvYWRlciA9IHNlbGYubG9hZGVyKCkKKyAgICAgICAgbmFtZSA9ICdibGFoJworICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKToKKyAgICAgICAgICAgIGxvYWRlci5sb2FkX21vZHVsZShuYW1lKQorICAgICAgICAgICAgbW9kdWxlID0gbG9hZGVyLmZvdW5kCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHN5cy5tb2R1bGVzW25hbWVdLCBtb2R1bGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVyLCBtb2R1bGUuX19sb2FkZXJfXykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZXIsIG1vZHVsZS5fX3NwZWNfXy5sb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmFtZSwgbW9kdWxlLl9fbmFtZV9fKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5hbWUsIG1vZHVsZS5fX3NwZWNfXy5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShtb2R1bGUuX19wYXRoX18pCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKG1vZHVsZS5fX3BhdGhfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLl9fc3BlY19fLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zKQorCisgICAgZGVmIHRlc3RfcmVsb2FkKHNlbGYpOgorICAgICAgICBuYW1lID0gJ2JsYWgnCisgICAgICAgIGxvYWRlciA9IHNlbGYubG9hZGVyKCkKKyAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZShuYW1lKQorICAgICAgICBtb2R1bGUuX19zcGVjX18gPSBzZWxmLnV0aWwuc3BlY19mcm9tX2xvYWRlcihuYW1lLCBsb2FkZXIpCisgICAgICAgIG1vZHVsZS5fX2xvYWRlcl9fID0gbG9hZGVyCisgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpOgorICAgICAgICAgICAgc3lzLm1vZHVsZXNbbmFtZV0gPSBtb2R1bGUKKyAgICAgICAgICAgIGxvYWRlci5sb2FkX21vZHVsZShuYW1lKQorICAgICAgICAgICAgZm91bmQgPSBsb2FkZXIuZm91bmQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoZm91bmQsIHN5cy5tb2R1bGVzW25hbWVdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhtb2R1bGUsIHN5cy5tb2R1bGVzW25hbWVdKQorCisKK0Zyb3plbl9Mb2FkZXJMb2FkTW9kdWxlVGVzdHMsIFNvdXJjZV9Mb2FkZXJMb2FkTW9kdWxlVGVzdHMgPSB1dGlsLnRlc3RfYm90aCgKKyAgICAgICAgTG9hZGVyTG9hZE1vZHVsZVRlc3RzLAorICAgICAgICBhYmM9KGZyb3plbl9hYmMsIHNvdXJjZV9hYmMpLAorICAgICAgICB1dGlsPShmcm96ZW5fdXRpbCwgc291cmNlX3V0aWwpKQorCisKKyMjIyMjIEluc3BlY3RMb2FkZXIgY29uY3JldGUgbWV0aG9kcyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitjbGFzcyBJbnNwZWN0TG9hZGVyU291cmNlVG9Db2RlVGVzdHM6CisKKyAgICBkZWYgc291cmNlX3RvX21vZHVsZShzZWxmLCBkYXRhLCBwYXRoPU5vbmUpOgorICAgICAgICAiIiJIZWxwIHdpdGggc291cmNlX3RvX2NvZGUoKSB0ZXN0cy4iIiIKKyAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZSgnYmxhaCcpCisgICAgICAgIGxvYWRlciA9IHNlbGYuSW5zcGVjdExvYWRlclN1YmNsYXNzKCkKKyAgICAgICAgaWYgcGF0aCBpcyBOb25lOgorICAgICAgICAgICAgY29kZSA9IGxvYWRlci5zb3VyY2VfdG9fY29kZShkYXRhKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY29kZSA9IGxvYWRlci5zb3VyY2VfdG9fY29kZShkYXRhLCBwYXRoKQorICAgICAgICBleGVjKGNvZGUsIG1vZHVsZS5fX2RpY3RfXykKKyAgICAgICAgcmV0dXJuIG1vZHVsZQorCisgICAgZGVmIHRlc3Rfc291cmNlX3RvX2NvZGVfc291cmNlKHNlbGYpOgorICAgICAgICAjIFNpbmNlIGNvbXBpbGUoKSBjYW4gaGFuZGxlIHN0cmluZ3MsIHNvIHNob3VsZCBzb3VyY2VfdG9fY29kZSgpLgorICAgICAgICBzb3VyY2UgPSAnYXR0ciA9IDQyJworICAgICAgICBtb2R1bGUgPSBzZWxmLnNvdXJjZV90b19tb2R1bGUoc291cmNlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihtb2R1bGUsICdhdHRyJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLmF0dHIsIDQyKQorCisgICAgZGVmIHRlc3Rfc291cmNlX3RvX2NvZGVfYnl0ZXMoc2VsZik6CisgICAgICAgICMgU2luY2UgY29tcGlsZSgpIGNhbiBoYW5kbGUgYnl0ZXMsIHNvIHNob3VsZCBzb3VyY2VfdG9fY29kZSgpLgorICAgICAgICBzb3VyY2UgPSBiJ2F0dHIgPSA0MicKKyAgICAgICAgbW9kdWxlID0gc2VsZi5zb3VyY2VfdG9fbW9kdWxlKHNvdXJjZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIobW9kdWxlLCAnYXR0cicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5hdHRyLCA0MikKKworICAgIGRlZiB0ZXN0X3NvdXJjZV90b19jb2RlX3BhdGgoc2VsZik6CisgICAgICAgICMgU3BlY2lmeWluZyBhIHBhdGggc2hvdWxkIHNldCBpdCBmb3IgdGhlIGNvZGUgb2JqZWN0LgorICAgICAgICBwYXRoID0gJ3BhdGgvdG8vc29tZXdoZXJlJworICAgICAgICBsb2FkZXIgPSBzZWxmLkluc3BlY3RMb2FkZXJTdWJjbGFzcygpCisgICAgICAgIGNvZGUgPSBsb2FkZXIuc291cmNlX3RvX2NvZGUoJycsIHBhdGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29kZS5jb19maWxlbmFtZSwgcGF0aCkKKworICAgIGRlZiB0ZXN0X3NvdXJjZV90b19jb2RlX25vX3BhdGgoc2VsZik6CisgICAgICAgICMgTm90IHNldHRpbmcgYSBwYXRoIHNob3VsZCBzdGlsbCB3b3JrIGFuZCBiZSBzZXQgdG8gPHN0cmluZz4gc2luY2UgdGhhdAorICAgICAgICAjIGlzIGEgcHJlLWV4aXN0aW5nIHByYWN0aWNlIGFzIGEgZGVmYXVsdCB0byBjb21waWxlKCkuCisgICAgICAgIGxvYWRlciA9IHNlbGYuSW5zcGVjdExvYWRlclN1YmNsYXNzKCkKKyAgICAgICAgY29kZSA9IGxvYWRlci5zb3VyY2VfdG9fY29kZSgnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb2RlLmNvX2ZpbGVuYW1lLCAnPHN0cmluZz4nKQorCisKK2NsYXNzIEZyb3plbl9JTFNvdXJjZVRvQ29kZVRlc3RzKEluc3BlY3RMb2FkZXJTb3VyY2VUb0NvZGVUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIEluc3BlY3RMb2FkZXJTdWJjbGFzcyA9IEZyb3plbl9JTAorCitjbGFzcyBTb3VyY2VfSUxTb3VyY2VUb0NvZGVUZXN0cyhJbnNwZWN0TG9hZGVyU291cmNlVG9Db2RlVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBJbnNwZWN0TG9hZGVyU3ViY2xhc3MgPSBTb3VyY2VfSUwKKworCitjbGFzcyBJbnNwZWN0TG9hZGVyR2V0Q29kZVRlc3RzOgorCisgICAgZGVmIHRlc3RfZ2V0X2NvZGUoc2VsZik6CisgICAgICAgICMgVGVzdCBzdWNjZXNzLgorICAgICAgICBtb2R1bGUgPSB0eXBlcy5Nb2R1bGVUeXBlKCdibGFoJykKKyAgICAgICAgd2l0aCBtb2NrLnBhdGNoLm9iamVjdChzZWxmLkluc3BlY3RMb2FkZXJTdWJjbGFzcywgJ2dldF9zb3VyY2UnKSBhcyBtb2NrZWQ6CisgICAgICAgICAgICBtb2NrZWQucmV0dXJuX3ZhbHVlID0gJ2F0dHIgPSA0MicKKyAgICAgICAgICAgIGxvYWRlciA9IHNlbGYuSW5zcGVjdExvYWRlclN1YmNsYXNzKCkKKyAgICAgICAgICAgIGNvZGUgPSBsb2FkZXIuZ2V0X2NvZGUoJ2JsYWgnKQorICAgICAgICBleGVjKGNvZGUsIG1vZHVsZS5fX2RpY3RfXykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuYXR0ciwgNDIpCisKKyAgICBkZWYgdGVzdF9nZXRfY29kZV9zb3VyY2VfaXNfTm9uZShzZWxmKToKKyAgICAgICAgIyBJZiBnZXRfc291cmNlKCkgaXMgTm9uZSB0aGVuIHRoaXMgc2hvdWxkIGJlIE5vbmUuCisgICAgICAgIHdpdGggbW9jay5wYXRjaC5vYmplY3Qoc2VsZi5JbnNwZWN0TG9hZGVyU3ViY2xhc3MsICdnZXRfc291cmNlJykgYXMgbW9ja2VkOgorICAgICAgICAgICAgbW9ja2VkLnJldHVybl92YWx1ZSA9IE5vbmUKKyAgICAgICAgICAgIGxvYWRlciA9IHNlbGYuSW5zcGVjdExvYWRlclN1YmNsYXNzKCkKKyAgICAgICAgICAgIGNvZGUgPSBsb2FkZXIuZ2V0X2NvZGUoJ2JsYWgnKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShjb2RlKQorCisgICAgZGVmIHRlc3RfZ2V0X2NvZGVfc291cmNlX25vdF9mb3VuZChzZWxmKToKKyAgICAgICAgIyBJZiB0aGVyZSBpcyBubyBzb3VyY2UgdGhlbiB0aGVyZSBpcyBubyBjb2RlIG9iamVjdC4KKyAgICAgICAgbG9hZGVyID0gc2VsZi5JbnNwZWN0TG9hZGVyU3ViY2xhc3MoKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKToKKyAgICAgICAgICAgIGxvYWRlci5nZXRfY29kZSgnYmxhaCcpCisKKworY2xhc3MgRnJvemVuX0lMR2V0Q29kZVRlc3RzKEluc3BlY3RMb2FkZXJHZXRDb2RlVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBJbnNwZWN0TG9hZGVyU3ViY2xhc3MgPSBGcm96ZW5fSUwKKworY2xhc3MgU291cmNlX0lMR2V0Q29kZVRlc3RzKEluc3BlY3RMb2FkZXJHZXRDb2RlVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBJbnNwZWN0TG9hZGVyU3ViY2xhc3MgPSBTb3VyY2VfSUwKKworCitjbGFzcyBJbnNwZWN0TG9hZGVyTG9hZE1vZHVsZVRlc3RzOgorCisgICAgIiIiVGVzdCBJbnNwZWN0TG9hZGVyLmxvYWRfbW9kdWxlKCkuIiIiCisKKyAgICBtb2R1bGVfbmFtZSA9ICdibGFoJworCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzdXBwb3J0LnVubG9hZChzZWxmLm1vZHVsZV9uYW1lKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoc3VwcG9ydC51bmxvYWQsIHNlbGYubW9kdWxlX25hbWUpCisKKyAgICBkZWYgbW9ja19nZXRfY29kZShzZWxmKToKKyAgICAgICAgcmV0dXJuIG1vY2sucGF0Y2gub2JqZWN0KHNlbGYuSW5zcGVjdExvYWRlclN1YmNsYXNzLCAnZ2V0X2NvZGUnKQorCisgICAgZGVmIHRlc3RfZ2V0X2NvZGVfSW1wb3J0RXJyb3Ioc2VsZik6CisgICAgICAgICMgSWYgZ2V0X2NvZGUoKSByYWlzZXMgSW1wb3J0RXJyb3IsIGl0IHNob3VsZCBwcm9wYWdhdGUuCisgICAgICAgIHdpdGggc2VsZi5tb2NrX2dldF9jb2RlKCkgYXMgbW9ja2VkX2dldF9jb2RlOgorICAgICAgICAgICAgbW9ja2VkX2dldF9jb2RlLnNpZGVfZWZmZWN0ID0gSW1wb3J0RXJyb3IKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpOgorICAgICAgICAgICAgICAgIGxvYWRlciA9IHNlbGYuSW5zcGVjdExvYWRlclN1YmNsYXNzKCkKKyAgICAgICAgICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignaWdub3JlJywgRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICAgICAgICAgICAgICBsb2FkZXIubG9hZF9tb2R1bGUoc2VsZi5tb2R1bGVfbmFtZSkKKworICAgIGRlZiB0ZXN0X2dldF9jb2RlX05vbmUoc2VsZik6CisgICAgICAgICMgSWYgZ2V0X2NvZGUoKSByZXR1cm5zIE5vbmUsIHJhaXNlIEltcG9ydEVycm9yLgorICAgICAgICB3aXRoIHNlbGYubW9ja19nZXRfY29kZSgpIGFzIG1vY2tlZF9nZXRfY29kZToKKyAgICAgICAgICAgIG1vY2tlZF9nZXRfY29kZS5yZXR1cm5fdmFsdWUgPSBOb25lCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKToKKyAgICAgICAgICAgICAgICBsb2FkZXIgPSBzZWxmLkluc3BlY3RMb2FkZXJTdWJjbGFzcygpCisgICAgICAgICAgICAgICAgbG9hZGVyLmxvYWRfbW9kdWxlKHNlbGYubW9kdWxlX25hbWUpCisKKyAgICBkZWYgdGVzdF9tb2R1bGVfcmV0dXJuZWQoc2VsZik6CisgICAgICAgICMgVGhlIGxvYWRlZCBtb2R1bGUgc2hvdWxkIGJlIHJldHVybmVkLgorICAgICAgICBjb2RlID0gY29tcGlsZSgnYXR0ciA9IDQyJywgJzxzdHJpbmc+JywgJ2V4ZWMnKQorICAgICAgICB3aXRoIHNlbGYubW9ja19nZXRfY29kZSgpIGFzIG1vY2tlZF9nZXRfY29kZToKKyAgICAgICAgICAgIG1vY2tlZF9nZXRfY29kZS5yZXR1cm5fdmFsdWUgPSBjb2RlCisgICAgICAgICAgICBsb2FkZXIgPSBzZWxmLkluc3BlY3RMb2FkZXJTdWJjbGFzcygpCisgICAgICAgICAgICBtb2R1bGUgPSBsb2FkZXIubG9hZF9tb2R1bGUoc2VsZi5tb2R1bGVfbmFtZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLCBzeXMubW9kdWxlc1tzZWxmLm1vZHVsZV9uYW1lXSkKKworCitjbGFzcyBGcm96ZW5fSUxMb2FkTW9kdWxlVGVzdHMoSW5zcGVjdExvYWRlckxvYWRNb2R1bGVUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIEluc3BlY3RMb2FkZXJTdWJjbGFzcyA9IEZyb3plbl9JTAorCitjbGFzcyBTb3VyY2VfSUxMb2FkTW9kdWxlVGVzdHMoSW5zcGVjdExvYWRlckxvYWRNb2R1bGVUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIEluc3BlY3RMb2FkZXJTdWJjbGFzcyA9IFNvdXJjZV9JTAorCisKKyMjIyMjIEV4ZWN1dGlvbkxvYWRlciBjb25jcmV0ZSBtZXRob2RzICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitjbGFzcyBFeGVjdXRpb25Mb2FkZXJHZXRDb2RlVGVzdHM6CisKKyAgICBkZWYgbW9ja19tZXRob2RzKHNlbGYsICosIGdldF9zb3VyY2U9RmFsc2UsIGdldF9maWxlbmFtZT1GYWxzZSk6CisgICAgICAgIHNvdXJjZV9tb2NrX2NvbnRleHQsIGZpbGVuYW1lX21vY2tfY29udGV4dCA9IE5vbmUsIE5vbmUKKyAgICAgICAgaWYgZ2V0X3NvdXJjZToKKyAgICAgICAgICAgIHNvdXJjZV9tb2NrX2NvbnRleHQgPSBtb2NrLnBhdGNoLm9iamVjdChzZWxmLkV4ZWN1dGlvbkxvYWRlclN1YmNsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdnZXRfc291cmNlJykKKyAgICAgICAgaWYgZ2V0X2ZpbGVuYW1lOgorICAgICAgICAgICAgZmlsZW5hbWVfbW9ja19jb250ZXh0ID0gbW9jay5wYXRjaC5vYmplY3Qoc2VsZi5FeGVjdXRpb25Mb2FkZXJTdWJjbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdnZXRfZmlsZW5hbWUnKQorICAgICAgICByZXR1cm4gc291cmNlX21vY2tfY29udGV4dCwgZmlsZW5hbWVfbW9ja19jb250ZXh0CisKKyAgICBkZWYgdGVzdF9nZXRfY29kZShzZWxmKToKKyAgICAgICAgcGF0aCA9ICdibGFoLnB5JworICAgICAgICBzb3VyY2VfbW9ja19jb250ZXh0LCBmaWxlbmFtZV9tb2NrX2NvbnRleHQgPSBzZWxmLm1vY2tfbWV0aG9kcygKKyAgICAgICAgICAgICAgICBnZXRfc291cmNlPVRydWUsIGdldF9maWxlbmFtZT1UcnVlKQorICAgICAgICB3aXRoIHNvdXJjZV9tb2NrX2NvbnRleHQgYXMgc291cmNlX21vY2ssIGZpbGVuYW1lX21vY2tfY29udGV4dCBhcyBuYW1lX21vY2s6CisgICAgICAgICAgICBzb3VyY2VfbW9jay5yZXR1cm5fdmFsdWUgPSAnYXR0ciA9IDQyJworICAgICAgICAgICAgbmFtZV9tb2NrLnJldHVybl92YWx1ZSA9IHBhdGgKKyAgICAgICAgICAgIGxvYWRlciA9IHNlbGYuRXhlY3V0aW9uTG9hZGVyU3ViY2xhc3MoKQorICAgICAgICAgICAgY29kZSA9IGxvYWRlci5nZXRfY29kZSgnYmxhaCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29kZS5jb19maWxlbmFtZSwgcGF0aCkKKyAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZSgnYmxhaCcpCisgICAgICAgIGV4ZWMoY29kZSwgbW9kdWxlLl9fZGljdF9fKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5hdHRyLCA0MikKKworICAgIGRlZiB0ZXN0X2dldF9jb2RlX3NvdXJjZV9pc19Ob25lKHNlbGYpOgorICAgICAgICAjIElmIGdldF9zb3VyY2UoKSBpcyBOb25lIHRoZW4gdGhpcyBzaG91bGQgYmUgTm9uZS4KKyAgICAgICAgc291cmNlX21vY2tfY29udGV4dCwgXyA9IHNlbGYubW9ja19tZXRob2RzKGdldF9zb3VyY2U9VHJ1ZSkKKyAgICAgICAgd2l0aCBzb3VyY2VfbW9ja19jb250ZXh0IGFzIG1vY2tlZDoKKyAgICAgICAgICAgIG1vY2tlZC5yZXR1cm5fdmFsdWUgPSBOb25lCisgICAgICAgICAgICBsb2FkZXIgPSBzZWxmLkV4ZWN1dGlvbkxvYWRlclN1YmNsYXNzKCkKKyAgICAgICAgICAgIGNvZGUgPSBsb2FkZXIuZ2V0X2NvZGUoJ2JsYWgnKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShjb2RlKQorCisgICAgZGVmIHRlc3RfZ2V0X2NvZGVfc291cmNlX25vdF9mb3VuZChzZWxmKToKKyAgICAgICAgIyBJZiB0aGVyZSBpcyBubyBzb3VyY2UgdGhlbiB0aGVyZSBpcyBubyBjb2RlIG9iamVjdC4KKyAgICAgICAgbG9hZGVyID0gc2VsZi5FeGVjdXRpb25Mb2FkZXJTdWJjbGFzcygpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpOgorICAgICAgICAgICAgbG9hZGVyLmdldF9jb2RlKCdibGFoJykKKworICAgIGRlZiB0ZXN0X2dldF9jb2RlX25vX3BhdGgoc2VsZik6CisgICAgICAgICMgSWYgZ2V0X2ZpbGVuYW1lKCkgcmFpc2VzIEltcG9ydEVycm9yIHRoZW4gc2ltcGx5IHNraXAgc2V0dGluZyB0aGUgcGF0aAorICAgICAgICAjIG9uIHRoZSBjb2RlIG9iamVjdC4KKyAgICAgICAgc291cmNlX21vY2tfY29udGV4dCwgZmlsZW5hbWVfbW9ja19jb250ZXh0ID0gc2VsZi5tb2NrX21ldGhvZHMoCisgICAgICAgICAgICAgICAgZ2V0X3NvdXJjZT1UcnVlLCBnZXRfZmlsZW5hbWU9VHJ1ZSkKKyAgICAgICAgd2l0aCBzb3VyY2VfbW9ja19jb250ZXh0IGFzIHNvdXJjZV9tb2NrLCBmaWxlbmFtZV9tb2NrX2NvbnRleHQgYXMgbmFtZV9tb2NrOgorICAgICAgICAgICAgc291cmNlX21vY2sucmV0dXJuX3ZhbHVlID0gJ2F0dHIgPSA0MicKKyAgICAgICAgICAgIG5hbWVfbW9jay5zaWRlX2VmZmVjdCA9IEltcG9ydEVycm9yCisgICAgICAgICAgICBsb2FkZXIgPSBzZWxmLkV4ZWN1dGlvbkxvYWRlclN1YmNsYXNzKCkKKyAgICAgICAgICAgIGNvZGUgPSBsb2FkZXIuZ2V0X2NvZGUoJ2JsYWgnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvZGUuY29fZmlsZW5hbWUsICc8c3RyaW5nPicpCisgICAgICAgIG1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUoJ2JsYWgnKQorICAgICAgICBleGVjKGNvZGUsIG1vZHVsZS5fX2RpY3RfXykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuYXR0ciwgNDIpCisKKworY2xhc3MgRnJvemVuX0VMR2V0Q29kZVRlc3RzKEV4ZWN1dGlvbkxvYWRlckdldENvZGVUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIEV4ZWN1dGlvbkxvYWRlclN1YmNsYXNzID0gRnJvemVuX0VMCisKK2NsYXNzIFNvdXJjZV9FTEdldENvZGVUZXN0cyhFeGVjdXRpb25Mb2FkZXJHZXRDb2RlVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBFeGVjdXRpb25Mb2FkZXJTdWJjbGFzcyA9IFNvdXJjZV9FTAorCisKKyMjIyMjIFNvdXJjZUxvYWRlciBjb25jcmV0ZSBtZXRob2RzICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitjbGFzcyBTb3VyY2VMb2FkZXI6CisKKyAgICAjIEdsb2JhbHMgdGhhdCBzaG91bGQgYmUgZGVmaW5lZCBmb3IgYWxsIG1vZHVsZXMuCisgICAgc291cmNlID0gKGIiXyA9ICc6Oicuam9pbihbX19uYW1lX18sIF9fZmlsZV9fLCBfX2NhY2hlZF9fLCBfX3BhY2thZ2VfXywgIgorICAgICAgICAgICAgICBiInJlcHIoX19sb2FkZXJfXyldKSIpCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcGF0aCk6CisgICAgICAgIHNlbGYucGF0aCA9IHBhdGgKKworICAgIGRlZiBnZXRfZGF0YShzZWxmLCBwYXRoKToKKyAgICAgICAgaWYgcGF0aCAhPSBzZWxmLnBhdGg6CisgICAgICAgICAgICByYWlzZSBJT0Vycm9yCisgICAgICAgIHJldHVybiBzZWxmLnNvdXJjZQorCisgICAgZGVmIGdldF9maWxlbmFtZShzZWxmLCBmdWxsbmFtZSk6CisgICAgICAgIHJldHVybiBzZWxmLnBhdGgKKworICAgIGRlZiBtb2R1bGVfcmVwcihzZWxmLCBtb2R1bGUpOgorICAgICAgICByZXR1cm4gJzxtb2R1bGU+JworCisKK0Zyb3plbl9Tb3VyY2VPbmx5TCwgU291cmNlX1NvdXJjZU9ubHlMID0gbWFrZV9hYmNfc3ViY2xhc3NlcyhTb3VyY2VMb2FkZXIpCisKKworY2xhc3MgU291cmNlTG9hZGVyKFNvdXJjZUxvYWRlcik6CisKKyAgICBzb3VyY2VfbXRpbWUgPSAxCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcGF0aCwgbWFnaWM9Tm9uZSk6CisgICAgICAgIHN1cGVyKCkuX19pbml0X18ocGF0aCkKKyAgICAgICAgc2VsZi5ieXRlY29kZV9wYXRoID0gc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHNlbGYucGF0aCkKKyAgICAgICAgc2VsZi5zb3VyY2Vfc2l6ZSA9IGxlbihzZWxmLnNvdXJjZSkKKyAgICAgICAgaWYgbWFnaWMgaXMgTm9uZToKKyAgICAgICAgICAgIG1hZ2ljID0gc2VsZi51dGlsLk1BR0lDX05VTUJFUgorICAgICAgICBkYXRhID0gYnl0ZWFycmF5KG1hZ2ljKQorICAgICAgICBkYXRhLmV4dGVuZChzZWxmLmluaXQuX3dfbG9uZyhzZWxmLnNvdXJjZV9tdGltZSkpCisgICAgICAgIGRhdGEuZXh0ZW5kKHNlbGYuaW5pdC5fd19sb25nKHNlbGYuc291cmNlX3NpemUpKQorICAgICAgICBjb2RlX29iamVjdCA9IGNvbXBpbGUoc2VsZi5zb3VyY2UsIHNlbGYucGF0aCwgJ2V4ZWMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb250X2luaGVyaXQ9VHJ1ZSkKKyAgICAgICAgZGF0YS5leHRlbmQobWFyc2hhbC5kdW1wcyhjb2RlX29iamVjdCkpCisgICAgICAgIHNlbGYuYnl0ZWNvZGUgPSBieXRlcyhkYXRhKQorICAgICAgICBzZWxmLndyaXR0ZW4gPSB7fQorCisgICAgZGVmIGdldF9kYXRhKHNlbGYsIHBhdGgpOgorICAgICAgICBpZiBwYXRoID09IHNlbGYucGF0aDoKKyAgICAgICAgICAgIHJldHVybiBzdXBlcigpLmdldF9kYXRhKHBhdGgpCisgICAgICAgIGVsaWYgcGF0aCA9PSBzZWxmLmJ5dGVjb2RlX3BhdGg6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5ieXRlY29kZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcgorCisgICAgZGVmIHBhdGhfc3RhdHMoc2VsZiwgcGF0aCk6CisgICAgICAgIGlmIHBhdGggIT0gc2VsZi5wYXRoOgorICAgICAgICAgICAgcmFpc2UgSU9FcnJvcgorICAgICAgICByZXR1cm4geydtdGltZSc6IHNlbGYuc291cmNlX210aW1lLCAnc2l6ZSc6IHNlbGYuc291cmNlX3NpemV9CisKKyAgICBkZWYgc2V0X2RhdGEoc2VsZiwgcGF0aCwgZGF0YSk6CisgICAgICAgIHNlbGYud3JpdHRlbltwYXRoXSA9IGJ5dGVzKGRhdGEpCisgICAgICAgIHJldHVybiBwYXRoID09IHNlbGYuYnl0ZWNvZGVfcGF0aAorCisKK0Zyb3plbl9TTCwgU291cmNlX1NMID0gbWFrZV9hYmNfc3ViY2xhc3NlcyhTb3VyY2VMb2FkZXIpCitGcm96ZW5fU0wudXRpbCA9IGZyb3plbl91dGlsCitTb3VyY2VfU0wudXRpbCA9IHNvdXJjZV91dGlsCitGcm96ZW5fU0wuaW5pdCA9IGZyb3plbl9pbml0CitTb3VyY2VfU0wuaW5pdCA9IHNvdXJjZV9pbml0CisKKworY2xhc3MgU291cmNlTG9hZGVyVGVzdEhhcm5lc3M6CisKKyAgICBkZWYgc2V0VXAoc2VsZiwgKiwgaXNfcGFja2FnZT1UcnVlLCAqKmt3YXJncyk6CisgICAgICAgIHNlbGYucGFja2FnZSA9ICdwa2cnCisgICAgICAgIGlmIGlzX3BhY2thZ2U6CisgICAgICAgICAgICBzZWxmLnBhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5wYWNrYWdlLCAnX19pbml0X18ucHknKQorICAgICAgICAgICAgc2VsZi5uYW1lID0gc2VsZi5wYWNrYWdlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtb2R1bGVfbmFtZSA9ICdtb2QnCisgICAgICAgICAgICBzZWxmLnBhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5wYWNrYWdlLCAnLicuam9pbihbJ21vZCcsICdweSddKSkKKyAgICAgICAgICAgIHNlbGYubmFtZSA9ICcuJy5qb2luKFtzZWxmLnBhY2thZ2UsIG1vZHVsZV9uYW1lXSkKKyAgICAgICAgc2VsZi5jYWNoZWQgPSBzZWxmLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2Uoc2VsZi5wYXRoKQorICAgICAgICBzZWxmLmxvYWRlciA9IHNlbGYubG9hZGVyX21vY2soc2VsZi5wYXRoLCAqKmt3YXJncykKKworICAgIGRlZiB2ZXJpZnlfbW9kdWxlKHNlbGYsIG1vZHVsZSk6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCBzZWxmLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fZmlsZV9fLCBzZWxmLnBhdGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fY2FjaGVkX18sIHNlbGYuY2FjaGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX3BhY2thZ2VfXywgc2VsZi5wYWNrYWdlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX2xvYWRlcl9fLCBzZWxmLmxvYWRlcikKKyAgICAgICAgdmFsdWVzID0gbW9kdWxlLl8uc3BsaXQoJzo6JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZXNbMF0sIHNlbGYubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZXNbMV0sIHNlbGYucGF0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZXNbMl0sIHNlbGYuY2FjaGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlc1szXSwgc2VsZi5wYWNrYWdlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlc1s0XSwgcmVwcihzZWxmLmxvYWRlcikpCisKKyAgICBkZWYgdmVyaWZ5X2NvZGUoc2VsZiwgY29kZV9vYmplY3QpOgorICAgICAgICBtb2R1bGUgPSB0eXBlcy5Nb2R1bGVUeXBlKHNlbGYubmFtZSkKKyAgICAgICAgbW9kdWxlLl9fZmlsZV9fID0gc2VsZi5wYXRoCisgICAgICAgIG1vZHVsZS5fX2NhY2hlZF9fID0gc2VsZi5jYWNoZWQKKyAgICAgICAgbW9kdWxlLl9fcGFja2FnZV9fID0gc2VsZi5wYWNrYWdlCisgICAgICAgIG1vZHVsZS5fX2xvYWRlcl9fID0gc2VsZi5sb2FkZXIKKyAgICAgICAgbW9kdWxlLl9fcGF0aF9fID0gW10KKyAgICAgICAgZXhlYyhjb2RlX29iamVjdCwgbW9kdWxlLl9fZGljdF9fKQorICAgICAgICBzZWxmLnZlcmlmeV9tb2R1bGUobW9kdWxlKQorCisKK2NsYXNzIFNvdXJjZU9ubHlMb2FkZXJUZXN0cyhTb3VyY2VMb2FkZXJUZXN0SGFybmVzcyk6CisKKyAgICAiIiJUZXN0IGltcG9ydGxpYi5hYmMuU291cmNlTG9hZGVyIGZvciBzb3VyY2Utb25seSBsb2FkaW5nLgorCisgICAgUmVsb2FkIHRlc3RpbmcgaXMgc3Vic3VtZWQgYnkgdGhlIHRlc3RzIGZvcgorICAgIGltcG9ydGxpYi51dGlsLm1vZHVsZV9mb3JfbG9hZGVyLgorCisgICAgIiIiCisKKyAgICBkZWYgdGVzdF9nZXRfc291cmNlKHNlbGYpOgorICAgICAgICAjIFZlcmlmeSB0aGUgc291cmNlIGNvZGUgaXMgcmV0dXJuZWQgYXMgYSBzdHJpbmcuCisgICAgICAgICMgSWYgYW4gT1NFcnJvciBpcyByYWlzZWQgYnkgZ2V0X2RhdGEgdGhlbiByYWlzZSBJbXBvcnRFcnJvci4KKyAgICAgICAgZXhwZWN0ZWRfc291cmNlID0gc2VsZi5sb2FkZXIuc291cmNlLmRlY29kZSgndXRmLTgnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9hZGVyLmdldF9zb3VyY2Uoc2VsZi5uYW1lKSwgZXhwZWN0ZWRfc291cmNlKQorICAgICAgICBkZWYgcmFpc2VfT1NFcnJvcihwYXRoKToKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IKKyAgICAgICAgc2VsZi5sb2FkZXIuZ2V0X2RhdGEgPSByYWlzZV9PU0Vycm9yCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgc2VsZi5sb2FkZXIuZ2V0X3NvdXJjZShzZWxmLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLm5hbWUsIHNlbGYubmFtZSkKKworICAgIGRlZiB0ZXN0X2lzX3BhY2thZ2Uoc2VsZik6CisgICAgICAgICMgUHJvcGVybHkgZGV0ZWN0IHdoZW4gbG9hZGluZyBhIHBhY2thZ2UuCisgICAgICAgIHNlbGYuc2V0VXAoaXNfcGFja2FnZT1GYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvYWRlci5pc19wYWNrYWdlKHNlbGYubmFtZSkpCisgICAgICAgIHNlbGYuc2V0VXAoaXNfcGFja2FnZT1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5sb2FkZXIuaXNfcGFja2FnZShzZWxmLm5hbWUpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9hZGVyLmlzX3BhY2thZ2Uoc2VsZi5uYW1lICsgJy5fX2luaXRfXycpKQorCisgICAgZGVmIHRlc3RfZ2V0X2NvZGUoc2VsZik6CisgICAgICAgICMgVmVyaWZ5IHRoZSBjb2RlIG9iamVjdCBpcyBjcmVhdGVkLgorICAgICAgICBjb2RlX29iamVjdCA9IHNlbGYubG9hZGVyLmdldF9jb2RlKHNlbGYubmFtZSkKKyAgICAgICAgc2VsZi52ZXJpZnlfY29kZShjb2RlX29iamVjdCkKKworICAgIGRlZiB0ZXN0X3NvdXJjZV90b19jb2RlKHNlbGYpOgorICAgICAgICAjIFZlcmlmeSB0aGUgY29tcGlsZWQgY29kZSBvYmplY3QuCisgICAgICAgIGNvZGUgPSBzZWxmLmxvYWRlci5zb3VyY2VfdG9fY29kZShzZWxmLmxvYWRlci5zb3VyY2UsIHNlbGYucGF0aCkKKyAgICAgICAgc2VsZi52ZXJpZnlfY29kZShjb2RlKQorCisgICAgZGVmIHRlc3RfbG9hZF9tb2R1bGUoc2VsZik6CisgICAgICAgICMgTG9hZGluZyBhIG1vZHVsZSBzaG91bGQgc2V0IF9fbmFtZV9fLCBfX2xvYWRlcl9fLCBfX3BhY2thZ2VfXywKKyAgICAgICAgIyBfX3BhdGhfXyAoZm9yIHBhY2thZ2VzKSwgX19maWxlX18sIGFuZCBfX2NhY2hlZF9fLgorICAgICAgICAjIFRoZSBtb2R1bGUgc2hvdWxkIGFsc28gYmUgcHV0IGludG8gc3lzLm1vZHVsZXMuCisgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKHNlbGYubmFtZSk6CisgICAgICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdpZ25vcmUnLCBEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5sb2FkZXIubG9hZF9tb2R1bGUoc2VsZi5uYW1lKQorICAgICAgICAgICAgc2VsZi52ZXJpZnlfbW9kdWxlKG1vZHVsZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fcGF0aF9fLCBbb3MucGF0aC5kaXJuYW1lKHNlbGYucGF0aCldKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihzZWxmLm5hbWUsIHN5cy5tb2R1bGVzKQorCisgICAgZGVmIHRlc3RfcGFja2FnZV9zZXR0aW5ncyhzZWxmKToKKyAgICAgICAgIyBfX3BhY2thZ2VfXyBuZWVkcyB0byBiZSBzZXQsIHdoaWxlIF9fcGF0aF9fIGlzIHNldCBvbiBpZiB0aGUgbW9kdWxlCisgICAgICAgICMgaXMgYSBwYWNrYWdlLgorICAgICAgICAjIFRlc3RpbmcgdGhlIHZhbHVlcyBmb3IgYSBwYWNrYWdlIGFyZSBjb3ZlcmVkIGJ5IHRlc3RfbG9hZF9tb2R1bGUuCisgICAgICAgIHNlbGYuc2V0VXAoaXNfcGFja2FnZT1GYWxzZSkKKyAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUoc2VsZi5uYW1lKToKKyAgICAgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2lnbm9yZScsIERlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLmxvYWRlci5sb2FkX21vZHVsZShzZWxmLm5hbWUpCisgICAgICAgICAgICBzZWxmLnZlcmlmeV9tb2R1bGUobW9kdWxlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKG1vZHVsZSwgJ19fcGF0aF9fJykpCisKKyAgICBkZWYgdGVzdF9nZXRfc291cmNlX2VuY29kaW5nKHNlbGYpOgorICAgICAgICAjIFNvdXJjZSBpcyBjb25zaWRlcmVkIGVuY29kZWQgaW4gVVRGLTggYnkgZGVmYXVsdCB1bmxlc3Mgb3RoZXJ3aXNlCisgICAgICAgICMgc3BlY2lmaWVkIGJ5IGFuIGVuY29kaW5nIGxpbmUuCisgICAgICAgIHNvdXJjZSA9ICJfID0gJ8O8JyIKKyAgICAgICAgc2VsZi5sb2FkZXIuc291cmNlID0gc291cmNlLmVuY29kZSgndXRmLTgnKQorICAgICAgICByZXR1cm5lZF9zb3VyY2UgPSBzZWxmLmxvYWRlci5nZXRfc291cmNlKHNlbGYubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXR1cm5lZF9zb3VyY2UsIHNvdXJjZSkKKyAgICAgICAgc291cmNlID0gIiMgY29kaW5nOiBsYXRpbi0xXG5fID0gw7wiCisgICAgICAgIHNlbGYubG9hZGVyLnNvdXJjZSA9IHNvdXJjZS5lbmNvZGUoJ2xhdGluLTEnKQorICAgICAgICByZXR1cm5lZF9zb3VyY2UgPSBzZWxmLmxvYWRlci5nZXRfc291cmNlKHNlbGYubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXR1cm5lZF9zb3VyY2UsIHNvdXJjZSkKKworCitjbGFzcyBGcm96ZW5fU291cmNlT25seUxUZXN0cyhTb3VyY2VPbmx5TG9hZGVyVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBsb2FkZXJfbW9jayA9IEZyb3plbl9Tb3VyY2VPbmx5TAorICAgIHV0aWwgPSBmcm96ZW5fdXRpbAorCitjbGFzcyBTb3VyY2VfU291cmNlT25seUxUZXN0cyhTb3VyY2VPbmx5TG9hZGVyVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBsb2FkZXJfbW9jayA9IFNvdXJjZV9Tb3VyY2VPbmx5TAorICAgIHV0aWwgPSBzb3VyY2VfdXRpbAorCisKK0B1bml0dGVzdC5za2lwSWYoc3lzLmRvbnRfd3JpdGVfYnl0ZWNvZGUsICJzeXMuZG9udF93cml0ZV9ieXRlY29kZSBpcyB0cnVlIikKK2NsYXNzIFNvdXJjZUxvYWRlckJ5dGVjb2RlVGVzdHMoU291cmNlTG9hZGVyVGVzdEhhcm5lc3MpOgorCisgICAgIiIiVGVzdCBpbXBvcnRsaWIuYWJjLlNvdXJjZUxvYWRlcidzIHVzZSBvZiBieXRlY29kZS4KKworICAgIFNvdXJjZS1vbmx5IHRlc3RpbmcgaGFuZGxlZCBieSBTb3VyY2VPbmx5TG9hZGVyVGVzdHMuCisKKyAgICAiIiIKKworICAgIGRlZiB2ZXJpZnlfY29kZShzZWxmLCBjb2RlX29iamVjdCwgKiwgYnl0ZWNvZGVfd3JpdHRlbj1GYWxzZSk6CisgICAgICAgIHN1cGVyKCkudmVyaWZ5X2NvZGUoY29kZV9vYmplY3QpCisgICAgICAgIGlmIGJ5dGVjb2RlX3dyaXR0ZW46CisgICAgICAgICAgICBzZWxmLmFzc2VydEluKHNlbGYuY2FjaGVkLCBzZWxmLmxvYWRlci53cml0dGVuKQorICAgICAgICAgICAgZGF0YSA9IGJ5dGVhcnJheShzZWxmLnV0aWwuTUFHSUNfTlVNQkVSKQorICAgICAgICAgICAgZGF0YS5leHRlbmQoc2VsZi5pbml0Ll93X2xvbmcoc2VsZi5sb2FkZXIuc291cmNlX210aW1lKSkKKyAgICAgICAgICAgIGRhdGEuZXh0ZW5kKHNlbGYuaW5pdC5fd19sb25nKHNlbGYubG9hZGVyLnNvdXJjZV9zaXplKSkKKyAgICAgICAgICAgIGRhdGEuZXh0ZW5kKG1hcnNoYWwuZHVtcHMoY29kZV9vYmplY3QpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvYWRlci53cml0dGVuW3NlbGYuY2FjaGVkXSwgYnl0ZXMoZGF0YSkpCisKKyAgICBkZWYgdGVzdF9jb2RlX3dpdGhfZXZlcnl0aGluZyhzZWxmKToKKyAgICAgICAgIyBXaGVuIGV2ZXJ5dGhpbmcgc2hvdWxkIHdvcmsuCisgICAgICAgIGNvZGVfb2JqZWN0ID0gc2VsZi5sb2FkZXIuZ2V0X2NvZGUoc2VsZi5uYW1lKQorICAgICAgICBzZWxmLnZlcmlmeV9jb2RlKGNvZGVfb2JqZWN0KQorCisgICAgZGVmIHRlc3Rfbm9fYnl0ZWNvZGUoc2VsZik6CisgICAgICAgICMgSWYgbm8gYnl0ZWNvZGUgZXhpc3RzIHRoZW4gbW92ZSBvbiB0byB0aGUgc291cmNlLgorICAgICAgICBzZWxmLmxvYWRlci5ieXRlY29kZV9wYXRoID0gIjxkb2VzIG5vdCBleGlzdD4iCisgICAgICAgICMgU2FuaXR5IGNoZWNrCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcik6CisgICAgICAgICAgICBieXRlY29kZV9wYXRoID0gc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHNlbGYucGF0aCkKKyAgICAgICAgICAgIHNlbGYubG9hZGVyLmdldF9kYXRhKGJ5dGVjb2RlX3BhdGgpCisgICAgICAgIGNvZGVfb2JqZWN0ID0gc2VsZi5sb2FkZXIuZ2V0X2NvZGUoc2VsZi5uYW1lKQorICAgICAgICBzZWxmLnZlcmlmeV9jb2RlKGNvZGVfb2JqZWN0LCBieXRlY29kZV93cml0dGVuPVRydWUpCisKKyAgICBkZWYgdGVzdF9jb2RlX2JhZF90aW1lc3RhbXAoc2VsZik6CisgICAgICAgICMgQnl0ZWNvZGUgaXMgb25seSB1c2VkIHdoZW4gdGhlIHRpbWVzdGFtcCBtYXRjaGVzIHRoZSBzb3VyY2UgRVhBQ1RMWS4KKyAgICAgICAgZm9yIHNvdXJjZV9tdGltZSBpbiAoMCwgMik6CisgICAgICAgICAgICBhc3NlcnQgc291cmNlX210aW1lICE9IHNlbGYubG9hZGVyLnNvdXJjZV9tdGltZQorICAgICAgICAgICAgb3JpZ2luYWwgPSBzZWxmLmxvYWRlci5zb3VyY2VfbXRpbWUKKyAgICAgICAgICAgIHNlbGYubG9hZGVyLnNvdXJjZV9tdGltZSA9IHNvdXJjZV9tdGltZQorICAgICAgICAgICAgIyBJZiBieXRlY29kZSBpcyB1c2VkIHRoZW4gRU9GRXJyb3Igd291bGQgYmUgcmFpc2VkIGJ5IG1hcnNoYWwuCisgICAgICAgICAgICBzZWxmLmxvYWRlci5ieXRlY29kZSA9IHNlbGYubG9hZGVyLmJ5dGVjb2RlWzg6XQorICAgICAgICAgICAgY29kZV9vYmplY3QgPSBzZWxmLmxvYWRlci5nZXRfY29kZShzZWxmLm5hbWUpCisgICAgICAgICAgICBzZWxmLnZlcmlmeV9jb2RlKGNvZGVfb2JqZWN0LCBieXRlY29kZV93cml0dGVuPVRydWUpCisgICAgICAgICAgICBzZWxmLmxvYWRlci5zb3VyY2VfbXRpbWUgPSBvcmlnaW5hbAorCisgICAgZGVmIHRlc3RfY29kZV9iYWRfbWFnaWMoc2VsZik6CisgICAgICAgICMgU2tpcCBvdmVyIGJ5dGVjb2RlIHdpdGggYSBiYWQgbWFnaWMgbnVtYmVyLgorICAgICAgICBzZWxmLnNldFVwKG1hZ2ljPWInMDAwMCcpCisgICAgICAgICMgSWYgYnl0ZWNvZGUgaXMgdXNlZCB0aGVuIEVPRkVycm9yIHdvdWxkIGJlIHJhaXNlZCBieSBtYXJzaGFsLgorICAgICAgICBzZWxmLmxvYWRlci5ieXRlY29kZSA9IHNlbGYubG9hZGVyLmJ5dGVjb2RlWzg6XQorICAgICAgICBjb2RlX29iamVjdCA9IHNlbGYubG9hZGVyLmdldF9jb2RlKHNlbGYubmFtZSkKKyAgICAgICAgc2VsZi52ZXJpZnlfY29kZShjb2RlX29iamVjdCwgYnl0ZWNvZGVfd3JpdHRlbj1UcnVlKQorCisgICAgZGVmIHRlc3RfZG9udF93cml0ZV9ieXRlY29kZShzZWxmKToKKyAgICAgICAgIyBCeXRlY29kZSBpcyBub3Qgd3JpdHRlbiBpZiBzeXMuZG9udF93cml0ZV9ieXRlY29kZSBpcyB0cnVlLgorICAgICAgICAjIENhbiBhc3N1bWUgaXQgaXMgZmFsc2UgYWxyZWFkeSB0aGFua3MgdG8gdGhlIHNraXBJZiBjbGFzcyBkZWNvcmF0b3IuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN5cy5kb250X3dyaXRlX2J5dGVjb2RlID0gVHJ1ZQorICAgICAgICAgICAgc2VsZi5sb2FkZXIuYnl0ZWNvZGVfcGF0aCA9ICI8ZG9lcyBub3QgZXhpc3Q+IgorICAgICAgICAgICAgY29kZV9vYmplY3QgPSBzZWxmLmxvYWRlci5nZXRfY29kZShzZWxmLm5hbWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKHNlbGYuY2FjaGVkLCBzZWxmLmxvYWRlci53cml0dGVuKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc3lzLmRvbnRfd3JpdGVfYnl0ZWNvZGUgPSBGYWxzZQorCisgICAgZGVmIHRlc3Rfbm9fc2V0X2RhdGEoc2VsZik6CisgICAgICAgICMgSWYgc2V0X2RhdGEgaXMgbm90IGRlZmluZWQsIG9uZSBjYW4gc3RpbGwgcmVhZCBieXRlY29kZS4KKyAgICAgICAgc2VsZi5zZXRVcChtYWdpYz1iJzAwMDAnKQorICAgICAgICBvcmlnaW5hbF9zZXRfZGF0YSA9IHNlbGYubG9hZGVyLl9fY2xhc3NfXy5tcm8oKVsxXS5zZXRfZGF0YQorICAgICAgICB0cnk6CisgICAgICAgICAgICBkZWwgc2VsZi5sb2FkZXIuX19jbGFzc19fLm1ybygpWzFdLnNldF9kYXRhCisgICAgICAgICAgICBjb2RlX29iamVjdCA9IHNlbGYubG9hZGVyLmdldF9jb2RlKHNlbGYubmFtZSkKKyAgICAgICAgICAgIHNlbGYudmVyaWZ5X2NvZGUoY29kZV9vYmplY3QpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLmxvYWRlci5fX2NsYXNzX18ubXJvKClbMV0uc2V0X2RhdGEgPSBvcmlnaW5hbF9zZXRfZGF0YQorCisgICAgZGVmIHRlc3Rfc2V0X2RhdGFfcmFpc2VzX2V4Y2VwdGlvbnMoc2VsZik6CisgICAgICAgICMgUmFpc2luZyBOb3RJbXBsZW1lbnRlZEVycm9yIG9yIE9TRXJyb3IgaXMgb2theSBmb3Igc2V0X2RhdGEuCisgICAgICAgIGRlZiByYWlzZV9leGNlcHRpb24oZXhjKToKKyAgICAgICAgICAgIGRlZiBjbG9zdXJlKCphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICAgICAgICAgcmFpc2UgZXhjCisgICAgICAgICAgICByZXR1cm4gY2xvc3VyZQorCisgICAgICAgIHNlbGYuc2V0VXAobWFnaWM9YicwMDAwJykKKyAgICAgICAgc2VsZi5sb2FkZXIuc2V0X2RhdGEgPSByYWlzZV9leGNlcHRpb24oTm90SW1wbGVtZW50ZWRFcnJvcikKKyAgICAgICAgY29kZV9vYmplY3QgPSBzZWxmLmxvYWRlci5nZXRfY29kZShzZWxmLm5hbWUpCisgICAgICAgIHNlbGYudmVyaWZ5X2NvZGUoY29kZV9vYmplY3QpCisKKworY2xhc3MgRnJvemVuX1NMQnl0ZWNvZGVUZXN0cyhTb3VyY2VMb2FkZXJCeXRlY29kZVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgbG9hZGVyX21vY2sgPSBGcm96ZW5fU0wKKyAgICBpbml0ID0gZnJvemVuX2luaXQKKyAgICB1dGlsID0gZnJvemVuX3V0aWwKKworY2xhc3MgU291cmNlU0xCeXRlY29kZVRlc3RzKFNvdXJjZUxvYWRlckJ5dGVjb2RlVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBsb2FkZXJfbW9jayA9IFNvdXJjZV9TTAorICAgIGluaXQgPSBzb3VyY2VfaW5pdAorICAgIHV0aWwgPSBzb3VyY2VfdXRpbAorCisKK2NsYXNzIFNvdXJjZUxvYWRlckdldFNvdXJjZVRlc3RzOgorCisgICAgIiIiVGVzdHMgZm9yIGltcG9ydGxpYi5hYmMuU291cmNlTG9hZGVyLmdldF9zb3VyY2UoKS4iIiIKKworICAgIGRlZiB0ZXN0X2RlZmF1bHRfZW5jb2Rpbmcoc2VsZik6CisgICAgICAgICMgU2hvdWxkIGhhdmUgbm8gcHJvYmxlbXMgd2l0aCBVVEYtOCB0ZXh0LgorICAgICAgICBuYW1lID0gJ21vZCcKKyAgICAgICAgbW9jayA9IHNlbGYuU291cmNlT25seUxvYWRlck1vY2soJ21vZC5maWxlJykKKyAgICAgICAgc291cmNlID0gJ3ggPSAiw7wiJworICAgICAgICBtb2NrLnNvdXJjZSA9IHNvdXJjZS5lbmNvZGUoJ3V0Zi04JykKKyAgICAgICAgcmV0dXJuZWRfc291cmNlID0gbW9jay5nZXRfc291cmNlKG5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmV0dXJuZWRfc291cmNlLCBzb3VyY2UpCisKKyAgICBkZWYgdGVzdF9kZWNvZGVkX3NvdXJjZShzZWxmKToKKyAgICAgICAgIyBEZWNvZGluZyBzaG91bGQgd29yay4KKyAgICAgICAgbmFtZSA9ICdtb2QnCisgICAgICAgIG1vY2sgPSBzZWxmLlNvdXJjZU9ubHlMb2FkZXJNb2NrKCJtb2QuZmlsZSIpCisgICAgICAgIHNvdXJjZSA9ICIjIGNvZGluZzogTGF0aW4tMVxueD0nw7wnIgorICAgICAgICBhc3NlcnQgc291cmNlLmVuY29kZSgnbGF0aW4tMScpICE9IHNvdXJjZS5lbmNvZGUoJ3V0Zi04JykKKyAgICAgICAgbW9jay5zb3VyY2UgPSBzb3VyY2UuZW5jb2RlKCdsYXRpbi0xJykKKyAgICAgICAgcmV0dXJuZWRfc291cmNlID0gbW9jay5nZXRfc291cmNlKG5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmV0dXJuZWRfc291cmNlLCBzb3VyY2UpCisKKyAgICBkZWYgdGVzdF91bml2ZXJzYWxfbmV3bGluZXMoc2VsZik6CisgICAgICAgICMgUEVQIDMwMiBzYXlzIHVuaXZlcnNhbCBuZXdsaW5lcyBzaG91bGQgYmUgdXNlZC4KKyAgICAgICAgbmFtZSA9ICdtb2QnCisgICAgICAgIG1vY2sgPSBzZWxmLlNvdXJjZU9ubHlMb2FkZXJNb2NrKCdtb2QuZmlsZScpCisgICAgICAgIHNvdXJjZSA9ICJ4ID0gNDJcclxueSA9IC0xM1xyXG4iCisgICAgICAgIG1vY2suc291cmNlID0gc291cmNlLmVuY29kZSgndXRmLTgnKQorICAgICAgICBleHBlY3QgPSBpby5JbmNyZW1lbnRhbE5ld2xpbmVEZWNvZGVyKE5vbmUsIFRydWUpLmRlY29kZShzb3VyY2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9jay5nZXRfc291cmNlKG5hbWUpLCBleHBlY3QpCisKKworY2xhc3MgRnJvemVuX1NvdXJjZU9ubHlMR2V0U291cmNlVGVzdHMoU291cmNlTG9hZGVyR2V0U291cmNlVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBTb3VyY2VPbmx5TG9hZGVyTW9jayA9IEZyb3plbl9Tb3VyY2VPbmx5TAorCitjbGFzcyBTb3VyY2VfU291cmNlT25seUxHZXRTb3VyY2VUZXN0cyhTb3VyY2VMb2FkZXJHZXRTb3VyY2VUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIFNvdXJjZU9ubHlMb2FkZXJNb2NrID0gU291cmNlX1NvdXJjZU9ubHlMCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvdGVzdF9hcGkucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi90ZXN0X2FwaS5weQppbmRleCBiMWE1ODk0Li4yYTJkNDJiIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi90ZXN0X2FwaS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi90ZXN0X2FwaS5weQpAQCAtMSwxNCArMSwxOCBAQAogZnJvbSAuIGltcG9ydCB1dGlsCi1pbXBvcnQgaW1wCi1pbXBvcnQgaW1wb3J0bGliCi1mcm9tIGltcG9ydGxpYiBpbXBvcnQgbWFjaGluZXJ5CisKK2Zyb3plbl9pbml0LCBzb3VyY2VfaW5pdCA9IHV0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliJykKK2Zyb3plbl91dGlsLCBzb3VyY2VfdXRpbCA9IHV0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliLnV0aWwnKQorZnJvemVuX21hY2hpbmVyeSwgc291cmNlX21hY2hpbmVyeSA9IHV0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliLm1hY2hpbmVyeScpCisKK2ltcG9ydCBvcy5wYXRoCiBpbXBvcnQgc3lzCiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIGltcG9ydCB0eXBlcwogaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgd2FybmluZ3MKIAogCi1jbGFzcyBJbXBvcnRNb2R1bGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBJbXBvcnRNb2R1bGVUZXN0czoKIAogICAgICIiIlRlc3QgaW1wb3J0bGliLmltcG9ydF9tb2R1bGUuIiIiCiAKQEAgLTE2LDcgKzIwLDcgQEAKICAgICAgICAgIyBUZXN0IGltcG9ydGluZyBhIHRvcC1sZXZlbCBtb2R1bGUuCiAgICAgICAgIHdpdGggdXRpbC5tb2NrX21vZHVsZXMoJ3RvcF9sZXZlbCcpIGFzIG1vY2s6CiAgICAgICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bbW9ja10pOgotICAgICAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKCd0b3BfbGV2ZWwnKQorICAgICAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuaW5pdC5pbXBvcnRfbW9kdWxlKCd0b3BfbGV2ZWwnKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCAndG9wX2xldmVsJykKIAogICAgIGRlZiB0ZXN0X2Fic29sdXRlX3BhY2thZ2VfaW1wb3J0KHNlbGYpOgpAQCAtMjYsNyArMzAsNyBAQAogICAgICAgICBuYW1lID0gJ3swfS5tb2QnLmZvcm1hdChwa2dfbmFtZSkKICAgICAgICAgd2l0aCB1dGlsLm1vY2tfbW9kdWxlcyhwa2dfbG9uZ19uYW1lLCBuYW1lKSBhcyBtb2NrOgogICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W21vY2tdKToKLSAgICAgICAgICAgICAgICBtb2R1bGUgPSBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZShuYW1lKQorICAgICAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuaW5pdC5pbXBvcnRfbW9kdWxlKG5hbWUpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19uYW1lX18sIG5hbWUpCiAKICAgICBkZWYgdGVzdF9zaGFsbG93X3JlbGF0aXZlX3BhY2thZ2VfaW1wb3J0KHNlbGYpOgpAQCAtMzgsMTcgKzQyLDE3IEBACiAgICAgICAgIHJlbGF0aXZlX25hbWUgPSAnLnswfScuZm9ybWF0KG1vZHVsZV9uYW1lKQogICAgICAgICB3aXRoIHV0aWwubW9ja19tb2R1bGVzKHBrZ19sb25nX25hbWUsIGFic29sdXRlX25hbWUpIGFzIG1vY2s6CiAgICAgICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bbW9ja10pOgotICAgICAgICAgICAgICAgIGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKHBrZ19uYW1lKQotICAgICAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKHJlbGF0aXZlX25hbWUsIHBrZ19uYW1lKQorICAgICAgICAgICAgICAgIHNlbGYuaW5pdC5pbXBvcnRfbW9kdWxlKHBrZ19uYW1lKQorICAgICAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuaW5pdC5pbXBvcnRfbW9kdWxlKHJlbGF0aXZlX25hbWUsIHBrZ19uYW1lKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCBhYnNvbHV0ZV9uYW1lKQogCiAgICAgZGVmIHRlc3RfZGVlcF9yZWxhdGl2ZV9wYWNrYWdlX2ltcG9ydChzZWxmKToKICAgICAgICAgbW9kdWxlcyA9IFsnYS5fX2luaXRfXycsICdhLmIuX19pbml0X18nLCAnYS5jJ10KICAgICAgICAgd2l0aCB1dGlsLm1vY2tfbW9kdWxlcygqbW9kdWxlcykgYXMgbW9jazoKICAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVttb2NrXSk6Ci0gICAgICAgICAgICAgICAgaW1wb3J0bGliLmltcG9ydF9tb2R1bGUoJ2EnKQotICAgICAgICAgICAgICAgIGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKCdhLmInKQotICAgICAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKCcuLmMnLCAnYS5iJykKKyAgICAgICAgICAgICAgICBzZWxmLmluaXQuaW1wb3J0X21vZHVsZSgnYScpCisgICAgICAgICAgICAgICAgc2VsZi5pbml0LmltcG9ydF9tb2R1bGUoJ2EuYicpCisgICAgICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5pbml0LmltcG9ydF9tb2R1bGUoJy4uYycsICdhLmInKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCAnYS5jJykKIAogICAgIGRlZiB0ZXN0X2Fic29sdXRlX2ltcG9ydF93aXRoX3BhY2thZ2Uoc2VsZik6CkBAIC01OSwxNSArNjMsMTUgQEAKICAgICAgICAgbmFtZSA9ICd7MH0ubW9kJy5mb3JtYXQocGtnX25hbWUpCiAgICAgICAgIHdpdGggdXRpbC5tb2NrX21vZHVsZXMocGtnX2xvbmdfbmFtZSwgbmFtZSkgYXMgbW9jazoKICAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVttb2NrXSk6Ci0gICAgICAgICAgICAgICAgaW1wb3J0bGliLmltcG9ydF9tb2R1bGUocGtnX25hbWUpCi0gICAgICAgICAgICAgICAgbW9kdWxlID0gaW1wb3J0bGliLmltcG9ydF9tb2R1bGUobmFtZSwgcGtnX25hbWUpCisgICAgICAgICAgICAgICAgc2VsZi5pbml0LmltcG9ydF9tb2R1bGUocGtnX25hbWUpCisgICAgICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5pbml0LmltcG9ydF9tb2R1bGUobmFtZSwgcGtnX25hbWUpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19uYW1lX18sIG5hbWUpCiAKICAgICBkZWYgdGVzdF9yZWxhdGl2ZV9pbXBvcnRfd29fcGFja2FnZShzZWxmKToKICAgICAgICAgIyBSZWxhdGl2ZSBpbXBvcnRzIGNhbm5vdCBoYXBwZW4gd2l0aG91dCB0aGUgJ3BhY2thZ2UnIGFyZ3VtZW50IGJlaW5nCiAgICAgICAgICMgc2V0LgogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6Ci0gICAgICAgICAgICBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZSgnLnN1cHBvcnQnKQorICAgICAgICAgICAgc2VsZi5pbml0LmltcG9ydF9tb2R1bGUoJy5zdXBwb3J0JykKIAogCiAgICAgZGVmIHRlc3RfbG9hZGVkX29uY2Uoc2VsZik6CkBAIC03Niw3ICs4MCw3IEBACiAgICAgICAgICMgbW9kdWxlIGN1cnJlbnRseSBiZWluZyBpbXBvcnRlZC4KICAgICAgICAgYl9sb2FkX2NvdW50ID0gMAogICAgICAgICBkZWYgbG9hZF9hKCk6Ci0gICAgICAgICAgICBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZSgnYS5iJykKKyAgICAgICAgICAgIHNlbGYuaW5pdC5pbXBvcnRfbW9kdWxlKCdhLmInKQogICAgICAgICBkZWYgbG9hZF9iKCk6CiAgICAgICAgICAgICBub25sb2NhbCBiX2xvYWRfY291bnQKICAgICAgICAgICAgIGJfbG9hZF9jb3VudCArPSAxCkBAIC04NCwxMSArODgsMTcgQEAKICAgICAgICAgbW9kdWxlcyA9IFsnYS5fX2luaXRfXycsICdhLmInXQogICAgICAgICB3aXRoIHV0aWwubW9ja19tb2R1bGVzKCptb2R1bGVzLCBtb2R1bGVfY29kZT1jb2RlKSBhcyBtb2NrOgogICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W21vY2tdKToKLSAgICAgICAgICAgICAgICBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZSgnYS5iJykKKyAgICAgICAgICAgICAgICBzZWxmLmluaXQuaW1wb3J0X21vZHVsZSgnYS5iJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiX2xvYWRfY291bnQsIDEpCiAKK2NsYXNzIEZyb3plbl9JbXBvcnRNb2R1bGVUZXN0cyhJbXBvcnRNb2R1bGVUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGluaXQgPSBmcm96ZW5faW5pdAogCi1jbGFzcyBGaW5kTG9hZGVyVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorY2xhc3MgU291cmNlX0ltcG9ydE1vZHVsZVRlc3RzKEltcG9ydE1vZHVsZVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgaW5pdCA9IHNvdXJjZV9pbml0CisKKworY2xhc3MgRmluZExvYWRlclRlc3RzOgogCiAgICAgY2xhc3MgRmFrZU1ldGFGaW5kZXI6CiAgICAgICAgIEBzdGF0aWNtZXRob2QKQEAgLTk4LDI5ICsxMDgsNTEgQEAKICAgICAgICAgIyBJZiBhIG1vZHVsZSB3aXRoIF9fbG9hZGVyX18gaXMgaW4gc3lzLm1vZHVsZXMsIHRoZW4gcmV0dXJuIGl0LgogICAgICAgICBuYW1lID0gJ3NvbWVfbW9kJwogICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKToKLSAgICAgICAgICAgIG1vZHVsZSA9IGltcC5uZXdfbW9kdWxlKG5hbWUpCisgICAgICAgICAgICBtb2R1bGUgPSB0eXBlcy5Nb2R1bGVUeXBlKG5hbWUpCiAgICAgICAgICAgICBsb2FkZXIgPSAnYSBsb2FkZXIhJwogICAgICAgICAgICAgbW9kdWxlLl9fbG9hZGVyX18gPSBsb2FkZXIKICAgICAgICAgICAgIHN5cy5tb2R1bGVzW25hbWVdID0gbW9kdWxlCi0gICAgICAgICAgICBmb3VuZCA9IGltcG9ydGxpYi5maW5kX2xvYWRlcihuYW1lKQorICAgICAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignaWdub3JlJywgRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICAgICAgICAgIGZvdW5kID0gc2VsZi5pbml0LmZpbmRfbG9hZGVyKG5hbWUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlciwgZm91bmQpCiAKICAgICBkZWYgdGVzdF9zeXNfbW9kdWxlc19sb2FkZXJfaXNfTm9uZShzZWxmKToKICAgICAgICAgIyBJZiBzeXMubW9kdWxlc1tuYW1lXS5fX2xvYWRlcl9fIGlzIE5vbmUsIHJhaXNlIFZhbHVlRXJyb3IuCiAgICAgICAgIG5hbWUgPSAnc29tZV9tb2QnCiAgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpOgotICAgICAgICAgICAgbW9kdWxlID0gaW1wLm5ld19tb2R1bGUobmFtZSkKKyAgICAgICAgICAgIG1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUobmFtZSkKICAgICAgICAgICAgIG1vZHVsZS5fX2xvYWRlcl9fID0gTm9uZQogICAgICAgICAgICAgc3lzLm1vZHVsZXNbbmFtZV0gPSBtb2R1bGUKICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6Ci0gICAgICAgICAgICAgICAgaW1wb3J0bGliLmZpbmRfbG9hZGVyKG5hbWUpCisgICAgICAgICAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2lnbm9yZScsIERlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5pbml0LmZpbmRfbG9hZGVyKG5hbWUpCisKKyAgICBkZWYgdGVzdF9zeXNfbW9kdWxlc19sb2FkZXJfaXNfbm90X3NldChzZWxmKToKKyAgICAgICAgIyBTaG91bGQgcmFpc2UgVmFsdWVFcnJvcgorICAgICAgICAjIElzc3VlICMxNzA5OQorICAgICAgICBuYW1lID0gJ3NvbWVfbW9kJworICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKToKKyAgICAgICAgICAgIG1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUobmFtZSkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBkZWwgbW9kdWxlLl9fbG9hZGVyX18KKyAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBzeXMubW9kdWxlc1tuYW1lXSA9IG1vZHVsZQorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignaWdub3JlJywgRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmluaXQuZmluZF9sb2FkZXIobmFtZSkKIAogICAgIGRlZiB0ZXN0X3N1Y2Nlc3Moc2VsZik6CiAgICAgICAgICMgUmV0dXJuIHRoZSBsb2FkZXIgZm91bmQgb24gc3lzLm1ldGFfcGF0aC4KICAgICAgICAgbmFtZSA9ICdzb21lX21vZCcKICAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSk6CiAgICAgICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bc2VsZi5GYWtlTWV0YUZpbmRlcl0pOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKG5hbWUsIE5vbmUpLCBpbXBvcnRsaWIuZmluZF9sb2FkZXIobmFtZSkpCisgICAgICAgICAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2lnbm9yZScsIERlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgobmFtZSwgTm9uZSksIHNlbGYuaW5pdC5maW5kX2xvYWRlcihuYW1lKSkKIAogICAgIGRlZiB0ZXN0X3N1Y2Nlc3NfcGF0aChzZWxmKToKICAgICAgICAgIyBTZWFyY2hpbmcgb24gYSBwYXRoIHNob3VsZCB3b3JrLgpAQCAtMTI4LDE1ICsxNjAsMjAxIEBACiAgICAgICAgIHBhdGggPSAncGF0aCB0byBzb21lIHBsYWNlJwogICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKToKICAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVtzZWxmLkZha2VNZXRhRmluZGVyXSk6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgobmFtZSwgcGF0aCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBvcnRsaWIuZmluZF9sb2FkZXIobmFtZSwgcGF0aCkpCisgICAgICAgICAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2lnbm9yZScsIERlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgobmFtZSwgcGF0aCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5pbml0LmZpbmRfbG9hZGVyKG5hbWUsIHBhdGgpKQogCiAgICAgZGVmIHRlc3Rfbm90aGluZyhzZWxmKToKICAgICAgICAgIyBOb25lIGlzIHJldHVybmVkIHVwb24gZmFpbHVyZSB0byBmaW5kIGEgbG9hZGVyLgotICAgICAgICBzZWxmLmFzc2VydElzTm9uZShpbXBvcnRsaWIuZmluZF9sb2FkZXIoJ25ldmVyZ29pbmd0b2ZpbmR0aGlzbW9kdWxlJykpCisgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignaWdub3JlJywgRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc2VsZi5pbml0LmZpbmRfbG9hZGVyKCduZXZlcmdvaW5ndG9maW5kdGhpc21vZHVsZScpKQorCitjbGFzcyBGcm96ZW5fRmluZExvYWRlclRlc3RzKEZpbmRMb2FkZXJUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGluaXQgPSBmcm96ZW5faW5pdAorCitjbGFzcyBTb3VyY2VfRmluZExvYWRlclRlc3RzKEZpbmRMb2FkZXJUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGluaXQgPSBzb3VyY2VfaW5pdAogCiAKLWNsYXNzIEludmFsaWRhdGVDYWNoZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKK2NsYXNzIFJlbG9hZFRlc3RzOgorCisgICAgIiIiVGVzdCBtb2R1bGUgcmVsb2FkaW5nIGZvciBidWlsdGluIGFuZCBleHRlbnNpb24gbW9kdWxlcy4iIiIKKworICAgIGRlZiB0ZXN0X3JlbG9hZF9tb2R1bGVzKHNlbGYpOgorICAgICAgICBmb3IgbW9kIGluICgndG9rZW5pemUnLCAndGltZScsICdtYXJzaGFsJyk6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChtb2R1bGU9bW9kKToKKyAgICAgICAgICAgICAgICB3aXRoIHN1cHBvcnQuQ2xlYW5JbXBvcnQobW9kKToKKyAgICAgICAgICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5pbml0LmltcG9ydF9tb2R1bGUobW9kKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmluaXQucmVsb2FkKG1vZHVsZSkKKworICAgIGRlZiB0ZXN0X21vZHVsZV9yZXBsYWNlZChzZWxmKToKKyAgICAgICAgZGVmIGNvZGUoKToKKyAgICAgICAgICAgIGltcG9ydCBzeXMKKyAgICAgICAgICAgIG1vZHVsZSA9IHR5cGUoc3lzKSgndG9wX2xldmVsJykKKyAgICAgICAgICAgIG1vZHVsZS5zcGFtID0gMworICAgICAgICAgICAgc3lzLm1vZHVsZXNbJ3RvcF9sZXZlbCddID0gbW9kdWxlCisgICAgICAgIG1vY2sgPSB1dGlsLm1vY2tfbW9kdWxlcygndG9wX2xldmVsJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZV9jb2RlPXsndG9wX2xldmVsJzogY29kZX0pCisgICAgICAgIHdpdGggbW9jazoKKyAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVttb2NrXSk6CisgICAgICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5pbml0LmltcG9ydF9tb2R1bGUoJ3RvcF9sZXZlbCcpCisgICAgICAgICAgICAgICAgcmVsb2FkZWQgPSBzZWxmLmluaXQucmVsb2FkKG1vZHVsZSkKKyAgICAgICAgICAgICAgICBhY3R1YWwgPSBzeXMubW9kdWxlc1sndG9wX2xldmVsJ10KKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdHVhbC5zcGFtLCAzKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVsb2FkZWQuc3BhbSwgMykKKworICAgIGRlZiB0ZXN0X3JlbG9hZF9taXNzaW5nX2xvYWRlcihzZWxmKToKKyAgICAgICAgd2l0aCBzdXBwb3J0LkNsZWFuSW1wb3J0KCd0eXBlcycpOgorICAgICAgICAgICAgaW1wb3J0IHR5cGVzCisgICAgICAgICAgICBsb2FkZXIgPSB0eXBlcy5fX2xvYWRlcl9fCisgICAgICAgICAgICBkZWwgdHlwZXMuX19sb2FkZXJfXworICAgICAgICAgICAgcmVsb2FkZWQgPSBzZWxmLmluaXQucmVsb2FkKHR5cGVzKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHJlbG9hZGVkLCB0eXBlcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3lzLm1vZHVsZXNbJ3R5cGVzJ10sIHR5cGVzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWxvYWRlZC5fX2xvYWRlcl9fLnBhdGgsIGxvYWRlci5wYXRoKQorCisgICAgZGVmIHRlc3RfcmVsb2FkX2xvYWRlcl9yZXBsYWNlZChzZWxmKToKKyAgICAgICAgd2l0aCBzdXBwb3J0LkNsZWFuSW1wb3J0KCd0eXBlcycpOgorICAgICAgICAgICAgaW1wb3J0IHR5cGVzCisgICAgICAgICAgICB0eXBlcy5fX2xvYWRlcl9fID0gTm9uZQorICAgICAgICAgICAgc2VsZi5pbml0LmludmFsaWRhdGVfY2FjaGVzKCkKKyAgICAgICAgICAgIHJlbG9hZGVkID0gc2VsZi5pbml0LnJlbG9hZCh0eXBlcykKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdChyZWxvYWRlZC5fX2xvYWRlcl9fLCBOb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhyZWxvYWRlZCwgdHlwZXMpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHN5cy5tb2R1bGVzWyd0eXBlcyddLCB0eXBlcykKKworICAgIGRlZiB0ZXN0X3JlbG9hZF9sb2NhdGlvbl9jaGFuZ2VkKHNlbGYpOgorICAgICAgICBuYW1lID0gJ3NwYW0nCisgICAgICAgIHdpdGggc3VwcG9ydC50ZW1wX2N3ZChOb25lKSBhcyBjd2Q6CisgICAgICAgICAgICB3aXRoIHV0aWwudW5jYWNoZSgnc3BhbScpOgorICAgICAgICAgICAgICAgIHdpdGggc3VwcG9ydC5EaXJzT25TeXNQYXRoKGN3ZCk6CisgICAgICAgICAgICAgICAgICAgICMgU3RhcnQgYXMgYSBwbGFpbiBtb2R1bGUuCisgICAgICAgICAgICAgICAgICAgIHNlbGYuaW5pdC5pbnZhbGlkYXRlX2NhY2hlcygpCisgICAgICAgICAgICAgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oY3dkLCBuYW1lICsgJy5weScpCisgICAgICAgICAgICAgICAgICAgIGNhY2hlZCA9IHNlbGYudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShwYXRoKQorICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCA9IHsnX19uYW1lX18nOiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX19wYWNrYWdlX18nOiAnJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fZmlsZV9fJzogcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fY2FjaGVkX18nOiBjYWNoZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfX2RvY19fJzogTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBzdXBwb3J0LmNyZWF0ZV9lbXB0eV9maWxlKHBhdGgpCisgICAgICAgICAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuaW5pdC5pbXBvcnRfbW9kdWxlKG5hbWUpCisgICAgICAgICAgICAgICAgICAgIG5zID0gdmFycyhtb2R1bGUpLmNvcHkoKQorICAgICAgICAgICAgICAgICAgICBsb2FkZXIgPSBucy5wb3AoJ19fbG9hZGVyX18nKQorICAgICAgICAgICAgICAgICAgICBzcGVjID0gbnMucG9wKCdfX3NwZWNfXycpCisgICAgICAgICAgICAgICAgICAgIG5zLnBvcCgnX19idWlsdGluc19fJywgTm9uZSkgICMgQW4gaW1wbGVtZW50YXRpb24gZGV0YWlsLgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubmFtZSwgbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmxvYWRlciwgbG9hZGVyKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlci5wYXRoLCBwYXRoKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLCBleHBlY3RlZCkKKworICAgICAgICAgICAgICAgICAgICAjIENoYW5nZSB0byBhIHBhY2thZ2UuCisgICAgICAgICAgICAgICAgICAgIHNlbGYuaW5pdC5pbnZhbGlkYXRlX2NhY2hlcygpCisgICAgICAgICAgICAgICAgICAgIGluaXRfcGF0aCA9IG9zLnBhdGguam9pbihjd2QsIG5hbWUsICdfX2luaXRfXy5weScpCisgICAgICAgICAgICAgICAgICAgIGNhY2hlZCA9IHNlbGYudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShpbml0X3BhdGgpCisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkID0geydfX25hbWVfXyc6IG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfX3BhY2thZ2VfXyc6IG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfX2ZpbGVfXyc6IGluaXRfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fY2FjaGVkX18nOiBjYWNoZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfX3BhdGhfXyc6IFtvcy5wYXRoLmRpcm5hbWUoaW5pdF9wYXRoKV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfX2RvY19fJzogTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBvcy5ta2RpcihuYW1lKQorICAgICAgICAgICAgICAgICAgICBvcy5yZW5hbWUocGF0aCwgaW5pdF9wYXRoKQorICAgICAgICAgICAgICAgICAgICByZWxvYWRlZCA9IHNlbGYuaW5pdC5yZWxvYWQobW9kdWxlKQorICAgICAgICAgICAgICAgICAgICBucyA9IHZhcnMocmVsb2FkZWQpLmNvcHkoKQorICAgICAgICAgICAgICAgICAgICBsb2FkZXIgPSBucy5wb3AoJ19fbG9hZGVyX18nKQorICAgICAgICAgICAgICAgICAgICBzcGVjID0gbnMucG9wKCdfX3NwZWNfXycpCisgICAgICAgICAgICAgICAgICAgIG5zLnBvcCgnX19idWlsdGluc19fJywgTm9uZSkgICMgQW4gaW1wbGVtZW50YXRpb24gZGV0YWlsLgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubmFtZSwgbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmxvYWRlciwgbG9hZGVyKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzKHJlbG9hZGVkLCBtb2R1bGUpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVyLnBhdGgsIGluaXRfcGF0aCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5tYXhEaWZmID0gTm9uZQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X3JlbG9hZF9uYW1lc3BhY2VfY2hhbmdlZChzZWxmKToKKyAgICAgICAgbmFtZSA9ICdzcGFtJworICAgICAgICB3aXRoIHN1cHBvcnQudGVtcF9jd2QoTm9uZSkgYXMgY3dkOgorICAgICAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUoJ3NwYW0nKToKKyAgICAgICAgICAgICAgICB3aXRoIHN1cHBvcnQuRGlyc09uU3lzUGF0aChjd2QpOgorICAgICAgICAgICAgICAgICAgICAjIFN0YXJ0IGFzIGEgbmFtZXNwYWNlIHBhY2thZ2UuCisgICAgICAgICAgICAgICAgICAgIHNlbGYuaW5pdC5pbnZhbGlkYXRlX2NhY2hlcygpCisgICAgICAgICAgICAgICAgICAgIGJhZF9wYXRoID0gb3MucGF0aC5qb2luKGN3ZCwgbmFtZSwgJ19faW5pdC5weScpCisgICAgICAgICAgICAgICAgICAgIGNhY2hlZCA9IHNlbGYudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShiYWRfcGF0aCkKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSB7J19fbmFtZV9fJzogbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fcGFja2FnZV9fJzogbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fZG9jX18nOiBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIG9zLm1rZGlyKG5hbWUpCisgICAgICAgICAgICAgICAgICAgIHdpdGggb3BlbihiYWRfcGF0aCwgJ3cnKSBhcyBpbml0X2ZpbGU6CisgICAgICAgICAgICAgICAgICAgICAgICBpbml0X2ZpbGUud3JpdGUoJ2VnZ3MgPSBOb25lJykKKyAgICAgICAgICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5pbml0LmltcG9ydF9tb2R1bGUobmFtZSkKKyAgICAgICAgICAgICAgICAgICAgbnMgPSB2YXJzKG1vZHVsZSkuY29weSgpCisgICAgICAgICAgICAgICAgICAgIGxvYWRlciA9IG5zLnBvcCgnX19sb2FkZXJfXycpCisgICAgICAgICAgICAgICAgICAgIHBhdGggPSBucy5wb3AoJ19fcGF0aF9fJykKKyAgICAgICAgICAgICAgICAgICAgc3BlYyA9IG5zLnBvcCgnX19zcGVjX18nKQorICAgICAgICAgICAgICAgICAgICBucy5wb3AoJ19fYnVpbHRpbnNfXycsIE5vbmUpICAjIEFuIGltcGxlbWVudGF0aW9uIGRldGFpbC4KKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm5hbWUsIG5hbWUpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5sb2FkZXIsIE5vbmUpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QobG9hZGVyLCBOb25lKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChwYXRoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQoW29zLnBhdGguZGlybmFtZShiYWRfcGF0aCldKSkKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvcik6CisgICAgICAgICAgICAgICAgICAgICAgICAjIGEgTmFtZXNwYWNlTG9hZGVyCisgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZXIucGF0aAorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLCBleHBlY3RlZCkKKworICAgICAgICAgICAgICAgICAgICAjIENoYW5nZSB0byBhIHJlZ3VsYXIgcGFja2FnZS4KKyAgICAgICAgICAgICAgICAgICAgc2VsZi5pbml0LmludmFsaWRhdGVfY2FjaGVzKCkKKyAgICAgICAgICAgICAgICAgICAgaW5pdF9wYXRoID0gb3MucGF0aC5qb2luKGN3ZCwgbmFtZSwgJ19faW5pdF9fLnB5JykKKyAgICAgICAgICAgICAgICAgICAgY2FjaGVkID0gc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKGluaXRfcGF0aCkKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSB7J19fbmFtZV9fJzogbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fcGFja2FnZV9fJzogbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fZmlsZV9fJzogaW5pdF9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX19jYWNoZWRfXyc6IGNhY2hlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fcGF0aF9fJzogW29zLnBhdGguZGlybmFtZShpbml0X3BhdGgpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fZG9jX18nOiBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZWdncyc6IE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgb3MucmVuYW1lKGJhZF9wYXRoLCBpbml0X3BhdGgpCisgICAgICAgICAgICAgICAgICAgIHJlbG9hZGVkID0gc2VsZi5pbml0LnJlbG9hZChtb2R1bGUpCisgICAgICAgICAgICAgICAgICAgIG5zID0gdmFycyhyZWxvYWRlZCkuY29weSgpCisgICAgICAgICAgICAgICAgICAgIGxvYWRlciA9IG5zLnBvcCgnX19sb2FkZXJfXycpCisgICAgICAgICAgICAgICAgICAgIHNwZWMgPSBucy5wb3AoJ19fc3BlY19fJykKKyAgICAgICAgICAgICAgICAgICAgbnMucG9wKCdfX2J1aWx0aW5zX18nLCBOb25lKSAgIyBBbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwuCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5uYW1lLCBuYW1lKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubG9hZGVyLCBsb2FkZXIpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMocmVsb2FkZWQsIG1vZHVsZSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZXIucGF0aCwgaW5pdF9wYXRoKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X3JlbG9hZF9zdWJtb2R1bGUoc2VsZik6CisgICAgICAgICMgU2VlICMxOTg1MS4KKyAgICAgICAgbmFtZSA9ICdzcGFtJworICAgICAgICBzdWJuYW1lID0gJ2hhbScKKyAgICAgICAgd2l0aCB1dGlsLnRlbXBfbW9kdWxlKG5hbWUsIHBrZz1UcnVlKSBhcyBwa2dfZGlyOgorICAgICAgICAgICAgZnVsbG5hbWUsIF8gPSB1dGlsLnN1Ym1vZHVsZShuYW1lLCBzdWJuYW1lLCBwa2dfZGlyKQorICAgICAgICAgICAgaGFtID0gc2VsZi5pbml0LmltcG9ydF9tb2R1bGUoZnVsbG5hbWUpCisgICAgICAgICAgICByZWxvYWRlZCA9IHNlbGYuaW5pdC5yZWxvYWQoaGFtKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhyZWxvYWRlZCwgaGFtKQorCisKK2NsYXNzIEZyb3plbl9SZWxvYWRUZXN0cyhSZWxvYWRUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGluaXQgPSBmcm96ZW5faW5pdAorICAgIHV0aWwgPSBmcm96ZW5fdXRpbAorCitjbGFzcyBTb3VyY2VfUmVsb2FkVGVzdHMoUmVsb2FkVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBpbml0ID0gc291cmNlX2luaXQKKyAgICB1dGlsID0gc291cmNlX3V0aWwKKworCitjbGFzcyBJbnZhbGlkYXRlQ2FjaGVUZXN0czoKIAogICAgIGRlZiB0ZXN0X21ldGhvZF9jYWxsZWQoc2VsZik6CiAgICAgICAgICMgSWYgZGVmaW5lZCB0aGUgbWV0aG9kIHNob3VsZCBiZSBjYWxsZWQuCkBAIC0xNTUsNDggKzM3Myw2NSBAQAogICAgICAgICBzZWxmLmFkZENsZWFudXAobGFtYmRhOiBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZS5fX2RlbGl0ZW1fXyhrZXkpKQogICAgICAgICBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZVtrZXldID0gcGF0aF9pbnMKICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGxhbWJkYTogc3lzLm1ldGFfcGF0aC5yZW1vdmUobWV0YV9pbnMpKQotICAgICAgICBpbXBvcnRsaWIuaW52YWxpZGF0ZV9jYWNoZXMoKQorICAgICAgICBzZWxmLmluaXQuaW52YWxpZGF0ZV9jYWNoZXMoKQogICAgICAgICBzZWxmLmFzc2VydFRydWUobWV0YV9pbnMuY2FsbGVkKQogICAgICAgICBzZWxmLmFzc2VydFRydWUocGF0aF9pbnMuY2FsbGVkKQogCiAgICAgZGVmIHRlc3RfbWV0aG9kX2xhY2tpbmcoc2VsZik6CiAgICAgICAgICMgVGhlcmUgc2hvdWxkIGJlIG5vIGlzc3VlcyBpZiB0aGUgbWV0aG9kIGlzIG5vdCBkZWZpbmVkLgogICAgICAgICBrZXkgPSAnZ29iYmxlZGVlZ29vaycKLSAgICAgICAgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGVba2V5XSA9IGltcC5OdWxsSW1wb3J0ZXIoJ2FiYycpCisgICAgICAgIHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlW2tleV0gPSBOb25lCiAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChsYW1iZGE6IHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlLl9fZGVsaXRlbV9fKGtleSkpCi0gICAgICAgIGltcG9ydGxpYi5pbnZhbGlkYXRlX2NhY2hlcygpICAjIFNob3VsZG4ndCB0cmlnZ2VyIGFuIGV4Y2VwdGlvbi4KKyAgICAgICAgc2VsZi5pbml0LmludmFsaWRhdGVfY2FjaGVzKCkgICMgU2hvdWxkbid0IHRyaWdnZXIgYW4gZXhjZXB0aW9uLgorCitjbGFzcyBGcm96ZW5fSW52YWxpZGF0ZUNhY2hlVGVzdHMoSW52YWxpZGF0ZUNhY2hlVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBpbml0ID0gZnJvemVuX2luaXQKKworY2xhc3MgU291cmNlX0ludmFsaWRhdGVDYWNoZVRlc3RzKEludmFsaWRhdGVDYWNoZVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgaW5pdCA9IHNvdXJjZV9pbml0CiAKIAogY2xhc3MgRnJvemVuSW1wb3J0bGliVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3Rfbm9fZnJvemVuX2ltcG9ydGxpYihzZWxmKToKICAgICAgICAgIyBTaG91bGQgYmUgYWJsZSB0byBpbXBvcnQgdy9vIF9mcm96ZW5faW1wb3J0bGliIGJlaW5nIGRlZmluZWQuCi0gICAgICAgIG1vZHVsZSA9IHN1cHBvcnQuaW1wb3J0X2ZyZXNoX21vZHVsZSgnaW1wb3J0bGliJywgYmxvY2tlZD1bJ19mcm96ZW5faW1wb3J0bGliJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNpbnN0YW5jZShtb2R1bGUuX19sb2FkZXJfXywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlcikpCisgICAgICAgICMgQ2FuJ3QgZG8gYW4gaXNpbnN0YW5jZSgpIGNoZWNrIHNpbmNlIHNlcGFyYXRlIGNvcGllcyBvZiBpbXBvcnRsaWIKKyAgICAgICAgIyBtYXkgaGF2ZSBiZWVuIHVzZWQgZm9yIGltcG9ydCwgc28ganVzdCBjaGVjayB0aGUgbmFtZSBpcyBub3QgZm9yIHRoZQorICAgICAgICAjIGZyb3plbiBsb2FkZXIuCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoc291cmNlX2luaXQuX19sb2FkZXJfXy5fX2NsYXNzX18uX19uYW1lX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0Zyb3plbkltcG9ydGVyJykKIAogCi1jbGFzcyBTdGFydHVwVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorY2xhc3MgU3RhcnR1cFRlc3RzOgogCiAgICAgZGVmIHRlc3RfZXZlcnlvbmVfaGFzX19fbG9hZGVyX18oc2VsZik6CiAgICAgICAgICMgSXNzdWUgIzE3MDk4OiBhbGwgbW9kdWxlcyBzaG91bGQgaGF2ZSBfX2xvYWRlcl9fIGRlZmluZWQuCiAgICAgICAgIGZvciBuYW1lLCBtb2R1bGUgaW4gc3lzLm1vZHVsZXMuaXRlbXMoKToKICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UobW9kdWxlLCB0eXBlcy5Nb2R1bGVUeXBlKToKLSAgICAgICAgICAgICAgICBpZiBuYW1lIGluIHN5cy5idWlsdGluX21vZHVsZV9uYW1lczoKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbXBvcnRsaWIubWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuX19sb2FkZXJfXykKLSAgICAgICAgICAgICAgICBlbGlmIGltcC5pc19mcm96ZW4obmFtZSk6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1wb3J0bGliLm1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuX19sb2FkZXJfXykKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChuYW1lPW5hbWUpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihtb2R1bGUsICdfX2xvYWRlcl9fJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAneyFyfSBsYWNrcyBhIF9fbG9hZGVyX18gYXR0cmlidXRlJy5mb3JtYXQobmFtZSkpCisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYubWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlci5maW5kX21vZHVsZShuYW1lKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QobW9kdWxlLl9fbG9hZGVyX18sIE5vbmUpCisgICAgICAgICAgICAgICAgICAgIGVsaWYgc2VsZi5tYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIuZmluZF9tb2R1bGUobmFtZSk6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90KG1vZHVsZS5fX2xvYWRlcl9fLCBOb25lKQogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAotICAgIHJ1bl91bml0dGVzdChJbXBvcnRNb2R1bGVUZXN0cywKLSAgICAgICAgICAgICAgICAgRmluZExvYWRlclRlc3RzLAotICAgICAgICAgICAgICAgICBJbnZhbGlkYXRlQ2FjaGVUZXN0cywKLSAgICAgICAgICAgICAgICAgRnJvemVuSW1wb3J0bGliVGVzdHMsCi0gICAgICAgICAgICAgICAgIFN0YXJ0dXBUZXN0cykKKyAgICBkZWYgdGVzdF9ldmVyeW9uZV9oYXNfX19zcGVjX18oc2VsZik6CisgICAgICAgIGZvciBuYW1lLCBtb2R1bGUgaW4gc3lzLm1vZHVsZXMuaXRlbXMoKToKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UobW9kdWxlLCB0eXBlcy5Nb2R1bGVUeXBlKToKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChuYW1lPW5hbWUpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihtb2R1bGUsICdfX3NwZWNfXycpKQorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLm1hY2hpbmVyeS5CdWlsdGluSW1wb3J0ZXIuZmluZF9tb2R1bGUobmFtZSk6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90KG1vZHVsZS5fX3NwZWNfXywgTm9uZSkKKyAgICAgICAgICAgICAgICAgICAgZWxpZiBzZWxmLm1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlci5maW5kX21vZHVsZShuYW1lKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QobW9kdWxlLl9fc3BlY19fLCBOb25lKQorCitjbGFzcyBGcm96ZW5fU3RhcnR1cFRlc3RzKFN0YXJ0dXBUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIG1hY2hpbmVyeSA9IGZyb3plbl9tYWNoaW5lcnkKKworY2xhc3MgU291cmNlX1N0YXJ0dXBUZXN0cyhTdGFydHVwVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBtYWNoaW5lcnkgPSBzb3VyY2VfbWFjaGluZXJ5CiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvdGVzdF9sb2Nrcy5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3Rlc3RfbG9ja3MucHkKaW5kZXggYzM3M2IxMS4uZGM5N2JhMSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvdGVzdF9sb2Nrcy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi90ZXN0X2xvY2tzLnB5CkBAIC0xLDQgKzEsOCBAQAotZnJvbSBpbXBvcnRsaWIgaW1wb3J0IF9ib290c3RyYXAKK2Zyb20gLiBpbXBvcnQgdXRpbAorZnJvemVuX2luaXQsIHNvdXJjZV9pbml0ID0gdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWInKQorZnJvemVuX2Jvb3RzdHJhcCA9IGZyb3plbl9pbml0Ll9ib290c3RyYXAKK3NvdXJjZV9ib290c3RyYXAgPSBzb3VyY2VfaW5pdC5fYm9vdHN0cmFwCisKIGltcG9ydCBzeXMKIGltcG9ydCB0aW1lCiBpbXBvcnQgdW5pdHRlc3QKQEAgLTEzLDE0ICsxNyw5IEBACiBlbHNlOgogICAgIGZyb20gdGVzdCBpbXBvcnQgbG9ja190ZXN0cwogCi0KLUxvY2tUeXBlID0gX2Jvb3RzdHJhcC5fTW9kdWxlTG9jawotRGVhZGxvY2tFcnJvciA9IF9ib290c3RyYXAuX0RlYWRsb2NrRXJyb3IKLQotCiBpZiB0aHJlYWRpbmcgaXMgbm90IE5vbmU6Ci0gICAgY2xhc3MgTW9kdWxlTG9ja0FzUkxvY2tUZXN0cyhsb2NrX3Rlc3RzLlJMb2NrVGVzdHMpOgotICAgICAgICBsb2NrdHlwZSA9IHN0YXRpY21ldGhvZChsYW1iZGE6IExvY2tUeXBlKCJzb21lX2xvY2siKSkKKyAgICBjbGFzcyBNb2R1bGVMb2NrQXNSTG9ja1Rlc3RzOgorICAgICAgICBsb2NrdHlwZSA9IGNsYXNzbWV0aG9kKGxhbWJkYSBjbHM6IGNscy5Mb2NrVHlwZSgic29tZV9sb2NrIikpCiAKICAgICAgICAgIyBfaXNfb3duZWQoKSB1bnN1cHBvcnRlZAogICAgICAgICB0ZXN0X19pc19vd25lZCA9IE5vbmUKQEAgLTM0LDEzICszMywyMSBAQAogICAgICAgICAjIF9yZWxlYXNlX3NhdmUoKSB1bnN1cHBvcnRlZAogICAgICAgICB0ZXN0X3JlbGVhc2Vfc2F2ZV91bmFjcXVpcmVkID0gTm9uZQogCisgICAgY2xhc3MgRnJvemVuX01vZHVsZUxvY2tBc1JMb2NrVGVzdHMoTW9kdWxlTG9ja0FzUkxvY2tUZXN0cywgbG9ja190ZXN0cy5STG9ja1Rlc3RzKToKKyAgICAgICAgTG9ja1R5cGUgPSBmcm96ZW5fYm9vdHN0cmFwLl9Nb2R1bGVMb2NrCisKKyAgICBjbGFzcyBTb3VyY2VfTW9kdWxlTG9ja0FzUkxvY2tUZXN0cyhNb2R1bGVMb2NrQXNSTG9ja1Rlc3RzLCBsb2NrX3Rlc3RzLlJMb2NrVGVzdHMpOgorICAgICAgICBMb2NrVHlwZSA9IHNvdXJjZV9ib290c3RyYXAuX01vZHVsZUxvY2sKKwogZWxzZToKLSAgICBjbGFzcyBNb2R1bGVMb2NrQXNSTG9ja1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBjbGFzcyBGcm96ZW5fTW9kdWxlTG9ja0FzUkxvY2tUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgIHBhc3MKKworICAgIGNsYXNzIFNvdXJjZV9Nb2R1bGVMb2NrQXNSTG9ja1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgcGFzcwogCiAKLUB1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZGluZywgInRocmVhZHMgbmVlZGVkIGZvciB0aGlzIHRlc3QiKQotY2xhc3MgRGVhZGxvY2tBdm9pZGFuY2VUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBEZWFkbG9ja0F2b2lkYW5jZVRlc3RzOgogCiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICB0cnk6CkBAIC01NSw3ICs2Miw3IEBACiAKICAgICBkZWYgcnVuX2RlYWRsb2NrX2F2b2lkYW5jZV90ZXN0KHNlbGYsIGNyZWF0ZV9kZWFkbG9jayk6CiAgICAgICAgIE5MT0NLUyA9IDEwCi0gICAgICAgIGxvY2tzID0gW0xvY2tUeXBlKHN0cihpKSkgZm9yIGkgaW4gcmFuZ2UoTkxPQ0tTKV0KKyAgICAgICAgbG9ja3MgPSBbc2VsZi5Mb2NrVHlwZShzdHIoaSkpIGZvciBpIGluIHJhbmdlKE5MT0NLUyldCiAgICAgICAgIHBhaXJzID0gWyhsb2Nrc1tpXSwgbG9ja3NbKGkrMSklTkxPQ0tTXSkgZm9yIGkgaW4gcmFuZ2UoTkxPQ0tTKV0KICAgICAgICAgaWYgY3JlYXRlX2RlYWRsb2NrOgogICAgICAgICAgICAgTlRIUkVBRFMgPSBOTE9DS1MKQEAgLTY3LDcgKzc0LDcgQEAKICAgICAgICAgICAgICIiIlRyeSB0byBhY3F1aXJlIHRoZSBsb2NrLiBSZXR1cm4gVHJ1ZSBvbiBzdWNjZXNzLCBGYWxzZSBvbiBkZWFkbG9jay4iIiIKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBsb2NrLmFjcXVpcmUoKQotICAgICAgICAgICAgZXhjZXB0IERlYWRsb2NrRXJyb3I6CisgICAgICAgICAgICBleGNlcHQgc2VsZi5EZWFkbG9ja0Vycm9yOgogICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQpAQCAtOTksMzAgKzEwNiw1MCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdHMuY291bnQoKFRydWUsIEZhbHNlKSksIDApCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0cy5jb3VudCgoVHJ1ZSwgVHJ1ZSkpLCBsZW4ocmVzdWx0cykpCiAKK0B1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZGluZywgInRocmVhZHMgbmVlZGVkIGZvciB0aGlzIHRlc3QiKQorY2xhc3MgRnJvemVuX0RlYWRsb2NrQXZvaWRhbmNlVGVzdHMoRGVhZGxvY2tBdm9pZGFuY2VUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIExvY2tUeXBlID0gZnJvemVuX2Jvb3RzdHJhcC5fTW9kdWxlTG9jaworICAgIERlYWRsb2NrRXJyb3IgPSBmcm96ZW5fYm9vdHN0cmFwLl9EZWFkbG9ja0Vycm9yCiAKLWNsYXNzIExpZmV0aW1lVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkaW5nLCAidGhyZWFkcyBuZWVkZWQgZm9yIHRoaXMgdGVzdCIpCitjbGFzcyBTb3VyY2VfRGVhZGxvY2tBdm9pZGFuY2VUZXN0cyhEZWFkbG9ja0F2b2lkYW5jZVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgTG9ja1R5cGUgPSBzb3VyY2VfYm9vdHN0cmFwLl9Nb2R1bGVMb2NrCisgICAgRGVhZGxvY2tFcnJvciA9IHNvdXJjZV9ib290c3RyYXAuX0RlYWRsb2NrRXJyb3IKKworCitjbGFzcyBMaWZldGltZVRlc3RzOgogCiAgICAgZGVmIHRlc3RfbG9ja19saWZldGltZShzZWxmKToKICAgICAgICAgbmFtZSA9ICJ4eXp6eSIKLSAgICAgICAgc2VsZi5hc3NlcnROb3RJbihuYW1lLCBfYm9vdHN0cmFwLl9tb2R1bGVfbG9ja3MpCi0gICAgICAgIGxvY2sgPSBfYm9vdHN0cmFwLl9nZXRfbW9kdWxlX2xvY2sobmFtZSkKLSAgICAgICAgc2VsZi5hc3NlcnRJbihuYW1lLCBfYm9vdHN0cmFwLl9tb2R1bGVfbG9ja3MpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4obmFtZSwgc2VsZi5ib290c3RyYXAuX21vZHVsZV9sb2NrcykKKyAgICAgICAgbG9jayA9IHNlbGYuYm9vdHN0cmFwLl9nZXRfbW9kdWxlX2xvY2sobmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihuYW1lLCBzZWxmLmJvb3RzdHJhcC5fbW9kdWxlX2xvY2tzKQogICAgICAgICB3ciA9IHdlYWtyZWYucmVmKGxvY2spCiAgICAgICAgIGRlbCBsb2NrCiAgICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4obmFtZSwgX2Jvb3RzdHJhcC5fbW9kdWxlX2xvY2tzKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKG5hbWUsIHNlbGYuYm9vdHN0cmFwLl9tb2R1bGVfbG9ja3MpCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHdyKCkpCiAKICAgICBkZWYgdGVzdF9hbGxfbG9ja3Moc2VsZik6CiAgICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgbGVuKF9ib290c3RyYXAuX21vZHVsZV9sb2NrcyksIF9ib290c3RyYXAuX21vZHVsZV9sb2NrcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBsZW4oc2VsZi5ib290c3RyYXAuX21vZHVsZV9sb2NrcyksCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5ib290c3RyYXAuX21vZHVsZV9sb2NrcykKKworY2xhc3MgRnJvemVuX0xpZmV0aW1lVGVzdHMoTGlmZXRpbWVUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGJvb3RzdHJhcCA9IGZyb3plbl9ib290c3RyYXAKKworY2xhc3MgU291cmNlX0xpZmV0aW1lVGVzdHMoTGlmZXRpbWVUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGJvb3RzdHJhcCA9IHNvdXJjZV9ib290c3RyYXAKIAogCiBAc3VwcG9ydC5yZWFwX3RocmVhZHMKIGRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChNb2R1bGVMb2NrQXNSTG9ja1Rlc3RzLAotICAgICAgICAgICAgICAgICAgICAgICAgIERlYWRsb2NrQXZvaWRhbmNlVGVzdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgTGlmZXRpbWVUZXN0cykKKyAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChGcm96ZW5fTW9kdWxlTG9ja0FzUkxvY2tUZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICBTb3VyY2VfTW9kdWxlTG9ja0FzUkxvY2tUZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICBGcm96ZW5fRGVhZGxvY2tBdm9pZGFuY2VUZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICBTb3VyY2VfRGVhZGxvY2tBdm9pZGFuY2VUZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICBGcm96ZW5fTGlmZXRpbWVUZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICBTb3VyY2VfTGlmZXRpbWVUZXN0cykKIAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9uYW1lc3BhY2VfcGtncy5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3Rlc3RfbmFtZXNwYWNlX3BrZ3MucHkKc2ltaWxhcml0eSBpbmRleCA5OCUKcmVuYW1lIGZyb20gTGliL3Rlc3QvdGVzdF9uYW1lc3BhY2VfcGtncy5weQpyZW5hbWUgdG8gTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvdGVzdF9uYW1lc3BhY2VfcGtncy5weQppbmRleCA3MDY3YjEyLi42NjM5NjEyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X25hbWVzcGFjZV9wa2dzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3Rlc3RfbmFtZXNwYWNlX3BrZ3MucHkKQEAgLTEsNyArMSwxMCBAQAotaW1wb3J0IHN5cwogaW1wb3J0IGNvbnRleHRsaWIKLWltcG9ydCB1bml0dGVzdAoraW1wb3J0IGltcG9ydGxpYi5hYmMKK2ltcG9ydCBpbXBvcnRsaWIubWFjaGluZXJ5CiBpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB0eXBlcworaW1wb3J0IHVuaXR0ZXN0CiAKIGZyb20gdGVzdC50ZXN0X2ltcG9ydGxpYiBpbXBvcnQgdXRpbAogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdApAQCAtMjg2LDkgKzI4OSw1IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYV90ZXN0LmF0dHIsICdpbiBtb2R1bGUnKQogCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBydW5fdW5pdHRlc3QoKk5hbWVzcGFjZVBhY2thZ2VUZXN0Ll9fc3ViY2xhc3Nlc19fKCkpCi0KLQogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvdGVzdF9zcGVjLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvdGVzdF9zcGVjLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxNTQxZjYKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi90ZXN0X3NwZWMucHkKQEAgLTAsMCArMSw5NTcgQEAKK2Zyb20gLiBpbXBvcnQgdXRpbAorCitmcm96ZW5faW5pdCwgc291cmNlX2luaXQgPSB1dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYicpCitmcm96ZW5fYm9vdHN0cmFwID0gZnJvemVuX2luaXQuX2Jvb3RzdHJhcAorc291cmNlX2Jvb3RzdHJhcCA9IHNvdXJjZV9pbml0Ll9ib290c3RyYXAKK2Zyb3plbl9tYWNoaW5lcnksIHNvdXJjZV9tYWNoaW5lcnkgPSB1dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYi5tYWNoaW5lcnknKQorZnJvemVuX3V0aWwsIHNvdXJjZV91dGlsID0gdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWIudXRpbCcpCisKK2ltcG9ydCBvcy5wYXRoCitmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgQ2xlYW5JbXBvcnQKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHN5cworaW1wb3J0IHdhcm5pbmdzCisKKworCitjbGFzcyBUZXN0TG9hZGVyOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGg9Tm9uZSwgaXNfcGFja2FnZT1Ob25lKToKKyAgICAgICAgc2VsZi5wYXRoID0gcGF0aAorICAgICAgICBzZWxmLnBhY2thZ2UgPSBpc19wYWNrYWdlCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAnPFRlc3RMb2FkZXIgb2JqZWN0PicKKworICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgaWYgbmFtZSA9PSAnZ2V0X2ZpbGVuYW1lJyBhbmQgc2VsZi5wYXRoIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2dldF9maWxlbmFtZQorICAgICAgICBpZiBuYW1lID09ICdpc19wYWNrYWdlJzoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9pc19wYWNrYWdlCisgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKG5hbWUpCisKKyAgICBkZWYgX2dldF9maWxlbmFtZShzZWxmLCBuYW1lKToKKyAgICAgICAgcmV0dXJuIHNlbGYucGF0aAorCisgICAgZGVmIF9pc19wYWNrYWdlKHNlbGYsIG5hbWUpOgorICAgICAgICByZXR1cm4gc2VsZi5wYWNrYWdlCisKKworY2xhc3MgTmV3TG9hZGVyKFRlc3RMb2FkZXIpOgorCisgICAgRUdHUyA9IDEKKworICAgIGRlZiBleGVjX21vZHVsZShzZWxmLCBtb2R1bGUpOgorICAgICAgICBtb2R1bGUuZWdncyA9IHNlbGYuRUdHUworCisKK2NsYXNzIExlZ2FjeUxvYWRlcihUZXN0TG9hZGVyKToKKworICAgIEhBTSA9IC0xCisKKyAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcigiaWdub3JlIiwgRGVwcmVjYXRpb25XYXJuaW5nKQorCisgICAgICAgIEBmcm96ZW5fdXRpbC5tb2R1bGVfZm9yX2xvYWRlcgorICAgICAgICBkZWYgbG9hZF9tb2R1bGUoc2VsZiwgbW9kdWxlKToKKyAgICAgICAgICAgIG1vZHVsZS5oYW0gPSBzZWxmLkhBTQorICAgICAgICAgICAgcmV0dXJuIG1vZHVsZQorCisKK2NsYXNzIE1vZHVsZVNwZWNUZXN0czoKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5uYW1lID0gJ3NwYW0nCisgICAgICAgIHNlbGYucGF0aCA9ICdzcGFtLnB5JworICAgICAgICBzZWxmLmNhY2hlZCA9IHNlbGYudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShzZWxmLnBhdGgpCisgICAgICAgIHNlbGYubG9hZGVyID0gVGVzdExvYWRlcigpCisgICAgICAgIHNlbGYuc3BlYyA9IHNlbGYubWFjaGluZXJ5Lk1vZHVsZVNwZWMoc2VsZi5uYW1lLCBzZWxmLmxvYWRlcikKKyAgICAgICAgc2VsZi5sb2Nfc3BlYyA9IHNlbGYubWFjaGluZXJ5Lk1vZHVsZVNwZWMoc2VsZi5uYW1lLCBzZWxmLmxvYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luPXNlbGYucGF0aCkKKyAgICAgICAgc2VsZi5sb2Nfc3BlYy5fc2V0X2ZpbGVhdHRyID0gVHJ1ZQorCisgICAgZGVmIHRlc3RfZGVmYXVsdChzZWxmKToKKyAgICAgICAgc3BlYyA9IHNlbGYubWFjaGluZXJ5Lk1vZHVsZVNwZWMoc2VsZi5uYW1lLCBzZWxmLmxvYWRlcikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubmFtZSwgc2VsZi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubG9hZGVyLCBzZWxmLmxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLm9yaWdpbiwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmxvYWRlcl9zdGF0ZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMuY2FjaGVkLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNwZWMuaGFzX2xvY2F0aW9uKQorCisgICAgZGVmIHRlc3RfZGVmYXVsdF9ub19sb2FkZXIoc2VsZik6CisgICAgICAgIHNwZWMgPSBzZWxmLm1hY2hpbmVyeS5Nb2R1bGVTcGVjKHNlbGYubmFtZSwgTm9uZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubmFtZSwgc2VsZi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMubG9hZGVyLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMub3JpZ2luLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMubG9hZGVyX3N0YXRlLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5jYWNoZWQsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc3BlYy5oYXNfbG9jYXRpb24pCisKKyAgICBkZWYgdGVzdF9kZWZhdWx0X2lzX3BhY2thZ2VfZmFsc2Uoc2VsZik6CisgICAgICAgIHNwZWMgPSBzZWxmLm1hY2hpbmVyeS5Nb2R1bGVTcGVjKHNlbGYubmFtZSwgc2VsZi5sb2FkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzX3BhY2thZ2U9RmFsc2UpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm5hbWUsIHNlbGYubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmxvYWRlciwgc2VsZi5sb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5vcmlnaW4sIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5sb2FkZXJfc3RhdGUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmNhY2hlZCwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzcGVjLmhhc19sb2NhdGlvbikKKworICAgIGRlZiB0ZXN0X2RlZmF1bHRfaXNfcGFja2FnZV90cnVlKHNlbGYpOgorICAgICAgICBzcGVjID0gc2VsZi5tYWNoaW5lcnkuTW9kdWxlU3BlYyhzZWxmLm5hbWUsIHNlbGYubG9hZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc19wYWNrYWdlPVRydWUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm5hbWUsIHNlbGYubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmxvYWRlciwgc2VsZi5sb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5vcmlnaW4sIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5sb2FkZXJfc3RhdGUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucywgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5jYWNoZWQsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc3BlYy5oYXNfbG9jYXRpb24pCisKKyAgICBkZWYgdGVzdF9oYXNfbG9jYXRpb25fc2V0dGVyKHNlbGYpOgorICAgICAgICBzcGVjID0gc2VsZi5tYWNoaW5lcnkuTW9kdWxlU3BlYyhzZWxmLm5hbWUsIHNlbGYubG9hZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW49J3NvbWV3aGVyZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc3BlYy5oYXNfbG9jYXRpb24pCisgICAgICAgIHNwZWMuaGFzX2xvY2F0aW9uID0gVHJ1ZQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3BlYy5oYXNfbG9jYXRpb24pCisKKyAgICBkZWYgdGVzdF9lcXVhbGl0eShzZWxmKToKKyAgICAgICAgb3RoZXIgPSB0eXBlKHN5cy5pbXBsZW1lbnRhdGlvbikobmFtZT1zZWxmLm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlcj1zZWxmLmxvYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc19sb2NhdGlvbj1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVkPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5zcGVjID09IG90aGVyKQorCisgICAgZGVmIHRlc3RfZXF1YWxpdHlfbG9jYXRpb24oc2VsZik6CisgICAgICAgIG90aGVyID0gdHlwZShzeXMuaW1wbGVtZW50YXRpb24pKG5hbWU9c2VsZi5uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZXI9c2VsZi5sb2FkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbj1zZWxmLnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc19sb2NhdGlvbj1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZWQ9c2VsZi5jYWNoZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9jX3NwZWMsIG90aGVyKQorCisgICAgZGVmIHRlc3RfaW5lcXVhbGl0eShzZWxmKToKKyAgICAgICAgb3RoZXIgPSB0eXBlKHN5cy5pbXBsZW1lbnRhdGlvbikobmFtZT0naGFtJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVyPXNlbGYubG9hZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW49Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnM9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzX2xvY2F0aW9uPUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZWQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoc2VsZi5zcGVjLCBvdGhlcikKKworICAgIGRlZiB0ZXN0X2luZXF1YWxpdHlfaW5jb21wbGV0ZShzZWxmKToKKyAgICAgICAgb3RoZXIgPSB0eXBlKHN5cy5pbXBsZW1lbnRhdGlvbikobmFtZT1zZWxmLm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlcj1zZWxmLmxvYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoc2VsZi5zcGVjLCBvdGhlcikKKworICAgIGRlZiB0ZXN0X3BhY2thZ2Uoc2VsZik6CisgICAgICAgIHNwZWMgPSBzZWxmLm1hY2hpbmVyeS5Nb2R1bGVTcGVjKCdzcGFtLmVnZ3MnLCBzZWxmLmxvYWRlcikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMucGFyZW50LCAnc3BhbScpCisKKyAgICBkZWYgdGVzdF9wYWNrYWdlX2lzX3BhY2thZ2Uoc2VsZik6CisgICAgICAgIHNwZWMgPSBzZWxmLm1hY2hpbmVyeS5Nb2R1bGVTcGVjKCdzcGFtLmVnZ3MnLCBzZWxmLmxvYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfcGFja2FnZT1UcnVlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5wYXJlbnQsICdzcGFtLmVnZ3MnKQorCisgICAgIyBjYWNoZWQKKworICAgIGRlZiB0ZXN0X2NhY2hlZF9zZXQoc2VsZik6CisgICAgICAgIGJlZm9yZSA9IHNlbGYuc3BlYy5jYWNoZWQKKyAgICAgICAgc2VsZi5zcGVjLmNhY2hlZCA9ICd0aGVyZScKKyAgICAgICAgYWZ0ZXIgPSBzZWxmLnNwZWMuY2FjaGVkCisKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhiZWZvcmUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWZ0ZXIsICd0aGVyZScpCisKKyAgICBkZWYgdGVzdF9jYWNoZWRfbm9fb3JpZ2luKHNlbGYpOgorICAgICAgICBzcGVjID0gc2VsZi5tYWNoaW5lcnkuTW9kdWxlU3BlYyhzZWxmLm5hbWUsIHNlbGYubG9hZGVyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5jYWNoZWQsIE5vbmUpCisKKyAgICBkZWYgdGVzdF9jYWNoZWRfd2l0aF9vcmlnaW5fbm90X2xvY2F0aW9uKHNlbGYpOgorICAgICAgICBzcGVjID0gc2VsZi5tYWNoaW5lcnkuTW9kdWxlU3BlYyhzZWxmLm5hbWUsIHNlbGYubG9hZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW49c2VsZi5wYXRoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5jYWNoZWQsIE5vbmUpCisKKyAgICBkZWYgdGVzdF9jYWNoZWRfc291cmNlKHNlbGYpOgorICAgICAgICBleHBlY3RlZCA9IHNlbGYudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShzZWxmLnBhdGgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvY19zcGVjLmNhY2hlZCwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9jYWNoZWRfc291cmNlX3Vua25vd25fc3VmZml4KHNlbGYpOgorICAgICAgICBzZWxmLmxvY19zcGVjLm9yaWdpbiA9ICdzcGFtLnNwYW1zcGFtc3BhbScKKworICAgICAgICBzZWxmLmFzc2VydElzKHNlbGYubG9jX3NwZWMuY2FjaGVkLCBOb25lKQorCisgICAgZGVmIHRlc3RfY2FjaGVkX3NvdXJjZV9taXNzaW5nX2NhY2hlX3RhZyhzZWxmKToKKyAgICAgICAgb3JpZ2luYWwgPSBzeXMuaW1wbGVtZW50YXRpb24uY2FjaGVfdGFnCisgICAgICAgIHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWcgPSBOb25lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNhY2hlZCA9IHNlbGYubG9jX3NwZWMuY2FjaGVkCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzeXMuaW1wbGVtZW50YXRpb24uY2FjaGVfdGFnID0gb3JpZ2luYWwKKworICAgICAgICBzZWxmLmFzc2VydElzKGNhY2hlZCwgTm9uZSkKKworICAgIGRlZiB0ZXN0X2NhY2hlZF9zb3VyY2VsZXNzKHNlbGYpOgorICAgICAgICBzZWxmLmxvY19zcGVjLm9yaWdpbiA9ICdzcGFtLnB5YycKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9jX3NwZWMuY2FjaGVkLCAnc3BhbS5weWMnKQorCisKK2NsYXNzIEZyb3plbl9Nb2R1bGVTcGVjVGVzdHMoTW9kdWxlU3BlY1Rlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgdXRpbCA9IGZyb3plbl91dGlsCisgICAgbWFjaGluZXJ5ID0gZnJvemVuX21hY2hpbmVyeQorCisKK2NsYXNzIFNvdXJjZV9Nb2R1bGVTcGVjVGVzdHMoTW9kdWxlU3BlY1Rlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgdXRpbCA9IHNvdXJjZV91dGlsCisgICAgbWFjaGluZXJ5ID0gc291cmNlX21hY2hpbmVyeQorCisKK2NsYXNzIE1vZHVsZVNwZWNNZXRob2RzVGVzdHM6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubmFtZSA9ICdzcGFtJworICAgICAgICBzZWxmLnBhdGggPSAnc3BhbS5weScKKyAgICAgICAgc2VsZi5jYWNoZWQgPSBzZWxmLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2Uoc2VsZi5wYXRoKQorICAgICAgICBzZWxmLmxvYWRlciA9IFRlc3RMb2FkZXIoKQorICAgICAgICBzZWxmLnNwZWMgPSBzZWxmLm1hY2hpbmVyeS5Nb2R1bGVTcGVjKHNlbGYubmFtZSwgc2VsZi5sb2FkZXIpCisgICAgICAgIHNlbGYubG9jX3NwZWMgPSBzZWxmLm1hY2hpbmVyeS5Nb2R1bGVTcGVjKHNlbGYubmFtZSwgc2VsZi5sb2FkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbj1zZWxmLnBhdGgpCisgICAgICAgIHNlbGYubG9jX3NwZWMuX3NldF9maWxlYXR0ciA9IFRydWUKKworICAgICMgaW5pdF9tb2R1bGVfYXR0cnMKKworICAgIGRlZiB0ZXN0X2luaXRfbW9kdWxlX2F0dHJzKHNlbGYpOgorICAgICAgICBtb2R1bGUgPSB0eXBlKHN5cykoc2VsZi5uYW1lKQorICAgICAgICBzcGVjID0gc2VsZi5tYWNoaW5lcnkuTW9kdWxlU3BlYyhzZWxmLm5hbWUsIHNlbGYubG9hZGVyKQorICAgICAgICBzZWxmLmJvb3RzdHJhcC5fU3BlY01ldGhvZHMoc3BlYykuaW5pdF9tb2R1bGVfYXR0cnMobW9kdWxlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCBzcGVjLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobW9kdWxlLl9fbG9hZGVyX18sIHNwZWMubG9hZGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX3BhY2thZ2VfXywgc3BlYy5wYXJlbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobW9kdWxlLl9fc3BlY19fLCBzcGVjKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIobW9kdWxlLCAnX19wYXRoX18nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKG1vZHVsZSwgJ19fZmlsZV9fJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihtb2R1bGUsICdfX2NhY2hlZF9fJykpCisKKyAgICBkZWYgdGVzdF9pbml0X21vZHVsZV9hdHRyc19wYWNrYWdlKHNlbGYpOgorICAgICAgICBtb2R1bGUgPSB0eXBlKHN5cykoc2VsZi5uYW1lKQorICAgICAgICBzcGVjID0gc2VsZi5tYWNoaW5lcnkuTW9kdWxlU3BlYyhzZWxmLm5hbWUsIHNlbGYubG9hZGVyKQorICAgICAgICBzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zID0gWydzcGFtJywgJ2hhbSddCisgICAgICAgIHNlbGYuYm9vdHN0cmFwLl9TcGVjTWV0aG9kcyhzcGVjKS5pbml0X21vZHVsZV9hdHRycyhtb2R1bGUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19uYW1lX18sIHNwZWMubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhtb2R1bGUuX19sb2FkZXJfXywgc3BlYy5sb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fcGFja2FnZV9fLCBzcGVjLnBhcmVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhtb2R1bGUuX19zcGVjX18sIHNwZWMpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobW9kdWxlLl9fcGF0aF9fLCBzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIobW9kdWxlLCAnX19maWxlX18nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKG1vZHVsZSwgJ19fY2FjaGVkX18nKSkKKworICAgIGRlZiB0ZXN0X2luaXRfbW9kdWxlX2F0dHJzX2xvY2F0aW9uKHNlbGYpOgorICAgICAgICBtb2R1bGUgPSB0eXBlKHN5cykoc2VsZi5uYW1lKQorICAgICAgICBzcGVjID0gc2VsZi5sb2Nfc3BlYworICAgICAgICBzZWxmLmJvb3RzdHJhcC5fU3BlY01ldGhvZHMoc3BlYykuaW5pdF9tb2R1bGVfYXR0cnMobW9kdWxlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCBzcGVjLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobW9kdWxlLl9fbG9hZGVyX18sIHNwZWMubG9hZGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX3BhY2thZ2VfXywgc3BlYy5wYXJlbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobW9kdWxlLl9fc3BlY19fLCBzcGVjKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIobW9kdWxlLCAnX19wYXRoX18nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19maWxlX18sIHNwZWMub3JpZ2luKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX2NhY2hlZF9fLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShzcGVjLm9yaWdpbikpCisKKyAgICBkZWYgdGVzdF9pbml0X21vZHVsZV9hdHRyc19kaWZmZXJlbnRfbmFtZShzZWxmKToKKyAgICAgICAgbW9kdWxlID0gdHlwZShzeXMpKCdlZ2dzJykKKyAgICAgICAgc3BlYyA9IHNlbGYubWFjaGluZXJ5Lk1vZHVsZVNwZWMoc2VsZi5uYW1lLCBzZWxmLmxvYWRlcikKKyAgICAgICAgc2VsZi5ib290c3RyYXAuX1NwZWNNZXRob2RzKHNwZWMpLmluaXRfbW9kdWxlX2F0dHJzKG1vZHVsZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX25hbWVfXywgc3BlYy5uYW1lKQorCisgICAgZGVmIHRlc3RfaW5pdF9tb2R1bGVfYXR0cnNfZGlmZmVyZW50X3NwZWMoc2VsZik6CisgICAgICAgIG1vZHVsZSA9IHR5cGUoc3lzKShzZWxmLm5hbWUpCisgICAgICAgIG1vZHVsZS5fX3NwZWNfXyA9IHNlbGYubWFjaGluZXJ5Lk1vZHVsZVNwZWMoJ2VnZ3MnLCBvYmplY3QoKSkKKyAgICAgICAgc3BlYyA9IHNlbGYubWFjaGluZXJ5Lk1vZHVsZVNwZWMoc2VsZi5uYW1lLCBzZWxmLmxvYWRlcikKKyAgICAgICAgc2VsZi5ib290c3RyYXAuX1NwZWNNZXRob2RzKHNwZWMpLmluaXRfbW9kdWxlX2F0dHJzKG1vZHVsZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX25hbWVfXywgc3BlYy5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydElzKG1vZHVsZS5fX2xvYWRlcl9fLCBzcGVjLmxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19wYWNrYWdlX18sIHNwZWMucGFyZW50KQorICAgICAgICBzZWxmLmFzc2VydElzKG1vZHVsZS5fX3NwZWNfXywgc3BlYykKKworICAgIGRlZiB0ZXN0X2luaXRfbW9kdWxlX2F0dHJzX2FscmVhZHlfc2V0KHNlbGYpOgorICAgICAgICBtb2R1bGUgPSB0eXBlKHN5cykoJ2hhbS5lZ2dzJykKKyAgICAgICAgbW9kdWxlLl9fbG9hZGVyX18gPSBvYmplY3QoKQorICAgICAgICBtb2R1bGUuX19wYWNrYWdlX18gPSAnaGFtJworICAgICAgICBtb2R1bGUuX19wYXRoX18gPSBbJ2VnZ3MnXQorICAgICAgICBtb2R1bGUuX19maWxlX18gPSAnaGFtL2VnZ3MvX19pbml0X18ucHknCisgICAgICAgIG1vZHVsZS5fX2NhY2hlZF9fID0gc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKG1vZHVsZS5fX2ZpbGVfXykKKyAgICAgICAgb3JpZ2luYWwgPSB2YXJzKG1vZHVsZSkuY29weSgpCisgICAgICAgIHNwZWMgPSBzZWxmLmxvY19zcGVjCisgICAgICAgIHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMgPSBbJyddCisgICAgICAgIHNlbGYuYm9vdHN0cmFwLl9TcGVjTWV0aG9kcyhzcGVjKS5pbml0X21vZHVsZV9hdHRycyhtb2R1bGUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhtb2R1bGUuX19sb2FkZXJfXywgb3JpZ2luYWxbJ19fbG9hZGVyX18nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19wYWNrYWdlX18sIG9yaWdpbmFsWydfX3BhY2thZ2VfXyddKQorICAgICAgICBzZWxmLmFzc2VydElzKG1vZHVsZS5fX3BhdGhfXywgb3JpZ2luYWxbJ19fcGF0aF9fJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fZmlsZV9fLCBvcmlnaW5hbFsnX19maWxlX18nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19jYWNoZWRfXywgb3JpZ2luYWxbJ19fY2FjaGVkX18nXSkKKworICAgIGRlZiB0ZXN0X2luaXRfbW9kdWxlX2F0dHJzX2ltbXV0YWJsZShzZWxmKToKKyAgICAgICAgbW9kdWxlID0gb2JqZWN0KCkKKyAgICAgICAgc3BlYyA9IHNlbGYubG9jX3NwZWMKKyAgICAgICAgc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucyA9IFsnJ10KKyAgICAgICAgc2VsZi5ib290c3RyYXAuX1NwZWNNZXRob2RzKHNwZWMpLmluaXRfbW9kdWxlX2F0dHJzKG1vZHVsZSkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIobW9kdWxlLCAnX19uYW1lX18nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKG1vZHVsZSwgJ19fbG9hZGVyX18nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKG1vZHVsZSwgJ19fcGFja2FnZV9fJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihtb2R1bGUsICdfX3NwZWNfXycpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIobW9kdWxlLCAnX19wYXRoX18nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKG1vZHVsZSwgJ19fZmlsZV9fJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihtb2R1bGUsICdfX2NhY2hlZF9fJykpCisKKyAgICAjIGNyZWF0ZSgpCisKKyAgICBkZWYgdGVzdF9jcmVhdGUoc2VsZik6CisgICAgICAgIGNyZWF0ZWQgPSBzZWxmLmJvb3RzdHJhcC5fU3BlY01ldGhvZHMoc2VsZi5zcGVjKS5jcmVhdGUoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3JlYXRlZC5fX25hbWVfXywgc2VsZi5zcGVjLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoY3JlYXRlZC5fX2xvYWRlcl9fLCBzZWxmLnNwZWMubG9hZGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNyZWF0ZWQuX19wYWNrYWdlX18sIHNlbGYuc3BlYy5wYXJlbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoY3JlYXRlZC5fX3NwZWNfXywgc2VsZi5zcGVjKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIoY3JlYXRlZCwgJ19fcGF0aF9fJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihjcmVhdGVkLCAnX19maWxlX18nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKGNyZWF0ZWQsICdfX2NhY2hlZF9fJykpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfZnJvbV9sb2FkZXIoc2VsZik6CisgICAgICAgIG1vZHVsZSA9IHR5cGUoc3lzLmltcGxlbWVudGF0aW9uKSgpCisgICAgICAgIGNsYXNzIENyZWF0aW5nTG9hZGVyKFRlc3RMb2FkZXIpOgorICAgICAgICAgICAgZGVmIGNyZWF0ZV9tb2R1bGUoc2VsZiwgc3BlYyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIG1vZHVsZQorICAgICAgICBzZWxmLnNwZWMubG9hZGVyID0gQ3JlYXRpbmdMb2FkZXIoKQorICAgICAgICBjcmVhdGVkID0gc2VsZi5ib290c3RyYXAuX1NwZWNNZXRob2RzKHNlbGYuc3BlYykuY3JlYXRlKCkKKworICAgICAgICBzZWxmLmFzc2VydElzKGNyZWF0ZWQsIG1vZHVsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjcmVhdGVkLl9fbmFtZV9fLCBzZWxmLnNwZWMubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhjcmVhdGVkLl9fbG9hZGVyX18sIHNlbGYuc3BlYy5sb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3JlYXRlZC5fX3BhY2thZ2VfXywgc2VsZi5zcGVjLnBhcmVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhjcmVhdGVkLl9fc3BlY19fLCBzZWxmLnNwZWMpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihjcmVhdGVkLCAnX19wYXRoX18nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKGNyZWF0ZWQsICdfX2ZpbGVfXycpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIoY3JlYXRlZCwgJ19fY2FjaGVkX18nKSkKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9mcm9tX2xvYWRlcl9ub3RfaGFuZGxlZChzZWxmKToKKyAgICAgICAgY2xhc3MgQ3JlYXRpbmdMb2FkZXIoVGVzdExvYWRlcik6CisgICAgICAgICAgICBkZWYgY3JlYXRlX21vZHVsZShzZWxmLCBzcGVjKToKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBzZWxmLnNwZWMubG9hZGVyID0gQ3JlYXRpbmdMb2FkZXIoKQorICAgICAgICBjcmVhdGVkID0gc2VsZi5ib290c3RyYXAuX1NwZWNNZXRob2RzKHNlbGYuc3BlYykuY3JlYXRlKCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNyZWF0ZWQuX19uYW1lX18sIHNlbGYuc3BlYy5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydElzKGNyZWF0ZWQuX19sb2FkZXJfXywgc2VsZi5zcGVjLmxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjcmVhdGVkLl9fcGFja2FnZV9fLCBzZWxmLnNwZWMucGFyZW50KQorICAgICAgICBzZWxmLmFzc2VydElzKGNyZWF0ZWQuX19zcGVjX18sIHNlbGYuc3BlYykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKGNyZWF0ZWQsICdfX3BhdGhfXycpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIoY3JlYXRlZCwgJ19fZmlsZV9fJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihjcmVhdGVkLCAnX19jYWNoZWRfXycpKQorCisgICAgIyBleGVjKCkKKworICAgIGRlZiB0ZXN0X2V4ZWMoc2VsZik6CisgICAgICAgIHNlbGYuc3BlYy5sb2FkZXIgPSBOZXdMb2FkZXIoKQorICAgICAgICBtb2R1bGUgPSBzZWxmLmJvb3RzdHJhcC5fU3BlY01ldGhvZHMoc2VsZi5zcGVjKS5jcmVhdGUoKQorICAgICAgICBzeXMubW9kdWxlc1tzZWxmLm5hbWVdID0gbW9kdWxlCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihtb2R1bGUsICdlZ2dzJykpCisgICAgICAgIHNlbGYuYm9vdHN0cmFwLl9TcGVjTWV0aG9kcyhzZWxmLnNwZWMpLmV4ZWMobW9kdWxlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLmVnZ3MsIDEpCisKKyAgICAjIGxvYWQoKQorCisgICAgZGVmIHRlc3RfbG9hZChzZWxmKToKKyAgICAgICAgc2VsZi5zcGVjLmxvYWRlciA9IE5ld0xvYWRlcigpCisgICAgICAgIHdpdGggQ2xlYW5JbXBvcnQoc2VsZi5zcGVjLm5hbWUpOgorICAgICAgICAgICAgbG9hZGVkID0gc2VsZi5ib290c3RyYXAuX1NwZWNNZXRob2RzKHNlbGYuc3BlYykubG9hZCgpCisgICAgICAgICAgICBpbnN0YWxsZWQgPSBzeXMubW9kdWxlc1tzZWxmLnNwZWMubmFtZV0KKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlZC5lZ2dzLCAxKQorICAgICAgICBzZWxmLmFzc2VydElzKGxvYWRlZCwgaW5zdGFsbGVkKQorCisgICAgZGVmIHRlc3RfbG9hZF9yZXBsYWNlZChzZWxmKToKKyAgICAgICAgcmVwbGFjZW1lbnQgPSBvYmplY3QoKQorICAgICAgICBjbGFzcyBSZXBsYWNpbmdMb2FkZXIoVGVzdExvYWRlcik6CisgICAgICAgICAgICBkZWYgZXhlY19tb2R1bGUoc2VsZiwgbW9kdWxlKToKKyAgICAgICAgICAgICAgICBzeXMubW9kdWxlc1ttb2R1bGUuX19uYW1lX19dID0gcmVwbGFjZW1lbnQKKyAgICAgICAgc2VsZi5zcGVjLmxvYWRlciA9IFJlcGxhY2luZ0xvYWRlcigpCisgICAgICAgIHdpdGggQ2xlYW5JbXBvcnQoc2VsZi5zcGVjLm5hbWUpOgorICAgICAgICAgICAgbG9hZGVkID0gc2VsZi5ib290c3RyYXAuX1NwZWNNZXRob2RzKHNlbGYuc3BlYykubG9hZCgpCisgICAgICAgICAgICBpbnN0YWxsZWQgPSBzeXMubW9kdWxlc1tzZWxmLnNwZWMubmFtZV0KKworICAgICAgICBzZWxmLmFzc2VydElzKGxvYWRlZCwgcmVwbGFjZW1lbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoaW5zdGFsbGVkLCByZXBsYWNlbWVudCkKKworICAgIGRlZiB0ZXN0X2xvYWRfZmFpbGVkKHNlbGYpOgorICAgICAgICBjbGFzcyBGYWlsZWRMb2FkZXIoVGVzdExvYWRlcik6CisgICAgICAgICAgICBkZWYgZXhlY19tb2R1bGUoc2VsZiwgbW9kdWxlKToKKyAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IKKyAgICAgICAgc2VsZi5zcGVjLmxvYWRlciA9IEZhaWxlZExvYWRlcigpCisgICAgICAgIHdpdGggQ2xlYW5JbXBvcnQoc2VsZi5zcGVjLm5hbWUpOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IpOgorICAgICAgICAgICAgICAgIGxvYWRlZCA9IHNlbGYuYm9vdHN0cmFwLl9TcGVjTWV0aG9kcyhzZWxmLnNwZWMpLmxvYWQoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihzZWxmLnNwZWMubmFtZSwgc3lzLm1vZHVsZXMpCisKKyAgICBkZWYgdGVzdF9sb2FkX2ZhaWxlZF9yZW1vdmVkKHNlbGYpOgorICAgICAgICBjbGFzcyBGYWlsZWRMb2FkZXIoVGVzdExvYWRlcik6CisgICAgICAgICAgICBkZWYgZXhlY19tb2R1bGUoc2VsZiwgbW9kdWxlKToKKyAgICAgICAgICAgICAgICBkZWwgc3lzLm1vZHVsZXNbbW9kdWxlLl9fbmFtZV9fXQorICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcgorICAgICAgICBzZWxmLnNwZWMubG9hZGVyID0gRmFpbGVkTG9hZGVyKCkKKyAgICAgICAgd2l0aCBDbGVhbkltcG9ydChzZWxmLnNwZWMubmFtZSk6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvcik6CisgICAgICAgICAgICAgICAgbG9hZGVkID0gc2VsZi5ib290c3RyYXAuX1NwZWNNZXRob2RzKHNlbGYuc3BlYykubG9hZCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKHNlbGYuc3BlYy5uYW1lLCBzeXMubW9kdWxlcykKKworICAgIGRlZiB0ZXN0X2xvYWRfbGVnYWN5KHNlbGYpOgorICAgICAgICBzZWxmLnNwZWMubG9hZGVyID0gTGVnYWN5TG9hZGVyKCkKKyAgICAgICAgd2l0aCBDbGVhbkltcG9ydChzZWxmLnNwZWMubmFtZSk6CisgICAgICAgICAgICBsb2FkZWQgPSBzZWxmLmJvb3RzdHJhcC5fU3BlY01ldGhvZHMoc2VsZi5zcGVjKS5sb2FkKCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlZC5oYW0sIC0xKQorCisgICAgZGVmIHRlc3RfbG9hZF9sZWdhY3lfYXR0cmlidXRlcyhzZWxmKToKKyAgICAgICAgc2VsZi5zcGVjLmxvYWRlciA9IExlZ2FjeUxvYWRlcigpCisgICAgICAgIHdpdGggQ2xlYW5JbXBvcnQoc2VsZi5zcGVjLm5hbWUpOgorICAgICAgICAgICAgbG9hZGVkID0gc2VsZi5ib290c3RyYXAuX1NwZWNNZXRob2RzKHNlbGYuc3BlYykubG9hZCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhsb2FkZWQuX19sb2FkZXJfXywgc2VsZi5zcGVjLmxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZWQuX19wYWNrYWdlX18sIHNlbGYuc3BlYy5wYXJlbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobG9hZGVkLl9fc3BlY19fLCBzZWxmLnNwZWMpCisKKyAgICBkZWYgdGVzdF9sb2FkX2xlZ2FjeV9hdHRyaWJ1dGVzX2ltbXV0YWJsZShzZWxmKToKKyAgICAgICAgbW9kdWxlID0gb2JqZWN0KCkKKyAgICAgICAgY2xhc3MgSW1tdXRhYmxlTG9hZGVyKFRlc3RMb2FkZXIpOgorICAgICAgICAgICAgZGVmIGxvYWRfbW9kdWxlKHNlbGYsIG5hbWUpOgorICAgICAgICAgICAgICAgIHN5cy5tb2R1bGVzW25hbWVdID0gbW9kdWxlCisgICAgICAgICAgICAgICAgcmV0dXJuIG1vZHVsZQorICAgICAgICBzZWxmLnNwZWMubG9hZGVyID0gSW1tdXRhYmxlTG9hZGVyKCkKKyAgICAgICAgd2l0aCBDbGVhbkltcG9ydChzZWxmLnNwZWMubmFtZSk6CisgICAgICAgICAgICBsb2FkZWQgPSBzZWxmLmJvb3RzdHJhcC5fU3BlY01ldGhvZHMoc2VsZi5zcGVjKS5sb2FkKCkKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhzeXMubW9kdWxlc1tzZWxmLnNwZWMubmFtZV0sIG1vZHVsZSkKKworICAgICMgcmVsb2FkKCkKKworICAgIGRlZiB0ZXN0X3JlbG9hZChzZWxmKToKKyAgICAgICAgc2VsZi5zcGVjLmxvYWRlciA9IE5ld0xvYWRlcigpCisgICAgICAgIHdpdGggQ2xlYW5JbXBvcnQoc2VsZi5zcGVjLm5hbWUpOgorICAgICAgICAgICAgbG9hZGVkID0gc2VsZi5ib290c3RyYXAuX1NwZWNNZXRob2RzKHNlbGYuc3BlYykubG9hZCgpCisgICAgICAgICAgICByZWxvYWRlZCA9IHNlbGYuYm9vdHN0cmFwLl9TcGVjTWV0aG9kcyhzZWxmLnNwZWMpLmV4ZWMobG9hZGVkKQorICAgICAgICAgICAgaW5zdGFsbGVkID0gc3lzLm1vZHVsZXNbc2VsZi5zcGVjLm5hbWVdCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZWQuZWdncywgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhyZWxvYWRlZCwgbG9hZGVkKQorICAgICAgICBzZWxmLmFzc2VydElzKGluc3RhbGxlZCwgbG9hZGVkKQorCisgICAgZGVmIHRlc3RfcmVsb2FkX21vZGlmaWVkKHNlbGYpOgorICAgICAgICBzZWxmLnNwZWMubG9hZGVyID0gTmV3TG9hZGVyKCkKKyAgICAgICAgd2l0aCBDbGVhbkltcG9ydChzZWxmLnNwZWMubmFtZSk6CisgICAgICAgICAgICBsb2FkZWQgPSBzZWxmLmJvb3RzdHJhcC5fU3BlY01ldGhvZHMoc2VsZi5zcGVjKS5sb2FkKCkKKyAgICAgICAgICAgIGxvYWRlZC5lZ2dzID0gMgorICAgICAgICAgICAgcmVsb2FkZWQgPSBzZWxmLmJvb3RzdHJhcC5fU3BlY01ldGhvZHMoc2VsZi5zcGVjKS5leGVjKGxvYWRlZCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlZC5lZ2dzLCAxKQorICAgICAgICBzZWxmLmFzc2VydElzKHJlbG9hZGVkLCBsb2FkZWQpCisKKyAgICBkZWYgdGVzdF9yZWxvYWRfZXh0cmFfYXR0cmlidXRlcyhzZWxmKToKKyAgICAgICAgc2VsZi5zcGVjLmxvYWRlciA9IE5ld0xvYWRlcigpCisgICAgICAgIHdpdGggQ2xlYW5JbXBvcnQoc2VsZi5zcGVjLm5hbWUpOgorICAgICAgICAgICAgbG9hZGVkID0gc2VsZi5ib290c3RyYXAuX1NwZWNNZXRob2RzKHNlbGYuc3BlYykubG9hZCgpCisgICAgICAgICAgICBsb2FkZWQuYXZhaWxhYmxlID0gRmFsc2UKKyAgICAgICAgICAgIHJlbG9hZGVkID0gc2VsZi5ib290c3RyYXAuX1NwZWNNZXRob2RzKHNlbGYuc3BlYykuZXhlYyhsb2FkZWQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShsb2FkZWQuYXZhaWxhYmxlKQorICAgICAgICBzZWxmLmFzc2VydElzKHJlbG9hZGVkLCBsb2FkZWQpCisKKyAgICBkZWYgdGVzdF9yZWxvYWRfaW5pdF9tb2R1bGVfYXR0cnMoc2VsZik6CisgICAgICAgIHNlbGYuc3BlYy5sb2FkZXIgPSBOZXdMb2FkZXIoKQorICAgICAgICB3aXRoIENsZWFuSW1wb3J0KHNlbGYuc3BlYy5uYW1lKToKKyAgICAgICAgICAgIGxvYWRlZCA9IHNlbGYuYm9vdHN0cmFwLl9TcGVjTWV0aG9kcyhzZWxmLnNwZWMpLmxvYWQoKQorICAgICAgICAgICAgbG9hZGVkLl9fbmFtZV9fID0gJ2hhbScKKyAgICAgICAgICAgIGRlbCBsb2FkZWQuX19sb2FkZXJfXworICAgICAgICAgICAgZGVsIGxvYWRlZC5fX3BhY2thZ2VfXworICAgICAgICAgICAgZGVsIGxvYWRlZC5fX3NwZWNfXworICAgICAgICAgICAgc2VsZi5ib290c3RyYXAuX1NwZWNNZXRob2RzKHNlbGYuc3BlYykuZXhlYyhsb2FkZWQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZWQuX19uYW1lX18sIHNlbGYuc3BlYy5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydElzKGxvYWRlZC5fX2xvYWRlcl9fLCBzZWxmLnNwZWMubG9hZGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlZC5fX3BhY2thZ2VfXywgc2VsZi5zcGVjLnBhcmVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhsb2FkZWQuX19zcGVjX18sIHNlbGYuc3BlYykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKGxvYWRlZCwgJ19fcGF0aF9fJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihsb2FkZWQsICdfX2ZpbGVfXycpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIobG9hZGVkLCAnX19jYWNoZWRfXycpKQorCisgICAgZGVmIHRlc3RfcmVsb2FkX2xlZ2FjeShzZWxmKToKKyAgICAgICAgc2VsZi5zcGVjLmxvYWRlciA9IExlZ2FjeUxvYWRlcigpCisgICAgICAgIHdpdGggQ2xlYW5JbXBvcnQoc2VsZi5zcGVjLm5hbWUpOgorICAgICAgICAgICAgbG9hZGVkID0gc2VsZi5ib290c3RyYXAuX1NwZWNNZXRob2RzKHNlbGYuc3BlYykubG9hZCgpCisgICAgICAgICAgICByZWxvYWRlZCA9IHNlbGYuYm9vdHN0cmFwLl9TcGVjTWV0aG9kcyhzZWxmLnNwZWMpLmV4ZWMobG9hZGVkKQorICAgICAgICAgICAgaW5zdGFsbGVkID0gc3lzLm1vZHVsZXNbc2VsZi5zcGVjLm5hbWVdCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZWQuaGFtLCAtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhyZWxvYWRlZCwgbG9hZGVkKQorICAgICAgICBzZWxmLmFzc2VydElzKGluc3RhbGxlZCwgbG9hZGVkKQorCisKK2NsYXNzIEZyb3plbl9Nb2R1bGVTcGVjTWV0aG9kc1Rlc3RzKE1vZHVsZVNwZWNNZXRob2RzVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBib290c3RyYXAgPSBmcm96ZW5fYm9vdHN0cmFwCisgICAgbWFjaGluZXJ5ID0gZnJvemVuX21hY2hpbmVyeQorICAgIHV0aWwgPSBmcm96ZW5fdXRpbAorCisKK2NsYXNzIFNvdXJjZV9Nb2R1bGVTcGVjTWV0aG9kc1Rlc3RzKE1vZHVsZVNwZWNNZXRob2RzVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBib290c3RyYXAgPSBzb3VyY2VfYm9vdHN0cmFwCisgICAgbWFjaGluZXJ5ID0gc291cmNlX21hY2hpbmVyeQorICAgIHV0aWwgPSBzb3VyY2VfdXRpbAorCisKK2NsYXNzIE1vZHVsZVJlcHJUZXN0czoKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5tb2R1bGUgPSB0eXBlKG9zKSgnc3BhbScpCisgICAgICAgIHNlbGYuc3BlYyA9IHNlbGYubWFjaGluZXJ5Lk1vZHVsZVNwZWMoJ3NwYW0nLCBUZXN0TG9hZGVyKCkpCisKKyAgICBkZWYgdGVzdF9tb2R1bGVfX19sb2FkZXJfX19tb2R1bGVfcmVwcihzZWxmKToKKyAgICAgICAgY2xhc3MgTG9hZGVyOgorICAgICAgICAgICAgZGVmIG1vZHVsZV9yZXByKHNlbGYsIG1vZHVsZSk6CisgICAgICAgICAgICAgICAgcmV0dXJuICc8ZGVsaWNpb3VzIHt9PicuZm9ybWF0KG1vZHVsZS5fX25hbWVfXykKKyAgICAgICAgc2VsZi5tb2R1bGUuX19sb2FkZXJfXyA9IExvYWRlcigpCisgICAgICAgIG1vZHJlcHIgPSBzZWxmLmJvb3RzdHJhcC5fbW9kdWxlX3JlcHIoc2VsZi5tb2R1bGUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2RyZXByLCAnPGRlbGljaW91cyBzcGFtPicpCisKKyAgICBkZWYgdGVzdF9tb2R1bGVfX19sb2FkZXJfX19tb2R1bGVfcmVwcl9iYWQoc2VsZik6CisgICAgICAgIGNsYXNzIExvYWRlcihUZXN0TG9hZGVyKToKKyAgICAgICAgICAgIGRlZiBtb2R1bGVfcmVwcihzZWxmLCBtb2R1bGUpOgorICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbgorICAgICAgICBzZWxmLm1vZHVsZS5fX2xvYWRlcl9fID0gTG9hZGVyKCkKKyAgICAgICAgbW9kcmVwciA9IHNlbGYuYm9vdHN0cmFwLl9tb2R1bGVfcmVwcihzZWxmLm1vZHVsZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHJlcHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgJzxtb2R1bGUgeyFyfSAoPFRlc3RMb2FkZXIgb2JqZWN0Pik+Jy5mb3JtYXQoJ3NwYW0nKSkKKworICAgIGRlZiB0ZXN0X21vZHVsZV9fX3NwZWNfXyhzZWxmKToKKyAgICAgICAgb3JpZ2luID0gJ2luIGEgaG9sZSwgaW4gdGhlIGdyb3VuZCcKKyAgICAgICAgc2VsZi5zcGVjLm9yaWdpbiA9IG9yaWdpbgorICAgICAgICBzZWxmLm1vZHVsZS5fX3NwZWNfXyA9IHNlbGYuc3BlYworICAgICAgICBtb2RyZXByID0gc2VsZi5ib290c3RyYXAuX21vZHVsZV9yZXByKHNlbGYubW9kdWxlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kcmVwciwgJzxtb2R1bGUgeyFyfSAoe30pPicuZm9ybWF0KCdzcGFtJywgb3JpZ2luKSkKKworICAgIGRlZiB0ZXN0X21vZHVsZV9fX3NwZWNfX19sb2NhdGlvbihzZWxmKToKKyAgICAgICAgbG9jYXRpb24gPSAnaW5fYV9nYWxheHlfZmFyX2Zhcl9hd2F5LnB5JworICAgICAgICBzZWxmLnNwZWMub3JpZ2luID0gbG9jYXRpb24KKyAgICAgICAgc2VsZi5zcGVjLl9zZXRfZmlsZWF0dHIgPSBUcnVlCisgICAgICAgIHNlbGYubW9kdWxlLl9fc3BlY19fID0gc2VsZi5zcGVjCisgICAgICAgIG1vZHJlcHIgPSBzZWxmLmJvb3RzdHJhcC5fbW9kdWxlX3JlcHIoc2VsZi5tb2R1bGUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2RyZXByLAorICAgICAgICAgICAgICAgICAgICAgICAgICc8bW9kdWxlIHshcn0gZnJvbSB7IXJ9PicuZm9ybWF0KCdzcGFtJywgbG9jYXRpb24pKQorCisgICAgZGVmIHRlc3RfbW9kdWxlX19fc3BlY19fX25vX29yaWdpbihzZWxmKToKKyAgICAgICAgc2VsZi5zcGVjLmxvYWRlciA9IFRlc3RMb2FkZXIoKQorICAgICAgICBzZWxmLm1vZHVsZS5fX3NwZWNfXyA9IHNlbGYuc3BlYworICAgICAgICBtb2RyZXByID0gc2VsZi5ib290c3RyYXAuX21vZHVsZV9yZXByKHNlbGYubW9kdWxlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kcmVwciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnPG1vZHVsZSB7IXJ9ICg8VGVzdExvYWRlciBvYmplY3Q+KT4nLmZvcm1hdCgnc3BhbScpKQorCisgICAgZGVmIHRlc3RfbW9kdWxlX19fc3BlY19fX25vX29yaWdpbl9ub19sb2FkZXIoc2VsZik6CisgICAgICAgIHNlbGYuc3BlYy5sb2FkZXIgPSBOb25lCisgICAgICAgIHNlbGYubW9kdWxlLl9fc3BlY19fID0gc2VsZi5zcGVjCisgICAgICAgIG1vZHJlcHIgPSBzZWxmLmJvb3RzdHJhcC5fbW9kdWxlX3JlcHIoc2VsZi5tb2R1bGUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2RyZXByLCAnPG1vZHVsZSB7IXJ9PicuZm9ybWF0KCdzcGFtJykpCisKKyAgICBkZWYgdGVzdF9tb2R1bGVfbm9fbmFtZShzZWxmKToKKyAgICAgICAgZGVsIHNlbGYubW9kdWxlLl9fbmFtZV9fCisgICAgICAgIG1vZHJlcHIgPSBzZWxmLmJvb3RzdHJhcC5fbW9kdWxlX3JlcHIoc2VsZi5tb2R1bGUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2RyZXByLCAnPG1vZHVsZSB7IXJ9PicuZm9ybWF0KCc/JykpCisKKyAgICBkZWYgdGVzdF9tb2R1bGVfd2l0aF9maWxlKHNlbGYpOgorICAgICAgICBmaWxlbmFtZSA9ICdlL2kvZS9pL28vc3BhbS5weScKKyAgICAgICAgc2VsZi5tb2R1bGUuX19maWxlX18gPSBmaWxlbmFtZQorICAgICAgICBtb2RyZXByID0gc2VsZi5ib290c3RyYXAuX21vZHVsZV9yZXByKHNlbGYubW9kdWxlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kcmVwciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnPG1vZHVsZSB7IXJ9IGZyb20geyFyfT4nLmZvcm1hdCgnc3BhbScsIGZpbGVuYW1lKSkKKworICAgIGRlZiB0ZXN0X21vZHVsZV9ub19maWxlKHNlbGYpOgorICAgICAgICBzZWxmLm1vZHVsZS5fX2xvYWRlcl9fID0gVGVzdExvYWRlcigpCisgICAgICAgIG1vZHJlcHIgPSBzZWxmLmJvb3RzdHJhcC5fbW9kdWxlX3JlcHIoc2VsZi5tb2R1bGUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2RyZXByLAorICAgICAgICAgICAgICAgICAgICAgICAgICc8bW9kdWxlIHshcn0gKDxUZXN0TG9hZGVyIG9iamVjdD4pPicuZm9ybWF0KCdzcGFtJykpCisKKyAgICBkZWYgdGVzdF9tb2R1bGVfbm9fZmlsZV9ub19sb2FkZXIoc2VsZik6CisgICAgICAgIG1vZHJlcHIgPSBzZWxmLmJvb3RzdHJhcC5fbW9kdWxlX3JlcHIoc2VsZi5tb2R1bGUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2RyZXByLCAnPG1vZHVsZSB7IXJ9PicuZm9ybWF0KCdzcGFtJykpCisKKworY2xhc3MgRnJvemVuX01vZHVsZVJlcHJUZXN0cyhNb2R1bGVSZXByVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBib290c3RyYXAgPSBmcm96ZW5fYm9vdHN0cmFwCisgICAgbWFjaGluZXJ5ID0gZnJvemVuX21hY2hpbmVyeQorICAgIHV0aWwgPSBmcm96ZW5fdXRpbAorCisKK2NsYXNzIFNvdXJjZV9Nb2R1bGVSZXByVGVzdHMoTW9kdWxlUmVwclRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgYm9vdHN0cmFwID0gc291cmNlX2Jvb3RzdHJhcAorICAgIG1hY2hpbmVyeSA9IHNvdXJjZV9tYWNoaW5lcnkKKyAgICB1dGlsID0gc291cmNlX3V0aWwKKworCitjbGFzcyBGYWN0b3J5VGVzdHM6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubmFtZSA9ICdzcGFtJworICAgICAgICBzZWxmLnBhdGggPSAnc3BhbS5weScKKyAgICAgICAgc2VsZi5jYWNoZWQgPSBzZWxmLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2Uoc2VsZi5wYXRoKQorICAgICAgICBzZWxmLmxvYWRlciA9IFRlc3RMb2FkZXIoKQorICAgICAgICBzZWxmLmZpbGVsb2FkZXIgPSBUZXN0TG9hZGVyKHNlbGYucGF0aCkKKyAgICAgICAgc2VsZi5wa2dsb2FkZXIgPSBUZXN0TG9hZGVyKHNlbGYucGF0aCwgVHJ1ZSkKKworICAgICMgc3BlY19mcm9tX2xvYWRlcigpCisKKyAgICBkZWYgdGVzdF9zcGVjX2Zyb21fbG9hZGVyX2RlZmF1bHQoc2VsZik6CisgICAgICAgIHNwZWMgPSBzZWxmLnV0aWwuc3BlY19mcm9tX2xvYWRlcihzZWxmLm5hbWUsIHNlbGYubG9hZGVyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5uYW1lLCBzZWxmLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5sb2FkZXIsIHNlbGYubG9hZGVyKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMub3JpZ2luLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMubG9hZGVyX3N0YXRlLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5jYWNoZWQsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc3BlYy5oYXNfbG9jYXRpb24pCisKKyAgICBkZWYgdGVzdF9zcGVjX2Zyb21fbG9hZGVyX2RlZmF1bHRfd2l0aF9iYWRfaXNfcGFja2FnZShzZWxmKToKKyAgICAgICAgY2xhc3MgTG9hZGVyOgorICAgICAgICAgICAgZGVmIGlzX3BhY2thZ2Uoc2VsZiwgbmFtZSk6CisgICAgICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IKKyAgICAgICAgbG9hZGVyID0gTG9hZGVyKCkKKyAgICAgICAgc3BlYyA9IHNlbGYudXRpbC5zcGVjX2Zyb21fbG9hZGVyKHNlbGYubmFtZSwgbG9hZGVyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5uYW1lLCBzZWxmLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5sb2FkZXIsIGxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLm9yaWdpbiwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmxvYWRlcl9zdGF0ZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMuY2FjaGVkLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNwZWMuaGFzX2xvY2F0aW9uKQorCisgICAgZGVmIHRlc3Rfc3BlY19mcm9tX2xvYWRlcl9vcmlnaW4oc2VsZik6CisgICAgICAgIG9yaWdpbiA9ICdzb21ld2hlcmUgb3ZlciB0aGUgcmFpbmJvdycKKyAgICAgICAgc3BlYyA9IHNlbGYudXRpbC5zcGVjX2Zyb21fbG9hZGVyKHNlbGYubmFtZSwgc2VsZi5sb2FkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW49b3JpZ2luKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5uYW1lLCBzZWxmLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5sb2FkZXIsIHNlbGYubG9hZGVyKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMub3JpZ2luLCBvcmlnaW4pCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5sb2FkZXJfc3RhdGUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmNhY2hlZCwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzcGVjLmhhc19sb2NhdGlvbikKKworICAgIGRlZiB0ZXN0X3NwZWNfZnJvbV9sb2FkZXJfaXNfcGFja2FnZV9mYWxzZShzZWxmKToKKyAgICAgICAgc3BlYyA9IHNlbGYudXRpbC5zcGVjX2Zyb21fbG9hZGVyKHNlbGYubmFtZSwgc2VsZi5sb2FkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc19wYWNrYWdlPUZhbHNlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5uYW1lLCBzZWxmLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5sb2FkZXIsIHNlbGYubG9hZGVyKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMub3JpZ2luLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMubG9hZGVyX3N0YXRlLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5jYWNoZWQsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc3BlYy5oYXNfbG9jYXRpb24pCisKKyAgICBkZWYgdGVzdF9zcGVjX2Zyb21fbG9hZGVyX2lzX3BhY2thZ2VfdHJ1ZShzZWxmKToKKyAgICAgICAgc3BlYyA9IHNlbGYudXRpbC5zcGVjX2Zyb21fbG9hZGVyKHNlbGYubmFtZSwgc2VsZi5sb2FkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc19wYWNrYWdlPVRydWUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm5hbWUsIHNlbGYubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmxvYWRlciwgc2VsZi5sb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5vcmlnaW4sIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5sb2FkZXJfc3RhdGUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucywgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5jYWNoZWQsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc3BlYy5oYXNfbG9jYXRpb24pCisKKyAgICBkZWYgdGVzdF9zcGVjX2Zyb21fbG9hZGVyX29yaWdpbl9hbmRfaXNfcGFja2FnZShzZWxmKToKKyAgICAgICAgb3JpZ2luID0gJ3doZXJlIHRoZSBzdHJlZXRzIGhhdmUgbm8gbmFtZScKKyAgICAgICAgc3BlYyA9IHNlbGYudXRpbC5zcGVjX2Zyb21fbG9hZGVyKHNlbGYubmFtZSwgc2VsZi5sb2FkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW49b3JpZ2luLCBpc19wYWNrYWdlPVRydWUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm5hbWUsIHNlbGYubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmxvYWRlciwgc2VsZi5sb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5vcmlnaW4sIG9yaWdpbikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmxvYWRlcl9zdGF0ZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmNhY2hlZCwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzcGVjLmhhc19sb2NhdGlvbikKKworICAgIGRlZiB0ZXN0X3NwZWNfZnJvbV9sb2FkZXJfaXNfcGFja2FnZV93aXRoX2xvYWRlcl9mYWxzZShzZWxmKToKKyAgICAgICAgbG9hZGVyID0gVGVzdExvYWRlcihpc19wYWNrYWdlPUZhbHNlKQorICAgICAgICBzcGVjID0gc2VsZi51dGlsLnNwZWNfZnJvbV9sb2FkZXIoc2VsZi5uYW1lLCBsb2FkZXIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm5hbWUsIHNlbGYubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmxvYWRlciwgbG9hZGVyKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMub3JpZ2luLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMubG9hZGVyX3N0YXRlLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5jYWNoZWQsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc3BlYy5oYXNfbG9jYXRpb24pCisKKyAgICBkZWYgdGVzdF9zcGVjX2Zyb21fbG9hZGVyX2lzX3BhY2thZ2Vfd2l0aF9sb2FkZXJfdHJ1ZShzZWxmKToKKyAgICAgICAgbG9hZGVyID0gVGVzdExvYWRlcihpc19wYWNrYWdlPVRydWUpCisgICAgICAgIHNwZWMgPSBzZWxmLnV0aWwuc3BlY19mcm9tX2xvYWRlcihzZWxmLm5hbWUsIGxvYWRlcikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubmFtZSwgc2VsZi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubG9hZGVyLCBsb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5vcmlnaW4sIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5sb2FkZXJfc3RhdGUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucywgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5jYWNoZWQsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc3BlYy5oYXNfbG9jYXRpb24pCisKKyAgICBkZWYgdGVzdF9zcGVjX2Zyb21fbG9hZGVyX2RlZmF1bHRfd2l0aF9maWxlX2xvYWRlcihzZWxmKToKKyAgICAgICAgc3BlYyA9IHNlbGYudXRpbC5zcGVjX2Zyb21fbG9hZGVyKHNlbGYubmFtZSwgc2VsZi5maWxlbG9hZGVyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5uYW1lLCBzZWxmLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5sb2FkZXIsIHNlbGYuZmlsZWxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm9yaWdpbiwgc2VsZi5wYXRoKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMubG9hZGVyX3N0YXRlLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5jYWNoZWQsIHNlbGYuY2FjaGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3BlYy5oYXNfbG9jYXRpb24pCisKKyAgICBkZWYgdGVzdF9zcGVjX2Zyb21fbG9hZGVyX2lzX3BhY2thZ2VfZmFsc2Vfd2l0aF9maWxlbG9hZGVyKHNlbGYpOgorICAgICAgICBzcGVjID0gc2VsZi51dGlsLnNwZWNfZnJvbV9sb2FkZXIoc2VsZi5uYW1lLCBzZWxmLmZpbGVsb2FkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc19wYWNrYWdlPUZhbHNlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5uYW1lLCBzZWxmLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5sb2FkZXIsIHNlbGYuZmlsZWxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm9yaWdpbiwgc2VsZi5wYXRoKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMubG9hZGVyX3N0YXRlLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5jYWNoZWQsIHNlbGYuY2FjaGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3BlYy5oYXNfbG9jYXRpb24pCisKKyAgICBkZWYgdGVzdF9zcGVjX2Zyb21fbG9hZGVyX2lzX3BhY2thZ2VfdHJ1ZV93aXRoX2ZpbGVsb2FkZXIoc2VsZik6CisgICAgICAgIHNwZWMgPSBzZWxmLnV0aWwuc3BlY19mcm9tX2xvYWRlcihzZWxmLm5hbWUsIHNlbGYuZmlsZWxvYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzX3BhY2thZ2U9VHJ1ZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubmFtZSwgc2VsZi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubG9hZGVyLCBzZWxmLmZpbGVsb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5vcmlnaW4sIHNlbGYucGF0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmxvYWRlcl9zdGF0ZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zLCBbJyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMuY2FjaGVkLCBzZWxmLmNhY2hlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNwZWMuaGFzX2xvY2F0aW9uKQorCisgICAgIyBzcGVjX2Zyb21fZmlsZV9sb2NhdGlvbigpCisKKyAgICBkZWYgdGVzdF9zcGVjX2Zyb21fZmlsZV9sb2NhdGlvbl9kZWZhdWx0KHNlbGYpOgorICAgICAgICBpZiBzZWxmLm1hY2hpbmVyeSBpcyBzb3VyY2VfbWFjaGluZXJ5OgorICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoJ25vdCBzdXJlIHdoeSB0aGlzIGlzIGJyZWFraW5nLi4uJykKKyAgICAgICAgc3BlYyA9IHNlbGYudXRpbC5zcGVjX2Zyb21fZmlsZV9sb2NhdGlvbihzZWxmLm5hbWUsIHNlbGYucGF0aCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubmFtZSwgc2VsZi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3BlYy5sb2FkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubG9hZGVyLm5hbWUsIHNlbGYubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmxvYWRlci5wYXRoLCBzZWxmLnBhdGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5vcmlnaW4sIHNlbGYucGF0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmxvYWRlcl9zdGF0ZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMuY2FjaGVkLCBzZWxmLmNhY2hlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNwZWMuaGFzX2xvY2F0aW9uKQorCisgICAgZGVmIHRlc3Rfc3BlY19mcm9tX2ZpbGVfbG9jYXRpb25fZGVmYXVsdF93aXRob3V0X2xvY2F0aW9uKHNlbGYpOgorICAgICAgICBzcGVjID0gc2VsZi51dGlsLnNwZWNfZnJvbV9maWxlX2xvY2F0aW9uKHNlbGYubmFtZSkKKworICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMsIE5vbmUpCisKKyAgICBkZWYgdGVzdF9zcGVjX2Zyb21fZmlsZV9sb2NhdGlvbl9kZWZhdWx0X2JhZF9zdWZmaXgoc2VsZik6CisgICAgICAgIHNwZWMgPSBzZWxmLnV0aWwuc3BlY19mcm9tX2ZpbGVfbG9jYXRpb24oc2VsZi5uYW1lLCAnc3BhbS5lZ2dzJykKKworICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMsIE5vbmUpCisKKyAgICBkZWYgdGVzdF9zcGVjX2Zyb21fZmlsZV9sb2NhdGlvbl9sb2FkZXJfbm9fbG9jYXRpb24oc2VsZik6CisgICAgICAgIHNwZWMgPSBzZWxmLnV0aWwuc3BlY19mcm9tX2ZpbGVfbG9jYXRpb24oc2VsZi5uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlcj1zZWxmLmZpbGVsb2FkZXIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm5hbWUsIHNlbGYubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmxvYWRlciwgc2VsZi5maWxlbG9hZGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMub3JpZ2luLCBzZWxmLnBhdGgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5sb2FkZXJfc3RhdGUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmNhY2hlZCwgc2VsZi5jYWNoZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzcGVjLmhhc19sb2NhdGlvbikKKworICAgIGRlZiB0ZXN0X3NwZWNfZnJvbV9maWxlX2xvY2F0aW9uX2xvYWRlcl9ub19sb2NhdGlvbl9ub19nZXRfZmlsZW5hbWUoc2VsZik6CisgICAgICAgIHNwZWMgPSBzZWxmLnV0aWwuc3BlY19mcm9tX2ZpbGVfbG9jYXRpb24oc2VsZi5uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlcj1zZWxmLmxvYWRlcikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubmFtZSwgc2VsZi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubG9hZGVyLCBzZWxmLmxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm9yaWdpbiwgJzx1bmtub3duPicpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5sb2FkZXJfc3RhdGUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmNhY2hlZCwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNwZWMuaGFzX2xvY2F0aW9uKQorCisgICAgZGVmIHRlc3Rfc3BlY19mcm9tX2ZpbGVfbG9jYXRpb25fbG9hZGVyX25vX2xvY2F0aW9uX2JhZF9nZXRfZmlsZW5hbWUoc2VsZik6CisgICAgICAgIGNsYXNzIExvYWRlcjoKKyAgICAgICAgICAgIGRlZiBnZXRfZmlsZW5hbWUoc2VsZiwgbmFtZSk6CisgICAgICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IKKyAgICAgICAgbG9hZGVyID0gTG9hZGVyKCkKKyAgICAgICAgc3BlYyA9IHNlbGYudXRpbC5zcGVjX2Zyb21fZmlsZV9sb2NhdGlvbihzZWxmLm5hbWUsIGxvYWRlcj1sb2FkZXIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm5hbWUsIHNlbGYubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmxvYWRlciwgbG9hZGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMub3JpZ2luLCAnPHVua25vd24+JykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmxvYWRlcl9zdGF0ZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMuY2FjaGVkLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3BlYy5oYXNfbG9jYXRpb24pCisKKyAgICBkZWYgdGVzdF9zcGVjX2Zyb21fZmlsZV9sb2NhdGlvbl9zbXNsX25vbmUoc2VsZik6CisgICAgICAgIHNwZWMgPSBzZWxmLnV0aWwuc3BlY19mcm9tX2ZpbGVfbG9jYXRpb24oc2VsZi5uYW1lLCBzZWxmLnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZXI9c2VsZi5maWxlbG9hZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnM9Tm9uZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubmFtZSwgc2VsZi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubG9hZGVyLCBzZWxmLmZpbGVsb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5vcmlnaW4sIHNlbGYucGF0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmxvYWRlcl9zdGF0ZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMuY2FjaGVkLCBzZWxmLmNhY2hlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNwZWMuaGFzX2xvY2F0aW9uKQorCisgICAgZGVmIHRlc3Rfc3BlY19mcm9tX2ZpbGVfbG9jYXRpb25fc21zbF9lbXB0eShzZWxmKToKKyAgICAgICAgc3BlYyA9IHNlbGYudXRpbC5zcGVjX2Zyb21fZmlsZV9sb2NhdGlvbihzZWxmLm5hbWUsIHNlbGYucGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlcj1zZWxmLmZpbGVsb2FkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucz1bXSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubmFtZSwgc2VsZi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubG9hZGVyLCBzZWxmLmZpbGVsb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5vcmlnaW4sIHNlbGYucGF0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmxvYWRlcl9zdGF0ZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zLCBbJyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMuY2FjaGVkLCBzZWxmLmNhY2hlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNwZWMuaGFzX2xvY2F0aW9uKQorCisgICAgZGVmIHRlc3Rfc3BlY19mcm9tX2ZpbGVfbG9jYXRpb25fc21zbF9ub3RfZW1wdHkoc2VsZik6CisgICAgICAgIHNwZWMgPSBzZWxmLnV0aWwuc3BlY19mcm9tX2ZpbGVfbG9jYXRpb24oc2VsZi5uYW1lLCBzZWxmLnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZXI9c2VsZi5maWxlbG9hZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnM9WydlZ2dzJ10pCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm5hbWUsIHNlbGYubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmxvYWRlciwgc2VsZi5maWxlbG9hZGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMub3JpZ2luLCBzZWxmLnBhdGgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5sb2FkZXJfc3RhdGUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucywgWydlZ2dzJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5jYWNoZWQsIHNlbGYuY2FjaGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3BlYy5oYXNfbG9jYXRpb24pCisKKyAgICBkZWYgdGVzdF9zcGVjX2Zyb21fZmlsZV9sb2NhdGlvbl9zbXNsX2RlZmF1bHQoc2VsZik6CisgICAgICAgIHNwZWMgPSBzZWxmLnV0aWwuc3BlY19mcm9tX2ZpbGVfbG9jYXRpb24oc2VsZi5uYW1lLCBzZWxmLnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZXI9c2VsZi5wa2dsb2FkZXIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm5hbWUsIHNlbGYubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmxvYWRlciwgc2VsZi5wa2dsb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5vcmlnaW4sIHNlbGYucGF0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmxvYWRlcl9zdGF0ZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zLCBbJyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMuY2FjaGVkLCBzZWxmLmNhY2hlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNwZWMuaGFzX2xvY2F0aW9uKQorCisgICAgZGVmIHRlc3Rfc3BlY19mcm9tX2ZpbGVfbG9jYXRpb25fc21zbF9kZWZhdWx0X25vdF9wYWNrYWdlKHNlbGYpOgorICAgICAgICBjbGFzcyBMb2FkZXI6CisgICAgICAgICAgICBkZWYgaXNfcGFja2FnZShzZWxmLCBuYW1lKToKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgbG9hZGVyID0gTG9hZGVyKCkKKyAgICAgICAgc3BlYyA9IHNlbGYudXRpbC5zcGVjX2Zyb21fZmlsZV9sb2NhdGlvbihzZWxmLm5hbWUsIHNlbGYucGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZXI9bG9hZGVyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5uYW1lLCBzZWxmLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5sb2FkZXIsIGxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm9yaWdpbiwgc2VsZi5wYXRoKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMubG9hZGVyX3N0YXRlLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5jYWNoZWQsIHNlbGYuY2FjaGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3BlYy5oYXNfbG9jYXRpb24pCisKKyAgICBkZWYgdGVzdF9zcGVjX2Zyb21fZmlsZV9sb2NhdGlvbl9zbXNsX2RlZmF1bHRfbm9faXNfcGFja2FnZShzZWxmKToKKyAgICAgICAgc3BlYyA9IHNlbGYudXRpbC5zcGVjX2Zyb21fZmlsZV9sb2NhdGlvbihzZWxmLm5hbWUsIHNlbGYucGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlcj1zZWxmLmZpbGVsb2FkZXIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm5hbWUsIHNlbGYubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmxvYWRlciwgc2VsZi5maWxlbG9hZGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMub3JpZ2luLCBzZWxmLnBhdGgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5sb2FkZXJfc3RhdGUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmNhY2hlZCwgc2VsZi5jYWNoZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzcGVjLmhhc19sb2NhdGlvbikKKworICAgIGRlZiB0ZXN0X3NwZWNfZnJvbV9maWxlX2xvY2F0aW9uX3Ntc2xfZGVmYXVsdF9iYWRfaXNfcGFja2FnZShzZWxmKToKKyAgICAgICAgY2xhc3MgTG9hZGVyOgorICAgICAgICAgICAgZGVmIGlzX3BhY2thZ2Uoc2VsZiwgbmFtZSk6CisgICAgICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IKKyAgICAgICAgbG9hZGVyID0gTG9hZGVyKCkKKyAgICAgICAgc3BlYyA9IHNlbGYudXRpbC5zcGVjX2Zyb21fZmlsZV9sb2NhdGlvbihzZWxmLm5hbWUsIHNlbGYucGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZXI9bG9hZGVyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5uYW1lLCBzZWxmLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5sb2FkZXIsIGxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm9yaWdpbiwgc2VsZi5wYXRoKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMubG9hZGVyX3N0YXRlLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5jYWNoZWQsIHNlbGYuY2FjaGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3BlYy5oYXNfbG9jYXRpb24pCisKKworY2xhc3MgRnJvemVuX0ZhY3RvcnlUZXN0cyhGYWN0b3J5VGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICB1dGlsID0gZnJvemVuX3V0aWwKKyAgICBtYWNoaW5lcnkgPSBmcm96ZW5fbWFjaGluZXJ5CisKKworY2xhc3MgU291cmNlX0ZhY3RvcnlUZXN0cyhGYWN0b3J5VGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICB1dGlsID0gc291cmNlX3V0aWwKKyAgICBtYWNoaW5lcnkgPSBzb3VyY2VfbWFjaGluZXJ5CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi90ZXN0X3V0aWwucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi90ZXN0X3V0aWwucHkKaW5kZXggZWZjODk3Ny4uYjI4MjNjNiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvdGVzdF91dGlsLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3Rlc3RfdXRpbC5weQpAQCAtMSwyMyArMSw2NiBAQAogZnJvbSBpbXBvcnRsaWIgaW1wb3J0IHV0aWwKIGZyb20gLiBpbXBvcnQgdXRpbCBhcyB0ZXN0X3V0aWwKLWltcG9ydCBpbXAKK2Zyb3plbl9pbml0LCBzb3VyY2VfaW5pdCA9IHRlc3RfdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWInKQorZnJvemVuX21hY2hpbmVyeSwgc291cmNlX21hY2hpbmVyeSA9IHRlc3RfdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWIubWFjaGluZXJ5JykKK2Zyb3plbl91dGlsLCBzb3VyY2VfdXRpbCA9IHRlc3RfdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWIudXRpbCcpCisKK2ltcG9ydCBvcwogaW1wb3J0IHN5cworZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiBpbXBvcnQgdHlwZXMKIGltcG9ydCB1bml0dGVzdAoraW1wb3J0IHdhcm5pbmdzCiAKIAotY2xhc3MgTW9kdWxlRm9yTG9hZGVyVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorY2xhc3MgRGVjb2RlU291cmNlQnl0ZXNUZXN0czoKKworICAgIHNvdXJjZSA9ICJzdHJpbmcgPSfDvCciCisKKyAgICBkZWYgdGVzdF91dDhfZGVmYXVsdChzZWxmKToKKyAgICAgICAgc291cmNlX2J5dGVzID0gc2VsZi5zb3VyY2UuZW5jb2RlKCd1dGYtOCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi51dGlsLmRlY29kZV9zb3VyY2Uoc291cmNlX2J5dGVzKSwgc2VsZi5zb3VyY2UpCisKKyAgICBkZWYgdGVzdF9zcGVjaWZpZWRfZW5jb2Rpbmcoc2VsZik6CisgICAgICAgIHNvdXJjZSA9ICcjIGNvZGluZz1sYXRpbi0xXG4nICsgc2VsZi5zb3VyY2UKKyAgICAgICAgc291cmNlX2J5dGVzID0gc291cmNlLmVuY29kZSgnbGF0aW4tMScpCisgICAgICAgIGFzc2VydCBzb3VyY2VfYnl0ZXMgIT0gc291cmNlLmVuY29kZSgndXRmLTgnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudXRpbC5kZWNvZGVfc291cmNlKHNvdXJjZV9ieXRlcyksIHNvdXJjZSkKKworICAgIGRlZiB0ZXN0X3VuaXZlcnNhbF9uZXdsaW5lcyhzZWxmKToKKyAgICAgICAgc291cmNlID0gJ1xyXG4nLmpvaW4oW3NlbGYuc291cmNlLCBzZWxmLnNvdXJjZV0pCisgICAgICAgIHNvdXJjZV9ieXRlcyA9IHNvdXJjZS5lbmNvZGUoJ3V0Zi04JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnV0aWwuZGVjb2RlX3NvdXJjZShzb3VyY2VfYnl0ZXMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICdcbicuam9pbihbc2VsZi5zb3VyY2UsIHNlbGYuc291cmNlXSkpCisKK0Zyb3plbl9EZWNvZGVTb3VyY2VCeXRlc1Rlc3RzLCBTb3VyY2VfRGVjb2RlU291cmNlQnl0ZXNUZXN0cyA9IHRlc3RfdXRpbC50ZXN0X2JvdGgoCisgICAgICAgIERlY29kZVNvdXJjZUJ5dGVzVGVzdHMsIHV0aWw9W2Zyb3plbl91dGlsLCBzb3VyY2VfdXRpbF0pCisKKworY2xhc3MgTW9kdWxlRm9yTG9hZGVyVGVzdHM6CiAKICAgICAiIiJUZXN0cyBmb3IgaW1wb3J0bGliLnV0aWwubW9kdWxlX2Zvcl9sb2FkZXIuIiIiCiAKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgbW9kdWxlX2Zvcl9sb2FkZXIoY2xzLCBmdW5jKToKKyAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdpZ25vcmUnLCBEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgICAgICByZXR1cm4gY2xzLnV0aWwubW9kdWxlX2Zvcl9sb2FkZXIoZnVuYykKKworICAgIGRlZiB0ZXN0X3dhcm5pbmcoc2VsZik6CisgICAgICAgICMgU2hvdWxkIHJhaXNlIGEgUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZyB3aGVuIHVzZWQuCisgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignZXJyb3InLCBEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKERlcHJlY2F0aW9uV2FybmluZyk6CisgICAgICAgICAgICAgICAgZnVuYyA9IHNlbGYudXRpbC5tb2R1bGVfZm9yX2xvYWRlcihsYW1iZGEgeDogeCkKKwogICAgIGRlZiByZXR1cm5fbW9kdWxlKHNlbGYsIG5hbWUpOgotICAgICAgICBmeG4gPSB1dGlsLm1vZHVsZV9mb3JfbG9hZGVyKGxhbWJkYSBzZWxmLCBtb2R1bGU6IG1vZHVsZSkKKyAgICAgICAgZnhuID0gc2VsZi5tb2R1bGVfZm9yX2xvYWRlcihsYW1iZGEgc2VsZiwgbW9kdWxlOiBtb2R1bGUpCiAgICAgICAgIHJldHVybiBmeG4oc2VsZiwgbmFtZSkKIAogICAgIGRlZiByYWlzZV9leGNlcHRpb24oc2VsZiwgbmFtZSk6CiAgICAgICAgIGRlZiB0b193cmFwKHNlbGYsIG1vZHVsZSk6CiAgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcgotICAgICAgICBmeG4gPSB1dGlsLm1vZHVsZV9mb3JfbG9hZGVyKHRvX3dyYXApCisgICAgICAgIGZ4biA9IHNlbGYubW9kdWxlX2Zvcl9sb2FkZXIodG9fd3JhcCkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZnhuKHNlbGYsIG5hbWUpCiAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKQEAgLTM1LDEyICs3OCwyMyBAQAogCiAgICAgZGVmIHRlc3RfcmVsb2FkKHNlbGYpOgogICAgICAgICAjIFRlc3QgdGhhdCBhIG1vZHVsZSBpcyByZXVzZWQgaWYgYWxyZWFkeSBpbiBzeXMubW9kdWxlcy4KKyAgICAgICAgY2xhc3MgRmFrZUxvYWRlcjoKKyAgICAgICAgICAgIGRlZiBpc19wYWNrYWdlKHNlbGYsIG5hbWUpOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICBAc2VsZi5tb2R1bGVfZm9yX2xvYWRlcgorICAgICAgICAgICAgZGVmIGxvYWRfbW9kdWxlKHNlbGYsIG1vZHVsZSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIG1vZHVsZQogICAgICAgICBuYW1lID0gJ2EuYi5jJwotICAgICAgICBtb2R1bGUgPSBpbXAubmV3X21vZHVsZSgnYS5iLmMnKQorICAgICAgICBtb2R1bGUgPSB0eXBlcy5Nb2R1bGVUeXBlKCdhLmIuYycpCisgICAgICAgIG1vZHVsZS5fX2xvYWRlcl9fID0gNDIKKyAgICAgICAgbW9kdWxlLl9fcGFja2FnZV9fID0gNDIKICAgICAgICAgd2l0aCB0ZXN0X3V0aWwudW5jYWNoZShuYW1lKToKICAgICAgICAgICAgIHN5cy5tb2R1bGVzW25hbWVdID0gbW9kdWxlCi0gICAgICAgICAgICByZXR1cm5lZF9tb2R1bGUgPSBzZWxmLnJldHVybl9tb2R1bGUobmFtZSkKKyAgICAgICAgICAgIGxvYWRlciA9IEZha2VMb2FkZXIoKQorICAgICAgICAgICAgcmV0dXJuZWRfbW9kdWxlID0gbG9hZGVyLmxvYWRfbW9kdWxlKG5hbWUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydElzKHJldHVybmVkX21vZHVsZSwgc3lzLm1vZHVsZXNbbmFtZV0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX2xvYWRlcl9fLCBsb2FkZXIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX3BhY2thZ2VfXywgbmFtZSkKIAogICAgIGRlZiB0ZXN0X25ld19tb2R1bGVfZmFpbHVyZShzZWxmKToKICAgICAgICAgIyBUZXN0IHRoYXQgYSBtb2R1bGUgaXMgcmVtb3ZlZCBmcm9tIHN5cy5tb2R1bGVzIGlmIGFkZGVkIGJ1dCBhbgpAQCAtNTMsNyArMTA3LDcgQEAKICAgICBkZWYgdGVzdF9yZWxvYWRfZmFpbHVyZShzZWxmKToKICAgICAgICAgIyBUZXN0IHRoYXQgYSBmYWlsdXJlIG9uIHJlbG9hZCBsZWF2ZXMgdGhlIG1vZHVsZSBpbi1wbGFjZS4KICAgICAgICAgbmFtZSA9ICdhLmIuYycKLSAgICAgICAgbW9kdWxlID0gaW1wLm5ld19tb2R1bGUobmFtZSkKKyAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZShuYW1lKQogICAgICAgICB3aXRoIHRlc3RfdXRpbC51bmNhY2hlKG5hbWUpOgogICAgICAgICAgICAgc3lzLm1vZHVsZXNbbmFtZV0gPSBtb2R1bGUKICAgICAgICAgICAgIHNlbGYucmFpc2VfZXhjZXB0aW9uKG5hbWUpCkBAIC02MSw3ICsxMTUsNyBAQAogCiAgICAgZGVmIHRlc3RfZGVjb3JhdG9yX2F0dHJzKHNlbGYpOgogICAgICAgICBkZWYgZnhuKHNlbGYsIG1vZHVsZSk6IHBhc3MKLSAgICAgICAgd3JhcHBlZCA9IHV0aWwubW9kdWxlX2Zvcl9sb2FkZXIoZnhuKQorICAgICAgICB3cmFwcGVkID0gc2VsZi5tb2R1bGVfZm9yX2xvYWRlcihmeG4pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod3JhcHBlZC5fX25hbWVfXywgZnhuLl9fbmFtZV9fKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdyYXBwZWQuX19xdWFsbmFtZV9fLCBmeG4uX19xdWFsbmFtZV9fKQogCkBAIC04Nyw3ICsxNDEsNyBAQAogICAgICAgICAgICAgICAgIHNlbGYuX3BrZyA9IGlzX3BhY2thZ2UKICAgICAgICAgICAgIGRlZiBpc19wYWNrYWdlKHNlbGYsIG5hbWUpOgogICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9wa2cKLSAgICAgICAgICAgIEB1dGlsLm1vZHVsZV9mb3JfbG9hZGVyCisgICAgICAgICAgICBAc2VsZi5tb2R1bGVfZm9yX2xvYWRlcgogICAgICAgICAgICAgZGVmIGxvYWRfbW9kdWxlKHNlbGYsIG1vZHVsZSk6CiAgICAgICAgICAgICAgICAgcmV0dXJuIG1vZHVsZQogCkBAIC0xMDcsOCArMTYxLDExIEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydElzKG1vZHVsZS5fX2xvYWRlcl9fLCBsb2FkZXIpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX3BhY2thZ2VfXywgbmFtZSkKIAorRnJvemVuX01vZHVsZUZvckxvYWRlclRlc3RzLCBTb3VyY2VfTW9kdWxlRm9yTG9hZGVyVGVzdHMgPSB0ZXN0X3V0aWwudGVzdF9ib3RoKAorICAgICAgICBNb2R1bGVGb3JMb2FkZXJUZXN0cywgdXRpbD1bZnJvemVuX3V0aWwsIHNvdXJjZV91dGlsXSkKIAotY2xhc3MgU2V0UGFja2FnZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworY2xhc3MgU2V0UGFja2FnZVRlc3RzOgogCiAgICAgIiIiVGVzdHMgZm9yIGltcG9ydGxpYi51dGlsLnNldF9wYWNrYWdlLiIiIgogCkBAIC0xMTYsMzQgKzE3MywzNiBAQAogICAgICAgICAiIiJWZXJpZnkgdGhlIG1vZHVsZSBoYXMgdGhlIGV4cGVjdGVkIHZhbHVlIGZvciBfX3BhY2thZ2VfXyBhZnRlcgogICAgICAgICBwYXNzaW5nIHRocm91Z2ggc2V0X3BhY2thZ2UuIiIiCiAgICAgICAgIGZ4biA9IGxhbWJkYTogbW9kdWxlCi0gICAgICAgIHdyYXBwZWQgPSB1dGlsLnNldF9wYWNrYWdlKGZ4bikKLSAgICAgICAgd3JhcHBlZCgpCisgICAgICAgIHdyYXBwZWQgPSBzZWxmLnV0aWwuc2V0X3BhY2thZ2UoZnhuKQorICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2lnbm9yZScsIERlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgICAgIHdyYXBwZWQoKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihtb2R1bGUsICdfX3BhY2thZ2VfXycpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdCwgbW9kdWxlLl9fcGFja2FnZV9fKQogCiAgICAgZGVmIHRlc3RfdG9wX2xldmVsKHNlbGYpOgogICAgICAgICAjIF9fcGFja2FnZV9fIHNob3VsZCBiZSBzZXQgdG8gdGhlIGVtcHR5IHN0cmluZyBpZiBhIHRvcC1sZXZlbCBtb2R1bGUuCiAgICAgICAgICMgSW1wbGljaXRseSB0ZXN0cyB3aGVuIHBhY2thZ2UgaXMgc2V0IHRvIE5vbmUuCi0gICAgICAgIG1vZHVsZSA9IGltcC5uZXdfbW9kdWxlKCdtb2R1bGUnKQorICAgICAgICBtb2R1bGUgPSB0eXBlcy5Nb2R1bGVUeXBlKCdtb2R1bGUnKQogICAgICAgICBtb2R1bGUuX19wYWNrYWdlX18gPSBOb25lCiAgICAgICAgIHNlbGYudmVyaWZ5KG1vZHVsZSwgJycpCiAKICAgICBkZWYgdGVzdF9wYWNrYWdlKHNlbGYpOgogICAgICAgICAjIFRlc3Qgc2V0dGluZyBfX3BhY2thZ2VfXyBmb3IgYSBwYWNrYWdlLgotICAgICAgICBtb2R1bGUgPSBpbXAubmV3X21vZHVsZSgncGtnJykKKyAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZSgncGtnJykKICAgICAgICAgbW9kdWxlLl9fcGF0aF9fID0gWyc8cGF0aD4nXQogICAgICAgICBtb2R1bGUuX19wYWNrYWdlX18gPSBOb25lCiAgICAgICAgIHNlbGYudmVyaWZ5KG1vZHVsZSwgJ3BrZycpCiAKICAgICBkZWYgdGVzdF9zdWJtb2R1bGUoc2VsZik6CiAgICAgICAgICMgVGVzdCBfX3BhY2thZ2VfXyBmb3IgYSBtb2R1bGUgaW4gYSBwYWNrYWdlLgotICAgICAgICBtb2R1bGUgPSBpbXAubmV3X21vZHVsZSgncGtnLm1vZCcpCisgICAgICAgIG1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUoJ3BrZy5tb2QnKQogICAgICAgICBtb2R1bGUuX19wYWNrYWdlX18gPSBOb25lCiAgICAgICAgIHNlbGYudmVyaWZ5KG1vZHVsZSwgJ3BrZycpCiAKICAgICBkZWYgdGVzdF9zZXR0aW5nX2lmX21pc3Npbmcoc2VsZik6CiAgICAgICAgICMgX19wYWNrYWdlX18gc2hvdWxkIGJlIHNldCBpZiBpdCBpcyBtaXNzaW5nLgotICAgICAgICBtb2R1bGUgPSBpbXAubmV3X21vZHVsZSgnbW9kJykKKyAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZSgnbW9kJykKICAgICAgICAgaWYgaGFzYXR0cihtb2R1bGUsICdfX3BhY2thZ2VfXycpOgogICAgICAgICAgICAgZGVsYXR0cihtb2R1bGUsICdfX3BhY2thZ2VfXycpCiAgICAgICAgIHNlbGYudmVyaWZ5KG1vZHVsZSwgJycpCkBAIC0xNTEsNTggKzIxMCwzODMgQEAKICAgICBkZWYgdGVzdF9sZWF2aW5nX2Fsb25lKHNlbGYpOgogICAgICAgICAjIElmIF9fcGFja2FnZV9fIGlzIHNldCBhbmQgbm90IE5vbmUgdGhlbiBsZWF2ZSBpdCBhbG9uZS4KICAgICAgICAgZm9yIHZhbHVlIGluIChUcnVlLCBGYWxzZSk6Ci0gICAgICAgICAgICBtb2R1bGUgPSBpbXAubmV3X21vZHVsZSgnbW9kJykKKyAgICAgICAgICAgIG1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUoJ21vZCcpCiAgICAgICAgICAgICBtb2R1bGUuX19wYWNrYWdlX18gPSB2YWx1ZQogICAgICAgICAgICAgc2VsZi52ZXJpZnkobW9kdWxlLCB2YWx1ZSkKIAogICAgIGRlZiB0ZXN0X2RlY29yYXRvcl9hdHRycyhzZWxmKToKICAgICAgICAgZGVmIGZ4bihtb2R1bGUpOiBwYXNzCi0gICAgICAgIHdyYXBwZWQgPSB1dGlsLnNldF9wYWNrYWdlKGZ4bikKKyAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdpZ25vcmUnLCBEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgICAgICB3cmFwcGVkID0gc2VsZi51dGlsLnNldF9wYWNrYWdlKGZ4bikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3cmFwcGVkLl9fbmFtZV9fLCBmeG4uX19uYW1lX18pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod3JhcHBlZC5fX3F1YWxuYW1lX18sIGZ4bi5fX3F1YWxuYW1lX18pCiAKK0Zyb3plbl9TZXRQYWNrYWdlVGVzdHMsIFNvdXJjZV9TZXRQYWNrYWdlVGVzdHMgPSB0ZXN0X3V0aWwudGVzdF9ib3RoKAorICAgICAgICBTZXRQYWNrYWdlVGVzdHMsIHV0aWw9W2Zyb3plbl91dGlsLCBzb3VyY2VfdXRpbF0pCiAKLWNsYXNzIFJlc29sdmVOYW1lVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCitjbGFzcyBTZXRMb2FkZXJUZXN0czoKKworICAgICIiIlRlc3RzIGltcG9ydGxpYi51dGlsLnNldF9sb2FkZXIoKS4iIiIKKworICAgIGNsYXNzIER1bW15TG9hZGVyOgorICAgICAgICBAdXRpbC5zZXRfbG9hZGVyCisgICAgICAgIGRlZiBsb2FkX21vZHVsZShzZWxmLCBtb2R1bGUpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYubW9kdWxlCisKKyAgICBkZWYgdGVzdF9ub19hdHRyaWJ1dGUoc2VsZik6CisgICAgICAgIGxvYWRlciA9IHNlbGYuRHVtbXlMb2FkZXIoKQorICAgICAgICBsb2FkZXIubW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZSgnYmxhaCcpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRlbCBsb2FkZXIubW9kdWxlLl9fbG9hZGVyX18KKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2lnbm9yZScsIERlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVyLCBsb2FkZXIubG9hZF9tb2R1bGUoJ2JsYWgnKS5fX2xvYWRlcl9fKQorCisgICAgZGVmIHRlc3RfYXR0cmlidXRlX2lzX05vbmUoc2VsZik6CisgICAgICAgIGxvYWRlciA9IHNlbGYuRHVtbXlMb2FkZXIoKQorICAgICAgICBsb2FkZXIubW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZSgnYmxhaCcpCisgICAgICAgIGxvYWRlci5tb2R1bGUuX19sb2FkZXJfXyA9IE5vbmUKKyAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdpZ25vcmUnLCBEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlciwgbG9hZGVyLmxvYWRfbW9kdWxlKCdibGFoJykuX19sb2FkZXJfXykKKworICAgIGRlZiB0ZXN0X25vdF9yZXNldChzZWxmKToKKyAgICAgICAgbG9hZGVyID0gc2VsZi5EdW1teUxvYWRlcigpCisgICAgICAgIGxvYWRlci5tb2R1bGUgPSB0eXBlcy5Nb2R1bGVUeXBlKCdibGFoJykKKyAgICAgICAgbG9hZGVyLm1vZHVsZS5fX2xvYWRlcl9fID0gNDIKKyAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdpZ25vcmUnLCBEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDQyLCBsb2FkZXIubG9hZF9tb2R1bGUoJ2JsYWgnKS5fX2xvYWRlcl9fKQorCitjbGFzcyBGcm96ZW5fU2V0TG9hZGVyVGVzdHMoU2V0TG9hZGVyVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBjbGFzcyBEdW1teUxvYWRlcjoKKyAgICAgICAgQGZyb3plbl91dGlsLnNldF9sb2FkZXIKKyAgICAgICAgZGVmIGxvYWRfbW9kdWxlKHNlbGYsIG1vZHVsZSk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5tb2R1bGUKKworY2xhc3MgU291cmNlX1NldExvYWRlclRlc3RzKFNldExvYWRlclRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgY2xhc3MgRHVtbXlMb2FkZXI6CisgICAgICAgIEBzb3VyY2VfdXRpbC5zZXRfbG9hZGVyCisgICAgICAgIGRlZiBsb2FkX21vZHVsZShzZWxmLCBtb2R1bGUpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYubW9kdWxlCisKKworY2xhc3MgUmVzb2x2ZU5hbWVUZXN0czoKIAogICAgICIiIlRlc3RzIGltcG9ydGxpYi51dGlsLnJlc29sdmVfbmFtZSgpLiIiIgogCiAgICAgZGVmIHRlc3RfYWJzb2x1dGUoc2VsZik6CiAgICAgICAgICMgYmFjb24KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnYmFjb24nLCB1dGlsLnJlc29sdmVfbmFtZSgnYmFjb24nLCBOb25lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnYmFjb24nLCBzZWxmLnV0aWwucmVzb2x2ZV9uYW1lKCdiYWNvbicsIE5vbmUpKQogCiAgICAgZGVmIHRlc3RfYWJvc2x1dGVfd2l0aGluX3BhY2thZ2Uoc2VsZik6CiAgICAgICAgICMgYmFjb24gaW4gc3BhbQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdiYWNvbicsIHV0aWwucmVzb2x2ZV9uYW1lKCdiYWNvbicsICdzcGFtJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2JhY29uJywgc2VsZi51dGlsLnJlc29sdmVfbmFtZSgnYmFjb24nLCAnc3BhbScpKQogCiAgICAgZGVmIHRlc3Rfbm9fcGFja2FnZShzZWxmKToKICAgICAgICAgIyAuYmFjb24gaW4gJycKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKLSAgICAgICAgICAgIHV0aWwucmVzb2x2ZV9uYW1lKCcuYmFjb24nLCAnJykKKyAgICAgICAgICAgIHNlbGYudXRpbC5yZXNvbHZlX25hbWUoJy5iYWNvbicsICcnKQogCiAgICAgZGVmIHRlc3RfaW5fcGFja2FnZShzZWxmKToKICAgICAgICAgIyAuYmFjb24gaW4gc3BhbQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdzcGFtLmVnZ3MuYmFjb24nLAotICAgICAgICAgICAgICAgICAgICAgICAgIHV0aWwucmVzb2x2ZV9uYW1lKCcuYmFjb24nLCAnc3BhbS5lZ2dzJykpCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi51dGlsLnJlc29sdmVfbmFtZSgnLmJhY29uJywgJ3NwYW0uZWdncycpKQogCiAgICAgZGVmIHRlc3Rfb3RoZXJfcGFja2FnZShzZWxmKToKICAgICAgICAgIyAuLmJhY29uIGluIHNwYW0uYmFjb24KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnc3BhbS5iYWNvbicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgdXRpbC5yZXNvbHZlX25hbWUoJy4uYmFjb24nLCAnc3BhbS5lZ2dzJykpCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi51dGlsLnJlc29sdmVfbmFtZSgnLi5iYWNvbicsICdzcGFtLmVnZ3MnKSkKIAogICAgIGRlZiB0ZXN0X2VzY2FwZShzZWxmKToKICAgICAgICAgIyAuLmJhY29uIGluIHNwYW0KICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKLSAgICAgICAgICAgIHV0aWwucmVzb2x2ZV9uYW1lKCcuLmJhY29uJywgJ3NwYW0nKQorICAgICAgICAgICAgc2VsZi51dGlsLnJlc29sdmVfbmFtZSgnLi5iYWNvbicsICdzcGFtJykKKworRnJvemVuX1Jlc29sdmVOYW1lVGVzdHMsIFNvdXJjZV9SZXNvbHZlTmFtZVRlc3RzID0gdGVzdF91dGlsLnRlc3RfYm90aCgKKyAgICAgICAgUmVzb2x2ZU5hbWVUZXN0cywKKyAgICAgICAgdXRpbD1bZnJvemVuX3V0aWwsIHNvdXJjZV91dGlsXSkKIAogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoCi0gICAgICAgICAgICBNb2R1bGVGb3JMb2FkZXJUZXN0cywKLSAgICAgICAgICAgIFNldFBhY2thZ2VUZXN0cywKLSAgICAgICAgICAgIFJlc29sdmVOYW1lVGVzdHMKLSAgICAgICAgKQorY2xhc3MgRmluZFNwZWNUZXN0czoKKworICAgIGNsYXNzIEZha2VNZXRhRmluZGVyOgorICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBmaW5kX3NwZWMobmFtZSwgcGF0aD1Ob25lLCB0YXJnZXQ9Tm9uZSk6IHJldHVybiBuYW1lLCBwYXRoLCB0YXJnZXQKKworICAgIGRlZiB0ZXN0X3N5c19tb2R1bGVzKHNlbGYpOgorICAgICAgICBuYW1lID0gJ3NvbWVfbW9kJworICAgICAgICB3aXRoIHRlc3RfdXRpbC51bmNhY2hlKG5hbWUpOgorICAgICAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZShuYW1lKQorICAgICAgICAgICAgbG9hZGVyID0gJ2EgbG9hZGVyIScKKyAgICAgICAgICAgIHNwZWMgPSBzZWxmLm1hY2hpbmVyeS5Nb2R1bGVTcGVjKG5hbWUsIGxvYWRlcikKKyAgICAgICAgICAgIG1vZHVsZS5fX2xvYWRlcl9fID0gbG9hZGVyCisgICAgICAgICAgICBtb2R1bGUuX19zcGVjX18gPSBzcGVjCisgICAgICAgICAgICBzeXMubW9kdWxlc1tuYW1lXSA9IG1vZHVsZQorICAgICAgICAgICAgZm91bmQgPSBzZWxmLnV0aWwuZmluZF9zcGVjKG5hbWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvdW5kLCBzcGVjKQorCisgICAgZGVmIHRlc3Rfc3lzX21vZHVsZXNfd2l0aG91dF9fX2xvYWRlcl9fKHNlbGYpOgorICAgICAgICBuYW1lID0gJ3NvbWVfbW9kJworICAgICAgICB3aXRoIHRlc3RfdXRpbC51bmNhY2hlKG5hbWUpOgorICAgICAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZShuYW1lKQorICAgICAgICAgICAgZGVsIG1vZHVsZS5fX2xvYWRlcl9fCisgICAgICAgICAgICBsb2FkZXIgPSAnYSBsb2FkZXIhJworICAgICAgICAgICAgc3BlYyA9IHNlbGYubWFjaGluZXJ5Lk1vZHVsZVNwZWMobmFtZSwgbG9hZGVyKQorICAgICAgICAgICAgbW9kdWxlLl9fc3BlY19fID0gc3BlYworICAgICAgICAgICAgc3lzLm1vZHVsZXNbbmFtZV0gPSBtb2R1bGUKKyAgICAgICAgICAgIGZvdW5kID0gc2VsZi51dGlsLmZpbmRfc3BlYyhuYW1lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3VuZCwgc3BlYykKKworICAgIGRlZiB0ZXN0X3N5c19tb2R1bGVzX3NwZWNfaXNfTm9uZShzZWxmKToKKyAgICAgICAgbmFtZSA9ICdzb21lX21vZCcKKyAgICAgICAgd2l0aCB0ZXN0X3V0aWwudW5jYWNoZShuYW1lKToKKyAgICAgICAgICAgIG1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUobmFtZSkKKyAgICAgICAgICAgIG1vZHVsZS5fX3NwZWNfXyA9IE5vbmUKKyAgICAgICAgICAgIHN5cy5tb2R1bGVzW25hbWVdID0gbW9kdWxlCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgICAgIHNlbGYudXRpbC5maW5kX3NwZWMobmFtZSkKKworICAgIGRlZiB0ZXN0X3N5c19tb2R1bGVzX2xvYWRlcl9pc19Ob25lKHNlbGYpOgorICAgICAgICBuYW1lID0gJ3NvbWVfbW9kJworICAgICAgICB3aXRoIHRlc3RfdXRpbC51bmNhY2hlKG5hbWUpOgorICAgICAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZShuYW1lKQorICAgICAgICAgICAgc3BlYyA9IHNlbGYubWFjaGluZXJ5Lk1vZHVsZVNwZWMobmFtZSwgTm9uZSkKKyAgICAgICAgICAgIG1vZHVsZS5fX3NwZWNfXyA9IHNwZWMKKyAgICAgICAgICAgIHN5cy5tb2R1bGVzW25hbWVdID0gbW9kdWxlCisgICAgICAgICAgICBmb3VuZCA9IHNlbGYudXRpbC5maW5kX3NwZWMobmFtZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm91bmQsIHNwZWMpCisKKyAgICBkZWYgdGVzdF9zeXNfbW9kdWxlc19zcGVjX2lzX25vdF9zZXQoc2VsZik6CisgICAgICAgIG5hbWUgPSAnc29tZV9tb2QnCisgICAgICAgIHdpdGggdGVzdF91dGlsLnVuY2FjaGUobmFtZSk6CisgICAgICAgICAgICBtb2R1bGUgPSB0eXBlcy5Nb2R1bGVUeXBlKG5hbWUpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZGVsIG1vZHVsZS5fX3NwZWNfXworICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIHN5cy5tb2R1bGVzW25hbWVdID0gbW9kdWxlCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgICAgIHNlbGYudXRpbC5maW5kX3NwZWMobmFtZSkKKworICAgIGRlZiB0ZXN0X3N1Y2Nlc3Moc2VsZik6CisgICAgICAgIG5hbWUgPSAnc29tZV9tb2QnCisgICAgICAgIHdpdGggdGVzdF91dGlsLnVuY2FjaGUobmFtZSk6CisgICAgICAgICAgICB3aXRoIHRlc3RfdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVtzZWxmLkZha2VNZXRhRmluZGVyXSk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgobmFtZSwgTm9uZSwgTm9uZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnV0aWwuZmluZF9zcGVjKG5hbWUpKQorCisjICAgIGRlZiB0ZXN0X3N1Y2Nlc3NfcGF0aChzZWxmKToKKyMgICAgICAgICMgU2VhcmNoaW5nIG9uIGEgcGF0aCBzaG91bGQgd29yay4KKyMgICAgICAgIG5hbWUgPSAnc29tZV9tb2QnCisjICAgICAgICBwYXRoID0gJ3BhdGggdG8gc29tZSBwbGFjZScKKyMgICAgICAgIHdpdGggdGVzdF91dGlsLnVuY2FjaGUobmFtZSk6CisjICAgICAgICAgICAgd2l0aCB0ZXN0X3V0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bc2VsZi5GYWtlTWV0YUZpbmRlcl0pOgorIyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChuYW1lLCBwYXRoLCBOb25lKSwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnV0aWwuZmluZF9zcGVjKG5hbWUsIHBhdGgpKQorCisgICAgZGVmIHRlc3Rfbm90aGluZyhzZWxmKToKKyAgICAgICAgIyBOb25lIGlzIHJldHVybmVkIHVwb24gZmFpbHVyZSB0byBmaW5kIGEgbG9hZGVyLgorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzZWxmLnV0aWwuZmluZF9zcGVjKCduZXZlcmdvaW5ndG9maW5kdGhpc21vZHVsZScpKQorCisgICAgZGVmIHRlc3RfZmluZF9zdWJtb2R1bGUoc2VsZik6CisgICAgICAgIG5hbWUgPSAnc3BhbScKKyAgICAgICAgc3VibmFtZSA9ICdoYW0nCisgICAgICAgIHdpdGggdGVzdF91dGlsLnRlbXBfbW9kdWxlKG5hbWUsIHBrZz1UcnVlKSBhcyBwa2dfZGlyOgorICAgICAgICAgICAgZnVsbG5hbWUsIF8gPSB0ZXN0X3V0aWwuc3VibW9kdWxlKG5hbWUsIHN1Ym5hbWUsIHBrZ19kaXIpCisgICAgICAgICAgICBzcGVjID0gc2VsZi51dGlsLmZpbmRfc3BlYyhmdWxsbmFtZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3Qoc3BlYywgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4obmFtZSwgc29ydGVkKHN5cy5tb2R1bGVzKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oZnVsbG5hbWUsIHNvcnRlZChzeXMubW9kdWxlcykpCisgICAgICAgICAgICAjIEVuc3VyZSBzdWNjZXNzaXZlIGNhbGxzIGJlaGF2ZSB0aGUgc2FtZS4KKyAgICAgICAgICAgIHNwZWNfYWdhaW4gPSBzZWxmLnV0aWwuZmluZF9zcGVjKGZ1bGxuYW1lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjX2FnYWluLCBzcGVjKQorCisgICAgZGVmIHRlc3RfZmluZF9zdWJtb2R1bGVfcGFyZW50X2FscmVhZHlfaW1wb3J0ZWQoc2VsZik6CisgICAgICAgIG5hbWUgPSAnc3BhbScKKyAgICAgICAgc3VibmFtZSA9ICdoYW0nCisgICAgICAgIHdpdGggdGVzdF91dGlsLnRlbXBfbW9kdWxlKG5hbWUsIHBrZz1UcnVlKSBhcyBwa2dfZGlyOgorICAgICAgICAgICAgc2VsZi5pbml0LmltcG9ydF9tb2R1bGUobmFtZSkKKyAgICAgICAgICAgIGZ1bGxuYW1lLCBfID0gdGVzdF91dGlsLnN1Ym1vZHVsZShuYW1lLCBzdWJuYW1lLCBwa2dfZGlyKQorICAgICAgICAgICAgc3BlYyA9IHNlbGYudXRpbC5maW5kX3NwZWMoZnVsbG5hbWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90KHNwZWMsIE5vbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKG5hbWUsIHNvcnRlZChzeXMubW9kdWxlcykpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKGZ1bGxuYW1lLCBzb3J0ZWQoc3lzLm1vZHVsZXMpKQorICAgICAgICAgICAgIyBFbnN1cmUgc3VjY2Vzc2l2ZSBjYWxscyBiZWhhdmUgdGhlIHNhbWUuCisgICAgICAgICAgICBzcGVjX2FnYWluID0gc2VsZi51dGlsLmZpbmRfc3BlYyhmdWxsbmFtZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlY19hZ2Fpbiwgc3BlYykKKworICAgIGRlZiB0ZXN0X2ZpbmRfcmVsYXRpdmVfbW9kdWxlKHNlbGYpOgorICAgICAgICBuYW1lID0gJ3NwYW0nCisgICAgICAgIHN1Ym5hbWUgPSAnaGFtJworICAgICAgICB3aXRoIHRlc3RfdXRpbC50ZW1wX21vZHVsZShuYW1lLCBwa2c9VHJ1ZSkgYXMgcGtnX2RpcjoKKyAgICAgICAgICAgIGZ1bGxuYW1lLCBfID0gdGVzdF91dGlsLnN1Ym1vZHVsZShuYW1lLCBzdWJuYW1lLCBwa2dfZGlyKQorICAgICAgICAgICAgcmVsbmFtZSA9ICcuJyArIHN1Ym5hbWUKKyAgICAgICAgICAgIHNwZWMgPSBzZWxmLnV0aWwuZmluZF9zcGVjKHJlbG5hbWUsIG5hbWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90KHNwZWMsIE5vbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKG5hbWUsIHNvcnRlZChzeXMubW9kdWxlcykpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKGZ1bGxuYW1lLCBzb3J0ZWQoc3lzLm1vZHVsZXMpKQorICAgICAgICAgICAgIyBFbnN1cmUgc3VjY2Vzc2l2ZSBjYWxscyBiZWhhdmUgdGhlIHNhbWUuCisgICAgICAgICAgICBzcGVjX2FnYWluID0gc2VsZi51dGlsLmZpbmRfc3BlYyhmdWxsbmFtZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlY19hZ2Fpbiwgc3BlYykKKworICAgIGRlZiB0ZXN0X2ZpbmRfcmVsYXRpdmVfbW9kdWxlX21pc3NpbmdfcGFja2FnZShzZWxmKToKKyAgICAgICAgbmFtZSA9ICdzcGFtJworICAgICAgICBzdWJuYW1lID0gJ2hhbScKKyAgICAgICAgd2l0aCB0ZXN0X3V0aWwudGVtcF9tb2R1bGUobmFtZSwgcGtnPVRydWUpIGFzIHBrZ19kaXI6CisgICAgICAgICAgICBmdWxsbmFtZSwgXyA9IHRlc3RfdXRpbC5zdWJtb2R1bGUobmFtZSwgc3VibmFtZSwgcGtnX2RpcikKKyAgICAgICAgICAgIHJlbG5hbWUgPSAnLicgKyBzdWJuYW1lCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgICAgIHNlbGYudXRpbC5maW5kX3NwZWMocmVsbmFtZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4obmFtZSwgc29ydGVkKHN5cy5tb2R1bGVzKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oZnVsbG5hbWUsIHNvcnRlZChzeXMubW9kdWxlcykpCisKKworY2xhc3MgRnJvemVuX0ZpbmRTcGVjVGVzdHMoRmluZFNwZWNUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGluaXQgPSBmcm96ZW5faW5pdAorICAgIG1hY2hpbmVyeSA9IGZyb3plbl9tYWNoaW5lcnkKKyAgICB1dGlsID0gZnJvemVuX3V0aWwKKworY2xhc3MgU291cmNlX0ZpbmRTcGVjVGVzdHMoRmluZFNwZWNUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGluaXQgPSBzb3VyY2VfaW5pdAorICAgIG1hY2hpbmVyeSA9IHNvdXJjZV9tYWNoaW5lcnkKKyAgICB1dGlsID0gc291cmNlX3V0aWwKKworCitjbGFzcyBNYWdpY051bWJlclRlc3RzOgorCisgICAgZGVmIHRlc3RfbGVuZ3RoKHNlbGYpOgorICAgICAgICAjIFNob3VsZCBiZSA0IGJ5dGVzLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLnV0aWwuTUFHSUNfTlVNQkVSKSwgNCkKKworICAgIGRlZiB0ZXN0X2luY29ycG9yYXRlc19ybihzZWxmKToKKyAgICAgICAgIyBUaGUgbWFnaWMgbnVtYmVyIHVzZXMgXHJcbiB0byBjb21lIG91dCB3cm9uZyB3aGVuIHNwbGl0dGluZyBvbiBsaW5lcy4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYudXRpbC5NQUdJQ19OVU1CRVIuZW5kc3dpdGgoYidcclxuJykpCisKK0Zyb3plbl9NYWdpY051bWJlclRlc3RzLCBTb3VyY2VfTWFnaWNOdW1iZXJUZXN0cyA9IHRlc3RfdXRpbC50ZXN0X2JvdGgoCisgICAgICAgIE1hZ2ljTnVtYmVyVGVzdHMsIHV0aWw9W2Zyb3plbl91dGlsLCBzb3VyY2VfdXRpbF0pCisKKworY2xhc3MgUEVQMzE0N1Rlc3RzOgorCisgICAgIiIiVGVzdHMgb2YgUEVQIDMxNDctcmVsYXRlZCBmdW5jdGlvbnM6IGNhY2hlX2Zyb21fc291cmNlIGFuZCBzb3VyY2VfZnJvbV9jYWNoZS4iIiIKKworICAgIHRhZyA9IHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWcKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWcgaXMgbm90IE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlcXVpcmVzIHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWcgbm90IGJlIE5vbmUnKQorICAgIGRlZiB0ZXN0X2NhY2hlX2Zyb21fc291cmNlKHNlbGYpOgorICAgICAgICAjIEdpdmVuIHRoZSBwYXRoIHRvIGEgLnB5IGZpbGUsIHJldHVybiB0aGUgcGF0aCB0byBpdHMgUEVQIDMxNDcKKyAgICAgICAgIyBkZWZpbmVkIC5weWMgZmlsZSAoaS5lLiB1bmRlciBfX3B5Y2FjaGVfXykuCisgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oJ2ZvbycsICdiYXInLCAnYmF6JywgJ3F1eC5weScpCisgICAgICAgIGV4cGVjdCA9IG9zLnBhdGguam9pbignZm9vJywgJ2JhcicsICdiYXonLCAnX19weWNhY2hlX18nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3F1eC57fS5weWMnLmZvcm1hdChzZWxmLnRhZykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHBhdGgsIFRydWUpLCBleHBlY3QpCisKKyAgICBkZWYgdGVzdF9jYWNoZV9mcm9tX3NvdXJjZV9ub19jYWNoZV90YWcoc2VsZik6CisgICAgICAgICMgTm8gY2FjaGUgdGFnIG1lYW5zIE5vdEltcGxlbWVudGVkRXJyb3IuCisgICAgICAgIHdpdGggc3VwcG9ydC5zd2FwX2F0dHIoc3lzLmltcGxlbWVudGF0aW9uLCAnY2FjaGVfdGFnJywgTm9uZSk6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IpOgorICAgICAgICAgICAgICAgIHNlbGYudXRpbC5jYWNoZV9mcm9tX3NvdXJjZSgnd2hhdGV2ZXIucHknKQorCisgICAgZGVmIHRlc3RfY2FjaGVfZnJvbV9zb3VyY2Vfbm9fZG90KHNlbGYpOgorICAgICAgICAjIERpcmVjdG9yeSB3aXRoIGEgZG90LCBmaWxlbmFtZSB3aXRob3V0IGRvdC4KKyAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbignZm9vLmJhcicsICdmaWxlJykKKyAgICAgICAgZXhwZWN0ID0gb3MucGF0aC5qb2luKCdmb28uYmFyJywgJ19fcHljYWNoZV9fJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmaWxle30ucHljJy5mb3JtYXQoc2VsZi50YWcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShwYXRoLCBUcnVlKSwgZXhwZWN0KQorCisgICAgZGVmIHRlc3RfY2FjaGVfZnJvbV9zb3VyY2Vfb3B0aW1pemVkKHNlbGYpOgorICAgICAgICAjIEdpdmVuIHRoZSBwYXRoIHRvIGEgLnB5IGZpbGUsIHJldHVybiB0aGUgcGF0aCB0byBpdHMgUEVQIDMxNDcKKyAgICAgICAgIyBkZWZpbmVkIC5weW8gZmlsZSAoaS5lLiB1bmRlciBfX3B5Y2FjaGVfXykuCisgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oJ2ZvbycsICdiYXInLCAnYmF6JywgJ3F1eC5weScpCisgICAgICAgIGV4cGVjdCA9IG9zLnBhdGguam9pbignZm9vJywgJ2JhcicsICdiYXonLCAnX19weWNhY2hlX18nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3F1eC57fS5weW8nLmZvcm1hdChzZWxmLnRhZykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHBhdGgsIEZhbHNlKSwgZXhwZWN0KQorCisgICAgZGVmIHRlc3RfY2FjaGVfZnJvbV9zb3VyY2VfY3dkKHNlbGYpOgorICAgICAgICBwYXRoID0gJ2Zvby5weScKKyAgICAgICAgZXhwZWN0ID0gb3MucGF0aC5qb2luKCdfX3B5Y2FjaGVfXycsICdmb28ue30ucHljJy5mb3JtYXQoc2VsZi50YWcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShwYXRoLCBUcnVlKSwgZXhwZWN0KQorCisgICAgZGVmIHRlc3RfY2FjaGVfZnJvbV9zb3VyY2Vfb3ZlcnJpZGUoc2VsZik6CisgICAgICAgICMgV2hlbiBkZWJ1Z19vdmVycmlkZSBpcyBub3QgTm9uZSwgaXQgY2FuIGJlIGFueSB0cnVlLWlzaCBvciBmYWxzZS1pc2gKKyAgICAgICAgIyB2YWx1ZS4KKyAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbignZm9vJywgJ2JhcicsICdiYXoucHknKQorICAgICAgICBwYXJ0aWFsX2V4cGVjdCA9IG9zLnBhdGguam9pbignZm9vJywgJ2JhcicsICdfX3B5Y2FjaGVfXycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYXoue30ucHknLmZvcm1hdChzZWxmLnRhZykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHBhdGgsIFtdKSwgcGFydGlhbF9leHBlY3QgKyAnbycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHBhdGgsIFsxN10pLAorICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpYWxfZXhwZWN0ICsgJ2MnKQorICAgICAgICAjIEhvd2V2ZXIgaWYgdGhlIGJvb2wtaXNobmVzcyBjYW4ndCBiZSBkZXRlcm1pbmVkLCB0aGUgZXhjZXB0aW9uCisgICAgICAgICMgcHJvcGFnYXRlcy4KKyAgICAgICAgY2xhc3MgQmVhcmlzaDoKKyAgICAgICAgICAgIGRlZiBfX2Jvb2xfXyhzZWxmKTogcmFpc2UgUnVudGltZUVycm9yCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yKToKKyAgICAgICAgICAgIHNlbGYudXRpbC5jYWNoZV9mcm9tX3NvdXJjZSgnL2Zvby9iYXIvYmF6LnB5JywgQmVhcmlzaCgpKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Mob3Muc2VwID09ICdcXCcgYW5kIG9zLmFsdHNlcCA9PSAnLycsCisgICAgICAgICAgICAgICAgICAgICAndGVzdCBtZWFuaW5nZnVsIG9ubHkgd2hlcmUgb3MuYWx0c2VwIGlzIGRlZmluZWQnKQorICAgIGRlZiB0ZXN0X3NlcF9hbHRzZXBfYW5kX3NlcF9jYWNoZV9mcm9tX3NvdXJjZShzZWxmKToKKyAgICAgICAgIyBXaW5kb3dzIHBhdGggYW5kIFBFUCAzMTQ3IHdoZXJlIHNlcCBpcyByaWdodCBvZiBhbHRzZXAuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzZWxmLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoJ1xcZm9vXFxiYXJcXGJhei9xdXgucHknLCBUcnVlKSwKKyAgICAgICAgICAgICdcXGZvb1xcYmFyXFxiYXpcXF9fcHljYWNoZV9fXFxxdXgue30ucHljJy5mb3JtYXQoc2VsZi50YWcpKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3lzLmltcGxlbWVudGF0aW9uLmNhY2hlX3RhZyBpcyBub3QgTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAncmVxdWlyZXMgc3lzLmltcGxlbWVudGF0aW9uLmNhY2hlX3RhZyB0byBub3QgYmUgJworICAgICAgICAgICAgICAgICAgICAgICAgICdOb25lJykKKyAgICBkZWYgdGVzdF9zb3VyY2VfZnJvbV9jYWNoZShzZWxmKToKKyAgICAgICAgIyBHaXZlbiB0aGUgcGF0aCB0byBhIFBFUCAzMTQ3IGRlZmluZWQgLnB5YyBmaWxlLCByZXR1cm4gdGhlIHBhdGggdG8KKyAgICAgICAgIyBpdHMgc291cmNlLiAgVGhpcyB0ZXN0cyB0aGUgZ29vZCBwYXRoLgorICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKCdmb28nLCAnYmFyJywgJ2JheicsICdfX3B5Y2FjaGVfXycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3F1eC57fS5weWMnLmZvcm1hdChzZWxmLnRhZykpCisgICAgICAgIGV4cGVjdCA9IG9zLnBhdGguam9pbignZm9vJywgJ2JhcicsICdiYXonLCAncXV4LnB5JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnV0aWwuc291cmNlX2Zyb21fY2FjaGUocGF0aCksIGV4cGVjdCkKKworICAgIGRlZiB0ZXN0X3NvdXJjZV9mcm9tX2NhY2hlX25vX2NhY2hlX3RhZyhzZWxmKToKKyAgICAgICAgIyBJZiBzeXMuaW1wbGVtZW50YXRpb24uY2FjaGVfdGFnIGlzIE5vbmUsIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IuCisgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oJ2JsYWgnLCAnX19weWNhY2hlX18nLCAnd2hhdGV2ZXIucHljJykKKyAgICAgICAgd2l0aCBzdXBwb3J0LnN3YXBfYXR0cihzeXMuaW1wbGVtZW50YXRpb24sICdjYWNoZV90YWcnLCBOb25lKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvcik6CisgICAgICAgICAgICAgICAgc2VsZi51dGlsLnNvdXJjZV9mcm9tX2NhY2hlKHBhdGgpCisKKyAgICBkZWYgdGVzdF9zb3VyY2VfZnJvbV9jYWNoZV9iYWRfcGF0aChzZWxmKToKKyAgICAgICAgIyBXaGVuIHRoZSBwYXRoIHRvIGEgcHljIGZpbGUgaXMgbm90IGluIFBFUCAzMTQ3IGZvcm1hdCwgYSBWYWx1ZUVycm9yCisgICAgICAgICMgaXMgcmFpc2VkLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFZhbHVlRXJyb3IsIHNlbGYudXRpbC5zb3VyY2VfZnJvbV9jYWNoZSwgJy9mb28vYmFyL2JhenF1eC5weWMnKQorCisgICAgZGVmIHRlc3Rfc291cmNlX2Zyb21fY2FjaGVfbm9fc2xhc2goc2VsZik6CisgICAgICAgICMgTm8gc2xhc2hlcyBhdCBhbGwgaW4gcGF0aCAtPiBWYWx1ZUVycm9yCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgVmFsdWVFcnJvciwgc2VsZi51dGlsLnNvdXJjZV9mcm9tX2NhY2hlLCAnZm9vLmNweXRob24tMzIucHljJykKKworICAgIGRlZiB0ZXN0X3NvdXJjZV9mcm9tX2NhY2hlX3Rvb19mZXdfZG90cyhzZWxmKToKKyAgICAgICAgIyBUb28gZmV3IGRvdHMgaW4gZmluYWwgcGF0aCBjb21wb25lbnQgLT4gVmFsdWVFcnJvcgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFZhbHVlRXJyb3IsIHNlbGYudXRpbC5zb3VyY2VfZnJvbV9jYWNoZSwgJ19fcHljYWNoZV9fL2Zvby5weWMnKQorCisgICAgZGVmIHRlc3Rfc291cmNlX2Zyb21fY2FjaGVfdG9vX21hbnlfZG90cyhzZWxmKToKKyAgICAgICAgIyBUb28gbWFueSBkb3RzIGluIGZpbmFsIHBhdGggY29tcG9uZW50IC0+IFZhbHVlRXJyb3IKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBWYWx1ZUVycm9yLCBzZWxmLnV0aWwuc291cmNlX2Zyb21fY2FjaGUsCisgICAgICAgICAgICAnX19weWNhY2hlX18vZm9vLmNweXRob24tMzIuZm9vLnB5YycpCisKKyAgICBkZWYgdGVzdF9zb3VyY2VfZnJvbV9jYWNoZV9ub19fcHljYWNoZV9fKHNlbGYpOgorICAgICAgICAjIEFub3RoZXIgcHJvYmxlbSB3aXRoIHRoZSBwYXRoIC0+IFZhbHVlRXJyb3IKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBWYWx1ZUVycm9yLCBzZWxmLnV0aWwuc291cmNlX2Zyb21fY2FjaGUsCisgICAgICAgICAgICAnL2Zvby9iYXIvZm9vLmNweXRob24tMzIuZm9vLnB5YycpCisKK0Zyb3plbl9QRVAzMTQ3VGVzdHMsIFNvdXJjZV9QRVAzMTQ3VGVzdHMgPSB0ZXN0X3V0aWwudGVzdF9ib3RoKAorICAgICAgICBQRVAzMTQ3VGVzdHMsCisgICAgICAgIHV0aWw9W2Zyb3plbl91dGlsLCBzb3VyY2VfdXRpbF0pCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvdGVzdF93aW5kb3dzLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvdGVzdF93aW5kb3dzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2YjRhZGMKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi90ZXN0X3dpbmRvd3MucHkKQEAgLTAsMCArMSwyOSBAQAorZnJvbSAuIGltcG9ydCB1dGlsCitmcm96ZW5fbWFjaGluZXJ5LCBzb3VyY2VfbWFjaGluZXJ5ID0gdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWIubWFjaGluZXJ5JykKKworaW1wb3J0IHN5cworaW1wb3J0IHVuaXR0ZXN0CisKKworQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ3dpbicpLCAncmVxdWlyZXMgV2luZG93cycpCitjbGFzcyBXaW5kb3dzUmVnaXN0cnlGaW5kZXJUZXN0czoKKworICAgICMgWFhYIE5lZWQgYSB0ZXN0IHRoYXQgZmluZHMgdGhlIHNwZWMgdmlhIHRoZSByZWdpc3RyeS4KKworICAgIGRlZiB0ZXN0X2ZpbmRfc3BlY19taXNzaW5nKHNlbGYpOgorICAgICAgICBzcGVjID0gc2VsZi5tYWNoaW5lcnkuV2luZG93c1JlZ2lzdHJ5RmluZGVyLmZpbmRfc3BlYygnc3BhbScpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYywgTm9uZSkKKworICAgIGRlZiB0ZXN0X2ZpbmRfbW9kdWxlX21pc3Npbmcoc2VsZik6CisgICAgICAgIGxvYWRlciA9IHNlbGYubWFjaGluZXJ5LldpbmRvd3NSZWdpc3RyeUZpbmRlci5maW5kX21vZHVsZSgnc3BhbScpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobG9hZGVyLCBOb25lKQorCisKK2NsYXNzIEZyb3plbl9XaW5kb3dzUmVnaXN0cnlGaW5kZXJUZXN0cyhXaW5kb3dzUmVnaXN0cnlGaW5kZXJUZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgbWFjaGluZXJ5ID0gZnJvemVuX21hY2hpbmVyeQorCisKK2NsYXNzIFNvdXJjZV9XaW5kb3dzUmVnaXN0cnlGaW5kZXJUZXN0cyhXaW5kb3dzUmVnaXN0cnlGaW5kZXJUZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgbWFjaGluZXJ5ID0gc291cmNlX21hY2hpbmVyeQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvdXRpbC5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3V0aWwucHkKaW5kZXggZWYzMmY3ZC4uODg1Y2VjMyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvdXRpbC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi91dGlsLnB5CkBAIC0xLDkgKzEsMzEgQEAKIGZyb20gY29udGV4dGxpYiBpbXBvcnQgY29udGV4dG1hbmFnZXIKLWltcG9ydCBpbXAKK2Zyb20gaW1wb3J0bGliIGltcG9ydCB1dGlsLCBpbnZhbGlkYXRlX2NhY2hlcwogaW1wb3J0IG9zLnBhdGgKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgc3lzCitpbXBvcnQgdHlwZXMKKworCitkZWYgaW1wb3J0X2ltcG9ydGxpYihtb2R1bGVfbmFtZSk6CisgICAgIiIiSW1wb3J0IGEgbW9kdWxlIGZyb20gaW1wb3J0bGliIGJvdGggdy8gYW5kIHcvbyBfZnJvemVuX2ltcG9ydGxpYi4iIiIKKyAgICBmcmVzaCA9ICgnaW1wb3J0bGliJywpIGlmICcuJyBpbiBtb2R1bGVfbmFtZSBlbHNlICgpCisgICAgZnJvemVuID0gc3VwcG9ydC5pbXBvcnRfZnJlc2hfbW9kdWxlKG1vZHVsZV9uYW1lKQorICAgIHNvdXJjZSA9IHN1cHBvcnQuaW1wb3J0X2ZyZXNoX21vZHVsZShtb2R1bGVfbmFtZSwgZnJlc2g9ZnJlc2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrZWQ9KCdfZnJvemVuX2ltcG9ydGxpYicsKSkKKyAgICByZXR1cm4gZnJvemVuLCBzb3VyY2UKKworCitkZWYgdGVzdF9ib3RoKHRlc3RfY2xhc3MsICoqa3dhcmdzKToKKyAgICBmcm96ZW5fdGVzdHMgPSB0eXBlcy5uZXdfY2xhc3MoJ0Zyb3plbl8nK3Rlc3RfY2xhc3MuX19uYW1lX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0ZXN0X2NsYXNzLCB1bml0dGVzdC5UZXN0Q2FzZSkpCisgICAgc291cmNlX3Rlc3RzID0gdHlwZXMubmV3X2NsYXNzKCdTb3VyY2VfJyt0ZXN0X2NsYXNzLl9fbmFtZV9fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGVzdF9jbGFzcywgdW5pdHRlc3QuVGVzdENhc2UpKQorICAgIGZyb3plbl90ZXN0cy5fX21vZHVsZV9fID0gc291cmNlX3Rlc3RzLl9fbW9kdWxlX18gPSB0ZXN0X2NsYXNzLl9fbW9kdWxlX18KKyAgICBmb3IgYXR0ciwgKGZyb3plbl92YWx1ZSwgc291cmNlX3ZhbHVlKSBpbiBrd2FyZ3MuaXRlbXMoKToKKyAgICAgICAgc2V0YXR0cihmcm96ZW5fdGVzdHMsIGF0dHIsIGZyb3plbl92YWx1ZSkKKyAgICAgICAgc2V0YXR0cihzb3VyY2VfdGVzdHMsIGF0dHIsIHNvdXJjZV92YWx1ZSkKKyAgICByZXR1cm4gZnJvemVuX3Rlc3RzLCBzb3VyY2VfdGVzdHMKIAogCiBDQVNFX0lOU0VOU0lUSVZFX0ZTID0gVHJ1ZQpAQCAtMjQsNiArNDYsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVxdWlyZXMgYSBjYXNlLWluc2Vuc2l0aXZlIGZpbGVzeXN0ZW0iKSh0ZXN0KQogCiAKK2RlZiBzdWJtb2R1bGUocGFyZW50LCBuYW1lLCBwa2dfZGlyLCBjb250ZW50PScnKToKKyAgICBwYXRoID0gb3MucGF0aC5qb2luKHBrZ19kaXIsIG5hbWUgKyAnLnB5JykKKyAgICB3aXRoIG9wZW4ocGF0aCwgJ3cnKSBhcyBzdWJmaWxlOgorICAgICAgICBzdWJmaWxlLndyaXRlKGNvbnRlbnQpCisgICAgcmV0dXJuICd7fS57fScuZm9ybWF0KHBhcmVudCwgbmFtZSksIHBhdGgKKworCiBAY29udGV4dG1hbmFnZXIKIGRlZiB1bmNhY2hlKCpuYW1lcyk6CiAgICAgIiIiVW5jYWNoZSBhIG1vZHVsZSBmcm9tIHN5cy5tb2R1bGVzLgpAQCAtNDksNiArNzgsMzEgQEAKICAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKICAgICAgICAgICAgICAgICBwYXNzCiAKKworQGNvbnRleHRtYW5hZ2VyCitkZWYgdGVtcF9tb2R1bGUobmFtZSwgY29udGVudD0nJywgKiwgcGtnPUZhbHNlKToKKyAgICBjb25mbGljdHMgPSBbbiBmb3IgbiBpbiBzeXMubW9kdWxlcyBpZiBuLnBhcnRpdGlvbignLicpWzBdID09IG5hbWVdCisgICAgd2l0aCBzdXBwb3J0LnRlbXBfY3dkKE5vbmUpIGFzIGN3ZDoKKyAgICAgICAgd2l0aCB1bmNhY2hlKG5hbWUsICpjb25mbGljdHMpOgorICAgICAgICAgICAgd2l0aCBzdXBwb3J0LkRpcnNPblN5c1BhdGgoY3dkKToKKyAgICAgICAgICAgICAgICBpbnZhbGlkYXRlX2NhY2hlcygpCisKKyAgICAgICAgICAgICAgICBsb2NhdGlvbiA9IG9zLnBhdGguam9pbihjd2QsIG5hbWUpCisgICAgICAgICAgICAgICAgaWYgcGtnOgorICAgICAgICAgICAgICAgICAgICBtb2RwYXRoID0gb3MucGF0aC5qb2luKGxvY2F0aW9uLCAnX19pbml0X18ucHknKQorICAgICAgICAgICAgICAgICAgICBvcy5ta2RpcihuYW1lKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIG1vZHBhdGggPSBsb2NhdGlvbiArICcucHknCisgICAgICAgICAgICAgICAgICAgIGlmIGNvbnRlbnQgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgICMgTWFrZSBzdXJlIHRoZSBtb2R1bGUgZmlsZSBnZXRzIGNyZWF0ZWQuCisgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50ID0gJycKKyAgICAgICAgICAgICAgICBpZiBjb250ZW50IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICAjIG5vdCBhIG5hbWVzcGFjZSBwYWNrYWdlCisgICAgICAgICAgICAgICAgICAgIHdpdGggb3Blbihtb2RwYXRoLCAndycpIGFzIG1vZGZpbGU6CisgICAgICAgICAgICAgICAgICAgICAgICBtb2RmaWxlLndyaXRlKGNvbnRlbnQpCisgICAgICAgICAgICAgICAgeWllbGQgbG9jYXRpb24KKworCiBAY29udGV4dG1hbmFnZXIKIGRlZiBpbXBvcnRfc3RhdGUoKiprd2FyZ3MpOgogICAgICIiIkNvbnRleHQgbWFuYWdlciB0byBtYW5hZ2UgdGhlIHZhcmlvdXMgaW1wb3J0ZXJzIGFuZCBzdG9yZWQgc3RhdGUgaW4gdGhlCkBAIC04MCw5ICsxMzQsOSBAQAogICAgICAgICAgICAgc2V0YXR0cihzeXMsIGF0dHIsIHZhbHVlKQogCiAKLWNsYXNzIG1vY2tfbW9kdWxlczoKK2NsYXNzIF9JbXBvcnRlck1vY2s6CiAKLSAgICAiIiJBIG1vY2sgaW1wb3J0ZXIvbG9hZGVyLiIiIgorICAgICIiIkJhc2UgY2xhc3MgdG8gaGVscCB3aXRoIGNyZWF0aW5nIGltcG9ydGVyIG1vY2tzLiIiIgogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsICpuYW1lcywgbW9kdWxlX2NvZGU9e30pOgogICAgICAgICBzZWxmLm1vZHVsZXMgPSB7fQpAQCAtOTgsNyArMTUyLDcgQEAKICAgICAgICAgICAgICAgICBwYWNrYWdlID0gbmFtZS5yc3BsaXQoJy4nLCAxKVswXQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBwYWNrYWdlID0gaW1wb3J0X25hbWUKLSAgICAgICAgICAgIG1vZHVsZSA9IGltcC5uZXdfbW9kdWxlKGltcG9ydF9uYW1lKQorICAgICAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZShpbXBvcnRfbmFtZSkKICAgICAgICAgICAgIG1vZHVsZS5fX2xvYWRlcl9fID0gc2VsZgogICAgICAgICAgICAgbW9kdWxlLl9fZmlsZV9fID0gJzxtb2NrIF9fZmlsZV9fPicKICAgICAgICAgICAgIG1vZHVsZS5fX3BhY2thZ2VfXyA9IHBhY2thZ2UKQEAgLTExMiw2ICsxNjYsMTkgQEAKICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgbmFtZSk6CiAgICAgICAgIHJldHVybiBzZWxmLm1vZHVsZXNbbmFtZV0KIAorICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIHNlbGYuX3VuY2FjaGUgPSB1bmNhY2hlKCpzZWxmLm1vZHVsZXMua2V5cygpKQorICAgICAgICBzZWxmLl91bmNhY2hlLl9fZW50ZXJfXygpCisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgKmV4Y19pbmZvKToKKyAgICAgICAgc2VsZi5fdW5jYWNoZS5fX2V4aXRfXyhOb25lLCBOb25lLCBOb25lKQorCisKK2NsYXNzIG1vY2tfbW9kdWxlcyhfSW1wb3J0ZXJNb2NrKToKKworICAgICIiIkltcG9ydGVyIG1vY2sgdXNpbmcgUEVQIDMwMiBBUElzLiIiIgorCiAgICAgZGVmIGZpbmRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lLCBwYXRoPU5vbmUpOgogICAgICAgICBpZiBmdWxsbmFtZSBub3QgaW4gc2VsZi5tb2R1bGVzOgogICAgICAgICAgICAgcmV0dXJuIE5vbmUKQEAgLTEzMSwxMCArMTk4LDI4IEBACiAgICAgICAgICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgICAgICByZXR1cm4gc2VsZi5tb2R1bGVzW2Z1bGxuYW1lXQogCi0gICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKLSAgICAgICAgc2VsZi5fdW5jYWNoZSA9IHVuY2FjaGUoKnNlbGYubW9kdWxlcy5rZXlzKCkpCi0gICAgICAgIHNlbGYuX3VuY2FjaGUuX19lbnRlcl9fKCkKLSAgICAgICAgcmV0dXJuIHNlbGYKK2NsYXNzIG1vY2tfc3BlYyhfSW1wb3J0ZXJNb2NrKToKIAotICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqZXhjX2luZm8pOgotICAgICAgICBzZWxmLl91bmNhY2hlLl9fZXhpdF9fKE5vbmUsIE5vbmUsIE5vbmUpCisgICAgIiIiSW1wb3J0ZXIgbW9jayB1c2luZyBQRVAgNDUxIEFQSXMuIiIiCisKKyAgICBkZWYgZmluZF9zcGVjKHNlbGYsIGZ1bGxuYW1lLCBwYXRoPU5vbmUsIHBhcmVudD1Ob25lKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5tb2R1bGVzW2Z1bGxuYW1lXQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBpc19wYWNrYWdlID0gaGFzYXR0cihtb2R1bGUsICdfX3BhdGhfXycpCisgICAgICAgIHNwZWMgPSB1dGlsLnNwZWNfZnJvbV9maWxlX2xvY2F0aW9uKAorICAgICAgICAgICAgICAgIGZ1bGxuYW1lLCBtb2R1bGUuX19maWxlX18sIGxvYWRlcj1zZWxmLAorICAgICAgICAgICAgICAgIHN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zPWdldGF0dHIobW9kdWxlLCAnX19wYXRoX18nLCBOb25lKSkKKyAgICAgICAgcmV0dXJuIHNwZWMKKworICAgIGRlZiBjcmVhdGVfbW9kdWxlKHNlbGYsIHNwZWMpOgorICAgICAgICBpZiBzcGVjLm5hbWUgbm90IGluIHNlbGYubW9kdWxlczoKKyAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yCisgICAgICAgIHJldHVybiBzZWxmLm1vZHVsZXNbc3BlYy5uYW1lXQorCisgICAgZGVmIGV4ZWNfbW9kdWxlKHNlbGYsIG1vZHVsZSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYubW9kdWxlX2NvZGVbbW9kdWxlLl9fc3BlY19fLm5hbWVdKCkKKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcGFzcwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbmRleC5weSBiL0xpYi90ZXN0L3Rlc3RfaW5kZXgucHkKaW5kZXggODc4NTcxMS4uYTJhYzMyMSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbmRleC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2luZGV4LnB5CkBAIC04MSw3ICs4MSw4IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKIAogICAgICAgICBiYWRfaW50ID0gQmFkSW50KCkKLSAgICAgICAgbiA9IG9wZXJhdG9yLmluZGV4KGJhZF9pbnQpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgorICAgICAgICAgICAgbiA9IG9wZXJhdG9yLmluZGV4KGJhZF9pbnQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobiwgMSkKIAogICAgICAgICBiYWRfaW50ID0gQmFkSW50MigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2luc3BlY3QucHkgYi9MaWIvdGVzdC90ZXN0X2luc3BlY3QucHkKaW5kZXggNWNiZWM5Yi4uMWExMjRiNSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbnNwZWN0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW5zcGVjdC5weQpAQCAtMSwyMiArMSwzNSBAQAoraW1wb3J0IGNvbGxlY3Rpb25zCitpbXBvcnQgZGF0ZXRpbWUKK2ltcG9ydCBmdW5jdG9vbHMKK2ltcG9ydCBpbXBvcnRsaWIKK2ltcG9ydCBpbnNwZWN0CitpbXBvcnQgaW8KK2ltcG9ydCBsaW5lY2FjaGUKK2ltcG9ydCBvcworZnJvbSBvcy5wYXRoIGltcG9ydCBub3JtY2FzZQoraW1wb3J0IF9waWNrbGUKIGltcG9ydCByZQoraW1wb3J0IHNodXRpbAogaW1wb3J0IHN5cwogaW1wb3J0IHR5cGVzCitpbXBvcnQgdGV4dHdyYXAKK2ltcG9ydCB1bmljb2RlZGF0YQogaW1wb3J0IHVuaXR0ZXN0Ci1pbXBvcnQgaW5zcGVjdAotaW1wb3J0IGxpbmVjYWNoZQotaW1wb3J0IGRhdGV0aW1lCi1pbXBvcnQgY29sbGVjdGlvbnMKLWltcG9ydCBvcwotaW1wb3J0IHNodXRpbAotZnJvbSBvcy5wYXRoIGltcG9ydCBub3JtY2FzZQoraW1wb3J0IHVuaXR0ZXN0Lm1vY2sKIAotZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgVEVTVEZOLCBEaXJzT25TeXNQYXRoCit0cnk6CisgICAgZnJvbSBjb25jdXJyZW50LmZ1dHVyZXMgaW1wb3J0IFRocmVhZFBvb2xFeGVjdXRvcgorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIFRocmVhZFBvb2xFeGVjdXRvciA9IE5vbmUKIAorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgVEVTVEZOLCBEaXJzT25TeXNQYXRoLCBjcHl0aG9uX29ubHkKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBNSVNTSU5HX0NfRE9DU1RSSU5HUworZnJvbSB0ZXN0LnNjcmlwdF9oZWxwZXIgaW1wb3J0IGFzc2VydF9weXRob25fb2ssIGFzc2VydF9weXRob25fZmFpbHVyZQogZnJvbSB0ZXN0IGltcG9ydCBpbnNwZWN0X2ZvZGRlciBhcyBtb2QKIGZyb20gdGVzdCBpbXBvcnQgaW5zcGVjdF9mb2RkZXIyIGFzIG1vZDIKIAotIyBDIG1vZHVsZSBmb3IgdGVzdF9maW5kc291cmNlX2JpbmFyeQotaW1wb3J0IHVuaWNvZGVkYXRhCitmcm9tIHRlc3QudGVzdF9pbXBvcnQgaW1wb3J0IF9yZWFkeV90b19pbXBvcnQKKwogCiAjIEZ1bmN0aW9ucyB0ZXN0ZWQgaW4gdGhpcyBzdWl0ZToKICMgaXNtb2R1bGUsIGlzY2xhc3MsIGlzbWV0aG9kLCBpc2Z1bmN0aW9uLCBpc3RyYWNlYmFjaywgaXNmcmFtZSwgaXNjb2RlLApAQCAtNjMsNiArNzYsMTAgQEAKICAgICBmb3IgaSBpbiByYW5nZSgyKToKICAgICAgICAgeWllbGQgaQogCitjbGFzcyBFcXVhbHNUb0FsbDoKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIFRydWUKKwogY2xhc3MgVGVzdFByZWRpY2F0ZXMoSXNUZXN0QmFzZSk6CiAgICAgZGVmIHRlc3Rfc2l4dGVlbihzZWxmKToKICAgICAgICAgY291bnQgPSBsZW4oW3ggZm9yIHggaW4gZGlyKGluc3BlY3QpIGlmIHguc3RhcnRzd2l0aCgnaXMnKV0pCkBAIC0xMjAsNyArMTM3LDYgQEAKICAgICBkZWYgdGVzdF9nZXRfc2xvdF9tZW1iZXJzKHNlbGYpOgogICAgICAgICBjbGFzcyBDKG9iamVjdCk6CiAgICAgICAgICAgICBfX3Nsb3RzX18gPSAoImEiLCAiYiIpCi0KICAgICAgICAgeCA9IEMoKQogICAgICAgICB4LmEgPSA0MgogICAgICAgICBtZW1iZXJzID0gZGljdChpbnNwZWN0LmdldG1lbWJlcnMoeCkpCkBAIC0zMTAsNiArMzI2LDE2IEBACiAgICAgZGVmIHRlc3RfZ2V0ZmlsZShzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnNwZWN0LmdldGZpbGUobW9kLlN0dXBpZEdpdCksIG1vZC5fX2ZpbGVfXykKIAorICAgIGRlZiB0ZXN0X2dldGZpbGVfY2xhc3Nfd2l0aG91dF9tb2R1bGUoc2VsZik6CisgICAgICAgIGNsYXNzIENNKHR5cGUpOgorICAgICAgICAgICAgQHByb3BlcnR5CisgICAgICAgICAgICBkZWYgX19tb2R1bGVfXyhjbHMpOgorICAgICAgICAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yCisgICAgICAgIGNsYXNzIEMobWV0YWNsYXNzPUNNKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgaW5zcGVjdC5nZXRmaWxlKEMpCisKICAgICBkZWYgdGVzdF9nZXRtb2R1bGVfcmVjdXJzaW9uKHNlbGYpOgogICAgICAgICBmcm9tIHR5cGVzIGltcG9ydCBNb2R1bGVUeXBlCiAgICAgICAgIG5hbWUgPSAnX19pbnNwZWN0X2R1bW15JwpAQCAtNDEzLDE5ICs0MzksMjAgQEAKICAgICBkZWYgdGVzdF9tZXRob2RfaW5fZHluYW1pY19jbGFzcyhzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRTb3VyY2VFcXVhbChtb2QyLm1ldGhvZF9pbl9keW5hbWljX2NsYXNzLCA5NSwgOTcpCiAKLSAgICBAdW5pdHRlc3Quc2tpcElmKAotICAgICAgICBub3QgaGFzYXR0cih1bmljb2RlZGF0YSwgJ19fZmlsZV9fJykgb3IKLSAgICAgICAgICAgIHVuaWNvZGVkYXRhLl9fZmlsZV9fWy00Ol0gaW4gKCIucHljIiwgIi5weW8iKSwKLSAgICAgICAgInVuaWNvZGVkYXRhIGlzIG5vdCBhbiBleHRlcm5hbCBiaW5hcnkgbW9kdWxlIikKKyAgICAjIFRoaXMgc2hvdWxkIG5vdCBza2lwIGZvciBDUHl0aG9uLCBidXQgbWlnaHQgb24gYSByZXBhY2thZ2VkIHB5dGhvbiB3aGVyZQorICAgICMgdW5pY29kZWRhdGEgaXMgbm90IGFuIGV4dGVybmFsIG1vZHVsZSwgb3Igb24gcHlweS4KKyAgICBAdW5pdHRlc3Quc2tpcElmKG5vdCBoYXNhdHRyKHVuaWNvZGVkYXRhLCAnX19maWxlX18nKSBvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pY29kZWRhdGEuX19maWxlX18uZW5kc3dpdGgoJy5weScpLAorICAgICAgICAgICAgICAgICAgICAgInVuaWNvZGVkYXRhIGlzIG5vdCBhbiBleHRlcm5hbCBiaW5hcnkgbW9kdWxlIikKICAgICBkZWYgdGVzdF9maW5kc291cmNlX2JpbmFyeShzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgaW5zcGVjdC5nZXRzb3VyY2UsIHVuaWNvZGVkYXRhKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBpbnNwZWN0LmZpbmRzb3VyY2UsIHVuaWNvZGVkYXRhKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBpbnNwZWN0LmdldHNvdXJjZSwgdW5pY29kZWRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIGluc3BlY3QuZmluZHNvdXJjZSwgdW5pY29kZWRhdGEpCiAKICAgICBkZWYgdGVzdF9maW5kc291cmNlX2NvZGVfaW5fbGluZWNhY2hlKHNlbGYpOgogICAgICAgICBsaW5lcyA9IFsieD0xIl0KICAgICAgICAgY28gPSBjb21waWxlKGxpbmVzWzBdLCAiX2R5bmFtaWNhbGx5X2NyZWF0ZWRfZmlsZSIsICJleGVjIikKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgaW5zcGVjdC5maW5kc291cmNlLCBjbykKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgaW5zcGVjdC5nZXRzb3VyY2UsIGNvKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBpbnNwZWN0LmZpbmRzb3VyY2UsIGNvKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBpbnNwZWN0LmdldHNvdXJjZSwgY28pCiAgICAgICAgIGxpbmVjYWNoZS5jYWNoZVtjby5jb19maWxlbmFtZV0gPSAoMSwgTm9uZSwgbGluZXMsIGNvLmNvX2ZpbGVuYW1lKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluc3BlY3QuZmluZHNvdXJjZShjbyksIChsaW5lcywwKSkKQEAgLTQ2MywxMyArNDkwLDEzIEBACiAgICAgQSBicm9rZW4gZGF0YSBkZXNjcmlwdG9yLiBTZWUgYnVnICMxNzg1LgogICAgICIiIgogICAgIGRlZiBfX2dldF9fKCphcmdzKToKLSAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoInNob3VsZCBub3QgX19nZXRfXyBkYXRhIGRlc2NyaXB0b3JzIikKKyAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IoImJyb2tlbiBkYXRhIGRlc2NyaXB0b3IiKQogCiAgICAgZGVmIF9fc2V0X18oKmFyZ3MpOgogICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IKIAogICAgIGRlZiBfX2dldGF0dHJfXygqYXJncyk6Ci0gICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCJzaG91bGQgbm90IF9fZ2V0YXR0cl9fIGRhdGEgZGVzY3JpcHRvcnMiKQorICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcigiYnJva2VuIGRhdGEgZGVzY3JpcHRvciIpCiAKIAogY2xhc3MgX0Jyb2tlbk1ldGhvZERlc2NyaXB0b3Iob2JqZWN0KToKQEAgLTQ3NywxMCArNTA0LDEwIEBACiAgICAgQSBicm9rZW4gbWV0aG9kIGRlc2NyaXB0b3IuIFNlZSBidWcgIzE3ODUuCiAgICAgIiIiCiAgICAgZGVmIF9fZ2V0X18oKmFyZ3MpOgotICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigic2hvdWxkIG5vdCBfX2dldF9fIG1ldGhvZCBkZXNjcmlwdG9ycyIpCisgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKCJicm9rZW4gbWV0aG9kIGRlc2NyaXB0b3IiKQogCiAgICAgZGVmIF9fZ2V0YXR0cl9fKCphcmdzKToKLSAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoInNob3VsZCBub3QgX19nZXRhdHRyX18gbWV0aG9kIGRlc2NyaXB0b3JzIikKKyAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IoImJyb2tlbiBtZXRob2QgZGVzY3JpcHRvciIpCiAKIAogIyBIZWxwZXIgZm9yIHRlc3RpbmcgY2xhc3NpZnlfY2xhc3NfYXR0cnMuCkBAIC01NTksNiArNTg2LDk2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3dvbmx5YXJnc19lPVsnYXJnJ10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVkPScoKiwgYXJnKScpCiAKKyAgICBkZWYgdGVzdF9hcmdzcGVjX2FwaV9pZ25vcmVzX3dyYXBwZWQoc2VsZik6CisgICAgICAgICMgSXNzdWUgMjA2ODQ6IGxvdyBsZXZlbCBpbnRyb3NwZWN0aW9uIEFQSSBtdXN0IGlnbm9yZSBfX3dyYXBwZWRfXworICAgICAgICBAZnVuY3Rvb2xzLndyYXBzKG1vZC5zcGFtKQorICAgICAgICBkZWYgaGFtKHgsIHkpOgorICAgICAgICAgICAgcGFzcworICAgICAgICAjIEJhc2ljIGNoZWNrCisgICAgICAgIHNlbGYuYXNzZXJ0QXJnU3BlY0VxdWFscyhoYW0sIFsneCcsICd5J10sIGZvcm1hdHRlZD0nKHgsIHkpJykKKyAgICAgICAgc2VsZi5hc3NlcnRGdWxsQXJnU3BlY0VxdWFscyhoYW0sIFsneCcsICd5J10sIGZvcm1hdHRlZD0nKHgsIHkpJykKKyAgICAgICAgc2VsZi5hc3NlcnRGdWxsQXJnU3BlY0VxdWFscyhmdW5jdG9vbHMucGFydGlhbChoYW0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsneCcsICd5J10sIGZvcm1hdHRlZD0nKHgsIHkpJykKKyAgICAgICAgIyBPdGhlciB2YXJpYW50cworICAgICAgICBkZWYgY2hlY2tfbWV0aG9kKGYpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRBcmdTcGVjRXF1YWxzKGYsIFsnc2VsZicsICd4JywgJ3knXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXR0ZWQ9JyhzZWxmLCB4LCB5KScpCisgICAgICAgIGNsYXNzIEM6CisgICAgICAgICAgICBAZnVuY3Rvb2xzLndyYXBzKG1vZC5zcGFtKQorICAgICAgICAgICAgZGVmIGhhbShzZWxmLCB4LCB5KToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBwaGFtID0gZnVuY3Rvb2xzLnBhcnRpYWxtZXRob2QoaGFtKQorICAgICAgICAgICAgQGZ1bmN0b29scy53cmFwcyhtb2Quc3BhbSkKKyAgICAgICAgICAgIGRlZiBfX2NhbGxfXyhzZWxmLCB4LCB5KToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIGNoZWNrX21ldGhvZChDKCkpCisgICAgICAgIGNoZWNrX21ldGhvZChDLmhhbSkKKyAgICAgICAgY2hlY2tfbWV0aG9kKEMoKS5oYW0pCisgICAgICAgIGNoZWNrX21ldGhvZChDLnBoYW0pCisgICAgICAgIGNoZWNrX21ldGhvZChDKCkucGhhbSkKKworICAgICAgICBjbGFzcyBDX25ldzoKKyAgICAgICAgICAgIEBmdW5jdG9vbHMud3JhcHMobW9kLnNwYW0pCisgICAgICAgICAgICBkZWYgX19uZXdfXyhzZWxmLCB4LCB5KToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIGNoZWNrX21ldGhvZChDX25ldykKKworICAgICAgICBjbGFzcyBDX2luaXQ6CisgICAgICAgICAgICBAZnVuY3Rvb2xzLndyYXBzKG1vZC5zcGFtKQorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHgsIHkpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY2hlY2tfbWV0aG9kKENfaW5pdCkKKworICAgIGRlZiB0ZXN0X2dldGZ1bGxhcmdzcGVjX3NpZ25hdHVyZV9hdHRyKHNlbGYpOgorICAgICAgICBkZWYgdGVzdCgpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzcGFtX3BhcmFtID0gaW5zcGVjdC5QYXJhbWV0ZXIoJ3NwYW0nLCBpbnNwZWN0LlBhcmFtZXRlci5QT1NJVElPTkFMX09OTFkpCisgICAgICAgIHRlc3QuX19zaWduYXR1cmVfXyA9IGluc3BlY3QuU2lnbmF0dXJlKHBhcmFtZXRlcnM9KHNwYW1fcGFyYW0sKSkKKworICAgICAgICBzZWxmLmFzc2VydEZ1bGxBcmdTcGVjRXF1YWxzKHRlc3QsIGFyZ3NfZT1bJ3NwYW0nXSwgZm9ybWF0dGVkPScoc3BhbSknKQorCisgICAgZGVmIHRlc3RfZ2V0ZnVsbGFyZ3NwZWNfc2lnbmF0dXJlX2Fubm9zKHNlbGYpOgorICAgICAgICBkZWYgdGVzdChhOidzcGFtJykgLT4gJ2hhbSc6IHBhc3MKKyAgICAgICAgc3BlYyA9IGluc3BlY3QuZ2V0ZnVsbGFyZ3NwZWModGVzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0Ll9fYW5ub3RhdGlvbnNfXywgc3BlYy5hbm5vdGF0aW9ucykKKworICAgICAgICBkZWYgdGVzdCgpOiBwYXNzCisgICAgICAgIHNwZWMgPSBpbnNwZWN0LmdldGZ1bGxhcmdzcGVjKHRlc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdC5fX2Fubm90YXRpb25zX18sIHNwZWMuYW5ub3RhdGlvbnMpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKE1JU1NJTkdfQ19ET0NTVFJJTkdTLAorICAgICAgICAgICAgICAgICAgICAgIlNpZ25hdHVyZSBpbmZvcm1hdGlvbiBmb3IgYnVpbHRpbnMgcmVxdWlyZXMgZG9jc3RyaW5ncyIpCisgICAgZGVmIHRlc3RfZ2V0ZnVsbGFyZ3NwZWNfYnVpbHRpbl9tZXRob2RzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEZ1bGxBcmdTcGVjRXF1YWxzKF9waWNrbGUuUGlja2xlci5kdW1wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NfZT1bJ3NlbGYnLCAnb2JqJ10sIGZvcm1hdHRlZD0nKHNlbGYsIG9iaiknKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RnVsbEFyZ1NwZWNFcXVhbHMoX3BpY2tsZS5QaWNrbGVyKGlvLkJ5dGVzSU8oKSkuZHVtcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzX2U9WydzZWxmJywgJ29iaiddLCBmb3JtYXR0ZWQ9JyhzZWxmLCBvYmopJykKKworICAgICAgICBzZWxmLmFzc2VydEZ1bGxBcmdTcGVjRXF1YWxzKAorICAgICAgICAgICAgIG9zLnN0YXQsCisgICAgICAgICAgICAgYXJnc19lPVsncGF0aCddLAorICAgICAgICAgICAgIGt3b25seWFyZ3NfZT1bJ2Rpcl9mZCcsICdmb2xsb3dfc3ltbGlua3MnXSwKKyAgICAgICAgICAgICBrd29ubHlkZWZhdWx0c19lPXsnZGlyX2ZkJzogTm9uZSwgJ2ZvbGxvd19zeW1saW5rcyc6IFRydWV9LAorICAgICAgICAgICAgIGZvcm1hdHRlZD0nKHBhdGgsICosIGRpcl9mZD1Ob25lLCBmb2xsb3dfc3ltbGlua3M9VHJ1ZSknKQorCisgICAgQGNweXRob25fb25seQorICAgIEB1bml0dGVzdC5za2lwSWYoTUlTU0lOR19DX0RPQ1NUUklOR1MsCisgICAgICAgICAgICAgICAgICAgICAiU2lnbmF0dXJlIGluZm9ybWF0aW9uIGZvciBidWlsdGlucyByZXF1aXJlcyBkb2NzdHJpbmdzIikKKyAgICBkZWYgdGVzdF9nZXRmdWxsYWdyc3BlY19idWlsdGluX2Z1bmMoc2VsZik6CisgICAgICAgIGltcG9ydCBfdGVzdGNhcGkKKyAgICAgICAgYnVpbHRpbiA9IF90ZXN0Y2FwaS5kb2NzdHJpbmdfd2l0aF9zaWduYXR1cmVfd2l0aF9kZWZhdWx0cworICAgICAgICBzcGVjID0gaW5zcGVjdC5nZXRmdWxsYXJnc3BlYyhidWlsdGluKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMuZGVmYXVsdHNbMF0sICdhdm9jYWRvJykKKworICAgIEBjcHl0aG9uX29ubHkKKyAgICBAdW5pdHRlc3Quc2tpcElmKE1JU1NJTkdfQ19ET0NTVFJJTkdTLAorICAgICAgICAgICAgICAgICAgICAgIlNpZ25hdHVyZSBpbmZvcm1hdGlvbiBmb3IgYnVpbHRpbnMgcmVxdWlyZXMgZG9jc3RyaW5ncyIpCisgICAgZGVmIHRlc3RfZ2V0ZnVsbGFncnNwZWNfYnVpbHRpbl9mdW5jX25vX3NpZ25hdHVyZShzZWxmKToKKyAgICAgICAgaW1wb3J0IF90ZXN0Y2FwaQorICAgICAgICBidWlsdGluID0gX3Rlc3RjYXBpLmRvY3N0cmluZ19ub19zaWduYXR1cmUKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgaW5zcGVjdC5nZXRmdWxsYXJnc3BlYyhidWlsdGluKQogCiAgICAgZGVmIHRlc3RfZ2V0YXJnc3BlY19tZXRob2Qoc2VsZik6CiAgICAgICAgIGNsYXNzIEEob2JqZWN0KToKQEAgLTU4OCw2ICs3MDUsMTAgQEAKICAgICAgICAgICAgIG1kID0gX0Jyb2tlbk1ldGhvZERlc2NyaXB0b3IoKQogCiAgICAgICAgIGF0dHJzID0gYXR0cnNfd29fb2JqcyhBKQorCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oKCdfX25ld19fJywgJ21ldGhvZCcsIG9iamVjdCksIGF0dHJzLCAnbWlzc2luZyBfX25ld19fJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbigoJ19faW5pdF9fJywgJ21ldGhvZCcsIG9iamVjdCksIGF0dHJzLCAnbWlzc2luZyBfX2luaXRfXycpCisKICAgICAgICAgc2VsZi5hc3NlcnRJbigoJ3MnLCAnc3RhdGljIG1ldGhvZCcsIEEpLCBhdHRycywgJ21pc3Npbmcgc3RhdGljIG1ldGhvZCcpCiAgICAgICAgIHNlbGYuYXNzZXJ0SW4oKCdjJywgJ2NsYXNzIG1ldGhvZCcsIEEpLCBhdHRycywgJ21pc3NpbmcgY2xhc3MgbWV0aG9kJykKICAgICAgICAgc2VsZi5hc3NlcnRJbigoJ3AnLCAncHJvcGVydHknLCBBKSwgYXR0cnMsICdtaXNzaW5nIHByb3BlcnR5JykKQEAgLTY1MCw2ICs3NzEsMTAzIEBACiAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGJ1aWx0aW4sIHR5cGUpOgogICAgICAgICAgICAgICAgIGluc3BlY3QuY2xhc3NpZnlfY2xhc3NfYXR0cnMoYnVpbHRpbikKIAorICAgIGRlZiB0ZXN0X2NsYXNzaWZ5X0R5bmFtaWNDbGFzc0F0dHJpYnV0ZShzZWxmKToKKyAgICAgICAgY2xhc3MgTWV0YSh0eXBlKToKKyAgICAgICAgICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgICAgICAgICBpZiBuYW1lID09ICdoYW0nOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3NwYW0nCisgICAgICAgICAgICAgICAgcmV0dXJuIHN1cGVyKCkuX19nZXRhdHRyX18obmFtZSkKKyAgICAgICAgY2xhc3MgVkEobWV0YWNsYXNzPU1ldGEpOgorICAgICAgICAgICAgQHR5cGVzLkR5bmFtaWNDbGFzc0F0dHJpYnV0ZQorICAgICAgICAgICAgZGVmIGhhbShzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gJ2VnZ3MnCisgICAgICAgIHNob3VsZF9maW5kX2RjYSA9IGluc3BlY3QuQXR0cmlidXRlKCdoYW0nLCAnZGF0YScsIFZBLCBWQS5fX2RpY3RfX1snaGFtJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oc2hvdWxkX2ZpbmRfZGNhLCBpbnNwZWN0LmNsYXNzaWZ5X2NsYXNzX2F0dHJzKFZBKSkKKyAgICAgICAgc2hvdWxkX2ZpbmRfZ2EgPSBpbnNwZWN0LkF0dHJpYnV0ZSgnaGFtJywgJ2RhdGEnLCBNZXRhLCAnc3BhbScpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oc2hvdWxkX2ZpbmRfZ2EsIGluc3BlY3QuY2xhc3NpZnlfY2xhc3NfYXR0cnMoVkEpKQorCisgICAgZGVmIHRlc3RfY2xhc3NpZnlfb3ZlcnJpZGVzX2Jvb2woc2VsZik6CisgICAgICAgIGNsYXNzIE5vQm9vbChvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vQm9vbCgpCisKKyAgICAgICAgICAgIGRlZiBfX2Jvb2xfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKAorICAgICAgICAgICAgICAgICAgICAiVGhpcyBvYmplY3QgZG9lcyBub3Qgc3BlY2lmeSBhIGJvb2xlYW4gdmFsdWUiKQorCisgICAgICAgIGNsYXNzIEhhc05CKG9iamVjdCk6CisgICAgICAgICAgICBkZCA9IE5vQm9vbCgpCisKKyAgICAgICAgc2hvdWxkX2ZpbmRfYXR0ciA9IGluc3BlY3QuQXR0cmlidXRlKCdkZCcsICdkYXRhJywgSGFzTkIsIEhhc05CLmRkKQorICAgICAgICBzZWxmLmFzc2VydEluKHNob3VsZF9maW5kX2F0dHIsIGluc3BlY3QuY2xhc3NpZnlfY2xhc3NfYXR0cnMoSGFzTkIpKQorCisgICAgZGVmIHRlc3RfY2xhc3NpZnlfbWV0YWNsYXNzX2NsYXNzX2F0dHJpYnV0ZShzZWxmKToKKyAgICAgICAgY2xhc3MgTWV0YSh0eXBlKToKKyAgICAgICAgICAgIGZpc2ggPSAnc2xhcCcKKyAgICAgICAgICAgIGRlZiBfX2Rpcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBbJ19fY2xhc3NfXycsICdfX21vZHVsZV9fJywgJ19fbmFtZV9fJywgJ2Zpc2gnXQorICAgICAgICBjbGFzcyBDbGFzcyhtZXRhY2xhc3M9TWV0YSk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNob3VsZF9maW5kID0gaW5zcGVjdC5BdHRyaWJ1dGUoJ2Zpc2gnLCAnZGF0YScsIE1ldGEsICdzbGFwJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbihzaG91bGRfZmluZCwgaW5zcGVjdC5jbGFzc2lmeV9jbGFzc19hdHRycyhDbGFzcykpCisKKyAgICBkZWYgdGVzdF9jbGFzc2lmeV9WaXJ0dWFsQXR0cmlidXRlKHNlbGYpOgorICAgICAgICBjbGFzcyBNZXRhKHR5cGUpOgorICAgICAgICAgICAgZGVmIF9fZGlyX18oY2xzKToKKyAgICAgICAgICAgICAgICByZXR1cm4gWydfX2NsYXNzX18nLCAnX19tb2R1bGVfXycsICdfX25hbWVfXycsICdCT09NJ10KKyAgICAgICAgICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgICAgICAgICBpZiBuYW1lID09J0JPT00nOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gNDIKKyAgICAgICAgICAgICAgICByZXR1cm4gc3VwZXIoKS5fX2dldGF0dHIobmFtZSkKKyAgICAgICAgY2xhc3MgQ2xhc3MobWV0YWNsYXNzPU1ldGEpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzaG91bGRfZmluZCA9IGluc3BlY3QuQXR0cmlidXRlKCdCT09NJywgJ2RhdGEnLCBNZXRhLCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRJbihzaG91bGRfZmluZCwgaW5zcGVjdC5jbGFzc2lmeV9jbGFzc19hdHRycyhDbGFzcykpCisKKyAgICBkZWYgdGVzdF9jbGFzc2lmeV9WaXJ0dWFsQXR0cmlidXRlX211bHRpX2NsYXNzZXMoc2VsZik6CisgICAgICAgIGNsYXNzIE1ldGExKHR5cGUpOgorICAgICAgICAgICAgZGVmIF9fZGlyX18oY2xzKToKKyAgICAgICAgICAgICAgICByZXR1cm4gWydfX2NsYXNzX18nLCAnX19tb2R1bGVfXycsICdfX25hbWVfXycsICdvbmUnXQorICAgICAgICAgICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIG5hbWUpOgorICAgICAgICAgICAgICAgIGlmIG5hbWUgPT0nb25lJzoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgICAgICAgICByZXR1cm4gc3VwZXIoKS5fX2dldGF0dHJfXyhuYW1lKQorICAgICAgICBjbGFzcyBNZXRhMih0eXBlKToKKyAgICAgICAgICAgIGRlZiBfX2Rpcl9fKGNscyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIFsnX19jbGFzc19fJywgJ19fbW9kdWxlX18nLCAnX19uYW1lX18nLCAndHdvJ10KKyAgICAgICAgICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgICAgICAgICBpZiBuYW1lID09J3R3byc6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAyCisgICAgICAgICAgICAgICAgcmV0dXJuIHN1cGVyKCkuX19nZXRhdHRyX18obmFtZSkKKyAgICAgICAgY2xhc3MgTWV0YTMoTWV0YTEsIE1ldGEyKToKKyAgICAgICAgICAgIGRlZiBfX2Rpcl9fKGNscyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGxpc3Qoc29ydGVkKHNldChbJ19fY2xhc3NfXycsICdfX21vZHVsZV9fJywgJ19fbmFtZV9fJywgJ3RocmVlJ10gKworICAgICAgICAgICAgICAgICAgICBNZXRhMS5fX2Rpcl9fKGNscykgKyBNZXRhMi5fX2Rpcl9fKGNscykpKSkKKyAgICAgICAgICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgICAgICAgICBpZiBuYW1lID09J3RocmVlJzoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDMKKyAgICAgICAgICAgICAgICByZXR1cm4gc3VwZXIoKS5fX2dldGF0dHJfXyhuYW1lKQorICAgICAgICBjbGFzcyBDbGFzczEobWV0YWNsYXNzPU1ldGExKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY2xhc3MgQ2xhc3MyKENsYXNzMSwgbWV0YWNsYXNzPU1ldGEzKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBzaG91bGRfZmluZDEgPSBpbnNwZWN0LkF0dHJpYnV0ZSgnb25lJywgJ2RhdGEnLCBNZXRhMSwgMSkKKyAgICAgICAgc2hvdWxkX2ZpbmQyID0gaW5zcGVjdC5BdHRyaWJ1dGUoJ3R3bycsICdkYXRhJywgTWV0YTIsIDIpCisgICAgICAgIHNob3VsZF9maW5kMyA9IGluc3BlY3QuQXR0cmlidXRlKCd0aHJlZScsICdkYXRhJywgTWV0YTMsIDMpCisgICAgICAgIGNjYSA9IGluc3BlY3QuY2xhc3NpZnlfY2xhc3NfYXR0cnMoQ2xhc3MyKQorICAgICAgICBmb3Igc2YgaW4gKHNob3VsZF9maW5kMSwgc2hvdWxkX2ZpbmQyLCBzaG91bGRfZmluZDMpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihzZiwgY2NhKQorCisgICAgZGVmIHRlc3RfY2xhc3NpZnlfY2xhc3NfYXR0cnNfd2l0aF9idWdneV9kaXIoc2VsZik6CisgICAgICAgIGNsYXNzIE0odHlwZSk6CisgICAgICAgICAgICBkZWYgX19kaXJfXyhjbHMpOgorICAgICAgICAgICAgICAgIHJldHVybiBbJ19fY2xhc3NfXycsICdfX25hbWVfXycsICdtaXNzaW5nJ10KKyAgICAgICAgY2xhc3MgQyhtZXRhY2xhc3M9TSk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGF0dHJzID0gW2FbMF0gZm9yIGEgaW4gaW5zcGVjdC5jbGFzc2lmeV9jbGFzc19hdHRycyhDKV0KKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignbWlzc2luZycsIGF0dHJzKQorCiAgICAgZGVmIHRlc3RfZ2V0bWVtYmVyc19kZXNjcmlwdG9ycyhzZWxmKToKICAgICAgICAgY2xhc3MgQShvYmplY3QpOgogICAgICAgICAgICAgZGQgPSBfQnJva2VuRGF0YURlc2NyaXB0b3IoKQpAQCAtNjkzLDYgKzkxMSwyOCBAQAogICAgICAgICBzZWxmLmFzc2VydEluKCgnZicsIGIuZiksIGluc3BlY3QuZ2V0bWVtYmVycyhiKSkKICAgICAgICAgc2VsZi5hc3NlcnRJbigoJ2YnLCBiLmYpLCBpbnNwZWN0LmdldG1lbWJlcnMoYiwgaW5zcGVjdC5pc21ldGhvZCkpCiAKKyAgICBkZWYgdGVzdF9nZXRtZW1iZXJzX1ZpcnR1YWxBdHRyaWJ1dGUoc2VsZik6CisgICAgICAgIGNsYXNzIE0odHlwZSk6CisgICAgICAgICAgICBkZWYgX19nZXRhdHRyX18oY2xzLCBuYW1lKToKKyAgICAgICAgICAgICAgICBpZiBuYW1lID09ICdlZ2dzJzoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdzY3JhbWJsZWQnCisgICAgICAgICAgICAgICAgcmV0dXJuIHN1cGVyKCkuX19nZXRhdHRyX18obmFtZSkKKyAgICAgICAgY2xhc3MgQShtZXRhY2xhc3M9TSk6CisgICAgICAgICAgICBAdHlwZXMuRHluYW1pY0NsYXNzQXR0cmlidXRlCisgICAgICAgICAgICBkZWYgZWdncyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gJ3NwYW0nCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oKCdlZ2dzJywgJ3NjcmFtYmxlZCcpLCBpbnNwZWN0LmdldG1lbWJlcnMoQSkpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oKCdlZ2dzJywgJ3NwYW0nKSwgaW5zcGVjdC5nZXRtZW1iZXJzKEEoKSkpCisKKyAgICBkZWYgdGVzdF9nZXRtZW1iZXJzX3dpdGhfYnVnZ3lfZGlyKHNlbGYpOgorICAgICAgICBjbGFzcyBNKHR5cGUpOgorICAgICAgICAgICAgZGVmIF9fZGlyX18oY2xzKToKKyAgICAgICAgICAgICAgICByZXR1cm4gWydfX2NsYXNzX18nLCAnX19uYW1lX18nLCAnbWlzc2luZyddCisgICAgICAgIGNsYXNzIEMobWV0YWNsYXNzPU0pOgorICAgICAgICAgICAgcGFzcworICAgICAgICBhdHRycyA9IFthWzBdIGZvciBhIGluIGluc3BlY3QuZ2V0bWVtYmVycyhDKV0KKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignbWlzc2luZycsIGF0dHJzKQorCiAKIF9nbG9iYWxfcmVmID0gb2JqZWN0KCkKIGNsYXNzIFRlc3RHZXRDbG9zdXJlVmFycyh1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC05ODksNiArMTIyOSwyMCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsRXhjZXB0aW9uKGYzLCAnMSwgMicpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxFeGNlcHRpb24oZjMsICcxLCAyLCBhPTEsIGI9MicpCiAKKyAgICAgICAgIyBpc3N1ZSAjMjA4MTY6IGdldGNhbGxhcmdzKCkgZmFpbHMgdG8gaXRlcmF0ZSBvdmVyIG5vbi1leGlzdGVudAorICAgICAgICAjIGt3b25seWRlZmF1bHRzIGFuZCByYWlzZXMgYSB3cm9uZyBUeXBlRXJyb3IKKyAgICAgICAgZGVmIGY1KCosIGEpOiBwYXNzCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWlzc2luZyAxIHJlcXVpcmVkIGtleXdvcmQtb25seScpOgorICAgICAgICAgICAgaW5zcGVjdC5nZXRjYWxsYXJncyhmNSkKKworCisgICAgICAgICMgaXNzdWUyMDgxNzoKKyAgICAgICAgZGVmIGY2KGEsIGIsIGMpOgorICAgICAgICAgICAgcGFzcworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVHlwZUVycm9yLCAiJ2EnLCAnYicgYW5kICdjJyIpOgorICAgICAgICAgICAgaW5zcGVjdC5nZXRjYWxsYXJncyhmNikKKwogY2xhc3MgVGVzdEdldGNhbGxhcmdzTWV0aG9kcyhUZXN0R2V0Y2FsbGFyZ3NGdW5jdGlvbnMpOgogCiAgICAgZGVmIHNldFVwKHNlbGYpOgpAQCAtMTA4MCw2ICsxMzM0LDE1IEBACiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnNwZWN0LmdldGF0dHJfc3RhdGljKFRoaW5nLCAneCcpLCBUaGluZy54KQogCisgICAgZGVmIHRlc3RfY2xhc3NWaXJ0dWFsQXR0cmlidXRlKHNlbGYpOgorICAgICAgICBjbGFzcyBUaGluZyhvYmplY3QpOgorICAgICAgICAgICAgQHR5cGVzLkR5bmFtaWNDbGFzc0F0dHJpYnV0ZQorICAgICAgICAgICAgZGVmIHgoc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3gKKyAgICAgICAgICAgIF94ID0gb2JqZWN0KCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluc3BlY3QuZ2V0YXR0cl9zdGF0aWMoVGhpbmcsICd4JyksIFRoaW5nLl9fZGljdF9fWyd4J10pCisKICAgICBkZWYgdGVzdF9pbmhlcml0ZWRfY2xhc3NhdHRyaWJ1dGUoc2VsZik6CiAgICAgICAgIGNsYXNzIFRoaW5nKG9iamVjdCk6CiAgICAgICAgICAgICB4ID0gb2JqZWN0KCkKQEAgLTEzOTAsMTEgKzE2NTMsMTMgQEAKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihTKCkpLCAnKCknKQogCi0gICAgICAgIGRlZiB0ZXN0KHBvLCBwaywgKmFyZ3MsIGtvLCAqKmt3YXJncyk6CisgICAgICAgIGRlZiB0ZXN0KHBvLCBwaywgcG9kPTQyLCBwa2Q9MTAwLCAqYXJncywga28sICoqa3dhcmdzKToKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgc2lnID0gaW5zcGVjdC5zaWduYXR1cmUodGVzdCkKICAgICAgICAgcG8gPSBzaWcucGFyYW1ldGVyc1sncG8nXS5yZXBsYWNlKGtpbmQ9UC5QT1NJVElPTkFMX09OTFkpCisgICAgICAgIHBvZCA9IHNpZy5wYXJhbWV0ZXJzWydwb2QnXS5yZXBsYWNlKGtpbmQ9UC5QT1NJVElPTkFMX09OTFkpCiAgICAgICAgIHBrID0gc2lnLnBhcmFtZXRlcnNbJ3BrJ10KKyAgICAgICAgcGtkID0gc2lnLnBhcmFtZXRlcnNbJ3BrZCddCiAgICAgICAgIGFyZ3MgPSBzaWcucGFyYW1ldGVyc1snYXJncyddCiAgICAgICAgIGtvID0gc2lnLnBhcmFtZXRlcnNbJ2tvJ10KICAgICAgICAga3dhcmdzID0gc2lnLnBhcmFtZXRlcnNbJ2t3YXJncyddCkBAIC0xNDE3LDYgKzE2ODIsMTUgQEAKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsICdkdXBsaWNhdGUgcGFyYW1ldGVyIG5hbWUnKToKICAgICAgICAgICAgIFMoKHBvLCBwaywgYXJncywga3dhcmdzMiwga28pKQogCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLCAnZm9sbG93cyBkZWZhdWx0IGFyZ3VtZW50Jyk6CisgICAgICAgICAgICBTKChwb2QsIHBvKSkKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwgJ2ZvbGxvd3MgZGVmYXVsdCBhcmd1bWVudCcpOgorICAgICAgICAgICAgUygocG8sIHBrZCwgcGspKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLCAnZm9sbG93cyBkZWZhdWx0IGFyZ3VtZW50Jyk6CisgICAgICAgICAgICBTKChwa2QsIHBrKSkKKwogICAgIGRlZiB0ZXN0X3NpZ25hdHVyZV9pbW11dGFiaWxpdHkoc2VsZik6CiAgICAgICAgIGRlZiB0ZXN0KGEpOgogICAgICAgICAgICAgcGFzcwpAQCAtMTQ2MSwxOSArMTczNSwxMDAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgna3dhcmdzJywgLi4uLCBpbnQsICJ2YXJfa2V5d29yZCIpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKSkKIAotICAgIGRlZiB0ZXN0X3NpZ25hdHVyZV9vbl9idWlsdGluX2Z1bmN0aW9uKHNlbGYpOgotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwgJ25vdCBzdXBwb3J0ZWQgYnkgc2lnbmF0dXJlJyk6Ci0gICAgICAgICAgICBpbnNwZWN0LnNpZ25hdHVyZSh0eXBlKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwgJ25vdCBzdXBwb3J0ZWQgYnkgc2lnbmF0dXJlJyk6Ci0gICAgICAgICAgICAjIHN1cHBvcnQgZm9yICd3cmFwcGVyX2Rlc2NyaXB0b3InCi0gICAgICAgICAgICBpbnNwZWN0LnNpZ25hdHVyZSh0eXBlLl9fY2FsbF9fKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwgJ25vdCBzdXBwb3J0ZWQgYnkgc2lnbmF0dXJlJyk6Ci0gICAgICAgICAgICAjIHN1cHBvcnQgZm9yICdtZXRob2Qtd3JhcHBlcicKLSAgICAgICAgICAgIGluc3BlY3Quc2lnbmF0dXJlKG1pbi5fX2NhbGxfXykKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25vIHNpZ25hdHVyZSBmb3VuZCBmb3IgYnVpbHRpbiBmdW5jdGlvbicpOgotICAgICAgICAgICAgIyBzdXBwb3J0IGZvciAnbWV0aG9kLXdyYXBwZXInCi0gICAgICAgICAgICBpbnNwZWN0LnNpZ25hdHVyZShtaW4pCisgICAgQGNweXRob25fb25seQorICAgIEB1bml0dGVzdC5za2lwSWYoTUlTU0lOR19DX0RPQ1NUUklOR1MsCisgICAgICAgICAgICAgICAgICAgICAiU2lnbmF0dXJlIGluZm9ybWF0aW9uIGZvciBidWlsdGlucyByZXF1aXJlcyBkb2NzdHJpbmdzIikKKyAgICBkZWYgdGVzdF9zaWduYXR1cmVfb25fYnVpbHRpbnMoc2VsZik6CisgICAgICAgIGltcG9ydCBfdGVzdGNhcGkKKworICAgICAgICBkZWYgdGVzdF91bmJvdW5kX21ldGhvZChvKToKKyAgICAgICAgICAgICIiIlVzZSB0aGlzIHRvIHRlc3QgdW5ib3VuZCBtZXRob2RzICh0aGluZ3MgdGhhdCBzaG91bGQgaGF2ZSBhIHNlbGYpIiIiCisgICAgICAgICAgICBzaWduYXR1cmUgPSBpbnNwZWN0LnNpZ25hdHVyZShvKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2Uoc2lnbmF0dXJlLCBpbnNwZWN0LlNpZ25hdHVyZSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc2lnbmF0dXJlLnBhcmFtZXRlcnMudmFsdWVzKCkpWzBdLm5hbWUsICdzZWxmJykKKyAgICAgICAgICAgIHJldHVybiBzaWduYXR1cmUKKworICAgICAgICBkZWYgdGVzdF9jYWxsYWJsZShvKToKKyAgICAgICAgICAgICIiIlVzZSB0aGlzIHRvIHRlc3QgYm91bmQgbWV0aG9kcyBvciBub3JtYWwgY2FsbGFibGVzICh0aGluZ3MgdGhhdCBkb24ndCBleHBlY3Qgc2VsZikiIiIKKyAgICAgICAgICAgIHNpZ25hdHVyZSA9IGluc3BlY3Quc2lnbmF0dXJlKG8pCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShzaWduYXR1cmUsIGluc3BlY3QuU2lnbmF0dXJlKSkKKyAgICAgICAgICAgIGlmIHNpZ25hdHVyZS5wYXJhbWV0ZXJzOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwobGlzdChzaWduYXR1cmUucGFyYW1ldGVycy52YWx1ZXMoKSlbMF0ubmFtZSwgJ3NlbGYnKQorICAgICAgICAgICAgcmV0dXJuIHNpZ25hdHVyZQorCisgICAgICAgIHNpZ25hdHVyZSA9IHRlc3RfY2FsbGFibGUoX3Rlc3RjYXBpLmRvY3N0cmluZ193aXRoX3NpZ25hdHVyZV93aXRoX2RlZmF1bHRzKQorICAgICAgICBkZWYgcChuYW1lKTogcmV0dXJuIHNpZ25hdHVyZS5wYXJhbWV0ZXJzW25hbWVdLmRlZmF1bHQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwKCdzJyksICdhdm9jYWRvJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwKCdiJyksIGInYnl0ZXMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAoJ2QnKSwgMy4xNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwKCdpJyksIDM1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAoJ24nKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwKCd0JyksIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCgnZicpLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwKCdsb2NhbCcpLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAoJ3N5cycpLCBzeXMubWF4c2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwKCdleHAnKSwgc3lzLm1heHNpemUgLSAxKQorCisgICAgICAgIHRlc3RfY2FsbGFibGUob2JqZWN0KQorCisgICAgICAgICMgbm9ybWFsIG1ldGhvZAorICAgICAgICAjIChQeU1ldGhvZERlc2NyX1R5cGUsICJtZXRob2RfZGVzY3JpcHRvciIpCisgICAgICAgIHRlc3RfdW5ib3VuZF9tZXRob2QoX3BpY2tsZS5QaWNrbGVyLmR1bXApCisgICAgICAgIGQgPSBfcGlja2xlLlBpY2tsZXIoaW8uU3RyaW5nSU8oKSkKKyAgICAgICAgdGVzdF9jYWxsYWJsZShkLmR1bXApCisKKyAgICAgICAgIyBzdGF0aWMgbWV0aG9kCisgICAgICAgIHRlc3RfY2FsbGFibGUoc3RyLm1ha2V0cmFucykKKyAgICAgICAgdGVzdF9jYWxsYWJsZSgnYWJjJy5tYWtldHJhbnMpCisKKyAgICAgICAgIyBjbGFzcyBtZXRob2QKKyAgICAgICAgdGVzdF9jYWxsYWJsZShkaWN0LmZyb21rZXlzKQorICAgICAgICB0ZXN0X2NhbGxhYmxlKHt9LmZyb21rZXlzKQorCisgICAgICAgICMgd3JhcHBlciBhcm91bmQgc2xvdCAoUHlXcmFwcGVyRGVzY3JfVHlwZSwgIndyYXBwZXJfZGVzY3JpcHRvciIpCisgICAgICAgIHRlc3RfdW5ib3VuZF9tZXRob2QodHlwZS5fX2NhbGxfXykKKyAgICAgICAgdGVzdF91bmJvdW5kX21ldGhvZChpbnQuX19hZGRfXykKKyAgICAgICAgdGVzdF9jYWxsYWJsZSgoMykuX19hZGRfXykKKworICAgICAgICAjIF9QeU1ldGhvZFdyYXBwZXJfVHlwZQorICAgICAgICAjIHN1cHBvcnQgZm9yICdtZXRob2Qtd3JhcHBlcicKKyAgICAgICAgdGVzdF9jYWxsYWJsZShtaW4uX19jYWxsX18pCisKKyAgICAgICAgIyBUaGlzIGRvZXNuJ3Qgd29yayBub3cuCisgICAgICAgICMgKFdlIGRvbid0IGhhdmUgYSB2YWxpZCBzaWduYXR1cmUgZm9yICJ0eXBlIiBpbiAzLjQpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLCAibm8gc2lnbmF0dXJlIGZvdW5kIik6CisgICAgICAgICAgICBjbGFzcyBUaGlzV29ya3NOb3c6CisgICAgICAgICAgICAgICAgX19jYWxsX18gPSB0eXBlCisgICAgICAgICAgICB0ZXN0X2NhbGxhYmxlKFRoaXNXb3Jrc05vdygpKQorCisgICAgICAgICMgUmVncmVzc2lvbiB0ZXN0IGZvciBpc3N1ZSAjMjA3ODYKKyAgICAgICAgdGVzdF91bmJvdW5kX21ldGhvZChkaWN0Ll9fZGVsaXRlbV9fKQorICAgICAgICB0ZXN0X3VuYm91bmRfbWV0aG9kKHByb3BlcnR5Ll9fZGVsZXRlX18pCisKKworICAgIEBjcHl0aG9uX29ubHkKKyAgICBAdW5pdHRlc3Quc2tpcElmKE1JU1NJTkdfQ19ET0NTVFJJTkdTLAorICAgICAgICAgICAgICAgICAgICAgIlNpZ25hdHVyZSBpbmZvcm1hdGlvbiBmb3IgYnVpbHRpbnMgcmVxdWlyZXMgZG9jc3RyaW5ncyIpCisgICAgZGVmIHRlc3Rfc2lnbmF0dXJlX29uX2RlY29yYXRlZF9idWlsdGlucyhzZWxmKToKKyAgICAgICAgaW1wb3J0IF90ZXN0Y2FwaQorICAgICAgICBmdW5jID0gX3Rlc3RjYXBpLmRvY3N0cmluZ193aXRoX3NpZ25hdHVyZV93aXRoX2RlZmF1bHRzCisKKyAgICAgICAgZGVmIGRlY29yYXRvcihmdW5jKToKKyAgICAgICAgICAgIEBmdW5jdG9vbHMud3JhcHMoZnVuYykKKyAgICAgICAgICAgIGRlZiB3cmFwcGVyKCphcmdzLCAqKmt3YXJncykgLT4gaW50OgorICAgICAgICAgICAgICAgIHJldHVybiBmdW5jKCphcmdzLCAqKmt3YXJncykKKyAgICAgICAgICAgIHJldHVybiB3cmFwcGVyCisKKyAgICAgICAgZGVjb3JhdGVkX2Z1bmMgPSBkZWNvcmF0b3IoZnVuYykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluc3BlY3Quc2lnbmF0dXJlKGZ1bmMpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGluc3BlY3Quc2lnbmF0dXJlKGRlY29yYXRlZF9mdW5jKSkKKworICAgIEBjcHl0aG9uX29ubHkKKyAgICBkZWYgdGVzdF9zaWduYXR1cmVfb25fYnVpbHRpbnNfbm9fc2lnbmF0dXJlKHNlbGYpOgorICAgICAgICBpbXBvcnQgX3Rlc3RjYXBpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLCAnbm8gc2lnbmF0dXJlIGZvdW5kIGZvciBidWlsdGluJyk6CisgICAgICAgICAgICBpbnNwZWN0LnNpZ25hdHVyZShfdGVzdGNhcGkuZG9jc3RyaW5nX25vX3NpZ25hdHVyZSkKIAogICAgIGRlZiB0ZXN0X3NpZ25hdHVyZV9vbl9ub25fZnVuY3Rpb24oc2VsZik6CiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUeXBlRXJyb3IsICdpcyBub3QgYSBjYWxsYWJsZSBvYmplY3QnKToKQEAgLTE0ODIsMTQgKzE4MzcsMTIxIEBACiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUeXBlRXJyb3IsICdpcyBub3QgYSBQeXRob24gZnVuY3Rpb24nKToKICAgICAgICAgICAgIGluc3BlY3QuU2lnbmF0dXJlLmZyb21fZnVuY3Rpb24oNDIpCiAKLSAgICBkZWYgdGVzdF9zaWduYXR1cmVfb25fbWV0aG9kKHNlbGYpOgotICAgICAgICBjbGFzcyBUZXN0OgotICAgICAgICAgICAgZGVmIGZvbyhzZWxmLCBhcmcxLCBhcmcyPTEpIC0+IGludDoKKyAgICBkZWYgdGVzdF9zaWduYXR1cmVfZnJvbV9idWlsdGluX2Vycm9ycyhzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFR5cGVFcnJvciwgJ2lzIG5vdCBhIFB5dGhvbiBidWlsdGluJyk6CisgICAgICAgICAgICBpbnNwZWN0LlNpZ25hdHVyZS5mcm9tX2J1aWx0aW4oNDIpCisKKyAgICBkZWYgdGVzdF9zaWduYXR1cmVfZnJvbV9mdW5jdGlvbmxpa2Vfb2JqZWN0KHNlbGYpOgorICAgICAgICBkZWYgZnVuYyhhLGIsICphcmdzLCBrd29ubHk9VHJ1ZSwga3dvbmx5cmVxLCAqKmt3YXJncyk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgY2xhc3MgZnVuY2xpa2U6CisgICAgICAgICAgICAjIEhhcyB0byBiZSBjYWxsYWJsZSwgYW5kIGhhdmUgY29ycmVjdAorICAgICAgICAgICAgIyBfX2NvZGVfXywgX19hbm5vdGF0aW9uc19fLCBfX2RlZmF1bHRzX18sIF9fbmFtZV9fLAorICAgICAgICAgICAgIyBhbmQgX19rd2RlZmF1bHRzX18gYXR0cmlidXRlcworCisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgZnVuYyk6CisgICAgICAgICAgICAgICAgc2VsZi5fX25hbWVfXyA9IGZ1bmMuX19uYW1lX18KKyAgICAgICAgICAgICAgICBzZWxmLl9fY29kZV9fID0gZnVuYy5fX2NvZGVfXworICAgICAgICAgICAgICAgIHNlbGYuX19hbm5vdGF0aW9uc19fID0gZnVuYy5fX2Fubm90YXRpb25zX18KKyAgICAgICAgICAgICAgICBzZWxmLl9fZGVmYXVsdHNfXyA9IGZ1bmMuX19kZWZhdWx0c19fCisgICAgICAgICAgICAgICAgc2VsZi5fX2t3ZGVmYXVsdHNfXyA9IGZ1bmMuX19rd2RlZmF1bHRzX18KKyAgICAgICAgICAgICAgICBzZWxmLmZ1bmMgPSBmdW5jCisKKyAgICAgICAgICAgIGRlZiBfX2NhbGxfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmZ1bmMoKmFyZ3MsICoqa3dhcmdzKQorCisgICAgICAgIHNpZ19mdW5jID0gaW5zcGVjdC5TaWduYXR1cmUuZnJvbV9mdW5jdGlvbihmdW5jKQorCisgICAgICAgIHNpZ19mdW5jbGlrZSA9IGluc3BlY3QuU2lnbmF0dXJlLmZyb21fZnVuY3Rpb24oZnVuY2xpa2UoZnVuYykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2lnX2Z1bmNsaWtlLCBzaWdfZnVuYykKKworICAgICAgICBzaWdfZnVuY2xpa2UgPSBpbnNwZWN0LnNpZ25hdHVyZShmdW5jbGlrZShmdW5jKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaWdfZnVuY2xpa2UsIHNpZ19mdW5jKQorCisgICAgICAgICMgSWYgb2JqZWN0IGlzIG5vdCBhIGR1Y2sgdHlwZSBvZiBmdW5jdGlvbiwgdGhlbgorICAgICAgICAjIHNpZ25hdHVyZSB3aWxsIHRyeSB0byBnZXQgYSBzaWduYXR1cmUgZm9yIGl0cyAnX19jYWxsX18nCisgICAgICAgICMgbWV0aG9kCisgICAgICAgIGZsID0gZnVuY2xpa2UoZnVuYykKKyAgICAgICAgZGVsIGZsLl9fZGVmYXVsdHNfXworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2lnbmF0dXJlKGZsKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoKCgnYXJncycsIC4uLiwgLi4uLCAidmFyX3Bvc2l0aW9uYWwiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgna3dhcmdzJywgLi4uLCAuLi4sICJ2YXJfa2V5d29yZCIpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLikpCisKKyAgICAgICAgIyBUZXN0IHdpdGggY3l0aG9uLWxpa2UgYnVpbHRpbnM6CisgICAgICAgIF9vcmlnX2lzZGVzYyA9IGluc3BlY3QuaXNtZXRob2RkZXNjcmlwdG9yCisgICAgICAgIGRlZiBfaXNkZXNjKG9iaik6CisgICAgICAgICAgICBpZiBoYXNhdHRyKG9iaiwgJ19idWlsdGlubW9jaycpOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICByZXR1cm4gX29yaWdfaXNkZXNjKG9iaikKKworICAgICAgICB3aXRoIHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ2luc3BlY3QuaXNtZXRob2RkZXNjcmlwdG9yJywgX2lzZGVzYyk6CisgICAgICAgICAgICBidWlsdGluX2Z1bmMgPSBmdW5jbGlrZShmdW5jKQorICAgICAgICAgICAgIyBNYWtlIHN1cmUgdGhhdCBvdXIgbW9jayBzZXR1cCBpcyB3b3JraW5nCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGluc3BlY3QuaXNtZXRob2RkZXNjcmlwdG9yKGJ1aWx0aW5fZnVuYykpCisgICAgICAgICAgICBidWlsdGluX2Z1bmMuX2J1aWx0aW5tb2NrID0gVHJ1ZQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGluc3BlY3QuaXNtZXRob2RkZXNjcmlwdG9yKGJ1aWx0aW5fZnVuYykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluc3BlY3Quc2lnbmF0dXJlKGJ1aWx0aW5fZnVuYyksIHNpZ19mdW5jKQorCisgICAgZGVmIHRlc3Rfc2lnbmF0dXJlX2Z1bmN0aW9ubGlrZV9jbGFzcyhzZWxmKToKKyAgICAgICAgIyBXZSBvbmx5IHdhbnQgdG8gZHVjayB0eXBlIGZ1bmN0aW9uLWxpa2Ugb2JqZWN0cywKKyAgICAgICAgIyBub3QgY2xhc3Nlcy4KKworICAgICAgICBkZWYgZnVuYyhhLGIsICphcmdzLCBrd29ubHk9VHJ1ZSwga3dvbmx5cmVxLCAqKmt3YXJncyk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgY2xhc3MgZnVuY2xpa2U6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgbWFya2VyKToKICAgICAgICAgICAgICAgICBwYXNzCiAKLSAgICAgICAgbWV0aCA9IFRlc3QoKS5mb28KKyAgICAgICAgICAgIF9fbmFtZV9fID0gZnVuYy5fX25hbWVfXworICAgICAgICAgICAgX19jb2RlX18gPSBmdW5jLl9fY29kZV9fCisgICAgICAgICAgICBfX2Fubm90YXRpb25zX18gPSBmdW5jLl9fYW5ub3RhdGlvbnNfXworICAgICAgICAgICAgX19kZWZhdWx0c19fID0gZnVuYy5fX2RlZmF1bHRzX18KKyAgICAgICAgICAgIF9fa3dkZWZhdWx0c19fID0gZnVuYy5fX2t3ZGVmYXVsdHNfXwogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zaWduYXR1cmUobWV0aCksCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUeXBlRXJyb3IsICdpcyBub3QgYSBQeXRob24gZnVuY3Rpb24nKToKKyAgICAgICAgICAgIGluc3BlY3QuU2lnbmF0dXJlLmZyb21fZnVuY3Rpb24oZnVuY2xpa2UpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoaW5zcGVjdC5zaWduYXR1cmUoZnVuY2xpa2UpKSwgJyhtYXJrZXIpJykKKworICAgIGRlZiB0ZXN0X3NpZ25hdHVyZV9vbl9tZXRob2Qoc2VsZik6CisgICAgICAgIGNsYXNzIFRlc3Q6CisgICAgICAgICAgICBkZWYgX19pbml0X18oKmFyZ3MpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGRlZiBtMShzZWxmLCBhcmcxLCBhcmcyPTEpIC0+IGludDoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBkZWYgbTIoKmFyZ3MpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGRlZiBfX2NhbGxfXygqLCBhKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNpZ25hdHVyZShUZXN0KCkubTEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgoKCdhcmcxJywgLi4uLCAuLi4sICJwb3NpdGlvbmFsX29yX2tleXdvcmQiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgnYXJnMicsIDEsIC4uLiwgInBvc2l0aW9uYWxfb3Jfa2V5d29yZCIpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2lnbmF0dXJlKFRlc3QoKS5tMiksCisgICAgICAgICAgICAgICAgICAgICAgICAgKCgoJ2FyZ3MnLCAuLi4sIC4uLiwgInZhcl9wb3NpdGlvbmFsIiksKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2lnbmF0dXJlKFRlc3QpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgoKCdhcmdzJywgLi4uLCAuLi4sICJ2YXJfcG9zaXRpb25hbCIpLCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLikpCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsICdpbnZhbGlkIG1ldGhvZCBzaWduYXR1cmUnKToKKyAgICAgICAgICAgIHNlbGYuc2lnbmF0dXJlKFRlc3QoKSkKKworICAgIGRlZiB0ZXN0X3NpZ25hdHVyZV93cmFwcGVkX2JvdW5kX21ldGhvZChzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAyNDI5OAorICAgICAgICBjbGFzcyBUZXN0OgorICAgICAgICAgICAgZGVmIG0xKHNlbGYsIGFyZzEsIGFyZzI9MSkgLT4gaW50OgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgQGZ1bmN0b29scy53cmFwcyhUZXN0KCkubTEpCisgICAgICAgIGRlZiBtMWQoKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNpZ25hdHVyZShtMWQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICgoKCdhcmcxJywgLi4uLCAuLi4sICJwb3NpdGlvbmFsX29yX2tleXdvcmQiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnYXJnMicsIDEsIC4uLiwgInBvc2l0aW9uYWxfb3Jfa2V5d29yZCIpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KSkKQEAgLTE1MzMsNiArMTk5NSw4IEBACiAgICAgZGVmIHRlc3Rfc2lnbmF0dXJlX29uX3BhcnRpYWwoc2VsZik6CiAgICAgICAgIGZyb20gZnVuY3Rvb2xzIGltcG9ydCBwYXJ0aWFsCiAKKyAgICAgICAgUGFyYW1ldGVyID0gaW5zcGVjdC5QYXJhbWV0ZXIKKwogICAgICAgICBkZWYgdGVzdCgpOgogICAgICAgICAgICAgcGFzcwogCkBAIC0xNTY4LDE1ICsyMDMyLDIyIEBACiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNpZ25hdHVyZShwYXJ0aWFsKHRlc3QsIGI9MSwgYz0yKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoJ2EnLCAuLi4sIC4uLiwgInBvc2l0aW9uYWxfb3Jfa2V5d29yZCIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdiJywgMSwgLi4uLCAicG9zaXRpb25hbF9vcl9rZXl3b3JkIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2InLCAxLCAuLi4sICJrZXl3b3JkX29ubHkiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnYycsIDIsIC4uLiwgImtleXdvcmRfb25seSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdkJywgLi4uLCAuLi4sICJrZXl3b3JkX29ubHkiKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLikpCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNpZ25hdHVyZShwYXJ0aWFsKHRlc3QsIDAsIGI9MSwgYz0yKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgKCgoJ2InLCAxLCAuLi4sICJwb3NpdGlvbmFsX29yX2tleXdvcmQiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoKCgnYicsIDEsIC4uLiwgImtleXdvcmRfb25seSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdjJywgMiwgLi4uLCAia2V5d29yZF9vbmx5IiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2QnLCAuLi4sIC4uLiwgImtleXdvcmRfb25seSIpLCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2QnLCAuLi4sIC4uLiwgImtleXdvcmRfb25seSIpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2lnbmF0dXJlKHBhcnRpYWwodGVzdCwgYT0xKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgKCgoJ2EnLCAxLCAuLi4sICJrZXl3b3JkX29ubHkiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgnYicsIC4uLiwgLi4uLCAia2V5d29yZF9vbmx5IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2MnLCAuLi4sIC4uLiwgImtleXdvcmRfb25seSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdkJywgLi4uLCAuLi4sICJrZXl3b3JkX29ubHkiKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLikpCiAKICAgICAgICAgZGVmIHRlc3QoYSwgKmFyZ3MsIGIsICoqa3dhcmdzKToKQEAgLTE1ODgsMTMgKzIwNTksMTggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgna3dhcmdzJywgLi4uLCAuLi4sICJ2YXJfa2V5d29yZCIpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKSkKIAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2lnbmF0dXJlKHBhcnRpYWwodGVzdCwgYT0xKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgKCgoJ2EnLCAxLCAuLi4sICJrZXl3b3JkX29ubHkiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgnYicsIC4uLiwgLi4uLCAia2V5d29yZF9vbmx5IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2t3YXJncycsIC4uLiwgLi4uLCAidmFyX2tleXdvcmQiKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLikpCisKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNpZ25hdHVyZShwYXJ0aWFsKHRlc3QsIDEsIDIsIDMpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAoKCgnYXJncycsIC4uLiwgLi4uLCAidmFyX3Bvc2l0aW9uYWwiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnYicsIC4uLiwgLi4uLCAia2V5d29yZF9vbmx5IiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2t3YXJncycsIC4uLiwgLi4uLCAidmFyX2tleXdvcmQiKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLikpCiAKLQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2lnbmF0dXJlKHBhcnRpYWwodGVzdCwgMSwgMiwgMywgdGVzdD1UcnVlKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoJ2FyZ3MnLCAuLi4sIC4uLiwgInZhcl9wb3NpdGlvbmFsIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2InLCAuLi4sIC4uLiwgImtleXdvcmRfb25seSIpLApAQCAtMTY0MSw3ICsyMTE3LDcgQEAKICAgICAgICAgICAgIHJldHVybiBhCiAgICAgICAgIF9mb28gPSBwYXJ0aWFsKHBhcnRpYWwoZm9vLCBhPTEwKSwgYT0yMCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNpZ25hdHVyZShfZm9vKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAoKCgnYScsIDIwLCAuLi4sICJwb3NpdGlvbmFsX29yX2tleXdvcmQiKSwpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgoKCdhJywgMjAsIC4uLiwgImtleXdvcmRfb25seSIpLCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLikpCiAgICAgICAgICMgY2hlY2sgdGhhdCB3ZSBkb24ndCBoYXZlIGFueSBzaWRlLWVmZmVjdHMgaW4gc2lnbmF0dXJlKCksCiAgICAgICAgICMgYW5kIHRoZSBwYXJ0aWFsIG9iamVjdCBpcyBzdGlsbCBmdW5jdGlvbmluZwpAQCAtMTY1MCw0MiArMjEyNiwxMTkgQEAKICAgICAgICAgZGVmIGZvbyhhLCBiLCBjKToKICAgICAgICAgICAgIHJldHVybiBhLCBiLCBjCiAgICAgICAgIF9mb28gPSBwYXJ0aWFsKHBhcnRpYWwoZm9vLCAxLCBiPTIwKSwgYj0zMCkKKwogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2lnbmF0dXJlKF9mb28pLAotICAgICAgICAgICAgICAgICAgICAgICAgICgoKCdiJywgMzAsIC4uLiwgInBvc2l0aW9uYWxfb3Jfa2V5d29yZCIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdjJywgLi4uLCAuLi4sICJwb3NpdGlvbmFsX29yX2tleXdvcmQiKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgKCgoJ2InLCAzMCwgLi4uLCAia2V5d29yZF9vbmx5IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2MnLCAuLi4sIC4uLiwgImtleXdvcmRfb25seSIpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfZm9vKGM9MTApLCAoMSwgMzAsIDEwKSkKLSAgICAgICAgX2ZvbyA9IHBhcnRpYWwoX2ZvbywgMikgIyBub3cgJ2InIGhhcyB0d28gdmFsdWVzIC0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBwb3NpdGlvbmFsIGFuZCBrZXl3b3JkCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLCAiaGFzIGluY29ycmVjdCBhcmd1bWVudHMiKToKLSAgICAgICAgICAgIGluc3BlY3Quc2lnbmF0dXJlKF9mb28pCiAKICAgICAgICAgZGVmIGZvbyhhLCBiLCBjLCAqLCBkKToKICAgICAgICAgICAgIHJldHVybiBhLCBiLCBjLCBkCiAgICAgICAgIF9mb28gPSBwYXJ0aWFsKHBhcnRpYWwoZm9vLCBkPTIwLCBjPTIwKSwgYj0xMCwgZD0zMCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNpZ25hdHVyZShfZm9vKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAoKCgnYScsIC4uLiwgLi4uLCAicG9zaXRpb25hbF9vcl9rZXl3b3JkIiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2InLCAxMCwgLi4uLCAicG9zaXRpb25hbF9vcl9rZXl3b3JkIiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2MnLCAyMCwgLi4uLCAicG9zaXRpb25hbF9vcl9rZXl3b3JkIiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2QnLCAzMCwgLi4uLCAia2V5d29yZF9vbmx5IikpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdiJywgMTAsIC4uLiwgImtleXdvcmRfb25seSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdjJywgMjAsIC4uLiwgImtleXdvcmRfb25seSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdkJywgMzAsIC4uLiwgImtleXdvcmRfb25seSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKSkKICAgICAgICAgYmEgPSBpbnNwZWN0LnNpZ25hdHVyZShfZm9vKS5iaW5kKGE9MjAwLCBiPTExKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF9mb28oKmJhLmFyZ3MsICoqYmEua3dhcmdzKSwgKDIwMCwgMTEsIDIwLCAzMCkpCiAKICAgICAgICAgZGVmIGZvbyhhPTEsIGI9MiwgYz0zKToKICAgICAgICAgICAgIHJldHVybiBhLCBiLCBjCi0gICAgICAgIF9mb28gPSBwYXJ0aWFsKGZvbywgYT0xMCwgYz0xMykKLSAgICAgICAgYmEgPSBpbnNwZWN0LnNpZ25hdHVyZShfZm9vKS5iaW5kKDExKQorICAgICAgICBfZm9vID0gcGFydGlhbChmb28sIGM9MTMpICMgKGE9MSwgYj0yLCAqLCBjPTEzKQorCisgICAgICAgIGJhID0gaW5zcGVjdC5zaWduYXR1cmUoX2ZvbykuYmluZChhPTExKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF9mb28oKmJhLmFyZ3MsICoqYmEua3dhcmdzKSwgKDExLCAyLCAxMykpCisKICAgICAgICAgYmEgPSBpbnNwZWN0LnNpZ25hdHVyZShfZm9vKS5iaW5kKDExLCAxMikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfZm9vKCpiYS5hcmdzLCAqKmJhLmt3YXJncyksICgxMSwgMTIsIDEzKSkKKwogICAgICAgICBiYSA9IGluc3BlY3Quc2lnbmF0dXJlKF9mb28pLmJpbmQoMTEsIGI9MTIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX2ZvbygqYmEuYXJncywgKipiYS5rd2FyZ3MpLCAoMTEsIDEyLCAxMykpCisKICAgICAgICAgYmEgPSBpbnNwZWN0LnNpZ25hdHVyZShfZm9vKS5iaW5kKGI9MTIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX2ZvbygqYmEuYXJncywgKipiYS5rd2FyZ3MpLCAoMTAsIDEyLCAxMykpCi0gICAgICAgIF9mb28gPSBwYXJ0aWFsKF9mb28sIGI9MTApCi0gICAgICAgIGJhID0gaW5zcGVjdC5zaWduYXR1cmUoX2ZvbykuYmluZCgxMiwgMTQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX2ZvbygqYmEuYXJncywgKipiYS5rd2FyZ3MpLCAoMTIsIDE0LCAxMykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX2ZvbygqYmEuYXJncywgKipiYS5rd2FyZ3MpLCAoMSwgMTIsIDEzKSkKKworICAgICAgICBfZm9vID0gcGFydGlhbChfZm9vLCBiPTEwLCBjPTIwKQorICAgICAgICBiYSA9IGluc3BlY3Quc2lnbmF0dXJlKF9mb28pLmJpbmQoMTIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX2ZvbygqYmEuYXJncywgKipiYS5rd2FyZ3MpLCAoMTIsIDEwLCAyMCkpCisKKworICAgICAgICBkZWYgZm9vKGEsIGIsIGMsIGQsICoqa3dhcmdzKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2lnID0gaW5zcGVjdC5zaWduYXR1cmUoZm9vKQorICAgICAgICBwYXJhbXMgPSBzaWcucGFyYW1ldGVycy5jb3B5KCkKKyAgICAgICAgcGFyYW1zWydhJ10gPSBwYXJhbXNbJ2EnXS5yZXBsYWNlKGtpbmQ9UGFyYW1ldGVyLlBPU0lUSU9OQUxfT05MWSkKKyAgICAgICAgcGFyYW1zWydiJ10gPSBwYXJhbXNbJ2InXS5yZXBsYWNlKGtpbmQ9UGFyYW1ldGVyLlBPU0lUSU9OQUxfT05MWSkKKyAgICAgICAgZm9vLl9fc2lnbmF0dXJlX18gPSBpbnNwZWN0LlNpZ25hdHVyZShwYXJhbXMudmFsdWVzKCkpCisgICAgICAgIHNpZyA9IGluc3BlY3Quc2lnbmF0dXJlKGZvbykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoc2lnKSwgJyhhLCBiLCAvLCBjLCBkLCAqKmt3YXJncyknKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zaWduYXR1cmUocGFydGlhbChmb28sIDEpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoKCgnYicsIC4uLiwgLi4uLCAncG9zaXRpb25hbF9vbmx5JyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2MnLCAuLi4sIC4uLiwgJ3Bvc2l0aW9uYWxfb3Jfa2V5d29yZCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdkJywgLi4uLCAuLi4sICdwb3NpdGlvbmFsX29yX2tleXdvcmQnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgna3dhcmdzJywgLi4uLCAuLi4sICd2YXJfa2V5d29yZCcpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zaWduYXR1cmUocGFydGlhbChmb28sIDEsIDIpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoKCgnYycsIC4uLiwgLi4uLCAncG9zaXRpb25hbF9vcl9rZXl3b3JkJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2QnLCAuLi4sIC4uLiwgJ3Bvc2l0aW9uYWxfb3Jfa2V5d29yZCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdrd2FyZ3MnLCAuLi4sIC4uLiwgJ3Zhcl9rZXl3b3JkJykpLAorICAgICAgICAgICAgICAgICAgICAgICAgIC4uLikpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNpZ25hdHVyZShwYXJ0aWFsKGZvbywgMSwgMiwgMykpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgoKCdkJywgLi4uLCAuLi4sICdwb3NpdGlvbmFsX29yX2tleXdvcmQnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgna3dhcmdzJywgLi4uLCAuLi4sICd2YXJfa2V5d29yZCcpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zaWduYXR1cmUocGFydGlhbChmb28sIDEsIDIsIGM9MykpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgoKCdjJywgMywgLi4uLCAna2V5d29yZF9vbmx5JyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2QnLCAuLi4sIC4uLiwgJ2tleXdvcmRfb25seScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdrd2FyZ3MnLCAuLi4sIC4uLiwgJ3Zhcl9rZXl3b3JkJykpLAorICAgICAgICAgICAgICAgICAgICAgICAgIC4uLikpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNpZ25hdHVyZShwYXJ0aWFsKGZvbywgMSwgYz0zKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgKCgoJ2InLCAuLi4sIC4uLiwgJ3Bvc2l0aW9uYWxfb25seScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdjJywgMywgLi4uLCAna2V5d29yZF9vbmx5JyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2QnLCAuLi4sIC4uLiwgJ2tleXdvcmRfb25seScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdrd2FyZ3MnLCAuLi4sIC4uLiwgJ3Zhcl9rZXl3b3JkJykpLAorICAgICAgICAgICAgICAgICAgICAgICAgIC4uLikpCisKKyAgICBkZWYgdGVzdF9zaWduYXR1cmVfb25fcGFydGlhbG1ldGhvZChzZWxmKToKKyAgICAgICAgZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHBhcnRpYWxtZXRob2QKKworICAgICAgICBjbGFzcyBTcGFtOgorICAgICAgICAgICAgZGVmIHRlc3QoKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBoYW0gPSBwYXJ0aWFsbWV0aG9kKHRlc3QpCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsICJoYXMgaW5jb3JyZWN0IGFyZ3VtZW50cyIpOgorICAgICAgICAgICAgaW5zcGVjdC5zaWduYXR1cmUoU3BhbS5oYW0pCisKKyAgICAgICAgY2xhc3MgU3BhbToKKyAgICAgICAgICAgIGRlZiB0ZXN0KGl0LCBhLCAqLCBjKSAtPiAnc3BhbSc6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgaGFtID0gcGFydGlhbG1ldGhvZCh0ZXN0LCBjPTEpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNpZ25hdHVyZShTcGFtLmhhbSksCisgICAgICAgICAgICAgICAgICAgICAgICAgKCgoJ2l0JywgLi4uLCAuLi4sICdwb3NpdGlvbmFsX29yX2tleXdvcmQnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgnYScsIC4uLiwgLi4uLCAncG9zaXRpb25hbF9vcl9rZXl3b3JkJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2MnLCAxLCAuLi4sICdrZXl3b3JkX29ubHknKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICdzcGFtJykpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNpZ25hdHVyZShTcGFtKCkuaGFtKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoKCgnYScsIC4uLiwgLi4uLCAncG9zaXRpb25hbF9vcl9rZXl3b3JkJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2MnLCAxLCAuLi4sICdrZXl3b3JkX29ubHknKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICdzcGFtJykpCisKKyAgICBkZWYgdGVzdF9zaWduYXR1cmVfb25fZmFrZV9wYXJ0aWFsbWV0aG9kKHNlbGYpOgorICAgICAgICBkZWYgZm9vKGEpOiBwYXNzCisgICAgICAgIGZvby5fcGFydGlhbG1ldGhvZCA9ICdzcGFtJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihpbnNwZWN0LnNpZ25hdHVyZShmb28pKSwgJyhhKScpCiAKICAgICBkZWYgdGVzdF9zaWduYXR1cmVfb25fZGVjb3JhdGVkKHNlbGYpOgogICAgICAgICBpbXBvcnQgZnVuY3Rvb2xzCkBAIC0xNzM2LDYgKzIyODksMTcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAoKCgnYicsIC4uLiwgLi4uLCAicG9zaXRpb25hbF9vcl9rZXl3b3JkIiksKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKSkKIAorICAgICAgICAjIFRlc3Qgd2UgaGFuZGxlIF9fc2lnbmF0dXJlX18gcGFydHdheSBkb3duIHRoZSB3cmFwcGVyIHN0YWNrCisgICAgICAgIGRlZiB3cmFwcGVkX2Zvb19jYWxsKCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHdyYXBwZWRfZm9vX2NhbGwuX193cmFwcGVkX18gPSBGb28uX19jYWxsX18KKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2lnbmF0dXJlKHdyYXBwZWRfZm9vX2NhbGwpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgoKCdhJywgLi4uLCAuLi4sICJwb3NpdGlvbmFsX29yX2tleXdvcmQiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgnYicsIC4uLiwgLi4uLCAicG9zaXRpb25hbF9vcl9rZXl3b3JkIikpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pKQorCisKICAgICBkZWYgdGVzdF9zaWduYXR1cmVfb25fY2xhc3Moc2VsZik6CiAgICAgICAgIGNsYXNzIEM6CiAgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgYSk6CkBAIC0xODE3LDYgKzIzODEsNDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnYmFyJywgMiwgLi4uLCAia2V5d29yZF9vbmx5IikpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pKQogCisgICAgQHVuaXR0ZXN0LnNraXBJZihNSVNTSU5HX0NfRE9DU1RSSU5HUywKKyAgICAgICAgICAgICAgICAgICAgICJTaWduYXR1cmUgaW5mb3JtYXRpb24gZm9yIGJ1aWx0aW5zIHJlcXVpcmVzIGRvY3N0cmluZ3MiKQorICAgIGRlZiB0ZXN0X3NpZ25hdHVyZV9vbl9jbGFzc193aXRob3V0X2luaXQoc2VsZik6CisgICAgICAgICMgVGVzdCBjbGFzc2VzIHdpdGhvdXQgdXNlci1kZWZpbmVkIF9faW5pdF9fIG9yIF9fbmV3X18KKyAgICAgICAgY2xhc3MgQzogcGFzcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihpbnNwZWN0LnNpZ25hdHVyZShDKSksICcoKScpCisgICAgICAgIGNsYXNzIEQoQyk6IHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoaW5zcGVjdC5zaWduYXR1cmUoRCkpLCAnKCknKQorCisgICAgICAgICMgVGVzdCBtZXRhLWNsYXNzZXMgd2l0aG91dCB1c2VyLWRlZmluZWQgX19pbml0X18gb3IgX19uZXdfXworICAgICAgICBjbGFzcyBDKHR5cGUpOiBwYXNzCisgICAgICAgIGNsYXNzIEQoQyk6IHBhc3MKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsICJjYWxsYWJsZS4qaXMgbm90IHN1cHBvcnRlZCIpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnNwZWN0LnNpZ25hdHVyZShDKSwgTm9uZSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsICJjYWxsYWJsZS4qaXMgbm90IHN1cHBvcnRlZCIpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnNwZWN0LnNpZ25hdHVyZShEKSwgTm9uZSkKKworICAgIEB1bml0dGVzdC5za2lwSWYoTUlTU0lOR19DX0RPQ1NUUklOR1MsCisgICAgICAgICAgICAgICAgICAgICAiU2lnbmF0dXJlIGluZm9ybWF0aW9uIGZvciBidWlsdGlucyByZXF1aXJlcyBkb2NzdHJpbmdzIikKKyAgICBkZWYgdGVzdF9zaWduYXR1cmVfb25fYnVpbHRpbl9jbGFzcyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoaW5zcGVjdC5zaWduYXR1cmUoX3BpY2tsZS5QaWNrbGVyKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgJyhmaWxlLCBwcm90b2NvbD1Ob25lLCBmaXhfaW1wb3J0cz1UcnVlKScpCisKKyAgICAgICAgY2xhc3MgUChfcGlja2xlLlBpY2tsZXIpOiBwYXNzCisgICAgICAgIGNsYXNzIEVtcHR5VHJhaXQ6IHBhc3MKKyAgICAgICAgY2xhc3MgUDIoRW1wdHlUcmFpdCwgUCk6IHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoaW5zcGVjdC5zaWduYXR1cmUoUCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICcoZmlsZSwgcHJvdG9jb2w9Tm9uZSwgZml4X2ltcG9ydHM9VHJ1ZSknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihpbnNwZWN0LnNpZ25hdHVyZShQMikpLAorICAgICAgICAgICAgICAgICAgICAgICAgICcoZmlsZSwgcHJvdG9jb2w9Tm9uZSwgZml4X2ltcG9ydHM9VHJ1ZSknKQorCisgICAgICAgIGNsYXNzIFAzKFAyKToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzcGFtKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGluc3BlY3Quc2lnbmF0dXJlKFAzKSksICcoc3BhbSknKQorCisgICAgICAgIGNsYXNzIE1ldGFQKHR5cGUpOgorICAgICAgICAgICAgZGVmIF9fY2FsbF9fKGNscywgZm9vLCBiYXIpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY2xhc3MgUDQoUDIsIG1ldGFjbGFzcz1NZXRhUCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGluc3BlY3Quc2lnbmF0dXJlKFA0KSksICcoZm9vLCBiYXIpJykKKwogICAgIGRlZiB0ZXN0X3NpZ25hdHVyZV9vbl9jYWxsYWJsZV9vYmplY3RzKHNlbGYpOgogICAgICAgICBjbGFzcyBGb286CiAgICAgICAgICAgICBkZWYgX19jYWxsX18oc2VsZiwgYSk6CkBAIC0xODM4LDE4ICsyNDQ1LDE2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoJ2EnLCAuLi4sIC4uLiwgInBvc2l0aW9uYWxfb3Jfa2V5d29yZCIpLCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLikpCiAKLSAgICAgICAgY2xhc3MgVG9GYWlsOgotICAgICAgICAgICAgX19jYWxsX18gPSB0eXBlCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLCAibm90IHN1cHBvcnRlZCBieSBzaWduYXR1cmUiKToKLSAgICAgICAgICAgIGluc3BlY3Quc2lnbmF0dXJlKFRvRmFpbCgpKQotCi0KICAgICAgICAgY2xhc3MgV3JhcHBlZDoKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgV3JhcHBlZC5fX3dyYXBwZWRfXyA9IGxhbWJkYSBhOiBOb25lCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zaWduYXR1cmUoV3JhcHBlZCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoJ2EnLCAuLi4sIC4uLiwgInBvc2l0aW9uYWxfb3Jfa2V5d29yZCIpLCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLikpCisgICAgICAgICMgd3JhcHBlciBsb29wOgorICAgICAgICBXcmFwcGVkLl9fd3JhcHBlZF9fID0gV3JhcHBlZAorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwgJ3dyYXBwZXIgbG9vcCcpOgorICAgICAgICAgICAgc2VsZi5zaWduYXR1cmUoV3JhcHBlZCkKIAogICAgIGRlZiB0ZXN0X3NpZ25hdHVyZV9vbl9sYW1iZGFzKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2lnbmF0dXJlKChsYW1iZGEgYT0xMDogYSkpLApAQCAtMTg1OCw0NyArMjQ2Myw2MiBAQAogCiAgICAgZGVmIHRlc3Rfc2lnbmF0dXJlX2VxdWFsaXR5KHNlbGYpOgogICAgICAgICBkZWYgZm9vKGEsICosIGI6aW50KSAtPiBmbG9hdDogcGFzcwotICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGluc3BlY3Quc2lnbmF0dXJlKGZvbyksIDQyKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGluc3BlY3Quc2lnbmF0dXJlKGZvbykgPT0gNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbnNwZWN0LnNpZ25hdHVyZShmb28pICE9IDQyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaW5zcGVjdC5zaWduYXR1cmUoZm9vKSA9PSBFcXVhbHNUb0FsbCgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGluc3BlY3Quc2lnbmF0dXJlKGZvbykgIT0gRXF1YWxzVG9BbGwoKSkKIAogICAgICAgICBkZWYgYmFyKGEsICosIGI6aW50KSAtPiBmbG9hdDogcGFzcwotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluc3BlY3Quc2lnbmF0dXJlKGZvbyksIGluc3BlY3Quc2lnbmF0dXJlKGJhcikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbnNwZWN0LnNpZ25hdHVyZShmb28pID09IGluc3BlY3Quc2lnbmF0dXJlKGJhcikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW5zcGVjdC5zaWduYXR1cmUoZm9vKSAhPSBpbnNwZWN0LnNpZ25hdHVyZShiYXIpKQogCiAgICAgICAgIGRlZiBiYXIoYSwgKiwgYjppbnQpIC0+IGludDogcGFzcwotICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGluc3BlY3Quc2lnbmF0dXJlKGZvbyksIGluc3BlY3Quc2lnbmF0dXJlKGJhcikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW5zcGVjdC5zaWduYXR1cmUoZm9vKSA9PSBpbnNwZWN0LnNpZ25hdHVyZShiYXIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaW5zcGVjdC5zaWduYXR1cmUoZm9vKSAhPSBpbnNwZWN0LnNpZ25hdHVyZShiYXIpKQogCiAgICAgICAgIGRlZiBiYXIoYSwgKiwgYjppbnQpOiBwYXNzCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoaW5zcGVjdC5zaWduYXR1cmUoZm9vKSwgaW5zcGVjdC5zaWduYXR1cmUoYmFyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpbnNwZWN0LnNpZ25hdHVyZShmb28pID09IGluc3BlY3Quc2lnbmF0dXJlKGJhcikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbnNwZWN0LnNpZ25hdHVyZShmb28pICE9IGluc3BlY3Quc2lnbmF0dXJlKGJhcikpCiAKICAgICAgICAgZGVmIGJhcihhLCAqLCBiOmludD00MikgLT4gZmxvYXQ6IHBhc3MKLSAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChpbnNwZWN0LnNpZ25hdHVyZShmb28pLCBpbnNwZWN0LnNpZ25hdHVyZShiYXIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGluc3BlY3Quc2lnbmF0dXJlKGZvbykgPT0gaW5zcGVjdC5zaWduYXR1cmUoYmFyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGluc3BlY3Quc2lnbmF0dXJlKGZvbykgIT0gaW5zcGVjdC5zaWduYXR1cmUoYmFyKSkKIAogICAgICAgICBkZWYgYmFyKGEsICosIGMpIC0+IGZsb2F0OiBwYXNzCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoaW5zcGVjdC5zaWduYXR1cmUoZm9vKSwgaW5zcGVjdC5zaWduYXR1cmUoYmFyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpbnNwZWN0LnNpZ25hdHVyZShmb28pID09IGluc3BlY3Quc2lnbmF0dXJlKGJhcikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbnNwZWN0LnNpZ25hdHVyZShmb28pICE9IGluc3BlY3Quc2lnbmF0dXJlKGJhcikpCiAKICAgICAgICAgZGVmIGJhcihhLCBiOmludCkgLT4gZmxvYXQ6IHBhc3MKLSAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChpbnNwZWN0LnNpZ25hdHVyZShmb28pLCBpbnNwZWN0LnNpZ25hdHVyZShiYXIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGluc3BlY3Quc2lnbmF0dXJlKGZvbykgPT0gaW5zcGVjdC5zaWduYXR1cmUoYmFyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGluc3BlY3Quc2lnbmF0dXJlKGZvbykgIT0gaW5zcGVjdC5zaWduYXR1cmUoYmFyKSkKICAgICAgICAgZGVmIHNwYW0oYjppbnQsIGEpIC0+IGZsb2F0OiBwYXNzCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoaW5zcGVjdC5zaWduYXR1cmUoc3BhbSksIGluc3BlY3Quc2lnbmF0dXJlKGJhcikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW5zcGVjdC5zaWduYXR1cmUoc3BhbSkgPT0gaW5zcGVjdC5zaWduYXR1cmUoYmFyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGluc3BlY3Quc2lnbmF0dXJlKHNwYW0pICE9IGluc3BlY3Quc2lnbmF0dXJlKGJhcikpCiAKICAgICAgICAgZGVmIGZvbygqLCBhLCBiLCBjKTogcGFzcwogICAgICAgICBkZWYgYmFyKCosIGMsIGIsIGEpOiBwYXNzCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5zcGVjdC5zaWduYXR1cmUoZm9vKSwgaW5zcGVjdC5zaWduYXR1cmUoYmFyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGluc3BlY3Quc2lnbmF0dXJlKGZvbykgPT0gaW5zcGVjdC5zaWduYXR1cmUoYmFyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpbnNwZWN0LnNpZ25hdHVyZShmb28pICE9IGluc3BlY3Quc2lnbmF0dXJlKGJhcikpCiAKICAgICAgICAgZGVmIGZvbygqLCBhPTEsIGIsIGMpOiBwYXNzCiAgICAgICAgIGRlZiBiYXIoKiwgYywgYiwgYT0xKTogcGFzcwotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluc3BlY3Quc2lnbmF0dXJlKGZvbyksIGluc3BlY3Quc2lnbmF0dXJlKGJhcikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbnNwZWN0LnNpZ25hdHVyZShmb28pID09IGluc3BlY3Quc2lnbmF0dXJlKGJhcikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW5zcGVjdC5zaWduYXR1cmUoZm9vKSAhPSBpbnNwZWN0LnNpZ25hdHVyZShiYXIpKQogCiAgICAgICAgIGRlZiBmb28ocG9zLCAqLCBhPTEsIGIsIGMpOiBwYXNzCiAgICAgICAgIGRlZiBiYXIocG9zLCAqLCBjLCBiLCBhPTEpOiBwYXNzCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5zcGVjdC5zaWduYXR1cmUoZm9vKSwgaW5zcGVjdC5zaWduYXR1cmUoYmFyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGluc3BlY3Quc2lnbmF0dXJlKGZvbykgPT0gaW5zcGVjdC5zaWduYXR1cmUoYmFyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpbnNwZWN0LnNpZ25hdHVyZShmb28pICE9IGluc3BlY3Quc2lnbmF0dXJlKGJhcikpCiAKICAgICAgICAgZGVmIGZvbyhwb3MsICosIGEsIGIsIGMpOiBwYXNzCiAgICAgICAgIGRlZiBiYXIocG9zLCAqLCBjLCBiLCBhPTEpOiBwYXNzCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoaW5zcGVjdC5zaWduYXR1cmUoZm9vKSwgaW5zcGVjdC5zaWduYXR1cmUoYmFyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpbnNwZWN0LnNpZ25hdHVyZShmb28pID09IGluc3BlY3Quc2lnbmF0dXJlKGJhcikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbnNwZWN0LnNpZ25hdHVyZShmb28pICE9IGluc3BlY3Quc2lnbmF0dXJlKGJhcikpCiAKICAgICAgICAgZGVmIGZvbyhwb3MsICphcmdzLCBhPTQyLCBiLCBjLCAqKmt3YXJnczppbnQpOiBwYXNzCiAgICAgICAgIGRlZiBiYXIocG9zLCAqYXJncywgYywgYiwgYT00MiwgKiprd2FyZ3M6aW50KTogcGFzcwotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluc3BlY3Quc2lnbmF0dXJlKGZvbyksIGluc3BlY3Quc2lnbmF0dXJlKGJhcikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbnNwZWN0LnNpZ25hdHVyZShmb28pID09IGluc3BlY3Quc2lnbmF0dXJlKGJhcikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW5zcGVjdC5zaWduYXR1cmUoZm9vKSAhPSBpbnNwZWN0LnNpZ25hdHVyZShiYXIpKQogCiAgICAgZGVmIHRlc3Rfc2lnbmF0dXJlX3VuaGFzaGFibGUoc2VsZik6CiAgICAgICAgIGRlZiBmb28oYSk6IHBhc3MKQEAgLTE5MjMsNiArMjU0Myw3IEBACiAKICAgICBkZWYgdGVzdF9zaWduYXR1cmVfc3RyX3Bvc2l0aW9uYWxfb25seShzZWxmKToKICAgICAgICAgUCA9IGluc3BlY3QuUGFyYW1ldGVyCisgICAgICAgIFMgPSBpbnNwZWN0LlNpZ25hdHVyZQogCiAgICAgICAgIGRlZiB0ZXN0KGFfcG8sICosIGIsICoqa3dhcmdzKToKICAgICAgICAgICAgIHJldHVybiBhX3BvLCBrd2FyZ3MKQEAgLTE5MzMsMTQgKzI1NTQsMjAgQEAKICAgICAgICAgdGVzdC5fX3NpZ25hdHVyZV9fID0gc2lnLnJlcGxhY2UocGFyYW1ldGVycz1uZXdfcGFyYW1zKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGluc3BlY3Quc2lnbmF0dXJlKHRlc3QpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAnKDxhX3BvPiwgKiwgYiwgKiprd2FyZ3MpJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAnKGFfcG8sIC8sICosIGIsICoqa3dhcmdzKScpCiAKLSAgICAgICAgc2lnID0gaW5zcGVjdC5zaWduYXR1cmUodGVzdCkKLSAgICAgICAgbmV3X3BhcmFtcyA9IGxpc3Qoc2lnLnBhcmFtZXRlcnMudmFsdWVzKCkpCi0gICAgICAgIG5ld19wYXJhbXNbMF0gPSBuZXdfcGFyYW1zWzBdLnJlcGxhY2UobmFtZT1Ob25lKQotICAgICAgICB0ZXN0Ll9fc2lnbmF0dXJlX18gPSBzaWcucmVwbGFjZShwYXJhbWV0ZXJzPW5ld19wYXJhbXMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGluc3BlY3Quc2lnbmF0dXJlKHRlc3QpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAnKDwwPiwgKiwgYiwgKiprd2FyZ3MpJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoUyhwYXJhbWV0ZXJzPVtQKCdmb28nLCBQLlBPU0lUSU9OQUxfT05MWSldKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgJyhmb28sIC8pJykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihTKHBhcmFtZXRlcnM9WworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQKCdmb28nLCBQLlBPU0lUSU9OQUxfT05MWSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFAoJ2JhcicsIFAuVkFSX0tFWVdPUkQpXSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICcoZm9vLCAvLCAqKmJhciknKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKFMocGFyYW1ldGVycz1bCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFAoJ2ZvbycsIFAuUE9TSVRJT05BTF9PTkxZKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUCgnYmFyJywgUC5WQVJfUE9TSVRJT05BTCldKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgJyhmb28sIC8sICpiYXIpJykKIAogICAgIGRlZiB0ZXN0X3NpZ25hdHVyZV9yZXBsYWNlX2Fubm8oc2VsZik6CiAgICAgICAgIGRlZiB0ZXN0KCkgLT4gNDI6CkBAIC0xOTU1LDYgKzI1ODIsMjIgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaWcucmV0dXJuX2Fubm90YXRpb24sIDQyKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpZywgaW5zcGVjdC5zaWduYXR1cmUodGVzdCkpCiAKKyAgICBkZWYgdGVzdF9zaWduYXR1cmVfb25fbWFuZ2xlZF9wYXJhbWV0ZXJzKHNlbGYpOgorICAgICAgICBjbGFzcyBTcGFtOgorICAgICAgICAgICAgZGVmIGZvbyhzZWxmLCBfX3AxOjE9MiwgKiwgX19wMjoyPTMpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY2xhc3MgSGFtKFNwYW0pOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zaWduYXR1cmUoU3BhbS5mb28pLAorICAgICAgICAgICAgICAgICAgICAgICAgICgoKCdzZWxmJywgLi4uLCAuLi4sICJwb3NpdGlvbmFsX29yX2tleXdvcmQiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgnX1NwYW1fX3AxJywgMiwgMSwgInBvc2l0aW9uYWxfb3Jfa2V5d29yZCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdfU3BhbV9fcDInLCAzLCAyLCAia2V5d29yZF9vbmx5IikpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zaWduYXR1cmUoU3BhbS5mb28pLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2lnbmF0dXJlKEhhbS5mb28pKQorCiAKIGNsYXNzIFRlc3RQYXJhbWV0ZXJPYmplY3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X3NpZ25hdHVyZV9wYXJhbWV0ZXJfa2luZHMoc2VsZik6CkBAIC0xOTc5LDEwICsyNjIyLDEzIEBACiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLCAnbm90IGEgdmFsaWQgcGFyYW1ldGVyIG5hbWUnKToKICAgICAgICAgICAgIGluc3BlY3QuUGFyYW1ldGVyKCcxJywga2luZD1pbnNwZWN0LlBhcmFtZXRlci5WQVJfS0VZV09SRCkKIAotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbm9uLXBvc2l0aW9uYWwtb25seSBwYXJhbWV0ZXInKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFR5cGVFcnJvciwgJ25hbWUgbXVzdCBiZSBhIHN0cicpOgogICAgICAgICAgICAgaW5zcGVjdC5QYXJhbWV0ZXIoTm9uZSwga2luZD1pbnNwZWN0LlBhcmFtZXRlci5WQVJfS0VZV09SRCkKIAorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpcyBub3QgYSB2YWxpZCBwYXJhbWV0ZXIgbmFtZScpOgorICAgICAgICAgICAgaW5zcGVjdC5QYXJhbWV0ZXIoJyQnLCBraW5kPWluc3BlY3QuUGFyYW1ldGVyLlZBUl9LRVlXT1JEKQorCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLCAnY2Fubm90IGhhdmUgZGVmYXVsdCB2YWx1ZXMnKToKICAgICAgICAgICAgIGluc3BlY3QuUGFyYW1ldGVyKCdhJywgZGVmYXVsdD00MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtpbmQ9aW5zcGVjdC5QYXJhbWV0ZXIuVkFSX0tFWVdPUkQpCkBAIC0yMDAyLDExICsyNjQ4LDE3IEBACiAgICAgICAgIFAgPSBpbnNwZWN0LlBhcmFtZXRlcgogICAgICAgICBwID0gUCgnZm9vJywgZGVmYXVsdD00Miwga2luZD1pbnNwZWN0LlBhcmFtZXRlci5LRVlXT1JEX09OTFkpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLCBwKQotICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHAsIDQyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocCA9PSBwKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHAgIT0gcCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShwID09IDQyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocCAhPSA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHAgPT0gRXF1YWxzVG9BbGwoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShwICE9IEVxdWFsc1RvQWxsKCkpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLCBQKCdmb28nLCBkZWZhdWx0PTQyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2luZD1pbnNwZWN0LlBhcmFtZXRlci5LRVlXT1JEX09OTFkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocCA9PSBQKCdmb28nLCBkZWZhdWx0PTQyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtpbmQ9aW5zcGVjdC5QYXJhbWV0ZXIuS0VZV09SRF9PTkxZKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShwICE9IFAoJ2ZvbycsIGRlZmF1bHQ9NDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtpbmQ9aW5zcGVjdC5QYXJhbWV0ZXIuS0VZV09SRF9PTkxZKSkKIAogICAgIGRlZiB0ZXN0X3NpZ25hdHVyZV9wYXJhbWV0ZXJfdW5oYXNoYWJsZShzZWxmKToKICAgICAgICAgcCA9IGluc3BlY3QuUGFyYW1ldGVyKCdmb28nLCBkZWZhdWx0PTQyLApAQCAtMjAzMSw3ICsyNjgzLDggQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwMi5uYW1lLCAnYmFyJykKICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChwMiwgcCkKIAotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwgJ25vdCBhIHZhbGlkIHBhcmFtZXRlciBuYW1lJyk6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25hbWUgaXMgYSByZXF1aXJlZCBhdHRyaWJ1dGUnKToKICAgICAgICAgICAgIHAyID0gcDIucmVwbGFjZShuYW1lPXAyLmVtcHR5KQogCiAgICAgICAgIHAyID0gcDIucmVwbGFjZShuYW1lPSdmb28nLCBkZWZhdWx0PU5vbmUpCkBAIC0yMDUzLDE0ICsyNzA2LDExIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocDIsIHApCiAKICAgICBkZWYgdGVzdF9zaWduYXR1cmVfcGFyYW1ldGVyX3Bvc2l0aW9uYWxfb25seShzZWxmKToKLSAgICAgICAgcCA9IGluc3BlY3QuUGFyYW1ldGVyKE5vbmUsIGtpbmQ9aW5zcGVjdC5QYXJhbWV0ZXIuUE9TSVRJT05BTF9PTkxZKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihwKSwgJzw+JykKLQotICAgICAgICBwID0gcC5yZXBsYWNlKG5hbWU9JzEnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihwKSwgJzwxPicpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUeXBlRXJyb3IsICduYW1lIG11c3QgYmUgYSBzdHInKToKKyAgICAgICAgICAgIGluc3BlY3QuUGFyYW1ldGVyKE5vbmUsIGtpbmQ9aW5zcGVjdC5QYXJhbWV0ZXIuUE9TSVRJT05BTF9PTkxZKQogCiAgICAgZGVmIHRlc3Rfc2lnbmF0dXJlX3BhcmFtZXRlcl9pbW11dGFiaWxpdHkoc2VsZik6Ci0gICAgICAgIHAgPSBpbnNwZWN0LlBhcmFtZXRlcihOb25lLCBraW5kPWluc3BlY3QuUGFyYW1ldGVyLlBPU0lUSU9OQUxfT05MWSkKKyAgICAgICAgcCA9IGluc3BlY3QuUGFyYW1ldGVyKCdzcGFtJywga2luZD1pbnNwZWN0LlBhcmFtZXRlci5LRVlXT1JEX09OTFkpCiAKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvcik6CiAgICAgICAgICAgICBwLmZvbyA9ICdiYXInCkBAIC0yMjU4LDYgKzI5MDgsMTUgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNhbGwodGVzdCwgMSwgMiwgNCwgNSwgYmFyPTYpLAogICAgICAgICAgICAgICAgICAgICAgICAgICgxLCAyLCA0LCA1LCA2LCB7fSkpCiAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNhbGwodGVzdCwgMSwgMiksCisgICAgICAgICAgICAgICAgICAgICAgICAgKDEsIDIsIDMsIDQyLCA1MCwge30pKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jYWxsKHRlc3QsIDEsIDIsIGZvbz00LCBiYXI9NSksCisgICAgICAgICAgICAgICAgICAgICAgICAgKDEsIDIsIDMsIDQsIDUsIHt9KSkKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVHlwZUVycm9yLCAiYnV0IHdhcyBwYXNzZWQgYXMgYSBrZXl3b3JkIik6CisgICAgICAgICAgICBzZWxmLmNhbGwodGVzdCwgMSwgMiwgZm9vPTQsIGJhcj01LCBjX3BvPTEwKQorCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUeXBlRXJyb3IsICJwYXJhbWV0ZXIgaXMgcG9zaXRpb25hbCBvbmx5Iik6CiAgICAgICAgICAgICBzZWxmLmNhbGwodGVzdCwgMSwgMiwgY19wbz00KQogCkBAIC0yMjc0LDYgKzI5MzMsMjIgQEAKICAgICAgICAgYmEgPSBzaWcuYmluZCgxLCBzZWxmPTIsIGI9MykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYS5hcmdzLCAoMSwgMiwgMykpCiAKKyAgICBkZWYgdGVzdF9zaWduYXR1cmVfYmluZF92YXJhcmdfbmFtZShzZWxmKToKKyAgICAgICAgZGVmIHRlc3QoYSwgKmFyZ3MpOgorICAgICAgICAgICAgcmV0dXJuIGEsIGFyZ3MKKyAgICAgICAgc2lnID0gaW5zcGVjdC5zaWduYXR1cmUodGVzdCkKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVHlwZUVycm9yLCAidG9vIG1hbnkga2V5d29yZCBhcmd1bWVudHMiKToKKyAgICAgICAgICAgIHNpZy5iaW5kKGE9MCwgYXJncz0xKQorCisgICAgICAgIGRlZiB0ZXN0KCphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICAgICByZXR1cm4gYXJncywga3dhcmdzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jYWxsKHRlc3QsIGFyZ3M9MSksICgoKSwgeydhcmdzJzogMX0pKQorCisgICAgICAgIHNpZyA9IGluc3BlY3Quc2lnbmF0dXJlKHRlc3QpCisgICAgICAgIGJhID0gc2lnLmJpbmQoYXJncz0xKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhLmFyZ3VtZW50cywgeydrd2FyZ3MnOiB7J2FyZ3MnOiAxfX0pCisKIAogY2xhc3MgVGVzdEJvdW5kQXJndW1lbnRzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9zaWduYXR1cmVfYm91bmRfYXJndW1lbnRzX3VuaGFzaGFibGUoc2VsZik6CkBAIC0yMjg2LDE5ICsyOTYxLDIyMyBAQAogICAgIGRlZiB0ZXN0X3NpZ25hdHVyZV9ib3VuZF9hcmd1bWVudHNfZXF1YWxpdHkoc2VsZik6CiAgICAgICAgIGRlZiBmb28oYSk6IHBhc3MKICAgICAgICAgYmEgPSBpbnNwZWN0LnNpZ25hdHVyZShmb28pLmJpbmQoMSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYSwgYmEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiYSA9PSBiYSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShiYSAhPSBiYSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJhID09IEVxdWFsc1RvQWxsKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYmEgIT0gRXF1YWxzVG9BbGwoKSkKIAogICAgICAgICBiYTIgPSBpbnNwZWN0LnNpZ25hdHVyZShmb28pLmJpbmQoMSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYSwgYmEyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYmEgPT0gYmEyKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGJhICE9IGJhMikKIAogICAgICAgICBiYTMgPSBpbnNwZWN0LnNpZ25hdHVyZShmb28pLmJpbmQoMikKLSAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChiYSwgYmEzKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGJhID09IGJhMykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJhICE9IGJhMykKICAgICAgICAgYmEzLmFyZ3VtZW50c1snYSddID0gMQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhLCBiYTMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiYSA9PSBiYTMpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYmEgIT0gYmEzKQogCiAgICAgICAgIGRlZiBiYXIoYik6IHBhc3MKICAgICAgICAgYmE0ID0gaW5zcGVjdC5zaWduYXR1cmUoYmFyKS5iaW5kKDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoYmEsIGJhNCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShiYSA9PSBiYTQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiYSAhPSBiYTQpCisKKworY2xhc3MgVGVzdFNpZ25hdHVyZVByaXZhdGVIZWxwZXJzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9zaWduYXR1cmVfZ2V0X2JvdW5kX3BhcmFtKHNlbGYpOgorICAgICAgICBnZXR0ZXIgPSBpbnNwZWN0Ll9zaWduYXR1cmVfZ2V0X2JvdW5kX3BhcmFtCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXR0ZXIoJygkc2VsZiknKSwgJ3NlbGYnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldHRlcignKCRzZWxmLCBvYmopJyksICdzZWxmJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXR0ZXIoJygkY2xzLCAvLCBvYmopJyksICdjbHMnKQorCisgICAgZGVmIF9zdHJpcF9ub25fcHl0aG9uX3N5bnRheChzZWxmLCBpbnB1dCwKKyAgICAgICAgY2xlYW5fc2lnbmF0dXJlLCBzZWxmX3BhcmFtZXRlciwgbGFzdF9wb3NpdGlvbmFsX29ubHkpOgorICAgICAgICBjb21wdXRlZF9jbGVhbl9zaWduYXR1cmUsIFwKKyAgICAgICAgICAgIGNvbXB1dGVkX3NlbGZfcGFyYW1ldGVyLCBcCisgICAgICAgICAgICBjb21wdXRlZF9sYXN0X3Bvc2l0aW9uYWxfb25seSA9IFwKKyAgICAgICAgICAgIGluc3BlY3QuX3NpZ25hdHVyZV9zdHJpcF9ub25fcHl0aG9uX3N5bnRheChpbnB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21wdXRlZF9jbGVhbl9zaWduYXR1cmUsIGNsZWFuX3NpZ25hdHVyZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21wdXRlZF9zZWxmX3BhcmFtZXRlciwgc2VsZl9wYXJhbWV0ZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tcHV0ZWRfbGFzdF9wb3NpdGlvbmFsX29ubHksIGxhc3RfcG9zaXRpb25hbF9vbmx5KQorCisgICAgZGVmIHRlc3Rfc2lnbmF0dXJlX3N0cmlwX25vbl9weXRob25fc3ludGF4KHNlbGYpOgorICAgICAgICBzZWxmLl9zdHJpcF9ub25fcHl0aG9uX3N5bnRheCgKKyAgICAgICAgICAgICIoJG1vZHVsZSwgLywgcGF0aCwgbW9kZSwgKiwgZGlyX2ZkPU5vbmUsICIgKworICAgICAgICAgICAgICAgICJlZmZlY3RpdmVfaWRzPUZhbHNlLFxuICAgICAgIGZvbGxvd19zeW1saW5rcz1UcnVlKSIsCisgICAgICAgICAgICAiKG1vZHVsZSwgcGF0aCwgbW9kZSwgKiwgZGlyX2ZkPU5vbmUsICIgKworICAgICAgICAgICAgICAgICJlZmZlY3RpdmVfaWRzPUZhbHNlLCBmb2xsb3dfc3ltbGlua3M9VHJ1ZSkiLAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIDApCisKKyAgICAgICAgc2VsZi5fc3RyaXBfbm9uX3B5dGhvbl9zeW50YXgoCisgICAgICAgICAgICAiKCRtb2R1bGUsIHdvcmQsIHNhbHQsIC8pIiwKKyAgICAgICAgICAgICIobW9kdWxlLCB3b3JkLCBzYWx0KSIsCisgICAgICAgICAgICAwLAorICAgICAgICAgICAgMikKKworICAgICAgICBzZWxmLl9zdHJpcF9ub25fcHl0aG9uX3N5bnRheCgKKyAgICAgICAgICAgICIoeCwgeT1Ob25lLCB6PU5vbmUsIC8pIiwKKyAgICAgICAgICAgICIoeCwgeT1Ob25lLCB6PU5vbmUpIiwKKyAgICAgICAgICAgIE5vbmUsCisgICAgICAgICAgICAyKQorCisgICAgICAgIHNlbGYuX3N0cmlwX25vbl9weXRob25fc3ludGF4KAorICAgICAgICAgICAgIih4LCB5PU5vbmUsIHo9Tm9uZSkiLAorICAgICAgICAgICAgIih4LCB5PU5vbmUsIHo9Tm9uZSkiLAorICAgICAgICAgICAgTm9uZSwKKyAgICAgICAgICAgIE5vbmUpCisKKyAgICAgICAgc2VsZi5fc3RyaXBfbm9uX3B5dGhvbl9zeW50YXgoCisgICAgICAgICAgICAiKHgsXG4gICAgeT1Ob25lLFxuICAgICAgeiA9IE5vbmUgICkiLAorICAgICAgICAgICAgIih4LCB5PU5vbmUsIHo9Tm9uZSkiLAorICAgICAgICAgICAgTm9uZSwKKyAgICAgICAgICAgIE5vbmUpCisKKyAgICAgICAgc2VsZi5fc3RyaXBfbm9uX3B5dGhvbl9zeW50YXgoCisgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgTm9uZSwKKyAgICAgICAgICAgIE5vbmUpCisKKyAgICAgICAgc2VsZi5fc3RyaXBfbm9uX3B5dGhvbl9zeW50YXgoCisgICAgICAgICAgICBOb25lLAorICAgICAgICAgICAgTm9uZSwKKyAgICAgICAgICAgIE5vbmUsCisgICAgICAgICAgICBOb25lKQorCisKK2NsYXNzIFRlc3RVbndyYXAodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfdW53cmFwX29uZShzZWxmKToKKyAgICAgICAgZGVmIGZ1bmMoYSwgYik6CisgICAgICAgICAgICByZXR1cm4gYSArIGIKKyAgICAgICAgd3JhcHBlciA9IGZ1bmN0b29scy5scnVfY2FjaGUobWF4c2l6ZT0yMCkoZnVuYykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhpbnNwZWN0LnVud3JhcCh3cmFwcGVyKSwgZnVuYykKKworICAgIGRlZiB0ZXN0X3Vud3JhcF9zZXZlcmFsKHNlbGYpOgorICAgICAgICBkZWYgZnVuYyhhLCBiKToKKyAgICAgICAgICAgIHJldHVybiBhICsgYgorICAgICAgICB3cmFwcGVyID0gZnVuYworICAgICAgICBmb3IgX18gaW4gcmFuZ2UoMTApOgorICAgICAgICAgICAgQGZ1bmN0b29scy53cmFwcyh3cmFwcGVyKQorICAgICAgICAgICAgZGVmIHdyYXBwZXIoKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3Qod3JhcHBlci5fX3dyYXBwZWRfXywgZnVuYykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhpbnNwZWN0LnVud3JhcCh3cmFwcGVyKSwgZnVuYykKKworICAgIGRlZiB0ZXN0X3N0b3Aoc2VsZik6CisgICAgICAgIGRlZiBmdW5jMShhLCBiKToKKyAgICAgICAgICAgIHJldHVybiBhICsgYgorICAgICAgICBAZnVuY3Rvb2xzLndyYXBzKGZ1bmMxKQorICAgICAgICBkZWYgZnVuYzIoKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgQGZ1bmN0b29scy53cmFwcyhmdW5jMikKKyAgICAgICAgZGVmIHdyYXBwZXIoKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZnVuYzIuc3RvcF9oZXJlID0gMQorICAgICAgICB1bndyYXBwZWQgPSBpbnNwZWN0LnVud3JhcCh3cmFwcGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9wPShsYW1iZGEgZjogaGFzYXR0cihmLCAic3RvcF9oZXJlIikpKQorICAgICAgICBzZWxmLmFzc2VydElzKHVud3JhcHBlZCwgZnVuYzIpCisKKyAgICBkZWYgdGVzdF9jeWNsZShzZWxmKToKKyAgICAgICAgZGVmIGZ1bmMxKCk6IHBhc3MKKyAgICAgICAgZnVuYzEuX193cmFwcGVkX18gPSBmdW5jMQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwgJ3dyYXBwZXIgbG9vcCcpOgorICAgICAgICAgICAgaW5zcGVjdC51bndyYXAoZnVuYzEpCisKKyAgICAgICAgZGVmIGZ1bmMyKCk6IHBhc3MKKyAgICAgICAgZnVuYzIuX193cmFwcGVkX18gPSBmdW5jMQorICAgICAgICBmdW5jMS5fX3dyYXBwZWRfXyA9IGZ1bmMyCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLCAnd3JhcHBlciBsb29wJyk6CisgICAgICAgICAgICBpbnNwZWN0LnVud3JhcChmdW5jMSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsICd3cmFwcGVyIGxvb3AnKToKKyAgICAgICAgICAgIGluc3BlY3QudW53cmFwKGZ1bmMyKQorCisgICAgZGVmIHRlc3RfdW5oYXNoYWJsZShzZWxmKToKKyAgICAgICAgZGVmIGZ1bmMoKTogcGFzcworICAgICAgICBmdW5jLl9fd3JhcHBlZF9fID0gTm9uZQorICAgICAgICBjbGFzcyBDOgorICAgICAgICAgICAgX19oYXNoX18gPSBOb25lCisgICAgICAgICAgICBfX3dyYXBwZWRfXyA9IGZ1bmMKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoaW5zcGVjdC51bndyYXAoQygpKSkKKworY2xhc3MgVGVzdE1haW4odW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X29ubHlfc291cmNlKHNlbGYpOgorICAgICAgICBtb2R1bGUgPSBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZSgndW5pdHRlc3QnKQorICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCctbScsICdpbnNwZWN0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndW5pdHRlc3QnKQorICAgICAgICBsaW5lcyA9IG91dC5kZWNvZGUoKS5zcGxpdGxpbmVzKCkKKyAgICAgICAgIyBpZ25vcmUgdGhlIGZpbmFsIG5ld2xpbmUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lc1s6LTFdLCBpbnNwZWN0LmdldHNvdXJjZShtb2R1bGUpLnNwbGl0bGluZXMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIsIGInJykKKworICAgIGRlZiB0ZXN0X2N1c3RvbV9nZXRhdHRyKHNlbGYpOgorICAgICAgICBkZWYgZm9vKCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGZvby5fX3NpZ25hdHVyZV9fID0gNDIKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgaW5zcGVjdC5zaWduYXR1cmUoZm9vKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihUaHJlYWRQb29sRXhlY3V0b3IgaXMgTm9uZSwKKyAgICAgICAgICAgICd0aHJlYWRzIHJlcXVpcmVkIHRvIHRlc3QgX19xdWFsbmFtZV9fIGZvciBzb3VyY2UgZmlsZXMnKQorICAgIGRlZiB0ZXN0X3F1YWxuYW1lX3NvdXJjZShzZWxmKToKKyAgICAgICAgcmMsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygnLW0nLCAnaW5zcGVjdCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbmN1cnJlbnQuZnV0dXJlczpUaHJlYWRQb29sRXhlY3V0b3InKQorICAgICAgICBsaW5lcyA9IG91dC5kZWNvZGUoKS5zcGxpdGxpbmVzKCkKKyAgICAgICAgIyBpZ25vcmUgdGhlIGZpbmFsIG5ld2xpbmUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lc1s6LTFdLAorICAgICAgICAgICAgICAgICAgICAgICAgIGluc3BlY3QuZ2V0c291cmNlKFRocmVhZFBvb2xFeGVjdXRvcikuc3BsaXRsaW5lcygpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyciwgYicnKQorCisgICAgZGVmIHRlc3RfYnVpbHRpbnMoc2VsZik6CisgICAgICAgIG1vZHVsZSA9IGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKCd1bml0dGVzdCcpCisgICAgICAgIF8sIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9mYWlsdXJlKCctbScsICdpbnNwZWN0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N5cycpCisgICAgICAgIGxpbmVzID0gZXJyLmRlY29kZSgpLnNwbGl0bGluZXMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmVzLCBbIkNhbid0IGdldCBpbmZvIGZvciBidWlsdGluIG1vZHVsZXMuIl0pCisKKyAgICBkZWYgdGVzdF9kZXRhaWxzKHNlbGYpOgorICAgICAgICBtb2R1bGUgPSBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZSgndW5pdHRlc3QnKQorICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCctbScsICdpbnNwZWN0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndW5pdHRlc3QnLCAnLS1kZXRhaWxzJykKKyAgICAgICAgb3V0cHV0ID0gb3V0LmRlY29kZSgpCisgICAgICAgICMgSnVzdCBhIHF1aWNrIHNhbml0eSBjaGVjayBvbiB0aGUgb3V0cHV0CisgICAgICAgIHNlbGYuYXNzZXJ0SW4obW9kdWxlLl9fbmFtZV9fLCBvdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4obW9kdWxlLl9fZmlsZV9fLCBvdXRwdXQpCisgICAgICAgIGlmIG5vdCBzeXMuZmxhZ3Mub3B0aW1pemU6CisgICAgICAgICAgICBzZWxmLmFzc2VydEluKG1vZHVsZS5fX2NhY2hlZF9fLCBvdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLCBiJycpCisKKworY2xhc3MgVGVzdFJlbG9hZCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBzcmNfYmVmb3JlID0gdGV4dHdyYXAuZGVkZW50KCIiIlwKK2RlZiBmb28oKToKKyAgICBwcmludCgiQmxhIikKKyAgICAiIiIpCisKKyAgICBzcmNfYWZ0ZXIgPSB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorZGVmIGZvbygpOgorICAgIHByaW50KCJPaCBubyEiKQorICAgICIiIikKKworICAgIGRlZiBhc3NlcnRJbnNwZWN0RXF1YWwoc2VsZiwgcGF0aCwgc291cmNlKToKKyAgICAgICAgaW5zcGVjdGVkX3NyYyA9IGluc3BlY3QuZ2V0c291cmNlKHNvdXJjZSkKKyAgICAgICAgd2l0aCBvcGVuKHBhdGgpIGFzIHNyYzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgc3JjLnJlYWQoKS5zcGxpdGxpbmVzKFRydWUpLAorICAgICAgICAgICAgICAgIGluc3BlY3RlZF9zcmMuc3BsaXRsaW5lcyhUcnVlKQorICAgICAgICAgICAgKQorCisgICAgZGVmIHRlc3RfZ2V0c291cmNlX3JlbG9hZChzZWxmKToKKyAgICAgICAgIyBzZWUgaXNzdWUgMTIxODIzNAorICAgICAgICB3aXRoIF9yZWFkeV90b19pbXBvcnQoJ3JlbG9hZF9idWcnLCBzZWxmLnNyY19iZWZvcmUpIGFzIChuYW1lLCBwYXRoKToKKyAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKG5hbWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluc3BlY3RFcXVhbChwYXRoLCBtb2R1bGUpCisgICAgICAgICAgICB3aXRoIG9wZW4ocGF0aCwgJ3cnKSBhcyBzcmM6CisgICAgICAgICAgICAgICAgc3JjLndyaXRlKHNlbGYuc3JjX2FmdGVyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbnNwZWN0RXF1YWwocGF0aCwgbW9kdWxlKQogCiAKIGRlZiB0ZXN0X21haW4oKToKQEAgLTIzMDgsNyArMzE4Nyw4IEBACiAgICAgICAgIFRlc3RHZXRjYWxsYXJnc0Z1bmN0aW9ucywgVGVzdEdldGNhbGxhcmdzTWV0aG9kcywKICAgICAgICAgVGVzdEdldGNhbGxhcmdzVW5ib3VuZE1ldGhvZHMsIFRlc3RHZXRhdHRyU3RhdGljLCBUZXN0R2V0R2VuZXJhdG9yU3RhdGUsCiAgICAgICAgIFRlc3ROb0VPTCwgVGVzdFNpZ25hdHVyZU9iamVjdCwgVGVzdFNpZ25hdHVyZUJpbmQsIFRlc3RQYXJhbWV0ZXJPYmplY3QsCi0gICAgICAgIFRlc3RCb3VuZEFyZ3VtZW50cywgVGVzdEdldENsb3N1cmVWYXJzCisgICAgICAgIFRlc3RCb3VuZEFyZ3VtZW50cywgVGVzdFNpZ25hdHVyZVByaXZhdGVIZWxwZXJzLCBUZXN0R2V0Q2xvc3VyZVZhcnMsCisgICAgICAgIFRlc3RVbndyYXAsIFRlc3RNYWluLCBUZXN0UmVsb2FkCiAgICAgKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbnQucHkgYi9MaWIvdGVzdC90ZXN0X2ludC5weQppbmRleCBjNDg5NTEwLi40OTA2ZTQ2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ludC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ludC5weQpAQCAtMjQsNiArMjQsOSBAQAogICAgICAgICAoIlx1MDIwMCIsIFZhbHVlRXJyb3IpCiBdCiAKK2NsYXNzIEludFN1YmNsYXNzKGludCk6CisgICAgcGFzcworCiBjbGFzcyBJbnRUZXN0Q2FzZXModW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3RfYmFzaWMoc2VsZik6CkBAIC0yMjgsNiArMjMxLDQ3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaW50LCBiYXNlPTEwKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGludCwgYmFzZT0wKQogCisgICAgZGVmIHRlc3RfaW50X2Jhc2VfbGltaXRzKHNlbGYpOgorICAgICAgICAiIiJUZXN0aW5nIHRoZSBzdXBwb3J0ZWQgbGltaXRzIG9mIHRoZSBpbnQoKSBiYXNlIHBhcmFtZXRlci4iIiIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJzAnLCA1KSwgMCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGludCgnMCcsIDEpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBpbnQoJzAnLCAzNykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGludCgnMCcsIC05MDkpICAjIEFuIG9sZCBtYWdpYyB2YWx1ZSBiYXNlIGZyb20gUHl0aG9uIDIuCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBpbnQoJzAnLCBiYXNlPTAtKDIqKjIzNCkpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBpbnQoJzAnLCBiYXNlPTIqKjIzNCkKKyAgICAgICAgIyBCYXNlcyAyIHRocm91Z2ggMzYgYXJlIHN1cHBvcnRlZC4KKyAgICAgICAgZm9yIGJhc2UgaW4gcmFuZ2UoMiwzNyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnMCcsIGJhc2U9YmFzZSksIDApCisKKyAgICBkZWYgdGVzdF9pbnRfYmFzZV9iYWRfdHlwZXMoc2VsZik6CisgICAgICAgICIiIk5vdCBpbnRlZ2VyIHR5cGVzIGFyZSBub3QgdmFsaWQgYmFzZXM7IGlzc3VlMTY3NzIuIiIiCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGludCgnMCcsIDUuNSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgaW50KCcwJywgNS4wKQorCisgICAgZGVmIHRlc3RfaW50X2Jhc2VfaW5kZXhhYmxlKHNlbGYpOgorICAgICAgICBjbGFzcyBNeUluZGV4YWJsZShvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlKToKKyAgICAgICAgICAgICAgICBzZWxmLnZhbHVlID0gdmFsdWUKKyAgICAgICAgICAgIGRlZiBfX2luZGV4X18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYudmFsdWUKKworICAgICAgICAjIENoZWNrIG91dCBvZiByYW5nZSBiYXNlcy4KKyAgICAgICAgZm9yIGJhc2UgaW4gMioqMTAwLCAtMioqMTAwLCAxLCAzNzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICAgICAgaW50KCc0MycsIGJhc2UpCisKKyAgICAgICAgIyBDaGVjayBpbi1yYW5nZSBiYXNlcy4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJzEwMScsIGJhc2U9TXlJbmRleGFibGUoMikpLCA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnMTAxJywgYmFzZT1NeUluZGV4YWJsZSgxMCkpLCAxMDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCcxMDEnLCBiYXNlPU15SW5kZXhhYmxlKDM2KSksIDEgKyAzNioqMikKKwogICAgIGRlZiB0ZXN0X25vbl9udW1lcmljX2lucHV0X3R5cGVzKHNlbGYpOgogICAgICAgICAjIFRlc3QgcG9zc2libGUgbm9uLW51bWVyaWMgdHlwZXMgZm9yIHRoZSBhcmd1bWVudCB4LCBpbmNsdWRpbmcKICAgICAgICAgIyBzdWJjbGFzc2VzIG9mIHRoZSBleHBsaWNpdGx5IGRvY3VtZW50ZWQgYWNjZXB0ZWQgdHlwZXMuCkBAIC0yMzUsMTYgKzI3OSw0MCBAQAogICAgICAgICBjbGFzcyBDdXN0b21CeXRlcyhieXRlcyk6IHBhc3MKICAgICAgICAgY2xhc3MgQ3VzdG9tQnl0ZUFycmF5KGJ5dGVhcnJheSk6IHBhc3MKIAotICAgICAgICB2YWx1ZXMgPSBbYicxMDAnLAotICAgICAgICAgICAgICAgICAgYnl0ZWFycmF5KGInMTAwJyksCi0gICAgICAgICAgICAgICAgICBDdXN0b21TdHIoJzEwMCcpLAotICAgICAgICAgICAgICAgICAgQ3VzdG9tQnl0ZXMoYicxMDAnKSwKLSAgICAgICAgICAgICAgICAgIEN1c3RvbUJ5dGVBcnJheShiJzEwMCcpXQorICAgICAgICBmYWN0b3JpZXMgPSBbCisgICAgICAgICAgICBieXRlcywKKyAgICAgICAgICAgIGJ5dGVhcnJheSwKKyAgICAgICAgICAgIGxhbWJkYSBiOiBDdXN0b21TdHIoYi5kZWNvZGUoKSksCisgICAgICAgICAgICBDdXN0b21CeXRlcywKKyAgICAgICAgICAgIEN1c3RvbUJ5dGVBcnJheSwKKyAgICAgICAgICAgIG1lbW9yeXZpZXcsCisgICAgICAgIF0KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZnJvbSBhcnJheSBpbXBvcnQgYXJyYXkKKyAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgZmFjdG9yaWVzLmFwcGVuZChsYW1iZGEgYjogYXJyYXkoJ0InLCBiKSkKIAotICAgICAgICBmb3IgeCBpbiB2YWx1ZXM6Ci0gICAgICAgICAgICBtc2cgPSAneCBoYXMgdHlwZSAlcycgJSB0eXBlKHgpLl9fbmFtZV9fCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCh4KSwgMTAwLCBtc2c9bXNnKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoeCwgMiksIDQsIG1zZz1tc2cpCisgICAgICAgIGZvciBmIGluIGZhY3RvcmllczoKKyAgICAgICAgICAgIHggPSBmKGInMTAwJykKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KHR5cGUoeCkpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KHgpLCAxMDApCisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh4LCAoc3RyLCBieXRlcywgYnl0ZWFycmF5KSk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KHgsIDIpLCA0KQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIG1zZyA9ICJjYW4ndCBjb252ZXJ0IG5vbi1zdHJpbmciCisgICAgICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUeXBlRXJyb3IsIG1zZyk6CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQoeCwgMikKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwgJ2ludmFsaWQgbGl0ZXJhbCcpOgorICAgICAgICAgICAgICAgICAgICBpbnQoZihiJ0EnICogMHgxMCkpCisKKyAgICBkZWYgdGVzdF9pbnRfbWVtb3J5dmlldyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQobWVtb3J5dmlldyhiJzEyMycpWzE6M10pLCAyMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQobWVtb3J5dmlldyhiJzEyM1x4MDAnKVsxOjNdKSwgMjMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KG1lbW9yeXZpZXcoYicxMjMgJylbMTozXSksIDIzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludChtZW1vcnl2aWV3KGInMTIzQScpWzE6M10pLCAyMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQobWVtb3J5dmlldyhiJzEyMzQnKVsxOjNdKSwgMjMpCiAKICAgICBkZWYgdGVzdF9zdHJpbmdfZmxvYXQoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGludCwgJzEuMicpCkBAIC0zNTksMjAgKzQyNywyNyBAQAogICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCiAKICAgICAgICAgYmFkX2ludCA9IEJhZEludCgpCi0gICAgICAgIG4gPSBpbnQoYmFkX2ludCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6CisgICAgICAgICAgICBuID0gaW50KGJhZF9pbnQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobiwgMSkKIAogICAgICAgICBiYWRfaW50ID0gQmFkSW50MigpCi0gICAgICAgIG4gPSBpbnQoYmFkX2ludCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6CisgICAgICAgICAgICBuID0gaW50KGJhZF9pbnQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobiwgMSkKIAogICAgICAgICBiYWRfaW50ID0gVHJ1bmNSZXR1cm5zQmFkSW50KCkKLSAgICAgICAgbiA9IGludChiYWRfaW50KQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgIG4gPSBpbnQoYmFkX2ludCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuLCAxKQogCiAgICAgICAgIGdvb2RfaW50ID0gVHJ1bmNSZXR1cm5zSW50U3ViY2xhc3MoKQogICAgICAgICBuID0gaW50KGdvb2RfaW50KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG4sIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShuKSwgYm9vbCkKKyAgICAgICAgbiA9IEludFN1YmNsYXNzKGdvb2RfaW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG4sIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShuKSwgSW50U3ViY2xhc3MpCiAKICAgICBkZWYgdGVzdF9lcnJvcl9tZXNzYWdlKHNlbGYpOgogICAgICAgICBkZWYgY2hlY2socywgYmFzZT1Ob25lKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW8ucHkgYi9MaWIvdGVzdC90ZXN0X2lvLnB5CmluZGV4IDRiNDlkMzMuLjg2Y2Y4ZTEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW8ucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pby5weQpAQCAtMTUsNyArMTUsNyBAQAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMgV2hlbiB3cml0aW5nIHRlc3RzIGZvciBpbywgaXQncyBpbXBvcnRhbnQgdG8gdGVzdCBib3RoIHRoZSBDIGFuZCBQeXRob24KICMgaW1wbGVtZW50YXRpb25zLiBUaGlzIGlzIHVzdWFsbHkgZG9uZSBieSB3cml0aW5nIGEgYmFzZSB0ZXN0IHRoYXQgcmVmZXJzIHRvCi0jIHRoZSB0eXBlIGl0IGlzIHRlc3RpbmcgYXMgYSBhdHRyaWJ1dGUuIFRoZW4gaXQgcHJvdmlkZXMgY3VzdG9tIHN1YmNsYXNzZXMgdG8KKyMgdGhlIHR5cGUgaXQgaXMgdGVzdGluZyBhcyBhbiBhdHRyaWJ1dGUuIFRoZW4gaXQgcHJvdmlkZXMgY3VzdG9tIHN1YmNsYXNzZXMgdG8KICMgdGVzdCBib3RoIGltcGxlbWVudGF0aW9ucy4gVGhpcyBmaWxlIGhhcyBsb3RzIG9mIGV4YW1wbGVzLgogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIApAQCAtMzUsNiArMzUsNyBAQAogZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgZGVxdWUsIFVzZXJMaXN0CiBmcm9tIGl0ZXJ0b29scyBpbXBvcnQgY3ljbGUsIGNvdW50CiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKK2Zyb20gdGVzdC5zY3JpcHRfaGVscGVyIGltcG9ydCBhc3NlcnRfcHl0aG9uX29rLCBydW5fcHl0aG9uX3VudGlsX2VuZAogCiBpbXBvcnQgY29kZWNzCiBpbXBvcnQgaW8gICMgQyBpbXBsZW1lbnRhdGlvbiBvZiBpbwpAQCAtMTY0LDcgKzE2NSw3IEBACiAgICAgZGVmIGNsb3NlKHNlbGYpOgogICAgICAgICBpZiBub3Qgc2VsZi5jbG9zZWQ6CiAgICAgICAgICAgICBzZWxmLmNsb3NlZCA9IDEKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IKIAogY2xhc3MgQ0Nsb3NlRmFpbHVyZUlPKENsb3NlRmFpbHVyZUlPLCBpby5SYXdJT0Jhc2UpOgogICAgIHBhc3MKQEAgLTQ1Miw3ICs0NTMsNyBAQAogICAgICAgICB3aXRoIHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgImFiIikgYXMgZjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi50ZWxsKCksIDMpCiAgICAgICAgIHdpdGggc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAiYSIpIGFzIGY6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZi50ZWxsKCkgPiAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKGYudGVsbCgpLCAwKQogCiAgICAgZGVmIHRlc3RfZGVzdHJ1Y3RvcihzZWxmKToKICAgICAgICAgcmVjb3JkID0gW10KQEAgLTU3Miw3ICs1NzMsNyBAQAogICAgICAgICAgICAgd3IgPSB3ZWFrcmVmLnJlZihmKQogICAgICAgICAgICAgZGVsIGYKICAgICAgICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3cigpIGlzIE5vbmUsIHdyKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh3cigpLCB3cikKICAgICAgICAgd2l0aCBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJyYiIpIGFzIGY6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCBiImFiY3h4eCIpCiAKQEAgLTU5MiwxMyArNTkzLDQ0IEBACiAgICAgICAgIHdpdGggc2VsZi5vcGVuKHplcm8sICJyIikgYXMgZjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGYucmVhZCkKIAotICAgIGRlZiB0ZXN0X2ZsdXNoX2Vycm9yX29uX2Nsb3NlKHNlbGYpOgotICAgICAgICBmID0gc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAid2IiLCBidWZmZXJpbmc9MCkKKyAgICBkZWYgY2hlY2tfZmx1c2hfZXJyb3Jfb25fY2xvc2Uoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgIyBUZXN0IHRoYXQgdGhlIGZpbGUgaXMgY2xvc2VkIGRlc3BpdGUgZmFpbGVkIGZsdXNoCisgICAgICAgICMgYW5kIHRoYXQgZmx1c2goKSBpcyBjYWxsZWQgYmVmb3JlIGZpbGUgY2xvc2VkLgorICAgICAgICBmID0gc2VsZi5vcGVuKCphcmdzLCAqKmt3YXJncykKKyAgICAgICAgY2xvc2VkID0gW10KICAgICAgICAgZGVmIGJhZF9mbHVzaCgpOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigpCisgICAgICAgICAgICBjbG9zZWRbOl0gPSBbZi5jbG9zZWRdCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCkKICAgICAgICAgZi5mbHVzaCA9IGJhZF9mbHVzaAotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBmLmNsb3NlKSAjIGV4Y2VwdGlvbiBub3Qgc3dhbGxvd2VkCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIGYuY2xvc2UpICMgZXhjZXB0aW9uIG5vdCBzd2FsbG93ZWQKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuY2xvc2VkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY2xvc2VkKSAgICAgICMgZmx1c2goKSBjYWxsZWQKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjbG9zZWRbMF0pICAjIGZsdXNoKCkgY2FsbGVkIGJlZm9yZSBmaWxlIGNsb3NlZAorICAgICAgICBmLmZsdXNoID0gbGFtYmRhOiBOb25lICAjIGJyZWFrIHJlZmVyZW5jZSBsb29wCisKKyAgICBkZWYgdGVzdF9mbHVzaF9lcnJvcl9vbl9jbG9zZShzZWxmKToKKyAgICAgICAgIyByYXcgZmlsZQorICAgICAgICAjIElzc3VlICM1NzAwOiBpby5GaWxlSU8gY2FsbHMgZmx1c2goKSBhZnRlciBmaWxlIGNsb3NlZAorICAgICAgICBzZWxmLmNoZWNrX2ZsdXNoX2Vycm9yX29uX2Nsb3NlKHN1cHBvcnQuVEVTVEZOLCAnd2InLCBidWZmZXJpbmc9MCkKKyAgICAgICAgZmQgPSBvcy5vcGVuKHN1cHBvcnQuVEVTVEZOLCBvcy5PX1dST05MWXxvcy5PX0NSRUFUKQorICAgICAgICBzZWxmLmNoZWNrX2ZsdXNoX2Vycm9yX29uX2Nsb3NlKGZkLCAnd2InLCBidWZmZXJpbmc9MCkKKyAgICAgICAgZmQgPSBvcy5vcGVuKHN1cHBvcnQuVEVTVEZOLCBvcy5PX1dST05MWXxvcy5PX0NSRUFUKQorICAgICAgICBzZWxmLmNoZWNrX2ZsdXNoX2Vycm9yX29uX2Nsb3NlKGZkLCAnd2InLCBidWZmZXJpbmc9MCwgY2xvc2VmZD1GYWxzZSkKKyAgICAgICAgb3MuY2xvc2UoZmQpCisgICAgICAgICMgYnVmZmVyZWQgaW8KKyAgICAgICAgc2VsZi5jaGVja19mbHVzaF9lcnJvcl9vbl9jbG9zZShzdXBwb3J0LlRFU1RGTiwgJ3diJykKKyAgICAgICAgZmQgPSBvcy5vcGVuKHN1cHBvcnQuVEVTVEZOLCBvcy5PX1dST05MWXxvcy5PX0NSRUFUKQorICAgICAgICBzZWxmLmNoZWNrX2ZsdXNoX2Vycm9yX29uX2Nsb3NlKGZkLCAnd2InKQorICAgICAgICBmZCA9IG9zLm9wZW4oc3VwcG9ydC5URVNURk4sIG9zLk9fV1JPTkxZfG9zLk9fQ1JFQVQpCisgICAgICAgIHNlbGYuY2hlY2tfZmx1c2hfZXJyb3Jfb25fY2xvc2UoZmQsICd3YicsIGNsb3NlZmQ9RmFsc2UpCisgICAgICAgIG9zLmNsb3NlKGZkKQorICAgICAgICAjIHRleHQgaW8KKyAgICAgICAgc2VsZi5jaGVja19mbHVzaF9lcnJvcl9vbl9jbG9zZShzdXBwb3J0LlRFU1RGTiwgJ3cnKQorICAgICAgICBmZCA9IG9zLm9wZW4oc3VwcG9ydC5URVNURk4sIG9zLk9fV1JPTkxZfG9zLk9fQ1JFQVQpCisgICAgICAgIHNlbGYuY2hlY2tfZmx1c2hfZXJyb3Jfb25fY2xvc2UoZmQsICd3JykKKyAgICAgICAgZmQgPSBvcy5vcGVuKHN1cHBvcnQuVEVTVEZOLCBvcy5PX1dST05MWXxvcy5PX0NSRUFUKQorICAgICAgICBzZWxmLmNoZWNrX2ZsdXNoX2Vycm9yX29uX2Nsb3NlKGZkLCAndycsIGNsb3NlZmQ9RmFsc2UpCisgICAgICAgIG9zLmNsb3NlKGZkKQogCiAgICAgZGVmIHRlc3RfbXVsdGlfY2xvc2Uoc2VsZik6CiAgICAgICAgIGYgPSBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJ3YiIsIGJ1ZmZlcmluZz0wKQpAQCAtNjUyLDYgKzY4NCwyMCBAQAogICAgICAgICAgICAgZmlsZWlvLmNsb3NlKCkKICAgICAgICAgICAgIGYyLnJlYWRsaW5lKCkKIAorICAgIGRlZiB0ZXN0X25vbmJ1ZmZlcmVkX3RleHRpbyhzZWxmKToKKyAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncyhyZWNvcmQ9VHJ1ZSkgYXMgcmVjb3JkZWQ6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgICAgIHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgJ3cnLCBidWZmZXJpbmc9MCkKKyAgICAgICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVjb3JkZWQsIFtdKQorCisgICAgZGVmIHRlc3RfaW52YWxpZF9uZXdsaW5lKHNlbGYpOgorICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKHJlY29yZD1UcnVlKSBhcyByZWNvcmRlZDoKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICAgICAgc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAndycsIG5ld2xpbmU9J2ludmFsaWQnKQorICAgICAgICAgICAgc3VwcG9ydC5nY19jb2xsZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWNvcmRlZCwgW10pCisKIAogY2xhc3MgQ0lPVGVzdChJT1Rlc3QpOgogCkBAIC02NzEsNyArNzE3LDcgQEAKICAgICAgICAgZGVsIE15SU8KICAgICAgICAgZGVsIG9iagogICAgICAgICBzdXBwb3J0LmdjX2NvbGxlY3QoKQotICAgICAgICBzZWxmLmFzc2VydFRydWUod3IoKSBpcyBOb25lLCB3cikKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUod3IoKSwgd3IpCiAKIGNsYXNzIFB5SU9UZXN0KElPVGVzdCk6CiAgICAgcGFzcwpAQCAtNjg2LDYgKzczMiw4IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0SXMoYnVmLmRldGFjaCgpLCByYXcpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJ1Zi5kZXRhY2gpCiAKKyAgICAgICAgcmVwcihidWYpICAjIFNob3VsZCBzdGlsbCB3b3JrCisKICAgICBkZWYgdGVzdF9maWxlbm8oc2VsZik6CiAgICAgICAgIHJhd2lvID0gc2VsZi5Nb2NrUmF3SU8oKQogICAgICAgICBidWZpbyA9IHNlbGYudHAocmF3aW8pCkBAIC03NTcsNyArODA1LDcgQEAKICAgICAgICAgaWYgczoKICAgICAgICAgICAgICMgVGhlIGRlc3RydWN0b3IgKm1heSogaGF2ZSBwcmludGVkIGFuIHVucmFpc2FibGUgZXJyb3IsIGNoZWNrIGl0CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzLnNwbGl0bGluZXMoKSksIDEpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocy5zdGFydHN3aXRoKCJFeGNlcHRpb24gSU9FcnJvcjogIiksIHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocy5zdGFydHN3aXRoKCJFeGNlcHRpb24gT1NFcnJvcjogIiksIHMpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocy5lbmRzd2l0aCgiIGlnbm9yZWQiKSwgcykKIAogICAgIGRlZiB0ZXN0X3JlcHIoc2VsZik6CkBAIC03NzEsMjkgKzgxOSw1NiBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoYiksICI8JXMgbmFtZT1iJ2R1bW15Jz4iICUgY2xzbmFtZSkKIAogICAgIGRlZiB0ZXN0X2ZsdXNoX2Vycm9yX29uX2Nsb3NlKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBidWZmZXJlZCBmaWxlIGlzIGNsb3NlZCBkZXNwaXRlIGZhaWxlZCBmbHVzaAorICAgICAgICAjIGFuZCB0aGF0IGZsdXNoKCkgaXMgY2FsbGVkIGJlZm9yZSBmaWxlIGNsb3NlZC4KICAgICAgICAgcmF3ID0gc2VsZi5Nb2NrUmF3SU8oKQorICAgICAgICBjbG9zZWQgPSBbXQogICAgICAgICBkZWYgYmFkX2ZsdXNoKCk6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCkKKyAgICAgICAgICAgIGNsb3NlZFs6XSA9IFtiLmNsb3NlZCwgcmF3LmNsb3NlZF0KKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoKQogICAgICAgICByYXcuZmx1c2ggPSBiYWRfZmx1c2gKICAgICAgICAgYiA9IHNlbGYudHAocmF3KQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBiLmNsb3NlKSAjIGV4Y2VwdGlvbiBub3Qgc3dhbGxvd2VkCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIGIuY2xvc2UpICMgZXhjZXB0aW9uIG5vdCBzd2FsbG93ZWQKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGIuY2xvc2VkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmF3LmNsb3NlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNsb3NlZCkgICAgICAjIGZsdXNoKCkgY2FsbGVkCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2xvc2VkWzBdKSAgIyBmbHVzaCgpIGNhbGxlZCBiZWZvcmUgZmlsZSBjbG9zZWQKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjbG9zZWRbMV0pCisgICAgICAgIHJhdy5mbHVzaCA9IGxhbWJkYTogTm9uZSAgIyBicmVhayByZWZlcmVuY2UgbG9vcAogCiAgICAgZGVmIHRlc3RfY2xvc2VfZXJyb3Jfb25fY2xvc2Uoc2VsZik6CiAgICAgICAgIHJhdyA9IHNlbGYuTW9ja1Jhd0lPKCkKICAgICAgICAgZGVmIGJhZF9mbHVzaCgpOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcignZmx1c2gnKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcignZmx1c2gnKQogICAgICAgICBkZWYgYmFkX2Nsb3NlKCk6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCdjbG9zZScpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCdjbG9zZScpCiAgICAgICAgIHJhdy5jbG9zZSA9IGJhZF9jbG9zZQogICAgICAgICBiID0gc2VsZi50cChyYXcpCiAgICAgICAgIGIuZmx1c2ggPSBiYWRfZmx1c2gKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yKSBhcyBlcnI6ICMgZXhjZXB0aW9uIG5vdCBzd2FsbG93ZWQKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKSBhcyBlcnI6ICMgZXhjZXB0aW9uIG5vdCBzd2FsbG93ZWQKICAgICAgICAgICAgIGIuY2xvc2UoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyci5leGNlcHRpb24uYXJncywgKCdjbG9zZScsKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGVyci5leGNlcHRpb24uX19jb250ZXh0X18sIE9TRXJyb3IpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLmV4Y2VwdGlvbi5fX2NvbnRleHRfXy5hcmdzLCAoJ2ZsdXNoJywpKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGIuY2xvc2VkKQogCisgICAgZGVmIHRlc3Rfbm9ubm9ybWFsaXplZF9jbG9zZV9lcnJvcl9vbl9jbG9zZShzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMjE2NzcKKyAgICAgICAgcmF3ID0gc2VsZi5Nb2NrUmF3SU8oKQorICAgICAgICBkZWYgYmFkX2ZsdXNoKCk6CisgICAgICAgICAgICByYWlzZSBub25fZXhpc3RpbmdfZmx1c2gKKyAgICAgICAgZGVmIGJhZF9jbG9zZSgpOgorICAgICAgICAgICAgcmFpc2Ugbm9uX2V4aXN0aW5nX2Nsb3NlCisgICAgICAgIHJhdy5jbG9zZSA9IGJhZF9jbG9zZQorICAgICAgICBiID0gc2VsZi50cChyYXcpCisgICAgICAgIGIuZmx1c2ggPSBiYWRfZmx1c2gKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhOYW1lRXJyb3IpIGFzIGVycjogIyBleGNlcHRpb24gbm90IHN3YWxsb3dlZAorICAgICAgICAgICAgYi5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ25vbl9leGlzdGluZ19jbG9zZScsIHN0cihlcnIuZXhjZXB0aW9uKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGVyci5leGNlcHRpb24uX19jb250ZXh0X18sIE5hbWVFcnJvcikKKyAgICAgICAgc2VsZi5hc3NlcnRJbignbm9uX2V4aXN0aW5nX2ZsdXNoJywgc3RyKGVyci5leGNlcHRpb24uX19jb250ZXh0X18pKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGIuY2xvc2VkKQorCiAgICAgZGVmIHRlc3RfbXVsdGlfY2xvc2Uoc2VsZik6CiAgICAgICAgIHJhdyA9IHNlbGYuTW9ja1Jhd0lPKCkKICAgICAgICAgYiA9IHNlbGYudHAocmF3KQpAQCAtODI4LDYgKzkwMywxNCBAQAogICAgICAgICBidWZpbyA9IHNlbGYudHAocmF3aW8sIGJ1ZmZlcl9zaXplPWJ1ZnNpemUyKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN5cy5nZXRzaXplb2YoYnVmaW8pLCBzaXplICsgYnVmc2l6ZTIpCiAKKyAgICBAc3VwcG9ydC5jcHl0aG9uX29ubHkKKyAgICBkZWYgdGVzdF9idWZmZXJfZnJlZWluZyhzZWxmKSA6CisgICAgICAgIGJ1ZnNpemUgPSA0MDk2CisgICAgICAgIHJhd2lvID0gc2VsZi5Nb2NrUmF3SU8oKQorICAgICAgICBidWZpbyA9IHNlbGYudHAocmF3aW8sIGJ1ZmZlcl9zaXplPWJ1ZnNpemUpCisgICAgICAgIHNpemUgPSBzeXMuZ2V0c2l6ZW9mKGJ1ZmlvKSAtIGJ1ZnNpemUKKyAgICAgICAgYnVmaW8uY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN5cy5nZXRzaXplb2YoYnVmaW8pLCBzaXplKQogCiBjbGFzcyBCdWZmZXJlZFJlYWRlclRlc3QodW5pdHRlc3QuVGVzdENhc2UsIENvbW1vbkJ1ZmZlcmVkVGVzdHMpOgogICAgIHJlYWRfbW9kZSA9ICJyYiIKQEAgLTk4NywxMSArMTA3MCw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMuYXBwZW5kKGUpCiAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZQogICAgICAgICAgICAgICAgIHRocmVhZHMgPSBbdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9ZikgZm9yIHggaW4gcmFuZ2UoMjApXQotICAgICAgICAgICAgICAgIGZvciB0IGluIHRocmVhZHM6Ci0gICAgICAgICAgICAgICAgICAgIHQuc3RhcnQoKQotICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4wMikgIyB5aWVsZAotICAgICAgICAgICAgICAgIGZvciB0IGluIHRocmVhZHM6Ci0gICAgICAgICAgICAgICAgICAgIHQuam9pbigpCisgICAgICAgICAgICAgICAgd2l0aCBzdXBwb3J0LnN0YXJ0X3RocmVhZHModGhyZWFkcyk6CisgICAgICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4wMikgIyB5aWVsZAogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXJyb3JzLAogICAgICAgICAgICAgICAgICAgICAidGhlIGZvbGxvd2luZyBleGNlcHRpb25zIHdlcmUgY2F1Z2h0OiAlciIgJSBlcnJvcnMpCiAgICAgICAgICAgICAgICAgcyA9IGInJy5qb2luKHJlc3VsdHMpCkBAIC0xMDEyLDggKzEwOTIsOCBAQAogICAgIGRlZiB0ZXN0X21pc2JlaGF2ZWRfaW8oc2VsZik6CiAgICAgICAgIHJhd2lvID0gc2VsZi5NaXNiZWhhdmVkUmF3SU8oKGIiYWJjIiwgYiJkIiwgYiJlZmciKSkKICAgICAgICAgYnVmaW8gPSBzZWxmLnRwKHJhd2lvKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBidWZpby5zZWVrLCAwKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBidWZpby50ZWxsKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBidWZpby5zZWVrLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBidWZpby50ZWxsKQogCiAgICAgZGVmIHRlc3Rfbm9fZXh0cmFuZW91c19yZWFkKHNlbGYpOgogICAgICAgICAjIElzc3VlICM5NTUwOyB3aGVuIHRoZSByYXcgSU8gb2JqZWN0IGhhcyBzYXRpc2ZpZWQgdGhlIHJlYWQgcmVxdWVzdCwKQEAgLTEwMzUsNiArMTExNSwxNCBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYXdpby5fZXh0cmFuZW91c19yZWFkcywgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZhaWxlZCBmb3Ige306IHt9ICE9IDAiLmZvcm1hdChuLCByYXdpby5fZXh0cmFuZW91c19yZWFkcykpCiAKKyAgICBkZWYgdGVzdF9yZWFkX29uX2Nsb3NlZChzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMjM3OTYKKyAgICAgICAgYiA9IGlvLkJ1ZmZlcmVkUmVhZGVyKGlvLkJ5dGVzSU8oYiIxMiIpKQorICAgICAgICBiLnJlYWQoMSkKKyAgICAgICAgYi5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGIucGVlaykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYi5yZWFkMSwgMSkKKwogCiBjbGFzcyBDQnVmZmVyZWRSZWFkZXJUZXN0KEJ1ZmZlcmVkUmVhZGVyVGVzdCwgU2l6ZW9mVGVzdCk6CiAgICAgdHAgPSBpby5CdWZmZXJlZFJlYWRlcgpAQCAtMTA2NCwxOCArMTE1MiwxOSBAQAogICAgICAgICBidWZpbyA9IHNlbGYudHAocmF3aW8pCiAgICAgICAgICMgX3B5aW8uQnVmZmVyZWRSZWFkZXIgc2VlbXMgdG8gaW1wbGVtZW50IHJlYWRpbmcgZGlmZmVyZW50LCBzbyB0aGF0CiAgICAgICAgICMgY2hlY2tpbmcgdGhpcyBpcyBub3Qgc28gZWFzeS4KLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgYnVmaW8ucmVhZCwgMTApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIGJ1ZmlvLnJlYWQsIDEwKQogCiAgICAgZGVmIHRlc3RfZ2FyYmFnZV9jb2xsZWN0aW9uKHNlbGYpOgogICAgICAgICAjIEMgQnVmZmVyZWRSZWFkZXIgb2JqZWN0cyBhcmUgY29sbGVjdGVkLgogICAgICAgICAjIFRoZSBQeXRob24gdmVyc2lvbiBoYXMgX19kZWxfXywgc28gaXQgZW5kcyBpbnRvIGdjLmdhcmJhZ2UgaW5zdGVhZAotICAgICAgICByYXdpbyA9IHNlbGYuRmlsZUlPKHN1cHBvcnQuVEVTVEZOLCAidytiIikKLSAgICAgICAgZiA9IHNlbGYudHAocmF3aW8pCi0gICAgICAgIGYuZiA9IGYKLSAgICAgICAgd3IgPSB3ZWFrcmVmLnJlZihmKQotICAgICAgICBkZWwgZgotICAgICAgICBzdXBwb3J0LmdjX2NvbGxlY3QoKQotICAgICAgICBzZWxmLmFzc2VydFRydWUod3IoKSBpcyBOb25lLCB3cikKKyAgICAgICAgd2l0aCBzdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCgnJywgUmVzb3VyY2VXYXJuaW5nKSk6CisgICAgICAgICAgICByYXdpbyA9IHNlbGYuRmlsZUlPKHN1cHBvcnQuVEVTVEZOLCAidytiIikKKyAgICAgICAgICAgIGYgPSBzZWxmLnRwKHJhd2lvKQorICAgICAgICAgICAgZi5mID0gZgorICAgICAgICAgICAgd3IgPSB3ZWFrcmVmLnJlZihmKQorICAgICAgICAgICAgZGVsIGYKKyAgICAgICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHdyKCksIHdyKQogCiAgICAgZGVmIHRlc3RfYXJnc19lcnJvcihzZWxmKToKICAgICAgICAgIyBJc3N1ZSAjMTcyNzUKQEAgLTEzMDksMTEgKzEzOTgsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzLmFwcGVuZChlKQogICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKICAgICAgICAgICAgICAgICB0aHJlYWRzID0gW3RocmVhZGluZy5UaHJlYWQodGFyZ2V0PWYpIGZvciB4IGluIHJhbmdlKDIwKV0KLSAgICAgICAgICAgICAgICBmb3IgdCBpbiB0aHJlYWRzOgotICAgICAgICAgICAgICAgICAgICB0LnN0YXJ0KCkKLSAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMDIpICMgeWllbGQKLSAgICAgICAgICAgICAgICBmb3IgdCBpbiB0aHJlYWRzOgotICAgICAgICAgICAgICAgICAgICB0LmpvaW4oKQorICAgICAgICAgICAgICAgIHdpdGggc3VwcG9ydC5zdGFydF90aHJlYWRzKHRocmVhZHMpOgorICAgICAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMDIpICMgeWllbGQKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGVycm9ycywKICAgICAgICAgICAgICAgICAgICAgInRoZSBmb2xsb3dpbmcgZXhjZXB0aW9ucyB3ZXJlIGNhdWdodDogJXIiICUgZXJyb3JzKQogICAgICAgICAgICAgICAgIGJ1ZmlvLmNsb3NlKCkKQEAgLTEzMjcsOSArMTQxMyw5IEBACiAgICAgZGVmIHRlc3RfbWlzYmVoYXZlZF9pbyhzZWxmKToKICAgICAgICAgcmF3aW8gPSBzZWxmLk1pc2JlaGF2ZWRSYXdJTygpCiAgICAgICAgIGJ1ZmlvID0gc2VsZi50cChyYXdpbywgNSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgYnVmaW8uc2VlaywgMCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgYnVmaW8udGVsbCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgYnVmaW8ud3JpdGUsIGIiYWJjZGVmIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgYnVmaW8uc2VlaywgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgYnVmaW8udGVsbCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgYnVmaW8ud3JpdGUsIGIiYWJjZGVmIikKIAogICAgIGRlZiB0ZXN0X21heF9idWZmZXJfc2l6ZV9yZW1vdmFsKHNlbGYpOgogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CkBAIC0xMzM4LDExICsxNDI0LDExIEBACiAgICAgZGVmIHRlc3Rfd3JpdGVfZXJyb3Jfb25fY2xvc2Uoc2VsZik6CiAgICAgICAgIHJhdyA9IHNlbGYuTW9ja1Jhd0lPKCkKICAgICAgICAgZGVmIGJhZF93cml0ZShiKToKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigpCiAgICAgICAgIHJhdy53cml0ZSA9IGJhZF93cml0ZQogICAgICAgICBiID0gc2VsZi50cChyYXcpCiAgICAgICAgIGIud3JpdGUoYidzcGFtJykKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgYi5jbG9zZSkgIyBleGNlcHRpb24gbm90IHN3YWxsb3dlZAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBiLmNsb3NlKSAjIGV4Y2VwdGlvbiBub3Qgc3dhbGxvd2VkCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiLmNsb3NlZCkKIAogCkBAIC0xMzczLDE0ICsxNDU5LDE1IEBACiAgICAgICAgICMgQyBCdWZmZXJlZFdyaXRlciBvYmplY3RzIGFyZSBjb2xsZWN0ZWQsIGFuZCBjb2xsZWN0aW5nIHRoZW0gZmx1c2hlcwogICAgICAgICAjIGFsbCBkYXRhIHRvIGRpc2suCiAgICAgICAgICMgVGhlIFB5dGhvbiB2ZXJzaW9uIGhhcyBfX2RlbF9fLCBzbyBpdCBlbmRzIGludG8gZ2MuZ2FyYmFnZSBpbnN0ZWFkCi0gICAgICAgIHJhd2lvID0gc2VsZi5GaWxlSU8oc3VwcG9ydC5URVNURk4sICJ3K2IiKQotICAgICAgICBmID0gc2VsZi50cChyYXdpbykKLSAgICAgICAgZi53cml0ZShiIjEyM3h4eCIpCi0gICAgICAgIGYueCA9IGYKLSAgICAgICAgd3IgPSB3ZWFrcmVmLnJlZihmKQotICAgICAgICBkZWwgZgotICAgICAgICBzdXBwb3J0LmdjX2NvbGxlY3QoKQotICAgICAgICBzZWxmLmFzc2VydFRydWUod3IoKSBpcyBOb25lLCB3cikKKyAgICAgICAgd2l0aCBzdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCgnJywgUmVzb3VyY2VXYXJuaW5nKSk6CisgICAgICAgICAgICByYXdpbyA9IHNlbGYuRmlsZUlPKHN1cHBvcnQuVEVTVEZOLCAidytiIikKKyAgICAgICAgICAgIGYgPSBzZWxmLnRwKHJhd2lvKQorICAgICAgICAgICAgZi53cml0ZShiIjEyM3h4eCIpCisgICAgICAgICAgICBmLnggPSBmCisgICAgICAgICAgICB3ciA9IHdlYWtyZWYucmVmKGYpCisgICAgICAgICAgICBkZWwgZgorICAgICAgICAgICAgc3VwcG9ydC5nY19jb2xsZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUod3IoKSwgd3IpCiAgICAgICAgIHdpdGggc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAicmIiKSBhcyBmOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgYiIxMjN4eHgiKQogCkBAIC0xNDI2LDE0ICsxNTEzLDE0IEBACiAgICAgICAgICAgICBkZWYgcmVhZGFibGUoc2VsZik6CiAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgc2VsZi50cCwgTm90UmVhZGFibGUoKSwgc2VsZi5Nb2NrUmF3SU8oKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc2VsZi50cCwgTm90UmVhZGFibGUoKSwgc2VsZi5Nb2NrUmF3SU8oKSkKIAogICAgIGRlZiB0ZXN0X2NvbnN0cnVjdG9yX3dpdGhfbm90X3dyaXRlYWJsZShzZWxmKToKICAgICAgICAgY2xhc3MgTm90V3JpdGVhYmxlKE1vY2tSYXdJTyk6CiAgICAgICAgICAgICBkZWYgd3JpdGFibGUoc2VsZik6CiAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgc2VsZi50cCwgc2VsZi5Nb2NrUmF3SU8oKSwgTm90V3JpdGVhYmxlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNlbGYudHAsIHNlbGYuTW9ja1Jhd0lPKCksIE5vdFdyaXRlYWJsZSgpKQogCiAgICAgZGVmIHRlc3RfcmVhZChzZWxmKToKICAgICAgICAgcGFpciA9IHNlbGYudHAoc2VsZi5CeXRlc0lPKGIiYWJjZGVmIiksIHNlbGYuTW9ja1Jhd0lPKCkpCkBAIC0xNTAzLDYgKzE1OTAsNTMgQEAKICAgICAgICAgcGFpci5jbG9zZSgpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYWlyLmNsb3NlZCkKIAorICAgIGRlZiB0ZXN0X3JlYWRlcl9jbG9zZV9lcnJvcl9vbl9jbG9zZShzZWxmKToKKyAgICAgICAgZGVmIHJlYWRlcl9jbG9zZSgpOgorICAgICAgICAgICAgcmVhZGVyX25vbl9leGlzdGluZworICAgICAgICByZWFkZXIgPSBzZWxmLk1vY2tSYXdJTygpCisgICAgICAgIHJlYWRlci5jbG9zZSA9IHJlYWRlcl9jbG9zZQorICAgICAgICB3cml0ZXIgPSBzZWxmLk1vY2tSYXdJTygpCisgICAgICAgIHBhaXIgPSBzZWxmLnRwKHJlYWRlciwgd3JpdGVyKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE5hbWVFcnJvcikgYXMgZXJyOgorICAgICAgICAgICAgcGFpci5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3JlYWRlcl9ub25fZXhpc3RpbmcnLCBzdHIoZXJyLmV4Y2VwdGlvbikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYWlyLmNsb3NlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyZWFkZXIuY2xvc2VkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUod3JpdGVyLmNsb3NlZCkKKworICAgIGRlZiB0ZXN0X3dyaXRlcl9jbG9zZV9lcnJvcl9vbl9jbG9zZShzZWxmKToKKyAgICAgICAgZGVmIHdyaXRlcl9jbG9zZSgpOgorICAgICAgICAgICAgd3JpdGVyX25vbl9leGlzdGluZworICAgICAgICByZWFkZXIgPSBzZWxmLk1vY2tSYXdJTygpCisgICAgICAgIHdyaXRlciA9IHNlbGYuTW9ja1Jhd0lPKCkKKyAgICAgICAgd3JpdGVyLmNsb3NlID0gd3JpdGVyX2Nsb3NlCisgICAgICAgIHBhaXIgPSBzZWxmLnRwKHJlYWRlciwgd3JpdGVyKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE5hbWVFcnJvcikgYXMgZXJyOgorICAgICAgICAgICAgcGFpci5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3dyaXRlcl9ub25fZXhpc3RpbmcnLCBzdHIoZXJyLmV4Y2VwdGlvbikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocGFpci5jbG9zZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZWFkZXIuY2xvc2VkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHdyaXRlci5jbG9zZWQpCisKKyAgICBkZWYgdGVzdF9yZWFkZXJfd3JpdGVyX2Nsb3NlX2Vycm9yX29uX2Nsb3NlKHNlbGYpOgorICAgICAgICBkZWYgcmVhZGVyX2Nsb3NlKCk6CisgICAgICAgICAgICByZWFkZXJfbm9uX2V4aXN0aW5nCisgICAgICAgIGRlZiB3cml0ZXJfY2xvc2UoKToKKyAgICAgICAgICAgIHdyaXRlcl9ub25fZXhpc3RpbmcKKyAgICAgICAgcmVhZGVyID0gc2VsZi5Nb2NrUmF3SU8oKQorICAgICAgICByZWFkZXIuY2xvc2UgPSByZWFkZXJfY2xvc2UKKyAgICAgICAgd3JpdGVyID0gc2VsZi5Nb2NrUmF3SU8oKQorICAgICAgICB3cml0ZXIuY2xvc2UgPSB3cml0ZXJfY2xvc2UKKyAgICAgICAgcGFpciA9IHNlbGYudHAocmVhZGVyLCB3cml0ZXIpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoTmFtZUVycm9yKSBhcyBlcnI6CisgICAgICAgICAgICBwYWlyLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigncmVhZGVyX25vbl9leGlzdGluZycsIHN0cihlcnIuZXhjZXB0aW9uKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGVyci5leGNlcHRpb24uX19jb250ZXh0X18sIE5hbWVFcnJvcikKKyAgICAgICAgc2VsZi5hc3NlcnRJbignd3JpdGVyX25vbl9leGlzdGluZycsIHN0cihlcnIuZXhjZXB0aW9uLl9fY29udGV4dF9fKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShwYWlyLmNsb3NlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyZWFkZXIuY2xvc2VkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHdyaXRlci5jbG9zZWQpCisKICAgICBkZWYgdGVzdF9pc2F0dHkoc2VsZik6CiAgICAgICAgIGNsYXNzIFNlbGVjdGFibGVJc0F0dHkoTW9ja1Jhd0lPKToKICAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpc2F0dHkpOgpAQCAtMTk2MSw2ICsyMDk1LDE3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdC5fX2luaXRfXywgYiwgbmV3bGluZT00MikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdC5fX2luaXRfXywgYiwgbmV3bGluZT0neHl6enknKQogCisgICAgZGVmIHRlc3RfdW5pbml0aWFsaXplZChzZWxmKToKKyAgICAgICAgdCA9IHNlbGYuVGV4dElPV3JhcHBlci5fX25ld19fKHNlbGYuVGV4dElPV3JhcHBlcikKKyAgICAgICAgZGVsIHQKKyAgICAgICAgdCA9IHNlbGYuVGV4dElPV3JhcHBlci5fX25ld19fKHNlbGYuVGV4dElPV3JhcHBlcikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRXhjZXB0aW9uLCByZXByLCB0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KChWYWx1ZUVycm9yLCBBdHRyaWJ1dGVFcnJvciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3VuaW5pdGlhbGl6ZWR8aGFzIG5vIGF0dHJpYnV0ZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdC5yZWFkLCAwKQorICAgICAgICB0Ll9faW5pdF9fKHNlbGYuTW9ja1Jhd0lPKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5yZWFkKDApLCAnJykKKwogICAgIGRlZiB0ZXN0X25vbl90ZXh0X2VuY29kaW5nX2NvZGVjc19hcmVfcmVqZWN0ZWQoc2VsZik6CiAgICAgICAgICMgRW5zdXJlIHRoZSBjb25zdHJ1Y3RvciBjb21wbGFpbnMgaWYgcGFzc2VkIGEgY29kZWMgdGhhdCBpc24ndAogICAgICAgICAjIG1hcmtlZCBhcyBhIHRleHQgZW5jb2RpbmcKQEAgLTE5NjgsNyArMjExMyw3IEBACiAgICAgICAgIHIgPSBzZWxmLkJ5dGVzSU8oKQogICAgICAgICBiID0gc2VsZi5CdWZmZXJlZFdyaXRlcihyKQogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoTG9va3VwRXJyb3IsICJpcyBub3QgYSB0ZXh0IGVuY29kaW5nIik6Ci0gICAgICAgICAgICBzZWxmLlRleHRJT1dyYXBwZXIoYiwgZW5jb2Rpbmc9ImhleF9jb2RlYyIpCisgICAgICAgICAgICBzZWxmLlRleHRJT1dyYXBwZXIoYiwgZW5jb2Rpbmc9ImhleCIpCiAKICAgICBkZWYgdGVzdF9kZXRhY2goc2VsZik6CiAgICAgICAgIHIgPSBzZWxmLkJ5dGVzSU8oKQpAQCAtMTk4Myw2ICsyMTI4LDEyIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoci5nZXR2YWx1ZSgpLCBiImhvd2R5IikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdC5kZXRhY2gpCiAKKyAgICAgICAgIyBPcGVyYXRpb25zIGluZGVwZW5kZW50IG9mIHRoZSBkZXRhY2hlZCBzdHJlYW0gc2hvdWxkIHN0aWxsIHdvcmsKKyAgICAgICAgcmVwcih0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuZW5jb2RpbmcsICJhc2NpaSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5lcnJvcnMsICJzdHJpY3QiKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHQubGluZV9idWZmZXJpbmcpCisKICAgICBkZWYgdGVzdF9yZXByKHNlbGYpOgogICAgICAgICByYXcgPSBzZWxmLkJ5dGVzSU8oImhlbGxvIi5lbmNvZGUoInV0Zi04IikpCiAgICAgICAgIGIgPSBzZWxmLkJ1ZmZlcmVkUmVhZGVyKHJhdykKQEAgLTIwMDAsNiArMjE1MSw5IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcih0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAiPCVzLlRleHRJT1dyYXBwZXIgbmFtZT1iJ2R1bW15JyBtb2RlPSdyJyBlbmNvZGluZz0ndXRmLTgnPiIgJSBtb2RuYW1lKQogCisgICAgICAgIHQuYnVmZmVyLmRldGFjaCgpCisgICAgICAgIHJlcHIodCkgICMgU2hvdWxkIG5vdCByYWlzZSBhbiBleGNlcHRpb24KKwogICAgIGRlZiB0ZXN0X2xpbmVfYnVmZmVyaW5nKHNlbGYpOgogICAgICAgICByID0gc2VsZi5CeXRlc0lPKCkKICAgICAgICAgYiA9IHNlbGYuQnVmZmVyZWRXcml0ZXIociwgMTAwMCkKQEAgLTIwNDUsNyArMjE5OSw3IEBACiAgICAgICAgIHQgPSBzZWxmLlRleHRJT1dyYXBwZXIoYiwgZW5jb2Rpbmc9InV0Zi04IikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LmVuY29kaW5nLCAidXRmLTgiKQogICAgICAgICB0ID0gc2VsZi5UZXh0SU9XcmFwcGVyKGIpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0LmVuY29kaW5nIGlzIG5vdCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZSh0LmVuY29kaW5nKQogICAgICAgICBjb2RlY3MubG9va3VwKHQuZW5jb2RpbmcpCiAKICAgICBkZWYgdGVzdF9lbmNvZGluZ19lcnJvcnNfcmVhZGluZyhzZWxmKToKQEAgLTIyMTUsNyArMjM2OSw3IEBACiAgICAgICAgIGlmIHM6CiAgICAgICAgICAgICAjIFRoZSBkZXN0cnVjdG9yICptYXkqIGhhdmUgcHJpbnRlZCBhbiB1bnJhaXNhYmxlIGVycm9yLCBjaGVjayBpdAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocy5zcGxpdGxpbmVzKCkpLCAxKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMuc3RhcnRzd2l0aCgiRXhjZXB0aW9uIElPRXJyb3I6ICIpLCBzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMuc3RhcnRzd2l0aCgiRXhjZXB0aW9uIE9TRXJyb3I6ICIpLCBzKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMuZW5kc3dpdGgoIiBpZ25vcmVkIiksIHMpCiAKICAgICAjIFN5c3RlbWF0aWMgdGVzdHMgb2YgdGhlIHRleHQgSS9PIEFQSQpAQCAtMjI4Nyw3ICsyNDQxLDcgQEAKICAgICAgICAgZi5zZWVrKDApCiAgICAgICAgIGZvciBsaW5lIGluIGY6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmUsICJceGZmXG4iKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgZi50ZWxsKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgZi50ZWxsKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYudGVsbCgpLCBwMikKICAgICAgICAgZi5jbG9zZSgpCiAKQEAgLTIzOTEsNyArMjU0NSw3IEBACiAgICAgICAgICAgICBkZWYgcmVhZGFibGUoc2VsZik6CiAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgIHR4dCA9IHNlbGYuVGV4dElPV3JhcHBlcihVblJlYWRhYmxlKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIHR4dC5yZWFkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCB0eHQucmVhZCkKIAogICAgIGRlZiB0ZXN0X3JlYWRfb25lX2J5X29uZShzZWxmKToKICAgICAgICAgdHh0ID0gc2VsZi5UZXh0SU9XcmFwcGVyKHNlbGYuQnl0ZXNJTyhiIkFBXHJcbkJCIikpCkBAIC0yNTM0LDYgKzI2ODgsMTkgQEAKICAgICAgICAgICAgIHdpdGggc2VsZi5vcGVuKGZpbGVuYW1lLCAncmInKSBhcyBmOgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksICdiYmJ6enonLmVuY29kZShjaGFyc2V0KSkKIAorICAgIGRlZiB0ZXN0X3NlZWtfYXBwZW5kX2JvbShzZWxmKToKKyAgICAgICAgIyBTYW1lIHRlc3QsIGJ1dCBmaXJzdCBzZWVrIHRvIHRoZSBzdGFydCBhbmQgdGhlbiB0byB0aGUgZW5kCisgICAgICAgIGZpbGVuYW1lID0gc3VwcG9ydC5URVNURk4KKyAgICAgICAgZm9yIGNoYXJzZXQgaW4gKCd1dGYtOC1zaWcnLCAndXRmLTE2JywgJ3V0Zi0zMicpOgorICAgICAgICAgICAgd2l0aCBzZWxmLm9wZW4oZmlsZW5hbWUsICd3JywgZW5jb2Rpbmc9Y2hhcnNldCkgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKCdhYWEnKQorICAgICAgICAgICAgd2l0aCBzZWxmLm9wZW4oZmlsZW5hbWUsICdhJywgZW5jb2Rpbmc9Y2hhcnNldCkgYXMgZjoKKyAgICAgICAgICAgICAgICBmLnNlZWsoMCkKKyAgICAgICAgICAgICAgICBmLnNlZWsoMCwgc2VsZi5TRUVLX0VORCkKKyAgICAgICAgICAgICAgICBmLndyaXRlKCd4eHgnKQorICAgICAgICAgICAgd2l0aCBzZWxmLm9wZW4oZmlsZW5hbWUsICdyYicpIGFzIGY6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgJ2FhYXh4eCcuZW5jb2RlKGNoYXJzZXQpKQorCiAgICAgZGVmIHRlc3RfZXJyb3JzX3Byb3BlcnR5KHNlbGYpOgogICAgICAgICB3aXRoIHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgInciKSBhcyBmOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmVycm9ycywgInN0cmljdCIpCkBAIC0yNTUwLDI2ICsyNzE3LDY0IEBACiAgICAgICAgICAgICAgICAgdGV4dCA9ICJUaHJlYWQlMDNkXG4iICUgbgogICAgICAgICAgICAgICAgIGV2ZW50LndhaXQoKQogICAgICAgICAgICAgICAgIGYud3JpdGUodGV4dCkKLSAgICAgICAgICAgIHRocmVhZHMgPSBbdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9bGFtYmRhIG49eDogcnVuKG4pKQorICAgICAgICAgICAgdGhyZWFkcyA9IFt0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1ydW4sIGFyZ3M9KHgsKSkKICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHggaW4gcmFuZ2UoMjApXQotICAgICAgICAgICAgZm9yIHQgaW4gdGhyZWFkczoKLSAgICAgICAgICAgICAgICB0LnN0YXJ0KCkKLSAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4wMikKLSAgICAgICAgICAgIGV2ZW50LnNldCgpCi0gICAgICAgICAgICBmb3IgdCBpbiB0aHJlYWRzOgotICAgICAgICAgICAgICAgIHQuam9pbigpCisgICAgICAgICAgICB3aXRoIHN1cHBvcnQuc3RhcnRfdGhyZWFkcyh0aHJlYWRzLCBldmVudC5zZXQpOgorICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4wMikKICAgICAgICAgd2l0aCBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4pIGFzIGY6CiAgICAgICAgICAgICBjb250ZW50ID0gZi5yZWFkKCkKICAgICAgICAgICAgIGZvciBuIGluIHJhbmdlKDIwKToKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbnRlbnQuY291bnQoIlRocmVhZCUwM2RcbiIgJSBuKSwgMSkKIAogICAgIGRlZiB0ZXN0X2ZsdXNoX2Vycm9yX29uX2Nsb3NlKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCB0ZXh0IGZpbGUgaXMgY2xvc2VkIGRlc3BpdGUgZmFpbGVkIGZsdXNoCisgICAgICAgICMgYW5kIHRoYXQgZmx1c2goKSBpcyBjYWxsZWQgYmVmb3JlIGZpbGUgY2xvc2VkLgogICAgICAgICB0eHQgPSBzZWxmLlRleHRJT1dyYXBwZXIoc2VsZi5CeXRlc0lPKHNlbGYudGVzdGRhdGEpLCBlbmNvZGluZz0iYXNjaWkiKQorICAgICAgICBjbG9zZWQgPSBbXQogICAgICAgICBkZWYgYmFkX2ZsdXNoKCk6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCkKKyAgICAgICAgICAgIGNsb3NlZFs6XSA9IFt0eHQuY2xvc2VkLCB0eHQuYnVmZmVyLmNsb3NlZF0KKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoKQogICAgICAgICB0eHQuZmx1c2ggPSBiYWRfZmx1c2gKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgdHh0LmNsb3NlKSAjIGV4Y2VwdGlvbiBub3Qgc3dhbGxvd2VkCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHR4dC5jbG9zZSkgIyBleGNlcHRpb24gbm90IHN3YWxsb3dlZAogICAgICAgICBzZWxmLmFzc2VydFRydWUodHh0LmNsb3NlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR4dC5idWZmZXIuY2xvc2VkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY2xvc2VkKSAgICAgICMgZmx1c2goKSBjYWxsZWQKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjbG9zZWRbMF0pICAjIGZsdXNoKCkgY2FsbGVkIGJlZm9yZSBmaWxlIGNsb3NlZAorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNsb3NlZFsxXSkKKyAgICAgICAgdHh0LmZsdXNoID0gbGFtYmRhOiBOb25lICAjIGJyZWFrIHJlZmVyZW5jZSBsb29wCisKKyAgICBkZWYgdGVzdF9jbG9zZV9lcnJvcl9vbl9jbG9zZShzZWxmKToKKyAgICAgICAgYnVmZmVyID0gc2VsZi5CeXRlc0lPKHNlbGYudGVzdGRhdGEpCisgICAgICAgIGRlZiBiYWRfZmx1c2goKToKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoJ2ZsdXNoJykKKyAgICAgICAgZGVmIGJhZF9jbG9zZSgpOgorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcignY2xvc2UnKQorICAgICAgICBidWZmZXIuY2xvc2UgPSBiYWRfY2xvc2UKKyAgICAgICAgdHh0ID0gc2VsZi5UZXh0SU9XcmFwcGVyKGJ1ZmZlciwgZW5jb2Rpbmc9ImFzY2lpIikKKyAgICAgICAgdHh0LmZsdXNoID0gYmFkX2ZsdXNoCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcikgYXMgZXJyOiAjIGV4Y2VwdGlvbiBub3Qgc3dhbGxvd2VkCisgICAgICAgICAgICB0eHQuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyci5leGNlcHRpb24uYXJncywgKCdjbG9zZScsKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGVyci5leGNlcHRpb24uX19jb250ZXh0X18sIE9TRXJyb3IpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLmV4Y2VwdGlvbi5fX2NvbnRleHRfXy5hcmdzLCAoJ2ZsdXNoJywpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHR4dC5jbG9zZWQpCisKKyAgICBkZWYgdGVzdF9ub25ub3JtYWxpemVkX2Nsb3NlX2Vycm9yX29uX2Nsb3NlKHNlbGYpOgorICAgICAgICAjIElzc3VlICMyMTY3NworICAgICAgICBidWZmZXIgPSBzZWxmLkJ5dGVzSU8oc2VsZi50ZXN0ZGF0YSkKKyAgICAgICAgZGVmIGJhZF9mbHVzaCgpOgorICAgICAgICAgICAgcmFpc2Ugbm9uX2V4aXN0aW5nX2ZsdXNoCisgICAgICAgIGRlZiBiYWRfY2xvc2UoKToKKyAgICAgICAgICAgIHJhaXNlIG5vbl9leGlzdGluZ19jbG9zZQorICAgICAgICBidWZmZXIuY2xvc2UgPSBiYWRfY2xvc2UKKyAgICAgICAgdHh0ID0gc2VsZi5UZXh0SU9XcmFwcGVyKGJ1ZmZlciwgZW5jb2Rpbmc9ImFzY2lpIikKKyAgICAgICAgdHh0LmZsdXNoID0gYmFkX2ZsdXNoCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoTmFtZUVycm9yKSBhcyBlcnI6ICMgZXhjZXB0aW9uIG5vdCBzd2FsbG93ZWQKKyAgICAgICAgICAgIHR4dC5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ25vbl9leGlzdGluZ19jbG9zZScsIHN0cihlcnIuZXhjZXB0aW9uKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGVyci5leGNlcHRpb24uX19jb250ZXh0X18sIE5hbWVFcnJvcikKKyAgICAgICAgc2VsZi5hc3NlcnRJbignbm9uX2V4aXN0aW5nX2ZsdXNoJywgc3RyKGVyci5leGNlcHRpb24uX19jb250ZXh0X18pKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHR4dC5jbG9zZWQpCiAKICAgICBkZWYgdGVzdF9tdWx0aV9jbG9zZShzZWxmKToKICAgICAgICAgdHh0ID0gc2VsZi5UZXh0SU9XcmFwcGVyKHNlbGYuQnl0ZXNJTyhzZWxmLnRlc3RkYXRhKSwgZW5jb2Rpbmc9ImFzY2lpIikKQEAgLTI2MTAsNiArMjgxNSwzOCBAQAogICAgICAgICB0eHQud3JpdGUoJzUnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInJy5qb2luKHJhdy5fd3JpdGVfc3RhY2spLCBiJzEyM1xuNDUnKQogCisgICAgZGVmIHRlc3RfYnVmaW9fd3JpdGVfdGhyb3VnaChzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMjEzOTY6IHdyaXRlX3Rocm91Z2g9VHJ1ZSBkb2Vzbid0IGZvcmNlIGEgZmx1c2goKQorICAgICAgICAjIG9uIHRoZSB1bmRlcmx5aW5nIGJpbmFyeSBidWZmZXJlZCBvYmplY3QuCisgICAgICAgIGZsdXNoX2NhbGxlZCwgd3JpdGVfY2FsbGVkID0gW10sIFtdCisgICAgICAgIGNsYXNzIEJ1ZmZlcmVkV3JpdGVyKHNlbGYuQnVmZmVyZWRXcml0ZXIpOgorICAgICAgICAgICAgZGVmIGZsdXNoKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICAgICAgICAgZmx1c2hfY2FsbGVkLmFwcGVuZChUcnVlKQorICAgICAgICAgICAgICAgIHJldHVybiBzdXBlcigpLmZsdXNoKCphcmdzLCAqKmt3YXJncykKKyAgICAgICAgICAgIGRlZiB3cml0ZShzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAgICAgICAgIHdyaXRlX2NhbGxlZC5hcHBlbmQoVHJ1ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gc3VwZXIoKS53cml0ZSgqYXJncywgKiprd2FyZ3MpCisKKyAgICAgICAgcmF3aW8gPSBzZWxmLkJ5dGVzSU8oKQorICAgICAgICBkYXRhID0gYiJhIgorICAgICAgICBidWZpbyA9IEJ1ZmZlcmVkV3JpdGVyKHJhd2lvLCBsZW4oZGF0YSkqMikKKyAgICAgICAgdGV4dGlvID0gc2VsZi5UZXh0SU9XcmFwcGVyKGJ1ZmlvLCBlbmNvZGluZz0nYXNjaWknLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVfdGhyb3VnaD1UcnVlKQorICAgICAgICAjIHdyaXRlIHRvIHRoZSBidWZmZXJlZCBpbyBidXQgZG9uJ3Qgb3ZlcmZsb3cgdGhlIGJ1ZmZlcgorICAgICAgICB0ZXh0ID0gZGF0YS5kZWNvZGUoJ2FzY2lpJykKKyAgICAgICAgdGV4dGlvLndyaXRlKHRleHQpCisKKyAgICAgICAgIyBidWZmZXIuZmx1c2ggaXMgbm90IGNhbGxlZCB3aXRoIHdyaXRlX3Rocm91Z2g9VHJ1ZQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZsdXNoX2NhbGxlZCkKKyAgICAgICAgIyBidWZmZXIud3JpdGUgKmlzKiBjYWxsZWQgd2l0aCB3cml0ZV90aHJvdWdoPVRydWUKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdyaXRlX2NhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYXdpby5nZXR2YWx1ZSgpLCBiIiIpICMgbm8gZmx1c2gKKworICAgICAgICB3cml0ZV9jYWxsZWQgPSBbXSAjIHJlc2V0CisgICAgICAgIHRleHRpby53cml0ZSh0ZXh0ICogMTApICMgdG90YWwgY29udGVudCBpcyBsYXJnZXIgdGhhbiBidWZpbyBidWZmZXIKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdyaXRlX2NhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYXdpby5nZXR2YWx1ZSgpLCBkYXRhICogMTEpICMgYWxsIGZsdXNoZWQKKwogICAgIGRlZiB0ZXN0X3JlYWRfbm9uYnl0ZXMoc2VsZik6CiAgICAgICAgICMgSXNzdWUgIzE3MTA2CiAgICAgICAgICMgQ3Jhc2ggd2hlbiB1bmRlcmx5aW5nIHJlYWQoKSByZXR1cm5zIG5vbi1ieXRlcwpAQCAtMjYyNCwxMSArMjg2MSwxMSBAQAogICAgICAgICAjIElzc3VlICMxNzEwNgogICAgICAgICAjIEJ5cGFzcyB0aGUgZWFybHkgZW5jb2RpbmcgY2hlY2sgYWRkZWQgaW4gaXNzdWUgMjA0MDQKICAgICAgICAgZGVmIF9tYWtlX2lsbGVnYWxfd3JhcHBlcigpOgotICAgICAgICAgICAgcXVvcHJpID0gY29kZWNzLmxvb2t1cCgicXVvcHJpX2NvZGVjIikKKyAgICAgICAgICAgIHF1b3ByaSA9IGNvZGVjcy5sb29rdXAoInF1b3ByaSIpCiAgICAgICAgICAgICBxdW9wcmkuX2lzX3RleHRfZW5jb2RpbmcgPSBUcnVlCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgdCA9IHNlbGYuVGV4dElPV3JhcHBlcihzZWxmLkJ5dGVzSU8oYidhYWFhYWEnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld2xpbmU9J1xuJywgZW5jb2Rpbmc9InF1b3ByaV9jb2RlYyIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdsaW5lPSdcbicsIGVuY29kaW5nPSJxdW9wcmkiKQogICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICBxdW9wcmkuX2lzX3RleHRfZW5jb2RpbmcgPSBGYWxzZQogICAgICAgICAgICAgcmV0dXJuIHQKQEAgLTI2NDAsOCArMjg3Nyw2MSBAQAogICAgICAgICB0ID0gX21ha2VfaWxsZWdhbF93cmFwcGVyKCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0LnJlYWQpCiAKKyAgICBkZWYgX2NoZWNrX2NyZWF0ZV9hdF9zaHV0ZG93bihzZWxmLCAqKmt3YXJncyk6CisgICAgICAgICMgSXNzdWUgIzIwMDM3OiBjcmVhdGluZyBhIFRleHRJT1dyYXBwZXIgYXQgc2h1dGRvd24KKyAgICAgICAgIyBzaG91bGRuJ3QgY3Jhc2ggdGhlIGludGVycHJldGVyLgorICAgICAgICBpb21vZCA9IHNlbGYuaW8uX19uYW1lX18KKyAgICAgICAgY29kZSA9ICIiImlmIDE6CisgICAgICAgICAgICBpbXBvcnQgY29kZWNzCisgICAgICAgICAgICBpbXBvcnQge2lvbW9kfSBhcyBpbworCisgICAgICAgICAgICAjIEF2b2lkIGxvb2tpbmcgdXAgY29kZWNzIGF0IHNodXRkb3duCisgICAgICAgICAgICBjb2RlY3MubG9va3VwKCd1dGYtOCcpCisKKyAgICAgICAgICAgIGNsYXNzIEM6CisgICAgICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmJ1ZiA9IGlvLkJ5dGVzSU8oKQorICAgICAgICAgICAgICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICBpby5UZXh0SU9XcmFwcGVyKHNlbGYuYnVmLCAqKntrd2FyZ3N9KQorICAgICAgICAgICAgICAgICAgICBwcmludCgib2siKQorICAgICAgICAgICAgYyA9IEMoKQorICAgICAgICAgICAgIiIiLmZvcm1hdChpb21vZD1pb21vZCwga3dhcmdzPWt3YXJncykKKyAgICAgICAgcmV0dXJuIGFzc2VydF9weXRob25fb2soIi1jIiwgY29kZSkKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9hdF9zaHV0ZG93bl93aXRob3V0X2VuY29kaW5nKHNlbGYpOgorICAgICAgICByYywgb3V0LCBlcnIgPSBzZWxmLl9jaGVja19jcmVhdGVfYXRfc2h1dGRvd24oKQorICAgICAgICBpZiBlcnI6CisgICAgICAgICAgICAjIENhbiBlcnJvciBvdXQgd2l0aCBhIFJ1bnRpbWVFcnJvciBpZiB0aGUgbW9kdWxlIHN0YXRlCisgICAgICAgICAgICAjIGlzbid0IGZvdW5kLgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihzZWxmLnNodXRkb3duX2Vycm9yLCBlcnIuZGVjb2RlKCkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJvayIsIG91dC5kZWNvZGUoKS5zdHJpcCgpKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX2F0X3NodXRkb3duX3dpdGhfZW5jb2Rpbmcoc2VsZik6CisgICAgICAgIHJjLCBvdXQsIGVyciA9IHNlbGYuX2NoZWNrX2NyZWF0ZV9hdF9zaHV0ZG93bihlbmNvZGluZz0ndXRmLTgnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzPSdzdHJpY3QnKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGVycikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgib2siLCBvdXQuZGVjb2RlKCkuc3RyaXAoKSkKKworICAgIGRlZiB0ZXN0X2lzc3VlMjI4NDkoc2VsZik6CisgICAgICAgIGNsYXNzIEYob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiByZWFkYWJsZShzZWxmKTogcmV0dXJuIFRydWUKKyAgICAgICAgICAgIGRlZiB3cml0YWJsZShzZWxmKTogcmV0dXJuIFRydWUKKyAgICAgICAgICAgIGRlZiBzZWVrYWJsZShzZWxmKTogcmV0dXJuIFRydWUKKworICAgICAgICBmb3IgaSBpbiByYW5nZSgxMCk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5UZXh0SU9XcmFwcGVyKEYoKSwgZW5jb2Rpbmc9J3V0Zi04JykKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIEYudGVsbCA9IGxhbWJkYSB4OiAwCisgICAgICAgIHQgPSBzZWxmLlRleHRJT1dyYXBwZXIoRigpLCBlbmNvZGluZz0ndXRmLTgnKQorCiAKIGNsYXNzIENUZXh0SU9XcmFwcGVyVGVzdChUZXh0SU9XcmFwcGVyVGVzdCk6CisgICAgaW8gPSBpbworICAgIHNodXRkb3duX2Vycm9yID0gIlJ1bnRpbWVFcnJvcjogY291bGQgbm90IGZpbmQgaW8gbW9kdWxlIHN0YXRlIgogCiAgICAgZGVmIHRlc3RfaW5pdGlhbGl6YXRpb24oc2VsZik6CiAgICAgICAgIHIgPSBzZWxmLkJ5dGVzSU8oYiJceGMzXHhhOVxuXG4iKQpAQCAtMjY1MiwxOSArMjk0MiwyMyBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0Ll9faW5pdF9fLCBiLCBuZXdsaW5lPSd4eXp6eScpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHQucmVhZCkKIAorICAgICAgICB0ID0gc2VsZi5UZXh0SU9XcmFwcGVyLl9fbmV3X18oc2VsZi5UZXh0SU9XcmFwcGVyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFeGNlcHRpb24sIHJlcHIsIHQpCisKICAgICBkZWYgdGVzdF9nYXJiYWdlX2NvbGxlY3Rpb24oc2VsZik6CiAgICAgICAgICMgQyBUZXh0SU9XcmFwcGVyIG9iamVjdHMgYXJlIGNvbGxlY3RlZCwgYW5kIGNvbGxlY3RpbmcgdGhlbSBmbHVzaGVzCiAgICAgICAgICMgYWxsIGRhdGEgdG8gZGlzay4KICAgICAgICAgIyBUaGUgUHl0aG9uIHZlcnNpb24gaGFzIF9fZGVsX18sIHNvIGl0IGVuZHMgaW4gZ2MuZ2FyYmFnZSBpbnN0ZWFkLgotICAgICAgICByYXdpbyA9IGlvLkZpbGVJTyhzdXBwb3J0LlRFU1RGTiwgIndiIikKLSAgICAgICAgYiA9IHNlbGYuQnVmZmVyZWRXcml0ZXIocmF3aW8pCi0gICAgICAgIHQgPSBzZWxmLlRleHRJT1dyYXBwZXIoYiwgZW5jb2Rpbmc9ImFzY2lpIikKLSAgICAgICAgdC53cml0ZSgiNDU2ZGVmIikKLSAgICAgICAgdC54ID0gdAotICAgICAgICB3ciA9IHdlYWtyZWYucmVmKHQpCi0gICAgICAgIGRlbCB0Ci0gICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3cigpIGlzIE5vbmUsIHdyKQorICAgICAgICB3aXRoIHN1cHBvcnQuY2hlY2tfd2FybmluZ3MoKCcnLCBSZXNvdXJjZVdhcm5pbmcpKToKKyAgICAgICAgICAgIHJhd2lvID0gaW8uRmlsZUlPKHN1cHBvcnQuVEVTVEZOLCAid2IiKQorICAgICAgICAgICAgYiA9IHNlbGYuQnVmZmVyZWRXcml0ZXIocmF3aW8pCisgICAgICAgICAgICB0ID0gc2VsZi5UZXh0SU9XcmFwcGVyKGIsIGVuY29kaW5nPSJhc2NpaSIpCisgICAgICAgICAgICB0LndyaXRlKCI0NTZkZWYiKQorICAgICAgICAgICAgdC54ID0gdAorICAgICAgICAgICAgd3IgPSB3ZWFrcmVmLnJlZih0KQorICAgICAgICAgICAgZGVsIHQKKyAgICAgICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHdyKCksIHdyKQogICAgICAgICB3aXRoIHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgInJiIikgYXMgZjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIGIiNDU2ZGVmIikKIApAQCAtMjY4NCw3ICsyOTc4LDkgQEAKIAogCiBjbGFzcyBQeVRleHRJT1dyYXBwZXJUZXN0KFRleHRJT1dyYXBwZXJUZXN0KToKLSAgICBwYXNzCisgICAgaW8gPSBweWlvCisgICAgI3NodXRkb3duX2Vycm9yID0gIkxvb2t1cEVycm9yOiB1bmtub3duIGVuY29kaW5nOiBhc2NpaSIKKyAgICBzaHV0ZG93bl9lcnJvciA9ICJUeXBlRXJyb3I6ICdOb25lVHlwZScgb2JqZWN0IGlzIG5vdCBpdGVyYWJsZSIKIAogCiBjbGFzcyBJbmNyZW1lbnRhbE5ld2xpbmVEZWNvZGVyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC0yODEwLDcgKzMxMDYsNyBAQAogICAgIGRlZiB0ZXN0X19fYWxsX18oc2VsZik6CiAgICAgICAgIGZvciBuYW1lIGluIHNlbGYuaW8uX19hbGxfXzoKICAgICAgICAgICAgIG9iaiA9IGdldGF0dHIoc2VsZi5pbywgbmFtZSwgTm9uZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvYmogaXMgbm90IE5vbmUsIG5hbWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShvYmosIG5hbWUpCiAgICAgICAgICAgICBpZiBuYW1lID09ICJvcGVuIjoKICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgZWxpZiAiZXJyb3IiIGluIG5hbWUubG93ZXIoKSBvciBuYW1lID09ICJVbnN1cHBvcnRlZE9wZXJhdGlvbiI6CkBAIC0yODIzLDcgKzMxMTksOCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYubW9kZSwgIndiIikKICAgICAgICAgZi5jbG9zZSgpCiAKLSAgICAgICAgZiA9IHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgIlUiKQorICAgICAgICB3aXRoIHN1cHBvcnQuY2hlY2tfd2FybmluZ3MoKCcnLCBEZXByZWNhdGlvbldhcm5pbmcpKToKKyAgICAgICAgICAgIGYgPSBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJVIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLm5hbWUsICAgICAgICAgICAgc3VwcG9ydC5URVNURk4pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5idWZmZXIubmFtZSwgICAgIHN1cHBvcnQuVEVTVEZOKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuYnVmZmVyLnJhdy5uYW1lLCBzdXBwb3J0LlRFU1RGTikKQEAgLTI4OTksNyArMzE5Niw3IEBACiAgICAgICAgIHdyID0gd2Vha3JlZi5yZWYoYykKICAgICAgICAgZGVsIGMsIGIKICAgICAgICAgc3VwcG9ydC5nY19jb2xsZWN0KCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdyKCkgaXMgTm9uZSwgd3IpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHdyKCksIHdyKQogCiAgICAgZGVmIHRlc3RfYWJjcyhzZWxmKToKICAgICAgICAgIyBUZXN0IHRoZSB2aXNpYmxlIGJhc2UgY2xhc3NlcyBhcmUgQUJDcy4KQEAgLTI5NTMsNyArMzI1MCw3IEBACiAgICAgICAgICAgICBmb3IgZmQgaW4gZmRzOgogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgb3MuY2xvc2UoZmQpCi0gICAgICAgICAgICAgICAgZXhjZXB0IEVudmlyb25tZW50RXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVCQURGOgogICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGNsZWFudXBfZmRzKQpAQCAtMzA1MSw3ICszMzQ4LDcgQEAKICAgICAgICAgICAgIHJlY2VpdmVkICs9IGl0ZXIocmYucmVhZCwgTm9uZSkKIAogICAgICAgICBzZW50LCByZWNlaXZlZCA9IGInJy5qb2luKHNlbnQpLCBiJycuam9pbihyZWNlaXZlZCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbnQgPT0gcmVjZWl2ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VudCwgcmVjZWl2ZWQpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3Zi5jbG9zZWQpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZi5jbG9zZWQpCiAKQEAgLTMwNzUsNyArMzM3Miw2IEBACiAKIGNsYXNzIENNaXNjSU9UZXN0KE1pc2NJT1Rlc3QpOgogICAgIGlvID0gaW8KLSAgICBzaHV0ZG93bl9lcnJvciA9ICJSdW50aW1lRXJyb3I6IGNvdWxkIG5vdCBmaW5kIGlvIG1vZHVsZSBzdGF0ZSIKIAogICAgIGRlZiB0ZXN0X3JlYWRpbnRvX2J1ZmZlcl9vdmVyZmxvdyhzZWxmKToKICAgICAgICAgIyBJc3N1ZSAjMTgwMjUKQEAgLTMwODYsOSArMzM4Miw1MSBAQAogICAgICAgICBiID0gYnl0ZWFycmF5KDIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJ1ZmlvLnJlYWRpbnRvLCBiKQogCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkaW5nLCAnVGhyZWFkaW5nIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKKyAgICBkZWYgY2hlY2tfZGFlbW9uX3RocmVhZHNfc2h1dGRvd25fZGVhZGxvY2soc2VsZiwgc3RyZWFtX25hbWUpOgorICAgICAgICAjIElzc3VlICMyMzMwOTogZGVhZGxvY2tzIGF0IHNodXRkb3duIHNob3VsZCBiZSBhdm9pZGVkIHdoZW4gYQorICAgICAgICAjIGRhZW1vbiB0aHJlYWQgYW5kIHRoZSBtYWluIHRocmVhZCBib3RoIHdyaXRlIHRvIGEgZmlsZS4KKyAgICAgICAgY29kZSA9ICIiImlmIDE6CisgICAgICAgICAgICBpbXBvcnQgc3lzCisgICAgICAgICAgICBpbXBvcnQgdGltZQorICAgICAgICAgICAgaW1wb3J0IHRocmVhZGluZworCisgICAgICAgICAgICBmaWxlID0gc3lzLntzdHJlYW1fbmFtZX0KKworICAgICAgICAgICAgZGVmIHJ1bigpOgorICAgICAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgICAgIGZpbGUud3JpdGUoJy4nKQorICAgICAgICAgICAgICAgICAgICBmaWxlLmZsdXNoKCkKKworICAgICAgICAgICAgdGhyZWFkID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9cnVuKQorICAgICAgICAgICAgdGhyZWFkLmRhZW1vbiA9IFRydWUKKyAgICAgICAgICAgIHRocmVhZC5zdGFydCgpCisKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMC41KQorICAgICAgICAgICAgZmlsZS53cml0ZSgnIScpCisgICAgICAgICAgICBmaWxlLmZsdXNoKCkKKyAgICAgICAgICAgICIiIi5mb3JtYXRfbWFwKGxvY2FscygpKQorICAgICAgICByZXMsIF8gPSBydW5fcHl0aG9uX3VudGlsX2VuZCgiLWMiLCBjb2RlKQorICAgICAgICBlcnIgPSByZXMuZXJyLmRlY29kZSgpCisgICAgICAgIGlmIHJlcy5yYyAhPSAwOgorICAgICAgICAgICAgIyBGYWlsdXJlOiBzaG91bGQgYmUgYSBmYXRhbCBlcnJvcgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigiRmF0YWwgUHl0aG9uIGVycm9yOiBjb3VsZCBub3QgYWNxdWlyZSBsb2NrICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgImZvciA8X2lvLkJ1ZmZlcmVkV3JpdGVyIG5hbWU9Jzx7c3RyZWFtX25hbWV9Pic+ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgImF0IGludGVycHJldGVyIHNodXRkb3duLCBwb3NzaWJseSBkdWUgdG8gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiZGFlbW9uIHRocmVhZHMiLmZvcm1hdF9tYXAobG9jYWxzKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGVyci5zdHJpcCgnLiEnKSkKKworICAgIGRlZiB0ZXN0X2RhZW1vbl90aHJlYWRzX3NodXRkb3duX3N0ZG91dF9kZWFkbG9jayhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19kYWVtb25fdGhyZWFkc19zaHV0ZG93bl9kZWFkbG9jaygnc3Rkb3V0JykKKworICAgIGRlZiB0ZXN0X2RhZW1vbl90aHJlYWRzX3NodXRkb3duX3N0ZGVycl9kZWFkbG9jayhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19kYWVtb25fdGhyZWFkc19zaHV0ZG93bl9kZWFkbG9jaygnc3RkZXJyJykKKworCiBjbGFzcyBQeU1pc2NJT1Rlc3QoTWlzY0lPVGVzdCk6CiAgICAgaW8gPSBweWlvCi0gICAgc2h1dGRvd25fZXJyb3IgPSAiTG9va3VwRXJyb3I6IHVua25vd24gZW5jb2Rpbmc6IGFzY2lpIgogCiAKIEB1bml0dGVzdC5za2lwSWYob3MubmFtZSA9PSAnbnQnLCAnUE9TSVggc2lnbmFscyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCkBAIC0zMTIxLDE2ICszNDU5LDE5IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHdpbyA9IHNlbGYuaW8ub3Blbih3LCAqKmZkb3Blbl9rd2FyZ3MpCiAgICAgICAgICAgICB0LnN0YXJ0KCkKLSAgICAgICAgICAgIHNpZ25hbC5hbGFybSgxKQogICAgICAgICAgICAgIyBGaWxsIHRoZSBwaXBlIGVub3VnaCB0aGF0IHRoZSB3cml0ZSB3aWxsIGJlIGJsb2NraW5nLgogICAgICAgICAgICAgIyBJdCB3aWxsIGJlIGludGVycnVwdGVkIGJ5IHRoZSB0aW1lciBhcm1lZCBhYm92ZS4gIFNpbmNlIHRoZQogICAgICAgICAgICAgIyBvdGhlciB0aHJlYWQgaGFzIHJlYWQgb25lIGJ5dGUsIHRoZSBsb3ctbGV2ZWwgd3JpdGUgd2lsbAogICAgICAgICAgICAgIyByZXR1cm4gd2l0aCBhIHN1Y2Nlc3NmdWwgKHBhcnRpYWwpIHJlc3VsdCByYXRoZXIgdGhhbiBhbiBFSU5UUi4KICAgICAgICAgICAgICMgVGhlIGJ1ZmZlcmVkIElPIGxheWVyIG11c3QgY2hlY2sgZm9yIHBlbmRpbmcgc2lnbmFsCiAgICAgICAgICAgICAjIGhhbmRsZXJzLCB3aGljaCBpbiB0aGlzIGNhc2Ugd2lsbCBpbnZva2UgYWxhcm1faW50ZXJydXB0KCkuCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgIHdpby53cml0ZSwgaXRlbSAqIChzdXBwb3J0LlBJUEVfTUFYX1NJWkUgLy8gbGVuKGl0ZW0pICsgMSkpCi0gICAgICAgICAgICB0LmpvaW4oKQorICAgICAgICAgICAgc2lnbmFsLmFsYXJtKDEpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvcik6CisgICAgICAgICAgICAgICAgICAgIHdpby53cml0ZShpdGVtICogKHN1cHBvcnQuUElQRV9NQVhfU0laRSAvLyBsZW4oaXRlbSkgKyAxKSkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgc2lnbmFsLmFsYXJtKDApCisgICAgICAgICAgICAgICAgdC5qb2luKCkKICAgICAgICAgICAgICMgV2UgZ290IG9uZSBieXRlLCBnZXQgYW5vdGhlciBvbmUgYW5kIGNoZWNrIHRoYXQgaXQgaXNuJ3QgYQogICAgICAgICAgICAgIyByZXBlYXQgb2YgdGhlIGZpcnN0IG9uZS4KICAgICAgICAgICAgIHJlYWRfcmVzdWx0cy5hcHBlbmQob3MucmVhZChyLCAxKSkKQEAgLTMxNDMsNyArMzQ4NCw3IEBACiAgICAgICAgICAgICAjIGJ1ZmZlciwgYW5kIGJsb2NrIGFnYWluLgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHdpby5jbG9zZSgpCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVCQURGOgogICAgICAgICAgICAgICAgICAgICByYWlzZQogCkBAIC0zMTUzLDYgKzM0OTQsOCBAQAogICAgIGRlZiB0ZXN0X2ludGVycnVwdGVkX3dyaXRlX2J1ZmZlcmVkKHNlbGYpOgogICAgICAgICBzZWxmLmNoZWNrX2ludGVycnVwdGVkX3dyaXRlKGIieHkiLCBiInh5IiwgbW9kZT0id2IiKQogCisgICAgIyBJc3N1ZSAjMjIzMzE6IFRoZSB0ZXN0IGhhbmdzIG9uIEZyZWVCU0QgNy4yCisgICAgQHN1cHBvcnQucmVxdWlyZXNfZnJlZWJzZF92ZXJzaW9uKDgpCiAgICAgZGVmIHRlc3RfaW50ZXJydXB0ZWRfd3JpdGVfdGV4dChzZWxmKToKICAgICAgICAgc2VsZi5jaGVja19pbnRlcnJ1cHRlZF93cml0ZSgieHkiLCBiInh5IiwgbW9kZT0idyIsIGVuY29kaW5nPSJhc2NpaSIpCiAKQEAgLTMyMzYsMTEgKzM1NzksMTYgQEAKICAgICAgICAgIyByZWNlaXZlZCAoZm9yY2luZyBhIGZpcnN0IEVJTlRSIGluIHdyaXRlKCkpLgogICAgICAgICByZWFkX3Jlc3VsdHMgPSBbXQogICAgICAgICB3cml0ZV9maW5pc2hlZCA9IEZhbHNlCisgICAgICAgIGVycm9yID0gTm9uZQogICAgICAgICBkZWYgX3JlYWQoKToKLSAgICAgICAgICAgIHdoaWxlIG5vdCB3cml0ZV9maW5pc2hlZDoKLSAgICAgICAgICAgICAgICB3aGlsZSByIGluIHNlbGVjdC5zZWxlY3QoW3JdLCBbXSwgW10sIDEuMClbMF06Ci0gICAgICAgICAgICAgICAgICAgIHMgPSBvcy5yZWFkKHIsIDEwMjQpCi0gICAgICAgICAgICAgICAgICAgIHJlYWRfcmVzdWx0cy5hcHBlbmQocykKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB3aGlsZSBub3Qgd3JpdGVfZmluaXNoZWQ6CisgICAgICAgICAgICAgICAgICAgIHdoaWxlIHIgaW4gc2VsZWN0LnNlbGVjdChbcl0sIFtdLCBbXSwgMS4wKVswXToKKyAgICAgICAgICAgICAgICAgICAgICAgIHMgPSBvcy5yZWFkKHIsIDEwMjQpCisgICAgICAgICAgICAgICAgICAgICAgICByZWFkX3Jlc3VsdHMuYXBwZW5kKHMpCisgICAgICAgICAgICBleGNlcHQgQmFzZUV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICAgICAgbm9ubG9jYWwgZXJyb3IKKyAgICAgICAgICAgICAgICBlcnJvciA9IGV4YwogICAgICAgICB0ID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9X3JlYWQpCiAgICAgICAgIHQuZGFlbW9uID0gVHJ1ZQogICAgICAgICBkZWYgYWxhcm0xKHNpZywgZnJhbWUpOgpAQCAtMzI2MSw2ICszNjA5LDggQEAKICAgICAgICAgICAgIHdpby5mbHVzaCgpCiAgICAgICAgICAgICB3cml0ZV9maW5pc2hlZCA9IFRydWUKICAgICAgICAgICAgIHQuam9pbigpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGVycm9yKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOLCBzdW0obGVuKHgpIGZvciB4IGluIHJlYWRfcmVzdWx0cykpCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICB3cml0ZV9maW5pc2hlZCA9IFRydWUKQEAgLTMyNzEsNyArMzYyMSw3IEBACiAgICAgICAgICAgICAjIGJ1ZmZlciwgYW5kIGNvdWxkIGJsb2NrIChpbiBjYXNlIG9mIGZhaWx1cmUpLgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHdpby5jbG9zZSgpCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVCQURGOgogICAgICAgICAgICAgICAgICAgICByYWlzZQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2lvY3RsLnB5IGIvTGliL3Rlc3QvdGVzdF9pb2N0bC5weQppbmRleCA1MzFjOWFmLi5lZmU5ZjUxIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2lvY3RsLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW9jdGwucHkKQEAgLTgsNyArOCw3IEBACiAKIHRyeToKICAgICB0dHkgPSBvcGVuKCIvZGV2L3R0eSIsICJyYiIpCi1leGNlcHQgSU9FcnJvcjoKK2V4Y2VwdCBPU0Vycm9yOgogICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJVbmFibGUgdG8gb3BlbiAvZGV2L3R0eSIpCiBlbHNlOgogICAgICMgU2tpcCBpZiBhbm90aGVyIHByb2Nlc3MgaXMgaW4gZm9yZWdyb3VuZApAQCAtODYsOCArODYsNiBAQAogICAgICAgICAgICAgb3MuY2xvc2UobWZkKQogICAgICAgICAgICAgb3MuY2xvc2Uoc2ZkKQogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgcnVuX3VuaXR0ZXN0KElvY3RsVGVzdHMpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaXBhZGRyZXNzLnB5IGIvTGliL3Rlc3QvdGVzdF9pcGFkZHJlc3MucHkKaW5kZXggNWJmY2Y0MS4uOTVlM2YwNCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pcGFkZHJlc3MucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pcGFkZHJlc3MucHkKQEAgLTcsOSArNywxMSBAQAogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgcmUKIGltcG9ydCBjb250ZXh0bGliCitpbXBvcnQgZnVuY3Rvb2xzCiBpbXBvcnQgb3BlcmF0b3IKIGltcG9ydCBpcGFkZHJlc3MKIAorCiBjbGFzcyBCYXNlVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICMgT25lIGJpZyBjaGFuZ2UgaW4gaXBhZGRyZXNzIG92ZXIgdGhlIG9yaWdpbmFsIGlwYWRkciBtb2R1bGUgaXMKICAgICAjIGVycm9yIHJlcG9ydGluZyB0aGF0IHRyaWVzIHRvIGFzc3VtZSB1c2VycyAqZG9uJ3Qga25vdyB0aGUgcnVsZXMqCkBAIC01MiwxNyArNTQsMTggQEAKICAgICBkZWYgYXNzZXJ0QWRkcmVzc0Vycm9yKHNlbGYsIGRldGFpbHMsICphcmdzKToKICAgICAgICAgIiIiRW5zdXJlIGEgY2xlYW4gQWRkcmVzc1ZhbHVlRXJyb3IiIiIKICAgICAgICAgcmV0dXJuIHNlbGYuYXNzZXJ0Q2xlYW5FcnJvcihpcGFkZHJlc3MuQWRkcmVzc1ZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWxzLCAqYXJncykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWxzLCAqYXJncykKIAogICAgIGRlZiBhc3NlcnROZXRtYXNrRXJyb3Ioc2VsZiwgZGV0YWlscywgKmFyZ3MpOgogICAgICAgICAiIiJFbnN1cmUgYSBjbGVhbiBOZXRtYXNrVmFsdWVFcnJvciIiIgogICAgICAgICByZXR1cm4gc2VsZi5hc3NlcnRDbGVhbkVycm9yKGlwYWRkcmVzcy5OZXRtYXNrVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlscywgKmFyZ3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlscywgKmFyZ3MpCiAKICAgICBkZWYgYXNzZXJ0SW5zdGFuY2VzRXF1YWwoc2VsZiwgbGhzLCByaHMpOgogICAgICAgICAiIiJDaGVjayBjb25zdHJ1Y3RvciBhcmd1bWVudHMgcHJvZHVjZSBlcXVpdmFsZW50IGluc3RhbmNlcyIiIgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZmFjdG9yeShsaHMpLCBzZWxmLmZhY3RvcnkocmhzKSkKIAorCiBjbGFzcyBDb21tb25UZXN0TWl4aW46CiAKICAgICBkZWYgdGVzdF9lbXB0eV9hZGRyZXNzKHNlbGYpOgpAQCAtMTE1LDYgKzExOCw3IEBACiAgICAgICAgIGFzc2VydEJhZExlbmd0aCgzKQogICAgICAgICBhc3NlcnRCYWRMZW5ndGgoNSkKIAorCiBjbGFzcyBDb21tb25UZXN0TWl4aW5fdjYoQ29tbW9uVGVzdE1peGluKToKIAogICAgIGRlZiB0ZXN0X2xlYWRpbmdfemVyb3Moc2VsZik6CkBAIC0xOTUsNyArMTk5LDcgQEAKICAgICBkZWYgdGVzdF9lbXB0eV9vY3RldChzZWxmKToKICAgICAgICAgZGVmIGFzc2VydEJhZE9jdGV0KGFkZHIpOgogICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydEFkZHJlc3NFcnJvcigiRW1wdHkgb2N0ZXQgbm90IHBlcm1pdHRlZCBpbiAlciIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcik6CiAgICAgICAgICAgICAgICAgaXBhZGRyZXNzLklQdjRBZGRyZXNzKGFkZHIpCiAKICAgICAgICAgYXNzZXJ0QmFkT2N0ZXQoIjQyLi40Mi40MiIpCkBAIC00NDMsNiArNDQ3LDcgQEAKIGNsYXNzIEludGVyZmFjZVRlc3RDYXNlX3Y0KEJhc2VUZXN0Q2FzZSwgTmV0bWFza1Rlc3RNaXhpbl92NCk6CiAgICAgZmFjdG9yeSA9IGlwYWRkcmVzcy5JUHY0SW50ZXJmYWNlCiAKKwogY2xhc3MgTmV0d29ya1Rlc3RDYXNlX3Y0KEJhc2VUZXN0Q2FzZSwgTmV0bWFza1Rlc3RNaXhpbl92NCk6CiAgICAgZmFjdG9yeSA9IGlwYWRkcmVzcy5JUHY0TmV0d29yawogCkBAIC00OTYsOSArNTAxLDExIEBACiAgICAgICAgIGFzc2VydEJhZE5ldG1hc2soIjo6MSIsICJwdWRkaW5nIikKICAgICAgICAgYXNzZXJ0QmFkTmV0bWFzaygiOjoiLCAiOjoiKQogCisKIGNsYXNzIEludGVyZmFjZVRlc3RDYXNlX3Y2KEJhc2VUZXN0Q2FzZSwgTmV0bWFza1Rlc3RNaXhpbl92Nik6CiAgICAgZmFjdG9yeSA9IGlwYWRkcmVzcy5JUHY2SW50ZXJmYWNlCiAKKwogY2xhc3MgTmV0d29ya1Rlc3RDYXNlX3Y2KEJhc2VUZXN0Q2FzZSwgTmV0bWFza1Rlc3RNaXhpbl92Nik6CiAgICAgZmFjdG9yeSA9IGlwYWRkcmVzcy5JUHY2TmV0d29yawogCkBAIC01MjIsNiArNTI5LDIwIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RmFjdG9yeUVycm9yKGlwYWRkcmVzcy5pcF9uZXR3b3JrLCAibmV0d29yayIpCiAKIAorQGZ1bmN0b29scy50b3RhbF9vcmRlcmluZworY2xhc3MgTGFyZ2VzdE9iamVjdDoKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIGlzaW5zdGFuY2Uob3RoZXIsIExhcmdlc3RPYmplY3QpCisgICAgZGVmIF9fbHRfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiBGYWxzZQorCitAZnVuY3Rvb2xzLnRvdGFsX29yZGVyaW5nCitjbGFzcyBTbWFsbGVzdE9iamVjdDoKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIGlzaW5zdGFuY2Uob3RoZXIsIFNtYWxsZXN0T2JqZWN0KQorICAgIGRlZiBfX2d0X18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gRmFsc2UKKwogY2xhc3MgQ29tcGFyaXNvblRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIHY0YWRkciA9IGlwYWRkcmVzcy5JUHY0QWRkcmVzcygxKQpAQCAtNTc1LDYgKzU5NiwyOCBAQAogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBsaHMgPD0gcmhzKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBsaHMgPj0gcmhzKQogCisgICAgZGVmIHRlc3RfZm9yZWlnbl90eXBlX29yZGVyaW5nKHNlbGYpOgorICAgICAgICBvdGhlciA9IG9iamVjdCgpCisgICAgICAgIHNtYWxsZXN0ID0gU21hbGxlc3RPYmplY3QoKQorICAgICAgICBsYXJnZXN0ID0gTGFyZ2VzdE9iamVjdCgpCisgICAgICAgIGZvciBvYmogaW4gc2VsZi5vYmplY3RzOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgICAgIG9iaiA8IG90aGVyCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICAgICAgb2JqID4gb3RoZXIKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgICAgICBvYmogPD0gb3RoZXIKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgICAgICBvYmogPj0gb3RoZXIKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvYmogPCBsYXJnZXN0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvYmogPiBsYXJnZXN0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9iaiA8PSBsYXJnZXN0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvYmogPj0gbGFyZ2VzdCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob2JqIDwgc21hbGxlc3QpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUob2JqID4gc21hbGxlc3QpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9iaiA8PSBzbWFsbGVzdCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvYmogPj0gc21hbGxlc3QpCisKICAgICBkZWYgdGVzdF9taXhlZF90eXBlX2tleShzZWxmKToKICAgICAgICAgIyB3aXRoIGdldF9taXhlZF90eXBlX2tleSwgeW91IGNhbiBzb3J0IGFkZHJlc3NlcyBhbmQgbmV0d29yay4KICAgICAgICAgdjRfb3JkZXJlZCA9IFtzZWxmLnY0YWRkciwgc2VsZi52NG5ldCwgc2VsZi52NGludGZdCkBAIC01OTUsNyArNjM4LDcgQEAKICAgICAgICAgdjRhZGRyID0gaXBhZGRyZXNzLmlwX2FkZHJlc3MoJzEuMS4xLjEnKQogICAgICAgICB2NG5ldCA9IGlwYWRkcmVzcy5pcF9uZXR3b3JrKCcxLjEuMS4xJykKICAgICAgICAgdjZhZGRyID0gaXBhZGRyZXNzLmlwX2FkZHJlc3MoJzo6MScpCi0gICAgICAgIHY2bmV0ID0gaXBhZGRyZXNzLmlwX2FkZHJlc3MoJzo6MScpCisgICAgICAgIHY2bmV0ID0gaXBhZGRyZXNzLmlwX25ldHdvcmsoJzo6MScpCiAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB2NGFkZHIuX19sdF9fLCB2NmFkZHIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdjRhZGRyLl9fZ3RfXywgdjZhZGRyKQpAQCAtNjA4LDcgKzY1MSw2IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdjZuZXQuX19ndF9fLCB2NG5ldCkKIAogCi0KIGNsYXNzIElwYWRkclVuaXRUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiBzZXRVcChzZWxmKToKQEAgLTExMTgsNyArMTE2MCw3IEBACiAgICAgICAgICMgdGVzdCBhIC8yNCBpcyBzdW1tYXJpemVkIHByb3Blcmx5CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChzdW1tYXJpemUoaXAxLCBpcDIpKVswXSwKICAgICAgICAgICAgICAgICAgICAgICAgICBpcGFkZHJlc3MuaXBfbmV0d29yaygnMS4xLjEuMC8yNCcpKQotICAgICAgICAjIHRlc3QgYW4gIElQdjQgcmFuZ2UgdGhhdCBpc24ndCBvbiBhIG5ldHdvcmsgYnl0ZSBib3VuZGFyeQorICAgICAgICAjIHRlc3QgYW4gSVB2NCByYW5nZSB0aGF0IGlzbid0IG9uIGEgbmV0d29yayBieXRlIGJvdW5kYXJ5CiAgICAgICAgIGlwMiA9IGlwYWRkcmVzcy5pcF9hZGRyZXNzKCcxLjEuMS44JykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHN1bW1hcml6ZShpcDEsIGlwMikpLAogICAgICAgICAgICAgICAgICAgICAgICAgIFtpcGFkZHJlc3MuaXBfbmV0d29yaygnMS4xLjEuMC8yOScpLApAQCAtMTEzMSw3ICsxMTczLDcgQEAKIAogICAgICAgICBpcDEgPSBpcGFkZHJlc3MuaXBfYWRkcmVzcygnMTo6JykKICAgICAgICAgaXAyID0gaXBhZGRyZXNzLmlwX2FkZHJlc3MoJzE6ZmZmZjpmZmZmOmZmZmY6ZmZmZjpmZmZmOmZmZmY6ZmZmZicpCi0gICAgICAgICMgdGVzdCBhIElQdjYgaXMgc3VtYW1yaXplZCBwcm9wZXJseQorICAgICAgICAjIHRlc3QgYW4gSVB2NiBpcyBzdW1tYXJpemVkIHByb3Blcmx5CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChzdW1tYXJpemUoaXAxLCBpcDIpKVswXSwKICAgICAgICAgICAgICAgICAgICAgICAgICBpcGFkZHJlc3MuaXBfbmV0d29yaygnMTo6LzE2JykpCiAgICAgICAgICMgdGVzdCBhbiBJUHY2IHJhbmdlIHRoYXQgaXNuJ3Qgb24gYSBuZXR3b3JrIGJ5dGUgYm91bmRhcnkKQEAgLTEyNDMsMTAgKzEyODUsMTAgQEAKICAgICAgICAgdW5zb3J0ZWQgPSBbaXA0LCBpcDEsIGlwMywgaXAyXQogICAgICAgICB1bnNvcnRlZC5zb3J0KCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQsIHVuc29ydGVkKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGlwMS5fX2x0X18sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGlwYWRkcmVzcy5pcF9hZGRyZXNzKCcxMC4xMC4xMC4wJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaXAyLl9fbHRfXywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaXBhZGRyZXNzLmlwX2FkZHJlc3MoJzEwLjEwLjEwLjAnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhpcDEuX19sdF9fKGlwYWRkcmVzcy5pcF9hZGRyZXNzKCcxMC4xMC4xMC4wJykpLAorICAgICAgICAgICAgICAgICAgICAgIE5vdEltcGxlbWVudGVkKQorICAgICAgICBzZWxmLmFzc2VydElzKGlwMi5fX2x0X18oaXBhZGRyZXNzLmlwX2FkZHJlc3MoJzEwLjEwLjEwLjAnKSksCisgICAgICAgICAgICAgICAgICAgICAgTm90SW1wbGVtZW50ZWQpCiAKICAgICAgICAgIyA8PSwgPj0KICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlwYWRkcmVzcy5pcF9uZXR3b3JrKCcxLjEuMS4xJykgPD0KQEAgLTEzNTgsNiArMTQwMCwxNCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRydWUsIGlwYWRkcmVzcy5pcF9uZXR3b3JrKAogICAgICAgICAgICAgICAgICcxMjcuNDIuMC4wLzE2JykuaXNfbG9vcGJhY2spCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRmFsc2UsIGlwYWRkcmVzcy5pcF9uZXR3b3JrKCcxMjguMC4wLjAnKS5pc19sb29wYmFjaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpcGFkZHJlc3MuaXBfbmV0d29yaygnMTAwLjY0LjAuMC8xMCcpLmlzX3ByaXZhdGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRmFsc2UsIGlwYWRkcmVzcy5pcF9uZXR3b3JrKCcxMDAuNjQuMC4wLzEwJykuaXNfZ2xvYmFsKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpcGFkZHJlc3MuaXBfbmV0d29yaygnMTkyLjAuMi4xMjgvMjUnKS5pc19wcml2YXRlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgaXBhZGRyZXNzLmlwX25ldHdvcmsoJzE5Mi4wLjMuMC8yNCcpLmlzX2dsb2JhbCkKIAogICAgICAgICAjIHRlc3QgYWRkcmVzc2VzCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZSwgaXBhZGRyZXNzLmlwX2FkZHJlc3MoJzAuMC4wLjAnKS5pc191bnNwZWNpZmllZCkKQEAgLTE0MjMsNiArMTQ3MywxMCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEZhbHNlLCBpcGFkZHJlc3MuaXBfbmV0d29yaygnOjoxJykuaXNfdW5zcGVjaWZpZWQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRmFsc2UsIGlwYWRkcmVzcy5pcF9uZXR3b3JrKCc6Oi8xMjcnKS5pc191bnNwZWNpZmllZCkKIAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgaXBhZGRyZXNzLmlwX25ldHdvcmsoJzIwMDE6OjEvMTI4JykuaXNfcHJpdmF0ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgIGlwYWRkcmVzcy5pcF9uZXR3b3JrKCcyMDA6OjEvMTI4JykuaXNfZ2xvYmFsKQogICAgICAgICAjIHRlc3QgYWRkcmVzc2VzCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZSwgaXBhZGRyZXNzLmlwX2FkZHJlc3MoJ2ZmZmY6OicpLmlzX211bHRpY2FzdCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUcnVlLCBpcGFkZHJlc3MuaXBfYWRkcmVzcygyKioxMjggLSAxKS5pc19tdWx0aWNhc3QpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2l0ZXIucHkgYi9MaWIvdGVzdC90ZXN0X2l0ZXIucHkKaW5kZXggNDNmOGUxNS4uYWJjNDA4ZiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pdGVyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaXRlci5weQpAQCAtMSw1ICsxLDYgQEAKICMgVGVzdCBpdGVyYXRvcnMuCiAKK2ltcG9ydCBzeXMKIGltcG9ydCB1bml0dGVzdAogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgVEVTVEZOLCB1bmxpbmssIGNweXRob25fb25seQogaW1wb3J0IHBpY2tsZQpAQCAtNDgsNiArNDksMTAgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHJhaXNlIEluZGV4RXJyb3IKIAorY2xhc3MgVW5saW1pdGVkU2VxdWVuY2VDbGFzczoKKyAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaSk6CisgICAgICAgIHJldHVybiBpCisKICMgTWFpbiB0ZXN0IHN1aXRlCiAKIGNsYXNzIFRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTc2LDIyICs4MSwyMyBAQAogCiAgICAgIyBIZWxwZXIgdG8gY2hlY2sgcGlja2xhYmlsaXR5CiAgICAgZGVmIGNoZWNrX3BpY2tsZShzZWxmLCBpdG9yZywgc2VxKToKLSAgICAgICAgZCA9IHBpY2tsZS5kdW1wcyhpdG9yZykKLSAgICAgICAgaXQgPSBwaWNrbGUubG9hZHMoZCkKLSAgICAgICAgIyBDYW5ub3QgYXNzZXJ0IHR5cGUgZXF1YWxpdHkgYmVjYXVzZSBkaWN0IGl0ZXJhdG9ycyB1bnBpY2tsZSBhcyBsaXN0Ci0gICAgICAgICMgaXRlcmF0b3JzLgotICAgICAgICAjIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShpdG9yZyksIHR5cGUoaXQpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShpdCwgY29sbGVjdGlvbnMuYWJjLkl0ZXJhdG9yKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGl0KSwgc2VxKQorICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIGQgPSBwaWNrbGUuZHVtcHMoaXRvcmcsIHByb3RvKQorICAgICAgICAgICAgaXQgPSBwaWNrbGUubG9hZHMoZCkKKyAgICAgICAgICAgICMgQ2Fubm90IGFzc2VydCB0eXBlIGVxdWFsaXR5IGJlY2F1c2UgZGljdCBpdGVyYXRvcnMgdW5waWNrbGUgYXMgbGlzdAorICAgICAgICAgICAgIyBpdGVyYXRvcnMuCisgICAgICAgICAgICAjIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShpdG9yZyksIHR5cGUoaXQpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoaXQsIGNvbGxlY3Rpb25zLmFiYy5JdGVyYXRvcikpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoaXQpLCBzZXEpCiAKLSAgICAgICAgaXQgPSBwaWNrbGUubG9hZHMoZCkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgbmV4dChpdCkKLSAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246Ci0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgZCA9IHBpY2tsZS5kdW1wcyhpdCkKLSAgICAgICAgaXQgPSBwaWNrbGUubG9hZHMoZCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGl0KSwgc2VxWzE6XSkKKyAgICAgICAgICAgIGl0ID0gcGlja2xlLmxvYWRzKGQpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbmV4dChpdCkKKyAgICAgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBkID0gcGlja2xlLmR1bXBzKGl0LCBwcm90bykKKyAgICAgICAgICAgIGl0ID0gcGlja2xlLmxvYWRzKGQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoaXQpLCBzZXFbMTpdKQogCiAgICAgIyBUZXN0IGJhc2ljIHVzZSBvZiBpdGVyKCkgZnVuY3Rpb24KICAgICBkZWYgdGVzdF9pdGVyX2Jhc2ljKHNlbGYpOgpAQCAtOTE4LDYgKzkyNCwyNiBAQAogICAgICAgICBsc3QuZXh0ZW5kKGdlbigpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsc3QpLCA3NjApCiAKKyAgICBAY3B5dGhvbl9vbmx5CisgICAgZGVmIHRlc3RfaXRlcl9vdmVyZmxvdyhzZWxmKToKKyAgICAgICAgIyBUZXN0IGZvciB0aGUgaXNzdWUgMjI5MzkKKyAgICAgICAgaXQgPSBpdGVyKFVubGltaXRlZFNlcXVlbmNlQ2xhc3MoKSkKKyAgICAgICAgIyBNYW51YWxseSBzZXQgYGl0X2luZGV4YCB0byBQWV9TU0laRV9UX01BWC0yIHdpdGhvdXQgYSBsb29wCisgICAgICAgIGl0Ll9fc2V0c3RhdGVfXyhzeXMubWF4c2l6ZSAtIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV4dChpdCksIHN5cy5tYXhzaXplIC0gMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXh0KGl0KSwgc3lzLm1heHNpemUgLSAxKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IpOgorICAgICAgICAgICAgbmV4dChpdCkKKyAgICAgICAgIyBDaGVjayB0aGF0IE92ZXJmbG93IGVycm9yIGlzIGFsd2F5cyByYWlzZWQKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yKToKKyAgICAgICAgICAgIG5leHQoaXQpCisKKyAgICBkZWYgdGVzdF9pdGVyX25lZ19zZXRzdGF0ZShzZWxmKToKKyAgICAgICAgaXQgPSBpdGVyKFVubGltaXRlZFNlcXVlbmNlQ2xhc3MoKSkKKyAgICAgICAgaXQuX19zZXRzdGF0ZV9fKC00MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXh0KGl0KSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXh0KGl0KSwgMSkKKwogCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgcnVuX3VuaXR0ZXN0KFRlc3RDYXNlKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pdGVybGVuLnB5IGIvTGliL3Rlc3QvdGVzdF9pdGVybGVuLnB5CmluZGV4IDkxMDFmNmMuLjE1MmY1ZmMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaXRlcmxlbi5weQorKysgYi9MaWIvdGVzdC90ZXN0X2l0ZXJsZW4ucHkKQEAgLTQ1LDMxICs0NSwyMSBAQAogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiBmcm9tIGl0ZXJ0b29scyBpbXBvcnQgcmVwZWF0CiBmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBkZXF1ZQotZnJvbSBidWlsdGlucyBpbXBvcnQgbGVuIGFzIF9sZW4KK2Zyb20gb3BlcmF0b3IgaW1wb3J0IGxlbmd0aF9oaW50CiAKIG4gPSAxMAogCi1kZWYgbGVuKG9iaik6Ci0gICAgdHJ5OgotICAgICAgICByZXR1cm4gX2xlbihvYmopCi0gICAgZXhjZXB0IFR5cGVFcnJvcjoKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgIyBub3RlOiB0aGlzIGlzIGFuIGludGVybmFsIHVuZG9jdW1lbnRlZCBBUEksCi0gICAgICAgICAgICAjIGRvbid0IHJlbHkgb24gaXQgaW4geW91ciBvd24gcHJvZ3JhbXMKLSAgICAgICAgICAgIHJldHVybiBvYmouX19sZW5ndGhfaGludF9fKCkKLSAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yCiAKIGNsYXNzIFRlc3RJbnZhcmlhbnRXaXRob3V0TXV0YXRpb25zOgogCiAgICAgZGVmIHRlc3RfaW52YXJpYW50KHNlbGYpOgogICAgICAgICBpdCA9IHNlbGYuaXQKICAgICAgICAgZm9yIGkgaW4gcmV2ZXJzZWQocmFuZ2UoMSwgbisxKSk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihpdCksIGkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbmd0aF9oaW50KGl0KSwgaSkKICAgICAgICAgICAgIG5leHQoaXQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGl0KSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW5ndGhfaGludChpdCksIDApCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN0b3BJdGVyYXRpb24sIG5leHQsIGl0KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihpdCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuZ3RoX2hpbnQoaXQpLCAwKQogCiBjbGFzcyBUZXN0VGVtcG9yYXJpbHlJbW11dGFibGUoVGVzdEludmFyaWFudFdpdGhvdXRNdXRhdGlvbnMpOgogCkBAIC03OCwxMiArNjgsMTIgQEAKICAgICAgICAgIyBsZW5ndGggaW1tdXRhYmlsaXR5ICBkdXJpbmcgaXRlcmF0aW9uCiAKICAgICAgICAgaXQgPSBzZWxmLml0Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGl0KSwgbikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW5ndGhfaGludChpdCksIG4pCiAgICAgICAgIG5leHQoaXQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGl0KSwgbi0xKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbmd0aF9oaW50KGl0KSwgbi0xKQogICAgICAgICBzZWxmLm11dGF0ZSgpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgbmV4dCwgaXQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGl0KSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW5ndGhfaGludChpdCksIDApCiAKICMjIC0tLS0tLS0gQ29uY3JldGUgVHlwZSBUZXN0cyAtLS0tLS0tCiAKQEAgLTkyLDEwICs4Miw2IEBACiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBzZWxmLml0ID0gcmVwZWF0KE5vbmUsIG4pCiAKLSAgICBkZWYgdGVzdF9ub19sZW5fZm9yX2luZmluaXRlX3JlcGVhdChzZWxmKToKLSAgICAgICAgIyBUaGUgcmVwZWF0KCkgb2JqZWN0IGNhbiBhbHNvIGJlIGluZmluaXRlCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGVuLCByZXBlYXQoTm9uZSkpCi0KIGNsYXNzIFRlc3RYcmFuZ2UoVGVzdEludmFyaWFudFdpdGhvdXRNdXRhdGlvbnMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiBzZXRVcChzZWxmKToKQEAgLTE2NywxNCArMTUzLDE1IEBACiAgICAgICAgIGl0ID0gaXRlcihkKQogICAgICAgICBuZXh0KGl0KQogICAgICAgICBuZXh0KGl0KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihpdCksIG4tMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW5ndGhfaGludChpdCksIG4gLSAyKQogICAgICAgICBkLmFwcGVuZChuKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihpdCksIG4tMSkgICMgZ3JvdyB3aXRoIGFwcGVuZAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbmd0aF9oaW50KGl0KSwgbiAtIDEpICAjIGdyb3cgd2l0aCBhcHBlbmQKICAgICAgICAgZFsxOl0gPSBbXQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihpdCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuZ3RoX2hpbnQoaXQpLCAwKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoaXQpLCBbXSkKICAgICAgICAgZC5leHRlbmQocmFuZ2UoMjApKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihpdCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuZ3RoX2hpbnQoaXQpLCAwKQorCiAKIGNsYXNzIFRlc3RMaXN0UmV2ZXJzZWQoVGVzdEludmFyaWFudFdpdGhvdXRNdXRhdGlvbnMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKIApAQCAtMTg2LDMyICsxNzMsNDEgQEAKICAgICAgICAgaXQgPSByZXZlcnNlZChkKQogICAgICAgICBuZXh0KGl0KQogICAgICAgICBuZXh0KGl0KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihpdCksIG4tMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW5ndGhfaGludChpdCksIG4gLSAyKQogICAgICAgICBkLmFwcGVuZChuKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihpdCksIG4tMikgICMgaWdub3JlIGFwcGVuZAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbmd0aF9oaW50KGl0KSwgbiAtIDIpICAjIGlnbm9yZSBhcHBlbmQKICAgICAgICAgZFsxOl0gPSBbXQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihpdCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuZ3RoX2hpbnQoaXQpLCAwKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoaXQpLCBbXSkgICMgY29uZmlybSBpbnZhcmlhbnQKICAgICAgICAgZC5leHRlbmQocmFuZ2UoMjApKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihpdCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuZ3RoX2hpbnQoaXQpLCAwKQogCiAjIyAtLSBDaGVjayB0byBtYWtlIHN1cmUgZXhjZXB0aW9ucyBhcmUgbm90IHN1cHByZXNzZWQgYnkgX19sZW5ndGhfaGludF9fKCkKIAogCiBjbGFzcyBCYWRMZW4ob2JqZWN0KToKLSAgICBkZWYgX19pdGVyX18oc2VsZik6IHJldHVybiBpdGVyKHJhbmdlKDEwKSkKKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBpdGVyKHJhbmdlKDEwKSkKKwogICAgIGRlZiBfX2xlbl9fKHNlbGYpOgogICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ2hlbGxvJykKIAorCiBjbGFzcyBCYWRMZW5ndGhIaW50KG9iamVjdCk6Ci0gICAgZGVmIF9faXRlcl9fKHNlbGYpOiByZXR1cm4gaXRlcihyYW5nZSgxMCkpCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gaXRlcihyYW5nZSgxMCkpCisKICAgICBkZWYgX19sZW5ndGhfaGludF9fKHNlbGYpOgogICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ2hlbGxvJykKIAorCiBjbGFzcyBOb25lTGVuZ3RoSGludChvYmplY3QpOgotICAgIGRlZiBfX2l0ZXJfXyhzZWxmKTogcmV0dXJuIGl0ZXIocmFuZ2UoMTApKQorICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGl0ZXIocmFuZ2UoMTApKQorCiAgICAgZGVmIF9fbGVuZ3RoX2hpbnRfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisKIAogY2xhc3MgVGVzdExlbmd0aEhpbnRFeGNlcHRpb25zKHVuaXR0ZXN0LlRlc3RDYXNlKToKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pdGVydG9vbHMucHkgYi9MaWIvdGVzdC90ZXN0X2l0ZXJ0b29scy5weQppbmRleCAzNTM5MWM5Li45OTM0MzhjIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2l0ZXJ0b29scy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2l0ZXJ0b29scy5weQpAQCAtMSw3ICsxLDcgQEAKIGltcG9ydCB1bml0dGVzdAogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiBmcm9tIGl0ZXJ0b29scyBpbXBvcnQgKgotZnJvbSB3ZWFrcmVmIGltcG9ydCBwcm94eQoraW1wb3J0IHdlYWtyZWYKIGZyb20gZGVjaW1hbCBpbXBvcnQgRGVjaW1hbAogZnJvbSBmcmFjdGlvbnMgaW1wb3J0IEZyYWN0aW9uCiBpbXBvcnQgc3lzCkBAIC0xMCw2ICsxMCw4IEBACiBpbXBvcnQgY29weQogaW1wb3J0IHBpY2tsZQogZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHJlZHVjZQoraW1wb3J0IHN5cworaW1wb3J0IHN0cnVjdAogbWF4c2l6ZSA9IHN1cHBvcnQuTUFYX1B5X3NzaXplX3QKIG1pbnNpemUgPSAtbWF4c2l6ZS0xCiAKQEAgLTcyLDkgKzc0LDEyIEBACiBkZWYgdW5kZXJ0ZW4oeCk6CiAgICAgcmV0dXJuIHg8MTAKIAorcGlja2xlY29waWVycyA9IFtsYW1iZGEgcywgcHJvdG89cHJvdG86IHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMocywgcHJvdG8pKQorICAgICAgICAgICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKV0KKwogY2xhc3MgVGVzdEJhc2ljT3BzKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAotICAgIGRlZiBwaWNrbGV0ZXN0KHNlbGYsIGl0LCBzdG9wPTQsIHRha2U9MSwgY29tcGFyZT1Ob25lKToKKyAgICBkZWYgcGlja2xldGVzdChzZWxmLCBwcm90b2NvbCwgaXQsIHN0b3A9NCwgdGFrZT0xLCBjb21wYXJlPU5vbmUpOgogICAgICAgICAiIiJUZXN0IHRoYXQgYW4gaXRlcmF0b3IgaXMgdGhlIHNhbWUgYWZ0ZXIgcGlja2xpbmcsIGFsc28gd2hlbiBwYXJ0LWNvbnN1bWVkIiIiCiAgICAgICAgIGRlZiBleHBhbmQoaXQsIGk9MCk6CiAgICAgICAgICAgICAjIFJlY3Vyc2l2ZWx5IGV4cGFuZCBpdGVyYWJsZXMsIHdpdGhpbiBzZW5zaWJsZSBib3VuZHMKQEAgLTg5LDcgKzk0LDcgQEAKICAgICAgICAgICAgIHJldHVybiBbZXhwYW5kKGUsIGkrMSkgZm9yIGUgaW4gbF0KIAogICAgICAgICAjIFRlc3QgdGhlIGluaXRpYWwgY29weSBhZ2FpbnN0IHRoZSBvcmlnaW5hbAotICAgICAgICBkdW1wID0gcGlja2xlLmR1bXBzKGl0KQorICAgICAgICBkdW1wID0gcGlja2xlLmR1bXBzKGl0LCBwcm90b2NvbCkKICAgICAgICAgaTIgPSBwaWNrbGUubG9hZHMoZHVtcCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGl0KSwgdHlwZShpMikpCiAgICAgICAgIGEsIGIgPSBleHBhbmQoaXQpLCBleHBhbmQoaTIpCkBAIC0xMDcsNyArMTEyLDcgQEAKICAgICAgICAgICAgICAgICB0b29rICs9IDEKICAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246CiAgICAgICAgICAgICBwYXNzICNpbiBjYXNlIHRoZXJlIGlzIGxlc3MgZGF0YSB0aGFuICd0YWtlJwotICAgICAgICBkdW1wID0gcGlja2xlLmR1bXBzKGkzKQorICAgICAgICBkdW1wID0gcGlja2xlLmR1bXBzKGkzLCBwcm90b2NvbCkKICAgICAgICAgaTQgPSBwaWNrbGUubG9hZHMoZHVtcCkKICAgICAgICAgYSwgYiA9IGV4cGFuZChpMyksIGV4cGFuZChpNCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBiKQpAQCAtMTQxLDcgKzE0Niw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgWzIsIDE2LCAxNDQsIDcyMCwgNTA0MCwgMCwgMCwgMCwgMCwgMF0pCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKICAgICAgICAgICAgIGxpc3QoYWNjdW11bGF0ZShzLCBjaHIpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB1bmFyeS1vcGVyYXRpb24KLSAgICAgICAgc2VsZi5waWNrbGV0ZXN0KGFjY3VtdWxhdGUocmFuZ2UoMTApKSkgICAgICAgICAgICAgICAgICAgICAgIyB0ZXN0IHBpY2tsaW5nCisgICAgICAgIGZvciBwcm90byBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgc2VsZi5waWNrbGV0ZXN0KHByb3RvLCBhY2N1bXVsYXRlKHJhbmdlKDEwKSkpICAgICAgICAgICAjIHRlc3QgcGlja2xpbmcKIAogICAgIGRlZiB0ZXN0X2NoYWluKHNlbGYpOgogCkBAIC0xNjYsOSArMTcyLDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsaXN0LCBjaGFpbi5mcm9tX2l0ZXJhYmxlKFsyLCAzXSkpCiAKICAgICBkZWYgdGVzdF9jaGFpbl9yZWR1Y2libGUoc2VsZik6Ci0gICAgICAgIG9wZXJhdG9ycyA9IFtjb3B5LmRlZXBjb3B5LAotICAgICAgICAgICAgICAgICAgICAgbGFtYmRhIHM6IHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMocykpXQotICAgICAgICBmb3Igb3BlciBpbiBvcGVyYXRvcnM6CisgICAgICAgIGZvciBvcGVyIGluIFtjb3B5LmRlZXBjb3B5XSArIHBpY2tsZWNvcGllcnM6CiAgICAgICAgICAgICBpdCA9IGNoYWluKCdhYmMnLCAnZGVmJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChvcGVyKGl0KSksIGxpc3QoJ2FiY2RlZicpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXh0KGl0KSwgJ2EnKQpAQCAtMTc3LDcgKzE4MSw4IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qob3BlcihjaGFpbignJykpKSwgW10pCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRha2UoNCwgb3BlcihjaGFpbignYWJjJywgJ2RlZicpKSksIGxpc3QoJ2FiY2QnKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGlzdCwgb3BlcihjaGFpbigyLCAzKSkpCi0gICAgICAgIHNlbGYucGlja2xldGVzdChjaGFpbignYWJjJywgJ2RlZicpLCBjb21wYXJlPWxpc3QoJ2FiY2RlZicpKQorICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIHNlbGYucGlja2xldGVzdChwcm90bywgY2hhaW4oJ2FiYycsICdkZWYnKSwgY29tcGFyZT1saXN0KCdhYmNkZWYnKSkKIAogICAgIGRlZiB0ZXN0X2NvbWJpbmF0aW9ucyhzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb21iaW5hdGlvbnMsICdhYmMnKSAgICAgICAjIG1pc3NpbmcgciBhcmd1bWVudApAQCAtMTg1LDcgKzE5MCw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY29tYmluYXRpb25zLCBOb25lKSAgICAgICAgIyBwb29sIGlzIG5vdCBpdGVyYWJsZQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjb21iaW5hdGlvbnMsICdhYmMnLCAtMikgICMgciBpcyBuZWdhdGl2ZQogCi0gICAgICAgIGZvciBvcCBpbiAobGFtYmRhIGE6YSwgbGFtYmRhIGE6cGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhhKSkpOgorICAgICAgICBmb3Igb3AgaW4gW2xhbWJkYSBhOmFdICsgcGlja2xlY29waWVyczoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChvcChjb21iaW5hdGlvbnMoJ2FiYycsIDMyKSkpLCBbXSkgICAgICMgciA+IG4KIAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG9wKGNvbWJpbmF0aW9ucygnQUJDRCcsIDIpKSksCkBAIC0yNTYsNyArMjYxLDggQEAKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgbGlzdChjb21iaW5hdGlvbnMyKHZhbHVlcywgcikpKSAjIG1hdGNoZXMgc2Vjb25kIHB1cmUgcHl0aG9uIHZlcnNpb24KICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgbGlzdChjb21iaW5hdGlvbnMzKHZhbHVlcywgcikpKSAjIG1hdGNoZXMgc2Vjb25kIHB1cmUgcHl0aG9uIHZlcnNpb24KIAotICAgICAgICAgICAgICAgIHNlbGYucGlja2xldGVzdChjb21iaW5hdGlvbnModmFsdWVzLCByKSkgICAgICAgICAgICAgICAgICMgdGVzdCBwaWNrbGluZworICAgICAgICAgICAgICAgIGZvciBwcm90byBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnBpY2tsZXRlc3QocHJvdG8sIGNvbWJpbmF0aW9ucyh2YWx1ZXMsIHIpKSAgICAgICMgdGVzdCBwaWNrbGluZwogCiAgICAgQHN1cHBvcnQuYmlnYWRkcnNwYWNldGVzdAogICAgIGRlZiB0ZXN0X2NvbWJpbmF0aW9uc19vdmVyZmxvdyhzZWxmKToKQEAgLTI3Niw3ICsyODIsNyBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGN3ciwgTm9uZSkgICAgICAgICMgcG9vbCBpcyBub3QgaXRlcmFibGUKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY3dyLCAnYWJjJywgLTIpICAjIHIgaXMgbmVnYXRpdmUKIAotICAgICAgICBmb3Igb3AgaW4gKGxhbWJkYSBhOmEsIGxhbWJkYSBhOnBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMoYSkpKToKKyAgICAgICAgZm9yIG9wIGluIFtsYW1iZGEgYTphXSArIHBpY2tsZWNvcGllcnM6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qob3AoY3dyKCdBQkMnLCAyKSkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKCdBJywnQScpLCAoJ0EnLCdCJyksICgnQScsJ0MnKSwgKCdCJywnQicpLCAoJ0InLCdDJyksICgnQycsJ0MnKV0pCiAgICAgICAgICAgICB0ZXN0SW50ZXJtZWRpYXRlID0gY3dyKCdBQkMnLCAyKQpAQCAtMzQyLDcgKzM0OCw4IEBACiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIGxpc3QoY3dyMSh2YWx1ZXMsIHIpKSkgICAgICAgICAjIG1hdGNoZXMgZmlyc3QgcHVyZSBweXRob24gdmVyc2lvbgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBsaXN0KGN3cjIodmFsdWVzLCByKSkpICAgICAgICAgIyBtYXRjaGVzIHNlY29uZCBwdXJlIHB5dGhvbiB2ZXJzaW9uCiAKLSAgICAgICAgICAgICAgICBzZWxmLnBpY2tsZXRlc3QoY3dyKHZhbHVlcyxyKSkgICAgICAgICAgICAgICAgICAgICAgICAgICMgdGVzdCBwaWNrbGluZworICAgICAgICAgICAgICAgIGZvciBwcm90byBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnBpY2tsZXRlc3QocHJvdG8sIGN3cih2YWx1ZXMscikpICAgICAgICAgICAgICAgIyB0ZXN0IHBpY2tsaW5nCiAKICAgICBAc3VwcG9ydC5iaWdhZGRyc3BhY2V0ZXN0CiAgICAgZGVmIHRlc3RfY29tYmluYXRpb25zX3dpdGhfcmVwbGFjZW1lbnRfb3ZlcmZsb3coc2VsZik6CkBAIC00MTYsMTQgKzQyMywxNSBAQAogICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgbGlzdChwZXJtdXRhdGlvbnModmFsdWVzLCBOb25lKSkpICMgdGVzdCByIGFzIE5vbmUKICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIGxpc3QocGVybXV0YXRpb25zKHZhbHVlcykpKSAgICAgICAjIHRlc3QgZGVmYXVsdCByCiAKLSAgICAgICAgICAgICAgICBzZWxmLnBpY2tsZXRlc3QocGVybXV0YXRpb25zKHZhbHVlcywgcikpICAgICAgICAgICAgICAgICMgdGVzdCBwaWNrbGluZworICAgICAgICAgICAgICAgIGZvciBwcm90byBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnBpY2tsZXRlc3QocHJvdG8sIHBlcm11dGF0aW9ucyh2YWx1ZXMsIHIpKSAgICAgIyB0ZXN0IHBpY2tsaW5nCiAKICAgICBAc3VwcG9ydC5iaWdhZGRyc3BhY2V0ZXN0CiAgICAgZGVmIHRlc3RfcGVybXV0YXRpb25zX292ZXJmbG93KHNlbGYpOgogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKChPdmVyZmxvd0Vycm9yLCBNZW1vcnlFcnJvcikpOgogICAgICAgICAgICAgcGVybXV0YXRpb25zKCJBIiwgMioqMzApCiAKLSAgICBAc3VwcG9ydC5pbXBsX2RldGFpbCgidHVwbGUgcmVzdXNlIGlzIENQeXRob24gc3BlY2lmaWMiKQorICAgIEBzdXBwb3J0LmltcGxfZGV0YWlsKCJ0dXBsZSByZXVzZSBpcyBzcGVjaWZpYyB0byBDUHl0aG9uIikKICAgICBkZWYgdGVzdF9wZXJtdXRhdGlvbnNfdHVwbGVfcmV1c2Uoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNldChtYXAoaWQsIHBlcm11dGF0aW9ucygnYWJjZGUnLCAzKSkpKSwgMSkKICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChsZW4oc2V0KG1hcChpZCwgbGlzdChwZXJtdXRhdGlvbnMoJ2FiY2RlJywgMykpKSkpLCAxKQpAQCAtNDc4LDcgKzQ4Niw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY29tcHJlc3MsIHJhbmdlKDYpLCBOb25lKSAgICAgICMgdG9vIG1hbnkgYXJncwogCiAgICAgICAgICMgY2hlY2sgY29weSwgZGVlcGNvcHksIHBpY2tsZQotICAgICAgICBmb3Igb3AgaW4gKGxhbWJkYSBhOmNvcHkuY29weShhKSwgbGFtYmRhIGE6Y29weS5kZWVwY29weShhKSwgbGFtYmRhIGE6cGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhhKSkpOgorICAgICAgICBmb3Igb3AgaW4gW2xhbWJkYSBhOmNvcHkuY29weShhKSwgbGFtYmRhIGE6Y29weS5kZWVwY29weShhKV0gKyBwaWNrbGVjb3BpZXJzOgogICAgICAgICAgICAgZm9yIGRhdGEsIHNlbGVjdG9ycywgcmVzdWx0MSwgcmVzdWx0MiBpbiBbCiAgICAgICAgICAgICAgICAgKCdBQkNERUYnLCBbMSwwLDEsMCwxLDFdLCAnQUNFRicsICdDRUYnKSwKICAgICAgICAgICAgICAgICAoJ0FCQ0RFRicsIFswLDAsMCwwLDAsMF0sICcnLCAnJyksCkBAIC01MjksNyArNTM3LDggQEAKICAgICAgICAgICAgIGMgPSBjb3VudCh2YWx1ZSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV4dChjb3B5LmNvcHkoYykpLCB2YWx1ZSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV4dChjb3B5LmRlZXBjb3B5KGMpKSwgdmFsdWUpCi0gICAgICAgICAgICBzZWxmLnBpY2tsZXRlc3QoY291bnQodmFsdWUpKQorICAgICAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICAgICAgc2VsZi5waWNrbGV0ZXN0KHByb3RvLCBjb3VudCh2YWx1ZSkpCiAKICAgICAgICAgI2NoZWNrIHByb3BlciBpbnRlcm5hbCBlcnJvciBoYW5kbGluZyBmb3IgbGFyZ2UgInN0ZXAnIHNpemVzCiAgICAgICAgIGNvdW50KDEsIG1heHNpemUrNSk7IHN5cy5leGNfaW5mbygpCkBAIC01NzYsNyArNTg1LDggQEAKICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICByMiA9ICgnY291bnQoJXIsICVyKScgJSAoaSwgaikpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyMSwgcjIpCi0gICAgICAgICAgICAgICAgc2VsZi5waWNrbGV0ZXN0KGNvdW50KGksIGopKQorICAgICAgICAgICAgICAgIGZvciBwcm90byBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnBpY2tsZXRlc3QocHJvdG8sIGNvdW50KGksIGopKQogCiAgICAgZGVmIHRlc3RfY3ljbGUoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFrZSgxMCwgY3ljbGUoJ2FiYycpKSwgbGlzdCgnYWJjYWJjYWJjYScpKQpAQCAtNTkyLDEwICs2MDIsMTYgQEAKICAgICAgICAgI2FuIGludGVybmFsIGl0ZXJhdG9yCiAgICAgICAgICNzZWxmLmFzc2VydEVxdWFsKHRha2UoMTAsIGNvcHkuY29weShjKSksIGxpc3QoJ2JjYWJjYWJjYWInKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YWtlKDEwLCBjb3B5LmRlZXBjb3B5KGMpKSwgbGlzdCgnYmNhYmNhYmNhYicpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRha2UoMTAsIHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMoYykpKSwgbGlzdCgnYmNhYmNhYmNhYicpKQotICAgICAgICBuZXh0KGMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFrZSgxMCwgcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhjKSkpLCBsaXN0KCdjYWJjYWJjYWJjJykpCi0gICAgICAgIHNlbGYucGlja2xldGVzdChjeWNsZSgnYWJjJykpCisgICAgICAgIGZvciBwcm90byBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YWtlKDEwLCBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKGMsIHByb3RvKSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0KCdiY2FiY2FiY2FiJykpCisgICAgICAgICAgICBuZXh0KGMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRha2UoMTAsIHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMoYywgcHJvdG8pKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QoJ2NhYmNhYmNhYmMnKSkKKyAgICAgICAgICAgIG5leHQoYykKKyAgICAgICAgICAgIG5leHQoYykKKyAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICBzZWxmLnBpY2tsZXRlc3QocHJvdG8sIGN5Y2xlKCdhYmMnKSkKIAogICAgIGRlZiB0ZXN0X2dyb3VwYnkoc2VsZik6CiAgICAgICAgICMgQ2hlY2sgd2hldGhlciBpdCBhY2NlcHRzIGFyZ3VtZW50cyBjb3JyZWN0bHkKQEAgLTYxNiwxMiArNjMyLDEzIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgZHVwKQogCiAgICAgICAgICMgQ2hlY2sgbm9ybWFsIHBpY2tsZWQKLSAgICAgICAgZHVwID0gW10KLSAgICAgICAgZm9yIGssIGcgaW4gcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhncm91cGJ5KHMsIHRlc3RSKSkpOgotICAgICAgICAgICAgZm9yIGVsZW0gaW4gZzoKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGssIGVsZW1bMF0pCi0gICAgICAgICAgICAgICAgZHVwLmFwcGVuZChlbGVtKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMsIGR1cCkKKyAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICBkdXAgPSBbXQorICAgICAgICAgICAgZm9yIGssIGcgaW4gcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhncm91cGJ5KHMsIHRlc3RSKSwgcHJvdG8pKToKKyAgICAgICAgICAgICAgICBmb3IgZWxlbSBpbiBnOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGssIGVsZW1bMF0pCisgICAgICAgICAgICAgICAgICAgIGR1cC5hcHBlbmQoZWxlbSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgZHVwKQogCiAgICAgICAgICMgQ2hlY2sgbmVzdGVkIGNhc2UKICAgICAgICAgZHVwID0gW10KQEAgLTYzNCwxNCArNjUxLDE1IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgZHVwKQogCiAgICAgICAgICMgQ2hlY2sgbmVzdGVkIGFuZCBwaWNrbGVkCi0gICAgICAgIGR1cCA9IFtdCi0gICAgICAgIGZvciBrLCBnIGluIHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMoZ3JvdXBieShzLCB0ZXN0UikpKToKLSAgICAgICAgICAgIGZvciBpaywgaWcgaW4gcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhncm91cGJ5KGcsIHRlc3RSMikpKToKLSAgICAgICAgICAgICAgICBmb3IgZWxlbSBpbiBpZzoKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChrLCBlbGVtWzBdKQotICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlrLCBlbGVtWzJdKQotICAgICAgICAgICAgICAgICAgICBkdXAuYXBwZW5kKGVsZW0pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgZHVwKQorICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIGR1cCA9IFtdCisgICAgICAgICAgICBmb3IgaywgZyBpbiBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKGdyb3VwYnkocywgdGVzdFIpLCBwcm90bykpOgorICAgICAgICAgICAgICAgIGZvciBpaywgaWcgaW4gcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhncm91cGJ5KGcsIHRlc3RSMiksIHByb3RvKSk6CisgICAgICAgICAgICAgICAgICAgIGZvciBlbGVtIGluIGlnOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChrLCBlbGVtWzBdKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpaywgZWxlbVsyXSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGR1cC5hcHBlbmQoZWxlbSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgZHVwKQogCiAKICAgICAgICAgIyBDaGVjayBjYXNlIHdoZXJlIGlubmVyIGl0ZXJhdG9yIGlzIG5vdCB1c2VkCkBAIC02ODAsNyArNjk4LDcgQEAKICAgICAgICAgIyBpdGVyLl9fbmV4dF9fIGZhaWx1cmUgb24gaW5uZXIgb2JqZWN0CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEV4cGVjdGVkRXJyb3IsIGd1bHAsIGRlbGF5ZWRfcmFpc2UoMSkpCiAKLSAgICAgICAgIyBfX2NtcF9fIGZhaWx1cmUKKyAgICAgICAgIyBfX2VxX18gZmFpbHVyZQogICAgICAgICBjbGFzcyBEdW1teUNtcDoKICAgICAgICAgICAgIGRlZiBfX2VxX18oc2VsZiwgZHN0KToKICAgICAgICAgICAgICAgICByYWlzZSBFeHBlY3RlZEVycm9yCkBAIC03MjMsMTIgKzc0MSwxNCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoY29weS5jb3B5KGMpKSwgYW5zKQogICAgICAgICBjID0gZmlsdGVyKGlzRXZlbiwgcmFuZ2UoNikpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChjb3B5LmRlZXBjb3B5KGMpKSwgYW5zKQotICAgICAgICBjID0gZmlsdGVyKGlzRXZlbiwgcmFuZ2UoNikpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKGMpKSksIGFucykKLSAgICAgICAgbmV4dChjKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QocGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhjKSkpLCBhbnNbMTpdKQotICAgICAgICBjID0gZmlsdGVyKGlzRXZlbiwgcmFuZ2UoNikpCi0gICAgICAgIHNlbGYucGlja2xldGVzdChjKQorICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIGMgPSBmaWx0ZXIoaXNFdmVuLCByYW5nZSg2KSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKGMsIHByb3RvKSkpLCBhbnMpCisgICAgICAgICAgICBuZXh0KGMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QocGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhjLCBwcm90bykpKSwgYW5zWzE6XSkKKyAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICBjID0gZmlsdGVyKGlzRXZlbiwgcmFuZ2UoNikpCisgICAgICAgICAgICBzZWxmLnBpY2tsZXRlc3QocHJvdG8sIGMpCiAKICAgICBkZWYgdGVzdF9maWx0ZXJmYWxzZShzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGZpbHRlcmZhbHNlKGlzRXZlbiwgcmFuZ2UoNikpKSwgWzEsMyw1XSkKQEAgLTc0MCw3ICs3NjAsOCBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGZpbHRlcmZhbHNlLCBsYW1iZGEgeDp4LCByYW5nZSg2KSwgNykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmaWx0ZXJmYWxzZSwgaXNFdmVuLCAzKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG5leHQsIGZpbHRlcmZhbHNlKHJhbmdlKDYpLCByYW5nZSg2KSkpCi0gICAgICAgIHNlbGYucGlja2xldGVzdChmaWx0ZXJmYWxzZShpc0V2ZW4sIHJhbmdlKDYpKSkKKyAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICBzZWxmLnBpY2tsZXRlc3QocHJvdG8sIGZpbHRlcmZhbHNlKGlzRXZlbiwgcmFuZ2UoNikpKQogCiAgICAgZGVmIHRlc3RfemlwKHNlbGYpOgogICAgICAgICAjIFhYWCBUaGlzIGlzIHJhdGhlciBzaWxseSBub3cgdGhhdCBidWlsdGluIHppcCgpIGNhbGxzIHppcCgpLi4uCkBAIC03NzIsMTUgKzc5MywxOCBAQAogICAgICAgICBhbnMgPSBbKHgseSkgZm9yIHgsIHkgaW4gY29weS5kZWVwY29weSh6aXAoJ2FiYycsY291bnQoKSkpXQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFucywgWygnYScsIDApLCAoJ2InLCAxKSwgKCdjJywgMildKQogCi0gICAgICAgIGFucyA9IFsoeCx5KSBmb3IgeCwgeSBpbiBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKHppcCgnYWJjJyxjb3VudCgpKSkpXQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFucywgWygnYScsIDApLCAoJ2InLCAxKSwgKCdjJywgMildKQorICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIGFucyA9IFsoeCx5KSBmb3IgeCwgeSBpbiBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKHppcCgnYWJjJyxjb3VudCgpKSwgcHJvdG8pKV0KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYW5zLCBbKCdhJywgMCksICgnYicsIDEpLCAoJ2MnLCAyKV0pCiAKLSAgICAgICAgdGVzdEludGVybWVkaWF0ZSA9IHppcCgnYWJjJyxjb3VudCgpKQotICAgICAgICBuZXh0KHRlc3RJbnRlcm1lZGlhdGUpCi0gICAgICAgIGFucyA9IFsoeCx5KSBmb3IgeCwgeSBpbiBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKHRlc3RJbnRlcm1lZGlhdGUpKV0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhbnMsIFsoJ2InLCAxKSwgKCdjJywgMildKQorICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIHRlc3RJbnRlcm1lZGlhdGUgPSB6aXAoJ2FiYycsY291bnQoKSkKKyAgICAgICAgICAgIG5leHQodGVzdEludGVybWVkaWF0ZSkKKyAgICAgICAgICAgIGFucyA9IFsoeCx5KSBmb3IgeCwgeSBpbiBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKHRlc3RJbnRlcm1lZGlhdGUsIHByb3RvKSldCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFucywgWygnYicsIDEpLCAoJ2MnLCAyKV0pCiAKLSAgICAgICAgc2VsZi5waWNrbGV0ZXN0KHppcCgnYWJjJywgY291bnQoKSkpCisgICAgICAgIGZvciBwcm90byBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgc2VsZi5waWNrbGV0ZXN0KHByb3RvLCB6aXAoJ2FiYycsIGNvdW50KCkpKQogCiAgICAgZGVmIHRlc3RfemlwbG9uZ2VzdChzZWxmKToKICAgICAgICAgZm9yIGFyZ3MgaW4gWwpAQCAtODMyLDEwICs4NTYsMTEgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZGljdC5mcm9ta2V5cyhpZHMpKSwgbGVuKGlkcykpCiAKICAgICBkZWYgdGVzdF96aXBfbG9uZ2VzdF9waWNrbGluZyhzZWxmKToKLSAgICAgICAgc2VsZi5waWNrbGV0ZXN0KHppcF9sb25nZXN0KCJhYmMiLCAiZGVmIikpCi0gICAgICAgIHNlbGYucGlja2xldGVzdCh6aXBfbG9uZ2VzdCgiYWJjIiwgImRlZmdoIikpCi0gICAgICAgIHNlbGYucGlja2xldGVzdCh6aXBfbG9uZ2VzdCgiYWJjIiwgImRlZmdoIiwgZmlsbHZhbHVlPTEpKQotICAgICAgICBzZWxmLnBpY2tsZXRlc3QoemlwX2xvbmdlc3QoIiIsICJkZWZnaCIpKQorICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIHNlbGYucGlja2xldGVzdChwcm90bywgemlwX2xvbmdlc3QoImFiYyIsICJkZWYiKSkKKyAgICAgICAgICAgIHNlbGYucGlja2xldGVzdChwcm90bywgemlwX2xvbmdlc3QoImFiYyIsICJkZWZnaCIpKQorICAgICAgICAgICAgc2VsZi5waWNrbGV0ZXN0KHByb3RvLCB6aXBfbG9uZ2VzdCgiYWJjIiwgImRlZmdoIiwgZmlsbHZhbHVlPTEpKQorICAgICAgICAgICAgc2VsZi5waWNrbGV0ZXN0KHByb3RvLCB6aXBfbG9uZ2VzdCgiIiwgImRlZmdoIikpCiAKICAgICBkZWYgdGVzdF9idWdfNzI0NChzZWxmKToKIApAQCAtOTU3LDcgKzk4Miw4IEBACiAgICAgICAgICAgICBdOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGNvcHkuY29weShwcm9kdWN0KCphcmdzKSkpLCByZXN1bHQpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoY29weS5kZWVwY29weShwcm9kdWN0KCphcmdzKSkpLCByZXN1bHQpCi0gICAgICAgICAgICBzZWxmLnBpY2tsZXRlc3QocHJvZHVjdCgqYXJncykpCisgICAgICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgICAgICBzZWxmLnBpY2tsZXRlc3QocHJvdG8sIHByb2R1Y3QoKmFyZ3MpKQogCiAgICAgZGVmIHRlc3RfcHJvZHVjdF9pc3N1ZV8yNTAyMShzZWxmKToKICAgICAgICAgIyB0ZXN0IHRoYXQgaW5kaWNlcyBhcmUgcHJvcGVybHkgY2xhbXBlZCB0byB0aGUgbGVuZ3RoIG9mIHRoZSB0dXBsZXMKQEAgLTk5Miw3ICsxMDE4LDE0IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV4dChjKSwgJ2EnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRha2UoMiwgY29weS5jb3B5KGMpKSwgbGlzdCgnYScgKiAyKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YWtlKDIsIGNvcHkuZGVlcGNvcHkoYykpLCBsaXN0KCdhJyAqIDIpKQotICAgICAgICBzZWxmLnBpY2tsZXRlc3QocmVwZWF0KG9iamVjdD0nYScsIHRpbWVzPTEwKSkKKyAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICBzZWxmLnBpY2tsZXRlc3QocHJvdG8sIHJlcGVhdChvYmplY3Q9J2EnLCB0aW1lcz0xMCkpCisKKyAgICBkZWYgdGVzdF9yZXBlYXRfd2l0aF9uZWdhdGl2ZV90aW1lcyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHJlcGVhdCgnYScsIC0xKSksICJyZXBlYXQoJ2EnLCAwKSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihyZXBlYXQoJ2EnLCAtMikpLCAicmVwZWF0KCdhJywgMCkiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIocmVwZWF0KCdhJywgdGltZXM9LTEpKSwgInJlcGVhdCgnYScsIDApIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHJlcGVhdCgnYScsIHRpbWVzPS0yKSksICJyZXBlYXQoJ2EnLCAwKSIpCiAKICAgICBkZWYgdGVzdF9tYXAoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChtYXAob3BlcmF0b3IucG93LCByYW5nZSgzKSwgcmFuZ2UoMSw3KSkpLApAQCAtMTAyMCw4ICsxMDUzLDkgQEAKICAgICAgICAgYyA9IG1hcCh0dXBsZWl6ZSwgJ2FiYycsIGNvdW50KCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChjb3B5LmRlZXBjb3B5KGMpKSwgYW5zKQogCi0gICAgICAgIGMgPSBtYXAodHVwbGVpemUsICdhYmMnLCBjb3VudCgpKQotICAgICAgICBzZWxmLnBpY2tsZXRlc3QoYykKKyAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICBjID0gbWFwKHR1cGxlaXplLCAnYWJjJywgY291bnQoKSkKKyAgICAgICAgICAgIHNlbGYucGlja2xldGVzdChwcm90bywgYykKIAogICAgIGRlZiB0ZXN0X3N0YXJtYXAoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChzdGFybWFwKG9wZXJhdG9yLnBvdywgemlwKHJhbmdlKDMpLCByYW5nZSgxLDcpKSkpLApAQCAtMTA0Niw4ICsxMDgwLDkgQEAKICAgICAgICAgYyA9IHN0YXJtYXAob3BlcmF0b3IucG93LCB6aXAocmFuZ2UoMyksIHJhbmdlKDEsNykpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoY29weS5kZWVwY29weShjKSksIGFucykKIAotICAgICAgICBjID0gc3Rhcm1hcChvcGVyYXRvci5wb3csIHppcChyYW5nZSgzKSwgcmFuZ2UoMSw3KSkpCi0gICAgICAgIHNlbGYucGlja2xldGVzdChjKQorICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIGMgPSBzdGFybWFwKG9wZXJhdG9yLnBvdywgemlwKHJhbmdlKDMpLCByYW5nZSgxLDcpKSkKKyAgICAgICAgICAgIHNlbGYucGlja2xldGVzdChwcm90bywgYykKIAogICAgIGRlZiB0ZXN0X2lzbGljZShzZWxmKToKICAgICAgICAgZm9yIGFyZ3MgaW4gWyAgICAgICAgICAjIGlzbGljZShhcmdzKSBzaG91bGQgYWdyZWUgd2l0aCByYW5nZShhcmdzKQpAQCAtMTExMiw3ICsxMTQ3LDE4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QocmFuZ2UoKmFyZ3MpKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChjb3B5LmRlZXBjb3B5KGlzbGljZShyYW5nZSgxMDApLCAqYXJncykpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdChyYW5nZSgqYXJncykpKQotICAgICAgICAgICAgc2VsZi5waWNrbGV0ZXN0KGlzbGljZShyYW5nZSgxMDApLCAqYXJncykpCisgICAgICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgICAgICBzZWxmLnBpY2tsZXRlc3QocHJvdG8sIGlzbGljZShyYW5nZSgxMDApLCAqYXJncykpCisKKyAgICAgICAgIyBJc3N1ZSAjMjEzMjE6IGNoZWNrIHNvdXJjZSBpdGVyYXRvciBpcyBub3QgcmVmZXJlbmNlZAorICAgICAgICAjIGZyb20gaXNsaWNlKCkgYWZ0ZXIgdGhlIGxhdHRlciBoYXMgYmVlbiBleGhhdXN0ZWQKKyAgICAgICAgaXQgPSAoeCBmb3IgeCBpbiAoMSwgMikpCisgICAgICAgIHdyID0gd2Vha3JlZi5yZWYoaXQpCisgICAgICAgIGl0ID0gaXNsaWNlKGl0LCAxKQorICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZSh3cigpKQorICAgICAgICBsaXN0KGl0KSAjIGV4aGF1c3QgdGhlIGl0ZXJhdG9yCisgICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHdyKCkpCiAKICAgICBkZWYgdGVzdF90YWtld2hpbGUoc2VsZik6CiAgICAgICAgIGRhdGEgPSBbMSwgMywgNSwgMjAsIDIsIDQsIDYsIDhdCkBAIC0xMTMxLDcgKzExNzcsOCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoY29weS5jb3B5KHRha2V3aGlsZSh1bmRlcnRlbiwgZGF0YSkpKSwgWzEsIDMsIDVdKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoY29weS5kZWVwY29weSh0YWtld2hpbGUodW5kZXJ0ZW4sIGRhdGEpKSksCiAgICAgICAgICAgICAgICAgICAgICAgICBbMSwgMywgNV0pCi0gICAgICAgIHNlbGYucGlja2xldGVzdCh0YWtld2hpbGUodW5kZXJ0ZW4sIGRhdGEpKQorICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIHNlbGYucGlja2xldGVzdChwcm90bywgdGFrZXdoaWxlKHVuZGVydGVuLCBkYXRhKSkKIAogICAgIGRlZiB0ZXN0X2Ryb3B3aGlsZShzZWxmKToKICAgICAgICAgZGF0YSA9IFsxLCAzLCA1LCAyMCwgMiwgNCwgNiwgOF0KQEAgLTExNDcsNyArMTE5NCw4IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChjb3B5LmNvcHkoZHJvcHdoaWxlKHVuZGVydGVuLCBkYXRhKSkpLCBbMjAsIDIsIDQsIDYsIDhdKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoY29weS5kZWVwY29weShkcm9wd2hpbGUodW5kZXJ0ZW4sIGRhdGEpKSksCiAgICAgICAgICAgICAgICAgICAgICAgICBbMjAsIDIsIDQsIDYsIDhdKQotICAgICAgICBzZWxmLnBpY2tsZXRlc3QoZHJvcHdoaWxlKHVuZGVydGVuLCBkYXRhKSkKKyAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICBzZWxmLnBpY2tsZXRlc3QocHJvdG8sIGRyb3B3aGlsZSh1bmRlcnRlbiwgZGF0YSkpCiAKICAgICBkZWYgdGVzdF90ZWUoc2VsZik6CiAgICAgICAgIG4gPSAyMDAKQEAgLTEyMzAsNyArMTI3OCw3IEBACiAKICAgICAgICAgIyB0ZXN0IHRoYXQgdGVlIG9iamVjdHMgYXJlIHdlYWsgcmVmZXJlbmNhYmxlCiAgICAgICAgIGEsIGIgPSB0ZWUocmFuZ2UoMTApKQotICAgICAgICBwID0gcHJveHkoYSkKKyAgICAgICAgcCA9IHdlYWtyZWYucHJveHkoYSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRhdHRyKHAsICdfX2NsYXNzX18nKSwgdHlwZShiKSkKICAgICAgICAgZGVsIGEKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUmVmZXJlbmNlRXJyb3IsIGdldGF0dHIsIHAsICdfX2NsYXNzX18nKQpAQCAtMTI5MSwxNiArMTMzOSwyMSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoYiksIGxvbmdfYW5zWzYwOl0pCiAKICAgICAgICAgIyBjaGVjayBwaWNrbGUKLSAgICAgICAgc2VsZi5waWNrbGV0ZXN0KGl0ZXIodGVlKCdhYmMnKSkpCi0gICAgICAgIGEsIGIgPSB0ZWUoJ2FiYycpCi0gICAgICAgIHNlbGYucGlja2xldGVzdChhLCBjb21wYXJlPWFucykKLSAgICAgICAgc2VsZi5waWNrbGV0ZXN0KGIsIGNvbXBhcmU9YW5zKQorICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIHNlbGYucGlja2xldGVzdChwcm90bywgaXRlcih0ZWUoJ2FiYycpKSkKKyAgICAgICAgICAgIGEsIGIgPSB0ZWUoJ2FiYycpCisgICAgICAgICAgICBzZWxmLnBpY2tsZXRlc3QocHJvdG8sIGEsIGNvbXBhcmU9YW5zKQorICAgICAgICAgICAgc2VsZi5waWNrbGV0ZXN0KHByb3RvLCBiLCBjb21wYXJlPWFucykKIAogICAgICMgSXNzdWUgMTM0NTQ6IENyYXNoIHdoZW4gZGVsZXRpbmcgYmFja3dhcmQgaXRlcmF0b3IgZnJvbSB0ZWUoKQogICAgIGRlZiB0ZXN0X3RlZV9kZWxfYmFja3dhcmQoc2VsZik6CiAgICAgICAgIGZvcndhcmQsIGJhY2t3YXJkID0gdGVlKHJlcGVhdChOb25lLCAyMDAwMDAwMCkpCi0gICAgICAgIGFueShmb3J3YXJkKSAgIyBleGhhdXN0IHRoZSBpdGVyYXRvcgotICAgICAgICBkZWwgYmFja3dhcmQKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYW55KGZvcndhcmQpICAjIGV4aGF1c3QgdGhlIGl0ZXJhdG9yCisgICAgICAgICAgICBkZWwgYmFja3dhcmQKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgZGVsIGZvcndhcmQsIGJhY2t3YXJkCisgICAgICAgICAgICByYWlzZQogCiAgICAgZGVmIHRlc3RfU3RvcEl0ZXJhdGlvbihzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3RvcEl0ZXJhdGlvbiwgbmV4dCwgemlwKCkpCkBAIC0xMzM0LDExICsxMzg3LDE0IEBACiAgICAgICAgICMgY2hlY2sgY29weSwgZGVlcGNvcHksIHBpY2tsZQogICAgICAgICBkYXRhID0gWzEsIDIsIDMsIDQsIDVdCiAgICAgICAgIGFjY3VtdWxhdGVkID0gWzEsIDMsIDYsIDEwLCAxNV0KLSAgICAgICAgaXQgPSBhY2N1bXVsYXRlKGRhdGEpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMoaXQpKSksIGFjY3VtdWxhdGVkWzpdKQorICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIGl0ID0gYWNjdW11bGF0ZShkYXRhKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMoaXQsIHByb3RvKSkpLCBhY2N1bXVsYXRlZFs6XSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV4dChpdCksIDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QocGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhpdCwgcHJvdG8pKSksIGFjY3VtdWxhdGVkWzE6XSkKKyAgICAgICAgaXQgPSBhY2N1bXVsYXRlKGRhdGEpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV4dChpdCksIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKGl0KSkpLCBhY2N1bXVsYXRlZFsxOl0pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChjb3B5LmRlZXBjb3B5KGl0KSksIGFjY3VtdWxhdGVkWzE6XSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGNvcHkuY29weShpdCkpLCBhY2N1bXVsYXRlZFsxOl0pCiAKQEAgLTE3NTgsOSArMTgxNCwxNSBAQAogY2xhc3MgTGVuZ3RoVHJhbnNwYXJlbmN5KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiB0ZXN0X3JlcGVhdChzZWxmKToKLSAgICAgICAgZnJvbSB0ZXN0LnRlc3RfaXRlcmxlbiBpbXBvcnQgbGVuCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlcGVhdChOb25lLCA1MCkpLCA1MCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsZW4sIHJlcGVhdChOb25lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5sZW5ndGhfaGludChyZXBlYXQoTm9uZSwgNTApKSwgNTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IubGVuZ3RoX2hpbnQocmVwZWF0KE5vbmUsIDApKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5sZW5ndGhfaGludChyZXBlYXQoTm9uZSksIDEyKSwgMTIpCisKKyAgICBkZWYgdGVzdF9yZXBlYXRfd2l0aF9uZWdhdGl2ZV90aW1lcyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5sZW5ndGhfaGludChyZXBlYXQoTm9uZSwgLTEpKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5sZW5ndGhfaGludChyZXBlYXQoTm9uZSwgLTIpKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5sZW5ndGhfaGludChyZXBlYXQoTm9uZSwgdGltZXM9LTEpKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5sZW5ndGhfaGludChyZXBlYXQoTm9uZSwgdGltZXM9LTIpKSwgMCkKIAogY2xhc3MgUmVncmVzc2lvblRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKIApAQCAtMTgzNyw2ICsxODk5LDQ0IEBACiAgICAgICAgICAgICAgICAgIyB3ZSBleHBlY3QgdHlwZSBlcnJvcnMgYmVjYXVzZSBvZiB3cm9uZyBhcmd1bWVudCBjb3VudAogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oImRvZXMgbm90IHRha2Uga2V5d29yZCBhcmd1bWVudHMiLCBlcnIuYXJnc1swXSkKIAorQHN1cHBvcnQuY3B5dGhvbl9vbmx5CitjbGFzcyBTaXplb2ZUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuc3NpemVfdCA9IHN0cnVjdC5jYWxjc2l6ZSgnbicpCisKKyAgICBjaGVja19zaXplb2YgPSBzdXBwb3J0LmNoZWNrX3NpemVvZgorCisgICAgZGVmIHRlc3RfcHJvZHVjdF9zaXplb2Yoc2VsZik6CisgICAgICAgIGJhc2VzaXplID0gc3VwcG9ydC5jYWxjb2Jqc2l6ZSgnM1BpJykKKyAgICAgICAgY2hlY2sgPSBzZWxmLmNoZWNrX3NpemVvZgorICAgICAgICBjaGVjayhwcm9kdWN0KCdhYicsICcxMicpLCBiYXNlc2l6ZSArIDIgKiBzZWxmLnNzaXplX3QpCisgICAgICAgIGNoZWNrKHByb2R1Y3QoKigoJ2FiYycsKSAqIDEwKSksIGJhc2VzaXplICsgMTAgKiBzZWxmLnNzaXplX3QpCisKKyAgICBkZWYgdGVzdF9jb21iaW5hdGlvbnNfc2l6ZW9mKHNlbGYpOgorICAgICAgICBiYXNlc2l6ZSA9IHN1cHBvcnQuY2FsY29ianNpemUoJzNQbmknKQorICAgICAgICBjaGVjayA9IHNlbGYuY2hlY2tfc2l6ZW9mCisgICAgICAgIGNoZWNrKGNvbWJpbmF0aW9ucygnYWJjZCcsIDMpLCBiYXNlc2l6ZSArIDMgKiBzZWxmLnNzaXplX3QpCisgICAgICAgIGNoZWNrKGNvbWJpbmF0aW9ucyhyYW5nZSgxMCksIDQpLCBiYXNlc2l6ZSArIDQgKiBzZWxmLnNzaXplX3QpCisKKyAgICBkZWYgdGVzdF9jb21iaW5hdGlvbnNfd2l0aF9yZXBsYWNlbWVudF9zaXplb2Yoc2VsZik6CisgICAgICAgIGN3ciA9IGNvbWJpbmF0aW9uc193aXRoX3JlcGxhY2VtZW50CisgICAgICAgIGJhc2VzaXplID0gc3VwcG9ydC5jYWxjb2Jqc2l6ZSgnM1BuaScpCisgICAgICAgIGNoZWNrID0gc2VsZi5jaGVja19zaXplb2YKKyAgICAgICAgY2hlY2soY3dyKCdhYmNkJywgMyksIGJhc2VzaXplICsgMyAqIHNlbGYuc3NpemVfdCkKKyAgICAgICAgY2hlY2soY3dyKHJhbmdlKDEwKSwgNCksIGJhc2VzaXplICsgNCAqIHNlbGYuc3NpemVfdCkKKworICAgIGRlZiB0ZXN0X3Blcm11dGF0aW9uc19zaXplb2Yoc2VsZik6CisgICAgICAgIGJhc2VzaXplID0gc3VwcG9ydC5jYWxjb2Jqc2l6ZSgnNFBuaScpCisgICAgICAgIGNoZWNrID0gc2VsZi5jaGVja19zaXplb2YKKyAgICAgICAgY2hlY2socGVybXV0YXRpb25zKCdhYmNkJyksCisgICAgICAgICAgICAgIGJhc2VzaXplICsgNCAqIHNlbGYuc3NpemVfdCArIDQgKiBzZWxmLnNzaXplX3QpCisgICAgICAgIGNoZWNrKHBlcm11dGF0aW9ucygnYWJjZCcsIDMpLAorICAgICAgICAgICAgICBiYXNlc2l6ZSArIDQgKiBzZWxmLnNzaXplX3QgKyAzICogc2VsZi5zc2l6ZV90KQorICAgICAgICBjaGVjayhwZXJtdXRhdGlvbnMoJ2FiY2RlJywgMyksCisgICAgICAgICAgICAgIGJhc2VzaXplICsgNSAqIHNlbGYuc3NpemVfdCArIDMgKiBzZWxmLnNzaXplX3QpCisgICAgICAgIGNoZWNrKHBlcm11dGF0aW9ucyhyYW5nZSgxMCksIDQpLAorICAgICAgICAgICAgICBiYXNlc2l6ZSArIDEwICogc2VsZi5zc2l6ZV90ICsgNCAqIHNlbGYuc3NpemVfdCkKKwogCiBsaWJyZWZ0ZXN0ID0gIiIiIERvY3Rlc3QgZm9yIGV4YW1wbGVzIGluIHRoZSBsaWJyYXJ5IHJlZmVyZW5jZTogbGliaXRlcnRvb2xzLnRleAogCkBAIC0xOTg4LDYgKzIwODgsMTkgQEAKIC4uLiAgICAgIyB1bmlxdWVfanVzdHNlZW4oJ0FCQkNjQUQnLCBzdHIubG93ZXIpIC0tPiBBIEIgQyBBIEQKIC4uLiAgICAgcmV0dXJuIG1hcChuZXh0LCBtYXAoaXRlbWdldHRlcigxKSwgZ3JvdXBieShpdGVyYWJsZSwga2V5KSkpCiAKKz4+PiBkZWYgZmlyc3RfdHJ1ZShpdGVyYWJsZSwgZGVmYXVsdD1GYWxzZSwgcHJlZD1Ob25lKToKKy4uLiAgICAgJycnUmV0dXJucyB0aGUgZmlyc3QgdHJ1ZSB2YWx1ZSBpbiB0aGUgaXRlcmFibGUuCisuLi4KKy4uLiAgICAgSWYgbm8gdHJ1ZSB2YWx1ZSBpcyBmb3VuZCwgcmV0dXJucyAqZGVmYXVsdCoKKy4uLgorLi4uICAgICBJZiAqcHJlZCogaXMgbm90IE5vbmUsIHJldHVybnMgdGhlIGZpcnN0IGl0ZW0KKy4uLiAgICAgZm9yIHdoaWNoIHByZWQoaXRlbSkgaXMgdHJ1ZS4KKy4uLgorLi4uICAgICAnJycKKy4uLiAgICAgIyBmaXJzdF90cnVlKFthLGIsY10sIHgpIC0tPiBhIG9yIGIgb3IgYyBvciB4CisuLi4gICAgICMgZmlyc3RfdHJ1ZShbYSxiXSwgeCwgZikgLS0+IGEgaWYgZihhKSBlbHNlIGIgaWYgZihiKSBlbHNlIHgKKy4uLiAgICAgcmV0dXJuIG5leHQoZmlsdGVyKHByZWQsIGl0ZXJhYmxlKSwgZGVmYXVsdCkKKwogVGhpcyBpcyBub3QgcGFydCBvZiB0aGUgZXhhbXBsZXMgYnV0IGl0IHRlc3RzIHRvIG1ha2Ugc3VyZSB0aGUgZGVmaW5pdGlvbnMKIHBlcmZvcm0gYXMgcHVycG9ydGVkLgogCkBAIC0yMDY1LDYgKzIxNzgsOSBAQAogPj4+IGxpc3QodW5pcXVlX2p1c3RzZWVuKCdBQkJDY0FEJywgc3RyLmxvd2VyKSkKIFsnQScsICdCJywgJ0MnLCAnQScsICdEJ10KIAorPj4+IGZpcnN0X3RydWUoJ0FCQzBERUYxJywgJzknLCBzdHIuaXNkaWdpdCkKKycwJworCiAiIiIKIAogX190ZXN0X18gPSB7J2xpYnJlZnRlc3QnIDogbGlicmVmdGVzdH0KQEAgLTIwNzIsNyArMjE4OCw4IEBACiBkZWYgdGVzdF9tYWluKHZlcmJvc2U9Tm9uZSk6CiAgICAgdGVzdF9jbGFzc2VzID0gKFRlc3RCYXNpY09wcywgVGVzdFZhcmlvdXNJdGVyYXRvckFyZ3MsIFRlc3RHQywKICAgICAgICAgICAgICAgICAgICAgUmVncmVzc2lvblRlc3RzLCBMZW5ndGhUcmFuc3BhcmVuY3ksCi0gICAgICAgICAgICAgICAgICAgIFN1YmNsYXNzV2l0aEt3YXJnc1Rlc3QsIFRlc3RFeGFtcGxlcykKKyAgICAgICAgICAgICAgICAgICAgU3ViY2xhc3NXaXRoS3dhcmdzVGVzdCwgVGVzdEV4YW1wbGVzLAorICAgICAgICAgICAgICAgICAgICBTaXplb2ZUZXN0KQogICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KCp0ZXN0X2NsYXNzZXMpCiAKICAgICAjIHZlcmlmeSByZWZlcmVuY2UgY291bnRpbmcKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfanNvbi9fX2luaXRfXy5weSBiL0xpYi90ZXN0L3Rlc3RfanNvbi9fX2luaXRfXy5weQppbmRleCBmOTk0ZjliLi4yY2YxMDMyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2pzb24vX19pbml0X18ucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9qc29uL19faW5pdF9fLnB5CkBAIC00MiwyMyArNDIsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAnX2pzb24nKQogCiAKLWhlcmUgPSBvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pCi0KLWRlZiBsb2FkX3Rlc3RzKCphcmdzKToKLSAgICBzdWl0ZSA9IGFkZGl0aW9uYWxfdGVzdHMoKQotICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQotICAgIGZvciBmbiBpbiBvcy5saXN0ZGlyKGhlcmUpOgotICAgICAgICBpZiBmbi5zdGFydHN3aXRoKCJ0ZXN0IikgYW5kIGZuLmVuZHN3aXRoKCIucHkiKToKLSAgICAgICAgICAgIG1vZG5hbWUgPSAidGVzdC50ZXN0X2pzb24uIiArIGZuWzotM10KLSAgICAgICAgICAgIF9faW1wb3J0X18obW9kbmFtZSkKLSAgICAgICAgICAgIG1vZHVsZSA9IHN5cy5tb2R1bGVzW21vZG5hbWVdCi0gICAgICAgICAgICBzdWl0ZS5hZGRUZXN0cyhsb2FkZXIubG9hZFRlc3RzRnJvbU1vZHVsZShtb2R1bGUpKQotICAgIHJldHVybiBzdWl0ZQotCi1kZWYgYWRkaXRpb25hbF90ZXN0cygpOgorZGVmIGxvYWRfdGVzdHMobG9hZGVyLCBfLCBwYXR0ZXJuKToKICAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCiAgICAgZm9yIG1vZCBpbiAoanNvbiwganNvbi5lbmNvZGVyLCBqc29uLmRlY29kZXIpOgogICAgICAgICBzdWl0ZS5hZGRUZXN0KGRvY3Rlc3QuRG9jVGVzdFN1aXRlKG1vZCkpCiAgICAgc3VpdGUuYWRkVGVzdChUZXN0UHlUZXN0KCd0ZXN0X3B5anNvbicpKQogICAgIHN1aXRlLmFkZFRlc3QoVGVzdENUZXN0KCd0ZXN0X2Nqc29uJykpCi0gICAgcmV0dXJuIHN1aXRlCisKKyAgICBwa2dfZGlyID0gb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKQorICAgIHJldHVybiBzdXBwb3J0LmxvYWRfcGFja2FnZV90ZXN0cyhwa2dfZGlyLCBsb2FkZXIsIHN1aXRlLCBwYXR0ZXJuKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9qc29uL3Rlc3RfZGVjb2RlLnB5IGIvTGliL3Rlc3QvdGVzdF9qc29uL3Rlc3RfZGVjb2RlLnB5CmluZGV4IDE3MjQ1ZWIuLjU5MWIyZTIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfanNvbi90ZXN0X2RlY29kZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2pzb24vdGVzdF9kZWNvZGUucHkKQEAgLTEsNSArMSw1IEBACiBpbXBvcnQgZGVjaW1hbAotZnJvbSBpbyBpbXBvcnQgU3RyaW5nSU8KK2Zyb20gaW8gaW1wb3J0IFN0cmluZ0lPLCBCeXRlc0lPCiBmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBPcmRlcmVkRGljdAogZnJvbSB0ZXN0LnRlc3RfanNvbiBpbXBvcnQgUHlUZXN0LCBDVGVzdAogCkBAIC03MCw2ICs3MCwyNyBAQAogICAgICAgICBtc2cgPSAnZXNjYXBlJwogICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsIG1zZywgc2VsZi5sb2FkcywgcykKIAorICAgIGRlZiB0ZXN0X2ludmFsaWRfaW5wdXRfdHlwZShzZWxmKToKKyAgICAgICAgbXNnID0gJ3RoZSBKU09OIG9iamVjdCBtdXN0IGJlIHN0cicKKyAgICAgICAgZm9yIHZhbHVlIGluIFsxLCAzLjE0LCBiJ2J5dGVzJywgYidceGZmXHgwMCcsIFtdLCB7fSwgTm9uZV06CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFR5cGVFcnJvciwgbXNnLCBzZWxmLmxvYWRzLCB2YWx1ZSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFR5cGVFcnJvciwgbXNnKToKKyAgICAgICAgICAgIHNlbGYuanNvbi5sb2FkKEJ5dGVzSU8oYidbMSwyLDNdJykpCisKKyAgICBkZWYgdGVzdF9zdHJpbmdfd2l0aF91dGY4X2JvbShzZWxmKToKKyAgICAgICAgIyBzZWUgIzE4OTU4CisgICAgICAgIGJvbV9qc29uID0gIlsxLDIsM10iLmVuY29kZSgndXRmLTgtc2lnJykuZGVjb2RlKCd1dGYtOCcpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcikgYXMgY206CisgICAgICAgICAgICBzZWxmLmxvYWRzKGJvbV9qc29uKQorICAgICAgICBzZWxmLmFzc2VydEluKCdCT00nLCBzdHIoY20uZXhjZXB0aW9uKSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKSBhcyBjbToKKyAgICAgICAgICAgIHNlbGYuanNvbi5sb2FkKFN0cmluZ0lPKGJvbV9qc29uKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignQk9NJywgc3RyKGNtLmV4Y2VwdGlvbikpCisgICAgICAgICMgbWFrZSBzdXJlIHRoYXQgdGhlIEJPTSBpcyBub3QgZGV0ZWN0ZWQgaW4gdGhlIG1pZGRsZSBvZiBhIHN0cmluZworICAgICAgICBib21faW5fc3RyID0gJyJ7fSInLmZvcm1hdCgnJy5lbmNvZGUoJ3V0Zi04LXNpZycpLmRlY29kZSgndXRmLTgnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvYWRzKGJvbV9pbl9zdHIpLCAnXHVmZWZmJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmpzb24ubG9hZChTdHJpbmdJTyhib21faW5fc3RyKSksICdcdWZlZmYnKQorCiAgICAgZGVmIHRlc3RfbmVnYXRpdmVfaW5kZXgoc2VsZik6CiAgICAgICAgIGQgPSBzZWxmLmpzb24uSlNPTkRlY29kZXIoKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBkLnJhd19kZWNvZGUsICdhJyo0MiwgLTUwMDAwKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9qc29uL3Rlc3RfZW51bS5weSBiL0xpYi90ZXN0L3Rlc3RfanNvbi90ZXN0X2VudW0ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTBmNDE0OAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfanNvbi90ZXN0X2VudW0ucHkKQEAgLTAsMCArMSwxMjAgQEAKK2Zyb20gZW51bSBpbXBvcnQgRW51bSwgSW50RW51bQorZnJvbSBtYXRoIGltcG9ydCBpc25hbgorZnJvbSB0ZXN0LnRlc3RfanNvbiBpbXBvcnQgUHlUZXN0LCBDVGVzdAorCitTTUFMTCA9IDEKK0JJRyA9IDE8PDMyCitIVUdFID0gMTw8NjQKK1JFQUxMWV9IVUdFID0gMTw8OTYKKworY2xhc3MgQmlnTnVtKEludEVudW0pOgorICAgIHNtYWxsID0gU01BTEwKKyAgICBiaWcgPSBCSUcKKyAgICBodWdlID0gSFVHRQorICAgIHJlYWxseV9odWdlID0gUkVBTExZX0hVR0UKKworRSA9IDIuNzE4MjgxCitQSSA9IDMuMTQxNTkzCitUQVUgPSAyICogUEkKKworY2xhc3MgRmxvYXROdW0oZmxvYXQsIEVudW0pOgorICAgIGUgPSBFCisgICAgcGkgPSBQSQorICAgIHRhdSA9IFRBVQorCitJTkYgPSBmbG9hdCgnaW5mJykKK05FR19JTkYgPSBmbG9hdCgnLWluZicpCitOQU4gPSBmbG9hdCgnbmFuJykKKworY2xhc3MgV2llcmROdW0oZmxvYXQsIEVudW0pOgorICAgIGluZiA9IElORgorICAgIG5lZ19pbmYgPSBORUdfSU5GCisgICAgbmFuID0gTkFOCisKK2NsYXNzIFRlc3RFbnVtOgorCisgICAgZGVmIHRlc3RfZmxvYXRzKHNlbGYpOgorICAgICAgICBmb3IgZW51bSBpbiBGbG9hdE51bToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kdW1wcyhlbnVtKSwgcmVwcihlbnVtLnZhbHVlKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmxvYXQoc2VsZi5kdW1wcyhlbnVtKSksIGVudW0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9hZHMoc2VsZi5kdW1wcyhlbnVtKSksIGVudW0pCisKKyAgICBkZWYgdGVzdF93ZWlyZF9mbG9hdHMoc2VsZik6CisgICAgICAgIGZvciBlbnVtLCBleHBlY3RlZCBpbiB6aXAoV2llcmROdW0sICgnSW5maW5pdHknLCAnLUluZmluaXR5JywgJ05hTicpKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kdW1wcyhlbnVtKSwgZXhwZWN0ZWQpCisgICAgICAgICAgICBpZiBub3QgaXNuYW4oZW51bSk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbG9hdChzZWxmLmR1bXBzKGVudW0pKSwgZW51bSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9hZHMoc2VsZi5kdW1wcyhlbnVtKSksIGVudW0pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc25hbihmbG9hdChzZWxmLmR1bXBzKGVudW0pKSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzbmFuKHNlbGYubG9hZHMoc2VsZi5kdW1wcyhlbnVtKSkpKQorCisgICAgZGVmIHRlc3RfaW50cyhzZWxmKToKKyAgICAgICAgZm9yIGVudW0gaW4gQmlnTnVtOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmR1bXBzKGVudW0pLCBzdHIoZW51bS52YWx1ZSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludChzZWxmLmR1bXBzKGVudW0pKSwgZW51bSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb2FkcyhzZWxmLmR1bXBzKGVudW0pKSwgZW51bSkKKworICAgIGRlZiB0ZXN0X2xpc3Qoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kdW1wcyhsaXN0KEJpZ051bSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0cihbU01BTEwsIEJJRywgSFVHRSwgUkVBTExZX0hVR0VdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvYWRzKHNlbGYuZHVtcHMobGlzdChCaWdOdW0pKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdChCaWdOdW0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZHVtcHMobGlzdChGbG9hdE51bSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0cihbRSwgUEksIFRBVV0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9hZHMoc2VsZi5kdW1wcyhsaXN0KEZsb2F0TnVtKSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QoRmxvYXROdW0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZHVtcHMobGlzdChXaWVyZE51bSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgJ1tJbmZpbml0eSwgLUluZmluaXR5LCBOYU5dJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvYWRzKHNlbGYuZHVtcHMobGlzdChXaWVyZE51bSkpKVs6Ml0sCisgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdChXaWVyZE51bSlbOjJdKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNuYW4oc2VsZi5sb2FkcyhzZWxmLmR1bXBzKGxpc3QoV2llcmROdW0pKSlbMl0pKQorCisgICAgZGVmIHRlc3RfZGljdF9rZXlzKHNlbGYpOgorICAgICAgICBzLCBiLCBoLCByID0gQmlnTnVtCisgICAgICAgIGUsIHAsIHQgPSBGbG9hdE51bQorICAgICAgICBpLCBqLCBuID0gV2llcmROdW0KKyAgICAgICAgZCA9IHsKKyAgICAgICAgICAgIHM6J3RpbnknLCBiOidsYXJnZScsIGg6J2xhcmdlcicsIHI6J2xhcmdlc3QnLAorICAgICAgICAgICAgZToiRXVsZXIncyBudW1iZXIiLCBwOidwaScsIHQ6J3RhdScsCisgICAgICAgICAgICBpOidJbmZpbml0eScsIGo6Jy1JbmZpbml0eScsIG46J05hTicsCisgICAgICAgICAgICB9CisgICAgICAgIG5kID0gc2VsZi5sb2FkcyhzZWxmLmR1bXBzKGQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5kW3N0cihTTUFMTCldLCAndGlueScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmRbc3RyKEJJRyldLCAnbGFyZ2UnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5kW3N0cihIVUdFKV0sICdsYXJnZXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5kW3N0cihSRUFMTFlfSFVHRSldLCAnbGFyZ2VzdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmRbcmVwcihFKV0sICJFdWxlcidzIG51bWJlciIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmRbcmVwcihQSSldLCAncGknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5kW3JlcHIoVEFVKV0sICd0YXUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5kWydJbmZpbml0eSddLCAnSW5maW5pdHknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5kWyctSW5maW5pdHknXSwgJy1JbmZpbml0eScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmRbJ05hTiddLCAnTmFOJykKKworICAgIGRlZiB0ZXN0X2RpY3RfdmFsdWVzKHNlbGYpOgorICAgICAgICBkID0gZGljdCgKKyAgICAgICAgICAgICAgICB0aW55PUJpZ051bS5zbWFsbCwKKyAgICAgICAgICAgICAgICBsYXJnZT1CaWdOdW0uYmlnLAorICAgICAgICAgICAgICAgIGxhcmdlcj1CaWdOdW0uaHVnZSwKKyAgICAgICAgICAgICAgICBsYXJnZXN0PUJpZ051bS5yZWFsbHlfaHVnZSwKKyAgICAgICAgICAgICAgICBlPUZsb2F0TnVtLmUsCisgICAgICAgICAgICAgICAgcGk9RmxvYXROdW0ucGksCisgICAgICAgICAgICAgICAgdGF1PUZsb2F0TnVtLnRhdSwKKyAgICAgICAgICAgICAgICBpPVdpZXJkTnVtLmluZiwKKyAgICAgICAgICAgICAgICBqPVdpZXJkTnVtLm5lZ19pbmYsCisgICAgICAgICAgICAgICAgbj1XaWVyZE51bS5uYW4sCisgICAgICAgICAgICAgICAgKQorICAgICAgICBuZCA9IHNlbGYubG9hZHMoc2VsZi5kdW1wcyhkKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZFsndGlueSddLCBTTUFMTCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZFsnbGFyZ2UnXSwgQklHKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5kWydsYXJnZXInXSwgSFVHRSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZFsnbGFyZ2VzdCddLCBSRUFMTFlfSFVHRSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZFsnZSddLCBFKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5kWydwaSddLCBQSSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZFsndGF1J10sIFRBVSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZFsnaSddLCBJTkYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmRbJ2onXSwgTkVHX0lORikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzbmFuKG5kWyduJ10pKQorCitjbGFzcyBUZXN0UHlFbnVtKFRlc3RFbnVtLCBQeVRlc3QpOiBwYXNzCitjbGFzcyBUZXN0Q0VudW0oVGVzdEVudW0sIENUZXN0KTogcGFzcwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9qc29uL3Rlc3RfZmFpbC5weSBiL0xpYi90ZXN0L3Rlc3RfanNvbi90ZXN0X2ZhaWwucHkKaW5kZXggM2RkODc3YS4uN2NhYWZkYiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9qc29uL3Rlc3RfZmFpbC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2pzb24vdGVzdF9mYWlsLnB5CkBAIC0xLDQgKzEsNSBAQAogZnJvbSB0ZXN0LnRlc3RfanNvbiBpbXBvcnQgUHlUZXN0LCBDVGVzdAoraW1wb3J0IHJlCiAKICMgMjAwNy0xMC0wNQogSlNPTkRPQ1MgPSBbCkBAIC0xMDAsNiArMTAxLDk0IEBACiAgICAgICAgICNUaGlzIGlzIGZvciBweXRob24gZW5jb2RlcgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuZHVtcHMsIGRhdGEsIGluZGVudD1UcnVlKQogCisgICAgZGVmIHRlc3RfdHJ1bmNhdGVkX2lucHV0KHNlbGYpOgorICAgICAgICB0ZXN0X2Nhc2VzID0gWworICAgICAgICAgICAgKCcnLCAnRXhwZWN0aW5nIHZhbHVlJywgMCksCisgICAgICAgICAgICAoJ1snLCAnRXhwZWN0aW5nIHZhbHVlJywgMSksCisgICAgICAgICAgICAoJ1s0MicsICJFeHBlY3RpbmcgJywnIGRlbGltaXRlciIsIDMpLAorICAgICAgICAgICAgKCdbNDIsJywgJ0V4cGVjdGluZyB2YWx1ZScsIDQpLAorICAgICAgICAgICAgKCdbIicsICdVbnRlcm1pbmF0ZWQgc3RyaW5nIHN0YXJ0aW5nIGF0JywgMSksCisgICAgICAgICAgICAoJ1sic3BhbScsICdVbnRlcm1pbmF0ZWQgc3RyaW5nIHN0YXJ0aW5nIGF0JywgMSksCisgICAgICAgICAgICAoJ1sic3BhbSInLCAiRXhwZWN0aW5nICcsJyBkZWxpbWl0ZXIiLCA3KSwKKyAgICAgICAgICAgICgnWyJzcGFtIiwnLCAnRXhwZWN0aW5nIHZhbHVlJywgOCksCisgICAgICAgICAgICAoJ3snLCAnRXhwZWN0aW5nIHByb3BlcnR5IG5hbWUgZW5jbG9zZWQgaW4gZG91YmxlIHF1b3RlcycsIDEpLAorICAgICAgICAgICAgKCd7IicsICdVbnRlcm1pbmF0ZWQgc3RyaW5nIHN0YXJ0aW5nIGF0JywgMSksCisgICAgICAgICAgICAoJ3sic3BhbScsICdVbnRlcm1pbmF0ZWQgc3RyaW5nIHN0YXJ0aW5nIGF0JywgMSksCisgICAgICAgICAgICAoJ3sic3BhbSInLCAiRXhwZWN0aW5nICc6JyBkZWxpbWl0ZXIiLCA3KSwKKyAgICAgICAgICAgICgneyJzcGFtIjonLCAnRXhwZWN0aW5nIHZhbHVlJywgOCksCisgICAgICAgICAgICAoJ3sic3BhbSI6NDInLCAiRXhwZWN0aW5nICcsJyBkZWxpbWl0ZXIiLCAxMCksCisgICAgICAgICAgICAoJ3sic3BhbSI6NDIsJywgJ0V4cGVjdGluZyBwcm9wZXJ0eSBuYW1lIGVuY2xvc2VkIGluIGRvdWJsZSBxdW90ZXMnLCAxMSksCisgICAgICAgIF0KKyAgICAgICAgdGVzdF9jYXNlcyArPSBbCisgICAgICAgICAgICAoJyInLCAnVW50ZXJtaW5hdGVkIHN0cmluZyBzdGFydGluZyBhdCcsIDApLAorICAgICAgICAgICAgKCcic3BhbScsICdVbnRlcm1pbmF0ZWQgc3RyaW5nIHN0YXJ0aW5nIGF0JywgMCksCisgICAgICAgIF0KKyAgICAgICAgZm9yIGRhdGEsIG1zZywgaWR4IGluIHRlc3RfY2FzZXM6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgcideezB9OiBsaW5lIDEgY29sdW1uIHsxfSBcKGNoYXIgezJ9XCknLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgcmUuZXNjYXBlKG1zZyksIGlkeCArIDEsIGlkeCksCisgICAgICAgICAgICAgICAgc2VsZi5sb2FkcywgZGF0YSkKKworICAgIGRlZiB0ZXN0X3VuZXhwZWN0ZWRfZGF0YShzZWxmKToKKyAgICAgICAgdGVzdF9jYXNlcyA9IFsKKyAgICAgICAgICAgICgnWywnLCAnRXhwZWN0aW5nIHZhbHVlJywgMSksCisgICAgICAgICAgICAoJ3sic3BhbSI6W30nLCAnRXhwZWN0aW5nIHZhbHVlJywgOSksCisgICAgICAgICAgICAoJ1s0MjonLCAiRXhwZWN0aW5nICcsJyBkZWxpbWl0ZXIiLCAzKSwKKyAgICAgICAgICAgICgnWzQyICJzcGFtIicsICJFeHBlY3RpbmcgJywnIGRlbGltaXRlciIsIDQpLAorICAgICAgICAgICAgKCdbNDIsXScsICdFeHBlY3RpbmcgdmFsdWUnLCA0KSwKKyAgICAgICAgICAgICgneyJzcGFtIjpbNDJ9JywgIkV4cGVjdGluZyAnLCcgZGVsaW1pdGVyIiwgMTEpLAorICAgICAgICAgICAgKCdbIl0nLCAnVW50ZXJtaW5hdGVkIHN0cmluZyBzdGFydGluZyBhdCcsIDEpLAorICAgICAgICAgICAgKCdbInNwYW0iOicsICJFeHBlY3RpbmcgJywnIGRlbGltaXRlciIsIDcpLAorICAgICAgICAgICAgKCdbInNwYW0iLF0nLCAnRXhwZWN0aW5nIHZhbHVlJywgOCksCisgICAgICAgICAgICAoJ3s6JywgJ0V4cGVjdGluZyBwcm9wZXJ0eSBuYW1lIGVuY2xvc2VkIGluIGRvdWJsZSBxdW90ZXMnLCAxKSwKKyAgICAgICAgICAgICgneywnLCAnRXhwZWN0aW5nIHByb3BlcnR5IG5hbWUgZW5jbG9zZWQgaW4gZG91YmxlIHF1b3RlcycsIDEpLAorICAgICAgICAgICAgKCd7NDInLCAnRXhwZWN0aW5nIHByb3BlcnR5IG5hbWUgZW5jbG9zZWQgaW4gZG91YmxlIHF1b3RlcycsIDEpLAorICAgICAgICAgICAgKCdbe10nLCAnRXhwZWN0aW5nIHByb3BlcnR5IG5hbWUgZW5jbG9zZWQgaW4gZG91YmxlIHF1b3RlcycsIDIpLAorICAgICAgICAgICAgKCd7InNwYW0iLCcsICJFeHBlY3RpbmcgJzonIGRlbGltaXRlciIsIDcpLAorICAgICAgICAgICAgKCd7InNwYW0ifScsICJFeHBlY3RpbmcgJzonIGRlbGltaXRlciIsIDcpLAorICAgICAgICAgICAgKCdbeyJzcGFtIl0nLCAiRXhwZWN0aW5nICc6JyBkZWxpbWl0ZXIiLCA4KSwKKyAgICAgICAgICAgICgneyJzcGFtIjp9JywgJ0V4cGVjdGluZyB2YWx1ZScsIDgpLAorICAgICAgICAgICAgKCdbeyJzcGFtIjpdJywgJ0V4cGVjdGluZyB2YWx1ZScsIDkpLAorICAgICAgICAgICAgKCd7InNwYW0iOjQyICJoYW0iJywgIkV4cGVjdGluZyAnLCcgZGVsaW1pdGVyIiwgMTEpLAorICAgICAgICAgICAgKCdbeyJzcGFtIjo0Ml0nLCAiRXhwZWN0aW5nICcsJyBkZWxpbWl0ZXIiLCAxMSksCisgICAgICAgICAgICAoJ3sic3BhbSI6NDIsfScsICdFeHBlY3RpbmcgcHJvcGVydHkgbmFtZSBlbmNsb3NlZCBpbiBkb3VibGUgcXVvdGVzJywgMTEpLAorICAgICAgICBdCisgICAgICAgIGZvciBkYXRhLCBtc2csIGlkeCBpbiB0ZXN0X2Nhc2VzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgIHInXnswfTogbGluZSAxIGNvbHVtbiB7MX0gXChjaGFyIHsyfVwpJy5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgIHJlLmVzY2FwZShtc2cpLCBpZHggKyAxLCBpZHgpLAorICAgICAgICAgICAgICAgIHNlbGYubG9hZHMsIGRhdGEpCisKKyAgICBkZWYgdGVzdF9leHRyYV9kYXRhKHNlbGYpOgorICAgICAgICB0ZXN0X2Nhc2VzID0gWworICAgICAgICAgICAgKCdbXV0nLCAnRXh0cmEgZGF0YScsIDIpLAorICAgICAgICAgICAgKCd7fX0nLCAnRXh0cmEgZGF0YScsIDIpLAorICAgICAgICAgICAgKCdbXSxbXScsICdFeHRyYSBkYXRhJywgMiksCisgICAgICAgICAgICAoJ3t9LHt9JywgJ0V4dHJhIGRhdGEnLCAyKSwKKyAgICAgICAgXQorICAgICAgICB0ZXN0X2Nhc2VzICs9IFsKKyAgICAgICAgICAgICgnNDIsInNwYW0iJywgJ0V4dHJhIGRhdGEnLCAyKSwKKyAgICAgICAgICAgICgnInNwYW0iLDQyJywgJ0V4dHJhIGRhdGEnLCA2KSwKKyAgICAgICAgXQorICAgICAgICBmb3IgZGF0YSwgbXNnLCBpZHggaW4gdGVzdF9jYXNlczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICByJ157MH06IGxpbmUgMSBjb2x1bW4gezF9IC0gbGluZSAxIGNvbHVtbiB7Mn0nCisgICAgICAgICAgICAgICAgcicgXChjaGFyIHszfSAtIHs0fVwpJy5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgIHJlLmVzY2FwZShtc2cpLCBpZHggKyAxLCBsZW4oZGF0YSkgKyAxLCBpZHgsIGxlbihkYXRhKSksCisgICAgICAgICAgICAgICAgc2VsZi5sb2FkcywgZGF0YSkKKworICAgIGRlZiB0ZXN0X2xpbmVjb2woc2VsZik6CisgICAgICAgIHRlc3RfY2FzZXMgPSBbCisgICAgICAgICAgICAoJyEnLCAxLCAxLCAwKSwKKyAgICAgICAgICAgICgnICEnLCAxLCAyLCAxKSwKKyAgICAgICAgICAgICgnXG4hJywgMiwgMSwgMSksCisgICAgICAgICAgICAoJ1xuICBcblxuICAgICAhJywgNCwgNiwgMTApLAorICAgICAgICBdCisgICAgICAgIGZvciBkYXRhLCBsaW5lLCBjb2wsIGlkeCBpbiB0ZXN0X2Nhc2VzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgIHInXkV4cGVjdGluZyB2YWx1ZTogbGluZSB7MH0gY29sdW1uIHsxfScKKyAgICAgICAgICAgICAgICByJyBcKGNoYXIgezJ9XCkkJy5mb3JtYXQobGluZSwgY29sLCBpZHgpLAorICAgICAgICAgICAgICAgIHNlbGYubG9hZHMsIGRhdGEpCiAKIGNsYXNzIFRlc3RQeUZhaWwoVGVzdEZhaWwsIFB5VGVzdCk6IHBhc3MKIGNsYXNzIFRlc3RDRmFpbChUZXN0RmFpbCwgQ1Rlc3QpOiBwYXNzCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2pzb24vdGVzdF9pbmRlbnQucHkgYi9MaWIvdGVzdC90ZXN0X2pzb24vdGVzdF9pbmRlbnQucHkKaW5kZXggYTRkNGQyMC4uZTA3ODU2ZiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9qc29uL3Rlc3RfaW5kZW50LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfanNvbi90ZXN0X2luZGVudC5weQpAQCAtMzIsNiArMzIsOCBAQAogICAgICAgICBkMSA9IHNlbGYuZHVtcHMoaCkKICAgICAgICAgZDIgPSBzZWxmLmR1bXBzKGgsIGluZGVudD0yLCBzb3J0X2tleXM9VHJ1ZSwgc2VwYXJhdG9ycz0oJywnLCAnOiAnKSkKICAgICAgICAgZDMgPSBzZWxmLmR1bXBzKGgsIGluZGVudD0nXHQnLCBzb3J0X2tleXM9VHJ1ZSwgc2VwYXJhdG9ycz0oJywnLCAnOiAnKSkKKyAgICAgICAgZDQgPSBzZWxmLmR1bXBzKGgsIGluZGVudD0yLCBzb3J0X2tleXM9VHJ1ZSkKKyAgICAgICAgZDUgPSBzZWxmLmR1bXBzKGgsIGluZGVudD0nXHQnLCBzb3J0X2tleXM9VHJ1ZSkKIAogICAgICAgICBoMSA9IHNlbGYubG9hZHMoZDEpCiAgICAgICAgIGgyID0gc2VsZi5sb2FkcyhkMikKQEAgLTQyLDYgKzQ0LDggQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoMywgaCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMiwgZXhwZWN0LmV4cGFuZHRhYnMoMikpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDMsIGV4cGVjdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkNCwgZDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDUsIGQzKQogCiAgICAgZGVmIHRlc3RfaW5kZW50MChzZWxmKToKICAgICAgICAgaCA9IHszOiAxfQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9qc29uL3Rlc3Rfc2VwYXJhdG9ycy5weSBiL0xpYi90ZXN0L3Rlc3RfanNvbi90ZXN0X3NlcGFyYXRvcnMucHkKaW5kZXggODRhMmJlOS4uOGNhNTE3NCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9qc29uL3Rlc3Rfc2VwYXJhdG9ycy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2pzb24vdGVzdF9zZXBhcmF0b3JzLnB5CkBAIC0zOSw2ICszOSwxMiBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGgyLCBoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQyLCBleHBlY3QpCiAKKyAgICBkZWYgdGVzdF9pbGxlZ2FsX3NlcGFyYXRvcnMoc2VsZik6CisgICAgICAgIGggPSB7MTogMiwgMzogNH0KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmR1bXBzLCBoLCBzZXBhcmF0b3JzPShiJywgJywgJzogJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5kdW1wcywgaCwgc2VwYXJhdG9ycz0oJywgJywgYic6ICcpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuZHVtcHMsIGgsIHNlcGFyYXRvcnM9KGInLCAnLCBiJzogJykpCisKIAogY2xhc3MgVGVzdFB5U2VwYXJhdG9ycyhUZXN0U2VwYXJhdG9ycywgUHlUZXN0KTogcGFzcwogY2xhc3MgVGVzdENTZXBhcmF0b3JzKFRlc3RTZXBhcmF0b3JzLCBDVGVzdCk6IHBhc3MKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfa2V5d29yZC5weSBiL0xpYi90ZXN0L3Rlc3Rfa2V5d29yZC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjk5ZjUyCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9rZXl3b3JkLnB5CkBAIC0wLDAgKzEsMTM4IEBACitpbXBvcnQga2V5d29yZAoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKK2ltcG9ydCBmaWxlY21wCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgdGV4dHdyYXAKKworS0VZV09SRF9GSUxFICAgICAgICAgICAgID0gc3VwcG9ydC5maW5kZmlsZSgna2V5d29yZC5weScpCitHUkFNTUFSX0ZJTEUgICAgICAgICAgICAgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5zcGxpdChfX2ZpbGVfXylbMF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy4uJywgJy4uJywgJ1B5dGhvbicsICdncmFtaW5pdC5jJykKK1RFU1RfUFlfRklMRSAgICAgICAgICAgICA9ICdrZXl3b3JkX3Rlc3QucHknCitHUkFNTUFSX1RFU1RfRklMRSAgICAgICAgPSAnZ3JhbWluaXRfdGVzdC5jJworUFlfRklMRV9XSVRIT1VUX0tFWVdPUkRTID0gJ21pbmltYWxfa2V5d29yZC5weScKK05PTkVYSVNURU5UX0ZJTEUgICAgICAgICA9ICdub3RfaGVyZS50eHQnCisKKworY2xhc3MgVGVzdF9pc2tleXdvcmQodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X3RydWVfaXNfYV9rZXl3b3JkKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoa2V5d29yZC5pc2tleXdvcmQoJ1RydWUnKSkKKworICAgIGRlZiB0ZXN0X3VwcGVyY2FzZV90cnVlX2lzX25vdF9hX2tleXdvcmQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoa2V5d29yZC5pc2tleXdvcmQoJ1RSVUUnKSkKKworICAgIGRlZiB0ZXN0X25vbmVfdmFsdWVfaXNfbm90X2Ffa2V5d29yZChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShrZXl3b3JkLmlza2V5d29yZChOb25lKSkKKworICAgICMgVGhpcyBpcyBwcm9iYWJseSBhbiBhY2NpZGVudCBvZiB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiwgYnV0IHNob3VsZCBiZQorICAgICMgcHJlc2VydmVkIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgorICAgIGRlZiB0ZXN0X2NoYW5naW5nX3RoZV9rd2xpc3RfZG9lc19ub3RfYWZmZWN0X2lza2V5d29yZChzZWxmKToKKyAgICAgICAgb2xkbGlzdCA9IGtleXdvcmQua3dsaXN0CisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzZXRhdHRyLCBrZXl3b3JkLCAna3dsaXN0Jywgb2xkbGlzdCkKKyAgICAgICAga2V5d29yZC5rd2xpc3QgPSBbJ2l0cycsICdhbGwnLCAnZWdncycsICdiZWFucycsICdhbmQnLCAnYScsICdzbGljZSddCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoa2V5d29yZC5pc2tleXdvcmQoJ2VnZ3MnKSkKKworCitjbGFzcyBUZXN0S2V5d29yZEdlbmVyYXRpb24odW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIF9jb3B5X2ZpbGVfd2l0aG91dF9nZW5lcmF0ZWRfa2V5d29yZHMoc2VsZiwgc291cmNlX2ZpbGUsIGRlc3RfZmlsZSk6CisgICAgICAgIHdpdGggb3Blbihzb3VyY2VfZmlsZSwgJ3JiJykgYXMgZnA6CisgICAgICAgICAgICBsaW5lcyA9IGZwLnJlYWRsaW5lcygpCisgICAgICAgIG5sID0gbGluZXNbMF1bbGVuKGxpbmVzWzBdLnN0cmlwKCkpOl0KKyAgICAgICAgd2l0aCBvcGVuKGRlc3RfZmlsZSwgJ3diJykgYXMgZnA6CisgICAgICAgICAgICBmcC53cml0ZWxpbmVzKGxpbmVzWzpsaW5lcy5pbmRleChiIiMtLXN0YXJ0IGtleXdvcmRzLS0iICsgbmwpICsgMV0pCisgICAgICAgICAgICBmcC53cml0ZWxpbmVzKGxpbmVzW2xpbmVzLmluZGV4KGIiIy0tZW5kIGtleXdvcmRzLS0iICsgbmwpOl0pCisKKyAgICBkZWYgX2dlbmVyYXRlX2tleXdvcmRzKHNlbGYsIGdyYW1tYXJfZmlsZSwgdGFyZ2V0X2tleXdvcmRfcHlfZmlsZSk6CisgICAgICAgIHByb2MgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtFWVdPUkRfRklMRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyYW1tYXJfZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldF9rZXl3b3JkX3B5X2ZpbGVdLCBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICBzdGRlcnIgPSBwcm9jLmNvbW11bmljYXRlKClbMV0KKyAgICAgICAgcmV0dXJuIHByb2MucmV0dXJuY29kZSwgc3RkZXJyCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKG5vdCBvcy5wYXRoLmV4aXN0cyhHUkFNTUFSX0ZJTEUpLAorICAgICAgICAgICAgICAgICAgICAgJ3Rlc3Qgb25seSB3b3JrcyBmcm9tIHNvdXJjZSBidWlsZCBkaXJlY3RvcnknKQorICAgIGRlZiB0ZXN0X3JlYWxfZ3JhbW1hcl9hbmRfa2V5d29yZF9maWxlKHNlbGYpOgorICAgICAgICBzZWxmLl9jb3B5X2ZpbGVfd2l0aG91dF9nZW5lcmF0ZWRfa2V5d29yZHMoS0VZV09SRF9GSUxFLCBURVNUX1BZX0ZJTEUpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzdXBwb3J0LnVubGluaywgVEVTVF9QWV9GSUxFKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZpbGVjbXAuY21wKEtFWVdPUkRfRklMRSwgVEVTVF9QWV9GSUxFKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMCwgYicnKSwgc2VsZi5fZ2VuZXJhdGVfa2V5d29yZHMoR1JBTU1BUl9GSUxFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBURVNUX1BZX0ZJTEUpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZmlsZWNtcC5jbXAoS0VZV09SRF9GSUxFLCBURVNUX1BZX0ZJTEUpKQorCisgICAgZGVmIHRlc3RfZ3JhbW1hcihzZWxmKToKKyAgICAgICAgc2VsZi5fY29weV9maWxlX3dpdGhvdXRfZ2VuZXJhdGVkX2tleXdvcmRzKEtFWVdPUkRfRklMRSwgVEVTVF9QWV9GSUxFKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoc3VwcG9ydC51bmxpbmssIFRFU1RfUFlfRklMRSkKKyAgICAgICAgd2l0aCBvcGVuKEdSQU1NQVJfVEVTVF9GSUxFLCAndycpIGFzIGZwOgorICAgICAgICAgICAgIyBTb21lIG9mIHRoZXNlIGFyZSBwcm9iYWJseSBpbXBsZW1lbnRhdGlvbiBhY2NpZGVudHMuCisgICAgICAgICAgICBmcC53cml0ZWxpbmVzKHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICAgICAgezIsIDF9LAorICAgICAgICAgICAgICAgICAgICB7MTEsICJlbmNvZGluZ19kZWNsIiwgMCwgMiwgc3RhdGVzXzc5LAorICAgICAgICAgICAgICAgICAgICAgIlwwMDBcMDAwXDA0MFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMCIKKyAgICAgICAgICAgICAgICAgICAgICJcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDAifSwKKyAgICAgICAgICAgICAgICAgICAgezEsICJqZWxsbyJ9LAorICAgICAgICAgICAgICAgICAgICB7MzI2LCAwfSwKKyAgICAgICAgICAgICAgICAgICAgezEsICJ0dXJuaXAifSwKKyAgICAgICAgICAgICAgICBcdHsxLCAiVGhpcyBvbmUgaXMgdGFiIGluZGVudGVkIgorICAgICAgICAgICAgICAgICAgICB7Mjc4LCAwfSwKKyAgICAgICAgICAgICAgICAgICAgezEsICJjcmF6eSBidXQgbGVnYWwiCisgICAgICAgICAgICAgICAgImFsc28gbGVnYWwiIHsxLCAiCisgICAgICAgICAgICAgICAgICAgIHsxLCAiY29udGludWUifSwKKyAgICAgICAgICAgICAgICAgICB7MSwgImxlbW9uIn0sCisgICAgICAgICAgICAgICAgICAgICB7MSwgInRvbWF0byJ9LAorICAgICAgICAgICAgICAgIHsxLCAid2lnaWkifSwKKyAgICAgICAgICAgICAgICAgICAgezEsICdubyBnb29kJ30KKyAgICAgICAgICAgICAgICAgICAgezI4MywgMH0sCisgICAgICAgICAgICAgICAgICAgIHsxLCAgInRvbyBtYW55IHNwYWNlcyJ9IiIiKSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHN1cHBvcnQudW5saW5rLCBHUkFNTUFSX1RFU1RfRklMRSkKKyAgICAgICAgc2VsZi5fZ2VuZXJhdGVfa2V5d29yZHMoR1JBTU1BUl9URVNUX0ZJTEUsIFRFU1RfUFlfRklMRSkKKyAgICAgICAgZXhwZWN0ZWQgPSBbCisgICAgICAgICAgICAiICAgICAgICAnVGhpcyBvbmUgaXMgdGFiIGluZGVudGVkJywiLAorICAgICAgICAgICAgIiAgICAgICAgJ2Fsc28gbGVnYWwnLCIsCisgICAgICAgICAgICAiICAgICAgICAnY29udGludWUnLCIsCisgICAgICAgICAgICAiICAgICAgICAnY3JhenkgYnV0IGxlZ2FsJywiLAorICAgICAgICAgICAgIiAgICAgICAgJ2plbGxvJywiLAorICAgICAgICAgICAgIiAgICAgICAgJ2xlbW9uJywiLAorICAgICAgICAgICAgIiAgICAgICAgJ3RvbWF0bycsIiwKKyAgICAgICAgICAgICIgICAgICAgICd0dXJuaXAnLCIsCisgICAgICAgICAgICAiICAgICAgICAnd2lnaWknLCIsCisgICAgICAgICAgICBdCisgICAgICAgIHdpdGggb3BlbihURVNUX1BZX0ZJTEUpIGFzIGZwOgorICAgICAgICAgICAgbGluZXMgPSBmcC5yZWFkKCkuc3BsaXRsaW5lcygpCisgICAgICAgIHN0YXJ0ID0gbGluZXMuaW5kZXgoIiMtLXN0YXJ0IGtleXdvcmRzLS0iKSArIDEKKyAgICAgICAgZW5kID0gbGluZXMuaW5kZXgoIiMtLWVuZCBrZXl3b3Jkcy0tIikKKyAgICAgICAgYWN0dWFsID0gbGluZXNbc3RhcnQ6ZW5kXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9lbXB0eV9ncmFtbWFyX3Jlc3VsdHNfaW5fbm9fa2V5d29yZHMoc2VsZik6CisgICAgICAgIHNlbGYuX2NvcHlfZmlsZV93aXRob3V0X2dlbmVyYXRlZF9rZXl3b3JkcyhLRVlXT1JEX0ZJTEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQWV9GSUxFX1dJVEhPVVRfS0VZV09SRFMpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzdXBwb3J0LnVubGluaywgUFlfRklMRV9XSVRIT1VUX0tFWVdPUkRTKQorICAgICAgICBzaHV0aWwuY29weWZpbGUoS0VZV09SRF9GSUxFLCBURVNUX1BZX0ZJTEUpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzdXBwb3J0LnVubGluaywgVEVTVF9QWV9GSUxFKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgwLCBiJycpLCBzZWxmLl9nZW5lcmF0ZV9rZXl3b3Jkcyhvcy5kZXZudWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBURVNUX1BZX0ZJTEUpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZmlsZWNtcC5jbXAoVEVTVF9QWV9GSUxFLCBQWV9GSUxFX1dJVEhPVVRfS0VZV09SRFMpKQorCisgICAgZGVmIHRlc3Rfa2V5d29yZHNfcHlfd2l0aG91dF9tYXJrZXJzX3Byb2R1Y2VzX2Vycm9yKHNlbGYpOgorICAgICAgICByYywgc3RkZXJyID0gc2VsZi5fZ2VuZXJhdGVfa2V5d29yZHMob3MuZGV2bnVsbCwgb3MuZGV2bnVsbCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChyYywgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSZWdleChzdGRlcnIsIGInZG9lcyBub3QgY29udGFpbiBmb3JtYXQgbWFya2VycycpCisKKyAgICBkZWYgdGVzdF9taXNzaW5nX2dyYW1tYXJfZmlsZV9wcm9kdWNlc19lcnJvcihzZWxmKToKKyAgICAgICAgcmMsIHN0ZGVyciA9IHNlbGYuX2dlbmVyYXRlX2tleXdvcmRzKE5PTkVYSVNURU5UX0ZJTEUsIEtFWVdPUkRfRklMRSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChyYywgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSZWdleChzdGRlcnIsIGInKD9tcyknICsgTk9ORVhJU1RFTlRfRklMRS5lbmNvZGUoKSkKKworICAgIGRlZiB0ZXN0X21pc3Npbmdfa2V5d29yZHNfcHlfZmlsZV9wcm9kdWNlc19lcnJvcihzZWxmKToKKyAgICAgICAgcmMsIHN0ZGVyciA9IHNlbGYuX2dlbmVyYXRlX2tleXdvcmRzKG9zLmRldm51bGwsIE5PTkVYSVNURU5UX0ZJTEUpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocmMsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXgoc3RkZXJyLCBiJyg/bXMpJyArIE5PTkVYSVNURU5UX0ZJTEUuZW5jb2RlKCkpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfa2V5d29yZG9ubHlhcmcucHkgYi9MaWIvdGVzdC90ZXN0X2tleXdvcmRvbmx5YXJnLnB5CmluZGV4IDZjMmZmMDAuLjdmMzE1ZDQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfa2V5d29yZG9ubHlhcmcucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9rZXl3b3Jkb25seWFyZy5weQpAQCAtMTc0LDYgKzE3NCwxOCBAQAogICAgICAgICAgICAgICAgIHJldHVybiBfX2EKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChYKCkuZigpLCA0MikKIAorICAgIGRlZiB0ZXN0X2RlZmF1bHRfZXZhbHVhdGlvbl9vcmRlcihzZWxmKToKKyAgICAgICAgIyBTZWUgaXNzdWUgMTY5NjcKKyAgICAgICAgYSA9IDQyCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoTmFtZUVycm9yKSBhcyBlcnI6CisgICAgICAgICAgICBkZWYgZih2PWEsIHg9YiwgKiwgeT1jLCB6PWQpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZXJyLmV4Y2VwdGlvbiksICJuYW1lICdiJyBpcyBub3QgZGVmaW5lZCIpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoTmFtZUVycm9yKSBhcyBlcnI6CisgICAgICAgICAgICBmID0gbGFtYmRhIHY9YSwgeD1iLCAqLCB5PWMsIHo9ZDogTm9uZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlcnIuZXhjZXB0aW9uKSwgIm5hbWUgJ2InIGlzIG5vdCBkZWZpbmVkIikKKworCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgcnVuX3VuaXR0ZXN0KEtleXdvcmRPbmx5QXJnVGVzdENhc2UpCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfa3F1ZXVlLnB5IGIvTGliL3Rlc3QvdGVzdF9rcXVldWUucHkKaW5kZXggZTVlNjA1OC4uZjc5YmQ4OSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9rcXVldWUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9rcXVldWUucHkKQEAgLTg2LDYgKzg2LDMxIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXYsIGV2KQogICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGV2LCBvdGhlcikKIAorICAgICAgICAjIElzc3VlIDExOTczCisgICAgICAgIGJpZ251bSA9IDB4ZmZmZgorICAgICAgICBldiA9IHNlbGVjdC5rZXZlbnQoMCwgMSwgYmlnbnVtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2LmlkZW50LCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2LmZpbHRlciwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldi5mbGFncywgYmlnbnVtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2LmZmbGFncywgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldi5kYXRhLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2LnVkYXRhLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2LCBldikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChldiwgb3RoZXIpCisKKyAgICAgICAgIyBJc3N1ZSAxMTk3MworICAgICAgICBiaWdudW0gPSAweGZmZmZmZmZmCisgICAgICAgIGV2ID0gc2VsZWN0LmtldmVudCgwLCAxLCAyLCBiaWdudW0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXYuaWRlbnQsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXYuZmlsdGVyLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2LmZsYWdzLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2LmZmbGFncywgYmlnbnVtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2LmRhdGEsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXYudWRhdGEsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXYsIGV2KQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGV2LCBvdGhlcikKKworCiAgICAgZGVmIHRlc3RfcXVldWVfZXZlbnQoc2VsZik6CiAgICAgICAgIHNlcnZlclNvY2tldCA9IHNvY2tldC5zb2NrZXQoKQogICAgICAgICBzZXJ2ZXJTb2NrZXQuYmluZCgoJzEyNy4wLjAuMScsIDApKQpAQCAtOTQsNyArMTE5LDcgQEAKICAgICAgICAgY2xpZW50LnNldGJsb2NraW5nKEZhbHNlKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBjbGllbnQuY29ubmVjdCgoJzEyNy4wLjAuMScsIHNlcnZlclNvY2tldC5nZXRzb2NrbmFtZSgpWzFdKSkKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBlOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLmFyZ3NbMF0sIGVycm5vLkVJTlBST0dSRVNTKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgI3JhaXNlIEFzc2VydGlvbkVycm9yKCJDb25uZWN0IHNob3VsZCBoYXZlIHJhaXNlZCBFSU5QUk9HUkVTUyIpCkBAIC0xODUsNiArMjEwLDMzIEBACiAgICAgICAgIGIuY2xvc2UoKQogICAgICAgICBrcS5jbG9zZSgpCiAKKyAgICBkZWYgdGVzdF9jbG9zZShzZWxmKToKKyAgICAgICAgb3Blbl9maWxlID0gb3BlbihfX2ZpbGVfXywgInJiIikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9wZW5fZmlsZS5jbG9zZSkKKyAgICAgICAgZmQgPSBvcGVuX2ZpbGUuZmlsZW5vKCkKKyAgICAgICAga3F1ZXVlID0gc2VsZWN0LmtxdWV1ZSgpCisKKyAgICAgICAgIyB0ZXN0IGZpbGVubygpIG1ldGhvZCBhbmQgY2xvc2VkIGF0dHJpYnV0ZQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoa3F1ZXVlLmZpbGVubygpLCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoa3F1ZXVlLmNsb3NlZCkKKworICAgICAgICAjIHRlc3QgY2xvc2UoKQorICAgICAgICBrcXVldWUuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoa3F1ZXVlLmNsb3NlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwga3F1ZXVlLmZpbGVubykKKworICAgICAgICAjIGNsb3NlKCkgY2FuIGJlIGNhbGxlZCBtb3JlIHRoYW4gb25jZQorICAgICAgICBrcXVldWUuY2xvc2UoKQorCisgICAgICAgICMgb3BlcmF0aW9ucyBtdXN0IGZhaWwgd2l0aCBWYWx1ZUVycm9yKCJJL08gb3BlcmF0aW9uIG9uIGNsb3NlZCAuLi4iKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBrcXVldWUuY29udHJvbCwgTm9uZSwgNCkKKworICAgIGRlZiB0ZXN0X2ZkX25vbl9pbmhlcml0YWJsZShzZWxmKToKKyAgICAgICAga3F1ZXVlID0gc2VsZWN0LmtxdWV1ZSgpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChrcXVldWUuY2xvc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MuZ2V0X2luaGVyaXRhYmxlKGtxdWV1ZS5maWxlbm8oKSksIEZhbHNlKQorCisKIGRlZiB0ZXN0X21haW4oKToKICAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChUZXN0S1F1ZXVlKQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2xhcmdlZmlsZS5weSBiL0xpYi90ZXN0L3Rlc3RfbGFyZ2VmaWxlLnB5CmluZGV4IDYzZWU2OTcuLjViMjc2ZTcgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfbGFyZ2VmaWxlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfbGFyZ2VmaWxlLnB5CkBAIC0xNTksNyArMTU5LDcgQEAKICAgICAgICAgICAgICMgU2Vla2luZyBpcyBub3QgZW5vdWdoIG9mIGEgdGVzdDogeW91IG11c3Qgd3JpdGUgYW5kIGZsdXNoLCB0b28hCiAgICAgICAgICAgICBmLndyaXRlKGIneCcpCiAgICAgICAgICAgICBmLmZsdXNoKCkKLSAgICAgICAgZXhjZXB0IChJT0Vycm9yLCBPdmVyZmxvd0Vycm9yKToKKyAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBPdmVyZmxvd0Vycm9yKToKICAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJmaWxlc3lzdGVtIGRvZXMgbm90IGhhdmUgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxhcmdlZmlsZSBzdXBwb3J0IikKICAgICAgICAgZmluYWxseToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbGliMnRvMy5weSBiL0xpYi90ZXN0L3Rlc3RfbGliMnRvMy5weQppbmRleCBkZjRjMzdiLi41ZWFhNTE2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2xpYjJ0bzMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9saWIydG8zLnB5CkBAIC0xLDIyICsxLDUgQEAKLSMgU2tpcHBpbmcgdGVzdF9wYXJzZXIgYW5kIHRlc3RfYWxsX2ZpeGVycwotIyBiZWNhdXNlIG9mIHJ1bm5pbmcKLWZyb20gbGliMnRvMy50ZXN0cyBpbXBvcnQgKHRlc3RfZml4ZXJzLCB0ZXN0X3B5dHJlZSwgdGVzdF91dGlsLCB0ZXN0X3JlZmFjdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9wYXJzZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X21haW4gYXMgdGVzdF9tYWluXykKK2Zyb20gbGliMnRvMy50ZXN0cyBpbXBvcnQgbG9hZF90ZXN0cwogaW1wb3J0IHVuaXR0ZXN0Ci1mcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0Ci0KLWRlZiBzdWl0ZSgpOgotICAgIHRlc3RzID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKLSAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKLSAgICBmb3IgbSBpbiAodGVzdF9maXhlcnMsIHRlc3RfcHl0cmVlLCB0ZXN0X3V0aWwsIHRlc3RfcmVmYWN0b3IsIHRlc3RfcGFyc2VyLAotICAgICAgICAgICAgICB0ZXN0X21haW5fKToKLSAgICAgICAgdGVzdHMuYWRkVGVzdHMobG9hZGVyLmxvYWRUZXN0c0Zyb21Nb2R1bGUobSkpCi0gICAgcmV0dXJuIHRlc3RzCi0KLWRlZiB0ZXN0X21haW4oKToKLSAgICBydW5fdW5pdHRlc3Qoc3VpdGUoKSkKLQogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2xpbmVjYWNoZS5weSBiL0xpYi90ZXN0L3Rlc3RfbGluZWNhY2hlLnB5CmluZGV4IDVmZTA1NTQuLjc5MTU3ZGUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfbGluZWNhY2hlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfbGluZWNhY2hlLnB5CkBAIC0xMjYsOCArMTI2LDIxIEBACiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lLCBnZXRsaW5lKHNvdXJjZV9uYW1lLCBpbmRleCArIDEpKQogICAgICAgICAgICAgICAgIHNvdXJjZV9saXN0LmFwcGVuZChsaW5lKQogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoTGluZUNhY2hlVGVzdHMpCisgICAgZGVmIHRlc3RfbWVtb3J5ZXJyb3Ioc2VsZik6CisgICAgICAgIGxpbmVzID0gbGluZWNhY2hlLmdldGxpbmVzKEZJTEVOQU1FKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGluZXMpCisgICAgICAgIGRlZiByYWlzZV9tZW1vcnllcnJvcigqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAgICAgcmFpc2UgTWVtb3J5RXJyb3IKKyAgICAgICAgd2l0aCBzdXBwb3J0LnN3YXBfYXR0cihsaW5lY2FjaGUsICd1cGRhdGVjYWNoZScsIHJhaXNlX21lbW9yeWVycm9yKToKKyAgICAgICAgICAgIGxpbmVzMiA9IGxpbmVjYWNoZS5nZXRsaW5lcyhGSUxFTkFNRSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lczIsIGxpbmVzKQorCisgICAgICAgIGxpbmVjYWNoZS5jbGVhcmNhY2hlKCkKKyAgICAgICAgd2l0aCBzdXBwb3J0LnN3YXBfYXR0cihsaW5lY2FjaGUsICd1cGRhdGVjYWNoZScsIHJhaXNlX21lbW9yeWVycm9yKToKKyAgICAgICAgICAgIGxpbmVzMyA9IGxpbmVjYWNoZS5nZXRsaW5lcyhGSUxFTkFNRSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lczMsIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmVjYWNoZS5nZXRsaW5lcyhGSUxFTkFNRSksIGxpbmVzKQorCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbGlzdC5weSBiL0xpYi90ZXN0L3Rlc3RfbGlzdC5weQppbmRleCA1ZGYyN2QzLi4zYjk0NzAwIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2xpc3QucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9saXN0LnB5CkBAIC03NCwyOSArNzQsMzEgQEAKICAgICAgICAgIyBVc2VybGlzdCBpdGVyYXRvcnMgZG9uJ3Qgc3VwcG9ydCBwaWNrbGluZyB5ZXQgc2luY2UKICAgICAgICAgIyB0aGV5IGFyZSBiYXNlZCBvbiBnZW5lcmF0b3JzLgogICAgICAgICBkYXRhID0gc2VsZi50eXBlMnRlc3QoWzQsIDUsIDYsIDddKQotICAgICAgICBpdCA9IGl0b3JnID0gaXRlcihkYXRhKQotICAgICAgICBkID0gcGlja2xlLmR1bXBzKGl0KQotICAgICAgICBpdCA9IHBpY2tsZS5sb2FkcyhkKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoaXRvcmcpLCB0eXBlKGl0KSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR5cGUydGVzdChpdCksIHNlbGYudHlwZTJ0ZXN0KGRhdGEpKQorICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIGl0ID0gaXRvcmcgPSBpdGVyKGRhdGEpCisgICAgICAgICAgICBkID0gcGlja2xlLmR1bXBzKGl0LCBwcm90bykKKyAgICAgICAgICAgIGl0ID0gcGlja2xlLmxvYWRzKGQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoaXRvcmcpLCB0eXBlKGl0KSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50eXBlMnRlc3QoaXQpLCBzZWxmLnR5cGUydGVzdChkYXRhKSkKIAotICAgICAgICBpdCA9IHBpY2tsZS5sb2FkcyhkKQotICAgICAgICBuZXh0KGl0KQotICAgICAgICBkID0gcGlja2xlLmR1bXBzKGl0KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHlwZTJ0ZXN0KGl0KSwgc2VsZi50eXBlMnRlc3QoZGF0YSlbMTpdKQorICAgICAgICAgICAgaXQgPSBwaWNrbGUubG9hZHMoZCkKKyAgICAgICAgICAgIG5leHQoaXQpCisgICAgICAgICAgICBkID0gcGlja2xlLmR1bXBzKGl0LCBwcm90bykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50eXBlMnRlc3QoaXQpLCBzZWxmLnR5cGUydGVzdChkYXRhKVsxOl0pCiAKICAgICBkZWYgdGVzdF9yZXZlcnNlZF9waWNrbGUoc2VsZik6CiAgICAgICAgIGRhdGEgPSBzZWxmLnR5cGUydGVzdChbNCwgNSwgNiwgN10pCi0gICAgICAgIGl0ID0gaXRvcmcgPSByZXZlcnNlZChkYXRhKQotICAgICAgICBkID0gcGlja2xlLmR1bXBzKGl0KQotICAgICAgICBpdCA9IHBpY2tsZS5sb2FkcyhkKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoaXRvcmcpLCB0eXBlKGl0KSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR5cGUydGVzdChpdCksIHNlbGYudHlwZTJ0ZXN0KHJldmVyc2VkKGRhdGEpKSkKKyAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICBpdCA9IGl0b3JnID0gcmV2ZXJzZWQoZGF0YSkKKyAgICAgICAgICAgIGQgPSBwaWNrbGUuZHVtcHMoaXQsIHByb3RvKQorICAgICAgICAgICAgaXQgPSBwaWNrbGUubG9hZHMoZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShpdG9yZyksIHR5cGUoaXQpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR5cGUydGVzdChpdCksIHNlbGYudHlwZTJ0ZXN0KHJldmVyc2VkKGRhdGEpKSkKIAotICAgICAgICBpdCA9IHBpY2tsZS5sb2FkcyhkKQotICAgICAgICBuZXh0KGl0KQotICAgICAgICBkID0gcGlja2xlLmR1bXBzKGl0KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHlwZTJ0ZXN0KGl0KSwgc2VsZi50eXBlMnRlc3QocmV2ZXJzZWQoZGF0YSkpWzE6XSkKKyAgICAgICAgICAgIGl0ID0gcGlja2xlLmxvYWRzKGQpCisgICAgICAgICAgICBuZXh0KGl0KQorICAgICAgICAgICAgZCA9IHBpY2tsZS5kdW1wcyhpdCwgcHJvdG8pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHlwZTJ0ZXN0KGl0KSwgc2VsZi50eXBlMnRlc3QocmV2ZXJzZWQoZGF0YSkpWzE6XSkKIAogICAgIGRlZiB0ZXN0X25vX2NvbWRhdF9mb2xkaW5nKHNlbGYpOgogICAgICAgICAjIElzc3VlIDg4NDc6IEluIHRoZSBQR08gYnVpbGQsIHRoZSBNU1ZDIGxpbmtlcidzIENPTURBVCBmb2xkaW5nCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2xvY2FsZS5weSBiL0xpYi90ZXN0L3Rlc3RfbG9jYWxlLnB5CmluZGV4IDc2MzQ3YjcuLjkzNjlhMjUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfbG9jYWxlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfbG9jYWxlLnB5CkBAIC0zNzEsNyArMzcxLDggQEAKIAogICAgIGRlZiB0ZXN0X2xvY2FsZV9hbGlhcyhzZWxmKToKICAgICAgICAgZm9yIGxvY2FsZW5hbWUsIGFsaWFzIGluIGxvY2FsZS5sb2NhbGVfYWxpYXMuaXRlbXMoKToKLSAgICAgICAgICAgIHNlbGYuY2hlY2sobG9jYWxlbmFtZSwgYWxpYXMpCisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChsb2NhbGU9KGxvY2FsZW5hbWUsIGFsaWFzKSk6CisgICAgICAgICAgICAgICAgc2VsZi5jaGVjayhsb2NhbGVuYW1lLCBhbGlhcykKIAogICAgIGRlZiB0ZXN0X2VtcHR5KHNlbGYpOgogICAgICAgICBzZWxmLmNoZWNrKCcnLCAnJykKQEAgLTM4Myw2ICszODQsNyBAQAogICAgIGRlZiB0ZXN0X2VuZ2xpc2goc2VsZik6CiAgICAgICAgIHNlbGYuY2hlY2soJ2VuJywgJ2VuX1VTLklTTzg4NTktMScpCiAgICAgICAgIHNlbGYuY2hlY2soJ0VOJywgJ2VuX1VTLklTTzg4NTktMScpCisgICAgICAgIHNlbGYuY2hlY2soJ2VuLmlzbzg4NTkxJywgJ2VuX1VTLklTTzg4NTktMScpCiAgICAgICAgIHNlbGYuY2hlY2soJ2VuX1VTJywgJ2VuX1VTLklTTzg4NTktMScpCiAgICAgICAgIHNlbGYuY2hlY2soJ2VuX3VzJywgJ2VuX1VTLklTTzg4NTktMScpCiAgICAgICAgIHNlbGYuY2hlY2soJ2VuX0dCJywgJ2VuX0dCLklTTzg4NTktMScpCkBAIC0zOTEsNyArMzkzLDEwIEBACiAgICAgICAgIHNlbGYuY2hlY2soJ2VuX1VTOlVURi04JywgJ2VuX1VTLlVURi04JykKICAgICAgICAgc2VsZi5jaGVjaygnZW5fVVMuSVNPODg1OS0xJywgJ2VuX1VTLklTTzg4NTktMScpCiAgICAgICAgIHNlbGYuY2hlY2soJ2VuX1VTLlVTLUFTQ0lJJywgJ2VuX1VTLklTTzg4NTktMScpCisgICAgICAgIHNlbGYuY2hlY2soJ2VuX1VTLjg4NTkxJywgJ2VuX1VTLklTTzg4NTktMScpCisgICAgICAgIHNlbGYuY2hlY2soJ2VuX1VTLjg4NTkxNScsICdlbl9VUy5JU084ODU5LTE1JykKICAgICAgICAgc2VsZi5jaGVjaygnZW5nbGlzaCcsICdlbl9FTi5JU084ODU5LTEnKQorICAgICAgICBzZWxmLmNoZWNrKCdlbmdsaXNoX3VrLmFzY2lpJywgJ2VuX0dCLklTTzg4NTktMScpCiAKICAgICBkZWYgdGVzdF9oeXBoZW5hdGVkX2VuY29kaW5nKHNlbGYpOgogICAgICAgICBzZWxmLmNoZWNrKCdhel9BWi5pc284ODU5OWUnLCAnYXpfQVouSVNPODg1OS05RScpCkBAIC00MTEsMTQgKzQxNiwxNiBAQAogICAgIGRlZiB0ZXN0X2V1cm9fbW9kaWZpZXIoc2VsZik6CiAgICAgICAgIHNlbGYuY2hlY2soJ2RlX0RFQGV1cm8nLCAnZGVfREUuSVNPODg1OS0xNScpCiAgICAgICAgIHNlbGYuY2hlY2soJ2VuX1VTLklTTzg4NTktMTVAZXVybycsICdlbl9VUy5JU084ODU5LTE1JykKKyAgICAgICAgc2VsZi5jaGVjaygnZGVfREUudXRmOEBldXJvJywgJ2RlX0RFLlVURi04JykKIAogICAgIGRlZiB0ZXN0X2xhdGluX21vZGlmaWVyKHNlbGYpOgogICAgICAgICBzZWxmLmNoZWNrKCdiZV9CWS5VVEYtOEBsYXRpbicsICdiZV9CWS5VVEYtOEBsYXRpbicpCiAgICAgICAgIHNlbGYuY2hlY2soJ3NyX1JTLlVURi04QGxhdGluJywgJ3NyX1JTLlVURi04QGxhdGluJykKKyAgICAgICAgc2VsZi5jaGVjaygnc3JfUlMuVVRGLThAbGF0bicsICdzcl9SUy5VVEYtOEBsYXRpbicpCiAKICAgICBkZWYgdGVzdF92YWxlbmNpYV9tb2RpZmllcihzZWxmKToKICAgICAgICAgc2VsZi5jaGVjaygnY2FfRVMuVVRGLThAdmFsZW5jaWEnLCAnY2FfRVMuVVRGLThAdmFsZW5jaWEnKQotICAgICAgICBzZWxmLmNoZWNrKCdjYV9FU0B2YWxlbmNpYScsICdjYV9FUy5JU084ODU5LTFAdmFsZW5jaWEnKQorICAgICAgICBzZWxmLmNoZWNrKCdjYV9FU0B2YWxlbmNpYScsICdjYV9FUy5JU084ODU5LTE1QHZhbGVuY2lhJykKICAgICAgICAgc2VsZi5jaGVjaygnY2FAdmFsZW5jaWEnLCAnY2FfRVMuSVNPODg1OS0xQHZhbGVuY2lhJykKIAogICAgIGRlZiB0ZXN0X2RldmFuYWdhcmlfbW9kaWZpZXIoc2VsZik6CkBAIC00MzUsNiArNDQyLDM5IEBACiAgICAgICAgIHNlbGYuY2hlY2soJ3NkX0lOJywgJ3NkX0lOLlVURi04JykKICAgICAgICAgc2VsZi5jaGVjaygnc2QnLCAnc2RfSU4uVVRGLTgnKQogCisgICAgZGVmIHRlc3RfZXVjX2VuY29kaW5nKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrKCdqYV9qcC5ldWMnLCAnamFfSlAuZXVjSlAnKQorICAgICAgICBzZWxmLmNoZWNrKCdqYV9qcC5ldWNqcCcsICdqYV9KUC5ldWNKUCcpCisgICAgICAgIHNlbGYuY2hlY2soJ2tvX2tyLmV1YycsICdrb19LUi5ldWNLUicpCisgICAgICAgIHNlbGYuY2hlY2soJ2tvX2tyLmV1Y2tyJywgJ2tvX0tSLmV1Y0tSJykKKyAgICAgICAgc2VsZi5jaGVjaygnemhfY24uZXVjJywgJ3poX0NOLmV1Y0NOJykKKyAgICAgICAgc2VsZi5jaGVjaygnemhfdHcuZXVjJywgJ3poX1RXLmV1Y1RXJykKKyAgICAgICAgc2VsZi5jaGVjaygnemhfdHcuZXVjdHcnLCAnemhfVFcuZXVjVFcnKQorCisgICAgZGVmIHRlc3RfamFwYW5lc2Uoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2soJ2phJywgJ2phX0pQLmV1Y0pQJykKKyAgICAgICAgc2VsZi5jaGVjaygnamEuamlzJywgJ2phX0pQLkpJUzcnKQorICAgICAgICBzZWxmLmNoZWNrKCdqYS5zamlzJywgJ2phX0pQLlNKSVMnKQorICAgICAgICBzZWxmLmNoZWNrKCdqYV9qcCcsICdqYV9KUC5ldWNKUCcpCisgICAgICAgIHNlbGYuY2hlY2soJ2phX2pwLmFqZWMnLCAnamFfSlAuZXVjSlAnKQorICAgICAgICBzZWxmLmNoZWNrKCdqYV9qcC5ldWMnLCAnamFfSlAuZXVjSlAnKQorICAgICAgICBzZWxmLmNoZWNrKCdqYV9qcC5ldWNqcCcsICdqYV9KUC5ldWNKUCcpCisgICAgICAgIHNlbGYuY2hlY2soJ2phX2pwLmlzby0yMDIyLWpwJywgJ2phX0pQLkpJUzcnKQorICAgICAgICBzZWxmLmNoZWNrKCdqYV9qcC5pc28yMDIyanAnLCAnamFfSlAuSklTNycpCisgICAgICAgIHNlbGYuY2hlY2soJ2phX2pwLmppcycsICdqYV9KUC5KSVM3JykKKyAgICAgICAgc2VsZi5jaGVjaygnamFfanAuamlzNycsICdqYV9KUC5KSVM3JykKKyAgICAgICAgc2VsZi5jaGVjaygnamFfanAubXNjb2RlJywgJ2phX0pQLlNKSVMnKQorICAgICAgICBzZWxmLmNoZWNrKCdqYV9qcC5wY2snLCAnamFfSlAuU0pJUycpCisgICAgICAgIHNlbGYuY2hlY2soJ2phX2pwLnNqaXMnLCAnamFfSlAuU0pJUycpCisgICAgICAgIHNlbGYuY2hlY2soJ2phX2pwLnVqaXMnLCAnamFfSlAuZXVjSlAnKQorICAgICAgICBzZWxmLmNoZWNrKCdqYV9qcC51dGY4JywgJ2phX0pQLlVURi04JykKKyAgICAgICAgc2VsZi5jaGVjaygnamFwYW4nLCAnamFfSlAuZXVjSlAnKQorICAgICAgICBzZWxmLmNoZWNrKCdqYXBhbmVzZScsICdqYV9KUC5ldWNKUCcpCisgICAgICAgIHNlbGYuY2hlY2soJ2phcGFuZXNlLWV1YycsICdqYV9KUC5ldWNKUCcpCisgICAgICAgIHNlbGYuY2hlY2soJ2phcGFuZXNlLmV1YycsICdqYV9KUC5ldWNKUCcpCisgICAgICAgIHNlbGYuY2hlY2soJ2phcGFuZXNlLnNqaXMnLCAnamFfSlAuU0pJUycpCisgICAgICAgIHNlbGYuY2hlY2soJ2pwX2pwJywgJ2phX0pQLmV1Y0pQJykKKwogCiBjbGFzcyBUZXN0TWlzY2VsbGFuZW91cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RfZ2V0cHJlZmVycmVkZW5jb2Rpbmcoc2VsZik6CkBAIC00NzEsNyArNTExLDcgQEAKICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoJ3Rlc3QgbmVlZHMgVHVya2lzaCBsb2NhbGUnKQogICAgICAgICBsb2MgPSBsb2NhbGUuZ2V0bG9jYWxlKGxvY2FsZS5MQ19DVFlQRSkKICAgICAgICAgaWYgdmVyYm9zZToKLSAgICAgICAgICAgIHByaW50KCdnb3QgbG9jYWxlICVhJyAlIChsb2MsKSkKKyAgICAgICAgICAgIHByaW50KCd0ZXN0aW5nIHdpdGggJWEnICUgKGxvYywpLCBlbmQ9JyAnLCBmbHVzaD1UcnVlKQogICAgICAgICBsb2NhbGUuc2V0bG9jYWxlKGxvY2FsZS5MQ19DVFlQRSwgbG9jKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYywgbG9jYWxlLmdldGxvY2FsZShsb2NhbGUuTENfQ1RZUEUpKQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2xvZ2dpbmcucHkgYi9MaWIvdGVzdC90ZXN0X2xvZ2dpbmcucHkKaW5kZXggZjM0MTcyYS4uYjE3ZjVlNSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9sb2dnaW5nLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfbG9nZ2luZy5weQpAQCAtMjQsNiArMjQsNyBAQAogaW1wb3J0IGxvZ2dpbmcuY29uZmlnCiAKIGltcG9ydCBjb2RlY3MKK2ltcG9ydCBjb25maWdwYXJzZXIKIGltcG9ydCBkYXRldGltZQogaW1wb3J0IHBpY2tsZQogaW1wb3J0IGlvCkBAIC0zOCw4ICszOSwxMCBAQAogaW1wb3J0IHN0cnVjdAogaW1wb3J0IHN5cwogaW1wb3J0IHRlbXBmaWxlCitmcm9tIHRlc3Quc2NyaXB0X2hlbHBlciBpbXBvcnQgYXNzZXJ0X3B5dGhvbl9vawogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IChjYXB0dXJlZF9zdGRvdXQsIHJ1bl93aXRoX2xvY2FsZSwgcnVuX3VuaXR0ZXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRjaCwgcmVxdWlyZXNfemxpYiwgVGVzdEhhbmRsZXIsIE1hdGNoZXIpCisgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGNoLCByZXF1aXJlc196bGliLCBUZXN0SGFuZGxlciwgTWF0Y2hlciwgSE9TVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3dhcF9hdHRyKQogaW1wb3J0IHRleHR3cmFwCiBpbXBvcnQgdGltZQogaW1wb3J0IHVuaXR0ZXN0CkBAIC01NiwzMCArNTksMjcgQEAKICAgICBpbXBvcnQgc210cGQKICAgICBmcm9tIHVybGxpYi5wYXJzZSBpbXBvcnQgdXJscGFyc2UsIHBhcnNlX3FzCiAgICAgZnJvbSBzb2NrZXRzZXJ2ZXIgaW1wb3J0IChUaHJlYWRpbmdVRFBTZXJ2ZXIsIERhdGFncmFtUmVxdWVzdEhhbmRsZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaHJlYWRpbmdUQ1BTZXJ2ZXIsIFN0cmVhbVJlcXVlc3RIYW5kbGVyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhyZWFkaW5nVENQU2VydmVyLCBTdHJlYW1SZXF1ZXN0SGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRocmVhZGluZ1VuaXhTdHJlYW1TZXJ2ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaHJlYWRpbmdVbml4RGF0YWdyYW1TZXJ2ZXIpCiBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgdGhyZWFkaW5nID0gTm9uZQogdHJ5OgotICAgIGltcG9ydCB3aW4zMmV2dGxvZworICAgIGltcG9ydCB3aW4zMmV2dGxvZywgd2luMzJldnRsb2d1dGlsLCBweXdpbnR5cGVzCiBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgd2luMzJldnRsb2cgPSBOb25lCi10cnk6Ci0gICAgaW1wb3J0IHdpbjMyZXZ0bG9ndXRpbAotZXhjZXB0IEltcG9ydEVycm9yOgotICAgIHdpbjMyZXZ0bG9ndXRpbCA9IE5vbmUKLSAgICB3aW4zMmV2dGxvZyA9IE5vbmUKKyAgICB3aW4zMmV2dGxvZyA9IHdpbjMyZXZ0bG9ndXRpbCA9IHB5d2ludHlwZXMgPSBOb25lCisKIHRyeToKICAgICBpbXBvcnQgemxpYgogZXhjZXB0IEltcG9ydEVycm9yOgogICAgIHBhc3MKIAotCiBjbGFzcyBCYXNlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICAiIiJCYXNlIGNsYXNzIGZvciBsb2dnaW5nIHRlc3RzLiIiIgogCiAgICAgbG9nX2Zvcm1hdCA9ICIlKG5hbWUpcyAtPiAlKGxldmVsbmFtZSlzOiAlKG1lc3NhZ2UpcyIKLSAgICBleHBlY3RlZF9sb2dfcGF0ID0gciJeKFtcdy5dKykgLT4gKFtcd10rKTogKFtcZF0rKSQiCisgICAgZXhwZWN0ZWRfbG9nX3BhdCA9IHIiXihbXHcuXSspIC0+IChcdyspOiAoXGQrKSQiCiAgICAgbWVzc2FnZV9udW0gPSAwCiAKICAgICBkZWYgc2V0VXAoc2VsZik6CkBAIC05MSw3ICs5MSw4IEBACiAgICAgICAgICAgICBzZWxmLnNhdmVkX2hhbmRsZXJzID0gbG9nZ2luZy5faGFuZGxlcnMuY29weSgpCiAgICAgICAgICAgICBzZWxmLnNhdmVkX2hhbmRsZXJfbGlzdCA9IGxvZ2dpbmcuX2hhbmRsZXJMaXN0WzpdCiAgICAgICAgICAgICBzZWxmLnNhdmVkX2xvZ2dlcnMgPSBzYXZlZF9sb2dnZXJzID0gbG9nZ2VyX2RpY3QuY29weSgpCi0gICAgICAgICAgICBzZWxmLnNhdmVkX2xldmVsX25hbWVzID0gbG9nZ2luZy5fbGV2ZWxOYW1lcy5jb3B5KCkKKyAgICAgICAgICAgIHNlbGYuc2F2ZWRfbmFtZV90b19sZXZlbCA9IGxvZ2dpbmcuX25hbWVUb0xldmVsLmNvcHkoKQorICAgICAgICAgICAgc2VsZi5zYXZlZF9sZXZlbF90b19uYW1lID0gbG9nZ2luZy5fbGV2ZWxUb05hbWUuY29weSgpCiAgICAgICAgICAgICBzZWxmLmxvZ2dlcl9zdGF0ZXMgPSBsb2dnZXJfc3RhdGVzID0ge30KICAgICAgICAgICAgIGZvciBuYW1lIGluIHNhdmVkX2xvZ2dlcnM6CiAgICAgICAgICAgICAgICAgbG9nZ2VyX3N0YXRlc1tuYW1lXSA9IGdldGF0dHIoc2F2ZWRfbG9nZ2Vyc1tuYW1lXSwKQEAgLTEzMyw4ICsxMzQsMTAgQEAKICAgICAgICAgc2VsZi5yb290X2xvZ2dlci5zZXRMZXZlbChzZWxmLm9yaWdpbmFsX2xvZ2dpbmdfbGV2ZWwpCiAgICAgICAgIGxvZ2dpbmcuX2FjcXVpcmVMb2NrKCkKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgbG9nZ2luZy5fbGV2ZWxOYW1lcy5jbGVhcigpCi0gICAgICAgICAgICBsb2dnaW5nLl9sZXZlbE5hbWVzLnVwZGF0ZShzZWxmLnNhdmVkX2xldmVsX25hbWVzKQorICAgICAgICAgICAgbG9nZ2luZy5fbGV2ZWxUb05hbWUuY2xlYXIoKQorICAgICAgICAgICAgbG9nZ2luZy5fbGV2ZWxUb05hbWUudXBkYXRlKHNlbGYuc2F2ZWRfbGV2ZWxfdG9fbmFtZSkKKyAgICAgICAgICAgIGxvZ2dpbmcuX25hbWVUb0xldmVsLmNsZWFyKCkKKyAgICAgICAgICAgIGxvZ2dpbmcuX25hbWVUb0xldmVsLnVwZGF0ZShzZWxmLnNhdmVkX25hbWVfdG9fbGV2ZWwpCiAgICAgICAgICAgICBsb2dnaW5nLl9oYW5kbGVycy5jbGVhcigpCiAgICAgICAgICAgICBsb2dnaW5nLl9oYW5kbGVycy51cGRhdGUoc2VsZi5zYXZlZF9oYW5kbGVycykKICAgICAgICAgICAgIGxvZ2dpbmcuX2hhbmRsZXJMaXN0WzpdID0gc2VsZi5zYXZlZF9oYW5kbGVyX2xpc3QKQEAgLTE0OCwxMiArMTUxLDEyIEBACiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBsb2dnaW5nLl9yZWxlYXNlTG9jaygpCiAKLSAgICBkZWYgYXNzZXJ0X2xvZ19saW5lcyhzZWxmLCBleHBlY3RlZF92YWx1ZXMsIHN0cmVhbT1Ob25lKToKKyAgICBkZWYgYXNzZXJ0X2xvZ19saW5lcyhzZWxmLCBleHBlY3RlZF92YWx1ZXMsIHN0cmVhbT1Ob25lLCBwYXQ9Tm9uZSk6CiAgICAgICAgICIiIk1hdGNoIHRoZSBjb2xsZWN0ZWQgbG9nIGxpbmVzIGFnYWluc3QgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbgogICAgICAgICBzZWxmLmV4cGVjdGVkX2xvZ19wYXQsIGFuZCBjb21wYXJlIHRoZSBleHRyYWN0ZWQgZ3JvdXAgdmFsdWVzIHRvCiAgICAgICAgIHRoZSBleHBlY3RlZF92YWx1ZXMgbGlzdCBvZiB0dXBsZXMuIiIiCiAgICAgICAgIHN0cmVhbSA9IHN0cmVhbSBvciBzZWxmLnN0cmVhbQotICAgICAgICBwYXQgPSByZS5jb21waWxlKHNlbGYuZXhwZWN0ZWRfbG9nX3BhdCkKKyAgICAgICAgcGF0ID0gcmUuY29tcGlsZShwYXQgb3Igc2VsZi5leHBlY3RlZF9sb2dfcGF0KQogICAgICAgICBhY3R1YWxfbGluZXMgPSBzdHJlYW0uZ2V0dmFsdWUoKS5zcGxpdGxpbmVzKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYWN0dWFsX2xpbmVzKSwgbGVuKGV4cGVjdGVkX3ZhbHVlcykpCiAgICAgICAgIGZvciBhY3R1YWwsIGV4cGVjdGVkIGluIHppcChhY3R1YWxfbGluZXMsIGV4cGVjdGVkX3ZhbHVlcyk6CkBAIC0zMDcsNiArMzEwLDEwIEBACiAgICAgICAgICAgICAoJ0lORi5CQURQQVJFTlQnLCAnSU5GTycsICc0JyksCiAgICAgICAgIF0pCiAKKyAgICBkZWYgdGVzdF9yZWdyZXNzaW9uXzIyMzg2KHNlbGYpOgorICAgICAgICAiIiJTZWUgaXNzdWUgIzIyMzg2IGZvciBtb3JlIGluZm9ybWF0aW9uLiIiIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvZ2dpbmcuZ2V0TGV2ZWxOYW1lKCdJTkZPJyksIGxvZ2dpbmcuSU5GTykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2dnaW5nLmdldExldmVsTmFtZShsb2dnaW5nLklORk8pLCAnSU5GTycpCiAKIGNsYXNzIEJhc2ljRmlsdGVyVGVzdChCYXNlVGVzdCk6CiAKQEAgLTQyOCw3ICs0MzUsNyBAQAogICAgICIiIlRlc3QgdmFyaW91cyBmaWx0ZXJpbmcgcG9zc2liaWxpdGllcyB3aXRoIGN1c3RvbSBsb2dnaW5nIGxldmVscy4iIiIKIAogICAgICMgU2tpcCB0aGUgbG9nZ2VyIG5hbWUgZ3JvdXAuCi0gICAgZXhwZWN0ZWRfbG9nX3BhdCA9IHIiXltcdy5dKyAtPiAoW1x3XSspOiAoW1xkXSspJCIKKyAgICBleHBlY3RlZF9sb2dfcGF0ID0gciJeW1x3Ll0rIC0+IChcdyspOiAoXGQrKSQiCiAKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIEJhc2VUZXN0LnNldFVwKHNlbGYpCkBAIC01NTgsNyArNTY1LDcgQEAKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguZmFjaWxpdHksIGguTE9HX1VTRVIpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGgudW5peHNvY2tldCkKICAgICAgICAgICAgICAgICBoLmNsb3NlKCkKLSAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6ICMgc3lzbG9nZCBtaWdodCBub3QgYmUgYXZhaWxhYmxlCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjogIyBzeXNsb2dkIG1pZ2h0IG5vdCBiZSBhdmFpbGFibGUKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGZvciBtZXRob2QgaW4gKCdHRVQnLCAnUE9TVCcsICdQVVQnKToKICAgICAgICAgICAgIGlmIG1ldGhvZCA9PSAnUFVUJzoKQEAgLTU4Myw2ICs1OTAsNyBAQAogICAgICAgICAgICAgZm9yIF8gaW4gcmFuZ2UodHJpZXMpOgogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgb3MudW5saW5rKGZuYW1lKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmRlbGV0aW9uX3RpbWUgPSB0aW1lLnRpbWUoKQogICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgwLjAwNCAqIHJhbmRvbS5yYW5kaW50KDAsIDQpKQpAQCAtNTkwLDYgKzU5OCw5IEBACiAgICAgICAgIGRlbF9jb3VudCA9IDUwMAogICAgICAgICBsb2dfY291bnQgPSA1MDAKIAorICAgICAgICBzZWxmLmhhbmRsZV90aW1lID0gTm9uZQorICAgICAgICBzZWxmLmRlbGV0aW9uX3RpbWUgPSBOb25lCisKICAgICAgICAgZm9yIGRlbGF5IGluIChGYWxzZSwgVHJ1ZSk6CiAgICAgICAgICAgICBmZCwgZm4gPSB0ZW1wZmlsZS5ta3N0ZW1wKCcubG9nJywgJ3Rlc3RfbG9nZ2luZy0zLScpCiAgICAgICAgICAgICBvcy5jbG9zZShmZCkKQEAgLTYwMyw3ICs2MTQsMTQgQEAKICAgICAgICAgICAgICAgICBmb3IgXyBpbiByYW5nZShsb2dfY291bnQpOgogICAgICAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMDA1KQogICAgICAgICAgICAgICAgICAgICByID0gbG9nZ2luZy5tYWtlTG9nUmVjb3JkKHsnbXNnJzogJ3Rlc3RpbmcnIH0pCi0gICAgICAgICAgICAgICAgICAgIGguaGFuZGxlKHIpCisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlX3RpbWUgPSB0aW1lLnRpbWUoKQorICAgICAgICAgICAgICAgICAgICAgICAgaC5oYW5kbGUocikKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCdEZWxldGVkIGF0ICVzLCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3BlbmVkIGF0ICVzJyAlIChzZWxmLmRlbGV0aW9uX3RpbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZV90aW1lKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgICAgIHJlbW92ZXIuam9pbigpCiAgICAgICAgICAgICAgICAgaC5jbG9zZSgpCkBAIC02NDUsNDEgKzY2Myw2IEBACiAjIC0tIGlmIGl0IHByb3ZlcyB0byBiZSBvZiB3aWRlciB1dGlsaXR5IHRoYW4ganVzdCB0ZXN0X2xvZ2dpbmcKIAogaWYgdGhyZWFkaW5nOgotICAgIGNsYXNzIFRlc3RTTVRQQ2hhbm5lbChzbXRwZC5TTVRQQ2hhbm5lbCk6Ci0gICAgICAgICIiIgotICAgICAgICBUaGlzIGRlcml2ZWQgY2xhc3MgaGFzIGhhZCB0byBiZSBjcmVhdGVkIGJlY2F1c2Ugc210cGQgZG9lcyBub3QKLSAgICAgICAgc3VwcG9ydCB1c2Ugb2YgY3VzdG9tIGNoYW5uZWwgbWFwcywgYWx0aG91Z2ggdGhleSBhcmUgYWxsb3dlZCBieQotICAgICAgICBhc3luY29yZSdzIGRlc2lnbi4gSXNzdWUgIzExOTU5IGhhcyBiZWVuIHJhaXNlZCB0byBhZGRyZXNzIHRoaXMsCi0gICAgICAgIGFuZCBpZiByZXNvbHZlZCBzYXRpc2ZhY3RvcmlseSwgc29tZSBvZiB0aGlzIGNvZGUgY2FuIGJlIHJlbW92ZWQuCi0gICAgICAgICIiIgotICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgc2VydmVyLCBjb25uLCBhZGRyLCBzb2NrbWFwKToKLSAgICAgICAgICAgIGFzeW5jaGF0LmFzeW5jX2NoYXQuX19pbml0X18oc2VsZiwgY29ubiwgc29ja21hcCkKLSAgICAgICAgICAgIHNlbGYuc210cF9zZXJ2ZXIgPSBzZXJ2ZXIKLSAgICAgICAgICAgIHNlbGYuY29ubiA9IGNvbm4KLSAgICAgICAgICAgIHNlbGYuYWRkciA9IGFkZHIKLSAgICAgICAgICAgIHNlbGYuZGF0YV9zaXplX2xpbWl0ID0gTm9uZQotICAgICAgICAgICAgc2VsZi5yZWNlaXZlZF9saW5lcyA9IFtdCi0gICAgICAgICAgICBzZWxmLnNtdHBfc3RhdGUgPSBzZWxmLkNPTU1BTkQKLSAgICAgICAgICAgIHNlbGYuc2Vlbl9ncmVldGluZyA9ICcnCi0gICAgICAgICAgICBzZWxmLm1haWxmcm9tID0gTm9uZQotICAgICAgICAgICAgc2VsZi5yY3B0dG9zID0gW10KLSAgICAgICAgICAgIHNlbGYucmVjZWl2ZWRfZGF0YSA9ICcnCi0gICAgICAgICAgICBzZWxmLmZxZG4gPSBzb2NrZXQuZ2V0ZnFkbigpCi0gICAgICAgICAgICBzZWxmLm51bV9ieXRlcyA9IDAKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBzZWxmLnBlZXIgPSBjb25uLmdldHBlZXJuYW1lKCkKLSAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZXJyOgotICAgICAgICAgICAgICAgICMgYSByYWNlIGNvbmRpdGlvbiAgbWF5IG9jY3VyIGlmIHRoZSBvdGhlciBlbmQgaXMgY2xvc2luZwotICAgICAgICAgICAgICAgICMgYmVmb3JlIHdlIGNhbiBnZXQgdGhlIHBlZXJuYW1lCi0gICAgICAgICAgICAgICAgc2VsZi5jbG9zZSgpCi0gICAgICAgICAgICAgICAgaWYgZXJyLmFyZ3NbMF0gIT0gZXJybm8uRU5PVENPTk46Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgICAgICBzZWxmLnB1c2goJzIyMCAlcyAlcycgJSAoc2VsZi5mcWRuLCBzbXRwZC5fX3ZlcnNpb25fXykpCi0gICAgICAgICAgICBzZWxmLnNldF90ZXJtaW5hdG9yKGInXHJcbicpCi0gICAgICAgICAgICBzZWxmLmV4dGVuZGVkX3NtdHAgPSBGYWxzZQotCi0KICAgICBjbGFzcyBUZXN0U01UUFNlcnZlcihzbXRwZC5TTVRQU2VydmVyKToKICAgICAgICAgIiIiCiAgICAgICAgIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBhIHRlc3QgU01UUCBzZXJ2ZXIuCkBAIC03MDAsMzcgKzY4MywxNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgOmZ1bmM6YGFzeW5jb3JlLmxvb3BgLiBUaGlzIGF2b2lkcyBjaGFuZ2luZyB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgIDptb2Q6YGFzeW5jb3JlYCBtb2R1bGUncyBnbG9iYWwgc3RhdGUuCiAgICAgICAgICIiIgotICAgICAgICBjaGFubmVsX2NsYXNzID0gVGVzdFNNVFBDaGFubmVsCiAKICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGFkZHIsIGhhbmRsZXIsIHBvbGxfaW50ZXJ2YWwsIHNvY2ttYXApOgotICAgICAgICAgICAgc2VsZi5fbG9jYWxhZGRyID0gYWRkcgotICAgICAgICAgICAgc2VsZi5fcmVtb3RlYWRkciA9IE5vbmUKLSAgICAgICAgICAgIHNlbGYuZGF0YV9zaXplX2xpbWl0ID0gTm9uZQotICAgICAgICAgICAgc2VsZi5zb2NrbWFwID0gc29ja21hcAotICAgICAgICAgICAgYXN5bmNvcmUuZGlzcGF0Y2hlci5fX2luaXRfXyhzZWxmLCBtYXA9c29ja21hcCkKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQotICAgICAgICAgICAgICAgIHNvY2suc2V0YmxvY2tpbmcoMCkKLSAgICAgICAgICAgICAgICBzZWxmLnNldF9zb2NrZXQoc29jaywgbWFwPXNvY2ttYXApCi0gICAgICAgICAgICAgICAgIyB0cnkgdG8gcmUtdXNlIGEgc2VydmVyIHBvcnQgaWYgcG9zc2libGUKLSAgICAgICAgICAgICAgICBzZWxmLnNldF9yZXVzZV9hZGRyKCkKLSAgICAgICAgICAgICAgICBzZWxmLmJpbmQoYWRkcikKLSAgICAgICAgICAgICAgICBzZWxmLnBvcnQgPSBzb2NrLmdldHNvY2tuYW1lKClbMV0KLSAgICAgICAgICAgICAgICBzZWxmLmxpc3Rlbig1KQotICAgICAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgICAgIHNlbGYuY2xvc2UoKQotICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICBzbXRwZC5TTVRQU2VydmVyLl9faW5pdF9fKHNlbGYsIGFkZHIsIE5vbmUsIG1hcD1zb2NrbWFwKQorICAgICAgICAgICAgc2VsZi5wb3J0ID0gc2VsZi5zb2NrZXQuZ2V0c29ja25hbWUoKVsxXQogICAgICAgICAgICAgc2VsZi5faGFuZGxlciA9IGhhbmRsZXIKICAgICAgICAgICAgIHNlbGYuX3RocmVhZCA9IE5vbmUKICAgICAgICAgICAgIHNlbGYucG9sbF9pbnRlcnZhbCA9IHBvbGxfaW50ZXJ2YWwKIAotICAgICAgICBkZWYgaGFuZGxlX2FjY2VwdGVkKHNlbGYsIGNvbm4sIGFkZHIpOgotICAgICAgICAgICAgIiIiCi0gICAgICAgICAgICBSZWRlZmluZWQgb25seSBiZWNhdXNlIHRoZSBiYXNlIGNsYXNzIGRvZXMgbm90IHBhc3MgaW4gYQotICAgICAgICAgICAgbWFwLCBmb3JjaW5nIHVzZSBvZiBhIGdsb2JhbCBpbiA6bW9kOmBhc3luY29yZWAuCi0gICAgICAgICAgICAiIiIKLSAgICAgICAgICAgIGNoYW5uZWwgPSBzZWxmLmNoYW5uZWxfY2xhc3Moc2VsZiwgY29ubiwgYWRkciwgc2VsZi5zb2NrbWFwKQotCiAgICAgICAgIGRlZiBwcm9jZXNzX21lc3NhZ2Uoc2VsZiwgcGVlciwgbWFpbGZyb20sIHJjcHR0b3MsIGRhdGEpOgogICAgICAgICAgICAgIiIiCiAgICAgICAgICAgICBEZWxlZ2F0ZXMgdG8gdGhlIGhhbmRsZXIgcGFzc2VkIGluIHRvIHRoZSBzZXJ2ZXIncyBjb25zdHJ1Y3Rvci4KQEAgLTc2MSw4ICs3MjEsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpmdW5jOmBhc3luY29yZS5sb29wYC4KICAgICAgICAgICAgICIiIgogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGFzeW5jb3JlLmxvb3AocG9sbF9pbnRlcnZhbCwgbWFwPXNlbGYuc29ja21hcCkKLSAgICAgICAgICAgIGV4Y2VwdCBzZWxlY3QuZXJyb3I6CisgICAgICAgICAgICAgICAgYXN5bmNvcmUubG9vcChwb2xsX2ludGVydmFsLCBtYXA9c2VsZi5fbWFwKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgIyBPbiBGcmVlQlNEIDgsIGNsb3NpbmcgdGhlIHNlcnZlciByZXBlYXRhYmx5CiAgICAgICAgICAgICAgICAgIyByYWlzZXMgdGhpcyBlcnJvci4gV2Ugc3dhbGxvdyBpdCBpZiB0aGUKICAgICAgICAgICAgICAgICAjIHNlcnZlciBoYXMgYmVlbiBjbG9zZWQuCkBAIC04NjksNyArODI5LDcgQEAKICAgICAgICAgICAgICAgICBzb2NrLCBhZGRyID0gc2VsZi5zb2NrZXQuYWNjZXB0KCkKICAgICAgICAgICAgICAgICBpZiBzZWxmLnNzbGN0eDoKICAgICAgICAgICAgICAgICAgICAgc29jayA9IHNlbGYuc3NsY3R4LndyYXBfc29ja2V0KHNvY2ssIHNlcnZlcl9zaWRlPVRydWUpCi0gICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIGU6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgICAgICMgc29ja2V0IGVycm9ycyBhcmUgc2lsZW5jZWQgYnkgdGhlIGNhbGxlciwgcHJpbnQgdGhlbSBoZXJlCiAgICAgICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiR290IGFuIGVycm9yOlxuJXNcbiIgJSBlKQogICAgICAgICAgICAgICAgIHJhaXNlCkBAIC05MzUsNyArODk1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgaWYgZGF0YToKICAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXBlcihEZWxlZ2F0aW5nVURQUmVxdWVzdEhhbmRsZXIsIHNlbGYpLmZpbmlzaCgpCi0gICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuc2VydmVyLl9jbG9zZWQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCiAKQEAgLTk1Myw2ICs5MTMsMTMgQEAKICAgICAgICAgICAgIHN1cGVyKFRlc3RVRFBTZXJ2ZXIsIHNlbGYpLnNlcnZlcl9jbG9zZSgpCiAgICAgICAgICAgICBzZWxmLl9jbG9zZWQgPSBUcnVlCiAKKyAgICBpZiBoYXNhdHRyKHNvY2tldCwgIkFGX1VOSVgiKToKKyAgICAgICAgY2xhc3MgVGVzdFVuaXhTdHJlYW1TZXJ2ZXIoVGVzdFRDUFNlcnZlcik6CisgICAgICAgICAgICBhZGRyZXNzX2ZhbWlseSA9IHNvY2tldC5BRl9VTklYCisKKyAgICAgICAgY2xhc3MgVGVzdFVuaXhEYXRhZ3JhbVNlcnZlcihUZXN0VURQU2VydmVyKToKKyAgICAgICAgICAgIGFkZHJlc3NfZmFtaWx5ID0gc29ja2V0LkFGX1VOSVgKKwogIyAtIGVuZCBvZiBzZXJ2ZXJfaGVscGVyIHNlY3Rpb24KIAogQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkaW5nLCAnVGhyZWFkaW5nIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKQEAgLTk2MCwxNSArOTI3LDE1IEBACiAgICAgVElNRU9VVCA9IDguMAogICAgIGRlZiB0ZXN0X2Jhc2ljKHNlbGYpOgogICAgICAgICBzb2NrbWFwID0ge30KLSAgICAgICAgc2VydmVyID0gVGVzdFNNVFBTZXJ2ZXIoKCdsb2NhbGhvc3QnLCAwKSwgc2VsZi5wcm9jZXNzX21lc3NhZ2UsIDAuMDAxLAorICAgICAgICBzZXJ2ZXIgPSBUZXN0U01UUFNlcnZlcigoSE9TVCwgMCksIHNlbGYucHJvY2Vzc19tZXNzYWdlLCAwLjAwMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ja21hcCkKICAgICAgICAgc2VydmVyLnN0YXJ0KCkKLSAgICAgICAgYWRkciA9ICgnbG9jYWxob3N0Jywgc2VydmVyLnBvcnQpCisgICAgICAgIGFkZHIgPSAoSE9TVCwgc2VydmVyLnBvcnQpCiAgICAgICAgIGggPSBsb2dnaW5nLmhhbmRsZXJzLlNNVFBIYW5kbGVyKGFkZHIsICdtZScsICd5b3UnLCAnTG9nJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dD1zZWxmLlRJTUVPVVQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC50b2FkZHJzLCBbJ3lvdSddKQogICAgICAgICBzZWxmLm1lc3NhZ2VzID0gW10KLSAgICAgICAgciA9IGxvZ2dpbmcubWFrZUxvZ1JlY29yZCh7J21zZyc6ICdIZWxsbyd9KQorICAgICAgICByID0gbG9nZ2luZy5tYWtlTG9nUmVjb3JkKHsnbXNnJzogJ0hlbGxvIFx1MjcxMyd9KQogICAgICAgICBzZWxmLmhhbmRsZWQgPSB0aHJlYWRpbmcuRXZlbnQoKQogICAgICAgICBoLmhhbmRsZShyKQogICAgICAgICBzZWxmLmhhbmRsZWQud2FpdChzZWxmLlRJTUVPVVQpICAjIDE0MzE0OiBkb24ndCB3YWl0IGZvcmV2ZXIKQEAgLTk3OSw3ICs5NDYsNyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1haWxmcm9tLCAnbWUnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJjcHR0b3MsIFsneW91J10pCiAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ1xuU3ViamVjdDogTG9nXG4nLCBkYXRhKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoZGF0YS5lbmRzd2l0aCgnXG5cbkhlbGxvJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkYXRhLmVuZHN3aXRoKCdcblxuSGVsbG8gXHUyNzEzJykpCiAgICAgICAgIGguY2xvc2UoKQogCiAgICAgZGVmIHByb2Nlc3NfbWVzc2FnZShzZWxmLCAqYXJncyk6CkBAIC05OTEsNyArOTU4LDcgQEAKICAgICAiIiJUZXN0cyBmb3IgdGhlIE1lbW9yeUhhbmRsZXIuIiIiCiAKICAgICAjIERvIG5vdCBib3RoZXIgd2l0aCBhIGxvZ2dlciBuYW1lIGdyb3VwLgotICAgIGV4cGVjdGVkX2xvZ19wYXQgPSByIl5bXHcuXSsgLT4gKFtcd10rKTogKFtcZF0rKSQiCisgICAgZXhwZWN0ZWRfbG9nX3BhdCA9IHIiXltcdy5dKyAtPiAoXHcrKTogKFxkKykkIgogCiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBCYXNlVGVzdC5zZXRVcChzZWxmKQpAQCAtMTA0NCw3ICsxMDExLDcgQEAKIAogICAgICIiIlJlYWRpbmcgbG9nZ2luZyBjb25maWcgZnJvbSBhIC5pbmktc3R5bGUgY29uZmlnIGZpbGUuIiIiCiAKLSAgICBleHBlY3RlZF9sb2dfcGF0ID0gciJeKFtcd10rKSBcK1wrIChbXHddKykkIgorICAgIGV4cGVjdGVkX2xvZ19wYXQgPSByIl4oXHcrKSBcK1wrIChcdyspJCIKIAogICAgICMgY29uZmlnMCBpcyBhIHN0YW5kYXJkIGNvbmZpZ3VyYXRpb24uCiAgICAgY29uZmlnMCA9ICIiIgpAQCAtMTI5Miw2ICsxMjU5LDI0IEBACiAgICAgICAgICAgICAjIE9yaWdpbmFsIGxvZ2dlciBvdXRwdXQgaXMgZW1wdHkuCiAgICAgICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMoW10pCiAKKyAgICBkZWYgdGVzdF9jb25maWcwX3VzaW5nX2NwX29rKHNlbGYpOgorICAgICAgICAjIEEgc2ltcGxlIGNvbmZpZyBmaWxlIHdoaWNoIG92ZXJyaWRlcyB0aGUgZGVmYXVsdCBzZXR0aW5ncy4KKyAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBvdXRwdXQ6CisgICAgICAgICAgICBmaWxlID0gaW8uU3RyaW5nSU8odGV4dHdyYXAuZGVkZW50KHNlbGYuY29uZmlnMCkpCisgICAgICAgICAgICBjcCA9IGNvbmZpZ3BhcnNlci5Db25maWdQYXJzZXIoKQorICAgICAgICAgICAgY3AucmVhZF9maWxlKGZpbGUpCisgICAgICAgICAgICBsb2dnaW5nLmNvbmZpZy5maWxlQ29uZmlnKGNwKQorICAgICAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoKQorICAgICAgICAgICAgIyBXb24ndCBvdXRwdXQgYW55dGhpbmcKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKHNlbGYubmV4dF9tZXNzYWdlKCkpCisgICAgICAgICAgICAjIE91dHB1dHMgYSBtZXNzYWdlCisgICAgICAgICAgICBsb2dnZXIuZXJyb3Ioc2VsZi5uZXh0X21lc3NhZ2UoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2xvZ19saW5lcyhbCisgICAgICAgICAgICAgICAgKCdFUlJPUicsICcyJyksCisgICAgICAgICAgICBdLCBzdHJlYW09b3V0cHV0KQorICAgICAgICAgICAgIyBPcmlnaW5hbCBsb2dnZXIgb3V0cHV0IGlzIGVtcHR5LgorICAgICAgICAgICAgc2VsZi5hc3NlcnRfbG9nX2xpbmVzKFtdKQorCiAgICAgZGVmIHRlc3RfY29uZmlnMV9vayhzZWxmLCBjb25maWc9Y29uZmlnMSk6CiAgICAgICAgICMgQSBjb25maWcgZmlsZSBkZWZpbmluZyBhIHN1Yi1wYXJzZXIgYXMgd2VsbC4KICAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBvdXRwdXQ6CkBAIC0xMzgxLDcgKzEzNjYsNyBAQAogCiAgICAgZGVmIHRlc3RfbG9nZ2VyX2Rpc2FibGluZyhzZWxmKToKICAgICAgICAgc2VsZi5hcHBseV9jb25maWcoc2VsZi5kaXNhYmxlX3Rlc3QpCi0gICAgICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdmb28nKQorICAgICAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcignc29tZV9wcmlzdGluZV9sb2dnZXInKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGxvZ2dlci5kaXNhYmxlZCkKICAgICAgICAgc2VsZi5hcHBseV9jb25maWcoc2VsZi5kaXNhYmxlX3Rlc3QpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsb2dnZXIuZGlzYWJsZWQpCkBAIC0xMzk0LDE3ICsxMzc5LDIzIEBACiAKICAgICAiIiJUZXN0IGZvciBTb2NrZXRIYW5kbGVyIG9iamVjdHMuIiIiCiAKKyAgICBpZiB0aHJlYWRpbmc6CisgICAgICAgIHNlcnZlcl9jbGFzcyA9IFRlc3RUQ1BTZXJ2ZXIKKyAgICAgICAgYWRkcmVzcyA9ICgnbG9jYWxob3N0JywgMCkKKwogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgIiIiU2V0IHVwIGEgVENQIHNlcnZlciB0byByZWNlaXZlIGxvZyBtZXNzYWdlcywgYW5kIGEgU29ja2V0SGFuZGxlcgogICAgICAgICBwb2ludGluZyB0byB0aGF0IHNlcnZlcidzIGFkZHJlc3MgYW5kIHBvcnQuIiIiCiAgICAgICAgIEJhc2VUZXN0LnNldFVwKHNlbGYpCi0gICAgICAgIGFkZHIgPSAoJ2xvY2FsaG9zdCcsIDApCi0gICAgICAgIHNlbGYuc2VydmVyID0gc2VydmVyID0gVGVzdFRDUFNlcnZlcihhZGRyLCBzZWxmLmhhbmRsZV9zb2NrZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjAxKQorICAgICAgICBzZWxmLnNlcnZlciA9IHNlcnZlciA9IHNlbGYuc2VydmVyX2NsYXNzKHNlbGYuYWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZV9zb2NrZXQsIDAuMDEpCiAgICAgICAgIHNlcnZlci5zdGFydCgpCiAgICAgICAgIHNlcnZlci5yZWFkeS53YWl0KCkKLSAgICAgICAgc2VsZi5zb2NrX2hkbHIgPSBsb2dnaW5nLmhhbmRsZXJzLlNvY2tldEhhbmRsZXIoJ2xvY2FsaG9zdCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlci5wb3J0KQorICAgICAgICBoY2xzID0gbG9nZ2luZy5oYW5kbGVycy5Tb2NrZXRIYW5kbGVyCisgICAgICAgIGlmIGlzaW5zdGFuY2Uoc2VydmVyLnNlcnZlcl9hZGRyZXNzLCB0dXBsZSk6CisgICAgICAgICAgICBzZWxmLnNvY2tfaGRsciA9IGhjbHMoJ2xvY2FsaG9zdCcsIHNlcnZlci5wb3J0KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5zb2NrX2hkbHIgPSBoY2xzKHNlcnZlci5zZXJ2ZXJfYWRkcmVzcywgTm9uZSkKICAgICAgICAgc2VsZi5sb2dfb3V0cHV0ID0gJycKICAgICAgICAgc2VsZi5yb290X2xvZ2dlci5yZW1vdmVIYW5kbGVyKHNlbGYucm9vdF9sb2dnZXIuaGFuZGxlcnNbMF0pCiAgICAgICAgIHNlbGYucm9vdF9sb2dnZXIuYWRkSGFuZGxlcihzZWxmLnNvY2tfaGRscikKQEAgLTE0NDQsMzUgKzE0MzUsNzAgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvZ19vdXRwdXQsICJzcGFtXG5lZ2dzXG4iKQogCiAgICAgZGVmIHRlc3Rfbm9zZXJ2ZXIoc2VsZik6CisgICAgICAgICMgQXZvaWQgdGltaW5nLXJlbGF0ZWQgZmFpbHVyZXMgZHVlIHRvIFNvY2tldEhhbmRsZXIncyBvd24gaGFyZC13aXJlZAorICAgICAgICAjIG9uZS1zZWNvbmQgdGltZW91dCBvbiBzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb24oKSAoaXNzdWUgIzE2MjY0KS4KKyAgICAgICAgc2VsZi5zb2NrX2hkbHIucmV0cnlTdGFydCA9IDIuNQogICAgICAgICAjIEtpbGwgdGhlIHNlcnZlcgogICAgICAgICBzZWxmLnNlcnZlci5zdG9wKDIuMCkKLSAgICAgICAgI1RoZSBsb2dnaW5nIGNhbGwgc2hvdWxkIHRyeSB0byBjb25uZWN0LCB3aGljaCBzaG91bGQgZmFpbAorICAgICAgICAjIFRoZSBsb2dnaW5nIGNhbGwgc2hvdWxkIHRyeSB0byBjb25uZWN0LCB3aGljaCBzaG91bGQgZmFpbAogICAgICAgICB0cnk6CiAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ0RlbGliZXJhdGUgbWlzdGFrZScpCiAgICAgICAgIGV4Y2VwdCBSdW50aW1lRXJyb3I6CiAgICAgICAgICAgICBzZWxmLnJvb3RfbG9nZ2VyLmV4Y2VwdGlvbignTmV2ZXIgc2VudCcpCiAgICAgICAgIHNlbGYucm9vdF9sb2dnZXIuZXJyb3IoJ05ldmVyIHNlbnQsIGVpdGhlcicpCiAgICAgICAgIG5vdyA9IHRpbWUudGltZSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnNvY2tfaGRsci5yZXRyeVRpbWUgPiBub3cpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihzZWxmLnNvY2tfaGRsci5yZXRyeVRpbWUsIG5vdykKICAgICAgICAgdGltZS5zbGVlcChzZWxmLnNvY2tfaGRsci5yZXRyeVRpbWUgLSBub3cgKyAwLjAwMSkKICAgICAgICAgc2VsZi5yb290X2xvZ2dlci5lcnJvcignTm9yIHRoaXMnKQogCitkZWYgX2dldF90ZW1wX2RvbWFpbl9zb2NrZXQoKToKKyAgICBmZCwgZm4gPSB0ZW1wZmlsZS5ta3N0ZW1wKHByZWZpeD0ndGVzdF9sb2dnaW5nXycsIHN1ZmZpeD0nLnNvY2snKQorICAgIG9zLmNsb3NlKGZkKQorICAgICMganVzdCBuZWVkIGEgbmFtZSAtIGZpbGUgY2FuJ3QgYmUgcHJlc2VudCwgb3Igd2UnbGwgZ2V0IGFuCisgICAgIyAnYWRkcmVzcyBhbHJlYWR5IGluIHVzZScgZXJyb3IuCisgICAgb3MucmVtb3ZlKGZuKQorICAgIHJldHVybiBmbgorCitAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNvY2tldCwgIkFGX1VOSVgiKSwgIlVuaXggc29ja2V0cyByZXF1aXJlZCIpCitAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWRpbmcsICdUaHJlYWRpbmcgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQorY2xhc3MgVW5peFNvY2tldEhhbmRsZXJUZXN0KFNvY2tldEhhbmRsZXJUZXN0KToKKworICAgICIiIlRlc3QgZm9yIFNvY2tldEhhbmRsZXIgd2l0aCB1bml4IHNvY2tldHMuIiIiCisKKyAgICBpZiB0aHJlYWRpbmcgYW5kIGhhc2F0dHIoc29ja2V0LCAiQUZfVU5JWCIpOgorICAgICAgICBzZXJ2ZXJfY2xhc3MgPSBUZXN0VW5peFN0cmVhbVNlcnZlcgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICAjIG92ZXJyaWRlIHRoZSBkZWZpbml0aW9uIGluIHRoZSBiYXNlIGNsYXNzCisgICAgICAgIHNlbGYuYWRkcmVzcyA9IF9nZXRfdGVtcF9kb21haW5fc29ja2V0KCkKKyAgICAgICAgU29ja2V0SGFuZGxlclRlc3Quc2V0VXAoc2VsZikKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgU29ja2V0SGFuZGxlclRlc3QudGVhckRvd24oc2VsZikKKyAgICAgICAgb3MucmVtb3ZlKHNlbGYuYWRkcmVzcykKIAogQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkaW5nLCAnVGhyZWFkaW5nIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKIGNsYXNzIERhdGFncmFtSGFuZGxlclRlc3QoQmFzZVRlc3QpOgogCiAgICAgIiIiVGVzdCBmb3IgRGF0YWdyYW1IYW5kbGVyLiIiIgogCisgICAgaWYgdGhyZWFkaW5nOgorICAgICAgICBzZXJ2ZXJfY2xhc3MgPSBUZXN0VURQU2VydmVyCisgICAgICAgIGFkZHJlc3MgPSAoJ2xvY2FsaG9zdCcsIDApCisKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgICIiIlNldCB1cCBhIFVEUCBzZXJ2ZXIgdG8gcmVjZWl2ZSBsb2cgbWVzc2FnZXMsIGFuZCBhIERhdGFncmFtSGFuZGxlcgogICAgICAgICBwb2ludGluZyB0byB0aGF0IHNlcnZlcidzIGFkZHJlc3MgYW5kIHBvcnQuIiIiCiAgICAgICAgIEJhc2VUZXN0LnNldFVwKHNlbGYpCi0gICAgICAgIGFkZHIgPSAoJ2xvY2FsaG9zdCcsIDApCi0gICAgICAgIHNlbGYuc2VydmVyID0gc2VydmVyID0gVGVzdFVEUFNlcnZlcihhZGRyLCBzZWxmLmhhbmRsZV9kYXRhZ3JhbSwgMC4wMSkKKyAgICAgICAgc2VsZi5zZXJ2ZXIgPSBzZXJ2ZXIgPSBzZWxmLnNlcnZlcl9jbGFzcyhzZWxmLmFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVfZGF0YWdyYW0sIDAuMDEpCiAgICAgICAgIHNlcnZlci5zdGFydCgpCiAgICAgICAgIHNlcnZlci5yZWFkeS53YWl0KCkKLSAgICAgICAgc2VsZi5zb2NrX2hkbHIgPSBsb2dnaW5nLmhhbmRsZXJzLkRhdGFncmFtSGFuZGxlcignbG9jYWxob3N0JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXIucG9ydCkKKyAgICAgICAgaGNscyA9IGxvZ2dpbmcuaGFuZGxlcnMuRGF0YWdyYW1IYW5kbGVyCisgICAgICAgIGlmIGlzaW5zdGFuY2Uoc2VydmVyLnNlcnZlcl9hZGRyZXNzLCB0dXBsZSk6CisgICAgICAgICAgICBzZWxmLnNvY2tfaGRsciA9IGhjbHMoJ2xvY2FsaG9zdCcsIHNlcnZlci5wb3J0KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5zb2NrX2hkbHIgPSBoY2xzKHNlcnZlci5zZXJ2ZXJfYWRkcmVzcywgTm9uZSkKICAgICAgICAgc2VsZi5sb2dfb3V0cHV0ID0gJycKICAgICAgICAgc2VsZi5yb290X2xvZ2dlci5yZW1vdmVIYW5kbGVyKHNlbGYucm9vdF9sb2dnZXIuaGFuZGxlcnNbMF0pCiAgICAgICAgIHNlbGYucm9vdF9sb2dnZXIuYWRkSGFuZGxlcihzZWxmLnNvY2tfaGRscikKQEAgLTE1MDUsMjMgKzE1MzEsNDYgQEAKICAgICAgICAgc2VsZi5oYW5kbGVkLndhaXQoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9nX291dHB1dCwgInNwYW1cbmVnZ3NcbiIpCiAKK0B1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc29ja2V0LCAiQUZfVU5JWCIpLCAiVW5peCBzb2NrZXRzIHJlcXVpcmVkIikKK0B1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZGluZywgJ1RocmVhZGluZyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCitjbGFzcyBVbml4RGF0YWdyYW1IYW5kbGVyVGVzdChEYXRhZ3JhbUhhbmRsZXJUZXN0KToKKworICAgICIiIlRlc3QgZm9yIERhdGFncmFtSGFuZGxlciB1c2luZyBVbml4IHNvY2tldHMuIiIiCisKKyAgICBpZiB0aHJlYWRpbmcgYW5kIGhhc2F0dHIoc29ja2V0LCAiQUZfVU5JWCIpOgorICAgICAgICBzZXJ2ZXJfY2xhc3MgPSBUZXN0VW5peERhdGFncmFtU2VydmVyCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgICMgb3ZlcnJpZGUgdGhlIGRlZmluaXRpb24gaW4gdGhlIGJhc2UgY2xhc3MKKyAgICAgICAgc2VsZi5hZGRyZXNzID0gX2dldF90ZW1wX2RvbWFpbl9zb2NrZXQoKQorICAgICAgICBEYXRhZ3JhbUhhbmRsZXJUZXN0LnNldFVwKHNlbGYpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIERhdGFncmFtSGFuZGxlclRlc3QudGVhckRvd24oc2VsZikKKyAgICAgICAgb3MucmVtb3ZlKHNlbGYuYWRkcmVzcykKIAogQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkaW5nLCAnVGhyZWFkaW5nIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKIGNsYXNzIFN5c0xvZ0hhbmRsZXJUZXN0KEJhc2VUZXN0KToKIAogICAgICIiIlRlc3QgZm9yIFN5c0xvZ0hhbmRsZXIgdXNpbmcgVURQLiIiIgogCisgICAgaWYgdGhyZWFkaW5nOgorICAgICAgICBzZXJ2ZXJfY2xhc3MgPSBUZXN0VURQU2VydmVyCisgICAgICAgIGFkZHJlc3MgPSAoJ2xvY2FsaG9zdCcsIDApCisKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgICIiIlNldCB1cCBhIFVEUCBzZXJ2ZXIgdG8gcmVjZWl2ZSBsb2cgbWVzc2FnZXMsIGFuZCBhIFN5c0xvZ0hhbmRsZXIKICAgICAgICAgcG9pbnRpbmcgdG8gdGhhdCBzZXJ2ZXIncyBhZGRyZXNzIGFuZCBwb3J0LiIiIgogICAgICAgICBCYXNlVGVzdC5zZXRVcChzZWxmKQotICAgICAgICBhZGRyID0gKCdsb2NhbGhvc3QnLCAwKQotICAgICAgICBzZWxmLnNlcnZlciA9IHNlcnZlciA9IFRlc3RVRFBTZXJ2ZXIoYWRkciwgc2VsZi5oYW5kbGVfZGF0YWdyYW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjAxKQorICAgICAgICBzZWxmLnNlcnZlciA9IHNlcnZlciA9IHNlbGYuc2VydmVyX2NsYXNzKHNlbGYuYWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZV9kYXRhZ3JhbSwgMC4wMSkKICAgICAgICAgc2VydmVyLnN0YXJ0KCkKICAgICAgICAgc2VydmVyLnJlYWR5LndhaXQoKQotICAgICAgICBzZWxmLnNsX2hkbHIgPSBsb2dnaW5nLmhhbmRsZXJzLlN5c0xvZ0hhbmRsZXIoKCdsb2NhbGhvc3QnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlci5wb3J0KSkKKyAgICAgICAgaGNscyA9IGxvZ2dpbmcuaGFuZGxlcnMuU3lzTG9nSGFuZGxlcgorICAgICAgICBpZiBpc2luc3RhbmNlKHNlcnZlci5zZXJ2ZXJfYWRkcmVzcywgdHVwbGUpOgorICAgICAgICAgICAgc2VsZi5zbF9oZGxyID0gaGNscygoJ2xvY2FsaG9zdCcsIHNlcnZlci5wb3J0KSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuc2xfaGRsciA9IGhjbHMoc2VydmVyLnNlcnZlcl9hZGRyZXNzKQogICAgICAgICBzZWxmLmxvZ19vdXRwdXQgPSAnJwogICAgICAgICBzZWxmLnJvb3RfbG9nZ2VyLnJlbW92ZUhhbmRsZXIoc2VsZi5yb290X2xvZ2dlci5oYW5kbGVyc1swXSkKICAgICAgICAgc2VsZi5yb290X2xvZ2dlci5hZGRIYW5kbGVyKHNlbGYuc2xfaGRscikKQEAgLTE1NTcsNDEgKzE2MDYsMjggQEAKICAgICAgICAgc2VsZi5oYW5kbGVkLndhaXQoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9nX291dHB1dCwgYic8MTE+aFx4YzNceGE0bS1zcFx4YzNceGE0bScpCiAKK0B1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc29ja2V0LCAiQUZfVU5JWCIpLCAiVW5peCBzb2NrZXRzIHJlcXVpcmVkIikKK0B1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZGluZywgJ1RocmVhZGluZyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCitjbGFzcyBVbml4U3lzTG9nSGFuZGxlclRlc3QoU3lzTG9nSGFuZGxlclRlc3QpOgorCisgICAgIiIiVGVzdCBmb3IgU3lzTG9nSGFuZGxlciB3aXRoIFVuaXggc29ja2V0cy4iIiIKKworICAgIGlmIHRocmVhZGluZyBhbmQgaGFzYXR0cihzb2NrZXQsICJBRl9VTklYIik6CisgICAgICAgIHNlcnZlcl9jbGFzcyA9IFRlc3RVbml4RGF0YWdyYW1TZXJ2ZXIKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgIyBvdmVycmlkZSB0aGUgZGVmaW5pdGlvbiBpbiB0aGUgYmFzZSBjbGFzcworICAgICAgICBzZWxmLmFkZHJlc3MgPSBfZ2V0X3RlbXBfZG9tYWluX3NvY2tldCgpCisgICAgICAgIFN5c0xvZ0hhbmRsZXJUZXN0LnNldFVwKHNlbGYpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIFN5c0xvZ0hhbmRsZXJUZXN0LnRlYXJEb3duKHNlbGYpCisgICAgICAgIG9zLnJlbW92ZShzZWxmLmFkZHJlc3MpCiAKIEB1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZGluZywgJ1RocmVhZGluZyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCiBjbGFzcyBIVFRQSGFuZGxlclRlc3QoQmFzZVRlc3QpOgogICAgICIiIlRlc3QgZm9yIEhUVFBIYW5kbGVyLiIiIgogCi0gICAgUEVNRklMRSA9ICIiIi0tLS0tQkVHSU4gUlNBIFBSSVZBVEUgS0VZLS0tLS0KLU1JSUNYUUlCQUFLQmdRREdUNHhTNXI5MXJiTEpRSzJuVURlbkJoQkc2cUZrK2JWT2p1QUdDL0xTSGxBb0JudkcKLXpRRzNhZ09HK2U3YzV6MlhUOG0ya3RPUkxxRzNFNG1ZbWJ4Z3loRHJ6UDZlaTJBbmMrcHN6bW54UG9LM1B1aDUKLWFYVitYS3QwYlUwQzFtMitBQ21HR0owdDNQNDA4YXJ0ODJuT3hCdzhaSGdJZzlEdHA2eElVQ3lPcXdJREFRQUIKLUFvR0JBSkZUbkZib2FLaDVlVXJJemptTnJLc0c0NGpFeXkrdld2SE4vRmdTQzRsMTAzSHhobVdpdUw1THYzZjcKLTB0TXAxdFg3RDZ4dkh3SUc5Vld2eUtiL0NxOXJKc0RpYm1EVklPc2xuT1dlUWhHK1h3SnlpdFIwcHEvS2xKSUIKLTVMak9SY0J3Nzk1b0tXT0FpNlJjT2IxT041OXR5c0VGWWhBR1FPOWs2Vkw2MjFnUkFrRUEvR2IrWVhVTExwYnMKLXBpWE4zcTR6Y0h6ZWFWQU5vNjl0VVo2VGphUXFNZVR4RTR0T1lNMEcwWm9TZUhFZGFQNTlBT1pHS1hYTkdTUXkKLTJ6L01kZGNZR1FKQkFNa2pMU1lJcE9MSlkxMWphOE93d3N3RkcyaEV6SGUwY1M5YnpvKytSL2pjMWJIQTVSMFkKLWk2dkE1aVBpK3dvcFBGdnB5dGRCb2w3VXVFQmU1eFpyeFdNQ1FRQ1d4RUxSSGlQMnlXcEVlTEozZ0dEem9YTU4KLVB5ZFdqaFJqdTdCeDNBemtUdGYrRDZsYXd6MStlR1R1RXNzNWkwSktCa01Fd3Z3bk4yczFjZStFdUY0SkFrQmIKLUU5NmgxbEF6a1ZXNU9BZllPUFk4UkNQQTkwWk8vaG95ZzdQcFN4UjBFQ3VEcmdFUlI4Z1hJZVlVWWZlakJrRWEKLXJhYjRDZlJvVkpLS00yOFlxL3haQWtCdnVxNjcwSlJDd09nZlVUZHd3N1dwZE9RQllQa3pRY2NzS05Dc2xRVzgKLS9EeVc2eTA2b1F1c1NFTlV2eW5UNmRyM0xKeHQvTmdaUGhaWDIrazFlWURWCi0tLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQotLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCi1NSUlDR3pDQ0FZU2dBd0lCQWdJSkFJcTg0YTJRL092bE1BMEdDU3FHU0liM0RRRUJCUVVBTUJReEVqQVFCZ05WCi1CQU1UQ1d4dlkyRnNhRzl6ZERBZUZ3MHhNVEExTWpFeE1ESXpNek5hRncwM05UQXpNakV3TXpVMU1UZGFNQlF4Ci1FakFRQmdOVkJBTVRDV3h2WTJGc2FHOXpkRENCbnpBTkJna3Foa2lHOXcwQkFRRUZBQU9CalFBd2dZa0NnWUVBCi14aytNVXVhL2RhMnl5VUN0cDFBM3B3WVFSdXFoWlBtMVRvN2dCZ3Z5MGg1UUtBWjd4czBCdDJvRGh2bnUzT2M5Ci1sMC9KdHBMVGtTNmh0eE9KbUptOFlNb1E2OHorbm90Z0ozUHFiTTVwOFQ2Q3R6N29lV2wxZmx5cmRHMU5BdFp0Ci12Z0FwaGhpZExkeitOUEdxN2ZOcHpzUWNQR1I0Q0lQUTdhZXNTRkFzanFzQ0F3RUFBYU4xTUhNd0hRWURWUjBPCi1CQllFRkxXYVVQTzZON2VmR2l1b1M5aTNEVlljVXduME1FUUdBMVVkSXdROU1EdUFGTFdhVVBPNk43ZWZHaXVvCi1TOWkzRFZZY1V3bjBvUmlrRmpBVU1SSXdFQVlEVlFRREV3bHNiMk5oYkdodmMzU0NDUUNLdk9HdGtQenI1VEFNCi1CZ05WSFJNRUJUQURBUUgvTUEwR0NTcUdTSWIzRFFFQkJRVUFBNEdCQU1LNXdoUGpMTlFLMUl2dms4OG9xSnFxCi00Zjg4OU93aWtHUDBlVWhPQmhiRmxzWnMranE1WVpDMlV6SHorZXZ6S0JsZ0FQMXU0bFAvY0I4NUNuanZXcU0rCi0xYy9seXdGSFE2SE9kRGVRMUw3MnRTWU1yTk9HNFhObUxuMGg3cng2R29UVTdkY0ZSZnNlYWhCQ3E4bXYwSUR0Ci1JUmJUcHZsSFdQanNTdkh6MFpPSAotLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLSIiIgotCiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICAiIiJTZXQgdXAgYW4gSFRUUCBzZXJ2ZXIgdG8gcmVjZWl2ZSBsb2cgbWVzc2FnZXMsIGFuZCBhIEhUVFBIYW5kbGVyCiAgICAgICAgIHBvaW50aW5nIHRvIHRoYXQgc2VydmVyJ3MgYWRkcmVzcyBhbmQgcG9ydC4iIiIKQEAgLTE2MjEsMTcgKzE2NTcsMTggQEAKICAgICAgICAgICAgIGlmIHNlY3VyZToKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIGltcG9ydCBzc2wKLSAgICAgICAgICAgICAgICAgICAgZmQsIGZuID0gdGVtcGZpbGUubWtzdGVtcCgpCi0gICAgICAgICAgICAgICAgICAgIG9zLmNsb3NlKGZkKQotICAgICAgICAgICAgICAgICAgICB3aXRoIG9wZW4oZm4sICd3JykgYXMgZjoKLSAgICAgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoc2VsZi5QRU1GSUxFKQotICAgICAgICAgICAgICAgICAgICBzc2xjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfU1NMdjIzKQotICAgICAgICAgICAgICAgICAgICBzc2xjdHgubG9hZF9jZXJ0X2NoYWluKGZuKQotICAgICAgICAgICAgICAgICAgICBvcy51bmxpbmsoZm4pCiAgICAgICAgICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgogICAgICAgICAgICAgICAgICAgICBzc2xjdHggPSBOb25lCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgaGVyZSA9IG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykKKyAgICAgICAgICAgICAgICAgICAgbG9jYWxob3N0X2NlcnQgPSBvcy5wYXRoLmpvaW4oaGVyZSwgImtleWNlcnQucGVtIikKKyAgICAgICAgICAgICAgICAgICAgc3NsY3R4ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1NTTHYyMykKKyAgICAgICAgICAgICAgICAgICAgc3NsY3R4LmxvYWRfY2VydF9jaGFpbihsb2NhbGhvc3RfY2VydCkKKworICAgICAgICAgICAgICAgICAgICBjb250ZXh0ID0gc3NsLmNyZWF0ZV9kZWZhdWx0X2NvbnRleHQoY2FmaWxlPWxvY2FsaG9zdF9jZXJ0KQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBzc2xjdHggPSBOb25lCisgICAgICAgICAgICAgICAgY29udGV4dCA9IE5vbmUKICAgICAgICAgICAgIHNlbGYuc2VydmVyID0gc2VydmVyID0gVGVzdEhUVFBTZXJ2ZXIoYWRkciwgc2VsZi5oYW5kbGVfcmVxdWVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjAxLCBzc2xjdHg9c3NsY3R4KQogICAgICAgICAgICAgc2VydmVyLnN0YXJ0KCkKQEAgLTE2MzksNyArMTY3Niw4IEBACiAgICAgICAgICAgICBob3N0ID0gJ2xvY2FsaG9zdDolZCcgJSBzZXJ2ZXIuc2VydmVyX3BvcnQKICAgICAgICAgICAgIHNlY3VyZV9jbGllbnQgPSBzZWN1cmUgYW5kIHNzbGN0eAogICAgICAgICAgICAgc2VsZi5oX2hkbHIgPSBsb2dnaW5nLmhhbmRsZXJzLkhUVFBIYW5kbGVyKGhvc3QsICcvZnJvYicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdXJlPXNlY3VyZV9jbGllbnQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdXJlPXNlY3VyZV9jbGllbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dD1jb250ZXh0KQogICAgICAgICAgICAgc2VsZi5sb2dfZGF0YSA9IE5vbmUKICAgICAgICAgICAgIHJvb3RfbG9nZ2VyLmFkZEhhbmRsZXIoc2VsZi5oX2hkbHIpCiAKQEAgLTE3NzksNyArMTgxNyw3IEBACiAgICAgICAgICAgICBsb2dnZXIucmVtb3ZlSGFuZGxlcihoKQogICAgICAgICAgICAgcyA9IHN0cmVhbS5nZXR2YWx1ZSgpCiAgICAgICAgICAgICBoLmNsb3NlKCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLmZpbmQoIlVzZXJXYXJuaW5nOiBJJ20gd2FybmluZyB5b3UuLi5cbiIpID4gMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihzLmZpbmQoIlVzZXJXYXJuaW5nOiBJJ20gd2FybmluZyB5b3UuLi5cbiIpLCAwKQogCiAgICAgICAgICAgICAjU2VlIGlmIGFuIGV4cGxpY2l0IGZpbGUgdXNlcyB0aGUgb3JpZ2luYWwgaW1wbGVtZW50YXRpb24KICAgICAgICAgICAgIGFfZmlsZSA9IGlvLlN0cmluZ0lPKCkKQEAgLTE4MTcsNyArMTg1NSw3IEBACiAKICAgICAiIiJSZWFkaW5nIGxvZ2dpbmcgY29uZmlnIGZyb20gYSBkaWN0aW9uYXJ5LiIiIgogCi0gICAgZXhwZWN0ZWRfbG9nX3BhdCA9IHIiXihbXHddKykgXCtcKyAoW1x3XSspJCIKKyAgICBleHBlY3RlZF9sb2dfcGF0ID0gciJeKFx3KykgXCtcKyAoXHcrKSQiCiAKICAgICAjIGNvbmZpZzAgaXMgYSBzdGFuZGFyZCBjb25maWd1cmF0aW9uLgogICAgIGNvbmZpZzAgPSB7CkBAIC0yMzg5LDYgKzI0MjcsMzIgQEAKICAgICAgICAgfSwKICAgICB9CiAKKyAgICAjIEFzIGNvbmZpZzAsIGJ1dCB3aXRoIHByb3BlcnRpZXMKKyAgICBjb25maWcxNCA9IHsKKyAgICAgICAgJ3ZlcnNpb24nOiAxLAorICAgICAgICAnZm9ybWF0dGVycyc6IHsKKyAgICAgICAgICAgICdmb3JtMScgOiB7CisgICAgICAgICAgICAgICAgJ2Zvcm1hdCcgOiAnJShsZXZlbG5hbWUpcyArKyAlKG1lc3NhZ2UpcycsCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICAnaGFuZGxlcnMnIDogeworICAgICAgICAgICAgJ2hhbmQxJyA6IHsKKyAgICAgICAgICAgICAgICAnY2xhc3MnIDogJ2xvZ2dpbmcuU3RyZWFtSGFuZGxlcicsCisgICAgICAgICAgICAgICAgJ2Zvcm1hdHRlcicgOiAnZm9ybTEnLAorICAgICAgICAgICAgICAgICdsZXZlbCcgOiAnTk9UU0VUJywKKyAgICAgICAgICAgICAgICAnc3RyZWFtJyAgOiAnZXh0Oi8vc3lzLnN0ZG91dCcsCisgICAgICAgICAgICAgICAgJy4nOiB7CisgICAgICAgICAgICAgICAgICAgICdmb28nOiAnYmFyJywKKyAgICAgICAgICAgICAgICAgICAgJ3Rlcm1pbmF0b3InOiAnIVxuJywKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICAncm9vdCcgOiB7CisgICAgICAgICAgICAnbGV2ZWwnIDogJ1dBUk5JTkcnLAorICAgICAgICAgICAgJ2hhbmRsZXJzJyA6IFsnaGFuZDEnXSwKKyAgICAgICAgfSwKKyAgICB9CisKICAgICBvdXRfb2Zfb3JkZXIgPSB7CiAgICAgICAgICJ2ZXJzaW9uIjogMSwKICAgICAgICAgImZvcm1hdHRlcnMiOiB7CkBAIC0yNjU2LDExICsyNzIwLDIwIEBACiAgICAgZGVmIHRlc3RfY29uZmlnMTNfZmFpbHVyZShzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRXhjZXB0aW9uLCBzZWxmLmFwcGx5X2NvbmZpZywgc2VsZi5jb25maWcxMykKIAorICAgIGRlZiB0ZXN0X2NvbmZpZzE0X29rKHNlbGYpOgorICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpIGFzIG91dHB1dDoKKyAgICAgICAgICAgIHNlbGYuYXBwbHlfY29uZmlnKHNlbGYuY29uZmlnMTQpCisgICAgICAgICAgICBoID0gbG9nZ2luZy5faGFuZGxlcnNbJ2hhbmQxJ10KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5mb28sICdiYXInKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLnRlcm1pbmF0b3IsICchXG4nKQorICAgICAgICAgICAgbG9nZ2luZy53YXJuaW5nKCdFeGNsYW1hdGlvbicpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUob3V0cHV0LmdldHZhbHVlKCkuZW5kc3dpdGgoJ0V4Y2xhbWF0aW9uIVxuJykpCisKICAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWRpbmcsICdsaXN0ZW4oKSBuZWVkcyB0aHJlYWRpbmcgdG8gd29yaycpCi0gICAgZGVmIHNldHVwX3ZpYV9saXN0ZW5lcihzZWxmLCB0ZXh0KToKKyAgICBkZWYgc2V0dXBfdmlhX2xpc3RlbmVyKHNlbGYsIHRleHQsIHZlcmlmeT1Ob25lKToKICAgICAgICAgdGV4dCA9IHRleHQuZW5jb2RlKCJ1dGYtOCIpCiAgICAgICAgICMgQXNrIGZvciBhIHJhbmRvbWx5IGFzc2lnbmVkIHBvcnQgKGJ5IHVzaW5nIHBvcnQgMCkKLSAgICAgICAgdCA9IGxvZ2dpbmcuY29uZmlnLmxpc3RlbigwKQorICAgICAgICB0ID0gbG9nZ2luZy5jb25maWcubGlzdGVuKDAsIHZlcmlmeSkKICAgICAgICAgdC5zdGFydCgpCiAgICAgICAgIHQucmVhZHkud2FpdCgpCiAgICAgICAgICMgTm93IGdldCB0aGUgcG9ydCBhbGxvY2F0ZWQKQEAgLTI3MjAsNiArMjc5Myw2OSBAQAogICAgICAgICAgICAgIyBPcmlnaW5hbCBsb2dnZXIgb3V0cHV0IGlzIGVtcHR5LgogICAgICAgICAgICAgc2VsZi5hc3NlcnRfbG9nX2xpbmVzKFtdKQogCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkaW5nLCAnVGhyZWFkaW5nIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKKyAgICBkZWYgdGVzdF9saXN0ZW5fdmVyaWZ5KHNlbGYpOgorCisgICAgICAgIGRlZiB2ZXJpZnlfZmFpbChzdHVmZik6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgIGRlZiB2ZXJpZnlfcmV2ZXJzZShzdHVmZik6CisgICAgICAgICAgICByZXR1cm4gc3R1ZmZbOjotMV0KKworICAgICAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigiY29tcGlsZXIucGFyc2VyIikKKyAgICAgICAgdG9fc2VuZCA9IHRleHR3cmFwLmRlZGVudChDb25maWdGaWxlVGVzdC5jb25maWcxKQorICAgICAgICAjIEZpcnN0LCBzcGVjaWZ5IGEgdmVyaWZpY2F0aW9uIGZ1bmN0aW9uIHRoYXQgd2lsbCBmYWlsLgorICAgICAgICAjIFdlIGV4cGVjdCB0byBzZWUgbm8gb3V0cHV0LCBzaW5jZSBvdXIgY29uZmlndXJhdGlvbgorICAgICAgICAjIG5ldmVyIHRvb2sgZWZmZWN0LgorICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpIGFzIG91dHB1dDoKKyAgICAgICAgICAgIHNlbGYuc2V0dXBfdmlhX2xpc3RlbmVyKHRvX3NlbmQsIHZlcmlmeV9mYWlsKQorICAgICAgICAgICAgIyBCb3RoIHdpbGwgb3V0cHV0IGEgbWVzc2FnZQorICAgICAgICAgICAgbG9nZ2VyLmluZm8oc2VsZi5uZXh0X21lc3NhZ2UoKSkKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcihzZWxmLm5leHRfbWVzc2FnZSgpKQorICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMoW10sIHN0cmVhbT1vdXRwdXQpCisgICAgICAgICMgT3JpZ2luYWwgbG9nZ2VyIG91dHB1dCBoYXMgdGhlIHN0dWZmIHdlIGxvZ2dlZC4KKyAgICAgICAgc2VsZi5hc3NlcnRfbG9nX2xpbmVzKFsKKyAgICAgICAgICAgICgnSU5GTycsICcxJyksCisgICAgICAgICAgICAoJ0VSUk9SJywgJzInKSwKKyAgICAgICAgXSwgcGF0PXIiXltcdy5dKyAtPiAoXHcrKTogKFxkKykkIikKKworICAgICAgICAjIE5vdywgcGVyZm9ybSBubyB2ZXJpZmljYXRpb24uIE91ciBjb25maWd1cmF0aW9uCisgICAgICAgICMgc2hvdWxkIHRha2UgZWZmZWN0LgorCisgICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgb3V0cHV0OgorICAgICAgICAgICAgc2VsZi5zZXR1cF92aWFfbGlzdGVuZXIodG9fc2VuZCkgICAgIyBubyB2ZXJpZnkgY2FsbGFibGUgc3BlY2lmaWVkCisgICAgICAgICAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigiY29tcGlsZXIucGFyc2VyIikKKyAgICAgICAgICAgICMgQm90aCB3aWxsIG91dHB1dCBhIG1lc3NhZ2UKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKHNlbGYubmV4dF9tZXNzYWdlKCkpCisgICAgICAgICAgICBsb2dnZXIuZXJyb3Ioc2VsZi5uZXh0X21lc3NhZ2UoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRfbG9nX2xpbmVzKFsKKyAgICAgICAgICAgICgnSU5GTycsICczJyksCisgICAgICAgICAgICAoJ0VSUk9SJywgJzQnKSwKKyAgICAgICAgXSwgc3RyZWFtPW91dHB1dCkKKyAgICAgICAgIyBPcmlnaW5hbCBsb2dnZXIgb3V0cHV0IHN0aWxsIGhhcyB0aGUgc3R1ZmYgd2UgbG9nZ2VkIGJlZm9yZS4KKyAgICAgICAgc2VsZi5hc3NlcnRfbG9nX2xpbmVzKFsKKyAgICAgICAgICAgICgnSU5GTycsICcxJyksCisgICAgICAgICAgICAoJ0VSUk9SJywgJzInKSwKKyAgICAgICAgXSwgcGF0PXIiXltcdy5dKyAtPiAoXHcrKTogKFxkKykkIikKKworICAgICAgICAjIE5vdywgcGVyZm9ybSB2ZXJpZmljYXRpb24gd2hpY2ggdHJhbnNmb3JtcyB0aGUgYnl0ZXMuCisKKyAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBvdXRwdXQ6CisgICAgICAgICAgICBzZWxmLnNldHVwX3ZpYV9saXN0ZW5lcih0b19zZW5kWzo6LTFdLCB2ZXJpZnlfcmV2ZXJzZSkKKyAgICAgICAgICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJjb21waWxlci5wYXJzZXIiKQorICAgICAgICAgICAgIyBCb3RoIHdpbGwgb3V0cHV0IGEgbWVzc2FnZQorICAgICAgICAgICAgbG9nZ2VyLmluZm8oc2VsZi5uZXh0X21lc3NhZ2UoKSkKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcihzZWxmLm5leHRfbWVzc2FnZSgpKQorICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMoWworICAgICAgICAgICAgKCdJTkZPJywgJzUnKSwKKyAgICAgICAgICAgICgnRVJST1InLCAnNicpLAorICAgICAgICBdLCBzdHJlYW09b3V0cHV0KQorICAgICAgICAjIE9yaWdpbmFsIGxvZ2dlciBvdXRwdXQgc3RpbGwgaGFzIHRoZSBzdHVmZiB3ZSBsb2dnZWQgYmVmb3JlLgorICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMoWworICAgICAgICAgICAgKCdJTkZPJywgJzEnKSwKKyAgICAgICAgICAgICgnRVJST1InLCAnMicpLAorICAgICAgICBdLCBwYXQ9ciJeW1x3Ll0rIC0+IChcdyspOiAoXGQrKSQiKQorCiAgICAgZGVmIHRlc3Rfb3V0X29mX29yZGVyKHNlbGYpOgogICAgICAgICBzZWxmLmFwcGx5X2NvbmZpZyhzZWxmLm91dF9vZl9vcmRlcikKICAgICAgICAgaGFuZGxlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdteW1vZHVsZScpLmhhbmRsZXJzWzBdCkBAIC0yNzc5LDE0ICsyOTE1LDE0IEBACiAgICAgICAgIGwyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2RlZi5naGknKQogICAgICAgICBjMSA9IHIuZ2V0Q2hpbGQoJ3h5eicpCiAgICAgICAgIGMyID0gci5nZXRDaGlsZCgndXZ3Lnh5eicpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjMSBpcyBsb2dnaW5nLmdldExvZ2dlcigneHl6JykpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjMiBpcyBsb2dnaW5nLmdldExvZ2dlcigndXZ3Lnh5eicpKQorICAgICAgICBzZWxmLmFzc2VydElzKGMxLCBsb2dnaW5nLmdldExvZ2dlcigneHl6JykpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoYzIsIGxvZ2dpbmcuZ2V0TG9nZ2VyKCd1dncueHl6JykpCiAgICAgICAgIGMxID0gbDEuZ2V0Q2hpbGQoJ2RlZicpCiAgICAgICAgIGMyID0gYzEuZ2V0Q2hpbGQoJ2doaScpCiAgICAgICAgIGMzID0gbDEuZ2V0Q2hpbGQoJ2RlZi5naGknKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoYzEgaXMgbG9nZ2luZy5nZXRMb2dnZXIoJ2FiYy5kZWYnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGMyIGlzIGxvZ2dpbmcuZ2V0TG9nZ2VyKCdhYmMuZGVmLmdoaScpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoYzIgaXMgYzMpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoYzEsIGxvZ2dpbmcuZ2V0TG9nZ2VyKCdhYmMuZGVmJykpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoYzIsIGxvZ2dpbmcuZ2V0TG9nZ2VyKCdhYmMuZGVmLmdoaScpKQorICAgICAgICBzZWxmLmFzc2VydElzKGMyLCBjMykKIAogCiBjbGFzcyBEZXJpdmVkTG9nUmVjb3JkKGxvZ2dpbmcuTG9nUmVjb3JkKToKQEAgLTI4MjksNyArMjk2NSw3IEBACiAKIGNsYXNzIFF1ZXVlSGFuZGxlclRlc3QoQmFzZVRlc3QpOgogICAgICMgRG8gbm90IGJvdGhlciB3aXRoIGEgbG9nZ2VyIG5hbWUgZ3JvdXAuCi0gICAgZXhwZWN0ZWRfbG9nX3BhdCA9IHIiXltcdy5dKyAtPiAoW1x3XSspOiAoW1xkXSspJCIKKyAgICBleHBlY3RlZF9sb2dfcGF0ID0gciJeW1x3Ll0rIC0+IChcdyspOiAoXGQrKSQiCiAKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIEJhc2VUZXN0LnNldFVwKHNlbGYpCkBAIC0zMTIzLDEzICszMjU5LDEzIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJzAgLSByZWxlYXNlJywgc2VsZi5jYWxsZWRbLTFdKQogCiAgICAgZGVmIHRlc3Rfd2l0aF9pb2Vycm9yX2luX2FjcXVpcmUoc2VsZik6Ci0gICAgICAgIHNlbGYuX3Rlc3Rfd2l0aF9mYWlsdXJlX2luX21ldGhvZCgnYWNxdWlyZScsIElPRXJyb3IpCisgICAgICAgIHNlbGYuX3Rlc3Rfd2l0aF9mYWlsdXJlX2luX21ldGhvZCgnYWNxdWlyZScsIE9TRXJyb3IpCiAKICAgICBkZWYgdGVzdF93aXRoX2lvZXJyb3JfaW5fZmx1c2goc2VsZik6Ci0gICAgICAgIHNlbGYuX3Rlc3Rfd2l0aF9mYWlsdXJlX2luX21ldGhvZCgnZmx1c2gnLCBJT0Vycm9yKQorICAgICAgICBzZWxmLl90ZXN0X3dpdGhfZmFpbHVyZV9pbl9tZXRob2QoJ2ZsdXNoJywgT1NFcnJvcikKIAogICAgIGRlZiB0ZXN0X3dpdGhfaW9lcnJvcl9pbl9jbG9zZShzZWxmKToKLSAgICAgICAgc2VsZi5fdGVzdF93aXRoX2ZhaWx1cmVfaW5fbWV0aG9kKCdjbG9zZScsIElPRXJyb3IpCisgICAgICAgIHNlbGYuX3Rlc3Rfd2l0aF9mYWlsdXJlX2luX21ldGhvZCgnY2xvc2UnLCBPU0Vycm9yKQogCiAgICAgZGVmIHRlc3Rfd2l0aF92YWx1ZWVycm9yX2luX2FjcXVpcmUoc2VsZik6CiAgICAgICAgIHNlbGYuX3Rlc3Rfd2l0aF9mYWlsdXJlX2luX21ldGhvZCgnYWNxdWlyZScsIFZhbHVlRXJyb3IpCkBAIC0zMjM1LDYgKzMzNzEsMjUgQEAKICAgICAgICAgbG9nZ2luZy5zZXRMb2dnZXJDbGFzcyhsb2dnaW5nLkxvZ2dlcikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2dnaW5nLmdldExvZ2dlckNsYXNzKCksIGxvZ2dpbmcuTG9nZ2VyKQogCisgICAgZGVmIHRlc3RfbG9nZ2luZ19hdF9zaHV0ZG93bihzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMjAwMzcKKyAgICAgICAgY29kZSA9ICIiImlmIDE6CisgICAgICAgICAgICBpbXBvcnQgbG9nZ2luZworCisgICAgICAgICAgICBjbGFzcyBBOgorICAgICAgICAgICAgICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJzb21lIGVycm9yIikKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dpbmcuZXhjZXB0aW9uKCJleGNlcHRpb24gaW4gX19kZWxfXyIpCisKKyAgICAgICAgICAgIGEgPSBBKCkiIiIKKyAgICAgICAgcmMsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygiLWMiLCBjb2RlKQorICAgICAgICBlcnIgPSBlcnIuZGVjb2RlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiZXhjZXB0aW9uIGluIF9fZGVsX18iLCBlcnIpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oIlZhbHVlRXJyb3I6IHNvbWUgZXJyb3IiLCBlcnIpCisKKwogY2xhc3MgTG9nUmVjb3JkVGVzdChCYXNlVGVzdCk6CiAgICAgZGVmIHRlc3Rfc3RyX3JlcChzZWxmKToKICAgICAgICAgciA9IGxvZ2dpbmcubWFrZUxvZ1JlY29yZCh7fSkKQEAgLTMzNTIsNiArMzUwNywxMiBAQAogICAgICAgICAgICAgICAgICJFUlJPUjpyb290OkxvZyBhbiBlcnJvciIpCiAKICAgICBkZWYgdGVzdF9maWxlbmFtZShzZWxmKToKKworICAgICAgICBkZWYgY2xlYW51cChoMSwgaDIsIGZuKToKKyAgICAgICAgICAgIGgxLmNsb3NlKCkKKyAgICAgICAgICAgIGgyLmNsb3NlKCkKKyAgICAgICAgICAgIG9zLnJlbW92ZShmbikKKwogICAgICAgICBsb2dnaW5nLmJhc2ljQ29uZmlnKGZpbGVuYW1lPSd0ZXN0LmxvZycpCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obG9nZ2luZy5yb290LmhhbmRsZXJzKSwgMSkKQEAgLTMzNTksMTcgKzM1MjAsMjMgQEAKICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGhhbmRsZXIsIGxvZ2dpbmcuRmlsZUhhbmRsZXIpCiAKICAgICAgICAgZXhwZWN0ZWQgPSBsb2dnaW5nLkZpbGVIYW5kbGVyKCd0ZXN0LmxvZycsICdhJykKLSAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGV4cGVjdGVkLmNsb3NlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhbmRsZXIuc3RyZWFtLm1vZGUsIGV4cGVjdGVkLnN0cmVhbS5tb2RlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhbmRsZXIuc3RyZWFtLm5hbWUsIGV4cGVjdGVkLnN0cmVhbS5uYW1lKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoY2xlYW51cCwgaGFuZGxlciwgZXhwZWN0ZWQsICd0ZXN0LmxvZycpCiAKICAgICBkZWYgdGVzdF9maWxlbW9kZShzZWxmKToKKworICAgICAgICBkZWYgY2xlYW51cChoMSwgaDIsIGZuKToKKyAgICAgICAgICAgIGgxLmNsb3NlKCkKKyAgICAgICAgICAgIGgyLmNsb3NlKCkKKyAgICAgICAgICAgIG9zLnJlbW92ZShmbikKKwogICAgICAgICBsb2dnaW5nLmJhc2ljQ29uZmlnKGZpbGVuYW1lPSd0ZXN0LmxvZycsIGZpbGVtb2RlPSd3YicpCiAKICAgICAgICAgaGFuZGxlciA9IGxvZ2dpbmcucm9vdC5oYW5kbGVyc1swXQogICAgICAgICBleHBlY3RlZCA9IGxvZ2dpbmcuRmlsZUhhbmRsZXIoJ3Rlc3QubG9nJywgJ3diJykKLSAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGV4cGVjdGVkLmNsb3NlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhbmRsZXIuc3RyZWFtLm1vZGUsIGV4cGVjdGVkLnN0cmVhbS5tb2RlKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoY2xlYW51cCwgaGFuZGxlciwgZXhwZWN0ZWQsICd0ZXN0LmxvZycpCiAKICAgICBkZWYgdGVzdF9zdHJlYW0oc2VsZik6CiAgICAgICAgIHN0cmVhbSA9IGlvLlN0cmluZ0lPKCkKQEAgLTM0MTksNiArMzU4NiwxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVycz1oYW5kbGVycykKICAgICAgICAgYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGxvZ2dpbmcuYmFzaWNDb25maWcsIHN0cmVhbT1zdHJlYW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXJzPWhhbmRsZXJzKQorICAgICAgICAjIElzc3VlIDIzMjA3OiB0ZXN0IGZvciBpbnZhbGlkIGt3YXJncworICAgICAgICBhc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbG9nZ2luZy5iYXNpY0NvbmZpZywgbG9nbGV2ZWw9bG9nZ2luZy5JTkZPKQorICAgICAgICAjIFNob3VsZCBwb3AgYm90aCBmaWxlbmFtZSBhbmQgZmlsZW1vZGUgZXZlbiBpZiBmaWxlbmFtZSBpcyBOb25lCisgICAgICAgIGxvZ2dpbmcuYmFzaWNDb25maWcoZmlsZW5hbWU9Tm9uZSwgZmlsZW1vZGU9J2EnKQogCiAgICAgZGVmIHRlc3RfaGFuZGxlcnMoc2VsZik6CiAgICAgICAgIGhhbmRsZXJzID0gWwpAQCAtMzU3NCwxOCArMzc0NSwxMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIChleGMuX19jbGFzc19fLCBleGMsIGV4Yy5fX3RyYWNlYmFja19fKSkKIAogICAgIGRlZiB0ZXN0X2xvZ19pbnZhbGlkX2xldmVsX3dpdGhfcmFpc2Uoc2VsZik6Ci0gICAgICAgIG9sZF9yYWlzZSA9IGxvZ2dpbmcucmFpc2VFeGNlcHRpb25zCi0gICAgICAgIHNlbGYuYWRkQ2xlYW51cChzZXRhdHRyLCBsb2dnaW5nLCAncmFpc2VFeGVjcHRpb25zJywgb2xkX3JhaXNlKQotCi0gICAgICAgIGxvZ2dpbmcucmFpc2VFeGNlcHRpb25zID0gVHJ1ZQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYubG9nZ2VyLmxvZywgJzEwJywgJ3Rlc3QgbWVzc2FnZScpCisgICAgICAgIHdpdGggc3dhcF9hdHRyKGxvZ2dpbmcsICdyYWlzZUV4Y2VwdGlvbnMnLCBUcnVlKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5sb2dnZXIubG9nLCAnMTAnLCAndGVzdCBtZXNzYWdlJykKIAogICAgIGRlZiB0ZXN0X2xvZ19pbnZhbGlkX2xldmVsX25vX3JhaXNlKHNlbGYpOgotICAgICAgICBvbGRfcmFpc2UgPSBsb2dnaW5nLnJhaXNlRXhjZXB0aW9ucwotICAgICAgICBzZWxmLmFkZENsZWFudXAoc2V0YXR0ciwgbG9nZ2luZywgJ3JhaXNlRXhlY3B0aW9ucycsIG9sZF9yYWlzZSkKLQotICAgICAgICBsb2dnaW5nLnJhaXNlRXhjZXB0aW9ucyA9IEZhbHNlCi0gICAgICAgIHNlbGYubG9nZ2VyLmxvZygnMTAnLCAndGVzdCBtZXNzYWdlJykgICMgbm8gZXhjZXB0aW9uIGhhcHBlbnMKKyAgICAgICAgd2l0aCBzd2FwX2F0dHIobG9nZ2luZywgJ3JhaXNlRXhjZXB0aW9ucycsIEZhbHNlKToKKyAgICAgICAgICAgIHNlbGYubG9nZ2VyLmxvZygnMTAnLCAndGVzdCBtZXNzYWdlJykgICMgbm8gZXhjZXB0aW9uIGhhcHBlbnMKIAogICAgIGRlZiB0ZXN0X2ZpbmRfY2FsbGVyX3dpdGhfc3RhY2tfaW5mbyhzZWxmKToKICAgICAgICAgY2FsbGVkID0gW10KQEAgLTM4MjUsNiArMzk5MCw2MyBAQAogICAgICAgICBhc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbG9nZ2luZy5oYW5kbGVycy5UaW1lZFJvdGF0aW5nRmlsZUhhbmRsZXIsCiAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZuLCAnVzcnLCBkZWxheT1UcnVlKQogCisgICAgZGVmIHRlc3RfY29tcHV0ZV9yb2xsb3Zlcl9kYWlseV9hdHRpbWUoc2VsZik6CisgICAgICAgIGN1cnJlbnRUaW1lID0gMAorICAgICAgICBhdFRpbWUgPSBkYXRldGltZS50aW1lKDEyLCAwLCAwKQorICAgICAgICByaCA9IGxvZ2dpbmcuaGFuZGxlcnMuVGltZWRSb3RhdGluZ0ZpbGVIYW5kbGVyKAorICAgICAgICAgICAgc2VsZi5mbiwgd2hlbj0nTUlETklHSFQnLCBpbnRlcnZhbD0xLCBiYWNrdXBDb3VudD0wLCB1dGM9VHJ1ZSwKKyAgICAgICAgICAgIGF0VGltZT1hdFRpbWUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGFjdHVhbCA9IHJoLmNvbXB1dGVSb2xsb3ZlcihjdXJyZW50VGltZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0dWFsLCBjdXJyZW50VGltZSArIDEyICogNjAgKiA2MCkKKworICAgICAgICAgICAgYWN0dWFsID0gcmguY29tcHV0ZVJvbGxvdmVyKGN1cnJlbnRUaW1lICsgMTMgKiA2MCAqIDYwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhY3R1YWwsIGN1cnJlbnRUaW1lICsgMzYgKiA2MCAqIDYwKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgcmguY2xvc2UoKQorCisgICAgI0B1bml0dGVzdC5za2lwSWYoVHJ1ZSwgJ1RlbXBvcmFyaWx5IHNraXBwZWQgd2hpbGUgZmFpbHVyZXMgaW52ZXN0aWdhdGVkLicpCisgICAgZGVmIHRlc3RfY29tcHV0ZV9yb2xsb3Zlcl93ZWVrbHlfYXR0aW1lKHNlbGYpOgorICAgICAgICBjdXJyZW50VGltZSA9IGludCh0aW1lLnRpbWUoKSkKKyAgICAgICAgdG9kYXkgPSBjdXJyZW50VGltZSAtIGN1cnJlbnRUaW1lICUgODY0MDAKKworICAgICAgICBhdFRpbWUgPSBkYXRldGltZS50aW1lKDEyLCAwLCAwKQorCisgICAgICAgIHdkYXkgPSB0aW1lLmdtdGltZSh0b2RheSkudG1fd2RheQorICAgICAgICBmb3IgZGF5IGluIHJhbmdlKDcpOgorICAgICAgICAgICAgcmggPSBsb2dnaW5nLmhhbmRsZXJzLlRpbWVkUm90YXRpbmdGaWxlSGFuZGxlcigKKyAgICAgICAgICAgICAgICBzZWxmLmZuLCB3aGVuPSdXJWQnICUgZGF5LCBpbnRlcnZhbD0xLCBiYWNrdXBDb3VudD0wLCB1dGM9VHJ1ZSwKKyAgICAgICAgICAgICAgICBhdFRpbWU9YXRUaW1lKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGlmIHdkYXkgPiBkYXk6CisgICAgICAgICAgICAgICAgICAgICMgVGhlIHJvbGxvdmVyIGRheSBoYXMgYWxyZWFkeSBwYXNzZWQgdGhpcyB3ZWVrLCBzbyB3ZQorICAgICAgICAgICAgICAgICAgICAjIGdvIG92ZXIgaW50byBuZXh0IHdlZWsKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSAoNyAtIHdkYXkgKyBkYXkpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSAoZGF5IC0gd2RheSkKKyAgICAgICAgICAgICAgICAjIEF0IHRoaXMgcG9pbnQgZXhwZWN0ZWQgaXMgaW4gZGF5cyBmcm9tIG5vdywgY29udmVydCB0byBzZWNvbmRzCisgICAgICAgICAgICAgICAgZXhwZWN0ZWQgKj0gMjQgKiA2MCAqIDYwCisgICAgICAgICAgICAgICAgIyBBZGQgaW4gdGhlIHJvbGxvdmVyIHRpbWUKKyAgICAgICAgICAgICAgICBleHBlY3RlZCArPSAxMiAqIDYwICogNjAKKyAgICAgICAgICAgICAgICAjIEFkZCBpbiBhZGp1c3RtZW50IGZvciB0b2RheQorICAgICAgICAgICAgICAgIGV4cGVjdGVkICs9IHRvZGF5CisgICAgICAgICAgICAgICAgYWN0dWFsID0gcmguY29tcHV0ZVJvbGxvdmVyKHRvZGF5KQorICAgICAgICAgICAgICAgIGlmIGFjdHVhbCAhPSBleHBlY3RlZDoKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoJ2ZhaWxlZCBpbiB0aW1lem9uZTogJWQnICUgdGltZS50aW1lem9uZSkKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoJ2xvY2FsIHZhcnM6ICVzJyAlIGxvY2FscygpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0dWFsLCBleHBlY3RlZCkKKyAgICAgICAgICAgICAgICBpZiBkYXkgPT0gd2RheToKKyAgICAgICAgICAgICAgICAgICAgIyBnb2VzIGludG8gZm9sbG93aW5nIHdlZWsKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgKz0gNyAqIDI0ICogNjAgKiA2MAorICAgICAgICAgICAgICAgIGFjdHVhbCA9IHJoLmNvbXB1dGVSb2xsb3Zlcih0b2RheSArIDEzICogNjAgKiA2MCkKKyAgICAgICAgICAgICAgICBpZiBhY3R1YWwgIT0gZXhwZWN0ZWQ6CisgICAgICAgICAgICAgICAgICAgIHByaW50KCdmYWlsZWQgaW4gdGltZXpvbmU6ICVkJyAlIHRpbWUudGltZXpvbmUpCisgICAgICAgICAgICAgICAgICAgIHByaW50KCdsb2NhbCB2YXJzOiAlcycgJSBsb2NhbHMoKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHJoLmNsb3NlKCkKKworCiBkZWYgc2VjcygqKmt3KToKICAgICByZXR1cm4gZGF0ZXRpbWUudGltZWRlbHRhKCoqa3cpIC8vIGRhdGV0aW1lLnRpbWVkZWx0YShzZWNvbmRzPTEpCiAKQEAgLTM4NzIsMTggKzQwOTQsMjUgQEAKICAgICBzZXRhdHRyKFRpbWVkUm90YXRpbmdGaWxlSGFuZGxlclRlc3QsICJ0ZXN0X2NvbXB1dGVfcm9sbG92ZXJfJXMiICUgd2hlbiwgdGVzdF9jb21wdXRlX3JvbGxvdmVyKQogCiAKLUB1bml0dGVzdC5za2lwVW5sZXNzKHdpbjMyZXZ0bG9nLCAnd2luMzJldnRsb2cvd2luMzJldnRsb2d1dGlsIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKK0B1bml0dGVzdC5za2lwVW5sZXNzKHdpbjMyZXZ0bG9nLCAnd2luMzJldnRsb2cvd2luMzJldnRsb2d1dGlsL3B5d2ludHlwZXMgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQogY2xhc3MgTlRFdmVudExvZ0hhbmRsZXJUZXN0KEJhc2VUZXN0KToKICAgICBkZWYgdGVzdF9iYXNpYyhzZWxmKToKICAgICAgICAgbG9ndHlwZSA9ICdBcHBsaWNhdGlvbicKICAgICAgICAgZWxoID0gd2luMzJldnRsb2cuT3BlbkV2ZW50TG9nKE5vbmUsIGxvZ3R5cGUpCiAgICAgICAgIG51bV9yZWNzID0gd2luMzJldnRsb2cuR2V0TnVtYmVyT2ZFdmVudExvZ1JlY29yZHMoZWxoKQotICAgICAgICBoID0gbG9nZ2luZy5oYW5kbGVycy5OVEV2ZW50TG9nSGFuZGxlcigndGVzdF9sb2dnaW5nJykKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBoID0gbG9nZ2luZy5oYW5kbGVycy5OVEV2ZW50TG9nSGFuZGxlcigndGVzdF9sb2dnaW5nJykKKyAgICAgICAgZXhjZXB0IHB5d2ludHlwZXMuZXJyb3IgYXMgZToKKyAgICAgICAgICAgIGlmIGUud2luZXJyb3IgPT0gNTogICMgYWNjZXNzIGRlbmllZAorICAgICAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCdJbnN1ZmZpY2llbnQgcHJpdmlsZWdlcyB0byBydW4gdGVzdCcpCisgICAgICAgICAgICByYWlzZQorCiAgICAgICAgIHIgPSBsb2dnaW5nLm1ha2VMb2dSZWNvcmQoeydtc2cnOiAnVGVzdCBMb2cgTWVzc2FnZSd9KQogICAgICAgICBoLmhhbmRsZShyKQogICAgICAgICBoLmNsb3NlKCkKICAgICAgICAgIyBOb3cgc2VlIGlmIHRoZSBldmVudCBpcyByZWNvcmRlZAotICAgICAgICBzZWxmLmFzc2VydFRydWUobnVtX3JlY3MgPCB3aW4zMmV2dGxvZy5HZXROdW1iZXJPZkV2ZW50TG9nUmVjb3JkcyhlbGgpKQorICAgICAgICBzZWxmLmFzc2VydExlc3MobnVtX3JlY3MsIHdpbjMyZXZ0bG9nLkdldE51bWJlck9mRXZlbnRMb2dSZWNvcmRzKGVsaCkpCiAgICAgICAgIGZsYWdzID0gd2luMzJldnRsb2cuRVZFTlRMT0dfQkFDS1dBUkRTX1JFQUQgfCBcCiAgICAgICAgICAgICAgICAgd2luMzJldnRsb2cuRVZFTlRMT0dfU0VRVUVOVElBTF9SRUFECiAgICAgICAgIGZvdW5kID0gRmFsc2UKQEAgLTM5MTYsNyArNDE0NSw4IEBACiAgICAgICAgICAgICAgICAgIFNNVFBIYW5kbGVyVGVzdCwgRmlsZUhhbmRsZXJUZXN0LCBSb3RhdGluZ0ZpbGVIYW5kbGVyVGVzdCwKICAgICAgICAgICAgICAgICAgTGFzdFJlc29ydFRlc3QsIExvZ1JlY29yZFRlc3QsIEV4Y2VwdGlvblRlc3QsCiAgICAgICAgICAgICAgICAgIFN5c0xvZ0hhbmRsZXJUZXN0LCBIVFRQSGFuZGxlclRlc3QsIE5URXZlbnRMb2dIYW5kbGVyVGVzdCwKLSAgICAgICAgICAgICAgICAgVGltZWRSb3RhdGluZ0ZpbGVIYW5kbGVyVGVzdAorICAgICAgICAgICAgICAgICBUaW1lZFJvdGF0aW5nRmlsZUhhbmRsZXJUZXN0LCBVbml4U29ja2V0SGFuZGxlclRlc3QsCisgICAgICAgICAgICAgICAgIFVuaXhEYXRhZ3JhbUhhbmRsZXJUZXN0LCBVbml4U3lzTG9nSGFuZGxlclRlc3QKICAgICAgICAgICAgICAgICApCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2xvbmcucHkgYi9MaWIvdGVzdC90ZXN0X2xvbmcucHkKaW5kZXggM2Y5YzFlMi4uNWI5ZTM3YSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9sb25nLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfbG9uZy5weQpAQCAtNywxNSArNyw2IEBACiBpbXBvcnQgbWF0aAogaW1wb3J0IGFycmF5CiAKLSMgVXNlZCBmb3IgbGF6eSBmb3JtYXR0aW5nIG9mIGZhaWx1cmUgbWVzc2FnZXMKLWNsYXNzIEZybShvYmplY3QpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmb3JtYXQsICphcmdzKToKLSAgICAgICAgc2VsZi5mb3JtYXQgPSBmb3JtYXQKLSAgICAgICAgc2VsZi5hcmdzID0gYXJncwotCi0gICAgZGVmIF9fc3RyX18oc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLmZvcm1hdCAlIHNlbGYuYXJncwotCiAjIFNISUZUIHNob3VsZCBtYXRjaCB0aGUgdmFsdWUgaW4gbG9uZ2ludHJlcHIuaCBmb3IgYmVzdCB0ZXN0aW5nLgogU0hJRlQgPSBzeXMuaW50X2luZm8uYml0c19wZXJfZGlnaXQKIEJBU0UgPSAyICoqIFNISUZUCkBAIC0xNjMsMTcgKzE1NCwxOCBAQAogCiAgICAgZGVmIGNoZWNrX2RpdmlzaW9uKHNlbGYsIHgsIHkpOgogICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKLSAgICAgICAgcSwgciA9IGRpdm1vZCh4LCB5KQotICAgICAgICBxMiwgcjIgPSB4Ly95LCB4JXkKLSAgICAgICAgcGFiLCBwYmEgPSB4KnksIHkqeAotICAgICAgICBlcShwYWIsIHBiYSwgRnJtKCJtdWx0aXBsaWNhdGlvbiBkb2VzIG5vdCBjb21tdXRlIGZvciAlciBhbmQgJXIiLCB4LCB5KSkKLSAgICAgICAgZXEocSwgcTIsIEZybSgiZGl2bW9kIHJldHVybnMgZGlmZmVyZW50IHF1b3RpZW50IHRoYW4gLyBmb3IgJXIgYW5kICVyIiwgeCwgeSkpCi0gICAgICAgIGVxKHIsIHIyLCBGcm0oImRpdm1vZCByZXR1cm5zIGRpZmZlcmVudCBtb2QgdGhhbiAlJSBmb3IgJXIgYW5kICVyIiwgeCwgeSkpCi0gICAgICAgIGVxKHgsIHEqeSArIHIsIEZybSgieCAhPSBxKnkgKyByIGFmdGVyIGRpdm1vZCBvbiB4PSVyLCB5PSVyIiwgeCwgeSkpCi0gICAgICAgIGlmIHkgPiAwOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDAgPD0gciA8IHksIEZybSgiYmFkIG1vZCBmcm9tIGRpdm1vZCBvbiAlciBhbmQgJXIiLCB4LCB5KSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh5IDwgciA8PSAwLCBGcm0oImJhZCBtb2QgZnJvbSBkaXZtb2Qgb24gJXIgYW5kICVyIiwgeCwgeSkpCisgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KHg9eCwgeT15KToKKyAgICAgICAgICAgIHEsIHIgPSBkaXZtb2QoeCwgeSkKKyAgICAgICAgICAgIHEyLCByMiA9IHgvL3ksIHgleQorICAgICAgICAgICAgcGFiLCBwYmEgPSB4KnksIHkqeAorICAgICAgICAgICAgZXEocGFiLCBwYmEsICJtdWx0aXBsaWNhdGlvbiBkb2VzIG5vdCBjb21tdXRlIikKKyAgICAgICAgICAgIGVxKHEsIHEyLCAiZGl2bW9kIHJldHVybnMgZGlmZmVyZW50IHF1b3RpZW50IHRoYW4gLyIpCisgICAgICAgICAgICBlcShyLCByMiwgImRpdm1vZCByZXR1cm5zIGRpZmZlcmVudCBtb2QgdGhhbiAlIikKKyAgICAgICAgICAgIGVxKHgsIHEqeSArIHIsICJ4ICE9IHEqeSArIHIgYWZ0ZXIgZGl2bW9kIikKKyAgICAgICAgICAgIGlmIHkgPiAwOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgwIDw9IHIgPCB5LCAiYmFkIG1vZCBmcm9tIGRpdm1vZCIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh5IDwgciA8PSAwLCAiYmFkIG1vZCBmcm9tIGRpdm1vZCIpCiAKICAgICBkZWYgdGVzdF9kaXZpc2lvbihzZWxmKToKICAgICAgICAgZGlnaXRzID0gbGlzdChyYW5nZSgxLCBNQVhESUdJVFMrMSkpICsgbGlzdChyYW5nZShLQVJBVFNVQkFfQ1VUT0ZGLApAQCAtMjI4LDcyICsyMjAsNjMgQEAKICAgICAgICAgICAgIGZvciBiYml0cyBpbiBiaXRzOgogICAgICAgICAgICAgICAgIGlmIGJiaXRzIDwgYWJpdHM6CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgYiA9ICgxIDw8IGJiaXRzKSAtIDEKLSAgICAgICAgICAgICAgICB4ID0gYSAqIGIKLSAgICAgICAgICAgICAgICB5ID0gKCgxIDw8IChhYml0cyArIGJiaXRzKSkgLQotICAgICAgICAgICAgICAgICAgICAgKDEgPDwgYWJpdHMpIC0KLSAgICAgICAgICAgICAgICAgICAgICgxIDw8IGJiaXRzKSArCi0gICAgICAgICAgICAgICAgICAgICAxKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgeSwKLSAgICAgICAgICAgICAgICAgICAgRnJtKCJiYWQgcmVzdWx0IGZvciBhKmI6IGE9JXIsIGI9JXIsIHg9JXIsIHk9JXIiLCBhLCBiLCB4LCB5KSkKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChhYml0cz1hYml0cywgYmJpdHM9YmJpdHMpOgorICAgICAgICAgICAgICAgICAgICBiID0gKDEgPDwgYmJpdHMpIC0gMQorICAgICAgICAgICAgICAgICAgICB4ID0gYSAqIGIKKyAgICAgICAgICAgICAgICAgICAgeSA9ICgoMSA8PCAoYWJpdHMgKyBiYml0cykpIC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCBhYml0cykgLQorICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IGJiaXRzKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgMSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCB5KQogCiAgICAgZGVmIGNoZWNrX2JpdG9wX2lkZW50aXRpZXNfMShzZWxmLCB4KToKICAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCi0gICAgICAgIGVxKHggJiAwLCAwLCBGcm0oInggJiAwICE9IDAgZm9yIHg9JXIiLCB4KSkKLSAgICAgICAgZXEoeCB8IDAsIHgsIEZybSgieCB8IDAgIT0geCBmb3IgeD0lciIsIHgpKQotICAgICAgICBlcSh4IF4gMCwgeCwgRnJtKCJ4IF4gMCAhPSB4IGZvciB4PSVyIiwgeCkpCi0gICAgICAgIGVxKHggJiAtMSwgeCwgRnJtKCJ4ICYgLTEgIT0geCBmb3IgeD0lciIsIHgpKQotICAgICAgICBlcSh4IHwgLTEsIC0xLCBGcm0oInggfCAtMSAhPSAtMSBmb3IgeD0lciIsIHgpKQotICAgICAgICBlcSh4IF4gLTEsIH54LCBGcm0oInggXiAtMSAhPSB+eCBmb3IgeD0lciIsIHgpKQotICAgICAgICBlcSh4LCB+fngsIEZybSgieCAhPSB+fnggZm9yIHg9JXIiLCB4KSkKLSAgICAgICAgZXEoeCAmIHgsIHgsIEZybSgieCAmIHggIT0geCBmb3IgeD0lciIsIHgpKQotICAgICAgICBlcSh4IHwgeCwgeCwgRnJtKCJ4IHwgeCAhPSB4IGZvciB4PSVyIiwgeCkpCi0gICAgICAgIGVxKHggXiB4LCAwLCBGcm0oInggXiB4ICE9IDAgZm9yIHg9JXIiLCB4KSkKLSAgICAgICAgZXEoeCAmIH54LCAwLCBGcm0oInggJiB+eCAhPSAwIGZvciB4PSVyIiwgeCkpCi0gICAgICAgIGVxKHggfCB+eCwgLTEsIEZybSgieCB8IH54ICE9IC0xIGZvciB4PSVyIiwgeCkpCi0gICAgICAgIGVxKHggXiB+eCwgLTEsIEZybSgieCBeIH54ICE9IC0xIGZvciB4PSVyIiwgeCkpCi0gICAgICAgIGVxKC14LCAxICsgfngsIEZybSgibm90IC14ID09IDEgKyB+eCBmb3IgeD0lciIsIHgpKQotICAgICAgICBlcSgteCwgfih4LTEpLCBGcm0oIm5vdCAteCA9PSB+KHgtMSkgZm9yeCA9JXIiLCB4KSkKKyAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoeD14KToKKyAgICAgICAgICAgIGVxKHggJiAwLCAwKQorICAgICAgICAgICAgZXEoeCB8IDAsIHgpCisgICAgICAgICAgICBlcSh4IF4gMCwgeCkKKyAgICAgICAgICAgIGVxKHggJiAtMSwgeCkKKyAgICAgICAgICAgIGVxKHggfCAtMSwgLTEpCisgICAgICAgICAgICBlcSh4IF4gLTEsIH54KQorICAgICAgICAgICAgZXEoeCwgfn54KQorICAgICAgICAgICAgZXEoeCAmIHgsIHgpCisgICAgICAgICAgICBlcSh4IHwgeCwgeCkKKyAgICAgICAgICAgIGVxKHggXiB4LCAwKQorICAgICAgICAgICAgZXEoeCAmIH54LCAwKQorICAgICAgICAgICAgZXEoeCB8IH54LCAtMSkKKyAgICAgICAgICAgIGVxKHggXiB+eCwgLTEpCisgICAgICAgICAgICBlcSgteCwgMSArIH54KQorICAgICAgICAgICAgZXEoLXgsIH4oeC0xKSkKICAgICAgICAgZm9yIG4gaW4gcmFuZ2UoMipTSElGVCk6CiAgICAgICAgICAgICBwMiA9IDIgKiogbgotICAgICAgICAgICAgZXEoeCA8PCBuID4+IG4sIHgsCi0gICAgICAgICAgICAgICAgRnJtKCJ4IDw8IG4gPj4gbiAhPSB4IGZvciB4PSVyLCBuPSVyIiwgKHgsIG4pKSkKLSAgICAgICAgICAgIGVxKHggLy8gcDIsIHggPj4gbiwKLSAgICAgICAgICAgICAgICBGcm0oInggLy8gcDIgIT0geCA+PiBuIGZvciB4PSVyIG49JXIgcDI9JXIiLCAoeCwgbiwgcDIpKSkKLSAgICAgICAgICAgIGVxKHggKiBwMiwgeCA8PCBuLAotICAgICAgICAgICAgICAgIEZybSgieCAqIHAyICE9IHggPDwgbiBmb3IgeD0lciBuPSVyIHAyPSVyIiwgKHgsIG4sIHAyKSkpCi0gICAgICAgICAgICBlcSh4ICYgLXAyLCB4ID4+IG4gPDwgbiwKLSAgICAgICAgICAgICAgICBGcm0oIm5vdCB4ICYgLXAyID09IHggPj4gbiA8PCBuIGZvciB4PSVyIG49JXIgcDI9JXIiLCAoeCwgbiwgcDIpKSkKLSAgICAgICAgICAgIGVxKHggJiAtcDIsIHggJiB+KHAyIC0gMSksCi0gICAgICAgICAgICAgICAgRnJtKCJub3QgeCAmIC1wMiA9PSB4ICYgfihwMiAtIDEpIGZvciB4PSVyIG49JXIgcDI9JXIiLCAoeCwgbiwgcDIpKSkKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KHg9eCwgbj1uLCBwMj1wMik6CisgICAgICAgICAgICAgICAgZXEoeCA8PCBuID4+IG4sIHgpCisgICAgICAgICAgICAgICAgZXEoeCAvLyBwMiwgeCA+PiBuKQorICAgICAgICAgICAgICAgIGVxKHggKiBwMiwgeCA8PCBuKQorICAgICAgICAgICAgICAgIGVxKHggJiAtcDIsIHggPj4gbiA8PCBuKQorICAgICAgICAgICAgICAgIGVxKHggJiAtcDIsIHggJiB+KHAyIC0gMSkpCiAKICAgICBkZWYgY2hlY2tfYml0b3BfaWRlbnRpdGllc18yKHNlbGYsIHgsIHkpOgogICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKLSAgICAgICAgZXEoeCAmIHksIHkgJiB4LCBGcm0oInggJiB5ICE9IHkgJiB4IGZvciB4PSVyLCB5PSVyIiwgKHgsIHkpKSkKLSAgICAgICAgZXEoeCB8IHksIHkgfCB4LCBGcm0oInggfCB5ICE9IHkgfCB4IGZvciB4PSVyLCB5PSVyIiwgKHgsIHkpKSkKLSAgICAgICAgZXEoeCBeIHksIHkgXiB4LCBGcm0oInggXiB5ICE9IHkgXiB4IGZvciB4PSVyLCB5PSVyIiwgKHgsIHkpKSkKLSAgICAgICAgZXEoeCBeIHkgXiB4LCB5LCBGcm0oInggXiB5IF4geCAhPSB5IGZvciB4PSVyLCB5PSVyIiwgKHgsIHkpKSkKLSAgICAgICAgZXEoeCAmIHksIH4ofnggfCB+eSksIEZybSgieCAmIHkgIT0gfih+eCB8IH55KSBmb3IgeD0lciwgeT0lciIsICh4LCB5KSkpCi0gICAgICAgIGVxKHggfCB5LCB+KH54ICYgfnkpLCBGcm0oInggfCB5ICE9IH4ofnggJiB+eSkgZm9yIHg9JXIsIHk9JXIiLCAoeCwgeSkpKQotICAgICAgICBlcSh4IF4geSwgKHggfCB5KSAmIH4oeCAmIHkpLAotICAgICAgICAgICAgIEZybSgieCBeIHkgIT0gKHggfCB5KSAmIH4oeCAmIHkpIGZvciB4PSVyLCB5PSVyIiwgKHgsIHkpKSkKLSAgICAgICAgZXEoeCBeIHksICh4ICYgfnkpIHwgKH54ICYgeSksCi0gICAgICAgICAgICAgRnJtKCJ4IF4geSA9PSAoeCAmIH55KSB8ICh+eCAmIHkpIGZvciB4PSVyLCB5PSVyIiwgKHgsIHkpKSkKLSAgICAgICAgZXEoeCBeIHksICh4IHwgeSkgJiAofnggfCB+eSksCi0gICAgICAgICAgICAgRnJtKCJ4IF4geSA9PSAoeCB8IHkpICYgKH54IHwgfnkpIGZvciB4PSVyLCB5PSVyIiwgKHgsIHkpKSkKKyAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoeD14LCB5PXkpOgorICAgICAgICAgICAgZXEoeCAmIHksIHkgJiB4KQorICAgICAgICAgICAgZXEoeCB8IHksIHkgfCB4KQorICAgICAgICAgICAgZXEoeCBeIHksIHkgXiB4KQorICAgICAgICAgICAgZXEoeCBeIHkgXiB4LCB5KQorICAgICAgICAgICAgZXEoeCAmIHksIH4ofnggfCB+eSkpCisgICAgICAgICAgICBlcSh4IHwgeSwgfih+eCAmIH55KSkKKyAgICAgICAgICAgIGVxKHggXiB5LCAoeCB8IHkpICYgfih4ICYgeSkpCisgICAgICAgICAgICBlcSh4IF4geSwgKHggJiB+eSkgfCAofnggJiB5KSkKKyAgICAgICAgICAgIGVxKHggXiB5LCAoeCB8IHkpICYgKH54IHwgfnkpKQogCiAgICAgZGVmIGNoZWNrX2JpdG9wX2lkZW50aXRpZXNfMyhzZWxmLCB4LCB5LCB6KToKICAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCi0gICAgICAgIGVxKCh4ICYgeSkgJiB6LCB4ICYgKHkgJiB6KSwKLSAgICAgICAgICAgICBGcm0oIih4ICYgeSkgJiB6ICE9IHggJiAoeSAmIHopIGZvciB4PSVyLCB5PSVyLCB6PSVyIiwgKHgsIHksIHopKSkKLSAgICAgICAgZXEoKHggfCB5KSB8IHosIHggfCAoeSB8IHopLAotICAgICAgICAgICAgIEZybSgiKHggfCB5KSB8IHogIT0geCB8ICh5IHwgeikgZm9yIHg9JXIsIHk9JXIsIHo9JXIiLCAoeCwgeSwgeikpKQotICAgICAgICBlcSgoeCBeIHkpIF4geiwgeCBeICh5IF4geiksCi0gICAgICAgICAgICAgRnJtKCIoeCBeIHkpIF4geiAhPSB4IF4gKHkgXiB6KSBmb3IgeD0lciwgeT0lciwgej0lciIsICh4LCB5LCB6KSkpCi0gICAgICAgIGVxKHggJiAoeSB8IHopLCAoeCAmIHkpIHwgKHggJiB6KSwKLSAgICAgICAgICAgICBGcm0oInggJiAoeSB8IHopICE9ICh4ICYgeSkgfCAoeCAmIHopIGZvciB4PSVyLCB5PSVyLCB6PSVyIiwgKHgsIHksIHopKSkKLSAgICAgICAgZXEoeCB8ICh5ICYgeiksICh4IHwgeSkgJiAoeCB8IHopLAotICAgICAgICAgICAgIEZybSgieCB8ICh5ICYgeikgIT0gKHggfCB5KSAmICh4IHwgeikgZm9yIHg9JXIsIHk9JXIsIHo9JXIiLCAoeCwgeSwgeikpKQorICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdCh4PXgsIHk9eSwgej16KToKKyAgICAgICAgICAgIGVxKCh4ICYgeSkgJiB6LCB4ICYgKHkgJiB6KSkKKyAgICAgICAgICAgIGVxKCh4IHwgeSkgfCB6LCB4IHwgKHkgfCB6KSkKKyAgICAgICAgICAgIGVxKCh4IF4geSkgXiB6LCB4IF4gKHkgXiB6KSkKKyAgICAgICAgICAgIGVxKHggJiAoeSB8IHopLCAoeCAmIHkpIHwgKHggJiB6KSkKKyAgICAgICAgICAgIGVxKHggfCAoeSAmIHopLCAoeCB8IHkpICYgKHggfCB6KSkKIAogICAgIGRlZiB0ZXN0X2JpdG9wX2lkZW50aXRpZXMoc2VsZik6CiAgICAgICAgIGZvciB4IGluIHNwZWNpYWw6CkBAIC0zMjQsMTEgKzMwNywxMSBAQAogICAgIGRlZiBjaGVja19mb3JtYXRfMShzZWxmLCB4KToKICAgICAgICAgZm9yIGJhc2UsIG1hcHBlciBpbiAoMiwgYmluKSwgKDgsIG9jdCksICgxMCwgc3RyKSwgKDEwLCByZXByKSwgKDE2LCBoZXgpOgogICAgICAgICAgICAgZ290ID0gbWFwcGVyKHgpCi0gICAgICAgICAgICBleHBlY3RlZCA9IHNlbGYuc2xvd19mb3JtYXQoeCwgYmFzZSkKLSAgICAgICAgICAgIG1zZyA9IEZybSgiJXMgcmV0dXJuZWQgJXIgYnV0IGV4cGVjdGVkICVyIGZvciAlciIsCi0gICAgICAgICAgICAgICAgbWFwcGVyLl9fbmFtZV9fLCBnb3QsIGV4cGVjdGVkLCB4KQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnb3QsIGV4cGVjdGVkLCBtc2cpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludChnb3QsIDApLCB4LCBGcm0oJ2ludCgiJXMiLCAwKSAhPSAlcicsIGdvdCwgeCkpCisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdCh4PXgsIG1hcHBlcj1tYXBwZXIuX19uYW1lX18pOgorICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gc2VsZi5zbG93X2Zvcm1hdCh4LCBiYXNlKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ290LCBleHBlY3RlZCkKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGdvdD1nb3QpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KGdvdCwgMCksIHgpCiAKICAgICBkZWYgdGVzdF9mb3JtYXQoc2VsZik6CiAgICAgICAgIGZvciB4IGluIHNwZWNpYWw6CkBAIC02MjcsMTQgKzYxMCwxNSBAQAogICAgICAgICAgICAgZm9yIHkgaW4gY2FzZXM6CiAgICAgICAgICAgICAgICAgUnkgPSBSYXQoeSkKICAgICAgICAgICAgICAgICBSY21wID0gKFJ4ID4gUnkpIC0gKFJ4IDwgUnkpCi0gICAgICAgICAgICAgICAgeHljbXAgPSAoeCA+IHkpIC0gKHggPCB5KQotICAgICAgICAgICAgICAgIGVxKFJjbXAsIHh5Y21wLCBGcm0oIiVyICVyICVkICVkIiwgeCwgeSwgUmNtcCwgeHljbXApKQotICAgICAgICAgICAgICAgIGVxKHggPT0geSwgUmNtcCA9PSAwLCBGcm0oIiVyID09ICVyICVkIiwgeCwgeSwgUmNtcCkpCi0gICAgICAgICAgICAgICAgZXEoeCAhPSB5LCBSY21wICE9IDAsIEZybSgiJXIgIT0gJXIgJWQiLCB4LCB5LCBSY21wKSkKLSAgICAgICAgICAgICAgICBlcSh4IDwgeSwgUmNtcCA8IDAsIEZybSgiJXIgPCAlciAlZCIsIHgsIHksIFJjbXApKQotICAgICAgICAgICAgICAgIGVxKHggPD0geSwgUmNtcCA8PSAwLCBGcm0oIiVyIDw9ICVyICVkIiwgeCwgeSwgUmNtcCkpCi0gICAgICAgICAgICAgICAgZXEoeCA+IHksIFJjbXAgPiAwLCBGcm0oIiVyID4gJXIgJWQiLCB4LCB5LCBSY21wKSkKLSAgICAgICAgICAgICAgICBlcSh4ID49IHksIFJjbXAgPj0gMCwgRnJtKCIlciA+PSAlciAlZCIsIHgsIHksIFJjbXApKQorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KHg9eCwgeT15LCBSY21wPVJjbXApOgorICAgICAgICAgICAgICAgICAgICB4eWNtcCA9ICh4ID4geSkgLSAoeCA8IHkpCisgICAgICAgICAgICAgICAgICAgIGVxKFJjbXAsIHh5Y21wKQorICAgICAgICAgICAgICAgICAgICBlcSh4ID09IHksIFJjbXAgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgZXEoeCAhPSB5LCBSY21wICE9IDApCisgICAgICAgICAgICAgICAgICAgIGVxKHggPCB5LCBSY21wIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgZXEoeCA8PSB5LCBSY21wIDw9IDApCisgICAgICAgICAgICAgICAgICAgIGVxKHggPiB5LCBSY21wID4gMCkKKyAgICAgICAgICAgICAgICAgICAgZXEoeCA+PSB5LCBSY21wID49IDApCiAKICAgICBkZWYgdGVzdF9fZm9ybWF0X18oc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KDEyMzQ1Njc4OSwgJ2QnKSwgJzEyMzQ1Njc4OScpCkBAIC0xMDc5LDcgKzEwNjMsNyBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCAoMjU2KS50b19ieXRlcywgMSwgJ2JpZycsIHNpZ25lZD1UcnVlKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCAoMjU2KS50b19ieXRlcywgMSwgJ2xpdHRsZScsIHNpZ25lZD1GYWxzZSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgKDI1NikudG9fYnl0ZXMsIDEsICdsaXR0bGUnLCBzaWduZWQ9VHJ1ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgKC0xKS50b19ieXRlcywgMiwgJ2JpZycsIHNpZ25lZD1GYWxzZSksCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsICgtMSkudG9fYnl0ZXMsIDIsICdiaWcnLCBzaWduZWQ9RmFsc2UpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsICgtMSkudG9fYnl0ZXMsIDIsICdsaXR0bGUnLCBzaWduZWQ9RmFsc2UpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDApLnRvX2J5dGVzKDAsICdiaWcnKSwgYicnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgxKS50b19ieXRlcyg1LCAnYmlnJyksIGInXHgwMFx4MDBceDAwXHgwMFx4MDEnKQpAQCAtMTIzNSw2ICsxMjE5LDEzIEBACiAgICAgICAgIGZvciBuIGluIG1hcChpbnQsIGludGVnZXJzKToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobiwgMCkKIAorICAgIGRlZiB0ZXN0X3NoaWZ0X2Jvb2woc2VsZik6CisgICAgICAgICMgSXNzdWUgIzIxNDIyOiBlbnN1cmUgdGhhdCBib29sIDw8IGludCBhbmQgYm9vbCA+PiBpbnQgcmV0dXJuIGludAorICAgICAgICBmb3IgdmFsdWUgaW4gKFRydWUsIEZhbHNlKToKKyAgICAgICAgICAgIGZvciBzaGlmdCBpbiAoMCwgMik6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHZhbHVlIDw8IHNoaWZ0KSwgaW50KQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZSh2YWx1ZSA+PiBzaGlmdCksIGludCkKKwogCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoTG9uZ1Rlc3QpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2x6bWEucHkgYi9MaWIvdGVzdC90ZXN0X2x6bWEucHkKaW5kZXggMTYwYjBlOC4uMDdmYWRiZCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9sem1hLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfbHptYS5weQpAQCAtMjIwLDEwICsyMjAsMTEgQEAKICAgICAjIFBpY2tsaW5nIHJhaXNlcyBhbiBleGNlcHRpb247IHRoZXJlJ3Mgbm8gd2F5IHRvIHNlcmlhbGl6ZSBhbiBsem1hX3N0cmVhbS4KIAogICAgIGRlZiB0ZXN0X3BpY2tsZShzZWxmKToKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgotICAgICAgICAgICAgcGlja2xlLmR1bXBzKExaTUFDb21wcmVzc29yKCkpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKLSAgICAgICAgICAgIHBpY2tsZS5kdW1wcyhMWk1BRGVjb21wcmVzc29yKCkpCisgICAgICAgIGZvciBwcm90byBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgICAgIHBpY2tsZS5kdW1wcyhMWk1BQ29tcHJlc3NvcigpLCBwcm90bykKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgICAgICBwaWNrbGUuZHVtcHMoTFpNQURlY29tcHJlc3NvcigpLCBwcm90bykKIAogCiBjbGFzcyBDb21wcmVzc0RlY29tcHJlc3NGdW5jdGlvblRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTM4Myw2ICszODQsOCBAQAogICAgICAgICAgICAgcGFzcwogICAgICAgICB3aXRoIExaTUFGaWxlKEJ5dGVzSU8oKSwgInciKSBhcyBmOgogICAgICAgICAgICAgcGFzcworICAgICAgICB3aXRoIExaTUFGaWxlKEJ5dGVzSU8oKSwgIngiKSBhcyBmOgorICAgICAgICAgICAgcGFzcwogICAgICAgICB3aXRoIExaTUFGaWxlKEJ5dGVzSU8oKSwgImEiKSBhcyBmOgogICAgICAgICAgICAgcGFzcwogCkBAIC00MTAsMTMgKzQxMywyOSBAQAogICAgICAgICAgICAgd2l0aCBMWk1BRmlsZShURVNURk4sICJhYiIpOgogICAgICAgICAgICAgICAgIHBhc3MKIAorICAgIGRlZiB0ZXN0X2luaXRfd2l0aF94X21vZGUoc2VsZik6CisgICAgICAgIHNlbGYuYWRkQ2xlYW51cCh1bmxpbmssIFRFU1RGTikKKyAgICAgICAgZm9yIG1vZGUgaW4gKCJ4IiwgInhiIik6CisgICAgICAgICAgICB1bmxpbmsoVEVTVEZOKQorICAgICAgICAgICAgd2l0aCBMWk1BRmlsZShURVNURk4sIG1vZGUpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoRmlsZUV4aXN0c0Vycm9yKToKKyAgICAgICAgICAgICAgICB3aXRoIExaTUFGaWxlKFRFU1RGTiwgbW9kZSk6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKwogICAgIGRlZiB0ZXN0X2luaXRfYmFkX21vZGUoc2VsZik6CiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CiAgICAgICAgICAgICBMWk1BRmlsZShCeXRlc0lPKENPTVBSRVNTRURfWFopLCAoMywgIngiKSkKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKICAgICAgICAgICAgIExaTUFGaWxlKEJ5dGVzSU8oQ09NUFJFU1NFRF9YWiksICIiKQogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgotICAgICAgICAgICAgTFpNQUZpbGUoQnl0ZXNJTyhDT01QUkVTU0VEX1haKSwgIngiKQorICAgICAgICAgICAgTFpNQUZpbGUoQnl0ZXNJTyhDT01QUkVTU0VEX1haKSwgInh0IikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIExaTUFGaWxlKEJ5dGVzSU8oQ09NUFJFU1NFRF9YWiksICJ4KyIpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBMWk1BRmlsZShCeXRlc0lPKENPTVBSRVNTRURfWFopLCAicngiKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgTFpNQUZpbGUoQnl0ZXNJTyhDT01QUkVTU0VEX1haKSwgInd4IikKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKICAgICAgICAgICAgIExaTUFGaWxlKEJ5dGVzSU8oQ09NUFJFU1NFRF9YWiksICJydCIpCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CkBAIC02OTgsNiArNzE3LDIwIEBACiAgICAgICAgIHdpdGggTFpNQUZpbGUoQnl0ZXNJTyhDT01QUkVTU0VEX1haWzoxMjhdKSkgYXMgZjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEVPRkVycm9yLCBmLnJlYWQpCiAKKyAgICBkZWYgdGVzdF9yZWFkX3RydW5jYXRlZChzZWxmKToKKyAgICAgICAgIyBEcm9wIHN0cmVhbSBmb290ZXI6IENSQyAoNCBieXRlcyksIGluZGV4IHNpemUgKDQgYnl0ZXMpLAorICAgICAgICAjIGZsYWdzICgyIGJ5dGVzKSBhbmQgbWFnaWMgbnVtYmVyICgyIGJ5dGVzKS4KKyAgICAgICAgdHJ1bmNhdGVkID0gQ09NUFJFU1NFRF9YWls6LTEyXQorICAgICAgICB3aXRoIExaTUFGaWxlKEJ5dGVzSU8odHJ1bmNhdGVkKSkgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEVPRkVycm9yLCBmLnJlYWQpCisgICAgICAgIHdpdGggTFpNQUZpbGUoQnl0ZXNJTyh0cnVuY2F0ZWQpKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQobGVuKElOUFVUKSksIElOUFVUKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRU9GRXJyb3IsIGYucmVhZCwgMSkKKyAgICAgICAgIyBJbmNvbXBsZXRlIDEyLWJ5dGUgaGVhZGVyLgorICAgICAgICBmb3IgaSBpbiByYW5nZSgxMik6CisgICAgICAgICAgICB3aXRoIExaTUFGaWxlKEJ5dGVzSU8odHJ1bmNhdGVkWzppXSkpIGFzIGY6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRU9GRXJyb3IsIGYucmVhZCwgMSkKKwogICAgIGRlZiB0ZXN0X3JlYWRfYmFkX2FyZ3Moc2VsZik6CiAgICAgICAgIGYgPSBMWk1BRmlsZShCeXRlc0lPKENPTVBSRVNTRURfWFopKQogICAgICAgICBmLmNsb3NlKCkKQEAgLTEwNDEsOCArMTA3NCw2IEBACiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CiAgICAgICAgICAgICBsem1hLm9wZW4oVEVTVEZOLCAiIikKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKLSAgICAgICAgICAgIGx6bWEub3BlbihURVNURk4sICJ4IikKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKICAgICAgICAgICAgIGx6bWEub3BlbihURVNURk4sICJyYnQiKQogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgogICAgICAgICAgICAgbHptYS5vcGVuKFRFU1RGTiwgInJiIiwgZW5jb2Rpbmc9InV0Zi04IikKQEAgLTEwOTEsNiArMTEyMiwxNiBAQAogICAgICAgICAgICAgd2l0aCBsem1hLm9wZW4oYmlvLCAicnQiLCBuZXdsaW5lPSJcciIpIGFzIGY6CiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWRsaW5lcygpLCBbdGV4dF0pCiAKKyAgICBkZWYgdGVzdF94X21vZGUoc2VsZik6CisgICAgICAgIHNlbGYuYWRkQ2xlYW51cCh1bmxpbmssIFRFU1RGTikKKyAgICAgICAgZm9yIG1vZGUgaW4gKCJ4IiwgInhiIiwgInh0Iik6CisgICAgICAgICAgICB1bmxpbmsoVEVTVEZOKQorICAgICAgICAgICAgd2l0aCBsem1hLm9wZW4oVEVTVEZOLCBtb2RlKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEZpbGVFeGlzdHNFcnJvcik6CisgICAgICAgICAgICAgICAgd2l0aCBsem1hLm9wZW4oVEVTVEZOLCBtb2RlKToKKyAgICAgICAgICAgICAgICAgICAgcGFzcworCiAKIGNsYXNzIE1pc2NlbGxhbmVvdXNUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbWFjcGF0aC5weSBiL0xpYi90ZXN0L3Rlc3RfbWFjcGF0aC5weQppbmRleCBhZTRlNTY0Li4yMmY4NDkxIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X21hY3BhdGgucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9tYWNwYXRoLnB5CkBAIC00OSwxNiArNDksNDAgQEAKICAgICBkZWYgdGVzdF9qb2luKHNlbGYpOgogICAgICAgICBqb2luID0gbWFjcGF0aC5qb2luCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoam9pbignYScsICdiJyksICc6YTpiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChqb2luKCc6YScsICdiJyksICc6YTpiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChqb2luKCc6YTonLCAnYicpLCAnOmE6YicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoam9pbignOmE6OicsICdiJyksICc6YTo6YicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoam9pbignOmEnLCAnOjpiJyksICc6YTo6YicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoam9pbignYScsICc6JyksICc6YTonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGpvaW4oJ2E6JywgJzonKSwgJ2E6JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChqb2luKCdhJywgJycpLCAnOmE6JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChqb2luKCdhOicsICcnKSwgJ2E6JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChqb2luKCcnLCAnJyksICcnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGpvaW4oJycsICdhOmInKSwgJ2E6YicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoam9pbignJywgJ2EnLCAnYicpLCAnOmE6YicpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoam9pbignYTpiJywgJ2MnKSwgJ2E6YjpjJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChqb2luKCdhOmInLCAnOmMnKSwgJ2E6YjpjJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChqb2luKCdhJywgJzpiJywgJzpjJyksICc6YTpiOmMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGpvaW4oJ2EnLCAnYjonKSwgJ2I6JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChqb2luKCdhOicsICdiOicpLCAnYjonKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoam9pbihiJ2EnLCBiJ2InKSwgYic6YTpiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChqb2luKGInOmEnLCBiJ2InKSwgYic6YTpiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChqb2luKGInOmE6JywgYidiJyksIGInOmE6YicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoam9pbihiJzphOjonLCBiJ2InKSwgYic6YTo6YicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoam9pbihiJzphJywgYic6OmInKSwgYic6YTo6YicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoam9pbihiJ2EnLCBiJzonKSwgYic6YTonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGpvaW4oYidhOicsIGInOicpLCBiJ2E6JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChqb2luKGInYScsIGInJyksIGInOmE6JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChqb2luKGInYTonLCBiJycpLCBiJ2E6JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChqb2luKGInJywgYicnKSwgYicnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGpvaW4oYicnLCBiJ2E6YicpLCBiJ2E6YicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoam9pbihiJycsIGInYScsIGInYicpLCBiJzphOmInKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGpvaW4oYidhOmInLCBiJ2MnKSwgYidhOmI6YycpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoam9pbihiJ2E6YicsIGInOmMnKSwgYidhOmI6YycpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoam9pbihiJ2EnLCBiJzpiJywgYic6YycpLCBiJzphOmI6YycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoam9pbihiJ2EnLCBiJ2I6JyksIGInYjonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGpvaW4oYidhOicsIGInYjonKSwgYidiOicpCiAKICAgICBkZWYgdGVzdF9zcGxpdGV4dChzZWxmKToKICAgICAgICAgc3BsaXRleHQgPSBtYWNwYXRoLnNwbGl0ZXh0CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X21haWxib3gucHkgYi9MaWIvdGVzdC90ZXN0X21haWxib3gucHkKaW5kZXggNWU5ZTMwYS4uMDk5MWY3NCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9tYWlsYm94LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfbWFpbGJveC5weQpAQCAtMzAwLDcgKzMwMCw3IEBACiAKICAgICBkZWYgdGVzdF9pdGVya2V5cyhzZWxmKToKICAgICAgICAgIyBHZXQga2V5cyB1c2luZyBpdGVya2V5cygpCi0gICAgICAgIHNlbGYuX2NoZWNrX2l0ZXJhdGlvbihzZWxmLl9ib3gua2V5cywgZG9fa2V5cz1UcnVlLCBkb192YWx1ZXM9RmFsc2UpCisgICAgICAgIHNlbGYuX2NoZWNrX2l0ZXJhdGlvbihzZWxmLl9ib3guaXRlcmtleXMsIGRvX2tleXM9VHJ1ZSwgZG9fdmFsdWVzPUZhbHNlKQogCiAgICAgZGVmIHRlc3Rfa2V5cyhzZWxmKToKICAgICAgICAgIyBHZXQga2V5cyB1c2luZyBrZXlzKCkKQEAgLTMwOCw3ICszMDgsNyBAQAogCiAgICAgZGVmIHRlc3RfaXRlcnZhbHVlcyhzZWxmKToKICAgICAgICAgIyBHZXQgdmFsdWVzIHVzaW5nIGl0ZXJ2YWx1ZXMoKQotICAgICAgICBzZWxmLl9jaGVja19pdGVyYXRpb24oc2VsZi5fYm94LnZhbHVlcywgZG9fa2V5cz1GYWxzZSwKKyAgICAgICAgc2VsZi5fY2hlY2tfaXRlcmF0aW9uKHNlbGYuX2JveC5pdGVydmFsdWVzLCBkb19rZXlzPUZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9fdmFsdWVzPVRydWUpCiAKICAgICBkZWYgdGVzdF9pdGVyKHNlbGYpOgpAQCAtMzIyLDcgKzMyMiw3IEBACiAKICAgICBkZWYgdGVzdF9pdGVyaXRlbXMoc2VsZik6CiAgICAgICAgICMgR2V0IGtleXMgYW5kIHZhbHVlcyB1c2luZyBpdGVyaXRlbXMoKQotICAgICAgICBzZWxmLl9jaGVja19pdGVyYXRpb24oc2VsZi5fYm94Lml0ZW1zLCBkb19rZXlzPVRydWUsCisgICAgICAgIHNlbGYuX2NoZWNrX2l0ZXJhdGlvbihzZWxmLl9ib3guaXRlcml0ZW1zLCBkb19rZXlzPVRydWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb192YWx1ZXM9VHJ1ZSkKIAogICAgIGRlZiB0ZXN0X2l0ZW1zKHNlbGYpOgpAQCAtNTY0LDEyICs1NjQsMTIgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgbGFtYmRhOiBib3guX19kZWxpdGVtX18oJycpKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBsYW1iZGE6IGJveC5kaXNjYXJkKCcnKSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgbGFtYmRhOiBib3guX19zZXRpdGVtX18oJycsICcnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgbGFtYmRhOiBib3guaXRlcmtleXMoKSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgbGFtYmRhOiBib3gua2V5cygpKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBsYW1iZGE6IGJveC5rZXlzKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIGxhbWJkYTogYm94LnZhbHVlcygpLl9fbmV4dF9fKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIGxhbWJkYTogYm94Lml0ZXJ2YWx1ZXMoKS5fX25leHRfXygpKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBsYW1iZGE6IGJveC5fX2l0ZXJfXygpLl9fbmV4dF9fKCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIGxhbWJkYTogYm94LnZhbHVlcygpKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBsYW1iZGE6IGJveC5pdGVtcygpLm5leHQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgbGFtYmRhOiBib3guaXRlcml0ZW1zKCkuX19uZXh0X18oKSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgbGFtYmRhOiBib3guaXRlbXMoKSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgbGFtYmRhOiBib3guZ2V0KCcnKSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgbGFtYmRhOiBib3guX19nZXRpdGVtX18oJycpKQpAQCAtNTk2LDcgKzU5Niw3IEBACiAKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIFRlc3RNYWlsYm94LnNldFVwKHNlbGYpCi0gICAgICAgIGlmIG9zLm5hbWUgaW4gKCdudCcsICdvczInKSBvciBzeXMucGxhdGZvcm0gPT0gJ2N5Z3dpbic6CisgICAgICAgIGlmIChvcy5uYW1lID09ICdudCcpIG9yIChzeXMucGxhdGZvcm0gPT0gJ2N5Z3dpbicpOgogICAgICAgICAgICAgc2VsZi5fYm94LmNvbG9uID0gJyEnCiAKICAgICBkZWYgYXNzZXJ0TWFpbGJveEVtcHR5KHNlbGYpOgpAQCAtMTAyMCw3ICsxMDIwLDcgQEAKICAgICAgICAgbXRpbWUgPSBvcy5wYXRoLmdldG10aW1lKHNlbGYuX3BhdGgpCiAgICAgICAgIHNlbGYuX2JveCA9IHNlbGYuX2ZhY3Rvcnkoc2VsZi5fcGF0aCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5fYm94KSwgMykKLSAgICAgICAgZm9yIGtleSBpbiBzZWxmLl9ib3gua2V5cygpOgorICAgICAgICBmb3Iga2V5IGluIHNlbGYuX2JveC5pdGVya2V5cygpOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihzZWxmLl9ib3guZ2V0X3N0cmluZyhrZXkpLCB2YWx1ZXMpCiAgICAgICAgIHNlbGYuX2JveC5jbG9zZSgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXRpbWUsIG9zLnBhdGguZ2V0bXRpbWUoc2VsZi5fcGF0aCkpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X21hcnNoYWwucHkgYi9MaWIvdGVzdC90ZXN0X21hcnNoYWwucHkKaW5kZXggMGIxNDEzNy4uOTAzZTEyYyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9tYXJzaGFsLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfbWFyc2hhbC5weQpAQCAtNyw2ICs3LDExIEBACiBpbXBvcnQgb3MKIGltcG9ydCB0eXBlcwogCit0cnk6CisgICAgaW1wb3J0IF90ZXN0Y2FwaQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIF90ZXN0Y2FwaSA9IE5vbmUKKwogY2xhc3MgSGVscGVyTWl4aW46CiAgICAgZGVmIGhlbHBlcihzZWxmLCBzYW1wbGUsICpleHRyYSk6CiAgICAgICAgIG5ldyA9IG1hcnNoYWwubG9hZHMobWFyc2hhbC5kdW1wcyhzYW1wbGUsICpleHRyYSkpCkBAIC0yMiwzNyArMjcsMTMgQEAKIAogY2xhc3MgSW50VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UsIEhlbHBlck1peGluKToKICAgICBkZWYgdGVzdF9pbnRzKHNlbGYpOgotICAgICAgICAjIFRlc3QgdGhlIGZ1bGwgcmFuZ2Ugb2YgUHl0aG9uIGludHMuCi0gICAgICAgIG4gPSBzeXMubWF4c2l6ZQorICAgICAgICAjIFRlc3QgYSByYW5nZSBvZiBQeXRob24gaW50cyBsYXJnZXIgdGhhbiB0aGUgbWFjaGluZSB3b3JkIHNpemUuCisgICAgICAgIG4gPSBzeXMubWF4c2l6ZSAqKiAyCiAgICAgICAgIHdoaWxlIG46CiAgICAgICAgICAgICBmb3IgZXhwZWN0ZWQgaW4gKC1uLCBuKToKICAgICAgICAgICAgICAgICBzZWxmLmhlbHBlcihleHBlY3RlZCkKICAgICAgICAgICAgIG4gPSBuID4+IDEKIAotICAgIGRlZiB0ZXN0X2ludDY0KHNlbGYpOgotICAgICAgICAjIFNpbXVsYXRlIGludCBtYXJzaGFsaW5nIG9uIGEgNjQtYml0IGJveC4gIFRoaXMgaXMgbW9zdCBpbnRlcmVzdGluZyBpZgotICAgICAgICAjIHdlJ3JlIHJ1bm5pbmcgdGhlIHRlc3Qgb24gYSAzMi1iaXQgYm94LCBvZiBjb3Vyc2UuCi0KLSAgICAgICAgZGVmIHRvX2xpdHRsZV9lbmRpYW5fc3RyaW5nKHZhbHVlLCBuYnl0ZXMpOgotICAgICAgICAgICAgYiA9IGJ5dGVhcnJheSgpCi0gICAgICAgICAgICBmb3IgaSBpbiByYW5nZShuYnl0ZXMpOgotICAgICAgICAgICAgICAgIGIuYXBwZW5kKHZhbHVlICYgMHhmZikKLSAgICAgICAgICAgICAgICB2YWx1ZSA+Pj0gOAotICAgICAgICAgICAgcmV0dXJuIGIKLQotICAgICAgICBtYXhpbnQ2NCA9ICgxIDw8IDYzKSAtIDEKLSAgICAgICAgbWluaW50NjQgPSAtbWF4aW50NjQtMQotCi0gICAgICAgIGZvciBiYXNlIGluIG1heGludDY0LCBtaW5pbnQ2NCwgLW1heGludDY0LCAtKG1pbmludDY0ID4+IDEpOgotICAgICAgICAgICAgd2hpbGUgYmFzZToKLSAgICAgICAgICAgICAgICBzID0gYidJJyArIHRvX2xpdHRsZV9lbmRpYW5fc3RyaW5nKGJhc2UsIDgpCi0gICAgICAgICAgICAgICAgZ290ID0gbWFyc2hhbC5sb2FkcyhzKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmFzZSwgZ290KQotICAgICAgICAgICAgICAgIGlmIGJhc2UgPT0gLTE6ICAjIGEgZml4ZWQtcG9pbnQgZm9yIHNoaWZ0aW5nIHJpZ2h0IDEKLSAgICAgICAgICAgICAgICAgICAgYmFzZSA9IDAKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBiYXNlID4+PSAxCi0KICAgICBkZWYgdGVzdF9ib29sKHNlbGYpOgogICAgICAgICBmb3IgYiBpbiAoVHJ1ZSwgRmFsc2UpOgogICAgICAgICAgICAgc2VsZi5oZWxwZXIoYikKQEAgLTE5OSwxMCArMTgwLDE0IEBACiAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgICAgICAgICAgIHBhc3MKIAotICAgIGRlZiB0ZXN0X2xvYWRzX3JlY3Vyc2lvbihzZWxmKToKKyAgICBkZWYgdGVzdF9sb2Fkc18yeF9jb2RlKHNlbGYpOgogICAgICAgICBzID0gYidjJyArIChiJ1gnICogNCo0KSArIGIneycgKiAyKioyMAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtYXJzaGFsLmxvYWRzLCBzKQogCisgICAgZGVmIHRlc3RfbG9hZHNfcmVjdXJzaW9uKHNlbGYpOgorICAgICAgICBzID0gYidjJyArIChiJ1gnICogNCo1KSArIGIneycgKiAyKioyMAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtYXJzaGFsLmxvYWRzLCBzKQorCiAgICAgZGVmIHRlc3RfcmVjdXJzaW9uX2xpbWl0KHNlbGYpOgogICAgICAgICAjIENyZWF0ZSBhIGRlZXBseSBuZXN0ZWQgc3RydWN0dXJlLgogICAgICAgICBoZWFkID0gbGFzdCA9IFtdCkBAIC0yODAsMTUgKzI2NSwyMCBAQAogCiAgICAgZGVmIHRlc3RfYmFkX3JlYWRlcihzZWxmKToKICAgICAgICAgY2xhc3MgQmFkUmVhZGVyKGlvLkJ5dGVzSU8pOgotICAgICAgICAgICAgZGVmIHJlYWQoc2VsZiwgbj0tMSk6Ci0gICAgICAgICAgICAgICAgYiA9IHN1cGVyKCkucmVhZChuKQorICAgICAgICAgICAgZGVmIHJlYWRpbnRvKHNlbGYsIGJ1Zik6CisgICAgICAgICAgICAgICAgbiA9IHN1cGVyKCkucmVhZGludG8oYnVmKQogICAgICAgICAgICAgICAgIGlmIG4gaXMgbm90IE5vbmUgYW5kIG4gPiA0OgotICAgICAgICAgICAgICAgICAgICBiICs9IGInICcgKiAxMCoqNgotICAgICAgICAgICAgICAgIHJldHVybiBiCisgICAgICAgICAgICAgICAgICAgIG4gKz0gMTAqKjYKKyAgICAgICAgICAgICAgICByZXR1cm4gbgogICAgICAgICBmb3IgdmFsdWUgaW4gKDEuMCwgMWosIGInMDEyMzQ1Njc4OScsICcwMTIzNDU2Nzg5Jyk6CiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtYXJzaGFsLmxvYWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCYWRSZWFkZXIobWFyc2hhbC5kdW1wcyh2YWx1ZSkpKQogCisgICAgZGVmIF90ZXN0X2VvZihzZWxmKToKKyAgICAgICAgZGF0YSA9IG1hcnNoYWwuZHVtcHMoKCJoZWxsbyIsICJkb2xseSIsIE5vbmUpKQorICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4oZGF0YSkpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRU9GRXJyb3IsIG1hcnNoYWwubG9hZHMsIGRhdGFbMDogaV0pCisKIExBUkdFX1NJWkUgPSAyKiozMQogcG9pbnRlcl9zaXplID0gOCBpZiBzeXMubWF4c2l6ZSA+IDB4RkZGRkZGRkYgZWxzZSA0CiAKQEAgLTMzMywxOCArMzIzLDIwNCBAQAogICAgIGRlZiB0ZXN0X2J5dGVhcnJheShzZWxmLCBzaXplKToKICAgICAgICAgc2VsZi5jaGVja191bm1hcnNoYWxsYWJsZShieXRlYXJyYXkoc2l6ZSkpCiAKK2RlZiBDb2xsZWN0T2JqZWN0SURzKGlkcywgb2JqKToKKyAgICAiIiJDb2xsZWN0IG9iamVjdCBpZHMgc2VlbiBpbiBhIHN0cnVjdHVyZSIiIgorICAgIGlmIGlkKG9iaikgaW4gaWRzOgorICAgICAgICByZXR1cm4KKyAgICBpZHMuYWRkKGlkKG9iaikpCisgICAgaWYgaXNpbnN0YW5jZShvYmosIChsaXN0LCB0dXBsZSwgc2V0LCBmcm96ZW5zZXQpKToKKyAgICAgICAgZm9yIGUgaW4gb2JqOgorICAgICAgICAgICAgQ29sbGVjdE9iamVjdElEcyhpZHMsIGUpCisgICAgZWxpZiBpc2luc3RhbmNlKG9iaiwgZGljdCk6CisgICAgICAgIGZvciBrLCB2IGluIG9iai5pdGVtcygpOgorICAgICAgICAgICAgQ29sbGVjdE9iamVjdElEcyhpZHMsIGspCisgICAgICAgICAgICBDb2xsZWN0T2JqZWN0SURzKGlkcywgdikKKyAgICByZXR1cm4gbGVuKGlkcykKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KEludFRlc3RDYXNlLAotICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0VGVzdENhc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nVGVzdENhc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgQ29kZVRlc3RDYXNlLAotICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRhaW5lclRlc3RDYXNlLAotICAgICAgICAgICAgICAgICAgICAgICAgIEV4Y2VwdGlvblRlc3RDYXNlLAotICAgICAgICAgICAgICAgICAgICAgICAgIEJ1ZmZlclRlc3RDYXNlLAotICAgICAgICAgICAgICAgICAgICAgICAgIEJ1Z3NUZXN0Q2FzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBMYXJnZVZhbHVlc1Rlc3RDYXNlLAotICAgICAgICAgICAgICAgICAgICAgICAgKQorY2xhc3MgSW5zdGFuY2luZ1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlLCBIZWxwZXJNaXhpbik6CisgICAgaW50b2JqID0gMTIzMzIxCisgICAgZmxvYXRvYmogPSAxLjIzNDUKKyAgICBzdHJvYmogPSAiYWJjZGUiKjMKKyAgICBkaWN0b2JqID0geyJoZWxsbyI6ZmxvYXRvYmosICJnb29kYnllIjpmbG9hdG9iaiwgZmxvYXRvYmo6ImhlbGxvIn0KKworICAgIGRlZiBoZWxwZXIzKHNlbGYsIHJzYW1wbGUsIHJlY3Vyc2l2ZT1GYWxzZSwgc2ltcGxlPUZhbHNlKToKKyAgICAgICAgI3dlIGhhdmUgdHdvIGluc3RhbmNlcworICAgICAgICBzYW1wbGUgPSAocnNhbXBsZSwgcnNhbXBsZSkKKworICAgICAgICBuMCA9IENvbGxlY3RPYmplY3RJRHMoc2V0KCksIHNhbXBsZSkKKworICAgICAgICBzMyA9IG1hcnNoYWwuZHVtcHMoc2FtcGxlLCAzKQorICAgICAgICBuMyA9IENvbGxlY3RPYmplY3RJRHMoc2V0KCksIG1hcnNoYWwubG9hZHMoczMpKQorCisgICAgICAgICNzYW1lIG51bWJlciBvZiBpbnN0YW5jZXMgZ2VuZXJhdGVkCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobjMsIG4wKQorCisgICAgICAgIGlmIG5vdCByZWN1cnNpdmU6CisgICAgICAgICAgICAjY2FuIGNvbXBhcmUgd2l0aCB2ZXJzaW9uIDIKKyAgICAgICAgICAgIHMyID0gbWFyc2hhbC5kdW1wcyhzYW1wbGUsIDIpCisgICAgICAgICAgICBuMiA9IENvbGxlY3RPYmplY3RJRHMoc2V0KCksIG1hcnNoYWwubG9hZHMoczIpKQorICAgICAgICAgICAgI29sZCBmb3JtYXQgZ2VuZXJhdGVkIG1vcmUgaW5zdGFuY2VzCisgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIobjIsIG4wKQorCisgICAgICAgICAgICAjaWYgY29tcGxleCBvYmplY3RzIGFyZSBpbiB0aGVyZSwgb2xkIGZvcm1hdCBpcyBsYXJnZXIKKyAgICAgICAgICAgIGlmIG5vdCBzaW1wbGU6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKGxlbihzMiksIGxlbihzMykpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKGxlbihzMiksIGxlbihzMykpCisKKyAgICBkZWYgdGVzdEludChzZWxmKToKKyAgICAgICAgc2VsZi5oZWxwZXIoc2VsZi5pbnRvYmopCisgICAgICAgIHNlbGYuaGVscGVyMyhzZWxmLmludG9iaiwgc2ltcGxlPVRydWUpCisKKyAgICBkZWYgdGVzdEZsb2F0KHNlbGYpOgorICAgICAgICBzZWxmLmhlbHBlcihzZWxmLmZsb2F0b2JqKQorICAgICAgICBzZWxmLmhlbHBlcjMoc2VsZi5mbG9hdG9iaikKKworICAgIGRlZiB0ZXN0U3RyKHNlbGYpOgorICAgICAgICBzZWxmLmhlbHBlcihzZWxmLnN0cm9iaikKKyAgICAgICAgc2VsZi5oZWxwZXIzKHNlbGYuc3Ryb2JqKQorCisgICAgZGVmIHRlc3REaWN0KHNlbGYpOgorICAgICAgICBzZWxmLmhlbHBlcihzZWxmLmRpY3RvYmopCisgICAgICAgIHNlbGYuaGVscGVyMyhzZWxmLmRpY3RvYmopCisKKyAgICBkZWYgdGVzdE1vZHVsZShzZWxmKToKKyAgICAgICAgd2l0aCBvcGVuKF9fZmlsZV9fLCAicmIiKSBhcyBmOgorICAgICAgICAgICAgY29kZSA9IGYucmVhZCgpCisgICAgICAgIGlmIF9fZmlsZV9fLmVuZHN3aXRoKCIucHkiKToKKyAgICAgICAgICAgIGNvZGUgPSBjb21waWxlKGNvZGUsIF9fZmlsZV9fLCAiZXhlYyIpCisgICAgICAgIHNlbGYuaGVscGVyKGNvZGUpCisgICAgICAgIHNlbGYuaGVscGVyMyhjb2RlKQorCisgICAgZGVmIHRlc3RSZWN1cnNpb24oc2VsZik6CisgICAgICAgIGQgPSBkaWN0KHNlbGYuZGljdG9iaikKKyAgICAgICAgZFsic2VsZiJdID0gZAorICAgICAgICBzZWxmLmhlbHBlcjMoZCwgcmVjdXJzaXZlPVRydWUpCisgICAgICAgIGwgPSBbc2VsZi5kaWN0b2JqXQorICAgICAgICBsLmFwcGVuZChsKQorICAgICAgICBzZWxmLmhlbHBlcjMobCwgcmVjdXJzaXZlPVRydWUpCisKK2NsYXNzIENvbXBhdGliaWxpdHlUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIF90ZXN0KHNlbGYsIHZlcnNpb24pOgorICAgICAgICB3aXRoIG9wZW4oX19maWxlX18sICJyYiIpIGFzIGY6CisgICAgICAgICAgICBjb2RlID0gZi5yZWFkKCkKKyAgICAgICAgaWYgX19maWxlX18uZW5kc3dpdGgoIi5weSIpOgorICAgICAgICAgICAgY29kZSA9IGNvbXBpbGUoY29kZSwgX19maWxlX18sICJleGVjIikKKyAgICAgICAgZGF0YSA9IG1hcnNoYWwuZHVtcHMoY29kZSwgdmVyc2lvbikKKyAgICAgICAgbWFyc2hhbC5sb2FkcyhkYXRhKQorCisgICAgZGVmIHRlc3QwVG8zKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0KDApCisKKyAgICBkZWYgdGVzdDFUbzMoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3QoMSkKKworICAgIGRlZiB0ZXN0MlRvMyhzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdCgyKQorCisgICAgZGVmIHRlc3QzVG8zKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0KDMpCisKK2NsYXNzIEludGVybmluZ1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlLCBIZWxwZXJNaXhpbik6CisgICAgc3Ryb2JqID0gInRoaXMgaXMgYW4gaW50ZXJuZWQgc3RyaW5nIgorICAgIHN0cm9iaiA9IHN5cy5pbnRlcm4oc3Ryb2JqKQorCisgICAgZGVmIHRlc3RJbnRlcm4oc2VsZik6CisgICAgICAgIHMgPSBtYXJzaGFsLmxvYWRzKG1hcnNoYWwuZHVtcHMoc2VsZi5zdHJvYmopKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMsIHNlbGYuc3Ryb2JqKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlkKHMpLCBpZChzZWxmLnN0cm9iaikpCisgICAgICAgIHMyID0gc3lzLmludGVybihzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlkKHMyKSwgaWQocykpCisKKyAgICBkZWYgdGVzdE5vSW50ZXJuKHNlbGYpOgorICAgICAgICBzID0gbWFyc2hhbC5sb2FkcyhtYXJzaGFsLmR1bXBzKHNlbGYuc3Ryb2JqLCAyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCBzZWxmLnN0cm9iaikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChpZChzKSwgaWQoc2VsZi5zdHJvYmopKQorICAgICAgICBzMiA9IHN5cy5pbnRlcm4ocykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChpZChzMiksIGlkKHMpKQorCitAc3VwcG9ydC5jcHl0aG9uX29ubHkKK0B1bml0dGVzdC5za2lwVW5sZXNzKF90ZXN0Y2FwaSwgJ3JlcXVpcmVzIF90ZXN0Y2FwaScpCitjbGFzcyBDQVBJX1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlLCBIZWxwZXJNaXhpbik6CisKKyAgICBkZWYgdGVzdF93cml0ZV9sb25nX3RvX2ZpbGUoc2VsZik6CisgICAgICAgIGZvciB2IGluIHJhbmdlKG1hcnNoYWwudmVyc2lvbiArIDEpOgorICAgICAgICAgICAgX3Rlc3RjYXBpLnB5bWFyc2hhbF93cml0ZV9sb25nX3RvX2ZpbGUoMHgxMjM0NTY3OCwgc3VwcG9ydC5URVNURk4sIHYpCisgICAgICAgICAgICB3aXRoIG9wZW4oc3VwcG9ydC5URVNURk4sICdyYicpIGFzIGY6CisgICAgICAgICAgICAgICAgZGF0YSA9IGYucmVhZCgpCisgICAgICAgICAgICBzdXBwb3J0LnVubGluayhzdXBwb3J0LlRFU1RGTikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgYidceDc4XHg1Nlx4MzRceDEyJykKKworICAgIGRlZiB0ZXN0X3dyaXRlX29iamVjdF90b19maWxlKHNlbGYpOgorICAgICAgICBvYmogPSAoJ1x1MjBhYycsIGInYWJjJywgMTIzLCA0NS42LCA3KzhqLCAnbG9uZyBsaW5lICcqMTAwMCkKKyAgICAgICAgZm9yIHYgaW4gcmFuZ2UobWFyc2hhbC52ZXJzaW9uICsgMSk6CisgICAgICAgICAgICBfdGVzdGNhcGkucHltYXJzaGFsX3dyaXRlX29iamVjdF90b19maWxlKG9iaiwgc3VwcG9ydC5URVNURk4sIHYpCisgICAgICAgICAgICB3aXRoIG9wZW4oc3VwcG9ydC5URVNURk4sICdyYicpIGFzIGY6CisgICAgICAgICAgICAgICAgZGF0YSA9IGYucmVhZCgpCisgICAgICAgICAgICBzdXBwb3J0LnVubGluayhzdXBwb3J0LlRFU1RGTikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFyc2hhbC5sb2FkcyhkYXRhKSwgb2JqKQorCisgICAgZGVmIHRlc3RfcmVhZF9zaG9ydF9mcm9tX2ZpbGUoc2VsZik6CisgICAgICAgIHdpdGggb3BlbihzdXBwb3J0LlRFU1RGTiwgJ3diJykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoYidceDM0XHgxMnh4eHgnKQorICAgICAgICByLCBwID0gX3Rlc3RjYXBpLnB5bWFyc2hhbF9yZWFkX3Nob3J0X2Zyb21fZmlsZShzdXBwb3J0LlRFU1RGTikKKyAgICAgICAgc3VwcG9ydC51bmxpbmsoc3VwcG9ydC5URVNURk4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwociwgMHgxMjM0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAsIDIpCisKKyAgICAgICAgd2l0aCBvcGVuKHN1cHBvcnQuVEVTVEZOLCAnd2InKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShiJ1x4MTInKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEVPRkVycm9yKToKKyAgICAgICAgICAgIF90ZXN0Y2FwaS5weW1hcnNoYWxfcmVhZF9zaG9ydF9mcm9tX2ZpbGUoc3VwcG9ydC5URVNURk4pCisgICAgICAgIHN1cHBvcnQudW5saW5rKHN1cHBvcnQuVEVTVEZOKQorCisgICAgZGVmIHRlc3RfcmVhZF9sb25nX2Zyb21fZmlsZShzZWxmKToKKyAgICAgICAgd2l0aCBvcGVuKHN1cHBvcnQuVEVTVEZOLCAnd2InKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShiJ1x4NzhceDU2XHgzNFx4MTJ4eHh4JykKKyAgICAgICAgciwgcCA9IF90ZXN0Y2FwaS5weW1hcnNoYWxfcmVhZF9sb25nX2Zyb21fZmlsZShzdXBwb3J0LlRFU1RGTikKKyAgICAgICAgc3VwcG9ydC51bmxpbmsoc3VwcG9ydC5URVNURk4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwociwgMHgxMjM0NTY3OCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLCA0KQorCisgICAgICAgIHdpdGggb3BlbihzdXBwb3J0LlRFU1RGTiwgJ3diJykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoYidceDU2XHgzNFx4MTInKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEVPRkVycm9yKToKKyAgICAgICAgICAgIF90ZXN0Y2FwaS5weW1hcnNoYWxfcmVhZF9sb25nX2Zyb21fZmlsZShzdXBwb3J0LlRFU1RGTikKKyAgICAgICAgc3VwcG9ydC51bmxpbmsoc3VwcG9ydC5URVNURk4pCisKKyAgICBkZWYgdGVzdF9yZWFkX2xhc3Rfb2JqZWN0X2Zyb21fZmlsZShzZWxmKToKKyAgICAgICAgb2JqID0gKCdcdTIwYWMnLCBiJ2FiYycsIDEyMywgNDUuNiwgNys4aikKKyAgICAgICAgZm9yIHYgaW4gcmFuZ2UobWFyc2hhbC52ZXJzaW9uICsgMSk6CisgICAgICAgICAgICBkYXRhID0gbWFyc2hhbC5kdW1wcyhvYmosIHYpCisgICAgICAgICAgICB3aXRoIG9wZW4oc3VwcG9ydC5URVNURk4sICd3YicpIGFzIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZShkYXRhICsgYid4eHh4JykKKyAgICAgICAgICAgIHIsIHAgPSBfdGVzdGNhcGkucHltYXJzaGFsX3JlYWRfbGFzdF9vYmplY3RfZnJvbV9maWxlKHN1cHBvcnQuVEVTVEZOKQorICAgICAgICAgICAgc3VwcG9ydC51bmxpbmsoc3VwcG9ydC5URVNURk4pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHIsIG9iaikKKworICAgICAgICAgICAgd2l0aCBvcGVuKHN1cHBvcnQuVEVTVEZOLCAnd2InKSBhcyBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUoZGF0YVs6MV0pCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEVPRkVycm9yKToKKyAgICAgICAgICAgICAgICBfdGVzdGNhcGkucHltYXJzaGFsX3JlYWRfbGFzdF9vYmplY3RfZnJvbV9maWxlKHN1cHBvcnQuVEVTVEZOKQorICAgICAgICAgICAgc3VwcG9ydC51bmxpbmsoc3VwcG9ydC5URVNURk4pCisKKyAgICBkZWYgdGVzdF9yZWFkX29iamVjdF9mcm9tX2ZpbGUoc2VsZik6CisgICAgICAgIG9iaiA9ICgnXHUyMGFjJywgYidhYmMnLCAxMjMsIDQ1LjYsIDcrOGopCisgICAgICAgIGZvciB2IGluIHJhbmdlKG1hcnNoYWwudmVyc2lvbiArIDEpOgorICAgICAgICAgICAgZGF0YSA9IG1hcnNoYWwuZHVtcHMob2JqLCB2KQorICAgICAgICAgICAgd2l0aCBvcGVuKHN1cHBvcnQuVEVTVEZOLCAnd2InKSBhcyBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUoZGF0YSArIGIneHh4eCcpCisgICAgICAgICAgICByLCBwID0gX3Rlc3RjYXBpLnB5bWFyc2hhbF9yZWFkX29iamVjdF9mcm9tX2ZpbGUoc3VwcG9ydC5URVNURk4pCisgICAgICAgICAgICBzdXBwb3J0LnVubGluayhzdXBwb3J0LlRFU1RGTikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwociwgb2JqKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLCBsZW4oZGF0YSkpCisKKyAgICAgICAgICAgIHdpdGggb3BlbihzdXBwb3J0LlRFU1RGTiwgJ3diJykgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKGRhdGFbOjFdKQorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhFT0ZFcnJvcik6CisgICAgICAgICAgICAgICAgX3Rlc3RjYXBpLnB5bWFyc2hhbF9yZWFkX29iamVjdF9mcm9tX2ZpbGUoc3VwcG9ydC5URVNURk4pCisgICAgICAgICAgICBzdXBwb3J0LnVubGluayhzdXBwb3J0LlRFU1RGTikKKwogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X21lbW9yeWlvLnB5IGIvTGliL3Rlc3QvdGVzdF9tZW1vcnlpby5weQppbmRleCA0ZmE5YTE5Li43Y2U5NWI5IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X21lbW9yeWlvLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfbWVtb3J5aW8ucHkKQEAgLTM2NiwxMyArMzY2LDE0IEBACiAgICAgICAgICMgdGhlIG1vZHVsZS1sZXZlbC4KICAgICAgICAgaW1wb3J0IF9fbWFpbl9fCiAgICAgICAgIFBpY2tsZVRlc3RNZW1JTy5fX21vZHVsZV9fID0gJ19fbWFpbl9fJworICAgICAgICBQaWNrbGVUZXN0TWVtSU8uX19xdWFsbmFtZV9fID0gUGlja2xlVGVzdE1lbUlPLl9fbmFtZV9fCiAgICAgICAgIF9fbWFpbl9fLlBpY2tsZVRlc3RNZW1JTyA9IFBpY2tsZVRlc3RNZW1JTwogICAgICAgICBzdWJtZW1pbyA9IFBpY2tsZVRlc3RNZW1JTyhidWYsIDgwKQogICAgICAgICBzdWJtZW1pby5zZWVrKDIpCiAKICAgICAgICAgIyBXZSBvbmx5IHN1cHBvcnQgcGlja2xlIHByb3RvY29sIDIgYW5kIG9ud2FyZCBzaW5jZSB3ZSB1c2UgZXh0ZW5kZWQKICAgICAgICAgIyBfX3JlZHVjZV9fIEFQSSBvZiBQRVAgMzA3IHRvIHByb3ZpZGUgcGlja2xpbmcgc3VwcG9ydC4KLSAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKDIsIHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MKToKKyAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKDIsIHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CiAgICAgICAgICAgICBmb3Igb2JqIGluIChtZW1pbywgc3VibWVtaW8pOgogICAgICAgICAgICAgICAgIG9iajIgPSBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKG9iaiwgcHJvdG9jb2w9cHJvdG8pKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqLmdldHZhbHVlKCksIG9iajIuZ2V0dmFsdWUoKSkKQEAgLTM5NywxNCArMzk4LDE5IEBACiAgICAgICAgICMgcmFpc2VzIGEgQnVmZmVyRXJyb3IuCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEJ1ZmZlckVycm9yLCBtZW1pby53cml0ZSwgYid4JyAqIDEwMCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQnVmZmVyRXJyb3IsIG1lbWlvLnRydW5jYXRlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhCdWZmZXJFcnJvciwgbWVtaW8uY2xvc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobWVtaW8uY2xvc2VkKQogICAgICAgICAjIE11dGF0aW5nIHRoZSBidWZmZXIgdXBkYXRlcyB0aGUgQnl0ZXNJTwogICAgICAgICBidWZbMzo2XSA9IGIiYWJjIgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ5dGVzKGJ1ZiksIGIiMTIzYWJjNzg5MCIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8uZ2V0dmFsdWUoKSwgYiIxMjNhYmM3ODkwIikKLSAgICAgICAgIyBBZnRlciB0aGUgYnVmZmVyIGdldHMgcmVsZWFzZWQsIHdlIGNhbiByZXNpemUgdGhlIEJ5dGVzSU8gYWdhaW4KKyAgICAgICAgIyBBZnRlciB0aGUgYnVmZmVyIGdldHMgcmVsZWFzZWQsIHdlIGNhbiByZXNpemUgYW5kIGNsb3NlIHRoZSBCeXRlc0lPCisgICAgICAgICMgYWdhaW4KICAgICAgICAgZGVsIGJ1ZgogICAgICAgICBzdXBwb3J0LmdjX2NvbGxlY3QoKQogICAgICAgICBtZW1pby50cnVuY2F0ZSgpCisgICAgICAgIG1lbWlvLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWVtaW8uZ2V0YnVmZmVyKQogCiAKIGNsYXNzIFB5Qnl0ZXNJT1Rlc3QoTWVtb3J5VGVzdE1peGluLCBNZW1vcnlTZWVrVGVzdE1peGluLApAQCAtNTIwLDEyICs1MjYsMTIgQEAKICAgICBkZWYgdGVzdF9yZWxhdGl2ZV9zZWVrKHNlbGYpOgogICAgICAgICBtZW1pbyA9IHNlbGYuaW9jbGFzcygpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgbWVtaW8uc2VlaywgLTEsIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIG1lbWlvLnNlZWssIDMsIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIG1lbWlvLnNlZWssIC0zLCAxKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBtZW1pby5zZWVrLCAtMSwgMikKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgbWVtaW8uc2VlaywgMSwgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgbWVtaW8uc2VlaywgMSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgbWVtaW8uc2VlaywgLTEsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIG1lbWlvLnNlZWssIDMsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIG1lbWlvLnNlZWssIC0zLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBtZW1pby5zZWVrLCAtMSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgbWVtaW8uc2VlaywgMSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgbWVtaW8uc2VlaywgMSwgMikKIAogICAgIGRlZiB0ZXN0X3RleHRpb19wcm9wZXJ0aWVzKHNlbGYpOgogICAgICAgICBtZW1pbyA9IHNlbGYuaW9jbGFzcygpCkBAIC02ODcsNyArNjkzLDggQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc3RhdGUpLCAzKQogICAgICAgICBieXRlYXJyYXkoc3RhdGVbMF0pICMgQ2hlY2sgaWYgc3RhdGVbMF0gc3VwcG9ydHMgdGhlIGJ1ZmZlciBpbnRlcmZhY2UuCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzdGF0ZVsxXSwgaW50KQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShzdGF0ZVsyXSwgZGljdCkgb3Igc3RhdGVbMl0gaXMgTm9uZSkKKyAgICAgICAgaWYgc3RhdGVbMl0gaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3RhdGVbMl0sIGRpY3QpCiAgICAgICAgIG1lbWlvLmNsb3NlKCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWVtaW8uX19nZXRzdGF0ZV9fKQogCkBAIC03NDMsNyArNzUwLDggQEAKICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN0YXRlWzBdLCBzdHIpCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzdGF0ZVsxXSwgc3RyKQogICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3RhdGVbMl0sIGludCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2Uoc3RhdGVbM10sIGRpY3QpIG9yIHN0YXRlWzNdIGlzIE5vbmUpCisgICAgICAgIGlmIHN0YXRlWzNdIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN0YXRlWzNdLCBkaWN0KQogICAgICAgICBtZW1pby5jbG9zZSgpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1lbWlvLl9fZ2V0c3RhdGVfXykKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9tZW1vcnl2aWV3LnB5IGIvTGliL3Rlc3QvdGVzdF9tZW1vcnl2aWV3LnB5CmluZGV4IGJmMGVhYWQuLjRiYzMxMzMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfbWVtb3J5dmlldy5weQorKysgYi9MaWIvdGVzdC90ZXN0X21lbW9yeXZpZXcucHkKQEAgLTM1Miw2ICszNTIsMzYgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMod3IoKSwgTm9uZSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoTFswXSwgYikKIAorICAgIGRlZiB0ZXN0X3JldmVyc2VkKHNlbGYpOgorICAgICAgICBmb3IgdHAgaW4gc2VsZi5fdHlwZXM6CisgICAgICAgICAgICBiID0gdHAoc2VsZi5fc291cmNlKQorICAgICAgICAgICAgbSA9IHNlbGYuX3ZpZXcoYikKKyAgICAgICAgICAgIGFzbGlzdCA9IGxpc3QocmV2ZXJzZWQobS50b2xpc3QoKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QocmV2ZXJzZWQobSkpLCBhc2xpc3QpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QocmV2ZXJzZWQobSkpLCBsaXN0KG1bOjotMV0pKQorCisgICAgZGVmIHRlc3RfaXNzdWUyMjY2OChzZWxmKToKKyAgICAgICAgYSA9IGFycmF5LmFycmF5KCdIJywgWzI1NiwgMjU2LCAyNTYsIDI1Nl0pCisgICAgICAgIHggPSBtZW1vcnl2aWV3KGEpCisgICAgICAgIG0gPSB4LmNhc3QoJ0InKQorICAgICAgICBiID0gbS5jYXN0KCdIJykKKyAgICAgICAgYyA9IGJbMDoyXQorICAgICAgICBkID0gbWVtb3J5dmlldyhiKQorCisgICAgICAgIGRlbCBiCisgCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY1swXSwgMjU2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbMF0sIDI1NikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmZvcm1hdCwgIkgiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZm9ybWF0LCAiSCIpCisgCisgICAgICAgIF8gPSBtLmNhc3QoJ0knKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNbMF0sIDI1NikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkWzBdLCAyNTYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5mb3JtYXQsICJIIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmZvcm1hdCwgIkgiKQorCisKICMgVmFyaWF0aW9ucyBvbiBzb3VyY2Ugb2JqZWN0cyBmb3IgdGhlIGJ1ZmZlcjogYnl0ZXMtbGlrZSBvYmplY3RzLCB0aGVuIGFycmF5cwogIyB3aXRoIGl0ZW1zaXplID4gMS4KICMgTk9URTogc3VwcG9ydCBmb3IgbXVsdGktZGltZW5zaW9uYWwgb2JqZWN0cyBpcyB1bmltcGxlbWVudGVkLgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9taW5pZG9tLnB5IGIvTGliL3Rlc3QvdGVzdF9taW5pZG9tLnB5CmluZGV4IDExM2M3ZmQuLmY2NGY0MzggMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfbWluaWRvbS5weQorKysgYi9MaWIvdGVzdC90ZXN0X21pbmlkb20ucHkKQEAgLTEsNSArMSw2IEBACiAjIHRlc3QgZm9yIHhtbC5kb20ubWluaWRvbQogCitpbXBvcnQgY29weQogaW1wb3J0IHBpY2tsZQogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgZmluZGZpbGUKIGltcG9ydCB1bml0dGVzdApAQCAtMTEsNiArMTIsMTMgQEAKIAogCiB0c3RmaWxlID0gZmluZGZpbGUoInRlc3QueG1sIiwgc3ViZGlyPSJ4bWx0ZXN0ZGF0YSIpCitzYW1wbGUgPSAoIjw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J3VzLWFzY2lpJz8+XG4iCisgICAgICAgICAgIjwhRE9DVFlQRSBkb2MgUFVCTElDICdodHRwOi8veG1sLnB5dGhvbi5vcmcvcHVibGljJyIKKyAgICAgICAgICAiICdodHRwOi8veG1sLnB5dGhvbi5vcmcvc3lzdGVtJyBbXG4iCisgICAgICAgICAgIiAgPCFFTEVNRU5UIGUgRU1QVFk+XG4iCisgICAgICAgICAgIiAgPCFFTlRJVFkgZW50IFNZU1RFTSAnaHR0cDovL3htbC5weXRob24ub3JnL2VudGl0eSc+XG4iCisgICAgICAgICAgIl0+PGRvYyBhdHRyPSd2YWx1ZSc+IHRleHRcbiIKKyAgICAgICAgICAiPD9waSBzYW1wbGU/PiA8IS0tIGNvbW1lbnQgLS0+IDxlLz4gPC9kb2M+IikKIAogIyBUaGUgdGVzdHMgb2YgRG9jdW1lbnRUeXBlIGltcG9ydGluZyB1c2UgdGhlc2UgaGVscGVycyB0byBjb25zdHJ1Y3QKICMgdGhlIGRvY3VtZW50cyB0byB3b3JrIHdpdGgsIHNpbmNlIG5vdCBhbGwgRE9NIGJ1aWxkZXJzIGFjdHVhbGx5CkBAIC00OSw4ICs1NywxNCBAQAogICAgICAgICB0ID0gbm9kZS53aG9sZVRleHQKICAgICAgICAgc2VsZi5jb25maXJtKHQgPT0gcywgImxvb2tpbmcgZm9yICVyLCBmb3VuZCAlciIgJSAocywgdCkpCiAKLSAgICBkZWYgdGVzdFBhcnNlRnJvbUZpbGUoc2VsZik6Ci0gICAgICAgIHdpdGggb3Blbih0c3RmaWxlKSBhcyBmaWxlOgorICAgIGRlZiB0ZXN0UGFyc2VGcm9tQmluYXJ5RmlsZShzZWxmKToKKyAgICAgICAgd2l0aCBvcGVuKHRzdGZpbGUsICdyYicpIGFzIGZpbGU6CisgICAgICAgICAgICBkb20gPSBwYXJzZShmaWxlKQorICAgICAgICAgICAgZG9tLnVubGluaygpCisgICAgICAgICAgICBzZWxmLmNvbmZpcm0oaXNpbnN0YW5jZShkb20sIERvY3VtZW50KSkKKworICAgIGRlZiB0ZXN0UGFyc2VGcm9tVGV4dEZpbGUoc2VsZik6CisgICAgICAgIHdpdGggb3Blbih0c3RmaWxlLCAncicsIGVuY29kaW5nPSdpc28tODg1OS0xJykgYXMgZmlsZToKICAgICAgICAgICAgIGRvbSA9IHBhcnNlKGZpbGUpCiAgICAgICAgICAgICBkb20udW5saW5rKCkKICAgICAgICAgICAgIHNlbGYuY29uZmlybShpc2luc3RhbmNlKGRvbSwgRG9jdW1lbnQpKQpAQCAtMzYwLDYgKzM3NCwxNSBAQAogICAgICAgICAgICAgICAgIGFuZCBlbC5nZXRBdHRyaWJ1dGUoInNwYW0yIikgPT0gImJhbTIiKQogICAgICAgICBkb20udW5saW5rKCkKIAorICAgIGRlZiB0ZXN0R2V0QXR0ckxpc3Qoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiB0ZXN0R2V0QXR0clZhbHVlcyhzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHRlc3RHZXRBdHRyTGVuZ3RoKHNlbGYpOgorICAgICAgICBwYXNzCisKICAgICBkZWYgdGVzdEdldEF0dHJpYnV0ZShzZWxmKToKICAgICAgICAgZG9tID0gRG9jdW1lbnQoKQogICAgICAgICBjaGlsZCA9IGRvbS5hcHBlbmRDaGlsZCgKQEAgLTM4MCw2ICs0MDMsOCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNoaWxkMi5nZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy5weXRob24ub3JnIiwgIm1pc3NpbmciKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAnJykKIAorICAgIGRlZiB0ZXN0R2V0QXR0cmlidXRlTm9kZShzZWxmKTogcGFzcworCiAgICAgZGVmIHRlc3RHZXRFbGVtZW50c0J5VGFnTmFtZU5TKHNlbGYpOgogICAgICAgICBkPSIiIjxmb28geG1sbnM6bWluaWRvbT0naHR0cDovL3B5eG1sLnNmLm5ldC9taW5pZG9tJz4KICAgICAgICAgPG1pbmlkb206bXllbGVtLz4KQEAgLTQ1MCw2ICs0NzUsOCBAQAogICAgICAgICBzZWxmLmNvbmZpcm0oc3RyKG5vZGUpID09IHJlcHIobm9kZSkpCiAgICAgICAgIGRvbS51bmxpbmsoKQogCisgICAgZGVmIHRlc3RUZXh0Tm9kZVJlcHIoc2VsZik6IHBhc3MKKwogICAgIGRlZiB0ZXN0V3JpdGVYTUwoc2VsZik6CiAgICAgICAgIHN0ciA9ICc8P3htbCB2ZXJzaW9uPSIxLjAiID8+PGEgYj0iYyIvPicKICAgICAgICAgZG9tID0gcGFyc2VTdHJpbmcoc3RyKQpAQCAtNTEzLDYgKzU0MCwxNCBAQAogICAgICAgICAgICAgICAgIGFuZCBwaS5sb2NhbE5hbWUgaXMgTm9uZQogICAgICAgICAgICAgICAgIGFuZCBwaS5uYW1lc3BhY2VVUkkgPT0geG1sLmRvbS5FTVBUWV9OQU1FU1BBQ0UpCiAKKyAgICBkZWYgdGVzdFByb2Nlc3NpbmdJbnN0cnVjdGlvblJlcHIoc2VsZik6IHBhc3MKKworICAgIGRlZiB0ZXN0VGV4dFJlcHIoc2VsZik6IHBhc3MKKworICAgIGRlZiB0ZXN0V3JpdGVUZXh0KHNlbGYpOiBwYXNzCisKKyAgICBkZWYgdGVzdERvY3VtZW50RWxlbWVudChzZWxmKTogcGFzcworCiAgICAgZGVmIHRlc3RUb29NYW55RG9jdW1lbnRFbGVtZW50cyhzZWxmKToKICAgICAgICAgZG9jID0gcGFyc2VTdHJpbmcoIjxkb2MvPiIpCiAgICAgICAgIGVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgiZXh0cmEiKQpAQCAtNTIxLDYgKzU1NiwyNiBAQAogICAgICAgICBlbGVtLnVubGluaygpCiAgICAgICAgIGRvYy51bmxpbmsoKQogCisgICAgZGVmIHRlc3RDcmVhdGVFbGVtZW50TlMoc2VsZik6IHBhc3MKKworICAgIGRlZiB0ZXN0Q3JlYXRlQXR0cmlidXRlTlMoc2VsZik6IHBhc3MKKworICAgIGRlZiB0ZXN0UGFyc2Uoc2VsZik6IHBhc3MKKworICAgIGRlZiB0ZXN0UGFyc2VTdHJpbmcoc2VsZik6IHBhc3MKKworICAgIGRlZiB0ZXN0Q29tbWVudChzZWxmKTogcGFzcworCisgICAgZGVmIHRlc3RBdHRyTGlzdEl0ZW0oc2VsZik6IHBhc3MKKworICAgIGRlZiB0ZXN0QXR0ckxpc3RJdGVtcyhzZWxmKTogcGFzcworCisgICAgZGVmIHRlc3RBdHRyTGlzdEl0ZW1OUyhzZWxmKTogcGFzcworCisgICAgZGVmIHRlc3RBdHRyTGlzdEtleXMoc2VsZik6IHBhc3MKKworICAgIGRlZiB0ZXN0QXR0ckxpc3RLZXlzTlMoc2VsZik6IHBhc3MKKwogICAgIGRlZiB0ZXN0UmVtb3ZlTmFtZWRJdGVtKHNlbGYpOgogICAgICAgICBkb2MgPSBwYXJzZVN0cmluZygiPGRvYyBhPScnLz4iKQogICAgICAgICBlID0gZG9jLmRvY3VtZW50RWxlbWVudApAQCAtNTQwLDYgKzU5NSwzMCBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh4bWwuZG9tLk5vdEZvdW5kRXJyLCBhdHRycy5yZW1vdmVOYW1lZEl0ZW1OUywKICAgICAgICAgICAgICAgICAgICAgICAgICAgImh0dHA6Ly94bWwucHl0aG9uLm9yZy8iLCAiYiIpCiAKKyAgICBkZWYgdGVzdEF0dHJMaXN0VmFsdWVzKHNlbGYpOiBwYXNzCisKKyAgICBkZWYgdGVzdEF0dHJMaXN0TGVuZ3RoKHNlbGYpOiBwYXNzCisKKyAgICBkZWYgdGVzdEF0dHJMaXN0X19nZXRpdGVtX18oc2VsZik6IHBhc3MKKworICAgIGRlZiB0ZXN0QXR0ckxpc3RfX3NldGl0ZW1fXyhzZWxmKTogcGFzcworCisgICAgZGVmIHRlc3RTZXRBdHRyVmFsdWVhbmROb2RlVmFsdWUoc2VsZik6IHBhc3MKKworICAgIGRlZiB0ZXN0UGFyc2VFbGVtZW50KHNlbGYpOiBwYXNzCisKKyAgICBkZWYgdGVzdFBhcnNlQXR0cmlidXRlcyhzZWxmKTogcGFzcworCisgICAgZGVmIHRlc3RQYXJzZUVsZW1lbnROYW1lc3BhY2VzKHNlbGYpOiBwYXNzCisKKyAgICBkZWYgdGVzdFBhcnNlQXR0cmlidXRlTmFtZXNwYWNlcyhzZWxmKTogcGFzcworCisgICAgZGVmIHRlc3RQYXJzZVByb2Nlc3NpbmdJbnN0cnVjdGlvbnMoc2VsZik6IHBhc3MKKworICAgIGRlZiB0ZXN0Q2hpbGROb2RlcyhzZWxmKTogcGFzcworCisgICAgZGVmIHRlc3RGaXJzdENoaWxkKHNlbGYpOiBwYXNzCisKICAgICBkZWYgdGVzdEhhc0NoaWxkTm9kZXMoc2VsZik6CiAgICAgICAgIGRvbSA9IHBhcnNlU3RyaW5nKCI8ZG9jPjxmb28vPjwvZG9jPiIpCiAgICAgICAgIGRvYyA9IGRvbS5kb2N1bWVudEVsZW1lbnQKQEAgLTEzOTUsNTIgKzE0NzQsNTUgQEAKICAgICAgICAgc2VsZi5jb25maXJtKGUuaXNTYW1lTm9kZShkb2MuZ2V0RWxlbWVudEJ5SWQoInciKSkKICAgICAgICAgICAgICAgICBhbmQgYTIuaXNJZCkKIAotICAgIGRlZiB0ZXN0UGlja2xlZERvY3VtZW50KHNlbGYpOgotICAgICAgICBkb2MgPSBwYXJzZVN0cmluZygiPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0ndXMtYXNjaWknPz5cbiIKLSAgICAgICAgICAgICAgICAgICAgIjwhRE9DVFlQRSBkb2MgUFVCTElDICdodHRwOi8veG1sLnB5dGhvbi5vcmcvcHVibGljJyIKLSAgICAgICAgICAgICAgICAgICAgIiAnaHR0cDovL3htbC5weXRob24ub3JnL3N5c3RlbScgW1xuIgotICAgICAgICAgICAgICAgICAgICAiICA8IUVMRU1FTlQgZSBFTVBUWT5cbiIKLSAgICAgICAgICAgICAgICAgICAgIiAgPCFFTlRJVFkgZW50IFNZU1RFTSAnaHR0cDovL3htbC5weXRob24ub3JnL2VudGl0eSc+XG4iCi0gICAgICAgICAgICAgICAgICAgICJdPjxkb2MgYXR0cj0ndmFsdWUnPiB0ZXh0XG4iCi0gICAgICAgICAgICAgICAgICAgICI8P3BpIHNhbXBsZT8+IDwhLS0gY29tbWVudCAtLT4gPGUvPiA8L2RvYz4iKQotICAgICAgICBzID0gcGlja2xlLmR1bXBzKGRvYykKLSAgICAgICAgZG9jMiA9IHBpY2tsZS5sb2FkcyhzKQorICAgIGRlZiBhc3NlcnRfcmVjdXJzaXZlX2VxdWFsKHNlbGYsIGRvYywgZG9jMik6CiAgICAgICAgIHN0YWNrID0gWyhkb2MsIGRvYzIpXQogICAgICAgICB3aGlsZSBzdGFjazoKICAgICAgICAgICAgIG4xLCBuMiA9IHN0YWNrLnBvcCgpCi0gICAgICAgICAgICBzZWxmLmNvbmZpcm0objEubm9kZVR5cGUgPT0gbjIubm9kZVR5cGUKLSAgICAgICAgICAgICAgICAgICAgYW5kIGxlbihuMS5jaGlsZE5vZGVzKSA9PSBsZW4objIuY2hpbGROb2RlcykKLSAgICAgICAgICAgICAgICAgICAgYW5kIG4xLm5vZGVOYW1lID09IG4yLm5vZGVOYW1lCi0gICAgICAgICAgICAgICAgICAgIGFuZCBub3QgbjEuaXNTYW1lTm9kZShuMikKLSAgICAgICAgICAgICAgICAgICAgYW5kIG5vdCBuMi5pc1NhbWVOb2RlKG4xKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobjEubm9kZVR5cGUsIG4yLm5vZGVUeXBlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4objEuY2hpbGROb2RlcyksIGxlbihuMi5jaGlsZE5vZGVzKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobjEubm9kZU5hbWUsIG4yLm5vZGVOYW1lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShuMS5pc1NhbWVOb2RlKG4yKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobjIuaXNTYW1lTm9kZShuMSkpCiAgICAgICAgICAgICBpZiBuMS5ub2RlVHlwZSA9PSBOb2RlLkRPQ1VNRU5UX1RZUEVfTk9ERToKICAgICAgICAgICAgICAgICBsZW4objEuZW50aXRpZXMpCiAgICAgICAgICAgICAgICAgbGVuKG4yLmVudGl0aWVzKQogICAgICAgICAgICAgICAgIGxlbihuMS5ub3RhdGlvbnMpCiAgICAgICAgICAgICAgICAgbGVuKG4yLm5vdGF0aW9ucykKLSAgICAgICAgICAgICAgICBzZWxmLmNvbmZpcm0obGVuKG4xLmVudGl0aWVzKSA9PSBsZW4objIuZW50aXRpZXMpCi0gICAgICAgICAgICAgICAgICAgICAgICBhbmQgbGVuKG4xLm5vdGF0aW9ucykgPT0gbGVuKG4yLm5vdGF0aW9ucykpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4objEuZW50aXRpZXMpLCBsZW4objIuZW50aXRpZXMpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG4xLm5vdGF0aW9ucyksIGxlbihuMi5ub3RhdGlvbnMpKQogICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihuMS5ub3RhdGlvbnMpKToKICAgICAgICAgICAgICAgICAgICAgIyBYWFggdGhpcyBsb29wIGJvZHkgZG9lc24ndCBzZWVtIHRvIGJlIGV4ZWN1dGVkPwogICAgICAgICAgICAgICAgICAgICBubzEgPSBuMS5ub3RhdGlvbnMuaXRlbShpKQogICAgICAgICAgICAgICAgICAgICBubzIgPSBuMS5ub3RhdGlvbnMuaXRlbShpKQotICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbmZpcm0obm8xLm5hbWUgPT0gbm8yLm5hbWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgbm8xLnB1YmxpY0lkID09IG5vMi5wdWJsaWNJZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBubzEuc3lzdGVtSWQgPT0gbm8yLnN5c3RlbUlkKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5vMS5uYW1lLCBubzIubmFtZSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChubzEucHVibGljSWQsIG5vMi5wdWJsaWNJZCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChubzEuc3lzdGVtSWQsIG5vMi5zeXN0ZW1JZCkKICAgICAgICAgICAgICAgICAgICAgc3RhY2suYXBwZW5kKChubzEsIG5vMikpCiAgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKG4xLmVudGl0aWVzKSk6CiAgICAgICAgICAgICAgICAgICAgIGUxID0gbjEuZW50aXRpZXMuaXRlbShpKQogICAgICAgICAgICAgICAgICAgICBlMiA9IG4yLmVudGl0aWVzLml0ZW0oaSkKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5jb25maXJtKGUxLm5vdGF0aW9uTmFtZSA9PSBlMi5ub3RhdGlvbk5hbWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgZTEucHVibGljSWQgPT0gZTIucHVibGljSWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgZTEuc3lzdGVtSWQgPT0gZTIuc3lzdGVtSWQpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTEubm90YXRpb25OYW1lLCBlMi5ub3RhdGlvbk5hbWUpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTEucHVibGljSWQsIGUyLnB1YmxpY0lkKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLnN5c3RlbUlkLCBlMi5zeXN0ZW1JZCkKICAgICAgICAgICAgICAgICAgICAgc3RhY2suYXBwZW5kKChlMSwgZTIpKQogICAgICAgICAgICAgaWYgbjEubm9kZVR5cGUgIT0gTm9kZS5ET0NVTUVOVF9OT0RFOgotICAgICAgICAgICAgICAgIHNlbGYuY29uZmlybShuMS5vd25lckRvY3VtZW50LmlzU2FtZU5vZGUoZG9jKQotICAgICAgICAgICAgICAgICAgICAgICAgYW5kIG4yLm93bmVyRG9jdW1lbnQuaXNTYW1lTm9kZShkb2MyKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobjEub3duZXJEb2N1bWVudC5pc1NhbWVOb2RlKGRvYykpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG4yLm93bmVyRG9jdW1lbnQuaXNTYW1lTm9kZShkb2MyKSkKICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihuMS5jaGlsZE5vZGVzKSk6CiAgICAgICAgICAgICAgICAgc3RhY2suYXBwZW5kKChuMS5jaGlsZE5vZGVzW2ldLCBuMi5jaGlsZE5vZGVzW2ldKSkKIAorICAgIGRlZiB0ZXN0UGlja2xlZERvY3VtZW50KHNlbGYpOgorICAgICAgICBkb2MgPSBwYXJzZVN0cmluZyhzYW1wbGUpCisgICAgICAgIGZvciBwcm90byBpbiByYW5nZSgyLCBwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgcyA9IHBpY2tsZS5kdW1wcyhkb2MsIHByb3RvKQorICAgICAgICAgICAgZG9jMiA9IHBpY2tsZS5sb2FkcyhzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfcmVjdXJzaXZlX2VxdWFsKGRvYywgZG9jMikKKworICAgIGRlZiB0ZXN0RGVlcGNvcGllZERvY3VtZW50KHNlbGYpOgorICAgICAgICBkb2MgPSBwYXJzZVN0cmluZyhzYW1wbGUpCisgICAgICAgIGRvYzIgPSBjb3B5LmRlZXBjb3B5KGRvYykKKyAgICAgICAgc2VsZi5hc3NlcnRfcmVjdXJzaXZlX2VxdWFsKGRvYywgZG9jMikKKwogICAgIGRlZiB0ZXN0U2VyaWFsaXplQ29tbWVudE5vZGVXaXRoRG91YmxlSHlwaGVuKHNlbGYpOgogICAgICAgICBkb2MgPSBjcmVhdGVfZG9jX3dpdGhvdXRfZG9jdHlwZSgpCiAgICAgICAgIGRvYy5hcHBlbmRDaGlsZChkb2MuY3JlYXRlQ29tbWVudCgiZm9vLS1iYXIiKSkKQEAgLTE0NTMsNiArMTUzNSwxMCBAQAogICAgICAgICBkb2MyID0gcGFyc2VTdHJpbmcoZG9jLnRveG1sKCkpCiAgICAgICAgIHNlbGYuY29uZmlybShkb2MyLm5hbWVzcGFjZVVSSSA9PSB4bWwuZG9tLkVNUFRZX05BTUVTUEFDRSkKIAorICAgIGRlZiB0ZXN0RXhjZXB0aW9uT25TcGFjZXNJblhNTE5TVmFsdWUoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLCAnVW5zdXBwb3J0ZWQgc3ludGF4Jyk6CisgICAgICAgICAgICBwYXJzZVN0cmluZygnPGVsZW1lbnQgeG1sbnM6YWJjPSJodHRwOmFiYy5jb20vZGUgZiBnL2hpL2ogayI+PGFiYzpmb28gLz48L2VsZW1lbnQ+JykKKwogICAgIGRlZiB0ZXN0RG9jUmVtb3ZlQ2hpbGQoc2VsZik6CiAgICAgICAgIGRvYyA9IHBhcnNlKHRzdGZpbGUpCiAgICAgICAgIHRpdGxlX3RhZyA9IGRvYy5kb2N1bWVudEVsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIlRJVExFIilbMF0KQEAgLTE0NjIsNiArMTU0OCwxMyBAQAogICAgICAgICBudW1fY2hpbGRyZW5fYWZ0ZXIgPSBsZW4oZG9jLmNoaWxkTm9kZXMpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShudW1fY2hpbGRyZW5fYWZ0ZXIgPT0gbnVtX2NoaWxkcmVuX2JlZm9yZSAtIDEpCiAKKyAgICBkZWYgdGVzdFByb2Nlc3NpbmdJbnN0cnVjdGlvbk5hbWVFcnJvcihzZWxmKToKKyAgICAgICAgIyB3cm9uZyB2YXJpYWJsZSBpbiAubm9kZVZhbHVlIHByb3BlcnR5IHdpbGwKKyAgICAgICAgIyBsZWFkIHRvICJOYW1lRXJyb3I6IG5hbWUgJ2RhdGEnIGlzIG5vdCBkZWZpbmVkIgorICAgICAgICBkb2MgPSBwYXJzZSh0c3RmaWxlKQorICAgICAgICBwaSA9IGRvYy5jcmVhdGVQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oInkiLCAieiIpCisgICAgICAgIHBpLm5vZGVWYWx1ZSA9ICJjcmFzaCIKKwogZGVmIHRlc3RfbWFpbigpOgogICAgIHJ1bl91bml0dGVzdChNaW5pZG9tVGVzdCkKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9tbWFwLnB5IGIvTGliL3Rlc3QvdGVzdF9tbWFwLnB5CmluZGV4IDg5OWRmOGQuLmFkOTNhNTkgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfbW1hcC5weQorKysgYi9MaWIvdGVzdC90ZXN0X21tYXAucHkKQEAgLTEsMTEgKzEsMTIgQEAKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCAoVEVTVEZOLCBydW5fdW5pdHRlc3QsIGltcG9ydF9tb2R1bGUsIHVubGluaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZXMsIF8yRywgXzRHKQorICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlcywgXzJHLCBfNEcsIGdjX2NvbGxlY3QsIGNweXRob25fb25seSkKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IG9zCiBpbXBvcnQgcmUKIGltcG9ydCBpdGVydG9vbHMKIGltcG9ydCBzb2NrZXQKIGltcG9ydCBzeXMKK2ltcG9ydCB3ZWFrcmVmCiAKICMgU2tpcCB0ZXN0IGlmIHdlIGNhbid0IGltcG9ydCBtbWFwLgogbW1hcCA9IGltcG9ydF9tb2R1bGUoJ21tYXAnKQpAQCAtMjQ1LDcgKzI0Niw3IEBACiAKICAgICBkZWYgdGVzdF9iYWRfZmlsZV9kZXNjKHNlbGYpOgogICAgICAgICAjIFRyeSBvcGVuaW5nIGEgYmFkIGZpbGUgZGVzY3JpcHRvci4uLgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhtbWFwLmVycm9yLCBtbWFwLm1tYXAsIC0yLCA0MDk2KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBtbWFwLm1tYXAsIC0yLCA0MDk2KQogCiAgICAgZGVmIHRlc3RfdG91Z2hlcl9maW5kKHNlbGYpOgogICAgICAgICAjIERvIGEgdG91Z2hlciAuZmluZCgpIHRlc3QuICBTRiBidWcgNTE1OTQzIHBvaW50ZWQgb3V0IHRoYXQsIGluIDIuMiwKQEAgLTYzOCw2ICs2MzksMTUgQEAKICAgICAgICAgbTIuY2xvc2UoKQogICAgICAgICBtMS5jbG9zZSgpCiAKKyAgICBAY3B5dGhvbl9vbmx5CisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Mob3MubmFtZSA9PSAnbnQnLCAncmVxdWlyZXMgV2luZG93cycpCisgICAgZGVmIHRlc3Rfc2l6ZW9mKHNlbGYpOgorICAgICAgICBtMSA9IG1tYXAubW1hcCgtMSwgMTAwKQorICAgICAgICB0YWduYW1lID0gImZvbyIKKyAgICAgICAgbTIgPSBtbWFwLm1tYXAoLTEsIDEwMCwgdGFnbmFtZT10YWduYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN5cy5nZXRzaXplb2YobTIpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5nZXRzaXplb2YobTEpICsgbGVuKHRhZ25hbWUpICsgMSkKKwogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKG9zLm5hbWUgPT0gJ250JywgJ3JlcXVpcmVzIFdpbmRvd3MnKQogICAgIGRlZiB0ZXN0X2NyYXNoZXJfb25fd2luZG93cyhzZWxmKToKICAgICAgICAgIyBTaG91bGQgbm90IGNyYXNoIChJc3N1ZSAxNzMzOTg2KQpAQCAtNjU1LDcgKzY2NSw3IEBACiAgICAgICAgIG0gPSBtbWFwLm1tYXAoZi5maWxlbm8oKSwgMCkKICAgICAgICAgZi5jbG9zZSgpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIG0ucmVzaXplKDApICMgd2lsbCByYWlzZSBXaW5kb3dzRXJyb3IKKyAgICAgICAgICAgIG0ucmVzaXplKDApICMgd2lsbCByYWlzZSBPU0Vycm9yCiAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgdHJ5OgpAQCAtNjcxLDcgKzY4MSw3IEBACiAgICAgICAgICMgcGFyYW1ldGVycyB0byBfZ2V0X29zZmhhbmRsZS4KICAgICAgICAgcyA9IHNvY2tldC5zb2NrZXQoKQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKG1tYXAuZXJyb3IpOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKToKICAgICAgICAgICAgICAgICBtID0gbW1hcC5tbWFwKHMuZmlsZW5vKCksIDEwKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgcy5jbG9zZSgpCkBAIC02ODIsMTQgKzY5MiwyMyBAQAogICAgICAgICBzZWxmLmFzc2VydFRydWUobS5jbG9zZWQpCiAKICAgICBkZWYgdGVzdF9jb250ZXh0X21hbmFnZXJfZXhjZXB0aW9uKHNlbGYpOgotICAgICAgICAjIFRlc3QgdGhhdCB0aGUgSU9FcnJvciBnZXRzIHBhc3NlZCB0aHJvdWdoCisgICAgICAgICMgVGVzdCB0aGF0IHRoZSBPU0Vycm9yIGdldHMgcGFzc2VkIHRocm91Z2gKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhFeGNlcHRpb24pIGFzIGV4YzoKICAgICAgICAgICAgIHdpdGggbW1hcC5tbWFwKC0xLCAxMCkgYXMgbToKLSAgICAgICAgICAgICAgICByYWlzZSBJT0Vycm9yCi0gICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShleGMuZXhjZXB0aW9uLCBJT0Vycm9yLAorICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGV4Yy5leGNlcHRpb24sIE9TRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid3JvbmcgZXhjZXB0aW9uIHJhaXNlZCBpbiBjb250ZXh0IG1hbmFnZXIiKQogICAgICAgICBzZWxmLmFzc2VydFRydWUobS5jbG9zZWQsICJjb250ZXh0IG1hbmFnZXIgZmFpbGVkIikKIAorICAgIGRlZiB0ZXN0X3dlYWtyZWYoc2VsZik6CisgICAgICAgICMgQ2hlY2sgbW1hcCBvYmplY3RzIGFyZSB3ZWFrcmVmYWJsZQorICAgICAgICBtbSA9IG1tYXAubW1hcCgtMSwgMTYpCisgICAgICAgIHdyID0gd2Vha3JlZi5yZWYobW0pCisgICAgICAgIHNlbGYuYXNzZXJ0SXMod3IoKSwgbW0pCisgICAgICAgIGRlbCBtbQorICAgICAgICBnY19jb2xsZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh3cigpLCBOb25lKQorCiBjbGFzcyBMYXJnZU1tYXBUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgc2V0VXAoc2VsZik6CkBAIC03MDcsOCArNzI2LDExIEBACiAgICAgICAgICAgICBmLnNlZWsobnVtX3plcm9lcykKICAgICAgICAgICAgIGYud3JpdGUodGFpbCkKICAgICAgICAgICAgIGYuZmx1c2goKQotICAgICAgICBleGNlcHQgKElPRXJyb3IsIE92ZXJmbG93RXJyb3IpOgotICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIGV4Y2VwdCAoT1NFcnJvciwgT3ZlcmZsb3dFcnJvcik6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICBleGNlcHQgKE9TRXJyb3IsIE92ZXJmbG93RXJyb3IpOgorICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJmaWxlc3lzdGVtIGRvZXMgbm90IGhhdmUgbGFyZ2VmaWxlIHN1cHBvcnQiKQogICAgICAgICByZXR1cm4gZgogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X21vZHVsZS5weSBiL0xpYi90ZXN0L3Rlc3RfbW9kdWxlLnB5CmluZGV4IGU1YTI1MjUuLjEyMzAyOTMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfbW9kdWxlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfbW9kdWxlLnB5CkBAIC0xLDYgKzEsOCBAQAogIyBUZXN0IHRoZSBtb2R1bGUgdHlwZQogaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgd2Vha3JlZgogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgZ2NfY29sbGVjdAorZnJvbSB0ZXN0LnNjcmlwdF9oZWxwZXIgaW1wb3J0IGFzc2VydF9weXRob25fb2sKIAogaW1wb3J0IHN5cwogTW9kdWxlVHlwZSA9IHR5cGUoc3lzKQpAQCAtMzMsNyArMzUsMTIgQEAKICAgICAgICAgZm9vID0gTW9kdWxlVHlwZSgiZm9vIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb28uX19uYW1lX18sICJmb28iKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvby5fX2RvY19fLCBOb25lKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvby5fX2RpY3RfXywgeyJfX25hbWVfXyI6ICJmb28iLCAiX19kb2NfXyI6IE5vbmV9KQorICAgICAgICBzZWxmLmFzc2VydElzKGZvby5fX2xvYWRlcl9fLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKGZvby5fX3BhY2thZ2VfXywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhmb28uX19zcGVjX18sIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9vLl9fZGljdF9fLCB7Il9fbmFtZV9fIjogImZvbyIsICJfX2RvY19fIjogTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiX19sb2FkZXJfXyI6IE5vbmUsICJfX3BhY2thZ2VfXyI6IE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl9fc3BlY19fIjogTm9uZX0pCiAKICAgICBkZWYgdGVzdF9hc2NpaV9kb2NzdHJpbmcoc2VsZik6CiAgICAgICAgICMgQVNDSUkgZG9jc3RyaW5nCkBAIC00MSw3ICs0OCw5IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9vLl9fbmFtZV9fLCAiZm9vIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb28uX19kb2NfXywgImZvb2RvYyIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9vLl9fZGljdF9fLAotICAgICAgICAgICAgICAgICAgICAgICAgIHsiX19uYW1lX18iOiAiZm9vIiwgIl9fZG9jX18iOiAiZm9vZG9jIn0pCisgICAgICAgICAgICAgICAgICAgICAgICAgeyJfX25hbWVfXyI6ICJmb28iLCAiX19kb2NfXyI6ICJmb29kb2MiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiX19sb2FkZXJfXyI6IE5vbmUsICJfX3BhY2thZ2VfXyI6IE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJfX3NwZWNfXyI6IE5vbmV9KQogCiAgICAgZGVmIHRlc3RfdW5pY29kZV9kb2NzdHJpbmcoc2VsZik6CiAgICAgICAgICMgVW5pY29kZSBkb2NzdHJpbmcKQEAgLTQ5LDcgKzU4LDkgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb28uX19uYW1lX18sICJmb28iKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvby5fX2RvY19fLCAiZm9vZG9jXHUxMjM0IikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb28uX19kaWN0X18sCi0gICAgICAgICAgICAgICAgICAgICAgICAgeyJfX25hbWVfXyI6ICJmb28iLCAiX19kb2NfXyI6ICJmb29kb2NcdTEyMzQifSkKKyAgICAgICAgICAgICAgICAgICAgICAgICB7Il9fbmFtZV9fIjogImZvbyIsICJfX2RvY19fIjogImZvb2RvY1x1MTIzNCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJfX2xvYWRlcl9fIjogTm9uZSwgIl9fcGFja2FnZV9fIjogTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIl9fc3BlY19fIjogTm9uZX0pCiAKICAgICBkZWYgdGVzdF9yZWluaXQoc2VsZik6CiAgICAgICAgICMgUmVpbml0aWFsaXphdGlvbiBzaG91bGQgbm90IHJlcGxhY2UgdGhlIF9fZGljdF9fCkBAIC02MSwxMCArNzIsMTAgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb28uX19kb2NfXywgImZvb2RvYyIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9vLmJhciwgNDIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9vLl9fZGljdF9fLAotICAgICAgICAgICAgICB7Il9fbmFtZV9fIjogImZvbyIsICJfX2RvY19fIjogImZvb2RvYyIsICJiYXIiOiA0Mn0pCisgICAgICAgICAgICAgIHsiX19uYW1lX18iOiAiZm9vIiwgIl9fZG9jX18iOiAiZm9vZG9jIiwgImJhciI6IDQyLAorICAgICAgICAgICAgICAgIl9fbG9hZGVyX18iOiBOb25lLCAiX19wYWNrYWdlX18iOiBOb25lLCAiX19zcGVjX18iOiBOb25lfSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZvby5fX2RpY3RfXyBpcyBkKQogCi0gICAgQHVuaXR0ZXN0LmV4cGVjdGVkRmFpbHVyZQogICAgIGRlZiB0ZXN0X2RvbnRfY2xlYXJfZGljdChzZWxmKToKICAgICAgICAgIyBTZWUgaXNzdWUgNzE0MC4KICAgICAgICAgZGVmIGYoKToKQEAgLTg5LDYgKzEwMCwxNCBAQAogICAgICAgICBnY19jb2xsZWN0KCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZXN0cm95ZWQsIFsxXSkKIAorICAgIGRlZiB0ZXN0X3dlYWtyZWYoc2VsZik6CisgICAgICAgIG0gPSBNb2R1bGVUeXBlKCJmb28iKQorICAgICAgICB3ciA9IHdlYWtyZWYucmVmKG0pCisgICAgICAgIHNlbGYuYXNzZXJ0SXMod3IoKSwgbSkKKyAgICAgICAgZGVsIG0KKyAgICAgICAgZ2NfY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMod3IoKSwgTm9uZSkKKwogICAgIGRlZiB0ZXN0X21vZHVsZV9yZXByX21pbmltYWwoc2VsZik6CiAgICAgICAgICMgcmVwcnMgd2hlbiBtb2R1bGVzIGhhdmUgbm8gX19maWxlX18sIF9fbmFtZV9fLCBvciBfX2xvYWRlcl9fCiAgICAgICAgIG0gPSBNb2R1bGVUeXBlKCdmb28nKQpAQCAtMTEwLDEzICsxMjksMTkgQEAKICAgICAgICAgbS5fX2ZpbGVfXyA9ICcvdG1wL2Zvby5weScKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKG0pLCAiPG1vZHVsZSAnPycgZnJvbSAnL3RtcC9mb28ucHknPiIpCiAKKyAgICBkZWYgdGVzdF9tb2R1bGVfcmVwcl93aXRoX2xvYWRlcl9hc19Ob25lKHNlbGYpOgorICAgICAgICBtID0gTW9kdWxlVHlwZSgnZm9vJykKKyAgICAgICAgYXNzZXJ0IG0uX19sb2FkZXJfXyBpcyBOb25lCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihtKSwgIjxtb2R1bGUgJ2Zvbyc+IikKKwogICAgIGRlZiB0ZXN0X21vZHVsZV9yZXByX3dpdGhfYmFyZV9sb2FkZXJfYnV0X25vX25hbWUoc2VsZik6CiAgICAgICAgIG0gPSBNb2R1bGVUeXBlKCdmb28nKQogICAgICAgICBkZWwgbS5fX25hbWVfXwogICAgICAgICAjIFllcywgYSBjbGFzcyBub3QgYW4gaW5zdGFuY2UuCiAgICAgICAgIG0uX19sb2FkZXJfXyA9IEJhcmVMb2FkZXIKKyAgICAgICAgbG9hZGVyX3JlcHIgPSByZXByKEJhcmVMb2FkZXIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAgICAgICByZXByKG0pLCAiPG1vZHVsZSAnPycgKDxjbGFzcyAndGVzdC50ZXN0X21vZHVsZS5CYXJlTG9hZGVyJz4pPiIpCisgICAgICAgICAgICByZXByKG0pLCAiPG1vZHVsZSAnPycgKHt9KT4iLmZvcm1hdChsb2FkZXJfcmVwcikpCiAKICAgICBkZWYgdGVzdF9tb2R1bGVfcmVwcl93aXRoX2Z1bGxfbG9hZGVyX2J1dF9ub19uYW1lKHNlbGYpOgogICAgICAgICAjIG0uX19sb2FkZXJfXy5tb2R1bGVfcmVwcigpIHdpbGwgZmFpbCBiZWNhdXNlIHRoZSBtb2R1bGUgaGFzIG5vCkBAIC0xMjYsMTUgKzE1MSwxNyBAQAogICAgICAgICBkZWwgbS5fX25hbWVfXwogICAgICAgICAjIFllcywgYSBjbGFzcyBub3QgYW4gaW5zdGFuY2UuCiAgICAgICAgIG0uX19sb2FkZXJfXyA9IEZ1bGxMb2FkZXIKKyAgICAgICAgbG9hZGVyX3JlcHIgPSByZXByKEZ1bGxMb2FkZXIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAgICAgICByZXByKG0pLCAiPG1vZHVsZSAnPycgKDxjbGFzcyAndGVzdC50ZXN0X21vZHVsZS5GdWxsTG9hZGVyJz4pPiIpCisgICAgICAgICAgICByZXByKG0pLCAiPG1vZHVsZSAnPycgKHt9KT4iLmZvcm1hdChsb2FkZXJfcmVwcikpCiAKICAgICBkZWYgdGVzdF9tb2R1bGVfcmVwcl93aXRoX2JhcmVfbG9hZGVyKHNlbGYpOgogICAgICAgICBtID0gTW9kdWxlVHlwZSgnZm9vJykKICAgICAgICAgIyBZZXMsIGEgY2xhc3Mgbm90IGFuIGluc3RhbmNlLgogICAgICAgICBtLl9fbG9hZGVyX18gPSBCYXJlTG9hZGVyCisgICAgICAgIG1vZHVsZV9yZXByID0gcmVwcihCYXJlTG9hZGVyKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAotICAgICAgICAgICAgcmVwcihtKSwgIjxtb2R1bGUgJ2ZvbycgKDxjbGFzcyAndGVzdC50ZXN0X21vZHVsZS5CYXJlTG9hZGVyJz4pPiIpCisgICAgICAgICAgICByZXByKG0pLCAiPG1vZHVsZSAnZm9vJyAoe30pPiIuZm9ybWF0KG1vZHVsZV9yZXByKSkKIAogICAgIGRlZiB0ZXN0X21vZHVsZV9yZXByX3dpdGhfZnVsbF9sb2FkZXIoc2VsZik6CiAgICAgICAgIG0gPSBNb2R1bGVUeXBlKCdmb28nKQpAQCAtMTY0LDggKzE5MSwyNSBAQAogCiAgICAgZGVmIHRlc3RfbW9kdWxlX3JlcHJfc291cmNlKHNlbGYpOgogICAgICAgICByID0gcmVwcih1bml0dGVzdCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyWzoyNV0sICI8bW9kdWxlICd1bml0dGVzdCcgZnJvbSAnIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyWy0xMzpdLCAiX19pbml0X18ucHknPiIpCisgICAgICAgIHN0YXJ0c193aXRoID0gIjxtb2R1bGUgJ3VuaXR0ZXN0JyBmcm9tICciCisgICAgICAgIGVuZHNfd2l0aCA9ICJfX2luaXRfXy5weSc+IgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJbOmxlbihzdGFydHNfd2l0aCldLCBzdGFydHNfd2l0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAneyFyfSBkb2VzIG5vdCBzdGFydCB3aXRoIHshcn0nLmZvcm1hdChyLCBzdGFydHNfd2l0aCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoclstbGVuKGVuZHNfd2l0aCk6XSwgZW5kc193aXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICd7IXJ9IGRvZXMgbm90IGVuZCB3aXRoIHshcn0nLmZvcm1hdChyLCBlbmRzX3dpdGgpKQorCisgICAgZGVmIHRlc3RfbW9kdWxlX2ZpbmFsaXphdGlvbl9hdF9zaHV0ZG93bihzZWxmKToKKyAgICAgICAgIyBNb2R1bGUgZ2xvYmFscyBhbmQgYnVpbHRpbnMgc2hvdWxkIHN0aWxsIGJlIGF2YWlsYWJsZSBkdXJpbmcgc2h1dGRvd24KKyAgICAgICAgcmMsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygiLWMiLCAiZnJvbSB0ZXN0IGltcG9ydCBmaW5hbF9hIikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShlcnIpCisgICAgICAgIGxpbmVzID0gb3V0LnNwbGl0bGluZXMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChsaW5lcyksIHsKKyAgICAgICAgICAgIGIieCA9IGEiLAorICAgICAgICAgICAgYiJ4ID0gYiIsCisgICAgICAgICAgICBiImZpbmFsX2EueCA9IGEiLAorICAgICAgICAgICAgYiJmaW5hbF9iLnggPSBiIiwKKyAgICAgICAgICAgIGIibGVuID0gbGVuIiwKKyAgICAgICAgICAgIGIic2h1dGlsLnJtdHJlZSA9IHJtdHJlZSJ9KQogCiAgICAgIyBmcm96ZW4gYW5kIG5hbWVzcGFjZSBtb2R1bGUgcmVwcnMgYXJlIHRlc3RlZCBpbiBpbXBvcnRsaWIuCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbW9kdWxlZmluZGVyLnB5IGIvTGliL3Rlc3QvdGVzdF9tb2R1bGVmaW5kZXIucHkKaW5kZXggZWQzMGQ2Zi4uNGM0OWU5YSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9tb2R1bGVmaW5kZXIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9tb2R1bGVmaW5kZXIucHkKQEAgLTI0NSwxMSArMjQ1LDEyIEBACiAKIAogY2xhc3MgTW9kdWxlRmluZGVyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgZGVmIF9kb190ZXN0KHNlbGYsIGluZm8sIHJlcG9ydD1GYWxzZSk6CisgICAgZGVmIF9kb190ZXN0KHNlbGYsIGluZm8sIHJlcG9ydD1GYWxzZSwgZGVidWc9MCwgcmVwbGFjZV9wYXRocz1bXSk6CiAgICAgICAgIGltcG9ydF90aGlzLCBtb2R1bGVzLCBtaXNzaW5nLCBtYXliZV9taXNzaW5nLCBzb3VyY2UgPSBpbmZvCiAgICAgICAgIGNyZWF0ZV9wYWNrYWdlKHNvdXJjZSkKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgbWYgPSBtb2R1bGVmaW5kZXIuTW9kdWxlRmluZGVyKHBhdGg9VEVTVF9QQVRIKQorICAgICAgICAgICAgbWYgPSBtb2R1bGVmaW5kZXIuTW9kdWxlRmluZGVyKHBhdGg9VEVTVF9QQVRILCBkZWJ1Zz1kZWJ1ZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBsYWNlX3BhdGhzPXJlcGxhY2VfcGF0aHMpCiAgICAgICAgICAgICBtZi5pbXBvcnRfaG9vayhpbXBvcnRfdGhpcykKICAgICAgICAgICAgIGlmIHJlcG9ydDoKICAgICAgICAgICAgICAgICBtZi5yZXBvcnQoKQpAQCAtMzA4LDkgKzMwOSwxNiBAQAogICAgICAgICBvcy5yZW1vdmUoc291cmNlX3BhdGgpCiAgICAgICAgIHNlbGYuX2RvX3Rlc3QoYnl0ZWNvZGVfdGVzdCkKIAorICAgIGRlZiB0ZXN0X3JlcGxhY2VfcGF0aHMoc2VsZik6CisgICAgICAgIG9sZF9wYXRoID0gb3MucGF0aC5qb2luKFRFU1RfRElSLCAnYScsICdtb2R1bGUucHknKQorICAgICAgICBuZXdfcGF0aCA9IG9zLnBhdGguam9pbihURVNUX0RJUiwgJ2EnLCAnc3BhbS5weScpCisgICAgICAgIHdpdGggc3VwcG9ydC5jYXB0dXJlZF9zdGRvdXQoKSBhcyBvdXRwdXQ6CisgICAgICAgICAgICBzZWxmLl9kb190ZXN0KG1heWJlX3Rlc3QsIGRlYnVnPTIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VfcGF0aHM9WyhvbGRfcGF0aCwgbmV3X3BhdGgpXSkKKyAgICAgICAgb3V0cHV0ID0gb3V0cHV0LmdldHZhbHVlKCkKKyAgICAgICAgZXhwZWN0ZWQgPSAiY29fZmlsZW5hbWUgJXIgY2hhbmdlZCB0byAlciIgJSAob2xkX3BhdGgsIG5ld19wYXRoKQorICAgICAgICBzZWxmLmFzc2VydEluKGV4cGVjdGVkLCBvdXRwdXQpCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChNb2R1bGVGaW5kZXJUZXN0KQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9tdWx0aWJ5dGVjb2RlYy5weSBiL0xpYi90ZXN0L3Rlc3RfbXVsdGlieXRlY29kZWMucHkKaW5kZXggNjg4OTE4NC4uMjkyOWY5OCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9tdWx0aWJ5dGVjb2RlYy5weQorKysgYi9MaWIvdGVzdC90ZXN0X211bHRpYnl0ZWNvZGVjLnB5CkBAIC00NCw2ICs0NCwxMyBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCBkZWMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXBwbGVceDkyaGFtXHg5M3NwYW0nLCAndGVzdC5jamt0ZXN0JykKIAorICAgIGRlZiB0ZXN0X2Vycm9yY2FsbGJhY2tfY3VzdG9tX2lnbm9yZShzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMjMyMTU6IE1lbW9yeUVycm9yIHdpdGggY3VzdG9tIGVycm9yIGhhbmRsZXJzIGFuZCBtdWx0aWJ5dGUgY29kZWNzCisgICAgICAgIGRhdGEgPSAxMDAgKiAiXHVkYzAwIgorICAgICAgICBjb2RlY3MucmVnaXN0ZXJfZXJyb3IoInRlc3QuaWdub3JlIiwgY29kZWNzLmlnbm9yZV9lcnJvcnMpCisgICAgICAgIGZvciBlbmMgaW4gQUxMX0NKS0VOQ09ESU5HUzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YS5lbmNvZGUoZW5jLCAidGVzdC5pZ25vcmUiKSwgYicnKQorCiAgICAgZGVmIHRlc3RfY29kaW5nc3BlYyhzZWxmKToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZm9yIGVuYyBpbiBBTExfQ0pLRU5DT0RJTkdTOgpAQCAtODAsNyArODcsNyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVuY29kZXIucmVzZXQoKSwgTm9uZSkKIAogICAgIGRlZiB0ZXN0X3N0YXRlZnVsKHNlbGYpOgotICAgICAgICAjIGppc3gwMjEzIGVuY29kZXIgaXMgc3RhdGVmdWwgZm9yIGEgZmV3IGNvZGVwb2ludHMuIGVnKQorICAgICAgICAjIGppc3gwMjEzIGVuY29kZXIgaXMgc3RhdGVmdWwgZm9yIGEgZmV3IGNvZGUgcG9pbnRzLiBlZykKICAgICAgICAgIyAgIFUrMDBFNiA9PiBBOURDCiAgICAgICAgICMgICBVKzAwRTYgVSswMzAwID0+IEFCQzQKICAgICAgICAgIyAgIFUrMDMwMCA9PiBBQkRDCkBAIC0xNzUsNTcgKzE4MiwyOCBAQAogICAgICAgICAgICAgc3VwcG9ydC51bmxpbmsoVEVTVEZOKQogCiBjbGFzcyBUZXN0X1N0cmVhbVdyaXRlcih1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgaWYgbGVuKCdcVTAwMDEyMzQ1JykgPT0gMjogIyBVQ1MyCi0gICAgICAgIGRlZiB0ZXN0X2diMTgwMzAoc2VsZik6Ci0gICAgICAgICAgICBzPSBpby5CeXRlc0lPKCkKLSAgICAgICAgICAgIGMgPSBjb2RlY3MuZ2V0d3JpdGVyKCdnYjE4MDMwJykocykKLSAgICAgICAgICAgIGMud3JpdGUoJzEyMycpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuZ2V0dmFsdWUoKSwgYicxMjMnKQotICAgICAgICAgICAgYy53cml0ZSgnXFUwMDAxMjM0NScpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuZ2V0dmFsdWUoKSwgYicxMjNceDkwN1x4OTU5JykKLSAgICAgICAgICAgIGMud3JpdGUoJ1xVMDAwMTIzNDUnWzBdKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmdldHZhbHVlKCksIGInMTIzXHg5MDdceDk1OScpCi0gICAgICAgICAgICBjLndyaXRlKCdcVTAwMDEyMzQ1J1sxXSArICdcVTAwMDEyMzQ1JyArICdcdWFjMDBcdTAwYWMnKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmdldHZhbHVlKCksCi0gICAgICAgICAgICAgICAgICAgIGInMTIzXHg5MDdceDk1OVx4OTA3XHg5NTlceDkwN1x4OTU5XHg4MjdceGNmNVx4ODEwXHg4NTEnKQotICAgICAgICAgICAgYy53cml0ZSgnXFUwMDAxMjM0NSdbMF0pCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuZ2V0dmFsdWUoKSwKLSAgICAgICAgICAgICAgICAgICAgYicxMjNceDkwN1x4OTU5XHg5MDdceDk1OVx4OTA3XHg5NTlceDgyN1x4Y2Y1XHg4MTBceDg1MScpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRXJyb3IsIGMucmVzZXQpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuZ2V0dmFsdWUoKSwKLSAgICAgICAgICAgICAgICAgICAgYicxMjNceDkwN1x4OTU5XHg5MDdceDk1OVx4OTA3XHg5NTlceDgyN1x4Y2Y1XHg4MTBceDg1MScpCisgICAgZGVmIHRlc3RfZ2IxODAzMChzZWxmKToKKyAgICAgICAgcz0gaW8uQnl0ZXNJTygpCisgICAgICAgIGMgPSBjb2RlY3MuZ2V0d3JpdGVyKCdnYjE4MDMwJykocykKKyAgICAgICAgYy53cml0ZSgnMTIzJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmdldHZhbHVlKCksIGInMTIzJykKKyAgICAgICAgYy53cml0ZSgnXFUwMDAxMjM0NScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5nZXR2YWx1ZSgpLCBiJzEyM1x4OTA3XHg5NTknKQorICAgICAgICBjLndyaXRlKCdcdWFjMDBcdTAwYWMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuZ2V0dmFsdWUoKSwKKyAgICAgICAgICAgICAgICBiJzEyM1x4OTA3XHg5NTlceDgyN1x4Y2Y1XHg4MTBceDg1MScpCiAKLSAgICAgICAgZGVmIHRlc3RfdXRmXzgoc2VsZik6Ci0gICAgICAgICAgICBzPSBpby5CeXRlc0lPKCkKLSAgICAgICAgICAgIGMgPSBjb2RlY3MuZ2V0d3JpdGVyKCd1dGYtOCcpKHMpCi0gICAgICAgICAgICBjLndyaXRlKCcxMjMnKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmdldHZhbHVlKCksIGInMTIzJykKLSAgICAgICAgICAgIGMud3JpdGUoJ1xVMDAwMTIzNDUnKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmdldHZhbHVlKCksIGInMTIzXHhmMFx4OTJceDhkXHg4NScpCi0KLSAgICAgICAgICAgICMgUHl0aG9uIHV0Zi04IGNvZGVjIGNhbid0IGJ1ZmZlciBzdXJyb2dhdGUgcGFpcnMgeWV0LgotICAgICAgICAgICAgaWYgMDoKLSAgICAgICAgICAgICAgICBjLndyaXRlKCdcVTAwMDEyMzQ1J1swXSkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuZ2V0dmFsdWUoKSwgYicxMjNceGYwXHg5Mlx4OGRceDg1JykKLSAgICAgICAgICAgICAgICBjLndyaXRlKCdcVTAwMDEyMzQ1J1sxXSArICdcVTAwMDEyMzQ1JyArICdcdWFjMDBcdTAwYWMnKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5nZXR2YWx1ZSgpLAotICAgICAgICAgICAgICAgICAgICBiJzEyM1x4ZjBceDkyXHg4ZFx4ODVceGYwXHg5Mlx4OGRceDg1XHhmMFx4OTJceDhkXHg4NScKLSAgICAgICAgICAgICAgICAgICAgYidceGVhXHhiMFx4ODBceGMyXHhhYycpCi0gICAgICAgICAgICAgICAgYy53cml0ZSgnXFUwMDAxMjM0NSdbMF0pCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmdldHZhbHVlKCksCi0gICAgICAgICAgICAgICAgICAgIGInMTIzXHhmMFx4OTJceDhkXHg4NVx4ZjBceDkyXHg4ZFx4ODVceGYwXHg5Mlx4OGRceDg1JwotICAgICAgICAgICAgICAgICAgICBiJ1x4ZWFceGIwXHg4MFx4YzJceGFjJykKLSAgICAgICAgICAgICAgICBjLnJlc2V0KCkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuZ2V0dmFsdWUoKSwKLSAgICAgICAgICAgICAgICAgICAgYicxMjNceGYwXHg5Mlx4OGRceDg1XHhmMFx4OTJceDhkXHg4NVx4ZjBceDkyXHg4ZFx4ODUnCi0gICAgICAgICAgICAgICAgICAgIGInXHhlYVx4YjBceDgwXHhjMlx4YWNceGVkXHhhMFx4ODgnKQotICAgICAgICAgICAgICAgIGMud3JpdGUoJ1xVMDAwMTIzNDUnWzFdKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5nZXR2YWx1ZSgpLAotICAgICAgICAgICAgICAgICAgICBiJzEyM1x4ZjBceDkyXHg4ZFx4ODVceGYwXHg5Mlx4OGRceDg1XHhmMFx4OTJceDhkXHg4NScKLSAgICAgICAgICAgICAgICAgICAgYidceGVhXHhiMFx4ODBceGMyXHhhY1x4ZWRceGEwXHg4OFx4ZWRceGJkXHg4NScpCi0KLSAgICBlbHNlOiAjIFVDUzQKLSAgICAgICAgcGFzcworICAgIGRlZiB0ZXN0X3V0Zl84KHNlbGYpOgorICAgICAgICBzPSBpby5CeXRlc0lPKCkKKyAgICAgICAgYyA9IGNvZGVjcy5nZXR3cml0ZXIoJ3V0Zi04JykocykKKyAgICAgICAgYy53cml0ZSgnMTIzJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmdldHZhbHVlKCksIGInMTIzJykKKyAgICAgICAgYy53cml0ZSgnXFUwMDAxMjM0NScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5nZXR2YWx1ZSgpLCBiJzEyM1x4ZjBceDkyXHg4ZFx4ODUnKQorICAgICAgICBjLndyaXRlKCdcdWFjMDBcdTAwYWMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuZ2V0dmFsdWUoKSwKKyAgICAgICAgICAgIGInMTIzXHhmMFx4OTJceDhkXHg4NScKKyAgICAgICAgICAgIGInXHhlYVx4YjBceDgwXHhjMlx4YWMnKQogCiAgICAgZGVmIHRlc3Rfc3RyZWFtd3JpdGVyX3N0cndyaXRlKHNlbGYpOgogICAgICAgICBzID0gaW8uQnl0ZXNJTygpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X211bHRpcHJvY2Vzc2luZ19mb3JrLnB5IGIvTGliL3Rlc3QvdGVzdF9tdWx0aXByb2Nlc3NpbmdfZm9yay5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYmY0ZTc1Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9tdWx0aXByb2Nlc3NpbmdfZm9yay5weQpAQCAtMCwwICsxLDcgQEAKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHRlc3QuX3Rlc3RfbXVsdGlwcm9jZXNzaW5nCisKK3Rlc3QuX3Rlc3RfbXVsdGlwcm9jZXNzaW5nLmluc3RhbGxfdGVzdHNfaW5fbW9kdWxlX2RpY3QoZ2xvYmFscygpLCAnZm9yaycpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X211bHRpcHJvY2Vzc2luZ19mb3Jrc2VydmVyLnB5IGIvTGliL3Rlc3QvdGVzdF9tdWx0aXByb2Nlc3NpbmdfZm9ya3NlcnZlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTNhMDRhCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9tdWx0aXByb2Nlc3NpbmdfZm9ya3NlcnZlci5weQpAQCAtMCwwICsxLDcgQEAKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHRlc3QuX3Rlc3RfbXVsdGlwcm9jZXNzaW5nCisKK3Rlc3QuX3Rlc3RfbXVsdGlwcm9jZXNzaW5nLmluc3RhbGxfdGVzdHNfaW5fbW9kdWxlX2RpY3QoZ2xvYmFscygpLCAnZm9ya3NlcnZlcicpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X211bHRpcHJvY2Vzc2luZ19tYWluX2hhbmRsaW5nLnB5IGIvTGliL3Rlc3QvdGVzdF9tdWx0aXByb2Nlc3NpbmdfbWFpbl9oYW5kbGluZy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTVmNzgyCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9tdWx0aXByb2Nlc3NpbmdfbWFpbl9oYW5kbGluZy5weQpAQCAtMCwwICsxLDI4OSBAQAorIyB0ZXN0cyBfX21haW5fXyBtb2R1bGUgaGFuZGxpbmcgaW4gbXVsdGlwcm9jZXNzaW5nCitmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKKyMgU2tpcCB0ZXN0cyBpZiBfdGhyZWFkIG9yIF9tdWx0aXByb2Nlc3Npbmcgd2Fzbid0IGJ1aWx0Lgorc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCdfdGhyZWFkJykKK3N1cHBvcnQuaW1wb3J0X21vZHVsZSgnX211bHRpcHJvY2Vzc2luZycpCisKK2ltcG9ydCBpbXBvcnRsaWIKK2ltcG9ydCBpbXBvcnRsaWIubWFjaGluZXJ5CitpbXBvcnQgemlwaW1wb3J0CitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcworaW1wb3J0IG9zLnBhdGgKK2ltcG9ydCBweV9jb21waWxlCisKK2Zyb20gdGVzdC5zY3JpcHRfaGVscGVyIGltcG9ydCAoCisgICAgbWFrZV9wa2csIG1ha2Vfc2NyaXB0LCBtYWtlX3ppcF9wa2csIG1ha2VfemlwX3NjcmlwdCwKKyAgICBhc3NlcnRfcHl0aG9uX29rLCBhc3NlcnRfcHl0aG9uX2ZhaWx1cmUsIHRlbXBfZGlyLAorICAgIHNwYXduX3B5dGhvbiwga2lsbF9weXRob24pCisKKyMgTG9vayB1cCB3aGljaCBzdGFydCBtZXRob2RzIGFyZSBhdmFpbGFibGUgdG8gdGVzdAoraW1wb3J0IG11bHRpcHJvY2Vzc2luZworQVZBSUxBQkxFX1NUQVJUX01FVEhPRFMgPSBzZXQobXVsdGlwcm9jZXNzaW5nLmdldF9hbGxfc3RhcnRfbWV0aG9kcygpKQorCisjIElzc3VlICMyMjMzMjogU2tpcCB0ZXN0cyBpZiBzZW1fb3BlbiBpbXBsZW1lbnRhdGlvbiBpcyBicm9rZW4uCitzdXBwb3J0LmltcG9ydF9tb2R1bGUoJ211bHRpcHJvY2Vzc2luZy5zeW5jaHJvbml6ZScpCisKK3ZlcmJvc2UgPSBzdXBwb3J0LnZlcmJvc2UKKwordGVzdF9zb3VyY2UgPSAiIiJcCisjIG11bHRpcHJvY2Vzc2luZyBpbmNsdWRlcyBhbGwgc29ydHMgb2Ygc2hlbmFuaWdhbnMgdG8gbWFrZSBfX21haW5fXworIyBhdHRyaWJ1dGVzIGFjY2Vzc2libGUgaW4gdGhlIHN1YnByb2Nlc3MgaW4gYSBwaWNrbGUgY29tcGF0aWJsZSB3YXkuCisKKyMgV2UgcnVuIHRoZSAiZG9lc24ndCB3b3JrIGluIHRoZSBpbnRlcmFjdGl2ZSBpbnRlcnByZXRlciIgZXhhbXBsZSBmcm9tCisjIHRoZSBkb2NzIHRvIG1ha2Ugc3VyZSBpdCAqZG9lcyogd29yayBmcm9tIGFuIGV4ZWN1dGVkIF9fbWFpbl9fLAorIyByZWdhcmRsZXNzIG9mIHRoZSBpbnZvY2F0aW9uIG1lY2hhbmlzbQorCitpbXBvcnQgc3lzCitpbXBvcnQgdGltZQorZnJvbSBtdWx0aXByb2Nlc3NpbmcgaW1wb3J0IFBvb2wsIHNldF9zdGFydF9tZXRob2QKKworIyBXZSB1c2UgdGhpcyBfX21haW5fXyBkZWZpbmVkIGZ1bmN0aW9uIGluIHRoZSBtYXAgY2FsbCBiZWxvdyBpbiBvcmRlciB0bworIyBjaGVjayB0aGF0IG11bHRpcHJvY2Vzc2luZyBpbiBjb3JyZWN0bHkgcnVubmluZyB0aGUgdW5ndWFyZGVkCisjIGNvZGUgaW4gY2hpbGQgcHJvY2Vzc2VzIGFuZCB0aGVuIG1ha2luZyBpdCBhdmFpbGFibGUgYXMgX19tYWluX18KK2RlZiBmKHgpOgorICAgIHJldHVybiB4KngKKworIyBDaGVjayBleHBsaWNpdCByZWxhdGl2ZSBpbXBvcnRzCitpZiAiY2hlY2tfc2libGluZyIgaW4gX19maWxlX186CisgICAgIyBXZSdyZSBpbnNpZGUgYSBwYWNrYWdlIGFuZCBub3QgaW4gYSBfX21haW5fXy5weSBmaWxlCisgICAgIyBzbyBtYWtlIHN1cmUgZXhwbGljaXQgcmVsYXRpdmUgaW1wb3J0cyB3b3JrIGNvcnJlY3RseQorICAgIGZyb20gLiBpbXBvcnQgc2libGluZworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHN0YXJ0X21ldGhvZCA9IHN5cy5hcmd2WzFdCisgICAgc2V0X3N0YXJ0X21ldGhvZChzdGFydF9tZXRob2QpCisgICAgcCA9IFBvb2woNSkKKyAgICByZXN1bHRzID0gW10KKyAgICBwLm1hcF9hc3luYyhmLCBbMSwgMiwgM10sIGNhbGxiYWNrPXJlc3VsdHMuZXh0ZW5kKQorICAgIGRlYWRsaW5lID0gdGltZS50aW1lKCkgKyAxMCAjIHVwIHRvIDEwIHMgdG8gcmVwb3J0IHRoZSByZXN1bHRzCisgICAgd2hpbGUgbm90IHJlc3VsdHM6CisgICAgICAgIHRpbWUuc2xlZXAoMC4wNSkKKyAgICAgICAgaWYgdGltZS50aW1lKCkgPiBkZWFkbGluZToKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiVGltZWQgb3V0IHdhaXRpbmcgZm9yIHJlc3VsdHMiKQorICAgIHJlc3VsdHMuc29ydCgpCisgICAgcHJpbnQoc3RhcnRfbWV0aG9kLCAiLT4iLCByZXN1bHRzKQorIiIiCisKK3Rlc3Rfc291cmNlX21haW5fc2tpcHBlZF9pbl9jaGlsZHJlbiA9ICIiIlwKKyMgX19tYWluX18ucHkgZmlsZXMgaGF2ZSBhbiBpbXBsaWVkICJpZiBfX25hbWVfXyA9PSAnX19tYWluX18nIiBzbworIyBtdWx0aXByb2Nlc3Npbmcgc2hvdWxkIGFsd2F5cyBza2lwIHJ1bm5pbmcgdGhlbSBpbiBjaGlsZCBwcm9jZXNzZXMKKworIyBUaGlzIG1lYW5zIHdlIGNhbid0IHVzZSBfX21haW5fXyBkZWZpbmVkIGZ1bmN0aW9ucyBpbiBjaGlsZCBwcm9jZXNzZXMsCisjIHNvIHdlIGp1c3QgdXNlICJpbnQiIGFzIGEgcGFzc3Rocm91Z2ggb3BlcmF0aW9uIGJlbG93CisKK2lmIF9fbmFtZV9fICE9ICJfX21haW5fXyI6CisgICAgcmFpc2UgUnVudGltZUVycm9yKCJTaG91bGQgb25seSBiZSBjYWxsZWQgYXMgX19tYWluX18hIikKKworaW1wb3J0IHN5cworaW1wb3J0IHRpbWUKK2Zyb20gbXVsdGlwcm9jZXNzaW5nIGltcG9ydCBQb29sLCBzZXRfc3RhcnRfbWV0aG9kCisKK3N0YXJ0X21ldGhvZCA9IHN5cy5hcmd2WzFdCitzZXRfc3RhcnRfbWV0aG9kKHN0YXJ0X21ldGhvZCkKK3AgPSBQb29sKDUpCityZXN1bHRzID0gW10KK3AubWFwX2FzeW5jKGludCwgWzEsIDQsIDldLCBjYWxsYmFjaz1yZXN1bHRzLmV4dGVuZCkKK2RlYWRsaW5lID0gdGltZS50aW1lKCkgKyAxMCAjIHVwIHRvIDEwIHMgdG8gcmVwb3J0IHRoZSByZXN1bHRzCit3aGlsZSBub3QgcmVzdWx0czoKKyAgICB0aW1lLnNsZWVwKDAuMDUpCisgICAgaWYgdGltZS50aW1lKCkgPiBkZWFkbGluZToKKyAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJUaW1lZCBvdXQgd2FpdGluZyBmb3IgcmVzdWx0cyIpCityZXN1bHRzLnNvcnQoKQorcHJpbnQoc3RhcnRfbWV0aG9kLCAiLT4iLCByZXN1bHRzKQorIiIiCisKKyMgVGhlc2UgaGVscGVycyB3ZXJlIGNvcGllZCBmcm9tIHRlc3RfY21kX2xpbmVfc2NyaXB0ICYgdHdlYWtlZCBhIGJpdC4uLgorCitkZWYgX21ha2VfdGVzdF9zY3JpcHQoc2NyaXB0X2Rpciwgc2NyaXB0X2Jhc2VuYW1lLAorICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZT10ZXN0X3NvdXJjZSwgb21pdF9zdWZmaXg9RmFsc2UpOgorICAgIHRvX3JldHVybiA9IG1ha2Vfc2NyaXB0KHNjcmlwdF9kaXIsIHNjcmlwdF9iYXNlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UsIG9taXRfc3VmZml4KQorICAgICMgSGFjayB0byBjaGVjayBleHBsaWNpdCByZWxhdGl2ZSBpbXBvcnRzCisgICAgaWYgc2NyaXB0X2Jhc2VuYW1lID09ICJjaGVja19zaWJsaW5nIjoKKyAgICAgICAgbWFrZV9zY3JpcHQoc2NyaXB0X2RpciwgInNpYmxpbmciLCAiIikKKyAgICBpbXBvcnRsaWIuaW52YWxpZGF0ZV9jYWNoZXMoKQorICAgIHJldHVybiB0b19yZXR1cm4KKworZGVmIF9tYWtlX3Rlc3RfemlwX3BrZyh6aXBfZGlyLCB6aXBfYmFzZW5hbWUsIHBrZ19uYW1lLCBzY3JpcHRfYmFzZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZT10ZXN0X3NvdXJjZSwgZGVwdGg9MSk6CisgICAgdG9fcmV0dXJuID0gbWFrZV96aXBfcGtnKHppcF9kaXIsIHppcF9iYXNlbmFtZSwgcGtnX25hbWUsIHNjcmlwdF9iYXNlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlLCBkZXB0aCkKKyAgICBpbXBvcnRsaWIuaW52YWxpZGF0ZV9jYWNoZXMoKQorICAgIHJldHVybiB0b19yZXR1cm4KKworIyBUaGVyZSdzIG5vIGVhc3kgd2F5IHRvIHBhc3MgdGhlIHNjcmlwdCBkaXJlY3RvcnkgaW4gdG8gZ2V0CisjIC1tIHRvIHdvcmsgKGF2b2lkaW5nIHRoYXQgaXMgdGhlIHdob2xlIHBvaW50IG9mIG1ha2luZworIyBkaXJlY3RvcmllcyBhbmQgemlwZmlsZXMgZXhlY3V0YWJsZSEpCisjIFNvIHdlIGZha2UgaXQgZm9yIHRlc3RpbmcgcHVycG9zZXMgd2l0aCBhIGN1c3RvbSBsYXVuY2ggc2NyaXB0CitsYXVuY2hfc291cmNlID0gIiIiXAoraW1wb3J0IHN5cywgb3MucGF0aCwgcnVucHkKK3N5cy5wYXRoLmluc2VydCgwLCAlcykKK3J1bnB5Ll9ydW5fbW9kdWxlX2FzX21haW4oJXIpCisiIiIKKworZGVmIF9tYWtlX2xhdW5jaF9zY3JpcHQoc2NyaXB0X2Rpciwgc2NyaXB0X2Jhc2VuYW1lLCBtb2R1bGVfbmFtZSwgcGF0aD1Ob25lKToKKyAgICBpZiBwYXRoIGlzIE5vbmU6CisgICAgICAgIHBhdGggPSAib3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSIKKyAgICBlbHNlOgorICAgICAgICBwYXRoID0gcmVwcihwYXRoKQorICAgIHNvdXJjZSA9IGxhdW5jaF9zb3VyY2UgJSAocGF0aCwgbW9kdWxlX25hbWUpCisgICAgdG9fcmV0dXJuID0gbWFrZV9zY3JpcHQoc2NyaXB0X2Rpciwgc2NyaXB0X2Jhc2VuYW1lLCBzb3VyY2UpCisgICAgaW1wb3J0bGliLmludmFsaWRhdGVfY2FjaGVzKCkKKyAgICByZXR1cm4gdG9fcmV0dXJuCisKK2NsYXNzIE11bHRpUHJvY2Vzc2luZ0NtZExpbmVNaXhpbigpOgorICAgIG1heERpZmYgPSBOb25lICMgU2hvdyBmdWxsIHRyYWNlYmFja3Mgb24gc3VicHJvY2VzcyBmYWlsdXJlCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIGlmIHNlbGYuc3RhcnRfbWV0aG9kIG5vdCBpbiBBVkFJTEFCTEVfU1RBUlRfTUVUSE9EUzoKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoIiVyIHN0YXJ0IG1ldGhvZCBub3QgYXZhaWxhYmxlIiAlIHNlbGYuc3RhcnRfbWV0aG9kKQorCisgICAgZGVmIF9jaGVja19vdXRwdXQoc2VsZiwgc2NyaXB0X25hbWUsIGV4aXRfY29kZSwgb3V0LCBlcnIpOgorICAgICAgICBpZiB2ZXJib3NlID4gMToKKyAgICAgICAgICAgIHByaW50KCJPdXRwdXQgZnJvbSB0ZXN0IHNjcmlwdCAlcjoiICUgc2NyaXB0X25hbWUpCisgICAgICAgICAgICBwcmludChyZXByKG91dCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhpdF9jb2RlLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyci5kZWNvZGUoJ3V0Zi04JyksICcnKQorICAgICAgICBleHBlY3RlZF9yZXN1bHRzID0gIiVzIC0+IFsxLCA0LCA5XSIgJSBzZWxmLnN0YXJ0X21ldGhvZAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dC5kZWNvZGUoJ3V0Zi04Jykuc3RyaXAoKSwgZXhwZWN0ZWRfcmVzdWx0cykKKworICAgIGRlZiBfY2hlY2tfc2NyaXB0KHNlbGYsIHNjcmlwdF9uYW1lLCAqY21kX2xpbmVfc3dpdGNoZXMpOgorICAgICAgICBpZiBub3QgX19kZWJ1Z19fOgorICAgICAgICAgICAgY21kX2xpbmVfc3dpdGNoZXMgKz0gKCctJyArICdPJyAqIHN5cy5mbGFncy5vcHRpbWl6ZSwpCisgICAgICAgIHJ1bl9hcmdzID0gY21kX2xpbmVfc3dpdGNoZXMgKyAoc2NyaXB0X25hbWUsIHNlbGYuc3RhcnRfbWV0aG9kKQorICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCpydW5fYXJncywgX19pc29sYXRlZD1GYWxzZSkKKyAgICAgICAgc2VsZi5fY2hlY2tfb3V0cHV0KHNjcmlwdF9uYW1lLCByYywgb3V0LCBlcnIpCisKKyAgICBkZWYgdGVzdF9iYXNpY19zY3JpcHQoc2VsZik6CisgICAgICAgIHdpdGggdGVtcF9kaXIoKSBhcyBzY3JpcHRfZGlyOgorICAgICAgICAgICAgc2NyaXB0X25hbWUgPSBfbWFrZV90ZXN0X3NjcmlwdChzY3JpcHRfZGlyLCAnc2NyaXB0JykKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX3NjcmlwdChzY3JpcHRfbmFtZSkKKworICAgIGRlZiB0ZXN0X2Jhc2ljX3NjcmlwdF9ub19zdWZmaXgoc2VsZik6CisgICAgICAgIHdpdGggdGVtcF9kaXIoKSBhcyBzY3JpcHRfZGlyOgorICAgICAgICAgICAgc2NyaXB0X25hbWUgPSBfbWFrZV90ZXN0X3NjcmlwdChzY3JpcHRfZGlyLCAnc2NyaXB0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb21pdF9zdWZmaXg9VHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX3NjcmlwdChzY3JpcHRfbmFtZSkKKworICAgIGRlZiB0ZXN0X2lweXRob25fd29ya2Fyb3VuZChzZWxmKToKKyAgICAgICAgIyBTb21lIHZlcnNpb25zIG9mIHRoZSBJUHl0aG9uIGxhdW5jaCBzY3JpcHQgYXJlIG1pc3NpbmcgdGhlCisgICAgICAgICMgX19uYW1lX18gPSAiX19tYWluX18iIGd1YXJkLCBhbmQgbXVsdGlwcm9jZXNzaW5nIGhhcyBsb25nIGhhZAorICAgICAgICAjIGEgd29ya2Fyb3VuZCBmb3IgdGhhdCBjYXNlCisgICAgICAgICMgU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9pcHl0aG9uL2lweXRob24vaXNzdWVzLzQ2OTgKKyAgICAgICAgc291cmNlID0gdGVzdF9zb3VyY2VfbWFpbl9za2lwcGVkX2luX2NoaWxkcmVuCisgICAgICAgIHdpdGggdGVtcF9kaXIoKSBhcyBzY3JpcHRfZGlyOgorICAgICAgICAgICAgc2NyaXB0X25hbWUgPSBfbWFrZV90ZXN0X3NjcmlwdChzY3JpcHRfZGlyLCAnaXB5dGhvbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZT1zb3VyY2UpCisgICAgICAgICAgICBzZWxmLl9jaGVja19zY3JpcHQoc2NyaXB0X25hbWUpCisgICAgICAgICAgICBzY3JpcHRfbm9fc3VmZml4ID0gX21ha2VfdGVzdF9zY3JpcHQoc2NyaXB0X2RpciwgJ2lweXRob24nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZT1zb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb21pdF9zdWZmaXg9VHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX3NjcmlwdChzY3JpcHRfbm9fc3VmZml4KQorCisgICAgZGVmIHRlc3Rfc2NyaXB0X2NvbXBpbGVkKHNlbGYpOgorICAgICAgICB3aXRoIHRlbXBfZGlyKCkgYXMgc2NyaXB0X2RpcjoKKyAgICAgICAgICAgIHNjcmlwdF9uYW1lID0gX21ha2VfdGVzdF9zY3JpcHQoc2NyaXB0X2RpciwgJ3NjcmlwdCcpCisgICAgICAgICAgICBweV9jb21waWxlLmNvbXBpbGUoc2NyaXB0X25hbWUsIGRvcmFpc2U9VHJ1ZSkKKyAgICAgICAgICAgIG9zLnJlbW92ZShzY3JpcHRfbmFtZSkKKyAgICAgICAgICAgIHB5Y19maWxlID0gc3VwcG9ydC5tYWtlX2xlZ2FjeV9weWMoc2NyaXB0X25hbWUpCisgICAgICAgICAgICBzZWxmLl9jaGVja19zY3JpcHQocHljX2ZpbGUpCisKKyAgICBkZWYgdGVzdF9kaXJlY3Rvcnkoc2VsZik6CisgICAgICAgIHNvdXJjZSA9IHNlbGYubWFpbl9pbl9jaGlsZHJlbl9zb3VyY2UKKyAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CisgICAgICAgICAgICBzY3JpcHRfbmFtZSA9IF9tYWtlX3Rlc3Rfc2NyaXB0KHNjcmlwdF9kaXIsICdfX21haW5fXycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZT1zb3VyY2UpCisgICAgICAgICAgICBzZWxmLl9jaGVja19zY3JpcHQoc2NyaXB0X2RpcikKKworICAgIGRlZiB0ZXN0X2RpcmVjdG9yeV9jb21waWxlZChzZWxmKToKKyAgICAgICAgc291cmNlID0gc2VsZi5tYWluX2luX2NoaWxkcmVuX3NvdXJjZQorICAgICAgICB3aXRoIHRlbXBfZGlyKCkgYXMgc2NyaXB0X2RpcjoKKyAgICAgICAgICAgIHNjcmlwdF9uYW1lID0gX21ha2VfdGVzdF9zY3JpcHQoc2NyaXB0X2RpciwgJ19fbWFpbl9fJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlPXNvdXJjZSkKKyAgICAgICAgICAgIHB5X2NvbXBpbGUuY29tcGlsZShzY3JpcHRfbmFtZSwgZG9yYWlzZT1UcnVlKQorICAgICAgICAgICAgb3MucmVtb3ZlKHNjcmlwdF9uYW1lKQorICAgICAgICAgICAgcHljX2ZpbGUgPSBzdXBwb3J0Lm1ha2VfbGVnYWN5X3B5YyhzY3JpcHRfbmFtZSkKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX3NjcmlwdChzY3JpcHRfZGlyKQorCisgICAgZGVmIHRlc3RfemlwZmlsZShzZWxmKToKKyAgICAgICAgc291cmNlID0gc2VsZi5tYWluX2luX2NoaWxkcmVuX3NvdXJjZQorICAgICAgICB3aXRoIHRlbXBfZGlyKCkgYXMgc2NyaXB0X2RpcjoKKyAgICAgICAgICAgIHNjcmlwdF9uYW1lID0gX21ha2VfdGVzdF9zY3JpcHQoc2NyaXB0X2RpciwgJ19fbWFpbl9fJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlPXNvdXJjZSkKKyAgICAgICAgICAgIHppcF9uYW1lLCBydW5fbmFtZSA9IG1ha2VfemlwX3NjcmlwdChzY3JpcHRfZGlyLCAndGVzdF96aXAnLCBzY3JpcHRfbmFtZSkKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX3NjcmlwdCh6aXBfbmFtZSkKKworICAgIGRlZiB0ZXN0X3ppcGZpbGVfY29tcGlsZWQoc2VsZik6CisgICAgICAgIHNvdXJjZSA9IHNlbGYubWFpbl9pbl9jaGlsZHJlbl9zb3VyY2UKKyAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CisgICAgICAgICAgICBzY3JpcHRfbmFtZSA9IF9tYWtlX3Rlc3Rfc2NyaXB0KHNjcmlwdF9kaXIsICdfX21haW5fXycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZT1zb3VyY2UpCisgICAgICAgICAgICBjb21waWxlZF9uYW1lID0gcHlfY29tcGlsZS5jb21waWxlKHNjcmlwdF9uYW1lLCBkb3JhaXNlPVRydWUpCisgICAgICAgICAgICB6aXBfbmFtZSwgcnVuX25hbWUgPSBtYWtlX3ppcF9zY3JpcHQoc2NyaXB0X2RpciwgJ3Rlc3RfemlwJywgY29tcGlsZWRfbmFtZSkKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX3NjcmlwdCh6aXBfbmFtZSkKKworICAgIGRlZiB0ZXN0X21vZHVsZV9pbl9wYWNrYWdlKHNlbGYpOgorICAgICAgICB3aXRoIHRlbXBfZGlyKCkgYXMgc2NyaXB0X2RpcjoKKyAgICAgICAgICAgIHBrZ19kaXIgPSBvcy5wYXRoLmpvaW4oc2NyaXB0X2RpciwgJ3Rlc3RfcGtnJykKKyAgICAgICAgICAgIG1ha2VfcGtnKHBrZ19kaXIpCisgICAgICAgICAgICBzY3JpcHRfbmFtZSA9IF9tYWtlX3Rlc3Rfc2NyaXB0KHBrZ19kaXIsICdjaGVja19zaWJsaW5nJykKKyAgICAgICAgICAgIGxhdW5jaF9uYW1lID0gX21ha2VfbGF1bmNoX3NjcmlwdChzY3JpcHRfZGlyLCAnbGF1bmNoJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdF9wa2cuY2hlY2tfc2libGluZycpCisgICAgICAgICAgICBzZWxmLl9jaGVja19zY3JpcHQobGF1bmNoX25hbWUpCisKKyAgICBkZWYgdGVzdF9tb2R1bGVfaW5fcGFja2FnZV9pbl96aXBmaWxlKHNlbGYpOgorICAgICAgICB3aXRoIHRlbXBfZGlyKCkgYXMgc2NyaXB0X2RpcjoKKyAgICAgICAgICAgIHppcF9uYW1lLCBydW5fbmFtZSA9IF9tYWtlX3Rlc3RfemlwX3BrZyhzY3JpcHRfZGlyLCAndGVzdF96aXAnLCAndGVzdF9wa2cnLCAnc2NyaXB0JykKKyAgICAgICAgICAgIGxhdW5jaF9uYW1lID0gX21ha2VfbGF1bmNoX3NjcmlwdChzY3JpcHRfZGlyLCAnbGF1bmNoJywgJ3Rlc3RfcGtnLnNjcmlwdCcsIHppcF9uYW1lKQorICAgICAgICAgICAgc2VsZi5fY2hlY2tfc2NyaXB0KGxhdW5jaF9uYW1lKQorCisgICAgZGVmIHRlc3RfbW9kdWxlX2luX3N1YnBhY2thZ2VfaW5femlwZmlsZShzZWxmKToKKyAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CisgICAgICAgICAgICB6aXBfbmFtZSwgcnVuX25hbWUgPSBfbWFrZV90ZXN0X3ppcF9wa2coc2NyaXB0X2RpciwgJ3Rlc3RfemlwJywgJ3Rlc3RfcGtnJywgJ3NjcmlwdCcsIGRlcHRoPTIpCisgICAgICAgICAgICBsYXVuY2hfbmFtZSA9IF9tYWtlX2xhdW5jaF9zY3JpcHQoc2NyaXB0X2RpciwgJ2xhdW5jaCcsICd0ZXN0X3BrZy50ZXN0X3BrZy5zY3JpcHQnLCB6aXBfbmFtZSkKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX3NjcmlwdChsYXVuY2hfbmFtZSkKKworICAgIGRlZiB0ZXN0X3BhY2thZ2Uoc2VsZik6CisgICAgICAgIHNvdXJjZSA9IHNlbGYubWFpbl9pbl9jaGlsZHJlbl9zb3VyY2UKKyAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CisgICAgICAgICAgICBwa2dfZGlyID0gb3MucGF0aC5qb2luKHNjcmlwdF9kaXIsICd0ZXN0X3BrZycpCisgICAgICAgICAgICBtYWtlX3BrZyhwa2dfZGlyKQorICAgICAgICAgICAgc2NyaXB0X25hbWUgPSBfbWFrZV90ZXN0X3NjcmlwdChwa2dfZGlyLCAnX19tYWluX18nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2U9c291cmNlKQorICAgICAgICAgICAgbGF1bmNoX25hbWUgPSBfbWFrZV9sYXVuY2hfc2NyaXB0KHNjcmlwdF9kaXIsICdsYXVuY2gnLCAndGVzdF9wa2cnKQorICAgICAgICAgICAgc2VsZi5fY2hlY2tfc2NyaXB0KGxhdW5jaF9uYW1lKQorCisgICAgZGVmIHRlc3RfcGFja2FnZV9jb21waWxlZChzZWxmKToKKyAgICAgICAgc291cmNlID0gc2VsZi5tYWluX2luX2NoaWxkcmVuX3NvdXJjZQorICAgICAgICB3aXRoIHRlbXBfZGlyKCkgYXMgc2NyaXB0X2RpcjoKKyAgICAgICAgICAgIHBrZ19kaXIgPSBvcy5wYXRoLmpvaW4oc2NyaXB0X2RpciwgJ3Rlc3RfcGtnJykKKyAgICAgICAgICAgIG1ha2VfcGtnKHBrZ19kaXIpCisgICAgICAgICAgICBzY3JpcHRfbmFtZSA9IF9tYWtlX3Rlc3Rfc2NyaXB0KHBrZ19kaXIsICdfX21haW5fXycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZT1zb3VyY2UpCisgICAgICAgICAgICBjb21waWxlZF9uYW1lID0gcHlfY29tcGlsZS5jb21waWxlKHNjcmlwdF9uYW1lLCBkb3JhaXNlPVRydWUpCisgICAgICAgICAgICBvcy5yZW1vdmUoc2NyaXB0X25hbWUpCisgICAgICAgICAgICBweWNfZmlsZSA9IHN1cHBvcnQubWFrZV9sZWdhY3lfcHljKHNjcmlwdF9uYW1lKQorICAgICAgICAgICAgbGF1bmNoX25hbWUgPSBfbWFrZV9sYXVuY2hfc2NyaXB0KHNjcmlwdF9kaXIsICdsYXVuY2gnLCAndGVzdF9wa2cnKQorICAgICAgICAgICAgc2VsZi5fY2hlY2tfc2NyaXB0KGxhdW5jaF9uYW1lKQorCisjIFRlc3QgYWxsIHN1cHBvcnRlZCBzdGFydCBtZXRob2RzIChzZXR1cENsYXNzIHNraXBzIGFzIGFwcHJvcHJpYXRlKQorCitjbGFzcyBTcGF3bkNtZExpbmVUZXN0KE11bHRpUHJvY2Vzc2luZ0NtZExpbmVNaXhpbiwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIHN0YXJ0X21ldGhvZCA9ICdzcGF3bicKKyAgICBtYWluX2luX2NoaWxkcmVuX3NvdXJjZSA9IHRlc3Rfc291cmNlX21haW5fc2tpcHBlZF9pbl9jaGlsZHJlbgorCitjbGFzcyBGb3JrQ21kTGluZVRlc3QoTXVsdGlQcm9jZXNzaW5nQ21kTGluZU1peGluLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgc3RhcnRfbWV0aG9kID0gJ2ZvcmsnCisgICAgbWFpbl9pbl9jaGlsZHJlbl9zb3VyY2UgPSB0ZXN0X3NvdXJjZQorCitjbGFzcyBGb3JrU2VydmVyQ21kTGluZVRlc3QoTXVsdGlQcm9jZXNzaW5nQ21kTGluZU1peGluLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgc3RhcnRfbWV0aG9kID0gJ2ZvcmtzZXJ2ZXInCisgICAgbWFpbl9pbl9jaGlsZHJlbl9zb3VyY2UgPSB0ZXN0X3NvdXJjZV9tYWluX3NraXBwZWRfaW5fY2hpbGRyZW4KKworZGVmIHRlYXJEb3duTW9kdWxlKCk6CisgICAgc3VwcG9ydC5yZWFwX2NoaWxkcmVuKCkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbXVsdGlwcm9jZXNzaW5nX3NwYXduLnB5IGIvTGliL3Rlc3QvdGVzdF9tdWx0aXByb2Nlc3Npbmdfc3Bhd24ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzM0YWU5ZQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfbXVsdGlwcm9jZXNzaW5nX3NwYXduLnB5CkBAIC0wLDAgKzEsNyBAQAoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgdGVzdC5fdGVzdF9tdWx0aXByb2Nlc3NpbmcKKwordGVzdC5fdGVzdF9tdWx0aXByb2Nlc3NpbmcuaW5zdGFsbF90ZXN0c19pbl9tb2R1bGVfZGljdChnbG9iYWxzKCksICdzcGF3bicpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X25udHBsaWIucHkgYi9MaWIvdGVzdC90ZXN0X25udHBsaWIucHkKaW5kZXggMWQ1MjcxMy4uYWUzNjE4ZiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9ubnRwbGliLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfbm50cGxpYi5weQpAQCAtOCw2ICs4LDcgQEAKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogZnJvbSBubnRwbGliIGltcG9ydCBOTlRQLCBHcm91cEluZm8KIGltcG9ydCBubnRwbGliCitmcm9tIHVuaXR0ZXN0Lm1vY2sgaW1wb3J0IHBhdGNoCiB0cnk6CiAgICAgaW1wb3J0IHNzbAogZXhjZXB0IEltcG9ydEVycm9yOgpAQCAtMjY2LDcgKzI2Nyw3IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc2VydmVyLmhlbHAoKQotICAgICAgICAgICAgZXhjZXB0IChzb2NrZXQuZXJyb3IsIEVPRkVycm9yKToKKyAgICAgICAgICAgIGV4Y2VwdCAoT1NFcnJvciwgRU9GRXJyb3IpOgogICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICAgICAgcmV0dXJuIFRydWUKIApAQCAtMzcwLDYgKzM3MSwxNCBAQAogICAgICAgICByZXR1cm4gbgogCiAKK2RlZiBtYWtlX21vY2tfZmlsZShoYW5kbGVyKToKKyAgICBzaW8gPSBfTk5UUFNlcnZlcklPKGhhbmRsZXIpCisgICAgIyBVc2luZyBCdWZmZXJlZFJXUGFpciBpbnN0ZWFkIG9mIEJ1ZmZlcmVkUmFuZG9tIGVuc3VyZXMgdGhlIGZpbGUKKyAgICAjIGlzbid0IHNlZWthYmxlLgorICAgIGZpbGUgPSBpby5CdWZmZXJlZFJXUGFpcihzaW8sIHNpbykKKyAgICByZXR1cm4gKHNpbywgZmlsZSkKKworCiBjbGFzcyBNb2NrZWROTlRQVGVzdHNNaXhpbjoKICAgICAjIE92ZXJyaWRlIGluIGRlcml2ZWQgY2xhc3NlcwogICAgIGhhbmRsZXJfY2xhc3MgPSBOb25lCkBAIC0zODQsMTAgKzM5Myw3IEBACiAKICAgICBkZWYgbWFrZV9zZXJ2ZXIoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKICAgICAgICAgc2VsZi5oYW5kbGVyID0gc2VsZi5oYW5kbGVyX2NsYXNzKCkKLSAgICAgICAgc2VsZi5zaW8gPSBfTk5UUFNlcnZlcklPKHNlbGYuaGFuZGxlcikKLSAgICAgICAgIyBVc2luZyBCdWZmZXJlZFJXUGFpciBpbnN0ZWFkIG9mIEJ1ZmZlcmVkUmFuZG9tIGVuc3VyZXMgdGhlIGZpbGUKLSAgICAgICAgIyBpc24ndCBzZWVrYWJsZS4KLSAgICAgICAgZmlsZSA9IGlvLkJ1ZmZlcmVkUldQYWlyKHNlbGYuc2lvLCBzZWxmLnNpbykKKyAgICAgICAgc2VsZi5zaW8sIGZpbGUgPSBtYWtlX21vY2tfZmlsZShzZWxmLmhhbmRsZXIpCiAgICAgICAgIHNlbGYuc2VydmVyID0gbm50cGxpYi5fTk5UUEJhc2UoZmlsZSwgJ3Rlc3Quc2VydmVyJywgKmFyZ3MsICoqa3dhcmdzKQogICAgICAgICByZXR1cm4gc2VsZi5zZXJ2ZXIKIApAQCAtMTQxMiwxMSArMTQxOCwxMDggQEAKICAgICBkZWYgdGVzdF9zc2xfc3VwcG9ydChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIobm50cGxpYiwgJ05OVFBfU1NMJykpCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICB0ZXN0cyA9IFtNaXNjVGVzdHMsIE5OVFB2MVRlc3RzLCBOTlRQdjJUZXN0cywgQ2Fwc0FmdGVyTG9naW5OTlRQdjJUZXN0cywKLSAgICAgICAgICAgIFNlbmRSZWFkZXJOTlRQdjJUZXN0cywgTmV0d29ya2VkTk5UUFRlc3RzLCBOZXR3b3JrZWROTlRQX1NTTFRlc3RzXQotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KCp0ZXN0cykKKworY2xhc3MgUHVibGljQVBJVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIkVuc3VyZXMgdGhhdCB0aGUgY29ycmVjdCB2YWx1ZXMgYXJlIGV4cG9zZWQgaW4gdGhlIHB1YmxpYyBBUEkuIiIiCisKKyAgICBkZWYgdGVzdF9tb2R1bGVfYWxsX2F0dHJpYnV0ZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIobm50cGxpYiwgJ19fYWxsX18nKSkKKyAgICAgICAgdGFyZ2V0X2FwaSA9IFsnTk5UUCcsICdOTlRQRXJyb3InLCAnTk5UUFJlcGx5RXJyb3InLAorICAgICAgICAgICAgICAgICAgICAgICdOTlRQVGVtcG9yYXJ5RXJyb3InLCAnTk5UUFBlcm1hbmVudEVycm9yJywKKyAgICAgICAgICAgICAgICAgICAgICAnTk5UUFByb3RvY29sRXJyb3InLCAnTk5UUERhdGFFcnJvcicsICdkZWNvZGVfaGVhZGVyJ10KKyAgICAgICAgaWYgc3NsIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgdGFyZ2V0X2FwaS5hcHBlbmQoJ05OVFBfU1NMJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQobm50cGxpYi5fX2FsbF9fKSwgc2V0KHRhcmdldF9hcGkpKQorCitjbGFzcyBNb2NrU29ja2V0VGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIlRlc3RzIGludm9sdmluZyBhIG1vY2sgc29ja2V0IG9iamVjdAorCisgICAgVXNlZCB3aGVyZSB0aGUgX05OVFBTZXJ2ZXJJTyBmaWxlIG9iamVjdCBpcyBub3QgZW5vdWdoLiIiIgorCisgICAgbm50cF9jbGFzcyA9IG5udHBsaWIuTk5UUAorCisgICAgZGVmIGNoZWNrX2NvbnN0cnVjdG9yX2Vycm9yX2NvbmRpdGlvbnMoCisgICAgICAgICAgICBzZWxmLCBoYW5kbGVyX2NsYXNzLAorICAgICAgICAgICAgZXhwZWN0ZWRfZXJyb3JfdHlwZSwgZXhwZWN0ZWRfZXJyb3JfbXNnLAorICAgICAgICAgICAgbG9naW49Tm9uZSwgcGFzc3dvcmQ9Tm9uZSk6CisKKyAgICAgICAgY2xhc3MgbW9ja19zb2NrZXRfbW9kdWxlOgorICAgICAgICAgICAgZGVmIGNyZWF0ZV9jb25uZWN0aW9uKGFkZHJlc3MsIHRpbWVvdXQpOgorICAgICAgICAgICAgICAgIHJldHVybiBNb2NrU29ja2V0KCkKKworICAgICAgICBjbGFzcyBNb2NrU29ja2V0OgorICAgICAgICAgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICAgICAgICAgIG5vbmxvY2FsIHNvY2tldF9jbG9zZWQKKyAgICAgICAgICAgICAgICBzb2NrZXRfY2xvc2VkID0gVHJ1ZQorCisgICAgICAgICAgICBkZWYgbWFrZWZpbGUoc29ja2V0LCBtb2RlKToKKyAgICAgICAgICAgICAgICBoYW5kbGVyID0gaGFuZGxlcl9jbGFzcygpCisgICAgICAgICAgICAgICAgXywgZmlsZSA9IG1ha2VfbW9ja19maWxlKGhhbmRsZXIpCisgICAgICAgICAgICAgICAgZmlsZXMuYXBwZW5kKGZpbGUpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZpbGUKKworICAgICAgICBzb2NrZXRfY2xvc2VkID0gRmFsc2UKKyAgICAgICAgZmlsZXMgPSBbXQorICAgICAgICB3aXRoIHBhdGNoKCdubnRwbGliLnNvY2tldCcsIG1vY2tfc29ja2V0X21vZHVsZSksIFwKKyAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KGV4cGVjdGVkX2Vycm9yX3R5cGUsIGV4cGVjdGVkX2Vycm9yX21zZyk6CisgICAgICAgICAgICBzZWxmLm5udHBfY2xhc3MoJ2R1bW15JywgdXNlcj1sb2dpbiwgcGFzc3dvcmQ9cGFzc3dvcmQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzb2NrZXRfY2xvc2VkKQorICAgICAgICBmb3IgZiBpbiBmaWxlczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLmNsb3NlZCkKKworICAgIGRlZiB0ZXN0X2JhZF93ZWxjb21lKHNlbGYpOgorICAgICAgICAjVGVzdCBhIGJhZCB3ZWxjb21lIG1lc3NhZ2UKKyAgICAgICAgY2xhc3MgSGFuZGxlcihOTlRQdjFIYW5kbGVyKToKKyAgICAgICAgICAgIHdlbGNvbWUgPSAnQmFkIFdlbGNvbWUnCisgICAgICAgIHNlbGYuY2hlY2tfY29uc3RydWN0b3JfZXJyb3JfY29uZGl0aW9ucygKKyAgICAgICAgICAgIEhhbmRsZXIsIG5udHBsaWIuTk5UUFByb3RvY29sRXJyb3IsIEhhbmRsZXIud2VsY29tZSkKKworICAgIGRlZiB0ZXN0X3NlcnZpY2VfdGVtcG9yYXJpbHlfdW5hdmFpbGFibGUoc2VsZik6CisgICAgICAgICNUZXN0IHNlcnZpY2UgdGVtcG9yYXJpbHkgdW5hdmFpbGFibGUKKyAgICAgICAgY2xhc3MgSGFuZGxlcihOTlRQdjFIYW5kbGVyKToKKyAgICAgICAgICAgIHdlbGNvbWUgPSAnNDAwIFNlcnZpY2UgdGVtcG9yYXJpbHkgdW5hdmlsYWJsZScKKyAgICAgICAgc2VsZi5jaGVja19jb25zdHJ1Y3Rvcl9lcnJvcl9jb25kaXRpb25zKAorICAgICAgICAgICAgSGFuZGxlciwgbm50cGxpYi5OTlRQVGVtcG9yYXJ5RXJyb3IsIEhhbmRsZXIud2VsY29tZSkKKworICAgIGRlZiB0ZXN0X3NlcnZpY2VfcGVybWFuZW50bHlfdW5hdmFpbGFibGUoc2VsZik6CisgICAgICAgICNUZXN0IHNlcnZpY2UgcGVybWFuZW50bHkgdW5hdmFpbGFibGUKKyAgICAgICAgY2xhc3MgSGFuZGxlcihOTlRQdjFIYW5kbGVyKToKKyAgICAgICAgICAgIHdlbGNvbWUgPSAnNTAyIFNlcnZpY2UgcGVybWFuZW50bHkgdW5hdmlsYWJsZScKKyAgICAgICAgc2VsZi5jaGVja19jb25zdHJ1Y3Rvcl9lcnJvcl9jb25kaXRpb25zKAorICAgICAgICAgICAgSGFuZGxlciwgbm50cGxpYi5OTlRQUGVybWFuZW50RXJyb3IsIEhhbmRsZXIud2VsY29tZSkKKworICAgIGRlZiB0ZXN0X2JhZF9jYXBhYmlsaXRpZXMoc2VsZik6CisgICAgICAgICNUZXN0IGEgYmFkIGNhcGFiaWxpdGllcyByZXNwb25zZQorICAgICAgICBjbGFzcyBIYW5kbGVyKE5OVFB2MUhhbmRsZXIpOgorICAgICAgICAgICAgZGVmIGhhbmRsZV9DQVBBQklMSVRJRVMoc2VsZik6CisgICAgICAgICAgICAgICAgc2VsZi5wdXNoX2xpdChjYXBhYmlsaXRpZXNfcmVzcG9uc2UpCisgICAgICAgIGNhcGFiaWxpdGllc19yZXNwb25zZSA9ICcyMDEgYmFkIGNhcGFiaWxpdHknCisgICAgICAgIHNlbGYuY2hlY2tfY29uc3RydWN0b3JfZXJyb3JfY29uZGl0aW9ucygKKyAgICAgICAgICAgIEhhbmRsZXIsIG5udHBsaWIuTk5UUFJlcGx5RXJyb3IsIGNhcGFiaWxpdGllc19yZXNwb25zZSkKKworICAgIGRlZiB0ZXN0X2xvZ2luX2Fib3J0ZWQoc2VsZik6CisgICAgICAgICNUZXN0IGEgYmFkIGF1dGhpbmZvIHJlc3BvbnNlCisgICAgICAgIGxvZ2luID0gJ3RAZS5jb20nCisgICAgICAgIHBhc3N3b3JkID0gJ3B5dGhvbicKKyAgICAgICAgY2xhc3MgSGFuZGxlcihOTlRQdjFIYW5kbGVyKToKKyAgICAgICAgICAgIGRlZiBoYW5kbGVfQVVUSElORk8oc2VsZiwgKmFyZ3MpOgorICAgICAgICAgICAgICAgIHNlbGYucHVzaF9saXQoYXV0aGluZm9fcmVzcG9uc2UpCisgICAgICAgIGF1dGhpbmZvX3Jlc3BvbnNlID0gJzUwMyBNZWNoYW5pc20gbm90IHJlY29nbml6ZWQnCisgICAgICAgIHNlbGYuY2hlY2tfY29uc3RydWN0b3JfZXJyb3JfY29uZGl0aW9ucygKKyAgICAgICAgICAgIEhhbmRsZXIsIG5udHBsaWIuTk5UUFBlcm1hbmVudEVycm9yLCBhdXRoaW5mb19yZXNwb25zZSwKKyAgICAgICAgICAgIGxvZ2luLCBwYXNzd29yZCkKKworY2xhc3MgYnlwYXNzX2NvbnRleHQ6CisgICAgIiIiQnlwYXNzIGVuY3J5cHRpb24gYW5kIGFjdHVhbCBTU0wgbW9kdWxlIiIiCisgICAgZGVmIHdyYXBfc29ja2V0KHNvY2ssICoqYXJncyk6CisgICAgICAgIHJldHVybiBzb2NrCisKK0B1bml0dGVzdC5za2lwVW5sZXNzKHNzbCwgJ3JlcXVpcmVzIFNTTCBzdXBwb3J0JykKK2NsYXNzIE1vY2tTc2xUZXN0cyhNb2NrU29ja2V0VGVzdHMpOgorICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgbm50cF9jbGFzcygqcG9zLCAqKmt3KToKKyAgICAgICAgcmV0dXJuIG5udHBsaWIuTk5UUF9TU0woKnBvcywgc3NsX2NvbnRleHQ9YnlwYXNzX2NvbnRleHQsICoqa3cpCiAKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9ub3JtYWxpemF0aW9uLnB5IGIvTGliL3Rlc3QvdGVzdF9ub3JtYWxpemF0aW9uLnB5CmluZGV4IDI4ZWRlMzQuLjVkYWM1ZGIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfbm9ybWFsaXphdGlvbi5weQorKysgYi9MaWIvdGVzdC90ZXN0X25vcm1hbGl6YXRpb24ucHkKQEAgLTcsNyArNyw3IEBACiBmcm9tIHVuaWNvZGVkYXRhIGltcG9ydCBub3JtYWxpemUsIHVuaWRhdGFfdmVyc2lvbgogCiBURVNUREFUQUZJTEUgPSAiTm9ybWFsaXphdGlvblRlc3QudHh0IgotVEVTVERBVEFVUkwgPSAiaHR0cDovL3d3dy51bmljb2RlLm9yZy9QdWJsaWMvIiArIHVuaWRhdGFfdmVyc2lvbiArICIvdWNkLyIgKyBURVNUREFUQUZJTEUKK1RFU1REQVRBVVJMID0gImh0dHA6Ly93d3cucHl0aG9udGVzdC5uZXQvdW5pY29kZS8iICsgdW5pZGF0YV92ZXJzaW9uICsgIi8iICsgVEVTVERBVEFGSUxFCiAKIGRlZiBjaGVja192ZXJzaW9uKHRlc3RmaWxlKToKICAgICBoZHIgPSB0ZXN0ZmlsZS5yZWFkbGluZSgpCkBAIC00Myw3ICs0Myw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHRlc3RkYXRhID0gb3Blbl91cmxyZXNvdXJjZShURVNUREFUQVVSTCwgZW5jb2Rpbmc9InV0Zi04IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVjaz1jaGVja192ZXJzaW9uKQotICAgICAgICBleGNlcHQgKElPRXJyb3IsIEhUVFBFeGNlcHRpb24pOgorICAgICAgICBleGNlcHQgKE9TRXJyb3IsIEhUVFBFeGNlcHRpb24pOgogICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiQ291bGQgbm90IHJldHJpZXZlICIgKyBURVNUREFUQVVSTCkKICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHRlc3RkYXRhLmNsb3NlKQogICAgICAgICBmb3IgbGluZSBpbiB0ZXN0ZGF0YToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbnRwYXRoLnB5IGIvTGliL3Rlc3QvdGVzdF9udHBhdGgucHkKaW5kZXggZTllMWQ3MS4uZGFjZGRkZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9udHBhdGgucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9udHBhdGgucHkKQEAgLTIzNyw2ICsyMzcsNyBAQAogICAgICAgICAgICAgdGVzdGVyKCdudHBhdGguZXhwYW5kdmFycygiJT9iYXIlIiknLCAiJT9iYXIlIikKICAgICAgICAgICAgIHRlc3RlcignbnRwYXRoLmV4cGFuZHZhcnMoIiVmb28lJWJhciIpJywgImJhciViYXIiKQogICAgICAgICAgICAgdGVzdGVyKCdudHBhdGguZXhwYW5kdmFycygiXCclZm9vJVwnJWJhciIpJywgIlwnJWZvbyVcJyViYXIiKQorICAgICAgICAgICAgdGVzdGVyKCdudHBhdGguZXhwYW5kdmFycygiYmFyXCclZm9vJSIpJywgImJhclwnJWZvbyUiKQogCiAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3VwcG9ydC5GU19OT05BU0NJSSwgJ25lZWQgc3VwcG9ydC5GU19OT05BU0NJSScpCiAgICAgZGVmIHRlc3RfZXhwYW5kdmFyc19ub25hc2NpaShzZWxmKToKQEAgLTI1OCw2ICsyNTksNDEgQEAKICAgICAgICAgICAgIGNoZWNrKCclc3BhbSViYXInLCAnJXNiYXInICUgbm9uYXNjaWkpCiAgICAgICAgICAgICBjaGVjaygnJXt9JWJhcicuZm9ybWF0KG5vbmFzY2lpKSwgJ2hhbSVzYmFyJyAlIG5vbmFzY2lpKQogCisgICAgZGVmIHRlc3RfZXhwYW5kdXNlcihzZWxmKToKKyAgICAgICAgdGVzdGVyKCdudHBhdGguZXhwYW5kdXNlcigidGVzdCIpJywgJ3Rlc3QnKQorCisgICAgICAgIHdpdGggc3VwcG9ydC5FbnZpcm9ubWVudFZhckd1YXJkKCkgYXMgZW52OgorICAgICAgICAgICAgZW52LmNsZWFyKCkKKyAgICAgICAgICAgIHRlc3RlcignbnRwYXRoLmV4cGFuZHVzZXIoIn50ZXN0IiknLCAnfnRlc3QnKQorCisgICAgICAgICAgICBlbnZbJ0hPTUVQQVRIJ10gPSAnZXJpY1xcaWRsZScKKyAgICAgICAgICAgIGVudlsnSE9NRURSSVZFJ10gPSAnQzpcXCcKKyAgICAgICAgICAgIHRlc3RlcignbnRwYXRoLmV4cGFuZHVzZXIoIn50ZXN0IiknLCAnQzpcXGVyaWNcXHRlc3QnKQorICAgICAgICAgICAgdGVzdGVyKCdudHBhdGguZXhwYW5kdXNlcigifiIpJywgJ0M6XFxlcmljXFxpZGxlJykKKworICAgICAgICAgICAgZGVsIGVudlsnSE9NRURSSVZFJ10KKyAgICAgICAgICAgIHRlc3RlcignbnRwYXRoLmV4cGFuZHVzZXIoIn50ZXN0IiknLCAnZXJpY1xcdGVzdCcpCisgICAgICAgICAgICB0ZXN0ZXIoJ250cGF0aC5leHBhbmR1c2VyKCJ+IiknLCAnZXJpY1xcaWRsZScpCisKKyAgICAgICAgICAgIGVudi5jbGVhcigpCisgICAgICAgICAgICBlbnZbJ1VTRVJQUk9GSUxFJ10gPSAnQzpcXGVyaWNcXGlkbGUnCisgICAgICAgICAgICB0ZXN0ZXIoJ250cGF0aC5leHBhbmR1c2VyKCJ+dGVzdCIpJywgJ0M6XFxlcmljXFx0ZXN0JykKKyAgICAgICAgICAgIHRlc3RlcignbnRwYXRoLmV4cGFuZHVzZXIoIn4iKScsICdDOlxcZXJpY1xcaWRsZScpCisKKyAgICAgICAgICAgIGVudi5jbGVhcigpCisgICAgICAgICAgICBlbnZbJ0hPTUUnXSA9ICdDOlxcaWRsZVxcZXJpYycKKyAgICAgICAgICAgIHRlc3RlcignbnRwYXRoLmV4cGFuZHVzZXIoIn50ZXN0IiknLCAnQzpcXGlkbGVcXHRlc3QnKQorICAgICAgICAgICAgdGVzdGVyKCdudHBhdGguZXhwYW5kdXNlcigifiIpJywgJ0M6XFxpZGxlXFxlcmljJykKKworICAgICAgICAgICAgdGVzdGVyKCdudHBhdGguZXhwYW5kdXNlcigifnRlc3RcXGZvb1xcYmFyIiknLAorICAgICAgICAgICAgICAgICAgICdDOlxcaWRsZVxcdGVzdFxcZm9vXFxiYXInKQorICAgICAgICAgICAgdGVzdGVyKCdudHBhdGguZXhwYW5kdXNlcigifnRlc3QvZm9vL2JhciIpJywKKyAgICAgICAgICAgICAgICAgICAnQzpcXGlkbGVcXHRlc3QvZm9vL2JhcicpCisgICAgICAgICAgICB0ZXN0ZXIoJ250cGF0aC5leHBhbmR1c2VyKCJ+XFxmb29cXGJhciIpJywKKyAgICAgICAgICAgICAgICAgICAnQzpcXGlkbGVcXGVyaWNcXGZvb1xcYmFyJykKKyAgICAgICAgICAgIHRlc3RlcignbnRwYXRoLmV4cGFuZHVzZXIoIn4vZm9vL2JhciIpJywKKyAgICAgICAgICAgICAgICAgICAnQzpcXGlkbGVcXGVyaWMvZm9vL2JhcicpCisKICAgICBkZWYgdGVzdF9hYnNwYXRoKHNlbGYpOgogICAgICAgICAjIG50cGF0aC5hYnNwYXRoKCkgY2FuIG9ubHkgYmUgdXNlZCBvbiBhIHN5c3RlbSB3aXRoIHRoZSAibnQiIG1vZHVsZQogICAgICAgICAjIChyZWFzb25hYmx5KSwgc28gd2UgcHJvdGVjdCB0aGlzIHRlc3Qgd2l0aCAiaW1wb3J0IG50Ii4gIFRoaXMgYWxsb3dzCkBAIC0yNzEsMTMgKzMwNywxNCBAQAogICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgnbnQgbW9kdWxlIG5vdCBhdmFpbGFibGUnKQogCiAgICAgZGVmIHRlc3RfcmVscGF0aChzZWxmKToKLSAgICAgICAgY3VycmVudGRpciA9IG9zLnBhdGguc3BsaXQob3MuZ2V0Y3dkKCkpWy0xXQogICAgICAgICB0ZXN0ZXIoJ250cGF0aC5yZWxwYXRoKCJhIiknLCAnYScpCiAgICAgICAgIHRlc3RlcignbnRwYXRoLnJlbHBhdGgob3MucGF0aC5hYnNwYXRoKCJhIikpJywgJ2EnKQogICAgICAgICB0ZXN0ZXIoJ250cGF0aC5yZWxwYXRoKCJhL2IiKScsICdhXFxiJykKICAgICAgICAgdGVzdGVyKCdudHBhdGgucmVscGF0aCgiLi4vYS9iIiknLCAnLi5cXGFcXGInKQotICAgICAgICB0ZXN0ZXIoJ250cGF0aC5yZWxwYXRoKCJhIiwgIi4uL2IiKScsICcuLlxcJytjdXJyZW50ZGlyKydcXGEnKQotICAgICAgICB0ZXN0ZXIoJ250cGF0aC5yZWxwYXRoKCJhL2IiLCAiLi4vYyIpJywgJy4uXFwnK2N1cnJlbnRkaXIrJ1xcYVxcYicpCisgICAgICAgIHdpdGggc3VwcG9ydC50ZW1wX2N3ZChzdXBwb3J0LlRFU1RGTikgYXMgY3dkX2RpcjoKKyAgICAgICAgICAgIGN1cnJlbnRkaXIgPSBvcy5wYXRoLmJhc2VuYW1lKGN3ZF9kaXIpCisgICAgICAgICAgICB0ZXN0ZXIoJ250cGF0aC5yZWxwYXRoKCJhIiwgIi4uL2IiKScsICcuLlxcJytjdXJyZW50ZGlyKydcXGEnKQorICAgICAgICAgICAgdGVzdGVyKCdudHBhdGgucmVscGF0aCgiYS9iIiwgIi4uL2MiKScsICcuLlxcJytjdXJyZW50ZGlyKydcXGFcXGInKQogICAgICAgICB0ZXN0ZXIoJ250cGF0aC5yZWxwYXRoKCJhIiwgImIvYyIpJywgJy4uXFwuLlxcYScpCiAgICAgICAgIHRlc3RlcignbnRwYXRoLnJlbHBhdGgoImM6L2Zvby9iYXIvYmF0IiwgImM6L3gveSIpJywgJy4uXFwuLlxcZm9vXFxiYXJcXGJhdCcpCiAgICAgICAgIHRlc3RlcignbnRwYXRoLnJlbHBhdGgoIi8vY29ua3kvbW91bnRwb2ludC9hIiwgIi8vY29ua3kvbW91bnRwb2ludC9iL2MiKScsICcuLlxcLi5cXGEnKQpAQCAtMzA2LDYgKzM0Myw0MCBAQAogICAgICAgICAgICAgICAgICAgICAjIGRpYWxvZ3MgKCM0ODA0KQogICAgICAgICAgICAgICAgICAgICBudHBhdGguc2FtZW9wZW5maWxlKC0xLCAtMSkKIAorICAgIGRlZiB0ZXN0X2lzbW91bnQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShudHBhdGguaXNtb3VudCgiYzpcXCIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobnRwYXRoLmlzbW91bnQoIkM6XFwiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG50cGF0aC5pc21vdW50KCJjOi8iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG50cGF0aC5pc21vdW50KCJDOi8iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG50cGF0aC5pc21vdW50KCJcXFxcLlxcYzpcXCIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobnRwYXRoLmlzbW91bnQoIlxcXFwuXFxDOlxcIikpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG50cGF0aC5pc21vdW50KGIiYzpcXCIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobnRwYXRoLmlzbW91bnQoYiJDOlxcIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShudHBhdGguaXNtb3VudChiImM6LyIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobnRwYXRoLmlzbW91bnQoYiJDOi8iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG50cGF0aC5pc21vdW50KGIiXFxcXC5cXGM6XFwiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG50cGF0aC5pc21vdW50KGIiXFxcXC5cXEM6XFwiKSkKKworICAgICAgICB3aXRoIHN1cHBvcnQudGVtcF9kaXIoKSBhcyBkOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShudHBhdGguaXNtb3VudChkKSkKKworICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gIndpbjMyIjoKKyAgICAgICAgICAgICMKKyAgICAgICAgICAgICMgTWFrZSBzdXJlIHRoZSBjdXJyZW50IGZvbGRlciBpc24ndCB0aGUgcm9vdCBmb2xkZXIKKyAgICAgICAgICAgICMgKG9yIGFueSBvdGhlciB2b2x1bWUgcm9vdCkuIFRoZSBkcml2ZS1yZWxhdGl2ZQorICAgICAgICAgICAgIyBsb2NhdGlvbnMgYmVsb3cgY2Fubm90IHRoZW4gcmVmZXIgdG8gbW91bnQgcG9pbnRzCisgICAgICAgICAgICAjCisgICAgICAgICAgICBkcml2ZSwgcGF0aCA9IG50cGF0aC5zcGxpdGRyaXZlKHN5cy5leGVjdXRhYmxlKQorICAgICAgICAgICAgd2l0aCBzdXBwb3J0LmNoYW5nZV9jd2Qob3MucGF0aC5kaXJuYW1lKHN5cy5leGVjdXRhYmxlKSk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShudHBhdGguaXNtb3VudChkcml2ZS5sb3dlcigpKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG50cGF0aC5pc21vdW50KGRyaXZlLnVwcGVyKCkpKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobnRwYXRoLmlzbW91bnQoIlxcXFxsb2NhbGhvc3RcXGMkIikpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobnRwYXRoLmlzbW91bnQoIlxcXFxsb2NhbGhvc3RcXGMkXFwiKSkKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG50cGF0aC5pc21vdW50KGIiXFxcXGxvY2FsaG9zdFxcYyQiKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShudHBhdGguaXNtb3VudChiIlxcXFxsb2NhbGhvc3RcXGMkXFwiKSkKIAogY2xhc3MgTnRDb21tb25UZXN0KHRlc3RfZ2VuZXJpY3BhdGguQ29tbW9uVGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgogICAgIHBhdGhtb2R1bGUgPSBudHBhdGgKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfb3BlbnB0eS5weSBiL0xpYi90ZXN0L3Rlc3Rfb3BlbnB0eS5weQppbmRleCA2Mzg0MzcwLi40Nzg1MTA3IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X29wZW5wdHkucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9vcGVucHR5LnB5CkBAIC00LDcgKzQsNyBAQAogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAogCiBpZiBub3QgaGFzYXR0cihvcywgIm9wZW5wdHkiKToKLSAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiTm8gb3BlbnB0eSgpIGF2YWlsYWJsZS4iKQorICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJvcy5vcGVucHR5KCkgbm90IGF2YWlsYWJsZS4iKQogCiAKIGNsYXNzIE9wZW5wdHlUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfb3BlcmF0b3IucHkgYi9MaWIvdGVzdC90ZXN0X29wZXJhdG9yLnB5CmluZGV4IGZhNjA4YjkuLmFiNThhOTggMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfb3BlcmF0b3IucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9vcGVyYXRvci5weQpAQCAtMSw4ICsxLDEwIEBACi1pbXBvcnQgb3BlcmF0b3IKIGltcG9ydCB1bml0dGVzdAogCiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIAorcHlfb3BlcmF0b3IgPSBzdXBwb3J0LmltcG9ydF9mcmVzaF9tb2R1bGUoJ29wZXJhdG9yJywgYmxvY2tlZD1bJ19vcGVyYXRvciddKQorY19vcGVyYXRvciA9IHN1cHBvcnQuaW1wb3J0X2ZyZXNoX21vZHVsZSgnb3BlcmF0b3InLCBmcmVzaD1bJ19vcGVyYXRvciddKQorCiBjbGFzcyBTZXExOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsc3QpOgogICAgICAgICBzZWxmLmxzdCA9IGxzdApAQCAtMzIsOCArMzQsOSBAQAogICAgICAgICByZXR1cm4gb3RoZXIgKiBzZWxmLmxzdAogCiAKLWNsYXNzIE9wZXJhdG9yVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorY2xhc3MgT3BlcmF0b3JUZXN0Q2FzZToKICAgICBkZWYgdGVzdF9sdChzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmx0KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmx0LCAxaiwgMmopCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3BlcmF0b3IubHQoMSwgMCkpCkBAIC00NCw2ICs0Nyw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5sdCgxLCAyLjApKQogCiAgICAgZGVmIHRlc3RfbGUoc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5sZSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5sZSwgMWosIDJqKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9wZXJhdG9yLmxlKDEsIDApKQpAQCAtNTQsNiArNTgsNyBAQAogICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IubGUoMSwgMi4wKSkKIAogICAgIGRlZiB0ZXN0X2VxKHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIGNsYXNzIEMob2JqZWN0KToKICAgICAgICAgICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgogICAgICAgICAgICAgICAgIHJhaXNlIFN5bnRheEVycm9yCkBAIC02Nyw2ICs3Miw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3BlcmF0b3IuZXEoMSwgMi4wKSkKIAogICAgIGRlZiB0ZXN0X25lKHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIGNsYXNzIEMob2JqZWN0KToKICAgICAgICAgICAgIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgogICAgICAgICAgICAgICAgIHJhaXNlIFN5bnRheEVycm9yCkBAIC04MCw2ICs4Niw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5uZSgxLCAyLjApKQogCiAgICAgZGVmIHRlc3RfZ2Uoc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5nZSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5nZSwgMWosIDJqKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IuZ2UoMSwgMCkpCkBAIC05MCw2ICs5Nyw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3BlcmF0b3IuZ2UoMSwgMi4wKSkKIAogICAgIGRlZiB0ZXN0X2d0KHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuZ3QpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuZ3QsIDFqLCAyaikKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmd0KDEsIDApKQpAQCAtMTAwLDIyICsxMDgsMjYgQEAKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcGVyYXRvci5ndCgxLCAyLjApKQogCiAgICAgZGVmIHRlc3RfYWJzKHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuYWJzKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmFicywgTm9uZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5hYnMoLTEpLCAxKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLmFicygxKSwgMSkKIAogICAgIGRlZiB0ZXN0X2FkZChzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmFkZCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5hZGQsIE5vbmUsIE5vbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5hZGQoMywgNCkgPT0gNykKIAogICAgIGRlZiB0ZXN0X2JpdHdpc2VfYW5kKHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuYW5kXykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5hbmRfLCBOb25lLCBOb25lKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IuYW5kXygweGYsIDB4YSkgPT0gMHhhKQogCiAgICAgZGVmIHRlc3RfY29uY2F0KHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuY29uY2F0KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmNvbmNhdCwgTm9uZSwgTm9uZSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmNvbmNhdCgncHknLCAndGhvbicpID09ICdweXRob24nKQpAQCAtMTI1LDEyICsxMzcsMTQgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5jb25jYXQsIDEzLCAyOSkKIAogICAgIGRlZiB0ZXN0X2NvdW50T2Yoc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5jb3VudE9mKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmNvdW50T2YsIE5vbmUsIE5vbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5jb3VudE9mKFsxLCAyLCAxLCAzLCAxLCA0XSwgMykgPT0gMSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmNvdW50T2YoWzEsIDIsIDEsIDMsIDEsIDRdLCA1KSA9PSAwKQogCiAgICAgZGVmIHRlc3RfZGVsaXRlbShzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQogICAgICAgICBhID0gWzQsIDMsIDIsIDFdCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuZGVsaXRlbSwgYSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5kZWxpdGVtLCBhLCBOb25lKQpAQCAtMTM4LDMzICsxNTIsMzkgQEAKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEgPT0gWzQsIDIsIDFdKQogCiAgICAgZGVmIHRlc3RfZmxvb3JkaXYoc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5mbG9vcmRpdiwgNSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5mbG9vcmRpdiwgTm9uZSwgTm9uZSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmZsb29yZGl2KDUsIDIpID09IDIpCiAKICAgICBkZWYgdGVzdF90cnVlZGl2KHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IudHJ1ZWRpdiwgNSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci50cnVlZGl2LCBOb25lLCBOb25lKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IudHJ1ZWRpdig1LCAyKSA9PSAyLjUpCiAKICAgICBkZWYgdGVzdF9nZXRpdGVtKHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIGEgPSByYW5nZSgxMCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5nZXRpdGVtKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmdldGl0ZW0sIGEsIE5vbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5nZXRpdGVtKGEsIDIpID09IDIpCiAKICAgICBkZWYgdGVzdF9pbmRleE9mKHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuaW5kZXhPZikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5pbmRleE9mLCBOb25lLCBOb25lKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IuaW5kZXhPZihbNCwgMywgMiwgMV0sIDMpID09IDEpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG9wZXJhdG9yLmluZGV4T2YsIFs0LCAzLCAyLCAxXSwgMCkKIAogICAgIGRlZiB0ZXN0X2ludmVydChzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmludmVydCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5pbnZlcnQsIE5vbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IuaW52KDQpLCAtNSkKIAogICAgIGRlZiB0ZXN0X2xzaGlmdChzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmxzaGlmdCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5sc2hpZnQsIE5vbmUsIDQyKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IubHNoaWZ0KDUsIDEpID09IDEwKQpAQCAtMTcyLDE2ICsxOTIsMTkgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgb3BlcmF0b3IubHNoaWZ0LCAyLCAtMSkKIAogICAgIGRlZiB0ZXN0X21vZChzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLm1vZCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5tb2QsIE5vbmUsIDQyKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IubW9kKDUsIDIpID09IDEpCiAKICAgICBkZWYgdGVzdF9tdWwoc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5tdWwpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IubXVsLCBOb25lLCBOb25lKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IubXVsKDUsIDIpID09IDEwKQogCiAgICAgZGVmIHRlc3RfbmVnKHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IubmVnKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLm5lZywgTm9uZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5uZWcoNSksIC01KQpAQCAtMTkwLDExICsyMTMsMTMgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5uZWcoLTApLCAwKQogCiAgICAgZGVmIHRlc3RfYml0d2lzZV9vcihzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLm9yXykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5vcl8sIE5vbmUsIE5vbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5vcl8oMHhhLCAweDUpID09IDB4ZikKIAogICAgIGRlZiB0ZXN0X3BvcyhzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLnBvcykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5wb3MsIE5vbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IucG9zKDUpLCA1KQpAQCAtMjAzLDE0ICsyMjgsMTUgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5wb3MoLTApLCAwKQogCiAgICAgZGVmIHRlc3RfcG93KHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IucG93KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLnBvdywgTm9uZSwgTm9uZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5wb3coMyw1KSwgMyoqNSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5fX3Bvd19fKDMsNSksIDMqKjUpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IucG93LCAxKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLnBvdywgMSwgMiwgMykKIAogICAgIGRlZiB0ZXN0X3JzaGlmdChzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLnJzaGlmdCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5yc2hpZnQsIE5vbmUsIDQyKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IucnNoaWZ0KDUsIDEpID09IDIpCkBAIC0yMTgsMTIgKzI0NCwxNCBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBvcGVyYXRvci5yc2hpZnQsIDIsIC0xKQogCiAgICAgZGVmIHRlc3RfY29udGFpbnMoc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5jb250YWlucykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5jb250YWlucywgTm9uZSwgTm9uZSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmNvbnRhaW5zKHJhbmdlKDQpLCAyKSkKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcGVyYXRvci5jb250YWlucyhyYW5nZSg0KSwgNSkpCiAKICAgICBkZWYgdGVzdF9zZXRpdGVtKHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIGEgPSBsaXN0KHJhbmdlKDMpKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLnNldGl0ZW0sIGEpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3Iuc2V0aXRlbSwgYSwgTm9uZSwgTm9uZSkKQEAgLTIzMiwxMSArMjYwLDEzIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIG9wZXJhdG9yLnNldGl0ZW0sIGEsIDQsIDIpCiAKICAgICBkZWYgdGVzdF9zdWIoc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5zdWIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3Iuc3ViLCBOb25lLCBOb25lKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3Iuc3ViKDUsIDIpID09IDMpCiAKICAgICBkZWYgdGVzdF90cnV0aChzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQogICAgICAgICBjbGFzcyBDKG9iamVjdCk6CiAgICAgICAgICAgICBkZWYgX19ib29sX18oc2VsZik6CiAgICAgICAgICAgICAgICAgcmFpc2UgU3ludGF4RXJyb3IKQEAgLTI0OCwxMSArMjc4LDEzIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3BlcmF0b3IudHJ1dGgoW10pKQogCiAgICAgZGVmIHRlc3RfYml0d2lzZV94b3Ioc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci54b3IpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IueG9yLCBOb25lLCBOb25lKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IueG9yKDB4YiwgMHhjKSA9PSAweDcpCiAKICAgICBkZWYgdGVzdF9pcyhzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQogICAgICAgICBhID0gYiA9ICd4eXpwZHEnCiAgICAgICAgIGMgPSBhWzozXSArIGJbMzpdCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuaXNfKQpAQCAtMjYwLDYgKzI5Miw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3BlcmF0b3IuaXNfKGEsYykpCiAKICAgICBkZWYgdGVzdF9pc19ub3Qoc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgYSA9IGIgPSAneHl6cGRxJwogICAgICAgICBjID0gYVs6M10gKyBiWzM6XQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmlzX25vdCkKQEAgLTI2Nyw2ICszMDAsNyBAQAogICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IuaXNfbm90KGEsYykpCiAKICAgICBkZWYgdGVzdF9hdHRyZ2V0dGVyKHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIGNsYXNzIEE6CiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGEgPSBBKCkKQEAgLTMxNiw2ICszNTAsNyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoYSksICgnYXJ0aHVyJywgJ3Rob21hcycsICdqb2huc29uJykpCiAKICAgICBkZWYgdGVzdF9pdGVtZ2V0dGVyKHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIGEgPSAnQUJDREUnCiAgICAgICAgIGYgPSBvcGVyYXRvci5pdGVtZ2V0dGVyKDIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZihhKSwgJ0MnKQpAQCAtMzUwLDEyICszODUsMTUgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5pdGVtZ2V0dGVyKDIsICd4JywgNSksIGRhdGEpCiAKICAgICBkZWYgdGVzdF9tZXRob2RjYWxsZXIoc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5tZXRob2RjYWxsZXIpCiAgICAgICAgIGNsYXNzIEE6CiAgICAgICAgICAgICBkZWYgZm9vKHNlbGYsICphcmdzLCAqKmt3ZHMpOgogICAgICAgICAgICAgICAgIHJldHVybiBhcmdzWzBdICsgYXJnc1sxXQogICAgICAgICAgICAgZGVmIGJhcihzZWxmLCBmPTQyKToKICAgICAgICAgICAgICAgICByZXR1cm4gZgorICAgICAgICAgICAgZGVmIGJheigqYXJncywgKiprd2RzKToKKyAgICAgICAgICAgICAgICByZXR1cm4ga3dkc1snbmFtZSddLCBrd2RzWydzZWxmJ10KICAgICAgICAgYSA9IEEoKQogICAgICAgICBmID0gb3BlcmF0b3IubWV0aG9kY2FsbGVyKCdmb28nKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCBmLCBhKQpAQCAtMzY2LDggKzQwNCwxMSBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGYsIGEsIGEpCiAgICAgICAgIGYgPSBvcGVyYXRvci5tZXRob2RjYWxsZXIoJ2JhcicsIGY9NSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKGEpLCA1KQorICAgICAgICBmID0gb3BlcmF0b3IubWV0aG9kY2FsbGVyKCdiYXonLCBuYW1lPSdzcGFtJywgc2VsZj0nZWdncycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZihhKSwgKCdzcGFtJywgJ2VnZ3MnKSkKIAogICAgIGRlZiB0ZXN0X2lucGxhY2Uoc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgY2xhc3MgQyhvYmplY3QpOgogICAgICAgICAgICAgZGVmIF9faWFkZF9fICAgICAoc2VsZiwgb3RoZXIpOiByZXR1cm4gImlhZGQiCiAgICAgICAgICAgICBkZWYgX19pYW5kX18gICAgIChzZWxmLCBvdGhlcik6IHJldHVybiAiaWFuZCIKQEAgLTM5NiwzNyArNDM3LDQ4IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IuaXRydWVkaXYgKGMsIDUpLCAiaXRydWVkaXYiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLml4b3IgICAgIChjLCA1KSwgIml4b3IiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLmljb25jYXQgIChjLCBjKSwgImlhZGQiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLl9faWFkZF9fICAgICAoYywgNSksICJpYWRkIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5fX2lhbmRfXyAgICAgKGMsIDUpLCAiaWFuZCIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IuX19pZmxvb3JkaXZfXyhjLCA1KSwgImlmbG9vcmRpdiIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IuX19pbHNoaWZ0X18gIChjLCA1KSwgImlsc2hpZnQiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLl9faW1vZF9fICAgICAoYywgNSksICJpbW9kIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5fX2ltdWxfXyAgICAgKGMsIDUpLCAiaW11bCIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IuX19pb3JfXyAgICAgIChjLCA1KSwgImlvciIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IuX19pcG93X18gICAgIChjLCA1KSwgImlwb3ciKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLl9faXJzaGlmdF9fICAoYywgNSksICJpcnNoaWZ0IikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5fX2lzdWJfXyAgICAgKGMsIDUpLCAiaXN1YiIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IuX19pdHJ1ZWRpdl9fIChjLCA1KSwgIml0cnVlZGl2IikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5fX2l4b3JfXyAgICAgKGMsIDUpLCAiaXhvciIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IuX19pY29uY2F0X18gIChjLCBjKSwgImlhZGQiKQogCi1kZWYgdGVzdF9tYWluKHZlcmJvc2U9Tm9uZSk6Ci0gICAgaW1wb3J0IHN5cwotICAgIHRlc3RfY2xhc3NlcyA9ICgKLSAgICAgICAgT3BlcmF0b3JUZXN0Q2FzZSwKLSAgICApCisgICAgZGVmIHRlc3RfbGVuZ3RoX2hpbnQoc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKKyAgICAgICAgY2xhc3MgWChvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlKToKKyAgICAgICAgICAgICAgICBzZWxmLnZhbHVlID0gdmFsdWUKIAotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KCp0ZXN0X2NsYXNzZXMpCisgICAgICAgICAgICBkZWYgX19sZW5ndGhfaGludF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIGlmIHR5cGUoc2VsZi52YWx1ZSkgaXMgdHlwZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2Ugc2VsZi52YWx1ZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnZhbHVlCiAKLSAgICAjIHZlcmlmeSByZWZlcmVuY2UgY291bnRpbmcKLSAgICBpZiB2ZXJib3NlIGFuZCBoYXNhdHRyKHN5cywgImdldHRvdGFscmVmY291bnQiKToKLSAgICAgICAgaW1wb3J0IGdjCi0gICAgICAgIGNvdW50cyA9IFtOb25lXSAqIDUKLSAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKGNvdW50cykpOgotICAgICAgICAgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoKnRlc3RfY2xhc3NlcykKLSAgICAgICAgICAgIGdjLmNvbGxlY3QoKQotICAgICAgICAgICAgY291bnRzW2ldID0gc3lzLmdldHRvdGFscmVmY291bnQoKQotICAgICAgICBwcmludChjb3VudHMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IubGVuZ3RoX2hpbnQoW10sIDIpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLmxlbmd0aF9oaW50KGl0ZXIoWzEsIDIsIDNdKSksIDMpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5sZW5ndGhfaGludChYKDIpKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5sZW5ndGhfaGludChYKE5vdEltcGxlbWVudGVkKSwgNCksIDQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IubGVuZ3RoX2hpbnQoWChUeXBlRXJyb3IpLCAxMiksIDEyKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBvcGVyYXRvci5sZW5ndGhfaGludChYKCJhYmMiKSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIG9wZXJhdG9yLmxlbmd0aF9oaW50KFgoLTIpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKExvb2t1cEVycm9yKToKKyAgICAgICAgICAgIG9wZXJhdG9yLmxlbmd0aF9oaW50KFgoTG9va3VwRXJyb3IpKQorCisgICAgZGVmIHRlc3RfZHVuZGVyX2lzX29yaWdpbmFsKHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCisKKyAgICAgICAgbmFtZXMgPSBbbmFtZSBmb3IgbmFtZSBpbiBkaXIob3BlcmF0b3IpIGlmIG5vdCBuYW1lLnN0YXJ0c3dpdGgoJ18nKV0KKyAgICAgICAgZm9yIG5hbWUgaW4gbmFtZXM6CisgICAgICAgICAgICBvcmlnID0gZ2V0YXR0cihvcGVyYXRvciwgbmFtZSkKKyAgICAgICAgICAgIGR1bmRlciA9IGdldGF0dHIob3BlcmF0b3IsICdfXycgKyBuYW1lLnN0cmlwKCdfJykgKyAnX18nLCBOb25lKQorICAgICAgICAgICAgaWYgZHVuZGVyOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoZHVuZGVyLCBvcmlnKQorCitjbGFzcyBQeU9wZXJhdG9yVGVzdENhc2UoT3BlcmF0b3JUZXN0Q2FzZSwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIG1vZHVsZSA9IHB5X29wZXJhdG9yCisKK0B1bml0dGVzdC5za2lwVW5sZXNzKGNfb3BlcmF0b3IsICdyZXF1aXJlcyBfb3BlcmF0b3InKQorY2xhc3MgQ09wZXJhdG9yVGVzdENhc2UoT3BlcmF0b3JUZXN0Q2FzZSwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIG1vZHVsZSA9IGNfb3BlcmF0b3IKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4odmVyYm9zZT1UcnVlKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9vcHRwYXJzZS5weSBiL0xpYi90ZXN0L3Rlc3Rfb3B0cGFyc2UucHkKaW5kZXggZWFlZTUwNC4uNzYyMWMyNCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9vcHRwYXJzZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X29wdHBhcnNlLnB5CkBAIC0zOTUsNiArMzk1LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5wYXJzZXIucmVtb3ZlX29wdGlvbiwgKCdmb28nLCksIE5vbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlRXJyb3IsICJubyBzdWNoIG9wdGlvbiAnZm9vJyIpCiAKKyAgICBAc3VwcG9ydC5pbXBsX2RldGFpbCgnUmVsaWVzIG9uIHN5cy5nZXRyZWZjb3VudCcsIGNweXRob249VHJ1ZSkKICAgICBkZWYgdGVzdF9yZWZsZWFrKHNlbGYpOgogICAgICAgICAjIElmIGFuIE9wdGlvblBhcnNlciBpcyBjYXJyeWluZyBhcm91bmQgYSByZWZlcmVuY2UgdG8gYSBsYXJnZQogICAgICAgICAjIG9iamVjdCwgdmFyaW91cyBjeWNsZXMgY2FuIHByZXZlbnQgaXQgZnJvbSBiZWluZyBHQydkIGluCkBAIC03MzAsNyArNzMxLDcgQEAKICAgICBkZWYgdGVzdF9zaG9ydF9hbmRfbG9uZ19vcHRpb25fc3BsaXQoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UGFyc2VPSyhbIi1hIiwgInh5eiIsICItLWZvbyIsICJiYXIiXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsnYSc6ICd4eXonLCAnYm9vJzogTm9uZSwgJ2Zvbyc6IFsiYmFyIl19LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgW10pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgW10pCiAKICAgICBkZWYgdGVzdF9zaG9ydF9vcHRpb25fc3BsaXRfbG9uZ19vcHRpb25fYXBwZW5kKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFBhcnNlT0soWyItLWZvbz1iYXIiLCAiLWIiLCAiMTIzIiwgIi0tZm9vIiwgImJheiJdLApAQCAtNzQwLDE1ICs3NDEsMTUgQEAKICAgICBkZWYgdGVzdF9zaG9ydF9vcHRpb25fc3BsaXRfb25lX3Bvc2l0aW9uYWxfYXJnKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFBhcnNlT0soWyItYSIsICJmb28iLCAiYmFyIl0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7J2EnOiAiZm9vIiwgJ2Jvbyc6IE5vbmUsICdmb28nOiBOb25lfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiYmFyIl0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJiYXIiXSkKIAogICAgIGRlZiB0ZXN0X3Nob3J0X29wdGlvbl9jb25zdW1lc19zZXBhcmF0b3Ioc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UGFyc2VPSyhbIi1hIiwgIi0tIiwgImZvbyIsICJiYXIiXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsnYSc6ICItLSIsICdib28nOiBOb25lLCAnZm9vJzogTm9uZX0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBbImZvbyIsICJiYXIiXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBbImZvbyIsICJiYXIiXSkKICAgICAgICAgc2VsZi5hc3NlcnRQYXJzZU9LKFsiLWEiLCAiLS0iLCAiLS1mb28iLCAiYmFyIl0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7J2EnOiAiLS0iLCAnYm9vJzogTm9uZSwgJ2Zvbyc6IFsiYmFyIl19LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgW10pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgW10pCiAKICAgICBkZWYgdGVzdF9zaG9ydF9vcHRpb25fam9pbmVkX2FuZF9zZXBhcmF0b3Ioc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UGFyc2VPSyhbIi1hYiIsICItLSIsICItLWZvbyIsICJiYXIiXSwKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfb3JkZXJlZF9kaWN0LnB5IGIvTGliL3Rlc3QvdGVzdF9vcmRlcmVkX2RpY3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQzZTMwOQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3Rfb3JkZXJlZF9kaWN0LnB5CkBAIC0wLDAgKzEsMzAyIEBACitpbXBvcnQgY29udGV4dGxpYgoraW1wb3J0IGNvcHkKK2ltcG9ydCBwaWNrbGUKK2Zyb20gcmFuZG9tIGltcG9ydCBzaHVmZmxlCitpbXBvcnQgc3lzCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gY29sbGVjdGlvbnMgaW1wb3J0IE9yZGVyZWREaWN0Citmcm9tIGNvbGxlY3Rpb25zLmFiYyBpbXBvcnQgTXV0YWJsZU1hcHBpbmcKK2Zyb20gdGVzdCBpbXBvcnQgbWFwcGluZ190ZXN0cywgc3VwcG9ydAorCisKK2NsYXNzIFRlc3RPcmRlcmVkRGljdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9pbml0KHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBPcmRlcmVkRGljdChbKCdhJywgMSksICgnYicsIDIpXSwgTm9uZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHRvbyBtYW55IGFyZ3MKKyAgICAgICAgcGFpcnMgPSBbKCdhJywgMSksICgnYicsIDIpLCAoJ2MnLCAzKSwgKCdkJywgNCksICgnZScsIDUpXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChPcmRlcmVkRGljdChkaWN0KHBhaXJzKSkuaXRlbXMoKSksIHBhaXJzKSAgICAgICAgICAgIyBkaWN0IGlucHV0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKE9yZGVyZWREaWN0KCoqZGljdChwYWlycykpLml0ZW1zKCkpLCBwYWlycykgICAgICAgICAjIGt3ZHMgaW5wdXQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KE9yZGVyZWREaWN0KHBhaXJzKS5pdGVtcygpKSwgcGFpcnMpICAgICAgICAgICAgICAgICAgICMgcGFpcnMgaW5wdXQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KE9yZGVyZWREaWN0KFsoJ2EnLCAxKSwgKCdiJywgMiksICgnYycsIDkpLCAoJ2QnLCA0KV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjPTMsIGU9NSkuaXRlbXMoKSksIHBhaXJzKSAgICAgICAgICAgICAgICAjIG1peGVkIGlucHV0CisKKyAgICAgICAgIyBtYWtlIHN1cmUgbm8gcG9zaXRpb25hbCBhcmdzIGNvbmZsaWN0IHdpdGggcG9zc2libGUga3dkYXJncworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoT3JkZXJlZERpY3Qoc2VsZj00MikuaXRlbXMoKSksIFsoJ3NlbGYnLCA0MildKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoT3JkZXJlZERpY3Qob3RoZXI9NDIpLml0ZW1zKCkpLCBbKCdvdGhlcicsIDQyKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgT3JkZXJlZERpY3QsIDQyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIE9yZGVyZWREaWN0LCAoKSwgKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgT3JkZXJlZERpY3QuX19pbml0X18pCisKKyAgICAgICAgIyBNYWtlIHN1cmUgdGhhdCBkaXJlY3QgY2FsbHMgdG8gX19pbml0X18gZG8gbm90IGNsZWFyIHByZXZpb3VzIGNvbnRlbnRzCisgICAgICAgIGQgPSBPcmRlcmVkRGljdChbKCdhJywgMSksICgnYicsIDIpLCAoJ2MnLCAzKSwgKCdkJywgNDQpLCAoJ2UnLCA1NSldKQorICAgICAgICBkLl9faW5pdF9fKFsoJ2UnLCA1KSwgKCdmJywgNildLCBnPTcsIGQ9NCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGQuaXRlbXMoKSksCisgICAgICAgICAgICBbKCdhJywgMSksICgnYicsIDIpLCAoJ2MnLCAzKSwgKCdkJywgNCksICgnZScsIDUpLCAoJ2YnLCA2KSwgKCdnJywgNyldKQorCisgICAgZGVmIHRlc3RfdXBkYXRlKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBPcmRlcmVkRGljdCgpLnVwZGF0ZShbKCdhJywgMSksICgnYicsIDIpXSwgTm9uZSkgICAgICAgICAgICAgICAgICAgICAgICAjIHRvbyBtYW55IGFyZ3MKKyAgICAgICAgcGFpcnMgPSBbKCdhJywgMSksICgnYicsIDIpLCAoJ2MnLCAzKSwgKCdkJywgNCksICgnZScsIDUpXQorICAgICAgICBvZCA9IE9yZGVyZWREaWN0KCkKKyAgICAgICAgb2QudXBkYXRlKGRpY3QocGFpcnMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChvZC5pdGVtcygpKSwgcGFpcnMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBkaWN0IGlucHV0CisgICAgICAgIG9kID0gT3JkZXJlZERpY3QoKQorICAgICAgICBvZC51cGRhdGUoKipkaWN0KHBhaXJzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQob2QuaXRlbXMoKSksIHBhaXJzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMga3dkcyBpbnB1dAorICAgICAgICBvZCA9IE9yZGVyZWREaWN0KCkKKyAgICAgICAgb2QudXBkYXRlKHBhaXJzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qob2QuaXRlbXMoKSksIHBhaXJzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBwYWlycyBpbnB1dAorICAgICAgICBvZCA9IE9yZGVyZWREaWN0KCkKKyAgICAgICAgb2QudXBkYXRlKFsoJ2EnLCAxKSwgKCdiJywgMiksICgnYycsIDkpLCAoJ2QnLCA0KV0sIGM9MywgZT01KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qob2QuaXRlbXMoKSksIHBhaXJzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBtaXhlZCBpbnB1dAorCisgICAgICAgICMgSXNzdWUgOTEzNzogTmFtZWQgYXJndW1lbnQgY2FsbGVkICdvdGhlcicgb3IgJ3NlbGYnCisgICAgICAgICMgc2hvdWxkbid0IGJlIHRyZWF0ZWQgc3BlY2lhbGx5LgorICAgICAgICBvZCA9IE9yZGVyZWREaWN0KCkKKyAgICAgICAgb2QudXBkYXRlKHNlbGY9MjMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChvZC5pdGVtcygpKSwgWygnc2VsZicsIDIzKV0pCisgICAgICAgIG9kID0gT3JkZXJlZERpY3QoKQorICAgICAgICBvZC51cGRhdGUob3RoZXI9e30pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChvZC5pdGVtcygpKSwgWygnb3RoZXInLCB7fSldKQorICAgICAgICBvZCA9IE9yZGVyZWREaWN0KCkKKyAgICAgICAgb2QudXBkYXRlKHJlZD01LCBibHVlPTYsIG90aGVyPTcsIHNlbGY9OCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQobGlzdChvZC5pdGVtcygpKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgWygnYmx1ZScsIDYpLCAoJ290aGVyJywgNyksICgncmVkJywgNSksICgnc2VsZicsIDgpXSkKKworICAgICAgICAjIE1ha2Ugc3VyZSB0aGF0IGRpcmVjdCBjYWxscyB0byB1cGRhdGUgZG8gbm90IGNsZWFyIHByZXZpb3VzIGNvbnRlbnRzCisgICAgICAgICMgYWRkIHRoYXQgdXBkYXRlcyBpdGVtcyBhcmUgbm90IG1vdmVkIHRvIHRoZSBlbmQKKyAgICAgICAgZCA9IE9yZGVyZWREaWN0KFsoJ2EnLCAxKSwgKCdiJywgMiksICgnYycsIDMpLCAoJ2QnLCA0NCksICgnZScsIDU1KV0pCisgICAgICAgIGQudXBkYXRlKFsoJ2UnLCA1KSwgKCdmJywgNildLCBnPTcsIGQ9NCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGQuaXRlbXMoKSksCisgICAgICAgICAgICBbKCdhJywgMSksICgnYicsIDIpLCAoJ2MnLCAzKSwgKCdkJywgNCksICgnZScsIDUpLCAoJ2YnLCA2KSwgKCdnJywgNyldKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgT3JkZXJlZERpY3QoKS51cGRhdGUsIDQyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIE9yZGVyZWREaWN0KCkudXBkYXRlLCAoKSwgKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgT3JkZXJlZERpY3QudXBkYXRlKQorCisgICAgZGVmIHRlc3RfYWJjKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoT3JkZXJlZERpY3QoKSwgTXV0YWJsZU1hcHBpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKE9yZGVyZWREaWN0LCBNdXRhYmxlTWFwcGluZykpCisKKyAgICBkZWYgdGVzdF9jbGVhcihzZWxmKToKKyAgICAgICAgcGFpcnMgPSBbKCdjJywgMSksICgnYicsIDIpLCAoJ2EnLCAzKSwgKCdkJywgNCksICgnZScsIDUpLCAoJ2YnLCA2KV0KKyAgICAgICAgc2h1ZmZsZShwYWlycykKKyAgICAgICAgb2QgPSBPcmRlcmVkRGljdChwYWlycykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ob2QpLCBsZW4ocGFpcnMpKQorICAgICAgICBvZC5jbGVhcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG9kKSwgMCkKKworICAgIGRlZiB0ZXN0X2RlbGl0ZW0oc2VsZik6CisgICAgICAgIHBhaXJzID0gWygnYycsIDEpLCAoJ2InLCAyKSwgKCdhJywgMyksICgnZCcsIDQpLCAoJ2UnLCA1KSwgKCdmJywgNildCisgICAgICAgIG9kID0gT3JkZXJlZERpY3QocGFpcnMpCisgICAgICAgIGRlbCBvZFsnYSddCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ2EnLCBvZCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvcik6CisgICAgICAgICAgICBkZWwgb2RbJ2EnXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qob2QuaXRlbXMoKSksIHBhaXJzWzoyXSArIHBhaXJzWzM6XSkKKworICAgIGRlZiB0ZXN0X3NldGl0ZW0oc2VsZik6CisgICAgICAgIG9kID0gT3JkZXJlZERpY3QoWygnZCcsIDEpLCAoJ2InLCAyKSwgKCdjJywgMyksICgnYScsIDQpLCAoJ2UnLCA1KV0pCisgICAgICAgIG9kWydjJ10gPSAxMCAgICAgICAgICAgIyBleGlzdGluZyBlbGVtZW50CisgICAgICAgIG9kWydmJ10gPSAyMCAgICAgICAgICAgIyBuZXcgZWxlbWVudAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qob2QuaXRlbXMoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgWygnZCcsIDEpLCAoJ2InLCAyKSwgKCdjJywgMTApLCAoJ2EnLCA0KSwgKCdlJywgNSksICgnZicsIDIwKV0pCisKKyAgICBkZWYgdGVzdF9pdGVyYXRvcnMoc2VsZik6CisgICAgICAgIHBhaXJzID0gWygnYycsIDEpLCAoJ2InLCAyKSwgKCdhJywgMyksICgnZCcsIDQpLCAoJ2UnLCA1KSwgKCdmJywgNildCisgICAgICAgIHNodWZmbGUocGFpcnMpCisgICAgICAgIG9kID0gT3JkZXJlZERpY3QocGFpcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChvZCksIFt0WzBdIGZvciB0IGluIHBhaXJzXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG9kLmtleXMoKSksIFt0WzBdIGZvciB0IGluIHBhaXJzXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG9kLnZhbHVlcygpKSwgW3RbMV0gZm9yIHQgaW4gcGFpcnNdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qob2QuaXRlbXMoKSksIHBhaXJzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QocmV2ZXJzZWQob2QpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbdFswXSBmb3IgdCBpbiByZXZlcnNlZChwYWlycyldKQorCisgICAgZGVmIHRlc3RfcG9waXRlbShzZWxmKToKKyAgICAgICAgcGFpcnMgPSBbKCdjJywgMSksICgnYicsIDIpLCAoJ2EnLCAzKSwgKCdkJywgNCksICgnZScsIDUpLCAoJ2YnLCA2KV0KKyAgICAgICAgc2h1ZmZsZShwYWlycykKKyAgICAgICAgb2QgPSBPcmRlcmVkRGljdChwYWlycykKKyAgICAgICAgd2hpbGUgcGFpcnM6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9kLnBvcGl0ZW0oKSwgcGFpcnMucG9wKCkpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IpOgorICAgICAgICAgICAgb2QucG9waXRlbSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG9kKSwgMCkKKworICAgIGRlZiB0ZXN0X3BvcChzZWxmKToKKyAgICAgICAgcGFpcnMgPSBbKCdjJywgMSksICgnYicsIDIpLCAoJ2EnLCAzKSwgKCdkJywgNCksICgnZScsIDUpLCAoJ2YnLCA2KV0KKyAgICAgICAgc2h1ZmZsZShwYWlycykKKyAgICAgICAgb2QgPSBPcmRlcmVkRGljdChwYWlycykKKyAgICAgICAgc2h1ZmZsZShwYWlycykKKyAgICAgICAgd2hpbGUgcGFpcnM6CisgICAgICAgICAgICBrLCB2ID0gcGFpcnMucG9wKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2QucG9wKGspLCB2KQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yKToKKyAgICAgICAgICAgIG9kLnBvcCgneHl6JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ob2QpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9kLnBvcChrLCAxMjM0NSksIDEyMzQ1KQorCisgICAgICAgICMgbWFrZSBzdXJlIHBvcCBzdGlsbCB3b3JrcyB3aGVuIF9fbWlzc2luZ19fIGlzIGRlZmluZWQKKyAgICAgICAgY2xhc3MgTWlzc2luZyhPcmRlcmVkRGljdCk6CisgICAgICAgICAgICBkZWYgX19taXNzaW5nX18oc2VsZiwga2V5KToKKyAgICAgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICBtID0gTWlzc2luZyhhPTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5wb3AoJ2InLCA1KSwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLnBvcCgnYScsIDYpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0ucG9wKCdhJywgNiksIDYpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IpOgorICAgICAgICAgICAgbS5wb3AoJ2EnKQorCisgICAgZGVmIHRlc3RfZXF1YWxpdHkoc2VsZik6CisgICAgICAgIHBhaXJzID0gWygnYycsIDEpLCAoJ2InLCAyKSwgKCdhJywgMyksICgnZCcsIDQpLCAoJ2UnLCA1KSwgKCdmJywgNildCisgICAgICAgIHNodWZmbGUocGFpcnMpCisgICAgICAgIG9kMSA9IE9yZGVyZWREaWN0KHBhaXJzKQorICAgICAgICBvZDIgPSBPcmRlcmVkRGljdChwYWlycykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvZDEsIG9kMikgICAgICAgICAgIyBzYW1lIG9yZGVyIGltcGxpZXMgZXF1YWxpdHkKKyAgICAgICAgcGFpcnMgPSBwYWlyc1syOl0gKyBwYWlyc1s6Ml0KKyAgICAgICAgb2QyID0gT3JkZXJlZERpY3QocGFpcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwob2QxLCBvZDIpICAgICAgICMgZGlmZmVyZW50IG9yZGVyIGltcGxpZXMgaW5lcXVhbGl0eQorICAgICAgICAjIGNvbXBhcmlzb24gdG8gcmVndWxhciBkaWN0IGlzIG5vdCBvcmRlciBzZW5zaXRpdmUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvZDEsIGRpY3Qob2QyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWN0KG9kMiksIG9kMSkKKyAgICAgICAgIyBkaWZmZXJlbnQgbGVuZ3RoIGltcGxpZWQgaW5lcXVhbGl0eQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKG9kMSwgT3JkZXJlZERpY3QocGFpcnNbOi0xXSkpCisKKyAgICBkZWYgdGVzdF9jb3B5aW5nKHNlbGYpOgorICAgICAgICAjIENoZWNrIHRoYXQgb3JkZXJlZCBkaWN0cyBhcmUgY29weWFibGUsIGRlZXBjb3B5YWJsZSwgcGlja2xhYmxlLAorICAgICAgICAjIGFuZCBoYXZlIGEgcmVwci9ldmFsIHJvdW5kLXRyaXAKKyAgICAgICAgcGFpcnMgPSBbKCdjJywgMSksICgnYicsIDIpLCAoJ2EnLCAzKSwgKCdkJywgNCksICgnZScsIDUpLCAoJ2YnLCA2KV0KKyAgICAgICAgb2QgPSBPcmRlcmVkRGljdChwYWlycykKKyAgICAgICAgZGVmIGNoZWNrKGR1cCk6CisgICAgICAgICAgICBtc2cgPSAiXG5jb3B5OiAlc1xub2Q6ICVzIiAlIChkdXAsIG9kKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdChkdXAsIG9kLCBtc2cpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR1cCwgb2QpCisgICAgICAgIGNoZWNrKG9kLmNvcHkoKSkKKyAgICAgICAgY2hlY2soY29weS5jb3B5KG9kKSkKKyAgICAgICAgY2hlY2soY29weS5kZWVwY29weShvZCkpCisgICAgICAgIGZvciBwcm90byBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QocHJvdG89cHJvdG8pOgorICAgICAgICAgICAgICAgIGNoZWNrKHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMob2QsIHByb3RvKSkpCisgICAgICAgIGNoZWNrKGV2YWwocmVwcihvZCkpKQorICAgICAgICB1cGRhdGVfdGVzdCA9IE9yZGVyZWREaWN0KCkKKyAgICAgICAgdXBkYXRlX3Rlc3QudXBkYXRlKG9kKQorICAgICAgICBjaGVjayh1cGRhdGVfdGVzdCkKKyAgICAgICAgY2hlY2soT3JkZXJlZERpY3Qob2QpKQorCisgICAgZGVmIHRlc3RfeWFtbF9saW5rYWdlKHNlbGYpOgorICAgICAgICAjIFZlcmlmeSB0aGF0IF9fcmVkdWNlX18gaXMgc2V0dXAgaW4gYSB3YXkgdGhhdCBzdXBwb3J0cyBQeVlBTUwncyBkdW1wKCkgZmVhdHVyZS4KKyAgICAgICAgIyBJbiB5YW1sLCBsaXN0cyBhcmUgbmF0aXZlIGJ1dCB0dXBsZXMgYXJlIG5vdC4KKyAgICAgICAgcGFpcnMgPSBbKCdjJywgMSksICgnYicsIDIpLCAoJ2EnLCAzKSwgKCdkJywgNCksICgnZScsIDUpLCAoJ2YnLCA2KV0KKyAgICAgICAgb2QgPSBPcmRlcmVkRGljdChwYWlycykKKyAgICAgICAgIyB5YW1sLmR1bXAob2QpIC0tPgorICAgICAgICAjICchIXB5dGhvbi9vYmplY3QvYXBwbHk6X19tYWluX18uT3JkZXJlZERpY3Rcbi0gLSBbYSwgMV1cbiAgLSBbYiwgMl1cbicKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFsbCh0eXBlKHBhaXIpPT1saXN0IGZvciBwYWlyIGluIG9kLl9fcmVkdWNlX18oKVsxXSkpCisKKyAgICBkZWYgdGVzdF9yZWR1Y2Vfbm90X3Rvb19mYXQoc2VsZik6CisgICAgICAgICMgZG8gbm90IHNhdmUgaW5zdGFuY2UgZGljdGlvbmFyeSBpZiBub3QgbmVlZGVkCisgICAgICAgIHBhaXJzID0gWygnYycsIDEpLCAoJ2InLCAyKSwgKCdhJywgMyksICgnZCcsIDQpLCAoJ2UnLCA1KSwgKCdmJywgNildCisgICAgICAgIG9kID0gT3JkZXJlZERpY3QocGFpcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKG9kLl9fcmVkdWNlX18oKVsyXSkKKyAgICAgICAgb2QueCA9IDEwCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKG9kLl9fcmVkdWNlX18oKVsyXSkKKworICAgIGRlZiB0ZXN0X3BpY2tsZV9yZWN1cnNpdmUoc2VsZik6CisgICAgICAgIG9kID0gT3JkZXJlZERpY3QoKQorICAgICAgICBvZFsxXSA9IG9kCisgICAgICAgIGZvciBwcm90byBpbiByYW5nZSgtMSwgcGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIGR1cCA9IHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMob2QsIHByb3RvKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QoZHVwLCBvZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChkdXAua2V5cygpKSwgWzFdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhkdXBbMV0sIGR1cCkKKworICAgIGRlZiB0ZXN0X3JlcHIoc2VsZik6CisgICAgICAgIG9kID0gT3JkZXJlZERpY3QoWygnYycsIDEpLCAoJ2InLCAyKSwgKCdhJywgMyksICgnZCcsIDQpLCAoJ2UnLCA1KSwgKCdmJywgNildKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIob2QpLAorICAgICAgICAgICAgIk9yZGVyZWREaWN0KFsoJ2MnLCAxKSwgKCdiJywgMiksICgnYScsIDMpLCAoJ2QnLCA0KSwgKCdlJywgNSksICgnZicsIDYpXSkiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwocmVwcihvZCkpLCBvZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKE9yZGVyZWREaWN0KCkpLCAiT3JkZXJlZERpY3QoKSIpCisKKyAgICBkZWYgdGVzdF9yZXByX3JlY3Vyc2l2ZShzZWxmKToKKyAgICAgICAgIyBTZWUgaXNzdWUgIzk4MjYKKyAgICAgICAgb2QgPSBPcmRlcmVkRGljdC5mcm9ta2V5cygnYWJjJykKKyAgICAgICAgb2RbJ3gnXSA9IG9kCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihvZCksCisgICAgICAgICAgICAiT3JkZXJlZERpY3QoWygnYScsIE5vbmUpLCAoJ2InLCBOb25lKSwgKCdjJywgTm9uZSksICgneCcsIC4uLildKSIpCisKKyAgICBkZWYgdGVzdF9zZXRkZWZhdWx0KHNlbGYpOgorICAgICAgICBwYWlycyA9IFsoJ2MnLCAxKSwgKCdiJywgMiksICgnYScsIDMpLCAoJ2QnLCA0KSwgKCdlJywgNSksICgnZicsIDYpXQorICAgICAgICBzaHVmZmxlKHBhaXJzKQorICAgICAgICBvZCA9IE9yZGVyZWREaWN0KHBhaXJzKQorICAgICAgICBwYWlyX29yZGVyID0gbGlzdChvZC5pdGVtcygpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9kLnNldGRlZmF1bHQoJ2EnLCAxMCksIDMpCisgICAgICAgICMgbWFrZSBzdXJlIG9yZGVyIGRpZG4ndCBjaGFuZ2UKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG9kLml0ZW1zKCkpLCBwYWlyX29yZGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9kLnNldGRlZmF1bHQoJ3gnLCAxMCksIDEwKQorICAgICAgICAjIG1ha2Ugc3VyZSAneCcgaXMgYWRkZWQgdG8gdGhlIGVuZAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qob2QuaXRlbXMoKSlbLTFdLCAoJ3gnLCAxMCkpCisKKyAgICAgICAgIyBtYWtlIHN1cmUgc2V0ZGVmYXVsdCBzdGlsbCB3b3JrcyB3aGVuIF9fbWlzc2luZ19fIGlzIGRlZmluZWQKKyAgICAgICAgY2xhc3MgTWlzc2luZyhPcmRlcmVkRGljdCk6CisgICAgICAgICAgICBkZWYgX19taXNzaW5nX18oc2VsZiwga2V5KToKKyAgICAgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE1pc3NpbmcoKS5zZXRkZWZhdWx0KDUsIDkpLCA5KQorCisgICAgZGVmIHRlc3RfcmVpbnNlcnQoc2VsZik6CisgICAgICAgICMgR2l2ZW4gaW5zZXJ0IGEsIGluc2VydCBiLCBkZWxldGUgYSwgcmUtaW5zZXJ0IGEsCisgICAgICAgICMgdmVyaWZ5IHRoYXQgYSBpcyBub3cgbGF0ZXIgdGhhbiBiLgorICAgICAgICBvZCA9IE9yZGVyZWREaWN0KCkKKyAgICAgICAgb2RbJ2EnXSA9IDEKKyAgICAgICAgb2RbJ2InXSA9IDIKKyAgICAgICAgZGVsIG9kWydhJ10KKyAgICAgICAgb2RbJ2EnXSA9IDEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG9kLml0ZW1zKCkpLCBbKCdiJywgMiksICgnYScsIDEpXSkKKworICAgIGRlZiB0ZXN0X21vdmVfdG9fZW5kKHNlbGYpOgorICAgICAgICBvZCA9IE9yZGVyZWREaWN0LmZyb21rZXlzKCdhYmNkZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChvZCksIGxpc3QoJ2FiY2RlJykpCisgICAgICAgIG9kLm1vdmVfdG9fZW5kKCdjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG9kKSwgbGlzdCgnYWJkZWMnKSkKKyAgICAgICAgb2QubW92ZV90b19lbmQoJ2MnLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qob2QpLCBsaXN0KCdjYWJkZScpKQorICAgICAgICBvZC5tb3ZlX3RvX2VuZCgnYycsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChvZCksIGxpc3QoJ2NhYmRlJykpCisgICAgICAgIG9kLm1vdmVfdG9fZW5kKCdlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG9kKSwgbGlzdCgnY2FiZGUnKSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvcik6CisgICAgICAgICAgICBvZC5tb3ZlX3RvX2VuZCgneCcpCisKKyAgICBkZWYgdGVzdF9zaXplb2Yoc2VsZik6CisgICAgICAgICMgV2ltcHkgdGVzdDogSnVzdCB2ZXJpZnkgdGhlIHJlcG9ydGVkIHNpemUgaXMgbGFyZ2VyIHRoYW4gYSByZWd1bGFyIGRpY3QKKyAgICAgICAgZCA9IGRpY3QoYT0xKQorICAgICAgICBvZCA9IE9yZGVyZWREaWN0KCoqZCkKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKHN5cy5nZXRzaXplb2Yob2QpLCBzeXMuZ2V0c2l6ZW9mKGQpKQorCisgICAgZGVmIHRlc3Rfb3ZlcnJpZGVfdXBkYXRlKHNlbGYpOgorICAgICAgICAjIFZlcmlmeSB0aGF0IHN1YmNsYXNzZXMgY2FuIG92ZXJyaWRlIHVwZGF0ZSgpIHdpdGhvdXQgYnJlYWtpbmcgX19pbml0X18oKQorICAgICAgICBjbGFzcyBNeU9EKE9yZGVyZWREaWN0KToKKyAgICAgICAgICAgIGRlZiB1cGRhdGUoc2VsZiwgKmFyZ3MsICoqa3dkcyk6CisgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCkKKyAgICAgICAgaXRlbXMgPSBbKCdhJywgMSksICgnYycsIDMpLCAoJ2InLCAyKV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KE15T0QoaXRlbXMpLml0ZW1zKCkpLCBpdGVtcykKKworY2xhc3MgR2VuZXJhbE1hcHBpbmdUZXN0cyhtYXBwaW5nX3Rlc3RzLkJhc2ljVGVzdE1hcHBpbmdQcm90b2NvbCk6CisgICAgdHlwZTJ0ZXN0ID0gT3JkZXJlZERpY3QKKworICAgIGRlZiB0ZXN0X3BvcGl0ZW0oc2VsZik6CisgICAgICAgIGQgPSBzZWxmLl9lbXB0eV9tYXBwaW5nKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIGQucG9waXRlbSkKKworY2xhc3MgTXlPcmRlcmVkRGljdChPcmRlcmVkRGljdCk6CisgICAgcGFzcworCitjbGFzcyBTdWJjbGFzc01hcHBpbmdUZXN0cyhtYXBwaW5nX3Rlc3RzLkJhc2ljVGVzdE1hcHBpbmdQcm90b2NvbCk6CisgICAgdHlwZTJ0ZXN0ID0gTXlPcmRlcmVkRGljdAorCisgICAgZGVmIHRlc3RfcG9waXRlbShzZWxmKToKKyAgICAgICAgZCA9IHNlbGYuX2VtcHR5X21hcHBpbmcoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgZC5wb3BpdGVtKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X29zLnB5IGIvTGliL3Rlc3QvdGVzdF9vcy5weQppbmRleCA1NjMwOWJmLi5lMjliMGQ1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X29zLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfb3MucHkKQEAgLTIsMjggKzIsMzIgQEAKICMgZG9lcyBhZGQgdGVzdHMgZm9yIGEgZmV3IGZ1bmN0aW9ucyB3aGljaCBoYXZlIGJlZW4gZGV0ZXJtaW5lZCB0byBiZSBtb3JlCiAjIHBvcnRhYmxlIHRoYW4gdGhleSBoYWQgYmVlbiB0aG91Z2h0IHRvIGJlLgogCi1pbXBvcnQgb3MKLWltcG9ydCBlcnJubwotaW1wb3J0IHVuaXR0ZXN0Ci1pbXBvcnQgd2FybmluZ3MKLWltcG9ydCBzeXMKLWltcG9ydCBzaWduYWwKLWltcG9ydCBzdWJwcm9jZXNzCi1pbXBvcnQgdGltZQotaW1wb3J0IHNodXRpbAotZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CitpbXBvcnQgYXN5bmNoYXQKK2ltcG9ydCBhc3luY29yZQoraW1wb3J0IGNvZGVjcwogaW1wb3J0IGNvbnRleHRsaWIKK2ltcG9ydCBkZWNpbWFsCitpbXBvcnQgZXJybm8KK2ltcG9ydCBmcmFjdGlvbnMKK2ltcG9ydCBpdGVydG9vbHMKK2ltcG9ydCBsb2NhbGUKIGltcG9ydCBtbWFwCitpbXBvcnQgb3MKK2ltcG9ydCBwaWNrbGUKIGltcG9ydCBwbGF0Zm9ybQogaW1wb3J0IHJlCi1pbXBvcnQgdXVpZAotaW1wb3J0IGFzeW5jb3JlCi1pbXBvcnQgYXN5bmNoYXQKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCBzaWduYWwKIGltcG9ydCBzb2NrZXQKLWltcG9ydCBpdGVydG9vbHMKIGltcG9ydCBzdGF0Ci1pbXBvcnQgbG9jYWxlCi1pbXBvcnQgY29kZWNzCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHN5cworaW1wb3J0IHN5c2NvbmZpZworaW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHV1aWQKK2ltcG9ydCB3YXJuaW5ncworZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiB0cnk6CiAgICAgaW1wb3J0IHRocmVhZGluZwogZXhjZXB0IEltcG9ydEVycm9yOgpAQCAtMzIsMTkgKzM2LDEzIEBACiAgICAgaW1wb3J0IHJlc291cmNlCiBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgcmVzb3VyY2UgPSBOb25lCit0cnk6CisgICAgaW1wb3J0IGZjbnRsCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgZmNudGwgPSBOb25lCiAKIGZyb20gdGVzdC5zY3JpcHRfaGVscGVyIGltcG9ydCBhc3NlcnRfcHl0aG9uX29rCiAKLXdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKLSAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoImlnbm9yZSIsIERlcHJlY2F0aW9uV2FybmluZykKLSAgICBvcy5zdGF0X2Zsb2F0X3RpbWVzKFRydWUpCi1zdCA9IG9zLnN0YXQoX19maWxlX18pCi1zdGF0X3N1cHBvcnRzX3N1YnNlY29uZCA9ICgKLSAgICAjIGNoZWNrIGlmIGZsb2F0IGFuZCBpbnQgdGltZXN0YW1wcyBhcmUgZGlmZmVyZW50Ci0gICAgKHN0LnN0X2F0aW1lICE9IHN0WzddKQotICAgIG9yIChzdC5zdF9tdGltZSAhPSBzdFs4XSkKLSAgICBvciAoc3Quc3RfY3RpbWUgIT0gc3RbOV0pKQotCiAjIERldGVjdCB3aGV0aGVyIHdlJ3JlIG9uIGEgTGludXggc3lzdGVtIHRoYXQgdXNlcyB0aGUgKG5vdyBvdXRkYXRlZAogIyBhbmQgdW5tYWludGFpbmVkKSBsaW51eHRocmVhZHMgdGhyZWFkaW5nIGxpYnJhcnkuICBUaGVyZSdzIGFuIGlzc3VlCiAjIHdoZW4gY29tYmluaW5nIGxpbnV4dGhyZWFkcyB3aXRoIGEgZmFpbGVkIGV4ZWN2IGNhbGw6IHNlZQpAQCAtNjAsNyArNTgsNyBAQAogIyBUZXN0cyBjcmVhdGluZyBURVNURk4KIGNsYXNzIEZpbGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHNldFVwKHNlbGYpOgotICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzdXBwb3J0LlRFU1RGTik6CisgICAgICAgIGlmIG9zLnBhdGgubGV4aXN0cyhzdXBwb3J0LlRFU1RGTik6CiAgICAgICAgICAgICBvcy51bmxpbmsoc3VwcG9ydC5URVNURk4pCiAgICAgdGVhckRvd24gPSBzZXRVcAogCkBAIC0xNjQsNiArMTYyLDE5IEBACiAgICAgICAgIHdpdGggb3BlbihURVNURk4yLCAncicpIGFzIGY6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCAiMSIpCiAKKyAgICBkZWYgdGVzdF9vcGVuX2tleXdvcmRzKHNlbGYpOgorICAgICAgICBmID0gb3Mub3BlbihwYXRoPV9fZmlsZV9fLCBmbGFncz1vcy5PX1JET05MWSwgbW9kZT0wbzc3NywKKyAgICAgICAgICAgIGRpcl9mZD1Ob25lKQorICAgICAgICBvcy5jbG9zZShmKQorCisgICAgZGVmIHRlc3Rfc3ltbGlua19rZXl3b3JkcyhzZWxmKToKKyAgICAgICAgc3ltbGluayA9IHN1cHBvcnQuZ2V0X2F0dHJpYnV0ZShvcywgInN5bWxpbmsiKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzeW1saW5rKHNyYz0ndGFyZ2V0JywgZHN0PXN1cHBvcnQuVEVTVEZOLAorICAgICAgICAgICAgICAgIHRhcmdldF9pc19kaXJlY3Rvcnk9RmFsc2UsIGRpcl9mZD1Ob25lKQorICAgICAgICBleGNlcHQgKE5vdEltcGxlbWVudGVkRXJyb3IsIE9TRXJyb3IpOgorICAgICAgICAgICAgcGFzcyAgIyBObyBPUyBzdXBwb3J0IG9yIHVucHJpdmlsZWdlZCB1c2VyCisKIAogIyBUZXN0IGF0dHJpYnV0ZXMgb24gcmV0dXJuIHZhbHVlcyBmcm9tIG9zLipzdGF0KiBmYW1pbHkuCiBjbGFzcyBTdGF0QXR0cmlidXRlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtMjU2LDYgKzI2NywxNiBAQAogICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCJpZ25vcmUiLCBEZXByZWNhdGlvbldhcm5pbmcpCiAgICAgICAgICAgICBzZWxmLmNoZWNrX3N0YXRfYXR0cmlidXRlcyhmbmFtZSkKIAorICAgIGRlZiB0ZXN0X3N0YXRfcmVzdWx0X3BpY2tsZShzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gb3Muc3RhdChzZWxmLmZuYW1lKQorICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIHAgPSBwaWNrbGUuZHVtcHMocmVzdWx0LCBwcm90bykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oYidzdGF0X3Jlc3VsdCcsIHApCisgICAgICAgICAgICBpZiBwcm90byA8IDQ6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihiJ2Nvc1xuc3RhdF9yZXN1bHRcbicsIHApCisgICAgICAgICAgICB1bnBpY2tsZWQgPSBwaWNrbGUubG9hZHMocCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCB1bnBpY2tsZWQpCisKICAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKG9zLCAnc3RhdHZmcycpLCAndGVzdCBuZWVkcyBvcy5zdGF0dmZzKCknKQogICAgIGRlZiB0ZXN0X3N0YXR2ZnNfYXR0cmlidXRlcyhzZWxmKToKICAgICAgICAgdHJ5OgpAQCAtMjYzLDcgKzI4NCw3IEBACiAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICAjIE9uIEF0aGVPUywgZ2xpYmMgYWx3YXlzIHJldHVybnMgRU5PU1lTCiAgICAgICAgICAgICBpZiBlLmVycm5vID09IGVycm5vLkVOT1NZUzoKLSAgICAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCdnbGliYyBhbHdheXMgcmV0dXJucyBFTk9TWVMgb24gQXRoZU9TJykKKyAgICAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCdvcy5zdGF0dmZzKCkgZmFpbGVkIHdpdGggRU5PU1lTJykKIAogICAgICAgICAjIE1ha2Ugc3VyZSBkaXJlY3QgYWNjZXNzIHdvcmtzCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LmZfYmZyZWUsIHJlc3VsdFszXSkKQEAgLTMwMCwxODcgKzMyMSwzMiBAQAogICAgICAgICBleGNlcHQgVHlwZUVycm9yOgogICAgICAgICAgICAgcGFzcwogCi0gICAgZGVmIHRlc3RfdXRpbWVfZGlyKHNlbGYpOgotICAgICAgICBkZWx0YSA9IDEwMDAwMDAKLSAgICAgICAgc3QgPSBvcy5zdGF0KHN1cHBvcnQuVEVTVEZOKQotICAgICAgICAjIHJvdW5kIHRvIGludCwgYmVjYXVzZSBzb21lIHN5c3RlbXMgbWF5IHN1cHBvcnQgc3ViLXNlY29uZAotICAgICAgICAjIHRpbWUgc3RhbXBzIGluIHN0YXQsIGJ1dCBub3QgaW4gdXRpbWUuCi0gICAgICAgIG9zLnV0aW1lKHN1cHBvcnQuVEVTVEZOLCAoc3Quc3RfYXRpbWUsIGludChzdC5zdF9tdGltZS1kZWx0YSkpKQotICAgICAgICBzdDIgPSBvcy5zdGF0KHN1cHBvcnQuVEVTVEZOKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0Mi5zdF9tdGltZSwgaW50KHN0LnN0X210aW1lLWRlbHRhKSkKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKG9zLCAnc3RhdHZmcycpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJuZWVkIG9zLnN0YXR2ZnMoKSIpCisgICAgZGVmIHRlc3Rfc3RhdHZmc19yZXN1bHRfcGlja2xlKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXN1bHQgPSBvcy5zdGF0dmZzKHNlbGYuZm5hbWUpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICAjIE9uIEF0aGVPUywgZ2xpYmMgYWx3YXlzIHJldHVybnMgRU5PU1lTCisgICAgICAgICAgICBpZiBlLmVycm5vID09IGVycm5vLkVOT1NZUzoKKyAgICAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCdvcy5zdGF0dmZzKCkgZmFpbGVkIHdpdGggRU5PU1lTJykKIAotICAgIGRlZiBfdGVzdF91dGltZShzZWxmLCBmaWxlbmFtZSwgYXR0ciwgdXRpbWUsIGRlbHRhKToKLSAgICAgICAgIyBJc3N1ZSAjMTMzMjcgcmVtb3ZlZCB0aGUgcmVxdWlyZW1lbnQgdG8gcGFzcyBOb25lIGFzIHRoZQotICAgICAgICAjIHNlY29uZCBhcmd1bWVudC4gQ2hlY2sgdGhhdCB0aGUgcHJldmlvdXMgbWV0aG9kcyBvZiBwYXNzaW5nCi0gICAgICAgICMgYSB0aW1lIHR1cGxlIG9yIE5vbmUgd29yayBpbiBhZGRpdGlvbiB0byBubyBhcmd1bWVudC4KLSAgICAgICAgc3QwID0gb3Muc3RhdChmaWxlbmFtZSkKLSAgICAgICAgIyBEb2Vzbid0IHNldCBhbnl0aGluZyBuZXcsIGJ1dCBzZXRzIHRoZSB0aW1lIHR1cGxlIHdheQotICAgICAgICB1dGltZShmaWxlbmFtZSwgKGF0dHIoc3QwLCAic3RfYXRpbWUiKSwgYXR0cihzdDAsICJzdF9tdGltZSIpKSkKLSAgICAgICAgIyBTZXR0aW5nIHRoZSB0aW1lIHRvIHRoZSB0aW1lIHlvdSBqdXN0IHJlYWQsIHRoZW4gcmVhZGluZyBhZ2FpbiwKLSAgICAgICAgIyBzaG91bGQgYWx3YXlzIHJldHVybiBleGFjdGx5IHRoZSBzYW1lIHRpbWVzLgotICAgICAgICBzdDEgPSBvcy5zdGF0KGZpbGVuYW1lKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHIoc3QwLCAic3RfbXRpbWUiKSwgYXR0cihzdDEsICJzdF9tdGltZSIpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHIoc3QwLCAic3RfYXRpbWUiKSwgYXR0cihzdDEsICJzdF9hdGltZSIpKQotICAgICAgICAjIFNldCB0byB0aGUgY3VycmVudCB0aW1lIGluIHRoZSBvbGQgZXhwbGljaXQgd2F5LgotICAgICAgICBvcy51dGltZShmaWxlbmFtZSwgTm9uZSkKLSAgICAgICAgc3QyID0gb3Muc3RhdChzdXBwb3J0LlRFU1RGTikKLSAgICAgICAgIyBTZXQgdG8gdGhlIGN1cnJlbnQgdGltZSBpbiB0aGUgbmV3IHdheQotICAgICAgICBvcy51dGltZShmaWxlbmFtZSkKLSAgICAgICAgc3QzID0gb3Muc3RhdChmaWxlbmFtZSkKLSAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChhdHRyKHN0MiwgInN0X210aW1lIiksIGF0dHIoc3QzLCAic3RfbXRpbWUiKSwgZGVsdGE9ZGVsdGEpCi0KLSAgICBkZWYgdGVzdF91dGltZShzZWxmKToKLSAgICAgICAgZGVmIHV0aW1lKGZpbGUsIHRpbWVzKToKLSAgICAgICAgICAgIHJldHVybiBvcy51dGltZShmaWxlLCB0aW1lcykKLSAgICAgICAgc2VsZi5fdGVzdF91dGltZShzZWxmLmZuYW1lLCBnZXRhdHRyLCB1dGltZSwgMTApCi0gICAgICAgIHNlbGYuX3Rlc3RfdXRpbWUoc3VwcG9ydC5URVNURk4sIGdldGF0dHIsIHV0aW1lLCAxMCkKLQotCi0gICAgZGVmIF90ZXN0X3V0aW1lX25zKHNlbGYsIHNldF90aW1lc19ucywgdGVzdF9kaXI9VHJ1ZSk6Ci0gICAgICAgIGRlZiBnZXRhdHRyX25zKG8sIGF0dHIpOgotICAgICAgICAgICAgcmV0dXJuIGdldGF0dHIobywgYXR0ciArICJfbnMiKQotICAgICAgICB0ZW5fcyA9IDEwICogMTAwMCAqIDEwMDAgKiAxMDAwCi0gICAgICAgIHNlbGYuX3Rlc3RfdXRpbWUoc2VsZi5mbmFtZSwgZ2V0YXR0cl9ucywgc2V0X3RpbWVzX25zLCB0ZW5fcykKLSAgICAgICAgaWYgdGVzdF9kaXI6Ci0gICAgICAgICAgICBzZWxmLl90ZXN0X3V0aW1lKHN1cHBvcnQuVEVTVEZOLCBnZXRhdHRyX25zLCBzZXRfdGltZXNfbnMsIHRlbl9zKQotCi0gICAgZGVmIHRlc3RfdXRpbWVfbnMoc2VsZik6Ci0gICAgICAgIGRlZiB1dGltZV9ucyhmaWxlLCB0aW1lcyk6Ci0gICAgICAgICAgICByZXR1cm4gb3MudXRpbWUoZmlsZSwgbnM9dGltZXMpCi0gICAgICAgIHNlbGYuX3Rlc3RfdXRpbWVfbnModXRpbWVfbnMpCi0KLSAgICByZXF1aXJlc191dGltZV9kaXJfZmQgPSB1bml0dGVzdC5za2lwVW5sZXNzKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy51dGltZSBpbiBvcy5zdXBwb3J0c19kaXJfZmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkaXJfZmQgc3VwcG9ydCBmb3IgdXRpbWUgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4iKQotICAgIHJlcXVpcmVzX3V0aW1lX2ZkID0gdW5pdHRlc3Quc2tpcFVubGVzcygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MudXRpbWUgaW4gb3Muc3VwcG9ydHNfZmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmZCBzdXBwb3J0IGZvciB1dGltZSByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LiIpCi0gICAgcmVxdWlyZXNfdXRpbWVfbm9mb2xsb3dfc3ltbGlua3MgPSB1bml0dGVzdC5za2lwVW5sZXNzKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy51dGltZSBpbiBvcy5zdXBwb3J0c19mb2xsb3dfc3ltbGlua3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmb2xsb3dfc3ltbGlua3Mgc3VwcG9ydCBmb3IgdXRpbWUgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4iKQotCi0gICAgQHJlcXVpcmVzX3V0aW1lX25vZm9sbG93X3N5bWxpbmtzCi0gICAgZGVmIHRlc3RfbHV0aW1lc19ucyhzZWxmKToKLSAgICAgICAgZGVmIGx1dGltZXNfbnMoZmlsZSwgdGltZXMpOgotICAgICAgICAgICAgcmV0dXJuIG9zLnV0aW1lKGZpbGUsIG5zPXRpbWVzLCBmb2xsb3dfc3ltbGlua3M9RmFsc2UpCi0gICAgICAgIHNlbGYuX3Rlc3RfdXRpbWVfbnMobHV0aW1lc19ucykKLQotICAgIEByZXF1aXJlc191dGltZV9mZAotICAgIGRlZiB0ZXN0X2Z1dGltZXNfbnMoc2VsZik6Ci0gICAgICAgIGRlZiBmdXRpbWVzX25zKGZpbGUsIHRpbWVzKToKLSAgICAgICAgICAgIHdpdGggb3BlbihmaWxlLCAid2IiKSBhcyBmOgotICAgICAgICAgICAgICAgIG9zLnV0aW1lKGYuZmlsZW5vKCksIG5zPXRpbWVzKQotICAgICAgICBzZWxmLl90ZXN0X3V0aW1lX25zKGZ1dGltZXNfbnMsIHRlc3RfZGlyPUZhbHNlKQotCi0gICAgZGVmIF91dGltZV9pbnZhbGlkX2FyZ3VtZW50cyhzZWxmLCBuYW1lLCBhcmcpOgotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgotICAgICAgICAgICAgZ2V0YXR0cihvcywgbmFtZSkoYXJnLCAoNSwgNSksIG5zPSg1LCA1KSkKLQotICAgIGRlZiB0ZXN0X3V0aW1lX2ludmFsaWRfYXJndW1lbnRzKHNlbGYpOgotICAgICAgICBzZWxmLl91dGltZV9pbnZhbGlkX2FyZ3VtZW50cygndXRpbWUnLCBzZWxmLmZuYW1lKQotCi0KLSAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhzdGF0X3N1cHBvcnRzX3N1YnNlY29uZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAib3Muc3RhdCgpIGRvZXNuJ3QgaGFzIGEgc3Vic2Vjb25kIHJlc29sdXRpb24iKQotICAgIGRlZiBfdGVzdF91dGltZV9zdWJzZWNvbmQoc2VsZiwgc2V0X3RpbWVfZnVuYyk6Ci0gICAgICAgIGFzZWMsIGFtc2VjID0gMSwgOTAxCi0gICAgICAgIGF0aW1lID0gYXNlYyArIGFtc2VjICogMWUtMwotICAgICAgICBtc2VjLCBtbXNlYyA9IDIsIDkwMQotICAgICAgICBtdGltZSA9IG1zZWMgKyBtbXNlYyAqIDFlLTMKLSAgICAgICAgZmlsZW5hbWUgPSBzZWxmLmZuYW1lCi0gICAgICAgIG9zLnV0aW1lKGZpbGVuYW1lLCAoMCwgMCkpCi0gICAgICAgIHNldF90aW1lX2Z1bmMoZmlsZW5hbWUsIGF0aW1lLCBtdGltZSkKLSAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgotICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCJpZ25vcmUiLCBEZXByZWNhdGlvbldhcm5pbmcpCi0gICAgICAgICAgICBvcy5zdGF0X2Zsb2F0X3RpbWVzKFRydWUpCi0gICAgICAgIHN0ID0gb3Muc3RhdChmaWxlbmFtZSkKLSAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChzdC5zdF9hdGltZSwgYXRpbWUsIHBsYWNlcz0zKQotICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHN0LnN0X210aW1lLCBtdGltZSwgcGxhY2VzPTMpCi0KLSAgICBkZWYgdGVzdF91dGltZV9zdWJzZWNvbmQoc2VsZik6Ci0gICAgICAgIGRlZiBzZXRfdGltZShmaWxlbmFtZSwgYXRpbWUsIG10aW1lKToKLSAgICAgICAgICAgIG9zLnV0aW1lKGZpbGVuYW1lLCAoYXRpbWUsIG10aW1lKSkKLSAgICAgICAgc2VsZi5fdGVzdF91dGltZV9zdWJzZWNvbmQoc2V0X3RpbWUpCi0KLSAgICBAcmVxdWlyZXNfdXRpbWVfZmQKLSAgICBkZWYgdGVzdF9mdXRpbWVzX3N1YnNlY29uZChzZWxmKToKLSAgICAgICAgZGVmIHNldF90aW1lKGZpbGVuYW1lLCBhdGltZSwgbXRpbWUpOgotICAgICAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAid2IiKSBhcyBmOgotICAgICAgICAgICAgICAgIG9zLnV0aW1lKGYuZmlsZW5vKCksIHRpbWVzPShhdGltZSwgbXRpbWUpKQotICAgICAgICBzZWxmLl90ZXN0X3V0aW1lX3N1YnNlY29uZChzZXRfdGltZSkKLQotICAgIEByZXF1aXJlc191dGltZV9mZAotICAgIGRlZiB0ZXN0X2Z1dGltZW5zX3N1YnNlY29uZChzZWxmKToKLSAgICAgICAgZGVmIHNldF90aW1lKGZpbGVuYW1lLCBhdGltZSwgbXRpbWUpOgotICAgICAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAid2IiKSBhcyBmOgotICAgICAgICAgICAgICAgIG9zLnV0aW1lKGYuZmlsZW5vKCksIHRpbWVzPShhdGltZSwgbXRpbWUpKQotICAgICAgICBzZWxmLl90ZXN0X3V0aW1lX3N1YnNlY29uZChzZXRfdGltZSkKLQotICAgIEByZXF1aXJlc191dGltZV9kaXJfZmQKLSAgICBkZWYgdGVzdF9mdXRpbWVzYXRfc3Vic2Vjb25kKHNlbGYpOgotICAgICAgICBkZWYgc2V0X3RpbWUoZmlsZW5hbWUsIGF0aW1lLCBtdGltZSk6Ci0gICAgICAgICAgICBkaXJuYW1lID0gb3MucGF0aC5kaXJuYW1lKGZpbGVuYW1lKQotICAgICAgICAgICAgZGlyZmQgPSBvcy5vcGVuKGRpcm5hbWUsIG9zLk9fUkRPTkxZKQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIG9zLnV0aW1lKG9zLnBhdGguYmFzZW5hbWUoZmlsZW5hbWUpLCBkaXJfZmQ9ZGlyZmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVzPShhdGltZSwgbXRpbWUpKQotICAgICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgICAgICBvcy5jbG9zZShkaXJmZCkKLSAgICAgICAgc2VsZi5fdGVzdF91dGltZV9zdWJzZWNvbmQoc2V0X3RpbWUpCi0KLSAgICBAcmVxdWlyZXNfdXRpbWVfbm9mb2xsb3dfc3ltbGlua3MKLSAgICBkZWYgdGVzdF9sdXRpbWVzX3N1YnNlY29uZChzZWxmKToKLSAgICAgICAgZGVmIHNldF90aW1lKGZpbGVuYW1lLCBhdGltZSwgbXRpbWUpOgotICAgICAgICAgICAgb3MudXRpbWUoZmlsZW5hbWUsIChhdGltZSwgbXRpbWUpLCBmb2xsb3dfc3ltbGlua3M9RmFsc2UpCi0gICAgICAgIHNlbGYuX3Rlc3RfdXRpbWVfc3Vic2Vjb25kKHNldF90aW1lKQotCi0gICAgQHJlcXVpcmVzX3V0aW1lX2Rpcl9mZAotICAgIGRlZiB0ZXN0X3V0aW1lbnNhdF9zdWJzZWNvbmQoc2VsZik6Ci0gICAgICAgIGRlZiBzZXRfdGltZShmaWxlbmFtZSwgYXRpbWUsIG10aW1lKToKLSAgICAgICAgICAgIGRpcm5hbWUgPSBvcy5wYXRoLmRpcm5hbWUoZmlsZW5hbWUpCi0gICAgICAgICAgICBkaXJmZCA9IG9zLm9wZW4oZGlybmFtZSwgb3MuT19SRE9OTFkpCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgb3MudXRpbWUob3MucGF0aC5iYXNlbmFtZShmaWxlbmFtZSksIGRpcl9mZD1kaXJmZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXM9KGF0aW1lLCBtdGltZSkpCi0gICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgIG9zLmNsb3NlKGRpcmZkKQotICAgICAgICBzZWxmLl90ZXN0X3V0aW1lX3N1YnNlY29uZChzZXRfdGltZSkKLQotICAgICMgUmVzdHJpY3QgdGVzdHMgdG8gV2luMzIsIHNpbmNlIHRoZXJlIGlzIG5vIGd1YXJhbnRlZSBvdGhlcgotICAgICMgc3lzdGVtcyBzdXBwb3J0IGNlbnRpc2Vjb25kcwotICAgIGRlZiBnZXRfZmlsZV9zeXN0ZW0ocGF0aCk6Ci0gICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgotICAgICAgICAgICAgcm9vdCA9IG9zLnBhdGguc3BsaXRkcml2ZShvcy5wYXRoLmFic3BhdGgocGF0aCkpWzBdICsgJ1xcJwotICAgICAgICAgICAgaW1wb3J0IGN0eXBlcwotICAgICAgICAgICAga2VybmVsMzIgPSBjdHlwZXMud2luZGxsLmtlcm5lbDMyCi0gICAgICAgICAgICBidWYgPSBjdHlwZXMuY3JlYXRlX3VuaWNvZGVfYnVmZmVyKCIiLCAxMDApCi0gICAgICAgICAgICBpZiBrZXJuZWwzMi5HZXRWb2x1bWVJbmZvcm1hdGlvblcocm9vdCwgTm9uZSwgMCwgTm9uZSwgTm9uZSwgTm9uZSwgYnVmLCBsZW4oYnVmKSk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGJ1Zi52YWx1ZQotCi0gICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3lzLnBsYXRmb3JtID09ICJ3aW4zMiIsICJXaW4zMiBzcGVjaWZpYyB0ZXN0cyIpCi0gICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoZ2V0X2ZpbGVfc3lzdGVtKHN1cHBvcnQuVEVTVEZOKSA9PSAiTlRGUyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgInJlcXVpcmVzIE5URlMiKQotICAgIGRlZiB0ZXN0XzE1NjUxNTAoc2VsZik6Ci0gICAgICAgIHQxID0gMTE1OTE5NTAzOS4yNQotICAgICAgICBvcy51dGltZShzZWxmLmZuYW1lLCAodDEsIHQxKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5zdGF0KHNlbGYuZm5hbWUpLnN0X210aW1lLCB0MSkKLQotICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiLCAiV2luMzIgc3BlY2lmaWMgdGVzdHMiKQotICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGdldF9maWxlX3N5c3RlbShzdXBwb3J0LlRFU1RGTikgPT0gIk5URlMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICJyZXF1aXJlcyBOVEZTIikKLSAgICBkZWYgdGVzdF9sYXJnZV90aW1lKHNlbGYpOgotICAgICAgICB0MSA9IDUwMDAwMDAwMDAgIyBzb21lIGRheSBpbiAyMTI4Ci0gICAgICAgIG9zLnV0aW1lKHNlbGYuZm5hbWUsICh0MSwgdDEpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnN0YXQoc2VsZi5mbmFtZSkuc3RfbXRpbWUsIHQxKQorICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIHAgPSBwaWNrbGUuZHVtcHMocmVzdWx0LCBwcm90bykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oYidzdGF0dmZzX3Jlc3VsdCcsIHApCisgICAgICAgICAgICBpZiBwcm90byA8IDQ6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihiJ2Nvc1xuc3RhdHZmc19yZXN1bHRcbicsIHApCisgICAgICAgICAgICB1bnBpY2tsZWQgPSBwaWNrbGUubG9hZHMocCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCB1bnBpY2tsZWQpCiAKICAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhzeXMucGxhdGZvcm0gPT0gIndpbjMyIiwgIldpbjMyIHNwZWNpZmljIHRlc3RzIikKICAgICBkZWYgdGVzdF8xNjg2NDc1KHNlbGYpOgogICAgICAgICAjIFZlcmlmeSB0aGF0IGFuIG9wZW4gZmlsZSBjYW4gYmUgc3RhdCdlZAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBvcy5zdGF0KHIiYzpccGFnZWZpbGUuc3lzIikKLSAgICAgICAgZXhjZXB0IFdpbmRvd3NFcnJvciBhcyBlOgotICAgICAgICAgICAgaWYgZS5lcnJubyA9PSAyOiAjIGZpbGUgZG9lcyBub3QgZXhpc3Q7IGNhbm5vdCBydW4gdGVzdAotICAgICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QocidjOlxwYWdlZmlsZS5zeXMgZG9lcyBub3QgZXhpc3QnKQorICAgICAgICBleGNlcHQgRmlsZU5vdEZvdW5kRXJyb3I6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KHInYzpccGFnZWZpbGUuc3lzIGRvZXMgbm90IGV4aXN0JykKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgIHNlbGYuZmFpbCgiQ291bGQgbm90IHN0YXQgcGFnZWZpbGUuc3lzIikKIAogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiLCAiV2luMzIgc3BlY2lmaWMgdGVzdHMiKQpAQCAtNDk3LDYgKzM2MywyMDIgQEAKICAgICAgICAgICAgIG9zLnN0YXQocikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHguZXhjZXB0aW9uLmVycm5vLCBlcnJuby5FQkFERikKIAorCitjbGFzcyBVdGltZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuZGlybmFtZSA9IHN1cHBvcnQuVEVTVEZOCisgICAgICAgIHNlbGYuZm5hbWUgPSBvcy5wYXRoLmpvaW4oc2VsZi5kaXJuYW1lLCAiZjEiKQorCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzdXBwb3J0LnJtdHJlZSwgc2VsZi5kaXJuYW1lKQorICAgICAgICBvcy5ta2RpcihzZWxmLmRpcm5hbWUpCisgICAgICAgIHdpdGggb3BlbihzZWxmLmZuYW1lLCAnd2InKSBhcyBmcDoKKyAgICAgICAgICAgIGZwLndyaXRlKGIiQUJDIikKKworICAgICAgICBkZWYgcmVzdG9yZV9mbG9hdF90aW1lcyhzdGF0ZSk6CisgICAgICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCJpZ25vcmUiLCBEZXByZWNhdGlvbldhcm5pbmcpCisKKyAgICAgICAgICAgICAgICBvcy5zdGF0X2Zsb2F0X3RpbWVzKHN0YXRlKQorCisgICAgICAgICMgZW5zdXJlIHRoYXQgc3RfYXRpbWUgYW5kIHN0X210aW1lIGFyZSBmbG9hdAorICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoImlnbm9yZSIsIERlcHJlY2F0aW9uV2FybmluZykKKworICAgICAgICAgICAgb2xkX2Zsb2F0X3RpbWVzID0gb3Muc3RhdF9mbG9hdF90aW1lcygtMSkKKyAgICAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChyZXN0b3JlX2Zsb2F0X3RpbWVzLCBvbGRfZmxvYXRfdGltZXMpCisKKyAgICAgICAgICAgIG9zLnN0YXRfZmxvYXRfdGltZXMoVHJ1ZSkKKworICAgIGRlZiBzdXBwb3J0X3N1YnNlY29uZChzZWxmLCBmaWxlbmFtZSk6CisgICAgICAgICMgSGV1cmlzdGljIHRvIGNoZWNrIGlmIHRoZSBmaWxlc3lzdGVtIHN1cHBvcnRzIHRpbWVzdGFtcCB3aXRoCisgICAgICAgICMgc3Vic2Vjb25kIHJlc29sdXRpb246IGNoZWNrIGlmIGZsb2F0IGFuZCBpbnQgdGltZXN0YW1wcyBhcmUgZGlmZmVyZW50CisgICAgICAgIHN0ID0gb3Muc3RhdChmaWxlbmFtZSkKKyAgICAgICAgcmV0dXJuICgoc3Quc3RfYXRpbWUgIT0gc3RbN10pCisgICAgICAgICAgICAgICAgb3IgKHN0LnN0X210aW1lICE9IHN0WzhdKQorICAgICAgICAgICAgICAgIG9yIChzdC5zdF9jdGltZSAhPSBzdFs5XSkpCisKKyAgICBkZWYgX3Rlc3RfdXRpbWUoc2VsZiwgc2V0X3RpbWUsIGZpbGVuYW1lPU5vbmUpOgorICAgICAgICBpZiBub3QgZmlsZW5hbWU6CisgICAgICAgICAgICBmaWxlbmFtZSA9IHNlbGYuZm5hbWUKKworICAgICAgICBzdXBwb3J0X3N1YnNlY29uZCA9IHNlbGYuc3VwcG9ydF9zdWJzZWNvbmQoZmlsZW5hbWUpCisgICAgICAgIGlmIHN1cHBvcnRfc3Vic2Vjb25kOgorICAgICAgICAgICAgIyBUaW1lc3RhbXAgd2l0aCBhIHJlc29sdXRpb24gb2YgMSBtaWNyb3NlY29uZCAoMTBeLTYpLgorICAgICAgICAgICAgIworICAgICAgICAgICAgIyBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgQyBpbnRlcm5hbCBmdW5jdGlvbiB1c2VkIGJ5IG9zLnV0aW1lKCkKKyAgICAgICAgICAgICMgZGVwZW5kcyBvbiB0aGUgcGxhdGZvcm06IDEgc2VjLCAxIHVzLCAxIG5zLiBXcml0aW5nIGEgcG9ydGFibGUKKyAgICAgICAgICAgICMgdGVzdCB3aXRoIGEgcmVzb2x1dGlvbiBvZiAxIG5zIHJlcXVpcmVzIG1vcmUgd29yazoKKyAgICAgICAgICAgICMgc2VlIHRoZSBpc3N1ZSAjMTU3NDUuCisgICAgICAgICAgICBhdGltZV9ucyA9IDEwMDIwMDMwMDAgICAjIDEuMDAyMDAzIHNlY29uZHMKKyAgICAgICAgICAgIG10aW1lX25zID0gNDAwNTAwNjAwMCAgICMgNC4wMDUwMDYgc2Vjb25kcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyB1c2UgYSByZXNvbHV0aW9uIG9mIDEgc2Vjb25kCisgICAgICAgICAgICBhdGltZV9ucyA9IDUgKiAxMCoqOQorICAgICAgICAgICAgbXRpbWVfbnMgPSA4ICogMTAqKjkKKworICAgICAgICBzZXRfdGltZShmaWxlbmFtZSwgKGF0aW1lX25zLCBtdGltZV9ucykpCisgICAgICAgIHN0ID0gb3Muc3RhdChmaWxlbmFtZSkKKworICAgICAgICBpZiBzdXBwb3J0X3N1YnNlY29uZDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoc3Quc3RfYXRpbWUsIGF0aW1lX25zICogMWUtOSwgZGVsdGE9MWUtNikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoc3Quc3RfbXRpbWUsIG10aW1lX25zICogMWUtOSwgZGVsdGE9MWUtNikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Quc3RfYXRpbWUsIGF0aW1lX25zICogMWUtOSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Quc3RfbXRpbWUsIG10aW1lX25zICogMWUtOSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdC5zdF9hdGltZV9ucywgYXRpbWVfbnMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Quc3RfbXRpbWVfbnMsIG10aW1lX25zKQorCisgICAgZGVmIHRlc3RfdXRpbWUoc2VsZik6CisgICAgICAgIGRlZiBzZXRfdGltZShmaWxlbmFtZSwgbnMpOgorICAgICAgICAgICAgIyB0ZXN0IHRoZSBucyBrZXl3b3JkIHBhcmFtZXRlcgorICAgICAgICAgICAgb3MudXRpbWUoZmlsZW5hbWUsIG5zPW5zKQorICAgICAgICBzZWxmLl90ZXN0X3V0aW1lKHNldF90aW1lKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBuc190b19zZWMobnMpOgorICAgICAgICAjIENvbnZlcnQgYSBudW1iZXIgb2YgbmFub3NlY29uZCAoaW50KSB0byBhIG51bWJlciBvZiBzZWNvbmRzIChmbG9hdCkuCisgICAgICAgICMgUm91bmQgdG93YXJkcyBpbmZpbml0eSBieSBhZGRpbmcgMC41IG5hbm9zZWNvbmQgdG8gYXZvaWQgcm91bmRpbmcKKyAgICAgICAgIyBpc3N1ZSwgb3MudXRpbWUoKSByb3VuZHMgdG93YXJkcyBtaW51cyBpbmZpbml0eS4KKyAgICAgICAgcmV0dXJuIChucyAqIDFlLTkpICsgMC41ZS05CisKKyAgICBkZWYgdGVzdF91dGltZV9ieV9pbmRleGVkKHNlbGYpOgorICAgICAgICAjIHBhc3MgdGltZXMgYXMgZmxvYXRpbmcgcG9pbnQgc2Vjb25kcyBhcyB0aGUgc2Vjb25kIGluZGV4ZWQgcGFyYW1ldGVyCisgICAgICAgIGRlZiBzZXRfdGltZShmaWxlbmFtZSwgbnMpOgorICAgICAgICAgICAgYXRpbWVfbnMsIG10aW1lX25zID0gbnMKKyAgICAgICAgICAgIGF0aW1lID0gc2VsZi5uc190b19zZWMoYXRpbWVfbnMpCisgICAgICAgICAgICBtdGltZSA9IHNlbGYubnNfdG9fc2VjKG10aW1lX25zKQorICAgICAgICAgICAgIyB0ZXN0IHV0aW1lbnNhdCh0aW1lc3BlYyksIHV0aW1lcyh0aW1ldmFsKSwgdXRpbWUodXRpbWJ1ZikKKyAgICAgICAgICAgICMgb3IgdXRpbWUodGltZV90KQorICAgICAgICAgICAgb3MudXRpbWUoZmlsZW5hbWUsIChhdGltZSwgbXRpbWUpKQorICAgICAgICBzZWxmLl90ZXN0X3V0aW1lKHNldF90aW1lKQorCisgICAgZGVmIHRlc3RfdXRpbWVfYnlfdGltZXMoc2VsZik6CisgICAgICAgIGRlZiBzZXRfdGltZShmaWxlbmFtZSwgbnMpOgorICAgICAgICAgICAgYXRpbWVfbnMsIG10aW1lX25zID0gbnMKKyAgICAgICAgICAgIGF0aW1lID0gc2VsZi5uc190b19zZWMoYXRpbWVfbnMpCisgICAgICAgICAgICBtdGltZSA9IHNlbGYubnNfdG9fc2VjKG10aW1lX25zKQorICAgICAgICAgICAgIyB0ZXN0IHRoZSB0aW1lcyBrZXl3b3JkIHBhcmFtZXRlcgorICAgICAgICAgICAgb3MudXRpbWUoZmlsZW5hbWUsIHRpbWVzPShhdGltZSwgbXRpbWUpKQorICAgICAgICBzZWxmLl90ZXN0X3V0aW1lKHNldF90aW1lKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Mob3MudXRpbWUgaW4gb3Muc3VwcG9ydHNfZm9sbG93X3N5bWxpbmtzLAorICAgICAgICAgICAgICAgICAgICAgICAgICJmb2xsb3dfc3ltbGlua3Mgc3VwcG9ydCBmb3IgdXRpbWUgcmVxdWlyZWQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICJmb3IgdGhpcyB0ZXN0LiIpCisgICAgZGVmIHRlc3RfdXRpbWVfbm9mb2xsb3dfc3ltbGlua3Moc2VsZik6CisgICAgICAgIGRlZiBzZXRfdGltZShmaWxlbmFtZSwgbnMpOgorICAgICAgICAgICAgIyB1c2UgZm9sbG93X3N5bWxpbmtzPUZhbHNlIHRvIHRlc3QgdXRpbWVuc2F0KHRpbWVzcGVjKQorICAgICAgICAgICAgIyBvciBsdXRpbWVzKHRpbWV2YWwpCisgICAgICAgICAgICBvcy51dGltZShmaWxlbmFtZSwgbnM9bnMsIGZvbGxvd19zeW1saW5rcz1GYWxzZSkKKyAgICAgICAgc2VsZi5fdGVzdF91dGltZShzZXRfdGltZSkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKG9zLnV0aW1lIGluIG9zLnN1cHBvcnRzX2ZkLAorICAgICAgICAgICAgICAgICAgICAgICAgICJmZCBzdXBwb3J0IGZvciB1dGltZSByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LiIpCisgICAgZGVmIHRlc3RfdXRpbWVfZmQoc2VsZik6CisgICAgICAgIGRlZiBzZXRfdGltZShmaWxlbmFtZSwgbnMpOgorICAgICAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAnd2InKSBhcyBmcDoKKyAgICAgICAgICAgICAgICAjIHVzZSBhIGZpbGUgZGVzY3JpcHRvciB0byB0ZXN0IGZ1dGltZW5zKHRpbWVzcGVjKQorICAgICAgICAgICAgICAgICMgb3IgZnV0aW1lcyh0aW1ldmFsKQorICAgICAgICAgICAgICAgIG9zLnV0aW1lKGZwLmZpbGVubygpLCBucz1ucykKKyAgICAgICAgc2VsZi5fdGVzdF91dGltZShzZXRfdGltZSkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKG9zLnV0aW1lIGluIG9zLnN1cHBvcnRzX2Rpcl9mZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiZGlyX2ZkIHN1cHBvcnQgZm9yIHV0aW1lIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuIikKKyAgICBkZWYgdGVzdF91dGltZV9kaXJfZmQoc2VsZik6CisgICAgICAgIGRlZiBzZXRfdGltZShmaWxlbmFtZSwgbnMpOgorICAgICAgICAgICAgZGlybmFtZSwgbmFtZSA9IG9zLnBhdGguc3BsaXQoZmlsZW5hbWUpCisgICAgICAgICAgICBkaXJmZCA9IG9zLm9wZW4oZGlybmFtZSwgb3MuT19SRE9OTFkpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgIyBwYXNzIGRpcl9mZCB0byB0ZXN0IHV0aW1lbnNhdCh0aW1lc3BlYykgb3IgZnV0aW1lc2F0KHRpbWV2YWwpCisgICAgICAgICAgICAgICAgb3MudXRpbWUobmFtZSwgZGlyX2ZkPWRpcmZkLCBucz1ucykKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgb3MuY2xvc2UoZGlyZmQpCisgICAgICAgIHNlbGYuX3Rlc3RfdXRpbWUoc2V0X3RpbWUpCisKKyAgICBkZWYgdGVzdF91dGltZV9kaXJlY3Rvcnkoc2VsZik6CisgICAgICAgIGRlZiBzZXRfdGltZShmaWxlbmFtZSwgbnMpOgorICAgICAgICAgICAgIyB0ZXN0IGNhbGxpbmcgb3MudXRpbWUoKSBvbiBhIGRpcmVjdG9yeQorICAgICAgICAgICAgb3MudXRpbWUoZmlsZW5hbWUsIG5zPW5zKQorICAgICAgICBzZWxmLl90ZXN0X3V0aW1lKHNldF90aW1lLCBmaWxlbmFtZT1zZWxmLmRpcm5hbWUpCisKKyAgICBkZWYgX3Rlc3RfdXRpbWVfY3VycmVudChzZWxmLCBzZXRfdGltZSk6CisgICAgICAgICMgR2V0IHRoZSBzeXN0ZW0gY2xvY2sKKyAgICAgICAgY3VycmVudCA9IHRpbWUudGltZSgpCisKKyAgICAgICAgIyBDYWxsIG9zLnV0aW1lKCkgdG8gc2V0IHRoZSB0aW1lc3RhbXAgdG8gdGhlIGN1cnJlbnQgc3lzdGVtIGNsb2NrCisgICAgICAgIHNldF90aW1lKHNlbGYuZm5hbWUpCisKKyAgICAgICAgaWYgbm90IHNlbGYuc3VwcG9ydF9zdWJzZWNvbmQoc2VsZi5mbmFtZSk6CisgICAgICAgICAgICBkZWx0YSA9IDEuMAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBPbiBXaW5kb3dzLCB0aGUgdXN1YWwgcmVzb2x1dGlvbiBvZiB0aW1lLnRpbWUoKSBpcyAxNS42IG1zCisgICAgICAgICAgICBkZWx0YSA9IDAuMDIwCisgICAgICAgIHN0ID0gb3Muc3RhdChzZWxmLmZuYW1lKQorICAgICAgICBtc2cgPSAoInN0X3RpbWU9JXIsIGN1cnJlbnQ9JXIsIGR0PSVyIgorICAgICAgICAgICAgICAgJSAoc3Quc3RfbXRpbWUsIGN1cnJlbnQsIHN0LnN0X210aW1lIC0gY3VycmVudCkpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoc3Quc3RfbXRpbWUsIGN1cnJlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsdGE9ZGVsdGEsIG1zZz1tc2cpCisKKyAgICBkZWYgdGVzdF91dGltZV9jdXJyZW50KHNlbGYpOgorICAgICAgICBkZWYgc2V0X3RpbWUoZmlsZW5hbWUpOgorICAgICAgICAgICAgIyBTZXQgdG8gdGhlIGN1cnJlbnQgdGltZSBpbiB0aGUgbmV3IHdheQorICAgICAgICAgICAgb3MudXRpbWUoc2VsZi5mbmFtZSkKKyAgICAgICAgc2VsZi5fdGVzdF91dGltZV9jdXJyZW50KHNldF90aW1lKQorCisgICAgZGVmIHRlc3RfdXRpbWVfY3VycmVudF9vbGQoc2VsZik6CisgICAgICAgIGRlZiBzZXRfdGltZShmaWxlbmFtZSk6CisgICAgICAgICAgICAjIFNldCB0byB0aGUgY3VycmVudCB0aW1lIGluIHRoZSBvbGQgZXhwbGljaXQgd2F5LgorICAgICAgICAgICAgb3MudXRpbWUoc2VsZi5mbmFtZSwgTm9uZSkKKyAgICAgICAgc2VsZi5fdGVzdF91dGltZV9jdXJyZW50KHNldF90aW1lKQorCisgICAgZGVmIGdldF9maWxlX3N5c3RlbShzZWxmLCBwYXRoKToKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6CisgICAgICAgICAgICByb290ID0gb3MucGF0aC5zcGxpdGRyaXZlKG9zLnBhdGguYWJzcGF0aChwYXRoKSlbMF0gKyAnXFwnCisgICAgICAgICAgICBpbXBvcnQgY3R5cGVzCisgICAgICAgICAgICBrZXJuZWwzMiA9IGN0eXBlcy53aW5kbGwua2VybmVsMzIKKyAgICAgICAgICAgIGJ1ZiA9IGN0eXBlcy5jcmVhdGVfdW5pY29kZV9idWZmZXIoIiIsIDEwMCkKKyAgICAgICAgICAgIG9rID0ga2VybmVsMzIuR2V0Vm9sdW1lSW5mb3JtYXRpb25XKHJvb3QsIE5vbmUsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb25lLCBOb25lLCBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmLCBsZW4oYnVmKSkKKyAgICAgICAgICAgIGlmIG9rOgorICAgICAgICAgICAgICAgIHJldHVybiBidWYudmFsdWUKKyAgICAgICAgIyByZXR1cm4gTm9uZSBpZiB0aGUgZmlsZXN5c3RlbSBpcyB1bmtub3duCisKKyAgICBkZWYgdGVzdF9sYXJnZV90aW1lKHNlbGYpOgorICAgICAgICAjIE1hbnkgZmlsZXN5c3RlbXMgYXJlIGxpbWl0ZWQgdG8gdGhlIHllYXIgMjAzOC4gQXQgbGVhc3QsIHRoZSB0ZXN0CisgICAgICAgICMgcGFzcyB3aXRoIE5URlMgZmlsZXN5c3RlbS4KKyAgICAgICAgaWYgc2VsZi5nZXRfZmlsZV9zeXN0ZW0oc2VsZi5kaXJuYW1lKSAhPSAiTlRGUyI6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJyZXF1aXJlcyBOVEZTIikKKworICAgICAgICBsYXJnZSA9IDUwMDAwMDAwMDAgICAjIHNvbWUgZGF5IGluIDIxMjgKKyAgICAgICAgb3MudXRpbWUoc2VsZi5mbmFtZSwgKGxhcmdlLCBsYXJnZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Muc3RhdChzZWxmLmZuYW1lKS5zdF9tdGltZSwgbGFyZ2UpCisKKyAgICBkZWYgdGVzdF91dGltZV9pbnZhbGlkX2FyZ3VtZW50cyhzZWxmKToKKyAgICAgICAgIyBzZWNvbmRzIGFuZCBuYW5vc2Vjb25kcyBwYXJhbWV0ZXJzIGFyZSBtdXR1YWxseSBleGNsdXNpdmUKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIG9zLnV0aW1lKHNlbGYuZm5hbWUsICg1LCA1KSwgbnM9KDUsIDUpKQorCisKIGZyb20gdGVzdCBpbXBvcnQgbWFwcGluZ190ZXN0cwogCiBjbGFzcyBFbnZpcm9uVGVzdHMobWFwcGluZ190ZXN0cy5CYXNpY1Rlc3RNYXBwaW5nUHJvdG9jb2wpOgpAQCAtNjU4LDkgKzcyMCwxNyBAQAogY2xhc3MgV2Fsa1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAiIiJUZXN0cyBmb3Igb3Mud2FsaygpLiIiIgogCisgICAgIyBXcmFwcGVyIHRvIGhpZGUgbWlub3IgZGlmZmVyZW5jZXMgYmV0d2VlbiBvcy53YWxrIGFuZCBvcy5md2FsaworICAgICMgdG8gdGVzdHMgYm90aCBmdW5jdGlvbnMgd2l0aCB0aGUgc2FtZSBjb2RlIGJhc2UKKyAgICBkZWYgd2FsayhzZWxmLCBkaXJlY3RvcnksIHRvcGRvd249VHJ1ZSwgZm9sbG93X3N5bWxpbmtzPUZhbHNlKToKKyAgICAgICAgd2Fsa19pdCA9IG9zLndhbGsoZGlyZWN0b3J5LAorICAgICAgICAgICAgICAgICAgICAgICAgICB0b3Bkb3duPXRvcGRvd24sCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbGxvd2xpbmtzPWZvbGxvd19zeW1saW5rcykKKyAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIHdhbGtfaXQ6CisgICAgICAgICAgICB5aWVsZCAocm9vdCwgZGlycywgZmlsZXMpCisKICAgICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgIGltcG9ydCBvcwotICAgICAgICBmcm9tIG9zLnBhdGggaW1wb3J0IGpvaW4KKyAgICAgICAgam9pbiA9IG9zLnBhdGguam9pbgogCiAgICAgICAgICMgQnVpbGQ6CiAgICAgICAgICMgICAgIFRFU1RGTi8KQEAgLTY3NSwzNiArNzQ1LDM5IEBACiAgICAgICAgICMgICAgICAgICAgIGJyb2tlbl9saW5rCiAgICAgICAgICMgICAgICAgVEVTVDIvCiAgICAgICAgICMgICAgICAgICB0bXA0ICAgICAgICAgICAgICBhIGxvbmUgZmlsZQotICAgICAgICB3YWxrX3BhdGggPSBqb2luKHN1cHBvcnQuVEVTVEZOLCAiVEVTVDEiKQotICAgICAgICBzdWIxX3BhdGggPSBqb2luKHdhbGtfcGF0aCwgIlNVQjEiKQotICAgICAgICBzdWIxMV9wYXRoID0gam9pbihzdWIxX3BhdGgsICJTVUIxMSIpCi0gICAgICAgIHN1YjJfcGF0aCA9IGpvaW4od2Fsa19wYXRoLCAiU1VCMiIpCi0gICAgICAgIHRtcDFfcGF0aCA9IGpvaW4od2Fsa19wYXRoLCAidG1wMSIpCi0gICAgICAgIHRtcDJfcGF0aCA9IGpvaW4oc3ViMV9wYXRoLCAidG1wMiIpCisgICAgICAgIHNlbGYud2Fsa19wYXRoID0gam9pbihzdXBwb3J0LlRFU1RGTiwgIlRFU1QxIikKKyAgICAgICAgc2VsZi5zdWIxX3BhdGggPSBqb2luKHNlbGYud2Fsa19wYXRoLCAiU1VCMSIpCisgICAgICAgIHNlbGYuc3ViMTFfcGF0aCA9IGpvaW4oc2VsZi5zdWIxX3BhdGgsICJTVUIxMSIpCisgICAgICAgIHN1YjJfcGF0aCA9IGpvaW4oc2VsZi53YWxrX3BhdGgsICJTVUIyIikKKyAgICAgICAgdG1wMV9wYXRoID0gam9pbihzZWxmLndhbGtfcGF0aCwgInRtcDEiKQorICAgICAgICB0bXAyX3BhdGggPSBqb2luKHNlbGYuc3ViMV9wYXRoLCAidG1wMiIpCiAgICAgICAgIHRtcDNfcGF0aCA9IGpvaW4oc3ViMl9wYXRoLCAidG1wMyIpCi0gICAgICAgIGxpbmtfcGF0aCA9IGpvaW4oc3ViMl9wYXRoLCAibGluayIpCisgICAgICAgIHNlbGYubGlua19wYXRoID0gam9pbihzdWIyX3BhdGgsICJsaW5rIikKICAgICAgICAgdDJfcGF0aCA9IGpvaW4oc3VwcG9ydC5URVNURk4sICJURVNUMiIpCiAgICAgICAgIHRtcDRfcGF0aCA9IGpvaW4oc3VwcG9ydC5URVNURk4sICJURVNUMiIsICJ0bXA0IikKLSAgICAgICAgbGlua19wYXRoID0gam9pbihzdWIyX3BhdGgsICJsaW5rIikKICAgICAgICAgYnJva2VuX2xpbmtfcGF0aCA9IGpvaW4oc3ViMl9wYXRoLCAiYnJva2VuX2xpbmsiKQogCiAgICAgICAgICMgQ3JlYXRlIHN0dWZmLgotICAgICAgICBvcy5tYWtlZGlycyhzdWIxMV9wYXRoKQorICAgICAgICBvcy5tYWtlZGlycyhzZWxmLnN1YjExX3BhdGgpCiAgICAgICAgIG9zLm1ha2VkaXJzKHN1YjJfcGF0aCkKICAgICAgICAgb3MubWFrZWRpcnModDJfcGF0aCkKKwogICAgICAgICBmb3IgcGF0aCBpbiB0bXAxX3BhdGgsIHRtcDJfcGF0aCwgdG1wM19wYXRoLCB0bXA0X3BhdGg6CiAgICAgICAgICAgICBmID0gb3BlbihwYXRoLCAidyIpCiAgICAgICAgICAgICBmLndyaXRlKCJJJ20gIiArIHBhdGggKyAiIGFuZCBwcm91ZCBvZiBpdC4gIEJsYW1lIHRlc3Rfb3MuXG4iKQogICAgICAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgIGlmIHN1cHBvcnQuY2FuX3N5bWxpbmsoKToKLSAgICAgICAgICAgIG9zLnN5bWxpbmsob3MucGF0aC5hYnNwYXRoKHQyX3BhdGgpLCBsaW5rX3BhdGgpCi0gICAgICAgICAgICBvcy5zeW1saW5rKCdicm9rZW4nLCBicm9rZW5fbGlua19wYXRoLCBUcnVlKQotICAgICAgICAgICAgc3ViMl90cmVlID0gKHN1YjJfcGF0aCwgWyJsaW5rIl0sIFsiYnJva2VuX2xpbmsiLCAidG1wMyJdKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc3ViMl90cmVlID0gKHN1YjJfcGF0aCwgW10sIFsidG1wMyJdKQogCisgICAgICAgIGlmIHN1cHBvcnQuY2FuX3N5bWxpbmsoKToKKyAgICAgICAgICAgIG9zLnN5bWxpbmsob3MucGF0aC5hYnNwYXRoKHQyX3BhdGgpLCBzZWxmLmxpbmtfcGF0aCkKKyAgICAgICAgICAgIG9zLnN5bWxpbmsoJ2Jyb2tlbicsIGJyb2tlbl9saW5rX3BhdGgsIFRydWUpCisgICAgICAgICAgICBzZWxmLnN1YjJfdHJlZSA9IChzdWIyX3BhdGgsIFsibGluayJdLCBbImJyb2tlbl9saW5rIiwgInRtcDMiXSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuc3ViMl90cmVlID0gKHN1YjJfcGF0aCwgW10sIFsidG1wMyJdKQorCisgICAgZGVmIHRlc3Rfd2Fsa190b3Bkb3duKHNlbGYpOgogICAgICAgICAjIFdhbGsgdG9wLWRvd24uCi0gICAgICAgIGFsbCA9IGxpc3Qob3Mud2Fsayh3YWxrX3BhdGgpKQorICAgICAgICBhbGwgPSBsaXN0KG9zLndhbGsoc2VsZi53YWxrX3BhdGgpKQorCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGFsbCksIDQpCiAgICAgICAgICMgV2UgY2FuJ3Qga25vdyB3aGljaCBvcmRlciBTVUIxIGFuZCBTVUIyIHdpbGwgYXBwZWFyIGluLgogICAgICAgICAjIE5vdCBmbGlwcGVkOiAgVEVTVEZOLCBTVUIxLCBTVUIxMSwgU1VCMgpAQCAtNzEyLDI2ICs3ODUsMzIgQEAKICAgICAgICAgZmxpcHBlZCA9IGFsbFswXVsxXVswXSAhPSAiU1VCMSIKICAgICAgICAgYWxsWzBdWzFdLnNvcnQoKQogICAgICAgICBhbGxbMyAtIDIgKiBmbGlwcGVkXVstMV0uc29ydCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWxsWzBdLCAod2Fsa19wYXRoLCBbIlNVQjEiLCAiU1VCMiJdLCBbInRtcDEiXSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWxsWzEgKyBmbGlwcGVkXSwgKHN1YjFfcGF0aCwgWyJTVUIxMSJdLCBbInRtcDIiXSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWxsWzIgKyBmbGlwcGVkXSwgKHN1YjExX3BhdGgsIFtdLCBbXSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWxsWzMgLSAyICogZmxpcHBlZF0sIHN1YjJfdHJlZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhbGxbMF0sIChzZWxmLndhbGtfcGF0aCwgWyJTVUIxIiwgIlNVQjIiXSwgWyJ0bXAxIl0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFsbFsxICsgZmxpcHBlZF0sIChzZWxmLnN1YjFfcGF0aCwgWyJTVUIxMSJdLCBbInRtcDIiXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWxsWzIgKyBmbGlwcGVkXSwgKHNlbGYuc3ViMTFfcGF0aCwgW10sIFtdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhbGxbMyAtIDIgKiBmbGlwcGVkXSwgc2VsZi5zdWIyX3RyZWUpCiAKKyAgICBkZWYgdGVzdF93YWxrX3BydW5lKHNlbGYpOgogICAgICAgICAjIFBydW5lIHRoZSBzZWFyY2guCiAgICAgICAgIGFsbCA9IFtdCi0gICAgICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKHdhbGtfcGF0aCk6CisgICAgICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBzZWxmLndhbGsoc2VsZi53YWxrX3BhdGgpOgogICAgICAgICAgICAgYWxsLmFwcGVuZCgocm9vdCwgZGlycywgZmlsZXMpKQogICAgICAgICAgICAgIyBEb24ndCBkZXNjZW5kIGludG8gU1VCMS4KICAgICAgICAgICAgIGlmICdTVUIxJyBpbiBkaXJzOgogICAgICAgICAgICAgICAgICMgTm90ZSB0aGF0IHRoaXMgYWxzbyBtdXRhdGVzIHRoZSBkaXJzIHdlIGFwcGVuZGVkIHRvIGFsbCEKICAgICAgICAgICAgICAgICBkaXJzLnJlbW92ZSgnU1VCMScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGFsbCksIDIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWxsWzBdLCAod2Fsa19wYXRoLCBbIlNVQjIiXSwgWyJ0bXAxIl0pKQotICAgICAgICBhbGxbMV1bLTFdLnNvcnQoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFsbFsxXSwgc3ViMl90cmVlKQogCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGFsbCksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWxsWzBdLAorICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLndhbGtfcGF0aCwgWyJTVUIyIl0sIFsidG1wMSJdKSkKKworICAgICAgICBhbGxbMV1bLTFdLnNvcnQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFsbFsxXSwgc2VsZi5zdWIyX3RyZWUpCisKKyAgICBkZWYgdGVzdF93YWxrX2JvdHRvbV91cChzZWxmKToKICAgICAgICAgIyBXYWxrIGJvdHRvbS11cC4KLSAgICAgICAgYWxsID0gbGlzdChvcy53YWxrKHdhbGtfcGF0aCwgdG9wZG93bj1GYWxzZSkpCisgICAgICAgIGFsbCA9IGxpc3Qoc2VsZi53YWxrKHNlbGYud2Fsa19wYXRoLCB0b3Bkb3duPUZhbHNlKSkKKwogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihhbGwpLCA0KQogICAgICAgICAjIFdlIGNhbid0IGtub3cgd2hpY2ggb3JkZXIgU1VCMSBhbmQgU1VCMiB3aWxsIGFwcGVhciBpbi4KICAgICAgICAgIyBOb3QgZmxpcHBlZDogIFNVQjExLCBTVUIxLCBTVUIyLCBURVNURk4KQEAgLTczOSwyMCArODE4LDI4IEBACiAgICAgICAgIGZsaXBwZWQgPSBhbGxbM11bMV1bMF0gIT0gIlNVQjEiCiAgICAgICAgIGFsbFszXVsxXS5zb3J0KCkKICAgICAgICAgYWxsWzIgLSAyICogZmxpcHBlZF1bLTFdLnNvcnQoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFsbFszXSwgKHdhbGtfcGF0aCwgWyJTVUIxIiwgIlNVQjIiXSwgWyJ0bXAxIl0pKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFsbFtmbGlwcGVkXSwgKHN1YjExX3BhdGgsIFtdLCBbXSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWxsW2ZsaXBwZWQgKyAxXSwgKHN1YjFfcGF0aCwgWyJTVUIxMSJdLCBbInRtcDIiXSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWxsWzIgLSAyICogZmxpcHBlZF0sIHN1YjJfdHJlZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhbGxbM10sCisgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYud2Fsa19wYXRoLCBbIlNVQjEiLCAiU1VCMiJdLCBbInRtcDEiXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWxsW2ZsaXBwZWRdLAorICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLnN1YjExX3BhdGgsIFtdLCBbXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWxsW2ZsaXBwZWQgKyAxXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZi5zdWIxX3BhdGgsIFsiU1VCMTEiXSwgWyJ0bXAyIl0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFsbFsyIC0gMiAqIGZsaXBwZWRdLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc3ViMl90cmVlKQogCi0gICAgICAgIGlmIHN1cHBvcnQuY2FuX3N5bWxpbmsoKToKLSAgICAgICAgICAgICMgV2FsaywgZm9sbG93aW5nIHN5bWxpbmtzLgotICAgICAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsod2Fsa19wYXRoLCBmb2xsb3dsaW5rcz1UcnVlKToKLSAgICAgICAgICAgICAgICBpZiByb290ID09IGxpbmtfcGF0aDoKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXJzLCBbXSkKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlcywgWyJ0bXA0Il0pCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiRGlkbid0IGZvbGxvdyBzeW1saW5rIHdpdGggZm9sbG93bGlua3M9VHJ1ZSIpCisgICAgZGVmIHRlc3Rfd2Fsa19zeW1saW5rKHNlbGYpOgorICAgICAgICBpZiBub3Qgc3VwcG9ydC5jYW5fc3ltbGluaygpOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgibmVlZCBzeW1saW5rIHN1cHBvcnQiKQorCisgICAgICAgICMgV2FsaywgZm9sbG93aW5nIHN5bWxpbmtzLgorICAgICAgICB3YWxrX2l0ID0gc2VsZi53YWxrKHNlbGYud2Fsa19wYXRoLCBmb2xsb3dfc3ltbGlua3M9VHJ1ZSkKKyAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIHdhbGtfaXQ6CisgICAgICAgICAgICBpZiByb290ID09IHNlbGYubGlua19wYXRoOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlycywgW10pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlcywgWyJ0bXA0Il0pCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiRGlkbid0IGZvbGxvdyBzeW1saW5rIHdpdGggZm9sbG93bGlua3M9VHJ1ZSIpCiAKICAgICBkZWYgdGVhckRvd24oc2VsZik6CiAgICAgICAgICMgVGVhciBldmVyeXRoaW5nIGRvd24uICBUaGlzIGlzIGEgZGVjZW50IHVzZSBmb3IgYm90dG9tLXVwIG9uCkBAIC03NzUsNiArODYyLDE0IEBACiBjbGFzcyBGd2Fsa1Rlc3RzKFdhbGtUZXN0cyk6CiAgICAgIiIiVGVzdHMgZm9yIG9zLmZ3YWxrKCkuIiIiCiAKKyAgICBkZWYgd2FsayhzZWxmLCBkaXJlY3RvcnksIHRvcGRvd249VHJ1ZSwgZm9sbG93X3N5bWxpbmtzPUZhbHNlKToKKyAgICAgICAgd2Fsa19pdCA9IG9zLmZ3YWxrKGRpcmVjdG9yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcGRvd249dG9wZG93biwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbGxvd19zeW1saW5rcz1mb2xsb3dfc3ltbGlua3MpCisgICAgICAgIGZvciByb290LCBkaXJzLCBmaWxlcywgcm9vdF9mZCBpbiB3YWxrX2l0OgorICAgICAgICAgICAgeWllbGQgKHJvb3QsIGRpcnMsIGZpbGVzKQorCisKICAgICBkZWYgX2NvbXBhcmVfdG9fd2FsayhzZWxmLCB3YWxrX2t3YXJncywgZndhbGtfa3dhcmdzKToKICAgICAgICAgIiIiCiAgICAgICAgIGNvbXBhcmUgd2l0aCB3YWxrKCkgcmVzdWx0cy4KQEAgLTg3Niw2ICs5NzEsMjAgQEAKICAgICAgICAgb3MubWFrZWRpcnMocGF0aCwgbW9kZT1tb2RlLCBleGlzdF9vaz1UcnVlKQogICAgICAgICBvcy51bWFzayhvbGRfbWFzaykKIAorICAgICAgICAjIElzc3VlICMyNTU4MzogQSBkcml2ZSByb290IGNvdWxkIHJhaXNlIFBlcm1pc3Npb25FcnJvciBvbiBXaW5kb3dzCisgICAgICAgIG9zLm1ha2VkaXJzKG9zLnBhdGguYWJzcGF0aCgnLycpLCBleGlzdF9vaz1UcnVlKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgJ2Nob3duJyksICd0ZXN0IG5lZWRzIG9zLmNob3duJykKKyAgICBkZWYgdGVzdF9jaG93bl91aWRfZ2lkX2FyZ3VtZW50c19tdXN0X2JlX2luZGV4KHNlbGYpOgorICAgICAgICBzdGF0ID0gb3Muc3RhdChzdXBwb3J0LlRFU1RGTikKKyAgICAgICAgdWlkID0gc3RhdC5zdF91aWQKKyAgICAgICAgZ2lkID0gc3RhdC5zdF9naWQKKyAgICAgICAgZm9yIHZhbHVlIGluICgtMS4wLCAtMWosIGRlY2ltYWwuRGVjaW1hbCgtMSksIGZyYWN0aW9ucy5GcmFjdGlvbigtMiwgMikpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcy5jaG93biwgc3VwcG9ydC5URVNURk4sIHZhbHVlLCBnaWQpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9zLmNob3duLCBzdXBwb3J0LlRFU1RGTiwgdWlkLCB2YWx1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUob3MuY2hvd24oc3VwcG9ydC5URVNURk4sIHVpZCwgZ2lkKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUob3MuY2hvd24oc3VwcG9ydC5URVNURk4sIC0xLCAtMSkpCisKICAgICBkZWYgdGVzdF9leGlzdF9va19zX2lzZ2lkX2RpcmVjdG9yeShzZWxmKToKICAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihzdXBwb3J0LlRFU1RGTiwgJ2RpcjEnKQogICAgICAgICBTX0lTR0lEID0gc3RhdC5TX0lTR0lECkBAIC0xMDA3LDYgKzExMTYsMTIgQEAKICAgICAgICAgZGF0YTIgPSBzZWxmLmdldF91cmFuZG9tX3N1YnByb2Nlc3MoMTYpCiAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZGF0YTEsIGRhdGEyKQogCisKK0hBVkVfR0VURU5UUk9QWSA9IChzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ0hBVkVfR0VURU5UUk9QWScpID09IDEpCisKK0B1bml0dGVzdC5za2lwSWYoSEFWRV9HRVRFTlRST1BZLAorICAgICAgICAgICAgICAgICAiZ2V0ZW50cm9weSgpIGRvZXMgbm90IHVzZSBhIGZpbGUgZGVzY3JpcHRvciIpCitjbGFzcyBVUmFuZG9tRkRUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MocmVzb3VyY2UsICJ0ZXN0IHJlcXVpcmVzIHRoZSByZXNvdXJjZSBtb2R1bGUiKQogICAgIGRlZiB0ZXN0X3VyYW5kb21fZmFpbHVyZShzZWxmKToKICAgICAgICAgIyBDaGVjayB1cmFuZG9tKCkgZmFpbGluZyB3aGVuIGl0IGlzIG5vdCBhYmxlIHRvIG9wZW4gL2Rldi9yYW5kb20uCkBAIC0xMDMwLDYgKzExNDUsNDkgQEAKICAgICAgICAgICAgICIiIgogICAgICAgICBhc3NlcnRfcHl0aG9uX29rKCctYycsIGNvZGUpCiAKKyAgICBkZWYgdGVzdF91cmFuZG9tX2ZkX2Nsb3NlZChzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMjEyMDc6IHVyYW5kb20oKSBzaG91bGQgcmVvcGVuIGl0cyBmZCB0byAvZGV2L3VyYW5kb20gaWYKKyAgICAgICAgIyBjbG9zZWQuCisgICAgICAgIGNvZGUgPSAiIiJpZiAxOgorICAgICAgICAgICAgaW1wb3J0IG9zCisgICAgICAgICAgICBpbXBvcnQgc3lzCisgICAgICAgICAgICBvcy51cmFuZG9tKDQpCisgICAgICAgICAgICBvcy5jbG9zZXJhbmdlKDMsIDI1NikKKyAgICAgICAgICAgIHN5cy5zdGRvdXQuYnVmZmVyLndyaXRlKG9zLnVyYW5kb20oNCkpCisgICAgICAgICAgICAiIiIKKyAgICAgICAgcmMsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygnLVNjJywgY29kZSkKKworICAgIGRlZiB0ZXN0X3VyYW5kb21fZmRfcmVvcGVuZWQoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzIxMjA3OiB1cmFuZG9tKCkgc2hvdWxkIGRldGVjdCBpdHMgZmQgdG8gL2Rldi91cmFuZG9tCisgICAgICAgICMgY2hhbmdlZCB0byBzb21ldGhpbmcgZWxzZSwgYW5kIHJlb3BlbiBpdC4KKyAgICAgICAgd2l0aCBvcGVuKHN1cHBvcnQuVEVTVEZOLCAnd2InKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShiIngiICogMjU2KQorICAgICAgICBzZWxmLmFkZENsZWFudXAob3MudW5saW5rLCBzdXBwb3J0LlRFU1RGTikKKyAgICAgICAgY29kZSA9ICIiImlmIDE6CisgICAgICAgICAgICBpbXBvcnQgb3MKKyAgICAgICAgICAgIGltcG9ydCBzeXMKKyAgICAgICAgICAgIG9zLnVyYW5kb20oNCkKKyAgICAgICAgICAgIGZvciBmZCBpbiByYW5nZSgzLCAyNTYpOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgb3MuY2xvc2UoZmQpCisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAjIEZvdW5kIHRoZSB1cmFuZG9tIGZkIChYWFggaG9wZWZ1bGx5KQorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgb3MuY2xvc2VyYW5nZSgzLCAyNTYpCisgICAgICAgICAgICB3aXRoIG9wZW4oe1RFU1RGTiFyfSwgJ3JiJykgYXMgZjoKKyAgICAgICAgICAgICAgICBvcy5kdXAyKGYuZmlsZW5vKCksIGZkKQorICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQuYnVmZmVyLndyaXRlKG9zLnVyYW5kb20oNCkpCisgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC5idWZmZXIud3JpdGUob3MudXJhbmRvbSg0KSkKKyAgICAgICAgICAgICIiIi5mb3JtYXQoVEVTVEZOPXN1cHBvcnQuVEVTVEZOKQorICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCctU2MnLCBjb2RlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihvdXQpLCA4KQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKG91dFswOjRdLCBvdXRbNDo4XSkKKyAgICAgICAgcmMsIG91dDIsIGVycjIgPSBhc3NlcnRfcHl0aG9uX29rKCctU2MnLCBjb2RlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihvdXQyKSwgOCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChvdXQyLCBvdXQpCisKIAogQGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIKIGRlZiBfZXhlY3ZwZV9tb2NrdXAoZGVmcGF0aD1Ob25lKToKQEAgLTExMzIsMjcgKzEyOTAsMjcgQEAKIEB1bml0dGVzdC5za2lwVW5sZXNzKHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiLCAiV2luMzIgc3BlY2lmaWMgdGVzdHMiKQogY2xhc3MgV2luMzJFcnJvclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9yZW5hbWUoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFdpbmRvd3NFcnJvciwgb3MucmVuYW1lLCBzdXBwb3J0LlRFU1RGTiwgc3VwcG9ydC5URVNURk4rIi5iYWsiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBvcy5yZW5hbWUsIHN1cHBvcnQuVEVTVEZOLCBzdXBwb3J0LlRFU1RGTisiLmJhayIpCiAKICAgICBkZWYgdGVzdF9yZW1vdmUoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFdpbmRvd3NFcnJvciwgb3MucmVtb3ZlLCBzdXBwb3J0LlRFU1RGTikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgb3MucmVtb3ZlLCBzdXBwb3J0LlRFU1RGTikKIAogICAgIGRlZiB0ZXN0X2NoZGlyKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhXaW5kb3dzRXJyb3IsIG9zLmNoZGlyLCBzdXBwb3J0LlRFU1RGTikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgb3MuY2hkaXIsIHN1cHBvcnQuVEVTVEZOKQogCiAgICAgZGVmIHRlc3RfbWtkaXIoc2VsZik6CiAgICAgICAgIGYgPSBvcGVuKHN1cHBvcnQuVEVTVEZOLCAidyIpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFdpbmRvd3NFcnJvciwgb3MubWtkaXIsIHN1cHBvcnQuVEVTVEZOKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgb3MubWtkaXIsIHN1cHBvcnQuVEVTVEZOKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgZi5jbG9zZSgpCiAgICAgICAgICAgICBvcy51bmxpbmsoc3VwcG9ydC5URVNURk4pCiAKICAgICBkZWYgdGVzdF91dGltZShzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoV2luZG93c0Vycm9yLCBvcy51dGltZSwgc3VwcG9ydC5URVNURk4sIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIG9zLnV0aW1lLCBzdXBwb3J0LlRFU1RGTiwgTm9uZSkKIAogICAgIGRlZiB0ZXN0X2NobW9kKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhXaW5kb3dzRXJyb3IsIG9zLmNobW9kLCBzdXBwb3J0LlRFU1RGTiwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgb3MuY2htb2QsIHN1cHBvcnQuVEVTVEZOLCAwKQogCiBjbGFzcyBUZXN0SW52YWxpZEZEKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBzaW5nbGVzID0gWyJmY2hkaXIiLCAiZHVwIiwgImZkb3BlbiIsICJmZGF0YXN5bmMiLCAiZnN0YXQiLApAQCAtMTE3Myw3ICsxMzMxLDcgQEAKICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5lcnJubywgZXJybm8uRUJBREYpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoIiVyIGRpZG4ndCByYWlzZSBhIE9TRXJyb3Igd2l0aCBhIGJhZCBmaWxlIGRlc2NyaXB0b3IiCisgICAgICAgICAgICBzZWxmLmZhaWwoIiVyIGRpZG4ndCByYWlzZSBhbiBPU0Vycm9yIHdpdGggYSBiYWQgZmlsZSBkZXNjcmlwdG9yIgogICAgICAgICAgICAgICAgICAgICAgICUgZikKIAogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICdpc2F0dHknKSwgJ3Rlc3QgbmVlZHMgb3MuaXNhdHR5KCknKQpAQCAtMTI4Niw0MSArMTQ0NCw1NyBAQAogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICdzZXR1aWQnKSwgJ3Rlc3QgbmVlZHMgb3Muc2V0dWlkKCknKQogICAgIGRlZiB0ZXN0X3NldHVpZChzZWxmKToKICAgICAgICAgaWYgb3MuZ2V0dWlkKCkgIT0gMDoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKG9zLmVycm9yLCBvcy5zZXR1aWQsIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBvcy5zZXR1aWQsIDApCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIG9zLnNldHVpZCwgMTw8MzIpCiAKICAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKG9zLCAnc2V0Z2lkJyksICd0ZXN0IG5lZWRzIG9zLnNldGdpZCgpJykKICAgICBkZWYgdGVzdF9zZXRnaWQoc2VsZik6CiAgICAgICAgIGlmIG9zLmdldHVpZCgpICE9IDAgYW5kIG5vdCBIQVZFX1dIRUVMX0dST1VQOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMob3MuZXJyb3IsIG9zLnNldGdpZCwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIG9zLnNldGdpZCwgMCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgb3Muc2V0Z2lkLCAxPDwzMikKIAogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICdzZXRldWlkJyksICd0ZXN0IG5lZWRzIG9zLnNldGV1aWQoKScpCiAgICAgZGVmIHRlc3Rfc2V0ZXVpZChzZWxmKToKICAgICAgICAgaWYgb3MuZ2V0dWlkKCkgIT0gMDoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKG9zLmVycm9yLCBvcy5zZXRldWlkLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgb3Muc2V0ZXVpZCwgMCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgb3Muc2V0ZXVpZCwgMTw8MzIpCiAKICAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKG9zLCAnc2V0ZWdpZCcpLCAndGVzdCBuZWVkcyBvcy5zZXRlZ2lkKCknKQogICAgIGRlZiB0ZXN0X3NldGVnaWQoc2VsZik6CiAgICAgICAgIGlmIG9zLmdldHVpZCgpICE9IDAgYW5kIG5vdCBIQVZFX1dIRUVMX0dST1VQOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMob3MuZXJyb3IsIG9zLnNldGVnaWQsIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBvcy5zZXRlZ2lkLCAwKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBvcy5zZXRlZ2lkLCAxPDwzMikKIAogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICdzZXRyZXVpZCcpLCAndGVzdCBuZWVkcyBvcy5zZXRyZXVpZCgpJykKICAgICBkZWYgdGVzdF9zZXRyZXVpZChzZWxmKToKICAgICAgICAgaWYgb3MuZ2V0dWlkKCkgIT0gMDoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKG9zLmVycm9yLCBvcy5zZXRyZXVpZCwgMCwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIG9zLnNldHJldWlkLCAwLCAwKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBvcy5zZXRyZXVpZCwgMTw8MzIsIDApCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIG9zLnNldHJldWlkLCAwLCAxPDwzMikKIAorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICdzZXRyZXVpZCcpLCAndGVzdCBuZWVkcyBvcy5zZXRyZXVpZCgpJykKKyAgICBkZWYgdGVzdF9zZXRyZXVpZF9uZWcxKHNlbGYpOgorICAgICAgICAjIE5lZWRzIHRvIGFjY2VwdCAtMS4gIFdlIHJ1biB0aGlzIGluIGEgc3VicHJvY2VzcyB0byBhdm9pZAorICAgICAgICAjIGFsdGVyaW5nIHRoZSB0ZXN0IHJ1bm5lcidzIHByb2Nlc3Mgc3RhdGUgKGlzc3VlODA0NSkuCisgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfY2FsbChbCisgICAgICAgICAgICAgICAgc3lzLmV4ZWN1dGFibGUsICctYycsCisgICAgICAgICAgICAgICAgJ2ltcG9ydCBvcyxzeXM7b3Muc2V0cmV1aWQoLTEsLTEpO3N5cy5leGl0KDApJ10pCisKICAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKG9zLCAnc2V0cmVnaWQnKSwgJ3Rlc3QgbmVlZHMgb3Muc2V0cmVnaWQoKScpCiAgICAgZGVmIHRlc3Rfc2V0cmVnaWQoc2VsZik6CiAgICAgICAgIGlmIG9zLmdldHVpZCgpICE9IDAgYW5kIG5vdCBIQVZFX1dIRUVMX0dST1VQOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMob3MuZXJyb3IsIG9zLnNldHJlZ2lkLCAwLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgb3Muc2V0cmVnaWQsIDAsIDApCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIG9zLnNldHJlZ2lkLCAxPDwzMiwgMCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgb3Muc2V0cmVnaWQsIDAsIDE8PDMyKQogCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgJ3NldHJlZ2lkJyksICd0ZXN0IG5lZWRzIG9zLnNldHJlZ2lkKCknKQorICAgIGRlZiB0ZXN0X3NldHJlZ2lkX25lZzEoc2VsZik6CisgICAgICAgICMgTmVlZHMgdG8gYWNjZXB0IC0xLiAgV2UgcnVuIHRoaXMgaW4gYSBzdWJwcm9jZXNzIHRvIGF2b2lkCisgICAgICAgICMgYWx0ZXJpbmcgdGhlIHRlc3QgcnVubmVyJ3MgcHJvY2VzcyBzdGF0ZSAoaXNzdWU4MDQ1KS4KKyAgICAgICAgc3VicHJvY2Vzcy5jaGVja19jYWxsKFsKKyAgICAgICAgICAgICAgICBzeXMuZXhlY3V0YWJsZSwgJy1jJywKKyAgICAgICAgICAgICAgICAnaW1wb3J0IG9zLHN5cztvcy5zZXRyZWdpZCgtMSwtMSk7c3lzLmV4aXQoMCknXSkKKwogQHVuaXR0ZXN0LnNraXBJZihzeXMucGxhdGZvcm0gPT0gIndpbjMyIiwgIlBvc2l4IHNwZWNpZmljIHRlc3RzIikKIGNsYXNzIFBlcDM4M1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgc2V0VXAoc2VsZik6CkBAIC0xNDg2LDcgKzE2NjAsNyBAQAogICAgICAgICAgICAgb3Mua2lsbChwcm9jLnBpZCwgc2lnbmFsLlNJR0lOVCkKICAgICAgICAgICAgIHNlbGYuZmFpbCgic3VicHJvY2VzcyBkaWQgbm90IHN0b3Agb24ge30iLmZvcm1hdChuYW1lKSkKIAotICAgIEB1bml0dGVzdC5za2lwKCJzdWJwcm9jZXNzZXMgYXJlbid0IGluaGVyaXRpbmcgQ1RSTCtDIHByb3BlcnR5IikKKyAgICBAdW5pdHRlc3Quc2tpcCgic3VicHJvY2Vzc2VzIGFyZW4ndCBpbmhlcml0aW5nIEN0cmwrQyBwcm9wZXJ0eSIpCiAgICAgZGVmIHRlc3RfQ1RSTF9DX0VWRU5UKHNlbGYpOgogICAgICAgICBmcm9tIGN0eXBlcyBpbXBvcnQgd2ludHlwZXMKICAgICAgICAgaW1wb3J0IGN0eXBlcwpAQCAtMTQ5OSw3ICsxNjczLDcgQEAKICAgICAgICAgU2V0Q29uc29sZUN0cmxIYW5kbGVyLnJlc3R5cGUgPSB3aW50eXBlcy5CT09MCiAKICAgICAgICAgIyBDYWxsaW5nIHRoaXMgd2l0aCBOVUxMIGFuZCBGQUxTRSBjYXVzZXMgdGhlIGNhbGxpbmcgcHJvY2VzcyB0bwotICAgICAgICAjIGhhbmRsZSBDVFJMK0MsIHJhdGhlciB0aGFuIGlnbm9yZSBpdC4gVGhpcyBwcm9wZXJ0eSBpcyBpbmhlcml0ZWQKKyAgICAgICAgIyBoYW5kbGUgQ3RybCtDLCByYXRoZXIgdGhhbiBpZ25vcmUgaXQuIFRoaXMgcHJvcGVydHkgaXMgaW5oZXJpdGVkCiAgICAgICAgICMgYnkgc3VicHJvY2Vzc2VzLgogICAgICAgICBTZXRDb25zb2xlQ3RybEhhbmRsZXIoTlVMTCwgMCkKIApAQCAtMTUxMCw2ICsxNjg0LDUyIEBACiAKIAogQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3lzLnBsYXRmb3JtID09ICJ3aW4zMiIsICJXaW4zMiBzcGVjaWZpYyB0ZXN0cyIpCitjbGFzcyBXaW4zMkxpc3RkaXJUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiVGVzdCBsaXN0ZGlyIG9uIFdpbmRvd3MuIiIiCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuY3JlYXRlZF9wYXRocyA9IFtdCisgICAgICAgIGZvciBpIGluIHJhbmdlKDIpOgorICAgICAgICAgICAgZGlyX25hbWUgPSAnU1VCJWQnICUgaQorICAgICAgICAgICAgZGlyX3BhdGggPSBvcy5wYXRoLmpvaW4oc3VwcG9ydC5URVNURk4sIGRpcl9uYW1lKQorICAgICAgICAgICAgZmlsZV9uYW1lID0gJ0ZJTEUlZCcgJSBpCisgICAgICAgICAgICBmaWxlX3BhdGggPSBvcy5wYXRoLmpvaW4oc3VwcG9ydC5URVNURk4sIGZpbGVfbmFtZSkKKyAgICAgICAgICAgIG9zLm1ha2VkaXJzKGRpcl9wYXRoKQorICAgICAgICAgICAgd2l0aCBvcGVuKGZpbGVfcGF0aCwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUoIkknbSAlcyBhbmQgcHJvdWQgb2YgaXQuIEJsYW1lIHRlc3Rfb3MuXG4iICUgZmlsZV9wYXRoKQorICAgICAgICAgICAgc2VsZi5jcmVhdGVkX3BhdGhzLmV4dGVuZChbZGlyX25hbWUsIGZpbGVfbmFtZV0pCisgICAgICAgIHNlbGYuY3JlYXRlZF9wYXRocy5zb3J0KCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2h1dGlsLnJtdHJlZShzdXBwb3J0LlRFU1RGTikKKworICAgIGRlZiB0ZXN0X2xpc3RkaXJfbm9fZXh0ZW5kZWRfcGF0aChzZWxmKToKKyAgICAgICAgIiIiVGVzdCB3aGVuIHRoZSBwYXRoIGlzIG5vdCBhbiAiZXh0ZW5kZWQiIHBhdGguIiIiCisgICAgICAgICMgdW5pY29kZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgIHNvcnRlZChvcy5saXN0ZGlyKHN1cHBvcnQuVEVTVEZOKSksCisgICAgICAgICAgICAgICAgc2VsZi5jcmVhdGVkX3BhdGhzKQorICAgICAgICAjIGJ5dGVzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgc29ydGVkKG9zLmxpc3RkaXIob3MuZnNlbmNvZGUoc3VwcG9ydC5URVNURk4pKSksCisgICAgICAgICAgICAgICAgW29zLmZzZW5jb2RlKHBhdGgpIGZvciBwYXRoIGluIHNlbGYuY3JlYXRlZF9wYXRoc10pCisKKyAgICBkZWYgdGVzdF9saXN0ZGlyX2V4dGVuZGVkX3BhdGgoc2VsZik6CisgICAgICAgICIiIlRlc3Qgd2hlbiB0aGUgcGF0aCBzdGFydHMgd2l0aCAnXFxcXD9cXCcuIiIiCisgICAgICAgICMgU2VlOiBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvd2luZG93cy9kZXNrdG9wL2FhMzY1MjQ3KHY9dnMuODUpLmFzcHgjbWF4cGF0aAorICAgICAgICAjIHVuaWNvZGUKKyAgICAgICAgcGF0aCA9ICdcXFxcP1xcJyArIG9zLnBhdGguYWJzcGF0aChzdXBwb3J0LlRFU1RGTikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICBzb3J0ZWQob3MubGlzdGRpcihwYXRoKSksCisgICAgICAgICAgICAgICAgc2VsZi5jcmVhdGVkX3BhdGhzKQorICAgICAgICAjIGJ5dGVzCisgICAgICAgIHBhdGggPSBiJ1xcXFw/XFwnICsgb3MuZnNlbmNvZGUob3MucGF0aC5hYnNwYXRoKHN1cHBvcnQuVEVTVEZOKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICBzb3J0ZWQob3MubGlzdGRpcihwYXRoKSksCisgICAgICAgICAgICAgICAgW29zLmZzZW5jb2RlKHBhdGgpIGZvciBwYXRoIGluIHNlbGYuY3JlYXRlZF9wYXRoc10pCisKKworQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3lzLnBsYXRmb3JtID09ICJ3aW4zMiIsICJXaW4zMiBzcGVjaWZpYyB0ZXN0cyIpCiBAc3VwcG9ydC5za2lwX3VubGVzc19zeW1saW5rCiBjbGFzcyBXaW4zMlN5bWxpbmtUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZmlsZWxpbmsgPSAnZmlsZWxpbmt0ZXN0JwpAQCAtMTk0Nyw2ICsyMTY3LDE0IEBACiAgICAgICAgICAgICBvcy5zZW5kZmlsZShzZWxmLnNvY2tubywgc2VsZi5maWxlbm8sIC0xLCA0MDk2KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5lcnJubywgZXJybm8uRUlOVkFMKQogCisgICAgZGVmIHRlc3Rfa2V5d29yZHMoc2VsZik6CisgICAgICAgICMgS2V5d29yZCBhcmd1bWVudHMgc2hvdWxkIGJlIHN1cHBvcnRlZAorICAgICAgICBvcy5zZW5kZmlsZShvdXQ9c2VsZi5zb2Nrbm8sIG9mZnNldD0wLCBjb3VudD00MDk2LAorICAgICAgICAgICAgKip7J2luJzogc2VsZi5maWxlbm99KQorICAgICAgICBpZiBzZWxmLlNVUFBPUlRfSEVBREVSU19UUkFJTEVSUzoKKyAgICAgICAgICAgIG9zLnNlbmRmaWxlKHNlbGYuc29ja25vLCBzZWxmLmZpbGVubywgb2Zmc2V0PTAsIGNvdW50PTQwOTYsCisgICAgICAgICAgICAgICAgaGVhZGVycz0oKSwgdHJhaWxlcnM9KCksIGZsYWdzPTApCisKICAgICAjIC0tLSBoZWFkZXJzIC8gdHJhaWxlcnMgdGVzdHMKIAogICAgIEByZXF1aXJlc19oZWFkZXJzX3RyYWlsZXJzCkBAIC0yMTc0LDIzICsyNDAyLDIxNyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkLCBhY3R1YWwpCiAKIAorY2xhc3MgT1NFcnJvclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIGNsYXNzIFN0cihzdHIpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIHNlbGYuYnl0ZXNfZmlsZW5hbWVzID0gW10KKyAgICAgICAgc2VsZi51bmljb2RlX2ZpbGVuYW1lcyA9IFtdCisgICAgICAgIGlmIHN1cHBvcnQuVEVTVEZOX1VORU5DT0RBQkxFIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgZGVjb2RlZCA9IHN1cHBvcnQuVEVTVEZOX1VORU5DT0RBQkxFCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBkZWNvZGVkID0gc3VwcG9ydC5URVNURk4KKyAgICAgICAgc2VsZi51bmljb2RlX2ZpbGVuYW1lcy5hcHBlbmQoZGVjb2RlZCkKKyAgICAgICAgc2VsZi51bmljb2RlX2ZpbGVuYW1lcy5hcHBlbmQoU3RyKGRlY29kZWQpKQorICAgICAgICBpZiBzdXBwb3J0LlRFU1RGTl9VTkRFQ09EQUJMRSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGVuY29kZWQgPSBzdXBwb3J0LlRFU1RGTl9VTkRFQ09EQUJMRQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZW5jb2RlZCA9IG9zLmZzZW5jb2RlKHN1cHBvcnQuVEVTVEZOKQorICAgICAgICBzZWxmLmJ5dGVzX2ZpbGVuYW1lcy5hcHBlbmQoZW5jb2RlZCkKKyAgICAgICAgc2VsZi5ieXRlc19maWxlbmFtZXMuYXBwZW5kKG1lbW9yeXZpZXcoZW5jb2RlZCkpCisKKyAgICAgICAgc2VsZi5maWxlbmFtZXMgPSBzZWxmLmJ5dGVzX2ZpbGVuYW1lcyArIHNlbGYudW5pY29kZV9maWxlbmFtZXMKKworICAgIGRlZiB0ZXN0X29zZXJyb3JfZmlsZW5hbWUoc2VsZik6CisgICAgICAgIGZ1bmNzID0gWworICAgICAgICAgICAgKHNlbGYuZmlsZW5hbWVzLCBvcy5jaGRpciwpLAorICAgICAgICAgICAgKHNlbGYuZmlsZW5hbWVzLCBvcy5jaG1vZCwgMG83NzcpLAorICAgICAgICAgICAgKHNlbGYuZmlsZW5hbWVzLCBvcy5sc3RhdCwpLAorICAgICAgICAgICAgKHNlbGYuZmlsZW5hbWVzLCBvcy5vcGVuLCBvcy5PX1JET05MWSksCisgICAgICAgICAgICAoc2VsZi5maWxlbmFtZXMsIG9zLnJtZGlyLCksCisgICAgICAgICAgICAoc2VsZi5maWxlbmFtZXMsIG9zLnN0YXQsKSwKKyAgICAgICAgICAgIChzZWxmLmZpbGVuYW1lcywgb3MudW5saW5rLCksCisgICAgICAgIF0KKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICJ3aW4zMiI6CisgICAgICAgICAgICBmdW5jcy5leHRlbmQoKAorICAgICAgICAgICAgICAgIChzZWxmLmJ5dGVzX2ZpbGVuYW1lcywgb3MucmVuYW1lLCBiImRzdCIpLAorICAgICAgICAgICAgICAgIChzZWxmLmJ5dGVzX2ZpbGVuYW1lcywgb3MucmVwbGFjZSwgYiJkc3QiKSwKKyAgICAgICAgICAgICAgICAoc2VsZi51bmljb2RlX2ZpbGVuYW1lcywgb3MucmVuYW1lLCAiZHN0IiksCisgICAgICAgICAgICAgICAgKHNlbGYudW5pY29kZV9maWxlbmFtZXMsIG9zLnJlcGxhY2UsICJkc3QiKSwKKyAgICAgICAgICAgICAgICAjIElzc3VlICMxNjQxNDogRG9uJ3QgdGVzdCB1bmRlY29kYWJsZSBuYW1lcyB3aXRoIGxpc3RkaXIoKQorICAgICAgICAgICAgICAgICMgYmVjYXVzZSBvZiBhIFdpbmRvd3MgYnVnLgorICAgICAgICAgICAgICAgICMKKyAgICAgICAgICAgICAgICAjIFdpdGggdGhlIEFOU0kgY29kZSBwYWdlIDkzMiwgb3MubGlzdGRpcihiJ1x4ZTcnKSByZXR1cm4gYW4KKyAgICAgICAgICAgICAgICAjIGVtcHR5IGxpc3QgKGluc3RlYWQgb2YgZmFpbGluZyksIHdoZXJlYXMgb3MubGlzdGRpcihiJ1x4ZmYnKQorICAgICAgICAgICAgICAgICMgcmFpc2VzIGEgRmlsZU5vdEZvdW5kRXJyb3IuIEl0IGxvb2tzIGxpa2UgYSBXaW5kb3dzIGJ1ZzoKKyAgICAgICAgICAgICAgICAjIGInXHhlNycgZGlyZWN0b3J5IGRvZXMgbm90IGV4aXN0LCBGaW5kRmlyc3RGaWxlQShiJ1x4ZTcnKQorICAgICAgICAgICAgICAgICMgZmFpbHMgd2l0aCBFUlJPUl9GSUxFX05PVF9GT1VORCAoMiksIGluc3RlYWQgb2YKKyAgICAgICAgICAgICAgICAjIEVSUk9SX1BBVEhfTk9UX0ZPVU5EICgzKS4KKyAgICAgICAgICAgICAgICAoc2VsZi51bmljb2RlX2ZpbGVuYW1lcywgb3MubGlzdGRpciwpLAorICAgICAgICAgICAgKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZ1bmNzLmV4dGVuZCgoCisgICAgICAgICAgICAgICAgKHNlbGYuZmlsZW5hbWVzLCBvcy5saXN0ZGlyLCksCisgICAgICAgICAgICAgICAgKHNlbGYuZmlsZW5hbWVzLCBvcy5yZW5hbWUsICJkc3QiKSwKKyAgICAgICAgICAgICAgICAoc2VsZi5maWxlbmFtZXMsIG9zLnJlcGxhY2UsICJkc3QiKSwKKyAgICAgICAgICAgICkpCisgICAgICAgIGlmIGhhc2F0dHIob3MsICJjaG93biIpOgorICAgICAgICAgICAgZnVuY3MuYXBwZW5kKChzZWxmLmZpbGVuYW1lcywgb3MuY2hvd24sIDAsIDApKQorICAgICAgICBpZiBoYXNhdHRyKG9zLCAibGNob3duIik6CisgICAgICAgICAgICBmdW5jcy5hcHBlbmQoKHNlbGYuZmlsZW5hbWVzLCBvcy5sY2hvd24sIDAsIDApKQorICAgICAgICBpZiBoYXNhdHRyKG9zLCAidHJ1bmNhdGUiKToKKyAgICAgICAgICAgIGZ1bmNzLmFwcGVuZCgoc2VsZi5maWxlbmFtZXMsIG9zLnRydW5jYXRlLCAwKSkKKyAgICAgICAgaWYgaGFzYXR0cihvcywgImNoZmxhZ3MiKToKKyAgICAgICAgICAgIGZ1bmNzLmFwcGVuZCgoc2VsZi5maWxlbmFtZXMsIG9zLmNoZmxhZ3MsIDApKQorICAgICAgICBpZiBoYXNhdHRyKG9zLCAibGNoZmxhZ3MiKToKKyAgICAgICAgICAgIGZ1bmNzLmFwcGVuZCgoc2VsZi5maWxlbmFtZXMsIG9zLmxjaGZsYWdzLCAwKSkKKyAgICAgICAgaWYgaGFzYXR0cihvcywgImNocm9vdCIpOgorICAgICAgICAgICAgZnVuY3MuYXBwZW5kKChzZWxmLmZpbGVuYW1lcywgb3MuY2hyb290LCkpCisgICAgICAgIGlmIGhhc2F0dHIob3MsICJsaW5rIik6CisgICAgICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gIndpbjMyIjoKKyAgICAgICAgICAgICAgICBmdW5jcy5hcHBlbmQoKHNlbGYuYnl0ZXNfZmlsZW5hbWVzLCBvcy5saW5rLCBiImRzdCIpKQorICAgICAgICAgICAgICAgIGZ1bmNzLmFwcGVuZCgoc2VsZi51bmljb2RlX2ZpbGVuYW1lcywgb3MubGluaywgImRzdCIpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBmdW5jcy5hcHBlbmQoKHNlbGYuZmlsZW5hbWVzLCBvcy5saW5rLCAiZHN0IikpCisgICAgICAgIGlmIGhhc2F0dHIob3MsICJsaXN0eGF0dHIiKToKKyAgICAgICAgICAgIGZ1bmNzLmV4dGVuZCgoCisgICAgICAgICAgICAgICAgKHNlbGYuZmlsZW5hbWVzLCBvcy5saXN0eGF0dHIsKSwKKyAgICAgICAgICAgICAgICAoc2VsZi5maWxlbmFtZXMsIG9zLmdldHhhdHRyLCAidXNlci50ZXN0IiksCisgICAgICAgICAgICAgICAgKHNlbGYuZmlsZW5hbWVzLCBvcy5zZXR4YXR0ciwgInVzZXIudGVzdCIsIGIndXNlcicpLAorICAgICAgICAgICAgICAgIChzZWxmLmZpbGVuYW1lcywgb3MucmVtb3ZleGF0dHIsICJ1c2VyLnRlc3QiKSwKKyAgICAgICAgICAgICkpCisgICAgICAgIGlmIGhhc2F0dHIob3MsICJsY2htb2QiKToKKyAgICAgICAgICAgIGZ1bmNzLmFwcGVuZCgoc2VsZi5maWxlbmFtZXMsIG9zLmxjaG1vZCwgMG83NzcpKQorICAgICAgICBpZiBoYXNhdHRyKG9zLCAicmVhZGxpbmsiKToKKyAgICAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiOgorICAgICAgICAgICAgICAgIGZ1bmNzLmFwcGVuZCgoc2VsZi51bmljb2RlX2ZpbGVuYW1lcywgb3MucmVhZGxpbmssKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZnVuY3MuYXBwZW5kKChzZWxmLmZpbGVuYW1lcywgb3MucmVhZGxpbmssKSkKKworICAgICAgICBmb3IgZmlsZW5hbWVzLCBmdW5jLCAqZnVuY19hcmdzIGluIGZ1bmNzOgorICAgICAgICAgICAgZm9yIG5hbWUgaW4gZmlsZW5hbWVzOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgZnVuYyhuYW1lLCAqZnVuY19hcmdzKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhlcnIuZmlsZW5hbWUsIG5hbWUpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJObyBleGNlcHRpb24gdGhyb3duIGJ5IHt9Ii5mb3JtYXQoZnVuYykpCisKK2NsYXNzIENQVUNvdW50VGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2NwdV9jb3VudChzZWxmKToKKyAgICAgICAgY3B1cyA9IG9zLmNwdV9jb3VudCgpCisgICAgICAgIGlmIGNwdXMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoY3B1cywgaW50KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKGNwdXMsIDApCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJDb3VsZCBub3QgZGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgQ1BVcyIpCisKKworY2xhc3MgRkRJbmhlcml0YW5jZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9nZXRfc2V0X2luaGVyaXRhYmxlKHNlbGYpOgorICAgICAgICBmZCA9IG9zLm9wZW4oX19maWxlX18sIG9zLk9fUkRPTkxZKQorICAgICAgICBzZWxmLmFkZENsZWFudXAob3MuY2xvc2UsIGZkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLmdldF9pbmhlcml0YWJsZShmZCksIEZhbHNlKQorCisgICAgICAgIG9zLnNldF9pbmhlcml0YWJsZShmZCwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5nZXRfaW5oZXJpdGFibGUoZmQpLCBUcnVlKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihmY250bCBpcyBOb25lLCAibmVlZCBmY250bCIpCisgICAgZGVmIHRlc3RfZ2V0X2luaGVyaXRhYmxlX2Nsb2V4ZWMoc2VsZik6CisgICAgICAgIGZkID0gb3Mub3BlbihfX2ZpbGVfXywgb3MuT19SRE9OTFkpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy5jbG9zZSwgZmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MuZ2V0X2luaGVyaXRhYmxlKGZkKSwgRmFsc2UpCisKKyAgICAgICAgIyBjbGVhciBGRF9DTE9FWEVDIGZsYWcKKyAgICAgICAgZmxhZ3MgPSBmY250bC5mY250bChmZCwgZmNudGwuRl9HRVRGRCkKKyAgICAgICAgZmxhZ3MgJj0gfmZjbnRsLkZEX0NMT0VYRUMKKyAgICAgICAgZmNudGwuZmNudGwoZmQsIGZjbnRsLkZfU0VURkQsIGZsYWdzKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MuZ2V0X2luaGVyaXRhYmxlKGZkKSwgVHJ1ZSkKKworICAgIEB1bml0dGVzdC5za2lwSWYoZmNudGwgaXMgTm9uZSwgIm5lZWQgZmNudGwiKQorICAgIGRlZiB0ZXN0X3NldF9pbmhlcml0YWJsZV9jbG9leGVjKHNlbGYpOgorICAgICAgICBmZCA9IG9zLm9wZW4oX19maWxlX18sIG9zLk9fUkRPTkxZKQorICAgICAgICBzZWxmLmFkZENsZWFudXAob3MuY2xvc2UsIGZkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZjbnRsLmZjbnRsKGZkLCBmY250bC5GX0dFVEZEKSAmIGZjbnRsLkZEX0NMT0VYRUMsCisgICAgICAgICAgICAgICAgICAgICAgICAgZmNudGwuRkRfQ0xPRVhFQykKKworICAgICAgICBvcy5zZXRfaW5oZXJpdGFibGUoZmQsIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmNudGwuZmNudGwoZmQsIGZjbnRsLkZfR0VURkQpICYgZmNudGwuRkRfQ0xPRVhFQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAwKQorCisgICAgZGVmIHRlc3Rfb3BlbihzZWxmKToKKyAgICAgICAgZmQgPSBvcy5vcGVuKF9fZmlsZV9fLCBvcy5PX1JET05MWSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9zLmNsb3NlLCBmZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5nZXRfaW5oZXJpdGFibGUoZmQpLCBGYWxzZSkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICdwaXBlJyksICJuZWVkIG9zLnBpcGUoKSIpCisgICAgZGVmIHRlc3RfcGlwZShzZWxmKToKKyAgICAgICAgcmZkLCB3ZmQgPSBvcy5waXBlKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9zLmNsb3NlLCByZmQpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy5jbG9zZSwgd2ZkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLmdldF9pbmhlcml0YWJsZShyZmQpLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5nZXRfaW5oZXJpdGFibGUod2ZkKSwgRmFsc2UpCisKKyAgICBkZWYgdGVzdF9kdXAoc2VsZik6CisgICAgICAgIGZkMSA9IG9zLm9wZW4oX19maWxlX18sIG9zLk9fUkRPTkxZKQorICAgICAgICBzZWxmLmFkZENsZWFudXAob3MuY2xvc2UsIGZkMSkKKworICAgICAgICBmZDIgPSBvcy5kdXAoZmQxKQorICAgICAgICBzZWxmLmFkZENsZWFudXAob3MuY2xvc2UsIGZkMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5nZXRfaW5oZXJpdGFibGUoZmQyKSwgRmFsc2UpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKG9zLCAnZHVwMicpLCAibmVlZCBvcy5kdXAyKCkiKQorICAgIGRlZiB0ZXN0X2R1cDIoc2VsZik6CisgICAgICAgIGZkID0gb3Mub3BlbihfX2ZpbGVfXywgb3MuT19SRE9OTFkpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy5jbG9zZSwgZmQpCisKKyAgICAgICAgIyBpbmhlcml0YWJsZSBieSBkZWZhdWx0CisgICAgICAgIGZkMiA9IG9zLm9wZW4oX19maWxlX18sIG9zLk9fUkRPTkxZKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBvcy5kdXAyKGZkLCBmZDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLmdldF9pbmhlcml0YWJsZShmZDIpLCBUcnVlKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MuY2xvc2UoZmQyKQorCisgICAgICAgICMgZm9yY2Ugbm9uLWluaGVyaXRhYmxlCisgICAgICAgIGZkMyA9IG9zLm9wZW4oX19maWxlX18sIG9zLk9fUkRPTkxZKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBvcy5kdXAyKGZkLCBmZDMsIGluaGVyaXRhYmxlPUZhbHNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5nZXRfaW5oZXJpdGFibGUoZmQzKSwgRmFsc2UpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvcy5jbG9zZShmZDMpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKG9zLCAnb3BlbnB0eScpLCAibmVlZCBvcy5vcGVucHR5KCkiKQorICAgIGRlZiB0ZXN0X29wZW5wdHkoc2VsZik6CisgICAgICAgIG1hc3Rlcl9mZCwgc2xhdmVfZmQgPSBvcy5vcGVucHR5KCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9zLmNsb3NlLCBtYXN0ZXJfZmQpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy5jbG9zZSwgc2xhdmVfZmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MuZ2V0X2luaGVyaXRhYmxlKG1hc3Rlcl9mZCksIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLmdldF9pbmhlcml0YWJsZShzbGF2ZV9mZCksIEZhbHNlKQorCisKIEBzdXBwb3J0LnJlYXBfdGhyZWFkcwogZGVmIHRlc3RfbWFpbigpOgogICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KAogICAgICAgICBGaWxlVGVzdHMsCiAgICAgICAgIFN0YXRBdHRyaWJ1dGVUZXN0cywKKyAgICAgICAgVXRpbWVUZXN0cywKICAgICAgICAgRW52aXJvblRlc3RzLAogICAgICAgICBXYWxrVGVzdHMsCiAgICAgICAgIEZ3YWxrVGVzdHMsCiAgICAgICAgIE1ha2VkaXJUZXN0cywKICAgICAgICAgRGV2TnVsbFRlc3RzLAogICAgICAgICBVUmFuZG9tVGVzdHMsCisgICAgICAgIFVSYW5kb21GRFRlc3RzLAogICAgICAgICBFeGVjVGVzdHMsCiAgICAgICAgIFdpbjMyRXJyb3JUZXN0cywKICAgICAgICAgVGVzdEludmFsaWRGRCwKICAgICAgICAgUG9zaXhVaWRHaWRUZXN0cywKICAgICAgICAgUGVwMzgzVGVzdHMsCiAgICAgICAgIFdpbjMyS2lsbFRlc3RzLAorICAgICAgICBXaW4zMkxpc3RkaXJUZXN0cywKICAgICAgICAgV2luMzJTeW1saW5rVGVzdHMsCiAgICAgICAgIE5vbkxvY2FsU3ltbGlua1Rlc3RzLAogICAgICAgICBGU0VuY29kaW5nVGVzdHMsCkBAIC0yMjAzLDcgKzI2MjUsMTAgQEAKICAgICAgICAgRXh0ZW5kZWRBdHRyaWJ1dGVUZXN0cywKICAgICAgICAgV2luMzJEZXByZWNhdGVkQnl0ZXNBUEksCiAgICAgICAgIFRlcm1zaXplVGVzdHMsCisgICAgICAgIE9TRXJyb3JUZXN0cywKICAgICAgICAgUmVtb3ZlRGlyc1Rlc3RzLAorICAgICAgICBDUFVDb3VudFRlc3RzLAorICAgICAgICBGREluaGVyaXRhbmNlVGVzdHMsCiAgICAgKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9vc3NhdWRpb2Rldi5weSBiL0xpYi90ZXN0L3Rlc3Rfb3NzYXVkaW9kZXYucHkKaW5kZXggMzkwOGEwNS4uYzllMmEyNCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9vc3NhdWRpb2Rldi5weQorKysgYi9MaWIvdGVzdC90ZXN0X29zc2F1ZGlvZGV2LnB5CkBAIC00NCw3ICs0NCw3IEBACiAgICAgZGVmIHBsYXlfc291bmRfZmlsZShzZWxmLCBkYXRhLCByYXRlLCBzc2l6ZSwgbmNoYW5uZWxzKToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZHNwID0gb3NzYXVkaW9kZXYub3BlbigndycpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIG1zZzoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgbXNnOgogICAgICAgICAgICAgaWYgbXNnLmFyZ3NbMF0gaW4gKGVycm5vLkVBQ0NFUywgZXJybm8uRU5PRU5ULAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm5vLkVOT0RFViwgZXJybm8uRUJVU1kpOgogICAgICAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KG1zZykKQEAgLTE5MCw3ICsxOTAsNyBAQAogZGVmIHRlc3RfbWFpbigpOgogICAgIHRyeToKICAgICAgICAgZHNwID0gb3NzYXVkaW9kZXYub3BlbigndycpCi0gICAgZXhjZXB0IChvc3NhdWRpb2Rldi5lcnJvciwgSU9FcnJvcikgYXMgbXNnOgorICAgIGV4Y2VwdCAob3NzYXVkaW9kZXYuZXJyb3IsIE9TRXJyb3IpIGFzIG1zZzoKICAgICAgICAgaWYgbXNnLmFyZ3NbMF0gaW4gKGVycm5vLkVBQ0NFUywgZXJybm8uRU5PRU5ULAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJybm8uRU5PREVWLCBlcnJuby5FQlVTWSk6CiAgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdChtc2cpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3BhdGhsaWIucHkgYi9MaWIvdGVzdC90ZXN0X3BhdGhsaWIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTE0MjBlMgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfcGF0aGxpYi5weQpAQCAtMCwwICsxLDE4OTggQEAKK2ltcG9ydCBjb2xsZWN0aW9ucworaW1wb3J0IGlvCitpbXBvcnQgb3MKK2ltcG9ydCBlcnJubworaW1wb3J0IHBhdGhsaWIKK2ltcG9ydCBwaWNrbGUKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCBzb2NrZXQKK2ltcG9ydCBzdGF0CitpbXBvcnQgc3lzCitpbXBvcnQgdGVtcGZpbGUKK2ltcG9ydCB1bml0dGVzdAorZnJvbSBjb250ZXh0bGliIGltcG9ydCBjb250ZXh0bWFuYWdlcgorCitmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKK1RFU1RGTiA9IHN1cHBvcnQuVEVTVEZOCisKK3RyeToKKyAgICBpbXBvcnQgZ3JwLCBwd2QKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBncnAgPSBwd2QgPSBOb25lCisKKworY2xhc3MgX0Jhc2VGbGF2b3VyVGVzdChvYmplY3QpOgorCisgICAgZGVmIF9jaGVja19wYXJzZV9wYXJ0cyhzZWxmLCBhcmcsIGV4cGVjdGVkKToKKyAgICAgICAgZiA9IHNlbGYuZmxhdm91ci5wYXJzZV9wYXJ0cworICAgICAgICBzZXAgPSBzZWxmLmZsYXZvdXIuc2VwCisgICAgICAgIGFsdHNlcCA9IHNlbGYuZmxhdm91ci5hbHRzZXAKKyAgICAgICAgYWN0dWFsID0gZihbeC5yZXBsYWNlKCcvJywgc2VwKSBmb3IgeCBpbiBhcmddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQpCisgICAgICAgIGlmIGFsdHNlcDoKKyAgICAgICAgICAgIGFjdHVhbCA9IGYoW3gucmVwbGFjZSgnLycsIGFsdHNlcCkgZm9yIHggaW4gYXJnXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0dWFsLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X3BhcnNlX3BhcnRzX2NvbW1vbihzZWxmKToKKyAgICAgICAgY2hlY2sgPSBzZWxmLl9jaGVja19wYXJzZV9wYXJ0cworICAgICAgICBzZXAgPSBzZWxmLmZsYXZvdXIuc2VwCisgICAgICAgICMgVW5hbmNob3JlZCBwYXJ0cworICAgICAgICBjaGVjayhbXSwgICAgICAgICAgICAgICAgICAgKCcnLCAnJywgW10pKQorICAgICAgICBjaGVjayhbJ2EnXSwgICAgICAgICAgICAgICAgKCcnLCAnJywgWydhJ10pKQorICAgICAgICBjaGVjayhbJ2EvJ10sICAgICAgICAgICAgICAgKCcnLCAnJywgWydhJ10pKQorICAgICAgICBjaGVjayhbJ2EnLCAnYiddLCAgICAgICAgICAgKCcnLCAnJywgWydhJywgJ2InXSkpCisgICAgICAgICMgRXhwYW5zaW9uCisgICAgICAgIGNoZWNrKFsnYS9iJ10sICAgICAgICAgICAgICAoJycsICcnLCBbJ2EnLCAnYiddKSkKKyAgICAgICAgY2hlY2soWydhL2IvJ10sICAgICAgICAgICAgICgnJywgJycsIFsnYScsICdiJ10pKQorICAgICAgICBjaGVjayhbJ2EnLCAnYi9jJywgJ2QnXSwgICAgKCcnLCAnJywgWydhJywgJ2InLCAnYycsICdkJ10pKQorICAgICAgICAjIENvbGxhcHNpbmcgYW5kIHN0cmlwcGluZyBleGNlc3Mgc2xhc2hlcworICAgICAgICBjaGVjayhbJ2EnLCAnYi8vYycsICdkJ10sICAgKCcnLCAnJywgWydhJywgJ2InLCAnYycsICdkJ10pKQorICAgICAgICBjaGVjayhbJ2EnLCAnYi9jLycsICdkJ10sICAgKCcnLCAnJywgWydhJywgJ2InLCAnYycsICdkJ10pKQorICAgICAgICAjIEVsaW1pbmF0aW5nIHN0YW5kYWxvbmUgZG90cworICAgICAgICBjaGVjayhbJy4nXSwgICAgICAgICAgICAgICAgKCcnLCAnJywgW10pKQorICAgICAgICBjaGVjayhbJy4nLCAnLicsICdiJ10sICAgICAgKCcnLCAnJywgWydiJ10pKQorICAgICAgICBjaGVjayhbJ2EnLCAnLicsICdiJ10sICAgICAgKCcnLCAnJywgWydhJywgJ2InXSkpCisgICAgICAgIGNoZWNrKFsnYScsICcuJywgJy4nXSwgICAgICAoJycsICcnLCBbJ2EnXSkpCisgICAgICAgICMgVGhlIGZpcnN0IHBhcnQgaXMgYW5jaG9yZWQKKyAgICAgICAgY2hlY2soWycvYS9iJ10sICAgICAgICAgICAgICgnJywgc2VwLCBbc2VwLCAnYScsICdiJ10pKQorICAgICAgICBjaGVjayhbJy9hJywgJ2InXSwgICAgICAgICAgKCcnLCBzZXAsIFtzZXAsICdhJywgJ2InXSkpCisgICAgICAgIGNoZWNrKFsnL2EvJywgJ2InXSwgICAgICAgICAoJycsIHNlcCwgW3NlcCwgJ2EnLCAnYiddKSkKKyAgICAgICAgIyBJZ25vcmluZyBwYXJ0cyBiZWZvcmUgYW4gYW5jaG9yZWQgcGFydAorICAgICAgICBjaGVjayhbJ2EnLCAnL2InLCAnYyddLCAgICAgKCcnLCBzZXAsIFtzZXAsICdiJywgJ2MnXSkpCisgICAgICAgIGNoZWNrKFsnYScsICcvYicsICcvYyddLCAgICAoJycsIHNlcCwgW3NlcCwgJ2MnXSkpCisKKworY2xhc3MgUG9zaXhGbGF2b3VyVGVzdChfQmFzZUZsYXZvdXJUZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZmxhdm91ciA9IHBhdGhsaWIuX3Bvc2l4X2ZsYXZvdXIKKworICAgIGRlZiB0ZXN0X3BhcnNlX3BhcnRzKHNlbGYpOgorICAgICAgICBjaGVjayA9IHNlbGYuX2NoZWNrX3BhcnNlX3BhcnRzCisgICAgICAgICMgQ29sbGFwc2luZyBvZiBleGNlc3MgbGVhZGluZyBzbGFzaGVzLCBleGNlcHQgZm9yIHRoZSBkb3VibGUtc2xhc2gKKyAgICAgICAgIyBzcGVjaWFsIGNhc2UuCisgICAgICAgIGNoZWNrKFsnLy9hJywgJ2InXSwgICAgICAgICAgICAgKCcnLCAnLy8nLCBbJy8vJywgJ2EnLCAnYiddKSkKKyAgICAgICAgY2hlY2soWycvLy9hJywgJ2InXSwgICAgICAgICAgICAoJycsICcvJywgWycvJywgJ2EnLCAnYiddKSkKKyAgICAgICAgY2hlY2soWycvLy8vYScsICdiJ10sICAgICAgICAgICAoJycsICcvJywgWycvJywgJ2EnLCAnYiddKSkKKyAgICAgICAgIyBQYXRocyB3aGljaCBsb29rIGxpa2UgTlQgcGF0aHMgYXJlbid0IHRyZWF0ZWQgc3BlY2lhbGx5CisgICAgICAgIGNoZWNrKFsnYzphJ10sICAgICAgICAgICAgICAgICAgKCcnLCAnJywgWydjOmEnXSkpCisgICAgICAgIGNoZWNrKFsnYzpcXGEnXSwgICAgICAgICAgICAgICAgKCcnLCAnJywgWydjOlxcYSddKSkKKyAgICAgICAgY2hlY2soWydcXGEnXSwgICAgICAgICAgICAgICAgICAoJycsICcnLCBbJ1xcYSddKSkKKworICAgIGRlZiB0ZXN0X3NwbGl0cm9vdChzZWxmKToKKyAgICAgICAgZiA9IHNlbGYuZmxhdm91ci5zcGxpdHJvb3QKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCcnKSwgKCcnLCAnJywgJycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoJ2EnKSwgKCcnLCAnJywgJ2EnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCdhL2InKSwgKCcnLCAnJywgJ2EvYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoJ2EvYi8nKSwgKCcnLCAnJywgJ2EvYi8nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCcvYScpLCAoJycsICcvJywgJ2EnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCcvYS9iJyksICgnJywgJy8nLCAnYS9iJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZignL2EvYi8nKSwgKCcnLCAnLycsICdhL2IvJykpCisgICAgICAgICMgVGhlIHJvb3QgaXMgY29sbGFwc2VkIHdoZW4gdGhlcmUgYXJlIHJlZHVuZGFudCBzbGFzaGVzCisgICAgICAgICMgZXhjZXB0IHdoZW4gdGhlcmUgYXJlIGV4YWN0bHkgdHdvIGxlYWRpbmcgc2xhc2hlcywgd2hpY2gKKyAgICAgICAgIyBpcyBhIHNwZWNpYWwgY2FzZSBpbiBQT1NJWC4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCcvL2EnKSwgKCcnLCAnLy8nLCAnYScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoJy8vL2EnKSwgKCcnLCAnLycsICdhJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZignLy8vYS9iJyksICgnJywgJy8nLCAnYS9iJykpCisgICAgICAgICMgUGF0aHMgd2hpY2ggbG9vayBsaWtlIE5UIHBhdGhzIGFyZW4ndCB0cmVhdGVkIHNwZWNpYWxseQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoJ2M6L2EvYicpLCAoJycsICcnLCAnYzovYS9iJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZignXFwvYS9iJyksICgnJywgJycsICdcXC9hL2InKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCdcXGFcXGInKSwgKCcnLCAnJywgJ1xcYVxcYicpKQorCisKK2NsYXNzIE5URmxhdm91clRlc3QoX0Jhc2VGbGF2b3VyVGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGZsYXZvdXIgPSBwYXRobGliLl93aW5kb3dzX2ZsYXZvdXIKKworICAgIGRlZiB0ZXN0X3BhcnNlX3BhcnRzKHNlbGYpOgorICAgICAgICBjaGVjayA9IHNlbGYuX2NoZWNrX3BhcnNlX3BhcnRzCisgICAgICAgICMgRmlyc3QgcGFydCBpcyBhbmNob3JlZAorICAgICAgICBjaGVjayhbJ2M6J10sICAgICAgICAgICAgICAgICAgICgnYzonLCAnJywgWydjOiddKSkKKyAgICAgICAgY2hlY2soWydjOi8nXSwgICAgICAgICAgICAgICAgICAoJ2M6JywgJ1xcJywgWydjOlxcJ10pKQorICAgICAgICBjaGVjayhbJy8nXSwgICAgICAgICAgICAgICAgICAgICgnJywgJ1xcJywgWydcXCddKSkKKyAgICAgICAgY2hlY2soWydjOmEnXSwgICAgICAgICAgICAgICAgICAoJ2M6JywgJycsIFsnYzonLCAnYSddKSkKKyAgICAgICAgY2hlY2soWydjOi9hJ10sICAgICAgICAgICAgICAgICAoJ2M6JywgJ1xcJywgWydjOlxcJywgJ2EnXSkpCisgICAgICAgIGNoZWNrKFsnL2EnXSwgICAgICAgICAgICAgICAgICAgKCcnLCAnXFwnLCBbJ1xcJywgJ2EnXSkpCisgICAgICAgICMgVU5DIHBhdGhzCisgICAgICAgIGNoZWNrKFsnLy9hL2InXSwgICAgICAgICAgICAgICAgKCdcXFxcYVxcYicsICdcXCcsIFsnXFxcXGFcXGJcXCddKSkKKyAgICAgICAgY2hlY2soWycvL2EvYi8nXSwgICAgICAgICAgICAgICAoJ1xcXFxhXFxiJywgJ1xcJywgWydcXFxcYVxcYlxcJ10pKQorICAgICAgICBjaGVjayhbJy8vYS9iL2MnXSwgICAgICAgICAgICAgICgnXFxcXGFcXGInLCAnXFwnLCBbJ1xcXFxhXFxiXFwnLCAnYyddKSkKKyAgICAgICAgIyBTZWNvbmQgcGFydCBpcyBhbmNob3JlZCwgc28gdGhhdCB0aGUgZmlyc3QgcGFydCBpcyBpZ25vcmVkCisgICAgICAgIGNoZWNrKFsnYScsICdaOmInLCAnYyddLCAgICAgICAgKCdaOicsICcnLCBbJ1o6JywgJ2InLCAnYyddKSkKKyAgICAgICAgY2hlY2soWydhJywgJ1o6L2InLCAnYyddLCAgICAgICAoJ1o6JywgJ1xcJywgWydaOlxcJywgJ2InLCAnYyddKSkKKyAgICAgICAgIyBVTkMgcGF0aHMKKyAgICAgICAgY2hlY2soWydhJywgJy8vYi9jJywgJ2QnXSwgICAgICAoJ1xcXFxiXFxjJywgJ1xcJywgWydcXFxcYlxcY1xcJywgJ2QnXSkpCisgICAgICAgICMgQ29sbGFwc2luZyBhbmQgc3RyaXBwaW5nIGV4Y2VzcyBzbGFzaGVzCisgICAgICAgIGNoZWNrKFsnYScsICdaOi8vYi8vYy8nLCAnZC8nXSwgKCdaOicsICdcXCcsIFsnWjpcXCcsICdiJywgJ2MnLCAnZCddKSkKKyAgICAgICAgIyBVTkMgcGF0aHMKKyAgICAgICAgY2hlY2soWydhJywgJy8vYi9jLy8nLCAnZCddLCAgICAoJ1xcXFxiXFxjJywgJ1xcJywgWydcXFxcYlxcY1xcJywgJ2QnXSkpCisgICAgICAgICMgRXh0ZW5kZWQgcGF0aHMKKyAgICAgICAgY2hlY2soWycvLz8vYzovJ10sICAgICAgICAgICAgICAoJ1xcXFw/XFxjOicsICdcXCcsIFsnXFxcXD9cXGM6XFwnXSkpCisgICAgICAgIGNoZWNrKFsnLy8/L2M6L2EnXSwgICAgICAgICAgICAgKCdcXFxcP1xcYzonLCAnXFwnLCBbJ1xcXFw/XFxjOlxcJywgJ2EnXSkpCisgICAgICAgIGNoZWNrKFsnLy8/L2M6L2EnLCAnL2InXSwgICAgICAgKCdcXFxcP1xcYzonLCAnXFwnLCBbJ1xcXFw/XFxjOlxcJywgJ2InXSkpCisgICAgICAgICMgRXh0ZW5kZWQgVU5DIHBhdGhzIChmb3JtYXQgaXMgIlxcP1xVTkNcc2VydmVyXHNoYXJlIikKKyAgICAgICAgY2hlY2soWycvLz8vVU5DL2IvYyddLCAgICAgICAgICAoJ1xcXFw/XFxVTkNcXGJcXGMnLCAnXFwnLCBbJ1xcXFw/XFxVTkNcXGJcXGNcXCddKSkKKyAgICAgICAgY2hlY2soWycvLz8vVU5DL2IvYy9kJ10sICAgICAgICAoJ1xcXFw/XFxVTkNcXGJcXGMnLCAnXFwnLCBbJ1xcXFw/XFxVTkNcXGJcXGNcXCcsICdkJ10pKQorICAgICAgICAjIFNlY29uZCBwYXJ0IGhhcyBhIHJvb3QgYnV0IG5vdCBkcml2ZQorICAgICAgICBjaGVjayhbJ2EnLCAnL2InLCAnYyddLCAgICAgICAgICgnJywgJ1xcJywgWydcXCcsICdiJywgJ2MnXSkpCisgICAgICAgIGNoZWNrKFsnWjovYScsICcvYicsICdjJ10sICAgICAgKCdaOicsICdcXCcsIFsnWjpcXCcsICdiJywgJ2MnXSkpCisgICAgICAgIGNoZWNrKFsnLy8/L1o6L2EnLCAnL2InLCAnYyddLCAgKCdcXFxcP1xcWjonLCAnXFwnLCBbJ1xcXFw/XFxaOlxcJywgJ2InLCAnYyddKSkKKworICAgIGRlZiB0ZXN0X3NwbGl0cm9vdChzZWxmKToKKyAgICAgICAgZiA9IHNlbGYuZmxhdm91ci5zcGxpdHJvb3QKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCcnKSwgKCcnLCAnJywgJycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoJ2EnKSwgKCcnLCAnJywgJ2EnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCdhXFxiJyksICgnJywgJycsICdhXFxiJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZignXFxhJyksICgnJywgJ1xcJywgJ2EnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCdcXGFcXGInKSwgKCcnLCAnXFwnLCAnYVxcYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoJ2M6YVxcYicpLCAoJ2M6JywgJycsICdhXFxiJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZignYzpcXGFcXGInKSwgKCdjOicsICdcXCcsICdhXFxiJykpCisgICAgICAgICMgUmVkdW5kYW50IHNsYXNoZXMgaW4gdGhlIHJvb3QgYXJlIGNvbGxhcHNlZAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoJ1xcXFxhJyksICgnJywgJ1xcJywgJ2EnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCdcXFxcXFxhL2InKSwgKCcnLCAnXFwnLCAnYS9iJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZignYzpcXFxcYScpLCAoJ2M6JywgJ1xcJywgJ2EnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCdjOlxcXFxcXGEvYicpLCAoJ2M6JywgJ1xcJywgJ2EvYicpKQorICAgICAgICAjIFZhbGlkIFVOQyBwYXRocworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoJ1xcXFxhXFxiJyksICgnXFxcXGFcXGInLCAnXFwnLCAnJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZignXFxcXGFcXGJcXCcpLCAoJ1xcXFxhXFxiJywgJ1xcJywgJycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoJ1xcXFxhXFxiXFxjXFxkJyksICgnXFxcXGFcXGInLCAnXFwnLCAnY1xcZCcpKQorICAgICAgICAjIFRoZXNlIGFyZSBub24tVU5DIHBhdGhzIChhY2NvcmRpbmcgdG8gbnRwYXRoLnB5IGFuZCB0ZXN0X250cGF0aCkKKyAgICAgICAgIyBIb3dldmVyLCBjb21tYW5kLmNvbSBzYXlzIHN1Y2ggcGF0aHMgYXJlIGludmFsaWQsIHNvIGl0J3MKKyAgICAgICAgIyBkaWZmaWN1bHQgdG8ga25vdyB3aGF0IHRoZSByaWdodCBzZW1hbnRpY3MgYXJlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZignXFxcXFxcYVxcYicpLCAoJycsICdcXCcsICdhXFxiJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZignXFxcXGEnKSwgKCcnLCAnXFwnLCAnYScpKQorCisKKyMKKyMgVGVzdHMgZm9yIHRoZSBwdXJlIGNsYXNzZXMKKyMKKworY2xhc3MgX0Jhc2VQdXJlUGF0aFRlc3Qob2JqZWN0KToKKworICAgICMga2V5cyBhcmUgY2Fub25pY2FsIHBhdGhzLCB2YWx1ZXMgYXJlIGxpc3Qgb2YgdHVwbGVzIG9mIGFyZ3VtZW50cworICAgICMgc3VwcG9zZWQgdG8gcHJvZHVjZSBlcXVhbCBwYXRocworICAgIGVxdWl2YWxlbmNlcyA9IHsKKyAgICAgICAgJ2EvYic6IFsKKyAgICAgICAgICAgICgnYScsICdiJyksICgnYS8nLCAnYicpLCAoJ2EnLCAnYi8nKSwgKCdhLycsICdiLycpLAorICAgICAgICAgICAgKCdhL2IvJywpLCAoJ2EvL2InLCksICgnYS8vYi8vJywpLAorICAgICAgICAgICAgIyBlbXB0eSBjb21wb25lbnRzIGdldCByZW1vdmVkCisgICAgICAgICAgICAoJycsICdhJywgJ2InKSwgKCdhJywgJycsICdiJyksICgnYScsICdiJywgJycpLAorICAgICAgICAgICAgXSwKKyAgICAgICAgJy9iL2MvZCc6IFsKKyAgICAgICAgICAgICgnYScsICcvYi9jJywgJ2QnKSwgKCdhJywgJy8vL2IvL2MnLCAnZC8nKSwKKyAgICAgICAgICAgICgnL2EnLCAnL2IvYycsICdkJyksCisgICAgICAgICAgICAjIGVtcHR5IGNvbXBvbmVudHMgZ2V0IHJlbW92ZWQKKyAgICAgICAgICAgICgnLycsICdiJywgJycsICdjL2QnKSwgKCcvJywgJycsICdiL2MvZCcpLCAoJycsICcvYi9jL2QnKSwKKyAgICAgICAgICAgIF0sCisgICAgfQorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBwID0gc2VsZi5jbHMoJ2EnKQorICAgICAgICBzZWxmLmZsYXZvdXIgPSBwLl9mbGF2b3VyCisgICAgICAgIHNlbGYuc2VwID0gc2VsZi5mbGF2b3VyLnNlcAorICAgICAgICBzZWxmLmFsdHNlcCA9IHNlbGYuZmxhdm91ci5hbHRzZXAKKworICAgIGRlZiB0ZXN0X2NvbnN0cnVjdG9yX2NvbW1vbihzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHAgPSBQKCdhJykKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHAsIFApCisgICAgICAgIFAoJ2EnLCAnYicsICdjJykKKyAgICAgICAgUCgnL2EnLCAnYicsICdjJykKKyAgICAgICAgUCgnYS9iL2MnKQorICAgICAgICBQKCcvYS9iL2MnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoUCgnYScpKSwgUCgnYScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoUCgnYScpLCAnYicpLCBQKCdhL2InKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKFAoJ2EnKSwgUCgnYicpKSwgUCgnYS9iJykpCisKKyAgICBkZWYgX2NoZWNrX3N0cl9zdWJjbGFzcyhzZWxmLCAqYXJncyk6CisgICAgICAgICMgSXNzdWUgIzIxMTI3OiBpdCBzaG91bGQgYmUgcG9zc2libGUgdG8gY29uc3RydWN0IGEgUHVyZVBhdGggb2JqZWN0CisgICAgICAgICMgZnJvbSBhbiBzdHIgc3ViY2xhc3MgaW5zdGFuY2UsIGFuZCBpdCB0aGVuIGdldHMgY29udmVydGVkIHRvCisgICAgICAgICMgYSBwdXJlIHN0ciBvYmplY3QuCisgICAgICAgIGNsYXNzIFN0clN1YmNsYXNzKHN0cik6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBwID0gUCgqKFN0clN1YmNsYXNzKHgpIGZvciB4IGluIGFyZ3MpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAsIFAoKmFyZ3MpKQorICAgICAgICBmb3IgcGFydCBpbiBwLnBhcnRzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKHBhcnQpLCBzdHIpCisKKyAgICBkZWYgdGVzdF9zdHJfc3ViY2xhc3NfY29tbW9uKHNlbGYpOgorICAgICAgICBzZWxmLl9jaGVja19zdHJfc3ViY2xhc3MoJycpCisgICAgICAgIHNlbGYuX2NoZWNrX3N0cl9zdWJjbGFzcygnLicpCisgICAgICAgIHNlbGYuX2NoZWNrX3N0cl9zdWJjbGFzcygnYScpCisgICAgICAgIHNlbGYuX2NoZWNrX3N0cl9zdWJjbGFzcygnYS9iLnR4dCcpCisgICAgICAgIHNlbGYuX2NoZWNrX3N0cl9zdWJjbGFzcygnL2EvYi50eHQnKQorCisgICAgZGVmIHRlc3Rfam9pbl9jb21tb24oc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBwID0gUCgnYS9iJykKKyAgICAgICAgcHAgPSBwLmpvaW5wYXRoKCdjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcCwgUCgnYS9iL2MnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKHBwKSwgdHlwZShwKSkKKyAgICAgICAgcHAgPSBwLmpvaW5wYXRoKCdjJywgJ2QnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwLCBQKCdhL2IvYy9kJykpCisgICAgICAgIHBwID0gcC5qb2lucGF0aChQKCdjJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHAsIFAoJ2EvYi9jJykpCisgICAgICAgIHBwID0gcC5qb2lucGF0aCgnL2MnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwLCBQKCcvYycpKQorCisgICAgZGVmIHRlc3RfZGl2X2NvbW1vbihzZWxmKToKKyAgICAgICAgIyBCYXNpY2FsbHkgdGhlIHNhbWUgYXMgam9pbnBhdGgoKQorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgcCA9IFAoJ2EvYicpCisgICAgICAgIHBwID0gcCAvICdjJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwLCBQKCdhL2IvYycpKQorICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUocHApLCB0eXBlKHApKQorICAgICAgICBwcCA9IHAgLyAnYy9kJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwLCBQKCdhL2IvYy9kJykpCisgICAgICAgIHBwID0gcCAvICdjJyAvICdkJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwLCBQKCdhL2IvYy9kJykpCisgICAgICAgIHBwID0gJ2MnIC8gcCAvICdkJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwLCBQKCdjL2EvYi9kJykpCisgICAgICAgIHBwID0gcCAvIFAoJ2MnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwLCBQKCdhL2IvYycpKQorICAgICAgICBwcCA9IHAvICcvYycKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcCwgUCgnL2MnKSkKKworICAgIGRlZiBfY2hlY2tfc3RyKHNlbGYsIGV4cGVjdGVkLCBhcmdzKToKKyAgICAgICAgcCA9IHNlbGYuY2xzKCphcmdzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihwKSwgZXhwZWN0ZWQucmVwbGFjZSgnLycsIHNlbGYuc2VwKSkKKworICAgIGRlZiB0ZXN0X3N0cl9jb21tb24oc2VsZik6CisgICAgICAgICMgQ2Fub25pY2FsaXplZCBwYXRocyByb3VuZHRyaXAKKyAgICAgICAgZm9yIHBhdGhzdHIgaW4gKCdhJywgJ2EvYicsICdhL2IvYycsICcvJywgJy9hL2InLCAnL2EvYi9jJyk6CisgICAgICAgICAgICBzZWxmLl9jaGVja19zdHIocGF0aHN0ciwgKHBhdGhzdHIsKSkKKyAgICAgICAgIyBTcGVjaWFsIGNhc2UgZm9yIHRoZSBlbXB0eSBwYXRoCisgICAgICAgIHNlbGYuX2NoZWNrX3N0cignLicsICgnJywpKQorICAgICAgICAjIE90aGVyIHRlc3RzIGZvciBzdHIoKSBhcmUgaW4gdGVzdF9lcXVpdmFsZW5jZXMoKQorCisgICAgZGVmIHRlc3RfYXNfcG9zaXhfY29tbW9uKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgZm9yIHBhdGhzdHIgaW4gKCdhJywgJ2EvYicsICdhL2IvYycsICcvJywgJy9hL2InLCAnL2EvYi9jJyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAocGF0aHN0cikuYXNfcG9zaXgoKSwgcGF0aHN0cikKKyAgICAgICAgIyBPdGhlciB0ZXN0cyBmb3IgYXNfcG9zaXgoKSBhcmUgaW4gdGVzdF9lcXVpdmFsZW5jZXMoKQorCisgICAgZGVmIHRlc3RfYXNfYnl0ZXNfY29tbW9uKHNlbGYpOgorICAgICAgICBzZXAgPSBvcy5mc2VuY29kZShzZWxmLnNlcCkKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZXMoUCgnYS9iJykpLCBiJ2EnICsgc2VwICsgYidiJykKKworICAgIGRlZiB0ZXN0X2FzX3VyaV9jb21tb24oc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgUCgnYScpLmFzX3VyaSgpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBQKCkuYXNfdXJpKCkKKworICAgIGRlZiB0ZXN0X3JlcHJfY29tbW9uKHNlbGYpOgorICAgICAgICBmb3IgcGF0aHN0ciBpbiAoJ2EnLCAnYS9iJywgJ2EvYi9jJywgJy8nLCAnL2EvYicsICcvYS9iL2MnKToKKyAgICAgICAgICAgIHAgPSBzZWxmLmNscyhwYXRoc3RyKQorICAgICAgICAgICAgY2xzbmFtZSA9IHAuX19jbGFzc19fLl9fbmFtZV9fCisgICAgICAgICAgICByID0gcmVwcihwKQorICAgICAgICAgICAgIyBUaGUgcmVwcigpIGlzIGluIHRoZSBmb3JtIENsYXNzTmFtZSgiZm9yd2FyZC1zbGFzaGVzIHBhdGgiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHIuc3RhcnRzd2l0aChjbHNuYW1lICsgJygnKSwgcikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyLmVuZHN3aXRoKCcpJyksIHIpCisgICAgICAgICAgICBpbm5lciA9IHJbbGVuKGNsc25hbWUpICsgMSA6IC0xXQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKGlubmVyKSwgcC5hc19wb3NpeCgpKQorICAgICAgICAgICAgIyBUaGUgcmVwcigpIHJvdW5kdHJpcHMKKyAgICAgICAgICAgIHEgPSBldmFsKHIsIHBhdGhsaWIuX19kaWN0X18pCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHEuX19jbGFzc19fLCBwLl9fY2xhc3NfXykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocSwgcCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihxKSwgcikKKworICAgIGRlZiB0ZXN0X2VxX2NvbW1vbihzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYS9iJyksIFAoJ2EvYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2EvYicpLCBQKCdhJywgJ2InKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChQKCdhL2InKSwgUCgnYScpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKFAoJ2EvYicpLCBQKCcvYS9iJykpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoUCgnYS9iJyksIFAoKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChQKCcvYS9iJyksIFAoJy8nKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChQKCksIFAoJy8nKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChQKCksICIiKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKFAoKSwge30pCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoUCgpLCBpbnQpCisKKyAgICBkZWYgdGVzdF9tYXRjaF9jb21tb24oc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBQKCdhJykubWF0Y2gsICcnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBQKCdhJykubWF0Y2gsICcuJykKKyAgICAgICAgIyBTaW1wbGUgcmVsYXRpdmUgcGF0dGVybgorICAgICAgICBzZWxmLmFzc2VydFRydWUoUCgnYi5weScpLm1hdGNoKCdiLnB5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShQKCdhL2IucHknKS5tYXRjaCgnYi5weScpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoUCgnL2EvYi5weScpLm1hdGNoKCdiLnB5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgnYS5weScpLm1hdGNoKCdiLnB5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgnYi9weScpLm1hdGNoKCdiLnB5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgnL2EucHknKS5tYXRjaCgnYi5weScpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAoJ2IucHkvYycpLm1hdGNoKCdiLnB5JykpCisgICAgICAgICMgV2lsY2FyZCByZWxhdGl2ZSBwYXR0ZXJuCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShQKCdiLnB5JykubWF0Y2goJyoucHknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFAoJ2EvYi5weScpLm1hdGNoKCcqLnB5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShQKCcvYS9iLnB5JykubWF0Y2goJyoucHknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQKCdiLnB5YycpLm1hdGNoKCcqLnB5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgnYi4vcHknKS5tYXRjaCgnKi5weScpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAoJ2IucHkvYycpLm1hdGNoKCcqLnB5JykpCisgICAgICAgICMgTXVsdGktcGFydCByZWxhdGl2ZSBwYXR0ZXJuCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShQKCdhYi9jLnB5JykubWF0Y2goJ2EqLyoucHknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFAoJy9kL2FiL2MucHknKS5tYXRjaCgnYSovKi5weScpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAoJ2EucHknKS5tYXRjaCgnYSovKi5weScpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAoJy9kYWIvYy5weScpLm1hdGNoKCdhKi8qLnB5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgnYWIvYy5weS9kJykubWF0Y2goJ2EqLyoucHknKSkKKyAgICAgICAgIyBBYnNvbHV0ZSBwYXR0ZXJuCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShQKCcvYi5weScpLm1hdGNoKCcvKi5weScpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAoJ2IucHknKS5tYXRjaCgnLyoucHknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQKCdhL2IucHknKS5tYXRjaCgnLyoucHknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQKCcvYS9iLnB5JykubWF0Y2goJy8qLnB5JykpCisgICAgICAgICMgTXVsdGktcGFydCBhYnNvbHV0ZSBwYXR0ZXJuCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShQKCcvYS9iLnB5JykubWF0Y2goJy9hLyoucHknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQKCcvYWIucHknKS5tYXRjaCgnL2EvKi5weScpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAoJy9hL2IvYy5weScpLm1hdGNoKCcvYS8qLnB5JykpCisKKyAgICBkZWYgdGVzdF9vcmRlcmluZ19jb21tb24oc2VsZik6CisgICAgICAgICMgT3JkZXJpbmcgaXMgdHVwbGUtYWxpa2UKKyAgICAgICAgZGVmIGFzc2VydExlc3MoYSwgYik6CisgICAgICAgICAgICBzZWxmLmFzc2VydExlc3MoYSwgYikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihiLCBhKQorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgYSA9IFAoJ2EnKQorICAgICAgICBiID0gUCgnYS9iJykKKyAgICAgICAgYyA9IFAoJ2FiYycpCisgICAgICAgIGQgPSBQKCdiJykKKyAgICAgICAgYXNzZXJ0TGVzcyhhLCBiKQorICAgICAgICBhc3NlcnRMZXNzKGEsIGMpCisgICAgICAgIGFzc2VydExlc3MoYSwgZCkKKyAgICAgICAgYXNzZXJ0TGVzcyhiLCBjKQorICAgICAgICBhc3NlcnRMZXNzKGMsIGQpCisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBhID0gUCgnL2EnKQorICAgICAgICBiID0gUCgnL2EvYicpCisgICAgICAgIGMgPSBQKCcvYWJjJykKKyAgICAgICAgZCA9IFAoJy9iJykKKyAgICAgICAgYXNzZXJ0TGVzcyhhLCBiKQorICAgICAgICBhc3NlcnRMZXNzKGEsIGMpCisgICAgICAgIGFzc2VydExlc3MoYSwgZCkKKyAgICAgICAgYXNzZXJ0TGVzcyhiLCBjKQorICAgICAgICBhc3NlcnRMZXNzKGMsIGQpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIFAoKSA8IHt9CisKKyAgICBkZWYgdGVzdF9wYXJ0c19jb21tb24oc2VsZik6CisgICAgICAgICMgYHBhcnRzYCByZXR1cm5zIGEgdHVwbGUKKyAgICAgICAgc2VwID0gc2VsZi5zZXAKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHAgPSBQKCdhL2InKQorICAgICAgICBwYXJ0cyA9IHAucGFydHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJ0cywgKCdhJywgJ2InKSkKKyAgICAgICAgIyBUaGUgb2JqZWN0IGdldHMgcmV1c2VkCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocGFydHMsIHAucGFydHMpCisgICAgICAgICMgV2hlbiB0aGUgcGF0aCBpcyBhYnNvbHV0ZSwgdGhlIGFuY2hvciBpcyBhIHNlcGFyYXRlIHBhcnQKKyAgICAgICAgcCA9IFAoJy9hL2InKQorICAgICAgICBwYXJ0cyA9IHAucGFydHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJ0cywgKHNlcCwgJ2EnLCAnYicpKQorCisgICAgZGVmIHRlc3RfZXF1aXZhbGVuY2VzKHNlbGYpOgorICAgICAgICBmb3IgaywgdHVwbGVzIGluIHNlbGYuZXF1aXZhbGVuY2VzLml0ZW1zKCk6CisgICAgICAgICAgICBjYW5vbiA9IGsucmVwbGFjZSgnLycsIHNlbGYuc2VwKQorICAgICAgICAgICAgcG9zaXggPSBrLnJlcGxhY2Uoc2VsZi5zZXAsICcvJykKKyAgICAgICAgICAgIGlmIGNhbm9uICE9IHBvc2l4OgorICAgICAgICAgICAgICAgIHR1cGxlcyA9IHR1cGxlcyArIFsKKyAgICAgICAgICAgICAgICAgICAgdHVwbGUocGFydC5yZXBsYWNlKCcvJywgc2VsZi5zZXApIGZvciBwYXJ0IGluIHQpCisgICAgICAgICAgICAgICAgICAgIGZvciB0IGluIHR1cGxlcworICAgICAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICAgICAgdHVwbGVzLmFwcGVuZCgocG9zaXgsICkpCisgICAgICAgICAgICBwY2Fub24gPSBzZWxmLmNscyhjYW5vbikKKyAgICAgICAgICAgIGZvciB0IGluIHR1cGxlczoKKyAgICAgICAgICAgICAgICBwID0gc2VsZi5jbHMoKnQpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLCBwY2Fub24sICJmYWlsZWQgd2l0aCBhcmdzIHt9Ii5mb3JtYXQodCkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoKHApLCBoYXNoKHBjYW5vbikpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIocCksIGNhbm9uKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5hc19wb3NpeCgpLCBwb3NpeCkKKworICAgIGRlZiB0ZXN0X3BhcmVudF9jb21tb24oc2VsZik6CisgICAgICAgICMgUmVsYXRpdmUKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHAgPSBQKCdhL2IvYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wYXJlbnQsIFAoJ2EvYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucGFyZW50LnBhcmVudCwgUCgnYScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucGFyZW50LnBhcmVudC5wYXJlbnQsIFAoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnBhcmVudC5wYXJlbnQucGFyZW50LnBhcmVudCwgUCgpKQorICAgICAgICAjIEFuY2hvcmVkCisgICAgICAgIHAgPSBQKCcvYS9iL2MnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucGFyZW50LCBQKCcvYS9iJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wYXJlbnQucGFyZW50LCBQKCcvYScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucGFyZW50LnBhcmVudC5wYXJlbnQsIFAoJy8nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnBhcmVudC5wYXJlbnQucGFyZW50LnBhcmVudCwgUCgnLycpKQorCisgICAgZGVmIHRlc3RfcGFyZW50c19jb21tb24oc2VsZik6CisgICAgICAgICMgUmVsYXRpdmUKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHAgPSBQKCdhL2IvYycpCisgICAgICAgIHBhciA9IHAucGFyZW50cworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihwYXIpLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhclswXSwgUCgnYS9iJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyWzFdLCBQKCdhJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyWzJdLCBQKCcuJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChwYXIpLCBbUCgnYS9iJyksIFAoJ2EnKSwgUCgnLicpXSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yKToKKyAgICAgICAgICAgIHBhclstMV0KKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yKToKKyAgICAgICAgICAgIHBhclszXQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBwYXJbMF0gPSBwCisgICAgICAgICMgQW5jaG9yZWQKKyAgICAgICAgcCA9IFAoJy9hL2IvYycpCisgICAgICAgIHBhciA9IHAucGFyZW50cworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihwYXIpLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhclswXSwgUCgnL2EvYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhclsxXSwgUCgnL2EnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJbMl0sIFAoJy8nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHBhciksIFtQKCcvYS9iJyksIFAoJy9hJyksIFAoJy8nKV0pCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvcik6CisgICAgICAgICAgICBwYXJbM10KKworICAgIGRlZiB0ZXN0X2RyaXZlX2NvbW1vbihzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYS9iJykuZHJpdmUsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy9hL2InKS5kcml2ZSwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnJykuZHJpdmUsICcnKQorCisgICAgZGVmIHRlc3Rfcm9vdF9jb21tb24oc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBzZXAgPSBzZWxmLnNlcAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJycpLnJvb3QsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2EvYicpLnJvb3QsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy8nKS5yb290LCBzZXApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnL2EvYicpLnJvb3QsIHNlcCkKKworICAgIGRlZiB0ZXN0X2FuY2hvcl9jb21tb24oc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBzZXAgPSBzZWxmLnNlcAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJycpLmFuY2hvciwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYS9iJykuYW5jaG9yLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvJykuYW5jaG9yLCBzZXApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnL2EvYicpLmFuY2hvciwgc2VwKQorCisgICAgZGVmIHRlc3RfbmFtZV9jb21tb24oc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJycpLm5hbWUsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy4nKS5uYW1lLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvJykubmFtZSwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYS9iJykubmFtZSwgJ2InKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy9hL2InKS5uYW1lLCAnYicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnL2EvYi8uJykubmFtZSwgJ2InKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2EvYi5weScpLm5hbWUsICdiLnB5JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvYS9iLnB5JykubmFtZSwgJ2IucHknKQorCisgICAgZGVmIHRlc3Rfc3VmZml4X2NvbW1vbihzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnJykuc3VmZml4LCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcuJykuc3VmZml4LCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcuLicpLnN1ZmZpeCwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnLycpLnN1ZmZpeCwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYS9iJykuc3VmZml4LCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvYS9iJykuc3VmZml4LCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvYS9iLy4nKS5zdWZmaXgsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2EvYi5weScpLnN1ZmZpeCwgJy5weScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnL2EvYi5weScpLnN1ZmZpeCwgJy5weScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYS8uaGdyYycpLnN1ZmZpeCwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnL2EvLmhncmMnKS5zdWZmaXgsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2EvLmhnLnJjJykuc3VmZml4LCAnLnJjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvYS8uaGcucmMnKS5zdWZmaXgsICcucmMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2EvYi50YXIuZ3onKS5zdWZmaXgsICcuZ3onKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy9hL2IudGFyLmd6Jykuc3VmZml4LCAnLmd6JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdhL1NvbWUgbmFtZS4gRW5kaW5nIHdpdGggYSBkb3QuJykuc3VmZml4LCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvYS9Tb21lIG5hbWUuIEVuZGluZyB3aXRoIGEgZG90LicpLnN1ZmZpeCwgJycpCisKKyAgICBkZWYgdGVzdF9zdWZmaXhlc19jb21tb24oc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJycpLnN1ZmZpeGVzLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcuJykuc3VmZml4ZXMsIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy8nKS5zdWZmaXhlcywgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYS9iJykuc3VmZml4ZXMsIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy9hL2InKS5zdWZmaXhlcywgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnL2EvYi8uJykuc3VmZml4ZXMsIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2EvYi5weScpLnN1ZmZpeGVzLCBbJy5weSddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy9hL2IucHknKS5zdWZmaXhlcywgWycucHknXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdhLy5oZ3JjJykuc3VmZml4ZXMsIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy9hLy5oZ3JjJykuc3VmZml4ZXMsIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2EvLmhnLnJjJykuc3VmZml4ZXMsIFsnLnJjJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnL2EvLmhnLnJjJykuc3VmZml4ZXMsIFsnLnJjJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYS9iLnRhci5neicpLnN1ZmZpeGVzLCBbJy50YXInLCAnLmd6J10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnL2EvYi50YXIuZ3onKS5zdWZmaXhlcywgWycudGFyJywgJy5neiddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2EvU29tZSBuYW1lLiBFbmRpbmcgd2l0aCBhIGRvdC4nKS5zdWZmaXhlcywgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnL2EvU29tZSBuYW1lLiBFbmRpbmcgd2l0aCBhIGRvdC4nKS5zdWZmaXhlcywgW10pCisKKyAgICBkZWYgdGVzdF9zdGVtX2NvbW1vbihzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnJykuc3RlbSwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnLicpLnN0ZW0sICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy4uJykuc3RlbSwgJy4uJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvJykuc3RlbSwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYS9iJykuc3RlbSwgJ2InKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2EvYi5weScpLnN0ZW0sICdiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdhLy5oZ3JjJykuc3RlbSwgJy5oZ3JjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdhLy5oZy5yYycpLnN0ZW0sICcuaGcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2EvYi50YXIuZ3onKS5zdGVtLCAnYi50YXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2EvU29tZSBuYW1lLiBFbmRpbmcgd2l0aCBhIGRvdC4nKS5zdGVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICdTb21lIG5hbWUuIEVuZGluZyB3aXRoIGEgZG90LicpCisKKyAgICBkZWYgdGVzdF93aXRoX25hbWVfY29tbW9uKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdhL2InKS53aXRoX25hbWUoJ2QueG1sJyksIFAoJ2EvZC54bWwnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvYS9iJykud2l0aF9uYW1lKCdkLnhtbCcpLCBQKCcvYS9kLnhtbCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2EvYi5weScpLndpdGhfbmFtZSgnZC54bWwnKSwgUCgnYS9kLnhtbCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy9hL2IucHknKS53aXRoX25hbWUoJ2QueG1sJyksIFAoJy9hL2QueG1sJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYS9Eb3QgZW5kaW5nLicpLndpdGhfbmFtZSgnZC54bWwnKSwgUCgnYS9kLnhtbCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy9hL0RvdCBlbmRpbmcuJykud2l0aF9uYW1lKCdkLnhtbCcpLCBQKCcvYS9kLnhtbCcpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBQKCcnKS53aXRoX25hbWUsICdkLnhtbCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIFAoJy4nKS53aXRoX25hbWUsICdkLnhtbCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIFAoJy8nKS53aXRoX25hbWUsICdkLnhtbCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIFAoJ2EvYicpLndpdGhfbmFtZSwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIFAoJ2EvYicpLndpdGhfbmFtZSwgJy9jJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgUCgnYS9iJykud2l0aF9uYW1lLCAnYy8nKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBQKCdhL2InKS53aXRoX25hbWUsICdjL2QnKQorCisgICAgZGVmIHRlc3Rfd2l0aF9zdWZmaXhfY29tbW9uKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdhL2InKS53aXRoX3N1ZmZpeCgnLmd6JyksIFAoJ2EvYi5neicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy9hL2InKS53aXRoX3N1ZmZpeCgnLmd6JyksIFAoJy9hL2IuZ3onKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdhL2IucHknKS53aXRoX3N1ZmZpeCgnLmd6JyksIFAoJ2EvYi5neicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy9hL2IucHknKS53aXRoX3N1ZmZpeCgnLmd6JyksIFAoJy9hL2IuZ3onKSkKKyAgICAgICAgIyBTdHJpcHBpbmcgc3VmZml4CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYS9iLnB5Jykud2l0aF9zdWZmaXgoJycpLCBQKCdhL2InKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvYS9iJykud2l0aF9zdWZmaXgoJycpLCBQKCcvYS9iJykpCisgICAgICAgICMgUGF0aCBkb2Vzbid0IGhhdmUgYSAiZmlsZW5hbWUiIGNvbXBvbmVudAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBQKCcnKS53aXRoX3N1ZmZpeCwgJy5neicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIFAoJy4nKS53aXRoX3N1ZmZpeCwgJy5neicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIFAoJy8nKS53aXRoX3N1ZmZpeCwgJy5neicpCisgICAgICAgICMgSW52YWxpZCBzdWZmaXgKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgUCgnYS9iJykud2l0aF9zdWZmaXgsICdneicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIFAoJ2EvYicpLndpdGhfc3VmZml4LCAnLycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIFAoJ2EvYicpLndpdGhfc3VmZml4LCAnLicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIFAoJ2EvYicpLndpdGhfc3VmZml4LCAnLy5neicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIFAoJ2EvYicpLndpdGhfc3VmZml4LCAnYy9kJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgUCgnYS9iJykud2l0aF9zdWZmaXgsICcuYy8uZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIFAoJ2EvYicpLndpdGhfc3VmZml4LCAnLi8uZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIFAoJ2EvYicpLndpdGhfc3VmZml4LCAnLmQvLicpCisKKyAgICBkZWYgdGVzdF9yZWxhdGl2ZV90b19jb21tb24oc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBwID0gUCgnYS9iJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwLnJlbGF0aXZlX3RvKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHAucmVsYXRpdmVfdG8sIGInYScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5yZWxhdGl2ZV90byhQKCkpLCBQKCdhL2InKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJlbGF0aXZlX3RvKCcnKSwgUCgnYS9iJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5yZWxhdGl2ZV90byhQKCdhJykpLCBQKCdiJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5yZWxhdGl2ZV90bygnYScpLCBQKCdiJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5yZWxhdGl2ZV90bygnYS8nKSwgUCgnYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucmVsYXRpdmVfdG8oUCgnYS9iJykpLCBQKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5yZWxhdGl2ZV90bygnYS9iJyksIFAoKSkKKyAgICAgICAgIyBXaXRoIHNldmVyYWwgYXJncworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucmVsYXRpdmVfdG8oJ2EnLCAnYicpLCBQKCkpCisgICAgICAgICMgVW5yZWxhdGVkIHBhdGhzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHAucmVsYXRpdmVfdG8sIFAoJ2MnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcC5yZWxhdGl2ZV90bywgUCgnYS9iL2MnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcC5yZWxhdGl2ZV90bywgUCgnYS9jJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHAucmVsYXRpdmVfdG8sIFAoJy9hJykpCisgICAgICAgIHAgPSBQKCcvYS9iJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJlbGF0aXZlX3RvKFAoJy8nKSksIFAoJ2EvYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucmVsYXRpdmVfdG8oJy8nKSwgUCgnYS9iJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5yZWxhdGl2ZV90byhQKCcvYScpKSwgUCgnYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucmVsYXRpdmVfdG8oJy9hJyksIFAoJ2InKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJlbGF0aXZlX3RvKCcvYS8nKSwgUCgnYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucmVsYXRpdmVfdG8oUCgnL2EvYicpKSwgUCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucmVsYXRpdmVfdG8oJy9hL2InKSwgUCgpKQorICAgICAgICAjIFVucmVsYXRlZCBwYXRocworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwLnJlbGF0aXZlX3RvLCBQKCcvYycpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwLnJlbGF0aXZlX3RvLCBQKCcvYS9iL2MnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcC5yZWxhdGl2ZV90bywgUCgnL2EvYycpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwLnJlbGF0aXZlX3RvLCBQKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHAucmVsYXRpdmVfdG8sICcnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwLnJlbGF0aXZlX3RvLCBQKCdhJykpCisKKyAgICBkZWYgdGVzdF9waWNrbGluZ19jb21tb24oc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBwID0gUCgnL2EvYicpCisgICAgICAgIGZvciBwcm90byBpbiByYW5nZSgwLCBwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgZHVtcGVkID0gcGlja2xlLmR1bXBzKHAsIHByb3RvKQorICAgICAgICAgICAgcHAgPSBwaWNrbGUubG9hZHMoZHVtcGVkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhwcC5fX2NsYXNzX18sIHAuX19jbGFzc19fKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcCwgcCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaChwcCksIGhhc2gocCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihwcCksIHN0cihwKSkKKworCitjbGFzcyBQdXJlUG9zaXhQYXRoVGVzdChfQmFzZVB1cmVQYXRoVGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGNscyA9IHBhdGhsaWIuUHVyZVBvc2l4UGF0aAorCisgICAgZGVmIHRlc3Rfcm9vdChzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnL2EvYicpLnJvb3QsICcvJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvLy9hL2InKS5yb290LCAnLycpCisgICAgICAgICMgUE9TSVggc3BlY2lhbCBjYXNlIGZvciB0d28gbGVhZGluZyBzbGFzaGVzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnLy9hL2InKS5yb290LCAnLy8nKQorCisgICAgZGVmIHRlc3RfZXEoc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKFAoJ2EvYicpLCBQKCdBL2InKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvYScpLCBQKCcvLy9hJykpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoUCgnL2EnKSwgUCgnLy9hJykpCisKKyAgICBkZWYgdGVzdF9hc191cmkoc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy8nKS5hc191cmkoKSwgJ2ZpbGU6Ly8vJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvYS9iLmMnKS5hc191cmkoKSwgJ2ZpbGU6Ly8vYS9iLmMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy9hL2IlI2MnKS5hc191cmkoKSwgJ2ZpbGU6Ly8vYS9iJTI1JTIzYycpCisKKyAgICBkZWYgdGVzdF9hc191cmlfbm9uX2FzY2lpKHNlbGYpOgorICAgICAgICBmcm9tIHVybGxpYi5wYXJzZSBpbXBvcnQgcXVvdGVfZnJvbV9ieXRlcworICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3MuZnNlbmNvZGUoJ1x4ZTknKQorICAgICAgICBleGNlcHQgVW5pY29kZUVuY29kZUVycm9yOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiXFx4ZTkgY2Fubm90IGJlIGVuY29kZWQgdG8gdGhlIGZpbGVzeXN0ZW0gZW5jb2RpbmciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy9hL2JceGU5JykuYXNfdXJpKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpbGU6Ly8vYS9iJyArIHF1b3RlX2Zyb21fYnl0ZXMob3MuZnNlbmNvZGUoJ1x4ZTknKSkpCisKKyAgICBkZWYgdGVzdF9tYXRjaChzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgnQS5weScpLm1hdGNoKCdhLlBZJykpCisKKyAgICBkZWYgdGVzdF9pc19hYnNvbHV0ZShzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgpLmlzX2Fic29sdXRlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgnYScpLmlzX2Fic29sdXRlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgnYS9iLycpLmlzX2Fic29sdXRlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShQKCcvJykuaXNfYWJzb2x1dGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFAoJy9hJykuaXNfYWJzb2x1dGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFAoJy9hL2IvJykuaXNfYWJzb2x1dGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFAoJy8vYScpLmlzX2Fic29sdXRlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShQKCcvL2EvYicpLmlzX2Fic29sdXRlKCkpCisKKyAgICBkZWYgdGVzdF9pc19yZXNlcnZlZChzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoRmFsc2UsIFAoJycpLmlzX3Jlc2VydmVkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoRmFsc2UsIFAoJy8nKS5pc19yZXNlcnZlZCgpKQorICAgICAgICBzZWxmLmFzc2VydElzKEZhbHNlLCBQKCcvZm9vL2JhcicpLmlzX3Jlc2VydmVkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoRmFsc2UsIFAoJy9kZXYvY29uL1BSTi9OVUwnKS5pc19yZXNlcnZlZCgpKQorCisgICAgZGVmIHRlc3Rfam9pbihzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHAgPSBQKCcvL2EnKQorICAgICAgICBwcCA9IHAuam9pbnBhdGgoJ2InKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwLCBQKCcvL2EvYicpKQorICAgICAgICBwcCA9IFAoJy9hJykuam9pbnBhdGgoJy8vYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHAsIFAoJy8vYycpKQorICAgICAgICBwcCA9IFAoJy8vYScpLmpvaW5wYXRoKCcvYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHAsIFAoJy9jJykpCisKKyAgICBkZWYgdGVzdF9kaXYoc2VsZik6CisgICAgICAgICMgQmFzaWNhbGx5IHRoZSBzYW1lIGFzIGpvaW5wYXRoKCkKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHAgPSBQKCcvL2EnKQorICAgICAgICBwcCA9IHAgLyAnYicKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcCwgUCgnLy9hL2InKSkKKyAgICAgICAgcHAgPSBQKCcvYScpIC8gJy8vYycKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcCwgUCgnLy9jJykpCisgICAgICAgIHBwID0gUCgnLy9hJykgLyAnL2MnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHAsIFAoJy9jJykpCisKKworY2xhc3MgUHVyZVdpbmRvd3NQYXRoVGVzdChfQmFzZVB1cmVQYXRoVGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGNscyA9IHBhdGhsaWIuUHVyZVdpbmRvd3NQYXRoCisKKyAgICBlcXVpdmFsZW5jZXMgPSBfQmFzZVB1cmVQYXRoVGVzdC5lcXVpdmFsZW5jZXMuY29weSgpCisgICAgZXF1aXZhbGVuY2VzLnVwZGF0ZSh7CisgICAgICAgICdjOmEnOiBbICgnYzonLCAnYScpLCAoJ2M6JywgJ2EvJyksICgnLycsICdjOicsICdhJykgXSwKKyAgICAgICAgJ2M6L2EnOiBbCisgICAgICAgICAgICAoJ2M6LycsICdhJyksICgnYzonLCAnLycsICdhJyksICgnYzonLCAnL2EnKSwKKyAgICAgICAgICAgICgnL3onLCAnYzovJywgJ2EnKSwgKCcvL3gveScsICdjOi8nLCAnYScpLAorICAgICAgICAgICAgXSwKKyAgICAgICAgJy8vYS9iLyc6IFsgKCcvL2EvYicsKSBdLAorICAgICAgICAnLy9hL2IvYyc6IFsKKyAgICAgICAgICAgICgnLy9hL2InLCAnYycpLCAoJy8vYS9iLycsICdjJyksCisgICAgICAgICAgICBdLAorICAgIH0pCisKKyAgICBkZWYgdGVzdF9zdHIoc2VsZik6CisgICAgICAgIHAgPSBzZWxmLmNscygnYS9iL2MnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihwKSwgJ2FcXGJcXGMnKQorICAgICAgICBwID0gc2VsZi5jbHMoJ2M6L2EvYi9jJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIocCksICdjOlxcYVxcYlxcYycpCisgICAgICAgIHAgPSBzZWxmLmNscygnLy9hL2InKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihwKSwgJ1xcXFxhXFxiXFwnKQorICAgICAgICBwID0gc2VsZi5jbHMoJy8vYS9iL2MnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihwKSwgJ1xcXFxhXFxiXFxjJykKKyAgICAgICAgcCA9IHNlbGYuY2xzKCcvL2EvYi9jL2QnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihwKSwgJ1xcXFxhXFxiXFxjXFxkJykKKworICAgIGRlZiB0ZXN0X3N0cl9zdWJjbGFzcyhzZWxmKToKKyAgICAgICAgc2VsZi5fY2hlY2tfc3RyX3N1YmNsYXNzKCdjOicpCisgICAgICAgIHNlbGYuX2NoZWNrX3N0cl9zdWJjbGFzcygnYzphJykKKyAgICAgICAgc2VsZi5fY2hlY2tfc3RyX3N1YmNsYXNzKCdjOmFcXGIudHh0JykKKyAgICAgICAgc2VsZi5fY2hlY2tfc3RyX3N1YmNsYXNzKCdjOlxcJykKKyAgICAgICAgc2VsZi5fY2hlY2tfc3RyX3N1YmNsYXNzKCdjOlxcYScpCisgICAgICAgIHNlbGYuX2NoZWNrX3N0cl9zdWJjbGFzcygnYzpcXGFcXGIudHh0JykKKyAgICAgICAgc2VsZi5fY2hlY2tfc3RyX3N1YmNsYXNzKCdcXFxcc29tZVxcc2hhcmUnKQorICAgICAgICBzZWxmLl9jaGVja19zdHJfc3ViY2xhc3MoJ1xcXFxzb21lXFxzaGFyZVxcYScpCisgICAgICAgIHNlbGYuX2NoZWNrX3N0cl9zdWJjbGFzcygnXFxcXHNvbWVcXHNoYXJlXFxhXFxiLnR4dCcpCisKKyAgICBkZWYgdGVzdF9lcShzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzphL2InKSwgUCgnYzphL2InKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOmEvYicpLCBQKCdjOicsICdhJywgJ2InKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChQKCdjOmEvYicpLCBQKCdkOmEvYicpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKFAoJ2M6YS9iJyksIFAoJ2M6L2EvYicpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKFAoJy9hL2InKSwgUCgnYzovYS9iJykpCisgICAgICAgICMgQ2FzZS1pbnNlbnNpdGl2aXR5CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYS9CJyksIFAoJ0EvYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ0M6YS9CJyksIFAoJ2M6QS9iJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnLy9Tb21lL1NIQVJFL2EvQicpLCBQKCcvL3NvbUUvc2hhcmUvQS9iJykpCisKKyAgICBkZWYgdGVzdF9hc191cmkoc2VsZik6CisgICAgICAgIGZyb20gdXJsbGliLnBhcnNlIGltcG9ydCBxdW90ZV9mcm9tX2J5dGVzCisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgUCgnL2EvYicpLmFzX3VyaSgpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBQKCdjOmEvYicpLmFzX3VyaSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzovJykuYXNfdXJpKCksICdmaWxlOi8vL2M6LycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzovYS9iLmMnKS5hc191cmkoKSwgJ2ZpbGU6Ly8vYzovYS9iLmMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6L2EvYiUjYycpLmFzX3VyaSgpLCAnZmlsZTovLy9jOi9hL2IlMjUlMjNjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOi9hL2JceGU5JykuYXNfdXJpKCksICdmaWxlOi8vL2M6L2EvYiVDMyVBOScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnLy9zb21lL3NoYXJlLycpLmFzX3VyaSgpLCAnZmlsZTovL3NvbWUvc2hhcmUvJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvL3NvbWUvc2hhcmUvYS9iLmMnKS5hc191cmkoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnZmlsZTovL3NvbWUvc2hhcmUvYS9iLmMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy8vc29tZS9zaGFyZS9hL2IlI2NceGU5JykuYXNfdXJpKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpbGU6Ly9zb21lL3NoYXJlL2EvYiUyNSUyM2MlQzMlQTknKQorCisgICAgZGVmIHRlc3RfbWF0Y2hfY29tbW9uKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgIyBBYnNvbHV0ZSBwYXR0ZXJucworICAgICAgICBzZWxmLmFzc2VydFRydWUoUCgnYzovYi5weScpLm1hdGNoKCcvKi5weScpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoUCgnYzovYi5weScpLm1hdGNoKCdjOioucHknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFAoJ2M6L2IucHknKS5tYXRjaCgnYzovKi5weScpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAoJ2Q6L2IucHknKS5tYXRjaCgnYzovKi5weScpKSAgIyB3cm9uZyBkcml2ZQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAoJ2IucHknKS5tYXRjaCgnLyoucHknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQKCdiLnB5JykubWF0Y2goJ2M6Ki5weScpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAoJ2IucHknKS5tYXRjaCgnYzovKi5weScpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAoJ2M6Yi5weScpLm1hdGNoKCcvKi5weScpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAoJ2M6Yi5weScpLm1hdGNoKCdjOi8qLnB5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgnL2IucHknKS5tYXRjaCgnYzoqLnB5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgnL2IucHknKS5tYXRjaCgnYzovKi5weScpKQorICAgICAgICAjIFVOQyBwYXR0ZXJucworICAgICAgICBzZWxmLmFzc2VydFRydWUoUCgnLy9zb21lL3NoYXJlL2EucHknKS5tYXRjaCgnLyoucHknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFAoJy8vc29tZS9zaGFyZS9hLnB5JykubWF0Y2goJy8vc29tZS9zaGFyZS8qLnB5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgnLy9vdGhlci9zaGFyZS9hLnB5JykubWF0Y2goJy8vc29tZS9zaGFyZS8qLnB5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgnLy9zb21lL3NoYXJlL2EvYi5weScpLm1hdGNoKCcvL3NvbWUvc2hhcmUvKi5weScpKQorICAgICAgICAjIENhc2UtaW5zZW5zaXRpdml0eQorICAgICAgICBzZWxmLmFzc2VydFRydWUoUCgnQi5weScpLm1hdGNoKCdiLlBZJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShQKCdjOi9hL0IuUHknKS5tYXRjaCgnQzovQS8qLnBZJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShQKCcvL1NvbWUvU2hhcmUvQi5QeScpLm1hdGNoKCcvL3NvbUUvc2hhckUvKi5wWScpKQorCisgICAgZGVmIHRlc3Rfb3JkZXJpbmdfY29tbW9uKHNlbGYpOgorICAgICAgICAjIENhc2UtaW5zZW5zaXRpdml0eQorICAgICAgICBkZWYgYXNzZXJ0T3JkZXJlZEVxdWFsKGEsIGIpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwoYSwgYikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKGIsIGEpCisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBwID0gUCgnYzpBL2InKQorICAgICAgICBxID0gUCgnQzphL0InKQorICAgICAgICBhc3NlcnRPcmRlcmVkRXF1YWwocCwgcSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShwIDwgcSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShwID4gcSkKKyAgICAgICAgcCA9IFAoJy8vc29tZS9TaGFyZS9BL2InKQorICAgICAgICBxID0gUCgnLy9Tb21lL1NIQVJFL2EvQicpCisgICAgICAgIGFzc2VydE9yZGVyZWRFcXVhbChwLCBxKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHAgPCBxKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHAgPiBxKQorCisgICAgZGVmIHRlc3RfcGFydHMoc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBwID0gUCgnYzphL2InKQorICAgICAgICBwYXJ0cyA9IHAucGFydHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJ0cywgKCdjOicsICdhJywgJ2InKSkKKyAgICAgICAgcCA9IFAoJ2M6L2EvYicpCisgICAgICAgIHBhcnRzID0gcC5wYXJ0cworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnRzLCAoJ2M6XFwnLCAnYScsICdiJykpCisgICAgICAgIHAgPSBQKCcvL2EvYi9jL2QnKQorICAgICAgICBwYXJ0cyA9IHAucGFydHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJ0cywgKCdcXFxcYVxcYlxcJywgJ2MnLCAnZCcpKQorCisgICAgZGVmIHRlc3RfcGFyZW50KHNlbGYpOgorICAgICAgICAjIEFuY2hvcmVkCisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBwID0gUCgnejphL2IvYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wYXJlbnQsIFAoJ3o6YS9iJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wYXJlbnQucGFyZW50LCBQKCd6OmEnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnBhcmVudC5wYXJlbnQucGFyZW50LCBQKCd6OicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucGFyZW50LnBhcmVudC5wYXJlbnQucGFyZW50LCBQKCd6OicpKQorICAgICAgICBwID0gUCgnejovYS9iL2MnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucGFyZW50LCBQKCd6Oi9hL2InKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnBhcmVudC5wYXJlbnQsIFAoJ3o6L2EnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnBhcmVudC5wYXJlbnQucGFyZW50LCBQKCd6Oi8nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnBhcmVudC5wYXJlbnQucGFyZW50LnBhcmVudCwgUCgnejovJykpCisgICAgICAgIHAgPSBQKCcvL2EvYi9jL2QnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucGFyZW50LCBQKCcvL2EvYi9jJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wYXJlbnQucGFyZW50LCBQKCcvL2EvYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucGFyZW50LnBhcmVudC5wYXJlbnQsIFAoJy8vYS9iJykpCisKKyAgICBkZWYgdGVzdF9wYXJlbnRzKHNlbGYpOgorICAgICAgICAjIEFuY2hvcmVkCisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBwID0gUCgnejphL2IvJykKKyAgICAgICAgcGFyID0gcC5wYXJlbnRzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHBhciksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyWzBdLCBQKCd6OmEnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJbMV0sIFAoJ3o6JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChwYXIpLCBbUCgnejphJyksIFAoJ3o6JyldKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IpOgorICAgICAgICAgICAgcGFyWzJdCisgICAgICAgIHAgPSBQKCd6Oi9hL2IvJykKKyAgICAgICAgcGFyID0gcC5wYXJlbnRzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHBhciksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyWzBdLCBQKCd6Oi9hJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyWzFdLCBQKCd6Oi8nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHBhciksIFtQKCd6Oi9hJyksIFAoJ3o6LycpXSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yKToKKyAgICAgICAgICAgIHBhclsyXQorICAgICAgICBwID0gUCgnLy9hL2IvYy9kJykKKyAgICAgICAgcGFyID0gcC5wYXJlbnRzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHBhciksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyWzBdLCBQKCcvL2EvYi9jJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyWzFdLCBQKCcvL2EvYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QocGFyKSwgW1AoJy8vYS9iL2MnKSwgUCgnLy9hL2InKV0pCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvcik6CisgICAgICAgICAgICBwYXJbMl0KKworICAgIGRlZiB0ZXN0X2RyaXZlKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOicpLmRyaXZlLCAnYzonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6YS9iJykuZHJpdmUsICdjOicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzovJykuZHJpdmUsICdjOicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzovYS9iLycpLmRyaXZlLCAnYzonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy8vYS9iJykuZHJpdmUsICdcXFxcYVxcYicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnLy9hL2IvJykuZHJpdmUsICdcXFxcYVxcYicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnLy9hL2IvYy9kJykuZHJpdmUsICdcXFxcYVxcYicpCisKKyAgICBkZWYgdGVzdF9yb290KHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOicpLnJvb3QsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6YS9iJykucm9vdCwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzovJykucm9vdCwgJ1xcJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOi9hL2IvJykucm9vdCwgJ1xcJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvL2EvYicpLnJvb3QsICdcXCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnLy9hL2IvJykucm9vdCwgJ1xcJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvL2EvYi9jL2QnKS5yb290LCAnXFwnKQorCisgICAgZGVmIHRlc3RfYW5jaG9yKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOicpLmFuY2hvciwgJ2M6JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOmEvYicpLmFuY2hvciwgJ2M6JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOi8nKS5hbmNob3IsICdjOlxcJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOi9hL2IvJykuYW5jaG9yLCAnYzpcXCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnLy9hL2InKS5hbmNob3IsICdcXFxcYVxcYlxcJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvL2EvYi8nKS5hbmNob3IsICdcXFxcYVxcYlxcJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvL2EvYi9jL2QnKS5hbmNob3IsICdcXFxcYVxcYlxcJykKKworICAgIGRlZiB0ZXN0X25hbWUoc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6JykubmFtZSwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzovJykubmFtZSwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzphL2InKS5uYW1lLCAnYicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzovYS9iJykubmFtZSwgJ2InKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6YS9iLnB5JykubmFtZSwgJ2IucHknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6L2EvYi5weScpLm5hbWUsICdiLnB5JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvL015LnB5L1NoYXJlLnBocCcpLm5hbWUsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy8vTXkucHkvU2hhcmUucGhwL2EvYicpLm5hbWUsICdiJykKKworICAgIGRlZiB0ZXN0X3N1ZmZpeChzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzonKS5zdWZmaXgsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6LycpLnN1ZmZpeCwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzphL2InKS5zdWZmaXgsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6L2EvYicpLnN1ZmZpeCwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzphL2IucHknKS5zdWZmaXgsICcucHknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6L2EvYi5weScpLnN1ZmZpeCwgJy5weScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzphLy5oZ3JjJykuc3VmZml4LCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOi9hLy5oZ3JjJykuc3VmZml4LCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOmEvLmhnLnJjJykuc3VmZml4LCAnLnJjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOi9hLy5oZy5yYycpLnN1ZmZpeCwgJy5yYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzphL2IudGFyLmd6Jykuc3VmZml4LCAnLmd6JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOi9hL2IudGFyLmd6Jykuc3VmZml4LCAnLmd6JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOmEvU29tZSBuYW1lLiBFbmRpbmcgd2l0aCBhIGRvdC4nKS5zdWZmaXgsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6L2EvU29tZSBuYW1lLiBFbmRpbmcgd2l0aCBhIGRvdC4nKS5zdWZmaXgsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy8vTXkucHkvU2hhcmUucGhwJykuc3VmZml4LCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvL015LnB5L1NoYXJlLnBocC9hL2InKS5zdWZmaXgsICcnKQorCisgICAgZGVmIHRlc3Rfc3VmZml4ZXMoc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6Jykuc3VmZml4ZXMsIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6LycpLnN1ZmZpeGVzLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOmEvYicpLnN1ZmZpeGVzLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOi9hL2InKS5zdWZmaXhlcywgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzphL2IucHknKS5zdWZmaXhlcywgWycucHknXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOi9hL2IucHknKS5zdWZmaXhlcywgWycucHknXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOmEvLmhncmMnKS5zdWZmaXhlcywgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzovYS8uaGdyYycpLnN1ZmZpeGVzLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOmEvLmhnLnJjJykuc3VmZml4ZXMsIFsnLnJjJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzovYS8uaGcucmMnKS5zdWZmaXhlcywgWycucmMnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOmEvYi50YXIuZ3onKS5zdWZmaXhlcywgWycudGFyJywgJy5neiddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6L2EvYi50YXIuZ3onKS5zdWZmaXhlcywgWycudGFyJywgJy5neiddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy8vTXkucHkvU2hhcmUucGhwJykuc3VmZml4ZXMsIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy8vTXkucHkvU2hhcmUucGhwL2EvYicpLnN1ZmZpeGVzLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOmEvU29tZSBuYW1lLiBFbmRpbmcgd2l0aCBhIGRvdC4nKS5zdWZmaXhlcywgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzovYS9Tb21lIG5hbWUuIEVuZGluZyB3aXRoIGEgZG90LicpLnN1ZmZpeGVzLCBbXSkKKworICAgIGRlZiB0ZXN0X3N0ZW0oc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6Jykuc3RlbSwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzouJykuc3RlbSwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzouLicpLnN0ZW0sICcuLicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzovJykuc3RlbSwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzphL2InKS5zdGVtLCAnYicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzphL2IucHknKS5zdGVtLCAnYicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzphLy5oZ3JjJykuc3RlbSwgJy5oZ3JjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOmEvLmhnLnJjJykuc3RlbSwgJy5oZycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzphL2IudGFyLmd6Jykuc3RlbSwgJ2IudGFyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOmEvU29tZSBuYW1lLiBFbmRpbmcgd2l0aCBhIGRvdC4nKS5zdGVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICdTb21lIG5hbWUuIEVuZGluZyB3aXRoIGEgZG90LicpCisKKyAgICBkZWYgdGVzdF93aXRoX25hbWUoc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6YS9iJykud2l0aF9uYW1lKCdkLnhtbCcpLCBQKCdjOmEvZC54bWwnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOi9hL2InKS53aXRoX25hbWUoJ2QueG1sJyksIFAoJ2M6L2EvZC54bWwnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOmEvRG90IGVuZGluZy4nKS53aXRoX25hbWUoJ2QueG1sJyksIFAoJ2M6YS9kLnhtbCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6L2EvRG90IGVuZGluZy4nKS53aXRoX25hbWUoJ2QueG1sJyksIFAoJ2M6L2EvZC54bWwnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgUCgnYzonKS53aXRoX25hbWUsICdkLnhtbCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIFAoJ2M6LycpLndpdGhfbmFtZSwgJ2QueG1sJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgUCgnLy9NeS9TaGFyZScpLndpdGhfbmFtZSwgJ2QueG1sJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgUCgnYzphL2InKS53aXRoX25hbWUsICdkOicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIFAoJ2M6YS9iJykud2l0aF9uYW1lLCAnZDplJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgUCgnYzphL2InKS53aXRoX25hbWUsICdkOi9lJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgUCgnYzphL2InKS53aXRoX25hbWUsICcvL015L1NoYXJlJykKKworICAgIGRlZiB0ZXN0X3dpdGhfc3VmZml4KHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOmEvYicpLndpdGhfc3VmZml4KCcuZ3onKSwgUCgnYzphL2IuZ3onKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOi9hL2InKS53aXRoX3N1ZmZpeCgnLmd6JyksIFAoJ2M6L2EvYi5neicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6YS9iLnB5Jykud2l0aF9zdWZmaXgoJy5neicpLCBQKCdjOmEvYi5neicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6L2EvYi5weScpLndpdGhfc3VmZml4KCcuZ3onKSwgUCgnYzovYS9iLmd6JykpCisgICAgICAgICMgUGF0aCBkb2Vzbid0IGhhdmUgYSAiZmlsZW5hbWUiIGNvbXBvbmVudAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBQKCcnKS53aXRoX3N1ZmZpeCwgJy5neicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIFAoJy4nKS53aXRoX3N1ZmZpeCwgJy5neicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIFAoJy8nKS53aXRoX3N1ZmZpeCwgJy5neicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIFAoJy8vTXkvU2hhcmUnKS53aXRoX3N1ZmZpeCwgJy5neicpCisgICAgICAgICMgSW52YWxpZCBzdWZmaXgKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgUCgnYzphL2InKS53aXRoX3N1ZmZpeCwgJ2d6JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgUCgnYzphL2InKS53aXRoX3N1ZmZpeCwgJy8nKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBQKCdjOmEvYicpLndpdGhfc3VmZml4LCAnXFwnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBQKCdjOmEvYicpLndpdGhfc3VmZml4LCAnYzonKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBQKCdjOmEvYicpLndpdGhfc3VmZml4LCAnLy5neicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIFAoJ2M6YS9iJykud2l0aF9zdWZmaXgsICdcXC5neicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIFAoJ2M6YS9iJykud2l0aF9zdWZmaXgsICdjOi5neicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIFAoJ2M6YS9iJykud2l0aF9zdWZmaXgsICdjL2QnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBQKCdjOmEvYicpLndpdGhfc3VmZml4LCAnY1xcZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIFAoJ2M6YS9iJykud2l0aF9zdWZmaXgsICcuYy9kJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgUCgnYzphL2InKS53aXRoX3N1ZmZpeCwgJy5jXFxkJykKKworICAgIGRlZiB0ZXN0X3JlbGF0aXZlX3RvKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgcCA9IFAoJ0M6Rm9vL0JhcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5yZWxhdGl2ZV90byhQKCdjOicpKSwgUCgnRm9vL0JhcicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucmVsYXRpdmVfdG8oJ2M6JyksIFAoJ0Zvby9CYXInKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJlbGF0aXZlX3RvKFAoJ2M6Zm9PJykpLCBQKCdCYXInKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJlbGF0aXZlX3RvKCdjOmZvTycpLCBQKCdCYXInKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJlbGF0aXZlX3RvKCdjOmZvTy8nKSwgUCgnQmFyJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5yZWxhdGl2ZV90byhQKCdjOmZvTy9iYVInKSksIFAoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJlbGF0aXZlX3RvKCdjOmZvTy9iYVInKSwgUCgpKQorICAgICAgICAjIFVucmVsYXRlZCBwYXRocworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwLnJlbGF0aXZlX3RvLCBQKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHAucmVsYXRpdmVfdG8sICcnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwLnJlbGF0aXZlX3RvLCBQKCdkOicpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwLnJlbGF0aXZlX3RvLCBQKCcvJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHAucmVsYXRpdmVfdG8sIFAoJ0ZvbycpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwLnJlbGF0aXZlX3RvLCBQKCcvRm9vJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHAucmVsYXRpdmVfdG8sIFAoJ0M6L0ZvbycpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwLnJlbGF0aXZlX3RvLCBQKCdDOkZvby9CYXIvQmF6JykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHAucmVsYXRpdmVfdG8sIFAoJ0M6Rm9vL0JheicpKQorICAgICAgICBwID0gUCgnQzovRm9vL0JhcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5yZWxhdGl2ZV90byhQKCdjOicpKSwgUCgnL0Zvby9CYXInKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJlbGF0aXZlX3RvKCdjOicpLCBQKCcvRm9vL0JhcicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihwLnJlbGF0aXZlX3RvKFAoJ2M6JykpKSwgJ1xcRm9vXFxCYXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihwLnJlbGF0aXZlX3RvKCdjOicpKSwgJ1xcRm9vXFxCYXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucmVsYXRpdmVfdG8oUCgnYzovJykpLCBQKCdGb28vQmFyJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5yZWxhdGl2ZV90bygnYzovJyksIFAoJ0Zvby9CYXInKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJlbGF0aXZlX3RvKFAoJ2M6L2ZvTycpKSwgUCgnQmFyJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5yZWxhdGl2ZV90bygnYzovZm9PJyksIFAoJ0JhcicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucmVsYXRpdmVfdG8oJ2M6L2ZvTy8nKSwgUCgnQmFyJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5yZWxhdGl2ZV90byhQKCdjOi9mb08vYmFSJykpLCBQKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5yZWxhdGl2ZV90bygnYzovZm9PL2JhUicpLCBQKCkpCisgICAgICAgICMgVW5yZWxhdGVkIHBhdGhzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHAucmVsYXRpdmVfdG8sIFAoJ0M6L0JheicpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwLnJlbGF0aXZlX3RvLCBQKCdDOi9Gb28vQmFyL0JheicpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwLnJlbGF0aXZlX3RvLCBQKCdDOi9Gb28vQmF6JykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHAucmVsYXRpdmVfdG8sIFAoJ0M6Rm9vJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHAucmVsYXRpdmVfdG8sIFAoJ2Q6JykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHAucmVsYXRpdmVfdG8sIFAoJ2Q6LycpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwLnJlbGF0aXZlX3RvLCBQKCcvJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHAucmVsYXRpdmVfdG8sIFAoJy9Gb28nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcC5yZWxhdGl2ZV90bywgUCgnLy9DL0ZvbycpKQorICAgICAgICAjIFVOQyBwYXRocworICAgICAgICBwID0gUCgnLy9TZXJ2ZXIvU2hhcmUvRm9vL0JhcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5yZWxhdGl2ZV90byhQKCcvL3NFcnZlci9zSGFyZScpKSwgUCgnRm9vL0JhcicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucmVsYXRpdmVfdG8oJy8vc0VydmVyL3NIYXJlJyksIFAoJ0Zvby9CYXInKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJlbGF0aXZlX3RvKCcvL3NFcnZlci9zSGFyZS8nKSwgUCgnRm9vL0JhcicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucmVsYXRpdmVfdG8oUCgnLy9zRXJ2ZXIvc0hhcmUvRm9vJykpLCBQKCdCYXInKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJlbGF0aXZlX3RvKCcvL3NFcnZlci9zSGFyZS9Gb28nKSwgUCgnQmFyJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5yZWxhdGl2ZV90bygnLy9zRXJ2ZXIvc0hhcmUvRm9vLycpLCBQKCdCYXInKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJlbGF0aXZlX3RvKFAoJy8vc0VydmVyL3NIYXJlL0Zvby9CYXInKSksIFAoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJlbGF0aXZlX3RvKCcvL3NFcnZlci9zSGFyZS9Gb28vQmFyJyksIFAoKSkKKyAgICAgICAgIyBVbnJlbGF0ZWQgcGF0aHMKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcC5yZWxhdGl2ZV90bywgUCgnL1NlcnZlci9TaGFyZS9Gb28nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcC5yZWxhdGl2ZV90bywgUCgnYzovU2VydmVyL1NoYXJlL0ZvbycpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwLnJlbGF0aXZlX3RvLCBQKCcvL3ovU2hhcmUvRm9vJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHAucmVsYXRpdmVfdG8sIFAoJy8vU2VydmVyL3ovRm9vJykpCisKKyAgICBkZWYgdGVzdF9pc19hYnNvbHV0ZShzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgICMgVW5kZXIgTlQsIG9ubHkgcGF0aHMgd2l0aCBib3RoIGEgZHJpdmUgYW5kIGEgcm9vdCBhcmUgYWJzb2x1dGUKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQKCkuaXNfYWJzb2x1dGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQKCdhJykuaXNfYWJzb2x1dGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQKCdhL2IvJykuaXNfYWJzb2x1dGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQKCcvJykuaXNfYWJzb2x1dGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQKCcvYScpLmlzX2Fic29sdXRlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgnL2EvYi8nKS5pc19hYnNvbHV0ZSgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAoJ2M6JykuaXNfYWJzb2x1dGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQKCdjOmEnKS5pc19hYnNvbHV0ZSgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAoJ2M6YS9iLycpLmlzX2Fic29sdXRlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShQKCdjOi8nKS5pc19hYnNvbHV0ZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoUCgnYzovYScpLmlzX2Fic29sdXRlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShQKCdjOi9hL2IvJykuaXNfYWJzb2x1dGUoKSkKKyAgICAgICAgIyBVTkMgcGF0aHMgYXJlIGFic29sdXRlIGJ5IGRlZmluaXRpb24KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFAoJy8vYS9iJykuaXNfYWJzb2x1dGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFAoJy8vYS9iLycpLmlzX2Fic29sdXRlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShQKCcvL2EvYi9jJykuaXNfYWJzb2x1dGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFAoJy8vYS9iL2MvZCcpLmlzX2Fic29sdXRlKCkpCisKKyAgICBkZWYgdGVzdF9qb2luKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgcCA9IFAoJ0M6L2EvYicpCisgICAgICAgIHBwID0gcC5qb2lucGF0aCgneC95JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcCwgUCgnQzovYS9iL3gveScpKQorICAgICAgICBwcCA9IHAuam9pbnBhdGgoJy94L3knKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwLCBQKCdDOi94L3knKSkKKyAgICAgICAgIyBKb2luaW5nIHdpdGggYSBkaWZmZXJlbnQgZHJpdmUgPT4gdGhlIGZpcnN0IHBhdGggaXMgaWdub3JlZCwgZXZlbgorICAgICAgICAjIGlmIHRoZSBzZWNvbmQgcGF0aCBpcyByZWxhdGl2ZS4KKyAgICAgICAgcHAgPSBwLmpvaW5wYXRoKCdEOngveScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHAsIFAoJ0Q6eC95JykpCisgICAgICAgIHBwID0gcC5qb2lucGF0aCgnRDoveC95JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcCwgUCgnRDoveC95JykpCisgICAgICAgIHBwID0gcC5qb2lucGF0aCgnLy9ob3N0L3NoYXJlL3gveScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHAsIFAoJy8vaG9zdC9zaGFyZS94L3knKSkKKyAgICAgICAgIyBKb2luaW5nIHdpdGggdGhlIHNhbWUgZHJpdmUgPT4gdGhlIGZpcnN0IHBhdGggaXMgYXBwZW5kZWQgdG8gaWYKKyAgICAgICAgIyB0aGUgc2Vjb25kIHBhdGggaXMgcmVsYXRpdmUuCisgICAgICAgIHBwID0gcC5qb2lucGF0aCgnYzp4L3knKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwLCBQKCdDOi9hL2IveC95JykpCisgICAgICAgIHBwID0gcC5qb2lucGF0aCgnYzoveC95JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcCwgUCgnQzoveC95JykpCisKKyAgICBkZWYgdGVzdF9kaXYoc2VsZik6CisgICAgICAgICMgQmFzaWNhbGx5IHRoZSBzYW1lIGFzIGpvaW5wYXRoKCkKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHAgPSBQKCdDOi9hL2InKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAgLyAneC95JywgUCgnQzovYS9iL3gveScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAgLyAneCcgLyAneScsIFAoJ0M6L2EvYi94L3knKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwIC8gJy94L3knLCBQKCdDOi94L3knKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwIC8gJy94JyAvICd5JywgUCgnQzoveC95JykpCisgICAgICAgICMgSm9pbmluZyB3aXRoIGEgZGlmZmVyZW50IGRyaXZlID0+IHRoZSBmaXJzdCBwYXRoIGlzIGlnbm9yZWQsIGV2ZW4KKyAgICAgICAgIyBpZiB0aGUgc2Vjb25kIHBhdGggaXMgcmVsYXRpdmUuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCAvICdEOngveScsIFAoJ0Q6eC95JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCAvICdEOicgLyAneC95JywgUCgnRDp4L3knKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwIC8gJ0Q6L3gveScsIFAoJ0Q6L3gveScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAgLyAnRDonIC8gJy94L3knLCBQKCdEOi94L3knKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwIC8gJy8vaG9zdC9zaGFyZS94L3knLCBQKCcvL2hvc3Qvc2hhcmUveC95JykpCisgICAgICAgICMgSm9pbmluZyB3aXRoIHRoZSBzYW1lIGRyaXZlID0+IHRoZSBmaXJzdCBwYXRoIGlzIGFwcGVuZGVkIHRvIGlmCisgICAgICAgICMgdGhlIHNlY29uZCBwYXRoIGlzIHJlbGF0aXZlLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAgLyAnYzp4L3knLCBQKCdDOi9hL2IveC95JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCAvICdjOi94L3knLCBQKCdDOi94L3knKSkKKworICAgIGRlZiB0ZXN0X2lzX3Jlc2VydmVkKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhGYWxzZSwgUCgnJykuaXNfcmVzZXJ2ZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhGYWxzZSwgUCgnLycpLmlzX3Jlc2VydmVkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoRmFsc2UsIFAoJy9mb28vYmFyJykuaXNfcmVzZXJ2ZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhUcnVlLCBQKCdjb24nKS5pc19yZXNlcnZlZCgpKQorICAgICAgICBzZWxmLmFzc2VydElzKFRydWUsIFAoJ05VTCcpLmlzX3Jlc2VydmVkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoVHJ1ZSwgUCgnTlVMLnR4dCcpLmlzX3Jlc2VydmVkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoVHJ1ZSwgUCgnY29tMScpLmlzX3Jlc2VydmVkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoVHJ1ZSwgUCgnY29tOS5iYXInKS5pc19yZXNlcnZlZCgpKQorICAgICAgICBzZWxmLmFzc2VydElzKEZhbHNlLCBQKCdiYXIuY29tOScpLmlzX3Jlc2VydmVkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoVHJ1ZSwgUCgnbHB0MScpLmlzX3Jlc2VydmVkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoVHJ1ZSwgUCgnbHB0OS5iYXInKS5pc19yZXNlcnZlZCgpKQorICAgICAgICBzZWxmLmFzc2VydElzKEZhbHNlLCBQKCdiYXIubHB0OScpLmlzX3Jlc2VydmVkKCkpCisgICAgICAgICMgT25seSB0aGUgbGFzdCBjb21wb25lbnQgbWF0dGVycworICAgICAgICBzZWxmLmFzc2VydElzKEZhbHNlLCBQKCdjOi9OVUwvY29uL2JheicpLmlzX3Jlc2VydmVkKCkpCisgICAgICAgICMgVU5DIHBhdGhzIGFyZSBuZXZlciByZXNlcnZlZAorICAgICAgICBzZWxmLmFzc2VydElzKEZhbHNlLCBQKCcvL215L3NoYXJlL251bC9jb24vYXV4JykuaXNfcmVzZXJ2ZWQoKSkKKworCitjbGFzcyBQdXJlUGF0aFRlc3QoX0Jhc2VQdXJlUGF0aFRlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBjbHMgPSBwYXRobGliLlB1cmVQYXRoCisKKyAgICBkZWYgdGVzdF9jb25jcmV0ZV9jbGFzcyhzZWxmKToKKyAgICAgICAgcCA9IHNlbGYuY2xzKCdhJykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKHApLAorICAgICAgICAgICAgcGF0aGxpYi5QdXJlV2luZG93c1BhdGggaWYgb3MubmFtZSA9PSAnbnQnIGVsc2UgcGF0aGxpYi5QdXJlUG9zaXhQYXRoKQorCisgICAgZGVmIHRlc3RfZGlmZmVyZW50X2ZsYXZvdXJzX3VuZXF1YWwoc2VsZik6CisgICAgICAgIHAgPSBwYXRobGliLlB1cmVQb3NpeFBhdGgoJ2EnKQorICAgICAgICBxID0gcGF0aGxpYi5QdXJlV2luZG93c1BhdGgoJ2EnKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHAsIHEpCisKKyAgICBkZWYgdGVzdF9kaWZmZXJlbnRfZmxhdm91cnNfdW5vcmRlcmVkKHNlbGYpOgorICAgICAgICBwID0gcGF0aGxpYi5QdXJlUG9zaXhQYXRoKCdhJykKKyAgICAgICAgcSA9IHBhdGhsaWIuUHVyZVdpbmRvd3NQYXRoKCdhJykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgcCA8IHEKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgcCA8PSBxCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHAgPiBxCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHAgPj0gcQorCisKKyMKKyMgVGVzdHMgZm9yIHRoZSBjb25jcmV0ZSBjbGFzc2VzCisjCisKKyMgTWFrZSBzdXJlIGFueSBzeW1ib2xpYyBsaW5rcyBpbiB0aGUgYmFzZSB0ZXN0IHBhdGggYXJlIHJlc29sdmVkCitCQVNFID0gb3MucGF0aC5yZWFscGF0aChURVNURk4pCitqb2luID0gbGFtYmRhICp4OiBvcy5wYXRoLmpvaW4oQkFTRSwgKngpCityZWxfam9pbiA9IGxhbWJkYSAqeDogb3MucGF0aC5qb2luKFRFU1RGTiwgKngpCisKK2RlZiBzeW1saW5rX3NraXBfcmVhc29uKCk6CisgICAgaWYgbm90IHBhdGhsaWIuc3VwcG9ydHNfc3ltbGlua3M6CisgICAgICAgIHJldHVybiAibm8gc3lzdGVtIHN1cHBvcnQgZm9yIHN5bWxpbmtzIgorICAgIHRyeToKKyAgICAgICAgb3Muc3ltbGluayhfX2ZpbGVfXywgQkFTRSkKKyAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICByZXR1cm4gc3RyKGUpCisgICAgZWxzZToKKyAgICAgICAgc3VwcG9ydC51bmxpbmsoQkFTRSkKKyAgICByZXR1cm4gTm9uZQorCitzeW1saW5rX3NraXBfcmVhc29uID0gc3ltbGlua19za2lwX3JlYXNvbigpCisKK29ubHlfbnQgPSB1bml0dGVzdC5za2lwSWYob3MubmFtZSAhPSAnbnQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdCByZXF1aXJlcyBhIFdpbmRvd3MtY29tcGF0aWJsZSBzeXN0ZW0nKQorb25seV9wb3NpeCA9IHVuaXR0ZXN0LnNraXBJZihvcy5uYW1lID09ICdudCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0IHJlcXVpcmVzIGEgUE9TSVgtY29tcGF0aWJsZSBzeXN0ZW0nKQord2l0aF9zeW1saW5rcyA9IHVuaXR0ZXN0LnNraXBJZihzeW1saW5rX3NraXBfcmVhc29uLCBzeW1saW5rX3NraXBfcmVhc29uKQorCisKK0Bvbmx5X3Bvc2l4CitjbGFzcyBQb3NpeFBhdGhBc1B1cmVUZXN0KFB1cmVQb3NpeFBhdGhUZXN0KToKKyAgICBjbHMgPSBwYXRobGliLlBvc2l4UGF0aAorCitAb25seV9udAorY2xhc3MgV2luZG93c1BhdGhBc1B1cmVUZXN0KFB1cmVXaW5kb3dzUGF0aFRlc3QpOgorICAgIGNscyA9IHBhdGhsaWIuV2luZG93c1BhdGgKKworCitjbGFzcyBfQmFzZVBhdGhUZXN0KG9iamVjdCk6CisgICAgIiIiVGVzdHMgZm9yIHRoZSBGUy1hY2Nlc3NpbmcgZnVuY3Rpb25hbGl0aWVzIG9mIHRoZSBQYXRoIGNsYXNzZXMuIiIiCisKKyAgICAjIChCQVNFKQorICAgICMgIHwKKyAgICAjICB8LS0gZGlyQS8KKyAgICAjICAgICAgIHwtLSBsaW5rQyAtPiAiLi4vZGlyQiIKKyAgICAjICB8LS0gZGlyQi8KKyAgICAjICB8ICAgIHwtLSBmaWxlQgorICAgICMgICAgICAgfC0tIGxpbmtEIC0+ICIuLi9kaXJCIgorICAgICMgIHwtLSBkaXJDLworICAgICMgIHwgICAgfC0tIGZpbGVDCisgICAgIyAgfCAgICB8LS0gZmlsZUQKKyAgICAjICB8LS0gZmlsZUEKKyAgICAjICB8LS0gbGlua0EgLT4gImZpbGVBIgorICAgICMgIHwtLSBsaW5rQiAtPiAiZGlyQiIKKyAgICAjCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIG9zLm1rZGlyKEJBU0UpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzdXBwb3J0LnJtdHJlZSwgQkFTRSkKKyAgICAgICAgb3MubWtkaXIoam9pbignZGlyQScpKQorICAgICAgICBvcy5ta2Rpcihqb2luKCdkaXJCJykpCisgICAgICAgIG9zLm1rZGlyKGpvaW4oJ2RpckMnKSkKKyAgICAgICAgb3MubWtkaXIoam9pbignZGlyQycsICdkaXJEJykpCisgICAgICAgIHdpdGggb3Blbihqb2luKCdmaWxlQScpLCAnd2InKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShiInRoaXMgaXMgZmlsZSBBXG4iKQorICAgICAgICB3aXRoIG9wZW4oam9pbignZGlyQicsICdmaWxlQicpLCAnd2InKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShiInRoaXMgaXMgZmlsZSBCXG4iKQorICAgICAgICB3aXRoIG9wZW4oam9pbignZGlyQycsICdmaWxlQycpLCAnd2InKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShiInRoaXMgaXMgZmlsZSBDXG4iKQorICAgICAgICB3aXRoIG9wZW4oam9pbignZGlyQycsICdkaXJEJywgJ2ZpbGVEJyksICd3YicpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKGIidGhpcyBpcyBmaWxlIERcbiIpCisgICAgICAgIGlmIG5vdCBzeW1saW5rX3NraXBfcmVhc29uOgorICAgICAgICAgICAgIyBSZWxhdGl2ZSBzeW1saW5rcworICAgICAgICAgICAgb3Muc3ltbGluaygnZmlsZUEnLCBqb2luKCdsaW5rQScpKQorICAgICAgICAgICAgb3Muc3ltbGluaygnbm9uLWV4aXN0aW5nJywgam9pbignYnJva2VuTGluaycpKQorICAgICAgICAgICAgc2VsZi5kaXJsaW5rKCdkaXJCJywgam9pbignbGlua0InKSkKKyAgICAgICAgICAgIHNlbGYuZGlybGluayhvcy5wYXRoLmpvaW4oJy4uJywgJ2RpckInKSwgam9pbignZGlyQScsICdsaW5rQycpKQorICAgICAgICAgICAgIyBUaGlzIG9uZSBnb2VzIHVwd2FyZHMgYnV0IGRvZXNuJ3QgY3JlYXRlIGEgbG9vcAorICAgICAgICAgICAgc2VsZi5kaXJsaW5rKG9zLnBhdGguam9pbignLi4nLCAnZGlyQicpLCBqb2luKCdkaXJCJywgJ2xpbmtEJykpCisKKyAgICBpZiBvcy5uYW1lID09ICdudCc6CisgICAgICAgICMgV29ya2Fyb3VuZCBmb3IgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTEzNzcyCisgICAgICAgIGRlZiBkaXJsaW5rKHNlbGYsIHNyYywgZGVzdCk6CisgICAgICAgICAgICBvcy5zeW1saW5rKHNyYywgZGVzdCwgdGFyZ2V0X2lzX2RpcmVjdG9yeT1UcnVlKQorICAgIGVsc2U6CisgICAgICAgIGRlZiBkaXJsaW5rKHNlbGYsIHNyYywgZGVzdCk6CisgICAgICAgICAgICBvcy5zeW1saW5rKHNyYywgZGVzdCkKKworICAgIGRlZiBhc3NlcnRTYW1lKHNlbGYsIHBhdGhfYSwgcGF0aF9iKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguc2FtZWZpbGUoc3RyKHBhdGhfYSksIHN0cihwYXRoX2IpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICIlciBhbmQgJXIgZG9uJ3QgcG9pbnQgdG8gdGhlIHNhbWUgZmlsZSIgJQorICAgICAgICAgICAgICAgICAgICAgICAgKHBhdGhfYSwgcGF0aF9iKSkKKworICAgIGRlZiBhc3NlcnRGaWxlTm90Rm91bmQoc2VsZiwgZnVuYywgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhGaWxlTm90Rm91bmRFcnJvcikgYXMgY206CisgICAgICAgICAgICBmdW5jKCphcmdzLCAqKmt3YXJncykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24uZXJybm8sIGVycm5vLkVOT0VOVCkKKworICAgIGRlZiBfdGVzdF9jd2Qoc2VsZiwgcCk6CisgICAgICAgIHEgPSBzZWxmLmNscyhvcy5nZXRjd2QoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLCBxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihwKSwgc3RyKHEpKQorICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUocCksIHR5cGUocSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwLmlzX2Fic29sdXRlKCkpCisKKyAgICBkZWYgdGVzdF9jd2Qoc2VsZik6CisgICAgICAgIHAgPSBzZWxmLmNscy5jd2QoKQorICAgICAgICBzZWxmLl90ZXN0X2N3ZChwKQorCisgICAgZGVmIHRlc3RfZW1wdHlfcGF0aChzZWxmKToKKyAgICAgICAgIyBUaGUgZW1wdHkgcGF0aCBwb2ludHMgdG8gJy4nCisgICAgICAgIHAgPSBzZWxmLmNscygnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnN0YXQoKSwgb3Muc3RhdCgnLicpKQorCisgICAgZGVmIHRlc3RfZXhpc3RzKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgcCA9IFAoQkFTRSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhUcnVlLCBwLmV4aXN0cygpKQorICAgICAgICBzZWxmLmFzc2VydElzKFRydWUsIChwIC8gJ2RpckEnKS5leGlzdHMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhUcnVlLCAocCAvICdmaWxlQScpLmV4aXN0cygpKQorICAgICAgICBzZWxmLmFzc2VydElzKEZhbHNlLCAocCAvICdmaWxlQScgLyAnYmFoJykuZXhpc3RzKCkpCisgICAgICAgIGlmIG5vdCBzeW1saW5rX3NraXBfcmVhc29uOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhUcnVlLCAocCAvICdsaW5rQScpLmV4aXN0cygpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhUcnVlLCAocCAvICdsaW5rQicpLmV4aXN0cygpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhUcnVlLCAocCAvICdsaW5rQicgLyAnZmlsZUInKS5leGlzdHMoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoRmFsc2UsIChwIC8gJ2xpbmtBJyAvICdiYWgnKS5leGlzdHMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhGYWxzZSwgKHAgLyAnZm9vJykuZXhpc3RzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoRmFsc2UsIFAoJy94eXp6eScpLmV4aXN0cygpKQorCisgICAgZGVmIHRlc3Rfb3Blbl9jb21tb24oc2VsZik6CisgICAgICAgIHAgPSBzZWxmLmNscyhCQVNFKQorICAgICAgICB3aXRoIChwIC8gJ2ZpbGVBJykub3BlbigncicpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZiwgaW8uVGV4dElPQmFzZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksICJ0aGlzIGlzIGZpbGUgQVxuIikKKyAgICAgICAgd2l0aCAocCAvICdmaWxlQScpLm9wZW4oJ3JiJykgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmLCBpby5CdWZmZXJlZElPQmFzZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCkuc3RyaXAoKSwgYiJ0aGlzIGlzIGZpbGUgQSIpCisgICAgICAgIHdpdGggKHAgLyAnZmlsZUEnKS5vcGVuKCdyYicsIGJ1ZmZlcmluZz0wKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGYsIGlvLlJhd0lPQmFzZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCkuc3RyaXAoKSwgYiJ0aGlzIGlzIGZpbGUgQSIpCisKKyAgICBkZWYgdGVzdF9pdGVyZGlyKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgcCA9IFAoQkFTRSkKKyAgICAgICAgaXQgPSBwLml0ZXJkaXIoKQorICAgICAgICBwYXRocyA9IHNldChpdCkKKyAgICAgICAgZXhwZWN0ZWQgPSBbJ2RpckEnLCAnZGlyQicsICdkaXJDJywgJ2ZpbGVBJ10KKyAgICAgICAgaWYgbm90IHN5bWxpbmtfc2tpcF9yZWFzb246CisgICAgICAgICAgICBleHBlY3RlZCArPSBbJ2xpbmtBJywgJ2xpbmtCJywgJ2Jyb2tlbkxpbmsnXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhdGhzLCB7IFAoQkFTRSwgcSkgZm9yIHEgaW4gZXhwZWN0ZWQgfSkKKworICAgIEB3aXRoX3N5bWxpbmtzCisgICAgZGVmIHRlc3RfaXRlcmRpcl9zeW1saW5rKHNlbGYpOgorICAgICAgICAjIF9faXRlcl9fIG9uIGEgc3ltbGluayB0byBhIGRpcmVjdG9yeQorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgcCA9IFAoQkFTRSwgJ2xpbmtCJykKKyAgICAgICAgcGF0aHMgPSBzZXQocC5pdGVyZGlyKCkpCisgICAgICAgIGV4cGVjdGVkID0geyBQKEJBU0UsICdsaW5rQicsIHEpIGZvciBxIGluIFsnZmlsZUInLCAnbGlua0QnXSB9CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGF0aHMsIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfaXRlcmRpcl9ub2RpcihzZWxmKToKKyAgICAgICAgIyBfX2l0ZXJfXyBvbiBzb21ldGhpbmcgdGhhdCBpcyBub3QgYSBkaXJlY3RvcnkKKyAgICAgICAgcCA9IHNlbGYuY2xzKEJBU0UsICdmaWxlQScpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcikgYXMgY206CisgICAgICAgICAgICBuZXh0KHAuaXRlcmRpcigpKQorICAgICAgICAjIEVOT0VOVCBvciBFSU5WQUwgdW5kZXIgV2luZG93cywgRU5PVERJUiBvdGhlcndpc2UKKyAgICAgICAgIyAoc2VlIGlzc3VlICMxMjgwMikKKyAgICAgICAgc2VsZi5hc3NlcnRJbihjbS5leGNlcHRpb24uZXJybm8sIChlcnJuby5FTk9URElSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm5vLkVOT0VOVCwgZXJybm8uRUlOVkFMKSkKKworICAgIGRlZiB0ZXN0X2dsb2JfY29tbW9uKHNlbGYpOgorICAgICAgICBkZWYgX2NoZWNrKGdsb2IsIGV4cGVjdGVkKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KGdsb2IpLCB7IFAoQkFTRSwgcSkgZm9yIHEgaW4gZXhwZWN0ZWQgfSkKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHAgPSBQKEJBU0UpCisgICAgICAgIGl0ID0gcC5nbG9iKCJmaWxlQSIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShpdCwgY29sbGVjdGlvbnMuSXRlcmF0b3IpCisgICAgICAgIF9jaGVjayhpdCwgWyJmaWxlQSJdKQorICAgICAgICBfY2hlY2socC5nbG9iKCJmaWxlQiIpLCBbXSkKKyAgICAgICAgX2NoZWNrKHAuZ2xvYigiZGlyKi9maWxlKiIpLCBbImRpckIvZmlsZUIiLCAiZGlyQy9maWxlQyJdKQorICAgICAgICBpZiBzeW1saW5rX3NraXBfcmVhc29uOgorICAgICAgICAgICAgX2NoZWNrKHAuZ2xvYigiKkEiKSwgWydkaXJBJywgJ2ZpbGVBJ10pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBfY2hlY2socC5nbG9iKCIqQSIpLCBbJ2RpckEnLCAnZmlsZUEnLCAnbGlua0EnXSkKKyAgICAgICAgaWYgc3ltbGlua19za2lwX3JlYXNvbjoKKyAgICAgICAgICAgIF9jaGVjayhwLmdsb2IoIipCLyoiKSwgWydkaXJCL2ZpbGVCJ10pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBfY2hlY2socC5nbG9iKCIqQi8qIiksIFsnZGlyQi9maWxlQicsICdkaXJCL2xpbmtEJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdsaW5rQi9maWxlQicsICdsaW5rQi9saW5rRCddKQorICAgICAgICBpZiBzeW1saW5rX3NraXBfcmVhc29uOgorICAgICAgICAgICAgX2NoZWNrKHAuZ2xvYigiKi9maWxlQiIpLCBbJ2RpckIvZmlsZUInXSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIF9jaGVjayhwLmdsb2IoIiovZmlsZUIiKSwgWydkaXJCL2ZpbGVCJywgJ2xpbmtCL2ZpbGVCJ10pCisKKyAgICBkZWYgdGVzdF9yZ2xvYl9jb21tb24oc2VsZik6CisgICAgICAgIGRlZiBfY2hlY2soZ2xvYiwgZXhwZWN0ZWQpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQoZ2xvYiksIHsgUChCQVNFLCBxKSBmb3IgcSBpbiBleHBlY3RlZCB9KQorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgcCA9IFAoQkFTRSkKKyAgICAgICAgaXQgPSBwLnJnbG9iKCJmaWxlQSIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShpdCwgY29sbGVjdGlvbnMuSXRlcmF0b3IpCisgICAgICAgICMgWFhYIGNhbm5vdCB0ZXN0IGJlY2F1c2Ugb2Ygc3ltbGluayBsb29wcyBpbiB0aGUgdGVzdCBzZXR1cAorICAgICAgICAjX2NoZWNrKGl0LCBbImZpbGVBIl0pCisgICAgICAgICNfY2hlY2socC5yZ2xvYigiZmlsZUIiKSwgWyJkaXJCL2ZpbGVCIl0pCisgICAgICAgICNfY2hlY2socC5yZ2xvYigiKi9maWxlQSIpLCBbIiJdKQorICAgICAgICAjX2NoZWNrKHAucmdsb2IoIiovZmlsZUIiKSwgWyJkaXJCL2ZpbGVCIl0pCisgICAgICAgICNfY2hlY2socC5yZ2xvYigiZmlsZSoiKSwgWyJmaWxlQSIsICJkaXJCL2ZpbGVCIl0pCisgICAgICAgICMgTm8gc3ltbGluayBsb29wcyBoZXJlCisgICAgICAgIHAgPSBQKEJBU0UsICJkaXJDIikKKyAgICAgICAgX2NoZWNrKHAucmdsb2IoImZpbGUqIiksIFsiZGlyQy9maWxlQyIsICJkaXJDL2RpckQvZmlsZUQiXSkKKyAgICAgICAgX2NoZWNrKHAucmdsb2IoIiovKiIpLCBbImRpckMvZGlyRC9maWxlRCJdKQorCisgICAgZGVmIHRlc3RfZ2xvYl9kb3Rkb3Qoc2VsZik6CisgICAgICAgICMgIi4uIiBpcyBub3Qgc3BlY2lhbCBpbiBnbG9icworICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgcCA9IFAoQkFTRSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQocC5nbG9iKCIuLiIpKSwgeyBQKEJBU0UsICIuLiIpIH0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KHAuZ2xvYigiZGlyQS8uLi9maWxlKiIpKSwgeyBQKEJBU0UsICJkaXJBLy4uL2ZpbGVBIikgfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQocC5nbG9iKCIuLi94eXp6eSIpKSwgc2V0KCkpCisKKyAgICBkZWYgX2NoZWNrX3Jlc29sdmVfcmVsYXRpdmUoc2VsZiwgcCwgZXhwZWN0ZWQpOgorICAgICAgICBxID0gcC5yZXNvbHZlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChxLCBleHBlY3RlZCkKKworICAgIGRlZiBfY2hlY2tfcmVzb2x2ZV9hYnNvbHV0ZShzZWxmLCBwLCBleHBlY3RlZCk6CisgICAgICAgIHEgPSBwLnJlc29sdmUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHEsIGV4cGVjdGVkKQorCisgICAgQHdpdGhfc3ltbGlua3MKKyAgICBkZWYgdGVzdF9yZXNvbHZlX2NvbW1vbihzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHAgPSBQKEJBU0UsICdmb28nKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgcC5yZXNvbHZlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24uZXJybm8sIGVycm5vLkVOT0VOVCkKKyAgICAgICAgIyBUaGVzZSBhcmUgYWxsIHJlbGF0aXZlIHN5bWxpbmtzCisgICAgICAgIHAgPSBQKEJBU0UsICdkaXJCJywgJ2ZpbGVCJykKKyAgICAgICAgc2VsZi5fY2hlY2tfcmVzb2x2ZV9yZWxhdGl2ZShwLCBwKQorICAgICAgICBwID0gUChCQVNFLCAnbGlua0EnKQorICAgICAgICBzZWxmLl9jaGVja19yZXNvbHZlX3JlbGF0aXZlKHAsIFAoQkFTRSwgJ2ZpbGVBJykpCisgICAgICAgIHAgPSBQKEJBU0UsICdkaXJBJywgJ2xpbmtDJywgJ2ZpbGVCJykKKyAgICAgICAgc2VsZi5fY2hlY2tfcmVzb2x2ZV9yZWxhdGl2ZShwLCBQKEJBU0UsICdkaXJCJywgJ2ZpbGVCJykpCisgICAgICAgIHAgPSBQKEJBU0UsICdkaXJCJywgJ2xpbmtEJywgJ2ZpbGVCJykKKyAgICAgICAgc2VsZi5fY2hlY2tfcmVzb2x2ZV9yZWxhdGl2ZShwLCBQKEJBU0UsICdkaXJCJywgJ2ZpbGVCJykpCisgICAgICAgICMgTm93IGNyZWF0ZSBhYnNvbHV0ZSBzeW1saW5rcworICAgICAgICBkID0gdGVtcGZpbGUubWtkdGVtcChzdWZmaXg9Jy1kaXJEJykKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHN1cHBvcnQucm10cmVlLCBkKQorICAgICAgICBvcy5zeW1saW5rKG9zLnBhdGguam9pbihkKSwgam9pbignZGlyQScsICdsaW5rWCcpKQorICAgICAgICBvcy5zeW1saW5rKGpvaW4oJ2RpckInKSwgb3MucGF0aC5qb2luKGQsICdsaW5rWScpKQorICAgICAgICBwID0gUChCQVNFLCAnZGlyQScsICdsaW5rWCcsICdsaW5rWScsICdmaWxlQicpCisgICAgICAgIHNlbGYuX2NoZWNrX3Jlc29sdmVfYWJzb2x1dGUocCwgUChCQVNFLCAnZGlyQicsICdmaWxlQicpKQorCisgICAgQHdpdGhfc3ltbGlua3MKKyAgICBkZWYgdGVzdF9yZXNvbHZlX2RvdChzZWxmKToKKyAgICAgICAgIyBTZWUgaHR0cHM6Ly9iaXRidWNrZXQub3JnL3BpdHJvdS9wYXRobGliL2lzc3VlLzkvcGF0aHJlc29sdmUtZmFpbHMtb24tY29tcGxleC1zeW1saW5rcworICAgICAgICBwID0gc2VsZi5jbHMoQkFTRSkKKyAgICAgICAgc2VsZi5kaXJsaW5rKCcuJywgam9pbignMCcpKQorICAgICAgICBzZWxmLmRpcmxpbmsob3MucGF0aC5qb2luKCcwJywgJzAnKSwgam9pbignMScpKQorICAgICAgICBzZWxmLmRpcmxpbmsob3MucGF0aC5qb2luKCcxJywgJzEnKSwgam9pbignMicpKQorICAgICAgICBxID0gcCAvICcyJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHEucmVzb2x2ZSgpLCBwKQorCisgICAgZGVmIHRlc3Rfd2l0aChzZWxmKToKKyAgICAgICAgcCA9IHNlbGYuY2xzKEJBU0UpCisgICAgICAgIGl0ID0gcC5pdGVyZGlyKCkKKyAgICAgICAgaXQyID0gcC5pdGVyZGlyKCkKKyAgICAgICAgbmV4dChpdDIpCisgICAgICAgIHdpdGggcDoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgIyBJL08gb3BlcmF0aW9uIG9uIGNsb3NlZCBwYXRoCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG5leHQsIGl0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBuZXh0LCBpdDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHAub3BlbikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcC5yZXNvbHZlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwLmFic29sdXRlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwLl9fZW50ZXJfXykKKworICAgIGRlZiB0ZXN0X2NobW9kKHNlbGYpOgorICAgICAgICBwID0gc2VsZi5jbHMoQkFTRSkgLyAnZmlsZUEnCisgICAgICAgIG1vZGUgPSBwLnN0YXQoKS5zdF9tb2RlCisgICAgICAgICMgQ2xlYXIgd3JpdGFibGUgYml0CisgICAgICAgIG5ld19tb2RlID0gbW9kZSAmIH4wbzIyMgorICAgICAgICBwLmNobW9kKG5ld19tb2RlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuc3RhdCgpLnN0X21vZGUsIG5ld19tb2RlKQorICAgICAgICAjIFNldCB3cml0YWJsZSBiaXQKKyAgICAgICAgbmV3X21vZGUgPSBtb2RlIHwgMG8yMjIKKyAgICAgICAgcC5jaG1vZChuZXdfbW9kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnN0YXQoKS5zdF9tb2RlLCBuZXdfbW9kZSkKKworICAgICMgWFhYIGFsc28gbmVlZCBhIHRlc3QgZm9yIGxjaG1vZAorCisgICAgZGVmIHRlc3Rfc3RhdChzZWxmKToKKyAgICAgICAgcCA9IHNlbGYuY2xzKEJBU0UpIC8gJ2ZpbGVBJworICAgICAgICBzdCA9IHAuc3RhdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5zdGF0KCksIHN0KQorICAgICAgICAjIENoYW5nZSBmaWxlIG1vZGUgYnkgZmxpcHBpbmcgd3JpdGUgYml0CisgICAgICAgIHAuY2htb2Qoc3Quc3RfbW9kZSBeIDBvMjIyKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocC5jaG1vZCwgc3Quc3RfbW9kZSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChwLnN0YXQoKSwgc3QpCisKKyAgICBAd2l0aF9zeW1saW5rcworICAgIGRlZiB0ZXN0X2xzdGF0KHNlbGYpOgorICAgICAgICBwID0gc2VsZi5jbHMoQkFTRSkvICdsaW5rQScKKyAgICAgICAgc3QgPSBwLnN0YXQoKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHN0LCBwLmxzdGF0KCkpCisKKyAgICBkZWYgdGVzdF9sc3RhdF9ub3N5bWxpbmsoc2VsZik6CisgICAgICAgIHAgPSBzZWxmLmNscyhCQVNFKSAvICdmaWxlQScKKyAgICAgICAgc3QgPSBwLnN0YXQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0LCBwLmxzdGF0KCkpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhwd2QsICJ0aGUgcHdkIG1vZHVsZSBpcyBuZWVkZWQgZm9yIHRoaXMgdGVzdCIpCisgICAgZGVmIHRlc3Rfb3duZXIoc2VsZik6CisgICAgICAgIHAgPSBzZWxmLmNscyhCQVNFKSAvICdmaWxlQScKKyAgICAgICAgdWlkID0gcC5zdGF0KCkuc3RfdWlkCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG5hbWUgPSBwd2QuZ2V0cHd1aWQodWlkKS5wd19uYW1lCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoCisgICAgICAgICAgICAgICAgInVzZXIgJWQgZG9lc24ndCBoYXZlIGFuIGVudHJ5IGluIHRoZSBzeXN0ZW0gZGF0YWJhc2UiICUgdWlkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5hbWUsIHAub3duZXIoKSkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGdycCwgInRoZSBncnAgbW9kdWxlIGlzIG5lZWRlZCBmb3IgdGhpcyB0ZXN0IikKKyAgICBkZWYgdGVzdF9ncm91cChzZWxmKToKKyAgICAgICAgcCA9IHNlbGYuY2xzKEJBU0UpIC8gJ2ZpbGVBJworICAgICAgICBnaWQgPSBwLnN0YXQoKS5zdF9naWQKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbmFtZSA9IGdycC5nZXRncmdpZChnaWQpLmdyX25hbWUKKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgKKyAgICAgICAgICAgICAgICAiZ3JvdXAgJWQgZG9lc24ndCBoYXZlIGFuIGVudHJ5IGluIHRoZSBzeXN0ZW0gZGF0YWJhc2UiICUgZ2lkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5hbWUsIHAuZ3JvdXAoKSkKKworICAgIGRlZiB0ZXN0X3VubGluayhzZWxmKToKKyAgICAgICAgcCA9IHNlbGYuY2xzKEJBU0UpIC8gJ2ZpbGVBJworICAgICAgICBwLnVubGluaygpCisgICAgICAgIHNlbGYuYXNzZXJ0RmlsZU5vdEZvdW5kKHAuc3RhdCkKKyAgICAgICAgc2VsZi5hc3NlcnRGaWxlTm90Rm91bmQocC51bmxpbmspCisKKyAgICBkZWYgdGVzdF9ybWRpcihzZWxmKToKKyAgICAgICAgcCA9IHNlbGYuY2xzKEJBU0UpIC8gJ2RpckEnCisgICAgICAgIGZvciBxIGluIHAuaXRlcmRpcigpOgorICAgICAgICAgICAgcS51bmxpbmsoKQorICAgICAgICBwLnJtZGlyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGaWxlTm90Rm91bmQocC5zdGF0KQorICAgICAgICBzZWxmLmFzc2VydEZpbGVOb3RGb3VuZChwLnVubGluaykKKworICAgIGRlZiB0ZXN0X3JlbmFtZShzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzKEJBU0UpCisgICAgICAgIHAgPSBQIC8gJ2ZpbGVBJworICAgICAgICBzaXplID0gcC5zdGF0KCkuc3Rfc2l6ZQorICAgICAgICAjIFJlbmFtaW5nIHRvIGFub3RoZXIgcGF0aAorICAgICAgICBxID0gUCAvICdkaXJBJyAvICdmaWxlQUEnCisgICAgICAgIHAucmVuYW1lKHEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocS5zdGF0KCkuc3Rfc2l6ZSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGaWxlTm90Rm91bmQocC5zdGF0KQorICAgICAgICAjIFJlbmFtaW5nIHRvIGEgc3RyIG9mIGEgcmVsYXRpdmUgcGF0aAorICAgICAgICByID0gcmVsX2pvaW4oJ2ZpbGVBQUEnKQorICAgICAgICBxLnJlbmFtZShyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnN0YXQocikuc3Rfc2l6ZSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGaWxlTm90Rm91bmQocS5zdGF0KQorCisgICAgZGVmIHRlc3RfcmVwbGFjZShzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzKEJBU0UpCisgICAgICAgIHAgPSBQIC8gJ2ZpbGVBJworICAgICAgICBzaXplID0gcC5zdGF0KCkuc3Rfc2l6ZQorICAgICAgICAjIFJlcGxhY2luZyBhIG5vbi1leGlzdGluZyBwYXRoCisgICAgICAgIHEgPSBQIC8gJ2RpckEnIC8gJ2ZpbGVBQScKKyAgICAgICAgcC5yZXBsYWNlKHEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocS5zdGF0KCkuc3Rfc2l6ZSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGaWxlTm90Rm91bmQocC5zdGF0KQorICAgICAgICAjIFJlcGxhY2luZyBhbm90aGVyIChleGlzdGluZykgcGF0aAorICAgICAgICByID0gcmVsX2pvaW4oJ2RpckInLCAnZmlsZUInKQorICAgICAgICBxLnJlcGxhY2UocikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5zdGF0KHIpLnN0X3NpemUsIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmlsZU5vdEZvdW5kKHEuc3RhdCkKKworICAgIGRlZiB0ZXN0X3RvdWNoX2NvbW1vbihzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzKEJBU0UpCisgICAgICAgIHAgPSBQIC8gJ25ld2ZpbGVBJworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHAuZXhpc3RzKCkpCisgICAgICAgIHAudG91Y2goKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocC5leGlzdHMoKSkKKyAgICAgICAgc3QgPSBwLnN0YXQoKQorICAgICAgICBvbGRfbXRpbWUgPSBzdC5zdF9tdGltZQorICAgICAgICBvbGRfbXRpbWVfbnMgPSBzdC5zdF9tdGltZV9ucworICAgICAgICAjIFJld2luZCB0aGUgbXRpbWUgc3VmZmljaWVudGx5IGZhciBpbiB0aGUgcGFzdCB0byB3b3JrIGFyb3VuZAorICAgICAgICAjIGZpbGVzeXN0ZW0tc3BlY2lmaWMgdGltZXN0YW1wIGdyYW51bGFyaXR5LgorICAgICAgICBvcy51dGltZShzdHIocCksIChvbGRfbXRpbWUgLSAxMCwgb2xkX210aW1lIC0gMTApKQorICAgICAgICAjIFRoZSBmaWxlIG10aW1lIHNob3VsZCBiZSByZWZyZXNoZWQgYnkgY2FsbGluZyB0b3VjaCgpIGFnYWluCisgICAgICAgIHAudG91Y2goKQorICAgICAgICBzdCA9IHAuc3RhdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKHN0LnN0X210aW1lX25zLCBvbGRfbXRpbWVfbnMpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKHN0LnN0X210aW1lLCBvbGRfbXRpbWUpCisgICAgICAgICMgTm93IHdpdGggZXhpc3Rfb2s9RmFsc2UKKyAgICAgICAgcCA9IFAgLyAnbmV3ZmlsZUInCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocC5leGlzdHMoKSkKKyAgICAgICAgcC50b3VjaChtb2RlPTBvNzAwLCBleGlzdF9vaz1GYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHAuZXhpc3RzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHAudG91Y2gsIGV4aXN0X29rPUZhbHNlKQorCisgICAgZGVmIHRlc3RfdG91Y2hfbm9jaGFuZ2Uoc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscyhCQVNFKQorICAgICAgICBwID0gUCAvICdmaWxlQScKKyAgICAgICAgcC50b3VjaCgpCisgICAgICAgIHdpdGggcC5vcGVuKCdyYicpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLnN0cmlwKCksIGIidGhpcyBpcyBmaWxlIEEiKQorCisgICAgZGVmIHRlc3RfbWtkaXIoc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscyhCQVNFKQorICAgICAgICBwID0gUCAvICduZXdkaXJBJworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHAuZXhpc3RzKCkpCisgICAgICAgIHAubWtkaXIoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocC5leGlzdHMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHAuaXNfZGlyKCkpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcikgYXMgY206CisgICAgICAgICAgICBwLm1rZGlyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24uZXJybm8sIGVycm5vLkVFWElTVCkKKworICAgIGRlZiB0ZXN0X21rZGlyX3BhcmVudHMoc2VsZik6CisgICAgICAgICMgQ3JlYXRpbmcgYSBjaGFpbiBvZiBkaXJlY3RvcmllcworICAgICAgICBwID0gc2VsZi5jbHMoQkFTRSwgJ25ld2RpckInLCAnbmV3ZGlyQycpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocC5leGlzdHMoKSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKSBhcyBjbToKKyAgICAgICAgICAgIHAubWtkaXIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5lcnJubywgZXJybm8uRU5PRU5UKQorICAgICAgICBwLm1rZGlyKHBhcmVudHM9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHAuZXhpc3RzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwLmlzX2RpcigpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgcC5ta2RpcihwYXJlbnRzPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLmVycm5vLCBlcnJuby5FRVhJU1QpCisgICAgICAgICMgdGVzdCBgbW9kZWAgYXJnCisgICAgICAgIG1vZGUgPSBzdGF0LlNfSU1PREUocC5zdGF0KCkuc3RfbW9kZSkgIyBkZWZhdWx0IG1vZGUKKyAgICAgICAgcCA9IHNlbGYuY2xzKEJBU0UsICduZXdkaXJEJywgJ25ld2RpckUnKQorICAgICAgICBwLm1rZGlyKDBvNTU1LCBwYXJlbnRzPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwLmV4aXN0cygpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocC5pc19kaXIoKSkKKyAgICAgICAgaWYgb3MubmFtZSAhPSAnbnQnOgorICAgICAgICAgICAgIyB0aGUgZGlyZWN0b3J5J3MgcGVybWlzc2lvbnMgZm9sbG93IHRoZSBtb2RlIGFyZ3VtZW50CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXQuU19JTU9ERShwLnN0YXQoKS5zdF9tb2RlKSwgMG83NTU1ICYgbW9kZSkKKyAgICAgICAgIyB0aGUgcGFyZW50J3MgcGVybWlzc2lvbnMgZm9sbG93IHRoZSBkZWZhdWx0IHByb2Nlc3Mgc2V0dGluZ3MKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0LlNfSU1PREUocC5wYXJlbnQuc3RhdCgpLnN0X21vZGUpLCBtb2RlKQorCisgICAgQHdpdGhfc3ltbGlua3MKKyAgICBkZWYgdGVzdF9zeW1saW5rX3RvKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMoQkFTRSkKKyAgICAgICAgdGFyZ2V0ID0gUCAvICdmaWxlQScKKyAgICAgICAgIyBTeW1saW5raW5nIGEgcGF0aCB0YXJnZXQKKyAgICAgICAgbGluayA9IFAgLyAnZGlyQScgLyAnbGlua0FBJworICAgICAgICBsaW5rLnN5bWxpbmtfdG8odGFyZ2V0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmsuc3RhdCgpLCB0YXJnZXQuc3RhdCgpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGxpbmsubHN0YXQoKSwgdGFyZ2V0LnN0YXQoKSkKKyAgICAgICAgIyBTeW1saW5raW5nIGEgc3RyIHRhcmdldAorICAgICAgICBsaW5rID0gUCAvICdkaXJBJyAvICdsaW5rQUFBJworICAgICAgICBsaW5rLnN5bWxpbmtfdG8oc3RyKHRhcmdldCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluay5zdGF0KCksIHRhcmdldC5zdGF0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwobGluay5sc3RhdCgpLCB0YXJnZXQuc3RhdCgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGxpbmsuaXNfZGlyKCkpCisgICAgICAgICMgU3ltbGlua2luZyB0byBhIGRpcmVjdG9yeQorICAgICAgICB0YXJnZXQgPSBQIC8gJ2RpckInCisgICAgICAgIGxpbmsgPSBQIC8gJ2RpckEnIC8gJ2xpbmtBQUFBJworICAgICAgICBsaW5rLnN5bWxpbmtfdG8odGFyZ2V0LCB0YXJnZXRfaXNfZGlyZWN0b3J5PVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluay5zdGF0KCksIHRhcmdldC5zdGF0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwobGluay5sc3RhdCgpLCB0YXJnZXQuc3RhdCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGluay5pc19kaXIoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxpc3QobGluay5pdGVyZGlyKCkpKQorCisgICAgZGVmIHRlc3RfaXNfZGlyKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMoQkFTRSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChQIC8gJ2RpckEnKS5pc19kaXIoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgoUCAvICdmaWxlQScpLmlzX2RpcigpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKChQIC8gJ25vbi1leGlzdGluZycpLmlzX2RpcigpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKChQIC8gJ2ZpbGVBJyAvICdiYWgnKS5pc19kaXIoKSkKKyAgICAgICAgaWYgbm90IHN5bWxpbmtfc2tpcF9yZWFzb246CisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKChQIC8gJ2xpbmtBJykuaXNfZGlyKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoKFAgLyAnbGlua0InKS5pc19kaXIoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoKFAvICdicm9rZW5MaW5rJykuaXNfZGlyKCkpCisKKyAgICBkZWYgdGVzdF9pc19maWxlKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMoQkFTRSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChQIC8gJ2ZpbGVBJykuaXNfZmlsZSgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKChQIC8gJ2RpckEnKS5pc19maWxlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoKFAgLyAnbm9uLWV4aXN0aW5nJykuaXNfZmlsZSgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKChQIC8gJ2ZpbGVBJyAvICdiYWgnKS5pc19maWxlKCkpCisgICAgICAgIGlmIG5vdCBzeW1saW5rX3NraXBfcmVhc29uOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChQIC8gJ2xpbmtBJykuaXNfZmlsZSgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgoUCAvICdsaW5rQicpLmlzX2ZpbGUoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoKFAvICdicm9rZW5MaW5rJykuaXNfZmlsZSgpKQorCisgICAgZGVmIHRlc3RfaXNfc3ltbGluayhzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzKEJBU0UpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoKFAgLyAnZmlsZUEnKS5pc19zeW1saW5rKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoKFAgLyAnZGlyQScpLmlzX3N5bWxpbmsoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgoUCAvICdub24tZXhpc3RpbmcnKS5pc19zeW1saW5rKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoKFAgLyAnZmlsZUEnIC8gJ2JhaCcpLmlzX3N5bWxpbmsoKSkKKyAgICAgICAgaWYgbm90IHN5bWxpbmtfc2tpcF9yZWFzb246CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoKFAgLyAnbGlua0EnKS5pc19zeW1saW5rKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoKFAgLyAnbGlua0InKS5pc19zeW1saW5rKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoKFAvICdicm9rZW5MaW5rJykuaXNfc3ltbGluaygpKQorCisgICAgZGVmIHRlc3RfaXNfZmlmb19mYWxzZShzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzKEJBU0UpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoKFAgLyAnZmlsZUEnKS5pc19maWZvKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoKFAgLyAnZGlyQScpLmlzX2ZpZm8oKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgoUCAvICdub24tZXhpc3RpbmcnKS5pc19maWZvKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoKFAgLyAnZmlsZUEnIC8gJ2JhaCcpLmlzX2ZpZm8oKSkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICJta2ZpZm8iKSwgIm9zLm1rZmlmbygpIHJlcXVpcmVkIikKKyAgICBkZWYgdGVzdF9pc19maWZvX3RydWUoc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscyhCQVNFLCAnbXlmaWZvJykKKyAgICAgICAgb3MubWtmaWZvKHN0cihQKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFAuaXNfZmlmbygpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAuaXNfc29ja2V0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUC5pc19maWxlKCkpCisKKyAgICBkZWYgdGVzdF9pc19zb2NrZXRfZmFsc2Uoc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscyhCQVNFKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKChQIC8gJ2ZpbGVBJykuaXNfc29ja2V0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoKFAgLyAnZGlyQScpLmlzX3NvY2tldCgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKChQIC8gJ25vbi1leGlzdGluZycpLmlzX3NvY2tldCgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKChQIC8gJ2ZpbGVBJyAvICdiYWgnKS5pc19zb2NrZXQoKSkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc29ja2V0LCAiQUZfVU5JWCIpLCAiVW5peCBzb2NrZXRzIHJlcXVpcmVkIikKKyAgICBkZWYgdGVzdF9pc19zb2NrZXRfdHJ1ZShzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzKEJBU0UsICdteXNvY2snKQorICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfVU5JWCwgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoc29jay5jbG9zZSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc29jay5iaW5kKHN0cihQKSkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGlmICJBRl9VTklYIHBhdGggdG9vIGxvbmciIGluIHN0cihlKToKKyAgICAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJjYW5ub3QgYmluZCBVbml4IHNvY2tldDogIiArIHN0cihlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFAuaXNfc29ja2V0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUC5pc19maWZvKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUC5pc19maWxlKCkpCisKKyAgICBkZWYgdGVzdF9pc19ibG9ja19kZXZpY2VfZmFsc2Uoc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscyhCQVNFKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKChQIC8gJ2ZpbGVBJykuaXNfYmxvY2tfZGV2aWNlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoKFAgLyAnZGlyQScpLmlzX2Jsb2NrX2RldmljZSgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKChQIC8gJ25vbi1leGlzdGluZycpLmlzX2Jsb2NrX2RldmljZSgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKChQIC8gJ2ZpbGVBJyAvICdiYWgnKS5pc19ibG9ja19kZXZpY2UoKSkKKworICAgIGRlZiB0ZXN0X2lzX2NoYXJfZGV2aWNlX2ZhbHNlKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMoQkFTRSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgoUCAvICdmaWxlQScpLmlzX2NoYXJfZGV2aWNlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoKFAgLyAnZGlyQScpLmlzX2NoYXJfZGV2aWNlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoKFAgLyAnbm9uLWV4aXN0aW5nJykuaXNfY2hhcl9kZXZpY2UoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgoUCAvICdmaWxlQScgLyAnYmFoJykuaXNfY2hhcl9kZXZpY2UoKSkKKworICAgIGRlZiB0ZXN0X2lzX2NoYXJfZGV2aWNlX3RydWUoc2VsZik6CisgICAgICAgICMgVW5kZXIgVW5peCwgL2Rldi9udWxsIHNob3VsZCBnZW5lcmFsbHkgYmUgYSBjaGFyIGRldmljZQorICAgICAgICBQID0gc2VsZi5jbHMoJy9kZXYvbnVsbCcpCisgICAgICAgIGlmIG5vdCBQLmV4aXN0cygpOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiL2Rldi9udWxsIHJlcXVpcmVkIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFAuaXNfY2hhcl9kZXZpY2UoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQLmlzX2Jsb2NrX2RldmljZSgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAuaXNfZmlsZSgpKQorCisgICAgZGVmIHRlc3RfcGlja2xpbmdfY29tbW9uKHNlbGYpOgorICAgICAgICBwID0gc2VsZi5jbHMoQkFTRSwgJ2ZpbGVBJykKKyAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKDAsIHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICBkdW1wZWQgPSBwaWNrbGUuZHVtcHMocCwgcHJvdG8pCisgICAgICAgICAgICBwcCA9IHBpY2tsZS5sb2FkcyhkdW1wZWQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwLnN0YXQoKSwgcC5zdGF0KCkpCisKKyAgICBkZWYgdGVzdF9wYXJ0c19pbnRlcm5pbmcoc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBwID0gUCgnL3Vzci9iaW4vZm9vJykKKyAgICAgICAgcSA9IFAoJy91c3IvbG9jYWwvYmluJykKKyAgICAgICAgIyAndXNyJworICAgICAgICBzZWxmLmFzc2VydElzKHAucGFydHNbMV0sIHEucGFydHNbMV0pCisgICAgICAgICMgJ2JpbicKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhwLnBhcnRzWzJdLCBxLnBhcnRzWzNdKQorCisgICAgZGVmIF9jaGVja19jb21wbGV4X3N5bWxpbmtzKHNlbGYsIGxpbmswX3RhcmdldCk6CisgICAgICAgICMgVGVzdCBzb2x2aW5nIGEgbm9uLWxvb3BpbmcgY2hhaW4gb2Ygc3ltbGlua3MgKGlzc3VlICMxOTg4NykKKyAgICAgICAgUCA9IHNlbGYuY2xzKEJBU0UpCisgICAgICAgIHNlbGYuZGlybGluayhvcy5wYXRoLmpvaW4oJ2xpbmswJywgJ2xpbmswJyksIGpvaW4oJ2xpbmsxJykpCisgICAgICAgIHNlbGYuZGlybGluayhvcy5wYXRoLmpvaW4oJ2xpbmsxJywgJ2xpbmsxJyksIGpvaW4oJ2xpbmsyJykpCisgICAgICAgIHNlbGYuZGlybGluayhvcy5wYXRoLmpvaW4oJ2xpbmsyJywgJ2xpbmsyJyksIGpvaW4oJ2xpbmszJykpCisgICAgICAgIHNlbGYuZGlybGluayhsaW5rMF90YXJnZXQsIGpvaW4oJ2xpbmswJykpCisKKyAgICAgICAgIyBSZXNvbHZlIGFic29sdXRlIHBhdGhzCisgICAgICAgIHAgPSAoUCAvICdsaW5rMCcpLnJlc29sdmUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAsIFApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHApLCBCQVNFKQorICAgICAgICBwID0gKFAgLyAnbGluazEnKS5yZXNvbHZlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLCBQKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihwKSwgQkFTRSkKKyAgICAgICAgcCA9IChQIC8gJ2xpbmsyJykucmVzb2x2ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCwgUCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIocCksIEJBU0UpCisgICAgICAgIHAgPSAoUCAvICdsaW5rMycpLnJlc29sdmUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAsIFApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHApLCBCQVNFKQorCisgICAgICAgICMgUmVzb2x2ZSByZWxhdGl2ZSBwYXRocworICAgICAgICBvbGRfcGF0aCA9IG9zLmdldGN3ZCgpCisgICAgICAgIG9zLmNoZGlyKEJBU0UpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHAgPSBzZWxmLmNscygnbGluazAnKS5yZXNvbHZlKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCwgUCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHApLCBCQVNFKQorICAgICAgICAgICAgcCA9IHNlbGYuY2xzKCdsaW5rMScpLnJlc29sdmUoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLCBQKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIocCksIEJBU0UpCisgICAgICAgICAgICBwID0gc2VsZi5jbHMoJ2xpbmsyJykucmVzb2x2ZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAsIFApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihwKSwgQkFTRSkKKyAgICAgICAgICAgIHAgPSBzZWxmLmNscygnbGluazMnKS5yZXNvbHZlKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCwgUCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHApLCBCQVNFKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MuY2hkaXIob2xkX3BhdGgpCisKKyAgICBAd2l0aF9zeW1saW5rcworICAgIGRlZiB0ZXN0X2NvbXBsZXhfc3ltbGlua3NfYWJzb2x1dGUoc2VsZik6CisgICAgICAgIHNlbGYuX2NoZWNrX2NvbXBsZXhfc3ltbGlua3MoQkFTRSkKKworICAgIEB3aXRoX3N5bWxpbmtzCisgICAgZGVmIHRlc3RfY29tcGxleF9zeW1saW5rc19yZWxhdGl2ZShzZWxmKToKKyAgICAgICAgc2VsZi5fY2hlY2tfY29tcGxleF9zeW1saW5rcygnLicpCisKKyAgICBAd2l0aF9zeW1saW5rcworICAgIGRlZiB0ZXN0X2NvbXBsZXhfc3ltbGlua3NfcmVsYXRpdmVfZG90X2RvdChzZWxmKToKKyAgICAgICAgc2VsZi5fY2hlY2tfY29tcGxleF9zeW1saW5rcyhvcy5wYXRoLmpvaW4oJ2RpckEnLCAnLi4nKSkKKworCitjbGFzcyBQYXRoVGVzdChfQmFzZVBhdGhUZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgY2xzID0gcGF0aGxpYi5QYXRoCisKKyAgICBkZWYgdGVzdF9jb25jcmV0ZV9jbGFzcyhzZWxmKToKKyAgICAgICAgcCA9IHNlbGYuY2xzKCdhJykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKHApLAorICAgICAgICAgICAgcGF0aGxpYi5XaW5kb3dzUGF0aCBpZiBvcy5uYW1lID09ICdudCcgZWxzZSBwYXRobGliLlBvc2l4UGF0aCkKKworICAgIGRlZiB0ZXN0X3Vuc3VwcG9ydGVkX2ZsYXZvdXIoc2VsZik6CisgICAgICAgIGlmIG9zLm5hbWUgPT0gJ250JzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIHBhdGhsaWIuUG9zaXhQYXRoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgcGF0aGxpYi5XaW5kb3dzUGF0aCkKKworCitAb25seV9wb3NpeAorY2xhc3MgUG9zaXhQYXRoVGVzdChfQmFzZVBhdGhUZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgY2xzID0gcGF0aGxpYi5Qb3NpeFBhdGgKKworICAgIGRlZiBfY2hlY2tfc3ltbGlua19sb29wKHNlbGYsICphcmdzKToKKyAgICAgICAgcGF0aCA9IHNlbGYuY2xzKCphcmdzKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvcik6CisgICAgICAgICAgICBwcmludChwYXRoLnJlc29sdmUoKSkKKworICAgIGRlZiB0ZXN0X29wZW5fbW9kZShzZWxmKToKKyAgICAgICAgb2xkX21hc2sgPSBvcy51bWFzaygwKQorICAgICAgICBzZWxmLmFkZENsZWFudXAob3MudW1hc2ssIG9sZF9tYXNrKQorICAgICAgICBwID0gc2VsZi5jbHMoQkFTRSkKKyAgICAgICAgd2l0aCAocCAvICduZXdfZmlsZScpLm9wZW4oJ3diJyk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHN0ID0gb3Muc3RhdChqb2luKCduZXdfZmlsZScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXQuU19JTU9ERShzdC5zdF9tb2RlKSwgMG82NjYpCisgICAgICAgIG9zLnVtYXNrKDBvMDIyKQorICAgICAgICB3aXRoIChwIC8gJ290aGVyX25ld19maWxlJykub3Blbignd2InKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc3QgPSBvcy5zdGF0KGpvaW4oJ290aGVyX25ld19maWxlJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdC5TX0lNT0RFKHN0LnN0X21vZGUpLCAwbzY0NCkKKworICAgIGRlZiB0ZXN0X3RvdWNoX21vZGUoc2VsZik6CisgICAgICAgIG9sZF9tYXNrID0gb3MudW1hc2soMCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9zLnVtYXNrLCBvbGRfbWFzaykKKyAgICAgICAgcCA9IHNlbGYuY2xzKEJBU0UpCisgICAgICAgIChwIC8gJ25ld19maWxlJykudG91Y2goKQorICAgICAgICBzdCA9IG9zLnN0YXQoam9pbignbmV3X2ZpbGUnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0LlNfSU1PREUoc3Quc3RfbW9kZSksIDBvNjY2KQorICAgICAgICBvcy51bWFzaygwbzAyMikKKyAgICAgICAgKHAgLyAnb3RoZXJfbmV3X2ZpbGUnKS50b3VjaCgpCisgICAgICAgIHN0ID0gb3Muc3RhdChqb2luKCdvdGhlcl9uZXdfZmlsZScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXQuU19JTU9ERShzdC5zdF9tb2RlKSwgMG82NDQpCisgICAgICAgIChwIC8gJ21hc2tlZF9uZXdfZmlsZScpLnRvdWNoKG1vZGU9MG83NTApCisgICAgICAgIHN0ID0gb3Muc3RhdChqb2luKCdtYXNrZWRfbmV3X2ZpbGUnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0LlNfSU1PREUoc3Quc3RfbW9kZSksIDBvNzUwKQorCisgICAgQHdpdGhfc3ltbGlua3MKKyAgICBkZWYgdGVzdF9yZXNvbHZlX2xvb3Aoc2VsZik6CisgICAgICAgICMgTG9vcCBkZXRlY3Rpb24gZm9yIGJyb2tlbiBzeW1saW5rcyB1bmRlciBQT1NJWAorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgIyBMb29wcyB3aXRoIHJlbGF0aXZlIHN5bWxpbmtzCisgICAgICAgIG9zLnN5bWxpbmsoJ2xpbmtYL2luc2lkZScsIGpvaW4oJ2xpbmtYJykpCisgICAgICAgIHNlbGYuX2NoZWNrX3N5bWxpbmtfbG9vcChCQVNFLCAnbGlua1gnKQorICAgICAgICBvcy5zeW1saW5rKCdsaW5rWScsIGpvaW4oJ2xpbmtZJykpCisgICAgICAgIHNlbGYuX2NoZWNrX3N5bWxpbmtfbG9vcChCQVNFLCAnbGlua1knKQorICAgICAgICBvcy5zeW1saW5rKCdsaW5rWi8uLi9saW5rWicsIGpvaW4oJ2xpbmtaJykpCisgICAgICAgIHNlbGYuX2NoZWNrX3N5bWxpbmtfbG9vcChCQVNFLCAnbGlua1onKQorICAgICAgICAjIExvb3BzIHdpdGggYWJzb2x1dGUgc3ltbGlua3MKKyAgICAgICAgb3Muc3ltbGluayhqb2luKCdsaW5rVS9pbnNpZGUnKSwgam9pbignbGlua1UnKSkKKyAgICAgICAgc2VsZi5fY2hlY2tfc3ltbGlua19sb29wKEJBU0UsICdsaW5rVScpCisgICAgICAgIG9zLnN5bWxpbmsoam9pbignbGlua1YnKSwgam9pbignbGlua1YnKSkKKyAgICAgICAgc2VsZi5fY2hlY2tfc3ltbGlua19sb29wKEJBU0UsICdsaW5rVicpCisgICAgICAgIG9zLnN5bWxpbmsoam9pbignbGlua1cvLi4vbGlua1cnKSwgam9pbignbGlua1cnKSkKKyAgICAgICAgc2VsZi5fY2hlY2tfc3ltbGlua19sb29wKEJBU0UsICdsaW5rVycpCisKKyAgICBkZWYgdGVzdF9nbG9iKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgcCA9IFAoQkFTRSkKKyAgICAgICAgZ2l2ZW4gPSBzZXQocC5nbG9iKCJGSUxFYSIpKQorICAgICAgICBleHBlY3QgPSBzZXQoKSBpZiBub3Qgc3VwcG9ydC5mc19pc19jYXNlX2luc2Vuc2l0aXZlKEJBU0UpIGVsc2UgZ2l2ZW4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnaXZlbiwgZXhwZWN0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChwLmdsb2IoIkZJTEVhKiIpKSwgc2V0KCkpCisKKyAgICBkZWYgdGVzdF9yZ2xvYihzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHAgPSBQKEJBU0UsICJkaXJDIikKKyAgICAgICAgZ2l2ZW4gPSBzZXQocC5yZ2xvYigiRklMRWQiKSkKKyAgICAgICAgZXhwZWN0ID0gc2V0KCkgaWYgbm90IHN1cHBvcnQuZnNfaXNfY2FzZV9pbnNlbnNpdGl2ZShCQVNFKSBlbHNlIGdpdmVuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2l2ZW4sIGV4cGVjdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQocC5yZ2xvYigiRklMRWQqIikpLCBzZXQoKSkKKworCitAb25seV9udAorY2xhc3MgV2luZG93c1BhdGhUZXN0KF9CYXNlUGF0aFRlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBjbHMgPSBwYXRobGliLldpbmRvd3NQYXRoCisKKyAgICBkZWYgdGVzdF9nbG9iKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgcCA9IFAoQkFTRSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQocC5nbG9iKCJGSUxFYSIpKSwgeyBQKEJBU0UsICJmaWxlQSIpIH0pCisKKyAgICBkZWYgdGVzdF9yZ2xvYihzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHAgPSBQKEJBU0UsICJkaXJDIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQocC5yZ2xvYigiRklMRWQiKSksIHsgUChCQVNFLCAiZGlyQy9kaXJEL2ZpbGVEIikgfSkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wZGIucHkgYi9MaWIvdGVzdC90ZXN0X3BkYi5weQppbmRleCAwMzA4NGU0Li4zNTA0NGFkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3BkYi5weQorKysgYi9MaWIvdGVzdC90ZXN0X3BkYi5weQpAQCAtMSw5ICsxLDkgQEAKICMgQSB0ZXN0IHN1aXRlIGZvciBwZGI7IG5vdCB2ZXJ5IGNvbXByZWhlbnNpdmUgYXQgdGhlIG1vbWVudC4KIAogaW1wb3J0IGRvY3Rlc3QKLWltcG9ydCBpbXAKIGltcG9ydCBwZGIKIGltcG9ydCBzeXMKK2ltcG9ydCB0eXBlcwogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgc3VicHJvY2VzcwogaW1wb3J0IHRleHR3cmFwCkBAIC0yMDUsNyArMjA1LDggQEAKICAgICAuLi4gICAgICdlbmFibGUgMScsCiAgICAgLi4uICAgICAnY2xlYXIgMScsCiAgICAgLi4uICAgICAnY29tbWFuZHMgMicsCi0gICAgLi4uICAgICAncHJpbnQgNDInLAorICAgIC4uLiAgICAgJ3AgIjQyIicsCisgICAgLi4uICAgICAncHJpbnQoIjQyIiwgNyo2KScsICAgICAjIElzc3VlIDE4NzY0IChub3QgYWJvdXQgYnJlYWtwb2ludHMpCiAgICAgLi4uICAgICAnZW5kJywKICAgICAuLi4gICAgICdjb250aW51ZScsICAjIHdpbGwgc3RvcCBhdCBicmVha3BvaW50IDIgKGxpbmUgNCkKICAgICAuLi4gICAgICdjbGVhcicsICAgICAjIGNsZWFyIGFsbCEKQEAgLTI1MiwxMSArMjUzLDEzIEBACiAgICAgKFBkYikgY2xlYXIgMQogICAgIERlbGV0ZWQgYnJlYWtwb2ludCAxIGF0IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfYnJlYWtwb2ludF9jb21tYW5kc1swXT46MwogICAgIChQZGIpIGNvbW1hbmRzIDIKLSAgICAoY29tKSBwcmludCA0MgorICAgIChjb20pIHAgIjQyIgorICAgIChjb20pIHByaW50KCI0MiIsIDcqNikKICAgICAoY29tKSBlbmQKICAgICAoUGRiKSBjb250aW51ZQogICAgIDEKLSAgICA0MgorICAgICc0MicKKyAgICA0MiA0MgogICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9icmVha3BvaW50X2NvbW1hbmRzWzBdPig0KXRlc3RfZnVuY3Rpb24oKQogICAgIC0+IHByaW50KDIpCiAgICAgKFBkYikgY2xlYXIKQEAgLTQ2NCw3ICs0NjcsNyBAQAogCiAKICMgTW9kdWxlIGZvciB0ZXN0aW5nIHNraXBwaW5nIG9mIG1vZHVsZSB0aGF0IG1ha2VzIGEgY2FsbGJhY2sKLW1vZCA9IGltcC5uZXdfbW9kdWxlKCdtb2R1bGVfdG9fc2tpcCcpCittb2QgPSB0eXBlcy5Nb2R1bGVUeXBlKCdtb2R1bGVfdG9fc2tpcCcpCiBleGVjKCdkZWYgZm9vX3BvbnkoY2FsbGJhY2spOiB4ID0gMTsgY2FsbGJhY2soKTsgcmV0dXJuIE5vbmUnLCBtb2QuX19kaWN0X18pCiAKIApAQCAtNTk3LDYgKzYwMCwzMTcgQEAKICAgICAoUGRiKSBjb250aW51ZQogICAgICIiIgogCitkZWYgdGVzdF9uZXh0X3VudGlsX3JldHVybl9hdF9yZXR1cm5fZXZlbnQoKToKKyAgICAiIiJUZXN0IHRoYXQgcGRiIHN0b3BzIGFmdGVyIGEgbmV4dC91bnRpbC9yZXR1cm4gaXNzdWVkIGF0IGEgcmV0dXJuIGRlYnVnIGV2ZW50LgorCisgICAgPj4+IGRlZiB0ZXN0X2Z1bmN0aW9uXzIoKToKKyAgICAuLi4gICAgIHggPSAxCisgICAgLi4uICAgICB4ID0gMgorCisgICAgPj4+IGRlZiB0ZXN0X2Z1bmN0aW9uKCk6CisgICAgLi4uICAgICBpbXBvcnQgcGRiOyBwZGIuUGRiKG5vc2lnaW50PVRydWUpLnNldF90cmFjZSgpCisgICAgLi4uICAgICB0ZXN0X2Z1bmN0aW9uXzIoKQorICAgIC4uLiAgICAgdGVzdF9mdW5jdGlvbl8yKCkKKyAgICAuLi4gICAgIHRlc3RfZnVuY3Rpb25fMigpCisgICAgLi4uICAgICBlbmQgPSAxCisKKyAgICA+Pj4gZnJvbSBiZGIgaW1wb3J0IEJyZWFrcG9pbnQKKyAgICA+Pj4gQnJlYWtwb2ludC5uZXh0ID0gMQorICAgID4+PiB3aXRoIFBkYlRlc3RJbnB1dChbJ2JyZWFrIHRlc3RfZnVuY3Rpb25fMicsCisgICAgLi4uICAgICAgICAgICAgICAgICAgICAnY29udGludWUnLAorICAgIC4uLiAgICAgICAgICAgICAgICAgICAgJ3JldHVybicsCisgICAgLi4uICAgICAgICAgICAgICAgICAgICAnbmV4dCcsCisgICAgLi4uICAgICAgICAgICAgICAgICAgICAnY29udGludWUnLAorICAgIC4uLiAgICAgICAgICAgICAgICAgICAgJ3JldHVybicsCisgICAgLi4uICAgICAgICAgICAgICAgICAgICAndW50aWwnLAorICAgIC4uLiAgICAgICAgICAgICAgICAgICAgJ2NvbnRpbnVlJywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICdyZXR1cm4nLAorICAgIC4uLiAgICAgICAgICAgICAgICAgICAgJ3JldHVybicsCisgICAgLi4uICAgICAgICAgICAgICAgICAgICAnY29udGludWUnXSk6CisgICAgLi4uICAgICB0ZXN0X2Z1bmN0aW9uKCkKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9uZXh0X3VudGlsX3JldHVybl9hdF9yZXR1cm5fZXZlbnRbMV0+KDMpdGVzdF9mdW5jdGlvbigpCisgICAgLT4gdGVzdF9mdW5jdGlvbl8yKCkKKyAgICAoUGRiKSBicmVhayB0ZXN0X2Z1bmN0aW9uXzIKKyAgICBCcmVha3BvaW50IDEgYXQgPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X25leHRfdW50aWxfcmV0dXJuX2F0X3JldHVybl9ldmVudFswXT46MQorICAgIChQZGIpIGNvbnRpbnVlCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfbmV4dF91bnRpbF9yZXR1cm5fYXRfcmV0dXJuX2V2ZW50WzBdPigyKXRlc3RfZnVuY3Rpb25fMigpCisgICAgLT4geCA9IDEKKyAgICAoUGRiKSByZXR1cm4KKyAgICAtLVJldHVybi0tCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfbmV4dF91bnRpbF9yZXR1cm5fYXRfcmV0dXJuX2V2ZW50WzBdPigzKXRlc3RfZnVuY3Rpb25fMigpLT5Ob25lCisgICAgLT4geCA9IDIKKyAgICAoUGRiKSBuZXh0CisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfbmV4dF91bnRpbF9yZXR1cm5fYXRfcmV0dXJuX2V2ZW50WzFdPig0KXRlc3RfZnVuY3Rpb24oKQorICAgIC0+IHRlc3RfZnVuY3Rpb25fMigpCisgICAgKFBkYikgY29udGludWUKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9uZXh0X3VudGlsX3JldHVybl9hdF9yZXR1cm5fZXZlbnRbMF0+KDIpdGVzdF9mdW5jdGlvbl8yKCkKKyAgICAtPiB4ID0gMQorICAgIChQZGIpIHJldHVybgorICAgIC0tUmV0dXJuLS0KKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9uZXh0X3VudGlsX3JldHVybl9hdF9yZXR1cm5fZXZlbnRbMF0+KDMpdGVzdF9mdW5jdGlvbl8yKCktPk5vbmUKKyAgICAtPiB4ID0gMgorICAgIChQZGIpIHVudGlsCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfbmV4dF91bnRpbF9yZXR1cm5fYXRfcmV0dXJuX2V2ZW50WzFdPig1KXRlc3RfZnVuY3Rpb24oKQorICAgIC0+IHRlc3RfZnVuY3Rpb25fMigpCisgICAgKFBkYikgY29udGludWUKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9uZXh0X3VudGlsX3JldHVybl9hdF9yZXR1cm5fZXZlbnRbMF0+KDIpdGVzdF9mdW5jdGlvbl8yKCkKKyAgICAtPiB4ID0gMQorICAgIChQZGIpIHJldHVybgorICAgIC0tUmV0dXJuLS0KKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9uZXh0X3VudGlsX3JldHVybl9hdF9yZXR1cm5fZXZlbnRbMF0+KDMpdGVzdF9mdW5jdGlvbl8yKCktPk5vbmUKKyAgICAtPiB4ID0gMgorICAgIChQZGIpIHJldHVybgorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X25leHRfdW50aWxfcmV0dXJuX2F0X3JldHVybl9ldmVudFsxXT4oNil0ZXN0X2Z1bmN0aW9uKCkKKyAgICAtPiBlbmQgPSAxCisgICAgKFBkYikgY29udGludWUKKyAgICAiIiIKKworZGVmIHRlc3RfcGRiX25leHRfY29tbWFuZF9mb3JfZ2VuZXJhdG9yKCk6CisgICAgIiIiVGVzdGluZyBza2lwIHVud2luZG5nIHN0YWNrIG9uIHlpZWxkIGZvciBnZW5lcmF0b3JzIGZvciAibmV4dCIgY29tbWFuZAorCisgICAgPj4+IGRlZiB0ZXN0X2dlbigpOgorICAgIC4uLiAgICAgeWllbGQgMAorICAgIC4uLiAgICAgcmV0dXJuIDEKKyAgICAuLi4gICAgIHlpZWxkIDIKKworICAgID4+PiBkZWYgdGVzdF9mdW5jdGlvbigpOgorICAgIC4uLiAgICAgaW1wb3J0IHBkYjsgcGRiLlBkYihub3NpZ2ludD1UcnVlKS5zZXRfdHJhY2UoKQorICAgIC4uLiAgICAgaXQgPSB0ZXN0X2dlbigpCisgICAgLi4uICAgICB0cnk6CisgICAgLi4uICAgICAgICAgaWYgbmV4dChpdCkgIT0gMDoKKyAgICAuLi4gICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IKKyAgICAuLi4gICAgICAgICBuZXh0KGl0KQorICAgIC4uLiAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb24gYXMgZXg6CisgICAgLi4uICAgICAgICAgaWYgZXgudmFsdWUgIT0gMToKKyAgICAuLi4gICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IKKyAgICAuLi4gICAgIHByaW50KCJmaW5pc2hlZCIpCisKKyAgICA+Pj4gd2l0aCBQZGJUZXN0SW5wdXQoWydzdGVwJywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICdzdGVwJywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICdzdGVwJywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICduZXh0JywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICduZXh0JywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICdzdGVwJywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICdzdGVwJywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICdjb250aW51ZSddKToKKyAgICAuLi4gICAgIHRlc3RfZnVuY3Rpb24oKQorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9uZXh0X2NvbW1hbmRfZm9yX2dlbmVyYXRvclsxXT4oMyl0ZXN0X2Z1bmN0aW9uKCkKKyAgICAtPiBpdCA9IHRlc3RfZ2VuKCkKKyAgICAoUGRiKSBzdGVwCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX25leHRfY29tbWFuZF9mb3JfZ2VuZXJhdG9yWzFdPig0KXRlc3RfZnVuY3Rpb24oKQorICAgIC0+IHRyeToKKyAgICAoUGRiKSBzdGVwCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX25leHRfY29tbWFuZF9mb3JfZ2VuZXJhdG9yWzFdPig1KXRlc3RfZnVuY3Rpb24oKQorICAgIC0+IGlmIG5leHQoaXQpICE9IDA6CisgICAgKFBkYikgc3RlcAorICAgIC0tQ2FsbC0tCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX25leHRfY29tbWFuZF9mb3JfZ2VuZXJhdG9yWzBdPigxKXRlc3RfZ2VuKCkKKyAgICAtPiBkZWYgdGVzdF9nZW4oKToKKyAgICAoUGRiKSBuZXh0CisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX25leHRfY29tbWFuZF9mb3JfZ2VuZXJhdG9yWzBdPigyKXRlc3RfZ2VuKCkKKyAgICAtPiB5aWVsZCAwCisgICAgKFBkYikgbmV4dAorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9uZXh0X2NvbW1hbmRfZm9yX2dlbmVyYXRvclswXT4oMyl0ZXN0X2dlbigpCisgICAgLT4gcmV0dXJuIDEKKyAgICAoUGRiKSBzdGVwCisgICAgLS1SZXR1cm4tLQorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9uZXh0X2NvbW1hbmRfZm9yX2dlbmVyYXRvclswXT4oMyl0ZXN0X2dlbigpLT4xCisgICAgLT4gcmV0dXJuIDEKKyAgICAoUGRiKSBzdGVwCisgICAgU3RvcEl0ZXJhdGlvbjogMQorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9uZXh0X2NvbW1hbmRfZm9yX2dlbmVyYXRvclsxXT4oNyl0ZXN0X2Z1bmN0aW9uKCkKKyAgICAtPiBuZXh0KGl0KQorICAgIChQZGIpIGNvbnRpbnVlCisgICAgZmluaXNoZWQKKyAgICAiIiIKKworZGVmIHRlc3RfcGRiX3JldHVybl9jb21tYW5kX2Zvcl9nZW5lcmF0b3IoKToKKyAgICAiIiJUZXN0aW5nIG5vIHVud2luZG5nIHN0YWNrIG9uIHlpZWxkIGZvciBnZW5lcmF0b3JzCisgICAgICAgZm9yICJyZXR1cm4iIGNvbW1hbmQKKworICAgID4+PiBkZWYgdGVzdF9nZW4oKToKKyAgICAuLi4gICAgIHlpZWxkIDAKKyAgICAuLi4gICAgIHJldHVybiAxCisgICAgLi4uICAgICB5aWVsZCAyCisKKyAgICA+Pj4gZGVmIHRlc3RfZnVuY3Rpb24oKToKKyAgICAuLi4gICAgIGltcG9ydCBwZGI7IHBkYi5QZGIobm9zaWdpbnQ9VHJ1ZSkuc2V0X3RyYWNlKCkKKyAgICAuLi4gICAgIGl0ID0gdGVzdF9nZW4oKQorICAgIC4uLiAgICAgdHJ5OgorICAgIC4uLiAgICAgICAgIGlmIG5leHQoaXQpICE9IDA6CisgICAgLi4uICAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yCisgICAgLi4uICAgICAgICAgbmV4dChpdCkKKyAgICAuLi4gICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uIGFzIGV4OgorICAgIC4uLiAgICAgICAgIGlmIGV4LnZhbHVlICE9IDE6CisgICAgLi4uICAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yCisgICAgLi4uICAgICBwcmludCgiZmluaXNoZWQiKQorCisgICAgPj4+IHdpdGggUGRiVGVzdElucHV0KFsnc3RlcCcsCisgICAgLi4uICAgICAgICAgICAgICAgICAgICAnc3RlcCcsCisgICAgLi4uICAgICAgICAgICAgICAgICAgICAnc3RlcCcsCisgICAgLi4uICAgICAgICAgICAgICAgICAgICAncmV0dXJuJywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICdzdGVwJywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICdzdGVwJywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICdjb250aW51ZSddKToKKyAgICAuLi4gICAgIHRlc3RfZnVuY3Rpb24oKQorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9yZXR1cm5fY29tbWFuZF9mb3JfZ2VuZXJhdG9yWzFdPigzKXRlc3RfZnVuY3Rpb24oKQorICAgIC0+IGl0ID0gdGVzdF9nZW4oKQorICAgIChQZGIpIHN0ZXAKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfcmV0dXJuX2NvbW1hbmRfZm9yX2dlbmVyYXRvclsxXT4oNCl0ZXN0X2Z1bmN0aW9uKCkKKyAgICAtPiB0cnk6CisgICAgKFBkYikgc3RlcAorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9yZXR1cm5fY29tbWFuZF9mb3JfZ2VuZXJhdG9yWzFdPig1KXRlc3RfZnVuY3Rpb24oKQorICAgIC0+IGlmIG5leHQoaXQpICE9IDA6CisgICAgKFBkYikgc3RlcAorICAgIC0tQ2FsbC0tCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX3JldHVybl9jb21tYW5kX2Zvcl9nZW5lcmF0b3JbMF0+KDEpdGVzdF9nZW4oKQorICAgIC0+IGRlZiB0ZXN0X2dlbigpOgorICAgIChQZGIpIHJldHVybgorICAgIFN0b3BJdGVyYXRpb246IDEKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfcmV0dXJuX2NvbW1hbmRfZm9yX2dlbmVyYXRvclsxXT4oNyl0ZXN0X2Z1bmN0aW9uKCkKKyAgICAtPiBuZXh0KGl0KQorICAgIChQZGIpIHN0ZXAKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfcmV0dXJuX2NvbW1hbmRfZm9yX2dlbmVyYXRvclsxXT4oOCl0ZXN0X2Z1bmN0aW9uKCkKKyAgICAtPiBleGNlcHQgU3RvcEl0ZXJhdGlvbiBhcyBleDoKKyAgICAoUGRiKSBzdGVwCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX3JldHVybl9jb21tYW5kX2Zvcl9nZW5lcmF0b3JbMV0+KDkpdGVzdF9mdW5jdGlvbigpCisgICAgLT4gaWYgZXgudmFsdWUgIT0gMToKKyAgICAoUGRiKSBjb250aW51ZQorICAgIGZpbmlzaGVkCisgICAgIiIiCisKK2RlZiB0ZXN0X3BkYl91bnRpbF9jb21tYW5kX2Zvcl9nZW5lcmF0b3IoKToKKyAgICAiIiJUZXN0aW5nIG5vIHVud2luZG5nIHN0YWNrIG9uIHlpZWxkIGZvciBnZW5lcmF0b3JzCisgICAgICAgZm9yICJ1bnRpbCIgY29tbWFuZCBpZiB0YXJnZXQgYnJlYWtwb2luZyBpcyBub3QgcmVhY2hlZAorCisgICAgPj4+IGRlZiB0ZXN0X2dlbigpOgorICAgIC4uLiAgICAgeWllbGQgMAorICAgIC4uLiAgICAgeWllbGQgMQorICAgIC4uLiAgICAgeWllbGQgMgorCisgICAgPj4+IGRlZiB0ZXN0X2Z1bmN0aW9uKCk6CisgICAgLi4uICAgICBpbXBvcnQgcGRiOyBwZGIuUGRiKG5vc2lnaW50PVRydWUpLnNldF90cmFjZSgpCisgICAgLi4uICAgICBmb3IgaSBpbiB0ZXN0X2dlbigpOgorICAgIC4uLiAgICAgICAgIHByaW50KGkpCisgICAgLi4uICAgICBwcmludCgiZmluaXNoZWQiKQorCisgICAgPj4+IHdpdGggUGRiVGVzdElucHV0KFsnc3RlcCcsCisgICAgLi4uICAgICAgICAgICAgICAgICAgICAndW50aWwgNCcsCisgICAgLi4uICAgICAgICAgICAgICAgICAgICAnc3RlcCcsCisgICAgLi4uICAgICAgICAgICAgICAgICAgICAnc3RlcCcsCisgICAgLi4uICAgICAgICAgICAgICAgICAgICAnY29udGludWUnXSk6CisgICAgLi4uICAgICB0ZXN0X2Z1bmN0aW9uKCkKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfdW50aWxfY29tbWFuZF9mb3JfZ2VuZXJhdG9yWzFdPigzKXRlc3RfZnVuY3Rpb24oKQorICAgIC0+IGZvciBpIGluIHRlc3RfZ2VuKCk6CisgICAgKFBkYikgc3RlcAorICAgIC0tQ2FsbC0tCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX3VudGlsX2NvbW1hbmRfZm9yX2dlbmVyYXRvclswXT4oMSl0ZXN0X2dlbigpCisgICAgLT4gZGVmIHRlc3RfZ2VuKCk6CisgICAgKFBkYikgdW50aWwgNAorICAgIDAKKyAgICAxCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX3VudGlsX2NvbW1hbmRfZm9yX2dlbmVyYXRvclswXT4oNCl0ZXN0X2dlbigpCisgICAgLT4geWllbGQgMgorICAgIChQZGIpIHN0ZXAKKyAgICAtLVJldHVybi0tCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX3VudGlsX2NvbW1hbmRfZm9yX2dlbmVyYXRvclswXT4oNCl0ZXN0X2dlbigpLT4yCisgICAgLT4geWllbGQgMgorICAgIChQZGIpIHN0ZXAKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfdW50aWxfY29tbWFuZF9mb3JfZ2VuZXJhdG9yWzFdPig0KXRlc3RfZnVuY3Rpb24oKQorICAgIC0+IHByaW50KGkpCisgICAgKFBkYikgY29udGludWUKKyAgICAyCisgICAgZmluaXNoZWQKKyAgICAiIiIKKworZGVmIHRlc3RfcGRiX25leHRfY29tbWFuZF9pbl9nZW5lcmF0b3JfZm9yX2xvb3AoKToKKyAgICAiIiJUaGUgbmV4dCBjb21tYW5kIG9uIHJldHVybmluZyBmcm9tIGEgZ2VuZXJhdG9yIGNvbnRyb2xlZCBieSBhIGZvciBsb29wLgorCisgICAgPj4+IGRlZiB0ZXN0X2dlbigpOgorICAgIC4uLiAgICAgeWllbGQgMAorICAgIC4uLiAgICAgcmV0dXJuIDEKKworICAgID4+PiBkZWYgdGVzdF9mdW5jdGlvbigpOgorICAgIC4uLiAgICAgaW1wb3J0IHBkYjsgcGRiLlBkYihub3NpZ2ludD1UcnVlKS5zZXRfdHJhY2UoKQorICAgIC4uLiAgICAgZm9yIGkgaW4gdGVzdF9nZW4oKToKKyAgICAuLi4gICAgICAgICBwcmludCgndmFsdWUnLCBpKQorICAgIC4uLiAgICAgeCA9IDEyMworCisgICAgPj4+IHdpdGggUGRiVGVzdElucHV0KFsnYnJlYWsgdGVzdF9nZW4nLAorICAgIC4uLiAgICAgICAgICAgICAgICAgICAgJ2NvbnRpbnVlJywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICduZXh0JywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICduZXh0JywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICduZXh0JywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICdjb250aW51ZSddKToKKyAgICAuLi4gICAgIHRlc3RfZnVuY3Rpb24oKQorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9uZXh0X2NvbW1hbmRfaW5fZ2VuZXJhdG9yX2Zvcl9sb29wWzFdPigzKXRlc3RfZnVuY3Rpb24oKQorICAgIC0+IGZvciBpIGluIHRlc3RfZ2VuKCk6CisgICAgKFBkYikgYnJlYWsgdGVzdF9nZW4KKyAgICBCcmVha3BvaW50IDYgYXQgPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9uZXh0X2NvbW1hbmRfaW5fZ2VuZXJhdG9yX2Zvcl9sb29wWzBdPjoxCisgICAgKFBkYikgY29udGludWUKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfbmV4dF9jb21tYW5kX2luX2dlbmVyYXRvcl9mb3JfbG9vcFswXT4oMil0ZXN0X2dlbigpCisgICAgLT4geWllbGQgMAorICAgIChQZGIpIG5leHQKKyAgICB2YWx1ZSAwCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX25leHRfY29tbWFuZF9pbl9nZW5lcmF0b3JfZm9yX2xvb3BbMF0+KDMpdGVzdF9nZW4oKQorICAgIC0+IHJldHVybiAxCisgICAgKFBkYikgbmV4dAorICAgIEludGVybmFsIFN0b3BJdGVyYXRpb246IDEKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfbmV4dF9jb21tYW5kX2luX2dlbmVyYXRvcl9mb3JfbG9vcFsxXT4oMyl0ZXN0X2Z1bmN0aW9uKCkKKyAgICAtPiBmb3IgaSBpbiB0ZXN0X2dlbigpOgorICAgIChQZGIpIG5leHQKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfbmV4dF9jb21tYW5kX2luX2dlbmVyYXRvcl9mb3JfbG9vcFsxXT4oNSl0ZXN0X2Z1bmN0aW9uKCkKKyAgICAtPiB4ID0gMTIzCisgICAgKFBkYikgY29udGludWUKKyAgICAiIiIKKworZGVmIHRlc3RfcGRiX25leHRfY29tbWFuZF9zdWJpdGVyYXRvcigpOgorICAgICIiIlRoZSBuZXh0IGNvbW1hbmQgaW4gYSBnZW5lcmF0b3Igd2l0aCBhIHN1Yml0ZXJhdG9yLgorCisgICAgPj4+IGRlZiB0ZXN0X3N1YmdlbmVyYXRvcigpOgorICAgIC4uLiAgICAgeWllbGQgMAorICAgIC4uLiAgICAgcmV0dXJuIDEKKworICAgID4+PiBkZWYgdGVzdF9nZW4oKToKKyAgICAuLi4gICAgIHggPSB5aWVsZCBmcm9tIHRlc3Rfc3ViZ2VuZXJhdG9yKCkKKyAgICAuLi4gICAgIHJldHVybiB4CisKKyAgICA+Pj4gZGVmIHRlc3RfZnVuY3Rpb24oKToKKyAgICAuLi4gICAgIGltcG9ydCBwZGI7IHBkYi5QZGIobm9zaWdpbnQ9VHJ1ZSkuc2V0X3RyYWNlKCkKKyAgICAuLi4gICAgIGZvciBpIGluIHRlc3RfZ2VuKCk6CisgICAgLi4uICAgICAgICAgcHJpbnQoJ3ZhbHVlJywgaSkKKyAgICAuLi4gICAgIHggPSAxMjMKKworICAgID4+PiB3aXRoIFBkYlRlc3RJbnB1dChbJ3N0ZXAnLAorICAgIC4uLiAgICAgICAgICAgICAgICAgICAgJ3N0ZXAnLAorICAgIC4uLiAgICAgICAgICAgICAgICAgICAgJ25leHQnLAorICAgIC4uLiAgICAgICAgICAgICAgICAgICAgJ25leHQnLAorICAgIC4uLiAgICAgICAgICAgICAgICAgICAgJ25leHQnLAorICAgIC4uLiAgICAgICAgICAgICAgICAgICAgJ2NvbnRpbnVlJ10pOgorICAgIC4uLiAgICAgdGVzdF9mdW5jdGlvbigpCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX25leHRfY29tbWFuZF9zdWJpdGVyYXRvclsyXT4oMyl0ZXN0X2Z1bmN0aW9uKCkKKyAgICAtPiBmb3IgaSBpbiB0ZXN0X2dlbigpOgorICAgIChQZGIpIHN0ZXAKKyAgICAtLUNhbGwtLQorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9uZXh0X2NvbW1hbmRfc3ViaXRlcmF0b3JbMV0+KDEpdGVzdF9nZW4oKQorICAgIC0+IGRlZiB0ZXN0X2dlbigpOgorICAgIChQZGIpIHN0ZXAKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfbmV4dF9jb21tYW5kX3N1Yml0ZXJhdG9yWzFdPigyKXRlc3RfZ2VuKCkKKyAgICAtPiB4ID0geWllbGQgZnJvbSB0ZXN0X3N1YmdlbmVyYXRvcigpCisgICAgKFBkYikgbmV4dAorICAgIHZhbHVlIDAKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfbmV4dF9jb21tYW5kX3N1Yml0ZXJhdG9yWzFdPigzKXRlc3RfZ2VuKCkKKyAgICAtPiByZXR1cm4geAorICAgIChQZGIpIG5leHQKKyAgICBJbnRlcm5hbCBTdG9wSXRlcmF0aW9uOiAxCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX25leHRfY29tbWFuZF9zdWJpdGVyYXRvclsyXT4oMyl0ZXN0X2Z1bmN0aW9uKCkKKyAgICAtPiBmb3IgaSBpbiB0ZXN0X2dlbigpOgorICAgIChQZGIpIG5leHQKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfbmV4dF9jb21tYW5kX3N1Yml0ZXJhdG9yWzJdPig1KXRlc3RfZnVuY3Rpb24oKQorICAgIC0+IHggPSAxMjMKKyAgICAoUGRiKSBjb250aW51ZQorICAgICIiIgorCiAKIGNsYXNzIFBkYlRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKIApAQCAtNjA2LDYgKzkyMCw3IEBACiAgICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSwgJ3cnKSBhcyBmOgogICAgICAgICAgICAgZi53cml0ZSh0ZXh0d3JhcC5kZWRlbnQoc2NyaXB0KSkKICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHN1cHBvcnQudW5saW5rLCBmaWxlbmFtZSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHN1cHBvcnQucm10cmVlLCAnX19weWNhY2hlX18nKQogICAgICAgICBjbWQgPSBbc3lzLmV4ZWN1dGFibGUsICctbScsICdwZGInLCBmaWxlbmFtZV0KICAgICAgICAgc3Rkb3V0ID0gc3RkZXJyID0gTm9uZQogICAgICAgICB3aXRoIHN1YnByb2Nlc3MuUG9wZW4oY21kLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLApAQCAtNjE3LDYgKzkzMiwzNiBAQAogICAgICAgICBzdGRlcnIgPSBzdGRlcnIgYW5kIGJ5dGVzLmRlY29kZShzdGRlcnIpCiAgICAgICAgIHJldHVybiBzdGRvdXQsIHN0ZGVycgogCisgICAgZGVmIF9hc3NlcnRfZmluZF9mdW5jdGlvbihzZWxmLCBmaWxlX2NvbnRlbnQsIGZ1bmNfbmFtZSwgZXhwZWN0ZWQpOgorICAgICAgICBmaWxlX2NvbnRlbnQgPSB0ZXh0d3JhcC5kZWRlbnQoZmlsZV9jb250ZW50KQorCisgICAgICAgIHdpdGggb3BlbihzdXBwb3J0LlRFU1RGTiwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShmaWxlX2NvbnRlbnQpCisKKyAgICAgICAgZXhwZWN0ZWQgPSBOb25lIGlmIG5vdCBleHBlY3RlZCBlbHNlICgKKyAgICAgICAgICAgIGV4cGVjdGVkWzBdLCBzdXBwb3J0LlRFU1RGTiwgZXhwZWN0ZWRbMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBleHBlY3RlZCwgcGRiLmZpbmRfZnVuY3Rpb24oZnVuY19uYW1lLCBzdXBwb3J0LlRFU1RGTikpCisKKyAgICBkZWYgdGVzdF9maW5kX2Z1bmN0aW9uX2VtcHR5X2ZpbGUoc2VsZik6CisgICAgICAgIHNlbGYuX2Fzc2VydF9maW5kX2Z1bmN0aW9uKCcnLCAnZm9vJywgTm9uZSkKKworICAgIGRlZiB0ZXN0X2ZpbmRfZnVuY3Rpb25fZm91bmQoc2VsZik6CisgICAgICAgIHNlbGYuX2Fzc2VydF9maW5kX2Z1bmN0aW9uKAorICAgICAgICAgICAgIiIiXAorICAgICAgICAgICAgZGVmIGZvbygpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAgICAgZGVmIGJhcigpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAgICAgZGVmIHF1dXgoKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAiIiIsCisgICAgICAgICAgICAnYmFyJywKKyAgICAgICAgICAgICgnYmFyJywgNCksCisgICAgICAgICkKKwogICAgIGRlZiB0ZXN0X2lzc3VlNzk2NChzZWxmKToKICAgICAgICAgIyBvcGVuIHRoZSBmaWxlIGFzIGJpbmFyeSBzbyB3ZSBjYW4gZm9yY2UgXHJcbiBuZXdsaW5lCiAgICAgICAgIHdpdGggb3BlbihzdXBwb3J0LlRFU1RGTiwgJ3diJykgYXMgZjoKQEAgLTY5OCw2ICsxMDQzLDE4IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ0Vycm9yJywgc3Rkb3V0LmRlY29kZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICJHb3QgYW4gZXJyb3IgcnVubmluZyB0ZXN0IHNjcmlwdCB1bmRlciBQREIiKQogCisgICAgZGVmIHRlc3RfaXNzdWUxNjE4MChzZWxmKToKKyAgICAgICAgIyBBIHN5bnRheCBlcnJvciBpbiB0aGUgZGVidWdnZWUuCisgICAgICAgIHNjcmlwdCA9ICJkZWYgZjogcGFzc1xuIgorICAgICAgICBjb21tYW5kcyA9ICcnCisgICAgICAgIGV4cGVjdGVkID0gIlN5bnRheEVycm9yOiIKKyAgICAgICAgc3Rkb3V0LCBzdGRlcnIgPSBzZWxmLnJ1bl9wZGIoc2NyaXB0LCBjb21tYW5kcykKKyAgICAgICAgc2VsZi5hc3NlcnRJbihleHBlY3RlZCwgc3Rkb3V0LAorICAgICAgICAgICAgJ1xuXG5FeHBlY3RlZDpcbnt9XG5Hb3Q6XG57fVxuJworICAgICAgICAgICAgJ0ZhaWwgdG8gaGFuZGxlIGEgc3ludGF4IGVycm9yIGluIHRoZSBkZWJ1Z2dlZS4nCisgICAgICAgICAgICAuZm9ybWF0KGV4cGVjdGVkLCBzdGRvdXQpKQorCisKICAgICBkZWYgdGVhckRvd24oc2VsZik6CiAgICAgICAgIHN1cHBvcnQudW5saW5rKHN1cHBvcnQuVEVTVEZOKQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3BlZXBob2xlci5weSBiL0xpYi90ZXN0L3Rlc3RfcGVlcGhvbGVyLnB5CmluZGV4IDFjYWNkZWEuLjUwMjU3OTIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcGVlcGhvbGVyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcGVlcGhvbGVyLnB5CkBAIC01LDQ0ICs1LDI4IEBACiBpbXBvcnQgdW5pdHRlc3QKIGZyb20gbWF0aCBpbXBvcnQgY29weXNpZ24KIAotZGVmIGRpc2Fzc2VtYmxlKGZ1bmMpOgotICAgIGYgPSBTdHJpbmdJTygpCi0gICAgdG1wID0gc3lzLnN0ZG91dAotICAgIHN5cy5zdGRvdXQgPSBmCi0gICAgdHJ5OgotICAgICAgICBkaXMuZGlzKGZ1bmMpCi0gICAgZmluYWxseToKLSAgICAgICAgc3lzLnN0ZG91dCA9IHRtcAotICAgIHJlc3VsdCA9IGYuZ2V0dmFsdWUoKQotICAgIGYuY2xvc2UoKQotICAgIHJldHVybiByZXN1bHQKK2Zyb20gdGVzdC5ieXRlY29kZV9oZWxwZXIgaW1wb3J0IEJ5dGVjb2RlVGVzdENhc2UKIAotZGVmIGRpc19zaW5nbGUobGluZSk6Ci0gICAgcmV0dXJuIGRpc2Fzc2VtYmxlKGNvbXBpbGUobGluZSwgJycsICdzaW5nbGUnKSkKLQotCi1jbGFzcyBUZXN0VHJhbmZvcm1zKHVuaXR0ZXN0LlRlc3RDYXNlKToKK2NsYXNzIFRlc3RUcmFuZm9ybXMoQnl0ZWNvZGVUZXN0Q2FzZSk6CiAKICAgICBkZWYgdGVzdF91bm90KHNlbGYpOgogICAgICAgICAjIFVOQVJZX05PVCBQT1BfSlVNUF9JRl9GQUxTRSAgLS0+ICBQT1BfSlVNUF9JRl9UUlVFJwogICAgICAgICBkZWYgdW5vdCh4KToKICAgICAgICAgICAgIGlmIG5vdCB4ID09IDI6CiAgICAgICAgICAgICAgICAgZGVsIHgKLSAgICAgICAgYXNtID0gZGlzYXNzZW1ibGUodW5vdCkKLSAgICAgICAgZm9yIGVsZW0gaW4gKCdVTkFSWV9OT1QnLCAnUE9QX0pVTVBfSUZfRkFMU0UnKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oZWxlbSwgYXNtKQotICAgICAgICBmb3IgZWxlbSBpbiAoJ1BPUF9KVU1QX0lGX1RSVUUnLCk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEluKGVsZW0sIGFzbSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbkJ5dGVjb2RlKHVub3QsICdVTkFSWV9OT1QnKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluQnl0ZWNvZGUodW5vdCwgJ1BPUF9KVU1QX0lGX0ZBTFNFJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbkJ5dGVjb2RlKHVub3QsICdQT1BfSlVNUF9JRl9UUlVFJykKIAogICAgIGRlZiB0ZXN0X2VsaW1faW52ZXJzaW9uX29mX2lzX29yX2luKHNlbGYpOgotICAgICAgICBmb3IgbGluZSwgZWxlbSBpbiAoCi0gICAgICAgICAgICAoJ25vdCBhIGlzIGInLCAnKGlzIG5vdCknLCksCi0gICAgICAgICAgICAoJ25vdCBhIGluIGInLCAnKG5vdCBpbiknLCksCi0gICAgICAgICAgICAoJ25vdCBhIGlzIG5vdCBiJywgJyhpcyknLCksCi0gICAgICAgICAgICAoJ25vdCBhIG5vdCBpbiBiJywgJyhpbiknLCksCisgICAgICAgIGZvciBsaW5lLCBjbXBfb3AgaW4gKAorICAgICAgICAgICAgKCdub3QgYSBpcyBiJywgJ2lzIG5vdCcsKSwKKyAgICAgICAgICAgICgnbm90IGEgaW4gYicsICdub3QgaW4nLCksCisgICAgICAgICAgICAoJ25vdCBhIGlzIG5vdCBiJywgJ2lzJywpLAorICAgICAgICAgICAgKCdub3QgYSBub3QgaW4gYicsICdpbicsKSwKICAgICAgICAgICAgICk6Ci0gICAgICAgICAgICBhc20gPSBkaXNfc2luZ2xlKGxpbmUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEluKGVsZW0sIGFzbSkKKyAgICAgICAgICAgIGNvZGUgPSBjb21waWxlKGxpbmUsICcnLCAnc2luZ2xlJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW5CeXRlY29kZShjb2RlLCAnQ09NUEFSRV9PUCcsIGNtcF9vcCkKIAogICAgIGRlZiB0ZXN0X2dsb2JhbF9hc19jb25zdGFudChzZWxmKToKICAgICAgICAgIyBMT0FEX0dMT0JBTCBOb25lL1RydWUvRmFsc2UgIC0tPiAgTE9BRF9DT05TVCBOb25lL1RydWUvRmFsc2UKQEAgLTU2LDE3ICs0MCwxNCBAQAogICAgICAgICBkZWYgaCh4KToKICAgICAgICAgICAgIEZhbHNlCiAgICAgICAgICAgICByZXR1cm4geAotICAgICAgICBmb3IgZnVuYywgbmFtZSBpbiAoKGYsICdOb25lJyksIChnLCAnVHJ1ZScpLCAoaCwgJ0ZhbHNlJykpOgotICAgICAgICAgICAgYXNtID0gZGlzYXNzZW1ibGUoZnVuYykKLSAgICAgICAgICAgIGZvciBlbGVtIGluICgnTE9BRF9HTE9CQUwnLCk6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihlbGVtLCBhc20pCi0gICAgICAgICAgICBmb3IgZWxlbSBpbiAoJ0xPQURfQ09OU1QnLCAnKCcrbmFtZSsnKScpOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZWxlbSwgYXNtKQorICAgICAgICBmb3IgZnVuYywgZWxlbSBpbiAoKGYsIE5vbmUpLCAoZywgVHJ1ZSksIChoLCBGYWxzZSkpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbkJ5dGVjb2RlKGZ1bmMsICdMT0FEX0dMT0JBTCcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluQnl0ZWNvZGUoZnVuYywgJ0xPQURfQ09OU1QnLCBlbGVtKQogICAgICAgICBkZWYgZigpOgogICAgICAgICAgICAgJ0FkZGluZyBhIGRvY3N0cmluZyBtYWRlIHRoaXMgdGVzdCBmYWlsIGluIFB5Mi41LjAnCiAgICAgICAgICAgICByZXR1cm4gTm9uZQotICAgICAgICBzZWxmLmFzc2VydEluKCdMT0FEX0NPTlNUJywgZGlzYXNzZW1ibGUoZikpCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ0xPQURfR0xPQkFMJywgZGlzYXNzZW1ibGUoZikpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW5CeXRlY29kZShmLCAnTE9BRF9HTE9CQUwnKQorICAgICAgICBzZWxmLmFzc2VydEluQnl0ZWNvZGUoZiwgJ0xPQURfQ09OU1QnLCBOb25lKQogCiAgICAgZGVmIHRlc3Rfd2hpbGVfb25lKHNlbGYpOgogICAgICAgICAjIFNraXAgb3ZlcjogIExPQURfQ09OU1QgdHJ1ZWNvbnN0ICBQT1BfSlVNUF9JRl9GQUxTRSB4eApAQCAtNzQsMTEgKzU1LDEwIEBACiAgICAgICAgICAgICB3aGlsZSAxOgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgIHJldHVybiBsaXN0Ci0gICAgICAgIGFzbSA9IGRpc2Fzc2VtYmxlKGYpCiAgICAgICAgIGZvciBlbGVtIGluICgnTE9BRF9DT05TVCcsICdQT1BfSlVNUF9JRl9GQUxTRScpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihlbGVtLCBhc20pCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluQnl0ZWNvZGUoZiwgZWxlbSkKICAgICAgICAgZm9yIGVsZW0gaW4gKCdKVU1QX0FCU09MVVRFJywpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlbGVtLCBhc20pCisgICAgICAgICAgICBzZWxmLmFzc2VydEluQnl0ZWNvZGUoZiwgZWxlbSkKIAogICAgIGRlZiB0ZXN0X3BhY2tfdW5wYWNrKHNlbGYpOgogICAgICAgICBmb3IgbGluZSwgZWxlbSBpbiAoCkBAIC04NiwyOCArNjYsMzAgQEAKICAgICAgICAgICAgICgnYSwgYiA9IGEsIGInLCAnUk9UX1RXTycsKSwKICAgICAgICAgICAgICgnYSwgYiwgYyA9IGEsIGIsIGMnLCAnUk9UX1RIUkVFJywpLAogICAgICAgICAgICAgKToKLSAgICAgICAgICAgIGFzbSA9IGRpc19zaW5nbGUobGluZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZWxlbSwgYXNtKQotICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbignQlVJTERfVFVQTEUnLCBhc20pCi0gICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdVTlBBQ0tfVFVQTEUnLCBhc20pCisgICAgICAgICAgICBjb2RlID0gY29tcGlsZShsaW5lLCcnLCdzaW5nbGUnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbkJ5dGVjb2RlKGNvZGUsIGVsZW0pCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluQnl0ZWNvZGUoY29kZSwgJ0JVSUxEX1RVUExFJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW5CeXRlY29kZShjb2RlLCAnVU5QQUNLX1RVUExFJykKIAogICAgIGRlZiB0ZXN0X2ZvbGRpbmdfb2ZfdHVwbGVzX29mX2NvbnN0YW50cyhzZWxmKToKICAgICAgICAgZm9yIGxpbmUsIGVsZW0gaW4gKAotICAgICAgICAgICAgKCdhID0gMSwyLDMnLCAnKCgxLCAyLCAzKSknKSwKLSAgICAgICAgICAgICgnKCJhIiwiYiIsImMiKScsICIoKCdhJywgJ2InLCAnYycpKSIpLAotICAgICAgICAgICAgKCdhLGIsYyA9IDEsMiwzJywgJygoMSwgMiwgMykpJyksCi0gICAgICAgICAgICAoJyhOb25lLCAxLCBOb25lKScsICcoKE5vbmUsIDEsIE5vbmUpKScpLAotICAgICAgICAgICAgKCcoKDEsIDIpLCAzLCA0KScsICcoKCgxLCAyKSwgMywgNCkpJyksCisgICAgICAgICAgICAoJ2EgPSAxLDIsMycsICgxLCAyLCAzKSksCisgICAgICAgICAgICAoJygiYSIsImIiLCJjIiknLCAoJ2EnLCAnYicsICdjJykpLAorICAgICAgICAgICAgKCdhLGIsYyA9IDEsMiwzJywgKDEsIDIsIDMpKSwKKyAgICAgICAgICAgICgnKE5vbmUsIDEsIE5vbmUpJywgKE5vbmUsIDEsIE5vbmUpKSwKKyAgICAgICAgICAgICgnKCgxLCAyKSwgMywgNCknLCAoKDEsIDIpLCAzLCA0KSksCiAgICAgICAgICAgICApOgotICAgICAgICAgICAgYXNtID0gZGlzX3NpbmdsZShsaW5lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlbGVtLCBhc20pCi0gICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdCVUlMRF9UVVBMRScsIGFzbSkKKyAgICAgICAgICAgIGNvZGUgPSBjb21waWxlKGxpbmUsJycsJ3NpbmdsZScpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluQnl0ZWNvZGUoY29kZSwgJ0xPQURfQ09OU1QnLCBlbGVtKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbkJ5dGVjb2RlKGNvZGUsICdCVUlMRF9UVVBMRScpCiAKICAgICAgICAgIyBMb25nIHR1cGxlcyBzaG91bGQgYmUgZm9sZGVkIHRvby4KLSAgICAgICAgYXNtID0gZGlzX3NpbmdsZShyZXByKHR1cGxlKHJhbmdlKDEwMDAwKSkpKQorICAgICAgICBjb2RlID0gY29tcGlsZShyZXByKHR1cGxlKHJhbmdlKDEwMDAwKSkpLCcnLCdzaW5nbGUnKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluQnl0ZWNvZGUoY29kZSwgJ0JVSUxEX1RVUExFJykKICAgICAgICAgIyBPbmUgTE9BRF9DT05TVCBmb3IgdGhlIHR1cGxlLCBvbmUgZm9yIHRoZSBOb25lIHJldHVybiB2YWx1ZQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFzbS5jb3VudCgnTE9BRF9DT05TVCcpLCAyKQotICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdCVUlMRF9UVVBMRScsIGFzbSkKKyAgICAgICAgbG9hZF9jb25zdHMgPSBbaW5zdHIgZm9yIGluc3RyIGluIGRpcy5nZXRfaW5zdHJ1Y3Rpb25zKGNvZGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBpbnN0ci5vcG5hbWUgPT0gJ0xPQURfQ09OU1QnXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsb2FkX2NvbnN0cyksIDIpCiAKICAgICAgICAgIyBCdWcgMTA1MzgxOTogIFR1cGxlIG9mIGNvbnN0YW50cyBtaXNpZGVudGlmaWVkIHdoZW4gcHJlc2VudGVkIHdpdGg6CiAgICAgICAgICMgLiAuIC4gb3Bjb2RlX3dpdGhfYXJnIDEwMCAgIHVuYXJ5X29wY29kZSAgIEJVSUxEX1RVUExFIDEgIC4gLiAuCkBAIC0xMjksMTQgKzExMSwxNCBAQAogICAgIGRlZiB0ZXN0X2ZvbGRpbmdfb2ZfbGlzdHNfb2ZfY29uc3RhbnRzKHNlbGYpOgogICAgICAgICBmb3IgbGluZSwgZWxlbSBpbiAoCiAgICAgICAgICAgICAjIGluL25vdCBpbiBjb25zdGFudHMgd2l0aCBCVUlMRF9MSVNUIHNob3VsZCBiZSBmb2xkZWQgdG8gYSB0dXBsZToKLSAgICAgICAgICAgICgnYSBpbiBbMSwyLDNdJywgJygxLCAyLCAzKScpLAotICAgICAgICAgICAgKCdhIG5vdCBpbiBbImEiLCJiIiwiYyJdJywgIigoJ2EnLCAnYicsICdjJykpIiksCi0gICAgICAgICAgICAoJ2EgaW4gW05vbmUsIDEsIE5vbmVdJywgJygoTm9uZSwgMSwgTm9uZSkpJyksCi0gICAgICAgICAgICAoJ2Egbm90IGluIFsoMSwgMiksIDMsIDRdJywgJygoKDEsIDIpLCAzLCA0KSknKSwKKyAgICAgICAgICAgICgnYSBpbiBbMSwyLDNdJywgKDEsIDIsIDMpKSwKKyAgICAgICAgICAgICgnYSBub3QgaW4gWyJhIiwiYiIsImMiXScsICgnYScsICdiJywgJ2MnKSksCisgICAgICAgICAgICAoJ2EgaW4gW05vbmUsIDEsIE5vbmVdJywgKE5vbmUsIDEsIE5vbmUpKSwKKyAgICAgICAgICAgICgnYSBub3QgaW4gWygxLCAyKSwgMywgNF0nLCAoKDEsIDIpLCAzLCA0KSksCiAgICAgICAgICAgICApOgotICAgICAgICAgICAgYXNtID0gZGlzX3NpbmdsZShsaW5lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlbGVtLCBhc20pCi0gICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdCVUlMRF9MSVNUJywgYXNtKQorICAgICAgICAgICAgY29kZSA9IGNvbXBpbGUobGluZSwgJycsICdzaW5nbGUnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbkJ5dGVjb2RlKGNvZGUsICdMT0FEX0NPTlNUJywgZWxlbSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW5CeXRlY29kZShjb2RlLCAnQlVJTERfTElTVCcpCiAKICAgICBkZWYgdGVzdF9mb2xkaW5nX29mX3NldHNfb2ZfY29uc3RhbnRzKHNlbGYpOgogICAgICAgICBmb3IgbGluZSwgZWxlbSBpbiAoCkBAIC0xNDcsMTggKzEyOSw5IEBACiAgICAgICAgICAgICAoJ2Egbm90IGluIHsoMSwgMiksIDMsIDR9JywgZnJvemVuc2V0KHsoMSwgMiksIDMsIDR9KSksCiAgICAgICAgICAgICAoJ2EgaW4gezEsIDIsIDMsIDMsIDIsIDF9JywgZnJvemVuc2V0KHsxLCAyLCAzfSkpLAogICAgICAgICAgICAgKToKLSAgICAgICAgICAgIGFzbSA9IGRpc19zaW5nbGUobGluZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ0JVSUxEX1NFVCcsIGFzbSkKLQotICAgICAgICAgICAgIyBWZXJpZnkgdGhhdCB0aGUgZnJvemVuc2V0ICdlbGVtJyBpcyBpbiB0aGUgZGlzYXNzZW1ibHkKLSAgICAgICAgICAgICMgVGhlIG9yZGVyaW5nIG9mIHRoZSBlbGVtZW50cyBpbiByZXByKCBmcm96ZW5zZXQgKSBpc24ndAotICAgICAgICAgICAgIyBndWFyYW50ZWVkLCBzbyB3ZSBqdW1wIHRocm91Z2ggc29tZSBob29wcyB0byBlbnN1cmUgdGhhdCB3ZSBoYXZlCi0gICAgICAgICAgICAjIHRoZSBmcm96ZW5zZXQgd2UgZXhwZWN0OgotICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignZnJvemVuc2V0JywgYXNtKQotICAgICAgICAgICAgIyBFeHRyYWN0IHRoZSBmcm96ZW5zZXQgbGl0ZXJhbCBmcm9tIHRoZSBkaXNhc3NlbWJseToKLSAgICAgICAgICAgIG0gPSByZS5tYXRjaChyJy4qKGZyb3plbnNldFwoey4qfVwpKS4qJywgYXNtLCByZS5ET1RBTEwpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbChtLmdyb3VwKDEpKSwgZWxlbSkKKyAgICAgICAgICAgIGNvZGUgPSBjb21waWxlKGxpbmUsICcnLCAnc2luZ2xlJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW5CeXRlY29kZShjb2RlLCAnQlVJTERfU0VUJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW5CeXRlY29kZShjb2RlLCAnTE9BRF9DT05TVCcsIGVsZW0pCiAKICAgICAgICAgIyBFbnN1cmUgdGhhdCB0aGUgcmVzdWx0aW5nIGNvZGUgYWN0dWFsbHkgd29ya3M6CiAgICAgICAgIGRlZiBmKGEpOgpAQCAtMTc2LDk4ICsxNDksMTAzIEBACiAKICAgICBkZWYgdGVzdF9mb2xkaW5nX29mX2Jpbm9wc19vbl9jb25zdGFudHMoc2VsZik6CiAgICAgICAgIGZvciBsaW5lLCBlbGVtIGluICgKLSAgICAgICAgICAgICgnYSA9IDIrMys0JywgJyg5KScpLCAgICAgICAgICAgICAgICAgICAjIGNoYWluZWQgZm9sZAotICAgICAgICAgICAgKCciQCIqNCcsICIoJ0BAQEAnKSIpLCAgICAgICAgICAgICAgICAgICMgY2hlY2sgc3RyaW5nIG9wcwotICAgICAgICAgICAgKCdhPSJhYmMiICsgImRlZiInLCAiKCdhYmNkZWYnKSIpLCAgICAgICMgY2hlY2sgc3RyaW5nIG9wcwotICAgICAgICAgICAgKCdhID0gMyoqNCcsICcoODEpJyksICAgICAgICAgICAgICAgICAgICMgYmluYXJ5IHBvd2VyCi0gICAgICAgICAgICAoJ2EgPSAzKjQnLCAnKDEyKScpLCAgICAgICAgICAgICAgICAgICAgIyBiaW5hcnkgbXVsdGlwbHkKLSAgICAgICAgICAgICgnYSA9IDEzLy80JywgJygzKScpLCAgICAgICAgICAgICAgICAgICAjIGJpbmFyeSBmbG9vciBkaXZpZGUKLSAgICAgICAgICAgICgnYSA9IDE0JTQnLCAnKDIpJyksICAgICAgICAgICAgICAgICAgICAjIGJpbmFyeSBtb2R1bG8KLSAgICAgICAgICAgICgnYSA9IDIrMycsICcoNSknKSwgICAgICAgICAgICAgICAgICAgICAjIGJpbmFyeSBhZGQKLSAgICAgICAgICAgICgnYSA9IDEzLTQnLCAnKDkpJyksICAgICAgICAgICAgICAgICAgICAjIGJpbmFyeSBzdWJ0cmFjdAotICAgICAgICAgICAgKCdhID0gKDEyLDEzKVsxXScsICcoMTMpJyksICAgICAgICAgICAgICMgYmluYXJ5IHN1YnNjcgotICAgICAgICAgICAgKCdhID0gMTMgPDwgMicsICcoNTIpJyksICAgICAgICAgICAgICAgICMgYmluYXJ5IGxzaGlmdAotICAgICAgICAgICAgKCdhID0gMTMgPj4gMicsICcoMyknKSwgICAgICAgICAgICAgICAgICMgYmluYXJ5IHJzaGlmdAotICAgICAgICAgICAgKCdhID0gMTMgJiA3JywgJyg1KScpLCAgICAgICAgICAgICAgICAgICMgYmluYXJ5IGFuZAotICAgICAgICAgICAgKCdhID0gMTMgXiA3JywgJygxMCknKSwgICAgICAgICAgICAgICAgICMgYmluYXJ5IHhvcgotICAgICAgICAgICAgKCdhID0gMTMgfCA3JywgJygxNSknKSwgICAgICAgICAgICAgICAgICMgYmluYXJ5IG9yCisgICAgICAgICAgICAoJ2EgPSAyKzMrNCcsIDkpLCAgICAgICAgICAgICAgICAgICAjIGNoYWluZWQgZm9sZAorICAgICAgICAgICAgKCciQCIqNCcsICdAQEBAJyksICAgICAgICAgICAgICAgICAgIyBjaGVjayBzdHJpbmcgb3BzCisgICAgICAgICAgICAoJ2E9ImFiYyIgKyAiZGVmIicsICdhYmNkZWYnKSwgICAgICAjIGNoZWNrIHN0cmluZyBvcHMKKyAgICAgICAgICAgICgnYSA9IDMqKjQnLCA4MSksICAgICAgICAgICAgICAgICAgICMgYmluYXJ5IHBvd2VyCisgICAgICAgICAgICAoJ2EgPSAzKjQnLCAxMiksICAgICAgICAgICAgICAgICAgICAjIGJpbmFyeSBtdWx0aXBseQorICAgICAgICAgICAgKCdhID0gMTMvLzQnLCAzKSwgICAgICAgICAgICAgICAgICAgIyBiaW5hcnkgZmxvb3IgZGl2aWRlCisgICAgICAgICAgICAoJ2EgPSAxNCU0JywgMiksICAgICAgICAgICAgICAgICAgICAjIGJpbmFyeSBtb2R1bG8KKyAgICAgICAgICAgICgnYSA9IDIrMycsIDUpLCAgICAgICAgICAgICAgICAgICAgICMgYmluYXJ5IGFkZAorICAgICAgICAgICAgKCdhID0gMTMtNCcsIDkpLCAgICAgICAgICAgICAgICAgICAgIyBiaW5hcnkgc3VidHJhY3QKKyAgICAgICAgICAgICgnYSA9ICgxMiwxMylbMV0nLCAxMyksICAgICAgICAgICAgICMgYmluYXJ5IHN1YnNjcgorICAgICAgICAgICAgKCdhID0gMTMgPDwgMicsIDUyKSwgICAgICAgICAgICAgICAgIyBiaW5hcnkgbHNoaWZ0CisgICAgICAgICAgICAoJ2EgPSAxMyA+PiAyJywgMyksICAgICAgICAgICAgICAgICAjIGJpbmFyeSByc2hpZnQKKyAgICAgICAgICAgICgnYSA9IDEzICYgNycsIDUpLCAgICAgICAgICAgICAgICAgICMgYmluYXJ5IGFuZAorICAgICAgICAgICAgKCdhID0gMTMgXiA3JywgMTApLCAgICAgICAgICAgICAgICAgIyBiaW5hcnkgeG9yCisgICAgICAgICAgICAoJ2EgPSAxMyB8IDcnLCAxNSksICAgICAgICAgICAgICAgICAjIGJpbmFyeSBvcgogICAgICAgICAgICAgKToKLSAgICAgICAgICAgIGFzbSA9IGRpc19zaW5nbGUobGluZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZWxlbSwgYXNtLCBhc20pCi0gICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdCSU5BUllfJywgYXNtKQorICAgICAgICAgICAgY29kZSA9IGNvbXBpbGUobGluZSwgJycsICdzaW5nbGUnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbkJ5dGVjb2RlKGNvZGUsICdMT0FEX0NPTlNUJywgZWxlbSkKKyAgICAgICAgICAgIGZvciBpbnN0ciBpbiBkaXMuZ2V0X2luc3RydWN0aW9ucyhjb2RlKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGluc3RyLm9wbmFtZS5zdGFydHN3aXRoKCdCSU5BUllfJykpCiAKICAgICAgICAgIyBWZXJpZnkgdGhhdCB1bmZvbGRhYmxlcyBhcmUgc2tpcHBlZAotICAgICAgICBhc20gPSBkaXNfc2luZ2xlKCdhPTIrImIiJykKLSAgICAgICAgc2VsZi5hc3NlcnRJbignKDIpJywgYXNtKQotICAgICAgICBzZWxmLmFzc2VydEluKCIoJ2InKSIsIGFzbSkKKyAgICAgICAgY29kZSA9IGNvbXBpbGUoJ2E9MisiYiInLCAnJywgJ3NpbmdsZScpCisgICAgICAgIHNlbGYuYXNzZXJ0SW5CeXRlY29kZShjb2RlLCAnTE9BRF9DT05TVCcsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0SW5CeXRlY29kZShjb2RlLCAnTE9BRF9DT05TVCcsICdiJykKIAogICAgICAgICAjIFZlcmlmeSB0aGF0IGxhcmdlIHNlcXVlbmNlcyBkbyBub3QgcmVzdWx0IGZyb20gZm9sZGluZwotICAgICAgICBhc20gPSBkaXNfc2luZ2xlKCdhPSJ4IioxMDAwJykKLSAgICAgICAgc2VsZi5hc3NlcnRJbignKDEwMDApJywgYXNtKQorICAgICAgICBjb2RlID0gY29tcGlsZSgnYT0ieCIqMTAwMCcsICcnLCAnc2luZ2xlJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbkJ5dGVjb2RlKGNvZGUsICdMT0FEX0NPTlNUJywgMTAwMCkKIAogICAgIGRlZiB0ZXN0X2JpbmFyeV9zdWJzY3Jfb25fdW5pY29kZShzZWxmKToKICAgICAgICAgIyB2YWxpZCBjb2RlIGdldCBvcHRpbWl6ZWQKLSAgICAgICAgYXNtID0gZGlzX3NpbmdsZSgnImZvbyJbMF0nKQotICAgICAgICBzZWxmLmFzc2VydEluKCIoJ2YnKSIsIGFzbSkKLSAgICAgICAgc2VsZi5hc3NlcnROb3RJbignQklOQVJZX1NVQlNDUicsIGFzbSkKLSAgICAgICAgYXNtID0gZGlzX3NpbmdsZSgnIlx1MDA2MVx1ZmZmZiJbMV0nKQotICAgICAgICBzZWxmLmFzc2VydEluKCIoJ1xcdWZmZmYnKSIsIGFzbSkKLSAgICAgICAgc2VsZi5hc3NlcnROb3RJbignQklOQVJZX1NVQlNDUicsIGFzbSkKLSAgICAgICAgYXNtID0gZGlzX3NpbmdsZSgnIlxVMDAwMTIzNDVhYmNkZWYiWzNdJykKLSAgICAgICAgc2VsZi5hc3NlcnRJbigiKCdjJykiLCBhc20pCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ0JJTkFSWV9TVUJTQ1InLCBhc20pCisgICAgICAgIGNvZGUgPSBjb21waWxlKCciZm9vIlswXScsICcnLCAnc2luZ2xlJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbkJ5dGVjb2RlKGNvZGUsICdMT0FEX0NPTlNUJywgJ2YnKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluQnl0ZWNvZGUoY29kZSwgJ0JJTkFSWV9TVUJTQ1InKQorICAgICAgICBjb2RlID0gY29tcGlsZSgnIlx1MDA2MVx1ZmZmZiJbMV0nLCAnJywgJ3NpbmdsZScpCisgICAgICAgIHNlbGYuYXNzZXJ0SW5CeXRlY29kZShjb2RlLCAnTE9BRF9DT05TVCcsICdcdWZmZmYnKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluQnl0ZWNvZGUoY29kZSwnQklOQVJZX1NVQlNDUicpCisKKyAgICAgICAgIyBXaXRoIFBFUCAzOTMsIG5vbi1CTVAgY2hhciBnZXQgb3B0aW1pemVkCisgICAgICAgIGNvZGUgPSBjb21waWxlKCciXFUwMDAxMjM0NSJbMF0nLCAnJywgJ3NpbmdsZScpCisgICAgICAgIHNlbGYuYXNzZXJ0SW5CeXRlY29kZShjb2RlLCAnTE9BRF9DT05TVCcsICdcVTAwMDEyMzQ1JykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbkJ5dGVjb2RlKGNvZGUsICdCSU5BUllfU1VCU0NSJykKIAogICAgICAgICAjIGludmFsaWQgY29kZSBkb2Vzbid0IGdldCBvcHRpbWl6ZWQKICAgICAgICAgIyBvdXQgb2YgcmFuZ2UKLSAgICAgICAgYXNtID0gZGlzX3NpbmdsZSgnImZ1dSJbMTBdJykKLSAgICAgICAgc2VsZi5hc3NlcnRJbignQklOQVJZX1NVQlNDUicsIGFzbSkKKyAgICAgICAgY29kZSA9IGNvbXBpbGUoJyJmdXUiWzEwXScsICcnLCAnc2luZ2xlJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbkJ5dGVjb2RlKGNvZGUsICdCSU5BUllfU1VCU0NSJykKIAogICAgIGRlZiB0ZXN0X2ZvbGRpbmdfb2ZfdW5hcnlvcHNfb25fY29uc3RhbnRzKHNlbGYpOgogICAgICAgICBmb3IgbGluZSwgZWxlbSBpbiAoCi0gICAgICAgICAgICAoJy0wLjUnLCAnKC0wLjUpJyksICAgICAgICAgICAgICAgICAgICAgIyB1bmFyeSBuZWdhdGl2ZQotICAgICAgICAgICAgKCctMC4wJywgJygtMC4wKScpLCAgICAgICAgICAgICAgICAgICAgICMgLTAuMAotICAgICAgICAgICAgKCctKDEuMC0xLjApJywnKC0wLjApJyksICAgICAgICAgICAgICAgICMgLTAuMCBhZnRlciBmb2xkaW5nCi0gICAgICAgICAgICAoJy0wJywgJygwKScpLCAgICAgICAgICAgICAgICAgICAgICAgICAgIyAtMAotICAgICAgICAgICAgKCd+LTInLCAnKDEpJyksICAgICAgICAgICAgICAgICAgICAgICAgICMgdW5hcnkgaW52ZXJ0Ci0gICAgICAgICAgICAoJysxJywgJygxKScpLCAgICAgICAgICAgICAgICAgICAgICAgICAgIyB1bmFyeSBwb3NpdGl2ZQorICAgICAgICAgICAgKCctMC41JywgLTAuNSksICAgICAgICAgICAgICAgICAgICAgIyB1bmFyeSBuZWdhdGl2ZQorICAgICAgICAgICAgKCctMC4wJywgLTAuMCksICAgICAgICAgICAgICAgICAgICAgIyAtMC4wCisgICAgICAgICAgICAoJy0oMS4wLTEuMCknLCAtMC4wKSwgICAgICAgICAgICAgICAjIC0wLjAgYWZ0ZXIgZm9sZGluZworICAgICAgICAgICAgKCctMCcsIDApLCAgICAgICAgICAgICAgICAgICAgICAgICAgIyAtMAorICAgICAgICAgICAgKCd+LTInLCAxKSwgICAgICAgICAgICAgICAgICAgICAgICAgIyB1bmFyeSBpbnZlcnQKKyAgICAgICAgICAgICgnKzEnLCAxKSwgICAgICAgICAgICAgICAgICAgICAgICAgICMgdW5hcnkgcG9zaXRpdmUKICAgICAgICAgKToKLSAgICAgICAgICAgIGFzbSA9IGRpc19zaW5nbGUobGluZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZWxlbSwgYXNtLCBhc20pCi0gICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdVTkFSWV8nLCBhc20pCisgICAgICAgICAgICBjb2RlID0gY29tcGlsZShsaW5lLCAnJywgJ3NpbmdsZScpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluQnl0ZWNvZGUoY29kZSwgJ0xPQURfQ09OU1QnLCBlbGVtKQorICAgICAgICAgICAgZm9yIGluc3RyIGluIGRpcy5nZXRfaW5zdHJ1Y3Rpb25zKGNvZGUpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW5zdHIub3BuYW1lLnN0YXJ0c3dpdGgoJ1VOQVJZXycpKQogCiAgICAgICAgICMgQ2hlY2sgdGhhdCAtMC4wIHdvcmtzIGFmdGVyIG1hcnNoYWxpbmcKICAgICAgICAgZGVmIG5lZ3plcm8oKToKICAgICAgICAgICAgIHJldHVybiAtKDEuMC0xLjApCiAKLSAgICAgICAgc2VsZi5hc3NlcnROb3RJbignVU5BUllfJywgZGlzYXNzZW1ibGUobmVnemVybykpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb3B5c2lnbigxLjAsIG5lZ3plcm8oKSkgPCAwKQorICAgICAgICBmb3IgaW5zdHIgaW4gZGlzLmdldF9pbnN0cnVjdGlvbnMoY29kZSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGluc3RyLm9wbmFtZS5zdGFydHN3aXRoKCdVTkFSWV8nKSkKIAogICAgICAgICAjIFZlcmlmeSB0aGF0IHVuZm9sZGFibGVzIGFyZSBza2lwcGVkCi0gICAgICAgIGZvciBsaW5lLCBlbGVtIGluICgKLSAgICAgICAgICAgICgnLSJhYmMiJywgIignYWJjJykiKSwgICAgICAgICAgICAgICAgICAjIHVuYXJ5IG5lZ2F0aXZlCi0gICAgICAgICAgICAoJ34iYWJjIicsICIoJ2FiYycpIiksICAgICAgICAgICAgICAgICAgIyB1bmFyeSBpbnZlcnQKKyAgICAgICAgZm9yIGxpbmUsIGVsZW0sIG9wbmFtZSBpbiAoCisgICAgICAgICAgICAoJy0iYWJjIicsICdhYmMnLCAnVU5BUllfTkVHQVRJVkUnKSwKKyAgICAgICAgICAgICgnfiJhYmMiJywgJ2FiYycsICdVTkFSWV9JTlZFUlQnKSwKICAgICAgICAgKToKLSAgICAgICAgICAgIGFzbSA9IGRpc19zaW5nbGUobGluZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZWxlbSwgYXNtLCBhc20pCi0gICAgICAgICAgICBzZWxmLmFzc2VydEluKCdVTkFSWV8nLCBhc20pCisgICAgICAgICAgICBjb2RlID0gY29tcGlsZShsaW5lLCAnJywgJ3NpbmdsZScpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluQnl0ZWNvZGUoY29kZSwgJ0xPQURfQ09OU1QnLCBlbGVtKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbkJ5dGVjb2RlKGNvZGUsIG9wbmFtZSkKIAogICAgIGRlZiB0ZXN0X2VsaW1fZXh0cmFfcmV0dXJuKHNlbGYpOgogICAgICAgICAjIFJFVFVSTiBMT0FEX0NPTlNUIE5vbmUgUkVUVVJOICAtLT4gIFJFVFVSTgogICAgICAgICBkZWYgZih4KToKICAgICAgICAgICAgIHJldHVybiB4Ci0gICAgICAgIGFzbSA9IGRpc2Fzc2VtYmxlKGYpCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ0xPQURfQ09OU1QnLCBhc20pCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJyhOb25lKScsIGFzbSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhc20uc3BsaXQoKS5jb3VudCgnUkVUVVJOX1ZBTFVFJyksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW5CeXRlY29kZShmLCAnTE9BRF9DT05TVCcsIE5vbmUpCisgICAgICAgIHJldHVybnMgPSBbaW5zdHIgZm9yIGluc3RyIGluIGRpcy5nZXRfaW5zdHJ1Y3Rpb25zKGYpCisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGluc3RyLm9wbmFtZSA9PSAnUkVUVVJOX1ZBTFVFJ10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmV0dXJucyksIDEpCiAKICAgICBkZWYgdGVzdF9lbGltX2p1bXBfdG9fcmV0dXJuKHNlbGYpOgogICAgICAgICAjIEpVTVBfRk9SV0FSRCB0byBSRVRVUk4gLS0+ICBSRVRVUk4KICAgICAgICAgZGVmIGYoY29uZCwgdHJ1ZV92YWx1ZSwgZmFsc2VfdmFsdWUpOgogICAgICAgICAgICAgcmV0dXJuIHRydWVfdmFsdWUgaWYgY29uZCBlbHNlIGZhbHNlX3ZhbHVlCi0gICAgICAgIGFzbSA9IGRpc2Fzc2VtYmxlKGYpCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ0pVTVBfRk9SV0FSRCcsIGFzbSkKLSAgICAgICAgc2VsZi5hc3NlcnROb3RJbignSlVNUF9BQlNPTFVURScsIGFzbSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhc20uc3BsaXQoKS5jb3VudCgnUkVUVVJOX1ZBTFVFJyksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW5CeXRlY29kZShmLCAnSlVNUF9GT1JXQVJEJykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbkJ5dGVjb2RlKGYsICdKVU1QX0FCU09MVVRFJykKKyAgICAgICAgcmV0dXJucyA9IFtpbnN0ciBmb3IgaW5zdHIgaW4gZGlzLmdldF9pbnN0cnVjdGlvbnMoZikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgaW5zdHIub3BuYW1lID09ICdSRVRVUk5fVkFMVUUnXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXR1cm5zKSwgMikKIAogICAgIGRlZiB0ZXN0X2VsaW1fanVtcF9hZnRlcl9yZXR1cm4xKHNlbGYpOgogICAgICAgICAjIEVsaW1pbmF0ZSBkZWFkIGNvZGU6IGp1bXBzIGltbWVkaWF0ZWx5IGFmdGVyIHJldHVybnMgY2FuJ3QgYmUgcmVhY2hlZApAQCAtMjgwLDQ4ICsyNTgsNTMgQEAKICAgICAgICAgICAgICAgICBpZiBjb25kMTogcmV0dXJuIDQKICAgICAgICAgICAgICAgICByZXR1cm4gNQogICAgICAgICAgICAgcmV0dXJuIDYKLSAgICAgICAgYXNtID0gZGlzYXNzZW1ibGUoZikKLSAgICAgICAgc2VsZi5hc3NlcnROb3RJbignSlVNUF9GT1JXQVJEJywgYXNtKQotICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdKVU1QX0FCU09MVVRFJywgYXNtKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFzbS5zcGxpdCgpLmNvdW50KCdSRVRVUk5fVkFMVUUnKSwgNikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbkJ5dGVjb2RlKGYsICdKVU1QX0ZPUldBUkQnKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluQnl0ZWNvZGUoZiwgJ0pVTVBfQUJTT0xVVEUnKQorICAgICAgICByZXR1cm5zID0gW2luc3RyIGZvciBpbnN0ciBpbiBkaXMuZ2V0X2luc3RydWN0aW9ucyhmKQorICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBpbnN0ci5vcG5hbWUgPT0gJ1JFVFVSTl9WQUxVRSddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJldHVybnMpLCA2KQogCiAgICAgZGVmIHRlc3RfZWxpbV9qdW1wX2FmdGVyX3JldHVybjIoc2VsZik6CiAgICAgICAgICMgRWxpbWluYXRlIGRlYWQgY29kZToganVtcHMgaW1tZWRpYXRlbHkgYWZ0ZXIgcmV0dXJucyBjYW4ndCBiZSByZWFjaGVkCiAgICAgICAgIGRlZiBmKGNvbmQxLCBjb25kMik6CiAgICAgICAgICAgICB3aGlsZSAxOgogICAgICAgICAgICAgICAgIGlmIGNvbmQxOiByZXR1cm4gNAotICAgICAgICBhc20gPSBkaXNhc3NlbWJsZShmKQotICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdKVU1QX0ZPUldBUkQnLCBhc20pCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW5CeXRlY29kZShmLCAnSlVNUF9GT1JXQVJEJykKICAgICAgICAgIyBUaGVyZSBzaG91bGQgYmUgb25lIGp1bXAgZm9yIHRoZSB3aGlsZSBsb29wLgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFzbS5zcGxpdCgpLmNvdW50KCdKVU1QX0FCU09MVVRFJyksIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXNtLnNwbGl0KCkuY291bnQoJ1JFVFVSTl9WQUxVRScpLCAyKQorICAgICAgICByZXR1cm5zID0gW2luc3RyIGZvciBpbnN0ciBpbiBkaXMuZ2V0X2luc3RydWN0aW9ucyhmKQorICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBpbnN0ci5vcG5hbWUgPT0gJ0pVTVBfQUJTT0xVVEUnXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXR1cm5zKSwgMSkKKyAgICAgICAgcmV0dXJucyA9IFtpbnN0ciBmb3IgaW5zdHIgaW4gZGlzLmdldF9pbnN0cnVjdGlvbnMoZikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgaW5zdHIub3BuYW1lID09ICdSRVRVUk5fVkFMVUUnXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXR1cm5zKSwgMikKIAogICAgIGRlZiB0ZXN0X21ha2VfZnVuY3Rpb25fZG9lc250X2JhaWwoc2VsZik6CiAgICAgICAgIGRlZiBmKCk6CiAgICAgICAgICAgICBkZWYgZygpLT4xKzE6CiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgcmV0dXJuIGcKLSAgICAgICAgYXNtID0gZGlzYXNzZW1ibGUoZikKLSAgICAgICAgc2VsZi5hc3NlcnROb3RJbignQklOQVJZX0FERCcsIGFzbSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbkJ5dGVjb2RlKGYsICdCSU5BUllfQUREJykKIAogICAgIGRlZiB0ZXN0X2NvbnN0YW50X2ZvbGRpbmcoc2VsZik6CiAgICAgICAgICMgSXNzdWUgIzExMjQ0OiBhZ2dyZXNzaXZlIGNvbnN0YW50IGZvbGRpbmcuCiAgICAgICAgIGV4cHJzID0gWwotICAgICAgICAgICAgIjMgKiAtNSIsCi0gICAgICAgICAgICAiLTMgKiA1IiwKLSAgICAgICAgICAgICIyICogKDMgKiA0KSIsCi0gICAgICAgICAgICAiKDIgKiAzKSAqIDQiLAotICAgICAgICAgICAgIigtMSwgMiwgMykiLAotICAgICAgICAgICAgIigxLCAtMiwgMykiLAotICAgICAgICAgICAgIigxLCAyLCAtMykiLAotICAgICAgICAgICAgIigxLCAyLCAtMykgKiA2IiwKLSAgICAgICAgICAgICJsYW1iZGEgeDogeCBpbiB7KDMgKiAtNSkgKyAoLTEgLSA2KSwgKDEsIC0yLCAzKSAqIDIsIE5vbmV9IiwKKyAgICAgICAgICAgICczICogLTUnLAorICAgICAgICAgICAgJy0zICogNScsCisgICAgICAgICAgICAnMiAqICgzICogNCknLAorICAgICAgICAgICAgJygyICogMykgKiA0JywKKyAgICAgICAgICAgICcoLTEsIDIsIDMpJywKKyAgICAgICAgICAgICcoMSwgLTIsIDMpJywKKyAgICAgICAgICAgICcoMSwgMiwgLTMpJywKKyAgICAgICAgICAgICcoMSwgMiwgLTMpICogNicsCisgICAgICAgICAgICAnbGFtYmRhIHg6IHggaW4geygzICogLTUpICsgKC0xIC0gNiksICgxLCAtMiwgMykgKiAyLCBOb25lfScsCiAgICAgICAgIF0KICAgICAgICAgZm9yIGUgaW4gZXhwcnM6Ci0gICAgICAgICAgICBhc20gPSBkaXNfc2luZ2xlKGUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdVTkFSWV8nLCBhc20sIGUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdCSU5BUllfJywgYXNtLCBlKQotICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbignQlVJTERfJywgYXNtLCBlKQorICAgICAgICAgICAgY29kZSA9IGNvbXBpbGUoZSwgJycsICdzaW5nbGUnKQorICAgICAgICAgICAgZm9yIGluc3RyIGluIGRpcy5nZXRfaW5zdHJ1Y3Rpb25zKGNvZGUpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW5zdHIub3BuYW1lLnN0YXJ0c3dpdGgoJ1VOQVJZXycpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW5zdHIub3BuYW1lLnN0YXJ0c3dpdGgoJ0JJTkFSWV8nKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGluc3RyLm9wbmFtZS5zdGFydHN3aXRoKCdCVUlMRF8nKSkKKwogCiBjbGFzcyBUZXN0QnVnbGV0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKQEAgLTM0Myw3ICszMjYsNyBAQAogICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KCp0ZXN0X2NsYXNzZXMpCiAKICAgICAjIHZlcmlmeSByZWZlcmVuY2UgY291bnRpbmcKLSAgICBpZiB2ZXJib3NlIGFuZCBoYXNhdHRyKHN5cywgImdldHRvdGFscmVmY291bnQiKToKKyAgICBpZiB2ZXJib3NlIGFuZCBoYXNhdHRyKHN5cywgJ2dldHRvdGFscmVmY291bnQnKToKICAgICAgICAgaW1wb3J0IGdjCiAgICAgICAgIGNvdW50cyA9IFtOb25lXSAqIDUKICAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKGNvdW50cykpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wZXAyNDcucHkgYi9MaWIvdGVzdC90ZXN0X3BlcDI0Ny5weQppbmRleCA3ZjEwNDcyLi5iODVhMjZhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3BlcDI0Ny5weQorKysgYi9MaWIvdGVzdC90ZXN0X3BlcDI0Ny5weQpAQCAtMTUsMTIgKzE1LDE0IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtb2R1bGUuZGlnZXN0X3NpemUgaXMgTm9uZSBvciBtb2R1bGUuZGlnZXN0X3NpemUgPiAwKQogICAgICAgICBzZWxmLmNoZWNrX29iamVjdChtb2R1bGUubmV3LCBtb2R1bGUuZGlnZXN0X3NpemUsIGtleSkKIAotICAgIGRlZiBjaGVja19vYmplY3Qoc2VsZiwgY2xzLCBkaWdlc3Rfc2l6ZSwga2V5KToKKyAgICBkZWYgY2hlY2tfb2JqZWN0KHNlbGYsIGNscywgZGlnZXN0X3NpemUsIGtleSwgZGlnZXN0bW9kPU5vbmUpOgogICAgICAgICBpZiBrZXkgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBvYmoxID0gY2xzKGtleSkKLSAgICAgICAgICAgIG9iajIgPSBjbHMoa2V5LCBiJ3N0cmluZycpCi0gICAgICAgICAgICBoMSA9IGNscyhrZXksIGInc3RyaW5nJykuZGlnZXN0KCkKLSAgICAgICAgICAgIG9iajMgPSBjbHMoa2V5KQorICAgICAgICAgICAgaWYgZGlnZXN0bW9kIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgZGlnZXN0bW9kID0gbWQ1CisgICAgICAgICAgICBvYmoxID0gY2xzKGtleSwgZGlnZXN0bW9kPWRpZ2VzdG1vZCkKKyAgICAgICAgICAgIG9iajIgPSBjbHMoa2V5LCBiJ3N0cmluZycsIGRpZ2VzdG1vZD1kaWdlc3Rtb2QpCisgICAgICAgICAgICBoMSA9IGNscyhrZXksIGInc3RyaW5nJywgZGlnZXN0bW9kPWRpZ2VzdG1vZCkuZGlnZXN0KCkKKyAgICAgICAgICAgIG9iajMgPSBjbHMoa2V5LCBkaWdlc3Rtb2Q9ZGlnZXN0bW9kKQogICAgICAgICAgICAgb2JqMy51cGRhdGUoYidzdHJpbmcnKQogICAgICAgICAgICAgaDIgPSBvYmozLmRpZ2VzdCgpCiAgICAgICAgIGVsc2U6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3BlcDI2My5weSBiL0xpYi90ZXN0L3Rlc3RfcGVwMjYzLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMjRhZTM4Ni4uMDAwMDAwMAotLS0gYS9MaWIvdGVzdC90ZXN0X3BlcDI2My5weQorKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLSMgLSotIGNvZGluZzoga29pOC1yIC0qLQotCi1pbXBvcnQgdW5pdHRlc3QKLWZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAotCi1jbGFzcyBQRVAyNjNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICAgIGRlZiB0ZXN0X3BlcDI2MyhzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgICAgICAgICLwydTPziIuZW5jb2RlKCJ1dGYtOCIpLAotICAgICAgICAgICAgYidceGQwXHg5Zlx4ZDBceGI4XHhkMVx4ODJceGQwXHhiZVx4ZDBceGJkJwotICAgICAgICApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAgICAgICAiXPAiLmVuY29kZSgidXRmLTgiKSwKLSAgICAgICAgICAgIGInXFxceGQwXHg5ZicKLSAgICAgICAgKQotCi0gICAgZGVmIHRlc3RfY29tcGlsZXN0cmluZyhzZWxmKToKLSAgICAgICAgIyBzZWUgIzE4ODIKLSAgICAgICAgYyA9IGNvbXBpbGUoYiJcbiMgY29kaW5nOiB1dGYtOFxudSA9ICdceGMzXHhiMydcbiIsICJkdW1teSIsICJleGVjIikKLSAgICAgICAgZCA9IHt9Ci0gICAgICAgIGV4ZWMoYywgZCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkWyd1J10sICdceGYzJykKLQotICAgIGRlZiB0ZXN0X2lzc3VlMjMwMShzZWxmKToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgY29tcGlsZShiIiMgY29kaW5nOiBjcDkzMlxucHJpbnQgJ1x4OTRceDRlJyIsICJkdW1teSIsICJleGVjIikKLSAgICAgICAgZXhjZXB0IFN5bnRheEVycm9yIGFzIHY6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHYudGV4dCwgInByaW50ICdcdTVlNzQnXG4iKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5mYWlsKCkKLQotICAgIGRlZiB0ZXN0X2lzc3VlNDYyNihzZWxmKToKLSAgICAgICAgYyA9IGNvbXBpbGUoIiMgY29kaW5nPWxhdGluLTFcblx1MDBjNiA9ICdcdTAwYzYnIiwgImR1bW15IiwgImV4ZWMiKQotICAgICAgICBkID0ge30KLSAgICAgICAgZXhlYyhjLCBkKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbJ1x4YzYnXSwgJ1x4YzYnKQotCi0gICAgZGVmIHRlc3RfaXNzdWUzMjk3KHNlbGYpOgotICAgICAgICBjID0gY29tcGlsZSgiYSwgYiA9ICdcVTAwMDEwMTBGJywgJ1xcVTAwMDEwMTBGJyIsICJkdW1teSIsICJleGVjIikKLSAgICAgICAgZCA9IHt9Ci0gICAgICAgIGV4ZWMoYywgZCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkWydhJ10sIGRbJ2InXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZFsnYSddKSwgbGVuKGRbJ2InXSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXNjaWkoZFsnYSddKSwgYXNjaWkoZFsnYiddKSkKLQotICAgIGRlZiB0ZXN0X2lzc3VlNzgyMChzZWxmKToKLSAgICAgICAgIyBFbnN1cmUgdGhhdCBjaGVja19ib20oKSByZXN0b3JlcyBhbGwgYnl0ZXMgaW4gdGhlIHJpZ2h0IG9yZGVyIGlmCi0gICAgICAgICMgY2hlY2tfYm9tKCkgZmFpbHMgaW4gcHlkZWJ1ZyBtb2RlOiBhIGJ1ZmZlciBzdGFydHMgd2l0aCB0aGUgZmlyc3QKLSAgICAgICAgIyBieXRlIG9mIGEgdmFsaWQgQk9NLCBidXQgbmV4dCBieXRlcyBhcmUgZGlmZmVyZW50Ci0KLSAgICAgICAgIyBvbmUgYnl0ZSBpbiBjb21tb24gd2l0aCB0aGUgVVRGLTE2LUxFIEJPTQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvciwgZXZhbCwgYidceGZmXHgyMCcpCi0KLSAgICAgICAgIyB0d28gYnl0ZXMgaW4gY29tbW9uIHdpdGggdGhlIFVURi04IEJPTQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvciwgZXZhbCwgYidceGVmXHhiYlx4MjAnKQotCi0gICAgZGVmIHRlc3RfZXJyb3JfbWVzc2FnZShzZWxmKToKLSAgICAgICAgY29tcGlsZShiJyMgLSotIGNvZGluZzogaXNvLTg4NTktMTUgLSotXG4nLCAnZHVtbXknLCAnZXhlYycpCi0gICAgICAgIGNvbXBpbGUoYidceGVmXHhiYlx4YmZcbicsICdkdW1teScsICdleGVjJykKLSAgICAgICAgY29tcGlsZShiJ1x4ZWZceGJiXHhiZiMgLSotIGNvZGluZzogdXRmLTggLSotXG4nLCAnZHVtbXknLCAnZXhlYycpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChTeW50YXhFcnJvciwgJ2Zha2UnKToKLSAgICAgICAgICAgIGNvbXBpbGUoYicjIC0qLSBjb2Rpbmc6IGZha2UgLSotXG4nLCAnZHVtbXknLCAnZXhlYycpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChTeW50YXhFcnJvciwgJ2lzby04ODU5LTE1Jyk6Ci0gICAgICAgICAgICBjb21waWxlKGInXHhlZlx4YmJceGJmIyAtKi0gY29kaW5nOiBpc28tODg1OS0xNSAtKi1cbicsCi0gICAgICAgICAgICAgICAgICAgICdkdW1teScsICdleGVjJykKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFN5bnRheEVycm9yLCAnQk9NJyk6Ci0gICAgICAgICAgICBjb21waWxlKGInXHhlZlx4YmJceGJmIyAtKi0gY29kaW5nOiBpc28tODg1OS0xNSAtKi1cbicsCi0gICAgICAgICAgICAgICAgICAgICdkdW1teScsICdleGVjJykKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFN5bnRheEVycm9yLCAnZmFrZScpOgotICAgICAgICAgICAgY29tcGlsZShiJ1x4ZWZceGJiXHhiZiMgLSotIGNvZGluZzogZmFrZSAtKi1cbicsICdkdW1teScsICdleGVjJykKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFN5bnRheEVycm9yLCAnQk9NJyk6Ci0gICAgICAgICAgICBjb21waWxlKGInXHhlZlx4YmJceGJmIyAtKi0gY29kaW5nOiBmYWtlIC0qLVxuJywgJ2R1bW15JywgJ2V4ZWMnKQotCi0KLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChQRVAyNjNUZXN0KQotCi1pZiBfX25hbWVfXz09Il9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wZXAyNzcucHkgYi9MaWIvdGVzdC90ZXN0X3BlcDI3Ny5weQppbmRleCA0YjE2Y2JiLi45OGM3MTZiIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3BlcDI3Ny5weQorKysgYi9MaWIvdGVzdC90ZXN0X3BlcDI3Ny5weQpAQCAtNTYsMTcgKzU2LDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlVuaWNvZGUtZnJpZW5kbHkgZmlsZXN5c3RlbSBlbmNvZGluZyIpCiAKIAotIyBEZXN0cm95IGRpcmVjdG9yeSBkaXJuYW1lIGFuZCBhbGwgZmlsZXMgdW5kZXIgaXQsIHRvIG9uZSBsZXZlbC4KLWRlZiBkZWx0cmVlKGRpcm5hbWUpOgotICAgICMgRG9uJ3QgaGlkZSBsZWdpdGltYXRlIGVycm9yczogIGlmIG9uZSBvZiB0aGVzZSBzdWNrZXJzIGV4aXN0cywgaXQncwotICAgICMgYW4gZXJyb3IgaWYgd2UgY2FuJ3QgcmVtb3ZlIGl0LgotICAgIGlmIG9zLnBhdGguZXhpc3RzKGRpcm5hbWUpOgotICAgICAgICAjIG11c3QgcGFzcyB1bmljb2RlIHRvIG9zLmxpc3RkaXIoKSBzbyB3ZSBnZXQgYmFjayB1bmljb2RlIHJlc3VsdHMuCi0gICAgICAgIGZvciBmbmFtZSBpbiBvcy5saXN0ZGlyKHN0cihkaXJuYW1lKSk6Ci0gICAgICAgICAgICBvcy51bmxpbmsob3MucGF0aC5qb2luKGRpcm5hbWUsIGZuYW1lKSkKLSAgICAgICAgb3Mucm1kaXIoZGlybmFtZSkKLQotCiBjbGFzcyBVbmljb2RlRmlsZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBmaWxlcyA9IHNldChmaWxlbmFtZXMpCiAgICAgbm9ybWFsX2Zvcm0gPSBOb25lCkBAIC03Niw2ICs2NSw4IEBACiAgICAgICAgICAgICBvcy5ta2RpcihzdXBwb3J0LlRFU1RGTikKICAgICAgICAgZXhjZXB0IEZpbGVFeGlzdHNFcnJvcjoKICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHN1cHBvcnQucm10cmVlLCBzdXBwb3J0LlRFU1RGTikKKwogICAgICAgICBmaWxlcyA9IHNldCgpCiAgICAgICAgIGZvciBuYW1lIGluIHNlbGYuZmlsZXM6CiAgICAgICAgICAgICBuYW1lID0gb3MucGF0aC5qb2luKHN1cHBvcnQuVEVTVEZOLCBzZWxmLm5vcm0obmFtZSkpCkBAIC04NSw5ICs3Niw2IEBACiAgICAgICAgICAgICBmaWxlcy5hZGQobmFtZSkKICAgICAgICAgc2VsZi5maWxlcyA9IGZpbGVzCiAKLSAgICBkZWYgdGVhckRvd24oc2VsZik6Ci0gICAgICAgIGRlbHRyZWUoc3VwcG9ydC5URVNURk4pCi0KICAgICBkZWYgbm9ybShzZWxmLCBzKToKICAgICAgICAgaWYgc2VsZi5ub3JtYWxfZm9ybToKICAgICAgICAgICAgIHJldHVybiBub3JtYWxpemUoc2VsZi5ub3JtYWxfZm9ybSwgcykKQEAgLTk5LDEwICs4Nyw2IEBACiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoZXhwZWN0ZWRfZXhjZXB0aW9uKSBhcyBjOgogICAgICAgICAgICAgZm4oZmlsZW5hbWUpCiAgICAgICAgIGV4Y19maWxlbmFtZSA9IGMuZXhjZXB0aW9uLmZpbGVuYW1lCi0gICAgICAgICMgbGlzdGRpciBtYXkgYXBwZW5kIGEgd2lsZGNhcmQgdG8gdGhlIGZpbGVuYW1lCi0gICAgICAgIGlmIGZuIGlzIG9zLmxpc3RkaXIgYW5kIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgotICAgICAgICAgICAgZXhjX2ZpbGVuYW1lLCBfLCB3aWxkY2FyZCA9IGV4Y19maWxlbmFtZS5ycGFydGl0aW9uKG9zLnNlcCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod2lsZGNhcmQsICcqLionKQogICAgICAgICBpZiBjaGVja19maWxlbmFtZToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhjX2ZpbGVuYW1lLCBmaWxlbmFtZSwgIkZ1bmN0aW9uICclcyglYSkgZmFpbGVkICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndpdGggYmFkIGZpbGVuYW1lIGluIHRoZSBleGNlcHRpb246ICVhIiAlCkBAIC0xNzQsMTcgKzE1OCwxMSBAQAogICAgIGRlZiB0ZXN0X2RpcmVjdG9yeShzZWxmKToKICAgICAgICAgZGlybmFtZSA9IG9zLnBhdGguam9pbihzdXBwb3J0LlRFU1RGTiwgJ0dyXHhmY1x4ZGYtXHU2NmU4XHU2NmU5XHU2NmViJykKICAgICAgICAgZmlsZW5hbWUgPSAnXHhkZi1cdTY2ZThcdTY2ZTlcdTY2ZWInCi0gICAgICAgIG9sZHdkID0gb3MuZ2V0Y3dkKCkKLSAgICAgICAgb3MubWtkaXIoZGlybmFtZSkKLSAgICAgICAgb3MuY2hkaXIoZGlybmFtZSkKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIHN1cHBvcnQudGVtcF9jd2QoZGlybmFtZSk6CiAgICAgICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICd3YicpIGFzIGY6CiAgICAgICAgICAgICAgICAgZi53cml0ZSgoZmlsZW5hbWUgKyAnXG4nKS5lbmNvZGUoInV0Zi04IikpCiAgICAgICAgICAgICBvcy5hY2Nlc3MoZmlsZW5hbWUsb3MuUl9PSykKICAgICAgICAgICAgIG9zLnJlbW92ZShmaWxlbmFtZSkKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIG9zLmNoZGlyKG9sZHdkKQotICAgICAgICAgICAgb3Mucm1kaXIoZGlybmFtZSkKIAogCiBjbGFzcyBVbmljb2RlTkZDRmlsZVRlc3RzKFVuaWNvZGVGaWxlVGVzdHMpOgpAQCAtMjA0LDE2ICsxODIsMTMgQEAKIAogCiBkZWYgdGVzdF9tYWluKCk6Ci0gICAgdHJ5OgotICAgICAgICBzdXBwb3J0LnJ1bl91bml0dGVzdCgKLSAgICAgICAgICAgIFVuaWNvZGVGaWxlVGVzdHMsCi0gICAgICAgICAgICBVbmljb2RlTkZDRmlsZVRlc3RzLAotICAgICAgICAgICAgVW5pY29kZU5GREZpbGVUZXN0cywKLSAgICAgICAgICAgIFVuaWNvZGVORktDRmlsZVRlc3RzLAotICAgICAgICAgICAgVW5pY29kZU5GS0RGaWxlVGVzdHMsCi0gICAgICAgICkKLSAgICBmaW5hbGx5OgotICAgICAgICBkZWx0cmVlKHN1cHBvcnQuVEVTVEZOKQorICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KAorICAgICAgICBVbmljb2RlRmlsZVRlc3RzLAorICAgICAgICBVbmljb2RlTkZDRmlsZVRlc3RzLAorICAgICAgICBVbmljb2RlTkZERmlsZVRlc3RzLAorICAgICAgICBVbmljb2RlTkZLQ0ZpbGVUZXN0cywKKyAgICAgICAgVW5pY29kZU5GS0RGaWxlVGVzdHMsCisgICAgKQogCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3BlcDI5Mi5weSBiL0xpYi90ZXN0L3Rlc3RfcGVwMjkyLnB5CmluZGV4IDZkYThkMmUuLmZkNTI1NmMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcGVwMjkyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcGVwMjkyLnB5CkBAIC0yNiw2ICsyNiw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5zdWJzdGl0dXRlKGRpY3Qod2hvPSd0aW0nLCB3aGF0PSdoYW0nKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RpbSBsaWtlcyB0byBlYXQgYSBiYWcgb2YgaGFtIHdvcnRoICQxMDAnKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgcy5zdWJzdGl0dXRlLCBkaWN0KHdobz0ndGltJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgVGVtcGxhdGUuc3Vic3RpdHV0ZSkKIAogICAgIGRlZiB0ZXN0X3JlZ3VsYXJfdGVtcGxhdGVzX3dpdGhfYnJhY2VzKHNlbGYpOgogICAgICAgICBzID0gVGVtcGxhdGUoJyR3aG8gbGlrZXMgJHt3aGF0fSBmb3IgJHttZWFsfScpCkBAIC0xOTgsNiArMTk5LDkgQEAKICAgICAgICAgZXEocy5zdWJzdGl0dXRlKGRpY3QobWFwcGluZz0nb25lJyksIG1hcHBpbmc9J3R3bycpLAogICAgICAgICAgICAndGhlIG1hcHBpbmcgaXMgdHdvJykKIAorICAgICAgICBzID0gVGVtcGxhdGUoJ3RoZSBzZWxmIGlzICRzZWxmJykKKyAgICAgICAgZXEocy5zdWJzdGl0dXRlKHNlbGY9J2Jvem8nKSwgJ3RoZSBzZWxmIGlzIGJvem8nKQorCiAgICAgZGVmIHRlc3Rfa2V5d29yZF9hcmd1bWVudHNfc2FmZShzZWxmKToKICAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCiAgICAgICAgIHJhaXNlcyA9IHNlbGYuYXNzZXJ0UmFpc2VzCkBAIC0yMTYsNiArMjIwLDkgQEAKICAgICAgICAgcmFpc2VzKFR5cGVFcnJvciwgcy5zdWJzdGl0dXRlLCBkLCB7fSkKICAgICAgICAgcmFpc2VzKFR5cGVFcnJvciwgcy5zYWZlX3N1YnN0aXR1dGUsIGQsIHt9KQogCisgICAgICAgIHMgPSBUZW1wbGF0ZSgndGhlIHNlbGYgaXMgJHNlbGYnKQorICAgICAgICBlcShzLnNhZmVfc3Vic3RpdHV0ZShzZWxmPSdib3pvJyksICd0aGUgc2VsZiBpcyBib3pvJykKKwogICAgIGRlZiB0ZXN0X2RlbGltaXRlcl9vdmVycmlkZShzZWxmKToKICAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCiAgICAgICAgIHJhaXNlcyA9IHNlbGYuYXNzZXJ0UmFpc2VzCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3BlcDMxNTEucHkgYi9MaWIvdGVzdC90ZXN0X3BlcDMxNTEucHkKaW5kZXggMjc5MmMxMC4uN2Q0YTVkOCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9wZXAzMTUxLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcGVwMzE1MS5weQpAQCAtMTU3LDggKzE1Nyw2IEBACiAgICAgICAgIGUuY2hhcmFjdGVyc193cml0dGVuID0gNQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuY2hhcmFjdGVyc193cml0dGVuLCA1KQogCi0gICAgIyBYWFggVk1TRXJyb3Igbm90IHRlc3RlZAotCiAKIGNsYXNzIEV4cGxpY2l0U3ViY2xhc3NpbmdUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wZXAzNTIucHkgYi9MaWIvdGVzdC90ZXN0X3BlcDM1Mi5weQppbmRleCA1NThjZGI1Li43Yzk4YzQ2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3BlcDM1Mi5weQorKysgYi9MaWIvdGVzdC90ZXN0X3BlcDM1Mi5weQpAQCAtMSw3ICsxLDYgQEAKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IGJ1aWx0aW5zCiBpbXBvcnQgd2FybmluZ3MKLWZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKIGltcG9ydCBvcwogZnJvbSBwbGF0Zm9ybSBpbXBvcnQgc3lzdGVtIGFzIHBsYXRmb3JtX3N5c3RlbQogCkBAIC0xODAsOCArMTc5LDYgQEAKICAgICAgICAgIyBDYXRjaGluZyBhIHN0cmluZyBpcyBiYWQuCiAgICAgICAgIHNlbGYuY2F0Y2hfZmFpbHMoInNwYW0iKQogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgcnVuX3VuaXR0ZXN0KEV4Y2VwdGlvbkNsYXNzVGVzdHMsIFVzYWdlVGVzdHMpCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcGVwMzgwLnB5IGIvTGliL3Rlc3QvdGVzdF9wZXAzODAucHkKaW5kZXggNGE0M2I3ZC4uNjkxOTRkZiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9wZXAzODAucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9wZXAzODAucHkKQEAgLTk5Myw2ICs5OTMsMjUgQEAKICAgICAgICAgICAgIGRlbCBpbm5lcl9nZW4KICAgICAgICAgICAgIGdjX2NvbGxlY3QoKQogCisgICAgZGVmIHRlc3Rfc2VuZF90dXBsZV93aXRoX2N1c3RvbV9nZW5lcmF0b3Ioc2VsZik6CisgICAgICAgICMgU2VlIGlzc3VlICMyMTIwOS4KKyAgICAgICAgY2xhc3MgTXlHZW46CisgICAgICAgICAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKKyAgICAgICAgICAgIGRlZiBfX25leHRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gNDIKKyAgICAgICAgICAgIGRlZiBzZW5kKHNlbGYsIHdoYXQpOgorICAgICAgICAgICAgICAgIG5vbmxvY2FsIHYKKyAgICAgICAgICAgICAgICB2ID0gd2hhdAorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIGRlZiBvdXRlcigpOgorICAgICAgICAgICAgdiA9IHlpZWxkIGZyb20gTXlHZW4oKQorICAgICAgICBnID0gb3V0ZXIoKQorICAgICAgICBuZXh0KGcpCisgICAgICAgIHYgPSBOb25lCisgICAgICAgIGcuc2VuZCgoMSwgMiwgMywgNCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodiwgKDEsIDIsIDMsIDQpKQorCiAKIGRlZiB0ZXN0X21haW4oKToKICAgICBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcGlja2xlLnB5IGIvTGliL3Rlc3QvdGVzdF9waWNrbGUucHkKaW5kZXggZmJlOTZhYy4uZjZkOWNjMCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9waWNrbGUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9waWNrbGUucHkKQEAgLTEsOSArMSwxNiBAQAorZnJvbSBfY29tcGF0X3BpY2tsZSBpbXBvcnQgKElNUE9SVF9NQVBQSU5HLCBSRVZFUlNFX0lNUE9SVF9NQVBQSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BTUVfTUFQUElORywgUkVWRVJTRV9OQU1FX01BUFBJTkcpCitpbXBvcnQgYnVpbHRpbnMKIGltcG9ydCBwaWNrbGUKIGltcG9ydCBpbwogaW1wb3J0IGNvbGxlY3Rpb25zCitpbXBvcnQgc3RydWN0CitpbXBvcnQgc3lzCiAKK2ltcG9ydCB1bml0dGVzdAogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiAKK2Zyb20gdGVzdC5waWNrbGV0ZXN0ZXIgaW1wb3J0IEFic3RyYWN0VW5waWNrbGVUZXN0cwogZnJvbSB0ZXN0LnBpY2tsZXRlc3RlciBpbXBvcnQgQWJzdHJhY3RQaWNrbGVUZXN0cwogZnJvbSB0ZXN0LnBpY2tsZXRlc3RlciBpbXBvcnQgQWJzdHJhY3RQaWNrbGVNb2R1bGVUZXN0cwogZnJvbSB0ZXN0LnBpY2tsZXRlc3RlciBpbXBvcnQgQWJzdHJhY3RQZXJzaXN0ZW50UGlja2xlclRlc3RzCkBAIC0yMiw2ICsyOSwyMiBAQAogICAgIHBhc3MKIAogCitjbGFzcyBQeVVucGlja2xlclRlc3RzKEFic3RyYWN0VW5waWNrbGVUZXN0cyk6CisKKyAgICB1bnBpY2tsZXIgPSBwaWNrbGUuX1VucGlja2xlcgorICAgIGJhZF9zdGFja19lcnJvcnMgPSAoSW5kZXhFcnJvciwpCisgICAgYmFkX21hcmtfZXJyb3JzID0gKEluZGV4RXJyb3IsIHBpY2tsZS5VbnBpY2tsaW5nRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgIFR5cGVFcnJvciwgQXR0cmlidXRlRXJyb3IsIEVPRkVycm9yKQorICAgIHRydW5jYXRlZF9lcnJvcnMgPSAocGlja2xlLlVucGlja2xpbmdFcnJvciwgRU9GRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICBBdHRyaWJ1dGVFcnJvciwgVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdC5lcnJvciwgSW5kZXhFcnJvciwgSW1wb3J0RXJyb3IpCisKKyAgICBkZWYgbG9hZHMoc2VsZiwgYnVmLCAqKmt3ZHMpOgorICAgICAgICBmID0gaW8uQnl0ZXNJTyhidWYpCisgICAgICAgIHUgPSBzZWxmLnVucGlja2xlcihmLCAqKmt3ZHMpCisgICAgICAgIHJldHVybiB1LmxvYWQoKQorCisKIGNsYXNzIFB5UGlja2xlclRlc3RzKEFic3RyYWN0UGlja2xlVGVzdHMpOgogCiAgICAgcGlja2xlciA9IHBpY2tsZS5fUGlja2xlcgpAQCAtNDAsMTAgKzYzLDE3IEBACiAgICAgICAgIHJldHVybiB1LmxvYWQoKQogCiAKLWNsYXNzIEluTWVtb3J5UGlja2xlVGVzdHMoQWJzdHJhY3RQaWNrbGVUZXN0cywgQmlnbWVtUGlja2xlVGVzdHMpOgorY2xhc3MgSW5NZW1vcnlQaWNrbGVUZXN0cyhBYnN0cmFjdFBpY2tsZVRlc3RzLCBBYnN0cmFjdFVucGlja2xlVGVzdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEJpZ21lbVBpY2tsZVRlc3RzKToKIAogICAgIHBpY2tsZXIgPSBwaWNrbGUuX1BpY2tsZXIKICAgICB1bnBpY2tsZXIgPSBwaWNrbGUuX1VucGlja2xlcgorICAgIGJhZF9zdGFja19lcnJvcnMgPSAocGlja2xlLlVucGlja2xpbmdFcnJvciwgSW5kZXhFcnJvcikKKyAgICBiYWRfbWFya19lcnJvcnMgPSAocGlja2xlLlVucGlja2xpbmdFcnJvciwgSW5kZXhFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgVHlwZUVycm9yLCBBdHRyaWJ1dGVFcnJvciwgRU9GRXJyb3IpCisgICAgdHJ1bmNhdGVkX2Vycm9ycyA9IChwaWNrbGUuVW5waWNrbGluZ0Vycm9yLCBFT0ZFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgIEF0dHJpYnV0ZUVycm9yLCBWYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0LmVycm9yLCBJbmRleEVycm9yLCBJbXBvcnRFcnJvcikKIAogICAgIGRlZiBkdW1wcyhzZWxmLCBhcmcsIHByb3RvY29sPU5vbmUpOgogICAgICAgICByZXR1cm4gcGlja2xlLmR1bXBzKGFyZywgcHJvdG9jb2wpCkBAIC04MywxOCArMTEzLDI5IEBACiAKIAogY2xhc3MgUHlEaXNwYXRjaFRhYmxlVGVzdHMoQWJzdHJhY3REaXNwYXRjaFRhYmxlVGVzdHMpOgorCiAgICAgcGlja2xlcl9jbGFzcyA9IHBpY2tsZS5fUGlja2xlcgorCiAgICAgZGVmIGdldF9kaXNwYXRjaF90YWJsZShzZWxmKToKICAgICAgICAgcmV0dXJuIHBpY2tsZS5kaXNwYXRjaF90YWJsZS5jb3B5KCkKIAogCiBjbGFzcyBQeUNoYWluRGlzcGF0Y2hUYWJsZVRlc3RzKEFic3RyYWN0RGlzcGF0Y2hUYWJsZVRlc3RzKToKKwogICAgIHBpY2tsZXJfY2xhc3MgPSBwaWNrbGUuX1BpY2tsZXIKKwogICAgIGRlZiBnZXRfZGlzcGF0Y2hfdGFibGUoc2VsZik6CiAgICAgICAgIHJldHVybiBjb2xsZWN0aW9ucy5DaGFpbk1hcCh7fSwgcGlja2xlLmRpc3BhdGNoX3RhYmxlKQogCiAKIGlmIGhhc19jX2ltcGxlbWVudGF0aW9uOgorICAgIGNsYXNzIENVbnBpY2tsZXJUZXN0cyhQeVVucGlja2xlclRlc3RzKToKKyAgICAgICAgdW5waWNrbGVyID0gX3BpY2tsZS5VbnBpY2tsZXIKKyAgICAgICAgYmFkX3N0YWNrX2Vycm9ycyA9IChwaWNrbGUuVW5waWNrbGluZ0Vycm9yLCkKKyAgICAgICAgYmFkX21hcmtfZXJyb3JzID0gKEVPRkVycm9yLCkKKyAgICAgICAgdHJ1bmNhdGVkX2Vycm9ycyA9IChwaWNrbGUuVW5waWNrbGluZ0Vycm9yLCBFT0ZFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdHRyaWJ1dGVFcnJvciwgVmFsdWVFcnJvcikKKwogICAgIGNsYXNzIENQaWNrbGVyVGVzdHMoUHlQaWNrbGVyVGVzdHMpOgogICAgICAgICBwaWNrbGVyID0gX3BpY2tsZS5QaWNrbGVyCiAgICAgICAgIHVucGlja2xlciA9IF9waWNrbGUuVW5waWNrbGVyCkBAIC0xMzQsMTcgKzE3NSwyNDUgQEAKICAgICAgICAgZGVmIGdldF9kaXNwYXRjaF90YWJsZShzZWxmKToKICAgICAgICAgICAgIHJldHVybiBjb2xsZWN0aW9ucy5DaGFpbk1hcCh7fSwgcGlja2xlLmRpc3BhdGNoX3RhYmxlKQogCisgICAgQHN1cHBvcnQuY3B5dGhvbl9vbmx5CisgICAgY2xhc3MgU2l6ZW9mVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICBjaGVja19zaXplb2YgPSBzdXBwb3J0LmNoZWNrX3NpemVvZgorCisgICAgICAgIGRlZiB0ZXN0X3BpY2tsZXIoc2VsZik6CisgICAgICAgICAgICBiYXNlc2l6ZSA9IHN1cHBvcnQuY2FsY29ianNpemUoJzVQMm4zaTJuM2lQJykKKyAgICAgICAgICAgIHAgPSBfcGlja2xlLlBpY2tsZXIoaW8uQnl0ZXNJTygpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmplY3QuX19zaXplb2ZfXyhwKSwgYmFzZXNpemUpCisgICAgICAgICAgICBNVF9zaXplID0gc3RydWN0LmNhbGNzaXplKCczblAwbicpCisgICAgICAgICAgICBNRV9zaXplID0gc3RydWN0LmNhbGNzaXplKCdQbjBQJykKKyAgICAgICAgICAgIGNoZWNrID0gc2VsZi5jaGVja19zaXplb2YKKyAgICAgICAgICAgIGNoZWNrKHAsIGJhc2VzaXplICsKKyAgICAgICAgICAgICAgICBNVF9zaXplICsgOCAqIE1FX3NpemUgKyAgIyBNaW5pbWFsIG1lbW8gdGFibGUgc2l6ZS4KKyAgICAgICAgICAgICAgICBzeXMuZ2V0c2l6ZW9mKGIneCcqNDA5NikpICAjIE1pbmltYWwgd3JpdGUgYnVmZmVyIHNpemUuCisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSg2KToKKyAgICAgICAgICAgICAgICBwLmR1bXAoY2hyKGkpKQorICAgICAgICAgICAgY2hlY2socCwgYmFzZXNpemUgKworICAgICAgICAgICAgICAgIE1UX3NpemUgKyAzMiAqIE1FX3NpemUgKyAgIyBTaXplIG9mIG1lbW8gdGFibGUgcmVxdWlyZWQgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgc2F2ZSByZWZlcmVuY2VzIHRvIDYgb2JqZWN0cy4KKyAgICAgICAgICAgICAgICAwKSAgIyBXcml0ZSBidWZmZXIgaXMgY2xlYXJlZCBhZnRlciBldmVyeSBkdW1wKCkuCisKKyAgICAgICAgZGVmIHRlc3RfdW5waWNrbGVyKHNlbGYpOgorICAgICAgICAgICAgYmFzZXNpemUgPSBzdXBwb3J0LmNhbGNvYmpzaXplKCcyUG4yUCAyUDJuMmk1UCAyUDNuNlAybjJpJykKKyAgICAgICAgICAgIHVucGlja2xlciA9IF9waWNrbGUuVW5waWNrbGVyCisgICAgICAgICAgICBQID0gc3RydWN0LmNhbGNzaXplKCdQJykgICMgU2l6ZSBvZiBtZW1vIHRhYmxlIGVudHJ5LgorICAgICAgICAgICAgbiA9IHN0cnVjdC5jYWxjc2l6ZSgnbicpICAjIFNpemUgb2YgbWFyayB0YWJsZSBlbnRyeS4KKyAgICAgICAgICAgIGNoZWNrID0gc2VsZi5jaGVja19zaXplb2YKKyAgICAgICAgICAgIGZvciBlbmNvZGluZyBpbiAnQVNDSUknLCAnVVRGLTE2JywgJ2xhdGluLTEnOgorICAgICAgICAgICAgICAgIGZvciBlcnJvcnMgaW4gJ3N0cmljdCcsICdyZXBsYWNlJzoKKyAgICAgICAgICAgICAgICAgICAgdSA9IHVucGlja2xlcihpby5CeXRlc0lPKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc9ZW5jb2RpbmcsIGVycm9ycz1lcnJvcnMpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqZWN0Ll9fc2l6ZW9mX18odSksIGJhc2VzaXplKQorICAgICAgICAgICAgICAgICAgICBjaGVjayh1LCBiYXNlc2l6ZSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyICogUCArICAjIE1pbmltYWwgbWVtbyB0YWJsZSBzaXplLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4oZW5jb2RpbmcpICsgMSArIGxlbihlcnJvcnMpICsgMSkKKworICAgICAgICAgICAgc3Rkc2l6ZSA9IGJhc2VzaXplICsgbGVuKCdBU0NJSScpICsgMSArIGxlbignc3RyaWN0JykgKyAxCisgICAgICAgICAgICBkZWYgY2hlY2tfdW5waWNrbGVyKGRhdGEsIG1lbW9fc2l6ZSwgbWFya3Nfc2l6ZSk6CisgICAgICAgICAgICAgICAgZHVtcCA9IHBpY2tsZS5kdW1wcyhkYXRhKQorICAgICAgICAgICAgICAgIHUgPSB1bnBpY2tsZXIoaW8uQnl0ZXNJTyhkdW1wKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nPSdBU0NJSScsIGVycm9ycz0nc3RyaWN0JykKKyAgICAgICAgICAgICAgICB1LmxvYWQoKQorICAgICAgICAgICAgICAgIGNoZWNrKHUsIHN0ZHNpemUgKyBtZW1vX3NpemUgKiBQICsgbWFya3Nfc2l6ZSAqIG4pCisKKyAgICAgICAgICAgIGNoZWNrX3VucGlja2xlcigwLCAzMiwgMCkKKyAgICAgICAgICAgICMgMjAgaXMgbWluaW1hbCBub24tZW1wdHkgbWFyayBzdGFjayBzaXplLgorICAgICAgICAgICAgY2hlY2tfdW5waWNrbGVyKFswXSAqIDEwMCwgMzIsIDIwKQorICAgICAgICAgICAgIyAxMjggaXMgbWVtbyB0YWJsZSBzaXplIHJlcXVpcmVkIHRvIHNhdmUgcmVmZXJlbmNlcyB0byAxMDAgb2JqZWN0cy4KKyAgICAgICAgICAgIGNoZWNrX3VucGlja2xlcihbY2hyKGkpIGZvciBpIGluIHJhbmdlKDEwMCldLCAxMjgsIDIwKQorICAgICAgICAgICAgZGVmIHJlY3Vyc2UoZGVlcCk6CisgICAgICAgICAgICAgICAgZGF0YSA9IDAKKyAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShkZWVwKToKKyAgICAgICAgICAgICAgICAgICAgZGF0YSA9IFtkYXRhLCBkYXRhXQorICAgICAgICAgICAgICAgIHJldHVybiBkYXRhCisgICAgICAgICAgICBjaGVja191bnBpY2tsZXIocmVjdXJzZSgwKSwgMzIsIDApCisgICAgICAgICAgICBjaGVja191bnBpY2tsZXIocmVjdXJzZSgxKSwgMzIsIDIwKQorICAgICAgICAgICAgY2hlY2tfdW5waWNrbGVyKHJlY3Vyc2UoMjApLCAzMiwgNTgpCisgICAgICAgICAgICBjaGVja191bnBpY2tsZXIocmVjdXJzZSg1MCksIDY0LCA1OCkKKyAgICAgICAgICAgIGNoZWNrX3VucGlja2xlcihyZWN1cnNlKDEwMCksIDEyOCwgMTM0KQorCisgICAgICAgICAgICB1ID0gdW5waWNrbGVyKGlvLkJ5dGVzSU8ocGlja2xlLmR1bXBzKCdhJywgMCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGluZz0nQVNDSUknLCBlcnJvcnM9J3N0cmljdCcpCisgICAgICAgICAgICB1LmxvYWQoKQorICAgICAgICAgICAgY2hlY2sodSwgc3Rkc2l6ZSArIDMyICogUCArIDIgKyAxKQorCisKK0FMVF9JTVBPUlRfTUFQUElORyA9IHsKKyAgICAoJ19lbGVtZW50dHJlZScsICd4bWwuZXRyZWUuRWxlbWVudFRyZWUnKSwKKyAgICAoJ2NQaWNrbGUnLCAncGlja2xlJyksCit9CisKK0FMVF9OQU1FX01BUFBJTkcgPSB7CisgICAgKCdfX2J1aWx0aW5fXycsICdiYXNlc3RyaW5nJywgJ2J1aWx0aW5zJywgJ3N0cicpLAorICAgICgnZXhjZXB0aW9ucycsICdTdGFuZGFyZEVycm9yJywgJ2J1aWx0aW5zJywgJ0V4Y2VwdGlvbicpLAorICAgICgnVXNlckRpY3QnLCAnVXNlckRpY3QnLCAnY29sbGVjdGlvbnMnLCAnVXNlckRpY3QnKSwKKyAgICAoJ3NvY2tldCcsICdfc29ja2V0b2JqZWN0JywgJ3NvY2tldCcsICdTb2NrZXRUeXBlJyksCit9CisKK2RlZiBtYXBwaW5nKG1vZHVsZSwgbmFtZSk6CisgICAgaWYgKG1vZHVsZSwgbmFtZSkgaW4gTkFNRV9NQVBQSU5HOgorICAgICAgICBtb2R1bGUsIG5hbWUgPSBOQU1FX01BUFBJTkdbKG1vZHVsZSwgbmFtZSldCisgICAgZWxpZiBtb2R1bGUgaW4gSU1QT1JUX01BUFBJTkc6CisgICAgICAgIG1vZHVsZSA9IElNUE9SVF9NQVBQSU5HW21vZHVsZV0KKyAgICByZXR1cm4gbW9kdWxlLCBuYW1lCisKK2RlZiByZXZlcnNlX21hcHBpbmcobW9kdWxlLCBuYW1lKToKKyAgICBpZiAobW9kdWxlLCBuYW1lKSBpbiBSRVZFUlNFX05BTUVfTUFQUElORzoKKyAgICAgICAgbW9kdWxlLCBuYW1lID0gUkVWRVJTRV9OQU1FX01BUFBJTkdbKG1vZHVsZSwgbmFtZSldCisgICAgZWxpZiBtb2R1bGUgaW4gUkVWRVJTRV9JTVBPUlRfTUFQUElORzoKKyAgICAgICAgbW9kdWxlID0gUkVWRVJTRV9JTVBPUlRfTUFQUElOR1ttb2R1bGVdCisgICAgcmV0dXJuIG1vZHVsZSwgbmFtZQorCitkZWYgZ2V0bW9kdWxlKG1vZHVsZSk6CisgICAgdHJ5OgorICAgICAgICByZXR1cm4gc3lzLm1vZHVsZXNbbW9kdWxlXQorICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgX19pbXBvcnRfXyhtb2R1bGUpCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvciBhcyBleGM6CisgICAgICAgICAgICBpZiBzdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICAgICAgcHJpbnQoIkNhbid0IGltcG9ydCBtb2R1bGUgJXI6ICVzIiAlIChtb2R1bGUsIGV4YykpCisgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcgorICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgaWYgc3VwcG9ydC52ZXJib3NlOgorICAgICAgICAgICAgICAgIHByaW50KGV4YykKKyAgICAgICAgICAgIHJhaXNlCisgICAgICAgIHJldHVybiBzeXMubW9kdWxlc1ttb2R1bGVdCisKK2RlZiBnZXRhdHRyaWJ1dGUobW9kdWxlLCBuYW1lKToKKyAgICBvYmogPSBnZXRtb2R1bGUobW9kdWxlKQorICAgIGZvciBuIGluIG5hbWUuc3BsaXQoJy4nKToKKyAgICAgICAgb2JqID0gZ2V0YXR0cihvYmosIG4pCisgICAgcmV0dXJuIG9iagorCitkZWYgZ2V0X2V4Y2VwdGlvbnMobW9kKToKKyAgICBmb3IgbmFtZSBpbiBkaXIobW9kKToKKyAgICAgICAgYXR0ciA9IGdldGF0dHIobW9kLCBuYW1lKQorICAgICAgICBpZiBpc2luc3RhbmNlKGF0dHIsIHR5cGUpIGFuZCBpc3N1YmNsYXNzKGF0dHIsIEJhc2VFeGNlcHRpb24pOgorICAgICAgICAgICAgeWllbGQgbmFtZSwgYXR0cgorCitjbGFzcyBDb21wYXRQaWNrbGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfaW1wb3J0KHNlbGYpOgorICAgICAgICBtb2R1bGVzID0gc2V0KElNUE9SVF9NQVBQSU5HLnZhbHVlcygpKQorICAgICAgICBtb2R1bGVzIHw9IHNldChSRVZFUlNFX0lNUE9SVF9NQVBQSU5HKQorICAgICAgICBtb2R1bGVzIHw9IHttb2R1bGUgZm9yIG1vZHVsZSwgbmFtZSBpbiBSRVZFUlNFX05BTUVfTUFQUElOR30KKyAgICAgICAgbW9kdWxlcyB8PSB7bW9kdWxlIGZvciBtb2R1bGUsIG5hbWUgaW4gTkFNRV9NQVBQSU5HLnZhbHVlcygpfQorICAgICAgICBmb3IgbW9kdWxlIGluIG1vZHVsZXM6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZ2V0bW9kdWxlKG1vZHVsZSkKKyAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgdGVzdF9pbXBvcnRfbWFwcGluZyhzZWxmKToKKyAgICAgICAgZm9yIG1vZHVsZTMsIG1vZHVsZTIgaW4gUkVWRVJTRV9JTVBPUlRfTUFQUElORy5pdGVtcygpOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoKG1vZHVsZTMsIG1vZHVsZTIpKToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGdldG1vZHVsZShtb2R1bGUzKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgIGlmIG1vZHVsZTNbOjFdICE9ICdfJzoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihtb2R1bGUyLCBJTVBPUlRfTUFQUElORykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChJTVBPUlRfTUFQUElOR1ttb2R1bGUyXSwgbW9kdWxlMykKKworICAgIGRlZiB0ZXN0X25hbWVfbWFwcGluZyhzZWxmKToKKyAgICAgICAgZm9yIChtb2R1bGUzLCBuYW1lMyksIChtb2R1bGUyLCBuYW1lMikgaW4gUkVWRVJTRV9OQU1FX01BUFBJTkcuaXRlbXMoKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KCgobW9kdWxlMywgbmFtZTMpLCAobW9kdWxlMiwgbmFtZTIpKSk6CisgICAgICAgICAgICAgICAgaWYgKG1vZHVsZTIsIG5hbWUyKSA9PSAoJ2V4Y2VwdGlvbnMnLCAnT1NFcnJvcicpOgorICAgICAgICAgICAgICAgICAgICBhdHRyID0gZ2V0YXR0cmlidXRlKG1vZHVsZTMsIG5hbWUzKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhhdHRyLCBPU0Vycm9yKSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBtb2R1bGUsIG5hbWUgPSBtYXBwaW5nKG1vZHVsZTIsIG5hbWUyKQorICAgICAgICAgICAgICAgICAgICBpZiBtb2R1bGUzWzoxXSAhPSAnXyc6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChtb2R1bGUsIG5hbWUpLCAobW9kdWxlMywgbmFtZTMpKQorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBhdHRyID0gZ2V0YXR0cmlidXRlKG1vZHVsZTMsIG5hbWUzKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGF0dHJpYnV0ZShtb2R1bGUsIG5hbWUpLCBhdHRyKQorCisgICAgZGVmIHRlc3RfcmV2ZXJzZV9pbXBvcnRfbWFwcGluZyhzZWxmKToKKyAgICAgICAgZm9yIG1vZHVsZTIsIG1vZHVsZTMgaW4gSU1QT1JUX01BUFBJTkcuaXRlbXMoKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KChtb2R1bGUyLCBtb2R1bGUzKSk6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBnZXRtb2R1bGUobW9kdWxlMykKKyAgICAgICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgICAgICAgICBpZiBzdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludChleGMpCisgICAgICAgICAgICAgICAgaWYgKChtb2R1bGUyLCBtb2R1bGUzKSBub3QgaW4gQUxUX0lNUE9SVF9NQVBQSU5HIGFuZAorICAgICAgICAgICAgICAgICAgICBSRVZFUlNFX0lNUE9SVF9NQVBQSU5HLmdldChtb2R1bGUzLCBOb25lKSAhPSBtb2R1bGUyKToKKyAgICAgICAgICAgICAgICAgICAgZm9yIChtMywgbjMpLCAobTIsIG4yKSBpbiBSRVZFUlNFX05BTUVfTUFQUElORy5pdGVtcygpOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1vZHVsZTMsIG1vZHVsZTIpID09IChtMywgbTIpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ05vIHJldmVyc2UgbWFwcGluZyBmcm9tICVyIHRvICVyJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vZHVsZTMsIG1vZHVsZTIpKQorICAgICAgICAgICAgICAgIG1vZHVsZSA9IFJFVkVSU0VfSU1QT1JUX01BUFBJTkcuZ2V0KG1vZHVsZTMsIG1vZHVsZTMpCisgICAgICAgICAgICAgICAgbW9kdWxlID0gSU1QT1JUX01BUFBJTkcuZ2V0KG1vZHVsZSwgbW9kdWxlKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLCBtb2R1bGUzKQorCisgICAgZGVmIHRlc3RfcmV2ZXJzZV9uYW1lX21hcHBpbmcoc2VsZik6CisgICAgICAgIGZvciAobW9kdWxlMiwgbmFtZTIpLCAobW9kdWxlMywgbmFtZTMpIGluIE5BTUVfTUFQUElORy5pdGVtcygpOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoKChtb2R1bGUyLCBuYW1lMiksIChtb2R1bGUzLCBuYW1lMykpKToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGF0dHIgPSBnZXRhdHRyaWJ1dGUobW9kdWxlMywgbmFtZTMpCisgICAgICAgICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgbW9kdWxlLCBuYW1lID0gcmV2ZXJzZV9tYXBwaW5nKG1vZHVsZTMsIG5hbWUzKQorICAgICAgICAgICAgICAgIGlmIChtb2R1bGUyLCBuYW1lMiwgbW9kdWxlMywgbmFtZTMpIG5vdCBpbiBBTFRfTkFNRV9NQVBQSU5HOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChtb2R1bGUsIG5hbWUpLCAobW9kdWxlMiwgbmFtZTIpKQorICAgICAgICAgICAgICAgIG1vZHVsZSwgbmFtZSA9IG1hcHBpbmcobW9kdWxlLCBuYW1lKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKG1vZHVsZSwgbmFtZSksIChtb2R1bGUzLCBuYW1lMykpCisKKyAgICBkZWYgdGVzdF9leGNlcHRpb25zKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hcHBpbmcoJ2V4Y2VwdGlvbnMnLCAnU3RhbmRhcmRFcnJvcicpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgnYnVpbHRpbnMnLCAnRXhjZXB0aW9uJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFwcGluZygnZXhjZXB0aW9ucycsICdFeGNlcHRpb24nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoJ2J1aWx0aW5zJywgJ0V4Y2VwdGlvbicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldmVyc2VfbWFwcGluZygnYnVpbHRpbnMnLCAnRXhjZXB0aW9uJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgKCdleGNlcHRpb25zJywgJ0V4Y2VwdGlvbicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hcHBpbmcoJ2V4Y2VwdGlvbnMnLCAnT1NFcnJvcicpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgnYnVpbHRpbnMnLCAnT1NFcnJvcicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldmVyc2VfbWFwcGluZygnYnVpbHRpbnMnLCAnT1NFcnJvcicpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgnZXhjZXB0aW9ucycsICdPU0Vycm9yJykpCisKKyAgICAgICAgZm9yIG5hbWUsIGV4YyBpbiBnZXRfZXhjZXB0aW9ucyhidWlsdGlucyk6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChuYW1lKToKKyAgICAgICAgICAgICAgICBpZiBleGMgaW4gKEJsb2NraW5nSU9FcnJvciwgUmVzb3VyY2VXYXJuaW5nKToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBpZiBleGMgaXMgbm90IE9TRXJyb3IgYW5kIGlzc3ViY2xhc3MoZXhjLCBPU0Vycm9yKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXZlcnNlX21hcHBpbmcoJ2J1aWx0aW5zJywgbmFtZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdleGNlcHRpb25zJywgJ09TRXJyb3InKSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldmVyc2VfbWFwcGluZygnYnVpbHRpbnMnLCBuYW1lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2V4Y2VwdGlvbnMnLCBuYW1lKSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXBwaW5nKCdleGNlcHRpb25zJywgbmFtZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdidWlsdGlucycsIG5hbWUpKQorCisgICAgZGVmIHRlc3RfbXVsdGlwcm9jZXNzaW5nX2V4Y2VwdGlvbnMoc2VsZik6CisgICAgICAgIG1vZHVsZSA9IHN1cHBvcnQuaW1wb3J0X21vZHVsZSgnbXVsdGlwcm9jZXNzaW5nLmNvbnRleHQnKQorICAgICAgICBmb3IgbmFtZSwgZXhjIGluIGdldF9leGNlcHRpb25zKG1vZHVsZSk6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChuYW1lKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldmVyc2VfbWFwcGluZygnbXVsdGlwcm9jZXNzaW5nLmNvbnRleHQnLCBuYW1lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnbXVsdGlwcm9jZXNzaW5nJywgbmFtZSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXBwaW5nKCdtdWx0aXByb2Nlc3NpbmcnLCBuYW1lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnbXVsdGlwcm9jZXNzaW5nLmNvbnRleHQnLCBuYW1lKSkKKwogCiBkZWYgdGVzdF9tYWluKCk6Ci0gICAgdGVzdHMgPSBbUGlja2xlVGVzdHMsIFB5UGlja2xlclRlc3RzLCBQeVBlcnNQaWNrbGVyVGVzdHMsCi0gICAgICAgICAgICAgUHlEaXNwYXRjaFRhYmxlVGVzdHMsIFB5Q2hhaW5EaXNwYXRjaFRhYmxlVGVzdHNdCisgICAgdGVzdHMgPSBbUGlja2xlVGVzdHMsIFB5VW5waWNrbGVyVGVzdHMsIFB5UGlja2xlclRlc3RzLCBQeVBlcnNQaWNrbGVyVGVzdHMsCisgICAgICAgICAgICAgUHlEaXNwYXRjaFRhYmxlVGVzdHMsIFB5Q2hhaW5EaXNwYXRjaFRhYmxlVGVzdHMsCisgICAgICAgICAgICAgQ29tcGF0UGlja2xlVGVzdHNdCiAgICAgaWYgaGFzX2NfaW1wbGVtZW50YXRpb246Ci0gICAgICAgIHRlc3RzLmV4dGVuZChbQ1BpY2tsZXJUZXN0cywgQ1BlcnNQaWNrbGVyVGVzdHMsCisgICAgICAgIHRlc3RzLmV4dGVuZChbQ1VucGlja2xlclRlc3RzLCBDUGlja2xlclRlc3RzLCBDUGVyc1BpY2tsZXJUZXN0cywKICAgICAgICAgICAgICAgICAgICAgICBDRHVtcFBpY2tsZV9Mb2FkUGlja2xlLCBEdW1wUGlja2xlX0NMb2FkUGlja2xlLAogICAgICAgICAgICAgICAgICAgICAgIFB5UGlja2xlclVucGlja2xlck9iamVjdFRlc3RzLAogICAgICAgICAgICAgICAgICAgICAgIENQaWNrbGVyVW5waWNrbGVyT2JqZWN0VGVzdHMsCiAgICAgICAgICAgICAgICAgICAgICAgQ0Rpc3BhdGNoVGFibGVUZXN0cywgQ0NoYWluRGlzcGF0Y2hUYWJsZVRlc3RzLAotICAgICAgICAgICAgICAgICAgICAgIEluTWVtb3J5UGlja2xlVGVzdHNdKQorICAgICAgICAgICAgICAgICAgICAgIEluTWVtb3J5UGlja2xlVGVzdHMsIFNpemVvZlRlc3RzXSkKICAgICBzdXBwb3J0LnJ1bl91bml0dGVzdCgqdGVzdHMpCiAgICAgc3VwcG9ydC5ydW5fZG9jdGVzdChwaWNrbGUpCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcGlja2xldG9vbHMucHkgYi9MaWIvdGVzdC90ZXN0X3BpY2tsZXRvb2xzLnB5CmluZGV4IGQzN2FjMjYuLmJiZTY4NzUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcGlja2xldG9vbHMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9waWNrbGV0b29scy5weQpAQCAtMSwzICsxLDQgQEAKK2ltcG9ydCBzdHJ1Y3QKIGltcG9ydCBwaWNrbGUKIGltcG9ydCBwaWNrbGV0b29scwogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CkBAIC0xNSw2ICsxNiw0OCBAQAogICAgICMgVGVzdCByZWxpZXMgb24gcHJlY2lzZSBvdXRwdXQgb2YgZHVtcHMoKQogICAgIHRlc3RfcGlja2xlX3RvXzJ4ID0gTm9uZQogCisgICAgZGVmIHRlc3Rfb3B0aW1pemVfbG9uZ19iaW5nZXQoc2VsZik6CisgICAgICAgIGRhdGEgPSBbc3RyKGkpIGZvciBpIGluIHJhbmdlKDI1NyldCisgICAgICAgIGRhdGEuYXBwZW5kKGRhdGFbLTFdKQorICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIHBpY2tsZWQgPSBwaWNrbGUuZHVtcHMoZGF0YSwgcHJvdG8pCisgICAgICAgICAgICB1bnBpY2tsZWQgPSBwaWNrbGUubG9hZHMocGlja2xlZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5waWNrbGVkLCBkYXRhKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh1bnBpY2tsZWRbLTFdLCB1bnBpY2tsZWRbLTJdKQorCisgICAgICAgICAgICBwaWNrbGVkMiA9IHBpY2tsZXRvb2xzLm9wdGltaXplKHBpY2tsZWQpCisgICAgICAgICAgICB1bnBpY2tsZWQyID0gcGlja2xlLmxvYWRzKHBpY2tsZWQyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bnBpY2tsZWQyLCBkYXRhKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh1bnBpY2tsZWQyWy0xXSwgdW5waWNrbGVkMlstMl0pCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKHBpY2tsZS5MT05HX0JJTkdFVCwgcGlja2xlZDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKHBpY2tsZS5MT05HX0JJTlBVVCwgcGlja2xlZDIpCisKKyAgICBkZWYgdGVzdF9vcHRpbWl6ZV9iaW5wdXRfYW5kX21lbW9pemUoc2VsZik6CisgICAgICAgIHBpY2tsZWQgPSAoYidceDgwXHgwNFx4OTVceDE1XHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCcKKyAgICAgICAgICAgICAgICAgICBiJ11ceDk0KFx4OGNceDA0c3BhbXFceDAxXHg4Y1x4MDNoYW1ceDk0aFx4MDJlLicpCisgICAgICAgICMgICAgMDogXHg4MCBQUk9UTyAgICAgIDQKKyAgICAgICAgIyAgICAyOiBceDk1IEZSQU1FICAgICAgMjEKKyAgICAgICAgIyAgIDExOiBdICAgIEVNUFRZX0xJU1QKKyAgICAgICAgIyAgIDEyOiBceDk0IE1FTU9JWkUKKyAgICAgICAgIyAgIDEzOiAoICAgIE1BUksKKyAgICAgICAgIyAgIDE0OiBceDhjICAgICBTSE9SVF9CSU5VTklDT0RFICdzcGFtJworICAgICAgICAjICAgMjA6IHEgICAgICAgIEJJTlBVVCAgICAgMQorICAgICAgICAjICAgMjI6IFx4OGMgICAgIFNIT1JUX0JJTlVOSUNPREUgJ2hhbScKKyAgICAgICAgIyAgIDI3OiBceDk0ICAgICBNRU1PSVpFCisgICAgICAgICMgICAyODogaCAgICAgICAgQklOR0VUICAgICAyCisgICAgICAgICMgICAzMDogZSAgICAgICAgQVBQRU5EUyAgICAoTUFSSyBhdCAxMykKKyAgICAgICAgIyAgIDMxOiAuICAgIFNUT1AKKyAgICAgICAgc2VsZi5hc3NlcnRJbihwaWNrbGUuQklOUFVULCBwaWNrbGVkKQorICAgICAgICB1bnBpY2tsZWQgPSBwaWNrbGUubG9hZHMocGlja2xlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bnBpY2tsZWQsIFsnc3BhbScsICdoYW0nLCAnaGFtJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0SXModW5waWNrbGVkWzFdLCB1bnBpY2tsZWRbMl0pCisKKyAgICAgICAgcGlja2xlZDIgPSBwaWNrbGV0b29scy5vcHRpbWl6ZShwaWNrbGVkKQorICAgICAgICB1bnBpY2tsZWQyID0gcGlja2xlLmxvYWRzKHBpY2tsZWQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVucGlja2xlZDIsIFsnc3BhbScsICdoYW0nLCAnaGFtJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0SXModW5waWNrbGVkMlsxXSwgdW5waWNrbGVkMlsyXSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihwaWNrbGUuQklOUFVULCBwaWNrbGVkMikKKwogCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoT3B0aW1pemVkUGlja2xlVGVzdHMpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3BrZy5weSBiL0xpYi90ZXN0L3Rlc3RfcGtnLnB5CmluZGV4IDM1NWVmZTcuLjk4ODMwMDAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcGtnLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcGtnLnB5CkBAIC0xOTksMTQgKzE5OSwxNCBAQAogICAgICAgICBpbXBvcnQgdDUKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaXhkaXIoZGlyKHQ1KSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgWydfX2NhY2hlZF9fJywgJ19fZG9jX18nLCAnX19maWxlX18nLCAnX19sb2FkZXJfXycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICdfX25hbWVfXycsICdfX3BhY2thZ2VfXycsICdfX3BhdGhfXycsICdmb28nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAnc3RyaW5nJywgJ3Q1J10pCisgICAgICAgICAgICAgICAgICAgICAgICAgICdfX25hbWVfXycsICdfX3BhY2thZ2VfXycsICdfX3BhdGhfXycsICdfX3NwZWNfXycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICdmb28nLCAnc3RyaW5nJywgJ3Q1J10pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZml4ZGlyKGRpcih0NS5mb28pKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBbJ19fY2FjaGVkX18nLCAnX19kb2NfXycsICdfX2ZpbGVfXycsICdfX2xvYWRlcl9fJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fbmFtZV9fJywgJ19fcGFja2FnZV9fJywgJ3N0cmluZyddKQorICAgICAgICAgICAgICAgICAgICAgICAgICAnX19uYW1lX18nLCAnX19wYWNrYWdlX18nLCAnX19zcGVjX18nLCAnc3RyaW5nJ10pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZml4ZGlyKGRpcih0NS5zdHJpbmcpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBbJ19fY2FjaGVkX18nLCAnX19kb2NfXycsICdfX2ZpbGVfXycsICdfX2xvYWRlcl9fJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fbmFtZV9fJywgJ19fcGFja2FnZV9fJywgJ3NwYW0nXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fbmFtZV9fJywgJ19fcGFja2FnZV9fJywgJ19fc3BlY19fJywgJ3NwYW0nXSkKIAogICAgIGRlZiB0ZXN0XzYoc2VsZik6CiAgICAgICAgIGhpZXIgPSBbCkBAIC0yMjIsMTQgKzIyMiwxNSBAQAogICAgICAgICBpbXBvcnQgdDYKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaXhkaXIoZGlyKHQ2KSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgWydfX2FsbF9fJywgJ19fY2FjaGVkX18nLCAnX19kb2NfXycsICdfX2ZpbGVfXycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICdfX2xvYWRlcl9fJywgJ19fbmFtZV9fJywgJ19fcGFja2FnZV9fJywgJ19fcGF0aF9fJ10pCisgICAgICAgICAgICAgICAgICAgICAgICAgICdfX2xvYWRlcl9fJywgJ19fbmFtZV9fJywgJ19fcGFja2FnZV9fJywgJ19fcGF0aF9fJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fc3BlY19fJ10pCiAgICAgICAgIHMgPSAiIiIKICAgICAgICAgICAgIGltcG9ydCB0NgogICAgICAgICAgICAgZnJvbSB0NiBpbXBvcnQgKgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaXhkaXIoZGlyKHQ2KSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnX19hbGxfXycsICdfX2NhY2hlZF9fJywgJ19fZG9jX18nLCAnX19maWxlX18nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fbG9hZGVyX18nLCAnX19uYW1lX18nLCAnX19wYWNrYWdlX18nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fcGF0aF9fJywgJ2VnZ3MnLCAnaGFtJywgJ3NwYW0nXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfX3BhdGhfXycsICdfX3NwZWNfXycsICdlZ2dzJywgJ2hhbScsICdzcGFtJ10pCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpcigpLCBbJ2VnZ3MnLCAnaGFtJywgJ3NlbGYnLCAnc3BhbScsICd0NiddKQogICAgICAgICAgICAgIiIiCiAgICAgICAgIHNlbGYucnVuX2NvZGUocykKQEAgLTI1NiwxOCArMjU3LDE5IEBACiAgICAgICAgIGltcG9ydCB0NyBhcyB0YXMKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaXhkaXIoZGlyKHRhcykpLAogICAgICAgICAgICAgICAgICAgICAgICAgIFsnX19jYWNoZWRfXycsICdfX2RvY19fJywgJ19fZmlsZV9fJywgJ19fbG9hZGVyX18nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAnX19uYW1lX18nLCAnX19wYWNrYWdlX18nLCAnX19wYXRoX18nXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fbmFtZV9fJywgJ19fcGFja2FnZV9fJywgJ19fcGF0aF9fJywgJ19fc3BlY19fJ10pCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodDcpCiAgICAgICAgIGZyb20gdDcgaW1wb3J0IHN1YiBhcyBzdWJwYXIKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaXhkaXIoZGlyKHN1YnBhcikpLAogICAgICAgICAgICAgICAgICAgICAgICAgIFsnX19jYWNoZWRfXycsICdfX2RvY19fJywgJ19fZmlsZV9fJywgJ19fbG9hZGVyX18nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAnX19uYW1lX18nLCAnX19wYWNrYWdlX18nLCAnX19wYXRoX18nXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fbmFtZV9fJywgJ19fcGFja2FnZV9fJywgJ19fcGF0aF9fJywgJ19fc3BlY19fJ10pCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodDcpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc3ViKQogICAgICAgICBmcm9tIHQ3LnN1YiBpbXBvcnQgc3Vic3ViIGFzIHN1YnN1YnN1YgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpeGRpcihkaXIoc3Vic3Vic3ViKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgWydfX2NhY2hlZF9fJywgJ19fZG9jX18nLCAnX19maWxlX18nLCAnX19sb2FkZXJfXycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICdfX25hbWVfXycsICdfX3BhY2thZ2VfXycsICdfX3BhdGhfXycsICdzcGFtJ10pCisgICAgICAgICAgICAgICAgICAgICAgICAgICdfX25hbWVfXycsICdfX3BhY2thZ2VfXycsICdfX3BhdGhfXycsICdfX3NwZWNfXycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICdzcGFtJ10pCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodDcpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc3ViKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHN1YnN1YikKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcGtnaW1wb3J0LnB5IGIvTGliL3Rlc3QvdGVzdF9wa2dpbXBvcnQucHkKaW5kZXggYTg0MjZiNS4uMzcwYjJhYSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9wa2dpbXBvcnQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9wa2dpbXBvcnQucHkKQEAgLTYsNyArNiw3IEBACiBpbXBvcnQgdGVtcGZpbGUKIGltcG9ydCB1bml0dGVzdAogCi1mcm9tIGltcCBpbXBvcnQgY2FjaGVfZnJvbV9zb3VyY2UKK2Zyb20gaW1wb3J0bGliLnV0aWwgaW1wb3J0IGNhY2hlX2Zyb21fc291cmNlCiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBjcmVhdGVfZW1wdHlfZmlsZQogCiBjbGFzcyBUZXN0SW1wb3J0KHVuaXR0ZXN0LlRlc3RDYXNlKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcGtndXRpbC5weSBiL0xpYi90ZXN0L3Rlc3RfcGtndXRpbC5weQppbmRleCBmZDA2NjE0Li5lMGM4NjM1ZGUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcGtndXRpbC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3BrZ3V0aWwucHkKQEAgLTEsMTIgKzEsMTMgQEAKLWZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIHVubG9hZCwgY2hlY2tfd2FybmluZ3MKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIHVubG9hZCwgY2hlY2tfd2FybmluZ3MsIENsZWFuSW1wb3J0CiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCBzeXMKLWltcG9ydCBpbXAKIGltcG9ydCBpbXBvcnRsaWIKK2Zyb20gaW1wb3J0bGliLnV0aWwgaW1wb3J0IHNwZWNfZnJvbV9maWxlX2xvY2F0aW9uCiBpbXBvcnQgcGtndXRpbAogaW1wb3J0IG9zCiBpbXBvcnQgb3MucGF0aAogaW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgdHlwZXMKIGltcG9ydCBzaHV0aWwKIGltcG9ydCB6aXBmaWxlCiAKQEAgLTEwMywyMyArMTA0LDIwIEBACiBjbGFzcyBQa2d1dGlsUEVQMzAyVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgY2xhc3MgTXlUZXN0TG9hZGVyKG9iamVjdCk6Ci0gICAgICAgIGRlZiBsb2FkX21vZHVsZShzZWxmLCBmdWxsbmFtZSk6Ci0gICAgICAgICAgICAjIENyZWF0ZSBhbiBlbXB0eSBtb2R1bGUKLSAgICAgICAgICAgIG1vZCA9IHN5cy5tb2R1bGVzLnNldGRlZmF1bHQoZnVsbG5hbWUsIGltcC5uZXdfbW9kdWxlKGZ1bGxuYW1lKSkKLSAgICAgICAgICAgIG1vZC5fX2ZpbGVfXyA9ICI8JXM+IiAlIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fCi0gICAgICAgICAgICBtb2QuX19sb2FkZXJfXyA9IHNlbGYKLSAgICAgICAgICAgICMgTWFrZSBpdCBhIHBhY2thZ2UKLSAgICAgICAgICAgIG1vZC5fX3BhdGhfXyA9IFtdCisgICAgICAgIGRlZiBleGVjX21vZHVsZShzZWxmLCBtb2QpOgogICAgICAgICAgICAgIyBDb3VudCBob3cgbWFueSB0aW1lcyB0aGUgbW9kdWxlIGlzIHJlbG9hZGVkCi0gICAgICAgICAgICBtb2QuX19kaWN0X19bJ2xvYWRzJ10gPSBtb2QuX19kaWN0X18uZ2V0KCdsb2FkcycsMCkgKyAxCi0gICAgICAgICAgICByZXR1cm4gbW9kCisgICAgICAgICAgICBtb2QuX19kaWN0X19bJ2xvYWRzJ10gPSBtb2QuX19kaWN0X18uZ2V0KCdsb2FkcycsIDApICsgMQogCiAgICAgICAgIGRlZiBnZXRfZGF0YShzZWxmLCBwYXRoKToKICAgICAgICAgICAgIHJldHVybiAiSGVsbG8sIHdvcmxkISIKIAogICAgIGNsYXNzIE15VGVzdEltcG9ydGVyKG9iamVjdCk6Ci0gICAgICAgIGRlZiBmaW5kX21vZHVsZShzZWxmLCBmdWxsbmFtZSwgcGF0aD1Ob25lKToKLSAgICAgICAgICAgIHJldHVybiBQa2d1dGlsUEVQMzAyVGVzdHMuTXlUZXN0TG9hZGVyKCkKKyAgICAgICAgZGVmIGZpbmRfc3BlYyhzZWxmLCBmdWxsbmFtZSwgcGF0aD1Ob25lLCB0YXJnZXQ9Tm9uZSk6CisgICAgICAgICAgICBsb2FkZXIgPSBQa2d1dGlsUEVQMzAyVGVzdHMuTXlUZXN0TG9hZGVyKCkKKyAgICAgICAgICAgIHJldHVybiBzcGVjX2Zyb21fZmlsZV9sb2NhdGlvbihmdWxsbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPCVzPicgJSBsb2FkZXIuX19jbGFzc19fLl9fbmFtZV9fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlcj1sb2FkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnM9W10pCiAKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIHN5cy5tZXRhX3BhdGguaW5zZXJ0KDAsIHNlbGYuTXlUZXN0SW1wb3J0ZXIoKSkKQEAgLTIwMCw2ICsxOTgsOCBAQAogICAgICAgICBkaXJuYW1lID0gc2VsZi5jcmVhdGVfaW5pdChwa2duYW1lKQogICAgICAgICBwYXRoaXRlbSA9IG9zLnBhdGguam9pbihkaXJuYW1lLCBwa2duYW1lKQogICAgICAgICBmdWxsbmFtZSA9ICd7fS57fScuZm9ybWF0KHBrZ25hbWUsIG1vZG5hbWUpCisgICAgICAgIHN5cy5tb2R1bGVzLnBvcChmdWxsbmFtZSwgTm9uZSkKKyAgICAgICAgc3lzLm1vZHVsZXMucG9wKHBrZ25hbWUsIE5vbmUpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYuY3JlYXRlX3N1Ym1vZHVsZShkaXJuYW1lLCBwa2duYW1lLCBtb2RuYW1lLCAwKQogCkBAIC0yMDgsMTEgKzIwOCwxOSBAQAogICAgICAgICAgICAgaW1wb3J0ZXJzID0gbGlzdChpdGVyX2ltcG9ydGVycyhmdWxsbmFtZSkpCiAgICAgICAgICAgICBleHBlY3RlZF9pbXBvcnRlciA9IGdldF9pbXBvcnRlcihwYXRoaXRlbSkKICAgICAgICAgICAgIGZvciBmaW5kZXIgaW4gaW1wb3J0ZXJzOgorICAgICAgICAgICAgICAgIHNwZWMgPSBwa2d1dGlsLl9nZXRfc3BlYyhmaW5kZXIsIGZ1bGxuYW1lKQorICAgICAgICAgICAgICAgIGxvYWRlciA9IHNwZWMubG9hZGVyCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBsb2FkZXIgPSBsb2FkZXIubG9hZGVyCisgICAgICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgICAgICAjIEZvciBub3cgd2Ugc3RpbGwgYWxsb3cgcmF3IGxvYWRlcnMgZnJvbQorICAgICAgICAgICAgICAgICAgICAjIGZpbmRfbW9kdWxlKCkuCisgICAgICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZmluZGVyLCBpbXBvcnRsaWIubWFjaGluZXJ5LkZpbGVGaW5kZXIpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaW5kZXIsIGV4cGVjdGVkX2ltcG9ydGVyKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmaW5kZXIuZmluZF9tb2R1bGUoZnVsbG5hbWUpLAorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShsb2FkZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltcG9ydGxpYi5tYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcikKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShmaW5kZXIuZmluZF9tb2R1bGUocGtnbmFtZSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocGtndXRpbC5fZ2V0X3NwZWMoZmluZGVyLCBwa2duYW1lKSkKIAogICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcik6CiAgICAgICAgICAgICAgICAgbGlzdChpdGVyX2ltcG9ydGVycygnaW52YWxpZC5tb2R1bGUnKSkKQEAgLTIyMiw4ICsyMzAsMTEgQEAKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoZGlybmFtZSkKICAgICAgICAgICAgIGRlbCBzeXMucGF0aFswXQotICAgICAgICAgICAgZGVsIHN5cy5tb2R1bGVzWydzcGFtJ10KLSAgICAgICAgICAgIGRlbCBzeXMubW9kdWxlc1snc3BhbS5lZ2dzJ10KKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBkZWwgc3lzLm1vZHVsZXNbJ3NwYW0nXQorICAgICAgICAgICAgICAgIGRlbCBzeXMubW9kdWxlc1snc3BhbS5lZ2dzJ10KKyAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCiAKIAogICAgIGRlZiB0ZXN0X21peGVkX25hbWVzcGFjZShzZWxmKToKQEAgLTMyMyw2ICszMzQsNTYgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHBrZ3V0aWwuZ2V0X2xvYWRlcigidGVzdC5zdXBwb3J0IikpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih3Lndhcm5pbmdzKSwgMCkKIAorICAgIGRlZiB0ZXN0X2dldF9sb2FkZXJfaGFuZGxlc19taXNzaW5nX2xvYWRlcl9hdHRyaWJ1dGUoc2VsZik6CisgICAgICAgIGdsb2JhbCBfX2xvYWRlcl9fCisgICAgICAgIHRoaXNfbG9hZGVyID0gX19sb2FkZXJfXworICAgICAgICBkZWwgX19sb2FkZXJfXworICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIGNoZWNrX3dhcm5pbmdzKCkgYXMgdzoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShwa2d1dGlsLmdldF9sb2FkZXIoX19uYW1lX18pKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHcud2FybmluZ3MpLCAwKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgX19sb2FkZXJfXyA9IHRoaXNfbG9hZGVyCisKKyAgICBkZWYgdGVzdF9nZXRfbG9hZGVyX2hhbmRsZXNfbWlzc2luZ19zcGVjX2F0dHJpYnV0ZShzZWxmKToKKyAgICAgICAgbmFtZSA9ICdzcGFtJworICAgICAgICBtb2QgPSB0eXBlKHN5cykobmFtZSkKKyAgICAgICAgZGVsIG1vZC5fX3NwZWNfXworICAgICAgICB3aXRoIENsZWFuSW1wb3J0KG5hbWUpOgorICAgICAgICAgICAgc3lzLm1vZHVsZXNbbmFtZV0gPSBtb2QKKyAgICAgICAgICAgIGxvYWRlciA9IHBrZ3V0aWwuZ2V0X2xvYWRlcihuYW1lKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShsb2FkZXIpCisKKyAgICBkZWYgdGVzdF9nZXRfbG9hZGVyX2hhbmRsZXNfc3BlY19hdHRyaWJ1dGVfbm9uZShzZWxmKToKKyAgICAgICAgbmFtZSA9ICdzcGFtJworICAgICAgICBtb2QgPSB0eXBlKHN5cykobmFtZSkKKyAgICAgICAgbW9kLl9fc3BlY19fID0gTm9uZQorICAgICAgICB3aXRoIENsZWFuSW1wb3J0KG5hbWUpOgorICAgICAgICAgICAgc3lzLm1vZHVsZXNbbmFtZV0gPSBtb2QKKyAgICAgICAgICAgIGxvYWRlciA9IHBrZ3V0aWwuZ2V0X2xvYWRlcihuYW1lKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShsb2FkZXIpCisKKyAgICBkZWYgdGVzdF9nZXRfbG9hZGVyX05vbmVfaW5fc3lzX21vZHVsZXMoc2VsZik6CisgICAgICAgIG5hbWUgPSAndG90YWxseSBib2d1cycKKyAgICAgICAgc3lzLm1vZHVsZXNbbmFtZV0gPSBOb25lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGxvYWRlciA9IHBrZ3V0aWwuZ2V0X2xvYWRlcihuYW1lKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZGVsIHN5cy5tb2R1bGVzW25hbWVdCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGxvYWRlcikKKworICAgIGRlZiB0ZXN0X2ZpbmRfbG9hZGVyX21pc3NpbmdfbW9kdWxlKHNlbGYpOgorICAgICAgICBuYW1lID0gJ3RvdGFsbHkgYm9ndXMnCisgICAgICAgIGxvYWRlciA9IHBrZ3V0aWwuZmluZF9sb2FkZXIobmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUobG9hZGVyKQorCisgICAgZGVmIHRlc3RfZmluZF9sb2FkZXJfYXZvaWRzX2VtdWxhdGlvbihzZWxmKToKKyAgICAgICAgd2l0aCBjaGVja193YXJuaW5ncygpIGFzIHc6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShwa2d1dGlsLmZpbmRfbG9hZGVyKCJzeXMiKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHBrZ3V0aWwuZmluZF9sb2FkZXIoIm9zIikpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShwa2d1dGlsLmZpbmRfbG9hZGVyKCJ0ZXN0LnN1cHBvcnQiKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHcud2FybmluZ3MpLCAwKQorCiAgICAgZGVmIHRlc3RfZ2V0X2ltcG9ydGVyX2F2b2lkc19lbXVsYXRpb24oc2VsZik6CiAgICAgICAgICMgV2UgdXNlIGFuIGlsbGVnYWwgcGF0aCBzbyAqbm9uZSogb2YgdGhlIHBhdGggaG9va3Mgc2hvdWxkIGZpcmUKICAgICAgICAgd2l0aCBjaGVja193YXJuaW5ncygpIGFzIHc6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3BsaXN0bGliLnB5IGIvTGliL3Rlc3QvdGVzdF9wbGlzdGxpYi5weQppbmRleCA5ZTg2YjNkLi5mZWY5ZjM5IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3BsaXN0bGliLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcGxpc3RsaWIucHkKQEAgLTEsOTQgKzEsOTUgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDAzIFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIENvcHlyaWdodCAoQykgMjAwMy0yMDEzIFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uCiAKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IHBsaXN0bGliCiBpbXBvcnQgb3MKIGltcG9ydCBkYXRldGltZQoraW1wb3J0IGNvZGVjcworaW1wb3J0IGJpbmFzY2lpCitpbXBvcnQgY29sbGVjdGlvbnMKK2ltcG9ydCBzdHJ1Y3QKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAorZnJvbSBpbyBpbXBvcnQgQnl0ZXNJTwogCitBTExfRk9STUFUUz0ocGxpc3RsaWIuRk1UX1hNTCwgcGxpc3RsaWIuRk1UX0JJTkFSWSkKIAotIyBUaGlzIHRlc3QgZGF0YSB3YXMgZ2VuZXJhdGVkIHRocm91Z2ggQ29jb2EncyBOU0RpY3Rpb25hcnkgY2xhc3MKLVRFU1REQVRBID0gYiIiIjw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IURPQ1RZUEUgcGxpc3QgUFVCTElDICItLy9BcHBsZS8vRFREIFBMSVNUIDEuMC8vRU4iIFwKLSJodHRwOi8vd3d3LmFwcGxlLmNvbS9EVERzL1Byb3BlcnR5TGlzdC0xLjAuZHRkIj4KLTxwbGlzdCB2ZXJzaW9uPSIxLjAiPgotPGRpY3Q+Ci0gICAgICAgIDxrZXk+YURhdGU8L2tleT4KLSAgICAgICAgPGRhdGU+MjAwNC0xMC0yNlQxMDozMzozM1o8L2RhdGU+Ci0gICAgICAgIDxrZXk+YURpY3Q8L2tleT4KLSAgICAgICAgPGRpY3Q+Ci0gICAgICAgICAgICAgICAgPGtleT5hRmFsc2VWYWx1ZTwva2V5PgotICAgICAgICAgICAgICAgIDxmYWxzZS8+Ci0gICAgICAgICAgICAgICAgPGtleT5hVHJ1ZVZhbHVlPC9rZXk+Ci0gICAgICAgICAgICAgICAgPHRydWUvPgotICAgICAgICAgICAgICAgIDxrZXk+YVVuaWNvZGVWYWx1ZTwva2V5PgotICAgICAgICAgICAgICAgIDxzdHJpbmc+TVx4YzNceGE0c3NpZywgTWFceGMzXHg5Zjwvc3RyaW5nPgotICAgICAgICAgICAgICAgIDxrZXk+YW5vdGhlclN0cmluZzwva2V5PgotICAgICAgICAgICAgICAgIDxzdHJpbmc+Jmx0O2hlbGxvICZhbXA7ICdoaScgdGhlcmUhJmd0Ozwvc3RyaW5nPgotICAgICAgICAgICAgICAgIDxrZXk+ZGVlcGVyRGljdDwva2V5PgotICAgICAgICAgICAgICAgIDxkaWN0PgotICAgICAgICAgICAgICAgICAgICAgICAgPGtleT5hPC9rZXk+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8aW50ZWdlcj4xNzwvaW50ZWdlcj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxrZXk+Yjwva2V5PgotICAgICAgICAgICAgICAgICAgICAgICAgPHJlYWw+MzIuNTwvcmVhbD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxrZXk+Yzwva2V5PgotICAgICAgICAgICAgICAgICAgICAgICAgPGFycmF5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW50ZWdlcj4xPC9pbnRlZ2VyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW50ZWdlcj4yPC9pbnRlZ2VyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3RyaW5nPnRleHQ8L3N0cmluZz4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvYXJyYXk+Ci0gICAgICAgICAgICAgICAgPC9kaWN0PgotICAgICAgICA8L2RpY3Q+Ci0gICAgICAgIDxrZXk+YUZsb2F0PC9rZXk+Ci0gICAgICAgIDxyZWFsPjAuNTwvcmVhbD4KLSAgICAgICAgPGtleT5hTGlzdDwva2V5PgotICAgICAgICA8YXJyYXk+Ci0gICAgICAgICAgICAgICAgPHN0cmluZz5BPC9zdHJpbmc+Ci0gICAgICAgICAgICAgICAgPHN0cmluZz5CPC9zdHJpbmc+Ci0gICAgICAgICAgICAgICAgPGludGVnZXI+MTI8L2ludGVnZXI+Ci0gICAgICAgICAgICAgICAgPHJlYWw+MzIuNTwvcmVhbD4KLSAgICAgICAgICAgICAgICA8YXJyYXk+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8aW50ZWdlcj4xPC9pbnRlZ2VyPgotICAgICAgICAgICAgICAgICAgICAgICAgPGludGVnZXI+MjwvaW50ZWdlcj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxpbnRlZ2VyPjM8L2ludGVnZXI+Ci0gICAgICAgICAgICAgICAgPC9hcnJheT4KLSAgICAgICAgPC9hcnJheT4KLSAgICAgICAgPGtleT5hU3RyaW5nPC9rZXk+Ci0gICAgICAgIDxzdHJpbmc+RG9vZGFoPC9zdHJpbmc+Ci0gICAgICAgIDxrZXk+YW5FbXB0eURpY3Q8L2tleT4KLSAgICAgICAgPGRpY3QvPgotICAgICAgICA8a2V5PmFuRW1wdHlMaXN0PC9rZXk+Ci0gICAgICAgIDxhcnJheS8+Ci0gICAgICAgIDxrZXk+YW5JbnQ8L2tleT4KLSAgICAgICAgPGludGVnZXI+NzI4PC9pbnRlZ2VyPgotICAgICAgICA8a2V5Pm5lc3RlZERhdGE8L2tleT4KLSAgICAgICAgPGFycmF5PgotICAgICAgICAgICAgICAgIDxkYXRhPgotICAgICAgICAgICAgICAgIFBHeHZkSE1nYjJZZ1ltbHVZWEo1SUdkMWJtcytBQUVDQXp4c2IzUnpJRzltSUdKcGJtRnllU0JuZFc1cgotICAgICAgICAgICAgICAgIFBnQUJBZ004Ykc5MGN5QnZaaUJpYVc1aGNua2daM1Z1YXo0QUFRSURQR3h2ZEhNZ2IyWWdZbWx1WVhKNQotICAgICAgICAgICAgICAgIElHZDFibXMrQUFFQ0F6eHNiM1J6SUc5bUlHSnBibUZ5ZVNCbmRXNXJQZ0FCQWdNOGJHOTBjeUJ2WmlCaQotICAgICAgICAgICAgICAgIGFXNWhjbmtnWjNWdWF6NEFBUUlEUEd4dmRITWdiMllnWW1sdVlYSjVJR2QxYm1zK0FBRUNBenhzYjNSegotICAgICAgICAgICAgICAgIElHOW1JR0pwYm1GeWVTQm5kVzVyUGdBQkFnTThiRzkwY3lCdlppQmlhVzVoY25rZ1ozVnVhejRBQVFJRAotICAgICAgICAgICAgICAgIFBHeHZkSE1nYjJZZ1ltbHVZWEo1SUdkMWJtcytBQUVDQXc9PQotICAgICAgICAgICAgICAgIDwvZGF0YT4KLSAgICAgICAgPC9hcnJheT4KLSAgICAgICAgPGtleT5zb21lRGF0YTwva2V5PgotICAgICAgICA8ZGF0YT4KLSAgICAgICAgUEdKcGJtRnllU0JuZFc1clBnPT0KLSAgICAgICAgPC9kYXRhPgotICAgICAgICA8a2V5PnNvbWVNb3JlRGF0YTwva2V5PgotICAgICAgICA8ZGF0YT4KLSAgICAgICAgUEd4dmRITWdiMllnWW1sdVlYSjVJR2QxYm1zK0FBRUNBenhzYjNSeklHOW1JR0pwYm1GeWVTQm5kVzVyUGdBQkFnTTgKLSAgICAgICAgYkc5MGN5QnZaaUJpYVc1aGNua2daM1Z1YXo0QUFRSURQR3h2ZEhNZ2IyWWdZbWx1WVhKNUlHZDFibXMrQUFFQ0F6eHMKLSAgICAgICAgYjNSeklHOW1JR0pwYm1GeWVTQm5kVzVyUGdBQkFnTThiRzkwY3lCdlppQmlhVzVoY25rZ1ozVnVhejRBQVFJRFBHeHYKLSAgICAgICAgZEhNZ2IyWWdZbWx1WVhKNUlHZDFibXMrQUFFQ0F6eHNiM1J6SUc5bUlHSnBibUZ5ZVNCbmRXNXJQZ0FCQWdNOGJHOTAKLSAgICAgICAgY3lCdlppQmlhVzVoY25rZ1ozVnVhejRBQVFJRFBHeHZkSE1nYjJZZ1ltbHVZWEo1SUdkMWJtcytBQUVDQXc9PQotICAgICAgICA8L2RhdGE+Ci0gICAgICAgIDxrZXk+XHhjM1x4ODViZW5yYWE8L2tleT4KLSAgICAgICAgPHN0cmluZz5UaGF0IHdhcyBhIHVuaWNvZGUga2V5Ljwvc3RyaW5nPgotPC9kaWN0PgotPC9wbGlzdD4KLSIiIi5yZXBsYWNlKGIiICIgKiA4LCBiIlx0IikgICMgQXBwbGUgYXMgd2VsbCBhcyBwbGlzdGxpYi5weSBvdXRwdXQgaGFyZCB0YWJzCisjIFRoZSB0ZXN0ZGF0YSBpcyBnZW5lcmF0ZWQgdXNpbmcgTWFjL1Rvb2xzL3BsaXN0bGliX2dlbmVyYXRlX3Rlc3RkYXRhLnB5CisjICh3aGljaCB1c2luZyBQeU9iakMgdG8gY29udHJvbCB0aGUgQ29jb2EgY2xhc3NlcyBmb3IgZ2VuZXJhdGluZyBwbGlzdHMpCitURVNUREFUQT17CisgICAgcGxpc3RsaWIuRk1UX1hNTDogYmluYXNjaWkuYTJiX2Jhc2U2NChiJycnCisgICAgICAgIFBEOTRiV3dnZG1WeWMybHZiajBpTVM0d0lpQmxibU52WkdsdVp6MGlWVlJHTFRnaVB6NEtQQ0ZFVDBOVQorICAgICAgICBXVkJGSUhCc2FYTjBJRkJWUWt4SlF5QWlMUzh2UVhCd2JHVXZMMFJVUkNCUVRFbFRWQ0F4TGpBdkwwVk8KKyAgICAgICAgSWlBaWFIUjBjRG92TDNkM2R5NWhjSEJzWlM1amIyMHZSRlJFY3k5UWNtOXdaWEowZVV4cGMzUXRNUzR3CisgICAgICAgIExtUjBaQ0krQ2p4d2JHbHpkQ0IyWlhKemFXOXVQU0l4TGpBaVBnbzhaR2xqZEQ0S0NUeHJaWGsrWVVKcAorICAgICAgICBaMGx1ZER3dmEyVjVQZ29KUEdsdWRHVm5aWEkrT1RJeU16TTNNakF6TmpnMU5EYzNOVGMyTkR3dmFXNTAKKyAgICAgICAgWldkbGNqNEtDVHhyWlhrK1lVSnBaMGx1ZERJOEwydGxlVDRLQ1R4cGJuUmxaMlZ5UGpreU1qTXpOekl3CisgICAgICAgIE16WTROVFEzTnpVNE5USThMMmx1ZEdWblpYSStDZ2s4YTJWNVBtRkVZWFJsUEM5clpYaytDZ2s4WkdGMAorICAgICAgICBaVDR5TURBMExURXdMVEkyVkRFd09qTXpPak16V2p3dlpHRjBaVDRLQ1R4clpYaytZVVJwWTNROEwydGwKKyAgICAgICAgZVQ0S0NUeGthV04wUGdvSkNUeHJaWGsrWVVaaGJITmxWbUZzZFdVOEwydGxlVDRLQ1FrOFptRnNjMlV2CisgICAgICAgIFBnb0pDVHhyWlhrK1lWUnlkV1ZXWVd4MVpUd3ZhMlY1UGdvSkNUeDBjblZsTHo0S0NRazhhMlY1UG1GVgorICAgICAgICBibWxqYjJSbFZtRnNkV1U4TDJ0bGVUNEtDUWs4YzNSeWFXNW5QazNEcEhOemFXY3NJRTFodzU4OEwzTjAKKyAgICAgICAgY21sdVp6NEtDUWs4YTJWNVBtRnViM1JvWlhKVGRISnBibWM4TDJ0bGVUNEtDUWs4YzNSeWFXNW5QaVpzCisgICAgICAgIGREdG9aV3hzYnlBbVlXMXdPeUFuYUdrbklIUm9aWEpsSVNabmREczhMM04wY21sdVp6NEtDUWs4YTJWNQorICAgICAgICBQbVJsWlhCbGNrUnBZM1E4TDJ0bGVUNEtDUWs4WkdsamRENEtDUWtKUEd0bGVUNWhQQzlyWlhrK0Nna0oKKyAgICAgICAgQ1R4cGJuUmxaMlZ5UGpFM1BDOXBiblJsWjJWeVBnb0pDUWs4YTJWNVBtSThMMnRsZVQ0S0NRa0pQSEpsCisgICAgICAgIFlXdytNekl1TlR3dmNtVmhiRDRLQ1FrSlBHdGxlVDVqUEM5clpYaytDZ2tKQ1R4aGNuSmhlVDRLQ1FrSgorICAgICAgICBDVHhwYm5SbFoyVnlQakU4TDJsdWRHVm5aWEkrQ2drSkNRazhhVzUwWldkbGNqNHlQQzlwYm5SbFoyVnkKKyAgICAgICAgUGdvSkNRa0pQSE4wY21sdVp6NTBaWGgwUEM5emRISnBibWMrQ2drSkNUd3ZZWEp5WVhrK0Nna0pQQzlrCisgICAgICAgIGFXTjBQZ29KUEM5a2FXTjBQZ29KUEd0bGVUNWhSbXh2WVhROEwydGxlVDRLQ1R4eVpXRnNQakF1TlR3dgorICAgICAgICBjbVZoYkQ0S0NUeHJaWGsrWVV4cGMzUThMMnRsZVQ0S0NUeGhjbkpoZVQ0S0NRazhjM1J5YVc1blBrRTgKKyAgICAgICAgTDNOMGNtbHVaejRLQ1FrOGMzUnlhVzVuUGtJOEwzTjBjbWx1Wno0S0NRazhhVzUwWldkbGNqNHhNand2CisgICAgICAgIGFXNTBaV2RsY2o0S0NRazhjbVZoYkQ0ek1pNDFQQzl5WldGc1Bnb0pDVHhoY25KaGVUNEtDUWtKUEdsdQorICAgICAgICBkR1ZuWlhJK01Ud3ZhVzUwWldkbGNqNEtDUWtKUEdsdWRHVm5aWEkrTWp3dmFXNTBaV2RsY2o0S0NRa0oKKyAgICAgICAgUEdsdWRHVm5aWEkrTXp3dmFXNTBaV2RsY2o0S0NRazhMMkZ5Y21GNVBnb0pQQzloY25KaGVUNEtDVHhyCisgICAgICAgIFpYaytZVTVsWjJGMGFYWmxRbWxuU1c1MFBDOXJaWGsrQ2drOGFXNTBaV2RsY2o0dE9EQXdNREF3TURBdworICAgICAgICBNREE4TDJsdWRHVm5aWEkrQ2drOGEyVjVQbUZPWldkaGRHbDJaVWx1ZER3dmEyVjVQZ29KUEdsdWRHVm4KKyAgICAgICAgWlhJK0xUVThMMmx1ZEdWblpYSStDZ2s4YTJWNVBtRlRkSEpwYm1jOEwydGxlVDRLQ1R4emRISnBibWMrCisgICAgICAgIFJHOXZaR0ZvUEM5emRISnBibWMrQ2drOGEyVjVQbUZ1Ulcxd2RIbEVhV04wUEM5clpYaytDZ2s4WkdsagorICAgICAgICBkQzgrQ2drOGEyVjVQbUZ1Ulcxd2RIbE1hWE4wUEM5clpYaytDZ2s4WVhKeVlYa3ZQZ29KUEd0bGVUNWgKKyAgICAgICAgYmtsdWREd3ZhMlY1UGdvSlBHbHVkR1ZuWlhJK056STRQQzlwYm5SbFoyVnlQZ29KUEd0bGVUNXVaWE4wCisgICAgICAgIFpXUkVZWFJoUEM5clpYaytDZ2s4WVhKeVlYaytDZ2tKUEdSaGRHRStDZ2tKVUVkNGRtUklUV2RpTWxsbgorICAgICAgICBXVzFzZFZsWVNqVkpSMlF4WW0xekswRkJSVU5CZW5oellqTlNla2xIT1cxSlIwcHdZbTFHZVdWVFFtNWsKKyAgICAgICAgVnpWeUNna0pVR2RCUWtGblRUaGlSemt3WTNsQ2RscHBRbWxoVnpWb1kyNXJaMW96Vm5WaGVqUkJRVkZKCisgICAgICAgIFJGQkhlSFprU0UxbllqSlpaMWx0YkhWWldFbzFDZ2tKU1Vka01XSnRjeXRCUVVWRFFYcDRjMkl6VW5wSgorICAgICAgICBSemx0U1VkS2NHSnRSbmxsVTBKdVpGYzFjbEJuUVVKQlowMDRZa2M1TUdONVFuWmFhVUpwQ2drSllWYzEKKyAgICAgICAgYUdOdWEyZGFNMVoxWVhvMFFVRlJTVVJRUjNoMlpFaE5aMkl5V1dkWmJXeDFXVmhLTlVsSFpERmliWE1yCisgICAgICAgIFFVRkZRMEY2ZUhOaU0xSjZDZ2tKU1VjNWJVbEhTbkJpYlVaNVpWTkNibVJYTlhKUVowRkNRV2ROT0dKSAorICAgICAgICBPVEJqZVVKMldtbENhV0ZYTldoamJtdG5Xak5XZFdGNk5FRkJVVWxFQ2drSlVFZDRkbVJJVFdkaU1sbG4KKyAgICAgICAgV1cxc2RWbFlTalZKUjJReFltMXpLMEZCUlVOQmR6MDlDZ2tKUEM5a1lYUmhQZ29KUEM5aGNuSmhlVDRLCisgICAgICAgIENUeHJaWGsrYzI5dFpVUmhkR0U4TDJ0bGVUNEtDVHhrWVhSaFBnb0pVRWRLY0dKdFJubGxVMEp1WkZjMQorICAgICAgICBjbEJuUFQwS0NUd3ZaR0YwWVQ0S0NUeHJaWGsrYzI5dFpVMXZjbVZFWVhSaFBDOXJaWGsrQ2drOFpHRjAKKyAgICAgICAgWVQ0S0NWQkhlSFprU0UxbllqSlpaMWx0YkhWWldFbzFTVWRrTVdKdGN5dEJRVVZEUVhwNGMySXpVbnBKCisgICAgICAgIFJ6bHRTVWRLY0dKdFJubGxVMEp1WkZjMWNsQm5RVUpCWjAwNENnbGlSemt3WTNsQ2RscHBRbWxoVnpWbworICAgICAgICBZMjVyWjFvelZuVmhlalJCUVZGSlJGQkhlSFprU0UxbllqSlpaMWx0YkhWWldFbzFTVWRrTVdKdGN5dEIKKyAgICAgICAgUVVWRFFYcDRjd29KWWpOU2VrbEhPVzFKUjBwd1ltMUdlV1ZUUW01a1Z6VnlVR2RCUWtGblRUaGlSemt3CisgICAgICAgIFkzbENkbHBwUW1saFZ6Vm9ZMjVyWjFvelZuVmhlalJCUVZGSlJGQkhlSFlLQ1dSSVRXZGlNbGxuV1cxcworICAgICAgICBkVmxZU2pWSlIyUXhZbTF6SzBGQlJVTkJlbmh6WWpOU2VrbEhPVzFKUjBwd1ltMUdlV1ZUUW01a1Z6VnkKKyAgICAgICAgVUdkQlFrRm5UVGhpUnprd0NnbGplVUoyV21sQ2FXRlhOV2hqYm10bldqTldkV0Y2TkVGQlVVbEVVRWQ0CisgICAgICAgIGRtUklUV2RpTWxsbldXMXNkVmxZU2pWSlIyUXhZbTF6SzBGQlJVTkJkejA5Q2drOEwyUmhkR0UrQ2drOAorICAgICAgICBhMlY1UHNPRlltVnVjbUZoUEM5clpYaytDZ2s4YzNSeWFXNW5QbFJvWVhRZ2QyRnpJR0VnZFc1cFkyOWsKKyAgICAgICAgWlNCclpYa3VQQzl6ZEhKcGJtYytDand2WkdsamRENEtQQzl3YkdsemRENEsnJycpLAorICAgIHBsaXN0bGliLkZNVF9CSU5BUlk6IGJpbmFzY2lpLmEyYl9iYXNlNjQoYicnJworICAgICAgICBZbkJzYVhOME1ERGZFQkFCQWdNRUJRWUhDQWtLQ3d3TkRnOFFFUklURkNncEx6QXhNak0wTlRjMk9GZGgKKyAgICAgICAgUW1sblNXNTBXR0ZDYVdkSmJuUXlWV0ZFWVhSbFZXRkVhV04wVm1GR2JHOWhkRlZoVEdsemRGOFFEMkZPCisgICAgICAgIFpXZGhkR2wyWlVKcFowbHVkRnhoVG1WbllYUnBkbVZKYm5SWFlWTjBjbWx1WjF0aGJrVnRjSFI1UkdsagorICAgICAgICBkRnRoYmtWdGNIUjVUR2x6ZEZWaGJrbHVkRnB1WlhOMFpXUkVZWFJoV0hOdmJXVkVZWFJoWEhOdmJXVk4KKyAgICAgICAgYjNKbFJHRjBZV2NBeFFCaUFHVUFiZ0J5QUdFQVlSTi8vLy8vLy8vLzFCUUFBQUFBQUFBQUFJQUFBQUFBCisgICAgICAgIEFBQXNNMEdjdVgzMEFBQUExUlVXRnhnWkdoc2NIUjViWVVaaGJITmxWbUZzZFdWYVlWUnlkV1ZXWVd4MQorICAgICAgICBaVjFoVlc1cFkyOWtaVlpoYkhWbFhXRnViM1JvWlhKVGRISnBibWRhWkdWbGNHVnlSR2xqZEFnSmF3Qk4KKyAgICAgICAgQU9RQWN3QnpBR2tBWndBc0FDQUFUUUJoQU45ZkVCVThhR1ZzYkc4Z0ppQW5hR2tuSUhSb1pYSmxJVDdUCisgICAgICAgIEh5QWhJaU1rVVdGUllsRmpFQkVqUUVCQUFBQUFBQUNqSlNZbkVBRVFBbFIwWlhoMEl6L2dBQUFBQUFBQQorICAgICAgICBwU29yTENNdFVVRlJRaEFNb3lVbUxoQURFLy8vLysxZm9PQUFFLy8vLy8vLy8vLzdWa1J2YjJSaGFOQ2cKKyAgICAgICAgRVFMWW9UWlBFUG84Ykc5MGN5QnZaaUJpYVc1aGNua2daM1Z1YXo0QUFRSURQR3h2ZEhNZ2IyWWdZbWx1CisgICAgICAgIFlYSjVJR2QxYm1zK0FBRUNBenhzYjNSeklHOW1JR0pwYm1GeWVTQm5kVzVyUGdBQkFnTThiRzkwY3lCdgorICAgICAgICBaaUJpYVc1aGNua2daM1Z1YXo0QUFRSURQR3h2ZEhNZ2IyWWdZbWx1WVhKNUlHZDFibXMrQUFFQ0F6eHMKKyAgICAgICAgYjNSeklHOW1JR0pwYm1GeWVTQm5kVzVyUGdBQkFnTThiRzkwY3lCdlppQmlhVzVoY25rZ1ozVnVhejRBCisgICAgICAgIEFRSURQR3h2ZEhNZ2IyWWdZbWx1WVhKNUlHZDFibXMrQUFFQ0F6eHNiM1J6SUc5bUlHSnBibUZ5ZVNCbgorICAgICAgICBkVzVyUGdBQkFnTThiRzkwY3lCdlppQmlhVzVoY25rZ1ozVnVhejRBQVFJRFRUeGlhVzVoY25rZ1ozVnUKKyAgICAgICAgYXo1ZkVCZFVhR0YwSUhkaGN5QmhJSFZ1YVdOdlpHVWdhMlY1TGdBSUFDc0FNd0E4QUVJQVNBQlBBRlVBCisgICAgICAgIFp3QjBBSHdBaUFDVUFKb0FwUUN1QUxzQXlnRFRBT1FBN1FENEFRUUJEd0VkQVNzQk5nRTNBVGdCVHdGbgorICAgICAgICBBVzRCY0FGeUFYUUJkZ0YvQVlNQmhRR0hBWXdCbFFHYkFaMEJud0doQWFVQnB3R3dBYmtCd0FIQkFjSUIKKyAgICAgICAgeFFISEFzUUMwZ0FBQUFBQUFBSUJBQUFBQUFBQUFEa0FBQUFBQUFBQUFBQUFBQUFBQUFMcycnJyksCit9CiAKIAogY2xhc3MgVGVzdFBsaXN0bGliKHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTk5LDEyICsxMDAsMTYgQEAKICAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAgcGFzcwogCi0gICAgZGVmIF9jcmVhdGUoc2VsZik6CisgICAgZGVmIF9jcmVhdGUoc2VsZiwgZm10PU5vbmUpOgogICAgICAgICBwbCA9IGRpY3QoCiAgICAgICAgICAgICBhU3RyaW5nPSJEb29kYWgiLAogICAgICAgICAgICAgYUxpc3Q9WyJBIiwgIkIiLCAxMiwgMzIuNSwgWzEsIDIsIDNdXSwKICAgICAgICAgICAgIGFGbG9hdCA9IDAuNSwKICAgICAgICAgICAgIGFuSW50ID0gNzI4LAorICAgICAgICAgICAgYUJpZ0ludCA9IDIgKiogNjMgLSA0NCwKKyAgICAgICAgICAgIGFCaWdJbnQyID0gMiAqKiA2MyArIDQ0LAorICAgICAgICAgICAgYU5lZ2F0aXZlSW50ID0gLTUsCisgICAgICAgICAgICBhTmVnYXRpdmVCaWdJbnQgPSAtODAwMDAwMDAwMDAsCiAgICAgICAgICAgICBhRGljdD1kaWN0KAogICAgICAgICAgICAgICAgIGFub3RoZXJTdHJpbmc9IjxoZWxsbyAmICdoaScgdGhlcmUhPiIsCiAgICAgICAgICAgICAgICAgYVVuaWNvZGVWYWx1ZT0nTVx4ZTRzc2lnLCBNYVx4ZGYnLApAQCAtMTEyLDkgKzExNyw5IEBACiAgICAgICAgICAgICAgICAgYUZhbHNlVmFsdWU9RmFsc2UsCiAgICAgICAgICAgICAgICAgZGVlcGVyRGljdD1kaWN0KGE9MTcsIGI9MzIuNSwgYz1bMSwgMiwgInRleHQiXSksCiAgICAgICAgICAgICApLAotICAgICAgICAgICAgc29tZURhdGEgPSBwbGlzdGxpYi5EYXRhKGIiPGJpbmFyeSBndW5rPiIpLAotICAgICAgICAgICAgc29tZU1vcmVEYXRhID0gcGxpc3RsaWIuRGF0YShiIjxsb3RzIG9mIGJpbmFyeSBndW5rPlwwXDFcMlwzIiAqIDEwKSwKLSAgICAgICAgICAgIG5lc3RlZERhdGEgPSBbcGxpc3RsaWIuRGF0YShiIjxsb3RzIG9mIGJpbmFyeSBndW5rPlwwXDFcMlwzIiAqIDEwKV0sCisgICAgICAgICAgICBzb21lRGF0YSA9IGIiPGJpbmFyeSBndW5rPiIsCisgICAgICAgICAgICBzb21lTW9yZURhdGEgPSBiIjxsb3RzIG9mIGJpbmFyeSBndW5rPlwwXDFcMlwzIiAqIDEwLAorICAgICAgICAgICAgbmVzdGVkRGF0YSA9IFtiIjxsb3RzIG9mIGJpbmFyeSBndW5rPlwwXDFcMlwzIiAqIDEwXSwKICAgICAgICAgICAgIGFEYXRlID0gZGF0ZXRpbWUuZGF0ZXRpbWUoMjAwNCwgMTAsIDI2LCAxMCwgMzMsIDMzKSwKICAgICAgICAgICAgIGFuRW1wdHlEaWN0ID0gZGljdCgpLAogICAgICAgICAgICAgYW5FbXB0eUxpc3QgPSBsaXN0KCkKQEAgLTEyOSw0OSArMTM0LDIyMCBAQAogCiAgICAgZGVmIHRlc3RfaW8oc2VsZik6CiAgICAgICAgIHBsID0gc2VsZi5fY3JlYXRlKCkKLSAgICAgICAgcGxpc3RsaWIud3JpdGVQbGlzdChwbCwgc3VwcG9ydC5URVNURk4pCi0gICAgICAgIHBsMiA9IHBsaXN0bGliLnJlYWRQbGlzdChzdXBwb3J0LlRFU1RGTikKKyAgICAgICAgd2l0aCBvcGVuKHN1cHBvcnQuVEVTVEZOLCAnd2InKSBhcyBmcDoKKyAgICAgICAgICAgIHBsaXN0bGliLmR1bXAocGwsIGZwKQorCisgICAgICAgIHdpdGggb3BlbihzdXBwb3J0LlRFU1RGTiwgJ3JiJykgYXMgZnA6CisgICAgICAgICAgICBwbDIgPSBwbGlzdGxpYi5sb2FkKGZwKQorCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGljdChwbCksIGRpY3QocGwyKSkKIAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvciwgcGxpc3RsaWIuZHVtcCwgcGwsICdmaWxlbmFtZScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yLCBwbGlzdGxpYi5sb2FkLCAnZmlsZW5hbWUnKQorCisgICAgZGVmIHRlc3RfaW52YWxpZF90eXBlKHNlbGYpOgorICAgICAgICBwbCA9IFsgb2JqZWN0KCkgXQorCisgICAgICAgIGZvciBmbXQgaW4gQUxMX0ZPUk1BVFM6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChmbXQ9Zm10KToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHBsaXN0bGliLmR1bXBzLCBwbCwgZm10PWZtdCkKKworICAgIGRlZiB0ZXN0X2ludChzZWxmKToKKyAgICAgICAgZm9yIHBsIGluIFswLCAyKio4LTEsIDIqKjgsIDIqKjE2LTEsIDIqKjE2LCAyKiozMi0xLCAyKiozMiwKKyAgICAgICAgICAgICAgICAgICAyKio2My0xLCAyKio2NC0xLCAxLCAtMioqNjNdOgorICAgICAgICAgICAgZm9yIGZtdCBpbiBBTExfRk9STUFUUzoKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChwbD1wbCwgZm10PWZtdCk6CisgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBwbGlzdGxpYi5kdW1wcyhwbCwgZm10PWZtdCkKKyAgICAgICAgICAgICAgICAgICAgcGwyID0gcGxpc3RsaWIubG9hZHMoZGF0YSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHBsMiwgaW50KQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBsLCBwbDIpCisgICAgICAgICAgICAgICAgICAgIGRhdGEyID0gcGxpc3RsaWIuZHVtcHMocGwyLCBmbXQ9Zm10KQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIGRhdGEyKQorCisgICAgICAgIGZvciBmbXQgaW4gQUxMX0ZPUk1BVFM6CisgICAgICAgICAgICBmb3IgcGwgaW4gKDIgKiogNjQgKyAxLCAyICoqIDEyNy0xLCAtMioqNjQsIC0yICoqIDEyNyk6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QocGw9cGwsIGZtdD1mbXQpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBwbGlzdGxpYi5kdW1wcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGwsIGZtdD1mbXQpCisKICAgICBkZWYgdGVzdF9ieXRlcyhzZWxmKToKICAgICAgICAgcGwgPSBzZWxmLl9jcmVhdGUoKQotICAgICAgICBkYXRhID0gcGxpc3RsaWIud3JpdGVQbGlzdFRvQnl0ZXMocGwpCi0gICAgICAgIHBsMiA9IHBsaXN0bGliLnJlYWRQbGlzdEZyb21CeXRlcyhkYXRhKQorICAgICAgICBkYXRhID0gcGxpc3RsaWIuZHVtcHMocGwpCisgICAgICAgIHBsMiA9IHBsaXN0bGliLmxvYWRzKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZShwbCwgcGxpc3RsaWIuX0ludGVybmFsRGljdCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWN0KHBsKSwgZGljdChwbDIpKQotICAgICAgICBkYXRhMiA9IHBsaXN0bGliLndyaXRlUGxpc3RUb0J5dGVzKHBsMikKKyAgICAgICAgZGF0YTIgPSBwbGlzdGxpYi5kdW1wcyhwbDIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgZGF0YTIpCiAKICAgICBkZWYgdGVzdF9pbmRlbnRhdGlvbl9hcnJheShzZWxmKToKLSAgICAgICAgZGF0YSA9IFtbW1tbW1tbeyd0ZXN0JzogcGxpc3RsaWIuRGF0YShiJ2FhYWFhYScpfV1dXV1dXV1dCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGxpc3RsaWIucmVhZFBsaXN0RnJvbUJ5dGVzKHBsaXN0bGliLndyaXRlUGxpc3RUb0J5dGVzKGRhdGEpKSwgZGF0YSkKKyAgICAgICAgZGF0YSA9IFtbW1tbW1tbeyd0ZXN0JzogYidhYWFhYWEnfV1dXV1dXV1dCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGxpc3RsaWIubG9hZHMocGxpc3RsaWIuZHVtcHMoZGF0YSkpLCBkYXRhKQogCiAgICAgZGVmIHRlc3RfaW5kZW50YXRpb25fZGljdChzZWxmKToKLSAgICAgICAgZGF0YSA9IHsnMSc6IHsnMic6IHsnMyc6IHsnNCc6IHsnNSc6IHsnNic6IHsnNyc6IHsnOCc6IHsnOSc6IHBsaXN0bGliLkRhdGEoYidhYWFhYWEnKX19fX19fX19fQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBsaXN0bGliLnJlYWRQbGlzdEZyb21CeXRlcyhwbGlzdGxpYi53cml0ZVBsaXN0VG9CeXRlcyhkYXRhKSksIGRhdGEpCisgICAgICAgIGRhdGEgPSB7JzEnOiB7JzInOiB7JzMnOiB7JzQnOiB7JzUnOiB7JzYnOiB7JzcnOiB7JzgnOiB7JzknOiBiJ2FhYWFhYSd9fX19fX19fX0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwbGlzdGxpYi5sb2FkcyhwbGlzdGxpYi5kdW1wcyhkYXRhKSksIGRhdGEpCiAKICAgICBkZWYgdGVzdF9pbmRlbnRhdGlvbl9kaWN0X21peChzZWxmKToKLSAgICAgICAgZGF0YSA9IHsnMSc6IHsnMic6IFt7JzMnOiBbW1tbW3sndGVzdCc6IHBsaXN0bGliLkRhdGEoYidhYWFhYWEnKX1dXV1dXX1dfX0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwbGlzdGxpYi5yZWFkUGxpc3RGcm9tQnl0ZXMocGxpc3RsaWIud3JpdGVQbGlzdFRvQnl0ZXMoZGF0YSkpLCBkYXRhKQorICAgICAgICBkYXRhID0geycxJzogeycyJzogW3snMyc6IFtbW1tbeyd0ZXN0JzogYidhYWFhYWEnfV1dXV1dfV19fQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBsaXN0bGliLmxvYWRzKHBsaXN0bGliLmR1bXBzKGRhdGEpKSwgZGF0YSkKIAogICAgIGRlZiB0ZXN0X2FwcGxlZm9ybWF0dGluZyhzZWxmKToKLSAgICAgICAgcGwgPSBwbGlzdGxpYi5yZWFkUGxpc3RGcm9tQnl0ZXMoVEVTVERBVEEpCi0gICAgICAgIGRhdGEgPSBwbGlzdGxpYi53cml0ZVBsaXN0VG9CeXRlcyhwbCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBURVNUREFUQSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkIGRhdGEgd2FzIG5vdCBpZGVudGljYWwgdG8gQXBwbGUncyBvdXRwdXQiKQorICAgICAgICBmb3IgdXNlX2J1aWx0aW5fdHlwZXMgaW4gKFRydWUsIEZhbHNlKToKKyAgICAgICAgICAgIGZvciBmbXQgaW4gQUxMX0ZPUk1BVFM6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoZm10PWZtdCwgdXNlX2J1aWx0aW5fdHlwZXM9dXNlX2J1aWx0aW5fdHlwZXMpOgorICAgICAgICAgICAgICAgICAgICBwbCA9IHBsaXN0bGliLmxvYWRzKFRFU1REQVRBW2ZtdF0sCisgICAgICAgICAgICAgICAgICAgICAgICB1c2VfYnVpbHRpbl90eXBlcz11c2VfYnVpbHRpbl90eXBlcykKKyAgICAgICAgICAgICAgICAgICAgZGF0YSA9IHBsaXN0bGliLmR1bXBzKHBsLCBmbXQ9Zm10KQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIFRFU1REQVRBW2ZtdF0sCisgICAgICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkIGRhdGEgd2FzIG5vdCBpZGVudGljYWwgdG8gQXBwbGUncyBvdXRwdXQiKQorCiAKICAgICBkZWYgdGVzdF9hcHBsZWZvcm1hdHRpbmdmcm9tbGl0ZXJhbChzZWxmKToKLSAgICAgICAgcGwgPSBzZWxmLl9jcmVhdGUoKQotICAgICAgICBwbDIgPSBwbGlzdGxpYi5yZWFkUGxpc3RGcm9tQnl0ZXMoVEVTVERBVEEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGljdChwbCksIGRpY3QocGwyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkIGRhdGEgd2FzIG5vdCBpZGVudGljYWwgdG8gQXBwbGUncyBvdXRwdXQiKQorICAgICAgICBzZWxmLm1heERpZmYgPSBOb25lCisgICAgICAgIGZvciBmbXQgaW4gQUxMX0ZPUk1BVFM6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChmbXQ9Zm10KToKKyAgICAgICAgICAgICAgICBwbCA9IHNlbGYuX2NyZWF0ZShmbXQ9Zm10KQorICAgICAgICAgICAgICAgIHBsMiA9IHBsaXN0bGliLmxvYWRzKFRFU1REQVRBW2ZtdF0sIGZtdD1mbXQpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWN0KHBsKSwgZGljdChwbDIpLAorICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkIGRhdGEgd2FzIG5vdCBpZGVudGljYWwgdG8gQXBwbGUncyBvdXRwdXQiKQorICAgICAgICAgICAgICAgIHBsMiA9IHBsaXN0bGliLmxvYWRzKFRFU1REQVRBW2ZtdF0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWN0KHBsKSwgZGljdChwbDIpLAorICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkIGRhdGEgd2FzIG5vdCBpZGVudGljYWwgdG8gQXBwbGUncyBvdXRwdXQiKQogCiAgICAgZGVmIHRlc3RfYnl0ZXNpbyhzZWxmKToKLSAgICAgICAgZnJvbSBpbyBpbXBvcnQgQnl0ZXNJTwotICAgICAgICBiID0gQnl0ZXNJTygpCi0gICAgICAgIHBsID0gc2VsZi5fY3JlYXRlKCkKLSAgICAgICAgcGxpc3RsaWIud3JpdGVQbGlzdChwbCwgYikKLSAgICAgICAgcGwyID0gcGxpc3RsaWIucmVhZFBsaXN0KEJ5dGVzSU8oYi5nZXR2YWx1ZSgpKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWN0KHBsKSwgZGljdChwbDIpKQorICAgICAgICBmb3IgZm10IGluIEFMTF9GT1JNQVRTOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoZm10PWZtdCk6CisgICAgICAgICAgICAgICAgYiA9IEJ5dGVzSU8oKQorICAgICAgICAgICAgICAgIHBsID0gc2VsZi5fY3JlYXRlKGZtdD1mbXQpCisgICAgICAgICAgICAgICAgcGxpc3RsaWIuZHVtcChwbCwgYiwgZm10PWZtdCkKKyAgICAgICAgICAgICAgICBwbDIgPSBwbGlzdGxpYi5sb2FkKEJ5dGVzSU8oYi5nZXR2YWx1ZSgpKSwgZm10PWZtdCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpY3QocGwpLCBkaWN0KHBsMikpCisgICAgICAgICAgICAgICAgcGwyID0gcGxpc3RsaWIubG9hZChCeXRlc0lPKGIuZ2V0dmFsdWUoKSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWN0KHBsKSwgZGljdChwbDIpKQorCisgICAgZGVmIHRlc3Rfa2V5c29ydF9ieXRlc2lvKHNlbGYpOgorICAgICAgICBwbCA9IGNvbGxlY3Rpb25zLk9yZGVyZWREaWN0KCkKKyAgICAgICAgcGxbJ2InXSA9IDEKKyAgICAgICAgcGxbJ2EnXSA9IDIKKyAgICAgICAgcGxbJ2MnXSA9IDMKKworICAgICAgICBmb3IgZm10IGluIEFMTF9GT1JNQVRTOgorICAgICAgICAgICAgZm9yIHNvcnRfa2V5cyBpbiAoRmFsc2UsIFRydWUpOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGZtdD1mbXQsIHNvcnRfa2V5cz1zb3J0X2tleXMpOgorICAgICAgICAgICAgICAgICAgICBiID0gQnl0ZXNJTygpCisKKyAgICAgICAgICAgICAgICAgICAgcGxpc3RsaWIuZHVtcChwbCwgYiwgZm10PWZtdCwgc29ydF9rZXlzPXNvcnRfa2V5cykKKyAgICAgICAgICAgICAgICAgICAgcGwyID0gcGxpc3RsaWIubG9hZChCeXRlc0lPKGIuZ2V0dmFsdWUoKSksCisgICAgICAgICAgICAgICAgICAgICAgICBkaWN0X3R5cGU9Y29sbGVjdGlvbnMuT3JkZXJlZERpY3QpCisKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWN0KHBsKSwgZGljdChwbDIpKQorICAgICAgICAgICAgICAgICAgICBpZiBzb3J0X2tleXM6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QocGwyLmtleXMoKSksIFsnYScsICdiJywgJ2MnXSkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChwbDIua2V5cygpKSwgWydiJywgJ2EnLCAnYyddKQorCisgICAgZGVmIHRlc3Rfa2V5c29ydChzZWxmKToKKyAgICAgICAgcGwgPSBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdCgpCisgICAgICAgIHBsWydiJ10gPSAxCisgICAgICAgIHBsWydhJ10gPSAyCisgICAgICAgIHBsWydjJ10gPSAzCisKKyAgICAgICAgZm9yIGZtdCBpbiBBTExfRk9STUFUUzoKKyAgICAgICAgICAgIGZvciBzb3J0X2tleXMgaW4gKEZhbHNlLCBUcnVlKToKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChmbXQ9Zm10LCBzb3J0X2tleXM9c29ydF9rZXlzKToKKyAgICAgICAgICAgICAgICAgICAgZGF0YSA9IHBsaXN0bGliLmR1bXBzKHBsLCBmbXQ9Zm10LCBzb3J0X2tleXM9c29ydF9rZXlzKQorICAgICAgICAgICAgICAgICAgICBwbDIgPSBwbGlzdGxpYi5sb2FkcyhkYXRhLCBkaWN0X3R5cGU9Y29sbGVjdGlvbnMuT3JkZXJlZERpY3QpCisKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWN0KHBsKSwgZGljdChwbDIpKQorICAgICAgICAgICAgICAgICAgICBpZiBzb3J0X2tleXM6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QocGwyLmtleXMoKSksIFsnYScsICdiJywgJ2MnXSkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChwbDIua2V5cygpKSwgWydiJywgJ2EnLCAnYyddKQorCisgICAgZGVmIHRlc3Rfa2V5c19ub19zdHJpbmcoc2VsZik6CisgICAgICAgIHBsID0geyA0MjogJ2FOdW1iZXInIH0KKworICAgICAgICBmb3IgZm10IGluIEFMTF9GT1JNQVRTOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoZm10PWZtdCk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwbGlzdGxpYi5kdW1wcywgcGwsIGZtdD1mbXQpCisKKyAgICAgICAgICAgICAgICBiID0gQnl0ZXNJTygpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwbGlzdGxpYi5kdW1wLCBwbCwgYiwgZm10PWZtdCkKKworICAgIGRlZiB0ZXN0X3NraXBrZXlzKHNlbGYpOgorICAgICAgICBwbCA9IHsKKyAgICAgICAgICAgIDQyOiAnYU51bWJlcicsCisgICAgICAgICAgICAnc25ha2UnOiAnYVdvcmQnLAorICAgICAgICB9CisKKyAgICAgICAgZm9yIGZtdCBpbiBBTExfRk9STUFUUzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGZtdD1mbXQpOgorICAgICAgICAgICAgICAgIGRhdGEgPSBwbGlzdGxpYi5kdW1wcygKKyAgICAgICAgICAgICAgICAgICAgcGwsIGZtdD1mbXQsIHNraXBrZXlzPVRydWUsIHNvcnRfa2V5cz1GYWxzZSkKKworICAgICAgICAgICAgICAgIHBsMiA9IHBsaXN0bGliLmxvYWRzKGRhdGEpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwbDIsIHsnc25ha2UnOiAnYVdvcmQnfSkKKworICAgICAgICAgICAgICAgIGZwID0gQnl0ZXNJTygpCisgICAgICAgICAgICAgICAgcGxpc3RsaWIuZHVtcCgKKyAgICAgICAgICAgICAgICAgICAgcGwsIGZwLCBmbXQ9Zm10LCBza2lwa2V5cz1UcnVlLCBzb3J0X2tleXM9RmFsc2UpCisgICAgICAgICAgICAgICAgZGF0YSA9IGZwLmdldHZhbHVlKCkKKyAgICAgICAgICAgICAgICBwbDIgPSBwbGlzdGxpYi5sb2FkcyhmcC5nZXR2YWx1ZSgpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGwyLCB7J3NuYWtlJzogJ2FXb3JkJ30pCisKKyAgICBkZWYgdGVzdF90dXBsZV9tZW1iZXJzKHNlbGYpOgorICAgICAgICBwbCA9IHsKKyAgICAgICAgICAgICdmaXJzdCc6ICgxLCAyKSwKKyAgICAgICAgICAgICdzZWNvbmQnOiAoMSwgMiksCisgICAgICAgICAgICAndGhpcmQnOiAoMywgNCksCisgICAgICAgIH0KKworICAgICAgICBmb3IgZm10IGluIEFMTF9GT1JNQVRTOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoZm10PWZtdCk6CisgICAgICAgICAgICAgICAgZGF0YSA9IHBsaXN0bGliLmR1bXBzKHBsLCBmbXQ9Zm10KQorICAgICAgICAgICAgICAgIHBsMiA9IHBsaXN0bGliLmxvYWRzKGRhdGEpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwbDIsIHsKKyAgICAgICAgICAgICAgICAgICAgJ2ZpcnN0JzogWzEsIDJdLAorICAgICAgICAgICAgICAgICAgICAnc2Vjb25kJzogWzEsIDJdLAorICAgICAgICAgICAgICAgICAgICAndGhpcmQnOiBbMywgNF0sCisgICAgICAgICAgICAgICAgfSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90KHBsMlsnZmlyc3QnXSwgcGwyWydzZWNvbmQnXSkKKworICAgIGRlZiB0ZXN0X2xpc3RfbWVtYmVycyhzZWxmKToKKyAgICAgICAgcGwgPSB7CisgICAgICAgICAgICAnZmlyc3QnOiBbMSwgMl0sCisgICAgICAgICAgICAnc2Vjb25kJzogWzEsIDJdLAorICAgICAgICAgICAgJ3RoaXJkJzogWzMsIDRdLAorICAgICAgICB9CisKKyAgICAgICAgZm9yIGZtdCBpbiBBTExfRk9STUFUUzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGZtdD1mbXQpOgorICAgICAgICAgICAgICAgIGRhdGEgPSBwbGlzdGxpYi5kdW1wcyhwbCwgZm10PWZtdCkKKyAgICAgICAgICAgICAgICBwbDIgPSBwbGlzdGxpYi5sb2FkcyhkYXRhKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGwyLCB7CisgICAgICAgICAgICAgICAgICAgICdmaXJzdCc6IFsxLCAyXSwKKyAgICAgICAgICAgICAgICAgICAgJ3NlY29uZCc6IFsxLCAyXSwKKyAgICAgICAgICAgICAgICAgICAgJ3RoaXJkJzogWzMsIDRdLAorICAgICAgICAgICAgICAgIH0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdChwbDJbJ2ZpcnN0J10sIHBsMlsnc2Vjb25kJ10pCisKKyAgICBkZWYgdGVzdF9kaWN0X21lbWJlcnMoc2VsZik6CisgICAgICAgIHBsID0geworICAgICAgICAgICAgJ2ZpcnN0JzogeydhJzogMX0sCisgICAgICAgICAgICAnc2Vjb25kJzogeydhJzogMX0sCisgICAgICAgICAgICAndGhpcmQnOiB7J2InOiAyIH0sCisgICAgICAgIH0KKworICAgICAgICBmb3IgZm10IGluIEFMTF9GT1JNQVRTOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoZm10PWZtdCk6CisgICAgICAgICAgICAgICAgZGF0YSA9IHBsaXN0bGliLmR1bXBzKHBsLCBmbXQ9Zm10KQorICAgICAgICAgICAgICAgIHBsMiA9IHBsaXN0bGliLmxvYWRzKGRhdGEpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwbDIsIHsKKyAgICAgICAgICAgICAgICAgICAgJ2ZpcnN0JzogeydhJzogMX0sCisgICAgICAgICAgICAgICAgICAgICdzZWNvbmQnOiB7J2EnOiAxfSwKKyAgICAgICAgICAgICAgICAgICAgJ3RoaXJkJzogeydiJzogMiB9LAorICAgICAgICAgICAgICAgIH0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdChwbDJbJ2ZpcnN0J10sIHBsMlsnc2Vjb25kJ10pCiAKICAgICBkZWYgdGVzdF9jb250cm9sY2hhcmFjdGVycyhzZWxmKToKICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTI4KToKQEAgLTE3OSwyNSArMzU1LDI3IEBACiAgICAgICAgICAgICB0ZXN0U3RyaW5nID0gInN0cmluZyBjb250YWluaW5nICVzIiAlIGMKICAgICAgICAgICAgIGlmIGkgPj0gMzIgb3IgYyBpbiAiXHJcblx0IjoKICAgICAgICAgICAgICAgICAjIFxyLCBcbiBhbmQgXHQgYXJlIHRoZSBvbmx5IGxlZ2FsIGNvbnRyb2wgY2hhcnMgaW4gWE1MCi0gICAgICAgICAgICAgICAgcGxpc3RsaWIud3JpdGVQbGlzdFRvQnl0ZXModGVzdFN0cmluZykKKyAgICAgICAgICAgICAgICBwbGlzdGxpYi5kdW1wcyh0ZXN0U3RyaW5nLCBmbXQ9cGxpc3RsaWIuRk1UX1hNTCkKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGlzdGxpYi53cml0ZVBsaXN0VG9CeXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGlzdGxpYi5kdW1wcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0U3RyaW5nKQogCiAgICAgZGVmIHRlc3Rfbm9uZGljdHJvb3Qoc2VsZik6Ci0gICAgICAgIHRlc3QxID0gImFiYyIKLSAgICAgICAgdGVzdDIgPSBbMSwgMiwgMywgImFiYyJdCi0gICAgICAgIHJlc3VsdDEgPSBwbGlzdGxpYi5yZWFkUGxpc3RGcm9tQnl0ZXMocGxpc3RsaWIud3JpdGVQbGlzdFRvQnl0ZXModGVzdDEpKQotICAgICAgICByZXN1bHQyID0gcGxpc3RsaWIucmVhZFBsaXN0RnJvbUJ5dGVzKHBsaXN0bGliLndyaXRlUGxpc3RUb0J5dGVzKHRlc3QyKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0MSwgcmVzdWx0MSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0MiwgcmVzdWx0MikKKyAgICAgICAgZm9yIGZtdCBpbiBBTExfRk9STUFUUzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGZtdD1mbXQpOgorICAgICAgICAgICAgICAgIHRlc3QxID0gImFiYyIKKyAgICAgICAgICAgICAgICB0ZXN0MiA9IFsxLCAyLCAzLCAiYWJjIl0KKyAgICAgICAgICAgICAgICByZXN1bHQxID0gcGxpc3RsaWIubG9hZHMocGxpc3RsaWIuZHVtcHModGVzdDEsIGZtdD1mbXQpKQorICAgICAgICAgICAgICAgIHJlc3VsdDIgPSBwbGlzdGxpYi5sb2FkcyhwbGlzdGxpYi5kdW1wcyh0ZXN0MiwgZm10PWZtdCkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0MSwgcmVzdWx0MSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3QyLCByZXN1bHQyKQogCiAgICAgZGVmIHRlc3RfaW52YWxpZGFycmF5KHNlbGYpOgogICAgICAgICBmb3IgaSBpbiBbIjxrZXk+a2V5IGluc2lkZSBhbiBhcnJheTwva2V5PiIsCiAgICAgICAgICAgICAgICAgICAiPGtleT5rZXkgaW5zaWRlIGFuIGFycmF5Mjwva2V5PjxyZWFsPjM8L3JlYWw+IiwKICAgICAgICAgICAgICAgICAgICI8dHJ1ZS8+PGtleT5rZXkgaW5zaWRlIGFuIGFycmF5Mzwva2V5PiJdOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcGxpc3RsaWIucmVhZFBsaXN0RnJvbUJ5dGVzLAorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcGxpc3RsaWIubG9hZHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIjxwbGlzdD48YXJyYXk+JXM8L2FycmF5PjwvcGxpc3Q+IiVpKS5lbmNvZGUoKSkKIAogICAgIGRlZiB0ZXN0X2ludmFsaWRkaWN0KHNlbGYpOgpAQCAtMjA2LDIyICszODQsMTQyIEBACiAgICAgICAgICAgICAgICAgICAiPHN0cmluZz5taXNzaW5nIGtleTwvc3RyaW5nPiIsCiAgICAgICAgICAgICAgICAgICAiPGtleT5rMTwva2V5PjxzdHJpbmc+djE8L3N0cmluZz48cmVhbD41LjM8L3JlYWw+IgogICAgICAgICAgICAgICAgICAgIjxrZXk+azE8L2tleT48a2V5PmsyPC9rZXk+PHN0cmluZz5kb3VibGUga2V5PC9zdHJpbmc+Il06Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwbGlzdGxpYi5yZWFkUGxpc3RGcm9tQnl0ZXMsCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwbGlzdGxpYi5sb2FkcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiPHBsaXN0PjxkaWN0PiVzPC9kaWN0PjwvcGxpc3Q+IiVpKS5lbmNvZGUoKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHBsaXN0bGliLnJlYWRQbGlzdEZyb21CeXRlcywKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHBsaXN0bGliLmxvYWRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCI8cGxpc3Q+PGFycmF5PjxkaWN0PiVzPC9kaWN0PjwvYXJyYXk+PC9wbGlzdD4iJWkpLmVuY29kZSgpKQogCiAgICAgZGVmIHRlc3RfaW52YWxpZGludGVnZXIoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHBsaXN0bGliLnJlYWRQbGlzdEZyb21CeXRlcywKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcGxpc3RsaWIubG9hZHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiPHBsaXN0PjxpbnRlZ2VyPm5vdCBpbnRlZ2VyPC9pbnRlZ2VyPjwvcGxpc3Q+IikKIAogICAgIGRlZiB0ZXN0X2ludmFsaWRyZWFsKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwbGlzdGxpYi5yZWFkUGxpc3RGcm9tQnl0ZXMsCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHBsaXN0bGliLmxvYWRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICBiIjxwbGlzdD48aW50ZWdlcj5ub3QgcmVhbDwvaW50ZWdlcj48L3BsaXN0PiIpCiAKKyAgICBkZWYgdGVzdF94bWxfZW5jb2RpbmdzKHNlbGYpOgorICAgICAgICBiYXNlID0gVEVTVERBVEFbcGxpc3RsaWIuRk1UX1hNTF0KKworICAgICAgICBmb3IgeG1sX2VuY29kaW5nLCBlbmNvZGluZywgYm9tIGluIFsKKyAgICAgICAgICAgICAgICAgICAgKGIndXRmLTgnLCAndXRmLTgnLCBjb2RlY3MuQk9NX1VURjgpLAorICAgICAgICAgICAgICAgICAgICAoYid1dGYtMTYnLCAndXRmLTE2LWxlJywgY29kZWNzLkJPTV9VVEYxNl9MRSksCisgICAgICAgICAgICAgICAgICAgIChiJ3V0Zi0xNicsICd1dGYtMTYtYmUnLCBjb2RlY3MuQk9NX1VURjE2X0JFKSwKKyAgICAgICAgICAgICAgICAgICAgIyBFeHBhdCBkb2VzIG5vdCBzdXBwb3J0IFVURi0zMgorICAgICAgICAgICAgICAgICAgICAjKGIndXRmLTMyJywgJ3V0Zi0zMi1sZScsIGNvZGVjcy5CT01fVVRGMzJfTEUpLAorICAgICAgICAgICAgICAgICAgICAjKGIndXRmLTMyJywgJ3V0Zi0zMi1iZScsIGNvZGVjcy5CT01fVVRGMzJfQkUpLAorICAgICAgICAgICAgICAgIF06CisKKyAgICAgICAgICAgIHBsID0gc2VsZi5fY3JlYXRlKGZtdD1wbGlzdGxpYi5GTVRfWE1MKQorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoZW5jb2Rpbmc9ZW5jb2RpbmcpOgorICAgICAgICAgICAgICAgIGRhdGEgPSBiYXNlLnJlcGxhY2UoYidVVEYtOCcsIHhtbF9lbmNvZGluZykKKyAgICAgICAgICAgICAgICBkYXRhID0gYm9tICsgZGF0YS5kZWNvZGUoJ3V0Zi04JykuZW5jb2RlKGVuY29kaW5nKQorICAgICAgICAgICAgICAgIHBsMiA9IHBsaXN0bGliLmxvYWRzKGRhdGEpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWN0KHBsKSwgZGljdChwbDIpKQorCisgICAgZGVmIHRlc3Rfbm9uc3RhbmRhcmRfcmVmc19zaXplKHNlbGYpOgorICAgICAgICAjIElzc3VlICMyMTUzODogUmVmcyBhbmQgb2Zmc2V0cyBhcmUgMjQtYml0IGludGVnZXJzCisgICAgICAgIGRhdGEgPSAoYidicGxpc3QwMCcKKyAgICAgICAgICAgICAgICBiJ1x4ZDFceDAwXHgwMFx4MDFceDAwXHgwMFx4MDJRYVFiJworICAgICAgICAgICAgICAgIGInXHgwMFx4MDBceDA4XHgwMFx4MDBceDBmXHgwMFx4MDBceDExJworICAgICAgICAgICAgICAgIGInXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwJworICAgICAgICAgICAgICAgIGInXHgwM1x4MDMnCisgICAgICAgICAgICAgICAgYidceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMycKKyAgICAgICAgICAgICAgICBiJ1x4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwJworICAgICAgICAgICAgICAgIGInXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MTMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBsaXN0bGliLmxvYWRzKGRhdGEpLCB7J2EnOiAnYid9KQorCisKK2NsYXNzIFRlc3RQbGlzdGxpYkRlcHJlY2F0ZWQodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2lvX2RlcHJlY2F0ZWQoc2VsZik6CisgICAgICAgIHBsX2luID0geworICAgICAgICAgICAgJ2tleSc6IDQyLAorICAgICAgICAgICAgJ3N1Yic6IHsKKyAgICAgICAgICAgICAgICAna2V5JzogOSwKKyAgICAgICAgICAgICAgICAnYWx0JzogJ3ZhbHVlJywKKyAgICAgICAgICAgICAgICAnZGF0YSc6IGInYnVmZmVyJywKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBwbF9vdXQgPSBwbGlzdGxpYi5fSW50ZXJuYWxEaWN0KHsKKyAgICAgICAgICAgICdrZXknOiA0MiwKKyAgICAgICAgICAgICdzdWInOiBwbGlzdGxpYi5fSW50ZXJuYWxEaWN0KHsKKyAgICAgICAgICAgICAgICAna2V5JzogOSwKKyAgICAgICAgICAgICAgICAnYWx0JzogJ3ZhbHVlJywKKyAgICAgICAgICAgICAgICAnZGF0YSc6IHBsaXN0bGliLkRhdGEoYididWZmZXInKSwKKyAgICAgICAgICAgIH0pCisgICAgICAgIH0pCisKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHN1cHBvcnQudW5saW5rLCBzdXBwb3J0LlRFU1RGTikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6CisgICAgICAgICAgICBwbGlzdGxpYi53cml0ZVBsaXN0KHBsX2luLCBzdXBwb3J0LlRFU1RGTikKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgIHBsMiA9IHBsaXN0bGliLnJlYWRQbGlzdChzdXBwb3J0LlRFU1RGTikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBsX291dCwgcGwyKQorCisgICAgICAgIG9zLnVubGluayhzdXBwb3J0LlRFU1RGTikKKworICAgICAgICB3aXRoIG9wZW4oc3VwcG9ydC5URVNURk4sICd3YicpIGFzIGZwOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6CisgICAgICAgICAgICAgICAgcGxpc3RsaWIud3JpdGVQbGlzdChwbF9pbiwgZnApCisKKyAgICAgICAgd2l0aCBvcGVuKHN1cHBvcnQuVEVTVEZOLCAncmInKSBhcyBmcDoKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgorICAgICAgICAgICAgICAgIHBsMiA9IHBsaXN0bGliLnJlYWRQbGlzdChmcCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBsX291dCwgcGwyKQorCisgICAgZGVmIHRlc3RfYnl0ZXNfZGVwcmVjYXRlZChzZWxmKToKKyAgICAgICAgcGwgPSB7CisgICAgICAgICAgICAna2V5JzogNDIsCisgICAgICAgICAgICAnc3ViJzogeworICAgICAgICAgICAgICAgICdrZXknOiA5LAorICAgICAgICAgICAgICAgICdhbHQnOiAndmFsdWUnLAorICAgICAgICAgICAgICAgICdkYXRhJzogYididWZmZXInLAorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgorICAgICAgICAgICAgZGF0YSA9IHBsaXN0bGliLndyaXRlUGxpc3RUb0J5dGVzKHBsKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgorICAgICAgICAgICAgcGwyID0gcGxpc3RsaWIucmVhZFBsaXN0RnJvbUJ5dGVzKGRhdGEpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHBsMiwgcGxpc3RsaWIuX0ludGVybmFsRGljdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwbDIsIHBsaXN0bGliLl9JbnRlcm5hbERpY3QoCisgICAgICAgICAgICBrZXk9NDIsCisgICAgICAgICAgICBzdWI9cGxpc3RsaWIuX0ludGVybmFsRGljdCgKKyAgICAgICAgICAgICAgICBrZXk9OSwKKyAgICAgICAgICAgICAgICBhbHQ9J3ZhbHVlJywKKyAgICAgICAgICAgICAgICBkYXRhPXBsaXN0bGliLkRhdGEoYididWZmZXInKSwKKyAgICAgICAgICAgICkKKyAgICAgICAgKSkKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgIGRhdGEyID0gcGxpc3RsaWIud3JpdGVQbGlzdFRvQnl0ZXMocGwyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIGRhdGEyKQorCisgICAgZGVmIHRlc3RfZGF0YW9iamVjdF9kZXByZWNhdGVkKHNlbGYpOgorICAgICAgICBpbl9kYXRhID0geyAna2V5JzogcGxpc3RsaWIuRGF0YShiJ2hlbGxvJykgfQorICAgICAgICBvdXRfZGF0YSA9IHsgJ2tleSc6IGInaGVsbG8nIH0KKworICAgICAgICBidWYgPSBwbGlzdGxpYi5kdW1wcyhpbl9kYXRhKQorCisgICAgICAgIGN1ciA9IHBsaXN0bGliLmxvYWRzKGJ1ZikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdXIsIG91dF9kYXRhKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGN1ciwgaW5fZGF0YSkKKworICAgICAgICBjdXIgPSBwbGlzdGxpYi5sb2FkcyhidWYsIHVzZV9idWlsdGluX3R5cGVzPUZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGN1ciwgb3V0X2RhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3VyLCBpbl9kYXRhKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgorICAgICAgICAgICAgY3VyID0gcGxpc3RsaWIucmVhZFBsaXN0RnJvbUJ5dGVzKGJ1ZikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChjdXIsIG91dF9kYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN1ciwgaW5fZGF0YSkKKwogCiBkZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoVGVzdFBsaXN0bGliKQorICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KFRlc3RQbGlzdGxpYiwgVGVzdFBsaXN0bGliRGVwcmVjYXRlZCkKIAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wb2xsLnB5IGIvTGliL3Rlc3QvdGVzdF9wb2xsLnB5CmluZGV4IGEwN2E3MTkuLmEwYTMzMmIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcG9sbC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3BvbGwucHkKQEAgLTEsNiArMSw3IEBACiAjIFRlc3QgY2FzZSBmb3IgdGhlIG9zLnBvbGwoKSBmdW5jdGlvbgogCiBpbXBvcnQgb3MKK2ltcG9ydCBzdWJwcm9jZXNzCiBpbXBvcnQgcmFuZG9tCiBpbXBvcnQgc2VsZWN0CiB0cnk6CkBAIC0xNCw3ICsxNSw3IEBACiB0cnk6CiAgICAgc2VsZWN0LnBvbGwKIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgic2VsZWN0LnBvbGwgbm90IGRlZmluZWQgLS0gc2tpcHBpbmcgdGVzdF9wb2xsIikKKyAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgic2VsZWN0LnBvbGwgbm90IGRlZmluZWQiKQogCiAKIGRlZiBmaW5kX3JlYWR5X21hdGNoaW5nKHJlYWR5LCBmbGFnKToKQEAgLTc1LDEzICs3NiwxMSBAQAogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmcywgW01TR10gKiBOVU1fUElQRVMpCiAKLSAgICBkZWYgcG9sbF91bml0X3Rlc3RzKHNlbGYpOgorICAgIGRlZiB0ZXN0X3BvbGxfdW5pdF90ZXN0cyhzZWxmKToKICAgICAgICAgIyByZXR1cm5zIE5WQUwgZm9yIGludmFsaWQgZmlsZSBkZXNjcmlwdG9yCi0gICAgICAgIEZEID0gNDIKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgb3MuY2xvc2UoRkQpCi0gICAgICAgIGV4Y2VwdCBPU0Vycm9yOgotICAgICAgICAgICAgcGFzcworICAgICAgICBGRCwgdyA9IG9zLnBpcGUoKQorICAgICAgICBvcy5jbG9zZShGRCkKKyAgICAgICAgb3MuY2xvc2UodykKICAgICAgICAgcCA9IHNlbGVjdC5wb2xsKCkKICAgICAgICAgcC5yZWdpc3RlcihGRCkKICAgICAgICAgciA9IHAucG9sbCgpCkBAIC0xMjQsNyArMTIzLDkgQEAKIAogICAgIGRlZiB0ZXN0X3BvbGwyKHNlbGYpOgogICAgICAgICBjbWQgPSAnZm9yIGkgaW4gMCAxIDIgMyA0IDUgNiA3IDggOTsgZG8gZWNobyB0ZXN0aW5nLi4uOyBzbGVlcCAxOyBkb25lJwotICAgICAgICBwID0gb3MucG9wZW4oY21kLCAncicpCisgICAgICAgIHByb2MgPSBzdWJwcm9jZXNzLlBvcGVuKGNtZCwgc2hlbGw9VHJ1ZSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmc2l6ZT0wKQorICAgICAgICBwID0gcHJvYy5zdGRvdXQKICAgICAgICAgcG9sbHN0ZXIgPSBzZWxlY3QucG9sbCgpCiAgICAgICAgIHBvbGxzdGVyLnJlZ2lzdGVyKCBwLCBzZWxlY3QuUE9MTElOICkKICAgICAgICAgZm9yIHRvdXQgaW4gKDAsIDEwMDAsIDIwMDAsIDQwMDAsIDgwMDAsIDE2MDAwKSArICgtMSwpKjEwOgpAQCAtMTM0LDcgKzEzNSw3IEBACiAgICAgICAgICAgICBmZCwgZmxhZ3MgPSBmZGxpc3RbMF0KICAgICAgICAgICAgIGlmIGZsYWdzICYgc2VsZWN0LlBPTExIVVA6CiAgICAgICAgICAgICAgICAgbGluZSA9IHAucmVhZGxpbmUoKQotICAgICAgICAgICAgICAgIGlmIGxpbmUgIT0gIiI6CisgICAgICAgICAgICAgICAgaWYgbGluZSAhPSBiIiI6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnZXJyb3I6IHBpcGUgc2VlbXMgdG8gYmUgY2xvc2VkLCBidXQgc3RpbGwgcmV0dXJucyBkYXRhJykKICAgICAgICAgICAgICAgICBjb250aW51ZQogCkBAIC0xNDIsNiArMTQzLDcgQEAKICAgICAgICAgICAgICAgICBsaW5lID0gcC5yZWFkbGluZSgpCiAgICAgICAgICAgICAgICAgaWYgbm90IGxpbmU6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lLCBiJ3Rlc3RpbmcuLi5cbicpCiAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdVbmV4cGVjdGVkIHJldHVybiB2YWx1ZSBmcm9tIHNlbGVjdC5wb2xsOiAlcycgJSBmZGxpc3QpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3BvcGVuLnB5IGIvTGliL3Rlc3QvdGVzdF9wb3Blbi5weQppbmRleCAyMjVlNDFmLi4xMTZiM2RkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3BvcGVuLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcG9wZW4ucHkKQEAgLTU3LDYgKzU3LDEwIEBACiAgICAgICAgIHdpdGggb3MucG9wZW4oImVjaG8gaGVsbG8iKSBhcyBmOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGYpLCBbImhlbGxvXG4iXSkKIAorICAgIGRlZiB0ZXN0X2tleXdvcmRzKHNlbGYpOgorICAgICAgICB3aXRoIG9zLnBvcGVuKGNtZD0iZXhpdCAwIiwgbW9kZT0idyIsIGJ1ZmZlcmluZz0tMSk6CisgICAgICAgICAgICBwYXNzCisKIGRlZiB0ZXN0X21haW4oKToKICAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChQb3BlblRlc3QpCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcG9wbGliLnB5IGIvTGliL3Rlc3QvdGVzdF9wb3BsaWIucHkKaW5kZXggNTgwOWJlNi4uOGEzYzlmNCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9wb3BsaWIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9wb3BsaWIucHkKQEAgLTE4LDYgKzE4LDE2IEBACiBIT1NUID0gdGVzdF9zdXBwb3J0LkhPU1QKIFBPUlQgPSAwCiAKK1NVUFBPUlRTX1NTTCA9IEZhbHNlCitpZiBoYXNhdHRyKHBvcGxpYiwgJ1BPUDNfU1NMJyk6CisgICAgaW1wb3J0IHNzbAorCisgICAgU1VQUE9SVFNfU1NMID0gVHJ1ZQorICAgIENFUlRGSUxFID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykgb3Igb3MuY3VyZGlyLCAia2V5Y2VydDMucGVtIikKKyAgICBDQUZJTEUgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSBvciBvcy5jdXJkaXIsICJweWNhY2VydC5wZW0iKQorCityZXF1aXJlc19zc2wgPSBza2lwVW5sZXNzKFNVUFBPUlRTX1NTTCwgJ1NTTCBub3Qgc3VwcG9ydGVkJykKKwogIyB0aGUgZHVtbXkgZGF0YSByZXR1cm5lZCBieSBzZXJ2ZXIgd2hlbiBMSVNUIGFuZCBSRVRSIGNvbW1hbmRzIGFyZSBpc3N1ZWQKIExJU1RfUkVTUCA9IGInMSAxXHJcbjIgMlxyXG4zIDNcclxuNCA0XHJcbjUgNVxyXG4uXHJcbicKIFJFVFJfUkVTUCA9IGIiIiJGcm9tOiBwb3N0bWFzdGVyQHB5dGhvbi5vcmdcCkBAIC0zMywxMSArNDMsMTUgQEAKIAogY2xhc3MgRHVtbXlQT1AzSGFuZGxlcihhc3luY2hhdC5hc3luY19jaGF0KToKIAorICAgIENBUEFTID0geydVSURMJzogW10sICdJTVBMRU1FTlRBVElPTic6IFsncHl0aG9uLXRlc3RsaWItcG9wLXNlcnZlciddfQorCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbm4pOgogICAgICAgICBhc3luY2hhdC5hc3luY19jaGF0Ll9faW5pdF9fKHNlbGYsIGNvbm4pCiAgICAgICAgIHNlbGYuc2V0X3Rlcm1pbmF0b3IoYiJcclxuIikKICAgICAgICAgc2VsZi5pbl9idWZmZXIgPSBbXQogICAgICAgICBzZWxmLnB1c2goJytPSyBkdW1teSBwb3AzIHNlcnZlciByZWFkeS4gPHRpbWVzdGFtcD4nKQorICAgICAgICBzZWxmLnRsc19hY3RpdmUgPSBGYWxzZQorICAgICAgICBzZWxmLnRsc19zdGFydGluZyA9IEZhbHNlCiAKICAgICBkZWYgY29sbGVjdF9pbmNvbWluZ19kYXRhKHNlbGYsIGRhdGEpOgogICAgICAgICBzZWxmLmluX2J1ZmZlci5hcHBlbmQoZGF0YSkKQEAgLTExMiw2ICsxMjYsNjUgQEAKICAgICAgICAgc2VsZi5wdXNoKCcrT0sgY2xvc2luZy4nKQogICAgICAgICBzZWxmLmNsb3NlX3doZW5fZG9uZSgpCiAKKyAgICBkZWYgX2dldF9jYXBhcyhzZWxmKToKKyAgICAgICAgX2NhcGFzID0gZGljdChzZWxmLkNBUEFTKQorICAgICAgICBpZiBub3Qgc2VsZi50bHNfYWN0aXZlIGFuZCBTVVBQT1JUU19TU0w6CisgICAgICAgICAgICBfY2FwYXNbJ1NUTFMnXSA9IFtdCisgICAgICAgIHJldHVybiBfY2FwYXMKKworICAgIGRlZiBjbWRfY2FwYShzZWxmLCBhcmcpOgorICAgICAgICBzZWxmLnB1c2goJytPSyBDYXBhYmlsaXR5IGxpc3QgZm9sbG93cycpCisgICAgICAgIGlmIHNlbGYuX2dldF9jYXBhcygpOgorICAgICAgICAgICAgZm9yIGNhcCwgcGFyYW1zIGluIHNlbGYuX2dldF9jYXBhcygpLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgX2xuID0gW2NhcF0KKyAgICAgICAgICAgICAgICBpZiBwYXJhbXM6CisgICAgICAgICAgICAgICAgICAgIF9sbi5leHRlbmQocGFyYW1zKQorICAgICAgICAgICAgICAgIHNlbGYucHVzaCgnICcuam9pbihfbG4pKQorICAgICAgICBzZWxmLnB1c2goJy4nKQorCisgICAgaWYgU1VQUE9SVFNfU1NMOgorCisgICAgICAgIGRlZiBjbWRfc3RscyhzZWxmLCBhcmcpOgorICAgICAgICAgICAgaWYgc2VsZi50bHNfYWN0aXZlIGlzIEZhbHNlOgorICAgICAgICAgICAgICAgIHNlbGYucHVzaCgnK09LIEJlZ2luIFRMUyBuZWdvdGlhdGlvbicpCisgICAgICAgICAgICAgICAgdGxzX3NvY2sgPSBzc2wud3JhcF9zb2NrZXQoc2VsZi5zb2NrZXQsIGNlcnRmaWxlPUNFUlRGSUxFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9zaWRlPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9faGFuZHNoYWtlX29uX2Nvbm5lY3Q9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwcHJlc3NfcmFnZ2VkX2VvZnM9RmFsc2UpCisgICAgICAgICAgICAgICAgc2VsZi5kZWxfY2hhbm5lbCgpCisgICAgICAgICAgICAgICAgc2VsZi5zZXRfc29ja2V0KHRsc19zb2NrKQorICAgICAgICAgICAgICAgIHNlbGYudGxzX2FjdGl2ZSA9IFRydWUKKyAgICAgICAgICAgICAgICBzZWxmLnRsc19zdGFydGluZyA9IFRydWUKKyAgICAgICAgICAgICAgICBzZWxmLmluX2J1ZmZlciA9IFtdCisgICAgICAgICAgICAgICAgc2VsZi5fZG9fdGxzX2hhbmRzaGFrZSgpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYucHVzaCgnLUVSUiBDb21tYW5kIG5vdCBwZXJtaXR0ZWQgd2hlbiBUTFMgYWN0aXZlJykKKworICAgICAgICBkZWYgX2RvX3Rsc19oYW5kc2hha2Uoc2VsZik6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5zb2NrZXQuZG9faGFuZHNoYWtlKCkKKyAgICAgICAgICAgIGV4Y2VwdCBzc2wuU1NMRXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgICAgIGlmIGVyci5hcmdzWzBdIGluIChzc2wuU1NMX0VSUk9SX1dBTlRfUkVBRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLlNTTF9FUlJPUl9XQU5UX1dSSVRFKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICAgICAgZWxpZiBlcnIuYXJnc1swXSA9PSBzc2wuU1NMX0VSUk9SX0VPRjoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuaGFuZGxlX2Nsb3NlKCkKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgICAgIGlmIGVyci5hcmdzWzBdID09IGVycm5vLkVDT05OQUJPUlRFRDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuaGFuZGxlX2Nsb3NlKCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi50bHNfYWN0aXZlID0gVHJ1ZQorICAgICAgICAgICAgICAgIHNlbGYudGxzX3N0YXJ0aW5nID0gRmFsc2UKKworICAgICAgICBkZWYgaGFuZGxlX3JlYWQoc2VsZik6CisgICAgICAgICAgICBpZiBzZWxmLnRsc19zdGFydGluZzoKKyAgICAgICAgICAgICAgICBzZWxmLl9kb190bHNfaGFuZHNoYWtlKCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBhc3luY2hhdC5hc3luY19jaGF0LmhhbmRsZV9yZWFkKHNlbGYpCisgICAgICAgICAgICAgICAgZXhjZXB0IHNzbC5TU0xFT0ZFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVfY2xvc2UoKQogCiBjbGFzcyBEdW1teVBPUDNTZXJ2ZXIoYXN5bmNvcmUuZGlzcGF0Y2hlciwgdGhyZWFkaW5nLlRocmVhZCk6CiAKQEAgLTIzNiwxOSArMzA5LDQyIEBACiAgICAgICAgIHNlbGYuY2xpZW50LnVpZGwoKQogICAgICAgICBzZWxmLmNsaWVudC51aWRsKCdmb28nKQogCisgICAgZGVmIHRlc3RfY2FwYShzZWxmKToKKyAgICAgICAgY2FwYSA9IHNlbGYuY2xpZW50LmNhcGEoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ0lNUExFTUVOVEFUSU9OJyBpbiBjYXBhLmtleXMoKSkKKwogICAgIGRlZiB0ZXN0X3F1aXQoc2VsZik6CiAgICAgICAgIHJlc3AgPSBzZWxmLmNsaWVudC5xdWl0KCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3ApCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHNlbGYuY2xpZW50LnNvY2spCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHNlbGYuY2xpZW50LmZpbGUpCiAKKyAgICBAcmVxdWlyZXNfc3NsCisgICAgZGVmIHRlc3Rfc3Rsc19jYXBhKHNlbGYpOgorICAgICAgICBjYXBhID0gc2VsZi5jbGllbnQuY2FwYSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnU1RMUycgaW4gY2FwYS5rZXlzKCkpCiAKLVNVUFBPUlRTX1NTTCA9IEZhbHNlCi1pZiBoYXNhdHRyKHBvcGxpYiwgJ1BPUDNfU1NMJyk6Ci0gICAgaW1wb3J0IHNzbAorICAgIEByZXF1aXJlc19zc2wKKyAgICBkZWYgdGVzdF9zdGxzKHNlbGYpOgorICAgICAgICBleHBlY3RlZCA9IGInK09LIEJlZ2luIFRMUyBuZWdvdGlhdGlvbicKKyAgICAgICAgcmVzcCA9IHNlbGYuY2xpZW50LnN0bHMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3AsIGV4cGVjdGVkKQogCi0gICAgU1VQUE9SVFNfU1NMID0gVHJ1ZQotICAgIENFUlRGSUxFID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykgb3Igb3MuY3VyZGlyLCAia2V5Y2VydC5wZW0iKQorICAgIEByZXF1aXJlc19zc2wKKyAgICBkZWYgdGVzdF9zdGxzX2NvbnRleHQoc2VsZik6CisgICAgICAgIGV4cGVjdGVkID0gYicrT0sgQmVnaW4gVExTIG5lZ290aWF0aW9uJworICAgICAgICBjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgIGN0eC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoQ0FGSUxFKQorICAgICAgICBjdHgudmVyaWZ5X21vZGUgPSBzc2wuQ0VSVF9SRVFVSVJFRAorICAgICAgICBjdHguY2hlY2tfaG9zdG5hbWUgPSBUcnVlCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc3NsLkNlcnRpZmljYXRlRXJyb3IpOgorICAgICAgICAgICAgcmVzcCA9IHNlbGYuY2xpZW50LnN0bHMoY29udGV4dD1jdHgpCisgICAgICAgIHNlbGYuY2xpZW50ID0gcG9wbGliLlBPUDMoImxvY2FsaG9zdCIsIHNlbGYuc2VydmVyLnBvcnQsIHRpbWVvdXQ9MykKKyAgICAgICAgcmVzcCA9IHNlbGYuY2xpZW50LnN0bHMoY29udGV4dD1jdHgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzcCwgZXhwZWN0ZWQpCisKKworaWYgU1VQUE9SVFNfU1NMOgogCiAgICAgY2xhc3MgRHVtbXlQT1AzX1NTTEhhbmRsZXIoRHVtbXlQT1AzSGFuZGxlcik6CiAKQEAgLTI2MCwzNSArMzU2LDEzIEBACiAgICAgICAgICAgICBzZWxmLmRlbF9jaGFubmVsKCkKICAgICAgICAgICAgIHNlbGYuc2V0X3NvY2tldChzc2xfc29ja2V0KQogICAgICAgICAgICAgIyBNdXN0IHRyeSBoYW5kc2hha2UgYmVmb3JlIGNhbGxpbmcgcHVzaCgpCi0gICAgICAgICAgICBzZWxmLl9zc2xfYWNjZXB0aW5nID0gVHJ1ZQotICAgICAgICAgICAgc2VsZi5fZG9fc3NsX2hhbmRzaGFrZSgpCisgICAgICAgICAgICBzZWxmLnRsc19hY3RpdmUgPSBUcnVlCisgICAgICAgICAgICBzZWxmLnRsc19zdGFydGluZyA9IFRydWUKKyAgICAgICAgICAgIHNlbGYuX2RvX3Rsc19oYW5kc2hha2UoKQogICAgICAgICAgICAgc2VsZi5zZXRfdGVybWluYXRvcihiIlxyXG4iKQogICAgICAgICAgICAgc2VsZi5pbl9idWZmZXIgPSBbXQogICAgICAgICAgICAgc2VsZi5wdXNoKCcrT0sgZHVtbXkgcG9wMyBzZXJ2ZXIgcmVhZHkuIDx0aW1lc3RhbXA+JykKIAotICAgICAgICBkZWYgX2RvX3NzbF9oYW5kc2hha2Uoc2VsZik6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgc2VsZi5zb2NrZXQuZG9faGFuZHNoYWtlKCkKLSAgICAgICAgICAgIGV4Y2VwdCBzc2wuU1NMRXJyb3IgYXMgZXJyOgotICAgICAgICAgICAgICAgIGlmIGVyci5hcmdzWzBdIGluIChzc2wuU1NMX0VSUk9SX1dBTlRfUkVBRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLlNTTF9FUlJPUl9XQU5UX1dSSVRFKToKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgICAgICAgICAgZWxpZiBlcnIuYXJnc1swXSA9PSBzc2wuU1NMX0VSUk9SX0VPRjoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuaGFuZGxlX2Nsb3NlKCkKLSAgICAgICAgICAgICAgICByYWlzZQotICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBlcnI6Ci0gICAgICAgICAgICAgICAgaWYgZXJyLmFyZ3NbMF0gPT0gZXJybm8uRUNPTk5BQk9SVEVEOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5oYW5kbGVfY2xvc2UoKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLl9zc2xfYWNjZXB0aW5nID0gRmFsc2UKLQotICAgICAgICBkZWYgaGFuZGxlX3JlYWQoc2VsZik6Ci0gICAgICAgICAgICBpZiBzZWxmLl9zc2xfYWNjZXB0aW5nOgotICAgICAgICAgICAgICAgIHNlbGYuX2RvX3NzbF9oYW5kc2hha2UoKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBEdW1teVBPUDNIYW5kbGVyLmhhbmRsZV9yZWFkKHNlbGYpCi0KLXJlcXVpcmVzX3NzbCA9IHNraXBVbmxlc3MoU1VQUE9SVFNfU1NMLCAnU1NMIG5vdCBzdXBwb3J0ZWQnKQogCiBAcmVxdWlyZXNfc3NsCiBjbGFzcyBUZXN0UE9QM19TU0xDbGFzcyhUZXN0UE9QM0NsYXNzKToKQEAgLTMwNiwyMCArMzgwLDYwIEBACiAgICAgZGVmIHRlc3RfY29udGV4dChzZWxmKToKICAgICAgICAgY3R4ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwb3BsaWIuUE9QM19TU0wsIHNlbGYuc2VydmVyLmhvc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyLnBvcnQsIGtleWZpbGU9Q0VSVEZJTEUsIGNvbnRleHQ9Y3R4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyLnBvcnQsIGtleWZpbGU9Q0VSVEZJTEUsIGNvbnRleHQ9Y3R4KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwb3BsaWIuUE9QM19TU0wsIHNlbGYuc2VydmVyLmhvc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyLnBvcnQsIGNlcnRmaWxlPUNFUlRGSUxFLCBjb250ZXh0PWN0eCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNlcnZlci5wb3J0LCBjZXJ0ZmlsZT1DRVJURklMRSwgY29udGV4dD1jdHgpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHBvcGxpYi5QT1AzX1NTTCwgc2VsZi5zZXJ2ZXIuaG9zdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXIucG9ydCwga2V5ZmlsZT1DRVJURklMRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydGZpbGU9Q0VSVEZJTEUsIGNvbnRleHQ9Y3R4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyLnBvcnQsIGtleWZpbGU9Q0VSVEZJTEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydGZpbGU9Q0VSVEZJTEUsIGNvbnRleHQ9Y3R4KQogCiAgICAgICAgIHNlbGYuY2xpZW50LnF1aXQoKQogICAgICAgICBzZWxmLmNsaWVudCA9IHBvcGxpYi5QT1AzX1NTTChzZWxmLnNlcnZlci5ob3N0LCBzZWxmLnNlcnZlci5wb3J0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0PWN0eCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0PWN0eCkKICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHNlbGYuY2xpZW50LnNvY2ssIHNzbC5TU0xTb2NrZXQpCiAgICAgICAgIHNlbGYuYXNzZXJ0SXMoc2VsZi5jbGllbnQuc29jay5jb250ZXh0LCBjdHgpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmNsaWVudC5ub29wKCkuc3RhcnRzd2l0aChiJytPSycpKQogCisgICAgZGVmIHRlc3Rfc3RscyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMocG9wbGliLmVycm9yX3Byb3RvLCBzZWxmLmNsaWVudC5zdGxzKQorCisgICAgdGVzdF9zdGxzX2NvbnRleHQgPSB0ZXN0X3N0bHMKKworICAgIGRlZiB0ZXN0X3N0bHNfY2FwYShzZWxmKToKKyAgICAgICAgY2FwYSA9IHNlbGYuY2xpZW50LmNhcGEoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKCdTVExTJyBpbiBjYXBhLmtleXMoKSkKKworCitAcmVxdWlyZXNfc3NsCitjbGFzcyBUZXN0UE9QM19UTFNDbGFzcyhUZXN0UE9QM0NsYXNzKToKKyAgICAjIHJlcGVhdCBwcmV2aW91cyB0ZXN0cyBieSB1c2luZyBwb3BsaWIuUE9QMy5zdGxzKCkKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5zZXJ2ZXIgPSBEdW1teVBPUDNTZXJ2ZXIoKEhPU1QsIFBPUlQpKQorICAgICAgICBzZWxmLnNlcnZlci5zdGFydCgpCisgICAgICAgIHNlbGYuY2xpZW50ID0gcG9wbGliLlBPUDMoc2VsZi5zZXJ2ZXIuaG9zdCwgc2VsZi5zZXJ2ZXIucG9ydCwgdGltZW91dD0zKQorICAgICAgICBzZWxmLmNsaWVudC5zdGxzKCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgaWYgc2VsZi5jbGllbnQuZmlsZSBpcyBub3QgTm9uZSBhbmQgc2VsZi5jbGllbnQuc29jayBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLmNsaWVudC5xdWl0KCkKKyAgICAgICAgICAgIGV4Y2VwdCBwb3BsaWIuZXJyb3JfcHJvdG86CisgICAgICAgICAgICAgICAgIyBoYXBwZW5zIGluIHRoZSB0ZXN0X3Rvb19sb25nX2xpbmVzIGNhc2U7IHRoZSBvdmVybG9uZworICAgICAgICAgICAgICAgICMgcmVzcG9uc2Ugd2lsbCBiZSB0cmVhdGVkIGFzIHJlc3BvbnNlIHRvIFFVSVQgYW5kIHJhaXNlCisgICAgICAgICAgICAgICAgIyB0aGlzIGV4Y2VwdGlvbgorICAgICAgICAgICAgICAgIHNlbGYuY2xpZW50LmNsb3NlKCkKKyAgICAgICAgc2VsZi5zZXJ2ZXIuc3RvcCgpCisKKyAgICBkZWYgdGVzdF9zdGxzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhwb3BsaWIuZXJyb3JfcHJvdG8sIHNlbGYuY2xpZW50LnN0bHMpCisKKyAgICB0ZXN0X3N0bHNfY29udGV4dCA9IHRlc3Rfc3RscworCisgICAgZGVmIHRlc3Rfc3Rsc19jYXBhKHNlbGYpOgorICAgICAgICBjYXBhID0gc2VsZi5jbGllbnQuY2FwYSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYidTVExTJyBpbiBjYXBhLmtleXMoKSkKKwogCiBjbGFzcyBUZXN0VGltZW91dHMoVGVzdENhc2UpOgogCkBAIC0zNzcsNyArNDkxLDcgQEAKIAogZGVmIHRlc3RfbWFpbigpOgogICAgIHRlc3RzID0gW1Rlc3RQT1AzQ2xhc3MsIFRlc3RUaW1lb3V0cywKLSAgICAgICAgICAgICBUZXN0UE9QM19TU0xDbGFzc10KKyAgICAgICAgICAgICBUZXN0UE9QM19TU0xDbGFzcywgVGVzdFBPUDNfVExTQ2xhc3NdCiAgICAgdGhyZWFkX2luZm8gPSB0ZXN0X3N1cHBvcnQudGhyZWFkaW5nX3NldHVwKCkKICAgICB0cnk6CiAgICAgICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoKnRlc3RzKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wb3NpeC5weSBiL0xpYi90ZXN0L3Rlc3RfcG9zaXgucHkKaW5kZXggNWMwOWViZi4uZDc2Nzk4OSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9wb3NpeC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3Bvc2l4LnB5CkBAIC00NDMsNiArNDQzLDQ0IEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc3RhdC5TX0lTRklGTyhwb3NpeC5zdGF0KHN1cHBvcnQuVEVTVEZOKS5zdF9tb2RlKSkKIAorICAgICAgICAjIEtleXdvcmQgYXJndW1lbnRzIGFyZSBhbHNvIHN1cHBvcnRlZAorICAgICAgICBzdXBwb3J0LnVubGluayhzdXBwb3J0LlRFU1RGTikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcG9zaXgubWtub2QocGF0aD1zdXBwb3J0LlRFU1RGTiwgbW9kZT1tb2RlLCBkZXZpY2U9MCwKKyAgICAgICAgICAgICAgICBkaXJfZmQ9Tm9uZSkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZS5lcnJubywgKGVycm5vLkVQRVJNLCBlcnJuby5FSU5WQUwpKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihwb3NpeCwgJ3N0YXQnKSwgJ3Rlc3QgbmVlZHMgcG9zaXguc3RhdCgpJykKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHBvc2l4LCAnbWFrZWRldicpLCAndGVzdCBuZWVkcyBwb3NpeC5tYWtlZGV2KCknKQorICAgIGRlZiB0ZXN0X21ha2VkZXYoc2VsZik6CisgICAgICAgIHN0ID0gcG9zaXguc3RhdChzdXBwb3J0LlRFU1RGTikKKyAgICAgICAgZGV2ID0gc3Quc3RfZGV2CisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShkZXYsIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoZGV2LCAwKQorCisgICAgICAgIG1ham9yID0gcG9zaXgubWFqb3IoZGV2KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UobWFqb3IsIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwobWFqb3IsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXgubWFqb3IoZGV2KSwgbWFqb3IpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcG9zaXgubWFqb3IsIGZsb2F0KGRldikpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcG9zaXgubWFqb3IpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChWYWx1ZUVycm9yLCBPdmVyZmxvd0Vycm9yKSwgcG9zaXgubWFqb3IsIC0xKQorCisgICAgICAgIG1pbm9yID0gcG9zaXgubWlub3IoZGV2KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UobWlub3IsIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwobWlub3IsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXgubWlub3IoZGV2KSwgbWlub3IpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcG9zaXgubWlub3IsIGZsb2F0KGRldikpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcG9zaXgubWlub3IpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChWYWx1ZUVycm9yLCBPdmVyZmxvd0Vycm9yKSwgcG9zaXgubWlub3IsIC0xKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXgubWFrZWRldihtYWpvciwgbWlub3IpLCBkZXYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcG9zaXgubWFrZWRldiwgZmxvYXQobWFqb3IpLCBtaW5vcikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwb3NpeC5tYWtlZGV2LCBtYWpvciwgZmxvYXQobWlub3IpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHBvc2l4Lm1ha2VkZXYsIG1ham9yKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHBvc2l4Lm1ha2VkZXYpCisKICAgICBkZWYgX3Rlc3RfYWxsX2Nob3duX2NvbW1vbihzZWxmLCBjaG93bl9mdW5jLCBmaXJzdF9wYXJhbSwgc3RhdF9mdW5jKToKICAgICAgICAgIiIiQ29tbW9uIGNvZGUgZm9yIGNob3duLCBmY2hvd24gYW5kIGxjaG93biB0ZXN0cy4iIiIKICAgICAgICAgZGVmIGNoZWNrX3N0YXQodWlkLCBnaWQpOgpAQCAtNjAzLDggKzY0MSwxMCBAQAogICAgICAgICByLCB3ID0gb3MucGlwZTIob3MuT19DTE9FWEVDfG9zLk9fTk9OQkxPQ0spCiAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy5jbG9zZSwgcikKICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9zLmNsb3NlLCB3KQotICAgICAgICBzZWxmLmFzc2VydFRydWUoZmNudGwuZmNudGwociwgZmNudGwuRl9HRVRGRCkgJiBmY250bC5GRF9DTE9FWEVDKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoZmNudGwuZmNudGwodywgZmNudGwuRl9HRVRGRCkgJiBmY250bC5GRF9DTE9FWEVDKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLmdldF9pbmhlcml0YWJsZShyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5nZXRfaW5oZXJpdGFibGUodykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmY250bC5mY250bChyLCBmY250bC5GX0dFVEZMKSAmIG9zLk9fTk9OQkxPQ0spCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmY250bC5mY250bCh3LCBmY250bC5GX0dFVEZMKSAmIG9zLk9fTk9OQkxPQ0spCiAgICAgICAgICMgdHJ5IHJlYWRpbmcgZnJvbSBhbiBlbXB0eSBwaXBlOiB0aGlzIHNob3VsZCBmYWlsLCBub3QgYmxvY2sKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgb3MucmVhZCwgciwgMSkKICAgICAgICAgIyB0cnkgYSB3cml0ZSBiaWcgZW5vdWdoIHRvIGZpbGwtdXAgdGhlIHBpcGU6IHRoaXMgc2hvdWxkIGVpdGhlcgpAQCAtNjUyLDcgKzY5Miw3IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0LnN0X2ZsYWdzIHwgc3RhdC5VRl9JTU1VVEFCTEUsIG5ld19zdC5zdF9mbGFncykKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBmZCA9IG9wZW4odGFyZ2V0X2ZpbGUsICd3KycpCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuZXJybm8sIGVycm5vLkVQRVJNKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgcG9zaXguY2hmbGFncyh0YXJnZXRfZmlsZSwgc3Quc3RfZmxhZ3MpCkBAIC03MTAsNDEgKzc1MCwzOSBAQAogCiAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihwb3NpeCwgJ2dldGN3ZCcpLCAndGVzdCBuZWVkcyBwb3NpeC5nZXRjd2QoKScpCiAgICAgZGVmIHRlc3RfZ2V0Y3dkX2xvbmdfcGF0aG5hbWVzKHNlbGYpOgotICAgICAgICBpZiBoYXNhdHRyKHBvc2l4LCAnZ2V0Y3dkJyk6Ci0gICAgICAgICAgICBkaXJuYW1lID0gJ2dldGN3ZC10ZXN0LWRpcmVjdG9yeS0wMTIzNDU2Nzg5YWJjZGVmLTAxMjM0NTY3ODkwYWJjZGVmJwotICAgICAgICAgICAgY3VyZGlyID0gb3MuZ2V0Y3dkKCkKLSAgICAgICAgICAgIGJhc2VfcGF0aCA9IG9zLnBhdGguYWJzcGF0aChzdXBwb3J0LlRFU1RGTikgKyAnLmdldGN3ZCcKKyAgICAgICAgZGlybmFtZSA9ICdnZXRjd2QtdGVzdC1kaXJlY3RvcnktMDEyMzQ1Njc4OWFiY2RlZi0wMTIzNDU2Nzg5MGFiY2RlZicKKyAgICAgICAgY3VyZGlyID0gb3MuZ2V0Y3dkKCkKKyAgICAgICAgYmFzZV9wYXRoID0gb3MucGF0aC5hYnNwYXRoKHN1cHBvcnQuVEVTVEZOKSArICcuZ2V0Y3dkJwogCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgb3MubWtkaXIoYmFzZV9wYXRoKQotICAgICAgICAgICAgICAgIG9zLmNoZGlyKGJhc2VfcGF0aCkKLSAgICAgICAgICAgIGV4Y2VwdDoKLSMgICAgICAgICAgICAgICBKdXN0IHJldHVybmluZyBub3RoaW5nIGluc3RlYWQgb2YgdGhlIFNraXBUZXN0IGV4Y2VwdGlvbiwKLSMgICAgICAgICAgICAgICBiZWNhdXNlIHRoZSB0ZXN0IHJlc3VsdHMgaW4gRXJyb3IgaW4gdGhhdCBjYXNlLgotIyAgICAgICAgICAgICAgIElzIHRoYXQgb2s/Ci0jICAgICAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSBmb3IgdGVzdGluZyIpCi0gICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLm1rZGlyKGJhc2VfcGF0aCkKKyAgICAgICAgICAgIG9zLmNoZGlyKGJhc2VfcGF0aCkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgIyAgSnVzdCByZXR1cm5pbmcgbm90aGluZyBpbnN0ZWFkIG9mIHRoZSBTa2lwVGVzdCBleGNlcHRpb24sIGJlY2F1c2UKKyAgICAgICAgICAgICMgIHRoZSB0ZXN0IHJlc3VsdHMgaW4gRXJyb3IgaW4gdGhhdCBjYXNlLiAgSXMgdGhhdCBvaz8KKyAgICAgICAgICAgICMgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSBmb3IgdGVzdGluZyIpCisgICAgICAgICAgICByZXR1cm4KIAotICAgICAgICAgICAgICAgIGRlZiBfY3JlYXRlX2FuZF9kb19nZXRjd2QoZGlybmFtZSwgY3VycmVudF9wYXRoX2xlbmd0aCA9IDApOgotICAgICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBvcy5ta2RpcihkaXJuYW1lKQotICAgICAgICAgICAgICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgibWtkaXIgY2Fubm90IGNyZWF0ZSBkaXJlY3Rvcnkgc3VmZmljaWVudGx5IGRlZXAgZm9yIGdldGN3ZCB0ZXN0IikKKyAgICAgICAgICAgIGRlZiBfY3JlYXRlX2FuZF9kb19nZXRjd2QoZGlybmFtZSwgY3VycmVudF9wYXRoX2xlbmd0aCA9IDApOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgb3MubWtkaXIoZGlybmFtZSkKKyAgICAgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJta2RpciBjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSBzdWZmaWNpZW50bHkgZGVlcCBmb3IgZ2V0Y3dkIHRlc3QiKQogCi0gICAgICAgICAgICAgICAgICAgIG9zLmNoZGlyKGRpcm5hbWUpCi0gICAgICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgICAgIG9zLmdldGN3ZCgpCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiBjdXJyZW50X3BhdGhfbGVuZ3RoIDwgMTAyNzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY3JlYXRlX2FuZF9kb19nZXRjd2QoZGlybmFtZSwgY3VycmVudF9wYXRoX2xlbmd0aCArIGxlbihkaXJuYW1lKSArIDEpCi0gICAgICAgICAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBvcy5jaGRpcignLi4nKQotICAgICAgICAgICAgICAgICAgICAgICAgb3Mucm1kaXIoZGlybmFtZSkKKyAgICAgICAgICAgICAgICBvcy5jaGRpcihkaXJuYW1lKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgb3MuZ2V0Y3dkKCkKKyAgICAgICAgICAgICAgICAgICAgaWYgY3VycmVudF9wYXRoX2xlbmd0aCA8IDEwMjc6CisgICAgICAgICAgICAgICAgICAgICAgICBfY3JlYXRlX2FuZF9kb19nZXRjd2QoZGlybmFtZSwgY3VycmVudF9wYXRoX2xlbmd0aCArIGxlbihkaXJuYW1lKSArIDEpCisgICAgICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICAgICAgb3MuY2hkaXIoJy4uJykKKyAgICAgICAgICAgICAgICAgICAgb3Mucm1kaXIoZGlybmFtZSkKIAotICAgICAgICAgICAgICAgIF9jcmVhdGVfYW5kX2RvX2dldGN3ZChkaXJuYW1lKQorICAgICAgICAgICAgX2NyZWF0ZV9hbmRfZG9fZ2V0Y3dkKGRpcm5hbWUpCiAKLSAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgb3MuY2hkaXIoY3VyZGlyKQotICAgICAgICAgICAgICAgIHN1cHBvcnQucm10cmVlKGJhc2VfcGF0aCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLmNoZGlyKGN1cmRpcikKKyAgICAgICAgICAgIHN1cHBvcnQucm10cmVlKGJhc2VfcGF0aCkKIAogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIocG9zaXgsICdnZXRncm91cGxpc3QnKSwgInRlc3QgbmVlZHMgcG9zaXguZ2V0Z3JvdXBsaXN0KCkiKQogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIocHdkLCAnZ2V0cHd1aWQnKSwgInRlc3QgbmVlZHMgcHdkLmdldHB3dWlkKCkiKQpAQCAtNzU3LDcgKzc5NSw3IEBACiAKICAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKG9zLCAnZ2V0ZWdpZCcpLCAidGVzdCBuZWVkcyBvcy5nZXRlZ2lkKCkiKQogICAgIGRlZiB0ZXN0X2dldGdyb3VwcyhzZWxmKToKLSAgICAgICAgd2l0aCBvcy5wb3BlbignaWQgLUcnKSBhcyBpZGc6CisgICAgICAgIHdpdGggb3MucG9wZW4oJ2lkIC1HIDI+L2Rldi9udWxsJykgYXMgaWRnOgogICAgICAgICAgICAgZ3JvdXBzID0gaWRnLnJlYWQoKS5zdHJpcCgpCiAgICAgICAgICAgICByZXQgPSBpZGcuY2xvc2UoKQogCkBAIC03NjgsNyArODA2LDcgQEAKICAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nOgogICAgICAgICAgICAgaW1wb3J0IHN5c2NvbmZpZwogICAgICAgICAgICAgZHQgPSBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCcpIG9yICcxMC4wJwotICAgICAgICAgICAgaWYgZmxvYXQoZHQpIDwgMTAuNjoKKyAgICAgICAgICAgIGlmIHR1cGxlKGludChuKSBmb3IgbiBpbiBkdC5zcGxpdCgnLicpWzA6Ml0pIDwgKDEwLCA2KToKICAgICAgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiZ2V0Z3JvdXBzKDIpIGlzIGJyb2tlbiBwcmlvciB0byAxMC42IikKIAogICAgICAgICAjICdpZCAtRycgYW5kICdvcy5nZXRncm91cHMoKScgc2hvdWxkIHJldHVybiB0aGUgc2FtZQpAQCAtMTEyMSw2ICsxMTU5LDYwIEBACiAgICAgICAgICAgICAgICAgIyBodHRwOi8vbGlzdHMuZnJlZWJzZC5vcmcvcGlwZXJtYWlsL2ZyZWVic2QtYW1kNjQvMjAxMi1KYW51YXJ5LzAxNDMzMi5odG1sCiAgICAgICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIk9TRXJyb3IgcmFpc2VkISIpCiAKKyAgICBkZWYgdGVzdF9wYXRoX2Vycm9yMihzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFRlc3QgZnVuY3Rpb25zIHRoYXQgY2FsbCBwYXRoX2Vycm9yMigpLCBwcm92aWRpbmcgdHdvIGZpbGVuYW1lcyBpbiB0aGVpciBleGNlcHRpb25zLgorICAgICAgICAiIiIKKyAgICAgICAgZm9yIG5hbWUgaW4gKCJyZW5hbWUiLCAicmVwbGFjZSIsICJsaW5rIik6CisgICAgICAgICAgICBmdW5jdGlvbiA9IGdldGF0dHIob3MsIG5hbWUsIE5vbmUpCisgICAgICAgICAgICBpZiBmdW5jdGlvbiBpcyBOb25lOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGZvciBkc3QgaW4gKCJub29kbHkyIiwgc3VwcG9ydC5URVNURk4pOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24oJ2RvZXNub3RleGlzdGZpbGVuYW1lJywgZHN0KQorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oIidkb2Vzbm90ZXhpc3RmaWxlbmFtZScgLT4gJ3t9JyIuZm9ybWF0KGRzdCksIHN0cihlKSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJObyB2YWxpZCBwYXRoX2Vycm9yMigpIHRlc3QgZm9yIG9zLiIgKyBuYW1lKQorCisgICAgZGVmIHRlc3RfcGF0aF93aXRoX251bGxfY2hhcmFjdGVyKHNlbGYpOgorICAgICAgICBmbiA9IHN1cHBvcnQuVEVTVEZOCisgICAgICAgIGZuX3dpdGhfTlVMID0gZm4gKyAnXDAnCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzdXBwb3J0LnVubGluaywgZm4pCisgICAgICAgIHN1cHBvcnQudW5saW5rKGZuKQorICAgICAgICBmZCA9IE5vbmUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgICAgIGZkID0gb3Mub3Blbihmbl93aXRoX05VTCwgb3MuT19XUk9OTFkgfCBvcy5PX0NSRUFUKSAjIHJhaXNlcworICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgaWYgZmQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgb3MuY2xvc2UoZmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5leGlzdHMoZm4pKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9zLm1rZGlyLCBmbl93aXRoX05VTCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmV4aXN0cyhmbikpCisgICAgICAgIG9wZW4oZm4sICd3YicpLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcy5zdGF0LCBmbl93aXRoX05VTCkKKworICAgIGRlZiB0ZXN0X3BhdGhfd2l0aF9udWxsX2J5dGUoc2VsZik6CisgICAgICAgIGZuID0gb3MuZnNlbmNvZGUoc3VwcG9ydC5URVNURk4pCisgICAgICAgIGZuX3dpdGhfTlVMID0gZm4gKyBiJ1wwJworICAgICAgICBzZWxmLmFkZENsZWFudXAoc3VwcG9ydC51bmxpbmssIGZuKQorICAgICAgICBzdXBwb3J0LnVubGluayhmbikKKyAgICAgICAgZmQgPSBOb25lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICAgICAgZmQgPSBvcy5vcGVuKGZuX3dpdGhfTlVMLCBvcy5PX1dST05MWSB8IG9zLk9fQ1JFQVQpICMgcmFpc2VzCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBpZiBmZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBvcy5jbG9zZShmZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmV4aXN0cyhmbikpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG9zLm1rZGlyLCBmbl93aXRoX05VTCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmV4aXN0cyhmbikpCisgICAgICAgIG9wZW4oZm4sICd3YicpLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgb3Muc3RhdCwgZm5fd2l0aF9OVUwpCisKIGNsYXNzIFBvc2l4R3JvdXBzVGVzdGVyKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiBzZXRVcChzZWxmKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcG9zaXhwYXRoLnB5IGIvTGliL3Rlc3QvdGVzdF9wb3NpeHBhdGgucHkKaW5kZXggMGU3ZDg2Ni4uMWQ0NTk2ZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9wb3NpeHBhdGgucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9wb3NpeHBhdGgucHkKQEAgLTU3LDIxICs1NywxNyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvc2l4cGF0aC5qb2luKGIiL2Zvby8iLCBiImJhci8iLCBiImJhei8iKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBiIi9mb28vYmFyL2Jhei8iKQogCi0gICAgICAgIGRlZiBjaGVja19lcnJvcl9tc2cobGlzdF9vZl9hcmdzLCBtc2cpOgotICAgICAgICAgICAgIiIiQ2hlY2sgcG9zaXhwYXRoLmpvaW4gcmFpc2VzIGZyaWVuZGx5IFR5cGVFcnJvcnMuIiIiCi0gICAgICAgICAgICBmb3IgYXJncyBpbiAoaXRlbSBmb3IgcGVybSBpbiBsaXN0X29mX2FyZ3MKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBpdGVtIGluIGl0ZXJ0b29scy5wZXJtdXRhdGlvbnMocGVybSkpOgotICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKSBhcyBjbToKLSAgICAgICAgICAgICAgICAgICAgcG9zaXhwYXRoLmpvaW4oKmFyZ3MpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2csIGNtLmV4Y2VwdGlvbi5hcmdzWzBdKQotCi0gICAgICAgIGNoZWNrX2Vycm9yX21zZyhbW2InYnl0ZXMnLCAnc3RyJ10sIFtieXRlYXJyYXkoYidieXRlcycpLCAnc3RyJ11dLAotICAgICAgICAgICAgICAgICAgICAgICAgIkNhbid0IG1peCBzdHJpbmdzIGFuZCBieXRlcyBpbiBwYXRoIGNvbXBvbmVudHMuIikKKyAgICBkZWYgdGVzdF9qb2luX2Vycm9ycyhzZWxmKToKKyAgICAgICAgIyBDaGVjayBwb3NpeHBhdGguam9pbiByYWlzZXMgZnJpZW5kbHkgVHlwZUVycm9ycy4KKyAgICAgICAgZXJybXNnID0gIkNhbid0IG1peCBzdHJpbmdzIGFuZCBieXRlcyBpbiBwYXRoIGNvbXBvbmVudHMiCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUeXBlRXJyb3IsIGVycm1zZyk6CisgICAgICAgICAgICBwb3NpeHBhdGguam9pbihiJ2J5dGVzJywgJ3N0cicpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUeXBlRXJyb3IsIGVycm1zZyk6CisgICAgICAgICAgICBwb3NpeHBhdGguam9pbignc3RyJywgYidieXRlcycpCiAgICAgICAgICMgcmVncmVzc2lvbiwgc2VlICMxNTM3NwogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcikgYXMgY206CiAgICAgICAgICAgICBwb3NpeHBhdGguam9pbihOb25lLCAnc3RyJykKLSAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbCgiQ2FuJ3QgbWl4IHN0cmluZ3MgYW5kIGJ5dGVzIGluIHBhdGggY29tcG9uZW50cy4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtLmV4Y2VwdGlvbi5hcmdzWzBdKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGNtLmV4Y2VwdGlvbi5hcmdzWzBdLCBlcnJtc2cpCiAKICAgICBkZWYgdGVzdF9zcGxpdChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NpeHBhdGguc3BsaXQoIi9mb28vYmFyIiksICgiL2ZvbyIsICJiYXIiKSkKQEAgLTE4Niw2MyArMTgyLDYgQEAKICAgICAgICAgICAgIGlmIG5vdCBmLmNsb3NlKCk6CiAgICAgICAgICAgICAgICAgZi5jbG9zZSgpCiAKLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIF9jcmVhdGVfZmlsZShmaWxlbmFtZSk6Ci0gICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSwgJ3diJykgYXMgZjoKLSAgICAgICAgICAgIGYud3JpdGUoYidmb28nKQotCi0gICAgZGVmIHRlc3Rfc2FtZWZpbGUoc2VsZik6Ci0gICAgICAgIHRlc3RfZm4gPSBzdXBwb3J0LlRFU1RGTiArICIxIgotICAgICAgICBzZWxmLl9jcmVhdGVfZmlsZSh0ZXN0X2ZuKQotICAgICAgICBzZWxmLmFzc2VydFRydWUocG9zaXhwYXRoLnNhbWVmaWxlKHRlc3RfZm4sIHRlc3RfZm4pKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHBvc2l4cGF0aC5zYW1lZmlsZSkKLQotICAgIEB1bml0dGVzdC5za2lwSWYoCi0gICAgICAgIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCd3aW4nKSwKLSAgICAgICAgInBvc2l4cGF0aC5zYW1lZmlsZSBkb2VzIG5vdCB3b3JrIG9uIGxpbmtzIGluIFdpbmRvd3MiKQotICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICJzeW1saW5rIiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIk1pc3Npbmcgc3ltbGluayBpbXBsZW1lbnRhdGlvbiIpCi0gICAgZGVmIHRlc3Rfc2FtZWZpbGVfb25fbGlua3Moc2VsZik6Ci0gICAgICAgIHRlc3RfZm4xID0gc3VwcG9ydC5URVNURk4gKyAiMSIKLSAgICAgICAgdGVzdF9mbjIgPSBzdXBwb3J0LlRFU1RGTiArICIyIgotICAgICAgICBzZWxmLl9jcmVhdGVfZmlsZSh0ZXN0X2ZuMSkKLQotICAgICAgICBvcy5zeW1saW5rKHRlc3RfZm4xLCB0ZXN0X2ZuMikKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBvc2l4cGF0aC5zYW1lZmlsZSh0ZXN0X2ZuMSwgdGVzdF9mbjIpKQotICAgICAgICBvcy5yZW1vdmUodGVzdF9mbjIpCi0KLSAgICAgICAgc2VsZi5fY3JlYXRlX2ZpbGUodGVzdF9mbjIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocG9zaXhwYXRoLnNhbWVmaWxlKHRlc3RfZm4xLCB0ZXN0X2ZuMikpCi0KLQotICAgIGRlZiB0ZXN0X3NhbWVzdGF0KHNlbGYpOgotICAgICAgICB0ZXN0X2ZuID0gc3VwcG9ydC5URVNURk4gKyAiMSIKLSAgICAgICAgc2VsZi5fY3JlYXRlX2ZpbGUodGVzdF9mbikKLSAgICAgICAgdGVzdF9mbnMgPSBbdGVzdF9mbl0qMgotICAgICAgICBzdGF0cyA9IG1hcChvcy5zdGF0LCB0ZXN0X2ZucykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBvc2l4cGF0aC5zYW1lc3RhdCgqc3RhdHMpKQotCi0gICAgQHVuaXR0ZXN0LnNraXBJZigKLSAgICAgICAgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ3dpbicpLAotICAgICAgICAicG9zaXhwYXRoLnNhbWVzdGF0IGRvZXMgbm90IHdvcmsgb24gbGlua3MgaW4gV2luZG93cyIpCi0gICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgInN5bWxpbmsiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiTWlzc2luZyBzeW1saW5rIGltcGxlbWVudGF0aW9uIikKLSAgICBkZWYgdGVzdF9zYW1lc3RhdF9vbl9saW5rcyhzZWxmKToKLSAgICAgICAgdGVzdF9mbjEgPSBzdXBwb3J0LlRFU1RGTiArICIxIgotICAgICAgICB0ZXN0X2ZuMiA9IHN1cHBvcnQuVEVTVEZOICsgIjIiCi0gICAgICAgIHNlbGYuX2NyZWF0ZV9maWxlKHRlc3RfZm4xKQotICAgICAgICB0ZXN0X2ZucyA9ICh0ZXN0X2ZuMSwgdGVzdF9mbjIpCi0gICAgICAgIG9zLnN5bWxpbmsoKnRlc3RfZm5zKQotICAgICAgICBzdGF0cyA9IG1hcChvcy5zdGF0LCB0ZXN0X2ZucykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBvc2l4cGF0aC5zYW1lc3RhdCgqc3RhdHMpKQotICAgICAgICBvcy5yZW1vdmUodGVzdF9mbjIpCi0KLSAgICAgICAgc2VsZi5fY3JlYXRlX2ZpbGUodGVzdF9mbjIpCi0gICAgICAgIHN0YXRzID0gbWFwKG9zLnN0YXQsIHRlc3RfZm5zKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHBvc2l4cGF0aC5zYW1lc3RhdCgqc3RhdHMpKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcG9zaXhwYXRoLnNhbWVzdGF0KQotCiAgICAgZGVmIHRlc3RfaXNtb3VudChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRJcyhwb3NpeHBhdGguaXNtb3VudCgiLyIpLCBUcnVlKQogICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CkBAIC0zODksNyArMzI4LDYgQEAKICAgICAgICAgIyBCdWcgIzkzMDAyNCwgcmV0dXJuIHRoZSBwYXRoIHVuY2hhbmdlZCBpZiB3ZSBnZXQgaW50byBhbiBpbmZpbml0ZQogICAgICAgICAjIHN5bWxpbmsgbG9vcC4KICAgICAgICAgdHJ5OgotICAgICAgICAgICAgb2xkX3BhdGggPSBhYnNwYXRoKCcuJykKICAgICAgICAgICAgIG9zLnN5bWxpbmsoQUJTVEZOLCBBQlNURk4pCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWxwYXRoKEFCU1RGTiksIEFCU1RGTikKIApAQCAtNDE1LDEwICszNTMsOSBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFscGF0aChBQlNURk4rImMiKSwgQUJTVEZOKyJjIikKIAogICAgICAgICAgICAgIyBUZXN0IHVzaW5nIHJlbGF0aXZlIHBhdGggYXMgd2VsbC4KLSAgICAgICAgICAgIG9zLmNoZGlyKGRpcm5hbWUoQUJTVEZOKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhbHBhdGgoYmFzZW5hbWUoQUJTVEZOKSksIEFCU1RGTikKKyAgICAgICAgICAgIHdpdGggc3VwcG9ydC5jaGFuZ2VfY3dkKGRpcm5hbWUoQUJTVEZOKSk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFscGF0aChiYXNlbmFtZShBQlNURk4pKSwgQUJTVEZOKQogICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgb3MuY2hkaXIob2xkX3BhdGgpCiAgICAgICAgICAgICBzdXBwb3J0LnVubGluayhBQlNURk4pCiAgICAgICAgICAgICBzdXBwb3J0LnVubGluayhBQlNURk4rIjEiKQogICAgICAgICAgICAgc3VwcG9ydC51bmxpbmsoQUJTVEZOKyIyIikKQEAgLTQ0Niw3ICszODMsNiBAQAogICAgIEBza2lwX2lmX0FCU1RGTl9jb250YWluc19iYWNrc2xhc2gKICAgICBkZWYgdGVzdF9yZWFscGF0aF9kZWVwX3JlY3Vyc2lvbihzZWxmKToKICAgICAgICAgZGVwdGggPSAxMAotICAgICAgICBvbGRfcGF0aCA9IGFic3BhdGgoJy4nKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBvcy5ta2RpcihBQlNURk4pCiAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShkZXB0aCk6CkBAIC00NTUsMTAgKzM5MSw5IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWxwYXRoKEFCU1RGTiArICcvJWQnICUgZGVwdGgpLCBBQlNURk4pCiAKICAgICAgICAgICAgICMgVGVzdCB1c2luZyByZWxhdGl2ZSBwYXRoIGFzIHdlbGwuCi0gICAgICAgICAgICBvcy5jaGRpcihBQlNURk4pCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWxwYXRoKCclZCcgJSBkZXB0aCksIEFCU1RGTikKKyAgICAgICAgICAgIHdpdGggc3VwcG9ydC5jaGFuZ2VfY3dkKEFCU1RGTik6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFscGF0aCgnJWQnICUgZGVwdGgpLCBBQlNURk4pCiAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBvcy5jaGRpcihvbGRfcGF0aCkKICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKGRlcHRoICsgMSk6CiAgICAgICAgICAgICAgICAgc3VwcG9ydC51bmxpbmsoQUJTVEZOICsgJy8lZCcgJSBpKQogICAgICAgICAgICAgc2FmZV9ybWRpcihBQlNURk4pCkBAIC00NzIsMTUgKzQwNywxMyBAQAogICAgICAgICAjIC91c3IvZG9jIHdpdGggJ2RvYycgYmVpbmcgYSBzeW1saW5rIHRvIC91c3Ivc2hhcmUvZG9jLiBXZSBjYWxsCiAgICAgICAgICMgcmVhbHBhdGgoImEiKS4gVGhpcyBzaG91bGQgcmV0dXJuIC91c3Ivc2hhcmUvZG9jL2EvLgogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBvbGRfcGF0aCA9IGFic3BhdGgoJy4nKQogICAgICAgICAgICAgb3MubWtkaXIoQUJTVEZOKQogICAgICAgICAgICAgb3MubWtkaXIoQUJTVEZOICsgIi95IikKICAgICAgICAgICAgIG9zLnN5bWxpbmsoQUJTVEZOICsgIi95IiwgQUJTVEZOICsgIi9rIikKIAotICAgICAgICAgICAgb3MuY2hkaXIoQUJTVEZOICsgIi9rIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhbHBhdGgoImEiKSwgQUJTVEZOICsgIi95L2EiKQorICAgICAgICAgICAgd2l0aCBzdXBwb3J0LmNoYW5nZV9jd2QoQUJTVEZOICsgIi9rIik6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFscGF0aCgiYSIpLCBBQlNURk4gKyAiL3kvYSIpCiAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBvcy5jaGRpcihvbGRfcGF0aCkKICAgICAgICAgICAgIHN1cHBvcnQudW5saW5rKEFCU1RGTiArICIvayIpCiAgICAgICAgICAgICBzYWZlX3JtZGlyKEFCU1RGTiArICIveSIpCiAgICAgICAgICAgICBzYWZlX3JtZGlyKEFCU1RGTikKQEAgLTQ5Nyw3ICs0MzAsNiBAQAogICAgICAgICAjIGFuZCBhIHN5bWJvbGljIGxpbmsgJ2xpbmsteScgcG9pbnRpbmcgdG8gJ3knIGluIGRpcmVjdG9yeSAnYScsCiAgICAgICAgICMgdGhlbiByZWFscGF0aCgibGluay15Ly4uIikgc2hvdWxkIHJldHVybiAnaycsIG5vdCAnYScuCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIG9sZF9wYXRoID0gYWJzcGF0aCgnLicpCiAgICAgICAgICAgICBvcy5ta2RpcihBQlNURk4pCiAgICAgICAgICAgICBvcy5ta2RpcihBQlNURk4gKyAiL2siKQogICAgICAgICAgICAgb3MubWtkaXIoQUJTVEZOICsgIi9rL3kiKQpAQCAtNTA2LDExICs0MzgsMTAgQEAKICAgICAgICAgICAgICMgQWJzb2x1dGUgcGF0aC4KICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhbHBhdGgoQUJTVEZOICsgIi9saW5rLXkvLi4iKSwgQUJTVEZOICsgIi9rIikKICAgICAgICAgICAgICMgUmVsYXRpdmUgcGF0aC4KLSAgICAgICAgICAgIG9zLmNoZGlyKGRpcm5hbWUoQUJTVEZOKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhbHBhdGgoYmFzZW5hbWUoQUJTVEZOKSArICIvbGluay15Ly4uIiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFCU1RGTiArICIvayIpCisgICAgICAgICAgICB3aXRoIHN1cHBvcnQuY2hhbmdlX2N3ZChkaXJuYW1lKEFCU1RGTikpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhbHBhdGgoYmFzZW5hbWUoQUJTVEZOKSArICIvbGluay15Ly4uIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQlNURk4gKyAiL2siKQogICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgb3MuY2hkaXIob2xkX3BhdGgpCiAgICAgICAgICAgICBzdXBwb3J0LnVubGluayhBQlNURk4gKyAiL2xpbmsteSIpCiAgICAgICAgICAgICBzYWZlX3JtZGlyKEFCU1RGTiArICIvay95IikKICAgICAgICAgICAgIHNhZmVfcm1kaXIoQUJTVEZOICsgIi9rIikKQEAgLTUyNCwxNyArNDU1LDE0IEBACiAgICAgICAgICMgbXVzdCBiZSByZXNvbHZlZCB0b28uCiAKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgb2xkX3BhdGggPSBhYnNwYXRoKCcuJykKICAgICAgICAgICAgIG9zLm1rZGlyKEFCU1RGTikKICAgICAgICAgICAgIG9zLm1rZGlyKEFCU1RGTiArICIvayIpCiAgICAgICAgICAgICBvcy5zeW1saW5rKEFCU1RGTiwgQUJTVEZOICsgImxpbmsiKQotICAgICAgICAgICAgb3MuY2hkaXIoZGlybmFtZShBQlNURk4pKQotCi0gICAgICAgICAgICBiYXNlID0gYmFzZW5hbWUoQUJTVEZOKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFscGF0aChiYXNlICsgImxpbmsiKSwgQUJTVEZOKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFscGF0aChiYXNlICsgImxpbmsvayIpLCBBQlNURk4gKyAiL2siKQorICAgICAgICAgICAgd2l0aCBzdXBwb3J0LmNoYW5nZV9jd2QoZGlybmFtZShBQlNURk4pKToKKyAgICAgICAgICAgICAgICBiYXNlID0gYmFzZW5hbWUoQUJTVEZOKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhbHBhdGgoYmFzZSArICJsaW5rIiksIEFCU1RGTikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWxwYXRoKGJhc2UgKyAibGluay9rIiksIEFCU1RGTiArICIvayIpCiAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBvcy5jaGRpcihvbGRfcGF0aCkKICAgICAgICAgICAgIHN1cHBvcnQudW5saW5rKEFCU1RGTiArICJsaW5rIikKICAgICAgICAgICAgIHNhZmVfcm1kaXIoQUJTVEZOICsgIi9rIikKICAgICAgICAgICAgIHNhZmVfcm1kaXIoQUJTVEZOKQpAQCAtNTk1LDExICs1MjMsNiBAQAogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgb3MuZ2V0Y3dkYiA9IHJlYWxfZ2V0Y3dkYgogCi0gICAgZGVmIHRlc3Rfc2FtZW9wZW5maWxlKHNlbGYpOgotICAgICAgICBmbmFtZSA9IHN1cHBvcnQuVEVTVEZOICsgIjEiCi0gICAgICAgIHdpdGggb3BlbihmbmFtZSwgIndiIikgYXMgYSwgb3BlbihmbmFtZSwgIndiIikgYXMgYjoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwb3NpeHBhdGguc2FtZW9wZW5maWxlKGEuZmlsZW5vKCksIGIuZmlsZW5vKCkpKQotCiAKIGNsYXNzIFBvc2l4Q29tbW9uVGVzdCh0ZXN0X2dlbmVyaWNwYXRoLkNvbW1vblRlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBwYXRobW9kdWxlID0gcG9zaXhwYXRoCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3BwcmludC5weSBiL0xpYi90ZXN0L3Rlc3RfcHByaW50LnB5CmluZGV4IGE4NTI5OGUuLjE4MGRkYjAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcHByaW50LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcHByaW50LnB5CkBAIC0xLDMgKzEsNSBAQAorIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KKwogaW1wb3J0IHBwcmludAogaW1wb3J0IHRlc3Quc3VwcG9ydAogaW1wb3J0IHVuaXR0ZXN0CkBAIC01Niw3ICs1OCw4IEBACiAgICAgZGVmIHRlc3RfYmFzaWMoc2VsZik6CiAgICAgICAgICMgVmVyaWZ5IC5pc3JlY3Vyc2l2ZSgpIGFuZCAuaXNyZWFkYWJsZSgpIHcvbyByZWN1cnNpb24KICAgICAgICAgcHAgPSBwcHJpbnQuUHJldHR5UHJpbnRlcigpCi0gICAgICAgIGZvciBzYWZlIGluICgyLCAyLjAsIDJqLCAiYWJjIiwgWzNdLCAoMiwyKSwgezM6IDN9LCAieWFkZGF5YWRkYSIsCisgICAgICAgIGZvciBzYWZlIGluICgyLCAyLjAsIDJqLCAiYWJjIiwgWzNdLCAoMiwyKSwgezM6IDN9LCBiImRlZiIsCisgICAgICAgICAgICAgICAgICAgICBieXRlYXJyYXkoYiJnaGkiKSwgVHJ1ZSwgRmFsc2UsIE5vbmUsIC4uLiwKICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYSwgc2VsZi5iKToKICAgICAgICAgICAgICMgbW9kdWxlLWxldmVsIGNvbnZlbmllbmNlIGZ1bmN0aW9ucwogICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShwcHJpbnQuaXNyZWN1cnNpdmUoc2FmZSksCkBAIC0xMjYsMjEgKzEyOSwyMyBAQAogICAgICAgICAjIGl0IHNvcnRlZCBhIGRpY3QgZGlzcGxheSBpZiBhbmQgb25seSBpZiB0aGUgZGlzcGxheSByZXF1aXJlZAogICAgICAgICAjIG11bHRpcGxlIGxpbmVzLiAgRm9yIHRoYXQgcmVhc29uLCBkaWN0cyB3aXRoIG1vcmUgdGhhbiBvbmUgZWxlbWVudAogICAgICAgICAjIGFyZW4ndCB0ZXN0ZWQgaGVyZS4KLSAgICAgICAgZm9yIHNpbXBsZSBpbiAoMCwgMCwgMCswaiwgMC4wLCAiIiwgYiIiLAorICAgICAgICBmb3Igc2ltcGxlIGluICgwLCAwLCAwKzBqLCAwLjAsICIiLCBiIiIsIGJ5dGVhcnJheSgpLAogICAgICAgICAgICAgICAgICAgICAgICAoKSwgdHVwbGUyKCksIHR1cGxlMygpLAogICAgICAgICAgICAgICAgICAgICAgICBbXSwgbGlzdDIoKSwgbGlzdDMoKSwKICAgICAgICAgICAgICAgICAgICAgICAgc2V0KCksIHNldDIoKSwgc2V0MygpLAogICAgICAgICAgICAgICAgICAgICAgICBmcm96ZW5zZXQoKSwgZnJvemVuc2V0MigpLCBmcm96ZW5zZXQzKCksCiAgICAgICAgICAgICAgICAgICAgICAgIHt9LCBkaWN0MigpLCBkaWN0MygpLAogICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUsIHBwcmludCwKLSAgICAgICAgICAgICAgICAgICAgICAgLTYsIC02LCAtNi02aiwgLTEuNSwgIngiLCBiIngiLCAoMywpLCBbM10sIHszOiA2fSwKKyAgICAgICAgICAgICAgICAgICAgICAgLTYsIC02LCAtNi02aiwgLTEuNSwgIngiLCBiIngiLCBieXRlYXJyYXkoYiJ4IiksCisgICAgICAgICAgICAgICAgICAgICAgICgzLCksIFszXSwgezM6IDZ9LAogICAgICAgICAgICAgICAgICAgICAgICAoMSwyKSwgWzMsNF0sIHs1OiA2fSwKICAgICAgICAgICAgICAgICAgICAgICAgdHVwbGUyKCgxLDIpKSwgdHVwbGUzKCgxLDIpKSwgdHVwbGUzKHJhbmdlKDEwMCkpLAogICAgICAgICAgICAgICAgICAgICAgICBbMyw0XSwgbGlzdDIoWzMsNF0pLCBsaXN0MyhbMyw0XSksIGxpc3QzKHJhbmdlKDEwMCkpLAogICAgICAgICAgICAgICAgICAgICAgICBzZXQoezd9KSwgc2V0Mih7N30pLCBzZXQzKHs3fSksCiAgICAgICAgICAgICAgICAgICAgICAgIGZyb3plbnNldCh7OH0pLCBmcm96ZW5zZXQyKHs4fSksIGZyb3plbnNldDMoezh9KSwKICAgICAgICAgICAgICAgICAgICAgICAgZGljdDIoezU6IDZ9KSwgZGljdDMoezU6IDZ9KSwKLSAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2UoMTAsIC0xMSwgLTEpCisgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlKDEwLCAtMTEsIC0xKSwKKyAgICAgICAgICAgICAgICAgICAgICAgVHJ1ZSwgRmFsc2UsIE5vbmUsIC4uLiwKICAgICAgICAgICAgICAgICAgICAgICApOgogICAgICAgICAgICAgbmF0aXZlID0gcmVwcihzaW1wbGUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwcmludC5wZm9ybWF0KHNpbXBsZSksIG5hdGl2ZSkKQEAgLTUzMCw2ICs1MzUsNTcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcHJpbnQucGZvcm1hdChkaWN0LmZyb21rZXlzKGtleXMsIDApKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAneyVyOiAwLCAlcjogMH0nICUgdHVwbGUoc29ydGVkKGtleXMsIGtleT1pZCkpKQogCisgICAgZGVmIHRlc3Rfc3RyX3dyYXAoc2VsZik6CisgICAgICAgICMgcHByaW50IHRyaWVzIHRvIHdyYXAgc3RyaW5ncyBpbnRlbGxpZ2VudGx5CisgICAgICAgIGZveCA9ICd0aGUgcXVpY2sgYnJvd24gZm94IGp1bXBlZCBvdmVyIGEgbGF6eSBkb2cnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHByaW50LnBmb3JtYXQoZm94LCB3aWR0aD0yMCksICIiIlwKKygndGhlIHF1aWNrICcKKyAnYnJvd24gZm94ICcKKyAnanVtcGVkIG92ZXIgYSAnCisgJ2xhenkgZG9nJykiIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHByaW50LnBmb3JtYXQoeydhJzogMSwgJ2InOiBmb3gsICdjJzogMn0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9MjYpLCAiIiJcCit7J2EnOiAxLAorICdiJzogJ3RoZSBxdWljayBicm93biAnCisgICAgICAnZm94IGp1bXBlZCBvdmVyICcKKyAgICAgICdhIGxhenkgZG9nJywKKyAnYyc6IDJ9IiIiKQorICAgICAgICAjIFdpdGggc29tZSBzcGVjaWFsIGNoYXJhY3RlcnMKKyAgICAgICAgIyAtIFxuIGFsd2F5cyB0cmlnZ2VycyBhIG5ldyBsaW5lIGluIHRoZSBwcHJpbnQKKyAgICAgICAgIyAtIFx0IGFuZCBcbiBhcmUgZXNjYXBlZAorICAgICAgICAjIC0gbm9uLUFTQ0lJIGlzIGFsbG93ZWQKKyAgICAgICAgIyAtIGFuIGFwb3N0cm9waGUgZG9lc24ndCBkaXNydXB0IHRoZSBwcHJpbnQKKyAgICAgICAgc3BlY2lhbCA9ICJQb3J0b25zIGRpeCBib25zIFwid2hpc2t5c1wiXG7DoCBsJ2F2b2NhdCBnb3VqYXRcdCBxdWkgZnVtYWl0IGF1IHpvbyIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcHJpbnQucGZvcm1hdChzcGVjaWFsLCB3aWR0aD0yMSksICIiIlwKKygnUG9ydG9ucyBkaXggJworICdib25zICJ3aGlza3lzIlxcbicKKyAiw6AgbCdhdm9jYXQgIgorICdnb3VqYXRcXHQgcXVpICcKKyAnZnVtYWl0IGF1IHpvbycpIiIiKQorICAgICAgICAjIEFuIHVud3JhcHBhYmxlIHN0cmluZyBpcyBmb3JtYXR0ZWQgYXMgaXRzIHJlcHIKKyAgICAgICAgdW53cmFwcGFibGUgPSAieCIgKiAxMDAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcHJpbnQucGZvcm1hdCh1bndyYXBwYWJsZSwgd2lkdGg9ODApLCByZXByKHVud3JhcHBhYmxlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcHJpbnQucGZvcm1hdCgnJyksICInJyIpCisgICAgICAgICMgQ2hlY2sgdGhhdCB0aGUgcHByaW50IGlzIGEgdXNhYmxlIHJlcHIKKyAgICAgICAgc3BlY2lhbCAqPSAxMAorICAgICAgICBmb3Igd2lkdGggaW4gcmFuZ2UoMywgNDApOgorICAgICAgICAgICAgZm9ybWF0dGVkID0gcHByaW50LnBmb3JtYXQoc3BlY2lhbCwgd2lkdGg9d2lkdGgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwoZm9ybWF0dGVkKSwgc3BlY2lhbCkKKyAgICAgICAgICAgIGZvcm1hdHRlZCA9IHBwcmludC5wZm9ybWF0KFtzcGVjaWFsXSAqIDIsIHdpZHRoPXdpZHRoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKGZvcm1hdHRlZCksIFtzcGVjaWFsXSAqIDIpCisKKyAgICBkZWYgdGVzdF9jb21wYWN0KHNlbGYpOgorICAgICAgICBvID0gKFtsaXN0KHJhbmdlKGkgKiBpKSkgZm9yIGkgaW4gcmFuZ2UoNSldICsKKyAgICAgICAgICAgICBbbGlzdChyYW5nZShpKSkgZm9yIGkgaW4gcmFuZ2UoNildKQorICAgICAgICBleHBlY3RlZCA9ICIiIlwKK1tbXSwgWzBdLCBbMCwgMSwgMiwgM10sCisgWzAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDhdLAorIFswLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywKKyAgMTQsIDE1XSwKKyBbXSwgWzBdLCBbMCwgMV0sIFswLCAxLCAyXSwgWzAsIDEsIDIsIDNdLAorIFswLCAxLCAyLCAzLCA0XV0iIiIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcHJpbnQucGZvcm1hdChvLCB3aWR0aD00OCwgY29tcGFjdD1UcnVlKSwgZXhwZWN0ZWQpCisKIAogY2xhc3MgRG90dGVkUHJldHR5UHJpbnRlcihwcHJpbnQuUHJldHR5UHJpbnRlcik6CiAKQEAgLTU0NCw5ICs2MDAsNSBAQAogICAgICAgICAgICAgICAgIHNlbGYsIG9iamVjdCwgY29udGV4dCwgbWF4bGV2ZWxzLCBsZXZlbCkKIAogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgdGVzdC5zdXBwb3J0LnJ1bl91bml0dGVzdChRdWVyeVRlc3RDYXNlKQotCi0KIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcHJpbnQucHkgYi9MaWIvdGVzdC90ZXN0X3ByaW50LnB5CmluZGV4IDlkNmRiZWEuLjdlZWEzNDkgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcHJpbnQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9wcmludC5weQpAQCAtMSw2MiArMSw1NSBAQAotIiIiVGVzdCBjb3JyZWN0IG9wZXJhdGlvbiBvZiB0aGUgcHJpbnQgZnVuY3Rpb24uCi0iIiIKLQotIyBJbiAyLjYsIHRoaXMgZ2l2ZXMgdXMgdGhlIGJlaGF2aW9yIHdlIHdhbnQuICBJbiAzLjAsIGl0IGhhcwotIyAgbm8gZnVuY3Rpb24sIGJ1dCBpdCBzdGlsbCBtdXN0IHBhcnNlIGNvcnJlY3RseS4KLWZyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24KLQogaW1wb3J0IHVuaXR0ZXN0Ci1mcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKK2Zyb20gaW8gaW1wb3J0IFN0cmluZ0lPCiAKLXRyeToKLSAgICAjIDMueAotICAgIGZyb20gaW8gaW1wb3J0IFN0cmluZ0lPCi1leGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgIyAyLngKLSAgICBmcm9tIFN0cmluZ0lPIGltcG9ydCBTdHJpbmdJTworZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiAKIE5vdERlZmluZWQgPSBvYmplY3QoKQogCiAjIEEgZGlzcGF0Y2ggdGFibGUgYWxsIDggY29tYmluYXRpb25zIG9mIHByb3ZpZGluZwotIyAgc2VwLCBlbmQsIGFuZCBmaWxlCisjIHNlcCwgZW5kLCBhbmQgZmlsZS4KICMgSSB1c2UgdGhpcyBtYWNoaW5lcnkgc28gdGhhdCBJJ20gbm90IGp1c3QgcGFzc2luZyBkZWZhdWx0Ci0jICB2YWx1ZXMgdG8gcHJpbnQsIEknbSBlaXRoZXIgcGFzc2luZyBvciBub3QgcGFzc2luZyBpbiB0aGUKLSMgIGFyZ3VtZW50cworIyB2YWx1ZXMgdG8gcHJpbnQsIEknbSBlaXRoZXIgcGFzc2luZyBvciBub3QgcGFzc2luZyBpbiB0aGUKKyMgYXJndW1lbnRzLgogZGlzcGF0Y2ggPSB7CiAgICAgKEZhbHNlLCBGYWxzZSwgRmFsc2UpOgotICAgICBsYW1iZGEgYXJncywgc2VwLCBlbmQsIGZpbGU6IHByaW50KCphcmdzKSwKKyAgICAgICAgbGFtYmRhIGFyZ3MsIHNlcCwgZW5kLCBmaWxlOiBwcmludCgqYXJncyksCiAgICAgKEZhbHNlLCBGYWxzZSwgVHJ1ZSk6Ci0gICAgIGxhbWJkYSBhcmdzLCBzZXAsIGVuZCwgZmlsZTogcHJpbnQoZmlsZT1maWxlLCAqYXJncyksCisgICAgICAgIGxhbWJkYSBhcmdzLCBzZXAsIGVuZCwgZmlsZTogcHJpbnQoZmlsZT1maWxlLCAqYXJncyksCiAgICAgKEZhbHNlLCBUcnVlLCAgRmFsc2UpOgotICAgICBsYW1iZGEgYXJncywgc2VwLCBlbmQsIGZpbGU6IHByaW50KGVuZD1lbmQsICphcmdzKSwKKyAgICAgICAgbGFtYmRhIGFyZ3MsIHNlcCwgZW5kLCBmaWxlOiBwcmludChlbmQ9ZW5kLCAqYXJncyksCiAgICAgKEZhbHNlLCBUcnVlLCAgVHJ1ZSk6Ci0gICAgIGxhbWJkYSBhcmdzLCBzZXAsIGVuZCwgZmlsZTogcHJpbnQoZW5kPWVuZCwgZmlsZT1maWxlLCAqYXJncyksCisgICAgICAgIGxhbWJkYSBhcmdzLCBzZXAsIGVuZCwgZmlsZTogcHJpbnQoZW5kPWVuZCwgZmlsZT1maWxlLCAqYXJncyksCiAgICAgKFRydWUsICBGYWxzZSwgRmFsc2UpOgotICAgICBsYW1iZGEgYXJncywgc2VwLCBlbmQsIGZpbGU6IHByaW50KHNlcD1zZXAsICphcmdzKSwKKyAgICAgICAgbGFtYmRhIGFyZ3MsIHNlcCwgZW5kLCBmaWxlOiBwcmludChzZXA9c2VwLCAqYXJncyksCiAgICAgKFRydWUsICBGYWxzZSwgVHJ1ZSk6Ci0gICAgIGxhbWJkYSBhcmdzLCBzZXAsIGVuZCwgZmlsZTogcHJpbnQoc2VwPXNlcCwgZmlsZT1maWxlLCAqYXJncyksCisgICAgICAgIGxhbWJkYSBhcmdzLCBzZXAsIGVuZCwgZmlsZTogcHJpbnQoc2VwPXNlcCwgZmlsZT1maWxlLCAqYXJncyksCiAgICAgKFRydWUsICBUcnVlLCAgRmFsc2UpOgotICAgICBsYW1iZGEgYXJncywgc2VwLCBlbmQsIGZpbGU6IHByaW50KHNlcD1zZXAsIGVuZD1lbmQsICphcmdzKSwKKyAgICAgICAgbGFtYmRhIGFyZ3MsIHNlcCwgZW5kLCBmaWxlOiBwcmludChzZXA9c2VwLCBlbmQ9ZW5kLCAqYXJncyksCiAgICAgKFRydWUsICBUcnVlLCAgVHJ1ZSk6Ci0gICAgIGxhbWJkYSBhcmdzLCBzZXAsIGVuZCwgZmlsZTogcHJpbnQoc2VwPXNlcCwgZW5kPWVuZCwgZmlsZT1maWxlLCAqYXJncyksCi0gICAgfQorICAgICAgICBsYW1iZGEgYXJncywgc2VwLCBlbmQsIGZpbGU6IHByaW50KHNlcD1zZXAsIGVuZD1lbmQsIGZpbGU9ZmlsZSwgKmFyZ3MpLAorfQorCiAKICMgQ2xhc3MgdXNlZCB0byB0ZXN0IF9fc3RyX18gYW5kIHByaW50CiBjbGFzcyBDbGFzc1dpdGhfX3N0cl9fOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCB4KToKICAgICAgICAgc2VsZi54ID0geAorCiAgICAgZGVmIF9fc3RyX18oc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLngKIAotY2xhc3MgVGVzdFByaW50KHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBkZWYgY2hlY2soc2VsZiwgZXhwZWN0ZWQsIGFyZ3MsCi0gICAgICAgICAgICBzZXA9Tm90RGVmaW5lZCwgZW5kPU5vdERlZmluZWQsIGZpbGU9Tm90RGVmaW5lZCk6Ci0gICAgICAgICMgQ2FwdHVyZSBzeXMuc3Rkb3V0IGluIGEgU3RyaW5nSU8uICBDYWxsIHByaW50IHdpdGggYXJncywKLSAgICAgICAgIyAgYW5kIHdpdGggc2VwLCBlbmQsIGFuZCBmaWxlLCBpZiB0aGV5J3JlIGRlZmluZWQuICBSZXN1bHQKLSAgICAgICAgIyAgbXVzdCBtYXRjaCBleHBlY3RlZC4KIAotICAgICAgICAjIExvb2sgdXAgdGhlIGFjdHVhbCBmdW5jdGlvbiB0byBjYWxsLCBiYXNlZCBvbiBpZiBzZXAsIGVuZCwgYW5kIGZpbGUKLSAgICAgICAgIyAgYXJlIGRlZmluZWQKK2NsYXNzIFRlc3RQcmludCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiVGVzdCBjb3JyZWN0IG9wZXJhdGlvbiBvZiB0aGUgcHJpbnQgZnVuY3Rpb24uIiIiCisKKyAgICBkZWYgY2hlY2soc2VsZiwgZXhwZWN0ZWQsIGFyZ3MsCisgICAgICAgICAgICAgIHNlcD1Ob3REZWZpbmVkLCBlbmQ9Tm90RGVmaW5lZCwgZmlsZT1Ob3REZWZpbmVkKToKKyAgICAgICAgIyBDYXB0dXJlIHN5cy5zdGRvdXQgaW4gYSBTdHJpbmdJTy4gIENhbGwgcHJpbnQgd2l0aCBhcmdzLAorICAgICAgICAjIGFuZCB3aXRoIHNlcCwgZW5kLCBhbmQgZmlsZSwgaWYgdGhleSdyZSBkZWZpbmVkLiAgUmVzdWx0CisgICAgICAgICMgbXVzdCBtYXRjaCBleHBlY3RlZC4KKworICAgICAgICAjIExvb2sgdXAgdGhlIGFjdHVhbCBmdW5jdGlvbiB0byBjYWxsLCBiYXNlZCBvbiBpZiBzZXAsIGVuZCwKKyAgICAgICAgIyBhbmQgZmlsZSBhcmUgZGVmaW5lZC4KICAgICAgICAgZm4gPSBkaXNwYXRjaFsoc2VwIGlzIG5vdCBOb3REZWZpbmVkLAogICAgICAgICAgICAgICAgICAgICAgICBlbmQgaXMgbm90IE5vdERlZmluZWQsCiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUgaXMgbm90IE5vdERlZmluZWQpXQpAQCAtNjksNyArNjIsNyBAQAogICAgIGRlZiB0ZXN0X3ByaW50KHNlbGYpOgogICAgICAgICBkZWYgeChleHBlY3RlZCwgYXJncywgc2VwPU5vdERlZmluZWQsIGVuZD1Ob3REZWZpbmVkKToKICAgICAgICAgICAgICMgUnVuIHRoZSB0ZXN0IDIgd2F5czogbm90IHVzaW5nIGZpbGUsIGFuZCB1c2luZwotICAgICAgICAgICAgIyAgZmlsZSBkaXJlY3RlZCB0byBhIFN0cmluZ0lPCisgICAgICAgICAgICAjIGZpbGUgZGlyZWN0ZWQgdG8gYSBTdHJpbmdJTy4KIAogICAgICAgICAgICAgc2VsZi5jaGVjayhleHBlY3RlZCwgYXJncywgc2VwPXNlcCwgZW5kPWVuZCkKIApAQCAtMTAxLDExICs5NCw2IEBACiAgICAgICAgIHgoJypcbicsIChDbGFzc1dpdGhfX3N0cl9fKCcqJyksKSkKICAgICAgICAgeCgnYWJjIDFcbicsIChDbGFzc1dpdGhfX3N0cl9fKCdhYmMnKSwgMSkpCiAKLSMgICAgICAgICMgMi54IHVuaWNvZGUgdGVzdHMKLSMgICAgICAgIHgodScxIDJcbicsICgnMScsIHUnMicpKQotIyAgICAgICAgeCh1J3VcMTIzNFxuJywgKHUndVwxMjM0JywpKQotIyAgICAgICAgeCh1JyAgYWJjIDFcbicsICgnICcsIENsYXNzV2l0aF9fc3RyX18odSdhYmMnKSwgMSkpCi0KICAgICAgICAgIyBlcnJvcnMKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwcmludCwgJycsIHNlcD0zKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHByaW50LCAnJywgZW5kPTMpCkBAIC0xMTMsMTIgKzEwMSwxNCBAQAogCiAgICAgZGVmIHRlc3RfcHJpbnRfZmx1c2goc2VsZik6CiAgICAgICAgICMgb3BlcmF0aW9uIG9mIHRoZSBmbHVzaCBmbGFnCi0gICAgICAgIGNsYXNzIGZpbGVsaWtlKCk6CisgICAgICAgIGNsYXNzIGZpbGVsaWtlOgogICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgICAgICAgICAgICAgIHNlbGYud3JpdHRlbiA9ICcnCiAgICAgICAgICAgICAgICAgc2VsZi5mbHVzaGVkID0gMAorCiAgICAgICAgICAgICBkZWYgd3JpdGUoc2VsZiwgc3RyKToKICAgICAgICAgICAgICAgICBzZWxmLndyaXR0ZW4gKz0gc3RyCisKICAgICAgICAgICAgIGRlZiBmbHVzaChzZWxmKToKICAgICAgICAgICAgICAgICBzZWxmLmZsdXNoZWQgKz0gMQogCkBAIC0xMzAsMTUgKzEyMCwxMyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZmx1c2hlZCwgMikKIAogICAgICAgICAjIGVuc3VyZSBleGNlcHRpb25zIGZyb20gZmx1c2ggYXJlIHBhc3NlZCB0aHJvdWdoCi0gICAgICAgIGNsYXNzIG5vZmx1c2goKToKKyAgICAgICAgY2xhc3Mgbm9mbHVzaDoKICAgICAgICAgICAgIGRlZiB3cml0ZShzZWxmLCBzdHIpOgogICAgICAgICAgICAgICAgIHBhc3MKKwogICAgICAgICAgICAgZGVmIGZsdXNoKHNlbGYpOgogICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIHByaW50LCAxLCBmaWxlPW5vZmx1c2goKSwgZmx1c2g9VHJ1ZSkKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KFRlc3RQcmludCkKLQogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wcm9maWxlLnB5IGIvTGliL3Rlc3QvdGVzdF9wcm9maWxlLnB5CmluZGV4IGNkN2VjNTguLjFmYzNjNDIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcHJvZmlsZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3Byb2ZpbGUucHkKQEAgLTMsOSArMywxMSBAQAogaW1wb3J0IHN5cwogaW1wb3J0IHBzdGF0cwogaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgb3MKIGZyb20gZGlmZmxpYiBpbXBvcnQgdW5pZmllZF9kaWZmCiBmcm9tIGlvIGltcG9ydCBTdHJpbmdJTwotZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IFRFU1RGTiwgcnVuX3VuaXR0ZXN0LCB1bmxpbmsKK2Zyb20gY29udGV4dGxpYiBpbXBvcnQgY29udGV4dG1hbmFnZXIKIAogaW1wb3J0IHByb2ZpbGUKIGZyb20gdGVzdC5wcm9maWxlZSBpbXBvcnQgdGVzdGZ1bmMsIHRpbWVyCkBAIC0xNCw5ICsxNiwxMyBAQAogY2xhc3MgUHJvZmlsZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgcHJvZmlsZXJjbGFzcyA9IHByb2ZpbGUuUHJvZmlsZQorICAgIHByb2ZpbGVybW9kdWxlID0gcHJvZmlsZQogICAgIG1ldGhvZG5hbWVzID0gWydwcmludF9zdGF0cycsICdwcmludF9jYWxsZXJzJywgJ3ByaW50X2NhbGxlZXMnXQogICAgIGV4cGVjdGVkX21heF9vdXRwdXQgPSAnOjAobWF4KScKIAorICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgdW5saW5rKFRFU1RGTikKKwogICAgIGRlZiBnZXRfZXhwZWN0ZWRfb3V0cHV0KHNlbGYpOgogICAgICAgICByZXR1cm4gX1Byb2ZpbGVPdXRwdXQKIApAQCAtNzQsNiArODAsMTkgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oc2VsZi5leHBlY3RlZF9tYXhfb3V0cHV0LCByZXMsCiAgICAgICAgICAgICAgICAgIlByb2ZpbGluZyB7MCFyfSBkaWRuJ3QgcmVwb3J0IG1heDpcbnsxfSIuZm9ybWF0KHN0bXQsIHJlcykpCiAKKyAgICBkZWYgdGVzdF9ydW4oc2VsZik6CisgICAgICAgIHdpdGggc2lsZW50KCk6CisgICAgICAgICAgICBzZWxmLnByb2ZpbGVybW9kdWxlLnJ1bigiaW50KCcxJykiKQorICAgICAgICBzZWxmLnByb2ZpbGVybW9kdWxlLnJ1bigiaW50KCcxJykiLCBmaWxlbmFtZT1URVNURk4pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhURVNURk4pKQorCisgICAgZGVmIHRlc3RfcnVuY3R4KHNlbGYpOgorICAgICAgICB3aXRoIHNpbGVudCgpOgorICAgICAgICAgICAgc2VsZi5wcm9maWxlcm1vZHVsZS5ydW5jdHgoInRlc3RmdW5jKCkiLCBnbG9iYWxzKCksIGxvY2FscygpKQorICAgICAgICBzZWxmLnByb2ZpbGVybW9kdWxlLnJ1bmN0eCgidGVzdGZ1bmMoKSIsIGdsb2JhbHMoKSwgbG9jYWxzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWU9VEVTVEZOKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoVEVTVEZOKSkKKwogCiBkZWYgcmVnZW5lcmF0ZV9leHBlY3RlZF9vdXRwdXQoZmlsZW5hbWUsIGNscyk6CiAgICAgZmlsZW5hbWUgPSBmaWxlbmFtZS5yc3RyaXAoJ2NvJykKQEAgLTk1LDYgKzExNCwxNCBAQAogICAgICAgICAgICAgICAgICAgICBtZXRob2QsIHJlc3VsdHNbaSsxXSkpCiAgICAgICAgIGYud3JpdGUoJ1xuaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjpcbiAgICBtYWluKClcbicpCiAKK0Bjb250ZXh0bWFuYWdlcgorZGVmIHNpbGVudCgpOgorICAgIHN0ZG91dCA9IHN5cy5zdGRvdXQKKyAgICB0cnk6CisgICAgICAgIHN5cy5zdGRvdXQgPSBTdHJpbmdJTygpCisgICAgICAgIHlpZWxkCisgICAgZmluYWxseToKKyAgICAgICAgc3lzLnN0ZG91dCA9IHN0ZG91dAogCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgcnVuX3VuaXR0ZXN0KFByb2ZpbGVUZXN0KQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wcm9wZXJ0eS5weSBiL0xpYi90ZXN0L3Rlc3RfcHJvcGVydHkucHkKaW5kZXggOTZlZWI4OC4uY2VlNzIwMyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9wcm9wZXJ0eS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3Byb3BlcnR5LnB5CkBAIC0xNDAsOSArMTQwLDkgQEAKICAgICAgICAgIyBjaGVjayB0aGF0IHRoZSBwcm9wZXJ0eSdzIF9faXNhYnN0cmFjdG1ldGhvZF9fIGRlc2NyaXB0b3IgZG9lcyB0aGUKICAgICAgICAgIyByaWdodCB0aGluZyB3aGVuIHByZXNlbnRlZCB3aXRoIGEgdmFsdWUgdGhhdCBmYWlscyB0cnV0aCB0ZXN0aW5nOgogICAgICAgICBjbGFzcyBOb3RCb29sKG9iamVjdCk6Ci0gICAgICAgICAgICBkZWYgX19ub256ZXJvX18oc2VsZik6CisgICAgICAgICAgICBkZWYgX19ib29sX18oc2VsZik6CiAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigpCi0gICAgICAgICAgICBfX2xlbl9fID0gX19ub256ZXJvX18KKyAgICAgICAgICAgIF9fbGVuX18gPSBfX2Jvb2xfXwogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgogICAgICAgICAgICAgY2xhc3MgQyhvYmplY3QpOgogICAgICAgICAgICAgICAgIGRlZiBmb28oc2VsZik6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3B0eS5weSBiL0xpYi90ZXN0L3Rlc3RfcHR5LnB5CmluZGV4IDI5Mjk3ZjguLjg5MTY4NjEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcHR5LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcHR5LnB5CkBAIC0xODcsNyArMTg3LDcgQEAKICAgICAgICAgICAgICMjZGVidWcoIlJlYWRpbmcgZnJvbSBtYXN0ZXJfZmQgbm93IHRoYXQgdGhlIGNoaWxkIGhhcyBleGl0ZWQiKQogICAgICAgICAgICAgIyN0cnk6CiAgICAgICAgICAgICAjIyAgICBzMSA9IG9zLnJlYWQobWFzdGVyX2ZkLCAxMDI0KQotICAgICAgICAgICAgIyNleGNlcHQgb3MuZXJyb3I6CisgICAgICAgICAgICAjI2V4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgIyMgICAgcGFzcwogICAgICAgICAgICAgIyNlbHNlOgogICAgICAgICAgICAgIyMgICAgcmFpc2UgVGVzdEZhaWxlZCgiUmVhZCBmcm9tIG1hc3Rlcl9mZCBkaWQgbm90IHJhaXNlIGV4Y2VwdGlvbiIpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3B5X2NvbXBpbGUucHkgYi9MaWIvdGVzdC90ZXN0X3B5X2NvbXBpbGUucHkKaW5kZXggZjNjMWE2YS4uYzFmZDRmNiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9weV9jb21waWxlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcHlfY29tcGlsZS5weQpAQCAtMSwxMSArMSwxNCBAQAotaW1wb3J0IGltcAoraW1wb3J0IGltcG9ydGxpYi51dGlsCiBpbXBvcnQgb3MKIGltcG9ydCBweV9jb21waWxlCiBpbXBvcnQgc2h1dGlsCitpbXBvcnQgc3RhdAoraW1wb3J0IHN5cwogaW1wb3J0IHRlbXBmaWxlCiBpbXBvcnQgdW5pdHRlc3QKIAotZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0LCBzY3JpcHRfaGVscGVyCitmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKKwogCiBjbGFzcyBQeUNvbXBpbGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKQEAgLTEzLDcgKzE2LDcgQEAKICAgICAgICAgc2VsZi5kaXJlY3RvcnkgPSB0ZW1wZmlsZS5ta2R0ZW1wKCkKICAgICAgICAgc2VsZi5zb3VyY2VfcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLmRpcmVjdG9yeSwgJ190ZXN0LnB5JykKICAgICAgICAgc2VsZi5weWNfcGF0aCA9IHNlbGYuc291cmNlX3BhdGggKyAnYycKLSAgICAgICAgc2VsZi5jYWNoZV9wYXRoID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKHNlbGYuc291cmNlX3BhdGgpCisgICAgICAgIHNlbGYuY2FjaGVfcGF0aCA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHNlbGYuc291cmNlX3BhdGgpCiAgICAgICAgIHNlbGYuY3dkX2RyaXZlID0gb3MucGF0aC5zcGxpdGRyaXZlKG9zLmdldGN3ZCgpKVswXQogICAgICAgICAjIEluIHRoZXNlIHRlc3RzIHdlIGNvbXB1dGUgcmVsYXRpdmUgcGF0aHMuICBXaGVuIHVzaW5nIFdpbmRvd3MsIHRoZQogICAgICAgICAjIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgcGF0aCBhbmQgdGhlICdzZWxmLnNvdXJjZV9wYXRoJyBtaWdodCBiZQpAQCAtMzUsMTYgKzM4LDM0IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhzZWxmLnB5Y19wYXRoKSkKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmV4aXN0cyhzZWxmLmNhY2hlX3BhdGgpKQogCisgICAgZGVmIHRlc3RfZG9fbm90X292ZXJ3cml0ZV9zeW1saW5rcyhzZWxmKToKKyAgICAgICAgIyBJbiB0aGUgZmFjZSBvZiBhIGNmaWxlIGFyZ3VtZW50IGJlaW5nIGEgc3ltbGluaywgYmFpbCBvdXQuCisgICAgICAgICMgSXNzdWUgIzE3MjIyCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLnN5bWxpbmsoc2VsZi5weWNfcGF0aCArICcuYWN0dWFsJywgc2VsZi5weWNfcGF0aCkKKyAgICAgICAgZXhjZXB0IChOb3RJbXBsZW1lbnRlZEVycm9yLCBPU0Vycm9yKToKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoJ25lZWQgdG8gYmUgYWJsZSB0byBjcmVhdGUgYSBzeW1saW5rIGZvciBhIGZpbGUnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYXNzZXJ0IG9zLnBhdGguaXNsaW5rKHNlbGYucHljX3BhdGgpCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEZpbGVFeGlzdHNFcnJvcik6CisgICAgICAgICAgICAgICAgcHlfY29tcGlsZS5jb21waWxlKHNlbGYuc291cmNlX3BhdGgsIHNlbGYucHljX3BhdGgpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKG5vdCBvcy5wYXRoLmV4aXN0cyhvcy5kZXZudWxsKSBvciBvcy5wYXRoLmlzZmlsZShvcy5kZXZudWxsKSwKKyAgICAgICAgICAgICAgICAgICAgICdyZXF1aXJlcyBvcy5kZXZudWxsIGFuZCBmb3IgaXQgdG8gYmUgYSBub24tcmVndWxhciBmaWxlJykKKyAgICBkZWYgdGVzdF9kb19ub3Rfb3ZlcndyaXRlX25vbnJlZ3VsYXJfZmlsZXMoc2VsZik6CisgICAgICAgICMgSW4gdGhlIGZhY2Ugb2YgYSBjZmlsZSBhcmd1bWVudCBiZWluZyBhIG5vbi1yZWd1bGFyIGZpbGUsIGJhaWwgb3V0LgorICAgICAgICAjIElzc3VlICMxNzIyMgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEZpbGVFeGlzdHNFcnJvcik6CisgICAgICAgICAgICBweV9jb21waWxlLmNvbXBpbGUoc2VsZi5zb3VyY2VfcGF0aCwgb3MuZGV2bnVsbCkKKwogICAgIGRlZiB0ZXN0X2NhY2hlX3BhdGgoc2VsZik6CiAgICAgICAgIHB5X2NvbXBpbGUuY29tcGlsZShzZWxmLnNvdXJjZV9wYXRoKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoc2VsZi5jYWNoZV9wYXRoKSkKIAogICAgIGRlZiB0ZXN0X2N3ZChzZWxmKToKLSAgICAgICAgY3dkID0gb3MuZ2V0Y3dkKCkKLSAgICAgICAgb3MuY2hkaXIoc2VsZi5kaXJlY3RvcnkpCi0gICAgICAgIHB5X2NvbXBpbGUuY29tcGlsZShvcy5wYXRoLmJhc2VuYW1lKHNlbGYuc291cmNlX3BhdGgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5iYXNlbmFtZShzZWxmLnB5Y19wYXRoKSkKLSAgICAgICAgb3MuY2hkaXIoY3dkKQorICAgICAgICB3aXRoIHN1cHBvcnQuY2hhbmdlX2N3ZChzZWxmLmRpcmVjdG9yeSk6CisgICAgICAgICAgICBweV9jb21waWxlLmNvbXBpbGUob3MucGF0aC5iYXNlbmFtZShzZWxmLnNvdXJjZV9wYXRoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmJhc2VuYW1lKHNlbGYucHljX3BhdGgpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoc2VsZi5weWNfcGF0aCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5leGlzdHMoc2VsZi5jYWNoZV9wYXRoKSkKIApAQCAtNTQsOCArNzUsNDggQEAKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHNlbGYucHljX3BhdGgpKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKHNlbGYuY2FjaGVfcGF0aCkpCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChQeUNvbXBpbGVUZXN0cykKKyAgICBAdW5pdHRlc3Quc2tpcElmKGhhc2F0dHIob3MsICdnZXRldWlkJykgYW5kIG9zLmdldGV1aWQoKSA9PSAwLAorICAgICAgICAgICAgICAgICAgICAgJ25vbi1yb290IHVzZXIgcmVxdWlyZWQnKQorICAgIEB1bml0dGVzdC5za2lwSWYob3MubmFtZSA9PSAnbnQnLAorICAgICAgICAgICAgICAgICAgICAgJ2Nhbm5vdCBjb250cm9sIGRpcmVjdG9yeSBwZXJtaXNzaW9ucyBvbiBXaW5kb3dzJykKKyAgICBkZWYgdGVzdF9leGNlcHRpb25zX3Byb3BhZ2F0ZShzZWxmKToKKyAgICAgICAgIyBNYWtlIHN1cmUgdGhhdCBleGNlcHRpb25zIHJhaXNlZCB0aGFua3MgdG8gaXNzdWVzIHdpdGggd3JpdGluZworICAgICAgICAjIGJ5dGVjb2RlLgorICAgICAgICAjIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxNzI0NAorICAgICAgICBtb2RlID0gb3Muc3RhdChzZWxmLmRpcmVjdG9yeSkKKyAgICAgICAgb3MuY2htb2Qoc2VsZi5kaXJlY3RvcnksIHN0YXQuU19JUkVBRCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yKToKKyAgICAgICAgICAgICAgICBweV9jb21waWxlLmNvbXBpbGUoc2VsZi5zb3VyY2VfcGF0aCwgc2VsZi5weWNfcGF0aCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLmNobW9kKHNlbGYuZGlyZWN0b3J5LCBtb2RlLnN0X21vZGUpCisKKyAgICBkZWYgdGVzdF9iYWRfY29kaW5nKHNlbGYpOgorICAgICAgICBiYWRfY29kaW5nID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICdiYWRfY29kaW5nMi5weScpCisgICAgICAgIHdpdGggc3VwcG9ydC5jYXB0dXJlZF9zdGRlcnIoKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHB5X2NvbXBpbGUuY29tcGlsZShiYWRfY29kaW5nLCBkb3JhaXNlPUZhbHNlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmV4aXN0cygKKyAgICAgICAgICAgIGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKGJhZF9jb2RpbmcpKSkKKworICAgIGRlZiB0ZXN0X2RvdWJsZV9kb3Rfbm9fY2xvYmJlcihzZWxmKToKKyAgICAgICAgIyBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMjI5NjYKKyAgICAgICAgIyBweV9jb21waWxlIGZvby5iYXIucHkgLT4gX19weWNhY2hlX18vZm9vLmNweXRob24tMzQucHljCisgICAgICAgIHdlaXJkX3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5kaXJlY3RvcnksICdmb28uYmFyLnB5JykKKyAgICAgICAgY2FjaGVfcGF0aCA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHdlaXJkX3BhdGgpCisgICAgICAgIHB5Y19wYXRoID0gd2VpcmRfcGF0aCArICdjJworICAgICAgICBoZWFkLCB0YWlsID0gb3MucGF0aC5zcGxpdChjYWNoZV9wYXRoKQorICAgICAgICBwZW51bHRpbWF0ZV90YWlsID0gb3MucGF0aC5iYXNlbmFtZShoZWFkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgb3MucGF0aC5qb2luKHBlbnVsdGltYXRlX3RhaWwsIHRhaWwpLAorICAgICAgICAgICAgb3MucGF0aC5qb2luKAorICAgICAgICAgICAgICAgICdfX3B5Y2FjaGVfXycsCisgICAgICAgICAgICAgICAgJ2Zvby5iYXIue30ucHljJy5mb3JtYXQoc3lzLmltcGxlbWVudGF0aW9uLmNhY2hlX3RhZykpKQorICAgICAgICB3aXRoIG9wZW4od2VpcmRfcGF0aCwgJ3cnKSBhcyBmaWxlOgorICAgICAgICAgICAgZmlsZS53cml0ZSgneCA9IDEyM1xuJykKKyAgICAgICAgcHlfY29tcGlsZS5jb21waWxlKHdlaXJkX3BhdGgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhjYWNoZV9wYXRoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmV4aXN0cyhweWNfcGF0aCkpCisKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9weWNsYnIucHkgYi9MaWIvdGVzdC90ZXN0X3B5Y2xici5weQppbmRleCBlODM5ODllLi4zOWViNjVmIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3B5Y2xici5weQorKysgYi9MaWIvdGVzdC90ZXN0X3B5Y2xici5weQpAQCAtMTQyLDcgKzE0Miw3IEBACiAgICAgICAgIHNlbGYuY2hlY2tNb2R1bGUoJ3B5Y2xicicpCiAgICAgICAgIHNlbGYuY2hlY2tNb2R1bGUoJ2FzdCcpCiAgICAgICAgIHNlbGYuY2hlY2tNb2R1bGUoJ2RvY3Rlc3QnLCBpZ25vcmU9KCJUZXN0UmVzdWx0cyIsICJfU3Bvb2ZPdXQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRG9jVGVzdENhc2UiKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkRvY1Rlc3RDYXNlIiwgJ19Eb2NUZXN0U3VpdGUnKSkKICAgICAgICAgc2VsZi5jaGVja01vZHVsZSgnZGlmZmxpYicsIGlnbm9yZT0oIk1hdGNoIiwpKQogCiAgICAgZGVmIHRlc3RfZGVjb3JhdG9ycyhzZWxmKToKQEAgLTE1OCw4ICsxNTgsOCBAQAogICAgICAgICBjbSgncmFuZG9tJywgaWdub3JlPSgnUmFuZG9tJywpKSAgIyBmcm9tIF9yYW5kb20gaW1wb3J0IFJhbmRvbSBhcyBDb3JlR2VuZXJhdG9yCiAgICAgICAgIGNtKCdjZ2knLCBpZ25vcmU9KCdsb2cnLCkpICAgICAgIyBzZXQgd2l0aCA9IGluIG1vZHVsZQogICAgICAgICBjbSgncGlja2xlJykKLSAgICAgICAgY20oJ2FpZmMnLCBpZ25vcmU9KCdvcGVuZnAnLCkpICAjIHNldCB3aXRoID0gaW4gbW9kdWxlCi0gICAgICAgIGNtKCdzcmVfcGFyc2UnLCBpZ25vcmU9KCdkdW1wJywpKSAjIGZyb20gc3JlX2NvbnN0YW50cyBpbXBvcnQgKgorICAgICAgICBjbSgnYWlmYycsIGlnbm9yZT0oJ29wZW5mcCcsICdfYWlmY19wYXJhbXMnKSkgICMgc2V0IHdpdGggPSBpbiBtb2R1bGUKKyAgICAgICAgY20oJ3NyZV9wYXJzZScsIGlnbm9yZT0oJ2R1bXAnLCAnZ3JvdXBzJykpICMgZnJvbSBzcmVfY29uc3RhbnRzIGltcG9ydCAqOyBwcm9wZXJ0eQogICAgICAgICBjbSgncGRiJykKICAgICAgICAgY20oJ3B5ZG9jJykKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9weWRvYy5weSBiL0xpYi90ZXN0L3Rlc3RfcHlkb2MucHkKaW5kZXggY2U0NmQ2MC4uMzQzZGQyMSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9weWRvYy5weQorKysgYi9MaWIvdGVzdC90ZXN0X3B5ZG9jLnB5CkBAIC0zLDE1ICszLDIxIEBACiBpbXBvcnQgYnVpbHRpbnMKIGltcG9ydCBjb250ZXh0bGliCiBpbXBvcnQgZGlmZmxpYgoraW1wb3J0IGltcG9ydGxpYi51dGlsCiBpbXBvcnQgaW5zcGVjdAogaW1wb3J0IHB5ZG9jCitpbXBvcnQgcHlfY29tcGlsZQogaW1wb3J0IGtleXdvcmQKK2ltcG9ydCBfcGlja2xlCiBpbXBvcnQgcGtndXRpbAogaW1wb3J0IHJlCitpbXBvcnQgc3RhdAogaW1wb3J0IHN0cmluZwogaW1wb3J0IHRlc3Quc3VwcG9ydAogaW1wb3J0IHRpbWUKK2ltcG9ydCB0eXBlcwogaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgdXJsbGliLnBhcnNlCiBpbXBvcnQgeG1sLmV0cmVlCiBpbXBvcnQgdGV4dHdyYXAKIGZyb20gaW8gaW1wb3J0IFN0cmluZ0lPCkBAIC0yMCw3ICsyNiw3IEBACiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgKAogICAgIFRFU1RGTiwgcm10cmVlLAogICAgIHJlYXBfY2hpbGRyZW4sIHJlYXBfdGhyZWFkcywgY2FwdHVyZWRfb3V0cHV0LCBjYXB0dXJlZF9zdGRvdXQsCi0gICAgY2FwdHVyZWRfc3RkZXJyLCB1bmxpbmsKKyAgICBjYXB0dXJlZF9zdGRlcnIsIHVubGluaywgcmVxdWlyZXNfZG9jc3RyaW5ncwogKQogZnJvbSB0ZXN0IGltcG9ydCBweWRvY19tb2QKIApAQCAtMjksOSArMzUsOSBAQAogZXhjZXB0IEltcG9ydEVycm9yOgogICAgIHRocmVhZGluZyA9IE5vbmUKIAotIyBKdXN0IGluIGNhc2Ugc3lzLm1vZHVsZXNbInRlc3QiXSBoYXMgdGhlIG9wdGlvbmFsIGF0dHJpYnV0ZSBfX2xvYWRlcl9fLgotaWYgaGFzYXR0cihweWRvY19tb2QsICJfX2xvYWRlcl9fIik6Ci0gICAgZGVsIHB5ZG9jX21vZC5fX2xvYWRlcl9fCitjbGFzcyBub25hc2NpaToKKyAgICAn0KbQtSDQvdC1INC70LDRgtC40L3QuNGG0Y8nCisgICAgcGFzcwogCiBpZiB0ZXN0LnN1cHBvcnQuSEFWRV9ET0NTVFJJTkdTOgogICAgIGV4cGVjdGVkX2RhdGFfZG9jc3RyaW5ncyA9ICgKQEAgLTQ5LDYgKzU1LDcgQEAKICAgICBidWlsdGlucy5vYmplY3QKICAgICAgICAgQQogICAgICAgICBCCisgICAgICAgIEMKIFx4MjBceDIwXHgyMFx4MjAKICAgICBjbGFzcyBBKGJ1aWx0aW5zLm9iamVjdCkKICAgICAgfCAgSGVsbG8gYW5kIGdvb2RieWUKQEAgLTc2LDYgKzgzLDI2IEBACiAgICAgIHwgIERhdGEgYW5kIG90aGVyIGF0dHJpYnV0ZXMgZGVmaW5lZCBoZXJlOgogICAgICB8XHgyMFx4MjAKICAgICAgfCAgTk9fTUVBTklORyA9ICdlZ2dzJworXHgyMFx4MjBceDIwXHgyMAorICAgIGNsYXNzIEMoYnVpbHRpbnMub2JqZWN0KQorICAgICB8ICBNZXRob2RzIGRlZmluZWQgaGVyZToKKyAgICAgfFx4MjBceDIwCisgICAgIHwgIGdldF9hbnN3ZXIoc2VsZikKKyAgICAgfCAgICAgIFJldHVybiBzYXlfbm8oKQorICAgICB8XHgyMFx4MjAKKyAgICAgfCAgaXNfaXRfdHJ1ZShzZWxmKQorICAgICB8ICAgICAgUmV0dXJuIHNlbGYuZ2V0X2Fuc3dlcigpCisgICAgIHxceDIwXHgyMAorICAgICB8ICBzYXlfbm8oc2VsZikKKyAgICAgfFx4MjBceDIwCisgICAgIHwgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgfCAgRGF0YSBkZXNjcmlwdG9ycyBkZWZpbmVkIGhlcmU6CisgICAgIHxceDIwXHgyMAorICAgICB8ICBfX2RpY3RfXworICAgICB8ICAgICAgZGljdGlvbmFyeSBmb3IgaW5zdGFuY2UgdmFyaWFibGVzIChpZiBkZWZpbmVkKQorICAgICB8XHgyMFx4MjAKKyAgICAgfCAgX193ZWFrcmVmX18KKyAgICAgfCAgICAgIGxpc3Qgb2Ygd2VhayByZWZlcmVuY2VzIHRvIHRoZSBvYmplY3QgKGlmIGRlZmluZWQpCiAKIEZVTkNUSU9OUwogICAgIGRvY19mdW5jKCkKQEAgLTEyNiw2ICsxNTMsNyBAQAogPGRsPgogPGR0Pjxmb250IGZhY2U9ImhlbHZldGljYSwgYXJpYWwiPjxhIGhyZWY9InRlc3QucHlkb2NfbW9kLmh0bWwjQSI+QTwvYT4KIDwvZm9udD48L2R0PjxkdD48Zm9udCBmYWNlPSJoZWx2ZXRpY2EsIGFyaWFsIj48YSBocmVmPSJ0ZXN0LnB5ZG9jX21vZC5odG1sI0IiPkI8L2E+Cis8L2ZvbnQ+PC9kdD48ZHQ+PGZvbnQgZmFjZT0iaGVsdmV0aWNhLCBhcmlhbCI+PGEgaHJlZj0idGVzdC5weWRvY19tb2QuaHRtbCNDIj5DPC9hPgogPC9mb250PjwvZHQ+PC9kbD4KIDwvZGQ+CiA8L2RsPgpAQCAtMTY3LDYgKzE5NSwyOCBAQAogRGF0YSBhbmQgb3RoZXIgYXR0cmlidXRlcyBkZWZpbmVkIGhlcmU6PGJyPgogPGRsPjxkdD48c3Ryb25nPk5PX01FQU5JTkc8L3N0cm9uZz4gPSAnZWdncyc8L2RsPgogCis8L3RkPjwvdHI+PC90YWJsZT4gPHA+Cis8dGFibGUgd2lkdGg9IjEwMCUlIiBjZWxsc3BhY2luZz0wIGNlbGxwYWRkaW5nPTIgYm9yZGVyPTAgc3VtbWFyeT0ic2VjdGlvbiI+Cis8dHIgYmdjb2xvcj0iI2ZmYzhkOCI+Cis8dGQgY29sc3Bhbj0zIHZhbGlnbj1ib3R0b20+Jm5ic3A7PGJyPgorPGZvbnQgY29sb3I9IiMwMDAwMDAiIGZhY2U9ImhlbHZldGljYSwgYXJpYWwiPjxhIG5hbWU9IkMiPmNsYXNzIDxzdHJvbmc+Qzwvc3Ryb25nPjwvYT4oPGEgaHJlZj0iYnVpbHRpbnMuaHRtbCNvYmplY3QiPmJ1aWx0aW5zLm9iamVjdDwvYT4pPC9mb250PjwvdGQ+PC90cj4KK1x4MjBceDIwXHgyMFx4MjAKKzx0cj48dGQgYmdjb2xvcj0iI2ZmYzhkOCI+PHR0PiZuYnNwOyZuYnNwOyZuYnNwOzwvdHQ+PC90ZD48dGQ+Jm5ic3A7PC90ZD4KKzx0ZCB3aWR0aD0iMTAwJSUiPk1ldGhvZHMgZGVmaW5lZCBoZXJlOjxicj4KKzxkbD48ZHQ+PGEgbmFtZT0iQy1nZXRfYW5zd2VyIj48c3Ryb25nPmdldF9hbnN3ZXI8L3N0cm9uZz48L2E+KHNlbGYpPC9kdD48ZGQ+PHR0PlJldHVybiZuYnNwOzxhIGhyZWY9IiNDLXNheV9ubyI+c2F5X25vPC9hPigpPC90dD48L2RkPjwvZGw+CisKKzxkbD48ZHQ+PGEgbmFtZT0iQy1pc19pdF90cnVlIj48c3Ryb25nPmlzX2l0X3RydWU8L3N0cm9uZz48L2E+KHNlbGYpPC9kdD48ZGQ+PHR0PlJldHVybiZuYnNwO3NlbGYuPGEgaHJlZj0iI0MtZ2V0X2Fuc3dlciI+Z2V0X2Fuc3dlcjwvYT4oKTwvdHQ+PC9kZD48L2RsPgorCis8ZGw+PGR0PjxhIG5hbWU9IkMtc2F5X25vIj48c3Ryb25nPnNheV9ubzwvc3Ryb25nPjwvYT4oc2VsZik8L2R0PjwvZGw+CisKKzxocj4KK0RhdGEgZGVzY3JpcHRvcnMgZGVmaW5lZCBoZXJlOjxicj4KKzxkbD48ZHQ+PHN0cm9uZz5fX2RpY3RfXzwvc3Ryb25nPjwvZHQ+Cis8ZGQ+PHR0PmRpY3Rpb25hcnkmbmJzcDtmb3ImbmJzcDtpbnN0YW5jZSZuYnNwO3ZhcmlhYmxlcyZuYnNwOyhpZiZuYnNwO2RlZmluZWQpPC90dD48L2RkPgorPC9kbD4KKzxkbD48ZHQ+PHN0cm9uZz5fX3dlYWtyZWZfXzwvc3Ryb25nPjwvZHQ+Cis8ZGQ+PHR0Pmxpc3QmbmJzcDtvZiZuYnNwO3dlYWsmbmJzcDtyZWZlcmVuY2VzJm5ic3A7dG8mbmJzcDt0aGUmbmJzcDtvYmplY3QmbmJzcDsoaWYmbmJzcDtkZWZpbmVkKTwvdHQ+PC9kZD4KKzwvZGw+CiA8L3RkPjwvdHI+PC90YWJsZT48L3RkPjwvdHI+PC90YWJsZT48cD4KIDx0YWJsZSB3aWR0aD0iMTAwJSUiIGNlbGxzcGFjaW5nPTAgY2VsbHBhZGRpbmc9MiBib3JkZXI9MCBzdW1tYXJ5PSJzZWN0aW9uIj4KIDx0ciBiZ2NvbG9yPSIjZWVhYTc3Ij4KQEAgLTIxMiw2ICsyNjIsNzUgQEAKICMgb3V0cHV0IHBhdHRlcm4gZm9yIG1vZHVsZSB3aXRoIGJhZCBpbXBvcnRzCiBiYWRpbXBvcnRfcGF0dGVybiA9ICJwcm9ibGVtIGluICVzIC0gSW1wb3J0RXJyb3I6IE5vIG1vZHVsZSBuYW1lZCAlciIKIAorZXhwZWN0ZWRfZHluYW1pY2F0dHJpYnV0ZV9wYXR0ZXJuID0gIiIiCitIZWxwIG9uIGNsYXNzIERBIGluIG1vZHVsZSAlczoKKworY2xhc3MgREEoYnVpbHRpbnMub2JqZWN0KQorIHwgIERhdGEgZGVzY3JpcHRvcnMgZGVmaW5lZCBoZXJlOgorIHxceDIwXHgyMAorIHwgIF9fZGljdF9fJXMKKyB8XHgyMFx4MjAKKyB8ICBfX3dlYWtyZWZfXyVzCisgfFx4MjBceDIwCisgfCAgaGFtCisgfFx4MjBceDIwCisgfCAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIHwgIERhdGEgYW5kIG90aGVyIGF0dHJpYnV0ZXMgaW5oZXJpdGVkIGZyb20gTWV0YToKKyB8XHgyMFx4MjAKKyB8ICBoYW0gPSAnc3BhbScKKyIiIi5zdHJpcCgpCisKK2V4cGVjdGVkX3ZpcnR1YWxhdHRyaWJ1dGVfcGF0dGVybjEgPSAiIiIKK0hlbHAgb24gY2xhc3MgQ2xhc3MgaW4gbW9kdWxlICVzOgorCitjbGFzcyBDbGFzcyhidWlsdGlucy5vYmplY3QpCisgfCAgRGF0YSBhbmQgb3RoZXIgYXR0cmlidXRlcyBpbmhlcml0ZWQgZnJvbSBNZXRhOgorIHxceDIwXHgyMAorIHwgIExJRkUgPSA0MgorIiIiLnN0cmlwKCkKKworZXhwZWN0ZWRfdmlydHVhbGF0dHJpYnV0ZV9wYXR0ZXJuMiA9ICIiIgorSGVscCBvbiBjbGFzcyBDbGFzczEgaW4gbW9kdWxlICVzOgorCitjbGFzcyBDbGFzczEoYnVpbHRpbnMub2JqZWN0KQorIHwgIERhdGEgYW5kIG90aGVyIGF0dHJpYnV0ZXMgaW5oZXJpdGVkIGZyb20gTWV0YTE6CisgfFx4MjBceDIwCisgfCAgb25lID0gMQorIiIiLnN0cmlwKCkKKworZXhwZWN0ZWRfdmlydHVhbGF0dHJpYnV0ZV9wYXR0ZXJuMyA9ICIiIgorSGVscCBvbiBjbGFzcyBDbGFzczIgaW4gbW9kdWxlICVzOgorCitjbGFzcyBDbGFzczIoQ2xhc3MxKQorIHwgIE1ldGhvZCByZXNvbHV0aW9uIG9yZGVyOgorIHwgICAgICBDbGFzczIKKyB8ICAgICAgQ2xhc3MxCisgfCAgICAgIGJ1aWx0aW5zLm9iamVjdAorIHxceDIwXHgyMAorIHwgIERhdGEgYW5kIG90aGVyIGF0dHJpYnV0ZXMgaW5oZXJpdGVkIGZyb20gTWV0YTE6CisgfFx4MjBceDIwCisgfCAgb25lID0gMQorIHxceDIwXHgyMAorIHwgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyB8ICBEYXRhIGFuZCBvdGhlciBhdHRyaWJ1dGVzIGluaGVyaXRlZCBmcm9tIE1ldGEzOgorIHxceDIwXHgyMAorIHwgIHRocmVlID0gMworIHxceDIwXHgyMAorIHwgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyB8ICBEYXRhIGFuZCBvdGhlciBhdHRyaWJ1dGVzIGluaGVyaXRlZCBmcm9tIE1ldGEyOgorIHxceDIwXHgyMAorIHwgIHR3byA9IDIKKyIiIi5zdHJpcCgpCisKK2V4cGVjdGVkX21pc3NpbmdhdHRyaWJ1dGVfcGF0dGVybiA9ICIiIgorSGVscCBvbiBjbGFzcyBDIGluIG1vZHVsZSAlczoKKworY2xhc3MgQyhidWlsdGlucy5vYmplY3QpCisgfCAgRGF0YSBhbmQgb3RoZXIgYXR0cmlidXRlcyBkZWZpbmVkIGhlcmU6CisgfFx4MjBceDIwCisgfCAgaGVyZSA9ICdwcmVzZW50IScKKyIiIi5zdHJpcCgpCisKIGRlZiBydW5fcHlkb2MobW9kdWxlX25hbWUsICphcmdzLCAqKmVudik6CiAgICAgIiIiCiAgICAgUnVucyBweWRvYyBvbiB0aGUgc3BlY2lmaWVkIG1vZHVsZS4gUmV0dXJucyB0aGUgc3RyaXBwZWQKQEAgLTI4NCw2ICs0MDMsMTMgQEAKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIHBrZ3V0aWwud2Fsa19wYWNrYWdlcyA9IHdhbGtfcGFja2FnZXMKIAorICAgIGRlZiBjYWxsX3VybF9oYW5kbGVyKHNlbGYsIHVybCwgZXhwZWN0ZWRfdGl0bGUpOgorICAgICAgICB0ZXh0ID0gcHlkb2MuX3VybF9oYW5kbGVyKHVybCwgInRleHQvaHRtbCIpCisgICAgICAgIHJlc3VsdCA9IGdldF9odG1sX3RpdGxlKHRleHQpCisgICAgICAgICMgQ2hlY2sgdGhlIHRpdGxlIHRvIGVuc3VyZSBhbiB1bmV4cGVjdGVkIGVycm9yIHBhZ2Ugd2FzIG5vdCByZXR1cm5lZAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgZXhwZWN0ZWRfdGl0bGUsIHRleHQpCisgICAgICAgIHJldHVybiB0ZXh0CisKIAogY2xhc3MgUHlkb2NEb2NUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIApAQCAtMjkxLDE0ICs0MTcsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgICJEb2NzdHJpbmdzIGFyZSBvbWl0dGVkIHdpdGggLU8yIGFuZCBhYm92ZSIpCiAgICAgQHVuaXR0ZXN0LnNraXBJZihoYXNhdHRyKHN5cywgJ2dldHRyYWNlJykgYW5kIHN5cy5nZXR0cmFjZSgpLAogICAgICAgICAgICAgICAgICAgICAgJ3RyYWNlIGZ1bmN0aW9uIGludHJvZHVjZXMgX19sb2NhbHNfXyB1bmV4cGVjdGVkbHknKQorICAgIEByZXF1aXJlc19kb2NzdHJpbmdzCiAgICAgZGVmIHRlc3RfaHRtbF9kb2Moc2VsZik6CiAgICAgICAgIHJlc3VsdCwgZG9jX2xvYyA9IGdldF9weWRvY19odG1sKHB5ZG9jX21vZCkKICAgICAgICAgbW9kX2ZpbGUgPSBpbnNwZWN0LmdldGFic2ZpbGUocHlkb2NfbW9kKQotICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKLSAgICAgICAgICAgIGltcG9ydCBudHVybDJwYXRoCi0gICAgICAgICAgICBtb2RfdXJsID0gbnR1cmwycGF0aC5wYXRobmFtZTJ1cmwobW9kX2ZpbGUpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBtb2RfdXJsID0gbW9kX2ZpbGUKKyAgICAgICAgbW9kX3VybCA9IHVybGxpYi5wYXJzZS5xdW90ZShtb2RfZmlsZSkKICAgICAgICAgZXhwZWN0ZWRfaHRtbCA9IGV4cGVjdGVkX2h0bWxfcGF0dGVybiAlICgKICAgICAgICAgICAgICAgICAgICAgICAgIChtb2RfdXJsLCBtb2RfZmlsZSwgZG9jX2xvYykgKwogICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfaHRtbF9kYXRhX2RvY3N0cmluZ3MpCkBAIC0zMTAsNiArNDMzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICJEb2NzdHJpbmdzIGFyZSBvbWl0dGVkIHdpdGggLU8yIGFuZCBhYm92ZSIpCiAgICAgQHVuaXR0ZXN0LnNraXBJZihoYXNhdHRyKHN5cywgJ2dldHRyYWNlJykgYW5kIHN5cy5nZXR0cmFjZSgpLAogICAgICAgICAgICAgICAgICAgICAgJ3RyYWNlIGZ1bmN0aW9uIGludHJvZHVjZXMgX19sb2NhbHNfXyB1bmV4cGVjdGVkbHknKQorICAgIEByZXF1aXJlc19kb2NzdHJpbmdzCiAgICAgZGVmIHRlc3RfdGV4dF9kb2Moc2VsZik6CiAgICAgICAgIHJlc3VsdCwgZG9jX2xvYyA9IGdldF9weWRvY190ZXh0KHB5ZG9jX21vZCkKICAgICAgICAgZXhwZWN0ZWRfdGV4dCA9IGV4cGVjdGVkX3RleHRfcGF0dGVybiAlICgKQEAgLTMyMCwxMSArNDQ0LDI5IEBACiAgICAgICAgICAgICBwcmludF9kaWZmcyhleHBlY3RlZF90ZXh0LCByZXN1bHQpCiAgICAgICAgICAgICBzZWxmLmZhaWwoIm91dHB1dHMgYXJlIG5vdCBlcXVhbCwgc2VlIGRpZmYgYWJvdmUiKQogCisgICAgZGVmIHRlc3RfdGV4dF9lbnVtX21lbWJlcl93aXRoX3ZhbHVlX3plcm8oc2VsZik6CisgICAgICAgICMgVGVzdCBpc3N1ZSAjMjA2NTQgdG8gZW5zdXJlIGVudW0gbWVtYmVyIHdpdGggdmFsdWUgMCBjYW4gYmUKKyAgICAgICAgIyBkaXNwbGF5ZWQuIEl0IHVzZWQgdG8gdGhyb3cgS2V5RXJyb3I6ICd6ZXJvJy4KKyAgICAgICAgaW1wb3J0IGVudW0KKyAgICAgICAgY2xhc3MgQmluYXJ5SW50ZWdlcihlbnVtLkludEVudW0pOgorICAgICAgICAgICAgemVybyA9IDAKKyAgICAgICAgICAgIG9uZSA9IDEKKyAgICAgICAgZG9jID0gcHlkb2MucmVuZGVyX2RvYyhCaW5hcnlJbnRlZ2VyKQorICAgICAgICBzZWxmLmFzc2VydEluKCc8QmluYXJ5SW50ZWdlci56ZXJvOiAwPicsIGRvYykKKwogICAgIGRlZiB0ZXN0X2lzc3VlODIyNShzZWxmKToKICAgICAgICAgIyBUZXN0IGlzc3VlODIyNSB0byBlbnN1cmUgbm8gZG9jIGxpbmsgYXBwZWFycyBmb3IgeG1sLmV0cmVlCiAgICAgICAgIHJlc3VsdCwgZG9jX2xvYyA9IGdldF9weWRvY190ZXh0KHhtbC5ldHJlZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkb2NfbG9jLCAiIiwgIk1PRFVMRSBET0NTIGluY29ycmVjdGx5IGluY2x1ZGVzIGEgbGluayIpCiAKKyAgICBkZWYgdGVzdF9nZXRwYWdlcl93aXRoX3N0ZGluX25vbmUoc2VsZik6CisgICAgICAgIHByZXZpb3VzX3N0ZGluID0gc3lzLnN0ZGluCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN5cy5zdGRpbiA9IE5vbmUKKyAgICAgICAgICAgIHB5ZG9jLmdldHBhZ2VyKCkgIyBTaG91bGRuJ3QgZmFpbC4KKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHN5cy5zdGRpbiA9IHByZXZpb3VzX3N0ZGluCisKICAgICBkZWYgdGVzdF9ub25fc3RyX25hbWUoc2VsZik6CiAgICAgICAgICMgaXNzdWUxNDYzOAogICAgICAgICAjIFRyZWF0IGlsbGVnYWwgKG5vbi1zdHIpIG5hbWUgbGlrZSBubyBuYW1lCkBAIC0zNDMsNiArNDg1LDEzIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIHJlc3VsdCwKICAgICAgICAgICAgICJkb2N1bWVudGF0aW9uIGZvciBtaXNzaW5nIG1vZHVsZSBmb3VuZCIpCiAKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAorICAgICAgICAgICAgICAgICAgICAgJ0RvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtT08gYW5kIGFib3ZlJykKKyAgICBkZWYgdGVzdF9ub3RfYXNjaWkoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHJ1bl9weWRvYygndGVzdC50ZXN0X3B5ZG9jLm5vbmFzY2lpJywgUFlUSE9OSU9FTkNPRElORz0nYXNjaWknKQorICAgICAgICBlbmNvZGVkID0gbm9uYXNjaWkuX19kb2NfXy5lbmNvZGUoJ2FzY2lpJywgJ2JhY2tzbGFzaHJlcGxhY2UnKQorICAgICAgICBzZWxmLmFzc2VydEluKGVuY29kZWQsIHJlc3VsdCkKKwogICAgIGRlZiB0ZXN0X2lucHV0X3N0cmlwKHNlbGYpOgogICAgICAgICBtaXNzaW5nX21vZHVsZSA9ICIgdGVzdC5pX2FtX25vdF9oZXJlICIKICAgICAgICAgcmVzdWx0ID0gc3RyKHJ1bl9weWRvYyhtaXNzaW5nX21vZHVsZSksICdhc2NpaScpCkBAIC0zNjYsNiArNTE1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICdEb2NzdHJpbmdzIGFyZSBvbWl0dGVkIHdpdGggLU8yIGFuZCBhYm92ZScpCiAgICAgQHVuaXR0ZXN0LnNraXBJZihoYXNhdHRyKHN5cywgJ2dldHRyYWNlJykgYW5kIHN5cy5nZXR0cmFjZSgpLAogICAgICAgICAgICAgICAgICAgICAgJ3RyYWNlIGZ1bmN0aW9uIGludHJvZHVjZXMgX19sb2NhbHNfXyB1bmV4cGVjdGVkbHknKQorICAgIEByZXF1aXJlc19kb2NzdHJpbmdzCiAgICAgZGVmIHRlc3RfaGVscF9vdXRwdXRfcmVkaXJlY3Qoc2VsZik6CiAgICAgICAgICMgaXNzdWUgOTQwMjg2LCBpZiBvdXRwdXQgaXMgc2V0IGluIEhlbHBlciwgdGhlbiBhbGwgb3V0cHV0IGZyb20KICAgICAgICAgIyBIZWxwZXIuaGVscCBzaG91bGQgYmUgcmVkaXJlY3RlZApAQCAtNDIxLDYgKzU3MSw1MiBAQAogICAgICAgICAgICAgc3lub3BzaXMgPSBweWRvYy5zeW5vcHNpcyhURVNURk4sIHt9KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzeW5vcHNpcywgJ2xpbmUgMTogaFx4ZTknKQogCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMuZmxhZ3Mub3B0aW1pemUgPj0gMiwKKyAgICAgICAgICAgICAgICAgICAgICdEb2NzdHJpbmdzIGFyZSBvbWl0dGVkIHdpdGggLU9PIGFuZCBhYm92ZScpCisgICAgZGVmIHRlc3Rfc3lub3BzaXNfc291cmNlbGVzcyhzZWxmKToKKyAgICAgICAgZXhwZWN0ZWQgPSBvcy5fX2RvY19fLnNwbGl0bGluZXMoKVswXQorICAgICAgICBmaWxlbmFtZSA9IG9zLl9fY2FjaGVkX18KKyAgICAgICAgc3lub3BzaXMgPSBweWRvYy5zeW5vcHNpcyhmaWxlbmFtZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN5bm9wc2lzLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X3N5bm9wc2lzX3NvdXJjZWxlc3NfZW1wdHlfZG9jKHNlbGYpOgorICAgICAgICB3aXRoIHRlc3Quc3VwcG9ydC50ZW1wX2N3ZCgpIGFzIHRlc3RfZGlyOgorICAgICAgICAgICAgaW5pdF9wYXRoID0gb3MucGF0aC5qb2luKHRlc3RfZGlyLCAnZm9vbW9kNDIucHknKQorICAgICAgICAgICAgY2FjaGVkX3BhdGggPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShpbml0X3BhdGgpCisgICAgICAgICAgICB3aXRoIG9wZW4oaW5pdF9wYXRoLCAndycpIGFzIGZvYmo6CisgICAgICAgICAgICAgICAgZm9iai53cml0ZSgiZm9vID0gMSIpCisgICAgICAgICAgICBweV9jb21waWxlLmNvbXBpbGUoaW5pdF9wYXRoKQorICAgICAgICAgICAgc3lub3BzaXMgPSBweWRvYy5zeW5vcHNpcyhpbml0X3BhdGgsIHt9KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc3lub3BzaXMpCisgICAgICAgICAgICBzeW5vcHNpc19jYWNoZWQgPSBweWRvYy5zeW5vcHNpcyhjYWNoZWRfcGF0aCwge30pCisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzeW5vcHNpc19jYWNoZWQpCisKKyAgICBkZWYgdGVzdF9zcGxpdGRvY193aXRoX2Rlc2NyaXB0aW9uKHNlbGYpOgorICAgICAgICBleGFtcGxlX3N0cmluZyA9ICJJIEFtIEEgRG9jXG5cblxuSGVyZSBpcyBteSBkZXNjcmlwdGlvbiIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChweWRvYy5zcGxpdGRvYyhleGFtcGxlX3N0cmluZyksCisgICAgICAgICAgICAgICAgICAgICAgICAgKCdJIEFtIEEgRG9jJywgJ1xuSGVyZSBpcyBteSBkZXNjcmlwdGlvbicpKQorCisgICAgZGVmIHRlc3RfaXNfb2JqZWN0X29yX21ldGhvZChzZWxmKToKKyAgICAgICAgZG9jID0gcHlkb2MuRG9jKCkKKyAgICAgICAgIyBCb3VuZCBNZXRob2QKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHB5ZG9jLl9pc19zb21lX21ldGhvZChkb2MuZmFpbCkpCisgICAgICAgICMgTWV0aG9kIERlc2NyaXB0b3IKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHB5ZG9jLl9pc19zb21lX21ldGhvZChpbnQuX19hZGRfXykpCisgICAgICAgICMgU3RyaW5nCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocHlkb2MuX2lzX3NvbWVfbWV0aG9kKCJJIGFtIG5vdCBhIG1ldGhvZCIpKQorCisgICAgZGVmIHRlc3RfaXNfcGFja2FnZV93aGVuX25vdF9wYWNrYWdlKHNlbGYpOgorICAgICAgICB3aXRoIHRlc3Quc3VwcG9ydC50ZW1wX2N3ZCgpIGFzIHRlc3RfZGlyOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShweWRvYy5pc3BhY2thZ2UodGVzdF9kaXIpKQorCisgICAgZGVmIHRlc3RfaXNfcGFja2FnZV93aGVuX2lzX3BhY2thZ2Uoc2VsZik6CisgICAgICAgIHdpdGggdGVzdC5zdXBwb3J0LnRlbXBfY3dkKCkgYXMgdGVzdF9kaXI6CisgICAgICAgICAgICBpbml0X3BhdGggPSBvcy5wYXRoLmpvaW4odGVzdF9kaXIsICdfX2luaXRfXy5weScpCisgICAgICAgICAgICBvcGVuKGluaXRfcGF0aCwgJ3cnKS5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocHlkb2MuaXNwYWNrYWdlKHRlc3RfZGlyKSkKKyAgICAgICAgICAgIG9zLnJlbW92ZShpbml0X3BhdGgpCisKICAgICBkZWYgdGVzdF9hbGxtZXRob2RzKHNlbGYpOgogICAgICAgICAjIGlzc3VlIDE3NDc2OiBhbGxtZXRob2RzIHdhcyBubyBsb25nZXIgcmV0dXJuaW5nIHVuYm91bmQgbWV0aG9kcy4KICAgICAgICAgIyBUaGlzIHRlc3QgaXMgYSBiaXQgZnJhZ2lsZSBpbiB0aGUgZmFjZSBvZiBjaGFuZ2VzIHRvIG9iamVjdCBhbmQgdHlwZSwKQEAgLTQ1MSw2ICs2NDcsNyBAQAogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgc2VsZi50ZXN0X2RpciA9IG9zLm1rZGlyKFRFU1RGTikKICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHJtdHJlZSwgVEVTVEZOKQorICAgICAgICBpbXBvcnRsaWIuaW52YWxpZGF0ZV9jYWNoZXMoKQogCiAgICAgZGVmIHRlc3RfYmFkaW1wb3J0KHNlbGYpOgogICAgICAgICAjIFRoaXMgdGVzdHMgdGhlIGZpeCBmb3IgaXNzdWUgNTIzMCwgd2hlcmUgaWYgcHlkb2MgZm91bmQgdGhlIG1vZHVsZQpAQCAtNTA5LDYgKzcwNiw5NCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dC5nZXR2YWx1ZSgpLCAnJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIuZ2V0dmFsdWUoKSwgJycpCiAKKyAgICBkZWYgdGVzdF9hcHJvcG9zX2VtcHR5X2RvYyhzZWxmKToKKyAgICAgICAgcGtnZGlyID0gb3MucGF0aC5qb2luKFRFU1RGTiwgJ3dhbGtwa2cnKQorICAgICAgICBvcy5ta2Rpcihwa2dkaXIpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChybXRyZWUsIHBrZ2RpcikKKyAgICAgICAgaW5pdF9wYXRoID0gb3MucGF0aC5qb2luKHBrZ2RpciwgJ19faW5pdF9fLnB5JykKKyAgICAgICAgd2l0aCBvcGVuKGluaXRfcGF0aCwgJ3cnKSBhcyBmb2JqOgorICAgICAgICAgICAgZm9iai53cml0ZSgiZm9vID0gMSIpCisgICAgICAgIGN1cnJlbnRfbW9kZSA9IHN0YXQuU19JTU9ERShvcy5zdGF0KHBrZ2Rpcikuc3RfbW9kZSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3MuY2htb2QocGtnZGlyLCBjdXJyZW50X21vZGUgJiB+c3RhdC5TX0lFWEVDKQorICAgICAgICAgICAgd2l0aCBzZWxmLnJlc3RyaWN0X3dhbGtfcGFja2FnZXMocGF0aD1bVEVTVEZOXSksIGNhcHR1cmVkX3N0ZG91dCgpIGFzIHN0ZG91dDoKKyAgICAgICAgICAgICAgICBweWRvYy5hcHJvcG9zKCcnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignd2Fsa3BrZycsIHN0ZG91dC5nZXR2YWx1ZSgpKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MuY2htb2QocGtnZGlyLCBjdXJyZW50X21vZGUpCisKKyAgICBkZWYgdGVzdF91cmxfc2VhcmNoX3BhY2thZ2VfZXJyb3Ioc2VsZik6CisgICAgICAgICMgVVJMIGhhbmRsZXIgc2VhcmNoIHNob3VsZCBjb3BlIHdpdGggcGFja2FnZXMgdGhhdCByYWlzZSBleGNlcHRpb25zCisgICAgICAgIHBrZ2RpciA9IG9zLnBhdGguam9pbihURVNURk4sICJ0ZXN0X2Vycm9yX3BhY2thZ2UiKQorICAgICAgICBvcy5ta2Rpcihwa2dkaXIpCisgICAgICAgIGluaXQgPSBvcy5wYXRoLmpvaW4ocGtnZGlyLCAiX19pbml0X18ucHkiKQorICAgICAgICB3aXRoIG9wZW4oaW5pdCwgInd0IiwgZW5jb2Rpbmc9ImFzY2lpIikgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoIiIicmFpc2UgVmFsdWVFcnJvcigib3VjaCIpXG4iIiIpCisgICAgICAgIHdpdGggc2VsZi5yZXN0cmljdF93YWxrX3BhY2thZ2VzKHBhdGg9W1RFU1RGTl0pOgorICAgICAgICAgICAgIyBQYWNrYWdlIGhhcyB0byBiZSBpbXBvcnRhYmxlIGZvciB0aGUgZXJyb3IgdG8gaGF2ZSBhbnkgZWZmZWN0CisgICAgICAgICAgICBzYXZlZF9wYXRocyA9IHR1cGxlKHN5cy5wYXRoKQorICAgICAgICAgICAgc3lzLnBhdGguaW5zZXJ0KDAsIFRFU1RGTikKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwgIm91Y2giKToKKyAgICAgICAgICAgICAgICAgICAgaW1wb3J0IHRlc3RfZXJyb3JfcGFja2FnZSAgIyBTYW5pdHkgY2hlY2sKKworICAgICAgICAgICAgICAgIHRleHQgPSBzZWxmLmNhbGxfdXJsX2hhbmRsZXIoInNlYXJjaD9rZXk9dGVzdF9lcnJvcl9wYWNrYWdlIiwKKyAgICAgICAgICAgICAgICAgICAgIlB5ZG9jOiBTZWFyY2ggUmVzdWx0cyIpCisgICAgICAgICAgICAgICAgZm91bmQgPSAoJzxhIGhyZWY9InRlc3RfZXJyb3JfcGFja2FnZS5odG1sIj4nCisgICAgICAgICAgICAgICAgICAgICd0ZXN0X2Vycm9yX3BhY2thZ2U8L2E+JykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKGZvdW5kLCB0ZXh0KQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBzeXMucGF0aFs6XSA9IHNhdmVkX3BhdGhzCisKKyAgICBAdW5pdHRlc3Quc2tpcCgnY2F1c2VzIHVuZGVzaXJlYWJsZSBzaWRlLWVmZmVjdHMgKCMyMDEyOCknKQorICAgIGRlZiB0ZXN0X21vZHVsZXMoc2VsZik6CisgICAgICAgICMgU2VlIEhlbHBlci5saXN0bW9kdWxlcygpLgorICAgICAgICBudW1faGVhZGVyX2xpbmVzID0gMgorICAgICAgICBudW1fbW9kdWxlX2xpbmVzX21pbiA9IDUgICMgUGxheWluZyBpdCBzYWZlLgorICAgICAgICBudW1fZm9vdGVyX2xpbmVzID0gMworICAgICAgICBleHBlY3RlZCA9IG51bV9oZWFkZXJfbGluZXMgKyBudW1fbW9kdWxlX2xpbmVzX21pbiArIG51bV9mb290ZXJfbGluZXMKKworICAgICAgICBvdXRwdXQgPSBTdHJpbmdJTygpCisgICAgICAgIGhlbHBlciA9IHB5ZG9jLkhlbHBlcihvdXRwdXQ9b3V0cHV0KQorICAgICAgICBoZWxwZXIoJ21vZHVsZXMnKQorICAgICAgICByZXN1bHQgPSBvdXRwdXQuZ2V0dmFsdWUoKS5zdHJpcCgpCisgICAgICAgIG51bV9saW5lcyA9IGxlbihyZXN1bHQuc3BsaXRsaW5lcygpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKG51bV9saW5lcywgZXhwZWN0ZWQpCisKKyAgICBAdW5pdHRlc3Quc2tpcCgnY2F1c2VzIHVuZGVzaXJlYWJsZSBzaWRlLWVmZmVjdHMgKCMyMDEyOCknKQorICAgIGRlZiB0ZXN0X21vZHVsZXNfc2VhcmNoKHNlbGYpOgorICAgICAgICAjIFNlZSBIZWxwZXIubGlzdG1vZHVsZXMoKS4KKyAgICAgICAgZXhwZWN0ZWQgPSAncHlkb2MgLSAnCisKKyAgICAgICAgb3V0cHV0ID0gU3RyaW5nSU8oKQorICAgICAgICBoZWxwZXIgPSBweWRvYy5IZWxwZXIob3V0cHV0PW91dHB1dCkKKyAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBoZWxwX2lvOgorICAgICAgICAgICAgaGVscGVyKCdtb2R1bGVzIHB5ZG9jJykKKyAgICAgICAgcmVzdWx0ID0gaGVscF9pby5nZXR2YWx1ZSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJbihleHBlY3RlZCwgcmVzdWx0KQorCisgICAgQHVuaXR0ZXN0LnNraXAoJ3NvbWUgYnVpbGRib3RzIGFyZSBub3QgY29vcGVyYXRpbmcgKCMyMDEyOCknKQorICAgIGRlZiB0ZXN0X21vZHVsZXNfc2VhcmNoX2J1aWx0aW4oc2VsZik6CisgICAgICAgIGV4cGVjdGVkID0gJ2djIC0gJworCisgICAgICAgIG91dHB1dCA9IFN0cmluZ0lPKCkKKyAgICAgICAgaGVscGVyID0gcHlkb2MuSGVscGVyKG91dHB1dD1vdXRwdXQpCisgICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgaGVscF9pbzoKKyAgICAgICAgICAgIGhlbHBlcignbW9kdWxlcyBnYXJiYWdlJykKKyAgICAgICAgcmVzdWx0ID0gaGVscF9pby5nZXR2YWx1ZSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdC5zdGFydHN3aXRoKGV4cGVjdGVkKSkKKworICAgIGRlZiB0ZXN0X2ltcG9ydGZpbGUoc2VsZik6CisgICAgICAgIGxvYWRlZF9weWRvYyA9IHB5ZG9jLmltcG9ydGZpbGUocHlkb2MuX19maWxlX18pCisKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdChsb2FkZWRfcHlkb2MsIHB5ZG9jKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlZF9weWRvYy5fX25hbWVfXywgJ3B5ZG9jJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZWRfcHlkb2MuX19maWxlX18sIHB5ZG9jLl9fZmlsZV9fKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlZF9weWRvYy5fX3NwZWNfXywgcHlkb2MuX19zcGVjX18pCisKIAogY2xhc3MgVGVzdERlc2NyaXB0aW9ucyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKQEAgLTUzNiw3ICs4MjEsNyBAQAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHB5ZG9jLnJlbmRlcl9kb2MobmFtZSkKICAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ2ZpbmRpbmcgdGhlIGRvYyBvZiB7IXJ9IGZhaWxlZCcuZm9ybWF0KG8pKQorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnZmluZGluZyB0aGUgZG9jIG9mIHshcn0gZmFpbGVkJy5mb3JtYXQobmFtZSkpCiAKICAgICAgICAgZm9yIG5hbWUgaW4gKCdub3RidWlsdGlucycsICdzdHJycicsICdzdHJyLnRyYW5zbGF0ZScsCiAgICAgICAgICAgICAgICAgICAgICAnc3RyLnRycnJyYW5zbGF0ZScsICdidWlsdGlucy5zdHJycicsCkBAIC01NDQsNiArODI5LDQyIEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShweWRvYy5sb2NhdGUobmFtZSkpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvciwgcHlkb2MucmVuZGVyX2RvYywgbmFtZSkKIAorICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgX2dldF9zdW1tYXJ5X2xpbmUobyk6CisgICAgICAgIHRleHQgPSBweWRvYy5wbGFpbihweWRvYy5yZW5kZXJfZG9jKG8pKQorICAgICAgICBsaW5lcyA9IHRleHQuc3BsaXQoJ1xuJykKKyAgICAgICAgYXNzZXJ0IGxlbihsaW5lcykgPj0gMgorICAgICAgICByZXR1cm4gbGluZXNbMl0KKworICAgICMgdGhlc2Ugc2hvdWxkIGluY2x1ZGUgInNlbGYiCisgICAgZGVmIHRlc3RfdW5ib3VuZF9weXRob25fbWV0aG9kKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2dldF9zdW1tYXJ5X2xpbmUodGV4dHdyYXAuVGV4dFdyYXBwZXIud3JhcCksCisgICAgICAgICAgICAid3JhcChzZWxmLCB0ZXh0KSIpCisKKyAgICBAcmVxdWlyZXNfZG9jc3RyaW5ncworICAgIGRlZiB0ZXN0X3VuYm91bmRfYnVpbHRpbl9tZXRob2Qoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fZ2V0X3N1bW1hcnlfbGluZShfcGlja2xlLlBpY2tsZXIuZHVtcCksCisgICAgICAgICAgICAiZHVtcChzZWxmLCBvYmosIC8pIikKKworICAgICMgdGhlc2Ugbm8gbG9uZ2VyIGluY2x1ZGUgInNlbGYiCisgICAgZGVmIHRlc3RfYm91bmRfcHl0aG9uX21ldGhvZChzZWxmKToKKyAgICAgICAgdCA9IHRleHR3cmFwLlRleHRXcmFwcGVyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9nZXRfc3VtbWFyeV9saW5lKHQud3JhcCksCisgICAgICAgICAgICAid3JhcCh0ZXh0KSBtZXRob2Qgb2YgdGV4dHdyYXAuVGV4dFdyYXBwZXIgaW5zdGFuY2UiKQorCisgICAgQHJlcXVpcmVzX2RvY3N0cmluZ3MKKyAgICBkZWYgdGVzdF9ib3VuZF9idWlsdGluX21ldGhvZChzZWxmKToKKyAgICAgICAgcyA9IFN0cmluZ0lPKCkKKyAgICAgICAgcCA9IF9waWNrbGUuUGlja2xlcihzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2dldF9zdW1tYXJ5X2xpbmUocC5kdW1wKSwKKyAgICAgICAgICAgICJkdW1wKG9iaiwgLykgbWV0aG9kIG9mIF9waWNrbGUuUGlja2xlciBpbnN0YW5jZSIpCisKKyAgICAjIHRoaXMgc2hvdWxkICpuZXZlciogaW5jbHVkZSBzZWxmIQorICAgIEByZXF1aXJlc19kb2NzdHJpbmdzCisgICAgZGVmIHRlc3RfbW9kdWxlX2xldmVsX2NhbGxhYmxlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2dldF9zdW1tYXJ5X2xpbmUob3Muc3RhdCksCisgICAgICAgICAgICAic3RhdChwYXRoLCAqLCBkaXJfZmQ9Tm9uZSwgZm9sbG93X3N5bWxpbmtzPVRydWUpIikKKwogCiBAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWRpbmcsICdUaHJlYWRpbmcgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQogY2xhc3MgUHlkb2NTZXJ2ZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTYwMCwxNiArOTIxLDEyIEBACiAKICAgICAgICAgd2l0aCBzZWxmLnJlc3RyaWN0X3dhbGtfcGFja2FnZXMoKToKICAgICAgICAgICAgIGZvciB1cmwsIHRpdGxlIGluIHJlcXVlc3RzOgotICAgICAgICAgICAgICAgIHRleHQgPSBweWRvYy5fdXJsX2hhbmRsZXIodXJsLCAidGV4dC9odG1sIikKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBnZXRfaHRtbF90aXRsZSh0ZXh0KQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCB0aXRsZSwgdGV4dCkKKyAgICAgICAgICAgICAgICBzZWxmLmNhbGxfdXJsX2hhbmRsZXIodXJsLCB0aXRsZSkKIAogICAgICAgICAgICAgcGF0aCA9IHN0cmluZy5fX2ZpbGVfXwogICAgICAgICAgICAgdGl0bGUgPSAiUHlkb2M6IGdldGZpbGUgIiArIHBhdGgKICAgICAgICAgICAgIHVybCA9ICJnZXRmaWxlP2tleT0iICsgcGF0aAotICAgICAgICAgICAgdGV4dCA9IHB5ZG9jLl91cmxfaGFuZGxlcih1cmwsICJ0ZXh0L2h0bWwiKQotICAgICAgICAgICAgcmVzdWx0ID0gZ2V0X2h0bWxfdGl0bGUodGV4dCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCB0aXRsZSkKKyAgICAgICAgICAgIHNlbGYuY2FsbF91cmxfaGFuZGxlcih1cmwsIHRpdGxlKQogCiAKIGNsYXNzIFRlc3RIZWxwZXIodW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtNjE3LDYgKzkzNCwxMzYgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQocHlkb2MuSGVscGVyLmtleXdvcmRzKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBzb3J0ZWQoa2V5d29yZC5rd2xpc3QpKQogCitjbGFzcyBQeWRvY1dpdGhNZXRhQ2xhc3Nlcyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMuZmxhZ3Mub3B0aW1pemUgPj0gMiwKKyAgICAgICAgICAgICAgICAgICAgICJEb2NzdHJpbmdzIGFyZSBvbWl0dGVkIHdpdGggLU8yIGFuZCBhYm92ZSIpCisgICAgQHVuaXR0ZXN0LnNraXBJZihoYXNhdHRyKHN5cywgJ2dldHRyYWNlJykgYW5kIHN5cy5nZXR0cmFjZSgpLAorICAgICAgICAgICAgICAgICAgICAgJ3RyYWNlIGZ1bmN0aW9uIGludHJvZHVjZXMgX19sb2NhbHNfXyB1bmV4cGVjdGVkbHknKQorICAgIGRlZiB0ZXN0X0R5bmFtaWNDbGFzc0F0dHJpYnV0ZShzZWxmKToKKyAgICAgICAgY2xhc3MgTWV0YSh0eXBlKToKKyAgICAgICAgICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgICAgICAgICBpZiBuYW1lID09ICdoYW0nOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3NwYW0nCisgICAgICAgICAgICAgICAgcmV0dXJuIHN1cGVyKCkuX19nZXRhdHRyX18obmFtZSkKKyAgICAgICAgY2xhc3MgREEobWV0YWNsYXNzPU1ldGEpOgorICAgICAgICAgICAgQHR5cGVzLkR5bmFtaWNDbGFzc0F0dHJpYnV0ZQorICAgICAgICAgICAgZGVmIGhhbShzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gJ2VnZ3MnCisgICAgICAgIGV4cGVjdGVkX3RleHRfZGF0YV9kb2NzdHJpbmdzID0gdHVwbGUoJ1xuIHwgICAgICAnICsgcyBpZiBzIGVsc2UgJycKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHMgaW4gZXhwZWN0ZWRfZGF0YV9kb2NzdHJpbmdzKQorICAgICAgICBvdXRwdXQgPSBTdHJpbmdJTygpCisgICAgICAgIGhlbHBlciA9IHB5ZG9jLkhlbHBlcihvdXRwdXQ9b3V0cHV0KQorICAgICAgICBoZWxwZXIoREEpCisgICAgICAgIGV4cGVjdGVkX3RleHQgPSBleHBlY3RlZF9keW5hbWljYXR0cmlidXRlX3BhdHRlcm4gJSAoCisgICAgICAgICAgICAgICAgKF9fbmFtZV9fLCkgKyBleHBlY3RlZF90ZXh0X2RhdGFfZG9jc3RyaW5nc1s6Ml0pCisgICAgICAgIHJlc3VsdCA9IG91dHB1dC5nZXR2YWx1ZSgpLnN0cmlwKCkKKyAgICAgICAgaWYgcmVzdWx0ICE9IGV4cGVjdGVkX3RleHQ6CisgICAgICAgICAgICBwcmludF9kaWZmcyhleHBlY3RlZF90ZXh0LCByZXN1bHQpCisgICAgICAgICAgICBzZWxmLmZhaWwoIm91dHB1dHMgYXJlIG5vdCBlcXVhbCwgc2VlIGRpZmYgYWJvdmUiKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMuZmxhZ3Mub3B0aW1pemUgPj0gMiwKKyAgICAgICAgICAgICAgICAgICAgICJEb2NzdHJpbmdzIGFyZSBvbWl0dGVkIHdpdGggLU8yIGFuZCBhYm92ZSIpCisgICAgQHVuaXR0ZXN0LnNraXBJZihoYXNhdHRyKHN5cywgJ2dldHRyYWNlJykgYW5kIHN5cy5nZXR0cmFjZSgpLAorICAgICAgICAgICAgICAgICAgICAgJ3RyYWNlIGZ1bmN0aW9uIGludHJvZHVjZXMgX19sb2NhbHNfXyB1bmV4cGVjdGVkbHknKQorICAgIGRlZiB0ZXN0X3ZpcnR1YWxDbGFzc0F0dHJpYnV0ZVdpdGhPbmVNZXRhKHNlbGYpOgorICAgICAgICBjbGFzcyBNZXRhKHR5cGUpOgorICAgICAgICAgICAgZGVmIF9fZGlyX18oY2xzKToKKyAgICAgICAgICAgICAgICByZXR1cm4gWydfX2NsYXNzX18nLCAnX19tb2R1bGVfXycsICdfX25hbWVfXycsICdMSUZFJ10KKyAgICAgICAgICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgICAgICAgICBpZiBuYW1lID09J0xJRkUnOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gNDIKKyAgICAgICAgICAgICAgICByZXR1cm4gc3VwZXIoKS5fX2dldGF0dHIobmFtZSkKKyAgICAgICAgY2xhc3MgQ2xhc3MobWV0YWNsYXNzPU1ldGEpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBvdXRwdXQgPSBTdHJpbmdJTygpCisgICAgICAgIGhlbHBlciA9IHB5ZG9jLkhlbHBlcihvdXRwdXQ9b3V0cHV0KQorICAgICAgICBoZWxwZXIoQ2xhc3MpCisgICAgICAgIGV4cGVjdGVkX3RleHQgPSBleHBlY3RlZF92aXJ0dWFsYXR0cmlidXRlX3BhdHRlcm4xICUgX19uYW1lX18KKyAgICAgICAgcmVzdWx0ID0gb3V0cHV0LmdldHZhbHVlKCkuc3RyaXAoKQorICAgICAgICBpZiByZXN1bHQgIT0gZXhwZWN0ZWRfdGV4dDoKKyAgICAgICAgICAgIHByaW50X2RpZmZzKGV4cGVjdGVkX3RleHQsIHJlc3VsdCkKKyAgICAgICAgICAgIHNlbGYuZmFpbCgib3V0cHV0cyBhcmUgbm90IGVxdWFsLCBzZWUgZGlmZiBhYm92ZSIpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAorICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKKyAgICBAdW5pdHRlc3Quc2tpcElmKGhhc2F0dHIoc3lzLCAnZ2V0dHJhY2UnKSBhbmQgc3lzLmdldHRyYWNlKCksCisgICAgICAgICAgICAgICAgICAgICAndHJhY2UgZnVuY3Rpb24gaW50cm9kdWNlcyBfX2xvY2Fsc19fIHVuZXhwZWN0ZWRseScpCisgICAgZGVmIHRlc3RfdmlydHVhbENsYXNzQXR0cmlidXRlV2l0aFR3b01ldGEoc2VsZik6CisgICAgICAgIGNsYXNzIE1ldGExKHR5cGUpOgorICAgICAgICAgICAgZGVmIF9fZGlyX18oY2xzKToKKyAgICAgICAgICAgICAgICByZXR1cm4gWydfX2NsYXNzX18nLCAnX19tb2R1bGVfXycsICdfX25hbWVfXycsICdvbmUnXQorICAgICAgICAgICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIG5hbWUpOgorICAgICAgICAgICAgICAgIGlmIG5hbWUgPT0nb25lJzoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgICAgICAgICByZXR1cm4gc3VwZXIoKS5fX2dldGF0dHJfXyhuYW1lKQorICAgICAgICBjbGFzcyBNZXRhMih0eXBlKToKKyAgICAgICAgICAgIGRlZiBfX2Rpcl9fKGNscyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIFsnX19jbGFzc19fJywgJ19fbW9kdWxlX18nLCAnX19uYW1lX18nLCAndHdvJ10KKyAgICAgICAgICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgICAgICAgICBpZiBuYW1lID09J3R3byc6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAyCisgICAgICAgICAgICAgICAgcmV0dXJuIHN1cGVyKCkuX19nZXRhdHRyX18obmFtZSkKKyAgICAgICAgY2xhc3MgTWV0YTMoTWV0YTEsIE1ldGEyKToKKyAgICAgICAgICAgIGRlZiBfX2Rpcl9fKGNscyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGxpc3Qoc29ydGVkKHNldCgKKyAgICAgICAgICAgICAgICAgICAgWydfX2NsYXNzX18nLCAnX19tb2R1bGVfXycsICdfX25hbWVfXycsICd0aHJlZSddICsKKyAgICAgICAgICAgICAgICAgICAgTWV0YTEuX19kaXJfXyhjbHMpICsgTWV0YTIuX19kaXJfXyhjbHMpKSkpCisgICAgICAgICAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwgbmFtZSk6CisgICAgICAgICAgICAgICAgaWYgbmFtZSA9PSd0aHJlZSc6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAzCisgICAgICAgICAgICAgICAgcmV0dXJuIHN1cGVyKCkuX19nZXRhdHRyX18obmFtZSkKKyAgICAgICAgY2xhc3MgQ2xhc3MxKG1ldGFjbGFzcz1NZXRhMSk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGNsYXNzIENsYXNzMihDbGFzczEsIG1ldGFjbGFzcz1NZXRhMyk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGZhaWwxID0gZmFpbDIgPSBGYWxzZQorICAgICAgICBvdXRwdXQgPSBTdHJpbmdJTygpCisgICAgICAgIGhlbHBlciA9IHB5ZG9jLkhlbHBlcihvdXRwdXQ9b3V0cHV0KQorICAgICAgICBoZWxwZXIoQ2xhc3MxKQorICAgICAgICBleHBlY3RlZF90ZXh0MSA9IGV4cGVjdGVkX3ZpcnR1YWxhdHRyaWJ1dGVfcGF0dGVybjIgJSBfX25hbWVfXworICAgICAgICByZXN1bHQxID0gb3V0cHV0LmdldHZhbHVlKCkuc3RyaXAoKQorICAgICAgICBpZiByZXN1bHQxICE9IGV4cGVjdGVkX3RleHQxOgorICAgICAgICAgICAgcHJpbnRfZGlmZnMoZXhwZWN0ZWRfdGV4dDEsIHJlc3VsdDEpCisgICAgICAgICAgICBmYWlsMSA9IFRydWUKKyAgICAgICAgb3V0cHV0ID0gU3RyaW5nSU8oKQorICAgICAgICBoZWxwZXIgPSBweWRvYy5IZWxwZXIob3V0cHV0PW91dHB1dCkKKyAgICAgICAgaGVscGVyKENsYXNzMikKKyAgICAgICAgZXhwZWN0ZWRfdGV4dDIgPSBleHBlY3RlZF92aXJ0dWFsYXR0cmlidXRlX3BhdHRlcm4zICUgX19uYW1lX18KKyAgICAgICAgcmVzdWx0MiA9IG91dHB1dC5nZXR2YWx1ZSgpLnN0cmlwKCkKKyAgICAgICAgaWYgcmVzdWx0MiAhPSBleHBlY3RlZF90ZXh0MjoKKyAgICAgICAgICAgIHByaW50X2RpZmZzKGV4cGVjdGVkX3RleHQyLCByZXN1bHQyKQorICAgICAgICAgICAgZmFpbDIgPSBUcnVlCisgICAgICAgIGlmIGZhaWwxIG9yIGZhaWwyOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJvdXRwdXRzIGFyZSBub3QgZXF1YWwsIHNlZSBkaWZmIGFib3ZlIikKKworICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLmZsYWdzLm9wdGltaXplID49IDIsCisgICAgICAgICAgICAgICAgICAgICAiRG9jc3RyaW5ncyBhcmUgb21pdHRlZCB3aXRoIC1PMiBhbmQgYWJvdmUiKQorICAgIEB1bml0dGVzdC5za2lwSWYoaGFzYXR0cihzeXMsICdnZXR0cmFjZScpIGFuZCBzeXMuZ2V0dHJhY2UoKSwKKyAgICAgICAgICAgICAgICAgICAgICd0cmFjZSBmdW5jdGlvbiBpbnRyb2R1Y2VzIF9fbG9jYWxzX18gdW5leHBlY3RlZGx5JykKKyAgICBkZWYgdGVzdF9idWdneV9kaXIoc2VsZik6CisgICAgICAgIGNsYXNzIE0odHlwZSk6CisgICAgICAgICAgICBkZWYgX19kaXJfXyhjbHMpOgorICAgICAgICAgICAgICAgIHJldHVybiBbJ19fY2xhc3NfXycsICdfX25hbWVfXycsICdtaXNzaW5nJywgJ2hlcmUnXQorICAgICAgICBjbGFzcyBDKG1ldGFjbGFzcz1NKToKKyAgICAgICAgICAgIGhlcmUgPSAncHJlc2VudCEnCisgICAgICAgIG91dHB1dCA9IFN0cmluZ0lPKCkKKyAgICAgICAgaGVscGVyID0gcHlkb2MuSGVscGVyKG91dHB1dD1vdXRwdXQpCisgICAgICAgIGhlbHBlcihDKQorICAgICAgICBleHBlY3RlZF90ZXh0ID0gZXhwZWN0ZWRfbWlzc2luZ2F0dHJpYnV0ZV9wYXR0ZXJuICUgX19uYW1lX18KKyAgICAgICAgcmVzdWx0ID0gb3V0cHV0LmdldHZhbHVlKCkuc3RyaXAoKQorICAgICAgICBpZiByZXN1bHQgIT0gZXhwZWN0ZWRfdGV4dDoKKyAgICAgICAgICAgIHByaW50X2RpZmZzKGV4cGVjdGVkX3RleHQsIHJlc3VsdCkKKyAgICAgICAgICAgIHNlbGYuZmFpbCgib3V0cHV0cyBhcmUgbm90IGVxdWFsLCBzZWUgZGlmZiBhYm92ZSIpCisKKyAgICBkZWYgdGVzdF9yZXNvbHZlX2ZhbHNlKHNlbGYpOgorICAgICAgICAjIElzc3VlICMyMzAwODogcHlkb2MgZW51bS57LEludH1FbnVtIGZhaWxlZAorICAgICAgICAjIGJlY2F1c2UgYm9vbChlbnVtLkVudW0pIGlzIEZhbHNlLgorICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpIGFzIGhlbHBfaW86CisgICAgICAgICAgICBweWRvYy5oZWxwKCdlbnVtLkVudW0nKQorICAgICAgICBoZWxwdGV4dCA9IGhlbHBfaW8uZ2V0dmFsdWUoKQorICAgICAgICBzZWxmLmFzc2VydEluKCdjbGFzcyBFbnVtJywgaGVscHRleHQpCisKKwogQHJlYXBfdGhyZWFkcwogZGVmIHRlc3RfbWFpbigpOgogICAgIHRyeToKQEAgLTYyNiw2ICsxMDczLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeWRvY1NlcnZlclRlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlkb2NVcmxIYW5kbGVyVGVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXN0SGVscGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5ZG9jV2l0aE1ldGFDbGFzc2VzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICBmaW5hbGx5OgogICAgICAgICByZWFwX2NoaWxkcmVuKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcHlleHBhdC5weSBiL0xpYi90ZXN0L3Rlc3RfcHlleHBhdC5weQppbmRleCA4ZWYzOTE3Li4yMTZhNDZiIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3B5ZXhwYXQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9weWV4cGF0LnB5CkBAIC0yLDcgKzIsMTEgQEAKICMgaGFuZGxlciwgYXJlIG9ic2N1cmUgYW5kIHVuaGVscGZ1bC4KIAogZnJvbSBpbyBpbXBvcnQgQnl0ZXNJTworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgc3lzY29uZmlnCiBpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB0cmFjZWJhY2sKIAogZnJvbSB4bWwucGFyc2VycyBpbXBvcnQgZXhwYXQKIGZyb20geG1sLnBhcnNlcnMuZXhwYXQgaW1wb3J0IGVycm9ycwpAQCAtMTMsMjIgKzE3LDQ3IEBACiBjbGFzcyBTZXRBdHRyaWJ1dGVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIHNlbGYucGFyc2VyID0gZXhwYXQuUGFyc2VyQ3JlYXRlKG5hbWVzcGFjZV9zZXBhcmF0b3I9JyEnKQotICAgICAgICBzZWxmLnNldF9nZXRfcGFpcnMgPSBbCi0gICAgICAgICAgICBbMCwgMF0sCi0gICAgICAgICAgICBbMSwgMV0sCi0gICAgICAgICAgICBbMiwgMV0sCi0gICAgICAgICAgICBbMCwgMF0sCi0gICAgICAgICAgICBdCisKKyAgICBkZWYgdGVzdF9idWZmZXJfdGV4dChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzZWxmLnBhcnNlci5idWZmZXJfdGV4dCwgRmFsc2UpCisgICAgICAgIGZvciB4IGluIDAsIDEsIDIsIDA6CisgICAgICAgICAgICBzZWxmLnBhcnNlci5idWZmZXJfdGV4dCA9IHgKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoc2VsZi5wYXJzZXIuYnVmZmVyX3RleHQsIGJvb2woeCkpCisKKyAgICBkZWYgdGVzdF9uYW1lc3BhY2VfcHJlZml4ZXMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc2VsZi5wYXJzZXIubmFtZXNwYWNlX3ByZWZpeGVzLCBGYWxzZSkKKyAgICAgICAgZm9yIHggaW4gMCwgMSwgMiwgMDoKKyAgICAgICAgICAgIHNlbGYucGFyc2VyLm5hbWVzcGFjZV9wcmVmaXhlcyA9IHgKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoc2VsZi5wYXJzZXIubmFtZXNwYWNlX3ByZWZpeGVzLCBib29sKHgpKQogCiAgICAgZGVmIHRlc3Rfb3JkZXJlZF9hdHRyaWJ1dGVzKHNlbGYpOgotICAgICAgICBmb3IgeCwgeSBpbiBzZWxmLnNldF9nZXRfcGFpcnM6CisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc2VsZi5wYXJzZXIub3JkZXJlZF9hdHRyaWJ1dGVzLCBGYWxzZSkKKyAgICAgICAgZm9yIHggaW4gMCwgMSwgMiwgMDoKICAgICAgICAgICAgIHNlbGYucGFyc2VyLm9yZGVyZWRfYXR0cmlidXRlcyA9IHgKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5wYXJzZXIub3JkZXJlZF9hdHRyaWJ1dGVzLCB5KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhzZWxmLnBhcnNlci5vcmRlcmVkX2F0dHJpYnV0ZXMsIGJvb2woeCkpCiAKICAgICBkZWYgdGVzdF9zcGVjaWZpZWRfYXR0cmlidXRlcyhzZWxmKToKLSAgICAgICAgZm9yIHgsIHkgaW4gc2VsZi5zZXRfZ2V0X3BhaXJzOgorICAgICAgICBzZWxmLmFzc2VydElzKHNlbGYucGFyc2VyLnNwZWNpZmllZF9hdHRyaWJ1dGVzLCBGYWxzZSkKKyAgICAgICAgZm9yIHggaW4gMCwgMSwgMiwgMDoKICAgICAgICAgICAgIHNlbGYucGFyc2VyLnNwZWNpZmllZF9hdHRyaWJ1dGVzID0geAotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnBhcnNlci5zcGVjaWZpZWRfYXR0cmlidXRlcywgeSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoc2VsZi5wYXJzZXIuc3BlY2lmaWVkX2F0dHJpYnV0ZXMsIGJvb2woeCkpCisKKyAgICBkZWYgdGVzdF9zcGVjaWZpZWRfYXR0cmlidXRlcyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzZWxmLnBhcnNlci5zcGVjaWZpZWRfYXR0cmlidXRlcywgRmFsc2UpCisgICAgICAgIGZvciB4IGluIDAsIDEsIDIsIDA6CisgICAgICAgICAgICBzZWxmLnBhcnNlci5zcGVjaWZpZWRfYXR0cmlidXRlcyA9IHgKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoc2VsZi5wYXJzZXIuc3BlY2lmaWVkX2F0dHJpYnV0ZXMsIGJvb2woeCkpCisKKyAgICBkZWYgdGVzdF9pbnZhbGlkX2F0dHJpYnV0ZXMoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5wYXJzZXIucmV0dXJuc191bmljb2RlID0gMQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yKToKKyAgICAgICAgICAgIHNlbGYucGFyc2VyLnJldHVybnNfdW5pY29kZQorCisgICAgICAgICMgSXNzdWUgIzI1MDE5CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2V0YXR0ciwgc2VsZi5wYXJzZXIsIHJhbmdlKDB4RiksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5wYXJzZXIuX19zZXRhdHRyX18sIHJhbmdlKDB4RiksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXR0ciwgc2VsZi5wYXJzZXIsIHJhbmdlKDB4RikpCiAKIAogZGF0YSA9IGInJydcCkBAIC0yMzYsNiArMjY1LDE4IEBACiAgICAgICAgIG9wZXJhdGlvbnMgPSBvdXQub3V0CiAgICAgICAgIHNlbGYuX3ZlcmlmeV9wYXJzZV9vdXRwdXQob3BlcmF0aW9ucykKIAorICAgIGRlZiB0ZXN0X3BhcnNlX2FnYWluKHNlbGYpOgorICAgICAgICBwYXJzZXIgPSBleHBhdC5QYXJzZXJDcmVhdGUoKQorICAgICAgICBmaWxlID0gQnl0ZXNJTyhkYXRhKQorICAgICAgICBwYXJzZXIuUGFyc2VGaWxlKGZpbGUpCisgICAgICAgICMgSXNzdWUgNjY3NjogZW5zdXJlIGEgbWVhbmluZ2Z1bCBleGNlcHRpb24gaXMgcmFpc2VkIHdoZW4gYXR0ZW1wdGluZworICAgICAgICAjIHRvIHBhcnNlIG1vcmUgdGhhbiBvbmUgWE1MIGRvY3VtZW50IHBlciB4bWxwYXJzZXIgaW5zdGFuY2UsCisgICAgICAgICMgYSBsaW1pdGF0aW9uIG9mIHRoZSBFeHBhdCBsaWJyYXJ5LgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGV4cGF0LmVycm9yKSBhcyBjbToKKyAgICAgICAgICAgIHBhcnNlci5QYXJzZUZpbGUoZmlsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBhdC5FcnJvclN0cmluZyhjbS5leGNlcHRpb24uY29kZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGF0LmVycm9ycy5YTUxfRVJST1JfRklOSVNIRUQpCisKIGNsYXNzIE5hbWVzcGFjZVNlcGFyYXRvclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X2xlZ2FsKHNlbGYpOgogICAgICAgICAjIFRlc3RzIHRoYXQgbWFrZSBzdXJlIHdlIGdldCBlcnJvcnMgd2hlbiB0aGUgbmFtZXNwYWNlX3NlcGFyYXRvciB2YWx1ZQpAQCAtNDA3LDcgKzQ0OCwxMSBAQAogICAgIGRlZiBTdGFydEVsZW1lbnRIYW5kbGVyKHNlbGYsIG5hbWUsIGF0dHJzKToKICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKG5hbWUpCiAKLSAgICBkZWYgdGVzdChzZWxmKToKKyAgICBkZWYgY2hlY2tfdHJhY2ViYWNrX2VudHJ5KHNlbGYsIGVudHJ5LCBmaWxlbmFtZSwgZnVuY25hbWUpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnBhdGguYmFzZW5hbWUoZW50cnlbMF0pLCBmaWxlbmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbnRyeVsyXSwgZnVuY25hbWUpCisKKyAgICBkZWYgdGVzdF9leGNlcHRpb24oc2VsZik6CiAgICAgICAgIHBhcnNlciA9IGV4cGF0LlBhcnNlckNyZWF0ZSgpCiAgICAgICAgIHBhcnNlci5TdGFydEVsZW1lbnRIYW5kbGVyID0gc2VsZi5TdGFydEVsZW1lbnRIYW5kbGVyCiAgICAgICAgIHRyeToKQEAgLTQxNyw2ICs0NjIsMTcgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5hcmdzWzBdLCAnYScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFeHBlY3RlZCBSdW50aW1lRXJyb3IgZm9yIGVsZW1lbnQgJ2EnLCBidXQiICsgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIGZvdW5kICVyIiAlIGUuYXJnc1swXSkKKyAgICAgICAgICAgICMgQ2hlY2sgdGhhdCB0aGUgdHJhY2ViYWNrIGNvbnRhaW5zIHRoZSByZWxldmFudCBsaW5lIGluIHB5ZXhwYXQuYworICAgICAgICAgICAgZW50cmllcyA9IHRyYWNlYmFjay5leHRyYWN0X3RiKGUuX190cmFjZWJhY2tfXykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGVudHJpZXMpLCAzKQorICAgICAgICAgICAgc2VsZi5jaGVja190cmFjZWJhY2tfZW50cnkoZW50cmllc1swXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0X3B5ZXhwYXQucHkiLCAidGVzdF9leGNlcHRpb24iKQorICAgICAgICAgICAgc2VsZi5jaGVja190cmFjZWJhY2tfZW50cnkoZW50cmllc1sxXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJweWV4cGF0LmMiLCAiU3RhcnRFbGVtZW50IikKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfdHJhY2ViYWNrX2VudHJ5KGVudHJpZXNbMl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdF9weWV4cGF0LnB5IiwgIlN0YXJ0RWxlbWVudEhhbmRsZXIiKQorICAgICAgICAgICAgaWYgc3lzY29uZmlnLmlzX3B5dGhvbl9idWlsZCgpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2NhbGxfd2l0aF9mcmFtZSgiU3RhcnRFbGVtZW50IicsIGVudHJpZXNbMV1bM10pCiAKIAogIyBUZXN0IEN1cnJlbnQqIG1lbWJlcnM6CkBAIC00ODQsMTEgKzU0MCwxNCBAQAogICAgIGRlZiB0ZXN0X3dyb25nX3NpemUoc2VsZik6CiAgICAgICAgIHBhcnNlciA9IGV4cGF0LlBhcnNlckNyZWF0ZSgpCiAgICAgICAgIHBhcnNlci5idWZmZXJfdGV4dCA9IDEKLSAgICAgICAgZGVmIGYoc2l6ZSk6Ci0gICAgICAgICAgICBwYXJzZXIuYnVmZmVyX3NpemUgPSBzaXplCi0KLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZiwgLTEpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGYsIDApCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBwYXJzZXIuYnVmZmVyX3NpemUgPSAtMQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgcGFyc2VyLmJ1ZmZlcl9zaXplID0gMAorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKChWYWx1ZUVycm9yLCBPdmVyZmxvd0Vycm9yKSk6CisgICAgICAgICAgICBwYXJzZXIuYnVmZmVyX3NpemUgPSBzeXMubWF4c2l6ZSArIDEKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgcGFyc2VyLmJ1ZmZlcl9zaXplID0gNTEyLjAKIAogICAgIGRlZiB0ZXN0X3VuY2hhbmdlZF9zaXplKHNlbGYpOgogICAgICAgICB4bWwxID0gYiI8P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdpc284ODU5Jz8+PHM+IiArIGInYScgKiA1MTIKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcXVvcHJpLnB5IGIvTGliL3Rlc3QvdGVzdF9xdW9wcmkucHkKaW5kZXggNTgzZmQ0NS4uOTI1MTFmYSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9xdW9wcmkucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9xdW9wcmkucHkKQEAgLTEzOCw2ICsxMzgsMTMgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocXVvcHJpLmRlY29kZXN0cmluZyhlKSwgcCkKIAogICAgIEB3aXRocHl0aG9uaW1wbGVtZW50YXRpb24KKyAgICBkZWYgdGVzdF9kZWNvZGVzdHJpbmdfZG91YmxlX2VxdWFscyhzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAyMTUxMSAtIEVuc3VyZSB0aGF0IGJ5dGUgc3RyaW5nIGlzIGNvbXBhcmVkIHRvIGJ5dGUgc3RyaW5nCisgICAgICAgICMgaW5zdGVhZCBvZiBpbnQgYnl0ZSB2YWx1ZQorICAgICAgICBkZWNvZGVkX3ZhbHVlLCBlbmNvZGVkX3ZhbHVlID0gKGIiMTIzPWZvdXIiLCBiIjEyMz09Zm91ciIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocXVvcHJpLmRlY29kZXN0cmluZyhlbmNvZGVkX3ZhbHVlKSwgZGVjb2RlZF92YWx1ZSkKKworICAgIEB3aXRocHl0aG9uaW1wbGVtZW50YXRpb24KICAgICBkZWYgdGVzdF9pZGVtcG90ZW50X3N0cmluZyhzZWxmKToKICAgICAgICAgZm9yIHAsIGUgaW4gc2VsZi5TVFJJTkdTOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChxdW9wcmkuZGVjb2Rlc3RyaW5nKHF1b3ByaS5lbmNvZGVzdHJpbmcoZSkpLCBlKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9yYW5kb20ucHkgYi9MaWIvdGVzdC90ZXN0X3JhbmRvbS5weQppbmRleCBhNDc1MjA3Li40YjUyMzJmIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3JhbmRvbS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3JhbmRvbS5weQpAQCAtMSw4ICsxLDEwIEBACiBpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB1bml0dGVzdC5tb2NrCiBpbXBvcnQgcmFuZG9tCiBpbXBvcnQgdGltZQogaW1wb3J0IHBpY2tsZQogaW1wb3J0IHdhcm5pbmdzCitmcm9tIGZ1bmN0b29scyBpbXBvcnQgcGFydGlhbAogZnJvbSBtYXRoIGltcG9ydCBsb2csIGV4cCwgcGksIGZzdW0sIHNpbgogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiAKQEAgLTQ0LDYgKzQ2LDQ4IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5nZW4uc2VlZCwgMSwgMiwgMywgNCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0eXBlKHNlbGYuZ2VuKSwgW10pCiAKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgncmFuZG9tLl91cmFuZG9tJykgIyBvcy51cmFuZG9tCisgICAgZGVmIHRlc3Rfc2VlZF93aGVuX3JhbmRvbW5lc3Nfc291cmNlX25vdF9mb3VuZChzZWxmLCB1cmFuZG9tX21vY2spOgorICAgICAgICAjIFJhbmRvbS5zZWVkKCkgdXNlcyB0aW1lLnRpbWUoKSB3aGVuIGFuIG9wZXJhdGluZyBzeXN0ZW0gc3BlY2lmaWMKKyAgICAgICAgIyByYW5kb21uZXNzIHNvdXJjZSBpcyBub3QgZm91bmQuIFRvIHRlc3QgdGhpcyBvbiBtYWNoaW5lcyB3ZXJlIGl0CisgICAgICAgICMgZXhpc3RzLCBydW4gdGhlIGFib3ZlIHRlc3QsIHRlc3Rfc2VlZGFyZ3MoKSwgYWdhaW4gYWZ0ZXIgbW9ja2luZworICAgICAgICAjIG9zLnVyYW5kb20oKSBzbyB0aGF0IGl0IHJhaXNlcyB0aGUgZXhjZXB0aW9uIGV4cGVjdGVkIHdoZW4gdGhlCisgICAgICAgICMgcmFuZG9tbmVzcyBzb3VyY2UgaXMgbm90IGF2YWlsYWJsZS4KKyAgICAgICAgdXJhbmRvbV9tb2NrLnNpZGVfZWZmZWN0ID0gTm90SW1wbGVtZW50ZWRFcnJvcgorICAgICAgICBzZWxmLnRlc3Rfc2VlZGFyZ3MoKQorCisgICAgZGVmIHRlc3Rfc2h1ZmZsZShzZWxmKToKKyAgICAgICAgc2h1ZmZsZSA9IHNlbGYuZ2VuLnNodWZmbGUKKyAgICAgICAgbHN0ID0gW10KKyAgICAgICAgc2h1ZmZsZShsc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobHN0LCBbXSkKKyAgICAgICAgbHN0ID0gWzM3XQorICAgICAgICBzaHVmZmxlKGxzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsc3QsIFszN10pCisgICAgICAgIHNlcXMgPSBbbGlzdChyYW5nZShuKSkgZm9yIG4gaW4gcmFuZ2UoMTApXQorICAgICAgICBzaHVmZmxlZF9zZXFzID0gW2xpc3QocmFuZ2UobikpIGZvciBuIGluIHJhbmdlKDEwKV0KKyAgICAgICAgZm9yIHNodWZmbGVkX3NlcSBpbiBzaHVmZmxlZF9zZXFzOgorICAgICAgICAgICAgc2h1ZmZsZShzaHVmZmxlZF9zZXEpCisgICAgICAgIGZvciAoc2VxLCBzaHVmZmxlZF9zZXEpIGluIHppcChzZXFzLCBzaHVmZmxlZF9zZXFzKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlcSksIGxlbihzaHVmZmxlZF9zZXEpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQoc2VxKSwgc2V0KHNodWZmbGVkX3NlcSkpCisgICAgICAgICMgVGhlIGFib3ZlIHRlc3RzIGFsbCB3b3VsZCBwYXNzIGlmIHRoZSBzaHVmZmxlIHdhcyBhCisgICAgICAgICMgbm8tb3AuIFRoZSBmb2xsb3dpbmcgbm9uLWRldGVybWluaXN0aWMgdGVzdCBjb3ZlcnMgdGhhdC4gIEl0CisgICAgICAgICMgYXNzZXJ0cyB0aGF0IHRoZSBzaHVmZmxlZCBzZXF1ZW5jZSBvZiAxMDAwIGRpc3RpbmN0IGVsZW1lbnRzCisgICAgICAgICMgbXVzdCBiZSBkaWZmZXJlbnQgZnJvbSB0aGUgb3JpZ2luYWwgb25lLiBBbHRob3VnaCB0aGVyZSBpcworICAgICAgICAjIG1hdGhlbWF0aWNhbGx5IGEgbm9uLXplcm8gcHJvYmFiaWxpdHkgdGhhdCB0aGlzIGNvdWxkCisgICAgICAgICMgYWN0dWFsbHkgaGFwcGVuIGluIGEgZ2VudWluZWx5IHJhbmRvbSBzaHVmZmxlLCBpdCBpcworICAgICAgICAjIGNvbXBsZXRlbHkgbmVnbGlnaWJsZSwgZ2l2ZW4gdGhhdCB0aGUgbnVtYmVyIG9mIHBvc3NpYmxlCisgICAgICAgICMgcGVybXV0YXRpb25zIG9mIDEwMDAgb2JqZWN0cyBpcyAxMDAwISAoZmFjdG9yaWFsIG9mIDEwMDApLAorICAgICAgICAjIHdoaWNoIGlzIGNvbnNpZGVyYWJseSBsYXJnZXIgdGhhbiB0aGUgbnVtYmVyIG9mIGF0b21zIGluIHRoZQorICAgICAgICAjIHVuaXZlcnNlLi4uCisgICAgICAgIGxzdCA9IGxpc3QocmFuZ2UoMTAwMCkpCisgICAgICAgIHNodWZmbGVkX2xzdCA9IGxpc3QocmFuZ2UoMTAwMCkpCisgICAgICAgIHNodWZmbGUoc2h1ZmZsZWRfbHN0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUobHN0ICE9IHNodWZmbGVkX2xzdCkKKyAgICAgICAgc2h1ZmZsZShsc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsc3QgIT0gc2h1ZmZsZWRfbHN0KQorCiAgICAgZGVmIHRlc3RfY2hvaWNlKHNlbGYpOgogICAgICAgICBjaG9pY2UgPSBzZWxmLmdlbi5jaG9pY2UKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yKToKQEAgLTYzLDYgKzEwNyw4IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih1bmlxKSwgaykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1bmlxIDw9IHNldChwb3B1bGF0aW9uKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmdlbi5zYW1wbGUoW10sIDApLCBbXSkgICMgdGVzdCBlZGdlIGNhc2UgTj09az09MAorICAgICAgICAjIEV4Y2VwdGlvbiByYWlzZWQgaWYgc2l6ZSBvZiBzYW1wbGUgZXhjZWVkcyB0aGF0IG9mIHBvcHVsYXRpb24KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5nZW4uc2FtcGxlLCBwb3B1bGF0aW9uLCBOKzEpCiAKICAgICBkZWYgdGVzdF9zYW1wbGVfZGlzdHJpYnV0aW9uKHNlbGYpOgogICAgICAgICAjIEZvciB0aGUgZW50aXJlIGFsbG93YWJsZSByYW5nZSBvZiAwIDw9IGsgPD0gTiwgdmFsaWRhdGUgdGhhdApAQCAtMTEzLDExICsxNTksMTIgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeTEsIHkyKQogCiAgICAgZGVmIHRlc3RfcGlja2xpbmcoc2VsZik6Ci0gICAgICAgIHN0YXRlID0gcGlja2xlLmR1bXBzKHNlbGYuZ2VuKQotICAgICAgICBvcmlnc2VxID0gW3NlbGYuZ2VuLnJhbmRvbSgpIGZvciBpIGluIHJhbmdlKDEwKV0KLSAgICAgICAgbmV3Z2VuID0gcGlja2xlLmxvYWRzKHN0YXRlKQotICAgICAgICByZXN0b3JlZHNlcSA9IFtuZXdnZW4ucmFuZG9tKCkgZm9yIGkgaW4gcmFuZ2UoMTApXQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9yaWdzZXEsIHJlc3RvcmVkc2VxKQorICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIHN0YXRlID0gcGlja2xlLmR1bXBzKHNlbGYuZ2VuLCBwcm90bykKKyAgICAgICAgICAgIG9yaWdzZXEgPSBbc2VsZi5nZW4ucmFuZG9tKCkgZm9yIGkgaW4gcmFuZ2UoMTApXQorICAgICAgICAgICAgbmV3Z2VuID0gcGlja2xlLmxvYWRzKHN0YXRlKQorICAgICAgICAgICAgcmVzdG9yZWRzZXEgPSBbbmV3Z2VuLnJhbmRvbSgpIGZvciBpIGluIHJhbmdlKDEwKV0KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3JpZ3NlcSwgcmVzdG9yZWRzZXEpCiAKICAgICBkZWYgdGVzdF9idWdfMTcyNzc4MChzZWxmKToKICAgICAgICAgIyB2ZXJpZnkgdGhhdCB2ZXJzaW9uLTItcGlja2xlcyBjYW4gYmUgbG9hZGVkCkBAIC0xNjksNyArMjE2LDggQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmdlbi5nYXVzc19uZXh0LCBOb25lKQogCiAgICAgZGVmIHRlc3RfcGlja2xpbmcoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIHBpY2tsZS5kdW1wcywgc2VsZi5nZW4pCisgICAgICAgIGZvciBwcm90byBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgcGlja2xlLmR1bXBzLCBzZWxmLmdlbiwgcHJvdG8pCiAKICAgICBkZWYgdGVzdF81M19iaXRzX3Blcl9mbG9hdChzZWxmKToKICAgICAgICAgIyBUaGlzIHNob3VsZCBwYXNzIHdoZW5ldmVyIGEgQyBkb3VibGUgaGFzIDUzIGJpdCBwcmVjaXNpb24uCkBAIC0yMDMsNiArMjUxLDI1IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChyYW5nZShzdGFydCxzdG9wKSksCiAgICAgICAgICAgICAgICAgc2V0KFtzZWxmLmdlbi5yYW5kcmFuZ2Uoc3RhcnQsc3RvcCkgZm9yIGkgaW4gcmFuZ2UoMTAwKV0pKQogCisgICAgZGVmIHRlc3RfcmFuZHJhbmdlX25vbnVuaXRfc3RlcChzZWxmKToKKyAgICAgICAgcmludCA9IHNlbGYuZ2VuLnJhbmRyYW5nZSgwLCAxMCwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRJbihyaW50LCAoMCwgMiwgNCwgNiwgOCkpCisgICAgICAgIHJpbnQgPSBzZWxmLmdlbi5yYW5kcmFuZ2UoMCwgMiwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyaW50LCAwKQorCisgICAgZGVmIHRlc3RfcmFuZHJhbmdlX2Vycm9ycyhzZWxmKToKKyAgICAgICAgcmFpc2VzID0gcGFydGlhbChzZWxmLmFzc2VydFJhaXNlcywgVmFsdWVFcnJvciwgc2VsZi5nZW4ucmFuZHJhbmdlKQorICAgICAgICAjIEVtcHR5IHJhbmdlCisgICAgICAgIHJhaXNlcygzLCAzKQorICAgICAgICByYWlzZXMoLTcyMSkKKyAgICAgICAgcmFpc2VzKDAsIDEwMCwgLTEyKQorICAgICAgICAjIE5vbi1pbnRlZ2VyIHN0YXJ0L3N0b3AKKyAgICAgICAgcmFpc2VzKDMuMTQxNTkpCisgICAgICAgIHJhaXNlcygwLCAyLjcxODI4KQorICAgICAgICAjIFplcm8gYW5kIG5vbi1pbnRlZ2VyIHN0ZXAKKyAgICAgICAgcmFpc2VzKDAsIDQyLCAwKQorICAgICAgICByYWlzZXMoMCwgNDIsIDMuMTQxNTkpCisKICAgICBkZWYgdGVzdF9nZW5yYW5kYml0cyhzZWxmKToKICAgICAgICAgIyBWZXJpZnkgcmFuZ2VzCiAgICAgICAgIGZvciBrIGluIHJhbmdlKDEsIDEwMDApOgpAQCAtMjcxLDYgKzMzOCwyMSBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuZ2VuLnNldHN0YXRlLCAoMiwgKCdhJywpKjYyNSwgTm9uZSkpCiAgICAgICAgICMgTGFzdCBlbGVtZW50IHMvYiBhbiBpbnQgYWxzbwogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuZ2VuLnNldHN0YXRlLCAoMiwgKDAsKSo2MjQrKCdhJywpLCBOb25lKSkKKyAgICAgICAgIyBMYXN0IGVsZW1lbnQgcy9iIGJldHdlZW4gMCBhbmQgNjI0CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoKFZhbHVlRXJyb3IsIE92ZXJmbG93RXJyb3IpKToKKyAgICAgICAgICAgIHNlbGYuZ2VuLnNldHN0YXRlKCgyLCAoMSwpKjYyNCsoNjI1LCksIE5vbmUpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKChWYWx1ZUVycm9yLCBPdmVyZmxvd0Vycm9yKSk6CisgICAgICAgICAgICBzZWxmLmdlbi5zZXRzdGF0ZSgoMiwgKDEsKSo2MjQrKC0xLCksIE5vbmUpKQorCisgICAgICAgICMgTGl0dGxlIHRyaWNrIHRvIG1ha2UgInR1cGxlKHggJSAoMioqMzIpIGZvciB4IGluIGludGVybmFsc3RhdGUpIgorICAgICAgICAjIHJhaXNlIFZhbHVlRXJyb3IuIEkgY2Fubm90IHRoaW5rIG9mIGEgc2ltcGxlIHdheSB0byBhY2hpZXZlIHRoaXMsIHNvCisgICAgICAgICMgSSBhbSBvcHRpbmcgZm9yIHVzaW5nIGEgZ2VuZXJhdG9yIGFzIHRoZSBtaWRkbGUgYXJndW1lbnQgb2Ygc2V0c3RhdGUKKyAgICAgICAgIyB3aGljaCBhdHRlbXB0cyB0byBjYXN0IGEgTmFOIHRvIGludGVnZXIuCisgICAgICAgIHN0YXRlX3ZhbHVlcyA9IHNlbGYuZ2VuLmdldHN0YXRlKClbMV0KKyAgICAgICAgc3RhdGVfdmFsdWVzID0gbGlzdChzdGF0ZV92YWx1ZXMpCisgICAgICAgIHN0YXRlX3ZhbHVlc1stMV0gPSBmbG9hdCgnbmFuJykKKyAgICAgICAgc3RhdGUgPSAoaW50KHgpIGZvciB4IGluIHN0YXRlX3ZhbHVlcykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmdlbi5zZXRzdGF0ZSwgKDIsIHN0YXRlLCBOb25lKSkKIAogICAgIGRlZiB0ZXN0X3JlZmVyZW5jZUltcGxlbWVudGF0aW9uKHNlbGYpOgogICAgICAgICAjIENvbXBhcmUgdGhlIHB5dGhvbiBpbXBsZW1lbnRhdGlvbiB3aXRoIHJlc3VsdHMgZnJvbSB0aGUgb3JpZ2luYWwKQEAgLTQxMSw2ICs0OTMsMzggQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaywgbnVtYml0cykgICAgICAgICMgbm90ZSB0aGUgc3Ryb25nZXIgYXNzZXJ0aW9uCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoMioqayA+IG4gPiAyKiooay0xKSkgICAjIG5vdGUgdGhlIHN0cm9uZ2VyIGFzc2VydGlvbgogCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ3JhbmRvbS5SYW5kb20ucmFuZG9tJykKKyAgICBkZWYgdGVzdF9yYW5kYmVsb3dfb3ZlcnJpZGVuX3JhbmRvbShzZWxmLCByYW5kb21fbW9jayk6CisgICAgICAgICMgUmFuZG9tLl9yYW5kYmVsb3coKSBjYW4gb25seSB1c2UgcmFuZG9tKCkgd2hlbiB0aGUgYnVpbHQtaW4gb25lCisgICAgICAgICMgaGFzIGJlZW4gb3ZlcnJpZGRlbiBidXQgbm8gbmV3IGdldHJhbmRiaXRzKCkgbWV0aG9kIHdhcyBzdXBwbGllZC4KKyAgICAgICAgcmFuZG9tX21vY2suc2lkZV9lZmZlY3QgPSByYW5kb20uU3lzdGVtUmFuZG9tKCkucmFuZG9tCisgICAgICAgIG1heHNpemUgPSAxPDxyYW5kb20uQlBGCisgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcigiaWdub3JlIiwgVXNlcldhcm5pbmcpCisgICAgICAgICAgICAjIFBvcHVsYXRpb24gcmFuZ2UgdG9vIGxhcmdlIChuID49IG1heHNpemUpCisgICAgICAgICAgICBzZWxmLmdlbi5fcmFuZGJlbG93KG1heHNpemUrMSwgbWF4c2l6ZSA9IG1heHNpemUpCisgICAgICAgIHNlbGYuZ2VuLl9yYW5kYmVsb3coNTY0MCwgbWF4c2l6ZSA9IG1heHNpemUpCisKKyAgICAgICAgIyBUaGlzIG1pZ2h0IGJlIGdvaW5nIHRvbyBmYXIgdG8gdGVzdCBhIHNpbmdsZSBsaW5lLCBidXQgYmVjYXVzZSBvZiBvdXIKKyAgICAgICAgIyBub2JsZSBhaW0gb2YgYWNoaWV2aW5nIDEwMCUgdGVzdCBjb3ZlcmFnZSB3ZSBuZWVkIHRvIHdyaXRlIGEgY2FzZSBpbgorICAgICAgICAjIHdoaWNoIHRoZSBmb2xsb3dpbmcgbGluZSBpbiBSYW5kb20uX3JhbmRiZWxvdygpIGdldHMgZXhlY3V0ZWQ6CisgICAgICAgICMKKyAgICAgICAgIyByZW0gPSBtYXhzaXplICUgbgorICAgICAgICAjIGxpbWl0ID0gKG1heHNpemUgLSByZW0pIC8gbWF4c2l6ZQorICAgICAgICAjIHIgPSByYW5kb20oKQorICAgICAgICAjIHdoaWxlIHIgPj0gbGltaXQ6CisgICAgICAgICMgICAgIHIgPSByYW5kb20oKSAjIDw9PSAqVGhpcyBsaW5lKiA8PT08CisgICAgICAgICMKKyAgICAgICAgIyBUaGVyZWZvcmUsIHRvIGd1YXJhbnRlZSB0aGF0IHRoZSB3aGlsZSBsb29wIGlzIGV4ZWN1dGVkIGF0IGxlYXN0CisgICAgICAgICMgb25jZSwgd2UgbmVlZCB0byBtb2NrIHJhbmRvbSgpIHNvIHRoYXQgaXQgcmV0dXJucyBhIG51bWJlciBncmVhdGVyCisgICAgICAgICMgdGhhbiAnbGltaXQnIHRoZSBmaXJzdCB0aW1lIGl0IGdldHMgY2FsbGVkLgorCisgICAgICAgIG4gPSA0MgorICAgICAgICBlcHNpbG9uID0gMC4wMQorICAgICAgICBsaW1pdCA9IChtYXhzaXplIC0gKG1heHNpemUgJSBuKSkgLyBtYXhzaXplCisgICAgICAgIHJhbmRvbV9tb2NrLnNpZGVfZWZmZWN0ID0gW2xpbWl0ICsgZXBzaWxvbiwgbGltaXQgLSBlcHNpbG9uXQorICAgICAgICBzZWxmLmdlbi5fcmFuZGJlbG93KG4sIG1heHNpemUgPSBtYXhzaXplKQorCiAgICAgZGVmIHRlc3RfcmFuZHJhbmdlX2J1Z18xNTkwODkxKHNlbGYpOgogICAgICAgICBzdGFydCA9IDEwMDAwMDAwMDAwMDAKICAgICAgICAgc3RvcCA9IC0xMDAwMDAwMDAwMDAwMDAwMDAwMDAKQEAgLTQ5NSw3ICs2MDksNyBAQAogICAgICAgICBmb3IgdmFyaWF0ZSwgYXJncywgZXhwZWN0ZWQgaW4gWwogICAgICAgICAgICAgICAgIChnLnVuaWZvcm0sICgxMC4wLCAxMC4wKSwgMTAuMCksCiAgICAgICAgICAgICAgICAgKGcudHJpYW5ndWxhciwgKDEwLjAsIDEwLjApLCAxMC4wKSwKLSAgICAgICAgICAgICAgICAjKGcudHJpYW5ndWxhciwgKDEwLjAsIDEwLjAsIDEwLjApLCAxMC4wKSwKKyAgICAgICAgICAgICAgICAoZy50cmlhbmd1bGFyLCAoMTAuMCwgMTAuMCwgMTAuMCksIDEwLjApLAogICAgICAgICAgICAgICAgIChnLmV4cG92YXJpYXRlLCAoZmxvYXQoJ2luZicpLCksIDAuMCksCiAgICAgICAgICAgICAgICAgKGcudm9ubWlzZXN2YXJpYXRlLCAoMy4wLCBmbG9hdCgnaW5mJykpLCAzLjApLAogICAgICAgICAgICAgICAgIChnLmdhdXNzLCAoMTAuMCwgMC4wKSwgMTAuMCksCkBAIC01MjgsNiArNjQyLDEwNiBAQAogICAgICAgICByYW5kb20udm9ubWlzZXN2YXJpYXRlKDAsIDFlMTUpCiAgICAgICAgIHJhbmRvbS52b25taXNlc3ZhcmlhdGUoMCwgMWUxMDApCiAKKyAgICBkZWYgdGVzdF9nYW1tYXZhcmlhdGVfZXJyb3JzKHNlbGYpOgorICAgICAgICAjIEJvdGggYWxwaGEgYW5kIGJldGEgbXVzdCBiZSA+IDAuMAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCByYW5kb20uZ2FtbWF2YXJpYXRlLCAtMSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcmFuZG9tLmdhbW1hdmFyaWF0ZSwgMCwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcmFuZG9tLmdhbW1hdmFyaWF0ZSwgMiwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcmFuZG9tLmdhbW1hdmFyaWF0ZSwgMSwgLTMpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgncmFuZG9tLlJhbmRvbS5yYW5kb20nKQorICAgIGRlZiB0ZXN0X2dhbW1hdmFyaWF0ZV9mdWxsX2NvZGVfY292ZXJhZ2Uoc2VsZiwgcmFuZG9tX21vY2spOgorICAgICAgICAjIFRoZXJlIGFyZSB0aHJlZSBkaWZmZXJlbnQgcG9zc2liaWxpdGllcyBpbiB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbgorICAgICAgICAjIG9mIHJhbmRvbS5nYW1tYXZhcmlhdGUoKSwgZGVwZW5kaW5nIG9uIHRoZSB2YWx1ZSBvZiAnYWxwaGEnLiBXaGF0IHdlCisgICAgICAgICMgYXJlIGdvaW5nIHRvIGRvIGhlcmUgaXMgdG8gZml4IHRoZSB2YWx1ZXMgcmV0dXJuZWQgYnkgcmFuZG9tKCkgdG8KKyAgICAgICAgIyBnZW5lcmF0ZSB0ZXN0IGNhc2VzIHRoYXQgcHJvdmlkZSAxMDAlIGxpbmUgY292ZXJhZ2Ugb2YgdGhlIG1ldGhvZC4KKworICAgICAgICAjICMxOiBhbHBoYSA+IDEuMDogd2Ugd2FudCB0aGUgZmlyc3QgcmFuZG9tIG51bWJlciB0byBiZSBvdXRzaWRlIHRoZQorICAgICAgICAjIFsxZS03LCAuOTk5OTk5OV0gcmFuZ2UsIHNvIHRoYXQgdGhlIGNvbnRpbnVlIHN0YXRlbWVudCBleGVjdXRlcworICAgICAgICAjIG9uY2UuIFRoZSB2YWx1ZXMgb2YgdTEgYW5kIHUyIHdpbGwgYmUgMC41IGFuZCAwLjMsIHJlc3BlY3RpdmVseS4KKyAgICAgICAgcmFuZG9tX21vY2suc2lkZV9lZmZlY3QgPSBbMWUtOCwgMC41LCAwLjNdCisgICAgICAgIHJldHVybmVkX3ZhbHVlID0gcmFuZG9tLmdhbW1hdmFyaWF0ZSgxLjEsIDIuMykKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChyZXR1cm5lZF92YWx1ZSwgMi41MykKKworICAgICAgICAjICMyOiBhbHBoYSA9PSAxOiBmaXJzdCByYW5kb20gbnVtYmVyIGxlc3MgdGhhbiAxZS03IHRvIHRoYXQgdGhlIGJvZHkKKyAgICAgICAgIyBvZiB0aGUgd2hpbGUgbG9vcCBleGVjdXRlcyBvbmNlLiBUaGVuIHJhbmRvbS5yYW5kb20oKSByZXR1cm5zIDAuNDUsCisgICAgICAgICMgd2hpY2ggY2F1c2VzIHdoaWxlIHRvIHN0b3AgbG9vcGluZyBhbmQgdGhlIGFsZ29yaXRobSB0byB0ZXJtaW5hdGUuCisgICAgICAgIHJhbmRvbV9tb2NrLnNpZGVfZWZmZWN0ID0gWzFlLTgsIDAuNDVdCisgICAgICAgIHJldHVybmVkX3ZhbHVlID0gcmFuZG9tLmdhbW1hdmFyaWF0ZSgxLjAsIDMuMTQpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwocmV0dXJuZWRfdmFsdWUsIDIuNTA3MzE0MTY2MTIzODAzKQorCisgICAgICAgICMgIzM6IDAgPCBhbHBoYSA8IDEuIFRoaXMgaXMgdGhlIG1vc3QgY29tcGxleCByZWdpb24gb2YgY29kZSB0byBjb3ZlciwKKyAgICAgICAgIyBhcyB0aGVyZSBhcmUgbXVsdGlwbGUgaWYtZWxzZSBzdGF0ZW1lbnRzLiBMZXQncyB0YWtlIGEgbG9vayBhdCB0aGUKKyAgICAgICAgIyBzb3VyY2UgY29kZSwgYW5kIGRldGVybWluZSB0aGUgdmFsdWVzIHRoYXQgd2UgbmVlZCBhY2NvcmRpbmdseToKKyAgICAgICAgIworICAgICAgICAjIHdoaWxlIDE6CisgICAgICAgICMgICAgIHUgPSByYW5kb20oKQorICAgICAgICAjICAgICBiID0gKF9lICsgYWxwaGEpL19lCisgICAgICAgICMgICAgIHAgPSBiKnUKKyAgICAgICAgIyAgICAgaWYgcCA8PSAxLjA6ICMgPD09PSAoQSkKKyAgICAgICAgIyAgICAgICAgIHggPSBwICoqICgxLjAvYWxwaGEpCisgICAgICAgICMgICAgIGVsc2U6ICMgPD09PSAoQikKKyAgICAgICAgIyAgICAgICAgIHggPSAtX2xvZygoYi1wKS9hbHBoYSkKKyAgICAgICAgIyAgICAgdTEgPSByYW5kb20oKQorICAgICAgICAjICAgICBpZiBwID4gMS4wOiAjIDw9PT0gKEMpCisgICAgICAgICMgICAgICAgICBpZiB1MSA8PSB4ICoqIChhbHBoYSAtIDEuMCk6ICMgPD09PSAoRCkKKyAgICAgICAgIyAgICAgICAgICAgICBicmVhaworICAgICAgICAjICAgICBlbGlmIHUxIDw9IF9leHAoLXgpOiAjIDw9PT0gKEUpCisgICAgICAgICMgICAgICAgICBicmVhaworICAgICAgICAjIHJldHVybiB4ICogYmV0YQorICAgICAgICAjCisgICAgICAgICMgRmlyc3QsIHdlIHdhbnQgKEEpIHRvIGJlIFRydWUuIEZvciB0aGF0IHdlIG5lZWQgdGhhdDoKKyAgICAgICAgIyBiKnJhbmRvbSgpIDw9IDEuMAorICAgICAgICAjIHIxID0gcmFuZG9tKCkgPD0gMS4wIC8gYgorICAgICAgICAjCisgICAgICAgICMgV2Ugbm93IGdldCB0byB0aGUgc2Vjb25kIGlmLWVsc2UgYnJhbmNoLCBhbmQgaGVyZSwgc2luY2UgcCA8PSAxLjAsCisgICAgICAgICMgKEMpIGlzIEZhbHNlIGFuZCB3ZSB0YWtlIHRoZSBlbGlmIGJyYW5jaCwgKEUpLiBGb3IgaXQgdG8gYmUgVHJ1ZSwKKyAgICAgICAgIyBzbyB0aGF0IHRoZSBicmVhayBpcyBleGVjdXRlZCwgd2UgbmVlZCB0aGF0OgorICAgICAgICAjIHIyID0gcmFuZG9tKCkgPD0gX2V4cCgteCkKKyAgICAgICAgIyByMiA8PSBfZXhwKC0ocCAqKiAoMS4wL2FscGhhKSkpCisgICAgICAgICMgcjIgPD0gX2V4cCgtKChiKnIxKSAqKiAoMS4wL2FscGhhKSkpCisKKyAgICAgICAgX2UgPSByYW5kb20uX2UKKyAgICAgICAgX2V4cCA9IHJhbmRvbS5fZXhwCisgICAgICAgIF9sb2cgPSByYW5kb20uX2xvZworICAgICAgICBhbHBoYSA9IDAuMzUKKyAgICAgICAgYmV0YSA9IDEuNDUKKyAgICAgICAgYiA9IChfZSArIGFscGhhKS9fZQorICAgICAgICBlcHNpbG9uID0gMC4wMQorCisgICAgICAgIHIxID0gMC44ODU5Mjk2NDQxNTY2ICMgMS4wIC8gYgorICAgICAgICByMiA9IDAuMzY3ODc5NDQxMTcxNCAjIF9leHAoLSgoYipyMSkgKiogKDEuMC9hbHBoYSkpKQorCisgICAgICAgICMgVGhlc2UgZm91ciAicmFuZG9tIiB2YWx1ZXMgcmVzdWx0IGluIHRoZSBmb2xsb3dpbmcgdHJhY2U6CisgICAgICAgICMgKEEpIFRydWUsIChFKSBGYWxzZSAtLT4gW25leHQgaXRlcmF0aW9uIG9mIHdoaWxlXQorICAgICAgICAjIChBKSBUcnVlLCAoRSkgVHJ1ZSAtLT4gW3doaWxlIGxvb3AgYnJlYWtzXQorICAgICAgICByYW5kb21fbW9jay5zaWRlX2VmZmVjdCA9IFtyMSwgcjIgKyBlcHNpbG9uLCByMSwgcjJdCisgICAgICAgIHJldHVybmVkX3ZhbHVlID0gcmFuZG9tLmdhbW1hdmFyaWF0ZShhbHBoYSwgYmV0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChyZXR1cm5lZF92YWx1ZSwgMS40NDk5OTk5OTk5OTk3NTQ0KQorCisgICAgICAgICMgTGV0J3Mgbm93IG1ha2UgKEEpIGJlIEZhbHNlLiBJZiB0aGlzIGlzIHRoZSBjYXNlLCB3aGVuIHdlIGdldCB0byB0aGUKKyAgICAgICAgIyBzZWNvbmQgaWYtZWxzZSAncCcgaXMgZ3JlYXRlciB0aGFuIDEsIHNvIChDKSBldmFsdWF0ZXMgdG8gVHJ1ZS4gV2UKKyAgICAgICAgIyBub3cgZW5jb3VudGVyIGEgc2Vjb25kIGlmIHN0YXRlbWVudCwgKEQpLCB3aGljaCBpbiBvcmRlciB0byBleGVjdXRlCisgICAgICAgICMgbXVzdCBzYXRpc2Z5IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uOgorICAgICAgICAjIHIyIDw9IHggKiogKGFscGhhIC0gMS4wKQorICAgICAgICAjIHIyIDw9ICgtX2xvZygoYi1wKS9hbHBoYSkpICoqIChhbHBoYSAtIDEuMCkKKyAgICAgICAgIyByMiA8PSAoLV9sb2coKGItKGIqcjEpKS9hbHBoYSkpICoqIChhbHBoYSAtIDEuMCkKKyAgICAgICAgcjEgPSAwLjg5NTkyOTY0NDE1NjYgIyAoMS4wIC8gYikgKyBlcHNpbG9uIC0tIHNvIHRoYXQgKEEpIGlzIEZhbHNlCisgICAgICAgIHIyID0gMC45NDQ1NDAwNDA4ODk4MTQxCisKKyAgICAgICAgIyBBbmQgdGhlc2UgZm91ciB2YWx1ZXMgcmVzdWx0IGluIHRoZSBmb2xsb3dpbmcgdHJhY2U6CisgICAgICAgICMgKEIpIGFuZCAoQykgVHJ1ZSwgKEQpIEZhbHNlIC0tPiBbbmV4dCBpdGVyYXRpb24gb2Ygd2hpbGVdCisgICAgICAgICMgKEIpIGFuZCAoQykgVHJ1ZSwgKEQpIFRydWUgW3doaWxlIGxvb3AgYnJlYWtzXQorICAgICAgICByYW5kb21fbW9jay5zaWRlX2VmZmVjdCA9IFtyMSwgcjIgKyBlcHNpbG9uLCByMSwgcjJdCisgICAgICAgIHJldHVybmVkX3ZhbHVlID0gcmFuZG9tLmdhbW1hdmFyaWF0ZShhbHBoYSwgYmV0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChyZXR1cm5lZF92YWx1ZSwgMS41ODMwMzQ5NTYxNzYwNzgxKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ3JhbmRvbS5SYW5kb20uZ2FtbWF2YXJpYXRlJykKKyAgICBkZWYgdGVzdF9iZXRhdmFyaWF0ZV9yZXR1cm5femVybyhzZWxmLCBnYW1tYXZhcmlhdGVfbW9jayk6CisgICAgICAgICMgYmV0YXZhcmlhdGUoKSByZXR1cm5zIHplcm8gd2hlbiB0aGUgR2FtbWEgZGlzdHJpYnV0aW9uCisgICAgICAgICMgdGhhdCBpdCB1c2VzIGludGVybmFsbHkgcmV0dXJucyB0aGlzIHNhbWUgdmFsdWUuCisgICAgICAgIGdhbW1hdmFyaWF0ZV9tb2NrLnJldHVybl92YWx1ZSA9IDAuMAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAuMCwgcmFuZG9tLmJldGF2YXJpYXRlKDIuNzE4MjgsIDMuMTQxNTkpKQogCiBjbGFzcyBUZXN0TW9kdWxlKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdE1hZ2ljQ29uc3RhbnRzKHNlbGYpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9yYW5nZS5weSBiL0xpYi90ZXN0L3Rlc3RfcmFuZ2UucHkKaW5kZXggYWFiOThhYi4uMmRiY2ViYyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9yYW5nZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3JhbmdlLnB5CkBAIC0zMTMsNyArMzEzLDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByYW5nZSwgSU4oKSkKIAogICAgICAgICAjIFRlc3QgdXNlIG9mIHVzZXItZGVmaW5lZCBjbGFzc2VzIGluIHNsaWNlIGluZGljZXMuCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChyYW5nZSgxMClbOkkoNSldKSwgbGlzdChyYW5nZSg1KSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmFuZ2UoMTApWzpJKDUpXSwgcmFuZ2UoNSkpCiAKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IpOgogICAgICAgICAgICAgcmFuZ2UoMCwgMTApWzpJWCgpXQpAQCAtMzUzLDkgKzM1MywxMCBAQAogICAgICAgICAgICAgICAgICAgICAgKDEzLCAyMSwgMyksICgtMiwgMiwgMiksICgyKio2NSwgMioqNjUrMildCiAgICAgICAgIGZvciBwcm90byBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgogICAgICAgICAgICAgZm9yIHQgaW4gdGVzdGNhc2VzOgotICAgICAgICAgICAgICAgIHIgPSByYW5nZSgqdCkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QocGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhyLCBwcm90bykpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QocikpCisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QocHJvdG89cHJvdG8sIHRlc3Q9dCk6CisgICAgICAgICAgICAgICAgICAgIHIgPSByYW5nZSgqdCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMociwgcHJvdG8pKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdChyKSkKIAogICAgIGRlZiB0ZXN0X2l0ZXJhdG9yX3BpY2tsaW5nKHNlbGYpOgogICAgICAgICB0ZXN0Y2FzZXMgPSBbKDEzLCksICgwLCAxMSksICgtMjIsIDEwKSwgKDIwLCAzLCAtMSksCkBAIC0zNjUsNyArMzY2LDcgQEAKICAgICAgICAgICAgICAgICBpdCA9IGl0b3JnID0gaXRlcihyYW5nZSgqdCkpCiAgICAgICAgICAgICAgICAgZGF0YSA9IGxpc3QocmFuZ2UoKnQpKQogCi0gICAgICAgICAgICAgICAgZCA9IHBpY2tsZS5kdW1wcyhpdCkKKyAgICAgICAgICAgICAgICBkID0gcGlja2xlLmR1bXBzKGl0LCBwcm90bykKICAgICAgICAgICAgICAgICBpdCA9IHBpY2tsZS5sb2FkcyhkKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShpdG9yZyksIHR5cGUoaXQpKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpdCksIGRhdGEpCkBAIC0zNzUsMzMgKzM3NiwzNSBAQAogICAgICAgICAgICAgICAgICAgICBuZXh0KGl0KQogICAgICAgICAgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgogICAgICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgICAgIGQgPSBwaWNrbGUuZHVtcHMoaXQpCisgICAgICAgICAgICAgICAgZCA9IHBpY2tsZS5kdW1wcyhpdCwgcHJvdG8pCiAgICAgICAgICAgICAgICAgaXQgPSBwaWNrbGUubG9hZHMoZCkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoaXQpLCBkYXRhWzE6XSkKIAogICAgIGRlZiB0ZXN0X2V4aGF1c3RlZF9pdGVyYXRvcl9waWNrbGluZyhzZWxmKToKLSAgICAgICAgciA9IHJhbmdlKDIqKjY1LCAyKio2NSsyKQotICAgICAgICBpID0gaXRlcihyKQotICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgciA9IG5leHQoaSkKLSAgICAgICAgICAgIGlmIHIgPT0gMioqNjUrMToKLSAgICAgICAgICAgICAgICBicmVhawotICAgICAgICBkID0gcGlja2xlLmR1bXBzKGkpCi0gICAgICAgIGkyID0gcGlja2xlLmxvYWRzKGQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpKSwgW10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpMiksIFtdKQorICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIHIgPSByYW5nZSgyKio2NSwgMioqNjUrMikKKyAgICAgICAgICAgIGkgPSBpdGVyKHIpCisgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgIHIgPSBuZXh0KGkpCisgICAgICAgICAgICAgICAgaWYgciA9PSAyKio2NSsxOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZCA9IHBpY2tsZS5kdW1wcyhpLCBwcm90bykKKyAgICAgICAgICAgIGkyID0gcGlja2xlLmxvYWRzKGQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoaSksIFtdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGkyKSwgW10pCiAKICAgICBkZWYgdGVzdF9sYXJnZV9leGhhdXN0ZWRfaXRlcmF0b3JfcGlja2xpbmcoc2VsZik6Ci0gICAgICAgIHIgPSByYW5nZSgyMCkKLSAgICAgICAgaSA9IGl0ZXIocikKLSAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgIHIgPSBuZXh0KGkpCi0gICAgICAgICAgICBpZiByID09IDE5OgotICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgIGQgPSBwaWNrbGUuZHVtcHMoaSkKLSAgICAgICAgaTIgPSBwaWNrbGUubG9hZHMoZCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGkpLCBbXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGkyKSwgW10pCisgICAgICAgIGZvciBwcm90byBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgciA9IHJhbmdlKDIwKQorICAgICAgICAgICAgaSA9IGl0ZXIocikKKyAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgciA9IG5leHQoaSkKKyAgICAgICAgICAgICAgICBpZiByID09IDE5OgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZCA9IHBpY2tsZS5kdW1wcyhpLCBwcm90bykKKyAgICAgICAgICAgIGkyID0gcGlja2xlLmxvYWRzKGQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoaSksIFtdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGkyKSwgW10pCiAKICAgICBkZWYgdGVzdF9vZGRfYnVnKHNlbGYpOgogICAgICAgICAjIFRoaXMgdXNlZCB0byByYWlzZSBhICJTeXN0ZW1FcnJvcjogTlVMTCByZXN1bHQgd2l0aG91dCBlcnJvciIKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcmUucHkgYi9MaWIvdGVzdC90ZXN0X3JlLnB5CmluZGV4IDU0NjZiMjAuLjczNDhhZjMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcmUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9yZS5weQpAQCAtMSwxMiArMSwxNSBAQAogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHZlcmJvc2UsIHJ1bl91bml0dGVzdCwgZ2NfY29sbGVjdCwgYmlnbWVtdGVzdCwgXzJHLCBcCiAgICAgICAgIGNweXRob25fb25seSwgY2FwdHVyZWRfc3Rkb3V0CiBpbXBvcnQgaW8KK2ltcG9ydCBsb2NhbGUKIGltcG9ydCByZQogZnJvbSByZSBpbXBvcnQgU2Nhbm5lcgoraW1wb3J0IHNyZV9jb21waWxlCiBpbXBvcnQgc3JlX2NvbnN0YW50cwogaW1wb3J0IHN5cwogaW1wb3J0IHN0cmluZwogaW1wb3J0IHRyYWNlYmFjaworaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHdlYWtyZWYgaW1wb3J0IHByb3h5CiAKICMgTWlzYyB0ZXN0cyBmcm9tIFRpbSBQZXRlcnMnIHJlLmRvYwpAQCAtMTUsMTAgKzE4LDI2IEBACiAjIHdoYXQgeW91J3JlIGRvaW5nLiBTb21lIG9mIHRoZXNlIHRlc3RzIHdlcmUgY2FyZWZ1bGx5IG1vZGVsZWQgdG8KICMgY292ZXIgbW9zdCBvZiB0aGUgY29kZS4KIAotaW1wb3J0IHVuaXR0ZXN0CitjbGFzcyBTKHN0cik6CisgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGluZGV4KToKKyAgICAgICAgcmV0dXJuIFMoc3VwZXIoKS5fX2dldGl0ZW1fXyhpbmRleCkpCisKK2NsYXNzIEIoYnl0ZXMpOgorICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBpbmRleCk6CisgICAgICAgIHJldHVybiBCKHN1cGVyKCkuX19nZXRpdGVtX18oaW5kZXgpKQogCiBjbGFzcyBSZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAorICAgIGRlZiBhc3NlcnRUeXBlZEVxdWFsKHNlbGYsIGFjdHVhbCwgZXhwZWN0LCBtc2c9Tm9uZSk6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0dWFsLCBleHBlY3QsIG1zZykKKyAgICAgICAgZGVmIHJlY3Vyc2UoYWN0dWFsLCBleHBlY3QpOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShleHBlY3QsICh0dXBsZSwgbGlzdCkpOgorICAgICAgICAgICAgICAgIGZvciB4LCB5IGluIHppcChhY3R1YWwsIGV4cGVjdCk6CisgICAgICAgICAgICAgICAgICAgIHJlY3Vyc2UoeCwgeSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKGFjdHVhbCksIHR5cGUoZXhwZWN0KSwgbXNnKQorICAgICAgICByZWN1cnNlKGFjdHVhbCwgZXhwZWN0KQorCiAgICAgZGVmIHRlc3Rfa2VlcF9idWZmZXIoc2VsZik6CiAgICAgICAgICMgU2VlIGJ1ZyAxNDIxMgogICAgICAgICBiID0gYnl0ZWFycmF5KGIneCcpCkBAIC00MSwxOCArNjAsMjcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zZWFyY2goJ3gqJywgJ2F4eCcpLnNwYW4oKSwgKDAsIDApKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNlYXJjaCgneCsnLCAnYXh4Jykuc3BhbigwKSwgKDEsIDMpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNlYXJjaCgneCsnLCAnYXh4Jykuc3BhbigpLCAoMSwgMykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc2VhcmNoKCd4JywgJ2FhYScpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShyZS5zZWFyY2goJ3gnLCAnYWFhJykpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goJ2EqJywgJ3h4eCcpLnNwYW4oMCksICgwLCAwKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgnYSonLCAneHh4Jykuc3BhbigpLCAoMCwgMCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goJ3gqJywgJ3h4eGEnKS5zcGFuKDApLCAoMCwgMykpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goJ3gqJywgJ3h4eGEnKS5zcGFuKCksICgwLCAzKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgnYSsnLCAneHh4JyksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlLm1hdGNoKCdhKycsICd4eHgnKSkKIAogICAgIGRlZiBidW1wX251bShzZWxmLCBtYXRjaG9iaik6CiAgICAgICAgIGludF92YWx1ZSA9IGludChtYXRjaG9iai5ncm91cCgwKSkKICAgICAgICAgcmV0dXJuIHN0cihpbnRfdmFsdWUgKyAxKQogCiAgICAgZGVmIHRlc3RfYmFzaWNfcmVfc3ViKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWwocmUuc3ViKCd5JywgJ2EnLCAneHl6JyksICd4YXonKQorICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWwocmUuc3ViKCd5JywgUygnYScpLCBTKCd4eXonKSksICd4YXonKQorICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWwocmUuc3ViKGIneScsIGInYScsIGIneHl6JyksIGIneGF6JykKKyAgICAgICAgc2VsZi5hc3NlcnRUeXBlZEVxdWFsKHJlLnN1YihiJ3knLCBCKGInYScpLCBCKGIneHl6JykpLCBiJ3hheicpCisgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbChyZS5zdWIoYid5JywgYnl0ZWFycmF5KGInYScpLCBieXRlYXJyYXkoYid4eXonKSksIGIneGF6JykKKyAgICAgICAgc2VsZi5hc3NlcnRUeXBlZEVxdWFsKHJlLnN1YihiJ3knLCBtZW1vcnl2aWV3KGInYScpLCBtZW1vcnl2aWV3KGIneHl6JykpLCBiJ3hheicpCisgICAgICAgIGZvciB5IGluICgiXHhlMCIsICJcdTA0MzAiLCAiXFUwMDAxZDQ5YyIpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zdWIoeSwgJ2EnLCAneCVzeicgJSB5KSwgJ3hheicpCisKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zdWIoIig/aSliKyIsICJ4IiwgImJiYmIgQkJCQiIpLCAneCB4JykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zdWIocidcZCsnLCBzZWxmLmJ1bXBfbnVtLCAnMDguMiAtMiAyM3g5OXknKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAnOS4zIC0zIDI0eDEwMHknKQpAQCAtMjEwLDEwICsyMzgsMjkgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zdWJuKCJiKiIsICJ4IiwgInh5eiIsIDIpLCAoJ3h4eHl6JywgMikpCiAKICAgICBkZWYgdGVzdF9yZV9zcGxpdChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zcGxpdCgiOiIsICI6YTpiOjpjIiksIFsnJywgJ2EnLCAnYicsICcnLCAnYyddKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNwbGl0KCI6KiIsICI6YTpiOjpjIiksIFsnJywgJ2EnLCAnYicsICdjJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc3BsaXQoIig6KikiLCAiOmE6Yjo6YyIpLAotICAgICAgICAgICAgICAgICAgICAgICAgIFsnJywgJzonLCAnYScsICc6JywgJ2InLCAnOjonLCAnYyddKQorICAgICAgICBmb3Igc3RyaW5nIGluICI6YTpiOjpjIiwgUygiOmE6Yjo6YyIpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUeXBlZEVxdWFsKHJlLnNwbGl0KCI6Iiwgc3RyaW5nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJycsICdhJywgJ2InLCAnJywgJ2MnXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbChyZS5zcGxpdCgiOioiLCBzdHJpbmcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnJywgJ2EnLCAnYicsICdjJ10pCisgICAgICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWwocmUuc3BsaXQoIig6KikiLCBzdHJpbmcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnJywgJzonLCAnYScsICc6JywgJ2InLCAnOjonLCAnYyddKQorICAgICAgICBmb3Igc3RyaW5nIGluIChiIjphOmI6OmMiLCBCKGIiOmE6Yjo6YyIpLCBieXRlYXJyYXkoYiI6YTpiOjpjIiksCisgICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeXZpZXcoYiI6YTpiOjpjIikpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUeXBlZEVxdWFsKHJlLnNwbGl0KGIiOiIsIHN0cmluZyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2InJywgYidhJywgYidiJywgYicnLCBiJ2MnXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbChyZS5zcGxpdChiIjoqIiwgc3RyaW5nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYicnLCBiJ2EnLCBiJ2InLCBiJ2MnXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbChyZS5zcGxpdChiIig6KikiLCBzdHJpbmcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtiJycsIGInOicsIGInYScsIGInOicsIGInYicsIGInOjonLCBiJ2MnXSkKKyAgICAgICAgZm9yIGEsIGIsIGMgaW4gKCJceGUwXHhkZlx4ZTciLCAiXHUwNDMwXHUwNDMxXHUwNDMyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJcVTAwMDFkNDljXFUwMDAxZDQ5ZVxVMDAwMWQ0YjUiKToKKyAgICAgICAgICAgIHN0cmluZyA9ICI6JXM6JXM6OiVzIiAlIChhLCBiLCBjKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zcGxpdCgiOiIsIHN0cmluZyksIFsnJywgYSwgYiwgJycsIGNdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zcGxpdCgiOioiLCBzdHJpbmcpLCBbJycsIGEsIGIsIGNdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zcGxpdCgiKDoqKSIsIHN0cmluZyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnJywgJzonLCBhLCAnOicsIGIsICc6OicsIGNdKQorCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc3BsaXQoIig/OjoqKSIsICI6YTpiOjpjIiksIFsnJywgJ2EnLCAnYicsICdjJ10pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc3BsaXQoIig6KSoiLCAiOmE6Yjo6YyIpLAogICAgICAgICAgICAgICAgICAgICAgICAgIFsnJywgJzonLCAnYScsICc6JywgJ2InLCAnOicsICdjJ10pCkBAIC0yMzUsMjIgKzI4Miw1MyBAQAogCiAgICAgZGVmIHRlc3RfcmVfZmluZGFsbChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5maW5kYWxsKCI6KyIsICJhYmMiKSwgW10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuZmluZGFsbCgiOisiLCAiYTpiOjpjOjo6ZCIpLCBbIjoiLCAiOjoiLCAiOjo6Il0pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuZmluZGFsbCgiKDorKSIsICJhOmI6OmM6OjpkIiksIFsiOiIsICI6OiIsICI6OjoiXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5maW5kYWxsKCIoOikoOiopIiwgImE6Yjo6Yzo6OmQiKSwgWygiOiIsICIiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiOiIsICI6IiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIjoiLCAiOjoiKV0pCisgICAgICAgIGZvciBzdHJpbmcgaW4gImE6Yjo6Yzo6OmQiLCBTKCJhOmI6OmM6OjpkIik6CisgICAgICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWwocmUuZmluZGFsbCgiOisiLCBzdHJpbmcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiOiIsICI6OiIsICI6OjoiXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbChyZS5maW5kYWxsKCIoOispIiwgc3RyaW5nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbIjoiLCAiOjoiLCAiOjo6Il0pCisgICAgICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWwocmUuZmluZGFsbCgiKDopKDoqKSIsIHN0cmluZyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWygiOiIsICIiKSwgKCI6IiwgIjoiKSwgKCI6IiwgIjo6IildKQorICAgICAgICBmb3Igc3RyaW5nIGluIChiImE6Yjo6Yzo6OmQiLCBCKGIiYTpiOjpjOjo6ZCIpLCBieXRlYXJyYXkoYiJhOmI6OmM6OjpkIiksCisgICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeXZpZXcoYiJhOmI6OmM6OjpkIikpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUeXBlZEVxdWFsKHJlLmZpbmRhbGwoYiI6KyIsIHN0cmluZyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2IiOiIsIGIiOjoiLCBiIjo6OiJdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUeXBlZEVxdWFsKHJlLmZpbmRhbGwoYiIoOispIiwgc3RyaW5nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYiI6IiwgYiI6OiIsIGIiOjo6Il0pCisgICAgICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWwocmUuZmluZGFsbChiIig6KSg6KikiLCBzdHJpbmcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsoYiI6IiwgYiIiKSwgKGIiOiIsIGIiOiIpLCAoYiI6IiwgYiI6OiIpXSkKKyAgICAgICAgZm9yIHggaW4gKCJceGUwIiwgIlx1MDQzMCIsICJcVTAwMDFkNDljIik6CisgICAgICAgICAgICB4eCA9IHggKiAyCisgICAgICAgICAgICB4eHggPSB4ICogMworICAgICAgICAgICAgc3RyaW5nID0gImElc2Ilc2Mlc2QiICUgKHgsIHh4LCB4eHgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLmZpbmRhbGwoIiVzKyIgJSB4LCBzdHJpbmcpLCBbeCwgeHgsIHh4eF0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLmZpbmRhbGwoIiglcyspIiAlIHgsIHN0cmluZyksIFt4LCB4eCwgeHh4XSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuZmluZGFsbCgiKCVzKSglcyopIiAlICh4LCB4KSwgc3RyaW5nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyh4LCAiIiksICh4LCB4KSwgKHgsIHh4KV0pCiAKICAgICBkZWYgdGVzdF9idWdfMTE3NjEyKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLmZpbmRhbGwociIoYXwoYikpIiwgImFiYSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgIFsoImEiLCAiIiksKCJiIiwgImIiKSwoImEiLCAiIildKQogCiAgICAgZGVmIHRlc3RfcmVfbWF0Y2goc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goJ2EnLCAnYScpLmdyb3VwcygpLCAoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgnKGEpJywgJ2EnKS5ncm91cHMoKSwgKCdhJywpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKHInKGEpJywgJ2EnKS5ncm91cCgwKSwgJ2EnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKHInKGEpJywgJ2EnKS5ncm91cCgxKSwgJ2EnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKHInKGEpJywgJ2EnKS5ncm91cCgxLCAxKSwgKCdhJywgJ2EnKSkKKyAgICAgICAgZm9yIHN0cmluZyBpbiAnYScsIFMoJ2EnKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goJ2EnLCBzdHJpbmcpLmdyb3VwcygpLCAoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goJyhhKScsIHN0cmluZykuZ3JvdXBzKCksICgnYScsKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goJyhhKScsIHN0cmluZykuZ3JvdXAoMCksICdhJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goJyhhKScsIHN0cmluZykuZ3JvdXAoMSksICdhJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goJyhhKScsIHN0cmluZykuZ3JvdXAoMSwgMSksICgnYScsICdhJykpCisgICAgICAgIGZvciBzdHJpbmcgaW4gYidhJywgQihiJ2EnKSwgYnl0ZWFycmF5KGInYScpLCBtZW1vcnl2aWV3KGInYScpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaChiJ2EnLCBzdHJpbmcpLmdyb3VwcygpLCAoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goYicoYSknLCBzdHJpbmcpLmdyb3VwcygpLCAoYidhJywpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaChiJyhhKScsIHN0cmluZykuZ3JvdXAoMCksIGInYScpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKGInKGEpJywgc3RyaW5nKS5ncm91cCgxKSwgYidhJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goYicoYSknLCBzdHJpbmcpLmdyb3VwKDEsIDEpLCAoYidhJywgYidhJykpCisgICAgICAgIGZvciBhIGluICgiXHhlMCIsICJcdTA0MzAiLCAiXFUwMDAxZDQ5YyIpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaChhLCBhKS5ncm91cHMoKSwgKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCcoJXMpJyAlIGEsIGEpLmdyb3VwcygpLCAoYSwpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgnKCVzKScgJSBhLCBhKS5ncm91cCgwKSwgYSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goJyglcyknICUgYSwgYSkuZ3JvdXAoMSksIGEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCcoJXMpJyAlIGEsIGEpLmdyb3VwKDEsIDEpLCAoYSwgYSkpCiAKICAgICAgICAgcGF0ID0gcmUuY29tcGlsZSgnKChhKXwoYikpKGMpPycpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGF0Lm1hdGNoKCdhJykuZ3JvdXBzKCksICgnYScsICdhJywgTm9uZSwgTm9uZSkpCkBAIC0yNzIsMTMgKzM1MCw0MyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIChOb25lLCAnYicsIE5vbmUpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhdC5tYXRjaCgnYWMnKS5ncm91cCgxLCAnYjInLCAzKSwgKCdhJywgTm9uZSwgJ2MnKSkKIAorICAgIGRlZiB0ZXN0X3JlX2Z1bGxtYXRjaChzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAxNjIwMzogUHJvcG9zYWw6IGFkZCByZS5mdWxsbWF0Y2goKSBtZXRob2QuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuZnVsbG1hdGNoKHIiYSIsICJhIikuc3BhbigpLCAoMCwgMSkpCisgICAgICAgIGZvciBzdHJpbmcgaW4gImFiIiwgUygiYWIiKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuZnVsbG1hdGNoKHIiYXxhYiIsIHN0cmluZykuc3BhbigpLCAoMCwgMikpCisgICAgICAgIGZvciBzdHJpbmcgaW4gYiJhYiIsIEIoYiJhYiIpLCBieXRlYXJyYXkoYiJhYiIpLCBtZW1vcnl2aWV3KGIiYWIiKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuZnVsbG1hdGNoKGJyImF8YWIiLCBzdHJpbmcpLnNwYW4oKSwgKDAsIDIpKQorICAgICAgICBmb3IgYSwgYiBpbiAiXHhlMFx4ZGYiLCAiXHUwNDMwXHUwNDMxIiwgIlxVMDAwMWQ0OWNcVTAwMDFkNDllIjoKKyAgICAgICAgICAgIHIgPSByIiVzfCVzIiAlIChhLCBhICsgYikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuZnVsbG1hdGNoKHIsIGEgKyBiKS5zcGFuKCksICgwLCAyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5mdWxsbWF0Y2gociIuKj8kIiwgImFiYyIpLnNwYW4oKSwgKDAsIDMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLmZ1bGxtYXRjaChyIi4qPyIsICJhYmMiKS5zcGFuKCksICgwLCAzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5mdWxsbWF0Y2gociJhLio/YiIsICJhYiIpLnNwYW4oKSwgKDAsIDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLmZ1bGxtYXRjaChyImEuKj9iIiwgImFiYiIpLnNwYW4oKSwgKDAsIDMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLmZ1bGxtYXRjaChyImEuKj9iIiwgImF4eGIiKS5zcGFuKCksICgwLCA0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmUuZnVsbG1hdGNoKHIiYSsiLCAiYWIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmUuZnVsbG1hdGNoKHIiYWJjJCIsICJhYmNcbiIpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShyZS5mdWxsbWF0Y2gociJhYmNcWiIsICJhYmNcbiIpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShyZS5mdWxsbWF0Y2gociIoP20pYWJjJCIsICJhYmNcbiIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLmZ1bGxtYXRjaChyImFiKD89YyljZCIsICJhYmNkIikuc3BhbigpLCAoMCwgNCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuZnVsbG1hdGNoKHIiYWIoPzw9YiljZCIsICJhYmNkIikuc3BhbigpLCAoMCwgNCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuZnVsbG1hdGNoKHIiKD89YXxhYilhYiIsICJhYiIpLnNwYW4oKSwgKDAsIDIpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICByZS5jb21waWxlKHIiYmMiKS5mdWxsbWF0Y2goImFiY2QiLCBwb3M9MSwgZW5kcG9zPTMpLnNwYW4oKSwgKDEsIDMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgcmUuY29tcGlsZShyIi4qPyQiKS5mdWxsbWF0Y2goImFiY2QiLCBwb3M9MSwgZW5kcG9zPTMpLnNwYW4oKSwgKDEsIDMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgcmUuY29tcGlsZShyIi4qPyIpLmZ1bGxtYXRjaCgiYWJjZCIsIHBvcz0xLCBlbmRwb3M9Mykuc3BhbigpLCAoMSwgMykpCisKICAgICBkZWYgdGVzdF9yZV9ncm91cHJlZl9leGlzdHMoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goJ14oXCgpPyhbXigpXSspKD8oMSlcKSkkJywgJyhhKScpLmdyb3VwcygpLAogICAgICAgICAgICAgICAgICAgICAgICAgICgnKCcsICdhJykpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goJ14oXCgpPyhbXigpXSspKD8oMSlcKSkkJywgJ2EnKS5ncm91cHMoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAoTm9uZSwgJ2EnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgnXihcKCk/KFteKCldKykoPygxKVwpKSQnLCAnYSknKSwgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgnXihcKCk/KFteKCldKykoPygxKVwpKSQnLCAnKGEnKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmUubWF0Y2goJ14oXCgpPyhbXigpXSspKD8oMSlcKSkkJywgJ2EpJykpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlLm1hdGNoKCdeKFwoKT8oW14oKV0rKSg/KDEpXCkpJCcsICcoYScpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCdeKD86KGEpfGMpKCg/KDEpYnxkKSkkJywgJ2FiJykuZ3JvdXBzKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgKCdhJywgJ2InKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgnXig/OihhKXxjKSgoPygxKWJ8ZCkpJCcsICdjZCcpLmdyb3VwcygpLApAQCAtMjk0LDggKzQwMiw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgKCdhJywgJ2InLCAnYycpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAubWF0Y2goJ2FkJykuZ3JvdXBzKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgKCdhJywgTm9uZSwgJ2QnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLm1hdGNoKCdhYmQnKSwgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLm1hdGNoKCdhYycpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShwLm1hdGNoKCdhYmQnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocC5tYXRjaCgnYWMnKSkKIAogCiAgICAgZGVmIHRlc3RfcmVfZ3JvdXByZWYoc2VsZik6CkBAIC0zMDMsOCArNDExLDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAoJ3wnLCAnYScpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKHInXihcfCk/KFteKCldKylcMT8kJywgJ2EnKS5ncm91cHMoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAoTm9uZSwgJ2EnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaChyJ14oXHwpPyhbXigpXSspXDEkJywgJ2F8JyksIE5vbmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2gocideKFx8KT8oW14oKV0rKVwxJCcsICd8YScpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShyZS5tYXRjaChyJ14oXHwpPyhbXigpXSspXDEkJywgJ2F8JykpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlLm1hdGNoKHInXihcfCk/KFteKCldKylcMSQnLCAnfGEnKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaChyJ14oPzooYSl8YykoXDEpJCcsICdhYScpLmdyb3VwcygpLAogICAgICAgICAgICAgICAgICAgICAgICAgICgnYScsICdhJykpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2gocideKD86KGEpfGMpKFwxKT8kJywgJ2MnKS5ncm91cHMoKSwKQEAgLTMyMiwxMCArNDMwLDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgInNlY29uZCBmaXJzdCBzZWNvbmQgZmlyc3QiKQogCiAgICAgZGVmIHRlc3RfcmVwZWF0X21pbm1heChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgiXihcdyl7MX0kIiwgImFiYyIpLCBOb25lKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCJeKFx3KXsxfT8kIiwgImFiYyIpLCBOb25lKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCJeKFx3KXsxLDJ9JCIsICJhYmMiKSwgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgiXihcdyl7MSwyfT8kIiwgImFiYyIpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShyZS5tYXRjaCgiXihcdyl7MX0kIiwgImFiYyIpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShyZS5tYXRjaCgiXihcdyl7MX0/JCIsICJhYmMiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmUubWF0Y2goIl4oXHcpezEsMn0kIiwgImFiYyIpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShyZS5tYXRjaCgiXihcdyl7MSwyfT8kIiwgImFiYyIpKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goIl4oXHcpezN9JCIsICJhYmMiKS5ncm91cCgxKSwgImMiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCJeKFx3KXsxLDN9JCIsICJhYmMiKS5ncm91cCgxKSwgImMiKQpAQCAtMzM2LDIyICs0NDQsMjIgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgiXihcdyl7MSw0fT8kIiwgImFiYyIpLmdyb3VwKDEpLCAiYyIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goIl4oXHcpezMsNH0/JCIsICJhYmMiKS5ncm91cCgxKSwgImMiKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goIl54ezF9JCIsICJ4eHgiKSwgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgiXnh7MX0/JCIsICJ4eHgiKSwgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgiXnh7MSwyfSQiLCAieHh4IiksIE5vbmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goIl54ezEsMn0/JCIsICJ4eHgiKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmUubWF0Y2goIl54ezF9JCIsICJ4eHgiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmUubWF0Y2goIl54ezF9PyQiLCAieHh4IikpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlLm1hdGNoKCJeeHsxLDJ9JCIsICJ4eHgiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmUubWF0Y2goIl54ezEsMn0/JCIsICJ4eHgiKSkKIAotICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHJlLm1hdGNoKCJeeHszfSQiLCAieHh4IiksIE5vbmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocmUubWF0Y2goIl54ezEsM30kIiwgInh4eCIpLCBOb25lKQotICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHJlLm1hdGNoKCJeeHsxLDR9JCIsICJ4eHgiKSwgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChyZS5tYXRjaCgiXnh7Myw0fT8kIiwgInh4eCIpLCBOb25lKQotICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHJlLm1hdGNoKCJeeHszfT8kIiwgInh4eCIpLCBOb25lKQotICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHJlLm1hdGNoKCJeeHsxLDN9PyQiLCAieHh4IiksIE5vbmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocmUubWF0Y2goIl54ezEsNH0/JCIsICJ4eHgiKSwgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChyZS5tYXRjaCgiXnh7Myw0fT8kIiwgInh4eCIpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2goIl54ezN9JCIsICJ4eHgiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKCJeeHsxLDN9JCIsICJ4eHgiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKCJeeHsxLDR9JCIsICJ4eHgiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKCJeeHszLDR9PyQiLCAieHh4IikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaCgiXnh7M30/JCIsICJ4eHgiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKCJeeHsxLDN9PyQiLCAieHh4IikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaCgiXnh7MSw0fT8kIiwgInh4eCIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2goIl54ezMsNH0/JCIsICJ4eHgiKSkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCJeeHt9JCIsICJ4eHgiKSwgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChyZS5tYXRjaCgiXnh7fSQiLCAieHt9IiksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlLm1hdGNoKCJeeHt9JCIsICJ4eHgiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKCJeeHt9JCIsICJ4e30iKSkKIAogICAgIGRlZiB0ZXN0X2dldGF0dHIoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuY29tcGlsZSgiKD9pKShhKShiKSIpLnBhdHRlcm4sICIoP2kpKGEpKGIpIikKQEAgLTM2NSw3ICs0NzMsNyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCIoYSkiLCAiYSIpLmVuZHBvcywgMSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgiKGEpIiwgImEiKS5zdHJpbmcsICJhIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgiKGEpIiwgImEiKS5yZWdzLCAoKDAsIDEpLCAoMCwgMSkpKQotICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHJlLm1hdGNoKCIoYSkiLCAiYSIpLnJlLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2goIihhKSIsICJhIikucmUpCiAKICAgICBkZWYgdGVzdF9zcGVjaWFsX2VzY2FwZXMoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc2VhcmNoKHIiXGIoYi4pXGIiLApAQCAtMzczLDI5ICs0ODEsMzcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zZWFyY2gociJcQihiLilcQiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYmMgYmNkIGJjIGFieGQiKS5ncm91cCgxKSwgImJ4IikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zZWFyY2gociJcYihiLilcYiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYmNkIGFiYyBiY2QgYngiLCByZS5BU0NJSSkuZ3JvdXAoMSksICJieCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc2VhcmNoKHIiXEIoYi4pXEIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWJjIGJjZCBiYyBhYnhkIiwgcmUuQVNDSUkpLmdyb3VwKDEpLCAiYngiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNlYXJjaChyIlxiKGIuKVxiIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFiY2QgYWJjIGJjZCBieCIsIHJlLkxPQ0FMRSkuZ3JvdXAoMSksICJieCIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc2VhcmNoKHIiXEIoYi4pXEIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWJjIGJjZCBiYyBhYnhkIiwgcmUuTE9DQUxFKS5ncm91cCgxKSwgImJ4IikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zZWFyY2gociJcYihiLilcYiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYmNkIGFiYyBiY2QgYngiLCByZS5VTklDT0RFKS5ncm91cCgxKSwgImJ4IikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zZWFyY2gociJcQihiLilcQiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYmMgYmNkIGJjIGFieGQiLCByZS5VTklDT0RFKS5ncm91cCgxKSwgImJ4IikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zZWFyY2gociJeYWJjJCIsICJcbmFiY1xuIiwgcmUuTSkuZ3JvdXAoMCksICJhYmMiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNlYXJjaChyIl5cQWFiY1xaJCIsICJhYmMiLCByZS5NKS5ncm91cCgwKSwgImFiYyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc2VhcmNoKHIiXlxBYWJjXFokIiwgIlxuYWJjXG4iLCByZS5NKSwgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zZWFyY2gociJcYihiLilcYiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYmNkIGFiYyBiY2QgYngiKS5ncm91cCgxKSwgImJ4IikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zZWFyY2gociJcQihiLilcQiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYmMgYmNkIGJjIGFieGQiKS5ncm91cCgxKSwgImJ4IikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zZWFyY2gociJeYWJjJCIsICJcbmFiY1xuIiwgcmUuTSkuZ3JvdXAoMCksICJhYmMiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNlYXJjaChyIl5cQWFiY1xaJCIsICJhYmMiLCByZS5NKS5ncm91cCgwKSwgImFiYyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc2VhcmNoKHIiXlxBYWJjXFokIiwgIlxuYWJjXG4iLCByZS5NKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmUuc2VhcmNoKHIiXlxBYWJjXFokIiwgIlxuYWJjXG4iLCByZS5NKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zZWFyY2goYnIiXGIoYi4pXGIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiImFiY2QgYWJjIGJjZCBieCIpLmdyb3VwKDEpLCBiImJ4IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zZWFyY2goYnIiXEIoYi4pXEIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiImFiYyBiY2QgYmMgYWJ4ZCIpLmdyb3VwKDEpLCBiImJ4IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zZWFyY2goYnIiXGIoYi4pXGIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiImFiY2QgYWJjIGJjZCBieCIsIHJlLkxPQ0FMRSkuZ3JvdXAoMSksIGIiYngiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNlYXJjaChiciJcQihiLilcQiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiYWJjIGJjZCBiYyBhYnhkIiwgcmUuTE9DQUxFKS5ncm91cCgxKSwgYiJieCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc2VhcmNoKGJyIl5hYmMkIiwgYiJcbmFiY1xuIiwgcmUuTSkuZ3JvdXAoMCksIGIiYWJjIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zZWFyY2goYnIiXlxBYWJjXFokIiwgYiJhYmMiLCByZS5NKS5ncm91cCgwKSwgYiJhYmMiKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShyZS5zZWFyY2goYnIiXlxBYWJjXFokIiwgYiJcbmFiY1xuIiwgcmUuTSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc2VhcmNoKHIiXGRcRFx3XFdcc1xTIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjFhYSEgYSIpLmdyb3VwKDApLCAiMWFhISBhIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zZWFyY2goYnIiXGRcRFx3XFdcc1xTIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIxYWEhIGEiKS5ncm91cCgwKSwgYiIxYWEhIGEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNlYXJjaChyIlxkXERcd1xXXHNcUyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxYWEhIGEiLCByZS5BU0NJSSkuZ3JvdXAoMCksICIxYWEhIGEiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNlYXJjaChyIlxkXERcd1xXXHNcUyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxYWEhIGEiLCByZS5MT0NBTEUpLmdyb3VwKDApLCAiMWFhISBhIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zZWFyY2gociJcZFxEXHdcV1xzXFMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMWFhISBhIiwgcmUuVU5JQ09ERSkuZ3JvdXAoMCksICIxYWEhIGEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNlYXJjaChiciJcZFxEXHdcV1xzXFMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiIjFhYSEgYSIsIHJlLkxPQ0FMRSkuZ3JvdXAoMCksIGIiMWFhISBhIikKIAogICAgIGRlZiB0ZXN0X3N0cmluZ19ib3VuZGFyaWVzKHNlbGYpOgogICAgICAgICAjIFNlZSBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTA3MTMKQEAgLTQwOSwxMCArNTI1LDEwIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocmUubWF0Y2gociJcQiIsICJhYmMiKSkKICAgICAgICAgIyBIb3dldmVyLCBhbiBlbXB0eSBzdHJpbmcgY29udGFpbnMgbm8gd29yZCBib3VuZGFyaWVzLCBhbmQgYWxzbyBubwogICAgICAgICAjIG5vbi1ib3VuZGFyaWVzLgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNlYXJjaChyIlxCIiwgIiIpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShyZS5zZWFyY2gociJcQiIsICIiKSkKICAgICAgICAgIyBUaGlzIG9uZSBpcyBxdWVzdGlvbmFibGUgYW5kIGRpZmZlcmVudCBmcm9tIHRoZSBwZXJscmUgYmVoYXZpb3VyLAogICAgICAgICAjIGJ1dCBkZXNjcmliZXMgY3VycmVudCBiZWhhdmlvci4KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zZWFyY2gociJcYiIsICIiKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmUuc2VhcmNoKHIiXGIiLCAiIikpCiAgICAgICAgICMgQSBzaW5nbGUgd29yZC1jaGFyYWN0ZXIgc3RyaW5nIGhhcyB0d28gYm91bmRhcmllcywgYnV0IG5vCiAgICAgICAgICMgbm9uLWJvdW5kYXJ5IGdhcHMuCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlLmZpbmRhbGwociJcYiIsICJhIikpLCAyKQpAQCAtNDI2LDE3ICs1NDIsMTQgQEAKICAgICBkZWYgdGVzdF9iaWdjaGFyc2V0KHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCIoW1x1MjIyMlx1MjIyM10pIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXHUyMjIyIikuZ3JvdXAoMSksICJcdTIyMjIiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCIoW1x1MjIyMlx1MjIyM10pIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXHUyMjIyIiwgcmUuVU5JQ09ERSkuZ3JvdXAoMSksICJcdTIyMjIiKQogICAgICAgICByID0gJ1slc10nICUgJycuam9pbihtYXAoY2hyLCByYW5nZSgyNTYsIDIqKjE2LCAyNTUpKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaChyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcdWZmMDEiLCByZS5VTklDT0RFKS5ncm91cCgpLCAiXHVmZjAxIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaChyLCAiXHVmZjAxIikuZ3JvdXAoKSwgIlx1ZmYwMSIpCiAKICAgICBkZWYgdGVzdF9iaWdfY29kZXNpemUoc2VsZik6CiAgICAgICAgICMgSXNzdWUgIzExNjAKICAgICAgICAgciA9IHJlLmNvbXBpbGUoJ3wnLmpvaW4oKCclZCcleCBmb3IgeCBpbiByYW5nZSgxMDAwMCkpKSkKLSAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoci5tYXRjaCgnMTAwMCcpKQotICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShyLm1hdGNoKCc5OTk5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyLm1hdGNoKCcxMDAwJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyLm1hdGNoKCc5OTk5JykpCiAKICAgICBkZWYgdGVzdF9hbnlhbGwoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goImEuYiIsICJhXG5iIiwgcmUuRE9UQUxMKS5ncm91cCgwKSwKQEAgLTQ0NCw3ICs1NTcsNyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCJhLipiIiwgImFcblxuYiIsIHJlLkRPVEFMTCkuZ3JvdXAoMCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgImFcblxuYiIpCiAKLSAgICBkZWYgdGVzdF9ub25fY29uc3VtaW5nKHNlbGYpOgorICAgIGRlZiB0ZXN0X2xvb2thaGVhZChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgiKGEoPz1cc1teYV0pKSIsICJhIGIiKS5ncm91cCgxKSwgImEiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCIoYSg/PVxzW15hXSopKSIsICJhIGIiKS5ncm91cCgxKSwgImEiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCIoYSg/PVxzW2FiY10pKSIsICJhIGIiKS5ncm91cCgxKSwgImEiKQpAQCAtNDU4LDkgKzU3MSw0MCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKHIiKGEpKD8hXHNcMSkiLCAiYSBiIikuZ3JvdXAoMSksICJhIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaChyIihhKSg/IVxzKGFiY3xhKSkiLCAiYSBiIikuZ3JvdXAoMSksICJhIikKIAorICAgICAgICAjIEdyb3VwIHJlZmVyZW5jZS4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHInKGEpYig/PVwxKWEnLCAnYWJhJykpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlLm1hdGNoKHInKGEpYig/PVwxKWMnLCAnYWJhYycpKQorICAgICAgICAjIE5hbWVkIGdyb3VwIHJlZmVyZW5jZS4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHInKD9QPGc+YSliKD89KD9QPWcpKWEnLCAnYWJhJykpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlLm1hdGNoKHInKD9QPGc+YSliKD89KD9QPWcpKWMnLCAnYWJhYycpKQorICAgICAgICAjIENvbmRpdGlvbmFsIGdyb3VwIHJlZmVyZW5jZS4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHInKD86KGEpfCh4KSliKD89KD8oMil4fGMpKWMnLCAnYWJjJykpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlLm1hdGNoKHInKD86KGEpfCh4KSliKD89KD8oMiljfHgpKWMnLCAnYWJjJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaChyJyg/OihhKXwoeCkpYig/PSg/KDIpeHxjKSljJywgJ2FiYycpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShyZS5tYXRjaChyJyg/OihhKXwoeCkpYig/PSg/KDEpYnx4KSljJywgJ2FiYycpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2gocicoPzooYSl8KHgpKWIoPz0oPygxKWN8eCkpYycsICdhYmMnKSkKKyAgICAgICAgIyBHcm91cCB1c2VkIGJlZm9yZSBkZWZpbmVkLgorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2gocicoYSliKD89KD8oMil4fGMpKShjKScsICdhYmMnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmUubWF0Y2gocicoYSliKD89KD8oMilifHgpKShjKScsICdhYmMnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHInKGEpYig/PSg/KDEpY3x4KSkoYyknLCAnYWJjJykpCisKKyAgICBkZWYgdGVzdF9sb29rYmVoaW5kKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2gocidhYig/PD1iKWMnLCAnYWJjJykpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlLm1hdGNoKHInYWIoPzw9YyljJywgJ2FiYycpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShyZS5tYXRjaChyJ2FiKD88IWIpYycsICdhYmMnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHInYWIoPzwhYyljJywgJ2FiYycpKQorICAgICAgICAjIEdyb3VwIHJlZmVyZW5jZS4KKyAgICAgICAgc2VsZi5hc3NlcnRXYXJucyhSdW50aW1lV2FybmluZywgcmUuY29tcGlsZSwgcicoYSlhKD88PVwxKWMnKQorICAgICAgICAjIE5hbWVkIGdyb3VwIHJlZmVyZW5jZS4KKyAgICAgICAgc2VsZi5hc3NlcnRXYXJucyhSdW50aW1lV2FybmluZywgcmUuY29tcGlsZSwgcicoP1A8Zz5hKWEoPzw9KD9QPWcpKWMnKQorICAgICAgICAjIENvbmRpdGlvbmFsIGdyb3VwIHJlZmVyZW5jZS4KKyAgICAgICAgc2VsZi5hc3NlcnRXYXJucyhSdW50aW1lV2FybmluZywgcmUuY29tcGlsZSwgcicoYSliKD88PSg/KDEpYnx4KSljJykKKyAgICAgICAgIyBHcm91cCB1c2VkIGJlZm9yZSBkZWZpbmVkLgorICAgICAgICBzZWxmLmFzc2VydFdhcm5zKFJ1bnRpbWVXYXJuaW5nLCByZS5jb21waWxlLCByJyhhKWIoPzw9KD8oMilifHgpKShjKScpCisKICAgICBkZWYgdGVzdF9pZ25vcmVfY2FzZShzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgiYWJjIiwgIkFCQyIsIHJlLkkpLmdyb3VwKDApLCAiQUJDIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgiYWJjIiwgIkFCQyIsIHJlLkkpLmdyb3VwKDApLCAiQUJDIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaChiImFiYyIsIGIiQUJDIiwgcmUuSSkuZ3JvdXAoMCksIGIiQUJDIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaChyIihhXHNbXmFdKSIsICJhIGIiLCByZS5JKS5ncm91cCgxKSwgImEgYiIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2gociIoYVxzW15hXSopIiwgImEgYmIiLCByZS5JKS5ncm91cCgxKSwgImEgYmIiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKHIiKGFcc1thYmNdKSIsICJhIGIiLCByZS5JKS5ncm91cCgxKSwgImEgYiIpCkBAIC00NzAsNiArNjE0LDc2IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2gociIoKGEpXHMoYWJjfGEpKSIsICJhIGEiLCByZS5JKS5ncm91cCgxKSwgImEgYSIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2gociIoKGEpXHMoYWJjfGEpKikiLCAiYSBhYSIsIHJlLkkpLmdyb3VwKDEpLCAiYSBhYSIpCiAKKyAgICAgICAgYXNzZXJ0ICdcdTIxMmEnLmxvd2VyKCkgPT0gJ2snICMgJ+KEqicKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHInSycsICdcdTIxMmEnLCByZS5JKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHInaycsICdcdTIxMmEnLCByZS5JKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHInXHUyMTJhJywgJ0snLCByZS5JKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHInXHUyMTJhJywgJ2snLCByZS5JKSkKKyAgICAgICAgYXNzZXJ0ICdcdTAxN2YnLnVwcGVyKCkgPT0gJ1MnICMgJ8W/JworICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2gocidTJywgJ1x1MDE3ZicsIHJlLkkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2gocidzJywgJ1x1MDE3ZicsIHJlLkkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2gocidcdTAxN2YnLCAnUycsIHJlLkkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2gocidcdTAxN2YnLCAncycsIHJlLkkpKQorICAgICAgICBhc3NlcnQgJ1x1ZmIwNScudXBwZXIoKSA9PSAnXHVmYjA2Jy51cHBlcigpID09ICdTVCcgIyAn76yFJywgJ++shicKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHInXHVmYjA1JywgJ1x1ZmIwNicsIHJlLkkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2gocidcdWZiMDYnLCAnXHVmYjA1JywgcmUuSSkpCisKKyAgICBkZWYgdGVzdF9pZ25vcmVfY2FzZV9zZXQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaChyJ1sxOUFdJywgJ0EnLCByZS5JKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHInWzE5YV0nLCAnYScsIHJlLkkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2gocidbMTlhXScsICdBJywgcmUuSSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaChyJ1sxOUFdJywgJ2EnLCByZS5JKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKGJyJ1sxOUFdJywgYidBJywgcmUuSSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaChicidbMTlhXScsIGInYScsIHJlLkkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2goYnInWzE5YV0nLCBiJ0EnLCByZS5JKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKGJyJ1sxOUFdJywgYidhJywgcmUuSSkpCisgICAgICAgIGFzc2VydCAnXHUyMTJhJy5sb3dlcigpID09ICdrJyAjICfihKonCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaChyJ1sxOUtdJywgJ1x1MjEyYScsIHJlLkkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2gocidbMTlrXScsICdcdTIxMmEnLCByZS5JKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHInWzE5XHUyMTJhXScsICdLJywgcmUuSSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaChyJ1sxOVx1MjEyYV0nLCAnaycsIHJlLkkpKQorICAgICAgICBhc3NlcnQgJ1x1MDE3ZicudXBwZXIoKSA9PSAnUycgIyAnxb8nCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaChyJ1sxOVNdJywgJ1x1MDE3ZicsIHJlLkkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2gocidbMTlzXScsICdcdTAxN2YnLCByZS5JKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHInWzE5XHUwMTdmXScsICdTJywgcmUuSSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaChyJ1sxOVx1MDE3Zl0nLCAncycsIHJlLkkpKQorICAgICAgICBhc3NlcnQgJ1x1ZmIwNScudXBwZXIoKSA9PSAnXHVmYjA2Jy51cHBlcigpID09ICdTVCcgIyAn76yFJywgJ++shicKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHInWzE5XHVmYjA1XScsICdcdWZiMDYnLCByZS5JKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHInWzE5XHVmYjA2XScsICdcdWZiMDUnLCByZS5JKSkKKworICAgIGRlZiB0ZXN0X2lnbm9yZV9jYXNlX3JhbmdlKHNlbGYpOgorICAgICAgICAjIElzc3VlcyAjMzUxMSwgIzE3MzgxLgorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2gocidbOS1hXScsICdfJywgcmUuSSkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlLm1hdGNoKHInWzktQV0nLCAnXycsIHJlLkkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2goYnInWzktYV0nLCBiJ18nLCByZS5JKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmUubWF0Y2goYnInWzktQV0nLCBiJ18nLCByZS5JKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHInW1x4YzAtXHhkZV0nLCAnXHhkNycsIHJlLkkpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShyZS5tYXRjaChyJ1tceGMwLVx4ZGVdJywgJ1x4ZjcnLCByZS5JKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHInW1x4ZTAtXHhmZV0nLCAnXHhmNycsIHJlLkkpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShyZS5tYXRjaChyJ1tceGUwLVx4ZmVdJywgJ1x4ZDcnLCByZS5JKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHInW1x1MDQzMC1cdTA0NWZdJywgJ1x1MDQ1MCcsIHJlLkkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2gocidbXHUwNDMwLVx1MDQ1Zl0nLCAnXHUwNDAwJywgcmUuSSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaChyJ1tcdTA0MDAtXHUwNDJmXScsICdcdTA0NTAnLCByZS5JKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHInW1x1MDQwMC1cdTA0MmZdJywgJ1x1MDQwMCcsIHJlLkkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2gocidbXFUwMDAxMDQyOC1cVTAwMDEwNDRmXScsICdcVTAwMDEwNDI4JywgcmUuSSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaChyJ1tcVTAwMDEwNDI4LVxVMDAwMTA0NGZdJywgJ1xVMDAwMTA0MDAnLCByZS5JKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHInW1xVMDAwMTA0MDAtXFUwMDAxMDQyN10nLCAnXFUwMDAxMDQyOCcsIHJlLkkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2gocidbXFUwMDAxMDQwMC1cVTAwMDEwNDI3XScsICdcVTAwMDEwNDAwJywgcmUuSSkpCisKKyAgICAgICAgYXNzZXJ0ICdcdTIxMmEnLmxvd2VyKCkgPT0gJ2snICMgJ+KEqicKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHInW0otTV0nLCAnXHUyMTJhJywgcmUuSSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaChyJ1tqLW1dJywgJ1x1MjEyYScsIHJlLkkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2gocidbXHUyMTI5LVx1MjEyYl0nLCAnSycsIHJlLkkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2gocidbXHUyMTI5LVx1MjEyYl0nLCAnaycsIHJlLkkpKQorICAgICAgICBhc3NlcnQgJ1x1MDE3ZicudXBwZXIoKSA9PSAnUycgIyAnxb8nCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaChyJ1tSLVRdJywgJ1x1MDE3ZicsIHJlLkkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2gocidbci10XScsICdcdTAxN2YnLCByZS5JKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHInW1x1MDE3ZS1cdTAxODBdJywgJ1MnLCByZS5JKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHInW1x1MDE3ZS1cdTAxODBdJywgJ3MnLCByZS5JKSkKKyAgICAgICAgYXNzZXJ0ICdcdWZiMDUnLnVwcGVyKCkgPT0gJ1x1ZmIwNicudXBwZXIoKSA9PSAnU1QnICMgJ++shScsICfvrIYnCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaChyJ1tcdWZiMDQtXHVmYjA1XScsICdcdWZiMDYnLCByZS5JKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHInW1x1ZmIwNi1cdWZiMDddJywgJ1x1ZmIwNScsIHJlLkkpKQorCiAgICAgZGVmIHRlc3RfY2F0ZWdvcnkoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2gociIoXHMpIiwgIiAiKS5ncm91cCgxKSwgIiAiKQogCkBAIC00ODAsNyArNjk0LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfc3JlLmdldGxvd2VyKG9yZCgnQScpLCByZS5VTklDT0RFKSwgb3JkKCdhJykpCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgiYWJjIiwgIkFCQyIsIHJlLkkpLmdyb3VwKDApLCAiQUJDIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgiYWJjIiwgIkFCQyIsIHJlLkkpLmdyb3VwKDApLCAiQUJDIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaChiImFiYyIsIGIiQUJDIiwgcmUuSSkuZ3JvdXAoMCksIGIiQUJDIikKIAogICAgIGRlZiB0ZXN0X25vdF9saXRlcmFsKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNlYXJjaCgiXHMoW15hXSkiLCAiIGIiKS5ncm91cCgxKSwgImIiKQpAQCAtNTQ3LDExICs3NjEsMTUgQEAKICAgICAgICAgcmVzID0gcmUuZmluZGFsbChyZS5lc2NhcGUoJ1x1MjYyMCcuZW5jb2RlKCd1dGYtOCcpKSwgYikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzKSwgMikKIAotICAgIGRlZiBwaWNrbGVfdGVzdChzZWxmLCBwaWNrbGUpOgotICAgICAgICBvbGRwYXQgPSByZS5jb21waWxlKCdhKD86YnwoY3xlKXsxLDJ9P3xkKSs/KC4pJykKLSAgICAgICAgcyA9IHBpY2tsZS5kdW1wcyhvbGRwYXQpCi0gICAgICAgIG5ld3BhdCA9IHBpY2tsZS5sb2FkcyhzKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9sZHBhdCwgbmV3cGF0KQorICAgIGRlZiB0ZXN0X3BpY2tsaW5nKHNlbGYpOgorICAgICAgICBpbXBvcnQgcGlja2xlCisgICAgICAgIG9sZHBhdCA9IHJlLmNvbXBpbGUoJ2EoPzpifChjfGUpezEsMn0/fGQpKz8oLiknLCByZS5VTklDT0RFKQorICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIHBpY2tsZWQgPSBwaWNrbGUuZHVtcHMob2xkcGF0LCBwcm90bykKKyAgICAgICAgICAgIG5ld3BhdCA9IHBpY2tsZS5sb2FkcyhwaWNrbGVkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXdwYXQsIG9sZHBhdCkKKyAgICAgICAgIyBjdXJyZW50IHBpY2tsZSBleHBlY3RzIHRoZSBfY29tcGlsZSgpIHJlY29uc3RydWN0b3IgaW4gcmUgbW9kdWxlCisgICAgICAgIGZyb20gcmUgaW1wb3J0IF9jb21waWxlCiAKICAgICBkZWYgdGVzdF9jb25zdGFudHMoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuSSwgcmUuSUdOT1JFQ0FTRSkKQEAgLTU2MiwyOSArNzgwLDI5IEBACiAKICAgICBkZWYgdGVzdF9mbGFncyhzZWxmKToKICAgICAgICAgZm9yIGZsYWcgaW4gW3JlLkksIHJlLk0sIHJlLlgsIHJlLlMsIHJlLkxdOgotICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChyZS5jb21waWxlKCdecGF0dGVybiQnLCBmbGFnKSwgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5jb21waWxlKCdecGF0dGVybiQnLCBmbGFnKSkKIAogICAgIGRlZiB0ZXN0X3NyZV9jaGFyYWN0ZXJfbGl0ZXJhbHMoc2VsZik6CiAgICAgICAgIGZvciBpIGluIFswLCA4LCAxNiwgMzIsIDY0LCAxMjcsIDEyOCwgMjU1LCAyNTYsIDB4RkZGRiwgMHgxMDAwMCwgMHgxMEZGRkZdOgogICAgICAgICAgICAgaWYgaSA8IDI1NjoKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShyZS5tYXRjaChyIlwlMDNvIiAlIGksIGNocihpKSkpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocmUubWF0Y2gociJcJTAzbzAiICUgaSwgY2hyKGkpKyIwIikpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocmUubWF0Y2gociJcJTAzbzgiICUgaSwgY2hyKGkpKyI4IikpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocmUubWF0Y2gociJceCUwMngiICUgaSwgY2hyKGkpKSkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShyZS5tYXRjaChyIlx4JTAyeDAiICUgaSwgY2hyKGkpKyIwIikpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocmUubWF0Y2gociJceCUwMnh6IiAlIGksIGNocihpKSsieiIpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaChyIlwlMDNvIiAlIGksIGNocihpKSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHIiXCUwM28wIiAlIGksIGNocihpKSsiMCIpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaChyIlwlMDNvOCIgJSBpLCBjaHIoaSkrIjgiKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2gociJceCUwMngiICUgaSwgY2hyKGkpKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2gociJceCUwMngwIiAlIGksIGNocihpKSsiMCIpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaChyIlx4JTAyeHoiICUgaSwgY2hyKGkpKyJ6IikpCiAgICAgICAgICAgICBpZiBpIDwgMHgxMDAwMDoKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShyZS5tYXRjaChyIlx1JTA0eCIgJSBpLCBjaHIoaSkpKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHJlLm1hdGNoKHIiXHUlMDR4MCIgJSBpLCBjaHIoaSkrIjAiKSkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShyZS5tYXRjaChyIlx1JTA0eHoiICUgaSwgY2hyKGkpKyJ6IikpCi0gICAgICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShyZS5tYXRjaChyIlxVJTA4eCIgJSBpLCBjaHIoaSkpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocmUubWF0Y2gociJcVSUwOHgwIiAlIGksIGNocihpKSsiMCIpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocmUubWF0Y2gociJcVSUwOHh6IiAlIGksIGNocihpKSsieiIpKQotICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShyZS5tYXRjaChyIlwwIiwgIlwwMDAiKSkKLSAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocmUubWF0Y2gociJcMDgiLCAiXDAwMDgiKSkKLSAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocmUubWF0Y2gociJcMDEiLCAiXDAwMSIpKQotICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShyZS5tYXRjaChyIlwwMTgiLCAiXDAwMTgiKSkKLSAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocmUubWF0Y2gociJcNTY3IiwgY2hyKDBvMTY3KSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHIiXHUlMDR4IiAlIGksIGNocihpKSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHIiXHUlMDR4MCIgJSBpLCBjaHIoaSkrIjAiKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2gociJcdSUwNHh6IiAlIGksIGNocihpKSsieiIpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHIiXFUlMDh4IiAlIGksIGNocihpKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2gociJcVSUwOHgwIiAlIGksIGNocihpKSsiMCIpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHIiXFUlMDh4eiIgJSBpLCBjaHIoaSkrInoiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHIiXDAiLCAiXDAwMCIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2gociJcMDgiLCAiXDAwMDgiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHIiXDAxIiwgIlwwMDEiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHIiXDAxOCIsICJcMDAxOCIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2gociJcNTY3IiwgY2hyKDBvMTY3KSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHJlLmVycm9yLCByZS5tYXRjaCwgciJcOTExIiwgIiIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHJlLmVycm9yLCByZS5tYXRjaCwgciJceDEiLCAiIikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMocmUuZXJyb3IsIHJlLm1hdGNoLCByIlx4MXoiLCAiIikKQEAgLTU5NywyMiArODE1LDIyIEBACiAgICAgZGVmIHRlc3Rfc3JlX2NoYXJhY3Rlcl9jbGFzc19saXRlcmFscyhzZWxmKToKICAgICAgICAgZm9yIGkgaW4gWzAsIDgsIDE2LCAzMiwgNjQsIDEyNywgMTI4LCAyNTUsIDI1NiwgMHhGRkZGLCAweDEwMDAwLCAweDEwRkZGRl06CiAgICAgICAgICAgICBpZiBpIDwgMjU2OgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHJlLm1hdGNoKHIiW1wlb10iICUgaSwgY2hyKGkpKSkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShyZS5tYXRjaChyIltcJW84XSIgJSBpLCBjaHIoaSkpKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHJlLm1hdGNoKHIiW1wlMDNvXSIgJSBpLCBjaHIoaSkpKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHJlLm1hdGNoKHIiW1wlMDNvMF0iICUgaSwgY2hyKGkpKSkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShyZS5tYXRjaChyIltcJTAzbzhdIiAlIGksIGNocihpKSkpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocmUubWF0Y2gociJbXHglMDJ4XSIgJSBpLCBjaHIoaSkpKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHJlLm1hdGNoKHIiW1x4JTAyeDBdIiAlIGksIGNocihpKSkpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocmUubWF0Y2gociJbXHglMDJ4el0iICUgaSwgY2hyKGkpKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2gociJbXCVvXSIgJSBpLCBjaHIoaSkpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaChyIltcJW84XSIgJSBpLCBjaHIoaSkpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaChyIltcJTAzb10iICUgaSwgY2hyKGkpKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2gociJbXCUwM28wXSIgJSBpLCBjaHIoaSkpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaChyIltcJTAzbzhdIiAlIGksIGNocihpKSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHIiW1x4JTAyeF0iICUgaSwgY2hyKGkpKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2gociJbXHglMDJ4MF0iICUgaSwgY2hyKGkpKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2gociJbXHglMDJ4el0iICUgaSwgY2hyKGkpKSkKICAgICAgICAgICAgIGlmIGkgPCAweDEwMDAwOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHJlLm1hdGNoKHIiW1x1JTA0eF0iICUgaSwgY2hyKGkpKSkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShyZS5tYXRjaChyIltcdSUwNHgwXSIgJSBpLCBjaHIoaSkpKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHJlLm1hdGNoKHIiW1x1JTA0eHpdIiAlIGksIGNocihpKSkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShyZS5tYXRjaChyIltcVSUwOHhdIiAlIGksIGNocihpKSkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShyZS5tYXRjaChyIltcVSUwOHgwXSIgJSBpLCBjaHIoaSkrIjAiKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHJlLm1hdGNoKHIiW1xVJTA4eHpdIiAlIGksIGNocihpKSsieiIpKQotICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShyZS5tYXRjaChyIltcVTAwMDFkNDljLVxVMDAwMWQ0YjVdIiwgIlxVMDAwMWQ0OWUiKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2gociJbXHUlMDR4XSIgJSBpLCBjaHIoaSkpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaChyIltcdSUwNHgwXSIgJSBpLCBjaHIoaSkpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaChyIltcdSUwNHh6XSIgJSBpLCBjaHIoaSkpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHIiW1xVJTA4eF0iICUgaSwgY2hyKGkpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaChyIltcVSUwOHgwXSIgJSBpLCBjaHIoaSkrIjAiKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaChyIltcVSUwOHh6XSIgJSBpLCBjaHIoaSkrInoiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHIiW1xVMDAwMWQ0OWMtXFUwMDAxZDRiNV0iLCAiXFUwMDAxZDQ5ZSIpKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhyZS5lcnJvciwgcmUubWF0Y2gsIHIiW1w5MTFdIiwgIiIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHJlLmVycm9yLCByZS5tYXRjaCwgciJbXHgxel0iLCAiIikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMocmUuZXJyb3IsIHJlLm1hdGNoLCByIltcdTEyM3pdIiwgIiIpCkBAIC02MjEsMzcgKzgzOSwzNyBAQAogCiAgICAgZGVmIHRlc3Rfc3JlX2J5dGVfbGl0ZXJhbHMoc2VsZik6CiAgICAgICAgIGZvciBpIGluIFswLCA4LCAxNiwgMzIsIDY0LCAxMjcsIDEyOCwgMjU1XToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHJlLm1hdGNoKChyIlwlMDNvIiAlIGkpLmVuY29kZSgpLCBieXRlcyhbaV0pKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHJlLm1hdGNoKChyIlwlMDNvMCIgJSBpKS5lbmNvZGUoKSwgYnl0ZXMoW2ldKStiIjAiKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHJlLm1hdGNoKChyIlwlMDNvOCIgJSBpKS5lbmNvZGUoKSwgYnl0ZXMoW2ldKStiIjgiKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHJlLm1hdGNoKChyIlx4JTAyeCIgJSBpKS5lbmNvZGUoKSwgYnl0ZXMoW2ldKSkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShyZS5tYXRjaCgociJceCUwMngwIiAlIGkpLmVuY29kZSgpLCBieXRlcyhbaV0pK2IiMCIpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocmUubWF0Y2goKHIiXHglMDJ4eiIgJSBpKS5lbmNvZGUoKSwgYnl0ZXMoW2ldKStiInoiKSkKLSAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocmUubWF0Y2goYnIiXHUiLCBiJ3UnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocmUubWF0Y2goYnIiXFUiLCBiJ1UnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocmUubWF0Y2goYnIiXDAiLCBiIlwwMDAiKSkKLSAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocmUubWF0Y2goYnIiXDA4IiwgYiJcMDAwOCIpKQotICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShyZS5tYXRjaChiciJcMDEiLCBiIlwwMDEiKSkKLSAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocmUubWF0Y2goYnIiXDAxOCIsIGIiXDAwMTgiKSkKLSAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocmUubWF0Y2goYnIiXDU2NyIsIGJ5dGVzKFswbzE2N10pKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaCgociJcJTAzbyIgJSBpKS5lbmNvZGUoKSwgYnl0ZXMoW2ldKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2goKHIiXCUwM28wIiAlIGkpLmVuY29kZSgpLCBieXRlcyhbaV0pK2IiMCIpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKChyIlwlMDNvOCIgJSBpKS5lbmNvZGUoKSwgYnl0ZXMoW2ldKStiIjgiKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaCgociJceCUwMngiICUgaSkuZW5jb2RlKCksIGJ5dGVzKFtpXSkpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKChyIlx4JTAyeDAiICUgaSkuZW5jb2RlKCksIGJ5dGVzKFtpXSkrYiIwIikpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2goKHIiXHglMDJ4eiIgJSBpKS5lbmNvZGUoKSwgYnl0ZXMoW2ldKStiInoiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKGJyIlx1IiwgYid1JykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaChiciJcVSIsIGInVScpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2goYnIiXDAiLCBiIlwwMDAiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKGJyIlwwOCIsIGIiXDAwMDgiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKGJyIlwwMSIsIGIiXDAwMSIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2goYnIiXDAxOCIsIGIiXDAwMTgiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKGJyIlw1NjciLCBieXRlcyhbMG8xNjddKSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHJlLmVycm9yLCByZS5tYXRjaCwgYnIiXDkxMSIsIGIiIikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMocmUuZXJyb3IsIHJlLm1hdGNoLCBiciJceDEiLCBiIiIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHJlLmVycm9yLCByZS5tYXRjaCwgYnIiXHgxeiIsIGIiIikKIAogICAgIGRlZiB0ZXN0X3NyZV9ieXRlX2NsYXNzX2xpdGVyYWxzKHNlbGYpOgogICAgICAgICBmb3IgaSBpbiBbMCwgOCwgMTYsIDMyLCA2NCwgMTI3LCAxMjgsIDI1NV06Ci0gICAgICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShyZS5tYXRjaCgociJbXCVvXSIgJSBpKS5lbmNvZGUoKSwgYnl0ZXMoW2ldKSkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShyZS5tYXRjaCgociJbXCVvOF0iICUgaSkuZW5jb2RlKCksIGJ5dGVzKFtpXSkpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocmUubWF0Y2goKHIiW1wlMDNvXSIgJSBpKS5lbmNvZGUoKSwgYnl0ZXMoW2ldKSkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShyZS5tYXRjaCgociJbXCUwM28wXSIgJSBpKS5lbmNvZGUoKSwgYnl0ZXMoW2ldKSkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShyZS5tYXRjaCgociJbXCUwM284XSIgJSBpKS5lbmNvZGUoKSwgYnl0ZXMoW2ldKSkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShyZS5tYXRjaCgociJbXHglMDJ4XSIgJSBpKS5lbmNvZGUoKSwgYnl0ZXMoW2ldKSkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShyZS5tYXRjaCgociJbXHglMDJ4MF0iICUgaSkuZW5jb2RlKCksIGJ5dGVzKFtpXSkpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocmUubWF0Y2goKHIiW1x4JTAyeHpdIiAlIGkpLmVuY29kZSgpLCBieXRlcyhbaV0pKSkKLSAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocmUubWF0Y2goYnIiW1x1XSIsIGIndScpKQotICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShyZS5tYXRjaChiciJbXFVdIiwgYidVJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHJlLmVycm9yLCByZS5tYXRjaCwgYnIiW1w5MTFdIiwgIiIpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHJlLmVycm9yLCByZS5tYXRjaCwgYnIiW1x4MXpdIiwgIiIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2goKHIiW1wlb10iICUgaSkuZW5jb2RlKCksIGJ5dGVzKFtpXSkpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKChyIltcJW84XSIgJSBpKS5lbmNvZGUoKSwgYnl0ZXMoW2ldKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2goKHIiW1wlMDNvXSIgJSBpKS5lbmNvZGUoKSwgYnl0ZXMoW2ldKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2goKHIiW1wlMDNvMF0iICUgaSkuZW5jb2RlKCksIGJ5dGVzKFtpXSkpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKChyIltcJTAzbzhdIiAlIGkpLmVuY29kZSgpLCBieXRlcyhbaV0pKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaCgociJbXHglMDJ4XSIgJSBpKS5lbmNvZGUoKSwgYnl0ZXMoW2ldKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2goKHIiW1x4JTAyeDBdIiAlIGkpLmVuY29kZSgpLCBieXRlcyhbaV0pKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaCgociJbXHglMDJ4el0iICUgaSkuZW5jb2RlKCksIGJ5dGVzKFtpXSkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2goYnIiW1x1XSIsIGIndScpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2goYnIiW1xVXSIsIGInVScpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhyZS5lcnJvciwgcmUubWF0Y2gsIGJyIltcOTExXSIsIGIiIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMocmUuZXJyb3IsIHJlLm1hdGNoLCBiciJbXHgxel0iLCBiIiIpCiAKICAgICBkZWYgdGVzdF9idWdfMTEzMjU0KHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKHInKGEpfChiKScsICdiJykuc3RhcnQoMSksIC0xKQpAQCAtNjYwLDcgKzg3OCw3IEBACiAKICAgICBkZWYgdGVzdF9idWdfNTI3MzcxKHNlbGYpOgogICAgICAgICAjIGJ1ZyBkZXNjcmliZWQgaW4gcGF0Y2hlcyA1MjczNzEvNjcyNDkxCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2gocicoYSk/YScsJ2EnKS5sYXN0aW5kZXgsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlLm1hdGNoKHInKGEpP2EnLCdhJykubGFzdGluZGV4KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKHInKGEpKGIpP2InLCdhYicpLmxhc3RpbmRleCwgMSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaChyJyg/UDxhPmEpKD9QPGI+Yik/YicsJ2FiJykubGFzdGdyb3VwLCAnYScpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goIig/UDxhPmEoYikpIiwgImFiIikubGFzdGdyb3VwLCAnYScpCkBAIC03MTcsNyArOTM1LDcgQEAKICAgICAgICAgICAgIChyIlxzKyIsIE5vbmUpLAogICAgICAgICAgICAgXSkKIAotICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHNjYW5uZXIuc2Nhbm5lci5zY2FubmVyKCIiKS5wYXR0ZXJuLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2Nhbm5lci5zY2FubmVyLnNjYW5uZXIoIiIpLnBhdHRlcm4pCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzY2FubmVyLnNjYW4oInN1bSA9IDMqZm9vICsgMzEyLjUwICsgYmFyIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgKFsnc3VtJywgJ29wPScsIDMsICdvcConLCAnZm9vJywgJ29wKycsIDMxMi41LApAQCAtNzYyLDcgKzk4MCw3IEBACiAgICAgICAgICMgYnVnIDc2NDU0OCwgcmUuY29tcGlsZSgpIGJhcmZzIG9uIHN0ci91bmljb2RlIHN1YmNsYXNzZXMKICAgICAgICAgY2xhc3MgbXlfdW5pY29kZShzdHIpOiBwYXNzCiAgICAgICAgIHBhdCA9IHJlLmNvbXBpbGUobXlfdW5pY29kZSgiYWJjIikpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGF0Lm1hdGNoKCJ4eXoiKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocGF0Lm1hdGNoKCJ4eXoiKSkKIAogICAgIGRlZiB0ZXN0X2ZpbmRpdGVyKHNlbGYpOgogICAgICAgICBpdGVyID0gcmUuZmluZGl0ZXIociI6KyIsICJhOmI6OmM6OjpkIikKQEAgLTc5MCwxMSArMTAwOCwxMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIFsiOjoiLCAiOjoiXSkKIAogICAgIGRlZiB0ZXN0X2J1Z185MjYwNzUoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5jb21waWxlKCdidWdfOTI2MDc1JykgaXMgbm90Ci0gICAgICAgICAgICAgICAgICAgICByZS5jb21waWxlKGInYnVnXzkyNjA3NScpKQorICAgICAgICBzZWxmLmFzc2VydElzTm90KHJlLmNvbXBpbGUoJ2J1Z185MjYwNzUnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICByZS5jb21waWxlKGInYnVnXzkyNjA3NScpKQogCiAgICAgZGVmIHRlc3RfYnVnXzkzMTg0OChzZWxmKToKLSAgICAgICAgcGF0dGVybiA9IGV2YWwoJyJbXHUwMDJFXHUzMDAyXHVGRjBFXHVGRjYxXSInKQorICAgICAgICBwYXR0ZXJuID0gIltcdTAwMkVcdTMwMDJcdUZGMEVcdUZGNjFdIgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLmNvbXBpbGUocGF0dGVybikuc3BsaXQoImEuYi5jIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgWydhJywnYicsJ2MnXSkKIApAQCAtODA1LDcgKzEwMjMsNyBAQAogCiAgICAgICAgIHNjYW5uZXIgPSByZS5jb21waWxlKHIiXHMiKS5zY2FubmVyKCJhIGIiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNjYW5uZXIuc2VhcmNoKCkuc3BhbigpLCAoMSwgMikpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2Nhbm5lci5zZWFyY2goKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc2Nhbm5lci5zZWFyY2goKSkKIAogICAgIGRlZiB0ZXN0X2J1Z184MTcyMzQoc2VsZik6CiAgICAgICAgIGl0ZXIgPSByZS5maW5kaXRlcihyIi4qIiwgImFzZGYiKQpAQCAtODM5LDcgKzEwNTcsNyBAQAogICAgICAgICBpbXBvcnQgYXJyYXkKICAgICAgICAgZm9yIHR5cGVjb2RlIGluICdiQnVoSGlJbExmZCc6CiAgICAgICAgICAgICBhID0gYXJyYXkuYXJyYXkodHlwZWNvZGUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLmNvbXBpbGUoYiJibGEiKS5tYXRjaChhKSwgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlLmNvbXBpbGUoYiJibGEiKS5tYXRjaChhKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuY29tcGlsZShiIiIpLm1hdGNoKGEpLmdyb3VwcygpLCAoKSkKIAogICAgIGRlZiB0ZXN0X2lubGluZV9mbGFncyhzZWxmKToKQEAgLTg0OSwyNyArMTA2NywyNyBAQAogCiAgICAgICAgIHAgPSByZS5jb21waWxlKHVwcGVyX2NoYXIsIHJlLkkgfCByZS5VKQogICAgICAgICBxID0gcC5tYXRjaChsb3dlcl9jaGFyKQotICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHEsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShxKQogCiAgICAgICAgIHAgPSByZS5jb21waWxlKGxvd2VyX2NoYXIsIHJlLkkgfCByZS5VKQogICAgICAgICBxID0gcC5tYXRjaCh1cHBlcl9jaGFyKQotICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHEsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShxKQogCiAgICAgICAgIHAgPSByZS5jb21waWxlKCcoP2kpJyArIHVwcGVyX2NoYXIsIHJlLlUpCiAgICAgICAgIHEgPSBwLm1hdGNoKGxvd2VyX2NoYXIpCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHEpCiAKICAgICAgICAgcCA9IHJlLmNvbXBpbGUoJyg/aSknICsgbG93ZXJfY2hhciwgcmUuVSkKICAgICAgICAgcSA9IHAubWF0Y2godXBwZXJfY2hhcikKLSAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChxLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocSkKIAogICAgICAgICBwID0gcmUuY29tcGlsZSgnKD9pdSknICsgdXBwZXJfY2hhcikKICAgICAgICAgcSA9IHAubWF0Y2gobG93ZXJfY2hhcikKLSAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChxLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocSkKIAogICAgICAgICBwID0gcmUuY29tcGlsZSgnKD9pdSknICsgbG93ZXJfY2hhcikKICAgICAgICAgcSA9IHAubWF0Y2godXBwZXJfY2hhcikKLSAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChxLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocSkKIAogICAgIGRlZiB0ZXN0X2RvbGxhcl9tYXRjaGVzX3R3aWNlKHNlbGYpOgogICAgICAgICAiJCBtYXRjaGVzIHRoZSBlbmQgb2Ygc3RyaW5nLCBhbmQganVzdCBiZWZvcmUgdGhlIHRlcm1pbmF0aW5nIFxuIgpAQCAtOTAwLDIzICsxMTE4LDIzIEBACiAgICAgICAgICMgU3RyaW5nIHBhdHRlcm5zCiAgICAgICAgIGZvciBmbGFncyBpbiAoMCwgcmUuVU5JQ09ERSk6CiAgICAgICAgICAgICBwYXQgPSByZS5jb21waWxlKCdceGMwJywgZmxhZ3MgfCByZS5JR05PUkVDQVNFKQotICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChwYXQubWF0Y2goJ1x4ZTAnKSwgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYXQubWF0Y2goJ1x4ZTAnKSkKICAgICAgICAgICAgIHBhdCA9IHJlLmNvbXBpbGUoJ1x3JywgZmxhZ3MpCi0gICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHBhdC5tYXRjaCgnXHhlMCcpLCBOb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBhdC5tYXRjaCgnXHhlMCcpKQogICAgICAgICBwYXQgPSByZS5jb21waWxlKCdceGMwJywgcmUuQVNDSUkgfCByZS5JR05PUkVDQVNFKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhdC5tYXRjaCgnXHhlMCcpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShwYXQubWF0Y2goJ1x4ZTAnKSkKICAgICAgICAgcGF0ID0gcmUuY29tcGlsZSgnKD9hKVx4YzAnLCByZS5JR05PUkVDQVNFKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhdC5tYXRjaCgnXHhlMCcpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShwYXQubWF0Y2goJ1x4ZTAnKSkKICAgICAgICAgcGF0ID0gcmUuY29tcGlsZSgnXHcnLCByZS5BU0NJSSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXQubWF0Y2goJ1x4ZTAnKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocGF0Lm1hdGNoKCdceGUwJykpCiAgICAgICAgIHBhdCA9IHJlLmNvbXBpbGUoJyg/YSlcdycpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGF0Lm1hdGNoKCdceGUwJyksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHBhdC5tYXRjaCgnXHhlMCcpKQogICAgICAgICAjIEJ5dGVzIHBhdHRlcm5zCiAgICAgICAgIGZvciBmbGFncyBpbiAoMCwgcmUuQVNDSUkpOgotICAgICAgICAgICAgcGF0ID0gcmUuY29tcGlsZShiJ1x4YzAnLCByZS5JR05PUkVDQVNFKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXQubWF0Y2goYidceGUwJyksIE5vbmUpCi0gICAgICAgICAgICBwYXQgPSByZS5jb21waWxlKGInXHcnKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXQubWF0Y2goYidceGUwJyksIE5vbmUpCisgICAgICAgICAgICBwYXQgPSByZS5jb21waWxlKGInXHhjMCcsIGZsYWdzIHwgcmUuSUdOT1JFQ0FTRSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHBhdC5tYXRjaChiJ1x4ZTAnKSkKKyAgICAgICAgICAgIHBhdCA9IHJlLmNvbXBpbGUoYidcdycsIGZsYWdzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocGF0Lm1hdGNoKGInXHhlMCcpKQogICAgICAgICAjIEluY29tcGF0aWJpbGl0aWVzCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHJlLmNvbXBpbGUsIGInXHcnLCByZS5VTklDT0RFKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCByZS5jb21waWxlLCBiJyg/dSlcdycpCkBAIC05NTYsMTEgKzExNzQsMTEgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBfc3JlLmNvbXBpbGUsIHt9LCAwLCBbXSkKIAogICAgIGRlZiB0ZXN0X3NlYXJjaF9kb3RfdW5pY29kZShzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocmUuc2VhcmNoKCIxMjMuKi0iLCAnMTIzYWJjLScpKQotICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShyZS5zZWFyY2goIjEyMy4qLSIsICcxMjNceGU5LScpKQotICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShyZS5zZWFyY2goIjEyMy4qLSIsICcxMjNcdTIwYWMtJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHJlLnNlYXJjaCgiMTIzLiotIiwgJzEyM1xVMDAxMGZmZmYtJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHJlLnNlYXJjaCgiMTIzLiotIiwgJzEyM1x4ZTlcdTIwYWNcVTAwMTBmZmZmLScpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUuc2VhcmNoKCIxMjMuKi0iLCAnMTIzYWJjLScpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUuc2VhcmNoKCIxMjMuKi0iLCAnMTIzXHhlOS0nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLnNlYXJjaCgiMTIzLiotIiwgJzEyM1x1MjBhYy0nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLnNlYXJjaCgiMTIzLiotIiwgJzEyM1xVMDAxMGZmZmYtJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5zZWFyY2goIjEyMy4qLSIsICcxMjNceGU5XHUyMGFjXFUwMDEwZmZmZi0nKSkKIAogICAgIGRlZiB0ZXN0X2NvbXBpbGUoc2VsZik6CiAgICAgICAgICMgVGVzdCByZXR1cm4gdmFsdWUgd2hlbiBnaXZlbiBzdHJpbmcgYW5kIHBhdHRlcm4gYXMgcGFyYW1ldGVyCkBAIC0xMDUzLDYgKzEyNzEsMjggQEAKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLmNvbXBpbGUocGF0dGVybiwgcmUuUykuZmluZGFsbChiJ3h5eicpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2IneHl6J10sIG1zZz1wYXR0ZXJuKQogCisgICAgZGVmIHRlc3RfbWF0Y2hfcmVwcihzZWxmKToKKyAgICAgICAgZm9yIHN0cmluZyBpbiAnW2FicmFjYWRhYnJhXScsIFMoJ1thYnJhY2FkYWJyYV0nKToKKyAgICAgICAgICAgIG0gPSByZS5zZWFyY2gocicoLispKC4qPylcMScsIHN0cmluZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihtKSwgIjwlcy4lcyBvYmplY3Q7ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNwYW49KDEsIDEyKSwgbWF0Y2g9J2FicmFjYWRhYnJhJz4iICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHR5cGUobSkuX19tb2R1bGVfXywgdHlwZShtKS5fX3F1YWxuYW1lX18pKQorICAgICAgICBmb3Igc3RyaW5nIGluIChiJ1thYnJhY2FkYWJyYV0nLCBCKGInW2FicmFjYWRhYnJhXScpLAorICAgICAgICAgICAgICAgICAgICAgICBieXRlYXJyYXkoYidbYWJyYWNhZGFicmFdJyksCisgICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeXZpZXcoYidbYWJyYWNhZGFicmFdJykpOgorICAgICAgICAgICAgbSA9IHJlLnNlYXJjaChyYicoLispKC4qPylcMScsIHN0cmluZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihtKSwgIjwlcy4lcyBvYmplY3Q7ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNwYW49KDEsIDEyKSwgbWF0Y2g9YidhYnJhY2FkYWJyYSc+IiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0eXBlKG0pLl9fbW9kdWxlX18sIHR5cGUobSkuX19xdWFsbmFtZV9fKSkKKworICAgICAgICBmaXJzdCwgc2Vjb25kID0gbGlzdChyZS5maW5kaXRlcigiKGFhKXwoYmIpIiwgImFhIGJiIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihmaXJzdCksICI8JXMuJXMgb2JqZWN0OyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgInNwYW49KDAsIDIpLCBtYXRjaD0nYWEnPiIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICh0eXBlKHNlY29uZCkuX19tb2R1bGVfXywgdHlwZShmaXJzdCkuX19xdWFsbmFtZV9fKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHNlY29uZCksICI8JXMuJXMgb2JqZWN0OyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgInNwYW49KDMsIDUpLCBtYXRjaD0nYmInPiIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICh0eXBlKHNlY29uZCkuX19tb2R1bGVfXywgdHlwZShzZWNvbmQpLl9fcXVhbG5hbWVfXykpCisKIAogICAgIGRlZiB0ZXN0X2J1Z18yNTM3KHNlbGYpOgogICAgICAgICAjIGlzc3VlIDI1Mzc6IGVtcHR5IHN1Ym1hdGNoZXMKQEAgLTEwNjUsMTYgKzEzMDUsMzMgQEAKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ3JvdXAoMiksICJ5IikKIAogICAgIGRlZiB0ZXN0X2RlYnVnX2ZsYWcoc2VsZik6CisgICAgICAgIHBhdCA9IHInKFwuKSg/OltjaF18cHkpKD8oMSkkfDogKScKICAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBvdXQ6Ci0gICAgICAgICAgICByZS5jb21waWxlKCdmb28nLCByZS5ERUJVRykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQuZ2V0dmFsdWUoKS5zcGxpdGxpbmVzKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgWydsaXRlcmFsIDEwMiAnLCAnbGl0ZXJhbCAxMTEgJywgJ2xpdGVyYWwgMTExICddKQorICAgICAgICAgICAgcmUuY29tcGlsZShwYXQsIHJlLkRFQlVHKQorICAgICAgICBkdW1wID0gJycnXAorc3VicGF0dGVybiAxCisgIGxpdGVyYWwgNDYKK3N1YnBhdHRlcm4gTm9uZQorICBicmFuY2gKKyAgICBpbgorICAgICAgbGl0ZXJhbCA5OQorICAgICAgbGl0ZXJhbCAxMDQKKyAgb3IKKyAgICBsaXRlcmFsIDExMgorICAgIGxpdGVyYWwgMTIxCitzdWJwYXR0ZXJuIE5vbmUKKyAgZ3JvdXByZWZfZXhpc3RzIDEKKyAgICBhdCBhdF9lbmQKKyAgZWxzZQorICAgIGxpdGVyYWwgNTgKKyAgICBsaXRlcmFsIDMyCisnJycKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQuZ2V0dmFsdWUoKSwgZHVtcCkKICAgICAgICAgIyBEZWJ1ZyBvdXRwdXQgaXMgb3V0cHV0IGFnYWluIGV2ZW4gYSBzZWNvbmQgdGltZSAoYnlwYXNzaW5nCiAgICAgICAgICMgdGhlIGNhY2hlIC0tIGlzc3VlICMyMDQyNikuCiAgICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgb3V0OgotICAgICAgICAgICAgcmUuY29tcGlsZSgnZm9vJywgcmUuREVCVUcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LmdldHZhbHVlKCkuc3BsaXRsaW5lcygpLAotICAgICAgICAgICAgICAgICAgICAgICAgIFsnbGl0ZXJhbCAxMDIgJywgJ2xpdGVyYWwgMTExICcsICdsaXRlcmFsIDExMSAnXSkKKyAgICAgICAgICAgIHJlLmNvbXBpbGUocGF0LCByZS5ERUJVRykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQuZ2V0dmFsdWUoKSwgZHVtcCkKIAogICAgIGRlZiB0ZXN0X2tleXdvcmRfcGFyYW1ldGVycyhzZWxmKToKICAgICAgICAgIyBJc3N1ZSAjMjAyODM6IEFjY2VwdGluZyB0aGUgc3RyaW5nIGtleXdvcmQgcGFyYW1ldGVyLgpAQCAtMTA4Miw2ICsxMzM5LDggQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgIHBhdC5tYXRjaChzdHJpbmc9J2FicmFjYWRhYnJhJywgcG9zPTcsIGVuZHBvcz0xMCkuc3BhbigpLCAoNywgOSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBwYXQuZnVsbG1hdGNoKHN0cmluZz0nYWJyYWNhZGFicmEnLCBwb3M9NywgZW5kcG9zPTkpLnNwYW4oKSwgKDcsIDkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICAgcGF0LnNlYXJjaChzdHJpbmc9J2FicmFjYWRhYnJhJywgcG9zPTMsIGVuZHBvcz0xMCkuc3BhbigpLCAoNywgOSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgICBwYXQuZmluZGFsbChzdHJpbmc9J2FicmFjYWRhYnJhJywgcG9zPTMsIGVuZHBvcz0xMCksIFsnYWInXSkKQEAgLTEwOTIsNTYgKzEzNTEsMTc0IEBACiAgICAgICAgICAgICBwYXQuc2Nhbm5lcihzdHJpbmc9J2FicmFjYWRhYnJhJywgcG9zPTMsIGVuZHBvcz0xMCkuc2VhcmNoKCkuc3BhbigpLAogICAgICAgICAgICAgKDcsIDkpKQogCisgICAgZGVmIHRlc3RfYnVnXzIwOTk4KHNlbGYpOgorICAgICAgICAjIElzc3VlICMyMDk5ODogRnVsbG1hdGNoIG9mIHJlcGVhdGVkIHNpbmdsZSBjaGFyYWN0ZXIgcGF0dGVybgorICAgICAgICAjIHdpdGggaWdub3JlIGNhc2UuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuZnVsbG1hdGNoKCdbYS1jXSsnLCAnQUJDJywgcmUuSSkuc3BhbigpLCAoMCwgMykpCiAKLWRlZiBydW5fcmVfdGVzdHMoKToKLSAgICBmcm9tIHRlc3QucmVfdGVzdHMgaW1wb3J0IHRlc3RzLCBTVUNDRUVELCBGQUlMLCBTWU5UQVhfRVJST1IKLSAgICBpZiB2ZXJib3NlOgotICAgICAgICBwcmludCgnUnVubmluZyByZV90ZXN0cyB0ZXN0IHN1aXRlJykKLSAgICBlbHNlOgotICAgICAgICAjIFRvIHNhdmUgdGltZSwgb25seSBydW4gdGhlIGZpcnN0IGFuZCBsYXN0IDEwIHRlc3RzCi0gICAgICAgICN0ZXN0cyA9IHRlc3RzWzoxMF0gKyB0ZXN0c1stMTA6XQotICAgICAgICBwYXNzCi0KLSAgICBmb3IgdCBpbiB0ZXN0czoKLSAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCi0gICAgICAgIHBhdHRlcm4gPSBzID0gb3V0Y29tZSA9IHJlcGwgPSBleHBlY3RlZCA9IE5vbmUKLSAgICAgICAgaWYgbGVuKHQpID09IDU6Ci0gICAgICAgICAgICBwYXR0ZXJuLCBzLCBvdXRjb21lLCByZXBsLCBleHBlY3RlZCA9IHQKLSAgICAgICAgZWxpZiBsZW4odCkgPT0gMzoKLSAgICAgICAgICAgIHBhdHRlcm4sIHMsIG91dGNvbWUgPSB0Ci0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdUZXN0IHR1cGxlcyBzaG91bGQgaGF2ZSAzIG9yIDUgZmllbGRzJywgdCkKLQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBvYmogPSByZS5jb21waWxlKHBhdHRlcm4pCi0gICAgICAgIGV4Y2VwdCByZS5lcnJvcjoKLSAgICAgICAgICAgIGlmIG91dGNvbWUgPT0gU1lOVEFYX0VSUk9SOiBwYXNzICAjIEV4cGVjdGVkIGEgc3ludGF4IGVycm9yCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHByaW50KCc9PT0gU3ludGF4IGVycm9yOicsIHQpCi0gICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDogcmFpc2UgS2V5Ym9hcmRJbnRlcnJ1cHQKLSAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgcHJpbnQoJyoqKiBVbmV4cGVjdGVkIGVycm9yICoqKicsIHQpCi0gICAgICAgICAgICBpZiB2ZXJib3NlOgotICAgICAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoZmlsZT1zeXMuc3Rkb3V0KQotICAgICAgICBlbHNlOgorICAgIGRlZiB0ZXN0X2xvY2FsZV9jYWNoaW5nKHNlbGYpOgorICAgICAgICAjIElzc3VlICMyMjQxMAorICAgICAgICBvbGRsb2NhbGUgPSBsb2NhbGUuc2V0bG9jYWxlKGxvY2FsZS5MQ19DVFlQRSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGxvY2FsZS5zZXRsb2NhbGUsIGxvY2FsZS5MQ19DVFlQRSwgb2xkbG9jYWxlKQorICAgICAgICBmb3IgbG9jIGluICdlbl9VUy5pc284ODU5MScsICdlbl9VUy51dGY4JzoKICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBsb2NhbGUuc2V0bG9jYWxlKGxvY2FsZS5MQ19DVFlQRSwgbG9jKQorICAgICAgICAgICAgZXhjZXB0IGxvY2FsZS5FcnJvcjoKKyAgICAgICAgICAgICAgICAjIFVuc3VwcG9ydGVkIGxvY2FsZSBvbiB0aGlzIHN5c3RlbQorICAgICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoJ3Rlc3QgbmVlZHMgJXMgbG9jYWxlJyAlIGxvYykKKworICAgICAgICByZS5wdXJnZSgpCisgICAgICAgIHNlbGYuY2hlY2tfZW5fVVNfaXNvODg1OTEoKQorICAgICAgICBzZWxmLmNoZWNrX2VuX1VTX3V0ZjgoKQorICAgICAgICByZS5wdXJnZSgpCisgICAgICAgIHNlbGYuY2hlY2tfZW5fVVNfdXRmOCgpCisgICAgICAgIHNlbGYuY2hlY2tfZW5fVVNfaXNvODg1OTEoKQorCisgICAgZGVmIGNoZWNrX2VuX1VTX2lzbzg4NTkxKHNlbGYpOgorICAgICAgICBsb2NhbGUuc2V0bG9jYWxlKGxvY2FsZS5MQ19DVFlQRSwgJ2VuX1VTLmlzbzg4NTkxJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKGInXHhjNVx4ZTUnLCBiJ1x4YzVceGU1JywgcmUuTHxyZS5JKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKGInXHhjNScsIGInXHhlNScsIHJlLkx8cmUuSSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaChiJ1x4ZTUnLCBiJ1x4YzUnLCByZS5MfHJlLkkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2goYicoP0xpKVx4YzVceGU1JywgYidceGM1XHhlNScpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2goYicoP0xpKVx4YzUnLCBiJ1x4ZTUnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKGInKD9MaSlceGU1JywgYidceGM1JykpCisKKyAgICBkZWYgY2hlY2tfZW5fVVNfdXRmOChzZWxmKToKKyAgICAgICAgbG9jYWxlLnNldGxvY2FsZShsb2NhbGUuTENfQ1RZUEUsICdlbl9VUy51dGY4JykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKGInXHhjNVx4ZTUnLCBiJ1x4YzVceGU1JywgcmUuTHxyZS5JKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmUubWF0Y2goYidceGM1JywgYidceGU1JywgcmUuTHxyZS5JKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmUubWF0Y2goYidceGU1JywgYidceGM1JywgcmUuTHxyZS5JKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKGInKD9MaSlceGM1XHhlNScsIGInXHhjNVx4ZTUnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmUubWF0Y2goYicoP0xpKVx4YzUnLCBiJ1x4ZTUnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmUubWF0Y2goYicoP0xpKVx4ZTUnLCBiJ1x4YzUnKSkKKworCitjbGFzcyBQYXR0ZXJuUmVwclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgY2hlY2soc2VsZiwgcGF0dGVybiwgZXhwZWN0ZWQpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIocmUuY29tcGlsZShwYXR0ZXJuKSksIGV4cGVjdGVkKQorCisgICAgZGVmIGNoZWNrX2ZsYWdzKHNlbGYsIHBhdHRlcm4sIGZsYWdzLCBleHBlY3RlZCk6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihyZS5jb21waWxlKHBhdHRlcm4sIGZsYWdzKSksIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3Rfd2l0aG91dF9mbGFncyhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVjaygncmFuZG9tIHBhdHRlcm4nLAorICAgICAgICAgICAgICAgICAgICJyZS5jb21waWxlKCdyYW5kb20gcGF0dGVybicpIikKKworICAgIGRlZiB0ZXN0X3NpbmdsZV9mbGFnKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX2ZsYWdzKCdyYW5kb20gcGF0dGVybicsIHJlLklHTk9SRUNBU0UsCisgICAgICAgICAgICAicmUuY29tcGlsZSgncmFuZG9tIHBhdHRlcm4nLCByZS5JR05PUkVDQVNFKSIpCisKKyAgICBkZWYgdGVzdF9tdWx0aXBsZV9mbGFncyhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19mbGFncygncmFuZG9tIHBhdHRlcm4nLCByZS5JfHJlLlN8cmUuWCwKKyAgICAgICAgICAgICJyZS5jb21waWxlKCdyYW5kb20gcGF0dGVybicsICIKKyAgICAgICAgICAgICJyZS5JR05PUkVDQVNFfHJlLkRPVEFMTHxyZS5WRVJCT1NFKSIpCisKKyAgICBkZWYgdGVzdF91bmljb2RlX2ZsYWcoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfZmxhZ3MoJ3JhbmRvbSBwYXR0ZXJuJywgcmUuVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAicmUuY29tcGlsZSgncmFuZG9tIHBhdHRlcm4nKSIpCisgICAgICAgIHNlbGYuY2hlY2tfZmxhZ3MoJ3JhbmRvbSBwYXR0ZXJuJywgcmUuSXxyZS5TfHJlLlUsCisgICAgICAgICAgICAgICAgICAgICAgICAgInJlLmNvbXBpbGUoJ3JhbmRvbSBwYXR0ZXJuJywgIgorICAgICAgICAgICAgICAgICAgICAgICAgICJyZS5JR05PUkVDQVNFfHJlLkRPVEFMTCkiKQorCisgICAgZGVmIHRlc3RfaW5saW5lX2ZsYWdzKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrKCcoP2kpcGF0dGVybicsCisgICAgICAgICAgICAgICAgICAgInJlLmNvbXBpbGUoJyg/aSlwYXR0ZXJuJywgcmUuSUdOT1JFQ0FTRSkiKQorCisgICAgZGVmIHRlc3RfdW5rbm93bl9mbGFncyhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19mbGFncygncmFuZG9tIHBhdHRlcm4nLCAweDEyMzAwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAicmUuY29tcGlsZSgncmFuZG9tIHBhdHRlcm4nLCAweDEyMzAwMCkiKQorICAgICAgICBzZWxmLmNoZWNrX2ZsYWdzKCdyYW5kb20gcGF0dGVybicsIDB4MTIzMDAwfHJlLkksCisgICAgICAgICAgICAicmUuY29tcGlsZSgncmFuZG9tIHBhdHRlcm4nLCByZS5JR05PUkVDQVNFfDB4MTIzMDAwKSIpCisKKyAgICBkZWYgdGVzdF9ieXRlcyhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVjayhiJ2J5dGVzIHBhdHRlcm4nLAorICAgICAgICAgICAgICAgICAgICJyZS5jb21waWxlKGInYnl0ZXMgcGF0dGVybicpIikKKyAgICAgICAgc2VsZi5jaGVja19mbGFncyhiJ2J5dGVzIHBhdHRlcm4nLCByZS5BLAorICAgICAgICAgICAgICAgICAgICAgICAgICJyZS5jb21waWxlKGInYnl0ZXMgcGF0dGVybicsIHJlLkFTQ0lJKSIpCisKKyAgICBkZWYgdGVzdF9xdW90ZXMoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2soJ3JhbmRvbSAiZG91YmxlIHF1b3RlZCIgcGF0dGVybicsCisgICAgICAgICAgICAnJydyZS5jb21waWxlKCdyYW5kb20gImRvdWJsZSBxdW90ZWQiIHBhdHRlcm4nKScnJykKKyAgICAgICAgc2VsZi5jaGVjaygicmFuZG9tICdzaW5nbGUgcXVvdGVkJyBwYXR0ZXJuIiwKKyAgICAgICAgICAgICcnJ3JlLmNvbXBpbGUoInJhbmRvbSAnc2luZ2xlIHF1b3RlZCcgcGF0dGVybiIpJycnKQorICAgICAgICBzZWxmLmNoZWNrKCcnJ2JvdGggJ3NpbmdsZScgYW5kICJkb3VibGUiIHF1b3RlcycnJywKKyAgICAgICAgICAgICcnJ3JlLmNvbXBpbGUoJ2JvdGggXFwnc2luZ2xlXFwnIGFuZCAiZG91YmxlIiBxdW90ZXMnKScnJykKKworICAgIGRlZiB0ZXN0X2xvbmdfcGF0dGVybihzZWxmKToKKyAgICAgICAgcGF0dGVybiA9ICdWZXJ5ICVzcGF0dGVybicgJSAoJ2xvbmcgJyAqIDEwMDApCisgICAgICAgIHIgPSByZXByKHJlLmNvbXBpbGUocGF0dGVybikpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzcyhsZW4ociksIDMwMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyWzozMF0sICJyZS5jb21waWxlKCdWZXJ5IGxvbmcgbG9uZyBsb24iKQorICAgICAgICByID0gcmVwcihyZS5jb21waWxlKHBhdHRlcm4sIHJlLkkpKQorICAgICAgICBzZWxmLmFzc2VydExlc3MobGVuKHIpLCAzMDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocls6MzBdLCAicmUuY29tcGlsZSgnVmVyeSBsb25nIGxvbmcgbG9uIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyWy0xNjpdLCAiLCByZS5JR05PUkVDQVNFKSIpCisKKworY2xhc3MgSW1wbGVtZW50YXRpb25UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiIKKyAgICBUZXN0IGltcGxlbWVudGF0aW9uIGRldGFpbHMgb2YgdGhlIHJlIG1vZHVsZS4KKyAgICAiIiIKKworICAgIGRlZiB0ZXN0X292ZXJsYXBfdGFibGUoc2VsZik6CisgICAgICAgIGYgPSBzcmVfY29tcGlsZS5fZ2VuZXJhdGVfb3ZlcmxhcF90YWJsZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoIiIpLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCJhIiksIFswXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCJhYmNkIiksIFswLCAwLCAwLCAwXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCJhYWFhIiksIFswLCAxLCAyLCAzXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCJhYmFiYmEiKSwgWzAsIDAsIDEsIDIsIDAsIDFdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoImFiY2FiZGFjIiksIFswLCAwLCAwLCAxLCAyLCAwLCAxLCAwXSkKKworCitjbGFzcyBFeHRlcm5hbFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3JlX2JlbmNobWFya3Moc2VsZik6CisgICAgICAgICdyZV90ZXN0cyBiZW5jaG1hcmtzJworICAgICAgICBmcm9tIHRlc3QucmVfdGVzdHMgaW1wb3J0IGJlbmNobWFya3MKKyAgICAgICAgZm9yIHBhdHRlcm4sIHMgaW4gYmVuY2htYXJrczoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KHBhdHRlcm49cGF0dGVybiwgc3RyaW5nPXMpOgorICAgICAgICAgICAgICAgIHAgPSByZS5jb21waWxlKHBhdHRlcm4pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHAuc2VhcmNoKHMpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwLm1hdGNoKHMpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwLmZ1bGxtYXRjaChzKSkKKyAgICAgICAgICAgICAgICBzMiA9ICcgJyoxMDAwMCArIHMgKyAnICcqMTAwMDAKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocC5zZWFyY2goczIpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwLm1hdGNoKHMyLCAxMDAwMCkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHAubWF0Y2goczIsIDEwMDAwLCAxMDAwMCArIGxlbihzKSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHAuZnVsbG1hdGNoKHMyLCAxMDAwMCwgMTAwMDAgKyBsZW4ocykpKQorCisgICAgZGVmIHRlc3RfcmVfdGVzdHMoc2VsZik6CisgICAgICAgICdyZV90ZXN0cyB0ZXN0IHN1aXRlJworICAgICAgICBmcm9tIHRlc3QucmVfdGVzdHMgaW1wb3J0IHRlc3RzLCBTVUNDRUVELCBGQUlMLCBTWU5UQVhfRVJST1IKKyAgICAgICAgZm9yIHQgaW4gdGVzdHM6CisgICAgICAgICAgICBwYXR0ZXJuID0gcyA9IG91dGNvbWUgPSByZXBsID0gZXhwZWN0ZWQgPSBOb25lCisgICAgICAgICAgICBpZiBsZW4odCkgPT0gNToKKyAgICAgICAgICAgICAgICBwYXR0ZXJuLCBzLCBvdXRjb21lLCByZXBsLCBleHBlY3RlZCA9IHQKKyAgICAgICAgICAgIGVsaWYgbGVuKHQpID09IDM6CisgICAgICAgICAgICAgICAgcGF0dGVybiwgcywgb3V0Y29tZSA9IHQKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignVGVzdCB0dXBsZXMgc2hvdWxkIGhhdmUgMyBvciA1IGZpZWxkcycsIHQpCisKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KHBhdHRlcm49cGF0dGVybiwgc3RyaW5nPXMpOgorICAgICAgICAgICAgICAgIGlmIG91dGNvbWUgPT0gU1lOVEFYX0VSUk9SOiAgIyBFeHBlY3RlZCBhIHN5bnRheCBlcnJvcgorICAgICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHJlLmVycm9yKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlLmNvbXBpbGUocGF0dGVybikKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgIG9iaiA9IHJlLmNvbXBpbGUocGF0dGVybikKICAgICAgICAgICAgICAgICByZXN1bHQgPSBvYmouc2VhcmNoKHMpCi0gICAgICAgICAgICBleGNlcHQgcmUuZXJyb3IgYXMgbXNnOgotICAgICAgICAgICAgICAgIHByaW50KCc9PT0gVW5leHBlY3RlZCBleGNlcHRpb24nLCB0LCByZXByKG1zZykpCi0gICAgICAgICAgICBpZiBvdXRjb21lID09IFNZTlRBWF9FUlJPUjoKLSAgICAgICAgICAgICAgICAjIFRoaXMgc2hvdWxkIGhhdmUgYmVlbiBhIHN5bnRheCBlcnJvcjsgZm9yZ2V0IGl0LgotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgIGVsaWYgb3V0Y29tZSA9PSBGQUlMOgotICAgICAgICAgICAgICAgIGlmIHJlc3VsdCBpcyBOb25lOiBwYXNzICAgIyBObyBtYXRjaCwgYXMgZXhwZWN0ZWQKLSAgICAgICAgICAgICAgICBlbHNlOiBwcmludCgnPT09IFN1Y2NlZWRlZCBpbmNvcnJlY3RseScsIHQpCi0gICAgICAgICAgICBlbGlmIG91dGNvbWUgPT0gU1VDQ0VFRDoKLSAgICAgICAgICAgICAgICBpZiByZXN1bHQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgaWYgb3V0Y29tZSA9PSBGQUlMOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShyZXN1bHQsICdTdWNjZWVkZWQgaW5jb3JyZWN0bHknKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdCwgJ0ZhaWxlZCBpbmNvcnJlY3RseScpCiAgICAgICAgICAgICAgICAgICAgICMgTWF0Y2hlZCwgYXMgZXhwZWN0ZWQsIHNvIG5vdyB3ZSBjb21wdXRlIHRoZQogICAgICAgICAgICAgICAgICAgICAjIHJlc3VsdCBzdHJpbmcgYW5kIGNvbXBhcmUgaXQgdG8gb3VyIGV4cGVjdGVkIHJlc3VsdC4KICAgICAgICAgICAgICAgICAgICAgc3RhcnQsIGVuZCA9IHJlc3VsdC5zcGFuKDApCi0gICAgICAgICAgICAgICAgICAgIHZhcmRpY3Q9eydmb3VuZCc6IHJlc3VsdC5ncm91cCgwKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2dyb3Vwcyc6IHJlc3VsdC5ncm91cCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZmxhZ3MnOiByZXN1bHQucmUuZmxhZ3N9CisgICAgICAgICAgICAgICAgICAgIHZhcmRpY3QgPSB7J2ZvdW5kJzogcmVzdWx0Lmdyb3VwKDApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdncm91cHMnOiByZXN1bHQuZ3JvdXAoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZmxhZ3MnOiByZXN1bHQucmUuZmxhZ3N9CiAgICAgICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDEsIDEwMCk6CiAgICAgICAgICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2kgPSByZXN1bHQuZ3JvdXAoaSkKQEAgLTExNTksMTIgKzE1MzYsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2kgPSAiRXJyb3IiCiAgICAgICAgICAgICAgICAgICAgICAgICB2YXJkaWN0W2ldID0gZ2kKLSAgICAgICAgICAgICAgICAgICAgcmVwbCA9IGV2YWwocmVwbCwgdmFyZGljdCkKLSAgICAgICAgICAgICAgICAgICAgaWYgcmVwbCAhPSBleHBlY3RlZDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCc9PT0gZ3JvdXBpbmcgZXJyb3InLCB0LCBlbmQ9JyAnKQotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQocmVwcihyZXBsKSArICcgc2hvdWxkIGJlICcgKyByZXByKGV4cGVjdGVkKSkKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBwcmludCgnPT09IEZhaWxlZCBpbmNvcnJlY3RseScsIHQpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbChyZXBsLCB2YXJkaWN0KSwgZXhwZWN0ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2dyb3VwaW5nIGVycm9yJykKIAogICAgICAgICAgICAgICAgICMgVHJ5IHRoZSBtYXRjaCB3aXRoIGJvdGggcGF0dGVybiBhbmQgc3RyaW5nIGNvbnZlcnRlZCB0bwogICAgICAgICAgICAgICAgICMgYnl0ZXMsIGFuZCBjaGVjayB0aGF0IGl0IHN0aWxsIHN1Y2NlZWRzLgpAQCAtMTE3NSw1NSArMTU0OCwzOSBAQAogICAgICAgICAgICAgICAgICAgICAjIHNraXAgbm9uLWFzY2lpIHRlc3RzCiAgICAgICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KCdieXRlcyBwYXR0ZXJuIG1hdGNoJyk6CiAgICAgICAgICAgICAgICAgICAgICAgICBicGF0ID0gcmUuY29tcGlsZShicGF0KQotICAgICAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoJz09PSBGYWlscyBvbiBieXRlcyBwYXR0ZXJuIGNvbXBpbGUnLCB0KQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgdmVyYm9zZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKGZpbGU9c3lzLnN0ZG91dCkKLSAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzX3Jlc3VsdCA9IGJwYXQuc2VhcmNoKGJzKQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgYnl0ZXNfcmVzdWx0IGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoJz09PSBGYWlscyBvbiBieXRlcyBwYXR0ZXJuIG1hdGNoJywgdCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShicGF0LnNlYXJjaChicykpCiAKICAgICAgICAgICAgICAgICAjIFRyeSB0aGUgbWF0Y2ggd2l0aCB0aGUgc2VhcmNoIGFyZWEgbGltaXRlZCB0byB0aGUgZXh0ZW50CiAgICAgICAgICAgICAgICAgIyBvZiB0aGUgbWF0Y2ggYW5kIHNlZSBpZiBpdCBzdGlsbCBzdWNjZWVkcy4gIFxCIHdpbGwKICAgICAgICAgICAgICAgICAjIGJyZWFrIChiZWNhdXNlIGl0IHdvbid0IG1hdGNoIGF0IHRoZSBlbmQgb3Igc3RhcnQgb2YgYQogICAgICAgICAgICAgICAgICMgc3RyaW5nKSwgc28gd2UnbGwgaWdub3JlIHBhdHRlcm5zIHRoYXQgZmVhdHVyZSBpdC4KLQotICAgICAgICAgICAgICAgIGlmIHBhdHRlcm5bOjJdICE9ICdcXEInIGFuZCBwYXR0ZXJuWy0yOl0gIT0gJ1xcQicgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCByZXN1bHQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgIG9iaiA9IHJlLmNvbXBpbGUocGF0dGVybikKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gb2JqLnNlYXJjaChzLCByZXN1bHQuc3RhcnQoMCksIHJlc3VsdC5lbmQoMCkgKyAxKQotICAgICAgICAgICAgICAgICAgICBpZiByZXN1bHQgaXMgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCc9PT0gRmFpbGVkIG9uIHJhbmdlLWxpbWl0ZWQgbWF0Y2gnLCB0KQorICAgICAgICAgICAgICAgIGlmIChwYXR0ZXJuWzoyXSAhPSByJ1xCJyBhbmQgcGF0dGVyblstMjpdICE9IHInXEInCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHJlc3VsdCBpcyBub3QgTm9uZSk6CisgICAgICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KCdyYW5nZS1saW1pdGVkIG1hdGNoJyk6CisgICAgICAgICAgICAgICAgICAgICAgICBvYmogPSByZS5jb21waWxlKHBhdHRlcm4pCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUob2JqLnNlYXJjaChzLCBzdGFydCwgZW5kICsgMSkpCiAKICAgICAgICAgICAgICAgICAjIFRyeSB0aGUgbWF0Y2ggd2l0aCBJR05PUkVDQVNFIGVuYWJsZWQsIGFuZCBjaGVjayB0aGF0IGl0CiAgICAgICAgICAgICAgICAgIyBzdGlsbCBzdWNjZWVkcy4KLSAgICAgICAgICAgICAgICBvYmogPSByZS5jb21waWxlKHBhdHRlcm4sIHJlLklHTk9SRUNBU0UpCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0gb2JqLnNlYXJjaChzKQotICAgICAgICAgICAgICAgIGlmIHJlc3VsdCBpcyBOb25lOgotICAgICAgICAgICAgICAgICAgICBwcmludCgnPT09IEZhaWxzIG9uIGNhc2UtaW5zZW5zaXRpdmUgbWF0Y2gnLCB0KQorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KCdjYXNlLWluc2Vuc2l0aXZlIG1hdGNoJyk6CisgICAgICAgICAgICAgICAgICAgIG9iaiA9IHJlLmNvbXBpbGUocGF0dGVybiwgcmUuSUdOT1JFQ0FTRSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9iai5zZWFyY2gocykpCiAKICAgICAgICAgICAgICAgICAjIFRyeSB0aGUgbWF0Y2ggd2l0aCBMT0NBTEUgZW5hYmxlZCwgYW5kIGNoZWNrIHRoYXQgaXQKICAgICAgICAgICAgICAgICAjIHN0aWxsIHN1Y2NlZWRzLgogICAgICAgICAgICAgICAgIGlmICcoP3UpJyBub3QgaW4gcGF0dGVybjoKLSAgICAgICAgICAgICAgICAgICAgb2JqID0gcmUuY29tcGlsZShwYXR0ZXJuLCByZS5MT0NBTEUpCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IG9iai5zZWFyY2gocykKLSAgICAgICAgICAgICAgICAgICAgaWYgcmVzdWx0IGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludCgnPT09IEZhaWxzIG9uIGxvY2FsZS1zZW5zaXRpdmUgbWF0Y2gnLCB0KQorICAgICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdCgnbG9jYWxlLXNlbnNpdGl2ZSBtYXRjaCcpOgorICAgICAgICAgICAgICAgICAgICAgICAgb2JqID0gcmUuY29tcGlsZShwYXR0ZXJuLCByZS5MT0NBTEUpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUob2JqLnNlYXJjaChzKSkKIAogICAgICAgICAgICAgICAgICMgVHJ5IHRoZSBtYXRjaCB3aXRoIFVOSUNPREUgbG9jYWxlIGVuYWJsZWQsIGFuZCBjaGVjawogICAgICAgICAgICAgICAgICMgdGhhdCBpdCBzdGlsbCBzdWNjZWVkcy4KLSAgICAgICAgICAgICAgICBvYmogPSByZS5jb21waWxlKHBhdHRlcm4sIHJlLlVOSUNPREUpCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0gb2JqLnNlYXJjaChzKQotICAgICAgICAgICAgICAgIGlmIHJlc3VsdCBpcyBOb25lOgotICAgICAgICAgICAgICAgICAgICBwcmludCgnPT09IEZhaWxzIG9uIHVuaWNvZGUtc2Vuc2l0aXZlIG1hdGNoJywgdCkKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdCgndW5pY29kZS1zZW5zaXRpdmUgbWF0Y2gnKToKKyAgICAgICAgICAgICAgICAgICAgb2JqID0gcmUuY29tcGlsZShwYXR0ZXJuLCByZS5VTklDT0RFKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUob2JqLnNlYXJjaChzKSkKIAogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgcnVuX3VuaXR0ZXN0KFJlVGVzdHMpCi0gICAgcnVuX3JlX3Rlc3RzKCkKLQogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9yZWFkbGluZS5weSBiL0xpYi90ZXN0L3Rlc3RfcmVhZGxpbmUucHkKaW5kZXggNTQ4M2RkMy4uMGIyYjBhNSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9yZWFkbGluZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3JlYWRsaW5lLnB5CkBAIC0xLDIxICsxLDI0IEBACiAiIiIKIFZlcnkgbWluaW1hbCB1bml0dGVzdHMgZm9yIHBhcnRzIG9mIHRoZSByZWFkbGluZSBtb2R1bGUuCi0KLVRoZXNlIHRlc3RzIHdlcmUgYWRkZWQgdG8gY2hlY2sgdGhhdCB0aGUgbGliZWRpdCBlbXVsYXRpb24gb24gT1NYIGFuZAotdGhlICJyZWFsIiByZWFkbGluZSBoYXZlIHRoZSBzYW1lIGludGVyZmFjZSBmb3IgaGlzdG9yeSBtYW5pcHVsYXRpb24uIFRoYXQncwotd2h5IHRoZSB0ZXN0cyBjb3ZlciBvbmx5IGEgc21hbGwgc3Vic2V0IG9mIHRoZSBpbnRlcmZhY2UuCiAiIiIKK2ltcG9ydCBvcwogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBpbXBvcnRfbW9kdWxlCitmcm9tIHRlc3Quc2NyaXB0X2hlbHBlciBpbXBvcnQgYXNzZXJ0X3B5dGhvbl9vawogCiAjIFNraXAgdGVzdHMgaWYgdGhlcmUgaXMgbm8gcmVhZGxpbmUgbW9kdWxlCiByZWFkbGluZSA9IGltcG9ydF9tb2R1bGUoJ3JlYWRsaW5lJykKIAogY2xhc3MgVGVzdEhpc3RvcnlNYW5pcHVsYXRpb24gKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiIKKyAgICBUaGVzZSB0ZXN0cyB3ZXJlIGFkZGVkIHRvIGNoZWNrIHRoYXQgdGhlIGxpYmVkaXQgZW11bGF0aW9uIG9uIE9TWCBhbmQgdGhlCisgICAgInJlYWwiIHJlYWRsaW5lIGhhdmUgdGhlIHNhbWUgaW50ZXJmYWNlIGZvciBoaXN0b3J5IG1hbmlwdWxhdGlvbi4gVGhhdCdzCisgICAgd2h5IHRoZSB0ZXN0cyBjb3ZlciBvbmx5IGEgc21hbGwgc3Vic2V0IG9mIHRoZSBpbnRlcmZhY2UuCisgICAgIiIiCiAKLSAgICBAdW5pdHRlc3Quc2tpcElmKG5vdCBoYXNhdHRyKHJlYWRsaW5lLCAnY2xlYXJfaGlzdG9yeScpLAotICAgICAgICAgICAgICAgICAgICAgIlRoZSBoaXN0b3J5IHVwZGF0ZSB0ZXN0IGNhbm5vdCBiZSBydW4gYmVjYXVzZSB0aGUgIgotICAgICAgICAgICAgICAgICAgICAgImNsZWFyX2hpc3RvcnkgbWV0aG9kIGlzIG5vdCBhdmFpbGFibGUuIikKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHJlYWRsaW5lLCAiY2xlYXJfaGlzdG9yeSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJUaGUgaGlzdG9yeSB1cGRhdGUgdGVzdCBjYW5ub3QgYmUgcnVuIGJlY2F1c2UgdGhlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiY2xlYXJfaGlzdG9yeSBtZXRob2QgaXMgbm90IGF2YWlsYWJsZS4iKQogICAgIGRlZiB0ZXN0SGlzdG9yeVVwZGF0ZXMoc2VsZik6CiAgICAgICAgIHJlYWRsaW5lLmNsZWFyX2hpc3RvcnkoKQogCkBAIC00MCw4ICs0MywyMiBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWRsaW5lLmdldF9jdXJyZW50X2hpc3RvcnlfbGVuZ3RoKCksIDEpCiAKIAorY2xhc3MgVGVzdFJlYWRsaW5lKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIEB1bml0dGVzdC5za2lwSWYocmVhZGxpbmUuX1JFQURMSU5FX1ZFUlNJT04gPCAweDA2MDAKKyAgICAgICAgICAgICAgICAgICAgIGFuZCAibGliZWRpdCIgbm90IGluIHJlYWRsaW5lLl9fZG9jX18sCisgICAgICAgICAgICAgICAgICAgICAibm90IHN1cHBvcnRlZCBpbiB0aGlzIGxpYnJhcnkgdmVyc2lvbiIpCisgICAgZGVmIHRlc3RfaW5pdChzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMTk4ODQ6IEVuc3VyZSB0aGF0IHRoZSBBTlNJIHNlcXVlbmNlICJcMDMzWzEwMzRoIiBpcyBub3QKKyAgICAgICAgIyB3cml0dGVuIGludG8gc3Rkb3V0IHdoZW4gdGhlIHJlYWRsaW5lIG1vZHVsZSBpcyBpbXBvcnRlZCBhbmQgc3Rkb3V0CisgICAgICAgICMgaXMgcmVkaXJlY3RlZCB0byBhIHBpcGUuCisgICAgICAgIHJjLCBzdGRvdXQsIHN0ZGVyciA9IGFzc2VydF9weXRob25fb2soJy1jJywgJ2ltcG9ydCByZWFkbGluZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEVSTT0neHRlcm0tMjU2Y29sb3InKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dCwgYicnKQorCisKIGRlZiB0ZXN0X21haW4oKToKLSAgICBydW5fdW5pdHRlc3QoVGVzdEhpc3RvcnlNYW5pcHVsYXRpb24pCisgICAgcnVuX3VuaXR0ZXN0KFRlc3RIaXN0b3J5TWFuaXB1bGF0aW9uLCBUZXN0UmVhZGxpbmUpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcmVncnRlc3QucHkgYi9MaWIvdGVzdC90ZXN0X3JlZ3J0ZXN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzOThhNGYKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X3JlZ3J0ZXN0LnB5CkBAIC0wLDAgKzEsMjc1IEBACisiIiIKK1Rlc3RzIG9mIHJlZ3J0ZXN0LnB5LgorIiIiCisKK2ltcG9ydCBhcmdwYXJzZQoraW1wb3J0IGZhdWx0aGFuZGxlcgoraW1wb3J0IGdldG9wdAoraW1wb3J0IG9zLnBhdGgKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0IGltcG9ydCByZWdydGVzdCwgc3VwcG9ydAorCitjbGFzcyBQYXJzZUFyZ3NUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICAiIiJUZXN0IHJlZ3J0ZXN0J3MgYXJndW1lbnQgcGFyc2luZy4iIiIKKworICAgIGRlZiBjaGVja0Vycm9yKHNlbGYsIGFyZ3MsIG1zZyk6CisgICAgICAgIHdpdGggc3VwcG9ydC5jYXB0dXJlZF9zdGRlcnIoKSBhcyBlcnIsIHNlbGYuYXNzZXJ0UmFpc2VzKFN5c3RlbUV4aXQpOgorICAgICAgICAgICAgcmVncnRlc3QuX3BhcnNlX2FyZ3MoYXJncykKKyAgICAgICAgc2VsZi5hc3NlcnRJbihtc2csIGVyci5nZXR2YWx1ZSgpKQorCisgICAgZGVmIHRlc3RfaGVscChzZWxmKToKKyAgICAgICAgZm9yIG9wdCBpbiAnLWgnLCAnLS1oZWxwJzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG9wdD1vcHQpOgorICAgICAgICAgICAgICAgIHdpdGggc3VwcG9ydC5jYXB0dXJlZF9zdGRvdXQoKSBhcyBvdXQsIFwKKyAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5c3RlbUV4aXQpOgorICAgICAgICAgICAgICAgICAgICByZWdydGVzdC5fcGFyc2VfYXJncyhbb3B0XSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKCdSdW4gUHl0aG9uIHJlZ3Jlc3Npb24gdGVzdHMuJywgb3V0LmdldHZhbHVlKCkpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKGZhdWx0aGFuZGxlciwgJ2R1bXBfdHJhY2ViYWNrX2xhdGVyJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgImZhdWx0aGFuZGxlci5kdW1wX3RyYWNlYmFja19sYXRlcigpIHJlcXVpcmVkIikKKyAgICBkZWYgdGVzdF90aW1lb3V0KHNlbGYpOgorICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFsnLS10aW1lb3V0JywgJzQuMiddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLnRpbWVvdXQsIDQuMikKKyAgICAgICAgc2VsZi5jaGVja0Vycm9yKFsnLS10aW1lb3V0J10sICdleHBlY3RlZCBvbmUgYXJndW1lbnQnKQorICAgICAgICBzZWxmLmNoZWNrRXJyb3IoWyctLXRpbWVvdXQnLCAnZm9vJ10sICdpbnZhbGlkIGZsb2F0IHZhbHVlJykKKworICAgIGRlZiB0ZXN0X3dhaXQoc2VsZik6CisgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoWyctLXdhaXQnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5zLndhaXQpCisKKyAgICBkZWYgdGVzdF9zbGF2ZWFyZ3Moc2VsZik6CisgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoWyctLXNsYXZlYXJncycsICdbW10sIHt9XSddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLnNsYXZlYXJncywgJ1tbXSwge31dJykKKyAgICAgICAgc2VsZi5jaGVja0Vycm9yKFsnLS1zbGF2ZWFyZ3MnXSwgJ2V4cGVjdGVkIG9uZSBhcmd1bWVudCcpCisKKyAgICBkZWYgdGVzdF9zdGFydChzZWxmKToKKyAgICAgICAgZm9yIG9wdCBpbiAnLVMnLCAnLS1zdGFydCc6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChvcHQ9b3B0KToKKyAgICAgICAgICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFtvcHQsICdmb28nXSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLnN0YXJ0LCAnZm9vJykKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrRXJyb3IoW29wdF0sICdleHBlY3RlZCBvbmUgYXJndW1lbnQnKQorCisgICAgZGVmIHRlc3RfdmVyYm9zZShzZWxmKToKKyAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbJy12J10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMudmVyYm9zZSwgMSkKKyAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbJy12dnYnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucy52ZXJib3NlLCAzKQorICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFsnLS12ZXJib3NlJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMudmVyYm9zZSwgMSkKKyAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbJy0tdmVyYm9zZSddICogMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucy52ZXJib3NlLCAzKQorICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLnZlcmJvc2UsIDApCisKKyAgICBkZWYgdGVzdF92ZXJib3NlMihzZWxmKToKKyAgICAgICAgZm9yIG9wdCBpbiAnLXcnLCAnLS12ZXJib3NlMic6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChvcHQ9b3B0KToKKyAgICAgICAgICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFtvcHRdKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShucy52ZXJib3NlMikKKworICAgIGRlZiB0ZXN0X3ZlcmJvc2UzKHNlbGYpOgorICAgICAgICBmb3Igb3B0IGluICctVycsICctLXZlcmJvc2UzJzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG9wdD1vcHQpOgorICAgICAgICAgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoW29wdF0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5zLnZlcmJvc2UzKQorCisgICAgZGVmIHRlc3RfcXVpZXQoc2VsZik6CisgICAgICAgIGZvciBvcHQgaW4gJy1xJywgJy0tcXVpZXQnOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3Qob3B0PW9wdCk6CisgICAgICAgICAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbb3B0XSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobnMucXVpZXQpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucy52ZXJib3NlLCAwKQorCisgICAgZGVmIHRlc3Rfc2xvdyhzZWxmKToKKyAgICAgICAgZm9yIG9wdCBpbiAnLW8nLCAnLS1zbG93JzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG9wdD1vcHQpOgorICAgICAgICAgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoW29wdF0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5zLnByaW50X3Nsb3cpCisKKyAgICBkZWYgdGVzdF9oZWFkZXIoc2VsZik6CisgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoWyctLWhlYWRlciddKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobnMuaGVhZGVyKQorCisgICAgZGVmIHRlc3RfcmFuZG9taXplKHNlbGYpOgorICAgICAgICBmb3Igb3B0IGluICctcicsICctLXJhbmRvbWl6ZSc6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChvcHQ9b3B0KToKKyAgICAgICAgICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFtvcHRdKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShucy5yYW5kb21pemUpCisKKyAgICBkZWYgdGVzdF9yYW5kc2VlZChzZWxmKToKKyAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbJy0tcmFuZHNlZWQnLCAnMTIzNDUnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucy5yYW5kb21fc2VlZCwgMTIzNDUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShucy5yYW5kb21pemUpCisgICAgICAgIHNlbGYuY2hlY2tFcnJvcihbJy0tcmFuZHNlZWQnXSwgJ2V4cGVjdGVkIG9uZSBhcmd1bWVudCcpCisgICAgICAgIHNlbGYuY2hlY2tFcnJvcihbJy0tcmFuZHNlZWQnLCAnZm9vJ10sICdpbnZhbGlkIGludCB2YWx1ZScpCisKKyAgICBkZWYgdGVzdF9mcm9tZmlsZShzZWxmKToKKyAgICAgICAgZm9yIG9wdCBpbiAnLWYnLCAnLS1mcm9tZmlsZSc6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChvcHQ9b3B0KToKKyAgICAgICAgICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFtvcHQsICdmb28nXSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLmZyb21maWxlLCAnZm9vJykKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrRXJyb3IoW29wdF0sICdleHBlY3RlZCBvbmUgYXJndW1lbnQnKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tFcnJvcihbb3B0LCAnZm9vJywgJy1zJ10sICJkb24ndCBnbyB0b2dldGhlciIpCisKKyAgICBkZWYgdGVzdF9leGNsdWRlKHNlbGYpOgorICAgICAgICBmb3Igb3B0IGluICcteCcsICctLWV4Y2x1ZGUnOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3Qob3B0PW9wdCk6CisgICAgICAgICAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbb3B0XSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobnMuZXhjbHVkZSkKKworICAgIGRlZiB0ZXN0X3NpbmdsZShzZWxmKToKKyAgICAgICAgZm9yIG9wdCBpbiAnLXMnLCAnLS1zaW5nbGUnOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3Qob3B0PW9wdCk6CisgICAgICAgICAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbb3B0XSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobnMuc2luZ2xlKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tFcnJvcihbb3B0LCAnLWYnLCAnZm9vJ10sICJkb24ndCBnbyB0b2dldGhlciIpCisKKyAgICBkZWYgdGVzdF9tYXRjaChzZWxmKToKKyAgICAgICAgZm9yIG9wdCBpbiAnLW0nLCAnLS1tYXRjaCc6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChvcHQ9b3B0KToKKyAgICAgICAgICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFtvcHQsICdwYXR0ZXJuJ10pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucy5tYXRjaF90ZXN0cywgJ3BhdHRlcm4nKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tFcnJvcihbb3B0XSwgJ2V4cGVjdGVkIG9uZSBhcmd1bWVudCcpCisKKyAgICBkZWYgdGVzdF9mYWlsZmFzdChzZWxmKToKKyAgICAgICAgZm9yIG9wdCBpbiAnLUcnLCAnLS1mYWlsZmFzdCc6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChvcHQ9b3B0KToKKyAgICAgICAgICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFtvcHQsICctdiddKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShucy5mYWlsZmFzdCkKKyAgICAgICAgICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFtvcHQsICctVyddKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShucy5mYWlsZmFzdCkKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrRXJyb3IoW29wdF0sICctRy8tLWZhaWxmYXN0IG5lZWRzIGVpdGhlciAtdiBvciAtVycpCisKKyAgICBkZWYgdGVzdF91c2Uoc2VsZik6CisgICAgICAgIGZvciBvcHQgaW4gJy11JywgJy0tdXNlJzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG9wdD1vcHQpOgorICAgICAgICAgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoW29wdCwgJ2d1aSxuZXR3b3JrJ10pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucy51c2VfcmVzb3VyY2VzLCBbJ2d1aScsICduZXR3b3JrJ10pCisgICAgICAgICAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbb3B0LCAnZ3VpLG5vbmUsbmV0d29yayddKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMudXNlX3Jlc291cmNlcywgWyduZXR3b3JrJ10pCisgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSBsaXN0KHJlZ3J0ZXN0LlJFU09VUkNFX05BTUVTKQorICAgICAgICAgICAgICAgIGV4cGVjdGVkLnJlbW92ZSgnZ3VpJykKKyAgICAgICAgICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFtvcHQsICdhbGwsLWd1aSddKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMudXNlX3Jlc291cmNlcywgZXhwZWN0ZWQpCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja0Vycm9yKFtvcHRdLCAnZXhwZWN0ZWQgb25lIGFyZ3VtZW50JykKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrRXJyb3IoW29wdCwgJ2ZvbyddLCAnaW52YWxpZCByZXNvdXJjZScpCisKKyAgICBkZWYgdGVzdF9tZW1saW1pdChzZWxmKToKKyAgICAgICAgZm9yIG9wdCBpbiAnLU0nLCAnLS1tZW1saW1pdCc6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChvcHQ9b3B0KToKKyAgICAgICAgICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFtvcHQsICc0RyddKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMubWVtbGltaXQsICc0RycpCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja0Vycm9yKFtvcHRdLCAnZXhwZWN0ZWQgb25lIGFyZ3VtZW50JykKKworICAgIGRlZiB0ZXN0X3Rlc3RkaXIoc2VsZik6CisgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoWyctLXRlc3RkaXInLCAnZm9vJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMudGVzdGRpciwgb3MucGF0aC5qb2luKHN1cHBvcnQuU0FWRURDV0QsICdmb28nKSkKKyAgICAgICAgc2VsZi5jaGVja0Vycm9yKFsnLS10ZXN0ZGlyJ10sICdleHBlY3RlZCBvbmUgYXJndW1lbnQnKQorCisgICAgZGVmIHRlc3RfcnVubGVha3Moc2VsZik6CisgICAgICAgIGZvciBvcHQgaW4gJy1MJywgJy0tcnVubGVha3MnOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3Qob3B0PW9wdCk6CisgICAgICAgICAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbb3B0XSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobnMucnVubGVha3MpCisKKyAgICBkZWYgdGVzdF9odW50cmxlYWtzKHNlbGYpOgorICAgICAgICBmb3Igb3B0IGluICctUicsICctLWh1bnRybGVha3MnOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3Qob3B0PW9wdCk6CisgICAgICAgICAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbb3B0LCAnOiddKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMuaHVudHJsZWFrcywgKDUsIDQsICdyZWZsb2cudHh0JykpCisgICAgICAgICAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbb3B0LCAnNjonXSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLmh1bnRybGVha3MsICg2LCA0LCAncmVmbG9nLnR4dCcpKQorICAgICAgICAgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoW29wdCwgJzozJ10pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucy5odW50cmxlYWtzLCAoNSwgMywgJ3JlZmxvZy50eHQnKSkKKyAgICAgICAgICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFtvcHQsICc2OjM6bGVha3MubG9nJ10pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucy5odW50cmxlYWtzLCAoNiwgMywgJ2xlYWtzLmxvZycpKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tFcnJvcihbb3B0XSwgJ2V4cGVjdGVkIG9uZSBhcmd1bWVudCcpCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja0Vycm9yKFtvcHQsICc2J10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICduZWVkcyAyIG9yIDMgY29sb24tc2VwYXJhdGVkIGFyZ3VtZW50cycpCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja0Vycm9yKFtvcHQsICdmb286J10sICdpbnZhbGlkIGh1bnRybGVha3MgdmFsdWUnKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tFcnJvcihbb3B0LCAnNjpmb28nXSwgJ2ludmFsaWQgaHVudHJsZWFrcyB2YWx1ZScpCisKKyAgICBkZWYgdGVzdF9tdWx0aXByb2Nlc3Moc2VsZik6CisgICAgICAgIGZvciBvcHQgaW4gJy1qJywgJy0tbXVsdGlwcm9jZXNzJzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG9wdD1vcHQpOgorICAgICAgICAgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoW29wdCwgJzInXSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLnVzZV9tcCwgMikKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrRXJyb3IoW29wdF0sICdleHBlY3RlZCBvbmUgYXJndW1lbnQnKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tFcnJvcihbb3B0LCAnZm9vJ10sICdpbnZhbGlkIGludCB2YWx1ZScpCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja0Vycm9yKFtvcHQsICcyJywgJy1UJ10sICJkb24ndCBnbyB0b2dldGhlciIpCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja0Vycm9yKFtvcHQsICcyJywgJy1sJ10sICJkb24ndCBnbyB0b2dldGhlciIpCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja0Vycm9yKFtvcHQsICcyJywgJy1NJywgJzRHJ10sICJkb24ndCBnbyB0b2dldGhlciIpCisKKyAgICBkZWYgdGVzdF9jb3ZlcmFnZShzZWxmKToKKyAgICAgICAgZm9yIG9wdCBpbiAnLVQnLCAnLS1jb3ZlcmFnZSc6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChvcHQ9b3B0KToKKyAgICAgICAgICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFtvcHRdKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShucy50cmFjZSkKKworICAgIGRlZiB0ZXN0X2NvdmVyZGlyKHNlbGYpOgorICAgICAgICBmb3Igb3B0IGluICctRCcsICctLWNvdmVyZGlyJzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG9wdD1vcHQpOgorICAgICAgICAgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoW29wdCwgJ2ZvbyddKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMuY292ZXJkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oc3VwcG9ydC5TQVZFRENXRCwgJ2ZvbycpKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tFcnJvcihbb3B0XSwgJ2V4cGVjdGVkIG9uZSBhcmd1bWVudCcpCisKKyAgICBkZWYgdGVzdF9ub2NvdmVyZGlyKHNlbGYpOgorICAgICAgICBmb3Igb3B0IGluICctTicsICctLW5vY292ZXJkaXInOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3Qob3B0PW9wdCk6CisgICAgICAgICAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbb3B0XSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShucy5jb3ZlcmRpcikKKworICAgIGRlZiB0ZXN0X3RocmVzaG9sZChzZWxmKToKKyAgICAgICAgZm9yIG9wdCBpbiAnLXQnLCAnLS10aHJlc2hvbGQnOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3Qob3B0PW9wdCk6CisgICAgICAgICAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbb3B0LCAnMTAwMCddKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMudGhyZXNob2xkLCAxMDAwKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tFcnJvcihbb3B0XSwgJ2V4cGVjdGVkIG9uZSBhcmd1bWVudCcpCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja0Vycm9yKFtvcHQsICdmb28nXSwgJ2ludmFsaWQgaW50IHZhbHVlJykKKworICAgIGRlZiB0ZXN0X25vd2luZG93cyhzZWxmKToKKyAgICAgICAgZm9yIG9wdCBpbiAnLW4nLCAnLS1ub3dpbmRvd3MnOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3Qob3B0PW9wdCk6CisgICAgICAgICAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbb3B0XSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobnMubm93aW5kb3dzKQorCisgICAgZGVmIHRlc3RfZm9yZXZlcihzZWxmKToKKyAgICAgICAgZm9yIG9wdCBpbiAnLUYnLCAnLS1mb3JldmVyJzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG9wdD1vcHQpOgorICAgICAgICAgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoW29wdF0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5zLmZvcmV2ZXIpCisKKworICAgIGRlZiB0ZXN0X3VucmVjb2duaXplZF9hcmd1bWVudChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja0Vycm9yKFsnLS14eHgnXSwgJ3VzYWdlOicpCisKKyAgICBkZWYgdGVzdF9sb25nX29wdGlvbl9fcGFydGlhbChzZWxmKToKKyAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbJy0tcXVpJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShucy5xdWlldCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucy52ZXJib3NlLCAwKQorCisgICAgZGVmIHRlc3RfdHdvX29wdGlvbnMoc2VsZik6CisgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoWyctLXF1aWV0JywgJy0tZXhjbHVkZSddKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobnMucXVpZXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMudmVyYm9zZSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5zLmV4Y2x1ZGUpCisKKyAgICBkZWYgdGVzdF9vcHRpb25fd2l0aF9lbXB0eV9zdHJpbmdfdmFsdWUoc2VsZik6CisgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoWyctLXN0YXJ0JywgJyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLnN0YXJ0LCAnJykKKworICAgIGRlZiB0ZXN0X2FyZyhzZWxmKToKKyAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbJ2ZvbyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLmFyZ3MsIFsnZm9vJ10pCisKKyAgICBkZWYgdGVzdF9vcHRpb25fYW5kX2FyZyhzZWxmKToKKyAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbJy0tcXVpZXQnLCAnZm9vJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShucy5xdWlldCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucy52ZXJib3NlLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLmFyZ3MsIFsnZm9vJ10pCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcmVwcmxpYi5weSBiL0xpYi90ZXN0L3Rlc3RfcmVwcmxpYi5weQppbmRleCBjMjMzYjFkLi5hZTY3ZjA2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3JlcHJsaWIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9yZXBybGliLnB5CkBAIC0zLDExICszLDExIEBACiAgIE5pY2sgTWF0aGV3c29uCiAiIiIKIAotaW1wb3J0IGltcAogaW1wb3J0IHN5cwogaW1wb3J0IG9zCiBpbXBvcnQgc2h1dGlsCiBpbXBvcnQgaW1wb3J0bGliCitpbXBvcnQgaW1wb3J0bGliLnV0aWwKIGltcG9ydCB1bml0dGVzdAogCiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBjcmVhdGVfZW1wdHlfZmlsZSwgdmVyYm9zZQpAQCAtMjQ4LDcgKzI0OCw4IEBACiAgICAgICAgIHNvdXJjZV9wYXRoX2xlbiArPSAyICogKGxlbihzZWxmLmxvbmduYW1lKSArIDEpCiAgICAgICAgICMgYSBwYXRoIHNlcGFyYXRvciArIGBtb2R1bGVfbmFtZWAgKyAiLnB5IgogICAgICAgICBzb3VyY2VfcGF0aF9sZW4gKz0gbGVuKG1vZHVsZV9uYW1lKSArIDEgKyBsZW4oIi5weSIpCi0gICAgICAgIGNhY2hlZF9wYXRoX2xlbiA9IHNvdXJjZV9wYXRoX2xlbiArIGxlbihpbXAuY2FjaGVfZnJvbV9zb3VyY2UoIngucHkiKSkgLSBsZW4oIngucHkiKQorICAgICAgICBjYWNoZWRfcGF0aF9sZW4gPSAoc291cmNlX3BhdGhfbGVuICsKKyAgICAgICAgICAgIGxlbihpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZSgieC5weSIpKSAtIGxlbigieC5weSIpKQogICAgICAgICBpZiBvcy5uYW1lID09ICdudCcgYW5kIGNhY2hlZF9wYXRoX2xlbiA+PSAyNTg6CiAgICAgICAgICAgICAjIFVuZGVyIFdpbmRvd3MsIHRoZSBtYXggcGF0aCBsZW4gaXMgMjYwIGluY2x1ZGluZyBDJ3MgdGVybWluYXRpbmcKICAgICAgICAgICAgICMgTlVMIGNoYXJhY3Rlci4KQEAgLTI1OSw2ICsyNjAsNyBAQAogICAgICAgICAgICAgcHJpbnQoImNhY2hlZF9wYXRoX2xlbiA9IiwgY2FjaGVkX3BhdGhfbGVuKQogCiAgICAgZGVmIHRlc3RfbW9kdWxlKHNlbGYpOgorICAgICAgICBzZWxmLm1heERpZmYgPSBOb25lCiAgICAgICAgIHNlbGYuX2NoZWNrX3BhdGhfbGltaXRhdGlvbnMoc2VsZi5wa2duYW1lKQogICAgICAgICBjcmVhdGVfZW1wdHlfZmlsZShvcy5wYXRoLmpvaW4oc2VsZi5zdWJwa2duYW1lLCBzZWxmLnBrZ25hbWUgKyAnLnB5JykpCiAgICAgICAgIGltcG9ydGxpYi5pbnZhbGlkYXRlX2NhY2hlcygpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3Jlc291cmNlLnB5IGIvTGliL3Rlc3QvdGVzdF9yZXNvdXJjZS5weQppbmRleCAwY2Y2MWNiLi4yZWNhZTBmIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3Jlc291cmNlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcmVzb3VyY2UucHkKQEAgLTEsMyArMSw2IEBACitpbXBvcnQgY29udGV4dGxpYgoraW1wb3J0IHN5cworaW1wb3J0IG9zCiBpbXBvcnQgdW5pdHRlc3QKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogaW1wb3J0IHRpbWUKQEAgLTYxLDcgKzY0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDUpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoLjEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZi5mbHVzaCgpCi0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBsaW1pdF9zZXQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKICAgICAgICAgICAgICAgICAgICAgaWYgbGltaXRfc2V0OgpAQCAtMTI5LDYgKzEzMiwzMyBAQAogICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocGFnZXNpemUsIGludCkKICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwocGFnZXNpemUsIDApCiAKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhzeXMucGxhdGZvcm0gPT0gJ2xpbnV4JywgJ3Rlc3QgcmVxdWlyZXMgTGludXgnKQorICAgIGRlZiB0ZXN0X2xpbnV4X2NvbnN0YW50cyhzZWxmKToKKyAgICAgICAgZm9yIGF0dHIgaW4gWydNU0dRVUVVRScsICdOSUNFJywgJ1JUUFJJTycsICdSVFRJTUUnLCAnU0lHUEVORElORyddOgorICAgICAgICAgICAgd2l0aCBjb250ZXh0bGliLnN1cHByZXNzKEF0dHJpYnV0ZUVycm9yKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZ2V0YXR0cihyZXNvdXJjZSwgJ1JMSU1JVF8nICsgYXR0ciksIGludCkKKworICAgIEBzdXBwb3J0LnJlcXVpcmVzX2ZyZWVic2RfdmVyc2lvbig5KQorICAgIGRlZiB0ZXN0X2ZyZWVic2RfY29udGFudHMoc2VsZik6CisgICAgICAgIGZvciBhdHRyIGluIFsnU1dBUCcsICdTQlNJWkUnLCAnTlBUUyddOgorICAgICAgICAgICAgd2l0aCBjb250ZXh0bGliLnN1cHByZXNzKEF0dHJpYnV0ZUVycm9yKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZ2V0YXR0cihyZXNvdXJjZSwgJ1JMSU1JVF8nICsgYXR0ciksIGludCkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIocmVzb3VyY2UsICdwcmxpbWl0JyksICdubyBwcmxpbWl0JykKKyAgICBAc3VwcG9ydC5yZXF1aXJlc19saW51eF92ZXJzaW9uKDIsIDYsIDM2KQorICAgIGRlZiB0ZXN0X3BybGltaXQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcmVzb3VyY2UucHJsaW1pdCkKKyAgICAgICAgaWYgb3MuZ2V0ZXVpZCgpICE9IDA6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhQZXJtaXNzaW9uRXJyb3IsIHJlc291cmNlLnBybGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCByZXNvdXJjZS5STElNSVRfQVMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFByb2Nlc3NMb29rdXBFcnJvciwgcmVzb3VyY2UucHJsaW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLTEsIHJlc291cmNlLlJMSU1JVF9BUykKKyAgICAgICAgbGltaXQgPSByZXNvdXJjZS5nZXRybGltaXQocmVzb3VyY2UuUkxJTUlUX0FTKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc291cmNlLnBybGltaXQoMCwgcmVzb3VyY2UuUkxJTUlUX0FTKSwgbGltaXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzb3VyY2UucHJsaW1pdCgwLCByZXNvdXJjZS5STElNSVRfQVMsIGxpbWl0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBsaW1pdCkKKworCiBkZWYgdGVzdF9tYWluKHZlcmJvc2U9Tm9uZSk6CiAgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoUmVzb3VyY2VUZXN0KQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3JsY29tcGxldGVyLnB5IGIvTGliL3Rlc3QvdGVzdF9ybGNvbXBsZXRlci5weQppbmRleCAxMWE3YmQyLi4wYjM5MThiIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3JsY29tcGxldGVyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfcmxjb21wbGV0ZXIucHkKQEAgLTEsNCArMSwzIEBACi1mcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IGJ1aWx0aW5zCiBpbXBvcnQgcmxjb21wbGV0ZXIKQEAgLTY1LDkgKzY0LDQ4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgWydlZ2cue30oJy5mb3JtYXQoeCkgZm9yIHggaW4gZGlyKHN0cikKICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgeC5zdGFydHN3aXRoKCdzJyldKQogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoVGVzdFJsY29tcGxldGVyKQorICAgIGRlZiB0ZXN0X2V4Y2Vzc2l2ZV9nZXRhdHRyKHNlbGYpOgorICAgICAgICAjIEVuc3VyZSBnZXRhdHRyKCkgaXMgaW52b2tlZCBubyBtb3JlIHRoYW4gb25jZSBwZXIgYXR0cmlidXRlCisgICAgICAgIGNsYXNzIEZvbzoKKyAgICAgICAgICAgIGNhbGxzID0gMAorICAgICAgICAgICAgQHByb3BlcnR5CisgICAgICAgICAgICBkZWYgYmFyKHNlbGYpOgorICAgICAgICAgICAgICAgIHNlbGYuY2FsbHMgKz0gMQorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIGYgPSBGb28oKQorICAgICAgICBjb21wbGV0ZXIgPSBybGNvbXBsZXRlci5Db21wbGV0ZXIoZGljdChmPWYpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbXBsZXRlci5jb21wbGV0ZSgnZi5iJywgMCksICdmLmJhcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5jYWxscywgMSkKKworICAgIGRlZiB0ZXN0X2NvbXBsZXRlKHNlbGYpOgorICAgICAgICBjb21wbGV0ZXIgPSBybGNvbXBsZXRlci5Db21wbGV0ZXIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbXBsZXRlci5jb21wbGV0ZSgnJywgMCksICdcdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tcGxldGVyLmNvbXBsZXRlKCdhJywgMCksICdhbmQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbXBsZXRlci5jb21wbGV0ZSgnYScsIDEpLCAnYXMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbXBsZXRlci5jb21wbGV0ZSgnYXMnLCAyKSwgJ2Fzc2VydCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tcGxldGVyLmNvbXBsZXRlKCdhbicsIDApLCAnYW5kJykKKworICAgIGRlZiB0ZXN0X2R1cGxpY2F0ZV9nbG9iYWxzKHNlbGYpOgorICAgICAgICBuYW1lc3BhY2UgPSB7CisgICAgICAgICAgICAnRmFsc2UnOiBOb25lLCAgIyBLZXl3b3JkIHZzIGJ1aWx0aW4gdnMgbmFtZXNwYWNlCisgICAgICAgICAgICAnYXNzZXJ0JzogTm9uZSwgICMgS2V5d29yZCB2cyBuYW1lc3BhY2UKKyAgICAgICAgICAgICd0cnknOiBsYW1iZGE6IE5vbmUsICAjIEtleXdvcmQgdnMgY2FsbGFibGUKKyAgICAgICAgICAgICdtZW1vcnl2aWV3JzogTm9uZSwgICMgQ2FsbGFibGUgYnVpbHRpbiB2cyBub24tY2FsbGFibGUKKyAgICAgICAgICAgICdFbGxpcHNpcyc6IGxhbWJkYTogTm9uZSwgICMgTm9uLWNhbGxhYmxlIGJ1aWx0aW4gdnMgY2FsbGFibGUKKyAgICAgICAgfQorICAgICAgICBjb21wbGV0ZXIgPSBybGNvbXBsZXRlci5Db21wbGV0ZXIobmFtZXNwYWNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbXBsZXRlci5jb21wbGV0ZSgnRmFsc2UnLCAwKSwgJ0ZhbHNlJykKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoY29tcGxldGVyLmNvbXBsZXRlKCdGYWxzZScsIDEpKSAgIyBObyBkdXBsaWNhdGVzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tcGxldGVyLmNvbXBsZXRlKCdhc3NlcnQnLCAwKSwgJ2Fzc2VydCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGNvbXBsZXRlci5jb21wbGV0ZSgnYXNzZXJ0JywgMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tcGxldGVyLmNvbXBsZXRlKCd0cnknLCAwKSwgJ3RyeScpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGNvbXBsZXRlci5jb21wbGV0ZSgndHJ5JywgMSkpCisgICAgICAgICMgTm8gb3BlbmluZyBicmFja2V0ICIoIiBiZWNhdXNlIHdlIG92ZXJyb2RlIHRoZSBidWlsdC1pbiBjbGFzcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbXBsZXRlci5jb21wbGV0ZSgnbWVtb3J5dmlldycsIDApLCAnbWVtb3J5dmlldycpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGNvbXBsZXRlci5jb21wbGV0ZSgnbWVtb3J5dmlldycsIDEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbXBsZXRlci5jb21wbGV0ZSgnRWxsaXBzaXMnLCAwKSwgJ0VsbGlwc2lzKCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGNvbXBsZXRlci5jb21wbGV0ZSgnRWxsaXBzaXMnLCAxKSkKIAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3JvYm90cGFyc2VyLnB5IGIvTGliL3Rlc3QvdGVzdF9yb2JvdHBhcnNlci5weQppbmRleCBlYmM4MTljLi5kMDEyNjZmIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3JvYm90cGFyc2VyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfcm9ib3RwYXJzZXIucHkKQEAgLTQsNiArNCwxMiBAQAogZnJvbSB1cmxsaWIuZXJyb3IgaW1wb3J0IFVSTEVycm9yLCBIVFRQRXJyb3IKIGZyb20gdXJsbGliLnJlcXVlc3QgaW1wb3J0IHVybG9wZW4KIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAorZnJvbSBodHRwLnNlcnZlciBpbXBvcnQgQmFzZUhUVFBSZXF1ZXN0SGFuZGxlciwgSFRUUFNlcnZlcgordHJ5OgorICAgIGltcG9ydCB0aHJlYWRpbmcKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICB0aHJlYWRpbmcgPSBOb25lCisKIAogY2xhc3MgUm9ib3RUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGluZGV4PU5vbmUsIHBhcnNlcj1Ob25lLCB1cmw9Tm9uZSwgZ29vZD1Ob25lLCBhZ2VudD1Ob25lKToKQEAgLTI0NywzMyArMjUzLDUyIEBACiBSb2JvdFRlc3QoMTYsIGRvYywgZ29vZCwgYmFkKQogCiAKLWNsYXNzIE5ldHdvcmtUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBSb2JvdEhhbmRsZXIoQmFzZUhUVFBSZXF1ZXN0SGFuZGxlcik6CisKKyAgICBkZWYgZG9fR0VUKHNlbGYpOgorICAgICAgICBzZWxmLnNlbmRfZXJyb3IoNDAzLCAiRm9yYmlkZGVuIGFjY2VzcyIpCisKKyAgICBkZWYgbG9nX21lc3NhZ2Uoc2VsZiwgZm9ybWF0LCAqYXJncyk6CisgICAgICAgIHBhc3MKKworCitAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWRpbmcsICd0aHJlYWRpbmcgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdCcpCitjbGFzcyBQYXNzd29yZFByb3RlY3RlZFNpdGVUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuc2VydmVyID0gSFRUUFNlcnZlcigoc3VwcG9ydC5IT1NULCAwKSwgUm9ib3RIYW5kbGVyKQorCisgICAgICAgIHNlbGYudCA9IHRocmVhZGluZy5UaHJlYWQoCisgICAgICAgICAgICBuYW1lPSdIVFRQU2VydmVyIHNlcnZpbmcnLAorICAgICAgICAgICAgdGFyZ2V0PXNlbGYuc2VydmVyLnNlcnZlX2ZvcmV2ZXIsCisgICAgICAgICAgICAjIFNob3J0IHBvbGwgaW50ZXJ2YWwgdG8gbWFrZSB0aGUgdGVzdCBmaW5pc2ggcXVpY2tseS4KKyAgICAgICAgICAgICMgVGltZSBiZXR3ZWVuIHJlcXVlc3RzIGlzIHNob3J0IGVub3VnaCB0aGF0IHdlIHdvbid0IHdha2UKKyAgICAgICAgICAgICMgdXAgc3B1cmlvdXNseSB0b28gbWFueSB0aW1lcy4KKyAgICAgICAgICAgIGt3YXJncz17J3BvbGxfaW50ZXJ2YWwnOjAuMDF9KQorICAgICAgICBzZWxmLnQuZGFlbW9uID0gVHJ1ZSAgIyBJbiBjYXNlIHRoaXMgZnVuY3Rpb24gcmFpc2VzLgorICAgICAgICBzZWxmLnQuc3RhcnQoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLnNlcnZlci5zaHV0ZG93bigpCisgICAgICAgIHNlbGYudC5qb2luKCkKKyAgICAgICAgc2VsZi5zZXJ2ZXIuc2VydmVyX2Nsb3NlKCkKKworICAgIGRlZiBydW5UZXN0KHNlbGYpOgorICAgICAgICBzZWxmLnRlc3RQYXNzd29yZFByb3RlY3RlZFNpdGUoKQogCiAgICAgZGVmIHRlc3RQYXNzd29yZFByb3RlY3RlZFNpdGUoc2VsZik6Ci0gICAgICAgIHN1cHBvcnQucmVxdWlyZXMoJ25ldHdvcmsnKQotICAgICAgICB3aXRoIHN1cHBvcnQudHJhbnNpZW50X2ludGVybmV0KCdtdWVibGVzbW9yYWxlZGEuY29tJyk6Ci0gICAgICAgICAgICB1cmwgPSAnaHR0cDovL211ZWJsZXNtb3JhbGVkYS5jb20nCi0gICAgICAgICAgICByb2JvdHNfdXJsID0gdXJsICsgIi9yb2JvdHMudHh0IgotICAgICAgICAgICAgIyBGaXJzdCBjaGVjayB0aGUgVVJMIGlzIHVzYWJsZSBmb3Igb3VyIHB1cnBvc2VzLCBzaW5jZSB0aGUKLSAgICAgICAgICAgICMgdGVzdCBzaXRlIGlzIGEgYml0IGZsYWt5LgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHVybG9wZW4ocm9ib3RzX3VybCkKLSAgICAgICAgICAgIGV4Y2VwdCBIVFRQRXJyb3IgYXMgZToKLSAgICAgICAgICAgICAgICBpZiBlLmNvZGUgbm90IGluIHs0MDEsIDQwM306Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoCi0gICAgICAgICAgICAgICAgICAgICAgICAiJXIgc2hvdWxkIHJldHVybiBhIDQwMSBvciA0MDMgSFRUUCBlcnJvciwgbm90ICVyIgotICAgICAgICAgICAgICAgICAgICAgICAgJSAocm9ib3RzX3VybCwgZS5jb2RlKSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgKLSAgICAgICAgICAgICAgICAgICAgIiVyIHNob3VsZCByZXR1cm4gYSA0MDEgb3IgNDAzIEhUVFAgZXJyb3IsIG5vdCBzdWNjZWVkIgotICAgICAgICAgICAgICAgICAgICAlIChyb2JvdHNfdXJsKSkKLSAgICAgICAgICAgIHBhcnNlciA9IHVybGxpYi5yb2JvdHBhcnNlci5Sb2JvdEZpbGVQYXJzZXIoKQotICAgICAgICAgICAgcGFyc2VyLnNldF91cmwodXJsKQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHBhcnNlci5yZWFkKCkKLSAgICAgICAgICAgIGV4Y2VwdCBVUkxFcnJvcjoKLSAgICAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCclcyBpcyB1bmF2YWlsYWJsZScgJSB1cmwpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlci5jYW5fZmV0Y2goIioiLCByb2JvdHNfdXJsKSwgRmFsc2UpCisgICAgICAgIGFkZHIgPSBzZWxmLnNlcnZlci5zZXJ2ZXJfYWRkcmVzcworICAgICAgICB1cmwgPSAnaHR0cDovLycgKyBzdXBwb3J0LkhPU1QgKyAnOicgKyBzdHIoYWRkclsxXSkKKyAgICAgICAgcm9ib3RzX3VybCA9IHVybCArICIvcm9ib3RzLnR4dCIKKyAgICAgICAgcGFyc2VyID0gdXJsbGliLnJvYm90cGFyc2VyLlJvYm90RmlsZVBhcnNlcigpCisgICAgICAgIHBhcnNlci5zZXRfdXJsKHVybCkKKyAgICAgICAgcGFyc2VyLnJlYWQoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHBhcnNlci5jYW5fZmV0Y2goIioiLCByb2JvdHNfdXJsKSkKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gJyVzJyAlIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fCisKK2NsYXNzIE5ldHdvcmtUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBAdW5pdHRlc3Quc2tpcCgnZG9lcyBub3QgaGFuZGxlIHRoZSBnemlwIGVuY29kaW5nIGRlbGl2ZXJlZCBieSBweWRvdG9yZycpCiAgICAgZGVmIHRlc3RQeXRob25Pcmcoc2VsZik6CkBAIC0yODgsOCArMzEzLDggQEAKIGRlZiBsb2FkX3Rlc3RzKGxvYWRlciwgc3VpdGUsIHBhdHRlcm4pOgogICAgIHN1aXRlID0gdW5pdHRlc3QubWFrZVN1aXRlKE5ldHdvcmtUZXN0Q2FzZSkKICAgICBzdWl0ZS5hZGRUZXN0KHRlc3RzKQorICAgIHN1aXRlLmFkZFRlc3QoUGFzc3dvcmRQcm90ZWN0ZWRTaXRlVGVzdENhc2UoKSkKICAgICByZXR1cm4gc3VpdGUKIAogaWYgX19uYW1lX189PSdfX21haW5fXyc6Ci0gICAgc3VwcG9ydC51c2VfcmVzb3VyY2VzID0gWyduZXR3b3JrJ10KICAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcnVucHkucHkgYi9MaWIvdGVzdC90ZXN0X3J1bnB5LnB5CmluZGV4IDJkZGJhMzQuLjc4NmI4MTMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcnVucHkucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9ydW5weS5weQpAQCAtNSw3ICs1LDcgQEAKIGltcG9ydCBzeXMKIGltcG9ydCByZQogaW1wb3J0IHRlbXBmaWxlCi1pbXBvcnQgaW1wb3J0bGliCitpbXBvcnQgaW1wb3J0bGliLCBpbXBvcnRsaWIubWFjaGluZXJ5LCBpbXBvcnRsaWIudXRpbAogaW1wb3J0IHB5X2NvbXBpbGUKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCAoCiAgICAgZm9yZ2V0LCBtYWtlX2xlZ2FjeV9weWMsIHJ1bl91bml0dGVzdCwgdW5sb2FkLCB2ZXJib3NlLCBub190cmFjaW5nLApAQCAtNDcsNiArNDcsNyBAQAogICAgICJfX2NhY2hlZF9fIjogTm9uZSwKICAgICAiX19wYWNrYWdlX18iOiBOb25lLAogICAgICJfX2RvY19fIjogTm9uZSwKKyAgICAiX19zcGVjX18iOiBOb25lCiB9CiBleGFtcGxlX25hbWVzcGFjZSA9ICB7CiAgICAgInN5cyI6IHN5cywKQEAgLTY3LDExICs2OCwxOSBAQAogICAgICMgdGVzdGluZyBvY2N1cnMgYXQgdGhvc2UgdXBwZXIgbGF5ZXJzIGFzIHdlbGwsIG5vdCBqdXN0IGF0IHRoZSB1dGlsaXR5CiAgICAgIyBsYXllcgogCisgICAgIyBGaWd1cmluZyBvdXQgdGhlIGxvYWRlciBkZXRhaWxzIGluIGFkdmFuY2UgaXMgaGFyZCB0byBkbywgc28gd2Ugc2tpcAorICAgICMgY2hlY2tpbmcgdGhlIGZ1bGwgZGV0YWlscyBvZiBsb2FkZXIgYW5kIGxvYWRlcl9zdGF0ZQorICAgIENIRUNLRURfU1BFQ19BVFRSSUJVVEVTID0gWyJuYW1lIiwgInBhcmVudCIsICJvcmlnaW4iLCAiY2FjaGVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzX2xvY2F0aW9uIiwgInN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zIl0KKwogICAgIGRlZiBhc3NlcnROYW1lc3BhY2VNYXRjaGVzKHNlbGYsIHJlc3VsdF9ucywgZXhwZWN0ZWRfbnMpOgogICAgICAgICAiIiJDaGVjayB0d28gbmFtZXNwYWNlcyBtYXRjaC4KIAogICAgICAgICAgICBJZ25vcmVzIGFueSB1bnNwZWNpZmllZCBpbnRlcnByZXRlciBjcmVhdGVkIG5hbWVzCiAgICAgICAgICIiIgorICAgICAgICAjIEF2b2lkIHNpZGUgZWZmZWN0cworICAgICAgICByZXN1bHRfbnMgPSByZXN1bHRfbnMuY29weSgpCisgICAgICAgIGV4cGVjdGVkX25zID0gZXhwZWN0ZWRfbnMuY29weSgpCiAgICAgICAgICMgSW1wbHMgYXJlIHBlcm1pdHRlZCB0byBhZGQgZXh0cmEgbmFtZXMsIHNvIGZpbHRlciB0aGVtIG91dAogICAgICAgICBmb3IgayBpbiBsaXN0KHJlc3VsdF9ucyk6CiAgICAgICAgICAgICBpZiBrLnN0YXJ0c3dpdGgoIl9fIikgYW5kIGsuZW5kc3dpdGgoIl9fIik6CkBAIC03OSw3ICs4OCwyNSBAQAogICAgICAgICAgICAgICAgICAgICByZXN1bHRfbnMucG9wKGspCiAgICAgICAgICAgICAgICAgaWYgayBub3QgaW4gZXhwZWN0ZWRfbnNbIm5lc3RlZCJdOgogICAgICAgICAgICAgICAgICAgICByZXN1bHRfbnNbIm5lc3RlZCJdLnBvcChrKQotICAgICAgICAjIERvbid0IHVzZSBkaXJlY3QgZGljdCBjb21wYXJpc29uIC0gdGhlIGRpZmZzIGFyZSB0b28gaGFyZCB0byBkZWJ1ZworICAgICAgICAjIFNwZWMgZXF1YWxpdHkgaW5jbHVkZXMgdGhlIGxvYWRlciwgc28gd2UgdGFrZSB0aGUgc3BlYyBvdXQgb2YgdGhlCisgICAgICAgICMgcmVzdWx0IG5hbWVzcGFjZSBhbmQgY2hlY2sgdGhhdCBzZXBhcmF0ZWx5CisgICAgICAgIHJlc3VsdF9zcGVjID0gcmVzdWx0X25zLnBvcCgiX19zcGVjX18iKQorICAgICAgICBleHBlY3RlZF9zcGVjID0gZXhwZWN0ZWRfbnMucG9wKCJfX3NwZWNfXyIpCisgICAgICAgIGlmIGV4cGVjdGVkX3NwZWMgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlc3VsdF9zcGVjKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBJZiBhbiBleHBlY3RlZCBsb2FkZXIgaXMgc2V0LCB3ZSBqdXN0IGNoZWNrIHdlIGdvdCB0aGUgcmlnaHQKKyAgICAgICAgICAgICMgdHlwZSwgcmF0aGVyIHRoYW4gY2hlY2tpbmcgZm9yIGZ1bGwgZXF1YWxpdHkKKyAgICAgICAgICAgIGlmIGV4cGVjdGVkX3NwZWMubG9hZGVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShyZXN1bHRfc3BlYy5sb2FkZXIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZShleHBlY3RlZF9zcGVjLmxvYWRlcikpCisgICAgICAgICAgICBmb3IgYXR0ciBpbiBzZWxmLkNIRUNLRURfU1BFQ19BVFRSSUJVVEVTOgorICAgICAgICAgICAgICAgIGsgPSAiX19zcGVjX18uIiArIGF0dHIKKyAgICAgICAgICAgICAgICBhY3R1YWwgPSAoaywgZ2V0YXR0cihyZXN1bHRfc3BlYywgYXR0cikpCisgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSAoaywgZ2V0YXR0cihleHBlY3RlZF9zcGVjLCBhdHRyKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQpCisgICAgICAgICMgRm9yIHRoZSByZXN0LCB3ZSBzdGlsbCBkb24ndCB1c2UgZGlyZWN0IGRpY3QgY29tcGFyaXNvbiBvbiB0aGUKKyAgICAgICAgIyBuYW1lc3BhY2UsIGFzIHRoZSBkaWZmcyBhcmUgdG9vIGhhcmQgdG8gZGVidWcgaWYgYW55dGhpbmcgYnJlYWtzCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KHJlc3VsdF9ucyksIHNldChleHBlY3RlZF9ucykpCiAgICAgICAgIGZvciBrIGluIHJlc3VsdF9uczoKICAgICAgICAgICAgIGFjdHVhbCA9IChrLCByZXN1bHRfbnNba10pCkBAIC0xMzAsMTIgKzE1NywxNiBAQAogICAgICAgICBtb2RfZm5hbWUgPSAiU29tZSBvdGhlciBub25zZW5zZSIKICAgICAgICAgbW9kX2xvYWRlciA9ICJOb3cgeW91J3JlIGp1c3QgYmVpbmcgc2lsbHkiCiAgICAgICAgIG1vZF9wYWNrYWdlID0gJycgIyBUcmVhdCBhcyBhIHRvcCBsZXZlbCBtb2R1bGUKKyAgICAgICAgbW9kX3NwZWMgPSBpbXBvcnRsaWIubWFjaGluZXJ5Lk1vZHVsZVNwZWMobW9kX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbj1tb2RfZm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlcj1tb2RfbG9hZGVyKQogICAgICAgICBleHBlY3RlZF9ucyA9IGV4YW1wbGVfbmFtZXNwYWNlLmNvcHkoKQogICAgICAgICBleHBlY3RlZF9ucy51cGRhdGUoewogICAgICAgICAgICAgIl9fbmFtZV9fIjogbW9kX25hbWUsCiAgICAgICAgICAgICAiX19maWxlX18iOiBtb2RfZm5hbWUsCiAgICAgICAgICAgICAiX19sb2FkZXJfXyI6IG1vZF9sb2FkZXIsCiAgICAgICAgICAgICAiX19wYWNrYWdlX18iOiBtb2RfcGFja2FnZSwKKyAgICAgICAgICAgICJfX3NwZWNfXyI6IG1vZF9zcGVjLAogICAgICAgICAgICAgInJ1bl9hcmd2MCI6IG1vZF9mbmFtZSwKICAgICAgICAgICAgICJydW5fbmFtZV9pbl9zeXNfbW9kdWxlcyI6IFRydWUsCiAgICAgICAgICAgICAibW9kdWxlX2luX3N5c19tb2R1bGVzIjogVHJ1ZSwKQEAgLTE0NCw5ICsxNzUsNyBAQAogICAgICAgICAgICAgcmV0dXJuIF9ydW5fbW9kdWxlX2NvZGUoZXhhbXBsZV9zb3VyY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0X2dsb2JhbHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZF9mbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZF9sb2FkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RfcGFja2FnZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZF9zcGVjKQogICAgICAgICBzZWxmLmNoZWNrX2NvZGVfZXhlY3V0aW9uKGNyZWF0ZV9ucywgZXhwZWN0ZWRfbnMpCiAKICMgVE9ETzogVXNlIHNlbGYuYWRkQ2xlYW51cCB0byBnZXQgcmlkIG9mIGEgbG90IG9mIHRyeS1maW5hbGx5IGJsb2NrcwpAQCAtMTc2LDMxICsyMDUsNDMgQEAKICAgICBkZWYgdGVzdF9saWJyYXJ5X21vZHVsZShzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChydW5fbW9kdWxlKCJydW5weSIpWyJfX25hbWVfXyJdLCAicnVucHkiKQogCi0gICAgZGVmIF9hZGRfcGtnX2RpcihzZWxmLCBwa2dfZGlyKToKKyAgICBkZWYgX2FkZF9wa2dfZGlyKHNlbGYsIHBrZ19kaXIsIG5hbWVzcGFjZT1GYWxzZSk6CiAgICAgICAgIG9zLm1rZGlyKHBrZ19kaXIpCisgICAgICAgIGlmIG5hbWVzcGFjZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCiAgICAgICAgIHBrZ19mbmFtZSA9IG9zLnBhdGguam9pbihwa2dfZGlyLCAiX19pbml0X18ucHkiKQogICAgICAgICBjcmVhdGVfZW1wdHlfZmlsZShwa2dfZm5hbWUpCiAgICAgICAgIHJldHVybiBwa2dfZm5hbWUKIAotICAgIGRlZiBfbWFrZV9wa2coc2VsZiwgc291cmNlLCBkZXB0aCwgbW9kX2Jhc2U9InJ1bnB5X3Rlc3QiKToKKyAgICBkZWYgX21ha2VfcGtnKHNlbGYsIHNvdXJjZSwgZGVwdGgsIG1vZF9iYXNlPSJydW5weV90ZXN0IiwKKyAgICAgICAgICAgICAgICAgICAgICosIG5hbWVzcGFjZT1GYWxzZSwgcGFyZW50X25hbWVzcGFjZXM9RmFsc2UpOgorICAgICAgICAjIEVuZm9yY2UgYSBjb3VwbGUgb2YgaW50ZXJuYWwgc2FuaXR5IGNoZWNrcyBvbiB0ZXN0IGNhc2VzCisgICAgICAgIGlmIChuYW1lc3BhY2Ugb3IgcGFyZW50X25hbWVzcGFjZXMpIGFuZCBub3QgZGVwdGg6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIkNhbid0IG1hcmsgdG9wIGxldmVsIG1vZHVsZSBhcyBhICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZXNwYWNlIHBhY2thZ2UiKQogICAgICAgICBwa2dfbmFtZSA9ICJfX3J1bnB5X3BrZ19fIgogICAgICAgICB0ZXN0X2ZuYW1lID0gbW9kX2Jhc2Urb3MuZXh0c2VwKyJweSIKICAgICAgICAgcGtnX2RpciA9IHN1Yl9kaXIgPSBvcy5wYXRoLnJlYWxwYXRoKHRlbXBmaWxlLm1rZHRlbXAoKSkKICAgICAgICAgaWYgdmVyYm9zZSA+IDE6IHByaW50KCIgIFBhY2thZ2UgdHJlZSBpbjoiLCBzdWJfZGlyKQogICAgICAgICBzeXMucGF0aC5pbnNlcnQoMCwgcGtnX2RpcikKICAgICAgICAgaWYgdmVyYm9zZSA+IDE6IHByaW50KCIgIFVwZGF0ZWQgc3lzLnBhdGg6Iiwgc3lzLnBhdGhbMF0pCi0gICAgICAgIGZvciBpIGluIHJhbmdlKGRlcHRoKToKLSAgICAgICAgICAgIHN1Yl9kaXIgPSBvcy5wYXRoLmpvaW4oc3ViX2RpciwgcGtnX25hbWUpCi0gICAgICAgICAgICBwa2dfZm5hbWUgPSBzZWxmLl9hZGRfcGtnX2RpcihzdWJfZGlyKQotICAgICAgICAgICAgaWYgdmVyYm9zZSA+IDE6IHByaW50KCIgIE5leHQgbGV2ZWwgaW46Iiwgc3ViX2RpcikKLSAgICAgICAgICAgIGlmIHZlcmJvc2UgPiAxOiBwcmludCgiICBDcmVhdGVkOiIsIHBrZ19mbmFtZSkKKyAgICAgICAgaWYgZGVwdGg6CisgICAgICAgICAgICBuYW1lc3BhY2VfZmxhZ3MgPSBbcGFyZW50X25hbWVzcGFjZXNdICogZGVwdGgKKyAgICAgICAgICAgIG5hbWVzcGFjZV9mbGFnc1stMV0gPSBuYW1lc3BhY2UKKyAgICAgICAgICAgIGZvciBuYW1lc3BhY2VfZmxhZyBpbiBuYW1lc3BhY2VfZmxhZ3M6CisgICAgICAgICAgICAgICAgc3ViX2RpciA9IG9zLnBhdGguam9pbihzdWJfZGlyLCBwa2dfbmFtZSkKKyAgICAgICAgICAgICAgICBwa2dfZm5hbWUgPSBzZWxmLl9hZGRfcGtnX2RpcihzdWJfZGlyLCBuYW1lc3BhY2VfZmxhZykKKyAgICAgICAgICAgICAgICBpZiB2ZXJib3NlID4gMTogcHJpbnQoIiAgTmV4dCBsZXZlbCBpbjoiLCBzdWJfZGlyKQorICAgICAgICAgICAgICAgIGlmIHZlcmJvc2UgPiAxOiBwcmludCgiICBDcmVhdGVkOiIsIHBrZ19mbmFtZSkKICAgICAgICAgbW9kX2ZuYW1lID0gb3MucGF0aC5qb2luKHN1Yl9kaXIsIHRlc3RfZm5hbWUpCiAgICAgICAgIG1vZF9maWxlID0gb3Blbihtb2RfZm5hbWUsICJ3IikKICAgICAgICAgbW9kX2ZpbGUud3JpdGUoc291cmNlKQogICAgICAgICBtb2RfZmlsZS5jbG9zZSgpCiAgICAgICAgIGlmIHZlcmJvc2UgPiAxOiBwcmludCgiICBDcmVhdGVkOiIsIG1vZF9mbmFtZSkKICAgICAgICAgbW9kX25hbWUgPSAocGtnX25hbWUrIi4iKSpkZXB0aCArIG1vZF9iYXNlCi0gICAgICAgIHJldHVybiBwa2dfZGlyLCBtb2RfZm5hbWUsIG1vZF9uYW1lCisgICAgICAgIG1vZF9zcGVjID0gaW1wb3J0bGliLnV0aWwuc3BlY19mcm9tX2ZpbGVfbG9jYXRpb24obW9kX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kX2ZuYW1lKQorICAgICAgICByZXR1cm4gcGtnX2RpciwgbW9kX2ZuYW1lLCBtb2RfbmFtZSwgbW9kX3NwZWMKIAogICAgIGRlZiBfZGVsX3BrZyhzZWxmLCB0b3AsIGRlcHRoLCBtb2RfbmFtZSk6CiAgICAgICAgIGZvciBlbnRyeSBpbiBsaXN0KHN5cy5tb2R1bGVzKToKQEAgLTIzMCwxOSArMjcxLDI5IEBACiAgICAgZGVmIF9maXhfbnNfZm9yX2xlZ2FjeV9weWMoc2VsZiwgbnMsIGFsdGVyX3N5cyk6CiAgICAgICAgIGNoYXJfdG9fYWRkID0gImMiIGlmIF9fZGVidWdfXyBlbHNlICJvIgogICAgICAgICBuc1siX19maWxlX18iXSArPSBjaGFyX3RvX2FkZAorICAgICAgICBuc1siX19jYWNoZWRfXyJdID0gbnNbIl9fZmlsZV9fIl0KKyAgICAgICAgc3BlYyA9IG5zWyJfX3NwZWNfXyJdCisgICAgICAgIG5ld19zcGVjID0gaW1wb3J0bGliLnV0aWwuc3BlY19mcm9tX2ZpbGVfbG9jYXRpb24oc3BlYy5uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zWyJfX2ZpbGVfXyJdKQorICAgICAgICBuc1siX19zcGVjX18iXSA9IG5ld19zcGVjCiAgICAgICAgIGlmIGFsdGVyX3N5czoKICAgICAgICAgICAgIG5zWyJydW5fYXJndjAiXSArPSBjaGFyX3RvX2FkZAogCiAKLSAgICBkZWYgX2NoZWNrX21vZHVsZShzZWxmLCBkZXB0aCwgYWx0ZXJfc3lzPUZhbHNlKToKLSAgICAgICAgcGtnX2RpciwgbW9kX2ZuYW1lLCBtb2RfbmFtZSA9ICgKLSAgICAgICAgICAgICAgIHNlbGYuX21ha2VfcGtnKGV4YW1wbGVfc291cmNlLCBkZXB0aCkpCisgICAgZGVmIF9jaGVja19tb2R1bGUoc2VsZiwgZGVwdGgsIGFsdGVyX3N5cz1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAqLCBuYW1lc3BhY2U9RmFsc2UsIHBhcmVudF9uYW1lc3BhY2VzPUZhbHNlKToKKyAgICAgICAgcGtnX2RpciwgbW9kX2ZuYW1lLCBtb2RfbmFtZSwgbW9kX3NwZWMgPSAoCisgICAgICAgICAgICAgICBzZWxmLl9tYWtlX3BrZyhleGFtcGxlX3NvdXJjZSwgZGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lc3BhY2U9bmFtZXNwYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50X25hbWVzcGFjZXM9cGFyZW50X25hbWVzcGFjZXMpKQogICAgICAgICBmb3JnZXQobW9kX25hbWUpCiAgICAgICAgIGV4cGVjdGVkX25zID0gZXhhbXBsZV9uYW1lc3BhY2UuY29weSgpCiAgICAgICAgIGV4cGVjdGVkX25zLnVwZGF0ZSh7CiAgICAgICAgICAgICAiX19uYW1lX18iOiBtb2RfbmFtZSwKICAgICAgICAgICAgICJfX2ZpbGVfXyI6IG1vZF9mbmFtZSwKKyAgICAgICAgICAgICJfX2NhY2hlZF9fIjogbW9kX3NwZWMuY2FjaGVkLAogICAgICAgICAgICAgIl9fcGFja2FnZV9fIjogbW9kX25hbWUucnBhcnRpdGlvbigiLiIpWzBdLAorICAgICAgICAgICAgIl9fc3BlY19fIjogbW9kX3NwZWMsCiAgICAgICAgIH0pCiAgICAgICAgIGlmIGFsdGVyX3N5czoKICAgICAgICAgICAgIGV4cGVjdGVkX25zLnVwZGF0ZSh7CkBAIC0yNjksMTYgKzMyMCwyMSBAQAogICAgICAgICAgICAgc2VsZi5fZGVsX3BrZyhwa2dfZGlyLCBkZXB0aCwgbW9kX25hbWUpCiAgICAgICAgIGlmIHZlcmJvc2UgPiAxOiBwcmludCgiTW9kdWxlIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseSIpCiAKLSAgICBkZWYgX2NoZWNrX3BhY2thZ2Uoc2VsZiwgZGVwdGgsIGFsdGVyX3N5cz1GYWxzZSk6Ci0gICAgICAgIHBrZ19kaXIsIG1vZF9mbmFtZSwgbW9kX25hbWUgPSAoCi0gICAgICAgICAgICAgICBzZWxmLl9tYWtlX3BrZyhleGFtcGxlX3NvdXJjZSwgZGVwdGgsICJfX21haW5fXyIpKQorICAgIGRlZiBfY2hlY2tfcGFja2FnZShzZWxmLCBkZXB0aCwgYWx0ZXJfc3lzPUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAqLCBuYW1lc3BhY2U9RmFsc2UsIHBhcmVudF9uYW1lc3BhY2VzPUZhbHNlKToKKyAgICAgICAgcGtnX2RpciwgbW9kX2ZuYW1lLCBtb2RfbmFtZSwgbW9kX3NwZWMgPSAoCisgICAgICAgICAgICAgICBzZWxmLl9tYWtlX3BrZyhleGFtcGxlX3NvdXJjZSwgZGVwdGgsICJfX21haW5fXyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lc3BhY2U9bmFtZXNwYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50X25hbWVzcGFjZXM9cGFyZW50X25hbWVzcGFjZXMpKQogICAgICAgICBwa2dfbmFtZSA9IG1vZF9uYW1lLnJwYXJ0aXRpb24oIi4iKVswXQogICAgICAgICBmb3JnZXQobW9kX25hbWUpCiAgICAgICAgIGV4cGVjdGVkX25zID0gZXhhbXBsZV9uYW1lc3BhY2UuY29weSgpCiAgICAgICAgIGV4cGVjdGVkX25zLnVwZGF0ZSh7CiAgICAgICAgICAgICAiX19uYW1lX18iOiBtb2RfbmFtZSwKICAgICAgICAgICAgICJfX2ZpbGVfXyI6IG1vZF9mbmFtZSwKKyAgICAgICAgICAgICJfX2NhY2hlZF9fIjogaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UobW9kX2ZuYW1lKSwKICAgICAgICAgICAgICJfX3BhY2thZ2VfXyI6IHBrZ19uYW1lLAorICAgICAgICAgICAgIl9fc3BlY19fIjogbW9kX3NwZWMsCiAgICAgICAgIH0pCiAgICAgICAgIGlmIGFsdGVyX3N5czoKICAgICAgICAgICAgIGV4cGVjdGVkX25zLnVwZGF0ZSh7CkBAIC0zMzQsNyArMzkwLDcgQEAKIGZyb20gLiBpbXBvcnQgc2libGluZwogZnJvbSAuLnVuY2xlLmNvdXNpbiBpbXBvcnQgbmVwaGV3CiAiIiIKLSAgICAgICAgcGtnX2RpciwgbW9kX2ZuYW1lLCBtb2RfbmFtZSA9ICgKKyAgICAgICAgcGtnX2RpciwgbW9kX2ZuYW1lLCBtb2RfbmFtZSwgbW9kX3NwZWMgPSAoCiAgICAgICAgICAgICAgICBzZWxmLl9tYWtlX3BrZyhjb250ZW50cywgZGVwdGgpKQogICAgICAgICBpZiBydW5fbmFtZSBpcyBOb25lOgogICAgICAgICAgICAgZXhwZWN0ZWRfbmFtZSA9IG1vZF9uYW1lCkBAIC0zNzMsMTEgKzQyOSwzMSBAQAogICAgICAgICAgICAgaWYgdmVyYm9zZSA+IDE6IHByaW50KCJUZXN0aW5nIHBhY2thZ2UgZGVwdGg6IiwgZGVwdGgpCiAgICAgICAgICAgICBzZWxmLl9jaGVja19tb2R1bGUoZGVwdGgpCiAKKyAgICBkZWYgdGVzdF9ydW5fbW9kdWxlX2luX25hbWVzcGFjZV9wYWNrYWdlKHNlbGYpOgorICAgICAgICBmb3IgZGVwdGggaW4gcmFuZ2UoMSwgNCk6CisgICAgICAgICAgICBpZiB2ZXJib3NlID4gMTogcHJpbnQoIlRlc3RpbmcgcGFja2FnZSBkZXB0aDoiLCBkZXB0aCkKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX21vZHVsZShkZXB0aCwgbmFtZXNwYWNlPVRydWUsIHBhcmVudF9uYW1lc3BhY2VzPVRydWUpCisKICAgICBkZWYgdGVzdF9ydW5fcGFja2FnZShzZWxmKToKICAgICAgICAgZm9yIGRlcHRoIGluIHJhbmdlKDEsIDQpOgogICAgICAgICAgICAgaWYgdmVyYm9zZSA+IDE6IHByaW50KCJUZXN0aW5nIHBhY2thZ2UgZGVwdGg6IiwgZGVwdGgpCiAgICAgICAgICAgICBzZWxmLl9jaGVja19wYWNrYWdlKGRlcHRoKQogCisgICAgZGVmIHRlc3RfcnVuX3BhY2thZ2VfaW5fbmFtZXNwYWNlX3BhY2thZ2Uoc2VsZik6CisgICAgICAgIGZvciBkZXB0aCBpbiByYW5nZSgxLCA0KToKKyAgICAgICAgICAgIGlmIHZlcmJvc2UgPiAxOiBwcmludCgiVGVzdGluZyBwYWNrYWdlIGRlcHRoOiIsIGRlcHRoKQorICAgICAgICAgICAgc2VsZi5fY2hlY2tfcGFja2FnZShkZXB0aCwgcGFyZW50X25hbWVzcGFjZXM9VHJ1ZSkKKworICAgIGRlZiB0ZXN0X3J1bl9uYW1lc3BhY2VfcGFja2FnZShzZWxmKToKKyAgICAgICAgZm9yIGRlcHRoIGluIHJhbmdlKDEsIDQpOgorICAgICAgICAgICAgaWYgdmVyYm9zZSA+IDE6IHByaW50KCJUZXN0aW5nIHBhY2thZ2UgZGVwdGg6IiwgZGVwdGgpCisgICAgICAgICAgICBzZWxmLl9jaGVja19wYWNrYWdlKGRlcHRoLCBuYW1lc3BhY2U9VHJ1ZSkKKworICAgIGRlZiB0ZXN0X3J1bl9uYW1lc3BhY2VfcGFja2FnZV9pbl9uYW1lc3BhY2VfcGFja2FnZShzZWxmKToKKyAgICAgICAgZm9yIGRlcHRoIGluIHJhbmdlKDEsIDQpOgorICAgICAgICAgICAgaWYgdmVyYm9zZSA+IDE6IHByaW50KCJUZXN0aW5nIHBhY2thZ2UgZGVwdGg6IiwgZGVwdGgpCisgICAgICAgICAgICBzZWxmLl9jaGVja19wYWNrYWdlKGRlcHRoLCBuYW1lc3BhY2U9VHJ1ZSwgcGFyZW50X25hbWVzcGFjZXM9VHJ1ZSkKKwogICAgIGRlZiB0ZXN0X3J1bl9tb2R1bGVfYWx0ZXJfc3lzKHNlbGYpOgogICAgICAgICBmb3IgZGVwdGggaW4gcmFuZ2UoNCk6CiAgICAgICAgICAgICBpZiB2ZXJib3NlID4gMTogcHJpbnQoIlRlc3RpbmcgcGFja2FnZSBkZXB0aDoiLCBkZXB0aCkKQEAgLTQwMSwxNCArNDc3LDE2IEBACiAgICAgZGVmIHRlc3RfcnVuX25hbWUoc2VsZik6CiAgICAgICAgIGRlcHRoID0gMQogICAgICAgICBydW5fbmFtZSA9ICJBbmQgbm93IGZvciBzb21ldGhpbmcgY29tcGxldGVseSBkaWZmZXJlbnQiCi0gICAgICAgIHBrZ19kaXIsIG1vZF9mbmFtZSwgbW9kX25hbWUgPSAoCisgICAgICAgIHBrZ19kaXIsIG1vZF9mbmFtZSwgbW9kX25hbWUsIG1vZF9zcGVjID0gKAogICAgICAgICAgICAgICAgc2VsZi5fbWFrZV9wa2coZXhhbXBsZV9zb3VyY2UsIGRlcHRoKSkKICAgICAgICAgZm9yZ2V0KG1vZF9uYW1lKQogICAgICAgICBleHBlY3RlZF9ucyA9IGV4YW1wbGVfbmFtZXNwYWNlLmNvcHkoKQogICAgICAgICBleHBlY3RlZF9ucy51cGRhdGUoewogICAgICAgICAgICAgIl9fbmFtZV9fIjogcnVuX25hbWUsCiAgICAgICAgICAgICAiX19maWxlX18iOiBtb2RfZm5hbWUsCisgICAgICAgICAgICAiX19jYWNoZWRfXyI6IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKG1vZF9mbmFtZSksCiAgICAgICAgICAgICAiX19wYWNrYWdlX18iOiBtb2RfbmFtZS5ycGFydGl0aW9uKCIuIilbMF0sCisgICAgICAgICAgICAiX19zcGVjX18iOiBtb2Rfc3BlYywKICAgICAgICAgfSkKICAgICAgICAgZGVmIGNyZWF0ZV9ucyhpbml0X2dsb2JhbHMpOgogICAgICAgICAgICAgcmV0dXJuIHJ1bl9tb2R1bGUobW9kX25hbWUsIGluaXRfZ2xvYmFscywgcnVuX25hbWUpCkBAIC00MzcsNyArNTE1LDcgQEAKICAgICAgICAgcGtnX25hbWUgPSAiLiIuam9pbihbYmFzZV9uYW1lXSAqIG1heF9kZXB0aCkKICAgICAgICAgZXhwZWN0ZWRfcGFja2FnZXMuYWRkKHBrZ19uYW1lKQogICAgICAgICBleHBlY3RlZF9tb2R1bGVzLmFkZChwa2dfbmFtZSArICIucnVucHlfdGVzdCIpCi0gICAgICAgIHBrZ19kaXIsIG1vZF9mbmFtZSwgbW9kX25hbWUgPSAoCisgICAgICAgIHBrZ19kaXIsIG1vZF9mbmFtZSwgbW9kX25hbWUsIG1vZF9zcGVjID0gKAogICAgICAgICAgICAgICAgc2VsZi5fbWFrZV9wa2coIiIsIG1heF9kZXB0aCkpCiAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzZWxmLl9kZWxfcGtnLCBwa2dfZGlyLCBtYXhfZGVwdGgsIG1vZF9uYW1lKQogICAgICAgICBmb3IgZGVwdGggaW4gcmFuZ2UoMiwgbWF4X2RlcHRoKzEpOgpAQCAtNDU1LDIxICs1MzMsMzkgQEAKIGNsYXNzIFJ1blBhdGhUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSwgQ29kZUV4ZWN1dGlvbk1peGluKToKICAgICAiIiJVbml0IHRlc3RzIGZvciBydW5weS5ydW5fcGF0aCIiIgogCi0gICAgZGVmIF9tYWtlX3Rlc3Rfc2NyaXB0KHNlbGYsIHNjcmlwdF9kaXIsIHNjcmlwdF9iYXNlbmFtZSwgc291cmNlPU5vbmUpOgorICAgIGRlZiBfbWFrZV90ZXN0X3NjcmlwdChzZWxmLCBzY3JpcHRfZGlyLCBzY3JpcHRfYmFzZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZT1Ob25lLCBvbWl0X3N1ZmZpeD1GYWxzZSk6CiAgICAgICAgIGlmIHNvdXJjZSBpcyBOb25lOgogICAgICAgICAgICAgc291cmNlID0gZXhhbXBsZV9zb3VyY2UKLSAgICAgICAgcmV0dXJuIG1ha2Vfc2NyaXB0KHNjcmlwdF9kaXIsIHNjcmlwdF9iYXNlbmFtZSwgc291cmNlKQorICAgICAgICByZXR1cm4gbWFrZV9zY3JpcHQoc2NyaXB0X2Rpciwgc2NyaXB0X2Jhc2VuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlLCBvbWl0X3N1ZmZpeCkKIAogICAgIGRlZiBfY2hlY2tfc2NyaXB0KHNlbGYsIHNjcmlwdF9uYW1lLCBleHBlY3RlZF9uYW1lLCBleHBlY3RlZF9maWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX2FyZ3YwKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9hcmd2MCwgbW9kX25hbWU9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3Rfc3BlYz1UcnVlLCBjaGVja19sb2FkZXI9VHJ1ZSk6CiAgICAgICAgICMgRmlyc3QgY2hlY2sgaXMgd2l0aG91dCBydW5fbmFtZQogICAgICAgICBkZWYgY3JlYXRlX25zKGluaXRfZ2xvYmFscyk6CiAgICAgICAgICAgICByZXR1cm4gcnVuX3BhdGgoc2NyaXB0X25hbWUsIGluaXRfZ2xvYmFscykKICAgICAgICAgZXhwZWN0ZWRfbnMgPSBleGFtcGxlX25hbWVzcGFjZS5jb3B5KCkKKyAgICAgICAgaWYgbW9kX25hbWUgaXMgTm9uZToKKyAgICAgICAgICAgIHNwZWNfbmFtZSA9IGV4cGVjdGVkX25hbWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNwZWNfbmFtZSA9IG1vZF9uYW1lCisgICAgICAgIGlmIGV4cGVjdF9zcGVjOgorICAgICAgICAgICAgbW9kX3NwZWMgPSBpbXBvcnRsaWIudXRpbC5zcGVjX2Zyb21fZmlsZV9sb2NhdGlvbihzcGVjX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX2ZpbGUpCisgICAgICAgICAgICBtb2RfY2FjaGVkID0gbW9kX3NwZWMuY2FjaGVkCisgICAgICAgICAgICBpZiBub3QgY2hlY2tfbG9hZGVyOgorICAgICAgICAgICAgICAgIG1vZF9zcGVjLmxvYWRlciA9IE5vbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG1vZF9zcGVjID0gbW9kX2NhY2hlZCA9IE5vbmUKKwogICAgICAgICBleHBlY3RlZF9ucy51cGRhdGUoewogICAgICAgICAgICAgIl9fbmFtZV9fIjogZXhwZWN0ZWRfbmFtZSwKICAgICAgICAgICAgICJfX2ZpbGVfXyI6IGV4cGVjdGVkX2ZpbGUsCisgICAgICAgICAgICAiX19jYWNoZWRfXyI6IG1vZF9jYWNoZWQsCiAgICAgICAgICAgICAiX19wYWNrYWdlX18iOiAiIiwKKyAgICAgICAgICAgICJfX3NwZWNfXyI6IG1vZF9zcGVjLAogICAgICAgICAgICAgInJ1bl9hcmd2MCI6IGV4cGVjdGVkX2FyZ3YwLAogICAgICAgICAgICAgInJ1bl9uYW1lX2luX3N5c19tb2R1bGVzIjogVHJ1ZSwKICAgICAgICAgICAgICJtb2R1bGVfaW5fc3lzX21vZHVsZXMiOiBUcnVlLApAQCAtNDc5LDYgKzU3NSwxMiBAQAogICAgICAgICBydW5fbmFtZSA9ICJwcm92ZS5pc3N1ZTE1MjMwLmlzLmZpeGVkIgogICAgICAgICBkZWYgY3JlYXRlX25zKGluaXRfZ2xvYmFscyk6CiAgICAgICAgICAgICByZXR1cm4gcnVuX3BhdGgoc2NyaXB0X25hbWUsIGluaXRfZ2xvYmFscywgcnVuX25hbWUpCisgICAgICAgIGlmIGV4cGVjdF9zcGVjIGFuZCBtb2RfbmFtZSBpcyBOb25lOgorICAgICAgICAgICAgbW9kX3NwZWMgPSBpbXBvcnRsaWIudXRpbC5zcGVjX2Zyb21fZmlsZV9sb2NhdGlvbihydW5fbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfZmlsZSkKKyAgICAgICAgICAgIGlmIG5vdCBjaGVja19sb2FkZXI6CisgICAgICAgICAgICAgICAgbW9kX3NwZWMubG9hZGVyID0gTm9uZQorICAgICAgICAgICAgZXhwZWN0ZWRfbnNbIl9fc3BlY19fIl0gPSBtb2Rfc3BlYwogICAgICAgICBleHBlY3RlZF9uc1siX19uYW1lX18iXSA9IHJ1bl9uYW1lCiAgICAgICAgIGV4cGVjdGVkX25zWyJfX3BhY2thZ2VfXyJdID0gcnVuX25hbWUucnBhcnRpdGlvbigiLiIpWzBdCiAgICAgICAgIHNlbGYuY2hlY2tfY29kZV9leGVjdXRpb24oY3JlYXRlX25zLCBleHBlY3RlZF9ucykKQEAgLTQ5Miw3ICs1OTQsMTUgQEAKICAgICAgICAgICAgIG1vZF9uYW1lID0gJ3NjcmlwdCcKICAgICAgICAgICAgIHNjcmlwdF9uYW1lID0gc2VsZi5fbWFrZV90ZXN0X3NjcmlwdChzY3JpcHRfZGlyLCBtb2RfbmFtZSkKICAgICAgICAgICAgIHNlbGYuX2NoZWNrX3NjcmlwdChzY3JpcHRfbmFtZSwgIjxydW5fcGF0aD4iLCBzY3JpcHRfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHRfbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHRfbmFtZSwgZXhwZWN0X3NwZWM9RmFsc2UpCisKKyAgICBkZWYgdGVzdF9iYXNpY19zY3JpcHRfbm9fc3VmZml4KHNlbGYpOgorICAgICAgICB3aXRoIHRlbXBfZGlyKCkgYXMgc2NyaXB0X2RpcjoKKyAgICAgICAgICAgIG1vZF9uYW1lID0gJ3NjcmlwdCcKKyAgICAgICAgICAgIHNjcmlwdF9uYW1lID0gc2VsZi5fbWFrZV90ZXN0X3NjcmlwdChzY3JpcHRfZGlyLCBtb2RfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbWl0X3N1ZmZpeD1UcnVlKQorICAgICAgICAgICAgc2VsZi5fY2hlY2tfc2NyaXB0KHNjcmlwdF9uYW1lLCAiPHJ1bl9wYXRoPiIsIHNjcmlwdF9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdF9uYW1lLCBleHBlY3Rfc3BlYz1GYWxzZSkKIAogICAgIGRlZiB0ZXN0X3NjcmlwdF9jb21waWxlZChzZWxmKToKICAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CkBAIC01MDEsMTQgKzYxMSwxNCBAQAogICAgICAgICAgICAgY29tcGlsZWRfbmFtZSA9IHB5X2NvbXBpbGUuY29tcGlsZShzY3JpcHRfbmFtZSwgZG9yYWlzZT1UcnVlKQogICAgICAgICAgICAgb3MucmVtb3ZlKHNjcmlwdF9uYW1lKQogICAgICAgICAgICAgc2VsZi5fY2hlY2tfc2NyaXB0KGNvbXBpbGVkX25hbWUsICI8cnVuX3BhdGg+IiwgY29tcGlsZWRfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21waWxlZF9uYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVkX25hbWUsIGV4cGVjdF9zcGVjPUZhbHNlKQogCiAgICAgZGVmIHRlc3RfZGlyZWN0b3J5KHNlbGYpOgogICAgICAgICB3aXRoIHRlbXBfZGlyKCkgYXMgc2NyaXB0X2RpcjoKICAgICAgICAgICAgIG1vZF9uYW1lID0gJ19fbWFpbl9fJwogICAgICAgICAgICAgc2NyaXB0X25hbWUgPSBzZWxmLl9tYWtlX3Rlc3Rfc2NyaXB0KHNjcmlwdF9kaXIsIG1vZF9uYW1lKQogICAgICAgICAgICAgc2VsZi5fY2hlY2tfc2NyaXB0KHNjcmlwdF9kaXIsICI8cnVuX3BhdGg+Iiwgc2NyaXB0X25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0X2RpcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHRfZGlyLCBtb2RfbmFtZT1tb2RfbmFtZSkKIAogICAgIGRlZiB0ZXN0X2RpcmVjdG9yeV9jb21waWxlZChzZWxmKToKICAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CkBAIC01MTksNyArNjI5LDcgQEAKICAgICAgICAgICAgIGlmIG5vdCBzeXMuZG9udF93cml0ZV9ieXRlY29kZToKICAgICAgICAgICAgICAgICBsZWdhY3lfcHljID0gbWFrZV9sZWdhY3lfcHljKHNjcmlwdF9uYW1lKQogICAgICAgICAgICAgICAgIHNlbGYuX2NoZWNrX3NjcmlwdChzY3JpcHRfZGlyLCAiPHJ1bl9wYXRoPiIsIGxlZ2FjeV9weWMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdF9kaXIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdF9kaXIsIG1vZF9uYW1lPW1vZF9uYW1lKQogCiAgICAgZGVmIHRlc3RfZGlyZWN0b3J5X2Vycm9yKHNlbGYpOgogICAgICAgICB3aXRoIHRlbXBfZGlyKCkgYXMgc2NyaXB0X2RpcjoKQEAgLTUzMyw3ICs2NDMsOCBAQAogICAgICAgICAgICAgbW9kX25hbWUgPSAnX19tYWluX18nCiAgICAgICAgICAgICBzY3JpcHRfbmFtZSA9IHNlbGYuX21ha2VfdGVzdF9zY3JpcHQoc2NyaXB0X2RpciwgbW9kX25hbWUpCiAgICAgICAgICAgICB6aXBfbmFtZSwgZm5hbWUgPSBtYWtlX3ppcF9zY3JpcHQoc2NyaXB0X2RpciwgJ3Rlc3RfemlwJywgc2NyaXB0X25hbWUpCi0gICAgICAgICAgICBzZWxmLl9jaGVja19zY3JpcHQoemlwX25hbWUsICI8cnVuX3BhdGg+IiwgZm5hbWUsIHppcF9uYW1lKQorICAgICAgICAgICAgc2VsZi5fY2hlY2tfc2NyaXB0KHppcF9uYW1lLCAiPHJ1bl9wYXRoPiIsIGZuYW1lLCB6aXBfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RfbmFtZT1tb2RfbmFtZSwgY2hlY2tfbG9hZGVyPUZhbHNlKQogCiAgICAgZGVmIHRlc3RfemlwZmlsZV9jb21waWxlZChzZWxmKToKICAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CkBAIC01NDIsNyArNjUzLDggQEAKICAgICAgICAgICAgIGNvbXBpbGVkX25hbWUgPSBweV9jb21waWxlLmNvbXBpbGUoc2NyaXB0X25hbWUsIGRvcmFpc2U9VHJ1ZSkKICAgICAgICAgICAgIHppcF9uYW1lLCBmbmFtZSA9IG1ha2VfemlwX3NjcmlwdChzY3JpcHRfZGlyLCAndGVzdF96aXAnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVkX25hbWUpCi0gICAgICAgICAgICBzZWxmLl9jaGVja19zY3JpcHQoemlwX25hbWUsICI8cnVuX3BhdGg+IiwgZm5hbWUsIHppcF9uYW1lKQorICAgICAgICAgICAgc2VsZi5fY2hlY2tfc2NyaXB0KHppcF9uYW1lLCAiPHJ1bl9wYXRoPiIsIGZuYW1lLCB6aXBfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RfbmFtZT1tb2RfbmFtZSwgY2hlY2tfbG9hZGVyPUZhbHNlKQogCiAgICAgZGVmIHRlc3RfemlwZmlsZV9lcnJvcihzZWxmKToKICAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CkBAIC01NzUsMTIgKzY4Nyw1IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdFsncyddLCAibm9uLUFTQ0lJOiBoXHhlOSIpCiAKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHJ1bl91bml0dGVzdCgKLSAgICAgICAgICAgICAgICAgRXhlY3V0aW9uTGF5ZXJUZXN0Q2FzZSwKLSAgICAgICAgICAgICAgICAgUnVuTW9kdWxlVGVzdENhc2UsCi0gICAgICAgICAgICAgICAgIFJ1blBhdGhUZXN0Q2FzZQotICAgICAgICAgICAgICAgICApCi0KIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc2F4LnB5IGIvTGliL3Rlc3QvdGVzdF9zYXgucHkKaW5kZXggY2ZhMThmNy4uOTBmMzAxNiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zYXgucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zYXgucHkKQEAgLTEwLDE2ICsxMCwxNyBAQAogICAgICMgZG9uJ3QgdHJ5IHRvIHRlc3QgdGhpcyBtb2R1bGUgaWYgd2UgY2Fubm90IGNyZWF0ZSBhIHBhcnNlcgogICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJubyBYTUwgcGFyc2VycyBhdmFpbGFibGUiKQogZnJvbSB4bWwuc2F4LnNheHV0aWxzIGltcG9ydCBYTUxHZW5lcmF0b3IsIGVzY2FwZSwgdW5lc2NhcGUsIHF1b3RlYXR0ciwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYTUxGaWx0ZXJCYXNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhNTEZpbHRlckJhc2UsIHByZXBhcmVfaW5wdXRfc291cmNlCiBmcm9tIHhtbC5zYXguZXhwYXRyZWFkZXIgaW1wb3J0IGNyZWF0ZV9wYXJzZXIKIGZyb20geG1sLnNheC5oYW5kbGVyIGltcG9ydCBmZWF0dXJlX25hbWVzcGFjZXMKIGZyb20geG1sLnNheC54bWxyZWFkZXIgaW1wb3J0IElucHV0U291cmNlLCBBdHRyaWJ1dGVzSW1wbCwgQXR0cmlidXRlc05TSW1wbAogZnJvbSBpbyBpbXBvcnQgQnl0ZXNJTywgU3RyaW5nSU8KIGltcG9ydCBjb2RlY3MKK2ltcG9ydCBnYwogaW1wb3J0IG9zLnBhdGgKIGltcG9ydCBzaHV0aWwKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAotZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IGZpbmRmaWxlLCBydW5fdW5pdHRlc3QKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBmaW5kZmlsZSwgcnVuX3VuaXR0ZXN0LCBURVNURk4KIAogVEVTVF9YTUxGSUxFID0gZmluZGZpbGUoInRlc3QueG1sIiwgc3ViZGlyPSJ4bWx0ZXN0ZGF0YSIpCiBURVNUX1hNTEZJTEVfT1VUID0gZmluZGZpbGUoInRlc3QueG1sLm91dCIsIHN1YmRpcj0ieG1sdGVzdGRhdGEiKQpAQCAtOTUsNiArOTYsMTI2IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cnNbImF0dHIiXSwgInZhbCIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cnMuZ2V0UU5hbWVCeU5hbWUoImF0dHIiKSwgImF0dHIiKQogCisKK2RlZiB4bWxfc3RyKGRvYywgZW5jb2Rpbmc9Tm9uZSk6CisgICAgaWYgZW5jb2RpbmcgaXMgTm9uZToKKyAgICAgICAgcmV0dXJuIGRvYworICAgIHJldHVybiAnPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iJXMiPz5cbiVzJyAlIChlbmNvZGluZywgZG9jKQorCitkZWYgeG1sX2J5dGVzKGRvYywgZW5jb2RpbmcsIGRlY2xfZW5jb2Rpbmc9Li4uKToKKyAgICBpZiBkZWNsX2VuY29kaW5nIGlzIC4uLjoKKyAgICAgICAgZGVjbF9lbmNvZGluZyA9IGVuY29kaW5nCisgICAgcmV0dXJuIHhtbF9zdHIoZG9jLCBkZWNsX2VuY29kaW5nKS5lbmNvZGUoZW5jb2RpbmcsICd4bWxjaGFycmVmcmVwbGFjZScpCisKK2RlZiBtYWtlX3htbF9maWxlKGRvYywgZW5jb2RpbmcsIGRlY2xfZW5jb2Rpbmc9Li4uKToKKyAgICBpZiBkZWNsX2VuY29kaW5nIGlzIC4uLjoKKyAgICAgICAgZGVjbF9lbmNvZGluZyA9IGVuY29kaW5nCisgICAgd2l0aCBvcGVuKFRFU1RGTiwgJ3cnLCBlbmNvZGluZz1lbmNvZGluZywgZXJyb3JzPSd4bWxjaGFycmVmcmVwbGFjZScpIGFzIGY6CisgICAgICAgIGYud3JpdGUoeG1sX3N0cihkb2MsIGRlY2xfZW5jb2RpbmcpKQorCisKK2NsYXNzIFBhcnNlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGF0YSA9ICc8bW9uZXkgdmFsdWU9IiRceGEzXHUyMGFjXFUwMDAxMDE3YiI+JFx4YTNcdTIwYWNcVTAwMDEwMTdiPC9tb25leT4nCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHN1cHBvcnQudW5saW5rKFRFU1RGTikKKworICAgIGRlZiBjaGVja19wYXJzZShzZWxmLCBmKToKKyAgICAgICAgZnJvbSB4bWwuc2F4IGltcG9ydCBwYXJzZQorICAgICAgICByZXN1bHQgPSBTdHJpbmdJTygpCisgICAgICAgIHBhcnNlKGYsIFhNTEdlbmVyYXRvcihyZXN1bHQsICd1dGYtOCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5nZXR2YWx1ZSgpLCB4bWxfc3RyKHNlbGYuZGF0YSwgJ3V0Zi04JykpCisKKyAgICBkZWYgdGVzdF9wYXJzZV90ZXh0KHNlbGYpOgorICAgICAgICBlbmNvZGluZ3MgPSAoJ3VzLWFzY2lpJywgJ2lzby04ODU5LTEnLCAndXRmLTgnLAorICAgICAgICAgICAgICAgICAgICAgJ3V0Zi0xNicsICd1dGYtMTZsZScsICd1dGYtMTZiZScpCisgICAgICAgIGZvciBlbmNvZGluZyBpbiBlbmNvZGluZ3M6CisgICAgICAgICAgICBzZWxmLmNoZWNrX3BhcnNlKFN0cmluZ0lPKHhtbF9zdHIoc2VsZi5kYXRhLCBlbmNvZGluZykpKQorICAgICAgICAgICAgbWFrZV94bWxfZmlsZShzZWxmLmRhdGEsIGVuY29kaW5nKQorICAgICAgICAgICAgd2l0aCBvcGVuKFRFU1RGTiwgJ3InLCBlbmNvZGluZz1lbmNvZGluZykgYXMgZjoKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrX3BhcnNlKGYpCisgICAgICAgICAgICBzZWxmLmNoZWNrX3BhcnNlKFN0cmluZ0lPKHNlbGYuZGF0YSkpCisgICAgICAgICAgICBtYWtlX3htbF9maWxlKHNlbGYuZGF0YSwgZW5jb2RpbmcsIE5vbmUpCisgICAgICAgICAgICB3aXRoIG9wZW4oVEVTVEZOLCAncicsIGVuY29kaW5nPWVuY29kaW5nKSBhcyBmOgorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tfcGFyc2UoZikKKworICAgIGRlZiB0ZXN0X3BhcnNlX2J5dGVzKHNlbGYpOgorICAgICAgICAjIFVURi04IGlzIGRlZmF1bHQgZW5jb2RpbmcsIFVTLUFTQ0lJIGlzIGNvbXBhdGlibGUgd2l0aCBVVEYtOCwKKyAgICAgICAgIyBVVEYtMTYgaXMgYXV0b2RldGVjdGVkCisgICAgICAgIGVuY29kaW5ncyA9ICgndXMtYXNjaWknLCAndXRmLTgnLCAndXRmLTE2JywgJ3V0Zi0xNmxlJywgJ3V0Zi0xNmJlJykKKyAgICAgICAgZm9yIGVuY29kaW5nIGluIGVuY29kaW5nczoKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfcGFyc2UoQnl0ZXNJTyh4bWxfYnl0ZXMoc2VsZi5kYXRhLCBlbmNvZGluZykpKQorICAgICAgICAgICAgbWFrZV94bWxfZmlsZShzZWxmLmRhdGEsIGVuY29kaW5nKQorICAgICAgICAgICAgc2VsZi5jaGVja19wYXJzZShURVNURk4pCisgICAgICAgICAgICB3aXRoIG9wZW4oVEVTVEZOLCAncmInKSBhcyBmOgorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tfcGFyc2UoZikKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfcGFyc2UoQnl0ZXNJTyh4bWxfYnl0ZXMoc2VsZi5kYXRhLCBlbmNvZGluZywgTm9uZSkpKQorICAgICAgICAgICAgbWFrZV94bWxfZmlsZShzZWxmLmRhdGEsIGVuY29kaW5nLCBOb25lKQorICAgICAgICAgICAgc2VsZi5jaGVja19wYXJzZShURVNURk4pCisgICAgICAgICAgICB3aXRoIG9wZW4oVEVTVEZOLCAncmInKSBhcyBmOgorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tfcGFyc2UoZikKKyAgICAgICAgIyBhY2NlcHQgVVRGLTggd2l0aCBCT00KKyAgICAgICAgc2VsZi5jaGVja19wYXJzZShCeXRlc0lPKHhtbF9ieXRlcyhzZWxmLmRhdGEsICd1dGYtOC1zaWcnLCAndXRmLTgnKSkpCisgICAgICAgIG1ha2VfeG1sX2ZpbGUoc2VsZi5kYXRhLCAndXRmLTgtc2lnJywgJ3V0Zi04JykKKyAgICAgICAgc2VsZi5jaGVja19wYXJzZShURVNURk4pCisgICAgICAgIHdpdGggb3BlbihURVNURk4sICdyYicpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmNoZWNrX3BhcnNlKGYpCisgICAgICAgIHNlbGYuY2hlY2tfcGFyc2UoQnl0ZXNJTyh4bWxfYnl0ZXMoc2VsZi5kYXRhLCAndXRmLTgtc2lnJywgTm9uZSkpKQorICAgICAgICBtYWtlX3htbF9maWxlKHNlbGYuZGF0YSwgJ3V0Zi04LXNpZycsIE5vbmUpCisgICAgICAgIHNlbGYuY2hlY2tfcGFyc2UoVEVTVEZOKQorICAgICAgICB3aXRoIG9wZW4oVEVTVEZOLCAncmInKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5jaGVja19wYXJzZShmKQorICAgICAgICAjIGFjY2VwdCBkYXRhIHdpdGggZGVjbGFyZWQgZW5jb2RpbmcKKyAgICAgICAgc2VsZi5jaGVja19wYXJzZShCeXRlc0lPKHhtbF9ieXRlcyhzZWxmLmRhdGEsICdpc28tODg1OS0xJykpKQorICAgICAgICBtYWtlX3htbF9maWxlKHNlbGYuZGF0YSwgJ2lzby04ODU5LTEnKQorICAgICAgICBzZWxmLmNoZWNrX3BhcnNlKFRFU1RGTikKKyAgICAgICAgd2l0aCBvcGVuKFRFU1RGTiwgJ3JiJykgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfcGFyc2UoZikKKyAgICAgICAgIyBmYWlsIG9uIG5vbi1VVEYtOCBpbmNvbXBhdGlibGUgZGF0YSB3aXRob3V0IGRlY2xhcmVkIGVuY29kaW5nCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoU0FYRXhjZXB0aW9uKToKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfcGFyc2UoQnl0ZXNJTyh4bWxfYnl0ZXMoc2VsZi5kYXRhLCAnaXNvLTg4NTktMScsIE5vbmUpKSkKKyAgICAgICAgbWFrZV94bWxfZmlsZShzZWxmLmRhdGEsICdpc28tODg1OS0xJywgTm9uZSkKKyAgICAgICAgd2l0aCBzdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCgndW5jbG9zZWQgZmlsZScsIFJlc291cmNlV2FybmluZykpOgorICAgICAgICAgICAgIyBYWFggRmFpbGVkIHBhcnNlciBsZWFrcyBhbiBvcGVuZWQgZmlsZS4KKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoU0FYRXhjZXB0aW9uKToKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrX3BhcnNlKFRFU1RGTikKKyAgICAgICAgICAgICMgQ29sbGVjdCBsZWFrZWQgZmlsZS4KKyAgICAgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICB3aXRoIG9wZW4oVEVTVEZOLCAncmInKSBhcyBmOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhTQVhFeGNlcHRpb24pOgorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tfcGFyc2UoZikKKworICAgIGRlZiB0ZXN0X3BhcnNlX0lucHV0U291cmNlKHNlbGYpOgorICAgICAgICAjIGFjY2VwdCBkYXRhIHdpdGhvdXQgZGVjbGFyZWQgYnV0IHdpdGggZXhwbGljaXRseSBzcGVjaWZpZWQgZW5jb2RpbmcKKyAgICAgICAgbWFrZV94bWxfZmlsZShzZWxmLmRhdGEsICdpc28tODg1OS0xJywgTm9uZSkKKyAgICAgICAgd2l0aCBvcGVuKFRFU1RGTiwgJ3JiJykgYXMgZjoKKyAgICAgICAgICAgIGlucHV0ID0gSW5wdXRTb3VyY2UoKQorICAgICAgICAgICAgaW5wdXQuc2V0Qnl0ZVN0cmVhbShmKQorICAgICAgICAgICAgaW5wdXQuc2V0RW5jb2RpbmcoJ2lzby04ODU5LTEnKQorICAgICAgICAgICAgc2VsZi5jaGVja19wYXJzZShpbnB1dCkKKworICAgIGRlZiBjaGVja19wYXJzZVN0cmluZyhzZWxmLCBzKToKKyAgICAgICAgZnJvbSB4bWwuc2F4IGltcG9ydCBwYXJzZVN0cmluZworICAgICAgICByZXN1bHQgPSBTdHJpbmdJTygpCisgICAgICAgIHBhcnNlU3RyaW5nKHMsIFhNTEdlbmVyYXRvcihyZXN1bHQsICd1dGYtOCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5nZXR2YWx1ZSgpLCB4bWxfc3RyKHNlbGYuZGF0YSwgJ3V0Zi04JykpCisKKyAgICBkZWYgdGVzdF9wYXJzZVN0cmluZ19ieXRlcyhzZWxmKToKKyAgICAgICAgIyBVVEYtOCBpcyBkZWZhdWx0IGVuY29kaW5nLCBVUy1BU0NJSSBpcyBjb21wYXRpYmxlIHdpdGggVVRGLTgsCisgICAgICAgICMgVVRGLTE2IGlzIGF1dG9kZXRlY3RlZAorICAgICAgICBlbmNvZGluZ3MgPSAoJ3VzLWFzY2lpJywgJ3V0Zi04JywgJ3V0Zi0xNicsICd1dGYtMTZsZScsICd1dGYtMTZiZScpCisgICAgICAgIGZvciBlbmNvZGluZyBpbiBlbmNvZGluZ3M6CisgICAgICAgICAgICBzZWxmLmNoZWNrX3BhcnNlU3RyaW5nKHhtbF9ieXRlcyhzZWxmLmRhdGEsIGVuY29kaW5nKSkKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfcGFyc2VTdHJpbmcoeG1sX2J5dGVzKHNlbGYuZGF0YSwgZW5jb2RpbmcsIE5vbmUpKQorICAgICAgICAjIGFjY2VwdCBVVEYtOCB3aXRoIEJPTQorICAgICAgICBzZWxmLmNoZWNrX3BhcnNlU3RyaW5nKHhtbF9ieXRlcyhzZWxmLmRhdGEsICd1dGYtOC1zaWcnLCAndXRmLTgnKSkKKyAgICAgICAgc2VsZi5jaGVja19wYXJzZVN0cmluZyh4bWxfYnl0ZXMoc2VsZi5kYXRhLCAndXRmLTgtc2lnJywgTm9uZSkpCisgICAgICAgICMgYWNjZXB0IGRhdGEgd2l0aCBkZWNsYXJlZCBlbmNvZGluZworICAgICAgICBzZWxmLmNoZWNrX3BhcnNlU3RyaW5nKHhtbF9ieXRlcyhzZWxmLmRhdGEsICdpc28tODg1OS0xJykpCisgICAgICAgICMgZmFpbCBvbiBub24tVVRGLTggaW5jb21wYXRpYmxlIGRhdGEgd2l0aG91dCBkZWNsYXJlZCBlbmNvZGluZworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFNBWEV4Y2VwdGlvbik6CisgICAgICAgICAgICBzZWxmLmNoZWNrX3BhcnNlU3RyaW5nKHhtbF9ieXRlcyhzZWxmLmRhdGEsICdpc28tODg1OS0xJywgTm9uZSkpCisKIGNsYXNzIE1ha2VQYXJzZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9tYWtlX3BhcnNlcjIoc2VsZik6CiAgICAgICAgICMgQ3JlYXRpbmcgcGFyc2VycyBzZXZlcmFsIHRpbWVzIGluIGEgcm93IHNob3VsZCBzdWNjZWVkLgpAQCAtMTcyLDYgKzI5Myw2MCBAQAogICAgICAgICBwID0gbWFrZV9wYXJzZXIoWyd4bWwucGFyc2Vycy5ub19zdWNoX3BhcnNlciddKQogCiAKK2NsYXNzIFByZXBhcmVJbnB1dFNvdXJjZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmZpbGUgPSBzdXBwb3J0LlRFU1RGTgorICAgICAgICB3aXRoIG9wZW4oc2VsZi5maWxlLCAidyIpIGFzIHRtcDoKKyAgICAgICAgICAgIHRtcC53cml0ZSgiVGhpcyB3YXMgcmVhZCBmcm9tIGEgZmlsZS4iKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzdXBwb3J0LnVubGluayhzZWxmLmZpbGUpCisKKyAgICBkZWYgbWFrZV9ieXRlX3N0cmVhbShzZWxmKToKKyAgICAgICAgcmV0dXJuIEJ5dGVzSU8oYiJUaGlzIGlzIGEgYnl0ZSBzdHJlYW0uIikKKworICAgIGRlZiBjaGVja0NvbnRlbnQoc2VsZiwgc3RyZWFtLCBjb250ZW50KToKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoc3RyZWFtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cmVhbS5yZWFkKCksIGNvbnRlbnQpCisgICAgICAgIHN0cmVhbS5jbG9zZSgpCisKKworICAgIGRlZiB0ZXN0X2J5dGVfc3RyZWFtKHNlbGYpOgorICAgICAgICAjIElmIHRoZSBzb3VyY2UgaXMgYW4gSW5wdXRTb3VyY2UgdGhhdCBkb2VzIG5vdCBoYXZlIGEgY2hhcmFjdGVyCisgICAgICAgICMgc3RyZWFtIGJ1dCBkb2VzIGhhdmUgYSBieXRlIHN0cmVhbSwgdXNlIHRoZSBieXRlIHN0cmVhbS4KKyAgICAgICAgc3JjID0gSW5wdXRTb3VyY2Uoc2VsZi5maWxlKQorICAgICAgICBzcmMuc2V0Qnl0ZVN0cmVhbShzZWxmLm1ha2VfYnl0ZV9zdHJlYW0oKSkKKyAgICAgICAgcHJlcCA9IHByZXBhcmVfaW5wdXRfc291cmNlKHNyYykKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocHJlcC5nZXRDaGFyYWN0ZXJTdHJlYW0oKSkKKyAgICAgICAgc2VsZi5jaGVja0NvbnRlbnQocHJlcC5nZXRCeXRlU3RyZWFtKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIGIiVGhpcyBpcyBhIGJ5dGUgc3RyZWFtLiIpCisKKyAgICBkZWYgdGVzdF9zeXN0ZW1faWQoc2VsZik6CisgICAgICAgICMgSWYgdGhlIHNvdXJjZSBpcyBhbiBJbnB1dFNvdXJjZSB0aGF0IGhhcyBuZWl0aGVyIGEgY2hhcmFjdGVyCisgICAgICAgICMgc3RyZWFtIG5vciBhIGJ5dGUgc3RyZWFtLCBvcGVuIHRoZSBzeXN0ZW0gSUQuCisgICAgICAgIHNyYyA9IElucHV0U291cmNlKHNlbGYuZmlsZSkKKyAgICAgICAgcHJlcCA9IHByZXBhcmVfaW5wdXRfc291cmNlKHNyYykKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocHJlcC5nZXRDaGFyYWN0ZXJTdHJlYW0oKSkKKyAgICAgICAgc2VsZi5jaGVja0NvbnRlbnQocHJlcC5nZXRCeXRlU3RyZWFtKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIGIiVGhpcyB3YXMgcmVhZCBmcm9tIGEgZmlsZS4iKQorCisgICAgZGVmIHRlc3Rfc3RyaW5nKHNlbGYpOgorICAgICAgICAjIElmIHRoZSBzb3VyY2UgaXMgYSBzdHJpbmcsIHVzZSBpdCBhcyBhIHN5c3RlbSBJRCBhbmQgb3BlbiBpdC4KKyAgICAgICAgcHJlcCA9IHByZXBhcmVfaW5wdXRfc291cmNlKHNlbGYuZmlsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocHJlcC5nZXRDaGFyYWN0ZXJTdHJlYW0oKSkKKyAgICAgICAgc2VsZi5jaGVja0NvbnRlbnQocHJlcC5nZXRCeXRlU3RyZWFtKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIGIiVGhpcyB3YXMgcmVhZCBmcm9tIGEgZmlsZS4iKQorCisgICAgZGVmIHRlc3RfYmluYXJ5X2ZpbGUoc2VsZik6CisgICAgICAgICMgSWYgdGhlIHNvdXJjZSBpcyBhIGJpbmFyeSBmaWxlLWxpa2Ugb2JqZWN0LCB1c2UgaXQgYXMgYSBieXRlCisgICAgICAgICMgc3RyZWFtLgorICAgICAgICBwcmVwID0gcHJlcGFyZV9pbnB1dF9zb3VyY2Uoc2VsZi5tYWtlX2J5dGVfc3RyZWFtKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHByZXAuZ2V0Q2hhcmFjdGVyU3RyZWFtKCkpCisgICAgICAgIHNlbGYuY2hlY2tDb250ZW50KHByZXAuZ2V0Qnl0ZVN0cmVhbSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBiIlRoaXMgaXMgYSBieXRlIHN0cmVhbS4iKQorCisKICMgPT09PT0gWE1MR2VuZXJhdG9yCiAKIGNsYXNzIFhtbGdlblRlc3Q6CkBAIC02MjIsNyArNzk3LDcgQEAKIAogICAgICMgPT09PT0gWE1MUmVhZGVyIHN1cHBvcnQKIAotICAgIGRlZiB0ZXN0X2V4cGF0X2ZpbGUoc2VsZik6CisgICAgZGVmIHRlc3RfZXhwYXRfYmluYXJ5X2ZpbGUoc2VsZik6CiAgICAgICAgIHBhcnNlciA9IGNyZWF0ZV9wYXJzZXIoKQogICAgICAgICByZXN1bHQgPSBCeXRlc0lPKCkKICAgICAgICAgeG1sZ2VuID0gWE1MR2VuZXJhdG9yKHJlc3VsdCkKQEAgLTYzMyw4ICs4MDgsMTkgQEAKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5nZXR2YWx1ZSgpLCB4bWxfdGVzdF9vdXQpCiAKKyAgICBkZWYgdGVzdF9leHBhdF90ZXh0X2ZpbGUoc2VsZik6CisgICAgICAgIHBhcnNlciA9IGNyZWF0ZV9wYXJzZXIoKQorICAgICAgICByZXN1bHQgPSBCeXRlc0lPKCkKKyAgICAgICAgeG1sZ2VuID0gWE1MR2VuZXJhdG9yKHJlc3VsdCkKKworICAgICAgICBwYXJzZXIuc2V0Q29udGVudEhhbmRsZXIoeG1sZ2VuKQorICAgICAgICB3aXRoIG9wZW4oVEVTVF9YTUxGSUxFLCAncnQnLCBlbmNvZGluZz0naXNvLTg4NTktMScpIGFzIGY6CisgICAgICAgICAgICBwYXJzZXIucGFyc2UoZikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5nZXR2YWx1ZSgpLCB4bWxfdGVzdF9vdXQpCisKICAgICBAcmVxdWlyZXNfbm9uYXNjaWlfZmlsZW5hbWVzCi0gICAgZGVmIHRlc3RfZXhwYXRfZmlsZV9ub25hc2NpaShzZWxmKToKKyAgICBkZWYgdGVzdF9leHBhdF9iaW5hcnlfZmlsZV9ub25hc2NpaShzZWxmKToKICAgICAgICAgZm5hbWUgPSBzdXBwb3J0LlRFU1RGTl9VTklDT0RFCiAgICAgICAgIHNodXRpbC5jb3B5ZmlsZShURVNUX1hNTEZJTEUsIGZuYW1lKQogICAgICAgICBzZWxmLmFkZENsZWFudXAoc3VwcG9ydC51bmxpbmssIGZuYW1lKQpAQCAtNjQ0LDcgKzgzMCwzMSBAQAogICAgICAgICB4bWxnZW4gPSBYTUxHZW5lcmF0b3IocmVzdWx0KQogCiAgICAgICAgIHBhcnNlci5zZXRDb250ZW50SGFuZGxlcih4bWxnZW4pCi0gICAgICAgIHBhcnNlci5wYXJzZShvcGVuKGZuYW1lKSkKKyAgICAgICAgcGFyc2VyLnBhcnNlKG9wZW4oZm5hbWUsICdyYicpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LmdldHZhbHVlKCksIHhtbF90ZXN0X291dCkKKworICAgIGRlZiB0ZXN0X2V4cGF0X2JpbmFyeV9maWxlX2J5dGVzX25hbWUoc2VsZik6CisgICAgICAgIGZuYW1lID0gb3MuZnNlbmNvZGUoVEVTVF9YTUxGSUxFKQorICAgICAgICBwYXJzZXIgPSBjcmVhdGVfcGFyc2VyKCkKKyAgICAgICAgcmVzdWx0ID0gQnl0ZXNJTygpCisgICAgICAgIHhtbGdlbiA9IFhNTEdlbmVyYXRvcihyZXN1bHQpCisKKyAgICAgICAgcGFyc2VyLnNldENvbnRlbnRIYW5kbGVyKHhtbGdlbikKKyAgICAgICAgd2l0aCBvcGVuKGZuYW1lLCAncmInKSBhcyBmOgorICAgICAgICAgICAgcGFyc2VyLnBhcnNlKGYpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuZ2V0dmFsdWUoKSwgeG1sX3Rlc3Rfb3V0KQorCisgICAgZGVmIHRlc3RfZXhwYXRfYmluYXJ5X2ZpbGVfaW50X25hbWUoc2VsZik6CisgICAgICAgIHBhcnNlciA9IGNyZWF0ZV9wYXJzZXIoKQorICAgICAgICByZXN1bHQgPSBCeXRlc0lPKCkKKyAgICAgICAgeG1sZ2VuID0gWE1MR2VuZXJhdG9yKHJlc3VsdCkKKworICAgICAgICBwYXJzZXIuc2V0Q29udGVudEhhbmRsZXIoeG1sZ2VuKQorICAgICAgICB3aXRoIG9wZW4oVEVTVF9YTUxGSUxFLCAncmInKSBhcyBmOgorICAgICAgICAgICAgd2l0aCBvcGVuKGYuZmlsZW5vKCksICdyYicsIGNsb3NlZmQ9RmFsc2UpIGFzIGYyOgorICAgICAgICAgICAgICAgIHBhcnNlci5wYXJzZShmMikKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5nZXR2YWx1ZSgpLCB4bWxfdGVzdF9vdXQpCiAKQEAgLTgwMiw3ICsxMDEyLDcgQEAKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5nZXR2YWx1ZSgpLCB4bWxfdGVzdF9vdXQpCiAKLSAgICBkZWYgdGVzdF9leHBhdF9pbnBzb3VyY2Vfc3RyZWFtKHNlbGYpOgorICAgIGRlZiB0ZXN0X2V4cGF0X2lucHNvdXJjZV9ieXRlX3N0cmVhbShzZWxmKToKICAgICAgICAgcGFyc2VyID0gY3JlYXRlX3BhcnNlcigpCiAgICAgICAgIHJlc3VsdCA9IEJ5dGVzSU8oKQogICAgICAgICB4bWxnZW4gPSBYTUxHZW5lcmF0b3IocmVzdWx0KQpAQCAtOTE2LDYgKzExMjYsOCBAQAogICAgICAgICBwYXJzZXIgPSBjcmVhdGVfcGFyc2VyKCkKICAgICAgICAgcGFyc2VyLnNldENvbnRlbnRIYW5kbGVyKENvbnRlbnRIYW5kbGVyKCkpICMgZG8gbm90aGluZwogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTQVhQYXJzZUV4Y2VwdGlvbiwgcGFyc2VyLnBhcnNlLCBTdHJpbmdJTygiPGZvbz4iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZXIuZ2V0Q29sdW1uTnVtYmVyKCksIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyc2VyLmdldExpbmVOdW1iZXIoKSwgMSkKIAogICAgIGRlZiB0ZXN0X3NheF9wYXJzZV9leGNlcHRpb25fc3RyKHNlbGYpOgogICAgICAgICAjIHBhc3MgdmFyaW91cyB2YWx1ZXMgZnJvbSBhIGxvY2F0b3IgdG8gdGhlIFNBWFBhcnNlRXhjZXB0aW9uIHRvCkBAIC05OTMsNyArMTIwNSw5IEBACiAKIGRlZiB0ZXN0X21haW4oKToKICAgICBydW5fdW5pdHRlc3QoTWFrZVBhcnNlclRlc3QsCisgICAgICAgICAgICAgICAgIFBhcnNlVGVzdCwKICAgICAgICAgICAgICAgICAgU2F4dXRpbHNUZXN0LAorICAgICAgICAgICAgICAgICBQcmVwYXJlSW5wdXRTb3VyY2VUZXN0LAogICAgICAgICAgICAgICAgICBTdHJpbmdYbWxnZW5UZXN0LAogICAgICAgICAgICAgICAgICBCeXRlc1htbGdlblRlc3QsCiAgICAgICAgICAgICAgICAgIFdyaXRlclhtbGdlblRlc3QsCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3NjaGVkLnB5IGIvTGliL3Rlc3QvdGVzdF9zY2hlZC5weQppbmRleCA3OWZhN2QzLi5mZThlNzg1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3NjaGVkLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc2NoZWQucHkKQEAgLTE5NSw4ICsxOTUsNSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGwsIFtdKQogCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChUZXN0Q2FzZSkKLQogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zY29wZS5weSBiL0xpYi90ZXN0L3Rlc3Rfc2NvcGUucHkKaW5kZXggMjZjZTA0Mi4uYjMyNTU0NSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zY29wZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3Njb3BlLnB5CkBAIC03MTUsNiArNzE1LDE5IEBACiAgICAgICAgIGRlZiBiKCk6CiAgICAgICAgICAgICBnbG9iYWwgYQogCisgICAgZGVmIHRlc3RDbGFzc05hbWVzcGFjZU92ZXJyaWRlc0Nsb3N1cmUoc2VsZik6CisgICAgICAgICMgU2VlICMxNzg1My4KKyAgICAgICAgeCA9IDQyCisgICAgICAgIGNsYXNzIFg6CisgICAgICAgICAgICBsb2NhbHMoKVsieCJdID0gNDMKKyAgICAgICAgICAgIHkgPSB4CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWC55LCA0MykKKyAgICAgICAgY2xhc3MgWDoKKyAgICAgICAgICAgIGxvY2FscygpWyJ4Il0gPSA0MworICAgICAgICAgICAgZGVsIHgKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKFgsICJ4IikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgNDIpCisKICAgICBAY3B5dGhvbl9vbmx5CiAgICAgZGVmIHRlc3RDZWxsTGVhayhzZWxmKToKICAgICAgICAgIyBJc3N1ZSAxNzkyNy4KQEAgLTc0MywxMCArNzU2LDYgQEAKICAgICAgICAgZGVsIHRlc3RlcgogICAgICAgICBzZWxmLmFzc2VydElzTm9uZShyZWYoKSkKIAotICAgIGRlZiB0ZXN0X19DbGFzc19fR2xvYmFsKHNlbGYpOgotICAgICAgICBzID0gImNsYXNzIFg6XG4gICAgZ2xvYmFsIF9fY2xhc3NfX1xuICAgIGRlZiBmKHNlbGYpOiBzdXBlcigpIgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvciwgZXhlYywgcykKLQogCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgcnVuX3VuaXR0ZXN0KFNjb3BlVGVzdHMpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3NjcmlwdF9oZWxwZXIucHkgYi9MaWIvdGVzdC90ZXN0X3NjcmlwdF9oZWxwZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzcyZDZhNwotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3Rfc2NyaXB0X2hlbHBlci5weQpAQCAtMCwwICsxLDExMCBAQAorIiIiVW5pdHRlc3RzIGZvciB0ZXN0LnNjcmlwdF9oZWxwZXIuICBXaG8gdGVzdHMgdGhlIHRlc3QgaGVscGVyPyIiIgorCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHN5cworZnJvbSB0ZXN0IGltcG9ydCBzY3JpcHRfaGVscGVyCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdW5pdHRlc3QgaW1wb3J0IG1vY2sKKworCitjbGFzcyBUZXN0U2NyaXB0SGVscGVyKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2Fzc2VydF9weXRob25fb2soc2VsZik6CisgICAgICAgIHQgPSBzY3JpcHRfaGVscGVyLmFzc2VydF9weXRob25fb2soJy1jJywgJ2ltcG9ydCBzeXM7IHN5cy5leGl0KDApJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCB0WzBdLCAncmV0dXJuIGNvZGUgd2FzIG5vdCAwJykKKworICAgIGRlZiB0ZXN0X2Fzc2VydF9weXRob25fZmFpbHVyZShzZWxmKToKKyAgICAgICAgIyBJIGRpZG4ndCBpbXBvcnQgdGhlIHN5cyBtb2R1bGUgc28gdGhpcyBjaGlsZCB3aWxsIGZhaWwuCisgICAgICAgIHJjLCBvdXQsIGVyciA9IHNjcmlwdF9oZWxwZXIuYXNzZXJ0X3B5dGhvbl9mYWlsdXJlKCctYycsICdzeXMuZXhpdCgwKScpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoMCwgcmMsICdyZXR1cm4gY29kZSBzaG91bGQgbm90IGJlIDAnKQorCisgICAgZGVmIHRlc3RfYXNzZXJ0X3B5dGhvbl9va19yYWlzZXMoc2VsZik6CisgICAgICAgICMgSSBkaWRuJ3QgaW1wb3J0IHRoZSBzeXMgbW9kdWxlIHNvIHRoaXMgY2hpbGQgd2lsbCBmYWlsLgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yKSBhcyBlcnJvcl9jb250ZXh0OgorICAgICAgICAgICAgc2NyaXB0X2hlbHBlci5hc3NlcnRfcHl0aG9uX29rKCctYycsICdzeXMuZXhpdCgwKScpCisgICAgICAgIGVycm9yX21zZyA9IHN0cihlcnJvcl9jb250ZXh0LmV4Y2VwdGlvbikKKyAgICAgICAgc2VsZi5hc3NlcnRJbignY29tbWFuZCBsaW5lIHdhczonLCBlcnJvcl9tc2cpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3N5cy5leGl0KDApJywgZXJyb3JfbXNnLCBtc2c9J3VuZXhwZWN0ZWQgY29tbWFuZCBsaW5lJykKKworICAgIGRlZiB0ZXN0X2Fzc2VydF9weXRob25fZmFpbHVyZV9yYWlzZXMoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IpIGFzIGVycm9yX2NvbnRleHQ6CisgICAgICAgICAgICBzY3JpcHRfaGVscGVyLmFzc2VydF9weXRob25fZmFpbHVyZSgnLWMnLCAnaW1wb3J0IHN5czsgc3lzLmV4aXQoMCknKQorICAgICAgICBlcnJvcl9tc2cgPSBzdHIoZXJyb3JfY29udGV4dC5leGNlcHRpb24pCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ1Byb2Nlc3MgcmV0dXJuIGNvZGUgaXMgMCwnLCBlcnJvcl9tc2cpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2ltcG9ydCBzeXM7IHN5cy5leGl0KDApJywgZXJyb3JfbXNnLAorICAgICAgICAgICAgICAgICAgICAgIG1zZz0ndW5leHBlY3RlZCBjb21tYW5kIGxpbmUuJykKKworICAgIEBtb2NrLnBhdGNoKCdzdWJwcm9jZXNzLlBvcGVuJykKKyAgICBkZWYgdGVzdF9hc3NlcnRfcHl0aG9uX2lzb2xhdGVkX3doZW5fZW52X25vdF9yZXF1aXJlZChzZWxmLCBtb2NrX3BvcGVuKToKKyAgICAgICAgd2l0aCBtb2NrLnBhdGNoLm9iamVjdChzY3JpcHRfaGVscGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfaW50ZXJwcmV0ZXJfcmVxdWlyZXNfZW52aXJvbm1lbnQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWx1ZT1GYWxzZSkgYXMgbW9ja19pcmVfZnVuYzoKKyAgICAgICAgICAgIG1vY2tfcG9wZW4uc2lkZV9lZmZlY3QgPSBSdW50aW1lRXJyb3IoJ2JhaWwgb3V0IG9mIHVuaXR0ZXN0JykKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzY3JpcHRfaGVscGVyLl9hc3NlcnRfcHl0aG9uKFRydWUsICctYycsICdOb25lJykKKyAgICAgICAgICAgIGV4Y2VwdCBSdW50aW1lRXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2JhaWwgb3V0IG9mIHVuaXR0ZXN0JywgZXJyLmFyZ3NbMF0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIG1vY2tfcG9wZW4uY2FsbF9jb3VudCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbW9ja19pcmVfZnVuYy5jYWxsX2NvdW50KQorICAgICAgICAgICAgcG9wZW5fY29tbWFuZCA9IG1vY2tfcG9wZW4uY2FsbF9hcmdzWzBdWzBdCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN5cy5leGVjdXRhYmxlLCBwb3Blbl9jb21tYW5kWzBdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignTm9uZScsIHBvcGVuX2NvbW1hbmQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCctSScsIHBvcGVuX2NvbW1hbmQpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCctRScsIHBvcGVuX2NvbW1hbmQpICAjIC1JIG92ZXJyaWRlcyB0aGlzCisKKyAgICBAbW9jay5wYXRjaCgnc3VicHJvY2Vzcy5Qb3BlbicpCisgICAgZGVmIHRlc3RfYXNzZXJ0X3B5dGhvbl9ub3RfaXNvbGF0ZWRfd2hlbl9lbnZfaXNfcmVxdWlyZWQoc2VsZiwgbW9ja19wb3Blbik6CisgICAgICAgICIiIkVuc3VyZSB0aGF0IC1JIGlzIG5vdCBwYXNzZWQgd2hlbiB0aGUgZW52aXJvbm1lbnQgaXMgcmVxdWlyZWQuIiIiCisgICAgICAgIHdpdGggbW9jay5wYXRjaC5vYmplY3Qoc2NyaXB0X2hlbHBlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX2ludGVycHJldGVyX3JlcXVpcmVzX2Vudmlyb25tZW50JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsdWU9VHJ1ZSkgYXMgbW9ja19pcmVfZnVuYzoKKyAgICAgICAgICAgIG1vY2tfcG9wZW4uc2lkZV9lZmZlY3QgPSBSdW50aW1lRXJyb3IoJ2JhaWwgb3V0IG9mIHVuaXR0ZXN0JykKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzY3JpcHRfaGVscGVyLl9hc3NlcnRfcHl0aG9uKFRydWUsICctYycsICdOb25lJykKKyAgICAgICAgICAgIGV4Y2VwdCBSdW50aW1lRXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2JhaWwgb3V0IG9mIHVuaXR0ZXN0JywgZXJyLmFyZ3NbMF0pCisgICAgICAgICAgICBwb3Blbl9jb21tYW5kID0gbW9ja19wb3Blbi5jYWxsX2FyZ3NbMF1bMF0KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJy1JJywgcG9wZW5fY29tbWFuZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJy1FJywgcG9wZW5fY29tbWFuZCkKKworCitjbGFzcyBUZXN0U2NyaXB0SGVscGVyRW52aXJvbm1lbnQodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIkNvZGUgY292ZXJhZ2UgZm9yIF9pbnRlcnByZXRlcl9yZXF1aXJlc19lbnZpcm9ubWVudCgpLiIiIgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoCisgICAgICAgICAgICAgICAgaGFzYXR0cihzY3JpcHRfaGVscGVyLCAnX19jYWNoZWRfaW50ZXJwX3JlcXVpcmVzX2Vudmlyb25tZW50JykpCisgICAgICAgICMgUmVzZXQgdGhlIHByaXZhdGUgY2FjaGVkIHN0YXRlLgorICAgICAgICBzY3JpcHRfaGVscGVyLl9fZGljdF9fWydfX2NhY2hlZF9pbnRlcnBfcmVxdWlyZXNfZW52aXJvbm1lbnQnXSA9IE5vbmUKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgIyBSZXNldCB0aGUgcHJpdmF0ZSBjYWNoZWQgc3RhdGUuCisgICAgICAgIHNjcmlwdF9oZWxwZXIuX19kaWN0X19bJ19fY2FjaGVkX2ludGVycF9yZXF1aXJlc19lbnZpcm9ubWVudCddID0gTm9uZQorCisgICAgQG1vY2sucGF0Y2goJ3N1YnByb2Nlc3MuY2hlY2tfY2FsbCcpCisgICAgZGVmIHRlc3RfaW50ZXJwcmV0ZXJfcmVxdWlyZXNfZW52aXJvbm1lbnRfdHJ1ZShzZWxmLCBtb2NrX2NoZWNrX2NhbGwpOgorICAgICAgICBtb2NrX2NoZWNrX2NhbGwuc2lkZV9lZmZlY3QgPSBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvcignJywgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzY3JpcHRfaGVscGVyLl9pbnRlcnByZXRlcl9yZXF1aXJlc19lbnZpcm9ubWVudCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2NyaXB0X2hlbHBlci5faW50ZXJwcmV0ZXJfcmVxdWlyZXNfZW52aXJvbm1lbnQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBtb2NrX2NoZWNrX2NhbGwuY2FsbF9jb3VudCkKKworICAgIEBtb2NrLnBhdGNoKCdzdWJwcm9jZXNzLmNoZWNrX2NhbGwnKQorICAgIGRlZiB0ZXN0X2ludGVycHJldGVyX3JlcXVpcmVzX2Vudmlyb25tZW50X2ZhbHNlKHNlbGYsIG1vY2tfY2hlY2tfY2FsbCk6CisgICAgICAgICMgVGhlIG1vY2tlZCBzdWJwcm9jZXNzLmNoZWNrX2NhbGwgZmFrZXMgYSBuby1lcnJvciBwcm9jZXNzLgorICAgICAgICBzY3JpcHRfaGVscGVyLl9pbnRlcnByZXRlcl9yZXF1aXJlc19lbnZpcm9ubWVudCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2NyaXB0X2hlbHBlci5faW50ZXJwcmV0ZXJfcmVxdWlyZXNfZW52aXJvbm1lbnQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBtb2NrX2NoZWNrX2NhbGwuY2FsbF9jb3VudCkKKworICAgIEBtb2NrLnBhdGNoKCdzdWJwcm9jZXNzLmNoZWNrX2NhbGwnKQorICAgIGRlZiB0ZXN0X2ludGVycHJldGVyX3JlcXVpcmVzX2Vudmlyb25tZW50X2RldGFpbHMoc2VsZiwgbW9ja19jaGVja19jYWxsKToKKyAgICAgICAgc2NyaXB0X2hlbHBlci5faW50ZXJwcmV0ZXJfcmVxdWlyZXNfZW52aXJvbm1lbnQoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNjcmlwdF9oZWxwZXIuX2ludGVycHJldGVyX3JlcXVpcmVzX2Vudmlyb25tZW50KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2NyaXB0X2hlbHBlci5faW50ZXJwcmV0ZXJfcmVxdWlyZXNfZW52aXJvbm1lbnQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBtb2NrX2NoZWNrX2NhbGwuY2FsbF9jb3VudCkKKyAgICAgICAgY2hlY2tfY2FsbF9jb21tYW5kID0gbW9ja19jaGVja19jYWxsLmNhbGxfYXJnc1swXVswXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN5cy5leGVjdXRhYmxlLCBjaGVja19jYWxsX2NvbW1hbmRbMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJy1FJywgY2hlY2tfY2FsbF9jb21tYW5kKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3NlbGVjdC5weSBiL0xpYi90ZXN0L3Rlc3Rfc2VsZWN0LnB5CmluZGV4IGRkYjlhMGYuLjhmOWExYzkgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc2VsZWN0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc2VsZWN0LnB5CkBAIC01LDcgKzUsNyBAQAogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIAotQHVuaXR0ZXN0LnNraXBJZihzeXMucGxhdGZvcm1bOjNdIGluICgnd2luJywgJ29zMicsICdyaXNjb3MnKSwKK0B1bml0dGVzdC5za2lwSWYoKHN5cy5wbGF0Zm9ybVs6M109PSd3aW4nKSwKICAgICAgICAgICAgICAgICAgImNhbid0IGVhc2lseSB0ZXN0IG9uIHRoaXMgc3lzdGVtIikKIGNsYXNzIFNlbGVjdFRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKIApAQCAtMzIsNyArMzIsNyBAQAogICAgICAgICAgICAgZnAuY2xvc2UoKQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHNlbGVjdC5zZWxlY3QoW2ZkXSwgW10sIFtdLCAwKQotICAgICAgICAgICAgZXhjZXB0IHNlbGVjdC5lcnJvciBhcyBlcnI6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIuZXJybm8sIGVycm5vLkVCQURGKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoImV4Y2VwdGlvbiBub3QgcmFpc2VkIikKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc2VsZWN0b3JzLnB5IGIvTGliL3Rlc3QvdGVzdF9zZWxlY3RvcnMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTUyZmRhNgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3Rfc2VsZWN0b3JzLnB5CkBAIC0wLDAgKzEsNDY3IEBACitpbXBvcnQgZXJybm8KK2ltcG9ydCBvcworaW1wb3J0IHJhbmRvbQoraW1wb3J0IHNlbGVjdG9ycworaW1wb3J0IHNpZ25hbAoraW1wb3J0IHNvY2tldAoraW1wb3J0IHN5cworZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0Citmcm9tIHRpbWUgaW1wb3J0IHNsZWVwCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB1bml0dGVzdC5tb2NrCit0cnk6CisgICAgZnJvbSB0aW1lIGltcG9ydCBtb25vdG9uaWMgYXMgdGltZQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGZyb20gdGltZSBpbXBvcnQgdGltZSBhcyB0aW1lCit0cnk6CisgICAgaW1wb3J0IHJlc291cmNlCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgcmVzb3VyY2UgPSBOb25lCisKKworaWYgaGFzYXR0cihzb2NrZXQsICdzb2NrZXRwYWlyJyk6CisgICAgc29ja2V0cGFpciA9IHNvY2tldC5zb2NrZXRwYWlyCitlbHNlOgorICAgIGRlZiBzb2NrZXRwYWlyKGZhbWlseT1zb2NrZXQuQUZfSU5FVCwgdHlwZT1zb2NrZXQuU09DS19TVFJFQU0sIHByb3RvPTApOgorICAgICAgICB3aXRoIHNvY2tldC5zb2NrZXQoZmFtaWx5LCB0eXBlLCBwcm90bykgYXMgbDoKKyAgICAgICAgICAgIGwuYmluZCgoc3VwcG9ydC5IT1NULCAwKSkKKyAgICAgICAgICAgIGwubGlzdGVuKDMpCisgICAgICAgICAgICBjID0gc29ja2V0LnNvY2tldChmYW1pbHksIHR5cGUsIHByb3RvKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGMuY29ubmVjdChsLmdldHNvY2tuYW1lKCkpCisgICAgICAgICAgICAgICAgY2FkZHIgPSBjLmdldHNvY2tuYW1lKCkKKyAgICAgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgICAgICBhLCBhZGRyID0gbC5hY2NlcHQoKQorICAgICAgICAgICAgICAgICAgICAjIGNoZWNrIHRoYXQgd2UndmUgZ290IHRoZSBjb3JyZWN0IGNsaWVudAorICAgICAgICAgICAgICAgICAgICBpZiBhZGRyID09IGNhZGRyOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGMsIGEKKyAgICAgICAgICAgICAgICAgICAgYS5jbG9zZSgpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICBjLmNsb3NlKCkKKyAgICAgICAgICAgICAgICByYWlzZQorCisKK2RlZiBmaW5kX3JlYWR5X21hdGNoaW5nKHJlYWR5LCBmbGFnKToKKyAgICBtYXRjaCA9IFtdCisgICAgZm9yIGtleSwgZXZlbnRzIGluIHJlYWR5OgorICAgICAgICBpZiBldmVudHMgJiBmbGFnOgorICAgICAgICAgICAgbWF0Y2guYXBwZW5kKGtleS5maWxlb2JqKQorICAgIHJldHVybiBtYXRjaAorCisKK2NsYXNzIEJhc2VTZWxlY3RvclRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBtYWtlX3NvY2tldHBhaXIoc2VsZik6CisgICAgICAgIHJkLCB3ciA9IHNvY2tldHBhaXIoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocmQuY2xvc2UpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cCh3ci5jbG9zZSkKKyAgICAgICAgcmV0dXJuIHJkLCB3cgorCisgICAgZGVmIHRlc3RfcmVnaXN0ZXIoc2VsZik6CisgICAgICAgIHMgPSBzZWxmLlNFTEVDVE9SKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHMuY2xvc2UpCisKKyAgICAgICAgcmQsIHdyID0gc2VsZi5tYWtlX3NvY2tldHBhaXIoKQorCisgICAgICAgIGtleSA9IHMucmVnaXN0ZXIocmQsIHNlbGVjdG9ycy5FVkVOVF9SRUFELCAiZGF0YSIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShrZXksIHNlbGVjdG9ycy5TZWxlY3RvcktleSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChrZXkuZmlsZW9iaiwgcmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoa2V5LmZkLCByZC5maWxlbm8oKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChrZXkuZXZlbnRzLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChrZXkuZGF0YSwgImRhdGEiKQorCisgICAgICAgICMgcmVnaXN0ZXIgYW4gdW5rbm93biBldmVudAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzLnJlZ2lzdGVyLCAwLCA5OTk5OTkpCisKKyAgICAgICAgIyByZWdpc3RlciBhbiBpbnZhbGlkIEZECisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHMucmVnaXN0ZXIsIC0xMCwgc2VsZWN0b3JzLkVWRU5UX1JFQUQpCisKKyAgICAgICAgIyByZWdpc3RlciB0d2ljZQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgcy5yZWdpc3RlciwgcmQsIHNlbGVjdG9ycy5FVkVOVF9SRUFEKQorCisgICAgICAgICMgcmVnaXN0ZXIgdGhlIHNhbWUgRkQsIGJ1dCB3aXRoIGEgZGlmZmVyZW50IG9iamVjdAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgcy5yZWdpc3RlciwgcmQuZmlsZW5vKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdG9ycy5FVkVOVF9SRUFEKQorCisgICAgZGVmIHRlc3RfdW5yZWdpc3RlcihzZWxmKToKKyAgICAgICAgcyA9IHNlbGYuU0VMRUNUT1IoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocy5jbG9zZSkKKworICAgICAgICByZCwgd3IgPSBzZWxmLm1ha2Vfc29ja2V0cGFpcigpCisKKyAgICAgICAgcy5yZWdpc3RlcihyZCwgc2VsZWN0b3JzLkVWRU5UX1JFQUQpCisgICAgICAgIHMudW5yZWdpc3RlcihyZCkKKworICAgICAgICAjIHVucmVnaXN0ZXIgYW4gdW5rbm93biBmaWxlIG9iagorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgcy51bnJlZ2lzdGVyLCA5OTk5OTkpCisKKyAgICAgICAgIyB1bnJlZ2lzdGVyIHR3aWNlCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBzLnVucmVnaXN0ZXIsIHJkKQorCisgICAgZGVmIHRlc3RfdW5yZWdpc3Rlcl9hZnRlcl9mZF9jbG9zZShzZWxmKToKKyAgICAgICAgcyA9IHNlbGYuU0VMRUNUT1IoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocy5jbG9zZSkKKyAgICAgICAgcmQsIHdyID0gc2VsZi5tYWtlX3NvY2tldHBhaXIoKQorICAgICAgICByLCB3ID0gcmQuZmlsZW5vKCksIHdyLmZpbGVubygpCisgICAgICAgIHMucmVnaXN0ZXIociwgc2VsZWN0b3JzLkVWRU5UX1JFQUQpCisgICAgICAgIHMucmVnaXN0ZXIodywgc2VsZWN0b3JzLkVWRU5UX1dSSVRFKQorICAgICAgICByZC5jbG9zZSgpCisgICAgICAgIHdyLmNsb3NlKCkKKyAgICAgICAgcy51bnJlZ2lzdGVyKHIpCisgICAgICAgIHMudW5yZWdpc3Rlcih3KQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Mob3MubmFtZSA9PSAncG9zaXgnLCAicmVxdWlyZXMgcG9zaXgiKQorICAgIGRlZiB0ZXN0X3VucmVnaXN0ZXJfYWZ0ZXJfZmRfY2xvc2VfYW5kX3JldXNlKHNlbGYpOgorICAgICAgICBzID0gc2VsZi5TRUxFQ1RPUigpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzLmNsb3NlKQorICAgICAgICByZCwgd3IgPSBzZWxmLm1ha2Vfc29ja2V0cGFpcigpCisgICAgICAgIHIsIHcgPSByZC5maWxlbm8oKSwgd3IuZmlsZW5vKCkKKyAgICAgICAgcy5yZWdpc3RlcihyLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCkKKyAgICAgICAgcy5yZWdpc3Rlcih3LCBzZWxlY3RvcnMuRVZFTlRfV1JJVEUpCisgICAgICAgIHJkMiwgd3IyID0gc2VsZi5tYWtlX3NvY2tldHBhaXIoKQorICAgICAgICByZC5jbG9zZSgpCisgICAgICAgIHdyLmNsb3NlKCkKKyAgICAgICAgb3MuZHVwMihyZDIuZmlsZW5vKCksIHIpCisgICAgICAgIG9zLmR1cDIod3IyLmZpbGVubygpLCB3KQorICAgICAgICBzZWxmLmFkZENsZWFudXAob3MuY2xvc2UsIHIpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy5jbG9zZSwgdykKKyAgICAgICAgcy51bnJlZ2lzdGVyKHIpCisgICAgICAgIHMudW5yZWdpc3Rlcih3KQorCisgICAgZGVmIHRlc3RfdW5yZWdpc3Rlcl9hZnRlcl9zb2NrZXRfY2xvc2Uoc2VsZik6CisgICAgICAgIHMgPSBzZWxmLlNFTEVDVE9SKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHMuY2xvc2UpCisgICAgICAgIHJkLCB3ciA9IHNlbGYubWFrZV9zb2NrZXRwYWlyKCkKKyAgICAgICAgcy5yZWdpc3RlcihyZCwgc2VsZWN0b3JzLkVWRU5UX1JFQUQpCisgICAgICAgIHMucmVnaXN0ZXIod3IsIHNlbGVjdG9ycy5FVkVOVF9XUklURSkKKyAgICAgICAgcmQuY2xvc2UoKQorICAgICAgICB3ci5jbG9zZSgpCisgICAgICAgIHMudW5yZWdpc3RlcihyZCkKKyAgICAgICAgcy51bnJlZ2lzdGVyKHdyKQorCisgICAgZGVmIHRlc3RfbW9kaWZ5KHNlbGYpOgorICAgICAgICBzID0gc2VsZi5TRUxFQ1RPUigpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzLmNsb3NlKQorCisgICAgICAgIHJkLCB3ciA9IHNlbGYubWFrZV9zb2NrZXRwYWlyKCkKKworICAgICAgICBrZXkgPSBzLnJlZ2lzdGVyKHJkLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCkKKworICAgICAgICAjIG1vZGlmeSBldmVudHMKKyAgICAgICAga2V5MiA9IHMubW9kaWZ5KHJkLCBzZWxlY3RvcnMuRVZFTlRfV1JJVEUpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoa2V5LmV2ZW50cywga2V5Mi5ldmVudHMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoa2V5Miwgcy5nZXRfa2V5KHJkKSkKKworICAgICAgICBzLnVucmVnaXN0ZXIocmQpCisKKyAgICAgICAgIyBtb2RpZnkgZGF0YQorICAgICAgICBkMSA9IG9iamVjdCgpCisgICAgICAgIGQyID0gb2JqZWN0KCkKKworICAgICAgICBrZXkgPSBzLnJlZ2lzdGVyKHJkLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCwgZDEpCisgICAgICAgIGtleTIgPSBzLm1vZGlmeShyZCwgc2VsZWN0b3JzLkVWRU5UX1JFQUQsIGQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGtleS5ldmVudHMsIGtleTIuZXZlbnRzKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGtleS5kYXRhLCBrZXkyLmRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoa2V5Miwgcy5nZXRfa2V5KHJkKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChrZXkyLmRhdGEsIGQyKQorCisgICAgICAgICMgbW9kaWZ5IHVua25vd24gZmlsZSBvYmoKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIHMubW9kaWZ5LCA5OTk5OTksIHNlbGVjdG9ycy5FVkVOVF9SRUFEKQorCisgICAgICAgICMgbW9kaWZ5IHVzZSBhIHNob3J0Y3V0CisgICAgICAgIGQzID0gb2JqZWN0KCkKKyAgICAgICAgcy5yZWdpc3RlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHMudW5yZWdpc3RlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisKKyAgICAgICAgcy5tb2RpZnkocmQsIHNlbGVjdG9ycy5FVkVOVF9SRUFELCBkMykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzLnJlZ2lzdGVyLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzLnVucmVnaXN0ZXIuY2FsbGVkKQorCisgICAgZGVmIHRlc3RfY2xvc2Uoc2VsZik6CisgICAgICAgIHMgPSBzZWxmLlNFTEVDVE9SKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHMuY2xvc2UpCisKKyAgICAgICAgbWFwcGluZyA9IHMuZ2V0X21hcCgpCisgICAgICAgIHJkLCB3ciA9IHNlbGYubWFrZV9zb2NrZXRwYWlyKCkKKworICAgICAgICBzLnJlZ2lzdGVyKHJkLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCkKKyAgICAgICAgcy5yZWdpc3Rlcih3ciwgc2VsZWN0b3JzLkVWRU5UX1dSSVRFKQorCisgICAgICAgIHMuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgcy5nZXRfa2V5LCByZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIHMuZ2V0X2tleSwgd3IpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBtYXBwaW5nLl9fZ2V0aXRlbV9fLCByZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIG1hcHBpbmcuX19nZXRpdGVtX18sIHdyKQorCisgICAgZGVmIHRlc3RfZ2V0X2tleShzZWxmKToKKyAgICAgICAgcyA9IHNlbGYuU0VMRUNUT1IoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocy5jbG9zZSkKKworICAgICAgICByZCwgd3IgPSBzZWxmLm1ha2Vfc29ja2V0cGFpcigpCisKKyAgICAgICAga2V5ID0gcy5yZWdpc3RlcihyZCwgc2VsZWN0b3JzLkVWRU5UX1JFQUQsICJkYXRhIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChrZXksIHMuZ2V0X2tleShyZCkpCisKKyAgICAgICAgIyB1bmtub3duIGZpbGUgb2JqCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBzLmdldF9rZXksIDk5OTk5OSkKKworICAgIGRlZiB0ZXN0X2dldF9tYXAoc2VsZik6CisgICAgICAgIHMgPSBzZWxmLlNFTEVDVE9SKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHMuY2xvc2UpCisKKyAgICAgICAgcmQsIHdyID0gc2VsZi5tYWtlX3NvY2tldHBhaXIoKQorCisgICAgICAgIGtleXMgPSBzLmdldF9tYXAoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGtleXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGtleXMpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoa2V5cyksIFtdKQorICAgICAgICBrZXkgPSBzLnJlZ2lzdGVyKHJkLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCwgImRhdGEiKQorICAgICAgICBzZWxmLmFzc2VydEluKHJkLCBrZXlzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGtleSwga2V5c1tyZF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGtleXMpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoa2V5cyksIFtyZC5maWxlbm8oKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChrZXlzLnZhbHVlcygpKSwgW2tleV0pCisKKyAgICAgICAgIyB1bmtub3duIGZpbGUgb2JqCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IpOgorICAgICAgICAgICAga2V5c1s5OTk5OTldCisKKyAgICAgICAgIyBSZWFkLW9ubHkgbWFwcGluZworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBkZWwga2V5c1tyZF0KKworICAgIGRlZiB0ZXN0X3NlbGVjdChzZWxmKToKKyAgICAgICAgcyA9IHNlbGYuU0VMRUNUT1IoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocy5jbG9zZSkKKworICAgICAgICByZCwgd3IgPSBzZWxmLm1ha2Vfc29ja2V0cGFpcigpCisKKyAgICAgICAgcy5yZWdpc3RlcihyZCwgc2VsZWN0b3JzLkVWRU5UX1JFQUQpCisgICAgICAgIHdyX2tleSA9IHMucmVnaXN0ZXIod3IsIHNlbGVjdG9ycy5FVkVOVF9XUklURSkKKworICAgICAgICByZXN1bHQgPSBzLnNlbGVjdCgpCisgICAgICAgIGZvciBrZXksIGV2ZW50cyBpbiByZXN1bHQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShrZXksIHNlbGVjdG9ycy5TZWxlY3RvcktleSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZXZlbnRzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShldmVudHMgJiB+KHNlbGVjdG9ycy5FVkVOVF9SRUFEIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RvcnMuRVZFTlRfV1JJVEUpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWyh3cl9rZXksIHNlbGVjdG9ycy5FVkVOVF9XUklURSldLCByZXN1bHQpCisKKyAgICBkZWYgdGVzdF9jb250ZXh0X21hbmFnZXIoc2VsZik6CisgICAgICAgIHMgPSBzZWxmLlNFTEVDVE9SKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHMuY2xvc2UpCisKKyAgICAgICAgcmQsIHdyID0gc2VsZi5tYWtlX3NvY2tldHBhaXIoKQorCisgICAgICAgIHdpdGggcyBhcyBzZWw6CisgICAgICAgICAgICBzZWwucmVnaXN0ZXIocmQsIHNlbGVjdG9ycy5FVkVOVF9SRUFEKQorICAgICAgICAgICAgc2VsLnJlZ2lzdGVyKHdyLCBzZWxlY3RvcnMuRVZFTlRfV1JJVEUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIHMuZ2V0X2tleSwgcmQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBzLmdldF9rZXksIHdyKQorCisgICAgZGVmIHRlc3RfZmlsZW5vKHNlbGYpOgorICAgICAgICBzID0gc2VsZi5TRUxFQ1RPUigpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzLmNsb3NlKQorCisgICAgICAgIGlmIGhhc2F0dHIocywgJ2ZpbGVubycpOgorICAgICAgICAgICAgZmQgPSBzLmZpbGVubygpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShmZCwgaW50KSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKGZkLCAwKQorCisgICAgZGVmIHRlc3Rfc2VsZWN0b3Ioc2VsZik6CisgICAgICAgIHMgPSBzZWxmLlNFTEVDVE9SKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHMuY2xvc2UpCisKKyAgICAgICAgTlVNX1NPQ0tFVFMgPSAxMgorICAgICAgICBNU0cgPSBiIiBUaGlzIGlzIGEgdGVzdC4iCisgICAgICAgIE1TR19MRU4gPSBsZW4oTVNHKQorICAgICAgICByZWFkZXJzID0gW10KKyAgICAgICAgd3JpdGVycyA9IFtdCisgICAgICAgIHIydyA9IHt9CisgICAgICAgIHcyciA9IHt9CisKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoTlVNX1NPQ0tFVFMpOgorICAgICAgICAgICAgcmQsIHdyID0gc2VsZi5tYWtlX3NvY2tldHBhaXIoKQorICAgICAgICAgICAgcy5yZWdpc3RlcihyZCwgc2VsZWN0b3JzLkVWRU5UX1JFQUQpCisgICAgICAgICAgICBzLnJlZ2lzdGVyKHdyLCBzZWxlY3RvcnMuRVZFTlRfV1JJVEUpCisgICAgICAgICAgICByZWFkZXJzLmFwcGVuZChyZCkKKyAgICAgICAgICAgIHdyaXRlcnMuYXBwZW5kKHdyKQorICAgICAgICAgICAgcjJ3W3JkXSA9IHdyCisgICAgICAgICAgICB3MnJbd3JdID0gcmQKKworICAgICAgICBidWZzID0gW10KKworICAgICAgICB3aGlsZSB3cml0ZXJzOgorICAgICAgICAgICAgcmVhZHkgPSBzLnNlbGVjdCgpCisgICAgICAgICAgICByZWFkeV93cml0ZXJzID0gZmluZF9yZWFkeV9tYXRjaGluZyhyZWFkeSwgc2VsZWN0b3JzLkVWRU5UX1dSSVRFKQorICAgICAgICAgICAgaWYgbm90IHJlYWR5X3dyaXRlcnM6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJubyBzb2NrZXRzIHJlYWR5IGZvciB3cml0aW5nIikKKyAgICAgICAgICAgIHdyID0gcmFuZG9tLmNob2ljZShyZWFkeV93cml0ZXJzKQorICAgICAgICAgICAgd3Iuc2VuZChNU0cpCisKKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDEwKToKKyAgICAgICAgICAgICAgICByZWFkeSA9IHMuc2VsZWN0KCkKKyAgICAgICAgICAgICAgICByZWFkeV9yZWFkZXJzID0gZmluZF9yZWFkeV9tYXRjaGluZyhyZWFkeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RvcnMuRVZFTlRfUkVBRCkKKyAgICAgICAgICAgICAgICBpZiByZWFkeV9yZWFkZXJzOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICMgdGhlcmUgbWlnaHQgYmUgYSBkZWxheSBiZXR3ZWVuIHRoZSB3cml0ZSB0byB0aGUgd3JpdGUgZW5kIGFuZAorICAgICAgICAgICAgICAgICMgdGhlIHJlYWQgZW5kIGlzIHJlcG9ydGVkIHJlYWR5CisgICAgICAgICAgICAgICAgc2xlZXAoMC4xKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIm5vIHNvY2tldHMgcmVhZHkgZm9yIHJlYWRpbmciKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbdzJyW3dyXV0sIHJlYWR5X3JlYWRlcnMpCisgICAgICAgICAgICByZCA9IHJlYWR5X3JlYWRlcnNbMF0KKyAgICAgICAgICAgIGJ1ZiA9IHJkLnJlY3YoTVNHX0xFTikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGJ1ZiksIE1TR19MRU4pCisgICAgICAgICAgICBidWZzLmFwcGVuZChidWYpCisgICAgICAgICAgICBzLnVucmVnaXN0ZXIocjJ3W3JkXSkKKyAgICAgICAgICAgIHMudW5yZWdpc3RlcihyZCkKKyAgICAgICAgICAgIHdyaXRlcnMucmVtb3ZlKHIyd1tyZF0pCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZzLCBbTVNHXSAqIE5VTV9TT0NLRVRTKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJywKKyAgICAgICAgICAgICAgICAgICAgICdzZWxlY3Quc2VsZWN0KCkgY2Fubm90IGJlIHVzZWQgd2l0aCBlbXB0eSBmZCBzZXRzJykKKyAgICBkZWYgdGVzdF9lbXB0eV9zZWxlY3Qoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzIzMDA5OiBNYWtlIHN1cmUgRXBvbGxTZWxlY3Rvci5zZWxlY3QoKSB3b3JrcyB3aGVuIG5vIEZEIGlzCisgICAgICAgICMgcmVnaXN0ZXJlZC4KKyAgICAgICAgcyA9IHNlbGYuU0VMRUNUT1IoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocy5jbG9zZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnNlbGVjdCh0aW1lb3V0PTApLCBbXSkKKworICAgIGRlZiB0ZXN0X3RpbWVvdXQoc2VsZik6CisgICAgICAgIHMgPSBzZWxmLlNFTEVDVE9SKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHMuY2xvc2UpCisKKyAgICAgICAgcmQsIHdyID0gc2VsZi5tYWtlX3NvY2tldHBhaXIoKQorCisgICAgICAgIHMucmVnaXN0ZXIod3IsIHNlbGVjdG9ycy5FVkVOVF9XUklURSkKKyAgICAgICAgdCA9IHRpbWUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxlbihzLnNlbGVjdCgwKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKHMuc2VsZWN0KC0xKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzcyh0aW1lKCkgLSB0LCAwLjUpCisKKyAgICAgICAgcy51bnJlZ2lzdGVyKHdyKQorICAgICAgICBzLnJlZ2lzdGVyKHJkLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCkKKyAgICAgICAgdCA9IHRpbWUoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHMuc2VsZWN0KDApKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHMuc2VsZWN0KC0xKSkKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzKHRpbWUoKSAtIHQsIDAuNSkKKworICAgICAgICB0MCA9IHRpbWUoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHMuc2VsZWN0KDEpKQorICAgICAgICB0MSA9IHRpbWUoKQorICAgICAgICBkdCA9IHQxIC0gdDAKKyAgICAgICAgIyBUb2xlcmF0ZSAyLjAgc2Vjb25kcyBmb3IgdmVyeSBzbG93IGJ1aWxkYm90cworICAgICAgICBzZWxmLmFzc2VydFRydWUoMC44IDw9IGR0IDw9IDIuMCwgZHQpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNpZ25hbCwgImFsYXJtIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgInNpZ25hbC5hbGFybSgpIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QiKQorICAgIGRlZiB0ZXN0X3NlbGVjdF9pbnRlcnJ1cHQoc2VsZik6CisgICAgICAgIHMgPSBzZWxmLlNFTEVDVE9SKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHMuY2xvc2UpCisKKyAgICAgICAgcmQsIHdyID0gc2VsZi5tYWtlX3NvY2tldHBhaXIoKQorCisgICAgICAgIG9yaWdfYWxybV9oYW5kbGVyID0gc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHQUxSTSwgbGFtYmRhICphcmdzOiBOb25lKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoc2lnbmFsLnNpZ25hbCwgc2lnbmFsLlNJR0FMUk0sIG9yaWdfYWxybV9oYW5kbGVyKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoc2lnbmFsLmFsYXJtLCAwKQorCisgICAgICAgIHNpZ25hbC5hbGFybSgxKQorCisgICAgICAgIHMucmVnaXN0ZXIocmQsIHNlbGVjdG9ycy5FVkVOVF9SRUFEKQorICAgICAgICB0ID0gdGltZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uocy5zZWxlY3QoMikpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzcyh0aW1lKCkgLSB0LCAyLjUpCisKKworY2xhc3MgU2NhbGFibGVTZWxlY3Rvck1peEluOgorCisgICAgIyBzZWUgaXNzdWUgIzE4OTYzIGZvciB3aHkgaXQncyBza2lwcGVkIG9uIG9sZGVyIE9TIFggdmVyc2lvbnMKKyAgICBAc3VwcG9ydC5yZXF1aXJlc19tYWNfdmVyKDEwLCA1KQorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHJlc291cmNlLCAiVGVzdCBuZWVkcyByZXNvdXJjZSBtb2R1bGUiKQorICAgIGRlZiB0ZXN0X2Fib3ZlX2ZkX3NldHNpemUoc2VsZik6CisgICAgICAgICMgQSBzY2FsYWJsZSBpbXBsZW1lbnRhdGlvbiBzaG91bGQgaGF2ZSBubyBwcm9ibGVtIHdpdGggbW9yZSB0aGFuCisgICAgICAgICMgRkRfU0VUU0laRSBmaWxlIGRlc2NyaXB0b3JzLiBTaW5jZSB3ZSBkb24ndCBrbm93IHRoZSB2YWx1ZSwgd2UganVzdAorICAgICAgICAjIHRyeSB0byBzZXQgdGhlIHNvZnQgUkxJTUlUX05PRklMRSB0byB0aGUgaGFyZCBSTElNSVRfTk9GSUxFIGNlaWxpbmcuCisgICAgICAgIHNvZnQsIGhhcmQgPSByZXNvdXJjZS5nZXRybGltaXQocmVzb3VyY2UuUkxJTUlUX05PRklMRSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmVzb3VyY2Uuc2V0cmxpbWl0KHJlc291cmNlLlJMSU1JVF9OT0ZJTEUsIChoYXJkLCBoYXJkKSkKKyAgICAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChyZXNvdXJjZS5zZXRybGltaXQsIHJlc291cmNlLlJMSU1JVF9OT0ZJTEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNvZnQsIGhhcmQpKQorICAgICAgICAgICAgTlVNX0ZEUyA9IG1pbihoYXJkLCAyKioxNikKKyAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIE5VTV9GRFMgPSBzb2Z0CisKKyAgICAgICAgIyBndWFyZCBmb3IgYWxyZWFkeSBhbGxvY2F0ZWQgRkRzIChzdGRpbiwgc3Rkb3V0Li4uKQorICAgICAgICBOVU1fRkRTIC09IDMyCisKKyAgICAgICAgcyA9IHNlbGYuU0VMRUNUT1IoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocy5jbG9zZSkKKworICAgICAgICBmb3IgaSBpbiByYW5nZShOVU1fRkRTIC8vIDIpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJkLCB3ciA9IHNlbGYubWFrZV9zb2NrZXRwYWlyKCkKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgICMgdG9vIG1hbnkgRkRzLCBza2lwIC0gbm90ZSB0aGF0IHdlIHNob3VsZCBvbmx5IGNhdGNoIEVNRklMRQorICAgICAgICAgICAgICAgICMgaGVyZSwgYnV0IGFwcGFyZW50bHkgKkJTRCBhbmQgU29sYXJpcyBjYW4gZmFpbCB1cG9uIGNvbm5lY3QoKQorICAgICAgICAgICAgICAgICMgb3IgYmluZCgpIHdpdGggRUFERFJOT1RBVkFJTCwgc28gbGV0J3MgYmUgc2FmZQorICAgICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoIkZEIGxpbWl0IHJlYWNoZWQiKQorCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcy5yZWdpc3RlcihyZCwgc2VsZWN0b3JzLkVWRU5UX1JFQUQpCisgICAgICAgICAgICAgICAgcy5yZWdpc3Rlcih3ciwgc2VsZWN0b3JzLkVWRU5UX1dSSVRFKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBpZiBlLmVycm5vID09IGVycm5vLkVOT1NQQzoKKyAgICAgICAgICAgICAgICAgICAgIyB0aGlzIGNhbiBiZSByYWlzZWQgYnkgZXBvbGwgaWYgd2UgZ28gb3ZlcgorICAgICAgICAgICAgICAgICAgICAjIGZzLmVwb2xsLm1heF91c2VyX3dhdGNoZXMgc3lzY3RsCisgICAgICAgICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoIkZEIGxpbWl0IHJlYWNoZWQiKQorICAgICAgICAgICAgICAgIHJhaXNlCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOVU1fRkRTIC8vIDIsIGxlbihzLnNlbGVjdCgpKSkKKworCitjbGFzcyBEZWZhdWx0U2VsZWN0b3JUZXN0Q2FzZShCYXNlU2VsZWN0b3JUZXN0Q2FzZSk6CisKKyAgICBTRUxFQ1RPUiA9IHNlbGVjdG9ycy5EZWZhdWx0U2VsZWN0b3IKKworCitjbGFzcyBTZWxlY3RTZWxlY3RvclRlc3RDYXNlKEJhc2VTZWxlY3RvclRlc3RDYXNlKToKKworICAgIFNFTEVDVE9SID0gc2VsZWN0b3JzLlNlbGVjdFNlbGVjdG9yCisKKworQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzZWxlY3RvcnMsICdQb2xsU2VsZWN0b3InKSwKKyAgICAgICAgICAgICAgICAgICAgICJUZXN0IG5lZWRzIHNlbGVjdG9ycy5Qb2xsU2VsZWN0b3IiKQorY2xhc3MgUG9sbFNlbGVjdG9yVGVzdENhc2UoQmFzZVNlbGVjdG9yVGVzdENhc2UsIFNjYWxhYmxlU2VsZWN0b3JNaXhJbik6CisKKyAgICBTRUxFQ1RPUiA9IGdldGF0dHIoc2VsZWN0b3JzLCAnUG9sbFNlbGVjdG9yJywgTm9uZSkKKworCitAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNlbGVjdG9ycywgJ0Vwb2xsU2VsZWN0b3InKSwKKyAgICAgICAgICAgICAgICAgICAgICJUZXN0IG5lZWRzIHNlbGVjdG9ycy5FcG9sbFNlbGVjdG9yIikKK2NsYXNzIEVwb2xsU2VsZWN0b3JUZXN0Q2FzZShCYXNlU2VsZWN0b3JUZXN0Q2FzZSwgU2NhbGFibGVTZWxlY3Rvck1peEluKToKKworICAgIFNFTEVDVE9SID0gZ2V0YXR0cihzZWxlY3RvcnMsICdFcG9sbFNlbGVjdG9yJywgTm9uZSkKKworCitAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNlbGVjdG9ycywgJ0txdWV1ZVNlbGVjdG9yJyksCisgICAgICAgICAgICAgICAgICAgICAiVGVzdCBuZWVkcyBzZWxlY3RvcnMuS3F1ZXVlU2VsZWN0b3IpIikKK2NsYXNzIEtxdWV1ZVNlbGVjdG9yVGVzdENhc2UoQmFzZVNlbGVjdG9yVGVzdENhc2UsIFNjYWxhYmxlU2VsZWN0b3JNaXhJbik6CisKKyAgICBTRUxFQ1RPUiA9IGdldGF0dHIoc2VsZWN0b3JzLCAnS3F1ZXVlU2VsZWN0b3InLCBOb25lKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0cyA9IFtEZWZhdWx0U2VsZWN0b3JUZXN0Q2FzZSwgU2VsZWN0U2VsZWN0b3JUZXN0Q2FzZSwKKyAgICAgICAgICAgICBQb2xsU2VsZWN0b3JUZXN0Q2FzZSwgRXBvbGxTZWxlY3RvclRlc3RDYXNlLAorICAgICAgICAgICAgIEtxdWV1ZVNlbGVjdG9yVGVzdENhc2VdCisgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoKnRlc3RzKQorICAgIHN1cHBvcnQucmVhcF9jaGlsZHJlbigpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zZXQucHkgYi9MaWIvdGVzdC90ZXN0X3NldC5weQppbmRleCBjMGJjYTJmLi5mMDg0ZWJlIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3NldC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3NldC5weQpAQCAtMjMxLDI5ICsyMzEsMzAgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zLCBkdXAsICIlcyAhPSAlcyIgJSAoc2VsZi5zLCBkdXApKQogICAgICAgICAgICAgaWYgdHlwZShzZWxmLnMpIG5vdCBpbiAoc2V0LCBmcm96ZW5zZXQpOgogICAgICAgICAgICAgICAgIHNlbGYucy54ID0gMTAKLSAgICAgICAgICAgICAgICBwID0gcGlja2xlLmR1bXBzKHNlbGYucykKKyAgICAgICAgICAgICAgICBwID0gcGlja2xlLmR1bXBzKHNlbGYucywgaSkKICAgICAgICAgICAgICAgICBkdXAgPSBwaWNrbGUubG9hZHMocCkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucy54LCBkdXAueCkKIAogICAgIGRlZiB0ZXN0X2l0ZXJhdG9yX3BpY2tsaW5nKHNlbGYpOgotICAgICAgICBpdG9yZyA9IGl0ZXIoc2VsZi5zKQotICAgICAgICBkYXRhID0gc2VsZi50aGV0eXBlKHNlbGYucykKLSAgICAgICAgZCA9IHBpY2tsZS5kdW1wcyhpdG9yZykKLSAgICAgICAgaXQgPSBwaWNrbGUubG9hZHMoZCkKLSAgICAgICAgIyBTZXQgaXRlcmF0b3JzIHVucGlja2xlIGFzIGxpc3QgaXRlcmF0b3JzIGR1ZSB0byB0aGUKLSAgICAgICAgIyB1bmRlZmluZWQgb3JkZXIgb2Ygc2V0IGl0ZW1zLgotICAgICAgICAjIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShpdG9yZyksIHR5cGUoaXQpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShpdCwgY29sbGVjdGlvbnMuYWJjLkl0ZXJhdG9yKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnRoZXR5cGUoaXQpLCBkYXRhKQorICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIGl0b3JnID0gaXRlcihzZWxmLnMpCisgICAgICAgICAgICBkYXRhID0gc2VsZi50aGV0eXBlKHNlbGYucykKKyAgICAgICAgICAgIGQgPSBwaWNrbGUuZHVtcHMoaXRvcmcsIHByb3RvKQorICAgICAgICAgICAgaXQgPSBwaWNrbGUubG9hZHMoZCkKKyAgICAgICAgICAgICMgU2V0IGl0ZXJhdG9ycyB1bnBpY2tsZSBhcyBsaXN0IGl0ZXJhdG9ycyBkdWUgdG8gdGhlCisgICAgICAgICAgICAjIHVuZGVmaW5lZCBvcmRlciBvZiBzZXQgaXRlbXMuCisgICAgICAgICAgICAjIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShpdG9yZyksIHR5cGUoaXQpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGl0LCBjb2xsZWN0aW9ucy5hYmMuSXRlcmF0b3IpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudGhldHlwZShpdCksIGRhdGEpCiAKLSAgICAgICAgaXQgPSBwaWNrbGUubG9hZHMoZCkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZHJvcCA9IG5leHQoaXQpCi0gICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGQgPSBwaWNrbGUuZHVtcHMoaXQpCi0gICAgICAgIGl0ID0gcGlja2xlLmxvYWRzKGQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50aGV0eXBlKGl0KSwgZGF0YSAtIHNlbGYudGhldHlwZSgoZHJvcCwpKSkKKyAgICAgICAgICAgIGl0ID0gcGlja2xlLmxvYWRzKGQpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZHJvcCA9IG5leHQoaXQpCisgICAgICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgZCA9IHBpY2tsZS5kdW1wcyhpdCwgcHJvdG8pCisgICAgICAgICAgICBpdCA9IHBpY2tsZS5sb2FkcyhkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnRoZXR5cGUoaXQpLCBkYXRhIC0gc2VsZi50aGV0eXBlKChkcm9wLCkpKQogCiAgICAgZGVmIHRlc3RfZGVlcGNvcHkoc2VsZik6CiAgICAgICAgIGNsYXNzIFRyYWNlcjoKQEAgLTg0OCwxNSArODQ5LDE0IEBACiAgICAgICAgIGZvciB2IGluIHNlbGYuc2V0OgogICAgICAgICAgICAgc2VsZi5hc3NlcnRJbih2LCBzZWxmLnZhbHVlcykKICAgICAgICAgc2V0aXRlciA9IGl0ZXIoc2VsZi5zZXQpCi0gICAgICAgICMgbm90ZTogX19sZW5ndGhfaGludF9fIGlzIGFuIGludGVybmFsIHVuZG9jdW1lbnRlZCBBUEksCi0gICAgICAgICMgZG9uJ3QgcmVseSBvbiBpdCBpbiB5b3VyIG93biBwcm9ncmFtcwogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldGl0ZXIuX19sZW5ndGhfaGludF9fKCksIGxlbihzZWxmLnNldCkpCiAKICAgICBkZWYgdGVzdF9waWNrbGluZyhzZWxmKToKLSAgICAgICAgcCA9IHBpY2tsZS5kdW1wcyhzZWxmLnNldCkKLSAgICAgICAgY29weSA9IHBpY2tsZS5sb2FkcyhwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2V0LCBjb3B5LAotICAgICAgICAgICAgICAgICAgICAgICAgICIlcyAhPSAlcyIgJSAoc2VsZi5zZXQsIGNvcHkpKQorICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIHAgPSBwaWNrbGUuZHVtcHMoc2VsZi5zZXQsIHByb3RvKQorICAgICAgICAgICAgY29weSA9IHBpY2tsZS5sb2FkcyhwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNldCwgY29weSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzICE9ICVzIiAlIChzZWxmLnNldCwgY29weSkpCiAKICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtMTczMSw2ICsxNzMxLDE3IEBACiAgICAgICAgIGJlX2JhZCA9IFRydWUKICAgICAgICAgc2V0MS5zeW1tZXRyaWNfZGlmZmVyZW5jZV91cGRhdGUoZGljdDIpCiAKKyAgICBkZWYgdGVzdF9pdGVyX2FuZF9tdXRhdGUoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzI0NTgxCisgICAgICAgIHMgPSBzZXQocmFuZ2UoMTAwKSkKKyAgICAgICAgcy5jbGVhcigpCisgICAgICAgIHMudXBkYXRlKHJhbmdlKDEwMCkpCisgICAgICAgIHNpID0gaXRlcihzKQorICAgICAgICBzLmNsZWFyKCkKKyAgICAgICAgYSA9IGxpc3QocmFuZ2UoMTAwKSkKKyAgICAgICAgcy51cGRhdGUocmFuZ2UoMTAwKSkKKyAgICAgICAgbGlzdChzaSkKKwogIyBBcHBsaWNhdGlvbiB0ZXN0cyAoYmFzZWQgb24gRGF2aWQgRXBwc3RlaW4ncyBncmFwaCByZWNpcGVzID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiBkZWYgcG93ZXJzZXQoVSk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3NoZWx2ZS5weSBiL0xpYi90ZXN0L3Rlc3Rfc2hlbHZlLnB5CmluZGV4IDEzYzEyNjUuLmJkNTFkODYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc2hlbHZlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc2hlbHZlLnB5CkBAIC0xNDgsNiArMTQ4LDE5IEBACiAgICAgICAgIHAyID0gZFtlbmNvZGVka2V5XQogICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHAxLCBwMikgICMgV3JpdGUgY3JlYXRlcyBuZXcgb2JqZWN0IGluIHN0b3JlCiAKKyAgICBkZWYgdGVzdF93aXRoKHNlbGYpOgorICAgICAgICBkMSA9IHt9CisgICAgICAgIHdpdGggc2hlbHZlLlNoZWxmKGQxLCBwcm90b2NvbD0yLCB3cml0ZWJhY2s9RmFsc2UpIGFzIHM6CisgICAgICAgICAgICBzWydrZXkxJ10gPSBbMSwyLDMsNF0KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc1sna2V5MSddLCBbMSwyLDMsNF0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbGVuLCBzKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzWydrZXkxJ10KKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoJ0Nsb3NlZCBzaGVsZiBzaG91bGQgbm90IGZpbmQgYSBrZXknKQogCiBmcm9tIHRlc3QgaW1wb3J0IG1hcHBpbmdfdGVzdHMKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zaHV0aWwucHkgYi9MaWIvdGVzdC90ZXN0X3NodXRpbC5weQppbmRleCBjM2ZiOGE3Li5kMmQ0ZDAzIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3NodXRpbC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3NodXRpbC5weQpAQCAtMSw2ICsxLDcgQEAKICMgQ29weXJpZ2h0IChDKSAyMDAzIFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uCiAKIGltcG9ydCB1bml0dGVzdAoraW1wb3J0IHVuaXR0ZXN0Lm1vY2sKIGltcG9ydCBzaHV0aWwKIGltcG9ydCB0ZW1wZmlsZQogaW1wb3J0IHN5cwpAQCAtMTAsMTUgKzExLDEzIEBACiBpbXBvcnQgZXJybm8KIGltcG9ydCBmdW5jdG9vbHMKIGltcG9ydCBzdWJwcm9jZXNzCi1mcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKLWZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBURVNURk4KLWZyb20gb3MucGF0aCBpbXBvcnQgc3BsaXRkcml2ZQotZnJvbSBkaXN0dXRpbHMuc3Bhd24gaW1wb3J0IGZpbmRfZXhlY3V0YWJsZSwgc3Bhd24KLWZyb20gc2h1dGlsIGltcG9ydCAoX21ha2VfdGFyYmFsbCwgX21ha2VfemlwZmlsZSwgbWFrZV9hcmNoaXZlLAorZnJvbSBjb250ZXh0bGliIGltcG9ydCBFeGl0U3RhY2sKK2Zyb20gc2h1dGlsIGltcG9ydCAobWFrZV9hcmNoaXZlLAogICAgICAgICAgICAgICAgICAgICByZWdpc3Rlcl9hcmNoaXZlX2Zvcm1hdCwgdW5yZWdpc3Rlcl9hcmNoaXZlX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgZ2V0X2FyY2hpdmVfZm9ybWF0cywgRXJyb3IsIHVucGFja19hcmNoaXZlLAogICAgICAgICAgICAgICAgICAgICByZWdpc3Rlcl91bnBhY2tfZm9ybWF0LCBSZWdpc3RyeUVycm9yLAotICAgICAgICAgICAgICAgICAgICB1bnJlZ2lzdGVyX3VucGFja19mb3JtYXQsIGdldF91bnBhY2tfZm9ybWF0cykKKyAgICAgICAgICAgICAgICAgICAgdW5yZWdpc3Rlcl91bnBhY2tfZm9ybWF0LCBnZXRfdW5wYWNrX2Zvcm1hdHMsCisgICAgICAgICAgICAgICAgICAgIFNhbWVGaWxlRXJyb3IpCiBpbXBvcnQgdGFyZmlsZQogaW1wb3J0IHdhcm5pbmdzCiAKQEAgLTQ0LDcgKzQzLDcgQEAKICAgICBpbXBvcnQgemlwZmlsZQogICAgIFpJUF9TVVBQT1JUID0gVHJ1ZQogZXhjZXB0IEltcG9ydEVycm9yOgotICAgIFpJUF9TVVBQT1JUID0gZmluZF9leGVjdXRhYmxlKCd6aXAnKQorICAgIFpJUF9TVVBQT1JUID0gc2h1dGlsLndoaWNoKCd6aXAnKQogCiBkZWYgX2Zha2VfcmVuYW1lKCphcmdzLCAqKmt3YXJncyk6CiAgICAgIyBQcmV0ZW5kIHRoZSBkZXN0aW5hdGlvbiBwYXRoIGlzIG9uIGEgZGlmZmVyZW50IGZpbGVzeXN0ZW0uCkBAIC04NSw2ICs4NCwxOCBAQAogICAgIHdpdGggb3BlbihwYXRoLCAncmInIGlmIGJpbmFyeSBlbHNlICdyJykgYXMgZnA6CiAgICAgICAgIHJldHVybiBmcC5yZWFkKCkKIAorZGVmIHJsaXN0ZGlyKHBhdGgpOgorICAgIHJlcyA9IFtdCisgICAgZm9yIG5hbWUgaW4gc29ydGVkKG9zLmxpc3RkaXIocGF0aCkpOgorICAgICAgICBwID0gb3MucGF0aC5qb2luKHBhdGgsIG5hbWUpCisgICAgICAgIGlmIG9zLnBhdGguaXNkaXIocCkgYW5kIG5vdCBvcy5wYXRoLmlzbGluayhwKToKKyAgICAgICAgICAgIHJlcy5hcHBlbmQobmFtZSArICcvJykKKyAgICAgICAgICAgIGZvciBuIGluIHJsaXN0ZGlyKHApOgorICAgICAgICAgICAgICAgIHJlcy5hcHBlbmQobmFtZSArICcvJyArIG4pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXMuYXBwZW5kKG5hbWUpCisgICAgcmV0dXJuIHJlcworCiAKIGNsYXNzIFRlc3RTaHV0aWwodW5pdHRlc3QuVGVzdENhc2UpOgogCkBAIC0xMTUsNyArMTI2LDkgQEAKICAgICAgICAgd3JpdGVfZmlsZShvcy5wYXRoLmpvaW4odmljdGltLCAnc29tZWZpbGUnKSwgJ2ZvbycpCiAgICAgICAgIHZpY3RpbSA9IG9zLmZzZW5jb2RlKHZpY3RpbSkKICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHZpY3RpbSwgYnl0ZXMpCi0gICAgICAgIHNodXRpbC5ybXRyZWUodmljdGltKQorICAgICAgICB3aW4gPSAob3MubmFtZSA9PSAnbnQnKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKSBpZiB3aW4gZWxzZSBFeGl0U3RhY2soKToKKyAgICAgICAgICAgIHNodXRpbC5ybXRyZWUodmljdGltKQogCiAgICAgQHN1cHBvcnQuc2tpcF91bmxlc3Nfc3ltbGluawogICAgIGRlZiB0ZXN0X3JtdHJlZV9mYWlsc19vbl9zeW1saW5rKHNlbGYpOgpAQCAtNzQ2LDEzICs3NTksMjcgQEAKICAgICAgICAgc2h1dGlsLmNvcHl0cmVlKHNyY19kaXIsIGRzdF9kaXIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Muc3RhdChzcmNfZGlyKS5zdF9tb2RlLCBvcy5zdGF0KGRzdF9kaXIpLnN0X21vZGUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Muc3RhdChvcy5wYXRoLmpvaW4oc3JjX2RpciwgJ3Blcm1pc3NpdmUudHh0JykpLnN0X21vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgb3Muc3RhdChvcy5wYXRoLmpvaW4oZHN0X2RpciwgJ3Blcm1pc3NpdmUudHh0JykpLnN0X21vZGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnN0YXQob3MucGF0aC5qb2luKGRzdF9kaXIsICdwZXJtaXNzaXZlLnR4dCcpKS5zdF9tb2RlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnN0YXQob3MucGF0aC5qb2luKHNyY19kaXIsICdyZXN0cmljdGl2ZS50eHQnKSkuc3RfbW9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBvcy5zdGF0KG9zLnBhdGguam9pbihkc3RfZGlyLCAncmVzdHJpY3RpdmUudHh0JykpLnN0X21vZGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnN0YXQob3MucGF0aC5qb2luKGRzdF9kaXIsICdyZXN0cmljdGl2ZS50eHQnKSkuc3RfbW9kZSkKICAgICAgICAgcmVzdHJpY3RpdmVfc3ViZGlyX2RzdCA9IG9zLnBhdGguam9pbihkc3RfZGlyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguc3BsaXQocmVzdHJpY3RpdmVfc3ViZGlyKVsxXSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5zdGF0KHJlc3RyaWN0aXZlX3N1YmRpcikuc3RfbW9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBvcy5zdGF0KHJlc3RyaWN0aXZlX3N1YmRpcl9kc3QpLnN0X21vZGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnN0YXQocmVzdHJpY3RpdmVfc3ViZGlyX2RzdCkuc3RfbW9kZSkKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdvcy5jaG1vZCcpCisgICAgZGVmIHRlc3RfY29weXRyZWVfd2luZXJyb3Ioc2VsZiwgbW9ja19wYXRjaCk6CisgICAgICAgICMgV2hlbiBjb3B5aW5nIHRvIFZGQVQsIGNvcHlzdGF0KCkgcmFpc2VzIE9TRXJyb3IuIE9uIFdpbmRvd3MsIHRoZQorICAgICAgICAjIGV4Y2VwdGlvbiBvYmplY3QgaGFzIGEgbWVhbmluZ2Z1bCAnd2luZXJyb3InIGF0dHJpYnV0ZSwgYnV0IG5vdAorICAgICAgICAjIG9uIG90aGVyIG9wZXJhdGluZyBzeXN0ZW1zLiBEbyBub3QgYXNzdW1lICd3aW5lcnJvcicgaXMgc2V0LgorICAgICAgICBzcmNfZGlyID0gdGVtcGZpbGUubWtkdGVtcCgpCisgICAgICAgIGRzdF9kaXIgPSBvcy5wYXRoLmpvaW4odGVtcGZpbGUubWtkdGVtcCgpLCAnZGVzdGluYXRpb24nKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoc2h1dGlsLnJtdHJlZSwgc3JjX2RpcikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHNodXRpbC5ybXRyZWUsIG9zLnBhdGguZGlybmFtZShkc3RfZGlyKSkKKworICAgICAgICBtb2NrX3BhdGNoLnNpZGVfZWZmZWN0ID0gUGVybWlzc2lvbkVycm9yKCdrYS1ib29tJykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzaHV0aWwuRXJyb3IpOgorICAgICAgICAgICAgc2h1dGlsLmNvcHl0cmVlKHNyY19kaXIsIGRzdF9kaXIpCiAKICAgICBAdW5pdHRlc3Quc2tpcElmKG9zLm5hbWUgPT0gJ250JywgJ3RlbXBvcmFyaWx5IGRpc2FibGVkIG9uIFdpbmRvd3MnKQogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICdsaW5rJyksICdyZXF1aXJlcyBvcy5saW5rJykKQEAgLTc2NSw3ICs3OTIsNyBAQAogICAgICAgICAgICAgd2l0aCBvcGVuKHNyYywgJ3cnKSBhcyBmOgogICAgICAgICAgICAgICAgIGYud3JpdGUoJ2NoZWRkYXInKQogICAgICAgICAgICAgb3MubGluayhzcmMsIGRzdCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNodXRpbC5FcnJvciwgc2h1dGlsLmNvcHlmaWxlLCBzcmMsIGRzdCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNodXRpbC5TYW1lRmlsZUVycm9yLCBzaHV0aWwuY29weWZpbGUsIHNyYywgZHN0KQogICAgICAgICAgICAgd2l0aCBvcGVuKHNyYywgJ3InKSBhcyBmOgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksICdjaGVkZGFyJykKICAgICAgICAgICAgIG9zLnJlbW92ZShkc3QpCkBAIC03ODUsNyArODEyLDcgQEAKICAgICAgICAgICAgICMgdG8gVEVTVEZOL1RFU1RGTi9jaGVlc2UsIHdoaWxlIGl0IHNob3VsZCBwb2ludCBhdAogICAgICAgICAgICAgIyBURVNURk4vY2hlZXNlLgogICAgICAgICAgICAgb3Muc3ltbGluaygnY2hlZXNlJywgZHN0KQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2h1dGlsLkVycm9yLCBzaHV0aWwuY29weWZpbGUsIHNyYywgZHN0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2h1dGlsLlNhbWVGaWxlRXJyb3IsIHNodXRpbC5jb3B5ZmlsZSwgc3JjLCBkc3QpCiAgICAgICAgICAgICB3aXRoIG9wZW4oc3JjLCAncicpIGFzIGY6CiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgJ2NoZWRkYXInKQogICAgICAgICAgICAgb3MucmVtb3ZlKGRzdCkKQEAgLTg3Niw2ICs5MDMsMjYgQEAKICAgICAgICAgc2h1dGlsLmNvcHl0cmVlKHNyY19kaXIsIGRzdF9kaXIsIHN5bWxpbmtzPVRydWUpCiAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3Rlc3QudHh0Jywgb3MubGlzdGRpcihkc3RfZGlyKSkKIAorICAgIEBzdXBwb3J0LnNraXBfdW5sZXNzX3N5bWxpbmsKKyAgICBkZWYgdGVzdF9jb3B5dHJlZV9zeW1saW5rX2RpcihzZWxmKToKKyAgICAgICAgc3JjX2RpciA9IHNlbGYubWtkdGVtcCgpCisgICAgICAgIGRzdF9kaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5ta2R0ZW1wKCksICdkZXN0aW5hdGlvbicpCisgICAgICAgIG9zLm1rZGlyKG9zLnBhdGguam9pbihzcmNfZGlyLCAncmVhbF9kaXInKSkKKyAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihzcmNfZGlyLCAncmVhbF9kaXInLCAndGVzdC50eHQnKSwgJ3cnKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgb3Muc3ltbGluayhvcy5wYXRoLmpvaW4oc3JjX2RpciwgJ3JlYWxfZGlyJyksCisgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHNyY19kaXIsICdsaW5rX3RvX2RpcicpLAorICAgICAgICAgICAgICAgICAgIHRhcmdldF9pc19kaXJlY3Rvcnk9VHJ1ZSkKKworICAgICAgICBzaHV0aWwuY29weXRyZWUoc3JjX2RpciwgZHN0X2Rpciwgc3ltbGlua3M9RmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5pc2xpbmsob3MucGF0aC5qb2luKGRzdF9kaXIsICdsaW5rX3RvX2RpcicpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigndGVzdC50eHQnLCBvcy5saXN0ZGlyKG9zLnBhdGguam9pbihkc3RfZGlyLCAnbGlua190b19kaXInKSkpCisKKyAgICAgICAgZHN0X2RpciA9IG9zLnBhdGguam9pbihzZWxmLm1rZHRlbXAoKSwgJ2Rlc3RpbmF0aW9uMicpCisgICAgICAgIHNodXRpbC5jb3B5dHJlZShzcmNfZGlyLCBkc3RfZGlyLCBzeW1saW5rcz1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2xpbmsob3MucGF0aC5qb2luKGRzdF9kaXIsICdsaW5rX3RvX2RpcicpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigndGVzdC50eHQnLCBvcy5saXN0ZGlyKG9zLnBhdGguam9pbihkc3RfZGlyLCAnbGlua190b19kaXInKSkpCisKICAgICBkZWYgX2NvcHlfZmlsZShzZWxmLCBtZXRob2QpOgogICAgICAgICBmbmFtZSA9ICd0ZXN0LnR4dCcKICAgICAgICAgdG1wZGlyID0gc2VsZi5ta2R0ZW1wKCkKQEAgLTkxNCwxMzkgKzk2MSwxNjYgQEAKICAgICBAcmVxdWlyZXNfemxpYgogICAgIGRlZiB0ZXN0X21ha2VfdGFyYmFsbChzZWxmKToKICAgICAgICAgIyBjcmVhdGluZyBzb21ldGhpbmcgdG8gdGFyCi0gICAgICAgIHRtcGRpciA9IHNlbGYubWtkdGVtcCgpCi0gICAgICAgIHdyaXRlX2ZpbGUoKHRtcGRpciwgJ2ZpbGUxJyksICd4eHgnKQotICAgICAgICB3cml0ZV9maWxlKCh0bXBkaXIsICdmaWxlMicpLCAneHh4JykKLSAgICAgICAgb3MubWtkaXIob3MucGF0aC5qb2luKHRtcGRpciwgJ3N1YicpKQotICAgICAgICB3cml0ZV9maWxlKCh0bXBkaXIsICdzdWInLCAnZmlsZTMnKSwgJ3h4eCcpCisgICAgICAgIHJvb3RfZGlyLCBiYXNlX2RpciA9IHNlbGYuX2NyZWF0ZV9maWxlcygnJykKIAogICAgICAgICB0bXBkaXIyID0gc2VsZi5ta2R0ZW1wKCkKICAgICAgICAgIyBmb3JjZSBzaHV0aWwgdG8gY3JlYXRlIHRoZSBkaXJlY3RvcnkKICAgICAgICAgb3Mucm1kaXIodG1wZGlyMikKLSAgICAgICAgdW5pdHRlc3Quc2tpcFVubGVzcyhzcGxpdGRyaXZlKHRtcGRpcilbMF0gPT0gc3BsaXRkcml2ZSh0bXBkaXIyKVswXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIGFuZCB0YXJnZXQgc2hvdWxkIGJlIG9uIHNhbWUgZHJpdmUiKQorICAgICAgICAjIHdvcmtpbmcgd2l0aCByZWxhdGl2ZSBwYXRocworICAgICAgICB3b3JrX2RpciA9IG9zLnBhdGguZGlybmFtZSh0bXBkaXIyKQorICAgICAgICByZWxfYmFzZV9uYW1lID0gb3MucGF0aC5qb2luKG9zLnBhdGguYmFzZW5hbWUodG1wZGlyMiksICdhcmNoaXZlJykKIAotICAgICAgICBiYXNlX25hbWUgPSBvcy5wYXRoLmpvaW4odG1wZGlyMiwgJ2FyY2hpdmUnKQotCi0gICAgICAgICMgd29ya2luZyB3aXRoIHJlbGF0aXZlIHBhdGhzIHRvIGF2b2lkIHRhciB3YXJuaW5ncwotICAgICAgICBvbGRfZGlyID0gb3MuZ2V0Y3dkKCkKLSAgICAgICAgb3MuY2hkaXIodG1wZGlyKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBfbWFrZV90YXJiYWxsKHNwbGl0ZHJpdmUoYmFzZV9uYW1lKVsxXSwgJy4nKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgb3MuY2hkaXIob2xkX2RpcikKKyAgICAgICAgd2l0aCBzdXBwb3J0LmNoYW5nZV9jd2Qod29ya19kaXIpOgorICAgICAgICAgICAgYmFzZV9uYW1lID0gb3MucGF0aC5hYnNwYXRoKHJlbF9iYXNlX25hbWUpCisgICAgICAgICAgICB0YXJiYWxsID0gbWFrZV9hcmNoaXZlKHJlbF9iYXNlX25hbWUsICdnenRhcicsIHJvb3RfZGlyLCAnLicpCiAKICAgICAgICAgIyBjaGVjayBpZiB0aGUgY29tcHJlc3NlZCB0YXJiYWxsIHdhcyBjcmVhdGVkCi0gICAgICAgIHRhcmJhbGwgPSBiYXNlX25hbWUgKyAnLnRhci5neicKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHRhcmJhbGwpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRhcmJhbGwsIGJhc2VfbmFtZSArICcudGFyLmd6JykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKHRhcmJhbGwpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodGFyZmlsZS5pc190YXJmaWxlKHRhcmJhbGwpKQorICAgICAgICB3aXRoIHRhcmZpbGUub3Blbih0YXJiYWxsLCAncjpneicpIGFzIHRmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRDb3VudEVxdWFsKHRmLmdldG5hbWVzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWycuJywgJy4vc3ViJywgJy4vc3ViMicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcuL2ZpbGUxJywgJy4vZmlsZTInLCAnLi9zdWIvZmlsZTMnXSkKIAogICAgICAgICAjIHRyeWluZyBhbiB1bmNvbXByZXNzZWQgb25lCi0gICAgICAgIGJhc2VfbmFtZSA9IG9zLnBhdGguam9pbih0bXBkaXIyLCAnYXJjaGl2ZScpCi0gICAgICAgIG9sZF9kaXIgPSBvcy5nZXRjd2QoKQotICAgICAgICBvcy5jaGRpcih0bXBkaXIpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIF9tYWtlX3RhcmJhbGwoc3BsaXRkcml2ZShiYXNlX25hbWUpWzFdLCAnLicsIGNvbXByZXNzPU5vbmUpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBvcy5jaGRpcihvbGRfZGlyKQotICAgICAgICB0YXJiYWxsID0gYmFzZV9uYW1lICsgJy50YXInCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyh0YXJiYWxsKSkKKyAgICAgICAgd2l0aCBzdXBwb3J0LmNoYW5nZV9jd2Qod29ya19kaXIpOgorICAgICAgICAgICAgdGFyYmFsbCA9IG1ha2VfYXJjaGl2ZShyZWxfYmFzZV9uYW1lLCAndGFyJywgcm9vdF9kaXIsICcuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YXJiYWxsLCBiYXNlX25hbWUgKyAnLnRhcicpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZSh0YXJiYWxsKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRhcmZpbGUuaXNfdGFyZmlsZSh0YXJiYWxsKSkKKyAgICAgICAgd2l0aCB0YXJmaWxlLm9wZW4odGFyYmFsbCwgJ3InKSBhcyB0ZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Q291bnRFcXVhbCh0Zi5nZXRuYW1lcygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnLicsICcuL3N1YicsICcuL3N1YjInLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcuL2ZpbGUxJywgJy4vZmlsZTInLCAnLi9zdWIvZmlsZTMnXSkKIAogICAgIGRlZiBfdGFyaW5mbyhzZWxmLCBwYXRoKToKLSAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKHBhdGgpCi0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCB0YXJmaWxlLm9wZW4ocGF0aCkgYXMgdGFyOgogICAgICAgICAgICAgbmFtZXMgPSB0YXIuZ2V0bmFtZXMoKQogICAgICAgICAgICAgbmFtZXMuc29ydCgpCiAgICAgICAgICAgICByZXR1cm4gdHVwbGUobmFtZXMpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICB0YXIuY2xvc2UoKQogCi0gICAgZGVmIF9jcmVhdGVfZmlsZXMoc2VsZik6CisgICAgZGVmIF9jcmVhdGVfZmlsZXMoc2VsZiwgYmFzZV9kaXI9J2Rpc3QnKToKICAgICAgICAgIyBjcmVhdGluZyBzb21ldGhpbmcgdG8gdGFyCi0gICAgICAgIHRtcGRpciA9IHNlbGYubWtkdGVtcCgpCi0gICAgICAgIGRpc3QgPSBvcy5wYXRoLmpvaW4odG1wZGlyLCAnZGlzdCcpCi0gICAgICAgIG9zLm1rZGlyKGRpc3QpCisgICAgICAgIHJvb3RfZGlyID0gc2VsZi5ta2R0ZW1wKCkKKyAgICAgICAgZGlzdCA9IG9zLnBhdGguam9pbihyb290X2RpciwgYmFzZV9kaXIpCisgICAgICAgIG9zLm1ha2VkaXJzKGRpc3QsIGV4aXN0X29rPVRydWUpCiAgICAgICAgIHdyaXRlX2ZpbGUoKGRpc3QsICdmaWxlMScpLCAneHh4JykKICAgICAgICAgd3JpdGVfZmlsZSgoZGlzdCwgJ2ZpbGUyJyksICd4eHgnKQogICAgICAgICBvcy5ta2Rpcihvcy5wYXRoLmpvaW4oZGlzdCwgJ3N1YicpKQogICAgICAgICB3cml0ZV9maWxlKChkaXN0LCAnc3ViJywgJ2ZpbGUzJyksICd4eHgnKQogICAgICAgICBvcy5ta2Rpcihvcy5wYXRoLmpvaW4oZGlzdCwgJ3N1YjInKSkKLSAgICAgICAgdG1wZGlyMiA9IHNlbGYubWtkdGVtcCgpCi0gICAgICAgIGJhc2VfbmFtZSA9IG9zLnBhdGguam9pbih0bXBkaXIyLCAnYXJjaGl2ZScpCi0gICAgICAgIHJldHVybiB0bXBkaXIsIHRtcGRpcjIsIGJhc2VfbmFtZQorICAgICAgICBpZiBiYXNlX2RpcjoKKyAgICAgICAgICAgIHdyaXRlX2ZpbGUoKHJvb3RfZGlyLCAnb3V0ZXInKSwgJ3h4eCcpCisgICAgICAgIHJldHVybiByb290X2RpciwgYmFzZV9kaXIKIAogICAgIEByZXF1aXJlc196bGliCi0gICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoZmluZF9leGVjdXRhYmxlKCd0YXInKSBhbmQgZmluZF9leGVjdXRhYmxlKCdnemlwJyksCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Moc2h1dGlsLndoaWNoKCd0YXInKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAnTmVlZCB0aGUgdGFyIGNvbW1hbmQgdG8gcnVuJykKICAgICBkZWYgdGVzdF90YXJmaWxlX3ZzX3RhcihzZWxmKToKLSAgICAgICAgdG1wZGlyLCB0bXBkaXIyLCBiYXNlX25hbWUgPSAgc2VsZi5fY3JlYXRlX2ZpbGVzKCkKLSAgICAgICAgb2xkX2RpciA9IG9zLmdldGN3ZCgpCi0gICAgICAgIG9zLmNoZGlyKHRtcGRpcikKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgX21ha2VfdGFyYmFsbChiYXNlX25hbWUsICdkaXN0JykKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIG9zLmNoZGlyKG9sZF9kaXIpCisgICAgICAgIHJvb3RfZGlyLCBiYXNlX2RpciA9IHNlbGYuX2NyZWF0ZV9maWxlcygpCisgICAgICAgIGJhc2VfbmFtZSA9IG9zLnBhdGguam9pbihzZWxmLm1rZHRlbXAoKSwgJ2FyY2hpdmUnKQorICAgICAgICB0YXJiYWxsID0gbWFrZV9hcmNoaXZlKGJhc2VfbmFtZSwgJ2d6dGFyJywgcm9vdF9kaXIsIGJhc2VfZGlyKQogCiAgICAgICAgICMgY2hlY2sgaWYgdGhlIGNvbXByZXNzZWQgdGFyYmFsbCB3YXMgY3JlYXRlZAotICAgICAgICB0YXJiYWxsID0gYmFzZV9uYW1lICsgJy50YXIuZ3onCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyh0YXJiYWxsKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YXJiYWxsLCBiYXNlX25hbWUgKyAnLnRhci5neicpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZSh0YXJiYWxsKSkKIAogICAgICAgICAjIG5vdyBjcmVhdGUgYW5vdGhlciB0YXJiYWxsIHVzaW5nIGB0YXJgCi0gICAgICAgIHRhcmJhbGwyID0gb3MucGF0aC5qb2luKHRtcGRpciwgJ2FyY2hpdmUyLnRhci5neicpCi0gICAgICAgIHRhcl9jbWQgPSBbJ3RhcicsICctY2YnLCAnYXJjaGl2ZTIudGFyJywgJ2Rpc3QnXQotICAgICAgICBnemlwX2NtZCA9IFsnZ3ppcCcsICctZjknLCAnYXJjaGl2ZTIudGFyJ10KLSAgICAgICAgb2xkX2RpciA9IG9zLmdldGN3ZCgpCi0gICAgICAgIG9zLmNoZGlyKHRtcGRpcikKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBzOgotICAgICAgICAgICAgICAgIHNwYXduKHRhcl9jbWQpCi0gICAgICAgICAgICAgICAgc3Bhd24oZ3ppcF9jbWQpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBvcy5jaGRpcihvbGRfZGlyKQorICAgICAgICB0YXJiYWxsMiA9IG9zLnBhdGguam9pbihyb290X2RpciwgJ2FyY2hpdmUyLnRhcicpCisgICAgICAgIHRhcl9jbWQgPSBbJ3RhcicsICctY2YnLCAnYXJjaGl2ZTIudGFyJywgYmFzZV9kaXJdCisgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfY2FsbCh0YXJfY21kLCBjd2Q9cm9vdF9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5ERVZOVUxMKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyh0YXJiYWxsMikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZSh0YXJiYWxsMikpCiAgICAgICAgICMgbGV0J3MgY29tcGFyZSBib3RoIHRhcmJhbGxzCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fdGFyaW5mbyh0YXJiYWxsKSwgc2VsZi5fdGFyaW5mbyh0YXJiYWxsMikpCiAKICAgICAgICAgIyB0cnlpbmcgYW4gdW5jb21wcmVzc2VkIG9uZQotICAgICAgICBiYXNlX25hbWUgPSBvcy5wYXRoLmpvaW4odG1wZGlyMiwgJ2FyY2hpdmUnKQotICAgICAgICBvbGRfZGlyID0gb3MuZ2V0Y3dkKCkKLSAgICAgICAgb3MuY2hkaXIodG1wZGlyKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBfbWFrZV90YXJiYWxsKGJhc2VfbmFtZSwgJ2Rpc3QnLCBjb21wcmVzcz1Ob25lKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgb3MuY2hkaXIob2xkX2RpcikKLSAgICAgICAgdGFyYmFsbCA9IGJhc2VfbmFtZSArICcudGFyJwotICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHModGFyYmFsbCkpCisgICAgICAgIHRhcmJhbGwgPSBtYWtlX2FyY2hpdmUoYmFzZV9uYW1lLCAndGFyJywgcm9vdF9kaXIsIGJhc2VfZGlyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRhcmJhbGwsIGJhc2VfbmFtZSArICcudGFyJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKHRhcmJhbGwpKQogCiAgICAgICAgICMgbm93IGZvciBhIGRyeV9ydW4KLSAgICAgICAgYmFzZV9uYW1lID0gb3MucGF0aC5qb2luKHRtcGRpcjIsICdhcmNoaXZlJykKLSAgICAgICAgb2xkX2RpciA9IG9zLmdldGN3ZCgpCi0gICAgICAgIG9zLmNoZGlyKHRtcGRpcikKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgX21ha2VfdGFyYmFsbChiYXNlX25hbWUsICdkaXN0JywgY29tcHJlc3M9Tm9uZSwgZHJ5X3J1bj1UcnVlKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgb3MuY2hkaXIob2xkX2RpcikKLSAgICAgICAgdGFyYmFsbCA9IGJhc2VfbmFtZSArICcudGFyJwotICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHModGFyYmFsbCkpCisgICAgICAgIHRhcmJhbGwgPSBtYWtlX2FyY2hpdmUoYmFzZV9uYW1lLCAndGFyJywgcm9vdF9kaXIsIGJhc2VfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyeV9ydW49VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YXJiYWxsLCBiYXNlX25hbWUgKyAnLnRhcicpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZSh0YXJiYWxsKSkKIAogICAgIEByZXF1aXJlc196bGliCiAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoWklQX1NVUFBPUlQsICdOZWVkIHppcCBzdXBwb3J0IHRvIHJ1bicpCiAgICAgZGVmIHRlc3RfbWFrZV96aXBmaWxlKHNlbGYpOgotICAgICAgICAjIGNyZWF0aW5nIHNvbWV0aGluZyB0byB0YXIKLSAgICAgICAgdG1wZGlyID0gc2VsZi5ta2R0ZW1wKCkKLSAgICAgICAgd3JpdGVfZmlsZSgodG1wZGlyLCAnZmlsZTEnKSwgJ3h4eCcpCi0gICAgICAgIHdyaXRlX2ZpbGUoKHRtcGRpciwgJ2ZpbGUyJyksICd4eHgnKQorICAgICAgICAjIGNyZWF0aW5nIHNvbWV0aGluZyB0byB6aXAKKyAgICAgICAgcm9vdF9kaXIsIGJhc2VfZGlyID0gc2VsZi5fY3JlYXRlX2ZpbGVzKCkKIAogICAgICAgICB0bXBkaXIyID0gc2VsZi5ta2R0ZW1wKCkKICAgICAgICAgIyBmb3JjZSBzaHV0aWwgdG8gY3JlYXRlIHRoZSBkaXJlY3RvcnkKICAgICAgICAgb3Mucm1kaXIodG1wZGlyMikKLSAgICAgICAgYmFzZV9uYW1lID0gb3MucGF0aC5qb2luKHRtcGRpcjIsICdhcmNoaXZlJykKLSAgICAgICAgX21ha2VfemlwZmlsZShiYXNlX25hbWUsIHRtcGRpcikKKyAgICAgICAgIyB3b3JraW5nIHdpdGggcmVsYXRpdmUgcGF0aHMKKyAgICAgICAgd29ya19kaXIgPSBvcy5wYXRoLmRpcm5hbWUodG1wZGlyMikKKyAgICAgICAgcmVsX2Jhc2VfbmFtZSA9IG9zLnBhdGguam9pbihvcy5wYXRoLmJhc2VuYW1lKHRtcGRpcjIpLCAnYXJjaGl2ZScpCiAKLSAgICAgICAgIyBjaGVjayBpZiB0aGUgY29tcHJlc3NlZCB0YXJiYWxsIHdhcyBjcmVhdGVkCi0gICAgICAgIHRhcmJhbGwgPSBiYXNlX25hbWUgKyAnLnppcCcKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHRhcmJhbGwpKQorICAgICAgICB3aXRoIHN1cHBvcnQuY2hhbmdlX2N3ZCh3b3JrX2Rpcik6CisgICAgICAgICAgICBiYXNlX25hbWUgPSBvcy5wYXRoLmFic3BhdGgocmVsX2Jhc2VfbmFtZSkKKyAgICAgICAgICAgIHJlcyA9IG1ha2VfYXJjaGl2ZShyZWxfYmFzZV9uYW1lLCAnemlwJywgcm9vdF9kaXIsIGJhc2VfZGlyKQogCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCBiYXNlX25hbWUgKyAnLnppcCcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShyZXMpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoemlwZmlsZS5pc196aXBmaWxlKHJlcykpCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKHJlcykgYXMgemY6CisgICAgICAgICAgICBzZWxmLmFzc2VydENvdW50RXF1YWwoemYubmFtZWxpc3QoKSwKKyAgICAgICAgICAgICAgICAgICAgWydkaXN0LycsICdkaXN0L3N1Yi8nLCAnZGlzdC9zdWIyLycsCisgICAgICAgICAgICAgICAgICAgICAnZGlzdC9maWxlMScsICdkaXN0L2ZpbGUyJywgJ2Rpc3Qvc3ViL2ZpbGUzJ10pCisKKyAgICBAcmVxdWlyZXNfemxpYgorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKFpJUF9TVVBQT1JULCAnTmVlZCB6aXAgc3VwcG9ydCB0byBydW4nKQorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHNodXRpbC53aGljaCgnemlwJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ05lZWQgdGhlIHppcCBjb21tYW5kIHRvIHJ1bicpCisgICAgZGVmIHRlc3RfemlwZmlsZV92c196aXAoc2VsZik6CisgICAgICAgIHJvb3RfZGlyLCBiYXNlX2RpciA9IHNlbGYuX2NyZWF0ZV9maWxlcygpCisgICAgICAgIGJhc2VfbmFtZSA9IG9zLnBhdGguam9pbihzZWxmLm1rZHRlbXAoKSwgJ2FyY2hpdmUnKQorICAgICAgICBhcmNoaXZlID0gbWFrZV9hcmNoaXZlKGJhc2VfbmFtZSwgJ3ppcCcsIHJvb3RfZGlyLCBiYXNlX2RpcikKKworICAgICAgICAjIGNoZWNrIGlmIFpJUCBmaWxlICB3YXMgY3JlYXRlZAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFyY2hpdmUsIGJhc2VfbmFtZSArICcuemlwJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKGFyY2hpdmUpKQorCisgICAgICAgICMgbm93IGNyZWF0ZSBhbm90aGVyIFpJUCBmaWxlIHVzaW5nIGB6aXBgCisgICAgICAgIGFyY2hpdmUyID0gb3MucGF0aC5qb2luKHJvb3RfZGlyLCAnYXJjaGl2ZTIuemlwJykKKyAgICAgICAgemlwX2NtZCA9IFsnemlwJywgJy1xJywgJy1yJywgJ2FyY2hpdmUyLnppcCcsIGJhc2VfZGlyXQorICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX2NhbGwoemlwX2NtZCwgY3dkPXJvb3RfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuREVWTlVMTCkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUoYXJjaGl2ZTIpKQorICAgICAgICAjIGxldCdzIGNvbXBhcmUgYm90aCBaSVAgZmlsZXMKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoYXJjaGl2ZSkgYXMgemY6CisgICAgICAgICAgICBuYW1lcyA9IHpmLm5hbWVsaXN0KCkKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoYXJjaGl2ZTIpIGFzIHpmOgorICAgICAgICAgICAgbmFtZXMyID0gemYubmFtZWxpc3QoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChuYW1lcyksIHNvcnRlZChuYW1lczIpKQorCisgICAgQHJlcXVpcmVzX3psaWIKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhaSVBfU1VQUE9SVCwgJ05lZWQgemlwIHN1cHBvcnQgdG8gcnVuJykKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhzaHV0aWwud2hpY2goJ3VuemlwJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ05lZWQgdGhlIHVuemlwIGNvbW1hbmQgdG8gcnVuJykKKyAgICBkZWYgdGVzdF91bnppcF96aXBmaWxlKHNlbGYpOgorICAgICAgICByb290X2RpciwgYmFzZV9kaXIgPSBzZWxmLl9jcmVhdGVfZmlsZXMoKQorICAgICAgICBiYXNlX25hbWUgPSBvcy5wYXRoLmpvaW4oc2VsZi5ta2R0ZW1wKCksICdhcmNoaXZlJykKKyAgICAgICAgYXJjaGl2ZSA9IG1ha2VfYXJjaGl2ZShiYXNlX25hbWUsICd6aXAnLCByb290X2RpciwgYmFzZV9kaXIpCisKKyAgICAgICAgIyBjaGVjayBpZiBaSVAgZmlsZSAgd2FzIGNyZWF0ZWQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhcmNoaXZlLCBiYXNlX25hbWUgKyAnLnppcCcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShhcmNoaXZlKSkKKworICAgICAgICAjIG5vdyBjaGVjayB0aGUgWklQIGZpbGUgdXNpbmcgYHVuemlwIC10YAorICAgICAgICB6aXBfY21kID0gWyd1bnppcCcsICctdCcsIGFyY2hpdmVdCisgICAgICAgIHdpdGggc3VwcG9ydC5jaGFuZ2VfY3dkKHJvb3RfZGlyKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX291dHB1dCh6aXBfY21kLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpCisgICAgICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgICAgIGRldGFpbHMgPSBleGMub3V0cHV0LmRlY29kZShlcnJvcnM9InJlcGxhY2UiKQorICAgICAgICAgICAgICAgIG1zZyA9ICJ7fVxuXG4qKlVuemlwIE91dHB1dCoqXG57fSIKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwobXNnLmZvcm1hdChleGMsIGRldGFpbHMpKQogCiAgICAgZGVmIHRlc3RfbWFrZV9hcmNoaXZlKHNlbGYpOgogICAgICAgICB0bXBkaXIgPSBzZWxmLm1rZHRlbXAoKQpAQCAtMTA2Myw0MCArMTEzNywzNyBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgZ3JvdXAgPSBvd25lciA9ICdyb290JwogCi0gICAgICAgIGJhc2VfZGlyLCByb290X2RpciwgYmFzZV9uYW1lID0gIHNlbGYuX2NyZWF0ZV9maWxlcygpCi0gICAgICAgIGJhc2VfbmFtZSA9IG9zLnBhdGguam9pbihzZWxmLm1rZHRlbXAoKSAsICdhcmNoaXZlJykKKyAgICAgICAgcm9vdF9kaXIsIGJhc2VfZGlyID0gc2VsZi5fY3JlYXRlX2ZpbGVzKCkKKyAgICAgICAgYmFzZV9uYW1lID0gb3MucGF0aC5qb2luKHNlbGYubWtkdGVtcCgpLCAnYXJjaGl2ZScpCiAgICAgICAgIHJlcyA9IG1ha2VfYXJjaGl2ZShiYXNlX25hbWUsICd6aXAnLCByb290X2RpciwgYmFzZV9kaXIsIG93bmVyPW93bmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXA9Z3JvdXApCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhyZXMpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUocmVzKSkKIAogICAgICAgICByZXMgPSBtYWtlX2FyY2hpdmUoYmFzZV9uYW1lLCAnemlwJywgcm9vdF9kaXIsIGJhc2VfZGlyKQotICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMocmVzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKHJlcykpCiAKICAgICAgICAgcmVzID0gbWFrZV9hcmNoaXZlKGJhc2VfbmFtZSwgJ3RhcicsIHJvb3RfZGlyLCBiYXNlX2RpciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG93bmVyPW93bmVyLCBncm91cD1ncm91cCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHJlcykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShyZXMpKQogCiAgICAgICAgIHJlcyA9IG1ha2VfYXJjaGl2ZShiYXNlX25hbWUsICd0YXInLCByb290X2RpciwgYmFzZV9kaXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvd25lcj0na2poa2poa2pnJywgZ3JvdXA9J29paG9ob2gnKQotICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMocmVzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKHJlcykpCiAKIAogICAgIEByZXF1aXJlc196bGliCiAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoVUlEX0dJRF9TVVBQT1JULCAiUmVxdWlyZXMgZ3JwIGFuZCBwd2Qgc3VwcG9ydCIpCiAgICAgZGVmIHRlc3RfdGFyZmlsZV9yb290X293bmVyKHNlbGYpOgotICAgICAgICB0bXBkaXIsIHRtcGRpcjIsIGJhc2VfbmFtZSA9ICBzZWxmLl9jcmVhdGVfZmlsZXMoKQotICAgICAgICBvbGRfZGlyID0gb3MuZ2V0Y3dkKCkKLSAgICAgICAgb3MuY2hkaXIodG1wZGlyKQorICAgICAgICByb290X2RpciwgYmFzZV9kaXIgPSBzZWxmLl9jcmVhdGVfZmlsZXMoKQorICAgICAgICBiYXNlX25hbWUgPSBvcy5wYXRoLmpvaW4oc2VsZi5ta2R0ZW1wKCksICdhcmNoaXZlJykKICAgICAgICAgZ3JvdXAgPSBncnAuZ2V0Z3JnaWQoMClbMF0KICAgICAgICAgb3duZXIgPSBwd2QuZ2V0cHd1aWQoMClbMF0KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgYXJjaGl2ZV9uYW1lID0gX21ha2VfdGFyYmFsbChiYXNlX25hbWUsICdkaXN0JywgY29tcHJlc3M9Tm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3duZXI9b3duZXIsIGdyb3VwPWdyb3VwKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgb3MuY2hkaXIob2xkX2RpcikKKyAgICAgICAgd2l0aCBzdXBwb3J0LmNoYW5nZV9jd2Qocm9vdF9kaXIpOgorICAgICAgICAgICAgYXJjaGl2ZV9uYW1lID0gbWFrZV9hcmNoaXZlKGJhc2VfbmFtZSwgJ2d6dGFyJywgcm9vdF9kaXIsICdkaXN0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvd25lcj1vd25lciwgZ3JvdXA9Z3JvdXApCiAKICAgICAgICAgIyBjaGVjayBpZiB0aGUgY29tcHJlc3NlZCB0YXJiYWxsIHdhcyBjcmVhdGVkCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhhcmNoaXZlX25hbWUpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUoYXJjaGl2ZV9uYW1lKSkKIAogICAgICAgICAjIG5vdyBjaGVja3MgdGhlIHJpZ2h0cwogICAgICAgICBhcmNoaXZlID0gdGFyZmlsZS5vcGVuKGFyY2hpdmVfbmFtZSkKQEAgLTExMjIsNiArMTE5MywyMSBAQAogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgdW5yZWdpc3Rlcl9hcmNoaXZlX2Zvcm1hdCgneHh4JykKIAorICAgIGRlZiB0ZXN0X21ha2VfdGFyZmlsZV9pbl9jdXJkaXIoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzIxMjgwCisgICAgICAgIHJvb3RfZGlyID0gc2VsZi5ta2R0ZW1wKCkKKyAgICAgICAgd2l0aCBzdXBwb3J0LmNoYW5nZV9jd2Qocm9vdF9kaXIpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYWtlX2FyY2hpdmUoJ3Rlc3QnLCAndGFyJyksICd0ZXN0LnRhcicpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUoJ3Rlc3QudGFyJykpCisKKyAgICBAcmVxdWlyZXNfemxpYgorICAgIGRlZiB0ZXN0X21ha2VfemlwZmlsZV9pbl9jdXJkaXIoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzIxMjgwCisgICAgICAgIHJvb3RfZGlyID0gc2VsZi5ta2R0ZW1wKCkKKyAgICAgICAgd2l0aCBzdXBwb3J0LmNoYW5nZV9jd2Qocm9vdF9kaXIpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYWtlX2FyY2hpdmUoJ3Rlc3QnLCAnemlwJyksICd0ZXN0LnppcCcpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUoJ3Rlc3QuemlwJykpCisKICAgICBkZWYgdGVzdF9yZWdpc3Rlcl9hcmNoaXZlX2Zvcm1hdChzZWxmKToKIAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHJlZ2lzdGVyX2FyY2hpdmVfZm9ybWF0LCAneHh4JywgMSkKQEAgLTExMzgsNDAgKzEyMjQsMjggQEAKICAgICAgICAgZm9ybWF0cyA9IFtuYW1lIGZvciBuYW1lLCBwYXJhbXMgaW4gZ2V0X2FyY2hpdmVfZm9ybWF0cygpXQogICAgICAgICBzZWxmLmFzc2VydE5vdEluKCd4eHgnLCBmb3JtYXRzKQogCi0gICAgZGVmIF9jb21wYXJlX2RpcnMoc2VsZiwgZGlyMSwgZGlyMik6Ci0gICAgICAgICMgY2hlY2sgdGhhdCBkaXIxIGFuZCBkaXIyIGFyZSBlcXVpdmFsZW50LAotICAgICAgICAjIHJldHVybiB0aGUgZGlmZgotICAgICAgICBkaWZmID0gW10KLSAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsoZGlyMSk6Ci0gICAgICAgICAgICBmb3IgZmlsZV8gaW4gZmlsZXM6Ci0gICAgICAgICAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihyb290LCBmaWxlXykKLSAgICAgICAgICAgICAgICB0YXJnZXRfcGF0aCA9IG9zLnBhdGguam9pbihkaXIyLCBvcy5wYXRoLnNwbGl0KHBhdGgpWy0xXSkKLSAgICAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHModGFyZ2V0X3BhdGgpOgotICAgICAgICAgICAgICAgICAgICBkaWZmLmFwcGVuZChmaWxlXykKLSAgICAgICAgcmV0dXJuIGRpZmYKLQogICAgIEByZXF1aXJlc196bGliCiAgICAgZGVmIHRlc3RfdW5wYWNrX2FyY2hpdmUoc2VsZik6CiAgICAgICAgIGZvcm1hdHMgPSBbJ3RhcicsICdnenRhcicsICd6aXAnXQogICAgICAgICBpZiBCWjJfU1VQUE9SVEVEOgogICAgICAgICAgICAgZm9ybWF0cy5hcHBlbmQoJ2J6dGFyJykKIAorICAgICAgICByb290X2RpciwgYmFzZV9kaXIgPSBzZWxmLl9jcmVhdGVfZmlsZXMoKQorICAgICAgICBleHBlY3RlZCA9IHJsaXN0ZGlyKHJvb3RfZGlyKQorICAgICAgICBleHBlY3RlZC5yZW1vdmUoJ291dGVyJykKICAgICAgICAgZm9yIGZvcm1hdCBpbiBmb3JtYXRzOgotICAgICAgICAgICAgdG1wZGlyID0gc2VsZi5ta2R0ZW1wKCkKLSAgICAgICAgICAgIGJhc2VfZGlyLCByb290X2RpciwgYmFzZV9uYW1lID0gIHNlbGYuX2NyZWF0ZV9maWxlcygpCi0gICAgICAgICAgICB0bXBkaXIyID0gc2VsZi5ta2R0ZW1wKCkKKyAgICAgICAgICAgIGJhc2VfbmFtZSA9IG9zLnBhdGguam9pbihzZWxmLm1rZHRlbXAoKSwgJ2FyY2hpdmUnKQogICAgICAgICAgICAgZmlsZW5hbWUgPSBtYWtlX2FyY2hpdmUoYmFzZV9uYW1lLCBmb3JtYXQsIHJvb3RfZGlyLCBiYXNlX2RpcikKIAogICAgICAgICAgICAgIyBsZXQncyB0cnkgdG8gdW5wYWNrIGl0IG5vdworICAgICAgICAgICAgdG1wZGlyMiA9IHNlbGYubWtkdGVtcCgpCiAgICAgICAgICAgICB1bnBhY2tfYXJjaGl2ZShmaWxlbmFtZSwgdG1wZGlyMikKLSAgICAgICAgICAgIGRpZmYgPSBzZWxmLl9jb21wYXJlX2RpcnModG1wZGlyLCB0bXBkaXIyKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWZmLCBbXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmxpc3RkaXIodG1wZGlyMiksIGV4cGVjdGVkKQogCiAgICAgICAgICAgICAjIGFuZCBhZ2FpbiwgdGhpcyB0aW1lIHdpdGggdGhlIGZvcm1hdCBzcGVjaWZpZWQKICAgICAgICAgICAgIHRtcGRpcjMgPSBzZWxmLm1rZHRlbXAoKQogICAgICAgICAgICAgdW5wYWNrX2FyY2hpdmUoZmlsZW5hbWUsIHRtcGRpcjMsIGZvcm1hdD1mb3JtYXQpCi0gICAgICAgICAgICBkaWZmID0gc2VsZi5fY29tcGFyZV9kaXJzKHRtcGRpciwgdG1wZGlyMykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlmZiwgW10pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJsaXN0ZGlyKHRtcGRpcjMpLCBleHBlY3RlZCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2h1dGlsLlJlYWRFcnJvciwgdW5wYWNrX2FyY2hpdmUsIFRFU1RGTikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdW5wYWNrX2FyY2hpdmUsIFRFU1RGTiwgZm9ybWF0PSd4eHgnKQogCkBAIC0xMjkzLDYgKzEzNjcsMTYgQEAKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHJ2KSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFkX2ZpbGUoc3JjX2ZpbGUpLCByZWFkX2ZpbGUoZHN0X2ZpbGUpKQogCisgICAgZGVmIHRlc3RfY29weWZpbGVfc2FtZV9maWxlKHNlbGYpOgorICAgICAgICAjIGNvcHlmaWxlKCkgc2hvdWxkIHJhaXNlIFNhbWVGaWxlRXJyb3IgaWYgdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24KKyAgICAgICAgIyBhcmUgdGhlIHNhbWUuCisgICAgICAgIHNyY19kaXIgPSBzZWxmLm1rZHRlbXAoKQorICAgICAgICBzcmNfZmlsZSA9IG9zLnBhdGguam9pbihzcmNfZGlyLCAnZm9vJykKKyAgICAgICAgd3JpdGVfZmlsZShzcmNfZmlsZSwgJ2ZvbycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFNhbWVGaWxlRXJyb3IsIHNodXRpbC5jb3B5ZmlsZSwgc3JjX2ZpbGUsIHNyY19maWxlKQorICAgICAgICAjIEJ1dCBFcnJvciBzaG91bGQgd29yayB0b28sIHRvIHN0YXkgYmFja3dhcmQgY29tcGF0aWJsZS4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRXJyb3IsIHNodXRpbC5jb3B5ZmlsZSwgc3JjX2ZpbGUsIHNyY19maWxlKQorCiAgICAgZGVmIHRlc3RfY29weXRyZWVfcmV0dXJuX3ZhbHVlKHNlbGYpOgogICAgICAgICAjIGNvcHl0cmVlIHJldHVybnMgaXRzIGRlc3RpbmF0aW9uIHBhdGguCiAgICAgICAgIHNyY19kaXIgPSBzZWxmLm1rZHRlbXAoKQpAQCAtMTYwMSw3ICsxNjg1LDcgQEAKICAgICAgICAgICAgIHNlbGYuX2V4aXRlZF93aXRoID0gZXhjX3R5cGUsIGV4Y192YWwsIGV4Y190YgogICAgICAgICAgICAgaWYgc2VsZi5fcmFpc2VfaW5fZXhpdDoKICAgICAgICAgICAgICAgICBzZWxmLl9yYWlzZWQgPSBUcnVlCi0gICAgICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigiQ2Fubm90IGNsb3NlIikKKyAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJDYW5ub3QgY2xvc2UiKQogICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3N1cHByZXNzX2F0X2V4aXQKIAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKQEAgLTE2MTUsMTIgKzE2OTksMTIgQEAKICAgICBkZWYgdGVzdF93X3NvdXJjZV9vcGVuX2ZhaWxzKHNlbGYpOgogICAgICAgICBkZWYgX29wZW4oZmlsZW5hbWUsIG1vZGU9J3InKToKICAgICAgICAgICAgIGlmIGZpbGVuYW1lID09ICdzcmNmaWxlJzoKLSAgICAgICAgICAgICAgICByYWlzZSBJT0Vycm9yKCdDYW5ub3Qgb3BlbiAic3JjZmlsZSInKQorICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoJ0Nhbm5vdCBvcGVuICJzcmNmaWxlIicpCiAgICAgICAgICAgICBhc3NlcnQgMCAgIyBzaG91bGRuJ3QgcmVhY2ggaGVyZS4KIAogICAgICAgICBzZWxmLl9zZXRfc2h1dGlsX29wZW4oX29wZW4pCiAKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgc2h1dGlsLmNvcHlmaWxlLCAnc3JjZmlsZScsICdkZXN0ZmlsZScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNodXRpbC5jb3B5ZmlsZSwgJ3NyY2ZpbGUnLCAnZGVzdGZpbGUnKQogCiAgICAgZGVmIHRlc3Rfd19kZXN0X29wZW5fZmFpbHMoc2VsZik6CiAKQEAgLTE2MzAsMTQgKzE3MTQsMTQgQEAKICAgICAgICAgICAgIGlmIGZpbGVuYW1lID09ICdzcmNmaWxlJzoKICAgICAgICAgICAgICAgICByZXR1cm4gc3JjZmlsZQogICAgICAgICAgICAgaWYgZmlsZW5hbWUgPT0gJ2Rlc3RmaWxlJzoKLSAgICAgICAgICAgICAgICByYWlzZSBJT0Vycm9yKCdDYW5ub3Qgb3BlbiAiZGVzdGZpbGUiJykKKyAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCdDYW5ub3Qgb3BlbiAiZGVzdGZpbGUiJykKICAgICAgICAgICAgIGFzc2VydCAwICAjIHNob3VsZG4ndCByZWFjaCBoZXJlLgogCiAgICAgICAgIHNlbGYuX3NldF9zaHV0aWxfb3Blbihfb3BlbikKIAogICAgICAgICBzaHV0aWwuY29weWZpbGUoJ3NyY2ZpbGUnLCAnZGVzdGZpbGUnKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoc3JjZmlsZS5fZW50ZXJlZCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNyY2ZpbGUuX2V4aXRlZF93aXRoWzBdIGlzIElPRXJyb3IpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzcmNmaWxlLl9leGl0ZWRfd2l0aFswXSBpcyBPU0Vycm9yKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNyY2ZpbGUuX2V4aXRlZF93aXRoWzFdLmFyZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgKCdDYW5ub3Qgb3BlbiAiZGVzdGZpbGUiJywpKQogCkBAIC0xNjU5LDcgKzE3NDMsNyBAQAogICAgICAgICBzZWxmLmFzc2VydFRydWUoc3JjZmlsZS5fZW50ZXJlZCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRlc3RmaWxlLl9lbnRlcmVkKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoZGVzdGZpbGUuX3JhaXNlZCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNyY2ZpbGUuX2V4aXRlZF93aXRoWzBdIGlzIElPRXJyb3IpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzcmNmaWxlLl9leGl0ZWRfd2l0aFswXSBpcyBPU0Vycm9yKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNyY2ZpbGUuX2V4aXRlZF93aXRoWzFdLmFyZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgKCdDYW5ub3QgY2xvc2UnLCkpCiAKQEAgLTE2NzcsNyArMTc2MSw3IEBACiAKICAgICAgICAgc2VsZi5fc2V0X3NodXRpbF9vcGVuKF9vcGVuKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNodXRpbC5jb3B5ZmlsZSwgJ3NyY2ZpbGUnLCAnZGVzdGZpbGUnKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoc3JjZmlsZS5fZW50ZXJlZCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRlc3RmaWxlLl9lbnRlcmVkKQpAQCAtMTc0OCw5ICsxODMyLDIzIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIGFjdHVhbCkKIAogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoVGVzdFNodXRpbCwgVGVzdE1vdmUsIFRlc3RDb3B5RmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBUZXJtc2l6ZVRlc3RzLCBUZXN0V2hpY2gpCitjbGFzcyBQdWJsaWNBUElUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiRW5zdXJlcyB0aGF0IHRoZSBjb3JyZWN0IHZhbHVlcyBhcmUgZXhwb3NlZCBpbiB0aGUgcHVibGljIEFQSS4iIiIKKworICAgIGRlZiB0ZXN0X21vZHVsZV9hbGxfYXR0cmlidXRlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihzaHV0aWwsICdfX2FsbF9fJykpCisgICAgICAgIHRhcmdldF9hcGkgPSBbJ2NvcHlmaWxlb2JqJywgJ2NvcHlmaWxlJywgJ2NvcHltb2RlJywgJ2NvcHlzdGF0JywKKyAgICAgICAgICAgICAgICAgICAgICAnY29weScsICdjb3B5MicsICdjb3B5dHJlZScsICdtb3ZlJywgJ3JtdHJlZScsICdFcnJvcicsCisgICAgICAgICAgICAgICAgICAgICAgJ1NwZWNpYWxGaWxlRXJyb3InLCAnRXhlY0Vycm9yJywgJ21ha2VfYXJjaGl2ZScsCisgICAgICAgICAgICAgICAgICAgICAgJ2dldF9hcmNoaXZlX2Zvcm1hdHMnLCAncmVnaXN0ZXJfYXJjaGl2ZV9mb3JtYXQnLAorICAgICAgICAgICAgICAgICAgICAgICd1bnJlZ2lzdGVyX2FyY2hpdmVfZm9ybWF0JywgJ2dldF91bnBhY2tfZm9ybWF0cycsCisgICAgICAgICAgICAgICAgICAgICAgJ3JlZ2lzdGVyX3VucGFja19mb3JtYXQnLCAndW5yZWdpc3Rlcl91bnBhY2tfZm9ybWF0JywKKyAgICAgICAgICAgICAgICAgICAgICAndW5wYWNrX2FyY2hpdmUnLCAnaWdub3JlX3BhdHRlcm5zJywgJ2Nob3duJywgJ3doaWNoJywKKyAgICAgICAgICAgICAgICAgICAgICAnZ2V0X3Rlcm1pbmFsX3NpemUnLCAnU2FtZUZpbGVFcnJvciddCisgICAgICAgIGlmIGhhc2F0dHIob3MsICdzdGF0dmZzJykgb3Igb3MubmFtZSA9PSAnbnQnOgorICAgICAgICAgICAgdGFyZ2V0X2FwaS5hcHBlbmQoJ2Rpc2tfdXNhZ2UnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChzaHV0aWwuX19hbGxfXyksIHNldCh0YXJnZXRfYXBpKSkKKwogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3NpZ25hbC5weSBiL0xpYi90ZXN0L3Rlc3Rfc2lnbmFsLnB5CmluZGV4IDE5MWQ0Y2YuLjc0Zjc0YWYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc2lnbmFsLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc2lnbmFsLnB5CkBAIC0xNSw5ICsxNSw2IEBACiBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgdGhyZWFkaW5nID0gTm9uZQogCi1pZiBzeXMucGxhdGZvcm0gaW4gKCdvczInLCAncmlzY29zJyk6Ci0gICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIkNhbid0IHRlc3Qgc2lnbmFsIG9uICVzIiAlIHN5cy5wbGF0Zm9ybSkKLQogCiBjbGFzcyBIYW5kbGVyQkNhbGxlZChFeGNlcHRpb24pOgogICAgIHBhc3MKQEAgLTM2LDcgKzMzLDcgQEAKIGRlZiBpZ25vcmluZ19laW50cihfX2Z1bmMsICphcmdzLCAqKmt3YXJncyk6CiAgICAgdHJ5OgogICAgICAgICByZXR1cm4gX19mdW5jKCphcmdzLCAqKmt3YXJncykKLSAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvciBhcyBlOgorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRUlOVFI6CiAgICAgICAgICAgICByYWlzZQogICAgICAgICByZXR1cm4gTm9uZQpAQCAtMjc4LDYgKzI3NSw1NyBAQAogCiAgICAgICAgIGFzc2VydF9weXRob25fb2soJy1jJywgY29kZSkKIAorICAgIGRlZiB0ZXN0X3dha2V1cF93cml0ZV9lcnJvcihzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMTYxMDU6IHdyaXRlKCkgZXJyb3JzIGluIHRoZSBDIHNpZ25hbCBoYW5kbGVyIHNob3VsZCBub3QKKyAgICAgICAgIyBwYXNzIHNpbGVudGx5LgorICAgICAgICAjIFVzZSBhIHN1YnByb2Nlc3MgdG8gaGF2ZSBvbmx5IG9uZSB0aHJlYWQuCisgICAgICAgIGNvZGUgPSAiIiJpZiAxOgorICAgICAgICBpbXBvcnQgZXJybm8KKyAgICAgICAgaW1wb3J0IGZjbnRsCisgICAgICAgIGltcG9ydCBvcworICAgICAgICBpbXBvcnQgc2lnbmFsCisgICAgICAgIGltcG9ydCBzeXMKKyAgICAgICAgaW1wb3J0IHRpbWUKKyAgICAgICAgZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IGNhcHR1cmVkX3N0ZGVycgorCisgICAgICAgIGRlZiBoYW5kbGVyKHNpZ251bSwgZnJhbWUpOgorICAgICAgICAgICAgMS8wCisKKyAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHQUxSTSwgaGFuZGxlcikKKyAgICAgICAgciwgdyA9IG9zLnBpcGUoKQorICAgICAgICBmbGFncyA9IGZjbnRsLmZjbnRsKHIsIGZjbnRsLkZfR0VURkwsIDApCisgICAgICAgIGZjbnRsLmZjbnRsKHIsIGZjbnRsLkZfU0VURkwsIGZsYWdzIHwgb3MuT19OT05CTE9DSykKKworICAgICAgICAjIFNldCB3YWtldXBfZmQgYSByZWFkLW9ubHkgZmlsZSBkZXNjcmlwdG9yIHRvIHRyaWdnZXIgdGhlIGVycm9yCisgICAgICAgIHNpZ25hbC5zZXRfd2FrZXVwX2ZkKHIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggY2FwdHVyZWRfc3RkZXJyKCkgYXMgZXJyOgorICAgICAgICAgICAgICAgIHNpZ25hbC5hbGFybSgxKQorICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoNS4wKQorICAgICAgICBleGNlcHQgWmVyb0RpdmlzaW9uRXJyb3I6CisgICAgICAgICAgICAjIEFuIGlnbm9yZWQgZXhjZXB0aW9uIHNob3VsZCBoYXZlIGJlZW4gcHJpbnRlZCBvdXQgb24gc3RkZXJyCisgICAgICAgICAgICBlcnIgPSBlcnIuZ2V0dmFsdWUoKQorICAgICAgICAgICAgaWYgKCdFeGNlcHRpb24gaWdub3JlZCB3aGVuIHRyeWluZyB0byB3cml0ZSB0byB0aGUgc2lnbmFsIHdha2V1cCBmZCcKKyAgICAgICAgICAgICAgICBub3QgaW4gZXJyKToKKyAgICAgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcihlcnIpCisgICAgICAgICAgICBpZiAoJ09TRXJyb3I6IFtFcnJubyAlZF0nICUgZXJybm8uRUJBREYpIG5vdCBpbiBlcnI6CisgICAgICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoZXJyKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoIlplcm9EaXZpc2lvbkVycm9yIG5vdCByYWlzZWQiKQorICAgICAgICAiIiIKKyAgICAgICAgciwgdyA9IG9zLnBpcGUoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBvcy53cml0ZShyLCBiJ3gnKQorICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoIk9TIGRvZXNuJ3QgcmVwb3J0IHdyaXRlKCkgZXJyb3Igb24gdGhlIHJlYWQgZW5kIG9mIGEgcGlwZSIpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvcy5jbG9zZShyKQorICAgICAgICAgICAgb3MuY2xvc2UodykKKworICAgICAgICBhc3NlcnRfcHl0aG9uX29rKCctYycsIGNvZGUpCisKICAgICBkZWYgdGVzdF93YWtldXBfZmRfZWFybHkoc2VsZik6CiAgICAgICAgIHNlbGYuY2hlY2tfd2FrZXVwKCIiImRlZiB0ZXN0KCk6CiAgICAgICAgICAgICBpbXBvcnQgc2VsZWN0CkBAIC0zMTUsMTAgKzM2MywxMCBAQAogICAgICAgICAgICAgIyBXZSBhdHRlbXB0IHRvIGdldCBhIHNpZ25hbCBkdXJpbmcgdGhlIHNlbGVjdCBjYWxsCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc2VsZWN0LnNlbGVjdChbcmVhZF0sIFtdLCBbXSwgVElNRU9VVF9GVUxMKQotICAgICAgICAgICAgZXhjZXB0IHNlbGVjdC5lcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJzZWxlY3QuZXJyb3Igbm90IHJhaXNlZCIpCisgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJPU0Vycm9yIG5vdCByYWlzZWQiKQogICAgICAgICAgICAgYWZ0ZXJfdGltZSA9IHRpbWUudGltZSgpCiAgICAgICAgICAgICBkdCA9IGFmdGVyX3RpbWUgLSBiZWZvcmVfdGltZQogICAgICAgICAgICAgaWYgZHQgPj0gVElNRU9VVF9IQUxGOgpAQCAtNDA2LDcgKzQ1NCw3IEBACiAgICAgICAgICAgICAgICAgc3Rkb3V0ID0gZmlyc3RfbGluZSArIHN0ZG91dAogICAgICAgICAgICAgICAgIGV4aXRjb2RlID0gcHJvY2Vzcy53YWl0KCkKICAgICAgICAgICAgICAgICBpZiBleGl0Y29kZSBub3QgaW4gKDIsIDMpOgotICAgICAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIkNoaWxkIGVycm9yIChleGl0IGNvZGUgJXMpOiAlcyIKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJDaGlsZCBlcnJvciAoZXhpdCBjb2RlICVzKTogJXIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChleGl0Y29kZSwgc3Rkb3V0KSkKICAgICAgICAgICAgICAgICByZXR1cm4gKGV4aXRjb2RlID09IDMpCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc2l0ZS5weSBiL0xpYi90ZXN0L3Rlc3Rfc2l0ZS5weQppbmRleCBmM2JkMTY4Li5mNzFjZjczIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3NpdGUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zaXRlLnB5CkBAIC0yMzAsMTEgKzIzMCw3IEBACiAgICAgICAgIHNpdGUuUFJFRklYRVMgPSBbJ3hveG8nXQogICAgICAgICBkaXJzID0gc2l0ZS5nZXRzaXRlcGFja2FnZXMoKQogCi0gICAgICAgIGlmIHN5cy5wbGF0Zm9ybSBpbiAoJ29zMmVteCcsICdyaXNjb3MnKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGRpcnMpLCAxKQotICAgICAgICAgICAgd2FudGVkID0gb3MucGF0aC5qb2luKCd4b3hvJywgJ0xpYicsICdzaXRlLXBhY2thZ2VzJykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlyc1swXSwgd2FudGVkKQotICAgICAgICBlbGlmIChzeXMucGxhdGZvcm0gPT0gImRhcndpbiIgYW5kCisgICAgICAgIGlmIChzeXMucGxhdGZvcm0gPT0gImRhcndpbiIgYW5kCiAgICAgICAgICAgICBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoIlBZVEhPTkZSQU1FV09SSyIpKToKICAgICAgICAgICAgICMgT1MgWCBmcmFtZXdvcmsgYnVpbGRzCiAgICAgICAgICAgICBzaXRlLlBSRUZJWEVTID0gWydQeXRob24uZnJhbWV3b3JrJ10KQEAgLTQxNiw4ICs0MTIsMTEgQEAKICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoInNpdGVjdXN0b21pemUgbm90IGltcG9ydGVkIGF1dG9tYXRpY2FsbHkiKQogCiAgICAgQHRlc3Quc3VwcG9ydC5yZXF1aXJlc19yZXNvdXJjZSgnbmV0d29yaycpCisgICAgQHRlc3Quc3VwcG9ydC5zeXN0ZW1fbXVzdF92YWxpZGF0ZV9jZXJ0CiAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3lzLnZlcnNpb25faW5mb1szXSA9PSAnZmluYWwnLAogICAgICAgICAgICAgICAgICAgICAgICAgICdvbmx5IGZvciByZWxlYXNlZCB2ZXJzaW9ucycpCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cih1cmxsaWIucmVxdWVzdCwgIkhUVFBTSGFuZGxlciIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICduZWVkIFNTTCBzdXBwb3J0IHRvIGRvd25sb2FkIGxpY2Vuc2UnKQogICAgIGRlZiB0ZXN0X2xpY2Vuc2VfZXhpc3RzX2F0X3VybChzZWxmKToKICAgICAgICAgIyBUaGlzIHRlc3QgaXMgYSBiaXQgZnJhZ2lsZSBzaW5jZSBpdCBkZXBlbmRzIG9uIHRoZSBmb3JtYXQgb2YgdGhlCiAgICAgICAgICMgc3RyaW5nIGRpc3BsYXllZCBieSBsaWNlbnNlIGluIHRoZSBhYnNlbmNlIG9mIGEgTElDRU5TRSBmaWxlLgpAQCAtNDMyLDUgKzQzMSwzOSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvZGUsIDIwMCwgbXNnPSJDYW4ndCBmaW5kICIgKyB1cmwpCiAKIAorY2xhc3MgU3RhcnR1cEltcG9ydFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3N0YXJ0dXBfaW1wb3J0cyhzZWxmKToKKyAgICAgICAgIyBUaGlzIHRlc3RzIGNoZWNrcyB3aGljaCBtb2R1bGVzIGFyZSBsb2FkZWQgYnkgUHl0aG9uIHdoZW4gaXQKKyAgICAgICAgIyBpbml0aWFsbHkgc3RhcnRzIHVwb24gc3RhcnR1cC4KKyAgICAgICAgcG9wZW4gPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgJy1JJywgJy12JywgJy1jJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW1wb3J0IHN5czsgcHJpbnQoc2V0KHN5cy5tb2R1bGVzKSknXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICBzdGRvdXQsIHN0ZGVyciA9IHBvcGVuLmNvbW11bmljYXRlKCkKKyAgICAgICAgc3Rkb3V0ID0gc3Rkb3V0LmRlY29kZSgndXRmLTgnKQorICAgICAgICBzdGRlcnIgPSBzdGRlcnIuZGVjb2RlKCd1dGYtOCcpCisgICAgICAgIG1vZHVsZXMgPSBldmFsKHN0ZG91dCkKKworICAgICAgICBzZWxmLmFzc2VydEluKCdzaXRlJywgbW9kdWxlcykKKworICAgICAgICAjIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxOTIwNQorICAgICAgICByZV9tb2RzID0geydyZScsICdfc3JlJywgJ3NyZV9jb21waWxlJywgJ3NyZV9jb25zdGFudHMnLCAnc3JlX3BhcnNlJ30KKyAgICAgICAgIyBfb3N4X3N1cHBvcnQgdXNlcyB0aGUgcmUgbW9kdWxlIGluIG1hbnkgcGxhY3MKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtICE9ICdkYXJ3aW4nOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtb2R1bGVzLmludGVyc2VjdGlvbihyZV9tb2RzKSwgc3RkZXJyKQorICAgICAgICAjIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWU5NTQ4CisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ2xvY2FsZScsIG1vZHVsZXMsIHN0ZGVycikKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtICE9ICdkYXJ3aW4nOgorICAgICAgICAgICAgIyBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTkyMDkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ2NvcHlyZWcnLCBtb2R1bGVzLCBzdGRlcnIpCisgICAgICAgICMgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTE5MjE4PgorICAgICAgICBjb2xsZWN0aW9uX21vZHMgPSB7J19jb2xsZWN0aW9ucycsICdjb2xsZWN0aW9ucycsICdmdW5jdG9vbHMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2hlYXBxJywgJ2l0ZXJ0b29scycsICdrZXl3b3JkJywgJ29wZXJhdG9yJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZXBybGliJywgJ3R5cGVzJywgJ3dlYWtyZWYnCisgICAgICAgICAgICAgICAgICAgICAgICAgIH0uZGlmZmVyZW5jZShzeXMuYnVpbHRpbl9tb2R1bGVfbmFtZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobW9kdWxlcy5pbnRlcnNlY3Rpb24oY29sbGVjdGlvbl9tb2RzKSwgc3RkZXJyKQorCisKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3NsaWNlLnB5IGIvTGliL3Rlc3QvdGVzdF9zbGljZS5weQppbmRleCAyZGY5MjcxLi4xZWQ3MWY5IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3NsaWNlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc2xpY2UucHkKQEAgLTQsOCArNCw3MCBAQAogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiBmcm9tIHBpY2tsZSBpbXBvcnQgbG9hZHMsIGR1bXBzCiAKK2ltcG9ydCBpdGVydG9vbHMKK2ltcG9ydCBvcGVyYXRvcgogaW1wb3J0IHN5cwogCisKK2RlZiBldmFsdWF0ZV9zbGljZV9pbmRleChhcmcpOgorICAgICIiIgorICAgIEhlbHBlciBmdW5jdGlvbiB0byBjb252ZXJ0IGEgc2xpY2UgYXJndW1lbnQgdG8gYW4gaW50ZWdlciwgYW5kIHJhaXNlCisgICAgVHlwZUVycm9yIHdpdGggYSBzdWl0YWJsZSBtZXNzYWdlIG9uIGZhaWx1cmUuCisKKyAgICAiIiIKKyAgICBpZiBoYXNhdHRyKGFyZywgJ19faW5kZXhfXycpOgorICAgICAgICByZXR1cm4gb3BlcmF0b3IuaW5kZXgoYXJnKQorICAgIGVsc2U6CisgICAgICAgIHJhaXNlIFR5cGVFcnJvcigKKyAgICAgICAgICAgICJzbGljZSBpbmRpY2VzIG11c3QgYmUgaW50ZWdlcnMgb3IgIgorICAgICAgICAgICAgIk5vbmUgb3IgaGF2ZSBhbiBfX2luZGV4X18gbWV0aG9kIikKKworZGVmIHNsaWNlX2luZGljZXMoc2xpY2UsIGxlbmd0aCk6CisgICAgIiIiCisgICAgUmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIGZvciB0aGUgc2xpY2UuaW5kaWNlcyBtZXRob2QuCisKKyAgICAiIiIKKyAgICAjIENvbXB1dGUgc3RlcCBhbmQgbGVuZ3RoIGFzIGludGVnZXJzLgorICAgIGxlbmd0aCA9IG9wZXJhdG9yLmluZGV4KGxlbmd0aCkKKyAgICBzdGVwID0gMSBpZiBzbGljZS5zdGVwIGlzIE5vbmUgZWxzZSBldmFsdWF0ZV9zbGljZV9pbmRleChzbGljZS5zdGVwKQorCisgICAgIyBSYWlzZSBWYWx1ZUVycm9yIGZvciBuZWdhdGl2ZSBsZW5ndGggb3IgemVybyBzdGVwLgorICAgIGlmIGxlbmd0aCA8IDA6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImxlbmd0aCBzaG91bGQgbm90IGJlIG5lZ2F0aXZlIikKKyAgICBpZiBzdGVwID09IDA6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInNsaWNlIHN0ZXAgY2Fubm90IGJlIHplcm8iKQorCisgICAgIyBGaW5kIGxvd2VyIGFuZCB1cHBlciBib3VuZHMgZm9yIHN0YXJ0IGFuZCBzdG9wLgorICAgIGxvd2VyID0gLTEgaWYgc3RlcCA8IDAgZWxzZSAwCisgICAgdXBwZXIgPSBsZW5ndGggLSAxIGlmIHN0ZXAgPCAwIGVsc2UgbGVuZ3RoCisKKyAgICAjIENvbXB1dGUgc3RhcnQuCisgICAgaWYgc2xpY2Uuc3RhcnQgaXMgTm9uZToKKyAgICAgICAgc3RhcnQgPSB1cHBlciBpZiBzdGVwIDwgMCBlbHNlIGxvd2VyCisgICAgZWxzZToKKyAgICAgICAgc3RhcnQgPSBldmFsdWF0ZV9zbGljZV9pbmRleChzbGljZS5zdGFydCkKKyAgICAgICAgc3RhcnQgPSBtYXgoc3RhcnQgKyBsZW5ndGgsIGxvd2VyKSBpZiBzdGFydCA8IDAgZWxzZSBtaW4oc3RhcnQsIHVwcGVyKQorCisgICAgIyBDb21wdXRlIHN0b3AuCisgICAgaWYgc2xpY2Uuc3RvcCBpcyBOb25lOgorICAgICAgICBzdG9wID0gbG93ZXIgaWYgc3RlcCA8IDAgZWxzZSB1cHBlcgorICAgIGVsc2U6CisgICAgICAgIHN0b3AgPSBldmFsdWF0ZV9zbGljZV9pbmRleChzbGljZS5zdG9wKQorICAgICAgICBzdG9wID0gbWF4KHN0b3AgKyBsZW5ndGgsIGxvd2VyKSBpZiBzdG9wIDwgMCBlbHNlIG1pbihzdG9wLCB1cHBlcikKKworICAgIHJldHVybiBzdGFydCwgc3RvcCwgc3RlcAorCisKKyMgQ2xhc3MgcHJvdmlkaW5nIGFuIF9faW5kZXhfXyBtZXRob2QuICBVc2VkIGZvciB0ZXN0aW5nIHNsaWNlLmluZGljZXMuCisKK2NsYXNzIE15SW5kZXhhYmxlKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlKToKKyAgICAgICAgc2VsZi52YWx1ZSA9IHZhbHVlCisKKyAgICBkZWYgX19pbmRleF9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi52YWx1ZQorCisKIGNsYXNzIFNsaWNlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgdGVzdF9jb25zdHJ1Y3RvcihzZWxmKToKQEAgLTE4LDcgKzgwLDggQEAKICAgICBkZWYgdGVzdF9oYXNoKHNlbGYpOgogICAgICAgICAjIFZlcmlmeSBjbGVhcmluZyBvZiBTRiBidWcgIzgwMDc5NgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGhhc2gsIHNsaWNlKDUpKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNsaWNlKDUpLl9faGFzaF9fKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBzbGljZSg1KS5fX2hhc2hfXygpCiAKICAgICBkZWYgdGVzdF9jbXAoc2VsZik6CiAgICAgICAgIHMxID0gc2xpY2UoMSwgMiwgMykKQEAgLTc1LDYgKzEzOCwyMiBAQAogICAgICAgICBzID0gc2xpY2Uob2JqKQogICAgICAgICBzZWxmLmFzc2VydFRydWUocy5zdG9wIGlzIG9iaikKIAorICAgIGRlZiBjaGVja19pbmRpY2VzKHNlbGYsIHNsaWNlLCBsZW5ndGgpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBhY3R1YWwgPSBzbGljZS5pbmRpY2VzKGxlbmd0aCkKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICBhY3R1YWwgPSAidmFsdWVlcnJvciIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZXhwZWN0ZWQgPSBzbGljZV9pbmRpY2VzKHNsaWNlLCBsZW5ndGgpCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgZXhwZWN0ZWQgPSAidmFsdWVlcnJvciIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhY3R1YWwsIGV4cGVjdGVkKQorCisgICAgICAgIGlmIGxlbmd0aCA+PSAwIGFuZCBzbGljZS5zdGVwICE9IDA6CisgICAgICAgICAgICBhY3R1YWwgPSByYW5nZSgqc2xpY2UuaW5kaWNlcyhsZW5ndGgpKQorICAgICAgICAgICAgZXhwZWN0ZWQgPSByYW5nZShsZW5ndGgpW3NsaWNlXQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhY3R1YWwsIGV4cGVjdGVkKQorCiAgICAgZGVmIHRlc3RfaW5kaWNlcyhzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzbGljZShOb25lICAgICAgICAgICApLmluZGljZXMoMTApLCAoMCwgMTAsICAxKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzbGljZShOb25lLCAgTm9uZSwgIDIpLmluZGljZXMoMTApLCAoMCwgMTAsICAyKSkKQEAgLTEwOCw3ICsxODcsNDEgQEAKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QocmFuZ2UoMTApKVs6OnN5cy5tYXhzaXplIC0gMV0sIFswXSkKIAotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBzbGljZShOb25lKS5pbmRpY2VzLCAxPDwxMDApCisgICAgICAgICMgQ2hlY2sgYSB2YXJpZXR5IG9mIHN0YXJ0LCBzdG9wLCBzdGVwIGFuZCBsZW5ndGggdmFsdWVzLCBpbmNsdWRpbmcKKyAgICAgICAgIyB2YWx1ZXMgZXhjZWVkaW5nIHN5cy5tYXhzaXplIChzZWUgaXNzdWUgIzE0Nzk0KS4KKyAgICAgICAgdmFscyA9IFtOb25lLCAtMioqMTAwLCAtMioqMzAsIC01MywgLTcsIC0xLCAwLCAxLCA3LCA1MywgMioqMzAsIDIqKjEwMF0KKyAgICAgICAgbGVuZ3RocyA9IFswLCAxLCA3LCA1MywgMioqMzAsIDIqKjEwMF0KKyAgICAgICAgZm9yIHNsaWNlX2FyZ3MgaW4gaXRlcnRvb2xzLnByb2R1Y3QodmFscywgcmVwZWF0PTMpOgorICAgICAgICAgICAgcyA9IHNsaWNlKCpzbGljZV9hcmdzKQorICAgICAgICAgICAgZm9yIGxlbmd0aCBpbiBsZW5ndGhzOgorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tfaW5kaWNlcyhzLCBsZW5ndGgpCisgICAgICAgIHNlbGYuY2hlY2tfaW5kaWNlcyhzbGljZSgwLCAxMCwgMSksIC0zKQorCisgICAgICAgICMgTmVnYXRpdmUgbGVuZ3RoIHNob3VsZCByYWlzZSBWYWx1ZUVycm9yCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBzbGljZShOb25lKS5pbmRpY2VzKC0xKQorCisgICAgICAgICMgWmVybyBzdGVwIHNob3VsZCByYWlzZSBWYWx1ZUVycm9yCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBzbGljZSgwLCAxMCwgMCkuaW5kaWNlcyg1KQorCisgICAgICAgICMgVXNpbmcgYSBzdGFydCwgc3RvcCBvciBzdGVwIG9yIGxlbmd0aCB0aGF0IGNhbid0IGJlIGludGVycHJldGVkIGFzIGFuCisgICAgICAgICMgaW50ZWdlciBzaG91bGQgZ2l2ZSBhIFR5cGVFcnJvciAuLi4KKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgc2xpY2UoMC4wLCAxMCwgMSkuaW5kaWNlcyg1KQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBzbGljZSgwLCAxMC4wLCAxKS5pbmRpY2VzKDUpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHNsaWNlKDAsIDEwLCAxLjApLmluZGljZXMoNSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgc2xpY2UoMCwgMTAsIDEpLmluZGljZXMoNS4wKQorCisgICAgICAgICMgLi4uIGJ1dCBpdCBzaG91bGQgYmUgZmluZSB0byB1c2UgYSBjdXN0b20gY2xhc3MgdGhhdCBwcm92aWRlcyBpbmRleC4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzbGljZSgwLCAxMCwgMSkuaW5kaWNlcyg1KSwgKDAsIDUsIDEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNsaWNlKE15SW5kZXhhYmxlKDApLCAxMCwgMSkuaW5kaWNlcyg1KSwgKDAsIDUsIDEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNsaWNlKDAsIE15SW5kZXhhYmxlKDEwKSwgMSkuaW5kaWNlcyg1KSwgKDAsIDUsIDEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNsaWNlKDAsIDEwLCBNeUluZGV4YWJsZSgxKSkuaW5kaWNlcyg1KSwgKDAsIDUsIDEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNsaWNlKDAsIDEwLCAxKS5pbmRpY2VzKE15SW5kZXhhYmxlKDUpKSwgKDAsIDUsIDEpKQogCiAgICAgZGVmIHRlc3Rfc2V0c2xpY2Vfd2l0aG91dF9nZXRzbGljZShzZWxmKToKICAgICAgICAgdG1wID0gW10KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc210cGxpYi5weSBiL0xpYi90ZXN0L3Rlc3Rfc210cGxpYi5weQppbmRleCAzYmJjNmI3Li45NWE5ZGJlIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3NtdHBsaWIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zbXRwbGliLnB5CkBAIC0yMjIsNyArMjIyLDcgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc210cC5zb3VyY2VfYWRkcmVzcywgKCcxMjcuMC4wLjEnLCBwb3J0KSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc210cC5sb2NhbF9ob3N0bmFtZSwgJ2xvY2FsaG9zdCcpCiAgICAgICAgICAgICBzbXRwLnF1aXQoKQotICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FQUREUklOVVNFOgogICAgICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoImNvdWxkbid0IGJpbmQgdG8gcG9ydCAlZCIgJSBwb3J0KQogICAgICAgICAgICAgcmFpc2UKQEAgLTUyNCwxMiArNTI0LDYgQEAKIAogY2xhc3MgTm9uQ29ubmVjdGluZ1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAotICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgc210cGxpYi5zb2NrZXQgPSBtb2NrX3NvY2tldAotCi0gICAgZGVmIHRlYXJEb3duKHNlbGYpOgotICAgICAgICBzbXRwbGliLnNvY2tldCA9IHNvY2tldAotCiAgICAgZGVmIHRlc3ROb3RDb25uZWN0ZWQoc2VsZik6CiAgICAgICAgICMgVGVzdCB2YXJpb3VzIG9wZXJhdGlvbnMgb24gYW4gdW5jb25uZWN0ZWQgU01UUCBvYmplY3QgdGhhdAogICAgICAgICAjIHNob3VsZCByYWlzZSBleGNlcHRpb25zIChhdCBwcmVzZW50IHRoZSBhdHRlbXB0IGluIFNNVFAuc2VuZApAQCAtNTQxLDEwICs1MzUsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgc210cC5zZW5kLCAndGVzdCBtc2cnKQogCiAgICAgZGVmIHRlc3ROb25udW1lcmljUG9ydChzZWxmKToKLSAgICAgICAgIyBjaGVjayB0aGF0IG5vbi1udW1lcmljIHBvcnQgcmFpc2VzIHNvY2tldC5lcnJvcgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhtb2NrX3NvY2tldC5lcnJvciwgc210cGxpYi5TTVRQLAorICAgICAgICAjIGNoZWNrIHRoYXQgbm9uLW51bWVyaWMgcG9ydCByYWlzZXMgT1NFcnJvcgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBzbXRwbGliLlNNVFAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJsb2NhbGhvc3QiLCAiYm9ndXMiKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhtb2NrX3NvY2tldC5lcnJvciwgc210cGxpYi5TTVRQLAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBzbXRwbGliLlNNVFAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJsb2NhbGhvc3Q6Ym9ndXMiKQogCiAKQEAgLTYyNSw2ICs2MTksNyBAQAogICAgIGRhdGFfcmVzcG9uc2UgPSBOb25lCiAgICAgcmNwdF9jb3VudCA9IDAKICAgICByc2V0X2NvdW50ID0gMAorICAgIGRpc2Nvbm5lY3QgPSAwCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgZXh0cmFfZmVhdHVyZXMsICphcmdzLCAqKmt3KToKICAgICAgICAgc2VsZi5fZXh0cmFmZWF0dXJlcyA9ICcnLmpvaW4oCkBAIC02OTAsNiArNjg1LDggQEAKICAgICAgICAgICAgIHN1cGVyKCkuc210cF9NQUlMKGFyZykKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYucHVzaChzZWxmLm1haWxfcmVzcG9uc2UpCisgICAgICAgICAgICBpZiBzZWxmLmRpc2Nvbm5lY3Q6CisgICAgICAgICAgICAgICAgc2VsZi5jbG9zZV93aGVuX2RvbmUoKQogCiAgICAgZGVmIHNtdHBfUkNQVChzZWxmLCBhcmcpOgogICAgICAgICBpZiBzZWxmLnJjcHRfcmVzcG9uc2UgaXMgTm9uZToKQEAgLTg1Miw2ICs4NDksMzAgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oc2ltX2F1dGhfY3JlZGVudGlhbHNbJ2NyYW0tbWQ1J10sIHN0cihlcnIpKQogICAgICAgICBzbXRwLmNsb3NlKCkKIAorICAgIGRlZiB0ZXN0QVVUSF9tdWx0aXBsZShzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgbXVsdGlwbGUgYXV0aGVudGljYXRpb24gbWV0aG9kcyBhcmUgdHJpZWQuCisgICAgICAgIHNlbGYuc2Vydi5hZGRfZmVhdHVyZSgiQVVUSCBCT0dVUyBQTEFJTiBMT0dJTiBDUkFNLU1ENSIpCisgICAgICAgIHNtdHAgPSBzbXRwbGliLlNNVFAoSE9TVCwgc2VsZi5wb3J0LCBsb2NhbF9ob3N0bmFtZT0nbG9jYWxob3N0JywgdGltZW91dD0xNSkKKyAgICAgICAgdHJ5OiBzbXRwLmxvZ2luKHNpbV9hdXRoWzBdLCBzaW1fYXV0aFsxXSkKKyAgICAgICAgZXhjZXB0IHNtdHBsaWIuU01UUEF1dGhlbnRpY2F0aW9uRXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihzaW1fYXV0aF9sb2dpbl9wYXNzd29yZCwgc3RyKGVycikpCisgICAgICAgIHNtdHAuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfcXVpdF9yZXNldHNfZ3JlZXRpbmcoc2VsZik6CisgICAgICAgIHNtdHAgPSBzbXRwbGliLlNNVFAoSE9TVCwgc2VsZi5wb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsX2hvc3RuYW1lPSdsb2NhbGhvc3QnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQ9MTUpCisgICAgICAgIGNvZGUsIG1lc3NhZ2UgPSBzbXRwLmVobG8oKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvZGUsIDI1MCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignc2l6ZScsIHNtdHAuZXNtdHBfZmVhdHVyZXMpCisgICAgICAgIHNtdHAucXVpdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ3NpemUnLCBzbXRwLmVzbXRwX2ZlYXR1cmVzKQorICAgICAgICBzbXRwLmNvbm5lY3QoSE9TVCwgc2VsZi5wb3J0KQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdzaXplJywgc210cC5lc210cF9mZWF0dXJlcykKKyAgICAgICAgc210cC5laGxvX29yX2hlbG9faWZfbmVlZGVkKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignc2l6ZScsIHNtdHAuZXNtdHBfZmVhdHVyZXMpCisgICAgICAgIHNtdHAucXVpdCgpCisKICAgICBkZWYgdGVzdF93aXRoX3N0YXRlbWVudChzZWxmKToKICAgICAgICAgd2l0aCBzbXRwbGliLlNNVFAoSE9TVCwgc2VsZi5wb3J0KSBhcyBzbXRwOgogICAgICAgICAgICAgY29kZSwgbWVzc2FnZSA9IHNtdHAubm9vcCgpCkBAIC04NzIsNiArODkzLDE2IEBACiAgICAgI1RPRE86IGFkZCB0ZXN0cyBmb3IgY29ycmVjdCBBVVRIIG1ldGhvZCBmYWxsYmFjayBub3cgdGhhdCB0aGUKICAgICAjdGVzdCBpbmZyYXN0cnVjdHVyZSBjYW4gc3VwcG9ydCBpdC4KIAorICAgICMgSXNzdWUgMTc0OTg6IG1ha2Ugc3VyZSBfcnNldCBkb2VzIG5vdCByYWlzZSBTTVRQU2VydmVyRGlzY29ubmVjdGVkIGV4Y2VwdGlvbgorICAgIGRlZiB0ZXN0X19yZXN0X2Zyb21fbWFpbF9jbWQoc2VsZik6CisgICAgICAgIHNtdHAgPSBzbXRwbGliLlNNVFAoSE9TVCwgc2VsZi5wb3J0LCBsb2NhbF9ob3N0bmFtZT0nbG9jYWxob3N0JywgdGltZW91dD0xNSkKKyAgICAgICAgc210cC5ub29wKCkKKyAgICAgICAgc2VsZi5zZXJ2Ll9TTVRQY2hhbm5lbC5tYWlsX3Jlc3BvbnNlID0gJzQ1MSBSZXF1ZXN0ZWQgYWN0aW9uIGFib3J0ZWQnCisgICAgICAgIHNlbGYuc2Vydi5fU01UUGNoYW5uZWwuZGlzY29ubmVjdCA9IFRydWUKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzbXRwbGliLlNNVFBTZW5kZXJSZWZ1c2VkKToKKyAgICAgICAgICAgIHNtdHAuc2VuZG1haWwoJ0pvaG4nLCAnU2FsbHknLCAndGVzdCBtZXNzYWdlJykKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc210cC5zb2NrKQorCiAgICAgIyBJc3N1ZSA1NzEzOiBtYWtlIHN1cmUgY2xvc2UsIG5vdCByc2V0LCBpcyBjYWxsZWQgaWYgd2UgZ2V0IGEgNDIxIGVycm9yCiAgICAgZGVmIHRlc3RfNDIxX2Zyb21fbWFpbF9jbWQoc2VsZik6CiAgICAgICAgIHNtdHAgPSBzbXRwbGliLlNNVFAoSE9TVCwgc2VsZi5wb3J0LCBsb2NhbF9ob3N0bmFtZT0nbG9jYWxob3N0JywgdGltZW91dD0xNSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc210cG5ldC5weSBiL0xpYi90ZXN0L3Rlc3Rfc210cG5ldC5weQppbmRleCBlOTdjZjM2Li4xNTY1NGYyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3NtdHBuZXQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zbXRwbmV0LnB5CkBAIC0xLDIzICsxLDM1IEBACiBpbXBvcnQgdW5pdHRlc3QKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogaW1wb3J0IHNtdHBsaWIKK2ltcG9ydCBzb2NrZXQKIAogc3NsID0gc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCJzc2wiKQogCiBzdXBwb3J0LnJlcXVpcmVzKCJuZXR3b3JrIikKIAorZGVmIGNoZWNrX3NzbF92ZXJpZml5KGhvc3QsIHBvcnQpOgorICAgIGNvbnRleHQgPSBzc2wuY3JlYXRlX2RlZmF1bHRfY29udGV4dCgpCisgICAgd2l0aCBzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb24oKGhvc3QsIHBvcnQpKSBhcyBzb2NrOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzb2NrID0gY29udGV4dC53cmFwX3NvY2tldChzb2NrLCBzZXJ2ZXJfaG9zdG5hbWU9aG9zdCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc29jay5jbG9zZSgpCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCiAKIGNsYXNzIFNtdHBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICB0ZXN0U2VydmVyID0gJ3NtdHAuZ21haWwuY29tJwotICAgIHJlbW90ZVBvcnQgPSAyNQotICAgIGNvbnRleHQgPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfU1NMdjIzKQorICAgIHJlbW90ZVBvcnQgPSA1ODcKIAogICAgIGRlZiB0ZXN0X2Nvbm5lY3Rfc3RhcnR0bHMoc2VsZik6CiAgICAgICAgIHN1cHBvcnQuZ2V0X2F0dHJpYnV0ZShzbXRwbGliLCAnU01UUF9TU0wnKQorICAgICAgICBjb250ZXh0ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1NTTHYyMykKICAgICAgICAgd2l0aCBzdXBwb3J0LnRyYW5zaWVudF9pbnRlcm5ldChzZWxmLnRlc3RTZXJ2ZXIpOgogICAgICAgICAgICAgc2VydmVyID0gc210cGxpYi5TTVRQKHNlbGYudGVzdFNlcnZlciwgc2VsZi5yZW1vdGVQb3J0KQogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHNlcnZlci5zdGFydHRscyhjb250ZXh0PXNlbGYuY29udGV4dCkKKyAgICAgICAgICAgICAgICBzZXJ2ZXIuc3RhcnR0bHMoY29udGV4dD1jb250ZXh0KQogICAgICAgICAgICAgZXhjZXB0IHNtdHBsaWIuU01UUEV4Y2VwdGlvbiBhcyBlOgogICAgICAgICAgICAgICAgIGlmIGUuYXJnc1swXSA9PSAnU1RBUlRUTFMgZXh0ZW5zaW9uIG5vdCBzdXBwb3J0ZWQgYnkgc2VydmVyLic6CiAgICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0LnNraXAoZS5hcmdzWzBdKQpAQCAtMzAsNyArNDIsNiBAQAogY2xhc3MgU210cFNTTFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIHRlc3RTZXJ2ZXIgPSAnc210cC5nbWFpbC5jb20nCiAgICAgcmVtb3RlUG9ydCA9IDQ2NQotICAgIGNvbnRleHQgPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfU1NMdjIzKQogCiAgICAgZGVmIHRlc3RfY29ubmVjdChzZWxmKToKICAgICAgICAgc3VwcG9ydC5nZXRfYXR0cmlidXRlKHNtdHBsaWIsICdTTVRQX1NTTCcpCkBAIC00Nyw5ICs1OCwyMyBAQAogICAgICAgICAgICAgc2VydmVyLnF1aXQoKQogCiAgICAgZGVmIHRlc3RfY29ubmVjdF91c2luZ19zc2xjb250ZXh0KHNlbGYpOgorICAgICAgICBjb250ZXh0ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1NTTHYyMykKICAgICAgICAgc3VwcG9ydC5nZXRfYXR0cmlidXRlKHNtdHBsaWIsICdTTVRQX1NTTCcpCiAgICAgICAgIHdpdGggc3VwcG9ydC50cmFuc2llbnRfaW50ZXJuZXQoc2VsZi50ZXN0U2VydmVyKToKLSAgICAgICAgICAgIHNlcnZlciA9IHNtdHBsaWIuU01UUF9TU0woc2VsZi50ZXN0U2VydmVyLCBzZWxmLnJlbW90ZVBvcnQsIGNvbnRleHQ9c2VsZi5jb250ZXh0KQorICAgICAgICAgICAgc2VydmVyID0gc210cGxpYi5TTVRQX1NTTChzZWxmLnRlc3RTZXJ2ZXIsIHNlbGYucmVtb3RlUG9ydCwgY29udGV4dD1jb250ZXh0KQorICAgICAgICAgICAgc2VydmVyLmVobG8oKQorICAgICAgICAgICAgc2VydmVyLnF1aXQoKQorCisgICAgZGVmIHRlc3RfY29ubmVjdF91c2luZ19zc2xjb250ZXh0X3ZlcmlmaWVkKHNlbGYpOgorICAgICAgICB3aXRoIHN1cHBvcnQudHJhbnNpZW50X2ludGVybmV0KHNlbGYudGVzdFNlcnZlcik6CisgICAgICAgICAgICBjYW5fdmVyaWZ5ID0gY2hlY2tfc3NsX3ZlcmlmaXkoc2VsZi50ZXN0U2VydmVyLCBzZWxmLnJlbW90ZVBvcnQpCisgICAgICAgICAgICBpZiBub3QgY2FuX3ZlcmlmeToKKyAgICAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJTU0wgY2VydGlmaWNhdGUgY2FuJ3QgYmUgdmVyaWZpZWQiKQorCisgICAgICAgIHN1cHBvcnQuZ2V0X2F0dHJpYnV0ZShzbXRwbGliLCAnU01UUF9TU0wnKQorICAgICAgICBjb250ZXh0ID0gc3NsLmNyZWF0ZV9kZWZhdWx0X2NvbnRleHQoKQorICAgICAgICB3aXRoIHN1cHBvcnQudHJhbnNpZW50X2ludGVybmV0KHNlbGYudGVzdFNlcnZlcik6CisgICAgICAgICAgICBzZXJ2ZXIgPSBzbXRwbGliLlNNVFBfU1NMKHNlbGYudGVzdFNlcnZlciwgc2VsZi5yZW1vdGVQb3J0LCBjb250ZXh0PWNvbnRleHQpCiAgICAgICAgICAgICBzZXJ2ZXIuZWhsbygpCiAgICAgICAgICAgICBzZXJ2ZXIucXVpdCgpCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc25kaGRyLnB5IGIvTGliL3Rlc3QvdGVzdF9zbmRoZHIucHkKaW5kZXggMTAwNDY4OC4uNWUwYWJlMCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zbmRoZHIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zbmRoZHIucHkKQEAgLTEyLDcgKzEyLDcgQEAKICAgICAgICAgICAgICgnc25kaGRyLmhjb20nLCAoJ2hjb20nLCAyMjA1MC4wLCAxLCAtMSwgOCkpLAogICAgICAgICAgICAgKCdzbmRoZHIuc25kdCcsICgnc25kdCcsIDQ0MTAwLCAxLCA1LCA4KSksCiAgICAgICAgICAgICAoJ3NuZGhkci52b2MnLCAoJ3ZvYycsIDAsIDEsIC0xLCA4KSksCi0gICAgICAgICAgICAoJ3NuZGhkci53YXYnLCAoJ3dhdicsIDQ0MTAwLCAyLCAtMSwgMTYpKSwKKyAgICAgICAgICAgICgnc25kaGRyLndhdicsICgnd2F2JywgNDQxMDAsIDIsIDUsIDE2KSksCiAgICAgICAgICk6CiAgICAgICAgICAgICBmaWxlbmFtZSA9IGZpbmRmaWxlKGZpbGVuYW1lLCBzdWJkaXI9InNuZGhkcmRhdGEiKQogICAgICAgICAgICAgd2hhdCA9IHNuZGhkci53aGF0KGZpbGVuYW1lKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zb2NrZXQucHkgYi9MaWIvdGVzdC90ZXN0X3NvY2tldC5weQppbmRleCBlZTRhZWEzLi4xNDBiNGJlIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3NvY2tldC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3NvY2tldC5weQpAQCAtMSw5ICsxLDkgQEAKIGltcG9ydCB1bml0dGVzdAogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0Ci1mcm9tIHVuaXR0ZXN0LmNhc2UgaW1wb3J0IF9FeHBlY3RlZEZhaWx1cmUKIAogaW1wb3J0IGVycm5vCiBpbXBvcnQgaW8KK2ltcG9ydCBpdGVydG9vbHMKIGltcG9ydCBzb2NrZXQKIGltcG9ydCBzZWxlY3QKIGltcG9ydCB0ZW1wZmlsZQpAQCAtMjEsMTMgKzIxLDEzIEBACiBpbXBvcnQgcGlja2xlCiBpbXBvcnQgc3RydWN0CiB0cnk6Ci0gICAgaW1wb3J0IGZjbnRsCi1leGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgZmNudGwgPSBGYWxzZQotdHJ5OgogICAgIGltcG9ydCBtdWx0aXByb2Nlc3NpbmcKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICBtdWx0aXByb2Nlc3NpbmcgPSBGYWxzZQordHJ5OgorICAgIGltcG9ydCBmY250bAorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGZjbnRsID0gTm9uZQogCiBIT1NUID0gc3VwcG9ydC5IT1NUCiBNU0cgPSAnTWljaGFlbCBHaWxmaXggd2FzIGhlcmVcdTEyMzRcclxuJy5lbmNvZGUoJ3V0Zi04JykgIyMgdGVzdCB1bmljb2RlIHN0cmluZyBhbmQgY2FycmlhZ2UgcmV0dXJuCkBAIC0zOCwxMiArMzgsMTcgQEAKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICB0aHJlYWQgPSBOb25lCiAgICAgdGhyZWFkaW5nID0gTm9uZQordHJ5OgorICAgIGltcG9ydCBfc29ja2V0CitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgX3NvY2tldCA9IE5vbmUKKwogCiBkZWYgX2hhdmVfc29ja2V0X2NhbigpOgogICAgICIiIkNoZWNrIHdoZXRoZXIgQ0FOIHNvY2tldHMgYXJlIHN1cHBvcnRlZCBvbiB0aGlzIGhvc3QuIiIiCiAgICAgdHJ5OgogICAgICAgICBzID0gc29ja2V0LnNvY2tldChzb2NrZXQuUEZfQ0FOLCBzb2NrZXQuU09DS19SQVcsIHNvY2tldC5DQU5fUkFXKQotICAgIGV4Y2VwdCAoQXR0cmlidXRlRXJyb3IsIHNvY2tldC5lcnJvciwgT1NFcnJvcik6CisgICAgZXhjZXB0IChBdHRyaWJ1dGVFcnJvciwgT1NFcnJvcik6CiAgICAgICAgIHJldHVybiBGYWxzZQogICAgIGVsc2U6CiAgICAgICAgIHMuY2xvc2UoKQpAQCAtMTE4LDEyICsxMjMsNDIgQEAKICAgICBpbnRlcmZhY2UgPSAndmNhbjAnCiAgICAgYnVmc2l6ZSA9IDEyOAogCisgICAgIiIiVGhlIENBTiBmcmFtZSBzdHJ1Y3R1cmUgaXMgZGVmaW5lZCBpbiA8bGludXgvY2FuLmg+OgorCisgICAgc3RydWN0IGNhbl9mcmFtZSB7CisgICAgICAgIGNhbmlkX3QgY2FuX2lkOyAgLyogMzIgYml0IENBTl9JRCArIEVGRi9SVFIvRVJSIGZsYWdzICovCisgICAgICAgIF9fdTggICAgY2FuX2RsYzsgLyogZGF0YSBsZW5ndGggY29kZTogMCAuLiA4ICovCisgICAgICAgIF9fdTggICAgZGF0YVs4XSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSk7CisgICAgfTsKKyAgICAiIiIKKyAgICBjYW5fZnJhbWVfZm10ID0gIj1JQjN4OHMiCisgICAgY2FuX2ZyYW1lX3NpemUgPSBzdHJ1Y3QuY2FsY3NpemUoY2FuX2ZyYW1lX2ZtdCkKKworICAgICIiIlRoZSBCcm9hZGNhc3QgTWFuYWdlbWVudCBDb21tYW5kIGZyYW1lIHN0cnVjdHVyZSBpcyBkZWZpbmVkCisgICAgaW4gPGxpbnV4L2Nhbi9iY20uaD46CisKKyAgICBzdHJ1Y3QgYmNtX21zZ19oZWFkIHsKKyAgICAgICAgX191MzIgb3Bjb2RlOworICAgICAgICBfX3UzMiBmbGFnczsKKyAgICAgICAgX191MzIgY291bnQ7CisgICAgICAgIHN0cnVjdCB0aW1ldmFsIGl2YWwxLCBpdmFsMjsKKyAgICAgICAgY2FuaWRfdCBjYW5faWQ7CisgICAgICAgIF9fdTMyIG5mcmFtZXM7CisgICAgICAgIHN0cnVjdCBjYW5fZnJhbWUgZnJhbWVzWzBdOworICAgIH0KKworICAgIGBiY21fbXNnX2hlYWRgIG11c3QgYmUgOCBieXRlcyBhbGlnbmVkIGJlY2F1c2Ugb2YgdGhlIGBmcmFtZXNgIG1lbWJlciAoc2VlCisgICAgYHN0cnVjdCBjYW5fZnJhbWVgIGRlZmluaXRpb24pLiBNdXN0IHVzZSBuYXRpdmUgbm90IHN0YW5kYXJkIHR5cGVzIGZvciBwYWNraW5nLgorICAgICIiIgorICAgIGJjbV9jbWRfbXNnX2ZtdCA9ICJAM0k0bDJJIgorICAgIGJjbV9jbWRfbXNnX2ZtdCArPSAieCIgKiAoc3RydWN0LmNhbGNzaXplKGJjbV9jbWRfbXNnX2ZtdCkgJSA4KQorCiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBzZWxmLnMgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5QRl9DQU4sIHNvY2tldC5TT0NLX1JBVywgc29ja2V0LkNBTl9SQVcpCiAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzZWxmLnMuY2xvc2UpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYucy5iaW5kKChzZWxmLmludGVyZmFjZSwpKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoJ25ldHdvcmsgaW50ZXJmYWNlIGAlc2AgZG9lcyBub3QgZXhpc3QnICUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaW50ZXJmYWNlKQogCkBAIC0yMzksOSArMjc0LDYgQEAKICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigidGVzdF9mdW5jIG11c3QgYmUgYSBjYWxsYWJsZSBmdW5jdGlvbiIpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHRlc3RfZnVuYygpCi0gICAgICAgIGV4Y2VwdCBfRXhwZWN0ZWRGYWlsdXJlOgotICAgICAgICAgICAgIyBXZSBkZWxpYmVyYXRlbHkgaWdub3JlIGV4cGVjdGVkIGZhaWx1cmVzCi0gICAgICAgICAgICBwYXNzCiAgICAgICAgIGV4Y2VwdCBCYXNlRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgICAgICBzZWxmLnF1ZXVlLnB1dChlKQogICAgICAgICBmaW5hbGx5OgpAQCAtMjkyLDcgKzMyNCw3IEBACiAgICAgICAgIHNlbGYuY2xpID0gc29ja2V0LnNvY2tldChzb2NrZXQuUEZfQ0FOLCBzb2NrZXQuU09DS19SQVcsIHNvY2tldC5DQU5fUkFXKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLmNsaS5iaW5kKChzZWxmLmludGVyZmFjZSwpKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICMgc2tpcFRlc3Qgc2hvdWxkIG5vdCBiZSBjYWxsZWQgaGVyZSwgYW5kIHdpbGwgYmUgY2FsbGVkIGluIHRoZQogICAgICAgICAgICAgIyBzZXJ2ZXIgaW5zdGVhZAogICAgICAgICAgICAgcGFzcwpAQCAtNTQwLDExICs1NzIsNyBAQAogY2xhc3MgSW5ldDZUZXN0QmFzZShJbmV0VGVzdEJhc2UpOgogICAgICIiIkJhc2UgY2xhc3MgZm9yIElQdjYgc29ja2V0IHRlc3RzLiIiIgogCi0gICAgIyBEb24ndCB1c2UgImxvY2FsaG9zdCIgaGVyZSAtIGl0IG1heSBub3QgaGF2ZSBhbiBJUHY2IGFkZHJlc3MKLSAgICAjIGFzc2lnbmVkIHRvIGl0IGJ5IGRlZmF1bHQgKGUuZy4gaW4gL2V0Yy9ob3N0cyksIGFuZCBpZiBzb21lb25lCi0gICAgIyBoYXMgYXNzaWduZWQgaXQgYW4gSVB2NC1tYXBwZWQgYWRkcmVzcywgdGhlbiBpdCdzIHVubGlrZWx5IHRvCi0gICAgIyB3b3JrIHdpdGggdGhlIGZ1bGwgSVB2NiBBUEkuCi0gICAgaG9zdCA9ICI6OjEiCisgICAgaG9zdCA9IHN1cHBvcnQuSE9TVHY2CiAKIGNsYXNzIFVEUDZUZXN0QmFzZShJbmV0NlRlc3RCYXNlKToKICAgICAiIiJCYXNlIGNsYXNzIGZvciBVRFAtb3Zlci1JUHY2IHRlc3RzLiIiIgpAQCAtNjA1LDcgKzYzMyw3IEBACiAgICAgICAgICAgICAgICAgICAgIGZvciBvYmogaW4gYXJnc10KICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcyA9IHNvY2tldC5zb2NrZXQoKmNhbGxhcmdzKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIGU6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICAjIFhYWDogY2hlY2sgZXJybm8/CiAgICAgICAgICAgICBlcnIgPSBzdHIoZSkKICAgICAgICAgZWxzZToKQEAgLTYyMSwxMCArNjQ5LDM5IEBACiAKIGNsYXNzIEdlbmVyYWxNb2R1bGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKKyAgICBkZWYgdGVzdF9Tb2NrZXRUeXBlX2lzX3NvY2tldG9iamVjdChzZWxmKToKKyAgICAgICAgaW1wb3J0IF9zb2NrZXQKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNvY2tldC5Tb2NrZXRUeXBlIGlzIF9zb2NrZXQuc29ja2V0KQorICAgICAgICBzID0gc29ja2V0LnNvY2tldCgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzLCBzb2NrZXQuU29ja2V0VHlwZSkKKyAgICAgICAgcy5jbG9zZSgpCisKICAgICBkZWYgdGVzdF9yZXByKHNlbGYpOgogICAgICAgICBzID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQotICAgICAgICBzZWxmLmFkZENsZWFudXAocy5jbG9zZSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcHIocykuc3RhcnRzd2l0aCgiPHNvY2tldC5zb2NrZXQgb2JqZWN0IikpCisgICAgICAgIHdpdGggczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2ZkPSVpJyAlIHMuZmlsZW5vKCksIHJlcHIocykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCdmYW1pbHk9JXMnICUgc29ja2V0LkFGX0lORVQsIHJlcHIocykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCd0eXBlPSVzJyAlIHNvY2tldC5TT0NLX1NUUkVBTSwgcmVwcihzKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3Byb3RvPTAnLCByZXByKHMpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbigncmFkZHInLCByZXByKHMpKQorICAgICAgICAgICAgcy5iaW5kKCgnMTI3LjAuMC4xJywgMCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCdsYWRkcicsIHJlcHIocykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKHN0cihzLmdldHNvY2tuYW1lKCkpLCByZXByKHMpKQorICAgICAgICBzZWxmLmFzc2VydEluKCdbY2xvc2VkXScsIHJlcHIocykpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ2xhZGRyJywgcmVwcihzKSkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKF9zb2NrZXQgaXMgbm90IE5vbmUsICduZWVkIF9zb2NrZXQgbW9kdWxlJykKKyAgICBkZWYgdGVzdF9jc29ja2V0X3JlcHIoc2VsZik6CisgICAgICAgIHMgPSBfc29ja2V0LnNvY2tldChfc29ja2V0LkFGX0lORVQsIF9zb2NrZXQuU09DS19TVFJFQU0pCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGV4cGVjdGVkID0gKCc8c29ja2V0IG9iamVjdCwgZmQ9JXMsIGZhbWlseT0lcywgdHlwZT0lcywgcHJvdG89JXM+JworICAgICAgICAgICAgICAgICAgICAgICAgJSAocy5maWxlbm8oKSwgcy5mYW1pbHksIHMudHlwZSwgcy5wcm90bykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIocyksIGV4cGVjdGVkKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgcy5jbG9zZSgpCisgICAgICAgIGV4cGVjdGVkID0gKCc8c29ja2V0IG9iamVjdCwgZmQ9LTEsIGZhbWlseT0lcywgdHlwZT0lcywgcHJvdG89JXM+JworICAgICAgICAgICAgICAgICAgICAlIChzLmZhbWlseSwgcy50eXBlLCBzLnByb3RvKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHMpLCBleHBlY3RlZCkKIAogICAgIGRlZiB0ZXN0X3dlYWtyZWYoc2VsZik6CiAgICAgICAgIHMgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCkBAIC02NDIsMTUgKzY5OSwxNSBAQAogICAgIGRlZiB0ZXN0U29ja2V0RXJyb3Ioc2VsZik6CiAgICAgICAgICMgVGVzdGluZyBzb2NrZXQgbW9kdWxlIGV4Y2VwdGlvbnMKICAgICAgICAgbXNnID0gIkVycm9yIHJhaXNpbmcgc29ja2V0IGV4Y2VwdGlvbiAoJXMpLiIKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IsIG1zZz1tc2cgJSAnc29ja2V0LmVycm9yJyk6Ci0gICAgICAgICAgICByYWlzZSBzb2NrZXQuZXJyb3IKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IsIG1zZz1tc2cgJSAnc29ja2V0LmhlcnJvcicpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIG1zZz1tc2cgJSAnT1NFcnJvcicpOgorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIG1zZz1tc2cgJSAnc29ja2V0LmhlcnJvcicpOgogICAgICAgICAgICAgcmFpc2Ugc29ja2V0LmhlcnJvcgotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgbXNnPW1zZyAlICdzb2NrZXQuZ2FpZXJyb3InKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBtc2c9bXNnICUgJ3NvY2tldC5nYWllcnJvcicpOgogICAgICAgICAgICAgcmFpc2Ugc29ja2V0LmdhaWVycm9yCiAKICAgICBkZWYgdGVzdFNlbmR0b0Vycm9ycyhzZWxmKToKLSAgICAgICAgIyBUZXN0aW5nIHRoYXQgc2VuZHRvIGRvZW5zJ3QgbWFza3MgZmFpbHVyZXMuIFNlZSAjMTAxNjkuCisgICAgICAgICMgVGVzdGluZyB0aGF0IHNlbmR0byBkb2Vzbid0IG1hc2tzIGZhaWx1cmVzLiBTZWUgIzEwMTY5LgogICAgICAgICBzID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfREdSQU0pCiAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzLmNsb3NlKQogICAgICAgICBzLmJpbmQoKCcnLCAwKSkKQEAgLTcwOSwxMyArNzY2LDEzIEBACiAgICAgICAgIGhvc3RuYW1lID0gc29ja2V0LmdldGhvc3RuYW1lKCkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgaXAgPSBzb2NrZXQuZ2V0aG9zdGJ5bmFtZShob3N0bmFtZSkKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAjIFByb2JhYmx5IG5hbWUgbG9va3VwIHdhc24ndCBzZXQgdXAgcmlnaHQ7IHNraXAgdGhpcyB0ZXN0CiAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCduYW1lIGxvb2t1cCBmYWlsdXJlJykKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlwLmZpbmQoJy4nKSA+PSAwLCAiRXJyb3IgcmVzb2x2aW5nIGhvc3QgdG8gaXAuIikKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgaG5hbWUsIGFsaWFzZXMsIGlwYWRkcnMgPSBzb2NrZXQuZ2V0aG9zdGJ5YWRkcihpcCkKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAjIFByb2JhYmx5IGEgc2ltaWxhciBwcm9ibGVtIGFzIGFib3ZlOyBza2lwIHRoaXMgdGVzdAogICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgnbmFtZSBsb29rdXAgZmFpbHVyZScpCiAgICAgICAgIGFsbF9ob3N0X25hbWVzID0gW2hvc3RuYW1lLCBobmFtZV0gKyBhbGlhc2VzCkBAIC03MjMsMTMgKzc4MCwyNyBAQAogICAgICAgICBpZiBub3QgZnFobiBpbiBhbGxfaG9zdF9uYW1lczoKICAgICAgICAgICAgIHNlbGYuZmFpbCgiRXJyb3IgdGVzdGluZyBob3N0IHJlc29sdXRpb24gbWVjaGFuaXNtcy4gKGZxZG46ICVzLCBhbGw6ICVzKSIgJSAoZnFobiwgcmVwcihhbGxfaG9zdF9uYW1lcykpKQogCisgICAgZGVmIHRlc3RfaG9zdF9yZXNvbHV0aW9uKHNlbGYpOgorICAgICAgICBmb3IgYWRkciBpbiBbJzAuMS4xLn4xJywgJzErLjEuMS4xJywgJzo6MXEnLCAnOjoxOjoyJywKKyAgICAgICAgICAgICAgICAgICAgICcxOjE6MToxOjE6MToxOjE6MSddOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc29ja2V0LmdldGhvc3RieW5hbWUsIGFkZHIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBzb2NrZXQuZ2V0aG9zdGJ5YWRkciwgYWRkcikKKworICAgICAgICBmb3IgYWRkciBpbiBbc3VwcG9ydC5IT1NULCAnMTAuMC4wLjEnLCAnMjU1LjI1NS4yNTUuMjU1J106CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvY2tldC5nZXRob3N0YnluYW1lKGFkZHIpLCBhZGRyKQorCisgICAgICAgICMgd2UgZG9uJ3QgdGVzdCBzdXBwb3J0LkhPU1R2NiBiZWNhdXNlIHRoZXJlJ3MgYSBjaGFuY2UgaXQgZG9lc24ndCBoYXZlCisgICAgICAgICMgYSBtYXRjaGluZyBuYW1lIGVudHJ5IChlLmcuICdpcDYtbG9jYWxob3N0JykKKyAgICAgICAgZm9yIGhvc3QgaW4gW3N1cHBvcnQuSE9TVF06CisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGhvc3QsIHNvY2tldC5nZXRob3N0YnlhZGRyKGhvc3QpWzJdKQorCiAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzb2NrZXQsICdzZXRob3N0bmFtZScpLCAidGVzdCBuZWVkcyBzb2NrZXQuc2V0aG9zdG5hbWUoKSIpCiAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzb2NrZXQsICdnZXRob3N0bmFtZScpLCAidGVzdCBuZWVkcyBzb2NrZXQuZ2V0aG9zdG5hbWUoKSIpCiAgICAgZGVmIHRlc3Rfc2V0aG9zdG5hbWUoc2VsZik6CiAgICAgICAgIG9sZGhuID0gc29ja2V0LmdldGhvc3RuYW1lKCkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc29ja2V0LnNldGhvc3RuYW1lKCduZXcnKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIGU6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICBpZiBlLmVycm5vID09IGVycm5vLkVQRVJNOgogICAgICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoInRlc3Qgc2hvdWxkIGJlIHJ1biBhcyByb290IikKICAgICAgICAgICAgIGVsc2U6CkBAIC03NjMsOCArODM0LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAnc29ja2V0LmlmX25hbWVpbmRleCgpIG5vdCBhdmFpbGFibGUuJykKICAgICBkZWYgdGVzdEludmFsaWRJbnRlcmZhY2VOYW1lSW5kZXgoc2VsZik6CiAgICAgICAgICMgdGVzdCBub25leGlzdGVudCBpbnRlcmZhY2UgaW5kZXgvbmFtZQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IsIHNvY2tldC5pZl9pbmRleHRvbmFtZSwgMCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCBzb2NrZXQuaWZfbmFtZXRvaW5kZXgsICdfREVBREJFRUYnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBzb2NrZXQuaWZfaW5kZXh0b25hbWUsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNvY2tldC5pZl9uYW1ldG9pbmRleCwgJ19ERUFEQkVFRicpCiAgICAgICAgICMgdGVzdCB3aXRoIGludmFsaWQgdmFsdWVzCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc29ja2V0LmlmX25hbWV0b2luZGV4LCAwKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNvY2tldC5pZl9pbmRleHRvbmFtZSwgJ19ERUFEQkVFRicpCkBAIC03ODYsNyArODU3LDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgIyBPbiBzb21lIHZlcnNpb25zLCB0aGlzIGNyYXNoZXMgdGhlIGludGVycHJldGVyLgogICAgICAgICAgICAgc29ja2V0LmdldG5hbWVpbmZvKCgneCcsIDAsIDAsIDApLCAwKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MKIAogICAgIGRlZiB0ZXN0TnRvSChzZWxmKToKQEAgLTgyMiw3ICs4OTMsNyBAQAogICAgICAgICAjIEZpbmQgb25lIHNlcnZpY2UgdGhhdCBleGlzdHMsIHRoZW4gY2hlY2sgYWxsIHRoZSByZWxhdGVkIGludGVyZmFjZXMuCiAgICAgICAgICMgSSd2ZSBvcmRlcmVkIHRoaXMgYnkgcHJvdG9jb2xzIHRoYXQgaGF2ZSBib3RoIGEgdGNwIGFuZCB1ZHAKICAgICAgICAgIyBwcm90b2NvbCwgYXQgbGVhc3QgZm9yIG1vZGVybiBMaW51eGVzLgotICAgICAgICBpZiAoc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoKCdmcmVlYnNkJywgJ25ldGJzZCcpKQorICAgICAgICBpZiAoc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoKCdmcmVlYnNkJywgJ25ldGJzZCcsICdnbnVrZnJlZWJzZCcpKQogICAgICAgICAgICAgb3Igc3lzLnBsYXRmb3JtIGluICgnbGludXgnLCAnZGFyd2luJykpOgogICAgICAgICAgICAgIyBhdm9pZCB0aGUgJ2VjaG8nIHNlcnZpY2Ugb24gdGhpcyBwbGF0Zm9ybSwgYXMgdGhlcmUgaXMgYW4KICAgICAgICAgICAgICMgYXNzdW1wdGlvbiBicmVha2luZyBub24tc3RhbmRhcmQgcG9ydC9wcm90b2NvbCBlbnRyeQpAQCAtODMzLDE3ICs5MDQsMTcgQEAKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBwb3J0ID0gc29ja2V0LmdldHNlcnZieW5hbWUoc2VydmljZSwgJ3RjcCcpCiAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByYWlzZSBzb2NrZXQuZXJyb3IKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IKICAgICAgICAgIyBUcnkgc2FtZSBjYWxsIHdpdGggb3B0aW9uYWwgcHJvdG9jb2wgb21pdHRlZAogICAgICAgICBwb3J0MiA9IHNvY2tldC5nZXRzZXJ2YnluYW1lKHNlcnZpY2UpCiAgICAgICAgIGVxKHBvcnQsIHBvcnQyKQogICAgICAgICAjIFRyeSB1ZHAsIGJ1dCBkb24ndCBiYXJmIGlmIGl0IGRvZXNuJ3QgZXhpc3QKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgdWRwcG9ydCA9IHNvY2tldC5nZXRzZXJ2YnluYW1lKHNlcnZpY2UsICd1ZHAnKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHVkcHBvcnQgPSBOb25lCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBlcSh1ZHBwb3J0LCBwb3J0KQpAQCAtODk5LDcgKzk3MCw3IEBACiAgICAgICAgIGcgPSBsYW1iZGEgYTogaW5ldF9wdG9uKEFGX0lORVQsIGEpCiAKICAgICAgICAgYXNzZXJ0SW52YWxpZCA9IGxhbWJkYSBmdW5jLGE6IHNlbGYuYXNzZXJ0UmFpc2VzKAotICAgICAgICAgICAgKHNvY2tldC5lcnJvciwgVmFsdWVFcnJvciksIGZ1bmMsIGEKKyAgICAgICAgICAgIChPU0Vycm9yLCBWYWx1ZUVycm9yKSwgZnVuYywgYQogICAgICAgICApCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ1x4MDBceDAwXHgwMFx4MDAnLCBmKCcwLjAuMC4wJykpCkBAIC05MzIsOSArMTAwMywxNyBAQAogICAgICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoJ0lQdjYgbm90IGF2YWlsYWJsZScpCiAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoJ2NvdWxkIG5vdCBpbXBvcnQgbmVlZGVkIHN5bWJvbHMgZnJvbSBzb2NrZXQnKQorCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGluZXRfcHRvbihBRl9JTkVUNiwgJzo6JykKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgaWYgZS53aW5lcnJvciA9PSAxMDAyMjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgnSVB2NiBtaWdodCBub3QgYmUgc3VwcG9ydGVkJykKKwogICAgICAgICBmID0gbGFtYmRhIGE6IGluZXRfcHRvbihBRl9JTkVUNiwgYSkKICAgICAgICAgYXNzZXJ0SW52YWxpZCA9IGxhbWJkYSBhOiBzZWxmLmFzc2VydFJhaXNlcygKLSAgICAgICAgICAgIChzb2NrZXQuZXJyb3IsIFZhbHVlRXJyb3IpLCBmLCBhCisgICAgICAgICAgICAoT1NFcnJvciwgVmFsdWVFcnJvciksIGYsIGEKICAgICAgICAgKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidceDAwJyAqIDE2LCBmKCc6OicpKQpAQCAtOTgzLDcgKzEwNjIsNyBAQAogICAgICAgICBmcm9tIHNvY2tldCBpbXBvcnQgaW5ldF9udG9hIGFzIGYsIGluZXRfbnRvcCwgQUZfSU5FVAogICAgICAgICBnID0gbGFtYmRhIGE6IGluZXRfbnRvcChBRl9JTkVULCBhKQogICAgICAgICBhc3NlcnRJbnZhbGlkID0gbGFtYmRhIGZ1bmMsYTogc2VsZi5hc3NlcnRSYWlzZXMoCi0gICAgICAgICAgICAoc29ja2V0LmVycm9yLCBWYWx1ZUVycm9yKSwgZnVuYywgYQorICAgICAgICAgICAgKE9TRXJyb3IsIFZhbHVlRXJyb3IpLCBmdW5jLCBhCiAgICAgICAgICkKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcxLjAuMS4wJywgZihiJ1x4MDFceDAwXHgwMVx4MDAnKSkKQEAgLTEwMTAsOSArMTA4OSwxNyBAQAogICAgICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoJ0lQdjYgbm90IGF2YWlsYWJsZScpCiAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoJ2NvdWxkIG5vdCBpbXBvcnQgbmVlZGVkIHN5bWJvbHMgZnJvbSBzb2NrZXQnKQorCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGluZXRfbnRvcChBRl9JTkVUNiwgYidceDAwJyAqIDE2KQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBpZiBlLndpbmVycm9yID09IDEwMDIyOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCdJUHY2IG1pZ2h0IG5vdCBiZSBzdXBwb3J0ZWQnKQorCiAgICAgICAgIGYgPSBsYW1iZGEgYTogaW5ldF9udG9wKEFGX0lORVQ2LCBhKQogICAgICAgICBhc3NlcnRJbnZhbGlkID0gbGFtYmRhIGE6IHNlbGYuYXNzZXJ0UmFpc2VzKAotICAgICAgICAgICAgKHNvY2tldC5lcnJvciwgVmFsdWVFcnJvciksIGYsIGEKKyAgICAgICAgICAgIChPU0Vycm9yLCBWYWx1ZUVycm9yKSwgZiwgYQogICAgICAgICApCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnOjonLCBmKGInXHgwMCcgKiAxNikpCkBAIC0xMDQwLDcgKzExMjcsNyBAQAogICAgICAgICAjIEF0IGxlYXN0IGZvciBlQ29zLiAgVGhpcyBpcyByZXF1aXJlZCBmb3IgdGhlIFMvMzkwIHRvIHBhc3MuCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG15X2lwX2FkZHIgPSBzb2NrZXQuZ2V0aG9zdGJ5bmFtZShzb2NrZXQuZ2V0aG9zdG5hbWUoKSkKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAjIFByb2JhYmx5IG5hbWUgbG9va3VwIHdhc24ndCBzZXQgdXAgcmlnaHQ7IHNraXAgdGhpcyB0ZXN0CiAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCduYW1lIGxvb2t1cCBmYWlsdXJlJykKICAgICAgICAgc2VsZi5hc3NlcnRJbihuYW1lWzBdLCAoIjAuMC4wLjAiLCBteV9pcF9hZGRyKSwgJyVzIGludmFsaWQnICUgbmFtZVswXSkKQEAgLTEwNjcsMjggKzExNTQsNDEgQEAKICAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKICAgICAgICAgc29jay5zZXR0aW1lb3V0KDEpCiAgICAgICAgIHNvY2suY2xvc2UoKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IsIHNvY2suc2VuZCwgYiJzcGFtIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc29jay5zZW5kLCBiInNwYW0iKQogCiAgICAgZGVmIHRlc3ROZXdBdHRyaWJ1dGVzKHNlbGYpOgogICAgICAgICAjIHRlc3RpbmcgLmZhbWlseSwgLnR5cGUgYW5kIC5wcm90b2NvbAorCiAgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29jay5mYW1pbHksIHNvY2tldC5BRl9JTkVUKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvY2sudHlwZSwgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICBpZiBoYXNhdHRyKHNvY2tldCwgJ1NPQ0tfQ0xPRVhFQycpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihzb2NrLnR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIChzb2NrZXQuU09DS19TVFJFQU0gfCBzb2NrZXQuU09DS19DTE9FWEVDLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ja2V0LlNPQ0tfU1RSRUFNKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29jay50eXBlLCBzb2NrZXQuU09DS19TVFJFQU0pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29jay5wcm90bywgMCkKICAgICAgICAgc29jay5jbG9zZSgpCiAKICAgICBkZWYgdGVzdF9nZXRzb2NrYWRkcmFyZyhzZWxmKToKLSAgICAgICAgaG9zdCA9ICcwLjAuMC4wJworICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldCgpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzb2NrLmNsb3NlKQogICAgICAgICBwb3J0ID0gc3VwcG9ydC5maW5kX3VudXNlZF9wb3J0KCkKICAgICAgICAgYmlnX3BvcnQgPSBwb3J0ICsgNjU1MzYKICAgICAgICAgbmVnX3BvcnQgPSBwb3J0IC0gNjU1MzYKLSAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBzb2NrLmJpbmQsIChob3N0LCBiaWdfcG9ydCkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBzb2NrLmJpbmQsIChob3N0LCBuZWdfcG9ydCkpCi0gICAgICAgICAgICBzb2NrLmJpbmQoKGhvc3QsIHBvcnQpKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgc29jay5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIHNvY2suYmluZCwgKEhPU1QsIGJpZ19wb3J0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgc29jay5iaW5kLCAoSE9TVCwgbmVnX3BvcnQpKQorICAgICAgICAjIFNpbmNlIGZpbmRfdW51c2VkX3BvcnQoKSBpcyBpbmhlcmVudGx5IHN1YmplY3QgdG8gcmFjZSBjb25kaXRpb25zLCB3ZQorICAgICAgICAjIGNhbGwgaXQgYSBjb3VwbGUgdGltZXMgaWYgbmVjZXNzYXJ5LgorICAgICAgICBmb3IgaSBpbiBpdGVydG9vbHMuY291bnQoKToKKyAgICAgICAgICAgIHBvcnQgPSBzdXBwb3J0LmZpbmRfdW51c2VkX3BvcnQoKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNvY2suYmluZCgoSE9TVCwgcG9ydCkpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRUFERFJJTlVTRSBvciBpID09IDU6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGJyZWFrCiAKICAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhvcy5uYW1lID09ICJudCIsICJXaW5kb3dzIHNwZWNpZmljIikKICAgICBkZWYgdGVzdF9zb2NrX2lvY3RsKHNlbGYpOgpAQCAtMTEyNiw5ICsxMjI2LDEyIEBACiAgICAgICAgIHNvY2tldC5nZXRhZGRyaW5mbyhIT1NULCA4MCkKICAgICAgICAgc29ja2V0LmdldGFkZHJpbmZvKEhPU1QsIE5vbmUpCiAgICAgICAgICMgdGVzdCBmYW1pbHkgYW5kIHNvY2t0eXBlIGZpbHRlcnMKLSAgICAgICAgaW5mb3MgPSBzb2NrZXQuZ2V0YWRkcmluZm8oSE9TVCwgTm9uZSwgc29ja2V0LkFGX0lORVQpCi0gICAgICAgIGZvciBmYW1pbHksIF8sIF8sIF8sIF8gaW4gaW5mb3M6CisgICAgICAgIGluZm9zID0gc29ja2V0LmdldGFkZHJpbmZvKEhPU1QsIDgwLCBzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICBmb3IgZmFtaWx5LCB0eXBlLCBfLCBfLCBfIGluIGluZm9zOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmYW1pbHksIHNvY2tldC5BRl9JTkVUKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZmFtaWx5KSwgJ0FkZHJlc3NGYW1pbHkuQUZfSU5FVCcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUsIHNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHR5cGUpLCAnU29ja2V0S2luZC5TT0NLX1NUUkVBTScpCiAgICAgICAgIGluZm9zID0gc29ja2V0LmdldGFkZHJpbmZvKEhPU1QsIE5vbmUsIDAsIHNvY2tldC5TT0NLX1NUUkVBTSkKICAgICAgICAgZm9yIF8sIHNvY2t0eXBlLCBfLCBfLCBfIGluIGluZm9zOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb2NrdHlwZSwgc29ja2V0LlNPQ0tfU1RSRUFNKQpAQCAtMTE3NiwxNyArMTI3OSwxNiBAQAogCiAgICAgZGVmIHRlc3RfZ2V0bmFtZWluZm8oc2VsZik6CiAgICAgICAgICMgb25seSBJUCBhZGRyZXNzZXMgYXJlIGFsbG93ZWQKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCBzb2NrZXQuZ2V0bmFtZWluZm8sICgnbWFpbC5weXRob24ub3JnJywwKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc29ja2V0LmdldG5hbWVpbmZvLCAoJ21haWwucHl0aG9uLm9yZycsMCksIDApCiAKICAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhzdXBwb3J0LmlzX3Jlc291cmNlX2VuYWJsZWQoJ25ldHdvcmsnKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAnbmV0d29yayBpcyBub3QgZW5hYmxlZCcpCiAgICAgZGVmIHRlc3RfaWRuYShzZWxmKToKLSAgICAgICAgIyBDaGVjayBmb3IgaW50ZXJuZXQgYWNjZXNzIGJlZm9yZSBydW5uaW5nIHRlc3QgKGlzc3VlICMxMjgwNCkuCi0gICAgICAgIHRyeToKKyAgICAgICAgIyBDaGVjayBmb3IgaW50ZXJuZXQgYWNjZXNzIGJlZm9yZSBydW5uaW5nIHRlc3QKKyAgICAgICAgIyAoaXNzdWUgIzEyODA0LCBpc3N1ZSAjMjUxMzgpLgorICAgICAgICB3aXRoIHN1cHBvcnQudHJhbnNpZW50X2ludGVybmV0KCdweXRob24ub3JnJyk6CiAgICAgICAgICAgICBzb2NrZXQuZ2V0aG9zdGJ5bmFtZSgncHl0aG9uLm9yZycpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZ2FpZXJyb3IgYXMgZToKLSAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gc29ja2V0LkVBSV9OT0RBVEE6Ci0gICAgICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgnaW50ZXJuZXQgYWNjZXNzIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QnKQorCiAgICAgICAgICMgdGhlc2Ugc2hvdWxkIGFsbCBiZSBzdWNjZXNzZnVsCiAgICAgICAgIGRvbWFpbiA9ICfQuNGB0L/Ri9GC0LDQvdC40LUucHl0aG9udGVzdC5uZXQnCiAgICAgICAgIHNvY2tldC5nZXRob3N0YnluYW1lKGRvbWFpbikKQEAgLTEyNzIsNiArMTM3NCwxMSBAQAogICAgICAgICB3aXRoIHNvY2s6CiAgICAgICAgICAgICBmb3IgcHJvdG9jb2wgaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHBpY2tsZS5kdW1wcywgc29jaywgcHJvdG9jb2wpCisgICAgICAgIGZvciBwcm90b2NvbCBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgZmFtaWx5ID0gcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhzb2NrZXQuQUZfSU5FVCwgcHJvdG9jb2wpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmYW1pbHksIHNvY2tldC5BRl9JTkVUKQorICAgICAgICAgICAgdHlwZSA9IHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMoc29ja2V0LlNPQ0tfU1RSRUFNLCBwcm90b2NvbCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUsIHNvY2tldC5TT0NLX1NUUkVBTSkKIAogICAgIGRlZiB0ZXN0X2xpc3Rlbl9iYWNrbG9nKHNlbGYpOgogICAgICAgICBmb3IgYmFja2xvZyBpbiAwLCAtMToKQEAgLTEyOTIsMTAgKzEzOTksMzEgQEAKICAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhzdXBwb3J0LklQVjZfRU5BQkxFRCwgJ0lQdjYgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQogICAgIGRlZiB0ZXN0X2Zsb3dpbmZvKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBzb2NrZXQuZ2V0bmFtZWluZm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICgnOjoxJywwLCAweGZmZmZmZmZmKSwgMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHN1cHBvcnQuSE9TVHY2LCAwLCAweGZmZmZmZmZmKSwgMCkKICAgICAgICAgd2l0aCBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUNiwgc29ja2V0LlNPQ0tfU1RSRUFNKSBhcyBzOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgcy5iaW5kLCAoJzo6MScsIDAsIC0xMCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBzLmJpbmQsIChzdXBwb3J0LkhPU1R2NiwgMCwgLTEwKSkKIAorICAgIGRlZiB0ZXN0X3N0cl9mb3JfZW51bXMoc2VsZik6CisgICAgICAgICMgTWFrZSBzdXJlIHRoYXQgdGhlIEFGXyogYW5kIFNPQ0tfKiBjb25zdGFudHMgaGF2ZSBlbnVtLWxpa2Ugc3RyaW5nCisgICAgICAgICMgcmVwcnMuCisgICAgICAgIHdpdGggc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKSBhcyBzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIocy5mYW1pbHkpLCAnQWRkcmVzc0ZhbWlseS5BRl9JTkVUJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHMudHlwZSksICdTb2NrZXRLaW5kLlNPQ0tfU1RSRUFNJykKKworICAgIEB1bml0dGVzdC5za2lwSWYob3MubmFtZSA9PSAnbnQnLCAnV2lsbCBub3Qgd29yayBvbiBXaW5kb3dzJykKKyAgICBkZWYgdGVzdF91a25vd25fc29ja2V0X2ZhbWlseV9yZXByKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCB3aGVuIGNyZWF0ZWQgd2l0aCBhIGZhbWlseSB0aGF0J3Mgbm90IG9uZSBvZiB0aGUga25vd24KKyAgICAgICAgIyBBRl8qL1NPQ0tfKiBjb25zdGFudHMsIHNvY2tldC5mYW1pbHkganVzdCByZXR1cm5zIHRoZSBudW1iZXIuCisgICAgICAgICMKKyAgICAgICAgIyBUbyBkbyB0aGlzIHdlIGZvb2wgc29ja2V0LnNvY2tldCBpbnRvIGJlbGlldmluZyBpdCBhbHJlYWR5IGhhcyBhbgorICAgICAgICAjIG9wZW4gZmQgYmVjYXVzZSBvbiB0aGlzIHBhdGggaXQgZG9lc24ndCBhY3R1YWxseSB2ZXJpZnkgdGhlIGZhbWlseSBhbmQKKyAgICAgICAgIyB0eXBlIGFuZCBwb3B1bGF0ZXMgdGhlIHNvY2tldCBvYmplY3QuCisgICAgICAgICMKKyAgICAgICAgIyBPbiBXaW5kb3dzIHRoaXMgdHJpY2sgd29uJ3Qgd29yaywgc28gdGhlIHRlc3QgaXMgc2tpcHBlZC4KKyAgICAgICAgZmQsIF8gPSB0ZW1wZmlsZS5ta3N0ZW1wKCkKKyAgICAgICAgd2l0aCBzb2NrZXQuc29ja2V0KGZhbWlseT00MjQyNCwgdHlwZT0xMzMzMSwgZmlsZW5vPWZkKSBhcyBzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmZhbWlseSwgNDI0MjQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMudHlwZSwgMTMzMzEpCiAKIEB1bml0dGVzdC5za2lwVW5sZXNzKEhBVkVfU09DS0VUX0NBTiwgJ1NvY2tldENhbiByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCiBjbGFzcyBCYXNpY0NBTlRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtMTMwNSwxMCArMTQzMywzNSBAQAogICAgICAgICBzb2NrZXQuUEZfQ0FOCiAgICAgICAgIHNvY2tldC5DQU5fUkFXCiAKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNvY2tldCwgIkNBTl9CQ00iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnc29ja2V0LkNBTl9CQ00gcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQorICAgIGRlZiB0ZXN0QkNNQ29uc3RhbnRzKHNlbGYpOgorICAgICAgICBzb2NrZXQuQ0FOX0JDTQorCisgICAgICAgICMgb3Bjb2RlcworICAgICAgICBzb2NrZXQuQ0FOX0JDTV9UWF9TRVRVUCAgICAgIyBjcmVhdGUgKGN5Y2xpYykgdHJhbnNtaXNzaW9uIHRhc2sKKyAgICAgICAgc29ja2V0LkNBTl9CQ01fVFhfREVMRVRFICAgICMgcmVtb3ZlIChjeWNsaWMpIHRyYW5zbWlzc2lvbiB0YXNrCisgICAgICAgIHNvY2tldC5DQU5fQkNNX1RYX1JFQUQgICAgICAjIHJlYWQgcHJvcGVydGllcyBvZiAoY3ljbGljKSB0cmFuc21pc3Npb24gdGFzaworICAgICAgICBzb2NrZXQuQ0FOX0JDTV9UWF9TRU5EICAgICAgIyBzZW5kIG9uZSBDQU4gZnJhbWUKKyAgICAgICAgc29ja2V0LkNBTl9CQ01fUlhfU0VUVVAgICAgICMgY3JlYXRlIFJYIGNvbnRlbnQgZmlsdGVyIHN1YnNjcmlwdGlvbgorICAgICAgICBzb2NrZXQuQ0FOX0JDTV9SWF9ERUxFVEUgICAgIyByZW1vdmUgUlggY29udGVudCBmaWx0ZXIgc3Vic2NyaXB0aW9uCisgICAgICAgIHNvY2tldC5DQU5fQkNNX1JYX1JFQUQgICAgICAjIHJlYWQgcHJvcGVydGllcyBvZiBSWCBjb250ZW50IGZpbHRlciBzdWJzY3JpcHRpb24KKyAgICAgICAgc29ja2V0LkNBTl9CQ01fVFhfU1RBVFVTICAgICMgcmVwbHkgdG8gVFhfUkVBRCByZXF1ZXN0CisgICAgICAgIHNvY2tldC5DQU5fQkNNX1RYX0VYUElSRUQgICAjIG5vdGlmaWNhdGlvbiBvbiBwZXJmb3JtZWQgdHJhbnNtaXNzaW9ucyAoY291bnQ9MCkKKyAgICAgICAgc29ja2V0LkNBTl9CQ01fUlhfU1RBVFVTICAgICMgcmVwbHkgdG8gUlhfUkVBRCByZXF1ZXN0CisgICAgICAgIHNvY2tldC5DQU5fQkNNX1JYX1RJTUVPVVQgICAjIGN5Y2xpYyBtZXNzYWdlIGlzIGFic2VudAorICAgICAgICBzb2NrZXQuQ0FOX0JDTV9SWF9DSEFOR0VEICAgIyB1cGRhdGVkIENBTiBmcmFtZSAoZGV0ZWN0ZWQgY29udGVudCBjaGFuZ2UpCisKICAgICBkZWYgdGVzdENyZWF0ZVNvY2tldChzZWxmKToKICAgICAgICAgd2l0aCBzb2NrZXQuc29ja2V0KHNvY2tldC5QRl9DQU4sIHNvY2tldC5TT0NLX1JBVywgc29ja2V0LkNBTl9SQVcpIGFzIHM6CiAgICAgICAgICAgICBwYXNzCiAKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNvY2tldCwgIkNBTl9CQ00iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnc29ja2V0LkNBTl9CQ00gcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQorICAgIGRlZiB0ZXN0Q3JlYXRlQkNNU29ja2V0KHNlbGYpOgorICAgICAgICB3aXRoIHNvY2tldC5zb2NrZXQoc29ja2V0LlBGX0NBTiwgc29ja2V0LlNPQ0tfREdSQU0sIHNvY2tldC5DQU5fQkNNKSBhcyBzOgorICAgICAgICAgICAgcGFzcworCiAgICAgZGVmIHRlc3RCaW5kQW55KHNlbGYpOgogICAgICAgICB3aXRoIHNvY2tldC5zb2NrZXQoc29ja2V0LlBGX0NBTiwgc29ja2V0LlNPQ0tfUkFXLCBzb2NrZXQuQ0FOX1JBVykgYXMgczoKICAgICAgICAgICAgIHMuYmluZCgoJycsICkpCkBAIC0xMzE2LDcgKzE0NjksNyBAQAogICAgIGRlZiB0ZXN0VG9vTG9uZ0ludGVyZmFjZU5hbWUoc2VsZik6CiAgICAgICAgICMgbW9zdCBzeXN0ZW1zIGxpbWl0IElGTkFNU0laIHRvIDE2LCB0YWtlIDEwMjQgdG8gYmUgc3VyZQogICAgICAgICB3aXRoIHNvY2tldC5zb2NrZXQoc29ja2V0LlBGX0NBTiwgc29ja2V0LlNPQ0tfUkFXLCBzb2NrZXQuQ0FOX1JBVykgYXMgczoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoc29ja2V0LmVycm9yLCAnaW50ZXJmYWNlIG5hbWUgdG9vIGxvbmcnLAorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleChPU0Vycm9yLCAnaW50ZXJmYWNlIG5hbWUgdG9vIGxvbmcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLmJpbmQsICgneCcgKiAxMDI0LCkpCiAKICAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNvY2tldCwgIkNBTl9SQVdfTE9PUEJBQ0siKSwKQEAgLTEzNDQsMTYgKzE0OTcsNiBAQAogQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkLCAnVGhyZWFkaW5nIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKIGNsYXNzIENBTlRlc3QoVGhyZWFkZWRDQU5Tb2NrZXRUZXN0KToKIAotICAgICIiIlRoZSBDQU4gZnJhbWUgc3RydWN0dXJlIGlzIGRlZmluZWQgaW4gPGxpbnV4L2Nhbi5oPjoKLQotICAgIHN0cnVjdCBjYW5fZnJhbWUgewotICAgICAgICBjYW5pZF90IGNhbl9pZDsgIC8qIDMyIGJpdCBDQU5fSUQgKyBFRkYvUlRSL0VSUiBmbGFncyAqLwotICAgICAgICBfX3U4ICAgIGNhbl9kbGM7IC8qIGRhdGEgbGVuZ3RoIGNvZGU6IDAgLi4gOCAqLwotICAgICAgICBfX3U4ICAgIGRhdGFbOF0gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg4KSkpOwotICAgIH07Ci0gICAgIiIiCi0gICAgY2FuX2ZyYW1lX2ZtdCA9ICI9SUIzeDhzIgotCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1ldGhvZE5hbWU9J3J1blRlc3QnKToKICAgICAgICAgVGhyZWFkZWRDQU5Tb2NrZXRUZXN0Ll9faW5pdF9fKHNlbGYsIG1ldGhvZE5hbWU9bWV0aG9kTmFtZSkKIApAQCAtMTQwMiw2ICsxNTQ1LDQ2IEBACiAgICAgICAgIHNlbGYuY2YyID0gc2VsZi5idWlsZF9jYW5fZnJhbWUoMHgxMiwgYidceDk5XHgyMlx4MzMnKQogICAgICAgICBzZWxmLmNsaS5zZW5kKHNlbGYuY2YyKQogCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzb2NrZXQsICJDQU5fQkNNIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3NvY2tldC5DQU5fQkNNIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKKyAgICBkZWYgX3Rlc3RCQ00oc2VsZik6CisgICAgICAgIGNmLCBhZGRyID0gc2VsZi5jbGkucmVjdmZyb20oc2VsZi5idWZzaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY2YsIGNmKQorICAgICAgICBjYW5faWQsIGNhbl9kbGMsIGRhdGEgPSBzZWxmLmRpc3NlY3RfY2FuX2ZyYW1lKGNmKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY2FuX2lkLCBjYW5faWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kYXRhLCBkYXRhKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzb2NrZXQsICJDQU5fQkNNIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3NvY2tldC5DQU5fQkNNIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKKyAgICBkZWYgdGVzdEJDTShzZWxmKToKKyAgICAgICAgYmNtID0gc29ja2V0LnNvY2tldChzb2NrZXQuUEZfQ0FOLCBzb2NrZXQuU09DS19ER1JBTSwgc29ja2V0LkNBTl9CQ00pCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChiY20uY2xvc2UpCisgICAgICAgIGJjbS5jb25uZWN0KChzZWxmLmludGVyZmFjZSwpKQorICAgICAgICBzZWxmLmNhbl9pZCA9IDB4MTIzCisgICAgICAgIHNlbGYuZGF0YSA9IGJ5dGVzKFsweGMwLCAweGZmLCAweGVlXSkKKyAgICAgICAgc2VsZi5jZiA9IHNlbGYuYnVpbGRfY2FuX2ZyYW1lKHNlbGYuY2FuX2lkLCBzZWxmLmRhdGEpCisgICAgICAgIG9wY29kZSA9IHNvY2tldC5DQU5fQkNNX1RYX1NFTkQKKyAgICAgICAgZmxhZ3MgPSAwCisgICAgICAgIGNvdW50ID0gMAorICAgICAgICBpdmFsMV9zZWNvbmRzID0gaXZhbDFfdXNlYyA9IGl2YWwyX3NlY29uZHMgPSBpdmFsMl91c2VjID0gMAorICAgICAgICBiY21fY2FuX2lkID0gMHgwMjIyCisgICAgICAgIG5mcmFtZXMgPSAxCisgICAgICAgIGFzc2VydCBsZW4oc2VsZi5jZikgPT0gMTYKKyAgICAgICAgaGVhZGVyID0gc3RydWN0LnBhY2soc2VsZi5iY21fY21kX21zZ19mbXQsCisgICAgICAgICAgICAgICAgICAgIG9wY29kZSwKKyAgICAgICAgICAgICAgICAgICAgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgIGNvdW50LAorICAgICAgICAgICAgICAgICAgICBpdmFsMV9zZWNvbmRzLAorICAgICAgICAgICAgICAgICAgICBpdmFsMV91c2VjLAorICAgICAgICAgICAgICAgICAgICBpdmFsMl9zZWNvbmRzLAorICAgICAgICAgICAgICAgICAgICBpdmFsMl91c2VjLAorICAgICAgICAgICAgICAgICAgICBiY21fY2FuX2lkLAorICAgICAgICAgICAgICAgICAgICBuZnJhbWVzLAorICAgICAgICAgICAgICAgICAgICApCisgICAgICAgIGhlYWRlcl9wbHVzX2ZyYW1lID0gaGVhZGVyICsgc2VsZi5jZgorICAgICAgICBieXRlc19zZW50ID0gYmNtLnNlbmQoaGVhZGVyX3BsdXNfZnJhbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZXNfc2VudCwgbGVuKGhlYWRlcl9wbHVzX2ZyYW1lKSkKKwogCiBAdW5pdHRlc3Quc2tpcFVubGVzcyhIQVZFX1NPQ0tFVF9SRFMsICdSRFMgc29ja2V0cyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCiBjbGFzcyBCYXNpY1JEU1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtMTYyNCw3ICsxODA3LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLCBmaWxlbm8pCiAgICAgICAgICMgY2xpX2Nvbm4gY2Fubm90IGJlIHVzZWQgYW55bW9yZS4uLgogICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5jbGlfY29ubi5fY2xvc2VkKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IsIHNlbGYuY2xpX2Nvbm4ucmVjdiwgMTAyNCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc2VsZi5jbGlfY29ubi5yZWN2LCAxMDI0KQogICAgICAgICBzZWxmLmNsaV9jb25uLmNsb3NlKCkKICAgICAgICAgIyAuLi5idXQgd2UgY2FuIGNyZWF0ZSBhbm90aGVyIHNvY2tldCB1c2luZyB0aGUgKHN0aWxsIG9wZW4pCiAgICAgICAgICMgZmlsZSBkZXNjcmlwdG9yCkBAIC0xOTkzLDcgKzIxNzYsNyBAQAogICAgIGRlZiBfdGVzdFNlbmRtc2dFeGNlc3NDbXNnUmVqZWN0KHNlbGYpOgogICAgICAgICBpZiBub3QgaGFzYXR0cihzb2NrZXQsICJDTVNHX1NQQUNFIik6CiAgICAgICAgICAgICAjIENhbiBvbmx5IHNlbmQgb25lIGl0ZW0KLSAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yKSBhcyBjbToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcikgYXMgY206CiAgICAgICAgICAgICAgICAgc2VsZi5zZW5kbXNnVG9TZXJ2ZXIoW01TR10sIFsoMCwgMCwgYiIiKSwgKDAsIDAsIGIiIildKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoY20uZXhjZXB0aW9uLmVycm5vKQogICAgICAgICBzZWxmLnNlbmRUb1NlcnZlcihiImRvbmUiKQpAQCAtMjAwNCw3ICsyMTg3LDcgQEAKIAogICAgIGRlZiBfdGVzdFNlbmRtc2dBZnRlckNsb3NlKHNlbGYpOgogICAgICAgICBzZWxmLmNsaV9zb2NrLmNsb3NlKCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCBzZWxmLnNlbmRtc2dUb1NlcnZlciwgW01TR10pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNlbGYuc2VuZG1zZ1RvU2VydmVyLCBbTVNHXSkKIAogCiBjbGFzcyBTZW5kbXNnU3RyZWFtVGVzdHMoU2VuZG1zZ1Rlc3RzKToKQEAgLTIwMzcsNyArMjIyMCw3IEBACiAgICAgIyBMaW51eCBzdXBwb3J0cyBNU0dfRE9OVFdBSVQgd2hlbiBzZW5kaW5nLCBidXQgaW4gZ2VuZXJhbCwgaXQKICAgICAjIG9ubHkgd29ya3Mgd2hlbiByZWNlaXZpbmcuICBDb3VsZCBhZGQgb3RoZXIgcGxhdGZvcm1zIGlmIHRoZXkKICAgICAjIHN1cHBvcnQgaXQgdG9vLgotICAgIEBza2lwV2l0aENsaWVudElmKHN5cy5wbGF0Zm9ybSBub3QgaW4geyJsaW51eDIifSwKKyAgICBAc2tpcFdpdGhDbGllbnRJZihzeXMucGxhdGZvcm0gbm90IGluIHsibGludXgifSwKICAgICAgICAgICAgICAgICAgICAgICAiTVNHX0RPTlRXQUlUIG5vdCBrbm93biB0byB3b3JrIG9uIHRoaXMgcGxhdGZvcm0gd2hlbiAiCiAgICAgICAgICAgICAgICAgICAgICAgInNlbmRpbmciKQogICAgIGRlZiB0ZXN0U2VuZG1zZ0RvbnRXYWl0KHNlbGYpOgpAQCAtMjA0OCw3ICsyMjMxLDcgQEAKICAgICBAdGVzdFNlbmRtc2dEb250V2FpdC5jbGllbnRfc2tpcAogICAgIGRlZiBfdGVzdFNlbmRtc2dEb250V2FpdChzZWxmKToKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKSBhcyBjbToKICAgICAgICAgICAgICAgICB3aGlsZSBUcnVlOgogICAgICAgICAgICAgICAgICAgICBzZWxmLnNlbmRtc2dUb1NlcnZlcihbYiJhIio1MTJdLCBbXSwgc29ja2V0Lk1TR19ET05UV0FJVCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oY20uZXhjZXB0aW9uLmVycm5vLApAQCAtMjA2OCw5ICsyMjUxLDkgQEAKICAgICAgICAgcGFzcwogCiAgICAgZGVmIF90ZXN0U2VuZG1zZ05vRGVzdEFkZHIoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgc2VsZi5jbGlfc29jay5zZW5kbXNnLAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBzZWxmLmNsaV9zb2NrLnNlbmRtc2csCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtNU0ddKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IsIHNlbGYuY2xpX3NvY2suc2VuZG1zZywKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc2VsZi5jbGlfc29jay5zZW5kbXNnLAogICAgICAgICAgICAgICAgICAgICAgICAgICBbTVNHXSwgW10sIDAsIE5vbmUpCiAKIApAQCAtMjE1Niw3ICsyMzM5LDcgQEAKICAgICBkZWYgdGVzdFJlY3Ztc2dBZnRlckNsb3NlKHNlbGYpOgogICAgICAgICAjIENoZWNrIHRoYXQgcmVjdm1zZ1tfaW50b10oKSBmYWlscyBvbiBhIGNsb3NlZCBzb2NrZXQuCiAgICAgICAgIHNlbGYuc2Vydl9zb2NrLmNsb3NlKCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCBzZWxmLmRvUmVjdm1zZywgc2VsZi5zZXJ2X3NvY2ssIDEwMjQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNlbGYuZG9SZWN2bXNnLCBzZWxmLnNlcnZfc29jaywgMTAyNCkKIAogICAgIGRlZiBfdGVzdFJlY3Ztc2dBZnRlckNsb3NlKHNlbGYpOgogICAgICAgICBwYXNzCkBAIC0yNTU3LDYgKzI3NDAsNyBAQAogICAgICAgICBzZWxmLmNyZWF0ZUFuZFNlbmRGRHMoMSkKIAogICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtID09ICJkYXJ3aW4iLCAic2tpcHBpbmcsIHNlZSBpc3N1ZSAjMTI5NTgiKQorICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoImFpeCIpLCAic2tpcHBpbmcsIHNlZSBpc3N1ZSAjMjIzOTciKQogICAgIEByZXF1aXJlQXR0cnMoc29ja2V0LCAiQ01TR19TUEFDRSIpCiAgICAgZGVmIHRlc3RGRFBhc3NTZXBhcmF0ZShzZWxmKToKICAgICAgICAgIyBQYXNzIHR3byBGRHMgaW4gdHdvIHNlcGFyYXRlIGFycmF5cy4gIEFycmF5cyBtYXkgYmUgY29tYmluZWQKQEAgLTI1NjcsNiArMjc1MSw3IEBACiAKICAgICBAdGVzdEZEUGFzc1NlcGFyYXRlLmNsaWVudF9za2lwCiAgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMucGxhdGZvcm0gPT0gImRhcndpbiIsICJza2lwcGluZywgc2VlIGlzc3VlICMxMjk1OCIpCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgiYWl4IiksICJza2lwcGluZywgc2VlIGlzc3VlICMyMjM5NyIpCiAgICAgZGVmIF90ZXN0RkRQYXNzU2VwYXJhdGUoc2VsZik6CiAgICAgICAgIGZkMCwgZmQxID0gc2VsZi5uZXdGRHMoMikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKQEAgLTI1NzksNiArMjc2NCw3IEBACiAgICAgICAgICAgICBsZW4oTVNHKSkKIAogICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtID09ICJkYXJ3aW4iLCAic2tpcHBpbmcsIHNlZSBpc3N1ZSAjMTI5NTgiKQorICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoImFpeCIpLCAic2tpcHBpbmcsIHNlZSBpc3N1ZSAjMjIzOTciKQogICAgIEByZXF1aXJlQXR0cnMoc29ja2V0LCAiQ01TR19TUEFDRSIpCiAgICAgZGVmIHRlc3RGRFBhc3NTZXBhcmF0ZU1pblNwYWNlKHNlbGYpOgogICAgICAgICAjIFBhc3MgdHdvIEZEcyBpbiB0d28gc2VwYXJhdGUgYXJyYXlzLCByZWNlaXZpbmcgdGhlbSBpbnRvIHRoZQpAQCAtMjU5MSw2ICsyNzc3LDcgQEAKIAogICAgIEB0ZXN0RkRQYXNzU2VwYXJhdGVNaW5TcGFjZS5jbGllbnRfc2tpcAogICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtID09ICJkYXJ3aW4iLCAic2tpcHBpbmcsIHNlZSBpc3N1ZSAjMTI5NTgiKQorICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoImFpeCIpLCAic2tpcHBpbmcsIHNlZSBpc3N1ZSAjMjIzOTciKQogICAgIGRlZiBfdGVzdEZEUGFzc1NlcGFyYXRlTWluU3BhY2Uoc2VsZik6CiAgICAgICAgIGZkMCwgZmQxID0gc2VsZi5uZXdGRHMoMikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKQEAgLTI2MDcsNyArMjc5NCw3IEBACiAgICAgICAgICMgY2FsbCBmYWlscywganVzdCBzZW5kIG1zZyB3aXRoIG5vIGFuY2lsbGFyeSBkYXRhLgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBuYnl0ZXMgPSBzZWxmLnNlbmRtc2dUb1NlcnZlcihbbXNnXSwgYW5jZGF0YSkKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBlOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgIyBDaGVjayB0aGF0IGl0IHdhcyB0aGUgc3lzdGVtIGNhbGwgdGhhdCBmYWlsZWQKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShlLmVycm5vLCBpbnQpCiAgICAgICAgICAgICBuYnl0ZXMgPSBzZWxmLnNlbmRtc2dUb1NlcnZlcihbbXNnXSkKQEAgLTI5ODUsNyArMzE3Miw3IEBACiAgICAgICAgICAgICAgICAgICBhcnJheS5hcnJheSgiaSIsIFtzZWxmLnRyYWZmaWNfY2xhc3NdKS50b2J5dGVzKCkgKyBiIlx4MDAiKSwKICAgICAgICAgICAgICAgICAgKHNvY2tldC5JUFBST1RPX0lQVjYsIHNvY2tldC5JUFY2X0hPUExJTUlULAogICAgICAgICAgICAgICAgICAgYXJyYXkuYXJyYXkoImkiLCBbc2VsZi5ob3BfbGltaXRdKSldKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIGU6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZS5lcnJubywgaW50KQogICAgICAgICAgICAgbmJ5dGVzID0gc2VsZi5zZW5kbXNnVG9TZXJ2ZXIoCiAgICAgICAgICAgICAgICAgW01TR10sCkBAIC0zNDQzLDEwICszNjMwLDEwIEBACiAgICAgICAgIHNlbGYuc2Vydi5zZXR0aW1lb3V0KHNlbGYudGltZW91dCkKIAogICAgIGRlZiBjaGVja0ludGVycnVwdGVkUmVjdihzZWxmLCBmdW5jLCAqYXJncywgKiprd2FyZ3MpOgotICAgICAgICAjIENoZWNrIHRoYXQgZnVuYygqYXJncywgKiprd2FyZ3MpIHJhaXNlcyBzb2NrZXQuZXJyb3Igd2l0aCBhbgorICAgICAgICAjIENoZWNrIHRoYXQgZnVuYygqYXJncywgKiprd2FyZ3MpIHJhaXNlcyBPU0Vycm9yIHdpdGggYW4KICAgICAgICAgIyBlcnJubyBvZiBFSU5UUiB3aGVuIGludGVycnVwdGVkIGJ5IGEgc2lnbmFsLgogICAgICAgICBzZWxmLnNldEFsYXJtKHNlbGYuYWxhcm1fdGltZSkKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IpIGFzIGNtOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpIGFzIGNtOgogICAgICAgICAgICAgZnVuYygqYXJncywgKiprd2FyZ3MpCiAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZShjbS5leGNlcHRpb24sIHNvY2tldC50aW1lb3V0KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5lcnJubywgZXJybm8uRUlOVFIpCkBAIC0zNTAzLDkgKzM2OTAsOSBAQAogCiAgICAgZGVmIGNoZWNrSW50ZXJydXB0ZWRTZW5kKHNlbGYsIGZ1bmMsICphcmdzLCAqKmt3YXJncyk6CiAgICAgICAgICMgQ2hlY2sgdGhhdCBmdW5jKCphcmdzLCAqKmt3YXJncyksIHJ1biBpbiBhIGxvb3AsIHJhaXNlcwotICAgICAgICAjIHNvY2tldC5lcnJvciB3aXRoIGFuIGVycm5vIG9mIEVJTlRSIHdoZW4gaW50ZXJydXB0ZWQgYnkgYQorICAgICAgICAjIE9TRXJyb3Igd2l0aCBhbiBlcnJubyBvZiBFSU5UUiB3aGVuIGludGVycnVwdGVkIGJ5IGEKICAgICAgICAgIyBzaWduYWwuCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yKSBhcyBjbToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKSBhcyBjbToKICAgICAgICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgICAgICAgICAgc2VsZi5zZXRBbGFybShzZWxmLmFsYXJtX3RpbWUpCiAgICAgICAgICAgICAgICAgZnVuYygqYXJncywgKiprd2FyZ3MpCkBAIC0zNjA0LDcgKzM3OTEsNyBAQAogICAgICAgICBzdGFydCA9IHRpbWUudGltZSgpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYuc2Vydi5hY2NlcHQoKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgZW5kID0gdGltZS50aW1lKCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChlbmQgLSBzdGFydCkgPCAxLjAsICJFcnJvciBzZXR0aW5nIG5vbi1ibG9ja2luZyBtb2RlLiIpCkBAIC0zNjM5LDcgKzM4MjYsNyBAQAogICAgICAgICBzdGFydCA9IHRpbWUudGltZSgpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYuc2Vydi5hY2NlcHQoKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgZW5kID0gdGltZS50aW1lKCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChlbmQgLSBzdGFydCkgPCAxLjAsICJFcnJvciBjcmVhdGluZyB3aXRoIG5vbi1ibG9ja2luZyBtb2RlLiIpCkBAIC0zNjY5LDEzICszODU2LDE0IEBACiAgICAgICAgIHNlbGYuc2Vydi5zZXRibG9ja2luZygwKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBjb25uLCBhZGRyID0gc2VsZi5zZXJ2LmFjY2VwdCgpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcGFzcwogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5mYWlsKCJFcnJvciB0cnlpbmcgdG8gZG8gbm9uLWJsb2NraW5nIGFjY2VwdC4iKQogICAgICAgICByZWFkLCB3cml0ZSwgZXJyID0gc2VsZWN0LnNlbGVjdChbc2VsZi5zZXJ2XSwgW10sIFtdKQogICAgICAgICBpZiBzZWxmLnNlcnYgaW4gcmVhZDoKICAgICAgICAgICAgIGNvbm4sIGFkZHIgPSBzZWxmLnNlcnYuYWNjZXB0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGNvbm4uZ2V0dGltZW91dCgpKQogICAgICAgICAgICAgY29ubi5jbG9zZSgpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLmZhaWwoIkVycm9yIHRyeWluZyB0byBkbyBhY2NlcHQgYWZ0ZXIgc2VsZWN0LiIpCkBAIC0zNjk5LDcgKzM4ODcsNyBAQAogICAgICAgICBjb25uLnNldGJsb2NraW5nKDApCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG1zZyA9IGNvbm4ucmVjdihsZW4oTVNHKSkKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLmZhaWwoIkVycm9yIHRyeWluZyB0byBkbyBub24tYmxvY2tpbmcgcmVjdi4iKQpAQCAtMzc4Miw3ICszOTcwLDcgQEAKICAgICAgICAgIyBGaXJzdCByZWFkIHJhaXNlcyBhIHRpbWVvdXQKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LnRpbWVvdXQsIHNlbGYucmVhZF9maWxlLnJlYWQsIDEpCiAgICAgICAgICMgU2Vjb25kIHJlYWQgaXMgZGlzYWxsb3dlZAotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IpIGFzIGN0eDoKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKSBhcyBjdHg6CiAgICAgICAgICAgICBzZWxmLnJlYWRfZmlsZS5yZWFkKDEpCiAgICAgICAgIHNlbGYuYXNzZXJ0SW4oImNhbm5vdCByZWFkIGZyb20gdGltZWQgb3V0IG9iamVjdCIsIHN0cihjdHguZXhjZXB0aW9uKSkKIApAQCAtMzg3NCw3ICs0MDYyLDcgQEAKICAgICAgICAgc2VsZi5yZWFkX2ZpbGUuY2xvc2UoKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnJlYWRfZmlsZS5maWxlbm8pCiAgICAgICAgIHNlbGYuY2xpX2Nvbm4uY2xvc2UoKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IsIHNlbGYuY2xpX2Nvbm4uZ2V0c29ja25hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNlbGYuY2xpX2Nvbm4uZ2V0c29ja25hbWUpCiAKICAgICBkZWYgX3Rlc3RSZWFsQ2xvc2Uoc2VsZik6CiAgICAgICAgIHBhc3MKQEAgLTM5MTEsNyArNDA5OSw3IEBACiAKICAgICBAc3RhdGljbWV0aG9kCiAgICAgZGVmIF9yYWlzZV9laW50cigpOgotICAgICAgICByYWlzZSBzb2NrZXQuZXJyb3IoZXJybm8uRUlOVFIsICJpbnRlcnJ1cHRlZCIpCisgICAgICAgIHJhaXNlIE9TRXJyb3IoZXJybm8uRUlOVFIsICJpbnRlcnJ1cHRlZCIpCiAKICAgICBkZWYgX3RleHRpb3dyYXBfbW9ja19zb2NrZXQoc2VsZiwgbW9jaywgYnVmZmVyaW5nPS0xKToKICAgICAgICAgcmF3ID0gc29ja2V0LlNvY2tldElPKG1vY2ssICJyIikKQEAgLTQwMjMsNyArNDIxMSw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLCBzZWxmLnJlYWRfbXNnKQogICAgICAgICAjIC4uLnVudGlsIHRoZSBmaWxlIGlzIGl0c2VsZiBjbG9zZWQKICAgICAgICAgc2VsZi5yZWFkX2ZpbGUuY2xvc2UoKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IsIHNlbGYuY2xpX2Nvbm4ucmVjdiwgMTAyNCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc2VsZi5jbGlfY29ubi5yZWN2LCAxMDI0KQogCiAgICAgZGVmIF90ZXN0TWFrZWZpbGVDbG9zZShzZWxmKToKICAgICAgICAgc2VsZi53cml0ZV9maWxlLndyaXRlKHNlbGYud3JpdGVfbXNnKQpAQCAtNDE3Miw3ICs0MzYwLDcgQEAKICAgICAgICAgcG9ydCA9IHN1cHBvcnQuZmluZF91bnVzZWRfcG9ydCgpCiAgICAgICAgIGNsaSA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGNsaS5jbG9zZSkKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IpIGFzIGNtOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpIGFzIGNtOgogICAgICAgICAgICAgY2xpLmNvbm5lY3QoKEhPU1QsIHBvcnQpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5lcnJubywgZXJybm8uRUNPTk5SRUZVU0VEKQogCkBAIC00MTgwLDcgKzQzNjgsNyBAQAogICAgICAgICAjIElzc3VlICM5NzkyOiBlcnJvcnMgcmFpc2VkIGJ5IGNyZWF0ZV9jb25uZWN0aW9uKCkgc2hvdWxkIGhhdmUKICAgICAgICAgIyBhIHByb3BlciBlcnJubyBhdHRyaWJ1dGUuCiAgICAgICAgIHBvcnQgPSBzdXBwb3J0LmZpbmRfdW51c2VkX3BvcnQoKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvcikgYXMgY206CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcikgYXMgY206CiAgICAgICAgICAgICBzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb24oKEhPU1QsIHBvcnQpKQogCiAgICAgICAgICMgSXNzdWUgIzE2MjU3OiBjcmVhdGVfY29ubmVjdGlvbigpIGNhbGxzIGdldGFkZHJpbmZvKCkgYWdhaW5zdApAQCAtNDMyOCw3ICs0NTE2LDcgQEAKICAgICAgICAgICAgIGZvbyA9IHNlbGYuc2Vydi5hY2NlcHQoKQogICAgICAgICBleGNlcHQgc29ja2V0LnRpbWVvdXQ6CiAgICAgICAgICAgICBzZWxmLmZhaWwoImNhdWdodCB0aW1lb3V0IGluc3RlYWQgb2YgZXJyb3IgKFRDUCkiKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIG9rID0gVHJ1ZQogICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICBzZWxmLmZhaWwoImNhdWdodCB1bmV4cGVjdGVkIGV4Y2VwdGlvbiAoVENQKSIpCkBAIC00Mzg1LDcgKzQ1NzMsNyBAQAogICAgICAgICAgICAgZm9vID0gc2VsZi5zZXJ2LnJlY3YoMTAyNCkKICAgICAgICAgZXhjZXB0IHNvY2tldC50aW1lb3V0OgogICAgICAgICAgICAgc2VsZi5mYWlsKCJjYXVnaHQgdGltZW91dCBpbnN0ZWFkIG9mIGVycm9yIChVRFApIikKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBvayA9IFRydWUKICAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAgc2VsZi5mYWlsKCJjYXVnaHQgdW5leHBlY3RlZCBleGNlcHRpb24gKFVEUCkiKQpAQCAtNDM5NSwxMCArNDU4MywxMCBAQAogY2xhc3MgVGVzdEV4Y2VwdGlvbnModW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3RFeGNlcHRpb25UcmVlKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhzb2NrZXQuZXJyb3IsIEV4Y2VwdGlvbikpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKHNvY2tldC5oZXJyb3IsIHNvY2tldC5lcnJvcikpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKHNvY2tldC5nYWllcnJvciwgc29ja2V0LmVycm9yKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3Moc29ja2V0LnRpbWVvdXQsIHNvY2tldC5lcnJvcikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKE9TRXJyb3IsIEV4Y2VwdGlvbikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKHNvY2tldC5oZXJyb3IsIE9TRXJyb3IpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhzb2NrZXQuZ2FpZXJyb3IsIE9TRXJyb3IpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhzb2NrZXQudGltZW91dCwgT1NFcnJvcikpCiAKIEB1bml0dGVzdC5za2lwVW5sZXNzKHN5cy5wbGF0Zm9ybSA9PSAnbGludXgnLCAnTGludXggc3BlY2lmaWMgdGVzdCcpCiBjbGFzcyBUZXN0TGludXhBYnN0cmFjdE5hbWVzcGFjZSh1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC00NDI1LDcgKzQ2MTMsNyBAQAogICAgIGRlZiB0ZXN0TmFtZU92ZXJmbG93KHNlbGYpOgogICAgICAgICBhZGRyZXNzID0gIlx4MDAiICsgImgiICogc2VsZi5VTklYX1BBVEhfTUFYCiAgICAgICAgIHdpdGggc29ja2V0LnNvY2tldChzb2NrZXQuQUZfVU5JWCwgc29ja2V0LlNPQ0tfU1RSRUFNKSBhcyBzOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCBzLmJpbmQsIGFkZHJlc3MpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBzLmJpbmQsIGFkZHJlc3MpCiAKICAgICBkZWYgdGVzdFN0ck5hbWUoc2VsZik6CiAgICAgICAgICMgQ2hlY2sgdGhhdCBhbiBhYnN0cmFjdCBuYW1lIGNhbiBiZSBwYXNzZWQgYXMgYSBzdHJpbmcuCkBAIC00NDYzLDcgKzQ2NTEsNyBAQAogICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgaWYgc3RyKGUpID09ICJBRl9VTklYIHBhdGggdG9vIGxvbmciOgogICAgICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoCi0gICAgICAgICAgICAgICAgICAgICJQYXRobmFtZSB7MCFhfSBpcyB0b28gbG9uZyB0byBzZXJ2ZSBhcyBhIEFGX1VOSVggcGF0aCIKKyAgICAgICAgICAgICAgICAgICAgIlBhdGhuYW1lIHswIWF9IGlzIHRvbyBsb25nIHRvIHNlcnZlIGFzIGFuIEFGX1VOSVggcGF0aCIKICAgICAgICAgICAgICAgICAgICAgLmZvcm1hdChwYXRoKSkKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcmFpc2UKQEAgLTQ2ODIsNyArNDg3MCw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzb2NrLl9jbG9zZWQpCiAgICAgICAgICMgZXhjZXB0aW9uIGluc2lkZSB3aXRoIGJsb2NrCiAgICAgICAgIHdpdGggc29ja2V0LnNvY2tldCgpIGFzIHNvY2s6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IsIHNvY2suc2VuZGFsbCwgYidmb28nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc29jay5zZW5kYWxsLCBiJ2ZvbycpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzb2NrLl9jbG9zZWQpCiAKICAgICBkZWYgdGVzdENyZWF0ZUNvbm5lY3Rpb25CYXNlKHNlbGYpOgpAQCAtNDcxMCwxOSArNDg5OCw3NiBAQAogICAgICAgICB3aXRoIHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbihhZGRyZXNzKSBhcyBzb2NrOgogICAgICAgICAgICAgc29jay5jbG9zZSgpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzb2NrLl9jbG9zZWQpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgc29jay5zZW5kYWxsLCBiJ2ZvbycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNvY2suc2VuZGFsbCwgYidmb28nKQogCiAKLUB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc29ja2V0LCAiU09DS19DTE9FWEVDIiksCi0gICAgICAgICAgICAgICAgICAgICAiU09DS19DTE9FWEVDIG5vdCBkZWZpbmVkIikKLUB1bml0dGVzdC5za2lwVW5sZXNzKGZjbnRsLCAibW9kdWxlIGZjbnRsIG5vdCBhdmFpbGFibGUiKQotY2xhc3MgQ2xvZXhlY0NvbnN0YW50VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBJbmhlcml0YW5jZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc29ja2V0LCAiU09DS19DTE9FWEVDIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgIlNPQ0tfQ0xPRVhFQyBub3QgZGVmaW5lZCIpCiAgICAgQHN1cHBvcnQucmVxdWlyZXNfbGludXhfdmVyc2lvbigyLCA2LCAyOCkKICAgICBkZWYgdGVzdF9TT0NLX0NMT0VYRUMoc2VsZik6CiAgICAgICAgIHdpdGggc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tldC5TT0NLX1NUUkVBTSB8IHNvY2tldC5TT0NLX0NMT0VYRUMpIGFzIHM6CiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocy50eXBlICYgc29ja2V0LlNPQ0tfQ0xPRVhFQykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmY250bC5mY250bChzLCBmY250bC5GX0dFVEZEKSAmIGZjbnRsLkZEX0NMT0VYRUMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHMuZ2V0X2luaGVyaXRhYmxlKCkpCisKKyAgICBkZWYgdGVzdF9kZWZhdWx0X2luaGVyaXRhYmxlKHNlbGYpOgorICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldCgpCisgICAgICAgIHdpdGggc29jazoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29jay5nZXRfaW5oZXJpdGFibGUoKSwgRmFsc2UpCisKKyAgICBkZWYgdGVzdF9kdXAoc2VsZik6CisgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KCkKKyAgICAgICAgd2l0aCBzb2NrOgorICAgICAgICAgICAgbmV3c29jayA9IHNvY2suZHVwKCkKKyAgICAgICAgICAgIHNvY2suY2xvc2UoKQorICAgICAgICAgICAgd2l0aCBuZXdzb2NrOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3c29jay5nZXRfaW5oZXJpdGFibGUoKSwgRmFsc2UpCisKKyAgICBkZWYgdGVzdF9zZXRfaW5oZXJpdGFibGUoc2VsZik6CisgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KCkKKyAgICAgICAgd2l0aCBzb2NrOgorICAgICAgICAgICAgc29jay5zZXRfaW5oZXJpdGFibGUoVHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29jay5nZXRfaW5oZXJpdGFibGUoKSwgVHJ1ZSkKKworICAgICAgICAgICAgc29jay5zZXRfaW5oZXJpdGFibGUoRmFsc2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvY2suZ2V0X2luaGVyaXRhYmxlKCksIEZhbHNlKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihmY250bCBpcyBOb25lLCAibmVlZCBmY250bCIpCisgICAgZGVmIHRlc3RfZ2V0X2luaGVyaXRhYmxlX2Nsb2V4ZWMoc2VsZik6CisgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KCkKKyAgICAgICAgd2l0aCBzb2NrOgorICAgICAgICAgICAgZmQgPSBzb2NrLmZpbGVubygpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvY2suZ2V0X2luaGVyaXRhYmxlKCksIEZhbHNlKQorCisgICAgICAgICAgICAjIGNsZWFyIEZEX0NMT0VYRUMgZmxhZworICAgICAgICAgICAgZmxhZ3MgPSBmY250bC5mY250bChmZCwgZmNudGwuRl9HRVRGRCkKKyAgICAgICAgICAgIGZsYWdzICY9IH5mY250bC5GRF9DTE9FWEVDCisgICAgICAgICAgICBmY250bC5mY250bChmZCwgZmNudGwuRl9TRVRGRCwgZmxhZ3MpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29jay5nZXRfaW5oZXJpdGFibGUoKSwgVHJ1ZSkKKworICAgIEB1bml0dGVzdC5za2lwSWYoZmNudGwgaXMgTm9uZSwgIm5lZWQgZmNudGwiKQorICAgIGRlZiB0ZXN0X3NldF9pbmhlcml0YWJsZV9jbG9leGVjKHNlbGYpOgorICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldCgpCisgICAgICAgIHdpdGggc29jazoKKyAgICAgICAgICAgIGZkID0gc29jay5maWxlbm8oKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmY250bC5mY250bChmZCwgZmNudGwuRl9HRVRGRCkgJiBmY250bC5GRF9DTE9FWEVDLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmY250bC5GRF9DTE9FWEVDKQorCisgICAgICAgICAgICBzb2NrLnNldF9pbmhlcml0YWJsZShUcnVlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmY250bC5mY250bChmZCwgZmNudGwuRl9HRVRGRCkgJiBmY250bC5GRF9DTE9FWEVDLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKQorCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNvY2tldCwgInNvY2tldHBhaXIiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAibmVlZCBzb2NrZXQuc29ja2V0cGFpcigpIikKKyAgICBkZWYgdGVzdF9zb2NrZXRwYWlyKHNlbGYpOgorICAgICAgICBzMSwgczIgPSBzb2NrZXQuc29ja2V0cGFpcigpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzMS5jbG9zZSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHMyLmNsb3NlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMxLmdldF9pbmhlcml0YWJsZSgpLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzMi5nZXRfaW5oZXJpdGFibGUoKSwgRmFsc2UpCiAKIAogQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzb2NrZXQsICJTT0NLX05PTkJMT0NLIiksCkBAIC00ODkxLDcgKzUxMzYsNyBAQAogICAgICAgICBOZXR3b3JrQ29ubmVjdGlvbkF0dHJpYnV0ZXNUZXN0LAogICAgICAgICBOZXR3b3JrQ29ubmVjdGlvbkJlaGF2aW91clRlc3QsCiAgICAgICAgIENvbnRleHRNYW5hZ2Vyc1Rlc3QsCi0gICAgICAgIENsb2V4ZWNDb25zdGFudFRlc3QsCisgICAgICAgIEluaGVyaXRhbmNlVGVzdCwKICAgICAgICAgTm9uYmxvY2tDb25zdGFudFRlc3QKICAgICBdKQogICAgIHRlc3RzLmFwcGVuZChCYXNpY1NvY2tldFBhaXJUZXN0KQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zb2NrZXRzZXJ2ZXIucHkgYi9MaWIvdGVzdC90ZXN0X3NvY2tldHNlcnZlci5weQppbmRleCA1OWQ4ZTVkLi4zMjVkNDg1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3NvY2tldHNlcnZlci5weQorKysgYi9MaWIvdGVzdC90ZXN0X3NvY2tldHNlcnZlci5weQpAQCAtMyw3ICszLDYgQEAKICIiIgogCiBpbXBvcnQgY29udGV4dGxpYgotaW1wb3J0IGltcAogaW1wb3J0IG9zCiBpbXBvcnQgc2VsZWN0CiBpbXBvcnQgc2lnbmFsCkBAIC0yOSw3ICsyOCw3IEBACiBIQVZFX1VOSVhfU09DS0VUUyA9IGhhc2F0dHIoc29ja2V0LCAiQUZfVU5JWCIpCiByZXF1aXJlc191bml4X3NvY2tldHMgPSB1bml0dGVzdC5za2lwVW5sZXNzKEhBVkVfVU5JWF9TT0NLRVRTLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmVxdWlyZXMgVW5peCBzb2NrZXRzJykKLUhBVkVfRk9SS0lORyA9IGhhc2F0dHIob3MsICJmb3JrIikgYW5kIG9zLm5hbWUgIT0gIm9zMiIKK0hBVkVfRk9SS0lORyA9IGhhc2F0dHIob3MsICJmb3JrIikKIHJlcXVpcmVzX2ZvcmtpbmcgPSB1bml0dGVzdC5za2lwVW5sZXNzKEhBVkVfRk9SS0lORywgJ3JlcXVpcmVzIGZvcmtpbmcnKQogCiBkZWYgc2lnbmFsX2FsYXJtKG4pOgpAQCAtODUsNyArODQsNyBAQAogICAgICAgICBmb3IgZm4gaW4gc2VsZi50ZXN0X2ZpbGVzOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIG9zLnJlbW92ZShmbikKLSAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgc2VsZi50ZXN0X2ZpbGVzWzpdID0gW10KIApAQCAtOTYsMjEgKzk1LDcgQEAKICAgICAgICAgICAgICMgWFhYOiBXZSBuZWVkIGEgd2F5IHRvIHRlbGwgQUZfVU5JWCB0byBwaWNrIGl0cyBvd24gbmFtZQogICAgICAgICAgICAgIyBsaWtlIEFGX0lORVQgcHJvdmlkZXMgcG9ydD09MC4KICAgICAgICAgICAgIGRpciA9IE5vbmUKLSAgICAgICAgICAgIGlmIG9zLm5hbWUgPT0gJ29zMic6Ci0gICAgICAgICAgICAgICAgZGlyID0gJ1xzb2NrZXQnCiAgICAgICAgICAgICBmbiA9IHRlbXBmaWxlLm1rdGVtcChwcmVmaXg9J3VuaXhfc29ja2V0LicsIGRpcj1kaXIpCi0gICAgICAgICAgICBpZiBvcy5uYW1lID09ICdvczInOgotICAgICAgICAgICAgICAgICMgQUZfVU5JWCBzb2NrZXQgbmFtZXMgb24gT1MvMiByZXF1aXJlIGEgc3BlY2lmaWMgcHJlZml4Ci0gICAgICAgICAgICAgICAgIyB3aGljaCBjYW4ndCBpbmNsdWRlIGEgZHJpdmUgbGV0dGVyIGFuZCBtdXN0IGFsc28gdXNlCi0gICAgICAgICAgICAgICAgIyBiYWNrc2xhc2hlcyBhcyBkaXJlY3Rvcnkgc2VwYXJhdG9ycwotICAgICAgICAgICAgICAgIGlmIGZuWzFdID09ICc6JzoKLSAgICAgICAgICAgICAgICAgICAgZm4gPSBmblsyOl0KLSAgICAgICAgICAgICAgICBpZiBmblswXSBpbiAob3Muc2VwLCBvcy5hbHRzZXApOgotICAgICAgICAgICAgICAgICAgICBmbiA9IGZuWzE6XQotICAgICAgICAgICAgICAgIGlmIG9zLnNlcCA9PSAnLyc6Ci0gICAgICAgICAgICAgICAgICAgIGZuID0gZm4ucmVwbGFjZShvcy5zZXAsIG9zLmFsdHNlcCkKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBmbiA9IGZuLnJlcGxhY2Uob3MuYWx0c2VwLCBvcy5zZXApCiAgICAgICAgICAgICBzZWxmLnRlc3RfZmlsZXMuYXBwZW5kKGZuKQogICAgICAgICAgICAgcmV0dXJuIGZuCiAKQEAgLTE1OSw2ICsxNDQsNyBAQAogICAgICAgICBzZXJ2ZXIuc2h1dGRvd24oKQogICAgICAgICB0LmpvaW4oKQogICAgICAgICBzZXJ2ZXIuc2VydmVyX2Nsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgtMSwgc2VydmVyLnNvY2tldC5maWxlbm8oKSkKICAgICAgICAgaWYgdmVyYm9zZTogcHJpbnQoImRvbmUiKQogCiAgICAgZGVmIHN0cmVhbV9leGFtaW5lKHNlbGYsIHByb3RvLCBhZGRyKToKQEAgLTMxNiwxMyArMzAyLDI5IEBACiAgICAgICAgICAgICB0LmpvaW4oKQogICAgICAgICAgICAgcy5zZXJ2ZXJfY2xvc2UoKQogCisgICAgZGVmIHRlc3RfdGNwc2VydmVyX2JpbmRfbGVhayhzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMjI0MzU6IHRoZSBzZXJ2ZXIgc29ja2V0IHdvdWxkbid0IGJlIGNsb3NlZCBpZiBiaW5kKCkvbGlzdGVuKCkKKyAgICAgICAgIyBmYWlsZWQuCisgICAgICAgICMgQ3JlYXRlIG1hbnkgc2VydmVycyBmb3Igd2hpY2ggYmluZCgpIHdpbGwgZmFpbCwgdG8gc2VlIGlmIHRoaXMgcmVzdWx0CisgICAgICAgICMgaW4gRkQgZXhoYXVzdGlvbi4KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTAyNCk6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IpOgorICAgICAgICAgICAgICAgIHNvY2tldHNlcnZlci5UQ1BTZXJ2ZXIoKEhPU1QsIC0xKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tldHNlcnZlci5TdHJlYW1SZXF1ZXN0SGFuZGxlcikKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIGlmIGltcC5sb2NrX2hlbGQoKToKLSAgICAgICAgIyBJZiB0aGUgaW1wb3J0IGxvY2sgaXMgaGVsZCwgdGhlIHRocmVhZHMgd2lsbCBoYW5nCi0gICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJjYW4ndCBydW4gd2hlbiBpbXBvcnQgbG9jayBpcyBoZWxkIikKIAotICAgIHRlc3Quc3VwcG9ydC5ydW5fdW5pdHRlc3QoU29ja2V0U2VydmVyVGVzdCkKK2NsYXNzIE1pc2NUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9hbGwoc2VsZik6CisgICAgICAgICMgb2JqZWN0cyBkZWZpbmVkIGluIHRoZSBtb2R1bGUgc2hvdWxkIGJlIGluIF9fYWxsX18KKyAgICAgICAgZXhwZWN0ZWQgPSBbXQorICAgICAgICBmb3IgbmFtZSBpbiBkaXIoc29ja2V0c2VydmVyKToKKyAgICAgICAgICAgIGlmIG5vdCBuYW1lLnN0YXJ0c3dpdGgoJ18nKToKKyAgICAgICAgICAgICAgICBtb2Rfb2JqZWN0ID0gZ2V0YXR0cihzb2NrZXRzZXJ2ZXIsIG5hbWUpCisgICAgICAgICAgICAgICAgaWYgZ2V0YXR0cihtb2Rfb2JqZWN0LCAnX19tb2R1bGVfXycsIE5vbmUpID09ICdzb2NrZXRzZXJ2ZXInOgorICAgICAgICAgICAgICAgICAgICBleHBlY3RlZC5hcHBlbmQobmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRDb3VudEVxdWFsKHNvY2tldHNlcnZlci5fX2FsbF9fLCBleHBlY3RlZCkKKwogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3NvdXJjZV9lbmNvZGluZy5weSBiL0xpYi90ZXN0L3Rlc3Rfc291cmNlX2VuY29kaW5nLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5YTdjNTYKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X3NvdXJjZV9lbmNvZGluZy5weQpAQCAtMCwwICsxLDE0NiBAQAorIyAtKi0gY29kaW5nOiBrb2k4LXIgLSotCisKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IFRFU1RGTiwgdW5saW5rLCB1bmxvYWQsIHJtdHJlZQoraW1wb3J0IGltcG9ydGxpYgoraW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgc3VicHJvY2VzcworCitjbGFzcyBTb3VyY2VFbmNvZGluZ1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfcGVwMjYzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgIvDJ1M/OIi5lbmNvZGUoInV0Zi04IiksCisgICAgICAgICAgICBiJ1x4ZDBceDlmXHhkMFx4YjhceGQxXHg4Mlx4ZDBceGJlXHhkMFx4YmQnCisgICAgICAgICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICJc8CIuZW5jb2RlKCJ1dGYtOCIpLAorICAgICAgICAgICAgYidcXFx4ZDBceDlmJworICAgICAgICApCisKKyAgICBkZWYgdGVzdF9jb21waWxlc3RyaW5nKHNlbGYpOgorICAgICAgICAjIHNlZSAjMTg4MgorICAgICAgICBjID0gY29tcGlsZShiIlxuIyBjb2Rpbmc6IHV0Zi04XG51ID0gJ1x4YzNceGIzJ1xuIiwgImR1bW15IiwgImV4ZWMiKQorICAgICAgICBkID0ge30KKyAgICAgICAgZXhlYyhjLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbJ3UnXSwgJ1x4ZjMnKQorCisgICAgZGVmIHRlc3RfaXNzdWUyMzAxKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBjb21waWxlKGIiIyBjb2Rpbmc6IGNwOTMyXG5wcmludCAnXHg5NFx4NGUnIiwgImR1bW15IiwgImV4ZWMiKQorICAgICAgICBleGNlcHQgU3ludGF4RXJyb3IgYXMgdjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodi50ZXh0LCAicHJpbnQgJ1x1NWU3NCdcbiIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoKQorCisgICAgZGVmIHRlc3RfaXNzdWU0NjI2KHNlbGYpOgorICAgICAgICBjID0gY29tcGlsZSgiIyBjb2Rpbmc9bGF0aW4tMVxuXHUwMGM2ID0gJ1x1MDBjNiciLCAiZHVtbXkiLCAiZXhlYyIpCisgICAgICAgIGQgPSB7fQorICAgICAgICBleGVjKGMsIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFsnXHhjNiddLCAnXHhjNicpCisKKyAgICBkZWYgdGVzdF9pc3N1ZTMyOTcoc2VsZik6CisgICAgICAgIGMgPSBjb21waWxlKCJhLCBiID0gJ1xVMDAwMTAxMEYnLCAnXFxVMDAwMTAxMEYnIiwgImR1bW15IiwgImV4ZWMiKQorICAgICAgICBkID0ge30KKyAgICAgICAgZXhlYyhjLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbJ2EnXSwgZFsnYiddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkWydhJ10pLCBsZW4oZFsnYiddKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhc2NpaShkWydhJ10pLCBhc2NpaShkWydiJ10pKQorCisgICAgZGVmIHRlc3RfaXNzdWU3ODIwKHNlbGYpOgorICAgICAgICAjIEVuc3VyZSB0aGF0IGNoZWNrX2JvbSgpIHJlc3RvcmVzIGFsbCBieXRlcyBpbiB0aGUgcmlnaHQgb3JkZXIgaWYKKyAgICAgICAgIyBjaGVja19ib20oKSBmYWlscyBpbiBweWRlYnVnIG1vZGU6IGEgYnVmZmVyIHN0YXJ0cyB3aXRoIHRoZSBmaXJzdAorICAgICAgICAjIGJ5dGUgb2YgYSB2YWxpZCBCT00sIGJ1dCBuZXh0IGJ5dGVzIGFyZSBkaWZmZXJlbnQKKworICAgICAgICAjIG9uZSBieXRlIGluIGNvbW1vbiB3aXRoIHRoZSBVVEYtMTYtTEUgQk9NCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yLCBldmFsLCBiJ1x4ZmZceDIwJykKKworICAgICAgICAjIHR3byBieXRlcyBpbiBjb21tb24gd2l0aCB0aGUgVVRGLTggQk9NCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yLCBldmFsLCBiJ1x4ZWZceGJiXHgyMCcpCisKKyAgICBkZWYgdGVzdF8yMDczMShzZWxmKToKKyAgICAgICAgc3ViID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29kaW5nMjA3MzEucHknKV0sCisgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICBlcnIgPSBzdWIuY29tbXVuaWNhdGUoKVsxXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1Yi5yZXR1cm5jb2RlLCAwKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKGInU3ludGF4RXJyb3InLCBlcnIpCisKKyAgICBkZWYgdGVzdF9lcnJvcl9tZXNzYWdlKHNlbGYpOgorICAgICAgICBjb21waWxlKGInIyAtKi0gY29kaW5nOiBpc28tODg1OS0xNSAtKi1cbicsICdkdW1teScsICdleGVjJykKKyAgICAgICAgY29tcGlsZShiJ1x4ZWZceGJiXHhiZlxuJywgJ2R1bW15JywgJ2V4ZWMnKQorICAgICAgICBjb21waWxlKGInXHhlZlx4YmJceGJmIyAtKi0gY29kaW5nOiB1dGYtOCAtKi1cbicsICdkdW1teScsICdleGVjJykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFN5bnRheEVycm9yLCAnZmFrZScpOgorICAgICAgICAgICAgY29tcGlsZShiJyMgLSotIGNvZGluZzogZmFrZSAtKi1cbicsICdkdW1teScsICdleGVjJykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFN5bnRheEVycm9yLCAnaXNvLTg4NTktMTUnKToKKyAgICAgICAgICAgIGNvbXBpbGUoYidceGVmXHhiYlx4YmYjIC0qLSBjb2Rpbmc6IGlzby04ODU5LTE1IC0qLVxuJywKKyAgICAgICAgICAgICAgICAgICAgJ2R1bW15JywgJ2V4ZWMnKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoU3ludGF4RXJyb3IsICdCT00nKToKKyAgICAgICAgICAgIGNvbXBpbGUoYidceGVmXHhiYlx4YmYjIC0qLSBjb2Rpbmc6IGlzby04ODU5LTE1IC0qLVxuJywKKyAgICAgICAgICAgICAgICAgICAgJ2R1bW15JywgJ2V4ZWMnKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoU3ludGF4RXJyb3IsICdmYWtlJyk6CisgICAgICAgICAgICBjb21waWxlKGInXHhlZlx4YmJceGJmIyAtKi0gY29kaW5nOiBmYWtlIC0qLVxuJywgJ2R1bW15JywgJ2V4ZWMnKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoU3ludGF4RXJyb3IsICdCT00nKToKKyAgICAgICAgICAgIGNvbXBpbGUoYidceGVmXHhiYlx4YmYjIC0qLSBjb2Rpbmc6IGZha2UgLSotXG4nLCAnZHVtbXknLCAnZXhlYycpCisKKyAgICBkZWYgdGVzdF9iYWRfY29kaW5nKHNlbGYpOgorICAgICAgICBtb2R1bGVfbmFtZSA9ICdiYWRfY29kaW5nJworICAgICAgICBzZWxmLnZlcmlmeV9iYWRfbW9kdWxlKG1vZHVsZV9uYW1lKQorCisgICAgZGVmIHRlc3RfYmFkX2NvZGluZzIoc2VsZik6CisgICAgICAgIG1vZHVsZV9uYW1lID0gJ2JhZF9jb2RpbmcyJworICAgICAgICBzZWxmLnZlcmlmeV9iYWRfbW9kdWxlKG1vZHVsZV9uYW1lKQorCisgICAgZGVmIHZlcmlmeV9iYWRfbW9kdWxlKHNlbGYsIG1vZHVsZV9uYW1lKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IsIF9faW1wb3J0X18sICd0ZXN0LicgKyBtb2R1bGVfbmFtZSkKKworICAgICAgICBwYXRoID0gb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKQorICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGguam9pbihwYXRoLCBtb2R1bGVfbmFtZSArICcucHknKQorICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICJyYiIpIGFzIGZwOgorICAgICAgICAgICAgYnl0ZXMgPSBmcC5yZWFkKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IsIGNvbXBpbGUsIGJ5dGVzLCBmaWxlbmFtZSwgJ2V4ZWMnKQorCisgICAgZGVmIHRlc3RfZXhlY192YWxpZF9jb2Rpbmcoc2VsZik6CisgICAgICAgIGQgPSB7fQorICAgICAgICBleGVjKGInIyBjb2Rpbmc6IGNwOTQ5XG5hID0gIlx4YWFceGE3IlxuJywgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkWydhJ10sICdcdTMwNDcnKQorCisgICAgZGVmIHRlc3RfZmlsZV9wYXJzZShzZWxmKToKKyAgICAgICAgIyBpc3N1ZTExMzQ6IGFsbCBlbmNvZGluZ3Mgb3V0c2lkZSBsYXRpbi0xIGFuZCB1dGYtOCBmYWlsIG9uCisgICAgICAgICMgbXVsdGlsaW5lIHN0cmluZ3MgYW5kIGxvbmcgbGluZXMgKD41MTIgY29sdW1ucykKKyAgICAgICAgdW5sb2FkKFRFU1RGTikKKyAgICAgICAgZmlsZW5hbWUgPSBURVNURk4gKyAiLnB5IgorICAgICAgICBmID0gb3BlbihmaWxlbmFtZSwgInciLCBlbmNvZGluZz0iY3AxMjUyIikKKyAgICAgICAgc3lzLnBhdGguaW5zZXJ0KDAsIG9zLmN1cmRpcikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUoIiMgLSotIGNvZGluZzogY3AxMjUyIC0qLVxuIikKKyAgICAgICAgICAgICAgICBmLndyaXRlKCInJydBIHNob3J0IHN0cmluZ1xuIikKKyAgICAgICAgICAgICAgICBmLndyaXRlKCInJydcbiIpCisgICAgICAgICAgICAgICAgZi53cml0ZSgiJ0EgdmVyeSBsb25nIHN0cmluZyAlcydcbiIgJSAoIlgiICogMTAwMCkpCisKKyAgICAgICAgICAgIGltcG9ydGxpYi5pbnZhbGlkYXRlX2NhY2hlcygpCisgICAgICAgICAgICBfX2ltcG9ydF9fKFRFU1RGTikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGRlbCBzeXMucGF0aFswXQorICAgICAgICAgICAgdW5saW5rKGZpbGVuYW1lKQorICAgICAgICAgICAgdW5saW5rKGZpbGVuYW1lICsgImMiKQorICAgICAgICAgICAgdW5saW5rKGZpbGVuYW1lICsgIm8iKQorICAgICAgICAgICAgdW5sb2FkKFRFU1RGTikKKyAgICAgICAgICAgIHJtdHJlZSgnX19weWNhY2hlX18nKQorCisgICAgZGVmIHRlc3RfZXJyb3JfZnJvbV9zdHJpbmcoc2VsZik6CisgICAgICAgICMgU2VlIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWU2Mjg5CisgICAgICAgIGlucHV0ID0gIiMgY29kaW5nOiBhc2NpaVxuXE57U05PV01BTn0iLmVuY29kZSgndXRmLTgnKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yKSBhcyBjOgorICAgICAgICAgICAgY29tcGlsZShpbnB1dCwgIjxzdHJpbmc+IiwgImV4ZWMiKQorICAgICAgICBleHBlY3RlZCA9ICInYXNjaWknIGNvZGVjIGNhbid0IGRlY29kZSBieXRlIDB4ZTIgaW4gcG9zaXRpb24gMTY6ICIgXAorICAgICAgICAgICAgICAgICAgICJvcmRpbmFsIG5vdCBpbiByYW5nZSgxMjgpIgorICAgICAgICBzZWxmLmFzc2VydFRydWUoYy5leGNlcHRpb24uYXJnc1swXS5zdGFydHN3aXRoKGV4cGVjdGVkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZz1jLmV4Y2VwdGlvbi5hcmdzWzBdKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3Nwd2QucHkgYi9MaWIvdGVzdC90ZXN0X3Nwd2QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmVhN2FiMQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3Rfc3B3ZC5weQpAQCAtMCwwICsxLDYwIEBACitpbXBvcnQgb3MKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CisKK3Nwd2QgPSBzdXBwb3J0LmltcG9ydF9tb2R1bGUoJ3Nwd2QnKQorCisKK0B1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICdnZXRldWlkJykgYW5kIG9zLmdldGV1aWQoKSA9PSAwLAorICAgICAgICAgICAgICAgICAgICAgJ3Jvb3QgcHJpdmlsZWdlcyByZXF1aXJlZCcpCitjbGFzcyBUZXN0U3B3ZFJvb3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfZ2V0c3BhbGwoc2VsZik6CisgICAgICAgIGVudHJpZXMgPSBzcHdkLmdldHNwYWxsKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGVudHJpZXMsIGxpc3QpCisgICAgICAgIGZvciBlbnRyeSBpbiBlbnRyaWVzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGVudHJ5LCBzcHdkLnN0cnVjdF9zcHdkKQorCisgICAgZGVmIHRlc3RfZ2V0c3BuYW0oc2VsZik6CisgICAgICAgIGVudHJpZXMgPSBzcHdkLmdldHNwYWxsKCkKKyAgICAgICAgaWYgbm90IGVudHJpZXM6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCdlbXB0eSBzaGFkb3cgcGFzc3dvcmQgZGF0YWJhc2UnKQorICAgICAgICByYW5kb21fbmFtZSA9IGVudHJpZXNbMF0uc3BfbmFtcAorICAgICAgICBlbnRyeSA9IHNwd2QuZ2V0c3BuYW0ocmFuZG9tX25hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShlbnRyeSwgc3B3ZC5zdHJ1Y3Rfc3B3ZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbnRyeS5zcF9uYW1wLCByYW5kb21fbmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbnRyeS5zcF9uYW1wLCBlbnRyeVswXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbnRyeS5zcF9uYW1wLCBlbnRyeS5zcF9uYW0pCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShlbnRyeS5zcF9wd2RwLCBzdHIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW50cnkuc3BfcHdkcCwgZW50cnlbMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW50cnkuc3BfcHdkcCwgZW50cnkuc3BfcHdkKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZW50cnkuc3BfbHN0Y2hnLCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW50cnkuc3BfbHN0Y2hnLCBlbnRyeVsyXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGVudHJ5LnNwX21pbiwgaW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVudHJ5LnNwX21pbiwgZW50cnlbM10pCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShlbnRyeS5zcF9tYXgsIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbnRyeS5zcF9tYXgsIGVudHJ5WzRdKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZW50cnkuc3Bfd2FybiwgaW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVudHJ5LnNwX3dhcm4sIGVudHJ5WzVdKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZW50cnkuc3BfaW5hY3QsIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbnRyeS5zcF9pbmFjdCwgZW50cnlbNl0pCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShlbnRyeS5zcF9leHBpcmUsIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbnRyeS5zcF9leHBpcmUsIGVudHJ5WzddKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZW50cnkuc3BfZmxhZywgaW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVudHJ5LnNwX2ZsYWcsIGVudHJ5WzhdKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yKSBhcyBjeDoKKyAgICAgICAgICAgIHNwd2QuZ2V0c3BuYW0oJ2ludmFsaWQgdXNlciBuYW1lJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoY3guZXhjZXB0aW9uKSwgIidnZXRzcG5hbSgpOiBuYW1lIG5vdCBmb3VuZCciKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNwd2QuZ2V0c3BuYW0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc3B3ZC5nZXRzcG5hbSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzcHdkLmdldHNwbmFtLCByYW5kb21fbmFtZSwgMCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYnl0ZXNfbmFtZSA9IG9zLmZzZW5jb2RlKHJhbmRvbV9uYW1lKQorICAgICAgICBleGNlcHQgVW5pY29kZUVuY29kZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzcHdkLmdldHNwbmFtLCBieXRlc19uYW1lKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3NzbC5weSBiL0xpYi90ZXN0L3Rlc3Rfc3NsLnB5CmluZGV4IGU1MmE3MWMuLmE0NDA1NGMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc3NsLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc3NsLnB5CkBAIC02LDYgKzYsNyBAQAogaW1wb3J0IHNvY2tldAogaW1wb3J0IHNlbGVjdAogaW1wb3J0IHRpbWUKK2ltcG9ydCBkYXRldGltZQogaW1wb3J0IGdjCiBpbXBvcnQgb3MKIGltcG9ydCBlcnJubwpAQCAtMjAsMTYgKzIxLDExIEBACiAKIHNzbCA9IHN1cHBvcnQuaW1wb3J0X21vZHVsZSgic3NsIikKIAotUFJPVE9DT0xTID0gWwotICAgIHNzbC5QUk9UT0NPTF9TU0x2MywKLSAgICBzc2wuUFJPVE9DT0xfU1NMdjIzLCBzc2wuUFJPVE9DT0xfVExTdjEKLV0KLWlmIGhhc2F0dHIoc3NsLCAnUFJPVE9DT0xfU1NMdjInKToKLSAgICBQUk9UT0NPTFMuYXBwZW5kKHNzbC5QUk9UT0NPTF9TU0x2MikKLQorUFJPVE9DT0xTID0gc29ydGVkKHNzbC5fUFJPVE9DT0xfTkFNRVMpCiBIT1NUID0gc3VwcG9ydC5IT1NUCiAKLWRhdGFfZmlsZSA9IGxhbWJkYSBuYW1lOiBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgbmFtZSkKK2RlZiBkYXRhX2ZpbGUoKm5hbWUpOgorICAgIHJldHVybiBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgKm5hbWUpCiAKICMgVGhlIGN1c3RvbSBrZXkgYW5kIGNlcnRpZmljYXRlIGZpbGVzIHVzZWQgaW4gdGVzdF9zc2wgYXJlIGdlbmVyYXRlZAogIyB1c2luZyBMaWIvdGVzdC9tYWtlX3NzbF9jZXJ0cy5weS4KQEAgLTQ3LDYgKzQzLDE3IEBACiBLRVlfUEFTU1dPUkQgPSAic29tZXBhc3MiCiBDQVBBVEggPSBkYXRhX2ZpbGUoImNhcGF0aCIpCiBCWVRFU19DQVBBVEggPSBvcy5mc2VuY29kZShDQVBBVEgpCitDQUZJTEVfTkVVUk9OSU8gPSBkYXRhX2ZpbGUoImNhcGF0aCIsICI0ZTEyOTVhMy4wIikKK0NBRklMRV9DQUNFUlQgPSBkYXRhX2ZpbGUoImNhcGF0aCIsICI1ZWQzNmY5OS4wIikKKworCisjIGVtcHR5IENSTAorQ1JMRklMRSA9IGRhdGFfZmlsZSgicmV2b2NhdGlvbi5jcmwiKQorCisjIFR3byBrZXlzIGFuZCBjZXJ0cyBzaWduZWQgYnkgdGhlIHNhbWUgQ0EgKGZvciBTTkkgdGVzdHMpCitTSUdORURfQ0VSVEZJTEUgPSBkYXRhX2ZpbGUoImtleWNlcnQzLnBlbSIpCitTSUdORURfQ0VSVEZJTEUyID0gZGF0YV9maWxlKCJrZXljZXJ0NC5wZW0iKQorU0lHTklOR19DQSA9IGRhdGFfZmlsZSgicHljYWNlcnQucGVtIikKIAogU1ZOX1BZVEhPTl9PUkdfUk9PVF9DRVJUID0gZGF0YV9maWxlKCJodHRwc19zdm5fcHl0aG9uX29yZ19yb290LnBlbSIpCiAKQEAgLTU3LDkgKzY0LDEwIEBACiBOT0tJQUNFUlQgPSBkYXRhX2ZpbGUoIm5va2lhLnBlbSIpCiBOVUxMQllURUNFUlQgPSBkYXRhX2ZpbGUoIm51bGxieXRlY2VydC5wZW0iKQogCi1ESEZJTEUgPSBkYXRhX2ZpbGUoImRoNTEyLnBlbSIpCitESEZJTEUgPSBkYXRhX2ZpbGUoImRoMTAyNC5wZW0iKQogQllURVNfREhGSUxFID0gb3MuZnNlbmNvZGUoREhGSUxFKQogCisKIGRlZiBoYW5kbGVfZXJyb3IocHJlZml4KToKICAgICBleGNfZm9ybWF0ID0gJyAnLmpvaW4odHJhY2ViYWNrLmZvcm1hdF9leGNlcHRpb24oKnN5cy5leGNfaW5mbygpKSkKICAgICBpZiBzdXBwb3J0LnZlcmJvc2U6CkBAIC03Myw2ICs4MSwyMyBAQAogICAgICMgMC45LjdoIG9yIGhpZ2hlcgogICAgIHJldHVybiBzc2wuT1BFTlNTTF9WRVJTSU9OX0lORk8gPj0gKDAsIDksIDcsIDgsIDE1KQogCitkZWYgaGF2ZV92ZXJpZnlfZmxhZ3MoKToKKyAgICAjIDAuOS44IG9yIGhpZ2hlcgorICAgIHJldHVybiBzc2wuT1BFTlNTTF9WRVJTSU9OX0lORk8gPj0gKDAsIDksIDgsIDAsIDE1KQorCitkZWYgYXNuMXRpbWUoY2VydF90aW1lKToKKyAgICAjIFNvbWUgdmVyc2lvbnMgb2YgT3BlblNTTCBpZ25vcmUgc2Vjb25kcywgc2VlICMxODIwNworICAgICMgMC45LjguaQorICAgIGlmIHNzbC5fT1BFTlNTTF9BUElfVkVSU0lPTiA9PSAoMCwgOSwgOCwgOSwgMTUpOgorICAgICAgICBmbXQgPSAiJWIgJWQgJUg6JU06JVMgJVkgR01UIgorICAgICAgICBkdCA9IGRhdGV0aW1lLmRhdGV0aW1lLnN0cnB0aW1lKGNlcnRfdGltZSwgZm10KQorICAgICAgICBkdCA9IGR0LnJlcGxhY2Uoc2Vjb25kPTApCisgICAgICAgIGNlcnRfdGltZSA9IGR0LnN0cmZ0aW1lKGZtdCkKKyAgICAgICAgIyAlZCBhZGRzIGxlYWRpbmcgemVybyBidXQgQVNOMV9USU1FX3ByaW50KCkgdXNlcyBsZWFkaW5nIHNwYWNlCisgICAgICAgIGlmIGNlcnRfdGltZVs0XSA9PSAiMCI6CisgICAgICAgICAgICBjZXJ0X3RpbWUgPSBjZXJ0X3RpbWVbOjRdICsgIiAiICsgY2VydF90aW1lWzU6XQorCisgICAgcmV0dXJuIGNlcnRfdGltZQogCiAjIElzc3VlICM5NDE1OiBVYnVudHUgaGlqYWNrcyB0aGVpciBPcGVuU1NMIGFuZCBmb3JjZWZ1bGx5IGRpc2FibGVzIFNTTHYyCiBkZWYgc2tpcF9pZl9icm9rZW5fdWJ1bnR1X3NzbChmdW5jKToKQEAgLTkwLDE0ICsxMTUsMTIgQEAKICAgICBlbHNlOgogICAgICAgICByZXR1cm4gZnVuYwogCituZWVkc19zbmkgPSB1bml0dGVzdC5za2lwVW5sZXNzKHNzbC5IQVNfU05JLCAiU05JIHN1cHBvcnQgbmVlZGVkIGZvciB0aGlzIHRlc3QiKQorCiAKIGNsYXNzIEJhc2ljU29ja2V0VGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3RfY29uc3RhbnRzKHNlbGYpOgotICAgICAgICAjc3NsLlBST1RPQ09MX1NTTHYyCi0gICAgICAgIHNzbC5QUk9UT0NPTF9TU0x2MjMKLSAgICAgICAgc3NsLlBST1RPQ09MX1NTTHYzCi0gICAgICAgIHNzbC5QUk9UT0NPTF9UTFN2MQogICAgICAgICBzc2wuQ0VSVF9OT05FCiAgICAgICAgIHNzbC5DRVJUX09QVElPTkFMCiAgICAgICAgIHNzbC5DRVJUX1JFUVVJUkVECkBAIC0xMzAsOCArMTUzLDkgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc3NsLlJBTkRfYnl0ZXMsIC01KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzc2wuUkFORF9wc2V1ZG9fYnl0ZXMsIC01KQogCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc3NsLlJBTkRfZWdkLCAxKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNzbC5SQU5EX2VnZCwgJ2ZvbycsIDEpCisgICAgICAgIGlmIGhhc2F0dHIoc3NsLCAnUkFORF9lZ2QnKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc3NsLlJBTkRfZWdkLCAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzc2wuUkFORF9lZ2QsICdmb28nLCAxKQogICAgICAgICBzc2wuUkFORF9hZGQoInRoaXMgaXMgYSByYW5kb20gc3RyaW5nIiwgNzUuMCkKIAogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKG9zLm5hbWUgPT0gJ3Bvc2l4JywgJ3JlcXVpcmVzIHBvc2l4JykKQEAgLTE3OSw4ICsyMDMsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAoKCdvcmdhbml6YXRpb25OYW1lJywgJ1B5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uJyksKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgnY29tbW9uTmFtZScsICdsb2NhbGhvc3QnKSwpKQogICAgICAgICAgICAgICAgICAgICAgICAgKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBbJ25vdEFmdGVyJ10sICdPY3QgIDUgMjM6MDE6NTYgMjAyMCBHTVQnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBbJ25vdEJlZm9yZSddLCAnT2N0ICA4IDIzOjAxOjU2IDIwMTAgR01UJykKKyAgICAgICAgIyBOb3RlIHRoZSBuZXh0IHRocmVlIGFzc2VydHMgd2lsbCBmYWlsIGlmIHRoZSBrZXlzIGFyZSByZWdlbmVyYXRlZAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBbJ25vdEFmdGVyJ10sIGFzbjF0aW1lKCdPY3QgIDUgMjM6MDE6NTYgMjAyMCBHTVQnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwWydub3RCZWZvcmUnXSwgYXNuMXRpbWUoJ09jdCAgOCAyMzowMTo1NiAyMDEwIEdNVCcpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBbJ3NlcmlhbE51bWJlciddLCAnRDdDNzM4MTkxOUFGQzI0RScpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocFsnc3ViamVjdCddLAogICAgICAgICAgICAgICAgICAgICAgICAgICgoKCdjb3VudHJ5TmFtZScsICdYWScpLCksCkBAIC0xOTgsNiArMjIzLDEyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgKCgnRE5TJywgJ3Byb2plY3RzLmRldmVsb3Blci5ub2tpYS5jb20nKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdETlMnLCAncHJvamVjdHMuZm9ydW0ubm9raWEuY29tJykpCiAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICMgZXh0cmEgT0NTUCBhbmQgQUlBIGZpZWxkcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBbJ09DU1AnXSwgKCdodHRwOi8vb2NzcC52ZXJpc2lnbi5jb20nLCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocFsnY2FJc3N1ZXJzJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgKCdodHRwOi8vU1ZSSW50bC1HMy1haWEudmVyaXNpZ24uY29tL1NWUkludGxHMy5jZXInLCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocFsnY3JsRGlzdHJpYnV0aW9uUG9pbnRzJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgKCdodHRwOi8vU1ZSSW50bC1HMy1jcmwudmVyaXNpZ24uY29tL1NWUkludGxHMy5jcmwnLCkpCiAKICAgICBkZWYgdGVzdF9wYXJzZV9jZXJ0X0NWRV8yMDEzXzQyMzgoc2VsZik6CiAgICAgICAgIHAgPSBzc2wuX3NzbC5fdGVzdF9kZWNvZGVfY2VydChOVUxMQllURUNFUlQpCkBAIC0yNTAsMjIgKzI4MSwyNiBAQAogICAgICAgICAjIFNvbWUgc2FuaXR5IGNoZWNrcyBmb2xsb3cKICAgICAgICAgIyA+PSAwLjkKICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwobiwgMHg5MDAwMDApCi0gICAgICAgICMgPCAyLjAKLSAgICAgICAgc2VsZi5hc3NlcnRMZXNzKG4sIDB4MjAwMDAwMDApCisgICAgICAgICMgPCAzLjAKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzKG4sIDB4MzAwMDAwMDApCiAgICAgICAgIG1ham9yLCBtaW5vciwgZml4LCBwYXRjaCwgc3RhdHVzID0gdAogICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChtYWpvciwgMCkKLSAgICAgICAgc2VsZi5hc3NlcnRMZXNzKG1ham9yLCAyKQorICAgICAgICBzZWxmLmFzc2VydExlc3MobWFqb3IsIDMpCiAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKG1pbm9yLCAwKQogICAgICAgICBzZWxmLmFzc2VydExlc3MobWlub3IsIDI1NikKICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoZml4LCAwKQogICAgICAgICBzZWxmLmFzc2VydExlc3MoZml4LCAyNTYpCiAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKHBhdGNoLCAwKQotICAgICAgICBzZWxmLmFzc2VydExlc3NFcXVhbChwYXRjaCwgMjYpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKHBhdGNoLCA2MykKICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoc3RhdHVzLCAwKQogICAgICAgICBzZWxmLmFzc2VydExlc3NFcXVhbChzdGF0dXMsIDE1KQotICAgICAgICAjIFZlcnNpb24gc3RyaW5nIGFzIHJldHVybmVkIGJ5IE9wZW5TU0wsIHRoZSBmb3JtYXQgbWlnaHQgY2hhbmdlCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLnN0YXJ0c3dpdGgoIk9wZW5TU0wgezpkfS57OmR9Lns6ZH0iLmZvcm1hdChtYWpvciwgbWlub3IsIGZpeCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgKHMsIHQpKQorICAgICAgICAjIFZlcnNpb24gc3RyaW5nIGFzIHJldHVybmVkIGJ5IHtPcGVuLExpYnJlfVNTTCwgdGhlIGZvcm1hdCBtaWdodCBjaGFuZ2UKKyAgICAgICAgaWYgIkxpYnJlU1NMIiBpbiBzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMuc3RhcnRzd2l0aCgiTGlicmVTU0wgezpkfS57OmR9Ii5mb3JtYXQobWFqb3IsIG1pbm9yKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHMsIHQpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMuc3RhcnRzd2l0aCgiT3BlblNTTCB7OmR9Lns6ZH0uezpkfSIuZm9ybWF0KG1ham9yLCBtaW5vciwgZml4KSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHMsIHQpKQogCiAgICAgQHN1cHBvcnQuY3B5dGhvbl9vbmx5CiAgICAgZGVmIHRlc3RfcmVmY3ljbGUoc2VsZik6CkBAIC0yODAsMTUgKzMxNSwxNSBAQAogCiAgICAgZGVmIHRlc3Rfd3JhcHBlZF91bmNvbm5lY3RlZChzZWxmKToKICAgICAgICAgIyBNZXRob2RzIG9uIGFuIHVuY29ubmVjdGVkIFNTTFNvY2tldCBwcm9wYWdhdGUgdGhlIG9yaWdpbmFsCi0gICAgICAgICMgc29ja2V0LmVycm9yIHJhaXNlIGJ5IHRoZSB1bmRlcmx5aW5nIHNvY2tldCBvYmplY3QuCisgICAgICAgICMgT1NFcnJvciByYWlzZSBieSB0aGUgdW5kZXJseWluZyBzb2NrZXQgb2JqZWN0LgogICAgICAgICBzID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCkKICAgICAgICAgd2l0aCBzc2wud3JhcF9zb2NrZXQocykgYXMgc3M6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IsIHNzLnJlY3YsIDEpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IsIHNzLnJlY3ZfaW50bywgYnl0ZWFycmF5KGIneCcpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCBzcy5yZWN2ZnJvbSwgMSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgc3MucmVjdmZyb21faW50bywgYnl0ZWFycmF5KGIneCcpLCAxKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCBzcy5zZW5kLCBiJ3gnKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCBzcy5zZW5kdG8sIGIneCcsICgnMC4wLjAuMCcsIDApKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc3MucmVjdiwgMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNzLnJlY3ZfaW50bywgYnl0ZWFycmF5KGIneCcpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc3MucmVjdmZyb20sIDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBzcy5yZWN2ZnJvbV9pbnRvLCBieXRlYXJyYXkoYid4JyksIDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBzcy5zZW5kLCBiJ3gnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc3Muc2VuZHRvLCBiJ3gnLCAoJzAuMC4wLjAnLCAwKSkKIAogICAgIGRlZiB0ZXN0X3RpbWVvdXQoc2VsZik6CiAgICAgICAgICMgSXNzdWUgIzg1MjQ6IHdoZW4gY3JlYXRpbmcgYW4gU1NMIHNvY2tldCwgdGhlIHRpbWVvdXQgb2YgdGhlCkBAIC0zMTMsMTUgKzM0OCwxNSBAQAogICAgICAgICB3aXRoIHNzbC53cmFwX3NvY2tldChzb2NrLCBzZXJ2ZXJfc2lkZT1UcnVlLCBjZXJ0ZmlsZT1DRVJURklMRSkgYXMgczoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwgImNhbid0IGNvbm5lY3QgaW4gc2VydmVyLXNpZGUgbW9kZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLmNvbm5lY3QsIChIT1NULCA4MDgwKSkKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yKSBhcyBjbToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKSBhcyBjbToKICAgICAgICAgICAgIHdpdGggc29ja2V0LnNvY2tldCgpIGFzIHNvY2s6CiAgICAgICAgICAgICAgICAgc3NsLndyYXBfc29ja2V0KHNvY2ssIGNlcnRmaWxlPVdST05HQ0VSVCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24uZXJybm8sIGVycm5vLkVOT0VOVCkKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yKSBhcyBjbToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKSBhcyBjbToKICAgICAgICAgICAgIHdpdGggc29ja2V0LnNvY2tldCgpIGFzIHNvY2s6CiAgICAgICAgICAgICAgICAgc3NsLndyYXBfc29ja2V0KHNvY2ssIGNlcnRmaWxlPUNFUlRGSUxFLCBrZXlmaWxlPVdST05HQ0VSVCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24uZXJybm8sIGVycm5vLkVOT0VOVCkKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yKSBhcyBjbToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKSBhcyBjbToKICAgICAgICAgICAgIHdpdGggc29ja2V0LnNvY2tldCgpIGFzIHNvY2s6CiAgICAgICAgICAgICAgICAgc3NsLndyYXBfc29ja2V0KHNvY2ssIGNlcnRmaWxlPVdST05HQ0VSVCwga2V5ZmlsZT1XUk9OR0NFUlQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLmVycm5vLCBlcnJuby5FTk9FTlQpCkBAIC00OTMsNiArNTI4LDExNCBAQAogICAgICAgICAgICAgc3VwcG9ydC5nY19jb2xsZWN0KCkKICAgICAgICAgc2VsZi5hc3NlcnRJbihyLCBzdHIoY20ud2FybmluZy5hcmdzWzBdKSkKIAorICAgIGRlZiB0ZXN0X2dldF9kZWZhdWx0X3ZlcmlmeV9wYXRocyhzZWxmKToKKyAgICAgICAgcGF0aHMgPSBzc2wuZ2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocGF0aHMpLCA2KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocGF0aHMsIHNzbC5EZWZhdWx0VmVyaWZ5UGF0aHMpCisKKyAgICAgICAgd2l0aCBzdXBwb3J0LkVudmlyb25tZW50VmFyR3VhcmQoKSBhcyBlbnY6CisgICAgICAgICAgICBlbnZbIlNTTF9DRVJUX0RJUiJdID0gQ0FQQVRICisgICAgICAgICAgICBlbnZbIlNTTF9DRVJUX0ZJTEUiXSA9IENFUlRGSUxFCisgICAgICAgICAgICBwYXRocyA9IHNzbC5nZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHMoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXRocy5jYWZpbGUsIENFUlRGSUxFKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXRocy5jYXBhdGgsIENBUEFUSCkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiLCAiV2luZG93cyBzcGVjaWZpYyIpCisgICAgZGVmIHRlc3RfZW51bV9jZXJ0aWZpY2F0ZXMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzc2wuZW51bV9jZXJ0aWZpY2F0ZXMoIkNBIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzc2wuZW51bV9jZXJ0aWZpY2F0ZXMoIlJPT1QiKSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNzbC5lbnVtX2NlcnRpZmljYXRlcykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoV2luZG93c0Vycm9yLCBzc2wuZW51bV9jZXJ0aWZpY2F0ZXMsICIiKQorCisgICAgICAgIHRydXN0X29pZHMgPSBzZXQoKQorICAgICAgICBmb3Igc3RvcmVuYW1lIGluICgiQ0EiLCAiUk9PVCIpOgorICAgICAgICAgICAgc3RvcmUgPSBzc2wuZW51bV9jZXJ0aWZpY2F0ZXMoc3RvcmVuYW1lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN0b3JlLCBsaXN0KQorICAgICAgICAgICAgZm9yIGVsZW1lbnQgaW4gc3RvcmU6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGVsZW1lbnQsIHR1cGxlKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGVsZW1lbnQpLCAzKQorICAgICAgICAgICAgICAgIGNlcnQsIGVuYywgdHJ1c3QgPSBlbGVtZW50CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGNlcnQsIGJ5dGVzKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZW5jLCB7Ing1MDlfYXNuIiwgInBrY3NfN19hc24ifSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodHJ1c3QsIChzZXQsIGJvb2wpKQorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodHJ1c3QsIHNldCk6CisgICAgICAgICAgICAgICAgICAgIHRydXN0X29pZHMudXBkYXRlKHRydXN0KQorCisgICAgICAgIHNlcnZlckF1dGggPSAiMS4zLjYuMS41LjUuNy4zLjEiCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oc2VydmVyQXV0aCwgdHJ1c3Rfb2lkcykKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiLCAiV2luZG93cyBzcGVjaWZpYyIpCisgICAgZGVmIHRlc3RfZW51bV9jcmxzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3NsLmVudW1fY3JscygiQ0EiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzc2wuZW51bV9jcmxzKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhXaW5kb3dzRXJyb3IsIHNzbC5lbnVtX2NybHMsICIiKQorCisgICAgICAgIGNybHMgPSBzc2wuZW51bV9jcmxzKCJDQSIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShjcmxzLCBsaXN0KQorICAgICAgICBmb3IgZWxlbWVudCBpbiBjcmxzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGVsZW1lbnQsIHR1cGxlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZWxlbWVudCksIDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZWxlbWVudFswXSwgYnl0ZXMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGVsZW1lbnRbMV0sIHsieDUwOV9hc24iLCAicGtjc183X2FzbiJ9KQorCisKKyAgICBkZWYgdGVzdF9hc24xb2JqZWN0KHNlbGYpOgorICAgICAgICBleHBlY3RlZCA9ICgxMjksICdzZXJ2ZXJBdXRoJywgJ1RMUyBXZWIgU2VydmVyIEF1dGhlbnRpY2F0aW9uJywKKyAgICAgICAgICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuMy4xJykKKworICAgICAgICB2YWwgPSBzc2wuX0FTTjFPYmplY3QoJzEuMy42LjEuNS41LjcuMy4xJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWwsIGV4cGVjdGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbC5uaWQsIDEyOSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWwuc2hvcnRuYW1lLCAnc2VydmVyQXV0aCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsLmxvbmduYW1lLCAnVExTIFdlYiBTZXJ2ZXIgQXV0aGVudGljYXRpb24nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbC5vaWQsICcxLjMuNi4xLjUuNS43LjMuMScpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh2YWwsIHNzbC5fQVNOMU9iamVjdCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc3NsLl9BU04xT2JqZWN0LCAnc2VydmVyQXV0aCcpCisKKyAgICAgICAgdmFsID0gc3NsLl9BU04xT2JqZWN0LmZyb21uaWQoMTI5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbCwgZXhwZWN0ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh2YWwsIHNzbC5fQVNOMU9iamVjdCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc3NsLl9BU04xT2JqZWN0LmZyb21uaWQsIC0xKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwgInVua25vd24gTklEIDEwMDAwMCIpOgorICAgICAgICAgICAgc3NsLl9BU04xT2JqZWN0LmZyb21uaWQoMTAwMDAwKQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxMDAwKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBvYmogPSBzc2wuX0FTTjFPYmplY3QuZnJvbW5pZChpKQorICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uob2JqLm5pZCwgaW50KQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShvYmouc2hvcnRuYW1lLCBzdHIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG9iai5sb25nbmFtZSwgc3RyKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShvYmoub2lkLCAoc3RyLCB0eXBlKE5vbmUpKSkKKworICAgICAgICB2YWwgPSBzc2wuX0FTTjFPYmplY3QuZnJvbW5hbWUoJ1RMUyBXZWIgU2VydmVyIEF1dGhlbnRpY2F0aW9uJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWwsIGV4cGVjdGVkKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodmFsLCBzc2wuX0FTTjFPYmplY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3NsLl9BU04xT2JqZWN0LmZyb21uYW1lKCdzZXJ2ZXJBdXRoJyksIGV4cGVjdGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNzbC5fQVNOMU9iamVjdC5mcm9tbmFtZSgnMS4zLjYuMS41LjUuNy4zLjEnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsICJ1bmtub3duIG9iamVjdCAnc2VydmVyYXV0aCciKToKKyAgICAgICAgICAgIHNzbC5fQVNOMU9iamVjdC5mcm9tbmFtZSgnc2VydmVyYXV0aCcpCisKKyAgICBkZWYgdGVzdF9wdXJwb3NlX2VudW0oc2VsZik6CisgICAgICAgIHZhbCA9IHNzbC5fQVNOMU9iamVjdCgnMS4zLjYuMS41LjUuNy4zLjEnKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3NsLlB1cnBvc2UuU0VSVkVSX0FVVEgsIHNzbC5fQVNOMU9iamVjdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzc2wuUHVycG9zZS5TRVJWRVJfQVVUSCwgdmFsKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNzbC5QdXJwb3NlLlNFUlZFUl9BVVRILm5pZCwgMTI5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNzbC5QdXJwb3NlLlNFUlZFUl9BVVRILnNob3J0bmFtZSwgJ3NlcnZlckF1dGgnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNzbC5QdXJwb3NlLlNFUlZFUl9BVVRILm9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjMuMScpCisKKyAgICAgICAgdmFsID0gc3NsLl9BU04xT2JqZWN0KCcxLjMuNi4xLjUuNS43LjMuMicpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzc2wuUHVycG9zZS5DTElFTlRfQVVUSCwgc3NsLl9BU04xT2JqZWN0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNzbC5QdXJwb3NlLkNMSUVOVF9BVVRILCB2YWwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3NsLlB1cnBvc2UuQ0xJRU5UX0FVVEgubmlkLCAxMzApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3NsLlB1cnBvc2UuQ0xJRU5UX0FVVEguc2hvcnRuYW1lLCAnY2xpZW50QXV0aCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3NsLlB1cnBvc2UuQ0xJRU5UX0FVVEgub2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuMy4yJykKKwogICAgIGRlZiB0ZXN0X3Vuc3VwcG9ydGVkX2R0bHMoc2VsZik6CiAgICAgICAgIHMgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19ER1JBTSkKICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHMuY2xvc2UpCkBAIC01MDksMTEgKzY1Miw4IEBACiAKICAgICBAc2tpcF9pZl9icm9rZW5fdWJ1bnR1X3NzbAogICAgIGRlZiB0ZXN0X2NvbnN0cnVjdG9yKHNlbGYpOgotICAgICAgICBpZiBoYXNhdHRyKHNzbCwgJ1BST1RPQ09MX1NTTHYyJyk6Ci0gICAgICAgICAgICBjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfU1NMdjIpCi0gICAgICAgIGN0eCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9TU0x2MjMpCi0gICAgICAgIGN0eCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9TU0x2MykKLSAgICAgICAgY3R4ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQorICAgICAgICBmb3IgcHJvdG9jb2wgaW4gUFJPVE9DT0xTOgorICAgICAgICAgICAgc3NsLlNTTENvbnRleHQocHJvdG9jb2wpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc3NsLlNTTENvbnRleHQpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNzbC5TU0xDb250ZXh0LCAtMSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc3NsLlNTTENvbnRleHQsIDQyKQpAQCAtNTM0LDEyICs2NzQsMTIgQEAKICAgICBAc2tpcF9pZl9icm9rZW5fdWJ1bnR1X3NzbAogICAgIGRlZiB0ZXN0X29wdGlvbnMoc2VsZik6CiAgICAgICAgIGN0eCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MSkKLSAgICAgICAgIyBPUF9BTEwgfCBPUF9OT19TU0x2MiBpcyB0aGUgZGVmYXVsdCB2YWx1ZQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNzbC5PUF9BTEwgfCBzc2wuT1BfTk9fU1NMdjIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY3R4Lm9wdGlvbnMpCi0gICAgICAgIGN0eC5vcHRpb25zIHw9IHNzbC5PUF9OT19TU0x2MworICAgICAgICAjIE9QX0FMTCB8IE9QX05PX1NTTHYyIHwgT1BfTk9fU1NMdjMgaXMgdGhlIGRlZmF1bHQgdmFsdWUKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzc2wuT1BfQUxMIHwgc3NsLk9QX05PX1NTTHYyIHwgc3NsLk9QX05PX1NTTHYzLAogICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5vcHRpb25zKQorICAgICAgICBjdHgub3B0aW9ucyB8PSBzc2wuT1BfTk9fVExTdjEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzc2wuT1BfQUxMIHwgc3NsLk9QX05PX1NTTHYyIHwgc3NsLk9QX05PX1NTTHYzIHwgc3NsLk9QX05PX1RMU3YxLAorICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5vcHRpb25zKQogICAgICAgICBpZiBjYW5fY2xlYXJfb3B0aW9ucygpOgogICAgICAgICAgICAgY3R4Lm9wdGlvbnMgPSAoY3R4Lm9wdGlvbnMgJiB+c3NsLk9QX05PX1NTTHYyKSB8IHNzbC5PUF9OT19UTFN2MQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzc2wuT1BfQUxMIHwgc3NsLk9QX05PX1RMU3YxIHwgc3NsLk9QX05PX1NTTHYzLApAQCAtNTUwLDcgKzY5MCw3IEBACiAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgogICAgICAgICAgICAgICAgIGN0eC5vcHRpb25zID0gMAogCi0gICAgZGVmIHRlc3RfdmVyaWZ5KHNlbGYpOgorICAgIGRlZiB0ZXN0X3ZlcmlmeV9tb2RlKHNlbGYpOgogICAgICAgICBjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCiAgICAgICAgICMgRGVmYXVsdCB2YWx1ZQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC52ZXJpZnlfbW9kZSwgc3NsLkNFUlRfTk9ORSkKQEAgLTU2NSwxMyArNzA1LDMzIEBACiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CiAgICAgICAgICAgICBjdHgudmVyaWZ5X21vZGUgPSA0MgogCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGF2ZV92ZXJpZnlfZmxhZ3MoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAidmVyaWZ5X2ZsYWdzIG5lZWQgT3BlblNTTCA+IDAuOS44IikKKyAgICBkZWYgdGVzdF92ZXJpZnlfZmxhZ3Moc2VsZik6CisgICAgICAgIGN0eCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MSkKKyAgICAgICAgIyBkZWZhdWx0IHZhbHVlCisgICAgICAgIHRmID0gZ2V0YXR0cihzc2wsICJWRVJJRllfWDUwOV9UUlVTVEVEX0ZJUlNUIiwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHgudmVyaWZ5X2ZsYWdzLCBzc2wuVkVSSUZZX0RFRkFVTFQgfCB0ZikKKyAgICAgICAgY3R4LnZlcmlmeV9mbGFncyA9IHNzbC5WRVJJRllfQ1JMX0NIRUNLX0xFQUYKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHgudmVyaWZ5X2ZsYWdzLCBzc2wuVkVSSUZZX0NSTF9DSEVDS19MRUFGKQorICAgICAgICBjdHgudmVyaWZ5X2ZsYWdzID0gc3NsLlZFUklGWV9DUkxfQ0hFQ0tfQ0hBSU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHgudmVyaWZ5X2ZsYWdzLCBzc2wuVkVSSUZZX0NSTF9DSEVDS19DSEFJTikKKyAgICAgICAgY3R4LnZlcmlmeV9mbGFncyA9IHNzbC5WRVJJRllfREVGQVVMVAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC52ZXJpZnlfZmxhZ3MsIHNzbC5WRVJJRllfREVGQVVMVCkKKyAgICAgICAgIyBzdXBwb3J0cyBhbnkgdmFsdWUKKyAgICAgICAgY3R4LnZlcmlmeV9mbGFncyA9IHNzbC5WRVJJRllfQ1JMX0NIRUNLX0xFQUYgfCBzc2wuVkVSSUZZX1g1MDlfU1RSSUNUCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LnZlcmlmeV9mbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICBzc2wuVkVSSUZZX0NSTF9DSEVDS19MRUFGIHwgc3NsLlZFUklGWV9YNTA5X1NUUklDVCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgY3R4LnZlcmlmeV9mbGFncyA9IE5vbmUKKwogICAgIGRlZiB0ZXN0X2xvYWRfY2VydF9jaGFpbihzZWxmKToKICAgICAgICAgY3R4ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQogICAgICAgICAjIENvbWJpbmVkIGtleSBhbmQgY2VydCBpbiBhIHNpbmdsZSBmaWxlCi0gICAgICAgIGN0eC5sb2FkX2NlcnRfY2hhaW4oQ0VSVEZJTEUpCisgICAgICAgIGN0eC5sb2FkX2NlcnRfY2hhaW4oQ0VSVEZJTEUsIGtleWZpbGU9Tm9uZSkKICAgICAgICAgY3R4LmxvYWRfY2VydF9jaGFpbihDRVJURklMRSwga2V5ZmlsZT1DRVJURklMRSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjdHgubG9hZF9jZXJ0X2NoYWluLCBrZXlmaWxlPUNFUlRGSUxFKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IpIGFzIGNtOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpIGFzIGNtOgogICAgICAgICAgICAgY3R4LmxvYWRfY2VydF9jaGFpbihXUk9OR0NFUlQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLmVycm5vLCBlcnJuby5FTk9FTlQpCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChzc2wuU1NMRXJyb3IsICJQRU0gbGliIik6CkBAIC02NTUsOCArODE1LDggQEAKICAgICAgICAgY3R4LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhCWVRFU19DRVJURklMRSkKICAgICAgICAgY3R4LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhjYWZpbGU9QllURVNfQ0VSVEZJTEUsIGNhcGF0aD1Ob25lKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGN0eC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY3R4LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucywgTm9uZSwgTm9uZSkKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yKSBhcyBjbToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjdHgubG9hZF92ZXJpZnlfbG9jYXRpb25zLCBOb25lLCBOb25lLCBOb25lKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpIGFzIGNtOgogICAgICAgICAgICAgY3R4LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhXUk9OR0NFUlQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLmVycm5vLCBlcnJuby5FTk9FTlQpCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChzc2wuU1NMRXJyb3IsICJQRU0gbGliIik6CkBAIC02NjcsNiArODI3LDY0IEBACiAgICAgICAgICMgSXNzdWUgIzEwOTg5OiBjcmFzaCBpZiB0aGUgc2Vjb25kIGFyZ3VtZW50IHR5cGUgaXMgaW52YWxpZAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGN0eC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMsIE5vbmUsIFRydWUpCiAKKyAgICBkZWYgdGVzdF9sb2FkX3ZlcmlmeV9jYWRhdGEoc2VsZik6CisgICAgICAgICMgdGVzdCBjYWRhdGEKKyAgICAgICAgd2l0aCBvcGVuKENBRklMRV9DQUNFUlQpIGFzIGY6CisgICAgICAgICAgICBjYWNlcnRfcGVtID0gZi5yZWFkKCkKKyAgICAgICAgY2FjZXJ0X2RlciA9IHNzbC5QRU1fY2VydF90b19ERVJfY2VydChjYWNlcnRfcGVtKQorICAgICAgICB3aXRoIG9wZW4oQ0FGSUxFX05FVVJPTklPKSBhcyBmOgorICAgICAgICAgICAgbmV1cm9uaW9fcGVtID0gZi5yZWFkKCkKKyAgICAgICAgbmV1cm9uaW9fZGVyID0gc3NsLlBFTV9jZXJ0X3RvX0RFUl9jZXJ0KG5ldXJvbmlvX3BlbSkKKworICAgICAgICAjIHRlc3QgUEVNCisgICAgICAgIGN0eCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHguY2VydF9zdG9yZV9zdGF0cygpWyJ4NTA5X2NhIl0sIDApCisgICAgICAgIGN0eC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoY2FkYXRhPWNhY2VydF9wZW0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LmNlcnRfc3RvcmVfc3RhdHMoKVsieDUwOV9jYSJdLCAxKQorICAgICAgICBjdHgubG9hZF92ZXJpZnlfbG9jYXRpb25zKGNhZGF0YT1uZXVyb25pb19wZW0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LmNlcnRfc3RvcmVfc3RhdHMoKVsieDUwOV9jYSJdLCAyKQorICAgICAgICAjIGNlcnQgYWxyZWFkeSBpbiBoYXNoIHRhYmxlCisgICAgICAgIGN0eC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoY2FkYXRhPW5ldXJvbmlvX3BlbSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHguY2VydF9zdG9yZV9zdGF0cygpWyJ4NTA5X2NhIl0sIDIpCisKKyAgICAgICAgIyBjb21iaW5lZAorICAgICAgICBjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgIGNvbWJpbmVkID0gIlxuIi5qb2luKChjYWNlcnRfcGVtLCBuZXVyb25pb19wZW0pKQorICAgICAgICBjdHgubG9hZF92ZXJpZnlfbG9jYXRpb25zKGNhZGF0YT1jb21iaW5lZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHguY2VydF9zdG9yZV9zdGF0cygpWyJ4NTA5X2NhIl0sIDIpCisKKyAgICAgICAgIyB3aXRoIGp1bmsgYXJvdW5kIHRoZSBjZXJ0cworICAgICAgICBjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgIGNvbWJpbmVkID0gWyJoZWFkIiwgY2FjZXJ0X3BlbSwgIm90aGVyIiwgbmV1cm9uaW9fcGVtLCAiYWdhaW4iLAorICAgICAgICAgICAgICAgICAgICBuZXVyb25pb19wZW0sICJ0YWlsIl0KKyAgICAgICAgY3R4LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhjYWRhdGE9IlxuIi5qb2luKGNvbWJpbmVkKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHguY2VydF9zdG9yZV9zdGF0cygpWyJ4NTA5X2NhIl0sIDIpCisKKyAgICAgICAgIyB0ZXN0IERFUgorICAgICAgICBjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgIGN0eC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoY2FkYXRhPWNhY2VydF9kZXIpCisgICAgICAgIGN0eC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoY2FkYXRhPW5ldXJvbmlvX2RlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHguY2VydF9zdG9yZV9zdGF0cygpWyJ4NTA5X2NhIl0sIDIpCisgICAgICAgICMgY2VydCBhbHJlYWR5IGluIGhhc2ggdGFibGUKKyAgICAgICAgY3R4LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhjYWRhdGE9Y2FjZXJ0X2RlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHguY2VydF9zdG9yZV9zdGF0cygpWyJ4NTA5X2NhIl0sIDIpCisKKyAgICAgICAgIyBjb21iaW5lZAorICAgICAgICBjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgIGNvbWJpbmVkID0gYiIiLmpvaW4oKGNhY2VydF9kZXIsIG5ldXJvbmlvX2RlcikpCisgICAgICAgIGN0eC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoY2FkYXRhPWNvbWJpbmVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC5jZXJ0X3N0b3JlX3N0YXRzKClbIng1MDlfY2EiXSwgMikKKworICAgICAgICAjIGVycm9yIGNhc2VzCisgICAgICAgIGN0eCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjdHgubG9hZF92ZXJpZnlfbG9jYXRpb25zLCBjYWRhdGE9b2JqZWN0KQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChzc2wuU1NMRXJyb3IsICJubyBzdGFydCBsaW5lIik6CisgICAgICAgICAgICBjdHgubG9hZF92ZXJpZnlfbG9jYXRpb25zKGNhZGF0YT0iYnJva2VuIikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KHNzbC5TU0xFcnJvciwgIm5vdCBlbm91Z2ggZGF0YSIpOgorICAgICAgICAgICAgY3R4LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhjYWRhdGE9YiJicm9rZW4iKQorCisKICAgICBkZWYgdGVzdF9sb2FkX2RoX3BhcmFtcyhzZWxmKToKICAgICAgICAgY3R4ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQogICAgICAgICBjdHgubG9hZF9kaF9wYXJhbXMoREhGSUxFKQpAQCAtNzE0LDYgKzkzMiwyMDEgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY3R4LnNldF9lY2RoX2N1cnZlLCAiZm9vIikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY3R4LnNldF9lY2RoX2N1cnZlLCBiImZvbyIpCiAKKyAgICBAbmVlZHNfc25pCisgICAgZGVmIHRlc3Rfc25pX2NhbGxiYWNrKHNlbGYpOgorICAgICAgICBjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisKKyAgICAgICAgIyBzZXRfc2VydmVybmFtZV9jYWxsYmFjayBleHBlY3RzIGEgY2FsbGFibGUsIG9yIE5vbmUKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjdHguc2V0X3NlcnZlcm5hbWVfY2FsbGJhY2spCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY3R4LnNldF9zZXJ2ZXJuYW1lX2NhbGxiYWNrLCA0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGN0eC5zZXRfc2VydmVybmFtZV9jYWxsYmFjaywgIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY3R4LnNldF9zZXJ2ZXJuYW1lX2NhbGxiYWNrLCBjdHgpCisKKyAgICAgICAgZGVmIGR1bW15Y2FsbGJhY2soc29jaywgc2VydmVybmFtZSwgY3R4KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY3R4LnNldF9zZXJ2ZXJuYW1lX2NhbGxiYWNrKE5vbmUpCisgICAgICAgIGN0eC5zZXRfc2VydmVybmFtZV9jYWxsYmFjayhkdW1teWNhbGxiYWNrKQorCisgICAgQG5lZWRzX3NuaQorICAgIGRlZiB0ZXN0X3NuaV9jYWxsYmFja19yZWZjeWNsZShzZWxmKToKKyAgICAgICAgIyBSZWZlcmVuY2UgY3ljbGVzIHRocm91Z2ggdGhlIHNlcnZlcm5hbWUgY2FsbGJhY2sgYXJlIGRldGVjdGVkCisgICAgICAgICMgYW5kIGNsZWFyZWQuCisgICAgICAgIGN0eCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MSkKKyAgICAgICAgZGVmIGR1bW15Y2FsbGJhY2soc29jaywgc2VydmVybmFtZSwgY3R4LCBjeWNsZT1jdHgpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjdHguc2V0X3NlcnZlcm5hbWVfY2FsbGJhY2soZHVtbXljYWxsYmFjaykKKyAgICAgICAgd3IgPSB3ZWFrcmVmLnJlZihjdHgpCisgICAgICAgIGRlbCBjdHgsIGR1bW15Y2FsbGJhY2sKKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMod3IoKSwgTm9uZSkKKworICAgIGRlZiB0ZXN0X2NlcnRfc3RvcmVfc3RhdHMoc2VsZik6CisgICAgICAgIGN0eCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHguY2VydF9zdG9yZV9zdGF0cygpLAorICAgICAgICAgICAgeyd4NTA5X2NhJzogMCwgJ2NybCc6IDAsICd4NTA5JzogMH0pCisgICAgICAgIGN0eC5sb2FkX2NlcnRfY2hhaW4oQ0VSVEZJTEUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LmNlcnRfc3RvcmVfc3RhdHMoKSwKKyAgICAgICAgICAgIHsneDUwOV9jYSc6IDAsICdjcmwnOiAwLCAneDUwOSc6IDB9KQorICAgICAgICBjdHgubG9hZF92ZXJpZnlfbG9jYXRpb25zKENFUlRGSUxFKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC5jZXJ0X3N0b3JlX3N0YXRzKCksCisgICAgICAgICAgICB7J3g1MDlfY2EnOiAwLCAnY3JsJzogMCwgJ3g1MDknOiAxfSkKKyAgICAgICAgY3R4LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhTVk5fUFlUSE9OX09SR19ST09UX0NFUlQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LmNlcnRfc3RvcmVfc3RhdHMoKSwKKyAgICAgICAgICAgIHsneDUwOV9jYSc6IDEsICdjcmwnOiAwLCAneDUwOSc6IDJ9KQorCisgICAgZGVmIHRlc3RfZ2V0X2NhX2NlcnRzKHNlbGYpOgorICAgICAgICBjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LmdldF9jYV9jZXJ0cygpLCBbXSkKKyAgICAgICAgIyBDRVJURklMRSBpcyBub3QgZmxhZ2dlZCBhcyBYNTA5djMgQmFzaWMgQ29uc3RyYWludHM6IENBOlRSVUUKKyAgICAgICAgY3R4LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhDRVJURklMRSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHguZ2V0X2NhX2NlcnRzKCksIFtdKQorICAgICAgICAjIGJ1dCBTVk5fUFlUSE9OX09SR19ST09UX0NFUlQgaXMgYSBDQSBjZXJ0CisgICAgICAgIGN0eC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoU1ZOX1BZVEhPTl9PUkdfUk9PVF9DRVJUKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC5nZXRfY2FfY2VydHMoKSwKKyAgICAgICAgICAgIFt7J2lzc3Vlcic6ICgoKCdvcmdhbml6YXRpb25OYW1lJywgJ1Jvb3QgQ0EnKSwpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgoJ29yZ2FuaXphdGlvbmFsVW5pdE5hbWUnLCAnaHR0cDovL3d3dy5jYWNlcnQub3JnJyksKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoKCdjb21tb25OYW1lJywgJ0NBIENlcnQgU2lnbmluZyBBdXRob3JpdHknKSwpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgoJ2VtYWlsQWRkcmVzcycsICdzdXBwb3J0QGNhY2VydC5vcmcnKSwpKSwKKyAgICAgICAgICAgICAgJ25vdEFmdGVyJzogYXNuMXRpbWUoJ01hciAyOSAxMjoyOTo0OSAyMDMzIEdNVCcpLAorICAgICAgICAgICAgICAnbm90QmVmb3JlJzogYXNuMXRpbWUoJ01hciAzMCAxMjoyOTo0OSAyMDAzIEdNVCcpLAorICAgICAgICAgICAgICAnc2VyaWFsTnVtYmVyJzogJzAwJywKKyAgICAgICAgICAgICAgJ2NybERpc3RyaWJ1dGlvblBvaW50cyc6ICgnaHR0cHM6Ly93d3cuY2FjZXJ0Lm9yZy9yZXZva2UuY3JsJywpLAorICAgICAgICAgICAgICAnc3ViamVjdCc6ICgoKCdvcmdhbml6YXRpb25OYW1lJywgJ1Jvb3QgQ0EnKSwpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoKCdvcmdhbml6YXRpb25hbFVuaXROYW1lJywgJ2h0dHA6Ly93d3cuY2FjZXJ0Lm9yZycpLCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICgoJ2NvbW1vbk5hbWUnLCAnQ0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eScpLCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICgoJ2VtYWlsQWRkcmVzcycsICdzdXBwb3J0QGNhY2VydC5vcmcnKSwpKSwKKyAgICAgICAgICAgICAgJ3ZlcnNpb24nOiAzfV0pCisKKyAgICAgICAgd2l0aCBvcGVuKFNWTl9QWVRIT05fT1JHX1JPT1RfQ0VSVCkgYXMgZjoKKyAgICAgICAgICAgIHBlbSA9IGYucmVhZCgpCisgICAgICAgIGRlciA9IHNzbC5QRU1fY2VydF90b19ERVJfY2VydChwZW0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LmdldF9jYV9jZXJ0cyhUcnVlKSwgW2Rlcl0pCisKKyAgICBkZWYgdGVzdF9sb2FkX2RlZmF1bHRfY2VydHMoc2VsZik6CisgICAgICAgIGN0eCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MSkKKyAgICAgICAgY3R4LmxvYWRfZGVmYXVsdF9jZXJ0cygpCisKKyAgICAgICAgY3R4ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQorICAgICAgICBjdHgubG9hZF9kZWZhdWx0X2NlcnRzKHNzbC5QdXJwb3NlLlNFUlZFUl9BVVRIKQorICAgICAgICBjdHgubG9hZF9kZWZhdWx0X2NlcnRzKCkKKworICAgICAgICBjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgIGN0eC5sb2FkX2RlZmF1bHRfY2VydHMoc3NsLlB1cnBvc2UuQ0xJRU5UX0FVVEgpCisKKyAgICAgICAgY3R4ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGN0eC5sb2FkX2RlZmF1bHRfY2VydHMsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY3R4LmxvYWRfZGVmYXVsdF9jZXJ0cywgJ1NFUlZFUl9BVVRIJykKKworICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtID09ICJ3aW4zMiIsICJub3QtV2luZG93cyBzcGVjaWZpYyIpCisgICAgZGVmIHRlc3RfbG9hZF9kZWZhdWx0X2NlcnRzX2VudihzZWxmKToKKyAgICAgICAgY3R4ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQorICAgICAgICB3aXRoIHN1cHBvcnQuRW52aXJvbm1lbnRWYXJHdWFyZCgpIGFzIGVudjoKKyAgICAgICAgICAgIGVudlsiU1NMX0NFUlRfRElSIl0gPSBDQVBBVEgKKyAgICAgICAgICAgIGVudlsiU1NMX0NFUlRfRklMRSJdID0gQ0VSVEZJTEUKKyAgICAgICAgICAgIGN0eC5sb2FkX2RlZmF1bHRfY2VydHMoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHguY2VydF9zdG9yZV9zdGF0cygpLCB7ImNybCI6IDAsICJ4NTA5IjogMSwgIng1MDlfY2EiOiAwfSkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiLCAiV2luZG93cyBzcGVjaWZpYyIpCisgICAgZGVmIHRlc3RfbG9hZF9kZWZhdWx0X2NlcnRzX2Vudl93aW5kb3dzKHNlbGYpOgorICAgICAgICBjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgIGN0eC5sb2FkX2RlZmF1bHRfY2VydHMoKQorICAgICAgICBzdGF0cyA9IGN0eC5jZXJ0X3N0b3JlX3N0YXRzKCkKKworICAgICAgICBjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgIHdpdGggc3VwcG9ydC5FbnZpcm9ubWVudFZhckd1YXJkKCkgYXMgZW52OgorICAgICAgICAgICAgZW52WyJTU0xfQ0VSVF9ESVIiXSA9IENBUEFUSAorICAgICAgICAgICAgZW52WyJTU0xfQ0VSVF9GSUxFIl0gPSBDRVJURklMRQorICAgICAgICAgICAgY3R4LmxvYWRfZGVmYXVsdF9jZXJ0cygpCisgICAgICAgICAgICBzdGF0c1sieDUwOSJdICs9IDEKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LmNlcnRfc3RvcmVfc3RhdHMoKSwgc3RhdHMpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfZGVmYXVsdF9jb250ZXh0KHNlbGYpOgorICAgICAgICBjdHggPSBzc2wuY3JlYXRlX2RlZmF1bHRfY29udGV4dCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LnByb3RvY29sLCBzc2wuUFJPVE9DT0xfU1NMdjIzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC52ZXJpZnlfbW9kZSwgc3NsLkNFUlRfUkVRVUlSRUQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjdHguY2hlY2tfaG9zdG5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4Lm9wdGlvbnMgJiBzc2wuT1BfTk9fU1NMdjIsIHNzbC5PUF9OT19TU0x2MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGN0eC5vcHRpb25zICYgZ2V0YXR0cihzc2wsICJPUF9OT19DT01QUkVTU0lPTiIsIDApLAorICAgICAgICAgICAgZ2V0YXR0cihzc2wsICJPUF9OT19DT01QUkVTU0lPTiIsIDApLAorICAgICAgICApCisKKyAgICAgICAgd2l0aCBvcGVuKFNJR05JTkdfQ0EpIGFzIGY6CisgICAgICAgICAgICBjYWRhdGEgPSBmLnJlYWQoKQorICAgICAgICBjdHggPSBzc2wuY3JlYXRlX2RlZmF1bHRfY29udGV4dChjYWZpbGU9U0lHTklOR19DQSwgY2FwYXRoPUNBUEFUSCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FkYXRhPWNhZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHgucHJvdG9jb2wsIHNzbC5QUk9UT0NPTF9TU0x2MjMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LnZlcmlmeV9tb2RlLCBzc2wuQ0VSVF9SRVFVSVJFRCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHgub3B0aW9ucyAmIHNzbC5PUF9OT19TU0x2Miwgc3NsLk9QX05PX1NTTHYyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgY3R4Lm9wdGlvbnMgJiBnZXRhdHRyKHNzbCwgIk9QX05PX0NPTVBSRVNTSU9OIiwgMCksCisgICAgICAgICAgICBnZXRhdHRyKHNzbCwgIk9QX05PX0NPTVBSRVNTSU9OIiwgMCksCisgICAgICAgICkKKworICAgICAgICBjdHggPSBzc2wuY3JlYXRlX2RlZmF1bHRfY29udGV4dChzc2wuUHVycG9zZS5DTElFTlRfQVVUSCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHgucHJvdG9jb2wsIHNzbC5QUk9UT0NPTF9TU0x2MjMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LnZlcmlmeV9tb2RlLCBzc2wuQ0VSVF9OT05FKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC5vcHRpb25zICYgc3NsLk9QX05PX1NTTHYyLCBzc2wuT1BfTk9fU1NMdjIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBjdHgub3B0aW9ucyAmIGdldGF0dHIoc3NsLCAiT1BfTk9fQ09NUFJFU1NJT04iLCAwKSwKKyAgICAgICAgICAgIGdldGF0dHIoc3NsLCAiT1BfTk9fQ09NUFJFU1NJT04iLCAwKSwKKyAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgY3R4Lm9wdGlvbnMgJiBnZXRhdHRyKHNzbCwgIk9QX1NJTkdMRV9ESF9VU0UiLCAwKSwKKyAgICAgICAgICAgIGdldGF0dHIoc3NsLCAiT1BfU0lOR0xFX0RIX1VTRSIsIDApLAorICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBjdHgub3B0aW9ucyAmIGdldGF0dHIoc3NsLCAiT1BfU0lOR0xFX0VDREhfVVNFIiwgMCksCisgICAgICAgICAgICBnZXRhdHRyKHNzbCwgIk9QX1NJTkdMRV9FQ0RIX1VTRSIsIDApLAorICAgICAgICApCisKKyAgICBkZWYgdGVzdF9fY3JlYXRlX3N0ZGxpYl9jb250ZXh0KHNlbGYpOgorICAgICAgICBjdHggPSBzc2wuX2NyZWF0ZV9zdGRsaWJfY29udGV4dCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LnByb3RvY29sLCBzc2wuUFJPVE9DT0xfU1NMdjIzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC52ZXJpZnlfbW9kZSwgc3NsLkNFUlRfTk9ORSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjdHguY2hlY2tfaG9zdG5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4Lm9wdGlvbnMgJiBzc2wuT1BfTk9fU1NMdjIsIHNzbC5PUF9OT19TU0x2MikKKworICAgICAgICBjdHggPSBzc2wuX2NyZWF0ZV9zdGRsaWJfY29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LnByb3RvY29sLCBzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LnZlcmlmeV9tb2RlLCBzc2wuQ0VSVF9OT05FKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC5vcHRpb25zICYgc3NsLk9QX05PX1NTTHYyLCBzc2wuT1BfTk9fU1NMdjIpCisKKyAgICAgICAgY3R4ID0gc3NsLl9jcmVhdGVfc3RkbGliX2NvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0X3JlcXM9c3NsLkNFUlRfUkVRVUlSRUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrX2hvc3RuYW1lPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LnByb3RvY29sLCBzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LnZlcmlmeV9tb2RlLCBzc2wuQ0VSVF9SRVFVSVJFRCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGN0eC5jaGVja19ob3N0bmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHgub3B0aW9ucyAmIHNzbC5PUF9OT19TU0x2Miwgc3NsLk9QX05PX1NTTHYyKQorCisgICAgICAgIGN0eCA9IHNzbC5fY3JlYXRlX3N0ZGxpYl9jb250ZXh0KHB1cnBvc2U9c3NsLlB1cnBvc2UuQ0xJRU5UX0FVVEgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LnByb3RvY29sLCBzc2wuUFJPVE9DT0xfU1NMdjIzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC52ZXJpZnlfbW9kZSwgc3NsLkNFUlRfTk9ORSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHgub3B0aW9ucyAmIHNzbC5PUF9OT19TU0x2Miwgc3NsLk9QX05PX1NTTHYyKQorCisgICAgZGVmIHRlc3RfY2hlY2tfaG9zdG5hbWUoc2VsZik6CisgICAgICAgIGN0eCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjdHguY2hlY2tfaG9zdG5hbWUpCisKKyAgICAgICAgIyBSZXF1aXJlcyBDRVJUX1JFUVVJUkVEIG9yIENFUlRfT1BUSU9OQUwKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGN0eC5jaGVja19ob3N0bmFtZSA9IFRydWUKKyAgICAgICAgY3R4LnZlcmlmeV9tb2RlID0gc3NsLkNFUlRfUkVRVUlSRUQKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjdHguY2hlY2tfaG9zdG5hbWUpCisgICAgICAgIGN0eC5jaGVja19ob3N0bmFtZSA9IFRydWUKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGN0eC5jaGVja19ob3N0bmFtZSkKKworICAgICAgICBjdHgudmVyaWZ5X21vZGUgPSBzc2wuQ0VSVF9PUFRJT05BTAorICAgICAgICBjdHguY2hlY2tfaG9zdG5hbWUgPSBUcnVlCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjdHguY2hlY2tfaG9zdG5hbWUpCisKKyAgICAgICAgIyBDYW5ub3Qgc2V0IENFUlRfTk9ORSB3aXRoIGNoZWNrX2hvc3RuYW1lIGVuYWJsZWQKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGN0eC52ZXJpZnlfbW9kZSA9IHNzbC5DRVJUX05PTkUKKyAgICAgICAgY3R4LmNoZWNrX2hvc3RuYW1lID0gRmFsc2UKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjdHguY2hlY2tfaG9zdG5hbWUpCisKIAogY2xhc3MgU1NMRXJyb3JUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKQEAgLTg2OSwxMSArMTI4Miw4IEBACiAgICAgICAgICAgICAjIFNhbWUgd2l0aCBhIHNlcnZlciBob3N0bmFtZQogICAgICAgICAgICAgcyA9IGN0eC53cmFwX3NvY2tldChzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX2hvc3RuYW1lPSJzdm4ucHl0aG9uLm9yZyIpCi0gICAgICAgICAgICBpZiBzc2wuSEFTX1NOSToKLSAgICAgICAgICAgICAgICBzLmNvbm5lY3QoKCJzdm4ucHl0aG9uLm9yZyIsIDQ0MykpCi0gICAgICAgICAgICAgICAgcy5jbG9zZSgpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHMuY29ubmVjdCwgKCJzdm4ucHl0aG9uLm9yZyIsIDQ0MykpCisgICAgICAgICAgICBzLmNvbm5lY3QoKCJzdm4ucHl0aG9uLm9yZyIsIDQ0MykpCisgICAgICAgICAgICBzLmNsb3NlKCkKICAgICAgICAgICAgICMgVGhpcyBzaG91bGQgZmFpbCBiZWNhdXNlIHdlIGhhdmUgbm8gdmVyaWZpY2F0aW9uIGNlcnRzCiAgICAgICAgICAgICBjdHgudmVyaWZ5X21vZGUgPSBzc2wuQ0VSVF9SRVFVSVJFRAogICAgICAgICAgICAgcyA9IGN0eC53cmFwX3NvY2tldChzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUKSkKQEAgLTkxOSw2ICsxMzI5LDI4IEBACiAgICAgICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgICAgIHMuY2xvc2UoKQogCisgICAgZGVmIHRlc3RfY29ubmVjdF9jYWRhdGEoc2VsZik6CisgICAgICAgIHdpdGggb3BlbihDQUZJTEVfQ0FDRVJUKSBhcyBmOgorICAgICAgICAgICAgcGVtID0gZi5yZWFkKCkKKyAgICAgICAgZGVyID0gc3NsLlBFTV9jZXJ0X3RvX0RFUl9jZXJ0KHBlbSkKKyAgICAgICAgd2l0aCBzdXBwb3J0LnRyYW5zaWVudF9pbnRlcm5ldCgic3ZuLnB5dGhvbi5vcmciKToKKyAgICAgICAgICAgIGN0eCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9TU0x2MjMpCisgICAgICAgICAgICBjdHgudmVyaWZ5X21vZGUgPSBzc2wuQ0VSVF9SRVFVSVJFRAorICAgICAgICAgICAgY3R4LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhjYWRhdGE9cGVtKQorICAgICAgICAgICAgd2l0aCBjdHgud3JhcF9zb2NrZXQoc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCkpIGFzIHM6CisgICAgICAgICAgICAgICAgcy5jb25uZWN0KCgic3ZuLnB5dGhvbi5vcmciLCA0NDMpKQorICAgICAgICAgICAgICAgIGNlcnQgPSBzLmdldHBlZXJjZXJ0KCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY2VydCkKKworICAgICAgICAgICAgIyBzYW1lIHdpdGggREVSCisgICAgICAgICAgICBjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfU1NMdjIzKQorICAgICAgICAgICAgY3R4LnZlcmlmeV9tb2RlID0gc3NsLkNFUlRfUkVRVUlSRUQKKyAgICAgICAgICAgIGN0eC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoY2FkYXRhPWRlcikKKyAgICAgICAgICAgIHdpdGggY3R4LndyYXBfc29ja2V0KHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQpKSBhcyBzOgorICAgICAgICAgICAgICAgIHMuY29ubmVjdCgoInN2bi5weXRob24ub3JnIiwgNDQzKSkKKyAgICAgICAgICAgICAgICBjZXJ0ID0gcy5nZXRwZWVyY2VydCgpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNlcnQpCisKICAgICBAdW5pdHRlc3Quc2tpcElmKG9zLm5hbWUgPT0gIm50IiwgIkNhbid0IHVzZSBhIHNvY2tldCBhcyBhIGZpbGUgdW5kZXIgV2luZG93cyIpCiAgICAgZGVmIHRlc3RfbWFrZWZpbGVfY2xvc2Uoc2VsZik6CiAgICAgICAgICMgSXNzdWUgIzUyMzg6IGNyZWF0aW5nIGEgZmlsZS1saWtlIG9iamVjdCB3aXRoIG1ha2VmaWxlKCkgc2hvdWxkbid0CkBAIC0xMDM2LDYgKzE0NjgsMzYgQEAKICAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgcy5jbG9zZSgpCiAKKyAgICBkZWYgdGVzdF9nZXRfY2FfY2VydHNfY2FwYXRoKHNlbGYpOgorICAgICAgICAjIGNhcGF0aCBjZXJ0cyBhcmUgbG9hZGVkIG9uIHJlcXVlc3QKKyAgICAgICAgd2l0aCBzdXBwb3J0LnRyYW5zaWVudF9pbnRlcm5ldCgic3ZuLnB5dGhvbi5vcmciKToKKyAgICAgICAgICAgIGN0eCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9TU0x2MjMpCisgICAgICAgICAgICBjdHgudmVyaWZ5X21vZGUgPSBzc2wuQ0VSVF9SRVFVSVJFRAorICAgICAgICAgICAgY3R4LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhjYXBhdGg9Q0FQQVRIKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHguZ2V0X2NhX2NlcnRzKCksIFtdKQorICAgICAgICAgICAgcyA9IGN0eC53cmFwX3NvY2tldChzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUKSkKKyAgICAgICAgICAgIHMuY29ubmVjdCgoInN2bi5weXRob24ub3JnIiwgNDQzKSkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBjZXJ0ID0gcy5nZXRwZWVyY2VydCgpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNlcnQpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHMuY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oY3R4LmdldF9jYV9jZXJ0cygpKSwgMSkKKworICAgIEBuZWVkc19zbmkKKyAgICBkZWYgdGVzdF9jb250ZXh0X3NldGdldChzZWxmKToKKyAgICAgICAgIyBDaGVjayB0aGF0IHRoZSBjb250ZXh0IG9mIGEgY29ubmVjdGVkIHNvY2tldCBjYW4gYmUgcmVwbGFjZWQuCisgICAgICAgIHdpdGggc3VwcG9ydC50cmFuc2llbnRfaW50ZXJuZXQoInN2bi5weXRob24ub3JnIik6CisgICAgICAgICAgICBjdHgxID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQorICAgICAgICAgICAgY3R4MiA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9TU0x2MjMpCisgICAgICAgICAgICBzID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCkKKyAgICAgICAgICAgIHdpdGggY3R4MS53cmFwX3NvY2tldChzKSBhcyBzczoKKyAgICAgICAgICAgICAgICBzcy5jb25uZWN0KCgic3ZuLnB5dGhvbi5vcmciLCA0NDMpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3MuY29udGV4dCwgY3R4MSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzKHNzLl9zc2xvYmouY29udGV4dCwgY3R4MSkKKyAgICAgICAgICAgICAgICBzcy5jb250ZXh0ID0gY3R4MgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3MuY29udGV4dCwgY3R4MikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzKHNzLl9zc2xvYmouY29udGV4dCwgY3R4MikKIAogdHJ5OgogICAgIGltcG9ydCB0aHJlYWRpbmcKQEAgLTExNjMsNyArMTYyNSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIiBzZXJ2ZXI6IHJlYWQgJXIgKCVzKSwgc2VuZGluZyBiYWNrICVyICglcykuLi5cbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChtc2csIGN0eXBlLCBtc2cubG93ZXIoKSwgY3R5cGUpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYud3JpdGUobXNnLmxvd2VyKCkpCi0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5zZXJ2ZXIuY2hhdHR5OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZV9lcnJvcigiVGVzdCBzZXJ2ZXIgZmFpbHVyZTpcbiIpCiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNsb3NlKCkKQEAgLTEyNzMsNyArMTczNSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5oYW5kbGVfY2xvc2UoKQogICAgICAgICAgICAgICAgICAgICBleGNlcHQgc3NsLlNTTEVycm9yOgogICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBlcnI6CisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGVyci5hcmdzWzBdID09IGVycm5vLkVDT05OQUJPUlRFRDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5oYW5kbGVfY2xvc2UoKQogICAgICAgICAgICAgICAgICAgICBlbHNlOgpAQCAtMTM3NywxOSArMTgzOSwxOSBAQAogICAgICAgICAgICAgZXhjZXB0IHNzbC5TU0xFcnJvciBhcyB4OgogICAgICAgICAgICAgICAgIGlmIHN1cHBvcnQudmVyYm9zZToKICAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiXG5TU0xFcnJvciBpcyAlc1xuIiAlIHguYXJnc1sxXSkKLSAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgeDoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIHg6CiAgICAgICAgICAgICAgICAgaWYgc3VwcG9ydC52ZXJib3NlOgotICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCJcbnNvY2tldC5lcnJvciBpcyAlc1xuIiAlIHguYXJnc1sxXSkKLSAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIHg6CisgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIlxuT1NFcnJvciBpcyAlc1xuIiAlIHguYXJnc1sxXSkKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIHg6CiAgICAgICAgICAgICAgICAgaWYgeC5lcnJubyAhPSBlcnJuby5FTk9FTlQ6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgICAgICAgICAgaWYgc3VwcG9ydC52ZXJib3NlOgotICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCJcSU9FcnJvciBpcyAlc1xuIiAlIHN0cih4KSkKKyAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiXE9TRXJyb3IgaXMgJXNcbiIgJSBzdHIoeCkpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCJVc2Ugb2YgaW52YWxpZCBjZXJ0IHNob3VsZCBoYXZlIGZhaWxlZCEiKQogCiAgICAgZGVmIHNlcnZlcl9wYXJhbXNfdGVzdChjbGllbnRfY29udGV4dCwgc2VydmVyX2NvbnRleHQsIGluZGF0YT1iIkZPT1xuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXR0eT1UcnVlLCBjb25uZWN0aW9uY2hhdHR5PUZhbHNlKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXR0eT1UcnVlLCBjb25uZWN0aW9uY2hhdHR5PUZhbHNlLCBzbmlfbmFtZT1Ob25lKToKICAgICAgICAgIiIiCiAgICAgICAgIExhdW5jaCBhIHNlcnZlciwgY29ubmVjdCBhIGNsaWVudCB0byBpdCBhbmQgdHJ5IHZhcmlvdXMgcmVhZHMKICAgICAgICAgYW5kIHdyaXRlcy4KQEAgLTEzOTksNyArMTg2MSw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGF0dHk9Y2hhdHR5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbmNoYXR0eT1GYWxzZSkKICAgICAgICAgd2l0aCBzZXJ2ZXI6Ci0gICAgICAgICAgICB3aXRoIGNsaWVudF9jb250ZXh0LndyYXBfc29ja2V0KHNvY2tldC5zb2NrZXQoKSkgYXMgczoKKyAgICAgICAgICAgIHdpdGggY2xpZW50X2NvbnRleHQud3JhcF9zb2NrZXQoc29ja2V0LnNvY2tldCgpLAorICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfaG9zdG5hbWU9c25pX25hbWUpIGFzIHM6CiAgICAgICAgICAgICAgICAgcy5jb25uZWN0KChIT1NULCBzZXJ2ZXIucG9ydCkpCiAgICAgICAgICAgICAgICAgZm9yIGFyZyBpbiBbaW5kYXRhLCBieXRlYXJyYXkoaW5kYXRhKSwgbWVtb3J5dmlldyhpbmRhdGEpXToKICAgICAgICAgICAgICAgICAgICAgaWYgY29ubmVjdGlvbmNoYXR0eToKQEAgLTE0MjMsNiArMTg4Niw3IEBACiAgICAgICAgICAgICAgICAgc3RhdHMudXBkYXRlKHsKICAgICAgICAgICAgICAgICAgICAgJ2NvbXByZXNzaW9uJzogcy5jb21wcmVzc2lvbigpLAogICAgICAgICAgICAgICAgICAgICAnY2lwaGVyJzogcy5jaXBoZXIoKSwKKyAgICAgICAgICAgICAgICAgICAgJ3BlZXJjZXJ0Jzogcy5nZXRwZWVyY2VydCgpLAogICAgICAgICAgICAgICAgICAgICAnY2xpZW50X25wbl9wcm90b2NvbCc6IHMuc2VsZWN0ZWRfbnBuX3Byb3RvY29sKCkKICAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgIHMuY2xvc2UoKQpAQCAtMTQ0OCwxMiArMTkxMiwxNSBAQAogICAgICAgICBjbGllbnRfY29udGV4dC5vcHRpb25zIHw9IGNsaWVudF9vcHRpb25zCiAgICAgICAgIHNlcnZlcl9jb250ZXh0ID0gc3NsLlNTTENvbnRleHQoc2VydmVyX3Byb3RvY29sKQogICAgICAgICBzZXJ2ZXJfY29udGV4dC5vcHRpb25zIHw9IHNlcnZlcl9vcHRpb25zCisKKyAgICAgICAgIyBOT1RFOiB3ZSBtdXN0IGVuYWJsZSAiQUxMIiBjaXBoZXJzIG9uIHRoZSBjbGllbnQsIG90aGVyd2lzZSBhbgorICAgICAgICAjIFNTTHYyMyBjbGllbnQgd2lsbCBzZW5kIGFuIFNTTHYzIGhlbGxvIChyYXRoZXIgdGhhbiBTU0x2MikKKyAgICAgICAgIyBzdGFydGluZyBmcm9tIE9wZW5TU0wgMS4wLjAgKHNlZSBpc3N1ZSAjODMyMikuCisgICAgICAgIGlmIGNsaWVudF9jb250ZXh0LnByb3RvY29sID09IHNzbC5QUk9UT0NPTF9TU0x2MjM6CisgICAgICAgICAgICBjbGllbnRfY29udGV4dC5zZXRfY2lwaGVycygiQUxMIikKKwogICAgICAgICBmb3IgY3R4IGluIChjbGllbnRfY29udGV4dCwgc2VydmVyX2NvbnRleHQpOgogICAgICAgICAgICAgY3R4LnZlcmlmeV9tb2RlID0gY2VydHNyZXFzCi0gICAgICAgICAgICAjIE5PVEU6IHdlIG11c3QgZW5hYmxlICJBTEwiIGNpcGhlcnMsIG90aGVyd2lzZSBhbiBTU0x2MjMgY2xpZW50Ci0gICAgICAgICAgICAjIHdpbGwgc2VuZCBhbiBTU0x2MyBoZWxsbyAocmF0aGVyIHRoYW4gU1NMdjIpIHN0YXJ0aW5nIGZyb20KLSAgICAgICAgICAgICMgT3BlblNTTCAxLjAuMCAoc2VlIGlzc3VlICM4MzIyKS4KLSAgICAgICAgICAgIGN0eC5zZXRfY2lwaGVycygiQUxMIikKICAgICAgICAgICAgIGN0eC5sb2FkX2NlcnRfY2hhaW4oQ0VSVEZJTEUpCiAgICAgICAgICAgICBjdHgubG9hZF92ZXJpZnlfbG9jYXRpb25zKENFUlRGSUxFKQogICAgICAgICB0cnk6CkBAIC0xNDY0LDcgKzE5MzEsNyBAQAogICAgICAgICBleGNlcHQgc3NsLlNTTEVycm9yOgogICAgICAgICAgICAgaWYgZXhwZWN0X3N1Y2Nlc3M6CiAgICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBlOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgaWYgZXhwZWN0X3N1Y2Nlc3Mgb3IgZS5lcnJubyAhPSBlcnJuby5FQ09OTlJFU0VUOgogICAgICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgIGVsc2U6CkBAIC0xNDgzLDEwICsxOTUwLDExIEBACiAgICAgICAgICAgICBpZiBzdXBwb3J0LnZlcmJvc2U6CiAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiXG4iKQogICAgICAgICAgICAgZm9yIHByb3RvY29sIGluIFBST1RPQ09MUzoKLSAgICAgICAgICAgICAgICBjb250ZXh0ID0gc3NsLlNTTENvbnRleHQocHJvdG9jb2wpCi0gICAgICAgICAgICAgICAgY29udGV4dC5sb2FkX2NlcnRfY2hhaW4oQ0VSVEZJTEUpCi0gICAgICAgICAgICAgICAgc2VydmVyX3BhcmFtc190ZXN0KGNvbnRleHQsIGNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXR0eT1UcnVlLCBjb25uZWN0aW9uY2hhdHR5PVRydWUpCisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QocHJvdG9jb2w9c3NsLl9QUk9UT0NPTF9OQU1FU1twcm90b2NvbF0pOgorICAgICAgICAgICAgICAgICAgICBjb250ZXh0ID0gc3NsLlNTTENvbnRleHQocHJvdG9jb2wpCisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQubG9hZF9jZXJ0X2NoYWluKENFUlRGSUxFKQorICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfcGFyYW1zX3Rlc3QoY29udGV4dCwgY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXR0eT1UcnVlLCBjb25uZWN0aW9uY2hhdHR5PVRydWUpCiAKICAgICAgICAgZGVmIHRlc3RfZ2V0cGVlcmNlcnQoc2VsZik6CiAgICAgICAgICAgICBpZiBzdXBwb3J0LnZlcmJvc2U6CkBAIC0xNDk3LDggKzE5NjUsMTQgQEAKICAgICAgICAgICAgIGNvbnRleHQubG9hZF9jZXJ0X2NoYWluKENFUlRGSUxFKQogICAgICAgICAgICAgc2VydmVyID0gVGhyZWFkZWRFY2hvU2VydmVyKGNvbnRleHQ9Y29udGV4dCwgY2hhdHR5PUZhbHNlKQogICAgICAgICAgICAgd2l0aCBzZXJ2ZXI6Ci0gICAgICAgICAgICAgICAgcyA9IGNvbnRleHQud3JhcF9zb2NrZXQoc29ja2V0LnNvY2tldCgpKQorICAgICAgICAgICAgICAgIHMgPSBjb250ZXh0LndyYXBfc29ja2V0KHNvY2tldC5zb2NrZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb19oYW5kc2hha2Vfb25fY29ubmVjdD1GYWxzZSkKICAgICAgICAgICAgICAgICBzLmNvbm5lY3QoKEhPU1QsIHNlcnZlci5wb3J0KSkKKyAgICAgICAgICAgICAgICAjIGdldHBlZXJjZXJ0KCkgcmFpc2UgVmFsdWVFcnJvciB3aGlsZSB0aGUgaGFuZHNoYWtlIGlzbid0CisgICAgICAgICAgICAgICAgIyBkb25lLgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICAgICAgICAgIHMuZ2V0cGVlcmNlcnQoKQorICAgICAgICAgICAgICAgIHMuZG9faGFuZHNoYWtlKCkKICAgICAgICAgICAgICAgICBjZXJ0ID0gcy5nZXRwZWVyY2VydCgpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNlcnQsICJDYW4ndCBnZXQgcGVlciBjZXJ0aWZpY2F0ZS4iKQogICAgICAgICAgICAgICAgIGNpcGhlciA9IHMuY2lwaGVyKCkKQEAgLTE1MjAsNiArMTk5NCw4NyBAQAogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0TGVzcyhiZWZvcmUsIGFmdGVyKQogICAgICAgICAgICAgICAgIHMuY2xvc2UoKQogCisgICAgICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhdmVfdmVyaWZ5X2ZsYWdzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZlcmlmeV9mbGFncyBuZWVkIE9wZW5TU0wgPiAwLjkuOCIpCisgICAgICAgIGRlZiB0ZXN0X2NybF9jaGVjayhzZWxmKToKKyAgICAgICAgICAgIGlmIHN1cHBvcnQudmVyYm9zZToKKyAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCJcbiIpCisKKyAgICAgICAgICAgIHNlcnZlcl9jb250ZXh0ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQorICAgICAgICAgICAgc2VydmVyX2NvbnRleHQubG9hZF9jZXJ0X2NoYWluKFNJR05FRF9DRVJURklMRSkKKworICAgICAgICAgICAgY29udGV4dCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MSkKKyAgICAgICAgICAgIGNvbnRleHQudmVyaWZ5X21vZGUgPSBzc2wuQ0VSVF9SRVFVSVJFRAorICAgICAgICAgICAgY29udGV4dC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoU0lHTklOR19DQSkKKyAgICAgICAgICAgIHRmID0gZ2V0YXR0cihzc2wsICJWRVJJRllfWDUwOV9UUlVTVEVEX0ZJUlNUIiwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29udGV4dC52ZXJpZnlfZmxhZ3MsIHNzbC5WRVJJRllfREVGQVVMVCB8IHRmKQorCisgICAgICAgICAgICAjIFZFUklGWV9ERUZBVUxUIHNob3VsZCBwYXNzCisgICAgICAgICAgICBzZXJ2ZXIgPSBUaHJlYWRlZEVjaG9TZXJ2ZXIoY29udGV4dD1zZXJ2ZXJfY29udGV4dCwgY2hhdHR5PVRydWUpCisgICAgICAgICAgICB3aXRoIHNlcnZlcjoKKyAgICAgICAgICAgICAgICB3aXRoIGNvbnRleHQud3JhcF9zb2NrZXQoc29ja2V0LnNvY2tldCgpKSBhcyBzOgorICAgICAgICAgICAgICAgICAgICBzLmNvbm5lY3QoKEhPU1QsIHNlcnZlci5wb3J0KSkKKyAgICAgICAgICAgICAgICAgICAgY2VydCA9IHMuZ2V0cGVlcmNlcnQoKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY2VydCwgIkNhbid0IGdldCBwZWVyIGNlcnRpZmljYXRlLiIpCisKKyAgICAgICAgICAgICMgVkVSSUZZX0NSTF9DSEVDS19MRUFGIHdpdGhvdXQgYSBsb2FkZWQgQ1JMIGZpbGUgZmFpbHMKKyAgICAgICAgICAgIGNvbnRleHQudmVyaWZ5X2ZsYWdzIHw9IHNzbC5WRVJJRllfQ1JMX0NIRUNLX0xFQUYKKworICAgICAgICAgICAgc2VydmVyID0gVGhyZWFkZWRFY2hvU2VydmVyKGNvbnRleHQ9c2VydmVyX2NvbnRleHQsIGNoYXR0eT1UcnVlKQorICAgICAgICAgICAgd2l0aCBzZXJ2ZXI6CisgICAgICAgICAgICAgICAgd2l0aCBjb250ZXh0LndyYXBfc29ja2V0KHNvY2tldC5zb2NrZXQoKSkgYXMgczoKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KHNzbC5TU0xFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjZXJ0aWZpY2F0ZSB2ZXJpZnkgZmFpbGVkIik6CisgICAgICAgICAgICAgICAgICAgICAgICBzLmNvbm5lY3QoKEhPU1QsIHNlcnZlci5wb3J0KSkKKworICAgICAgICAgICAgIyBub3cgbG9hZCBhIENSTCBmaWxlLiBUaGUgQ1JMIGZpbGUgaXMgc2lnbmVkIGJ5IHRoZSBDQS4KKyAgICAgICAgICAgIGNvbnRleHQubG9hZF92ZXJpZnlfbG9jYXRpb25zKENSTEZJTEUpCisKKyAgICAgICAgICAgIHNlcnZlciA9IFRocmVhZGVkRWNob1NlcnZlcihjb250ZXh0PXNlcnZlcl9jb250ZXh0LCBjaGF0dHk9VHJ1ZSkKKyAgICAgICAgICAgIHdpdGggc2VydmVyOgorICAgICAgICAgICAgICAgIHdpdGggY29udGV4dC53cmFwX3NvY2tldChzb2NrZXQuc29ja2V0KCkpIGFzIHM6CisgICAgICAgICAgICAgICAgICAgIHMuY29ubmVjdCgoSE9TVCwgc2VydmVyLnBvcnQpKQorICAgICAgICAgICAgICAgICAgICBjZXJ0ID0gcy5nZXRwZWVyY2VydCgpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjZXJ0LCAiQ2FuJ3QgZ2V0IHBlZXIgY2VydGlmaWNhdGUuIikKKworICAgICAgICBkZWYgdGVzdF9jaGVja19ob3N0bmFtZShzZWxmKToKKyAgICAgICAgICAgIGlmIHN1cHBvcnQudmVyYm9zZToKKyAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCJcbiIpCisKKyAgICAgICAgICAgIHNlcnZlcl9jb250ZXh0ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQorICAgICAgICAgICAgc2VydmVyX2NvbnRleHQubG9hZF9jZXJ0X2NoYWluKFNJR05FRF9DRVJURklMRSkKKworICAgICAgICAgICAgY29udGV4dCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MSkKKyAgICAgICAgICAgIGNvbnRleHQudmVyaWZ5X21vZGUgPSBzc2wuQ0VSVF9SRVFVSVJFRAorICAgICAgICAgICAgY29udGV4dC5jaGVja19ob3N0bmFtZSA9IFRydWUKKyAgICAgICAgICAgIGNvbnRleHQubG9hZF92ZXJpZnlfbG9jYXRpb25zKFNJR05JTkdfQ0EpCisKKyAgICAgICAgICAgICMgY29ycmVjdCBob3N0bmFtZSBzaG91bGQgdmVyaWZ5CisgICAgICAgICAgICBzZXJ2ZXIgPSBUaHJlYWRlZEVjaG9TZXJ2ZXIoY29udGV4dD1zZXJ2ZXJfY29udGV4dCwgY2hhdHR5PVRydWUpCisgICAgICAgICAgICB3aXRoIHNlcnZlcjoKKyAgICAgICAgICAgICAgICB3aXRoIGNvbnRleHQud3JhcF9zb2NrZXQoc29ja2V0LnNvY2tldCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfaG9zdG5hbWU9ImxvY2FsaG9zdCIpIGFzIHM6CisgICAgICAgICAgICAgICAgICAgIHMuY29ubmVjdCgoSE9TVCwgc2VydmVyLnBvcnQpKQorICAgICAgICAgICAgICAgICAgICBjZXJ0ID0gcy5nZXRwZWVyY2VydCgpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjZXJ0LCAiQ2FuJ3QgZ2V0IHBlZXIgY2VydGlmaWNhdGUuIikKKworICAgICAgICAgICAgIyBpbmNvcnJlY3QgaG9zdG5hbWUgc2hvdWxkIHJhaXNlIGFuIGV4Y2VwdGlvbgorICAgICAgICAgICAgc2VydmVyID0gVGhyZWFkZWRFY2hvU2VydmVyKGNvbnRleHQ9c2VydmVyX2NvbnRleHQsIGNoYXR0eT1UcnVlKQorICAgICAgICAgICAgd2l0aCBzZXJ2ZXI6CisgICAgICAgICAgICAgICAgd2l0aCBjb250ZXh0LndyYXBfc29ja2V0KHNvY2tldC5zb2NrZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX2hvc3RuYW1lPSJpbnZhbGlkIikgYXMgczoKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KHNzbC5DZXJ0aWZpY2F0ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhvc3RuYW1lICdpbnZhbGlkJyBkb2Vzbid0IG1hdGNoICdsb2NhbGhvc3QnIik6CisgICAgICAgICAgICAgICAgICAgICAgICBzLmNvbm5lY3QoKEhPU1QsIHNlcnZlci5wb3J0KSkKKworICAgICAgICAgICAgIyBtaXNzaW5nIHNlcnZlcl9ob3N0bmFtZSBhcmcgc2hvdWxkIGNhdXNlIGFuIGV4Y2VwdGlvbiwgdG9vCisgICAgICAgICAgICBzZXJ2ZXIgPSBUaHJlYWRlZEVjaG9TZXJ2ZXIoY29udGV4dD1zZXJ2ZXJfY29udGV4dCwgY2hhdHR5PVRydWUpCisgICAgICAgICAgICB3aXRoIHNlcnZlcjoKKyAgICAgICAgICAgICAgICB3aXRoIHNvY2tldC5zb2NrZXQoKSBhcyBzOgorICAgICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjaGVja19ob3N0bmFtZSByZXF1aXJlcyBzZXJ2ZXJfaG9zdG5hbWUiKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQud3JhcF9zb2NrZXQocykKKwogICAgICAgICBkZWYgdGVzdF9lbXB0eV9jZXJ0KHNlbGYpOgogICAgICAgICAgICAgIiIiQ29ubmVjdGluZyB3aXRoIGFuIGVtcHR5IGNlcnQgZmlsZSIiIgogICAgICAgICAgICAgYmFkX2NlcnRfdGVzdChvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSBvciBvcy5jdXJkaXIsCkBAIC0xNTM4LDcgKzIwOTMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJhZGtleS5wZW0iKSkKIAogICAgICAgICBkZWYgdGVzdF9ydWRlX3NodXRkb3duKHNlbGYpOgotICAgICAgICAgICAgIiIiQSBicnV0YWwgc2h1dGRvd24gb2YgYW4gU1NMIHNlcnZlciBzaG91bGQgcmFpc2UgYW4gSU9FcnJvcgorICAgICAgICAgICAgIiIiQSBicnV0YWwgc2h1dGRvd24gb2YgYW4gU1NMIHNlcnZlciBzaG91bGQgcmFpc2UgYW4gT1NFcnJvcgogICAgICAgICAgICAgaW4gdGhlIGNsaWVudCB3aGVuIGF0dGVtcHRpbmcgaGFuZHNoYWtlLgogICAgICAgICAgICAgIiIiCiAgICAgICAgICAgICBsaXN0ZW5lcl9yZWFkeSA9IHRocmVhZGluZy5FdmVudCgpCkBAIC0xNTY2LDcgKzIxMjEsNyBAQAogICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lcl9nb25lLndhaXQoKQogICAgICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgICAgICBzc2xfc29jayA9IHNzbC53cmFwX3NvY2tldChjKQotICAgICAgICAgICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ2Nvbm5lY3RpbmcgdG8gY2xvc2VkIFNTTCBzb2NrZXQgc2hvdWxkIGhhdmUgZmFpbGVkJykKQEAgLTE1ODksNyArMjE0NCw4IEBACiAgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1NTTHYyLCBzc2wuUFJPVE9DT0xfU1NMdjIsIFRydWUsIHNzbC5DRVJUX09QVElPTkFMKQogICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9TU0x2Miwgc3NsLlBST1RPQ09MX1NTTHYyLCBUcnVlLCBzc2wuQ0VSVF9SRVFVSVJFRCkKICAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfU1NMdjIsIHNzbC5QUk9UT0NPTF9TU0x2MjMsIEZhbHNlKQotICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9TU0x2Miwgc3NsLlBST1RPQ09MX1NTTHYzLCBGYWxzZSkKKyAgICAgICAgICAgIGlmIGhhc2F0dHIoc3NsLCAnUFJPVE9DT0xfU1NMdjMnKToKKyAgICAgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1NTTHYyLCBzc2wuUFJPVE9DT0xfU1NMdjMsIEZhbHNlKQogICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9TU0x2Miwgc3NsLlBST1RPQ09MX1RMU3YxLCBGYWxzZSkKICAgICAgICAgICAgICMgU1NMdjIzIGNsaWVudCB3aXRoIHNwZWNpZmljIFNTTCBvcHRpb25zCiAgICAgICAgICAgICBpZiBub19zc2x2Ml9pbXBsaWVzX3NzbHYzX2hlbGxvKCk6CkBAIC0xNjA5LDI2ICsyMTY1LDMwIEBACiAgICAgICAgICAgICBpZiBoYXNhdHRyKHNzbCwgJ1BST1RPQ09MX1NTTHYyJyk6CiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1NTTHYyMywgc3NsLlBST1RPQ09MX1NTTHYyLCBUcnVlKQotICAgICAgICAgICAgICAgIGV4Y2VwdCAoc3NsLlNTTEVycm9yLCBzb2NrZXQuZXJyb3IpIGFzIHg6CisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgeDoKICAgICAgICAgICAgICAgICAgICAgIyB0aGlzIGZhaWxzIG9uIHNvbWUgb2xkZXIgdmVyc2lvbnMgb2YgT3BlblNTTCAoMC45LjdsLCBmb3IgaW5zdGFuY2UpCiAgICAgICAgICAgICAgICAgICAgIGlmIHN1cHBvcnQudmVyYm9zZToKICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBTU0wyIGNsaWVudCB0byBTU0wyMyBzZXJ2ZXIgdGVzdCB1bmV4cGVjdGVkbHkgZmFpbGVkOlxuICVzXG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSBzdHIoeCkpCi0gICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1NTTHYyMywgc3NsLlBST1RPQ09MX1NTTHYzLCBUcnVlKQorICAgICAgICAgICAgaWYgaGFzYXR0cihzc2wsICdQUk9UT0NPTF9TU0x2MycpOgorICAgICAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfU1NMdjIzLCBzc2wuUFJPVE9DT0xfU1NMdjMsIEZhbHNlKQogICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9TU0x2MjMsIHNzbC5QUk9UT0NPTF9TU0x2MjMsIFRydWUpCiAgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1NTTHYyMywgc3NsLlBST1RPQ09MX1RMU3YxLCBUcnVlKQogCi0gICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1NTTHYyMywgc3NsLlBST1RPQ09MX1NTTHYzLCBUcnVlLCBzc2wuQ0VSVF9PUFRJT05BTCkKKyAgICAgICAgICAgIGlmIGhhc2F0dHIoc3NsLCAnUFJPVE9DT0xfU1NMdjMnKToKKyAgICAgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1NTTHYyMywgc3NsLlBST1RPQ09MX1NTTHYzLCBGYWxzZSwgc3NsLkNFUlRfT1BUSU9OQUwpCiAgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1NTTHYyMywgc3NsLlBST1RPQ09MX1NTTHYyMywgVHJ1ZSwgc3NsLkNFUlRfT1BUSU9OQUwpCiAgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1NTTHYyMywgc3NsLlBST1RPQ09MX1RMU3YxLCBUcnVlLCBzc2wuQ0VSVF9PUFRJT05BTCkKIAotICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9TU0x2MjMsIHNzbC5QUk9UT0NPTF9TU0x2MywgVHJ1ZSwgc3NsLkNFUlRfUkVRVUlSRUQpCisgICAgICAgICAgICBpZiBoYXNhdHRyKHNzbCwgJ1BST1RPQ09MX1NTTHYzJyk6CisgICAgICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9TU0x2MjMsIHNzbC5QUk9UT0NPTF9TU0x2MywgRmFsc2UsIHNzbC5DRVJUX1JFUVVJUkVEKQogICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9TU0x2MjMsIHNzbC5QUk9UT0NPTF9TU0x2MjMsIFRydWUsIHNzbC5DRVJUX1JFUVVJUkVEKQogICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9TU0x2MjMsIHNzbC5QUk9UT0NPTF9UTFN2MSwgVHJ1ZSwgc3NsLkNFUlRfUkVRVUlSRUQpCiAKICAgICAgICAgICAgICMgU2VydmVyIHdpdGggc3BlY2lmaWMgU1NMIG9wdGlvbnMKLSAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfU1NMdjIzLCBzc2wuUFJPVE9DT0xfU1NMdjMsIEZhbHNlLAorICAgICAgICAgICAgaWYgaGFzYXR0cihzc2wsICdQUk9UT0NPTF9TU0x2MycpOgorICAgICAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfU1NMdjIzLCBzc2wuUFJPVE9DT0xfU1NMdjMsIEZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9vcHRpb25zPXNzbC5PUF9OT19TU0x2MykKICAgICAgICAgICAgICMgV2lsbCBjaG9vc2UgVExTdjEKICAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfU1NMdjIzLCBzc2wuUFJPVE9DT0xfU1NMdjIzLCBUcnVlLApAQCAtMTYzOCw2ICsyMTk4LDggQEAKIAogCiAgICAgICAgIEBza2lwX2lmX2Jyb2tlbl91YnVudHVfc3NsCisgICAgICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc3NsLCAnUFJPVE9DT0xfU1NMdjMnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk9wZW5TU0wgaXMgY29tcGlsZWQgd2l0aG91dCBTU0x2MyBzdXBwb3J0IikKICAgICAgICAgZGVmIHRlc3RfcHJvdG9jb2xfc3NsdjMoc2VsZik6CiAgICAgICAgICAgICAiIiJDb25uZWN0aW5nIHRvIGFuIFNTTHYzIHNlcnZlciB3aXRoIHZhcmlvdXMgY2xpZW50IG9wdGlvbnMiIiIKICAgICAgICAgICAgIGlmIHN1cHBvcnQudmVyYm9zZToKQEAgLTE2NTIsOCArMjIxNCw4IEBACiAgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1NTTHYzLCBzc2wuUFJPVE9DT0xfVExTdjEsIEZhbHNlKQogICAgICAgICAgICAgaWYgbm9fc3NsdjJfaW1wbGllc19zc2x2M19oZWxsbygpOgogICAgICAgICAgICAgICAgICMgTm8gU1NMdjIgPT4gY2xpZW50IHdpbGwgdXNlIGFuIFNTTHYzIGhlbGxvIG9uIHJlY2VudCBPcGVuU1NMcwotICAgICAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfU1NMdjMsIHNzbC5QUk9UT0NPTF9TU0x2MjMsIFRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWVudF9vcHRpb25zPXNzbC5PUF9OT19TU0x2MikKKyAgICAgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1NTTHYzLCBzc2wuUFJPVE9DT0xfU1NMdjIzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGYWxzZSwgY2xpZW50X29wdGlvbnM9c3NsLk9QX05PX1NTTHYyKQogCiAgICAgICAgIEBza2lwX2lmX2Jyb2tlbl91YnVudHVfc3NsCiAgICAgICAgIGRlZiB0ZXN0X3Byb3RvY29sX3Rsc3YxKHNlbGYpOgpAQCAtMTY2NSwxMCArMjIyNyw1NiBAQAogICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9UTFN2MSwgc3NsLlBST1RPQ09MX1RMU3YxLCBUcnVlLCBzc2wuQ0VSVF9SRVFVSVJFRCkKICAgICAgICAgICAgIGlmIGhhc2F0dHIoc3NsLCAnUFJPVE9DT0xfU1NMdjInKToKICAgICAgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1RMU3YxLCBzc2wuUFJPVE9DT0xfU1NMdjIsIEZhbHNlKQotICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9UTFN2MSwgc3NsLlBST1RPQ09MX1NTTHYzLCBGYWxzZSkKKyAgICAgICAgICAgIGlmIGhhc2F0dHIoc3NsLCAnUFJPVE9DT0xfU1NMdjMnKToKKyAgICAgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1RMU3YxLCBzc2wuUFJPVE9DT0xfU1NMdjMsIEZhbHNlKQogICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9UTFN2MSwgc3NsLlBST1RPQ09MX1NTTHYyMywgRmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50X29wdGlvbnM9c3NsLk9QX05PX1RMU3YxKQogCisgICAgICAgIEBza2lwX2lmX2Jyb2tlbl91YnVudHVfc3NsCisgICAgICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc3NsLCAiUFJPVE9DT0xfVExTdjFfMSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVExTIHZlcnNpb24gMS4xIG5vdCBzdXBwb3J0ZWQuIikKKyAgICAgICAgZGVmIHRlc3RfcHJvdG9jb2xfdGxzdjFfMShzZWxmKToKKyAgICAgICAgICAgICIiIkNvbm5lY3RpbmcgdG8gYSBUTFN2MS4xIHNlcnZlciB3aXRoIHZhcmlvdXMgY2xpZW50IG9wdGlvbnMuCisgICAgICAgICAgICAgICBUZXN0aW5nIGFnYWluc3Qgb2xkZXIgVExTIHZlcnNpb25zLiIiIgorICAgICAgICAgICAgaWYgc3VwcG9ydC52ZXJib3NlOgorICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIlxuIikKKyAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfVExTdjFfMSwgc3NsLlBST1RPQ09MX1RMU3YxXzEsIFRydWUpCisgICAgICAgICAgICBpZiBoYXNhdHRyKHNzbCwgJ1BST1RPQ09MX1NTTHYyJyk6CisgICAgICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9UTFN2MV8xLCBzc2wuUFJPVE9DT0xfU1NMdjIsIEZhbHNlKQorICAgICAgICAgICAgaWYgaGFzYXR0cihzc2wsICdQUk9UT0NPTF9TU0x2MycpOgorICAgICAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfVExTdjFfMSwgc3NsLlBST1RPQ09MX1NTTHYzLCBGYWxzZSkKKyAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfVExTdjFfMSwgc3NsLlBST1RPQ09MX1NTTHYyMywgRmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50X29wdGlvbnM9c3NsLk9QX05PX1RMU3YxXzEpCisKKyAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfU1NMdjIzLCBzc2wuUFJPVE9DT0xfVExTdjFfMSwgVHJ1ZSkKKyAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfVExTdjFfMSwgc3NsLlBST1RPQ09MX1RMU3YxLCBGYWxzZSkKKyAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfVExTdjEsIHNzbC5QUk9UT0NPTF9UTFN2MV8xLCBGYWxzZSkKKworCisgICAgICAgIEBza2lwX2lmX2Jyb2tlbl91YnVudHVfc3NsCisgICAgICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc3NsLCAiUFJPVE9DT0xfVExTdjFfMiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVExTIHZlcnNpb24gMS4yIG5vdCBzdXBwb3J0ZWQuIikKKyAgICAgICAgZGVmIHRlc3RfcHJvdG9jb2xfdGxzdjFfMihzZWxmKToKKyAgICAgICAgICAgICIiIkNvbm5lY3RpbmcgdG8gYSBUTFN2MS4yIHNlcnZlciB3aXRoIHZhcmlvdXMgY2xpZW50IG9wdGlvbnMuCisgICAgICAgICAgICAgICBUZXN0aW5nIGFnYWluc3Qgb2xkZXIgVExTIHZlcnNpb25zLiIiIgorICAgICAgICAgICAgaWYgc3VwcG9ydC52ZXJib3NlOgorICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIlxuIikKKyAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfVExTdjFfMiwgc3NsLlBST1RPQ09MX1RMU3YxXzIsIFRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX29wdGlvbnM9c3NsLk9QX05PX1NTTHYzfHNzbC5PUF9OT19TU0x2MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGllbnRfb3B0aW9ucz1zc2wuT1BfTk9fU1NMdjN8c3NsLk9QX05PX1NTTHYyLCkKKyAgICAgICAgICAgIGlmIGhhc2F0dHIoc3NsLCAnUFJPVE9DT0xfU1NMdjInKToKKyAgICAgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1RMU3YxXzIsIHNzbC5QUk9UT0NPTF9TU0x2MiwgRmFsc2UpCisgICAgICAgICAgICBpZiBoYXNhdHRyKHNzbCwgJ1BST1RPQ09MX1NTTHYzJyk6CisgICAgICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9UTFN2MV8yLCBzc2wuUFJPVE9DT0xfU1NMdjMsIEZhbHNlKQorICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9UTFN2MV8yLCBzc2wuUFJPVE9DT0xfU1NMdjIzLCBGYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGllbnRfb3B0aW9ucz1zc2wuT1BfTk9fVExTdjFfMikKKworICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9TU0x2MjMsIHNzbC5QUk9UT0NPTF9UTFN2MV8yLCBUcnVlKQorICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9UTFN2MV8yLCBzc2wuUFJPVE9DT0xfVExTdjEsIEZhbHNlKQorICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9UTFN2MSwgc3NsLlBST1RPQ09MX1RMU3YxXzIsIEZhbHNlKQorICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9UTFN2MV8yLCBzc2wuUFJPVE9DT0xfVExTdjFfMSwgRmFsc2UpCisgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1RMU3YxXzEsIHNzbC5QUk9UT0NPTF9UTFN2MV8yLCBGYWxzZSkKKwogICAgICAgICBkZWYgdGVzdF9zdGFydHRscyhzZWxmKToKICAgICAgICAgICAgICIiIlN3aXRjaGluZyBmcm9tIGNsZWFyIHRleHQgdG8gZW5jcnlwdGVkIGFuZCBiYWNrIGFnYWluLiIiIgogICAgICAgICAgICAgbXNncyA9IChiIm1zZyAxIiwgYiJNU0cgMiIsIGIiU1RBUlRUTFMiLCBiIk1TRyAzIiwgYiJtc2cgNCIsIGIiRU5EVExTIiwgYiJtc2cgNSIsIGIibXNnIDYiKQpAQCAtMTcyOSw3ICsyMzM3LDcgQEAKIAogICAgICAgICBkZWYgdGVzdF9zb2NrZXRzZXJ2ZXIoc2VsZik6CiAgICAgICAgICAgICAiIiJVc2luZyBhIFNvY2tldFNlcnZlciB0byBjcmVhdGUgYW5kIG1hbmFnZSBTU0wgY29ubmVjdGlvbnMuIiIiCi0gICAgICAgICAgICBzZXJ2ZXIgPSBtYWtlX2h0dHBzX3NlcnZlcihzZWxmLCBDRVJURklMRSkKKyAgICAgICAgICAgIHNlcnZlciA9IG1ha2VfaHR0cHNfc2VydmVyKHNlbGYsIGNlcnRmaWxlPUNFUlRGSUxFKQogICAgICAgICAgICAgIyB0cnkgdG8gY29ubmVjdAogICAgICAgICAgICAgaWYgc3VwcG9ydC52ZXJib3NlOgogICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoJ1xuJykKQEAgLTE3MzcsOSArMjM0NSwxMCBAQAogICAgICAgICAgICAgICAgIGQxID0gZi5yZWFkKCkKICAgICAgICAgICAgIGQyID0gJycKICAgICAgICAgICAgICMgbm93IGZldGNoIHRoZSBzYW1lIGRhdGEgZnJvbSB0aGUgSFRUUFMgc2VydmVyCi0gICAgICAgICAgICB1cmwgPSAnaHR0cHM6Ly8lczolZC8lcycgJSAoCi0gICAgICAgICAgICAgICAgSE9TVCwgc2VydmVyLnBvcnQsIG9zLnBhdGguc3BsaXQoQ0VSVEZJTEUpWzFdKQotICAgICAgICAgICAgZiA9IHVybGxpYi5yZXF1ZXN0LnVybG9wZW4odXJsKQorICAgICAgICAgICAgdXJsID0gJ2h0dHBzOi8vbG9jYWxob3N0OiVkLyVzJyAlICgKKyAgICAgICAgICAgICAgICBzZXJ2ZXIucG9ydCwgb3MucGF0aC5zcGxpdChDRVJURklMRSlbMV0pCisgICAgICAgICAgICBjb250ZXh0ID0gc3NsLmNyZWF0ZV9kZWZhdWx0X2NvbnRleHQoY2FmaWxlPUNFUlRGSUxFKQorICAgICAgICAgICAgZiA9IHVybGxpYi5yZXF1ZXN0LnVybG9wZW4odXJsLCBjb250ZXh0PWNvbnRleHQpCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgZGxlbiA9IGYuaW5mbygpLmdldCgiY29udGVudC1sZW5ndGgiKQogICAgICAgICAgICAgICAgIGlmIGRsZW4gYW5kIChpbnQoZGxlbikgPiAwKToKQEAgLTE5ODUsNiArMjU5NCwyMCBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHJlbW90ZSwgc3NsLlNTTFNvY2tldCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGVlciwgY2xpZW50X2FkZHIpCiAKKyAgICAgICAgZGVmIHRlc3RfZ2V0cGVlcmNlcnRfZW5vdGNvbm4oc2VsZik6CisgICAgICAgICAgICBjb250ZXh0ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1NTTHYyMykKKyAgICAgICAgICAgIHdpdGggY29udGV4dC53cmFwX3NvY2tldChzb2NrZXQuc29ja2V0KCkpIGFzIHNvY2s6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKSBhcyBjbToKKyAgICAgICAgICAgICAgICAgICAgc29jay5nZXRwZWVyY2VydCgpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24uZXJybm8sIGVycm5vLkVOT1RDT05OKQorCisgICAgICAgIGRlZiB0ZXN0X2RvX2hhbmRzaGFrZV9lbm90Y29ubihzZWxmKToKKyAgICAgICAgICAgIGNvbnRleHQgPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfU1NMdjIzKQorICAgICAgICAgICAgd2l0aCBjb250ZXh0LndyYXBfc29ja2V0KHNvY2tldC5zb2NrZXQoKSkgYXMgc29jazoKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgICAgICAgICBzb2NrLmRvX2hhbmRzaGFrZSgpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24uZXJybm8sIGVycm5vLkVOT1RDT05OKQorCiAgICAgICAgIGRlZiB0ZXN0X2RlZmF1bHRfY2lwaGVycyhzZWxmKToKICAgICAgICAgICAgIGNvbnRleHQgPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfU1NMdjIzKQogICAgICAgICAgICAgdHJ5OgpAQCAtMTk5NiwxMCArMjYxOSwyNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsX3ZlcnNpb249c3NsLlBST1RPQ09MX1NTTHYyMywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXR0eT1GYWxzZSkgYXMgc2VydmVyOgogICAgICAgICAgICAgICAgIHdpdGggY29udGV4dC53cmFwX3NvY2tldChzb2NrZXQuc29ja2V0KCkpIGFzIHM6Ci0gICAgICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoKE9TRXJyb3IsIHNzbC5TU0xFcnJvcikpOgorICAgICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpOgogICAgICAgICAgICAgICAgICAgICAgICAgcy5jb25uZWN0KChIT1NULCBzZXJ2ZXIucG9ydCkpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEluKCJubyBzaGFyZWQgY2lwaGVyIiwgc3RyKHNlcnZlci5jb25uX2Vycm9yc1swXSkpCiAKKyAgICAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3NsLkhBU19FQ0RILCAidGVzdCByZXF1aXJlcyBFQ0RILWVuYWJsZWQgT3BlblNTTCIpCisgICAgICAgIGRlZiB0ZXN0X2RlZmF1bHRfZWNkaF9jdXJ2ZShzZWxmKToKKyAgICAgICAgICAgICMgSXNzdWUgIzIxMDE1OiBlbGxpcHRpYyBjdXJ2ZS1iYXNlZCBEaWZmaWUgSGVsbG1hbiBrZXkgZXhjaGFuZ2UKKyAgICAgICAgICAgICMgc2hvdWxkIGJlIGVuYWJsZWQgYnkgZGVmYXVsdCBvbiBTU0wgY29udGV4dHMuCisgICAgICAgICAgICBjb250ZXh0ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1NTTHYyMykKKyAgICAgICAgICAgIGNvbnRleHQubG9hZF9jZXJ0X2NoYWluKENFUlRGSUxFKQorICAgICAgICAgICAgIyBQcmlvciB0byBPcGVuU1NMIDEuMC4wLCBFQ0RIIGNpcGhlcnMgaGF2ZSB0byBiZSBlbmFibGVkCisgICAgICAgICAgICAjIGV4cGxpY2l0bHkgdXNpbmcgdGhlICdFQ0NkcmFmdCcgY2lwaGVyIGFsaWFzLiAgT3RoZXJ3aXNlLAorICAgICAgICAgICAgIyBvdXIgZGVmYXVsdCBjaXBoZXIgbGlzdCBzaG91bGQgcHJlZmVyIEVDREgtYmFzZWQgY2lwaGVycworICAgICAgICAgICAgIyBhdXRvbWF0aWNhbGx5LgorICAgICAgICAgICAgaWYgc3NsLk9QRU5TU0xfVkVSU0lPTl9JTkZPIDwgKDEsIDAsIDApOgorICAgICAgICAgICAgICAgIGNvbnRleHQuc2V0X2NpcGhlcnMoIkVDQ2RyYWZ0OkVDREgiKQorICAgICAgICAgICAgd2l0aCBUaHJlYWRlZEVjaG9TZXJ2ZXIoY29udGV4dD1jb250ZXh0KSBhcyBzZXJ2ZXI6CisgICAgICAgICAgICAgICAgd2l0aCBjb250ZXh0LndyYXBfc29ja2V0KHNvY2tldC5zb2NrZXQoKSkgYXMgczoKKyAgICAgICAgICAgICAgICAgICAgcy5jb25uZWN0KChIT1NULCBzZXJ2ZXIucG9ydCkpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oIkVDREgiLCBzLmNpcGhlcigpWzBdKQorCiAgICAgICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKCJ0bHMtdW5pcXVlIiBpbiBzc2wuQ0hBTk5FTF9CSU5ESU5HX1RZUEVTLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJ3Rscy11bmlxdWUnIGNoYW5uZWwgYmluZGluZyBub3QgYXZhaWxhYmxlIikKICAgICAgICAgZGVmIHRlc3RfdGxzX3VuaXF1ZV9jaGFubmVsX2JpbmRpbmcoc2VsZik6CkBAIC0yMTI5LDYgKzI3NjksMTI0IEBACiAgICAgICAgICAgICAgICAgICAgIGlmIGxlbihzdGF0c1snc2VydmVyX25wbl9wcm90b2NvbHMnXSkgZWxzZSAnbm90aGluZycKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlcnZlcl9yZXN1bHQsIGV4cGVjdGVkLCBtc2cgJSAoc2VydmVyX3Jlc3VsdCwgInNlcnZlciIpKQogCisgICAgICAgIGRlZiBzbmlfY29udGV4dHMoc2VsZik6CisgICAgICAgICAgICBzZXJ2ZXJfY29udGV4dCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MSkKKyAgICAgICAgICAgIHNlcnZlcl9jb250ZXh0LmxvYWRfY2VydF9jaGFpbihTSUdORURfQ0VSVEZJTEUpCisgICAgICAgICAgICBvdGhlcl9jb250ZXh0ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQorICAgICAgICAgICAgb3RoZXJfY29udGV4dC5sb2FkX2NlcnRfY2hhaW4oU0lHTkVEX0NFUlRGSUxFMikKKyAgICAgICAgICAgIGNsaWVudF9jb250ZXh0ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQorICAgICAgICAgICAgY2xpZW50X2NvbnRleHQudmVyaWZ5X21vZGUgPSBzc2wuQ0VSVF9SRVFVSVJFRAorICAgICAgICAgICAgY2xpZW50X2NvbnRleHQubG9hZF92ZXJpZnlfbG9jYXRpb25zKFNJR05JTkdfQ0EpCisgICAgICAgICAgICByZXR1cm4gc2VydmVyX2NvbnRleHQsIG90aGVyX2NvbnRleHQsIGNsaWVudF9jb250ZXh0CisKKyAgICAgICAgZGVmIGNoZWNrX2NvbW1vbl9uYW1lKHNlbGYsIHN0YXRzLCBuYW1lKToKKyAgICAgICAgICAgIGNlcnQgPSBzdGF0c1sncGVlcmNlcnQnXQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigoKCdjb21tb25OYW1lJywgbmFtZSksKSwgY2VydFsnc3ViamVjdCddKQorCisgICAgICAgIEBuZWVkc19zbmkKKyAgICAgICAgZGVmIHRlc3Rfc25pX2NhbGxiYWNrKHNlbGYpOgorICAgICAgICAgICAgY2FsbHMgPSBbXQorICAgICAgICAgICAgc2VydmVyX2NvbnRleHQsIG90aGVyX2NvbnRleHQsIGNsaWVudF9jb250ZXh0ID0gc2VsZi5zbmlfY29udGV4dHMoKQorCisgICAgICAgICAgICBkZWYgc2VydmVybmFtZV9jYihzc2xfc29jaywgc2VydmVyX25hbWUsIGluaXRpYWxfY29udGV4dCk6CisgICAgICAgICAgICAgICAgY2FsbHMuYXBwZW5kKChzZXJ2ZXJfbmFtZSwgaW5pdGlhbF9jb250ZXh0KSkKKyAgICAgICAgICAgICAgICBpZiBzZXJ2ZXJfbmFtZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgc3NsX3NvY2suY29udGV4dCA9IG90aGVyX2NvbnRleHQKKyAgICAgICAgICAgIHNlcnZlcl9jb250ZXh0LnNldF9zZXJ2ZXJuYW1lX2NhbGxiYWNrKHNlcnZlcm5hbWVfY2IpCisKKyAgICAgICAgICAgIHN0YXRzID0gc2VydmVyX3BhcmFtc190ZXN0KGNsaWVudF9jb250ZXh0LCBzZXJ2ZXJfY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXR0eT1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25pX25hbWU9J3N1cGVybWVzc2FnZScpCisgICAgICAgICAgICAjIFRoZSBob3N0bmFtZSB3YXMgZmV0Y2hlZCBwcm9wZXJseSwgYW5kIHRoZSBjZXJ0aWZpY2F0ZSB3YXMKKyAgICAgICAgICAgICMgY2hhbmdlZCBmb3IgdGhlIGNvbm5lY3Rpb24uCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhbGxzLCBbKCJzdXBlcm1lc3NhZ2UiLCBzZXJ2ZXJfY29udGV4dCldKQorICAgICAgICAgICAgIyBDRVJURklMRTQgd2FzIHNlbGVjdGVkCisgICAgICAgICAgICBzZWxmLmNoZWNrX2NvbW1vbl9uYW1lKHN0YXRzLCAnZmFrZWhvc3RuYW1lJykKKworICAgICAgICAgICAgY2FsbHMgPSBbXQorICAgICAgICAgICAgIyBUaGUgY2FsbGJhY2sgaXMgY2FsbGVkIHdpdGggc2VydmVyX25hbWU9Tm9uZQorICAgICAgICAgICAgc3RhdHMgPSBzZXJ2ZXJfcGFyYW1zX3Rlc3QoY2xpZW50X2NvbnRleHQsIHNlcnZlcl9jb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhdHR5PVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbmlfbmFtZT1Ob25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYWxscywgWyhOb25lLCBzZXJ2ZXJfY29udGV4dCldKQorICAgICAgICAgICAgc2VsZi5jaGVja19jb21tb25fbmFtZShzdGF0cywgJ2xvY2FsaG9zdCcpCisKKyAgICAgICAgICAgICMgQ2hlY2sgZGlzYWJsaW5nIHRoZSBjYWxsYmFjaworICAgICAgICAgICAgY2FsbHMgPSBbXQorICAgICAgICAgICAgc2VydmVyX2NvbnRleHQuc2V0X3NlcnZlcm5hbWVfY2FsbGJhY2soTm9uZSkKKworICAgICAgICAgICAgc3RhdHMgPSBzZXJ2ZXJfcGFyYW1zX3Rlc3QoY2xpZW50X2NvbnRleHQsIHNlcnZlcl9jb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhdHR5PVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbmlfbmFtZT0nbm90ZnVubnknKQorICAgICAgICAgICAgIyBDZXJ0aWZpY2F0ZSBkaWRuJ3QgY2hhbmdlCisgICAgICAgICAgICBzZWxmLmNoZWNrX2NvbW1vbl9uYW1lKHN0YXRzLCAnbG9jYWxob3N0JykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FsbHMsIFtdKQorCisgICAgICAgIEBuZWVkc19zbmkKKyAgICAgICAgZGVmIHRlc3Rfc25pX2NhbGxiYWNrX2FsZXJ0KHNlbGYpOgorICAgICAgICAgICAgIyBSZXR1cm5pbmcgYSBUTFMgYWxlcnQgaXMgcmVmbGVjdGVkIHRvIHRoZSBjb25uZWN0aW5nIGNsaWVudAorICAgICAgICAgICAgc2VydmVyX2NvbnRleHQsIG90aGVyX2NvbnRleHQsIGNsaWVudF9jb250ZXh0ID0gc2VsZi5zbmlfY29udGV4dHMoKQorCisgICAgICAgICAgICBkZWYgY2JfcmV0dXJuaW5nX2FsZXJ0KHNzbF9zb2NrLCBzZXJ2ZXJfbmFtZSwgaW5pdGlhbF9jb250ZXh0KToKKyAgICAgICAgICAgICAgICByZXR1cm4gc3NsLkFMRVJUX0RFU0NSSVBUSU9OX0FDQ0VTU19ERU5JRUQKKyAgICAgICAgICAgIHNlcnZlcl9jb250ZXh0LnNldF9zZXJ2ZXJuYW1lX2NhbGxiYWNrKGNiX3JldHVybmluZ19hbGVydCkKKworICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzc2wuU1NMRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgICAgIHN0YXRzID0gc2VydmVyX3BhcmFtc190ZXN0KGNsaWVudF9jb250ZXh0LCBzZXJ2ZXJfY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGF0dHk9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25pX25hbWU9J3N1cGVybWVzc2FnZScpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5yZWFzb24sICdUTFNWMV9BTEVSVF9BQ0NFU1NfREVOSUVEJykKKworICAgICAgICBAbmVlZHNfc25pCisgICAgICAgIGRlZiB0ZXN0X3NuaV9jYWxsYmFja19yYWlzaW5nKHNlbGYpOgorICAgICAgICAgICAgIyBSYWlzaW5nIGZhaWxzIHRoZSBjb25uZWN0aW9uIHdpdGggYSBUTFMgaGFuZHNoYWtlIGZhaWx1cmUgYWxlcnQuCisgICAgICAgICAgICBzZXJ2ZXJfY29udGV4dCwgb3RoZXJfY29udGV4dCwgY2xpZW50X2NvbnRleHQgPSBzZWxmLnNuaV9jb250ZXh0cygpCisKKyAgICAgICAgICAgIGRlZiBjYl9yYWlzaW5nKHNzbF9zb2NrLCBzZXJ2ZXJfbmFtZSwgaW5pdGlhbF9jb250ZXh0KToKKyAgICAgICAgICAgICAgICAxLzAKKyAgICAgICAgICAgIHNlcnZlcl9jb250ZXh0LnNldF9zZXJ2ZXJuYW1lX2NhbGxiYWNrKGNiX3JhaXNpbmcpCisKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc3NsLlNTTEVycm9yKSBhcyBjbSwgXAorICAgICAgICAgICAgICAgICBzdXBwb3J0LmNhcHR1cmVkX3N0ZGVycigpIGFzIHN0ZGVycjoKKyAgICAgICAgICAgICAgICBzdGF0cyA9IHNlcnZlcl9wYXJhbXNfdGVzdChjbGllbnRfY29udGV4dCwgc2VydmVyX2NvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhdHR5PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNuaV9uYW1lPSdzdXBlcm1lc3NhZ2UnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24ucmVhc29uLCAnU1NMVjNfQUxFUlRfSEFORFNIQUtFX0ZBSUxVUkUnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigiWmVyb0RpdmlzaW9uRXJyb3IiLCBzdGRlcnIuZ2V0dmFsdWUoKSkKKworICAgICAgICBAbmVlZHNfc25pCisgICAgICAgIGRlZiB0ZXN0X3NuaV9jYWxsYmFja193cm9uZ19yZXR1cm5fdHlwZShzZWxmKToKKyAgICAgICAgICAgICMgUmV0dXJuaW5nIHRoZSB3cm9uZyByZXR1cm4gdHlwZSB0ZXJtaW5hdGVzIHRoZSBUTFMgY29ubmVjdGlvbgorICAgICAgICAgICAgIyB3aXRoIGFuIGludGVybmFsIGVycm9yIGFsZXJ0LgorICAgICAgICAgICAgc2VydmVyX2NvbnRleHQsIG90aGVyX2NvbnRleHQsIGNsaWVudF9jb250ZXh0ID0gc2VsZi5zbmlfY29udGV4dHMoKQorCisgICAgICAgICAgICBkZWYgY2Jfd3JvbmdfcmV0dXJuX3R5cGUoc3NsX3NvY2ssIHNlcnZlcl9uYW1lLCBpbml0aWFsX2NvbnRleHQpOgorICAgICAgICAgICAgICAgIHJldHVybiAiZm9vIgorICAgICAgICAgICAgc2VydmVyX2NvbnRleHQuc2V0X3NlcnZlcm5hbWVfY2FsbGJhY2soY2Jfd3JvbmdfcmV0dXJuX3R5cGUpCisKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc3NsLlNTTEVycm9yKSBhcyBjbSwgXAorICAgICAgICAgICAgICAgICBzdXBwb3J0LmNhcHR1cmVkX3N0ZGVycigpIGFzIHN0ZGVycjoKKyAgICAgICAgICAgICAgICBzdGF0cyA9IHNlcnZlcl9wYXJhbXNfdGVzdChjbGllbnRfY29udGV4dCwgc2VydmVyX2NvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhdHR5PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNuaV9uYW1lPSdzdXBlcm1lc3NhZ2UnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24ucmVhc29uLCAnVExTVjFfQUxFUlRfSU5URVJOQUxfRVJST1InKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigiVHlwZUVycm9yIiwgc3RkZXJyLmdldHZhbHVlKCkpCisKKyAgICAgICAgZGVmIHRlc3RfcmVhZF93cml0ZV9hZnRlcl9jbG9zZV9yYWlzZXNfdmFsdWVycm9yKHNlbGYpOgorICAgICAgICAgICAgY29udGV4dCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9TU0x2MjMpCisgICAgICAgICAgICBjb250ZXh0LnZlcmlmeV9tb2RlID0gc3NsLkNFUlRfUkVRVUlSRUQKKyAgICAgICAgICAgIGNvbnRleHQubG9hZF92ZXJpZnlfbG9jYXRpb25zKENFUlRGSUxFKQorICAgICAgICAgICAgY29udGV4dC5sb2FkX2NlcnRfY2hhaW4oQ0VSVEZJTEUpCisgICAgICAgICAgICBzZXJ2ZXIgPSBUaHJlYWRlZEVjaG9TZXJ2ZXIoY29udGV4dD1jb250ZXh0LCBjaGF0dHk9RmFsc2UpCisKKyAgICAgICAgICAgIHdpdGggc2VydmVyOgorICAgICAgICAgICAgICAgIHMgPSBjb250ZXh0LndyYXBfc29ja2V0KHNvY2tldC5zb2NrZXQoKSkKKyAgICAgICAgICAgICAgICBzLmNvbm5lY3QoKEhPU1QsIHNlcnZlci5wb3J0KSkKKyAgICAgICAgICAgICAgICBzLmNsb3NlKCkKKworICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHMucmVhZCwgMTAyNCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzLndyaXRlLCBiJ2hlbGxvJykKKwogCiBkZWYgdGVzdF9tYWluKHZlcmJvc2U9RmFsc2UpOgogICAgIGlmIHN1cHBvcnQudmVyYm9zZToKQEAgLTIxNDgsMTAgKzI5MDYsMTYgQEAKICAgICAgICAgICAgIChzc2wuT1BFTlNTTF9WRVJTSU9OLCBzc2wuT1BFTlNTTF9WRVJTSU9OX0lORk8pKQogICAgICAgICBwcmludCgiICAgICAgICAgIHVuZGVyICVzIiAlIHBsYXQpCiAgICAgICAgIHByaW50KCIgICAgICAgICAgSEFTX1NOSSA9ICVyIiAlIHNzbC5IQVNfU05JKQorICAgICAgICBwcmludCgiICAgICAgICAgIE9QX0FMTCA9IDB4JTh4IiAlIHNzbC5PUF9BTEwpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHByaW50KCIgICAgICAgICAgT1BfTk9fVExTdjFfMSA9IDB4JTh4IiAlIHNzbC5PUF9OT19UTFN2MV8xKQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBwYXNzCiAKICAgICBmb3IgZmlsZW5hbWUgaW4gWwogICAgICAgICBDRVJURklMRSwgU1ZOX1BZVEhPTl9PUkdfUk9PVF9DRVJULCBCWVRFU19DRVJURklMRSwKICAgICAgICAgT05MWUNFUlQsIE9OTFlLRVksIEJZVEVTX09OTFlDRVJULCBCWVRFU19PTkxZS0VZLAorICAgICAgICBTSUdORURfQ0VSVEZJTEUsIFNJR05FRF9DRVJURklMRTIsIFNJR05JTkdfQ0EsCiAgICAgICAgIEJBRENFUlQsIEJBREtFWSwgRU1QVFlDRVJUXToKICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGZpbGVuYW1lKToKICAgICAgICAgICAgIHJhaXNlIHN1cHBvcnQuVGVzdEZhaWxlZCgiQ2FuJ3QgcmVhZCBjZXJ0aWZpY2F0ZSBmaWxlICVyIiAlIGZpbGVuYW1lKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zdGF0LnB5IGIvTGliL3Rlc3QvdGVzdF9zdGF0LnB5CmluZGV4IGViM2YwN2EuLmFmNmNlZDQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc3RhdC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3N0YXQucHkKQEAgLTEsOSArMSwxMyBAQAogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgb3MKLWZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBURVNURk4sIHJ1bl91bml0dGVzdCwgaW1wb3J0X2ZyZXNoX21vZHVsZQotaW1wb3J0IHN0YXQKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBURVNURk4sIGltcG9ydF9mcmVzaF9tb2R1bGUKIAotY2xhc3MgVGVzdEZpbGVtb2RlKHVuaXR0ZXN0LlRlc3RDYXNlKToKK2Nfc3RhdCA9IGltcG9ydF9mcmVzaF9tb2R1bGUoJ3N0YXQnLCBmcmVzaD1bJ19zdGF0J10pCitweV9zdGF0ID0gaW1wb3J0X2ZyZXNoX21vZHVsZSgnc3RhdCcsIGJsb2NrZWQ9Wydfc3RhdCddKQorCitjbGFzcyBUZXN0RmlsZW1vZGU6CisgICAgc3RhdG1vZCA9IE5vbmUKKwogICAgIGZpbGVfZmxhZ3MgPSB7J1NGX0FQUEVORCcsICdTRl9BUkNISVZFRCcsICdTRl9JTU1VVEFCTEUnLCAnU0ZfTk9VTkxJTksnLAogICAgICAgICAgICAgICAgICAgJ1NGX1NOQVBTSE9UJywgJ1VGX0FQUEVORCcsICdVRl9DT01QUkVTU0VEJywgJ1VGX0hJRERFTicsCiAgICAgICAgICAgICAgICAgICAnVUZfSU1NVVRBQkxFJywgJ1VGX05PRFVNUCcsICdVRl9OT1VOTElOSycsICdVRl9PUEFRVUUnfQpAQCAtNjMsMTcgKzY3LDE3IEBACiAgICAgICAgICAgICBzdF9tb2RlID0gb3MubHN0YXQoZm5hbWUpLnN0X21vZGUKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHN0X21vZGUgPSBvcy5zdGF0KGZuYW1lKS5zdF9tb2RlCi0gICAgICAgIG1vZGVzdHIgPSBzdGF0LmZpbGVtb2RlKHN0X21vZGUpCisgICAgICAgIG1vZGVzdHIgPSBzZWxmLnN0YXRtb2QuZmlsZW1vZGUoc3RfbW9kZSkKICAgICAgICAgcmV0dXJuIHN0X21vZGUsIG1vZGVzdHIKIAogICAgIGRlZiBhc3NlcnRTX0lTKHNlbGYsIG5hbWUsIG1vZGUpOgogICAgICAgICAjIHRlc3QgZm9ybWF0LCBsc3RyaXAgaXMgZm9yIFNfSUZJRk8KLSAgICAgICAgZm10ID0gZ2V0YXR0cihzdGF0LCAiU19JRiIgKyBuYW1lLmxzdHJpcCgiRiIpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXQuU19JRk1UKG1vZGUpLCBmbXQpCisgICAgICAgIGZtdCA9IGdldGF0dHIoc2VsZi5zdGF0bW9kLCAiU19JRiIgKyBuYW1lLmxzdHJpcCgiRiIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc3RhdG1vZC5TX0lGTVQobW9kZSksIGZtdCkKICAgICAgICAgIyB0ZXN0IHRoYXQganVzdCBvbmUgZnVuY3Rpb24gcmV0dXJucyB0cnVlCiAgICAgICAgIHRlc3RuYW1lID0gIlNfSVMiICsgbmFtZQogICAgICAgICBmb3IgZnVuY25hbWUgaW4gc2VsZi5mb3JtYXRfZnVuY3M6Ci0gICAgICAgICAgICBmdW5jID0gZ2V0YXR0cihzdGF0LCBmdW5jbmFtZSwgTm9uZSkKKyAgICAgICAgICAgIGZ1bmMgPSBnZXRhdHRyKHNlbGYuc3RhdG1vZCwgZnVuY25hbWUsIE5vbmUpCiAgICAgICAgICAgICBpZiBmdW5jIGlzIE5vbmU6CiAgICAgICAgICAgICAgICAgaWYgZnVuY25hbWUgPT0gdGVzdG5hbWU6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoZnVuY25hbWUpCkBAIC05MSwzNSArOTUsMzUgQEAKICAgICAgICAgICAgIHN0X21vZGUsIG1vZGVzdHIgPSBzZWxmLmdldF9tb2RlKCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kZXN0ciwgJy1yd3gtLS0tLS0nKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRTX0lTKCJSRUciLCBzdF9tb2RlKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0LlNfSU1PREUoc3RfbW9kZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuU19JUldYVSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zdGF0bW9kLlNfSU1PREUoc3RfbW9kZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc3RhdG1vZC5TX0lSV1hVKQogCiAgICAgICAgICAgICBvcy5jaG1vZChURVNURk4sIDBvMDcwKQogICAgICAgICAgICAgc3RfbW9kZSwgbW9kZXN0ciA9IHNlbGYuZ2V0X21vZGUoKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2Rlc3RyLCAnLS0tLXJ3eC0tLScpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFNfSVMoIlJFRyIsIHN0X21vZGUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXQuU19JTU9ERShzdF9tb2RlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5TX0lSV1hHKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnN0YXRtb2QuU19JTU9ERShzdF9tb2RlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zdGF0bW9kLlNfSVJXWEcpCiAKICAgICAgICAgICAgIG9zLmNobW9kKFRFU1RGTiwgMG8wMDcpCiAgICAgICAgICAgICBzdF9tb2RlLCBtb2Rlc3RyID0gc2VsZi5nZXRfbW9kZSgpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZGVzdHIsICctLS0tLS0tcnd4JykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0U19JUygiUkVHIiwgc3RfbW9kZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdC5TX0lNT0RFKHN0X21vZGUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LlNfSVJXWE8pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc3RhdG1vZC5TX0lNT0RFKHN0X21vZGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnN0YXRtb2QuU19JUldYTykKIAogICAgICAgICAgICAgb3MuY2htb2QoVEVTVEZOLCAwbzQ0NCkKICAgICAgICAgICAgIHN0X21vZGUsIG1vZGVzdHIgPSBzZWxmLmdldF9tb2RlKCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0U19JUygiUkVHIiwgc3RfbW9kZSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kZXN0ciwgJy1yLS1yLS1yLS0nKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0LlNfSU1PREUoc3RfbW9kZSksIDBvNDQ0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnN0YXRtb2QuU19JTU9ERShzdF9tb2RlKSwgMG80NDQpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBvcy5jaG1vZChURVNURk4sIDBvNzAwKQogICAgICAgICAgICAgc3RfbW9kZSwgbW9kZXN0ciA9IHNlbGYuZ2V0X21vZGUoKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2Rlc3RyWzozXSwgJy1ydycpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFNfSVMoIlJFRyIsIHN0X21vZGUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXQuU19JRk1UKHN0X21vZGUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LlNfSUZSRUcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc3RhdG1vZC5TX0lGTVQoc3RfbW9kZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc3RhdG1vZC5TX0lGUkVHKQogCiAgICAgZGVmIHRlc3RfZGlyZWN0b3J5KHNlbGYpOgogICAgICAgICBvcy5ta2RpcihURVNURk4pCkBAIC0xNjUsMjUgKzE2OSwzNCBAQAogCiAgICAgZGVmIHRlc3RfbW9kdWxlX2F0dHJpYnV0ZXMoc2VsZik6CiAgICAgICAgIGZvciBrZXksIHZhbHVlIGluIHNlbGYuc3RhdF9zdHJ1Y3QuaXRlbXMoKToKLSAgICAgICAgICAgIG1vZHZhbHVlID0gZ2V0YXR0cihzdGF0LCBrZXkpCisgICAgICAgICAgICBtb2R2YWx1ZSA9IGdldGF0dHIoc2VsZi5zdGF0bW9kLCBrZXkpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlLCBtb2R2YWx1ZSwga2V5KQogICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBzZWxmLnBlcm1pc3Npb25fYml0cy5pdGVtcygpOgotICAgICAgICAgICAgbW9kdmFsdWUgPSBnZXRhdHRyKHN0YXQsIGtleSkKKyAgICAgICAgICAgIG1vZHZhbHVlID0gZ2V0YXR0cihzZWxmLnN0YXRtb2QsIGtleSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWUsIG1vZHZhbHVlLCBrZXkpCiAgICAgICAgIGZvciBrZXkgaW4gc2VsZi5maWxlX2ZsYWdzOgotICAgICAgICAgICAgbW9kdmFsdWUgPSBnZXRhdHRyKHN0YXQsIGtleSkKKyAgICAgICAgICAgIG1vZHZhbHVlID0gZ2V0YXR0cihzZWxmLnN0YXRtb2QsIGtleSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShtb2R2YWx1ZSwgaW50KQogICAgICAgICBmb3Iga2V5IGluIHNlbGYuZm9ybWF0czoKLSAgICAgICAgICAgIG1vZHZhbHVlID0gZ2V0YXR0cihzdGF0LCBrZXkpCisgICAgICAgICAgICBtb2R2YWx1ZSA9IGdldGF0dHIoc2VsZi5zdGF0bW9kLCBrZXkpCiAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UobW9kdmFsdWUsIGludCkKICAgICAgICAgZm9yIGtleSBpbiBzZWxmLmZvcm1hdF9mdW5jczoKLSAgICAgICAgICAgIGZ1bmMgPSBnZXRhdHRyKHN0YXQsIGtleSkKKyAgICAgICAgICAgIGZ1bmMgPSBnZXRhdHRyKHNlbGYuc3RhdG1vZCwga2V5KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNhbGxhYmxlKGZ1bmMpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmdW5jKDApLCAwKQogCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBydW5fdW5pdHRlc3QoVGVzdEZpbGVtb2RlKQorY2xhc3MgVGVzdEZpbGVtb2RlQ1N0YXQoVGVzdEZpbGVtb2RlLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgc3RhdG1vZCA9IGNfc3RhdAorCisgICAgZm9ybWF0cyA9IFRlc3RGaWxlbW9kZS5mb3JtYXRzIHwgeydTX0lGRE9PUicsICdTX0lGUE9SVCcsICdTX0lGV0hUJ30KKyAgICBmb3JtYXRfZnVuY3MgPSBUZXN0RmlsZW1vZGUuZm9ybWF0X2Z1bmNzIHwgeydTX0lTRE9PUicsICdTX0lTUE9SVCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU19JU1dIVCd9CisKKworY2xhc3MgVGVzdEZpbGVtb2RlUHlTdGF0KFRlc3RGaWxlbW9kZSwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIHN0YXRtb2QgPSBweV9zdGF0CisKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zdGF0aXN0aWNzLnB5IGIvTGliL3Rlc3QvdGVzdF9zdGF0aXN0aWNzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwODlhZTgKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X3N0YXRpc3RpY3MucHkKQEAgLTAsMCArMSwxODQwIEBACisiIiJUZXN0IHN1aXRlIGZvciBzdGF0aXN0aWNzIG1vZHVsZSwgaW5jbHVkaW5nIGhlbHBlciBOdW1lcmljVGVzdENhc2UgYW5kCithcHByb3hfZXF1YWwgZnVuY3Rpb24uCisKKyIiIgorCitpbXBvcnQgY29sbGVjdGlvbnMKK2ltcG9ydCBkZWNpbWFsCitpbXBvcnQgZG9jdGVzdAoraW1wb3J0IG1hdGgKK2ltcG9ydCByYW5kb20KK2ltcG9ydCBzeXMKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGRlY2ltYWwgaW1wb3J0IERlY2ltYWwKK2Zyb20gZnJhY3Rpb25zIGltcG9ydCBGcmFjdGlvbgorCisKKyMgTW9kdWxlIHRvIGJlIHRlc3RlZC4KK2ltcG9ydCBzdGF0aXN0aWNzCisKKworIyA9PT0gSGVscGVyIGZ1bmN0aW9ucyBhbmQgY2xhc3MgPT09CisKK2RlZiBfbmFuX2VxdWFsKGEsIGIpOgorICAgICIiIlJldHVybiBUcnVlIGlmIGEgYW5kIGIgYXJlIGJvdGggdGhlIHNhbWUga2luZCBvZiBOQU4uCisKKyAgICA+Pj4gX25hbl9lcXVhbChEZWNpbWFsKCdOQU4nKSwgRGVjaW1hbCgnTkFOJykpCisgICAgVHJ1ZQorICAgID4+PiBfbmFuX2VxdWFsKERlY2ltYWwoJ3NOQU4nKSwgRGVjaW1hbCgnc05BTicpKQorICAgIFRydWUKKyAgICA+Pj4gX25hbl9lcXVhbChEZWNpbWFsKCdOQU4nKSwgRGVjaW1hbCgnc05BTicpKQorICAgIEZhbHNlCisgICAgPj4+IF9uYW5fZXF1YWwoRGVjaW1hbCg0MiksIERlY2ltYWwoJ05BTicpKQorICAgIEZhbHNlCisKKyAgICA+Pj4gX25hbl9lcXVhbChmbG9hdCgnTkFOJyksIGZsb2F0KCdOQU4nKSkKKyAgICBUcnVlCisgICAgPj4+IF9uYW5fZXF1YWwoZmxvYXQoJ05BTicpLCAwLjUpCisgICAgRmFsc2UKKworICAgID4+PiBfbmFuX2VxdWFsKGZsb2F0KCdOQU4nKSwgRGVjaW1hbCgnTkFOJykpCisgICAgRmFsc2UKKworICAgIE5BTiBwYXlsb2FkcyBhcmUgbm90IGNvbXBhcmVkLgorICAgICIiIgorICAgIGlmIHR5cGUoYSkgaXMgbm90IHR5cGUoYik6CisgICAgICAgIHJldHVybiBGYWxzZQorICAgIGlmIGlzaW5zdGFuY2UoYSwgZmxvYXQpOgorICAgICAgICByZXR1cm4gbWF0aC5pc25hbihhKSBhbmQgbWF0aC5pc25hbihiKQorICAgIGFleHAgPSBhLmFzX3R1cGxlKClbMl0KKyAgICBiZXhwID0gYi5hc190dXBsZSgpWzJdCisgICAgcmV0dXJuIChhZXhwID09IGJleHApIGFuZCAoYWV4cCBpbiAoJ24nLCAnTicpKSAgIyBCb3RoIE5BTiBvciBib3RoIHNOQU4uCisKKworZGVmIF9jYWxjX2Vycm9ycyhhY3R1YWwsIGV4cGVjdGVkKToKKyAgICAiIiJSZXR1cm4gdGhlIGFic29sdXRlIGFuZCByZWxhdGl2ZSBlcnJvcnMgYmV0d2VlbiB0d28gbnVtYmVycy4KKworICAgID4+PiBfY2FsY19lcnJvcnMoMTAwLCA3NSkKKyAgICAoMjUsIDAuMjUpCisgICAgPj4+IF9jYWxjX2Vycm9ycygxMDAsIDEwMCkKKyAgICAoMCwgMC4wKQorCisgICAgUmV0dXJucyB0aGUgKGFic29sdXRlIGVycm9yLCByZWxhdGl2ZSBlcnJvcikgYmV0d2VlbiB0aGUgdHdvIGFyZ3VtZW50cy4KKyAgICAiIiIKKyAgICBiYXNlID0gbWF4KGFicyhhY3R1YWwpLCBhYnMoZXhwZWN0ZWQpKQorICAgIGFic19lcnIgPSBhYnMoYWN0dWFsIC0gZXhwZWN0ZWQpCisgICAgcmVsX2VyciA9IGFic19lcnIvYmFzZSBpZiBiYXNlIGVsc2UgZmxvYXQoJ2luZicpCisgICAgcmV0dXJuIChhYnNfZXJyLCByZWxfZXJyKQorCisKK2RlZiBhcHByb3hfZXF1YWwoeCwgeSwgdG9sPTFlLTEyLCByZWw9MWUtNyk6CisgICAgIiIiYXBwcm94X2VxdWFsKHgsIHkgWywgdG9sIFssIHJlbF1dKSA9PiBUcnVlfEZhbHNlCisKKyAgICBSZXR1cm4gVHJ1ZSBpZiBudW1iZXJzIHggYW5kIHkgYXJlIGFwcHJveGltYXRlbHkgZXF1YWwsIHRvIHdpdGhpbiBzb21lCisgICAgbWFyZ2luIG9mIGVycm9yLCBvdGhlcndpc2UgcmV0dXJuIEZhbHNlLiBOdW1iZXJzIHdoaWNoIGNvbXBhcmUgZXF1YWwKKyAgICB3aWxsIGFsc28gY29tcGFyZSBhcHByb3hpbWF0ZWx5IGVxdWFsLgorCisgICAgeCBpcyBhcHByb3hpbWF0ZWx5IGVxdWFsIHRvIHkgaWYgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGVtIGlzIGxlc3MgdGhhbgorICAgIGFuIGFic29sdXRlIGVycm9yIHRvbCBvciBhIHJlbGF0aXZlIGVycm9yIHJlbCwgd2hpY2hldmVyIGlzIGJpZ2dlci4KKworICAgIElmIGdpdmVuLCBib3RoIHRvbCBhbmQgcmVsIG11c3QgYmUgZmluaXRlLCBub24tbmVnYXRpdmUgbnVtYmVycy4gSWYgbm90CisgICAgZ2l2ZW4sIGRlZmF1bHQgdmFsdWVzIGFyZSB0b2w9MWUtMTIgYW5kIHJlbD0xZS03LgorCisgICAgPj4+IGFwcHJveF9lcXVhbCgxLjI1ODksIDEuMjU4NywgdG9sPTAuMDAwMywgcmVsPTApCisgICAgVHJ1ZQorICAgID4+PiBhcHByb3hfZXF1YWwoMS4yNTg5LCAxLjI1ODcsIHRvbD0wLjAwMDEsIHJlbD0wKQorICAgIEZhbHNlCisKKyAgICBBYnNvbHV0ZSBlcnJvciBpcyBkZWZpbmVkIGFzIGFicyh4LXkpOyBpZiB0aGF0IGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0bworICAgIHRvbCwgeCBhbmQgeSBhcmUgY29uc2lkZXJlZCBhcHByb3hpbWF0ZWx5IGVxdWFsLgorCisgICAgUmVsYXRpdmUgZXJyb3IgaXMgZGVmaW5lZCBhcyBhYnMoKHgteSkveCkgb3IgYWJzKCh4LXkpL3kpLCB3aGljaGV2ZXIgaXMKKyAgICBzbWFsbGVyLCBwcm92aWRlZCB4IG9yIHkgYXJlIG5vdCB6ZXJvLiBJZiB0aGF0IGZpZ3VyZSBpcyBsZXNzIHRoYW4gb3IKKyAgICBlcXVhbCB0byByZWwsIHggYW5kIHkgYXJlIGNvbnNpZGVyZWQgYXBwcm94aW1hdGVseSBlcXVhbC4KKworICAgIENvbXBsZXggbnVtYmVycyBhcmUgbm90IGRpcmVjdGx5IHN1cHBvcnRlZC4gSWYgeW91IHdpc2ggdG8gY29tcGFyZSB0bworICAgIGNvbXBsZXggbnVtYmVycywgZXh0cmFjdCB0aGVpciByZWFsIGFuZCBpbWFnaW5hcnkgcGFydHMgYW5kIGNvbXBhcmUgdGhlbQorICAgIGluZGl2aWR1YWxseS4KKworICAgIE5BTnMgYWx3YXlzIGNvbXBhcmUgdW5lcXVhbCwgZXZlbiB3aXRoIHRoZW1zZWx2ZXMuIEluZmluaXRpZXMgY29tcGFyZQorICAgIGFwcHJveGltYXRlbHkgZXF1YWwgaWYgdGhleSBoYXZlIHRoZSBzYW1lIHNpZ24gKGJvdGggcG9zaXRpdmUgb3IgYm90aAorICAgIG5lZ2F0aXZlKS4gSW5maW5pdGllcyB3aXRoIGRpZmZlcmVudCBzaWducyBjb21wYXJlIHVuZXF1YWw7IHNvIGRvCisgICAgY29tcGFyaXNvbnMgb2YgaW5maW5pdGllcyB3aXRoIGZpbml0ZSBudW1iZXJzLgorICAgICIiIgorICAgIGlmIHRvbCA8IDAgb3IgcmVsIDwgMDoKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignZXJyb3IgdG9sZXJhbmNlcyBtdXN0IGJlIG5vbi1uZWdhdGl2ZScpCisgICAgIyBOQU5zIGFyZSBuZXZlciBlcXVhbCB0byBhbnl0aGluZywgYXBwcm94aW1hdGVseSBvciBvdGhlcndpc2UuCisgICAgaWYgbWF0aC5pc25hbih4KSBvciBtYXRoLmlzbmFuKHkpOgorICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAjIE51bWJlcnMgd2hpY2ggY29tcGFyZSBlcXVhbCBhbHNvIGNvbXBhcmUgYXBwcm94aW1hdGVseSBlcXVhbC4KKyAgICBpZiB4ID09IHk6CisgICAgICAgICMgVGhpcyBpbmNsdWRlcyB0aGUgY2FzZSBvZiB0d28gaW5maW5pdGllcyB3aXRoIHRoZSBzYW1lIHNpZ24uCisgICAgICAgIHJldHVybiBUcnVlCisgICAgaWYgbWF0aC5pc2luZih4KSBvciBtYXRoLmlzaW5mKHkpOgorICAgICAgICAjIFRoaXMgaW5jbHVkZXMgdGhlIGNhc2Ugb2YgdHdvIGluZmluaXRpZXMgb2Ygb3Bwb3NpdGUgc2lnbiwgb3IKKyAgICAgICAgIyBvbmUgaW5maW5pdHkgYW5kIG9uZSBmaW5pdGUgbnVtYmVyLgorICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAjIFR3byBmaW5pdGUgbnVtYmVycy4KKyAgICBhY3R1YWxfZXJyb3IgPSBhYnMoeCAtIHkpCisgICAgYWxsb3dlZF9lcnJvciA9IG1heCh0b2wsIHJlbCptYXgoYWJzKHgpLCBhYnMoeSkpKQorICAgIHJldHVybiBhY3R1YWxfZXJyb3IgPD0gYWxsb3dlZF9lcnJvcgorCisKKyMgVGhpcyBjbGFzcyBleGlzdHMgb25seSBhcyBzb21ld2hlcmUgdG8gc3RpY2sgYSBkb2NzdHJpbmcgY29udGFpbmluZworIyBkb2N0ZXN0cy4gVGhlIGZvbGxvd2luZyBkb2NzdHJpbmcgYW5kIHRlc3RzIHdlcmUgb3JpZ2luYWxseSBpbiBhIHNlcGFyYXRlCisjIG1vZHVsZS4gTm93IHRoYXQgaXQgaGFzIGJlZW4gbWVyZ2VkIGluIGhlcmUsIEkgbmVlZCBzb21ld2hlcmUgdG8gaGFuZyB0aGUuCisjIGRvY3N0cmluZy4gVWx0aW1hdGVseSwgdGhpcyBjbGFzcyB3aWxsIGRpZSwgYW5kIHRoZSBpbmZvcm1hdGlvbiBiZWxvdyB3aWxsCisjIGVpdGhlciBiZWNvbWUgcmVkdW5kYW50LCBvciBiZSBtb3ZlZCBpbnRvIG1vcmUgYXBwcm9wcmlhdGUgcGxhY2VzLgorY2xhc3MgX0RvTm90aGluZzoKKyAgICAiIiIKKyAgICBXaGVuIGRvaW5nIG51bWVyaWMgd29yaywgZXNwZWNpYWxseSB3aXRoIGZsb2F0cywgZXhhY3QgZXF1YWxpdHkgaXMgb2Z0ZW4KKyAgICBub3Qgd2hhdCB5b3Ugd2FudC4gRHVlIHRvIHJvdW5kLW9mZiBlcnJvciwgaXQgaXMgb2Z0ZW4gYSBiYWQgaWRlYSB0byB0cnkKKyAgICB0byBjb21wYXJlIGZsb2F0cyB3aXRoIGVxdWFsaXR5LiBJbnN0ZWFkIHRoZSB1c3VhbCBwcm9jZWR1cmUgaXMgdG8gdGVzdAorICAgIHRoZW0gd2l0aCBzb21lIChob3BlZnVsbHkgc21hbGwhKSBhbGxvd2FuY2UgZm9yIGVycm9yLgorCisgICAgVGhlIGBgYXBwcm94X2VxdWFsYGAgZnVuY3Rpb24gYWxsb3dzIHlvdSB0byBzcGVjaWZ5IGVpdGhlciBhbiBhYnNvbHV0ZQorICAgIGVycm9yIHRvbGVyYW5jZSwgb3IgYSByZWxhdGl2ZSBlcnJvciwgb3IgYm90aC4KKworICAgIEFic29sdXRlIGVycm9yIHRvbGVyYW5jZXMgYXJlIHNpbXBsZSwgYnV0IHlvdSBuZWVkIHRvIGtub3cgdGhlIG1hZ25pdHVkZQorICAgIG9mIHRoZSBxdWFudGl0aWVzIGJlaW5nIGNvbXBhcmVkOgorCisgICAgPj4+IGFwcHJveF9lcXVhbCgxMi4zNDUsIDEyLjM0NiwgdG9sPTFlLTMpCisgICAgVHJ1ZQorICAgID4+PiBhcHByb3hfZXF1YWwoMTIuMzQ1ZTYsIDEyLjM0NmU2LCB0b2w9MWUtMykgICMgdG9sIGlzIHRvbyBzbWFsbC4KKyAgICBGYWxzZQorCisgICAgUmVsYXRpdmUgZXJyb3JzIGFyZSBtb3JlIHN1aXRhYmxlIHdoZW4gdGhlIHZhbHVlcyB5b3UgYXJlIGNvbXBhcmluZyBjYW4KKyAgICB2YXJ5IGluIG1hZ25pdHVkZToKKworICAgID4+PiBhcHByb3hfZXF1YWwoMTIuMzQ1LCAxMi4zNDYsIHJlbD0xZS00KQorICAgIFRydWUKKyAgICA+Pj4gYXBwcm94X2VxdWFsKDEyLjM0NWU2LCAxMi4zNDZlNiwgcmVsPTFlLTQpCisgICAgVHJ1ZQorCisgICAgYnV0IGEgbmFpdmUgaW1wbGVtZW50YXRpb24gb2YgcmVsYXRpdmUgZXJyb3IgdGVzdGluZyBjYW4gcnVuIGludG8gdHJvdWJsZQorICAgIGFyb3VuZCB6ZXJvLgorCisgICAgSWYgeW91IHN1cHBseSBib3RoIGFuIGFic29sdXRlIHRvbGVyYW5jZSBhbmQgYSByZWxhdGl2ZSBlcnJvciwgdGhlCisgICAgY29tcGFyaXNvbiBzdWNjZWVkcyBpZiBlaXRoZXIgaW5kaXZpZHVhbCB0ZXN0IHN1Y2NlZWRzOgorCisgICAgPj4+IGFwcHJveF9lcXVhbCgxMi4zNDVlNiwgMTIuMzQ2ZTYsIHRvbD0xZS0zLCByZWw9MWUtNCkKKyAgICBUcnVlCisKKyAgICAiIiIKKyAgICBwYXNzCisKKworCisjIFdlIHByZWZlciB0aGlzIGZvciB0ZXN0aW5nIG51bWVyaWMgdmFsdWVzIHRoYXQgbWF5IG5vdCBiZSBleGFjdGx5IGVxdWFsLAorIyBhbmQgYXZvaWQgdXNpbmcgVGVzdENhc2UuYXNzZXJ0QWxtb3N0RXF1YWwsIGJlY2F1c2UgaXQgc3Vja3MgOi0pCisKK2NsYXNzIE51bWVyaWNUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiVW5pdCB0ZXN0IGNsYXNzIGZvciBudW1lcmljIHdvcmsuCisKKyAgICBUaGlzIHN1YmNsYXNzZXMgVGVzdENhc2UuIEluIGFkZGl0aW9uIHRvIHRoZSBzdGFuZGFyZCBtZXRob2QKKyAgICBgYFRlc3RDYXNlLmFzc2VydEFsbW9zdEVxdWFsYGAsICBgYGFzc2VydEFwcHJveEVxdWFsYGAgaXMgcHJvdmlkZWQuCisgICAgIiIiCisgICAgIyBCeSBkZWZhdWx0LCB3ZSBleHBlY3QgZXhhY3QgZXF1YWxpdHksIHVubGVzcyBvdmVycmlkZGVuLgorICAgIHRvbCA9IHJlbCA9IDAKKworICAgIGRlZiBhc3NlcnRBcHByb3hFcXVhbCgKKyAgICAgICAgICAgIHNlbGYsIGZpcnN0LCBzZWNvbmQsIHRvbD1Ob25lLCByZWw9Tm9uZSwgbXNnPU5vbmUKKyAgICAgICAgICAgICk6CisgICAgICAgICIiIlRlc3QgcGFzc2VzIGlmIGBgZmlyc3RgYCBhbmQgYGBzZWNvbmRgYCBhcmUgYXBwcm94aW1hdGVseSBlcXVhbC4KKworICAgICAgICBUaGlzIHRlc3QgcGFzc2VzIGlmIGBgZmlyc3RgYCBhbmQgYGBzZWNvbmRgYCBhcmUgZXF1YWwgdG8KKyAgICAgICAgd2l0aGluIGBgdG9sYGAsIGFuIGFic29sdXRlIGVycm9yLCBvciBgYHJlbGBgLCBhIHJlbGF0aXZlIGVycm9yLgorCisgICAgICAgIElmIGVpdGhlciBgYHRvbGBgIG9yIGBgcmVsYGAgYXJlIE5vbmUgb3Igbm90IGdpdmVuLCB0aGV5IGRlZmF1bHQgdG8KKyAgICAgICAgdGVzdCBhdHRyaWJ1dGVzIG9mIHRoZSBzYW1lIG5hbWUgKGJ5IGRlZmF1bHQsIDApLgorCisgICAgICAgIFRoZSBvYmplY3RzIG1heSBiZSBlaXRoZXIgbnVtYmVycywgb3Igc2VxdWVuY2VzIG9mIG51bWJlcnMuIFNlcXVlbmNlcworICAgICAgICBhcmUgdGVzdGVkIGVsZW1lbnQtYnktZWxlbWVudC4KKworICAgICAgICA+Pj4gY2xhc3MgTXlUZXN0KE51bWVyaWNUZXN0Q2FzZSk6CisgICAgICAgIC4uLiAgICAgZGVmIHRlc3RfbnVtYmVyKHNlbGYpOgorICAgICAgICAuLi4gICAgICAgICB4ID0gMS4wLzYKKyAgICAgICAgLi4uICAgICAgICAgeSA9IHN1bShbeF0qNikKKyAgICAgICAgLi4uICAgICAgICAgc2VsZi5hc3NlcnRBcHByb3hFcXVhbCh5LCAxLjAsIHRvbD0xZS0xNSkKKyAgICAgICAgLi4uICAgICBkZWYgdGVzdF9zZXF1ZW5jZShzZWxmKToKKyAgICAgICAgLi4uICAgICAgICAgYSA9IFsxLjAwMSwgMS4wMDFlLTEwLCAxLjAwMWUxMF0KKyAgICAgICAgLi4uICAgICAgICAgYiA9IFsxLjAsIDFlLTEwLCAxZTEwXQorICAgICAgICAuLi4gICAgICAgICBzZWxmLmFzc2VydEFwcHJveEVxdWFsKGEsIGIsIHJlbD0xZS0zKQorICAgICAgICAuLi4KKyAgICAgICAgPj4+IGltcG9ydCB1bml0dGVzdAorICAgICAgICA+Pj4gZnJvbSBpbyBpbXBvcnQgU3RyaW5nSU8gICMgU3VwcHJlc3MgdGVzdCBydW5uZXIgb3V0cHV0LgorICAgICAgICA+Pj4gc3VpdGUgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkubG9hZFRlc3RzRnJvbVRlc3RDYXNlKE15VGVzdCkKKyAgICAgICAgPj4+IHVuaXR0ZXN0LlRleHRUZXN0UnVubmVyKHN0cmVhbT1TdHJpbmdJTygpKS5ydW4oc3VpdGUpCisgICAgICAgIDx1bml0dGVzdC5ydW5uZXIuVGV4dFRlc3RSZXN1bHQgcnVuPTIgZXJyb3JzPTAgZmFpbHVyZXM9MD4KKworICAgICAgICAiIiIKKyAgICAgICAgaWYgdG9sIGlzIE5vbmU6CisgICAgICAgICAgICB0b2wgPSBzZWxmLnRvbAorICAgICAgICBpZiByZWwgaXMgTm9uZToKKyAgICAgICAgICAgIHJlbCA9IHNlbGYucmVsCisgICAgICAgIGlmICgKKyAgICAgICAgICAgICAgICBpc2luc3RhbmNlKGZpcnN0LCBjb2xsZWN0aW9ucy5TZXF1ZW5jZSkgYW5kCisgICAgICAgICAgICAgICAgaXNpbnN0YW5jZShzZWNvbmQsIGNvbGxlY3Rpb25zLlNlcXVlbmNlKQorICAgICAgICAgICAgKToKKyAgICAgICAgICAgIGNoZWNrID0gc2VsZi5fY2hlY2tfYXBwcm94X3NlcQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY2hlY2sgPSBzZWxmLl9jaGVja19hcHByb3hfbnVtCisgICAgICAgIGNoZWNrKGZpcnN0LCBzZWNvbmQsIHRvbCwgcmVsLCBtc2cpCisKKyAgICBkZWYgX2NoZWNrX2FwcHJveF9zZXEoc2VsZiwgZmlyc3QsIHNlY29uZCwgdG9sLCByZWwsIG1zZyk6CisgICAgICAgIGlmIGxlbihmaXJzdCkgIT0gbGVuKHNlY29uZCk6CisgICAgICAgICAgICBzdGFuZGFyZE1zZyA9ICgKKyAgICAgICAgICAgICAgICAic2VxdWVuY2VzIGRpZmZlciBpbiBsZW5ndGg6ICVkIGl0ZW1zICE9ICVkIGl0ZW1zIgorICAgICAgICAgICAgICAgICUgKGxlbihmaXJzdCksIGxlbihzZWNvbmQpKQorICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgIG1zZyA9IHNlbGYuX2Zvcm1hdE1lc3NhZ2UobXNnLCBzdGFuZGFyZE1zZykKKyAgICAgICAgICAgIHJhaXNlIHNlbGYuZmFpbHVyZUV4Y2VwdGlvbihtc2cpCisgICAgICAgIGZvciBpLCAoYSxlKSBpbiBlbnVtZXJhdGUoemlwKGZpcnN0LCBzZWNvbmQpKToKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX2FwcHJveF9udW0oYSwgZSwgdG9sLCByZWwsIG1zZywgaSkKKworICAgIGRlZiBfY2hlY2tfYXBwcm94X251bShzZWxmLCBmaXJzdCwgc2Vjb25kLCB0b2wsIHJlbCwgbXNnLCBpZHg9Tm9uZSk6CisgICAgICAgIGlmIGFwcHJveF9lcXVhbChmaXJzdCwgc2Vjb25kLCB0b2wsIHJlbCk6CisgICAgICAgICAgICAjIFRlc3QgcGFzc2VzLiBSZXR1cm4gZWFybHksIHdlIGFyZSBkb25lLgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgIyBPdGhlcndpc2Ugd2UgZmFpbGVkLgorICAgICAgICBzdGFuZGFyZE1zZyA9IHNlbGYuX21ha2Vfc3RkX2Vycl9tc2coZmlyc3QsIHNlY29uZCwgdG9sLCByZWwsIGlkeCkKKyAgICAgICAgbXNnID0gc2VsZi5fZm9ybWF0TWVzc2FnZShtc2csIHN0YW5kYXJkTXNnKQorICAgICAgICByYWlzZSBzZWxmLmZhaWx1cmVFeGNlcHRpb24obXNnKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBfbWFrZV9zdGRfZXJyX21zZyhmaXJzdCwgc2Vjb25kLCB0b2wsIHJlbCwgaWR4KToKKyAgICAgICAgIyBDcmVhdGUgdGhlIHN0YW5kYXJkIGVycm9yIG1lc3NhZ2UgZm9yIGFwcHJveF9lcXVhbCBmYWlsdXJlcy4KKyAgICAgICAgYXNzZXJ0IGZpcnN0ICE9IHNlY29uZAorICAgICAgICB0ZW1wbGF0ZSA9ICgKKyAgICAgICAgICAgICcgICVyICE9ICVyXG4nCisgICAgICAgICAgICAnICB2YWx1ZXMgZGlmZmVyIGJ5IG1vcmUgdGhhbiB0b2w9JXIgYW5kIHJlbD0lclxuJworICAgICAgICAgICAgJyAgLT4gYWJzb2x1dGUgZXJyb3IgPSAlclxuJworICAgICAgICAgICAgJyAgLT4gcmVsYXRpdmUgZXJyb3IgPSAlcicKKyAgICAgICAgICAgICkKKyAgICAgICAgaWYgaWR4IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgaGVhZGVyID0gJ251bWVyaWMgc2VxdWVuY2VzIGZpcnN0IGRpZmZlciBhdCBpbmRleCAlZC5cbicgJSBpZHgKKyAgICAgICAgICAgIHRlbXBsYXRlID0gaGVhZGVyICsgdGVtcGxhdGUKKyAgICAgICAgIyBDYWxjdWxhdGUgYWN0dWFsIGVycm9yczoKKyAgICAgICAgYWJzX2VyciwgcmVsX2VyciA9IF9jYWxjX2Vycm9ycyhmaXJzdCwgc2Vjb25kKQorICAgICAgICByZXR1cm4gdGVtcGxhdGUgJSAoZmlyc3QsIHNlY29uZCwgdG9sLCByZWwsIGFic19lcnIsIHJlbF9lcnIpCisKKworIyA9PT09PT09PT09PT09PT09PT09PT09PT0KKyMgPT09IFRlc3QgdGhlIGhlbHBlcnMgPT09CisjID09PT09PT09PT09PT09PT09PT09PT09PQorCisKKyMgLS0tIFRlc3RzIGZvciBhcHByb3hfZXF1YWwgLS0tCisKK2NsYXNzIEFwcHJveEVxdWFsU3ltbWV0cnlUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIFRlc3Qgc3ltbWV0cnkgb2YgYXBwcm94X2VxdWFsLgorCisgICAgZGVmIHRlc3RfcmVsYXRpdmVfc3ltbWV0cnkoc2VsZik6CisgICAgICAgICMgQ2hlY2sgdGhhdCBhcHByb3hfZXF1YWwgdHJlYXRzIHJlbGF0aXZlIGVycm9yIHN5bW1ldHJpY2FsbHkuCisgICAgICAgICMgKGEtYikvYSBpcyB1c3VhbGx5IG5vdCBlcXVhbCB0byAoYS1iKS9iLiBFbnN1cmUgdGhhdCB0aGlzCisgICAgICAgICMgZG9lc24ndCBtYXR0ZXIuCisgICAgICAgICMKKyAgICAgICAgIyAgIE5vdGU6IHRoZSByZWFzb24gZm9yIHRoaXMgdGVzdCBpcyB0aGF0IGFuIGVhcmx5IHZlcnNpb24KKyAgICAgICAgIyAgIG9mIGFwcHJveF9lcXVhbCB3YXMgbm90IHN5bW1ldHJpYy4gQSByZWxhdGl2ZSBlcnJvciB0ZXN0CisgICAgICAgICMgICB3b3VsZCBwYXNzLCBvciBmYWlsLCBkZXBlbmRpbmcgb24gd2hpY2ggdmFsdWUgd2FzIHBhc3NlZAorICAgICAgICAjICAgYXMgdGhlIGZpcnN0IGFyZ3VtZW50LgorICAgICAgICAjCisgICAgICAgIGFyZ3MxID0gWzI0NTYsIDM3LjgsIC0xMi40NSwgRGVjaW1hbCgnMi41NCcpLCBGcmFjdGlvbigxNywgNTQpXQorICAgICAgICBhcmdzMiA9IFsyNDU5LCAzNy4yLCAtMTIuNDEsIERlY2ltYWwoJzIuNTknKSwgRnJhY3Rpb24oMTUsIDU0KV0KKyAgICAgICAgYXNzZXJ0IGxlbihhcmdzMSkgPT0gbGVuKGFyZ3MyKQorICAgICAgICBmb3IgYSwgYiBpbiB6aXAoYXJnczEsIGFyZ3MyKToKKyAgICAgICAgICAgIHNlbGYuZG9fcmVsYXRpdmVfc3ltbWV0cnkoYSwgYikKKworICAgIGRlZiBkb19yZWxhdGl2ZV9zeW1tZXRyeShzZWxmLCBhLCBiKToKKyAgICAgICAgYSwgYiA9IG1pbihhLCBiKSwgbWF4KGEsIGIpCisgICAgICAgIGFzc2VydCBhIDwgYgorICAgICAgICBkZWx0YSA9IGIgLSBhICAjIFRoZSBhYnNvbHV0ZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHZhbHVlcy4KKyAgICAgICAgcmVsX2VycjEsIHJlbF9lcnIyID0gYWJzKGRlbHRhL2EpLCBhYnMoZGVsdGEvYikKKyAgICAgICAgIyBDaG9vc2UgYW4gZXJyb3IgbWFyZ2luIGhhbGZ3YXkgYmV0d2VlbiB0aGUgdHdvLgorICAgICAgICByZWwgPSAocmVsX2VycjEgKyByZWxfZXJyMikvMgorICAgICAgICAjIE5vdyBzZWUgdGhhdCB2YWx1ZXMgYSBhbmQgYiBjb21wYXJlIGFwcHJveCBlcXVhbCByZWdhcmRsZXNzIG9mCisgICAgICAgICMgd2hpY2ggaXMgZ2l2ZW4gZmlyc3QuCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhcHByb3hfZXF1YWwoYSwgYiwgdG9sPTAsIHJlbD1yZWwpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYXBwcm94X2VxdWFsKGIsIGEsIHRvbD0wLCByZWw9cmVsKSkKKworICAgIGRlZiB0ZXN0X3N5bW1ldHJ5KHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBhcHByb3hfZXF1YWwoYSwgYikgPT0gYXBwcm94X2VxdWFsKGIsIGEpCisgICAgICAgIGFyZ3MgPSBbLTIzLCAtMiwgNSwgMTA3LCA5MzU2OF0KKyAgICAgICAgZGVsdGEgPSAyCisgICAgICAgIGZvciBhIGluIGFyZ3M6CisgICAgICAgICAgICBmb3IgdHlwZV8gaW4gKGludCwgZmxvYXQsIERlY2ltYWwsIEZyYWN0aW9uKToKKyAgICAgICAgICAgICAgICB4ID0gdHlwZV8oYSkqMTAwCisgICAgICAgICAgICAgICAgeSA9IHggKyBkZWx0YQorICAgICAgICAgICAgICAgIHIgPSBhYnMoZGVsdGEvbWF4KHgsIHkpKQorICAgICAgICAgICAgICAgICMgVGhlcmUgYXJlIGZpdmUgY2FzZXMgdG8gY2hlY2s6CisgICAgICAgICAgICAgICAgIyAxKSBhY3R1YWwgZXJyb3IgPD0gdG9sLCA8PSByZWwKKyAgICAgICAgICAgICAgICBzZWxmLmRvX3N5bW1ldHJ5X3Rlc3QoeCwgeSwgdG9sPWRlbHRhLCByZWw9cikKKyAgICAgICAgICAgICAgICBzZWxmLmRvX3N5bW1ldHJ5X3Rlc3QoeCwgeSwgdG9sPWRlbHRhKzEsIHJlbD0yKnIpCisgICAgICAgICAgICAgICAgIyAyKSBhY3R1YWwgZXJyb3IgPiB0b2wsID4gcmVsCisgICAgICAgICAgICAgICAgc2VsZi5kb19zeW1tZXRyeV90ZXN0KHgsIHksIHRvbD1kZWx0YS0xLCByZWw9ci8yKQorICAgICAgICAgICAgICAgICMgMykgYWN0dWFsIGVycm9yIDw9IHRvbCwgPiByZWwKKyAgICAgICAgICAgICAgICBzZWxmLmRvX3N5bW1ldHJ5X3Rlc3QoeCwgeSwgdG9sPWRlbHRhLCByZWw9ci8yKQorICAgICAgICAgICAgICAgICMgNCkgYWN0dWFsIGVycm9yID4gdG9sLCA8PSByZWwKKyAgICAgICAgICAgICAgICBzZWxmLmRvX3N5bW1ldHJ5X3Rlc3QoeCwgeSwgdG9sPWRlbHRhLTEsIHJlbD1yKQorICAgICAgICAgICAgICAgIHNlbGYuZG9fc3ltbWV0cnlfdGVzdCh4LCB5LCB0b2w9ZGVsdGEtMSwgcmVsPTIqcikKKyAgICAgICAgICAgICAgICAjIDUpIGV4YWN0IGVxdWFsaXR5IHRlc3QKKyAgICAgICAgICAgICAgICBzZWxmLmRvX3N5bW1ldHJ5X3Rlc3QoeCwgeCwgdG9sPTAsIHJlbD0wKQorICAgICAgICAgICAgICAgIHNlbGYuZG9fc3ltbWV0cnlfdGVzdCh4LCB5LCB0b2w9MCwgcmVsPTApCisKKyAgICBkZWYgZG9fc3ltbWV0cnlfdGVzdChzZWxmLCBhLCBiLCB0b2wsIHJlbCk6CisgICAgICAgIHRlbXBsYXRlID0gImFwcHJveF9lcXVhbCBjb21wYXJpc29ucyBkb24ndCBtYXRjaCBmb3IgJXIiCisgICAgICAgIGZsYWcxID0gYXBwcm94X2VxdWFsKGEsIGIsIHRvbCwgcmVsKQorICAgICAgICBmbGFnMiA9IGFwcHJveF9lcXVhbChiLCBhLCB0b2wsIHJlbCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbGFnMSwgZmxhZzIsIHRlbXBsYXRlLmZvcm1hdCgoYSwgYiwgdG9sLCByZWwpKSkKKworCitjbGFzcyBBcHByb3hFcXVhbEV4YWN0VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIyBUZXN0IHRoZSBhcHByb3hfZXF1YWwgZnVuY3Rpb24gd2l0aCBleGFjdGx5IGVxdWFsIHZhbHVlcy4KKyAgICAjIEVxdWFsIHZhbHVlcyBzaG91bGQgY29tcGFyZSBhcyBhcHByb3hpbWF0ZWx5IGVxdWFsLgorICAgICMgVGVzdCBjYXNlcyBmb3IgZXhhY3RseSBlcXVhbCB2YWx1ZXMsIHdoaWNoIHNob3VsZCBjb21wYXJlIGFwcHJveAorICAgICMgZXF1YWwgcmVnYXJkbGVzcyBvZiB0aGUgZXJyb3IgdG9sZXJhbmNlcyBnaXZlbi4KKworICAgIGRlZiBkb19leGFjdGx5X2VxdWFsX3Rlc3Qoc2VsZiwgeCwgdG9sLCByZWwpOgorICAgICAgICByZXN1bHQgPSBhcHByb3hfZXF1YWwoeCwgeCwgdG9sPXRvbCwgcmVsPXJlbCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdCwgJ2VxdWFsaXR5IGZhaWx1cmUgZm9yIHg9JXInICUgeCkKKyAgICAgICAgcmVzdWx0ID0gYXBwcm94X2VxdWFsKC14LCAteCwgdG9sPXRvbCwgcmVsPXJlbCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdCwgJ2VxdWFsaXR5IGZhaWx1cmUgZm9yIHg9JXInICUgLXgpCisKKyAgICBkZWYgdGVzdF9leGFjdGx5X2VxdWFsX2ludHMoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IGVxdWFsIGludCB2YWx1ZXMgYXJlIGV4YWN0bHkgZXF1YWwuCisgICAgICAgIGZvciBuIGluIFs0MiwgMTk3NDAsIDE0OTc0LCAyMzAsIDE3OTUsIDcwMDI0NSwgMzY1ODddOgorICAgICAgICAgICAgc2VsZi5kb19leGFjdGx5X2VxdWFsX3Rlc3QobiwgMCwgMCkKKworICAgIGRlZiB0ZXN0X2V4YWN0bHlfZXF1YWxfZmxvYXRzKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBlcXVhbCBmbG9hdCB2YWx1ZXMgYXJlIGV4YWN0bHkgZXF1YWwuCisgICAgICAgIGZvciB4IGluIFswLjQyLCAxLjk3NDAsIDE0OTcuNCwgMjMuMCwgMTc5LjUsIDcwLjAyNDUsIDM2LjU4N106CisgICAgICAgICAgICBzZWxmLmRvX2V4YWN0bHlfZXF1YWxfdGVzdCh4LCAwLCAwKQorCisgICAgZGVmIHRlc3RfZXhhY3RseV9lcXVhbF9mcmFjdGlvbnMoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IGVxdWFsIEZyYWN0aW9uIHZhbHVlcyBhcmUgZXhhY3RseSBlcXVhbC4KKyAgICAgICAgRiA9IEZyYWN0aW9uCisgICAgICAgIGZvciBmIGluIFtGKDEsIDIpLCBGKDApLCBGKDUsIDMpLCBGKDksIDcpLCBGKDM1LCAzNiksIEYoMywgNyldOgorICAgICAgICAgICAgc2VsZi5kb19leGFjdGx5X2VxdWFsX3Rlc3QoZiwgMCwgMCkKKworICAgIGRlZiB0ZXN0X2V4YWN0bHlfZXF1YWxfZGVjaW1hbHMoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IGVxdWFsIERlY2ltYWwgdmFsdWVzIGFyZSBleGFjdGx5IGVxdWFsLgorICAgICAgICBEID0gRGVjaW1hbAorICAgICAgICBmb3IgZCBpbiBtYXAoRCwgIjguMiAzMS4yNzQgOTEyLjA0IDE2Ljc0NSAxLjIwNDciLnNwbGl0KCkpOgorICAgICAgICAgICAgc2VsZi5kb19leGFjdGx5X2VxdWFsX3Rlc3QoZCwgMCwgMCkKKworICAgIGRlZiB0ZXN0X2V4YWN0bHlfZXF1YWxfYWJzb2x1dGUoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IGVxdWFsIHZhbHVlcyBhcmUgZXhhY3RseSBlcXVhbCB3aXRoIGFuIGFic29sdXRlIGVycm9yLgorICAgICAgICBmb3IgbiBpbiBbMTYsIDEwMTMsIDEzNzIsIDExOTgsIDk3MSwgNF06CisgICAgICAgICAgICAjIFRlc3QgYXMgaW50cy4KKyAgICAgICAgICAgIHNlbGYuZG9fZXhhY3RseV9lcXVhbF90ZXN0KG4sIDAuMDEsIDApCisgICAgICAgICAgICAjIFRlc3QgYXMgZmxvYXRzLgorICAgICAgICAgICAgc2VsZi5kb19leGFjdGx5X2VxdWFsX3Rlc3Qobi8xMCwgMC4wMSwgMCkKKyAgICAgICAgICAgICMgVGVzdCBhcyBGcmFjdGlvbnMuCisgICAgICAgICAgICBmID0gRnJhY3Rpb24obiwgMTIzNCkKKyAgICAgICAgICAgIHNlbGYuZG9fZXhhY3RseV9lcXVhbF90ZXN0KGYsIDAuMDEsIDApCisKKyAgICBkZWYgdGVzdF9leGFjdGx5X2VxdWFsX2Fic29sdXRlX2RlY2ltYWxzKHNlbGYpOgorICAgICAgICAjIFRlc3QgZXF1YWwgRGVjaW1hbCB2YWx1ZXMgYXJlIGV4YWN0bHkgZXF1YWwgd2l0aCBhbiBhYnNvbHV0ZSBlcnJvci4KKyAgICAgICAgc2VsZi5kb19leGFjdGx5X2VxdWFsX3Rlc3QoRGVjaW1hbCgiMy41NzEiKSwgRGVjaW1hbCgiMC4wMSIpLCAwKQorICAgICAgICBzZWxmLmRvX2V4YWN0bHlfZXF1YWxfdGVzdCgtRGVjaW1hbCgiODEuMzk3MSIpLCBEZWNpbWFsKCIwLjAxIiksIDApCisKKyAgICBkZWYgdGVzdF9leGFjdGx5X2VxdWFsX3JlbGF0aXZlKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBlcXVhbCB2YWx1ZXMgYXJlIGV4YWN0bHkgZXF1YWwgd2l0aCBhIHJlbGF0aXZlIGVycm9yLgorICAgICAgICBmb3IgeCBpbiBbODM0NywgMTAxLjMsIC03OTEwLjI4LCBGcmFjdGlvbig1LCAyMSldOgorICAgICAgICAgICAgc2VsZi5kb19leGFjdGx5X2VxdWFsX3Rlc3QoeCwgMCwgMC4wMSkKKyAgICAgICAgc2VsZi5kb19leGFjdGx5X2VxdWFsX3Rlc3QoRGVjaW1hbCgiMTEuNjgiKSwgMCwgRGVjaW1hbCgiMC4wMSIpKQorCisgICAgZGVmIHRlc3RfZXhhY3RseV9lcXVhbF9ib3RoKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBlcXVhbCB2YWx1ZXMgYXJlIGVxdWFsIHdoZW4gYm90aCB0b2wgYW5kIHJlbCBhcmUgZ2l2ZW4uCisgICAgICAgIGZvciB4IGluIFs0MTAxNywgMTYuNzQyLCAtODEzLjAyLCBGcmFjdGlvbigzLCA4KV06CisgICAgICAgICAgICBzZWxmLmRvX2V4YWN0bHlfZXF1YWxfdGVzdCh4LCAwLjEsIDAuMDEpCisgICAgICAgIEQgPSBEZWNpbWFsCisgICAgICAgIHNlbGYuZG9fZXhhY3RseV9lcXVhbF90ZXN0KEQoIjcuMiIpLCBEKCIwLjEiKSwgRCgiMC4wMSIpKQorCisKK2NsYXNzIEFwcHJveEVxdWFsVW5lcXVhbFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMgVW5lcXVhbCB2YWx1ZXMgc2hvdWxkIGNvbXBhcmUgdW5lcXVhbCB3aXRoIHplcm8gZXJyb3IgdG9sZXJhbmNlcy4KKyAgICAjIFRlc3QgY2FzZXMgZm9yIHVuZXF1YWwgdmFsdWVzLCB3aXRoIGV4YWN0IGVxdWFsaXR5IHRlc3QuCisKKyAgICBkZWYgZG9fZXhhY3RseV91bmVxdWFsX3Rlc3Qoc2VsZiwgeCk6CisgICAgICAgIGZvciBhIGluICh4LCAteCk6CisgICAgICAgICAgICByZXN1bHQgPSBhcHByb3hfZXF1YWwoYSwgYSsxLCB0b2w9MCwgcmVsPTApCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHJlc3VsdCwgJ2luZXF1YWxpdHkgZmFpbHVyZSBmb3IgeD0lcicgJSBhKQorCisgICAgZGVmIHRlc3RfZXhhY3RseV91bmVxdWFsX2ludHMoc2VsZik6CisgICAgICAgICMgVGVzdCB1bmVxdWFsIGludCB2YWx1ZXMgYXJlIHVuZXF1YWwgd2l0aCB6ZXJvIGVycm9yIHRvbGVyYW5jZS4KKyAgICAgICAgZm9yIG4gaW4gWzk1MSwgNTcyMzA1LCA0NzgsIDkxNywgMTcyNDBdOgorICAgICAgICAgICAgc2VsZi5kb19leGFjdGx5X3VuZXF1YWxfdGVzdChuKQorCisgICAgZGVmIHRlc3RfZXhhY3RseV91bmVxdWFsX2Zsb2F0cyhzZWxmKToKKyAgICAgICAgIyBUZXN0IHVuZXF1YWwgZmxvYXQgdmFsdWVzIGFyZSB1bmVxdWFsIHdpdGggemVybyBlcnJvciB0b2xlcmFuY2UuCisgICAgICAgIGZvciB4IGluIFs5LjUxLCA1NzIzLjA1LCA0Ny44LCA5LjE3LCAxNy4yNF06CisgICAgICAgICAgICBzZWxmLmRvX2V4YWN0bHlfdW5lcXVhbF90ZXN0KHgpCisKKyAgICBkZWYgdGVzdF9leGFjdGx5X3VuZXF1YWxfZnJhY3Rpb25zKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCB1bmVxdWFsIEZyYWN0aW9ucyBhcmUgdW5lcXVhbCB3aXRoIHplcm8gZXJyb3IgdG9sZXJhbmNlLgorICAgICAgICBGID0gRnJhY3Rpb24KKyAgICAgICAgZm9yIGYgaW4gW0YoMSwgNSksIEYoNywgOSksIEYoMTIsIDExKSwgRigxMDEsIDk5MDIzKV06CisgICAgICAgICAgICBzZWxmLmRvX2V4YWN0bHlfdW5lcXVhbF90ZXN0KGYpCisKKyAgICBkZWYgdGVzdF9leGFjdGx5X3VuZXF1YWxfZGVjaW1hbHMoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IHVuZXF1YWwgRGVjaW1hbHMgYXJlIHVuZXF1YWwgd2l0aCB6ZXJvIGVycm9yIHRvbGVyYW5jZS4KKyAgICAgICAgZm9yIGQgaW4gbWFwKERlY2ltYWwsICIzLjE0MTUgMjk4LjEyIDMuNDcgMTguOTk2IDAuMDAyNDUiLnNwbGl0KCkpOgorICAgICAgICAgICAgc2VsZi5kb19leGFjdGx5X3VuZXF1YWxfdGVzdChkKQorCisKK2NsYXNzIEFwcHJveEVxdWFsSW5leGFjdFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMgSW5leGFjdCB0ZXN0IGNhc2VzIGZvciBhcHByb3hfZXJyb3IuCisgICAgIyBUZXN0IGNhc2VzIHdoZW4gY29tcGFyaW5nIHR3byB2YWx1ZXMgdGhhdCBhcmUgbm90IGV4YWN0bHkgZXF1YWwuCisKKyAgICAjID09PSBBYnNvbHV0ZSBlcnJvciB0ZXN0cyA9PT0KKworICAgIGRlZiBkb19hcHByb3hfZXF1YWxfYWJzX3Rlc3Qoc2VsZiwgeCwgZGVsdGEpOgorICAgICAgICB0ZW1wbGF0ZSA9ICJUZXN0IGZhaWx1cmUgZm9yIHg9eyFyfSwgeT17IXJ9IgorICAgICAgICBmb3IgeSBpbiAoeCArIGRlbHRhLCB4IC0gZGVsdGEpOgorICAgICAgICAgICAgbXNnID0gdGVtcGxhdGUuZm9ybWF0KHgsIHkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoYXBwcm94X2VxdWFsKHgsIHksIHRvbD0yKmRlbHRhLCByZWw9MCksIG1zZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYXBwcm94X2VxdWFsKHgsIHksIHRvbD1kZWx0YS8yLCByZWw9MCksIG1zZykKKworICAgIGRlZiB0ZXN0X2FwcHJveF9lcXVhbF9hYnNvbHV0ZV9pbnRzKHNlbGYpOgorICAgICAgICAjIFRlc3QgYXBwcm94aW1hdGUgZXF1YWxpdHkgb2YgaW50cyB3aXRoIGFuIGFic29sdXRlIGVycm9yLgorICAgICAgICBmb3IgbiBpbiBbLTEwNzM3LCAtMTk3NSwgLTcsIC0yLCAwLCAxLCA5LCAzNywgNDIzLCA5ODc0LCAyMzc4OTExMF06CisgICAgICAgICAgICBzZWxmLmRvX2FwcHJveF9lcXVhbF9hYnNfdGVzdChuLCAxMCkKKyAgICAgICAgICAgIHNlbGYuZG9fYXBwcm94X2VxdWFsX2Fic190ZXN0KG4sIDIpCisKKyAgICBkZWYgdGVzdF9hcHByb3hfZXF1YWxfYWJzb2x1dGVfZmxvYXRzKHNlbGYpOgorICAgICAgICAjIFRlc3QgYXBwcm94aW1hdGUgZXF1YWxpdHkgb2YgZmxvYXRzIHdpdGggYW4gYWJzb2x1dGUgZXJyb3IuCisgICAgICAgIGZvciB4IGluIFstMjg0LjEyNiwgLTk3LjEsIC0zLjQsIC0yLjE1LCAwLjUsIDEuMCwgNy44LCA0LjIzLCAzODE3LjRdOgorICAgICAgICAgICAgc2VsZi5kb19hcHByb3hfZXF1YWxfYWJzX3Rlc3QoeCwgMS41KQorICAgICAgICAgICAgc2VsZi5kb19hcHByb3hfZXF1YWxfYWJzX3Rlc3QoeCwgMC4wMSkKKyAgICAgICAgICAgIHNlbGYuZG9fYXBwcm94X2VxdWFsX2Fic190ZXN0KHgsIDAuMDAwMSkKKworICAgIGRlZiB0ZXN0X2FwcHJveF9lcXVhbF9hYnNvbHV0ZV9mcmFjdGlvbnMoc2VsZik6CisgICAgICAgICMgVGVzdCBhcHByb3hpbWF0ZSBlcXVhbGl0eSBvZiBGcmFjdGlvbnMgd2l0aCBhbiBhYnNvbHV0ZSBlcnJvci4KKyAgICAgICAgZGVsdGEgPSBGcmFjdGlvbigxLCAyOSkKKyAgICAgICAgbnVtZXJhdG9ycyA9IFstODQsIC0xNSwgLTIsIC0xLCAwLCAxLCA1LCAxNywgMjMsIDM0LCA3MV0KKyAgICAgICAgZm9yIGYgaW4gKEZyYWN0aW9uKG4sIDI5KSBmb3IgbiBpbiBudW1lcmF0b3JzKToKKyAgICAgICAgICAgIHNlbGYuZG9fYXBwcm94X2VxdWFsX2Fic190ZXN0KGYsIGRlbHRhKQorICAgICAgICAgICAgc2VsZi5kb19hcHByb3hfZXF1YWxfYWJzX3Rlc3QoZiwgZmxvYXQoZGVsdGEpKQorCisgICAgZGVmIHRlc3RfYXBwcm94X2VxdWFsX2Fic29sdXRlX2RlY2ltYWxzKHNlbGYpOgorICAgICAgICAjIFRlc3QgYXBwcm94aW1hdGUgZXF1YWxpdHkgb2YgRGVjaW1hbHMgd2l0aCBhbiBhYnNvbHV0ZSBlcnJvci4KKyAgICAgICAgZGVsdGEgPSBEZWNpbWFsKCIwLjAxIikKKyAgICAgICAgZm9yIGQgaW4gbWFwKERlY2ltYWwsICIxLjAgMy41IDM2LjA4IDYxLjc5IDc5MTIuMzY0OCIuc3BsaXQoKSk6CisgICAgICAgICAgICBzZWxmLmRvX2FwcHJveF9lcXVhbF9hYnNfdGVzdChkLCBkZWx0YSkKKyAgICAgICAgICAgIHNlbGYuZG9fYXBwcm94X2VxdWFsX2Fic190ZXN0KC1kLCBkZWx0YSkKKworICAgIGRlZiB0ZXN0X2Nyb3NzX3plcm8oc2VsZik6CisgICAgICAgICMgVGVzdCBmb3IgdGhlIGNhc2Ugb2YgdGhlIHR3byB2YWx1ZXMgaGF2aW5nIG9wcG9zaXRlIHNpZ25zLgorICAgICAgICBzZWxmLmFzc2VydFRydWUoYXBwcm94X2VxdWFsKDFlLTUsIC0xZS01LCB0b2w9MWUtNCwgcmVsPTApKQorCisgICAgIyA9PT0gUmVsYXRpdmUgZXJyb3IgdGVzdHMgPT09CisKKyAgICBkZWYgZG9fYXBwcm94X2VxdWFsX3JlbF90ZXN0KHNlbGYsIHgsIGRlbHRhKToKKyAgICAgICAgdGVtcGxhdGUgPSAiVGVzdCBmYWlsdXJlIGZvciB4PXshcn0sIHk9eyFyfSIKKyAgICAgICAgZm9yIHkgaW4gKHgqKDErZGVsdGEpLCB4KigxLWRlbHRhKSk6CisgICAgICAgICAgICBtc2cgPSB0ZW1wbGF0ZS5mb3JtYXQoeCwgeSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhcHByb3hfZXF1YWwoeCwgeSwgdG9sPTAsIHJlbD0yKmRlbHRhKSwgbXNnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShhcHByb3hfZXF1YWwoeCwgeSwgdG9sPTAsIHJlbD1kZWx0YS8yKSwgbXNnKQorCisgICAgZGVmIHRlc3RfYXBwcm94X2VxdWFsX3JlbGF0aXZlX2ludHMoc2VsZik6CisgICAgICAgICMgVGVzdCBhcHByb3hpbWF0ZSBlcXVhbGl0eSBvZiBpbnRzIHdpdGggYSByZWxhdGl2ZSBlcnJvci4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFwcHJveF9lcXVhbCg2NCwgNDcsIHRvbD0wLCByZWw9MC4zNikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhcHByb3hfZXF1YWwoNjQsIDQ3LCB0b2w9MCwgcmVsPTAuMzcpKQorICAgICAgICAjIC0tLQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYXBwcm94X2VxdWFsKDQ0OSwgNTEyLCB0b2w9MCwgcmVsPTAuMTI1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFwcHJveF9lcXVhbCg0NDgsIDUxMiwgdG9sPTAsIHJlbD0wLjEyNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYXBwcm94X2VxdWFsKDQ0NywgNTEyLCB0b2w9MCwgcmVsPTAuMTI1KSkKKworICAgIGRlZiB0ZXN0X2FwcHJveF9lcXVhbF9yZWxhdGl2ZV9mbG9hdHMoc2VsZik6CisgICAgICAgICMgVGVzdCBhcHByb3hpbWF0ZSBlcXVhbGl0eSBvZiBmbG9hdHMgd2l0aCBhIHJlbGF0aXZlIGVycm9yLgorICAgICAgICBmb3IgeCBpbiBbLTE3OC4zNCwgLTAuMSwgMC4xLCAxLjAsIDM2Ljk3LCAyODQ3LjEzNiwgOTE0NS4wNzRdOgorICAgICAgICAgICAgc2VsZi5kb19hcHByb3hfZXF1YWxfcmVsX3Rlc3QoeCwgMC4wMikKKyAgICAgICAgICAgIHNlbGYuZG9fYXBwcm94X2VxdWFsX3JlbF90ZXN0KHgsIDAuMDAwMSkKKworICAgIGRlZiB0ZXN0X2FwcHJveF9lcXVhbF9yZWxhdGl2ZV9mcmFjdGlvbnMoc2VsZik6CisgICAgICAgICMgVGVzdCBhcHByb3hpbWF0ZSBlcXVhbGl0eSBvZiBGcmFjdGlvbnMgd2l0aCBhIHJlbGF0aXZlIGVycm9yLgorICAgICAgICBGID0gRnJhY3Rpb24KKyAgICAgICAgZGVsdGEgPSBGcmFjdGlvbigzLCA4KQorICAgICAgICBmb3IgZiBpbiBbRigzLCA4NCksIEYoMTcsIDMwKSwgRig0OSwgNTApLCBGKDkyLCA4NSldOgorICAgICAgICAgICAgZm9yIGQgaW4gKGRlbHRhLCBmbG9hdChkZWx0YSkpOgorICAgICAgICAgICAgICAgIHNlbGYuZG9fYXBwcm94X2VxdWFsX3JlbF90ZXN0KGYsIGQpCisgICAgICAgICAgICAgICAgc2VsZi5kb19hcHByb3hfZXF1YWxfcmVsX3Rlc3QoLWYsIGQpCisKKyAgICBkZWYgdGVzdF9hcHByb3hfZXF1YWxfcmVsYXRpdmVfZGVjaW1hbHMoc2VsZik6CisgICAgICAgICMgVGVzdCBhcHByb3hpbWF0ZSBlcXVhbGl0eSBvZiBEZWNpbWFscyB3aXRoIGEgcmVsYXRpdmUgZXJyb3IuCisgICAgICAgIGZvciBkIGluIG1hcChEZWNpbWFsLCAiMC4wMiAxLjAgNS43IDEzLjY3IDk0LjEzOCA5MTAyNy45MzIxIi5zcGxpdCgpKToKKyAgICAgICAgICAgIHNlbGYuZG9fYXBwcm94X2VxdWFsX3JlbF90ZXN0KGQsIERlY2ltYWwoIjAuMDAxIikpCisgICAgICAgICAgICBzZWxmLmRvX2FwcHJveF9lcXVhbF9yZWxfdGVzdCgtZCwgRGVjaW1hbCgiMC4wNSIpKQorCisgICAgIyA9PT0gQm90aCBhYnNvbHV0ZSBhbmQgcmVsYXRpdmUgZXJyb3IgdGVzdHMgPT09CisKKyAgICAjIFRoZXJlIGFyZSBmb3VyIGNhc2VzIHRvIGNvbnNpZGVyOgorICAgICMgICAxKSBhY3R1YWwgZXJyb3IgPD0gYm90aCBhYnNvbHV0ZSBhbmQgcmVsYXRpdmUgZXJyb3IKKyAgICAjICAgMikgYWN0dWFsIGVycm9yIDw9IGFic29sdXRlIGVycm9yIGJ1dCA+IHJlbGF0aXZlIGVycm9yCisgICAgIyAgIDMpIGFjdHVhbCBlcnJvciA8PSByZWxhdGl2ZSBlcnJvciBidXQgPiBhYnNvbHV0ZSBlcnJvcgorICAgICMgICA0KSBhY3R1YWwgZXJyb3IgPiBib3RoIGFic29sdXRlIGFuZCByZWxhdGl2ZSBlcnJvcgorCisgICAgZGVmIGRvX2NoZWNrX2JvdGgoc2VsZiwgYSwgYiwgdG9sLCByZWwsIHRvbF9mbGFnLCByZWxfZmxhZyk6CisgICAgICAgIGNoZWNrID0gc2VsZi5hc3NlcnRUcnVlIGlmIHRvbF9mbGFnIGVsc2Ugc2VsZi5hc3NlcnRGYWxzZQorICAgICAgICBjaGVjayhhcHByb3hfZXF1YWwoYSwgYiwgdG9sPXRvbCwgcmVsPTApKQorICAgICAgICBjaGVjayA9IHNlbGYuYXNzZXJ0VHJ1ZSBpZiByZWxfZmxhZyBlbHNlIHNlbGYuYXNzZXJ0RmFsc2UKKyAgICAgICAgY2hlY2soYXBwcm94X2VxdWFsKGEsIGIsIHRvbD0wLCByZWw9cmVsKSkKKyAgICAgICAgY2hlY2sgPSBzZWxmLmFzc2VydFRydWUgaWYgKHRvbF9mbGFnIG9yIHJlbF9mbGFnKSBlbHNlIHNlbGYuYXNzZXJ0RmFsc2UKKyAgICAgICAgY2hlY2soYXBwcm94X2VxdWFsKGEsIGIsIHRvbD10b2wsIHJlbD1yZWwpKQorCisgICAgZGVmIHRlc3RfYXBwcm94X2VxdWFsX2JvdGgxKHNlbGYpOgorICAgICAgICAjIFRlc3QgYWN0dWFsIGVycm9yIDw9IGJvdGggYWJzb2x1dGUgYW5kIHJlbGF0aXZlIGVycm9yLgorICAgICAgICBzZWxmLmRvX2NoZWNrX2JvdGgoNy45NTUsIDcuOTUyLCAwLjAwNCwgMy44ZS00LCBUcnVlLCBUcnVlKQorICAgICAgICBzZWxmLmRvX2NoZWNrX2JvdGgoLTcuMzg3LCAtNy4zODYsIDAuMDAyLCAwLjAwMDIsIFRydWUsIFRydWUpCisKKyAgICBkZWYgdGVzdF9hcHByb3hfZXF1YWxfYm90aDIoc2VsZik6CisgICAgICAgICMgVGVzdCBhY3R1YWwgZXJyb3IgPD0gYWJzb2x1dGUgZXJyb3IgYnV0ID4gcmVsYXRpdmUgZXJyb3IuCisgICAgICAgIHNlbGYuZG9fY2hlY2tfYm90aCg3Ljk1NSwgNy45NTIsIDAuMDA0LCAzLjdlLTQsIFRydWUsIEZhbHNlKQorCisgICAgZGVmIHRlc3RfYXBwcm94X2VxdWFsX2JvdGgzKHNlbGYpOgorICAgICAgICAjIFRlc3QgYWN0dWFsIGVycm9yIDw9IHJlbGF0aXZlIGVycm9yIGJ1dCA+IGFic29sdXRlIGVycm9yLgorICAgICAgICBzZWxmLmRvX2NoZWNrX2JvdGgoNy45NTUsIDcuOTUyLCAwLjAwMSwgMy44ZS00LCBGYWxzZSwgVHJ1ZSkKKworICAgIGRlZiB0ZXN0X2FwcHJveF9lcXVhbF9ib3RoNChzZWxmKToKKyAgICAgICAgIyBUZXN0IGFjdHVhbCBlcnJvciA+IGJvdGggYWJzb2x1dGUgYW5kIHJlbGF0aXZlIGVycm9yLgorICAgICAgICBzZWxmLmRvX2NoZWNrX2JvdGgoMi43OCwgMi43NSwgMC4wMSwgMC4wMDEsIEZhbHNlLCBGYWxzZSkKKyAgICAgICAgc2VsZi5kb19jaGVja19ib3RoKDk3MS40NCwgOTcxLjQ3LCAwLjAyLCAzZS01LCBGYWxzZSwgRmFsc2UpCisKKworY2xhc3MgQXBwcm94RXF1YWxTcGVjaWFsc1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMgVGVzdCBhcHByb3hfZXF1YWwgd2l0aCBOQU5zIGFuZCBJTkZzIGFuZCB6ZXJvZXMuCisKKyAgICBkZWYgdGVzdF9pbmYoc2VsZik6CisgICAgICAgIGZvciB0eXBlXyBpbiAoZmxvYXQsIERlY2ltYWwpOgorICAgICAgICAgICAgaW5mID0gdHlwZV8oJ2luZicpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoYXBwcm94X2VxdWFsKGluZiwgaW5mKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhcHByb3hfZXF1YWwoaW5mLCBpbmYsIDAsIDApKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFwcHJveF9lcXVhbChpbmYsIGluZiwgMSwgMC4wMSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoYXBwcm94X2VxdWFsKC1pbmYsIC1pbmYpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShhcHByb3hfZXF1YWwoaW5mLCAtaW5mKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYXBwcm94X2VxdWFsKGluZiwgMTAwMCkpCisKKyAgICBkZWYgdGVzdF9uYW4oc2VsZik6CisgICAgICAgIGZvciB0eXBlXyBpbiAoZmxvYXQsIERlY2ltYWwpOgorICAgICAgICAgICAgbmFuID0gdHlwZV8oJ25hbicpCisgICAgICAgICAgICBmb3Igb3RoZXIgaW4gKG5hbiwgdHlwZV8oJ2luZicpLCAxMDAwKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGFwcHJveF9lcXVhbChuYW4sIG90aGVyKSkKKworICAgIGRlZiB0ZXN0X2Zsb2F0X3plcm9lcyhzZWxmKToKKyAgICAgICAgbnplcm8gPSBtYXRoLmNvcHlzaWduKDAuMCwgLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhcHByb3hfZXF1YWwobnplcm8sIDAuMCwgdG9sPTAuMSwgcmVsPTAuMSkpCisKKyAgICBkZWYgdGVzdF9kZWNpbWFsX3plcm9lcyhzZWxmKToKKyAgICAgICAgbnplcm8gPSBEZWNpbWFsKCItMC4wIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFwcHJveF9lcXVhbChuemVybywgRGVjaW1hbCgwKSwgdG9sPTAuMSwgcmVsPTAuMSkpCisKKworY2xhc3MgVGVzdEFwcHJveEVxdWFsRXJyb3JzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIFRlc3QgZXJyb3IgY29uZGl0aW9ucyBvZiBhcHByb3hfZXF1YWwuCisKKyAgICBkZWYgdGVzdF9iYWRfdG9sKHNlbGYpOgorICAgICAgICAjIFRlc3QgbmVnYXRpdmUgdG9sIHJhaXNlcy4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYXBwcm94X2VxdWFsLCAxMDAsIDEwMCwgLTEsIDAuMSkKKworICAgIGRlZiB0ZXN0X2JhZF9yZWwoc2VsZik6CisgICAgICAgICMgVGVzdCBuZWdhdGl2ZSByZWwgcmFpc2VzLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBhcHByb3hfZXF1YWwsIDEwMCwgMTAwLCAxLCAtMC4xKQorCisKKyMgLS0tIFRlc3RzIGZvciBOdW1lcmljVGVzdENhc2UgLS0tCisKKyMgVGhlIGZvcm1hdHRpbmcgcm91dGluZSB0aGF0IGdlbmVyYXRlcyB0aGUgZXJyb3IgbWVzc2FnZXMgaXMgY29tcGxleCBlbm91Z2gKKyMgdGhhdCBpdCB0b28gbmVlZHMgdGVzdGluZy4KKworY2xhc3MgVGVzdE51bWVyaWNUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIyBUaGUgZXhhY3Qgd29yZGluZyBvZiBOdW1lcmljVGVzdENhc2UgZXJyb3IgbWVzc2FnZXMgaXMgKm5vdCogZ3VhcmFudGVlZCwKKyAgICAjIGJ1dCB3ZSBuZWVkIHRvIGdpdmUgdGhlbSBzb21lIHNvcnQgb2YgdGVzdCB0byBlbnN1cmUgdGhhdCB0aGV5IGFyZQorICAgICMgZ2VuZXJhdGVkIGNvcnJlY3RseS4gQXMgYSBjb21wcm9taXNlLCB3ZSBsb29rIGZvciBzcGVjaWZpYyBzdWJzdHJpbmdzCisgICAgIyB0aGF0IGFyZSBleHBlY3RlZCB0byBiZSBmb3VuZCBldmVuIGlmIHRoZSBvdmVyYWxsIGVycm9yIG1lc3NhZ2UgY2hhbmdlcy4KKworICAgIGRlZiBkb190ZXN0KHNlbGYsIGFyZ3MpOgorICAgICAgICBhY3R1YWxfbXNnID0gTnVtZXJpY1Rlc3RDYXNlLl9tYWtlX3N0ZF9lcnJfbXNnKCphcmdzKQorICAgICAgICBleHBlY3RlZCA9IHNlbGYuZ2VuZXJhdGVfc3Vic3RyaW5ncygqYXJncykKKyAgICAgICAgZm9yIHN1YnN0cmluZyBpbiBleHBlY3RlZDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oc3Vic3RyaW5nLCBhY3R1YWxfbXNnKQorCisgICAgZGVmIHRlc3RfbnVtZXJpY3Rlc3RjYXNlX2lzX3Rlc3RjYXNlKHNlbGYpOgorICAgICAgICAjIEVuc3VyZSB0aGF0IE51bWVyaWNUZXN0Q2FzZSBhY3R1YWxseSBpcyBhIFRlc3RDYXNlLgorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhOdW1lcmljVGVzdENhc2UsIHVuaXR0ZXN0LlRlc3RDYXNlKSkKKworICAgIGRlZiB0ZXN0X2Vycm9yX21zZ19udW1lcmljKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhlIGVycm9yIG1lc3NhZ2UgZ2VuZXJhdGVkIGZvciBudW1lcmljIGNvbXBhcmlzb25zLgorICAgICAgICBhcmdzID0gKDIuNSwgNC4wLCAwLjUsIDAuMjUsIE5vbmUpCisgICAgICAgIHNlbGYuZG9fdGVzdChhcmdzKQorCisgICAgZGVmIHRlc3RfZXJyb3JfbXNnX3NlcXVlbmNlKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhlIGVycm9yIG1lc3NhZ2UgZ2VuZXJhdGVkIGZvciBzZXF1ZW5jZSBjb21wYXJpc29ucy4KKyAgICAgICAgYXJncyA9ICgzLjc1LCA4LjI1LCAxLjI1LCAwLjUsIDcpCisgICAgICAgIHNlbGYuZG9fdGVzdChhcmdzKQorCisgICAgZGVmIGdlbmVyYXRlX3N1YnN0cmluZ3Moc2VsZiwgZmlyc3QsIHNlY29uZCwgdG9sLCByZWwsIGlkeCk6CisgICAgICAgICIiIlJldHVybiBzdWJzdHJpbmdzIHdlIGV4cGVjdCB0byBzZWUgaW4gZXJyb3IgbWVzc2FnZXMuIiIiCisgICAgICAgIGFic19lcnIsIHJlbF9lcnIgPSBfY2FsY19lcnJvcnMoZmlyc3QsIHNlY29uZCkKKyAgICAgICAgc3Vic3RyaW5ncyA9IFsKKyAgICAgICAgICAgICAgICAndG9sPSVyJyAlIHRvbCwKKyAgICAgICAgICAgICAgICAncmVsPSVyJyAlIHJlbCwKKyAgICAgICAgICAgICAgICAnYWJzb2x1dGUgZXJyb3IgPSAlcicgJSBhYnNfZXJyLAorICAgICAgICAgICAgICAgICdyZWxhdGl2ZSBlcnJvciA9ICVyJyAlIHJlbF9lcnIsCisgICAgICAgICAgICAgICAgXQorICAgICAgICBpZiBpZHggaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzdWJzdHJpbmdzLmFwcGVuZCgnZGlmZmVyIGF0IGluZGV4ICVkJyAlIGlkeCkKKyAgICAgICAgcmV0dXJuIHN1YnN0cmluZ3MKKworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyA9PT0gVGVzdHMgZm9yIHRoZSBzdGF0aXN0aWNzIG1vZHVsZSA9PT0KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKworY2xhc3MgR2xvYmFsc1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIG1vZHVsZSA9IHN0YXRpc3RpY3MKKyAgICBleHBlY3RlZF9tZXRhZGF0YSA9IFsiX19kb2NfXyIsICJfX2FsbF9fIl0KKworICAgIGRlZiB0ZXN0X21ldGEoc2VsZik6CisgICAgICAgICMgVGVzdCBmb3IgdGhlIGV4aXN0ZW5jZSBvZiBtZXRhZGF0YS4KKyAgICAgICAgZm9yIG1ldGEgaW4gc2VsZi5leHBlY3RlZF9tZXRhZGF0YToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKHNlbGYubW9kdWxlLCBtZXRhKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMgbm90IHByZXNlbnQiICUgbWV0YSkKKworICAgIGRlZiB0ZXN0X2NoZWNrX2FsbChzZWxmKToKKyAgICAgICAgIyBDaGVjayBldmVyeXRoaW5nIGluIF9fYWxsX18gZXhpc3RzIGFuZCBpcyBwdWJsaWMuCisgICAgICAgIG1vZHVsZSA9IHNlbGYubW9kdWxlCisgICAgICAgIGZvciBuYW1lIGluIG1vZHVsZS5fX2FsbF9fOgorICAgICAgICAgICAgIyBObyBwcml2YXRlIG5hbWVzIGluIF9fYWxsX186CisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG5hbWUuc3RhcnRzd2l0aCgiXyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncHJpdmF0ZSBuYW1lICIlcyIgaW4gX19hbGxfXycgJSBuYW1lKQorICAgICAgICAgICAgIyBBbmQgYW55dGhpbmcgaW4gX19hbGxfXyBtdXN0IGV4aXN0OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIobW9kdWxlLCBuYW1lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWlzc2luZyBuYW1lICIlcyIgaW4gX19hbGxfXycgJSBuYW1lKQorCisKK2NsYXNzIERvY1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAorICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtT08gYW5kIGFib3ZlIikKKyAgICBkZWYgdGVzdF9kb2NfdGVzdHMoc2VsZik6CisgICAgICAgIGZhaWxlZCwgdHJpZWQgPSBkb2N0ZXN0LnRlc3Rtb2Qoc3RhdGlzdGljcykKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKHRyaWVkLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZhaWxlZCwgMCkKKworY2xhc3MgU3RhdGlzdGljc0Vycm9yVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfaGFzX2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgZXJybXNnID0gKAorICAgICAgICAgICAgICAgICJFeHBlY3RlZCBTdGF0aXN0aWNzRXJyb3IgdG8gYmUgYSBWYWx1ZUVycm9yLCBidXQgZ290IGEiCisgICAgICAgICAgICAgICAgIiBzdWJjbGFzcyBvZiAlciBpbnN0ZWFkLiIKKyAgICAgICAgICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKHN0YXRpc3RpY3MsICdTdGF0aXN0aWNzRXJyb3InKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKAorICAgICAgICAgICAgICAgIGlzc3ViY2xhc3Moc3RhdGlzdGljcy5TdGF0aXN0aWNzRXJyb3IsIFZhbHVlRXJyb3IpLAorICAgICAgICAgICAgICAgIGVycm1zZyAlIHN0YXRpc3RpY3MuU3RhdGlzdGljc0Vycm9yLl9fYmFzZV9fCisgICAgICAgICAgICAgICAgKQorCisKKyMgPT09IFRlc3RzIGZvciBwcml2YXRlIHV0aWxpdHkgZnVuY3Rpb25zID09PQorCitjbGFzcyBFeGFjdFJhdGlvVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIyBUZXN0IF9leGFjdF9yYXRpbyB1dGlsaXR5LgorCisgICAgZGVmIHRlc3RfaW50KHNlbGYpOgorICAgICAgICBmb3IgaSBpbiAoLTIwLCAtMywgMCwgNSwgOTksIDEwKioyMCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXRpc3RpY3MuX2V4YWN0X3JhdGlvKGkpLCAoaSwgMSkpCisKKyAgICBkZWYgdGVzdF9mcmFjdGlvbihzZWxmKToKKyAgICAgICAgbnVtZXJhdG9ycyA9ICgtNSwgMSwgMTIsIDM4KQorICAgICAgICBmb3IgbiBpbiBudW1lcmF0b3JzOgorICAgICAgICAgICAgZiA9IEZyYWN0aW9uKG4sIDM3KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0aXN0aWNzLl9leGFjdF9yYXRpbyhmKSwgKG4sIDM3KSkKKworICAgIGRlZiB0ZXN0X2Zsb2F0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXRpc3RpY3MuX2V4YWN0X3JhdGlvKDAuMTI1KSwgKDEsIDgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXRpc3RpY3MuX2V4YWN0X3JhdGlvKDEuMTI1KSwgKDksIDgpKQorICAgICAgICBkYXRhID0gW3JhbmRvbS51bmlmb3JtKC0xMDAsIDEwMCkgZm9yIF8gaW4gcmFuZ2UoMTAwKV0KKyAgICAgICAgZm9yIHggaW4gZGF0YToKKyAgICAgICAgICAgIG51bSwgZGVuID0gc3RhdGlzdGljcy5fZXhhY3RfcmF0aW8oeCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgbnVtL2RlbikKKworICAgIGRlZiB0ZXN0X2RlY2ltYWwoc2VsZik6CisgICAgICAgIEQgPSBEZWNpbWFsCisgICAgICAgIF9leGFjdF9yYXRpbyA9IHN0YXRpc3RpY3MuX2V4YWN0X3JhdGlvCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX2V4YWN0X3JhdGlvKEQoIjAuMTI1IikpLCAoMTI1LCAxMDAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfZXhhY3RfcmF0aW8oRCgiMTIuMzQ1IikpLCAoMTIzNDUsIDEwMDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF9leGFjdF9yYXRpbyhEKCItMS45OCIpKSwgKC0xOTgsIDEwMCkpCisKKyAgICBkZWYgdGVzdF9pbmYoc2VsZik6CisgICAgICAgIElORiA9IGZsb2F0KCJJTkYiKQorICAgICAgICBjbGFzcyBNeUZsb2F0KGZsb2F0KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY2xhc3MgTXlEZWNpbWFsKERlY2ltYWwpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBmb3IgaW5mIGluIChJTkYsIC1JTkYpOgorICAgICAgICAgICAgZm9yIHR5cGVfIGluIChmbG9hdCwgTXlGbG9hdCwgRGVjaW1hbCwgTXlEZWNpbWFsKToKKyAgICAgICAgICAgICAgICB4ID0gdHlwZV8oaW5mKQorICAgICAgICAgICAgICAgIHJhdGlvID0gc3RhdGlzdGljcy5fZXhhY3RfcmF0aW8oeCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhdGlvLCAoeCwgTm9uZSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHJhdGlvWzBdKSwgdHlwZV8pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNpbmYocmF0aW9bMF0pKQorCisgICAgZGVmIHRlc3RfZmxvYXRfbmFuKHNlbGYpOgorICAgICAgICBOQU4gPSBmbG9hdCgiTkFOIikKKyAgICAgICAgY2xhc3MgTXlGbG9hdChmbG9hdCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGZvciBuYW4gaW4gKE5BTiwgTXlGbG9hdChOQU4pKToKKyAgICAgICAgICAgIHJhdGlvID0gc3RhdGlzdGljcy5fZXhhY3RfcmF0aW8obmFuKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4ocmF0aW9bMF0pKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhyYXRpb1sxXSwgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShyYXRpb1swXSksIHR5cGUobmFuKSkKKworICAgIGRlZiB0ZXN0X2RlY2ltYWxfbmFuKHNlbGYpOgorICAgICAgICBOQU4gPSBEZWNpbWFsKCJOQU4iKQorICAgICAgICBzTkFOID0gRGVjaW1hbCgic05BTiIpCisgICAgICAgIGNsYXNzIE15RGVjaW1hbChEZWNpbWFsKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZm9yIG5hbiBpbiAoTkFOLCBNeURlY2ltYWwoTkFOKSwgc05BTiwgTXlEZWNpbWFsKHNOQU4pKToKKyAgICAgICAgICAgIHJhdGlvID0gc3RhdGlzdGljcy5fZXhhY3RfcmF0aW8obmFuKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKF9uYW5fZXF1YWwocmF0aW9bMF0sIG5hbikpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHJhdGlvWzFdLCBOb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHJhdGlvWzBdKSwgdHlwZShuYW4pKQorCisKK2NsYXNzIERlY2ltYWxUb1JhdGlvVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIyBUZXN0IF9kZWNpbWFsX3RvX3JhdGlvIHByaXZhdGUgZnVuY3Rpb24uCisKKyAgICBkZWYgdGVzdF9pbmZpbml0eShzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgSU5GcyBhcmUgaGFuZGxlZCBjb3JyZWN0bHkuCisgICAgICAgIGluZiA9IERlY2ltYWwoJ0lORicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdGlzdGljcy5fZGVjaW1hbF90b19yYXRpbyhpbmYpLCAoaW5mLCBOb25lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0aXN0aWNzLl9kZWNpbWFsX3RvX3JhdGlvKC1pbmYpLCAoLWluZiwgTm9uZSkpCisKKyAgICBkZWYgdGVzdF9uYW4oc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IE5BTnMgYXJlIGhhbmRsZWQgY29ycmVjdGx5LgorICAgICAgICBmb3IgbmFuIGluIChEZWNpbWFsKCdOQU4nKSwgRGVjaW1hbCgnc05BTicpKToKKyAgICAgICAgICAgIG51bSwgZGVuID0gc3RhdGlzdGljcy5fZGVjaW1hbF90b19yYXRpbyhuYW4pCisgICAgICAgICAgICAjIEJlY2F1c2UgTkFOcyBhbHdheXMgY29tcGFyZSBub24tZXF1YWwsIHdlIGNhbm5vdCB1c2UgYXNzZXJ0RXF1YWwuCisgICAgICAgICAgICAjIE5vciBjYW4gd2UgdXNlIGFuIGlkZW50aXR5IHRlc3QsIGFzIHdlIGRvbid0IGd1YXJhbnRlZSBhbnl0aGluZworICAgICAgICAgICAgIyBhYm91dCB0aGUgb2JqZWN0IGlkZW50aXR5LgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKF9uYW5fZXF1YWwobnVtLCBuYW4pKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhkZW4sIE5vbmUpCisKKyAgICBkZWYgdGVzdF9zaWduKHNlbGYpOgorICAgICAgICAjIFRlc3Qgc2lnbiBpcyBjYWxjdWxhdGVkIGNvcnJlY3RseS4KKyAgICAgICAgbnVtYmVycyA9IFtEZWNpbWFsKCI5Ljg3NjVlMTIiKSwgRGVjaW1hbCgiOS44NzY1ZS0xMiIpXQorICAgICAgICBmb3IgZCBpbiBudW1iZXJzOgorICAgICAgICAgICAgIyBGaXJzdCB0ZXN0IHBvc2l0aXZlIGRlY2ltYWxzLgorICAgICAgICAgICAgYXNzZXJ0IGQgPiAwCisgICAgICAgICAgICBudW0sIGRlbiA9IHN0YXRpc3RpY3MuX2RlY2ltYWxfdG9fcmF0aW8oZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKG51bSwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihkZW4sIDApCisgICAgICAgICAgICAjIFRoZW4gdGVzdCBuZWdhdGl2ZSBkZWNpbWFscy4KKyAgICAgICAgICAgIG51bSwgZGVuID0gc3RhdGlzdGljcy5fZGVjaW1hbF90b19yYXRpbygtZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKG51bSwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihkZW4sIDApCisKKyAgICBkZWYgdGVzdF9uZWdhdGl2ZV9leHBvbmVudChzZWxmKToKKyAgICAgICAgIyBUZXN0IHJlc3VsdCB3aGVuIHRoZSBleHBvbmVudCBpcyBuZWdhdGl2ZS4KKyAgICAgICAgdCA9IHN0YXRpc3RpY3MuX2RlY2ltYWxfdG9fcmF0aW8oRGVjaW1hbCgiMC4xMjM0IikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodCwgKDEyMzQsIDEwMDAwKSkKKworICAgIGRlZiB0ZXN0X3Bvc2l0aXZlX2V4cG9uZW50KHNlbGYpOgorICAgICAgICAjIFRlc3QgcmVzdWx0cyB3aGVuIHRoZSBleHBvbmVudCBpcyBwb3NpdGl2ZS4KKyAgICAgICAgdCA9IHN0YXRpc3RpY3MuX2RlY2ltYWxfdG9fcmF0aW8oRGVjaW1hbCgiMS4yMzRlNyIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQsICgxMjM0MDAwMCwgMSkpCisKKyAgICBkZWYgdGVzdF9yZWdyZXNzaW9uXzIwNTM2KHNlbGYpOgorICAgICAgICAjIFJlZ3Jlc3Npb24gdGVzdCBmb3IgaXNzdWUgMjA1MzYuCisgICAgICAgICMgU2VlIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUyMDUzNgorICAgICAgICB0ID0gc3RhdGlzdGljcy5fZGVjaW1hbF90b19yYXRpbyhEZWNpbWFsKCIxZTIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LCAoMTAwLCAxKSkKKyAgICAgICAgdCA9IHN0YXRpc3RpY3MuX2RlY2ltYWxfdG9fcmF0aW8oRGVjaW1hbCgiMS40N2U1IikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodCwgKDE0NzAwMCwgMSkpCisKKworY2xhc3MgSXNGaW5pdGVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIFRlc3QgX2lzZmluaXRlIHByaXZhdGUgZnVuY3Rpb24uCisKKyAgICBkZWYgdGVzdF9maW5pdGUoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IGZpbml0ZSBudW1iZXJzIGFyZSByZWNvZ25pc2VkIGFzIGZpbml0ZS4KKyAgICAgICAgZm9yIHggaW4gKDUsIEZyYWN0aW9uKDEsIDMpLCAyLjUsIERlY2ltYWwoIjUuNSIpKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdGF0aXN0aWNzLl9pc2Zpbml0ZSh4KSkKKworICAgIGRlZiB0ZXN0X2luZmluaXR5KHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBJTkZzIGFyZSBub3QgcmVjb2duaXNlZCBhcyBmaW5pdGUuCisgICAgICAgIGZvciB4IGluIChmbG9hdCgiaW5mIiksIERlY2ltYWwoImluZiIpKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc3RhdGlzdGljcy5faXNmaW5pdGUoeCkpCisKKyAgICBkZWYgdGVzdF9uYW4oc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IE5BTnMgYXJlIG5vdCByZWNvZ25pc2VkIGFzIGZpbml0ZS4KKyAgICAgICAgZm9yIHggaW4gKGZsb2F0KCJuYW4iKSwgRGVjaW1hbCgiTkFOIiksIERlY2ltYWwoInNOQU4iKSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHN0YXRpc3RpY3MuX2lzZmluaXRlKHgpKQorCisKK2NsYXNzIENvZXJjZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMgVGVzdCB0aGF0IHByaXZhdGUgZnVuY3Rpb24gX2NvZXJjZSBjb3JyZWN0bHkgZGVhbHMgd2l0aCB0eXBlcy4KKworICAgICMgVGhlIGNvZXJjaW9uIHJ1bGVzIGFyZSBjdXJyZW50bHkgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsLCBhbHRob3VnaCBhdAorICAgICMgc29tZSBwb2ludCB0aGF0IHNob3VsZCBjaGFuZ2UuIFRoZSB0ZXN0cyBhbmQgY29tbWVudHMgaGVyZSBkZWZpbmUgdGhlCisgICAgIyBjb3JyZWN0IGltcGxlbWVudGF0aW9uLgorCisgICAgIyBQcmUtY29uZGl0aW9ucyBvZiBfY29lcmNlOgorICAgICMKKyAgICAjICAgLSBUaGUgZmlyc3QgdGltZSBfc3VtIGNhbGxzIF9jb2VyY2UsIHRoZQorICAgICMgICAtIGNvZXJjZShULCBTKSB3aWxsIG5ldmVyIGJlIGNhbGxlZCB3aXRoIGJvb2wgYXMgdGhlIGZpcnN0IGFyZ3VtZW50OworICAgICMgICAgIHRoaXMgaXMgYSBwcmUtY29uZGl0aW9uLCBndWFyZGVkIHdpdGggYW4gYXNzZXJ0aW9uLgorCisgICAgIworICAgICMgICAtIGNvZXJjZShULCBUKSB3aWxsIGFsd2F5cyByZXR1cm4gVDsgd2UgYXNzdW1lIFQgaXMgYSB2YWxpZCBudW1lcmljCisgICAgIyAgICAgdHlwZS4gVmlvbGF0ZSB0aGlzIGFzc3VtcHRpb24gYXQgeW91ciBvd24gcmlzay4KKyAgICAjCisgICAgIyAgIC0gQXBhcnQgZnJvbSBhcyBhYm92ZSwgYm9vbCBpcyB0cmVhdGVkIGFzIGlmIGl0IHdlcmUgYWN0dWFsbHkgaW50LgorICAgICMKKyAgICAjICAgLSBjb2VyY2UoaW50LCBYKSBhbmQgY29lcmNlKFgsIGludCkgcmV0dXJuIFguCisgICAgIyAgIC0KKyAgICBkZWYgdGVzdF9ib29sKHNlbGYpOgorICAgICAgICAjIGJvb2wgaXMgc29tZXdoYXQgc3BlY2lhbCwgZHVlIHRvIHRoZSBwcmUtY29uZGl0aW9uIHRoYXQgaXQgaXMKKyAgICAgICAgIyBuZXZlciBnaXZlbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gX2NvZXJjZSwgYW5kIHRoYXQgaXQgY2Fubm90CisgICAgICAgICMgYmUgc3ViY2xhc3NlZC4gU28gd2UgdGVzdCBpdCBzcGVjaWFsbHkuCisgICAgICAgIGZvciBUIGluIChpbnQsIGZsb2F0LCBGcmFjdGlvbiwgRGVjaW1hbCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHN0YXRpc3RpY3MuX2NvZXJjZShULCBib29sKSwgVCkKKyAgICAgICAgICAgIGNsYXNzIE15Q2xhc3MoVCk6IHBhc3MKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3RhdGlzdGljcy5fY29lcmNlKE15Q2xhc3MsIGJvb2wpLCBNeUNsYXNzKQorCisgICAgZGVmIGFzc2VydENvZXJjZVRvKHNlbGYsIEEsIEIpOgorICAgICAgICAiIiJBc3NlcnQgdGhhdCB0eXBlIEEgY29lcmNlcyB0byBCLiIiIgorICAgICAgICBzZWxmLmFzc2VydElzKHN0YXRpc3RpY3MuX2NvZXJjZShBLCBCKSwgQikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzdGF0aXN0aWNzLl9jb2VyY2UoQiwgQSksIEIpCisKKyAgICBkZWYgY2hlY2tfY29lcmNlX3RvKHNlbGYsIEEsIEIpOgorICAgICAgICAiIiJDaGVja3MgdGhhdCB0eXBlIEEgY29lcmNlcyB0byBCLCBpbmNsdWRpbmcgc3ViY2xhc3Nlcy4iIiIKKyAgICAgICAgIyBBc3NlcnQgdGhhdCB0eXBlIEEgaXMgY29lcmNlZCB0byBCLgorICAgICAgICBzZWxmLmFzc2VydENvZXJjZVRvKEEsIEIpCisgICAgICAgICMgU3ViY2xhc3NlcyBvZiBBIGFyZSBhbHNvIGNvZXJjZWQgdG8gQi4KKyAgICAgICAgY2xhc3MgU3ViY2xhc3NPZkEoQSk6IHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRDb2VyY2VUbyhTdWJjbGFzc09mQSwgQikKKyAgICAgICAgIyBBLCBhbmQgc3ViY2xhc3NlcyBvZiBBLCBhcmUgY29lcmNlZCB0byBzdWJjbGFzc2VzIG9mIEIuCisgICAgICAgIGNsYXNzIFN1YmNsYXNzT2ZCKEIpOiBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0Q29lcmNlVG8oQSwgU3ViY2xhc3NPZkIpCisgICAgICAgIHNlbGYuYXNzZXJ0Q29lcmNlVG8oU3ViY2xhc3NPZkEsIFN1YmNsYXNzT2ZCKQorCisgICAgZGVmIGFzc2VydENvZXJjZVJhaXNlcyhzZWxmLCBBLCBCKToKKyAgICAgICAgIiIiQXNzZXJ0IHRoYXQgY29lcmNpbmcgQSB0byBCLCBvciB2aWNlIHZlcnNhLCByYWlzZXMgVHlwZUVycm9yLiIiIgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHN0YXRpc3RpY3MuX2NvZXJjZSwgKEEsIEIpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHN0YXRpc3RpY3MuX2NvZXJjZSwgKEIsIEEpKQorCisgICAgZGVmIGNoZWNrX3R5cGVfY29lcmNpb25zKHNlbGYsIFQpOgorICAgICAgICAiIiJDaGVjayB0aGF0IHR5cGUgVCBjb2VyY2VzIGNvcnJlY3RseSB3aXRoIHN1YmNsYXNzZXMgb2YgaXRzZWxmLiIiIgorICAgICAgICBhc3NlcnQgVCBpcyBub3QgYm9vbAorICAgICAgICAjIENvZXJjaW5nIGEgdHlwZSB3aXRoIGl0c2VsZiByZXR1cm5zIHRoZSBzYW1lIHR5cGUuCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3RhdGlzdGljcy5fY29lcmNlKFQsIFQpLCBUKQorICAgICAgICAjIENvZXJjaW5nIGEgdHlwZSB3aXRoIGEgc3ViY2xhc3Mgb2YgaXRzZWxmIHJldHVybnMgdGhlIHN1YmNsYXNzLgorICAgICAgICBjbGFzcyBVKFQpOiBwYXNzCisgICAgICAgIGNsYXNzIFYoVCk6IHBhc3MKKyAgICAgICAgY2xhc3MgVyhVKTogcGFzcworICAgICAgICBmb3IgdHlwIGluIChVLCBWLCBXKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Q29lcmNlVG8oVCwgdHlwKQorICAgICAgICBzZWxmLmFzc2VydENvZXJjZVRvKFUsIFcpCisgICAgICAgICMgQ29lcmNpbmcgdHdvIHN1YmNsYXNzZXMgdGhhdCBhcmVuJ3QgcGFyZW50L2NoaWxkIGlzIGFuIGVycm9yLgorICAgICAgICBzZWxmLmFzc2VydENvZXJjZVJhaXNlcyhVLCBWKQorICAgICAgICBzZWxmLmFzc2VydENvZXJjZVJhaXNlcyhWLCBXKQorCisgICAgZGVmIHRlc3RfaW50KHNlbGYpOgorICAgICAgICAjIENoZWNrIHRoYXQgaW50IGNvZXJjZXMgY29ycmVjdGx5LgorICAgICAgICBzZWxmLmNoZWNrX3R5cGVfY29lcmNpb25zKGludCkKKyAgICAgICAgZm9yIHR5cCBpbiAoZmxvYXQsIEZyYWN0aW9uLCBEZWNpbWFsKToKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfY29lcmNlX3RvKGludCwgdHlwKQorCisgICAgZGVmIHRlc3RfZnJhY3Rpb24oc2VsZik6CisgICAgICAgICMgQ2hlY2sgdGhhdCBGcmFjdGlvbiBjb2VyY2VzIGNvcnJlY3RseS4KKyAgICAgICAgc2VsZi5jaGVja190eXBlX2NvZXJjaW9ucyhGcmFjdGlvbikKKyAgICAgICAgc2VsZi5jaGVja19jb2VyY2VfdG8oRnJhY3Rpb24sIGZsb2F0KQorCisgICAgZGVmIHRlc3RfZGVjaW1hbChzZWxmKToKKyAgICAgICAgIyBDaGVjayB0aGF0IERlY2ltYWwgY29lcmNlcyBjb3JyZWN0bHkuCisgICAgICAgIHNlbGYuY2hlY2tfdHlwZV9jb2VyY2lvbnMoRGVjaW1hbCkKKworICAgIGRlZiB0ZXN0X2Zsb2F0KHNlbGYpOgorICAgICAgICAjIENoZWNrIHRoYXQgZmxvYXQgY29lcmNlcyBjb3JyZWN0bHkuCisgICAgICAgIHNlbGYuY2hlY2tfdHlwZV9jb2VyY2lvbnMoZmxvYXQpCisKKyAgICBkZWYgdGVzdF9ub25fbnVtZXJpY190eXBlcyhzZWxmKToKKyAgICAgICAgZm9yIGJhZF90eXBlIGluIChzdHIsIGxpc3QsIHR5cGUoTm9uZSksIHR1cGxlLCBkaWN0KToKKyAgICAgICAgICAgIGZvciBnb29kX3R5cGUgaW4gKGludCwgZmxvYXQsIEZyYWN0aW9uLCBEZWNpbWFsKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydENvZXJjZVJhaXNlcyhnb29kX3R5cGUsIGJhZF90eXBlKQorCisgICAgZGVmIHRlc3RfaW5jb21wYXRpYmxlX3R5cGVzKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBpbmNvbXBhdGlibGUgdHlwZXMgcmFpc2UuCisgICAgICAgIGZvciBUIGluIChmbG9hdCwgRnJhY3Rpb24pOgorICAgICAgICAgICAgY2xhc3MgTXlTdWJjbGFzcyhUKTogcGFzcworICAgICAgICAgICAgc2VsZi5hc3NlcnRDb2VyY2VSYWlzZXMoVCwgRGVjaW1hbCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Q29lcmNlUmFpc2VzKE15U3ViY2xhc3MsIERlY2ltYWwpCisKKworY2xhc3MgQ29udmVydFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMgVGVzdCBwcml2YXRlIF9jb252ZXJ0IGZ1bmN0aW9uLgorCisgICAgZGVmIGNoZWNrX2V4YWN0X2VxdWFsKHNlbGYsIHgsIHkpOgorICAgICAgICAiIiJDaGVjayB0aGF0IHggZXF1YWxzIHksIGFuZCBoYXMgdGhlIHNhbWUgdHlwZSBhcyB3ZWxsLiIiIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIHkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZSh4KSwgdHlwZSh5KSkKKworICAgIGRlZiB0ZXN0X2ludChzZWxmKToKKyAgICAgICAgIyBUZXN0IGNvbnZlcnNpb25zIHRvIGludC4KKyAgICAgICAgeCA9IHN0YXRpc3RpY3MuX2NvbnZlcnQoRnJhY3Rpb24oNzEpLCBpbnQpCisgICAgICAgIHNlbGYuY2hlY2tfZXhhY3RfZXF1YWwoeCwgNzEpCisgICAgICAgIGNsYXNzIE15SW50KGludCk6IHBhc3MKKyAgICAgICAgeCA9IHN0YXRpc3RpY3MuX2NvbnZlcnQoRnJhY3Rpb24oMTcpLCBNeUludCkKKyAgICAgICAgc2VsZi5jaGVja19leGFjdF9lcXVhbCh4LCBNeUludCgxNykpCisKKyAgICBkZWYgdGVzdF9mcmFjdGlvbihzZWxmKToKKyAgICAgICAgIyBUZXN0IGNvbnZlcnNpb25zIHRvIEZyYWN0aW9uLgorICAgICAgICB4ID0gc3RhdGlzdGljcy5fY29udmVydChGcmFjdGlvbig5NSwgOTkpLCBGcmFjdGlvbikKKyAgICAgICAgc2VsZi5jaGVja19leGFjdF9lcXVhbCh4LCBGcmFjdGlvbig5NSwgOTkpKQorICAgICAgICBjbGFzcyBNeUZyYWN0aW9uKEZyYWN0aW9uKToKKyAgICAgICAgICAgIGRlZiBfX3RydWVkaXZfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX19jbGFzc19fKHN1cGVyKCkuX190cnVlZGl2X18ob3RoZXIpKQorICAgICAgICB4ID0gc3RhdGlzdGljcy5fY29udmVydChGcmFjdGlvbig3MSwgMTMpLCBNeUZyYWN0aW9uKQorICAgICAgICBzZWxmLmNoZWNrX2V4YWN0X2VxdWFsKHgsIE15RnJhY3Rpb24oNzEsIDEzKSkKKworICAgIGRlZiB0ZXN0X2Zsb2F0KHNlbGYpOgorICAgICAgICAjIFRlc3QgY29udmVyc2lvbnMgdG8gZmxvYXQuCisgICAgICAgIHggPSBzdGF0aXN0aWNzLl9jb252ZXJ0KEZyYWN0aW9uKC0xLCAyKSwgZmxvYXQpCisgICAgICAgIHNlbGYuY2hlY2tfZXhhY3RfZXF1YWwoeCwgLTAuNSkKKyAgICAgICAgY2xhc3MgTXlGbG9hdChmbG9hdCk6CisgICAgICAgICAgICBkZWYgX190cnVlZGl2X18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9fY2xhc3NfXyhzdXBlcigpLl9fdHJ1ZWRpdl9fKG90aGVyKSkKKyAgICAgICAgeCA9IHN0YXRpc3RpY3MuX2NvbnZlcnQoRnJhY3Rpb24oOSwgOCksIE15RmxvYXQpCisgICAgICAgIHNlbGYuY2hlY2tfZXhhY3RfZXF1YWwoeCwgTXlGbG9hdCgxLjEyNSkpCisKKyAgICBkZWYgdGVzdF9kZWNpbWFsKHNlbGYpOgorICAgICAgICAjIFRlc3QgY29udmVyc2lvbnMgdG8gRGVjaW1hbC4KKyAgICAgICAgeCA9IHN0YXRpc3RpY3MuX2NvbnZlcnQoRnJhY3Rpb24oMSwgNDApLCBEZWNpbWFsKQorICAgICAgICBzZWxmLmNoZWNrX2V4YWN0X2VxdWFsKHgsIERlY2ltYWwoIjAuMDI1IikpCisgICAgICAgIGNsYXNzIE15RGVjaW1hbChEZWNpbWFsKToKKyAgICAgICAgICAgIGRlZiBfX3RydWVkaXZfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX19jbGFzc19fKHN1cGVyKCkuX190cnVlZGl2X18ob3RoZXIpKQorICAgICAgICB4ID0gc3RhdGlzdGljcy5fY29udmVydChGcmFjdGlvbigtMTUsIDE2KSwgTXlEZWNpbWFsKQorICAgICAgICBzZWxmLmNoZWNrX2V4YWN0X2VxdWFsKHgsIE15RGVjaW1hbCgiLTAuOTM3NSIpKQorCisgICAgZGVmIHRlc3RfaW5mKHNlbGYpOgorICAgICAgICBmb3IgSU5GIGluIChmbG9hdCgnaW5mJyksIERlY2ltYWwoJ2luZicpKToKKyAgICAgICAgICAgIGZvciBpbmYgaW4gKElORiwgLUlORik6CisgICAgICAgICAgICAgICAgeCA9IHN0YXRpc3RpY3MuX2NvbnZlcnQoaW5mLCB0eXBlKGluZikpCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja19leGFjdF9lcXVhbCh4LCBpbmYpCisKKyAgICBkZWYgdGVzdF9uYW4oc2VsZik6CisgICAgICAgIGZvciBuYW4gaW4gKGZsb2F0KCduYW4nKSwgRGVjaW1hbCgnTkFOJyksIERlY2ltYWwoJ3NOQU4nKSk6CisgICAgICAgICAgICB4ID0gc3RhdGlzdGljcy5fY29udmVydChuYW4sIHR5cGUobmFuKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShfbmFuX2VxdWFsKHgsIG5hbikpCisKKworIyA9PT0gVGVzdHMgZm9yIHB1YmxpYyBmdW5jdGlvbnMgPT09CisKK2NsYXNzIFVuaXZhcmlhdGVDb21tb25NaXhpbjoKKyAgICAjIENvbW1vbiB0ZXN0cyBmb3IgbW9zdCB1bml2YXJpYXRlIGZ1bmN0aW9ucyB0aGF0IHRha2UgYSBkYXRhIGFyZ3VtZW50LgorCisgICAgZGVmIHRlc3Rfbm9fYXJncyhzZWxmKToKKyAgICAgICAgIyBGYWlsIGlmIGdpdmVuIG5vIGFyZ3VtZW50cy4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmZ1bmMpCisKKyAgICBkZWYgdGVzdF9lbXB0eV9kYXRhKHNlbGYpOgorICAgICAgICAjIEZhaWwgd2hlbiB0aGUgZGF0YSBhcmd1bWVudCAoZmlyc3QgYXJndW1lbnQpIGlzIGVtcHR5LgorICAgICAgICBmb3IgZW1wdHkgaW4gKFtdLCAoKSwgaXRlcihbXSkpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc3RhdGlzdGljcy5TdGF0aXN0aWNzRXJyb3IsIHNlbGYuZnVuYywgZW1wdHkpCisKKyAgICBkZWYgcHJlcGFyZV9kYXRhKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gaW50IGRhdGEgZm9yIHZhcmlvdXMgdGVzdHMuIiIiCisgICAgICAgIGRhdGEgPSBsaXN0KHJhbmdlKDEwKSkKKyAgICAgICAgd2hpbGUgZGF0YSA9PSBzb3J0ZWQoZGF0YSk6CisgICAgICAgICAgICByYW5kb20uc2h1ZmZsZShkYXRhKQorICAgICAgICByZXR1cm4gZGF0YQorCisgICAgZGVmIHRlc3Rfbm9faW5wbGFjZV9tb2RpZmljYXRpb25zKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCB0aGUgZnVuY3Rpb24gZG9lcyBub3QgbW9kaWZ5IGl0cyBpbnB1dCBkYXRhLgorICAgICAgICBkYXRhID0gc2VsZi5wcmVwYXJlX2RhdGEoKQorICAgICAgICBhc3NlcnQgbGVuKGRhdGEpICE9IDEgICMgTmVjZXNzYXJ5IHRvIGF2b2lkIGluZmluaXRlIGxvb3AuCisgICAgICAgIGFzc2VydCBkYXRhICE9IHNvcnRlZChkYXRhKQorICAgICAgICBzYXZlZCA9IGRhdGFbOl0KKyAgICAgICAgYXNzZXJ0IGRhdGEgaXMgbm90IHNhdmVkCisgICAgICAgIF8gPSBzZWxmLmZ1bmMoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRMaXN0RXF1YWwoZGF0YSwgc2F2ZWQsICJkYXRhIGhhcyBiZWVuIG1vZGlmaWVkIikKKworICAgIGRlZiB0ZXN0X29yZGVyX2RvZXNudF9tYXR0ZXIoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IHRoZSBvcmRlciBvZiBkYXRhIHBvaW50cyBkb2Vzbid0IGNoYW5nZSB0aGUgcmVzdWx0LgorCisgICAgICAgICMgQ0FVVElPTjogZHVlIHRvIGZsb2F0aW5nIHBvaW50IHJvdW5kaW5nIGVycm9ycywgdGhlIHJlc3VsdCBhY3R1YWxseQorICAgICAgICAjIG1heSBkZXBlbmQgb24gdGhlIG9yZGVyLiBDb25zaWRlciB0aGlzIHRlc3QgcmVwcmVzZW50aW5nIGFuIGlkZWFsLgorICAgICAgICAjIFRvIGF2b2lkIHRoaXMgdGVzdCBmYWlsaW5nLCBvbmx5IHRlc3Qgd2l0aCBleGFjdCB2YWx1ZXMgc3VjaCBhcyBpbnRzCisgICAgICAgICMgb3IgRnJhY3Rpb25zLgorICAgICAgICBkYXRhID0gWzEsIDIsIDMsIDMsIDMsIDQsIDUsIDZdKjEwMAorICAgICAgICBleHBlY3RlZCA9IHNlbGYuZnVuYyhkYXRhKQorICAgICAgICByYW5kb20uc2h1ZmZsZShkYXRhKQorICAgICAgICBhY3R1YWwgPSBzZWxmLmZ1bmMoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgYWN0dWFsKQorCisgICAgZGVmIHRlc3RfdHlwZV9vZl9kYXRhX2NvbGxlY3Rpb24oc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IHRoZSB0eXBlIG9mIGl0ZXJhYmxlIGRhdGEgZG9lc24ndCBlZmZlY3QgdGhlIHJlc3VsdC4KKyAgICAgICAgY2xhc3MgTXlMaXN0KGxpc3QpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjbGFzcyBNeVR1cGxlKHR1cGxlKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZGVmIGdlbmVyYXRvcihkYXRhKToKKyAgICAgICAgICAgIHJldHVybiAob2JqIGZvciBvYmogaW4gZGF0YSkKKyAgICAgICAgZGF0YSA9IHNlbGYucHJlcGFyZV9kYXRhKCkKKyAgICAgICAgZXhwZWN0ZWQgPSBzZWxmLmZ1bmMoZGF0YSkKKyAgICAgICAgZm9yIGtpbmQgaW4gKGxpc3QsIHR1cGxlLCBpdGVyLCBNeUxpc3QsIE15VHVwbGUsIGdlbmVyYXRvcik6CisgICAgICAgICAgICByZXN1bHQgPSBzZWxmLmZ1bmMoa2luZChkYXRhKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X3JhbmdlX2RhdGEoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IGZ1bmN0aW9ucyB3b3JrIHdpdGggcmFuZ2Ugb2JqZWN0cy4KKyAgICAgICAgZGF0YSA9IHJhbmdlKDIwLCA1MCwgMykKKyAgICAgICAgZXhwZWN0ZWQgPSBzZWxmLmZ1bmMobGlzdChkYXRhKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfYmFkX2FyZ190eXBlcyhzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgZnVuY3Rpb24gcmFpc2VzIHdoZW4gZ2l2ZW4gZGF0YSBvZiB0aGUgd3JvbmcgdHlwZS4KKworICAgICAgICAjIERvbid0IHJvbGwgdGhlIGZvbGxvd2luZyBpbnRvIGEgbG9vcCBsaWtlIHRoaXM6CisgICAgICAgICMgICBmb3IgYmFkIGluIGxpc3Rfb2ZfYmFkOgorICAgICAgICAjICAgICAgIHNlbGYuY2hlY2tfZm9yX3R5cGVfZXJyb3IoYmFkKQorICAgICAgICAjCisgICAgICAgICMgU2luY2UgYXNzZXJ0UmFpc2VzIGRvZXNuJ3Qgc2hvdyB0aGUgYXJndW1lbnRzIHRoYXQgY2F1c2VkIHRoZSB0ZXN0CisgICAgICAgICMgZmFpbHVyZSwgaXQgaXMgdmVyeSBkaWZmaWN1bHQgdG8gZGVidWcgdGhlc2UgdGVzdCBmYWlsdXJlcyB3aGVuIHRoZQorICAgICAgICAjIGZvbGxvd2luZyBhcmUgaW4gYSBsb29wLgorICAgICAgICBzZWxmLmNoZWNrX2Zvcl90eXBlX2Vycm9yKE5vbmUpCisgICAgICAgIHNlbGYuY2hlY2tfZm9yX3R5cGVfZXJyb3IoMjMpCisgICAgICAgIHNlbGYuY2hlY2tfZm9yX3R5cGVfZXJyb3IoNDIuMCkKKyAgICAgICAgc2VsZi5jaGVja19mb3JfdHlwZV9lcnJvcihvYmplY3QoKSkKKworICAgIGRlZiBjaGVja19mb3JfdHlwZV9lcnJvcihzZWxmLCAqYXJncyk6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5mdW5jLCAqYXJncykKKworICAgIGRlZiB0ZXN0X3R5cGVfb2ZfZGF0YV9lbGVtZW50KHNlbGYpOgorICAgICAgICAjIENoZWNrIHRoZSB0eXBlIG9mIGRhdGEgZWxlbWVudHMgZG9lc24ndCBhZmZlY3QgdGhlIG51bWVyaWMgcmVzdWx0LgorICAgICAgICAjIFRoaXMgaXMgYSB3ZWFrZXIgdGVzdCB0aGFuIFVuaXZhcmlhdGVUeXBlTWl4aW4udGVzdFR5cGVzQ29uc2VydmVkLAorICAgICAgICAjIGJlY2F1c2UgaXQgY2hlY2tzIHRoZSBudW1lcmljIHJlc3VsdCBieSBlcXVhbGl0eSwgYnV0IG5vdCBieSB0eXBlLgorICAgICAgICBjbGFzcyBNeUZsb2F0KGZsb2F0KToKKyAgICAgICAgICAgIGRlZiBfX3RydWVkaXZfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGUoc2VsZikoc3VwZXIoKS5fX3RydWVkaXZfXyhvdGhlcikpCisgICAgICAgICAgICBkZWYgX19hZGRfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGUoc2VsZikoc3VwZXIoKS5fX2FkZF9fKG90aGVyKSkKKyAgICAgICAgICAgIF9fcmFkZF9fID0gX19hZGRfXworCisgICAgICAgIHJhdyA9IHNlbGYucHJlcGFyZV9kYXRhKCkKKyAgICAgICAgZXhwZWN0ZWQgPSBzZWxmLmZ1bmMocmF3KQorICAgICAgICBmb3Iga2luZCBpbiAoZmxvYXQsIE15RmxvYXQsIERlY2ltYWwsIEZyYWN0aW9uKToKKyAgICAgICAgICAgIGRhdGEgPSBba2luZCh4KSBmb3IgeCBpbiByYXddCisgICAgICAgICAgICByZXN1bHQgPSB0eXBlKGV4cGVjdGVkKShzZWxmLmZ1bmMoZGF0YSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgZXhwZWN0ZWQpCisKKworY2xhc3MgVW5pdmFyaWF0ZVR5cGVNaXhpbjoKKyAgICAiIiJNaXhpbiBjbGFzcyBmb3IgdHlwZS1jb25zZXJ2aW5nIGZ1bmN0aW9ucy4KKworICAgIFRoaXMgbWl4aW4gY2xhc3MgaG9sZHMgdGVzdChzKSBmb3IgZnVuY3Rpb25zIHdoaWNoIGNvbnNlcnZlIHRoZSB0eXBlIG9mCisgICAgaW5kaXZpZHVhbCBkYXRhIHBvaW50cy4gRS5nLiB0aGUgbWVhbiBvZiBhIGxpc3Qgb2YgRnJhY3Rpb25zIHNob3VsZCBpdHNlbGYKKyAgICBiZSBhIEZyYWN0aW9uLgorCisgICAgTm90IGFsbCB0ZXN0cyB0byBkbyB3aXRoIHR5cGVzIG5lZWQgZ28gaW4gdGhpcyBjbGFzcy4gT25seSB0aG9zZSB0aGF0CisgICAgcmVseSBvbiB0aGUgZnVuY3Rpb24gcmV0dXJuaW5nIHRoZSBzYW1lIHR5cGUgYXMgaXRzIGlucHV0IGRhdGEuCisgICAgIiIiCisgICAgZGVmIHRlc3RfdHlwZXNfY29uc2VydmVkKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBmdW5jdGlvbnMga2VlcHMgdGhlIHNhbWUgdHlwZSBhcyB0aGVpciBkYXRhIHBvaW50cy4KKyAgICAgICAgIyAoRXhjbHVkZXMgbWl4ZWQgZGF0YSB0eXBlcy4pIFRoaXMgb25seSB0ZXN0cyB0aGUgdHlwZSBvZiB0aGUgcmV0dXJuCisgICAgICAgICMgcmVzdWx0LCBub3QgdGhlIHZhbHVlLgorICAgICAgICBjbGFzcyBNeUZsb2F0KGZsb2F0KToKKyAgICAgICAgICAgIGRlZiBfX3RydWVkaXZfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGUoc2VsZikoc3VwZXIoKS5fX3RydWVkaXZfXyhvdGhlcikpCisgICAgICAgICAgICBkZWYgX19zdWJfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGUoc2VsZikoc3VwZXIoKS5fX3N1Yl9fKG90aGVyKSkKKyAgICAgICAgICAgIGRlZiBfX3JzdWJfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGUoc2VsZikoc3VwZXIoKS5fX3JzdWJfXyhvdGhlcikpCisgICAgICAgICAgICBkZWYgX19wb3dfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGUoc2VsZikoc3VwZXIoKS5fX3Bvd19fKG90aGVyKSkKKyAgICAgICAgICAgIGRlZiBfX2FkZF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICByZXR1cm4gdHlwZShzZWxmKShzdXBlcigpLl9fYWRkX18ob3RoZXIpKQorICAgICAgICAgICAgX19yYWRkX18gPSBfX2FkZF9fCisKKyAgICAgICAgZGF0YSA9IHNlbGYucHJlcGFyZV9kYXRhKCkKKyAgICAgICAgZm9yIGtpbmQgaW4gKGZsb2F0LCBEZWNpbWFsLCBGcmFjdGlvbiwgTXlGbG9hdCk6CisgICAgICAgICAgICBkID0gW2tpbmQoeCkgZm9yIHggaW4gZGF0YV0KKyAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuZnVuYyhkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKHJlc3VsdCksIGtpbmQpCisKKworY2xhc3MgVGVzdFN1bUNvbW1vbihVbml2YXJpYXRlQ29tbW9uTWl4aW4sIFVuaXZhcmlhdGVUeXBlTWl4aW4pOgorICAgICMgQ29tbW9uIHRlc3QgY2FzZXMgZm9yIHN0YXRpc3RpY3MuX3N1bSgpIGZ1bmN0aW9uLgorCisgICAgIyBUaGlzIHRlc3Qgc3VpdGUgbG9va3Mgb25seSBhdCB0aGUgbnVtZXJpYyB2YWx1ZSByZXR1cm5lZCBieSBfc3VtLAorICAgICMgYWZ0ZXIgY29udmVyc2lvbiB0byB0aGUgYXBwcm9wcmlhdGUgdHlwZS4KKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIGRlZiBzaW1wbGlmaWVkX3N1bSgqYXJncyk6CisgICAgICAgICAgICBULCB2YWx1ZSwgbiA9IHN0YXRpc3RpY3MuX3N1bSgqYXJncykKKyAgICAgICAgICAgIHJldHVybiBzdGF0aXN0aWNzLl9jb2VyY2UodmFsdWUsIFQpCisgICAgICAgIHNlbGYuZnVuYyA9IHNpbXBsaWZpZWRfc3VtCisKKworY2xhc3MgVGVzdFN1bShOdW1lcmljVGVzdENhc2UpOgorICAgICMgVGVzdCBjYXNlcyBmb3Igc3RhdGlzdGljcy5fc3VtKCkgZnVuY3Rpb24uCisKKyAgICAjIFRoZXNlIHRlc3RzIGxvb2sgYXQgdGhlIGVudGlyZSB0aHJlZSB2YWx1ZSB0dXBsZSByZXR1cm5lZCBieSBfc3VtLgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmZ1bmMgPSBzdGF0aXN0aWNzLl9zdW0KKworICAgIGRlZiB0ZXN0X2VtcHR5X2RhdGEoc2VsZik6CisgICAgICAgICMgT3ZlcnJpZGUgdGVzdCBmb3IgZW1wdHkgZGF0YS4KKyAgICAgICAgZm9yIGRhdGEgaW4gKFtdLCAoKSwgaXRlcihbXSkpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIChpbnQsIEZyYWN0aW9uKDApLCAwKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEsIDIzKSwgKGludCwgRnJhY3Rpb24oMjMpLCAwKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEsIDIuMyksIChmbG9hdCwgRnJhY3Rpb24oMi4zKSwgMCkpCisKKyAgICBkZWYgdGVzdF9pbnRzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhbMSwgNSwgMywgLTQsIC04LCAyMCwgNDIsIDFdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoaW50LCBGcmFjdGlvbig2MCksIDgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhbNCwgMiwgMywgLTgsIDddLCAxMDAwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoaW50LCBGcmFjdGlvbigxMDA4KSwgNSkpCisKKyAgICBkZWYgdGVzdF9mbG9hdHMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKFswLjI1XSoyMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgKGZsb2F0LCBGcmFjdGlvbig1LjApLCAyMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKFswLjEyNSwgMC4yNSwgMC41LCAwLjc1XSwgMS41KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoZmxvYXQsIEZyYWN0aW9uKDMuMTI1KSwgNCkpCisKKyAgICBkZWYgdGVzdF9mcmFjdGlvbnMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKFtGcmFjdGlvbigxLCAxMDAwKV0qNTAwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoRnJhY3Rpb24sIEZyYWN0aW9uKDEsIDIpLCA1MDApKQorCisgICAgZGVmIHRlc3RfZGVjaW1hbHMoc2VsZik6CisgICAgICAgIEQgPSBEZWNpbWFsCisgICAgICAgIGRhdGEgPSBbRCgiMC4wMDEiKSwgRCgiNS4yNDYiKSwgRCgiMS43MDIiKSwgRCgiLTAuMDI1IiksCisgICAgICAgICAgICAgICAgRCgiMy45NzQiKSwgRCgiMi4zMjgiKSwgRCgiNC42MTciKSwgRCgiMi44NDMiKSwKKyAgICAgICAgICAgICAgICBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLAorICAgICAgICAgICAgICAgICAgICAgICAgIChEZWNpbWFsLCBEZWNpbWFsKCIyMC42ODYiKSwgOCkpCisKKyAgICBkZWYgdGVzdF9jb21wYXJlX3dpdGhfbWF0aF9mc3VtKHNlbGYpOgorICAgICAgICAjIENvbXBhcmUgd2l0aCB0aGUgbWF0aC5mc3VtIGZ1bmN0aW9uLgorICAgICAgICAjIElkZWFsbHkgd2Ugb3VnaHQgdG8gZ2V0IHRoZSBleGFjdCBzYW1lIHJlc3VsdCwgYnV0IHNvbWV0aW1lcworICAgICAgICAjIHdlIGRpZmZlciBieSBhIHZlcnkgc2xpZ2h0IGFtb3VudCA6LSgKKyAgICAgICAgZGF0YSA9IFtyYW5kb20udW5pZm9ybSgtMTAwLCAxMDAwKSBmb3IgXyBpbiByYW5nZSgxMDAwKV0KKyAgICAgICAgc2VsZi5hc3NlcnRBcHByb3hFcXVhbChmbG9hdChzZWxmLmZ1bmMoZGF0YSlbMV0pLCBtYXRoLmZzdW0oZGF0YSksIHJlbD0yZS0xNikKKworICAgIGRlZiB0ZXN0X3N0YXJ0X2FyZ3VtZW50KHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCB0aGUgb3B0aW9uYWwgc3RhcnQgYXJndW1lbnQgd29ya3MgY29ycmVjdGx5LgorICAgICAgICBkYXRhID0gW3JhbmRvbS51bmlmb3JtKDEsIDEwMDApIGZvciBfIGluIHJhbmdlKDEwMCldCisgICAgICAgIHQgPSBzZWxmLmZ1bmMoZGF0YSlbMV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0KzQyLCBzZWxmLmZ1bmMoZGF0YSwgNDIpWzFdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQtMjMsIHNlbGYuZnVuYyhkYXRhLCAtMjMpWzFdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQrRnJhY3Rpb24oMWUyMCksIHNlbGYuZnVuYyhkYXRhLCAxZTIwKVsxXSkKKworICAgIGRlZiB0ZXN0X3N0cmluZ3NfZmFpbChzZWxmKToKKyAgICAgICAgIyBTdW0gb2Ygc3RyaW5ncyBzaG91bGQgZmFpbC4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmZ1bmMsIFsxLCAyLCAzXSwgJzk5OScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5mdW5jLCBbMSwgMiwgMywgJzk5OSddKQorCisgICAgZGVmIHRlc3RfYnl0ZXNfZmFpbChzZWxmKToKKyAgICAgICAgIyBTdW0gb2YgYnl0ZXMgc2hvdWxkIGZhaWwuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5mdW5jLCBbMSwgMiwgM10sIGInOTk5JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmZ1bmMsIFsxLCAyLCAzLCBiJzk5OSddKQorCisgICAgZGVmIHRlc3RfbWl4ZWRfc3VtKHNlbGYpOgorICAgICAgICAjIE1peGVkIGlucHV0IHR5cGVzIGFyZSBub3QgKGN1cnJlbnRseSkgYWxsb3dlZC4KKyAgICAgICAgIyBDaGVjayB0aGF0IG1peGVkIGRhdGEgdHlwZXMgZmFpbC4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmZ1bmMsIFsxLCAyLjAsIERlY2ltYWwoMSldKQorICAgICAgICAjIEFuZCBzbyBkb2VzIG1peGVkIHN0YXJ0IGFyZ3VtZW50LgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuZnVuYywgWzEsIDIuMF0sIERlY2ltYWwoMSkpCisKKworY2xhc3MgU3VtVG9ydHVyZVRlc3QoTnVtZXJpY1Rlc3RDYXNlKToKKyAgICBkZWYgdGVzdF90b3J0dXJlKHNlbGYpOgorICAgICAgICAjIFRpbSBQZXRlcnMnIHRvcnR1cmUgdGVzdCBmb3Igc3VtLCBhbmQgdmFyaWFudHMgb2Ygc2FtZS4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0aXN0aWNzLl9zdW0oWzEsIDFlMTAwLCAxLCAtMWUxMDBdKjEwMDAwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoZmxvYXQsIEZyYWN0aW9uKDIwMDAwLjApLCA0MDAwMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdGlzdGljcy5fc3VtKFsxZTEwMCwgMSwgMSwgLTFlMTAwXSoxMDAwMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgKGZsb2F0LCBGcmFjdGlvbigyMDAwMC4wKSwgNDAwMDApKQorICAgICAgICBULCBudW0sIGNvdW50ID0gc3RhdGlzdGljcy5fc3VtKFsxZS0xMDAsIDEsIDFlLTEwMCwgLTFdKjEwMDAwKQorICAgICAgICBzZWxmLmFzc2VydElzKFQsIGZsb2F0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvdW50LCA0MDAwMCkKKyAgICAgICAgc2VsZi5hc3NlcnRBcHByb3hFcXVhbChmbG9hdChudW0pLCAyLjBlLTk2LCByZWw9NWUtMTYpCisKKworY2xhc3MgU3VtU3BlY2lhbFZhbHVlcyhOdW1lcmljVGVzdENhc2UpOgorICAgICMgVGVzdCB0aGF0IHN1bSB3b3JrcyBjb3JyZWN0bHkgd2l0aCBJRUVFLTc1NCBzcGVjaWFsIHZhbHVlcy4KKworICAgIGRlZiB0ZXN0X25hbihzZWxmKToKKyAgICAgICAgZm9yIHR5cGVfIGluIChmbG9hdCwgRGVjaW1hbCk6CisgICAgICAgICAgICBuYW4gPSB0eXBlXygnbmFuJykKKyAgICAgICAgICAgIHJlc3VsdCA9IHN0YXRpc3RpY3MuX3N1bShbMSwgbmFuLCAyXSlbMV0KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShyZXN1bHQpLCB0eXBlXykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKHJlc3VsdCkpCisKKyAgICBkZWYgY2hlY2tfaW5maW5pdHkoc2VsZiwgeCwgaW5mKToKKyAgICAgICAgIiIiQ2hlY2sgeCBpcyBhbiBpbmZpbml0eSBvZiB0aGUgc2FtZSB0eXBlIGFuZCBzaWduIGFzIGluZi4iIiIKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNpbmYoeCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZSh4KSwgdHlwZShpbmYpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHggPiAwLCBpbmYgPiAwKQorICAgICAgICBhc3NlcnQgeCA9PSBpbmYKKworICAgIGRlZiBkb190ZXN0X2luZihzZWxmLCBpbmYpOgorICAgICAgICAjIEFkZGluZyBhIHNpbmdsZSBpbmZpbml0eSBnaXZlcyBpbmZpbml0eS4KKyAgICAgICAgcmVzdWx0ID0gc3RhdGlzdGljcy5fc3VtKFsxLCAyLCBpbmYsIDNdKVsxXQorICAgICAgICBzZWxmLmNoZWNrX2luZmluaXR5KHJlc3VsdCwgaW5mKQorICAgICAgICAjIEFkZGluZyB0d28gaW5maW5pdGllcyBvZiB0aGUgc2FtZSBzaWduIGFsc28gZ2l2ZXMgaW5maW5pdHkuCisgICAgICAgIHJlc3VsdCA9IHN0YXRpc3RpY3MuX3N1bShbMSwgMiwgaW5mLCAzLCBpbmYsIDRdKVsxXQorICAgICAgICBzZWxmLmNoZWNrX2luZmluaXR5KHJlc3VsdCwgaW5mKQorCisgICAgZGVmIHRlc3RfZmxvYXRfaW5mKHNlbGYpOgorICAgICAgICBpbmYgPSBmbG9hdCgnaW5mJykKKyAgICAgICAgZm9yIHNpZ24gaW4gKCsxLCAtMSk6CisgICAgICAgICAgICBzZWxmLmRvX3Rlc3RfaW5mKHNpZ24qaW5mKQorCisgICAgZGVmIHRlc3RfZGVjaW1hbF9pbmYoc2VsZik6CisgICAgICAgIGluZiA9IERlY2ltYWwoJ2luZicpCisgICAgICAgIGZvciBzaWduIGluICgrMSwgLTEpOgorICAgICAgICAgICAgc2VsZi5kb190ZXN0X2luZihzaWduKmluZikKKworICAgIGRlZiB0ZXN0X2Zsb2F0X21pc21hdGNoZWRfaW5mcyhzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgYWRkaW5nIHR3byBpbmZpbml0aWVzIG9mIG9wcG9zaXRlIHNpZ24gZ2l2ZXMgYSBOQU4uCisgICAgICAgIGluZiA9IGZsb2F0KCdpbmYnKQorICAgICAgICByZXN1bHQgPSBzdGF0aXN0aWNzLl9zdW0oWzEsIDIsIGluZiwgMywgLWluZiwgNF0pWzFdCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKHJlc3VsdCkpCisKKyAgICBkZWYgdGVzdF9kZWNpbWFsX2V4dGVuZGVkY29udGV4dF9taXNtYXRjaGVkX2luZnNfdG9fbmFuKHNlbGYpOgorICAgICAgICAjIFRlc3QgYWRkaW5nIERlY2ltYWwgSU5GcyB3aXRoIG9wcG9zaXRlIHNpZ24gcmV0dXJucyBOQU4uCisgICAgICAgIGluZiA9IERlY2ltYWwoJ2luZicpCisgICAgICAgIGRhdGEgPSBbMSwgMiwgaW5mLCAzLCAtaW5mLCA0XQorICAgICAgICB3aXRoIGRlY2ltYWwubG9jYWxjb250ZXh0KGRlY2ltYWwuRXh0ZW5kZWRDb250ZXh0KToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKHN0YXRpc3RpY3MuX3N1bShkYXRhKVsxXSkpCisKKyAgICBkZWYgdGVzdF9kZWNpbWFsX2Jhc2ljY29udGV4dF9taXNtYXRjaGVkX2luZnNfdG9fbmFuKHNlbGYpOgorICAgICAgICAjIFRlc3QgYWRkaW5nIERlY2ltYWwgSU5GcyB3aXRoIG9wcG9zaXRlIHNpZ24gcmFpc2VzIEludmFsaWRPcGVyYXRpb24uCisgICAgICAgIGluZiA9IERlY2ltYWwoJ2luZicpCisgICAgICAgIGRhdGEgPSBbMSwgMiwgaW5mLCAzLCAtaW5mLCA0XQorICAgICAgICB3aXRoIGRlY2ltYWwubG9jYWxjb250ZXh0KGRlY2ltYWwuQmFzaWNDb250ZXh0KToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGRlY2ltYWwuSW52YWxpZE9wZXJhdGlvbiwgc3RhdGlzdGljcy5fc3VtLCBkYXRhKQorCisgICAgZGVmIHRlc3RfZGVjaW1hbF9zbmFuX3JhaXNlcyhzZWxmKToKKyAgICAgICAgIyBBZGRpbmcgc05BTiBzaG91bGQgcmFpc2UgSW52YWxpZE9wZXJhdGlvbi4KKyAgICAgICAgc05BTiA9IERlY2ltYWwoJ3NOQU4nKQorICAgICAgICBkYXRhID0gWzEsIHNOQU4sIDJdCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGRlY2ltYWwuSW52YWxpZE9wZXJhdGlvbiwgc3RhdGlzdGljcy5fc3VtLCBkYXRhKQorCisKKyMgPT09IFRlc3RzIGZvciBhdmVyYWdlcyA9PT0KKworY2xhc3MgQXZlcmFnZU1peGluKFVuaXZhcmlhdGVDb21tb25NaXhpbik6CisgICAgIyBNaXhpbiBjbGFzcyBob2xkaW5nIGNvbW1vbiB0ZXN0cyBmb3IgYXZlcmFnZXMuCisKKyAgICBkZWYgdGVzdF9zaW5nbGVfdmFsdWUoc2VsZik6CisgICAgICAgICMgQXZlcmFnZSBvZiBhIHNpbmdsZSB2YWx1ZSBpcyB0aGUgdmFsdWUgaXRzZWxmLgorICAgICAgICBmb3IgeCBpbiAoMjMsIDQyLjUsIDEuM2UxNSwgRnJhY3Rpb24oMTUsIDE5KSwgRGVjaW1hbCgnMC4yOCcpKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKFt4XSksIHgpCisKKyAgICBkZWYgdGVzdF9yZXBlYXRlZF9zaW5nbGVfdmFsdWUoc2VsZik6CisgICAgICAgICMgVGhlIGF2ZXJhZ2Ugb2YgYSBzaW5nbGUgcmVwZWF0ZWQgdmFsdWUgaXMgdGhlIHZhbHVlIGl0c2VsZi4KKyAgICAgICAgZm9yIHggaW4gKDMuNSwgMTcsIDIuNWUxNSwgRnJhY3Rpb24oNjEsIDY3KSwgRGVjaW1hbCgnNC45NzEyJykpOgorICAgICAgICAgICAgZm9yIGNvdW50IGluICgyLCA1LCAxMCwgMjApOgorICAgICAgICAgICAgICAgIGRhdGEgPSBbeF0qY291bnQKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgeCkKKworCitjbGFzcyBUZXN0TWVhbihOdW1lcmljVGVzdENhc2UsIEF2ZXJhZ2VNaXhpbiwgVW5pdmFyaWF0ZVR5cGVNaXhpbik6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmZ1bmMgPSBzdGF0aXN0aWNzLm1lYW4KKworICAgIGRlZiB0ZXN0X3RvcnR1cmVfcGVwKHNlbGYpOgorICAgICAgICAjICJUb3J0dXJlIFRlc3QiIGZyb20gUEVQLTQ1MC4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoWzFlMTAwLCAxLCAzLCAtMWUxMDBdKSwgMSkKKworICAgIGRlZiB0ZXN0X2ludHMoc2VsZik6CisgICAgICAgICMgVGVzdCBtZWFuIHdpdGggaW50cy4KKyAgICAgICAgZGF0YSA9IFswLCAxLCAyLCAzLCAzLCAzLCA0LCA1LCA1LCA2LCA3LCA3LCA3LCA3LCA4LCA5XQorICAgICAgICByYW5kb20uc2h1ZmZsZShkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgNC44MTI1KQorCisgICAgZGVmIHRlc3RfZmxvYXRzKHNlbGYpOgorICAgICAgICAjIFRlc3QgbWVhbiB3aXRoIGZsb2F0cy4KKyAgICAgICAgZGF0YSA9IFsxNy4yNSwgMTkuNzUsIDIwLjAsIDIxLjUsIDIxLjc1LCAyMy4yNSwgMjUuMTI1LCAyNy41XQorICAgICAgICByYW5kb20uc2h1ZmZsZShkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgMjIuMDE1NjI1KQorCisgICAgZGVmIHRlc3RfZGVjaW1hbHMoc2VsZik6CisgICAgICAgICMgVGVzdCBtZWFuIHdpdGggaW50cy4KKyAgICAgICAgRCA9IERlY2ltYWwKKyAgICAgICAgZGF0YSA9IFtEKCIxLjYzNCIpLCBEKCIyLjUxNyIpLCBEKCIzLjkxMiIpLCBEKCI0LjA3MiIpLCBEKCI1LjgxMyIpXQorICAgICAgICByYW5kb20uc2h1ZmZsZShkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgRCgiMy41ODk2IikpCisKKyAgICBkZWYgdGVzdF9mcmFjdGlvbnMoc2VsZik6CisgICAgICAgICMgVGVzdCBtZWFuIHdpdGggRnJhY3Rpb25zLgorICAgICAgICBGID0gRnJhY3Rpb24KKyAgICAgICAgZGF0YSA9IFtGKDEsIDIpLCBGKDIsIDMpLCBGKDMsIDQpLCBGKDQsIDUpLCBGKDUsIDYpLCBGKDYsIDcpLCBGKDcsIDgpXQorICAgICAgICByYW5kb20uc2h1ZmZsZShkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgRigxNDc5LCAxOTYwKSkKKworICAgIGRlZiB0ZXN0X2luZihzZWxmKToKKyAgICAgICAgIyBUZXN0IG1lYW4gd2l0aCBpbmZpbml0aWVzLgorICAgICAgICByYXcgPSBbMSwgMywgNSwgNywgOV0gICMgVXNlIG9ubHkgaW50cywgdG8gYXZvaWQgVHlwZUVycm9yIGxhdGVyLgorICAgICAgICBmb3Iga2luZCBpbiAoZmxvYXQsIERlY2ltYWwpOgorICAgICAgICAgICAgZm9yIHNpZ24gaW4gKDEsIC0xKToKKyAgICAgICAgICAgICAgICBpbmYgPSBraW5kKCJpbmYiKSpzaWduCisgICAgICAgICAgICAgICAgZGF0YSA9IHJhdyArIFtpbmZdCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5mdW5jKGRhdGEpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNpbmYocmVzdWx0KSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgaW5mKQorCisgICAgZGVmIHRlc3RfbWlzbWF0Y2hlZF9pbmZzKHNlbGYpOgorICAgICAgICAjIFRlc3QgbWVhbiB3aXRoIGluZmluaXRpZXMgb2Ygb3Bwb3NpdGUgc2lnbi4KKyAgICAgICAgZGF0YSA9IFsyLCA0LCA2LCBmbG9hdCgnaW5mJyksIDEsIDMsIDUsIGZsb2F0KCctaW5mJyldCisgICAgICAgIHJlc3VsdCA9IHNlbGYuZnVuYyhkYXRhKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihyZXN1bHQpKQorCisgICAgZGVmIHRlc3RfbmFuKHNlbGYpOgorICAgICAgICAjIFRlc3QgbWVhbiB3aXRoIE5BTnMuCisgICAgICAgIHJhdyA9IFsxLCAzLCA1LCA3LCA5XSAgIyBVc2Ugb25seSBpbnRzLCB0byBhdm9pZCBUeXBlRXJyb3IgbGF0ZXIuCisgICAgICAgIGZvciBraW5kIGluIChmbG9hdCwgRGVjaW1hbCk6CisgICAgICAgICAgICBpbmYgPSBraW5kKCJuYW4iKQorICAgICAgICAgICAgZGF0YSA9IHJhdyArIFtpbmZdCisgICAgICAgICAgICByZXN1bHQgPSBzZWxmLmZ1bmMoZGF0YSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKHJlc3VsdCkpCisKKyAgICBkZWYgdGVzdF9iaWdfZGF0YShzZWxmKToKKyAgICAgICAgIyBUZXN0IGFkZGluZyBhIGxhcmdlIGNvbnN0YW50IHRvIGV2ZXJ5IGRhdGEgcG9pbnQuCisgICAgICAgIGMgPSAxZTkKKyAgICAgICAgZGF0YSA9IFszLjQsIDQuNSwgNC45LCA2LjcsIDYuOCwgNy4yLCA4LjAsIDguMSwgOS40XQorICAgICAgICBleHBlY3RlZCA9IHNlbGYuZnVuYyhkYXRhKSArIGMKKyAgICAgICAgYXNzZXJ0IGV4cGVjdGVkICE9IGMKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5mdW5jKFt4K2MgZm9yIHggaW4gZGF0YV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X2RvdWJsZWRfZGF0YShzZWxmKToKKyAgICAgICAgIyBNZWFuIG9mIFthLGIsYy4uLnpdIHNob3VsZCBiZSBzYW1lIGFzIGZvciBbYSxhLGIsYixjLGMuLi56LHpdLgorICAgICAgICBkYXRhID0gW3JhbmRvbS51bmlmb3JtKC0zLCA1KSBmb3IgXyBpbiByYW5nZSgxMDAwKV0KKyAgICAgICAgZXhwZWN0ZWQgPSBzZWxmLmZ1bmMoZGF0YSkKKyAgICAgICAgYWN0dWFsID0gc2VsZi5mdW5jKGRhdGEqMikKKyAgICAgICAgc2VsZi5hc3NlcnRBcHByb3hFcXVhbChhY3R1YWwsIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfcmVncmVzc2lvbl8yMDU2MShzZWxmKToKKyAgICAgICAgIyBSZWdyZXNzaW9uIHRlc3QgZm9yIGlzc3VlIDIwNTYxLgorICAgICAgICAjIFNlZSBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMjA1NjEKKyAgICAgICAgZCA9IERlY2ltYWwoJzFlNCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdGlzdGljcy5tZWFuKFtkXSksIGQpCisKKyAgICBkZWYgdGVzdF9yZWdyZXNzaW9uXzI1MTc3KHNlbGYpOgorICAgICAgICAjIFJlZ3Jlc3Npb24gdGVzdCBmb3IgaXNzdWUgMjUxNzcuCisgICAgICAgICMgRW5zdXJlIHZlcnkgYmlnIGFuZCB2ZXJ5IHNtYWxsIGZsb2F0cyBkb24ndCBvdmVyZmxvdy4KKyAgICAgICAgIyBTZWUgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTI1MTc3LgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXRpc3RpY3MubWVhbigKKyAgICAgICAgICAgIFs4Ljk4ODQ2NTY3NDMxMTU3OWUrMzA3LCA4Ljk4ODQ2NTY3NDMxMTU4ZSszMDddKSwKKyAgICAgICAgICAgIDguOTg4NDY1Njc0MzExNThlKzMwNykKKyAgICAgICAgYmlnID0gOC45ODg0NjU2NzQzMTE1OGUrMzA3CisgICAgICAgIHRpbnkgPSA1ZS0zMjQKKyAgICAgICAgZm9yIG4gaW4gKDIsIDMsIDUsIDIwMCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXRpc3RpY3MubWVhbihbYmlnXSpuKSwgYmlnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0aXN0aWNzLm1lYW4oW3RpbnldKm4pLCB0aW55KQorCisKK2NsYXNzIFRlc3RNZWRpYW4oTnVtZXJpY1Rlc3RDYXNlLCBBdmVyYWdlTWl4aW4pOgorICAgICMgQ29tbW9uIHRlc3RzIGZvciBtZWRpYW4gYW5kIGFsbCBtZWRpYW4uKiBmdW5jdGlvbnMuCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmZ1bmMgPSBzdGF0aXN0aWNzLm1lZGlhbgorCisgICAgZGVmIHByZXBhcmVfZGF0YShzZWxmKToKKyAgICAgICAgIiIiT3ZlcmxvYWQgbWV0aG9kIGZyb20gVW5pdmFyaWF0ZUNvbW1vbk1peGluLiIiIgorICAgICAgICBkYXRhID0gc3VwZXIoKS5wcmVwYXJlX2RhdGEoKQorICAgICAgICBpZiBsZW4oZGF0YSklMiAhPSAxOgorICAgICAgICAgICAgZGF0YS5hcHBlbmQoMikKKyAgICAgICAgcmV0dXJuIGRhdGEKKworICAgIGRlZiB0ZXN0X2V2ZW5faW50cyhzZWxmKToKKyAgICAgICAgIyBUZXN0IG1lZGlhbiB3aXRoIGFuIGV2ZW4gbnVtYmVyIG9mIGludCBkYXRhIHBvaW50cy4KKyAgICAgICAgZGF0YSA9IFsxLCAyLCAzLCA0LCA1LCA2XQorICAgICAgICBhc3NlcnQgbGVuKGRhdGEpJTIgPT0gMAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgMy41KQorCisgICAgZGVmIHRlc3Rfb2RkX2ludHMoc2VsZik6CisgICAgICAgICMgVGVzdCBtZWRpYW4gd2l0aCBhbiBvZGQgbnVtYmVyIG9mIGludCBkYXRhIHBvaW50cy4KKyAgICAgICAgZGF0YSA9IFsxLCAyLCAzLCA0LCA1LCA2LCA5XQorICAgICAgICBhc3NlcnQgbGVuKGRhdGEpJTIgPT0gMQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgNCkKKworICAgIGRlZiB0ZXN0X29kZF9mcmFjdGlvbnMoc2VsZik6CisgICAgICAgICMgVGVzdCBtZWRpYW4gd29ya3Mgd2l0aCBhbiBvZGQgbnVtYmVyIG9mIEZyYWN0aW9ucy4KKyAgICAgICAgRiA9IEZyYWN0aW9uCisgICAgICAgIGRhdGEgPSBbRigxLCA3KSwgRigyLCA3KSwgRigzLCA3KSwgRig0LCA3KSwgRig1LCA3KV0KKyAgICAgICAgYXNzZXJ0IGxlbihkYXRhKSUyID09IDEKKyAgICAgICAgcmFuZG9tLnNodWZmbGUoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIEYoMywgNykpCisKKyAgICBkZWYgdGVzdF9ldmVuX2ZyYWN0aW9ucyhzZWxmKToKKyAgICAgICAgIyBUZXN0IG1lZGlhbiB3b3JrcyB3aXRoIGFuIGV2ZW4gbnVtYmVyIG9mIEZyYWN0aW9ucy4KKyAgICAgICAgRiA9IEZyYWN0aW9uCisgICAgICAgIGRhdGEgPSBbRigxLCA3KSwgRigyLCA3KSwgRigzLCA3KSwgRig0LCA3KSwgRig1LCA3KSwgRig2LCA3KV0KKyAgICAgICAgYXNzZXJ0IGxlbihkYXRhKSUyID09IDAKKyAgICAgICAgcmFuZG9tLnNodWZmbGUoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIEYoMSwgMikpCisKKyAgICBkZWYgdGVzdF9vZGRfZGVjaW1hbHMoc2VsZik6CisgICAgICAgICMgVGVzdCBtZWRpYW4gd29ya3Mgd2l0aCBhbiBvZGQgbnVtYmVyIG9mIERlY2ltYWxzLgorICAgICAgICBEID0gRGVjaW1hbAorICAgICAgICBkYXRhID0gW0QoJzIuNScpLCBEKCczLjEnKSwgRCgnNC4yJyksIEQoJzUuNycpLCBEKCc1LjgnKV0KKyAgICAgICAgYXNzZXJ0IGxlbihkYXRhKSUyID09IDEKKyAgICAgICAgcmFuZG9tLnNodWZmbGUoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIEQoJzQuMicpKQorCisgICAgZGVmIHRlc3RfZXZlbl9kZWNpbWFscyhzZWxmKToKKyAgICAgICAgIyBUZXN0IG1lZGlhbiB3b3JrcyB3aXRoIGFuIGV2ZW4gbnVtYmVyIG9mIERlY2ltYWxzLgorICAgICAgICBEID0gRGVjaW1hbAorICAgICAgICBkYXRhID0gW0QoJzEuMicpLCBEKCcyLjUnKSwgRCgnMy4xJyksIEQoJzQuMicpLCBEKCc1LjcnKSwgRCgnNS44JyldCisgICAgICAgIGFzc2VydCBsZW4oZGF0YSklMiA9PSAwCisgICAgICAgIHJhbmRvbS5zaHVmZmxlKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCBEKCczLjY1JykpCisKKworY2xhc3MgVGVzdE1lZGlhbkRhdGFUeXBlKE51bWVyaWNUZXN0Q2FzZSwgVW5pdmFyaWF0ZVR5cGVNaXhpbik6CisgICAgIyBUZXN0IGNvbnNlcnZhdGlvbiBvZiBkYXRhIGVsZW1lbnQgdHlwZSBmb3IgbWVkaWFuLgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5mdW5jID0gc3RhdGlzdGljcy5tZWRpYW4KKworICAgIGRlZiBwcmVwYXJlX2RhdGEoc2VsZik6CisgICAgICAgIGRhdGEgPSBsaXN0KHJhbmdlKDE1KSkKKyAgICAgICAgYXNzZXJ0IGxlbihkYXRhKSUyID09IDEKKyAgICAgICAgd2hpbGUgZGF0YSA9PSBzb3J0ZWQoZGF0YSk6CisgICAgICAgICAgICByYW5kb20uc2h1ZmZsZShkYXRhKQorICAgICAgICByZXR1cm4gZGF0YQorCisKK2NsYXNzIFRlc3RNZWRpYW5Mb3coVGVzdE1lZGlhbiwgVW5pdmFyaWF0ZVR5cGVNaXhpbik6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmZ1bmMgPSBzdGF0aXN0aWNzLm1lZGlhbl9sb3cKKworICAgIGRlZiB0ZXN0X2V2ZW5faW50cyhzZWxmKToKKyAgICAgICAgIyBUZXN0IG1lZGlhbl9sb3cgd2l0aCBhbiBldmVuIG51bWJlciBvZiBpbnRzLgorICAgICAgICBkYXRhID0gWzEsIDIsIDMsIDQsIDUsIDZdCisgICAgICAgIGFzc2VydCBsZW4oZGF0YSklMiA9PSAwCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCAzKQorCisgICAgZGVmIHRlc3RfZXZlbl9mcmFjdGlvbnMoc2VsZik6CisgICAgICAgICMgVGVzdCBtZWRpYW5fbG93IHdvcmtzIHdpdGggYW4gZXZlbiBudW1iZXIgb2YgRnJhY3Rpb25zLgorICAgICAgICBGID0gRnJhY3Rpb24KKyAgICAgICAgZGF0YSA9IFtGKDEsIDcpLCBGKDIsIDcpLCBGKDMsIDcpLCBGKDQsIDcpLCBGKDUsIDcpLCBGKDYsIDcpXQorICAgICAgICBhc3NlcnQgbGVuKGRhdGEpJTIgPT0gMAorICAgICAgICByYW5kb20uc2h1ZmZsZShkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgRigzLCA3KSkKKworICAgIGRlZiB0ZXN0X2V2ZW5fZGVjaW1hbHMoc2VsZik6CisgICAgICAgICMgVGVzdCBtZWRpYW5fbG93IHdvcmtzIHdpdGggYW4gZXZlbiBudW1iZXIgb2YgRGVjaW1hbHMuCisgICAgICAgIEQgPSBEZWNpbWFsCisgICAgICAgIGRhdGEgPSBbRCgnMS4xJyksIEQoJzIuMicpLCBEKCczLjMnKSwgRCgnNC40JyksIEQoJzUuNScpLCBEKCc2LjYnKV0KKyAgICAgICAgYXNzZXJ0IGxlbihkYXRhKSUyID09IDAKKyAgICAgICAgcmFuZG9tLnNodWZmbGUoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIEQoJzMuMycpKQorCisKK2NsYXNzIFRlc3RNZWRpYW5IaWdoKFRlc3RNZWRpYW4sIFVuaXZhcmlhdGVUeXBlTWl4aW4pOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5mdW5jID0gc3RhdGlzdGljcy5tZWRpYW5faGlnaAorCisgICAgZGVmIHRlc3RfZXZlbl9pbnRzKHNlbGYpOgorICAgICAgICAjIFRlc3QgbWVkaWFuX2hpZ2ggd2l0aCBhbiBldmVuIG51bWJlciBvZiBpbnRzLgorICAgICAgICBkYXRhID0gWzEsIDIsIDMsIDQsIDUsIDZdCisgICAgICAgIGFzc2VydCBsZW4oZGF0YSklMiA9PSAwCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCA0KQorCisgICAgZGVmIHRlc3RfZXZlbl9mcmFjdGlvbnMoc2VsZik6CisgICAgICAgICMgVGVzdCBtZWRpYW5faGlnaCB3b3JrcyB3aXRoIGFuIGV2ZW4gbnVtYmVyIG9mIEZyYWN0aW9ucy4KKyAgICAgICAgRiA9IEZyYWN0aW9uCisgICAgICAgIGRhdGEgPSBbRigxLCA3KSwgRigyLCA3KSwgRigzLCA3KSwgRig0LCA3KSwgRig1LCA3KSwgRig2LCA3KV0KKyAgICAgICAgYXNzZXJ0IGxlbihkYXRhKSUyID09IDAKKyAgICAgICAgcmFuZG9tLnNodWZmbGUoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIEYoNCwgNykpCisKKyAgICBkZWYgdGVzdF9ldmVuX2RlY2ltYWxzKHNlbGYpOgorICAgICAgICAjIFRlc3QgbWVkaWFuX2hpZ2ggd29ya3Mgd2l0aCBhbiBldmVuIG51bWJlciBvZiBEZWNpbWFscy4KKyAgICAgICAgRCA9IERlY2ltYWwKKyAgICAgICAgZGF0YSA9IFtEKCcxLjEnKSwgRCgnMi4yJyksIEQoJzMuMycpLCBEKCc0LjQnKSwgRCgnNS41JyksIEQoJzYuNicpXQorICAgICAgICBhc3NlcnQgbGVuKGRhdGEpJTIgPT0gMAorICAgICAgICByYW5kb20uc2h1ZmZsZShkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgRCgnNC40JykpCisKKworY2xhc3MgVGVzdE1lZGlhbkdyb3VwZWQoVGVzdE1lZGlhbik6CisgICAgIyBUZXN0IG1lZGlhbl9ncm91cGVkLgorICAgICMgRG9lc24ndCBjb25zZXJ2ZSBkYXRhIGVsZW1lbnQgdHlwZXMsIHNvIGRvbid0IHVzZSBUZXN0TWVkaWFuVHlwZS4KKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuZnVuYyA9IHN0YXRpc3RpY3MubWVkaWFuX2dyb3VwZWQKKworICAgIGRlZiB0ZXN0X29kZF9udW1iZXJfcmVwZWF0ZWQoc2VsZik6CisgICAgICAgICMgVGVzdCBtZWRpYW4uZ3JvdXBlZCB3aXRoIHJlcGVhdGVkIG1lZGlhbiB2YWx1ZXMuCisgICAgICAgIGRhdGEgPSBbMTIsIDEzLCAxNCwgMTQsIDE0LCAxNSwgMTVdCisgICAgICAgIGFzc2VydCBsZW4oZGF0YSklMiA9PSAxCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCAxNCkKKyAgICAgICAgIy0tLQorICAgICAgICBkYXRhID0gWzEyLCAxMywgMTQsIDE0LCAxNCwgMTQsIDE1XQorICAgICAgICBhc3NlcnQgbGVuKGRhdGEpJTIgPT0gMQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgMTMuODc1KQorICAgICAgICAjLS0tCisgICAgICAgIGRhdGEgPSBbNSwgMTAsIDEwLCAxNSwgMjAsIDIwLCAyMCwgMjAsIDI1LCAyNSwgMzBdCisgICAgICAgIGFzc2VydCBsZW4oZGF0YSklMiA9PSAxCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEsIDUpLCAxOS4zNzUpCisgICAgICAgICMtLS0KKyAgICAgICAgZGF0YSA9IFsxNiwgMTgsIDE4LCAxOCwgMTgsIDIwLCAyMCwgMjAsIDIyLCAyMiwgMjIsIDI0LCAyNCwgMjYsIDI4XQorICAgICAgICBhc3NlcnQgbGVuKGRhdGEpJTIgPT0gMQorICAgICAgICBzZWxmLmFzc2VydEFwcHJveEVxdWFsKHNlbGYuZnVuYyhkYXRhLCAyKSwgMjAuNjY2NjY2NjcsIHRvbD0xZS04KQorCisgICAgZGVmIHRlc3RfZXZlbl9udW1iZXJfcmVwZWF0ZWQoc2VsZik6CisgICAgICAgICMgVGVzdCBtZWRpYW4uZ3JvdXBlZCB3aXRoIHJlcGVhdGVkIG1lZGlhbiB2YWx1ZXMuCisgICAgICAgIGRhdGEgPSBbNSwgMTAsIDEwLCAxNSwgMjAsIDIwLCAyMCwgMjUsIDI1LCAzMF0KKyAgICAgICAgYXNzZXJ0IGxlbihkYXRhKSUyID09IDAKKyAgICAgICAgc2VsZi5hc3NlcnRBcHByb3hFcXVhbChzZWxmLmZ1bmMoZGF0YSwgNSksIDE5LjE2NjY2NjY3LCB0b2w9MWUtOCkKKyAgICAgICAgIy0tLQorICAgICAgICBkYXRhID0gWzIsIDMsIDQsIDQsIDQsIDVdCisgICAgICAgIGFzc2VydCBsZW4oZGF0YSklMiA9PSAwCisgICAgICAgIHNlbGYuYXNzZXJ0QXBwcm94RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCAzLjgzMzMzMzMzLCB0b2w9MWUtOCkKKyAgICAgICAgIy0tLQorICAgICAgICBkYXRhID0gWzIsIDMsIDMsIDQsIDQsIDQsIDUsIDUsIDUsIDUsIDYsIDZdCisgICAgICAgIGFzc2VydCBsZW4oZGF0YSklMiA9PSAwCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCA0LjUpCisgICAgICAgICMtLS0KKyAgICAgICAgZGF0YSA9IFszLCA0LCA0LCA0LCA1LCA1LCA1LCA1LCA2LCA2XQorICAgICAgICBhc3NlcnQgbGVuKGRhdGEpJTIgPT0gMAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgNC43NSkKKworICAgIGRlZiB0ZXN0X3JlcGVhdGVkX3NpbmdsZV92YWx1ZShzZWxmKToKKyAgICAgICAgIyBPdmVycmlkZSBtZXRob2QgZnJvbSBBdmVyYWdlTWl4aW4uCisgICAgICAgICMgWWV0IGFnYWluLCBmYWlsdXJlIG9mIG1lZGlhbl9ncm91cGVkIHRvIGNvbnNlcnZlIHRoZSBkYXRhIHR5cGUKKyAgICAgICAgIyBjYXVzZXMgbWUgaGVhZGFjaGVzIDotKAorICAgICAgICBmb3IgeCBpbiAoNS4zLCA2OCwgNC4zZTE3LCBGcmFjdGlvbigyOSwgMTAxKSwgRGVjaW1hbCgnMzIuOTcxNCcpKToKKyAgICAgICAgICAgIGZvciBjb3VudCBpbiAoMiwgNSwgMTAsIDIwKToKKyAgICAgICAgICAgICAgICBkYXRhID0gW3hdKmNvdW50CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIGZsb2F0KHgpKQorCisgICAgZGVmIHRlc3Rfb2RkX2ZyYWN0aW9ucyhzZWxmKToKKyAgICAgICAgIyBUZXN0IG1lZGlhbl9ncm91cGVkIHdvcmtzIHdpdGggYW4gb2RkIG51bWJlciBvZiBGcmFjdGlvbnMuCisgICAgICAgIEYgPSBGcmFjdGlvbgorICAgICAgICBkYXRhID0gW0YoNSwgNCksIEYoOSwgNCksIEYoMTMsIDQpLCBGKDEzLCA0KSwgRigxNywgNCldCisgICAgICAgIGFzc2VydCBsZW4oZGF0YSklMiA9PSAxCisgICAgICAgIHJhbmRvbS5zaHVmZmxlKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCAzLjApCisKKyAgICBkZWYgdGVzdF9ldmVuX2ZyYWN0aW9ucyhzZWxmKToKKyAgICAgICAgIyBUZXN0IG1lZGlhbl9ncm91cGVkIHdvcmtzIHdpdGggYW4gZXZlbiBudW1iZXIgb2YgRnJhY3Rpb25zLgorICAgICAgICBGID0gRnJhY3Rpb24KKyAgICAgICAgZGF0YSA9IFtGKDUsIDQpLCBGKDksIDQpLCBGKDEzLCA0KSwgRigxMywgNCksIEYoMTcsIDQpLCBGKDE3LCA0KV0KKyAgICAgICAgYXNzZXJ0IGxlbihkYXRhKSUyID09IDAKKyAgICAgICAgcmFuZG9tLnNodWZmbGUoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIDMuMjUpCisKKyAgICBkZWYgdGVzdF9vZGRfZGVjaW1hbHMoc2VsZik6CisgICAgICAgICMgVGVzdCBtZWRpYW5fZ3JvdXBlZCB3b3JrcyB3aXRoIGFuIG9kZCBudW1iZXIgb2YgRGVjaW1hbHMuCisgICAgICAgIEQgPSBEZWNpbWFsCisgICAgICAgIGRhdGEgPSBbRCgnNS41JyksIEQoJzYuNScpLCBEKCc2LjUnKSwgRCgnNy41JyksIEQoJzguNScpXQorICAgICAgICBhc3NlcnQgbGVuKGRhdGEpJTIgPT0gMQorICAgICAgICByYW5kb20uc2h1ZmZsZShkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgNi43NSkKKworICAgIGRlZiB0ZXN0X2V2ZW5fZGVjaW1hbHMoc2VsZik6CisgICAgICAgICMgVGVzdCBtZWRpYW5fZ3JvdXBlZCB3b3JrcyB3aXRoIGFuIGV2ZW4gbnVtYmVyIG9mIERlY2ltYWxzLgorICAgICAgICBEID0gRGVjaW1hbAorICAgICAgICBkYXRhID0gW0QoJzUuNScpLCBEKCc1LjUnKSwgRCgnNi41JyksIEQoJzYuNScpLCBEKCc3LjUnKSwgRCgnOC41JyldCisgICAgICAgIGFzc2VydCBsZW4oZGF0YSklMiA9PSAwCisgICAgICAgIHJhbmRvbS5zaHVmZmxlKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCA2LjUpCisgICAgICAgICMtLS0KKyAgICAgICAgZGF0YSA9IFtEKCc1LjUnKSwgRCgnNS41JyksIEQoJzYuNScpLCBEKCc3LjUnKSwgRCgnNy41JyksIEQoJzguNScpXQorICAgICAgICBhc3NlcnQgbGVuKGRhdGEpJTIgPT0gMAorICAgICAgICByYW5kb20uc2h1ZmZsZShkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgNy4wKQorCisgICAgZGVmIHRlc3RfaW50ZXJ2YWwoc2VsZik6CisgICAgICAgICMgVGVzdCBtZWRpYW5fZ3JvdXBlZCB3aXRoIGludGVydmFsIGFyZ3VtZW50LgorICAgICAgICBkYXRhID0gWzIuMjUsIDIuNSwgMi41LCAyLjc1LCAyLjc1LCAzLjAsIDMuMCwgMy4yNSwgMy41LCAzLjc1XQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhLCAwLjI1KSwgMi44NzUpCisgICAgICAgIGRhdGEgPSBbMi4yNSwgMi41LCAyLjUsIDIuNzUsIDIuNzUsIDIuNzUsIDMuMCwgMy4wLCAzLjI1LCAzLjUsIDMuNzVdCisgICAgICAgIHNlbGYuYXNzZXJ0QXBwcm94RXF1YWwoc2VsZi5mdW5jKGRhdGEsIDAuMjUpLCAyLjgzMzMzMzMzLCB0b2w9MWUtOCkKKyAgICAgICAgZGF0YSA9IFsyMjAsIDIyMCwgMjQwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI4MCwgMjgwLCAzMDAsIDMyMCwgMzQwXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhLCAyMCksIDI2NS4wKQorCisKK2NsYXNzIFRlc3RNb2RlKE51bWVyaWNUZXN0Q2FzZSwgQXZlcmFnZU1peGluLCBVbml2YXJpYXRlVHlwZU1peGluKToKKyAgICAjIFRlc3QgY2FzZXMgZm9yIHRoZSBkaXNjcmV0ZSB2ZXJzaW9uIG9mIG1vZGUuCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmZ1bmMgPSBzdGF0aXN0aWNzLm1vZGUKKworICAgIGRlZiBwcmVwYXJlX2RhdGEoc2VsZik6CisgICAgICAgICIiIk92ZXJsb2FkIG1ldGhvZCBmcm9tIFVuaXZhcmlhdGVDb21tb25NaXhpbi4iIiIKKyAgICAgICAgIyBNYWtlIHN1cmUgdGVzdCBkYXRhIGhhcyBleGFjdGx5IG9uZSBtb2RlLgorICAgICAgICByZXR1cm4gWzEsIDEsIDEsIDEsIDMsIDQsIDcsIDksIDAsIDgsIDJdCisKKyAgICBkZWYgdGVzdF9yYW5nZV9kYXRhKHNlbGYpOgorICAgICAgICAjIE92ZXJyaWRlIHRlc3QgZnJvbSBVbml2YXJpYXRlQ29tbW9uTWl4aW4uCisgICAgICAgIGRhdGEgPSByYW5nZSgyMCwgNTAsIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHN0YXRpc3RpY3MuU3RhdGlzdGljc0Vycm9yLCBzZWxmLmZ1bmMsIGRhdGEpCisKKyAgICBkZWYgdGVzdF9ub21pbmFsX2RhdGEoc2VsZik6CisgICAgICAgICMgVGVzdCBtb2RlIHdpdGggbm9taW5hbCBkYXRhLgorICAgICAgICBkYXRhID0gJ2FiY2JkYicKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksICdiJykKKyAgICAgICAgZGF0YSA9ICdmZSBmaSBmbyBmdW0gZmkgZmknLnNwbGl0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksICdmaScpCisKKyAgICBkZWYgdGVzdF9kaXNjcmV0ZV9kYXRhKHNlbGYpOgorICAgICAgICAjIFRlc3QgbW9kZSB3aXRoIGRpc2NyZXRlIG51bWVyaWMgZGF0YS4KKyAgICAgICAgZGF0YSA9IGxpc3QocmFuZ2UoMTApKQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxMCk6CisgICAgICAgICAgICBkID0gZGF0YSArIFtpXQorICAgICAgICAgICAgcmFuZG9tLnNodWZmbGUoZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGQpLCBpKQorCisgICAgZGVmIHRlc3RfYmltb2RhbF9kYXRhKHNlbGYpOgorICAgICAgICAjIFRlc3QgbW9kZSB3aXRoIGJpbW9kYWwgZGF0YS4KKyAgICAgICAgZGF0YSA9IFsxLCAxLCAyLCAyLCAyLCAyLCAzLCA0LCA1LCA2LCA2LCA2LCA2LCA3LCA4LCA5LCA5XQorICAgICAgICBhc3NlcnQgZGF0YS5jb3VudCgyKSA9PSBkYXRhLmNvdW50KDYpID09IDQKKyAgICAgICAgIyBDaGVjayBmb3IgYW4gZXhjZXB0aW9uLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzdGF0aXN0aWNzLlN0YXRpc3RpY3NFcnJvciwgc2VsZi5mdW5jLCBkYXRhKQorCisgICAgZGVmIHRlc3RfdW5pcXVlX2RhdGFfZmFpbHVyZShzZWxmKToKKyAgICAgICAgIyBUZXN0IG1vZGUgZXhjZXB0aW9uIHdoZW4gZGF0YSBwb2ludHMgYXJlIGFsbCB1bmlxdWUuCisgICAgICAgIGRhdGEgPSBsaXN0KHJhbmdlKDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc3RhdGlzdGljcy5TdGF0aXN0aWNzRXJyb3IsIHNlbGYuZnVuYywgZGF0YSkKKworICAgIGRlZiB0ZXN0X25vbmVfZGF0YShzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgbW9kZSByYWlzZXMgVHlwZUVycm9yIGlmIGdpdmVuIE5vbmUgYXMgZGF0YS4KKworICAgICAgICAjIFRoaXMgdGVzdCBpcyBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgbW9kZSB1c2VzCisgICAgICAgICMgY29sbGVjdGlvbnMuQ291bnRlciwgd2hpY2ggYWNjZXB0cyBOb25lIGFuZCByZXR1cm5zIGFuIGVtcHR5IGRpY3QuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5mdW5jLCBOb25lKQorCisgICAgZGVmIHRlc3RfY291bnRlcl9kYXRhKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBhIENvdW50ZXIgaXMgdHJlYXRlZCBsaWtlIGFueSBvdGhlciBpdGVyYWJsZS4KKyAgICAgICAgZGF0YSA9IGNvbGxlY3Rpb25zLkNvdW50ZXIoWzEsIDEsIDEsIDJdKQorICAgICAgICAjIFNpbmNlIHRoZSBrZXlzIG9mIHRoZSBjb3VudGVyIGFyZSB0cmVhdGVkIGFzIGRhdGEgcG9pbnRzLCBub3QgdGhlCisgICAgICAgICMgY291bnRzLCB0aGlzIHNob3VsZCByYWlzZS4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc3RhdGlzdGljcy5TdGF0aXN0aWNzRXJyb3IsIHNlbGYuZnVuYywgZGF0YSkKKworCisKKyMgPT09IFRlc3RzIGZvciB2YXJpYW5jZXMgYW5kIHN0YW5kYXJkIGRldmlhdGlvbnMgPT09CisKK2NsYXNzIFZhcmlhbmNlU3RkZXZNaXhpbihVbml2YXJpYXRlQ29tbW9uTWl4aW4pOgorICAgICMgTWl4aW4gY2xhc3MgaG9sZGluZyBjb21tb24gdGVzdHMgZm9yIHZhcmlhbmNlIGFuZCBzdGQgZGV2LgorCisgICAgIyBTdWJjbGFzc2VzIHNob3VsZCBpbmhlcml0IGZyb20gdGhpcyBiZWZvcmUgTnVtZXJpY1Rlc3RDbGFzcywgaW4gb3JkZXIKKyAgICAjIHRvIHNlZSB0aGUgcmVsIGF0dHJpYnV0ZSBiZWxvdy4gU2VlIHRlc3RTaGlmdERhdGEgZm9yIGFuIGV4cGxhbmF0aW9uLgorCisgICAgcmVsID0gMWUtMTIKKworICAgIGRlZiB0ZXN0X3NpbmdsZV92YWx1ZShzZWxmKToKKyAgICAgICAgIyBEZXZpYXRpb24gb2YgYSBzaW5nbGUgdmFsdWUgaXMgemVyby4KKyAgICAgICAgZm9yIHggaW4gKDExLCAxOS44LCA0LjZlMTQsIEZyYWN0aW9uKDIxLCAzNCksIERlY2ltYWwoJzguMzkyJykpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoW3hdKSwgMCkKKworICAgIGRlZiB0ZXN0X3JlcGVhdGVkX3NpbmdsZV92YWx1ZShzZWxmKToKKyAgICAgICAgIyBUaGUgZGV2aWF0aW9uIG9mIGEgc2luZ2xlIHJlcGVhdGVkIHZhbHVlIGlzIHplcm8uCisgICAgICAgIGZvciB4IGluICg3LjIsIDQ5LCA4LjFlMTUsIEZyYWN0aW9uKDMsIDcpLCBEZWNpbWFsKCc2Mi40ODAyJykpOgorICAgICAgICAgICAgZm9yIGNvdW50IGluICgyLCAzLCA1LCAxNSk6CisgICAgICAgICAgICAgICAgZGF0YSA9IFt4XSpjb3VudAorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCAwKQorCisgICAgZGVmIHRlc3RfZG9tYWluX2Vycm9yX3JlZ3Jlc3Npb24oc2VsZik6CisgICAgICAgICMgUmVncmVzc2lvbiB0ZXN0IGZvciBhIGRvbWFpbiBlcnJvciBleGNlcHRpb24uCisgICAgICAgICMgKFRoYW5rcyB0byBHZXJlbXkgQ29uZHJhLikKKyAgICAgICAgZGF0YSA9IFswLjEyMzQ1Njc4OTAxMjM0NV0qMTAwMDAKKyAgICAgICAgIyBBbGwgdGhlIGl0ZW1zIGFyZSBpZGVudGljYWwsIHNvIHZhcmlhbmNlIHNob3VsZCBiZSBleGFjdGx5IHplcm8uCisgICAgICAgICMgV2UgYWxsb3cgc29tZSBzbWFsbCByb3VuZC1vZmYgZXJyb3IsIGJ1dCBub3QgbXVjaC4KKyAgICAgICAgcmVzdWx0ID0gc2VsZi5mdW5jKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0QXBwcm94RXF1YWwocmVzdWx0LCAwLjAsIHRvbD01ZS0xNykKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwocmVzdWx0LCAwKSAgIyBBIG5lZ2F0aXZlIHJlc3VsdCBtdXN0IGZhaWwuCisKKyAgICBkZWYgdGVzdF9zaGlmdF9kYXRhKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBzaGlmdGluZyB0aGUgZGF0YSBieSBhIGNvbnN0YW50IGFtb3VudCBkb2VzIG5vdCBhZmZlY3QKKyAgICAgICAgIyB0aGUgdmFyaWFuY2Ugb3Igc3RkZXYuIE9yIGF0IGxlYXN0IG5vdCBtdWNoLgorCisgICAgICAgICMgRHVlIHRvIHJvdW5kaW5nLCB0aGlzIHRlc3Qgc2hvdWxkIGJlIGNvbnNpZGVyZWQgYW4gaWRlYWwuIFdlIGFsbG93CisgICAgICAgICMgc29tZSB0b2xlcmFuY2UgYXdheSBmcm9tICJubyBjaGFuZ2UgYXQgYWxsIiBieSBzZXR0aW5nIHRvbCBhbmQvb3IgcmVsCisgICAgICAgICMgYXR0cmlidXRlcy4gU3ViY2xhc3NlcyBtYXkgc2V0IHRpZ2h0ZXIgb3IgbG9vc2VyIGVycm9yIHRvbGVyYW5jZXMuCisgICAgICAgIHJhdyA9IFsxLjAzLCAxLjI3LCAxLjk0LCAyLjA0LCAyLjU4LCAzLjE0LCA0Ljc1LCA0Ljk4LCA1LjQyLCA2Ljc4XQorICAgICAgICBleHBlY3RlZCA9IHNlbGYuZnVuYyhyYXcpCisgICAgICAgICMgRG9uJ3Qgc2V0IHNoaWZ0IHRvbyBoaWdoLCB0aGUgYmlnZ2VyIGl0IGlzLCB0aGUgbW9yZSByb3VuZGluZyBlcnJvci4KKyAgICAgICAgc2hpZnQgPSAxZTUKKyAgICAgICAgZGF0YSA9IFt4ICsgc2hpZnQgZm9yIHggaW4gcmF3XQorICAgICAgICBzZWxmLmFzc2VydEFwcHJveEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9zaGlmdF9kYXRhX2V4YWN0KHNlbGYpOgorICAgICAgICAjIExpa2UgdGVzdF9zaGlmdF9kYXRhLCBidXQgcmVzdWx0IGlzIGFsd2F5cyBleGFjdC4KKyAgICAgICAgcmF3ID0gWzEsIDMsIDMsIDQsIDUsIDcsIDksIDEwLCAxMSwgMTZdCisgICAgICAgIGFzc2VydCBhbGwoeD09aW50KHgpIGZvciB4IGluIHJhdykKKyAgICAgICAgZXhwZWN0ZWQgPSBzZWxmLmZ1bmMocmF3KQorICAgICAgICBzaGlmdCA9IDEwKio5CisgICAgICAgIGRhdGEgPSBbeCArIHNoaWZ0IGZvciB4IGluIHJhd10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfaXRlcl9saXN0X3NhbWUoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IGl0ZXIgZGF0YSBhbmQgbGlzdCBkYXRhIGdpdmUgdGhlIHNhbWUgcmVzdWx0LgorCisgICAgICAgICMgVGhpcyBpcyBhbiBleHBsaWNpdCB0ZXN0IHRoYXQgaXRlcmF0b3JzIGFuZCBsaXN0cyBhcmUgdHJlYXRlZCB0aGUKKyAgICAgICAgIyBzYW1lOyBqdXN0aWZpY2F0aW9uIGZvciB0aGlzIHRlc3Qgb3ZlciBhbmQgYWJvdmUgdGhlIHNpbWlsYXIgdGVzdAorICAgICAgICAjIGluIFVuaXZhcmlhdGVDb21tb25NaXhpbiBpcyB0aGF0IGFuIGVhcmxpZXIgZGVzaWduIGhhZCB2YXJpYW5jZSBhbmQKKyAgICAgICAgIyBmcmllbmRzIHN3YXAgYmV0d2VlbiBvbmUtIGFuZCB0d28tcGFzcyBhbGdvcml0aG1zLCB3aGljaCB3b3VsZAorICAgICAgICAjIHNvbWV0aW1lcyBnaXZlIGRpZmZlcmVudCByZXN1bHRzLgorICAgICAgICBkYXRhID0gW3JhbmRvbS51bmlmb3JtKC0zLCA4KSBmb3IgXyBpbiByYW5nZSgxMDAwKV0KKyAgICAgICAgZXhwZWN0ZWQgPSBzZWxmLmZ1bmMoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoaXRlcihkYXRhKSksIGV4cGVjdGVkKQorCisKK2NsYXNzIFRlc3RQVmFyaWFuY2UoVmFyaWFuY2VTdGRldk1peGluLCBOdW1lcmljVGVzdENhc2UsIFVuaXZhcmlhdGVUeXBlTWl4aW4pOgorICAgICMgVGVzdHMgZm9yIHBvcHVsYXRpb24gdmFyaWFuY2UuCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmZ1bmMgPSBzdGF0aXN0aWNzLnB2YXJpYW5jZQorCisgICAgZGVmIHRlc3RfZXhhY3RfdW5pZm9ybShzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoZSB2YXJpYW5jZSBhZ2FpbnN0IGFuIGV4YWN0IHJlc3VsdCBmb3IgdW5pZm9ybSBkYXRhLgorICAgICAgICBkYXRhID0gbGlzdChyYW5nZSgxMDAwMCkpCisgICAgICAgIHJhbmRvbS5zaHVmZmxlKGRhdGEpCisgICAgICAgIGV4cGVjdGVkID0gKDEwMDAwKioyIC0gMSkvMTIgICMgRXhhY3QgdmFsdWUuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X2ludHMoc2VsZik6CisgICAgICAgICMgVGVzdCBwb3B1bGF0aW9uIHZhcmlhbmNlIHdpdGggaW50IGRhdGEuCisgICAgICAgIGRhdGEgPSBbNCwgNywgMTMsIDE2XQorICAgICAgICBleGFjdCA9IDIyLjUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIGV4YWN0KQorCisgICAgZGVmIHRlc3RfZnJhY3Rpb25zKHNlbGYpOgorICAgICAgICAjIFRlc3QgcG9wdWxhdGlvbiB2YXJpYW5jZSB3aXRoIEZyYWN0aW9uIGRhdGEuCisgICAgICAgIEYgPSBGcmFjdGlvbgorICAgICAgICBkYXRhID0gW0YoMSwgNCksIEYoMSwgNCksIEYoMywgNCksIEYoNywgNCldCisgICAgICAgIGV4YWN0ID0gRigzLCA4KQorICAgICAgICByZXN1bHQgPSBzZWxmLmZ1bmMoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIGV4YWN0KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocmVzdWx0LCBGcmFjdGlvbikKKworICAgIGRlZiB0ZXN0X2RlY2ltYWxzKHNlbGYpOgorICAgICAgICAjIFRlc3QgcG9wdWxhdGlvbiB2YXJpYW5jZSB3aXRoIERlY2ltYWwgZGF0YS4KKyAgICAgICAgRCA9IERlY2ltYWwKKyAgICAgICAgZGF0YSA9IFtEKCIxMi4xIiksIEQoIjEyLjIiKSwgRCgiMTIuNSIpLCBEKCIxMi45IildCisgICAgICAgIGV4YWN0ID0gRCgnMC4wOTY4NzUnKQorICAgICAgICByZXN1bHQgPSBzZWxmLmZ1bmMoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIGV4YWN0KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocmVzdWx0LCBEZWNpbWFsKQorCisKK2NsYXNzIFRlc3RWYXJpYW5jZShWYXJpYW5jZVN0ZGV2TWl4aW4sIE51bWVyaWNUZXN0Q2FzZSwgVW5pdmFyaWF0ZVR5cGVNaXhpbik6CisgICAgIyBUZXN0cyBmb3Igc2FtcGxlIHZhcmlhbmNlLgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5mdW5jID0gc3RhdGlzdGljcy52YXJpYW5jZQorCisgICAgZGVmIHRlc3Rfc2luZ2xlX3ZhbHVlKHNlbGYpOgorICAgICAgICAjIE92ZXJyaWRlIG1ldGhvZCBmcm9tIFZhcmlhbmNlU3RkZXZNaXhpbi4KKyAgICAgICAgZm9yIHggaW4gKDM1LCAyNC43LCA4LjJlMTUsIEZyYWN0aW9uKDE5LCAzMCksIERlY2ltYWwoJzQuMjA4NCcpKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHN0YXRpc3RpY3MuU3RhdGlzdGljc0Vycm9yLCBzZWxmLmZ1bmMsIFt4XSkKKworICAgIGRlZiB0ZXN0X2ludHMoc2VsZik6CisgICAgICAgICMgVGVzdCBzYW1wbGUgdmFyaWFuY2Ugd2l0aCBpbnQgZGF0YS4KKyAgICAgICAgZGF0YSA9IFs0LCA3LCAxMywgMTZdCisgICAgICAgIGV4YWN0ID0gMzAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIGV4YWN0KQorCisgICAgZGVmIHRlc3RfZnJhY3Rpb25zKHNlbGYpOgorICAgICAgICAjIFRlc3Qgc2FtcGxlIHZhcmlhbmNlIHdpdGggRnJhY3Rpb24gZGF0YS4KKyAgICAgICAgRiA9IEZyYWN0aW9uCisgICAgICAgIGRhdGEgPSBbRigxLCA0KSwgRigxLCA0KSwgRigzLCA0KSwgRig3LCA0KV0KKyAgICAgICAgZXhhY3QgPSBGKDEsIDIpCisgICAgICAgIHJlc3VsdCA9IHNlbGYuZnVuYyhkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgZXhhY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShyZXN1bHQsIEZyYWN0aW9uKQorCisgICAgZGVmIHRlc3RfZGVjaW1hbHMoc2VsZik6CisgICAgICAgICMgVGVzdCBzYW1wbGUgdmFyaWFuY2Ugd2l0aCBEZWNpbWFsIGRhdGEuCisgICAgICAgIEQgPSBEZWNpbWFsCisgICAgICAgIGRhdGEgPSBbRCgyKSwgRCgyKSwgRCg3KSwgRCg5KV0KKyAgICAgICAgZXhhY3QgPSA0KkQoJzkuNScpL0QoMykKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5mdW5jKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBleGFjdCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHJlc3VsdCwgRGVjaW1hbCkKKworCitjbGFzcyBUZXN0UFN0ZGV2KFZhcmlhbmNlU3RkZXZNaXhpbiwgTnVtZXJpY1Rlc3RDYXNlKToKKyAgICAjIFRlc3RzIGZvciBwb3B1bGF0aW9uIHN0YW5kYXJkIGRldmlhdGlvbi4KKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuZnVuYyA9IHN0YXRpc3RpY3MucHN0ZGV2CisKKyAgICBkZWYgdGVzdF9jb21wYXJlX3RvX3ZhcmlhbmNlKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBzdGRldiBpcywgaW4gZmFjdCwgdGhlIHNxdWFyZSByb290IG9mIHZhcmlhbmNlLgorICAgICAgICBkYXRhID0gW3JhbmRvbS51bmlmb3JtKC0xNywgMjQpIGZvciBfIGluIHJhbmdlKDEwMDApXQorICAgICAgICBleHBlY3RlZCA9IG1hdGguc3FydChzdGF0aXN0aWNzLnB2YXJpYW5jZShkYXRhKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIGV4cGVjdGVkKQorCisKK2NsYXNzIFRlc3RTdGRldihWYXJpYW5jZVN0ZGV2TWl4aW4sIE51bWVyaWNUZXN0Q2FzZSk6CisgICAgIyBUZXN0cyBmb3Igc2FtcGxlIHN0YW5kYXJkIGRldmlhdGlvbi4KKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuZnVuYyA9IHN0YXRpc3RpY3Muc3RkZXYKKworICAgIGRlZiB0ZXN0X3NpbmdsZV92YWx1ZShzZWxmKToKKyAgICAgICAgIyBPdmVycmlkZSBtZXRob2QgZnJvbSBWYXJpYW5jZVN0ZGV2TWl4aW4uCisgICAgICAgIGZvciB4IGluICg4MSwgMjAzLjc0LCAzLjllMTQsIEZyYWN0aW9uKDUsIDIxKSwgRGVjaW1hbCgnMzUuNzE5JykpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc3RhdGlzdGljcy5TdGF0aXN0aWNzRXJyb3IsIHNlbGYuZnVuYywgW3hdKQorCisgICAgZGVmIHRlc3RfY29tcGFyZV90b192YXJpYW5jZShzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgc3RkZXYgaXMsIGluIGZhY3QsIHRoZSBzcXVhcmUgcm9vdCBvZiB2YXJpYW5jZS4KKyAgICAgICAgZGF0YSA9IFtyYW5kb20udW5pZm9ybSgtMiwgOSkgZm9yIF8gaW4gcmFuZ2UoMTAwMCldCisgICAgICAgIGV4cGVjdGVkID0gbWF0aC5zcXJ0KHN0YXRpc3RpY3MudmFyaWFuY2UoZGF0YSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCBleHBlY3RlZCkKKworCisjID09PSBSdW4gdGVzdHMgPT09CisKK2RlZiBsb2FkX3Rlc3RzKGxvYWRlciwgdGVzdHMsIGlnbm9yZSk6CisgICAgIiIiVXNlZCBmb3IgZG9jdGVzdC91bml0dGVzdCBpbnRlZ3JhdGlvbi4iIiIKKyAgICB0ZXN0cy5hZGRUZXN0cyhkb2N0ZXN0LkRvY1Rlc3RTdWl0ZSgpKQorICAgIHJldHVybiB0ZXN0cworCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3N0cmZ0aW1lLnB5IGIvTGliL3Rlc3QvdGVzdF9zdHJmdGltZS5weQppbmRleCA0ZjM5Y2M3Li43NzJjZDA2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3N0cmZ0aW1lLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc3RyZnRpbWUucHkKQEAgLTE4MiwxNSArMTgyLDE1IEBACiAgICAgYSBkYXRlIGJlZm9yZSAxOTAwIGlzIHBhc3NlZCB3aXRoIGEgZm9ybWF0IHN0cmluZyBjb250YWluaW5nICIleSIKICAgICAiIiIKIAotICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiLCAiT25seSBhcHBsaWVzIHRvIFdpbmRvd3MiKQotICAgIGRlZiB0ZXN0X3lfYmVmb3JlXzE5MDBfd2luKHNlbGYpOgotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgotICAgICAgICAgICAgdGltZS5zdHJmdGltZSgiJXkiLCAoMTg5OSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCkpCi0KLSAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiLCAiRG9lc24ndCBhcHBseSBvbiBXaW5kb3dzIikKLSAgICBkZWYgdGVzdF95X2JlZm9yZV8xOTAwX25vbndpbihzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgICAgICAgIHRpbWUuc3RyZnRpbWUoIiV5IiwgKDE4OTksIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDApKSwgIjk5IikKKyAgICBkZWYgdGVzdF95X2JlZm9yZV8xOTAwKHNlbGYpOgorICAgICAgICAjIElzc3VlICMxMzY3NCwgIzE5NjM0CisgICAgICAgIHQgPSAoMTg5OSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCkKKyAgICAgICAgaWYgKHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiCisgICAgICAgIG9yIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCgiYWl4IiwgInN1bm9zIiwgInNvbGFyaXMiKSkpOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgICAgICB0aW1lLnN0cmZ0aW1lKCIleSIsIHQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRpbWUuc3RyZnRpbWUoIiV5IiwgdCksICI5OSIpCiAKICAgICBkZWYgdGVzdF95XzE5MDAoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCkBAIC0yMDAsOCArMjAwLDUgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgIHRpbWUuc3RyZnRpbWUoIiV5IiwgKDIwMTMsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDApKSwgIjEzIikKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KFN0cmZ0aW1lVGVzdCwgWTE5MDBUZXN0cykKLQogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zdHJpbmcucHkgYi9MaWIvdGVzdC90ZXN0X3N0cmluZy5weQppbmRleCBjMmJkZmRiLi41Nzk2M2JmIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3N0cmluZy5weQorKysgYi9MaWIvdGVzdC90ZXN0X3N0cmluZy5weQpAQCAtMzEsNiArMzEsMzkgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbXQuZm9ybWF0KCJmb28iKSwgImZvbyIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm10LmZvcm1hdCgiZm9vezB9IiwgImJhciIpLCAiZm9vYmFyIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbXQuZm9ybWF0KCJmb297MX17MH0tezF9IiwgImJhciIsIDYpLCAiZm9vNmJhci02IikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmbXQuZm9ybWF0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHN0cmluZy5Gb3JtYXR0ZXIuZm9ybWF0KQorCisgICAgZGVmIHRlc3RfZm9ybWF0X2tleXdvcmRfYXJndW1lbnRzKHNlbGYpOgorICAgICAgICBmbXQgPSBzdHJpbmcuRm9ybWF0dGVyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbXQuZm9ybWF0KCIte2FyZ30tIiwgYXJnPSd0ZXN0JyksICctdGVzdC0nKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgZm10LmZvcm1hdCwgIi17YXJnfS0iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZtdC5mb3JtYXQoIi17c2VsZn0tIiwgc2VsZj0ndGVzdCcpLCAnLXRlc3QtJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIGZtdC5mb3JtYXQsICIte3NlbGZ9LSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm10LmZvcm1hdCgiLXtmb3JtYXRfc3RyaW5nfS0iLCBmb3JtYXRfc3RyaW5nPSd0ZXN0JyksCisgICAgICAgICAgICAgICAgICAgICAgICAgJy10ZXN0LScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBmbXQuZm9ybWF0LCAiLXtmb3JtYXRfc3RyaW5nfS0iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZtdC5mb3JtYXQoYXJnPSd0ZXN0JywgZm9ybWF0X3N0cmluZz0iLXthcmd9LSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICctdGVzdC0nKQorCisgICAgZGVmIHRlc3RfYXV0b19udW1iZXJpbmcoc2VsZik6CisgICAgICAgIGZtdCA9IHN0cmluZy5Gb3JtYXR0ZXIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZtdC5mb3JtYXQoJ2Zvb3t9e30nLCAnYmFyJywgNiksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ2Zvb3t9e30nLmZvcm1hdCgnYmFyJywgNikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm10LmZvcm1hdCgnZm9vezF9e251bX17MX0nLCBOb25lLCAnYmFyJywgbnVtPTYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICdmb297MX17bnVtfXsxfScuZm9ybWF0KE5vbmUsICdiYXInLCBudW09NikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm10LmZvcm1hdCgnezpee319JywgJ2JhcicsIDYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICd7Ol57fX0nLmZvcm1hdCgnYmFyJywgNikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm10LmZvcm1hdCgnezpee319IHt9JywgJ2JhcicsIDYsICdYJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3s6Xnt9fSB7fScuZm9ybWF0KCdiYXInLCA2LCAnWCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZtdC5mb3JtYXQoJ3s6XntwYWR9fXt9JywgJ2ZvbycsICdiYXInLCBwYWQ9NiksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3s6XntwYWR9fXt9Jy5mb3JtYXQoJ2ZvbycsICdiYXInLCBwYWQ9NikpCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGZtdC5mb3JtYXQoJ2Zvb3sxfXt9JywgJ2JhcicsIDYpCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGZtdC5mb3JtYXQoJ2Zvb3t9ezF9JywgJ2JhcicsIDYpCiAKICAgICBkZWYgdGVzdF9jb252ZXJzaW9uX3NwZWNpZmllcnMoc2VsZik6CiAgICAgICAgIGZtdCA9IHN0cmluZy5Gb3JtYXR0ZXIoKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zdHJpbmdwcmVwLnB5IGIvTGliL3Rlc3QvdGVzdF9zdHJpbmdwcmVwLnB5CmluZGV4IGFhNzEyMjEuLmU3NjM2MzUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc3RyaW5ncHJlcC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3N0cmluZ3ByZXAucHkKQEAgLTEsNSArMSw1IEBACiAjIFRvIGZ1bGx5IHRlc3QgdGhpcyBtb2R1bGUsIHdlIHdvdWxkIG5lZWQgYSBjb3B5IG9mIHRoZSBzdHJpbmdwcmVwIHRhYmxlcy4KLSMgU2luY2Ugd2UgZG9uJ3QgaGF2ZSB0aGVtLCB0aGlzIHRlc3QgY2hlY2tzIG9ubHkgYSBmZXcgY29kZXBvaW50cy4KKyMgU2luY2Ugd2UgZG9uJ3QgaGF2ZSB0aGVtLCB0aGlzIHRlc3QgY2hlY2tzIG9ubHkgYSBmZXcgY29kZSBwb2ludHMuCiAKIGltcG9ydCB1bml0dGVzdAogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3N0cnB0aW1lLnB5IGIvTGliL3Rlc3QvdGVzdF9zdHJwdGltZS5weQppbmRleCAxM2E3MmQ0Li5jMWRkMTk1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3N0cnB0aW1lLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc3RycHRpbWUucHkKQEAgLTQsNiArNCw3IEBACiBpbXBvcnQgdGltZQogaW1wb3J0IGxvY2FsZQogaW1wb3J0IHJlCitpbXBvcnQgb3MKIGltcG9ydCBzeXMKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZSBhcyBkYXRldGltZV9kYXRlCkBAIC0zMjQsOSArMzI1LDEwIEBACiAgICAgICAgIHR6X25hbWUgPSB0aW1lLnR6bmFtZVswXQogICAgICAgICBpZiB0el9uYW1lLnVwcGVyKCkgaW4gKCJVVEMiLCAiR01UIik6CiAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCduZWVkIG5vbi1VVEMvR01UIHRpbWV6b25lJykKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgb3JpZ2luYWxfdHpuYW1lID0gdGltZS50em5hbWUKLSAgICAgICAgICAgIG9yaWdpbmFsX2RheWxpZ2h0ID0gdGltZS5kYXlsaWdodAorCisgICAgICAgIHdpdGggc3VwcG9ydC5zd2FwX2F0dHIodGltZSwgJ3R6bmFtZScsICh0el9uYW1lLCB0el9uYW1lKSksIFwKKyAgICAgICAgICAgICBzdXBwb3J0LnN3YXBfYXR0cih0aW1lLCAnZGF5bGlnaHQnLCAxKSwgXAorICAgICAgICAgICAgIHN1cHBvcnQuc3dhcF9hdHRyKHRpbWUsICd0enNldCcsIGxhbWJkYTogTm9uZSk6CiAgICAgICAgICAgICB0aW1lLnR6bmFtZSA9ICh0el9uYW1lLCB0el9uYW1lKQogICAgICAgICAgICAgdGltZS5kYXlsaWdodCA9IDEKICAgICAgICAgICAgIHR6X3ZhbHVlID0gX3N0cnB0aW1lLl9zdHJwdGltZV90aW1lKHR6X25hbWUsICIlWiIpWzhdCkBAIC0zMzQsOSArMzM2LDYgQEAKICAgICAgICAgICAgICAgICAgICAgIiVzIGxlYWQgdG8gYSB0aW1lem9uZSB2YWx1ZSBvZiAlcyBpbnN0ZWFkIG9mIC0xIHdoZW4gIgogICAgICAgICAgICAgICAgICAgICAidGltZS5kYXlsaWdodCBzZXQgdG8gJXMgYW5kIHBhc3NpbmcgaW4gJXMiICUKICAgICAgICAgICAgICAgICAgICAgKHRpbWUudHpuYW1lLCB0el92YWx1ZSwgdGltZS5kYXlsaWdodCwgdHpfbmFtZSkpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICB0aW1lLnR6bmFtZSA9IG9yaWdpbmFsX3R6bmFtZQotICAgICAgICAgICAgdGltZS5kYXlsaWdodCA9IG9yaWdpbmFsX2RheWxpZ2h0CiAKICAgICBkZWYgdGVzdF9kYXRlX3RpbWUoc2VsZik6CiAgICAgICAgICMgVGVzdCAlYyBkaXJlY3RpdmUKQEAgLTQ5NCw2ICs0OTMsMjQgQEAKICAgICAgICAgdGVzdF9oZWxwZXIoKDIwMDYsIDEyLCAzMSksICJMYXN0IFN1bmRheSBvZiAyMDA2IikKICAgICAgICAgdGVzdF9oZWxwZXIoKDIwMDYsIDEyLCAyNCksICJTZWNvbmQgdG8gbGFzdCBTdW5kYXkgb2YgMjAwNiIpCiAKKyAgICBkZWYgdGVzdF93ZWVrXzAoc2VsZik6CisgICAgICAgIGRlZiBjaGVjayh2YWx1ZSwgZm9ybWF0LCAqZXhwZWN0ZWQpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfc3RycHRpbWUuX3N0cnB0aW1lX3RpbWUodmFsdWUsIGZvcm1hdClbOi0xXSwgZXhwZWN0ZWQpCisgICAgICAgIGNoZWNrKCcyMDE1IDAgMCcsICclWSAlVSAldycsIDIwMTQsIDEyLCAyOCwgMCwgMCwgMCwgNiwgLTMpCisgICAgICAgIGNoZWNrKCcyMDE1IDAgMCcsICclWSAlVyAldycsIDIwMTUsIDEsIDQsIDAsIDAsIDAsIDYsIDQpCisgICAgICAgIGNoZWNrKCcyMDE1IDAgMScsICclWSAlVSAldycsIDIwMTQsIDEyLCAyOSwgMCwgMCwgMCwgMCwgLTIpCisgICAgICAgIGNoZWNrKCcyMDE1IDAgMScsICclWSAlVyAldycsIDIwMTQsIDEyLCAyOSwgMCwgMCwgMCwgMCwgLTIpCisgICAgICAgIGNoZWNrKCcyMDE1IDAgMicsICclWSAlVSAldycsIDIwMTQsIDEyLCAzMCwgMCwgMCwgMCwgMSwgLTEpCisgICAgICAgIGNoZWNrKCcyMDE1IDAgMicsICclWSAlVyAldycsIDIwMTQsIDEyLCAzMCwgMCwgMCwgMCwgMSwgLTEpCisgICAgICAgIGNoZWNrKCcyMDE1IDAgMycsICclWSAlVSAldycsIDIwMTQsIDEyLCAzMSwgMCwgMCwgMCwgMiwgMCkKKyAgICAgICAgY2hlY2soJzIwMTUgMCAzJywgJyVZICVXICV3JywgMjAxNCwgMTIsIDMxLCAwLCAwLCAwLCAyLCAwKQorICAgICAgICBjaGVjaygnMjAxNSAwIDQnLCAnJVkgJVUgJXcnLCAyMDE1LCAxLCAxLCAwLCAwLCAwLCAzLCAxKQorICAgICAgICBjaGVjaygnMjAxNSAwIDQnLCAnJVkgJVcgJXcnLCAyMDE1LCAxLCAxLCAwLCAwLCAwLCAzLCAxKQorICAgICAgICBjaGVjaygnMjAxNSAwIDUnLCAnJVkgJVUgJXcnLCAyMDE1LCAxLCAyLCAwLCAwLCAwLCA0LCAyKQorICAgICAgICBjaGVjaygnMjAxNSAwIDUnLCAnJVkgJVcgJXcnLCAyMDE1LCAxLCAyLCAwLCAwLCAwLCA0LCAyKQorICAgICAgICBjaGVjaygnMjAxNSAwIDYnLCAnJVkgJVUgJXcnLCAyMDE1LCAxLCAzLCAwLCAwLCAwLCA1LCAzKQorICAgICAgICBjaGVjaygnMjAxNSAwIDYnLCAnJVkgJVcgJXcnLCAyMDE1LCAxLCAzLCAwLCAwLCAwLCA1LCAzKQorCiAKIGNsYXNzIENhY2hlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgICIiIlRlc3QgdGhhdCBjYWNoaW5nIHdvcmtzIHByb3Blcmx5LiIiIgpAQCAtNTMwLDcgKzU0Nyw3IEBACiAgICAgICAgIF9zdHJwdGltZS5fc3RycHRpbWVfdGltZSgiMTAiLCAiJWQiKQogICAgICAgICBzZWxmLmFzc2VydElzTm90KGxvY2FsZV90aW1lX2lkLCBfc3RycHRpbWUuX1RpbWVSRV9jYWNoZS5sb2NhbGVfdGltZSkKIAotICAgIGRlZiB0ZXN0X1RpbWVSRV9yZWNyZWF0aW9uKHNlbGYpOgorICAgIGRlZiB0ZXN0X1RpbWVSRV9yZWNyZWF0aW9uX2xvY2FsZShzZWxmKToKICAgICAgICAgIyBUaGUgVGltZVJFIGluc3RhbmNlIHNob3VsZCBiZSByZWNyZWF0ZWQgdXBvbiBjaGFuZ2luZyB0aGUgbG9jYWxlLgogICAgICAgICBsb2NhbGVfaW5mbyA9IGxvY2FsZS5nZXRsb2NhbGUobG9jYWxlLkxDX1RJTUUpCiAgICAgICAgIHRyeToKQEAgLTU1OSw2ICs1NzYsMzMgQEAKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIGxvY2FsZS5zZXRsb2NhbGUobG9jYWxlLkxDX1RJTUUsIGxvY2FsZV9pbmZvKQogCisgICAgQHN1cHBvcnQucnVuX3dpdGhfdHooJ1NURC0xRFNUJykKKyAgICBkZWYgdGVzdF9UaW1lUkVfcmVjcmVhdGlvbl90aW1lem9uZShzZWxmKToKKyAgICAgICAgIyBUaGUgVGltZVJFIGluc3RhbmNlIHNob3VsZCBiZSByZWNyZWF0ZWQgdXBvbiBjaGFuZ2luZyB0aGUgdGltZXpvbmUuCisgICAgICAgIG9sZHR6bmFtZSA9IHRpbWUudHpuYW1lCisgICAgICAgIHRtID0gX3N0cnB0aW1lLl9zdHJwdGltZV90aW1lKHRpbWUudHpuYW1lWzBdLCAnJVonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRtLnRtX2lzZHN0LCAwKQorICAgICAgICB0bSA9IF9zdHJwdGltZS5fc3RycHRpbWVfdGltZSh0aW1lLnR6bmFtZVsxXSwgJyVaJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0bS50bV9pc2RzdCwgMSkKKyAgICAgICAgIyBHZXQgaWQgb2YgY3VycmVudCBjYWNoZSBvYmplY3QuCisgICAgICAgIGZpcnN0X3RpbWVfcmUgPSBfc3RycHRpbWUuX1RpbWVSRV9jYWNoZQorICAgICAgICAjIENoYW5nZSB0aGUgdGltZXpvbmUgYW5kIGZvcmNlIGEgcmVjcmVhdGlvbiBvZiB0aGUgY2FjaGUuCisgICAgICAgIG9zLmVudmlyb25bJ1RaJ10gPSAnRVNUKzA1RURULE0zLjIuMCxNMTEuMS4wJworICAgICAgICB0aW1lLnR6c2V0KCkKKyAgICAgICAgdG0gPSBfc3RycHRpbWUuX3N0cnB0aW1lX3RpbWUodGltZS50em5hbWVbMF0sICclWicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodG0udG1faXNkc3QsIDApCisgICAgICAgIHRtID0gX3N0cnB0aW1lLl9zdHJwdGltZV90aW1lKHRpbWUudHpuYW1lWzFdLCAnJVonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRtLnRtX2lzZHN0LCAxKQorICAgICAgICAjIEdldCB0aGUgbmV3IGNhY2hlIG9iamVjdCdzIGlkLgorICAgICAgICBzZWNvbmRfdGltZV9yZSA9IF9zdHJwdGltZS5fVGltZVJFX2NhY2hlCisgICAgICAgICMgVGhleSBzaG91bGQgbm90IGJlIGVxdWFsLgorICAgICAgICBzZWxmLmFzc2VydElzTm90KGZpcnN0X3RpbWVfcmUsIHNlY29uZF90aW1lX3JlKQorICAgICAgICAjIE1ha2Ugc3VyZSBvbGQgbmFtZXMgbm8gbG9uZ2VyIGFjY2VwdGVkLgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgX3N0cnB0aW1lLl9zdHJwdGltZV90aW1lKG9sZHR6bmFtZVswXSwgJyVaJykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIF9zdHJwdGltZS5fc3RycHRpbWVfdGltZShvbGR0em5hbWVbMV0sICclWicpCisKIAogZGVmIHRlc3RfbWFpbigpOgogICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zdHJ0b2QucHkgYi9MaWIvdGVzdC90ZXN0X3N0cnRvZC5weQppbmRleCBjNTk3OWZjLi40MWI2ZTVmIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3N0cnRvZC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3N0cnRvZC5weQpAQCAtMjQ4LDcgKzI0OCw3IEBACiAgICAgICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQgRmFsc2UsICJleHBlY3RlZCBWYWx1ZUVycm9yIgogCi0gICAgQHRlc3Quc3VwcG9ydC5iaWdtZW10ZXN0KHNpemU9dGVzdC5zdXBwb3J0Ll8yRysxMCwgbWVtdXNlPTQsIGRyeV9ydW49RmFsc2UpCisgICAgQHRlc3Quc3VwcG9ydC5iaWdtZW10ZXN0KHNpemU9dGVzdC5zdXBwb3J0Ll8yRysxMCwgbWVtdXNlPTMsIGRyeV9ydW49RmFsc2UpCiAgICAgZGVmIHRlc3Rfb3ZlcnNpemVkX2RpZ2l0X3N0cmluZ3Moc2VsZiwgbWF4c2l6ZSk6CiAgICAgICAgICMgSW5wdXQgc3RyaW5nIHdob3NlIGxlbmd0aCBkb2Vzbid0IGZpdCBpbiBhbiBJTlQuCiAgICAgICAgIHMgPSAiMS4iICsgIjEiICogbWF4c2l6ZQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zdHJ1Y3QucHkgYi9MaWIvdGVzdC90ZXN0X3N0cnVjdC5weQppbmRleCA1MGNhZTA1Li4wMTA3ZWViIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3N0cnVjdC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3N0cnVjdC5weQpAQCAtMSw0ICsxLDYgQEAKK2Zyb20gY29sbGVjdGlvbnMgaW1wb3J0IGFiYwogaW1wb3J0IGFycmF5CitpbXBvcnQgb3BlcmF0b3IKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IHN0cnVjdAogaW1wb3J0IHN5cwpAQCAtNiw3ICs4LDYgQEAKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogCiBJU0JJR0VORElBTiA9IHN5cy5ieXRlb3JkZXIgPT0gImJpZyIKLUlTMzJCSVQgPSBzeXMubWF4c2l6ZSA9PSAweDdmZmZmZmZmCiAKIGludGVnZXJfY29kZXMgPSAnYicsICdCJywgJ2gnLCAnSCcsICdpJywgJ0knLCAnbCcsICdMJywgJ3EnLCAnUScsICduJywgJ04nCiBieXRlb3JkZXJzID0gJycsICdAJywgJz0nLCAnPCcsICc+JywgJyEnCkBAIC00ODksNyArNDkwLDcgQEAKICAgICBkZWYgdGVzdF9ib29sKHNlbGYpOgogICAgICAgICBjbGFzcyBFeHBsb2RpbmdCb29sKG9iamVjdCk6CiAgICAgICAgICAgICBkZWYgX19ib29sX18oc2VsZik6Ci0gICAgICAgICAgICAgICAgcmFpc2UgSU9FcnJvcgorICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IKICAgICAgICAgZm9yIHByZWZpeCBpbiB0dXBsZSgiPD4hPSIpKygnJywpOgogICAgICAgICAgICAgZmFsc2UgPSAoKSwgW10sIFtdLCAnJywgMAogICAgICAgICAgICAgdHJ1ZSA9IFsxXSwgJ3Rlc3QnLCA1LCAtMSwgMHhmZmZmZmZmZisxLCAweGZmZmZmZmZmLzIKQEAgLTUyMCwxMCArNTIxLDEwIEBACiAKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzdHJ1Y3QucGFjayhwcmVmaXggKyAnPycsIEV4cGxvZGluZ0Jvb2woKSkKLSAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIkV4cGVjdGVkIElPRXJyb3I6IHN0cnVjdC5wYWNrKCVyLCAiCisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJFeHBlY3RlZCBPU0Vycm9yOiBzdHJ1Y3QucGFjayglciwgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAiRXhwbG9kaW5nQm9vbCgpKSIgJSAocHJlZml4ICsgJz8nKSkKIAogICAgICAgICBmb3IgYyBpbiBbYidceDAxJywgYidceDdmJywgYidceGZmJywgYidceDBmJywgYidceGYwJ106CkBAIC01MzYsMTAgKzUzNyw2IEBACiAgICAgICAgIGh1Z2Vjb3VudDIgPSAne31ie31IJy5mb3JtYXQoc3lzLm1heHNpemUvLzIsIHN5cy5tYXhzaXplLy8yKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzdHJ1Y3QuZXJyb3IsIHN0cnVjdC5jYWxjc2l6ZSwgaHVnZWNvdW50MikKIAotICAgIGlmIElTMzJCSVQ6Ci0gICAgICAgIGRlZiB0ZXN0X2NyYXNoZXIoc2VsZik6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhNZW1vcnlFcnJvciwgc3RydWN0LnBhY2ssICIzNTc5MTM5NDFiIiwgImEiKQotCiAgICAgZGVmIHRlc3RfdHJhaWxpbmdfY291bnRlcihzZWxmKToKICAgICAgICAgc3RvcmUgPSBhcnJheS5hcnJheSgnYicsIGInICcqMTAwKQogCkBAIC01NzYsNyArNTczLDcgQEAKICAgICAgICAgIyBUaGUgc2l6ZSBvZiAnUHlTdHJ1Y3RPYmplY3QnCiAgICAgICAgIHRvdGFsc2l6ZSA9IHN1cHBvcnQuY2FsY29ianNpemUoJzJuM1AnKQogICAgICAgICAjIFRoZSBzaXplIHRha2VuIHVwIGJ5IHRoZSAnZm9ybWF0Y29kZScgZHluYW1pYyBhcnJheQotICAgICAgICB0b3RhbHNpemUgKz0gc3RydWN0LmNhbGNzaXplKCdQMm4wUCcpICogKG51bWJlcl9vZl9jb2RlcyArIDEpCisgICAgICAgIHRvdGFsc2l6ZSArPSBzdHJ1Y3QuY2FsY3NpemUoJ1AzbjBQJykgKiAobnVtYmVyX29mX2NvZGVzICsgMSkKICAgICAgICAgc3VwcG9ydC5jaGVja19zaXplb2Yoc2VsZiwgc3RydWN0LlN0cnVjdChmb3JtYXRfc3RyKSwgdG90YWxzaXplKQogCiAgICAgQHN1cHBvcnQuY3B5dGhvbl9vbmx5CkBAIC01ODcsMTQgKzU4NCw4NCBAQAogICAgICAgICBzZWxmLmNoZWNrX3NpemVvZignQicgKiAxMjM0LCAxMjM0KQogICAgICAgICBzZWxmLmNoZWNrX3NpemVvZignZmQnLCAyKQogICAgICAgICBzZWxmLmNoZWNrX3NpemVvZigneHh4eHh4eHh4eHh4eHgnLCAwKQotICAgICAgICBzZWxmLmNoZWNrX3NpemVvZignMTAwSCcsIDEwMCkKKyAgICAgICAgc2VsZi5jaGVja19zaXplb2YoJzEwMEgnLCAxKQogICAgICAgICBzZWxmLmNoZWNrX3NpemVvZignMTg3cycsIDEpCiAgICAgICAgIHNlbGYuY2hlY2tfc2l6ZW9mKCcyMHAnLCAxKQogICAgICAgICBzZWxmLmNoZWNrX3NpemVvZignMHMnLCAxKQogICAgICAgICBzZWxmLmNoZWNrX3NpemVvZignMGMnLCAwKQogCisKK2NsYXNzIFVucGFja0l0ZXJhdG9yVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiCisgICAgVGVzdHMgZm9yIGl0ZXJhdGl2ZSB1bnBhY2tpbmcgKHN0cnVjdC5TdHJ1Y3QuaXRlcl91bnBhY2spLgorICAgICIiIgorCisgICAgZGVmIHRlc3RfY29uc3RydWN0KHNlbGYpOgorICAgICAgICBkZWYgX2NoZWNrX2l0ZXJhdG9yKGl0KToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShpdCwgYWJjLkl0ZXJhdG9yKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGl0LCBhYmMuSXRlcmFibGUpCisgICAgICAgIHMgPSBzdHJ1Y3QuU3RydWN0KCc+aWJjcCcpCisgICAgICAgIGl0ID0gcy5pdGVyX3VucGFjayhiIiIpCisgICAgICAgIF9jaGVja19pdGVyYXRvcihpdCkKKyAgICAgICAgaXQgPSBzLml0ZXJfdW5wYWNrKGIiMTIzNDU2NyIpCisgICAgICAgIF9jaGVja19pdGVyYXRvcihpdCkKKyAgICAgICAgIyBXcm9uZyBieXRlcyBsZW5ndGgKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzdHJ1Y3QuZXJyb3IpOgorICAgICAgICAgICAgcy5pdGVyX3VucGFjayhiIjEyMzQ1NiIpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc3RydWN0LmVycm9yKToKKyAgICAgICAgICAgIHMuaXRlcl91bnBhY2soYiIxMjM0NTY3OCIpCisgICAgICAgICMgWmVyby1sZW5ndGggc3RydWN0CisgICAgICAgIHMgPSBzdHJ1Y3QuU3RydWN0KCc+JykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzdHJ1Y3QuZXJyb3IpOgorICAgICAgICAgICAgcy5pdGVyX3VucGFjayhiIiIpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc3RydWN0LmVycm9yKToKKyAgICAgICAgICAgIHMuaXRlcl91bnBhY2soYiIxMiIpCisKKyAgICBkZWYgdGVzdF9pdGVyYXRlKHNlbGYpOgorICAgICAgICBzID0gc3RydWN0LlN0cnVjdCgnPklCJykKKyAgICAgICAgYiA9IGJ5dGVzKHJhbmdlKDEsIDE2KSkKKyAgICAgICAgaXQgPSBzLml0ZXJfdW5wYWNrKGIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV4dChpdCksICgweDAxMDIwMzA0LCA1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXh0KGl0KSwgKDB4MDYwNzA4MDksIDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXh0KGl0KSwgKDB4MGIwYzBkMGUsIDE1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3RvcEl0ZXJhdGlvbiwgbmV4dCwgaXQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN0b3BJdGVyYXRpb24sIG5leHQsIGl0KQorCisgICAgZGVmIHRlc3RfYXJiaXRyYXJ5X2J1ZmZlcihzZWxmKToKKyAgICAgICAgcyA9IHN0cnVjdC5TdHJ1Y3QoJz5JQicpCisgICAgICAgIGIgPSBieXRlcyhyYW5nZSgxLCAxMSkpCisgICAgICAgIGl0ID0gcy5pdGVyX3VucGFjayhtZW1vcnl2aWV3KGIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5leHQoaXQpLCAoMHgwMTAyMDMwNCwgNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV4dChpdCksICgweDA2MDcwODA5LCAxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN0b3BJdGVyYXRpb24sIG5leHQsIGl0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTdG9wSXRlcmF0aW9uLCBuZXh0LCBpdCkKKworICAgIGRlZiB0ZXN0X2xlbmd0aF9oaW50KHNlbGYpOgorICAgICAgICBsaCA9IG9wZXJhdG9yLmxlbmd0aF9oaW50CisgICAgICAgIHMgPSBzdHJ1Y3QuU3RydWN0KCc+SUInKQorICAgICAgICBiID0gYnl0ZXMocmFuZ2UoMSwgMTYpKQorICAgICAgICBpdCA9IHMuaXRlcl91bnBhY2soYikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaChpdCksIDMpCisgICAgICAgIG5leHQoaXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGgoaXQpLCAyKQorICAgICAgICBuZXh0KGl0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxoKGl0KSwgMSkKKyAgICAgICAgbmV4dChpdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaChpdCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN0b3BJdGVyYXRpb24sIG5leHQsIGl0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxoKGl0KSwgMCkKKworICAgIGRlZiB0ZXN0X21vZHVsZV9mdW5jKHNlbGYpOgorICAgICAgICAjIFNhbml0eSBjaGVjayBmb3IgdGhlIGdsb2JhbCBzdHJ1Y3QuaXRlcl91bnBhY2soKQorICAgICAgICBpdCA9IHN0cnVjdC5pdGVyX3VucGFjaygnPklCJywgYnl0ZXMocmFuZ2UoMSwgMTEpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXh0KGl0KSwgKDB4MDEwMjAzMDQsIDUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5leHQoaXQpLCAoMHgwNjA3MDgwOSwgMTApKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTdG9wSXRlcmF0aW9uLCBuZXh0LCBpdCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3RvcEl0ZXJhdGlvbiwgbmV4dCwgaXQpCisKKwogZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KFN0cnVjdFRlc3QpCisgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoX19uYW1lX18pCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc3RydWN0c2VxLnB5IGIvTGliL3Rlc3QvdGVzdF9zdHJ1Y3RzZXEucHkKaW5kZXggYTg5ZTk1NS4uMzUzZDBlYSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zdHJ1Y3RzZXEucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zdHJ1Y3RzZXEucHkKQEAgLTM4LDcgKzM4LDcgQEAKICAgICAgICAgIyBvcy5zdGF0KCkgZ2l2ZXMgYSBjb21wbGljYXRlZCBzdHJ1Y3Qgc2VxdWVuY2UuCiAgICAgICAgIHN0ID0gb3Muc3RhdChfX2ZpbGVfXykKICAgICAgICAgcmVwID0gcmVwcihzdCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcC5zdGFydHN3aXRoKG9zLm5hbWUgKyAiLnN0YXRfcmVzdWx0IikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXAuc3RhcnRzd2l0aCgib3Muc3RhdF9yZXN1bHQiKSkKICAgICAgICAgc2VsZi5hc3NlcnRJbigic3RfbW9kZT0iLCByZXApCiAgICAgICAgIHNlbGYuYXNzZXJ0SW4oInN0X2lubz0iLCByZXApCiAgICAgICAgIHNlbGYuYXNzZXJ0SW4oInN0X2Rldj0iLCByZXApCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3N1YnByb2Nlc3MucHkgYi9MaWIvdGVzdC90ZXN0X3N1YnByb2Nlc3MucHkKaW5kZXggZjVhNzBhMy4uNDcxOWNjMCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zdWJwcm9jZXNzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc3VicHJvY2Vzcy5weQpAQCAtMTEsNiArMTEsNyBAQAogaW1wb3J0IHRlbXBmaWxlCiBpbXBvcnQgdGltZQogaW1wb3J0IHJlCitpbXBvcnQgc2VsZWN0b3JzCiBpbXBvcnQgc3lzY29uZmlnCiBpbXBvcnQgd2FybmluZ3MKIGltcG9ydCBzZWxlY3QKQEAgLTE5LDEwICsyMCw2IEBACiBpbXBvcnQgdGV4dHdyYXAKIAogdHJ5OgotICAgIGltcG9ydCByZXNvdXJjZQotZXhjZXB0IEltcG9ydEVycm9yOgotICAgIHJlc291cmNlID0gTm9uZQotdHJ5OgogICAgIGltcG9ydCB0aHJlYWRpbmcKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICB0aHJlYWRpbmcgPSBOb25lCkBAIC00MCwxNiArMzcsNiBAQAogICAgIFNFVEJJTkFSWSA9ICcnCiAKIAotdHJ5OgotICAgIG1rc3RlbXAgPSB0ZW1wZmlsZS5ta3N0ZW1wCi1leGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgIyB0ZW1wZmlsZS5ta3N0ZW1wIGlzIG5vdCBhdmFpbGFibGUKLSAgICBkZWYgbWtzdGVtcCgpOgotICAgICAgICAiIiJSZXBsYWNlbWVudCBmb3IgbWtzdGVtcCwgY2FsbGluZyBta3RlbXAuIiIiCi0gICAgICAgIGZuYW1lID0gdGVtcGZpbGUubWt0ZW1wKCkKLSAgICAgICAgcmV0dXJuIG9zLm9wZW4oZm5hbWUsIG9zLk9fUkRXUnxvcy5PX0NSRUFUKSwgZm5hbWUKLQotCiBjbGFzcyBCYXNlVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgIyBUcnkgdG8gbWluaW1pemUgdGhlIG51bWJlciBvZiBjaGlsZHJlbiB3ZSBoYXZlIHNvIHRoaXMgdGVzdApAQCAtMTYyLDggKzE0OSwyOCBAQAogICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKICAgICAgICAgc2VsZi5hc3NlcnRJbihiJ0JERkwnLCBvdXRwdXQpCiAKKyAgICBkZWYgdGVzdF9jaGVja19vdXRwdXRfc3RkaW5fYXJnKHNlbGYpOgorICAgICAgICAjIGNoZWNrX291dHB1dCgpIGNhbiBiZSBjYWxsZWQgd2l0aCBzdGRpbiBzZXQgdG8gYSBmaWxlCisgICAgICAgIHRmID0gdGVtcGZpbGUuVGVtcG9yYXJ5RmlsZSgpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cCh0Zi5jbG9zZSkKKyAgICAgICAgdGYud3JpdGUoYidwZWFyJykKKyAgICAgICAgdGYuc2VlaygwKQorICAgICAgICBvdXRwdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dCgKKyAgICAgICAgICAgICAgICBbc3lzLmV4ZWN1dGFibGUsICItYyIsCisgICAgICAgICAgICAgICAgICJpbXBvcnQgc3lzOyBzeXMuc3Rkb3V0LndyaXRlKHN5cy5zdGRpbi5yZWFkKCkudXBwZXIoKSkiXSwKKyAgICAgICAgICAgICAgICBzdGRpbj10ZikKKyAgICAgICAgc2VsZi5hc3NlcnRJbihiJ1BFQVInLCBvdXRwdXQpCisKKyAgICBkZWYgdGVzdF9jaGVja19vdXRwdXRfaW5wdXRfYXJnKHNlbGYpOgorICAgICAgICAjIGNoZWNrX291dHB1dCgpIGNhbiBiZSBjYWxsZWQgd2l0aCBpbnB1dCBzZXQgdG8gYSBzdHJpbmcKKyAgICAgICAgb3V0cHV0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoCisgICAgICAgICAgICAgICAgW3N5cy5leGVjdXRhYmxlLCAiLWMiLAorICAgICAgICAgICAgICAgICAiaW1wb3J0IHN5czsgc3lzLnN0ZG91dC53cml0ZShzeXMuc3RkaW4ucmVhZCgpLnVwcGVyKCkpIl0sCisgICAgICAgICAgICAgICAgaW5wdXQ9YidwZWFyJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbihiJ1BFQVInLCBvdXRwdXQpCisKICAgICBkZWYgdGVzdF9jaGVja19vdXRwdXRfc3Rkb3V0X2FyZyhzZWxmKToKLSAgICAgICAgIyBjaGVja19vdXRwdXQoKSBmdW5jdGlvbiBzdGRlcnIgcmVkaXJlY3RlZCB0byBzdGRvdXQKKyAgICAgICAgIyBjaGVja19vdXRwdXQoKSByZWZ1c2VzIHRvIGFjY2VwdCAnc3Rkb3V0JyBhcmd1bWVudAogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpIGFzIGM6CiAgICAgICAgICAgICBvdXRwdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dCgKICAgICAgICAgICAgICAgICAgICAgW3N5cy5leGVjdXRhYmxlLCAiLWMiLCAicHJpbnQoJ3dpbGwgbm90IGJlIHJ1bicpIl0sCkBAIC0xNzEsNiArMTc4LDIwIEBACiAgICAgICAgICAgICBzZWxmLmZhaWwoIkV4cGVjdGVkIFZhbHVlRXJyb3Igd2hlbiBzdGRvdXQgYXJnIHN1cHBsaWVkLiIpCiAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3N0ZG91dCcsIGMuZXhjZXB0aW9uLmFyZ3NbMF0pCiAKKyAgICBkZWYgdGVzdF9jaGVja19vdXRwdXRfc3RkaW5fd2l0aF9pbnB1dF9hcmcoc2VsZik6CisgICAgICAgICMgY2hlY2tfb3V0cHV0KCkgcmVmdXNlcyB0byBhY2NlcHQgJ3N0ZGluJyB3aXRoICdpbnB1dCcKKyAgICAgICAgdGYgPSB0ZW1wZmlsZS5UZW1wb3JhcnlGaWxlKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHRmLmNsb3NlKQorICAgICAgICB0Zi53cml0ZShiJ3BlYXInKQorICAgICAgICB0Zi5zZWVrKDApCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcikgYXMgYzoKKyAgICAgICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KAorICAgICAgICAgICAgICAgICAgICBbc3lzLmV4ZWN1dGFibGUsICItYyIsICJwcmludCgnd2lsbCBub3QgYmUgcnVuJykiXSwKKyAgICAgICAgICAgICAgICAgICAgc3RkaW49dGYsIGlucHV0PWInaGFyZScpCisgICAgICAgICAgICBzZWxmLmZhaWwoIkV4cGVjdGVkIFZhbHVlRXJyb3Igd2hlbiBzdGRpbiBhbmQgaW5wdXQgYXJncyBzdXBwbGllZC4iKQorICAgICAgICBzZWxmLmFzc2VydEluKCdzdGRpbicsIGMuZXhjZXB0aW9uLmFyZ3NbMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2lucHV0JywgYy5leGNlcHRpb24uYXJnc1swXSkKKwogICAgIGRlZiB0ZXN0X2NoZWNrX291dHB1dF90aW1lb3V0KHNlbGYpOgogICAgICAgICAjIGNoZWNrX291dHB1dCgpIGZ1bmN0aW9uIHdpdGggdGltZW91dCBhcmcKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzdWJwcm9jZXNzLlRpbWVvdXRFeHBpcmVkKSBhcyBjOgpAQCAtMjg2LDExICszMDcsOCBAQAogICAgICAgICAjIE5vcm1hbGl6ZSBhbiBleHBlY3RlZCBjd2QgKGZvciBUcnU2NCBzdXBwb3J0KS4KICAgICAgICAgIyBXZSBjYW4ndCB1c2Ugb3MucGF0aC5yZWFscGF0aCBzaW5jZSBpdCBkb2Vzbid0IGV4cGFuZCBUcnU2NCB7bWVtYn0KICAgICAgICAgIyBzdHJpbmdzLiAgU2VlIGJ1ZyAjMTA2MzU3MS4KLSAgICAgICAgb3JpZ2luYWxfY3dkID0gb3MuZ2V0Y3dkKCkKLSAgICAgICAgb3MuY2hkaXIoY3dkKQotICAgICAgICBjd2QgPSBvcy5nZXRjd2QoKQotICAgICAgICBvcy5jaGRpcihvcmlnaW5hbF9jd2QpCi0gICAgICAgIHJldHVybiBjd2QKKyAgICAgICAgd2l0aCBzdXBwb3J0LmNoYW5nZV9jd2QoY3dkKToKKyAgICAgICAgICAgIHJldHVybiBvcy5nZXRjd2QoKQogCiAgICAgIyBGb3IgdXNlIGluIHRoZSB0ZXN0X2N3ZCogdGVzdHMgYmVsb3cuCiAgICAgZGVmIF9zcGxpdF9weXRob25fcGF0aChzZWxmKToKQEAgLTc1NSw2ICs3NzMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bml2ZXJzYWxfbmV3bGluZXM9MSkKICAgICAgICAgcC5zdGRpbi53cml0ZSgibGluZTFcbiIpCisgICAgICAgIHAuc3RkaW4uZmx1c2goKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuc3Rkb3V0LnJlYWRsaW5lKCksICJsaW5lMVxuIikKICAgICAgICAgcC5zdGRpbi53cml0ZSgibGluZTNcbiIpCiAgICAgICAgIHAuc3RkaW4uY2xvc2UoKQpAQCAtODUzLDggKzg3Miw5IEBACiAgICAgICAgICMKICAgICAgICAgIyBVVEYtMTYgYW5kIFVURi0zMi1CRSBhcmUgc3VmZmljaWVudCB0byBjaGVjayBib3RoIHdpdGggQk9NIGFuZAogICAgICAgICAjIHdpdGhvdXQsIGFuZCBVVEYtMTYgYW5kIFVURi0zMi4KKyAgICAgICAgaW1wb3J0IF9ib290bG9jYWxlCiAgICAgICAgIGZvciBlbmNvZGluZyBpbiBbJ3V0Zi0xNicsICd1dGYtMzItYmUnXToKLSAgICAgICAgICAgIG9sZF9nZXRwcmVmZXJyZWRlbmNvZGluZyA9IGxvY2FsZS5nZXRwcmVmZXJyZWRlbmNvZGluZworICAgICAgICAgICAgb2xkX2dldHByZWZlcnJlZGVuY29kaW5nID0gX2Jvb3Rsb2NhbGUuZ2V0cHJlZmVycmVkZW5jb2RpbmcKICAgICAgICAgICAgICMgSW5kaXJlY3RseSB2aWEgaW8uVGV4dElPV3JhcHBlciwgUG9wZW4oKSBkZWZhdWx0cyB0bwogICAgICAgICAgICAgIyBsb2NhbGUuZ2V0cHJlZmVycmVkZW5jb2RpbmcoRmFsc2UpIGFuZCBlYXJsaWVyIGluIFB5dGhvbiAzLjIgdG8KICAgICAgICAgICAgICMgbG9jYWxlLmdldHByZWZlcnJlZGVuY29kaW5nKCkuCkBAIC04NjUsNyArODg1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgZW5jb2RpbmcpCiAgICAgICAgICAgICBhcmdzID0gW3N5cy5leGVjdXRhYmxlLCAnLWMnLCBjb2RlXQogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGxvY2FsZS5nZXRwcmVmZXJyZWRlbmNvZGluZyA9IGdldHByZWZlcnJlZGVuY29kaW5nCisgICAgICAgICAgICAgICAgX2Jvb3Rsb2NhbGUuZ2V0cHJlZmVycmVkZW5jb2RpbmcgPSBnZXRwcmVmZXJyZWRlbmNvZGluZwogICAgICAgICAgICAgICAgICMgV2Ugc2V0IHN0ZGluIHRvIGJlIG5vbi1Ob25lIGJlY2F1c2UsIGFzIG9mIHRoaXMgd3JpdGluZywKICAgICAgICAgICAgICAgICAjIGEgZGlmZmVyZW50IGNvZGUgcGF0aCBpcyB1c2VkIHdoZW4gdGhlIG51bWJlciBvZiBwaXBlcyBpcwogICAgICAgICAgICAgICAgICMgemVybyBvciBvbmUuCkBAIC04NzQsNyArODk0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkKICAgICAgICAgICAgICAgICBzdGRvdXQsIHN0ZGVyciA9IHBvcGVuLmNvbW11bmljYXRlKGlucHV0PScnKQogICAgICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgICAgICBsb2NhbGUuZ2V0cHJlZmVycmVkZW5jb2RpbmcgPSBvbGRfZ2V0cHJlZmVycmVkZW5jb2RpbmcKKyAgICAgICAgICAgICAgICBfYm9vdGxvY2FsZS5nZXRwcmVmZXJyZWRlbmNvZGluZyA9IG9sZF9nZXRwcmVmZXJyZWRlbmNvZGluZwogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQsICcxXG4yXG4zXG40JykKIAogICAgIGRlZiB0ZXN0X25vX2xlYWtpbmcoc2VsZik6CkBAIC05NzUsNiArOTk1LDM5IEBACiAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwgInBhc3MiXSwgYnVmc2l6ZT1Ob25lKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAud2FpdCgpLCAwKQogCisgICAgZGVmIF90ZXN0X2J1ZnNpemVfZXF1YWxfb25lKHNlbGYsIGxpbmUsIGV4cGVjdGVkLCB1bml2ZXJzYWxfbmV3bGluZXMpOgorICAgICAgICAjIHN1YnByb2Nlc3MgbWF5IGRlYWRsb2NrIHdpdGggYnVmc2l6ZT0xLCBzZWUgaXNzdWUgIzIxMzMyCisgICAgICAgIHdpdGggc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItYyIsICJpbXBvcnQgc3lzOyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3lzLnN0ZG91dC53cml0ZShzeXMuc3RkaW4ucmVhZGxpbmUoKSk7IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzeXMuc3Rkb3V0LmZsdXNoKCkiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5ERVZOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmc2l6ZT0xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdmVyc2FsX25ld2xpbmVzPXVuaXZlcnNhbF9uZXdsaW5lcykgYXMgcDoKKyAgICAgICAgICAgIHAuc3RkaW4ud3JpdGUobGluZSkgIyBleHBlY3QgdGhhdCBpdCBmbHVzaGVzIHRoZSBsaW5lIGluIHRleHQgbW9kZQorICAgICAgICAgICAgb3MuY2xvc2UocC5zdGRpbi5maWxlbm8oKSkgIyBjbG9zZSBpdCB3aXRob3V0IGZsdXNoaW5nIHRoZSBidWZmZXIKKyAgICAgICAgICAgIHJlYWRfbGluZSA9IHAuc3Rkb3V0LnJlYWRsaW5lKCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBwLnN0ZGluLmNsb3NlKCkKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIHAuc3RkaW4gPSBOb25lCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5yZXR1cm5jb2RlLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWRfbGluZSwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9idWZzaXplX2VxdWFsX29uZV90ZXh0X21vZGUoc2VsZik6CisgICAgICAgICMgbGluZSBpcyBmbHVzaGVkIGluIHRleHQgbW9kZSB3aXRoIGJ1ZnNpemU9MS4KKyAgICAgICAgIyB3ZSBzaG91bGQgZ2V0IHRoZSBmdWxsIGxpbmUgaW4gcmV0dXJuCisgICAgICAgIGxpbmUgPSAibGluZVxuIgorICAgICAgICBzZWxmLl90ZXN0X2J1ZnNpemVfZXF1YWxfb25lKGxpbmUsIGxpbmUsIHVuaXZlcnNhbF9uZXdsaW5lcz1UcnVlKQorCisgICAgZGVmIHRlc3RfYnVmc2l6ZV9lcXVhbF9vbmVfYmluYXJ5X21vZGUoc2VsZik6CisgICAgICAgICMgbGluZSBpcyBub3QgZmx1c2hlZCBpbiBiaW5hcnkgbW9kZSB3aXRoIGJ1ZnNpemU9MS4KKyAgICAgICAgIyB3ZSBzaG91bGQgZ2V0IGVtcHR5IHJlc3BvbnNlCisgICAgICAgIGxpbmUgPSBiJ2xpbmUnICsgb3MubGluZXNlcC5lbmNvZGUoKSAjIGFzc3VtZSBhc2NpaS1iYXNlZCBsb2NhbGUKKyAgICAgICAgc2VsZi5fdGVzdF9idWZzaXplX2VxdWFsX29uZShsaW5lLCBiJycsIHVuaXZlcnNhbF9uZXdsaW5lcz1GYWxzZSkKKwogICAgIGRlZiB0ZXN0X2xlYWtpbmdfZmRzX29uX2Vycm9yKHNlbGYpOgogICAgICAgICAjIHNlZSBidWcgIzUxNzk6IFBvcGVuIGxlYWtzIGZpbGUgZGVzY3JpcHRvcnMgdG8gUElQRXMgaWYKICAgICAgICAgIyB0aGUgY2hpbGQgZmFpbHMgdG8gZXhlY3V0ZTsgdGhpcyB3aWxsIGV2ZW50dWFsbHkgZXhoYXVzdApAQCAtOTgyLDggKzEwMzUsNyBAQAogICAgICAgICAjIHZhbHVlIGZvciB0aGF0IGxpbWl0LCBidXQgV2luZG93cyBoYXMgMjA0OCwgc28gd2UgbG9vcAogICAgICAgICAjIDEwMjQgdGltZXMgKGVhY2ggY2FsbCBsZWFrZWQgdHdvIGZkcykuCiAgICAgICAgIGZvciBpIGluIHJhbmdlKDEwMjQpOgotICAgICAgICAgICAgIyBXaW5kb3dzIHJhaXNlcyBJT0Vycm9yLiAgT3RoZXJzIHJhaXNlIE9TRXJyb3IuCi0gICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEVudmlyb25tZW50RXJyb3IpIGFzIGM6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpIGFzIGM6CiAgICAgICAgICAgICAgICAgc3VicHJvY2Vzcy5Qb3BlbihbJ25vbmV4aXN0aW5nX2lfaG9wZSddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCkBAIC0xMDIxLDYgKzEwNzMsNTkgQEAKICAgICAgICAgICAgIGlmIGV4YyBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICByYWlzZSBleGMKIAorICAgIEB1bml0dGVzdC5za2lwSWYodGhyZWFkaW5nIGlzIE5vbmUsICJ0aHJlYWRpbmcgcmVxdWlyZWQiKQorICAgIGRlZiB0ZXN0X3RocmVhZHNhZmVfd2FpdChzZWxmKToKKyAgICAgICAgIiIiSXNzdWUyMTI5MTogUG9wZW4ud2FpdCgpIG5lZWRzIHRvIGJlIHRocmVhZHNhZmUgZm9yIHJldHVybmNvZGUuIiIiCisgICAgICAgIHByb2MgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgJy1jJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbXBvcnQgdGltZTsgdGltZS5zbGVlcCgxMiknXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm9jLnJldHVybmNvZGUsIE5vbmUpCisgICAgICAgIHJlc3VsdHMgPSBbXQorCisgICAgICAgIGRlZiBraWxsX3Byb2NfdGltZXJfdGhyZWFkKCk6CisgICAgICAgICAgICByZXN1bHRzLmFwcGVuZCgoJ3RocmVhZC1zdGFydC1wb2xsLXJlc3VsdCcsIHByb2MucG9sbCgpKSkKKyAgICAgICAgICAgICMgdGVybWluYXRlIGl0IGZyb20gdGhlIHRocmVhZCBhbmQgd2FpdCBmb3IgdGhlIHJlc3VsdC4KKyAgICAgICAgICAgIHByb2Mua2lsbCgpCisgICAgICAgICAgICBwcm9jLndhaXQoKQorICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoKCd0aHJlYWQtYWZ0ZXIta2lsbC1hbmQtd2FpdCcsIHByb2MucmV0dXJuY29kZSkpCisgICAgICAgICAgICAjIHRoaXMgd2FpdCBzaG91bGQgYmUgYSBuby1vcCBnaXZlbiB0aGUgYWJvdmUuCisgICAgICAgICAgICBwcm9jLndhaXQoKQorICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoKCd0aHJlYWQtYWZ0ZXItc2Vjb25kLXdhaXQnLCBwcm9jLnJldHVybmNvZGUpKQorCisgICAgICAgICMgVGhpcyBpcyBhIHRpbWluZyBzZW5zaXRpdmUgdGVzdCwgdGhlIGZhaWx1cmUgbW9kZSBpcworICAgICAgICAjIHRyaWdnZXJlZCB3aGVuIGJvdGggdGhlIG1haW4gdGhyZWFkIGFuZCB0aGlzIHRocmVhZCBhcmUgaW4KKyAgICAgICAgIyB0aGUgd2FpdCgpIGNhbGwgYXQgb25jZS4gIFRoZSBkZWxheSBoZXJlIGlzIHRvIGFsbG93IHRoZQorICAgICAgICAjIG1haW4gdGhyZWFkIHRvIG1vc3QgbGlrZWx5IGJlIGJsb2NrZWQgaW4gaXRzIHdhaXQoKSBjYWxsLgorICAgICAgICB0ID0gdGhyZWFkaW5nLlRpbWVyKDAuMiwga2lsbF9wcm9jX3RpbWVyX3RocmVhZCkKKyAgICAgICAgdC5zdGFydCgpCisKKyAgICAgICAgaWYgbXN3aW5kb3dzOgorICAgICAgICAgICAgZXhwZWN0ZWRfZXJyb3Jjb2RlID0gMQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBTaG91bGQgYmUgLTkgYmVjYXVzZSBvZiB0aGUgcHJvYy5raWxsKCkgZnJvbSB0aGUgdGhyZWFkLgorICAgICAgICAgICAgZXhwZWN0ZWRfZXJyb3Jjb2RlID0gLTkKKworICAgICAgICAjIFdhaXQgZm9yIHRoZSBwcm9jZXNzIHRvIGZpbmlzaDsgdGhlIHRocmVhZCBzaG91bGQga2lsbCBpdAorICAgICAgICAjIGxvbmcgYmVmb3JlIGl0IGZpbmlzaGVzIG9uIGl0cyBvd24uICBTdXBwbHlpbmcgYSB0aW1lb3V0CisgICAgICAgICMgdHJpZ2dlcnMgYSBkaWZmZXJlbnQgY29kZSBwYXRoIGZvciBiZXR0ZXIgY292ZXJhZ2UuCisgICAgICAgIHByb2Mud2FpdCh0aW1lb3V0PTIwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb2MucmV0dXJuY29kZSwgZXhwZWN0ZWRfZXJyb3Jjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0idW5leHBlY3RlZCByZXN1bHQgaW4gd2FpdCBmcm9tIG1haW4gdGhyZWFkIikKKworICAgICAgICAjIFRoaXMgc2hvdWxkIGJlIGEgbm8tb3Agd2l0aCBubyBjaGFuZ2UgaW4gcmV0dXJuY29kZS4KKyAgICAgICAgcHJvYy53YWl0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm9jLnJldHVybmNvZGUsIGV4cGVjdGVkX2Vycm9yY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBtc2c9InVuZXhwZWN0ZWQgcmVzdWx0IGluIHNlY29uZCBtYWluIHdhaXQuIikKKworICAgICAgICB0LmpvaW4oKQorICAgICAgICAjIEVuc3VyZSB0aGF0IGFsbCBvZiB0aGUgdGhyZWFkIHJlc3VsdHMgYXJlIGFzIGV4cGVjdGVkLgorICAgICAgICAjIFdoZW4gYSByYWNlIGNvbmRpdGlvbiBvY2N1cnMgaW4gd2FpdCgpLCB0aGUgcmV0dXJuY29kZSBjb3VsZAorICAgICAgICAjIGJlIHNldCBieSB0aGUgd3JvbmcgdGhyZWFkIHRoYXQgZG9lc24ndCBhY3R1YWxseSBoYXZlIGl0CisgICAgICAgICMgbGVhZGluZyB0byBhbiBpbmNvcnJlY3QgdmFsdWUuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWygndGhyZWFkLXN0YXJ0LXBvbGwtcmVzdWx0JywgTm9uZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICgndGhyZWFkLWFmdGVyLWtpbGwtYW5kLXdhaXQnLCBleHBlY3RlZF9lcnJvcmNvZGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoJ3RocmVhZC1hZnRlci1zZWNvbmQtd2FpdCcsIGV4cGVjdGVkX2Vycm9yY29kZSldLAorICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMpCisKICAgICBkZWYgdGVzdF9pc3N1ZTg3ODAoc2VsZik6CiAgICAgICAgICMgRW5zdXJlIHRoYXQgc3Rkb3V0IGlzIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQKICAgICAgICAgIyBpZiBzdGRvdXQ9UElQRSBpcyBub3QgdXNlZApAQCAtMTAzNSw5ICsxMTQwLDkgQEAKICAgICBkZWYgdGVzdF9oYW5kbGVzX2Nsb3NlZF9vbl9leGNlcHRpb24oc2VsZik6CiAgICAgICAgICMgSWYgQ3JlYXRlUHJvY2VzcyBleGl0cyB3aXRoIGFuIGVycm9yLCBlbnN1cmUgdGhlCiAgICAgICAgICMgZHVwbGljYXRlIG91dHB1dCBoYW5kbGVzIGFyZSByZWxlYXNlZAotICAgICAgICBpZmhhbmRsZSwgaWZuYW1lID0gbWtzdGVtcCgpCi0gICAgICAgIG9maGFuZGxlLCBvZm5hbWUgPSBta3N0ZW1wKCkKLSAgICAgICAgZWZoYW5kbGUsIGVmbmFtZSA9IG1rc3RlbXAoKQorICAgICAgICBpZmhhbmRsZSwgaWZuYW1lID0gdGVtcGZpbGUubWtzdGVtcCgpCisgICAgICAgIG9maGFuZGxlLCBvZm5hbWUgPSB0ZW1wZmlsZS5ta3N0ZW1wKCkKKyAgICAgICAgZWZoYW5kbGUsIGVmbmFtZSA9IHRlbXBmaWxlLm1rc3RlbXAoKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzdWJwcm9jZXNzLlBvcGVuIChbIioiXSwgc3RkaW49aWZoYW5kbGUsIHN0ZG91dD1vZmhhbmRsZSwKICAgICAgICAgICAgICAgc3RkZXJyPWVmaGFuZGxlKQpAQCAtMTExNCw0NyArMTIxOSw2IEBACiAgICAgICAgIGZkc19hZnRlcl9leGNlcHRpb24gPSBvcy5saXN0ZGlyKGZkX2RpcmVjdG9yeSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmZHNfYmVmb3JlX3BvcGVuLCBmZHNfYWZ0ZXJfZXhjZXB0aW9uKQogCi0KLSMgY29udGV4dCBtYW5hZ2VyCi1jbGFzcyBfU3VwcHJlc3NDb3JlRmlsZXMob2JqZWN0KToKLSAgICAiIiJUcnkgdG8gcHJldmVudCBjb3JlIGZpbGVzIGZyb20gYmVpbmcgY3JlYXRlZC4iIiIKLSAgICBvbGRfbGltaXQgPSBOb25lCi0KLSAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgotICAgICAgICAiIiJUcnkgdG8gc2F2ZSBwcmV2aW91cyB1bGltaXQsIHRoZW4gc2V0IGl0IHRvICgwLCAwKS4iIiIKLSAgICAgICAgaWYgcmVzb3VyY2UgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgc2VsZi5vbGRfbGltaXQgPSByZXNvdXJjZS5nZXRybGltaXQocmVzb3VyY2UuUkxJTUlUX0NPUkUpCi0gICAgICAgICAgICAgICAgcmVzb3VyY2Uuc2V0cmxpbWl0KHJlc291cmNlLlJMSU1JVF9DT1JFLCAoMCwgMCkpCi0gICAgICAgICAgICBleGNlcHQgKFZhbHVlRXJyb3IsIHJlc291cmNlLmVycm9yKToKLSAgICAgICAgICAgICAgICBwYXNzCi0KLSAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nOgotICAgICAgICAgICAgIyBDaGVjayBpZiB0aGUgJ0NyYXNoIFJlcG9ydGVyJyBvbiBPU1ggd2FzIGNvbmZpZ3VyZWQKLSAgICAgICAgICAgICMgaW4gJ0RldmVsb3BlcicgbW9kZSBhbmQgd2FybiB0aGF0IGl0IHdpbGwgZ2V0IHRyaWdnZXJlZAotICAgICAgICAgICAgIyB3aGVuIGl0IGlzLgotICAgICAgICAgICAgIwotICAgICAgICAgICAgIyBUaGlzIGFzc3VtZXMgdGhhdCB0aGlzIGNvbnRleHQgbWFuYWdlciBpcyB1c2VkIGluIHRlc3RzCi0gICAgICAgICAgICAjIHRoYXQgbWlnaHQgdHJpZ2dlciB0aGUgbmV4dCBtYW5hZ2VyLgotICAgICAgICAgICAgdmFsdWUgPSBzdWJwcm9jZXNzLlBvcGVuKFsnL3Vzci9iaW4vZGVmYXVsdHMnLCAncmVhZCcsCi0gICAgICAgICAgICAgICAgICAgICdjb20uYXBwbGUuQ3Jhc2hSZXBvcnRlcicsICdEaWFsb2dUeXBlJ10sCi0gICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpLmNvbW11bmljYXRlKClbMF0KLSAgICAgICAgICAgIGlmIHZhbHVlLnN0cmlwKCkgPT0gYidkZXZlbG9wZXInOgotICAgICAgICAgICAgICAgIHByaW50KCJ0aGlzIHRlc3RzIHRyaWdnZXJzIHRoZSBDcmFzaCBSZXBvcnRlciwgIgotICAgICAgICAgICAgICAgICAgICAgICJ0aGF0IGlzIGludGVudGlvbmFsIiwgZW5kPScnKQotICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQotCi0gICAgZGVmIF9fZXhpdF9fKHNlbGYsICphcmdzKToKLSAgICAgICAgIiIiUmV0dXJuIGNvcmUgZmlsZSBiZWhhdmlvciB0byBkZWZhdWx0LiIiIgotICAgICAgICBpZiBzZWxmLm9sZF9saW1pdCBpcyBOb25lOgotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGlmIHJlc291cmNlIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHJlc291cmNlLnNldHJsaW1pdChyZXNvdXJjZS5STElNSVRfQ09SRSwgc2VsZi5vbGRfbGltaXQpCi0gICAgICAgICAgICBleGNlcHQgKFZhbHVlRXJyb3IsIHJlc291cmNlLmVycm9yKToKLSAgICAgICAgICAgICAgICBwYXNzCi0KLQogQHVuaXR0ZXN0LnNraXBJZihtc3dpbmRvd3MsICJQT1NJWCBzcGVjaWZpYyB0ZXN0cyIpCiBjbGFzcyBQT1NJWFByb2Nlc3NUZXN0Q2FzZShCYXNlVGVzdENhc2UpOgogCkBAIC0xMjQzLDcgKzEzMDcsNyBAQAogCiAgICAgZGVmIHRlc3RfcnVuX2Fib3J0KHNlbGYpOgogICAgICAgICAjIHJldHVybmNvZGUgaGFuZGxlcyBzaWduYWwgdGVybWluYXRpb24KLSAgICAgICAgd2l0aCBfU3VwcHJlc3NDb3JlRmlsZXMoKToKKyAgICAgICAgd2l0aCBzdXBwb3J0LlN1cHByZXNzQ3Jhc2hSZXBvcnQoKToKICAgICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW1wb3J0IG9zOyBvcy5hYm9ydCgpJ10pCiAgICAgICAgICAgICBwLndhaXQoKQpAQCAtMTI2Niw3ICsxMzMwLDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLCAiIl0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVleGVjX2ZuPXJhaXNlX2l0KQotICAgICAgICBleGNlcHQgUnVudGltZUVycm9yIGFzIGU6CisgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLlN1YnByb2Nlc3NFcnJvciBhcyBlOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKAogICAgICAgICAgICAgICAgICAgICBzdWJwcm9jZXNzLl9wb3NpeHN1YnByb2Nlc3MsCiAgICAgICAgICAgICAgICAgICAgICJFeHBlY3RlZCBhIFZhbHVlRXJyb3IgZnJvbSB0aGUgcHJlZXhlY19mbiIpCkBAIC0xMzA2LDkgKzEzNzAsMTAgQEAKICAgICAgICAgIiIiSXNzdWUxNjE0MDogRG9uJ3QgZG91YmxlIGNsb3NlIHBpcGVzIG9uIHByZWV4ZWMgZXJyb3IuIiIiCiAKICAgICAgICAgZGVmIHJhaXNlX2l0KCk6Ci0gICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoImZvcmNlIHRoZSBfZXhlY3V0ZV9jaGlsZCgpIGVycnBpcGVfZGF0YSBwYXRoLiIpCisgICAgICAgICAgICByYWlzZSBzdWJwcm9jZXNzLlN1YnByb2Nlc3NFcnJvcigKKyAgICAgICAgICAgICAgICAgICAgImZvcmNlIHRoZSBfZXhlY3V0ZV9jaGlsZCgpIGVycnBpcGVfZGF0YSBwYXRoLiIpCiAKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHN1YnByb2Nlc3MuU3VicHJvY2Vzc0Vycm9yKToKICAgICAgICAgICAgIHNlbGYuX1Rlc3RFeGVjdXRlQ2hpbGRQb3BlbigKICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYsIFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwgInBhc3MiXSwKICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKQEAgLTEzNTEsOSArMTQxNiwyNyBAQAogICAgICAgICAgICAgaWYgbm90IGVuYWJsZWQ6CiAgICAgICAgICAgICAgICAgZ2MuZGlzYWJsZSgpCiAKKyAgICBAdW5pdHRlc3Quc2tpcElmKAorICAgICAgICBzeXMucGxhdGZvcm0gPT0gJ2RhcndpbicsICdzZXRybGltaXQoKSBzZWVtcyB0byBmYWlsIG9uIE9TIFgnKQorICAgIGRlZiB0ZXN0X3ByZWV4ZWNfZm9ya19mYWlsdXJlKHNlbGYpOgorICAgICAgICAjIFRoZSBpbnRlcm5hbCBjb2RlIGRpZCBub3QgcHJlc2VydmUgdGhlIHByZXZpb3VzIGV4Y2VwdGlvbiB3aGVuCisgICAgICAgICMgcmUtZW5hYmxpbmcgZ2FyYmFnZSBjb2xsZWN0aW9uCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZyb20gcmVzb3VyY2UgaW1wb3J0IGdldHJsaW1pdCwgc2V0cmxpbWl0LCBSTElNSVRfTlBST0MKKyAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yIGFzIGVycjoKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoZXJyKSAgIyBSTElNSVRfTlBST0MgaXMgc3BlY2lmaWMgdG8gTGludXggYW5kIEJTRAorICAgICAgICBsaW1pdHMgPSBnZXRybGltaXQoUkxJTUlUX05QUk9DKQorICAgICAgICBbXywgaGFyZF0gPSBsaW1pdHMKKyAgICAgICAgc2V0cmxpbWl0KFJMSU1JVF9OUFJPQywgKDAsIGhhcmQpKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoc2V0cmxpbWl0LCBSTElNSVRfTlBST0MsIGxpbWl0cykKKyAgICAgICAgIyBGb3JraW5nIHNob3VsZCByYWlzZSBFQUdBSU4sIHRyYW5zbGF0ZWQgdG8gQmxvY2tpbmdJT0Vycm9yCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQmxvY2tpbmdJT0Vycm9yKToKKyAgICAgICAgICAgIHN1YnByb2Nlc3MuY2FsbChbc3lzLmV4ZWN1dGFibGUsICctYycsICcnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVleGVjX2ZuPWxhbWJkYTogTm9uZSkKKwogICAgIGRlZiB0ZXN0X2FyZ3Nfc3RyaW5nKHNlbGYpOgogICAgICAgICAjIGFyZ3MgaXMgYSBzdHJpbmcKLSAgICAgICAgZmQsIGZuYW1lID0gbWtzdGVtcCgpCisgICAgICAgIGZkLCBmbmFtZSA9IHRlbXBmaWxlLm1rc3RlbXAoKQogICAgICAgICAjIHJlb3BlbiBpbiB0ZXh0IG1vZGUKICAgICAgICAgd2l0aCBvcGVuKGZkLCAidyIsIGVycm9ycz0ic3Vycm9nYXRlZXNjYXBlIikgYXMgZm9iajoKICAgICAgICAgICAgIGZvYmoud3JpdGUoIiMhL2Jpbi9zaFxuIikKQEAgLTEzOTgsNyArMTQ4MSw3IEBACiAKICAgICBkZWYgdGVzdF9jYWxsX3N0cmluZyhzZWxmKToKICAgICAgICAgIyBjYWxsKCkgZnVuY3Rpb24gd2l0aCBzdHJpbmcgYXJndW1lbnQgb24gVU5JWAotICAgICAgICBmZCwgZm5hbWUgPSBta3N0ZW1wKCkKKyAgICAgICAgZmQsIGZuYW1lID0gdGVtcGZpbGUubWtzdGVtcCgpCiAgICAgICAgICMgcmVvcGVuIGluIHRleHQgbW9kZQogICAgICAgICB3aXRoIG9wZW4oZmQsICJ3IiwgZXJyb3JzPSJzdXJyb2dhdGVlc2NhcGUiKSBhcyBmb2JqOgogICAgICAgICAgICAgZm9iai53cml0ZSgiIyEvYmluL3NoXG4iKQpAQCAtMTUwNywxNiArMTU5MCwyOCBAQAogICAgICAgICAjIFRlcm1pbmF0aW5nIGEgZGVhZCBwcm9jZXNzCiAgICAgICAgIHNlbGYuX2tpbGxfZGVhZF9wcm9jZXNzKCd0ZXJtaW5hdGUnKQogCisgICAgZGVmIF9zYXZlX2ZkcyhzZWxmLCBzYXZlX2Zkcyk6CisgICAgICAgIGZkcyA9IFtdCisgICAgICAgIGZvciBmZCBpbiBzYXZlX2ZkczoKKyAgICAgICAgICAgIGluaGVyaXRhYmxlID0gb3MuZ2V0X2luaGVyaXRhYmxlKGZkKQorICAgICAgICAgICAgc2F2ZWQgPSBvcy5kdXAoZmQpCisgICAgICAgICAgICBmZHMuYXBwZW5kKChmZCwgc2F2ZWQsIGluaGVyaXRhYmxlKSkKKyAgICAgICAgcmV0dXJuIGZkcworCisgICAgZGVmIF9yZXN0b3JlX2ZkcyhzZWxmLCBmZHMpOgorICAgICAgICBmb3IgZmQsIHNhdmVkLCBpbmhlcml0YWJsZSBpbiBmZHM6CisgICAgICAgICAgICBvcy5kdXAyKHNhdmVkLCBmZCwgaW5oZXJpdGFibGU9aW5oZXJpdGFibGUpCisgICAgICAgICAgICBvcy5jbG9zZShzYXZlZCkKKwogICAgIGRlZiBjaGVja19jbG9zZV9zdGRfZmRzKHNlbGYsIGZkcyk6CiAgICAgICAgICMgSXNzdWUgIzk5MDU6IHRlc3QgdGhhdCBzdWJwcm9jZXNzIHBpcGVzIHN0aWxsIHdvcmsgcHJvcGVybHkgd2l0aAogICAgICAgICAjIHNvbWUgc3RhbmRhcmQgZmRzIGNsb3NlZAogICAgICAgICBzdGRpbiA9IDAKLSAgICAgICAgbmV3ZmRzID0gW10KLSAgICAgICAgZm9yIGEgaW4gZmRzOgotICAgICAgICAgICAgYiA9IG9zLmR1cChhKQotICAgICAgICAgICAgbmV3ZmRzLmFwcGVuZChiKQotICAgICAgICAgICAgaWYgYSA9PSAwOgotICAgICAgICAgICAgICAgIHN0ZGluID0gYgorICAgICAgICBzYXZlZF9mZHMgPSBzZWxmLl9zYXZlX2ZkcyhmZHMpCisgICAgICAgIGZvciBmZCwgc2F2ZWQsIGluaGVyaXRhYmxlIGluIHNhdmVkX2ZkczoKKyAgICAgICAgICAgIGlmIGZkID09IDA6CisgICAgICAgICAgICAgICAgc3RkaW4gPSBzYXZlZAorICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGZvciBmZCBpbiBmZHM6CiAgICAgICAgICAgICAgICAgb3MuY2xvc2UoZmQpCkBAIC0xNTMxLDEwICsxNjI2LDcgQEAKICAgICAgICAgICAgIGVyciA9IHN1cHBvcnQuc3RyaXBfcHl0aG9uX3N0ZGVycihlcnIpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChvdXQsIGVyciksIChiJ2FwcGxlJywgYidvcmFuZ2UnKSkKICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGZvciBiLCBhIGluIHppcChuZXdmZHMsIGZkcyk6Ci0gICAgICAgICAgICAgICAgb3MuZHVwMihiLCBhKQotICAgICAgICAgICAgZm9yIGIgaW4gbmV3ZmRzOgotICAgICAgICAgICAgICAgIG9zLmNsb3NlKGIpCisgICAgICAgICAgICBzZWxmLl9yZXN0b3JlX2ZkcyhzYXZlZF9mZHMpCiAKICAgICBkZWYgdGVzdF9jbG9zZV9mZF8wKHNlbGYpOgogICAgICAgICBzZWxmLmNoZWNrX2Nsb3NlX3N0ZF9mZHMoWzBdKQpAQCAtMTU4Miw3ICsxNjc0LDcgQEAKIAogICAgIGRlZiB0ZXN0X3JlbWFwcGluZ19zdGRfZmRzKHNlbGYpOgogICAgICAgICAjIG9wZW4gdXAgc29tZSB0ZW1wb3JhcnkgZmlsZXMKLSAgICAgICAgdGVtcHMgPSBbbWtzdGVtcCgpIGZvciBpIGluIHJhbmdlKDMpXQorICAgICAgICB0ZW1wcyA9IFt0ZW1wZmlsZS5ta3N0ZW1wKCkgZm9yIGkgaW4gcmFuZ2UoMyldCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHRlbXBfZmRzID0gW2ZkIGZvciBmZCwgZm5hbWUgaW4gdGVtcHNdCiAKQEAgLTE1OTUsNyArMTY4Nyw3IEBACiAgICAgICAgICAgICBvcy5sc2Vlayh0ZW1wX2Zkc1sxXSwgMCwgMCkKIAogICAgICAgICAgICAgIyBtb3ZlIHRoZSBzdGFuZGFyZCBmaWxlIGRlc2NyaXB0b3JzIG91dCBvZiB0aGUgd2F5Ci0gICAgICAgICAgICBzYXZlZF9mZHMgPSBbb3MuZHVwKGZkKSBmb3IgZmQgaW4gcmFuZ2UoMyldCisgICAgICAgICAgICBzYXZlZF9mZHMgPSBzZWxmLl9zYXZlX2ZkcyhyYW5nZSgzKSkKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAjIGR1cGxpY2F0ZSB0aGUgZmlsZSBvYmplY3RzIG92ZXIgdGhlIHN0YW5kYXJkIGZkJ3MKICAgICAgICAgICAgICAgICBmb3IgZmQsIHRlbXBfZmQgaW4gZW51bWVyYXRlKHRlbXBfZmRzKToKQEAgLTE2MTEsMTAgKzE3MDMsNyBAQAogICAgICAgICAgICAgICAgICAgICBzdGRlcnI9dGVtcF9mZHNbMF0pCiAgICAgICAgICAgICAgICAgcC53YWl0KCkKICAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgIyByZXN0b3JlIHRoZSBvcmlnaW5hbCBmZCdzIHVuZGVybmVhdGggc3lzLnN0ZGluLCBldGMuCi0gICAgICAgICAgICAgICAgZm9yIHN0ZCwgc2F2ZWQgaW4gZW51bWVyYXRlKHNhdmVkX2Zkcyk6Ci0gICAgICAgICAgICAgICAgICAgIG9zLmR1cDIoc2F2ZWQsIHN0ZCkKLSAgICAgICAgICAgICAgICAgICAgb3MuY2xvc2Uoc2F2ZWQpCisgICAgICAgICAgICAgICAgc2VsZi5fcmVzdG9yZV9mZHMoc2F2ZWRfZmRzKQogCiAgICAgICAgICAgICBmb3IgZmQgaW4gdGVtcF9mZHM6CiAgICAgICAgICAgICAgICAgb3MubHNlZWsoZmQsIDAsIDApCkBAIC0xNjMwLDcgKzE3MTksNyBAQAogCiAgICAgZGVmIGNoZWNrX3N3YXBfZmRzKHNlbGYsIHN0ZGluX25vLCBzdGRvdXRfbm8sIHN0ZGVycl9ubyk6CiAgICAgICAgICMgb3BlbiB1cCBzb21lIHRlbXBvcmFyeSBmaWxlcwotICAgICAgICB0ZW1wcyA9IFtta3N0ZW1wKCkgZm9yIGkgaW4gcmFuZ2UoMyldCisgICAgICAgIHRlbXBzID0gW3RlbXBmaWxlLm1rc3RlbXAoKSBmb3IgaSBpbiByYW5nZSgzKV0KICAgICAgICAgdGVtcF9mZHMgPSBbZmQgZm9yIGZkLCBmbmFtZSBpbiB0ZW1wc10KICAgICAgICAgdHJ5OgogICAgICAgICAgICAgIyB1bmxpbmsgdGhlIGZpbGVzIC0tIHdlIHdvbid0IG5lZWQgdG8gcmVvcGVuIHRoZW0KQEAgLTE2MzgsNyArMTcyNyw3IEBACiAgICAgICAgICAgICAgICAgb3MudW5saW5rKGZuYW1lKQogCiAgICAgICAgICAgICAjIHNhdmUgYSBjb3B5IG9mIHRoZSBzdGFuZGFyZCBmaWxlIGRlc2NyaXB0b3JzCi0gICAgICAgICAgICBzYXZlZF9mZHMgPSBbb3MuZHVwKGZkKSBmb3IgZmQgaW4gcmFuZ2UoMyldCisgICAgICAgICAgICBzYXZlZF9mZHMgPSBzZWxmLl9zYXZlX2ZkcyhyYW5nZSgzKSkKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAjIGR1cGxpY2F0ZSB0aGUgdGVtcCBmaWxlcyBvdmVyIHRoZSBzdGFuZGFyZCBmZCdzIDAsIDEsIDIKICAgICAgICAgICAgICAgICBmb3IgZmQsIHRlbXBfZmQgaW4gZW51bWVyYXRlKHRlbXBfZmRzKToKQEAgLTE2NjQsOSArMTc1Myw3IEBACiAgICAgICAgICAgICAgICAgb3V0ID0gb3MucmVhZChzdGRvdXRfbm8sIDEwMjQpCiAgICAgICAgICAgICAgICAgZXJyID0gc3VwcG9ydC5zdHJpcF9weXRob25fc3RkZXJyKG9zLnJlYWQoc3RkZXJyX25vLCAxMDI0KSkKICAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgZm9yIHN0ZCwgc2F2ZWQgaW4gZW51bWVyYXRlKHNhdmVkX2Zkcyk6Ci0gICAgICAgICAgICAgICAgICAgIG9zLmR1cDIoc2F2ZWQsIHN0ZCkKLSAgICAgICAgICAgICAgICAgICAgb3MuY2xvc2Uoc2F2ZWQpCisgICAgICAgICAgICAgICAgc2VsZi5fcmVzdG9yZV9mZHMoc2F2ZWRfZmRzKQogCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dCwgYiJnb3QgU1RESU4iKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIsIGIiZXJyIikKQEAgLTE2OTgsNDAgKzE3ODUsNDcgQEAKICAgICAgICAgICAgICMgUHVyZSBQeXRob24gaW1wbGVtZW50YXRpb25zIGtlZXBzIHRoZSBtZXNzYWdlCiAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzdWJwcm9jZXNzLl9wb3NpeHN1YnByb2Nlc3MpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlcnIpLCAic3Vycm9nYXRlOlx1RENmZiIpCi0gICAgICAgIGV4Y2VwdCBSdW50aW1lRXJyb3IgYXMgZXJyOgorICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5TdWJwcm9jZXNzRXJyb3IgYXMgZXJyOgogICAgICAgICAgICAgIyBfcG9zaXhzdWJwcm9jZXNzIHVzZXMgYSBkZWZhdWx0IG1lc3NhZ2UKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHN1YnByb2Nlc3MuX3Bvc2l4c3VicHJvY2VzcykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGVyciksICJFeGNlcHRpb24gb2NjdXJyZWQgaW4gcHJlZXhlY19mbi4iKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5mYWlsKCJFeHBlY3RlZCBWYWx1ZUVycm9yIG9yIFJ1bnRpbWVFcnJvciIpCisgICAgICAgICAgICBzZWxmLmZhaWwoIkV4cGVjdGVkIFZhbHVlRXJyb3Igb3Igc3VicHJvY2Vzcy5TdWJwcm9jZXNzRXJyb3IiKQogCiAgICAgZGVmIHRlc3RfdW5kZWNvZGFibGVfZW52KHNlbGYpOgogICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiAoKCd0ZXN0JywgJ2FiY1x1RENGRicpLCAoJ3Rlc3RcdURDRkYnLCAnNDInKSk6CisgICAgICAgICAgICBlbmNvZGVkX3ZhbHVlID0gdmFsdWUuZW5jb2RlKCJhc2NpaSIsICJzdXJyb2dhdGVlc2NhcGUiKQorCiAgICAgICAgICAgICAjIHRlc3Qgc3RyIHdpdGggc3Vycm9nYXRlcwogICAgICAgICAgICAgc2NyaXB0ID0gImltcG9ydCBvczsgcHJpbnQoYXNjaWkob3MuZ2V0ZW52KCVzKSkpIiAlIHJlcHIoa2V5KQogICAgICAgICAgICAgZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKICAgICAgICAgICAgIGVudltrZXldID0gdmFsdWUKLSAgICAgICAgICAgICMgVXNlIEMgbG9jYWxlIHRvIGdldCBhc2NpaSBmb3IgdGhlIGxvY2FsZSBlbmNvZGluZyB0byBmb3JjZQorICAgICAgICAgICAgIyBVc2UgQyBsb2NhbGUgdG8gZ2V0IEFTQ0lJIGZvciB0aGUgbG9jYWxlIGVuY29kaW5nIHRvIGZvcmNlCiAgICAgICAgICAgICAjIHN1cnJvZ2F0ZS1lc2NhcGluZyBvZiBceEZGIGluIHRoZSBjaGlsZCBwcm9jZXNzOyBvdGhlcndpc2UgaXQgY2FuCiAgICAgICAgICAgICAjIGJlIGRlY29kZWQgYXMtaXMgaWYgdGhlIGRlZmF1bHQgbG9jYWxlIGlzIGxhdGluLTEuCiAgICAgICAgICAgICBlbnZbJ0xDX0FMTCddID0gJ0MnCisgICAgICAgICAgICBpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgiYWl4Iik6CisgICAgICAgICAgICAgICAgIyBPbiBBSVgsIHRoZSBDIGxvY2FsZSB1c2VzIHRoZSBMYXRpbjEgZW5jb2RpbmcKKyAgICAgICAgICAgICAgICBkZWNvZGVkX3ZhbHVlID0gZW5jb2RlZF92YWx1ZS5kZWNvZGUoImxhdGluMSIsICJzdXJyb2dhdGVlc2NhcGUiKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIE9uIG90aGVyIFVOSVhlcywgdGhlIEMgbG9jYWxlIHVzZXMgdGhlIEFTQ0lJIGVuY29kaW5nCisgICAgICAgICAgICAgICAgZGVjb2RlZF92YWx1ZSA9IHZhbHVlCiAgICAgICAgICAgICBzdGRvdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dCgKICAgICAgICAgICAgICAgICBbc3lzLmV4ZWN1dGFibGUsICItYyIsIHNjcmlwdF0sCiAgICAgICAgICAgICAgICAgZW52PWVudikKICAgICAgICAgICAgIHN0ZG91dCA9IHN0ZG91dC5yc3RyaXAoYidcblxyJykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LmRlY29kZSgnYXNjaWknKSwgYXNjaWkodmFsdWUpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQuZGVjb2RlKCdhc2NpaScpLCBhc2NpaShkZWNvZGVkX3ZhbHVlKSkKIAogICAgICAgICAgICAgIyB0ZXN0IGJ5dGVzCiAgICAgICAgICAgICBrZXkgPSBrZXkuZW5jb2RlKCJhc2NpaSIsICJzdXJyb2dhdGVlc2NhcGUiKQotICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5lbmNvZGUoImFzY2lpIiwgInN1cnJvZ2F0ZWVzY2FwZSIpCiAgICAgICAgICAgICBzY3JpcHQgPSAiaW1wb3J0IG9zOyBwcmludChhc2NpaShvcy5nZXRlbnZiKCVzKSkpIiAlIHJlcHIoa2V5KQogICAgICAgICAgICAgZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKLSAgICAgICAgICAgIGVudltrZXldID0gdmFsdWUKKyAgICAgICAgICAgIGVudltrZXldID0gZW5jb2RlZF92YWx1ZQogICAgICAgICAgICAgc3Rkb3V0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoCiAgICAgICAgICAgICAgICAgW3N5cy5leGVjdXRhYmxlLCAiLWMiLCBzY3JpcHRdLAogICAgICAgICAgICAgICAgIGVudj1lbnYpCiAgICAgICAgICAgICBzdGRvdXQgPSBzdGRvdXQucnN0cmlwKGInXG5ccicpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dC5kZWNvZGUoJ2FzY2lpJyksIGFzY2lpKHZhbHVlKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LmRlY29kZSgnYXNjaWknKSwgYXNjaWkoZW5jb2RlZF92YWx1ZSkpCiAKICAgICBkZWYgdGVzdF9ieXRlc19wcm9ncmFtKHNlbGYpOgogICAgICAgICBhYnNfcHJvZ3JhbSA9IG9zLmZzZW5jb2RlKHN5cy5leGVjdXRhYmxlKQpAQCAtMTgzMywxMCArMTkyNywxMyBAQAogICAgICAgICBvcGVuX2ZkcyA9IHNldChmZHMpCiAgICAgICAgICMgYWRkIGEgYnVuY2ggbW9yZSBmZHMKICAgICAgICAgZm9yIF8gaW4gcmFuZ2UoOSk6Ci0gICAgICAgICAgICBmZCA9IG9zLm9wZW4oIi9kZXYvbnVsbCIsIG9zLk9fUkRPTkxZKQorICAgICAgICAgICAgZmQgPSBvcy5vcGVuKG9zLmRldm51bGwsIG9zLk9fUkRPTkxZKQogICAgICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9zLmNsb3NlLCBmZCkKICAgICAgICAgICAgIG9wZW5fZmRzLmFkZChmZCkKIAorICAgICAgICBmb3IgZmQgaW4gb3Blbl9mZHM6CisgICAgICAgICAgICBvcy5zZXRfaW5oZXJpdGFibGUoZmQsIFRydWUpCisKICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCBmZF9zdGF0dXNdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBjbG9zZV9mZHM9RmFsc2UpCiAgICAgICAgIG91dHB1dCwgaWdub3JlZCA9IHAuY29tbXVuaWNhdGUoKQpAQCAtMTg2Nyw2ICsxOTY0LDg2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgIlNvbWUgZmRzIG5vdCBpbiBwYXNzX2ZkcyB3ZXJlIGxlZnQgb3BlbiIpCiAgICAgICAgIHNlbGYuYXNzZXJ0SW4oMSwgcmVtYWluaW5nX2ZkcywgIlN1YnByb2Nlc3MgZmFpbGVkIikKIAorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgiZnJlZWJzZCIpIGFuZAorICAgICAgICAgICAgICAgICAgICAgb3Muc3RhdCgiL2RldiIpLnN0X2RldiA9PSBvcy5zdGF0KCIvZGV2L2ZkIikuc3RfZGV2LAorICAgICAgICAgICAgICAgICAgICAgIlJlcXVpcmVzIGZkZXNjZnMgbW91bnRlZCBvbiAvZGV2L2ZkIG9uIEZyZWVCU0QuIikKKyAgICBkZWYgdGVzdF9jbG9zZV9mZHNfd2hlbl9tYXhfZmRfaXNfbG93ZXJlZChzZWxmKToKKyAgICAgICAgIiIiQ29uZmlybSB0aGF0IGlzc3VlMjE2MTggaXMgZml4ZWQgKG1heSBmYWlsIHVuZGVyIHZhbGdyaW5kKS4iIiIKKyAgICAgICAgZmRfc3RhdHVzID0gc3VwcG9ydC5maW5kZmlsZSgiZmRfc3RhdHVzLnB5Iiwgc3ViZGlyPSJzdWJwcm9jZXNzZGF0YSIpCisKKyAgICAgICAgIyBUaGlzIGxhdW5jaGVzIHRoZSBtZWF0IG9mIHRoZSB0ZXN0IGluIGEgY2hpbGQgcHJvY2VzcyB0bworICAgICAgICAjIGF2b2lkIG1lc3Npbmcgd2l0aCB0aGUgbGFyZ2VyIHVuaXR0ZXN0IHByb2Nlc3NlcyBtYXhpbXVtCisgICAgICAgICMgbnVtYmVyIG9mIGZpbGUgZGVzY3JpcHRvcnMuCisgICAgICAgICMgIFRoaXMgcHJvY2VzcyBsYXVuY2hlczoKKyAgICAgICAgIyAgKy0tPiBQcm9jZXNzIHRoYXQgbG93ZXJzIGl0cyBSTElNSVRfTk9GSUxFIGFmdHIgc2V0dGluZyB1cAorICAgICAgICAjICAgIGEgYnVuY2ggb2YgaGlnaCBvcGVuIGZkcyBhYm92ZSB0aGUgbmV3IGxvd2VyIHJsaW1pdC4KKyAgICAgICAgIyAgICBUaG9zZSBhcmUgcmVwb3J0ZWQgdmlhIHN0ZG91dCBiZWZvcmUgbGF1bmNoaW5nIGEgbmV3CisgICAgICAgICMgICAgcHJvY2VzcyB3aXRoIGNsb3NlX2Zkcz1GYWxzZSB0byBydW4gdGhlIGFjdHVhbCB0ZXN0OgorICAgICAgICAjICAgICstLT4gVGhlIFRFU1Q6IFRoaXMgb25lIGxhdW5jaGVzIGEgZmRfc3RhdHVzLnB5CisgICAgICAgICMgICAgICBzdWJwcm9jZXNzIHdpdGggY2xvc2VfZmRzPVRydWUgc28gd2UgY2FuIGZpbmQgb3V0IGlmCisgICAgICAgICMgICAgICBhbnkgb2YgdGhlIGZkcyBhYm92ZSB0aGUgbG93ZXJlZCBybGltaXQgYXJlIHN0aWxsIG9wZW4uCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgJy1jJywgdGV4dHdyYXAuZGVkZW50KAorICAgICAgICAnJycKKyAgICAgICAgaW1wb3J0IG9zLCByZXNvdXJjZSwgc3VicHJvY2Vzcywgc3lzLCB0ZXh0d3JhcAorICAgICAgICBvcGVuX2ZkcyA9IHNldCgpCisgICAgICAgICMgQWRkIGEgYnVuY2ggbW9yZSBmZHMgdG8gcGFzcyBkb3duLgorICAgICAgICBmb3IgXyBpbiByYW5nZSg0MCk6CisgICAgICAgICAgICBmZCA9IG9zLm9wZW4ob3MuZGV2bnVsbCwgb3MuT19SRE9OTFkpCisgICAgICAgICAgICBvcGVuX2Zkcy5hZGQoZmQpCisKKyAgICAgICAgIyBMZWF2ZSBhIHR3byBwYWlycyBvZiBsb3cgb25lcyBhdmFpbGFibGUgZm9yIHVzZSBieSB0aGUKKyAgICAgICAgIyBpbnRlcm5hbCBjaGlsZCBlcnJvciBwaXBlIGFuZCB0aGUgc3Rkb3V0IHBpcGUuCisgICAgICAgICMgV2UgYWxzbyBsZWF2ZSAxMCBtb3JlIG9wZW4gYXMgc29tZSBQeXRob24gYnVpbGRib3RzIHJ1biBpbnRvCisgICAgICAgICMgInRvbyBtYW55IG9wZW4gZmlsZXMiIGVycm9ycyBkdXJpbmcgdGhlIHRlc3QgaWYgd2UgZG8gbm90LgorICAgICAgICBmb3IgZmQgaW4gc29ydGVkKG9wZW5fZmRzKVs6MTRdOgorICAgICAgICAgICAgb3MuY2xvc2UoZmQpCisgICAgICAgICAgICBvcGVuX2Zkcy5yZW1vdmUoZmQpCisKKyAgICAgICAgZm9yIGZkIGluIG9wZW5fZmRzOgorICAgICAgICAgICAgI3NlbGYuYWRkQ2xlYW51cChvcy5jbG9zZSwgZmQpCisgICAgICAgICAgICBvcy5zZXRfaW5oZXJpdGFibGUoZmQsIFRydWUpCisKKyAgICAgICAgbWF4X2ZkX29wZW4gPSBtYXgob3Blbl9mZHMpCisKKyAgICAgICAgIyBDb21tdW5pY2F0ZSB0aGUgb3Blbl9mZHMgdG8gdGhlIHBhcmVudCB1bml0dGVzdC5UZXN0Q2FzZSBwcm9jZXNzLgorICAgICAgICBwcmludCgnLCcuam9pbihtYXAoc3RyLCBzb3J0ZWQob3Blbl9mZHMpKSkpCisgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQorCisgICAgICAgIHJsaW1fY3VyLCBybGltX21heCA9IHJlc291cmNlLmdldHJsaW1pdChyZXNvdXJjZS5STElNSVRfTk9GSUxFKQorICAgICAgICB0cnk6CisgICAgICAgICAgICAjIDI5IGlzIGxvd2VyIHRoYW4gdGhlIGhpZ2hlc3QgZmRzIHdlIGFyZSBsZWF2aW5nIG9wZW4uCisgICAgICAgICAgICByZXNvdXJjZS5zZXRybGltaXQocmVzb3VyY2UuUkxJTUlUX05PRklMRSwgKDI5LCBybGltX21heCkpCisgICAgICAgICAgICAjIExhdW5jaCBhIG5ldyBQeXRob24gaW50ZXJwcmV0ZXIgd2l0aCBvdXIgbG93IGZkIHJsaW1fY3VyIHRoYXQKKyAgICAgICAgICAgICMgaW5oZXJpdHMgb3BlbiBmZHMgYWJvdmUgdGhhdCBsaW1pdC4gIEl0IHRoZW4gdXNlcyBzdWJwcm9jZXNzCisgICAgICAgICAgICAjIHdpdGggY2xvc2VfZmRzPVRydWUgdG8gZ2V0IGEgcmVwb3J0IG9mIG9wZW4gZmRzIGluIHRoZSBjaGlsZC4KKyAgICAgICAgICAgICMgQW4gZXhwbGljaXQgbGlzdCBvZiBmZHMgdG8gY2hlY2sgaXMgcGFzc2VkIHRvIGZkX3N0YXR1cy5weSBhcworICAgICAgICAgICAgIyBsZXR0aW5nIGZkX3N0YXR1cyByZWx5IG9uIGl0cyBkZWZhdWx0IGxvZ2ljIHdvdWxkIG1pc3MgdGhlCisgICAgICAgICAgICAjIGZkcyBhYm92ZSBybGltX2N1ciBhcyBpdCBub3JtYWxseSBvbmx5IGNoZWNrcyB1cCB0byB0aGF0IGxpbWl0LgorICAgICAgICAgICAgc3VicHJvY2Vzcy5Qb3BlbigKKyAgICAgICAgICAgICAgICBbc3lzLmV4ZWN1dGFibGUsICctYycsCisgICAgICAgICAgICAgICAgIHRleHR3cmFwLmRlZGVudCgiIiIKKyAgICAgICAgICAgICAgICAgICAgIGltcG9ydCBzdWJwcm9jZXNzLCBzeXMKKyAgICAgICAgICAgICAgICAgICAgIHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAlcl0gKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3RyKHgpIGZvciB4IGluIHJhbmdlKHttYXhfZmR9KV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlX2Zkcz1UcnVlKS53YWl0KCkKKyAgICAgICAgICAgICAgICAgICAgICIiIi5mb3JtYXQobWF4X2ZkPW1heF9mZF9vcGVuKzEpKV0sCisgICAgICAgICAgICAgICAgY2xvc2VfZmRzPUZhbHNlKS53YWl0KCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHJlc291cmNlLnNldHJsaW1pdChyZXNvdXJjZS5STElNSVRfTk9GSUxFLCAocmxpbV9jdXIsIHJsaW1fbWF4KSkKKyAgICAgICAgJycnICUgZmRfc3RhdHVzKV0sIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpCisKKyAgICAgICAgb3V0cHV0LCB1bnVzZWRfc3RkZXJyID0gcC5jb21tdW5pY2F0ZSgpCisgICAgICAgIG91dHB1dF9saW5lcyA9IG91dHB1dC5zcGxpdGxpbmVzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ob3V0cHV0X2xpbmVzKSwgMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBtc2c9ImV4cGVjdGVkIGV4YWN0bHkgdHdvIGxpbmVzIG9mIG91dHB1dDpcbiVyIiAlIG91dHB1dCkKKyAgICAgICAgb3BlbmVkX2ZkcyA9IHNldChtYXAoaW50LCBvdXRwdXRfbGluZXNbMF0uc3RyaXAoKS5zcGxpdChiJywnKSkpCisgICAgICAgIHJlbWFpbmluZ19mZHMgPSBzZXQobWFwKGludCwgb3V0cHV0X2xpbmVzWzFdLnN0cmlwKCkuc3BsaXQoYicsJykpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocmVtYWluaW5nX2ZkcyAmIG9wZW5lZF9mZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgbXNnPSJTb21lIGZkcyB3ZXJlIGxlZnQgb3Blbi4iKQorCisKICAgICAjIE1hYyBPUyBYIFRpZ2VyICgxMC40KSBoYXMgYSBrZXJuZWwgYnVnOiBzb21ldGltZXMsIHRoZSBmaWxlCiAgICAgIyBkZXNjcmlwdG9yIG9mIGEgcGlwZSBjbG9zZWQgaW4gdGhlIHBhcmVudCBwcm9jZXNzIGlzIHZhbGlkIGluIHRoZQogICAgICMgY2hpbGQgcHJvY2VzcyBhY2NvcmRpbmcgdG8gZnN0YXQoKSwgYnV0IHRoZSBtb2RlIG9mIHRoZSBmaWxlCkBAIC0xODgxLDYgKzIwNTgsOCBAQAogICAgICAgICAgICAgZmRzID0gb3MucGlwZSgpCiAgICAgICAgICAgICBzZWxmLmFkZENsZWFudXAob3MuY2xvc2UsIGZkc1swXSkKICAgICAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy5jbG9zZSwgZmRzWzFdKQorICAgICAgICAgICAgb3Muc2V0X2luaGVyaXRhYmxlKGZkc1swXSwgVHJ1ZSkKKyAgICAgICAgICAgIG9zLnNldF9pbmhlcml0YWJsZShmZHNbMV0sIFRydWUpCiAgICAgICAgICAgICBvcGVuX2Zkcy51cGRhdGUoZmRzKQogCiAgICAgICAgIGZvciBmZCBpbiBvcGVuX2ZkczoKQEAgLTE5MDMsNiArMjA4MiwzMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2VfZmRzPUZhbHNlLCBwYXNzX2Zkcz0oZmQsICkpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignb3ZlcnJpZGluZyBjbG9zZV9mZHMnLCBzdHIoY29udGV4dC53YXJuaW5nKSkKIAorICAgIGRlZiB0ZXN0X3Bhc3NfZmRzX2luaGVyaXRhYmxlKHNlbGYpOgorICAgICAgICBzY3JpcHQgPSBzdXBwb3J0LmZpbmRmaWxlKCJmZF9zdGF0dXMucHkiLCBzdWJkaXI9InN1YnByb2Nlc3NkYXRhIikKKworICAgICAgICBpbmhlcml0YWJsZSwgbm9uX2luaGVyaXRhYmxlID0gb3MucGlwZSgpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy5jbG9zZSwgaW5oZXJpdGFibGUpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy5jbG9zZSwgbm9uX2luaGVyaXRhYmxlKQorICAgICAgICBvcy5zZXRfaW5oZXJpdGFibGUoaW5oZXJpdGFibGUsIFRydWUpCisgICAgICAgIG9zLnNldF9pbmhlcml0YWJsZShub25faW5oZXJpdGFibGUsIEZhbHNlKQorICAgICAgICBwYXNzX2ZkcyA9IChpbmhlcml0YWJsZSwgbm9uX2luaGVyaXRhYmxlKQorICAgICAgICBhcmdzID0gW3N5cy5leGVjdXRhYmxlLCBzY3JpcHRdCisgICAgICAgIGFyZ3MgKz0gbGlzdChtYXAoc3RyLCBwYXNzX2ZkcykpCisKKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oYXJncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgY2xvc2VfZmRzPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3NfZmRzPXBhc3NfZmRzKQorICAgICAgICBvdXRwdXQsIGlnbm9yZWQgPSBwLmNvbW11bmljYXRlKCkKKyAgICAgICAgZmRzID0gc2V0KG1hcChpbnQsIG91dHB1dC5zcGxpdChiJywnKSkpCisKKyAgICAgICAgIyB0aGUgaW5oZXJpdGFibGUgZmlsZSBkZXNjcmlwdG9yIG11c3QgYmUgaW5oZXJpdGVkLCBzbyBpdHMgaW5oZXJpdGFibGUKKyAgICAgICAgIyBmbGFnIG11c3QgYmUgc2V0IGluIHRoZSBjaGlsZCBwcm9jZXNzIGFmdGVyIGZvcmsoKSBhbmQgYmVmb3JlIGV4ZWMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZkcywgc2V0KHBhc3NfZmRzKSwgIm91dHB1dD0lYSIgJSBvdXRwdXQpCisKKyAgICAgICAgIyBpbmhlcml0YWJsZSBmbGFnIG11c3Qgbm90IGJlIGNoYW5nZWQgaW4gdGhlIHBhcmVudCBwcm9jZXNzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MuZ2V0X2luaGVyaXRhYmxlKGluaGVyaXRhYmxlKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5nZXRfaW5oZXJpdGFibGUobm9uX2luaGVyaXRhYmxlKSwgRmFsc2UpCisKICAgICBkZWYgdGVzdF9zdGRvdXRfc3RkaW5fYXJlX3NpbmdsZV9pbm91dF9mZChzZWxmKToKICAgICAgICAgd2l0aCBpby5vcGVuKG9zLmRldm51bGwsICJyKyIpIGFzIGlub3V0OgogICAgICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLCAiaW1wb3J0IHN5czsgc3lzLmV4aXQoMCkiXSwKQEAgLTE5OTAsNyArMjE5NSw3IEBACiAgICAgICAgICMgbGV0IHNvbWUgdGltZSBmb3IgdGhlIHByb2Nlc3MgdG8gZXhpdCwgYW5kIGNyZWF0ZSBhIG5ldyBQb3BlbjogdGhpcwogICAgICAgICAjIHNob3VsZCB0cmlnZ2VyIHRoZSB3YWl0KCkgb2YgcAogICAgICAgICB0aW1lLnNsZWVwKDAuMikKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhFbnZpcm9ubWVudEVycm9yKSBhcyBjOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpIGFzIGM6CiAgICAgICAgICAgICB3aXRoIHN1YnByb2Nlc3MuUG9wZW4oWydub25leGlzdGluZ19pX2hvcGUnXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpIGFzIHByb2M6CkBAIC0yMDE2LDYgKzIyMjEsMzkgQEAKIAogICAgICAgICBzZWxmLmFzc2VydE5vdEluKGZkLCByZW1haW5pbmdfZmRzKQogCisgICAgQHN1cHBvcnQuY3B5dGhvbl9vbmx5CisgICAgZGVmIHRlc3RfZm9ya19leGVjKHNlbGYpOgorICAgICAgICAjIElzc3VlICMyMjI5MDogZm9ya19leGVjKCkgbXVzdCBub3QgY3Jhc2ggb24gbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZQorICAgICAgICAjIG9yIG90aGVyIGVycm9ycworICAgICAgICBpbXBvcnQgX3Bvc2l4c3VicHJvY2VzcworICAgICAgICBnY19lbmFibGVkID0gZ2MuaXNlbmFibGVkKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyBVc2UgYSBwcmVleGVjIGZ1bmN0aW9uIGFuZCBlbmFibGUgdGhlIGdhcmJhZ2UgY29sbGVjdG9yCisgICAgICAgICAgICAjIHRvIGZvcmNlIGZvcmtfZXhlYygpIHRvIHJlLWVuYWJsZSB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IKKyAgICAgICAgICAgICMgb24gZXJyb3IuCisgICAgICAgICAgICBmdW5jID0gbGFtYmRhOiBOb25lCisgICAgICAgICAgICBnYy5lbmFibGUoKQorCisgICAgICAgICAgICBleGVjdXRhYmxlX2xpc3QgPSAiZXhlYyIgICAjIGVycm9yOiBtdXN0IGJlIGEgc2VxdWVuY2UKKworICAgICAgICAgICAgZm9yIGFyZ3MsIGV4ZV9saXN0LCBjd2QsIGVudl9saXN0IGluICgKKyAgICAgICAgICAgICAgICAoMTIzLCAgICAgIFtiImV4ZSJdLCBOb25lLCBbYiJlbnYiXSksCisgICAgICAgICAgICAgICAgKFtiImFyZyJdLCAxMjMsICAgICAgTm9uZSwgW2IiZW52Il0pLAorICAgICAgICAgICAgICAgIChbYiJhcmciXSwgW2IiZXhlIl0sIDEyMywgIFtiImVudiJdKSwKKyAgICAgICAgICAgICAgICAoW2IiYXJnIl0sIFtiImV4ZSJdLCBOb25lLCAxMjMpLAorICAgICAgICAgICAgKToKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICAgICAgICAgIF9wb3NpeHN1YnByb2Nlc3MuZm9ya19leGVjKAorICAgICAgICAgICAgICAgICAgICAgICAgYXJncywgZXhlX2xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICBUcnVlLCBbXSwgY3dkLCBlbnZfbGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIC0xLCAtMSwgLTEsIC0xLAorICAgICAgICAgICAgICAgICAgICAgICAgMSwgMiwgMywgNCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFRydWUsIFRydWUsIGZ1bmMpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBpZiBub3QgZ2NfZW5hYmxlZDoKKyAgICAgICAgICAgICAgICBnYy5kaXNhYmxlKCkKKworCiAKIEB1bml0dGVzdC5za2lwVW5sZXNzKG1zd2luZG93cywgIldpbmRvd3Mgc3BlY2lmaWMgdGVzdHMiKQogY2xhc3MgV2luMzJQcm9jZXNzVGVzdENhc2UoQmFzZVRlc3RDYXNlKToKQEAgLTIxNzUsMTUgKzI0MTMsMTYgQEAKICAgICAgICAgICAgICAgICBvcy5ybWRpcihkaXIpCiAKIAotQHVuaXR0ZXN0LnNraXBVbmxlc3MoZ2V0YXR0cihzdWJwcm9jZXNzLCAnX2hhc19wb2xsJywgRmFsc2UpLAotICAgICAgICAgICAgICAgICAgICAgInBvbGwgc3lzdGVtIGNhbGwgbm90IHN1cHBvcnRlZCIpCitAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNlbGVjdG9ycywgJ1BvbGxTZWxlY3RvcicpLAorICAgICAgICAgICAgICAgICAgICAgIlRlc3QgbmVlZHMgc2VsZWN0b3JzLlBvbGxTZWxlY3RvciIpCiBjbGFzcyBQcm9jZXNzVGVzdENhc2VOb1BvbGwoUHJvY2Vzc1Rlc3RDYXNlKToKICAgICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgIHN1YnByb2Nlc3MuX2hhc19wb2xsID0gRmFsc2UKKyAgICAgICAgc2VsZi5vcmlnX3NlbGVjdG9yID0gc3VicHJvY2Vzcy5fUG9wZW5TZWxlY3RvcgorICAgICAgICBzdWJwcm9jZXNzLl9Qb3BlblNlbGVjdG9yID0gc2VsZWN0b3JzLlNlbGVjdFNlbGVjdG9yCiAgICAgICAgIFByb2Nlc3NUZXN0Q2FzZS5zZXRVcChzZWxmKQogCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgotICAgICAgICBzdWJwcm9jZXNzLl9oYXNfcG9sbCA9IFRydWUKKyAgICAgICAgc3VicHJvY2Vzcy5fUG9wZW5TZWxlY3RvciA9IHNlbGYub3JpZ19zZWxlY3RvcgogICAgICAgICBQcm9jZXNzVGVzdENhc2UudGVhckRvd24oc2VsZikKIAogCkBAIC0yMjExLDcgKzI0NTAsNyBAQAogCiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBzdXBlcigpLnNldFVwKCkKLSAgICAgICAgZiwgZm5hbWUgPSBta3N0ZW1wKCIucHkiLCAidGUgc3QiKQorICAgICAgICBmLCBmbmFtZSA9IHRlbXBmaWxlLm1rc3RlbXAoIi5weSIsICJ0ZSBzdCIpCiAgICAgICAgIHNlbGYuZm5hbWUgPSBmbmFtZS5sb3dlciAoKQogICAgICAgICBvcy53cml0ZShmLCBiImltcG9ydCBzeXM7IgogICAgICAgICAgICAgICAgICAgICBiInN5cy5zdGRvdXQud3JpdGUoJyVkICVzJyAlIChsZW4oc3lzLmFyZ3YpLCBbYS5sb3dlciAoKSBmb3IgYSBpbiBzeXMuYXJndl0pKSIKQEAgLTIyODcsNiArMjUyNiwyMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpIGFzIHByb2M6CiAgICAgICAgICAgICAgICAgcGFzcwogCisgICAgZGVmIHRlc3RfYnJva2VuX3BpcGVfY2xlYW51cChzZWxmKToKKyAgICAgICAgIiIiQnJva2VuIHBpcGUgZXJyb3Igc2hvdWxkIG5vdCBwcmV2ZW50IHdhaXQoKSAoSXNzdWUgMjE2MTkpIiIiCisgICAgICAgIHByb2MgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgJy1jJywgJ3Bhc3MnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkaW49c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZzaXplPXN1cHBvcnQuUElQRV9NQVhfU0laRSoyKQorICAgICAgICBwcm9jID0gcHJvYy5fX2VudGVyX18oKQorICAgICAgICAjIFByZXBhcmUgdG8gc2VuZCBlbm91Z2ggZGF0YSB0byBvdmVyZmxvdyBhbnkgT1MgcGlwZSBidWZmZXJpbmcgYW5kCisgICAgICAgICMgZ3VhcmFudGVlIGEgYnJva2VuIHBpcGUgZXJyb3IuIERhdGEgaXMgaGVsZCBpbiBCdWZmZXJlZFdyaXRlcgorICAgICAgICAjIGJ1ZmZlciB1bnRpbCBjbG9zZWQuCisgICAgICAgIHByb2Muc3RkaW4ud3JpdGUoYid4JyAqIHN1cHBvcnQuUElQRV9NQVhfU0laRSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocHJvYy5yZXR1cm5jb2RlKQorICAgICAgICAjIEVQSVBFIGV4cGVjdGVkIHVuZGVyIFBPU0lYOyBFSU5WQUwgdW5kZXIgV2luZG93cworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBwcm9jLl9fZXhpdF9fLCBOb25lLCBOb25lLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb2MucmV0dXJuY29kZSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHByb2Muc3RkaW4uY2xvc2VkKQorCiAKIGRlZiB0ZXN0X21haW4oKToKICAgICB1bml0X3Rlc3RzID0gKFByb2Nlc3NUZXN0Q2FzZSwKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc3VuYXUucHkgYi9MaWIvdGVzdC90ZXN0X3N1bmF1LnB5CmluZGV4IDE2NTUzMTcuLjBmNDEzNGUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc3VuYXUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zdW5hdS5weQpAQCAtMSw2ICsxLDcgQEAKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBURVNURk4KIGltcG9ydCB1bml0dGVzdAogZnJvbSB0ZXN0IGltcG9ydCBhdWRpb3Rlc3RzCitmcm9tIGF1ZGlvb3AgaW1wb3J0IGJ5dGVzd2FwCiBpbXBvcnQgc3lzCiBpbXBvcnQgc3VuYXUKIApAQCAtNDYsNiArNDcsMzEgQEAKICAgICAgICIiIikKIAogCitjbGFzcyBTdW5hdVBDTTI0VGVzdChTdW5hdVRlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBzbmRmaWxlbmFtZSA9ICdwbHVjay1wY20yNC5hdScKKyAgICBzbmRmaWxlbmZyYW1lcyA9IDMzMDcKKyAgICBuY2hhbm5lbHMgPSAyCisgICAgc2FtcHdpZHRoID0gMworICAgIGZyYW1lcmF0ZSA9IDExMDI1CisgICAgbmZyYW1lcyA9IDQ4CisgICAgY29tcHR5cGUgPSAnTk9ORScKKyAgICBjb21wbmFtZSA9ICdub3QgY29tcHJlc3NlZCcKKyAgICBmcmFtZXMgPSBieXRlcy5mcm9taGV4KCIiIlwKKyAgICAgIDAyMkQ2NUZGRUI5RCA0QjVBMEYwMEZBNTQgMzExM0MzMDRFRTJCIDgwRENENjA4NDMwMyBcCisgICAgICBDQkRFQzAwNkIyNjEgNDhBOTk4MDNGMkY4IEJGRTgyNDAxQjA3RCAwMzZCRkJGRTdCNUQgXAorICAgICAgQjg1NzU2RkEzRUM5IEI0QjA1NUYzNTAyQiAyOTk4MzBFQkNCNjIgMUE1Q0E3RTZEOTlBIFwKKyAgICAgIEVERkEzRUU0OTFCRCBDNjI1RUJFMjc4ODQgMEUwNUE5RTBCNkNGIEVGMjkyOUUwMjkyMiBcCisgICAgICA1NzU4RDhFMjcwNjcgRkIzNTU3RTgzRTE2IDEzNzdCRkVGODQwMiBEODJDNUJGNzI3MkEgXAorICAgICAgOTc4RjE2RkI3NzQ1IEY1Rjg2NUZDMTAxMyAwODY2MzVGQjlDNEUgREYzMEZDRkI0MEVFIFwKKyAgICAgIDExN0ZFMEZBMzQzOCAzRUU2QjhGQjVBQzMgQkM3N0EzRkNCMkY0IDY2RDZEQUZGNUYzMiBcCisgICAgICBDRjEzQjkwNDEyNzUgNDMxRDY5MDk3QThDIEMxQkI2MDBFQzc0RSA1MTIwQjkxMkEyQkEgXAorICAgICAgRUVERjY0MTc1NEMwIDgyMDcwMDE2NjRCNyA3RkZGRkYxNDQ1M0YgODAwMDAwMTI5NEU2IFwKKyAgICAgIDQ5OUMxQjBFQjNCMiA1MkI3M0UwREJDQTAgRUZCMkIyMEY1RkQ4IENFM0NEQjBGQkUxMiBcCisgICAgICBFNEI0OUMwQ0VBMkQgNjM0NEE4MEE1QTdDIDA4QzhGRTBBMUZGRSAyQkI5ODYwQjBBMEUgXAorICAgICAgNTE0ODZGMEU0NEUxIDhCQ0M2NDExM0IwNSBCNkY0RUMwRUVCMzYgNDQxMzE3MEE1QjQ4IFwKKyAgICAgICIiIikKKworCiBjbGFzcyBTdW5hdVBDTTMyVGVzdChTdW5hdVRlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBzbmRmaWxlbmFtZSA9ICdwbHVjay1wY20zMi5hdScKICAgICBzbmRmaWxlbmZyYW1lcyA9IDMzMDcKQEAgLTg5LDcgKzExNSw3IEBACiAgICAgICBFNTA0MENCQyA2MTdDMEEzQyAwOEJDMEEzQyAyQzdDMEIzQyA1MTdDMEUzQyA4QTg0MTBGQyBCNjg0MEVCQyA0NTdDMEEzQyBcCiAgICAgICAiIiIpCiAgICAgaWYgc3lzLmJ5dGVvcmRlciAhPSAnYmlnJzoKLSAgICAgICAgZnJhbWVzID0gYXVkaW90ZXN0cy5ieXRlc3dhcDIoZnJhbWVzKQorICAgICAgICBmcmFtZXMgPSBieXRlc3dhcChmcmFtZXMsIDIpCiAKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc3VuZHJ5LnB5IGIvTGliL3Rlc3QvdGVzdF9zdW5kcnkucHkKaW5kZXggODgwOGM0Ny4uZTk5Y2E5ZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zdW5kcnkucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zdW5kcnkucHkKQEAgLTEsMTkgKzEsMjYgQEAKICIiIkRvIGEgbWluaW1hbCB0ZXN0IG9mIGFsbCB0aGUgbW9kdWxlcyB0aGF0IGFyZW4ndCBvdGhlcndpc2UgdGVzdGVkLiIiIgotCi1mcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKK2ltcG9ydCBpbXBvcnRsaWIKIGltcG9ydCBzeXMKK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogaW1wb3J0IHVuaXR0ZXN0CiAKIGNsYXNzIFRlc3RVbnRlc3RlZE1vZHVsZXModW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGRlZiB0ZXN0X2F0X2xlYXN0X2ltcG9ydF91bnRlc3RlZF9tb2R1bGVzKHNlbGYpOgorICAgIGRlZiB0ZXN0X3VudGVzdGVkX21vZHVsZXNfY2FuX2JlX2ltcG9ydGVkKHNlbGYpOgorICAgICAgICB1bnRlc3RlZCA9ICgnYmRiJywgJ2VuY29kaW5ncycsICdmb3JtYXR0ZXInLAorICAgICAgICAgICAgICAgICAgICAnbnR1cmwycGF0aCcsICd0YWJuYW5ueScpCiAgICAgICAgIHdpdGggc3VwcG9ydC5jaGVja193YXJuaW5ncyhxdWlldD1UcnVlKToKLSAgICAgICAgICAgIGltcG9ydCBiZGIKLSAgICAgICAgICAgIGltcG9ydCBjZ2l0YgorICAgICAgICAgICAgZm9yIG5hbWUgaW4gdW50ZXN0ZWQ6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBzdXBwb3J0LmltcG9ydF9tb2R1bGUoJ3Rlc3QudGVzdF97fScuZm9ybWF0KG5hbWUpKQorICAgICAgICAgICAgICAgIGV4Y2VwdCB1bml0dGVzdC5Ta2lwVGVzdDoKKyAgICAgICAgICAgICAgICAgICAgaW1wb3J0bGliLmltcG9ydF9tb2R1bGUobmFtZSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ3t9IGhhcyB0ZXN0cyBldmVuIHRob3VnaCB0ZXN0X3N1bmRyeSBjbGFpbXMgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ290aGVyd2lzZScuZm9ybWF0KG5hbWUpKQogCiAgICAgICAgICAgICBpbXBvcnQgZGlzdHV0aWxzLmJjcHBjb21waWxlcgogICAgICAgICAgICAgaW1wb3J0IGRpc3R1dGlscy5jY29tcGlsZXIKICAgICAgICAgICAgIGltcG9ydCBkaXN0dXRpbHMuY3lnd2luY2NvbXBpbGVyCi0gICAgICAgICAgICBpbXBvcnQgZGlzdHV0aWxzLmVteGNjb21waWxlcgogICAgICAgICAgICAgaW1wb3J0IGRpc3R1dGlscy5maWxlbGlzdAogICAgICAgICAgICAgaWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ3dpbicpOgogICAgICAgICAgICAgICAgIGltcG9ydCBkaXN0dXRpbHMubXN2Y2NvbXBpbGVyCkBAIC0zOSwyNiArNDYsMTQgQEAKICAgICAgICAgICAgIGltcG9ydCBkaXN0dXRpbHMuY29tbWFuZC5zZGlzdAogICAgICAgICAgICAgaW1wb3J0IGRpc3R1dGlscy5jb21tYW5kLnVwbG9hZAogCi0gICAgICAgICAgICBpbXBvcnQgZW5jb2RpbmdzCi0gICAgICAgICAgICBpbXBvcnQgZm9ybWF0dGVyCiAgICAgICAgICAgICBpbXBvcnQgaHRtbC5lbnRpdGllcwotICAgICAgICAgICAgaW1wb3J0IGtleXdvcmQKLSAgICAgICAgICAgIGltcG9ydCBtYWlsY2FwCi0gICAgICAgICAgICBpbXBvcnQgbnR1cmwycGF0aAotICAgICAgICAgICAgaW1wb3J0IG9zMmVteHBhdGgKLSAgICAgICAgICAgIGltcG9ydCBwc3RhdHMKLSAgICAgICAgICAgIGltcG9ydCBweV9jb21waWxlCi0gICAgICAgICAgICBpbXBvcnQgc25kaGRyCi0gICAgICAgICAgICBpbXBvcnQgdGFibmFubnkKKwogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGltcG9ydCB0dHkgICAgICMgbm90IGF2YWlsYWJsZSBvbiBXaW5kb3dzCisgICAgICAgICAgICAgICAgaW1wb3J0IHR0eSAgIyBOb3QgYXZhaWxhYmxlIG9uIFdpbmRvd3MKICAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICAgICAgICAgICAgICBpZiBzdXBwb3J0LnZlcmJvc2U6CiAgICAgICAgICAgICAgICAgICAgIHByaW50KCJza2lwcGluZyB0dHkiKQogCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChUZXN0VW50ZXN0ZWRNb2R1bGVzKQotCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3N1cGVyLnB5IGIvTGliL3Rlc3QvdGVzdF9zdXBlci5weQppbmRleCAxZTI3MmVlLi4zN2ZjMmQ5IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3N1cGVyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc3VwZXIucHkKQEAgLTQ0LDYgKzQ0LDExIEBACiAKIGNsYXNzIFRlc3RTdXBlcih1bml0dGVzdC5UZXN0Q2FzZSk6CiAKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgICMgVGhpcyBmaXhlcyB0aGUgZGFtYWdlIHRoYXQgdGVzdF92YXJpb3VzX19fY2xhc3NfX19wYXRob2xvZ2llcyBkb2VzLgorICAgICAgICBub25sb2NhbCBfX2NsYXNzX18KKyAgICAgICAgX19jbGFzc19fID0gVGVzdFN1cGVyCisKICAgICBkZWYgdGVzdF9iYXNpY3Nfd29ya2luZyhzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChEKCkuZigpLCAnQUJDRCcpCiAKQEAgLTgxLDggKzg2LDcgQEAKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEUoKS5mKCksICdBRScpCiAKLSAgICBAdW5pdHRlc3QuZXhwZWN0ZWRGYWlsdXJlCi0gICAgZGVmIHRlc3RfX19jbGFzc19fX3NldChzZWxmKToKKyAgICBkZWYgdGVzdF92YXJpb3VzX19fY2xhc3NfX19wYXRob2xvZ2llcyhzZWxmKToKICAgICAgICAgIyBTZWUgaXNzdWUgIzEyMzcwCiAgICAgICAgIGNsYXNzIFgoQSk6CiAgICAgICAgICAgICBkZWYgZihzZWxmKToKQEAgLTkxLDYgKzk1LDMxIEBACiAgICAgICAgIHggPSBYKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LmYoKSwgJ0EnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguX19jbGFzc19fLCA0MTMpCisgICAgICAgIGNsYXNzIFg6CisgICAgICAgICAgICB4ID0gX19jbGFzc19fCisgICAgICAgICAgICBkZWYgZigpOgorICAgICAgICAgICAgICAgIF9fY2xhc3NfXworICAgICAgICBzZWxmLmFzc2VydElzKFgueCwgdHlwZShzZWxmKSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhOYW1lRXJyb3IpIGFzIGU6CisgICAgICAgICAgICBleGVjKCIiImNsYXNzIFg6CisgICAgICAgICAgICAgICAgX19jbGFzc19fCisgICAgICAgICAgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgICAgICAgICAgX19jbGFzc19fIiIiLCBnbG9iYWxzKCksIHt9KQorICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUoZS5leGNlcHRpb24pLCBOYW1lRXJyb3IpICMgTm90IFVuYm91bmRMb2NhbEVycm9yCisgICAgICAgIGNsYXNzIFg6CisgICAgICAgICAgICBnbG9iYWwgX19jbGFzc19fCisgICAgICAgICAgICBfX2NsYXNzX18gPSA0MgorICAgICAgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgICAgICBfX2NsYXNzX18KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnbG9iYWxzKClbIl9fY2xhc3NfXyJdLCA0MikKKyAgICAgICAgZGVsIGdsb2JhbHMoKVsiX19jbGFzc19fIl0KKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigiX19jbGFzc19fIiwgWC5fX2RpY3RfXykKKyAgICAgICAgY2xhc3MgWDoKKyAgICAgICAgICAgIG5vbmxvY2FsIF9fY2xhc3NfXworICAgICAgICAgICAgX19jbGFzc19fID0gNDIKKyAgICAgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICAgICAgX19jbGFzc19fCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX19jbGFzc19fLCA0MikKIAogICAgIGRlZiB0ZXN0X19fY2xhc3NfX19pbnN0YW5jZW1ldGhvZChzZWxmKToKICAgICAgICAgIyBTZWUgaXNzdWUgIzE0ODU3CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3N1cHBvcnQucHkgYi9MaWIvdGVzdC90ZXN0X3N1cHBvcnQucHkKaW5kZXggY2I2Zjg0ZS4uMDNjZTlkMSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zdXBwb3J0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc3VwcG9ydC5weQpAQCAtNjksNiArNjksNyBAQAogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgZGVsIHN5cy5wYXRoWzBdCiAgICAgICAgICAgICBzdXBwb3J0LnVubGluayhtb2RfZmlsZW5hbWUpCisgICAgICAgICAgICBzdXBwb3J0LnJtdHJlZSgnX19weWNhY2hlX18nKQogCiAgICAgZGVmIHRlc3RfSE9TVChzZWxmKToKICAgICAgICAgcyA9IHNvY2tldC5zb2NrZXQoKQpAQCAtMzA0LDYgKzMwNSw3IEBACiAgICAgIyBhcmdzX2Zyb21faW50ZXJwcmV0ZXJfZmxhZ3MKICAgICAjIGNhbl9zeW1saW5rCiAgICAgIyBza2lwX3VubGVzc19zeW1saW5rCisgICAgIyBTdXBwcmVzc0NyYXNoUmVwb3J0CiAKIAogZGVmIHRlc3RfbWFpbigpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zeW50YXgucHkgYi9MaWIvdGVzdC90ZXN0X3N5bnRheC5weQppbmRleCA1OTI2YjY5Li5hOWQzNjI4IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3N5bnRheC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3N5bnRheC5weQpAQCAtMzMsNyArMzMsNyBAQAogCiA+Pj4gTm9uZSA9IDEKIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKLVN5bnRheEVycm9yOiBhc3NpZ25tZW50IHRvIGtleXdvcmQKK1N5bnRheEVycm9yOiBjYW4ndCBhc3NpZ24gdG8ga2V5d29yZAogCiBJdCdzIGEgc3ludGF4IGVycm9yIHRvIGFzc2lnbiB0byB0aGUgZW1wdHkgdHVwbGUuICBXaHkgaXNuJ3QgaXQgYW4KIGVycm9yIHRvIGFzc2lnbiB0byB0aGUgZW1wdHkgbGlzdD8gIEl0IHdpbGwgYWx3YXlzIHJhaXNlIHNvbWUgZXJyb3IgYXQKQEAgLTIzMyw3ICsyMzMsNyBAQAogU3ludGF4RXJyb3I6IGNhbid0IGFzc2lnbiB0byBnZW5lcmF0b3IgZXhwcmVzc2lvbgogPj4+IE5vbmUgKz0gMQogVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgotU3ludGF4RXJyb3I6IGFzc2lnbm1lbnQgdG8ga2V5d29yZAorU3ludGF4RXJyb3I6IGNhbid0IGFzc2lnbiB0byBrZXl3b3JkCiA+Pj4gZigpICs9IDEKIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKIFN5bnRheEVycm9yOiBjYW4ndCBhc3NpZ24gdG8gZnVuY3Rpb24gY2FsbApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zeXMucHkgYi9MaWIvdGVzdC90ZXN0X3N5cy5weQppbmRleCBmNzY4ZTliLi5iN2RkYmU5IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3N5cy5weQorKysgYi9MaWIvdGVzdC90ZXN0X3N5cy5weQpAQCAtNyw2ICs3LDkgQEAKIGltcG9ydCB3YXJuaW5ncwogaW1wb3J0IG9wZXJhdG9yCiBpbXBvcnQgY29kZWNzCitpbXBvcnQgZ2MKK2ltcG9ydCBzeXNjb25maWcKK2ltcG9ydCBwbGF0Zm9ybQogCiAjIGNvdW50IHRoZSBudW1iZXIgb2YgdGVzdCBydW5zLCB1c2VkIHRvIGNyZWF0ZSB1bmlxdWUKICMgc3RyaW5ncyB0byBpbnRlcm4gaW4gdGVzdF9pbnRlcm4oKQpAQCAtMTk0LDkgKzE5NywxMCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN5cy5nZXRyZWN1cnNpb25saW1pdCgpLCAxMDAwMCkKICAgICAgICAgc3lzLnNldHJlY3Vyc2lvbmxpbWl0KG9sZGxpbWl0KQogCi0gICAgQHVuaXR0ZXN0LnNraXBJZihoYXNhdHRyKHN5cywgJ2dldHRyYWNlJykgYW5kIHN5cy5nZXR0cmFjZSgpLAotICAgICAgICAgICAgICAgICAgICAgJ2ZhdGFsIGVycm9yIGlmIHJ1biB3aXRoIGEgdHJhY2UgZnVuY3Rpb24nKQogICAgIGRlZiB0ZXN0X3JlY3Vyc2lvbmxpbWl0X3JlY292ZXJ5KHNlbGYpOgorICAgICAgICBpZiBoYXNhdHRyKHN5cywgJ2dldHRyYWNlJykgYW5kIHN5cy5nZXR0cmFjZSgpOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgnZmF0YWwgZXJyb3IgaWYgcnVuIHdpdGggYSB0cmFjZSBmdW5jdGlvbicpCisKICAgICAgICAgIyBOT1RFOiB0aGlzIHRlc3QgaXMgc2xpZ2h0bHkgZnJhZ2lsZSBpbiB0aGF0IGl0IGRlcGVuZHMgb24gdGhlIGN1cnJlbnQKICAgICAgICAgIyByZWN1cnNpb24gY291bnQgd2hlbiBleGVjdXRpbmcgdGhlIHRlc3QgYmVpbmcgbG93IGVub3VnaCBzbyBhcyB0bwogICAgICAgICAjIHRyaWdnZXIgdGhlIHJlY3Vyc2lvbiByZWNvdmVyeSBkZXRlY3Rpb24gaW4gdGhlIF9QeV9NYWtlRW5kUmVjQ2hlY2sKQEAgLTIyNyw3ICsyMzEsNyBAQAogCiAgICAgICAgICAgICBzeXMuc2V0cmVjdXJzaW9ubGltaXQoJWQpCiAgICAgICAgICAgICBmKCkiIiIpCi0gICAgICAgIHdpdGggdGVzdC5zdXBwb3J0LnN1cHByZXNzX2NyYXNoX3BvcHVwKCk6CisgICAgICAgIHdpdGggdGVzdC5zdXBwb3J0LlN1cHByZXNzQ3Jhc2hSZXBvcnQoKToKICAgICAgICAgICAgIGZvciBpIGluICg1MCwgMTAwMCk6CiAgICAgICAgICAgICAgICAgc3ViID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICctYycsIGNvZGUgJSBpXSwKICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKQEAgLTQwOCw3ICs0MTIsNyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoc3lzLmludF9pbmZvLnNpemVvZl9kaWdpdCksIGludCkKICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN5cy5oZXh2ZXJzaW9uLCBpbnQpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc3lzLmhhc2hfaW5mbyksIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHN5cy5oYXNoX2luZm8pLCA5KQogICAgICAgICBzZWxmLmFzc2VydExlc3Moc3lzLmhhc2hfaW5mby5tb2R1bHVzLCAyKipzeXMuaGFzaF9pbmZvLndpZHRoKQogICAgICAgICAjIHN5cy5oYXNoX2luZm8ubW9kdWx1cyBzaG91bGQgYmUgYSBwcmltZTsgd2UgZG8gYSBxdWljawogICAgICAgICAjIHByb2JhYmxlIHByaW1hbGl0eSB0ZXN0IChkb2Vzbid0IGV4Y2x1ZGUgdGhlIHBvc3NpYmlsaXR5IG9mCkBAIC00MjMsNiArNDI3LDIyIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzeXMuaGFzaF9pbmZvLmluZiwgaW50KQogICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3lzLmhhc2hfaW5mby5uYW4sIGludCkKICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN5cy5oYXNoX2luZm8uaW1hZywgaW50KQorICAgICAgICBhbGdvID0gc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCJQeV9IQVNIX0FMR09SSVRITSIpCisgICAgICAgIGlmIHN5cy5oYXNoX2luZm8uYWxnb3JpdGhtIGluIHsiZm52IiwgInNpcGhhc2gyNCJ9OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihzeXMuaGFzaF9pbmZvLmhhc2hfYml0cywgezMyLCA2NH0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKHN5cy5oYXNoX2luZm8uc2VlZF9iaXRzLCB7MzIsIDY0LCAxMjh9KQorCisgICAgICAgICAgICBpZiBhbGdvID09IDE6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzeXMuaGFzaF9pbmZvLmFsZ29yaXRobSwgInNpcGhhc2gyNCIpCisgICAgICAgICAgICBlbGlmIGFsZ28gPT0gMjoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN5cy5oYXNoX2luZm8uYWxnb3JpdGhtLCAiZm52IikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihzeXMuaGFzaF9pbmZvLmFsZ29yaXRobSwgeyJmbnYiLCAic2lwaGFzaDI0In0pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIFBZX0hBU0hfRVhURVJOQUwKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWxnbywgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoc3lzLmhhc2hfaW5mby5jdXRvZmYsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzcyhzeXMuaGFzaF9pbmZvLmN1dG9mZiwgOCkKIAogICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3lzLm1heHNpemUsIGludCkKICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN5cy5tYXh1bmljb2RlLCBpbnQpCkBAIC00NjAsNyArNDgwLDcgQEAKICAgICBkZWYgdGVzdF90aHJlYWRfaW5mbyhzZWxmKToKICAgICAgICAgaW5mbyA9IHN5cy50aHJlYWRfaW5mbwogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihpbmZvKSwgMykKLSAgICAgICAgc2VsZi5hc3NlcnRJbihpbmZvLm5hbWUsICgnbnQnLCAnb3MyJywgJ3B0aHJlYWQnLCAnc29sYXJpcycsIE5vbmUpKQorICAgICAgICBzZWxmLmFzc2VydEluKGluZm8ubmFtZSwgKCdudCcsICdwdGhyZWFkJywgJ3NvbGFyaXMnLCBOb25lKSkKICAgICAgICAgc2VsZi5hc3NlcnRJbihpbmZvLmxvY2ssICgnc2VtYXBob3JlJywgJ211dGV4K2NvbmQnLCBOb25lKSkKIAogICAgIGRlZiB0ZXN0XzQzNTgxKHNlbGYpOgpAQCAtNDkzLDEzICs1MTMsMzQgQEAKICAgICAgICAgYXR0cnMgPSAoImRlYnVnIiwKICAgICAgICAgICAgICAgICAgImluc3BlY3QiLCAiaW50ZXJhY3RpdmUiLCAib3B0aW1pemUiLCAiZG9udF93cml0ZV9ieXRlY29kZSIsCiAgICAgICAgICAgICAgICAgICJub191c2VyX3NpdGUiLCAibm9fc2l0ZSIsICJpZ25vcmVfZW52aXJvbm1lbnQiLCAidmVyYm9zZSIsCi0gICAgICAgICAgICAgICAgICJieXRlc193YXJuaW5nIiwgInF1aWV0IiwgImhhc2hfcmFuZG9taXphdGlvbiIpCisgICAgICAgICAgICAgICAgICJieXRlc193YXJuaW5nIiwgInF1aWV0IiwgImhhc2hfcmFuZG9taXphdGlvbiIsICJpc29sYXRlZCIpCiAgICAgICAgIGZvciBhdHRyIGluIGF0dHJzOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoc3lzLmZsYWdzLCBhdHRyKSwgYXR0cikKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShnZXRhdHRyKHN5cy5mbGFncywgYXR0cikpLCBpbnQsIGF0dHIpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXByKHN5cy5mbGFncykpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHN5cy5mbGFncyksIGxlbihhdHRycykpCiAKKyAgICBkZWYgYXNzZXJ0X3JhaXNlX29uX25ld19zeXNfdHlwZShzZWxmLCBzeXNfYXR0cik6CisgICAgICAgICMgVXNlcnMgYXJlIGludGVudGlvbmFsbHkgcHJldmVudGVkIGZyb20gY3JlYXRpbmcgbmV3IGluc3RhbmNlcyBvZgorICAgICAgICAjIHN5cy5mbGFncywgc3lzLnZlcnNpb25faW5mbywgYW5kIHN5cy5nZXR3aW5kb3dzdmVyc2lvbi4KKyAgICAgICAgYXR0cl90eXBlID0gdHlwZShzeXNfYXR0cikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgYXR0cl90eXBlKCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgYXR0cl90eXBlLl9fbmV3X18oYXR0cl90eXBlKQorCisgICAgZGVmIHRlc3Rfc3lzX2ZsYWdzX25vX2luc3RhbnRpYXRpb24oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0X3JhaXNlX29uX25ld19zeXNfdHlwZShzeXMuZmxhZ3MpCisKKyAgICBkZWYgdGVzdF9zeXNfdmVyc2lvbl9pbmZvX25vX2luc3RhbnRpYXRpb24oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0X3JhaXNlX29uX25ld19zeXNfdHlwZShzeXMudmVyc2lvbl9pbmZvKQorCisgICAgZGVmIHRlc3Rfc3lzX2dldHdpbmRvd3N2ZXJzaW9uX25vX2luc3RhbnRpYXRpb24oc2VsZik6CisgICAgICAgICMgU2tpcCBpZiBub3QgYmVpbmcgcnVuIG9uIFdpbmRvd3MuCisgICAgICAgIHRlc3Quc3VwcG9ydC5nZXRfYXR0cmlidXRlKHN5cywgImdldHdpbmRvd3N2ZXJzaW9uIikKKyAgICAgICAgc2VsZi5hc3NlcnRfcmFpc2Vfb25fbmV3X3N5c190eXBlKHN5cy5nZXR3aW5kb3dzdmVyc2lvbigpKQorCisgICAgQHRlc3Quc3VwcG9ydC5jcHl0aG9uX29ubHkKICAgICBkZWYgdGVzdF9jbGVhcl90eXBlX2NhY2hlKHNlbGYpOgogICAgICAgICBzeXMuX2NsZWFyX3R5cGVfY2FjaGUoKQogCkBAIC01MjIsNiArNTYzLDQyIEBACiAgICAgICAgIG91dCA9IHAuY29tbXVuaWNhdGUoKVswXS5zdHJpcCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LCBiJz8nKQogCisgICAgICAgIGVudlsiUFlUSE9OSU9FTkNPRElORyJdID0gImFzY2lpIgorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItYyIsICdwcmludChjaHIoMHhhMikpJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudj1lbnYpCisgICAgICAgIG91dCwgZXJyID0gcC5jb21tdW5pY2F0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LCBiJycpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oYidVbmljb2RlRW5jb2RlRXJyb3I6JywgZXJyKQorICAgICAgICBzZWxmLmFzc2VydEluKHJiIidceGEyJyIsIGVycikKKworICAgICAgICBlbnZbIlBZVEhPTklPRU5DT0RJTkciXSA9ICJhc2NpaToiCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwgJ3ByaW50KGNocigweGEyKSknXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW52PWVudikKKyAgICAgICAgb3V0LCBlcnIgPSBwLmNvbW11bmljYXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQsIGInJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbihiJ1VuaWNvZGVFbmNvZGVFcnJvcjonLCBlcnIpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4ocmIiJ1x4YTInIiwgZXJyKQorCisgICAgICAgIGVudlsiUFlUSE9OSU9FTkNPRElORyJdID0gIjpzdXJyb2dhdGVlc2NhcGUiCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwgJ3ByaW50KGNocigweGRjYmQpKSddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBlbnY9ZW52KQorICAgICAgICBvdXQgPSBwLmNvbW11bmljYXRlKClbMF0uc3RyaXAoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dCwgYidceGJkJykKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHRlc3Quc3VwcG9ydC5GU19OT05BU0NJSSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAncmVxdWlyZXMgT1Mgc3VwcG9ydCBvZiBub24tQVNDSUkgZW5jb2RpbmdzJykKKyAgICBkZWYgdGVzdF9pb2VuY29kaW5nX25vbmFzY2lpKHNlbGYpOgorICAgICAgICBlbnYgPSBkaWN0KG9zLmVudmlyb24pCisKKyAgICAgICAgZW52WyJQWVRIT05JT0VOQ09ESU5HIl0gPSAiIgorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItYyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwcmludCglYSknICUgdGVzdC5zdXBwb3J0LkZTX05PTkFTQ0lJXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgZW52PWVudikKKyAgICAgICAgb3V0ID0gcC5jb21tdW5pY2F0ZSgpWzBdLnN0cmlwKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQsIG9zLmZzZW5jb2RlKHRlc3Quc3VwcG9ydC5GU19OT05BU0NJSSkpCisKICAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5iYXNlX3ByZWZpeCAhPSBzeXMucHJlZml4LAogICAgICAgICAgICAgICAgICAgICAgJ1Rlc3QgaXMgbm90IHZlbnYtY29tcGF0aWJsZScpCiAgICAgZGVmIHRlc3RfZXhlY3V0YWJsZShzZWxmKToKQEAgLTU4Miw2ICs2NTksNyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN5cy5pbXBsZW1lbnRhdGlvbi5uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5pbXBsZW1lbnRhdGlvbi5uYW1lLmxvd2VyKCkpCiAKKyAgICBAdGVzdC5zdXBwb3J0LmNweXRob25fb25seQogICAgIGRlZiB0ZXN0X2RlYnVnbWFsbG9jc3RhdHMoc2VsZik6CiAgICAgICAgICMgVGVzdCBzeXMuX2RlYnVnbWFsbG9jc3RhdHMoKQogICAgICAgICBmcm9tIHRlc3Quc2NyaXB0X2hlbHBlciBpbXBvcnQgYXNzZXJ0X3B5dGhvbl9vawpAQCAtNTg5LDYgKzY2NywzOSBAQAogICAgICAgICByZXQsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygqYXJncykKICAgICAgICAgc2VsZi5hc3NlcnRJbihiImZyZWUgUHlEaWN0T2JqZWN0cyIsIGVycikKIAorICAgICAgICAjIFRoZSBmdW5jdGlvbiBoYXMgbm8gcGFyYW1ldGVyCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc3lzLl9kZWJ1Z21hbGxvY3N0YXRzLCBUcnVlKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzeXMsICJnZXRhbGxvY2F0ZWRibG9ja3MiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAic3lzLmdldGFsbG9jYXRlZGJsb2NrcyB1bmF2YWlsYWJsZSBvbiB0aGlzIGJ1aWxkIikKKyAgICBkZWYgdGVzdF9nZXRhbGxvY2F0ZWRibG9ja3Moc2VsZik6CisgICAgICAgICMgU29tZSBzYW5pdHkgY2hlY2tzCisgICAgICAgIHdpdGhfcHltYWxsb2MgPSBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ1dJVEhfUFlNQUxMT0MnKQorICAgICAgICBhID0gc3lzLmdldGFsbG9jYXRlZGJsb2NrcygpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShhKSwgaW50KQorICAgICAgICBpZiB3aXRoX3B5bWFsbG9jOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKGEsIDApCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIFdoZW4gV0lUSF9QWU1BTExPQyBpc24ndCBhdmFpbGFibGUsIHdlIGRvbid0IGtub3cgYW55dGhpbmcKKyAgICAgICAgICAgICMgYWJvdXQgdGhlIHVuZGVybHlpbmcgaW1wbGVtZW50YXRpb246IHRoZSBmdW5jdGlvbiBtaWdodAorICAgICAgICAgICAgIyByZXR1cm4gMCBvciBzb21ldGhpbmcgZ3JlYXRlci4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKGEsIDApCisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgV2hpbGUgd2UgY291bGQgaW1hZ2luZSBhIFB5dGhvbiBzZXNzaW9uIHdoZXJlIHRoZSBudW1iZXIgb2YKKyAgICAgICAgICAgICMgbXVsdGlwbGUgYnVmZmVyIG9iamVjdHMgd291bGQgZXhjZWVkIHRoZSBzaGFyaW5nIG9mIHJlZmVyZW5jZXMsCisgICAgICAgICAgICAjIGl0IGlzIHVubGlrZWx5IHRvIGhhcHBlbiBpbiBhIG5vcm1hbCB0ZXN0IHJ1bi4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0TGVzcyhhLCBzeXMuZ2V0dG90YWxyZWZjb3VudCgpKQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAjIGdldHRvdGFscmVmY291bnQoKSBub3QgYXZhaWxhYmxlCisgICAgICAgICAgICBwYXNzCisgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICBiID0gc3lzLmdldGFsbG9jYXRlZGJsb2NrcygpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKGIsIGEpCisgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICBjID0gc3lzLmdldGFsbG9jYXRlZGJsb2NrcygpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oYywgcmFuZ2UoYiAtIDUwLCBiICsgNTApKQorCisKIEB0ZXN0LnN1cHBvcnQuY3B5dGhvbl9vbmx5CiBjbGFzcyBTaXplb2ZUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIApAQCAtNjE0LDYgKzcyNSwzNyBAQAogICAgICAgICAjIGJ1dCBsaXN0cyBhcmUKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzeXMuZ2V0c2l6ZW9mKFtdKSwgdnNpemUoJ1BuJykgKyBnY19oZWFkZXJfc2l6ZSkKIAorICAgIGRlZiB0ZXN0X2Vycm9ycyhzZWxmKToKKyAgICAgICAgY2xhc3MgQmFkU2l6ZW9mOgorICAgICAgICAgICAgZGVmIF9fc2l6ZW9mX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzeXMuZ2V0c2l6ZW9mLCBCYWRTaXplb2YoKSkKKworICAgICAgICBjbGFzcyBJbnZhbGlkU2l6ZW9mOgorICAgICAgICAgICAgZGVmIF9fc2l6ZW9mX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzeXMuZ2V0c2l6ZW9mLCBJbnZhbGlkU2l6ZW9mKCkpCisgICAgICAgIHNlbnRpbmVsID0gWyJzZW50aW5lbCJdCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3lzLmdldHNpemVvZihJbnZhbGlkU2l6ZW9mKCksIHNlbnRpbmVsKSwgc2VudGluZWwpCisKKyAgICAgICAgY2xhc3MgRmxvYXRTaXplb2Y6CisgICAgICAgICAgICBkZWYgX19zaXplb2ZfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gNC41CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc3lzLmdldHNpemVvZiwgRmxvYXRTaXplb2YoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzeXMuZ2V0c2l6ZW9mKEZsb2F0U2l6ZW9mKCksIHNlbnRpbmVsKSwgc2VudGluZWwpCisKKyAgICAgICAgY2xhc3MgT3ZlcmZsb3dTaXplb2YoaW50KToKKyAgICAgICAgICAgIGRlZiBfX3NpemVvZl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBpbnQoc2VsZikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzeXMuZ2V0c2l6ZW9mKE92ZXJmbG93U2l6ZW9mKHN5cy5tYXhzaXplKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgc3lzLm1heHNpemUgKyBzZWxmLmdjX2hlYWRzaXplKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IpOgorICAgICAgICAgICAgc3lzLmdldHNpemVvZihPdmVyZmxvd1NpemVvZihzeXMubWF4c2l6ZSArIDEpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgc3lzLmdldHNpemVvZihPdmVyZmxvd1NpemVvZigtMSkpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoKFZhbHVlRXJyb3IsIE92ZXJmbG93RXJyb3IpKToKKyAgICAgICAgICAgIHN5cy5nZXRzaXplb2YoT3ZlcmZsb3dTaXplb2YoLXN5cy5tYXhzaXplIC0gMSkpCisKICAgICBkZWYgdGVzdF9kZWZhdWx0KHNlbGYpOgogICAgICAgICBzaXplID0gdGVzdC5zdXBwb3J0LmNhbGN2b2Jqc2l6ZQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN5cy5nZXRzaXplb2YoVHJ1ZSksIHNpemUoJycpICsgc2VsZi5sb25nZGlnaXQpCkBAIC02MzQsOSArNzc2LDEyIEBACiAgICAgICAgIHNhbXBsZXMgPSBbYicnLCBiJ3UnKjEwMDAwMF0KICAgICAgICAgZm9yIHNhbXBsZSBpbiBzYW1wbGVzOgogICAgICAgICAgICAgeCA9IGJ5dGVhcnJheShzYW1wbGUpCi0gICAgICAgICAgICBjaGVjayh4LCB2c2l6ZSgnaW5QJykgKyB4Ll9fYWxsb2NfXygpKQorICAgICAgICAgICAgY2hlY2soeCwgdnNpemUoJ24yUGknKSArIHguX19hbGxvY19fKCkpCiAgICAgICAgICMgYnl0ZWFycmF5X2l0ZXJhdG9yCiAgICAgICAgIGNoZWNrKGl0ZXIoYnl0ZWFycmF5KCkpLCBzaXplKCduUCcpKQorICAgICAgICAjIGJ5dGVzCisgICAgICAgIGNoZWNrKGInJywgdnNpemUoJ24nKSArIDEpCisgICAgICAgIGNoZWNrKGIneCcgKiAxMCwgdnNpemUoJ24nKSArIDExKQogICAgICAgICAjIGNlbGwKICAgICAgICAgZGVmIGdldF9jZWxsKCk6CiAgICAgICAgICAgICB4ID0gNDIKQEAgLTcxMyw3ICs4NTgsNyBAQAogICAgICAgICBuZnJlZXMgPSBsZW4oeC5mX2NvZGUuY29fZnJlZXZhcnMpCiAgICAgICAgIGV4dHJhcyA9IHguZl9jb2RlLmNvX3N0YWNrc2l6ZSArIHguZl9jb2RlLmNvX25sb2NhbHMgK1wKICAgICAgICAgICAgICAgICAgIG5jZWxscyArIG5mcmVlcyAtIDEKLSAgICAgICAgY2hlY2soeCwgdnNpemUoJzEyUDNpJyArIENPX01BWEJMT0NLUyonM2knICsgJ1AnICsgZXh0cmFzKidQJykpCisgICAgICAgIGNoZWNrKHgsIHZzaXplKCcxMlAzaWMnICsgQ09fTUFYQkxPQ0tTKiczaScgKyAnUCcgKyBleHRyYXMqJ1AnKSkKICAgICAgICAgIyBmdW5jdGlvbgogICAgICAgICBkZWYgZnVuYygpOiBwYXNzCiAgICAgICAgIGNoZWNrKGZ1bmMsIHNpemUoJzEyUCcpKQpAQCAtNzU2LDEwICs5MDEsOCBAQAogICAgICAgICBjaGVjayhpbnQoUHlMb25nX0JBU0UpLCB2c2l6ZSgnJykgKyAyKnNlbGYubG9uZ2RpZ2l0KQogICAgICAgICBjaGVjayhpbnQoUHlMb25nX0JBU0UqKjItMSksIHZzaXplKCcnKSArIDIqc2VsZi5sb25nZGlnaXQpCiAgICAgICAgIGNoZWNrKGludChQeUxvbmdfQkFTRSoqMiksIHZzaXplKCcnKSArIDMqc2VsZi5sb25nZGlnaXQpCi0gICAgICAgICMgbWVtb3J5dmlldwotICAgICAgICBjaGVjayhtZW1vcnl2aWV3KGInJyksIHNpemUoJ1BuaW4gMlAybjJpNVAgM2NQbicpKQogICAgICAgICAjIG1vZHVsZQotICAgICAgICBjaGVjayh1bml0dGVzdCwgc2l6ZSgnUG5QJykpCisgICAgICAgIGNoZWNrKHVuaXR0ZXN0LCBzaXplKCdQblBQUCcpKQogICAgICAgICAjIE5vbmUKICAgICAgICAgY2hlY2soTm9uZSwgc2l6ZSgnJykpCiAgICAgICAgICMgTm90SW1wbGVtZW50ZWRUeXBlCkBAIC04MTMsMTEgKzk1NiwxMSBAQAogICAgICAgICBjaGVjaygoMSwyLDMpLCB2c2l6ZSgnJykgKyAzKnNlbGYuUCkKICAgICAgICAgIyB0eXBlCiAgICAgICAgICMgc3RhdGljIHR5cGU6IFB5VHlwZU9iamVjdAotICAgICAgICBzID0gdnNpemUoJ1AybjE1UGw0UG45UG4xMVBJJykKKyAgICAgICAgcyA9IHZzaXplKCdQMm4xNVBsNFBuOVBuMTFQSVAnKQogICAgICAgICBjaGVjayhpbnQsIHMpCiAgICAgICAgICMgKFB5VHlwZU9iamVjdCArIFB5TnVtYmVyTWV0aG9kcyArIFB5TWFwcGluZ01ldGhvZHMgKwogICAgICAgICAjICBQeVNlcXVlbmNlTWV0aG9kcyArIFB5QnVmZmVyUHJvY3MgKyA0UCkKLSAgICAgICAgcyA9IHZzaXplKCdQMm4xNVBsNFBuOVBuMTFQSScpICsgc3RydWN0LmNhbGNzaXplKCczNFAgM1AgMTBQIDJQIDRQJykKKyAgICAgICAgcyA9IHZzaXplKCdQMm4xNVBsNFBuOVBuMTFQSVAnKSArIHN0cnVjdC5jYWxjc2l6ZSgnMzRQIDNQIDEwUCAyUCA0UCcpCiAgICAgICAgICMgU2VwYXJhdGUgYmxvY2sgZm9yIFB5RGljdEtleXNPYmplY3Qgd2l0aCA0IGVudHJpZXMKICAgICAgICAgcyArPSBzdHJ1Y3QuY2FsY3NpemUoIjJuUG4iKSArIDQqc3RydWN0LmNhbGNzaXplKCJuMlAiKQogICAgICAgICAjIGNsYXNzCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3N5c19zZXR0cmFjZS5weSBiL0xpYi90ZXN0L3Rlc3Rfc3lzX3NldHRyYWNlLnB5CmluZGV4IGYwYjBiODIuLmFlOGY4NDUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc3lzX3NldHRyYWNlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc3lzX3NldHRyYWNlLnB5CkBAIC01NzksNiArNTc5LDE1IEBACiBqdW1wX2luX25lc3RlZF9maW5hbGx5Lmp1bXAgPSAoNCwgOSkKIGp1bXBfaW5fbmVzdGVkX2ZpbmFsbHkub3V0cHV0ID0gWzIsIDldCiAKK2RlZiBqdW1wX2luZmluaXRlX3doaWxlX2xvb3Aob3V0cHV0KToKKyAgICBvdXRwdXQuYXBwZW5kKDEpCisgICAgd2hpbGUgMToKKyAgICAgICAgb3V0cHV0LmFwcGVuZCgyKQorICAgIG91dHB1dC5hcHBlbmQoMykKKworanVtcF9pbmZpbml0ZV93aGlsZV9sb29wLmp1bXAgPSAoMywgNCkKK2p1bXBfaW5maW5pdGVfd2hpbGVfbG9vcC5vdXRwdXQgPSBbMSwgM10KKwogIyBUaGUgc2Vjb25kIHNldCBvZiAnanVtcCcgdGVzdHMgYXJlIGZvciB0aGluZ3MgdGhhdCBhcmUgbm90IGFsbG93ZWQ6CiAKIGRlZiBub19qdW1wX3Rvb19mYXJfZm9yd2FyZHMob3V0cHV0KToKQEAgLTc1NSw2ICs3NjQsOCBAQAogICAgICAgICBzZWxmLnJ1bl90ZXN0KGp1bXBfdG9fc2FtZV9saW5lKQogICAgIGRlZiB0ZXN0XzA3X2p1bXBfaW5fbmVzdGVkX2ZpbmFsbHkoc2VsZik6CiAgICAgICAgIHNlbGYucnVuX3Rlc3QoanVtcF9pbl9uZXN0ZWRfZmluYWxseSkKKyAgICBkZWYgdGVzdF9qdW1wX2luZmluaXRlX3doaWxlX2xvb3Aoc2VsZik6CisgICAgICAgIHNlbGYucnVuX3Rlc3QoanVtcF9pbmZpbml0ZV93aGlsZV9sb29wKQogICAgIGRlZiB0ZXN0XzA4X25vX2p1bXBfdG9vX2Zhcl9mb3J3YXJkcyhzZWxmKToKICAgICAgICAgc2VsZi5ydW5fdGVzdChub19qdW1wX3Rvb19mYXJfZm9yd2FyZHMpCiAgICAgZGVmIHRlc3RfMDlfbm9fanVtcF90b29fZmFyX2JhY2t3YXJkcyhzZWxmKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc3lzY29uZmlnLnB5IGIvTGliL3Rlc3QvdGVzdF9zeXNjb25maWcucHkKaW5kZXggMDNmNjdmZC4uOGVkNzI5YSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zeXNjb25maWcucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zeXNjb25maWcucHkKQEAgLTUsOCArNSw4IEBACiBpbXBvcnQgc2h1dGlsCiBmcm9tIGNvcHkgaW1wb3J0IGNvcHkKIAotZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IChydW5fdW5pdHRlc3QsIFRFU1RGTiwgdW5saW5rLAotICAgICAgICAgICAgICAgICAgICAgICAgICBjYXB0dXJlZF9zdGRvdXQsIHNraXBfdW5sZXNzX3N5bWxpbmspCitmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgKHJ1bl91bml0dGVzdCwgVEVTVEZOLCB1bmxpbmssIGNoZWNrX3dhcm5pbmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjYXB0dXJlZF9zdGRvdXQsIHNraXBfdW5sZXNzX3N5bWxpbmssIGNoYW5nZV9jd2QpCiAKIGltcG9ydCBzeXNjb25maWcKIGZyb20gc3lzY29uZmlnIGltcG9ydCAoZ2V0X3BhdGhzLCBnZXRfcGxhdGZvcm0sIGdldF9jb25maWdfdmFycywKQEAgLTIzNCw3ICsyMzQsNyBAQAogICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUoY29uZmlnX2gpLCBjb25maWdfaCkKIAogICAgIGRlZiB0ZXN0X2dldF9zY2hlbWVfbmFtZXMoc2VsZik6Ci0gICAgICAgIHdhbnRlZCA9ICgnbnQnLCAnbnRfdXNlcicsICdvczInLCAnb3MyX2hvbWUnLCAnb3N4X2ZyYW1ld29ya191c2VyJywKKyAgICAgICAgd2FudGVkID0gKCdudCcsICdudF91c2VyJywgJ29zeF9mcmFtZXdvcmtfdXNlcicsCiAgICAgICAgICAgICAgICAgICAncG9zaXhfaG9tZScsICdwb3NpeF9wcmVmaXgnLCAncG9zaXhfdXNlcicpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X3NjaGVtZV9uYW1lcygpLCB3YW50ZWQpCiAKQEAgLTMwNSwxNCArMzA1LDEzIEBACiAgICAgICAgIGlmICdNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQnIGluIGVudjoKICAgICAgICAgICAgIGRlbCBlbnZbJ01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCddCiAKLSAgICAgICAgd2l0aCBvcGVuKCcvZGV2L251bGwnLCAndycpIGFzIGRldm51bGxfZnA6Ci0gICAgICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbihbCi0gICAgICAgICAgICAgICAgICAgIHN5cy5leGVjdXRhYmxlLCAnLWMnLAotICAgICAgICAgICAgICAgICAgICAnaW1wb3J0IHN5c2NvbmZpZzsgcHJpbnQoc3lzY29uZmlnLmdldF9wbGF0Zm9ybSgpKScsCi0gICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAotICAgICAgICAgICAgICAgIHN0ZGVycj1kZXZudWxsX2ZwLAotICAgICAgICAgICAgICAgIGVudj1lbnYpCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFsKKyAgICAgICAgICAgICAgICBzeXMuZXhlY3V0YWJsZSwgJy1jJywKKyAgICAgICAgICAgICAgICAnaW1wb3J0IHN5c2NvbmZpZzsgcHJpbnQoc3lzY29uZmlnLmdldF9wbGF0Zm9ybSgpKScsCisgICAgICAgICAgICBdLAorICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLkRFVk5VTEwsCisgICAgICAgICAgICBlbnY9ZW52KQogICAgICAgICB0ZXN0X3BsYXRmb3JtID0gcC5jb21tdW5pY2F0ZSgpWzBdLnN0cmlwKCkKICAgICAgICAgdGVzdF9wbGF0Zm9ybSA9IHRlc3RfcGxhdGZvcm0uZGVjb2RlKCd1dGYtOCcpCiAgICAgICAgIHN0YXR1cyA9IHAud2FpdCgpCkBAIC0zMjUsMjAgKzMyNCwxOSBAQAogICAgICAgICBlbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQogICAgICAgICBlbnZbJ01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCddID0gJzEwLjEnCiAKLSAgICAgICAgd2l0aCBvcGVuKCcvZGV2L251bGwnKSBhcyBkZXZfbnVsbDoKLSAgICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFsKLSAgICAgICAgICAgICAgICAgICAgc3lzLmV4ZWN1dGFibGUsICctYycsCi0gICAgICAgICAgICAgICAgICAgICdpbXBvcnQgc3lzY29uZmlnOyBwcmludChzeXNjb25maWcuZ2V0X3BsYXRmb3JtKCkpJywKLSAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCi0gICAgICAgICAgICAgICAgc3RkZXJyPWRldl9udWxsLAotICAgICAgICAgICAgICAgIGVudj1lbnYpCi0gICAgICAgICAgICB0ZXN0X3BsYXRmb3JtID0gcC5jb21tdW5pY2F0ZSgpWzBdLnN0cmlwKCkKLSAgICAgICAgICAgIHRlc3RfcGxhdGZvcm0gPSB0ZXN0X3BsYXRmb3JtLmRlY29kZSgndXRmLTgnKQotICAgICAgICAgICAgc3RhdHVzID0gcC53YWl0KCkKKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oWworICAgICAgICAgICAgICAgIHN5cy5leGVjdXRhYmxlLCAnLWMnLAorICAgICAgICAgICAgICAgICdpbXBvcnQgc3lzY29uZmlnOyBwcmludChzeXNjb25maWcuZ2V0X3BsYXRmb3JtKCkpJywKKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuREVWTlVMTCwKKyAgICAgICAgICAgIGVudj1lbnYpCisgICAgICAgIHRlc3RfcGxhdGZvcm0gPSBwLmNvbW11bmljYXRlKClbMF0uc3RyaXAoKQorICAgICAgICB0ZXN0X3BsYXRmb3JtID0gdGVzdF9wbGF0Zm9ybS5kZWNvZGUoJ3V0Zi04JykKKyAgICAgICAgc3RhdHVzID0gcC53YWl0KCkKIAotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDApCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG15X3BsYXRmb3JtLCB0ZXN0X3BsYXRmb3JtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChteV9wbGF0Zm9ybSwgdGVzdF9wbGF0Zm9ybSkKIAogICAgIGRlZiB0ZXN0X3NyY2RpcihzZWxmKToKICAgICAgICAgIyBTZWUgSXNzdWVzICMxNTMyMiwgIzE1MzY0LgpAQCAtMzYzLDE0ICszNjEsMzAgQEAKICAgICAgICAgIyBzcmNkaXIgc2hvdWxkIGJlIGluZGVwZW5kZW50IG9mIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5CiAgICAgICAgICMgU2VlIElzc3VlcyAjMTUzMjIsICMxNTM2NC4KICAgICAgICAgc3JjZGlyID0gc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdzcmNkaXInKQotICAgICAgICBjd2QgPSBvcy5nZXRjd2QoKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBvcy5jaGRpcignLi4nKQorICAgICAgICB3aXRoIGNoYW5nZV9jd2Qob3MucGFyZGlyKToKICAgICAgICAgICAgIHNyY2RpcjIgPSBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ3NyY2RpcicpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBvcy5jaGRpcihjd2QpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3JjZGlyLCBzcmNkaXIyKQogCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ0VYVF9TVUZGSVgnKSBpcyBOb25lLAorICAgICAgICAgICAgICAgICAgICAgJ0VYVF9TVUZGSVggcmVxdWlyZWQgZm9yIHRoaXMgdGVzdCcpCisgICAgZGVmIHRlc3RfU09fZGVwcmVjYXRpb24oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhciwgJ1NPJykKKworICAgIEB1bml0dGVzdC5za2lwSWYoc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdFWFRfU1VGRklYJykgaXMgTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICdFWFRfU1VGRklYIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QnKQorICAgIGRlZiB0ZXN0X1NPX3ZhbHVlKHNlbGYpOgorICAgICAgICB3aXRoIGNoZWNrX3dhcm5pbmdzKCgnJywgRGVwcmVjYXRpb25XYXJuaW5nKSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignU08nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdFWFRfU1VGRklYJykpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignRVhUX1NVRkZJWCcpIGlzIE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAnRVhUX1NVRkZJWCByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0JykKKyAgICBkZWYgdGVzdF9TT19pbl92YXJzKHNlbGYpOgorICAgICAgICB2YXJzID0gc3lzY29uZmlnLmdldF9jb25maWdfdmFycygpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHZhcnNbJ1NPJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFyc1snU08nXSwgdmFyc1snRVhUX1NVRkZJWCddKQorCiAKIGNsYXNzIE1ha2VmaWxlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3N5c2xvZy5weSBiL0xpYi90ZXN0L3Rlc3Rfc3lzbG9nLnB5CmluZGV4IDRlNzYyMWU1Li5iN2ZkMmJkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3N5c2xvZy5weQorKysgYi9MaWIvdGVzdC90ZXN0X3N5c2xvZy5weQpAQCAtMzIsNiArMzIsMTAgQEAKICAgICBkZWYgdGVzdF9sb2dfdXB0byhzZWxmKToKICAgICAgICAgc3lzbG9nLkxPR19VUFRPKHN5c2xvZy5MT0dfSU5GTykKIAorICAgIGRlZiB0ZXN0X29wZW5sb2dfbm9hcmdzKHNlbGYpOgorICAgICAgICBzeXNsb2cub3BlbmxvZygpCisgICAgICAgIHN5c2xvZy5zeXNsb2coJ3Rlc3QgbWVzc2FnZSBmcm9tIHB5dGhvbiB0ZXN0X3N5c2xvZycpCisKIGRlZiB0ZXN0X21haW4oKToKICAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChfX25hbWVfXykKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF90YXJmaWxlLnB5IGIvTGliL3Rlc3QvdGVzdF90YXJmaWxlLnB5CmluZGV4IDY4ZmU2MDguLjMwOTFjZTcgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdGFyZmlsZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3RhcmZpbGUucHkKQEAgLTEsMTMgKzEsMTIgQEAKIGltcG9ydCBzeXMKIGltcG9ydCBvcwogaW1wb3J0IGlvCi1pbXBvcnQgc2h1dGlsCiBmcm9tIGhhc2hsaWIgaW1wb3J0IG1kNQogCiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCB0YXJmaWxlCiAKLWZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAorZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0LCBzY3JpcHRfaGVscGVyCiAKICMgQ2hlY2sgZm9yIG91ciBjb21wcmVzc2lvbiBtb2R1bGVzLgogdHJ5OgpAQCAtMjcsMTEgKzI2LDEzIEBACiAgICAgcmV0dXJuIG1kNShkYXRhKS5oZXhkaWdlc3QoKQogCiBURU1QRElSID0gb3MucGF0aC5hYnNwYXRoKHN1cHBvcnQuVEVTVEZOKSArICItdGFyZGlyIgordGFyZXh0ZGlyID0gVEVNUERJUiArICctZXh0cmFjdC10ZXN0JwogdGFybmFtZSA9IHN1cHBvcnQuZmluZGZpbGUoInRlc3R0YXIudGFyIikKIGd6aXBuYW1lID0gb3MucGF0aC5qb2luKFRFTVBESVIsICJ0ZXN0dGFyLnRhci5neiIpCiBiejJuYW1lID0gb3MucGF0aC5qb2luKFRFTVBESVIsICJ0ZXN0dGFyLnRhci5iejIiKQogeHpuYW1lID0gb3MucGF0aC5qb2luKFRFTVBESVIsICJ0ZXN0dGFyLnRhci54eiIpCiB0bXBuYW1lID0gb3MucGF0aC5qb2luKFRFTVBESVIsICJ0bXAudGFyIikKK2RvdGxlc3NuYW1lID0gb3MucGF0aC5qb2luKFRFTVBESVIsICJ0ZXN0dGFyIikKIAogbWQ1X3JlZ3R5cGUgPSAiNjVmNDc3YzgxOGFkOWUxNWY3ZmVhYjBjNmQzNzc0MmYiCiBtZDVfc3BhcnNlID0gImE1NGZiYzRjYTRmNDM5OWE5MGUxYjI3MTY0MDEyZmM2IgpAQCAtMjcxLDcgKzI3Miw3IEBACiAgICAgICAgICMgP3J3LXItLXItLSB0YXJmaWxlL3RhcmZpbGUgICAgIDcwMTEgMjAwMy0wMS0wNiAwNzoxOTo0MyB1c3Rhci9jb250dHlwZQogICAgICAgICAjID9ydy1yLS1yLS0gdGFyZmlsZS90YXJmaWxlICAgICA3MDExIDIwMDMtMDEtMDYgMDc6MTk6NDMgdXN0YXIvcmVndHlwZQogICAgICAgICAjIC4uLgotICAgICAgICBzZWxmLmFzc2VydFJlZ2V4KG91dCwgKGJyJy1ydy1yLS1yLS0gdGFyZmlsZS90YXJmaWxlXHMrNzAxMSAnCisgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXgob3V0LCAoYnInXD9ydy1yLS1yLS0gdGFyZmlsZS90YXJmaWxlXHMrNzAxMSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnInXGR7NH0tXGRcZC1cZFxkXHMrXGRcZDpcZFxkOlxkXGQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyJ3VzdGFyL1x3K3R5cGUgP1xyP1xuJykgKiAyKQogICAgICAgICAjIE1ha2Ugc3VyZSBpdCBwcmludHMgdGhlIHNvdXJjZSBvZiBsaW5rIHdpdGggdmVyYm9zZSBmbGFnCkBAIC0zMTksMTIgKzMyMCw3IEBACiAgICAgZGVmIHRlc3Rfbm9uX2V4aXN0ZW50X3RhcmZpbGUoc2VsZik6CiAgICAgICAgICMgVGVzdCBmb3IgaXNzdWUxMTUxMzogcHJldmVudCBub24tZXhpc3RlbnQgZ3ppcHBlZCB0YXJmaWxlcyByYWlzaW5nCiAgICAgICAgICMgbXVsdGlwbGUgZXhjZXB0aW9ucy4KLSAgICAgICAgdGVzdCA9ICd4eHgnCi0gICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInIGFuZCAnfCcgaW4gc2VsZi5tb2RlOgotICAgICAgICAgICAgIyBJc3N1ZSAjMjAzODQ6IE9uIFdpbmRvd3Mgb3Mub3BlbigpIGVycm9yIG1lc3NhZ2UgZG9lc24ndAotICAgICAgICAgICAgIyBjb250YWluIGZpbGUgbmFtZS4KLSAgICAgICAgICAgIHRlc3QgPSAnJwotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoRmlsZU5vdEZvdW5kRXJyb3IsIHRlc3QpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoRmlsZU5vdEZvdW5kRXJyb3IsICJ4eHgiKToKICAgICAgICAgICAgIHRhcmZpbGUub3BlbigieHh4Iiwgc2VsZi5tb2RlKQogCiAgICAgZGVmIHRlc3RfbnVsbF90YXJmaWxlKHNlbGYpOgpAQCAtMzUzLDEyICszNDksNDEgQEAKICAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgdGFyLmNsb3NlKCkKIAorICAgIGRlZiB0ZXN0X3ByZW1hdHVyZV9lbmRfb2ZfYXJjaGl2ZShzZWxmKToKKyAgICAgICAgZm9yIHNpemUgaW4gKDUxMiwgNjAwLCAxMDI0LCAxMjAwKToKKyAgICAgICAgICAgIHdpdGggdGFyZmlsZS5vcGVuKHRtcG5hbWUsICJ3OiIpIGFzIHRhcjoKKyAgICAgICAgICAgICAgICB0ID0gdGFyZmlsZS5UYXJJbmZvKCJmb28iKQorICAgICAgICAgICAgICAgIHQuc2l6ZSA9IDEwMjQKKyAgICAgICAgICAgICAgICB0YXIuYWRkZmlsZSh0LCBpby5CeXRlc0lPKGIiYSIgKiAxMDI0KSkKKworICAgICAgICAgICAgd2l0aCBvcGVuKHRtcG5hbWUsICJyK2IiKSBhcyBmb2JqOgorICAgICAgICAgICAgICAgIGZvYmoudHJ1bmNhdGUoc2l6ZSkKKworICAgICAgICAgICAgd2l0aCB0YXJmaWxlLm9wZW4odG1wbmFtZSkgYXMgdGFyOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleCh0YXJmaWxlLlJlYWRFcnJvciwgInVuZXhwZWN0ZWQgZW5kIG9mIGRhdGEiKToKKyAgICAgICAgICAgICAgICAgICAgZm9yIHQgaW4gdGFyOgorICAgICAgICAgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICAgICB3aXRoIHRhcmZpbGUub3Blbih0bXBuYW1lKSBhcyB0YXI6CisgICAgICAgICAgICAgICAgdCA9IHRhci5uZXh0KCkKKworICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleCh0YXJmaWxlLlJlYWRFcnJvciwgInVuZXhwZWN0ZWQgZW5kIG9mIGRhdGEiKToKKyAgICAgICAgICAgICAgICAgICAgdGFyLmV4dHJhY3QodCwgVEVNUERJUikKKworICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleCh0YXJmaWxlLlJlYWRFcnJvciwgInVuZXhwZWN0ZWQgZW5kIG9mIGRhdGEiKToKKyAgICAgICAgICAgICAgICAgICAgdGFyLmV4dHJhY3RmaWxlKHQpLnJlYWQoKQogCiBjbGFzcyBNaXNjUmVhZFRlc3RCYXNlKENvbW1vblJlYWRUZXN0KToKKyAgICBkZWYgcmVxdWlyZXNfbmFtZV9hdHRyaWJ1dGUoc2VsZik6CisgICAgICAgIHBhc3MKKwogICAgIGRlZiB0ZXN0X25vX25hbWVfYXJndW1lbnQoc2VsZik6CisgICAgICAgIHNlbGYucmVxdWlyZXNfbmFtZV9hdHRyaWJ1dGUoKQogICAgICAgICB3aXRoIG9wZW4oc2VsZi50YXJuYW1lLCAicmIiKSBhcyBmb2JqOgotICAgICAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKGZpbGVvYmo9Zm9iaiwgbW9kZT1zZWxmLm1vZGUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRhci5uYW1lLCBvcy5wYXRoLmFic3BhdGgoZm9iai5uYW1lKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmb2JqLm5hbWUsIHN0cikKKyAgICAgICAgICAgIHdpdGggdGFyZmlsZS5vcGVuKGZpbGVvYmo9Zm9iaiwgbW9kZT1zZWxmLm1vZGUpIGFzIHRhcjoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodGFyLm5hbWUsIHN0cikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRhci5uYW1lLCBvcy5wYXRoLmFic3BhdGgoZm9iai5uYW1lKSkKIAogICAgIGRlZiB0ZXN0X25vX25hbWVfYXR0cmlidXRlKHNlbGYpOgogICAgICAgICB3aXRoIG9wZW4oc2VsZi50YXJuYW1lLCAicmIiKSBhcyBmb2JqOgpAQCAtMzY2LDcgKzM5MSw3IEBACiAgICAgICAgIGZvYmogPSBpby5CeXRlc0lPKGRhdGEpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yLCBnZXRhdHRyLCBmb2JqLCAibmFtZSIpCiAgICAgICAgIHRhciA9IHRhcmZpbGUub3BlbihmaWxlb2JqPWZvYmosIG1vZGU9c2VsZi5tb2RlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRhci5uYW1lLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh0YXIubmFtZSkKIAogICAgIGRlZiB0ZXN0X2VtcHR5X25hbWVfYXR0cmlidXRlKHNlbGYpOgogICAgICAgICB3aXRoIG9wZW4oc2VsZi50YXJuYW1lLCAicmIiKSBhcyBmb2JqOgpAQCAtMzc0LDcgKzM5OSwyNSBAQAogICAgICAgICBmb2JqID0gaW8uQnl0ZXNJTyhkYXRhKQogICAgICAgICBmb2JqLm5hbWUgPSAiIgogICAgICAgICB3aXRoIHRhcmZpbGUub3BlbihmaWxlb2JqPWZvYmosIG1vZGU9c2VsZi5tb2RlKSBhcyB0YXI6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRhci5uYW1lLCBOb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodGFyLm5hbWUpCisKKyAgICBkZWYgdGVzdF9pbnRfbmFtZV9hdHRyaWJ1dGUoc2VsZik6CisgICAgICAgICMgSXNzdWUgMjEwNDQ6IHRhcmZpbGUub3BlbigpIHNob3VsZCBoYW5kbGUgZmlsZW9iaiB3aXRoIGFuIGludGVnZXIKKyAgICAgICAgIyAnbmFtZScgYXR0cmlidXRlLgorICAgICAgICBmZCA9IG9zLm9wZW4oc2VsZi50YXJuYW1lLCBvcy5PX1JET05MWSkKKyAgICAgICAgd2l0aCBvcGVuKGZkLCAncmInKSBhcyBmb2JqOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGZvYmoubmFtZSwgaW50KQorICAgICAgICAgICAgd2l0aCB0YXJmaWxlLm9wZW4oZmlsZW9iaj1mb2JqLCBtb2RlPXNlbGYubW9kZSkgYXMgdGFyOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHRhci5uYW1lKQorCisgICAgZGVmIHRlc3RfYnl0ZXNfbmFtZV9hdHRyaWJ1dGUoc2VsZik6CisgICAgICAgIHNlbGYucmVxdWlyZXNfbmFtZV9hdHRyaWJ1dGUoKQorICAgICAgICB0YXJuYW1lID0gb3MuZnNlbmNvZGUoc2VsZi50YXJuYW1lKQorICAgICAgICB3aXRoIG9wZW4odGFybmFtZSwgJ3JiJykgYXMgZm9iajoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmb2JqLm5hbWUsIGJ5dGVzKQorICAgICAgICAgICAgd2l0aCB0YXJmaWxlLm9wZW4oZmlsZW9iaj1mb2JqLCBtb2RlPXNlbGYubW9kZSkgYXMgdGFyOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh0YXIubmFtZSwgYnl0ZXMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YXIubmFtZSwgb3MucGF0aC5hYnNwYXRoKGZvYmoubmFtZSkpCiAKICAgICBkZWYgdGVzdF9pbGxlZ2FsX21vZGVfYXJnKHNlbGYpOgogICAgICAgICB3aXRoIG9wZW4odG1wbmFtZSwgJ3diJyk6CkBAIC00NTksMTYgKzUwMiwxNiBAQAogICAgICAgICAjIFRlc3QgaGFyZGxpbmsgZXh0cmFjdGlvbiAoZS5nLiBidWcgIzg1NzI5NykuCiAgICAgICAgIHdpdGggdGFyZmlsZS5vcGVuKHRhcm5hbWUsIGVycm9ybGV2ZWw9MSwgZW5jb2Rpbmc9Imlzbzg4NTktMSIpIGFzIHRhcjoKICAgICAgICAgICAgIHRhci5leHRyYWN0KCJ1c3Rhci9yZWd0eXBlIiwgVEVNUERJUikKLSAgICAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy5yZW1vdmUsIG9zLnBhdGguam9pbihURU1QRElSLCAidXN0YXIvcmVndHlwZSIpKQorICAgICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHN1cHBvcnQudW5saW5rLCBvcy5wYXRoLmpvaW4oVEVNUERJUiwgInVzdGFyL3JlZ3R5cGUiKSkKIAogICAgICAgICAgICAgdGFyLmV4dHJhY3QoInVzdGFyL2xua3R5cGUiLCBURU1QRElSKQotICAgICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9zLnJlbW92ZSwgb3MucGF0aC5qb2luKFRFTVBESVIsICJ1c3Rhci9sbmt0eXBlIikpCisgICAgICAgICAgICBzZWxmLmFkZENsZWFudXAoc3VwcG9ydC51bmxpbmssIG9zLnBhdGguam9pbihURU1QRElSLCAidXN0YXIvbG5rdHlwZSIpKQogICAgICAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihURU1QRElSLCAidXN0YXIvbG5rdHlwZSIpLCAicmIiKSBhcyBmOgogICAgICAgICAgICAgICAgIGRhdGEgPSBmLnJlYWQoKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZDVzdW0oZGF0YSksIG1kNV9yZWd0eXBlKQogCiAgICAgICAgICAgICB0YXIuZXh0cmFjdCgidXN0YXIvc3ltdHlwZSIsIFRFTVBESVIpCi0gICAgICAgICAgICBzZWxmLmFkZENsZWFudXAob3MucmVtb3ZlLCBvcy5wYXRoLmpvaW4oVEVNUERJUiwgInVzdGFyL3N5bXR5cGUiKSkKKyAgICAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzdXBwb3J0LnVubGluaywgb3MucGF0aC5qb2luKFRFTVBESVIsICJ1c3Rhci9zeW10eXBlIikpCiAgICAgICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKFRFTVBESVIsICJ1c3Rhci9zeW10eXBlIiksICJyYiIpIGFzIGY6CiAgICAgICAgICAgICAgICAgZGF0YSA9IGYucmVhZCgpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1kNXN1bShkYXRhKSwgbWQ1X3JlZ3R5cGUpCkBAIC01MDEsNyArNTQ0LDcgQEAKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRhcmluZm8ubXRpbWUsIGZpbGVfbXRpbWUsIGVycm1zZykKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIHRhci5jbG9zZSgpCi0gICAgICAgICAgICBzaHV0aWwucm10cmVlKERJUikKKyAgICAgICAgICAgIHN1cHBvcnQucm10cmVlKERJUikKIAogICAgIGRlZiB0ZXN0X2V4dHJhY3RfZGlyZWN0b3J5KHNlbGYpOgogICAgICAgICBkaXJ0eXBlID0gInVzdGFyL2RpcnR5cGUiCkBAIC01MTYsNyArNTU5LDcgQEAKICAgICAgICAgICAgICAgICBpZiBzeXMucGxhdGZvcm0gIT0gIndpbjMyIjoKICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5zdGF0KGV4dHJhY3RlZCkuc3RfbW9kZSAmIDBvNzc3LCAwbzc1NSkKICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoRElSKQorICAgICAgICAgICAgc3VwcG9ydC5ybXRyZWUoRElSKQogCiAgICAgZGVmIHRlc3RfaW5pdF9jbG9zZV9mb2JqKHNlbGYpOgogICAgICAgICAjIElzc3VlICM3MzQxOiBDbG9zZSB0aGUgaW50ZXJuYWwgZmlsZSBvYmplY3QgaW4gdGhlIFRhckZpbGUKQEAgLTU1MiwxMSArNTk1LDExIEBACiAgICAgcGFzcwogCiBjbGFzcyBCejJNaXNjUmVhZFRlc3QoQnoyVGVzdCwgTWlzY1JlYWRUZXN0QmFzZSwgdW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGRlZiB0ZXN0X25vX25hbWVfYXJndW1lbnQoc2VsZik6CisgICAgZGVmIHJlcXVpcmVzX25hbWVfYXR0cmlidXRlKHNlbGYpOgogICAgICAgICBzZWxmLnNraXBUZXN0KCJCWjJGaWxlIGhhdmUgbm8gbmFtZSBhdHRyaWJ1dGUiKQogCiBjbGFzcyBMem1hTWlzY1JlYWRUZXN0KEx6bWFUZXN0LCBNaXNjUmVhZFRlc3RCYXNlLCB1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgZGVmIHRlc3Rfbm9fbmFtZV9hcmd1bWVudChzZWxmKToKKyAgICBkZWYgcmVxdWlyZXNfbmFtZV9hdHRyaWJ1dGUoc2VsZik6CiAgICAgICAgIHNlbGYuc2tpcFRlc3QoIkxaTUFGaWxlIGhhdmUgbm8gbmFtZSBhdHRyaWJ1dGUiKQogCiAKQEAgLTg4MCw3ICs5MjMsNyBAQAogICAgICAgICAgICAgICAgIGZvYmouc2Vlayg0MDk2KQogICAgICAgICAgICAgICAgIGZvYmoudHJ1bmNhdGUoKQogICAgICAgICAgICAgcyA9IG9zLnN0YXQobmFtZSkKLSAgICAgICAgICAgIG9zLnJlbW92ZShuYW1lKQorICAgICAgICAgICAgc3VwcG9ydC51bmxpbmsobmFtZSkKICAgICAgICAgICAgIHJldHVybiBzLnN0X2Jsb2NrcyA9PSAwCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICByZXR1cm4gRmFsc2UKQEAgLTEwMTMsNyArMTA1Niw3IEBACiAgICAgICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgICAgIHRhci5jbG9zZSgpCiAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBvcy5ybWRpcihwYXRoKQorICAgICAgICAgICAgc3VwcG9ydC5ybWRpcihwYXRoKQogCiAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgImxpbmsiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAiTWlzc2luZyBoYXJkbGluayBpbXBsZW1lbnRhdGlvbiIpCkBAIC0xMDMzLDggKzEwNzYsOCBAQAogICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICB0YXIuY2xvc2UoKQogICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgb3MucmVtb3ZlKHRhcmdldCkKLSAgICAgICAgICAgIG9zLnJlbW92ZShsaW5rKQorICAgICAgICAgICAgc3VwcG9ydC51bmxpbmsodGFyZ2V0KQorICAgICAgICAgICAgc3VwcG9ydC51bmxpbmsobGluaykKIAogICAgIEBzdXBwb3J0LnNraXBfdW5sZXNzX3N5bWxpbmsKICAgICBkZWYgdGVzdF9zeW1saW5rX3NpemUoc2VsZik6CkBAIC0xMDQ4LDcgKzEwOTEsNyBAQAogICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICB0YXIuY2xvc2UoKQogICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgb3MucmVtb3ZlKHBhdGgpCisgICAgICAgICAgICBzdXBwb3J0LnVubGluayhwYXRoKQogCiAgICAgZGVmIHRlc3RfYWRkX3NlbGYoc2VsZik6CiAgICAgICAgICMgVGVzdCBmb3IgIzEyNTcyNTUuCkBAIC0xMDYxLDEwICsxMTA0LDggQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFyLmdldG5hbWVzKCksIFtdLAogICAgICAgICAgICAgICAgICAgICAiYWRkZWQgdGhlIGFyY2hpdmUgdG8gaXRzZWxmIikKIAotICAgICAgICAgICAgY3dkID0gb3MuZ2V0Y3dkKCkKLSAgICAgICAgICAgIG9zLmNoZGlyKFRFTVBESVIpCi0gICAgICAgICAgICB0YXIuYWRkKGRzdG5hbWUpCi0gICAgICAgICAgICBvcy5jaGRpcihjd2QpCisgICAgICAgICAgICB3aXRoIHN1cHBvcnQuY2hhbmdlX2N3ZChURU1QRElSKToKKyAgICAgICAgICAgICAgICB0YXIuYWRkKGRzdG5hbWUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRhci5nZXRuYW1lcygpLCBbXSwKICAgICAgICAgICAgICAgICAgICAgImFkZGVkIHRoZSBhcmNoaXZlIHRvIGl0c2VsZiIpCiAgICAgICAgIGZpbmFsbHk6CkBAIC0xMDk1LDcgKzExMzYsNyBAQAogICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICB0YXIuY2xvc2UoKQogICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgc2h1dGlsLnJtdHJlZSh0ZW1wZGlyKQorICAgICAgICAgICAgc3VwcG9ydC5ybXRyZWUodGVtcGRpcikKIAogICAgIGRlZiB0ZXN0X2ZpbHRlcihzZWxmKToKICAgICAgICAgdGVtcGRpciA9IG9zLnBhdGguam9pbihURU1QRElSLCAiZmlsdGVyIikKQEAgLTExMzEsNyArMTE3Miw3IEBACiAgICAgICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgICAgIHRhci5jbG9zZSgpCiAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBzaHV0aWwucm10cmVlKHRlbXBkaXIpCisgICAgICAgICAgICBzdXBwb3J0LnJtdHJlZSh0ZW1wZGlyKQogCiAgICAgIyBHdWFyYW50ZWUgdGhhdCBzdG9yZWQgcGF0aG5hbWVzIGFyZSBub3QgbW9kaWZpZWQuIERvbid0CiAgICAgIyByZW1vdmUgLi8gb3IgLi4vIG9yIGRvdWJsZSBzbGFzaGVzLiBTdGlsbCBtYWtlIGFic29sdXRlCkBAIC0xMTU5LDkgKzEyMDAsOSBAQAogICAgICAgICAgICAgdGFyLmNsb3NlKCkKIAogICAgICAgICBpZiBub3QgZGlyOgotICAgICAgICAgICAgb3MucmVtb3ZlKGZvbykKKyAgICAgICAgICAgIHN1cHBvcnQudW5saW5rKGZvbykKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIG9zLnJtZGlyKGZvbykKKyAgICAgICAgICAgIHN1cHBvcnQucm1kaXIoZm9vKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5uYW1lLCBjbXBfcGF0aCBvciBwYXRoLnJlcGxhY2Uob3Muc2VwLCAiLyIpKQogCkBAIC0xMTkyLDggKzEyMzMsOCBAQAogICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICB0YXIuY2xvc2UoKQogICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgb3MudW5saW5rKHRlbXBhcmNoaXZlKQotICAgICAgICAgICAgc2h1dGlsLnJtdHJlZSh0ZW1wZGlyKQorICAgICAgICAgICAgc3VwcG9ydC51bmxpbmsodGVtcGFyY2hpdmUpCisgICAgICAgICAgICBzdXBwb3J0LnJtdHJlZSh0ZW1wZGlyKQogCiAgICAgZGVmIHRlc3RfcGF0aG5hbWVzKHNlbGYpOgogICAgICAgICBzZWxmLl90ZXN0X3BhdGhuYW1lKCJmb28iKQpAQCAtMTIyMSw5ICsxMjYyLDcgQEAKIAogICAgIGRlZiB0ZXN0X2N3ZChzZWxmKToKICAgICAgICAgIyBUZXN0IGFkZGluZyB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4KLSAgICAgICAgY3dkID0gb3MuZ2V0Y3dkKCkKLSAgICAgICAgb3MuY2hkaXIoVEVNUERJUikKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIHN1cHBvcnQuY2hhbmdlX2N3ZChURU1QRElSKToKICAgICAgICAgICAgIHRhciA9IHRhcmZpbGUub3Blbih0bXBuYW1lLCBzZWxmLm1vZGUpCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgdGFyLmFkZCgiLiIpCkBAIC0xMjM3LDggKzEyNzYsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQubmFtZS5zdGFydHN3aXRoKCIuLyIpLCB0Lm5hbWUpCiAgICAgICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgICAgIHRhci5jbG9zZSgpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBvcy5jaGRpcihjd2QpCiAKICAgICBkZWYgdGVzdF9vcGVuX25vbndyaXRhYmxlX2ZpbGVvYmooc2VsZik6CiAgICAgICAgIGZvciBleGN0eXBlIGluIE9TRXJyb3IsIEVPRkVycm9yLCBSdW50aW1lRXJyb3I6CkBAIC0xMjkzLDcgKzEzMzAsNyBAQAogICAgICAgICAjIFRlc3QgZm9yIGlzc3VlICM4NDY0OiBDcmVhdGUgZmlsZXMgd2l0aCBjb3JyZWN0CiAgICAgICAgICMgcGVybWlzc2lvbnMuCiAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHRtcG5hbWUpOgotICAgICAgICAgICAgb3MucmVtb3ZlKHRtcG5hbWUpCisgICAgICAgICAgICBzdXBwb3J0LnVubGluayh0bXBuYW1lKQogCiAgICAgICAgIG9yaWdpbmFsX3VtYXNrID0gb3MudW1hc2soMG8wMjIpCiAgICAgICAgIHRyeToKQEAgLTE2NDcsNyArMTY4NCw3IEBACiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBzZWxmLnRhcm5hbWUgPSB0bXBuYW1lCiAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHNlbGYudGFybmFtZSk6Ci0gICAgICAgICAgICBvcy5yZW1vdmUoc2VsZi50YXJuYW1lKQorICAgICAgICAgICAgc3VwcG9ydC51bmxpbmsoc2VsZi50YXJuYW1lKQogCiAgICAgZGVmIF9jcmVhdGVfdGVzdHRhcihzZWxmLCBtb2RlPSJ3OiIpOgogICAgICAgICB3aXRoIHRhcmZpbGUub3Blbih0YXJuYW1lLCBlbmNvZGluZz0iaXNvODg1OS0xIikgYXMgc3JjOgpAQCAtMTgyMiw2ICsxODU5LDEwIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFyZmlsZS5udGkoYiJceGZmXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIpLAogICAgICAgICAgICAgICAgICAgICAgICAgIC0weDEwMDAwMDAwMDAwMDAwMCkKIAorICAgICAgICAjIElzc3VlIDI0NTE0OiBUZXN0IGlmIGVtcHR5IG51bWJlciBmaWVsZHMgYXJlIGNvbnZlcnRlZCB0byB6ZXJvLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRhcmZpbGUubnRpKGIiXDAiKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YXJmaWxlLm50aShiIiAgICAgICBcMCIpLCAwKQorCiAgICAgZGVmIHRlc3Rfd3JpdGVfbnVtYmVyX2ZpZWxkcyhzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YXJmaWxlLml0bigxKSwgYiIwMDAwMDAxXHgwMCIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFyZmlsZS5pdG4oMG83Nzc3Nzc3KSwgYiI3Nzc3Nzc3XHgwMCIpCkBAIC0xODQ3LDYgKzE4ODgsMTg2IEBACiAgICAgICAgICAgICB0YXJmaWxlLml0bigweDEwMDAwMDAwMDAwLCA2LCB0YXJmaWxlLkdOVV9GT1JNQVQpCiAKIAorY2xhc3MgQ29tbWFuZExpbmVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0YXJmaWxlY21kKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHJjLCBvdXQsIGVyciA9IHNjcmlwdF9oZWxwZXIuYXNzZXJ0X3B5dGhvbl9vaygnLW0nLCAndGFyZmlsZScsICphcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiprd2FyZ3MpCisgICAgICAgIHJldHVybiBvdXQucmVwbGFjZShvcy5saW5lc2VwLmVuY29kZSgpLCBiJ1xuJykKKworICAgIGRlZiB0YXJmaWxlY21kX2ZhaWx1cmUoc2VsZiwgKmFyZ3MpOgorICAgICAgICByZXR1cm4gc2NyaXB0X2hlbHBlci5hc3NlcnRfcHl0aG9uX2ZhaWx1cmUoJy1tJywgJ3RhcmZpbGUnLCAqYXJncykKKworICAgIGRlZiBtYWtlX3NpbXBsZV90YXJmaWxlKHNlbGYsIHRhcl9uYW1lKToKKyAgICAgICAgZmlsZXMgPSBbc3VwcG9ydC5maW5kZmlsZSgndG9rZW5pemVfdGVzdHMudHh0JyksCisgICAgICAgICAgICAgICAgIHN1cHBvcnQuZmluZGZpbGUoJ3Rva2VuaXplX3Rlc3RzLW5vLWNvZGluZy1jb29raWUtJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhbmQtdXRmOC1ib20tc2lnLW9ubHkudHh0JyldCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzdXBwb3J0LnVubGluaywgdGFyX25hbWUpCisgICAgICAgIHdpdGggdGFyZmlsZS5vcGVuKHRhcl9uYW1lLCAndycpIGFzIHRmOgorICAgICAgICAgICAgZm9yIHRhcmRhdGEgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgdGYuYWRkKHRhcmRhdGEsIGFyY25hbWU9b3MucGF0aC5iYXNlbmFtZSh0YXJkYXRhKSkKKworICAgIGRlZiB0ZXN0X3Rlc3RfY29tbWFuZChzZWxmKToKKyAgICAgICAgZm9yIHRhcl9uYW1lIGluIHRlc3R0YXJuYW1lczoKKyAgICAgICAgICAgIGZvciBvcHQgaW4gJy10JywgJy0tdGVzdCc6CisgICAgICAgICAgICAgICAgb3V0ID0gc2VsZi50YXJmaWxlY21kKG9wdCwgdGFyX25hbWUpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQsIGInJykKKworICAgIGRlZiB0ZXN0X3Rlc3RfY29tbWFuZF92ZXJib3NlKHNlbGYpOgorICAgICAgICBmb3IgdGFyX25hbWUgaW4gdGVzdHRhcm5hbWVzOgorICAgICAgICAgICAgZm9yIG9wdCBpbiAnLXYnLCAnLS12ZXJib3NlJzoKKyAgICAgICAgICAgICAgICBvdXQgPSBzZWxmLnRhcmZpbGVjbWQob3B0LCAnLXQnLCB0YXJfbmFtZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKGInaXMgYSB0YXIgYXJjaGl2ZS5cbicsIG91dCkKKworICAgIGRlZiB0ZXN0X3Rlc3RfY29tbWFuZF9pbnZhbGlkX2ZpbGUoc2VsZik6CisgICAgICAgIHppcG5hbWUgPSBzdXBwb3J0LmZpbmRmaWxlKCd6aXBkaXIuemlwJykKKyAgICAgICAgcmMsIG91dCwgZXJyID0gc2VsZi50YXJmaWxlY21kX2ZhaWx1cmUoJy10JywgemlwbmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihiJyBpcyBub3QgYSB0YXIgYXJjaGl2ZS4nLCBlcnIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LCBiJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmMsIDEpCisKKyAgICAgICAgZm9yIHRhcl9uYW1lIGluIHRlc3R0YXJuYW1lczoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KHRhcl9uYW1lPXRhcl9uYW1lKToKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4odGFyX25hbWUsICdyYicpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBmLnJlYWQoKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBvcGVuKHRtcG5hbWUsICd3YicpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgICAgICBmLndyaXRlKGRhdGFbOjUxMV0pCisgICAgICAgICAgICAgICAgICAgIHJjLCBvdXQsIGVyciA9IHNlbGYudGFyZmlsZWNtZF9mYWlsdXJlKCctdCcsIHRtcG5hbWUpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LCBiJycpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmMsIDEpCisgICAgICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICAgICAgc3VwcG9ydC51bmxpbmsodG1wbmFtZSkKKworICAgIGRlZiB0ZXN0X2xpc3RfY29tbWFuZChzZWxmKToKKyAgICAgICAgZm9yIHRhcl9uYW1lIGluIHRlc3R0YXJuYW1lczoKKyAgICAgICAgICAgIHdpdGggc3VwcG9ydC5jYXB0dXJlZF9zdGRvdXQoKSBhcyB0OgorICAgICAgICAgICAgICAgIHdpdGggdGFyZmlsZS5vcGVuKHRhcl9uYW1lLCAncicpIGFzIHRmOgorICAgICAgICAgICAgICAgICAgICB0Zi5saXN0KHZlcmJvc2U9RmFsc2UpCisgICAgICAgICAgICBleHBlY3RlZCA9IHQuZ2V0dmFsdWUoKS5lbmNvZGUoJ2FzY2lpJywgJ2JhY2tzbGFzaHJlcGxhY2UnKQorICAgICAgICAgICAgZm9yIG9wdCBpbiAnLWwnLCAnLS1saXN0JzoKKyAgICAgICAgICAgICAgICBvdXQgPSBzZWxmLnRhcmZpbGVjbWQob3B0LCB0YXJfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFlUSE9OSU9FTkNPRElORz0nYXNjaWknKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X2xpc3RfY29tbWFuZF92ZXJib3NlKHNlbGYpOgorICAgICAgICBmb3IgdGFyX25hbWUgaW4gdGVzdHRhcm5hbWVzOgorICAgICAgICAgICAgd2l0aCBzdXBwb3J0LmNhcHR1cmVkX3N0ZG91dCgpIGFzIHQ6CisgICAgICAgICAgICAgICAgd2l0aCB0YXJmaWxlLm9wZW4odGFyX25hbWUsICdyJykgYXMgdGY6CisgICAgICAgICAgICAgICAgICAgIHRmLmxpc3QodmVyYm9zZT1UcnVlKQorICAgICAgICAgICAgZXhwZWN0ZWQgPSB0LmdldHZhbHVlKCkuZW5jb2RlKCdhc2NpaScsICdiYWNrc2xhc2hyZXBsYWNlJykKKyAgICAgICAgICAgIGZvciBvcHQgaW4gJy12JywgJy0tdmVyYm9zZSc6CisgICAgICAgICAgICAgICAgb3V0ID0gc2VsZi50YXJmaWxlY21kKG9wdCwgJy1sJywgdGFyX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBZVEhPTklPRU5DT0RJTkc9J2FzY2lpJykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dCwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9saXN0X2NvbW1hbmRfaW52YWxpZF9maWxlKHNlbGYpOgorICAgICAgICB6aXBuYW1lID0gc3VwcG9ydC5maW5kZmlsZSgnemlwZGlyLnppcCcpCisgICAgICAgIHJjLCBvdXQsIGVyciA9IHNlbGYudGFyZmlsZWNtZF9mYWlsdXJlKCctbCcsIHppcG5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oYicgaXMgbm90IGEgdGFyIGFyY2hpdmUuJywgZXJyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dCwgYicnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJjLCAxKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX2NvbW1hbmQoc2VsZik6CisgICAgICAgIGZpbGVzID0gW3N1cHBvcnQuZmluZGZpbGUoJ3Rva2VuaXplX3Rlc3RzLnR4dCcpLAorICAgICAgICAgICAgICAgICBzdXBwb3J0LmZpbmRmaWxlKCd0b2tlbml6ZV90ZXN0cy1uby1jb2RpbmctY29va2llLScKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYW5kLXV0ZjgtYm9tLXNpZy1vbmx5LnR4dCcpXQorICAgICAgICBmb3Igb3B0IGluICctYycsICctLWNyZWF0ZSc6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgb3V0ID0gc2VsZi50YXJmaWxlY21kKG9wdCwgdG1wbmFtZSwgKmZpbGVzKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LCBiJycpCisgICAgICAgICAgICAgICAgd2l0aCB0YXJmaWxlLm9wZW4odG1wbmFtZSkgYXMgdGFyOgorICAgICAgICAgICAgICAgICAgICB0YXIuZ2V0bWVtYmVycygpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHN1cHBvcnQudW5saW5rKHRtcG5hbWUpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfY29tbWFuZF92ZXJib3NlKHNlbGYpOgorICAgICAgICBmaWxlcyA9IFtzdXBwb3J0LmZpbmRmaWxlKCd0b2tlbml6ZV90ZXN0cy50eHQnKSwKKyAgICAgICAgICAgICAgICAgc3VwcG9ydC5maW5kZmlsZSgndG9rZW5pemVfdGVzdHMtbm8tY29kaW5nLWNvb2tpZS0nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FuZC11dGY4LWJvbS1zaWctb25seS50eHQnKV0KKyAgICAgICAgZm9yIG9wdCBpbiAnLXYnLCAnLS12ZXJib3NlJzoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBvdXQgPSBzZWxmLnRhcmZpbGVjbWQob3B0LCAnLWMnLCB0bXBuYW1lLCAqZmlsZXMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihiJyBmaWxlIGNyZWF0ZWQuJywgb3V0KQorICAgICAgICAgICAgICAgIHdpdGggdGFyZmlsZS5vcGVuKHRtcG5hbWUpIGFzIHRhcjoKKyAgICAgICAgICAgICAgICAgICAgdGFyLmdldG1lbWJlcnMoKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBzdXBwb3J0LnVubGluayh0bXBuYW1lKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX2NvbW1hbmRfZG90bGVzc19maWxlbmFtZShzZWxmKToKKyAgICAgICAgZmlsZXMgPSBbc3VwcG9ydC5maW5kZmlsZSgndG9rZW5pemVfdGVzdHMudHh0JyldCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG91dCA9IHNlbGYudGFyZmlsZWNtZCgnLWMnLCBkb3RsZXNzbmFtZSwgKmZpbGVzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQsIGInJykKKyAgICAgICAgICAgIHdpdGggdGFyZmlsZS5vcGVuKGRvdGxlc3NuYW1lKSBhcyB0YXI6CisgICAgICAgICAgICAgICAgdGFyLmdldG1lbWJlcnMoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc3VwcG9ydC51bmxpbmsoZG90bGVzc25hbWUpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfY29tbWFuZF9kb3Rfc3RhcnRlZF9maWxlbmFtZShzZWxmKToKKyAgICAgICAgdGFyX25hbWUgPSBvcy5wYXRoLmpvaW4oVEVNUERJUiwgIi50ZXN0dGFyIikKKyAgICAgICAgZmlsZXMgPSBbc3VwcG9ydC5maW5kZmlsZSgndG9rZW5pemVfdGVzdHMudHh0JyldCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG91dCA9IHNlbGYudGFyZmlsZWNtZCgnLWMnLCB0YXJfbmFtZSwgKmZpbGVzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQsIGInJykKKyAgICAgICAgICAgIHdpdGggdGFyZmlsZS5vcGVuKHRhcl9uYW1lKSBhcyB0YXI6CisgICAgICAgICAgICAgICAgdGFyLmdldG1lbWJlcnMoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc3VwcG9ydC51bmxpbmsodGFyX25hbWUpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfY29tbWFuZF9jb21wcmVzc2VkKHNlbGYpOgorICAgICAgICBmaWxlcyA9IFtzdXBwb3J0LmZpbmRmaWxlKCd0b2tlbml6ZV90ZXN0cy50eHQnKSwKKyAgICAgICAgICAgICAgICAgc3VwcG9ydC5maW5kZmlsZSgndG9rZW5pemVfdGVzdHMtbm8tY29kaW5nLWNvb2tpZS0nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FuZC11dGY4LWJvbS1zaWctb25seS50eHQnKV0KKyAgICAgICAgZm9yIGZpbGV0eXBlIGluIChHemlwVGVzdCwgQnoyVGVzdCwgTHptYVRlc3QpOgorICAgICAgICAgICAgaWYgbm90IGZpbGV0eXBlLm9wZW46CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB0YXJfbmFtZSA9IHRtcG5hbWUgKyAnLicgKyBmaWxldHlwZS5zdWZmaXgKKyAgICAgICAgICAgICAgICBvdXQgPSBzZWxmLnRhcmZpbGVjbWQoJy1jJywgdGFyX25hbWUsICpmaWxlcykKKyAgICAgICAgICAgICAgICB3aXRoIGZpbGV0eXBlLnRhcm9wZW4odGFyX25hbWUpIGFzIHRhcjoKKyAgICAgICAgICAgICAgICAgICAgdGFyLmdldG1lbWJlcnMoKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBzdXBwb3J0LnVubGluayh0YXJfbmFtZSkKKworICAgIGRlZiB0ZXN0X2V4dHJhY3RfY29tbWFuZChzZWxmKToKKyAgICAgICAgc2VsZi5tYWtlX3NpbXBsZV90YXJmaWxlKHRtcG5hbWUpCisgICAgICAgIGZvciBvcHQgaW4gJy1lJywgJy0tZXh0cmFjdCc6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgd2l0aCBzdXBwb3J0LnRlbXBfY3dkKHRhcmV4dGRpcik6CisgICAgICAgICAgICAgICAgICAgIG91dCA9IHNlbGYudGFyZmlsZWNtZChvcHQsIHRtcG5hbWUpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQsIGInJykKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgc3VwcG9ydC5ybXRyZWUodGFyZXh0ZGlyKQorCisgICAgZGVmIHRlc3RfZXh0cmFjdF9jb21tYW5kX3ZlcmJvc2Uoc2VsZik6CisgICAgICAgIHNlbGYubWFrZV9zaW1wbGVfdGFyZmlsZSh0bXBuYW1lKQorICAgICAgICBmb3Igb3B0IGluICctdicsICctLXZlcmJvc2UnOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHdpdGggc3VwcG9ydC50ZW1wX2N3ZCh0YXJleHRkaXIpOgorICAgICAgICAgICAgICAgICAgICBvdXQgPSBzZWxmLnRhcmZpbGVjbWQob3B0LCAnLWUnLCB0bXBuYW1lKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oYicgZmlsZSBpcyBleHRyYWN0ZWQuJywgb3V0KQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBzdXBwb3J0LnJtdHJlZSh0YXJleHRkaXIpCisKKyAgICBkZWYgdGVzdF9leHRyYWN0X2NvbW1hbmRfZGlmZmVyZW50X2RpcmVjdG9yeShzZWxmKToKKyAgICAgICAgc2VsZi5tYWtlX3NpbXBsZV90YXJmaWxlKHRtcG5hbWUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggc3VwcG9ydC50ZW1wX2N3ZCh0YXJleHRkaXIpOgorICAgICAgICAgICAgICAgIG91dCA9IHNlbGYudGFyZmlsZWNtZCgnLWUnLCB0bXBuYW1lLCAnc3BhbWRpcicpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dCwgYicnKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc3VwcG9ydC5ybXRyZWUodGFyZXh0ZGlyKQorCisgICAgZGVmIHRlc3RfZXh0cmFjdF9jb21tYW5kX2ludmFsaWRfZmlsZShzZWxmKToKKyAgICAgICAgemlwbmFtZSA9IHN1cHBvcnQuZmluZGZpbGUoJ3ppcGRpci56aXAnKQorICAgICAgICB3aXRoIHN1cHBvcnQudGVtcF9jd2QodGFyZXh0ZGlyKToKKyAgICAgICAgICAgIHJjLCBvdXQsIGVyciA9IHNlbGYudGFyZmlsZWNtZF9mYWlsdXJlKCctZScsIHppcG5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oYicgaXMgbm90IGEgdGFyIGFyY2hpdmUuJywgZXJyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dCwgYicnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJjLCAxKQorCisKIGNsYXNzIENvbnRleHRNYW5hZ2VyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgdGVzdF9iYXNpYyhzZWxmKToKQEAgLTE4NTUsMjAgKzIwNzYsMjAgQEAKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRhci5jbG9zZWQsICJjb250ZXh0IG1hbmFnZXIgZmFpbGVkIikKIAogICAgIGRlZiB0ZXN0X2Nsb3NlZChzZWxmKToKLSAgICAgICAgIyBUaGUgX19lbnRlcl9fKCkgbWV0aG9kIGlzIHN1cHBvc2VkIHRvIHJhaXNlIElPRXJyb3IKKyAgICAgICAgIyBUaGUgX19lbnRlcl9fKCkgbWV0aG9kIGlzIHN1cHBvc2VkIHRvIHJhaXNlIE9TRXJyb3IKICAgICAgICAgIyBpZiB0aGUgVGFyRmlsZSBvYmplY3QgaXMgYWxyZWFkeSBjbG9zZWQuCiAgICAgICAgIHRhciA9IHRhcmZpbGUub3Blbih0YXJuYW1lKQogICAgICAgICB0YXIuY2xvc2UoKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpOgogICAgICAgICAgICAgd2l0aCB0YXI6CiAgICAgICAgICAgICAgICAgcGFzcwogCiAgICAgZGVmIHRlc3RfZXhjZXB0aW9uKHNlbGYpOgotICAgICAgICAjIFRlc3QgaWYgdGhlIElPRXJyb3IgZXhjZXB0aW9uIGlzIHBhc3NlZCB0aHJvdWdoIHByb3Blcmx5LgorICAgICAgICAjIFRlc3QgaWYgdGhlIE9TRXJyb3IgZXhjZXB0aW9uIGlzIHBhc3NlZCB0aHJvdWdoIHByb3Blcmx5LgogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEV4Y2VwdGlvbikgYXMgZXhjOgogICAgICAgICAgICAgd2l0aCB0YXJmaWxlLm9wZW4odGFybmFtZSkgYXMgdGFyOgotICAgICAgICAgICAgICAgIHJhaXNlIElPRXJyb3IKLSAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGV4Yy5leGNlcHRpb24sIElPRXJyb3IsCisgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcgorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZXhjLmV4Y2VwdGlvbiwgT1NFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3cm9uZyBleGNlcHRpb24gcmFpc2VkIGluIGNvbnRleHQgbWFuYWdlciIpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0YXIuY2xvc2VkLCAiY29udGV4dCBtYW5hZ2VyIGZhaWxlZCIpCiAKQEAgLTE5NzQsNiArMjE5NSw4IEBACiAgICAgc3VwcG9ydC51bmxpbmsoVEVNUERJUikKICAgICBvcy5tYWtlZGlycyhURU1QRElSKQogCisgICAgZ2xvYmFsIHRlc3R0YXJuYW1lcworICAgIHRlc3R0YXJuYW1lcyA9IFt0YXJuYW1lXQogICAgIHdpdGggb3Blbih0YXJuYW1lLCAicmIiKSBhcyBmb2JqOgogICAgICAgICBkYXRhID0gZm9iai5yZWFkKCkKIApAQCAtMTk4MSwxMiArMjIwNCwxMyBAQAogICAgIGZvciBjIGluIEd6aXBUZXN0LCBCejJUZXN0LCBMem1hVGVzdDoKICAgICAgICAgaWYgYy5vcGVuOgogICAgICAgICAgICAgc3VwcG9ydC51bmxpbmsoYy50YXJuYW1lKQorICAgICAgICAgICAgdGVzdHRhcm5hbWVzLmFwcGVuZChjLnRhcm5hbWUpCiAgICAgICAgICAgICB3aXRoIGMub3BlbihjLnRhcm5hbWUsICJ3YiIpIGFzIHRhcjoKICAgICAgICAgICAgICAgICB0YXIud3JpdGUoZGF0YSkKIAogZGVmIHRlYXJEb3duTW9kdWxlKCk6CiAgICAgaWYgb3MucGF0aC5leGlzdHMoVEVNUERJUik6Ci0gICAgICAgIHNodXRpbC5ybXRyZWUoVEVNUERJUikKKyAgICAgICAgc3VwcG9ydC5ybXRyZWUoVEVNUERJUikKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdGNsLnB5IGIvTGliL3Rlc3QvdGVzdF90Y2wucHkKaW5kZXggNTIyNmVlNi4uYjY1NjU2MyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF90Y2wucHkKKysrIGIvTGliL3Rlc3QvdGVzdF90Y2wucHkKQEAgLTEsNCArMSw2IEBACiBpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCByZQoraW1wb3J0IHN1YnByb2Nlc3MKIGltcG9ydCBzeXMKIGltcG9ydCBvcwogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CkBAIC03LDcgKzksNyBAQAogX3RraW50ZXIgPSBzdXBwb3J0LmltcG9ydF9tb2R1bGUoJ190a2ludGVyJykKIAogIyBNYWtlIHN1cmUgdGtpbnRlci5fZml4IHJ1bnMgdG8gc2V0IHVwIHRoZSBlbnZpcm9ubWVudAotc3VwcG9ydC5pbXBvcnRfZnJlc2hfbW9kdWxlKCd0a2ludGVyJykKK3RraW50ZXIgPSBzdXBwb3J0LmltcG9ydF9mcmVzaF9tb2R1bGUoJ3RraW50ZXInKQogCiBmcm9tIHRraW50ZXIgaW1wb3J0IFRjbAogZnJvbSBfdGtpbnRlciBpbXBvcnQgVGNsRXJyb3IKQEAgLTE3LDI3ICsxOSwyMiBAQAogZXhjZXB0IEltcG9ydEVycm9yOgogICAgIElOVF9NQVggPSBQWV9TU0laRV9UX01BWCA9IHN5cy5tYXhzaXplCiAKLXRjbF92ZXJzaW9uID0gX3RraW50ZXIuVENMX1ZFUlNJT04uc3BsaXQoJy4nKQotdHJ5OgotICAgIGZvciBpIGluIHJhbmdlKGxlbih0Y2xfdmVyc2lvbikpOgotICAgICAgICB0Y2xfdmVyc2lvbltpXSA9IGludCh0Y2xfdmVyc2lvbltpXSkKLWV4Y2VwdCBWYWx1ZUVycm9yOgotICAgIHBhc3MKLXRjbF92ZXJzaW9uID0gdHVwbGUodGNsX3ZlcnNpb24pCit0Y2xfdmVyc2lvbiA9IHR1cGxlKG1hcChpbnQsIF90a2ludGVyLlRDTF9WRVJTSU9OLnNwbGl0KCcuJykpKQogCiBfdGtfcGF0Y2hsZXZlbCA9IE5vbmUKIGRlZiBnZXRfdGtfcGF0Y2hsZXZlbCgpOgogICAgIGdsb2JhbCBfdGtfcGF0Y2hsZXZlbAogICAgIGlmIF90a19wYXRjaGxldmVsIGlzIE5vbmU6CiAgICAgICAgIHRjbCA9IFRjbCgpCi0gICAgICAgIHBhdGNobGV2ZWwgPSBbXQotICAgICAgICBmb3IgeCBpbiB0Y2wuY2FsbCgnaW5mbycsICdwYXRjaGxldmVsJykuc3BsaXQoJy4nKToKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICB4ID0gaW50KHgsIDEwKQotICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6Ci0gICAgICAgICAgICAgICAgeCA9IC0xCi0gICAgICAgICAgICBwYXRjaGxldmVsLmFwcGVuZCh4KQotICAgICAgICBfdGtfcGF0Y2hsZXZlbCA9IHR1cGxlKHBhdGNobGV2ZWwpCisgICAgICAgIHBhdGNobGV2ZWwgPSB0Y2wuY2FsbCgnaW5mbycsICdwYXRjaGxldmVsJykKKyAgICAgICAgbSA9IHJlLmZ1bGxtYXRjaChyJyhcZCspXC4oXGQrKShbYWIuXSkoXGQrKScsIHBhdGNobGV2ZWwpCisgICAgICAgIG1ham9yLCBtaW5vciwgcmVsZWFzZWxldmVsLCBzZXJpYWwgPSBtLmdyb3VwcygpCisgICAgICAgIG1ham9yLCBtaW5vciwgc2VyaWFsID0gaW50KG1ham9yKSwgaW50KG1pbm9yKSwgaW50KHNlcmlhbCkKKyAgICAgICAgcmVsZWFzZWxldmVsID0geydhJzogJ2FscGhhJywgJ2InOiAnYmV0YScsICcuJzogJ2ZpbmFsJ31bcmVsZWFzZWxldmVsXQorICAgICAgICBpZiByZWxlYXNlbGV2ZWwgPT0gJ2ZpbmFsJzoKKyAgICAgICAgICAgIF90a19wYXRjaGxldmVsID0gbWFqb3IsIG1pbm9yLCBzZXJpYWwsIHJlbGVhc2VsZXZlbCwgMAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgX3RrX3BhdGNobGV2ZWwgPSBtYWpvciwgbWlub3IsIDAsIHJlbGVhc2VsZXZlbCwgc2VyaWFsCiAgICAgcmV0dXJuIF90a19wYXRjaGxldmVsCiAKIApAQCAtMTMzLDYgKzEzMCw2OCBAQAogICAgICAgICB0Y2wgPSBzZWxmLmludGVycAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUY2xFcnJvcix0Y2wudW5zZXR2YXIsJ2EnKQogCisgICAgZGVmIGdldF9pbnRlZ2VycyhzZWxmKToKKyAgICAgICAgaW50ZWdlcnMgPSAoMCwgMSwgLTEsIDIqKjMxLTEsIC0yKiozMSkKKyAgICAgICAgaWYgdGNsX3ZlcnNpb24gPj0gKDgsIDQpOiAgIyB3aWRlSW50IHdhcyBhZGRlZCBpbiBUY2wgOC40CisgICAgICAgICAgICBpbnRlZ2VycyArPSAoMioqMzEsIC0yKiozMS0xLCAyKio2My0xLCAtMioqNjMpCisgICAgICAgICMgYmlnbnVtIHdhcyBhZGRlZCBpbiBUY2wgOC41LCBidXQgaXRzIHN1cHBvcnQgaXMgYWJsZSBvbmx5IHNpbmNlIDguNS44CisgICAgICAgIGlmIChnZXRfdGtfcGF0Y2hsZXZlbCgpID49ICg4LCA2LCAwLCAnZmluYWwnKSBvcgorICAgICAgICAgICAgKDgsIDUsIDgpIDw9IGdldF90a19wYXRjaGxldmVsKCkgPCAoOCwgNikpOgorICAgICAgICAgICAgaW50ZWdlcnMgKz0gKDIqKjYzLCAtMioqNjMtMSwgMioqMTAwMCwgLTIqKjEwMDApCisgICAgICAgIHJldHVybiBpbnRlZ2VycworCisgICAgZGVmIHRlc3RfZ2V0aW50KHNlbGYpOgorICAgICAgICB0Y2wgPSBzZWxmLmludGVycC50aworICAgICAgICBmb3IgaSBpbiBzZWxmLmdldF9pbnRlZ2VycygpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Y2wuZ2V0aW50KCcgJWQgJyAlIGkpLCBpKQorICAgICAgICAgICAgaWYgdGNsX3ZlcnNpb24gPj0gKDgsIDUpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGNsLmdldGludCgnICUjbyAnICUgaSksIGkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRjbC5nZXRpbnQoKCcgJSNvICcgJSBpKS5yZXBsYWNlKCdvJywgJycpKSwgaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGNsLmdldGludCgnICUjeCAnICUgaSksIGkpCisgICAgICAgIGlmIHRjbF92ZXJzaW9uIDwgKDgsIDUpOiAgIyBiaWdudW0gd2FzIGFkZGVkIGluIFRjbCA4LjUKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRjbEVycm9yLCB0Y2wuZ2V0aW50LCBzdHIoMioqMTAwMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGNsLmdldGludCg0MiksIDQyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHRjbC5nZXRpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdGNsLmdldGludCwgJzQyJywgJzEwJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0Y2wuZ2V0aW50LCBiJzQyJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0Y2wuZ2V0aW50LCA0Mi4wKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUY2xFcnJvciwgdGNsLmdldGludCwgJ2EnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoVHlwZUVycm9yLCBWYWx1ZUVycm9yLCBUY2xFcnJvciksCisgICAgICAgICAgICAgICAgICAgICAgICAgIHRjbC5nZXRpbnQsICc0MlwwJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoKFVuaWNvZGVFbmNvZGVFcnJvciwgVmFsdWVFcnJvciwgVGNsRXJyb3IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICB0Y2wuZ2V0aW50LCAnNDJcdWQ4MDAnKQorCisgICAgZGVmIHRlc3RfZ2V0ZG91YmxlKHNlbGYpOgorICAgICAgICB0Y2wgPSBzZWxmLmludGVycC50aworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRjbC5nZXRkb3VibGUoJyA0MiAnKSwgNDIuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Y2wuZ2V0ZG91YmxlKCcgNDIuNSAnKSwgNDIuNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Y2wuZ2V0ZG91YmxlKDQyLjUpLCA0Mi41KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHRjbC5nZXRkb3VibGUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdGNsLmdldGRvdWJsZSwgJzQyLjUnLCAnMTAnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHRjbC5nZXRkb3VibGUsIGInNDIuNScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdGNsLmdldGRvdWJsZSwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRjbEVycm9yLCB0Y2wuZ2V0ZG91YmxlLCAnYScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChUeXBlRXJyb3IsIFZhbHVlRXJyb3IsIFRjbEVycm9yKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdGNsLmdldGRvdWJsZSwgJzQyLjVcMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChVbmljb2RlRW5jb2RlRXJyb3IsIFZhbHVlRXJyb3IsIFRjbEVycm9yKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdGNsLmdldGRvdWJsZSwgJzQyLjVcdWQ4MDAnKQorCisgICAgZGVmIHRlc3RfZ2V0Ym9vbGVhbihzZWxmKToKKyAgICAgICAgdGNsID0gc2VsZi5pbnRlcnAudGsKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0Y2wuZ2V0Ym9vbGVhbignb24nKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0Y2wuZ2V0Ym9vbGVhbignMScpLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydElzKHRjbC5nZXRib29sZWFuKDQyKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0Y2wuZ2V0Ym9vbGVhbigwKSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdGNsLmdldGJvb2xlYW4pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdGNsLmdldGJvb2xlYW4sICdvbicsICcxJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0Y2wuZ2V0Ym9vbGVhbiwgYidvbicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdGNsLmdldGJvb2xlYW4sIDEuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGNsRXJyb3IsIHRjbC5nZXRib29sZWFuLCAnYScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChUeXBlRXJyb3IsIFZhbHVlRXJyb3IsIFRjbEVycm9yKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdGNsLmdldGJvb2xlYW4sICdvblwwJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoKFVuaWNvZGVFbmNvZGVFcnJvciwgVmFsdWVFcnJvciwgVGNsRXJyb3IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICB0Y2wuZ2V0Ym9vbGVhbiwgJ29uXHVkODAwJykKKwogICAgIGRlZiB0ZXN0RXZhbEZpbGUoc2VsZik6CiAgICAgICAgIHRjbCA9IHNlbGYuaW50ZXJwCiAgICAgICAgIHdpdGggb3BlbihzdXBwb3J0LlRFU1RGTiwgJ3cnKSBhcyBmOgpAQCAtMTg4LDExICsyNDcsMTAgQEAKIAogICAgICAgICB3aXRoIHN1cHBvcnQuRW52aXJvbm1lbnRWYXJHdWFyZCgpIGFzIGVudjoKICAgICAgICAgICAgIGVudi51bnNldCgiVENMX0xJQlJBUlkiKQotICAgICAgICAgICAgZiA9IG9zLnBvcGVuKCclcyAtYyAiaW1wb3J0IHRraW50ZXI7IHByaW50KHRraW50ZXIpIicgJSAodW5jX25hbWUsKSkKKyAgICAgICAgICAgIHN0ZG91dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KAorICAgICAgICAgICAgICAgICAgICBbdW5jX25hbWUsICctYycsICdpbXBvcnQgdGtpbnRlcjsgcHJpbnQodGtpbnRlciknXSkKIAotICAgICAgICBzZWxmLmFzc2VydEluKCd0a2ludGVyJywgZi5yZWFkKCkpCi0gICAgICAgICMgZXhpdCBjb2RlIG11c3QgYmUgemVybwotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuY2xvc2UoKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihiJ3RraW50ZXInLCBzdGRvdXQpCiAKICAgICBkZWYgdGVzdF9leHByc3RyaW5nKHNlbGYpOgogICAgICAgICB0Y2wgPSBzZWxmLmludGVycApAQCAtMjI2LDcgKzI4NCw3IEBACiAgICAgICAgIGNoZWNrKCciYVx4YmRcdTIwYWMiJywgJ2FceGJkXHUyMGFjJykKICAgICAgICAgY2hlY2sociciYVx4YmRcdTIwYWMiJywgJ2FceGJkXHUyMGFjJykKICAgICAgICAgY2hlY2sociciYVwwYiInLCAnYVx4MDBiJykKLSAgICAgICAgaWYgdGNsX3ZlcnNpb24gPj0gKDgsIDUpOgorICAgICAgICBpZiB0Y2xfdmVyc2lvbiA+PSAoOCwgNSk6ICAjIGJpZ251bSB3YXMgYWRkZWQgaW4gVGNsIDguNQogICAgICAgICAgICAgY2hlY2soJzIqKjY0Jywgc3RyKDIqKjY0KSkKIAogICAgIGRlZiB0ZXN0X2V4cHJkb3VibGUoc2VsZik6CkBAIC0yNTgsNyArMzE2LDcgQEAKICAgICAgICAgY2hlY2soJ1tzdHJpbmcgbGVuZ3RoICJhXHhiZFx1MjBhYyJdJywgMy4wKQogICAgICAgICBjaGVjayhyJ1tzdHJpbmcgbGVuZ3RoICJhXHhiZFx1MjBhYyJdJywgMy4wKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUY2xFcnJvciwgdGNsLmV4cHJkb3VibGUsICciYWJjIicpCi0gICAgICAgIGlmIHRjbF92ZXJzaW9uID49ICg4LCA1KToKKyAgICAgICAgaWYgdGNsX3ZlcnNpb24gPj0gKDgsIDUpOiAgIyBiaWdudW0gd2FzIGFkZGVkIGluIFRjbCA4LjUKICAgICAgICAgICAgIGNoZWNrKCcyKio2NCcsIGZsb2F0KDIqKjY0KSkKIAogICAgIGRlZiB0ZXN0X2V4cHJsb25nKHNlbGYpOgpAQCAtMjkwLDcgKzM0OCw3IEBACiAgICAgICAgIGNoZWNrKCdbc3RyaW5nIGxlbmd0aCAiYVx4YmRcdTIwYWMiXScsIDMpCiAgICAgICAgIGNoZWNrKHInW3N0cmluZyBsZW5ndGggImFceGJkXHUyMGFjIl0nLCAzKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUY2xFcnJvciwgdGNsLmV4cHJsb25nLCAnImFiYyInKQotICAgICAgICBpZiB0Y2xfdmVyc2lvbiA+PSAoOCwgNSk6CisgICAgICAgIGlmIHRjbF92ZXJzaW9uID49ICg4LCA1KTogICMgYmlnbnVtIHdhcyBhZGRlZCBpbiBUY2wgOC41CiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUY2xFcnJvciwgdGNsLmV4cHJsb25nLCAnMioqNjQnKQogCiAgICAgZGVmIHRlc3RfZXhwcmJvb2xlYW4oc2VsZik6CkBAIC0zMzEsOSArMzg5LDQyIEBACiAgICAgICAgIGNoZWNrKCdbc3RyaW5nIGxlbmd0aCAiYVx4YmRcdTIwYWMiXScsIFRydWUpCiAgICAgICAgIGNoZWNrKHInW3N0cmluZyBsZW5ndGggImFceGJkXHUyMGFjIl0nLCBUcnVlKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUY2xFcnJvciwgdGNsLmV4cHJib29sZWFuLCAnImFiYyInKQotICAgICAgICBpZiB0Y2xfdmVyc2lvbiA+PSAoOCwgNSk6CisgICAgICAgIGlmIHRjbF92ZXJzaW9uID49ICg4LCA1KTogICMgYmlnbnVtIHdhcyBhZGRlZCBpbiBUY2wgOC41CiAgICAgICAgICAgICBjaGVjaygnMioqNjQnLCBUcnVlKQogCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3ModGNsX3ZlcnNpb24gPj0gKDgsIDUpLCAncmVxdWlyZXMgVGNsIHZlcnNpb24gPj0gOC41JykKKyAgICBkZWYgdGVzdF9ib29sZWFucyhzZWxmKToKKyAgICAgICAgdGNsID0gc2VsZi5pbnRlcnAKKyAgICAgICAgZGVmIGNoZWNrKGV4cHIsIGV4cGVjdGVkKToKKyAgICAgICAgICAgIHJlc3VsdCA9IHRjbC5jYWxsKCdleHByJywgZXhwcikKKyAgICAgICAgICAgIGlmIHRjbC53YW50b2JqZWN0cygpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBleHBlY3RlZCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocmVzdWx0LCBpbnQpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4ocmVzdWx0LCAoZXhwciwgc3RyKGludChleHBlY3RlZCkpKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocmVzdWx0LCBzdHIpCisgICAgICAgIGNoZWNrKCd0cnVlJywgVHJ1ZSkKKyAgICAgICAgY2hlY2soJ3llcycsIFRydWUpCisgICAgICAgIGNoZWNrKCdvbicsIFRydWUpCisgICAgICAgIGNoZWNrKCdmYWxzZScsIEZhbHNlKQorICAgICAgICBjaGVjaygnbm8nLCBGYWxzZSkKKyAgICAgICAgY2hlY2soJ29mZicsIEZhbHNlKQorICAgICAgICBjaGVjaygnMSA8IDInLCBUcnVlKQorICAgICAgICBjaGVjaygnMSA+IDInLCBGYWxzZSkKKworICAgIGRlZiB0ZXN0X2V4cHJfYmlnbnVtKHNlbGYpOgorICAgICAgICB0Y2wgPSBzZWxmLmludGVycAorICAgICAgICBmb3IgaSBpbiBzZWxmLmdldF9pbnRlZ2VycygpOgorICAgICAgICAgICAgcmVzdWx0ID0gdGNsLmNhbGwoJ2V4cHInLCBzdHIoaSkpCisgICAgICAgICAgICBpZiBzZWxmLndhbnRvYmplY3RzOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShyZXN1bHQsIGludCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIHN0cihpKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocmVzdWx0LCBzdHIpCisgICAgICAgIGlmIHRjbF92ZXJzaW9uIDwgKDgsIDUpOiAgIyBiaWdudW0gd2FzIGFkZGVkIGluIFRjbCA4LjUKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRjbEVycm9yLCB0Y2wuY2FsbCwgJ2V4cHInLCBzdHIoMioqMTAwMCkpCisKICAgICBkZWYgdGVzdF9wYXNzaW5nX3ZhbHVlcyhzZWxmKToKICAgICAgICAgZGVmIHBhc3NWYWx1ZSh2YWx1ZSk6CiAgICAgICAgICAgICByZXR1cm4gc2VsZi5pbnRlcnAuY2FsbCgnc2V0JywgJ18nLCB2YWx1ZSkKQEAgLTM0NSwxMCArNDM2LDE2IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFzc1ZhbHVlKCdzdHJceDAwaW5nJyksICdzdHJceDAwaW5nJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXNzVmFsdWUoJ3N0clx4MDBpbmdceGJkJyksICdzdHJceDAwaW5nXHhiZCcpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFzc1ZhbHVlKCdzdHJceDAwaW5nXHUyMGFjJyksICdzdHJceDAwaW5nXHUyMGFjJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXNzVmFsdWUoYidzdHJceDAwaW5nJyksICdzdHJceDAwaW5nJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXNzVmFsdWUoYidzdHJceGMwXHg4MGluZycpLCAnc3RyXHgwMGluZycpCi0gICAgICAgIGZvciBpIGluICgwLCAxLCAtMSwgMioqMzEtMSwgLTIqKjMxKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXNzVmFsdWUoYidzdHJceDAwaW5nJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgYidzdHJceDAwaW5nJyBpZiBzZWxmLndhbnRvYmplY3RzIGVsc2UgJ3N0clx4MDBpbmcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhc3NWYWx1ZShiJ3N0clx4YzBceDgwaW5nJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgYidzdHJceGMwXHg4MGluZycgaWYgc2VsZi53YW50b2JqZWN0cyBlbHNlICdzdHJceGMwXHg4MGluZycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFzc1ZhbHVlKGInc3RyXHhiZGluZycpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGInc3RyXHhiZGluZycgaWYgc2VsZi53YW50b2JqZWN0cyBlbHNlICdzdHJceGJkaW5nJykKKyAgICAgICAgZm9yIGkgaW4gc2VsZi5nZXRfaW50ZWdlcnMoKToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFzc1ZhbHVlKGkpLCBpIGlmIHNlbGYud2FudG9iamVjdHMgZWxzZSBzdHIoaSkpCisgICAgICAgIGlmIHRjbF92ZXJzaW9uIDwgKDgsIDUpOiAgIyBiaWdudW0gd2FzIGFkZGVkIGluIFRjbCA4LjUKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFzc1ZhbHVlKDIqKjEwMDApLCBzdHIoMioqMTAwMCkpCiAgICAgICAgIGZvciBmIGluICgwLjAsIDEuMCwgLTEuMCwgMS8zLAogICAgICAgICAgICAgICAgICAgc3lzLmZsb2F0X2luZm8ubWluLCBzeXMuZmxvYXRfaW5mby5tYXgsCiAgICAgICAgICAgICAgICAgICAtc3lzLmZsb2F0X2luZm8ubWluLCAtc3lzLmZsb2F0X2luZm8ubWF4KToKQEAgLTM2MiwxMCArNDU5LDkgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFzc1ZhbHVlKGZsb2F0KCdpbmYnKSksIGZsb2F0KCdpbmYnKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFzc1ZhbHVlKC1mbG9hdCgnaW5mJykpLCAtZmxvYXQoJ2luZicpKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgZiA9IGZsb2F0KHBhc3NWYWx1ZShmbG9hdCgnbmFuJykpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChmLCBmKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbG9hdChwYXNzVmFsdWUoZmxvYXQoJ2luZicpKSksIGZsb2F0KCdpbmYnKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmxvYXQocGFzc1ZhbHVlKC1mbG9hdCgnaW5mJykpKSwgLWZsb2F0KCdpbmYnKSkKKyAgICAgICAgICAgICMgWFhYIE5hTiByZXByZXNlbnRhdGlvbiBjYW4gYmUgbm90IHBhcnNhYmxlIGJ5IGZsb2F0KCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXNzVmFsdWUoKDEsICcyJywgKDMuNCwpKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgKDEsICcyJywgKDMuNCwpKSBpZiBzZWxmLndhbnRvYmplY3RzIGVsc2UgJzEgMiAzLjQnKQogCkBAIC0zNzcsNDIgKzQ3Myw0OCBAQAogICAgICAgICAgICAgcmV0dXJuIGFyZwogICAgICAgICBzZWxmLmludGVycC5jcmVhdGVjb21tYW5kKCd0ZXN0ZnVuYycsIHRlc3RmdW5jKQogICAgICAgICBzZWxmLmFkZENsZWFudXAoc2VsZi5pbnRlcnAudGsuZGVsZXRlY29tbWFuZCwgJ3Rlc3RmdW5jJykKLSAgICAgICAgZGVmIGNoZWNrKHZhbHVlLCBleHBlY3RlZCwgZXE9c2VsZi5hc3NlcnRFcXVhbCk6CisgICAgICAgIGRlZiBjaGVjayh2YWx1ZSwgZXhwZWN0ZWQ9Tm9uZSwgKiwgZXE9c2VsZi5hc3NlcnRFcXVhbCk6CisgICAgICAgICAgICBpZiBleHBlY3RlZCBpcyBOb25lOgorICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gdmFsdWUKKyAgICAgICAgICAgIG5vbmxvY2FsIHJlc3VsdAorICAgICAgICAgICAgcmVzdWx0ID0gTm9uZQogICAgICAgICAgICAgciA9IHNlbGYuaW50ZXJwLmNhbGwoJ3Rlc3RmdW5jJywgdmFsdWUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocmVzdWx0LCBzdHIpCiAgICAgICAgICAgICBlcShyZXN1bHQsIGV4cGVjdGVkKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHIsIHN0cikKICAgICAgICAgICAgIGVxKHIsIGV4cGVjdGVkKQogICAgICAgICBkZWYgZmxvYXRfZXEoYWN0dWFsLCBleHBlY3RlZCk6Ci0gICAgICAgICAgICBleHBlY3RlZCA9IGZsb2F0KGV4cGVjdGVkKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChmbG9hdChhY3R1YWwpLCBleHBlY3RlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsdGE9YWJzKGV4cGVjdGVkKSAqIDFlLTEwKQotICAgICAgICBkZWYgbmFuX2VxKGFjdHVhbCwgZXhwZWN0ZWQpOgotICAgICAgICAgICAgYWN0dWFsID0gZmxvYXQoYWN0dWFsKQotICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChhY3R1YWwsIGFjdHVhbCkKIAogICAgICAgICBjaGVjayhUcnVlLCAnMScpCiAgICAgICAgIGNoZWNrKEZhbHNlLCAnMCcpCi0gICAgICAgIGNoZWNrKCdzdHJpbmcnLCAnc3RyaW5nJykKLSAgICAgICAgY2hlY2soJ3N0cmluZ1x4YmQnLCAnc3RyaW5nXHhiZCcpCi0gICAgICAgIGNoZWNrKCdzdHJpbmdcdTIwYWMnLCAnc3RyaW5nXHUyMGFjJykKKyAgICAgICAgY2hlY2soJ3N0cmluZycpCisgICAgICAgIGNoZWNrKCdzdHJpbmdceGJkJykKKyAgICAgICAgY2hlY2soJ3N0cmluZ1x1MjBhYycpCisgICAgICAgIGNoZWNrKCcnKQogICAgICAgICBjaGVjayhiJ3N0cmluZycsICdzdHJpbmcnKQotICAgICAgICBjaGVjayhiJ3N0cmluZ1x4ZTJceDgyXHhhYycsICdzdHJpbmdcdTIwYWMnKQotICAgICAgICBjaGVjaygnc3RyXHgwMGluZycsICdzdHJceDAwaW5nJykKLSAgICAgICAgY2hlY2soJ3N0clx4MDBpbmdceGJkJywgJ3N0clx4MDBpbmdceGJkJykKLSAgICAgICAgY2hlY2soJ3N0clx4MDBpbmdcdTIwYWMnLCAnc3RyXHgwMGluZ1x1MjBhYycpCi0gICAgICAgIGNoZWNrKGInc3RyXHhjMFx4ODBpbmcnLCAnc3RyXHgwMGluZycpCi0gICAgICAgIGNoZWNrKGInc3RyXHhjMFx4ODBpbmdceGUyXHg4Mlx4YWMnLCAnc3RyXHgwMGluZ1x1MjBhYycpCi0gICAgICAgIGZvciBpIGluICgwLCAxLCAtMSwgMioqMzEtMSwgLTIqKjMxKToKKyAgICAgICAgY2hlY2soYidzdHJpbmdceGUyXHg4Mlx4YWMnLCAnc3RyaW5nXHhlMlx4ODJceGFjJykKKyAgICAgICAgY2hlY2soYidzdHJpbmdceGJkJywgJ3N0cmluZ1x4YmQnKQorICAgICAgICBjaGVjayhiJycsICcnKQorICAgICAgICBjaGVjaygnc3RyXHgwMGluZycpCisgICAgICAgIGNoZWNrKCdzdHJceDAwaW5nXHhiZCcpCisgICAgICAgIGNoZWNrKCdzdHJceDAwaW5nXHUyMGFjJykKKyAgICAgICAgY2hlY2soYidzdHJceDAwaW5nJywgJ3N0clx4MDBpbmcnKQorICAgICAgICBjaGVjayhiJ3N0clx4YzBceDgwaW5nJywgJ3N0clx4YzBceDgwaW5nJykKKyAgICAgICAgY2hlY2soYidzdHJceGMwXHg4MGluZ1x4ZTJceDgyXHhhYycsICdzdHJceGMwXHg4MGluZ1x4ZTJceDgyXHhhYycpCisgICAgICAgIGZvciBpIGluIHNlbGYuZ2V0X2ludGVnZXJzKCk6CiAgICAgICAgICAgICBjaGVjayhpLCBzdHIoaSkpCisgICAgICAgIGlmIHRjbF92ZXJzaW9uIDwgKDgsIDUpOiAgIyBiaWdudW0gd2FzIGFkZGVkIGluIFRjbCA4LjUKKyAgICAgICAgICAgIGNoZWNrKDIqKjEwMDAsIHN0cigyKioxMDAwKSkKICAgICAgICAgZm9yIGYgaW4gKDAuMCwgMS4wLCAtMS4wKToKICAgICAgICAgICAgIGNoZWNrKGYsIHJlcHIoZikpCiAgICAgICAgIGZvciBmIGluICgxLzMuMCwgc3lzLmZsb2F0X2luZm8ubWluLCBzeXMuZmxvYXRfaW5mby5tYXgsCiAgICAgICAgICAgICAgICAgICAtc3lzLmZsb2F0X2luZm8ubWluLCAtc3lzLmZsb2F0X2luZm8ubWF4KToKLSAgICAgICAgICAgIGNoZWNrKGYsIGYsIGVxPWZsb2F0X2VxKQotICAgICAgICBjaGVjayhmbG9hdCgnaW5mJyksICdJbmYnLCBlcT1mbG9hdF9lcSkKLSAgICAgICAgY2hlY2soLWZsb2F0KCdpbmYnKSwgJy1JbmYnLCBlcT1mbG9hdF9lcSkKLSAgICAgICAgY2hlY2soZmxvYXQoJ25hbicpLCAnTmFOJywgZXE9bmFuX2VxKQorICAgICAgICAgICAgY2hlY2soZiwgZXE9ZmxvYXRfZXEpCisgICAgICAgIGNoZWNrKGZsb2F0KCdpbmYnKSwgZXE9ZmxvYXRfZXEpCisgICAgICAgIGNoZWNrKC1mbG9hdCgnaW5mJyksIGVxPWZsb2F0X2VxKQorICAgICAgICAjIFhYWCBOYU4gcmVwcmVzZW50YXRpb24gY2FuIGJlIG5vdCBwYXJzYWJsZSBieSBmbG9hdCgpCiAgICAgICAgIGNoZWNrKCgpLCAnJykKICAgICAgICAgY2hlY2soKDEsICgyLCksICgzLCA0KSwgJzUgNicsICgpKSwgJzEgMiB7MyA0fSB7NSA2fSB7fScpCiAKQEAgLTQ0Nyw5ICs1NDksOSBAQAogICAgICAgICBpZiB0Y2xfdmVyc2lvbiA+PSAoOCwgNSk6CiAgICAgICAgICAgICBpZiBub3Qgc2VsZi53YW50b2JqZWN0cyBvciBnZXRfdGtfcGF0Y2hsZXZlbCgpIDwgKDgsIDUsIDUpOgogICAgICAgICAgICAgICAgICMgQmVmb3JlIDguNS41IGRpY3RzIHdlcmUgY29udmVydGVkIHRvIGxpc3RzIHRocm91Z2ggc3RyaW5nCi0gICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSAoJzEyJywgJ1x1MjBhYycsICdcdTIwYWMnLCAnMy40JykKKyAgICAgICAgICAgICAgICBleHBlY3RlZCA9ICgnMTInLCAnXHUyMGFjJywgJ1x4ZTJceDgyXHhhYycsICczLjQnKQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBleHBlY3RlZCA9ICgxMiwgJ1x1MjBhYycsICdcdTIwYWMnLCAoMy40LCkpCisgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSAoMTIsICdcdTIwYWMnLCBiJ1x4ZTJceDgyXHhhYycsICgzLjQsKSkKICAgICAgICAgICAgIHRlc3RjYXNlcyArPSBbCiAgICAgICAgICAgICAgICAgKGNhbGwoJ2RpY3QnLCAnY3JlYXRlJywgMTIsICdcdTIwYWMnLCBiJ1x4ZTJceDgyXHhhYycsICgzLjQsKSksCiAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkKSwKQEAgLTQ5NCw5ICs1OTYsOSBAQAogICAgICAgICBpZiB0Y2xfdmVyc2lvbiA+PSAoOCwgNSk6CiAgICAgICAgICAgICBpZiBub3Qgc2VsZi53YW50b2JqZWN0cyBvciBnZXRfdGtfcGF0Y2hsZXZlbCgpIDwgKDgsIDUsIDUpOgogICAgICAgICAgICAgICAgICMgQmVmb3JlIDguNS41IGRpY3RzIHdlcmUgY29udmVydGVkIHRvIGxpc3RzIHRocm91Z2ggc3RyaW5nCi0gICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSAoJzEyJywgJ1x1MjBhYycsICdcdTIwYWMnLCAnMy40JykKKyAgICAgICAgICAgICAgICBleHBlY3RlZCA9ICgnMTInLCAnXHUyMGFjJywgJ1x4ZTJceDgyXHhhYycsICczLjQnKQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBleHBlY3RlZCA9ICgxMiwgJ1x1MjBhYycsICdcdTIwYWMnLCAoMy40LCkpCisgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSAoMTIsICdcdTIwYWMnLCBiJ1x4ZTJceDgyXHhhYycsICgzLjQsKSkKICAgICAgICAgICAgIHRlc3RjYXNlcyArPSBbCiAgICAgICAgICAgICAgICAgKGNhbGwoJ2RpY3QnLCAnY3JlYXRlJywgMTIsICdcdTIwYWMnLCBiJ1x4ZTJceDgyXHhhYycsICgzLjQsKSksCiAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkKSwKQEAgLTUwNCwzOSArNjA2LDQwIEBACiAgICAgICAgIGZvciBhcmcsIHJlcyBpbiB0ZXN0Y2FzZXM6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0KGFyZyksIHJlcywgbXNnPWFyZykKIAotICAgIGRlZiB0ZXN0X21lcmdlKHNlbGYpOgotICAgICAgICB3aXRoIHN1cHBvcnQuY2hlY2tfd2FybmluZ3MoKCdtZXJnZSBpcyBkZXByZWNhdGVkJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcpKToKLSAgICAgICAgICAgIG1lcmdlID0gc2VsZi5pbnRlcnAudGsubWVyZ2UKLSAgICAgICAgICAgIGNhbGwgPSBzZWxmLmludGVycC50ay5jYWxsCi0gICAgICAgICAgICB0ZXN0Y2FzZXMgPSBbCi0gICAgICAgICAgICAgICAgKCgpLCAnJyksCi0gICAgICAgICAgICAgICAgKCgnYScsKSwgJ2EnKSwKLSAgICAgICAgICAgICAgICAoKDIsKSwgJzInKSwKLSAgICAgICAgICAgICAgICAoKCcnLCksICd7fScpLAotICAgICAgICAgICAgICAgICgneycsICdcXHsnKSwKLSAgICAgICAgICAgICAgICAoKCdhJywgJ2InLCAnYycpLCAnYSBiIGMnKSwKLSAgICAgICAgICAgICAgICAoKCcgJywgJ1x0JywgJ1xyJywgJ1xuJyksICd7IH0ge1x0fSB7XHJ9IHtcbn0nKSwKLSAgICAgICAgICAgICAgICAoKCdhJywgJyAnLCAnYycpLCAnYSB7IH0gYycpLAotICAgICAgICAgICAgICAgICgoJ2EnLCAn4oKsJyksICdhIOKCrCcpLAotICAgICAgICAgICAgICAgICgoJ2EnLCAnXFUwMDAxMDRhMicpLCAnYSBcVTAwMDEwNGEyJyksCi0gICAgICAgICAgICAgICAgKCgnYScsIGInXHhlMlx4ODJceGFjJyksICdhIOKCrCcpLAotICAgICAgICAgICAgICAgICgoJ2EnLCAoJ2InLCAnYycpKSwgJ2Ege2IgY30nKSwKLSAgICAgICAgICAgICAgICAoKCdhJywgMiksICdhIDInKSwKLSAgICAgICAgICAgICAgICAoKCdhJywgMy40KSwgJ2EgMy40JyksCi0gICAgICAgICAgICAgICAgKCgnYScsICgyLCAzLjQpKSwgJ2EgezIgMy40fScpLAotICAgICAgICAgICAgICAgICgoKSwgJycpLAotICAgICAgICAgICAgICAgICgoY2FsbCgnbGlzdCcsIDEsICcyJywgKDMuNCwpKSwpLCAnezEgMiAzLjR9JyksCi0gICAgICAgICAgICBdCi0gICAgICAgICAgICBpZiB0Y2xfdmVyc2lvbiA+PSAoOCwgNSk6Ci0gICAgICAgICAgICAgICAgdGVzdGNhc2VzICs9IFsKLSAgICAgICAgICAgICAgICAgICAgKChjYWxsKCdkaWN0JywgJ2NyZWF0ZScsIDEyLCAnXHUyMGFjJywgYidceGUyXHg4Mlx4YWMnLCAoMy40LCkpLCksCi0gICAgICAgICAgICAgICAgICAgICAnezEyIOKCrCDigqwgMy40fScpLAotICAgICAgICAgICAgICAgIF0KLSAgICAgICAgICAgIGZvciBhcmdzLCByZXMgaW4gdGVzdGNhc2VzOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVyZ2UoKmFyZ3MpLCByZXMsIG1zZz1hcmdzKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZURlY29kZUVycm9yLCBtZXJnZSwgYidceDgwJykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVFbmNvZGVFcnJvciwgbWVyZ2UsICdcdWRjODAnKQorICAgIGRlZiB0ZXN0X3NwbGl0ZGljdChzZWxmKToKKyAgICAgICAgc3BsaXRkaWN0ID0gdGtpbnRlci5fc3BsaXRkaWN0CisgICAgICAgIHRjbCA9IHNlbGYuaW50ZXJwLnRrCisKKyAgICAgICAgYXJnID0gJy1hIHsxIDIgM30gLXNvbWV0aGluZyBmb28gc3RhdHVzIHt9JworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0ZGljdCh0Y2wsIGFyZywgRmFsc2UpLAorICAgICAgICAgICAgeyctYSc6ICcxIDIgMycsICctc29tZXRoaW5nJzogJ2ZvbycsICdzdGF0dXMnOiAnJ30pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BsaXRkaWN0KHRjbCwgYXJnKSwKKyAgICAgICAgICAgIHsnYSc6ICcxIDIgMycsICdzb21ldGhpbmcnOiAnZm9vJywgJ3N0YXR1cyc6ICcnfSkKKworICAgICAgICBhcmcgPSAoJy1hJywgKDEsIDIsIDMpLCAnLXNvbWV0aGluZycsICdmb28nLCAnc3RhdHVzJywgJ3t9JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGxpdGRpY3QodGNsLCBhcmcsIEZhbHNlKSwKKyAgICAgICAgICAgIHsnLWEnOiAoMSwgMiwgMyksICctc29tZXRoaW5nJzogJ2ZvbycsICdzdGF0dXMnOiAne30nfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGxpdGRpY3QodGNsLCBhcmcpLAorICAgICAgICAgICAgeydhJzogKDEsIDIsIDMpLCAnc29tZXRoaW5nJzogJ2ZvbycsICdzdGF0dXMnOiAne30nfSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIHNwbGl0ZGljdCwgdGNsLCAnLWEgYiAtYyAnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIHNwbGl0ZGljdCwgdGNsLCAoJy1hJywgJ2InLCAnLWMnKSkKKworICAgICAgICBhcmcgPSB0Y2wuY2FsbCgnbGlzdCcsCisgICAgICAgICAgICAgICAgICAgICAgICAnLWEnLCAoMSwgMiwgMyksICctc29tZXRoaW5nJywgJ2ZvbycsICdzdGF0dXMnLCAoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGxpdGRpY3QodGNsLCBhcmcpLAorICAgICAgICAgICAgeydhJzogKDEsIDIsIDMpIGlmIHNlbGYud2FudG9iamVjdHMgZWxzZSAnMSAyIDMnLAorICAgICAgICAgICAgICdzb21ldGhpbmcnOiAnZm9vJywgJ3N0YXR1cyc6ICcnfSkKKworICAgICAgICBpZiB0Y2xfdmVyc2lvbiA+PSAoOCwgNSk6CisgICAgICAgICAgICBhcmcgPSB0Y2wuY2FsbCgnZGljdCcsICdjcmVhdGUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1hJywgKDEsIDIsIDMpLCAnLXNvbWV0aGluZycsICdmb28nLCAnc3RhdHVzJywgKCkpCisgICAgICAgICAgICBpZiBub3Qgc2VsZi53YW50b2JqZWN0cyBvciBnZXRfdGtfcGF0Y2hsZXZlbCgpIDwgKDgsIDUsIDUpOgorICAgICAgICAgICAgICAgICMgQmVmb3JlIDguNS41IGRpY3RzIHdlcmUgY29udmVydGVkIHRvIGxpc3RzIHRocm91Z2ggc3RyaW5nCisgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSB7J2EnOiAnMSAyIDMnLCAnc29tZXRoaW5nJzogJ2ZvbycsICdzdGF0dXMnOiAnJ30KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSB7J2EnOiAoMSwgMiwgMyksICdzb21ldGhpbmcnOiAnZm9vJywgJ3N0YXR1cyc6ICcnfQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGxpdGRpY3QodGNsLCBhcmcpLCBleHBlY3RlZCkKIAogCiBjbGFzcyBCaWdtZW1UY2xUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTU0NywxMCArNjUwLDM1IEBACiAgICAgQHN1cHBvcnQuY3B5dGhvbl9vbmx5CiAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoSU5UX01BWCA8IFBZX1NTSVpFX1RfTUFYLCAibmVlZHMgVUlOVF9NQVggPCBTSVpFX01BWCIpCiAgICAgQHN1cHBvcnQuYmlnbWVtdGVzdChzaXplPUlOVF9NQVggKyAxLCBtZW11c2U9NSwgZHJ5X3J1bj1GYWxzZSkKLSAgICBkZWYgdGVzdF9odWdlX3N0cmluZyhzZWxmLCBzaXplKToKKyAgICBkZWYgdGVzdF9odWdlX3N0cmluZ19jYWxsKHNlbGYsIHNpemUpOgogICAgICAgICB2YWx1ZSA9ICcgJyAqIHNpemUKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgc2VsZi5pbnRlcnAuY2FsbCwgJ3NldCcsICdfJywgdmFsdWUpCiAKKyAgICBAc3VwcG9ydC5jcHl0aG9uX29ubHkKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhJTlRfTUFYIDwgUFlfU1NJWkVfVF9NQVgsICJuZWVkcyBVSU5UX01BWCA8IFNJWkVfTUFYIikKKyAgICBAc3VwcG9ydC5iaWdtZW10ZXN0KHNpemU9SU5UX01BWCArIDEsIG1lbXVzZT05LCBkcnlfcnVuPUZhbHNlKQorICAgIGRlZiB0ZXN0X2h1Z2Vfc3RyaW5nX2J1aWx0aW5zKHNlbGYsIHNpemUpOgorICAgICAgICB2YWx1ZSA9ICcxJyArICcgJyAqIHNpemUKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgc2VsZi5pbnRlcnAudGsuZ2V0aW50LCB2YWx1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgc2VsZi5pbnRlcnAudGsuZ2V0ZG91YmxlLCB2YWx1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgc2VsZi5pbnRlcnAudGsuZ2V0Ym9vbGVhbiwgdmFsdWUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIHNlbGYuaW50ZXJwLmV2YWwsIHZhbHVlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBzZWxmLmludGVycC5ldmFsZmlsZSwgdmFsdWUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIHNlbGYuaW50ZXJwLnJlY29yZCwgdmFsdWUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIHNlbGYuaW50ZXJwLmFkZGVycm9yaW5mbywgdmFsdWUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIHNlbGYuaW50ZXJwLnNldHZhciwgdmFsdWUsICd4JywgJ2EnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBzZWxmLmludGVycC5zZXR2YXIsICd4JywgdmFsdWUsICdhJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgc2VsZi5pbnRlcnAudW5zZXR2YXIsIHZhbHVlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBzZWxmLmludGVycC51bnNldHZhciwgJ3gnLCB2YWx1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgc2VsZi5pbnRlcnAuYWRkZXJyb3JpbmZvLCB2YWx1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgc2VsZi5pbnRlcnAuZXhwcnN0cmluZywgdmFsdWUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIHNlbGYuaW50ZXJwLmV4cHJsb25nLCB2YWx1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgc2VsZi5pbnRlcnAuZXhwcmJvb2xlYW4sIHZhbHVlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBzZWxmLmludGVycC5zcGxpdGxpc3QsIHZhbHVlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBzZWxmLmludGVycC5zcGxpdCwgdmFsdWUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIHNlbGYuaW50ZXJwLmNyZWF0ZWNvbW1hbmQsIHZhbHVlLCBtYXgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIHNlbGYuaW50ZXJwLmRlbGV0ZWNvbW1hbmQsIHZhbHVlKQorCiAKIGRlZiBzZXRVcE1vZHVsZSgpOgogICAgIGlmIHN1cHBvcnQudmVyYm9zZToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdGVsbmV0bGliLnB5IGIvTGliL3Rlc3QvdGVzdF90ZWxuZXRsaWIucHkKaW5kZXggYzlmMmNjYi4uZWUxYzM1NyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF90ZWxuZXRsaWIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF90ZWxuZXRsaWIucHkKQEAgLTEsMTAgKzEsOSBAQAogaW1wb3J0IHNvY2tldAotaW1wb3J0IHNlbGVjdAoraW1wb3J0IHNlbGVjdG9ycwogaW1wb3J0IHRlbG5ldGxpYgogaW1wb3J0IHRpbWUKIGltcG9ydCBjb250ZXh0bGliCiAKLWltcG9ydCB1bml0dGVzdAogZnJvbSB1bml0dGVzdCBpbXBvcnQgVGVzdENhc2UKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogdGhyZWFkaW5nID0gc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCd0aHJlYWRpbmcnKQpAQCAtMTEyLDQwICsxMTEsMzcgQEAKICAgICAgICAgc2VsZi5fbWVzc2FnZXMgKz0gb3V0LmdldHZhbHVlKCkKICAgICAgICAgcmV0dXJuCiAKLWRlZiBtb2NrX3NlbGVjdCgqc19hcmdzKToKLSAgICBibG9jayA9IEZhbHNlCi0gICAgZm9yIGwgaW4gc19hcmdzOgotICAgICAgICBmb3IgZm9iIGluIGw6Ci0gICAgICAgICAgICBpZiBpc2luc3RhbmNlKGZvYiwgVGVsbmV0QWxpa2UpOgotICAgICAgICAgICAgICAgIGJsb2NrID0gZm9iLnNvY2suYmxvY2sKLSAgICBpZiBibG9jazoKLSAgICAgICAgcmV0dXJuIFtbXSwgW10sIFtdXQotICAgIGVsc2U6Ci0gICAgICAgIHJldHVybiBzX2FyZ3MKLQotY2xhc3MgTW9ja1BvbGxlcihvYmplY3QpOgotICAgIHRlc3RfY2FzZSA9IE5vbmUgICMgU2V0IGR1cmluZyBUZXN0Q2FzZSBzZXRVcC4KK2NsYXNzIE1vY2tTZWxlY3RvcihzZWxlY3RvcnMuQmFzZVNlbGVjdG9yKToKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmKToKLSAgICAgICAgc2VsZi5fZmlsZV9vYmpzID0gW10KKyAgICAgICAgc2VsZi5rZXlzID0ge30KIAotICAgIGRlZiByZWdpc3RlcihzZWxmLCBmZCwgZXZlbnRtYXNrKToKLSAgICAgICAgc2VsZi50ZXN0X2Nhc2UuYXNzZXJ0VHJ1ZShoYXNhdHRyKGZkLCAnZmlsZW5vJyksIGZkKQotICAgICAgICBzZWxmLnRlc3RfY2FzZS5hc3NlcnRFcXVhbChldmVudG1hc2ssIHNlbGVjdC5QT0xMSU58c2VsZWN0LlBPTExQUkkpCi0gICAgICAgIHNlbGYuX2ZpbGVfb2Jqcy5hcHBlbmQoZmQpCisgICAgQHByb3BlcnR5CisgICAgZGVmIHJlc29sdXRpb24oc2VsZik6CisgICAgICAgIHJldHVybiAxZS0zCiAKLSAgICBkZWYgcG9sbChzZWxmLCB0aW1lb3V0PU5vbmUpOgorICAgIGRlZiByZWdpc3RlcihzZWxmLCBmaWxlb2JqLCBldmVudHMsIGRhdGE9Tm9uZSk6CisgICAgICAgIGtleSA9IHNlbGVjdG9ycy5TZWxlY3RvcktleShmaWxlb2JqLCAwLCBldmVudHMsIGRhdGEpCisgICAgICAgIHNlbGYua2V5c1tmaWxlb2JqXSA9IGtleQorICAgICAgICByZXR1cm4ga2V5CisKKyAgICBkZWYgdW5yZWdpc3RlcihzZWxmLCBmaWxlb2JqKToKKyAgICAgICAgcmV0dXJuIHNlbGYua2V5cy5wb3AoZmlsZW9iaikKKworICAgIGRlZiBzZWxlY3Qoc2VsZiwgdGltZW91dD1Ob25lKToKICAgICAgICAgYmxvY2sgPSBGYWxzZQotICAgICAgICBmb3IgZm9iIGluIHNlbGYuX2ZpbGVfb2JqczoKLSAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZm9iLCBUZWxuZXRBbGlrZSk6Ci0gICAgICAgICAgICAgICAgYmxvY2sgPSBmb2Iuc29jay5ibG9jaworICAgICAgICBmb3IgZmlsZW9iaiBpbiBzZWxmLmtleXM6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGZpbGVvYmosIFRlbG5ldEFsaWtlKToKKyAgICAgICAgICAgICAgICBibG9jayA9IGZpbGVvYmouc29jay5ibG9jaworICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgIGlmIGJsb2NrOgogICAgICAgICAgICAgcmV0dXJuIFtdCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gemlwKHNlbGYuX2ZpbGVfb2JqcywgW3NlbGVjdC5QT0xMSU5dKmxlbihzZWxmLl9maWxlX29ianMpKQorICAgICAgICAgICAgcmV0dXJuIFsoa2V5LCBrZXkuZXZlbnRzKSBmb3Iga2V5IGluIHNlbGYua2V5cy52YWx1ZXMoKV0KIAotICAgIGRlZiB1bnJlZ2lzdGVyKHNlbGYsIGZkKToKLSAgICAgICAgc2VsZi5fZmlsZV9vYmpzLnJlbW92ZShmZCkKKyAgICBkZWYgZ2V0X21hcChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYua2V5cworCiAKIEBjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VyCiBkZWYgdGVzdF9zb2NrZXQocmVhZHMpOgpAQCAtMTU5LDcgKzE1NSw3IEBACiAgICAgICAgIHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbiA9IG9sZF9jb25uCiAgICAgcmV0dXJuCiAKLWRlZiB0ZXN0X3RlbG5ldChyZWFkcz0oKSwgY2xzPVRlbG5ldEFsaWtlLCB1c2VfcG9sbD1Ob25lKToKK2RlZiB0ZXN0X3RlbG5ldChyZWFkcz0oKSwgY2xzPVRlbG5ldEFsaWtlKToKICAgICAnJycgcmV0dXJuIGEgdGVsbmV0bGliLlRlbG5ldCBvYmplY3QgdGhhdCB1c2VzIGEgU29ja2V0U3R1YiB3aXRoCiAgICAgICAgIHJlYWRzIHF1ZXVlZCB1cCB0byBiZSByZWFkICcnJwogICAgIGZvciB4IGluIHJlYWRzOgpAQCAtMTY3LDI5ICsxNjMsMTQgQEAKICAgICB3aXRoIHRlc3Rfc29ja2V0KHJlYWRzKToKICAgICAgICAgdGVsbmV0ID0gY2xzKCdkdW1teScsIDApCiAgICAgICAgIHRlbG5ldC5fbWVzc2FnZXMgPSAnJyAjIGRlYnVnbGV2ZWwgb3V0cHV0Ci0gICAgICAgIGlmIHVzZV9wb2xsIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgaWYgdXNlX3BvbGwgYW5kIG5vdCB0ZWxuZXQuX2hhc19wb2xsOgotICAgICAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCdzZWxlY3QucG9sbCgpIHJlcXVpcmVkLicpCi0gICAgICAgICAgICB0ZWxuZXQuX2hhc19wb2xsID0gdXNlX3BvbGwKICAgICByZXR1cm4gdGVsbmV0CiAKLQogY2xhc3MgRXhwZWN0QW5kUmVhZFRlc3RDYXNlKFRlc3RDYXNlKToKICAgICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgIHNlbGYub2xkX3NlbGVjdCA9IHNlbGVjdC5zZWxlY3QKLSAgICAgICAgc2VsZWN0LnNlbGVjdCA9IG1vY2tfc2VsZWN0Ci0gICAgICAgIHNlbGYub2xkX3BvbGwgPSBGYWxzZQotICAgICAgICBpZiBoYXNhdHRyKHNlbGVjdCwgJ3BvbGwnKToKLSAgICAgICAgICAgIHNlbGYub2xkX3BvbGwgPSBzZWxlY3QucG9sbAotICAgICAgICAgICAgc2VsZWN0LnBvbGwgPSBNb2NrUG9sbGVyCi0gICAgICAgICAgICBNb2NrUG9sbGVyLnRlc3RfY2FzZSA9IHNlbGYKLQorICAgICAgICBzZWxmLm9sZF9zZWxlY3RvciA9IHRlbG5ldGxpYi5fVGVsbmV0U2VsZWN0b3IKKyAgICAgICAgdGVsbmV0bGliLl9UZWxuZXRTZWxlY3RvciA9IE1vY2tTZWxlY3RvcgogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKLSAgICAgICAgaWYgc2VsZi5vbGRfcG9sbDoKLSAgICAgICAgICAgIE1vY2tQb2xsZXIudGVzdF9jYXNlID0gTm9uZQotICAgICAgICAgICAgc2VsZWN0LnBvbGwgPSBzZWxmLm9sZF9wb2xsCi0gICAgICAgIHNlbGVjdC5zZWxlY3QgPSBzZWxmLm9sZF9zZWxlY3QKLQorICAgICAgICB0ZWxuZXRsaWIuX1RlbG5ldFNlbGVjdG9yID0gc2VsZi5vbGRfc2VsZWN0b3IKIAogY2xhc3MgUmVhZFRlc3RzKEV4cGVjdEFuZFJlYWRUZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RfcmVhZF91bnRpbChzZWxmKToKQEAgLTIwOCwyMiArMTg5LDYgQEAKICAgICAgICAgZGF0YSA9IHRlbG5ldC5yZWFkX3VudGlsKGInbWF0Y2gnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIGV4cGVjdCkKIAotICAgIGRlZiB0ZXN0X3JlYWRfdW50aWxfd2l0aF9wb2xsKHNlbGYpOgotICAgICAgICAiIiJVc2Ugc2VsZWN0LnBvbGwoKSB0byBpbXBsZW1lbnQgdGVsbmV0LnJlYWRfdW50aWwoKS4iIiIKLSAgICAgICAgd2FudCA9IFtiJ3gnICogMTAsIGInbWF0Y2gnLCBiJ3knICogMTBdCi0gICAgICAgIHRlbG5ldCA9IHRlc3RfdGVsbmV0KHdhbnQsIHVzZV9wb2xsPVRydWUpCi0gICAgICAgIHNlbGVjdC5zZWxlY3QgPSBsYW1iZGEgKl86IHNlbGYuZmFpbCgndW5leHBlY3RlZCBzZWxlY3QoKSBjYWxsLicpCi0gICAgICAgIGRhdGEgPSB0ZWxuZXQucmVhZF91bnRpbChiJ21hdGNoJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBiJycuam9pbih3YW50WzotMV0pKQotCi0gICAgZGVmIHRlc3RfcmVhZF91bnRpbF93aXRoX3NlbGVjdChzZWxmKToKLSAgICAgICAgIiIiVXNlIHNlbGVjdC5zZWxlY3QoKSB0byBpbXBsZW1lbnQgdGVsbmV0LnJlYWRfdW50aWwoKS4iIiIKLSAgICAgICAgd2FudCA9IFtiJ3gnICogMTAsIGInbWF0Y2gnLCBiJ3knICogMTBdCi0gICAgICAgIHRlbG5ldCA9IHRlc3RfdGVsbmV0KHdhbnQsIHVzZV9wb2xsPUZhbHNlKQotICAgICAgICBpZiBzZWxmLm9sZF9wb2xsOgotICAgICAgICAgICAgc2VsZWN0LnBvbGwgPSBsYW1iZGEgKl86IHNlbGYuZmFpbCgndW5leHBlY3RlZCBwb2xsKCkgY2FsbC4nKQotICAgICAgICBkYXRhID0gdGVsbmV0LnJlYWRfdW50aWwoYidtYXRjaCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgYicnLmpvaW4od2FudFs6LTFdKSkKIAogICAgIGRlZiB0ZXN0X3JlYWRfYWxsKHNlbGYpOgogICAgICAgICAiIiIKQEAgLTQyNywyMyArMzkyLDYgQEAKICAgICAgICAgKF8sXyxkYXRhKSA9IHRlbG5ldC5leHBlY3QoW2InbWF0Y2gnXSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBiJycuam9pbih3YW50WzotMV0pKQogCi0gICAgZGVmIHRlc3RfZXhwZWN0X3dpdGhfcG9sbChzZWxmKToKLSAgICAgICAgIiIiVXNlIHNlbGVjdC5wb2xsKCkgdG8gaW1wbGVtZW50IHRlbG5ldC5leHBlY3QoKS4iIiIKLSAgICAgICAgd2FudCA9IFtiJ3gnICogMTAsIGInbWF0Y2gnLCBiJ3knICogMTBdCi0gICAgICAgIHRlbG5ldCA9IHRlc3RfdGVsbmV0KHdhbnQsIHVzZV9wb2xsPVRydWUpCi0gICAgICAgIHNlbGVjdC5zZWxlY3QgPSBsYW1iZGEgKl86IHNlbGYuZmFpbCgndW5leHBlY3RlZCBzZWxlY3QoKSBjYWxsLicpCi0gICAgICAgIChfLF8sZGF0YSkgPSB0ZWxuZXQuZXhwZWN0KFtiJ21hdGNoJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgYicnLmpvaW4od2FudFs6LTFdKSkKLQotICAgIGRlZiB0ZXN0X2V4cGVjdF93aXRoX3NlbGVjdChzZWxmKToKLSAgICAgICAgIiIiVXNlIHNlbGVjdC5zZWxlY3QoKSB0byBpbXBsZW1lbnQgdGVsbmV0LmV4cGVjdCgpLiIiIgotICAgICAgICB3YW50ID0gW2IneCcgKiAxMCwgYidtYXRjaCcsIGIneScgKiAxMF0KLSAgICAgICAgdGVsbmV0ID0gdGVzdF90ZWxuZXQod2FudCwgdXNlX3BvbGw9RmFsc2UpCi0gICAgICAgIGlmIHNlbGYub2xkX3BvbGw6Ci0gICAgICAgICAgICBzZWxlY3QucG9sbCA9IGxhbWJkYSAqXzogc2VsZi5mYWlsKCd1bmV4cGVjdGVkIHBvbGwoKSBjYWxsLicpCi0gICAgICAgIChfLF8sZGF0YSkgPSB0ZWxuZXQuZXhwZWN0KFtiJ21hdGNoJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgYicnLmpvaW4od2FudFs6LTFdKSkKLQogCiBkZWYgdGVzdF9tYWluKHZlcmJvc2U9Tm9uZSk6CiAgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoR2VuZXJhbFRlc3RzLCBSZWFkVGVzdHMsIFdyaXRlVGVzdHMsIE9wdGlvblRlc3RzLApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF90ZW1wZmlsZS5weSBiL0xpYi90ZXN0L3Rlc3RfdGVtcGZpbGUucHkKaW5kZXggNWE5NzAzNS4uNjY0MTI5OCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF90ZW1wZmlsZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3RlbXBmaWxlLnB5CkBAIC05LDYgKzksNyBAQAogaW1wb3J0IHdhcm5pbmdzCiBpbXBvcnQgY29udGV4dGxpYgogaW1wb3J0IHdlYWtyZWYKK2Zyb20gdW5pdHRlc3QgaW1wb3J0IG1vY2sKIAogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQsIHNjcmlwdF9oZWxwZXIKQEAgLTM3LDcgKzM4LDcgQEAKICMgQ29tbW9uIGZ1bmN0aW9uYWxpdHkuCiBjbGFzcyBCYXNlVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogCi0gICAgc3RyX2NoZWNrID0gcmUuY29tcGlsZShyIlthLXpBLVowLTlfLV17Nn0kIikKKyAgICBzdHJfY2hlY2sgPSByZS5jb21waWxlKHIiXlthLXowLTlfLV17OH0kIikKIAogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgc2VsZi5fd2FybmluZ3NfbWFuYWdlciA9IHN1cHBvcnQuY2hlY2tfd2FybmluZ3MoKQpAQCAtNjQsNyArNjUsNyBAQAogCiAgICAgICAgIG5iYXNlID0gbmJhc2VbbGVuKHByZSk6bGVuKG5iYXNlKS1sZW4oc3VmKV0KICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuc3RyX2NoZWNrLm1hdGNoKG5iYXNlKSwKLSAgICAgICAgICAgICAgICAgICAgICJyYW5kb20gc3RyaW5nICclcycgZG9lcyBub3QgbWF0Y2ggL15bYS16QS1aMC05Xy1dezZ9JC8iCisgICAgICAgICAgICAgICAgICAgICAicmFuZG9tIHN0cmluZyAnJXMnIGRvZXMgbm90IG1hdGNoIF5bYS16MC05Xy1dezh9JCIKICAgICAgICAgICAgICAgICAgICAgICUgbmJhc2UpCiAKIApAQCAtMTUzLDcgKzE1NCw3IEBACiAgICAgICAgICAgICAgICAgIyB2aWEgYW55IGJ1Z3MgYWJvdmUKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIG9zLmtpbGwocGlkLCBzaWduYWwuU0lHS0lMTCkKLSAgICAgICAgICAgICAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvcjoKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgb3MuY2xvc2UocmVhZF9mZCkKICAgICAgICAgICAgIG9zLmNsb3NlKHdyaXRlX2ZkKQpAQCAtMTkyLDcgKzE5Myw3IEBACiAKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBkaXJuYW1lID0gb3MuZ2V0Y3dkKCkKLSAgICAgICAgICAgIGV4Y2VwdCAoQXR0cmlidXRlRXJyb3IsIG9zLmVycm9yKToKKyAgICAgICAgICAgIGV4Y2VwdCAoQXR0cmlidXRlRXJyb3IsIE9TRXJyb3IpOgogICAgICAgICAgICAgICAgIGRpcm5hbWUgPSBvcy5jdXJkaXIKIAogICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihkaXJuYW1lLCBjYW5kKQpAQCAtMjczLDcgKzI3NCwzOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW1iZGE6IGl0ZXIobmFtZXMpKQogCiAKLWNsYXNzIFRlc3RNa3N0ZW1wSW5uZXIoQmFzZVRlc3RDYXNlKToKK2NsYXNzIFRlc3RCYWRUZW1wZGlyOgorCisgICAgZGVmIHRlc3RfcmVhZF9vbmx5X2RpcmVjdG9yeShzZWxmKToKKyAgICAgICAgd2l0aCBfaW5zaWRlX2VtcHR5X3RlbXBfZGlyKCk6CisgICAgICAgICAgICBvbGRtb2RlID0gbW9kZSA9IG9zLnN0YXQodGVtcGZpbGUudGVtcGRpcikuc3RfbW9kZQorICAgICAgICAgICAgbW9kZSAmPSB+KHN0YXQuU19JV1VTUiB8IHN0YXQuU19JV0dSUCB8IHN0YXQuU19JV09USCkKKyAgICAgICAgICAgIG9zLmNobW9kKHRlbXBmaWxlLnRlbXBkaXIsIG1vZGUpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaWYgb3MuYWNjZXNzKHRlbXBmaWxlLnRlbXBkaXIsIG9zLldfT0spOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJjYW4ndCBzZXQgdGhlIGRpcmVjdG9yeSByZWFkLW9ubHkiKQorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUGVybWlzc2lvbkVycm9yKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5tYWtlX3RlbXAoKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MubGlzdGRpcih0ZW1wZmlsZS50ZW1wZGlyKSwgW10pCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIG9zLmNobW9kKHRlbXBmaWxlLnRlbXBkaXIsIG9sZG1vZGUpCisKKyAgICBkZWYgdGVzdF9ub25leGlzdGluZ19kaXJlY3Rvcnkoc2VsZik6CisgICAgICAgIHdpdGggX2luc2lkZV9lbXB0eV90ZW1wX2RpcigpOgorICAgICAgICAgICAgdGVtcGRpciA9IG9zLnBhdGguam9pbih0ZW1wZmlsZS50ZW1wZGlyLCAnbm9uZXhpc3RlbnQnKQorICAgICAgICAgICAgd2l0aCBzdXBwb3J0LnN3YXBfYXR0cih0ZW1wZmlsZSwgJ3RlbXBkaXInLCB0ZW1wZGlyKToKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEZpbGVOb3RGb3VuZEVycm9yKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5tYWtlX3RlbXAoKQorCisgICAgZGVmIHRlc3Rfbm9uX2RpcmVjdG9yeShzZWxmKToKKyAgICAgICAgd2l0aCBfaW5zaWRlX2VtcHR5X3RlbXBfZGlyKCk6CisgICAgICAgICAgICB0ZW1wZGlyID0gb3MucGF0aC5qb2luKHRlbXBmaWxlLnRlbXBkaXIsICdmaWxlJykKKyAgICAgICAgICAgIG9wZW4odGVtcGRpciwgJ3diJykuY2xvc2UoKQorICAgICAgICAgICAgd2l0aCBzdXBwb3J0LnN3YXBfYXR0cih0ZW1wZmlsZSwgJ3RlbXBkaXInLCB0ZW1wZGlyKToKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKChOb3RBRGlyZWN0b3J5RXJyb3IsIEZpbGVOb3RGb3VuZEVycm9yKSk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYubWFrZV90ZW1wKCkKKworCitjbGFzcyBUZXN0TWtzdGVtcElubmVyKFRlc3RCYWRUZW1wZGlyLCBCYXNlVGVzdENhc2UpOgogICAgICIiIlRlc3QgdGhlIGludGVybmFsIGZ1bmN0aW9uIF9ta3N0ZW1wX2lubmVyLiIiIgogCiAgICAgY2xhc3MgbWtzdGVtcGVkOgpAQCAtMzMyLDcgKzM2NSw3IEBACiAgICAgICAgIGZpbGUgPSBzZWxmLmRvX2NyZWF0ZSgpCiAgICAgICAgIG1vZGUgPSBzdGF0LlNfSU1PREUob3Muc3RhdChmaWxlLm5hbWUpLnN0X21vZGUpCiAgICAgICAgIGV4cGVjdGVkID0gMG82MDAKLSAgICAgICAgaWYgc3lzLnBsYXRmb3JtIGluICgnd2luMzInLCAnb3MyZW14Jyk6CisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgogICAgICAgICAgICAgIyBUaGVyZSdzIG5vIGRpc3RpbmN0aW9uIGFtb25nICd1c2VyJywgJ2dyb3VwJyBhbmQgJ3dvcmxkJzsKICAgICAgICAgICAgICMgcmVwbGljYXRlIHRoZSAndXNlcicgYml0cy4KICAgICAgICAgICAgIHVzZXIgPSBleHBlY3RlZCA+PiA2CkBAIC0zNDksNiArMzgyLDcgQEAKICAgICAgICAgICAgIHY9InEiCiAKICAgICAgICAgZmlsZSA9IHNlbGYuZG9fY3JlYXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5nZXRfaW5oZXJpdGFibGUoZmlsZS5mZCksIEZhbHNlKQogICAgICAgICBmZCA9ICIlZCIgJSBmaWxlLmZkCiAKICAgICAgICAgdHJ5OgpAQCAtMzY1LDcgKzM5OSw3IEBACiAgICAgICAgICMgT24gV2luZG93cyBhIHNwYXduKiAvcGF0aC8gd2l0aCBlbWJlZGRlZCBzcGFjZXMgc2hvdWxkbid0IGJlIHF1b3RlZCwKICAgICAgICAgIyBidXQgYW4gYXJnIHdpdGggZW1iZWRkZWQgc3BhY2VzIHNob3VsZCBiZSBkZWNvcmF0ZWQgd2l0aCBkb3VibGUKICAgICAgICAgIyBxdW90ZXMgb24gZWFjaCBlbmQKLSAgICAgICAgaWYgc3lzLnBsYXRmb3JtIGluICgnd2luMzInLCk6CisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgogICAgICAgICAgICAgZGVjb3JhdGVkID0gJyIlcyInICUgc3lzLmV4ZWN1dGFibGUKICAgICAgICAgICAgIHRlc3RlciA9ICciJXMiJyAlIHRlc3RlcgogICAgICAgICBlbHNlOgpAQCAtMzg3LDcgKzQyMSw3IEBACiAgICAgICAgIG9zLmxzZWVrKGYuZmQsIDAsIG9zLlNFRUtfU0VUKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnJlYWQoZi5mZCwgMjApLCBiImJsYXQiKQogCi0gICAgZGVmIGRlZmF1bHRfbWtzdGVtcF9pbm5lcihzZWxmKToKKyAgICBkZWYgbWFrZV90ZW1wKHNlbGYpOgogICAgICAgICByZXR1cm4gdGVtcGZpbGUuX21rc3RlbXBfaW5uZXIodGVtcGZpbGUuZ2V0dGVtcGRpcigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGZpbGUudGVtcGxhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJywKQEAgLTM5OCwxMSArNDMyLDExIEBACiAgICAgICAgICMgdGhlIGNob3NlbiBuYW1lIGFscmVhZHkgZXhpc3RzCiAgICAgICAgIHdpdGggX2luc2lkZV9lbXB0eV90ZW1wX2RpcigpLCBcCiAgICAgICAgICAgICAgX21vY2tfY2FuZGlkYXRlX25hbWVzKCdhYWEnLCAnYWFhJywgJ2JiYicpOgotICAgICAgICAgICAgKGZkMSwgbmFtZTEpID0gc2VsZi5kZWZhdWx0X21rc3RlbXBfaW5uZXIoKQorICAgICAgICAgICAgKGZkMSwgbmFtZTEpID0gc2VsZi5tYWtlX3RlbXAoKQogICAgICAgICAgICAgb3MuY2xvc2UoZmQxKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5hbWUxLmVuZHN3aXRoKCdhYWEnKSkKIAotICAgICAgICAgICAgKGZkMiwgbmFtZTIpID0gc2VsZi5kZWZhdWx0X21rc3RlbXBfaW5uZXIoKQorICAgICAgICAgICAgKGZkMiwgbmFtZTIpID0gc2VsZi5tYWtlX3RlbXAoKQogICAgICAgICAgICAgb3MuY2xvc2UoZmQyKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5hbWUyLmVuZHN3aXRoKCdiYmInKSkKIApAQCAtNDE0LDcgKzQ0OCw3IEBACiAgICAgICAgICAgICBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkaXIuZW5kc3dpdGgoJ2FhYScpKQogCi0gICAgICAgICAgICAoZmQsIG5hbWUpID0gc2VsZi5kZWZhdWx0X21rc3RlbXBfaW5uZXIoKQorICAgICAgICAgICAgKGZkLCBuYW1lKSA9IHNlbGYubWFrZV90ZW1wKCkKICAgICAgICAgICAgIG9zLmNsb3NlKGZkKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5hbWUuZW5kc3dpdGgoJ2JiYicpKQogCkBAIC00NzUsNiArNTA5LDIwIEBACiAKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEgaXMgYikKIAorICAgIGRlZiB0ZXN0X2Nhc2Vfc2Vuc2l0aXZlKHNlbGYpOgorICAgICAgICAjIGdldHRlbXBkaXIgc2hvdWxkIG5vdCBmbGF0dGVuIGl0cyBjYXNlCisgICAgICAgICMgZXZlbiBvbiBhIGNhc2UtaW5zZW5zaXRpdmUgZmlsZSBzeXN0ZW0KKyAgICAgICAgY2FzZV9zZW5zaXRpdmVfdGVtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAoIi1UZW1wIikKKyAgICAgICAgX3RlbXBkaXIsIHRlbXBmaWxlLnRlbXBkaXIgPSB0ZW1wZmlsZS50ZW1wZGlyLCBOb25lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggc3VwcG9ydC5FbnZpcm9ubWVudFZhckd1YXJkKCkgYXMgZW52OgorICAgICAgICAgICAgICAgICMgRmFrZSB0aGUgZmlyc3QgZW52IHZhciB3aGljaCBpcyBjaGVja2VkIGFzIGEgY2FuZGlkYXRlCisgICAgICAgICAgICAgICAgZW52WyJUTVBESVIiXSA9IGNhc2Vfc2Vuc2l0aXZlX3RlbXBkaXIKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlbXBmaWxlLmdldHRlbXBkaXIoKSwgY2FzZV9zZW5zaXRpdmVfdGVtcGRpcikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHRlbXBmaWxlLnRlbXBkaXIgPSBfdGVtcGRpcgorICAgICAgICAgICAgc3VwcG9ydC5ybWRpcihjYXNlX3NlbnNpdGl2ZV90ZW1wZGlyKQorCiAKIGNsYXNzIFRlc3RNa3N0ZW1wKEJhc2VUZXN0Q2FzZSk6CiAgICAgIiIiVGVzdCBta3N0ZW1wKCkuIiIiCkBAIC01MTIsOSArNTYwLDEyIEBACiAgICAgICAgICAgICBvcy5ybWRpcihkaXIpCiAKIAotY2xhc3MgVGVzdE1rZHRlbXAoQmFzZVRlc3RDYXNlKToKK2NsYXNzIFRlc3RNa2R0ZW1wKFRlc3RCYWRUZW1wZGlyLCBCYXNlVGVzdENhc2UpOgogICAgICIiIlRlc3QgbWtkdGVtcCgpLiIiIgogCisgICAgZGVmIG1ha2VfdGVtcChzZWxmKToKKyAgICAgICAgcmV0dXJuIHRlbXBmaWxlLm1rZHRlbXAoKQorCiAgICAgZGVmIGRvX2NyZWF0ZShzZWxmLCBkaXI9Tm9uZSwgcHJlPSIiLCBzdWY9IiIpOgogICAgICAgICBpZiBkaXIgaXMgTm9uZToKICAgICAgICAgICAgIGRpciA9IHRlbXBmaWxlLmdldHRlbXBkaXIoKQpAQCAtNTYzLDcgKzYxNCw3IEBACiAgICAgICAgICAgICBtb2RlID0gc3RhdC5TX0lNT0RFKG9zLnN0YXQoZGlyKS5zdF9tb2RlKQogICAgICAgICAgICAgbW9kZSAmPSAwbzc3NyAjIE1hc2sgb2ZmIHN0aWNreSBiaXRzIGluaGVyaXRlZCBmcm9tIC90bXAKICAgICAgICAgICAgIGV4cGVjdGVkID0gMG83MDAKLSAgICAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSBpbiAoJ3dpbjMyJywgJ29zMmVteCcpOgorICAgICAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6CiAgICAgICAgICAgICAgICAgIyBUaGVyZSdzIG5vIGRpc3RpbmN0aW9uIGFtb25nICd1c2VyJywgJ2dyb3VwJyBhbmQgJ3dvcmxkJzsKICAgICAgICAgICAgICAgICAjIHJlcGxpY2F0ZSB0aGUgJ3VzZXInIGJpdHMuCiAgICAgICAgICAgICAgICAgdXNlciA9IGV4cGVjdGVkID4+IDYKQEAgLTY5MSw2ICs3NDIsMTkgQEAKICAgICAgICAgICAgICMgTm8gcmVmZXJlbmNlIGN5Y2xlIHdhcyBjcmVhdGVkLgogICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUod3IoKSkKIAorICAgIGRlZiB0ZXN0X2l0ZXIoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzIzNzAwOiBnZXR0aW5nIGl0ZXJhdG9yIGZyb20gYSB0ZW1wb3JhcnkgZmlsZSBzaG91bGQga2VlcAorICAgICAgICAjIGl0IGFsaXZlIGFzIGxvbmcgYXMgaXQncyBiZWluZyBpdGVyYXRlZCBvdmVyCisgICAgICAgIGxpbmVzID0gW2Inc3BhbVxuJywgYidlZ2dzXG4nLCBiJ2JlYW5zXG4nXQorICAgICAgICBkZWYgbWFrZV9maWxlKCk6CisgICAgICAgICAgICBmID0gdGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlGaWxlKG1vZGU9J3crYicpCisgICAgICAgICAgICBmLndyaXRlKGInJy5qb2luKGxpbmVzKSkKKyAgICAgICAgICAgIGYuc2VlaygwKQorICAgICAgICAgICAgcmV0dXJuIGYKKyAgICAgICAgZm9yIGksIGwgaW4gZW51bWVyYXRlKG1ha2VfZmlsZSgpKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobCwgbGluZXNbaV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaSwgbGVuKGxpbmVzKSAtIDEpCisKICAgICBkZWYgdGVzdF9jcmVhdGVzX25hbWVkKHNlbGYpOgogICAgICAgICAjIE5hbWVkVGVtcG9yYXJ5RmlsZSBjcmVhdGVzIGZpbGVzIHdpdGggbmFtZXMKICAgICAgICAgZiA9IHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZSgpCkBAIC03NDMsNiArODA3LDE5IEBACiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB1c2VfY2xvc2VkKQogCisgICAgZGVmIHRlc3Rfbm9fbGVha19mZChzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMjEwNTg6IGRvbid0IGxlYWsgZmlsZSBkZXNjcmlwdG9yIHdoZW4gaW8ub3BlbigpIGZhaWxzCisgICAgICAgIGNsb3NlZCA9IFtdCisgICAgICAgIG9zX2Nsb3NlID0gb3MuY2xvc2UKKyAgICAgICAgZGVmIGNsb3NlKGZkKToKKyAgICAgICAgICAgIGNsb3NlZC5hcHBlbmQoZmQpCisgICAgICAgICAgICBvc19jbG9zZShmZCkKKworICAgICAgICB3aXRoIG1vY2sucGF0Y2goJ29zLmNsb3NlJywgc2lkZV9lZmZlY3Q9Y2xvc2UpOgorICAgICAgICAgICAgd2l0aCBtb2NrLnBhdGNoKCdpby5vcGVuJywgc2lkZV9lZmZlY3Q9VmFsdWVFcnJvcik6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlGaWxlKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGNsb3NlZCksIDEpCisKICAgICAjIEhvdyB0byB0ZXN0IHRoZSBtb2RlIGFuZCBidWZzaXplIHBhcmFtZXRlcnM/CiAKIApAQCAtMTA0Niw2ICsxMTIzLDIwIEBACiAgICAgICAgICAgICByb3VuZHRyaXAoIlx1MDM5QiIsICJ3KyIsIGVuY29kaW5nPSJ1dGYtMTYiKQogICAgICAgICAgICAgcm91bmR0cmlwKCJmb29cclxuIiwgIncrIiwgbmV3bGluZT0iIikKIAorICAgICAgICBkZWYgdGVzdF9ub19sZWFrX2ZkKHNlbGYpOgorICAgICAgICAgICAgIyBJc3N1ZSAjMjEwNTg6IGRvbid0IGxlYWsgZmlsZSBkZXNjcmlwdG9yIHdoZW4gaW8ub3BlbigpIGZhaWxzCisgICAgICAgICAgICBjbG9zZWQgPSBbXQorICAgICAgICAgICAgb3NfY2xvc2UgPSBvcy5jbG9zZQorICAgICAgICAgICAgZGVmIGNsb3NlKGZkKToKKyAgICAgICAgICAgICAgICBjbG9zZWQuYXBwZW5kKGZkKQorICAgICAgICAgICAgICAgIG9zX2Nsb3NlKGZkKQorCisgICAgICAgICAgICB3aXRoIG1vY2sucGF0Y2goJ29zLmNsb3NlJywgc2lkZV9lZmZlY3Q9Y2xvc2UpOgorICAgICAgICAgICAgICAgIHdpdGggbW9jay5wYXRjaCgnaW8ub3BlbicsIHNpZGVfZWZmZWN0PVZhbHVlRXJyb3IpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0ZW1wZmlsZS5UZW1wb3JhcnlGaWxlKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjbG9zZWQpLCAxKQorCisKIAogIyBIZWxwZXIgZm9yIHRlc3RfZGVsX29uX3NodXRkb3duCiBjbGFzcyBOdWxsZWRNb2R1bGVzOgpAQCAtMTEzOSw4ICsxMjMwLDkgQEAKICAgICBkZWYgdGVzdF9kZWxfb25fc2h1dGRvd24oc2VsZik6CiAgICAgICAgICMgQSBUZW1wb3JhcnlEaXJlY3RvcnkgbWF5IGJlIGNsZWFuZWQgdXAgZHVyaW5nIHNodXRkb3duCiAgICAgICAgIHdpdGggc2VsZi5kb19jcmVhdGUoKSBhcyBkaXI6Ci0gICAgICAgICAgICBmb3IgbW9kIGluICgnb3MnLCAnc2h1dGlsJywgJ3N5cycsICd0ZW1wZmlsZScsICd3YXJuaW5ncycpOgorICAgICAgICAgICAgZm9yIG1vZCBpbiAoJ2J1aWx0aW5zJywgJ29zJywgJ3NodXRpbCcsICdzeXMnLCAndGVtcGZpbGUnLCAnd2FybmluZ3MnKToKICAgICAgICAgICAgICAgICBjb2RlID0gIiIiaWYgVHJ1ZToKKyAgICAgICAgICAgICAgICAgICAgaW1wb3J0IGJ1aWx0aW5zCiAgICAgICAgICAgICAgICAgICAgIGltcG9ydCBvcwogICAgICAgICAgICAgICAgICAgICBpbXBvcnQgc2h1dGlsCiAgICAgICAgICAgICAgICAgICAgIGltcG9ydCBzeXMKQEAgLTExNjUsNiArMTI1NywzMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUZW1wb3JhcnlEaXJlY3RvcnkgJXMgZXhpc3RzIGFmdGVyIGNsZWFudXAiICUgdG1wX25hbWUpCiAgICAgICAgICAgICAgICAgZXJyID0gZXJyLmRlY29kZSgndXRmLTgnLCAnYmFja3NsYXNocmVwbGFjZScpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbigiRXhjZXB0aW9uICIsIGVycikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKCJSZXNvdXJjZVdhcm5pbmc6IEltcGxpY2l0bHkgY2xlYW5pbmcgdXAiLCBlcnIpCisKKyAgICBkZWYgdGVzdF9leGl0X29uX3NodXRkb3duKHNlbGYpOgorICAgICAgICAjIElzc3VlICMyMjQyNworICAgICAgICB3aXRoIHNlbGYuZG9fY3JlYXRlKCkgYXMgZGlyOgorICAgICAgICAgICAgY29kZSA9ICIiImlmIFRydWU6CisgICAgICAgICAgICAgICAgaW1wb3J0IHN5cworICAgICAgICAgICAgICAgIGltcG9ydCB0ZW1wZmlsZQorICAgICAgICAgICAgICAgIGltcG9ydCB3YXJuaW5ncworCisgICAgICAgICAgICAgICAgZGVmIGdlbmVyYXRvcigpOgorICAgICAgICAgICAgICAgICAgICB3aXRoIHRlbXBmaWxlLlRlbXBvcmFyeURpcmVjdG9yeShkaXI9e2RpciFyfSkgYXMgdG1wOgorICAgICAgICAgICAgICAgICAgICAgICAgeWllbGQgdG1wCisgICAgICAgICAgICAgICAgZyA9IGdlbmVyYXRvcigpCisgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC5idWZmZXIud3JpdGUobmV4dChnKS5lbmNvZGUoKSkKKworICAgICAgICAgICAgICAgIHdhcm5pbmdzLmZpbHRlcndhcm5pbmdzKCJhbHdheXMiLCBjYXRlZ29yeT1SZXNvdXJjZVdhcm5pbmcpCisgICAgICAgICAgICAgICAgIiIiLmZvcm1hdChkaXI9ZGlyKQorICAgICAgICAgICAgcmMsIG91dCwgZXJyID0gc2NyaXB0X2hlbHBlci5hc3NlcnRfcHl0aG9uX29rKCItYyIsIGNvZGUpCisgICAgICAgICAgICB0bXBfbmFtZSA9IG91dC5kZWNvZGUoKS5zdHJpcCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKHRtcF9uYW1lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJUZW1wb3JhcnlEaXJlY3RvcnkgJXMgZXhpc3RzIGFmdGVyIGNsZWFudXAiICUgdG1wX25hbWUpCisgICAgICAgICAgICBlcnIgPSBlcnIuZGVjb2RlKCd1dGYtOCcsICdiYWNrc2xhc2hyZXBsYWNlJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oIkV4Y2VwdGlvbiAiLCBlcnIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCJSZXNvdXJjZVdhcm5pbmc6IEltcGxpY2l0bHkgY2xlYW5pbmcgdXAiLCBlcnIpCiAKICAgICBkZWYgdGVzdF93YXJuaW5nc19vbl9jbGVhbnVwKHNlbGYpOgogICAgICAgICAjIFJlc291cmNlV2FybmluZyB3aWxsIGJlIHRyaWdnZXJlZCBieSBfX2RlbF9fCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3RleHR3cmFwLnB5IGIvTGliL3Rlc3QvdGVzdF90ZXh0d3JhcC5weQppbmRleCBjODZmNWNmLi5lYTdjMDg5IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3RleHR3cmFwLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdGV4dHdyYXAucHkKQEAgLTksOSArOSw4IEBACiAjCiAKIGltcG9ydCB1bml0dGVzdAotZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiAKLWZyb20gdGV4dHdyYXAgaW1wb3J0IFRleHRXcmFwcGVyLCB3cmFwLCBmaWxsLCBkZWRlbnQsIGluZGVudAorZnJvbSB0ZXh0d3JhcCBpbXBvcnQgVGV4dFdyYXBwZXIsIHdyYXAsIGZpbGwsIGRlZGVudCwgaW5kZW50LCBzaG9ydGVuCiAKIAogY2xhc3MgQmFzZVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTQzMCw2ICs0MjksOTAgQEAKICAgICAgICAgc2VsZi5jaGVja193cmFwKHRleHQsIDcsIFsiYWEgXHhlNFx4ZTQtIiwgIlx4ZTRceGU0Il0pCiAKIAorY2xhc3MgTWF4TGluZXNUZXN0Q2FzZShCYXNlVGVzdENhc2UpOgorICAgIHRleHQgPSAiSGVsbG8gdGhlcmUsIGhvdyBhcmUgeW91IHRoaXMgZmluZSBkYXk/ICBJJ20gZ2xhZCB0byBoZWFyIGl0ISIKKworICAgIGRlZiB0ZXN0X3NpbXBsZShzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja193cmFwKHNlbGYudGV4dCwgMTIsCisgICAgICAgICAgICAgICAgICAgICAgICBbIkhlbGxvIFsuLi5dIl0sCisgICAgICAgICAgICAgICAgICAgICAgICBtYXhfbGluZXM9MCkKKyAgICAgICAgc2VsZi5jaGVja193cmFwKHNlbGYudGV4dCwgMTIsCisgICAgICAgICAgICAgICAgICAgICAgICBbIkhlbGxvIFsuLi5dIl0sCisgICAgICAgICAgICAgICAgICAgICAgICBtYXhfbGluZXM9MSkKKyAgICAgICAgc2VsZi5jaGVja193cmFwKHNlbGYudGV4dCwgMTIsCisgICAgICAgICAgICAgICAgICAgICAgICBbIkhlbGxvIHRoZXJlLCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgImhvdyBbLi4uXSJdLAorICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2xpbmVzPTIpCisgICAgICAgIHNlbGYuY2hlY2tfd3JhcChzZWxmLnRleHQsIDEzLAorICAgICAgICAgICAgICAgICAgICAgICAgWyJIZWxsbyB0aGVyZSwiLAorICAgICAgICAgICAgICAgICAgICAgICAgICJob3cgYXJlIFsuLi5dIl0sCisgICAgICAgICAgICAgICAgICAgICAgICBtYXhfbGluZXM9MikKKyAgICAgICAgc2VsZi5jaGVja193cmFwKHNlbGYudGV4dCwgODAsIFtzZWxmLnRleHRdLCBtYXhfbGluZXM9MSkKKyAgICAgICAgc2VsZi5jaGVja193cmFwKHNlbGYudGV4dCwgMTIsCisgICAgICAgICAgICAgICAgICAgICAgICBbIkhlbGxvIHRoZXJlLCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgImhvdyBhcmUgeW91IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAidGhpcyBmaW5lIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiZGF5PyAgSSdtIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiZ2xhZCB0byBoZWFyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiaXQhIl0sCisgICAgICAgICAgICAgICAgICAgICAgICBtYXhfbGluZXM9NikKKworICAgIGRlZiB0ZXN0X3NwYWNlcyhzZWxmKToKKyAgICAgICAgIyBzdHJpcCBzcGFjZXMgYmVmb3JlIHBsYWNlaG9sZGVyCisgICAgICAgIHNlbGYuY2hlY2tfd3JhcChzZWxmLnRleHQsIDEyLAorICAgICAgICAgICAgICAgICAgICAgICAgWyJIZWxsbyB0aGVyZSwiLAorICAgICAgICAgICAgICAgICAgICAgICAgICJob3cgYXJlIHlvdSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgInRoaXMgZmluZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgImRheT8gWy4uLl0iXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1heF9saW5lcz00KQorICAgICAgICAjIHBsYWNlaG9sZGVyIGF0IHRoZSBzdGFydCBvZiBsaW5lCisgICAgICAgIHNlbGYuY2hlY2tfd3JhcChzZWxmLnRleHQsIDYsCisgICAgICAgICAgICAgICAgICAgICAgICBbIkhlbGxvIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiWy4uLl0iXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1heF9saW5lcz0yKQorICAgICAgICAjIGZpbmFsIHNwYWNlcworICAgICAgICBzZWxmLmNoZWNrX3dyYXAoc2VsZi50ZXh0ICsgJyAnICogMTAsIDEyLAorICAgICAgICAgICAgICAgICAgICAgICAgWyJIZWxsbyB0aGVyZSwiLAorICAgICAgICAgICAgICAgICAgICAgICAgICJob3cgYXJlIHlvdSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgInRoaXMgZmluZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgImRheT8gIEknbSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgImdsYWQgdG8gaGVhciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIml0ISJdLAorICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2xpbmVzPTYpCisKKyAgICBkZWYgdGVzdF9wbGFjZWhvbGRlcihzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja193cmFwKHNlbGYudGV4dCwgMTIsCisgICAgICAgICAgICAgICAgICAgICAgICBbIkhlbGxvLi4uIl0sCisgICAgICAgICAgICAgICAgICAgICAgICBtYXhfbGluZXM9MSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPScuLi4nKQorICAgICAgICBzZWxmLmNoZWNrX3dyYXAoc2VsZi50ZXh0LCAxMiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFsiSGVsbG8gdGhlcmUsIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiaG93IGFyZS4uLiJdLAorICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2xpbmVzPTIsCisgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0nLi4uJykKKyAgICAgICAgIyBsb25nIHBsYWNlaG9sZGVyIGFuZCBpbmRlbnRhdGlvbgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgd3JhcChzZWxmLnRleHQsIDE2LCBpbml0aWFsX2luZGVudD0nICAgICcsCisgICAgICAgICAgICAgICAgIG1heF9saW5lcz0xLCBwbGFjZWhvbGRlcj0nIFt0cnVuY2F0ZWRdLi4uJykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIHdyYXAoc2VsZi50ZXh0LCAxNiwgc3Vic2VxdWVudF9pbmRlbnQ9JyAgICAnLAorICAgICAgICAgICAgICAgICBtYXhfbGluZXM9MiwgcGxhY2Vob2xkZXI9JyBbdHJ1bmNhdGVkXS4uLicpCisgICAgICAgIHNlbGYuY2hlY2tfd3JhcChzZWxmLnRleHQsIDE2LAorICAgICAgICAgICAgICAgICAgICAgICAgWyIgICAgSGVsbG8gdGhlcmUsIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiICBbdHJ1bmNhdGVkXS4uLiJdLAorICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2xpbmVzPTIsCisgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsX2luZGVudD0nICAgICcsCisgICAgICAgICAgICAgICAgICAgICAgICBzdWJzZXF1ZW50X2luZGVudD0nICAnLAorICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9JyBbdHJ1bmNhdGVkXS4uLicpCisgICAgICAgIHNlbGYuY2hlY2tfd3JhcChzZWxmLnRleHQsIDE2LAorICAgICAgICAgICAgICAgICAgICAgICAgWyIgIFt0cnVuY2F0ZWRdLi4uIl0sCisgICAgICAgICAgICAgICAgICAgICAgICBtYXhfbGluZXM9MSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxfaW5kZW50PScgICcsCisgICAgICAgICAgICAgICAgICAgICAgICBzdWJzZXF1ZW50X2luZGVudD0nICAgICcsCisgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0nIFt0cnVuY2F0ZWRdLi4uJykKKyAgICAgICAgc2VsZi5jaGVja193cmFwKHNlbGYudGV4dCwgODAsIFtzZWxmLnRleHRdLCBwbGFjZWhvbGRlcj0nLicgKiAxMDAwKQorCisKIGNsYXNzIExvbmdXb3JkVGVzdENhc2UgKEJhc2VUZXN0Q2FzZSk6CiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBzZWxmLndyYXBwZXIgPSBUZXh0V3JhcHBlcigpCkBAIC00OTAsNiArNTczLDE0IEBACiAgICAgICAgIHJlc3VsdCA9IHdyYXAoc2VsZi50ZXh0LCB3aWR0aD0zMCwgYnJlYWtfbG9uZ193b3Jkcz0wKQogICAgICAgICBzZWxmLmNoZWNrKHJlc3VsdCwgZXhwZWN0KQogCisgICAgZGVmIHRlc3RfbWF4X2xpbmVzX2xvbmcoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfd3JhcChzZWxmLnRleHQsIDEyLAorICAgICAgICAgICAgICAgICAgICAgICAgWydEaWQgeW91IHNheSAnLAorICAgICAgICAgICAgICAgICAgICAgICAgICcic3VwZXJjYWxpZnInLAorICAgICAgICAgICAgICAgICAgICAgICAgICdhZ2lsaXN0aWNleHAnLAorICAgICAgICAgICAgICAgICAgICAgICAgICdbLi4uXSddLAorICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2xpbmVzPTQpCisKIAogY2xhc3MgSW5kZW50VGVzdENhc2VzKEJhc2VUZXN0Q2FzZSk6CiAKQEAgLTY0MSw2ICs3MzIsMTEgQEAKICAgICAgICAgZXhwZWN0ID0gImhlbGxvIHRoZXJlXG4gIGhvdyBhcmUgeW91PyIKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3QsIGRlZGVudCh0ZXh0KSkKIAorICAgICAgICAjIHRlc3QgbWFyZ2luIGlzIHNtYWxsZXIgdGhhbiBzbWFsbGVzdCBpbmRlbnQKKyAgICAgICAgdGV4dCA9ICIgIFx0aGVsbG8gdGhlcmVcbiAgIFx0aG93IGFyZSB5b3U/XG4gXHRJJ20gZmluZSwgdGhhbmtzIgorICAgICAgICBleHBlY3QgPSAiIFx0aGVsbG8gdGhlcmVcbiAgXHRob3cgYXJlIHlvdT9cblx0SSdtIGZpbmUsIHRoYW5rcyIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3QsIGRlZGVudCh0ZXh0KSkKKwogCiAjIFRlc3QgdGV4dHdyYXAuaW5kZW50CiBjbGFzcyBJbmRlbnRUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC03NzcsMTIgKzg3Myw2MiBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmRlbnQodGV4dCwgcHJlZml4LCBwcmVkaWNhdGUpLCBleHBlY3QpCiAKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KFdyYXBUZXN0Q2FzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvbmdXb3JkVGVzdENhc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRlbnRUZXN0Q2FzZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWRlbnRUZXN0Q2FzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZGVudFRlc3RDYXNlKQorY2xhc3MgU2hvcnRlblRlc3RDYXNlKEJhc2VUZXN0Q2FzZSk6CisKKyAgICBkZWYgY2hlY2tfc2hvcnRlbihzZWxmLCB0ZXh0LCB3aWR0aCwgZXhwZWN0LCAqKmt3YXJncyk6CisgICAgICAgIHJlc3VsdCA9IHNob3J0ZW4odGV4dCwgd2lkdGgsICoqa3dhcmdzKQorICAgICAgICBzZWxmLmNoZWNrKHJlc3VsdCwgZXhwZWN0KQorCisgICAgZGVmIHRlc3Rfc2ltcGxlKHNlbGYpOgorICAgICAgICAjIFNpbXBsZSBjYXNlOiBqdXN0IHdvcmRzLCBzcGFjZXMsIGFuZCBhIGJpdCBvZiBwdW5jdHVhdGlvbgorICAgICAgICB0ZXh0ID0gIkhlbGxvIHRoZXJlLCBob3cgYXJlIHlvdSB0aGlzIGZpbmUgZGF5PyBJJ20gZ2xhZCB0byBoZWFyIGl0ISIKKworICAgICAgICBzZWxmLmNoZWNrX3Nob3J0ZW4odGV4dCwgMTgsICJIZWxsbyB0aGVyZSwgWy4uLl0iKQorICAgICAgICBzZWxmLmNoZWNrX3Nob3J0ZW4odGV4dCwgbGVuKHRleHQpLCB0ZXh0KQorICAgICAgICBzZWxmLmNoZWNrX3Nob3J0ZW4odGV4dCwgbGVuKHRleHQpIC0gMSwKKyAgICAgICAgICAgICJIZWxsbyB0aGVyZSwgaG93IGFyZSB5b3UgdGhpcyBmaW5lIGRheT8gIgorICAgICAgICAgICAgIkknbSBnbGFkIHRvIFsuLi5dIikKKworICAgIGRlZiB0ZXN0X3BsYWNlaG9sZGVyKHNlbGYpOgorICAgICAgICB0ZXh0ID0gIkhlbGxvIHRoZXJlLCBob3cgYXJlIHlvdSB0aGlzIGZpbmUgZGF5PyBJJ20gZ2xhZCB0byBoZWFyIGl0ISIKKworICAgICAgICBzZWxmLmNoZWNrX3Nob3J0ZW4odGV4dCwgMTcsICJIZWxsbyB0aGVyZSwkJCIsIHBsYWNlaG9sZGVyPSckJCcpCisgICAgICAgIHNlbGYuY2hlY2tfc2hvcnRlbih0ZXh0LCAxOCwgIkhlbGxvIHRoZXJlLCBob3ckJCIsIHBsYWNlaG9sZGVyPSckJCcpCisgICAgICAgIHNlbGYuY2hlY2tfc2hvcnRlbih0ZXh0LCAxOCwgIkhlbGxvIHRoZXJlLCAkJCIsIHBsYWNlaG9sZGVyPScgJCQnKQorICAgICAgICBzZWxmLmNoZWNrX3Nob3J0ZW4odGV4dCwgbGVuKHRleHQpLCB0ZXh0LCBwbGFjZWhvbGRlcj0nJCQnKQorICAgICAgICBzZWxmLmNoZWNrX3Nob3J0ZW4odGV4dCwgbGVuKHRleHQpIC0gMSwKKyAgICAgICAgICAgICJIZWxsbyB0aGVyZSwgaG93IGFyZSB5b3UgdGhpcyBmaW5lIGRheT8gIgorICAgICAgICAgICAgIkknbSBnbGFkIHRvIGhlYXIkJCIsIHBsYWNlaG9sZGVyPSckJCcpCisKKyAgICBkZWYgdGVzdF9lbXB0eV9zdHJpbmcoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfc2hvcnRlbigiIiwgNiwgIiIpCisKKyAgICBkZWYgdGVzdF93aGl0ZXNwYWNlKHNlbGYpOgorICAgICAgICAjIFdoaXRlc3BhY2UgY29sbGFwc2luZworICAgICAgICB0ZXh0ID0gIiIiCisgICAgICAgICAgICBUaGlzIGlzIGEgIHBhcmFncmFwaCB0aGF0ICBhbHJlYWR5IGhhcworICAgICAgICAgICAgbGluZSBicmVha3MgYW5kIFx0IHRhYnMgdG9vLiIiIgorICAgICAgICBzZWxmLmNoZWNrX3Nob3J0ZW4odGV4dCwgNjIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUaGlzIGlzIGEgcGFyYWdyYXBoIHRoYXQgYWxyZWFkeSBoYXMgbGluZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJicmVha3MgYW5kIHRhYnMgdG9vLiIpCisgICAgICAgIHNlbGYuY2hlY2tfc2hvcnRlbih0ZXh0LCA2MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRoaXMgaXMgYSBwYXJhZ3JhcGggdGhhdCBhbHJlYWR5IGhhcyBsaW5lICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJyZWFrcyBhbmQgWy4uLl0iKQorCisgICAgICAgIHNlbGYuY2hlY2tfc2hvcnRlbigiaGVsbG8gICAgICB3b3JsZCEgICIsIDEyLCAiaGVsbG8gd29ybGQhIikKKyAgICAgICAgc2VsZi5jaGVja19zaG9ydGVuKCJoZWxsbyAgICAgIHdvcmxkISAgIiwgMTEsICJoZWxsbyBbLi4uXSIpCisgICAgICAgICMgVGhlIGxlYWRpbmcgc3BhY2UgaXMgdHJpbW1lZCBmcm9tIHRoZSBwbGFjZWhvbGRlcgorICAgICAgICAjIChpdCB3b3VsZCBiZSB1Z2x5IG90aGVyd2lzZSkuCisgICAgICAgIHNlbGYuY2hlY2tfc2hvcnRlbigiaGVsbG8gICAgICB3b3JsZCEgICIsIDEwLCAiWy4uLl0iKQorCisgICAgZGVmIHRlc3Rfd2lkdGhfdG9vX3NtYWxsX2Zvcl9wbGFjZWhvbGRlcihzZWxmKToKKyAgICAgICAgc2hvcnRlbigieCIgKiAyMCwgd2lkdGg9OCwgcGxhY2Vob2xkZXI9IiguLi4uLi4pIikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIHNob3J0ZW4oIngiICogMjAsIHdpZHRoPTgsIHBsYWNlaG9sZGVyPSIoLi4uLi4uLikiKQorCisgICAgZGVmIHRlc3RfZmlyc3Rfd29yZF90b29fbG9uZ19idXRfcGxhY2Vob2xkZXJfZml0cyhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19zaG9ydGVuKCJIZWxsb28iLCA1LCAiWy4uLl0iKQorCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdGhyZWFkLnB5IGIvTGliL3Rlc3QvdGVzdF90aHJlYWQucHkKaW5kZXggNTQzNzI4MS4uNjE0NDkwMSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF90aHJlYWQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF90aHJlYWQucHkKQEAgLTY4LDcgKzY4LDcgQEAKICAgICAgICAgdGhyZWFkLnN0YWNrX3NpemUoMCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0aHJlYWQuc3RhY2tfc2l6ZSgpLCAwLCAic3RhY2tfc2l6ZSBub3QgcmVzZXQgdG8gZGVmYXVsdCIpCiAKLSAgICBAdW5pdHRlc3Quc2tpcElmKG9zLm5hbWUgbm90IGluICgibnQiLCAib3MyIiwgInBvc2l4IiksICd0ZXN0IG1lYW50IGZvciBudCwgb3MyLCBhbmQgcG9zaXgnKQorICAgIEB1bml0dGVzdC5za2lwSWYob3MubmFtZSBub3QgaW4gKCJudCIsICJwb3NpeCIpLCAndGVzdCBtZWFudCBmb3IgbnQgYW5kIHBvc2l4JykKICAgICBkZWYgdGVzdF9udF9hbmRfcG9zaXhfc3RhY2tfc2l6ZShzZWxmKToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgdGhyZWFkLnN0YWNrX3NpemUoNDA5NikKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdGhyZWFkZWRfaW1wb3J0LnB5IGIvTGliL3Rlc3QvdGVzdF90aHJlYWRlZF9pbXBvcnQucHkKaW5kZXggNmMyOTY1Yi4uNGJlNjE1YSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF90aHJlYWRlZF9pbXBvcnQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF90aHJlYWRlZF9pbXBvcnQucHkKQEAgLTUsMTUgKzUsMTYgQEAKICMgY29tcGxhaW5zIHNldmVyYWwgdGltZXMgYWJvdXQgbW9kdWxlIHJhbmRvbSBoYXZpbmcgbm8gYXR0cmlidXRlCiAjIHJhbmRyYW5nZSwgYW5kIHRoZW4gUHl0aG9uIGhhbmdzLgogCitpbXBvcnQgX2ltcCBhcyBpbXAKIGltcG9ydCBvcwotaW1wb3J0IGltcAogaW1wb3J0IGltcG9ydGxpYgogaW1wb3J0IHN5cwogaW1wb3J0IHRpbWUKIGltcG9ydCBzaHV0aWwKIGltcG9ydCB1bml0dGVzdAogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0ICgKLSAgICB2ZXJib3NlLCBpbXBvcnRfbW9kdWxlLCBydW5fdW5pdHRlc3QsIFRFU1RGTiwgcmVhcF90aHJlYWRzLCBmb3JnZXQsIHVubGluaykKKyAgICB2ZXJib3NlLCBpbXBvcnRfbW9kdWxlLCBydW5fdW5pdHRlc3QsIFRFU1RGTiwgcmVhcF90aHJlYWRzLAorICAgIGZvcmdldCwgdW5saW5rLCBybXRyZWUsIHN0YXJ0X3RocmVhZHMpCiB0aHJlYWRpbmcgPSBpbXBvcnRfbW9kdWxlKCd0aHJlYWRpbmcnKQogCiBkZWYgdGFzayhOLCBkb25lLCBkb25lX3Rhc2tzLCBlcnJvcnMpOgpAQCAtNTcsNyArNTgsNyBAQAogfQogCiBjbGFzcyBGaW5kZXI6Ci0gICAgIiIiQSBkdW1teSBmaW5kZXIgdG8gZGV0ZWN0IGNvbmN1cnJlbnQgYWNjZXNzIHRvIGl0cyBmaW5kX21vZHVsZSgpCisgICAgIiIiQSBkdW1teSBmaW5kZXIgdG8gZGV0ZWN0IGNvbmN1cnJlbnQgYWNjZXNzIHRvIGl0cyBmaW5kX3NwZWMoKQogICAgIG1ldGhvZC4iIiIKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmKToKQEAgLTY1LDggKzY2LDggQEAKICAgICAgICAgc2VsZi54ID0gMAogICAgICAgICBzZWxmLmxvY2sgPSB0aHJlYWRpbmcuTG9jaygpCiAKLSAgICBkZWYgZmluZF9tb2R1bGUoc2VsZiwgbmFtZSwgcGF0aD1Ob25lKToKLSAgICAgICAgIyBTaW11bGF0ZSBzb21lIHRocmVhZC11bnNhZmUgYmVoYXZpb3VyLiBJZiBjYWxscyB0byBmaW5kX21vZHVsZSgpCisgICAgZGVmIGZpbmRfc3BlYyhzZWxmLCBuYW1lLCBwYXRoPU5vbmUsIHRhcmdldD1Ob25lKToKKyAgICAgICAgIyBTaW11bGF0ZSBzb21lIHRocmVhZC11bnNhZmUgYmVoYXZpb3VyLiBJZiBjYWxscyB0byBmaW5kX3NwZWMoKQogICAgICAgICAjIGFyZSBwcm9wZXJseSBzZXJpYWxpemVkLCBgeGAgd2lsbCBlbmQgdXAgdGhlIHNhbWUgYXMgYG51bWNhbGxzYC4KICAgICAgICAgIyBPdGhlcndpc2Ugbm90LgogICAgICAgICBhc3NlcnQgaW1wLmxvY2tfaGVsZCgpCkBAIC04MCw3ICs4MSw3IEBACiAgICAgIiIiQSBkdW1teSBmaW5kZXIgd2hpY2ggZmx1c2hlcyBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZSB3aGVuIGl0IGdldHMKICAgICBjYWxsZWQuIiIiCiAKLSAgICBkZWYgZmluZF9tb2R1bGUoc2VsZiwgbmFtZSwgcGF0aD1Ob25lKToKKyAgICBkZWYgZmluZF9zcGVjKHNlbGYsIG5hbWUsIHBhdGg9Tm9uZSwgdGFyZ2V0PU5vbmUpOgogICAgICAgICBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZS5jbGVhcigpCiAKIApAQCAtMTE0LDEwICsxMTUsMTAgQEAKICAgICAgICAgICAgIGVycm9ycyA9IFtdCiAgICAgICAgICAgICBkb25lX3Rhc2tzID0gW10KICAgICAgICAgICAgIGRvbmUuY2xlYXIoKQotICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoTik6Ci0gICAgICAgICAgICAgICAgdCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PXRhc2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncz0oTiwgZG9uZSwgZG9uZV90YXNrcywgZXJyb3JzLCkpCi0gICAgICAgICAgICAgICAgdC5zdGFydCgpCisgICAgICAgICAgICB3aXRoIHN0YXJ0X3RocmVhZHModGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9dGFzaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M9KE4sIGRvbmUsIGRvbmVfdGFza3MsIGVycm9ycywpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKE4pKToKKyAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZG9uZS53YWl0KDYwKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXJyb3JzKQogICAgICAgICAgICAgaWYgdmVyYm9zZToKQEAgLTE0NSwxMyArMTQ2LDEzIEBACiAgICAgICAgICMgZGVkaWNhdGVkIG1ldGFfcGF0aCBlbnRyeS4KICAgICAgICAgZmx1c2hpbmdfZmluZGVyID0gRmx1c2hpbmdGaW5kZXIoKQogICAgICAgICBkZWYgcGF0aF9ob29rKHBhdGgpOgotICAgICAgICAgICAgZmluZGVyLmZpbmRfbW9kdWxlKCcnKQorICAgICAgICAgICAgZmluZGVyLmZpbmRfc3BlYygnJykKICAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yCiAgICAgICAgIHN5cy5wYXRoX2hvb2tzLmluc2VydCgwLCBwYXRoX2hvb2spCiAgICAgICAgIHN5cy5tZXRhX3BhdGguYXBwZW5kKGZsdXNoaW5nX2ZpbmRlcikKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgIyBGbHVzaCB0aGUgY2FjaGUgYSBmaXJzdCB0aW1lCi0gICAgICAgICAgICBmbHVzaGluZ19maW5kZXIuZmluZF9tb2R1bGUoJycpCisgICAgICAgICAgICBmbHVzaGluZ19maW5kZXIuZmluZF9zcGVjKCcnKQogICAgICAgICAgICAgbnVtdGVzdHMgPSBzZWxmLmNoZWNrX3BhcmFsbGVsX21vZHVsZV9pbml0KCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihmaW5kZXIubnVtY2FsbHMsIDApCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbmRlci54LCBmaW5kZXIubnVtY2FsbHMpCkBAIC0yMjIsNiArMjIzLDcgQEAKICAgICAgICAgICAgIGYud3JpdGUoY29kZS5lbmNvZGUoJ3V0Zi04JykpCiAgICAgICAgIHNlbGYuYWRkQ2xlYW51cCh1bmxpbmssIGZpbGVuYW1lKQogICAgICAgICBzZWxmLmFkZENsZWFudXAoZm9yZ2V0LCBURVNURk4pCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChybXRyZWUsICdfX3B5Y2FjaGVfXycpCiAgICAgICAgIGltcG9ydGxpYi5pbnZhbGlkYXRlX2NhY2hlcygpCiAgICAgICAgIF9faW1wb3J0X18oVEVTVEZOKQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3RocmVhZGVkdGVtcGZpbGUucHkgYi9MaWIvdGVzdC90ZXN0X3RocmVhZGVkdGVtcGZpbGUucHkKaW5kZXggMmRmZDNhMC4uYjc0MjAzNiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF90aHJlYWRlZHRlbXBmaWxlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdGhyZWFkZWR0ZW1wZmlsZS5weQpAQCAtMTgsNyArMTgsNyBAQAogCiBpbXBvcnQgdGVtcGZpbGUKIAotZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHRocmVhZGluZ19zZXR1cCwgdGhyZWFkaW5nX2NsZWFudXAsIHJ1bl91bml0dGVzdCwgaW1wb3J0X21vZHVsZQorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHN0YXJ0X3RocmVhZHMsIGltcG9ydF9tb2R1bGUKIHRocmVhZGluZyA9IGltcG9ydF9tb2R1bGUoJ3RocmVhZGluZycpCiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCBpbwpAQCAtNDYsMzMgKzQ2LDE3IEBACiAKIGNsYXNzIFRocmVhZGVkVGVtcEZpbGVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9tYWluKHNlbGYpOgotICAgICAgICB0aHJlYWRzID0gW10KLSAgICAgICAgdGhyZWFkX2luZm8gPSB0aHJlYWRpbmdfc2V0dXAoKQotCi0gICAgICAgIGZvciBpIGluIHJhbmdlKE5VTV9USFJFQURTKToKLSAgICAgICAgICAgIHQgPSBUZW1wRmlsZUdyZWVkeSgpCi0gICAgICAgICAgICB0aHJlYWRzLmFwcGVuZCh0KQotICAgICAgICAgICAgdC5zdGFydCgpCi0KLSAgICAgICAgc3RhcnRFdmVudC5zZXQoKQotCi0gICAgICAgIG9rID0gMAotICAgICAgICBlcnJvcnMgPSBbXQotICAgICAgICBmb3IgdCBpbiB0aHJlYWRzOgotICAgICAgICAgICAgdC5qb2luKCkKLSAgICAgICAgICAgIG9rICs9IHQub2tfY291bnQKLSAgICAgICAgICAgIGlmIHQuZXJyb3JfY291bnQ6Ci0gICAgICAgICAgICAgICAgZXJyb3JzLmFwcGVuZChzdHIodC5uYW1lKSArIHN0cih0LmVycm9ycy5nZXR2YWx1ZSgpKSkKLQotICAgICAgICB0aHJlYWRpbmdfY2xlYW51cCgqdGhyZWFkX2luZm8pCisgICAgICAgIHRocmVhZHMgPSBbVGVtcEZpbGVHcmVlZHkoKSBmb3IgaSBpbiByYW5nZShOVU1fVEhSRUFEUyldCisgICAgICAgIHdpdGggc3RhcnRfdGhyZWFkcyh0aHJlYWRzLCBzdGFydEV2ZW50LnNldCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIG9rID0gc3VtKHQub2tfY291bnQgZm9yIHQgaW4gdGhyZWFkcykKKyAgICAgICAgZXJyb3JzID0gW3N0cih0Lm5hbWUpICsgc3RyKHQuZXJyb3JzLmdldHZhbHVlKCkpCisgICAgICAgICAgICAgICAgICBmb3IgdCBpbiB0aHJlYWRzIGlmIHQuZXJyb3JfY291bnRdCiAKICAgICAgICAgbXNnID0gIkVycm9yczogZXJyb3JzICVkIG9rICVkXG4lcyIgJSAobGVuKGVycm9ycyksIG9rLAogICAgICAgICAgICAgJ1xuJy5qb2luKGVycm9ycykpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyb3JzLCBbXSwgbXNnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9rLCBOVU1fVEhSRUFEUyAqIEZJTEVTX1BFUl9USFJFQUQpCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBydW5fdW5pdHRlc3QoVGhyZWFkZWRUZW1wRmlsZVRlc3QpCi0KIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdGhyZWFkaW5nLnB5IGIvTGliL3Rlc3QvdGVzdF90aHJlYWRpbmcucHkKaW5kZXggMTFjODk3OS4uNGI3NWVhNiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF90aHJlYWRpbmcucHkKKysrIGIvTGliL3Rlc3QvdGVzdF90aHJlYWRpbmcucHkKQEAgLTQsNyArNCw3IEBACiAKIGltcG9ydCB0ZXN0LnN1cHBvcnQKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCB2ZXJib3NlLCBzdHJpcF9weXRob25fc3RkZXJyLCBpbXBvcnRfbW9kdWxlLCBjcHl0aG9uX29ubHkKLWZyb20gdGVzdC5zY3JpcHRfaGVscGVyIGltcG9ydCBhc3NlcnRfcHl0aG9uX29rCitmcm9tIHRlc3Quc2NyaXB0X2hlbHBlciBpbXBvcnQgYXNzZXJ0X3B5dGhvbl9vaywgYXNzZXJ0X3B5dGhvbl9mYWlsdXJlCiAKIGltcG9ydCByYW5kb20KIGltcG9ydCByZQpAQCAtMTUsMTUgKzE1LDE5IEBACiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCB3ZWFrcmVmCiBpbXBvcnQgb3MKLWZyb20gdGVzdC5zY3JpcHRfaGVscGVyIGltcG9ydCBhc3NlcnRfcHl0aG9uX29rLCBhc3NlcnRfcHl0aG9uX2ZhaWx1cmUKIGltcG9ydCBzdWJwcm9jZXNzCi10cnk6Ci0gICAgaW1wb3J0IF90ZXN0Y2FwaQotZXhjZXB0IEltcG9ydEVycm9yOgotICAgIF90ZXN0Y2FwaSA9IE5vbmUKIAogZnJvbSB0ZXN0IGltcG9ydCBsb2NrX3Rlc3RzCiAKKworIyBCZXR3ZWVuIGZvcmsoKSBhbmQgZXhlYygpLCBvbmx5IGFzeW5jLXNhZmUgZnVuY3Rpb25zIGFyZSBhbGxvd2VkIChpc3N1ZXMKKyMgIzEyMzE2IGFuZCAjMTE4NzApLCBhbmQgZm9yaygpIGZyb20gYSB3b3JrZXIgdGhyZWFkIGlzIGtub3duIHRvIHRyaWdnZXIKKyMgcHJvYmxlbXMgd2l0aCBzb21lIG9wZXJhdGluZyBzeXN0ZW1zIChpc3N1ZSAjMzg2Myk6IHNraXAgcHJvYmxlbWF0aWMgdGVzdHMKKyMgb24gcGxhdGZvcm1zIGtub3duIHRvIGJlaGF2ZSBiYWRseS4KK3BsYXRmb3Jtc190b19za2lwID0gKCdmcmVlYnNkNCcsICdmcmVlYnNkNScsICdmcmVlYnNkNicsICduZXRic2Q1JywKKyAgICAgICAgICAgICAgICAgICAgICdocC11eDExJykKKworCiAjIEEgdHJpdmlhbCBtdXRhYmxlIGNvdW50ZXIuCiBjbGFzcyBDb3VudGVyKG9iamVjdCk6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgpAQCAtMTAzLDcgKzEwNyw3IEBACiAgICAgICAgIGlmIHZlcmJvc2U6CiAgICAgICAgICAgICBwcmludCgnd2FpdGluZyBmb3IgYWxsIHRhc2tzIHRvIGNvbXBsZXRlJykKICAgICAgICAgZm9yIHQgaW4gdGhyZWFkczoKLSAgICAgICAgICAgIHQuam9pbihOVU1UQVNLUykKKyAgICAgICAgICAgIHQuam9pbigpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHQuaXNfYWxpdmUoKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwodC5pZGVudCwgMCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodC5pZGVudCBpcyBOb25lKQpAQCAtNDcxLDYgKzQ3NSwxMjcgQEAKICAgICAgICAgICAgICAgICBwaWQsIHN0YXR1cyA9IG9zLndhaXRwaWQocGlkLCAwKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgc3RhdHVzKQogCisgICAgZGVmIHRlc3RfbWFpbl90aHJlYWQoc2VsZik6CisgICAgICAgIG1haW4gPSB0aHJlYWRpbmcubWFpbl90aHJlYWQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1haW4ubmFtZSwgJ01haW5UaHJlYWQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1haW4uaWRlbnQsIHRocmVhZGluZy5jdXJyZW50X3RocmVhZCgpLmlkZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1haW4uaWRlbnQsIHRocmVhZGluZy5nZXRfaWRlbnQoKSkKKworICAgICAgICBkZWYgZigpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbCh0aHJlYWRpbmcubWFpbl90aHJlYWQoKS5pZGVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyZWFkaW5nLmN1cnJlbnRfdGhyZWFkKCkuaWRlbnQpCisgICAgICAgIHRoID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9ZikKKyAgICAgICAgdGguc3RhcnQoKQorICAgICAgICB0aC5qb2luKCkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICdmb3JrJyksICJ0ZXN0IG5lZWRzIG9zLmZvcmsoKSIpCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgJ3dhaXRwaWQnKSwgInRlc3QgbmVlZHMgb3Mud2FpdHBpZCgpIikKKyAgICBkZWYgdGVzdF9tYWluX3RocmVhZF9hZnRlcl9mb3JrKHNlbGYpOgorICAgICAgICBjb2RlID0gIiIiaWYgMToKKyAgICAgICAgICAgIGltcG9ydCBvcywgdGhyZWFkaW5nCisKKyAgICAgICAgICAgIHBpZCA9IG9zLmZvcmsoKQorICAgICAgICAgICAgaWYgcGlkID09IDA6CisgICAgICAgICAgICAgICAgbWFpbiA9IHRocmVhZGluZy5tYWluX3RocmVhZCgpCisgICAgICAgICAgICAgICAgcHJpbnQobWFpbi5uYW1lKQorICAgICAgICAgICAgICAgIHByaW50KG1haW4uaWRlbnQgPT0gdGhyZWFkaW5nLmN1cnJlbnRfdGhyZWFkKCkuaWRlbnQpCisgICAgICAgICAgICAgICAgcHJpbnQobWFpbi5pZGVudCA9PSB0aHJlYWRpbmcuZ2V0X2lkZW50KCkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG9zLndhaXRwaWQocGlkLCAwKQorICAgICAgICAiIiIKKyAgICAgICAgXywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCItYyIsIGNvZGUpCisgICAgICAgIGRhdGEgPSBvdXQuZGVjb2RlKCkucmVwbGFjZSgnXHInLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIsIGIiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCAiTWFpblRocmVhZFxuVHJ1ZVxuVHJ1ZVxuIikKKworICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtIGluIHBsYXRmb3Jtc190b19za2lwLCAiZHVlIHRvIGtub3duIE9TIGJ1ZyIpCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgJ2ZvcmsnKSwgInRlc3QgbmVlZHMgb3MuZm9yaygpIikKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKG9zLCAnd2FpdHBpZCcpLCAidGVzdCBuZWVkcyBvcy53YWl0cGlkKCkiKQorICAgIGRlZiB0ZXN0X21haW5fdGhyZWFkX2FmdGVyX2ZvcmtfZnJvbV9ub25tYWluX3RocmVhZChzZWxmKToKKyAgICAgICAgY29kZSA9ICIiImlmIDE6CisgICAgICAgICAgICBpbXBvcnQgb3MsIHRocmVhZGluZywgc3lzCisKKyAgICAgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICAgICAgcGlkID0gb3MuZm9yaygpCisgICAgICAgICAgICAgICAgaWYgcGlkID09IDA6CisgICAgICAgICAgICAgICAgICAgIG1haW4gPSB0aHJlYWRpbmcubWFpbl90aHJlYWQoKQorICAgICAgICAgICAgICAgICAgICBwcmludChtYWluLm5hbWUpCisgICAgICAgICAgICAgICAgICAgIHByaW50KG1haW4uaWRlbnQgPT0gdGhyZWFkaW5nLmN1cnJlbnRfdGhyZWFkKCkuaWRlbnQpCisgICAgICAgICAgICAgICAgICAgIHByaW50KG1haW4uaWRlbnQgPT0gdGhyZWFkaW5nLmdldF9pZGVudCgpKQorICAgICAgICAgICAgICAgICAgICAjIHN0ZG91dCBpcyBmdWxseSBidWZmZXJlZCBiZWNhdXNlIG5vdCBhIHR0eSwKKyAgICAgICAgICAgICAgICAgICAgIyB3ZSBoYXZlIHRvIGZsdXNoIGJlZm9yZSBleGl0LgorICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBvcy53YWl0cGlkKHBpZCwgMCkKKworICAgICAgICAgICAgdGggPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1mKQorICAgICAgICAgICAgdGguc3RhcnQoKQorICAgICAgICAgICAgdGguam9pbigpCisgICAgICAgICIiIgorICAgICAgICBfLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soIi1jIiwgY29kZSkKKyAgICAgICAgZGF0YSA9IG91dC5kZWNvZGUoKS5yZXBsYWNlKCdccicsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyciwgYiIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsICJUaHJlYWQtMVxuVHJ1ZVxuVHJ1ZVxuIikKKworICAgIGRlZiB0ZXN0X3RzdGF0ZV9sb2NrKHNlbGYpOgorICAgICAgICAjIFRlc3QgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsIG9mIFRocmVhZCBvYmplY3RzLgorICAgICAgICBzdGFydGVkID0gX3RocmVhZC5hbGxvY2F0ZV9sb2NrKCkKKyAgICAgICAgZmluaXNoID0gX3RocmVhZC5hbGxvY2F0ZV9sb2NrKCkKKyAgICAgICAgc3RhcnRlZC5hY3F1aXJlKCkKKyAgICAgICAgZmluaXNoLmFjcXVpcmUoKQorICAgICAgICBkZWYgZigpOgorICAgICAgICAgICAgc3RhcnRlZC5yZWxlYXNlKCkKKyAgICAgICAgICAgIGZpbmlzaC5hY3F1aXJlKCkKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4wMSkKKyAgICAgICAgIyBUaGUgdHN0YXRlIGxvY2sgaXMgTm9uZSB1bnRpbCB0aGUgdGhyZWFkIGlzIHN0YXJ0ZWQKKyAgICAgICAgdCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PWYpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModC5fdHN0YXRlX2xvY2ssIE5vbmUpCisgICAgICAgIHQuc3RhcnQoKQorICAgICAgICBzdGFydGVkLmFjcXVpcmUoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodC5pc19hbGl2ZSgpKQorICAgICAgICAjIFRoZSB0c3RhdGUgbG9jayBjYW4ndCBiZSBhY3F1aXJlZCB3aGVuIHRoZSB0aHJlYWQgaXMgcnVubmluZworICAgICAgICAjIChvciBzdXNwZW5kZWQpLgorICAgICAgICB0c3RhdGVfbG9jayA9IHQuX3RzdGF0ZV9sb2NrCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHN0YXRlX2xvY2suYWNxdWlyZSh0aW1lb3V0PTApLCBGYWxzZSkKKyAgICAgICAgZmluaXNoLnJlbGVhc2UoKQorICAgICAgICAjIFdoZW4gdGhlIHRocmVhZCBlbmRzLCB0aGUgc3RhdGVfbG9jayBjYW4gYmUgc3VjY2Vzc2Z1bGx5CisgICAgICAgICMgYWNxdWlyZWQuCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0c3RhdGVfbG9jay5hY3F1aXJlKHRpbWVvdXQ9NSksIEZhbHNlKQorICAgICAgICAjIEJ1dCBpc19hbGl2ZSgpIGlzIHN0aWxsIFRydWU6ICB3ZSBob2xkIF90c3RhdGVfbG9jayBub3csIHdoaWNoCisgICAgICAgICMgcHJldmVudHMgaXNfYWxpdmUoKSBmcm9tIGtub3dpbmcgdGhlIHRocmVhZCdzIGVuZC1vZi1saWZlIEMgY29kZQorICAgICAgICAjIGlzIGRvbmUuCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0LmlzX2FsaXZlKCkpCisgICAgICAgICMgTGV0IGlzX2FsaXZlKCkgZmluZCBvdXQgdGhlIEMgY29kZSBpcyBkb25lLgorICAgICAgICB0c3RhdGVfbG9jay5yZWxlYXNlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0LmlzX2FsaXZlKCkpCisgICAgICAgICMgQW5kIHZlcmlmeSB0aGUgdGhyZWFkIGRpc3Bvc2VkIG9mIF90c3RhdGVfbG9jay4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQuX3RzdGF0ZV9sb2NrIGlzIE5vbmUpCisKKyAgICBkZWYgdGVzdF9yZXByX3N0b3BwZWQoc2VsZik6CisgICAgICAgICMgVmVyaWZ5IHRoYXQgInN0b3BwZWQiIHNob3dzIHVwIGluIHJlcHIoVGhyZWFkKSBhcHByb3ByaWF0ZWx5LgorICAgICAgICBzdGFydGVkID0gX3RocmVhZC5hbGxvY2F0ZV9sb2NrKCkKKyAgICAgICAgZmluaXNoID0gX3RocmVhZC5hbGxvY2F0ZV9sb2NrKCkKKyAgICAgICAgc3RhcnRlZC5hY3F1aXJlKCkKKyAgICAgICAgZmluaXNoLmFjcXVpcmUoKQorICAgICAgICBkZWYgZigpOgorICAgICAgICAgICAgc3RhcnRlZC5yZWxlYXNlKCkKKyAgICAgICAgICAgIGZpbmlzaC5hY3F1aXJlKCkKKyAgICAgICAgdCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PWYpCisgICAgICAgIHQuc3RhcnQoKQorICAgICAgICBzdGFydGVkLmFjcXVpcmUoKQorICAgICAgICBzZWxmLmFzc2VydEluKCJzdGFydGVkIiwgcmVwcih0KSkKKyAgICAgICAgZmluaXNoLnJlbGVhc2UoKQorICAgICAgICAjICJzdG9wcGVkIiBzaG91bGQgYXBwZWFyIGluIHRoZSByZXByIGluIGEgcmVhc29uYWJsZSBhbW91bnQgb2YgdGltZS4KKyAgICAgICAgIyBJbXBsZW1lbnRhdGlvbiBkZXRhaWw6ICBhcyBvZiB0aGlzIHdyaXRpbmcsIHRoYXQncyB0cml2aWFsbHkgdHJ1ZQorICAgICAgICAjIGlmIC5qb2luKCkgaXMgY2FsbGVkLCBhbmQgYWxtb3N0IHRyaXZpYWxseSB0cnVlIGlmIC5pc19hbGl2ZSgpIGlzCisgICAgICAgICMgY2FsbGVkLiAgVGhlIGRldGFpbCB3ZSdyZSB0ZXN0aW5nIGhlcmUgaXMgdGhhdCAic3RvcHBlZCIgc2hvd3MgdXAKKyAgICAgICAgIyAiYWxsIG9uIGl0cyBvd24iLgorICAgICAgICBMT09LSU5HX0ZPUiA9ICJzdG9wcGVkIgorICAgICAgICBmb3IgaSBpbiByYW5nZSg1MDApOgorICAgICAgICAgICAgaWYgTE9PS0lOR19GT1IgaW4gcmVwcih0KToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgdGltZS5zbGVlcCgwLjAxKQorICAgICAgICBzZWxmLmFzc2VydEluKExPT0tJTkdfRk9SLCByZXByKHQpKSAjIHdlIHdhaXRlZCBhdCBsZWFzdCA1IHNlY29uZHMKIAogICAgIGRlZiB0ZXN0X0JvdW5kZWRTZW1hcGhvcmVfbGltaXQoc2VsZik6CiAgICAgICAgICMgQm91bmRlZFNlbWFwaG9yZSBzaG91bGQgcmFpc2UgVmFsdWVFcnJvciBpZiByZWxlYXNlZCB0b28gb2Z0ZW4uCkBAIC00OTAsMTQgKzYxNSw0OCBAQAogICAgICAgICAgICAgICAgIHQuam9pbigpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBicy5yZWxlYXNlKQogCi1jbGFzcyBUaHJlYWRKb2luT25TaHV0ZG93bihCYXNlVGVzdENhc2UpOgorICAgIEBjcHl0aG9uX29ubHkKKyAgICBkZWYgdGVzdF9mcmFtZV90c3RhdGVfdHJhY2luZyhzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMTQ0MzI6IENyYXNoIHdoZW4gYSBnZW5lcmF0b3IgaXMgY3JlYXRlZCBpbiBhIEMgdGhyZWFkIHRoYXQgaXMKKyAgICAgICAgIyBkZXN0cm95ZWQgd2hpbGUgdGhlIGdlbmVyYXRvciBpcyBzdGlsbCB1c2VkLiBUaGUgaXNzdWUgd2FzIHRoYXQgYQorICAgICAgICAjIGdlbmVyYXRvciBjb250YWlucyBhIGZyYW1lLCBhbmQgdGhlIGZyYW1lIGtlcHQgYSByZWZlcmVuY2UgdG8gdGhlCisgICAgICAgICMgUHl0aG9uIHN0YXRlIG9mIHRoZSBkZXN0cm95ZWQgQyB0aHJlYWQuIFRoZSBjcmFzaCBvY2N1cnMgd2hlbiBhIHRyYWNlCisgICAgICAgICMgZnVuY3Rpb24gaXMgc2V0dXAuCiAKLSAgICAjIEJldHdlZW4gZm9yaygpIGFuZCBleGVjKCksIG9ubHkgYXN5bmMtc2FmZSBmdW5jdGlvbnMgYXJlIGFsbG93ZWQgKGlzc3VlcwotICAgICMgIzEyMzE2IGFuZCAjMTE4NzApLCBhbmQgZm9yaygpIGZyb20gYSB3b3JrZXIgdGhyZWFkIGlzIGtub3duIHRvIHRyaWdnZXIKLSAgICAjIHByb2JsZW1zIHdpdGggc29tZSBvcGVyYXRpbmcgc3lzdGVtcyAoaXNzdWUgIzM4NjMpOiBza2lwIHByb2JsZW1hdGljIHRlc3RzCi0gICAgIyBvbiBwbGF0Zm9ybXMga25vd24gdG8gYmVoYXZlIGJhZGx5LgotICAgIHBsYXRmb3Jtc190b19za2lwID0gKCdmcmVlYnNkNCcsICdmcmVlYnNkNScsICdmcmVlYnNkNicsICduZXRic2Q1JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnb3MyZW14JywgJ2hwLXV4MTEnKQorICAgICAgICBkZWYgbm9vcF90cmFjZShmcmFtZSwgZXZlbnQsIGFyZyk6CisgICAgICAgICAgICAjIG5vIG9wZXJhdGlvbgorICAgICAgICAgICAgcmV0dXJuIG5vb3BfdHJhY2UKKworICAgICAgICBkZWYgZ2VuZXJhdG9yKCk6CisgICAgICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgICAgIHlpZWxkICJnZW5lcmF0b3IiCisKKyAgICAgICAgZGVmIGNhbGxiYWNrKCk6CisgICAgICAgICAgICBpZiBjYWxsYmFjay5nZW4gaXMgTm9uZToKKyAgICAgICAgICAgICAgICBjYWxsYmFjay5nZW4gPSBnZW5lcmF0b3IoKQorICAgICAgICAgICAgcmV0dXJuIG5leHQoY2FsbGJhY2suZ2VuKQorICAgICAgICBjYWxsYmFjay5nZW4gPSBOb25lCisKKyAgICAgICAgb2xkX3RyYWNlID0gc3lzLmdldHRyYWNlKCkKKyAgICAgICAgc3lzLnNldHRyYWNlKG5vb3BfdHJhY2UpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgSW5zdGFsbCBhIHRyYWNlIGZ1bmN0aW9uCisgICAgICAgICAgICB0aHJlYWRpbmcuc2V0dHJhY2Uobm9vcF90cmFjZSkKKworICAgICAgICAgICAgIyBDcmVhdGUgYSBnZW5lcmF0b3IgaW4gYSBDIHRocmVhZCB3aGljaCBleGl0cyBhZnRlciB0aGUgY2FsbAorICAgICAgICAgICAgaW1wb3J0IF90ZXN0Y2FwaQorICAgICAgICAgICAgX3Rlc3RjYXBpLmNhbGxfaW5fdGVtcG9yYXJ5X2NfdGhyZWFkKGNhbGxiYWNrKQorCisgICAgICAgICAgICAjIENhbGwgdGhlIGdlbmVyYXRvciBpbiBhIGRpZmZlcmVudCBQeXRob24gdGhyZWFkLCBjaGVjayB0aGF0IHRoZQorICAgICAgICAgICAgIyBnZW5lcmF0b3IgZGlkbid0IGtlZXAgYSByZWZlcmVuY2UgdG8gdGhlIGRlc3Ryb3llZCB0aHJlYWQgc3RhdGUKKyAgICAgICAgICAgIGZvciB0ZXN0IGluIHJhbmdlKDMpOgorICAgICAgICAgICAgICAgICMgVGhlIHRyYWNlIGZ1bmN0aW9uIGlzIHN0aWxsIGNhbGxlZCBoZXJlCisgICAgICAgICAgICAgICAgY2FsbGJhY2soKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc3lzLnNldHRyYWNlKG9sZF90cmFjZSkKKworCitjbGFzcyBUaHJlYWRKb2luT25TaHV0ZG93bihCYXNlVGVzdENhc2UpOgogCiAgICAgZGVmIF9ydW5fYW5kX2pvaW4oc2VsZiwgc2NyaXB0KToKICAgICAgICAgc2NyaXB0ID0gIiIiaWYgMToKQEAgLTU3MCwxNDQgKzcyOSw4IEBACiAgICAgICAgICAgICAiIiIKICAgICAgICAgc2VsZi5fcnVuX2FuZF9qb2luKHNjcmlwdCkKIAotICAgIGRlZiBhc3NlcnRTY3JpcHRIYXNPdXRwdXQoc2VsZiwgc2NyaXB0LCBleHBlY3RlZF9vdXRwdXQpOgotICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCItYyIsIHNjcmlwdCkKLSAgICAgICAgZGF0YSA9IG91dC5kZWNvZGUoKS5yZXBsYWNlKCdccicsICcnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIGV4cGVjdGVkX291dHB1dCkKLQotICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICdmb3JrJyksICJuZWVkcyBvcy5mb3JrKCkiKQogICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtIGluIHBsYXRmb3Jtc190b19za2lwLCAiZHVlIHRvIGtub3duIE9TIGJ1ZyIpCi0gICAgZGVmIHRlc3RfNF9qb2luaW5nX2Fjcm9zc19mb3JrX2luX3dvcmtlcl90aHJlYWQoc2VsZik6Ci0gICAgICAgICMgVGhlcmUgdXNlZCB0byBiZSBhIHBvc3NpYmxlIGRlYWRsb2NrIHdoZW4gZm9ya2luZyBmcm9tIGEgY2hpbGQKLSAgICAgICAgIyB0aHJlYWQuICBTZWUgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTY2NDMuCi0KLSAgICAgICAgIyBUaGUgc2NyaXB0IHRha2VzIHRoZSBmb2xsb3dpbmcgc3RlcHM6Ci0gICAgICAgICMgLSBUaGUgbWFpbiB0aHJlYWQgaW4gdGhlIHBhcmVudCBwcm9jZXNzIHN0YXJ0cyBhIG5ldyB0aHJlYWQgYW5kIHRoZW4KLSAgICAgICAgIyAgIHRyaWVzIHRvIGpvaW4gaXQuCi0gICAgICAgICMgLSBUaGUgam9pbiBvcGVyYXRpb24gYWNxdWlyZXMgdGhlIExvY2sgaW5zaWRlIHRoZSB0aHJlYWQncyBfYmxvY2sKLSAgICAgICAgIyAgIENvbmRpdGlvbi4gIChTZWUgdGhyZWFkaW5nLnB5OlRocmVhZC5qb2luKCkuKQotICAgICAgICAjIC0gV2Ugc3R1YiBvdXQgdGhlIGFjcXVpcmUgbWV0aG9kIG9uIHRoZSBjb25kaXRpb24gdG8gZm9yY2UgaXQgdG8gd2FpdAotICAgICAgICAjICAgdW50aWwgdGhlIGNoaWxkIHRocmVhZCBmb3Jrcy4gIChTZWUgTE9DSyBBQ1FVSVJFRCBIRVJFKQotICAgICAgICAjIC0gVGhlIGNoaWxkIHRocmVhZCBmb3Jrcy4gIChTZWUgTE9DSyBIRUxEIGFuZCBXT1JLRVIgVEhSRUFEIEZPUktTCi0gICAgICAgICMgICBIRVJFKQotICAgICAgICAjIC0gVGhlIG1haW4gdGhyZWFkIG9mIHRoZSBwYXJlbnQgcHJvY2VzcyBlbnRlcnMgQ29uZGl0aW9uLndhaXQoKSwKLSAgICAgICAgIyAgIHdoaWNoIHJlbGVhc2VzIHRoZSBsb2NrIG9uIHRoZSBjaGlsZCB0aHJlYWQuCi0gICAgICAgICMgLSBUaGUgY2hpbGQgcHJvY2VzcyByZXR1cm5zLiAgV2l0aG91dCB0aGUgbmVjZXNzYXJ5IGZpeCwgd2hlbiB0aGUKLSAgICAgICAgIyAgIG1haW4gdGhyZWFkIG9mIHRoZSBjaGlsZCBwcm9jZXNzICh3aGljaCB1c2VkIHRvIGJlIHRoZSBjaGlsZCB0aHJlYWQKLSAgICAgICAgIyAgIGluIHRoZSBwYXJlbnQgcHJvY2VzcykgYXR0ZW1wdHMgdG8gZXhpdCwgaXQgd2lsbCB0cnkgdG8gYWNxdWlyZSB0aGUKLSAgICAgICAgIyAgIGxvY2sgaW4gdGhlIFRocmVhZC5fYmxvY2sgQ29uZGl0aW9uIG9iamVjdCBhbmQgaGFuZywgYmVjYXVzZSB0aGUKLSAgICAgICAgIyAgIGxvY2sgd2FzIGhlbGQgYWNyb3NzIHRoZSBmb3JrLgotCi0gICAgICAgIHNjcmlwdCA9ICIiImlmIDE6Ci0gICAgICAgICAgICBpbXBvcnQgb3MsIHRpbWUsIHRocmVhZGluZwotCi0gICAgICAgICAgICBmaW5pc2hfam9pbiA9IEZhbHNlCi0gICAgICAgICAgICBzdGFydF9mb3JrID0gRmFsc2UKLQotICAgICAgICAgICAgZGVmIHdvcmtlcigpOgotICAgICAgICAgICAgICAgICMgV2FpdCB1bnRpbCB0aGlzIHRocmVhZCdzIGxvY2sgaXMgYWNxdWlyZWQgYmVmb3JlIGZvcmtpbmcgdG8KLSAgICAgICAgICAgICAgICAjIGNyZWF0ZSB0aGUgZGVhZGxvY2suCi0gICAgICAgICAgICAgICAgZ2xvYmFsIGZpbmlzaF9qb2luCi0gICAgICAgICAgICAgICAgd2hpbGUgbm90IHN0YXJ0X2Zvcms6Ci0gICAgICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4wMSkKLSAgICAgICAgICAgICAgICAjIExPQ0sgSEVMRDogTWFpbiB0aHJlYWQgaG9sZHMgbG9jayBhY3Jvc3MgdGhpcyBjYWxsLgotICAgICAgICAgICAgICAgIGNoaWxkcGlkID0gb3MuZm9yaygpCi0gICAgICAgICAgICAgICAgZmluaXNoX2pvaW4gPSBUcnVlCi0gICAgICAgICAgICAgICAgaWYgY2hpbGRwaWQgIT0gMDoKLSAgICAgICAgICAgICAgICAgICAgIyBQYXJlbnQgcHJvY2VzcyBqdXN0IHdhaXRzIGZvciBjaGlsZC4KLSAgICAgICAgICAgICAgICAgICAgb3Mud2FpdHBpZChjaGlsZHBpZCwgMCkKLSAgICAgICAgICAgICAgICAjIENoaWxkIHByb2Nlc3Mgc2hvdWxkIGp1c3QgcmV0dXJuLgotCi0gICAgICAgICAgICB3ID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9d29ya2VyKQotCi0gICAgICAgICAgICAjIFN0dWIgb3V0IHRoZSBwcml2YXRlIGNvbmRpdGlvbiB2YXJpYWJsZSdzIGxvY2sgYWNxdWlyZSBtZXRob2QuCi0gICAgICAgICAgICAjIFRoaXMgYWNxdWlyZXMgdGhlIGxvY2sgYW5kIHRoZW4gd2FpdHMgdW50aWwgdGhlIGNoaWxkIGhhcyBmb3JrZWQKLSAgICAgICAgICAgICMgYmVmb3JlIHJldHVybmluZywgd2hpY2ggd2lsbCByZWxlYXNlIHRoZSBsb2NrIHNvb24gYWZ0ZXIuICBJZgotICAgICAgICAgICAgIyBzb21lb25lIGVsc2UgdHJpZXMgdG8gZml4IHRoaXMgdGVzdCBjYXNlIGJ5IGFjcXVpcmluZyB0aGlzIGxvY2sKLSAgICAgICAgICAgICMgYmVmb3JlIGZvcmtpbmcgaW5zdGVhZCBvZiByZXNldHRpbmcgaXQsIHRoZSB0ZXN0IGNhc2Ugd2lsbAotICAgICAgICAgICAgIyBkZWFkbG9jayB3aGVuIGl0IHNob3VsZG4ndC4KLSAgICAgICAgICAgIGNvbmRpdGlvbiA9IHcuX2Jsb2NrCi0gICAgICAgICAgICBvcmlnX2FjcXVpcmUgPSBjb25kaXRpb24uYWNxdWlyZQotICAgICAgICAgICAgY2FsbF9jb3VudF9sb2NrID0gdGhyZWFkaW5nLkxvY2soKQotICAgICAgICAgICAgY2FsbF9jb3VudCA9IDAKLSAgICAgICAgICAgIGRlZiBteV9hY3F1aXJlKCk6Ci0gICAgICAgICAgICAgICAgZ2xvYmFsIGNhbGxfY291bnQKLSAgICAgICAgICAgICAgICBnbG9iYWwgc3RhcnRfZm9yawotICAgICAgICAgICAgICAgIG9yaWdfYWNxdWlyZSgpICAjIExPQ0sgQUNRVUlSRUQgSEVSRQotICAgICAgICAgICAgICAgIHN0YXJ0X2ZvcmsgPSBUcnVlCi0gICAgICAgICAgICAgICAgaWYgY2FsbF9jb3VudCA9PSAwOgotICAgICAgICAgICAgICAgICAgICB3aGlsZSBub3QgZmluaXNoX2pvaW46Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMDEpICAjIFdPUktFUiBUSFJFQUQgRk9SS1MgSEVSRQotICAgICAgICAgICAgICAgIHdpdGggY2FsbF9jb3VudF9sb2NrOgotICAgICAgICAgICAgICAgICAgICBjYWxsX2NvdW50ICs9IDEKLSAgICAgICAgICAgIGNvbmRpdGlvbi5hY3F1aXJlID0gbXlfYWNxdWlyZQotCi0gICAgICAgICAgICB3LnN0YXJ0KCkKLSAgICAgICAgICAgIHcuam9pbigpCi0gICAgICAgICAgICBwcmludCgnZW5kIG9mIG1haW4nKQotICAgICAgICAgICAgIiIiCi0gICAgICAgIHNlbGYuYXNzZXJ0U2NyaXB0SGFzT3V0cHV0KHNjcmlwdCwgImVuZCBvZiBtYWluXG4iKQotCi0gICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgJ2ZvcmsnKSwgIm5lZWRzIG9zLmZvcmsoKSIpCi0gICAgQHVuaXR0ZXN0LnNraXBJZihzeXMucGxhdGZvcm0gaW4gcGxhdGZvcm1zX3RvX3NraXAsICJkdWUgdG8ga25vd24gT1MgYnVnIikKLSAgICBkZWYgdGVzdF81X2NsZWFyX3dhaXRlcl9sb2Nrc190b19hdm9pZF9jcmFzaChzZWxmKToKLSAgICAgICAgIyBDaGVjayB0aGF0IGEgc3Bhd25lZCB0aHJlYWQgdGhhdCBmb3JrcyBkb2Vzbid0IHNlZ2ZhdWx0IG9uIGNlcnRhaW4KLSAgICAgICAgIyBwbGF0Zm9ybXMsIG5hbWVseSBPUyBYLiAgVGhpcyB1c2VkIHRvIGhhcHBlbiBpZiB0aGVyZSB3YXMgYSB3YWl0ZXIKLSAgICAgICAgIyBsb2NrIGluIHRoZSB0aHJlYWQncyBjb25kaXRpb24gdmFyaWFibGUncyB3YWl0ZXJzIGxpc3QuICBFdmVuIHRob3VnaAotICAgICAgICAjIHdlIGtub3cgdGhlIGxvY2sgd2lsbCBiZSBoZWxkIGFjcm9zcyB0aGUgZm9yaywgaXQgaXMgbm90IHNhZmUgdG8KLSAgICAgICAgIyByZWxlYXNlIGxvY2tzIGhlbGQgYWNyb3NzIGZvcmtzIG9uIGFsbCBwbGF0Zm9ybXMsIHNvIHJlbGVhc2luZyB0aGUKLSAgICAgICAgIyB3YWl0ZXIgbG9jayBjYXVzZWQgYSBzZWdmYXVsdCBvbiBPUyBYLiAgRnVydGhlcm1vcmUsIHNpbmNlIGxvY2tzIG9uCi0gICAgICAgICMgT1MgWCBhcmUgKGFzIG9mIHRoaXMgd3JpdGluZykgaW1wbGVtZW50ZWQgd2l0aCBhIG11dGV4ICsgY29uZGl0aW9uCi0gICAgICAgICMgdmFyaWFibGUgaW5zdGVhZCBvZiBhIHNlbWFwaG9yZSwgd2hpbGUgd2Uga25vdyB0aGF0IHRoZSBQeXRob24tbGV2ZWwKLSAgICAgICAgIyBsb2NrIHdpbGwgYmUgYWNxdWlyZWQsIHdlIGNhbid0IGtub3cgaWYgdGhlIGludGVybmFsIG11dGV4IHdpbGwgYmUKLSAgICAgICAgIyBhY3F1aXJlZCBhdCB0aGUgdGltZSBvZiB0aGUgZm9yay4KLQotICAgICAgICBzY3JpcHQgPSAiIiJpZiBUcnVlOgotICAgICAgICAgICAgaW1wb3J0IG9zLCB0aW1lLCB0aHJlYWRpbmcKLQotICAgICAgICAgICAgc3RhcnRfZm9yayA9IEZhbHNlCi0KLSAgICAgICAgICAgIGRlZiB3b3JrZXIoKToKLSAgICAgICAgICAgICAgICAjIFdhaXQgdW50aWwgdGhlIG1haW4gdGhyZWFkIGhhcyBhdHRlbXB0ZWQgdG8gam9pbiB0aGlzIHRocmVhZAotICAgICAgICAgICAgICAgICMgYmVmb3JlIGNvbnRpbnVpbmcuCi0gICAgICAgICAgICAgICAgd2hpbGUgbm90IHN0YXJ0X2Zvcms6Ci0gICAgICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4wMSkKLSAgICAgICAgICAgICAgICBjaGlsZHBpZCA9IG9zLmZvcmsoKQotICAgICAgICAgICAgICAgIGlmIGNoaWxkcGlkICE9IDA6Ci0gICAgICAgICAgICAgICAgICAgICMgUGFyZW50IHByb2Nlc3MganVzdCB3YWl0cyBmb3IgY2hpbGQuCi0gICAgICAgICAgICAgICAgICAgIChjcGlkLCByYykgPSBvcy53YWl0cGlkKGNoaWxkcGlkLCAwKQotICAgICAgICAgICAgICAgICAgICBhc3NlcnQgY3BpZCA9PSBjaGlsZHBpZAotICAgICAgICAgICAgICAgICAgICBhc3NlcnQgcmMgPT0gMAotICAgICAgICAgICAgICAgICAgICBwcmludCgnZW5kIG9mIHdvcmtlciB0aHJlYWQnKQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICMgQ2hpbGQgcHJvY2VzcyBzaG91bGQganVzdCByZXR1cm4uCi0gICAgICAgICAgICAgICAgICAgIHBhc3MKLQotICAgICAgICAgICAgdyA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PXdvcmtlcikKLQotICAgICAgICAgICAgIyBTdHViIG91dCB0aGUgcHJpdmF0ZSBjb25kaXRpb24gdmFyaWFibGUncyBfcmVsZWFzZV9zYXZlIG1ldGhvZC4KLSAgICAgICAgICAgICMgVGhpcyByZWxlYXNlcyB0aGUgY29uZGl0aW9uJ3MgbG9jayBhbmQgZmxpcHMgdGhlIGdsb2JhbCB0aGF0Ci0gICAgICAgICAgICAjIGNhdXNlcyB0aGUgd29ya2VyIHRvIGZvcmsuICBBdCB0aGlzIHBvaW50LCB0aGUgcHJvYmxlbWF0aWMgd2FpdGVyCi0gICAgICAgICAgICAjIGxvY2sgaGFzIGJlZW4gYWNxdWlyZWQgb25jZSBieSB0aGUgd2FpdGVyIGFuZCBoYXMgYmVlbiBwdXQgb250bwotICAgICAgICAgICAgIyB0aGUgd2FpdGVycyBsaXN0LgotICAgICAgICAgICAgY29uZGl0aW9uID0gdy5fYmxvY2sKLSAgICAgICAgICAgIG9yaWdfcmVsZWFzZV9zYXZlID0gY29uZGl0aW9uLl9yZWxlYXNlX3NhdmUKLSAgICAgICAgICAgIGRlZiBteV9yZWxlYXNlX3NhdmUoKToKLSAgICAgICAgICAgICAgICBnbG9iYWwgc3RhcnRfZm9yawotICAgICAgICAgICAgICAgIG9yaWdfcmVsZWFzZV9zYXZlKCkKLSAgICAgICAgICAgICAgICAjIFdhaXRlciBsb2NrIGhlbGQgaGVyZSwgY29uZGl0aW9uIGxvY2sgcmVsZWFzZWQuCi0gICAgICAgICAgICAgICAgc3RhcnRfZm9yayA9IFRydWUKLSAgICAgICAgICAgIGNvbmRpdGlvbi5fcmVsZWFzZV9zYXZlID0gbXlfcmVsZWFzZV9zYXZlCi0KLSAgICAgICAgICAgIHcuc3RhcnQoKQotICAgICAgICAgICAgdy5qb2luKCkKLSAgICAgICAgICAgIHByaW50KCdlbmQgb2YgbWFpbiB0aHJlYWQnKQotICAgICAgICAgICAgIiIiCi0gICAgICAgIG91dHB1dCA9ICJlbmQgb2Ygd29ya2VyIHRocmVhZFxuZW5kIG9mIG1haW4gdGhyZWFkXG4iCi0gICAgICAgIHNlbGYuYXNzZXJ0U2NyaXB0SGFzT3V0cHV0KHNjcmlwdCwgb3V0cHV0KQotCi0gICAgQHVuaXR0ZXN0LnNraXBJZihzeXMucGxhdGZvcm0gaW4gcGxhdGZvcm1zX3RvX3NraXAsICJkdWUgdG8ga25vd24gT1MgYnVnIikKLSAgICBkZWYgdGVzdF82X2RhZW1vbl90aHJlYWRzKHNlbGYpOgorICAgIGRlZiB0ZXN0XzRfZGFlbW9uX3RocmVhZHMoc2VsZik6CiAgICAgICAgICMgQ2hlY2sgdGhhdCBhIGRhZW1vbiB0aHJlYWQgY2Fubm90IGNyYXNoIHRoZSBpbnRlcnByZXRlciBvbiBzaHV0ZG93bgogICAgICAgICAjIGJ5IG1hbmlwdWxhdGluZyBpbnRlcm5hbCBzdHJ1Y3R1cmVzIHRoYXQgYXJlIGJlaW5nIGRpc3Bvc2VkIG9mIGluCiAgICAgICAgICMgdGhlIG1haW4gdGhyZWFkLgpAQCAtNzczLDQ1ICs3OTYsMTExIEBACiAgICAgICAgIGZvciB0IGluIHRocmVhZHM6CiAgICAgICAgICAgICB0LmpvaW4oKQogCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgJ2ZvcmsnKSwgIm5lZWRzIG9zLmZvcmsoKSIpCisgICAgZGVmIHRlc3RfY2xlYXJfdGhyZWFkc19zdGF0ZXNfYWZ0ZXJfZm9yayhzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMTcwOTQ6IGNoZWNrIHRoYXQgdGhyZWFkcyBzdGF0ZXMgYXJlIGNsZWFyZWQgYWZ0ZXIgZm9yaygpCisKKyAgICAgICAgIyBzdGFydCBhIGJ1bmNoIG9mIHRocmVhZHMKKyAgICAgICAgdGhyZWFkcyA9IFtdCisgICAgICAgIGZvciBpIGluIHJhbmdlKDE2KToKKyAgICAgICAgICAgIHQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1sYW1iZGEgOiB0aW1lLnNsZWVwKDAuMykpCisgICAgICAgICAgICB0aHJlYWRzLmFwcGVuZCh0KQorICAgICAgICAgICAgdC5zdGFydCgpCisKKyAgICAgICAgcGlkID0gb3MuZm9yaygpCisgICAgICAgIGlmIHBpZCA9PSAwOgorICAgICAgICAgICAgIyBjaGVjayB0aGF0IHRocmVhZHMgc3RhdGVzIGhhdmUgYmVlbiBjbGVhcmVkCisgICAgICAgICAgICBpZiBsZW4oc3lzLl9jdXJyZW50X2ZyYW1lcygpKSA9PSAxOgorICAgICAgICAgICAgICAgIG9zLl9leGl0KDApCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG9zLl9leGl0KDEpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBfLCBzdGF0dXMgPSBvcy53YWl0cGlkKHBpZCwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgc3RhdHVzKQorCisgICAgICAgIGZvciB0IGluIHRocmVhZHM6CisgICAgICAgICAgICB0LmpvaW4oKQorCisKK2NsYXNzIFN1YmludGVycFRocmVhZGluZ1Rlc3RzKEJhc2VUZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF90aHJlYWRzX2pvaW4oc2VsZik6CisgICAgICAgICMgTm9uLWRhZW1vbiB0aHJlYWRzIHNob3VsZCBiZSBqb2luZWQgYXQgc3ViaW50ZXJwcmV0ZXIgc2h1dGRvd24KKyAgICAgICAgIyAoaXNzdWUgIzE4ODA4KQorICAgICAgICByLCB3ID0gb3MucGlwZSgpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy5jbG9zZSwgcikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9zLmNsb3NlLCB3KQorICAgICAgICBjb2RlID0gciIiImlmIDE6CisgICAgICAgICAgICBpbXBvcnQgb3MKKyAgICAgICAgICAgIGltcG9ydCB0aHJlYWRpbmcKKyAgICAgICAgICAgIGltcG9ydCB0aW1lCisKKyAgICAgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICAgICAgIyBTbGVlcCBhIGJpdCBzbyB0aGF0IHRoZSB0aHJlYWQgaXMgc3RpbGwgcnVubmluZyB3aGVuCisgICAgICAgICAgICAgICAgIyBQeV9FbmRJbnRlcnByZXRlciBpcyBjYWxsZWQuCisgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgwLjA1KQorICAgICAgICAgICAgICAgIG9zLndyaXRlKCVkLCBiIngiKQorICAgICAgICAgICAgdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9Zikuc3RhcnQoKQorICAgICAgICAgICAgIiIiICUgKHcsKQorICAgICAgICByZXQgPSB0ZXN0LnN1cHBvcnQucnVuX2luX3N1YmludGVycChjb2RlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldCwgMCkKKyAgICAgICAgIyBUaGUgdGhyZWFkIHdhcyBqb2luZWQgcHJvcGVybHkuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MucmVhZChyLCAxKSwgYiJ4IikKKworICAgIGRlZiB0ZXN0X3RocmVhZHNfam9pbl8yKHNlbGYpOgorICAgICAgICAjIFNhbWUgYXMgYWJvdmUsIGJ1dCBhIGRlbGF5IGdldHMgaW50cm9kdWNlZCBhZnRlciB0aGUgdGhyZWFkJ3MKKyAgICAgICAgIyBQeXRob24gY29kZSByZXR1cm5lZCBidXQgYmVmb3JlIHRoZSB0aHJlYWQgc3RhdGUgaXMgZGVsZXRlZC4KKyAgICAgICAgIyBUbyBhY2hpZXZlIHRoaXMsIHdlIHJlZ2lzdGVyIGEgdGhyZWFkLWxvY2FsIG9iamVjdCB3aGljaCBzbGVlcHMKKyAgICAgICAgIyBhIGJpdCB3aGVuIGRlYWxsb2NhdGVkLgorICAgICAgICByLCB3ID0gb3MucGlwZSgpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy5jbG9zZSwgcikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9zLmNsb3NlLCB3KQorICAgICAgICBjb2RlID0gciIiImlmIDE6CisgICAgICAgICAgICBpbXBvcnQgb3MKKyAgICAgICAgICAgIGltcG9ydCB0aHJlYWRpbmcKKyAgICAgICAgICAgIGltcG9ydCB0aW1lCisKKyAgICAgICAgICAgIGNsYXNzIFNsZWVwZXI6CisgICAgICAgICAgICAgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4wNSkKKworICAgICAgICAgICAgdGxzID0gdGhyZWFkaW5nLmxvY2FsKCkKKworICAgICAgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgICAgICAjIFNsZWVwIGEgYml0IHNvIHRoYXQgdGhlIHRocmVhZCBpcyBzdGlsbCBydW5uaW5nIHdoZW4KKyAgICAgICAgICAgICAgICAjIFB5X0VuZEludGVycHJldGVyIGlzIGNhbGxlZC4KKyAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMDUpCisgICAgICAgICAgICAgICAgdGxzLnggPSBTbGVlcGVyKCkKKyAgICAgICAgICAgICAgICBvcy53cml0ZSglZCwgYiJ4IikKKyAgICAgICAgICAgIHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PWYpLnN0YXJ0KCkKKyAgICAgICAgICAgICIiIiAlICh3LCkKKyAgICAgICAgcmV0ID0gdGVzdC5zdXBwb3J0LnJ1bl9pbl9zdWJpbnRlcnAoY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXQsIDApCisgICAgICAgICMgVGhlIHRocmVhZCB3YXMgam9pbmVkIHByb3Blcmx5LgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnJlYWQociwgMSksIGIieCIpCisKICAgICBAY3B5dGhvbl9vbmx5Ci0gICAgQHVuaXR0ZXN0LnNraXBJZihfdGVzdGNhcGkgaXMgTm9uZSwgIm5lZWQgX3Rlc3RjYXBpIG1vZHVsZSIpCi0gICAgZGVmIHRlc3RfZnJhbWVfdHN0YXRlX3RyYWNpbmcoc2VsZik6Ci0gICAgICAgICMgSXNzdWUgIzE0NDMyOiBDcmFzaCB3aGVuIGEgZ2VuZXJhdG9yIGlzIGNyZWF0ZWQgaW4gYSBDIHRocmVhZCB0aGF0IGlzCi0gICAgICAgICMgZGVzdHJveWVkIHdoaWxlIHRoZSBnZW5lcmF0b3IgaXMgc3RpbGwgdXNlZC4gVGhlIGlzc3VlIHdhcyB0aGF0IGEKLSAgICAgICAgIyBnZW5lcmF0b3IgY29udGFpbnMgYSBmcmFtZSwgYW5kIHRoZSBmcmFtZSBrZXB0IGEgcmVmZXJlbmNlIHRvIHRoZQotICAgICAgICAjIFB5dGhvbiBzdGF0ZSBvZiB0aGUgZGVzdHJveWVkIEMgdGhyZWFkLiBUaGUgY3Jhc2ggb2NjdXJzIHdoZW4gYSB0cmFjZQotICAgICAgICAjIGZ1bmN0aW9uIGlzIHNldHVwLgorICAgIGRlZiB0ZXN0X2RhZW1vbl90aHJlYWRzX2ZhdGFsX2Vycm9yKHNlbGYpOgorICAgICAgICBzdWJpbnRlcnBfY29kZSA9IHIiIiJpZiAxOgorICAgICAgICAgICAgaW1wb3J0IG9zCisgICAgICAgICAgICBpbXBvcnQgdGhyZWFkaW5nCisgICAgICAgICAgICBpbXBvcnQgdGltZQogCi0gICAgICAgIGRlZiBub29wX3RyYWNlKGZyYW1lLCBldmVudCwgYXJnKToKLSAgICAgICAgICAgICMgbm8gb3BlcmF0aW9uCi0gICAgICAgICAgICByZXR1cm4gbm9vcF90cmFjZQorICAgICAgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgICAgICAjIE1ha2Ugc3VyZSB0aGUgZGFlbW9uIHRocmVhZCBpcyBzdGlsbCBydW5uaW5nIHdoZW4KKyAgICAgICAgICAgICAgICAjIFB5X0VuZEludGVycHJldGVyIGlzIGNhbGxlZC4KKyAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDEwKQorICAgICAgICAgICAgdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9ZiwgZGFlbW9uPVRydWUpLnN0YXJ0KCkKKyAgICAgICAgICAgICIiIgorICAgICAgICBzY3JpcHQgPSByIiIiaWYgMToKKyAgICAgICAgICAgIGltcG9ydCBfdGVzdGNhcGkKIAotICAgICAgICBkZWYgZ2VuZXJhdG9yKCk6Ci0gICAgICAgICAgICB3aGlsZSAxOgotICAgICAgICAgICAgICAgIHlpZWxkICJnZW5lcmVhdG9yIgotCi0gICAgICAgIGRlZiBjYWxsYmFjaygpOgotICAgICAgICAgICAgaWYgY2FsbGJhY2suZ2VuIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgY2FsbGJhY2suZ2VuID0gZ2VuZXJhdG9yKCkKLSAgICAgICAgICAgIHJldHVybiBuZXh0KGNhbGxiYWNrLmdlbikKLSAgICAgICAgY2FsbGJhY2suZ2VuID0gTm9uZQotCi0gICAgICAgIG9sZF90cmFjZSA9IHN5cy5nZXR0cmFjZSgpCi0gICAgICAgIHN5cy5zZXR0cmFjZShub29wX3RyYWNlKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICAjIEluc3RhbGwgYSB0cmFjZSBmdW5jdGlvbgotICAgICAgICAgICAgdGhyZWFkaW5nLnNldHRyYWNlKG5vb3BfdHJhY2UpCi0KLSAgICAgICAgICAgICMgQ3JlYXRlIGEgZ2VuZXJhdG9yIGluIGEgQyB0aHJlYWQgd2hpY2ggZXhpdHMgYWZ0ZXIgdGhlIGNhbGwKLSAgICAgICAgICAgIF90ZXN0Y2FwaS5jYWxsX2luX3RlbXBvcmFyeV9jX3RocmVhZChjYWxsYmFjaykKLQotICAgICAgICAgICAgIyBDYWxsIHRoZSBnZW5lcmF0b3IgaW4gYSBkaWZmZXJlbnQgUHl0aG9uIHRocmVhZCwgY2hlY2sgdGhhdCB0aGUKLSAgICAgICAgICAgICMgZ2VuZXJhdG9yIGRpZG4ndCBrZWVwIGEgcmVmZXJlbmNlIHRvIHRoZSBkZXN0cm95ZWQgdGhyZWFkIHN0YXRlCi0gICAgICAgICAgICBmb3IgdGVzdCBpbiByYW5nZSgzKToKLSAgICAgICAgICAgICAgICAjIFRoZSB0cmFjZSBmdW5jdGlvbiBpcyBzdGlsbCBjYWxsZWQgaGVyZQotICAgICAgICAgICAgICAgIGNhbGxiYWNrKCkKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIHN5cy5zZXR0cmFjZShvbGRfdHJhY2UpCisgICAgICAgICAgICBfdGVzdGNhcGkucnVuX2luX3N1YmludGVycCglcikKKyAgICAgICAgICAgICIiIiAlIChzdWJpbnRlcnBfY29kZSwpCisgICAgICAgIHdpdGggdGVzdC5zdXBwb3J0LlN1cHByZXNzQ3Jhc2hSZXBvcnQoKToKKyAgICAgICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fZmFpbHVyZSgiLWMiLCBzY3JpcHQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oIkZhdGFsIFB5dGhvbiBlcnJvcjogUHlfRW5kSW50ZXJwcmV0ZXI6ICIKKyAgICAgICAgICAgICAgICAgICAgICAibm90IHRoZSBsYXN0IHRocmVhZCIsIGVyci5kZWNvZGUoKSkKIAogCiBjbGFzcyBUaHJlYWRpbmdFeGNlcHRpb25UZXN0cyhCYXNlVGVzdENhc2UpOgpAQCAtODcyLDYgKzk2MSw4OCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucmV0dXJuY29kZSwgMCwgIlVuZXhwZWN0ZWQgZXJyb3I6ICIgKyBzdGRlcnIuZGVjb2RlKCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgZXhwZWN0ZWRfb3V0cHV0KQogCisgICAgZGVmIHRlc3RfcHJpbnRfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICBzY3JpcHQgPSByIiIiaWYgVHJ1ZToKKyAgICAgICAgICAgIGltcG9ydCB0aHJlYWRpbmcKKyAgICAgICAgICAgIGltcG9ydCB0aW1lCisKKyAgICAgICAgICAgIHJ1bm5pbmcgPSBGYWxzZQorICAgICAgICAgICAgZGVmIHJ1bigpOgorICAgICAgICAgICAgICAgIGdsb2JhbCBydW5uaW5nCisgICAgICAgICAgICAgICAgcnVubmluZyA9IFRydWUKKyAgICAgICAgICAgICAgICB3aGlsZSBydW5uaW5nOgorICAgICAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMDEpCisgICAgICAgICAgICAgICAgMS8wCisgICAgICAgICAgICB0ID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9cnVuKQorICAgICAgICAgICAgdC5zdGFydCgpCisgICAgICAgICAgICB3aGlsZSBub3QgcnVubmluZzoKKyAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMDEpCisgICAgICAgICAgICBydW5uaW5nID0gRmFsc2UKKyAgICAgICAgICAgIHQuam9pbigpCisgICAgICAgICAgICAiIiIKKyAgICAgICAgcmMsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygiLWMiLCBzY3JpcHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LCBiJycpCisgICAgICAgIGVyciA9IGVyci5kZWNvZGUoKQorICAgICAgICBzZWxmLmFzc2VydEluKCJFeGNlcHRpb24gaW4gdGhyZWFkIiwgZXJyKQorICAgICAgICBzZWxmLmFzc2VydEluKCJUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6IiwgZXJyKQorICAgICAgICBzZWxmLmFzc2VydEluKCJaZXJvRGl2aXNpb25FcnJvciIsIGVycikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigiVW5oYW5kbGVkIGV4Y2VwdGlvbiIsIGVycikKKworICAgIGRlZiB0ZXN0X3ByaW50X2V4Y2VwdGlvbl9zdGRlcnJfaXNfbm9uZV8xKHNlbGYpOgorICAgICAgICBzY3JpcHQgPSByIiIiaWYgVHJ1ZToKKyAgICAgICAgICAgIGltcG9ydCBzeXMKKyAgICAgICAgICAgIGltcG9ydCB0aHJlYWRpbmcKKyAgICAgICAgICAgIGltcG9ydCB0aW1lCisKKyAgICAgICAgICAgIHJ1bm5pbmcgPSBGYWxzZQorICAgICAgICAgICAgZGVmIHJ1bigpOgorICAgICAgICAgICAgICAgIGdsb2JhbCBydW5uaW5nCisgICAgICAgICAgICAgICAgcnVubmluZyA9IFRydWUKKyAgICAgICAgICAgICAgICB3aGlsZSBydW5uaW5nOgorICAgICAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMDEpCisgICAgICAgICAgICAgICAgMS8wCisgICAgICAgICAgICB0ID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9cnVuKQorICAgICAgICAgICAgdC5zdGFydCgpCisgICAgICAgICAgICB3aGlsZSBub3QgcnVubmluZzoKKyAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMDEpCisgICAgICAgICAgICBzeXMuc3RkZXJyID0gTm9uZQorICAgICAgICAgICAgcnVubmluZyA9IEZhbHNlCisgICAgICAgICAgICB0LmpvaW4oKQorICAgICAgICAgICAgIiIiCisgICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soIi1jIiwgc2NyaXB0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dCwgYicnKQorICAgICAgICBlcnIgPSBlcnIuZGVjb2RlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiRXhjZXB0aW9uIGluIHRocmVhZCIsIGVycikKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOiIsIGVycikKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiWmVyb0RpdmlzaW9uRXJyb3IiLCBlcnIpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oIlVuaGFuZGxlZCBleGNlcHRpb24iLCBlcnIpCisKKyAgICBkZWYgdGVzdF9wcmludF9leGNlcHRpb25fc3RkZXJyX2lzX25vbmVfMihzZWxmKToKKyAgICAgICAgc2NyaXB0ID0gciIiImlmIFRydWU6CisgICAgICAgICAgICBpbXBvcnQgc3lzCisgICAgICAgICAgICBpbXBvcnQgdGhyZWFkaW5nCisgICAgICAgICAgICBpbXBvcnQgdGltZQorCisgICAgICAgICAgICBydW5uaW5nID0gRmFsc2UKKyAgICAgICAgICAgIGRlZiBydW4oKToKKyAgICAgICAgICAgICAgICBnbG9iYWwgcnVubmluZworICAgICAgICAgICAgICAgIHJ1bm5pbmcgPSBUcnVlCisgICAgICAgICAgICAgICAgd2hpbGUgcnVubmluZzoKKyAgICAgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgwLjAxKQorICAgICAgICAgICAgICAgIDEvMAorICAgICAgICAgICAgc3lzLnN0ZGVyciA9IE5vbmUKKyAgICAgICAgICAgIHQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1ydW4pCisgICAgICAgICAgICB0LnN0YXJ0KCkKKyAgICAgICAgICAgIHdoaWxlIG5vdCBydW5uaW5nOgorICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4wMSkKKyAgICAgICAgICAgIHJ1bm5pbmcgPSBGYWxzZQorICAgICAgICAgICAgdC5qb2luKCkKKyAgICAgICAgICAgICIiIgorICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCItYyIsIHNjcmlwdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQsIGInJykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigiVW5oYW5kbGVkIGV4Y2VwdGlvbiIsIGVyci5kZWNvZGUoKSkKKworCiBjbGFzcyBUaW1lclRlc3RzKEJhc2VUZXN0Q2FzZSk6CiAKICAgICBkZWYgc2V0VXAoc2VsZik6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3RocmVhZGluZ19sb2NhbC5weSBiL0xpYi90ZXN0L3Rlc3RfdGhyZWFkaW5nX2xvY2FsLnB5CmluZGV4IGM4ODZhMjUuLmM3ZjM5NGMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdGhyZWFkaW5nX2xvY2FsLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdGhyZWFkaW5nX2xvY2FsLnB5CkBAIC02NCwxNCArNjQsOSBAQAogICAgICAgICAgICAgIyBTaW1wbHkgY2hlY2sgdGhhdCB0aGUgdmFyaWFibGUgaXMgY29ycmVjdGx5IHNldAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2NhbC54LCBpKQogCi0gICAgICAgIHRocmVhZHM9IFtdCi0gICAgICAgIGZvciBpIGluIHJhbmdlKDEwKToKLSAgICAgICAgICAgIHQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1mLCBhcmdzPShpLCkpCi0gICAgICAgICAgICB0LnN0YXJ0KCkKLSAgICAgICAgICAgIHRocmVhZHMuYXBwZW5kKHQpCi0KLSAgICAgICAgZm9yIHQgaW4gdGhyZWFkczoKLSAgICAgICAgICAgIHQuam9pbigpCisgICAgICAgIHdpdGggc3VwcG9ydC5zdGFydF90aHJlYWRzKHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PWYsIGFyZ3M9KGksKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTApKToKKyAgICAgICAgICAgIHBhc3MKIAogICAgIGRlZiB0ZXN0X2Rlcml2ZWRfY3ljbGVfZGVhbGxvYyhzZWxmKToKICAgICAgICAgIyBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlNjk5MApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF90aHJlYWRzaWduYWxzLnB5IGIvTGliL3Rlc3QvdGVzdF90aHJlYWRzaWduYWxzLnB5CmluZGV4IGY5NzVhNzUuLjlkOTI3NDIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdGhyZWFkc2lnbmFscy5weQorKysgYi9MaWIvdGVzdC90ZXN0X3RocmVhZHNpZ25hbHMucHkKQEAgLTgsNyArOCw3IEBACiB0aHJlYWQgPSBpbXBvcnRfbW9kdWxlKCdfdGhyZWFkJykKIGltcG9ydCB0aW1lCiAKLWlmIHN5cy5wbGF0Zm9ybVs6M10gaW4gKCd3aW4nLCAnb3MyJykgb3Igc3lzLnBsYXRmb3JtPT0ncmlzY29zJzoKK2lmIChzeXMucGxhdGZvcm1bOjNdID09ICd3aW4nKToKICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiQ2FuJ3QgdGVzdCBzaWduYWwgb24gJXMiICUgc3lzLnBsYXRmb3JtKQogCiBwcm9jZXNzX3BpZCA9IG9zLmdldHBpZCgpCkBAIC03NCw2ICs3NCw5IEBACiAKICAgICBAdW5pdHRlc3Quc2tpcElmKFVTSU5HX1BUSFJFQURfQ09ORCwKICAgICAgICAgICAgICAgICAgICAgICdQT1NJWCBjb25kaXRpb24gdmFyaWFibGVzIGNhbm5vdCBiZSBpbnRlcnJ1cHRlZCcpCisgICAgIyBJc3N1ZSAjMjA1NjQ6IHNlbV90aW1lZHdhaXQoKSBjYW5ub3QgYmUgaW50ZXJydXB0ZWQgb24gT3BlbkJTRAorICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ29wZW5ic2QnKSwKKyAgICAgICAgICAgICAgICAgICAgICdsb2NrIGNhbm5vdCBiZSBpbnRlcnJ1cHRlZCBvbiBPcGVuQlNEJykKICAgICBkZWYgdGVzdF9sb2NrX2FjcXVpcmVfaW50ZXJydXB0aW9uKHNlbGYpOgogICAgICAgICAjIE1pbWljIHJlY2VpdmluZyBhIFNJR0lOVCAoS2V5Ym9hcmRJbnRlcnJ1cHQpIHdpdGggU0lHQUxSTSB3aGlsZSBzdHVjawogICAgICAgICAjIGluIGEgZGVhZGxvY2suCkBAIC05Nyw2ICsxMDAsOSBAQAogCiAgICAgQHVuaXR0ZXN0LnNraXBJZihVU0lOR19QVEhSRUFEX0NPTkQsCiAgICAgICAgICAgICAgICAgICAgICAnUE9TSVggY29uZGl0aW9uIHZhcmlhYmxlcyBjYW5ub3QgYmUgaW50ZXJydXB0ZWQnKQorICAgICMgSXNzdWUgIzIwNTY0OiBzZW1fdGltZWR3YWl0KCkgY2Fubm90IGJlIGludGVycnVwdGVkIG9uIE9wZW5CU0QKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCdvcGVuYnNkJyksCisgICAgICAgICAgICAgICAgICAgICAnbG9jayBjYW5ub3QgYmUgaW50ZXJydXB0ZWQgb24gT3BlbkJTRCcpCiAgICAgZGVmIHRlc3RfcmxvY2tfYWNxdWlyZV9pbnRlcnJ1cHRpb24oc2VsZik6CiAgICAgICAgICMgTWltaWMgcmVjZWl2aW5nIGEgU0lHSU5UIChLZXlib2FyZEludGVycnVwdCkgd2l0aCBTSUdBTFJNIHdoaWxlIHN0dWNrCiAgICAgICAgICMgaW4gYSBkZWFkbG9jay4KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdGltZS5weSBiL0xpYi90ZXN0L3Rlc3RfdGltZS5weQppbmRleCAxYTRkODczLi5iZTdkZGNjIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3RpbWUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF90aW1lLnB5CkBAIC0xNCw2ICsxNCw4IEBACiBTSVpFT0ZfSU5UID0gc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdTSVpFT0ZfSU5UJykgb3IgNAogVElNRV9NQVhZRUFSID0gKDEgPDwgOCAqIFNJWkVPRl9JTlQgLSAxKSAtIDEKIFRJTUVfTUlOWUVBUiA9IC1USU1FX01BWFlFQVIgLSAxCitfUHlUaW1lX1JPVU5EX0RPV04gPSAwCitfUHlUaW1lX1JPVU5EX1VQID0gMQogCiAKIGNsYXNzIFRpbWVUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC0yMjYsNyArMjI4LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0aW1lLmN0aW1lKHQpLCAnU3VuIFNlcCAxNiAwMTowMzo1MiAxOTczJykKICAgICAgICAgdCA9IHRpbWUubWt0aW1lKCgyMDAwLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAtMSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGltZS5jdGltZSh0KSwgJ1NhdCBKYW4gIDEgMDA6MDA6MDAgMjAwMCcpCi0gICAgICAgIGZvciB5ZWFyIGluIFstMTAwLCAxMDAsIDEwMDAsIDIwMDAsIDEwMDAwXToKKyAgICAgICAgZm9yIHllYXIgaW4gWy0xMDAsIDEwMCwgMTAwMCwgMjAwMCwgMjA1MCwgMTAwMDBdOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHRlc3R2YWwgPSB0aW1lLm1rdGltZSgoeWVhciwgMSwgMTApICsgKDAsKSo2KQogICAgICAgICAgICAgZXhjZXB0IChWYWx1ZUVycm9yLCBPdmVyZmxvd0Vycm9yKToKQEAgLTM0NCw2ICszNDYsMTMgQEAKICAgICBkZWYgdGVzdF9ta3RpbWUoc2VsZik6CiAgICAgICAgICMgSXNzdWUgIzE3MjY2ODcKICAgICAgICAgZm9yIHQgaW4gKC0yLCAtMSwgMCwgMSk6CisgICAgICAgICAgICBpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnYWl4JykgYW5kIHQgPT0gLTE6CisgICAgICAgICAgICAgICAgIyBJc3N1ZSAjMTExODgsICMxOTc0ODogbWt0aW1lKCkgcmV0dXJucyAtMSBvbiBlcnJvci4gT24gTGludXgsCisgICAgICAgICAgICAgICAgIyB0aGUgdG1fd2RheSBmaWVsZCBpcyB1c2VkIGFzIGEgc2VudGluZWwgKCkgdG8gZGV0ZWN0IGlmIC0xIGlzCisgICAgICAgICAgICAgICAgIyByZWFsbHkgYW4gZXJyb3Igb3IgYSB2YWxpZCB0aW1lc3RhbXAuIE9uIEFJWCwgdG1fd2RheSBpcworICAgICAgICAgICAgICAgICMgdW5jaGFuZ2VkIGV2ZW4gb24gc3VjY2VzcyBhbmQgc28gY2Fubm90IGJlIHVzZWQgYXMgYQorICAgICAgICAgICAgICAgICMgc2VudGluZWwuCisgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICB0dCA9IHRpbWUubG9jYWx0aW1lKHQpCiAgICAgICAgICAgICBleGNlcHQgKE92ZXJmbG93RXJyb3IsIE9TRXJyb3IpOgpAQCAtMzcxLDYgKzM4MCwxNCBAQAogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIodGltZSwgJ21vbm90b25pYycpLAogICAgICAgICAgICAgICAgICAgICAgICAgICduZWVkIHRpbWUubW9ub3RvbmljJykKICAgICBkZWYgdGVzdF9tb25vdG9uaWMoc2VsZik6CisgICAgICAgICMgbW9ub3RvbmljKCkgc2hvdWxkIG5vdCBnbyBiYWNrd2FyZAorICAgICAgICB0aW1lcyA9IFt0aW1lLm1vbm90b25pYygpIGZvciBuIGluIHJhbmdlKDEwMCldCisgICAgICAgIHQxID0gdGltZXNbMF0KKyAgICAgICAgZm9yIHQyIGluIHRpbWVzWzE6XToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKHQyLCB0MSwgInRpbWVzPSVzIiAlIHRpbWVzKQorICAgICAgICAgICAgdDEgPSB0MgorCisgICAgICAgICMgbW9ub3RvbmljKCkgaW5jbHVkZXMgdGltZSBlbGFwc2VkIGR1cmluZyBhIHNsZWVwCiAgICAgICAgIHQxID0gdGltZS5tb25vdG9uaWMoKQogICAgICAgICB0aW1lLnNsZWVwKDAuNSkKICAgICAgICAgdDIgPSB0aW1lLm1vbm90b25pYygpCkBAIC0zNzksNiArMzk2LDcgQEAKICAgICAgICAgIyBJc3N1ZSAjMjAxMDE6IE9uIHNvbWUgV2luZG93cyBtYWNoaW5lcywgZHQgbWF5IGJlIHNsaWdodGx5IGxvdwogICAgICAgICBzZWxmLmFzc2VydFRydWUoMC40NSA8PSBkdCA8PSAxLjAsIGR0KQogCisgICAgICAgICMgbW9ub3RvbmljKCkgaXMgYSBtb25vdG9uaWMgYnV0IG5vbiBhZGp1c3RhYmxlIGNsb2NrCiAgICAgICAgIGluZm8gPSB0aW1lLmdldF9jbG9ja19pbmZvKCdtb25vdG9uaWMnKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoaW5mby5tb25vdG9uaWMpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW5mby5hZGp1c3RhYmxlKQpAQCAtNTc2LDU4ICs1OTQsMTE2IEBACiAgICAgQHN1cHBvcnQuY3B5dGhvbl9vbmx5CiAgICAgZGVmIHRlc3RfdGltZV90KHNlbGYpOgogICAgICAgICBmcm9tIF90ZXN0Y2FwaSBpbXBvcnQgcHl0aW1lX29iamVjdF90b190aW1lX3QKLSAgICAgICAgZm9yIG9iaiwgdGltZV90IGluICgKLSAgICAgICAgICAgICgwLCAwKSwKLSAgICAgICAgICAgICgtMSwgLTEpLAotICAgICAgICAgICAgKC0xLjAsIC0xKSwKLSAgICAgICAgICAgICgtMS45LCAtMSksCi0gICAgICAgICAgICAoMS4wLCAxKSwKLSAgICAgICAgICAgICgxLjksIDEpLAorICAgICAgICBmb3Igb2JqLCB0aW1lX3QsIHJuZCBpbiAoCisgICAgICAgICAgICAjIFJvdW5kIHRvd2FyZHMgemVybworICAgICAgICAgICAgKDAsIDAsIF9QeVRpbWVfUk9VTkRfRE9XTiksCisgICAgICAgICAgICAoLTEsIC0xLCBfUHlUaW1lX1JPVU5EX0RPV04pLAorICAgICAgICAgICAgKC0xLjAsIC0xLCBfUHlUaW1lX1JPVU5EX0RPV04pLAorICAgICAgICAgICAgKC0xLjksIC0xLCBfUHlUaW1lX1JPVU5EX0RPV04pLAorICAgICAgICAgICAgKDEuMCwgMSwgX1B5VGltZV9ST1VORF9ET1dOKSwKKyAgICAgICAgICAgICgxLjksIDEsIF9QeVRpbWVfUk9VTkRfRE9XTiksCisgICAgICAgICAgICAjIFJvdW5kIGF3YXkgZnJvbSB6ZXJvCisgICAgICAgICAgICAoMCwgMCwgX1B5VGltZV9ST1VORF9VUCksCisgICAgICAgICAgICAoLTEsIC0xLCBfUHlUaW1lX1JPVU5EX1VQKSwKKyAgICAgICAgICAgICgtMS4wLCAtMSwgX1B5VGltZV9ST1VORF9VUCksCisgICAgICAgICAgICAoLTEuOSwgLTIsIF9QeVRpbWVfUk9VTkRfVVApLAorICAgICAgICAgICAgKDEuMCwgMSwgX1B5VGltZV9ST1VORF9VUCksCisgICAgICAgICAgICAoMS45LCAyLCBfUHlUaW1lX1JPVU5EX1VQKSwKICAgICAgICAgKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHl0aW1lX29iamVjdF90b190aW1lX3Qob2JqKSwgdGltZV90KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChweXRpbWVfb2JqZWN0X3RvX3RpbWVfdChvYmosIHJuZCksIHRpbWVfdCkKIAorICAgICAgICBybmQgPSBfUHlUaW1lX1JPVU5EX0RPV04KICAgICAgICAgZm9yIGludmFsaWQgaW4gc2VsZi5pbnZhbGlkX3ZhbHVlczoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIHB5dGltZV9vYmplY3RfdG9fdGltZV90LCBpbnZhbGlkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB5dGltZV9vYmplY3RfdG9fdGltZV90LCBpbnZhbGlkLCBybmQpCiAKICAgICBAc3VwcG9ydC5jcHl0aG9uX29ubHkKICAgICBkZWYgdGVzdF90aW1ldmFsKHNlbGYpOgogICAgICAgICBmcm9tIF90ZXN0Y2FwaSBpbXBvcnQgcHl0aW1lX29iamVjdF90b190aW1ldmFsCi0gICAgICAgIGZvciBvYmosIHRpbWV2YWwgaW4gKAotICAgICAgICAgICAgKDAsICgwLCAwKSksCi0gICAgICAgICAgICAoLTEsICgtMSwgMCkpLAotICAgICAgICAgICAgKC0xLjAsICgtMSwgMCkpLAotICAgICAgICAgICAgKDFlLTYsICgwLCAxKSksCi0gICAgICAgICAgICAoLTFlLTYsICgtMSwgOTk5OTk5KSksCi0gICAgICAgICAgICAoLTEuMiwgKC0yLCA4MDAwMDApKSwKLSAgICAgICAgICAgICgxLjEyMzQ1NjAsICgxLCAxMjM0NTYpKSwKLSAgICAgICAgICAgICgxLjEyMzQ1NjksICgxLCAxMjM0NTYpKSwKLSAgICAgICAgICAgICgtMS4xMjM0NTYwLCAoLTIsIDg3NjU0NCkpLAotICAgICAgICAgICAgKC0xLjEyMzQ1NjEsICgtMiwgODc2NTQzKSksCisgICAgICAgIGZvciBvYmosIHRpbWV2YWwsIHJuZCBpbiAoCisgICAgICAgICAgICAjIFJvdW5kIHRvd2FyZHMgemVybworICAgICAgICAgICAgKDAsICgwLCAwKSwgX1B5VGltZV9ST1VORF9ET1dOKSwKKyAgICAgICAgICAgICgtMSwgKC0xLCAwKSwgX1B5VGltZV9ST1VORF9ET1dOKSwKKyAgICAgICAgICAgICgtMS4wLCAoLTEsIDApLCBfUHlUaW1lX1JPVU5EX0RPV04pLAorICAgICAgICAgICAgKDFlLTYsICgwLCAxKSwgX1B5VGltZV9ST1VORF9ET1dOKSwKKyAgICAgICAgICAgICgxZS03LCAoMCwgMCksIF9QeVRpbWVfUk9VTkRfRE9XTiksCisgICAgICAgICAgICAoLTFlLTYsICgtMSwgOTk5OTk5KSwgX1B5VGltZV9ST1VORF9ET1dOKSwKKyAgICAgICAgICAgICgtMWUtNywgKC0xLCA5OTk5OTkpLCBfUHlUaW1lX1JPVU5EX0RPV04pLAorICAgICAgICAgICAgKC0xLjIsICgtMiwgODAwMDAwKSwgX1B5VGltZV9ST1VORF9ET1dOKSwKKyAgICAgICAgICAgICgwLjk5OTk5OTksICgwLCA5OTk5OTkpLCBfUHlUaW1lX1JPVU5EX0RPV04pLAorICAgICAgICAgICAgKDAuMDAwMDA0MSwgKDAsIDQpLCBfUHlUaW1lX1JPVU5EX0RPV04pLAorICAgICAgICAgICAgKDEuMTIzNDU2MCwgKDEsIDEyMzQ1NiksIF9QeVRpbWVfUk9VTkRfRE9XTiksCisgICAgICAgICAgICAoMS4xMjM0NTY5LCAoMSwgMTIzNDU2KSwgX1B5VGltZV9ST1VORF9ET1dOKSwKKyAgICAgICAgICAgICgtMC4wMDAwMDQwLCAoLTEsIDk5OTk5NiksIF9QeVRpbWVfUk9VTkRfRE9XTiksCisgICAgICAgICAgICAoLTAuMDAwMDA0MSwgKC0xLCA5OTk5OTUpLCBfUHlUaW1lX1JPVU5EX0RPV04pLAorICAgICAgICAgICAgKC0xLjEyMzQ1NjAsICgtMiwgODc2NTQ0KSwgX1B5VGltZV9ST1VORF9ET1dOKSwKKyAgICAgICAgICAgICgtMS4xMjM0NTYxLCAoLTIsIDg3NjU0MyksIF9QeVRpbWVfUk9VTkRfRE9XTiksCisgICAgICAgICAgICAjIFJvdW5kIGF3YXkgZnJvbSB6ZXJvCisgICAgICAgICAgICAoMCwgKDAsIDApLCBfUHlUaW1lX1JPVU5EX1VQKSwKKyAgICAgICAgICAgICgtMSwgKC0xLCAwKSwgX1B5VGltZV9ST1VORF9VUCksCisgICAgICAgICAgICAoLTEuMCwgKC0xLCAwKSwgX1B5VGltZV9ST1VORF9VUCksCisgICAgICAgICAgICAoMWUtNiwgKDAsIDEpLCBfUHlUaW1lX1JPVU5EX1VQKSwKKyAgICAgICAgICAgICgxZS03LCAoMCwgMSksIF9QeVRpbWVfUk9VTkRfVVApLAorICAgICAgICAgICAgKC0xZS02LCAoLTEsIDk5OTk5OSksIF9QeVRpbWVfUk9VTkRfVVApLAorICAgICAgICAgICAgKC0xZS03LCAoLTEsIDk5OTk5OSksIF9QeVRpbWVfUk9VTkRfVVApLAorICAgICAgICAgICAgKC0xLjIsICgtMiwgODAwMDAwKSwgX1B5VGltZV9ST1VORF9VUCksCisgICAgICAgICAgICAoMC45OTk5OTk5LCAoMSwgMCksIF9QeVRpbWVfUk9VTkRfVVApLAorICAgICAgICAgICAgKDAuMDAwMDA0MSwgKDAsIDUpLCBfUHlUaW1lX1JPVU5EX1VQKSwKKyAgICAgICAgICAgICgxLjEyMzQ1NjAsICgxLCAxMjM0NTcpLCBfUHlUaW1lX1JPVU5EX1VQKSwKKyAgICAgICAgICAgICgxLjEyMzQ1NjksICgxLCAxMjM0NTcpLCBfUHlUaW1lX1JPVU5EX1VQKSwKKyAgICAgICAgICAgICgtMC4wMDAwMDQwLCAoLTEsIDk5OTk5NiksIF9QeVRpbWVfUk9VTkRfVVApLAorICAgICAgICAgICAgKC0wLjAwMDAwNDEsICgtMSwgOTk5OTk1KSwgX1B5VGltZV9ST1VORF9VUCksCisgICAgICAgICAgICAoLTEuMTIzNDU2MCwgKC0yLCA4NzY1NDQpLCBfUHlUaW1lX1JPVU5EX1VQKSwKKyAgICAgICAgICAgICgtMS4xMjM0NTYxLCAoLTIsIDg3NjU0MyksIF9QeVRpbWVfUk9VTkRfVVApLAogICAgICAgICApOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChweXRpbWVfb2JqZWN0X3RvX3RpbWV2YWwob2JqKSwgdGltZXZhbCkKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG9iaj1vYmosIHJvdW5kPXJuZCwgdGltZXZhbD10aW1ldmFsKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHB5dGltZV9vYmplY3RfdG9fdGltZXZhbChvYmosIHJuZCksIHRpbWV2YWwpCiAKKyAgICAgICAgcm5kID0gX1B5VGltZV9ST1VORF9ET1dOCiAgICAgICAgIGZvciBpbnZhbGlkIGluIHNlbGYuaW52YWxpZF92YWx1ZXM6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBweXRpbWVfb2JqZWN0X3RvX3RpbWV2YWwsIGludmFsaWQpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHl0aW1lX29iamVjdF90b190aW1ldmFsLCBpbnZhbGlkLCBybmQpCiAKICAgICBAc3VwcG9ydC5jcHl0aG9uX29ubHkKICAgICBkZWYgdGVzdF90aW1lc3BlYyhzZWxmKToKICAgICAgICAgZnJvbSBfdGVzdGNhcGkgaW1wb3J0IHB5dGltZV9vYmplY3RfdG9fdGltZXNwZWMKLSAgICAgICAgZm9yIG9iaiwgdGltZXNwZWMgaW4gKAotICAgICAgICAgICAgKDAsICgwLCAwKSksCi0gICAgICAgICAgICAoLTEsICgtMSwgMCkpLAotICAgICAgICAgICAgKC0xLjAsICgtMSwgMCkpLAotICAgICAgICAgICAgKDFlLTksICgwLCAxKSksCi0gICAgICAgICAgICAoLTFlLTksICgtMSwgOTk5OTk5OTk5KSksCi0gICAgICAgICAgICAoLTEuMiwgKC0yLCA4MDAwMDAwMDApKSwKLSAgICAgICAgICAgICgxLjEyMzQ1Njc4OTAsICgxLCAxMjM0NTY3ODkpKSwKLSAgICAgICAgICAgICgxLjEyMzQ1Njc4OTksICgxLCAxMjM0NTY3ODkpKSwKLSAgICAgICAgICAgICgtMS4xMjM0NTY3ODkwLCAoLTIsIDg3NjU0MzIxMSkpLAotICAgICAgICAgICAgKC0xLjEyMzQ1Njc4OTEsICgtMiwgODc2NTQzMjEwKSksCisgICAgICAgIGZvciBvYmosIHRpbWVzcGVjLCBybmQgaW4gKAorICAgICAgICAgICAgIyBSb3VuZCB0b3dhcmRzIHplcm8KKyAgICAgICAgICAgICgwLCAoMCwgMCksIF9QeVRpbWVfUk9VTkRfRE9XTiksCisgICAgICAgICAgICAoLTEsICgtMSwgMCksIF9QeVRpbWVfUk9VTkRfRE9XTiksCisgICAgICAgICAgICAoLTEuMCwgKC0xLCAwKSwgX1B5VGltZV9ST1VORF9ET1dOKSwKKyAgICAgICAgICAgICgxZS05LCAoMCwgMSksIF9QeVRpbWVfUk9VTkRfRE9XTiksCisgICAgICAgICAgICAoMWUtMTAsICgwLCAwKSwgX1B5VGltZV9ST1VORF9ET1dOKSwKKyAgICAgICAgICAgICgtMWUtOSwgKC0xLCA5OTk5OTk5OTkpLCBfUHlUaW1lX1JPVU5EX0RPV04pLAorICAgICAgICAgICAgKC0xZS0xMCwgKC0xLCA5OTk5OTk5OTkpLCBfUHlUaW1lX1JPVU5EX0RPV04pLAorICAgICAgICAgICAgKC0xLjIsICgtMiwgODAwMDAwMDAwKSwgX1B5VGltZV9ST1VORF9ET1dOKSwKKyAgICAgICAgICAgICgwLjk5OTk5OTk5OTksICgwLCA5OTk5OTk5OTkpLCBfUHlUaW1lX1JPVU5EX0RPV04pLAorICAgICAgICAgICAgKDEuMTIzNDU2Nzg5MCwgKDEsIDEyMzQ1Njc4OSksIF9QeVRpbWVfUk9VTkRfRE9XTiksCisgICAgICAgICAgICAoMS4xMjM0NTY3ODk5LCAoMSwgMTIzNDU2Nzg5KSwgX1B5VGltZV9ST1VORF9ET1dOKSwKKyAgICAgICAgICAgICgtMS4xMjM0NTY3ODkwLCAoLTIsIDg3NjU0MzIxMSksIF9QeVRpbWVfUk9VTkRfRE9XTiksCisgICAgICAgICAgICAoLTEuMTIzNDU2Nzg5MSwgKC0yLCA4NzY1NDMyMTApLCBfUHlUaW1lX1JPVU5EX0RPV04pLAorICAgICAgICAgICAgIyBSb3VuZCBhd2F5IGZyb20gemVybworICAgICAgICAgICAgKDAsICgwLCAwKSwgX1B5VGltZV9ST1VORF9VUCksCisgICAgICAgICAgICAoLTEsICgtMSwgMCksIF9QeVRpbWVfUk9VTkRfVVApLAorICAgICAgICAgICAgKC0xLjAsICgtMSwgMCksIF9QeVRpbWVfUk9VTkRfVVApLAorICAgICAgICAgICAgKDFlLTksICgwLCAxKSwgX1B5VGltZV9ST1VORF9VUCksCisgICAgICAgICAgICAoMWUtMTAsICgwLCAxKSwgX1B5VGltZV9ST1VORF9VUCksCisgICAgICAgICAgICAoLTFlLTksICgtMSwgOTk5OTk5OTk5KSwgX1B5VGltZV9ST1VORF9VUCksCisgICAgICAgICAgICAoLTFlLTEwLCAoLTEsIDk5OTk5OTk5OSksIF9QeVRpbWVfUk9VTkRfVVApLAorICAgICAgICAgICAgKC0xLjIsICgtMiwgODAwMDAwMDAwKSwgX1B5VGltZV9ST1VORF9VUCksCisgICAgICAgICAgICAoMC45OTk5OTk5OTk5LCAoMSwgMCksIF9QeVRpbWVfUk9VTkRfVVApLAorICAgICAgICAgICAgKDEuMTIzNDU2Nzg5MCwgKDEsIDEyMzQ1Njc5MCksIF9QeVRpbWVfUk9VTkRfVVApLAorICAgICAgICAgICAgKDEuMTIzNDU2Nzg5OSwgKDEsIDEyMzQ1Njc5MCksIF9QeVRpbWVfUk9VTkRfVVApLAorICAgICAgICAgICAgKC0xLjEyMzQ1Njc4OTAsICgtMiwgODc2NTQzMjExKSwgX1B5VGltZV9ST1VORF9VUCksCisgICAgICAgICAgICAoLTEuMTIzNDU2Nzg5MSwgKC0yLCA4NzY1NDMyMTApLCBfUHlUaW1lX1JPVU5EX1VQKSwKICAgICAgICAgKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHl0aW1lX29iamVjdF90b190aW1lc3BlYyhvYmopLCB0aW1lc3BlYykKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG9iaj1vYmosIHJvdW5kPXJuZCwgdGltZXNwZWM9dGltZXNwZWMpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHl0aW1lX29iamVjdF90b190aW1lc3BlYyhvYmosIHJuZCksIHRpbWVzcGVjKQogCisgICAgICAgIHJuZCA9IF9QeVRpbWVfUk9VTkRfRE9XTgogICAgICAgICBmb3IgaW52YWxpZCBpbiBzZWxmLmludmFsaWRfdmFsdWVzOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgcHl0aW1lX29iamVjdF90b190aW1lc3BlYywgaW52YWxpZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBweXRpbWVfb2JqZWN0X3RvX3RpbWVzcGVjLCBpbnZhbGlkLCBybmQpCiAKICAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyh0aW1lLl9TVFJVQ1RfVE1fSVRFTVMgPT0gMTEsICJuZWVkcyB0bV96b25lIHN1cHBvcnQiKQogICAgIGRlZiB0ZXN0X2xvY2FsdGltZV90aW1lem9uZShzZWxmKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdGltZWl0LnB5IGIvTGliL3Rlc3QvdGVzdF90aW1laXQucHkKaW5kZXggNjI1ZmI4ZC4uOTE4YTI5NCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF90aW1laXQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF90aW1laXQucHkKQEAgLTczLDkgKzczLDIxIEBACiAKICAgICBkZWYgdGVzdF90aW1lcl9pbnZhbGlkX3N0bXQoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHRpbWVpdC5UaW1lciwgc3RtdD1Ob25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvciwgdGltZWl0LlRpbWVyLCBzdG10PSdyZXR1cm4nKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvciwgdGltZWl0LlRpbWVyLCBzdG10PSd5aWVsZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yLCB0aW1laXQuVGltZXIsIHN0bXQ9J3lpZWxkIGZyb20gKCknKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvciwgdGltZWl0LlRpbWVyLCBzdG10PSdicmVhaycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yLCB0aW1laXQuVGltZXIsIHN0bXQ9J2NvbnRpbnVlJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IsIHRpbWVpdC5UaW1lciwgc3RtdD0nZnJvbSB0aW1laXQgaW1wb3J0IConKQogCiAgICAgZGVmIHRlc3RfdGltZXJfaW52YWxpZF9zZXR1cChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdGltZWl0LlRpbWVyLCBzZXR1cD1Ob25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvciwgdGltZWl0LlRpbWVyLCBzZXR1cD0ncmV0dXJuJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IsIHRpbWVpdC5UaW1lciwgc2V0dXA9J3lpZWxkJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IsIHRpbWVpdC5UaW1lciwgc2V0dXA9J3lpZWxkIGZyb20gKCknKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvciwgdGltZWl0LlRpbWVyLCBzZXR1cD0nYnJlYWsnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvciwgdGltZWl0LlRpbWVyLCBzZXR1cD0nY29udGludWUnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvciwgdGltZWl0LlRpbWVyLCBzZXR1cD0nZnJvbSB0aW1laXQgaW1wb3J0IConKQogCiAgICAgZmFrZV9zZXR1cCA9ICJpbXBvcnQgdGltZWl0OyB0aW1laXQuX2Zha2VfdGltZXIuc2V0dXAoKSIKICAgICBmYWtlX3N0bXQgPSAiaW1wb3J0IHRpbWVpdDsgdGltZWl0Ll9mYWtlX3RpbWVyLmluYygpIgpAQCAtMTEyLDYgKzEyNCw5IEBACiAgICAgZGVmIHRlc3RfdGltZWl0X2NhbGxhYmxlX3N0bXQoc2VsZik6CiAgICAgICAgIHNlbGYudGltZWl0KHNlbGYuZmFrZV9jYWxsYWJsZV9zdG10LCBzZWxmLmZha2Vfc2V0dXAsIG51bWJlcj0zKQogCisgICAgZGVmIHRlc3RfdGltZWl0X2NhbGxhYmxlX3NldHVwKHNlbGYpOgorICAgICAgICBzZWxmLnRpbWVpdChzZWxmLmZha2Vfc3RtdCwgc2VsZi5mYWtlX2NhbGxhYmxlX3NldHVwLCBudW1iZXI9MykKKwogICAgIGRlZiB0ZXN0X3RpbWVpdF9jYWxsYWJsZV9zdG10X2FuZF9zZXR1cChzZWxmKToKICAgICAgICAgc2VsZi50aW1laXQoc2VsZi5mYWtlX2NhbGxhYmxlX3N0bXQsCiAgICAgICAgICAgICAgICAgc2VsZi5mYWtlX2NhbGxhYmxlX3NldHVwLCBudW1iZXI9MykKQEAgLTE2MSw2ICsxNzYsMTAgQEAKICAgICAgICAgc2VsZi5yZXBlYXQoc2VsZi5mYWtlX2NhbGxhYmxlX3N0bXQsIHNlbGYuZmFrZV9zZXR1cCwKICAgICAgICAgICAgICAgICByZXBlYXQ9MywgbnVtYmVyPTUpCiAKKyAgICBkZWYgdGVzdF9yZXBlYXRfY2FsbGFibGVfc2V0dXAoc2VsZik6CisgICAgICAgIHNlbGYucmVwZWF0KHNlbGYuZmFrZV9zdG10LCBzZWxmLmZha2VfY2FsbGFibGVfc2V0dXAsCisgICAgICAgICAgICAgICAgcmVwZWF0PTMsIG51bWJlcj01KQorCiAgICAgZGVmIHRlc3RfcmVwZWF0X2NhbGxhYmxlX3N0bXRfYW5kX3NldHVwKHNlbGYpOgogICAgICAgICBzZWxmLnJlcGVhdChzZWxmLmZha2VfY2FsbGFibGVfc3RtdCwgc2VsZi5mYWtlX2NhbGxhYmxlX3NldHVwLAogICAgICAgICAgICAgICAgIHJlcGVhdD0zLCBudW1iZXI9NSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdGltZW91dC5weSBiL0xpYi90ZXN0L3Rlc3RfdGltZW91dC5weQppbmRleCBkY2YyMDFiLi43MDNjNDNhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3RpbWVvdXQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF90aW1lb3V0LnB5CkBAIC0yMDcsNyArMjA3LDcgQEAKICAgICAgICAgICAgIHNvY2suY29ubmVjdCgod2hpdGVob2xlKSkKICAgICAgICAgZXhjZXB0IHNvY2tldC50aW1lb3V0OgogICAgICAgICAgICAgcGFzcwotICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlcnI6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKICAgICAgICAgICAgIGlmIGVyci5lcnJubyA9PSBlcnJuby5FQ09OTlJFRlVTRUQ6CiAgICAgICAgICAgICAgICAgc2tpcCA9IEZhbHNlCiAgICAgICAgIGZpbmFsbHk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3RrLnB5IGIvTGliL3Rlc3QvdGVzdF90ay5weQppbmRleCA3NTUxYTdmLi42MjcyOWYwIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3RrLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdGsucHkKQEAgLTYsMjAgKzYsMTMgQEAKIHN1cHBvcnQuaW1wb3J0X2ZyZXNoX21vZHVsZSgndGtpbnRlcicpCiAKICMgU2tpcCB0ZXN0IGlmIHRrIGNhbm5vdCBiZSBpbml0aWFsaXplZC4KLWZyb20gdGtpbnRlci50ZXN0LnN1cHBvcnQgaW1wb3J0IGNoZWNrX3RrX2F2YWlsYWJpbGl0eQotY2hlY2tfdGtfYXZhaWxhYmlsaXR5KCkKK3N1cHBvcnQucmVxdWlyZXMoJ2d1aScpCiAKIGZyb20gdGtpbnRlci50ZXN0IGltcG9ydCBydW50a3Rlc3RzCiAKLWRlZiB0ZXN0X21haW4oZW5hYmxlX2d1aT1GYWxzZSk6Ci0gICAgaWYgZW5hYmxlX2d1aToKLSAgICAgICAgaWYgc3VwcG9ydC51c2VfcmVzb3VyY2VzIGlzIE5vbmU6Ci0gICAgICAgICAgICBzdXBwb3J0LnVzZV9yZXNvdXJjZXMgPSBbJ2d1aSddCi0gICAgICAgIGVsaWYgJ2d1aScgbm90IGluIHN1cHBvcnQudXNlX3Jlc291cmNlczoKLSAgICAgICAgICAgIHN1cHBvcnQudXNlX3Jlc291cmNlcy5hcHBlbmQoJ2d1aScpCi0KK2RlZiB0ZXN0X21haW4oKToKICAgICBzdXBwb3J0LnJ1bl91bml0dGVzdCgKICAgICAgICAgICAgICpydW50a3Rlc3RzLmdldF90ZXN0cyh0ZXh0PUZhbHNlLCBwYWNrYWdlcz1bJ3Rlc3RfdGtpbnRlciddKSkKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oZW5hYmxlX2d1aT1UcnVlKQorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3Rva2VuaXplLnB5IGIvTGliL3Rlc3QvdGVzdF90b2tlbml6ZS5weQppbmRleCAzODYxMWE3Li40MGIwYzkwIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3Rva2VuaXplLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdG9rZW5pemUucHkKQEAgLTEsMjAgKzEsNDQgQEAKLWRvY3Rlc3RzID0gIiIiCi1UZXN0cyBmb3IgdGhlIHRva2VuaXplIG1vZHVsZS4KK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAorZnJvbSB0b2tlbml6ZSBpbXBvcnQgKHRva2VuaXplLCBfdG9rZW5pemUsIHVudG9rZW5pemUsIE5VTUJFUiwgTkFNRSwgT1AsCisgICAgICAgICAgICAgICAgICAgICBTVFJJTkcsIEVORE1BUktFUiwgRU5DT0RJTkcsIHRva19uYW1lLCBkZXRlY3RfZW5jb2RpbmcsCisgICAgICAgICAgICAgICAgICAgICBvcGVuIGFzIHRva2VuaXplX29wZW4sIFVudG9rZW5pemVyKQorZnJvbSBpbyBpbXBvcnQgQnl0ZXNJTworZnJvbSB1bml0dGVzdCBpbXBvcnQgVGVzdENhc2UsIG1vY2sKK2ltcG9ydCBvcworaW1wb3J0IHRva2VuCiAKLVRoZSB0ZXN0cyBjYW4gYmUgcmVhbGx5IHNpbXBsZS4gR2l2ZW4gYSBzbWFsbCBmcmFnbWVudCBvZiBzb3VyY2UKLWNvZGUsIHByaW50IG91dCBhIHRhYmxlIHdpdGggdG9rZW5zLiBUaGUgRU5ETUFSS0VSIGlzIG9taXR0ZWQgZm9yCi1icmV2aXR5LgogCi0gICAgPj4+IGR1bXBfdG9rZW5zKCIxICsgMSIpCi0gICAgRU5DT0RJTkcgICAndXRmLTgnICAgICAgICgwLCAwKSAoMCwgMCkKK2NsYXNzIFRva2VuaXplVGVzdChUZXN0Q2FzZSk6CisgICAgIyBUZXN0cyBmb3IgdGhlIHRva2VuaXplIG1vZHVsZS4KKworICAgICMgVGhlIHRlc3RzIGNhbiBiZSByZWFsbHkgc2ltcGxlLiBHaXZlbiBhIHNtYWxsIGZyYWdtZW50IG9mIHNvdXJjZQorICAgICMgY29kZSwgcHJpbnQgb3V0IGEgdGFibGUgd2l0aCB0b2tlbnMuIFRoZSBFTkRNQVJLRVIgaXMgb21pdHRlZCBmb3IKKyAgICAjIGJyZXZpdHkuCisKKyAgICBkZWYgY2hlY2tfdG9rZW5pemUoc2VsZiwgcywgZXhwZWN0ZWQpOgorICAgICAgICAjIEZvcm1hdCB0aGUgdG9rZW5zIGluIHMgaW4gYSB0YWJsZSBmb3JtYXQuCisgICAgICAgICMgVGhlIEVORE1BUktFUiBpcyBvbWl0dGVkLgorICAgICAgICByZXN1bHQgPSBbXQorICAgICAgICBmID0gQnl0ZXNJTyhzLmVuY29kZSgndXRmLTgnKSkKKyAgICAgICAgZm9yIHR5cGUsIHRva2VuLCBzdGFydCwgZW5kLCBsaW5lIGluIHRva2VuaXplKGYucmVhZGxpbmUpOgorICAgICAgICAgICAgaWYgdHlwZSA9PSBFTkRNQVJLRVI6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIHR5cGUgPSB0b2tfbmFtZVt0eXBlXQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgiICAgICUodHlwZSktMTAuMTBzICUodG9rZW4pLTEzLjEzciAlKHN0YXJ0KXMgJShlbmQpcyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbHMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgWyIgICAgRU5DT0RJTkcgICAndXRmLTgnICAgICAgICgwLCAwKSAoMCwgMCkiXSArCisgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQucnN0cmlwKCkuc3BsaXRsaW5lcygpKQorCisgICAgZGVmIHRlc3RfYmFzaWMoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfdG9rZW5pemUoIjEgKyAxIiwgIiIiXAogICAgIE5VTUJFUiAgICAgJzEnICAgICAgICAgICAoMSwgMCkgKDEsIDEpCiAgICAgT1AgICAgICAgICAnKycgICAgICAgICAgICgxLCAyKSAoMSwgMykKICAgICBOVU1CRVIgICAgICcxJyAgICAgICAgICAgKDEsIDQpICgxLCA1KQotCi0gICAgPj4+IGR1bXBfdG9rZW5zKCJpZiBGYWxzZTpcXG4iCi0gICAgLi4uICAgICAgICAgICAgICIgICAgIyBOTFxcbiIKLSAgICAuLi4gICAgICAgICAgICAgIiAgICBUcnVlID0gRmFsc2UgIyBORVdMSU5FXFxuIikKLSAgICBFTkNPRElORyAgICd1dGYtOCcgICAgICAgKDAsIDApICgwLCAwKQorICAgICIiIikKKyAgICAgICAgc2VsZi5jaGVja190b2tlbml6ZSgiaWYgRmFsc2U6XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAjIE5MXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBUcnVlID0gRmFsc2UgIyBORVdMSU5FXG4iLCAiIiJcCiAgICAgTkFNRSAgICAgICAnaWYnICAgICAgICAgICgxLCAwKSAoMSwgMikKICAgICBOQU1FICAgICAgICdGYWxzZScgICAgICAgKDEsIDMpICgxLCA4KQogICAgIE9QICAgICAgICAgJzonICAgICAgICAgICAoMSwgOCkgKDEsIDkpCkBAIC0yOCwxMTIgKzUyLDQ4IEBACiAgICAgQ09NTUVOVCAgICAnIyBORVdMSU5FJyAgICgzLCAxNykgKDMsIDI2KQogICAgIE5FV0xJTkUgICAgJ1xcbicgICAgICAgICAgKDMsIDI2KSAoMywgMjcpCiAgICAgREVERU5UICAgICAnJyAgICAgICAgICAgICg0LCAwKSAoNCwgMCkKKyAgICAiIiIpCisgICAgICAgIGluZGVudF9lcnJvcl9maWxlID0gYiIiIlwKK2RlZiBrKHgpOgorICAgIHggKz0gMgorICB4ICs9IDUKKyIiIgorICAgICAgICByZWFkbGluZSA9IEJ5dGVzSU8oaW5kZW50X2Vycm9yX2ZpbGUpLnJlYWRsaW5lCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChJbmRlbnRhdGlvbkVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVuaW5kZW50IGRvZXMgbm90IG1hdGNoIGFueSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3V0ZXIgaW5kZW50YXRpb24gbGV2ZWwiKToKKyAgICAgICAgICAgIGZvciB0b2sgaW4gdG9rZW5pemUocmVhZGxpbmUpOgorICAgICAgICAgICAgICAgIHBhc3MKIAotICAgID4+PiBpbmRlbnRfZXJyb3JfZmlsZSA9IFwiIiIKLSAgICAuLi4gZGVmIGsoeCk6Ci0gICAgLi4uICAgICB4ICs9IDIKLSAgICAuLi4gICB4ICs9IDUKLSAgICAuLi4gXCIiIgotICAgID4+PiByZWFkbGluZSA9IEJ5dGVzSU8oaW5kZW50X2Vycm9yX2ZpbGUuZW5jb2RlKCd1dGYtOCcpKS5yZWFkbGluZQotICAgID4+PiBmb3IgdG9rIGluIHRva2VuaXplKHJlYWRsaW5lKTogcGFzcwotICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKLSAgICAgICAgLi4uCi0gICAgSW5kZW50YXRpb25FcnJvcjogdW5pbmRlbnQgZG9lcyBub3QgbWF0Y2ggYW55IG91dGVyIGluZGVudGF0aW9uIGxldmVsCi0KLVRoZXJlIGFyZSBzb21lIHN0YW5kYXJkIGZvcm1hdHRpbmcgcHJhY3RpY2VzIHRoYXQgYXJlIGVhc3kgdG8gZ2V0IHJpZ2h0LgotCi0gICAgPj4+IHJvdW5kdHJpcCgiaWYgeCA9PSAxOlxcbiIKLSAgICAuLi4gICAgICAgICAgICIgICAgcHJpbnQoeClcXG4iKQotICAgIFRydWUKLQotICAgID4+PiByb3VuZHRyaXAoIiMgVGhpcyBpcyBhIGNvbW1lbnRcXG4jIFRoaXMgYWxzbyIpCi0gICAgVHJ1ZQotCi1Tb21lIHBlb3BsZSB1c2UgZGlmZmVyZW50IGZvcm1hdHRpbmcgY29udmVudGlvbnMsIHdoaWNoIG1ha2VzCi11bnRva2VuaXplIGEgbGl0dGxlIHRyaWNraWVyLiBOb3RlIHRoYXQgdGhpcyB0ZXN0IGludm9sdmVzIHRyYWlsaW5nCi13aGl0ZXNwYWNlIGFmdGVyIHRoZSBjb2xvbi4gTm90ZSB0aGF0IHdlIHVzZSBoZXggZXNjYXBlcyB0byBtYWtlIHRoZQotdHdvIHRyYWlsaW5nIGJsYW5rcyBhcHBhcmVudCBpbiB0aGUgZXhwZWN0ZWQgb3V0cHV0LgotCi0gICAgPj4+IHJvdW5kdHJpcCgiaWYgeCA9PSAxIDogXFxuIgotICAgIC4uLiAgICAgICAgICAgIiAgcHJpbnQoeClcXG4iKQotICAgIFRydWUKLQotICAgID4+PiBmID0gc3VwcG9ydC5maW5kZmlsZSgidG9rZW5pemVfdGVzdHMudHh0IikKLSAgICA+Pj4gcm91bmR0cmlwKG9wZW4oZiwgJ3JiJykpCi0gICAgVHJ1ZQotCi0gICAgPj4+IHJvdW5kdHJpcCgiaWYgeCA9PSAxOlxcbiIKLSAgICAuLi4gICAgICAgICAgICIgICAgIyBBIGNvbW1lbnQgYnkgaXRzZWxmLlxcbiIKLSAgICAuLi4gICAgICAgICAgICIgICAgcHJpbnQoeCkgIyBDb21tZW50IGhlcmUsIHRvby5cXG4iCi0gICAgLi4uICAgICAgICAgICAiICAgICMgQW5vdGhlciBjb21tZW50LlxcbiIKLSAgICAuLi4gICAgICAgICAgICJhZnRlcl9pZiA9IFRydWVcXG4iKQotICAgIFRydWUKLQotICAgID4+PiByb3VuZHRyaXAoImlmICh4ICMgVGhlIGNvbW1lbnRzIG5lZWQgdG8gZ28gaW4gdGhlIHJpZ2h0IHBsYWNlXFxuIgotICAgIC4uLiAgICAgICAgICAgIiAgICA9PSAxKTpcXG4iCi0gICAgLi4uICAgICAgICAgICAiICAgIHByaW50KCd4PT0xJylcXG4iKQotICAgIFRydWUKLQotICAgID4+PiByb3VuZHRyaXAoImNsYXNzIFRlc3Q6ICMgQSBjb21tZW50IGhlcmVcXG4iCi0gICAgLi4uICAgICAgICAgICAiICAjIEEgY29tbWVudCB3aXRoIHdlaXJkIGluZGVudFxcbiIKLSAgICAuLi4gICAgICAgICAgICIgIGFmdGVyX2NvbSA9IDVcXG4iCi0gICAgLi4uICAgICAgICAgICAiICBkZWYgeChtKTogcmV0dXJuIG0qNSAjIGEgb25lIGxpbmVyXFxuIgotICAgIC4uLiAgICAgICAgICAgIiAgZGVmIHkobSk6ICMgQSB3aGl0ZXNwYWNlIGFmdGVyIHRoZSBjb2xvblxcbiIKLSAgICAuLi4gICAgICAgICAgICIgICAgIHJldHVybiB5KjQgIyAzLXNwYWNlIGluZGVudFxcbiIpCi0gICAgVHJ1ZQotCi1Tb21lIGVycm9yLWhhbmRsaW5nIGNvZGUKLQotICAgID4+PiByb3VuZHRyaXAoInRyeTogaW1wb3J0IHNvbWVtb2R1bGVcXG4iCi0gICAgLi4uICAgICAgICAgICAiZXhjZXB0IEltcG9ydEVycm9yOiAjIGNvbW1lbnRcXG4iCi0gICAgLi4uICAgICAgICAgICAiICAgIHByaW50KCdDYW4gbm90IGltcG9ydCcgIyBjb21tZW50MlxcbikiCi0gICAgLi4uICAgICAgICAgICAiZWxzZTogICBwcmludCgnTG9hZGVkJylcXG4iKQotICAgIFRydWUKLQotQmFsYW5jaW5nIGNvbnRpbnVhdGlvbgotCi0gICAgPj4+IHJvdW5kdHJpcCgiYSA9ICgzLDQsIFxcbiIKLSAgICAuLi4gICAgICAgICAgICI1LDYpXFxuIgotICAgIC4uLiAgICAgICAgICAgInkgPSBbMywgNCxcXG4iCi0gICAgLi4uICAgICAgICAgICAiNV1cXG4iCi0gICAgLi4uICAgICAgICAgICAieiA9IHsnYSc6IDUsXFxuIgotICAgIC4uLiAgICAgICAgICAgIidiJzoxNSwgJ2MnOlRydWV9XFxuIgotICAgIC4uLiAgICAgICAgICAgInggPSBsZW4oeSkgKyA1IC0gYVtcXG4iCi0gICAgLi4uICAgICAgICAgICAiM10gLSBhWzJdXFxuIgotICAgIC4uLiAgICAgICAgICAgIisgbGVuKHopIC0geltcXG4iCi0gICAgLi4uICAgICAgICAgICAiJ2InXVxcbiIpCi0gICAgVHJ1ZQotCi1PcmRpbmFyeSBpbnRlZ2VycyBhbmQgYmluYXJ5IG9wZXJhdG9ycwotCi0gICAgPj4+IGR1bXBfdG9rZW5zKCIweGZmIDw9IDI1NSIpCi0gICAgRU5DT0RJTkcgICAndXRmLTgnICAgICAgICgwLCAwKSAoMCwgMCkKKyAgICBkZWYgdGVzdF9pbnQoc2VsZik6CisgICAgICAgICMgT3JkaW5hcnkgaW50ZWdlcnMgYW5kIGJpbmFyeSBvcGVyYXRvcnMKKyAgICAgICAgc2VsZi5jaGVja190b2tlbml6ZSgiMHhmZiA8PSAyNTUiLCAiIiJcCiAgICAgTlVNQkVSICAgICAnMHhmZicgICAgICAgICgxLCAwKSAoMSwgNCkKICAgICBPUCAgICAgICAgICc8PScgICAgICAgICAgKDEsIDUpICgxLCA3KQogICAgIE5VTUJFUiAgICAgJzI1NScgICAgICAgICAoMSwgOCkgKDEsIDExKQotICAgID4+PiBkdW1wX3Rva2VucygiMGIxMCA8PSAyNTUiKQotICAgIEVOQ09ESU5HICAgJ3V0Zi04JyAgICAgICAoMCwgMCkgKDAsIDApCisgICAgIiIiKQorICAgICAgICBzZWxmLmNoZWNrX3Rva2VuaXplKCIwYjEwIDw9IDI1NSIsICIiIlwKICAgICBOVU1CRVIgICAgICcwYjEwJyAgICAgICAgKDEsIDApICgxLCA0KQogICAgIE9QICAgICAgICAgJzw9JyAgICAgICAgICAoMSwgNSkgKDEsIDcpCiAgICAgTlVNQkVSICAgICAnMjU1JyAgICAgICAgICgxLCA4KSAoMSwgMTEpCi0gICAgPj4+IGR1bXBfdG9rZW5zKCIwbzEyMyA8PSAwTzEyMyIpCi0gICAgRU5DT0RJTkcgICAndXRmLTgnICAgICAgICgwLCAwKSAoMCwgMCkKKyAgICAiIiIpCisgICAgICAgIHNlbGYuY2hlY2tfdG9rZW5pemUoIjBvMTIzIDw9IDBPMTIzIiwgIiIiXAogICAgIE5VTUJFUiAgICAgJzBvMTIzJyAgICAgICAoMSwgMCkgKDEsIDUpCiAgICAgT1AgICAgICAgICAnPD0nICAgICAgICAgICgxLCA2KSAoMSwgOCkKICAgICBOVU1CRVIgICAgICcwTzEyMycgICAgICAgKDEsIDkpICgxLCAxNCkKLSAgICA+Pj4gZHVtcF90b2tlbnMoIjEyMzQ1NjcgPiB+MHgxNSIpCi0gICAgRU5DT0RJTkcgICAndXRmLTgnICAgICAgICgwLCAwKSAoMCwgMCkKKyAgICAiIiIpCisgICAgICAgIHNlbGYuY2hlY2tfdG9rZW5pemUoIjEyMzQ1NjcgPiB+MHgxNSIsICIiIlwKICAgICBOVU1CRVIgICAgICcxMjM0NTY3JyAgICAgKDEsIDApICgxLCA3KQogICAgIE9QICAgICAgICAgJz4nICAgICAgICAgICAoMSwgOCkgKDEsIDkpCiAgICAgT1AgICAgICAgICAnficgICAgICAgICAgICgxLCAxMCkgKDEsIDExKQogICAgIE5VTUJFUiAgICAgJzB4MTUnICAgICAgICAoMSwgMTEpICgxLCAxNSkKLSAgICA+Pj4gZHVtcF90b2tlbnMoIjIxMzQ1NjggIT0gMTIzMTUxNSIpCi0gICAgRU5DT0RJTkcgICAndXRmLTgnICAgICAgICgwLCAwKSAoMCwgMCkKKyAgICAiIiIpCisgICAgICAgIHNlbGYuY2hlY2tfdG9rZW5pemUoIjIxMzQ1NjggIT0gMTIzMTUxNSIsICIiIlwKICAgICBOVU1CRVIgICAgICcyMTM0NTY4JyAgICAgKDEsIDApICgxLCA3KQogICAgIE9QICAgICAgICAgJyE9JyAgICAgICAgICAoMSwgOCkgKDEsIDEwKQogICAgIE5VTUJFUiAgICAgJzEyMzE1MTUnICAgICAoMSwgMTEpICgxLCAxOCkKLSAgICA+Pj4gZHVtcF90b2tlbnMoIigtMTI0NTYxLTEpICYgMjAwMDAwMDAwIikKLSAgICBFTkNPRElORyAgICd1dGYtOCcgICAgICAgKDAsIDApICgwLCAwKQorICAgICIiIikKKyAgICAgICAgc2VsZi5jaGVja190b2tlbml6ZSgiKC0xMjQ1NjEtMSkgJiAyMDAwMDAwMDAiLCAiIiJcCiAgICAgT1AgICAgICAgICAnKCcgICAgICAgICAgICgxLCAwKSAoMSwgMSkKICAgICBPUCAgICAgICAgICctJyAgICAgICAgICAgKDEsIDEpICgxLCAyKQogICAgIE5VTUJFUiAgICAgJzEyNDU2MScgICAgICAoMSwgMikgKDEsIDgpCkBAIC0xNDIsOTMgKzEwMiw5MyBAQAogICAgIE9QICAgICAgICAgJyknICAgICAgICAgICAoMSwgMTApICgxLCAxMSkKICAgICBPUCAgICAgICAgICcmJyAgICAgICAgICAgKDEsIDEyKSAoMSwgMTMpCiAgICAgTlVNQkVSICAgICAnMjAwMDAwMDAwJyAgICgxLCAxNCkgKDEsIDIzKQotICAgID4+PiBkdW1wX3Rva2VucygiMHhkZWFkYmVlZiAhPSAtMSIpCi0gICAgRU5DT0RJTkcgICAndXRmLTgnICAgICAgICgwLCAwKSAoMCwgMCkKKyAgICAiIiIpCisgICAgICAgIHNlbGYuY2hlY2tfdG9rZW5pemUoIjB4ZGVhZGJlZWYgIT0gLTEiLCAiIiJcCiAgICAgTlVNQkVSICAgICAnMHhkZWFkYmVlZicgICgxLCAwKSAoMSwgMTApCiAgICAgT1AgICAgICAgICAnIT0nICAgICAgICAgICgxLCAxMSkgKDEsIDEzKQogICAgIE9QICAgICAgICAgJy0nICAgICAgICAgICAoMSwgMTQpICgxLCAxNSkKICAgICBOVU1CRVIgICAgICcxJyAgICAgICAgICAgKDEsIDE1KSAoMSwgMTYpCi0gICAgPj4+IGR1bXBfdG9rZW5zKCIweGRlYWRjMGRlICYgMTIzNDUiKQotICAgIEVOQ09ESU5HICAgJ3V0Zi04JyAgICAgICAoMCwgMCkgKDAsIDApCisgICAgIiIiKQorICAgICAgICBzZWxmLmNoZWNrX3Rva2VuaXplKCIweGRlYWRjMGRlICYgMTIzNDUiLCAiIiJcCiAgICAgTlVNQkVSICAgICAnMHhkZWFkYzBkZScgICgxLCAwKSAoMSwgMTApCiAgICAgT1AgICAgICAgICAnJicgICAgICAgICAgICgxLCAxMSkgKDEsIDEyKQogICAgIE5VTUJFUiAgICAgJzEyMzQ1JyAgICAgICAoMSwgMTMpICgxLCAxOCkKLSAgICA+Pj4gZHVtcF90b2tlbnMoIjB4RkYgJiAweDE1IHwgMTIzNCIpCi0gICAgRU5DT0RJTkcgICAndXRmLTgnICAgICAgICgwLCAwKSAoMCwgMCkKKyAgICAiIiIpCisgICAgICAgIHNlbGYuY2hlY2tfdG9rZW5pemUoIjB4RkYgJiAweDE1IHwgMTIzNCIsICIiIlwKICAgICBOVU1CRVIgICAgICcweEZGJyAgICAgICAgKDEsIDApICgxLCA0KQogICAgIE9QICAgICAgICAgJyYnICAgICAgICAgICAoMSwgNSkgKDEsIDYpCiAgICAgTlVNQkVSICAgICAnMHgxNScgICAgICAgICgxLCA3KSAoMSwgMTEpCiAgICAgT1AgICAgICAgICAnfCcgICAgICAgICAgICgxLCAxMikgKDEsIDEzKQogICAgIE5VTUJFUiAgICAgJzEyMzQnICAgICAgICAoMSwgMTQpICgxLCAxOCkKKyAgICAiIiIpCiAKLUxvbmcgaW50ZWdlcnMKLQotICAgID4+PiBkdW1wX3Rva2VucygieCA9IDAiKQotICAgIEVOQ09ESU5HICAgJ3V0Zi04JyAgICAgICAoMCwgMCkgKDAsIDApCisgICAgZGVmIHRlc3RfbG9uZyhzZWxmKToKKyAgICAgICAgIyBMb25nIGludGVnZXJzCisgICAgICAgIHNlbGYuY2hlY2tfdG9rZW5pemUoInggPSAwIiwgIiIiXAogICAgIE5BTUUgICAgICAgJ3gnICAgICAgICAgICAoMSwgMCkgKDEsIDEpCiAgICAgT1AgICAgICAgICAnPScgICAgICAgICAgICgxLCAyKSAoMSwgMykKICAgICBOVU1CRVIgICAgICcwJyAgICAgICAgICAgKDEsIDQpICgxLCA1KQotICAgID4+PiBkdW1wX3Rva2VucygieCA9IDB4ZmZmZmZmZmZmZmYiKQotICAgIEVOQ09ESU5HICAgJ3V0Zi04JyAgICAgICAoMCwgMCkgKDAsIDApCisgICAgIiIiKQorICAgICAgICBzZWxmLmNoZWNrX3Rva2VuaXplKCJ4ID0gMHhmZmZmZmZmZmZmZiIsICIiIlwKICAgICBOQU1FICAgICAgICd4JyAgICAgICAgICAgKDEsIDApICgxLCAxKQogICAgIE9QICAgICAgICAgJz0nICAgICAgICAgICAoMSwgMikgKDEsIDMpCiAgICAgTlVNQkVSICAgICAnMHhmZmZmZmZmZmZmICgxLCA0KSAoMSwgMTcpCi0gICAgPj4+IGR1bXBfdG9rZW5zKCJ4ID0gMTIzMTQxMjQyMTUxMjUxNjE2MTEwIikKLSAgICBFTkNPRElORyAgICd1dGYtOCcgICAgICAgKDAsIDApICgwLCAwKQorICAgICIiIikKKyAgICAgICAgc2VsZi5jaGVja190b2tlbml6ZSgieCA9IDEyMzE0MTI0MjE1MTI1MTYxNjExMCIsICIiIlwKICAgICBOQU1FICAgICAgICd4JyAgICAgICAgICAgKDEsIDApICgxLCAxKQogICAgIE9QICAgICAgICAgJz0nICAgICAgICAgICAoMSwgMikgKDEsIDMpCiAgICAgTlVNQkVSICAgICAnMTIzMTQxMjQyMTUxICgxLCA0KSAoMSwgMjUpCi0gICAgPj4+IGR1bXBfdG9rZW5zKCJ4ID0gLTE1OTIxNTkwMjE1MDEyNTkxIikKLSAgICBFTkNPRElORyAgICd1dGYtOCcgICAgICAgKDAsIDApICgwLCAwKQorICAgICIiIikKKyAgICAgICAgc2VsZi5jaGVja190b2tlbml6ZSgieCA9IC0xNTkyMTU5MDIxNTAxMjU5MSIsICIiIlwKICAgICBOQU1FICAgICAgICd4JyAgICAgICAgICAgKDEsIDApICgxLCAxKQogICAgIE9QICAgICAgICAgJz0nICAgICAgICAgICAoMSwgMikgKDEsIDMpCiAgICAgT1AgICAgICAgICAnLScgICAgICAgICAgICgxLCA0KSAoMSwgNSkKICAgICBOVU1CRVIgICAgICcxNTkyMTU5MDIxNTAgKDEsIDUpICgxLCAyMikKKyAgICAiIiIpCiAKLUZsb2F0aW5nIHBvaW50IG51bWJlcnMKLQotICAgID4+PiBkdW1wX3Rva2VucygieCA9IDMuMTQxNTkiKQotICAgIEVOQ09ESU5HICAgJ3V0Zi04JyAgICAgICAoMCwgMCkgKDAsIDApCisgICAgZGVmIHRlc3RfZmxvYXQoc2VsZik6CisgICAgICAgICMgRmxvYXRpbmcgcG9pbnQgbnVtYmVycworICAgICAgICBzZWxmLmNoZWNrX3Rva2VuaXplKCJ4ID0gMy4xNDE1OSIsICIiIlwKICAgICBOQU1FICAgICAgICd4JyAgICAgICAgICAgKDEsIDApICgxLCAxKQogICAgIE9QICAgICAgICAgJz0nICAgICAgICAgICAoMSwgMikgKDEsIDMpCiAgICAgTlVNQkVSICAgICAnMy4xNDE1OScgICAgICgxLCA0KSAoMSwgMTEpCi0gICAgPj4+IGR1bXBfdG9rZW5zKCJ4ID0gMzE0MTU5LiIpCi0gICAgRU5DT0RJTkcgICAndXRmLTgnICAgICAgICgwLCAwKSAoMCwgMCkKKyAgICAiIiIpCisgICAgICAgIHNlbGYuY2hlY2tfdG9rZW5pemUoInggPSAzMTQxNTkuIiwgIiIiXAogICAgIE5BTUUgICAgICAgJ3gnICAgICAgICAgICAoMSwgMCkgKDEsIDEpCiAgICAgT1AgICAgICAgICAnPScgICAgICAgICAgICgxLCAyKSAoMSwgMykKICAgICBOVU1CRVIgICAgICczMTQxNTkuJyAgICAgKDEsIDQpICgxLCAxMSkKLSAgICA+Pj4gZHVtcF90b2tlbnMoInggPSAuMzE0MTU5IikKLSAgICBFTkNPRElORyAgICd1dGYtOCcgICAgICAgKDAsIDApICgwLCAwKQorICAgICIiIikKKyAgICAgICAgc2VsZi5jaGVja190b2tlbml6ZSgieCA9IC4zMTQxNTkiLCAiIiJcCiAgICAgTkFNRSAgICAgICAneCcgICAgICAgICAgICgxLCAwKSAoMSwgMSkKICAgICBPUCAgICAgICAgICc9JyAgICAgICAgICAgKDEsIDIpICgxLCAzKQogICAgIE5VTUJFUiAgICAgJy4zMTQxNTknICAgICAoMSwgNCkgKDEsIDExKQotICAgID4+PiBkdW1wX3Rva2VucygieCA9IDNlMTQxNTkiKQotICAgIEVOQ09ESU5HICAgJ3V0Zi04JyAgICAgICAoMCwgMCkgKDAsIDApCisgICAgIiIiKQorICAgICAgICBzZWxmLmNoZWNrX3Rva2VuaXplKCJ4ID0gM2UxNDE1OSIsICIiIlwKICAgICBOQU1FICAgICAgICd4JyAgICAgICAgICAgKDEsIDApICgxLCAxKQogICAgIE9QICAgICAgICAgJz0nICAgICAgICAgICAoMSwgMikgKDEsIDMpCiAgICAgTlVNQkVSICAgICAnM2UxNDE1OScgICAgICgxLCA0KSAoMSwgMTEpCi0gICAgPj4+IGR1bXBfdG9rZW5zKCJ4ID0gM0UxMjMiKQotICAgIEVOQ09ESU5HICAgJ3V0Zi04JyAgICAgICAoMCwgMCkgKDAsIDApCisgICAgIiIiKQorICAgICAgICBzZWxmLmNoZWNrX3Rva2VuaXplKCJ4ID0gM0UxMjMiLCAiIiJcCiAgICAgTkFNRSAgICAgICAneCcgICAgICAgICAgICgxLCAwKSAoMSwgMSkKICAgICBPUCAgICAgICAgICc9JyAgICAgICAgICAgKDEsIDIpICgxLCAzKQogICAgIE5VTUJFUiAgICAgJzNFMTIzJyAgICAgICAoMSwgNCkgKDEsIDkpCi0gICAgPj4+IGR1bXBfdG9rZW5zKCJ4K3kgPSAzZS0xMjMwIikKLSAgICBFTkNPRElORyAgICd1dGYtOCcgICAgICAgKDAsIDApICgwLCAwKQorICAgICIiIikKKyAgICAgICAgc2VsZi5jaGVja190b2tlbml6ZSgieCt5ID0gM2UtMTIzMCIsICIiIlwKICAgICBOQU1FICAgICAgICd4JyAgICAgICAgICAgKDEsIDApICgxLCAxKQogICAgIE9QICAgICAgICAgJysnICAgICAgICAgICAoMSwgMSkgKDEsIDIpCiAgICAgTkFNRSAgICAgICAneScgICAgICAgICAgICgxLCAyKSAoMSwgMykKICAgICBPUCAgICAgICAgICc9JyAgICAgICAgICAgKDEsIDQpICgxLCA1KQogICAgIE5VTUJFUiAgICAgJzNlLTEyMzAnICAgICAoMSwgNikgKDEsIDEzKQotICAgID4+PiBkdW1wX3Rva2VucygieCA9IDMuMTRlMTU5IikKLSAgICBFTkNPRElORyAgICd1dGYtOCcgICAgICAgKDAsIDApICgwLCAwKQorICAgICIiIikKKyAgICAgICAgc2VsZi5jaGVja190b2tlbml6ZSgieCA9IDMuMTRlMTU5IiwgIiIiXAogICAgIE5BTUUgICAgICAgJ3gnICAgICAgICAgICAoMSwgMCkgKDEsIDEpCiAgICAgT1AgICAgICAgICAnPScgICAgICAgICAgICgxLCAyKSAoMSwgMykKICAgICBOVU1CRVIgICAgICczLjE0ZTE1OScgICAgKDEsIDQpICgxLCAxMikKKyAgICAiIiIpCiAKLVN0cmluZyBsaXRlcmFscwotCi0gICAgPj4+IGR1bXBfdG9rZW5zKCJ4ID0gJyc7IHkgPSBcXFwiXFxcIiIpCi0gICAgRU5DT0RJTkcgICAndXRmLTgnICAgICAgICgwLCAwKSAoMCwgMCkKKyAgICBkZWYgdGVzdF9zdHJpbmcoc2VsZik6CisgICAgICAgICMgU3RyaW5nIGxpdGVyYWxzCisgICAgICAgIHNlbGYuY2hlY2tfdG9rZW5pemUoInggPSAnJzsgeSA9IFwiXCIiLCAiIiJcCiAgICAgTkFNRSAgICAgICAneCcgICAgICAgICAgICgxLCAwKSAoMSwgMSkKICAgICBPUCAgICAgICAgICc9JyAgICAgICAgICAgKDEsIDIpICgxLCAzKQogICAgIFNUUklORyAgICAgIicnIiAgICAgICAgICAoMSwgNCkgKDEsIDYpCkBAIC0yMzYsOCArMTk2LDggQEAKICAgICBOQU1FICAgICAgICd5JyAgICAgICAgICAgKDEsIDgpICgxLCA5KQogICAgIE9QICAgICAgICAgJz0nICAgICAgICAgICAoMSwgMTApICgxLCAxMSkKICAgICBTVFJJTkcgICAgICciIicgICAgICAgICAgKDEsIDEyKSAoMSwgMTQpCi0gICAgPj4+IGR1bXBfdG9rZW5zKCJ4ID0gJ1xcXCInOyB5ID0gXFxcIidcXFwiIikKLSAgICBFTkNPRElORyAgICd1dGYtOCcgICAgICAgKDAsIDApICgwLCAwKQorICAgICIiIikKKyAgICAgICAgc2VsZi5jaGVja190b2tlbml6ZSgieCA9ICdcIic7IHkgPSBcIidcIiIsICIiIlwKICAgICBOQU1FICAgICAgICd4JyAgICAgICAgICAgKDEsIDApICgxLCAxKQogICAgIE9QICAgICAgICAgJz0nICAgICAgICAgICAoMSwgMikgKDEsIDMpCiAgICAgU1RSSU5HICAgICAnXFwnIlxcJycgICAgICAgKDEsIDQpICgxLCA3KQpAQCAtMjQ1LDI5ICsyMDUsMjkgQEAKICAgICBOQU1FICAgICAgICd5JyAgICAgICAgICAgKDEsIDkpICgxLCAxMCkKICAgICBPUCAgICAgICAgICc9JyAgICAgICAgICAgKDEsIDExKSAoMSwgMTIpCiAgICAgU1RSSU5HICAgICAnIlxcJyInICAgICAgICAoMSwgMTMpICgxLCAxNikKLSAgICA+Pj4gZHVtcF90b2tlbnMoInggPSBcXFwiZG9lc24ndCBcXFwic2hyaW5rXFxcIiwgZG9lcyBpdFxcXCIiKQotICAgIEVOQ09ESU5HICAgJ3V0Zi04JyAgICAgICAoMCwgMCkgKDAsIDApCisgICAgIiIiKQorICAgICAgICBzZWxmLmNoZWNrX3Rva2VuaXplKCJ4ID0gXCJkb2Vzbid0IFwic2hyaW5rXCIsIGRvZXMgaXRcIiIsICIiIlwKICAgICBOQU1FICAgICAgICd4JyAgICAgICAgICAgKDEsIDApICgxLCAxKQogICAgIE9QICAgICAgICAgJz0nICAgICAgICAgICAoMSwgMikgKDEsIDMpCiAgICAgU1RSSU5HICAgICAnImRvZXNuXFwndCAiJyAoMSwgNCkgKDEsIDE0KQogICAgIE5BTUUgICAgICAgJ3NocmluaycgICAgICAoMSwgMTQpICgxLCAyMCkKICAgICBTVFJJTkcgICAgICciLCBkb2VzIGl0IicgKDEsIDIwKSAoMSwgMzEpCi0gICAgPj4+IGR1bXBfdG9rZW5zKCJ4ID0gJ2FiYycgKyAnQUJDJyIpCi0gICAgRU5DT0RJTkcgICAndXRmLTgnICAgICAgICgwLCAwKSAoMCwgMCkKKyAgICAiIiIpCisgICAgICAgIHNlbGYuY2hlY2tfdG9rZW5pemUoInggPSAnYWJjJyArICdBQkMnIiwgIiIiXAogICAgIE5BTUUgICAgICAgJ3gnICAgICAgICAgICAoMSwgMCkgKDEsIDEpCiAgICAgT1AgICAgICAgICAnPScgICAgICAgICAgICgxLCAyKSAoMSwgMykKICAgICBTVFJJTkcgICAgICInYWJjJyIgICAgICAgKDEsIDQpICgxLCA5KQogICAgIE9QICAgICAgICAgJysnICAgICAgICAgICAoMSwgMTApICgxLCAxMSkKICAgICBTVFJJTkcgICAgICInQUJDJyIgICAgICAgKDEsIDEyKSAoMSwgMTcpCi0gICAgPj4+IGR1bXBfdG9rZW5zKCd5ID0gIkFCQyIgKyAiQUJDIicpCi0gICAgRU5DT0RJTkcgICAndXRmLTgnICAgICAgICgwLCAwKSAoMCwgMCkKKyAgICAiIiIpCisgICAgICAgIHNlbGYuY2hlY2tfdG9rZW5pemUoJ3kgPSAiQUJDIiArICJBQkMiJywgIiIiXAogICAgIE5BTUUgICAgICAgJ3knICAgICAgICAgICAoMSwgMCkgKDEsIDEpCiAgICAgT1AgICAgICAgICAnPScgICAgICAgICAgICgxLCAyKSAoMSwgMykKICAgICBTVFJJTkcgICAgICciQUJDIicgICAgICAgKDEsIDQpICgxLCA5KQogICAgIE9QICAgICAgICAgJysnICAgICAgICAgICAoMSwgMTApICgxLCAxMSkKICAgICBTVFJJTkcgICAgICciQUJDIicgICAgICAgKDEsIDEyKSAoMSwgMTcpCi0gICAgPj4+IGR1bXBfdG9rZW5zKCJ4ID0gcidhYmMnICsgcidBQkMnICsgUidBQkMnICsgUidBQkMnIikKLSAgICBFTkNPRElORyAgICd1dGYtOCcgICAgICAgKDAsIDApICgwLCAwKQorICAgICIiIikKKyAgICAgICAgc2VsZi5jaGVja190b2tlbml6ZSgieCA9IHInYWJjJyArIHInQUJDJyArIFInQUJDJyArIFInQUJDJyIsICIiIlwKICAgICBOQU1FICAgICAgICd4JyAgICAgICAgICAgKDEsIDApICgxLCAxKQogICAgIE9QICAgICAgICAgJz0nICAgICAgICAgICAoMSwgMikgKDEsIDMpCiAgICAgU1RSSU5HICAgICAicidhYmMnIiAgICAgICgxLCA0KSAoMSwgMTApCkBAIC0yNzcsOCArMjM3LDggQEAKICAgICBTVFJJTkcgICAgICJSJ0FCQyciICAgICAgKDEsIDIyKSAoMSwgMjgpCiAgICAgT1AgICAgICAgICAnKycgICAgICAgICAgICgxLCAyOSkgKDEsIDMwKQogICAgIFNUUklORyAgICAgIlInQUJDJyIgICAgICAoMSwgMzEpICgxLCAzNykKLSAgICA+Pj4gZHVtcF90b2tlbnMoJ3kgPSByImFiYyIgKyByIkFCQyIgKyBSIkFCQyIgKyBSIkFCQyInKQotICAgIEVOQ09ESU5HICAgJ3V0Zi04JyAgICAgICAoMCwgMCkgKDAsIDApCisgICAgIiIiKQorICAgICAgICBzZWxmLmNoZWNrX3Rva2VuaXplKCd5ID0gciJhYmMiICsgciJBQkMiICsgUiJBQkMiICsgUiJBQkMiJywgIiIiXAogICAgIE5BTUUgICAgICAgJ3knICAgICAgICAgICAoMSwgMCkgKDEsIDEpCiAgICAgT1AgICAgICAgICAnPScgICAgICAgICAgICgxLCAyKSAoMSwgMykKICAgICBTVFJJTkcgICAgICdyImFiYyInICAgICAgKDEsIDQpICgxLCAxMCkKQEAgLTI4OCwzMCArMjQ4LDMwIEBACiAgICAgU1RSSU5HICAgICAnUiJBQkMiJyAgICAgICgxLCAyMikgKDEsIDI4KQogICAgIE9QICAgICAgICAgJysnICAgICAgICAgICAoMSwgMjkpICgxLCAzMCkKICAgICBTVFJJTkcgICAgICdSIkFCQyInICAgICAgKDEsIDMxKSAoMSwgMzcpCisgICAgIiIiKQogCi0gICAgPj4+IGR1bXBfdG9rZW5zKCJ1J2FiYycgKyBVJ2FiYyciKQotICAgIEVOQ09ESU5HICAgJ3V0Zi04JyAgICAgICAoMCwgMCkgKDAsIDApCisgICAgICAgIHNlbGYuY2hlY2tfdG9rZW5pemUoInUnYWJjJyArIFUnYWJjJyIsICIiIlwKICAgICBTVFJJTkcgICAgICJ1J2FiYyciICAgICAgKDEsIDApICgxLCA2KQogICAgIE9QICAgICAgICAgJysnICAgICAgICAgICAoMSwgNykgKDEsIDgpCiAgICAgU1RSSU5HICAgICAiVSdhYmMnIiAgICAgICgxLCA5KSAoMSwgMTUpCi0gICAgPj4+IGR1bXBfdG9rZW5zKCd1ImFiYyIgKyBVImFiYyInKQotICAgIEVOQ09ESU5HICAgJ3V0Zi04JyAgICAgICAoMCwgMCkgKDAsIDApCisgICAgIiIiKQorICAgICAgICBzZWxmLmNoZWNrX3Rva2VuaXplKCd1ImFiYyIgKyBVImFiYyInLCAiIiJcCiAgICAgU1RSSU5HICAgICAndSJhYmMiJyAgICAgICgxLCAwKSAoMSwgNikKICAgICBPUCAgICAgICAgICcrJyAgICAgICAgICAgKDEsIDcpICgxLCA4KQogICAgIFNUUklORyAgICAgJ1UiYWJjIicgICAgICAoMSwgOSkgKDEsIDE1KQorICAgICIiIikKIAotICAgID4+PiBkdW1wX3Rva2VucygiYidhYmMnICsgQidhYmMnIikKLSAgICBFTkNPRElORyAgICd1dGYtOCcgICAgICAgKDAsIDApICgwLCAwKQorICAgICAgICBzZWxmLmNoZWNrX3Rva2VuaXplKCJiJ2FiYycgKyBCJ2FiYyciLCAiIiJcCiAgICAgU1RSSU5HICAgICAiYidhYmMnIiAgICAgICgxLCAwKSAoMSwgNikKICAgICBPUCAgICAgICAgICcrJyAgICAgICAgICAgKDEsIDcpICgxLCA4KQogICAgIFNUUklORyAgICAgIkInYWJjJyIgICAgICAoMSwgOSkgKDEsIDE1KQotICAgID4+PiBkdW1wX3Rva2VucygnYiJhYmMiICsgQiJhYmMiJykKLSAgICBFTkNPRElORyAgICd1dGYtOCcgICAgICAgKDAsIDApICgwLCAwKQorICAgICIiIikKKyAgICAgICAgc2VsZi5jaGVja190b2tlbml6ZSgnYiJhYmMiICsgQiJhYmMiJywgIiIiXAogICAgIFNUUklORyAgICAgJ2IiYWJjIicgICAgICAoMSwgMCkgKDEsIDYpCiAgICAgT1AgICAgICAgICAnKycgICAgICAgICAgICgxLCA3KSAoMSwgOCkKICAgICBTVFJJTkcgICAgICdCImFiYyInICAgICAgKDEsIDkpICgxLCAxNSkKLSAgICA+Pj4gZHVtcF90b2tlbnMoImJyJ2FiYycgKyBiUidhYmMnICsgQnInYWJjJyArIEJSJ2FiYyciKQotICAgIEVOQ09ESU5HICAgJ3V0Zi04JyAgICAgICAoMCwgMCkgKDAsIDApCisgICAgIiIiKQorICAgICAgICBzZWxmLmNoZWNrX3Rva2VuaXplKCJicidhYmMnICsgYlInYWJjJyArIEJyJ2FiYycgKyBCUidhYmMnIiwgIiIiXAogICAgIFNUUklORyAgICAgImJyJ2FiYyciICAgICAoMSwgMCkgKDEsIDcpCiAgICAgT1AgICAgICAgICAnKycgICAgICAgICAgICgxLCA4KSAoMSwgOSkKICAgICBTVFJJTkcgICAgICJiUidhYmMnIiAgICAgKDEsIDEwKSAoMSwgMTcpCkBAIC0zMTksOCArMjc5LDggQEAKICAgICBTVFJJTkcgICAgICJCcidhYmMnIiAgICAgKDEsIDIwKSAoMSwgMjcpCiAgICAgT1AgICAgICAgICAnKycgICAgICAgICAgICgxLCAyOCkgKDEsIDI5KQogICAgIFNUUklORyAgICAgIkJSJ2FiYyciICAgICAoMSwgMzApICgxLCAzNykKLSAgICA+Pj4gZHVtcF90b2tlbnMoJ2JyImFiYyIgKyBiUiJhYmMiICsgQnIiYWJjIiArIEJSImFiYyInKQotICAgIEVOQ09ESU5HICAgJ3V0Zi04JyAgICAgICAoMCwgMCkgKDAsIDApCisgICAgIiIiKQorICAgICAgICBzZWxmLmNoZWNrX3Rva2VuaXplKCdiciJhYmMiICsgYlIiYWJjIiArIEJyImFiYyIgKyBCUiJhYmMiJywgIiIiXAogICAgIFNUUklORyAgICAgJ2JyImFiYyInICAgICAoMSwgMCkgKDEsIDcpCiAgICAgT1AgICAgICAgICAnKycgICAgICAgICAgICgxLCA4KSAoMSwgOSkKICAgICBTVFJJTkcgICAgICdiUiJhYmMiJyAgICAgKDEsIDEwKSAoMSwgMTcpCkBAIC0zMjgsOCArMjg4LDggQEAKICAgICBTVFJJTkcgICAgICdCciJhYmMiJyAgICAgKDEsIDIwKSAoMSwgMjcpCiAgICAgT1AgICAgICAgICAnKycgICAgICAgICAgICgxLCAyOCkgKDEsIDI5KQogICAgIFNUUklORyAgICAgJ0JSImFiYyInICAgICAoMSwgMzApICgxLCAzNykKLSAgICA+Pj4gZHVtcF90b2tlbnMoInJiJ2FiYycgKyByQidhYmMnICsgUmInYWJjJyArIFJCJ2FiYyciKQotICAgIEVOQ09ESU5HICAgJ3V0Zi04JyAgICAgICAoMCwgMCkgKDAsIDApCisgICAgIiIiKQorICAgICAgICBzZWxmLmNoZWNrX3Rva2VuaXplKCJyYidhYmMnICsgckInYWJjJyArIFJiJ2FiYycgKyBSQidhYmMnIiwgIiIiXAogICAgIFNUUklORyAgICAgInJiJ2FiYyciICAgICAoMSwgMCkgKDEsIDcpCiAgICAgT1AgICAgICAgICAnKycgICAgICAgICAgICgxLCA4KSAoMSwgOSkKICAgICBTVFJJTkcgICAgICJyQidhYmMnIiAgICAgKDEsIDEwKSAoMSwgMTcpCkBAIC0zMzcsOCArMjk3LDggQEAKICAgICBTVFJJTkcgICAgICJSYidhYmMnIiAgICAgKDEsIDIwKSAoMSwgMjcpCiAgICAgT1AgICAgICAgICAnKycgICAgICAgICAgICgxLCAyOCkgKDEsIDI5KQogICAgIFNUUklORyAgICAgIlJCJ2FiYyciICAgICAoMSwgMzApICgxLCAzNykKLSAgICA+Pj4gZHVtcF90b2tlbnMoJ3JiImFiYyIgKyByQiJhYmMiICsgUmIiYWJjIiArIFJCImFiYyInKQotICAgIEVOQ09ESU5HICAgJ3V0Zi04JyAgICAgICAoMCwgMCkgKDAsIDApCisgICAgIiIiKQorICAgICAgICBzZWxmLmNoZWNrX3Rva2VuaXplKCdyYiJhYmMiICsgckIiYWJjIiArIFJiImFiYyIgKyBSQiJhYmMiJywgIiIiXAogICAgIFNUUklORyAgICAgJ3JiImFiYyInICAgICAoMSwgMCkgKDEsIDcpCiAgICAgT1AgICAgICAgICAnKycgICAgICAgICAgICgxLCA4KSAoMSwgOSkKICAgICBTVFJJTkcgICAgICdyQiJhYmMiJyAgICAgKDEsIDEwKSAoMSwgMTcpCkBAIC0zNDYsMTEgKzMwNiwxMCBAQAogICAgIFNUUklORyAgICAgJ1JiImFiYyInICAgICAoMSwgMjApICgxLCAyNykKICAgICBPUCAgICAgICAgICcrJyAgICAgICAgICAgKDEsIDI4KSAoMSwgMjkpCiAgICAgU1RSSU5HICAgICAnUkIiYWJjIicgICAgICgxLCAzMCkgKDEsIDM3KQorICAgICIiIikKIAotT3BlcmF0b3JzCi0KLSAgICA+Pj4gZHVtcF90b2tlbnMoImRlZiBkMjIoYSwgYiwgYz0yLCBkPTIsICprKTogcGFzcyIpCi0gICAgRU5DT0RJTkcgICAndXRmLTgnICAgICAgICgwLCAwKSAoMCwgMCkKKyAgICBkZWYgdGVzdF9mdW5jdGlvbihzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja190b2tlbml6ZSgiZGVmIGQyMihhLCBiLCBjPTIsIGQ9MiwgKmspOiBwYXNzIiwgIiIiXAogICAgIE5BTUUgICAgICAgJ2RlZicgICAgICAgICAoMSwgMCkgKDEsIDMpCiAgICAgTkFNRSAgICAgICAnZDIyJyAgICAgICAgICgxLCA0KSAoMSwgNykKICAgICBPUCAgICAgICAgICcoJyAgICAgICAgICAgKDEsIDcpICgxLCA4KQpAQCAtMzcxLDggKzMzMCw4IEBACiAgICAgT1AgICAgICAgICAnKScgICAgICAgICAgICgxLCAyNikgKDEsIDI3KQogICAgIE9QICAgICAgICAgJzonICAgICAgICAgICAoMSwgMjcpICgxLCAyOCkKICAgICBOQU1FICAgICAgICdwYXNzJyAgICAgICAgKDEsIDI5KSAoMSwgMzMpCi0gICAgPj4+IGR1bXBfdG9rZW5zKCJkZWYgZDAxdl8oYT0xLCAqaywgKip3KTogcGFzcyIpCi0gICAgRU5DT0RJTkcgICAndXRmLTgnICAgICAgICgwLCAwKSAoMCwgMCkKKyAgICAiIiIpCisgICAgICAgIHNlbGYuY2hlY2tfdG9rZW5pemUoImRlZiBkMDF2XyhhPTEsICprLCAqKncpOiBwYXNzIiwgIiIiXAogICAgIE5BTUUgICAgICAgJ2RlZicgICAgICAgICAoMSwgMCkgKDEsIDMpCiAgICAgTkFNRSAgICAgICAnZDAxdl8nICAgICAgICgxLCA0KSAoMSwgOSkKICAgICBPUCAgICAgICAgICcoJyAgICAgICAgICAgKDEsIDkpICgxLCAxMCkKQEAgLTM4OCwxMiArMzQ3LDEyIEBACiAgICAgT1AgICAgICAgICAnKScgICAgICAgICAgICgxLCAyMikgKDEsIDIzKQogICAgIE9QICAgICAgICAgJzonICAgICAgICAgICAoMSwgMjMpICgxLCAyNCkKICAgICBOQU1FICAgICAgICdwYXNzJyAgICAgICAgKDEsIDI1KSAoMSwgMjkpCisgICAgIiIiKQogCi1Db21wYXJpc29uCi0KLSAgICA+Pj4gZHVtcF90b2tlbnMoImlmIDEgPCAxID4gMSA9PSAxID49IDUgPD0gMHgxNSA8PSAweDEyICE9ICIgKwotICAgIC4uLiAgICAgICAgICAgICAiMSBhbmQgNSBpbiAxIG5vdCBpbiAxIGlzIDEgb3IgNSBpcyBub3QgMTogcGFzcyIpCi0gICAgRU5DT0RJTkcgICAndXRmLTgnICAgICAgICgwLCAwKSAoMCwgMCkKKyAgICBkZWYgdGVzdF9jb21wYXJpc29uKHNlbGYpOgorICAgICAgICAjIENvbXBhcmlzb24KKyAgICAgICAgc2VsZi5jaGVja190b2tlbml6ZSgiaWYgMSA8IDEgPiAxID09IDEgPj0gNSA8PSAweDE1IDw9IDB4MTIgIT0gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxIGFuZCA1IGluIDEgbm90IGluIDEgaXMgMSBvciA1IGlzIG5vdCAxOiBwYXNzIiwgIiIiXAogICAgIE5BTUUgICAgICAgJ2lmJyAgICAgICAgICAoMSwgMCkgKDEsIDIpCiAgICAgTlVNQkVSICAgICAnMScgICAgICAgICAgICgxLCAzKSAoMSwgNCkKICAgICBPUCAgICAgICAgICc8JyAgICAgICAgICAgKDEsIDUpICgxLCA2KQpAQCAtNDI2LDExICszODUsMTEgQEAKICAgICBOVU1CRVIgICAgICcxJyAgICAgICAgICAgKDEsIDgxKSAoMSwgODIpCiAgICAgT1AgICAgICAgICAnOicgICAgICAgICAgICgxLCA4MikgKDEsIDgzKQogICAgIE5BTUUgICAgICAgJ3Bhc3MnICAgICAgICAoMSwgODQpICgxLCA4OCkKKyAgICAiIiIpCiAKLVNoaWZ0Ci0KLSAgICA+Pj4gZHVtcF90b2tlbnMoInggPSAxIDw8IDEgPj4gNSIpCi0gICAgRU5DT0RJTkcgICAndXRmLTgnICAgICAgICgwLCAwKSAoMCwgMCkKKyAgICBkZWYgdGVzdF9zaGlmdChzZWxmKToKKyAgICAgICAgIyBTaGlmdAorICAgICAgICBzZWxmLmNoZWNrX3Rva2VuaXplKCJ4ID0gMSA8PCAxID4+IDUiLCAiIiJcCiAgICAgTkFNRSAgICAgICAneCcgICAgICAgICAgICgxLCAwKSAoMSwgMSkKICAgICBPUCAgICAgICAgICc9JyAgICAgICAgICAgKDEsIDIpICgxLCAzKQogICAgIE5VTUJFUiAgICAgJzEnICAgICAgICAgICAoMSwgNCkgKDEsIDUpCkBAIC00MzgsMTEgKzM5NywxMSBAQAogICAgIE5VTUJFUiAgICAgJzEnICAgICAgICAgICAoMSwgOSkgKDEsIDEwKQogICAgIE9QICAgICAgICAgJz4+JyAgICAgICAgICAoMSwgMTEpICgxLCAxMykKICAgICBOVU1CRVIgICAgICc1JyAgICAgICAgICAgKDEsIDE0KSAoMSwgMTUpCisgICAgIiIiKQogCi1BZGRpdGl2ZQotCi0gICAgPj4+IGR1bXBfdG9rZW5zKCJ4ID0gMSAtIHkgKyAxNSAtIDEgKyAweDEyNCArIHogKyBhWzVdIikKLSAgICBFTkNPRElORyAgICd1dGYtOCcgICAgICAgKDAsIDApICgwLCAwKQorICAgIGRlZiB0ZXN0X2FkZGl0aXZlKHNlbGYpOgorICAgICAgICAjIEFkZGl0aXZlCisgICAgICAgIHNlbGYuY2hlY2tfdG9rZW5pemUoInggPSAxIC0geSArIDE1IC0gMSArIDB4MTI0ICsgeiArIGFbNV0iLCAiIiJcCiAgICAgTkFNRSAgICAgICAneCcgICAgICAgICAgICgxLCAwKSAoMSwgMSkKICAgICBPUCAgICAgICAgICc9JyAgICAgICAgICAgKDEsIDIpICgxLCAzKQogICAgIE5VTUJFUiAgICAgJzEnICAgICAgICAgICAoMSwgNCkgKDEsIDUpCkBAIC00NjEsMTEgKzQyMCwxMSBAQAogICAgIE9QICAgICAgICAgJ1snICAgICAgICAgICAoMSwgMzQpICgxLCAzNSkKICAgICBOVU1CRVIgICAgICc1JyAgICAgICAgICAgKDEsIDM1KSAoMSwgMzYpCiAgICAgT1AgICAgICAgICAnXScgICAgICAgICAgICgxLCAzNikgKDEsIDM3KQorICAgICIiIikKIAotTXVsdGlwbGljYXRpdmUKLQotICAgID4+PiBkdW1wX3Rva2VucygieCA9IDEvLzEqMS81KjEyJTB4MTIiKQotICAgIEVOQ09ESU5HICAgJ3V0Zi04JyAgICAgICAoMCwgMCkgKDAsIDApCisgICAgZGVmIHRlc3RfbXVsdGlwbGljYXRpdmUoc2VsZik6CisgICAgICAgICMgTXVsdGlwbGljYXRpdmUKKyAgICAgICAgc2VsZi5jaGVja190b2tlbml6ZSgieCA9IDEvLzEqMS81KjEyJTB4MTIiLCAiIiJcCiAgICAgTkFNRSAgICAgICAneCcgICAgICAgICAgICgxLCAwKSAoMSwgMSkKICAgICBPUCAgICAgICAgICc9JyAgICAgICAgICAgKDEsIDIpICgxLCAzKQogICAgIE5VTUJFUiAgICAgJzEnICAgICAgICAgICAoMSwgNCkgKDEsIDUpCkBAIC00NzksMTEgKzQzOCwxMSBAQAogICAgIE5VTUJFUiAgICAgJzEyJyAgICAgICAgICAoMSwgMTMpICgxLCAxNSkKICAgICBPUCAgICAgICAgICclJyAgICAgICAgICAgKDEsIDE1KSAoMSwgMTYpCiAgICAgTlVNQkVSICAgICAnMHgxMicgICAgICAgICgxLCAxNikgKDEsIDIwKQorICAgICIiIikKIAotVW5hcnkKLQotICAgID4+PiBkdW1wX3Rva2VucygifjEgXiAxICYgMSB8MSBeIC0xIikKLSAgICBFTkNPRElORyAgICd1dGYtOCcgICAgICAgKDAsIDApICgwLCAwKQorICAgIGRlZiB0ZXN0X3VuYXJ5KHNlbGYpOgorICAgICAgICAjIFVuYXJ5CisgICAgICAgIHNlbGYuY2hlY2tfdG9rZW5pemUoIn4xIF4gMSAmIDEgfDEgXiAtMSIsICIiIlwKICAgICBPUCAgICAgICAgICd+JyAgICAgICAgICAgKDEsIDApICgxLCAxKQogICAgIE5VTUJFUiAgICAgJzEnICAgICAgICAgICAoMSwgMSkgKDEsIDIpCiAgICAgT1AgICAgICAgICAnXicgICAgICAgICAgICgxLCAzKSAoMSwgNCkKQEAgLTQ5NSw4ICs0NTQsOCBAQAogICAgIE9QICAgICAgICAgJ14nICAgICAgICAgICAoMSwgMTQpICgxLCAxNSkKICAgICBPUCAgICAgICAgICctJyAgICAgICAgICAgKDEsIDE2KSAoMSwgMTcpCiAgICAgTlVNQkVSICAgICAnMScgICAgICAgICAgICgxLCAxNykgKDEsIDE4KQotICAgID4+PiBkdW1wX3Rva2VucygiLTEqMS8xKzEqMS8vMSAtIC0tLTEqKjEiKQotICAgIEVOQ09ESU5HICAgJ3V0Zi04JyAgICAgICAoMCwgMCkgKDAsIDApCisgICAgIiIiKQorICAgICAgICBzZWxmLmNoZWNrX3Rva2VuaXplKCItMSoxLzErMSoxLy8xIC0gLS0tMSoqMSIsICIiIlwKICAgICBPUCAgICAgICAgICctJyAgICAgICAgICAgKDEsIDApICgxLCAxKQogICAgIE5VTUJFUiAgICAgJzEnICAgICAgICAgICAoMSwgMSkgKDEsIDIpCiAgICAgT1AgICAgICAgICAnKicgICAgICAgICAgICgxLCAyKSAoMSwgMykKQEAgLTUxNiwxMSArNDc1LDExIEBACiAgICAgTlVNQkVSICAgICAnMScgICAgICAgICAgICgxLCAxOSkgKDEsIDIwKQogICAgIE9QICAgICAgICAgJyoqJyAgICAgICAgICAoMSwgMjApICgxLCAyMikKICAgICBOVU1CRVIgICAgICcxJyAgICAgICAgICAgKDEsIDIyKSAoMSwgMjMpCisgICAgIiIiKQogCi1TZWxlY3RvcgotCi0gICAgPj4+IGR1bXBfdG9rZW5zKCJpbXBvcnQgc3lzLCB0aW1lXFxueCA9IHN5cy5tb2R1bGVzWyd0aW1lJ10udGltZSgpIikKLSAgICBFTkNPRElORyAgICd1dGYtOCcgICAgICAgKDAsIDApICgwLCAwKQorICAgIGRlZiB0ZXN0X3NlbGVjdG9yKHNlbGYpOgorICAgICAgICAjIFNlbGVjdG9yCisgICAgICAgIHNlbGYuY2hlY2tfdG9rZW5pemUoImltcG9ydCBzeXMsIHRpbWVcbnggPSBzeXMubW9kdWxlc1sndGltZSddLnRpbWUoKSIsICIiIlwKICAgICBOQU1FICAgICAgICdpbXBvcnQnICAgICAgKDEsIDApICgxLCA2KQogICAgIE5BTUUgICAgICAgJ3N5cycgICAgICAgICAoMSwgNykgKDEsIDEwKQogICAgIE9QICAgICAgICAgJywnICAgICAgICAgICAoMSwgMTApICgxLCAxMSkKQEAgLTUzOCwxMSArNDk3LDExIEBACiAgICAgTkFNRSAgICAgICAndGltZScgICAgICAgICgyLCAyNCkgKDIsIDI4KQogICAgIE9QICAgICAgICAgJygnICAgICAgICAgICAoMiwgMjgpICgyLCAyOSkKICAgICBPUCAgICAgICAgICcpJyAgICAgICAgICAgKDIsIDI5KSAoMiwgMzApCisgICAgIiIiKQogCi1NZXRob2RzCi0KLSAgICA+Pj4gZHVtcF90b2tlbnMoIkBzdGF0aWNtZXRob2RcXG5kZWYgZm9vKHgseSk6IHBhc3MiKQotICAgIEVOQ09ESU5HICAgJ3V0Zi04JyAgICAgICAoMCwgMCkgKDAsIDApCisgICAgZGVmIHRlc3RfbWV0aG9kKHNlbGYpOgorICAgICAgICAjIE1ldGhvZHMKKyAgICAgICAgc2VsZi5jaGVja190b2tlbml6ZSgiQHN0YXRpY21ldGhvZFxuZGVmIGZvbyh4LHkpOiBwYXNzIiwgIiIiXAogICAgIE9QICAgICAgICAgJ0AnICAgICAgICAgICAoMSwgMCkgKDEsIDEpCiAgICAgTkFNRSAgICAgICAnc3RhdGljbWV0aG9kICgxLCAxKSAoMSwgMTMpCiAgICAgTkVXTElORSAgICAnXFxuJyAgICAgICAgICAoMSwgMTMpICgxLCAxNCkKQEAgLTU1NSw1MiArNTE0LDEzIEBACiAgICAgT1AgICAgICAgICAnKScgICAgICAgICAgICgyLCAxMSkgKDIsIDEyKQogICAgIE9QICAgICAgICAgJzonICAgICAgICAgICAoMiwgMTIpICgyLCAxMykKICAgICBOQU1FICAgICAgICdwYXNzJyAgICAgICAgKDIsIDE0KSAoMiwgMTgpCisgICAgIiIiKQogCi1CYWNrc2xhc2ggbWVhbnMgbGluZSBjb250aW51YXRpb24sIGV4Y2VwdCBmb3IgY29tbWVudHMKLQotICAgID4+PiByb3VuZHRyaXAoIng9MStcXFxcbiIKLSAgICAuLi4gICAgICAgICAgICIxXFxuIgotICAgIC4uLiAgICAgICAgICAgIiMgVGhpcyBpcyBhIGNvbW1lbnRcXFxcbiIKLSAgICAuLi4gICAgICAgICAgICIjIFRoaXMgYWxzb1xcbiIpCi0gICAgVHJ1ZQotICAgID4+PiByb3VuZHRyaXAoIiMgQ29tbWVudCBcXFxcbnggPSAwIikKLSAgICBUcnVlCi0KLVR3byBzdHJpbmcgbGl0ZXJhbHMgb24gdGhlIHNhbWUgbGluZQotCi0gICAgPj4+IHJvdW5kdHJpcCgiJycgJyciKQotICAgIFRydWUKLQotVGVzdCByb3VuZHRyaXAgb24gcmFuZG9tIHB5dGhvbiBtb2R1bGVzLgotcGFzcyB0aGUgJy11Y3B1JyBvcHRpb24gdG8gcHJvY2VzcyB0aGUgZnVsbCBkaXJlY3RvcnkuCi0KLSAgICA+Pj4gaW1wb3J0IHJhbmRvbQotICAgID4+PiB0ZW1wZGlyID0gb3MucGF0aC5kaXJuYW1lKGYpIG9yIG9zLmN1cmRpcgotICAgID4+PiB0ZXN0ZmlsZXMgPSBnbG9iLmdsb2Iob3MucGF0aC5qb2luKHRlbXBkaXIsICJ0ZXN0Ki5weSIpKQotCi1Ub2tlbml6ZSBpcyBicm9rZW4gb24gdGVzdF9wZXAzMTMxLnB5IGJlY2F1c2UgcmVndWxhciBleHByZXNzaW9ucyBhcmUKLWJyb2tlbiBvbiB0aGUgb2JzY3VyZSB1bmljb2RlIGlkZW50aWZpZXJzIGluIGl0LiAqc2lnaCoKLVdpdGggcm91bmR0cmlwIGV4dGVuZGVkIHRvIHRlc3QgdGhlIDUtdHVwbGUgbW9kZSBvZiAgdW50b2tlbml6ZSwKLTcgbW9yZSB0ZXN0ZmlsZXMgZmFpbC4gIFJlbW92ZSB0aGVtIGFsc28gdW50aWwgdGhlIGZhaWx1cmUgaXMgZGlhZ25vc2VkLgotCi0gICAgPj4+IHRlc3RmaWxlcy5yZW1vdmUob3MucGF0aC5qb2luKHRlbXBkaXIsICJ0ZXN0X3BlcDMxMzEucHkiKSkKLSAgICA+Pj4gZm9yIGYgaW4gKCdidWZmZXInLCAnYnVpbHRpbicsICdmaWxlaW8nLCAnaW5zcGVjdCcsICdvcycsICdwbGF0Zm9ybScsICdzeXMnKToKLSAgICAuLi4gICAgIHRlc3RmaWxlcy5yZW1vdmUob3MucGF0aC5qb2luKHRlbXBkaXIsICJ0ZXN0XyVzLnB5IikgJSBmKQotICAgIC4uLgotICAgID4+PiBpZiBub3Qgc3VwcG9ydC5pc19yZXNvdXJjZV9lbmFibGVkKCJjcHUiKToKLSAgICAuLi4gICAgIHRlc3RmaWxlcyA9IHJhbmRvbS5zYW1wbGUodGVzdGZpbGVzLCAxMCkKLSAgICAuLi4KLSAgICA+Pj4gZm9yIHRlc3RmaWxlIGluIHRlc3RmaWxlczoKLSAgICAuLi4gICAgIGlmIG5vdCByb3VuZHRyaXAob3Blbih0ZXN0ZmlsZSwgJ3JiJykpOgotICAgIC4uLiAgICAgICAgIHByaW50KCJSb3VuZHRyaXAgZmFpbGVkIGZvciBmaWxlICVzIiAlIHRlc3RmaWxlKQotICAgIC4uLiAgICAgICAgIGJyZWFrCi0gICAgLi4uIGVsc2U6IFRydWUKLSAgICBUcnVlCi0KLUV2aWwgdGFicwotCi0gICAgPj4+IGR1bXBfdG9rZW5zKCJkZWYgZigpOlxcblxcdGlmIHhcXG4gICAgICAgIFxcdHBhc3MiKQotICAgIEVOQ09ESU5HICAgJ3V0Zi04JyAgICAgICAoMCwgMCkgKDAsIDApCisgICAgZGVmIHRlc3RfdGFicyhzZWxmKToKKyAgICAgICAgIyBFdmlsIHRhYnMKKyAgICAgICAgc2VsZi5jaGVja190b2tlbml6ZSgiZGVmIGYoKTpcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXHRpZiB4XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgXHRwYXNzIiwgIiIiXAogICAgIE5BTUUgICAgICAgJ2RlZicgICAgICAgICAoMSwgMCkgKDEsIDMpCiAgICAgTkFNRSAgICAgICAnZicgICAgICAgICAgICgxLCA0KSAoMSwgNSkKICAgICBPUCAgICAgICAgICcoJyAgICAgICAgICAgKDEsIDUpICgxLCA2KQpAQCAtNjE1LDExICs1MzUsMTEgQEAKICAgICBOQU1FICAgICAgICdwYXNzJyAgICAgICAgKDMsIDkpICgzLCAxMykKICAgICBERURFTlQgICAgICcnICAgICAgICAgICAgKDQsIDApICg0LCAwKQogICAgIERFREVOVCAgICAgJycgICAgICAgICAgICAoNCwgMCkgKDQsIDApCisgICAgIiIiKQogCi1Ob24tYXNjaWkgaWRlbnRpZmllcnMKLQotICAgID4+PiBkdW1wX3Rva2Vucygiw5ZydGVyID0gJ3BsYWNlcydcXG5ncsO8biA9ICdncmVlbiciKQotICAgIEVOQ09ESU5HICAgJ3V0Zi04JyAgICAgICAoMCwgMCkgKDAsIDApCisgICAgZGVmIHRlc3Rfbm9uX2FzY2lpX2lkZW50aWZpZXJzKHNlbGYpOgorICAgICAgICAjIE5vbi1hc2NpaSBpZGVudGlmaWVycworICAgICAgICBzZWxmLmNoZWNrX3Rva2VuaXplKCLDlnJ0ZXIgPSAncGxhY2VzJ1xuZ3LDvG4gPSAnZ3JlZW4nIiwgIiIiXAogICAgIE5BTUUgICAgICAgJ8OWcnRlcicgICAgICAgKDEsIDApICgxLCA1KQogICAgIE9QICAgICAgICAgJz0nICAgICAgICAgICAoMSwgNikgKDEsIDcpCiAgICAgU1RSSU5HICAgICAiJ3BsYWNlcyciICAgICgxLCA4KSAoMSwgMTYpCkBAIC02MjcsMTEgKzU0NywxMSBAQAogICAgIE5BTUUgICAgICAgJ2dyw7xuJyAgICAgICAgKDIsIDApICgyLCA0KQogICAgIE9QICAgICAgICAgJz0nICAgICAgICAgICAoMiwgNSkgKDIsIDYpCiAgICAgU1RSSU5HICAgICAiJ2dyZWVuJyIgICAgICgyLCA3KSAoMiwgMTQpCisgICAgIiIiKQogCi1MZWdhY3kgdW5pY29kZSBsaXRlcmFsczoKLQotICAgID4+PiBkdW1wX3Rva2Vucygiw5ZydGVyID0gdSdwbGFjZXMnXFxuZ3LDvG4gPSBVJ2dyZWVuJyIpCi0gICAgRU5DT0RJTkcgICAndXRmLTgnICAgICAgICgwLCAwKSAoMCwgMCkKKyAgICBkZWYgdGVzdF91bmljb2RlKHNlbGYpOgorICAgICAgICAjIExlZ2FjeSB1bmljb2RlIGxpdGVyYWxzOgorICAgICAgICBzZWxmLmNoZWNrX3Rva2VuaXplKCLDlnJ0ZXIgPSB1J3BsYWNlcydcbmdyw7xuID0gVSdncmVlbiciLCAiIiJcCiAgICAgTkFNRSAgICAgICAnw5ZydGVyJyAgICAgICAoMSwgMCkgKDEsIDUpCiAgICAgT1AgICAgICAgICAnPScgICAgICAgICAgICgxLCA2KSAoMSwgNykKICAgICBTVFJJTkcgICAgICJ1J3BsYWNlcyciICAgKDEsIDgpICgxLCAxNykKQEAgLTYzOSw4OSArNTU5LDEwIEBACiAgICAgTkFNRSAgICAgICAnZ3LDvG4nICAgICAgICAoMiwgMCkgKDIsIDQpCiAgICAgT1AgICAgICAgICAnPScgICAgICAgICAgICgyLCA1KSAoMiwgNikKICAgICBTVFJJTkcgICAgICJVJ2dyZWVuJyIgICAgKDIsIDcpICgyLCAxNSkKLSIiIgorICAgICIiIikKIAotZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0Ci1mcm9tIHRva2VuaXplIGltcG9ydCAodG9rZW5pemUsIF90b2tlbml6ZSwgdW50b2tlbml6ZSwgTlVNQkVSLCBOQU1FLCBPUCwKLSAgICAgICAgICAgICAgICAgICAgIFNUUklORywgRU5ETUFSS0VSLCBFTkNPRElORywgdG9rX25hbWUsIGRldGVjdF9lbmNvZGluZywKLSAgICAgICAgICAgICAgICAgICAgIG9wZW4gYXMgdG9rZW5pemVfb3BlbiwgVW50b2tlbml6ZXIpCi1mcm9tIGlvIGltcG9ydCBCeXRlc0lPCi1mcm9tIHVuaXR0ZXN0IGltcG9ydCBUZXN0Q2FzZQotaW1wb3J0IG9zLCBzeXMsIGdsb2IKLWltcG9ydCB0b2tlbgogCi1kZWYgZHVtcF90b2tlbnMocyk6Ci0gICAgIiIiUHJpbnQgb3V0IHRoZSB0b2tlbnMgaW4gcyBpbiBhIHRhYmxlIGZvcm1hdC4KLQotICAgIFRoZSBFTkRNQVJLRVIgaXMgb21pdHRlZC4KLSAgICAiIiIKLSAgICBmID0gQnl0ZXNJTyhzLmVuY29kZSgndXRmLTgnKSkKLSAgICBmb3IgdHlwZSwgdG9rZW4sIHN0YXJ0LCBlbmQsIGxpbmUgaW4gdG9rZW5pemUoZi5yZWFkbGluZSk6Ci0gICAgICAgIGlmIHR5cGUgPT0gRU5ETUFSS0VSOgotICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgdHlwZSA9IHRva19uYW1lW3R5cGVdCi0gICAgICAgIHByaW50KCIlKHR5cGUpLTEwLjEwcyAlKHRva2VuKS0xMy4xM3IgJShzdGFydClzICUoZW5kKXMiICUgbG9jYWxzKCkpCi0KLWRlZiByb3VuZHRyaXAoZik6Ci0gICAgIiIiCi0gICAgVGVzdCByb3VuZHRyaXAgZm9yIGB1bnRva2VuaXplYC4gYGZgIGlzIGFuIG9wZW4gZmlsZSBvciBhIHN0cmluZy4KLSAgICBUaGUgc291cmNlIGNvZGUgaW4gZiBpcyB0b2tlbml6ZWQgdG8gYm90aCA1LSBhbmQgMi10dXBsZXMuCi0gICAgQm90aCBzZXF1ZW5jZXMgYXJlIGNvbnZlcnRlZCBiYWNrIHRvIHNvdXJjZSBjb2RlIHZpYQotICAgIHRva2VuaXplLnVudG9rZW5pemUoKSwgYW5kIHRoZSBsYXR0ZXIgdG9rZW5pemVkIGFnYWluIHRvIDItdHVwbGVzLgotICAgIFRoZSB0ZXN0IGZhaWxzIGlmIHRoZSAzIHBhaXIgdG9rZW5pemF0aW9ucyBkbyBub3QgbWF0Y2guCi0KLSAgICBXaGVuIHVudG9rZW5pemUgYnVncyBhcmUgZml4ZWQsIHVudG9rZW5pemUgd2l0aCA1LXR1cGxlcyBzaG91bGQKLSAgICByZXByb2R1Y2UgY29kZSB0aGF0IGRvZXMgbm90IGNvbnRhaW4gYSBiYWNrc2xhc2ggY29udGludWF0aW9uCi0gICAgZm9sbG93aW5nIHNwYWNlcy4gIEEgcHJvcGVyIHRlc3Qgc2hvdWxkIHRlc3QgdGhpcy4KLQotICAgIFRoaXMgZnVuY3Rpb24gd291bGQgYmUgbW9yZSB1c2VmdWwgZm9yIGNvcnJlY3RpbmcgYnVncyBpZiBpdCByZXBvcnRlZAotICAgIHRoZSBmaXJzdCBwb2ludCBvZiBmYWlsdXJlLCBsaWtlIGFzc2VydEVxdWFsLCByYXRoZXIgdGhhbiBqdXN0Ci0gICAgcmV0dXJuaW5nIEZhbHNlIC0tIG9yIGlmIGl0IHdlcmUgb25seSB1c2VkIGluIHVuaXR0ZXN0cyBhbmQgbm90Ci0gICAgZG9jdGVzdCBhbmQgYWN0dWFsbHkgdXNlZCBhc3NlcnRFcXVhbC4KLSAgICAiIiIKLSAgICAjIEdldCBzb3VyY2UgY29kZSBhbmQgb3JpZ2luYWwgdG9rZW5pemF0aW9ucwotICAgIGlmIGlzaW5zdGFuY2UoZiwgc3RyKToKLSAgICAgICAgY29kZSA9IGYuZW5jb2RlKCd1dGYtOCcpCi0gICAgZWxzZToKLSAgICAgICAgY29kZSA9IGYucmVhZCgpCi0gICAgICAgIGYuY2xvc2UoKQotICAgIHJlYWRsaW5lID0gaXRlcihjb2RlLnNwbGl0bGluZXMoa2VlcGVuZHM9VHJ1ZSkpLl9fbmV4dF9fCi0gICAgdG9rZW5zNSA9IGxpc3QodG9rZW5pemUocmVhZGxpbmUpKQotICAgIHRva2VuczIgPSBbdG9rWzoyXSBmb3IgdG9rIGluIHRva2VuczVdCi0gICAgIyBSZXByb2R1Y2UgdG9rZW5zMiBmcm9tIHBhaXJzCi0gICAgYnl0ZXNfZnJvbTIgPSB1bnRva2VuaXplKHRva2VuczIpCi0gICAgcmVhZGxpbmUyID0gaXRlcihieXRlc19mcm9tMi5zcGxpdGxpbmVzKGtlZXBlbmRzPVRydWUpKS5fX25leHRfXwotICAgIHRva2VuczJfZnJvbTIgPSBbdG9rWzoyXSBmb3IgdG9rIGluIHRva2VuaXplKHJlYWRsaW5lMildCi0gICAgIyBSZXByb2R1Y2UgdG9rZW5zMiBmcm9tIDUtdHVwbGVzCi0gICAgYnl0ZXNfZnJvbTUgPSB1bnRva2VuaXplKHRva2VuczUpCi0gICAgcmVhZGxpbmU1ID0gaXRlcihieXRlc19mcm9tNS5zcGxpdGxpbmVzKGtlZXBlbmRzPVRydWUpKS5fX25leHRfXwotICAgIHRva2VuczJfZnJvbTUgPSBbdG9rWzoyXSBmb3IgdG9rIGluIHRva2VuaXplKHJlYWRsaW5lNSldCi0gICAgIyBDb21wYXJlIDMgdmVyc2lvbnMKLSAgICByZXR1cm4gdG9rZW5zMiA9PSB0b2tlbnMyX2Zyb20yID09IHRva2VuczJfZnJvbTUKLQotIyBUaGlzIGlzIGFuIGV4YW1wbGUgZnJvbSB0aGUgZG9jcywgc2V0IHVwIGFzIGEgZG9jdGVzdC4KIGRlZiBkZWNpc3RtdChzKToKLSAgICAiIiJTdWJzdGl0dXRlIERlY2ltYWxzIGZvciBmbG9hdHMgaW4gYSBzdHJpbmcgb2Ygc3RhdGVtZW50cy4KLQotICAgID4+PiBmcm9tIGRlY2ltYWwgaW1wb3J0IERlY2ltYWwKLSAgICA+Pj4gcyA9ICdwcmludCgrMjEuM2UtNSotLjEyMzQvODEuNyknCi0gICAgPj4+IGRlY2lzdG10KHMpCi0gICAgInByaW50ICgrRGVjaW1hbCAoJzIxLjNlLTUnKSotRGVjaW1hbCAoJy4xMjM0JykvRGVjaW1hbCAoJzgxLjcnKSkiCi0KLSAgICBUaGUgZm9ybWF0IG9mIHRoZSBleHBvbmVudCBpcyBpbmhlcml0ZWQgZnJvbSB0aGUgcGxhdGZvcm0gQyBsaWJyYXJ5LgotICAgIEtub3duIGNhc2VzIGFyZSAiZS0wMDciIChXaW5kb3dzKSBhbmQgImUtMDciIChub3QgV2luZG93cykuICBTaW5jZQotICAgIHdlJ3JlIG9ubHkgc2hvd2luZyAxMSBkaWdpdHMsIGFuZCB0aGUgMTJ0aCBpc24ndCBjbG9zZSB0byA1LCB0aGUKLSAgICByZXN0IG9mIHRoZSBvdXRwdXQgc2hvdWxkIGJlIHBsYXRmb3JtLWluZGVwZW5kZW50LgotCi0gICAgPj4+IGV4ZWMocykgI2RvY3Rlc3Q6ICtFTExJUFNJUwotICAgIC0zLjIxNzE2MDM0MjcuLi5lLTAuLi43Ci0KLSAgICBPdXRwdXQgZnJvbSBjYWxjdWxhdGlvbnMgd2l0aCBEZWNpbWFsIHNob3VsZCBiZSBpZGVudGljYWwgYWNyb3NzIGFsbAotICAgIHBsYXRmb3Jtcy4KLQotICAgID4+PiBleGVjKGRlY2lzdG10KHMpKQotICAgIC0zLjIxNzE2MDM0MjcxNzI1ODI2MTkzMzkwNDUyOUUtNwotICAgICIiIgogICAgIHJlc3VsdCA9IFtdCiAgICAgZyA9IHRva2VuaXplKEJ5dGVzSU8ocy5lbmNvZGUoJ3V0Zi04JykpLnJlYWRsaW5lKSAgICMgdG9rZW5pemUgdGhlIHN0cmluZwogICAgIGZvciB0b2tudW0sIHRva3ZhbCwgXywgXywgXyAgaW4gZzoKQEAgLTczNiw2ICs1NzcsMjggQEAKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoKHRva251bSwgdG9rdmFsKSkKICAgICByZXR1cm4gdW50b2tlbml6ZShyZXN1bHQpLmRlY29kZSgndXRmLTgnKQogCitjbGFzcyBUZXN0TWlzYyhUZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9kZWNpc3RtdChzZWxmKToKKyAgICAgICAgIyBTdWJzdGl0dXRlIERlY2ltYWxzIGZvciBmbG9hdHMgaW4gYSBzdHJpbmcgb2Ygc3RhdGVtZW50cy4KKyAgICAgICAgIyBUaGlzIGlzIGFuIGV4YW1wbGUgZnJvbSB0aGUgZG9jcy4KKworICAgICAgICBmcm9tIGRlY2ltYWwgaW1wb3J0IERlY2ltYWwKKyAgICAgICAgcyA9ICcrMjEuM2UtNSotLjEyMzQvODEuNycKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZWNpc3RtdChzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiK0RlY2ltYWwgKCcyMS4zZS01JykqLURlY2ltYWwgKCcuMTIzNCcpL0RlY2ltYWwgKCc4MS43JykiKQorCisgICAgICAgICMgVGhlIGZvcm1hdCBvZiB0aGUgZXhwb25lbnQgaXMgaW5oZXJpdGVkIGZyb20gdGhlIHBsYXRmb3JtIEMgbGlicmFyeS4KKyAgICAgICAgIyBLbm93biBjYXNlcyBhcmUgImUtMDA3IiAoV2luZG93cykgYW5kICJlLTA3IiAobm90IFdpbmRvd3MpLiAgU2luY2UKKyAgICAgICAgIyB3ZSdyZSBvbmx5IHNob3dpbmcgMTEgZGlnaXRzLCBhbmQgdGhlIDEydGggaXNuJ3QgY2xvc2UgdG8gNSwgdGhlCisgICAgICAgICMgcmVzdCBvZiB0aGUgb3V0cHV0IHNob3VsZCBiZSBwbGF0Zm9ybS1pbmRlcGVuZGVudC4KKyAgICAgICAgc2VsZi5hc3NlcnRSZWdleChyZXByKGV2YWwocykpLCAnLTMuMjE3MTYwMzQyN1swLTldKmUtMCs3JykKKworICAgICAgICAjIE91dHB1dCBmcm9tIGNhbGN1bGF0aW9ucyB3aXRoIERlY2ltYWwgc2hvdWxkIGJlIGlkZW50aWNhbCBhY3Jvc3MgYWxsCisgICAgICAgICMgcGxhdGZvcm1zLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwoZGVjaXN0bXQocykpLAorICAgICAgICAgICAgICAgICAgICAgICAgIERlY2ltYWwoJy0zLjIxNzE2MDM0MjcxNzI1ODI2MTkzMzkwNDUyOUUtNycpKQorCiAKIGNsYXNzIFRlc3RUb2tlbml6ZXJBZGhlcmVzVG9QZXAwMjYzKFRlc3RDYXNlKToKICAgICAiIiIKQEAgLTc0NCwxMSArNjA3LDExIEBACiAKICAgICBkZWYgX3Rlc3RGaWxlKHNlbGYsIGZpbGVuYW1lKToKICAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCBmaWxlbmFtZSkKLSAgICAgICAgcmV0dXJuIHJvdW5kdHJpcChvcGVuKHBhdGgsICdyYicpKQorICAgICAgICBUZXN0Um91bmR0cmlwLmNoZWNrX3JvdW5kdHJpcChzZWxmLCBvcGVuKHBhdGgsICdyYicpKQogCiAgICAgZGVmIHRlc3RfdXRmOF9jb2RpbmdfY29va2llX2FuZF9ub191dGY4X2JvbShzZWxmKToKICAgICAgICAgZiA9ICd0b2tlbml6ZV90ZXN0cy11dGY4LWNvZGluZy1jb29raWUtYW5kLW5vLXV0ZjgtYm9tLXNpZy50eHQnCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLl90ZXN0RmlsZShmKSkKKyAgICAgICAgc2VsZi5fdGVzdEZpbGUoZikKIAogICAgIGRlZiB0ZXN0X2xhdGluMV9jb2RpbmdfY29va2llX2FuZF91dGY4X2JvbShzZWxmKToKICAgICAgICAgIiIiCkBAIC03NjMsMTEgKzYyNiwxMSBAQAogCiAgICAgZGVmIHRlc3Rfbm9fY29kaW5nX2Nvb2tpZV9hbmRfdXRmOF9ib20oc2VsZik6CiAgICAgICAgIGYgPSAndG9rZW5pemVfdGVzdHMtbm8tY29kaW5nLWNvb2tpZS1hbmQtdXRmOC1ib20tc2lnLW9ubHkudHh0JwotICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5fdGVzdEZpbGUoZikpCisgICAgICAgIHNlbGYuX3Rlc3RGaWxlKGYpCiAKICAgICBkZWYgdGVzdF91dGY4X2NvZGluZ19jb29raWVfYW5kX3V0ZjhfYm9tKHNlbGYpOgogICAgICAgICBmID0gJ3Rva2VuaXplX3Rlc3RzLXV0ZjgtY29kaW5nLWNvb2tpZS1hbmQtdXRmOC1ib20tc2lnLnR4dCcKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuX3Rlc3RGaWxlKGYpKQorICAgICAgICBzZWxmLl90ZXN0RmlsZShmKQogCiAgICAgZGVmIHRlc3RfYmFkX2NvZGluZ19jb29raWUoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yLCBzZWxmLl90ZXN0RmlsZSwgJ2JhZF9jb2RpbmcucHknKQpAQCAtMTA1OCw2ICs5MjEsMTMgQEAKICAgICAgICAgICAgIGlucyA9IEJ1bmsobGluZXMsIHBhdGgpCiAgICAgICAgICAgICBkZXRlY3RfZW5jb2RpbmcoaW5zLnJlYWRsaW5lKQogCisgICAgZGVmIHRlc3Rfb3Blbl9lcnJvcihzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMjM4NDA6IG9wZW4oKSBtdXN0IGNsb3NlIHRoZSBiaW5hcnkgZmlsZSBvbiBlcnJvcgorICAgICAgICBtID0gQnl0ZXNJTyhiJyNjb2Rpbmc6eHh4JykKKyAgICAgICAgd2l0aCBtb2NrLnBhdGNoKCd0b2tlbml6ZS5fYnVpbHRpbl9vcGVuJywgcmV0dXJuX3ZhbHVlPW0pOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IsIHRva2VuaXplX29wZW4sICdmb29iYXInKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobS5jbG9zZWQpCisKIAogY2xhc3MgVGVzdFRva2VuaXplKFRlc3RDYXNlKToKIApAQCAtMTA2Niw3ICs5MzYsNyBAQAogICAgICAgICBlbmNvZGluZyA9IG9iamVjdCgpCiAgICAgICAgIGVuY29kaW5nX3VzZWQgPSBOb25lCiAgICAgICAgIGRlZiBtb2NrX2RldGVjdF9lbmNvZGluZyhyZWFkbGluZSk6Ci0gICAgICAgICAgICByZXR1cm4gZW5jb2RpbmcsIFsnZmlyc3QnLCAnc2Vjb25kJ10KKyAgICAgICAgICAgIHJldHVybiBlbmNvZGluZywgW2InZmlyc3QnLCBiJ3NlY29uZCddCiAKICAgICAgICAgZGVmIG1vY2tfX3Rva2VuaXplKHJlYWRsaW5lLCBlbmNvZGluZyk6CiAgICAgICAgICAgICBub25sb2NhbCBlbmNvZGluZ191c2VkCkBAIC0xMDg1LDcgKzk1NSw3IEBACiAgICAgICAgICAgICBjb3VudGVyICs9IDEKICAgICAgICAgICAgIGlmIGNvdW50ZXIgPT0gNToKICAgICAgICAgICAgICAgICByZXR1cm4gYicnCi0gICAgICAgICAgICByZXR1cm4gY291bnRlcgorICAgICAgICAgICAgcmV0dXJuIHN0cihjb3VudGVyKS5lbmNvZGUoKQogCiAgICAgICAgIG9yaWdfZGV0ZWN0X2VuY29kaW5nID0gdG9rZW5pemVfbW9kdWxlLmRldGVjdF9lbmNvZGluZwogICAgICAgICBvcmlnX190b2tlbml6ZSA9IHRva2VuaXplX21vZHVsZS5fdG9rZW5pemUKQEAgLTEwOTMsNyArOTYzLDggQEAKICAgICAgICAgdG9rZW5pemVfbW9kdWxlLl90b2tlbml6ZSA9IG1vY2tfX3Rva2VuaXplCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHJlc3VsdHMgPSB0b2tlbml6ZShtb2NrX3JlYWRsaW5lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHJlc3VsdHMpLCBbJ2ZpcnN0JywgJ3NlY29uZCcsIDEsIDIsIDMsIDRdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHJlc3VsdHMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYidmaXJzdCcsIGInc2Vjb25kJywgYicxJywgYicyJywgYiczJywgYic0J10pCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICB0b2tlbml6ZV9tb2R1bGUuZGV0ZWN0X2VuY29kaW5nID0gb3JpZ19kZXRlY3RfZW5jb2RpbmcKICAgICAgICAgICAgIHRva2VuaXplX21vZHVsZS5fdG9rZW5pemUgPSBvcmlnX190b2tlbml6ZQpAQCAtMTE3Nyw2ICsxMDQ4LDcgQEAKICAgICAgICAgIyBTZWUgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTE2MTUyCiAgICAgICAgIHNlbGYuYXNzZXJ0RXhhY3RUeXBlRXF1YWwoJ0AgICAgICAgICAgJywgdG9rZW4uQVQpCiAKKwogY2xhc3MgVW50b2tlbml6ZVRlc3QoVGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3RfYmFkX2lucHV0X29yZGVyKHNlbGYpOgpAQCAtMTIwMiw3ICsxMDc0LDcgQEAKICAgICAgICAgdS5wcmV2X3JvdyA9IDIKICAgICAgICAgdS5hZGRfd2hpdGVzcGFjZSgoNCwgNCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodS50b2tlbnMsIFsnXFxcbicsICdcXFxuXFxcbicsICcgICAgJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyb3VuZHRyaXAoJ2FcbiAgYlxuICAgIGNcbiAgXFxcbiAgY1xuJykpCisgICAgICAgIFRlc3RSb3VuZHRyaXAuY2hlY2tfcm91bmR0cmlwKHNlbGYsICdhXG4gIGJcbiAgICBjXG4gIFxcXG4gIGNcbicpCiAKICAgICBkZWYgdGVzdF9pdGVyX2NvbXBhdChzZWxmKToKICAgICAgICAgdSA9IFVudG9rZW5pemVyKCkKQEAgLTEyMTgsMTYgKzEwOTAsMTQ3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW50b2tlbml6ZShpdGVyKHRva2VucykpLCBiJ0hlbGxvICcpCiAKIAotX190ZXN0X18gPSB7ImRvY3Rlc3RzIiA6IGRvY3Rlc3RzLCAnZGVjaXN0bXQnOiBkZWNpc3RtdH0KK2NsYXNzIFRlc3RSb3VuZHRyaXAoVGVzdENhc2UpOgogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3Rva2VuaXplCi0gICAgc3VwcG9ydC5ydW5fZG9jdGVzdCh0ZXN0X3Rva2VuaXplLCBUcnVlKQotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KFRlc3RUb2tlbml6ZXJBZGhlcmVzVG9QZXAwMjYzKQotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KFRlc3RfVG9rZW5pemUpCi0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoVGVzdERldGVjdEVuY29kaW5nKQotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KFRlc3RUb2tlbml6ZSkKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChVbnRva2VuaXplVGVzdCkKKyAgICBkZWYgY2hlY2tfcm91bmR0cmlwKHNlbGYsIGYpOgorICAgICAgICAiIiIKKyAgICAgICAgVGVzdCByb3VuZHRyaXAgZm9yIGB1bnRva2VuaXplYC4gYGZgIGlzIGFuIG9wZW4gZmlsZSBvciBhIHN0cmluZy4KKyAgICAgICAgVGhlIHNvdXJjZSBjb2RlIGluIGYgaXMgdG9rZW5pemVkIHRvIGJvdGggNS0gYW5kIDItdHVwbGVzLgorICAgICAgICBCb3RoIHNlcXVlbmNlcyBhcmUgY29udmVydGVkIGJhY2sgdG8gc291cmNlIGNvZGUgdmlhCisgICAgICAgIHRva2VuaXplLnVudG9rZW5pemUoKSwgYW5kIHRoZSBsYXR0ZXIgdG9rZW5pemVkIGFnYWluIHRvIDItdHVwbGVzLgorICAgICAgICBUaGUgdGVzdCBmYWlscyBpZiB0aGUgMyBwYWlyIHRva2VuaXphdGlvbnMgZG8gbm90IG1hdGNoLgorCisgICAgICAgIFdoZW4gdW50b2tlbml6ZSBidWdzIGFyZSBmaXhlZCwgdW50b2tlbml6ZSB3aXRoIDUtdHVwbGVzIHNob3VsZAorICAgICAgICByZXByb2R1Y2UgY29kZSB0aGF0IGRvZXMgbm90IGNvbnRhaW4gYSBiYWNrc2xhc2ggY29udGludWF0aW9uCisgICAgICAgIGZvbGxvd2luZyBzcGFjZXMuICBBIHByb3BlciB0ZXN0IHNob3VsZCB0ZXN0IHRoaXMuCisgICAgICAgICIiIgorICAgICAgICAjIEdldCBzb3VyY2UgY29kZSBhbmQgb3JpZ2luYWwgdG9rZW5pemF0aW9ucworICAgICAgICBpZiBpc2luc3RhbmNlKGYsIHN0cik6CisgICAgICAgICAgICBjb2RlID0gZi5lbmNvZGUoJ3V0Zi04JykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNvZGUgPSBmLnJlYWQoKQorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIHJlYWRsaW5lID0gaXRlcihjb2RlLnNwbGl0bGluZXMoa2VlcGVuZHM9VHJ1ZSkpLl9fbmV4dF9fCisgICAgICAgIHRva2VuczUgPSBsaXN0KHRva2VuaXplKHJlYWRsaW5lKSkKKyAgICAgICAgdG9rZW5zMiA9IFt0b2tbOjJdIGZvciB0b2sgaW4gdG9rZW5zNV0KKyAgICAgICAgIyBSZXByb2R1Y2UgdG9rZW5zMiBmcm9tIHBhaXJzCisgICAgICAgIGJ5dGVzX2Zyb20yID0gdW50b2tlbml6ZSh0b2tlbnMyKQorICAgICAgICByZWFkbGluZTIgPSBpdGVyKGJ5dGVzX2Zyb20yLnNwbGl0bGluZXMoa2VlcGVuZHM9VHJ1ZSkpLl9fbmV4dF9fCisgICAgICAgIHRva2VuczJfZnJvbTIgPSBbdG9rWzoyXSBmb3IgdG9rIGluIHRva2VuaXplKHJlYWRsaW5lMildCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodG9rZW5zMl9mcm9tMiwgdG9rZW5zMikKKyAgICAgICAgIyBSZXByb2R1Y2UgdG9rZW5zMiBmcm9tIDUtdHVwbGVzCisgICAgICAgIGJ5dGVzX2Zyb201ID0gdW50b2tlbml6ZSh0b2tlbnM1KQorICAgICAgICByZWFkbGluZTUgPSBpdGVyKGJ5dGVzX2Zyb201LnNwbGl0bGluZXMoa2VlcGVuZHM9VHJ1ZSkpLl9fbmV4dF9fCisgICAgICAgIHRva2VuczJfZnJvbTUgPSBbdG9rWzoyXSBmb3IgdG9rIGluIHRva2VuaXplKHJlYWRsaW5lNSldCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodG9rZW5zMl9mcm9tNSwgdG9rZW5zMikKKworICAgIGRlZiB0ZXN0X3JvdW5kdHJpcChzZWxmKToKKyAgICAgICAgIyBUaGVyZSBhcmUgc29tZSBzdGFuZGFyZCBmb3JtYXR0aW5nIHByYWN0aWNlcyB0aGF0IGFyZSBlYXN5IHRvIGdldCByaWdodC4KKworICAgICAgICBzZWxmLmNoZWNrX3JvdW5kdHJpcCgiaWYgeCA9PSAxOlxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIHByaW50KHgpXG4iKQorICAgICAgICBzZWxmLmNoZWNrX3JvdW5kdHJpcCgiIyBUaGlzIGlzIGEgY29tbWVudFxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIyBUaGlzIGFsc28iKQorCisgICAgICAgICMgU29tZSBwZW9wbGUgdXNlIGRpZmZlcmVudCBmb3JtYXR0aW5nIGNvbnZlbnRpb25zLCB3aGljaCBtYWtlcworICAgICAgICAjIHVudG9rZW5pemUgYSBsaXR0bGUgdHJpY2tpZXIuIE5vdGUgdGhhdCB0aGlzIHRlc3QgaW52b2x2ZXMgdHJhaWxpbmcKKyAgICAgICAgIyB3aGl0ZXNwYWNlIGFmdGVyIHRoZSBjb2xvbi4gTm90ZSB0aGF0IHdlIHVzZSBoZXggZXNjYXBlcyB0byBtYWtlIHRoZQorICAgICAgICAjIHR3byB0cmFpbGluZyBibGFua3MgYXBwYXJlbnQgaW4gdGhlIGV4cGVjdGVkIG91dHB1dC4KKworICAgICAgICBzZWxmLmNoZWNrX3JvdW5kdHJpcCgiaWYgeCA9PSAxIDogXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIHByaW50KHgpXG4iKQorICAgICAgICBmbiA9IHN1cHBvcnQuZmluZGZpbGUoInRva2VuaXplX3Rlc3RzLnR4dCIpCisgICAgICAgIHdpdGggb3BlbihmbiwgJ3JiJykgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfcm91bmR0cmlwKGYpCisgICAgICAgIHNlbGYuY2hlY2tfcm91bmR0cmlwKCJpZiB4ID09IDE6XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgIyBBIGNvbW1lbnQgYnkgaXRzZWxmLlxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIHByaW50KHgpICMgQ29tbWVudCBoZXJlLCB0b28uXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgIyBBbm90aGVyIGNvbW1lbnQuXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhZnRlcl9pZiA9IFRydWVcbiIpCisgICAgICAgIHNlbGYuY2hlY2tfcm91bmR0cmlwKCJpZiAoeCAjIFRoZSBjb21tZW50cyBuZWVkIHRvIGdvIGluIHRoZSByaWdodCBwbGFjZVxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgID09IDEpOlxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIHByaW50KCd4PT0xJylcbiIpCisgICAgICAgIHNlbGYuY2hlY2tfcm91bmR0cmlwKCJjbGFzcyBUZXN0OiAjIEEgY29tbWVudCBoZXJlXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICMgQSBjb21tZW50IHdpdGggd2VpcmQgaW5kZW50XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIGFmdGVyX2NvbSA9IDVcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgZGVmIHgobSk6IHJldHVybiBtKjUgIyBhIG9uZSBsaW5lclxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICBkZWYgeShtKTogIyBBIHdoaXRlc3BhY2UgYWZ0ZXIgdGhlIGNvbG9uXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgIHJldHVybiB5KjQgIyAzLXNwYWNlIGluZGVudFxuIikKKworICAgICAgICAjIFNvbWUgZXJyb3ItaGFuZGxpbmcgY29kZQorICAgICAgICBzZWxmLmNoZWNrX3JvdW5kdHJpcCgidHJ5OiBpbXBvcnQgc29tZW1vZHVsZVxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjZXB0IEltcG9ydEVycm9yOiAjIGNvbW1lbnRcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBwcmludCgnQ2FuIG5vdCBpbXBvcnQnICMgY29tbWVudDJcbikiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlbHNlOiAgIHByaW50KCdMb2FkZWQnKVxuIikKKworICAgIGRlZiB0ZXN0X2NvbnRpbnVhdGlvbihzZWxmKToKKyAgICAgICAgIyBCYWxhbmNpbmcgY29udGludWF0aW9uCisgICAgICAgIHNlbGYuY2hlY2tfcm91bmR0cmlwKCJhID0gKDMsNCwgXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI1LDYpXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ5ID0gWzMsIDQsXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI1XVxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAieiA9IHsnYSc6IDUsXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICInYic6MTUsICdjJzpUcnVlfVxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAieCA9IGxlbih5KSArIDUgLSBhW1xuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiM10gLSBhWzJdXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIrIGxlbih6KSAtIHpbXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICInYiddXG4iKQorCisgICAgZGVmIHRlc3RfYmFja3NsYXNoX2NvbnRpbnVhdGlvbihzZWxmKToKKyAgICAgICAgIyBCYWNrc2xhc2ggbWVhbnMgbGluZSBjb250aW51YXRpb24sIGV4Y2VwdCBmb3IgY29tbWVudHMKKyAgICAgICAgc2VsZi5jaGVja19yb3VuZHRyaXAoIng9MStcXFxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMVxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIyBUaGlzIGlzIGEgY29tbWVudFxcXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIjIFRoaXMgYWxzb1xuIikKKyAgICAgICAgc2VsZi5jaGVja19yb3VuZHRyaXAoIiMgQ29tbWVudCBcXFxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAieCA9IDAiKQorCisgICAgZGVmIHRlc3Rfc3RyaW5nX2NvbmNhdGVuYXRpb24oc2VsZik6CisgICAgICAgICMgVHdvIHN0cmluZyBsaXRlcmFscyBvbiB0aGUgc2FtZSBsaW5lCisgICAgICAgIHNlbGYuY2hlY2tfcm91bmR0cmlwKCInJyAnJyIpCisKKyAgICBkZWYgdGVzdF9yYW5kb21fZmlsZXMoc2VsZik6CisgICAgICAgICMgVGVzdCByb3VuZHRyaXAgb24gcmFuZG9tIHB5dGhvbiBtb2R1bGVzLgorICAgICAgICAjIHBhc3MgdGhlICctdWNwdScgb3B0aW9uIHRvIHByb2Nlc3MgdGhlIGZ1bGwgZGlyZWN0b3J5LgorCisgICAgICAgIGltcG9ydCBnbG9iLCByYW5kb20KKyAgICAgICAgZm4gPSBzdXBwb3J0LmZpbmRmaWxlKCJ0b2tlbml6ZV90ZXN0cy50eHQiKQorICAgICAgICB0ZW1wZGlyID0gb3MucGF0aC5kaXJuYW1lKGZuKSBvciBvcy5jdXJkaXIKKyAgICAgICAgdGVzdGZpbGVzID0gZ2xvYi5nbG9iKG9zLnBhdGguam9pbih0ZW1wZGlyLCAidGVzdCoucHkiKSkKKworICAgICAgICAjIFRva2VuaXplIGlzIGJyb2tlbiBvbiB0ZXN0X3BlcDMxMzEucHkgYmVjYXVzZSByZWd1bGFyIGV4cHJlc3Npb25zIGFyZQorICAgICAgICAjIGJyb2tlbiBvbiB0aGUgb2JzY3VyZSB1bmljb2RlIGlkZW50aWZpZXJzIGluIGl0LiAqc2lnaCoKKyAgICAgICAgIyBXaXRoIHJvdW5kdHJpcCBleHRlbmRlZCB0byB0ZXN0IHRoZSA1LXR1cGxlIG1vZGUgb2YgIHVudG9rZW5pemUsCisgICAgICAgICMgNyBtb3JlIHRlc3RmaWxlcyBmYWlsLiAgUmVtb3ZlIHRoZW0gYWxzbyB1bnRpbCB0aGUgZmFpbHVyZSBpcyBkaWFnbm9zZWQuCisKKyAgICAgICAgdGVzdGZpbGVzLnJlbW92ZShvcy5wYXRoLmpvaW4odGVtcGRpciwgInRlc3RfcGVwMzEzMS5weSIpKQorICAgICAgICBmb3IgZiBpbiAoJ2J1ZmZlcicsICdidWlsdGluJywgJ2ZpbGVpbycsICdpbnNwZWN0JywgJ29zJywgJ3BsYXRmb3JtJywgJ3N5cycpOgorICAgICAgICAgICAgdGVzdGZpbGVzLnJlbW92ZShvcy5wYXRoLmpvaW4odGVtcGRpciwgInRlc3RfJXMucHkiKSAlIGYpCisKKyAgICAgICAgaWYgbm90IHN1cHBvcnQuaXNfcmVzb3VyY2VfZW5hYmxlZCgiY3B1Iik6CisgICAgICAgICAgICB0ZXN0ZmlsZXMgPSByYW5kb20uc2FtcGxlKHRlc3RmaWxlcywgMTApCisKKyAgICAgICAgZm9yIHRlc3RmaWxlIGluIHRlc3RmaWxlczoKKyAgICAgICAgICAgIHdpdGggb3Blbih0ZXN0ZmlsZSwgJ3JiJykgYXMgZjoKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChmaWxlPXRlc3RmaWxlKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5jaGVja19yb3VuZHRyaXAoZikKKworCisgICAgZGVmIHJvdW5kdHJpcChzZWxmLCBjb2RlKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShjb2RlLCBzdHIpOgorICAgICAgICAgICAgY29kZSA9IGNvZGUuZW5jb2RlKCd1dGYtOCcpCisgICAgICAgIHJldHVybiB1bnRva2VuaXplKHRva2VuaXplKEJ5dGVzSU8oY29kZSkucmVhZGxpbmUpKS5kZWNvZGUoJ3V0Zi04JykKKworICAgIGRlZiB0ZXN0X2luZGVudGF0aW9uX3NlbWFudGljc19yZXRhaW5lZChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIEVuc3VyZSB0aGF0IGFsdGhvdWdoIHdoaXRlc3BhY2UgbWlnaHQgYmUgbXV0YXRlZCBpbiBhIHJvdW5kdHJpcCwKKyAgICAgICAgdGhlIHNlbWFudGljIG1lYW5pbmcgb2YgdGhlIGluZGVudGF0aW9uIHJlbWFpbnMgY29uc2lzdGVudC4KKyAgICAgICAgIiIiCisgICAgICAgIGNvZGUgPSAiaWYgRmFsc2U6XG5cdHg9M1xuXHR4PTNcbiIKKyAgICAgICAgY29kZWxpbmVzID0gc2VsZi5yb3VuZHRyaXAoY29kZSkuc3BsaXQoJ1xuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb2RlbGluZXNbMV0sIGNvZGVsaW5lc1syXSkKKyAgICAgICAgc2VsZi5jaGVja19yb3VuZHRyaXAoY29kZSkKKwogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3Rvb2xzL19faW5pdF9fLnB5IGIvTGliL3Rlc3QvdGVzdF90b29scy9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNGM4NzI2Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF90b29scy9fX2luaXRfXy5weQpAQCAtMCwwICsxLDI1IEBACisiIiJTdXBwb3J0IGZ1bmN0aW9ucyBmb3IgdGVzdGluZyBzY3JpcHRzIGluIHRoZSBUb29scyBkaXJlY3RvcnkuIiIiCitpbXBvcnQgb3MKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IGltcG9ydGxpYgorZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0Citmcm9tIGZubWF0Y2ggaW1wb3J0IGZubWF0Y2gKKworYmFzZXBhdGggPSBvcy5wYXRoLmRpcm5hbWUoICAgICAgICAgICAgICAgICAjIDxzcmMvaW5zdGFsbCBkaXI+CisgICAgICAgICAgICAgICAgb3MucGF0aC5kaXJuYW1lKCAgICAgICAgICAgICAgICAjIExpYgorICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmRpcm5hbWUoICAgICAgICAgICAgICAgICMgdGVzdAorICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSkpKSAgICAjIHRlc3RfdG9vbHMKKwordG9vbHNkaXIgPSBvcy5wYXRoLmpvaW4oYmFzZXBhdGgsICdUb29scycpCitzY3JpcHRzZGlyID0gb3MucGF0aC5qb2luKHRvb2xzZGlyLCAnc2NyaXB0cycpCisKK2RlZiBza2lwX2lmX21pc3NpbmcoKToKKyAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihzY3JpcHRzZGlyKToKKyAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoJ3NjcmlwdHMgZGlyZWN0b3J5IGNvdWxkIG5vdCBiZSBmb3VuZCcpCisKK2RlZiBpbXBvcnRfdG9vbCh0b29sbmFtZSk6CisgICAgd2l0aCBzdXBwb3J0LkRpcnNPblN5c1BhdGgoc2NyaXB0c2Rpcik6CisgICAgICAgIHJldHVybiBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZSh0b29sbmFtZSkKKworZGVmIGxvYWRfdGVzdHMoKmFyZ3MpOgorICAgIHJldHVybiBzdXBwb3J0LmxvYWRfcGFja2FnZV90ZXN0cyhvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAqYXJncykKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdG9vbHMvX19tYWluX18ucHkgYi9MaWIvdGVzdC90ZXN0X3Rvb2xzL19fbWFpbl9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2ZjEzZTUKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X3Rvb2xzL19fbWFpbl9fLnB5CkBAIC0wLDAgKzEsNCBAQAorZnJvbSB0ZXN0LnRlc3RfdG9vbHMgaW1wb3J0IGxvYWRfdGVzdHMKK2ltcG9ydCB1bml0dGVzdAorCit1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdG9vbHMvdGVzdF9ncHJvZjJodG1sLnB5IGIvTGliL3Rlc3QvdGVzdF90b29scy90ZXN0X2dwcm9mMmh0bWwucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ1YTJhOAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfdG9vbHMvdGVzdF9ncHJvZjJodG1sLnB5CkBAIC0wLDAgKzEsMzYgQEAKKyIiIlRlc3RzIGZvciB0aGUgZ3Byb2YyaHRtbCBzY3JpcHQgaW4gdGhlIFRvb2xzIGRpcmVjdG9yeS4iIiIKKworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgaW1wb3J0bGliCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdW5pdHRlc3QgaW1wb3J0IG1vY2sKK2ltcG9ydCB0ZW1wZmlsZQorCitmcm9tIHRlc3QudGVzdF90b29scyBpbXBvcnQgc2NyaXB0c2Rpciwgc2tpcF9pZl9taXNzaW5nLCBpbXBvcnRfdG9vbAorCitza2lwX2lmX21pc3NpbmcoKQorCitjbGFzcyBHcHJvZjJodG1sVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmdwcm9mID0gaW1wb3J0X3Rvb2woJ2dwcm9mMmh0bWwnKQorICAgICAgICBvbGRhcmd2ID0gc3lzLmFyZ3YKKyAgICAgICAgZGVmIGZpeHVwKCk6CisgICAgICAgICAgICBzeXMuYXJndiA9IG9sZGFyZ3YKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGZpeHVwKQorICAgICAgICBzeXMuYXJndiA9IFtdCisKKyAgICBkZWYgdGVzdF9ncHJvZihzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMTQ1MDg6IHRoaXMgdXNlZCB0byBmYWlsIHdpdGggYW4gTmFtZUVycm9yLgorICAgICAgICB3aXRoIG1vY2sucGF0Y2gub2JqZWN0KHNlbGYuZ3Byb2YsICd3ZWJicm93c2VyJykgYXMgd21vY2ssIFwKKyAgICAgICAgICAgICAgICB0ZW1wZmlsZS5UZW1wb3JhcnlEaXJlY3RvcnkoKSBhcyB0bXBkaXI6CisgICAgICAgICAgICBmbiA9IG9zLnBhdGguam9pbih0bXBkaXIsICdhYmMnKQorICAgICAgICAgICAgb3BlbihmbiwgJ3cnKS5jbG9zZSgpCisgICAgICAgICAgICBzeXMuYXJndiA9IFsnZ3Byb2YyaHRtbCcsIGZuXQorICAgICAgICAgICAgc2VsZi5ncHJvZi5tYWluKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdtb2NrLm9wZW4uY2FsbGVkKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3Rvb2xzL3Rlc3RfbWQ1c3VtLnB5IGIvTGliL3Rlc3QvdGVzdF90b29scy90ZXN0X21kNXN1bS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OWVhMTQ5Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF90b29scy90ZXN0X21kNXN1bS5weQpAQCAtMCwwICsxLDc3IEBACisiIiJUZXN0cyBmb3IgdGhlIG1kNXN1bSBzY3JpcHQgaW4gdGhlIFRvb2xzIGRpcmVjdG9yeS4iIiIKKworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAorZnJvbSB0ZXN0LnNjcmlwdF9oZWxwZXIgaW1wb3J0IGFzc2VydF9weXRob25fb2ssIGFzc2VydF9weXRob25fZmFpbHVyZQorCitmcm9tIHRlc3QudGVzdF90b29scyBpbXBvcnQgc2NyaXB0c2RpciwgaW1wb3J0X3Rvb2wsIHNraXBfaWZfbWlzc2luZworCitza2lwX2lmX21pc3NpbmcoKQorCitjbGFzcyBNRDVTdW1UZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3MoY2xzKToKKyAgICAgICAgY2xzLnNjcmlwdCA9IG9zLnBhdGguam9pbihzY3JpcHRzZGlyLCAnbWQ1c3VtLnB5JykKKyAgICAgICAgb3MubWtkaXIoc3VwcG9ydC5URVNURk4pCisgICAgICAgIGNscy5mb2RkZXIgPSBvcy5wYXRoLmpvaW4oc3VwcG9ydC5URVNURk4sICdtZDVzdW0uZm9kZGVyJykKKyAgICAgICAgd2l0aCBvcGVuKGNscy5mb2RkZXIsICd3YicpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKGInbWQ1c3VtXHJcbnRlc3QgZmlsZVxyXG4nKQorICAgICAgICBjbHMuZm9kZGVyX21kNSA9IGInZDM4ZGFlMmViMWFiMzQ2YTI5MmVmNjg1MGY5ZTFhMGQnCisgICAgICAgIGNscy5mb2RkZXJfdGV4dG1vZGVfbWQ1ID0gYidhOGIwNzg5NGUyY2EzZjJhNGMzMDk0MDY1ZmE2ZTBhNScKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiB0ZWFyRG93bkNsYXNzKGNscyk6CisgICAgICAgIHN1cHBvcnQucm10cmVlKHN1cHBvcnQuVEVTVEZOKQorCisgICAgZGVmIHRlc3Rfbm9hcmdzKHNlbGYpOgorICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKHNlbGYuc2NyaXB0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJjLCAwKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoCisgICAgICAgICAgICBvdXQuc3RhcnRzd2l0aChiJ2Q0MWQ4Y2Q5OGYwMGIyMDRlOTgwMDk5OGVjZjg0MjdlIDxzdGRpbj4nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShlcnIpCisKKyAgICBkZWYgdGVzdF9jaGVja3N1bV9mb2RkZXIoc2VsZik6CisgICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soc2VsZi5zY3JpcHQsIHNlbGYuZm9kZGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJjLCAwKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3V0LnN0YXJ0c3dpdGgoc2VsZi5mb2RkZXJfbWQ1KSkKKyAgICAgICAgZm9yIHBhcnQgaW4gc2VsZi5mb2RkZXIuc3BsaXQob3MucGF0aC5zZXApOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihwYXJ0LmVuY29kZSgpLCBvdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXJyKQorCisgICAgZGVmIHRlc3RfZGFzaF9sKHNlbGYpOgorICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKHNlbGYuc2NyaXB0LCAnLWwnLCBzZWxmLmZvZGRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYywgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihzZWxmLmZvZGRlcl9tZDUsIG91dCkKKyAgICAgICAgcGFydHMgPSBzZWxmLmZvZGRlci5zcGxpdChvcy5wYXRoLnNlcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihwYXJ0c1stMV0uZW5jb2RlKCksIG91dCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihwYXJ0c1stMl0uZW5jb2RlKCksIG91dCkKKworICAgIGRlZiB0ZXN0X2Rhc2hfdChzZWxmKToKKyAgICAgICAgcmMsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9vayhzZWxmLnNjcmlwdCwgJy10Jywgc2VsZi5mb2RkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmMsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvdXQuc3RhcnRzd2l0aChzZWxmLmZvZGRlcl90ZXh0bW9kZV9tZDUpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKHNlbGYuZm9kZGVyX21kNSwgb3V0KQorCisgICAgZGVmIHRlc3RfZGFzaF9zKHNlbGYpOgorICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKHNlbGYuc2NyaXB0LCAnLXMnLCAnNTEyJywgc2VsZi5mb2RkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmMsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oc2VsZi5mb2RkZXJfbWQ1LCBvdXQpCisKKyAgICBkZWYgdGVzdF9tdWx0aXBsZV9maWxlcyhzZWxmKToKKyAgICAgICAgcmMsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9vayhzZWxmLnNjcmlwdCwgc2VsZi5mb2RkZXIsIHNlbGYuZm9kZGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJjLCAwKQorICAgICAgICBsaW5lcyA9IG91dC5zcGxpdGxpbmVzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obGluZXMpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCpsaW5lcykKKworICAgIGRlZiB0ZXN0X3VzYWdlKHNlbGYpOgorICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX2ZhaWx1cmUoc2VsZi5zY3JpcHQsICctaCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmMsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LCBiJycpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihlcnIsIGInJykKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF90b29scy90ZXN0X3BkZXBzLnB5IGIvTGliL3Rlc3QvdGVzdF90b29scy90ZXN0X3BkZXBzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5MWZhNmEKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X3Rvb2xzL3Rlc3RfcGRlcHMucHkKQEAgLTAsMCArMSwzNCBAQAorIiIiVGVzdHMgZm9yIHRoZSBwZGVwcyBzY3JpcHQgaW4gdGhlIFRvb2xzIGRpcmVjdG9yeS4iIiIKKworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB0ZW1wZmlsZQorZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CisKK2Zyb20gdGVzdC50ZXN0X3Rvb2xzIGltcG9ydCBzY3JpcHRzZGlyLCBza2lwX2lmX21pc3NpbmcsIGltcG9ydF90b29sCisKK3NraXBfaWZfbWlzc2luZygpCisKKworY2xhc3MgUGRlcHNUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc2V0VXBDbGFzcyhzZWxmKToKKyAgICAgICAgc2VsZi5wZGVwcyA9IGltcG9ydF90b29sKCdwZGVwcycpCisKKyAgICBkZWYgdGVzdF9wcm9jZXNzX2Vycm9ycyhzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMTQ0OTI6IG1faW1wb3J0Lm1hdGNoKGxpbmUpIGNhbiBiZSBOb25lLgorICAgICAgICB3aXRoIHRlbXBmaWxlLlRlbXBvcmFyeURpcmVjdG9yeSgpIGFzIHRtcGRpcjoKKyAgICAgICAgICAgIGZuID0gb3MucGF0aC5qb2luKHRtcGRpciwgJ2ZvbycpCisgICAgICAgICAgICB3aXRoIG9wZW4oZm4sICd3JykgYXMgc3RyZWFtOgorICAgICAgICAgICAgICAgIHN0cmVhbS53cml0ZSgiIyEvdGhpcy93aWxsL2ZhaWwiKQorICAgICAgICAgICAgc2VsZi5wZGVwcy5wcm9jZXNzKGZuLCB7fSkKKworICAgIGRlZiB0ZXN0X2ludmVyc2VfYXR0cmlidXRlX2Vycm9yKHNlbGYpOgorICAgICAgICAjIElzc3VlICMxNDQ5MjogdGhpcyB1c2VkIHRvIGZhaWwgd2l0aCBhbiBBdHRyaWJ1dGVFcnJvci4KKyAgICAgICAgc2VsZi5wZGVwcy5pbnZlcnNlKHsnYSc6IFtdfSkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF90b29scy5weSBiL0xpYi90ZXN0L3Rlc3RfdG9vbHMvdGVzdF9waW5kZW50LnB5CnNpbWlsYXJpdHkgaW5kZXggNjUlCnJlbmFtZSBmcm9tIExpYi90ZXN0L3Rlc3RfdG9vbHMucHkKcmVuYW1lIHRvIExpYi90ZXN0L3Rlc3RfdG9vbHMvdGVzdF9waW5kZW50LnB5CmluZGV4IGY5NzE1MTUuLjE0YTBhYTIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdG9vbHMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF90b29scy90ZXN0X3BpbmRlbnQucHkKQEAgLTEsNDIgKzEsMTYgQEAKLSIiIlRlc3RzIGZvciBzY3JpcHRzIGluIHRoZSBUb29scyBkaXJlY3RvcnkuCi0KLVRoaXMgZmlsZSBjb250YWlucyByZWdyZXNzaW9uIHRlc3RzIGZvciBzb21lIG9mIHRoZSBzY3JpcHRzIGZvdW5kIGluIHRoZQotVG9vbHMgZGlyZWN0b3J5IG9mIGEgUHl0aG9uIGNoZWNrb3V0IG9yIHRhcmJhbGwsIHN1Y2ggYXMgcmVpbmRlbnQucHkuCi0iIiIKKyIiIlRlc3RzIGZvciB0aGUgcGluZGVudCBzY3JpcHQgaW4gdGhlIFRvb2xzIGRpcmVjdG9yeS4iIiIKIAogaW1wb3J0IG9zCiBpbXBvcnQgc3lzCi1pbXBvcnQgaW1wb3J0bGliLm1hY2hpbmVyeQogaW1wb3J0IHVuaXR0ZXN0Ci1mcm9tIHVuaXR0ZXN0IGltcG9ydCBtb2NrCi1pbXBvcnQgc2h1dGlsCiBpbXBvcnQgc3VicHJvY2VzcwotaW1wb3J0IHN5c2NvbmZpZwotaW1wb3J0IHRlbXBmaWxlCiBpbXBvcnQgdGV4dHdyYXAKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAotZnJvbSB0ZXN0LnNjcmlwdF9oZWxwZXIgaW1wb3J0IGFzc2VydF9weXRob25fb2ssIHRlbXBfZGlyCitmcm9tIHRlc3Quc2NyaXB0X2hlbHBlciBpbXBvcnQgYXNzZXJ0X3B5dGhvbl9vawogCi1pZiBub3Qgc3lzY29uZmlnLmlzX3B5dGhvbl9idWlsZCgpOgotICAgICMgWFhYIHNvbWUgaW5zdGFsbGVycyBkbyBjb250YWluIHRoZSB0b29scywgc2hvdWxkIHdlIGRldGVjdCB0aGF0Ci0gICAgIyBhbmQgcnVuIHRoZSB0ZXN0cyBpbiB0aGF0IGNhc2UgdG9vPwotICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCd0ZXN0IGlycmVsZXZhbnQgZm9yIGFuIGluc3RhbGxlZCBQeXRob24nKQorZnJvbSB0ZXN0LnRlc3RfdG9vbHMgaW1wb3J0IHNjcmlwdHNkaXIsIHNraXBfaWZfbWlzc2luZwogCi1iYXNlcGF0aCA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICdUb29scycpCi1zY3JpcHRzZGlyID0gb3MucGF0aC5qb2luKGJhc2VwYXRoLCAnc2NyaXB0cycpCi0KLQotY2xhc3MgUmVpbmRlbnRUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgc2NyaXB0ID0gb3MucGF0aC5qb2luKHNjcmlwdHNkaXIsICdyZWluZGVudC5weScpCi0KLSAgICBkZWYgdGVzdF9ub2FyZ3Moc2VsZik6Ci0gICAgICAgIGFzc2VydF9weXRob25fb2soc2VsZi5zY3JpcHQpCi0KLSAgICBkZWYgdGVzdF9oZWxwKHNlbGYpOgotICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKHNlbGYuc2NyaXB0LCAnLWgnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dCwgYicnKQotICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIoZXJyLCBiJycpCitza2lwX2lmX21pc3NpbmcoKQogCiAKIGNsYXNzIFBpbmRlbnRUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC02MCw3ICszNCw3IEBACiAKICAgICBkZWYgdGVzdF9zZWxmdGVzdChzZWxmKToKICAgICAgICAgc2VsZi5tYXhEaWZmID0gTm9uZQotICAgICAgICB3aXRoIHRlbXBfZGlyKCkgYXMgZGlyZWN0b3J5OgorICAgICAgICB3aXRoIHN1cHBvcnQudGVtcF9kaXIoKSBhcyBkaXJlY3Rvcnk6CiAgICAgICAgICAgICBkYXRhX3BhdGggPSBvcy5wYXRoLmpvaW4oZGlyZWN0b3J5LCAnX3Rlc3QucHknKQogICAgICAgICAgICAgd2l0aCBvcGVuKHNlbGYuc2NyaXB0KSBhcyBmOgogICAgICAgICAgICAgICAgIGNsb3NlZCA9IGYucmVhZCgpCkBAIC0zNjEsMTA0ICszMzUsNSBAQAogICAgICAgICBzZWxmLnBpbmRlbnRfdGVzdChjbGVhbiwgY2xvc2VkKQogCiAKLWNsYXNzIFRlc3RTdW5kcnlTY3JpcHRzKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAjIEF0IGxlYXN0IG1ha2Ugc3VyZSB0aGUgcmVzdCBkb24ndCBoYXZlIHN5bnRheCBlcnJvcnMuICBXaGVuIHRlc3RzIGFyZQotICAgICMgYWRkZWQgZm9yIGEgc2NyaXB0IGl0IHNob3VsZCBiZSBhZGRlZCB0byB0aGUgd2hpdGVsaXN0IGJlbG93LgotCi0gICAgIyBzY3JpcHRzIHRoYXQgaGF2ZSBpbmRlcGVuZGVudCB0ZXN0cy4KLSAgICB3aGl0ZWxpc3QgPSBbJ3JlaW5kZW50LnB5JywgJ3BkZXBzLnB5JywgJ2dwcm9mMmh0bWwnXQotICAgICMgc2NyaXB0cyB0aGF0IGNhbid0IGJlIGltcG9ydGVkIHdpdGhvdXQgcnVubmluZwotICAgIGJsYWNrbGlzdCA9IFsnbWFrZV9jdHlwZS5weSddCi0gICAgIyBzY3JpcHRzIHRoYXQgdXNlIHdpbmRvd3Mtb25seSBtb2R1bGVzCi0gICAgd2luZG93c19vbmx5ID0gWyd3aW5fYWRkMnBhdGgucHknXQotICAgICMgYmxhY2tsaXN0ZWQgZm9yIG90aGVyIHJlYXNvbnMKLSAgICBvdGhlciA9IFsnYW5hbHl6ZV9keHAucHknXQotCi0gICAgc2tpcGxpc3QgPSBibGFja2xpc3QgKyB3aGl0ZWxpc3QgKyB3aW5kb3dzX29ubHkgKyBvdGhlcgotCi0gICAgZGVmIHNldFVwKHNlbGYpOgotICAgICAgICBjbSA9IHN1cHBvcnQuRGlyc09uU3lzUGF0aChzY3JpcHRzZGlyKQotICAgICAgICBjbS5fX2VudGVyX18oKQotICAgICAgICBzZWxmLmFkZENsZWFudXAoY20uX19leGl0X18pCi0KLSAgICBkZWYgdGVzdF9zdW5kcnkoc2VsZik6Ci0gICAgICAgIGZvciBmbiBpbiBvcy5saXN0ZGlyKHNjcmlwdHNkaXIpOgotICAgICAgICAgICAgaWYgZm4uZW5kc3dpdGgoJy5weScpIGFuZCBmbiBub3QgaW4gc2VsZi5za2lwbGlzdDoKLSAgICAgICAgICAgICAgICBfX2ltcG9ydF9fKGZuWzotM10pCi0KLSAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5wbGF0Zm9ybSAhPSAid2luMzIiLCAiV2luZG93cy1vbmx5IHRlc3QiKQotICAgIGRlZiB0ZXN0X3N1bmRyeV93aW5kb3dzKHNlbGYpOgotICAgICAgICBmb3IgZm4gaW4gc2VsZi53aW5kb3dzX29ubHk6Ci0gICAgICAgICAgICBfX2ltcG9ydF9fKGZuWzotM10pCi0KLSAgICBAdW5pdHRlc3Quc2tpcElmKG5vdCBzdXBwb3J0LnRocmVhZGluZywgInRlc3QgcmVxdWlyZXMgX3RocmVhZCBtb2R1bGUiKQotICAgIGRlZiB0ZXN0X2FuYWx5emVfZHhwX2ltcG9ydChzZWxmKToKLSAgICAgICAgaWYgaGFzYXR0cihzeXMsICdnZXRkeHAnKToKLSAgICAgICAgICAgIGltcG9ydCBhbmFseXplX2R4cAotICAgICAgICBlbHNlOgotICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IpOgotICAgICAgICAgICAgICAgIGltcG9ydCBhbmFseXplX2R4cAotCi0KLWNsYXNzIFBkZXBzVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIHNldFVwQ2xhc3Moc2VsZik6Ci0gICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oc2NyaXB0c2RpciwgJ3BkZXBzLnB5JykKLSAgICAgICAgbG9hZGVyID0gaW1wb3J0bGliLm1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyKCdwZGVwcycsIHBhdGgpCi0gICAgICAgIHNlbGYucGRlcHMgPSBsb2FkZXIubG9hZF9tb2R1bGUoKQotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIHRlYXJEb3duQ2xhc3Moc2VsZik6Ci0gICAgICAgIGlmICdwZGVwcycgaW4gc3lzLm1vZHVsZXM6Ci0gICAgICAgICAgICBkZWwgc3lzLm1vZHVsZXNbJ3BkZXBzJ10KLQotICAgIGRlZiB0ZXN0X3Byb2Nlc3NfZXJyb3JzKHNlbGYpOgotICAgICAgICAjIElzc3VlICMxNDQ5MjogbV9pbXBvcnQubWF0Y2gobGluZSkgY2FuIGJlIE5vbmUuCi0gICAgICAgIHdpdGggdGVtcGZpbGUuVGVtcG9yYXJ5RGlyZWN0b3J5KCkgYXMgdG1wZGlyOgotICAgICAgICAgICAgZm4gPSBvcy5wYXRoLmpvaW4odG1wZGlyLCAnZm9vJykKLSAgICAgICAgICAgIHdpdGggb3BlbihmbiwgJ3cnKSBhcyBzdHJlYW06Ci0gICAgICAgICAgICAgICAgc3RyZWFtLndyaXRlKCIjIS90aGlzL3dpbGwvZmFpbCIpCi0gICAgICAgICAgICBzZWxmLnBkZXBzLnByb2Nlc3MoZm4sIHt9KQotCi0gICAgZGVmIHRlc3RfaW52ZXJzZV9hdHRyaWJ1dGVfZXJyb3Ioc2VsZik6Ci0gICAgICAgICMgSXNzdWUgIzE0NDkyOiB0aGlzIHVzZWQgdG8gZmFpbCB3aXRoIGFuIEF0dHJpYnV0ZUVycm9yLgotICAgICAgICBzZWxmLnBkZXBzLmludmVyc2UoeydhJzogW119KQotCi0KLWNsYXNzIEdwcm9mMmh0bWxUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oc2NyaXB0c2RpciwgJ2dwcm9mMmh0bWwucHknKQotICAgICAgICBsb2FkZXIgPSBpbXBvcnRsaWIubWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIoJ2dwcm9mMmh0bWwnLCBwYXRoKQotICAgICAgICBzZWxmLmdwcm9mID0gbG9hZGVyLmxvYWRfbW9kdWxlKCkKLSAgICAgICAgb2xkYXJndiA9IHN5cy5hcmd2Ci0gICAgICAgIGRlZiBmaXh1cCgpOgotICAgICAgICAgICAgc3lzLmFyZ3YgPSBvbGRhcmd2Ci0gICAgICAgIHNlbGYuYWRkQ2xlYW51cChmaXh1cCkKLSAgICAgICAgc3lzLmFyZ3YgPSBbXQotCi0gICAgZGVmIHRlc3RfZ3Byb2Yoc2VsZik6Ci0gICAgICAgICMgSXNzdWUgIzE0NTA4OiB0aGlzIHVzZWQgdG8gZmFpbCB3aXRoIGFuIE5hbWVFcnJvci4KLSAgICAgICAgd2l0aCBtb2NrLnBhdGNoLm9iamVjdChzZWxmLmdwcm9mLCAnd2ViYnJvd3NlcicpIGFzIHdtb2NrLCBcCi0gICAgICAgICAgICAgICAgdGVtcGZpbGUuVGVtcG9yYXJ5RGlyZWN0b3J5KCkgYXMgdG1wZGlyOgotICAgICAgICAgICAgZm4gPSBvcy5wYXRoLmpvaW4odG1wZGlyLCAnYWJjJykKLSAgICAgICAgICAgIG9wZW4oZm4sICd3JykuY2xvc2UoKQotICAgICAgICAgICAgc3lzLmFyZ3YgPSBbJ2dwcm9mMmh0bWwnLCBmbl0KLSAgICAgICAgICAgIHNlbGYuZ3Byb2YubWFpbigpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3bW9jay5vcGVuLmNhbGxlZCkKLQotCi0jIFJ1biB0aGUgdGVzdHMgaW4gVG9vbHMvcGFyc2VyL3Rlc3RfdW5wYXJzZS5weQotd2l0aCBzdXBwb3J0LkRpcnNPblN5c1BhdGgob3MucGF0aC5qb2luKGJhc2VwYXRoLCAncGFyc2VyJykpOgotICAgIGZyb20gdGVzdF91bnBhcnNlIGltcG9ydCBVbnBhcnNlVGVzdENhc2UKLSAgICBmcm9tIHRlc3RfdW5wYXJzZSBpbXBvcnQgRGlyZWN0b3J5VGVzdENhc2UKLQotCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoKltvYmogZm9yIG9iaiBpbiBnbG9iYWxzKCkudmFsdWVzKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG9iaiwgdHlwZSldKQotCi0KIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3Rvb2xzL3Rlc3RfcmVpbmRlbnQucHkgYi9MaWIvdGVzdC90ZXN0X3Rvb2xzL3Rlc3RfcmVpbmRlbnQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDVjZWJmNwotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfdG9vbHMvdGVzdF9yZWluZGVudC5weQpAQCAtMCwwICsxLDI4IEBACisiIiJUZXN0cyBmb3Igc2NyaXB0cyBpbiB0aGUgVG9vbHMgZGlyZWN0b3J5LgorCitUaGlzIGZpbGUgY29udGFpbnMgcmVncmVzc2lvbiB0ZXN0cyBmb3Igc29tZSBvZiB0aGUgc2NyaXB0cyBmb3VuZCBpbiB0aGUKK1Rvb2xzIGRpcmVjdG9yeSBvZiBhIFB5dGhvbiBjaGVja291dCBvciB0YXJiYWxsLCBzdWNoIGFzIHJlaW5kZW50LnB5LgorIiIiCisKK2ltcG9ydCBvcworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3Quc2NyaXB0X2hlbHBlciBpbXBvcnQgYXNzZXJ0X3B5dGhvbl9vaworCitmcm9tIHRlc3QudGVzdF90b29scyBpbXBvcnQgc2NyaXB0c2Rpciwgc2tpcF9pZl9taXNzaW5nCisKK3NraXBfaWZfbWlzc2luZygpCisKK2NsYXNzIFJlaW5kZW50VGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIHNjcmlwdCA9IG9zLnBhdGguam9pbihzY3JpcHRzZGlyLCAncmVpbmRlbnQucHknKQorCisgICAgZGVmIHRlc3Rfbm9hcmdzKHNlbGYpOgorICAgICAgICBhc3NlcnRfcHl0aG9uX29rKHNlbGYuc2NyaXB0KQorCisgICAgZGVmIHRlc3RfaGVscChzZWxmKToKKyAgICAgICAgcmMsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9vayhzZWxmLnNjcmlwdCwgJy1oJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQsIGInJykKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKGVyciwgYicnKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3Rvb2xzL3Rlc3Rfc3VuZHJ5LnB5IGIvTGliL3Rlc3QvdGVzdF90b29scy90ZXN0X3N1bmRyeS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWU1NDFiCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF90b29scy90ZXN0X3N1bmRyeS5weQpAQCAtMCwwICsxLDUzIEBACisiIiJUZXN0cyBmb3Igc2NyaXB0cyBpbiB0aGUgVG9vbHMgZGlyZWN0b3J5LgorCitUaGlzIGZpbGUgY29udGFpbnMgZXh0cmVtZWx5IGJhc2ljIHJlZ3Jlc3Npb24gdGVzdHMgZm9yIHRoZSBzY3JpcHRzIGZvdW5kIGluCit0aGUgVG9vbHMgZGlyZWN0b3J5IG9mIGEgUHl0aG9uIGNoZWNrb3V0IG9yIHRhcmJhbGwgd2hpY2ggZG9uJ3QgaGF2ZSBzZXBhcmF0ZQordGVzdHMgb2YgdGhlaXIgb3duLCBzdWNoIGFzIGgycHkucHkuCisiIiIKKworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAorCitmcm9tIHRlc3QudGVzdF90b29scyBpbXBvcnQgc2NyaXB0c2RpciwgaW1wb3J0X3Rvb2wsIHNraXBfaWZfbWlzc2luZworCitza2lwX2lmX21pc3NpbmcoKQorCitjbGFzcyBUZXN0U3VuZHJ5U2NyaXB0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIyBBdCBsZWFzdCBtYWtlIHN1cmUgdGhlIHJlc3QgZG9uJ3QgaGF2ZSBzeW50YXggZXJyb3JzLiAgV2hlbiB0ZXN0cyBhcmUKKyAgICAjIGFkZGVkIGZvciBhIHNjcmlwdCBpdCBzaG91bGQgYmUgYWRkZWQgdG8gdGhlIHdoaXRlbGlzdCBiZWxvdy4KKworICAgICMgc2NyaXB0cyB0aGF0IGhhdmUgaW5kZXBlbmRlbnQgdGVzdHMuCisgICAgd2hpdGVsaXN0ID0gWydyZWluZGVudCcsICdwZGVwcycsICdncHJvZjJodG1sJywgJ21kNXN1bSddCisgICAgIyBzY3JpcHRzIHRoYXQgY2FuJ3QgYmUgaW1wb3J0ZWQgd2l0aG91dCBydW5uaW5nCisgICAgYmxhY2tsaXN0ID0gWydtYWtlX2N0eXBlJ10KKyAgICAjIHNjcmlwdHMgdGhhdCB1c2Ugd2luZG93cy1vbmx5IG1vZHVsZXMKKyAgICB3aW5kb3dzX29ubHkgPSBbJ3dpbl9hZGQycGF0aCddCisgICAgIyBibGFja2xpc3RlZCBmb3Igb3RoZXIgcmVhc29ucworICAgIG90aGVyID0gWydhbmFseXplX2R4cCddCisKKyAgICBza2lwbGlzdCA9IGJsYWNrbGlzdCArIHdoaXRlbGlzdCArIHdpbmRvd3Nfb25seSArIG90aGVyCisKKyAgICBkZWYgdGVzdF9zdW5kcnkoc2VsZik6CisgICAgICAgIGZvciBmbiBpbiBvcy5saXN0ZGlyKHNjcmlwdHNkaXIpOgorICAgICAgICAgICAgbmFtZSA9IGZuWzotM10KKyAgICAgICAgICAgIGlmIGZuLmVuZHN3aXRoKCcucHknKSBhbmQgbmFtZSBub3QgaW4gc2VsZi5za2lwbGlzdDoKKyAgICAgICAgICAgICAgICBpbXBvcnRfdG9vbChuYW1lKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMucGxhdGZvcm0gIT0gIndpbjMyIiwgIldpbmRvd3Mtb25seSB0ZXN0IikKKyAgICBkZWYgdGVzdF9zdW5kcnlfd2luZG93cyhzZWxmKToKKyAgICAgICAgZm9yIG5hbWUgaW4gc2VsZi53aW5kb3dzX29ubHk6CisgICAgICAgICAgICBpbXBvcnRfdG9vbChuYW1lKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihub3Qgc3VwcG9ydC50aHJlYWRpbmcsICJ0ZXN0IHJlcXVpcmVzIF90aHJlYWQgbW9kdWxlIikKKyAgICBkZWYgdGVzdF9hbmFseXplX2R4cF9pbXBvcnQoc2VsZik6CisgICAgICAgIGlmIGhhc2F0dHIoc3lzLCAnZ2V0ZHhwJyk6CisgICAgICAgICAgICBpbXBvcnRfdG9vbCgnYW5hbHl6ZV9keHAnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IpOgorICAgICAgICAgICAgICAgIGltcG9ydF90b29sKCdhbmFseXplX2R4cCcpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL3BhcnNlci90ZXN0X3VucGFyc2UucHkgYi9MaWIvdGVzdC90ZXN0X3Rvb2xzL3Rlc3RfdW5wYXJzZS5weQpzaW1pbGFyaXR5IGluZGV4IDk0JQpyZW5hbWUgZnJvbSBUb29scy9wYXJzZXIvdGVzdF91bnBhcnNlLnB5CnJlbmFtZSB0byBMaWIvdGVzdC90ZXN0X3Rvb2xzL3Rlc3RfdW5wYXJzZS5weQppbmRleCBiZTg0NDAwLi45NzZhNmM1IDEwMDY0NAotLS0gYS9Ub29scy9wYXJzZXIvdGVzdF91bnBhcnNlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdG9vbHMvdGVzdF91bnBhcnNlLnB5CkBAIC0xLDEyICsxLDIyIEBACisiIiJUZXN0cyBmb3IgdGhlIHVucGFyc2UucHkgc2NyaXB0IGluIHRoZSBUb29scy9wYXJzZXIgZGlyZWN0b3J5LiIiIgorCiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCB0ZXN0LnN1cHBvcnQKIGltcG9ydCBpbwogaW1wb3J0IG9zCiBpbXBvcnQgcmFuZG9tCiBpbXBvcnQgdG9rZW5pemUKLWltcG9ydCB1bnBhcnNlCiBpbXBvcnQgYXN0CiAKK2Zyb20gdGVzdC50ZXN0X3Rvb2xzIGltcG9ydCBiYXNlcGF0aCwgdG9vbHNkaXIsIHNraXBfaWZfbWlzc2luZworCitza2lwX2lmX21pc3NpbmcoKQorCitwYXJzZXJfcGF0aCA9IG9zLnBhdGguam9pbih0b29sc2RpciwgInBhcnNlciIpCisKK3dpdGggdGVzdC5zdXBwb3J0LkRpcnNPblN5c1BhdGgocGFyc2VyX3BhdGgpOgorICAgIGltcG9ydCB1bnBhcnNlCisKIGRlZiByZWFkX3B5ZmlsZShmaWxlbmFtZSk6CiAgICAgIiIiUmVhZCBhbmQgcmV0dXJuIHRoZSBjb250ZW50cyBvZiBhIFB5dGhvbiBzb3VyY2UgZmlsZSAoYXMgYQogICAgIHN0cmluZyksIHRha2luZyBpbnRvIGFjY291bnQgdGhlIGZpbGUgZW5jb2RpbmcuIiIiCkBAIC0yNDksMTEgKzI1OSwxMCBAQAogCiAgICAgZGVmIHRlc3RfZmlsZXMoc2VsZik6CiAgICAgICAgICMgZ2V0IG5hbWVzIG9mIGZpbGVzIHRvIHRlc3QKLSAgICAgICAgZGlzdF9kaXIgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgb3MucGFyZGlyLCBvcy5wYXJkaXIpCiAKICAgICAgICAgbmFtZXMgPSBbXQogICAgICAgICBmb3IgZCBpbiBzZWxmLnRlc3RfZGlyZWN0b3JpZXM6Ci0gICAgICAgICAgICB0ZXN0X2RpciA9IG9zLnBhdGguam9pbihkaXN0X2RpciwgZCkKKyAgICAgICAgICAgIHRlc3RfZGlyID0gb3MucGF0aC5qb2luKGJhc2VwYXRoLCBkKQogICAgICAgICAgICAgZm9yIG4gaW4gb3MubGlzdGRpcih0ZXN0X2Rpcik6CiAgICAgICAgICAgICAgICAgaWYgbi5lbmRzd2l0aCgnLnB5JykgYW5kIG5vdCBuLnN0YXJ0c3dpdGgoJ2JhZCcpOgogICAgICAgICAgICAgICAgICAgICBuYW1lcy5hcHBlbmQob3MucGF0aC5qb2luKHRlc3RfZGlyLCBuKSkKQEAgLTI2OSw4ICsyNzgsNSBAQAogICAgICAgICAgICAgc2VsZi5jaGVja19yb3VuZHRyaXAoc291cmNlKQogCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICB0ZXN0LnN1cHBvcnQucnVuX3VuaXR0ZXN0KFVucGFyc2VUZXN0Q2FzZSwgRGlyZWN0b3J5VGVzdENhc2UpCi0KIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdHJhY2UucHkgYi9MaWIvdGVzdC90ZXN0X3RyYWNlLnB5CmluZGV4IDFjZWM3MTAuLmVlMzM5ODYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdHJhY2UucHkKKysrIGIvTGliL3Rlc3QvdGVzdF90cmFjZS5weQpAQCAtMSw4ICsxLDcgQEAKIGltcG9ydCBvcwogaW1wb3J0IGlvCiBpbXBvcnQgc3lzCi1mcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgKHJ1bl91bml0dGVzdCwgVEVTVEZOLCBybXRyZWUsIHVubGluaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXB0dXJlZF9zdGRvdXQpCitmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgVEVTVEZOLCBybXRyZWUsIHVubGluaywgY2FwdHVyZWRfc3Rkb3V0CiBpbXBvcnQgdW5pdHRlc3QKIAogaW1wb3J0IHRyYWNlCkBAIC0yOTcsNyArMjk2LDggQEAKICAgICAgICAgdW5saW5rKFRFU1RGTikKIAogICAgIGRlZiBfY292ZXJhZ2Uoc2VsZiwgdHJhY2VyLAotICAgICAgICAgICAgICAgICAgY21kPSdmcm9tIHRlc3QgaW1wb3J0IHRlc3RfcHByaW50OyB0ZXN0X3BwcmludC50ZXN0X21haW4oKScpOgorICAgICAgICAgICAgICAgICAgY21kPSdpbXBvcnQgdGVzdC5zdXBwb3J0LCB0ZXN0LnRlc3RfcHByaW50OycKKyAgICAgICAgICAgICAgICAgICAgICAndGVzdC5zdXBwb3J0LnJ1bl91bml0dGVzdCh0ZXN0LnRlc3RfcHByaW50LlF1ZXJ5VGVzdENhc2UpJyk6CiAgICAgICAgIHRyYWNlci5ydW4oY21kKQogICAgICAgICByID0gdHJhY2VyLnJlc3VsdHMoKQogICAgICAgICByLndyaXRlX3Jlc3VsdHMoc2hvd19taXNzaW5nPVRydWUsIHN1bW1hcnk9VHJ1ZSwgY292ZXJkaXI9VEVTVEZOKQpAQCAtNDA3LDkgKzQwNyw1IEBACiAgICAgICAgICAgICB0cmFjZS5maW5kX2V4ZWN1dGFibGVfbGluZW5vcyhmZC5uYW1lKQogCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBydW5fdW5pdHRlc3QoX19uYW1lX18pCi0KLQogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF90cmFjZWJhY2sucHkgYi9MaWIvdGVzdC90ZXN0X3RyYWNlYmFjay5weQppbmRleCBjMzhjNjViLi5kNmM5ZGYyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3RyYWNlYmFjay5weQorKysgYi9MaWIvdGVzdC90ZXN0X3RyYWNlYmFjay5weQpAQCAtMTcyLDMyICsxNzIsMTAxIEBACiAKIGNsYXNzIFRyYWNlYmFja0Zvcm1hdFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAorICAgIGRlZiBzb21lX2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgcmFpc2UgS2V5RXJyb3IoJ2JsYWgnKQorCiAgICAgQGNweXRob25fb25seQotICAgIGRlZiB0ZXN0X3RyYWNlYmFja19mb3JtYXQoc2VsZik6CisgICAgZGVmIGNoZWNrX3RyYWNlYmFja19mb3JtYXQoc2VsZiwgY2xlYW51cF9mdW5jPU5vbmUpOgogICAgICAgICBmcm9tIF90ZXN0Y2FwaSBpbXBvcnQgdHJhY2ViYWNrX3ByaW50CiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHJhaXNlIEtleUVycm9yKCdibGFoJykKKyAgICAgICAgICAgIHNlbGYuc29tZV9leGNlcHRpb24oKQogICAgICAgICBleGNlcHQgS2V5RXJyb3I6CiAgICAgICAgICAgICB0eXBlXywgdmFsdWUsIHRiID0gc3lzLmV4Y19pbmZvKCkKKyAgICAgICAgICAgIGlmIGNsZWFudXBfZnVuYyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAjIENsZWFyIHRoZSBpbm5lciBmcmFtZXMsIG5vdCB0aGlzIG9uZQorICAgICAgICAgICAgICAgIGNsZWFudXBfZnVuYyh0Yi50Yl9uZXh0KQogICAgICAgICAgICAgdHJhY2ViYWNrX2ZtdCA9ICdUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6XG4nICsgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICcnLmpvaW4odHJhY2ViYWNrLmZvcm1hdF90Yih0YikpCiAgICAgICAgICAgICBmaWxlXyA9IFN0cmluZ0lPKCkKICAgICAgICAgICAgIHRyYWNlYmFja19wcmludCh0YiwgZmlsZV8pCiAgICAgICAgICAgICBweXRob25fZm10ICA9IGZpbGVfLmdldHZhbHVlKCkKKyAgICAgICAgICAgICMgQ2FsbCBhbGwgX3RiIGFuZCBfZXhjIGZ1bmN0aW9ucworICAgICAgICAgICAgd2l0aCBjYXB0dXJlZF9vdXRwdXQoInN0ZGVyciIpIGFzIHRic3RkZXJyOgorICAgICAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF90Yih0YikKKyAgICAgICAgICAgIHRiZmlsZSA9IFN0cmluZ0lPKCkKKyAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF90Yih0YiwgZmlsZT10YmZpbGUpCisgICAgICAgICAgICB3aXRoIGNhcHR1cmVkX291dHB1dCgic3RkZXJyIikgYXMgZXhjc3RkZXJyOgorICAgICAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoKQorICAgICAgICAgICAgZXhjZm10ID0gdHJhY2ViYWNrLmZvcm1hdF9leGMoKQorICAgICAgICAgICAgZXhjZmlsZSA9IFN0cmluZ0lPKCkKKyAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoZmlsZT1leGNmaWxlKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmFpc2UgRXJyb3IoInVuYWJsZSB0byBjcmVhdGUgdGVzdCB0cmFjZWJhY2sgc3RyaW5nIikKIAogICAgICAgICAjIE1ha2Ugc3VyZSB0aGF0IFB5dGhvbiBhbmQgdGhlIHRyYWNlYmFjayBtb2R1bGUgZm9ybWF0IHRoZSBzYW1lIHRoaW5nCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJhY2ViYWNrX2ZtdCwgcHl0aG9uX2ZtdCkKKyAgICAgICAgIyBOb3cgdmVyaWZ5IHRoZSBfdGIgZnVuYyBvdXRwdXQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YnN0ZGVyci5nZXR2YWx1ZSgpLCB0YmZpbGUuZ2V0dmFsdWUoKSkKKyAgICAgICAgIyBOb3cgdmVyaWZ5IHRoZSBfZXhjIGZ1bmMgb3V0cHV0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhjc3RkZXJyLmdldHZhbHVlKCksIGV4Y2ZpbGUuZ2V0dmFsdWUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleGNmbXQsIGV4Y2ZpbGUuZ2V0dmFsdWUoKSkKIAogICAgICAgICAjIE1ha2Ugc3VyZSB0aGF0IHRoZSB0cmFjZWJhY2sgaXMgcHJvcGVybHkgaW5kZW50ZWQuCiAgICAgICAgIHRiX2xpbmVzID0gcHl0aG9uX2ZtdC5zcGxpdGxpbmVzKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odGJfbGluZXMpLCAzKQotICAgICAgICBiYW5uZXIsIGxvY2F0aW9uLCBzb3VyY2VfbGluZSA9IHRiX2xpbmVzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHRiX2xpbmVzKSwgNSkKKyAgICAgICAgYmFubmVyID0gdGJfbGluZXNbMF0KKyAgICAgICAgbG9jYXRpb24sIHNvdXJjZV9saW5lID0gdGJfbGluZXNbLTI6XQogICAgICAgICBzZWxmLmFzc2VydFRydWUoYmFubmVyLnN0YXJ0c3dpdGgoJ1RyYWNlYmFjaycpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUobG9jYXRpb24uc3RhcnRzd2l0aCgnICBGaWxlJykpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzb3VyY2VfbGluZS5zdGFydHN3aXRoKCcgICAgcmFpc2UnKSkKIAorICAgIGRlZiB0ZXN0X3RyYWNlYmFja19mb3JtYXQoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfdHJhY2ViYWNrX2Zvcm1hdCgpCisKKyAgICBkZWYgdGVzdF90cmFjZWJhY2tfZm9ybWF0X3dpdGhfY2xlYXJlZF9mcmFtZXMoc2VsZik6CisgICAgICAgICMgQ2hlY2sgdGhhdCB0cmFjZWJhY2sgZm9ybWF0dGluZyBhbHNvIHdvcmtzIHdpdGggYSBjbGVhcigpZWQgZnJhbWUKKyAgICAgICAgZGVmIGNsZWFudXBfdGIodGIpOgorICAgICAgICAgICAgdGIudGJfZnJhbWUuY2xlYXIoKQorICAgICAgICBzZWxmLmNoZWNrX3RyYWNlYmFja19mb3JtYXQoY2xlYW51cF90YikKKworICAgIGRlZiB0ZXN0X3N0YWNrX2Zvcm1hdChzZWxmKToKKyAgICAgICAgIyBWZXJpZnkgX3N0YWNrIGZ1bmN0aW9ucy4gTm90ZSB3ZSBoYXZlIHRvIHVzZSBfZ2V0ZnJhbWUoMSkgdG8KKyAgICAgICAgIyBjb21wYXJlIHRoZW0gd2l0aG91dCB0aGlzIGZyYW1lIGFwcGVhcmluZyBpbiB0aGUgb3V0cHV0CisgICAgICAgIHdpdGggY2FwdHVyZWRfb3V0cHV0KCJzdGRlcnIiKSBhcyBzdHN0ZGVycjoKKyAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF9zdGFjayhzeXMuX2dldGZyYW1lKDEpKQorICAgICAgICBzdGZpbGUgPSBTdHJpbmdJTygpCisgICAgICAgIHRyYWNlYmFjay5wcmludF9zdGFjayhzeXMuX2dldGZyYW1lKDEpLCBmaWxlPXN0ZmlsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHN0ZGVyci5nZXR2YWx1ZSgpLCBzdGZpbGUuZ2V0dmFsdWUoKSkKKworICAgICAgICBzdGZtdCA9IHRyYWNlYmFjay5mb3JtYXRfc3RhY2soc3lzLl9nZXRmcmFtZSgxKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0c3RkZXJyLmdldHZhbHVlKCksICIiLmpvaW4oc3RmbXQpKQorCisgICAgZGVmIHRlc3RfcHJpbnRfc3RhY2soc2VsZik6CisgICAgICAgIGRlZiBwcm4oKToKKyAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF9zdGFjaygpCisgICAgICAgIHdpdGggY2FwdHVyZWRfb3V0cHV0KCJzdGRlcnIiKSBhcyBzdGRlcnI6CisgICAgICAgICAgICBwcm4oKQorICAgICAgICBsaW5lbm8gPSBwcm4uX19jb2RlX18uY29fZmlyc3RsaW5lbm8KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRlcnIuZ2V0dmFsdWUoKS5zcGxpdGxpbmVzKClbLTQ6XSwgWworICAgICAgICAgICAgJyAgRmlsZSAiJXMiLCBsaW5lICVkLCBpbiB0ZXN0X3ByaW50X3N0YWNrJyAlIChfX2ZpbGVfXywgbGluZW5vKzMpLAorICAgICAgICAgICAgJyAgICBwcm4oKScsCisgICAgICAgICAgICAnICBGaWxlICIlcyIsIGxpbmUgJWQsIGluIHBybicgJSAoX19maWxlX18sIGxpbmVubysxKSwKKyAgICAgICAgICAgICcgICAgdHJhY2ViYWNrLnByaW50X3N0YWNrKCknLAorICAgICAgICBdKQorCisgICAgZGVmIHRlc3RfZm9ybWF0X3N0YWNrKHNlbGYpOgorICAgICAgICBkZWYgZm10KCk6CisgICAgICAgICAgICByZXR1cm4gdHJhY2ViYWNrLmZvcm1hdF9zdGFjaygpCisgICAgICAgIHJlc3VsdCA9IGZtdCgpCisgICAgICAgIGxpbmVubyA9IGZtdC5fX2NvZGVfXy5jb19maXJzdGxpbmVubworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdFstMjpdLCBbCisgICAgICAgICAgICAnICBGaWxlICIlcyIsIGxpbmUgJWQsIGluIHRlc3RfZm9ybWF0X3N0YWNrXG4nCisgICAgICAgICAgICAnICAgIHJlc3VsdCA9IGZtdCgpXG4nICUgKF9fZmlsZV9fLCBsaW5lbm8rMiksCisgICAgICAgICAgICAnICBGaWxlICIlcyIsIGxpbmUgJWQsIGluIGZtdFxuJworICAgICAgICAgICAgJyAgICByZXR1cm4gdHJhY2ViYWNrLmZvcm1hdF9zdGFjaygpXG4nICUgKF9fZmlsZV9fLCBsaW5lbm8rMSksCisgICAgICAgIF0pCisKIAogY2F1c2VfbWVzc2FnZSA9ICgKICAgICAiXG5UaGUgYWJvdmUgZXhjZXB0aW9uIHdhcyB0aGUgZGlyZWN0IGNhdXNlICIKQEAgLTM3MCw2ICs0MzksNDYgQEAKICAgICAgICAgcmV0dXJuIHMuZ2V0dmFsdWUoKQogCiAKK2NsYXNzIE1pc2NUcmFjZWJhY2tDYXNlcyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIworICAgICMgQ2hlY2sgbm9uLXByaW50aW5nIGZ1bmN0aW9ucyBpbiB0cmFjZWJhY2sgbW9kdWxlCisgICAgIworCisgICAgZGVmIHRlc3RfY2xlYXIoc2VsZik6CisgICAgICAgIGRlZiBvdXRlcigpOgorICAgICAgICAgICAgbWlkZGxlKCkKKyAgICAgICAgZGVmIG1pZGRsZSgpOgorICAgICAgICAgICAgaW5uZXIoKQorICAgICAgICBkZWYgaW5uZXIoKToKKyAgICAgICAgICAgIGkgPSAxCisgICAgICAgICAgICAxLzAKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBvdXRlcigpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHR5cGVfLCB2YWx1ZSwgdGIgPSBzeXMuZXhjX2luZm8oKQorCisgICAgICAgICMgSW5pdGlhbCBhc3NlcnRpb246IHRoZXJlJ3Mgb25lIGxvY2FsIGluIHRoZSBpbm5lciBmcmFtZS4KKyAgICAgICAgaW5uZXJfZnJhbWUgPSB0Yi50Yl9uZXh0LnRiX25leHQudGJfbmV4dC50Yl9mcmFtZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihpbm5lcl9mcmFtZS5mX2xvY2FscyksIDEpCisKKyAgICAgICAgIyBDbGVhciB0cmFjZWJhY2sgZnJhbWVzCisgICAgICAgIHRyYWNlYmFjay5jbGVhcl9mcmFtZXModGIpCisKKyAgICAgICAgIyBMb2NhbCB2YXJpYWJsZSBkaWN0IHNob3VsZCBub3cgYmUgZW1wdHkuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGlubmVyX2ZyYW1lLmZfbG9jYWxzKSwgMCkKKworICAgIGRlZiB0ZXN0X2V4dHJhY3Rfc3RhY2soc2VsZik6CisgICAgICAgIGRlZiBleHRyYWN0KCk6CisgICAgICAgICAgICByZXR1cm4gdHJhY2ViYWNrLmV4dHJhY3Rfc3RhY2soKQorICAgICAgICByZXN1bHQgPSBleHRyYWN0KCkKKyAgICAgICAgbGluZW5vID0gZXh0cmFjdC5fX2NvZGVfXy5jb19maXJzdGxpbmVubworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdFstMjpdLCBbCisgICAgICAgICAgICAoX19maWxlX18sIGxpbmVubysyLCAndGVzdF9leHRyYWN0X3N0YWNrJywgJ3Jlc3VsdCA9IGV4dHJhY3QoKScpLAorICAgICAgICAgICAgKF9fZmlsZV9fLCBsaW5lbm8rMSwgJ2V4dHJhY3QnLCAncmV0dXJuIHRyYWNlYmFjay5leHRyYWN0X3N0YWNrKCknKSwKKyAgICAgICAgXSkKKworCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgcnVuX3VuaXR0ZXN0KF9fbmFtZV9fKQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3RyYWNlbWFsbG9jLnB5IGIvTGliL3Rlc3QvdGVzdF90cmFjZW1hbGxvYy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OGNjYWIyCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF90cmFjZW1hbGxvYy5weQpAQCAtMCwwICsxLDgzMCBAQAoraW1wb3J0IGNvbnRleHRsaWIKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IHRyYWNlbWFsbG9jCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdW5pdHRlc3QubW9jayBpbXBvcnQgcGF0Y2gKK2Zyb20gdGVzdC5zY3JpcHRfaGVscGVyIGltcG9ydCBhc3NlcnRfcHl0aG9uX29rLCBhc3NlcnRfcHl0aG9uX2ZhaWx1cmUKK2Zyb20gdGVzdCBpbXBvcnQgc2NyaXB0X2hlbHBlciwgc3VwcG9ydAordHJ5OgorICAgIGltcG9ydCB0aHJlYWRpbmcKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICB0aHJlYWRpbmcgPSBOb25lCisKK0VNUFRZX1NUUklOR19TSVpFID0gc3lzLmdldHNpemVvZihiJycpCisKK2RlZiBnZXRfZnJhbWVzKG5mcmFtZSwgbGluZW5vX2RlbHRhKToKKyAgICBmcmFtZXMgPSBbXQorICAgIGZyYW1lID0gc3lzLl9nZXRmcmFtZSgxKQorICAgIGZvciBpbmRleCBpbiByYW5nZShuZnJhbWUpOgorICAgICAgICBjb2RlID0gZnJhbWUuZl9jb2RlCisgICAgICAgIGxpbmVubyA9IGZyYW1lLmZfbGluZW5vICsgbGluZW5vX2RlbHRhCisgICAgICAgIGZyYW1lcy5hcHBlbmQoKGNvZGUuY29fZmlsZW5hbWUsIGxpbmVubykpCisgICAgICAgIGxpbmVub19kZWx0YSA9IDAKKyAgICAgICAgZnJhbWUgPSBmcmFtZS5mX2JhY2sKKyAgICAgICAgaWYgZnJhbWUgaXMgTm9uZToKKyAgICAgICAgICAgIGJyZWFrCisgICAgcmV0dXJuIHR1cGxlKGZyYW1lcykKKworZGVmIGFsbG9jYXRlX2J5dGVzKHNpemUpOgorICAgIG5mcmFtZSA9IHRyYWNlbWFsbG9jLmdldF90cmFjZWJhY2tfbGltaXQoKQorICAgIGJ5dGVzX2xlbiA9IChzaXplIC0gRU1QVFlfU1RSSU5HX1NJWkUpCisgICAgZnJhbWVzID0gZ2V0X2ZyYW1lcyhuZnJhbWUsIDEpCisgICAgZGF0YSA9IGIneCcgKiBieXRlc19sZW4KKyAgICByZXR1cm4gZGF0YSwgdHJhY2VtYWxsb2MuVHJhY2ViYWNrKGZyYW1lcykKKworZGVmIGNyZWF0ZV9zbmFwc2hvdHMoKToKKyAgICB0cmFjZWJhY2tfbGltaXQgPSAyCisKKyAgICByYXdfdHJhY2VzID0gWworICAgICAgICAoMTAsICgoJ2EucHknLCAyKSwgKCdiLnB5JywgNCkpKSwKKyAgICAgICAgKDEwLCAoKCdhLnB5JywgMiksICgnYi5weScsIDQpKSksCisgICAgICAgICgxMCwgKCgnYS5weScsIDIpLCAoJ2IucHknLCA0KSkpLAorCisgICAgICAgICgyLCAoKCdhLnB5JywgNSksICgnYi5weScsIDQpKSksCisKKyAgICAgICAgKDY2LCAoKCdiLnB5JywgMSksKSksCisKKyAgICAgICAgKDcsICgoJzx1bmtub3duPicsIDApLCkpLAorICAgIF0KKyAgICBzbmFwc2hvdCA9IHRyYWNlbWFsbG9jLlNuYXBzaG90KHJhd190cmFjZXMsIHRyYWNlYmFja19saW1pdCkKKworICAgIHJhd190cmFjZXMyID0gWworICAgICAgICAoMTAsICgoJ2EucHknLCAyKSwgKCdiLnB5JywgNCkpKSwKKyAgICAgICAgKDEwLCAoKCdhLnB5JywgMiksICgnYi5weScsIDQpKSksCisgICAgICAgICgxMCwgKCgnYS5weScsIDIpLCAoJ2IucHknLCA0KSkpLAorCisgICAgICAgICgyLCAoKCdhLnB5JywgNSksICgnYi5weScsIDQpKSksCisgICAgICAgICg1MDAwLCAoKCdhLnB5JywgNSksICgnYi5weScsIDQpKSksCisKKyAgICAgICAgKDQwMCwgKCgnYy5weScsIDU3OCksKSksCisgICAgXQorICAgIHNuYXBzaG90MiA9IHRyYWNlbWFsbG9jLlNuYXBzaG90KHJhd190cmFjZXMyLCB0cmFjZWJhY2tfbGltaXQpCisKKyAgICByZXR1cm4gKHNuYXBzaG90LCBzbmFwc2hvdDIpCisKK2RlZiBmcmFtZShmaWxlbmFtZSwgbGluZW5vKToKKyAgICByZXR1cm4gdHJhY2VtYWxsb2MuX0ZyYW1lKChmaWxlbmFtZSwgbGluZW5vKSkKKworZGVmIHRyYWNlYmFjaygqZnJhbWVzKToKKyAgICByZXR1cm4gdHJhY2VtYWxsb2MuVHJhY2ViYWNrKGZyYW1lcykKKworZGVmIHRyYWNlYmFja19saW5lbm8oZmlsZW5hbWUsIGxpbmVubyk6CisgICAgcmV0dXJuIHRyYWNlYmFjaygoZmlsZW5hbWUsIGxpbmVubykpCisKK2RlZiB0cmFjZWJhY2tfZmlsZW5hbWUoZmlsZW5hbWUpOgorICAgIHJldHVybiB0cmFjZWJhY2tfbGluZW5vKGZpbGVuYW1lLCAwKQorCisKK2NsYXNzIFRlc3RUcmFjZW1hbGxvY0VuYWJsZWQodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgaWYgdHJhY2VtYWxsb2MuaXNfdHJhY2luZygpOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgidHJhY2VtYWxsb2MgbXVzdCBiZSBzdG9wcGVkIGJlZm9yZSB0aGUgdGVzdCIpCisKKyAgICAgICAgdHJhY2VtYWxsb2Muc3RhcnQoMSkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgdHJhY2VtYWxsb2Muc3RvcCgpCisKKyAgICBkZWYgdGVzdF9nZXRfdHJhY2VtYWxsb2NfbWVtb3J5KHNlbGYpOgorICAgICAgICBkYXRhID0gW2FsbG9jYXRlX2J5dGVzKDEyMykgZm9yIGNvdW50IGluIHJhbmdlKDEwMDApXQorICAgICAgICBzaXplID0gdHJhY2VtYWxsb2MuZ2V0X3RyYWNlbWFsbG9jX21lbW9yeSgpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKHNpemUsIDApCisKKyAgICAgICAgdHJhY2VtYWxsb2MuY2xlYXJfdHJhY2VzKCkKKyAgICAgICAgc2l6ZTIgPSB0cmFjZW1hbGxvYy5nZXRfdHJhY2VtYWxsb2NfbWVtb3J5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoc2l6ZTIsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKHNpemUyLCBzaXplKQorCisgICAgZGVmIHRlc3RfZ2V0X29iamVjdF90cmFjZWJhY2soc2VsZik6CisgICAgICAgIHRyYWNlbWFsbG9jLmNsZWFyX3RyYWNlcygpCisgICAgICAgIG9ial9zaXplID0gMTIzNDUKKyAgICAgICAgb2JqLCBvYmpfdHJhY2ViYWNrID0gYWxsb2NhdGVfYnl0ZXMob2JqX3NpemUpCisgICAgICAgIHRyYWNlYmFjayA9IHRyYWNlbWFsbG9jLmdldF9vYmplY3RfdHJhY2ViYWNrKG9iaikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmFjZWJhY2ssIG9ial90cmFjZWJhY2spCisKKyAgICBkZWYgdGVzdF9zZXRfdHJhY2ViYWNrX2xpbWl0KHNlbGYpOgorICAgICAgICBvYmpfc2l6ZSA9IDEwCisKKyAgICAgICAgdHJhY2VtYWxsb2Muc3RvcCgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHRyYWNlbWFsbG9jLnN0YXJ0LCAtMSkKKworICAgICAgICB0cmFjZW1hbGxvYy5zdG9wKCkKKyAgICAgICAgdHJhY2VtYWxsb2Muc3RhcnQoMTApCisgICAgICAgIG9iajIsIG9iajJfdHJhY2ViYWNrID0gYWxsb2NhdGVfYnl0ZXMob2JqX3NpemUpCisgICAgICAgIHRyYWNlYmFjayA9IHRyYWNlbWFsbG9jLmdldF9vYmplY3RfdHJhY2ViYWNrKG9iajIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHRyYWNlYmFjayksIDEwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyYWNlYmFjaywgb2JqMl90cmFjZWJhY2spCisKKyAgICAgICAgdHJhY2VtYWxsb2Muc3RvcCgpCisgICAgICAgIHRyYWNlbWFsbG9jLnN0YXJ0KDEpCisgICAgICAgIG9iaiwgb2JqX3RyYWNlYmFjayA9IGFsbG9jYXRlX2J5dGVzKG9ial9zaXplKQorICAgICAgICB0cmFjZWJhY2sgPSB0cmFjZW1hbGxvYy5nZXRfb2JqZWN0X3RyYWNlYmFjayhvYmopCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHRyYWNlYmFjayksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJhY2ViYWNrLCBvYmpfdHJhY2ViYWNrKQorCisgICAgZGVmIGZpbmRfdHJhY2Uoc2VsZiwgdHJhY2VzLCB0cmFjZWJhY2spOgorICAgICAgICBmb3IgdHJhY2UgaW4gdHJhY2VzOgorICAgICAgICAgICAgaWYgdHJhY2VbMV0gPT0gdHJhY2ViYWNrLl9mcmFtZXM6CisgICAgICAgICAgICAgICAgcmV0dXJuIHRyYWNlCisKKyAgICAgICAgc2VsZi5mYWlsKCJ0cmFjZSBub3QgZm91bmQiKQorCisgICAgZGVmIHRlc3RfZ2V0X3RyYWNlcyhzZWxmKToKKyAgICAgICAgdHJhY2VtYWxsb2MuY2xlYXJfdHJhY2VzKCkKKyAgICAgICAgb2JqX3NpemUgPSAxMjM0NQorICAgICAgICBvYmosIG9ial90cmFjZWJhY2sgPSBhbGxvY2F0ZV9ieXRlcyhvYmpfc2l6ZSkKKworICAgICAgICB0cmFjZXMgPSB0cmFjZW1hbGxvYy5fZ2V0X3RyYWNlcygpCisgICAgICAgIHRyYWNlID0gc2VsZi5maW5kX3RyYWNlKHRyYWNlcywgb2JqX3RyYWNlYmFjaykKKworICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodHJhY2UsIHR1cGxlKQorICAgICAgICBzaXplLCB0cmFjZWJhY2sgPSB0cmFjZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpemUsIG9ial9zaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyYWNlYmFjaywgb2JqX3RyYWNlYmFjay5fZnJhbWVzKQorCisgICAgICAgIHRyYWNlbWFsbG9jLnN0b3AoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyYWNlbWFsbG9jLl9nZXRfdHJhY2VzKCksIFtdKQorCisgICAgZGVmIHRlc3RfZ2V0X3RyYWNlc19pbnRlcm5fdHJhY2ViYWNrKHNlbGYpOgorICAgICAgICAjIGR1bW15IHdyYXBwZXJzIHRvIGdldCBtb3JlIHVzZWZ1bCBhbmQgaWRlbnRpY2FsIGZyYW1lcyBpbiB0aGUgdHJhY2ViYWNrCisgICAgICAgIGRlZiBhbGxvY2F0ZV9ieXRlczIoc2l6ZSk6CisgICAgICAgICAgICByZXR1cm4gYWxsb2NhdGVfYnl0ZXMoc2l6ZSkKKyAgICAgICAgZGVmIGFsbG9jYXRlX2J5dGVzMyhzaXplKToKKyAgICAgICAgICAgIHJldHVybiBhbGxvY2F0ZV9ieXRlczIoc2l6ZSkKKyAgICAgICAgZGVmIGFsbG9jYXRlX2J5dGVzNChzaXplKToKKyAgICAgICAgICAgIHJldHVybiBhbGxvY2F0ZV9ieXRlczMoc2l6ZSkKKworICAgICAgICAjIEVuc3VyZSB0aGF0IHR3byBpZGVudGljYWwgdHJhY2ViYWNrcyBhcmUgbm90IGR1cGxpY2F0ZWQKKyAgICAgICAgdHJhY2VtYWxsb2Muc3RvcCgpCisgICAgICAgIHRyYWNlbWFsbG9jLnN0YXJ0KDQpCisgICAgICAgIG9ial9zaXplID0gMTIzCisgICAgICAgIG9iajEsIG9iajFfdHJhY2ViYWNrID0gYWxsb2NhdGVfYnl0ZXM0KG9ial9zaXplKQorICAgICAgICBvYmoyLCBvYmoyX3RyYWNlYmFjayA9IGFsbG9jYXRlX2J5dGVzNChvYmpfc2l6ZSkKKworICAgICAgICB0cmFjZXMgPSB0cmFjZW1hbGxvYy5fZ2V0X3RyYWNlcygpCisKKyAgICAgICAgdHJhY2UxID0gc2VsZi5maW5kX3RyYWNlKHRyYWNlcywgb2JqMV90cmFjZWJhY2spCisgICAgICAgIHRyYWNlMiA9IHNlbGYuZmluZF90cmFjZSh0cmFjZXMsIG9iajJfdHJhY2ViYWNrKQorICAgICAgICBzaXplMSwgdHJhY2ViYWNrMSA9IHRyYWNlMQorICAgICAgICBzaXplMiwgdHJhY2ViYWNrMiA9IHRyYWNlMgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyYWNlYmFjazIsIHRyYWNlYmFjazEpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModHJhY2ViYWNrMiwgdHJhY2ViYWNrMSkKKworICAgIGRlZiB0ZXN0X2dldF90cmFjZWRfbWVtb3J5KHNlbGYpOgorICAgICAgICAjIFB5dGhvbiBhbGxvY2F0ZXMgc29tZSBpbnRlcm5hbHMgb2JqZWN0cywgc28gdGhlIHRlc3QgbXVzdCB0b2xlcmF0ZQorICAgICAgICAjIGEgc21hbGwgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBleHBlY3RlZCBzaXplIGFuZCB0aGUgcmVhbCB1c2FnZQorICAgICAgICBtYXhfZXJyb3IgPSAyMDQ4CisKKyAgICAgICAgIyBhbGxvY2F0ZSBvbmUgb2JqZWN0CisgICAgICAgIG9ial9zaXplID0gMTAyNCAqIDEwMjQKKyAgICAgICAgdHJhY2VtYWxsb2MuY2xlYXJfdHJhY2VzKCkKKyAgICAgICAgb2JqLCBvYmpfdHJhY2ViYWNrID0gYWxsb2NhdGVfYnl0ZXMob2JqX3NpemUpCisgICAgICAgIHNpemUsIHBlYWtfc2l6ZSA9IHRyYWNlbWFsbG9jLmdldF90cmFjZWRfbWVtb3J5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoc2l6ZSwgb2JqX3NpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKHBlYWtfc2l6ZSwgc2l6ZSkKKworICAgICAgICBzZWxmLmFzc2VydExlc3NFcXVhbChzaXplIC0gb2JqX3NpemUsIG1heF9lcnJvcikKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwocGVha19zaXplIC0gc2l6ZSwgbWF4X2Vycm9yKQorCisgICAgICAgICMgZGVzdHJveSB0aGUgb2JqZWN0CisgICAgICAgIG9iaiA9IE5vbmUKKyAgICAgICAgc2l6ZTIsIHBlYWtfc2l6ZTIgPSB0cmFjZW1hbGxvYy5nZXRfdHJhY2VkX21lbW9yeSgpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzcyhzaXplMiwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoc2l6ZSAtIHNpemUyLCBvYmpfc2l6ZSAtIG1heF9lcnJvcikKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwocGVha19zaXplMiwgcGVha19zaXplKQorCisgICAgICAgICMgY2xlYXJfdHJhY2VzKCkgbXVzdCByZXNldCB0cmFjZWQgbWVtb3J5IGNvdW50ZXJzCisgICAgICAgIHRyYWNlbWFsbG9jLmNsZWFyX3RyYWNlcygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJhY2VtYWxsb2MuZ2V0X3RyYWNlZF9tZW1vcnkoKSwgKDAsIDApKQorCisgICAgICAgICMgYWxsb2NhdGUgYW5vdGhlciBvYmplY3QKKyAgICAgICAgb2JqLCBvYmpfdHJhY2ViYWNrID0gYWxsb2NhdGVfYnl0ZXMob2JqX3NpemUpCisgICAgICAgIHNpemUsIHBlYWtfc2l6ZSA9IHRyYWNlbWFsbG9jLmdldF90cmFjZWRfbWVtb3J5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoc2l6ZSwgb2JqX3NpemUpCisKKyAgICAgICAgIyBzdG9wKCkgYWxzbyByZXNldHMgdHJhY2VkIG1lbW9yeSBjb3VudGVycworICAgICAgICB0cmFjZW1hbGxvYy5zdG9wKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmFjZW1hbGxvYy5nZXRfdHJhY2VkX21lbW9yeSgpLCAoMCwgMCkpCisKKyAgICBkZWYgdGVzdF9jbGVhcl90cmFjZXMoc2VsZik6CisgICAgICAgIG9iaiwgb2JqX3RyYWNlYmFjayA9IGFsbG9jYXRlX2J5dGVzKDEyMykKKyAgICAgICAgdHJhY2ViYWNrID0gdHJhY2VtYWxsb2MuZ2V0X29iamVjdF90cmFjZWJhY2sob2JqKQorICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZSh0cmFjZWJhY2spCisKKyAgICAgICAgdHJhY2VtYWxsb2MuY2xlYXJfdHJhY2VzKCkKKyAgICAgICAgdHJhY2ViYWNrMiA9IHRyYWNlbWFsbG9jLmdldF9vYmplY3RfdHJhY2ViYWNrKG9iaikKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodHJhY2ViYWNrMikKKworICAgIGRlZiB0ZXN0X2lzX3RyYWNpbmcoc2VsZik6CisgICAgICAgIHRyYWNlbWFsbG9jLnN0b3AoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRyYWNlbWFsbG9jLmlzX3RyYWNpbmcoKSkKKworICAgICAgICB0cmFjZW1hbGxvYy5zdGFydCgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0cmFjZW1hbGxvYy5pc190cmFjaW5nKCkpCisKKyAgICBkZWYgdGVzdF9zbmFwc2hvdChzZWxmKToKKyAgICAgICAgb2JqLCBzb3VyY2UgPSBhbGxvY2F0ZV9ieXRlcygxMjMpCisKKyAgICAgICAgIyB0YWtlIGEgc25hcHNob3QKKyAgICAgICAgc25hcHNob3QgPSB0cmFjZW1hbGxvYy50YWtlX3NuYXBzaG90KCkKKworICAgICAgICAjIHdyaXRlIG9uIGRpc2sKKyAgICAgICAgc25hcHNob3QuZHVtcChzdXBwb3J0LlRFU1RGTikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHN1cHBvcnQudW5saW5rLCBzdXBwb3J0LlRFU1RGTikKKworICAgICAgICAjIGxvYWQgZnJvbSBkaXNrCisgICAgICAgIHNuYXBzaG90MiA9IHRyYWNlbWFsbG9jLlNuYXBzaG90LmxvYWQoc3VwcG9ydC5URVNURk4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc25hcHNob3QyLnRyYWNlcywgc25hcHNob3QudHJhY2VzKQorCisgICAgICAgICMgdHJhY2VtYWxsb2MgbXVzdCBiZSB0cmFjaW5nIG1lbW9yeSBhbGxvY2F0aW9ucyB0byB0YWtlIGEgc25hcHNob3QKKyAgICAgICAgdHJhY2VtYWxsb2Muc3RvcCgpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yKSBhcyBjbToKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLnRha2Vfc25hcHNob3QoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihjbS5leGNlcHRpb24pLAorICAgICAgICAgICAgICAgICAgICAgICAgICJ0aGUgdHJhY2VtYWxsb2MgbW9kdWxlIG11c3QgYmUgdHJhY2luZyBtZW1vcnkgIgorICAgICAgICAgICAgICAgICAgICAgICAgICJhbGxvY2F0aW9ucyB0byB0YWtlIGEgc25hcHNob3QiKQorCisgICAgZGVmIHRlc3Rfc25hcHNob3Rfc2F2ZV9hdHRyKHNlbGYpOgorICAgICAgICAjIHRha2UgYSBzbmFwc2hvdCB3aXRoIGEgbmV3IGF0dHJpYnV0ZQorICAgICAgICBzbmFwc2hvdCA9IHRyYWNlbWFsbG9jLnRha2Vfc25hcHNob3QoKQorICAgICAgICBzbmFwc2hvdC50ZXN0X2F0dHIgPSAibmV3IgorICAgICAgICBzbmFwc2hvdC5kdW1wKHN1cHBvcnQuVEVTVEZOKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoc3VwcG9ydC51bmxpbmssIHN1cHBvcnQuVEVTVEZOKQorCisgICAgICAgICMgbG9hZCgpIHNob3VsZCByZWNyZWF0ZXMgdGhlIGF0dHJpYnV0ZQorICAgICAgICBzbmFwc2hvdDIgPSB0cmFjZW1hbGxvYy5TbmFwc2hvdC5sb2FkKHN1cHBvcnQuVEVTVEZOKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNuYXBzaG90Mi50ZXN0X2F0dHIsICJuZXciKQorCisgICAgZGVmIGZvcmtfY2hpbGQoc2VsZik6CisgICAgICAgIGlmIG5vdCB0cmFjZW1hbGxvYy5pc190cmFjaW5nKCk6CisgICAgICAgICAgICByZXR1cm4gMgorCisgICAgICAgIG9ial9zaXplID0gMTIzNDUKKyAgICAgICAgb2JqLCBvYmpfdHJhY2ViYWNrID0gYWxsb2NhdGVfYnl0ZXMob2JqX3NpemUpCisgICAgICAgIHRyYWNlYmFjayA9IHRyYWNlbWFsbG9jLmdldF9vYmplY3RfdHJhY2ViYWNrKG9iaikKKyAgICAgICAgaWYgdHJhY2ViYWNrIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gMworCisgICAgICAgICMgZXZlcnl0aGluZyBpcyBmaW5lCisgICAgICAgIHJldHVybiAwCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKG9zLCAnZm9yaycpLCAnbmVlZCBvcy5mb3JrKCknKQorICAgIGRlZiB0ZXN0X2Zvcmsoc2VsZik6CisgICAgICAgICMgY2hlY2sgdGhhdCB0cmFjZW1hbGxvYyBpcyBzdGlsbCB3b3JraW5nIGFmdGVyIGZvcmsKKyAgICAgICAgcGlkID0gb3MuZm9yaygpCisgICAgICAgIGlmIG5vdCBwaWQ6CisgICAgICAgICAgICAjIGNoaWxkCisgICAgICAgICAgICBleGl0Y29kZSA9IDEKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBleGl0Y29kZSA9IHNlbGYuZm9ya19jaGlsZCgpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIG9zLl9leGl0KGV4aXRjb2RlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcGlkMiwgc3RhdHVzID0gb3Mud2FpdHBpZChwaWQsIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUob3MuV0lGRVhJVEVEKHN0YXR1cykpCisgICAgICAgICAgICBleGl0Y29kZSA9IG9zLldFWElUU1RBVFVTKHN0YXR1cykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhpdGNvZGUsIDApCisKKworY2xhc3MgVGVzdFNuYXBzaG90KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBtYXhEaWZmID0gNDAwMAorCisgICAgZGVmIHRlc3RfY3JlYXRlX3NuYXBzaG90KHNlbGYpOgorICAgICAgICByYXdfdHJhY2VzID0gWyg1LCAoKCdhLnB5JywgMiksKSldCisKKyAgICAgICAgd2l0aCBjb250ZXh0bGliLkV4aXRTdGFjaygpIGFzIHN0YWNrOgorICAgICAgICAgICAgc3RhY2suZW50ZXJfY29udGV4dChwYXRjaC5vYmplY3QodHJhY2VtYWxsb2MsICdpc190cmFjaW5nJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWx1ZT1UcnVlKSkKKyAgICAgICAgICAgIHN0YWNrLmVudGVyX2NvbnRleHQocGF0Y2gub2JqZWN0KHRyYWNlbWFsbG9jLCAnZ2V0X3RyYWNlYmFja19saW1pdCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsdWU9NSkpCisgICAgICAgICAgICBzdGFjay5lbnRlcl9jb250ZXh0KHBhdGNoLm9iamVjdCh0cmFjZW1hbGxvYywgJ19nZXRfdHJhY2VzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWx1ZT1yYXdfdHJhY2VzKSkKKworICAgICAgICAgICAgc25hcHNob3QgPSB0cmFjZW1hbGxvYy50YWtlX3NuYXBzaG90KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc25hcHNob3QudHJhY2ViYWNrX2xpbWl0LCA1KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc25hcHNob3QudHJhY2VzKSwgMSkKKyAgICAgICAgICAgIHRyYWNlID0gc25hcHNob3QudHJhY2VzWzBdCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyYWNlLnNpemUsIDUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0cmFjZS50cmFjZWJhY2spLCAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmFjZS50cmFjZWJhY2tbMF0uZmlsZW5hbWUsICdhLnB5JykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJhY2UudHJhY2ViYWNrWzBdLmxpbmVubywgMikKKworICAgIGRlZiB0ZXN0X2ZpbHRlcl90cmFjZXMoc2VsZik6CisgICAgICAgIHNuYXBzaG90LCBzbmFwc2hvdDIgPSBjcmVhdGVfc25hcHNob3RzKCkKKyAgICAgICAgZmlsdGVyMSA9IHRyYWNlbWFsbG9jLkZpbHRlcihGYWxzZSwgImIucHkiKQorICAgICAgICBmaWx0ZXIyID0gdHJhY2VtYWxsb2MuRmlsdGVyKFRydWUsICJhLnB5IiwgMikKKyAgICAgICAgZmlsdGVyMyA9IHRyYWNlbWFsbG9jLkZpbHRlcihUcnVlLCAiYS5weSIsIDUpCisKKyAgICAgICAgb3JpZ2luYWxfdHJhY2VzID0gbGlzdChzbmFwc2hvdC50cmFjZXMuX3RyYWNlcykKKworICAgICAgICAjIGV4Y2x1ZGUgYi5weQorICAgICAgICBzbmFwc2hvdDMgPSBzbmFwc2hvdC5maWx0ZXJfdHJhY2VzKChmaWx0ZXIxLCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc25hcHNob3QzLnRyYWNlcy5fdHJhY2VzLCBbCisgICAgICAgICAgICAoMTAsICgoJ2EucHknLCAyKSwgKCdiLnB5JywgNCkpKSwKKyAgICAgICAgICAgICgxMCwgKCgnYS5weScsIDIpLCAoJ2IucHknLCA0KSkpLAorICAgICAgICAgICAgKDEwLCAoKCdhLnB5JywgMiksICgnYi5weScsIDQpKSksCisgICAgICAgICAgICAoMiwgKCgnYS5weScsIDUpLCAoJ2IucHknLCA0KSkpLAorICAgICAgICAgICAgKDcsICgoJzx1bmtub3duPicsIDApLCkpLAorICAgICAgICBdKQorCisgICAgICAgICMgZmlsdGVyX3RyYWNlcygpIG11c3Qgbm90IHRvdWNoIHRoZSBvcmlnaW5hbCBzbmFwc2hvdAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNuYXBzaG90LnRyYWNlcy5fdHJhY2VzLCBvcmlnaW5hbF90cmFjZXMpCisKKyAgICAgICAgIyBvbmx5IGluY2x1ZGUgdHdvIGxpbmVzIG9mIGEucHkKKyAgICAgICAgc25hcHNob3Q0ID0gc25hcHNob3QzLmZpbHRlcl90cmFjZXMoKGZpbHRlcjIsIGZpbHRlcjMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNuYXBzaG90NC50cmFjZXMuX3RyYWNlcywgWworICAgICAgICAgICAgKDEwLCAoKCdhLnB5JywgMiksICgnYi5weScsIDQpKSksCisgICAgICAgICAgICAoMTAsICgoJ2EucHknLCAyKSwgKCdiLnB5JywgNCkpKSwKKyAgICAgICAgICAgICgxMCwgKCgnYS5weScsIDIpLCAoJ2IucHknLCA0KSkpLAorICAgICAgICAgICAgKDIsICgoJ2EucHknLCA1KSwgKCdiLnB5JywgNCkpKSwKKyAgICAgICAgXSkKKworICAgICAgICAjIE5vIGZpbHRlcjoganVzdCBkdXBsaWNhdGUgdGhlIHNuYXBzaG90CisgICAgICAgIHNuYXBzaG90NSA9IHNuYXBzaG90LmZpbHRlcl90cmFjZXMoKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3Qoc25hcHNob3Q1LCBzbmFwc2hvdCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdChzbmFwc2hvdDUudHJhY2VzLCBzbmFwc2hvdC50cmFjZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc25hcHNob3Q1LnRyYWNlcywgc25hcHNob3QudHJhY2VzKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc25hcHNob3QuZmlsdGVyX3RyYWNlcywgZmlsdGVyMSkKKworICAgIGRlZiB0ZXN0X3NuYXBzaG90X2dyb3VwX2J5X2xpbmUoc2VsZik6CisgICAgICAgIHNuYXBzaG90LCBzbmFwc2hvdDIgPSBjcmVhdGVfc25hcHNob3RzKCkKKyAgICAgICAgdGJfMCA9IHRyYWNlYmFja19saW5lbm8oJzx1bmtub3duPicsIDApCisgICAgICAgIHRiX2FfMiA9IHRyYWNlYmFja19saW5lbm8oJ2EucHknLCAyKQorICAgICAgICB0Yl9hXzUgPSB0cmFjZWJhY2tfbGluZW5vKCdhLnB5JywgNSkKKyAgICAgICAgdGJfYl8xID0gdHJhY2ViYWNrX2xpbmVubygnYi5weScsIDEpCisgICAgICAgIHRiX2NfNTc4ID0gdHJhY2ViYWNrX2xpbmVubygnYy5weScsIDU3OCkKKworICAgICAgICAjIHN0YXRzIHBlciBmaWxlIGFuZCBsaW5lCisgICAgICAgIHN0YXRzMSA9IHNuYXBzaG90LnN0YXRpc3RpY3MoJ2xpbmVubycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHMxLCBbCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWModGJfYl8xLCA2NiwgMSksCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWModGJfYV8yLCAzMCwgMyksCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWModGJfMCwgNywgMSksCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWModGJfYV81LCAyLCAxKSwKKyAgICAgICAgXSkKKworICAgICAgICAjIHN0YXRzIHBlciBmaWxlIGFuZCBsaW5lICgyKQorICAgICAgICBzdGF0czIgPSBzbmFwc2hvdDIuc3RhdGlzdGljcygnbGluZW5vJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0czIsIFsKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLlN0YXRpc3RpYyh0Yl9hXzUsIDUwMDIsIDIpLAorICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljKHRiX2NfNTc4LCA0MDAsIDEpLAorICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljKHRiX2FfMiwgMzAsIDMpLAorICAgICAgICBdKQorCisgICAgICAgICMgc3RhdHMgZGlmZiBwZXIgZmlsZSBhbmQgbGluZQorICAgICAgICBzdGF0aXN0aWNzID0gc25hcHNob3QyLmNvbXBhcmVfdG8oc25hcHNob3QsICdsaW5lbm8nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXRpc3RpY3MsIFsKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLlN0YXRpc3RpY0RpZmYodGJfYV81LCA1MDAyLCA1MDAwLCAyLCAxKSwKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLlN0YXRpc3RpY0RpZmYodGJfY181NzgsIDQwMCwgNDAwLCAxLCAxKSwKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLlN0YXRpc3RpY0RpZmYodGJfYl8xLCAwLCAtNjYsIDAsIC0xKSwKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLlN0YXRpc3RpY0RpZmYodGJfMCwgMCwgLTcsIDAsIC0xKSwKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLlN0YXRpc3RpY0RpZmYodGJfYV8yLCAzMCwgMCwgMywgMCksCisgICAgICAgIF0pCisKKyAgICBkZWYgdGVzdF9zbmFwc2hvdF9ncm91cF9ieV9maWxlKHNlbGYpOgorICAgICAgICBzbmFwc2hvdCwgc25hcHNob3QyID0gY3JlYXRlX3NuYXBzaG90cygpCisgICAgICAgIHRiXzAgPSB0cmFjZWJhY2tfZmlsZW5hbWUoJzx1bmtub3duPicpCisgICAgICAgIHRiX2EgPSB0cmFjZWJhY2tfZmlsZW5hbWUoJ2EucHknKQorICAgICAgICB0Yl9iID0gdHJhY2ViYWNrX2ZpbGVuYW1lKCdiLnB5JykKKyAgICAgICAgdGJfYyA9IHRyYWNlYmFja19maWxlbmFtZSgnYy5weScpCisKKyAgICAgICAgIyBzdGF0cyBwZXIgZmlsZQorICAgICAgICBzdGF0czEgPSBzbmFwc2hvdC5zdGF0aXN0aWNzKCdmaWxlbmFtZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHMxLCBbCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWModGJfYiwgNjYsIDEpLAorICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljKHRiX2EsIDMyLCA0KSwKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLlN0YXRpc3RpYyh0Yl8wLCA3LCAxKSwKKyAgICAgICAgXSkKKworICAgICAgICAjIHN0YXRzIHBlciBmaWxlICgyKQorICAgICAgICBzdGF0czIgPSBzbmFwc2hvdDIuc3RhdGlzdGljcygnZmlsZW5hbWUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXRzMiwgWworICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljKHRiX2EsIDUwMzIsIDUpLAorICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljKHRiX2MsIDQwMCwgMSksCisgICAgICAgIF0pCisKKyAgICAgICAgIyBzdGF0cyBkaWZmIHBlciBmaWxlCisgICAgICAgIGRpZmYgPSBzbmFwc2hvdDIuY29tcGFyZV90byhzbmFwc2hvdCwgJ2ZpbGVuYW1lJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWZmLCBbCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWNEaWZmKHRiX2EsIDUwMzIsIDUwMDAsIDUsIDEpLAorICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljRGlmZih0Yl9jLCA0MDAsIDQwMCwgMSwgMSksCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWNEaWZmKHRiX2IsIDAsIC02NiwgMCwgLTEpLAorICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljRGlmZih0Yl8wLCAwLCAtNywgMCwgLTEpLAorICAgICAgICBdKQorCisgICAgZGVmIHRlc3Rfc25hcHNob3RfZ3JvdXBfYnlfdHJhY2ViYWNrKHNlbGYpOgorICAgICAgICBzbmFwc2hvdCwgc25hcHNob3QyID0gY3JlYXRlX3NuYXBzaG90cygpCisKKyAgICAgICAgIyBzdGF0cyBwZXIgZmlsZQorICAgICAgICB0YjEgPSB0cmFjZWJhY2soKCdhLnB5JywgMiksICgnYi5weScsIDQpKQorICAgICAgICB0YjIgPSB0cmFjZWJhY2soKCdhLnB5JywgNSksICgnYi5weScsIDQpKQorICAgICAgICB0YjMgPSB0cmFjZWJhY2soKCdiLnB5JywgMSkpCisgICAgICAgIHRiNCA9IHRyYWNlYmFjaygoJzx1bmtub3duPicsIDApKQorICAgICAgICBzdGF0czEgPSBzbmFwc2hvdC5zdGF0aXN0aWNzKCd0cmFjZWJhY2snKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXRzMSwgWworICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljKHRiMywgNjYsIDEpLAorICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljKHRiMSwgMzAsIDMpLAorICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljKHRiNCwgNywgMSksCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWModGIyLCAyLCAxKSwKKyAgICAgICAgXSkKKworICAgICAgICAjIHN0YXRzIHBlciBmaWxlICgyKQorICAgICAgICB0YjUgPSB0cmFjZWJhY2soKCdjLnB5JywgNTc4KSkKKyAgICAgICAgc3RhdHMyID0gc25hcHNob3QyLnN0YXRpc3RpY3MoJ3RyYWNlYmFjaycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHMyLCBbCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWModGIyLCA1MDAyLCAyKSwKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLlN0YXRpc3RpYyh0YjUsIDQwMCwgMSksCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWModGIxLCAzMCwgMyksCisgICAgICAgIF0pCisKKyAgICAgICAgIyBzdGF0cyBkaWZmIHBlciBmaWxlCisgICAgICAgIGRpZmYgPSBzbmFwc2hvdDIuY29tcGFyZV90byhzbmFwc2hvdCwgJ3RyYWNlYmFjaycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlmZiwgWworICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljRGlmZih0YjIsIDUwMDIsIDUwMDAsIDIsIDEpLAorICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljRGlmZih0YjUsIDQwMCwgNDAwLCAxLCAxKSwKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLlN0YXRpc3RpY0RpZmYodGIzLCAwLCAtNjYsIDAsIC0xKSwKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLlN0YXRpc3RpY0RpZmYodGI0LCAwLCAtNywgMCwgLTEpLAorICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljRGlmZih0YjEsIDMwLCAwLCAzLCAwKSwKKyAgICAgICAgXSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzbmFwc2hvdC5zdGF0aXN0aWNzLCAndHJhY2ViYWNrJywgY3VtdWxhdGl2ZT1UcnVlKQorCisgICAgZGVmIHRlc3Rfc25hcHNob3RfZ3JvdXBfYnlfY3VtdWxhdGl2ZShzZWxmKToKKyAgICAgICAgc25hcHNob3QsIHNuYXBzaG90MiA9IGNyZWF0ZV9zbmFwc2hvdHMoKQorICAgICAgICB0Yl8wID0gdHJhY2ViYWNrX2ZpbGVuYW1lKCc8dW5rbm93bj4nKQorICAgICAgICB0Yl9hID0gdHJhY2ViYWNrX2ZpbGVuYW1lKCdhLnB5JykKKyAgICAgICAgdGJfYiA9IHRyYWNlYmFja19maWxlbmFtZSgnYi5weScpCisgICAgICAgIHRiX2FfMiA9IHRyYWNlYmFja19saW5lbm8oJ2EucHknLCAyKQorICAgICAgICB0Yl9hXzUgPSB0cmFjZWJhY2tfbGluZW5vKCdhLnB5JywgNSkKKyAgICAgICAgdGJfYl8xID0gdHJhY2ViYWNrX2xpbmVubygnYi5weScsIDEpCisgICAgICAgIHRiX2JfNCA9IHRyYWNlYmFja19saW5lbm8oJ2IucHknLCA0KQorCisgICAgICAgICMgcGVyIGZpbGUKKyAgICAgICAgc3RhdHMgPSBzbmFwc2hvdC5zdGF0aXN0aWNzKCdmaWxlbmFtZScsIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHMsIFsKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLlN0YXRpc3RpYyh0Yl9iLCA5OCwgNSksCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWModGJfYSwgMzIsIDQpLAorICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljKHRiXzAsIDcsIDEpLAorICAgICAgICBdKQorCisgICAgICAgICMgcGVyIGxpbmUKKyAgICAgICAgc3RhdHMgPSBzbmFwc2hvdC5zdGF0aXN0aWNzKCdsaW5lbm8nLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXRzLCBbCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWModGJfYl8xLCA2NiwgMSksCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWModGJfYl80LCAzMiwgNCksCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWModGJfYV8yLCAzMCwgMyksCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWModGJfMCwgNywgMSksCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWModGJfYV81LCAyLCAxKSwKKyAgICAgICAgXSkKKworICAgIGRlZiB0ZXN0X3RyYWNlX2Zvcm1hdChzZWxmKToKKyAgICAgICAgc25hcHNob3QsIHNuYXBzaG90MiA9IGNyZWF0ZV9zbmFwc2hvdHMoKQorICAgICAgICB0cmFjZSA9IHNuYXBzaG90LnRyYWNlc1swXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cih0cmFjZSksICdhLnB5OjI6IDEwIEInKQorICAgICAgICB0cmFjZWJhY2sgPSB0cmFjZS50cmFjZWJhY2sKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIodHJhY2ViYWNrKSwgJ2EucHk6MicpCisgICAgICAgIGZyYW1lID0gdHJhY2ViYWNrWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGZyYW1lKSwgJ2EucHk6MicpCisKKyAgICBkZWYgdGVzdF9zdGF0aXN0aWNfZm9ybWF0KHNlbGYpOgorICAgICAgICBzbmFwc2hvdCwgc25hcHNob3QyID0gY3JlYXRlX3NuYXBzaG90cygpCisgICAgICAgIHN0YXRzID0gc25hcHNob3Quc3RhdGlzdGljcygnbGluZW5vJykKKyAgICAgICAgc3RhdCA9IHN0YXRzWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHN0YXQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICdiLnB5OjE6IHNpemU9NjYgQiwgY291bnQ9MSwgYXZlcmFnZT02NiBCJykKKworICAgIGRlZiB0ZXN0X3N0YXRpc3RpY19kaWZmX2Zvcm1hdChzZWxmKToKKyAgICAgICAgc25hcHNob3QsIHNuYXBzaG90MiA9IGNyZWF0ZV9zbmFwc2hvdHMoKQorICAgICAgICBzdGF0cyA9IHNuYXBzaG90Mi5jb21wYXJlX3RvKHNuYXBzaG90LCAnbGluZW5vJykKKyAgICAgICAgc3RhdCA9IHN0YXRzWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHN0YXQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICdhLnB5OjU6IHNpemU9NTAwMiBCICgrNTAwMCBCKSwgY291bnQ9MiAoKzEpLCBhdmVyYWdlPTI1MDEgQicpCisKKyAgICBkZWYgdGVzdF9zbGljZXMoc2VsZik6CisgICAgICAgIHNuYXBzaG90LCBzbmFwc2hvdDIgPSBjcmVhdGVfc25hcHNob3RzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzbmFwc2hvdC50cmFjZXNbOjJdLAorICAgICAgICAgICAgICAgICAgICAgICAgIChzbmFwc2hvdC50cmFjZXNbMF0sIHNuYXBzaG90LnRyYWNlc1sxXSkpCisKKyAgICAgICAgdHJhY2ViYWNrID0gc25hcHNob3QudHJhY2VzWzBdLnRyYWNlYmFjaworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyYWNlYmFja1s6Ml0sCisgICAgICAgICAgICAgICAgICAgICAgICAgKHRyYWNlYmFja1swXSwgdHJhY2ViYWNrWzFdKSkKKworICAgIGRlZiB0ZXN0X2Zvcm1hdF90cmFjZWJhY2soc2VsZik6CisgICAgICAgIHNuYXBzaG90LCBzbmFwc2hvdDIgPSBjcmVhdGVfc25hcHNob3RzKCkKKyAgICAgICAgZGVmIGdldGxpbmUoZmlsZW5hbWUsIGxpbmVubyk6CisgICAgICAgICAgICByZXR1cm4gJyAgPCVzLCAlcz4nICUgKGZpbGVuYW1lLCBsaW5lbm8pCisgICAgICAgIHdpdGggdW5pdHRlc3QubW9jay5wYXRjaCgndHJhY2VtYWxsb2MubGluZWNhY2hlLmdldGxpbmUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lkZV9lZmZlY3Q9Z2V0bGluZSk6CisgICAgICAgICAgICB0YiA9IHNuYXBzaG90LnRyYWNlc1swXS50cmFjZWJhY2sKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGIuZm9ybWF0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnICBGaWxlICJhLnB5IiwgbGluZSAyJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgPGEucHksIDI+JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIEZpbGUgImIucHkiLCBsaW5lIDQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgICA8Yi5weSwgND4nXSkKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Yi5mb3JtYXQobGltaXQ9MSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnICBGaWxlICJhLnB5IiwgbGluZSAyJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgPGEucHksIDI+J10pCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGIuZm9ybWF0KGxpbWl0PS0xKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10pCisKKworY2xhc3MgVGVzdEZpbHRlcnModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIG1heERpZmYgPSAyMDQ4CisKKyAgICBkZWYgdGVzdF9maWx0ZXJfYXR0cmlidXRlcyhzZWxmKToKKyAgICAgICAgIyB0ZXN0IGRlZmF1bHQgdmFsdWVzCisgICAgICAgIGYgPSB0cmFjZW1hbGxvYy5GaWx0ZXIoVHJ1ZSwgImFiYyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5pbmNsdXNpdmUsIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5maWxlbmFtZV9wYXR0ZXJuLCAiYWJjIikKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZi5saW5lbm8pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5hbGxfZnJhbWVzLCBGYWxzZSkKKworICAgICAgICAjIHRlc3QgY3VzdG9tIHZhbHVlcworICAgICAgICBmID0gdHJhY2VtYWxsb2MuRmlsdGVyKEZhbHNlLCAidGVzdC5weSIsIDEyMywgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmluY2x1c2l2ZSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5maWxlbmFtZV9wYXR0ZXJuLCAidGVzdC5weSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5saW5lbm8sIDEyMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmFsbF9mcmFtZXMsIFRydWUpCisKKyAgICAgICAgIyBwYXJhbWV0ZXJzIHBhc3NlZCBieSBrZXl3b3JkCisgICAgICAgIGYgPSB0cmFjZW1hbGxvYy5GaWx0ZXIoaW5jbHVzaXZlPUZhbHNlLCBmaWxlbmFtZV9wYXR0ZXJuPSJ0ZXN0LnB5IiwgbGluZW5vPTEyMywgYWxsX2ZyYW1lcz1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuaW5jbHVzaXZlLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmZpbGVuYW1lX3BhdHRlcm4sICJ0ZXN0LnB5IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmxpbmVubywgMTIzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuYWxsX2ZyYW1lcywgVHJ1ZSkKKworICAgICAgICAjIHJlYWQtb25seSBhdHRyaWJ1dGUKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IsIHNldGF0dHIsIGYsICJmaWxlbmFtZV9wYXR0ZXJuIiwgImFiYyIpCisKKyAgICBkZWYgdGVzdF9maWx0ZXJfbWF0Y2goc2VsZik6CisgICAgICAgICMgZmlsdGVyIHdpdGhvdXQgbGluZSBudW1iZXIKKyAgICAgICAgZiA9IHRyYWNlbWFsbG9jLkZpbHRlcihUcnVlLCAiYWJjIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX21hdGNoX2ZyYW1lKCJhYmMiLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX21hdGNoX2ZyYW1lKCJhYmMiLCA1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX21hdGNoX2ZyYW1lKCJhYmMiLCAxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fbWF0Y2hfZnJhbWUoIjEyMzU2IiwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fbWF0Y2hfZnJhbWUoIjEyMzU2IiwgNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fbWF0Y2hfZnJhbWUoIjEyMzU2IiwgMTApKQorCisgICAgICAgIGYgPSB0cmFjZW1hbGxvYy5GaWx0ZXIoRmFsc2UsICJhYmMiKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuX21hdGNoX2ZyYW1lKCJhYmMiLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLl9tYXRjaF9mcmFtZSgiYWJjIiwgNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fbWF0Y2hfZnJhbWUoImFiYyIsIDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX21hdGNoX2ZyYW1lKCIxMjM1NiIsIDApKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5fbWF0Y2hfZnJhbWUoIjEyMzU2IiwgNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9tYXRjaF9mcmFtZSgiMTIzNTYiLCAxMCkpCisKKyAgICAgICAgIyBmaWx0ZXIgd2l0aCBsaW5lIG51bWJlciA+IDAKKyAgICAgICAgZiA9IHRyYWNlbWFsbG9jLkZpbHRlcihUcnVlLCAiYWJjIiwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLl9tYXRjaF9mcmFtZSgiYWJjIiwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9tYXRjaF9mcmFtZSgiYWJjIiwgNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fbWF0Y2hfZnJhbWUoImFiYyIsIDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLl9tYXRjaF9mcmFtZSgiMTIzNTYiLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLl9tYXRjaF9mcmFtZSgiMTIzNTYiLCA1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLl9tYXRjaF9mcmFtZSgiMTIzNTYiLCAxMCkpCisKKyAgICAgICAgZiA9IHRyYWNlbWFsbG9jLkZpbHRlcihGYWxzZSwgImFiYyIsIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9tYXRjaF9mcmFtZSgiYWJjIiwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fbWF0Y2hfZnJhbWUoImFiYyIsIDUpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5fbWF0Y2hfZnJhbWUoImFiYyIsIDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX21hdGNoX2ZyYW1lKCIxMjM1NiIsIDApKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5fbWF0Y2hfZnJhbWUoIjEyMzU2IiwgNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9tYXRjaF9mcmFtZSgiMTIzNTYiLCAxMCkpCisKKyAgICAgICAgIyBmaWx0ZXIgd2l0aCBsaW5lIG51bWJlciAwCisgICAgICAgIGYgPSB0cmFjZW1hbGxvYy5GaWx0ZXIoVHJ1ZSwgImFiYyIsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9tYXRjaF9mcmFtZSgiYWJjIiwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fbWF0Y2hfZnJhbWUoImFiYyIsIDUpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuX21hdGNoX2ZyYW1lKCJhYmMiLCAxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fbWF0Y2hfZnJhbWUoIjEyMzU2IiwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fbWF0Y2hfZnJhbWUoIjEyMzU2IiwgNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fbWF0Y2hfZnJhbWUoIjEyMzU2IiwgMTApKQorCisgICAgICAgIGYgPSB0cmFjZW1hbGxvYy5GaWx0ZXIoRmFsc2UsICJhYmMiLCAwKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuX21hdGNoX2ZyYW1lKCJhYmMiLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX21hdGNoX2ZyYW1lKCJhYmMiLCA1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX21hdGNoX2ZyYW1lKCJhYmMiLCAxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9tYXRjaF9mcmFtZSgiMTIzNTYiLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX21hdGNoX2ZyYW1lKCIxMjM1NiIsIDUpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5fbWF0Y2hfZnJhbWUoIjEyMzU2IiwgMTApKQorCisgICAgZGVmIHRlc3RfZmlsdGVyX21hdGNoX2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICBkZWYgZm5tYXRjaChpbmNsdXNpdmUsIGZpbGVuYW1lLCBwYXR0ZXJuKToKKyAgICAgICAgICAgIGYgPSB0cmFjZW1hbGxvYy5GaWx0ZXIoaW5jbHVzaXZlLCBwYXR0ZXJuKQorICAgICAgICAgICAgcmV0dXJuIGYuX21hdGNoX2ZyYW1lKGZpbGVuYW1lLCAwKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmbm1hdGNoKFRydWUsICJhYmMiLCAiYWJjIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZm5tYXRjaChUcnVlLCAiMTIzNTYiLCAiYWJjIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZm5tYXRjaChUcnVlLCAiPHVua25vd24+IiwgImFiYyIpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZm5tYXRjaChGYWxzZSwgImFiYyIsICJhYmMiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZubWF0Y2goRmFsc2UsICIxMjM1NiIsICJhYmMiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZubWF0Y2goRmFsc2UsICI8dW5rbm93bj4iLCAiYWJjIikpCisKKyAgICBkZWYgdGVzdF9maWx0ZXJfbWF0Y2hfZmlsZW5hbWVfam9rZXIoc2VsZik6CisgICAgICAgIGRlZiBmbm1hdGNoKGZpbGVuYW1lLCBwYXR0ZXJuKToKKyAgICAgICAgICAgIGZpbHRlciA9IHRyYWNlbWFsbG9jLkZpbHRlcihUcnVlLCBwYXR0ZXJuKQorICAgICAgICAgICAgcmV0dXJuIGZpbHRlci5fbWF0Y2hfZnJhbWUoZmlsZW5hbWUsIDApCisKKyAgICAgICAgIyBlbXB0eSBzdHJpbmcKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmbm1hdGNoKCdhYmMnLCAnJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZm5tYXRjaCgnJywgJ2FiYycpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZm5tYXRjaCgnJywgJycpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZm5tYXRjaCgnJywgJyonKSkKKworICAgICAgICAjIG5vICoKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZubWF0Y2goJ2FiYycsICdhYmMnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmbm1hdGNoKCdhYmMnLCAnYWJjZCcpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZubWF0Y2goJ2FiYycsICdkZWYnKSkKKworICAgICAgICAjIGEqCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmbm1hdGNoKCdhYmMnLCAnYSonKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZubWF0Y2goJ2FiYycsICdhYmMqJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZm5tYXRjaCgnYWJjJywgJ2IqJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZm5tYXRjaCgnYWJjJywgJ2FiY2QqJykpCisKKyAgICAgICAgIyBhKmIKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZubWF0Y2goJ2FiYycsICdhKmMnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZubWF0Y2goJ2FiY2RjeCcsICdhKmN4JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZm5tYXRjaCgnYWJiJywgJ2EqYycpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZubWF0Y2goJ2FiY2RjZScsICdhKmN4JykpCisKKyAgICAgICAgIyBhKmIqYworICAgICAgICBzZWxmLmFzc2VydFRydWUoZm5tYXRjaCgnYWJjZGUnLCAnYSpjKmUnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZubWF0Y2goJ2FiY2JkZWZlZycsICdhKmJkKmVnJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZm5tYXRjaCgnYWJjZGQnLCAnYSpjKmUnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmbm1hdGNoKCdhYmNiZGVmZWYnLCAnYSpiZCplZycpKQorCisgICAgICAgICMgcmVwbGFjZSAucHljIGFuZCAucHlvIHN1ZmZpeCB3aXRoIC5weQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZm5tYXRjaCgnYS5weWMnLCAnYS5weScpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZm5tYXRjaCgnYS5weW8nLCAnYS5weScpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZm5tYXRjaCgnYS5weScsICdhLnB5YycpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZm5tYXRjaCgnYS5weScsICdhLnB5bycpKQorCisgICAgICAgIGlmIG9zLm5hbWUgPT0gJ250JzoKKyAgICAgICAgICAgICMgY2FzZSBpbnNlbnNpdGl2ZQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZubWF0Y2goJ2FCQycsICdBQmMnKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmbm1hdGNoKCdhQmNEZScsICdBYipkRScpKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZm5tYXRjaCgnYS5weWMnLCAnYS5QWScpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZubWF0Y2goJ2EuUFlPJywgJ2EucHknKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmbm1hdGNoKCdhLnB5JywgJ2EuUFlDJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZm5tYXRjaCgnYS5QWScsICdhLnB5bycpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBjYXNlIHNlbnNpdGl2ZQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmbm1hdGNoKCdhQkMnLCAnQUJjJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZubWF0Y2goJ2FCY0RlJywgJ0FiKmRFJykpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZm5tYXRjaCgnYS5weWMnLCAnYS5QWScpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmbm1hdGNoKCdhLlBZTycsICdhLnB5JykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZubWF0Y2goJ2EucHknLCAnYS5QWUMnKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZm5tYXRjaCgnYS5QWScsICdhLnB5bycpKQorCisgICAgICAgIGlmIG9zLm5hbWUgPT0gJ250JzoKKyAgICAgICAgICAgICMgbm9ybWFsaXplIGFsdGVybmF0ZSBzZXBhcmF0b3IgIi8iIHRvIHRoZSBzdGFuZGFyZCBzZXBhcmF0b3IgIlwiCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZm5tYXRjaChyJ2EvYicsIHInYVxiJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZm5tYXRjaChyJ2FcYicsIHInYS9iJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZm5tYXRjaChyJ2EvYlxjJywgcidhXGIvYycpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZubWF0Y2gocidhL2IvYycsIHInYVxiXGMnKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgdGhlcmUgaXMgbm8gYWx0ZXJuYXRlIHNlcGFyYXRvcgorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmbm1hdGNoKHInYS9iJywgcidhXGInKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZm5tYXRjaChyJ2FcYicsIHInYS9iJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZubWF0Y2gocidhL2JcYycsIHInYVxiL2MnKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZm5tYXRjaChyJ2EvYi9jJywgcidhXGJcYycpKQorCisgICAgZGVmIHRlc3RfZmlsdGVyX21hdGNoX3RyYWNlKHNlbGYpOgorICAgICAgICB0MSA9ICgoImEucHkiLCAyKSwgKCJiLnB5IiwgMykpCisgICAgICAgIHQyID0gKCgiYi5weSIsIDQpLCAoImIucHkiLCA1KSkKKyAgICAgICAgdDMgPSAoKCJjLnB5IiwgNSksICgnPHVua25vd24+JywgMCkpCisgICAgICAgIHVua25vd24gPSAoKCc8dW5rbm93bj4nLCAwKSwpCisKKyAgICAgICAgZiA9IHRyYWNlbWFsbG9jLkZpbHRlcihUcnVlLCAiYi5weSIsIGFsbF9mcmFtZXM9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX21hdGNoX3RyYWNlYmFjayh0MSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9tYXRjaF90cmFjZWJhY2sodDIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuX21hdGNoX3RyYWNlYmFjayh0MykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fbWF0Y2hfdHJhY2ViYWNrKHVua25vd24pKQorCisgICAgICAgIGYgPSB0cmFjZW1hbGxvYy5GaWx0ZXIoVHJ1ZSwgImIucHkiLCBhbGxfZnJhbWVzPUZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuX21hdGNoX3RyYWNlYmFjayh0MSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9tYXRjaF90cmFjZWJhY2sodDIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuX21hdGNoX3RyYWNlYmFjayh0MykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fbWF0Y2hfdHJhY2ViYWNrKHVua25vd24pKQorCisgICAgICAgIGYgPSB0cmFjZW1hbGxvYy5GaWx0ZXIoRmFsc2UsICJiLnB5IiwgYWxsX2ZyYW1lcz1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuX21hdGNoX3RyYWNlYmFjayh0MSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fbWF0Y2hfdHJhY2ViYWNrKHQyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX21hdGNoX3RyYWNlYmFjayh0MykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9tYXRjaF90cmFjZWJhY2sodW5rbm93bikpCisKKyAgICAgICAgZiA9IHRyYWNlbWFsbG9jLkZpbHRlcihGYWxzZSwgImIucHkiLCBhbGxfZnJhbWVzPUZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5fbWF0Y2hfdHJhY2ViYWNrKHQxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLl9tYXRjaF90cmFjZWJhY2sodDIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5fbWF0Y2hfdHJhY2ViYWNrKHQzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX21hdGNoX3RyYWNlYmFjayh1bmtub3duKSkKKworICAgICAgICBmID0gdHJhY2VtYWxsb2MuRmlsdGVyKEZhbHNlLCAiPHVua25vd24+IiwgYWxsX2ZyYW1lcz1GYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX21hdGNoX3RyYWNlYmFjayh0MSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9tYXRjaF90cmFjZWJhY2sodDIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5fbWF0Y2hfdHJhY2ViYWNrKHQzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLl9tYXRjaF90cmFjZWJhY2sodW5rbm93bikpCisKKyAgICAgICAgZiA9IHRyYWNlbWFsbG9jLkZpbHRlcihUcnVlLCAiPHVua25vd24+IiwgYWxsX2ZyYW1lcz1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuX21hdGNoX3RyYWNlYmFjayh0MSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fbWF0Y2hfdHJhY2ViYWNrKHQyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX21hdGNoX3RyYWNlYmFjayh0MykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9tYXRjaF90cmFjZWJhY2sodW5rbm93bikpCisKKyAgICAgICAgZiA9IHRyYWNlbWFsbG9jLkZpbHRlcihGYWxzZSwgIjx1bmtub3duPiIsIGFsbF9mcmFtZXM9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX21hdGNoX3RyYWNlYmFjayh0MSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9tYXRjaF90cmFjZWJhY2sodDIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuX21hdGNoX3RyYWNlYmFjayh0MykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fbWF0Y2hfdHJhY2ViYWNrKHVua25vd24pKQorCisKK2NsYXNzIFRlc3RDb21tYW5kTGluZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfZW52X3Zhcl9kaXNhYmxlZF9ieV9kZWZhdWx0KHNlbGYpOgorICAgICAgICAjIG5vdCB0cmFjaW5nIGJ5IGRlZmF1bHQKKyAgICAgICAgY29kZSA9ICdpbXBvcnQgdHJhY2VtYWxsb2M7IHByaW50KHRyYWNlbWFsbG9jLmlzX3RyYWNpbmcoKSknCisgICAgICAgIG9rLCBzdGRvdXQsIHN0ZGVyciA9IGFzc2VydF9weXRob25fb2soJy1jJywgY29kZSkKKyAgICAgICAgc3Rkb3V0ID0gc3Rkb3V0LnJzdHJpcCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LCBiJ0ZhbHNlJykKKworICAgIEB1bml0dGVzdC5za2lwSWYoc2NyaXB0X2hlbHBlci5faW50ZXJwcmV0ZXJfcmVxdWlyZXNfZW52aXJvbm1lbnQoKSwKKyAgICAgICAgICAgICAgICAgICAgICdDYW5ub3QgcnVuIC1FIHRlc3RzIHdoZW4gUFlUSE9OIGVudiB2YXJzIGFyZSByZXF1aXJlZC4nKQorICAgIGRlZiB0ZXN0X2Vudl92YXJfaWdub3JlZF93aXRoX0Uoc2VsZik6CisgICAgICAgICIiIlBZVEhPTiogZW52aXJvbm1lbnQgdmFyaWFibGVzIG11c3QgYmUgaWdub3JlZCB3aGVuIC1FIGlzIHByZXNlbnQuIiIiCisgICAgICAgIGNvZGUgPSAnaW1wb3J0IHRyYWNlbWFsbG9jOyBwcmludCh0cmFjZW1hbGxvYy5pc190cmFjaW5nKCkpJworICAgICAgICBvaywgc3Rkb3V0LCBzdGRlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCctRScsICctYycsIGNvZGUsIFBZVEhPTlRSQUNFTUFMTE9DPScxJykKKyAgICAgICAgc3Rkb3V0ID0gc3Rkb3V0LnJzdHJpcCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LCBiJ0ZhbHNlJykKKworICAgIGRlZiB0ZXN0X2Vudl92YXJfZW5hYmxlZF9hdF9zdGFydHVwKHNlbGYpOgorICAgICAgICAjIHRyYWNpbmcgYXQgc3RhcnR1cAorICAgICAgICBjb2RlID0gJ2ltcG9ydCB0cmFjZW1hbGxvYzsgcHJpbnQodHJhY2VtYWxsb2MuaXNfdHJhY2luZygpKScKKyAgICAgICAgb2ssIHN0ZG91dCwgc3RkZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygnLWMnLCBjb2RlLCBQWVRIT05UUkFDRU1BTExPQz0nMScpCisgICAgICAgIHN0ZG91dCA9IHN0ZG91dC5yc3RyaXAoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dCwgYidUcnVlJykKKworICAgIGRlZiB0ZXN0X2Vudl9saW1pdChzZWxmKToKKyAgICAgICAgIyBzdGFydCBhbmQgc2V0IHRoZSBudW1iZXIgb2YgZnJhbWVzCisgICAgICAgIGNvZGUgPSAnaW1wb3J0IHRyYWNlbWFsbG9jOyBwcmludCh0cmFjZW1hbGxvYy5nZXRfdHJhY2ViYWNrX2xpbWl0KCkpJworICAgICAgICBvaywgc3Rkb3V0LCBzdGRlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCctYycsIGNvZGUsIFBZVEhPTlRSQUNFTUFMTE9DPScxMCcpCisgICAgICAgIHN0ZG91dCA9IHN0ZG91dC5yc3RyaXAoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dCwgYicxMCcpCisKKyAgICBkZWYgdGVzdF9lbnZfdmFyX2ludmFsaWQoc2VsZik6CisgICAgICAgIGZvciBuZnJhbWUgaW4gKC0xLCAwLCAyKiozMCk6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChuZnJhbWU9bmZyYW1lKToKKyAgICAgICAgICAgICAgICB3aXRoIHN1cHBvcnQuU3VwcHJlc3NDcmFzaFJlcG9ydCgpOgorICAgICAgICAgICAgICAgICAgICBvaywgc3Rkb3V0LCBzdGRlcnIgPSBhc3NlcnRfcHl0aG9uX2ZhaWx1cmUoCisgICAgICAgICAgICAgICAgICAgICAgICAnLWMnLCAncGFzcycsCisgICAgICAgICAgICAgICAgICAgICAgICBQWVRIT05UUkFDRU1BTExPQz1zdHIobmZyYW1lKSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihiJ1BZVEhPTlRSQUNFTUFMTE9DOiBpbnZhbGlkICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiJ251bWJlciBvZiBmcmFtZXMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycikKKworICAgIGRlZiB0ZXN0X3N5c194b3B0aW9ucyhzZWxmKToKKyAgICAgICAgZm9yIHhvcHRpb25zLCBuZnJhbWUgaW4gKAorICAgICAgICAgICAgKCd0cmFjZW1hbGxvYycsIDEpLAorICAgICAgICAgICAgKCd0cmFjZW1hbGxvYz0xJywgMSksCisgICAgICAgICAgICAoJ3RyYWNlbWFsbG9jPTE1JywgMTUpLAorICAgICAgICApOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoeG9wdGlvbnM9eG9wdGlvbnMsIG5mcmFtZT1uZnJhbWUpOgorICAgICAgICAgICAgICAgIGNvZGUgPSAnaW1wb3J0IHRyYWNlbWFsbG9jOyBwcmludCh0cmFjZW1hbGxvYy5nZXRfdHJhY2ViYWNrX2xpbWl0KCkpJworICAgICAgICAgICAgICAgIG9rLCBzdGRvdXQsIHN0ZGVyciA9IGFzc2VydF9weXRob25fb2soJy1YJywgeG9wdGlvbnMsICctYycsIGNvZGUpCisgICAgICAgICAgICAgICAgc3Rkb3V0ID0gc3Rkb3V0LnJzdHJpcCgpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQsIHN0cihuZnJhbWUpLmVuY29kZSgnYXNjaWknKSkKKworICAgIGRlZiB0ZXN0X3N5c194b3B0aW9uc19pbnZhbGlkKHNlbGYpOgorICAgICAgICBmb3IgbmZyYW1lIGluICgtMSwgMCwgMioqMzApOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QobmZyYW1lPW5mcmFtZSk6CisgICAgICAgICAgICAgICAgd2l0aCBzdXBwb3J0LlN1cHByZXNzQ3Jhc2hSZXBvcnQoKToKKyAgICAgICAgICAgICAgICAgICAgYXJncyA9ICgnLVgnLCAndHJhY2VtYWxsb2M9JXMnICUgbmZyYW1lLCAnLWMnLCAncGFzcycpCisgICAgICAgICAgICAgICAgICAgIG9rLCBzdGRvdXQsIHN0ZGVyciA9IGFzc2VydF9weXRob25fZmFpbHVyZSgqYXJncykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihiJy1YIHRyYWNlbWFsbG9jPU5GUkFNRTogaW52YWxpZCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudW1iZXIgb2YgZnJhbWVzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnIpCisKKyAgICBkZWYgdGVzdF9weW1lbV9hbGxvYzAoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzIxNjM5OiBDaGVjayB0aGF0IFB5TWVtX01hbGxvYygwKSB3aXRoIHRyYWNlbWFsbG9jIGVuYWJsZWQKKyAgICAgICAgIyBkb2VzIG5vdCBjcmFzaC4KKyAgICAgICAgY29kZSA9ICdpbXBvcnQgX3Rlc3RjYXBpOyBfdGVzdGNhcGkudGVzdF9weW1lbV9hbGxvYzAoKTsgMScKKyAgICAgICAgYXNzZXJ0X3B5dGhvbl9vaygnLVgnLCAndHJhY2VtYWxsb2MnLCAnLWMnLCBjb2RlKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICBzdXBwb3J0LnJ1bl91bml0dGVzdCgKKyAgICAgICAgVGVzdFRyYWNlbWFsbG9jRW5hYmxlZCwKKyAgICAgICAgVGVzdFNuYXBzaG90LAorICAgICAgICBUZXN0RmlsdGVycywKKyAgICAgICAgVGVzdENvbW1hbmRMaW5lLAorICAgICkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF90dGtfZ3Vpb25seS5weSBiL0xpYi90ZXN0L3Rlc3RfdHRrX2d1aW9ubHkucHkKaW5kZXggM2EzNDU5Yi4uZmNkZWRhYyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF90dGtfZ3Vpb25seS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3R0a19ndWlvbmx5LnB5CkBAIC02LDM1ICs2LDMyIEBACiBzdXBwb3J0LmltcG9ydF9tb2R1bGUoJ190a2ludGVyJykKIAogIyBNYWtlIHN1cmUgdGtpbnRlci5fZml4IHJ1bnMgdG8gc2V0IHVwIHRoZSBlbnZpcm9ubWVudAotc3VwcG9ydC5pbXBvcnRfZnJlc2hfbW9kdWxlKCd0a2ludGVyJykKK3RraW50ZXIgPSBzdXBwb3J0LmltcG9ydF9mcmVzaF9tb2R1bGUoJ3RraW50ZXInKQogCiAjIFNraXAgdGVzdCBpZiB0ayBjYW5ub3QgYmUgaW5pdGlhbGl6ZWQuCi1mcm9tIHRraW50ZXIudGVzdC5zdXBwb3J0IGltcG9ydCBjaGVja190a19hdmFpbGFiaWxpdHkKLWNoZWNrX3RrX2F2YWlsYWJpbGl0eSgpCitzdXBwb3J0LnJlcXVpcmVzKCdndWknKQogCiBmcm9tIF90a2ludGVyIGltcG9ydCBUY2xFcnJvcgogZnJvbSB0a2ludGVyIGltcG9ydCB0dGsKIGZyb20gdGtpbnRlci50ZXN0IGltcG9ydCBydW50a3Rlc3RzCi1mcm9tIHRraW50ZXIudGVzdC5zdXBwb3J0IGltcG9ydCBnZXRfdGtfcm9vdAogCityb290ID0gTm9uZQogdHJ5OgotICAgIHR0ay5CdXR0b24oKQorICAgIHJvb3QgPSB0a2ludGVyLlRrKCkKKyAgICBidXR0b24gPSB0dGsuQnV0dG9uKHJvb3QpCisgICAgYnV0dG9uLmRlc3Ryb3koKQorICAgIGRlbCBidXR0b24KIGV4Y2VwdCBUY2xFcnJvciBhcyBtc2c6CiAgICAgIyBhc3N1bWluZyB0dGsgaXMgbm90IGF2YWlsYWJsZQogICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJ0dGsgbm90IGF2YWlsYWJsZTogJXMiICUgbXNnKQorZmluYWxseToKKyAgICBpZiByb290IGlzIG5vdCBOb25lOgorICAgICAgICByb290LmRlc3Ryb3koKQorICAgIGRlbCByb290CiAKLWRlZiB0ZXN0X21haW4oZW5hYmxlX2d1aT1GYWxzZSk6Ci0gICAgaWYgZW5hYmxlX2d1aToKLSAgICAgICAgaWYgc3VwcG9ydC51c2VfcmVzb3VyY2VzIGlzIE5vbmU6Ci0gICAgICAgICAgICBzdXBwb3J0LnVzZV9yZXNvdXJjZXMgPSBbJ2d1aSddCi0gICAgICAgIGVsaWYgJ2d1aScgbm90IGluIHN1cHBvcnQudXNlX3Jlc291cmNlczoKLSAgICAgICAgICAgIHN1cHBvcnQudXNlX3Jlc291cmNlcy5hcHBlbmQoJ2d1aScpCi0KLSAgICB0cnk6Ci0gICAgICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KAotICAgICAgICAgICAgICAgICpydW50a3Rlc3RzLmdldF90ZXN0cyh0ZXh0PUZhbHNlLCBwYWNrYWdlcz1bJ3Rlc3RfdHRrJ10pKQotICAgIGZpbmFsbHk6Ci0gICAgICAgIGdldF90a19yb290KCkuZGVzdHJveSgpCitkZWYgdGVzdF9tYWluKCk6CisgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoCisgICAgICAgICAgICAqcnVudGt0ZXN0cy5nZXRfdGVzdHModGV4dD1GYWxzZSwgcGFja2FnZXM9Wyd0ZXN0X3R0ayddKSkKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oZW5hYmxlX2d1aT1UcnVlKQorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3R1cGxlLnB5IGIvTGliL3Rlc3QvdGVzdF90dXBsZS5weQppbmRleCBlNDE3MTFjLi41MTg3NWExIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3R1cGxlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdHVwbGUucHkKQEAgLTE2OSwyOSArMTY5LDMxIEBACiAgICAgICAgICMgVXNlcmxpc3QgaXRlcmF0b3JzIGRvbid0IHN1cHBvcnQgcGlja2xpbmcgeWV0IHNpbmNlCiAgICAgICAgICMgdGhleSBhcmUgYmFzZWQgb24gZ2VuZXJhdG9ycy4KICAgICAgICAgZGF0YSA9IHNlbGYudHlwZTJ0ZXN0KFs0LCA1LCA2LCA3XSkKLSAgICAgICAgaXRvcmcgPSBpdGVyKGRhdGEpCi0gICAgICAgIGQgPSBwaWNrbGUuZHVtcHMoaXRvcmcpCi0gICAgICAgIGl0ID0gcGlja2xlLmxvYWRzKGQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShpdG9yZyksIHR5cGUoaXQpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHlwZTJ0ZXN0KGl0KSwgc2VsZi50eXBlMnRlc3QoZGF0YSkpCisgICAgICAgIGZvciBwcm90byBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgaXRvcmcgPSBpdGVyKGRhdGEpCisgICAgICAgICAgICBkID0gcGlja2xlLmR1bXBzKGl0b3JnLCBwcm90bykKKyAgICAgICAgICAgIGl0ID0gcGlja2xlLmxvYWRzKGQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoaXRvcmcpLCB0eXBlKGl0KSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50eXBlMnRlc3QoaXQpLCBzZWxmLnR5cGUydGVzdChkYXRhKSkKIAotICAgICAgICBpdCA9IHBpY2tsZS5sb2FkcyhkKQotICAgICAgICBuZXh0KGl0KQotICAgICAgICBkID0gcGlja2xlLmR1bXBzKGl0KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHlwZTJ0ZXN0KGl0KSwgc2VsZi50eXBlMnRlc3QoZGF0YSlbMTpdKQorICAgICAgICAgICAgaXQgPSBwaWNrbGUubG9hZHMoZCkKKyAgICAgICAgICAgIG5leHQoaXQpCisgICAgICAgICAgICBkID0gcGlja2xlLmR1bXBzKGl0LCBwcm90bykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50eXBlMnRlc3QoaXQpLCBzZWxmLnR5cGUydGVzdChkYXRhKVsxOl0pCiAKICAgICBkZWYgdGVzdF9yZXZlcnNlZF9waWNrbGUoc2VsZik6CiAgICAgICAgIGRhdGEgPSBzZWxmLnR5cGUydGVzdChbNCwgNSwgNiwgN10pCi0gICAgICAgIGl0b3JnID0gcmV2ZXJzZWQoZGF0YSkKLSAgICAgICAgZCA9IHBpY2tsZS5kdW1wcyhpdG9yZykKLSAgICAgICAgaXQgPSBwaWNrbGUubG9hZHMoZCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGl0b3JnKSwgdHlwZShpdCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50eXBlMnRlc3QoaXQpLCBzZWxmLnR5cGUydGVzdChyZXZlcnNlZChkYXRhKSkpCisgICAgICAgIGZvciBwcm90byBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgaXRvcmcgPSByZXZlcnNlZChkYXRhKQorICAgICAgICAgICAgZCA9IHBpY2tsZS5kdW1wcyhpdG9yZywgcHJvdG8pCisgICAgICAgICAgICBpdCA9IHBpY2tsZS5sb2FkcyhkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGl0b3JnKSwgdHlwZShpdCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHlwZTJ0ZXN0KGl0KSwgc2VsZi50eXBlMnRlc3QocmV2ZXJzZWQoZGF0YSkpKQogCi0gICAgICAgIGl0ID0gcGlja2xlLmxvYWRzKGQpCi0gICAgICAgIG5leHQoaXQpCi0gICAgICAgIGQgPSBwaWNrbGUuZHVtcHMoaXQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50eXBlMnRlc3QoaXQpLCBzZWxmLnR5cGUydGVzdChyZXZlcnNlZChkYXRhKSlbMTpdKQorICAgICAgICAgICAgaXQgPSBwaWNrbGUubG9hZHMoZCkKKyAgICAgICAgICAgIG5leHQoaXQpCisgICAgICAgICAgICBkID0gcGlja2xlLmR1bXBzKGl0LCBwcm90bykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50eXBlMnRlc3QoaXQpLCBzZWxmLnR5cGUydGVzdChyZXZlcnNlZChkYXRhKSlbMTpdKQogCiAgICAgZGVmIHRlc3Rfbm9fY29tZGF0X2ZvbGRpbmcoc2VsZik6CiAgICAgICAgICMgSXNzdWUgODg0NzogSW4gdGhlIFBHTyBidWlsZCwgdGhlIE1TVkMgbGlua2VyJ3MgQ09NREFUIGZvbGRpbmcKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdHlwZXMucHkgYi9MaWIvdGVzdC90ZXN0X3R5cGVzLnB5CmluZGV4IDNlZTRjNmIuLjg0OWNiYTkgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdHlwZXMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF90eXBlcy5weQpAQCAtMiw2ICsyLDcgQEAKIAogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgcnVuX3dpdGhfbG9jYWxlCiBpbXBvcnQgY29sbGVjdGlvbnMKK2ltcG9ydCBwaWNrbGUKIGltcG9ydCBsb2NhbGUKIGltcG9ydCBzeXMKIGltcG9ydCB0eXBlcwpAQCAtMTA3Nyw5ICsxMDc4LDE5IEBACiAgICAgICAgIG5zMiA9IHR5cGVzLlNpbXBsZU5hbWVzcGFjZSgpCiAgICAgICAgIG5zMi54ID0gInNwYW0iCiAgICAgICAgIG5zMi5feSA9IDUKKyAgICAgICAgbmFtZSA9ICJuYW1lc3BhY2UiCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKG5zMSksICJuYW1lc3BhY2Uodz0zLCB4PTEsIHk9MikiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIobnMyKSwgIm5hbWVzcGFjZShfeT01LCB4PSdzcGFtJykiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIobnMxKSwgIntuYW1lfSh3PTMsIHg9MSwgeT0yKSIuZm9ybWF0KG5hbWU9bmFtZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihuczIpLCAie25hbWV9KF95PTUsIHg9J3NwYW0nKSIuZm9ybWF0KG5hbWU9bmFtZSkpCisKKyAgICBkZWYgdGVzdF9lcXVhbChzZWxmKToKKyAgICAgICAgbnMxID0gdHlwZXMuU2ltcGxlTmFtZXNwYWNlKHg9MSkKKyAgICAgICAgbnMyID0gdHlwZXMuU2ltcGxlTmFtZXNwYWNlKCkKKyAgICAgICAgbnMyLnggPSAxCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlcy5TaW1wbGVOYW1lc3BhY2UoKSwgdHlwZXMuU2ltcGxlTmFtZXNwYWNlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMxLCBuczIpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwobnMyLCB0eXBlcy5TaW1wbGVOYW1lc3BhY2UoKSkKIAogICAgIGRlZiB0ZXN0X25lc3RlZChzZWxmKToKICAgICAgICAgbnMxID0gdHlwZXMuU2ltcGxlTmFtZXNwYWNlKGE9MSwgYj0yKQpAQCAtMTExNywxMSArMTEyOCwxMiBAQAogICAgICAgICBuczEuc3BhbSA9IG5zMQogICAgICAgICBuczIuc3BhbSA9IG5zMwogICAgICAgICBuczMuc3BhbSA9IG5zMgorICAgICAgICBuYW1lID0gIm5hbWVzcGFjZSIKKyAgICAgICAgcmVwcjEgPSAie25hbWV9KGM9J2Nvb2tpZScsIHNwYW09e25hbWV9KC4uLikpIi5mb3JtYXQobmFtZT1uYW1lKQorICAgICAgICByZXByMiA9ICJ7bmFtZX0oc3BhbT17bmFtZX0oc3BhbT17bmFtZX0oLi4uKSwgeD0xKSkiLmZvcm1hdChuYW1lPW5hbWUpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKG5zMSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWVzcGFjZShjPSdjb29raWUnLCBzcGFtPW5hbWVzcGFjZSguLi4pKSIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihuczIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lc3BhY2Uoc3BhbT1uYW1lc3BhY2Uoc3BhbT1uYW1lc3BhY2UoLi4uKSwgeD0xKSkiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIobnMxKSwgcmVwcjEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihuczIpLCByZXByMikKIAogICAgIGRlZiB0ZXN0X2FzX2RpY3Qoc2VsZik6CiAgICAgICAgIG5zID0gdHlwZXMuU2ltcGxlTmFtZXNwYWNlKHNwYW09J3NwYW1zcGFtc3BhbScpCkBAIC0xMTQ0LDYgKzExNTYsMzUgQEAKICAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKHNwYW0pLCBTcGFtKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhcnMoc3BhbSksIHsnaGFtJzogOCwgJ2VnZ3MnOiA5fSkKIAorICAgIGRlZiB0ZXN0X3BpY2tsZShzZWxmKToKKyAgICAgICAgbnMgPSB0eXBlcy5TaW1wbGVOYW1lc3BhY2UoYnJlYWtmYXN0PSJzcGFtIiwgbHVuY2g9InNwYW0iKQorCisgICAgICAgIGZvciBwcm90b2NvbCBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgcG5hbWUgPSAicHJvdG9jb2wge30iLmZvcm1hdChwcm90b2NvbCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBuc19waWNrbGVkID0gcGlja2xlLmR1bXBzKG5zLCBwcm90b2NvbCkKKyAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IocG5hbWUpIGZyb20gZQorICAgICAgICAgICAgbnNfcm91bmR0cmlwID0gcGlja2xlLmxvYWRzKG5zX3BpY2tsZWQpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMsIG5zX3JvdW5kdHJpcCwgcG5hbWUpCisKKyAgICBkZWYgdGVzdF9mYWtlX25hbWVzcGFjZV9jb21wYXJlKHNlbGYpOgorICAgICAgICAjIElzc3VlICMyNDI1NzogSW5jb3JyZWN0IHVzZSBvZiBQeU9iamVjdF9Jc0luc3RhbmNlKCkgY2F1c2VkCisgICAgICAgICMgU3lzdGVtRXJyb3IuCisgICAgICAgIGNsYXNzIEZha2VTaW1wbGVOYW1lc3BhY2Uoc3RyKToKKyAgICAgICAgICAgIF9fY2xhc3NfXyA9IHR5cGVzLlNpbXBsZU5hbWVzcGFjZQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHR5cGVzLlNpbXBsZU5hbWVzcGFjZSgpID09IEZha2VTaW1wbGVOYW1lc3BhY2UoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cGVzLlNpbXBsZU5hbWVzcGFjZSgpICE9IEZha2VTaW1wbGVOYW1lc3BhY2UoKSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgdHlwZXMuU2ltcGxlTmFtZXNwYWNlKCkgPCBGYWtlU2ltcGxlTmFtZXNwYWNlKCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgdHlwZXMuU2ltcGxlTmFtZXNwYWNlKCkgPD0gRmFrZVNpbXBsZU5hbWVzcGFjZSgpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHR5cGVzLlNpbXBsZU5hbWVzcGFjZSgpID4gRmFrZVNpbXBsZU5hbWVzcGFjZSgpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHR5cGVzLlNpbXBsZU5hbWVzcGFjZSgpID49IEZha2VTaW1wbGVOYW1lc3BhY2UoKQorCiAKIGRlZiB0ZXN0X21haW4oKToKICAgICBydW5fdW5pdHRlc3QoVHlwZXNUZXN0cywgTWFwcGluZ1Byb3h5VGVzdHMsIENsYXNzQ3JlYXRpb25UZXN0cywKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdWNuLnB5IGIvTGliL3Rlc3QvdGVzdF91Y24ucHkKaW5kZXggZGU3MTY4MC4uMWUwN2Y2NiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF91Y24ucHkKKysrIGIvTGliL3Rlc3QvdGVzdF91Y24ucHkKQEAgLTE3MiwxMiArMTcyLDEyIEBACiAKICAgICBkZWYgdGVzdF9uYW1lZF9zZXF1ZW5jZXNfZnVsbChzZWxmKToKICAgICAgICAgIyBDaGVjayBhbGwgdGhlIG5hbWVkIHNlcXVlbmNlcwotICAgICAgICB1cmwgPSAoImh0dHA6Ly93d3cudW5pY29kZS5vcmcvUHVibGljLyVzL3VjZC9OYW1lZFNlcXVlbmNlcy50eHQiICUKKyAgICAgICAgdXJsID0gKCJodHRwOi8vd3d3LnB5dGhvbnRlc3QubmV0L3VuaWNvZGUvJXMvTmFtZWRTZXF1ZW5jZXMudHh0IiAlCiAgICAgICAgICAgICAgICB1bmljb2RlZGF0YS51bmlkYXRhX3ZlcnNpb24pCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHRlc3RkYXRhID0gc3VwcG9ydC5vcGVuX3VybHJlc291cmNlKHVybCwgZW5jb2Rpbmc9InV0Zi04IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrPWNoZWNrX3ZlcnNpb24pCi0gICAgICAgIGV4Y2VwdCAoSU9FcnJvciwgSFRUUEV4Y2VwdGlvbik6CisgICAgICAgIGV4Y2VwdCAoT1NFcnJvciwgSFRUUEV4Y2VwdGlvbik6CiAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJDb3VsZCBub3QgcmV0cmlldmUgIiArIHVybCkKICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHRlc3RkYXRhLmNsb3NlKQogICAgICAgICBmb3IgbGluZSBpbiB0ZXN0ZGF0YToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdW5pY29kZS5weSBiL0xpYi90ZXN0L3Rlc3RfdW5pY29kZS5weQppbmRleCBmMzU5MDgyLi5mMDQ2OTM4IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3VuaWNvZGUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF91bmljb2RlLnB5CkBAIC03LDYgKzcsNyBAQAogIiIiIyIKIGltcG9ydCBfc3RyaW5nCiBpbXBvcnQgY29kZWNzCitpbXBvcnQgaXRlcnRvb2xzCiBpbXBvcnQgc3RydWN0CiBpbXBvcnQgc3lzCiBpbXBvcnQgdW5pdHRlc3QKQEAgLTMxLDYgKzMyLDE5IEBACiAgICAgICAgIHJldHVybiBOb25lCiBjb2RlY3MucmVnaXN0ZXIoc2VhcmNoX2Z1bmN0aW9uKQogCitkZWYgZHVwbGljYXRlX3N0cmluZyh0ZXh0KToKKyAgICAiIiIKKyAgICBUcnkgdG8gZ2V0IGEgZnJlc2ggY2xvbmUgb2YgdGhlIHNwZWNpZmllZCB0ZXh0OgorICAgIG5ldyBvYmplY3Qgd2l0aCBhIHJlZmVyZW5jZSBjb3VudCBvZiAxLgorCisgICAgVGhpcyBpcyBhIGJlc3QtZWZmb3J0OiBsYXRpbjEgc2luZ2xlIGxldHRlcnMgYW5kIHRoZSBlbXB0eQorICAgIHN0cmluZyAoJycpIGFyZSBzaW5nbGV0b25zIGFuZCBjYW5ub3QgYmUgY2xvbmVkLgorICAgICIiIgorICAgIHJldHVybiB0ZXh0LmVuY29kZSgpLmRlY29kZSgpCisKK2NsYXNzIFN0clN1YmNsYXNzKHN0cik6CisgICAgcGFzcworCiBjbGFzcyBVbmljb2RlVGVzdChzdHJpbmdfdGVzdHMuQ29tbW9uVGVzdCwKICAgICAgICAgc3RyaW5nX3Rlc3RzLk1peGluU3RyVW5pY29kZVVzZXJTdHJpbmdUZXN0LAogICAgICAgICBzdHJpbmdfdGVzdHMuTWl4aW5TdHJVbmljb2RlVGVzdCwKQEAgLTE2OSw2ICsxODMsMTkgQEAKICAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgoMywgJ2FhYScsICdjb3VudCcsICAnYScsIC0xMCkKICAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgoMiwgJ2FhYScsICdjb3VudCcsICAnYScsIDAsIC0xKQogICAgICAgICBzZWxmLmNoZWNrZXF1YWxub2ZpeCgwLCAnYWFhJywgJ2NvdW50JywgICdhJywgMCwgLTEwKQorICAgICAgICAjIHRlc3QgbWl4ZWQga2luZHMKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKDEwLCAnXHUwMTAyJyArICdhJyAqIDEwLCAnY291bnQnLCAnYScpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgxMCwgJ1xVMDAxMDAzMDQnICsgJ2EnICogMTAsICdjb3VudCcsICdhJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKDEwLCAnXFUwMDEwMDMwNCcgKyAnXHUwMTAyJyAqIDEwLCAnY291bnQnLCAnXHUwMTAyJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKDAsICdhJyAqIDEwLCAnY291bnQnLCAnXHUwMTAyJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKDAsICdhJyAqIDEwLCAnY291bnQnLCAnXFUwMDEwMDMwNCcpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgwLCAnXHUwMTAyJyAqIDEwLCAnY291bnQnLCAnXFUwMDEwMDMwNCcpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgxMCwgJ1x1MDEwMicgKyAnYV8nICogMTAsICdjb3VudCcsICdhXycpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgxMCwgJ1xVMDAxMDAzMDQnICsgJ2FfJyAqIDEwLCAnY291bnQnLCAnYV8nKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoMTAsICdcVTAwMTAwMzA0JyArICdcdTAxMDJfJyAqIDEwLCAnY291bnQnLCAnXHUwMTAyXycpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgwLCAnYScgKiAxMCwgJ2NvdW50JywgJ2FcdTAxMDInKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoMCwgJ2EnICogMTAsICdjb3VudCcsICdhXFUwMDEwMDMwNCcpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgwLCAnXHUwMTAyJyAqIDEwLCAnY291bnQnLCAnXHUwMTAyXFUwMDEwMDMwNCcpCiAKICAgICBkZWYgdGVzdF9maW5kKHNlbGYpOgogICAgICAgICBzdHJpbmdfdGVzdHMuQ29tbW9uVGVzdC50ZXN0X2ZpbmQoc2VsZikKQEAgLTE4Nyw2ICsyMTQsMTkgQEAKIAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsICdoZWxsbycuZmluZCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCAnaGVsbG8nLmZpbmQsIDQyKQorICAgICAgICAjIHRlc3QgbWl4ZWQga2luZHMKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKDEwMCwgJ1x1MDEwMicgKiAxMDAgKyAnYScsICdmaW5kJywgJ2EnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoMTAwLCAnXFUwMDEwMDMwNCcgKiAxMDAgKyAnYScsICdmaW5kJywgJ2EnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoMTAwLCAnXFUwMDEwMDMwNCcgKiAxMDAgKyAnXHUwMTAyJywgJ2ZpbmQnLCAnXHUwMTAyJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKC0xLCAnYScgKiAxMDAsICdmaW5kJywgJ1x1MDEwMicpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgtMSwgJ2EnICogMTAwLCAnZmluZCcsICdcVTAwMTAwMzA0JykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKC0xLCAnXHUwMTAyJyAqIDEwMCwgJ2ZpbmQnLCAnXFUwMDEwMDMwNCcpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgxMDAsICdcdTAxMDInICogMTAwICsgJ2FfJywgJ2ZpbmQnLCAnYV8nKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoMTAwLCAnXFUwMDEwMDMwNCcgKiAxMDAgKyAnYV8nLCAnZmluZCcsICdhXycpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgxMDAsICdcVTAwMTAwMzA0JyAqIDEwMCArICdcdTAxMDJfJywgJ2ZpbmQnLCAnXHUwMTAyXycpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgtMSwgJ2EnICogMTAwLCAnZmluZCcsICdhXHUwMTAyJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKC0xLCAnYScgKiAxMDAsICdmaW5kJywgJ2FcVTAwMTAwMzA0JykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKC0xLCAnXHUwMTAyJyAqIDEwMCwgJ2ZpbmQnLCAnXHUwMTAyXFUwMDEwMDMwNCcpCiAKICAgICBkZWYgdGVzdF9yZmluZChzZWxmKToKICAgICAgICAgc3RyaW5nX3Rlc3RzLkNvbW1vblRlc3QudGVzdF9yZmluZChzZWxmKQpAQCAtMjAyLDYgKzI0MiwxOSBAQAogICAgICAgICBzZWxmLmNoZWNrZXF1YWxub2ZpeCg5LCAgICdhYmNkZWZnaGlhYmMnLCAncmZpbmQnLCAnYWJjJykKICAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgoMTIsICAnYWJjZGVmZ2hpYWJjJywgJ3JmaW5kJywgJycpCiAgICAgICAgIHNlbGYuY2hlY2tlcXVhbG5vZml4KDEyLCAnYWJjZGVmZ2hpYWJjJywgJ3JmaW5kJywgICcnKQorICAgICAgICAjIHRlc3QgbWl4ZWQga2luZHMKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKDAsICdhJyArICdcdTAxMDInICogMTAwLCAncmZpbmQnLCAnYScpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgwLCAnYScgKyAnXFUwMDEwMDMwNCcgKiAxMDAsICdyZmluZCcsICdhJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKDAsICdcdTAxMDInICsgJ1xVMDAxMDAzMDQnICogMTAwLCAncmZpbmQnLCAnXHUwMTAyJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKC0xLCAnYScgKiAxMDAsICdyZmluZCcsICdcdTAxMDInKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoLTEsICdhJyAqIDEwMCwgJ3JmaW5kJywgJ1xVMDAxMDAzMDQnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoLTEsICdcdTAxMDInICogMTAwLCAncmZpbmQnLCAnXFUwMDEwMDMwNCcpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgwLCAnX2EnICsgJ1x1MDEwMicgKiAxMDAsICdyZmluZCcsICdfYScpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgwLCAnX2EnICsgJ1xVMDAxMDAzMDQnICogMTAwLCAncmZpbmQnLCAnX2EnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoMCwgJ19cdTAxMDInICsgJ1xVMDAxMDAzMDQnICogMTAwLCAncmZpbmQnLCAnX1x1MDEwMicpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgtMSwgJ2EnICogMTAwLCAncmZpbmQnLCAnXHUwMTAyYScpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgtMSwgJ2EnICogMTAwLCAncmZpbmQnLCAnXFUwMDEwMDMwNGEnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoLTEsICdcdTAxMDInICogMTAwLCAncmZpbmQnLCAnXFUwMDEwMDMwNFx1MDEwMicpCiAKICAgICBkZWYgdGVzdF9pbmRleChzZWxmKToKICAgICAgICAgc3RyaW5nX3Rlc3RzLkNvbW1vblRlc3QudGVzdF9pbmRleChzZWxmKQpAQCAtMjEzLDYgKzI2NiwxOSBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCAnYWJjZGVmZ2hpYWInLmluZGV4LCAgJ2FiYycsIDEpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsICdhYmNkZWZnaGknLmluZGV4LCAgJ2doaScsIDgpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsICdhYmNkZWZnaGknLmluZGV4LCAgJ2doaScsIC0xKQorICAgICAgICAjIHRlc3QgbWl4ZWQga2luZHMKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKDEwMCwgJ1x1MDEwMicgKiAxMDAgKyAnYScsICdpbmRleCcsICdhJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKDEwMCwgJ1xVMDAxMDAzMDQnICogMTAwICsgJ2EnLCAnaW5kZXgnLCAnYScpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgxMDAsICdcVTAwMTAwMzA0JyAqIDEwMCArICdcdTAxMDInLCAnaW5kZXgnLCAnXHUwMTAyJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgKCdhJyAqIDEwMCkuaW5kZXgsICdcdTAxMDInKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCAoJ2EnICogMTAwKS5pbmRleCwgJ1xVMDAxMDAzMDQnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCAoJ1x1MDEwMicgKiAxMDApLmluZGV4LCAnXFUwMDEwMDMwNCcpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgxMDAsICdcdTAxMDInICogMTAwICsgJ2FfJywgJ2luZGV4JywgJ2FfJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKDEwMCwgJ1xVMDAxMDAzMDQnICogMTAwICsgJ2FfJywgJ2luZGV4JywgJ2FfJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKDEwMCwgJ1xVMDAxMDAzMDQnICogMTAwICsgJ1x1MDEwMl8nLCAnaW5kZXgnLCAnXHUwMTAyXycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsICgnYScgKiAxMDApLmluZGV4LCAnYVx1MDEwMicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsICgnYScgKiAxMDApLmluZGV4LCAnYVxVMDAxMDAzMDQnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCAoJ1x1MDEwMicgKiAxMDApLmluZGV4LCAnXHUwMTAyXFUwMDEwMDMwNCcpCiAKICAgICBkZWYgdGVzdF9yaW5kZXgoc2VsZik6CiAgICAgICAgIHN0cmluZ190ZXN0cy5Db21tb25UZXN0LnRlc3RfcmluZGV4KHNlbGYpCkBAIC0yMjYsNiArMjkyLDE5IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsICdkZWZnaGlhYmMnLnJpbmRleCwgICdhYmMnLCAwLCAtMSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgJ2FiY2RlZmdoaScucmluZGV4LCAgJ2doaScsIDAsIDgpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsICdhYmNkZWZnaGknLnJpbmRleCwgICdnaGknLCAwLCAtMSkKKyAgICAgICAgIyB0ZXN0IG1peGVkIGtpbmRzCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgwLCAnYScgKyAnXHUwMTAyJyAqIDEwMCwgJ3JpbmRleCcsICdhJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKDAsICdhJyArICdcVTAwMTAwMzA0JyAqIDEwMCwgJ3JpbmRleCcsICdhJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKDAsICdcdTAxMDInICsgJ1xVMDAxMDAzMDQnICogMTAwLCAncmluZGV4JywgJ1x1MDEwMicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsICgnYScgKiAxMDApLnJpbmRleCwgJ1x1MDEwMicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsICgnYScgKiAxMDApLnJpbmRleCwgJ1xVMDAxMDAzMDQnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCAoJ1x1MDEwMicgKiAxMDApLnJpbmRleCwgJ1xVMDAxMDAzMDQnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoMCwgJ19hJyArICdcdTAxMDInICogMTAwLCAncmluZGV4JywgJ19hJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKDAsICdfYScgKyAnXFUwMDEwMDMwNCcgKiAxMDAsICdyaW5kZXgnLCAnX2EnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoMCwgJ19cdTAxMDInICsgJ1xVMDAxMDAzMDQnICogMTAwLCAncmluZGV4JywgJ19cdTAxMDInKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCAoJ2EnICogMTAwKS5yaW5kZXgsICdcdTAxMDJhJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgKCdhJyAqIDEwMCkucmluZGV4LCAnXFUwMDEwMDMwNGEnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCAoJ1x1MDEwMicgKiAxMDApLnJpbmRleCwgJ1xVMDAxMDAzMDRcdTAxMDInKQogCiAgICAgZGVmIHRlc3RfbWFrZXRyYW5zX3RyYW5zbGF0ZShzZWxmKToKICAgICAgICAgIyB0aGVzZSB3b3JrIHdpdGggcGxhaW4gdHJhbnNsYXRlKCkKQEAgLTI2Niw2ICszNDUsNjkgQEAKICAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgoWydhJywgJ2InLCAnYycsICdkJ10sICdhLy9iLy9jLy9kJywgJ3NwbGl0JywgJy8vJykKICAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgoWydhJywgJ2InLCAnYycsICdkJ10sICdhLy9iLy9jLy9kJywgJ3NwbGl0JywgJy8vJykKICAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgoWydlbmRjYXNlICcsICcnXSwgJ2VuZGNhc2UgdGVzdCcsICdzcGxpdCcsICd0ZXN0JykKKyAgICAgICAgIyB0ZXN0IG1peGVkIGtpbmRzCisgICAgICAgIGZvciBsZWZ0LCByaWdodCBpbiAoJ2JhJywgJ1x1MDEwMVx1MDEwMCcsICdcVTAwMDEwMzAxXFUwMDAxMDMwMCcpOgorICAgICAgICAgICAgbGVmdCAqPSA5CisgICAgICAgICAgICByaWdodCAqPSA5CisgICAgICAgICAgICBmb3IgZGVsaW0gaW4gKCdjJywgJ1x1MDEwMicsICdcVTAwMDEwMzAyJyk6CisgICAgICAgICAgICAgICAgc2VsZi5jaGVja2VxdWFsKFtsZWZ0ICsgcmlnaHRdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0ICsgcmlnaHQsICdzcGxpdCcsIGRlbGltKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbbGVmdCwgcmlnaHRdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0ICsgZGVsaW0gKyByaWdodCwgJ3NwbGl0JywgZGVsaW0pCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja2VxdWFsKFtsZWZ0ICsgcmlnaHRdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0ICsgcmlnaHQsICdzcGxpdCcsIGRlbGltICogMikKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrZXF1YWwoW2xlZnQsIHJpZ2h0XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCArIGRlbGltICogMiArIHJpZ2h0LCAnc3BsaXQnLCBkZWxpbSAqMikKKworICAgIGRlZiB0ZXN0X3JzcGxpdChzZWxmKToKKyAgICAgICAgc3RyaW5nX3Rlc3RzLkNvbW1vblRlc3QudGVzdF9yc3BsaXQoc2VsZikKKyAgICAgICAgIyB0ZXN0IG1peGVkIGtpbmRzCisgICAgICAgIGZvciBsZWZ0LCByaWdodCBpbiAoJ2JhJywgJ1x1MDEwMVx1MDEwMCcsICdcVTAwMDEwMzAxXFUwMDAxMDMwMCcpOgorICAgICAgICAgICAgbGVmdCAqPSA5CisgICAgICAgICAgICByaWdodCAqPSA5CisgICAgICAgICAgICBmb3IgZGVsaW0gaW4gKCdjJywgJ1x1MDEwMicsICdcVTAwMDEwMzAyJyk6CisgICAgICAgICAgICAgICAgc2VsZi5jaGVja2VxdWFsKFtsZWZ0ICsgcmlnaHRdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0ICsgcmlnaHQsICdyc3BsaXQnLCBkZWxpbSkKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrZXF1YWwoW2xlZnQsIHJpZ2h0XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCArIGRlbGltICsgcmlnaHQsICdyc3BsaXQnLCBkZWxpbSkKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrZXF1YWwoW2xlZnQgKyByaWdodF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQgKyByaWdodCwgJ3JzcGxpdCcsIGRlbGltICogMikKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrZXF1YWwoW2xlZnQsIHJpZ2h0XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCArIGRlbGltICogMiArIHJpZ2h0LCAncnNwbGl0JywgZGVsaW0gKjIpCisKKyAgICBkZWYgdGVzdF9wYXJ0aXRpb24oc2VsZik6CisgICAgICAgIHN0cmluZ190ZXN0cy5NaXhpblN0clVuaWNvZGVVc2VyU3RyaW5nVGVzdC50ZXN0X3BhcnRpdGlvbihzZWxmKQorICAgICAgICAjIHRlc3QgbWl4ZWQga2luZHMKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCgnQUJDREVGR0gnLCAnJywgJycpLCAnQUJDREVGR0gnLCAncGFydGl0aW9uJywgJ1x1NDIwMCcpCisgICAgICAgIGZvciBsZWZ0LCByaWdodCBpbiAoJ2JhJywgJ1x1MDEwMVx1MDEwMCcsICdcVTAwMDEwMzAxXFUwMDAxMDMwMCcpOgorICAgICAgICAgICAgbGVmdCAqPSA5CisgICAgICAgICAgICByaWdodCAqPSA5CisgICAgICAgICAgICBmb3IgZGVsaW0gaW4gKCdjJywgJ1x1MDEwMicsICdcVTAwMDEwMzAyJyk6CisgICAgICAgICAgICAgICAgc2VsZi5jaGVja2VxdWFsKChsZWZ0ICsgcmlnaHQsICcnLCAnJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQgKyByaWdodCwgJ3BhcnRpdGlvbicsIGRlbGltKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgobGVmdCwgZGVsaW0sIHJpZ2h0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCArIGRlbGltICsgcmlnaHQsICdwYXJ0aXRpb24nLCBkZWxpbSkKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrZXF1YWwoKGxlZnQgKyByaWdodCwgJycsICcnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCArIHJpZ2h0LCAncGFydGl0aW9uJywgZGVsaW0gKiAyKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgobGVmdCwgZGVsaW0gKiAyLCByaWdodCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQgKyBkZWxpbSAqIDIgKyByaWdodCwgJ3BhcnRpdGlvbicsIGRlbGltICogMikKKworICAgIGRlZiB0ZXN0X3JwYXJ0aXRpb24oc2VsZik6CisgICAgICAgIHN0cmluZ190ZXN0cy5NaXhpblN0clVuaWNvZGVVc2VyU3RyaW5nVGVzdC50ZXN0X3JwYXJ0aXRpb24oc2VsZikKKyAgICAgICAgIyB0ZXN0IG1peGVkIGtpbmRzCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgoJycsICcnLCAnQUJDREVGR0gnKSwgJ0FCQ0RFRkdIJywgJ3JwYXJ0aXRpb24nLCAnXHU0MjAwJykKKyAgICAgICAgZm9yIGxlZnQsIHJpZ2h0IGluICgnYmEnLCAnXHUwMTAxXHUwMTAwJywgJ1xVMDAwMTAzMDFcVTAwMDEwMzAwJyk6CisgICAgICAgICAgICBsZWZ0ICo9IDkKKyAgICAgICAgICAgIHJpZ2h0ICo9IDkKKyAgICAgICAgICAgIGZvciBkZWxpbSBpbiAoJ2MnLCAnXHUwMTAyJywgJ1xVMDAwMTAzMDInKToKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrZXF1YWwoKCcnLCAnJywgbGVmdCArIHJpZ2h0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCArIHJpZ2h0LCAncnBhcnRpdGlvbicsIGRlbGltKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgobGVmdCwgZGVsaW0sIHJpZ2h0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCArIGRlbGltICsgcmlnaHQsICdycGFydGl0aW9uJywgZGVsaW0pCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja2VxdWFsKCgnJywgJycsIGxlZnQgKyByaWdodCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQgKyByaWdodCwgJ3JwYXJ0aXRpb24nLCBkZWxpbSAqIDIpCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja2VxdWFsKChsZWZ0LCBkZWxpbSAqIDIsIHJpZ2h0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCArIGRlbGltICogMiArIHJpZ2h0LCAncnBhcnRpdGlvbicsIGRlbGltICogMikKIAogICAgIGRlZiB0ZXN0X2pvaW4oc2VsZik6CiAgICAgICAgIHN0cmluZ190ZXN0cy5NaXhpblN0clVuaWNvZGVVc2VyU3RyaW5nVGVzdC50ZXN0X2pvaW4oc2VsZikKQEAgLTI5Myw2ICs0MzUsMjIgQEAKICAgICAgICAgIyBtZXRob2QgY2FsbCBmb3J3YXJkZWQgZnJvbSBzdHIgaW1wbGVtZW50YXRpb24gYmVjYXVzZSBvZiB1bmljb2RlIGFyZ3VtZW50CiAgICAgICAgIHNlbGYuY2hlY2tlcXVhbG5vZml4KCdvbmVAdHdvIXRocmVlIScsICdvbmUhdHdvIXRocmVlIScsICdyZXBsYWNlJywgJyEnLCAnQCcsIDEpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgJ3JlcGxhY2UnLnJlcGxhY2UsICJyIiwgNDIpCisgICAgICAgICMgdGVzdCBtaXhlZCBraW5kcworICAgICAgICBmb3IgbGVmdCwgcmlnaHQgaW4gKCdiYScsICdcdTAxMDFcdTAxMDAnLCAnXFUwMDAxMDMwMVxVMDAwMTAzMDAnKToKKyAgICAgICAgICAgIGxlZnQgKj0gOQorICAgICAgICAgICAgcmlnaHQgKj0gOQorICAgICAgICAgICAgZm9yIGRlbGltIGluICgnYycsICdcdTAxMDInLCAnXFUwMDAxMDMwMicpOgorICAgICAgICAgICAgICAgIGZvciByZXBsIGluICgnZCcsICdcdTAxMDMnLCAnXFUwMDAxMDMwMycpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmNoZWNrZXF1YWwobGVmdCArIHJpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCArIHJpZ2h0LCAncmVwbGFjZScsIGRlbGltLCByZXBsKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmNoZWNrZXF1YWwobGVmdCArIHJlcGwgKyByaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQgKyBkZWxpbSArIHJpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlcGxhY2UnLCBkZWxpbSwgcmVwbCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5jaGVja2VxdWFsKGxlZnQgKyByaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQgKyByaWdodCwgJ3JlcGxhY2UnLCBkZWxpbSAqIDIsIHJlcGwpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tlcXVhbChsZWZ0ICsgcmVwbCArIHJpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCArIGRlbGltICogMiArIHJpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlcGxhY2UnLCBkZWxpbSAqIDIsIHJlcGwpCiAKICAgICBAc3VwcG9ydC5jcHl0aG9uX29ubHkKICAgICBkZWYgdGVzdF9yZXBsYWNlX2lkKHNlbGYpOgpAQCAtNjY1LDcgKzgyMywxNSBAQAogICAgIEBzdXBwb3J0LmNweXRob25fb25seQogICAgIGRlZiB0ZXN0X2Nhc2Vfb3BlcmF0aW9uX292ZXJmbG93KHNlbGYpOgogICAgICAgICAjIElzc3VlICMyMjY0MwotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCAoIsO8IiooMioqMzIvLzEyICsgMSkpLnVwcGVyKQorICAgICAgICBzaXplID0gMioqMzIvLzEyICsgMQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzID0gIsO8IiAqIHNpemUKKyAgICAgICAgZXhjZXB0IE1lbW9yeUVycm9yOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgnbm8gZW5vdWdoIG1lbW9yeSAoJS4wZiBNaUIgcmVxdWlyZWQpJyAlIChzaXplIC8gMioqMjApKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBzLnVwcGVyKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZGVsIHMKIAogICAgIGRlZiB0ZXN0X2NvbnRhaW5zKHNlbGYpOgogICAgICAgICAjIFRlc3RpbmcgVW5pY29kZSBjb250YWlucyBtZXRob2QKQEAgLTY5Nyw2ICs4NjMsMTQgQEAKICAgICAgICAgc2VsZi5hc3NlcnROb3RJbignYXNkZicsICcnKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgImFiYyIuX19jb250YWluc19fKQorICAgICAgICAjIHRlc3QgbWl4ZWQga2luZHMKKyAgICAgICAgZm9yIGZpbGwgaW4gKCdhJywgJ1x1MDEwMCcsICdcVTAwMDEwMzAwJyk6CisgICAgICAgICAgICBmaWxsICo9IDkKKyAgICAgICAgICAgIGZvciBkZWxpbSBpbiAoJ2MnLCAnXHUwMTAyJywgJ1xVMDAwMTAzMDInKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKGRlbGltLCBmaWxsKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZGVsaW0sIGZpbGwgKyBkZWxpbSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKGRlbGltICogMiwgZmlsbCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKGRlbGltICogMiwgZmlsbCArIGRlbGltICogMikKIAogICAgIGRlZiB0ZXN0X2lzc3VlMTgxODMoc2VsZik6CiAgICAgICAgICdcVTAwMDEwMDAwXFUwMDEwMDAwMCcubG93ZXIoKQpAQCAtODQwLDYgKzEwMTQsMjcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezA6MTAwMDB9Jy5mb3JtYXQoJycpLCAnICcgKiAxMDAwMCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezA6MTAwMDAwMDB9Jy5mb3JtYXQoJycpLCAnICcgKiAxMDAwMDAwMCkKIAorICAgICAgICAjIGlzc3VlIDEyNTQ2OiB1c2UgXHgwMCBhcyBhIGZpbGwgY2hhcmFjdGVyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOlx4MDA8NnN9Jy5mb3JtYXQoJ2ZvbycpLCAnZm9vXHgwMFx4MDBceDAwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezA6XHgwMTw2c30nLmZvcm1hdCgnZm9vJyksICdmb29ceDAxXHgwMVx4MDEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MDpceDAwXjZzfScuZm9ybWF0KCdmb28nKSwgJ1x4MDBmb29ceDAwXHgwMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOl42c30nLmZvcm1hdCgnZm9vJyksICcgZm9vICAnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOlx4MDA8Nn0nLmZvcm1hdCgzKSwgJzNceDAwXHgwMFx4MDBceDAwXHgwMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOlx4MDE8Nn0nLmZvcm1hdCgzKSwgJzNceDAxXHgwMVx4MDFceDAxXHgwMScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOlx4MDBeNn0nLmZvcm1hdCgzKSwgJ1x4MDBceDAwM1x4MDBceDAwXHgwMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOjw2fScuZm9ybWF0KDMpLCAnMyAgICAgJykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MDpceDAwPDZ9Jy5mb3JtYXQoMy4xNCksICczLjE0XHgwMFx4MDAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MDpceDAxPDZ9Jy5mb3JtYXQoMy4xNCksICczLjE0XHgwMVx4MDEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MDpceDAwXjZ9Jy5mb3JtYXQoMy4xNCksICdceDAwMy4xNFx4MDAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MDpeNn0nLmZvcm1hdCgzLjE0KSwgJyAzLjE0ICcpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezA6XHgwMDwxMn0nLmZvcm1hdCgzKzIuMGopLCAnKDMrMmopXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezA6XHgwMTwxMn0nLmZvcm1hdCgzKzIuMGopLCAnKDMrMmopXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezA6XHgwMF4xMn0nLmZvcm1hdCgzKzIuMGopLCAnXHgwMFx4MDBceDAwKDMrMmopXHgwMFx4MDBceDAwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezA6XjEyfScuZm9ybWF0KDMrMi4waiksICcgICAoMysyaikgICAnKQorCiAgICAgICAgICMgZm9ybWF0IHNwZWNpZmllcnMgZm9yIHVzZXIgZGVmaW5lZCB0eXBlCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOmFiY30nLmZvcm1hdChDKCkpLCAnYWJjJykKIApAQCAtODY5LDExICsxMDY0LDkgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezA6ZH0nLmZvcm1hdChHKCdkYXRhJykpLCAnRyhkYXRhKScpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swIXN9Jy5mb3JtYXQoRygnZGF0YScpKSwgJ3N0cmluZyBpcyBkYXRhJykKIAotICAgICAgICBtc2cgPSAnb2JqZWN0Ll9fZm9ybWF0X18gd2l0aCBhIG5vbi1lbXB0eSBmb3JtYXQgc3RyaW5nIGlzIGRlcHJlY2F0ZWQnCi0gICAgICAgIHdpdGggc3VwcG9ydC5jaGVja193YXJuaW5ncygobXNnLCBEZXByZWNhdGlvbldhcm5pbmcpKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOl4xMH0nLmZvcm1hdChFKCdkYXRhJykpLCAnIEUoZGF0YSkgICcpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MDpeMTBzfScuZm9ybWF0KEUoJ2RhdGEnKSksICcgRShkYXRhKSAgJykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOj4xNXN9Jy5mb3JtYXQoRygnZGF0YScpKSwgJyBzdHJpbmcgaXMgZGF0YScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgJ3swOl4xMH0nLmZvcm1hdCwgRSgnZGF0YScpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsICd7MDpeMTBzfScuZm9ybWF0LCBFKCdkYXRhJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgJ3swOj4xNXN9Jy5mb3JtYXQsIEcoJ2RhdGEnKSkKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJ7MDpkYXRlOiAlWS0lbS0lZH0iLmZvcm1hdChJKHllYXI9MjAwNywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb250aD04LApAQCAtOTA5LDcgKzExMDIsNyBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCAiezAiLmZvcm1hdCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgInswLn0iLmZvcm1hdCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgInswLn0iLmZvcm1hdCwgMCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgInswW30iLmZvcm1hdCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgInswW30iLmZvcm1hdCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgInswW30iLmZvcm1hdCwgW10pCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCAgICJ7MF19Ii5mb3JtYXQpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsICJ7MC5bXX0iLmZvcm1hdCwgMCkKQEAgLTk2MSw2ICsxMTU0LDE1IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgJycpCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgie1t7fV19Ii5mb3JtYXQoeyJ7fSI6IDV9KSwgIjUiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJ7W3t9XX0iLmZvcm1hdCh7Int9IiA6ICJhIn0pLCAiYSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIntbe119Ii5mb3JtYXQoeyJ7IiA6ICJhIn0pLCAiYSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIntbfV19Ii5mb3JtYXQoeyJ9IiA6ICJhIn0pLCAiYSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIntbW119Ii5mb3JtYXQoeyJbIiA6ICJhIn0pLCAiYSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIntbIV19Ii5mb3JtYXQoeyIhIiA6ICJhIn0pLCAiYSIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsICJ7YXt9Yn0iLmZvcm1hdCwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsICJ7YXtifSIuZm9ybWF0LCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgIntbfSIuZm9ybWF0LCA0MikKKwogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCIweHs6MHs6ZH1YfSIuZm9ybWF0KDB4MCwxNiksICIweDAwMDAwMDAwMDAwMDAwMDAiKQogCiAgICAgZGVmIHRlc3RfZm9ybWF0X21hcChzZWxmKToKQEAgLTExMTQsNiArMTMxNiw2NyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCclLjFzJyAlICJhXHhlOVx1MjBhYyIsICdhJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJS4ycycgJSAiYVx4ZTlcdTIwYWMiLCAnYVx4ZTknKQogCisgICAgICAgICNpc3N1ZSAxOTk5NQorICAgICAgICBjbGFzcyBQc3VlZG9JbnQ6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWUpOgorICAgICAgICAgICAgICAgIHNlbGYudmFsdWUgPSBpbnQodmFsdWUpCisgICAgICAgICAgICBkZWYgX19pbnRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi52YWx1ZQorICAgICAgICAgICAgZGVmIF9faW5kZXhfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi52YWx1ZQorICAgICAgICBjbGFzcyBQc3VlZG9GbG9hdDoKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZSk6CisgICAgICAgICAgICAgICAgc2VsZi52YWx1ZSA9IGZsb2F0KHZhbHVlKQorICAgICAgICAgICAgZGVmIF9faW50X18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIGludChzZWxmLnZhbHVlKQorICAgICAgICBwaSA9IFBzdWVkb0Zsb2F0KDMuMTQxNSkKKyAgICAgICAgbGV0dGVyX20gPSBQc3VlZG9JbnQoMTA5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcleCcgJSA0MiwgJzJhJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJVgnICUgMTUsICdGJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJW8nICUgOSwgJzExJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJWMnICUgMTA5LCAnbScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJyV4JyAlIGxldHRlcl9tLCAnNmQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCclWCcgJSBsZXR0ZXJfbSwgJzZEJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJW8nICUgbGV0dGVyX20sICcxNTUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCclYycgJSBsZXR0ZXJfbSwgJ20nKQorICAgICAgICBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZywgJyV4Jy5fX21vZF9fLCBwaSksCisgICAgICAgIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nLCAnJXgnLl9fbW9kX18sIDMuMTQpLAorICAgICAgICBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZywgJyVYJy5fX21vZF9fLCAyLjExKSwKKyAgICAgICAgc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcsICclbycuX19tb2RfXywgMS43OSksCisgICAgICAgIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nLCAnJWMnLl9fbW9kX18sIHBpKSwKKworICAgIGRlZiB0ZXN0X2Zvcm1hdHRpbmdfd2l0aF9lbnVtKHNlbGYpOgorICAgICAgICAjIGlzc3VlMTg3ODAKKyAgICAgICAgaW1wb3J0IGVudW0KKyAgICAgICAgY2xhc3MgRmxvYXQoZmxvYXQsIGVudW0uRW51bSk6CisgICAgICAgICAgICBQSSA9IDMuMTQxNTkyNgorICAgICAgICBjbGFzcyBJbnQoZW51bS5JbnRFbnVtKToKKyAgICAgICAgICAgIElERVMgPSAxNQorICAgICAgICBjbGFzcyBTdHIoc3RyLCBlbnVtLkVudW0pOgorICAgICAgICAgICAgQUJDID0gJ2FiYycKKyAgICAgICAgIyBUZXN0aW5nIFVuaWNvZGUgZm9ybWF0dGluZyBzdHJpbmdzLi4uCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIiVzLCAlcyIgJSAoU3RyLkFCQywgU3RyLkFCQyksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1N0ci5BQkMsIFN0ci5BQkMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCIlcywgJXMsICVkLCAlaSwgJXUsICVmLCAlNS4yZiIgJQorICAgICAgICAgICAgICAgICAgICAgICAgKFN0ci5BQkMsIFN0ci5BQkMsCisgICAgICAgICAgICAgICAgICAgICAgICAgSW50LklERVMsIEludC5JREVTLCBJbnQuSURFUywKKyAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdC5QSSwgRmxvYXQuUEkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICdTdHIuQUJDLCBTdHIuQUJDLCAxNSwgMTUsIDE1LCAzLjE0MTU5MywgIDMuMTQnKQorCisgICAgICAgICMgZm9ybWF0dGluZyBqb2JzIGRlbGVnYXRlZCBmcm9tIHRoZSBzdHJpbmcgaW1wbGVtZW50YXRpb246CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJy4uLiUoZm9vKXMuLi4nICUgeydmb28nOlN0ci5BQkN9LAorICAgICAgICAgICAgICAgICAgICAgICAgICcuLi5TdHIuQUJDLi4uJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnLi4uJShmb28pcy4uLicgJSB7J2Zvbyc6SW50LklERVN9LAorICAgICAgICAgICAgICAgICAgICAgICAgICcuLi5JbnQuSURFUy4uLicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJy4uLiUoZm9vKWkuLi4nICUgeydmb28nOkludC5JREVTfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnLi4uMTUuLi4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcuLi4lKGZvbylkLi4uJyAlIHsnZm9vJzpJbnQuSURFU30sCisgICAgICAgICAgICAgICAgICAgICAgICAgJy4uLjE1Li4uJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnLi4uJShmb28pdS4uLicgJSB7J2Zvbyc6SW50LklERVMsICdkZWYnOkZsb2F0LlBJfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnLi4uMTUuLi4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcuLi4lKGZvbylmLi4uJyAlIHsnZm9vJzpGbG9hdC5QSSwnZGVmJzoxMjN9LAorICAgICAgICAgICAgICAgICAgICAgICAgICcuLi4zLjE0MTU5My4uLicpCisKICAgICBkZWYgdGVzdF9mb3JtYXR0aW5nX2h1Z2VfcHJlY2lzaW9uKHNlbGYpOgogICAgICAgICBmb3JtYXRfc3RyaW5nID0gIiUue31mIi5mb3JtYXQoc3lzLm1heHNpemUgKyAxKQogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgpAQCAtMTE1MiwxMSArMTQxNSw4IEBACiAgICAgICAgICAgICAndW5pY29kZSByZW1haW5zIHVuaWNvZGUnCiAgICAgICAgICkKIAotICAgICAgICBjbGFzcyBVbmljb2RlU3ViY2xhc3Moc3RyKToKLSAgICAgICAgICAgIHBhc3MKLQogICAgICAgICBmb3IgdGV4dCBpbiAoJ2FzY2lpJywgJ1x4ZTknLCAnXHUyMGFjJywgJ1xVMDAxMEZGRkYnKToKLSAgICAgICAgICAgIHN1YmNsYXNzID0gVW5pY29kZVN1YmNsYXNzKHRleHQpCisgICAgICAgICAgICBzdWJjbGFzcyA9IFN0clN1YmNsYXNzKHRleHQpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihzdWJjbGFzcyksIHRleHQpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzdWJjbGFzcyksIGxlbih0ZXh0KSkKICAgICAgICAgICAgIGlmIHRleHQgPT0gJ2FzY2lpJzoKQEAgLTEyNzIsNyArMTUzMiw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYicrMkFIYWI5emUtJy5kZWNvZGUoJ3V0Zi03JyksICdcdUQ4MDFcVTAwMGFiY2RlJykKIAogICAgICAgICAjIElzc3VlICMyMjQyOiBjcmFzaCBvbiBzb21lIFdpbmRvd3MvTVNWQyB2ZXJzaW9ucwotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInK1x4YzEnLmRlY29kZSgndXRmLTcnKSwgJ1x4YzEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInK1x4YzEnLmRlY29kZSgndXRmLTcnLCAnaWdub3JlJyksICcnKQogCiAgICAgICAgICMgRGlyZWN0IGVuY29kZWQgY2hhcmFjdGVycwogICAgICAgICBzZXRfZCA9ICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OScoKSwtLi86PyIKQEAgLTEzNDEsOSArMTYwMSw5IEBACiAgICAgZGVmIHRlc3RfdXRmOF9kZWNvZGVfaW52YWxpZF9zZXF1ZW5jZXMoc2VsZik6CiAgICAgICAgICMgY29udGludWF0aW9uIGJ5dGVzIGluIGEgc2VxdWVuY2Ugb2YgMiwgMywgb3IgNCBieXRlcwogICAgICAgICBjb250aW51YXRpb25fYnl0ZXMgPSBbYnl0ZXMoW3hdKSBmb3IgeCBpbiByYW5nZSgweDgwLCAweEMwKV0KLSAgICAgICAgIyBzdGFydCBieXRlcyBvZiBhIDItYnl0ZSBzZXF1ZW5jZSBlcXVpdmFsZW50IHRvIGNvZGVwb2ludHMgPCAweDdGCisgICAgICAgICMgc3RhcnQgYnl0ZXMgb2YgYSAyLWJ5dGUgc2VxdWVuY2UgZXF1aXZhbGVudCB0byBjb2RlIHBvaW50cyA8IDB4N0YKICAgICAgICAgaW52YWxpZF8yQl9zZXFfc3RhcnRfYnl0ZXMgPSBbYnl0ZXMoW3hdKSBmb3IgeCBpbiByYW5nZSgweEMwLCAweEMyKV0KLSAgICAgICAgIyBzdGFydCBieXRlcyBvZiBhIDQtYnl0ZSBzZXF1ZW5jZSBlcXVpdmFsZW50IHRvIGNvZGVwb2ludHMgPiAweDEwRkZGRgorICAgICAgICAjIHN0YXJ0IGJ5dGVzIG9mIGEgNC1ieXRlIHNlcXVlbmNlIGVxdWl2YWxlbnQgdG8gY29kZSBwb2ludHMgPiAweDEwRkZGRgogICAgICAgICBpbnZhbGlkXzRCX3NlcV9zdGFydF9ieXRlcyA9IFtieXRlcyhbeF0pIGZvciB4IGluIHJhbmdlKDB4RjUsIDB4RjgpXQogICAgICAgICBpbnZhbGlkX3N0YXJ0X2J5dGVzID0gKAogICAgICAgICAgICAgY29udGludWF0aW9uX2J5dGVzICsgaW52YWxpZF8yQl9zZXFfc3RhcnRfYnl0ZXMgKwpAQCAtMTcxNCw2ICsxOTc0LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVycm9yLCBzdHIsIGInQW5kclwyMDIgeCcsICdhc2NpaScsICdzdHJpY3QnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihiJ0FuZHJcMjAyIHgnLCAnYXNjaWknLCAnaWdub3JlJyksICJBbmRyIHgiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihiJ0FuZHJcMjAyIHgnLCAnYXNjaWknLCAncmVwbGFjZScpLCAnQW5kclx1RkZGRCB4JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoYidcMjAyIHgnLCAnYXNjaWknLCAncmVwbGFjZScpLCAnXHVGRkZEIHgnKQogCiAgICAgICAgICMgRXJyb3IgaGFuZGxpbmcgKHVua25vd24gY2hhcmFjdGVyIG5hbWVzKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIiXFxOe2Zvb314eCIuZGVjb2RlKCJ1bmljb2RlLWVzY2FwZSIsICJpZ25vcmUiKSwgInh4IikKQEAgLTE3OTQsMTAgKzIwNTUsMTAgQEAKICAgICAgICAgIyAwLTEyNwogICAgICAgICBzID0gYnl0ZXMocmFuZ2UoMTI4KSkKICAgICAgICAgZm9yIGVuY29kaW5nIGluICgKLSAgICAgICAgICAgICdjcDAzNycsICdjcDEwMjYnLAorICAgICAgICAgICAgJ2NwMDM3JywgJ2NwMTAyNicsICdjcDI3MycsCiAgICAgICAgICAgICAnY3A0MzcnLCAnY3A1MDAnLCAnY3A3MjAnLCAnY3A3MzcnLCAnY3A3NzUnLCAnY3A4NTAnLAogICAgICAgICAgICAgJ2NwODUyJywgJ2NwODU1JywgJ2NwODU4JywgJ2NwODYwJywgJ2NwODYxJywgJ2NwODYyJywKLSAgICAgICAgICAgICdjcDg2MycsICdjcDg2NScsICdjcDg2NicsCisgICAgICAgICAgICAnY3A4NjMnLCAnY3A4NjUnLCAnY3A4NjYnLCAnY3AxMTI1JywKICAgICAgICAgICAgICdpc284ODU5XzEwJywgJ2lzbzg4NTlfMTMnLCAnaXNvODg1OV8xNCcsICdpc284ODU5XzE1JywKICAgICAgICAgICAgICdpc284ODU5XzInLCAnaXNvODg1OV8zJywgJ2lzbzg4NTlfNCcsICdpc284ODU5XzUnLCAnaXNvODg1OV82JywKICAgICAgICAgICAgICdpc284ODU5XzcnLCAnaXNvODg1OV85JywgJ2tvaThfcicsICdsYXRpbl8xJywKQEAgLTE4MjIsMTAgKzIwODMsMTAgQEAKICAgICAgICAgIyAxMjgtMjU1CiAgICAgICAgIHMgPSBieXRlcyhyYW5nZSgxMjgsIDI1NikpCiAgICAgICAgIGZvciBlbmNvZGluZyBpbiAoCi0gICAgICAgICAgICAnY3AwMzcnLCAnY3AxMDI2JywKKyAgICAgICAgICAgICdjcDAzNycsICdjcDEwMjYnLCAnY3AyNzMnLAogICAgICAgICAgICAgJ2NwNDM3JywgJ2NwNTAwJywgJ2NwNzIwJywgJ2NwNzM3JywgJ2NwNzc1JywgJ2NwODUwJywKICAgICAgICAgICAgICdjcDg1MicsICdjcDg1NScsICdjcDg1OCcsICdjcDg2MCcsICdjcDg2MScsICdjcDg2MicsCi0gICAgICAgICAgICAnY3A4NjMnLCAnY3A4NjUnLCAnY3A4NjYnLAorICAgICAgICAgICAgJ2NwODYzJywgJ2NwODY1JywgJ2NwODY2JywgJ2NwMTEyNScsCiAgICAgICAgICAgICAnaXNvODg1OV8xMCcsICdpc284ODU5XzEzJywgJ2lzbzg4NTlfMTQnLCAnaXNvODg1OV8xNScsCiAgICAgICAgICAgICAnaXNvODg1OV8yJywgJ2lzbzg4NTlfNCcsICdpc284ODU5XzUnLAogICAgICAgICAgICAgJ2lzbzg4NTlfOScsICdrb2k4X3InLCAnbGF0aW5fMScsCkBAIC0xODg4LDY0ICsyMTQ5LDI5IEBACiAgICAgICAgICAgICBzZWxmLmZhaWwoIlNob3VsZCBoYXZlIHJhaXNlZCBVbmljb2RlRGVjb2RlRXJyb3IiKQogCiAgICAgZGVmIHRlc3RfY29udmVyc2lvbihzZWxmKToKLSAgICAgICAgIyBNYWtlIHN1cmUgX191bmljb2RlX18oKSB3b3JrcyBwcm9wZXJseQotICAgICAgICBjbGFzcyBGb28wOgorICAgICAgICAjIE1ha2Ugc3VyZSBfX3N0cl9fKCkgd29ya3MgcHJvcGVybHkKKyAgICAgICAgY2xhc3MgT2JqZWN0VG9TdHI6CiAgICAgICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKICAgICAgICAgICAgICAgICByZXR1cm4gImZvbyIKIAotICAgICAgICBjbGFzcyBGb28xOgorICAgICAgICBjbGFzcyBTdHJTdWJjbGFzc1RvU3RyKHN0cik6CiAgICAgICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKICAgICAgICAgICAgICAgICByZXR1cm4gImZvbyIKIAotICAgICAgICBjbGFzcyBGb28yKG9iamVjdCk6Ci0gICAgICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKLSAgICAgICAgICAgICAgICByZXR1cm4gImZvbyIKLQotICAgICAgICBjbGFzcyBGb28zKG9iamVjdCk6Ci0gICAgICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKLSAgICAgICAgICAgICAgICByZXR1cm4gImZvbyIKLQotICAgICAgICBjbGFzcyBGb280KHN0cik6Ci0gICAgICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKLSAgICAgICAgICAgICAgICByZXR1cm4gImZvbyIKLQotICAgICAgICBjbGFzcyBGb281KHN0cik6Ci0gICAgICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKLSAgICAgICAgICAgICAgICByZXR1cm4gImZvbyIKLQotICAgICAgICBjbGFzcyBGb282KHN0cik6Ci0gICAgICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKLSAgICAgICAgICAgICAgICByZXR1cm4gImZvb3MiCi0KLSAgICAgICAgICAgIGRlZiBfX3N0cl9fKHNlbGYpOgotICAgICAgICAgICAgICAgIHJldHVybiAiZm9vdSIKLQotICAgICAgICBjbGFzcyBGb283KHN0cik6Ci0gICAgICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKLSAgICAgICAgICAgICAgICByZXR1cm4gImZvb3MiCi0gICAgICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKLSAgICAgICAgICAgICAgICByZXR1cm4gImZvb3UiCi0KLSAgICAgICAgY2xhc3MgRm9vOChzdHIpOgorICAgICAgICBjbGFzcyBTdHJTdWJjbGFzc1RvU3RyU3ViY2xhc3Moc3RyKToKICAgICAgICAgICAgIGRlZiBfX25ld19fKGNscywgY29udGVudD0iIik6CiAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ci5fX25ld19fKGNscywgMipjb250ZW50KQogICAgICAgICAgICAgZGVmIF9fc3RyX18oc2VsZik6CiAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKIAotICAgICAgICBjbGFzcyBGb285KHN0cik6Ci0gICAgICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKLSAgICAgICAgICAgICAgICByZXR1cm4gIm5vdCB1bmljb2RlIgotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKEZvbzAoKSksICJmb28iKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihGb28xKCkpLCAiZm9vIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoRm9vMigpKSwgImZvbyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKEZvbzMoKSksICJmb28iKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihGb280KCJiYXIiKSksICJmb28iKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihGb281KCJiYXIiKSksICJmb28iKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihGb282KCJiYXIiKSksICJmb291IikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoRm9vNygiYmFyIikpLCAiZm9vdSIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKEZvbzgoImZvbyIpKSwgImZvb2ZvbyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKEZvbzkoImZvbyIpKSwgIm5vdCB1bmljb2RlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoT2JqZWN0VG9TdHIoKSksICJmb28iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihTdHJTdWJjbGFzc1RvU3RyKCJiYXIiKSksICJmb28iKQorICAgICAgICBzID0gc3RyKFN0clN1YmNsYXNzVG9TdHJTdWJjbGFzcygiZm9vIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgImZvb2ZvbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShzKSwgU3RyU3ViY2xhc3NUb1N0clN1YmNsYXNzKQorICAgICAgICBzID0gU3RyU3ViY2xhc3MoU3RyU3ViY2xhc3NUb1N0clN1YmNsYXNzKCJmb28iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCAiZm9vZm9vIikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKHMpLCBTdHJTdWJjbGFzcykKIAogICAgIGRlZiB0ZXN0X3VuaWNvZGVfcmVwcihzZWxmKToKICAgICAgICAgY2xhc3MgczE6CkBAIC0yMDY4LDEzICsyMjk0LDgyIEBACiAgICAgICAgIGNoZWNrX2Zvcm1hdCgnJWFiYycsCiAgICAgICAgICAgICAgICAgICAgICBiJyUlJXMnLCBiJ2FiYycpCiAKLSAgICAgICAgIyB0ZXN0ICVTCi0gICAgICAgIGNoZWNrX2Zvcm1hdCgicmVwcj1cdTIwYWNBQkMiLAotICAgICAgICAgICAgICAgICAgICAgYidyZXByPSVTJywgJ1x1MjBhY0FCQycpCisgICAgICAgICMgdHJ1bmNhdGVkIHN0cmluZworICAgICAgICBjaGVja19mb3JtYXQoJ2FiYycsCisgICAgICAgICAgICAgICAgICAgICBiJyUuM3MnLCBiJ2FiY2RlZicpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgnYWJjW1x1ZmZmZCcsCisgICAgICAgICAgICAgICAgICAgICBiJyUuNXMnLCAnYWJjW1x1MjBhY10nLmVuY29kZSgndXRmOCcpKQorICAgICAgICBjaGVja19mb3JtYXQoIidcXHUyMGFjQUJDJyIsCisgICAgICAgICAgICAgICAgICAgICBiJyVBJywgJ1x1MjBhY0FCQycpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgiJ1xcdTIwIiwKKyAgICAgICAgICAgICAgICAgICAgIGInJS41QScsICdcdTIwYWNBQkNERUYnKQorICAgICAgICBjaGVja19mb3JtYXQoIidcdTIwYWNBQkMnIiwKKyAgICAgICAgICAgICAgICAgICAgIGInJVInLCAnXHUyMGFjQUJDJykKKyAgICAgICAgY2hlY2tfZm9ybWF0KCInXHUyMGFjQSIsCisgICAgICAgICAgICAgICAgICAgICBiJyUuM1InLCAnXHUyMGFjQUJDREVGJykKKyAgICAgICAgY2hlY2tfZm9ybWF0KCdcdTIwYWNBQicsCisgICAgICAgICAgICAgICAgICAgICBiJyUuM1MnLCAnXHUyMGFjQUJDREVGJykKKyAgICAgICAgY2hlY2tfZm9ybWF0KCdcdTIwYWNBQicsCisgICAgICAgICAgICAgICAgICAgICBiJyUuM1UnLCAnXHUyMGFjQUJDREVGJykKKyAgICAgICAgY2hlY2tfZm9ybWF0KCdcdTIwYWNBQicsCisgICAgICAgICAgICAgICAgICAgICBiJyUuM1YnLCAnXHUyMGFjQUJDREVGJywgTm9uZSkKKyAgICAgICAgY2hlY2tfZm9ybWF0KCdhYmNbXHVmZmZkJywKKyAgICAgICAgICAgICAgICAgICAgIGInJS41VicsIE5vbmUsICdhYmNbXHUyMGFjXScuZW5jb2RlKCd1dGY4JykpCiAKLSAgICAgICAgIyB0ZXN0ICVSCi0gICAgICAgIGNoZWNrX2Zvcm1hdCgicmVwcj0nXHUyMGFjQUJDJyIsCi0gICAgICAgICAgICAgICAgICAgICBiJ3JlcHI9JVInLCAnXHUyMGFjQUJDJykKKyAgICAgICAgIyBmb2xsb3dpbmcgdGVzdHMgY29tZXMgZnJvbSAjNzMzMAorICAgICAgICAjIHRlc3Qgd2lkdGggbW9kaWZpZXIgYW5kIHByZWNpc2lvbiBtb2RpZmllciB3aXRoICVTCisgICAgICAgIGNoZWNrX2Zvcm1hdCgicmVwcj0gIGFiYyIsCisgICAgICAgICAgICAgICAgICAgICBiJ3JlcHI9JTVTJywgJ2FiYycpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgicmVwcj1hYiIsCisgICAgICAgICAgICAgICAgICAgICBiJ3JlcHI9JS4yUycsICdhYmMnKQorICAgICAgICBjaGVja19mb3JtYXQoInJlcHI9ICAgYWIiLAorICAgICAgICAgICAgICAgICAgICAgYidyZXByPSU1LjJTJywgJ2FiYycpCisKKyAgICAgICAgIyB0ZXN0IHdpZHRoIG1vZGlmaWVyIGFuZCBwcmVjaXNpb24gbW9kaWZpZXIgd2l0aCAlUgorICAgICAgICBjaGVja19mb3JtYXQoInJlcHI9ICAgJ2FiYyciLAorICAgICAgICAgICAgICAgICAgICAgYidyZXByPSU4UicsICdhYmMnKQorICAgICAgICBjaGVja19mb3JtYXQoInJlcHI9J2FiIiwKKyAgICAgICAgICAgICAgICAgICAgIGIncmVwcj0lLjNSJywgJ2FiYycpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgicmVwcj0gICdhYiIsCisgICAgICAgICAgICAgICAgICAgICBiJ3JlcHI9JTUuM1InLCAnYWJjJykKKworICAgICAgICAjIHRlc3Qgd2lkdGggbW9kaWZpZXIgYW5kIHByZWNpc2lvbiBtb2RpZmllciB3aXRoICVBCisgICAgICAgIGNoZWNrX2Zvcm1hdCgicmVwcj0gICAnYWJjJyIsCisgICAgICAgICAgICAgICAgICAgICBiJ3JlcHI9JThBJywgJ2FiYycpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgicmVwcj0nYWIiLAorICAgICAgICAgICAgICAgICAgICAgYidyZXByPSUuM0EnLCAnYWJjJykKKyAgICAgICAgY2hlY2tfZm9ybWF0KCJyZXByPSAgJ2FiIiwKKyAgICAgICAgICAgICAgICAgICAgIGIncmVwcj0lNS4zQScsICdhYmMnKQorCisgICAgICAgICMgdGVzdCB3aWR0aCBtb2RpZmllciBhbmQgcHJlY2lzaW9uIG1vZGlmaWVyIHdpdGggJXMKKyAgICAgICAgY2hlY2tfZm9ybWF0KCJyZXByPSAgYWJjIiwKKyAgICAgICAgICAgICAgICAgICAgIGIncmVwcj0lNXMnLCBiJ2FiYycpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgicmVwcj1hYiIsCisgICAgICAgICAgICAgICAgICAgICBiJ3JlcHI9JS4ycycsIGInYWJjJykKKyAgICAgICAgY2hlY2tfZm9ybWF0KCJyZXByPSAgIGFiIiwKKyAgICAgICAgICAgICAgICAgICAgIGIncmVwcj0lNS4ycycsIGInYWJjJykKKworICAgICAgICAjIHRlc3Qgd2lkdGggbW9kaWZpZXIgYW5kIHByZWNpc2lvbiBtb2RpZmllciB3aXRoICVVCisgICAgICAgIGNoZWNrX2Zvcm1hdCgicmVwcj0gIGFiYyIsCisgICAgICAgICAgICAgICAgICAgICBiJ3JlcHI9JTVVJywgJ2FiYycpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgicmVwcj1hYiIsCisgICAgICAgICAgICAgICAgICAgICBiJ3JlcHI9JS4yVScsICdhYmMnKQorICAgICAgICBjaGVja19mb3JtYXQoInJlcHI9ICAgYWIiLAorICAgICAgICAgICAgICAgICAgICAgYidyZXByPSU1LjJVJywgJ2FiYycpCisKKyAgICAgICAgIyB0ZXN0IHdpZHRoIG1vZGlmaWVyIGFuZCBwcmVjaXNpb24gbW9kaWZpZXIgd2l0aCAlVgorICAgICAgICBjaGVja19mb3JtYXQoInJlcHI9ICBhYmMiLAorICAgICAgICAgICAgICAgICAgICAgYidyZXByPSU1VicsICdhYmMnLCBiJzEyMycpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgicmVwcj1hYiIsCisgICAgICAgICAgICAgICAgICAgICBiJ3JlcHI9JS4yVicsICdhYmMnLCBiJzEyMycpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgicmVwcj0gICBhYiIsCisgICAgICAgICAgICAgICAgICAgICBiJ3JlcHI9JTUuMlYnLCAnYWJjJywgYicxMjMnKQorICAgICAgICBjaGVja19mb3JtYXQoInJlcHI9ICAxMjMiLAorICAgICAgICAgICAgICAgICAgICAgYidyZXByPSU1VicsIE5vbmUsIGInMTIzJykKKyAgICAgICAgY2hlY2tfZm9ybWF0KCJyZXByPTEyIiwKKyAgICAgICAgICAgICAgICAgICAgIGIncmVwcj0lLjJWJywgTm9uZSwgYicxMjMnKQorICAgICAgICBjaGVja19mb3JtYXQoInJlcHI9ICAgMTIiLAorICAgICAgICAgICAgICAgICAgICAgYidyZXByPSU1LjJWJywgTm9uZSwgYicxMjMnKQogCiAgICAgICAgICMgdGVzdCBpbnRlZ2VyIGZvcm1hdHMgKCVpLCAlZCwgJXUpCiAgICAgICAgIGNoZWNrX2Zvcm1hdCgnMDEwJywKQEAgLTIxMjUsOCArMjQyMCw4IEBACiAgICAgICAgICAgICAgICAgICAgICBiJyUwMTBpJywgY19pbnQoMTIzKSkKICAgICAgICAgY2hlY2tfZm9ybWF0KCcxMjMnLnJqdXN0KDEwMCksCiAgICAgICAgICAgICAgICAgICAgICBiJyUxMDBpJywgY19pbnQoMTIzKSkKLSAgICAgICAgY2hlY2tfZm9ybWF0KCcxMjMnLnJqdXN0KDMwMCwgJzAnKSwKLSAgICAgICAgICAgICAgICAgICAgIGInJS4zMDBpJywgY19pbnQoMTIzKSkKKyAgICAgICAgY2hlY2tfZm9ybWF0KCcxMjMnLnJqdXN0KDEwMCwgJzAnKSwKKyAgICAgICAgICAgICAgICAgICAgIGInJS4xMDBpJywgY19pbnQoMTIzKSkKICAgICAgICAgY2hlY2tfZm9ybWF0KCcxMjMnLnJqdXN0KDgwLCAnMCcpLnJqdXN0KDEwMCksCiAgICAgICAgICAgICAgICAgICAgICBiJyUxMDAuODBpJywgY19pbnQoMTIzKSkKIApAQCAtMjEzNCw4ICsyNDI5LDggQEAKICAgICAgICAgICAgICAgICAgICAgIGInJTAxMHUnLCBjX3VpbnQoMTIzKSkKICAgICAgICAgY2hlY2tfZm9ybWF0KCcxMjMnLnJqdXN0KDEwMCksCiAgICAgICAgICAgICAgICAgICAgICBiJyUxMDB1JywgY191aW50KDEyMykpCi0gICAgICAgIGNoZWNrX2Zvcm1hdCgnMTIzJy5yanVzdCgzMDAsICcwJyksCi0gICAgICAgICAgICAgICAgICAgICBiJyUuMzAwdScsIGNfdWludCgxMjMpKQorICAgICAgICBjaGVja19mb3JtYXQoJzEyMycucmp1c3QoMTAwLCAnMCcpLAorICAgICAgICAgICAgICAgICAgICAgYiclLjEwMHUnLCBjX3VpbnQoMTIzKSkKICAgICAgICAgY2hlY2tfZm9ybWF0KCcxMjMnLnJqdXN0KDgwLCAnMCcpLnJqdXN0KDEwMCksCiAgICAgICAgICAgICAgICAgICAgICBiJyUxMDAuODB1JywgY191aW50KDEyMykpCiAKQEAgLTIxNDMsOCArMjQzOCw4IEBACiAgICAgICAgICAgICAgICAgICAgICBiJyUwMTB4JywgY19pbnQoMHgxMjMpKQogICAgICAgICBjaGVja19mb3JtYXQoJzEyMycucmp1c3QoMTAwKSwKICAgICAgICAgICAgICAgICAgICAgIGInJTEwMHgnLCBjX2ludCgweDEyMykpCi0gICAgICAgIGNoZWNrX2Zvcm1hdCgnMTIzJy5yanVzdCgzMDAsICcwJyksCi0gICAgICAgICAgICAgICAgICAgICBiJyUuMzAweCcsIGNfaW50KDB4MTIzKSkKKyAgICAgICAgY2hlY2tfZm9ybWF0KCcxMjMnLnJqdXN0KDEwMCwgJzAnKSwKKyAgICAgICAgICAgICAgICAgICAgIGInJS4xMDB4JywgY19pbnQoMHgxMjMpKQogICAgICAgICBjaGVja19mb3JtYXQoJzEyMycucmp1c3QoODAsICcwJykucmp1c3QoMTAwKSwKICAgICAgICAgICAgICAgICAgICAgIGInJTEwMC44MHgnLCBjX2ludCgweDEyMykpCiAKQEAgLTIzMDMsNiArMjU5OCw5NyBAQAogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoYWJjLCBhYmNkZWYpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhYmNkZWYuZGVjb2RlKCd1bmljb2RlX2ludGVybmFsJyksIHRleHQpCiAKKyAgICBkZWYgdGVzdF9jb21wYXJlKHNlbGYpOgorICAgICAgICAjIElzc3VlICMxNzYxNQorICAgICAgICBOID0gMTAKKyAgICAgICAgYXNjaWkgPSAnYScgKiBOCisgICAgICAgIGFzY2lpMiA9ICd6JyAqIE4KKyAgICAgICAgbGF0aW4gPSAnXHg4MCcgKiBOCisgICAgICAgIGxhdGluMiA9ICdceGZmJyAqIE4KKyAgICAgICAgYm1wID0gJ1x1MDEwMCcgKiBOCisgICAgICAgIGJtcDIgPSAnXHVmZmZmJyAqIE4KKyAgICAgICAgYXN0cmFsID0gJ1xVMDAxMDAwMDAnICogTgorICAgICAgICBhc3RyYWwyID0gJ1xVMDAxMGZmZmYnICogTgorICAgICAgICBzdHJpbmdzID0gKAorICAgICAgICAgICAgYXNjaWksIGFzY2lpMiwKKyAgICAgICAgICAgIGxhdGluLCBsYXRpbjIsCisgICAgICAgICAgICBibXAsIGJtcDIsCisgICAgICAgICAgICBhc3RyYWwsIGFzdHJhbDIpCisgICAgICAgIGZvciB0ZXh0MSwgdGV4dDIgaW4gaXRlcnRvb2xzLmNvbWJpbmF0aW9ucyhzdHJpbmdzLCAyKToKKyAgICAgICAgICAgIGVxdWFsID0gKHRleHQxIGlzIHRleHQyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXh0MSA9PSB0ZXh0MiwgZXF1YWwpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRleHQxICE9IHRleHQyLCBub3QgZXF1YWwpCisKKyAgICAgICAgICAgIGlmIGVxdWFsOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ZXh0MSA8PSB0ZXh0MikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodGV4dDEgPj0gdGV4dDIpCisKKyAgICAgICAgICAgICAgICAjIHRleHQxIGlzIHRleHQyOiBkdXBsaWNhdGUgc3RyaW5ncyB0byBza2lwIHRoZSAic3RyMSA9PSBzdHIyIgorICAgICAgICAgICAgICAgICMgb3B0aW1pemF0aW9uIGluIHVuaWNvZGVfY29tcGFyZV9lcSgpIGFuZCByZWFsbHkgY29tcGFyZQorICAgICAgICAgICAgICAgICMgY2hhcmFjdGVyIHBlciBjaGFyYWN0ZXIKKyAgICAgICAgICAgICAgICBjb3B5MSA9IGR1cGxpY2F0ZV9zdHJpbmcodGV4dDEpCisgICAgICAgICAgICAgICAgY29weTIgPSBkdXBsaWNhdGVfc3RyaW5nKHRleHQyKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QoY29weTEsIGNvcHkyKQorCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvcHkxID09IGNvcHkyKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY29weTEgIT0gY29weTIpCisKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY29weTEgPD0gY29weTIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvcHkyID49IGNvcHkyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhc2NpaSA8IGFzY2lpMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFzY2lpIDwgbGF0aW4pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhc2NpaSA8IGJtcCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFzY2lpIDwgYXN0cmFsKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGFzY2lpID49IGFzY2lpMikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShhc2NpaSA+PSBsYXRpbikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShhc2NpaSA+PSBibXApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYXNjaWkgPj0gYXN0cmFsKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobGF0aW4gPCBhc2NpaSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxhdGluIDwgbGF0aW4yKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGF0aW4gPCBibXApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsYXRpbiA8IGFzdHJhbCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxhdGluID49IGFzY2lpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGxhdGluID49IGxhdGluMikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShsYXRpbiA+PSBibXApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobGF0aW4gPj0gYXN0cmFsKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYm1wIDwgYXNjaWkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYm1wIDwgbGF0aW4pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShibXAgPCBibXAyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYm1wIDwgYXN0cmFsKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYm1wID49IGFzY2lpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYm1wID49IGxhdGluKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGJtcCA+PSBibXAyKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGJtcCA+PSBhc3RyYWwpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShhc3RyYWwgPCBhc2NpaSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShhc3RyYWwgPCBsYXRpbikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShhc3RyYWwgPCBibXAyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYXN0cmFsIDwgYXN0cmFsMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFzdHJhbCA+PSBhc2NpaSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFzdHJhbCA+PSBsYXRpbikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFzdHJhbCA+PSBibXAyKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGFzdHJhbCA+PSBhc3RyYWwyKQorCisgICAgQHN1cHBvcnQuY3B5dGhvbl9vbmx5CisgICAgZGVmIHRlc3RfcGVwMzkzX3V0ZjhfY2FjaGluZ19idWcoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzI1NzA5OiBQcm9ibGVtIHdpdGggc3RyaW5nIGNvbmNhdGVuYXRpb24gYW5kIHV0Zi04IGNhY2hlCisgICAgICAgIGZyb20gX3Rlc3RjYXBpIGltcG9ydCBnZXRhcmdzX3NfaGFzaAorICAgICAgICBmb3IgayBpbiAweDI0LCAweGE0LCAweDIwYWMsIDB4MWY0MGQ6CisgICAgICAgICAgICBzID0gJycKKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDUpOgorICAgICAgICAgICAgICAgICMgRHVlIHRvIENQeXRob24gc3BlY2lmaWMgb3B0aW1pemF0aW9uIHRoZSAncycgc3RyaW5nIGNhbiBiZQorICAgICAgICAgICAgICAgICMgcmVzaXplZCBpbi1wbGFjZS4KKyAgICAgICAgICAgICAgICBzICs9IGNocihrKQorICAgICAgICAgICAgICAgICMgUGFyc2luZyB3aXRoIHRoZSAicyMiIGZvcm1hdCBjb2RlIGNhbGxzIGluZGlyZWN0bHkKKyAgICAgICAgICAgICAgICAjIFB5VW5pY29kZV9Bc1VURjhBbmRTaXplKCkgd2hpY2ggY3JlYXRlcyB0aGUgVVRGLTgKKyAgICAgICAgICAgICAgICAjIGVuY29kZWQgc3RyaW5nIGNhY2hlZCBpbiB0aGUgVW5pY29kZSBvYmplY3QuCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRhcmdzX3NfaGFzaChzKSwgY2hyKGspLmVuY29kZSgpICogKGkgKyAxKSkKKyAgICAgICAgICAgICAgICAjIENoZWNrIHRoYXQgdGhlIHNlY29uZCBjYWxsIHJldHVybnMgdGhlIHNhbWUgcmVzdWx0CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRhcmdzX3NfaGFzaChzKSwgY2hyKGspLmVuY29kZSgpICogKGkgKyAxKSkKKwogCiBjbGFzcyBTdHJpbmdNb2R1bGVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9mb3JtYXR0ZXJfcGFyc2VyKHNlbGYpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF91bmljb2RlX2ZpbGUucHkgYi9MaWIvdGVzdC90ZXN0X3VuaWNvZGVfZmlsZS5weQppbmRleCBmYWE4ZGEzLi5lNDcwOWExIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3VuaWNvZGVfZmlsZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3VuaWNvZGVfZmlsZS5weQpAQCAtNSw3ICs1LDcgQEAKIGltcG9ydCB1bmljb2RlZGF0YQogCiBpbXBvcnQgdW5pdHRlc3QKLWZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCAocnVuX3VuaXR0ZXN0LCBybXRyZWUsCitmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgKHJ1bl91bml0dGVzdCwgcm10cmVlLCBjaGFuZ2VfY3dkLAogICAgIFRFU1RGTl9FTkNPRElORywgVEVTVEZOX1VOSUNPREUsIFRFU1RGTl9VTkVOQ09EQUJMRSwgY3JlYXRlX2VtcHR5X2ZpbGUpCiAKIGlmIG5vdCBvcy5wYXRoLnN1cHBvcnRzX3VuaWNvZGVfZmlsZW5hbWVzOgpAQCAtODIsMTMgKzgyLDExIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5leGlzdHMoZmlsZW5hbWUyICsgJy5uZXcnKSkKIAogICAgIGRlZiBfZG9fZGlyZWN0b3J5KHNlbGYsIG1ha2VfbmFtZSwgY2hkaXJfbmFtZSk6Ci0gICAgICAgIGN3ZCA9IG9zLmdldGN3ZCgpCiAgICAgICAgIGlmIG9zLnBhdGguaXNkaXIobWFrZV9uYW1lKToKICAgICAgICAgICAgIHJtdHJlZShtYWtlX25hbWUpCiAgICAgICAgIG9zLm1rZGlyKG1ha2VfbmFtZSkKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgb3MuY2hkaXIoY2hkaXJfbmFtZSkKLSAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggY2hhbmdlX2N3ZChjaGRpcl9uYW1lKToKICAgICAgICAgICAgICAgICBjd2RfcmVzdWx0ID0gb3MuZ2V0Y3dkKCkKICAgICAgICAgICAgICAgICBuYW1lX3Jlc3VsdCA9IG1ha2VfbmFtZQogCkBAIC05Niw4ICs5NCw2IEBACiAgICAgICAgICAgICAgICAgbmFtZV9yZXN1bHQgPSB1bmljb2RlZGF0YS5ub3JtYWxpemUoIk5GRCIsIG5hbWVfcmVzdWx0KQogCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5wYXRoLmJhc2VuYW1lKGN3ZF9yZXN1bHQpLG5hbWVfcmVzdWx0KQotICAgICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgICAgICBvcy5jaGRpcihjd2QpCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBvcy5ybWRpcihtYWtlX25hbWUpCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdW5pY29kZWRhdGEucHkgYi9MaWIvdGVzdC90ZXN0X3VuaWNvZGVkYXRhLnB5CmluZGV4IDk5YWEwMDMuLjcwN2IzMGUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdW5pY29kZWRhdGEucHkKKysrIGIvTGliL3Rlc3QvdGVzdF91bmljb2RlZGF0YS5weQpAQCAtMjEsNyArMjEsNyBAQAogY2xhc3MgVW5pY29kZU1ldGhvZHNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgICMgdXBkYXRlIHRoaXMsIGlmIHRoZSBkYXRhYmFzZSBjaGFuZ2VzCi0gICAgZXhwZWN0ZWRjaGVja3N1bSA9ICdiZjdhNzhmMWE1MzI0MjFiNTAzMzYwMDEwMmUyM2E5MjA0NGRiYmE5JworICAgIGV4cGVjdGVkY2hlY2tzdW0gPSAnZTc0ZTg3OGRlNzFiNmU3ODBmZmFjMjcxNzg1YzNjYjU4ZjYyNTFmMycKIAogICAgIGRlZiB0ZXN0X21ldGhvZF9jaGVja3N1bShzZWxmKToKICAgICAgICAgaCA9IGhhc2hsaWIuc2hhMSgpCkBAIC04MCw3ICs4MCw3IEBACiBjbGFzcyBVbmljb2RlRnVuY3Rpb25zVGVzdChVbmljb2RlRGF0YWJhc2VUZXN0KToKIAogICAgICMgdXBkYXRlIHRoaXMsIGlmIHRoZSBkYXRhYmFzZSBjaGFuZ2VzCi0gICAgZXhwZWN0ZWRjaGVja3N1bSA9ICcxN2ZlMmYxMmI3ODhlNGZmZjU0NzliNDY5YzQ0MDRiYjZlY2Y4NDFmJworICAgIGV4cGVjdGVkY2hlY2tzdW0gPSAnZjBiNzRkMjY3NzYzMzFjYzdiZGMzYTQ2OThmMDM3ZDczZjJjZWUyYicKICAgICBkZWYgdGVzdF9mdW5jdGlvbl9jaGVja3N1bShzZWxmKToKICAgICAgICAgZGF0YSA9IFtdCiAgICAgICAgIGggPSBoYXNobGliLnNoYTEoKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF91cmxsaWIucHkgYi9MaWIvdGVzdC90ZXN0X3VybGxpYi5weQppbmRleCAyZGVjNGU5Li5lMTAwMDM5IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3VybGxpYi5weQorKysgYi9MaWIvdGVzdC90ZXN0X3VybGxpYi5weQpAQCAtNyw4ICs3LDEwIEBACiBpbXBvcnQgZW1haWwubWVzc2FnZQogaW1wb3J0IGlvCiBpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdW5pdHRlc3QubW9jayBpbXBvcnQgcGF0Y2gKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogaW1wb3J0IG9zCitpbXBvcnQgc3NsCiBpbXBvcnQgc3lzCiBpbXBvcnQgdGVtcGZpbGUKIGZyb20gbnR1cmwycGF0aCBpbXBvcnQgdXJsMnBhdGhuYW1lLCBwYXRobmFtZTJ1cmwKQEAgLTE2LDYgKzE4LDcgQEAKIGZyb20gYmFzZTY0IGltcG9ydCBiNjRlbmNvZGUKIGltcG9ydCBjb2xsZWN0aW9ucwogCisKIGRlZiBoZXhlc2NhcGUoY2hhcik6CiAgICAgIiIiRXNjYXBlIGNoYXIgYXMgUkZDIDIzOTYgc3BlY2lmaWVzIiIiCiAgICAgaGV4X3JlcHIgPSBoZXgob3JkKGNoYXIpKVsyOl0udXBwZXIoKQpAQCAtNDYsNDggKzQ5LDczIEBACiAgICAgICAgIHJldHVybiBvcGVuZXIub3Blbih1cmwsIGRhdGEpCiAKIAorZGVmIGZha2VodHRwKGZha2VkYXRhKToKKyAgICBjbGFzcyBGYWtlU29ja2V0KGlvLkJ5dGVzSU8pOgorICAgICAgICBpb19yZWZzID0gMQorCisgICAgICAgIGRlZiBzZW5kYWxsKHNlbGYsIGRhdGEpOgorICAgICAgICAgICAgRmFrZUhUVFBDb25uZWN0aW9uLmJ1ZiA9IGRhdGEKKworICAgICAgICBkZWYgbWFrZWZpbGUoc2VsZiwgKmFyZ3MsICoqa3dkcyk6CisgICAgICAgICAgICBzZWxmLmlvX3JlZnMgKz0gMQorICAgICAgICAgICAgcmV0dXJuIHNlbGYKKworICAgICAgICBkZWYgcmVhZChzZWxmLCBhbXQ9Tm9uZSk6CisgICAgICAgICAgICBpZiBzZWxmLmNsb3NlZDoKKyAgICAgICAgICAgICAgICByZXR1cm4gYiIiCisgICAgICAgICAgICByZXR1cm4gaW8uQnl0ZXNJTy5yZWFkKHNlbGYsIGFtdCkKKworICAgICAgICBkZWYgcmVhZGxpbmUoc2VsZiwgbGVuZ3RoPU5vbmUpOgorICAgICAgICAgICAgaWYgc2VsZi5jbG9zZWQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGIiIgorICAgICAgICAgICAgcmV0dXJuIGlvLkJ5dGVzSU8ucmVhZGxpbmUoc2VsZiwgbGVuZ3RoKQorCisgICAgICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgICAgIHNlbGYuaW9fcmVmcyAtPSAxCisgICAgICAgICAgICBpZiBzZWxmLmlvX3JlZnMgPT0gMDoKKyAgICAgICAgICAgICAgICBpby5CeXRlc0lPLmNsb3NlKHNlbGYpCisKKyAgICBjbGFzcyBGYWtlSFRUUENvbm5lY3Rpb24oaHR0cC5jbGllbnQuSFRUUENvbm5lY3Rpb24pOgorCisgICAgICAgICMgYnVmZmVyIHRvIHN0b3JlIGRhdGEgZm9yIHZlcmlmaWNhdGlvbiBpbiB1cmxvcGVuIHRlc3RzLgorICAgICAgICBidWYgPSBOb25lCisgICAgICAgIGZha2Vzb2NrID0gRmFrZVNvY2tldChmYWtlZGF0YSkKKworICAgICAgICBkZWYgY29ubmVjdChzZWxmKToKKyAgICAgICAgICAgIHNlbGYuc29jayA9IHNlbGYuZmFrZXNvY2sKKworICAgIHJldHVybiBGYWtlSFRUUENvbm5lY3Rpb24KKworCiBjbGFzcyBGYWtlSFRUUE1peGluKG9iamVjdCk6CiAgICAgZGVmIGZha2VodHRwKHNlbGYsIGZha2VkYXRhKToKLSAgICAgICAgY2xhc3MgRmFrZVNvY2tldChpby5CeXRlc0lPKToKLSAgICAgICAgICAgIGlvX3JlZnMgPSAxCi0KLSAgICAgICAgICAgIGRlZiBzZW5kYWxsKHNlbGYsIGRhdGEpOgotICAgICAgICAgICAgICAgIEZha2VIVFRQQ29ubmVjdGlvbi5idWYgPSBkYXRhCi0KLSAgICAgICAgICAgIGRlZiBtYWtlZmlsZShzZWxmLCAqYXJncywgKiprd2RzKToKLSAgICAgICAgICAgICAgICBzZWxmLmlvX3JlZnMgKz0gMQotICAgICAgICAgICAgICAgIHJldHVybiBzZWxmCi0KLSAgICAgICAgICAgIGRlZiByZWFkKHNlbGYsIGFtdD1Ob25lKToKLSAgICAgICAgICAgICAgICBpZiBzZWxmLmNsb3NlZDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGIiIgotICAgICAgICAgICAgICAgIHJldHVybiBpby5CeXRlc0lPLnJlYWQoc2VsZiwgYW10KQotCi0gICAgICAgICAgICBkZWYgcmVhZGxpbmUoc2VsZiwgbGVuZ3RoPU5vbmUpOgotICAgICAgICAgICAgICAgIGlmIHNlbGYuY2xvc2VkOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gYiIiCi0gICAgICAgICAgICAgICAgcmV0dXJuIGlvLkJ5dGVzSU8ucmVhZGxpbmUoc2VsZiwgbGVuZ3RoKQotCi0gICAgICAgICAgICBkZWYgY2xvc2Uoc2VsZik6Ci0gICAgICAgICAgICAgICAgc2VsZi5pb19yZWZzIC09IDEKLSAgICAgICAgICAgICAgICBpZiBzZWxmLmlvX3JlZnMgPT0gMDoKLSAgICAgICAgICAgICAgICAgICAgaW8uQnl0ZXNJTy5jbG9zZShzZWxmKQotCi0gICAgICAgIGNsYXNzIEZha2VIVFRQQ29ubmVjdGlvbihodHRwLmNsaWVudC5IVFRQQ29ubmVjdGlvbik6Ci0KLSAgICAgICAgICAgICMgYnVmZmVyIHRvIHN0b3JlIGRhdGEgZm9yIHZlcmlmaWNhdGlvbiBpbiB1cmxvcGVuIHRlc3RzLgotICAgICAgICAgICAgYnVmID0gTm9uZQotCi0gICAgICAgICAgICBkZWYgY29ubmVjdChzZWxmKToKLSAgICAgICAgICAgICAgICBzZWxmLnNvY2sgPSBGYWtlU29ja2V0KGZha2VkYXRhKQotCiAgICAgICAgIHNlbGYuX2Nvbm5lY3Rpb25fY2xhc3MgPSBodHRwLmNsaWVudC5IVFRQQ29ubmVjdGlvbgotICAgICAgICBodHRwLmNsaWVudC5IVFRQQ29ubmVjdGlvbiA9IEZha2VIVFRQQ29ubmVjdGlvbgorICAgICAgICBodHRwLmNsaWVudC5IVFRQQ29ubmVjdGlvbiA9IGZha2VodHRwKGZha2VkYXRhKQogCiAgICAgZGVmIHVuZmFrZWh0dHAoc2VsZik6CiAgICAgICAgIGh0dHAuY2xpZW50LkhUVFBDb25uZWN0aW9uID0gc2VsZi5fY29ubmVjdGlvbl9jbGFzcwogCiAKK2NsYXNzIEZha2VGVFBNaXhpbihvYmplY3QpOgorICAgIGRlZiBmYWtlZnRwKHNlbGYpOgorICAgICAgICBjbGFzcyBGYWtlRnRwV3JhcHBlcihvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsICB1c2VyLCBwYXNzd2QsIGhvc3QsIHBvcnQsIGRpcnMsIHRpbWVvdXQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgIHBlcnNpc3RlbnQ9VHJ1ZSk6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICAgICBkZWYgcmV0cmZpbGUoc2VsZiwgZmlsZSwgdHlwZSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGlvLkJ5dGVzSU8oKSwgMAorCisgICAgICAgICAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIHNlbGYuX2Z0cHdyYXBwZXJfY2xhc3MgPSB1cmxsaWIucmVxdWVzdC5mdHB3cmFwcGVyCisgICAgICAgIHVybGxpYi5yZXF1ZXN0LmZ0cHdyYXBwZXIgPSBGYWtlRnRwV3JhcHBlcgorCisgICAgZGVmIHVuZmFrZWZ0cChzZWxmKToKKyAgICAgICAgdXJsbGliLnJlcXVlc3QuZnRwd3JhcHBlciA9IHNlbGYuX2Z0cHdyYXBwZXJfY2xhc3MKKworCiBjbGFzcyB1cmxvcGVuX0ZpbGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgIiIiVGVzdCB1cmxvcGVuKCkgb3BlbmluZyBhIHRlbXBvcmFyeSBmaWxlLgogCkBAIC0xOTQsNyArMjIyLDcgQEAKICAgICAgICAgc2VsZi5lbnYuc2V0KCdOT19QUk9YWScsICdsb2NhbGhvc3QsIGFub3RoZXJkb21haW4uY29tLCBuZXdkb21haW4uY29tJykKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHVybGxpYi5yZXF1ZXN0LnByb3h5X2J5cGFzc19lbnZpcm9ubWVudCgnYW5vdGhlcmRvbWFpbi5jb20nKSkKIAotY2xhc3MgdXJsb3Blbl9IdHRwVGVzdHModW5pdHRlc3QuVGVzdENhc2UsIEZha2VIVFRQTWl4aW4pOgorY2xhc3MgdXJsb3Blbl9IdHRwVGVzdHModW5pdHRlc3QuVGVzdENhc2UsIEZha2VIVFRQTWl4aW4sIEZha2VGVFBNaXhpbik6CiAgICAgIiIiVGVzdCB1cmxvcGVuKCkgb3BlbmluZyBhIGZha2UgaHR0cCBjb25uZWN0aW9uLiIiIgogCiAgICAgZGVmIGNoZWNrX3JlYWQoc2VsZiwgdmVyKToKQEAgLTIzOCw3ICsyNjYsNyBAQAogICAgICAgICBzZWxmLmNoZWNrX3JlYWQoYiIxLjEiKQogCiAgICAgZGVmIHRlc3RfcmVhZF9ib2d1cyhzZWxmKToKLSAgICAgICAgIyB1cmxvcGVuKCkgc2hvdWxkIHJhaXNlIElPRXJyb3IgZm9yIG1hbnkgZXJyb3IgY29kZXMuCisgICAgICAgICMgdXJsb3BlbigpIHNob3VsZCByYWlzZSBPU0Vycm9yIGZvciBtYW55IGVycm9yIGNvZGVzLgogICAgICAgICBzZWxmLmZha2VodHRwKGInJydIVFRQLzEuMSA0MDEgQXV0aGVudGljYXRpb24gUmVxdWlyZWQKIERhdGU6IFdlZCwgMDIgSmFuIDIwMDggMDM6MDM6NTQgR01UCiBTZXJ2ZXI6IEFwYWNoZS8xLjMuMzMgKERlYmlhbiBHTlUvTGludXgpIG1vZF9zc2wvMi44LjIyIE9wZW5TU0wvMC45LjdlCkBAIC0yNDYsMTIgKzI3NCwxMiBAQAogQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMQogJycnKQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCB1cmxvcGVuLCAiaHR0cDovL3B5dGhvbi5vcmcvIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHVybG9wZW4sICJodHRwOi8vcHl0aG9uLm9yZy8iKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgc2VsZi51bmZha2VodHRwKCkKIAogICAgIGRlZiB0ZXN0X2ludmFsaWRfcmVkaXJlY3Qoc2VsZik6Ci0gICAgICAgICMgdXJsb3BlbigpIHNob3VsZCByYWlzZSBJT0Vycm9yIGZvciBtYW55IGVycm9yIGNvZGVzLgorICAgICAgICAjIHVybG9wZW4oKSBzaG91bGQgcmFpc2UgT1NFcnJvciBmb3IgbWFueSBlcnJvciBjb2Rlcy4KICAgICAgICAgc2VsZi5mYWtlaHR0cChiJycnSFRUUC8xLjEgMzAyIEZvdW5kCiBEYXRlOiBXZWQsIDAyIEphbiAyMDA4IDAzOjAzOjU0IEdNVAogU2VydmVyOiBBcGFjaGUvMS4zLjMzIChEZWJpYW4gR05VL0xpbnV4KSBtb2Rfc3NsLzIuOC4yMiBPcGVuU1NMLzAuOS43ZQpAQCAtMjY2LDE5ICsyOTQsMjAgQEAKICAgICAgICAgICAgIHNlbGYudW5mYWtlaHR0cCgpCiAKICAgICBkZWYgdGVzdF9lbXB0eV9zb2NrZXQoc2VsZik6Ci0gICAgICAgICMgdXJsb3BlbigpIHJhaXNlcyBJT0Vycm9yIGlmIHRoZSB1bmRlcmx5aW5nIHNvY2tldCBkb2VzIG5vdCBzZW5kIGFueQorICAgICAgICAjIHVybG9wZW4oKSByYWlzZXMgT1NFcnJvciBpZiB0aGUgdW5kZXJseWluZyBzb2NrZXQgZG9lcyBub3Qgc2VuZCBhbnkKICAgICAgICAgIyBkYXRhLiAoIzE2ODAyMzApCiAgICAgICAgIHNlbGYuZmFrZWh0dHAoYicnKQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCB1cmxvcGVuLCAiaHR0cDovL3NvbWV0aGluZyIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCB1cmxvcGVuLCAiaHR0cDovL3NvbWV0aGluZyIpCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBzZWxmLnVuZmFrZWh0dHAoKQogCiAgICAgZGVmIHRlc3RfbWlzc2luZ19sb2NhbGZpbGUoc2VsZik6CiAgICAgICAgICMgVGVzdCBmb3IgIzEwODM2Ci0gICAgICAgICMgMy4zIC0gVVJMRXJyb3IgaXMgbm90IGNhcHR1cmVkLCBleHBsaWNpdCBJT0Vycm9yIGlzIHJhaXNlZC4KLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyh1cmxsaWIuZXJyb3IuVVJMRXJyb3IpIGFzIGU6CiAgICAgICAgICAgICB1cmxvcGVuKCdmaWxlOi8vbG9jYWxob3N0L2EvZmlsZS93aGljaC9kb2Vzbm90L2V4aXN0cy5weScpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlLmV4Y2VwdGlvbi5maWxlbmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGUuZXhjZXB0aW9uLnJlYXNvbikKIAogICAgIGRlZiB0ZXN0X2ZpbGVfbm90ZXhpc3RzKHNlbGYpOgogICAgICAgICBmZCwgdG1wX2ZpbGUgPSB0ZW1wZmlsZS5ta3N0ZW1wKCkKQEAgLTI5MSwyMCArMzIwLDMwIEBACiAgICAgICAgICAgICBvcy5jbG9zZShmZCkKICAgICAgICAgICAgIG9zLnVubGluayh0bXBfZmlsZSkKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmV4aXN0cyh0bXBfZmlsZSkpCi0gICAgICAgICMgMy4zIC0gSU9FcnJvciBpbnN0ZWFkIG9mIFVSTEVycm9yCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvcik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXModXJsbGliLmVycm9yLlVSTEVycm9yKToKICAgICAgICAgICAgIHVybG9wZW4odG1wX2ZpbGV1cmwpCiAKICAgICBkZWYgdGVzdF9mdHBfbm9ob3N0KHNlbGYpOgogICAgICAgICB0ZXN0X2Z0cF91cmwgPSAnZnRwOi8vL3BhdGgnCi0gICAgICAgICMgMy4zIC0gSU9FcnJvciBpbnN0ZWFkIG9mIFVSTEVycm9yCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvcik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXModXJsbGliLmVycm9yLlVSTEVycm9yKSBhcyBlOgogICAgICAgICAgICAgdXJsb3Blbih0ZXN0X2Z0cF91cmwpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZS5leGNlcHRpb24uZmlsZW5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlLmV4Y2VwdGlvbi5yZWFzb24pCiAKICAgICBkZWYgdGVzdF9mdHBfbm9uZXhpc3Rpbmcoc2VsZik6Ci0gICAgICAgICMgMy4zIC0gSU9FcnJvciBpbnN0ZWFkIG9mIFVSTEVycm9yCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvcik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXModXJsbGliLmVycm9yLlVSTEVycm9yKSBhcyBlOgogICAgICAgICAgICAgdXJsb3BlbignZnRwOi8vbG9jYWxob3N0L2EvZmlsZS93aGljaC9kb2Vzbm90L2V4aXN0cy5weScpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZS5leGNlcHRpb24uZmlsZW5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlLmV4Y2VwdGlvbi5yZWFzb24pCisKKyAgICBAcGF0Y2gub2JqZWN0KHVybGxpYi5yZXF1ZXN0LCAnTUFYRlRQQ0FDSEUnLCAwKQorICAgIGRlZiB0ZXN0X2Z0cF9jYWNoZV9wcnVuaW5nKHNlbGYpOgorICAgICAgICBzZWxmLmZha2VmdHAoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB1cmxsaWIucmVxdWVzdC5mdHBjYWNoZVsndGVzdCddID0gdXJsbGliLnJlcXVlc3QuZnRwd3JhcHBlcigndXNlcicsICdwYXNzJywgJ2xvY2FsaG9zdCcsIDIxLCBbXSkKKyAgICAgICAgICAgIHVybG9wZW4oJ2Z0cDovL2xvY2FsaG9zdCcpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLnVuZmFrZWZ0cCgpCiAKIAogICAgIGRlZiB0ZXN0X3VzZXJwYXNzX2ludXJsKHNlbGYpOgpAQCAtMzQxLDYgKzM4MCw4NiBAQAogICAgICAgICB3aXRoIHN1cHBvcnQuY2hlY2tfd2FybmluZ3MoKCcnLERlcHJlY2F0aW9uV2FybmluZykpOgogICAgICAgICAgICAgdXJsbGliLnJlcXVlc3QuVVJMb3BlbmVyKCkKIAorICAgIGRlZiB0ZXN0X2NhZmlsZV9hbmRfY29udGV4dChzZWxmKToKKyAgICAgICAgY29udGV4dCA9IHNzbC5jcmVhdGVfZGVmYXVsdF9jb250ZXh0KCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIHVybGxpYi5yZXF1ZXN0LnVybG9wZW4oCisgICAgICAgICAgICAgICAgImh0dHBzOi8vbG9jYWxob3N0IiwgY2FmaWxlPSIvbm9uZXhpc3RlbnQvcGF0aCIsIGNvbnRleHQ9Y29udGV4dAorICAgICAgICAgICAgKQorCitjbGFzcyB1cmxvcGVuX0RhdGFUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiVGVzdCB1cmxvcGVuKCkgb3BlbmluZyBhIGRhdGEgVVJMLiIiIgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICAjIHRleHQgY29udGFpbmluZyBVUkwgc3BlY2lhbC0gYW5kIHVuaWNvZGUtY2hhcmFjdGVycworICAgICAgICBzZWxmLnRleHQgPSAidGVzdCBkYXRhIFVSTHMgOjssJT0mIFx1MDBmNiBcdTAwYzQgIgorICAgICAgICAjIDJ4MSBwaXhlbCBSR0IgUE5HIGltYWdlIHdpdGggb25lIGJsYWNrIGFuZCBvbmUgd2hpdGUgcGl4ZWwKKyAgICAgICAgc2VsZi5pbWFnZSA9ICgKKyAgICAgICAgICAgIGInXHg4OVBOR1xyXG5ceDFhXG5ceDAwXHgwMFx4MDBccklIRFJceDAwXHgwMFx4MDBceDAyXHgwMFx4MDBceDAwJworICAgICAgICAgICAgYidceDAxXHgwOFx4MDJceDAwXHgwMFx4MDB7QFx4ZThceGRkXHgwMFx4MDBceDAwXHgwMXNSR0JceDAwXHhhZScKKyAgICAgICAgICAgIGInXHhjZVx4MWNceGU5XHgwMFx4MDBceDAwXHgwZklEQVRceDA4XHhkN2NgYGBceGY4XHhmZlx4ZmY/XHgwMCcKKyAgICAgICAgICAgIGInXHgwNlx4MDFceDAyXHhmZVxuby9ceDFlXHgwMFx4MDBceDAwXHgwMElFTkRceGFlQmBceDgyJykKKworICAgICAgICBzZWxmLnRleHRfdXJsID0gKAorICAgICAgICAgICAgImRhdGE6dGV4dC9wbGFpbjtjaGFyc2V0PVVURi04LHRlc3QlMjBkYXRhJTIwVVJMcyUyMCUzQSUzQiUyQyUyNSUzIgorICAgICAgICAgICAgIkQlMjYlMjAlQzMlQjYlMjAlQzMlODQlMjAiKQorICAgICAgICBzZWxmLnRleHRfdXJsX2Jhc2U2NCA9ICgKKyAgICAgICAgICAgICJkYXRhOnRleHQvcGxhaW47Y2hhcnNldD1JU08tODg1OS0xO2Jhc2U2NCxkR1Z6ZENCa1lYUmhJRlZTVEhNZ09qcyIKKyAgICAgICAgICAgICJzSlQwbUlQWWd4Q0ElM0QiKQorICAgICAgICAjIGJhc2U2NCBlbmNvZGVkIGRhdGEgVVJMIHRoYXQgY29udGFpbnMgaWdub3JhYmxlIHNwYWNlcywKKyAgICAgICAgIyBzdWNoIGFzICJcbiIsICIgIiwgIiUwQSIsIGFuZCAiJTIwIi4KKyAgICAgICAgc2VsZi5pbWFnZV91cmwgPSAoCisgICAgICAgICAgICAiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBSUFBQUFCQ0FJQUFBQjdcbiIKKyAgICAgICAgICAgICJRT2pkQUFBQUFYTlNSMElBcnM0YzZRQUFBQTlKUkVGVUNOZGolMEFZR0JnJTJCUC8vUHdBR0FRTCUyQkNtOCAiCisgICAgICAgICAgICAidkhnQUFBQUJKUlU1RXJrSmdnZyUzRCUzRCUwQSUyMCIpCisKKyAgICAgICAgc2VsZi50ZXh0X3VybF9yZXNwID0gdXJsbGliLnJlcXVlc3QudXJsb3BlbihzZWxmLnRleHRfdXJsKQorICAgICAgICBzZWxmLnRleHRfdXJsX2Jhc2U2NF9yZXNwID0gdXJsbGliLnJlcXVlc3QudXJsb3BlbigKKyAgICAgICAgICAgIHNlbGYudGV4dF91cmxfYmFzZTY0KQorICAgICAgICBzZWxmLmltYWdlX3VybF9yZXNwID0gdXJsbGliLnJlcXVlc3QudXJsb3BlbihzZWxmLmltYWdlX3VybCkKKworICAgIGRlZiB0ZXN0X2ludGVyZmFjZShzZWxmKToKKyAgICAgICAgIyBNYWtlIHN1cmUgb2JqZWN0IHJldHVybmVkIGJ5IHVybG9wZW4oKSBoYXMgdGhlIHNwZWNpZmllZCBtZXRob2RzCisgICAgICAgIGZvciBhdHRyIGluICgicmVhZCIsICJyZWFkbGluZSIsICJyZWFkbGluZXMiLAorICAgICAgICAgICAgICAgICAgICAgImNsb3NlIiwgImluZm8iLCAiZ2V0dXJsIiwgImdldGNvZGUiLCAiX19pdGVyX18iKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKHNlbGYudGV4dF91cmxfcmVzcCwgYXR0ciksCisgICAgICAgICAgICAgICAgICAgICAgICAgIm9iamVjdCByZXR1cm5lZCBieSB1cmxvcGVuKCkgbGFja3MgJXMgYXR0cmlidXRlIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cikKKworICAgIGRlZiB0ZXN0X2luZm8oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzZWxmLnRleHRfdXJsX3Jlc3AuaW5mbygpLCBlbWFpbC5tZXNzYWdlLk1lc3NhZ2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50ZXh0X3VybF9iYXNlNjRfcmVzcC5pbmZvKCkuZ2V0X3BhcmFtcygpLAorICAgICAgICAgICAgWygndGV4dC9wbGFpbicsICcnKSwgKCdjaGFyc2V0JywgJ0lTTy04ODU5LTEnKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5pbWFnZV91cmxfcmVzcC5pbmZvKClbJ2NvbnRlbnQtbGVuZ3RoJ10sCisgICAgICAgICAgICBzdHIobGVuKHNlbGYuaW1hZ2UpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmxsaWIucmVxdWVzdC51cmxvcGVuKCJkYXRhOiwiKS5pbmZvKCkuZ2V0X3BhcmFtcygpLAorICAgICAgICAgICAgWygndGV4dC9wbGFpbicsICcnKSwgKCdjaGFyc2V0JywgJ1VTLUFTQ0lJJyldKQorCisgICAgZGVmIHRlc3RfZ2V0dXJsKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudGV4dF91cmxfcmVzcC5nZXR1cmwoKSwgc2VsZi50ZXh0X3VybCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnRleHRfdXJsX2Jhc2U2NF9yZXNwLmdldHVybCgpLAorICAgICAgICAgICAgc2VsZi50ZXh0X3VybF9iYXNlNjQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5pbWFnZV91cmxfcmVzcC5nZXR1cmwoKSwgc2VsZi5pbWFnZV91cmwpCisKKyAgICBkZWYgdGVzdF9yZWFkX3RleHQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50ZXh0X3VybF9yZXNwLnJlYWQoKS5kZWNvZGUoCisgICAgICAgICAgICBkaWN0KHNlbGYudGV4dF91cmxfcmVzcC5pbmZvKCkuZ2V0X3BhcmFtcygpKVsnY2hhcnNldCddKSwgc2VsZi50ZXh0KQorCisgICAgZGVmIHRlc3RfcmVhZF90ZXh0X2Jhc2U2NChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnRleHRfdXJsX2Jhc2U2NF9yZXNwLnJlYWQoKS5kZWNvZGUoCisgICAgICAgICAgICBkaWN0KHNlbGYudGV4dF91cmxfYmFzZTY0X3Jlc3AuaW5mbygpLmdldF9wYXJhbXMoKSlbJ2NoYXJzZXQnXSksCisgICAgICAgICAgICBzZWxmLnRleHQpCisKKyAgICBkZWYgdGVzdF9yZWFkX2ltYWdlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuaW1hZ2VfdXJsX3Jlc3AucmVhZCgpLCBzZWxmLmltYWdlKQorCisgICAgZGVmIHRlc3RfbWlzc2luZ19jb21tYShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcix1cmxsaWIucmVxdWVzdC51cmxvcGVuLCdkYXRhOnRleHQvcGxhaW4nKQorCisgICAgZGVmIHRlc3RfaW52YWxpZF9iYXNlNjRfZGF0YShzZWxmKToKKyAgICAgICAgIyBtaXNzaW5nIHBhZGRpbmcgY2hhcmFjdGVyCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsdXJsbGliLnJlcXVlc3QudXJsb3BlbiwnZGF0YTo7YmFzZTY0LENnPScpCisKIGNsYXNzIHVybHJldHJpZXZlX0ZpbGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgIiIiVGVzdCB1cmxsaWIudXJscmV0cmlldmUoKSBvbiBsb2NhbCBmaWxlcyIiIgogCkBAIC00MDQsNyArNTIzLDcgQEAKICAgICAgICAgcmVzdWx0ID0gdXJsbGliLnJlcXVlc3QudXJscmV0cmlldmUoImZpbGU6JXMiICUgc3VwcG9ydC5URVNURk4pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0WzBdLCBzdXBwb3J0LlRFU1RGTikKICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHJlc3VsdFsxXSwgZW1haWwubWVzc2FnZS5NZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRpZCBub3QgZ2V0IGEgZW1haWwubWVzc2FnZS5NZXNzYWdlIGluc3RhbmNlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkaWQgbm90IGdldCBhbiBlbWFpbC5tZXNzYWdlLk1lc3NhZ2UgaW5zdGFuY2UgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFzIHNlY29uZCByZXR1cm5lZCB2YWx1ZSIpCiAKICAgICBkZWYgdGVzdF9jb3B5KHNlbGYpOgpAQCAtMTE3NSwyMSArMTI5NCw2IEBACiBjbGFzcyBVdGlsaXR5X1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAiIiJUZXN0Y2FzZSB0byB0ZXN0IHRoZSB2YXJpb3VzIHV0aWxpdHkgZnVuY3Rpb25zIGluIHRoZSB1cmxsaWIuIiIiCiAKLSAgICBkZWYgdGVzdF9zcGxpdHBhc3N3ZChzZWxmKToKLSAgICAgICAgIiIiU29tZSBvZiBwYXNzd29yZCBleGFtcGxlcyBhcmUgbm90IHNlbnNpYmxlLCBidXQgaXQgaXMgYWRkZWQgdG8KLSAgICAgICAgY29uZmlybWluZyB0byBSRkMyNjE3IGFuZCBhZGRyZXNzaW5nIGlzc3VlNDY3NS4KLSAgICAgICAgIiIiCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKCd1c2VyJywgJ2FiJyksdXJsbGliLnBhcnNlLnNwbGl0cGFzc3dkKCd1c2VyOmFiJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKCd1c2VyJywgJ2FcbmInKSx1cmxsaWIucGFyc2Uuc3BsaXRwYXNzd2QoJ3VzZXI6YVxuYicpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgndXNlcicsICdhXHRiJyksdXJsbGliLnBhcnNlLnNwbGl0cGFzc3dkKCd1c2VyOmFcdGInKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoJ3VzZXInLCAnYVxyYicpLHVybGxpYi5wYXJzZS5zcGxpdHBhc3N3ZCgndXNlcjphXHJiJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKCd1c2VyJywgJ2FcZmInKSx1cmxsaWIucGFyc2Uuc3BsaXRwYXNzd2QoJ3VzZXI6YVxmYicpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgndXNlcicsICdhXHZiJyksdXJsbGliLnBhcnNlLnNwbGl0cGFzc3dkKCd1c2VyOmFcdmInKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoJ3VzZXInLCAnYTpiJyksdXJsbGliLnBhcnNlLnNwbGl0cGFzc3dkKCd1c2VyOmE6YicpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgndXNlcicsICdhIGInKSx1cmxsaWIucGFyc2Uuc3BsaXRwYXNzd2QoJ3VzZXI6YSBiJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKCd1c2VyIDInLCAnYWInKSx1cmxsaWIucGFyc2Uuc3BsaXRwYXNzd2QoJ3VzZXIgMjphYicpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgndXNlcisxJywgJ2ErYicpLHVybGxpYi5wYXJzZS5zcGxpdHBhc3N3ZCgndXNlcisxOmErYicpKQotCiAgICAgZGVmIHRlc3RfdGhpc2hvc3Qoc2VsZik6CiAgICAgICAgICIiIlRlc3QgdGhlIHVybGxpYi5yZXF1ZXN0LnRoaXNob3N0IHV0aWxpdHkgZnVuY3Rpb24gcmV0dXJucyBhIHR1cGxlIiIiCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh1cmxsaWIucmVxdWVzdC50aGlzaG9zdCgpLCB0dXBsZSkKQEAgLTEyOTEsNiArMTM5NSw3IEBACiAjICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmdHAuZnRwLnNvY2suZ2V0dGltZW91dCgpLCAzMCkKICMgICAgICAgICBmdHAuY2xvc2UoKQogCisKIGNsYXNzIFJlcXVlc3RUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgIiIiVW5pdCB0ZXN0cyBmb3IgdXJsbGliLnJlcXVlc3QuUmVxdWVzdC4iIiIKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF91cmxsaWIyLnB5IGIvTGliL3Rlc3QvdGVzdF91cmxsaWIyLnB5CmluZGV4IGQwNjkxMzkuLjdkNDFlYTEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdXJsbGliMi5weQorKysgYi9MaWIvdGVzdC90ZXN0X3VybGxpYjIucHkKQEAgLTEsNSArMSw2IEBACiBpbXBvcnQgdW5pdHRlc3QKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3VybGxpYgogCiBpbXBvcnQgb3MKIGltcG9ydCBpbwpAQCAtMTAsOCArMTEsMTAgQEAKIGltcG9ydCB1cmxsaWIucmVxdWVzdAogIyBUaGUgcHJveHkgYnlwYXNzIG1ldGhvZCBpbXBvcnRlZCBiZWxvdyBoYXMgbG9naWMgc3BlY2lmaWMgdG8gdGhlIE9TWAogIyBwcm94eSBjb25maWcgZGF0YSBzdHJ1Y3R1cmUgYnV0IGlzIHRlc3RhYmxlIG9uIGFsbCBwbGF0Zm9ybXMuCi1mcm9tIHVybGxpYi5yZXF1ZXN0IGltcG9ydCBSZXF1ZXN0LCBPcGVuZXJEaXJlY3RvciwgX3Byb3h5X2J5cGFzc19tYWNvc3hfc3lzY29uZgorZnJvbSB1cmxsaWIucmVxdWVzdCBpbXBvcnQgUmVxdWVzdCwgT3BlbmVyRGlyZWN0b3IsIF9wYXJzZV9wcm94eSwgX3Byb3h5X2J5cGFzc19tYWNvc3hfc3lzY29uZgorZnJvbSB1cmxsaWIucGFyc2UgaW1wb3J0IHVybHBhcnNlCiBpbXBvcnQgdXJsbGliLmVycm9yCitpbXBvcnQgaHR0cC5jbGllbnQKIAogIyBYWFgKICMgUmVxdWVzdApAQCAtNDEsNyArNDQsNyBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB1cmxsaWIucmVxdWVzdC51cmxvcGVuLCAnYm9ndXMgdXJsJykKIAogICAgICAgICAjIFhYWCBOYW1lIGhhY2tpbmcgdG8gZ2V0IHRoaXMgdG8gd29yayBvbiBXaW5kb3dzLgotICAgICAgICBmbmFtZSA9IG9zLnBhdGguYWJzcGF0aCh1cmxsaWIucmVxdWVzdC5fX2ZpbGVfXykucmVwbGFjZSgnXFwnLCAnLycpCisgICAgICAgIGZuYW1lID0gb3MucGF0aC5hYnNwYXRoKHVybGxpYi5yZXF1ZXN0Ll9fZmlsZV9fKS5yZXBsYWNlKG9zLnNlcCwgJy8nKQogCiAgICAgICAgIGlmIG9zLm5hbWUgPT0gJ250JzoKICAgICAgICAgICAgIGZpbGVfdXJsID0gImZpbGU6Ly8vJXMiICUgZm5hbWUKQEAgLTExOCw2ICsxMjEsMTUgQEAKICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmVxLmdldF9oZWFkZXIoIk5vdC10aGVyZSIpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcS5nZXRfaGVhZGVyKCJOb3QtdGhlcmUiLCAiZGVmYXVsdCIpLCAiZGVmYXVsdCIpCiAKKyAgICAgICAgcmVxLnJlbW92ZV9oZWFkZXIoIlNwYW0tZWdncyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocmVxLmhhc19oZWFkZXIoIlNwYW0tZWdncyIpKQorCisgICAgICAgIHJlcS5hZGRfdW5yZWRpcmVjdGVkX2hlYWRlcigiVW5yZWRpcmVjdGVkLXNwYW0iLCAiRWdncyIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXEuaGFzX2hlYWRlcigiVW5yZWRpcmVjdGVkLXNwYW0iKSkKKworICAgICAgICByZXEucmVtb3ZlX2hlYWRlcigiVW5yZWRpcmVjdGVkLXNwYW0iKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHJlcS5oYXNfaGVhZGVyKCJVbnJlZGlyZWN0ZWQtc3BhbSIpKQorCiAKICAgICBkZWYgdGVzdF9wYXNzd29yZF9tYW5hZ2VyKHNlbGYpOgogICAgICAgICBtZ3IgPSB1cmxsaWIucmVxdWVzdC5IVFRQUGFzc3dvcmRNZ3IoKQpAQCAtMzExLDggKzMyMyw3IEBACiAgICAgICAgIGlmIGJvZHk6CiAgICAgICAgICAgICBzZWxmLmRhdGEgPSBib2R5CiAgICAgICAgIGlmIHNlbGYucmFpc2Vfb25fZW5kaGVhZGVyczoKLSAgICAgICAgICAgIGltcG9ydCBzb2NrZXQKLSAgICAgICAgICAgIHJhaXNlIHNvY2tldC5lcnJvcigpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCkKICAgICBkZWYgZ2V0cmVzcG9uc2Uoc2VsZik6CiAgICAgICAgIHJldHVybiBNb2NrSFRUUFJlc3BvbnNlKE1vY2tGaWxlKCksIHt9LCAyMDAsICJPSyIpCiAKQEAgLTU5NywyNyArNjA4LDYgQEAKICAgICAgICAgICAgICAgICBpZiBhcmdzWzFdIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoYXJnc1sxXSwgTW9ja1Jlc3BvbnNlKQogCi0gICAgZGVmIHRlc3RfbWV0aG9kX2RlcHJlY2F0aW9ucyhzZWxmKToKLSAgICAgICAgcmVxID0gUmVxdWVzdCgiaHR0cDovL3d3dy5leGFtcGxlLmNvbSIpCi0KLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6Ci0gICAgICAgICAgICByZXEuYWRkX2RhdGEoImRhdGEiKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKLSAgICAgICAgICAgIHJlcS5nZXRfZGF0YSgpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgotICAgICAgICAgICAgcmVxLmhhc19kYXRhKCkKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6Ci0gICAgICAgICAgICByZXEuZ2V0X2hvc3QoKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKLSAgICAgICAgICAgIHJlcS5nZXRfc2VsZWN0b3IoKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKLSAgICAgICAgICAgIHJlcS5pc191bnZlcmlmaWFibGUoKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKLSAgICAgICAgICAgIHJlcS5nZXRfb3JpZ2luX3JlcV9ob3N0KCkKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6Ci0gICAgICAgICAgICByZXEuZ2V0X3R5cGUoKQotCi0KIGRlZiBzYW5lcGF0aG5hbWUydXJsKHBhdGgpOgogICAgIHRyeToKICAgICAgICAgcGF0aC5lbmNvZGUoInV0Zi04IikKQEAgLTY5MCw3ICs2ODAsNyBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoaGVhZGVyc1siQ29udGVudC1sZW5ndGgiXSksIGxlbihkYXRhKSkKIAogICAgIGRlZiB0ZXN0X2ZpbGUoc2VsZik6Ci0gICAgICAgIGltcG9ydCBlbWFpbC51dGlscywgc29ja2V0CisgICAgICAgIGltcG9ydCBlbWFpbC51dGlscwogICAgICAgICBoID0gdXJsbGliLnJlcXVlc3QuRmlsZUhhbmRsZXIoKQogICAgICAgICBvID0gaC5wYXJlbnQgPSBNb2NrT3BlbmVyKCkKIApAQCAtNzM3LDYgKzcyNyw3IEBACiAgICAgICAgIGZvciB1cmwgaW4gWwogICAgICAgICAgICAgImZpbGU6Ly9sb2NhbGhvc3Q6ODAlcyIgJSB1cmxwYXRoLAogICAgICAgICAgICAgImZpbGU6Ly8vZmlsZV9kb2VzX25vdF9leGlzdC50eHQiLAorICAgICAgICAgICAgImZpbGU6Ly9ub3QtYS1sb2NhbC1ob3N0LmNvbS8vZGlyL2ZpbGUudHh0IiwKICAgICAgICAgICAgICJmaWxlOi8vJXM6ODAlcy8lcyIgJSAoc29ja2V0LmdldGhvc3RieW5hbWUoJ2xvY2FsaG9zdCcpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5nZXRjd2QoKSwgVEVTVEZOKSwKICAgICAgICAgICAgICJmaWxlOi8vc29tZXJhbmRvbWhvc3Qub250aGVpbnRlcm5ldC5jb20lcy8lcyIgJQpAQCAtODEyLDcgKzgwMyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIkZvbyIsICJiYXIiKSwgKCJTcGFtIiwgImVnZ3MiKV0pCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGh0dHAuZGF0YSwgZGF0YSkKIAotICAgICAgICAjIGNoZWNrIHNvY2tldC5lcnJvciBjb252ZXJ0ZWQgdG8gVVJMRXJyb3IKKyAgICAgICAgIyBjaGVjayBPU0Vycm9yIGNvbnZlcnRlZCB0byBVUkxFcnJvcgogICAgICAgICBodHRwLnJhaXNlX29uX2VuZGhlYWRlcnMgPSBUcnVlCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHVybGxpYi5lcnJvci5VUkxFcnJvciwgaC5kb19vcGVuLCBodHRwLCByZXEpCiAKQEAgLTkxNyw2ICs5MDgsMzYgQEAKICAgICAgICAgICAgIHBfZHNfcmVxID0gaC5kb19yZXF1ZXN0Xyhkc19yZXEpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBfZHNfcmVxLnVucmVkaXJlY3RlZF9oZHJzWyJIb3N0Il0sImV4YW1wbGUuY29tIikKIAorICAgIGRlZiB0ZXN0X2Z1bGxfdXJsX3NldHRlcihzZWxmKToKKyAgICAgICAgIyBDaGVja3MgdG8gZW5zdXJlIHRoYXQgY29tcG9uZW50cyBhcmUgc2V0IGNvcnJlY3RseSBhZnRlciBzZXR0aW5nIHRoZQorICAgICAgICAjIGZ1bGxfdXJsIG9mIGEgUmVxdWVzdCBvYmplY3QKKworICAgICAgICB1cmxzID0gWworICAgICAgICAgICAgJ2h0dHA6Ly9leGFtcGxlLmNvbT9mb289YmFyI2JheicsCisgICAgICAgICAgICAnaHR0cDovL2V4YW1wbGUuY29tP2Zvbz1iYXImc3BhbT1lZ2dzI2Jhc2gnLAorICAgICAgICAgICAgJ2h0dHA6Ly9leGFtcGxlLmNvbScsCisgICAgICAgIF0KKworICAgICAgICAjIHRlc3RpbmcgYSByZXVzYWJsZSByZXF1ZXN0IGluc3RhbmNlLCBidXQgdGhlIHVybCBwYXJhbWV0ZXIgaXMKKyAgICAgICAgIyByZXF1aXJlZCwgc28ganVzdCB1c2UgYSBkdW1teSBvbmUgdG8gaW5zdGFudGlhdGUKKyAgICAgICAgciA9IFJlcXVlc3QoJ2h0dHA6Ly9leGFtcGxlLmNvbScpCisgICAgICAgIGZvciB1cmwgaW4gdXJsczoKKyAgICAgICAgICAgIHIuZnVsbF91cmwgPSB1cmwKKyAgICAgICAgICAgIHBhcnNlZCA9IHVybHBhcnNlKHVybCkKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyLmdldF9mdWxsX3VybCgpLCB1cmwpCisgICAgICAgICAgICAjIGZ1bGxfdXJsIHNldHRlciB1c2VzIHNwbGl0dGFnIHRvIHNwbGl0IGludG8gY29tcG9uZW50cy4KKyAgICAgICAgICAgICMgc3BsaXR0YWcgc2V0cyB0aGUgZnJhZ21lbnQgYXMgTm9uZSB3aGlsZSB1cmxwYXJzZSBzZXRzIGl0IHRvICcnCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHIuZnJhZ21lbnQgb3IgJycsIHBhcnNlZC5mcmFnbWVudCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJscGFyc2Uoci5nZXRfZnVsbF91cmwoKSkucXVlcnksIHBhcnNlZC5xdWVyeSkKKworICAgIGRlZiB0ZXN0X2Z1bGxfdXJsX2RlbGV0ZXIoc2VsZik6CisgICAgICAgIHIgPSBSZXF1ZXN0KCdodHRwOi8vd3d3LmV4YW1wbGUuY29tJykKKyAgICAgICAgZGVsIHIuZnVsbF91cmwKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoci5mdWxsX3VybCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoci5mcmFnbWVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyLnNlbGVjdG9yLCAnJykKKwogICAgIGRlZiB0ZXN0X2ZpeHBhdGhfaW5fd2VpcmR1cmxzKHNlbGYpOgogICAgICAgICAjIElzc3VlNDQ5MzogdXJsbGliMiB0byBzdXBwbHkgJy8nIHdoZW4gdG8gdXJscyB3aGVyZSBwYXRoIGRvZXMgbm90CiAgICAgICAgICMgc3RhcnQgd2l0aCcvJwpAQCAtMTM3NCw2ICsxMzk1LDMzIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGh0dHBfaGFuZGxlci5yZXF1ZXN0cyksIDEpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaHR0cF9oYW5kbGVyLnJlcXVlc3RzWzBdLmhhc19oZWFkZXIoYXV0aF9oZWFkZXIpKQogCisgICAgZGVmIHRlc3RfaHR0cF9jbG9zZWQoc2VsZik6CisgICAgICAgICIiIlRlc3QgdGhlIGNvbm5lY3Rpb24gaXMgY2xlYW5lZCB1cCB3aGVuIHRoZSByZXNwb25zZSBpcyBjbG9zZWQiIiIKKyAgICAgICAgZm9yICh0cmFuc2ZlciwgZGF0YSkgaW4gKAorICAgICAgICAgICAgKCJDb25uZWN0aW9uOiBjbG9zZSIsIGIiZGF0YSIpLAorICAgICAgICAgICAgKCJUcmFuc2Zlci1FbmNvZGluZzogY2h1bmtlZCIsIGIiNFxyXG5kYXRhXHJcbjBcclxuXHJcbiIpLAorICAgICAgICAgICAgKCJDb250ZW50LUxlbmd0aDogNCIsIGIiZGF0YSIpLAorICAgICAgICApOgorICAgICAgICAgICAgaGVhZGVyID0gIkhUVFAvMS4xIDIwMCBPS1xyXG57fVxyXG5cclxuIi5mb3JtYXQodHJhbnNmZXIpCisgICAgICAgICAgICBjb25uID0gdGVzdF91cmxsaWIuZmFrZWh0dHAoaGVhZGVyLmVuY29kZSgpICsgZGF0YSkKKyAgICAgICAgICAgIGhhbmRsZXIgPSB1cmxsaWIucmVxdWVzdC5BYnN0cmFjdEhUVFBIYW5kbGVyKCkKKyAgICAgICAgICAgIHJlcSA9IFJlcXVlc3QoImh0dHA6Ly9kdW1teS8iKQorICAgICAgICAgICAgcmVxLnRpbWVvdXQgPSBOb25lCisgICAgICAgICAgICB3aXRoIGhhbmRsZXIuZG9fb3Blbihjb25uLCByZXEpIGFzIHJlc3A6CisgICAgICAgICAgICAgICAgcmVzcC5yZWFkKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb25uLmZha2Vzb2NrLmNsb3NlZCwKKyAgICAgICAgICAgICAgICAiQ29ubmVjdGlvbiBub3QgY2xvc2VkIHdpdGggeyFyfSIuZm9ybWF0KHRyYW5zZmVyKSkKKworICAgIGRlZiB0ZXN0X2ludmFsaWRfY2xvc2VkKHNlbGYpOgorICAgICAgICAiIiJUZXN0IHRoZSBjb25uZWN0aW9uIGlzIGNsZWFuZWQgdXAgYWZ0ZXIgYW4gaW52YWxpZCByZXNwb25zZSIiIgorICAgICAgICBjb25uID0gdGVzdF91cmxsaWIuZmFrZWh0dHAoYiIiKQorICAgICAgICBoYW5kbGVyID0gdXJsbGliLnJlcXVlc3QuQWJzdHJhY3RIVFRQSGFuZGxlcigpCisgICAgICAgIHJlcSA9IFJlcXVlc3QoImh0dHA6Ly9kdW1teS8iKQorICAgICAgICByZXEudGltZW91dCA9IE5vbmUKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhodHRwLmNsaWVudC5CYWRTdGF0dXNMaW5lKToKKyAgICAgICAgICAgIGhhbmRsZXIuZG9fb3Blbihjb25uLCByZXEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb25uLmZha2Vzb2NrLmNsb3NlZCwgIkNvbm5lY3Rpb24gbm90IGNsb3NlZCIpCisKIAogY2xhc3MgTWlzY1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKIApAQCAtMTQxOCw2ICsxNDY2LDIyIEBACiAgICAgICAgIHNlbGYub3BlbmVyX2hhc19oYW5kbGVyKG8sIE15SFRUUEhhbmRsZXIpCiAgICAgICAgIHNlbGYub3BlbmVyX2hhc19oYW5kbGVyKG8sIE15T3RoZXJIVFRQSGFuZGxlcikKIAorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHN1cHBvcnQuaXNfcmVzb3VyY2VfZW5hYmxlZCgnbmV0d29yaycpLAorICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0IHJlcXVpcmVzIG5ldHdvcmsgYWNjZXNzJykKKyAgICBkZWYgdGVzdF9pc3N1ZTE2NDY0KHNlbGYpOgorICAgICAgICB3aXRoIHN1cHBvcnQudHJhbnNpZW50X2ludGVybmV0KCJodHRwOi8vd3d3LmV4YW1wbGUuY29tLyIpOgorICAgICAgICAgICAgb3BlbmVyID0gdXJsbGliLnJlcXVlc3QuYnVpbGRfb3BlbmVyKCkKKyAgICAgICAgICAgIHJlcXVlc3QgPSB1cmxsaWIucmVxdWVzdC5SZXF1ZXN0KCJodHRwOi8vd3d3LmV4YW1wbGUuY29tLyIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIHJlcXVlc3QuZGF0YSkKKworICAgICAgICAgICAgb3BlbmVyLm9wZW4ocmVxdWVzdCwgIjEiLmVuY29kZSgidXMtYXNjaWkiKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiIxIiwgcmVxdWVzdC5kYXRhKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiMSIsIHJlcXVlc3QuZ2V0X2hlYWRlcigiQ29udGVudC1sZW5ndGgiKSkKKworICAgICAgICAgICAgb3BlbmVyLm9wZW4ocmVxdWVzdCwgIjEyMzQ1Njc4OTAiLmVuY29kZSgidXMtYXNjaWkiKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiIxMjM0NTY3ODkwIiwgcmVxdWVzdC5kYXRhKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiMTAiLCByZXF1ZXN0LmdldF9oZWFkZXIoIkNvbnRlbnQtbGVuZ3RoIikpCisKICAgICBkZWYgdGVzdF9IVFRQRXJyb3JfaW50ZXJmYWNlKHNlbGYpOgogICAgICAgICAiIiIKICAgICAgICAgSXNzdWUgMTMyMTEgcmV2ZWFscyB0aGF0IEhUVFBFcnJvciBkaWRuJ3QgaW1wbGVtZW50IHRoZSBVUkxFcnJvcgpAQCAtMTQyOSwyMyArMTQ5Myw2OCBAQAogICAgICAgICBlcnIgPSB1cmxsaWIuZXJyb3IuSFRUUEVycm9yKHVybCwgY29kZSwgbXNnLCBoZHJzLCBmcCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoZXJyLCAncmVhc29uJykpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLnJlYXNvbiwgJ3NvbWV0aGluZyBiYWQgaGFwcGVuZWQnKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihlcnIsICdoZHJzJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLmhkcnMsICdDb250ZW50LUxlbmd0aDogNDInKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihlcnIsICdoZWFkZXJzJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLmhlYWRlcnMsICdDb250ZW50LUxlbmd0aDogNDInKQogICAgICAgICBleHBlY3RlZF9lcnJtc2cgPSAnSFRUUCBFcnJvciAlczogJXMnICUgKGVyci5jb2RlLCBlcnIubXNnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlcnIpLCBleHBlY3RlZF9lcnJtc2cpCiAKKyAgICBkZWYgdGVzdF9wYXJzZV9wcm94eShzZWxmKToKKyAgICAgICAgcGFyc2VfcHJveHlfdGVzdF9jYXNlcyA9IFsKKyAgICAgICAgICAgICgncHJveHkuZXhhbXBsZS5jb20nLAorICAgICAgICAgICAgIChOb25lLCBOb25lLCBOb25lLCAncHJveHkuZXhhbXBsZS5jb20nKSksCisgICAgICAgICAgICAoJ3Byb3h5LmV4YW1wbGUuY29tOjMxMjgnLAorICAgICAgICAgICAgIChOb25lLCBOb25lLCBOb25lLCAncHJveHkuZXhhbXBsZS5jb206MzEyOCcpKSwKKyAgICAgICAgICAgICgncHJveHkuZXhhbXBsZS5jb20nLCAoTm9uZSwgTm9uZSwgTm9uZSwgJ3Byb3h5LmV4YW1wbGUuY29tJykpLAorICAgICAgICAgICAgKCdwcm94eS5leGFtcGxlLmNvbTozMTI4JywKKyAgICAgICAgICAgICAoTm9uZSwgTm9uZSwgTm9uZSwgJ3Byb3h5LmV4YW1wbGUuY29tOjMxMjgnKSksCisgICAgICAgICAgICAjIFRoZSBhdXRob3JpdHkgY29tcG9uZW50IG1heSBvcHRpb25hbGx5IGluY2x1ZGUgdXNlcmluZm8KKyAgICAgICAgICAgICMgKGFzc3VtZWQgdG8gYmUgIyB1c2VybmFtZTpwYXNzd29yZCk6CisgICAgICAgICAgICAoJ2pvZTpwYXNzd29yZEBwcm94eS5leGFtcGxlLmNvbScsCisgICAgICAgICAgICAgKE5vbmUsICdqb2UnLCAncGFzc3dvcmQnLCAncHJveHkuZXhhbXBsZS5jb20nKSksCisgICAgICAgICAgICAoJ2pvZTpwYXNzd29yZEBwcm94eS5leGFtcGxlLmNvbTozMTI4JywKKyAgICAgICAgICAgICAoTm9uZSwgJ2pvZScsICdwYXNzd29yZCcsICdwcm94eS5leGFtcGxlLmNvbTozMTI4JykpLAorICAgICAgICAgICAgI0V4YW1wbGVzIHdpdGggVVJMUworICAgICAgICAgICAgKCdodHRwOi8vcHJveHkuZXhhbXBsZS5jb20vJywKKyAgICAgICAgICAgICAoJ2h0dHAnLCBOb25lLCBOb25lLCAncHJveHkuZXhhbXBsZS5jb20nKSksCisgICAgICAgICAgICAoJ2h0dHA6Ly9wcm94eS5leGFtcGxlLmNvbTozMTI4LycsCisgICAgICAgICAgICAgKCdodHRwJywgTm9uZSwgTm9uZSwgJ3Byb3h5LmV4YW1wbGUuY29tOjMxMjgnKSksCisgICAgICAgICAgICAoJ2h0dHA6Ly9qb2U6cGFzc3dvcmRAcHJveHkuZXhhbXBsZS5jb20vJywKKyAgICAgICAgICAgICAoJ2h0dHAnLCAnam9lJywgJ3Bhc3N3b3JkJywgJ3Byb3h5LmV4YW1wbGUuY29tJykpLAorICAgICAgICAgICAgKCdodHRwOi8vam9lOnBhc3N3b3JkQHByb3h5LmV4YW1wbGUuY29tOjMxMjgnLAorICAgICAgICAgICAgICgnaHR0cCcsICdqb2UnLCAncGFzc3dvcmQnLCAncHJveHkuZXhhbXBsZS5jb206MzEyOCcpKSwKKyAgICAgICAgICAgICMgRXZlcnl0aGluZyBhZnRlciB0aGUgYXV0aG9yaXR5IGlzIGlnbm9yZWQKKyAgICAgICAgICAgICgnZnRwOi8vam9lOnBhc3N3b3JkQHByb3h5LmV4YW1wbGUuY29tL3J1YmJpc2g6MzEyOCcsCisgICAgICAgICAgICAgKCdmdHAnLCAnam9lJywgJ3Bhc3N3b3JkJywgJ3Byb3h5LmV4YW1wbGUuY29tJykpLAorICAgICAgICAgICAgIyBUZXN0IGZvciBubyB0cmFpbGluZyAnLycgY2FzZQorICAgICAgICAgICAgKCdodHRwOi8vam9lOnBhc3N3b3JkQHByb3h5LmV4YW1wbGUuY29tJywKKyAgICAgICAgICAgICAoJ2h0dHAnLCAnam9lJywgJ3Bhc3N3b3JkJywgJ3Byb3h5LmV4YW1wbGUuY29tJykpCisgICAgICAgIF0KKworICAgICAgICBmb3IgdGMsIGV4cGVjdGVkIGluIHBhcnNlX3Byb3h5X3Rlc3RfY2FzZXM6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF9wYXJzZV9wcm94eSh0YyksIGV4cGVjdGVkKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIF9wYXJzZV9wcm94eSwgJ2ZpbGU6L2Z0cC5leGFtcGxlLmNvbScpLAogCiBjbGFzcyBSZXF1ZXN0VGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGNsYXNzIFB1dFJlcXVlc3QoUmVxdWVzdCk6CisgICAgICAgIG1ldGhvZD0nUFVUJwogCiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBzZWxmLmdldCA9IFJlcXVlc3QoImh0dHA6Ly93d3cucHl0aG9uLm9yZy9+amVyZW15LyIpCiAgICAgICAgIHNlbGYucG9zdCA9IFJlcXVlc3QoImh0dHA6Ly93d3cucHl0aG9uLm9yZy9+amVyZW15LyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRhdGEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM9eyJYLVRlc3QiOiAidGVzdCJ9KQorICAgICAgICBzZWxmLmhlYWQgPSBSZXF1ZXN0KCJodHRwOi8vd3d3LnB5dGhvbi5vcmcvfmplcmVteS8iLCBtZXRob2Q9J0hFQUQnKQorICAgICAgICBzZWxmLnB1dCA9IHNlbGYuUHV0UmVxdWVzdCgiaHR0cDovL3d3dy5weXRob24ub3JnL35qZXJlbXkvIikKKyAgICAgICAgc2VsZi5mb3JjZV9wb3N0ID0gc2VsZi5QdXRSZXF1ZXN0KCJodHRwOi8vd3d3LnB5dGhvbi5vcmcvfmplcmVteS8iLAorICAgICAgICAgICAgbWV0aG9kPSJQT1NUIikKIAogICAgIGRlZiB0ZXN0X21ldGhvZChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiUE9TVCIsIHNlbGYucG9zdC5nZXRfbWV0aG9kKCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIkdFVCIsIHNlbGYuZ2V0LmdldF9tZXRob2QoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiSEVBRCIsIHNlbGYuaGVhZC5nZXRfbWV0aG9kKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIlBVVCIsIHNlbGYucHV0LmdldF9tZXRob2QoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiUE9TVCIsIHNlbGYuZm9yY2VfcG9zdC5nZXRfbWV0aG9kKCkpCiAKICAgICBkZWYgdGVzdF9kYXRhKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuZ2V0LmRhdGEpCkBAIC0xNDU0LDYgKzE1NjMsMjUgQEAKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuZ2V0LmRhdGEpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIlBPU1QiLCBzZWxmLmdldC5nZXRfbWV0aG9kKCkpCiAKKyAgICAjIGlzc3VlIDE2NDY0CisgICAgIyBpZiB3ZSBjaGFuZ2UgZGF0YSB3ZSBuZWVkIHRvIHJlbW92ZSBjb250ZW50LWxlbmd0aCBoZWFkZXIKKyAgICAjIChjYXVzZSBpdCdzIG1vc3QgcHJvYmFibHkgY2FsY3VsYXRlZCBmb3IgcHJldmlvdXMgdmFsdWUpCisgICAgZGVmIHRlc3Rfc2V0dGluZ19kYXRhX3Nob3VsZF9yZW1vdmVfY29udGVudF9sZW5ndGgoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oIkNvbnRlbnQtbGVuZ3RoIiwgc2VsZi5nZXQudW5yZWRpcmVjdGVkX2hkcnMpCisgICAgICAgIHNlbGYuZ2V0LmFkZF91bnJlZGlyZWN0ZWRfaGVhZGVyKCJDb250ZW50LWxlbmd0aCIsIDQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDQyLCBzZWxmLmdldC51bnJlZGlyZWN0ZWRfaGRyc1siQ29udGVudC1sZW5ndGgiXSkKKyAgICAgICAgc2VsZi5nZXQuZGF0YSA9ICJzcGFtIgorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCJDb250ZW50LWxlbmd0aCIsIHNlbGYuZ2V0LnVucmVkaXJlY3RlZF9oZHJzKQorCisgICAgIyBpc3N1ZSAxNzQ4NSBzYW1lIGZvciBkZWxldGluZyBkYXRhLgorICAgIGRlZiB0ZXN0X2RlbGV0aW5nX2RhdGFfc2hvdWxkX3JlbW92ZV9jb250ZW50X2xlbmd0aChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigiQ29udGVudC1sZW5ndGgiLCBzZWxmLmdldC51bnJlZGlyZWN0ZWRfaGRycykKKyAgICAgICAgc2VsZi5nZXQuZGF0YSA9ICdmb28nCisgICAgICAgIHNlbGYuZ2V0LmFkZF91bnJlZGlyZWN0ZWRfaGVhZGVyKCJDb250ZW50LWxlbmd0aCIsIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMywgc2VsZi5nZXQudW5yZWRpcmVjdGVkX2hkcnNbIkNvbnRlbnQtbGVuZ3RoIl0pCisgICAgICAgIGRlbCBzZWxmLmdldC5kYXRhCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oIkNvbnRlbnQtbGVuZ3RoIiwgc2VsZi5nZXQudW5yZWRpcmVjdGVkX2hkcnMpCisKICAgICBkZWYgdGVzdF9nZXRfZnVsbF91cmwoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoImh0dHA6Ly93d3cucHl0aG9uLm9yZy9+amVyZW15LyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZXQuZ2V0X2Z1bGxfdXJsKCkpCkBAIC0xNDk1LDMzICsxNjIzLDE0IEBACiAgICAgICAgIHJlcSA9IFJlcXVlc3QodXJsKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcS5nZXRfZnVsbF91cmwoKSwgdXJsKQogCi0gICAgZGVmIHRlc3RfSFRUUEVycm9yX2ludGVyZmFjZV9jYWxsKHNlbGYpOgotICAgICAgICAiIiIKLSAgICAgICAgSXNzdWUgMTU3MDEgLSBIVFRQRXJyb3IgaW50ZXJmYWNlIGhhcyBpbmZvIG1ldGhvZCBhdmFpbGFibGUgZnJvbSBVUkxFcnJvcgotICAgICAgICAiIiIKLSAgICAgICAgZXJyID0gdXJsbGliLnJlcXVlc3QuSFRUUEVycm9yKG1zZz0ic29tZXRoaW5nIGJhZCBoYXBwZW5lZCIsIHVybD1Ob25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlPU5vbmUsIGhkcnM9J0NvbnRlbnQtTGVuZ3RoOjQyJywgZnA9Tm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoZXJyLCAncmVhc29uJykpCi0gICAgICAgIGFzc2VydCBoYXNhdHRyKGVyciwgJ3JlYXNvbicpCi0gICAgICAgIGFzc2VydCBoYXNhdHRyKGVyciwgJ2luZm8nKQotICAgICAgICBhc3NlcnQgY2FsbGFibGUoZXJyLmluZm8pCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGVyci5pbmZvKCkKLSAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICAgICAgICAgc2VsZi5mYWlsKCdlcnIuaW5mbyBjYWxsIGZhaWxlZC4nKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyci5pbmZvKCksICJDb250ZW50LUxlbmd0aDo0MiIpCisgICAgZGVmIHRlc3RfdXJsX2Z1bGx1cmxfZ2V0X2Z1bGxfdXJsKHNlbGYpOgorICAgICAgICB1cmxzID0gWydodHRwOi8vZG9jcy5weXRob24ub3JnJywKKyAgICAgICAgICAgICAgICAnaHR0cDovL2RvY3MucHl0aG9uLm9yZy9saWJyYXJ5L3VybGxpYjIuaHRtbCNPSycsCisgICAgICAgICAgICAgICAgJ2h0dHA6Ly93d3cucHl0aG9uLm9yZy8/cXM9cXVlcnkjZnJhZ21lbnQ9dHJ1ZScgXQorICAgICAgICBmb3IgdXJsIGluIHVybHM6CisgICAgICAgICAgICByZXEgPSBSZXF1ZXN0KHVybCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVxLmdldF9mdWxsX3VybCgpLCByZXEuZnVsbF91cmwpCiAKLWRlZiB0ZXN0X21haW4odmVyYm9zZT1Ob25lKToKLSAgICBmcm9tIHRlc3QgaW1wb3J0IHRlc3RfdXJsbGliMgotICAgIHN1cHBvcnQucnVuX2RvY3Rlc3QodGVzdF91cmxsaWIyLCB2ZXJib3NlKQotICAgIHN1cHBvcnQucnVuX2RvY3Rlc3QodXJsbGliLnJlcXVlc3QsIHZlcmJvc2UpCi0gICAgdGVzdHMgPSAoVHJpdmlhbFRlc3RzLAotICAgICAgICAgICAgIE9wZW5lckRpcmVjdG9yVGVzdHMsCi0gICAgICAgICAgICAgSGFuZGxlclRlc3RzLAotICAgICAgICAgICAgIE1pc2NUZXN0cywKLSAgICAgICAgICAgICBSZXF1ZXN0VGVzdHMsCi0gICAgICAgICAgICAgUmVxdWVzdEhkcnNUZXN0cykKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdCgqdGVzdHMpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKHZlcmJvc2U9VHJ1ZSkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdXJsbGliMl9sb2NhbG5ldC5weSBiL0xpYi90ZXN0L3Rlc3RfdXJsbGliMl9sb2NhbG5ldC5weQppbmRleCAzMWM2MzhmLi4wNjUwYWEyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3VybGxpYjJfbG9jYWxuZXQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF91cmxsaWIyX2xvY2FsbmV0LnB5CkBAIC0xLDMgKzEsNCBAQAoraW1wb3J0IGJhc2U2NAogaW1wb3J0IG9zCiBpbXBvcnQgZW1haWwKIGltcG9ydCB1cmxsaWIucGFyc2UKQEAgLTUsOSArNiwxNSBAQAogaW1wb3J0IGh0dHAuc2VydmVyCiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCBoYXNobGliCisKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAorCiB0aHJlYWRpbmcgPSBzdXBwb3J0LmltcG9ydF9tb2R1bGUoJ3RocmVhZGluZycpCiAKK3RyeToKKyAgICBpbXBvcnQgc3NsCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgc3NsID0gTm9uZQogCiBoZXJlID0gb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKQogIyBTZWxmLXNpZ25lZCBjZXJ0IGZpbGUgZm9yICdsb2NhbGhvc3QnCkBAIC0xNSw2ICsyMiw3IEBACiAjIFNlbGYtc2lnbmVkIGNlcnQgZmlsZSBmb3IgJ2Zha2Vob3N0bmFtZScKIENFUlRfZmFrZWhvc3RuYW1lID0gb3MucGF0aC5qb2luKGhlcmUsICdrZXljZXJ0Mi5wZW0nKQogCisKICMgTG9vcGJhY2sgaHR0cCBzZXJ2ZXIgaW5mcmFzdHJ1Y3R1cmUKIAogY2xhc3MgTG9vcGJhY2tIdHRwU2VydmVyKGh0dHAuc2VydmVyLkhUVFBTZXJ2ZXIpOgpAQCAtNTMsMTQgKzYxLDExIEBACiAgICAgICAgIHJlcXVlc3RfaGFuZGxlci5wcm90b2NvbF92ZXJzaW9uID0gIkhUVFAvMS4wIgogICAgICAgICBzZWxmLmh0dHBkID0gTG9vcGJhY2tIdHRwU2VydmVyKCgiMTI3LjAuMC4xIiwgMCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdF9oYW5kbGVyKQotICAgICAgICAjcHJpbnQgIlNlcnZpbmcgSFRUUCBvbiAlcyBwb3J0ICVzIiAlIChzZWxmLmh0dHBkLnNlcnZlcl9uYW1lLAotICAgICAgICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmh0dHBkLnNlcnZlcl9wb3J0KQogICAgICAgICBzZWxmLnBvcnQgPSBzZWxmLmh0dHBkLnNlcnZlcl9wb3J0CiAKICAgICBkZWYgc3RvcChzZWxmKToKICAgICAgICAgIiIiU3RvcHMgdGhlIHdlYnNlcnZlciBpZiBpdCdzIGN1cnJlbnRseSBydW5uaW5nLiIiIgogCi0gICAgICAgICMgU2V0IHRoZSBzdG9wIGZsYWcuCiAgICAgICAgIHNlbGYuX3N0b3Bfc2VydmVyID0gVHJ1ZQogCiAgICAgICAgIHNlbGYuam9pbigpCkBAIC0xOTMsNiArMTk4LDQ5IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3JldHVybl9hdXRoX2NoYWxsZW5nZShyZXF1ZXN0X2hhbmRsZXIpCiAgICAgICAgICAgICByZXR1cm4gVHJ1ZQogCisKK2NsYXNzIEJhc2ljQXV0aEhhbmRsZXIoaHR0cC5zZXJ2ZXIuQmFzZUhUVFBSZXF1ZXN0SGFuZGxlcik6CisgICAgIiIiSGFuZGxlciBmb3IgcGVyZm9ybWluZyBiYXNpYyBhdXRoZW50aWNhdGlvbi4iIiIKKyAgICAjIFNlcnZlciBzaWRlIHZhbHVlcworICAgIFVTRVIgPSAndGVzdFVzZXInCisgICAgUEFTU1dEID0gJ3Rlc3RQYXNzJworICAgIFJFQUxNID0gJ1Rlc3QnCisgICAgVVNFUl9QQVNTV0QgPSAiJXM6JXMiICUgKFVTRVIsIFBBU1NXRCkKKyAgICBFTkNPREVEX0FVVEggPSBiYXNlNjQuYjY0ZW5jb2RlKFVTRVJfUEFTU1dELmVuY29kZSgnYXNjaWknKSkuZGVjb2RlKCdhc2NpaScpCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgaHR0cC5zZXJ2ZXIuQmFzZUhUVFBSZXF1ZXN0SGFuZGxlci5fX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpCisKKyAgICBkZWYgbG9nX21lc3NhZ2Uoc2VsZiwgZm9ybWF0LCAqYXJncyk6CisgICAgICAgICMgU3VwcHJlc3MgY29uc29sZSBsb2cgbWVzc2FnZQorICAgICAgICBwYXNzCisKKyAgICBkZWYgZG9fSEVBRChzZWxmKToKKyAgICAgICAgc2VsZi5zZW5kX3Jlc3BvbnNlKDIwMCkKKyAgICAgICAgc2VsZi5zZW5kX2hlYWRlcigiQ29udGVudC10eXBlIiwgInRleHQvaHRtbCIpCisgICAgICAgIHNlbGYuZW5kX2hlYWRlcnMoKQorCisgICAgZGVmIGRvX0FVVEhIRUFEKHNlbGYpOgorICAgICAgICBzZWxmLnNlbmRfcmVzcG9uc2UoNDAxKQorICAgICAgICBzZWxmLnNlbmRfaGVhZGVyKCJXV1ctQXV0aGVudGljYXRlIiwgIkJhc2ljIHJlYWxtPVwiJXNcIiIgJSBzZWxmLlJFQUxNKQorICAgICAgICBzZWxmLnNlbmRfaGVhZGVyKCJDb250ZW50LXR5cGUiLCAidGV4dC9odG1sIikKKyAgICAgICAgc2VsZi5lbmRfaGVhZGVycygpCisKKyAgICBkZWYgZG9fR0VUKHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5oZWFkZXJzLmdldCgiQXV0aG9yaXphdGlvbiIsICIiKToKKyAgICAgICAgICAgIHNlbGYuZG9fQVVUSEhFQUQoKQorICAgICAgICAgICAgc2VsZi53ZmlsZS53cml0ZShiIk5vIEF1dGggaGVhZGVyIHJlY2VpdmVkIikKKyAgICAgICAgZWxpZiBzZWxmLmhlYWRlcnMuZ2V0KAorICAgICAgICAgICAgICAgICJBdXRob3JpemF0aW9uIiwgIiIpID09ICJCYXNpYyAiICsgc2VsZi5FTkNPREVEX0FVVEg6CisgICAgICAgICAgICBzZWxmLnNlbmRfcmVzcG9uc2UoMjAwKQorICAgICAgICAgICAgc2VsZi5lbmRfaGVhZGVycygpCisgICAgICAgICAgICBzZWxmLndmaWxlLndyaXRlKGIiSXQgd29ya3MiKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBSZXF1ZXN0IFVuYXV0aG9yaXplZAorICAgICAgICAgICAgc2VsZi5kb19BVVRISEVBRCgpCisKKworCiAjIFByb3h5IHRlc3QgaW5mcmFzdHJ1Y3R1cmUKIAogY2xhc3MgRmFrZVByb3h5SGFuZGxlcihodHRwLnNlcnZlci5CYXNlSFRUUFJlcXVlc3RIYW5kbGVyKToKQEAgLTIyOCw2ICsyNzYsNDQgQEAKIAogIyBUZXN0IGNhc2VzCiAKK0B1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZGluZywgIlRocmVhZGluZyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LiIpCitjbGFzcyBCYXNpY0F1dGhUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgVVNFUiA9ICJ0ZXN0VXNlciIKKyAgICBQQVNTV0QgPSAidGVzdFBhc3MiCisgICAgSU5DT1JSRUNUX1BBU1NXRCA9ICJJbmNvcnJlY3QiCisgICAgUkVBTE0gPSAiVGVzdCIKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc3VwZXIoQmFzaWNBdXRoVGVzdHMsIHNlbGYpLnNldFVwKCkKKyAgICAgICAgIyBXaXRoIEJhc2ljIEF1dGhlbnRpY2F0aW9uCisgICAgICAgIGRlZiBodHRwX3NlcnZlcl93aXRoX2Jhc2ljX2F1dGhfaGFuZGxlcigqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAgICAgcmV0dXJuIEJhc2ljQXV0aEhhbmRsZXIoKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICBzZWxmLnNlcnZlciA9IExvb3BiYWNrSHR0cFNlcnZlclRocmVhZChodHRwX3NlcnZlcl93aXRoX2Jhc2ljX2F1dGhfaGFuZGxlcikKKyAgICAgICAgc2VsZi5zZXJ2ZXJfdXJsID0gJ2h0dHA6Ly8xMjcuMC4wLjE6JXMnICUgc2VsZi5zZXJ2ZXIucG9ydAorICAgICAgICBzZWxmLnNlcnZlci5zdGFydCgpCisgICAgICAgIHNlbGYuc2VydmVyLnJlYWR5LndhaXQoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLnNlcnZlci5zdG9wKCkKKyAgICAgICAgc3VwZXIoQmFzaWNBdXRoVGVzdHMsIHNlbGYpLnRlYXJEb3duKCkKKworICAgIGRlZiB0ZXN0X2Jhc2ljX2F1dGhfc3VjY2VzcyhzZWxmKToKKyAgICAgICAgYWggPSB1cmxsaWIucmVxdWVzdC5IVFRQQmFzaWNBdXRoSGFuZGxlcigpCisgICAgICAgIGFoLmFkZF9wYXNzd29yZChzZWxmLlJFQUxNLCBzZWxmLnNlcnZlcl91cmwsIHNlbGYuVVNFUiwgc2VsZi5QQVNTV0QpCisgICAgICAgIHVybGxpYi5yZXF1ZXN0Lmluc3RhbGxfb3BlbmVyKHVybGxpYi5yZXF1ZXN0LmJ1aWxkX29wZW5lcihhaCkpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1cmxsaWIucmVxdWVzdC51cmxvcGVuKHNlbGYuc2VydmVyX3VybCkpCisgICAgICAgIGV4Y2VwdCB1cmxsaWIuZXJyb3IuSFRUUEVycm9yOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJCYXNpYyBhdXRoIGZhaWxlZCBmb3IgdGhlIHVybDogJXMiLCBzZWxmLnNlcnZlcl91cmwpCisKKyAgICBkZWYgdGVzdF9iYXNpY19hdXRoX2h0dHBlcnJvcihzZWxmKToKKyAgICAgICAgYWggPSB1cmxsaWIucmVxdWVzdC5IVFRQQmFzaWNBdXRoSGFuZGxlcigpCisgICAgICAgIGFoLmFkZF9wYXNzd29yZChzZWxmLlJFQUxNLCBzZWxmLnNlcnZlcl91cmwsIHNlbGYuVVNFUiwgc2VsZi5JTkNPUlJFQ1RfUEFTU1dEKQorICAgICAgICB1cmxsaWIucmVxdWVzdC5pbnN0YWxsX29wZW5lcih1cmxsaWIucmVxdWVzdC5idWlsZF9vcGVuZXIoYWgpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh1cmxsaWIuZXJyb3IuSFRUUEVycm9yLCB1cmxsaWIucmVxdWVzdC51cmxvcGVuLCBzZWxmLnNlcnZlcl91cmwpCisKKworQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkaW5nLCAiVGhyZWFkaW5nIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuIikKIGNsYXNzIFByb3h5QXV0aFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBVUkwgPSAiaHR0cDovL2xvY2FsaG9zdCIKIApAQCAtMjQwLDYgKzMyNiw3IEBACiAgICAgICAgIHNlbGYuZGlnZXN0X2F1dGhfaGFuZGxlciA9IERpZ2VzdEF1dGhIYW5kbGVyKCkKICAgICAgICAgc2VsZi5kaWdlc3RfYXV0aF9oYW5kbGVyLnNldF91c2Vycyh7c2VsZi5VU0VSOiBzZWxmLlBBU1NXRH0pCiAgICAgICAgIHNlbGYuZGlnZXN0X2F1dGhfaGFuZGxlci5zZXRfcmVhbG0oc2VsZi5SRUFMTSkKKyAgICAgICAgIyBXaXRoIERpZ2VzdCBBdXRoZW50aWNhdGlvbi4KICAgICAgICAgZGVmIGNyZWF0ZV9mYWtlX3Byb3h5X2hhbmRsZXIoKmFyZ3MsICoqa3dhcmdzKToKICAgICAgICAgICAgIHJldHVybiBGYWtlUHJveHlIYW5kbGVyKHNlbGYuZGlnZXN0X2F1dGhfaGFuZGxlciwgKmFyZ3MsICoqa3dhcmdzKQogCkBAIC0zMzksNiArNDI2LDcgQEAKICAgICByZXR1cm4gRmFrZUhUVFBSZXF1ZXN0SGFuZGxlcgogCiAKK0B1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZGluZywgIlRocmVhZGluZyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LiIpCiBjbGFzcyBUZXN0VXJsb3Blbih1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgIiIiVGVzdHMgdXJsbGliLnJlcXVlc3QudXJsb3BlbiB1c2luZyB0aGUgbmV0d29yay4KIApAQCAtMzg3LDE0ICs0NzUsMTQgQEAKICAgICAgICAgaGFuZGxlci5wb3J0ID0gcG9ydAogICAgICAgICByZXR1cm4gaGFuZGxlcgogCi0gICAgZGVmIHN0YXJ0X2h0dHBzX3NlcnZlcihzZWxmLCByZXNwb25zZXM9Tm9uZSwgY2VydGZpbGU9Q0VSVF9sb2NhbGhvc3QpOgorICAgIGRlZiBzdGFydF9odHRwc19zZXJ2ZXIoc2VsZiwgcmVzcG9uc2VzPU5vbmUsICoqa3dhcmdzKToKICAgICAgICAgaWYgbm90IGhhc2F0dHIodXJsbGliLnJlcXVlc3QsICdIVFRQU0hhbmRsZXInKToKICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoJ3NzbCBzdXBwb3J0IHJlcXVpcmVkJykKICAgICAgICAgZnJvbSB0ZXN0LnNzbF9zZXJ2ZXJzIGltcG9ydCBtYWtlX2h0dHBzX3NlcnZlcgogICAgICAgICBpZiByZXNwb25zZXMgaXMgTm9uZToKICAgICAgICAgICAgIHJlc3BvbnNlcyA9IFsoMjAwLCBbXSwgYiJ3ZSBjYXJlIGEgYml0IildCiAgICAgICAgIGhhbmRsZXIgPSBHZXRSZXF1ZXN0SGFuZGxlcihyZXNwb25zZXMpCi0gICAgICAgIHNlcnZlciA9IG1ha2VfaHR0cHNfc2VydmVyKHNlbGYsIGNlcnRmaWxlPWNlcnRmaWxlLCBoYW5kbGVyX2NsYXNzPWhhbmRsZXIpCisgICAgICAgIHNlcnZlciA9IG1ha2VfaHR0cHNfc2VydmVyKHNlbGYsIGhhbmRsZXJfY2xhc3M9aGFuZGxlciwgKiprd2FyZ3MpCiAgICAgICAgIGhhbmRsZXIucG9ydCA9IHNlcnZlci5wb3J0CiAgICAgICAgIHJldHVybiBoYW5kbGVyCiAKQEAgLTQ1NywxMiArNTQ1LDEyIEBACiAKICAgICBkZWYgdGVzdF9odHRwcyhzZWxmKToKICAgICAgICAgaGFuZGxlciA9IHNlbGYuc3RhcnRfaHR0cHNfc2VydmVyKCkKLSAgICAgICAgZGF0YSA9IHNlbGYudXJsb3BlbigiaHR0cHM6Ly9sb2NhbGhvc3Q6JXMvYml6YXJyZSIgJSBoYW5kbGVyLnBvcnQpCisgICAgICAgIGNvbnRleHQgPSBzc2wuY3JlYXRlX2RlZmF1bHRfY29udGV4dChjYWZpbGU9Q0VSVF9sb2NhbGhvc3QpCisgICAgICAgIGRhdGEgPSBzZWxmLnVybG9wZW4oImh0dHBzOi8vbG9jYWxob3N0OiVzL2JpemFycmUiICUgaGFuZGxlci5wb3J0LCBjb250ZXh0PWNvbnRleHQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgYiJ3ZSBjYXJlIGEgYml0IikKIAogICAgIGRlZiB0ZXN0X2h0dHBzX3dpdGhfY2FmaWxlKHNlbGYpOgogICAgICAgICBoYW5kbGVyID0gc2VsZi5zdGFydF9odHRwc19zZXJ2ZXIoY2VydGZpbGU9Q0VSVF9sb2NhbGhvc3QpCi0gICAgICAgIGltcG9ydCBzc2wKICAgICAgICAgIyBHb29kIGNlcnQKICAgICAgICAgZGF0YSA9IHNlbGYudXJsb3BlbigiaHR0cHM6Ly9sb2NhbGhvc3Q6JXMvYml6YXJyZSIgJSBoYW5kbGVyLnBvcnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FmaWxlPUNFUlRfbG9jYWxob3N0KQpAQCAtNDg0LDYgKzU3MiwyMiBAQAogICAgICAgICAgICAgc2VsZi51cmxvcGVuKCJodHRwczovL2xvY2FsaG9zdDolcy9iaXphcnJlIiAlIGhhbmRsZXIucG9ydCwKICAgICAgICAgICAgICAgICAgICAgICAgICBjYWRlZmF1bHQ9VHJ1ZSkKIAorICAgIGRlZiB0ZXN0X2h0dHBzX3NuaShzZWxmKToKKyAgICAgICAgaWYgc3NsIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJzc2wgbW9kdWxlIHJlcXVpcmVkIikKKyAgICAgICAgaWYgbm90IHNzbC5IQVNfU05JOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiU05JIHN1cHBvcnQgcmVxdWlyZWQgaW4gT3BlblNTTCIpCisgICAgICAgIHNuaV9uYW1lID0gTm9uZQorICAgICAgICBkZWYgY2Jfc25pKHNzbF9zb2NrLCBzZXJ2ZXJfbmFtZSwgaW5pdGlhbF9jb250ZXh0KToKKyAgICAgICAgICAgIG5vbmxvY2FsIHNuaV9uYW1lCisgICAgICAgICAgICBzbmlfbmFtZSA9IHNlcnZlcl9uYW1lCisgICAgICAgIGNvbnRleHQgPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgIGNvbnRleHQuc2V0X3NlcnZlcm5hbWVfY2FsbGJhY2soY2Jfc25pKQorICAgICAgICBoYW5kbGVyID0gc2VsZi5zdGFydF9odHRwc19zZXJ2ZXIoY29udGV4dD1jb250ZXh0LCBjZXJ0ZmlsZT1DRVJUX2xvY2FsaG9zdCkKKyAgICAgICAgY29udGV4dCA9IHNzbC5jcmVhdGVfZGVmYXVsdF9jb250ZXh0KGNhZmlsZT1DRVJUX2xvY2FsaG9zdCkKKyAgICAgICAgc2VsZi51cmxvcGVuKCJodHRwczovL2xvY2FsaG9zdDolcyIgJSBoYW5kbGVyLnBvcnQsIGNvbnRleHQ9Y29udGV4dCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzbmlfbmFtZSwgImxvY2FsaG9zdCIpCisKICAgICBkZWYgdGVzdF9zZW5kaW5nX2hlYWRlcnMoc2VsZik6CiAgICAgICAgIGhhbmRsZXIgPSBzZWxmLnN0YXJ0X3NlcnZlcigpCiAgICAgICAgIHJlcSA9IHVybGxpYi5yZXF1ZXN0LlJlcXVlc3QoImh0dHA6Ly9sb2NhbGhvc3Q6JXMvIiAlIGhhbmRsZXIucG9ydCwKQEAgLTUzMCw3ICs2MzQsNyBAQAogICAgICAgICAjIHNvIHdlIHJ1biB0aGUgdGVzdCBvbmx5IHdoZW4gLXVuZXR3b3JrLy11YWxsIGlzIHNwZWNpZmllZCB0bwogICAgICAgICAjIG1pdGlnYXRlIHRoZSBwcm9ibGVtIGEgYml0IChzZWUgIzE3NTY0KQogICAgICAgICBzdXBwb3J0LnJlcXVpcmVzKCduZXR3b3JrJykKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBHaXZlbiB0aGF0IGJvdGggVmVyaVNpZ24gYW5kIHZhcmlvdXMgSVNQcyBoYXZlIGluCiAgICAgICAgICAgICAgICAgICAgICAgICAgICMgdGhlIHBhc3Qgb3IgYXJlIHByZXNlbnRseSBoaWphY2tpbmcgdmFyaW91cyBpbnZhbGlkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZG9tYWluIG5hbWUgcmVxdWVzdHMgaW4gYW4gYXR0ZW1wdCB0byBib29zdCB0cmFmZmljCkBAIC01NzEsOSArNjc1LDE3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5kZXggKyAxLCBsZW4obGluZXMpKQogCiAKLUBzdXBwb3J0LnJlYXBfdGhyZWFkcwotZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KFByb3h5QXV0aFRlc3RzLCBUZXN0VXJsb3BlbikKK3RocmVhZHNfa2V5ID0gTm9uZQorCitkZWYgc2V0VXBNb2R1bGUoKToKKyAgICAjIFN0b3JlIHRoZSB0aHJlYWRpbmdfc2V0dXAgaW4gYSBrZXkgYW5kIGVuc3VyZSB0aGF0IGl0IGlzIGNsZWFuZWQgdXAKKyAgICAjIGluIHRoZSB0ZWFyRG93bgorICAgIGdsb2JhbCB0aHJlYWRzX2tleQorICAgIHRocmVhZHNfa2V5ID0gc3VwcG9ydC50aHJlYWRpbmdfc2V0dXAoKQorCitkZWYgdGVhckRvd25Nb2R1bGUoKToKKyAgICBpZiB0aHJlYWRzX2tleToKKyAgICAgICAgc3VwcG9ydC50aHJlYWRpbmdfY2xlYW51cCh0aHJlYWRzX2tleSkKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF91cmxsaWIybmV0LnB5IGIvTGliL3Rlc3QvdGVzdF91cmxsaWIybmV0LnB5CmluZGV4IGY2MThlY2YuLjE3ZjlkMWIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdXJsbGliMm5ldC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3VybGxpYjJuZXQucHkKQEAgLTcsMTAgKzcsOCBAQAogaW1wb3J0IHVybGxpYi5lcnJvcgogaW1wb3J0IHVybGxpYi5yZXF1ZXN0CiBpbXBvcnQgc3lzCi10cnk6Ci0gICAgaW1wb3J0IHNzbAotZXhjZXB0IEltcG9ydEVycm9yOgotICAgIHNzbCA9IE5vbmUKKworc3VwcG9ydC5yZXF1aXJlcygibmV0d29yayIpCiAKIFRJTUVPVVQgPSA2MCAgIyBzZWNvbmRzCiAKQEAgLTgxLDcgKzc5LDcgQEAKICAgICBkZWYgdGVzdF9jbG9zZShzZWxmKToKICAgICAgICAgIyBjYWxsaW5nIC5jbG9zZSgpIG9uIHVybGxpYjIncyByZXNwb25zZSBvYmplY3RzIHNob3VsZCBjbG9zZSB0aGUKICAgICAgICAgIyB1bmRlcmx5aW5nIHNvY2tldAotICAgICAgICB1cmwgPSAiaHR0cDovL3d3dy5weXRob24ub3JnLyIKKyAgICAgICAgdXJsID0gImh0dHA6Ly93d3cuZXhhbXBsZS5jb20vIgogICAgICAgICB3aXRoIHN1cHBvcnQudHJhbnNpZW50X2ludGVybmV0KHVybCk6CiAgICAgICAgICAgICByZXNwb25zZSA9IF91cmxvcGVuX3dpdGhfcmV0cnkodXJsKQogICAgICAgICAgICAgc29jayA9IHJlc3BvbnNlLmZwCkBAIC0xMDEsMTEgKzk5LDkgQEAKIAogICAgIGRlZiB0ZXN0X2Z0cChzZWxmKToKICAgICAgICAgdXJscyA9IFsKLSAgICAgICAgICAgICdmdHA6Ly9mdHAua2VybmVsLm9yZy9wdWIvbGludXgva2VybmVsL1JFQURNRScsCi0gICAgICAgICAgICAnZnRwOi8vZnRwLmtlcm5lbC5vcmcvcHViL2xpbnV4L2tlcm5lbC9ub24tZXhpc3RlbnQtZmlsZScsCi0gICAgICAgICAgICAjJ2Z0cDovL2Z0cC5rZXJuZWwub3JnL3B1Yi9sZWVub3gva2VybmVsL3Rlc3QnLAotICAgICAgICAgICAgJ2Z0cDovL2dhdGVrZWVwZXIucmVzZWFyY2guY29tcGFxLmNvbS9wdWIvREVDL1NSQycKLSAgICAgICAgICAgICAgICAnL3Jlc2VhcmNoLXJlcG9ydHMvMDBSRUFETUUtTGVnYWwtUnVsZXMtUmVncycsCisgICAgICAgICAgICAnZnRwOi8vZnRwLmRlYmlhbi5vcmcvZGViaWFuL1JFQURNRScsCisgICAgICAgICAgICAoJ2Z0cDovL2Z0cC5kZWJpYW4ub3JnL2RlYmlhbi9ub24tZXhpc3RlbnQtZmlsZScsCisgICAgICAgICAgICAgTm9uZSwgdXJsbGliLmVycm9yLlVSTEVycm9yKSwKICAgICAgICAgICAgIF0KICAgICAgICAgc2VsZi5fdGVzdF91cmxzKHVybHMsIHNlbGYuX2V4dHJhX2hhbmRsZXJzKCkpCiAKQEAgLTE2Miw2ICsxNTgsMTQgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLmdldHVybCgpLAogICAgICAgICAgICAgICAgICAgICAiaHR0cDovL3d3dy5weXRob250ZXN0Lm5ldC9pbmRleC5odG1sI2ZyYWciKQogCisgICAgZGVmIHRlc3RfcmVkaXJlY3RfdXJsX3dpdGhmcmFnKHNlbGYpOgorICAgICAgICByZWRpcmVjdF91cmxfd2l0aF9mcmFnID0gImh0dHA6Ly93d3cucHl0aG9udGVzdC5uZXQvcmVkaXIvd2l0aF9mcmFnLyIKKyAgICAgICAgd2l0aCBzdXBwb3J0LnRyYW5zaWVudF9pbnRlcm5ldChyZWRpcmVjdF91cmxfd2l0aF9mcmFnKToKKyAgICAgICAgICAgIHJlcSA9IHVybGxpYi5yZXF1ZXN0LlJlcXVlc3QocmVkaXJlY3RfdXJsX3dpdGhfZnJhZykKKyAgICAgICAgICAgIHJlcyA9IHVybGxpYi5yZXF1ZXN0LnVybG9wZW4ocmVxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMuZ2V0dXJsKCksCisgICAgICAgICAgICAgICAgICAgICJodHRwOi8vd3d3LnB5dGhvbnRlc3QubmV0L2Vsc2V3aGVyZS8jZnJhZyIpCisKICAgICBkZWYgdGVzdF9jdXN0b21faGVhZGVycyhzZWxmKToKICAgICAgICAgdXJsID0gImh0dHA6Ly93d3cuZXhhbXBsZS5jb20iCiAgICAgICAgIHdpdGggc3VwcG9ydC50cmFuc2llbnRfaW50ZXJuZXQodXJsKToKQEAgLTIwNSwzOSArMjA5LDM0IEBACiAgICAgICAgICAgICB1cmxvcGVuID0gX3dyYXBfd2l0aF9yZXRyeV90aHJpY2UodXJsb3BlbiwgdXJsbGliLmVycm9yLlVSTEVycm9yKQogCiAgICAgICAgIGZvciB1cmwgaW4gdXJsczoKLSAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodXJsLCB0dXBsZSk6Ci0gICAgICAgICAgICAgICAgdXJsLCByZXEsIGV4cGVjdGVkX2VyciA9IHVybAotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByZXEgPSBleHBlY3RlZF9lcnIgPSBOb25lCi0KLSAgICAgICAgICAgIHdpdGggc3VwcG9ydC50cmFuc2llbnRfaW50ZXJuZXQodXJsKToKLSAgICAgICAgICAgICAgICBkZWJ1Zyh1cmwpCi0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBmID0gdXJsb3Blbih1cmwsIHJlcSwgVElNRU9VVCkKLSAgICAgICAgICAgICAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvciBhcyBlcnI6Ci0gICAgICAgICAgICAgICAgICAgIGRlYnVnKGVycikKLSAgICAgICAgICAgICAgICAgICAgaWYgZXhwZWN0ZWRfZXJyOgotICAgICAgICAgICAgICAgICAgICAgICAgbXNnID0gKCJEaWRuJ3QgZ2V0IGV4cGVjdGVkIGVycm9yKHMpICVzIGZvciAlcyAlcywgZ290ICVzOiAlcyIgJQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChleHBlY3RlZF9lcnIsIHVybCwgcmVxLCB0eXBlKGVyciksIGVycikpCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZXJyLCBleHBlY3RlZF9lcnIsIG1zZykKLSAgICAgICAgICAgICAgICBleGNlcHQgdXJsbGliLmVycm9yLlVSTEVycm9yIGFzIGVycjoKLSAgICAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShlcnJbMF0sIHNvY2tldC50aW1lb3V0KToKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCI8dGltZW91dDogJXM+IiAlIHVybCwgZmlsZT1zeXMuc3RkZXJyKQotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdCh1cmw9dXJsKToKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHVybCwgdHVwbGUpOgorICAgICAgICAgICAgICAgICAgICB1cmwsIHJlcSwgZXhwZWN0ZWRfZXJyID0gdXJsCiAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmVxID0gZXhwZWN0ZWRfZXJyID0gTm9uZQorCisgICAgICAgICAgICAgICAgd2l0aCBzdXBwb3J0LnRyYW5zaWVudF9pbnRlcm5ldCh1cmwpOgogICAgICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHN1cHBvcnQudGltZV9vdXQsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydC5zb2NrZXRfcGVlcl9yZXNldCwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0LmlvZXJyb3JfcGVlcl9yZXNldDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWYgPSBmLnJlYWQoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJyZWFkICVkIGJ5dGVzIiAlIGxlbihidWYpKQotICAgICAgICAgICAgICAgICAgICBleGNlcHQgc29ja2V0LnRpbWVvdXQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludCgiPHRpbWVvdXQ6ICVzPiIgJSB1cmwsIGZpbGU9c3lzLnN0ZGVycikKLSAgICAgICAgICAgICAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgICAgICBkZWJ1ZygiKioqKioqKiogbmV4dCB1cmwgY29taW5nIHVwLi4uIikKLSAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4xKQorICAgICAgICAgICAgICAgICAgICAgICAgZiA9IHVybG9wZW4odXJsLCByZXEsIFRJTUVPVVQpCisgICAgICAgICAgICAgICAgICAgICMgdXJsbGliLmVycm9yLlVSTEVycm9yIGlzIGEgc3ViY2xhc3Mgb2YgT1NFcnJvcgorICAgICAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBleHBlY3RlZF9lcnI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnID0gKCJEaWRuJ3QgZ2V0IGV4cGVjdGVkIGVycm9yKHMpICVzIGZvciAlcyAlcywgZ290ICVzOiAlcyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXhwZWN0ZWRfZXJyLCB1cmwsIHJlcSwgdHlwZShlcnIpLCBlcnIpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShlcnIsIGV4cGVjdGVkX2VyciwgbXNnKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggc3VwcG9ydC50aW1lX291dCwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydC5zb2NrZXRfcGVlcl9yZXNldCwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydC5pb2Vycm9yX3BlZXJfcmVzZXQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiA9IGYucmVhZCgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCJyZWFkICVkIGJ5dGVzIiAlIGxlbihidWYpKQorICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IHNvY2tldC50aW1lb3V0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCI8dGltZW91dDogJXM+IiAlIHVybCwgZmlsZT1zeXMuc3RkZXJyKQorICAgICAgICAgICAgICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgwLjEpCiAKICAgICBkZWYgX2V4dHJhX2hhbmRsZXJzKHNlbGYpOgogICAgICAgICBoYW5kbGVycyA9IFtdCkBAIC0yNTMsNyArMjUyLDcgQEAKIGNsYXNzIFRpbWVvdXRUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9odHRwX2Jhc2ljKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzb2NrZXQuZ2V0ZGVmYXVsdHRpbWVvdXQoKSkKLSAgICAgICAgdXJsID0gImh0dHA6Ly93d3cucHl0aG9uLm9yZyIKKyAgICAgICAgdXJsID0gImh0dHA6Ly93d3cuZXhhbXBsZS5jb20iCiAgICAgICAgIHdpdGggc3VwcG9ydC50cmFuc2llbnRfaW50ZXJuZXQodXJsLCB0aW1lb3V0PU5vbmUpOgogICAgICAgICAgICAgdSA9IF91cmxvcGVuX3dpdGhfcmV0cnkodXJsKQogICAgICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHUuY2xvc2UpCkBAIC0yNjEsNyArMjYwLDcgQEAKIAogICAgIGRlZiB0ZXN0X2h0dHBfZGVmYXVsdF90aW1lb3V0KHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzb2NrZXQuZ2V0ZGVmYXVsdHRpbWVvdXQoKSkKLSAgICAgICAgdXJsID0gImh0dHA6Ly93d3cucHl0aG9uLm9yZyIKKyAgICAgICAgdXJsID0gImh0dHA6Ly93d3cuZXhhbXBsZS5jb20iCiAgICAgICAgIHdpdGggc3VwcG9ydC50cmFuc2llbnRfaW50ZXJuZXQodXJsKToKICAgICAgICAgICAgIHNvY2tldC5zZXRkZWZhdWx0dGltZW91dCg2MCkKICAgICAgICAgICAgIHRyeToKQEAgLTI3Myw3ICsyNzIsNyBAQAogCiAgICAgZGVmIHRlc3RfaHR0cF9ub190aW1lb3V0KHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzb2NrZXQuZ2V0ZGVmYXVsdHRpbWVvdXQoKSkKLSAgICAgICAgdXJsID0gImh0dHA6Ly93d3cucHl0aG9uLm9yZyIKKyAgICAgICAgdXJsID0gImh0dHA6Ly93d3cuZXhhbXBsZS5jb20iCiAgICAgICAgIHdpdGggc3VwcG9ydC50cmFuc2llbnRfaW50ZXJuZXQodXJsKToKICAgICAgICAgICAgIHNvY2tldC5zZXRkZWZhdWx0dGltZW91dCg2MCkKICAgICAgICAgICAgIHRyeToKQEAgLTI4NCwxMyArMjgzLDEzIEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh1LmZwLnJhdy5fc29jay5nZXR0aW1lb3V0KCkpCiAKICAgICBkZWYgdGVzdF9odHRwX3RpbWVvdXQoc2VsZik6Ci0gICAgICAgIHVybCA9ICJodHRwOi8vd3d3LnB5dGhvbi5vcmciCisgICAgICAgIHVybCA9ICJodHRwOi8vd3d3LmV4YW1wbGUuY29tIgogICAgICAgICB3aXRoIHN1cHBvcnQudHJhbnNpZW50X2ludGVybmV0KHVybCk6CiAgICAgICAgICAgICB1ID0gX3VybG9wZW5fd2l0aF9yZXRyeSh1cmwsIHRpbWVvdXQ9MTIwKQogICAgICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHUuY2xvc2UpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUuZnAucmF3Ll9zb2NrLmdldHRpbWVvdXQoKSwgMTIwKQogCi0gICAgRlRQX0hPU1QgPSAiZnRwOi8vZnRwLm1pcnJvci5ubC9wdWIvZ251LyIKKyAgICBGVFBfSE9TVCA9ICdmdHA6Ly9mdHAuZGViaWFuLm9yZy9kZWJpYW4vJwogCiAgICAgZGVmIHRlc3RfZnRwX2Jhc2ljKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzb2NrZXQuZ2V0ZGVmYXVsdHRpbWVvdXQoKSkKQEAgLTMyOCwzNSArMzI3LDUgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodS5mcC5mcC5yYXcuX3NvY2suZ2V0dGltZW91dCgpLCA2MCkKIAogCi1AdW5pdHRlc3Quc2tpcFVubGVzcyhzc2wsICJyZXF1aXJlcyBTU0wgc3VwcG9ydCIpCi1jbGFzcyBIVFRQU1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICAgIGRlZiB0ZXN0X3NuaShzZWxmKToKLSAgICAgICAgc2VsZi5za2lwVGVzdCgidGVzdCBkaXNhYmxlZCAtIHRlc3Qgc2VydmVyIG5lZWRlZCIpCi0gICAgICAgICMgQ2hlY2tzIHRoYXQgU2VydmVyIE5hbWUgSW5kaWNhdGlvbiB3b3JrcywgaWYgc3VwcG9ydGVkIGJ5IHRoZQotICAgICAgICAjIE9wZW5TU0wgbGlua2VkIHRvLgotICAgICAgICAjIFRoZSBzc2wgbW9kdWxlIGl0c2VsZiBkb2Vzbid0IGhhdmUgc2VydmVyLXNpZGUgc3VwcG9ydCBmb3IgU05JLAotICAgICAgICAjIHNvIHdlIHJlbHkgb24gYSB0aGlyZC1wYXJ0eSB0ZXN0IHNpdGUuCi0gICAgICAgIGV4cGVjdF9zbmkgPSBzc2wuSEFTX1NOSQotICAgICAgICB3aXRoIHN1cHBvcnQudHJhbnNpZW50X2ludGVybmV0KCJYWFgiKToKLSAgICAgICAgICAgIHUgPSB1cmxsaWIucmVxdWVzdC51cmxvcGVuKCJYWFgiKQotICAgICAgICAgICAgY29udGVudHMgPSB1LnJlYWRhbGwoKQotICAgICAgICAgICAgaWYgZXhwZWN0X3NuaToKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKGIiR3JlYXQiLCBjb250ZW50cykKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKGIiVW5mb3J0dW5hdGVseSIsIGNvbnRlbnRzKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKGIiR3JlYXQiLCBjb250ZW50cykKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKGIiVW5mb3J0dW5hdGVseSIsIGNvbnRlbnRzKQotCi0KLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJlcXVpcmVzKCJuZXR3b3JrIikKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChBdXRoVGVzdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgSFRUUFNUZXN0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICBPdGhlck5ldHdvcmtUZXN0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICBDbG9zZVNvY2tldFRlc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgVGltZW91dFRlc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgKQotCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3VybGxpYl9yZXNwb25zZS5weSBiL0xpYi90ZXN0L3Rlc3RfdXJsbGliX3Jlc3BvbnNlLnB5CmluZGV4IGZkZDMzMjUuLjBlYjU5NDIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdXJsbGliX3Jlc3BvbnNlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdXJsbGliX3Jlc3BvbnNlLnB5CkBAIC0xLDQyICsxLDU5IEBACiAiIiJVbml0IHRlc3RzIGZvciBjb2RlIGluIHVybGxpYi5yZXNwb25zZS4iIiIKIAotaW1wb3J0IHRlc3Quc3VwcG9ydAoraW1wb3J0IHNvY2tldAoraW1wb3J0IHRlbXBmaWxlCiBpbXBvcnQgdXJsbGliLnJlc3BvbnNlCiBpbXBvcnQgdW5pdHRlc3QKIAotY2xhc3MgVGVzdEZpbGUob2JqZWN0KToKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmKToKLSAgICAgICAgc2VsZi5jbG9zZWQgPSBGYWxzZQotCi0gICAgZGVmIHJlYWQoc2VsZiwgYnl0ZXMpOgotICAgICAgICBwYXNzCi0KLSAgICBkZWYgcmVhZGxpbmUoc2VsZik6Ci0gICAgICAgIHBhc3MKLQotICAgIGRlZiBjbG9zZShzZWxmKToKLSAgICAgICAgc2VsZi5jbG9zZWQgPSBUcnVlCi0KLWNsYXNzIFRlc3RhZGRiYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICAgICMgVE9ETyhqaHlsdG9uKTogV3JpdGUgdGVzdHMgZm9yIG90aGVyIGZ1bmN0aW9uYWxpdHkgb2YgYWRkYmFzZSgpCitjbGFzcyBUZXN0UmVzcG9uc2UodW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHNldFVwKHNlbGYpOgotICAgICAgICBzZWxmLmZwID0gVGVzdEZpbGUoKQotICAgICAgICBzZWxmLmFkZGJhc2UgPSB1cmxsaWIucmVzcG9uc2UuYWRkYmFzZShzZWxmLmZwKQorICAgICAgICBzZWxmLnNvY2sgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCisgICAgICAgIHNlbGYuZnAgPSBzZWxmLnNvY2subWFrZWZpbGUoJ3JiJykKKyAgICAgICAgc2VsZi50ZXN0X2hlYWRlcnMgPSB7Ikhvc3QiOiAid3d3LnB5dGhvbi5vcmciLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ29ubmVjdGlvbiI6ICJjbG9zZSJ9CiAKICAgICBkZWYgdGVzdF93aXRoKHNlbGYpOgorICAgICAgICBhZGRiYXNlID0gdXJsbGliLnJlc3BvbnNlLmFkZGJhc2Uoc2VsZi5mcCkKKworICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoYWRkYmFzZSwgdGVtcGZpbGUuX1RlbXBvcmFyeUZpbGVXcmFwcGVyKQorCiAgICAgICAgIGRlZiBmKCk6Ci0gICAgICAgICAgICB3aXRoIHNlbGYuYWRkYmFzZSBhcyBzcGFtOgorICAgICAgICAgICAgd2l0aCBhZGRiYXNlIGFzIHNwYW06CiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuZnAuY2xvc2VkKQogICAgICAgICBmKCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuZnAuY2xvc2VkKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmKQogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgdGVzdC5zdXBwb3J0LnJ1bl91bml0dGVzdChUZXN0YWRkYmFzZSkKKyAgICBkZWYgdGVzdF9hZGRjbG9zZWhvb2soc2VsZik6CisgICAgICAgIGNsb3NlaG9va19jYWxsZWQgPSBGYWxzZQorCisgICAgICAgIGRlZiBjbG9zZWhvb2soKToKKyAgICAgICAgICAgIG5vbmxvY2FsIGNsb3NlaG9va19jYWxsZWQKKyAgICAgICAgICAgIGNsb3NlaG9va19jYWxsZWQgPSBUcnVlCisKKyAgICAgICAgY2xvc2Vob29rID0gdXJsbGliLnJlc3BvbnNlLmFkZGNsb3NlaG9vayhzZWxmLmZwLCBjbG9zZWhvb2spCisgICAgICAgIGNsb3NlaG9vay5jbG9zZSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuZnAuY2xvc2VkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY2xvc2Vob29rX2NhbGxlZCkKKworICAgIGRlZiB0ZXN0X2FkZGluZm8oc2VsZik6CisgICAgICAgIGluZm8gPSB1cmxsaWIucmVzcG9uc2UuYWRkaW5mbyhzZWxmLmZwLCBzZWxmLnRlc3RfaGVhZGVycykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmZvLmluZm8oKSwgc2VsZi50ZXN0X2hlYWRlcnMpCisKKyAgICBkZWYgdGVzdF9hZGRpbmZvdXJsKHNlbGYpOgorICAgICAgICB1cmwgPSAiaHR0cDovL3d3dy5weXRob24ub3JnIgorICAgICAgICBjb2RlID0gMjAwCisgICAgICAgIGluZm91cmwgPSB1cmxsaWIucmVzcG9uc2UuYWRkaW5mb3VybChzZWxmLmZwLCBzZWxmLnRlc3RfaGVhZGVycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybCwgY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmZvdXJsLmluZm8oKSwgc2VsZi50ZXN0X2hlYWRlcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mb3VybC5nZXR1cmwoKSwgdXJsKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm91cmwuZ2V0Y29kZSgpLCBjb2RlKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLnNvY2suY2xvc2UoKQogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3VybGxpYm5ldC5weSBiL0xpYi90ZXN0L3Rlc3RfdXJsbGlibmV0LnB5CmluZGV4IDMxYjYxZjEuLjQyZWJiNmUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdXJsbGlibmV0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdXJsbGlibmV0LnB5CkBAIC0xMCw2ICsxMCw4IEBACiBpbXBvcnQgdGltZQogCiAKK3N1cHBvcnQucmVxdWlyZXMoJ25ldHdvcmsnKQorCiBjbGFzcyBVUkxUaW1lb3V0VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgIyBYWFggdGhpcyB0ZXN0IGRvZXNuJ3Qgc2VlbSB0byB0ZXN0IGFueXRoaW5nIHVzZWZ1bC4KIApAQCAtMjIsOCArMjQsOCBAQAogICAgICAgICBzb2NrZXQuc2V0ZGVmYXVsdHRpbWVvdXQoTm9uZSkKIAogICAgIGRlZiB0ZXN0VVJMcmVhZChzZWxmKToKLSAgICAgICAgd2l0aCBzdXBwb3J0LnRyYW5zaWVudF9pbnRlcm5ldCgid3d3LnB5dGhvbi5vcmciKToKLSAgICAgICAgICAgIGYgPSB1cmxsaWIucmVxdWVzdC51cmxvcGVuKCJodHRwOi8vd3d3LnB5dGhvbi5vcmcvIikKKyAgICAgICAgd2l0aCBzdXBwb3J0LnRyYW5zaWVudF9pbnRlcm5ldCgid3d3LmV4YW1wbGUuY29tIik6CisgICAgICAgICAgICBmID0gdXJsbGliLnJlcXVlc3QudXJsb3BlbigiaHR0cDovL3d3dy5leGFtcGxlLmNvbS8iKQogICAgICAgICAgICAgeCA9IGYucmVhZCgpCiAKIApAQCAtMzYsNyArMzgsNyBAQAogICAgIGZvciB0cmFuc3BhcmVudCByZWRpcmVjdGlvbiBoYXZlIGJlZW4gd3JpdHRlbi4KIAogICAgIHNldFVwIGlzIG5vdCB1c2VkIGZvciBhbHdheXMgY29uc3RydWN0aW5nIGEgY29ubmVjdGlvbiB0bwotICAgIGh0dHA6Ly93d3cucHl0aG9uLm9yZy8gc2luY2UgdGhlcmUgYSBmZXcgdGVzdHMgdGhhdCBkb24ndCB1c2UgdGhhdCBhZGRyZXNzCisgICAgaHR0cDovL3d3dy5leGFtcGxlLmNvbS8gc2luY2UgdGhlcmUgYSBmZXcgdGVzdHMgdGhhdCBkb24ndCB1c2UgdGhhdCBhZGRyZXNzCiAgICAgYW5kIG1ha2luZyBhIGNvbm5lY3Rpb24gaXMgZXhwZW5zaXZlIGVub3VnaCB0byB3YXJyYW50IG1pbmltaXppbmcgdW5uZWVkZWQKICAgICBjb25uZWN0aW9ucy4KIApAQCAtNTQsNyArNTYsNyBAQAogCiAgICAgZGVmIHRlc3RfYmFzaWMoc2VsZik6CiAgICAgICAgICMgU2ltcGxlIHRlc3QgZXhwZWN0ZWQgdG8gcGFzcy4KLSAgICAgICAgd2l0aCBzZWxmLnVybG9wZW4oImh0dHA6Ly93d3cucHl0aG9uLm9yZy8iKSBhcyBvcGVuX3VybDoKKyAgICAgICAgd2l0aCBzZWxmLnVybG9wZW4oImh0dHA6Ly93d3cuZXhhbXBsZS5jb20vIikgYXMgb3Blbl91cmw6CiAgICAgICAgICAgICBmb3IgYXR0ciBpbiAoInJlYWQiLCAicmVhZGxpbmUiLCAicmVhZGxpbmVzIiwgImZpbGVubyIsICJjbG9zZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgImluZm8iLCAiZ2V0dXJsIik6CiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIob3Blbl91cmwsIGF0dHIpLCAib2JqZWN0IHJldHVybmVkIGZyb20gIgpAQCAtNjMsNyArNjUsNyBAQAogCiAgICAgZGVmIHRlc3RfcmVhZGxpbmVzKHNlbGYpOgogICAgICAgICAjIFRlc3QgYm90aCByZWFkbGluZSBhbmQgcmVhZGxpbmVzLgotICAgICAgICB3aXRoIHNlbGYudXJsb3BlbigiaHR0cDovL3d3dy5weXRob24ub3JnLyIpIGFzIG9wZW5fdXJsOgorICAgICAgICB3aXRoIHNlbGYudXJsb3BlbigiaHR0cDovL3d3dy5leGFtcGxlLmNvbS8iKSBhcyBvcGVuX3VybDoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShvcGVuX3VybC5yZWFkbGluZSgpLCBieXRlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVhZGxpbmUgZGlkIG5vdCByZXR1cm4gYSBzdHJpbmciKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG9wZW5fdXJsLnJlYWRsaW5lcygpLCBsaXN0LApAQCAtNzEsNyArNzMsNyBAQAogCiAgICAgZGVmIHRlc3RfaW5mbyhzZWxmKToKICAgICAgICAgIyBUZXN0ICdpbmZvJy4KLSAgICAgICAgd2l0aCBzZWxmLnVybG9wZW4oImh0dHA6Ly93d3cucHl0aG9uLm9yZy8iKSBhcyBvcGVuX3VybDoKKyAgICAgICAgd2l0aCBzZWxmLnVybG9wZW4oImh0dHA6Ly93d3cuZXhhbXBsZS5jb20vIikgYXMgb3Blbl91cmw6CiAgICAgICAgICAgICBpbmZvX29iaiA9IG9wZW5fdXJsLmluZm8oKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGluZm9fb2JqLCBlbWFpbC5tZXNzYWdlLk1lc3NhZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9iamVjdCByZXR1cm5lZCBieSAnaW5mbycgaXMgbm90IGFuICIKQEAgLTgwLDE2ICs4MiwxNyBAQAogCiAgICAgZGVmIHRlc3RfZ2V0dXJsKHNlbGYpOgogICAgICAgICAjIE1ha2Ugc3VyZSBzYW1lIFVSTCBhcyBvcGVuZWQgaXMgcmV0dXJuZWQgYnkgZ2V0dXJsLgotICAgICAgICBVUkwgPSAiaHR0cHM6Ly93d3cucHl0aG9uLm9yZy8iCisgICAgICAgIFVSTCA9ICJodHRwOi8vd3d3LmV4YW1wbGUuY29tLyIKICAgICAgICAgd2l0aCBzZWxmLnVybG9wZW4oVVJMKSBhcyBvcGVuX3VybDoKICAgICAgICAgICAgIGdvdHRlbl91cmwgPSBvcGVuX3VybC5nZXR1cmwoKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnb3R0ZW5fdXJsLCBVUkwpCiAKICAgICBkZWYgdGVzdF9nZXRjb2RlKHNlbGYpOgogICAgICAgICAjIHRlc3QgZ2V0Y29kZSgpIHdpdGggdGhlIGZhbmN5IG9wZW5lciB0byBnZXQgNDA0IGVycm9yIGNvZGVzCi0gICAgICAgIFVSTCA9ICJodHRwOi8vd3d3LnB5dGhvbi5vcmcvWFhYaW52YWxpZFhYWCIKKyAgICAgICAgVVJMID0gImh0dHA6Ly93d3cuZXhhbXBsZS5jb20vWFhYaW52YWxpZFhYWCIKICAgICAgICAgd2l0aCBzdXBwb3J0LnRyYW5zaWVudF9pbnRlcm5ldChVUkwpOgotICAgICAgICAgICAgb3Blbl91cmwgPSB1cmxsaWIucmVxdWVzdC5GYW5jeVVSTG9wZW5lcigpLm9wZW4oVVJMKQorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6CisgICAgICAgICAgICAgICAgb3Blbl91cmwgPSB1cmxsaWIucmVxdWVzdC5GYW5jeVVSTG9wZW5lcigpLm9wZW4oVVJMKQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGNvZGUgPSBvcGVuX3VybC5nZXRjb2RlKCkKICAgICAgICAgICAgIGZpbmFsbHk6CkBAIC0xMDEsNyArMTA0LDcgQEAKICAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5wbGF0Zm9ybSBpbiAoJ3dpbjMyJywpLCAnbm90IGFwcHJvcHJpYXRlIGZvciBXaW5kb3dzJykKICAgICBkZWYgdGVzdF9maWxlbm8oc2VsZik6CiAgICAgICAgICMgTWFrZSBzdXJlIGZkIHJldHVybmVkIGJ5IGZpbGVubyBpcyB2YWxpZC4KLSAgICAgICAgd2l0aCBzZWxmLnVybG9wZW4oImh0dHA6Ly93d3cucHl0aG9uLm9yZy8iLCB0aW1lb3V0PU5vbmUpIGFzIG9wZW5fdXJsOgorICAgICAgICB3aXRoIHNlbGYudXJsb3BlbigiaHR0cDovL3d3dy5nb29nbGUuY29tLyIsIHRpbWVvdXQ9Tm9uZSkgYXMgb3Blbl91cmw6CiAgICAgICAgICAgICBmZCA9IG9wZW5fdXJsLmZpbGVubygpCiAgICAgICAgICAgICB3aXRoIG9zLmZkb3BlbihmZCwgJ3JiJykgYXMgZjoKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5yZWFkKCksICJyZWFkaW5nIGZyb20gZmlsZSBjcmVhdGVkIHVzaW5nIGZkICIKQEAgLTEyMSwxNiArMTI0LDE1IEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAjIFRoaXMgaGFwcGVucyB3aXRoIHNvbWUgb3ZlcnplYWxvdXMgRE5TIHByb3ZpZGVycyBzdWNoIGFzIE9wZW5ETlMKICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoIiVyIHNob3VsZCBub3QgcmVzb2x2ZSBmb3IgdGVzdCB0byB3b3JrIiAlIGJvZ3VzX2RvbWFpbikKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIyBTRiBwYXRjaCA4MDk5MTU6ICBJbiBTZXAgMjAwMywgVmVyaVNpZ24gc3RhcnRlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAjIGhpZ2hqYWNraW5nIGludmFsaWQgLmNvbSBhbmQgLm5ldCBhZGRyZXNzZXMgdG8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIyBib29zdCB0cmFmZmljIHRvIHRoZWlyIG93biBzaXRlLiAgVGhpcyB0ZXN0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICMgc3RhcnRlZCBmYWlsaW5nIHRoZW4uICBPbmUgaG9wZXMgdGhlIC5pbnZhbGlkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICMgZG9tYWluIHdpbGwgYmUgc3BhcmVkIHRvIHNlcnZlIGl0cyBkZWZpbmVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICMgcHVycG9zZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIyB1cmxsaWIudXJsb3BlbiwgImh0dHA6Ly93d3cuc2FkZmxranNhc2FkZi5jb20vIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsbGliLnJlcXVlc3QudXJsb3BlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgImh0dHA6Ly9zYWRmbGtqc2FzZi5pLm52YWxpLmQvIikKKyAgICAgICAgZmFpbHVyZV9leHBsYW5hdGlvbiA9ICgnb3BlbmluZyBhbiBpbnZhbGlkIFVSTCBkaWQgbm90IHJhaXNlIE9TRXJyb3I7ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2FuIGJlIGNhdXNlZCBieSBhIGJyb2tlbiBETlMgc2VydmVyICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKGUuZy4gcmV0dXJucyA0MDQgb3IgaGlqYWNrcyBwYWdlKScpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgbXNnPWZhaWx1cmVfZXhwbGFuYXRpb24pOgorICAgICAgICAgICAgIyBTRiBwYXRjaCA4MDk5MTU6ICBJbiBTZXAgMjAwMywgVmVyaVNpZ24gc3RhcnRlZCBoaWdoamFja2luZworICAgICAgICAgICAgIyBpbnZhbGlkIC5jb20gYW5kIC5uZXQgYWRkcmVzc2VzIHRvIGJvb3N0IHRyYWZmaWMgdG8gdGhlaXIgb3duCisgICAgICAgICAgICAjIHNpdGUuICBUaGlzIHRlc3Qgc3RhcnRlZCBmYWlsaW5nIHRoZW4uICBPbmUgaG9wZXMgdGhlIC5pbnZhbGlkCisgICAgICAgICAgICAjIGRvbWFpbiB3aWxsIGJlIHNwYXJlZCB0byBzZXJ2ZSBpdHMgZGVmaW5lZCBwdXJwb3NlLgorICAgICAgICAgICAgdXJsbGliLnJlcXVlc3QudXJsb3BlbigiaHR0cDovL3NhZGZsa2pzYXNmLmkubnZhbGkuZC8iKQogCiAKIGNsYXNzIHVybHJldHJpZXZlTmV0d29ya1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTE0OCw3ICsxNTAsNyBAQAogCiAgICAgZGVmIHRlc3RfYmFzaWMoc2VsZik6CiAgICAgICAgICMgVGVzdCBiYXNpYyBmdW5jdGlvbmFsaXR5LgotICAgICAgICB3aXRoIHNlbGYudXJscmV0cmlldmUoImh0dHA6Ly93d3cucHl0aG9uLm9yZy8iKSBhcyAoZmlsZV9sb2NhdGlvbiwgaW5mbyk6CisgICAgICAgIHdpdGggc2VsZi51cmxyZXRyaWV2ZSgiaHR0cDovL3d3dy5leGFtcGxlLmNvbS8iKSBhcyAoZmlsZV9sb2NhdGlvbiwgaW5mbyk6CiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoZmlsZV9sb2NhdGlvbiksICJmaWxlIGxvY2F0aW9uIHJldHVybmVkIGJ5IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgdXJscmV0cmlldmUgaXMgbm90IGEgdmFsaWQgcGF0aCIpCiAgICAgICAgICAgICB3aXRoIG9wZW4oZmlsZV9sb2NhdGlvbiwgJ3JiJykgYXMgZjoKQEAgLTE1Nyw3ICsxNTksNyBAQAogCiAgICAgZGVmIHRlc3Rfc3BlY2lmaWVkX3BhdGgoc2VsZik6CiAgICAgICAgICMgTWFrZSBzdXJlIHRoYXQgc3BlY2lmeWluZyB0aGUgbG9jYXRpb24gb2YgdGhlIGZpbGUgdG8gd3JpdGUgdG8gd29ya3MuCi0gICAgICAgIHdpdGggc2VsZi51cmxyZXRyaWV2ZSgiaHR0cDovL3d3dy5weXRob24ub3JnLyIsCisgICAgICAgIHdpdGggc2VsZi51cmxyZXRyaWV2ZSgiaHR0cDovL3d3dy5leGFtcGxlLmNvbS8iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydC5URVNURk4pIGFzIChmaWxlX2xvY2F0aW9uLCBpbmZvKToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZV9sb2NhdGlvbiwgc3VwcG9ydC5URVNURk4pCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoZmlsZV9sb2NhdGlvbikpCkBAIC0xNjYsMTEgKzE2OCwxMSBAQAogCiAgICAgZGVmIHRlc3RfaGVhZGVyKHNlbGYpOgogICAgICAgICAjIE1ha2Ugc3VyZSBoZWFkZXIgcmV0dXJuZWQgYXMgMm5kIHZhbHVlIGZyb20gdXJscmV0cmlldmUgaXMgZ29vZC4KLSAgICAgICAgd2l0aCBzZWxmLnVybHJldHJpZXZlKCJodHRwOi8vd3d3LnB5dGhvbi5vcmcvIikgYXMgKGZpbGVfbG9jYXRpb24sIGluZm8pOgorICAgICAgICB3aXRoIHNlbGYudXJscmV0cmlldmUoImh0dHA6Ly93d3cuZXhhbXBsZS5jb20vIikgYXMgKGZpbGVfbG9jYXRpb24sIGluZm8pOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGluZm8sIGVtYWlsLm1lc3NhZ2UuTWVzc2FnZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW5mbyBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgZW1haWwubWVzc2FnZS5NZXNzYWdlIikKIAotICAgIGxvZ28gPSAiaHR0cDovL3d3dy5weXRob24ub3JnL3N0YXRpYy9jb21tdW5pdHlfbG9nb3MvcHl0aG9uLWxvZ28tbWFzdGVyLXYzLVRNLnBuZyIKKyAgICBsb2dvID0gImh0dHA6Ly93d3cuZXhhbXBsZS5jb20vIgogCiAgICAgZGVmIHRlc3RfZGF0YV9oZWFkZXIoc2VsZik6CiAgICAgICAgIHdpdGggc2VsZi51cmxyZXRyaWV2ZShzZWxmLmxvZ28pIGFzIChmaWxlX2xvY2F0aW9uLCBmaWxlaGVhZGVycyk6CkBAIC0yMDcsMTEgKzIwOSw1IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgPj0gdG90YWwgc2l6ZSBpbiAlcyIgJSByZWNvcmRzX3JlcHIpCiAKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucmVxdWlyZXMoJ25ldHdvcmsnKQotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KFVSTFRpbWVvdXRUZXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgIHVybG9wZW5OZXR3b3JrVGVzdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgdXJscmV0cmlldmVOZXR3b3JrVGVzdHMpCi0KIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdXJscGFyc2UucHkgYi9MaWIvdGVzdC90ZXN0X3VybHBhcnNlLnB5CmluZGV4IGQ2N2NmMjUuLjE3NzVlZjMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdXJscGFyc2UucHkKKysrIGIvTGliL3Rlc3QvdGVzdF91cmxwYXJzZS5weQpAQCAtMSw0ICsxLDMgQEAKLWZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgdXJsbGliLnBhcnNlCiAKQEAgLTY2NCw2ICs2NjMsNDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmxsaWIucGFyc2UudXJscGFyc2UoYiJ4LW5ld3NjaGVtZTovL2Zvby5jb20vc3R1ZmY/cXVlcnkiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAoYid4LW5ld3NjaGVtZScsIGInZm9vLmNvbScsIGInL3N0dWZmJywgYicnLCBiJ3F1ZXJ5JywgYicnKSkKIAorICAgIGRlZiB0ZXN0X2RlZmF1bHRfc2NoZW1lKHNlbGYpOgorICAgICAgICAjIEV4ZXJjaXNlIHRoZSBzY2hlbWUgcGFyYW1ldGVyIG9mIHVybHBhcnNlKCkgYW5kIHVybHNwbGl0KCkKKyAgICAgICAgZm9yIGZ1bmMgaW4gKHVybGxpYi5wYXJzZS51cmxwYXJzZSwgdXJsbGliLnBhcnNlLnVybHNwbGl0KToKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGZ1bmN0aW9uPWZ1bmMpOgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZ1bmMoImh0dHA6Ly9leGFtcGxlLm5ldC8iLCAiZnRwIikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5zY2hlbWUsICJodHRwIikKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBmdW5jKGIiaHR0cDovL2V4YW1wbGUubmV0LyIsIGIiZnRwIikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5zY2hlbWUsIGIiaHR0cCIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmdW5jKCJwYXRoIiwgImZ0cCIpLnNjaGVtZSwgImZ0cCIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmdW5jKCJwYXRoIiwgc2NoZW1lPSJmdHAiKS5zY2hlbWUsICJmdHAiKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnVuYyhiInBhdGgiLCBzY2hlbWU9YiJmdHAiKS5zY2hlbWUsIGIiZnRwIikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZ1bmMoInBhdGgiKS5zY2hlbWUsICIiKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnVuYyhiInBhdGgiKS5zY2hlbWUsIGIiIikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZ1bmMoYiJwYXRoIiwgIiIpLnNjaGVtZSwgYiIiKQorCisgICAgZGVmIHRlc3RfcGFyc2VfZnJhZ21lbnRzKHNlbGYpOgorICAgICAgICAjIEV4ZXJjaXNlIHRoZSBhbGxvd19mcmFnbWVudHMgcGFyYW1ldGVyIG9mIHVybHBhcnNlKCkgYW5kIHVybHNwbGl0KCkKKyAgICAgICAgdGVzdHMgPSAoCisgICAgICAgICAgICAoImh0dHA6I2ZyYWciLCAicGF0aCIpLAorICAgICAgICAgICAgKCIvL2V4YW1wbGUubmV0I2ZyYWciLCAicGF0aCIpLAorICAgICAgICAgICAgKCJpbmRleC5odG1sI2ZyYWciLCAicGF0aCIpLAorICAgICAgICAgICAgKCI7YT1iI2ZyYWciLCAicGFyYW1zIiksCisgICAgICAgICAgICAoIj9hPWIjZnJhZyIsICJxdWVyeSIpLAorICAgICAgICAgICAgKCIjZnJhZyIsICJwYXRoIiksCisgICAgICAgICkKKyAgICAgICAgZm9yIHVybCwgYXR0ciBpbiB0ZXN0czoKKyAgICAgICAgICAgIGZvciBmdW5jIGluICh1cmxsaWIucGFyc2UudXJscGFyc2UsIHVybGxpYi5wYXJzZS51cmxzcGxpdCk6CisgICAgICAgICAgICAgICAgaWYgYXR0ciA9PSAicGFyYW1zIiBhbmQgZnVuYyBpcyB1cmxsaWIucGFyc2UudXJsc3BsaXQ6CisgICAgICAgICAgICAgICAgICAgIGF0dHIgPSAicGF0aCIKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdCh1cmw9dXJsLCBmdW5jdGlvbj1mdW5jKToKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gZnVuYyh1cmwsIGFsbG93X2ZyYWdtZW50cz1GYWxzZSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuZnJhZ21lbnQsICIiKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZ2V0YXR0cihyZXN1bHQsIGF0dHIpLmVuZHN3aXRoKCIjZnJhZyIpKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZ1bmModXJsLCAiIiwgRmFsc2UpLmZyYWdtZW50LCAiIikKKworICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBmdW5jKHVybCwgYWxsb3dfZnJhZ21lbnRzPVRydWUpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LmZyYWdtZW50LCAiZnJhZyIpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZ2V0YXR0cihyZXN1bHQsIGF0dHIpLmVuZHN3aXRoKCJmcmFnIikpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnVuYyh1cmwsICIiLCBUcnVlKS5mcmFnbWVudCwgImZyYWciKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZ1bmModXJsKS5mcmFnbWVudCwgImZyYWciKQorCiAgICAgZGVmIHRlc3RfbWl4ZWRfdHlwZXNfcmVqZWN0ZWQoc2VsZik6CiAgICAgICAgICMgU2V2ZXJhbCBmdW5jdGlvbnMgdGhhdCBwcm9jZXNzIGVpdGhlciBzdHJpbmdzIG9yIEFTQ0lJIGVuY29kZWQgYnl0ZXMKICAgICAgICAgIyBhY2NlcHQgbXVsdGlwbGUgYXJndW1lbnRzLiBDaGVjayB0aGV5IHJlamVjdCBtaXhlZCB0eXBlIGlucHV0CkBAIC03NDksNTIgKzc4OSw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzPSJpZ25vcmUiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgWygna2V5JywgJ1x1MDE0MS0nKV0pCiAKLSAgICBkZWYgdGVzdF9zcGxpdHBvcnQoc2VsZik6Ci0gICAgICAgIHNwbGl0cG9ydCA9IHVybGxpYi5wYXJzZS5zcGxpdHBvcnQKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGxpdHBvcnQoJ3BhcnJvdDo4OCcpLCAoJ3BhcnJvdCcsICc4OCcpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0cG9ydCgncGFycm90JyksICgncGFycm90JywgTm9uZSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BsaXRwb3J0KCdwYXJyb3Q6JyksICgncGFycm90JywgTm9uZSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BsaXRwb3J0KCcxMjcuMC4wLjEnKSwgKCcxMjcuMC4wLjEnLCBOb25lKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGxpdHBvcnQoJ3BhcnJvdDpjaGVlc2UnKSwgKCdwYXJyb3Q6Y2hlZXNlJywgTm9uZSkpCi0KLSAgICBkZWYgdGVzdF9zcGxpdG5wb3J0KHNlbGYpOgotICAgICAgICBzcGxpdG5wb3J0ID0gdXJsbGliLnBhcnNlLnNwbGl0bnBvcnQKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGxpdG5wb3J0KCdwYXJyb3Q6ODgnKSwgKCdwYXJyb3QnLCA4OCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BsaXRucG9ydCgncGFycm90JyksICgncGFycm90JywgLTEpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0bnBvcnQoJ3BhcnJvdCcsIDU1KSwgKCdwYXJyb3QnLCA1NSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BsaXRucG9ydCgncGFycm90OicpLCAoJ3BhcnJvdCcsIC0xKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGxpdG5wb3J0KCdwYXJyb3Q6JywgNTUpLCAoJ3BhcnJvdCcsIDU1KSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGxpdG5wb3J0KCcxMjcuMC4wLjEnKSwgKCcxMjcuMC4wLjEnLCAtMSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BsaXRucG9ydCgnMTI3LjAuMC4xJywgNTUpLCAoJzEyNy4wLjAuMScsIDU1KSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGxpdG5wb3J0KCdwYXJyb3Q6Y2hlZXNlJyksICgncGFycm90JywgTm9uZSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BsaXRucG9ydCgncGFycm90OmNoZWVzZScsIDU1KSwgKCdwYXJyb3QnLCBOb25lKSkKLQotICAgIGRlZiB0ZXN0X3NwbGl0cXVlcnkoc2VsZik6Ci0gICAgICAgICMgTm9ybWFsIGNhc2VzIGFyZSBleGVyY2lzZWQgYnkgb3RoZXIgdGVzdHM7IGVuc3VyZSB0aGF0IHdlIGFsc28KLSAgICAgICAgIyBjYXRjaCBjYXNlcyB3aXRoIG5vIHBvcnQgc3BlY2lmaWVkICh0ZXN0Y2FzZSBlbnN1cmluZyBjb3ZlcmFnZSkKLSAgICAgICAgcmVzdWx0ID0gdXJsbGliLnBhcnNlLnNwbGl0cXVlcnkoJ2h0dHA6Ly9weXRob24ub3JnL2Zha2U/Zm9vPWJhcicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCAoJ2h0dHA6Ly9weXRob24ub3JnL2Zha2UnLCAnZm9vPWJhcicpKQotICAgICAgICByZXN1bHQgPSB1cmxsaWIucGFyc2Uuc3BsaXRxdWVyeSgnaHR0cDovL3B5dGhvbi5vcmcvZmFrZT9mb289YmFyPycpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCAoJ2h0dHA6Ly9weXRob24ub3JnL2Zha2U/Zm9vPWJhcicsICcnKSkKLSAgICAgICAgcmVzdWx0ID0gdXJsbGliLnBhcnNlLnNwbGl0cXVlcnkoJ2h0dHA6Ly9weXRob24ub3JnL2Zha2UnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgKCdodHRwOi8vcHl0aG9uLm9yZy9mYWtlJywgTm9uZSkpCi0KLSAgICBkZWYgdGVzdF9zcGxpdHZhbHVlKHNlbGYpOgotICAgICAgICAjIE5vcm1hbCBjYXNlcyBhcmUgZXhlcmNpc2VkIGJ5IG90aGVyIHRlc3RzOyB0ZXN0IHBhdGhvbG9naWNhbCBjYXNlcwotICAgICAgICAjIHdpdGggbm8ga2V5L3ZhbHVlIHBhaXJzLiAodGVzdGNhc2UgZW5zdXJpbmcgY292ZXJhZ2UpCi0gICAgICAgIHJlc3VsdCA9IHVybGxpYi5wYXJzZS5zcGxpdHZhbHVlKCdmb289YmFyJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsICgnZm9vJywgJ2JhcicpKQotICAgICAgICByZXN1bHQgPSB1cmxsaWIucGFyc2Uuc3BsaXR2YWx1ZSgnZm9vPScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCAoJ2ZvbycsICcnKSkKLSAgICAgICAgcmVzdWx0ID0gdXJsbGliLnBhcnNlLnNwbGl0dmFsdWUoJ2Zvb2JhcicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCAoJ2Zvb2JhcicsIE5vbmUpKQotCi0gICAgZGVmIHRlc3RfdG9fYnl0ZXMoc2VsZik6Ci0gICAgICAgIHJlc3VsdCA9IHVybGxpYi5wYXJzZS50b19ieXRlcygnaHR0cDovL3d3dy5weXRob24ub3JnJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsICdodHRwOi8vd3d3LnB5dGhvbi5vcmcnKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRXJyb3IsIHVybGxpYi5wYXJzZS50b19ieXRlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJ2h0dHA6Ly93d3cucHl0aG9uLm9yZy9tZWRpXHUwMGU2dmFsJykKLQogICAgIGRlZiB0ZXN0X3VybGVuY29kZV9zZXF1ZW5jZXMoc2VsZik6CiAgICAgICAgICMgT3RoZXIgdGVzdHMgaW5jaWRlbnRhbGx5IHVybGVuY29kZSB0aGluZ3M7IHRlc3Qgbm9uLWNvdmVyZWQgY2FzZXM6CiAgICAgICAgICMgU2VxdWVuY2UgYW5kIG9iamVjdCB2YWx1ZXMuCkBAIC04NjMsOSArODU3LDEzOSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAxLnBhdGgsICc4NjMtMTIzNCcpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocDEucGFyYW1zLCAncGhvbmUtY29udGV4dD0rMS05MTQtNTU1JykKIAorICAgIGRlZiB0ZXN0X1F1b3Rlcl9yZXByKHNlbGYpOgorICAgICAgICBxdW90ZXIgPSB1cmxsaWIucGFyc2UuUXVvdGVyKHVybGxpYi5wYXJzZS5fQUxXQVlTX1NBRkUpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ1F1b3RlcicsIHJlcHIocXVvdGVyKSkKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KFVybFBhcnNlVGVzdENhc2UpCisKK2NsYXNzIFV0aWxpdHlfVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIlRlc3RjYXNlIHRvIHRlc3QgdGhlIHZhcmlvdXMgdXRpbGl0eSBmdW5jdGlvbnMgaW4gdGhlIHVybGxpYi4iIiIKKyAgICAjIEluIFB5dGhvbiAyIHRoaXMgdGVzdCBjbGFzcyB3YXMgaW4gdGVzdF91cmxsaWIuCisKKyAgICBkZWYgdGVzdF9zcGxpdHR5cGUoc2VsZik6CisgICAgICAgIHNwbGl0dHlwZSA9IHVybGxpYi5wYXJzZS5zcGxpdHR5cGUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGxpdHR5cGUoJ3R5cGU6b3BhcXVlc3RyaW5nJyksICgndHlwZScsICdvcGFxdWVzdHJpbmcnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGxpdHR5cGUoJ29wYXF1ZXN0cmluZycpLCAoTm9uZSwgJ29wYXF1ZXN0cmluZycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0dHlwZSgnOm9wYXF1ZXN0cmluZycpLCAoTm9uZSwgJzpvcGFxdWVzdHJpbmcnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGxpdHR5cGUoJ3R5cGU6JyksICgndHlwZScsICcnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGxpdHR5cGUoJ3R5cGU6b3BhcXVlOnN0cmluZycpLCAoJ3R5cGUnLCAnb3BhcXVlOnN0cmluZycpKQorCisgICAgZGVmIHRlc3Rfc3BsaXRob3N0KHNlbGYpOgorICAgICAgICBzcGxpdGhvc3QgPSB1cmxsaWIucGFyc2Uuc3BsaXRob3N0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BsaXRob3N0KCcvL3d3dy5leGFtcGxlLm9yZzo4MC9mb28vYmFyL2Jhei5odG1sJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgKCd3d3cuZXhhbXBsZS5vcmc6ODAnLCAnL2Zvby9iYXIvYmF6Lmh0bWwnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGxpdGhvc3QoJy8vd3d3LmV4YW1wbGUub3JnOjgwJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgKCd3d3cuZXhhbXBsZS5vcmc6ODAnLCAnJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BsaXRob3N0KCcvZm9vL2Jhci9iYXouaHRtbCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgIChOb25lLCAnL2Zvby9iYXIvYmF6Lmh0bWwnKSkKKworICAgIGRlZiB0ZXN0X3NwbGl0dXNlcihzZWxmKToKKyAgICAgICAgc3BsaXR1c2VyID0gdXJsbGliLnBhcnNlLnNwbGl0dXNlcgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0dXNlcignVXNlcjpQYXNzQHd3dy5weXRob24ub3JnOjA4MCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgnVXNlcjpQYXNzJywgJ3d3dy5weXRob24ub3JnOjA4MCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0dXNlcignQHd3dy5weXRob24ub3JnOjA4MCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgnJywgJ3d3dy5weXRob24ub3JnOjA4MCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0dXNlcignd3d3LnB5dGhvbi5vcmc6MDgwJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgKE5vbmUsICd3d3cucHl0aG9uLm9yZzowODAnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGxpdHVzZXIoJ1VzZXI6UGFzc0AnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoJ1VzZXI6UGFzcycsICcnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGxpdHVzZXIoJ1VzZXJAZXhhbXBsZS5jb206UGFzc0B3d3cucHl0aG9uLm9yZzowODAnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoJ1VzZXJAZXhhbXBsZS5jb206UGFzcycsICd3d3cucHl0aG9uLm9yZzowODAnKSkKKworICAgIGRlZiB0ZXN0X3NwbGl0cGFzc3dkKHNlbGYpOgorICAgICAgICAjIFNvbWUgb2YgdGhlIHBhc3N3b3JkIGV4YW1wbGVzIGFyZSBub3Qgc2Vuc2libGUsIGJ1dCBpdCBpcyBhZGRlZCB0bworICAgICAgICAjIGNvbmZpcm1pbmcgdG8gUkZDMjYxNyBhbmQgYWRkcmVzc2luZyBpc3N1ZTQ2NzUuCisgICAgICAgIHNwbGl0cGFzc3dkID0gdXJsbGliLnBhcnNlLnNwbGl0cGFzc3dkCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BsaXRwYXNzd2QoJ3VzZXI6YWInKSwgKCd1c2VyJywgJ2FiJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BsaXRwYXNzd2QoJ3VzZXI6YVxuYicpLCAoJ3VzZXInLCAnYVxuYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0cGFzc3dkKCd1c2VyOmFcdGInKSwgKCd1c2VyJywgJ2FcdGInKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGxpdHBhc3N3ZCgndXNlcjphXHJiJyksICgndXNlcicsICdhXHJiJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BsaXRwYXNzd2QoJ3VzZXI6YVxmYicpLCAoJ3VzZXInLCAnYVxmYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0cGFzc3dkKCd1c2VyOmFcdmInKSwgKCd1c2VyJywgJ2FcdmInKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGxpdHBhc3N3ZCgndXNlcjphOmInKSwgKCd1c2VyJywgJ2E6YicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0cGFzc3dkKCd1c2VyOmEgYicpLCAoJ3VzZXInLCAnYSBiJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BsaXRwYXNzd2QoJ3VzZXIgMjphYicpLCAoJ3VzZXIgMicsICdhYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0cGFzc3dkKCd1c2VyKzE6YStiJyksICgndXNlcisxJywgJ2ErYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0cGFzc3dkKCd1c2VyOicpLCAoJ3VzZXInLCAnJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BsaXRwYXNzd2QoJ3VzZXInKSwgKCd1c2VyJywgTm9uZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BsaXRwYXNzd2QoJzphYicpLCAoJycsICdhYicpKQorCisgICAgZGVmIHRlc3Rfc3BsaXRwb3J0KHNlbGYpOgorICAgICAgICBzcGxpdHBvcnQgPSB1cmxsaWIucGFyc2Uuc3BsaXRwb3J0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BsaXRwb3J0KCdwYXJyb3Q6ODgnKSwgKCdwYXJyb3QnLCAnODgnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGxpdHBvcnQoJ3BhcnJvdCcpLCAoJ3BhcnJvdCcsIE5vbmUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0cG9ydCgncGFycm90OicpLCAoJ3BhcnJvdCcsIE5vbmUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0cG9ydCgnMTI3LjAuMC4xJyksICgnMTI3LjAuMC4xJywgTm9uZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BsaXRwb3J0KCdwYXJyb3Q6Y2hlZXNlJyksICgncGFycm90OmNoZWVzZScsIE5vbmUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0cG9ydCgnWzo6MV06ODgnKSwgKCdbOjoxXScsICc4OCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0cG9ydCgnWzo6MV0nKSwgKCdbOjoxXScsIE5vbmUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0cG9ydCgnOjg4JyksICgnJywgJzg4JykpCisKKyAgICBkZWYgdGVzdF9zcGxpdG5wb3J0KHNlbGYpOgorICAgICAgICBzcGxpdG5wb3J0ID0gdXJsbGliLnBhcnNlLnNwbGl0bnBvcnQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGxpdG5wb3J0KCdwYXJyb3Q6ODgnKSwgKCdwYXJyb3QnLCA4OCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BsaXRucG9ydCgncGFycm90JyksICgncGFycm90JywgLTEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0bnBvcnQoJ3BhcnJvdCcsIDU1KSwgKCdwYXJyb3QnLCA1NSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BsaXRucG9ydCgncGFycm90OicpLCAoJ3BhcnJvdCcsIC0xKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGxpdG5wb3J0KCdwYXJyb3Q6JywgNTUpLCAoJ3BhcnJvdCcsIDU1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGxpdG5wb3J0KCcxMjcuMC4wLjEnKSwgKCcxMjcuMC4wLjEnLCAtMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BsaXRucG9ydCgnMTI3LjAuMC4xJywgNTUpLCAoJzEyNy4wLjAuMScsIDU1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGxpdG5wb3J0KCdwYXJyb3Q6Y2hlZXNlJyksICgncGFycm90JywgTm9uZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BsaXRucG9ydCgncGFycm90OmNoZWVzZScsIDU1KSwgKCdwYXJyb3QnLCBOb25lKSkKKworICAgIGRlZiB0ZXN0X3NwbGl0cXVlcnkoc2VsZik6CisgICAgICAgICMgTm9ybWFsIGNhc2VzIGFyZSBleGVyY2lzZWQgYnkgb3RoZXIgdGVzdHM7IGVuc3VyZSB0aGF0IHdlIGFsc28KKyAgICAgICAgIyBjYXRjaCBjYXNlcyB3aXRoIG5vIHBvcnQgc3BlY2lmaWVkICh0ZXN0Y2FzZSBlbnN1cmluZyBjb3ZlcmFnZSkKKyAgICAgICAgc3BsaXRxdWVyeSA9IHVybGxpYi5wYXJzZS5zcGxpdHF1ZXJ5CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BsaXRxdWVyeSgnaHR0cDovL3B5dGhvbi5vcmcvZmFrZT9mb289YmFyJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgKCdodHRwOi8vcHl0aG9uLm9yZy9mYWtlJywgJ2Zvbz1iYXInKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGxpdHF1ZXJ5KCdodHRwOi8vcHl0aG9uLm9yZy9mYWtlP2Zvbz1iYXI/JyksCisgICAgICAgICAgICAgICAgICAgICAgICAgKCdodHRwOi8vcHl0aG9uLm9yZy9mYWtlP2Zvbz1iYXInLCAnJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BsaXRxdWVyeSgnaHR0cDovL3B5dGhvbi5vcmcvZmFrZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgnaHR0cDovL3B5dGhvbi5vcmcvZmFrZScsIE5vbmUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0cXVlcnkoJz9mb289YmFyJyksICgnJywgJ2Zvbz1iYXInKSkKKworICAgIGRlZiB0ZXN0X3NwbGl0dGFnKHNlbGYpOgorICAgICAgICBzcGxpdHRhZyA9IHVybGxpYi5wYXJzZS5zcGxpdHRhZworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0dGFnKCdodHRwOi8vZXhhbXBsZS5jb20/Zm9vPWJhciNiYXonKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoJ2h0dHA6Ly9leGFtcGxlLmNvbT9mb289YmFyJywgJ2JheicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0dGFnKCdodHRwOi8vZXhhbXBsZS5jb20/Zm9vPWJhciMnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoJ2h0dHA6Ly9leGFtcGxlLmNvbT9mb289YmFyJywgJycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0dGFnKCcjYmF6JyksICgnJywgJ2JheicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0dGFnKCdodHRwOi8vZXhhbXBsZS5jb20/Zm9vPWJhcicpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgnaHR0cDovL2V4YW1wbGUuY29tP2Zvbz1iYXInLCBOb25lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGxpdHRhZygnaHR0cDovL2V4YW1wbGUuY29tP2Zvbz1iYXIjYmF6I2JvbycpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgnaHR0cDovL2V4YW1wbGUuY29tP2Zvbz1iYXIjYmF6JywgJ2JvbycpKQorCisgICAgZGVmIHRlc3Rfc3BsaXRhdHRyKHNlbGYpOgorICAgICAgICBzcGxpdGF0dHIgPSB1cmxsaWIucGFyc2Uuc3BsaXRhdHRyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BsaXRhdHRyKCcvcGF0aDthdHRyMT12YWx1ZTE7YXR0cjI9dmFsdWUyJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgKCcvcGF0aCcsIFsnYXR0cjE9dmFsdWUxJywgJ2F0dHIyPXZhbHVlMiddKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGxpdGF0dHIoJy9wYXRoOycpLCAoJy9wYXRoJywgWycnXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BsaXRhdHRyKCc7YXR0cjE9dmFsdWUxO2F0dHIyPXZhbHVlMicpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgnJywgWydhdHRyMT12YWx1ZTEnLCAnYXR0cjI9dmFsdWUyJ10pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0YXR0cignL3BhdGgnKSwgKCcvcGF0aCcsIFtdKSkKKworICAgIGRlZiB0ZXN0X3NwbGl0dmFsdWUoc2VsZik6CisgICAgICAgICMgTm9ybWFsIGNhc2VzIGFyZSBleGVyY2lzZWQgYnkgb3RoZXIgdGVzdHM7IHRlc3QgcGF0aG9sb2dpY2FsIGNhc2VzCisgICAgICAgICMgd2l0aCBubyBrZXkvdmFsdWUgcGFpcnMuICh0ZXN0Y2FzZSBlbnN1cmluZyBjb3ZlcmFnZSkKKyAgICAgICAgc3BsaXR2YWx1ZSA9IHVybGxpYi5wYXJzZS5zcGxpdHZhbHVlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BsaXR2YWx1ZSgnZm9vPWJhcicpLCAoJ2ZvbycsICdiYXInKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGxpdHZhbHVlKCdmb289JyksICgnZm9vJywgJycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0dmFsdWUoJz1iYXInKSwgKCcnLCAnYmFyJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BsaXR2YWx1ZSgnZm9vYmFyJyksICgnZm9vYmFyJywgTm9uZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BsaXR2YWx1ZSgnZm9vPWJhcj1iYXonKSwgKCdmb28nLCAnYmFyPWJheicpKQorCisgICAgZGVmIHRlc3RfdG9fYnl0ZXMoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHVybGxpYi5wYXJzZS50b19ieXRlcygnaHR0cDovL3d3dy5weXRob24ub3JnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsICdodHRwOi8vd3d3LnB5dGhvbi5vcmcnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRXJyb3IsIHVybGxpYi5wYXJzZS50b19ieXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ2h0dHA6Ly93d3cucHl0aG9uLm9yZy9tZWRpXHUwMGU2dmFsJykKKworICAgIGRlZiB0ZXN0X3Vud3JhcChzZWxmKToKKyAgICAgICAgdXJsID0gdXJsbGliLnBhcnNlLnVud3JhcCgnPFVSTDp0eXBlOi8vaG9zdC9wYXRoPicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJsLCAndHlwZTovL2hvc3QvcGF0aCcpCisKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF91c2VyZGljdC5weSBiL0xpYi90ZXN0L3Rlc3RfdXNlcmRpY3QucHkKaW5kZXggMTM3YzQ0NS4uM2ViODgwMSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF91c2VyZGljdC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3VzZXJkaWN0LnB5CkBAIC0yOSw3ICsyOSw4IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29sbGVjdGlvbnMuVXNlckRpY3Qob25lPTEsIHR3bz0yKSwgZDIpCiAgICAgICAgICMgaXRlbSBzZXF1ZW5jZSBjb25zdHJ1Y3RvcgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbGxlY3Rpb25zLlVzZXJEaWN0KFsoJ29uZScsMSksICgndHdvJywyKV0pLCBkMikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb2xsZWN0aW9ucy5Vc2VyRGljdChkaWN0PVsoJ29uZScsMSksICgndHdvJywyKV0pLCBkMikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zUmVnZXgoUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZywgIidkaWN0JyIpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb2xsZWN0aW9ucy5Vc2VyRGljdChkaWN0PVsoJ29uZScsMSksICgndHdvJywyKV0pLCBkMikKICAgICAgICAgIyBib3RoIHRvZ2V0aGVyCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29sbGVjdGlvbnMuVXNlckRpY3QoWygnb25lJywxKSwgKCd0d28nLDIpXSwgdHdvPTMsIHRocmVlPTUpLCBkMykKIApAQCAtNDUsNyArNDYsOCBAQAogICAgICAgICAjIFRlc3QgX19yZXByX18KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIodTApLCBzdHIoZDApKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIodTEpLCByZXByKGQxKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHUyKSwgcmVwcihkMikpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4ocmVwcih1MiksICgieydvbmUnOiAxLCAndHdvJzogMn0iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInsndHdvJzogMiwgJ29uZSc6IDF9IikpCiAKICAgICAgICAgIyBUZXN0IHJpY2ggY29tcGFyaXNvbiBhbmQgX19sZW5fXwogICAgICAgICBhbGwgPSBbZDAsIGQxLCBkMiwgdSwgdTAsIHUxLCB1MiwgdXUsIHV1MCwgdXUxLCB1dTJdCkBAIC04OSw5ICs5MSw5IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwobTJhLCBtMikKIAogICAgICAgICAjIFRlc3Qga2V5cywgaXRlbXMsIHZhbHVlcwotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUyLmtleXMoKSwgZDIua2V5cygpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUyLml0ZW1zKCksIGQyLml0ZW1zKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdCh1Mi52YWx1ZXMoKSksIGxpc3QoZDIudmFsdWVzKCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZCh1Mi5rZXlzKCkpLCBzb3J0ZWQoZDIua2V5cygpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQodTIuaXRlbXMoKSksIHNvcnRlZChkMi5pdGVtcygpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQodTIudmFsdWVzKCkpLCBzb3J0ZWQoZDIudmFsdWVzKCkpKQogCiAgICAgICAgICMgVGVzdCAiaW4iLgogICAgICAgICBmb3IgaSBpbiB1Mi5rZXlzKCk6CkBAIC0xMzgsNiArMTQwLDMwIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5wb3BpdGVtKCksICgieCIsIDQyKSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIHQucG9waXRlbSkKIAorICAgIGRlZiB0ZXN0X2luaXQoc2VsZik6CisgICAgICAgIGZvciBrdyBpbiAnc2VsZicsICdvdGhlcicsICdpdGVyYWJsZSc6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoY29sbGVjdGlvbnMuVXNlckRpY3QoKip7a3c6IDQyfSkuaXRlbXMoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsoa3csIDQyKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChjb2xsZWN0aW9ucy5Vc2VyRGljdCh7fSwgZGljdD00MikuaXRlbXMoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgWygnZGljdCcsIDQyKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChjb2xsZWN0aW9ucy5Vc2VyRGljdCh7fSwgZGljdD1Ob25lKS5pdGVtcygpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbKCdkaWN0JywgTm9uZSldKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnNSZWdleChQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nLCAiJ2RpY3QnIik6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoY29sbGVjdGlvbnMuVXNlckRpY3QoZGljdD17J2EnOiA0Mn0pLml0ZW1zKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKCdhJywgNDIpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb2xsZWN0aW9ucy5Vc2VyRGljdCwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY29sbGVjdGlvbnMuVXNlckRpY3QsICgpLCAoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb2xsZWN0aW9ucy5Vc2VyRGljdC5fX2luaXRfXykKKworICAgIGRlZiB0ZXN0X3VwZGF0ZShzZWxmKToKKyAgICAgICAgZm9yIGt3IGluICdzZWxmJywgJ2RpY3QnLCAnb3RoZXInLCAnaXRlcmFibGUnOgorICAgICAgICAgICAgZCA9IGNvbGxlY3Rpb25zLlVzZXJEaWN0KCkKKyAgICAgICAgICAgIGQudXBkYXRlKCoqe2t3OiA0Mn0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoZC5pdGVtcygpKSwgWyhrdywgNDIpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb2xsZWN0aW9ucy5Vc2VyRGljdCgpLnVwZGF0ZSwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY29sbGVjdGlvbnMuVXNlckRpY3QoKS51cGRhdGUsIHt9LCB7fSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb2xsZWN0aW9ucy5Vc2VyRGljdC51cGRhdGUpCisKICAgICBkZWYgdGVzdF9taXNzaW5nKHNlbGYpOgogICAgICAgICAjIE1ha2Ugc3VyZSBVc2VyRGljdCBkb2Vzbid0IGhhdmUgYSBfX21pc3NpbmdfXyBtZXRob2QKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNhdHRyKGNvbGxlY3Rpb25zLlVzZXJEaWN0LCAiX19taXNzaW5nX18iKSwgRmFsc2UpCkBAIC0xNDUsNyArMTcxLDcgQEAKICAgICAgICAgIyAoRCkgc3ViY2xhc3MgZGVmaW5lcyBfX21pc3NpbmdfXyBtZXRob2QgcmV0dXJuaW5nIGEgdmFsdWUKICAgICAgICAgIyAoRSkgc3ViY2xhc3MgZGVmaW5lcyBfX21pc3NpbmdfXyBtZXRob2QgcmFpc2luZyBSdW50aW1lRXJyb3IKICAgICAgICAgIyAoRikgc3ViY2xhc3Mgc2V0cyBfX21pc3NpbmdfXyBpbnN0YW5jZSB2YXJpYWJsZSAobm8gZWZmZWN0KQotICAgICAgICAjIChHKSBzdWJjbGFzcyBkb2Vzbid0IGRlZmluZSBfX21pc3NpbmdfXyBhdCBhIGFsbAorICAgICAgICAjIChHKSBzdWJjbGFzcyBkb2Vzbid0IGRlZmluZSBfX21pc3NpbmdfXyBhdCBhbGwKICAgICAgICAgY2xhc3MgRChjb2xsZWN0aW9ucy5Vc2VyRGljdCk6CiAgICAgICAgICAgICBkZWYgX19taXNzaW5nX18oc2VsZiwga2V5KToKICAgICAgICAgICAgICAgICByZXR1cm4gNDIKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdXNlcnN0cmluZy5weSBiL0xpYi90ZXN0L3Rlc3RfdXNlcnN0cmluZy5weQppbmRleCAzNGM2MjljLi45YmM4ZWRkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3VzZXJzdHJpbmcucHkKKysrIGIvTGliL3Rlc3QvdGVzdF91c2Vyc3RyaW5nLnB5CkBAIC0yOCwxNCArMjgsMTIgQEAKICAgICAgICAgICAgIHJlYWxyZXN1bHQKICAgICAgICAgKQogCi0gICAgZGVmIGNoZWNrcmFpc2VzKHNlbGYsIGV4Yywgb2JqZWN0LCBtZXRob2RuYW1lLCAqYXJncyk6Ci0gICAgICAgIG9iamVjdCA9IHNlbGYuZml4dHlwZShvYmplY3QpCisgICAgZGVmIGNoZWNrcmFpc2VzKHNlbGYsIGV4Yywgb2JqLCBtZXRob2RuYW1lLCAqYXJncyk6CisgICAgICAgIG9iaiA9IHNlbGYuZml4dHlwZShvYmopCiAgICAgICAgICMgd2UgZG9uJ3QgZml4IHRoZSBhcmd1bWVudHMsIGJlY2F1c2UgVXNlclN0cmluZyBjYW4ndCBjb3BlIHdpdGggaXQKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCi0gICAgICAgICAgICBleGMsCi0gICAgICAgICAgICBnZXRhdHRyKG9iamVjdCwgbWV0aG9kbmFtZSksCi0gICAgICAgICAgICAqYXJncwotICAgICAgICApCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoZXhjKSBhcyBjbToKKyAgICAgICAgICAgIGdldGF0dHIob2JqLCBtZXRob2RuYW1lKSgqYXJncykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChzdHIoY20uZXhjZXB0aW9uKSwgJycpCiAKICAgICBkZWYgY2hlY2tjYWxsKHNlbGYsIG9iamVjdCwgbWV0aG9kbmFtZSwgKmFyZ3MpOgogICAgICAgICBvYmplY3QgPSBzZWxmLmZpeHR5cGUob2JqZWN0KQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF91dS5weSBiL0xpYi90ZXN0L3Rlc3RfdXUucHkKaW5kZXggY2JmNjcyNC4uMjVmZmZiZiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF91dS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3V1LnB5CkBAIC05Myw2ICs5MywyOCBAQAogICAgICAgICBleGNlcHQgdXUuRXJyb3IgYXMgZToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGUpLCAiTm8gdmFsaWQgYmVnaW4gbGluZSBmb3VuZCBpbiBpbnB1dCBmaWxlIikKIAorICAgIGRlZiB0ZXN0X2dhcmJhZ2VfcGFkZGluZyhzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMjI0MDYKKyAgICAgICAgZW5jb2RlZHRleHQgPSAoCisgICAgICAgICAgICBiImJlZ2luIDY0NCBmaWxlXG4iCisgICAgICAgICAgICAjIGxlbmd0aCAxOyBiaXRzIDAwMTEwMCAxMTExMTEgMTExMTExIDExMTExMQorICAgICAgICAgICAgYiJceDIxXHgyQ1x4NUZceDVGXHg1RlxuIgorICAgICAgICAgICAgYiJceDIwXG4iCisgICAgICAgICAgICBiImVuZFxuIgorICAgICAgICApCisgICAgICAgIHBsYWludGV4dCA9IGIiXHgzMyIgICMgMDAxMTAwMTEKKworICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdCgidXUuZGVjb2RlKCkiKToKKyAgICAgICAgICAgIGlucCA9IGlvLkJ5dGVzSU8oZW5jb2RlZHRleHQpCisgICAgICAgICAgICBvdXQgPSBpby5CeXRlc0lPKCkKKyAgICAgICAgICAgIHV1LmRlY29kZShpbnAsIG91dCwgcXVpZXQ9VHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LmdldHZhbHVlKCksIHBsYWludGV4dCkKKworICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdCgidXVfY29kZWMiKToKKyAgICAgICAgICAgIGltcG9ydCBjb2RlY3MKKyAgICAgICAgICAgIGRlY29kZWQgPSBjb2RlY3MuZGVjb2RlKGVuY29kZWR0ZXh0LCAidXVfY29kZWMiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZWNvZGVkLCBwbGFpbnRleHQpCisKIGNsYXNzIFVVU3RkSU9UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiBzZXRVcChzZWxmKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdXVpZC5weSBiL0xpYi90ZXN0L3Rlc3RfdXVpZC5weQppbmRleCA3MjY0ODA4Li4xZThjYmEzIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3V1aWQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF91dWlkLnB5CkBAIC0xNCw5ICsxNCw2IEBACiAgICAgICAgIHJldHVybiBGYWxzZQogCiBjbGFzcyBUZXN0VVVJRCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgbGFzdF9ub2RlID0gTm9uZQotICAgIHNvdXJjZTJub2RlID0ge30KLQogICAgIGRlZiB0ZXN0X1VVSUQoc2VsZik6CiAgICAgICAgIGVxdWFsID0gc2VsZi5hc3NlcnRFcXVhbAogICAgICAgICBhc2NlbmRpbmcgPSBbXQpAQCAtMjk0LDk1ICsyOTEsMTMgQEAKICAgICAgICAgYmFkdHlwZShsYW1iZGE6IHNldGF0dHIodSwgJ2Nsb2NrX3NlcV9sb3cnLCAwKSkKICAgICAgICAgYmFkdHlwZShsYW1iZGE6IHNldGF0dHIodSwgJ25vZGUnLCAwKSkKIAotICAgIGRlZiBjaGVja19ub2RlKHNlbGYsIG5vZGUsIHNvdXJjZSk6Ci0gICAgICAgIG1lc3NhZ2UgPSAiJTAxMnggaXMgbm90IGFuIFJGQyA0MTIyIG5vZGUgSUQiICUgbm9kZQotICAgICAgICBzZWxmLmFzc2VydFRydWUoMCA8IG5vZGUsIG1lc3NhZ2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub2RlIDwgKDEgPDwgNDgpLCBtZXNzYWdlKQotCi0gICAgICAgIFRlc3RVVUlELnNvdXJjZTJub2RlW3NvdXJjZV0gPSBub2RlCi0gICAgICAgIGlmIFRlc3RVVUlELmxhc3Rfbm9kZToKLSAgICAgICAgICAgIGlmIFRlc3RVVUlELmxhc3Rfbm9kZSAhPSBub2RlOgotICAgICAgICAgICAgICAgIG1zZyA9ICJkaWZmZXJlbnQgc291cmNlcyBkaXNhZ3JlZSBvbiBub2RlOlxuIgotICAgICAgICAgICAgICAgIGZvciBzLCBuIGluIFRlc3RVVUlELnNvdXJjZTJub2RlLml0ZW1zKCk6Ci0gICAgICAgICAgICAgICAgICAgIG1zZyArPSAiICAgIGZyb20gc291cmNlICVyLCBub2RlIHdhcyAlMDEyeFxuIiAlIChzLCBuKQotICAgICAgICAgICAgICAgICMgVGhlcmUncyBhY3R1YWxseSBubyByZWFzb24gdG8gZXhwZWN0IHRoZSBNQUMgYWRkcmVzc2VzCi0gICAgICAgICAgICAgICAgIyB0byBhZ3JlZSBhY3Jvc3MgdmFyaW91cyBtZXRob2RzIC0tIGUuZy4sIGEgYm94IG1heSBoYXZlCi0gICAgICAgICAgICAgICAgIyBtdWx0aXBsZSBuZXR3b3JrIGludGVyZmFjZXMsIGFuZCBkaWZmZXJlbnQgd2F5cyBvZiBnZXR0aW5nCi0gICAgICAgICAgICAgICAgIyBhIE1BQyBhZGRyZXNzIG1heSBmYXZvciBkaWZmZXJlbnQgSFcuCi0gICAgICAgICAgICAgICAgIyNzZWxmLmZhaWwobXNnKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgVGVzdFVVSUQubGFzdF9ub2RlID0gbm9kZQotCi0gICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Mob3MubmFtZSA9PSAncG9zaXgnLCAncmVxdWlyZXMgUG9zaXgnKQotICAgIGRlZiB0ZXN0X2lmY29uZmlnX2dldG5vZGUoc2VsZik6Ci0gICAgICAgIG5vZGUgPSB1dWlkLl9pZmNvbmZpZ19nZXRub2RlKCkKLSAgICAgICAgaWYgbm9kZSBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHNlbGYuY2hlY2tfbm9kZShub2RlLCAnaWZjb25maWcnKQotCi0gICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Mob3MubmFtZSA9PSAnbnQnLCAncmVxdWlyZXMgV2luZG93cycpCi0gICAgZGVmIHRlc3RfaXBjb25maWdfZ2V0bm9kZShzZWxmKToKLSAgICAgICAgbm9kZSA9IHV1aWQuX2lwY29uZmlnX2dldG5vZGUoKQotICAgICAgICBpZiBub2RlIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgc2VsZi5jaGVja19ub2RlKG5vZGUsICdpcGNvbmZpZycpCi0KLSAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhpbXBvcnRhYmxlKCd3aW4zMnduZXQnKSwgJ3JlcXVpcmVzIHdpbjMyd25ldCcpCi0gICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaW1wb3J0YWJsZSgnbmV0YmlvcycpLCAncmVxdWlyZXMgbmV0YmlvcycpCi0gICAgZGVmIHRlc3RfbmV0Ymlvc19nZXRub2RlKHNlbGYpOgotICAgICAgICBzZWxmLmNoZWNrX25vZGUodXVpZC5fbmV0Ymlvc19nZXRub2RlKCksICduZXRiaW9zJykKLQotICAgIGRlZiB0ZXN0X3JhbmRvbV9nZXRub2RlKHNlbGYpOgotICAgICAgICBub2RlID0gdXVpZC5fcmFuZG9tX2dldG5vZGUoKQotICAgICAgICAjIExlYXN0IHNpZ25pZmljYW50IGJpdCBvZiBmaXJzdCBvY3RldCBtdXN0IGJlIHNldC4KLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vZGUgJiAweDAxMDAwMDAwMDAwMCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vZGUgPCAoMSA8PCA0OCkpCi0KLSAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhvcy5uYW1lID09ICdwb3NpeCcsICdyZXF1aXJlcyBQb3NpeCcpCi0gICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaW1wb3J0YWJsZSgnY3R5cGVzJyksICdyZXF1aXJlcyBjdHlwZXMnKQotICAgIGRlZiB0ZXN0X3VuaXhkbGxfZ2V0bm9kZShzZWxmKToKLSAgICAgICAgdHJ5OiAjIElzc3VlcyAxNDgxLCAzNTgxOiBfdXVpZF9nZW5lcmF0ZV90aW1lKCkgbWlnaHQgYmUgTm9uZS4KLSAgICAgICAgICAgIHNlbGYuY2hlY2tfbm9kZSh1dWlkLl91bml4ZGxsX2dldG5vZGUoKSwgJ3VuaXhkbGwnKQotICAgICAgICBleGNlcHQgVHlwZUVycm9yOgotICAgICAgICAgICAgcGFzcwotCi0gICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Mob3MubmFtZSA9PSAnbnQnLCAncmVxdWlyZXMgV2luZG93cycpCi0gICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaW1wb3J0YWJsZSgnY3R5cGVzJyksICdyZXF1aXJlcyBjdHlwZXMnKQotICAgIGRlZiB0ZXN0X3dpbmRsbF9nZXRub2RlKHNlbGYpOgotICAgICAgICBzZWxmLmNoZWNrX25vZGUodXVpZC5fd2luZGxsX2dldG5vZGUoKSwgJ3dpbmRsbCcpCi0KICAgICBkZWYgdGVzdF9nZXRub2RlKHNlbGYpOgogICAgICAgICBub2RlMSA9IHV1aWQuZ2V0bm9kZSgpCi0gICAgICAgIHNlbGYuY2hlY2tfbm9kZShub2RlMSwgImdldG5vZGUxIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDAgPCBub2RlMSA8ICgxIDw8IDQ4KSwgJyUwMTJ4JyAlIG5vZGUxKQogCiAgICAgICAgICMgVGVzdCBpdCBhZ2FpbiB0byBlbnN1cmUgY29uc2lzdGVuY3kuCiAgICAgICAgIG5vZGUyID0gdXVpZC5nZXRub2RlKCkKLSAgICAgICAgc2VsZi5jaGVja19ub2RlKG5vZGUyLCAiZ2V0bm9kZTIiKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobm9kZTEsIG5vZGUyKQotCi0gICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Mob3MubmFtZSA9PSAncG9zaXgnLCAncmVxdWlyZXMgUG9zaXgnKQotICAgIGRlZiB0ZXN0X2ZpbmRfbWFjKHNlbGYpOgotICAgICAgICBkYXRhID0gJycnXAotCi1mYWtlIGh3YWRkcgotY3Njb3R1bjAgIExpbmsgZW5jYXA6VU5TUEVDICBIV2FkZHIgMDAtMDAtMDAtMDAtMDAtMDAtMDAtMDAtMDAtMDAtMDAtMDAtMDAtMDAtMDAtMDAKLWV0aDAgICAgICBMaW5rIGVuY2FwOkV0aGVybmV0ICBIV2FkZHIgMTI6MzQ6NTY6Nzg6OTA6YWIKLScnJwotICAgICAgICBkZWYgbW9ja19wb3BlbihjbWQpOgotICAgICAgICAgICAgcmV0dXJuIGlvLlN0cmluZ0lPKGRhdGEpCi0KLSAgICAgICAgaWYgc2h1dGlsLndoaWNoKCdpZmNvbmZpZycpIGlzIE5vbmU6Ci0gICAgICAgICAgICBwYXRoID0gb3MucGF0aHNlcC5qb2luKCgnL3NiaW4nLCAnL3Vzci9zYmluJykpCi0gICAgICAgICAgICBpZiBzaHV0aWwud2hpY2goJ2lmY29uZmlnJywgcGF0aD1wYXRoKSBpcyBOb25lOgotICAgICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoJ3JlcXVpcmVzIGlmY29uZmlnJykKLQotICAgICAgICB3aXRoIHN1cHBvcnQuc3dhcF9hdHRyKG9zLCAncG9wZW4nLCBtb2NrX3BvcGVuKToKLSAgICAgICAgICAgIG1hYyA9IHV1aWQuX2ZpbmRfbWFjKAotICAgICAgICAgICAgICAgIGNvbW1hbmQ9J2lmY29uZmlnJywKLSAgICAgICAgICAgICAgICBhcmdzPScnLAotICAgICAgICAgICAgICAgIGh3X2lkZW50aWZpZXJzPVsnaHdhZGRyJ10sCi0gICAgICAgICAgICAgICAgZ2V0X2luZGV4PWxhbWJkYSB4OiB4ICsgMSwKLSAgICAgICAgICAgICkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFjLCAweDEyMzQ1Njc4OTBhYikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChub2RlMSwgbm9kZTIsICclMDEyeCAhPSAlMDEyeCcgJSAobm9kZTEsIG5vZGUyKSkKIAogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGltcG9ydGFibGUoJ2N0eXBlcycpLCAncmVxdWlyZXMgY3R5cGVzJykKICAgICBkZWYgdGVzdF91dWlkMShzZWxmKToKQEAgLTQ5NCw1ICs0MDksOTcgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocGFyZW50X3ZhbHVlLCBjaGlsZF92YWx1ZSkKIAogCitjbGFzcyBUZXN0SW50ZXJuYWxzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhvcy5uYW1lID09ICdwb3NpeCcsICdyZXF1aXJlcyBQb3NpeCcpCisgICAgZGVmIHRlc3RfZmluZF9tYWMoc2VsZik6CisgICAgICAgIGRhdGEgPSAnJydcCisKK2Zha2UgaHdhZGRyCitjc2NvdHVuMCAgTGluayBlbmNhcDpVTlNQRUMgIEhXYWRkciAwMC0wMC0wMC0wMC0wMC0wMC0wMC0wMC0wMC0wMC0wMC0wMC0wMC0wMC0wMC0wMAorZXRoMCAgICAgIExpbmsgZW5jYXA6RXRoZXJuZXQgIEhXYWRkciAxMjozNDo1Njo3ODo5MDphYgorJycnCisgICAgICAgIGRlZiBtb2NrX3BvcGVuKGNtZCk6CisgICAgICAgICAgICByZXR1cm4gaW8uU3RyaW5nSU8oZGF0YSkKKworICAgICAgICBpZiBzaHV0aWwud2hpY2goJ2lmY29uZmlnJykgaXMgTm9uZToKKyAgICAgICAgICAgIHBhdGggPSBvcy5wYXRoc2VwLmpvaW4oKCcvc2JpbicsICcvdXNyL3NiaW4nKSkKKyAgICAgICAgICAgIGlmIHNodXRpbC53aGljaCgnaWZjb25maWcnLCBwYXRoPXBhdGgpIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgncmVxdWlyZXMgaWZjb25maWcnKQorCisgICAgICAgIHdpdGggc3VwcG9ydC5zd2FwX2F0dHIob3MsICdwb3BlbicsIG1vY2tfcG9wZW4pOgorICAgICAgICAgICAgbWFjID0gdXVpZC5fZmluZF9tYWMoCisgICAgICAgICAgICAgICAgY29tbWFuZD0naWZjb25maWcnLAorICAgICAgICAgICAgICAgIGFyZ3M9JycsCisgICAgICAgICAgICAgICAgaHdfaWRlbnRpZmllcnM9Wydod2FkZHInXSwKKyAgICAgICAgICAgICAgICBnZXRfaW5kZXg9bGFtYmRhIHg6IHggKyAxLAorICAgICAgICAgICAgKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYWMsIDB4MTIzNDU2Nzg5MGFiKQorCisgICAgZGVmIGNoZWNrX25vZGUoc2VsZiwgbm9kZSwgcmVxdWlyZXM9Tm9uZSwgbmV0d29yaz1GYWxzZSk6CisgICAgICAgIGlmIHJlcXVpcmVzIGFuZCBub2RlIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCdyZXF1aXJlcyAnICsgcmVxdWlyZXMpCisgICAgICAgIGhleCA9ICclMDEyeCcgJSBub2RlCisgICAgICAgIGlmIHN1cHBvcnQudmVyYm9zZSA+PSAyOgorICAgICAgICAgICAgcHJpbnQoaGV4LCBlbmQ9JyAnKQorICAgICAgICBpZiBuZXR3b3JrOgorICAgICAgICAgICAgIyA0NyBiaXQgd2lsbCBuZXZlciBiZSBzZXQgaW4gSUVFRSA4MDIgYWRkcmVzc2VzIG9idGFpbmVkCisgICAgICAgICAgICAjIGZyb20gbmV0d29yayBjYXJkcy4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uobm9kZSAmIDB4MDEwMDAwMDAwMDAwLCBoZXgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgwIDwgbm9kZSA8ICgxIDw8IDQ4KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICIlcyBpcyBub3QgYW4gUkZDIDQxMjIgbm9kZSBJRCIgJSBoZXgpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhvcy5uYW1lID09ICdwb3NpeCcsICdyZXF1aXJlcyBQb3NpeCcpCisgICAgZGVmIHRlc3RfaWZjb25maWdfZ2V0bm9kZShzZWxmKToKKyAgICAgICAgbm9kZSA9IHV1aWQuX2lmY29uZmlnX2dldG5vZGUoKQorICAgICAgICBzZWxmLmNoZWNrX25vZGUobm9kZSwgJ2lmY29uZmlnJywgVHJ1ZSkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKG9zLm5hbWUgPT0gJ3Bvc2l4JywgJ3JlcXVpcmVzIFBvc2l4JykKKyAgICBkZWYgdGVzdF9hcnBfZ2V0bm9kZShzZWxmKToKKyAgICAgICAgbm9kZSA9IHV1aWQuX2FycF9nZXRub2RlKCkKKyAgICAgICAgc2VsZi5jaGVja19ub2RlKG5vZGUsICdhcnAnLCBUcnVlKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Mob3MubmFtZSA9PSAncG9zaXgnLCAncmVxdWlyZXMgUG9zaXgnKQorICAgIGRlZiB0ZXN0X2xhbnNjYW5fZ2V0bm9kZShzZWxmKToKKyAgICAgICAgbm9kZSA9IHV1aWQuX2xhbnNjYW5fZ2V0bm9kZSgpCisgICAgICAgIHNlbGYuY2hlY2tfbm9kZShub2RlLCAnbGFuc2NhbicsIFRydWUpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhvcy5uYW1lID09ICdwb3NpeCcsICdyZXF1aXJlcyBQb3NpeCcpCisgICAgZGVmIHRlc3RfbmV0c3RhdF9nZXRub2RlKHNlbGYpOgorICAgICAgICBub2RlID0gdXVpZC5fbmV0c3RhdF9nZXRub2RlKCkKKyAgICAgICAgc2VsZi5jaGVja19ub2RlKG5vZGUsICduZXRzdGF0JywgVHJ1ZSkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKG9zLm5hbWUgPT0gJ250JywgJ3JlcXVpcmVzIFdpbmRvd3MnKQorICAgIGRlZiB0ZXN0X2lwY29uZmlnX2dldG5vZGUoc2VsZik6CisgICAgICAgIG5vZGUgPSB1dWlkLl9pcGNvbmZpZ19nZXRub2RlKCkKKyAgICAgICAgc2VsZi5jaGVja19ub2RlKG5vZGUsICdpcGNvbmZpZycsIFRydWUpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhpbXBvcnRhYmxlKCd3aW4zMnduZXQnKSwgJ3JlcXVpcmVzIHdpbjMyd25ldCcpCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaW1wb3J0YWJsZSgnbmV0YmlvcycpLCAncmVxdWlyZXMgbmV0YmlvcycpCisgICAgZGVmIHRlc3RfbmV0Ymlvc19nZXRub2RlKHNlbGYpOgorICAgICAgICBub2RlID0gdXVpZC5fbmV0Ymlvc19nZXRub2RlKCkKKyAgICAgICAgc2VsZi5jaGVja19ub2RlKG5vZGUsIG5ldHdvcms9VHJ1ZSkKKworICAgIGRlZiB0ZXN0X3JhbmRvbV9nZXRub2RlKHNlbGYpOgorICAgICAgICBub2RlID0gdXVpZC5fcmFuZG9tX2dldG5vZGUoKQorICAgICAgICAjIExlYXN0IHNpZ25pZmljYW50IGJpdCBvZiBmaXJzdCBvY3RldCBtdXN0IGJlIHNldC4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vZGUgJiAweDAxMDAwMDAwMDAwMCwgJyUwMTJ4JyAlIG5vZGUpCisgICAgICAgIHNlbGYuY2hlY2tfbm9kZShub2RlKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Mob3MubmFtZSA9PSAncG9zaXgnLCAncmVxdWlyZXMgUG9zaXgnKQorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGltcG9ydGFibGUoJ2N0eXBlcycpLCAncmVxdWlyZXMgY3R5cGVzJykKKyAgICBkZWYgdGVzdF91bml4ZGxsX2dldG5vZGUoc2VsZik6CisgICAgICAgIHRyeTogIyBJc3N1ZXMgMTQ4MSwgMzU4MTogX3V1aWRfZ2VuZXJhdGVfdGltZSgpIG1pZ2h0IGJlIE5vbmUuCisgICAgICAgICAgICBub2RlID0gdXVpZC5fdW5peGRsbF9nZXRub2RlKCkKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoJ3JlcXVpcmVzIHV1aWRfZ2VuZXJhdGVfdGltZScpCisgICAgICAgIHNlbGYuY2hlY2tfbm9kZShub2RlKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Mob3MubmFtZSA9PSAnbnQnLCAncmVxdWlyZXMgV2luZG93cycpCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaW1wb3J0YWJsZSgnY3R5cGVzJyksICdyZXF1aXJlcyBjdHlwZXMnKQorICAgIGRlZiB0ZXN0X3dpbmRsbF9nZXRub2RlKHNlbGYpOgorICAgICAgICBub2RlID0gdXVpZC5fd2luZGxsX2dldG5vZGUoKQorICAgICAgICBzZWxmLmNoZWNrX25vZGUobm9kZSkKKworCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF92ZW52LnB5IGIvTGliL3Rlc3QvdGVzdF92ZW52LnB5CmluZGV4IDBmYWU4OGIuLmI0NjI1ODggMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdmVudi5weQorKysgYi9MaWIvdGVzdC90ZXN0X3ZlbnYucHkKQEAgLTUsMTcgKzUsMzYgQEAKIExpY2Vuc2VkIHRvIHRoZSBQU0YgdW5kZXIgYSBjb250cmlidXRvciBhZ3JlZW1lbnQuCiAiIiIKIAoraW1wb3J0IGVuc3VyZXBpcAogaW1wb3J0IG9zCiBpbXBvcnQgb3MucGF0aAotaW1wb3J0IHNodXRpbAoraW1wb3J0IHN0cnVjdAogaW1wb3J0IHN1YnByb2Nlc3MKIGltcG9ydCBzeXMKIGltcG9ydCB0ZW1wZmlsZQogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IChjYXB0dXJlZF9zdGRvdXQsIGNhcHR1cmVkX3N0ZGVyciwgcnVuX3VuaXR0ZXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5fc3ltbGluaykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuX3N5bWxpbmssIEVudmlyb25tZW50VmFyR3VhcmQsIHJtdHJlZSkKK2ltcG9ydCB0ZXh0d3JhcAogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgdmVudgogCisjIHBpcCBjdXJyZW50bHkgcmVxdWlyZXMgc3NsIHN1cHBvcnQsIHNvIHdlIGVuc3VyZSB3ZSBoYW5kbGUKKyMgaXQgYmVpbmcgbWlzc2luZyAoaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTE5NzQ0KQordHJ5OgorICAgIGltcG9ydCBzc2wKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBzc2wgPSBOb25lCisKK3NraXBJblZlbnYgPSB1bml0dGVzdC5za2lwSWYoc3lzLnByZWZpeCAhPSBzeXMuYmFzZV9wcmVmaXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUZXN0IG5vdCBhcHByb3ByaWF0ZSBpbiBhIHZlbnYnKQorCisjIG9zLnBhdGguZXhpc3RzKCdudWwnKSBpcyBGYWxzZTogaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTIwNTQxCitpZiBvcy5kZXZudWxsLmxvd2VyKCkgPT0gJ251bCc6CisgICAgZmFpbHNPbldpbmRvd3MgPSB1bml0dGVzdC5leHBlY3RlZEZhaWx1cmUKK2Vsc2U6CisgICAgZGVmIGZhaWxzT25XaW5kb3dzKGYpOgorICAgICAgICByZXR1cm4gZgorCiBjbGFzcyBCYXNlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgIiIiQmFzZSBjbGFzcyBmb3IgdmVudiB0ZXN0cy4iIiIKIApAQCAtMzYsNyArNTUsNyBAQAogICAgICAgICBzZWxmLmV4ZSA9IG9zLnBhdGguc3BsaXQoZXhlY3V0YWJsZSlbLTFdCiAKICAgICBkZWYgdGVhckRvd24oc2VsZik6Ci0gICAgICAgIHNodXRpbC5ybXRyZWUoc2VsZi5lbnZfZGlyKQorICAgICAgICBybXRyZWUoc2VsZi5lbnZfZGlyKQogCiAgICAgZGVmIHJ1bl93aXRoX2NhcHR1cmUoc2VsZiwgZnVuYywgKmFyZ3MsICoqa3dhcmdzKToKICAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBvdXRwdXQ6CkBAIC02MywxMSArODIsMTkgQEAKICAgICAgICAgIiIiCiAgICAgICAgIFRlc3QgdGhlIGNyZWF0ZSBmdW5jdGlvbiB3aXRoIGRlZmF1bHQgYXJndW1lbnRzLgogICAgICAgICAiIiIKLSAgICAgICAgc2h1dGlsLnJtdHJlZShzZWxmLmVudl9kaXIpCisgICAgICAgIHJtdHJlZShzZWxmLmVudl9kaXIpCiAgICAgICAgIHNlbGYucnVuX3dpdGhfY2FwdHVyZSh2ZW52LmNyZWF0ZSwgc2VsZi5lbnZfZGlyKQogICAgICAgICBzZWxmLmlzZGlyKHNlbGYuYmluZGlyKQogICAgICAgICBzZWxmLmlzZGlyKHNlbGYuaW5jbHVkZSkKICAgICAgICAgc2VsZi5pc2Rpcigqc2VsZi5saWIpCisgICAgICAgICMgSXNzdWUgMjExOTcKKyAgICAgICAgcCA9IHNlbGYuZ2V0X2Vudl9maWxlKCdsaWI2NCcpCisgICAgICAgIGNvbmRpdGlvbnMgPSAoKHN0cnVjdC5jYWxjc2l6ZSgnUCcpID09IDgpIGFuZCAob3MubmFtZSA9PSAncG9zaXgnKSBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAoc3lzLnBsYXRmb3JtICE9ICdkYXJ3aW4nKSkKKyAgICAgICAgaWYgY29uZGl0aW9uczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzbGluayhwKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5leGlzdHMocCkpCiAgICAgICAgIGRhdGEgPSBzZWxmLmdldF90ZXh0X2ZpbGVfY29udGVudHMoJ3B5dmVudi5jZmcnKQogICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ2RhcndpbicgYW5kICgnX19QWVZFTlZfTEFVTkNIRVJfXycKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gb3MuZW52aXJvbik6CkBAIC04Myw4ICsxMTAsNyBAQAogICAgICAgICAgICAgcHJpbnQoJyAgICAlcicgJSBvcy5saXN0ZGlyKGJkKSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKGZuKSwgJ0ZpbGUgJXIgc2hvdWxkIGV4aXN0LicgJSBmbikKIAotICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLnByZWZpeCAhPSBzeXMuYmFzZV9wcmVmaXgsICdUZXN0IG5vdCBhcHByb3ByaWF0ZSAnCi0gICAgICAgICAgICAgICAgICAgICAnaW4gYSB2ZW52JykKKyAgICBAc2tpcEluVmVudgogICAgIGRlZiB0ZXN0X3ByZWZpeGVzKHNlbGYpOgogICAgICAgICAiIiIKICAgICAgICAgVGVzdCB0aGF0IHRoZSBwcmVmaXggdmFsdWVzIGFyZSBhcyBleHBlY3RlZC4KQEAgLTk0LDcgKzEyMCw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3lzLmJhc2VfZXhlY19wcmVmaXgsIHN5cy5leGVjX3ByZWZpeCkKIAogICAgICAgICAjIGNoZWNrIGEgdmVudidzIHByZWZpeGVzCi0gICAgICAgIHNodXRpbC5ybXRyZWUoc2VsZi5lbnZfZGlyKQorICAgICAgICBybXRyZWUoc2VsZi5lbnZfZGlyKQogICAgICAgICBzZWxmLnJ1bl93aXRoX2NhcHR1cmUodmVudi5jcmVhdGUsIHNlbGYuZW52X2RpcikKICAgICAgICAgZW52cHkgPSBvcy5wYXRoLmpvaW4oc2VsZi5lbnZfZGlyLCBzZWxmLmJpbmRpciwgc2VsZi5leGUpCiAgICAgICAgIGNtZCA9IFtlbnZweSwgJy1jJywgTm9uZV0KQEAgLTEwOSwyOSArMTM1LDg5IEBACiAgICAgICAgICAgICBvdXQsIGVyciA9IHAuY29tbXVuaWNhdGUoKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQuc3RyaXAoKSwgZXhwZWN0ZWQuZW5jb2RlKCkpCiAKKyAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKKyAgICAgICAgRU5WX1NVQkRJUlMgPSAoCisgICAgICAgICAgICAoJ1NjcmlwdHMnLCksCisgICAgICAgICAgICAoJ0luY2x1ZGUnLCksCisgICAgICAgICAgICAoJ0xpYicsKSwKKyAgICAgICAgICAgICgnTGliJywgJ3NpdGUtcGFja2FnZXMnKSwKKyAgICAgICAgKQorICAgIGVsc2U6CisgICAgICAgIEVOVl9TVUJESVJTID0gKAorICAgICAgICAgICAgKCdiaW4nLCksCisgICAgICAgICAgICAoJ2luY2x1ZGUnLCksCisgICAgICAgICAgICAoJ2xpYicsKSwKKyAgICAgICAgICAgICgnbGliJywgJ3B5dGhvbiVkLiVkJyAlIHN5cy52ZXJzaW9uX2luZm9bOjJdKSwKKyAgICAgICAgICAgICgnbGliJywgJ3B5dGhvbiVkLiVkJyAlIHN5cy52ZXJzaW9uX2luZm9bOjJdLCAnc2l0ZS1wYWNrYWdlcycpLAorICAgICAgICApCisKKyAgICBkZWYgY3JlYXRlX2NvbnRlbnRzKHNlbGYsIHBhdGhzLCBmaWxlbmFtZSk6CisgICAgICAgICIiIgorICAgICAgICBDcmVhdGUgc29tZSBmaWxlcyBpbiB0aGUgZW52aXJvbm1lbnQgd2hpY2ggYXJlIHVucmVsYXRlZAorICAgICAgICB0byB0aGUgdmlydHVhbCBlbnZpcm9ubWVudC4KKyAgICAgICAgIiIiCisgICAgICAgIGZvciBzdWJkaXJzIGluIHBhdGhzOgorICAgICAgICAgICAgZCA9IG9zLnBhdGguam9pbihzZWxmLmVudl9kaXIsICpzdWJkaXJzKQorICAgICAgICAgICAgb3MubWtkaXIoZCkKKyAgICAgICAgICAgIGZuID0gb3MucGF0aC5qb2luKGQsIGZpbGVuYW1lKQorICAgICAgICAgICAgd2l0aCBvcGVuKGZuLCAnd2InKSBhcyBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUoYidTdGlsbCBoZXJlPycpCisKICAgICBkZWYgdGVzdF9vdmVyd3JpdGVfZXhpc3Rpbmcoc2VsZik6CiAgICAgICAgICIiIgotICAgICAgICBUZXN0IGNvbnRyb2wgb2Ygb3ZlcndyaXRpbmcgYW4gZXhpc3RpbmcgZW52aXJvbm1lbnQgZGlyZWN0b3J5LgorICAgICAgICBUZXN0IGNyZWF0aW5nIGVudmlyb25tZW50IGluIGFuIGV4aXN0aW5nIGRpcmVjdG9yeS4KICAgICAgICAgIiIiCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHZlbnYuY3JlYXRlLCBzZWxmLmVudl9kaXIpCisgICAgICAgIHNlbGYuY3JlYXRlX2NvbnRlbnRzKHNlbGYuRU5WX1NVQkRJUlMsICdmb28nKQorICAgICAgICB2ZW52LmNyZWF0ZShzZWxmLmVudl9kaXIpCisgICAgICAgIGZvciBzdWJkaXJzIGluIHNlbGYuRU5WX1NVQkRJUlM6CisgICAgICAgICAgICBmbiA9IG9zLnBhdGguam9pbihzZWxmLmVudl9kaXIsICooc3ViZGlycyArICgnZm9vJywpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhmbikpCisgICAgICAgICAgICB3aXRoIG9wZW4oZm4sICdyYicpIGFzIGY6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgYidTdGlsbCBoZXJlPycpCisKICAgICAgICAgYnVpbGRlciA9IHZlbnYuRW52QnVpbGRlcihjbGVhcj1UcnVlKQogICAgICAgICBidWlsZGVyLmNyZWF0ZShzZWxmLmVudl9kaXIpCisgICAgICAgIGZvciBzdWJkaXJzIGluIHNlbGYuRU5WX1NVQkRJUlM6CisgICAgICAgICAgICBmbiA9IG9zLnBhdGguam9pbihzZWxmLmVudl9kaXIsICooc3ViZGlycyArICgnZm9vJywpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5leGlzdHMoZm4pKQorCisgICAgZGVmIGNsZWFyX2RpcmVjdG9yeShzZWxmLCBwYXRoKToKKyAgICAgICAgZm9yIGZuIGluIG9zLmxpc3RkaXIocGF0aCk6CisgICAgICAgICAgICBmbiA9IG9zLnBhdGguam9pbihwYXRoLCBmbikKKyAgICAgICAgICAgIGlmIG9zLnBhdGguaXNsaW5rKGZuKSBvciBvcy5wYXRoLmlzZmlsZShmbik6CisgICAgICAgICAgICAgICAgb3MucmVtb3ZlKGZuKQorICAgICAgICAgICAgZWxpZiBvcy5wYXRoLmlzZGlyKGZuKToKKyAgICAgICAgICAgICAgICBybXRyZWUoZm4pCisKKyAgICBkZWYgdGVzdF91bm92ZXJ3cml0YWJsZV9mYWlscyhzZWxmKToKKyAgICAgICAgI2NyZWF0ZSBhIGZpbGUgY2xhc2hpbmcgd2l0aCBkaXJlY3RvcmllcyBpbiB0aGUgZW52IGRpcgorICAgICAgICBmb3IgcGF0aHMgaW4gc2VsZi5FTlZfU1VCRElSU1s6M106CisgICAgICAgICAgICBmbiA9IG9zLnBhdGguam9pbihzZWxmLmVudl9kaXIsICpwYXRocykKKyAgICAgICAgICAgIHdpdGggb3BlbihmbiwgJ3diJykgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKGInJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChWYWx1ZUVycm9yLCBPU0Vycm9yKSwgdmVudi5jcmVhdGUsIHNlbGYuZW52X2RpcikKKyAgICAgICAgICAgIHNlbGYuY2xlYXJfZGlyZWN0b3J5KHNlbGYuZW52X2RpcikKIAogICAgIGRlZiB0ZXN0X3VwZ3JhZGUoc2VsZik6CiAgICAgICAgICIiIgogICAgICAgICBUZXN0IHVwZ3JhZGluZyBhbiBleGlzdGluZyBlbnZpcm9ubWVudCBkaXJlY3RvcnkuCiAgICAgICAgICIiIgotICAgICAgICBidWlsZGVyID0gdmVudi5FbnZCdWlsZGVyKHVwZ3JhZGU9VHJ1ZSkKLSAgICAgICAgc2VsZi5ydW5fd2l0aF9jYXB0dXJlKGJ1aWxkZXIuY3JlYXRlLCBzZWxmLmVudl9kaXIpCi0gICAgICAgIHNlbGYuaXNkaXIoc2VsZi5iaW5kaXIpCi0gICAgICAgIHNlbGYuaXNkaXIoc2VsZi5pbmNsdWRlKQotICAgICAgICBzZWxmLmlzZGlyKCpzZWxmLmxpYikKLSAgICAgICAgZm4gPSBzZWxmLmdldF9lbnZfZmlsZShzZWxmLmJpbmRpciwgc2VsZi5leGUpCi0gICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhmbik6ICAjIGRpYWdub3N0aWNzIGZvciBXaW5kb3dzIGJ1aWxkYm90IGZhaWx1cmVzCi0gICAgICAgICAgICBiZCA9IHNlbGYuZ2V0X2Vudl9maWxlKHNlbGYuYmluZGlyKQotICAgICAgICAgICAgcHJpbnQoJ0NvbnRlbnRzIG9mICVyOicgJSBiZCkKLSAgICAgICAgICAgIHByaW50KCcgICAgJXInICUgb3MubGlzdGRpcihiZCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhmbiksICdGaWxlICVyIHNob3VsZCBleGlzdC4nICUgZm4pCisgICAgICAgICMgU2VlIElzc3VlICMyMTY0MzogdGhlIGxvb3AgbmVlZHMgdG8gcnVuIHR3aWNlIHRvIGVuc3VyZQorICAgICAgICAjIHRoYXQgZXZlcnl0aGluZyB3b3JrcyBvbiB0aGUgdXBncmFkZSAodGhlIGZpcnN0IHJ1biBqdXN0IGNyZWF0ZXMKKyAgICAgICAgIyB0aGUgdmVudikuCisgICAgICAgIGZvciB1cGdyYWRlIGluIChGYWxzZSwgVHJ1ZSk6CisgICAgICAgICAgICBidWlsZGVyID0gdmVudi5FbnZCdWlsZGVyKHVwZ3JhZGU9dXBncmFkZSkKKyAgICAgICAgICAgIHNlbGYucnVuX3dpdGhfY2FwdHVyZShidWlsZGVyLmNyZWF0ZSwgc2VsZi5lbnZfZGlyKQorICAgICAgICAgICAgc2VsZi5pc2RpcihzZWxmLmJpbmRpcikKKyAgICAgICAgICAgIHNlbGYuaXNkaXIoc2VsZi5pbmNsdWRlKQorICAgICAgICAgICAgc2VsZi5pc2Rpcigqc2VsZi5saWIpCisgICAgICAgICAgICBmbiA9IHNlbGYuZ2V0X2Vudl9maWxlKHNlbGYuYmluZGlyLCBzZWxmLmV4ZSkKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhmbik6CisgICAgICAgICAgICAgICAgIyBkaWFnbm9zdGljcyBmb3IgV2luZG93cyBidWlsZGJvdCBmYWlsdXJlcworICAgICAgICAgICAgICAgIGJkID0gc2VsZi5nZXRfZW52X2ZpbGUoc2VsZi5iaW5kaXIpCisgICAgICAgICAgICAgICAgcHJpbnQoJ0NvbnRlbnRzIG9mICVyOicgJSBiZCkKKyAgICAgICAgICAgICAgICBwcmludCgnICAgICVyJyAlIG9zLmxpc3RkaXIoYmQpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKGZuKSwgJ0ZpbGUgJXIgc2hvdWxkIGV4aXN0LicgJSBmbikKIAogICAgIGRlZiB0ZXN0X2lzb2xhdGlvbihzZWxmKToKICAgICAgICAgIiIiCkBAIC0xNjIsMTMgKzI0OCwxMiBAQAogICAgICMgcnVuIHRoZSB0ZXN0LCB0aGUgcHl2ZW52LmNmZyBpbiB0aGUgdmVudiBjcmVhdGVkIGluIHRoZSB0ZXN0IHdpbGwKICAgICAjIHBvaW50IHRvIHRoZSB2ZW52IGJlaW5nIHVzZWQgdG8gcnVuIHRoZSB0ZXN0LCBhbmQgd2UgbG9zZSB0aGUgbGluawogICAgICMgdG8gdGhlIHNvdXJjZSBidWlsZCAtIHNvIFB5dGhvbiBjYW4ndCBpbml0aWFsaXNlIHByb3Blcmx5LgotICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLnByZWZpeCAhPSBzeXMuYmFzZV9wcmVmaXgsICdUZXN0IG5vdCBhcHByb3ByaWF0ZSAnCi0gICAgICAgICAgICAgICAgICAgICAnaW4gYSB2ZW52JykKKyAgICBAc2tpcEluVmVudgogICAgIGRlZiB0ZXN0X2V4ZWN1dGFibGUoc2VsZik6CiAgICAgICAgICIiIgogICAgICAgICBUZXN0IHRoYXQgdGhlIHN5cy5leGVjdXRhYmxlIHZhbHVlIGlzIGFzIGV4cGVjdGVkLgogICAgICAgICAiIiIKLSAgICAgICAgc2h1dGlsLnJtdHJlZShzZWxmLmVudl9kaXIpCisgICAgICAgIHJtdHJlZShzZWxmLmVudl9kaXIpCiAgICAgICAgIHNlbGYucnVuX3dpdGhfY2FwdHVyZSh2ZW52LmNyZWF0ZSwgc2VsZi5lbnZfZGlyKQogICAgICAgICBlbnZweSA9IG9zLnBhdGguam9pbihvcy5wYXRoLnJlYWxwYXRoKHNlbGYuZW52X2RpciksIHNlbGYuYmluZGlyLCBzZWxmLmV4ZSkKICAgICAgICAgY21kID0gW2VudnB5LCAnLWMnLCAnaW1wb3J0IHN5czsgcHJpbnQoc3lzLmV4ZWN1dGFibGUpJ10KQEAgLTE4Miw3ICsyNjcsNyBAQAogICAgICAgICAiIiIKICAgICAgICAgVGVzdCB0aGF0IHRoZSBzeXMuZXhlY3V0YWJsZSB2YWx1ZSBpcyBhcyBleHBlY3RlZC4KICAgICAgICAgIiIiCi0gICAgICAgIHNodXRpbC5ybXRyZWUoc2VsZi5lbnZfZGlyKQorICAgICAgICBybXRyZWUoc2VsZi5lbnZfZGlyKQogICAgICAgICBidWlsZGVyID0gdmVudi5FbnZCdWlsZGVyKGNsZWFyPVRydWUsIHN5bWxpbmtzPVRydWUpCiAgICAgICAgIGJ1aWxkZXIuY3JlYXRlKHNlbGYuZW52X2RpcikKICAgICAgICAgZW52cHkgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5yZWFscGF0aChzZWxmLmVudl9kaXIpLCBzZWxmLmJpbmRpciwgc2VsZi5leGUpCkBAIC0xOTIsOCArMjc3LDEyOSBAQAogICAgICAgICBvdXQsIGVyciA9IHAuY29tbXVuaWNhdGUoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dC5zdHJpcCgpLCBlbnZweS5lbmNvZGUoKSkKIAorCitAc2tpcEluVmVudgorY2xhc3MgRW5zdXJlUGlwVGVzdChCYXNlVGVzdCk6CisgICAgIiIiVGVzdCB2ZW52IG1vZHVsZSBpbnN0YWxsYXRpb24gb2YgcGlwLiIiIgorICAgIGRlZiBhc3NlcnRfcGlwX25vdF9pbnN0YWxsZWQoc2VsZik6CisgICAgICAgIGVudnB5ID0gb3MucGF0aC5qb2luKG9zLnBhdGgucmVhbHBhdGgoc2VsZi5lbnZfZGlyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5iaW5kaXIsIHNlbGYuZXhlKQorICAgICAgICB0cnlfaW1wb3J0ID0gJ3RyeTpcbiBpbXBvcnQgcGlwXG5leGNlcHQgSW1wb3J0RXJyb3I6XG4gcHJpbnQoIk9LIiknCisgICAgICAgIGNtZCA9IFtlbnZweSwgJy1jJywgdHJ5X2ltcG9ydF0KKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oY21kLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICBvdXQsIGVyciA9IHAuY29tbXVuaWNhdGUoKQorICAgICAgICAjIFdlIGZvcmNlIGV2ZXJ5dGhpbmcgdG8gdGV4dCwgc28gdW5pdHRlc3QgZ2l2ZXMgdGhlIGRldGFpbGVkIGRpZmYKKyAgICAgICAgIyBpZiB3ZSBnZXQgdW5leHBlY3RlZCByZXN1bHRzCisgICAgICAgIGVyciA9IGVyci5kZWNvZGUoImxhdGluLTEiKSAjIEZvcmNlIHRvIHRleHQsIHByZXZlbnQgZGVjb2RpbmcgZXJyb3JzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLCAiIikKKyAgICAgICAgb3V0ID0gb3V0LmRlY29kZSgibGF0aW4tMSIpICMgRm9yY2UgdG8gdGV4dCwgcHJldmVudCBkZWNvZGluZyBlcnJvcnMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQuc3RyaXAoKSwgIk9LIikKKworCisgICAgZGVmIHRlc3Rfbm9fcGlwX2J5X2RlZmF1bHQoc2VsZik6CisgICAgICAgIHJtdHJlZShzZWxmLmVudl9kaXIpCisgICAgICAgIHNlbGYucnVuX3dpdGhfY2FwdHVyZSh2ZW52LmNyZWF0ZSwgc2VsZi5lbnZfZGlyKQorICAgICAgICBzZWxmLmFzc2VydF9waXBfbm90X2luc3RhbGxlZCgpCisKKyAgICBkZWYgdGVzdF9leHBsaWNpdF9ub19waXAoc2VsZik6CisgICAgICAgIHJtdHJlZShzZWxmLmVudl9kaXIpCisgICAgICAgIHNlbGYucnVuX3dpdGhfY2FwdHVyZSh2ZW52LmNyZWF0ZSwgc2VsZi5lbnZfZGlyLCB3aXRoX3BpcD1GYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRfcGlwX25vdF9pbnN0YWxsZWQoKQorCisgICAgQGZhaWxzT25XaW5kb3dzCisgICAgZGVmIHRlc3RfZGV2bnVsbF9leGlzdHNfYW5kX2lzX2VtcHR5KHNlbGYpOgorICAgICAgICAjIEZpeCBmb3IgaXNzdWUgIzIwMDUzIHVzZXMgb3MuZGV2bnVsbCB0byBmb3JjZSBhIGNvbmZpZyBmaWxlIHRvCisgICAgICAgICMgYXBwZWFyIGVtcHR5LiBIb3dldmVyIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUyMDU0MSBtZWFucworICAgICAgICAjIHRoYXQgZG9lc24ndCBjdXJyZW50bHkgd29yayBwcm9wZXJseSBvbiBXaW5kb3dzLiBPbmNlIHRoYXQgaXMKKyAgICAgICAgIyBmaXhlZCwgdGhlICJ3aW5fbG9jYXRpb24iIHBhcnQgb2YgdGVzdF93aXRoX3BpcCBzaG91bGQgYmUgcmVzdG9yZWQKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKG9zLmRldm51bGwpKQorICAgICAgICB3aXRoIG9wZW4ob3MuZGV2bnVsbCwgInJiIikgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIGIiIikKKworICAgICMgUmVxdWVzdGluZyBwaXAgZmFpbHMgd2l0aG91dCBTU0wgKGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxOTc0NCkKKyAgICBAdW5pdHRlc3Quc2tpcElmKHNzbCBpcyBOb25lLCBlbnN1cmVwaXAuX01JU1NJTkdfU1NMX01FU1NBR0UpCisgICAgZGVmIHRlc3Rfd2l0aF9waXAoc2VsZik6CisgICAgICAgIHJtdHJlZShzZWxmLmVudl9kaXIpCisgICAgICAgIHdpdGggRW52aXJvbm1lbnRWYXJHdWFyZCgpIGFzIGVudnZhcnM6CisgICAgICAgICAgICAjIHBpcCdzIGNyb3NzLXZlcnNpb24gY29tcGF0aWJpbGl0eSBtYXkgdHJpZ2dlciBkZXByZWNhdGlvbgorICAgICAgICAgICAgIyB3YXJuaW5ncyBpbiBjdXJyZW50IHZlcnNpb25zIG9mIFB5dGhvbi4gRW5zdXJlIHJlbGF0ZWQKKyAgICAgICAgICAgICMgZW52aXJvbm1lbnQgc2V0dGluZ3MgZG9uJ3QgY2F1c2UgdmVudiB0byBmYWlsLgorICAgICAgICAgICAgZW52dmFyc1siUFlUSE9OV0FSTklOR1MiXSA9ICJlIgorICAgICAgICAgICAgIyBlbnN1cmVwaXAgaXMgZGlmZmVyZW50IGVub3VnaCBmcm9tIGEgbm9ybWFsIHBpcCBpbnZvY2F0aW9uCisgICAgICAgICAgICAjIHRoYXQgd2Ugd2FudCB0byBlbnN1cmUgaXQgaWdub3JlcyB0aGUgbm9ybWFsIHBpcCBlbnZpcm9ubWVudAorICAgICAgICAgICAgIyB2YXJpYWJsZSBzZXR0aW5ncy4gV2Ugc2V0IFBJUF9OT19JTlNUQUxMIGhlcmUgc3BlY2lmaWNhbGx5CisgICAgICAgICAgICAjIHRvIGNoZWNrIHRoYXQgZW5zdXJlcGlwIChhbmQgaGVuY2UgdmVudikgaWdub3JlcyBpdC4KKyAgICAgICAgICAgICMgU2VlIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxOTczNAorICAgICAgICAgICAgZW52dmFyc1siUElQX05PX0lOU1RBTEwiXSA9ICIxIgorICAgICAgICAgICAgIyBBbHNvIGNoZWNrIHRoYXQgd2UgaWdub3JlIHRoZSBwaXAgY29uZmlndXJhdGlvbiBmaWxlCisgICAgICAgICAgICAjIFNlZSBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMjAwNTMKKyAgICAgICAgICAgIHdpdGggdGVtcGZpbGUuVGVtcG9yYXJ5RGlyZWN0b3J5KCkgYXMgaG9tZV9kaXI6CisgICAgICAgICAgICAgICAgZW52dmFyc1siSE9NRSJdID0gaG9tZV9kaXIKKyAgICAgICAgICAgICAgICBiYWRfY29uZmlnID0gIltnbG9iYWxdXG5uby1pbnN0YWxsPTEiCisgICAgICAgICAgICAgICAgIyBXcml0ZSB0byBib3RoIGNvbmZpZyBmaWxlIG5hbWVzIG9uIGFsbCBwbGF0Zm9ybXMgdG8gcmVkdWNlCisgICAgICAgICAgICAgICAgIyBjcm9zcy1wbGF0Zm9ybSB2YXJpYXRpb24gaW4gdGVzdCBjb2RlIGJlaGF2aW91cgorICAgICAgICAgICAgICAgIHdpbl9sb2NhdGlvbiA9ICgicGlwIiwgInBpcC5pbmkiKQorICAgICAgICAgICAgICAgIHBvc2l4X2xvY2F0aW9uID0gKCIucGlwIiwgInBpcC5jb25mIikKKyAgICAgICAgICAgICAgICAjIFNraXBzIHdpbl9sb2NhdGlvbiBkdWUgdG8gaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTIwNTQxCisgICAgICAgICAgICAgICAgZm9yIGRpcm5hbWUsIGZuYW1lIGluIChwb3NpeF9sb2NhdGlvbiwpOgorICAgICAgICAgICAgICAgICAgICBkaXJwYXRoID0gb3MucGF0aC5qb2luKGhvbWVfZGlyLCBkaXJuYW1lKQorICAgICAgICAgICAgICAgICAgICBvcy5ta2RpcihkaXJwYXRoKQorICAgICAgICAgICAgICAgICAgICBmcGF0aCA9IG9zLnBhdGguam9pbihkaXJwYXRoLCBmbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBvcGVuKGZwYXRoLCAndycpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgICAgICBmLndyaXRlKGJhZF9jb25maWcpCisKKyAgICAgICAgICAgICAgICAjIEFjdHVhbGx5IHJ1biB0aGUgY3JlYXRlIGNvbW1hbmQgd2l0aCBhbGwgdGhhdCB1bmhlbHBmdWwKKyAgICAgICAgICAgICAgICAjIGNvbmZpZyBpbiBwbGFjZSB0byBlbnN1cmUgd2UgaWdub3JlIGl0CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBzZWxmLnJ1bl93aXRoX2NhcHR1cmUodmVudi5jcmVhdGUsIHNlbGYuZW52X2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhfcGlwPVRydWUpCisgICAgICAgICAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGV4YzoKKyAgICAgICAgICAgICAgICAgICAgIyBUaGUgb3V0cHV0IHRoaXMgcHJvZHVjZXMgY2FuIGJlIGEgbGl0dGxlIGhhcmQgdG8gcmVhZCwKKyAgICAgICAgICAgICAgICAgICAgIyBidXQgYXQgbGVhc3QgaXQgaGFzIGFsbCB0aGUgZGV0YWlscworICAgICAgICAgICAgICAgICAgICBkZXRhaWxzID0gZXhjLm91dHB1dC5kZWNvZGUoZXJyb3JzPSJyZXBsYWNlIikKKyAgICAgICAgICAgICAgICAgICAgbXNnID0gInt9XG5cbioqU3VicHJvY2VzcyBPdXRwdXQqKlxue30iCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbChtc2cuZm9ybWF0KGV4YywgZGV0YWlscykpCisgICAgICAgICMgRW5zdXJlIHBpcCBpcyBhdmFpbGFibGUgaW4gdGhlIHZpcnR1YWwgZW52aXJvbm1lbnQKKyAgICAgICAgZW52cHkgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5yZWFscGF0aChzZWxmLmVudl9kaXIpLCBzZWxmLmJpbmRpciwgc2VsZi5leGUpCisgICAgICAgIGNtZCA9IFtlbnZweSwgJy1JbScsICdwaXAnLCAnLS12ZXJzaW9uJ10KKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oY21kLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgIG91dCwgZXJyID0gcC5jb21tdW5pY2F0ZSgpCisgICAgICAgICMgV2UgZm9yY2UgZXZlcnl0aGluZyB0byB0ZXh0LCBzbyB1bml0dGVzdCBnaXZlcyB0aGUgZGV0YWlsZWQgZGlmZgorICAgICAgICAjIGlmIHdlIGdldCB1bmV4cGVjdGVkIHJlc3VsdHMKKyAgICAgICAgZXJyID0gZXJyLmRlY29kZSgibGF0aW4tMSIpICMgRm9yY2UgdG8gdGV4dCwgcHJldmVudCBkZWNvZGluZyBlcnJvcnMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIsICIiKQorICAgICAgICBvdXQgPSBvdXQuZGVjb2RlKCJsYXRpbi0xIikgIyBGb3JjZSB0byB0ZXh0LCBwcmV2ZW50IGRlY29kaW5nIGVycm9ycworICAgICAgICBleHBlY3RlZF92ZXJzaW9uID0gInBpcCB7fSIuZm9ybWF0KGVuc3VyZXBpcC52ZXJzaW9uKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0WzpsZW4oZXhwZWN0ZWRfdmVyc2lvbildLCBleHBlY3RlZF92ZXJzaW9uKQorICAgICAgICBlbnZfZGlyID0gb3MuZnNlbmNvZGUoc2VsZi5lbnZfZGlyKS5kZWNvZGUoImxhdGluLTEiKQorICAgICAgICBzZWxmLmFzc2VydEluKGVudl9kaXIsIG91dCkKKworICAgICAgICAjIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxOTcyOAorICAgICAgICAjIENoZWNrIHRoZSBwcml2YXRlIHVuaW5zdGFsbCBjb21tYW5kIHByb3ZpZGVkIGZvciB0aGUgV2luZG93cworICAgICAgICAjIGluc3RhbGxlcnMgd29ya3MgKGF0IGxlYXN0IGluIGEgdmlydHVhbCBlbnZpcm9ubWVudCkKKyAgICAgICAgY21kID0gW2VudnB5LCAnLUltJywgJ2Vuc3VyZXBpcC5fdW5pbnN0YWxsJ10KKyAgICAgICAgd2l0aCBFbnZpcm9ubWVudFZhckd1YXJkKCkgYXMgZW52dmFyczoKKyAgICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKGNtZCwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgICAgIG91dCwgZXJyID0gcC5jb21tdW5pY2F0ZSgpCisgICAgICAgICMgV2UgZm9yY2UgZXZlcnl0aGluZyB0byB0ZXh0LCBzbyB1bml0dGVzdCBnaXZlcyB0aGUgZGV0YWlsZWQgZGlmZgorICAgICAgICAjIGlmIHdlIGdldCB1bmV4cGVjdGVkIHJlc3VsdHMKKyAgICAgICAgZXJyID0gZXJyLmRlY29kZSgibGF0aW4tMSIpICMgRm9yY2UgdG8gdGV4dCwgcHJldmVudCBkZWNvZGluZyBlcnJvcnMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIsICIiKQorICAgICAgICAjIEJlaW5nIGZhaXJseSBzcGVjaWZpYyByZWdhcmRpbmcgdGhlIGV4cGVjdGVkIGJlaGF2aW91ciBmb3IgdGhlCisgICAgICAgICMgaW5pdGlhbCBidW5kbGluZyBwaGFzZSBpbiBQeXRob24gMy40LiBJZiB0aGUgb3V0cHV0IGNoYW5nZXMgaW4KKyAgICAgICAgIyBmdXR1cmUgcGlwIHZlcnNpb25zLCB0aGlzIHRlc3QgY2FuIGxpa2VseSBiZSByZWxheGVkIGZ1cnRoZXIuCisgICAgICAgIG91dCA9IG91dC5kZWNvZGUoImxhdGluLTEiKSAjIEZvcmNlIHRvIHRleHQsIHByZXZlbnQgZGVjb2RpbmcgZXJyb3JzCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oIlN1Y2Nlc3NmdWxseSB1bmluc3RhbGxlZCBwaXAiLCBvdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oIlN1Y2Nlc3NmdWxseSB1bmluc3RhbGxlZCBzZXR1cHRvb2xzIiwgb3V0KQorICAgICAgICAjIENoZWNrIHBpcCBpcyBub3cgZ29uZSBmcm9tIHRoZSB2aXJ0dWFsIGVudmlyb25tZW50CisgICAgICAgIHNlbGYuYXNzZXJ0X3BpcF9ub3RfaW5zdGFsbGVkKCkKKworCiBkZWYgdGVzdF9tYWluKCk6Ci0gICAgcnVuX3VuaXR0ZXN0KEJhc2ljVGVzdCkKKyAgICBydW5fdW5pdHRlc3QoQmFzaWNUZXN0LCBFbnN1cmVQaXBUZXN0KQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3dhaXQzLnB5IGIvTGliL3Rlc3QvdGVzdF93YWl0My5weQppbmRleCBiZDA2YzhkLi5mNmEwNjVkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3dhaXQzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfd2FpdDMucHkKQEAgLTcsMTUgKzcsMTEgQEAKIGZyb20gdGVzdC5mb3JrX3dhaXQgaW1wb3J0IEZvcmtXYWl0CiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCByZWFwX2NoaWxkcmVuCiAKLXRyeToKLSAgICBvcy5mb3JrCi1leGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIm9zLmZvcmsgbm90IGRlZmluZWQgLS0gc2tpcHBpbmcgdGVzdF93YWl0MyIpCitpZiBub3QgaGFzYXR0cihvcywgJ2ZvcmsnKToKKyAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgib3MuZm9yayBub3QgZGVmaW5lZCIpCiAKLXRyeToKLSAgICBvcy53YWl0MwotZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJvcy53YWl0MyBub3QgZGVmaW5lZCAtLSBza2lwcGluZyB0ZXN0X3dhaXQzIikKK2lmIG5vdCBoYXNhdHRyKG9zLCAnd2FpdDMnKToKKyAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgib3Mud2FpdDMgbm90IGRlZmluZWQiKQogCiBjbGFzcyBXYWl0M1Rlc3QoRm9ya1dhaXQpOgogICAgIGRlZiB3YWl0X2ltcGwoc2VsZiwgY3BpZCk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3dhcm5pbmdzLnB5IGIvTGliL3Rlc3QvdGVzdF93YXJuaW5ncy5weQppbmRleCA2OGJhYzM2Li5iNTE5ZjBhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3dhcm5pbmdzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfd2FybmluZ3MucHkKQEAgLTQ0LDYgKzQ0LDcgQEAKICAgICAiIiJCYXNpYyBib29ra2VlcGluZyByZXF1aXJlZCBmb3IgdGVzdGluZy4iIiIKIAogICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5vbGRfdW5pdHRlc3RfbW9kdWxlID0gdW5pdHRlc3QuY2FzZS53YXJuaW5ncwogICAgICAgICAjIFRoZSBfX3dhcm5pbmdyZWdpc3RyeV9fIG5lZWRzIHRvIGJlIGluIGEgcHJpc3RpbmUgc3RhdGUgZm9yIHRlc3RzCiAgICAgICAgICMgdG8gd29yayBwcm9wZXJseS4KICAgICAgICAgaWYgJ19fd2FybmluZ3JlZ2lzdHJ5X18nIGluIGdsb2JhbHMoKToKQEAgLTU1LDEyICs1NiwzNiBAQAogICAgICAgICAjIFRoZSAnd2FybmluZ3MnIG1vZHVsZSBtdXN0IGJlIGV4cGxpY2l0bHkgc2V0IHNvIHRoYXQgdGhlIHByb3BlcgogICAgICAgICAjIGludGVyYWN0aW9uIGJldHdlZW4gX3dhcm5pbmdzIGFuZCAnd2FybmluZ3MnIGNhbiBiZSBjb250cm9sbGVkLgogICAgICAgICBzeXMubW9kdWxlc1snd2FybmluZ3MnXSA9IHNlbGYubW9kdWxlCisgICAgICAgICMgRW5zdXJlIHRoYXQgdW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0V2FybnMoKSB1c2VzIHRoZSBzYW1lIHdhcm5pbmdzCisgICAgICAgICMgbW9kdWxlIHRoYW4gd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKS4gT3RoZXJ3aXNlLAorICAgICAgICAjIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCkgd2lsbCBiZSB1bmFibGUgdG8gcmVtb3ZlIHRoZSBhZGRlZCBmaWx0ZXIuCisgICAgICAgIHVuaXR0ZXN0LmNhc2Uud2FybmluZ3MgPSBzZWxmLm1vZHVsZQogICAgICAgICBzdXBlcihCYXNlVGVzdCwgc2VsZikuc2V0VXAoKQogCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgogICAgICAgICBzeXMubW9kdWxlc1snd2FybmluZ3MnXSA9IG9yaWdpbmFsX3dhcm5pbmdzCisgICAgICAgIHVuaXR0ZXN0LmNhc2Uud2FybmluZ3MgPSBzZWxmLm9sZF91bml0dGVzdF9tb2R1bGUKICAgICAgICAgc3VwZXIoQmFzZVRlc3QsIHNlbGYpLnRlYXJEb3duKCkKIAorY2xhc3MgUHVibGljQVBJVGVzdHMoQmFzZVRlc3QpOgorCisgICAgIiIiRW5zdXJlcyB0aGF0IHRoZSBjb3JyZWN0IHZhbHVlcyBhcmUgZXhwb3NlZCBpbiB0aGUKKyAgICBwdWJsaWMgQVBJLgorICAgICIiIgorCisgICAgZGVmIHRlc3RfbW9kdWxlX2FsbF9hdHRyaWJ1dGUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKHNlbGYubW9kdWxlLCAnX19hbGxfXycpKQorICAgICAgICB0YXJnZXRfYXBpID0gWyJ3YXJuIiwgIndhcm5fZXhwbGljaXQiLCAic2hvd3dhcm5pbmciLAorICAgICAgICAgICAgICAgICAgICAgICJmb3JtYXR3YXJuaW5nIiwgImZpbHRlcndhcm5pbmdzIiwgInNpbXBsZWZpbHRlciIsCisgICAgICAgICAgICAgICAgICAgICAgInJlc2V0d2FybmluZ3MiLCAiY2F0Y2hfd2FybmluZ3MiXQorICAgICAgICBzZWxmLmFzc2VydFNldEVxdWFsKHNldChzZWxmLm1vZHVsZS5fX2FsbF9fKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQodGFyZ2V0X2FwaSkpCisKK2NsYXNzIENQdWJsaWNBUElUZXN0cyhQdWJsaWNBUElUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIG1vZHVsZSA9IGNfd2FybmluZ3MKKworY2xhc3MgUHlQdWJsaWNBUElUZXN0cyhQdWJsaWNBUElUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIG1vZHVsZSA9IHB5X3dhcm5pbmdzCiAKIGNsYXNzIEZpbHRlclRlc3RzKEJhc2VUZXN0KToKIApAQCAtNzMsNiArOTgsMTYgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVzZXJXYXJuaW5nLCBzZWxmLm1vZHVsZS53YXJuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRmlsdGVyVGVzdHMudGVzdF9lcnJvciIpCiAKKyAgICBkZWYgdGVzdF9lcnJvcl9hZnRlcl9kZWZhdWx0KHNlbGYpOgorICAgICAgICB3aXRoIG9yaWdpbmFsX3dhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKG1vZHVsZT1zZWxmLm1vZHVsZSkgYXMgdzoKKyAgICAgICAgICAgIHNlbGYubW9kdWxlLnJlc2V0d2FybmluZ3MoKQorICAgICAgICAgICAgbWVzc2FnZSA9ICJGaWx0ZXJUZXN0cy50ZXN0X2lnbm9yZV9hZnRlcl9kZWZhdWx0IgorICAgICAgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgICAgICBzZWxmLm1vZHVsZS53YXJuKG1lc3NhZ2UsIFVzZXJXYXJuaW5nKQorICAgICAgICAgICAgZigpCisgICAgICAgICAgICBzZWxmLm1vZHVsZS5maWx0ZXJ3YXJuaW5ncygiZXJyb3IiLCBjYXRlZ29yeT1Vc2VyV2FybmluZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVzZXJXYXJuaW5nLCBmKQorCiAgICAgZGVmIHRlc3RfaWdub3JlKHNlbGYpOgogICAgICAgICB3aXRoIG9yaWdpbmFsX3dhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKHJlY29yZD1UcnVlLAogICAgICAgICAgICAgICAgIG1vZHVsZT1zZWxmLm1vZHVsZSkgYXMgdzoKQEAgLTgxLDYgKzExNiwxOSBAQAogICAgICAgICAgICAgc2VsZi5tb2R1bGUud2FybigiRmlsdGVyVGVzdHMudGVzdF9pZ25vcmUiLCBVc2VyV2FybmluZykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHcpLCAwKQogCisgICAgZGVmIHRlc3RfaWdub3JlX2FmdGVyX2RlZmF1bHQoc2VsZik6CisgICAgICAgIHdpdGggb3JpZ2luYWxfd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MocmVjb3JkPVRydWUsCisgICAgICAgICAgICAgICAgbW9kdWxlPXNlbGYubW9kdWxlKSBhcyB3OgorICAgICAgICAgICAgc2VsZi5tb2R1bGUucmVzZXR3YXJuaW5ncygpCisgICAgICAgICAgICBtZXNzYWdlID0gIkZpbHRlclRlc3RzLnRlc3RfaWdub3JlX2FmdGVyX2RlZmF1bHQiCisgICAgICAgICAgICBkZWYgZigpOgorICAgICAgICAgICAgICAgIHNlbGYubW9kdWxlLndhcm4obWVzc2FnZSwgVXNlcldhcm5pbmcpCisgICAgICAgICAgICBmKCkKKyAgICAgICAgICAgIHNlbGYubW9kdWxlLmZpbHRlcndhcm5pbmdzKCJpZ25vcmUiLCBjYXRlZ29yeT1Vc2VyV2FybmluZykKKyAgICAgICAgICAgIGYoKQorICAgICAgICAgICAgZigpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih3KSwgMSkKKwogICAgIGRlZiB0ZXN0X2Fsd2F5cyhzZWxmKToKICAgICAgICAgd2l0aCBvcmlnaW5hbF93YXJuaW5ncy5jYXRjaF93YXJuaW5ncyhyZWNvcmQ9VHJ1ZSwKICAgICAgICAgICAgICAgICBtb2R1bGU9c2VsZi5tb2R1bGUpIGFzIHc6CkBAIC05Miw2ICsxNDAsMjYgQEAKICAgICAgICAgICAgIHNlbGYubW9kdWxlLndhcm4obWVzc2FnZSwgVXNlcldhcm5pbmcpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUod1stMV0ubWVzc2FnZSwgbWVzc2FnZSkKIAorICAgIGRlZiB0ZXN0X2Fsd2F5c19hZnRlcl9kZWZhdWx0KHNlbGYpOgorICAgICAgICB3aXRoIG9yaWdpbmFsX3dhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKHJlY29yZD1UcnVlLAorICAgICAgICAgICAgICAgIG1vZHVsZT1zZWxmLm1vZHVsZSkgYXMgdzoKKyAgICAgICAgICAgIHNlbGYubW9kdWxlLnJlc2V0d2FybmluZ3MoKQorICAgICAgICAgICAgbWVzc2FnZSA9ICJGaWx0ZXJUZXN0cy50ZXN0X2Fsd2F5c19hZnRlcl9pZ25vcmUiCisgICAgICAgICAgICBkZWYgZigpOgorICAgICAgICAgICAgICAgIHNlbGYubW9kdWxlLndhcm4obWVzc2FnZSwgVXNlcldhcm5pbmcpCisgICAgICAgICAgICBmKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHcpLCAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3Wy0xXS5tZXNzYWdlLmFyZ3NbMF0sIG1lc3NhZ2UpCisgICAgICAgICAgICBmKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHcpLCAxKQorICAgICAgICAgICAgc2VsZi5tb2R1bGUuZmlsdGVyd2FybmluZ3MoImFsd2F5cyIsIGNhdGVnb3J5PVVzZXJXYXJuaW5nKQorICAgICAgICAgICAgZigpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih3KSwgMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod1stMV0ubWVzc2FnZS5hcmdzWzBdLCBtZXNzYWdlKQorICAgICAgICAgICAgZigpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih3KSwgMykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod1stMV0ubWVzc2FnZS5hcmdzWzBdLCBtZXNzYWdlKQorCiAgICAgZGVmIHRlc3RfZGVmYXVsdChzZWxmKToKICAgICAgICAgd2l0aCBvcmlnaW5hbF93YXJuaW5ncy5jYXRjaF93YXJuaW5ncyhyZWNvcmQ9VHJ1ZSwKICAgICAgICAgICAgICAgICBtb2R1bGU9c2VsZi5tb2R1bGUpIGFzIHc6CkBAIC0zNDEsNiArNDA5LDE5IEBACiAgICAgICAgICAgICB3YXJuaW5nX3Rlc3RzLl9fbmFtZV9fID0gbW9kdWxlX25hbWUKICAgICAgICAgICAgIHN5cy5hcmd2ID0gYXJndgogCisgICAgZGVmIHRlc3Rfd2Fybl9leHBsaWNpdF9ub25fYXNjaWlfZmlsZW5hbWUoc2VsZik6CisgICAgICAgIHdpdGggb3JpZ2luYWxfd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MocmVjb3JkPVRydWUsCisgICAgICAgICAgICAgICAgbW9kdWxlPXNlbGYubW9kdWxlKSBhcyB3OgorICAgICAgICAgICAgc2VsZi5tb2R1bGUucmVzZXR3YXJuaW5ncygpCisgICAgICAgICAgICBzZWxmLm1vZHVsZS5maWx0ZXJ3YXJuaW5ncygiYWx3YXlzIiwgY2F0ZWdvcnk9VXNlcldhcm5pbmcpCisgICAgICAgICAgICBmb3IgZmlsZW5hbWUgaW4gKCJub25hc2NpaVx4ZTlcdTIwYWMiLCAic3Vycm9nYXRlXHVkYzgwIik6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBvcy5mc2VuY29kZShmaWxlbmFtZSkKKyAgICAgICAgICAgICAgICBleGNlcHQgVW5pY29kZUVuY29kZUVycm9yOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIHNlbGYubW9kdWxlLndhcm5fZXhwbGljaXQoInRleHQiLCBVc2VyV2FybmluZywgZmlsZW5hbWUsIDEpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3Wy0xXS5maWxlbmFtZSwgZmlsZW5hbWUpCisKICAgICBkZWYgdGVzdF93YXJuX2V4cGxpY2l0X3R5cGVfZXJyb3JzKHNlbGYpOgogICAgICAgICAjIHdhcm5fZXhwbGljaXQoKSBzaG91bGQgZXJyb3Igb3V0IGdyYWNlZnVsbHkgaWYgaXQgaXMgZ2l2ZW4gb2JqZWN0cwogICAgICAgICAjIG9mIHRoZSB3cm9uZyB0eXBlcy4KQEAgLTQ4Niw3ICs1NjcsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RyeT1yZWdpc3RyeSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdbLTFdLm1lc3NhZ2UsIG1lc3NhZ2UpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odyksIDEpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVnaXN0cnkpLCAxKQorICAgICAgICAgICAgICAgICMgT25lIGFjdHVhbCByZWdpc3RyeSBrZXkgcGx1cyB0aGUgInZlcnNpb24iIGtleQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlZ2lzdHJ5KSwgMikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKCJ2ZXJzaW9uIiwgcmVnaXN0cnkpCiAgICAgICAgICAgICAgICAgZGVsIHdbOl0KICAgICAgICAgICAgICAgICAjIFRlc3QgcmVtb3ZhbC4KICAgICAgICAgICAgICAgICBkZWwgc2VsZi5tb2R1bGUuZGVmYXVsdGFjdGlvbgpAQCAtNDk2LDcgKzU3OSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdHJ5PXJlZ2lzdHJ5KQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod1stMV0ubWVzc2FnZSwgbWVzc2FnZSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih3KSwgMSkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZWdpc3RyeSksIDEpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVnaXN0cnkpLCAyKQogICAgICAgICAgICAgICAgIGRlbCB3WzpdCiAgICAgICAgICAgICAgICAgIyBUZXN0IHNldHRpbmcuCiAgICAgICAgICAgICAgICAgc2VsZi5tb2R1bGUuZGVmYXVsdGFjdGlvbiA9ICJpZ25vcmUiCkBAIC01NjYsNiArNjQ5LDE1IEBACiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBnbG9iYWxzX2RpY3RbJ19fZmlsZV9fJ10gPSBvbGRmaWxlCiAKKyAgICBkZWYgdGVzdF9zdGRlcnJfbm9uZShzZWxmKToKKyAgICAgICAgcmMsIHN0ZG91dCwgc3RkZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygiLWMiLAorICAgICAgICAgICAgImltcG9ydCBzeXM7IHN5cy5zdGRlcnIgPSBOb25lOyAiCisgICAgICAgICAgICAiaW1wb3J0IHdhcm5pbmdzOyB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2Fsd2F5cycpOyAiCisgICAgICAgICAgICAid2FybmluZ3Mud2FybignV2FybmluZyEnKSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LCBiJycpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oYidXYXJuaW5nIScsIHN0ZGVycikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihiJ0Vycm9yJywgc3RkZXJyKQorCiAKIGNsYXNzIFdhcm5pbmdzRGlzcGxheVRlc3RzKEJhc2VUZXN0KToKIApAQCAtNzc4LDYgKzg3MCwyNSBAQAogICAgICAgICAgICAgIyBVc2UgLVcgdG8gbG9hZCB3YXJuaW5ncyBtb2R1bGUgYXQgc3RhcnR1cAogICAgICAgICAgICAgYXNzZXJ0X3B5dGhvbl9vaygnLWMnLCAncGFzcycsICctVycsICdhbHdheXMnLCBQWVRIT05QQVRIPWN3ZCkKIAorY2xhc3MgRmluYWxpemF0aW9uVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfZmluYWxpemF0aW9uKHNlbGYpOgorICAgICAgICAjIElzc3VlICMxOTQyMTogd2FybmluZ3Mud2FybigpIHNob3VsZCBub3QgY3Jhc2gKKyAgICAgICAgIyBkdXJpbmcgUHl0aG9uIGZpbmFsaXphdGlvbgorICAgICAgICBjb2RlID0gIiIiCitpbXBvcnQgd2FybmluZ3MKK3dhcm4gPSB3YXJuaW5ncy53YXJuCisKK2NsYXNzIEE6CisgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgIHdhcm4oInRlc3QiKQorCithPUEoKQorICAgICAgICAiIiIKKyAgICAgICAgcmMsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygiLWMiLCBjb2RlKQorICAgICAgICAjIG5vdGU6ICJfX21haW5fXyIgZmlsZW5hbWUgaXMgbm90IGNvcnJlY3QsIGl0IHNob3VsZCBiZSB0aGUgbmFtZQorICAgICAgICAjIG9mIHRoZSBzY3JpcHQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIsIGInX19tYWluX186NzogVXNlcldhcm5pbmc6IHRlc3QnKQorCiAKIGRlZiBzZXRVcE1vZHVsZSgpOgogICAgIHB5X3dhcm5pbmdzLm9uY2VyZWdpc3RyeS5jbGVhcigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3dhdmUucHkgYi9MaWIvdGVzdC90ZXN0X3dhdmUucHkKaW5kZXggZjY0MjAxZi4uM2VmZjc3MyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF93YXZlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfd2F2ZS5weQpAQCAtMSw2ICsxLDcgQEAKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBURVNURk4KIGltcG9ydCB1bml0dGVzdAogZnJvbSB0ZXN0IGltcG9ydCBhdWRpb3Rlc3RzCitmcm9tIGF1ZGlvb3AgaW1wb3J0IGJ5dGVzd2FwCiBpbXBvcnQgc3lzCiBpbXBvcnQgd2F2ZQogCkBAIC04LDkgKzksNiBAQAogY2xhc3MgV2F2ZVRlc3QoYXVkaW90ZXN0cy5BdWRpb1dyaXRlVGVzdHMsCiAgICAgICAgICAgICAgICBhdWRpb3Rlc3RzLkF1ZGlvVGVzdHNXaXRoU291cmNlRmlsZSk6CiAgICAgbW9kdWxlID0gd2F2ZQotICAgIHRlc3RfdW5zZWVrYWJsZV93cml0ZSA9IE5vbmUKLSAgICB0ZXN0X3Vuc2Vla2FibGVfb3ZlcmZsb3dlZF93cml0ZSA9IE5vbmUKLSAgICB0ZXN0X3Vuc2Vla2FibGVfaW5jb21wbGV0ZWRfd3JpdGUgPSBOb25lCiAKIAogY2xhc3MgV2F2ZVBDTThUZXN0KFdhdmVUZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC00OCwxMyArNDYsNyBAQAogICAgICAgRTRCNTBDRUIgNjM0NDBBNUEgMDhDQTBBMUYgMkJCQTBCMEIgNTE0NjBFNDcgOEJDQjExM0MgQjZGNTBFRUEgNDQxNTBBNTkgXAogICAgICAgIiIiKQogICAgIGlmIHN5cy5ieXRlb3JkZXIgIT0gJ2JpZyc6Ci0gICAgICAgIGZyYW1lcyA9IGF1ZGlvdGVzdHMuYnl0ZXN3YXAyKGZyYW1lcykKLQotICAgIGlmIHN5cy5ieXRlb3JkZXIgPT0gJ2JpZyc6Ci0gICAgICAgIEB1bml0dGVzdC5leHBlY3RlZEZhaWx1cmUKLSAgICAgICAgZGVmIHRlc3RfdW5zZWVrYWJsZV9pbmNvbXBsZXRlZF93cml0ZShzZWxmKToKLSAgICAgICAgICAgIHN1cGVyKCkudGVzdF91bnNlZWthYmxlX2luY29tcGxldGVkX3dyaXRlKCkKLQorICAgICAgICBmcmFtZXMgPSBieXRlc3dhcChmcmFtZXMsIDIpCiAKIAogY2xhc3MgV2F2ZVBDTTI0VGVzdChXYXZlVGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtODEsNyArNzMsNyBAQAogICAgICAgNTE0ODZGMEU0NEUxIDhCQ0M2NDExM0IwNSBCNkY0RUMwRUVCMzYgNDQxMzE3MEE1QjQ4IFwKICAgICAgICIiIikKICAgICBpZiBzeXMuYnl0ZW9yZGVyICE9ICdiaWcnOgotICAgICAgICBmcmFtZXMgPSBhdWRpb3Rlc3RzLmJ5dGVzd2FwMyhmcmFtZXMpCisgICAgICAgIGZyYW1lcyA9IGJ5dGVzd2FwKGZyYW1lcywgMykKIAogCiBjbGFzcyBXYXZlUENNMzJUZXN0KFdhdmVUZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC0xMDgsMTIgKzEwMCw3IEBACiAgICAgICA1MTQ4NkY4MDBFNDRFMTkwIDhCQ0M2NDgwMTEzQjA1ODAgQjZGNEVDMDAwRUVCMzYzMCA0NDEzMTc4MDBBNUI0OEEwIFwKICAgICAgICIiIikKICAgICBpZiBzeXMuYnl0ZW9yZGVyICE9ICdiaWcnOgotICAgICAgICBmcmFtZXMgPSBhdWRpb3Rlc3RzLmJ5dGVzd2FwNChmcmFtZXMpCi0KLSAgICBpZiBzeXMuYnl0ZW9yZGVyID09ICdiaWcnOgotICAgICAgICBAdW5pdHRlc3QuZXhwZWN0ZWRGYWlsdXJlCi0gICAgICAgIGRlZiB0ZXN0X3Vuc2Vla2FibGVfaW5jb21wbGV0ZWRfd3JpdGUoc2VsZik6Ci0gICAgICAgICAgICBzdXBlcigpLnRlc3RfdW5zZWVrYWJsZV9pbmNvbXBsZXRlZF93cml0ZSgpCisgICAgICAgIGZyYW1lcyA9IGJ5dGVzd2FwKGZyYW1lcywgNCkKIAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF93ZWFrcmVmLnB5IGIvTGliL3Rlc3QvdGVzdF93ZWFrcmVmLnB5CmluZGV4IDg1YWI3MTcuLjQzMTNjMWQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfd2Vha3JlZi5weQorKysgYi9MaWIvdGVzdC90ZXN0X3dlYWtyZWYucHkKQEAgLTcsMTEgKzcsMTUgQEAKIGltcG9ydCBjb250ZXh0bGliCiBpbXBvcnQgY29weQogCi1mcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydCwgc2NyaXB0X2hlbHBlcgogCiAjIFVzZWQgaW4gUmVmZXJlbmNlc1Rlc3RDYXNlLnRlc3RfcmVmX2NyZWF0ZWRfZHVyaW5nX2RlbCgpIC4KIHJlZl9mcm9tX2RlbCA9IE5vbmUKIAorIyBVc2VkIGJ5IEZpbmFsaXplVGVzdENhc2UgYXMgYSBnbG9iYWwgdGhhdCBtYXkgYmUgcmVwbGFjZWQgYnkgTm9uZQorIyB3aGVuIHRoZSBpbnRlcnByZXRlciBzaHV0cyBkb3duLgorX2dsb2JhbF92YXIgPSAnZm9vYmFyJworCiBjbGFzcyBDOgogICAgIGRlZiBtZXRob2Qoc2VsZik6CiAgICAgICAgIHBhc3MKQEAgLTQ3LDYgKzUxLDExIEBACiAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAogICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKICAgICAgICAgcmV0dXJuIGhhc2goc2VsZi5hcmcpCisgICAgZGVmIHNvbWVfbWV0aG9kKHNlbGYpOgorICAgICAgICByZXR1cm4gNAorICAgIGRlZiBvdGhlcl9tZXRob2Qoc2VsZik6CisgICAgICAgIHJldHVybiA1CisKIAogY2xhc3MgUmVmQ3ljbGU6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgpAQCAtNzk0LDYgKzgwMywzMCBAQAogICAgICAgICBkZWwgcm9vdAogICAgICAgICBnYy5jb2xsZWN0KCkKIAorICAgIGRlZiB0ZXN0X2NhbGxiYWNrX2F0dHJpYnV0ZShzZWxmKToKKyAgICAgICAgeCA9IE9iamVjdCgxKQorICAgICAgICBjYWxsYmFjayA9IGxhbWJkYSByZWY6IE5vbmUKKyAgICAgICAgcmVmMSA9IHdlYWtyZWYucmVmKHgsIGNhbGxiYWNrKQorICAgICAgICBzZWxmLmFzc2VydElzKHJlZjEuX19jYWxsYmFja19fLCBjYWxsYmFjaykKKworICAgICAgICByZWYyID0gd2Vha3JlZi5yZWYoeCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmVmMi5fX2NhbGxiYWNrX18pCisKKyAgICBkZWYgdGVzdF9jYWxsYmFja19hdHRyaWJ1dGVfYWZ0ZXJfZGVsZXRpb24oc2VsZik6CisgICAgICAgIHggPSBPYmplY3QoMSkKKyAgICAgICAgcmVmID0gd2Vha3JlZi5yZWYoeCwgc2VsZi5jYWxsYmFjaykKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocmVmLl9fY2FsbGJhY2tfXykKKyAgICAgICAgZGVsIHgKKyAgICAgICAgc3VwcG9ydC5nY19jb2xsZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmVmLl9fY2FsbGJhY2tfXykKKworICAgIGRlZiB0ZXN0X3NldF9jYWxsYmFja19hdHRyaWJ1dGUoc2VsZik6CisgICAgICAgIHggPSBPYmplY3QoMSkKKyAgICAgICAgY2FsbGJhY2sgPSBsYW1iZGEgcmVmOiBOb25lCisgICAgICAgIHJlZjEgPSB3ZWFrcmVmLnJlZih4LCBjYWxsYmFjaykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvcik6CisgICAgICAgICAgICByZWYxLl9fY2FsbGJhY2tfXyA9IGxhbWJkYSByZWY6IE5vbmUKKwogCiBjbGFzcyBTdWJjbGFzc2FibGVXZWFrcmVmVGVzdENhc2UoVGVzdEJhc2UpOgogCkBAIC04OTgsNiArOTMxLDE0MCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY2JjYWxsZWQsIDApCiAKIAorY2xhc3MgV2Vha01ldGhvZFRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBfc3ViY2xhc3Moc2VsZik6CisgICAgICAgICIiIlJldHVybiBhbiBPYmplY3Qgc3ViY2xhc3Mgb3ZlcnJpZGluZyBgc29tZV9tZXRob2RgLiIiIgorICAgICAgICBjbGFzcyBDKE9iamVjdCk6CisgICAgICAgICAgICBkZWYgc29tZV9tZXRob2Qoc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIDYKKyAgICAgICAgcmV0dXJuIEMKKworICAgIGRlZiB0ZXN0X2FsaXZlKHNlbGYpOgorICAgICAgICBvID0gT2JqZWN0KDEpCisgICAgICAgIHIgPSB3ZWFrcmVmLldlYWtNZXRob2Qoby5zb21lX21ldGhvZCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHIsIHdlYWtyZWYuUmVmZXJlbmNlVHlwZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHIoKSwgdHlwZShvLnNvbWVfbWV0aG9kKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhyKCkuX19zZWxmX18sIG8pCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocigpLl9fZnVuY19fLCBvLnNvbWVfbWV0aG9kLl9fZnVuY19fKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHIoKSgpLCA0KQorCisgICAgZGVmIHRlc3Rfb2JqZWN0X2RlYWQoc2VsZik6CisgICAgICAgIG8gPSBPYmplY3QoMSkKKyAgICAgICAgciA9IHdlYWtyZWYuV2Vha01ldGhvZChvLnNvbWVfbWV0aG9kKQorICAgICAgICBkZWwgbworICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhyKCksIE5vbmUpCisKKyAgICBkZWYgdGVzdF9tZXRob2RfZGVhZChzZWxmKToKKyAgICAgICAgQyA9IHNlbGYuX3N1YmNsYXNzKCkKKyAgICAgICAgbyA9IEMoMSkKKyAgICAgICAgciA9IHdlYWtyZWYuV2Vha01ldGhvZChvLnNvbWVfbWV0aG9kKQorICAgICAgICBkZWwgQy5zb21lX21ldGhvZAorICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhyKCksIE5vbmUpCisKKyAgICBkZWYgdGVzdF9jYWxsYmFja193aGVuX29iamVjdF9kZWFkKHNlbGYpOgorICAgICAgICAjIFRlc3QgY2FsbGJhY2sgYmVoYXZpb3VyIHdoZW4gb2JqZWN0IGRpZXMgZmlyc3QuCisgICAgICAgIEMgPSBzZWxmLl9zdWJjbGFzcygpCisgICAgICAgIGNhbGxzID0gW10KKyAgICAgICAgZGVmIGNiKGFyZyk6CisgICAgICAgICAgICBjYWxscy5hcHBlbmQoYXJnKQorICAgICAgICBvID0gQygxKQorICAgICAgICByID0gd2Vha3JlZi5XZWFrTWV0aG9kKG8uc29tZV9tZXRob2QsIGNiKQorICAgICAgICBkZWwgbworICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYWxscywgW3JdKQorICAgICAgICAjIENhbGxiYWNrIGlzIG9ubHkgY2FsbGVkIG9uY2UuCisgICAgICAgIEMuc29tZV9tZXRob2QgPSBPYmplY3Quc29tZV9tZXRob2QKKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FsbHMsIFtyXSkKKworICAgIGRlZiB0ZXN0X2NhbGxiYWNrX3doZW5fbWV0aG9kX2RlYWQoc2VsZik6CisgICAgICAgICMgVGVzdCBjYWxsYmFjayBiZWhhdmlvdXIgd2hlbiBtZXRob2QgZGllcyBmaXJzdC4KKyAgICAgICAgQyA9IHNlbGYuX3N1YmNsYXNzKCkKKyAgICAgICAgY2FsbHMgPSBbXQorICAgICAgICBkZWYgY2IoYXJnKToKKyAgICAgICAgICAgIGNhbGxzLmFwcGVuZChhcmcpCisgICAgICAgIG8gPSBDKDEpCisgICAgICAgIHIgPSB3ZWFrcmVmLldlYWtNZXRob2Qoby5zb21lX21ldGhvZCwgY2IpCisgICAgICAgIGRlbCBDLnNvbWVfbWV0aG9kCisgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhbGxzLCBbcl0pCisgICAgICAgICMgQ2FsbGJhY2sgaXMgb25seSBjYWxsZWQgb25jZS4KKyAgICAgICAgZGVsIG8KKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FsbHMsIFtyXSkKKworICAgIEBzdXBwb3J0LmNweXRob25fb25seQorICAgIGRlZiB0ZXN0X25vX2N5Y2xlcyhzZWxmKToKKyAgICAgICAgIyBBIFdlYWtNZXRob2QgZG9lc24ndCBjcmVhdGUgYW55IHJlZmVyZW5jZSBjeWNsZSB0byBpdHNlbGYuCisgICAgICAgIG8gPSBPYmplY3QoMSkKKyAgICAgICAgZGVmIGNiKF8pOgorICAgICAgICAgICAgcGFzcworICAgICAgICByID0gd2Vha3JlZi5XZWFrTWV0aG9kKG8uc29tZV9tZXRob2QsIGNiKQorICAgICAgICB3ciA9IHdlYWtyZWYucmVmKHIpCisgICAgICAgIGRlbCByCisgICAgICAgIHNlbGYuYXNzZXJ0SXMod3IoKSwgTm9uZSkKKworICAgIGRlZiB0ZXN0X2VxdWFsaXR5KHNlbGYpOgorICAgICAgICBkZWYgX2VxKGEsIGIpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEgPT0gYikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYSAhPSBiKQorICAgICAgICBkZWYgX25lKGEsIGIpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEgIT0gYikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYSA9PSBiKQorICAgICAgICB4ID0gT2JqZWN0KDEpCisgICAgICAgIHkgPSBPYmplY3QoMSkKKyAgICAgICAgYSA9IHdlYWtyZWYuV2Vha01ldGhvZCh4LnNvbWVfbWV0aG9kKQorICAgICAgICBiID0gd2Vha3JlZi5XZWFrTWV0aG9kKHkuc29tZV9tZXRob2QpCisgICAgICAgIGMgPSB3ZWFrcmVmLldlYWtNZXRob2QoeC5vdGhlcl9tZXRob2QpCisgICAgICAgIGQgPSB3ZWFrcmVmLldlYWtNZXRob2QoeS5vdGhlcl9tZXRob2QpCisgICAgICAgICMgT2JqZWN0cyBlcXVhbCwgc2FtZSBtZXRob2QKKyAgICAgICAgX2VxKGEsIGIpCisgICAgICAgIF9lcShjLCBkKQorICAgICAgICAjIE9iamVjdHMgZXF1YWwsIGRpZmZlcmVudCBtZXRob2QKKyAgICAgICAgX25lKGEsIGMpCisgICAgICAgIF9uZShhLCBkKQorICAgICAgICBfbmUoYiwgYykKKyAgICAgICAgX25lKGIsIGQpCisgICAgICAgICMgT2JqZWN0cyB1bmVxdWFsLCBzYW1lIG9yIGRpZmZlcmVudCBtZXRob2QKKyAgICAgICAgeiA9IE9iamVjdCgyKQorICAgICAgICBlID0gd2Vha3JlZi5XZWFrTWV0aG9kKHouc29tZV9tZXRob2QpCisgICAgICAgIGYgPSB3ZWFrcmVmLldlYWtNZXRob2Qoei5vdGhlcl9tZXRob2QpCisgICAgICAgIF9uZShhLCBlKQorICAgICAgICBfbmUoYSwgZikKKyAgICAgICAgX25lKGIsIGUpCisgICAgICAgIF9uZShiLCBmKQorICAgICAgICBkZWwgeCwgeSwgegorICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgIyBEZWFkIFdlYWtNZXRob2RzIGNvbXBhcmUgYnkgaWRlbnRpdHkKKyAgICAgICAgcmVmcyA9IGEsIGIsIGMsIGQsIGUsIGYKKyAgICAgICAgZm9yIHEgaW4gcmVmczoKKyAgICAgICAgICAgIGZvciByIGluIHJlZnM6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChxID09IHIsIHEgaXMgcikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHEgIT0gciwgcSBpcyBub3QgcikKKworICAgIGRlZiB0ZXN0X2hhc2hpbmcoc2VsZik6CisgICAgICAgICMgQWxpdmUgV2Vha01ldGhvZHMgYXJlIGhhc2hhYmxlIGlmIHRoZSB1bmRlcmx5aW5nIG9iamVjdCBpcworICAgICAgICAjIGhhc2hhYmxlLgorICAgICAgICB4ID0gT2JqZWN0KDEpCisgICAgICAgIHkgPSBPYmplY3QoMSkKKyAgICAgICAgYSA9IHdlYWtyZWYuV2Vha01ldGhvZCh4LnNvbWVfbWV0aG9kKQorICAgICAgICBiID0gd2Vha3JlZi5XZWFrTWV0aG9kKHkuc29tZV9tZXRob2QpCisgICAgICAgIGMgPSB3ZWFrcmVmLldlYWtNZXRob2QoeS5vdGhlcl9tZXRob2QpCisgICAgICAgICMgU2luY2UgV2Vha01ldGhvZCBvYmplY3RzIGFyZSBlcXVhbCwgdGhlIGhhc2hlcyBzaG91bGQgYmUgZXF1YWwuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaChhKSwgaGFzaChiKSkKKyAgICAgICAgaGEgPSBoYXNoKGEpCisgICAgICAgICMgRGVhZCBXZWFrTWV0aG9kcyByZXRhaW4gdGhlaXIgb2xkIGhhc2ggdmFsdWUKKyAgICAgICAgZGVsIHgsIHkKKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaChhKSwgaGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaChiKSwgaGEpCisgICAgICAgICMgSWYgaXQgd2Fzbid0IGhhc2hlZCB3aGVuIGFsaXZlLCBhIGRlYWQgV2Vha01ldGhvZCBjYW5ub3QgYmUgaGFzaGVkLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGhhc2gsIGMpCisKKwogY2xhc3MgTWFwcGluZ1Rlc3RDYXNlKFRlc3RCYXNlKToKIAogICAgIENPVU5UID0gMTAKQEAgLTExMzEsNiArMTI5OCwzNiBAQAogICAgICAgICAgICAgZGljdC5jbGVhcigpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGRpY3QpLCAwKQogCisgICAgZGVmIGNoZWNrX3dlYWtfZGVsX2FuZF9sZW5fd2hpbGVfaXRlcmF0aW5nKHNlbGYsIGRpY3QsIHRlc3Rjb250ZXh0KToKKyAgICAgICAgIyBDaGVjayB0aGF0IGxlbigpIHdvcmtzIHdoZW4gYm90aCBpdGVyYXRpbmcgYW5kIHJlbW92aW5nIGtleXMKKyAgICAgICAgIyBleHBsaWNpdGx5IHRocm91Z2ggdmFyaW91cyBtZWFucyAoLnBvcCgpLCAuY2xlYXIoKS4uLiksIHdoaWxlCisgICAgICAgICMgaW1wbGljaXQgbXV0YXRpb24gaXMgZGVmZXJyZWQgYmVjYXVzZSBhbiBpdGVyYXRvciBpcyBhbGl2ZS4KKyAgICAgICAgIyAoZWFjaCBjYWxsIHRvIHRlc3Rjb250ZXh0KCkgc2hvdWxkIHNjaGVkdWxlIG9uZSBpdGVtIGZvciByZW1vdmFsCisgICAgICAgICMgIGZvciB0aGlzIHRlc3QgdG8gd29yayBwcm9wZXJseSkKKyAgICAgICAgbyA9IE9iamVjdCgxMjM0NTYpCisgICAgICAgIHdpdGggdGVzdGNvbnRleHQoKToKKyAgICAgICAgICAgIG4gPSBsZW4oZGljdCkKKyAgICAgICAgICAgIGRpY3QucG9waXRlbSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkaWN0KSwgbiAtIDEpCisgICAgICAgICAgICBkaWN0W29dID0gbworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZGljdCksIG4pCisgICAgICAgIHdpdGggdGVzdGNvbnRleHQoKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGRpY3QpLCBuIC0gMSkKKyAgICAgICAgICAgIGRpY3QucG9wKG5leHQoZGljdC5rZXlzKCkpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZGljdCksIG4gLSAyKQorICAgICAgICB3aXRoIHRlc3Rjb250ZXh0KCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkaWN0KSwgbiAtIDMpCisgICAgICAgICAgICBkZWwgZGljdFtuZXh0KGRpY3Qua2V5cygpKV0KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGRpY3QpLCBuIC0gNCkKKyAgICAgICAgd2l0aCB0ZXN0Y29udGV4dCgpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZGljdCksIG4gLSA1KQorICAgICAgICAgICAgZGljdC5wb3BpdGVtKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGRpY3QpLCBuIC0gNikKKyAgICAgICAgd2l0aCB0ZXN0Y29udGV4dCgpOgorICAgICAgICAgICAgZGljdC5jbGVhcigpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkaWN0KSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZGljdCksIDApCisKICAgICBkZWYgdGVzdF93ZWFrX2tleXNfZGVzdHJveV93aGlsZV9pdGVyYXRpbmcoc2VsZik6CiAgICAgICAgICMgSXNzdWUgIzcxMDU6IGl0ZXJhdG9ycyBzaG91bGRuJ3QgY3Jhc2ggd2hlbiBhIGtleSBpcyBpbXBsaWNpdGx5IHJlbW92ZWQKICAgICAgICAgZGljdCwgb2JqZWN0cyA9IHNlbGYubWFrZV93ZWFrX2tleWVkX2RpY3QoKQpAQCAtMTE1MCw3ICsxMzQ3LDEyIEBACiAgICAgICAgICAgICAgICAgeWllbGQgT2JqZWN0KHYpLCB2CiAgICAgICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgICAgIGl0ID0gTm9uZSAgICAgICAgICAgIyBzaG91bGQgY29tbWl0IGFsbCByZW1vdmFscworICAgICAgICAgICAgICAgIGdjLmNvbGxlY3QoKQogICAgICAgICBzZWxmLmNoZWNrX3dlYWtfZGVzdHJveV9hbmRfbXV0YXRlX3doaWxlX2l0ZXJhdGluZyhkaWN0LCB0ZXN0Y29udGV4dCkKKyAgICAgICAgIyBJc3N1ZSAjMjExNzM6IGxlbigpIGZyYWdpbGUgd2hlbiBrZXlzIGFyZSBib3RoIGltcGxpY2l0bHkgYW5kCisgICAgICAgICMgZXhwbGljaXRseSByZW1vdmVkLgorICAgICAgICBkaWN0LCBvYmplY3RzID0gc2VsZi5tYWtlX3dlYWtfa2V5ZWRfZGljdCgpCisgICAgICAgIHNlbGYuY2hlY2tfd2Vha19kZWxfYW5kX2xlbl93aGlsZV9pdGVyYXRpbmcoZGljdCwgdGVzdGNvbnRleHQpCiAKICAgICBkZWYgdGVzdF93ZWFrX3ZhbHVlc19kZXN0cm95X3doaWxlX2l0ZXJhdGluZyhzZWxmKToKICAgICAgICAgIyBJc3N1ZSAjNzEwNTogaXRlcmF0b3JzIHNob3VsZG4ndCBjcmFzaCB3aGVuIGEga2V5IGlzIGltcGxpY2l0bHkgcmVtb3ZlZApAQCAtMTE3Miw3ICsxMzc0LDEwIEBACiAgICAgICAgICAgICAgICAgeWllbGQgaywgT2JqZWN0KGspCiAgICAgICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgICAgIGl0ID0gTm9uZSAgICAgICAgICAgIyBzaG91bGQgY29tbWl0IGFsbCByZW1vdmFscworICAgICAgICAgICAgICAgIGdjLmNvbGxlY3QoKQogICAgICAgICBzZWxmLmNoZWNrX3dlYWtfZGVzdHJveV9hbmRfbXV0YXRlX3doaWxlX2l0ZXJhdGluZyhkaWN0LCB0ZXN0Y29udGV4dCkKKyAgICAgICAgZGljdCwgb2JqZWN0cyA9IHNlbGYubWFrZV93ZWFrX3ZhbHVlZF9kaWN0KCkKKyAgICAgICAgc2VsZi5jaGVja193ZWFrX2RlbF9hbmRfbGVuX3doaWxlX2l0ZXJhdGluZyhkaWN0LCB0ZXN0Y29udGV4dCkKIAogICAgIGRlZiB0ZXN0X21ha2Vfd2Vha19rZXllZF9kaWN0X2Zyb21fZGljdChzZWxmKToKICAgICAgICAgbyA9IE9iamVjdCgzKQpAQCAtMTIwMyw2ICsxNDA4LDE4IEBACiAgICAgICAgIGRpY3QyID0gd2Vha3JlZi5XZWFrVmFsdWVEaWN0aW9uYXJ5KGRpY3QpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGljdFszNjRdLCBvKQogCisgICAgZGVmIHRlc3RfbWFrZV93ZWFrX3ZhbHVlZF9kaWN0X21pc2Moc2VsZik6CisgICAgICAgICMgZXJyb3JzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgd2Vha3JlZi5XZWFrVmFsdWVEaWN0aW9uYXJ5Ll9faW5pdF9fKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHdlYWtyZWYuV2Vha1ZhbHVlRGljdGlvbmFyeSwge30sIHt9KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHdlYWtyZWYuV2Vha1ZhbHVlRGljdGlvbmFyeSwgKCksICgpKQorICAgICAgICAjIHNwZWNpYWwga2V5d29yZCBhcmd1bWVudHMKKyAgICAgICAgbyA9IE9iamVjdCgzKQorICAgICAgICBmb3Iga3cgaW4gJ3NlbGYnLCAnZGljdCcsICdvdGhlcicsICdpdGVyYWJsZSc6CisgICAgICAgICAgICBkID0gd2Vha3JlZi5XZWFrVmFsdWVEaWN0aW9uYXJ5KCoqe2t3OiBvfSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChkLmtleXMoKSksIFtrd10pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRba3ddLCBvKQorCiAgICAgZGVmIG1ha2Vfd2Vha192YWx1ZWRfZGljdChzZWxmKToKICAgICAgICAgZGljdCA9IHdlYWtyZWYuV2Vha1ZhbHVlRGljdGlvbmFyeSgpCiAgICAgICAgIG9iamVjdHMgPSBsaXN0KG1hcChPYmplY3QsIHJhbmdlKHNlbGYuQ09VTlQpKSkKQEAgLTEyODMsNiArMTUwMCwxOSBAQAogICAgIGRlZiB0ZXN0X3dlYWtfdmFsdWVkX2RpY3RfdXBkYXRlKHNlbGYpOgogICAgICAgICBzZWxmLmNoZWNrX3VwZGF0ZSh3ZWFrcmVmLldlYWtWYWx1ZURpY3Rpb25hcnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHsxOiBDKCksICdhJzogQygpLCBDKCk6IEMoKX0pCisgICAgICAgICMgZXJyb3JzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgd2Vha3JlZi5XZWFrVmFsdWVEaWN0aW9uYXJ5LnVwZGF0ZSkKKyAgICAgICAgZCA9IHdlYWtyZWYuV2Vha1ZhbHVlRGljdGlvbmFyeSgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZC51cGRhdGUsIHt9LCB7fSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBkLnVwZGF0ZSwgKCksICgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoZC5rZXlzKCkpLCBbXSkKKyAgICAgICAgIyBzcGVjaWFsIGtleXdvcmQgYXJndW1lbnRzCisgICAgICAgIG8gPSBPYmplY3QoMykKKyAgICAgICAgZm9yIGt3IGluICdzZWxmJywgJ2RpY3QnLCAnb3RoZXInLCAnaXRlcmFibGUnOgorICAgICAgICAgICAgZCA9IHdlYWtyZWYuV2Vha1ZhbHVlRGljdGlvbmFyeSgpCisgICAgICAgICAgICBkLnVwZGF0ZSgqKntrdzogb30pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoZC5rZXlzKCkpLCBba3ddKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkW2t3XSwgbykKIAogICAgIGRlZiB0ZXN0X3dlYWtfa2V5ZWRfZGljdF91cGRhdGUoc2VsZik6CiAgICAgICAgIHNlbGYuY2hlY2tfdXBkYXRlKHdlYWtyZWYuV2Vha0tleURpY3Rpb25hcnksCkBAIC0xMzg1LDYgKzE2MTUsMTUxIEBACiAgICAgZGVmIF9yZWZlcmVuY2Uoc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLl9fcmVmLmNvcHkoKQogCisKK2NsYXNzIEZpbmFsaXplVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgY2xhc3MgQToKKyAgICAgICAgcGFzcworCisgICAgZGVmIF9jb2xsZWN0X2lmX25lY2Vzc2FyeShzZWxmKToKKyAgICAgICAgIyB3ZSBjcmVhdGUgbm8gcmVmLWN5Y2xlcyBzbyBpbiBDUHl0aG9uIG5vIGdjIHNob3VsZCBiZSBuZWVkZWQKKyAgICAgICAgaWYgc3lzLmltcGxlbWVudGF0aW9uLm5hbWUgIT0gJ2NweXRob24nOgorICAgICAgICAgICAgc3VwcG9ydC5nY19jb2xsZWN0KCkKKworICAgIGRlZiB0ZXN0X2ZpbmFsaXplKHNlbGYpOgorICAgICAgICBkZWYgYWRkKHgseSx6KToKKyAgICAgICAgICAgIHJlcy5hcHBlbmQoeCArIHkgKyB6KQorICAgICAgICAgICAgcmV0dXJuIHggKyB5ICsgegorCisgICAgICAgIGEgPSBzZWxmLkEoKQorCisgICAgICAgIHJlcyA9IFtdCisgICAgICAgIGYgPSB3ZWFrcmVmLmZpbmFsaXplKGEsIGFkZCwgNjcsIDQzLCB6PTg5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuYWxpdmUsIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5wZWVrKCksIChhLCBhZGQsICg2Nyw0MyksIHsneic6ODl9KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCksIDE5OSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZigpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucGVlaygpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZGV0YWNoKCksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5hbGl2ZSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCBbMTk5XSkKKworICAgICAgICByZXMgPSBbXQorICAgICAgICBmID0gd2Vha3JlZi5maW5hbGl6ZShhLCBhZGQsIDY3LCA0MywgODkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5wZWVrKCksIChhLCBhZGQsICg2Nyw0Myw4OSksIHt9KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmRldGFjaCgpLCAoYSwgYWRkLCAoNjcsNDMsODkpLCB7fSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZigpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnBlZWsoKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmRldGFjaCgpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuYWxpdmUsIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywgW10pCisKKyAgICAgICAgcmVzID0gW10KKyAgICAgICAgZiA9IHdlYWtyZWYuZmluYWxpemUoYSwgYWRkLCB4PTY3LCB5PTQzLCB6PTg5KQorICAgICAgICBkZWwgYQorICAgICAgICBzZWxmLl9jb2xsZWN0X2lmX25lY2Vzc2FyeSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZigpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnBlZWsoKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmRldGFjaCgpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuYWxpdmUsIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywgWzE5OV0pCisKKyAgICBkZWYgdGVzdF9vcmRlcihzZWxmKToKKyAgICAgICAgYSA9IHNlbGYuQSgpCisgICAgICAgIHJlcyA9IFtdCisKKyAgICAgICAgZjEgPSB3ZWFrcmVmLmZpbmFsaXplKGEsIHJlcy5hcHBlbmQsICdmMScpCisgICAgICAgIGYyID0gd2Vha3JlZi5maW5hbGl6ZShhLCByZXMuYXBwZW5kLCAnZjInKQorICAgICAgICBmMyA9IHdlYWtyZWYuZmluYWxpemUoYSwgcmVzLmFwcGVuZCwgJ2YzJykKKyAgICAgICAgZjQgPSB3ZWFrcmVmLmZpbmFsaXplKGEsIHJlcy5hcHBlbmQsICdmNCcpCisgICAgICAgIGY1ID0gd2Vha3JlZi5maW5hbGl6ZShhLCByZXMuYXBwZW5kLCAnZjUnKQorCisgICAgICAgICMgbWFrZSBzdXJlIGZpbmFsaXplcnMgY2FuIGtlZXAgdGhlbXNlbHZlcyBhbGl2ZQorICAgICAgICBkZWwgZjEsIGY0CisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYyLmFsaXZlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZjMuYWxpdmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmNS5hbGl2ZSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoZjUuZGV0YWNoKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZjUuYWxpdmUpCisKKyAgICAgICAgZjUoKSAgICAgICAgICAgICAgICAgICAgICAgIyBub3RoaW5nIGJlY2F1c2UgcHJldmlvdXNseSB1bnJlZ2lzdGVyZWQKKyAgICAgICAgcmVzLmFwcGVuZCgnQScpCisgICAgICAgIGYzKCkgICAgICAgICAgICAgICAgICAgICAgICMgPT4gcmVzLmFwcGVuZCgnZjMnKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYzLmFsaXZlKQorICAgICAgICByZXMuYXBwZW5kKCdCJykKKyAgICAgICAgZjMoKSAgICAgICAgICAgICAgICAgICAgICAgIyBub3RoaW5nIGJlY2F1c2UgcHJldmlvdXNseSBjYWxsZWQKKyAgICAgICAgcmVzLmFwcGVuZCgnQycpCisgICAgICAgIGRlbCBhCisgICAgICAgIHNlbGYuX2NvbGxlY3RfaWZfbmVjZXNzYXJ5KCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyA9PiByZXMuYXBwZW5kKCdmNCcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgPT4gcmVzLmFwcGVuZCgnZjInKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjID0+IHJlcy5hcHBlbmQoJ2YxJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmMi5hbGl2ZSkKKyAgICAgICAgcmVzLmFwcGVuZCgnRCcpCisgICAgICAgIGYyKCkgICAgICAgICAgICAgICAgICAgICAgICMgbm90aGluZyBiZWNhdXNlIHByZXZpb3VzbHkgY2FsbGVkIGJ5IGdjCisKKyAgICAgICAgZXhwZWN0ZWQgPSBbJ0EnLCAnZjMnLCAnQicsICdDJywgJ2Y0JywgJ2YyJywgJ2YxJywgJ0QnXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9hbGxfZnJlZWQoc2VsZik6CisgICAgICAgICMgd2Ugd2FudCBhIHdlYWtyZWZhYmxlIHN1YmNsYXNzIG9mIHdlYWtyZWYuZmluYWxpemUKKyAgICAgICAgY2xhc3MgTXlGaW5hbGl6ZXIod2Vha3JlZi5maW5hbGl6ZSk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgYSA9IHNlbGYuQSgpCisgICAgICAgIHJlcyA9IFtdCisgICAgICAgIGRlZiBjYWxsYmFjaygpOgorICAgICAgICAgICAgcmVzLmFwcGVuZCgxMjMpCisgICAgICAgIGYgPSBNeUZpbmFsaXplcihhLCBjYWxsYmFjaykKKworICAgICAgICB3cl9jYWxsYmFjayA9IHdlYWtyZWYucmVmKGNhbGxiYWNrKQorICAgICAgICB3cl9mID0gd2Vha3JlZi5yZWYoZikKKyAgICAgICAgZGVsIGNhbGxiYWNrLCBmCisKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUod3JfY2FsbGJhY2soKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUod3JfZigpKQorCisgICAgICAgIGRlbCBhCisgICAgICAgIHNlbGYuX2NvbGxlY3RfaWZfbmVjZXNzYXJ5KCkKKworICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh3cl9jYWxsYmFjaygpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh3cl9mKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCBbMTIzXSkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBydW5faW5fY2hpbGQoY2xzKToKKyAgICAgICAgZGVmIGVycm9yKCk6CisgICAgICAgICAgICAjIENyZWF0ZSBhbiBhdGV4aXQgZmluYWxpemVyIGZyb20gaW5zaWRlIGEgZmluYWxpemVyIGNhbGxlZAorICAgICAgICAgICAgIyBhdCBleGl0LiAgVGhpcyBzaG91bGQgYmUgdGhlIG5leHQgdG8gYmUgcnVuLgorICAgICAgICAgICAgZzEgPSB3ZWFrcmVmLmZpbmFsaXplKGNscywgcHJpbnQsICdnMScpCisgICAgICAgICAgICBwcmludCgnZjMgZXJyb3InKQorICAgICAgICAgICAgMS8wCisKKyAgICAgICAgIyBjbHMgc2hvdWxkIHN0YXkgYWxpdmUgdGlsbCBhdGV4aXQgY2FsbGJhY2tzIHJ1bgorICAgICAgICBmMSA9IHdlYWtyZWYuZmluYWxpemUoY2xzLCBwcmludCwgJ2YxJywgX2dsb2JhbF92YXIpCisgICAgICAgIGYyID0gd2Vha3JlZi5maW5hbGl6ZShjbHMsIHByaW50LCAnZjInLCBfZ2xvYmFsX3ZhcikKKyAgICAgICAgZjMgPSB3ZWFrcmVmLmZpbmFsaXplKGNscywgZXJyb3IpCisgICAgICAgIGY0ID0gd2Vha3JlZi5maW5hbGl6ZShjbHMsIHByaW50LCAnZjQnLCBfZ2xvYmFsX3ZhcikKKworICAgICAgICBhc3NlcnQgZjEuYXRleGl0ID09IFRydWUKKyAgICAgICAgZjIuYXRleGl0ID0gRmFsc2UKKyAgICAgICAgYXNzZXJ0IGYzLmF0ZXhpdCA9PSBUcnVlCisgICAgICAgIGFzc2VydCBmNC5hdGV4aXQgPT0gVHJ1ZQorCisgICAgZGVmIHRlc3RfYXRleGl0KHNlbGYpOgorICAgICAgICBwcm9nID0gKCdmcm9tIHRlc3QudGVzdF93ZWFrcmVmIGltcG9ydCBGaW5hbGl6ZVRlc3RDYXNlOycrCisgICAgICAgICAgICAgICAgJ0ZpbmFsaXplVGVzdENhc2UucnVuX2luX2NoaWxkKCknKQorICAgICAgICByYywgb3V0LCBlcnIgPSBzY3JpcHRfaGVscGVyLmFzc2VydF9weXRob25fb2soJy1jJywgcHJvZykKKyAgICAgICAgb3V0ID0gb3V0LmRlY29kZSgnYXNjaWknKS5zcGxpdGxpbmVzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQsIFsnZjQgZm9vYmFyJywgJ2YzIGVycm9yJywgJ2cxJywgJ2YxIGZvb2JhciddKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYidaZXJvRGl2aXNpb25FcnJvcicgaW4gZXJyKQorCisKIGxpYnJlZnRlc3QgPSAiIiIgRG9jdGVzdCBmb3IgZXhhbXBsZXMgaW4gdGhlIGxpYnJhcnkgcmVmZXJlbmNlOiB3ZWFrcmVmLnJzdAogCiA+Pj4gaW1wb3J0IHdlYWtyZWYKQEAgLTE0NzMsMTAgKzE4NDgsMTIgQEAKIGRlZiB0ZXN0X21haW4oKToKICAgICBzdXBwb3J0LnJ1bl91bml0dGVzdCgKICAgICAgICAgUmVmZXJlbmNlc1Rlc3RDYXNlLAorICAgICAgICBXZWFrTWV0aG9kVGVzdENhc2UsCiAgICAgICAgIE1hcHBpbmdUZXN0Q2FzZSwKICAgICAgICAgV2Vha1ZhbHVlRGljdGlvbmFyeVRlc3RDYXNlLAogICAgICAgICBXZWFrS2V5RGljdGlvbmFyeVRlc3RDYXNlLAogICAgICAgICBTdWJjbGFzc2FibGVXZWFrcmVmVGVzdENhc2UsCisgICAgICAgIEZpbmFsaXplVGVzdENhc2UsCiAgICAgICAgICkKICAgICBzdXBwb3J0LnJ1bl9kb2N0ZXN0KHN5cy5tb2R1bGVzW19fbmFtZV9fXSkKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF93aW5yZWcucHkgYi9MaWIvdGVzdC90ZXN0X3dpbnJlZy5weQppbmRleCBjYjRjZGU5Li4yYzRhYzA4IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3dpbnJlZy5weQorKysgYi9MaWIvdGVzdC90ZXN0X3dpbnJlZy5weQpAQCAtOCw3ICs4LDcgQEAKIGZyb20gcGxhdGZvcm0gaW1wb3J0IG1hY2hpbmUKIAogIyBEbyB0aGlzIGZpcnN0IHNvIHRlc3Qgd2lsbCBiZSBza2lwcGVkIGlmIG1vZHVsZSBkb2Vzbid0IGV4aXN0Ci1zdXBwb3J0LmltcG9ydF9tb2R1bGUoJ3dpbnJlZycpCitzdXBwb3J0LmltcG9ydF9tb2R1bGUoJ3dpbnJlZycsIHJlcXVpcmVkX29uPVsnd2luJ10pCiAjIE5vdyBpbXBvcnQgZXZlcnl0aGluZwogZnJvbSB3aW5yZWcgaW1wb3J0ICoKIApAQCAtNTcsMTMgKzU3LDEzIEBACiAgICAgZGVmIGRlbGV0ZV90cmVlKHNlbGYsIHJvb3QsIHN1YmtleSk6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGhrZXkgPSBPcGVuS2V5KHJvb3QsIHN1YmtleSwgS0VZX0FMTF9BQ0NFU1MpCi0gICAgICAgIGV4Y2VwdCBXaW5kb3dzRXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgIyBzdWJrZXkgZG9lcyBub3QgZXhpc3QKICAgICAgICAgICAgIHJldHVybgogICAgICAgICB3aGlsZSBUcnVlOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHN1YnN1YmtleSA9IEVudW1LZXkoaGtleSwgMCkKLSAgICAgICAgICAgIGV4Y2VwdCBXaW5kb3dzRXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICAjIG5vIG1vcmUgc3Via2V5cwogICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICBzZWxmLmRlbGV0ZV90cmVlKGhrZXksIHN1YnN1YmtleSkKQEAgLTEwMCw3ICsxMDAsNyBAQAogICAgICAgICAgICAgUXVlcnlJbmZvS2V5KGludF9zdWJfa2V5KQogICAgICAgICAgICAgc2VsZi5mYWlsKCJJdCBhcHBlYXJzIHRoZSBDbG9zZUtleSgpIGZ1bmN0aW9uIGRvZXMgIgogICAgICAgICAgICAgICAgICAgICAgICJub3QgY2xvc2UgdGhlIGFjdHVhbCBrZXkhIikKLSAgICAgICAgZXhjZXB0IEVudmlyb25tZW50RXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcGFzcwogICAgICAgICAjIC4uLiBhbmQgY2xvc2UgdGhhdCBrZXkgdGhhdCB3YXkgOi0pCiAgICAgICAgIGludF9rZXkgPSBpbnQoa2V5KQpAQCAtMTA5LDcgKzEwOSw3IEBACiAgICAgICAgICAgICBRdWVyeUluZm9LZXkoaW50X2tleSkKICAgICAgICAgICAgIHNlbGYuZmFpbCgiSXQgYXBwZWFycyB0aGUga2V5LkNsb3NlKCkgZnVuY3Rpb24gIgogICAgICAgICAgICAgICAgICAgICAgICJkb2VzIG5vdCBjbG9zZSB0aGUgYWN0dWFsIGtleSEiKQotICAgICAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBwYXNzCiAKICAgICBkZWYgX3JlYWRfdGVzdF9kYXRhKHNlbGYsIHJvb3Rfa2V5LCBzdWJrZXlzdHI9InN1Yl9rZXkiLCBPcGVuS2V5PU9wZW5LZXkpOgpAQCAtMTI2LDcgKzEyNiw3IEBACiAgICAgICAgICAgICB3aGlsZSAxOgogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IEVudW1WYWx1ZShzdWJfa2V5LCBpbmRleCkKLSAgICAgICAgICAgICAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvcjoKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEgaW4gdGVzdF9kYXRhLCBUcnVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkRpZG4ndCByZWFkIGJhY2sgdGhlIGNvcnJlY3QgdGVzdCBkYXRhIikKQEAgLTE0Nyw3ICsxNDcsNyBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBFbnVtS2V5KGtleSwgMSkKICAgICAgICAgICAgIHNlbGYuZmFpbCgiV2FzIGFibGUgdG8gZ2V0IGEgc2Vjb25kIGtleSB3aGVuIEkgb25seSBoYXZlIG9uZSEiKQotICAgICAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBwYXNzCiAKICAgICAgICAga2V5LkNsb3NlKCkKQEAgLTE3MSw3ICsxNzEsNyBAQAogICAgICAgICAgICAgIyBTaG91bGRudCBiZSBhYmxlIHRvIGRlbGV0ZSBpdCB0d2ljZSEKICAgICAgICAgICAgIERlbGV0ZUtleShrZXksIHN1YmtleXN0cikKICAgICAgICAgICAgIHNlbGYuZmFpbCgiRGVsZXRpbmcgdGhlIGtleSB0d2ljZSBzdWNjZWVkZWQiKQotICAgICAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGtleS5DbG9zZSgpCiAgICAgICAgIERlbGV0ZUtleShyb290X2tleSwgdGVzdF9rZXlfbmFtZSkKQEAgLTE3OSw3ICsxNzksNyBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBrZXkgPSBPcGVuS2V5KHJvb3Rfa2V5LCB0ZXN0X2tleV9uYW1lKQogICAgICAgICAgICAgc2VsZi5mYWlsKCJDb3VsZCBvcGVuIHRoZSBub24tZXhpc3RlbnQga2V5IikKLSAgICAgICAgZXhjZXB0IFdpbmRvd3NFcnJvcjogIyBVc2UgdGhpcyBlcnJvciBuYW1lIHRoaXMgdGltZQorICAgICAgICBleGNlcHQgT1NFcnJvcjogIyBVc2UgdGhpcyBlcnJvciBuYW1lIHRoaXMgdGltZQogICAgICAgICAgICAgcGFzcwogCiAgICAgZGVmIF90ZXN0X2FsbChzZWxmLCByb290X2tleSwgc3Via2V5c3RyPSJzdWJfa2V5Iik6CkBAIC0yMzAsNyArMjMwLDcgQEAKIAogICAgIGRlZiB0ZXN0X2luZXhpc3RhbnRfcmVtb3RlX3JlZ2lzdHJ5KHNlbGYpOgogICAgICAgICBjb25uZWN0ID0gbGFtYmRhOiBDb25uZWN0UmVnaXN0cnkoImFiY2RlZmdoaWprbCIsIEhLRVlfQ1VSUkVOVF9VU0VSKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhXaW5kb3dzRXJyb3IsIGNvbm5lY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIGNvbm5lY3QpCiAKICAgICBkZWYgdGVzdEV4cGFuZEVudmlyb25tZW50U3RyaW5ncyhzZWxmKToKICAgICAgICAgciA9IEV4cGFuZEVudmlyb25tZW50U3RyaW5ncygiJXdpbmRpciVcXHRlc3QiKQpAQCAtMjQyLDggKzI0Miw4IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHdpdGggQ29ubmVjdFJlZ2lzdHJ5KE5vbmUsIEhLRVlfTE9DQUxfTUFDSElORSkgYXMgaDoKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGguaGFuZGxlLCAwKQotICAgICAgICAgICAgICAgIHJhaXNlIFdpbmRvd3NFcnJvcgotICAgICAgICBleGNlcHQgV2luZG93c0Vycm9yOgorICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguaGFuZGxlLCAwKQogCiAgICAgZGVmIHRlc3RfY2hhbmdpbmdfdmFsdWUoc2VsZik6CkBAIC0zNDEsNyArMzQxLDcgQEAKICAgICBkZWYgdGVzdF9xdWVyeXZhbHVlZXhfcmV0dXJuX3ZhbHVlKHNlbGYpOgogICAgICAgICAjIFRlc3QgZm9yIElzc3VlICMxNjc1OSwgcmV0dXJuIHVuc2lnbmVkIGludCBmcm9tIFF1ZXJ5VmFsdWVFeC4KICAgICAgICAgIyBSZWcyUHksIHdoaWNoIGdldHMgY2FsbGVkIGJ5IFF1ZXJ5VmFsdWVFeCwgd2FzIHJldHVybmluZyBhIHZhbHVlCi0gICAgICAgICMgZ2VuZXJhdGVkIGJ5IFB5TG9uZ19Gcm9tTG9uZy4gVGhlIGltcGxtZW50YXRpb24gbm93IHVzZXMKKyAgICAgICAgIyBnZW5lcmF0ZWQgYnkgUHlMb25nX0Zyb21Mb25nLiBUaGUgaW1wbGVtZW50YXRpb24gbm93IHVzZXMKICAgICAgICAgIyBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZyB0byBtYXRjaCBEV09SRCdzIHNpemUuCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHdpdGggQ3JlYXRlS2V5KEhLRVlfQ1VSUkVOVF9VU0VSLCB0ZXN0X2tleV9uYW1lKSBhcyBjazoKQEAgLTM1NCw2ICszNTQsMTkgQEAKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIERlbGV0ZUtleShIS0VZX0NVUlJFTlRfVVNFUiwgdGVzdF9rZXlfbmFtZSkKIAorICAgIGRlZiB0ZXN0X3NldHZhbHVlZXhfY3Jhc2hfd2l0aF9ub25lX2FyZyhzZWxmKToKKyAgICAgICAgIyBUZXN0IGZvciBJc3N1ZSAjMjExNTEsIHNlZ2ZhdWx0IHdoZW4gTm9uZSBpcyBwYXNzZWQgdG8gU2V0VmFsdWVFeAorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIENyZWF0ZUtleShIS0VZX0NVUlJFTlRfVVNFUiwgdGVzdF9rZXlfbmFtZSkgYXMgY2s6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChjay5oYW5kbGUsIDApCisgICAgICAgICAgICAgICAgdGVzdF92YWwgPSBOb25lCisgICAgICAgICAgICAgICAgU2V0VmFsdWVFeChjaywgInRlc3RfbmFtZSIsIDAsIFJFR19CSU5BUlksIHRlc3RfdmFsKQorICAgICAgICAgICAgICAgIHJldF92YWwsIHJldF90eXBlID0gUXVlcnlWYWx1ZUV4KGNrLCAidGVzdF9uYW1lIikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldF90eXBlLCBSRUdfQklOQVJZKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmV0X3ZhbCwgdGVzdF92YWwpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBEZWxldGVLZXkoSEtFWV9DVVJSRU5UX1VTRVIsIHRlc3Rfa2V5X25hbWUpCisKIAogCiBAdW5pdHRlc3Quc2tpcFVubGVzcyhSRU1PVEVfTkFNRSwgIlNraXBwaW5nIHJlbW90ZSByZWdpc3RyeSB0ZXN0cyIpCkBAIC00MDcsNyArNDIwLDcgQEAKICAgICAgICAgICAgICAgICBvcGVuX2ZhaWwgPSBsYW1iZGE6IE9wZW5LZXkoSEtFWV9DVVJSRU5UX1VTRVIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfcmVmbGVjdF9rZXlfbmFtZSwgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgS0VZX1JFQUQgfCBLRVlfV09XNjRfNjRLRVkpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoV2luZG93c0Vycm9yLCBvcGVuX2ZhaWwpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgb3Blbl9mYWlsKQogCiAgICAgICAgICAgICAjIE5vdyBleHBsaWNpdGx5IG9wZW4gdGhlIDY0LWJpdCB2ZXJzaW9uIG9mIHRoZSBrZXkKICAgICAgICAgICAgIHdpdGggT3BlbktleShIS0VZX0NVUlJFTlRfVVNFUiwgdGVzdF9yZWZsZWN0X2tleV9uYW1lLCAwLApAQCAtNDQ3LDcgKzQ2MCw3IEBACiAgICAgICAgICAgICBvcGVuX2ZhaWwgPSBsYW1iZGE6IE9wZW5LZXlFeChIS0VZX0NVUlJFTlRfVVNFUiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfcmVmbGVjdF9rZXlfbmFtZSwgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtFWV9SRUFEIHwgS0VZX1dPVzY0XzY0S0VZKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoV2luZG93c0Vycm9yLCBvcGVuX2ZhaWwpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBvcGVuX2ZhaWwpCiAKICAgICAgICAgICAgICMgTWFrZSBzdXJlIHRoZSAzMi1iaXQga2V5IGlzIGFjdHVhbGx5IHRoZXJlCiAgICAgICAgICAgICB3aXRoIE9wZW5LZXlFeChIS0VZX0NVUlJFTlRfVVNFUiwgdGVzdF9yZWZsZWN0X2tleV9uYW1lLCAwLApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF93aW5zb3VuZC5weSBiL0xpYi90ZXN0L3Rlc3Rfd2luc291bmQucHkKaW5kZXggMDY5YWRjMy4uODM2MThiNiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF93aW5zb3VuZC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3dpbnNvdW5kLnB5CkBAIC0yMiw3ICsyMiw3IEBACiAgICAgICAgIGtleSA9IHdpbnJlZy5PcGVuS2V5RXgod2lucmVnLkhLRVlfQ1VSUkVOVF9VU0VSLAogICAgICAgICAgICAgICAgICJBcHBFdmVudHNcU2NoZW1lc1xBcHBzXC5EZWZhdWx0XHswfVwuRGVmYXVsdCIuZm9ybWF0KHNvdW5kKSkKICAgICAgICAgcmV0dXJuIHdpbnJlZy5FbnVtVmFsdWUoa2V5LCAwKVsxXSAhPSAiIgotICAgIGV4Y2VwdCBXaW5kb3dzRXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIHJldHVybiBGYWxzZQogCiBjbGFzcyBCZWVwVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3dpdGgucHkgYi9MaWIvdGVzdC90ZXN0X3dpdGgucHkKaW5kZXggNzA2OGE4MC4uY2JhYWZjZiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF93aXRoLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfd2l0aC5weQpAQCAtMTIsOCArMTIsOCBAQAogCiAKIGNsYXNzIE1vY2tDb250ZXh0TWFuYWdlcihfR2VuZXJhdG9yQ29udGV4dE1hbmFnZXIpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmdW5jLCAqYXJncywgKiprd2RzKToKLSAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhmdW5jLCAqYXJncywgKiprd2RzKQorICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncyk6CisgICAgICAgIHN1cGVyKCkuX19pbml0X18oKmFyZ3MpCiAgICAgICAgIHNlbGYuZW50ZXJfY2FsbGVkID0gRmFsc2UKICAgICAgICAgc2VsZi5leGl0X2NhbGxlZCA9IEZhbHNlCiAgICAgICAgIHNlbGYuZXhpdF9hcmdzID0gTm9uZQpAQCAtMzEsNyArMzEsNyBAQAogCiBkZWYgbW9ja19jb250ZXh0bWFuYWdlcihmdW5jKToKICAgICBkZWYgaGVscGVyKCphcmdzLCAqKmt3ZHMpOgotICAgICAgICByZXR1cm4gTW9ja0NvbnRleHRNYW5hZ2VyKGZ1bmMsICphcmdzLCAqKmt3ZHMpCisgICAgICAgIHJldHVybiBNb2NrQ29udGV4dE1hbmFnZXIoZnVuYywgYXJncywga3dkcykKICAgICByZXR1cm4gaGVscGVyCiAKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF93c2dpcmVmLnB5IGIvTGliL3Rlc3QvdGVzdF93c2dpcmVmLnB5CmluZGV4IGUyMTNkNzcuLjQwNzZiNjggMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfd3NnaXJlZi5weQorKysgYi9MaWIvdGVzdC90ZXN0X3dzZ2lyZWYucHkKQEAgLTEsMTEgKzEsMTAgQEAKLWZyb20gX19mdXR1cmVfXyBpbXBvcnQgbmVzdGVkX3Njb3BlcyAgICAjIEJhY2t3YXJkIGNvbXBhdCBmb3IgMi4xCiBmcm9tIHVuaXR0ZXN0IGltcG9ydCBUZXN0Q2FzZQogZnJvbSB3c2dpcmVmLnV0aWwgaW1wb3J0IHNldHVwX3Rlc3RpbmdfZGVmYXVsdHMKIGZyb20gd3NnaXJlZi5oZWFkZXJzIGltcG9ydCBIZWFkZXJzCiBmcm9tIHdzZ2lyZWYuaGFuZGxlcnMgaW1wb3J0IEJhc2VIYW5kbGVyLCBCYXNlQ0dJSGFuZGxlcgogZnJvbSB3c2dpcmVmIGltcG9ydCB1dGlsCiBmcm9tIHdzZ2lyZWYudmFsaWRhdGUgaW1wb3J0IHZhbGlkYXRvcgotZnJvbSB3c2dpcmVmLnNpbXBsZV9zZXJ2ZXIgaW1wb3J0IFdTR0lTZXJ2ZXIsIFdTR0lSZXF1ZXN0SGFuZGxlciwgZGVtb19hcHAKK2Zyb20gd3NnaXJlZi5zaW1wbGVfc2VydmVyIGltcG9ydCBXU0dJU2VydmVyLCBXU0dJUmVxdWVzdEhhbmRsZXIKIGZyb20gd3NnaXJlZi5zaW1wbGVfc2VydmVyIGltcG9ydCBtYWtlX3NlcnZlcgogZnJvbSBpbyBpbXBvcnQgU3RyaW5nSU8sIEJ5dGVzSU8sIEJ1ZmZlcmVkUmVhZGVyCiBmcm9tIHNvY2tldHNlcnZlciBpbXBvcnQgQmFzZVNlcnZlcgpAQCAtMTQsOSArMTMsMTEgQEAKIGltcG9ydCBvcwogaW1wb3J0IHJlCiBpbXBvcnQgc3lzCitpbXBvcnQgdW5pdHRlc3QKIAogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiAKKwogY2xhc3MgTW9ja1NlcnZlcihXU0dJU2VydmVyKToKICAgICAiIiJOb24tc29ja2V0IEhUVFAgc2VydmVyIiIiCiAKQEAgLTQ4LDYgKzQ5LDE4IEBACiAgICAgXSkKICAgICByZXR1cm4gW2IiSGVsbG8sIHdvcmxkISJdCiAKKworZGVmIGhlYWRlcl9hcHAoZW52aXJvbiwgc3RhcnRfcmVzcG9uc2UpOgorICAgIHN0YXJ0X3Jlc3BvbnNlKCIyMDAgT0siLCBbCisgICAgICAgICgnQ29udGVudC1UeXBlJywgJ3RleHQvcGxhaW4nKSwKKyAgICAgICAgKCdEYXRlJywgJ01vbiwgMDUgSnVuIDIwMDYgMTg6NDk6NTQgR01UJykKKyAgICBdKQorICAgIHJldHVybiBbJzsnLmpvaW4oWworICAgICAgICBlbnZpcm9uWydIVFRQX1hfVEVTVF9IRUFERVInXSwgZW52aXJvblsnUVVFUllfU1RSSU5HJ10sCisgICAgICAgIGVudmlyb25bJ1BBVEhfSU5GTyddCisgICAgXSkuZW5jb2RlKCdpc28tODg1OS0xJyldCisKKwogZGVmIHJ1bl9hbW9jayhhcHA9aGVsbG9fYXBwLCBkYXRhPWIiR0VUIC8gSFRUUC8xLjBcblxuIik6CiAgICAgc2VydmVyID0gbWFrZV9zZXJ2ZXIoIiIsIDgwLCBhcHAsIE1vY2tTZXJ2ZXIsIE1vY2tIYW5kbGVyKQogICAgIGlucCA9IEJ1ZmZlcmVkUmVhZGVyKEJ5dGVzSU8oZGF0YSkpCkBAIC0xMTgsNiArMTMxLDE5IEBACiAgICAgICAgIG91dCwgZXJyID0gcnVuX2Ftb2NrKCkKICAgICAgICAgc2VsZi5jaGVja19oZWxsbyhvdXQpCiAKKyAgICBkZWYgdGVzdF9lbnZpcm9uKHNlbGYpOgorICAgICAgICByZXF1ZXN0ID0gKAorICAgICAgICAgICAgYiJHRVQgL3AlNjF0aC8/cXVlcnk9dGVzdCBIVFRQLzEuMFxuIgorICAgICAgICAgICAgYiJYLVRlc3QtSGVhZGVyOiBQeXRob24gdGVzdCBcbiIKKyAgICAgICAgICAgIGIiWC1UZXN0LUhlYWRlcjogUHl0aG9uIHRlc3QgMlxuIgorICAgICAgICAgICAgYiJDb250ZW50LUxlbmd0aDogMFxuXG4iCisgICAgICAgICkKKyAgICAgICAgb3V0LCBlcnIgPSBydW5fYW1vY2soaGVhZGVyX2FwcCwgcmVxdWVzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIG91dC5zcGxpdGxpbmVzKClbLTFdLAorICAgICAgICAgICAgYiJQeXRob24gdGVzdCxQeXRob24gdGVzdCAyO3F1ZXJ5PXRlc3Q7L3BhdGgvIgorICAgICAgICApCisKICAgICBkZWYgdGVzdF9yZXF1ZXN0X2xlbmd0aChzZWxmKToKICAgICAgICAgb3V0LCBlcnIgPSBydW5fYW1vY2soZGF0YT1iIkdFVCAiICsgKGIieCIgKiA2NTUzNykgKyBiIiBIVFRQLzEuMFxuXG4iKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dC5zcGxpdGxpbmVzKClbMF0sCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3hkcmxpYi5weSBiL0xpYi90ZXN0L3Rlc3RfeGRybGliLnB5CmluZGV4IDYwMDRjOWYuLjcwNDk2ZDYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfeGRybGliLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfeGRybGliLnB5CkBAIC01MSw4ICs1MSwzMiBAQAogICAgICAgICB1cC5kb25lKCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRU9GRXJyb3IsIHVwLnVucGFja191aW50KQogCitjbGFzcyBDb252ZXJzaW9uRXJyb3JUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5wYWNrZXIgPSB4ZHJsaWIuUGFja2VyKCkKKworICAgIGRlZiBhc3NlcnRSYWlzZXNDb252ZXJzaW9uKHNlbGYsICphcmdzKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoeGRybGliLkNvbnZlcnNpb25FcnJvciwgKmFyZ3MpCisKKyAgICBkZWYgdGVzdF9wYWNrX2ludChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNDb252ZXJzaW9uKHNlbGYucGFja2VyLnBhY2tfaW50LCAnc3RyaW5nJykKKworICAgIGRlZiB0ZXN0X3BhY2tfdWludChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNDb252ZXJzaW9uKHNlbGYucGFja2VyLnBhY2tfdWludCwgJ3N0cmluZycpCisKKyAgICBkZWYgdGVzdF9mbG9hdChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNDb252ZXJzaW9uKHNlbGYucGFja2VyLnBhY2tfZmxvYXQsICdzdHJpbmcnKQorCisgICAgZGVmIHRlc3RfZG91YmxlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlc0NvbnZlcnNpb24oc2VsZi5wYWNrZXIucGFja19kb3VibGUsICdzdHJpbmcnKQorCisgICAgZGVmIHRlc3RfdWh5cGVyKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlc0NvbnZlcnNpb24oc2VsZi5wYWNrZXIucGFja191aHlwZXIsICdzdHJpbmcnKQorCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoWERSVGVzdCkKKyAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChDb252ZXJzaW9uRXJyb3JUZXN0KQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3htbF9kb21fbWluaWNvbXBhdC5weSBiL0xpYi90ZXN0L3Rlc3RfeG1sX2RvbV9taW5pY29tcGF0LnB5CmluZGV4IDA4NWU1MmEuLjNiMDNkZmMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfeG1sX2RvbV9taW5pY29tcGF0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfeG1sX2RvbV9taW5pY29tcGF0LnB5CkBAIC0xLDUgKzEsNiBAQAogIyBUZXN0cyBmb3IgeG1sLmRvbS5taW5pY29tcGF0CiAKK2ltcG9ydCBjb3B5CiBpbXBvcnQgcGlja2xlCiBpbXBvcnQgdW5pdHRlc3QKIApAQCAtODQsMTggKzg1LDU0IEBACiAgICAgZGVmIHRlc3Rfbm9kZWxpc3RfcGlja2xlX3JvdW5kdHJpcChzZWxmKToKICAgICAgICAgIyBUZXN0IHBpY2tsaW5nIGFuZCB1bnBpY2tsaW5nIG9mIGEgTm9kZUxpc3QuCiAKKyAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICAjIEVtcHR5IE5vZGVMaXN0LgorICAgICAgICAgICAgbm9kZV9saXN0ID0gTm9kZUxpc3QoKQorICAgICAgICAgICAgcGlja2xlZCA9IHBpY2tsZS5kdW1wcyhub2RlX2xpc3QsIHByb3RvKQorICAgICAgICAgICAgdW5waWNrbGVkID0gcGlja2xlLmxvYWRzKHBpY2tsZWQpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90KHVucGlja2xlZCwgbm9kZV9saXN0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bnBpY2tsZWQsIG5vZGVfbGlzdCkKKworICAgICAgICAgICAgIyBOb24tZW1wdHkgTm9kZUxpc3QuCisgICAgICAgICAgICBub2RlX2xpc3QuYXBwZW5kKDEpCisgICAgICAgICAgICBub2RlX2xpc3QuYXBwZW5kKDIpCisgICAgICAgICAgICBwaWNrbGVkID0gcGlja2xlLmR1bXBzKG5vZGVfbGlzdCwgcHJvdG8pCisgICAgICAgICAgICB1bnBpY2tsZWQgPSBwaWNrbGUubG9hZHMocGlja2xlZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QodW5waWNrbGVkLCBub2RlX2xpc3QpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVucGlja2xlZCwgbm9kZV9saXN0KQorCisgICAgZGVmIHRlc3Rfbm9kZWxpc3RfY29weShzZWxmKToKICAgICAgICAgIyBFbXB0eSBOb2RlTGlzdC4KICAgICAgICAgbm9kZV9saXN0ID0gTm9kZUxpc3QoKQotICAgICAgICBwaWNrbGVkID0gcGlja2xlLmR1bXBzKG5vZGVfbGlzdCkKLSAgICAgICAgdW5waWNrbGVkID0gcGlja2xlLmxvYWRzKHBpY2tsZWQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5waWNrbGVkLCBub2RlX2xpc3QpCisgICAgICAgIGNvcGllZCA9IGNvcHkuY29weShub2RlX2xpc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QoY29waWVkLCBub2RlX2xpc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29waWVkLCBub2RlX2xpc3QpCiAKICAgICAgICAgIyBOb24tZW1wdHkgTm9kZUxpc3QuCi0gICAgICAgIG5vZGVfbGlzdC5hcHBlbmQoMSkKLSAgICAgICAgbm9kZV9saXN0LmFwcGVuZCgyKQotICAgICAgICBwaWNrbGVkID0gcGlja2xlLmR1bXBzKG5vZGVfbGlzdCkKLSAgICAgICAgdW5waWNrbGVkID0gcGlja2xlLmxvYWRzKHBpY2tsZWQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5waWNrbGVkLCBub2RlX2xpc3QpCisgICAgICAgIG5vZGVfbGlzdC5hcHBlbmQoWzFdKQorICAgICAgICBub2RlX2xpc3QuYXBwZW5kKFsyXSkKKyAgICAgICAgY29waWVkID0gY29weS5jb3B5KG5vZGVfbGlzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdChjb3BpZWQsIG5vZGVfbGlzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb3BpZWQsIG5vZGVfbGlzdCkKKyAgICAgICAgZm9yIHgsIHkgaW4gemlwKGNvcGllZCwgbm9kZV9saXN0KToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoeCwgeSkKKworICAgIGRlZiB0ZXN0X25vZGVsaXN0X2RlZXBjb3B5KHNlbGYpOgorICAgICAgICAjIEVtcHR5IE5vZGVMaXN0LgorICAgICAgICBub2RlX2xpc3QgPSBOb2RlTGlzdCgpCisgICAgICAgIGNvcGllZCA9IGNvcHkuZGVlcGNvcHkobm9kZV9saXN0KQorICAgICAgICBzZWxmLmFzc2VydElzTm90KGNvcGllZCwgbm9kZV9saXN0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvcGllZCwgbm9kZV9saXN0KQorCisgICAgICAgICMgTm9uLWVtcHR5IE5vZGVMaXN0LgorICAgICAgICBub2RlX2xpc3QuYXBwZW5kKFsxXSkKKyAgICAgICAgbm9kZV9saXN0LmFwcGVuZChbMl0pCisgICAgICAgIGNvcGllZCA9IGNvcHkuZGVlcGNvcHkobm9kZV9saXN0KQorICAgICAgICBzZWxmLmFzc2VydElzTm90KGNvcGllZCwgbm9kZV9saXN0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvcGllZCwgbm9kZV9saXN0KQorICAgICAgICBmb3IgeCwgeSBpbiB6aXAoY29waWVkLCBub2RlX2xpc3QpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdCh4LCB5KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCB5KQogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF94bWxfZXRyZWUucHkgYi9MaWIvdGVzdC90ZXN0X3htbF9ldHJlZS5weQppbmRleCA3YmQ4YTJjLi41YzJhMmFmIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3htbF9ldHJlZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3htbF9ldHJlZS5weQpAQCAtNSwxMiArNSwxNSBAQAogIyBGb3IgdGhpcyBwdXJwb3NlLCB0aGUgbW9kdWxlLWxldmVsICJFVCIgc3ltYm9sIGlzIHRlbXBvcmFyaWx5CiAjIG1vbmtleS1wYXRjaGVkIHdoZW4gcnVubmluZyB0aGUgInRlc3RfeG1sX2V0cmVlX2MiIHRlc3Qgc3VpdGUuCiAKK2ltcG9ydCBjb3B5CiBpbXBvcnQgaHRtbAogaW1wb3J0IGlvCiBpbXBvcnQgb3BlcmF0b3IKIGltcG9ydCBwaWNrbGUKIGltcG9ydCBzeXMKK2ltcG9ydCB0eXBlcwogaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgd2FybmluZ3MKIGltcG9ydCB3ZWFrcmVmCiAKIGZyb20gaXRlcnRvb2xzIGltcG9ydCBwcm9kdWN0CkBAIC0xMjAsMTEgKzEyMywxMSBAQAogICAgIGRlZiBzZXRVcENsYXNzKGNscyk6CiAgICAgICAgIGNscy5tb2R1bGVzID0ge3B5RVQsIEVUfQogCi0gICAgZGVmIHBpY2tsZVJvdW5kVHJpcChzZWxmLCBvYmosIG5hbWUsIGR1bXBlciwgbG9hZGVyKToKKyAgICBkZWYgcGlja2xlUm91bmRUcmlwKHNlbGYsIG9iaiwgbmFtZSwgZHVtcGVyLCBsb2FkZXIsIHByb3RvKToKICAgICAgICAgc2F2ZV9tID0gc3lzLm1vZHVsZXNbbmFtZV0KICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc3lzLm1vZHVsZXNbbmFtZV0gPSBkdW1wZXIKLSAgICAgICAgICAgIHRlbXAgPSBwaWNrbGUuZHVtcHMob2JqKQorICAgICAgICAgICAgdGVtcCA9IHBpY2tsZS5kdW1wcyhvYmosIHByb3RvKQogICAgICAgICAgICAgc3lzLm1vZHVsZXNbbmFtZV0gPSBsb2FkZXIKICAgICAgICAgICAgIHJlc3VsdCA9IHBpY2tsZS5sb2Fkcyh0ZW1wKQogICAgICAgICBleGNlcHQgcGlja2xlLlBpY2tsaW5nRXJyb3IgYXMgcGU6CkBAIC0yNDAsNyArMjQzLDMzIEBACiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChFVC5YTUwsIEVULmZyb21zdHJpbmcpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRVQuUEksIEVULlByb2Nlc3NpbmdJbnN0cnVjdGlvbikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChFVC5YTUxQYXJzZXIsIEVULlhNTFRyZWVCdWlsZGVyKQorCisgICAgZGVmIHRlc3Rfc2V0X2F0dHJpYnV0ZShzZWxmKToKKyAgICAgICAgZWxlbWVudCA9IEVULkVsZW1lbnQoJ3RhZycpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbGVtZW50LnRhZywgJ3RhZycpCisgICAgICAgIGVsZW1lbnQudGFnID0gJ1RhZycKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbGVtZW50LnRhZywgJ1RhZycpCisgICAgICAgIGVsZW1lbnQudGFnID0gJ1RBRycKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbGVtZW50LnRhZywgJ1RBRycpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZWxlbWVudC50ZXh0KQorICAgICAgICBlbGVtZW50LnRleHQgPSAnVGV4dCcKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbGVtZW50LnRleHQsICdUZXh0JykKKyAgICAgICAgZWxlbWVudC50ZXh0ID0gJ1RFWFQnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZWxlbWVudC50ZXh0LCAnVEVYVCcpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZWxlbWVudC50YWlsKQorICAgICAgICBlbGVtZW50LnRhaWwgPSAnVGFpbCcKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbGVtZW50LnRhaWwsICdUYWlsJykKKyAgICAgICAgZWxlbWVudC50YWlsID0gJ1RBSUwnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZWxlbWVudC50YWlsLCAnVEFJTCcpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbGVtZW50LmF0dHJpYiwge30pCisgICAgICAgIGVsZW1lbnQuYXR0cmliID0geydhJzogJ2InLCAnYyc6ICdkJ30KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbGVtZW50LmF0dHJpYiwgeydhJzogJ2InLCAnYyc6ICdkJ30pCisgICAgICAgIGVsZW1lbnQuYXR0cmliID0geydBJzogJ0InLCAnQyc6ICdEJ30KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbGVtZW50LmF0dHJpYiwgeydBJzogJ0InLCAnQyc6ICdEJ30pCiAKICAgICBkZWYgdGVzdF9zaW1wbGVvcHMoc2VsZik6CiAgICAgICAgICMgQmFzaWMgbWV0aG9kIHNhbml0eSBjaGVja3MuCkBAIC00MzMsMTUgKzQ2Miw2IEBACiAgICAgICAgICAgICAgICAgJyAgIDxlbXB0eS1lbGVtZW50IC8+XG4nCiAgICAgICAgICAgICAgICAgJzwvcm9vdD4nKQogCi0gICAgICAgIHBhcnNlciA9IEVULlhNTFRyZWVCdWlsZGVyKCkgIyAxLjIgY29tcGF0aWJpbGl0eQotICAgICAgICBwYXJzZXIuZmVlZChkYXRhKQotICAgICAgICBzZWxmLnNlcmlhbGl6ZV9jaGVjayhwYXJzZXIuY2xvc2UoKSwKLSAgICAgICAgICAgICAgICAnPHJvb3Q+XG4nCi0gICAgICAgICAgICAgICAgJyAgIDxlbGVtZW50IGtleT0idmFsdWUiPnRleHQ8L2VsZW1lbnQ+XG4nCi0gICAgICAgICAgICAgICAgJyAgIDxlbGVtZW50PnRleHQ8L2VsZW1lbnQ+dGFpbFxuJwotICAgICAgICAgICAgICAgICcgICA8ZW1wdHktZWxlbWVudCAvPlxuJwotICAgICAgICAgICAgICAgICc8L3Jvb3Q+JykKLQogICAgICAgICB0YXJnZXQgPSBFVC5UcmVlQnVpbGRlcigpCiAgICAgICAgIHBhcnNlciA9IEVULlhNTFBhcnNlcih0YXJnZXQ9dGFyZ2V0KQogICAgICAgICBwYXJzZXIuZmVlZChkYXRhKQpAQCAtNTQxLDExICs1NjEsMjEgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIFsnc3RhcnQtbnMnLCAnZW5kLW5zJ10pCiAKICAgICAgICAgZXZlbnRzID0gKCJzdGFydCIsICJlbmQiLCAiYm9ndXMiKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpIGFzIGNtOgotICAgICAgICAgICAgd2l0aCBvcGVuKFNJTVBMRV9YTUxGSUxFLCAicmIiKSBhcyBmOgorICAgICAgICB3aXRoIG9wZW4oU0lNUExFX1hNTEZJTEUsICJyYiIpIGFzIGY6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpIGFzIGNtOgogICAgICAgICAgICAgICAgIGl0ZXJwYXJzZShmLCBldmVudHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuY2xvc2VkKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihjbS5leGNlcHRpb24pLCAidW5rbm93biBldmVudCAnYm9ndXMnIikKIAorICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKHJlY29yZD1UcnVlKSBhcyB3OgorICAgICAgICAgICAgd2FybmluZ3MuZmlsdGVyd2FybmluZ3MoImFsd2F5cyIsIGNhdGVnb3J5PVJlc291cmNlV2FybmluZykKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcikgYXMgY206CisgICAgICAgICAgICAgICAgaXRlcnBhcnNlKFNJTVBMRV9YTUxGSUxFLCBldmVudHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihjbS5leGNlcHRpb24pLCAidW5rbm93biBldmVudCAnYm9ndXMnIikKKyAgICAgICAgICAgIGRlbCBjbQorICAgICAgICAgICAgc3VwcG9ydC5nY19jb2xsZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3LCBbXSkKKwogICAgICAgICBzb3VyY2UgPSBpby5CeXRlc0lPKAogICAgICAgICAgICAgYiI8P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdpc28tODg1OS0xJz8+XG4iCiAgICAgICAgICAgICBiIjxib2R5IHhtbG5zPSdodHRwOi8vJiMyMzM7ZmZib3Qub3JnL25zJ1xuIgpAQCAtNTY2LDYgKzU5NiwyMSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihjbS5leGNlcHRpb24pLAogICAgICAgICAgICAgICAgICdqdW5rIGFmdGVyIGRvY3VtZW50IGVsZW1lbnQ6IGxpbmUgMSwgY29sdW1uIDEyJykKIAorICAgICAgICB3aXRoIG9wZW4oVEVTVEZOLCAid2IiKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShiIjxkb2N1bWVudCAvPmp1bmsiKQorICAgICAgICBpdCA9IGl0ZXJwYXJzZShURVNURk4pCisgICAgICAgIGFjdGlvbiwgZWxlbSA9IG5leHQoaXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKGFjdGlvbiwgZWxlbS50YWcpLCAoJ2VuZCcsICdkb2N1bWVudCcpKQorICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKHJlY29yZD1UcnVlKSBhcyB3OgorICAgICAgICAgICAgd2FybmluZ3MuZmlsdGVyd2FybmluZ3MoImFsd2F5cyIsIGNhdGVnb3J5PVJlc291cmNlV2FybmluZykKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoRVQuUGFyc2VFcnJvcikgYXMgY206CisgICAgICAgICAgICAgICAgbmV4dChpdCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGNtLmV4Y2VwdGlvbiksCisgICAgICAgICAgICAgICAgICAgICdqdW5rIGFmdGVyIGRvY3VtZW50IGVsZW1lbnQ6IGxpbmUgMSwgY29sdW1uIDEyJykKKyAgICAgICAgICAgIGRlbCBjbSwgaXQKKyAgICAgICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodywgW10pCisKICAgICBkZWYgdGVzdF93cml0ZWZpbGUoc2VsZik6CiAgICAgICAgIGVsZW0gPSBFVC5FbGVtZW50KCJ0YWciKQogICAgICAgICBlbGVtLnRleHQgPSAidGV4dCIKQEAgLTcwNiw5ICs3NTEsOSBAQAogICAgICAgICAgICAgJ2lzbzg4NTktMTMnLCAnaXNvODg1OS0xNCcsICdpc284ODU5LTE1JywgJ2lzbzg4NTktMTYnLAogICAgICAgICAgICAgJ2NwNDM3JywgJ2NwNzIwJywgJ2NwNzM3JywgJ2NwNzc1JywgJ2NwODUwJywgJ2NwODUyJywKICAgICAgICAgICAgICdjcDg1NScsICdjcDg1NicsICdjcDg1NycsICdjcDg1OCcsICdjcDg2MCcsICdjcDg2MScsICdjcDg2MicsCi0gICAgICAgICAgICAnY3A4NjMnLCAnY3A4NjUnLCAnY3A4NjYnLCAnY3A4NjknLCAnY3A4NzQnLCAnY3AxMDA2JywgJ2NwMTI1MCcsCi0gICAgICAgICAgICAnY3AxMjUxJywgJ2NwMTI1MicsICdjcDEyNTMnLCAnY3AxMjU0JywgJ2NwMTI1NScsICdjcDEyNTYnLAotICAgICAgICAgICAgJ2NwMTI1NycsICdjcDEyNTgnLAorICAgICAgICAgICAgJ2NwODYzJywgJ2NwODY1JywgJ2NwODY2JywgJ2NwODY5JywgJ2NwODc0JywgJ2NwMTAwNicsICdjcDExMjUnLAorICAgICAgICAgICAgJ2NwMTI1MCcsICdjcDEyNTEnLCAnY3AxMjUyJywgJ2NwMTI1MycsICdjcDEyNTQnLCAnY3AxMjU1JywKKyAgICAgICAgICAgICdjcDEyNTYnLCAnY3AxMjU3JywgJ2NwMTI1OCcsCiAgICAgICAgICAgICAnbWFjLWN5cmlsbGljJywgJ21hYy1ncmVlaycsICdtYWMtaWNlbGFuZCcsICdtYWMtbGF0aW4yJywKICAgICAgICAgICAgICdtYWMtcm9tYW4nLCAnbWFjLXR1cmtpc2gnLAogICAgICAgICAgICAgJ2lzbzIwMjItanAnLCAnaXNvMjAyMi1qcC0xJywgJ2lzbzIwMjItanAtMicsICdpc28yMDIyLWpwLTIwMDQnLApAQCAtOTY0LDYgKzEwMDksMTYwIEBACiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXJpYWxpemVkLCBleHBlY3RlZCkKIAogCitjbGFzcyBYTUxQdWxsUGFyc2VyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgX2ZlZWQoc2VsZiwgcGFyc2VyLCBkYXRhLCBjaHVua19zaXplPU5vbmUpOgorICAgICAgICBpZiBjaHVua19zaXplIGlzIE5vbmU6CisgICAgICAgICAgICBwYXJzZXIuZmVlZChkYXRhKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKGRhdGEpLCBjaHVua19zaXplKToKKyAgICAgICAgICAgICAgICBwYXJzZXIuZmVlZChkYXRhW2k6aStjaHVua19zaXplXSkKKworICAgIGRlZiBhc3NlcnRfZXZlbnRfdGFncyhzZWxmLCBwYXJzZXIsIGV4cGVjdGVkKToKKyAgICAgICAgZXZlbnRzID0gcGFyc2VyLnJlYWRfZXZlbnRzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbKGFjdGlvbiwgZWxlbS50YWcpIGZvciBhY3Rpb24sIGVsZW0gaW4gZXZlbnRzXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X3NpbXBsZV94bWwoc2VsZik6CisgICAgICAgIGZvciBjaHVua19zaXplIGluIChOb25lLCAxLCA1KToKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGNodW5rX3NpemU9Y2h1bmtfc2l6ZSk6CisgICAgICAgICAgICAgICAgcGFyc2VyID0gRVQuWE1MUHVsbFBhcnNlcigpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfZXZlbnRfdGFncyhwYXJzZXIsIFtdKQorICAgICAgICAgICAgICAgIHNlbGYuX2ZlZWQocGFyc2VyLCAiPCEtLSBjb21tZW50IC0tPlxuIiwgY2h1bmtfc2l6ZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF9ldmVudF90YWdzKHBhcnNlciwgW10pCisgICAgICAgICAgICAgICAgc2VsZi5fZmVlZChwYXJzZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiPHJvb3Q+XG4gIDxlbGVtZW50IGtleT0ndmFsdWUnPnRleHQ8L2VsZW1lbnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY2h1bmtfc2l6ZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF9ldmVudF90YWdzKHBhcnNlciwgW10pCisgICAgICAgICAgICAgICAgc2VsZi5fZmVlZChwYXJzZXIsICI+XG4iLCBjaHVua19zaXplKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2V2ZW50X3RhZ3MocGFyc2VyLCBbKCdlbmQnLCAnZWxlbWVudCcpXSkKKyAgICAgICAgICAgICAgICBzZWxmLl9mZWVkKHBhcnNlciwgIjxlbGVtZW50PnRleHQ8L2VsZW1lbnQ+dGFpbFxuIiwgY2h1bmtfc2l6ZSkKKyAgICAgICAgICAgICAgICBzZWxmLl9mZWVkKHBhcnNlciwgIjxlbXB0eS1lbGVtZW50Lz5cbiIsIGNodW5rX3NpemUpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfZXZlbnRfdGFncyhwYXJzZXIsIFsKKyAgICAgICAgICAgICAgICAgICAgKCdlbmQnLCAnZWxlbWVudCcpLAorICAgICAgICAgICAgICAgICAgICAoJ2VuZCcsICdlbXB0eS1lbGVtZW50JyksCisgICAgICAgICAgICAgICAgICAgIF0pCisgICAgICAgICAgICAgICAgc2VsZi5fZmVlZChwYXJzZXIsICI8L3Jvb3Q+XG4iLCBjaHVua19zaXplKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2V2ZW50X3RhZ3MocGFyc2VyLCBbKCdlbmQnLCAncm9vdCcpXSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShwYXJzZXIuY2xvc2UoKSkKKworICAgIGRlZiB0ZXN0X2ZlZWRfd2hpbGVfaXRlcmF0aW5nKHNlbGYpOgorICAgICAgICBwYXJzZXIgPSBFVC5YTUxQdWxsUGFyc2VyKCkKKyAgICAgICAgaXQgPSBwYXJzZXIucmVhZF9ldmVudHMoKQorICAgICAgICBzZWxmLl9mZWVkKHBhcnNlciwgIjxyb290PlxuICA8ZWxlbWVudCBrZXk9J3ZhbHVlJz50ZXh0PC9lbGVtZW50PlxuIikKKyAgICAgICAgYWN0aW9uLCBlbGVtID0gbmV4dChpdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoYWN0aW9uLCBlbGVtLnRhZyksICgnZW5kJywgJ2VsZW1lbnQnKSkKKyAgICAgICAgc2VsZi5fZmVlZChwYXJzZXIsICI8L3Jvb3Q+XG4iKQorICAgICAgICBhY3Rpb24sIGVsZW0gPSBuZXh0KGl0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChhY3Rpb24sIGVsZW0udGFnKSwgKCdlbmQnLCAncm9vdCcpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFN0b3BJdGVyYXRpb24pOgorICAgICAgICAgICAgbmV4dChpdCkKKworICAgIGRlZiB0ZXN0X3NpbXBsZV94bWxfd2l0aF9ucyhzZWxmKToKKyAgICAgICAgcGFyc2VyID0gRVQuWE1MUHVsbFBhcnNlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0X2V2ZW50X3RhZ3MocGFyc2VyLCBbXSkKKyAgICAgICAgc2VsZi5fZmVlZChwYXJzZXIsICI8IS0tIGNvbW1lbnQgLS0+XG4iKQorICAgICAgICBzZWxmLmFzc2VydF9ldmVudF90YWdzKHBhcnNlciwgW10pCisgICAgICAgIHNlbGYuX2ZlZWQocGFyc2VyLCAiPHJvb3QgeG1sbnM9J25hbWVzcGFjZSc+XG4iKQorICAgICAgICBzZWxmLmFzc2VydF9ldmVudF90YWdzKHBhcnNlciwgW10pCisgICAgICAgIHNlbGYuX2ZlZWQocGFyc2VyLCAiPGVsZW1lbnQga2V5PSd2YWx1ZSc+dGV4dDwvZWxlbWVudCIpCisgICAgICAgIHNlbGYuYXNzZXJ0X2V2ZW50X3RhZ3MocGFyc2VyLCBbXSkKKyAgICAgICAgc2VsZi5fZmVlZChwYXJzZXIsICI+XG4iKQorICAgICAgICBzZWxmLmFzc2VydF9ldmVudF90YWdzKHBhcnNlciwgWygnZW5kJywgJ3tuYW1lc3BhY2V9ZWxlbWVudCcpXSkKKyAgICAgICAgc2VsZi5fZmVlZChwYXJzZXIsICI8ZWxlbWVudD50ZXh0PC9lbGVtZW50PnRhaWxcbiIpCisgICAgICAgIHNlbGYuX2ZlZWQocGFyc2VyLCAiPGVtcHR5LWVsZW1lbnQvPlxuIikKKyAgICAgICAgc2VsZi5hc3NlcnRfZXZlbnRfdGFncyhwYXJzZXIsIFsKKyAgICAgICAgICAgICgnZW5kJywgJ3tuYW1lc3BhY2V9ZWxlbWVudCcpLAorICAgICAgICAgICAgKCdlbmQnLCAne25hbWVzcGFjZX1lbXB0eS1lbGVtZW50JyksCisgICAgICAgICAgICBdKQorICAgICAgICBzZWxmLl9mZWVkKHBhcnNlciwgIjwvcm9vdD5cbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0X2V2ZW50X3RhZ3MocGFyc2VyLCBbKCdlbmQnLCAne25hbWVzcGFjZX1yb290JyldKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShwYXJzZXIuY2xvc2UoKSkKKworICAgIGRlZiB0ZXN0X25zX2V2ZW50cyhzZWxmKToKKyAgICAgICAgcGFyc2VyID0gRVQuWE1MUHVsbFBhcnNlcihldmVudHM9KCdzdGFydC1ucycsICdlbmQtbnMnKSkKKyAgICAgICAgc2VsZi5fZmVlZChwYXJzZXIsICI8IS0tIGNvbW1lbnQgLS0+XG4iKQorICAgICAgICBzZWxmLl9mZWVkKHBhcnNlciwgIjxyb290IHhtbG5zPSduYW1lc3BhY2UnPlxuIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGxpc3QocGFyc2VyLnJlYWRfZXZlbnRzKCkpLAorICAgICAgICAgICAgWygnc3RhcnQtbnMnLCAoJycsICduYW1lc3BhY2UnKSldKQorICAgICAgICBzZWxmLl9mZWVkKHBhcnNlciwgIjxlbGVtZW50IGtleT0ndmFsdWUnPnRleHQ8L2VsZW1lbnQiKQorICAgICAgICBzZWxmLl9mZWVkKHBhcnNlciwgIj5cbiIpCisgICAgICAgIHNlbGYuX2ZlZWQocGFyc2VyLCAiPGVsZW1lbnQ+dGV4dDwvZWxlbWVudD50YWlsXG4iKQorICAgICAgICBzZWxmLl9mZWVkKHBhcnNlciwgIjxlbXB0eS1lbGVtZW50Lz5cbiIpCisgICAgICAgIHNlbGYuX2ZlZWQocGFyc2VyLCAiPC9yb290PlxuIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHBhcnNlci5yZWFkX2V2ZW50cygpKSwgWygnZW5kLW5zJywgTm9uZSldKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShwYXJzZXIuY2xvc2UoKSkKKworICAgIGRlZiB0ZXN0X2V2ZW50cyhzZWxmKToKKyAgICAgICAgcGFyc2VyID0gRVQuWE1MUHVsbFBhcnNlcihldmVudHM9KCkpCisgICAgICAgIHNlbGYuX2ZlZWQocGFyc2VyLCAiPHJvb3QvPlxuIikKKyAgICAgICAgc2VsZi5hc3NlcnRfZXZlbnRfdGFncyhwYXJzZXIsIFtdKQorCisgICAgICAgIHBhcnNlciA9IEVULlhNTFB1bGxQYXJzZXIoZXZlbnRzPSgnc3RhcnQnLCAnZW5kJykpCisgICAgICAgIHNlbGYuX2ZlZWQocGFyc2VyLCAiPCEtLSBjb21tZW50IC0tPlxuIikKKyAgICAgICAgc2VsZi5hc3NlcnRfZXZlbnRfdGFncyhwYXJzZXIsIFtdKQorICAgICAgICBzZWxmLl9mZWVkKHBhcnNlciwgIjxyb290PlxuIikKKyAgICAgICAgc2VsZi5hc3NlcnRfZXZlbnRfdGFncyhwYXJzZXIsIFsoJ3N0YXJ0JywgJ3Jvb3QnKV0pCisgICAgICAgIHNlbGYuX2ZlZWQocGFyc2VyLCAiPGVsZW1lbnQga2V5PSd2YWx1ZSc+dGV4dDwvZWxlbWVudCIpCisgICAgICAgIHNlbGYuYXNzZXJ0X2V2ZW50X3RhZ3MocGFyc2VyLCBbKCdzdGFydCcsICdlbGVtZW50JyldKQorICAgICAgICBzZWxmLl9mZWVkKHBhcnNlciwgIj5cbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0X2V2ZW50X3RhZ3MocGFyc2VyLCBbKCdlbmQnLCAnZWxlbWVudCcpXSkKKyAgICAgICAgc2VsZi5fZmVlZChwYXJzZXIsCisgICAgICAgICAgICAgICAgICAgIjxlbGVtZW50IHhtbG5zPSdmb28nPnRleHQ8ZW1wdHktZWxlbWVudC8+PC9lbGVtZW50PnRhaWxcbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0X2V2ZW50X3RhZ3MocGFyc2VyLCBbCisgICAgICAgICAgICAoJ3N0YXJ0JywgJ3tmb299ZWxlbWVudCcpLAorICAgICAgICAgICAgKCdzdGFydCcsICd7Zm9vfWVtcHR5LWVsZW1lbnQnKSwKKyAgICAgICAgICAgICgnZW5kJywgJ3tmb299ZW1wdHktZWxlbWVudCcpLAorICAgICAgICAgICAgKCdlbmQnLCAne2Zvb31lbGVtZW50JyksCisgICAgICAgICAgICBdKQorICAgICAgICBzZWxmLl9mZWVkKHBhcnNlciwgIjwvcm9vdD4iKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShwYXJzZXIuY2xvc2UoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRfZXZlbnRfdGFncyhwYXJzZXIsIFsoJ2VuZCcsICdyb290JyldKQorCisgICAgICAgIHBhcnNlciA9IEVULlhNTFB1bGxQYXJzZXIoZXZlbnRzPSgnc3RhcnQnLCkpCisgICAgICAgIHNlbGYuX2ZlZWQocGFyc2VyLCAiPCEtLSBjb21tZW50IC0tPlxuIikKKyAgICAgICAgc2VsZi5hc3NlcnRfZXZlbnRfdGFncyhwYXJzZXIsIFtdKQorICAgICAgICBzZWxmLl9mZWVkKHBhcnNlciwgIjxyb290PlxuIikKKyAgICAgICAgc2VsZi5hc3NlcnRfZXZlbnRfdGFncyhwYXJzZXIsIFsoJ3N0YXJ0JywgJ3Jvb3QnKV0pCisgICAgICAgIHNlbGYuX2ZlZWQocGFyc2VyLCAiPGVsZW1lbnQga2V5PSd2YWx1ZSc+dGV4dDwvZWxlbWVudCIpCisgICAgICAgIHNlbGYuYXNzZXJ0X2V2ZW50X3RhZ3MocGFyc2VyLCBbKCdzdGFydCcsICdlbGVtZW50JyldKQorICAgICAgICBzZWxmLl9mZWVkKHBhcnNlciwgIj5cbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0X2V2ZW50X3RhZ3MocGFyc2VyLCBbXSkKKyAgICAgICAgc2VsZi5fZmVlZChwYXJzZXIsCisgICAgICAgICAgICAgICAgICAgIjxlbGVtZW50IHhtbG5zPSdmb28nPnRleHQ8ZW1wdHktZWxlbWVudC8+PC9lbGVtZW50PnRhaWxcbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0X2V2ZW50X3RhZ3MocGFyc2VyLCBbCisgICAgICAgICAgICAoJ3N0YXJ0JywgJ3tmb299ZWxlbWVudCcpLAorICAgICAgICAgICAgKCdzdGFydCcsICd7Zm9vfWVtcHR5LWVsZW1lbnQnKSwKKyAgICAgICAgICAgIF0pCisgICAgICAgIHNlbGYuX2ZlZWQocGFyc2VyLCAiPC9yb290PiIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHBhcnNlci5jbG9zZSgpKQorCisgICAgZGVmIHRlc3RfZXZlbnRzX3NlcXVlbmNlKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBldmVudHMgY2FuIGJlIHNvbWUgc2VxdWVuY2UgdGhhdCdzIG5vdCBqdXN0IGEgdHVwbGUgb3IgbGlzdAorICAgICAgICBldmVudHNldCA9IHsnZW5kJywgJ3N0YXJ0J30KKyAgICAgICAgcGFyc2VyID0gRVQuWE1MUHVsbFBhcnNlcihldmVudHM9ZXZlbnRzZXQpCisgICAgICAgIHNlbGYuX2ZlZWQocGFyc2VyLCAiPGZvbz5iYXI8L2Zvbz4iKQorICAgICAgICBzZWxmLmFzc2VydF9ldmVudF90YWdzKHBhcnNlciwgWygnc3RhcnQnLCAnZm9vJyksICgnZW5kJywgJ2ZvbycpXSkKKworICAgICAgICBjbGFzcyBEdW1teUl0ZXI6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICAgICAgICAgc2VsZi5ldmVudHMgPSBpdGVyKFsnc3RhcnQnLCAnZW5kJywgJ3N0YXJ0LW5zJ10pCisgICAgICAgICAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKKyAgICAgICAgICAgIGRlZiBfX25leHRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV4dChzZWxmLmV2ZW50cykKKworICAgICAgICBwYXJzZXIgPSBFVC5YTUxQdWxsUGFyc2VyKGV2ZW50cz1EdW1teUl0ZXIoKSkKKyAgICAgICAgc2VsZi5fZmVlZChwYXJzZXIsICI8Zm9vPmJhcjwvZm9vPiIpCisgICAgICAgIHNlbGYuYXNzZXJ0X2V2ZW50X3RhZ3MocGFyc2VyLCBbKCdzdGFydCcsICdmb28nKSwgKCdlbmQnLCAnZm9vJyldKQorCisKKyAgICBkZWYgdGVzdF91bmtub3duX2V2ZW50KHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgRVQuWE1MUHVsbFBhcnNlcihldmVudHM9KCdzdGFydCcsICdlbmQnLCAnYm9ndXMnKSkKKworCiAjCiAjIHhpbmNsdWRlIHRlc3RzIChzYW1wbGVzIGZyb20gYXBwZW5kaXggQyBvZiB0aGUgeGluY2x1ZGUgc3BlY2lmaWNhdGlvbikKIApAQCAtMTMwNSw3ICsxNTA0LDcgQEAKICAgICAgICAgIyBEb24ndCBjcmFzaCB3aGVuIHVzaW5nIGN1c3RvbSBlbnRpdGllcy4KIAogICAgICAgICBFTlRJVElFUyA9IHsncnNxdW8nOiAnXHUyMDE5JywgJ2xzcXVvJzogJ1x1MjAxOCd9Ci0gICAgICAgIHBhcnNlciA9IEVULlhNTFRyZWVCdWlsZGVyKCkKKyAgICAgICAgcGFyc2VyID0gRVQuWE1MUGFyc2VyKCkKICAgICAgICAgcGFyc2VyLmVudGl0eS51cGRhdGUoRU5USVRJRVMpCiAgICAgICAgIHBhcnNlci5mZWVkKCIiIjw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+CiA8IURPQ1RZUEUgcGF0ZW50LWFwcGxpY2F0aW9uLXB1YmxpY2F0aW9uIFNZU1RFTSAicGFwLXYxNS0yMDAxLTAxLTMxLmR0ZCIgW10+CkBAIC0xNTMyLDMzICsxNzMxLDE1NiBAQAogCiAgICAgZGVmIHRlc3RfcGlja2xlKHNlbGYpOgogICAgICAgICAjIGlzc3VlICMxNjA3NjogdGhlIEMgaW1wbGVtZW50YXRpb24gd2Fzbid0IHBpY2tsZWFibGUuCi0gICAgICAgIGZvciBkdW1wZXIsIGxvYWRlciBpbiBwcm9kdWN0KHNlbGYubW9kdWxlcywgcmVwZWF0PTIpOgotICAgICAgICAgICAgZSA9IGR1bXBlci5FbGVtZW50KCdmb28nLCBiYXI9NDIpCi0gICAgICAgICAgICBlLnRleHQgPSAidGV4dCBnb2VzIGhlcmUiCi0gICAgICAgICAgICBlLnRhaWwgPSAib3Bwb3NpdGUgb2YgaGVhZCIKLSAgICAgICAgICAgIGR1bXBlci5TdWJFbGVtZW50KGUsICdjaGlsZCcpLmFwcGVuZChkdW1wZXIuRWxlbWVudCgnZ3JhbmRjaGlsZCcpKQotICAgICAgICAgICAgZS5hcHBlbmQoZHVtcGVyLkVsZW1lbnQoJ2NoaWxkJykpCi0gICAgICAgICAgICBlLmZpbmRhbGwoJy4vL2dyYW5kY2hpbGQnKVswXS5zZXQoJ2F0dHInLCAnb3RoZXIgdmFsdWUnKQorICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UoMiwgcGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIGZvciBkdW1wZXIsIGxvYWRlciBpbiBwcm9kdWN0KHNlbGYubW9kdWxlcywgcmVwZWF0PTIpOgorICAgICAgICAgICAgICAgIGUgPSBkdW1wZXIuRWxlbWVudCgnZm9vJywgYmFyPTQyKQorICAgICAgICAgICAgICAgIGUudGV4dCA9ICJ0ZXh0IGdvZXMgaGVyZSIKKyAgICAgICAgICAgICAgICBlLnRhaWwgPSAib3Bwb3NpdGUgb2YgaGVhZCIKKyAgICAgICAgICAgICAgICBkdW1wZXIuU3ViRWxlbWVudChlLCAnY2hpbGQnKS5hcHBlbmQoZHVtcGVyLkVsZW1lbnQoJ2dyYW5kY2hpbGQnKSkKKyAgICAgICAgICAgICAgICBlLmFwcGVuZChkdW1wZXIuRWxlbWVudCgnY2hpbGQnKSkKKyAgICAgICAgICAgICAgICBlLmZpbmRhbGwoJy4vL2dyYW5kY2hpbGQnKVswXS5zZXQoJ2F0dHInLCAnb3RoZXIgdmFsdWUnKQogCi0gICAgICAgICAgICBlMiA9IHNlbGYucGlja2xlUm91bmRUcmlwKGUsICd4bWwuZXRyZWUuRWxlbWVudFRyZWUnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdW1wZXIsIGxvYWRlcikKKyAgICAgICAgICAgICAgICBlMiA9IHNlbGYucGlja2xlUm91bmRUcmlwKGUsICd4bWwuZXRyZWUuRWxlbWVudFRyZWUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVtcGVyLCBsb2FkZXIsIHByb3RvKQogCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUyLnRhZywgJ2ZvbycpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUyLmF0dHJpYlsnYmFyJ10sIDQyKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZTIpLCAyKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEVsZW1lbnRzKGUsIGUyKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTIudGFnLCAnZm9vJykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUyLmF0dHJpYlsnYmFyJ10sIDQyKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGUyKSwgMikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsRWxlbWVudHMoZSwgZTIpCiAKICAgICBkZWYgdGVzdF9waWNrbGVfaXNzdWUxODk5NyhzZWxmKToKLSAgICAgICAgZm9yIGR1bXBlciwgbG9hZGVyIGluIHByb2R1Y3Qoc2VsZi5tb2R1bGVzLCByZXBlYXQ9Mik6Ci0gICAgICAgICAgICBYTUxURVhUID0gIiIiPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci0gICAgICAgICAgICAgICAgPGdyb3VwPjxkb2dzPjQ8L2RvZ3M+Ci0gICAgICAgICAgICAgICAgPC9ncm91cD4iIiIKLSAgICAgICAgICAgIGUxID0gZHVtcGVyLmZyb21zdHJpbmcoWE1MVEVYVCkKLSAgICAgICAgICAgIGlmIGhhc2F0dHIoZTEsICdfX2dldHN0YXRlX18nKToKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLl9fZ2V0c3RhdGVfXygpWyd0YWcnXSwgJ2dyb3VwJykKLSAgICAgICAgICAgIGUyID0gc2VsZi5waWNrbGVSb3VuZFRyaXAoZTEsICd4bWwuZXRyZWUuRWxlbWVudFRyZWUnLCBkdW1wZXIsIGxvYWRlcikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTIudGFnLCAnZ3JvdXAnKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMlswXS50YWcsICdkb2dzJykKKyAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKDIsIHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICBmb3IgZHVtcGVyLCBsb2FkZXIgaW4gcHJvZHVjdChzZWxmLm1vZHVsZXMsIHJlcGVhdD0yKToKKyAgICAgICAgICAgICAgICBYTUxURVhUID0gIiIiPD94bWwgdmVyc2lvbj0iMS4wIj8+CisgICAgICAgICAgICAgICAgICAgIDxncm91cD48ZG9ncz40PC9kb2dzPgorICAgICAgICAgICAgICAgICAgICA8L2dyb3VwPiIiIgorICAgICAgICAgICAgICAgIGUxID0gZHVtcGVyLmZyb21zdHJpbmcoWE1MVEVYVCkKKyAgICAgICAgICAgICAgICBpZiBoYXNhdHRyKGUxLCAnX19nZXRzdGF0ZV9fJyk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTEuX19nZXRzdGF0ZV9fKClbJ3RhZyddLCAnZ3JvdXAnKQorICAgICAgICAgICAgICAgIGUyID0gc2VsZi5waWNrbGVSb3VuZFRyaXAoZTEsICd4bWwuZXRyZWUuRWxlbWVudFRyZWUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVtcGVyLCBsb2FkZXIsIHByb3RvKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTIudGFnLCAnZ3JvdXAnKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTJbMF0udGFnLCAnZG9ncycpCisKKworY2xhc3MgQmFkRWxlbWVudFRlc3QoRWxlbWVudFRlc3RDYXNlLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfZXh0ZW5kX211dGFibGVfbGlzdChzZWxmKToKKyAgICAgICAgY2xhc3MgWDoKKyAgICAgICAgICAgIEBwcm9wZXJ0eQorICAgICAgICAgICAgZGVmIF9fY2xhc3NfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBMWzpdID0gW0VULkVsZW1lbnQoJ2JheicpXQorICAgICAgICAgICAgICAgIHJldHVybiBFVC5FbGVtZW50CisgICAgICAgIEwgPSBbWCgpXQorICAgICAgICBlID0gRVQuRWxlbWVudCgnZm9vJykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZS5leHRlbmQoTCkKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBjbGFzcyBZKFgsIEVULkVsZW1lbnQpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBMID0gW1koJ3gnKV0KKyAgICAgICAgZSA9IEVULkVsZW1lbnQoJ2ZvbycpCisgICAgICAgIGUuZXh0ZW5kKEwpCisKKyAgICBkZWYgdGVzdF9leHRlbmRfbXV0YWJsZV9saXN0MihzZWxmKToKKyAgICAgICAgY2xhc3MgWDoKKyAgICAgICAgICAgIEBwcm9wZXJ0eQorICAgICAgICAgICAgZGVmIF9fY2xhc3NfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBkZWwgTFs6XQorICAgICAgICAgICAgICAgIHJldHVybiBFVC5FbGVtZW50CisgICAgICAgIEwgPSBbWCgpLCBFVC5FbGVtZW50KCdiYXonKV0KKyAgICAgICAgZSA9IEVULkVsZW1lbnQoJ2ZvbycpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGUuZXh0ZW5kKEwpCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgY2xhc3MgWShYLCBFVC5FbGVtZW50KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgTCA9IFtZKCdiYXInKSwgRVQuRWxlbWVudCgnYmF6JyldCisgICAgICAgIGUgPSBFVC5FbGVtZW50KCdmb28nKQorICAgICAgICBlLmV4dGVuZChMKQorCisgICAgZGVmIHRlc3RfcmVtb3ZlX3dpdGhfbXV0YXRpbmcoc2VsZik6CisgICAgICAgIGNsYXNzIFgoRVQuRWxlbWVudCk6CisgICAgICAgICAgICBkZWYgX19lcV9fKHNlbGYsIG8pOgorICAgICAgICAgICAgICAgIGRlbCBlWzpdCisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGUgPSBFVC5FbGVtZW50KCdmb28nKQorICAgICAgICBlLmV4dGVuZChbWCgnYmFyJyldKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBlLnJlbW92ZSwgRVQuRWxlbWVudCgnYmF6JykpCisKKyAgICAgICAgZSA9IEVULkVsZW1lbnQoJ2ZvbycpCisgICAgICAgIGUuZXh0ZW5kKFtFVC5FbGVtZW50KCdiYXInKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGUucmVtb3ZlLCBYKCdiYXonKSkKKworCitjbGFzcyBNdXRhdGluZ0VsZW1lbnRQYXRoKHN0cik6CisgICAgZGVmIF9fbmV3X18oY2xzLCBlbGVtLCAqYXJncyk6CisgICAgICAgIHNlbGYgPSBzdHIuX19uZXdfXyhjbHMsICphcmdzKQorICAgICAgICBzZWxmLmVsZW0gPSBlbGVtCisgICAgICAgIHJldHVybiBzZWxmCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvKToKKyAgICAgICAgZGVsIHNlbGYuZWxlbVs6XQorICAgICAgICByZXR1cm4gVHJ1ZQorTXV0YXRpbmdFbGVtZW50UGF0aC5fX2hhc2hfXyA9IHN0ci5fX2hhc2hfXworCitjbGFzcyBCYWRFbGVtZW50UGF0aChzdHIpOgorICAgIGRlZiBfX2VxX18oc2VsZiwgbyk6CisgICAgICAgIHJhaXNlIDEvMAorQmFkRWxlbWVudFBhdGguX19oYXNoX18gPSBzdHIuX19oYXNoX18KKworY2xhc3MgQmFkRWxlbWVudFBhdGhUZXN0KEVsZW1lbnRUZXN0Q2FzZSwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc3VwZXIoKS5zZXRVcCgpCisgICAgICAgIGZyb20geG1sLmV0cmVlIGltcG9ydCBFbGVtZW50UGF0aAorICAgICAgICBzZWxmLnBhdGhfY2FjaGUgPSBFbGVtZW50UGF0aC5fY2FjaGUKKyAgICAgICAgRWxlbWVudFBhdGguX2NhY2hlID0ge30KKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgZnJvbSB4bWwuZXRyZWUgaW1wb3J0IEVsZW1lbnRQYXRoCisgICAgICAgIEVsZW1lbnRQYXRoLl9jYWNoZSA9IHNlbGYucGF0aF9jYWNoZQorICAgICAgICBzdXBlcigpLnRlYXJEb3duKCkKKworICAgIGRlZiB0ZXN0X2ZpbmRfd2l0aF9tdXRhdGluZyhzZWxmKToKKyAgICAgICAgZSA9IEVULkVsZW1lbnQoJ2ZvbycpCisgICAgICAgIGUuZXh0ZW5kKFtFVC5FbGVtZW50KCdiYXInKV0pCisgICAgICAgIGUuZmluZChNdXRhdGluZ0VsZW1lbnRQYXRoKGUsICd4JykpCisKKyAgICBkZWYgdGVzdF9maW5kX3dpdGhfZXJyb3Ioc2VsZik6CisgICAgICAgIGUgPSBFVC5FbGVtZW50KCdmb28nKQorICAgICAgICBlLmV4dGVuZChbRVQuRWxlbWVudCgnYmFyJyldKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBlLmZpbmQoQmFkRWxlbWVudFBhdGgoJ3gnKSkKKyAgICAgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yOgorICAgICAgICAgICAgcGFzcworCisgICAgZGVmIHRlc3RfZmluZHRleHRfd2l0aF9tdXRhdGluZyhzZWxmKToKKyAgICAgICAgZSA9IEVULkVsZW1lbnQoJ2ZvbycpCisgICAgICAgIGUuZXh0ZW5kKFtFVC5FbGVtZW50KCdiYXInKV0pCisgICAgICAgIGUuZmluZHRleHQoTXV0YXRpbmdFbGVtZW50UGF0aChlLCAneCcpKQorCisgICAgZGVmIHRlc3RfZmluZHRleHRfd2l0aF9lcnJvcihzZWxmKToKKyAgICAgICAgZSA9IEVULkVsZW1lbnQoJ2ZvbycpCisgICAgICAgIGUuZXh0ZW5kKFtFVC5FbGVtZW50KCdiYXInKV0pCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGUuZmluZHRleHQoQmFkRWxlbWVudFBhdGgoJ3gnKSkKKyAgICAgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yOgorICAgICAgICAgICAgcGFzcworCisgICAgZGVmIHRlc3RfZmluZGFsbF93aXRoX211dGF0aW5nKHNlbGYpOgorICAgICAgICBlID0gRVQuRWxlbWVudCgnZm9vJykKKyAgICAgICAgZS5leHRlbmQoW0VULkVsZW1lbnQoJ2JhcicpXSkKKyAgICAgICAgZS5maW5kYWxsKE11dGF0aW5nRWxlbWVudFBhdGgoZSwgJ3gnKSkKKworICAgIGRlZiB0ZXN0X2ZpbmRhbGxfd2l0aF9lcnJvcihzZWxmKToKKyAgICAgICAgZSA9IEVULkVsZW1lbnQoJ2ZvbycpCisgICAgICAgIGUuZXh0ZW5kKFtFVC5FbGVtZW50KCdiYXInKV0pCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGUuZmluZGFsbChCYWRFbGVtZW50UGF0aCgneCcpKQorICAgICAgICBleGNlcHQgWmVyb0RpdmlzaW9uRXJyb3I6CisgICAgICAgICAgICBwYXNzCiAKIAogY2xhc3MgRWxlbWVudFRyZWVUeXBlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC0xNjQzLDYgKzE5NjUsMTEgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLmZpbmQoJy4vdGFnW2xhc3QoKS0xXScpLmF0dHJpYlsnY2xhc3MnXSwgJ2MnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuZmluZCgnLi90YWdbbGFzdCgpLTJdJykuYXR0cmliWydjbGFzcyddLCAnYicpCiAKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleChTeW50YXhFcnJvciwgJ1hQYXRoJywgZS5maW5kLCAnLi90YWdbMF0nKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFN5bnRheEVycm9yLCAnWFBhdGgnLCBlLmZpbmQsICcuL3RhZ1stMV0nKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFN5bnRheEVycm9yLCAnWFBhdGgnLCBlLmZpbmQsICcuL3RhZ1tsYXN0KCktMF0nKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFN5bnRheEVycm9yLCAnWFBhdGgnLCBlLmZpbmQsICcuL3RhZ1tsYXN0KCkrMV0nKQorCiAgICAgZGVmIHRlc3RfZmluZGFsbChzZWxmKToKICAgICAgICAgZSA9IEVULlhNTChTQU1QTEVfWE1MKQogICAgICAgICBlWzJdID0gRVQuWE1MKFNBTVBMRV9TRUNUSU9OKQpAQCAtMTgwOCw2ICsyMTM1LDE5IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5faWxpc3QoZG9jKSwgYWxsX3RhZ3MpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5faWxpc3QoZG9jLCAnKicpLCBhbGxfdGFncykKIAorICAgIGRlZiB0ZXN0X2NvcHkoc2VsZik6CisgICAgICAgIGEgPSBFVC5FbGVtZW50KCdhJykKKyAgICAgICAgaXQgPSBhLml0ZXIoKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBjb3B5LmNvcHkoaXQpCisKKyAgICBkZWYgdGVzdF9waWNrbGUoc2VsZik6CisgICAgICAgIGEgPSBFVC5FbGVtZW50KCdhJykKKyAgICAgICAgaXQgPSBhLml0ZXIoKQorICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoKFR5cGVFcnJvciwgcGlja2xlLlBpY2tsaW5nRXJyb3IpKToKKyAgICAgICAgICAgICAgICBwaWNrbGUuZHVtcHMoaXQsIHByb3RvKQorCiAKIGNsYXNzIFRyZWVCdWlsZGVyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgc2FtcGxlMSA9ICgnPCFET0NUWVBFIGh0bWwgUFVCTElDJwpAQCAtMTkwMiw3ICsyMjQyLDcgQEAKICAgICAgICAgIyBNaW1pY2sgU2ltcGxlVEFMJ3MgYmVoYXZpb3VyIChpc3N1ZSAjMTYwODkpOiBib3RoIHZlcnNpb25zIG9mCiAgICAgICAgICMgVHJlZUJ1aWxkZXIgc2hvdWxkIGJlIGFibGUgdG8gY29wZSB3aXRoIGEgc3ViY2xhc3Mgb2YgdGhlCiAgICAgICAgICMgcHVyZSBQeXRob24gRWxlbWVudCBjbGFzcy4KLSAgICAgICAgYmFzZSA9IEVULl9FbGVtZW50CisgICAgICAgIGJhc2UgPSBFVC5fRWxlbWVudF9QeQogICAgICAgICAjIE5vdCBmcm9tIGEgQyBleHRlbnNpb24KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXNlLl9fbW9kdWxlX18sICd4bWwuZXRyZWUuRWxlbWVudFRyZWUnKQogICAgICAgICAjIEZvcmNlIHNvbWUgbXVsdGlwbGUgaW5oZXJpdGFuY2Ugd2l0aCBhIEMgY2xhc3MgdG8gbWFrZSB0aGluZ3MKQEAgLTE5NjQsNiArMjMwNCwyMCBAQAogICAgICAgICBwYXJzZXIuZmVlZChzZWxmLnNhbXBsZTEpCiAgICAgICAgIHNlbGYuX2NoZWNrX3NhbXBsZV9lbGVtZW50KHBhcnNlci5jbG9zZSgpKQogCisgICAgZGVmIHRlc3RfZG9jdHlwZV93YXJuaW5nKHNlbGYpOgorICAgICAgICBwYXJzZXIgPSBFVC5YTUxQYXJzZXIoKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgIHBhcnNlci5kb2N0eXBlKCdodG1sJywgJy0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOJywKKyAgICAgICAgICAgICAgICAnaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCcpCisgICAgICAgIHBhcnNlci5mZWVkKCc8aHRtbC8+JykKKyAgICAgICAgcGFyc2VyLmNsb3NlKCkKKworICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2Vycm9yJywgRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICAgICAgcGFyc2VyID0gRVQuWE1MUGFyc2VyKCkKKyAgICAgICAgICAgIHBhcnNlci5mZWVkKHNlbGYuc2FtcGxlMikKKyAgICAgICAgICAgIHBhcnNlci5jbG9zZSgpCisKICAgICBkZWYgdGVzdF9zdWJjbGFzc19kb2N0eXBlKHNlbGYpOgogICAgICAgICBfZG9jdHlwZSA9IE5vbmUKICAgICAgICAgY2xhc3MgTXlQYXJzZXJXaXRoRG9jdHlwZShFVC5YTUxQYXJzZXIpOgpAQCAtMTk3OSw2ICsyMzMzLDMyIEBACiAgICAgICAgICAgICAoJ2h0bWwnLCAnLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4nLAogICAgICAgICAgICAgICdodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkJykpCiAKKyAgICAgICAgX2RvY3R5cGUgPSBfZG9jdHlwZTIgPSBOb25lCisgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignZXJyb3InLCBEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgICAgICBjbGFzcyBEb2N0eXBlUGFyc2VyOgorICAgICAgICAgICAgICAgIGRlZiBkb2N0eXBlKHNlbGYsIG5hbWUsIHB1YmlkLCBzeXN0ZW0pOgorICAgICAgICAgICAgICAgICAgICBub25sb2NhbCBfZG9jdHlwZTIKKyAgICAgICAgICAgICAgICAgICAgX2RvY3R5cGUyID0gKG5hbWUsIHB1YmlkLCBzeXN0ZW0pCisKKyAgICAgICAgICAgIHBhcnNlciA9IE15UGFyc2VyV2l0aERvY3R5cGUodGFyZ2V0PURvY3R5cGVQYXJzZXIoKSkKKyAgICAgICAgICAgIHBhcnNlci5mZWVkKHNlbGYuc2FtcGxlMikKKyAgICAgICAgICAgIHBhcnNlci5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShfZG9jdHlwZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX2RvY3R5cGUyLAorICAgICAgICAgICAgICAgICgnaHRtbCcsICctLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTicsCisgICAgICAgICAgICAgICAgICdodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkJykpCisKKyAgICBkZWYgdGVzdF9pbmhlcml0ZWRfZG9jdHlwZShzZWxmKToKKyAgICAgICAgJycnRW5zdXJlIHRoYXQgb3JkaW5hcnkgdXNhZ2UgaXMgbm90IGRlcHJlY2F0ZWQgKElzc3VlIDE5MTc2KScnJworICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2Vycm9yJywgRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICAgICAgY2xhc3MgTXlQYXJzZXJXaXRob3V0RG9jdHlwZShFVC5YTUxQYXJzZXIpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIHBhcnNlciA9IE15UGFyc2VyV2l0aG91dERvY3R5cGUoKQorICAgICAgICAgICAgcGFyc2VyLmZlZWQoc2VsZi5zYW1wbGUyKQorICAgICAgICAgICAgcGFyc2VyLmNsb3NlKCkKKwogICAgIGRlZiB0ZXN0X3BhcnNlX3N0cmluZyhzZWxmKToKICAgICAgICAgcGFyc2VyID0gRVQuWE1MUGFyc2VyKHRhcmdldD1FVC5UcmVlQnVpbGRlcigpKQogICAgICAgICBwYXJzZXIuZmVlZChzZWxmLnNhbXBsZTMpCkBAIC0yMDIyLDYgKzI0MDIsNyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVbLTJdLnRhZywgJ2E4JykKIAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCBsYW1iZGE6IGVbMTJdKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCBsYW1iZGE6IGVbLTEyXSkKIAogICAgIGRlZiB0ZXN0X2dldHNsaWNlX3JhbmdlKHNlbGYpOgogICAgICAgICBlID0gc2VsZi5fbWFrZV9lbGVtX3dpdGhfY2hpbGRyZW4oNikKQEAgLTIwNDAsMTIgKzI0MjEsMTcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9lbGVtX3RhZ3MoZVs6OjNdKSwgWydhMCcsICdhMycsICdhNicsICdhOSddKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2VsZW1fdGFncyhlWzo6OF0pLCBbJ2EwJywgJ2E4J10pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fZWxlbV90YWdzKGVbMTo6OF0pLCBbJ2ExJywgJ2E5J10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fZWxlbV90YWdzKGVbMzo6c3lzLm1heHNpemVdKSwgWydhMyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2VsZW1fdGFncyhlWzM6OnN5cy5tYXhzaXplPDw2NF0pLCBbJ2EzJ10pCiAKICAgICBkZWYgdGVzdF9nZXRzbGljZV9uZWdhdGl2ZV9zdGVwcyhzZWxmKToKICAgICAgICAgZSA9IHNlbGYuX21ha2VfZWxlbV93aXRoX2NoaWxkcmVuKDQpCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9lbGVtX3RhZ3MoZVs6Oi0xXSksIFsnYTMnLCAnYTInLCAnYTEnLCAnYTAnXSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9lbGVtX3RhZ3MoZVs6Oi0yXSksIFsnYTMnLCAnYTEnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9lbGVtX3RhZ3MoZVszOjotc3lzLm1heHNpemVdKSwgWydhMyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2VsZW1fdGFncyhlWzM6Oi1zeXMubWF4c2l6ZS0xXSksIFsnYTMnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9lbGVtX3RhZ3MoZVszOjotc3lzLm1heHNpemU8PDY0XSksIFsnYTMnXSkKIAogICAgIGRlZiB0ZXN0X2RlbHNsaWNlKHNlbGYpOgogICAgICAgICBlID0gc2VsZi5fbWFrZV9lbGVtX3dpdGhfY2hpbGRyZW4oNCkKQEAgLTIwNzIsNiArMjQ1OCw3NSBAQAogICAgICAgICBkZWwgZVs6OjJdCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fc3ViZWxlbV90YWdzKGUpLCBbJ2ExJ10pCiAKKyAgICBkZWYgdGVzdF9zZXRzbGljZV9zaW5nbGVfaW5kZXgoc2VsZik6CisgICAgICAgIGUgPSBzZWxmLl9tYWtlX2VsZW1fd2l0aF9jaGlsZHJlbig0KQorICAgICAgICBlWzFdID0gRVQuRWxlbWVudCgnYicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fc3ViZWxlbV90YWdzKGUpLCBbJ2EwJywgJ2InLCAnYTInLCAnYTMnXSkKKworICAgICAgICBlWy0yXSA9IEVULkVsZW1lbnQoJ2MnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX3N1YmVsZW1fdGFncyhlKSwgWydhMCcsICdiJywgJ2MnLCAnYTMnXSkKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IpOgorICAgICAgICAgICAgZVs1XSA9IEVULkVsZW1lbnQoJ2QnKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IpOgorICAgICAgICAgICAgZVstNV0gPSBFVC5FbGVtZW50KCdkJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9zdWJlbGVtX3RhZ3MoZSksIFsnYTAnLCAnYicsICdjJywgJ2EzJ10pCisKKyAgICBkZWYgdGVzdF9zZXRzbGljZV9yYW5nZShzZWxmKToKKyAgICAgICAgZSA9IHNlbGYuX21ha2VfZWxlbV93aXRoX2NoaWxkcmVuKDQpCisgICAgICAgIGVbMTozXSA9IFtFVC5FbGVtZW50KCdiJXMnICUgaSkgZm9yIGkgaW4gcmFuZ2UoMildCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fc3ViZWxlbV90YWdzKGUpLCBbJ2EwJywgJ2IwJywgJ2IxJywgJ2EzJ10pCisKKyAgICAgICAgZSA9IHNlbGYuX21ha2VfZWxlbV93aXRoX2NoaWxkcmVuKDQpCisgICAgICAgIGVbMTozXSA9IFtFVC5FbGVtZW50KCdiJyldCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fc3ViZWxlbV90YWdzKGUpLCBbJ2EwJywgJ2InLCAnYTMnXSkKKworICAgICAgICBlID0gc2VsZi5fbWFrZV9lbGVtX3dpdGhfY2hpbGRyZW4oNCkKKyAgICAgICAgZVsxOjNdID0gW0VULkVsZW1lbnQoJ2IlcycgJSBpKSBmb3IgaSBpbiByYW5nZSgzKV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9zdWJlbGVtX3RhZ3MoZSksIFsnYTAnLCAnYjAnLCAnYjEnLCAnYjInLCAnYTMnXSkKKworICAgIGRlZiB0ZXN0X3NldHNsaWNlX3N0ZXBzKHNlbGYpOgorICAgICAgICBlID0gc2VsZi5fbWFrZV9lbGVtX3dpdGhfY2hpbGRyZW4oNikKKyAgICAgICAgZVsxOjU6Ml0gPSBbRVQuRWxlbWVudCgnYiVzJyAlIGkpIGZvciBpIGluIHJhbmdlKDIpXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX3N1YmVsZW1fdGFncyhlKSwgWydhMCcsICdiMCcsICdhMicsICdiMScsICdhNCcsICdhNSddKQorCisgICAgICAgIGUgPSBzZWxmLl9tYWtlX2VsZW1fd2l0aF9jaGlsZHJlbig2KQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgZVsxOjU6Ml0gPSBbRVQuRWxlbWVudCgnYicpXQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgZVsxOjU6Ml0gPSBbRVQuRWxlbWVudCgnYiVzJyAlIGkpIGZvciBpIGluIHJhbmdlKDMpXQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgZVsxOjU6Ml0gPSBbXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX3N1YmVsZW1fdGFncyhlKSwgWydhMCcsICdhMScsICdhMicsICdhMycsICdhNCcsICdhNSddKQorCisgICAgICAgIGUgPSBzZWxmLl9tYWtlX2VsZW1fd2l0aF9jaGlsZHJlbig0KQorICAgICAgICBlWzE6OnN5cy5tYXhzaXplXSA9IFtFVC5FbGVtZW50KCdiJyldCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fc3ViZWxlbV90YWdzKGUpLCBbJ2EwJywgJ2InLCAnYTInLCAnYTMnXSkKKyAgICAgICAgZVsxOjpzeXMubWF4c2l6ZTw8NjRdID0gW0VULkVsZW1lbnQoJ2MnKV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9zdWJlbGVtX3RhZ3MoZSksIFsnYTAnLCAnYycsICdhMicsICdhMyddKQorCisgICAgZGVmIHRlc3Rfc2V0c2xpY2VfbmVnYXRpdmVfc3RlcHMoc2VsZik6CisgICAgICAgIGUgPSBzZWxmLl9tYWtlX2VsZW1fd2l0aF9jaGlsZHJlbig0KQorICAgICAgICBlWzI6MDotMV0gPSBbRVQuRWxlbWVudCgnYiVzJyAlIGkpIGZvciBpIGluIHJhbmdlKDIpXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX3N1YmVsZW1fdGFncyhlKSwgWydhMCcsICdiMScsICdiMCcsICdhMyddKQorCisgICAgICAgIGUgPSBzZWxmLl9tYWtlX2VsZW1fd2l0aF9jaGlsZHJlbig0KQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgZVsyOjA6LTFdID0gW0VULkVsZW1lbnQoJ2InKV0KKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGVbMjowOi0xXSA9IFtFVC5FbGVtZW50KCdiJXMnICUgaSkgZm9yIGkgaW4gcmFuZ2UoMyldCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBlWzI6MDotMV0gPSBbXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX3N1YmVsZW1fdGFncyhlKSwgWydhMCcsICdhMScsICdhMicsICdhMyddKQorCisgICAgICAgIGUgPSBzZWxmLl9tYWtlX2VsZW1fd2l0aF9jaGlsZHJlbig0KQorICAgICAgICBlWzE6Oi1zeXMubWF4c2l6ZV0gPSBbRVQuRWxlbWVudCgnYicpXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX3N1YmVsZW1fdGFncyhlKSwgWydhMCcsICdiJywgJ2EyJywgJ2EzJ10pCisgICAgICAgIGVbMTo6LXN5cy5tYXhzaXplLTFdID0gW0VULkVsZW1lbnQoJ2MnKV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9zdWJlbGVtX3RhZ3MoZSksIFsnYTAnLCAnYycsICdhMicsICdhMyddKQorICAgICAgICBlWzE6Oi1zeXMubWF4c2l6ZTw8NjRdID0gW0VULkVsZW1lbnQoJ2QnKV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9zdWJlbGVtX3RhZ3MoZSksIFsnYTAnLCAnZCcsICdhMicsICdhMyddKQorCiAKIGNsYXNzIElPVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgpAQCAtMjA4MiwxNCArMjUzNywyMSBAQAogICAgICAgICBlbGVtID0gRVQuRWxlbWVudCgidGFnIikKICAgICAgICAgZWxlbS50ZXh0ID0gImFiYyIKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXJpYWxpemUoZWxlbSksICc8dGFnPmFiYzwvdGFnPicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VyaWFsaXplKGVsZW0sIGVuY29kaW5nPSJ1dGYtOCIpLAotICAgICAgICAgICAgICAgIGInPHRhZz5hYmM8L3RhZz4nKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlcmlhbGl6ZShlbGVtLCBlbmNvZGluZz0idXMtYXNjaWkiKSwKLSAgICAgICAgICAgICAgICBiJzx0YWc+YWJjPC90YWc+JykKKyAgICAgICAgZm9yIGVuYyBpbiAoInV0Zi04IiwgInVzLWFzY2lpIik6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChlbmMpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VyaWFsaXplKGVsZW0sIGVuY29kaW5nPWVuYyksCisgICAgICAgICAgICAgICAgICAgICAgICBiJzx0YWc+YWJjPC90YWc+JykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlcmlhbGl6ZShlbGVtLCBlbmNvZGluZz1lbmMudXBwZXIoKSksCisgICAgICAgICAgICAgICAgICAgICAgICBiJzx0YWc+YWJjPC90YWc+JykKICAgICAgICAgZm9yIGVuYyBpbiAoImlzby04ODU5LTEiLCAidXRmLTE2IiwgInV0Zi0zMiIpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXJpYWxpemUoZWxlbSwgZW5jb2Rpbmc9ZW5jKSwKLSAgICAgICAgICAgICAgICAgICAgKCI8P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSclcyc/PlxuIgotICAgICAgICAgICAgICAgICAgICAgIjx0YWc+YWJjPC90YWc+IiAlIGVuYykuZW5jb2RlKGVuYykpCisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChlbmMpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VyaWFsaXplKGVsZW0sIGVuY29kaW5nPWVuYyksCisgICAgICAgICAgICAgICAgICAgICAgICAoIjw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9JyVzJz8+XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgIjx0YWc+YWJjPC90YWc+IiAlIGVuYykuZW5jb2RlKGVuYykpCisgICAgICAgICAgICAgICAgdXBwZXIgPSBlbmMudXBwZXIoKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VyaWFsaXplKGVsZW0sIGVuY29kaW5nPXVwcGVyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICgiPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nJXMnPz5cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiPHRhZz5hYmM8L3RhZz4iICUgdXBwZXIpLmVuY29kZShlbmMpKQogCiAgICAgICAgIGVsZW0gPSBFVC5FbGVtZW50KCJ0YWciKQogICAgICAgICBlbGVtLnRleHQgPSAiPCZcIlwnPiIKQEAgLTIyNjEsNiArMjcyMywxOCBAQAogICAgICAgICAgICAgRVQudG9zdHJpbmcocm9vdCwgJ3V0Zi0xNicpLAogICAgICAgICAgICAgYicnLmpvaW4oRVQudG9zdHJpbmdsaXN0KHJvb3QsICd1dGYtMTYnKSkpCiAKKyAgICBkZWYgdGVzdF9zaG9ydF9lbXB0eV9lbGVtZW50cyhzZWxmKToKKyAgICAgICAgcm9vdCA9IEVULmZyb21zdHJpbmcoJzx0YWc+YTx4IC8+Yjx5PjwveT5jPC90YWc+JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIEVULnRvc3RyaW5nKHJvb3QsICd1bmljb2RlJyksCisgICAgICAgICAgICAnPHRhZz5hPHggLz5iPHkgLz5jPC90YWc+JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIEVULnRvc3RyaW5nKHJvb3QsICd1bmljb2RlJywgc2hvcnRfZW1wdHlfZWxlbWVudHM9VHJ1ZSksCisgICAgICAgICAgICAnPHRhZz5hPHggLz5iPHkgLz5jPC90YWc+JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIEVULnRvc3RyaW5nKHJvb3QsICd1bmljb2RlJywgc2hvcnRfZW1wdHlfZWxlbWVudHM9RmFsc2UpLAorICAgICAgICAgICAgJzx0YWc+YTx4PjwveD5iPHk+PC95PmM8L3RhZz4nKQorCiAKIGNsYXNzIFBhcnNlRXJyb3JUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9zdWJjbGFzcyhzZWxmKToKQEAgLTIzMjYsOCArMjgwMCwxMSBAQAogCiAgICAgIyBUZXN0IHRoYXQgdGhlIEMgYWNjZWxlcmF0b3Igd2FzIG5vdCBpbXBvcnRlZCBmb3IgcHlFVAogICAgIGRlZiB0ZXN0X2NvcnJlY3RfaW1wb3J0X3B5RVQoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHlFVC5FbGVtZW50Ll9fbW9kdWxlX18sICd4bWwuZXRyZWUuRWxlbWVudFRyZWUnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHB5RVQuU3ViRWxlbWVudC5fX21vZHVsZV9fLCAneG1sLmV0cmVlLkVsZW1lbnRUcmVlJykKKyAgICAgICAgIyBUaGUgdHlwZSBvZiBtZXRob2RzIGRlZmluZWQgaW4gUHl0aG9uIGNvZGUgaXMgdHlwZXMuRnVuY3Rpb25UeXBlLAorICAgICAgICAjIHdoaWxlIHRoZSB0eXBlIG9mIG1ldGhvZHMgZGVmaW5lZCBpbnNpZGUgX2VsZW1lbnR0cmVlIGlzCisgICAgICAgICMgPGNsYXNzICd3cmFwcGVyX2Rlc2NyaXB0b3InPgorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocHlFVC5FbGVtZW50Ll9faW5pdF9fLCB0eXBlcy5GdW5jdGlvblR5cGUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShweUVULlhNTFBhcnNlci5fX2luaXRfXywgdHlwZXMuRnVuY3Rpb25UeXBlKQogCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTIzODgsNiArMjg2NSw4IEBACiAgICAgICAgIE1vZHVsZVRlc3QsCiAgICAgICAgIEVsZW1lbnRTbGljaW5nVGVzdCwKICAgICAgICAgQmFzaWNFbGVtZW50VGVzdCwKKyAgICAgICAgQmFkRWxlbWVudFRlc3QsCisgICAgICAgIEJhZEVsZW1lbnRQYXRoVGVzdCwKICAgICAgICAgRWxlbWVudFRyZWVUZXN0LAogICAgICAgICBJT1Rlc3QsCiAgICAgICAgIFBhcnNlRXJyb3JUZXN0LApAQCAtMjM5Nyw2ICsyODc2LDcgQEAKICAgICAgICAgRWxlbWVudEl0ZXJUZXN0LAogICAgICAgICBUcmVlQnVpbGRlclRlc3QsCiAgICAgICAgIFhNTFBhcnNlclRlc3QsCisgICAgICAgIFhNTFB1bGxQYXJzZXJUZXN0LAogICAgICAgICBCdWdzVGVzdCwKICAgICAgICAgXQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3htbF9ldHJlZV9jLnB5IGIvTGliL3Rlc3QvdGVzdF94bWxfZXRyZWVfYy5weQppbmRleCBkMDRiN2RjLi40MDllYzZhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3htbF9ldHJlZV9jLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfeG1sX2V0cmVlX2MucHkKQEAgLTIsNiArMiw3IEBACiBpbXBvcnQgc3lzLCBzdHJ1Y3QKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IGltcG9ydF9mcmVzaF9tb2R1bGUKK2ltcG9ydCB0eXBlcwogaW1wb3J0IHVuaXR0ZXN0CiAKIGNFVCA9IGltcG9ydF9mcmVzaF9tb2R1bGUoJ3htbC5ldHJlZS5FbGVtZW50VHJlZScsCkBAIC0yMSw2ICsyMiwzOCBAQAogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgZGF0YSA9IE5vbmUKIAorICAgIGRlZiB0ZXN0X2RlbF9hdHRyaWJ1dGUoc2VsZik6CisgICAgICAgIGVsZW1lbnQgPSBjRVQuRWxlbWVudCgndGFnJykKKworICAgICAgICBlbGVtZW50LnRhZyA9ICdUQUcnCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IpOgorICAgICAgICAgICAgZGVsIGVsZW1lbnQudGFnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZWxlbWVudC50YWcsICdUQUcnKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IpOgorICAgICAgICAgICAgZGVsIGVsZW1lbnQudGV4dAorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShlbGVtZW50LnRleHQpCisgICAgICAgIGVsZW1lbnQudGV4dCA9ICdURVhUJworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yKToKKyAgICAgICAgICAgIGRlbCBlbGVtZW50LnRleHQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbGVtZW50LnRleHQsICdURVhUJykKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yKToKKyAgICAgICAgICAgIGRlbCBlbGVtZW50LnRhaWwKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZWxlbWVudC50YWlsKQorICAgICAgICBlbGVtZW50LnRhaWwgPSAnVEFJTCcKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvcik6CisgICAgICAgICAgICBkZWwgZWxlbWVudC50YWlsCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZWxlbWVudC50YWlsLCAnVEFJTCcpCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvcik6CisgICAgICAgICAgICBkZWwgZWxlbWVudC5hdHRyaWIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbGVtZW50LmF0dHJpYiwge30pCisgICAgICAgIGVsZW1lbnQuYXR0cmliID0geydBJzogJ0InLCAnQyc6ICdEJ30KKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvcik6CisgICAgICAgICAgICBkZWwgZWxlbWVudC5hdHRyaWIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbGVtZW50LmF0dHJpYiwgeydBJzogJ0InLCAnQyc6ICdEJ30pCisKIAogQHVuaXR0ZXN0LnNraXBVbmxlc3MoY0VULCAncmVxdWlyZXMgX2VsZW1lbnR0cmVlJykKIGNsYXNzIFRlc3RBbGlhc1dvcmtpbmcodW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtMzEsMTQgKzY0LDIyIEBACiAKIAogQHVuaXR0ZXN0LnNraXBVbmxlc3MoY0VULCAncmVxdWlyZXMgX2VsZW1lbnR0cmVlJykKK0BzdXBwb3J0LmNweXRob25fb25seQogY2xhc3MgVGVzdEFjY2VsZXJhdG9ySW1wb3J0ZWQodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICMgVGVzdCB0aGF0IHRoZSBDIGFjY2VsZXJhdG9yIHdhcyBpbXBvcnRlZCwgYXMgZXhwZWN0ZWQKICAgICBkZWYgdGVzdF9jb3JyZWN0X2ltcG9ydF9jRVQoc2VsZik6CisgICAgICAgICMgU3ViRWxlbWVudCBpcyBhIGZ1bmN0aW9uIHNvIGl0IHJldGFpbnMgX2VsZW1lbnR0cmVlIGFzIGl0cyBtb2R1bGUuCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY0VULlN1YkVsZW1lbnQuX19tb2R1bGVfXywgJ19lbGVtZW50dHJlZScpCiAKICAgICBkZWYgdGVzdF9jb3JyZWN0X2ltcG9ydF9jRVRfYWxpYXMoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY0VUX2FsaWFzLlN1YkVsZW1lbnQuX19tb2R1bGVfXywgJ19lbGVtZW50dHJlZScpCiAKKyAgICBkZWYgdGVzdF9wYXJzZXJfY29tZXNfZnJvbV9DKHNlbGYpOgorICAgICAgICAjIFRoZSB0eXBlIG9mIG1ldGhvZHMgZGVmaW5lZCBpbiBQeXRob24gY29kZSBpcyB0eXBlcy5GdW5jdGlvblR5cGUsCisgICAgICAgICMgd2hpbGUgdGhlIHR5cGUgb2YgbWV0aG9kcyBkZWZpbmVkIGluc2lkZSBfZWxlbWVudHRyZWUgaXMKKyAgICAgICAgIyA8Y2xhc3MgJ3dyYXBwZXJfZGVzY3JpcHRvcic+CisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZShjRVQuRWxlbWVudC5fX2luaXRfXywgdHlwZXMuRnVuY3Rpb25UeXBlKQorCiAKIEB1bml0dGVzdC5za2lwVW5sZXNzKGNFVCwgJ3JlcXVpcmVzIF9lbGVtZW50dHJlZScpCiBAc3VwcG9ydC5jcHl0aG9uX29ubHkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfeG1scnBjLnB5IGIvTGliL3Rlc3QvdGVzdF94bWxycGMucHkKaW5kZXggZmUyYmYwMy4uN2FlMGRjZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF94bWxycGMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF94bWxycGMucHkKQEAgLTE1LDYgKzE1LDEwIEBACiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIAogdHJ5OgorICAgIGltcG9ydCBnemlwCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgZ3ppcCA9IE5vbmUKK3RyeToKICAgICBpbXBvcnQgdGhyZWFkaW5nCiBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgdGhyZWFkaW5nID0gTm9uZQpAQCAtMjE2LDcgKzIyMCw3IEBACiAgICAgICAgICAgICB4bWxycGMuY2xpZW50LlNlcnZlclByb3h5KCdodHRwczovL2xvY2FsaG9zdDo5OTk5JykuYmFkX2Z1bmN0aW9uKCkKICAgICAgICAgZXhjZXB0IE5vdEltcGxlbWVudGVkRXJyb3I6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc19zc2wsICJ4bWxycGMgY2xpZW50J3MgZXJyb3Igd2l0aCBTU0wgc3VwcG9ydCIpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc19zc2wpCiAKIGNsYXNzIEhlbHBlclRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTM3Niw2ICszODAsMTEgQEAKICAgICAgICAgICAgIGlmIG5hbWUgPT0gJ2Rpdic6CiAgICAgICAgICAgICAgICAgcmV0dXJuICdUaGlzIGlzIHRoZSBkaXYgZnVuY3Rpb24nCiAKKyAgICAgICAgY2xhc3MgRml4dHVyZToKKyAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAgIGRlZiBnZXREYXRhKCk6CisgICAgICAgICAgICAgICAgcmV0dXJuICc0MicKKwogICAgIGRlZiBteV9mdW5jdGlvbigpOgogICAgICAgICAnJydUaGlzIGlzIG15IGZ1bmN0aW9uJycnCiAgICAgICAgIHJldHVybiBUcnVlCkBAIC00MDcsNyArNDE2LDggQEAKICAgICAgICAgc2Vydi5yZWdpc3Rlcl9mdW5jdGlvbihwb3cpCiAgICAgICAgIHNlcnYucmVnaXN0ZXJfZnVuY3Rpb24obGFtYmRhIHgseTogeCt5LCAnYWRkJykKICAgICAgICAgc2Vydi5yZWdpc3Rlcl9mdW5jdGlvbihteV9mdW5jdGlvbikKLSAgICAgICAgc2Vydi5yZWdpc3Rlcl9pbnN0YW5jZShUZXN0SW5zdGFuY2VDbGFzcygpKQorICAgICAgICB0ZXN0SW5zdGFuY2UgPSBUZXN0SW5zdGFuY2VDbGFzcygpCisgICAgICAgIHNlcnYucmVnaXN0ZXJfaW5zdGFuY2UodGVzdEluc3RhbmNlLCBhbGxvd19kb3R0ZWRfbmFtZXM9VHJ1ZSkKICAgICAgICAgZXZ0LnNldCgpCiAKICAgICAgICAgIyBoYW5kbGUgdXAgdG8gJ251bXJlcXVlc3RzJyByZXF1ZXN0cwpAQCAtNTAwLDE0ICs1MTAsMTQgQEAKICAgICAgICAgICAgIHJldHVybiBUcnVlCiAgICAgICAgIGV4Y19tZXNzID0gZS5oZWFkZXJzLmdldCgnWC1leGNlcHRpb24nKQogICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICAgICAgIyBJZ25vcmUgc29ja2V0LmVycm9ycyBoZXJlLgorICAgICAgICAjIElnbm9yZSBPU0Vycm9ycyBoZXJlLgogICAgICAgICBleGNfbWVzcyA9IHN0cihlKQogCiAgICAgaWYgZXhjX21lc3MgYW5kICd0ZW1wb3JhcmlseSB1bmF2YWlsYWJsZScgaW4gZXhjX21lc3MubG93ZXIoKToKICAgICAgICAgcmV0dXJuIFRydWUKIAogZGVmIG1ha2VfcmVxdWVzdF9hbmRfc2tpcElmKGNvbmRpdGlvbiwgcmVhc29uKToKLSAgICAjIElmIHdlIHNraXAgdGhlIHRlc3QsIHdlIGhhdmUgdG8gbWFrZSBhIHJlcXVlc3QgYmVjYXVzZSB0aGUKKyAgICAjIElmIHdlIHNraXAgdGhlIHRlc3QsIHdlIGhhdmUgdG8gbWFrZSBhIHJlcXVlc3QgYmVjYXVzZQogICAgICMgdGhlIHNlcnZlciBjcmVhdGVkIGluIHNldFVwIGJsb2NrcyBleHBlY3Rpbmcgb25lIHRvIGNvbWUgaW4uCiAgICAgaWYgbm90IGNvbmRpdGlvbjoKICAgICAgICAgcmV0dXJuIGxhbWJkYSBmdW5jOiBmdW5jCkBAIC01MTUsNyArNTI1LDcgQEAKICAgICAgICAgZGVmIG1ha2VfcmVxdWVzdF9hbmRfc2tpcChzZWxmKToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICB4bWxycGNsaWIuU2VydmVyUHJveHkoVVJMKS5teV9mdW5jdGlvbigpCi0gICAgICAgICAgICBleGNlcHQgKHhtbHJwY2xpYi5Qcm90b2NvbEVycm9yLCBzb2NrZXQuZXJyb3IpIGFzIGU6CisgICAgICAgICAgICBleGNlcHQgKHhtbHJwY2xpYi5Qcm90b2NvbEVycm9yLCBPU0Vycm9yKSBhcyBlOgogICAgICAgICAgICAgICAgIGlmIG5vdCBpc191bmF2YWlsYWJsZV9leGNlcHRpb24oZSk6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdChyZWFzb24pCkBAIC01NTMsNyArNTYzLDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcCA9IHhtbHJwY2xpYi5TZXJ2ZXJQcm94eShVUkwpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucG93KDYsOCksIDYqKjgpCi0gICAgICAgIGV4Y2VwdCAoeG1scnBjbGliLlByb3RvY29sRXJyb3IsIHNvY2tldC5lcnJvcikgYXMgZToKKyAgICAgICAgZXhjZXB0ICh4bWxycGNsaWIuUHJvdG9jb2xFcnJvciwgT1NFcnJvcikgYXMgZToKICAgICAgICAgICAgICMgaWdub3JlIGZhaWx1cmVzIGR1ZSB0byBub24tYmxvY2tpbmcgc29ja2V0ICd1bmF2YWlsYWJsZScgZXJyb3JzCiAgICAgICAgICAgICBpZiBub3QgaXNfdW5hdmFpbGFibGVfZXhjZXB0aW9uKGUpOgogICAgICAgICAgICAgICAgICMgcHJvdG9jb2wgZXJyb3I7IHByb3ZpZGUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBpbiB0ZXN0IG91dHB1dApAQCAtNTY2LDcgKzU3Niw3IEBACiAgICAgICAgICAgICBwID0geG1scnBjbGliLlNlcnZlclByb3h5KFVSTCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5hZGQoc3RhcnRfc3RyaW5nLCBlbmRfc3RyaW5nKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRfc3RyaW5nICsgZW5kX3N0cmluZykKLSAgICAgICAgZXhjZXB0ICh4bWxycGNsaWIuUHJvdG9jb2xFcnJvciwgc29ja2V0LmVycm9yKSBhcyBlOgorICAgICAgICBleGNlcHQgKHhtbHJwY2xpYi5Qcm90b2NvbEVycm9yLCBPU0Vycm9yKSBhcyBlOgogICAgICAgICAgICAgIyBpZ25vcmUgZmFpbHVyZXMgZHVlIHRvIG5vbi1ibG9ja2luZyBzb2NrZXQgJ3VuYXZhaWxhYmxlJyBlcnJvcnMKICAgICAgICAgICAgIGlmIG5vdCBpc191bmF2YWlsYWJsZV9leGNlcHRpb24oZSk6CiAgICAgICAgICAgICAgICAgIyBwcm90b2NvbCBlcnJvcjsgcHJvdmlkZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGluIHRlc3Qgb3V0cHV0CkBAIC01ODcsMTIgKzU5NywxMyBAQAogICAgIGRlZiB0ZXN0X2ludHJvc3BlY3Rpb24xKHNlbGYpOgogICAgICAgICBleHBlY3RlZF9tZXRob2RzID0gc2V0KFsncG93JywgJ2RpdicsICdteV9mdW5jdGlvbicsICdhZGQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3lzdGVtLmxpc3RNZXRob2RzJywgJ3N5c3RlbS5tZXRob2RIZWxwJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N5c3RlbS5tZXRob2RTaWduYXR1cmUnLCAnc3lzdGVtLm11bHRpY2FsbCddKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3lzdGVtLm1ldGhvZFNpZ25hdHVyZScsICdzeXN0ZW0ubXVsdGljYWxsJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ZpeHR1cmUnXSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcCA9IHhtbHJwY2xpYi5TZXJ2ZXJQcm94eShVUkwpCiAgICAgICAgICAgICBtZXRoID0gcC5zeXN0ZW0ubGlzdE1ldGhvZHMoKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQobWV0aCksIGV4cGVjdGVkX21ldGhvZHMpCi0gICAgICAgIGV4Y2VwdCAoeG1scnBjbGliLlByb3RvY29sRXJyb3IsIHNvY2tldC5lcnJvcikgYXMgZToKKyAgICAgICAgZXhjZXB0ICh4bWxycGNsaWIuUHJvdG9jb2xFcnJvciwgT1NFcnJvcikgYXMgZToKICAgICAgICAgICAgICMgaWdub3JlIGZhaWx1cmVzIGR1ZSB0byBub24tYmxvY2tpbmcgc29ja2V0ICd1bmF2YWlsYWJsZScgZXJyb3JzCiAgICAgICAgICAgICBpZiBub3QgaXNfdW5hdmFpbGFibGVfZXhjZXB0aW9uKGUpOgogICAgICAgICAgICAgICAgICMgcHJvdG9jb2wgZXJyb3I7IHByb3ZpZGUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBpbiB0ZXN0IG91dHB1dApAQCAtNjA1LDcgKzYxNiw3IEBACiAgICAgICAgICAgICBwID0geG1scnBjbGliLlNlcnZlclByb3h5KFVSTCkKICAgICAgICAgICAgIGRpdmhlbHAgPSBwLnN5c3RlbS5tZXRob2RIZWxwKCdkaXYnKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXZoZWxwLCAnVGhpcyBpcyB0aGUgZGl2IGZ1bmN0aW9uJykKLSAgICAgICAgZXhjZXB0ICh4bWxycGNsaWIuUHJvdG9jb2xFcnJvciwgc29ja2V0LmVycm9yKSBhcyBlOgorICAgICAgICBleGNlcHQgKHhtbHJwY2xpYi5Qcm90b2NvbEVycm9yLCBPU0Vycm9yKSBhcyBlOgogICAgICAgICAgICAgIyBpZ25vcmUgZmFpbHVyZXMgZHVlIHRvIG5vbi1ibG9ja2luZyBzb2NrZXQgJ3VuYXZhaWxhYmxlJyBlcnJvcnMKICAgICAgICAgICAgIGlmIG5vdCBpc191bmF2YWlsYWJsZV9leGNlcHRpb24oZSk6CiAgICAgICAgICAgICAgICAgIyBwcm90b2NvbCBlcnJvcjsgcHJvdmlkZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGluIHRlc3Qgb3V0cHV0CkBAIC02MTksNyArNjMwLDcgQEAKICAgICAgICAgICAgIHAgPSB4bWxycGNsaWIuU2VydmVyUHJveHkoVVJMKQogICAgICAgICAgICAgbXlmdW5jdGlvbiA9IHAuc3lzdGVtLm1ldGhvZEhlbHAoJ215X2Z1bmN0aW9uJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXlmdW5jdGlvbiwgJ1RoaXMgaXMgbXkgZnVuY3Rpb24nKQotICAgICAgICBleGNlcHQgKHhtbHJwY2xpYi5Qcm90b2NvbEVycm9yLCBzb2NrZXQuZXJyb3IpIGFzIGU6CisgICAgICAgIGV4Y2VwdCAoeG1scnBjbGliLlByb3RvY29sRXJyb3IsIE9TRXJyb3IpIGFzIGU6CiAgICAgICAgICAgICAjIGlnbm9yZSBmYWlsdXJlcyBkdWUgdG8gbm9uLWJsb2NraW5nIHNvY2tldCAndW5hdmFpbGFibGUnIGVycm9ycwogICAgICAgICAgICAgaWYgbm90IGlzX3VuYXZhaWxhYmxlX2V4Y2VwdGlvbihlKToKICAgICAgICAgICAgICAgICAjIHByb3RvY29sIGVycm9yOyBwcm92aWRlIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gaW4gdGVzdCBvdXRwdXQKQEAgLTYzMiw3ICs2NDMsNyBAQAogICAgICAgICAgICAgcCA9IHhtbHJwY2xpYi5TZXJ2ZXJQcm94eShVUkwpCiAgICAgICAgICAgICBkaXZzaWcgPSBwLnN5c3RlbS5tZXRob2RTaWduYXR1cmUoJ2RpdicpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpdnNpZywgJ3NpZ25hdHVyZXMgbm90IHN1cHBvcnRlZCcpCi0gICAgICAgIGV4Y2VwdCAoeG1scnBjbGliLlByb3RvY29sRXJyb3IsIHNvY2tldC5lcnJvcikgYXMgZToKKyAgICAgICAgZXhjZXB0ICh4bWxycGNsaWIuUHJvdG9jb2xFcnJvciwgT1NFcnJvcikgYXMgZToKICAgICAgICAgICAgICMgaWdub3JlIGZhaWx1cmVzIGR1ZSB0byBub24tYmxvY2tpbmcgc29ja2V0ICd1bmF2YWlsYWJsZScgZXJyb3JzCiAgICAgICAgICAgICBpZiBub3QgaXNfdW5hdmFpbGFibGVfZXhjZXB0aW9uKGUpOgogICAgICAgICAgICAgICAgICMgcHJvdG9jb2wgZXJyb3I7IHByb3ZpZGUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBpbiB0ZXN0IG91dHB1dApAQCAtNjQ5LDcgKzY2MCw3IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFkZF9yZXN1bHQsIDIrMykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG93X3Jlc3VsdCwgNioqOCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGl2X3Jlc3VsdCwgMTI3Ly80MikKLSAgICAgICAgZXhjZXB0ICh4bWxycGNsaWIuUHJvdG9jb2xFcnJvciwgc29ja2V0LmVycm9yKSBhcyBlOgorICAgICAgICBleGNlcHQgKHhtbHJwY2xpYi5Qcm90b2NvbEVycm9yLCBPU0Vycm9yKSBhcyBlOgogICAgICAgICAgICAgIyBpZ25vcmUgZmFpbHVyZXMgZHVlIHRvIG5vbi1ibG9ja2luZyBzb2NrZXQgJ3VuYXZhaWxhYmxlJyBlcnJvcnMKICAgICAgICAgICAgIGlmIG5vdCBpc191bmF2YWlsYWJsZV9leGNlcHRpb24oZSk6CiAgICAgICAgICAgICAgICAgIyBwcm90b2NvbCBlcnJvcjsgcHJvdmlkZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGluIHRlc3Qgb3V0cHV0CkBAIC02NzAsNyArNjgxLDcgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnJlc3VsdHNbMF1bJ2ZhdWx0U3RyaW5nJ10sCiAgICAgICAgICAgICAgICAgJzxjbGFzcyBcJ0V4Y2VwdGlvblwnPjptZXRob2QgInRoaXNfaXNfbm90X2V4aXN0cyIgJwogICAgICAgICAgICAgICAgICdpcyBub3Qgc3VwcG9ydGVkJykKLSAgICAgICAgZXhjZXB0ICh4bWxycGNsaWIuUHJvdG9jb2xFcnJvciwgc29ja2V0LmVycm9yKSBhcyBlOgorICAgICAgICBleGNlcHQgKHhtbHJwY2xpYi5Qcm90b2NvbEVycm9yLCBPU0Vycm9yKSBhcyBlOgogICAgICAgICAgICAgIyBpZ25vcmUgZmFpbHVyZXMgZHVlIHRvIG5vbi1ibG9ja2luZyBzb2NrZXQgJ3VuYXZhaWxhYmxlJyBlcnJvcnMKICAgICAgICAgICAgIGlmIG5vdCBpc191bmF2YWlsYWJsZV9leGNlcHRpb24oZSk6CiAgICAgICAgICAgICAgICAgIyBwcm90b2NvbCBlcnJvcjsgcHJvdmlkZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGluIHRlc3Qgb3V0cHV0CkBAIC02ODYsNiArNjk3LDEyIEBACiAgICAgICAgICMgVGhpcyBhdm9pZHMgd2FpdGluZyBmb3IgdGhlIHNvY2tldCB0aW1lb3V0LgogICAgICAgICBzZWxmLnRlc3Rfc2ltcGxlMSgpCiAKKyAgICBkZWYgdGVzdF9hbGxvd19kb3R0ZWRfbmFtZXNfdHJ1ZShzZWxmKToKKyAgICAgICAgIyBYWFggYWxzbyBuZWVkIGFsbG93X2RvdHRlZF9uYW1lc19mYWxzZSB0ZXN0LgorICAgICAgICBzZXJ2ZXIgPSB4bWxycGNsaWIuU2VydmVyUHJveHkoImh0dHA6Ly8lczolZC9SUEMyIiAlIChBRERSLCBQT1JUKSkKKyAgICAgICAgZGF0YSA9IHNlcnZlci5GaXh0dXJlLmdldERhdGEoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsICc0MicpCisKICAgICBkZWYgdGVzdF91bmljb2RlX2hvc3Qoc2VsZik6CiAgICAgICAgIHNlcnZlciA9IHhtbHJwY2xpYi5TZXJ2ZXJQcm94eSgiaHR0cDovLyVzOiVkL1JQQzIiICUgKEFERFIsIFBPUlQpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlcnZlci5hZGQoImEiLCAiXHhlOSIpLCAiYVx4ZTkiKQpAQCAtNzkzLDYgKzgxMCw3IEBACiAKICNBIHRlc3QgY2FzZSB0aGF0IHZlcmlmaWVzIHRoYXQgZ3ppcCBlbmNvZGluZyB3b3JrcyBpbiBib3RoIGRpcmVjdGlvbnMKICMoZm9yIGEgcmVxdWVzdCBhbmQgdGhlIHJlc3BvbnNlKQorQHVuaXR0ZXN0LnNraXBJZihnemlwIGlzIE5vbmUsICdyZXF1aXJlcyBnemlwJykKIGNsYXNzIEd6aXBTZXJ2ZXJUZXN0Q2FzZShCYXNlU2VydmVyVGVzdENhc2UpOgogICAgICNhIHJlcXVlc3QgaGFuZGxlciB0aGF0IHN1cHBvcnRzIGtlZXAtYWxpdmUgYW5kIGxvZ3MgcmVxdWVzdHMgaW50byBhCiAgICAgI2NsYXNzIHZhcmlhYmxlCkBAIC04NjAsNiArODc4LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGE+YikKIAogCitAdW5pdHRlc3Quc2tpcElmKGd6aXAgaXMgTm9uZSwgJ3JlcXVpcmVzIGd6aXAnKQogY2xhc3MgR3ppcFV0aWxUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgdGVzdF9nemlwX2RlY29kZV9saW1pdChzZWxmKToKQEAgLTg3Miw4ICs4OTEsOCBAQAogICAgICAgICBkYXRhID0gYidcMCcgKiAobWF4X2d6aXBfZGVjb2RlICsgMSkKICAgICAgICAgZW5jb2RlZCA9IHhtbHJwY2xpYi5nemlwX2VuY29kZShkYXRhKQogCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleHAoVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWF4IGd6aXBwZWQgcGF5bG9hZCBsZW5ndGggZXhjZWVkZWQiKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWF4IGd6aXBwZWQgcGF5bG9hZCBsZW5ndGggZXhjZWVkZWQiKToKICAgICAgICAgICAgIHhtbHJwY2xpYi5nemlwX2RlY29kZShlbmNvZGVkKQogCiAgICAgICAgIHhtbHJwY2xpYi5nemlwX2RlY29kZShlbmNvZGVkLCBtYXhfZGVjb2RlPS0xKQpAQCAtOTQzLDcgKzk2Miw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHAgPSB4bWxycGNsaWIuU2VydmVyUHJveHkoVVJMKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnBvdyg2LDgpLCA2Kio4KQotICAgICAgICBleGNlcHQgKHhtbHJwY2xpYi5Qcm90b2NvbEVycm9yLCBzb2NrZXQuZXJyb3IpIGFzIGU6CisgICAgICAgIGV4Y2VwdCAoeG1scnBjbGliLlByb3RvY29sRXJyb3IsIE9TRXJyb3IpIGFzIGU6CiAgICAgICAgICAgICAjIGlnbm9yZSBmYWlsdXJlcyBkdWUgdG8gbm9uLWJsb2NraW5nIHNvY2tldCAndW5hdmFpbGFibGUnIGVycm9ycwogICAgICAgICAgICAgaWYgbm90IGlzX3VuYXZhaWxhYmxlX2V4Y2VwdGlvbihlKToKICAgICAgICAgICAgICAgICAjIHByb3RvY29sIGVycm9yOyBwcm92aWRlIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gaW4gdGVzdCBvdXRwdXQKQEAgLTk1Niw3ICs5NzUsNyBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBwID0geG1scnBjbGliLlNlcnZlclByb3h5KFVSTCkKICAgICAgICAgICAgIHAucG93KDYsOCkKLSAgICAgICAgZXhjZXB0ICh4bWxycGNsaWIuUHJvdG9jb2xFcnJvciwgc29ja2V0LmVycm9yKSBhcyBlOgorICAgICAgICBleGNlcHQgKHhtbHJwY2xpYi5Qcm90b2NvbEVycm9yLCBPU0Vycm9yKSBhcyBlOgogICAgICAgICAgICAgIyBpZ25vcmUgZmFpbHVyZXMgZHVlIHRvIG5vbi1ibG9ja2luZyBzb2NrZXQgJ3VuYXZhaWxhYmxlJyBlcnJvcnMKICAgICAgICAgICAgIGlmIG5vdCBpc191bmF2YWlsYWJsZV9leGNlcHRpb24oZSkgYW5kIGhhc2F0dHIoZSwgImhlYWRlcnMiKToKICAgICAgICAgICAgICAgICAjIFRoZSB0d28gc2VydmVyLXNpZGUgZXJyb3IgaGVhZGVycyBzaG91bGRuJ3QgYmUgc2VudCBiYWNrIGluIHRoaXMgY2FzZQpAQCAtOTc2LDcgKzk5NSw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHAgPSB4bWxycGNsaWIuU2VydmVyUHJveHkoVVJMKQogICAgICAgICAgICAgcC5wb3coNiw4KQotICAgICAgICBleGNlcHQgKHhtbHJwY2xpYi5Qcm90b2NvbEVycm9yLCBzb2NrZXQuZXJyb3IpIGFzIGU6CisgICAgICAgIGV4Y2VwdCAoeG1scnBjbGliLlByb3RvY29sRXJyb3IsIE9TRXJyb3IpIGFzIGU6CiAgICAgICAgICAgICAjIGlnbm9yZSBmYWlsdXJlcyBkdWUgdG8gbm9uLWJsb2NraW5nIHNvY2tldCAndW5hdmFpbGFibGUnIGVycm9ycwogICAgICAgICAgICAgaWYgbm90IGlzX3VuYXZhaWxhYmxlX2V4Y2VwdGlvbihlKSBhbmQgaGFzYXR0cihlLCAiaGVhZGVycyIpOgogICAgICAgICAgICAgICAgICMgV2Ugc2hvdWxkIGdldCBlcnJvciBpbmZvIGluIHRoZSByZXNwb25zZQpAQCAtMTEwNCwyNCArMTEyMywxMyBAQAogCiBAc3VwcG9ydC5yZWFwX3RocmVhZHMKIGRlZiB0ZXN0X21haW4oKToKLSAgICB4bWxycGNfdGVzdHMgPSBbWE1MUlBDVGVzdENhc2UsIEhlbHBlclRlc3RDYXNlLCBEYXRlVGltZVRlc3RDYXNlLAotICAgICAgICAgQmluYXJ5VGVzdENhc2UsIEZhdWx0VGVzdENhc2VdCi0gICAgeG1scnBjX3Rlc3RzLmFwcGVuZChVc2VCdWlsdGluVHlwZXNUZXN0Q2FzZSkKLSAgICB4bWxycGNfdGVzdHMuYXBwZW5kKFNpbXBsZVNlcnZlclRlc3RDYXNlKQotICAgIHhtbHJwY190ZXN0cy5hcHBlbmQoS2VlcGFsaXZlU2VydmVyVGVzdENhc2UxKQotICAgIHhtbHJwY190ZXN0cy5hcHBlbmQoS2VlcGFsaXZlU2VydmVyVGVzdENhc2UyKQotICAgIHRyeToKLSAgICAgICAgaW1wb3J0IGd6aXAKLSAgICAgICAgeG1scnBjX3Rlc3RzLmFwcGVuZChHemlwU2VydmVyVGVzdENhc2UpCi0gICAgICAgIHhtbHJwY190ZXN0cy5hcHBlbmQoR3ppcFV0aWxUZXN0Q2FzZSkKLSAgICBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgICAgIHBhc3MgI2d6aXAgbm90IHN1cHBvcnRlZCBpbiB0aGlzIGJ1aWxkCi0gICAgeG1scnBjX3Rlc3RzLmFwcGVuZChNdWx0aVBhdGhTZXJ2ZXJUZXN0Q2FzZSkKLSAgICB4bWxycGNfdGVzdHMuYXBwZW5kKFNlcnZlclByb3h5VGVzdENhc2UpCi0gICAgeG1scnBjX3Rlc3RzLmFwcGVuZChGYWlsaW5nU2VydmVyVGVzdENhc2UpCi0gICAgeG1scnBjX3Rlc3RzLmFwcGVuZChDR0lIYW5kbGVyVGVzdENhc2UpCisgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoWE1MUlBDVGVzdENhc2UsIEhlbHBlclRlc3RDYXNlLCBEYXRlVGltZVRlc3RDYXNlLAorICAgICAgICAgICAgQmluYXJ5VGVzdENhc2UsIEZhdWx0VGVzdENhc2UsIFVzZUJ1aWx0aW5UeXBlc1Rlc3RDYXNlLAorICAgICAgICAgICAgU2ltcGxlU2VydmVyVGVzdENhc2UsIEtlZXBhbGl2ZVNlcnZlclRlc3RDYXNlMSwKKyAgICAgICAgICAgIEtlZXBhbGl2ZVNlcnZlclRlc3RDYXNlMiwgR3ppcFNlcnZlclRlc3RDYXNlLCBHemlwVXRpbFRlc3RDYXNlLAorICAgICAgICAgICAgTXVsdGlQYXRoU2VydmVyVGVzdENhc2UsIFNlcnZlclByb3h5VGVzdENhc2UsIEZhaWxpbmdTZXJ2ZXJUZXN0Q2FzZSwKKyAgICAgICAgICAgIENHSUhhbmRsZXJUZXN0Q2FzZSkKIAotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KCp4bWxycGNfdGVzdHMpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfeG1scnBjX25ldC5weSBiL0xpYi90ZXN0L3Rlc3RfeG1scnBjX25ldC5weQppbmRleCA3N2Y2NmVhLi5iNjBiODJmIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3htbHJwY19uZXQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF94bWxycGNfbmV0LnB5CkBAIC03LDMxICs3LDcgQEAKIAogaW1wb3J0IHhtbHJwYy5jbGllbnQgYXMgeG1scnBjbGliCiAKLWNsYXNzIEN1cnJlbnRUaW1lVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICBkZWYgdGVzdF9jdXJyZW50X3RpbWUoc2VsZik6Ci0gICAgICAgICMgR2V0IHRoZSBjdXJyZW50IHRpbWUgZnJvbSB4bWxycGMuY29tLiAgVGhpcyBjb2RlIGV4ZXJjaXNlcwotICAgICAgICAjIHRoZSBtaW5pbWFsIEhUVFAgZnVuY3Rpb25hbGl0eSBpbiB4bWxycGNsaWIuCi0gICAgICAgIHNlbGYuc2tpcFRlc3QoInRpbWUueG1scnBjLmNvbSBpcyB1bnJlbGlhYmxlIikKLSAgICAgICAgc2VydmVyID0geG1scnBjbGliLlNlcnZlclByb3h5KCJodHRwOi8vdGltZS54bWxycGMuY29tL1JQQzIiKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICB0MCA9IHNlcnZlci5jdXJyZW50VGltZS5nZXRDdXJyZW50VGltZSgpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZToKLSAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoIm5ldHdvcmsgZXJyb3I6ICVzIiAlIGUpCi0KLSAgICAgICAgIyBQZXJmb3JtIGEgbWluaW1hbCBzYW5pdHkgY2hlY2sgb24gdGhlIHJlc3VsdCwganVzdCB0byBiZSBzdXJlCi0gICAgICAgICMgdGhlIHJlcXVlc3QgbWVhbnMgd2hhdCB3ZSB0aGluayBpdCBtZWFucy4KLSAgICAgICAgdDEgPSB4bWxycGNsaWIuRGF0ZVRpbWUoKQotCi0gICAgICAgIGR0MCA9IHhtbHJwY2xpYi5fZGF0ZXRpbWVfdHlwZSh0MC52YWx1ZSkKLSAgICAgICAgZHQxID0geG1scnBjbGliLl9kYXRldGltZV90eXBlKHQxLnZhbHVlKQotICAgICAgICBpZiBkdDAgPiBkdDE6Ci0gICAgICAgICAgICBkZWx0YSA9IGR0MCAtIGR0MQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgZGVsdGEgPSBkdDEgLSBkdDAKLSAgICAgICAgIyBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBzeXN0ZW0gdGltZSBoZXJlIGFuZCB0aGUgc3lzdGVtCi0gICAgICAgICMgdGltZSBvbiB0aGUgc2VydmVyIHNob3VsZCBub3QgYmUgdG9vIGJpZy4KLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRlbHRhLmRheXMgPD0gMSkKK2NsYXNzIFB5dGhvbkJ1aWxkZXJzVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgdGVzdF9weXRob25fYnVpbGRlcnMoc2VsZik6CiAgICAgICAgICMgR2V0IHRoZSBsaXN0IG9mIGJ1aWxkZXJzIGZyb20gdGhlIFhNTFJQQyBidWlsZGJvdCBpbnRlcmZhY2UgYXQKQEAgLTM5LDcgKzE1LDcgQEAKICAgICAgICAgc2VydmVyID0geG1scnBjbGliLlNlcnZlclByb3h5KCJodHRwOi8vYnVpbGRib3QucHl0aG9uLm9yZy9hbGwveG1scnBjLyIpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGJ1aWxkZXJzID0gc2VydmVyLmdldEFsbEJ1aWxkZXJzKCkKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBlOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgibmV0d29yayBlcnJvcjogJXMiICUgZSkKICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGxhbWJkYTogc2VydmVyKCdjbG9zZScpKCkpCiAKQEAgLTUxLDcgKzI3LDcgQEAKIAogZGVmIHRlc3RfbWFpbigpOgogICAgIHN1cHBvcnQucmVxdWlyZXMoIm5ldHdvcmsiKQotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KEN1cnJlbnRUaW1lVGVzdCkKKyAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChQeXRob25CdWlsZGVyc1Rlc3QpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfemlwZmlsZS5weSBiL0xpYi90ZXN0L3Rlc3RfemlwZmlsZS5weQppbmRleCAxMmEwZjcxLi40YmRmN2Q0IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3ppcGZpbGUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF96aXBmaWxlLnB5CkBAIC0xLDkgKzEsOSBAQAoraW1wb3J0IGNvbnRleHRsaWIKIGltcG9ydCBpbwogaW1wb3J0IG9zCiBpbXBvcnQgc3lzCi1pbXBvcnQgaW1wCitpbXBvcnQgaW1wb3J0bGliLnV0aWwKIGltcG9ydCB0aW1lCi1pbXBvcnQgc2h1dGlsCiBpbXBvcnQgc3RydWN0CiBpbXBvcnQgemlwZmlsZQogaW1wb3J0IHVuaXR0ZXN0CkBAIC0xMiw5ICsxMiw5IEBACiBmcm9tIHRlbXBmaWxlIGltcG9ydCBUZW1wb3JhcnlGaWxlCiBmcm9tIHJhbmRvbSBpbXBvcnQgcmFuZGludCwgcmFuZG9tLCBnZXRyYW5kYml0cwogCi1mcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgKFRFU1RGTiwgZmluZGZpbGUsIHVubGluaywKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCAoVEVTVEZOLCBmaW5kZmlsZSwgdW5saW5rLCBybXRyZWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVzX3psaWIsIHJlcXVpcmVzX2J6MiwgcmVxdWlyZXNfbHptYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY2FwdHVyZWRfc3Rkb3V0KQorICAgICAgICAgICAgICAgICAgICAgICAgICBjYXB0dXJlZF9zdGRvdXQsIGNoZWNrX3dhcm5pbmdzKQogCiBURVNURk4yID0gVEVTVEZOICsgIjIiCiBURVNURk5ESVIgPSBURVNURk4gKyAiZCIKQEAgLTI2LDYgKzI2LDkgQEAKICAgICAgICAgICAgICAgICAgICAoJ3ppcHRlc3QyZGlyL3ppcHRlc3QzZGlyL196aXB0ZXN0MycsICdhenN4ZGNmdmdiJyksCiAgICAgICAgICAgICAgICAgICAgKCd6aXB0ZXN0MmRpci96aXB0ZXN0M2Rpci96aXB0ZXN0NGRpci9femlwdGVzdDMnLCAnNnk3dThpOW8wcCcpXQogCitkZWYgZ2V0cmFuZGJ5dGVzKHNpemUpOgorICAgIHJldHVybiBnZXRyYW5kYml0cyg4ICogc2l6ZSkudG9fYnl0ZXMoc2l6ZSwgJ2xpdHRsZScpCisKIGRlZiBnZXRfZmlsZXModGVzdCk6CiAgICAgeWllbGQgVEVTVEZOMgogICAgIHdpdGggVGVtcG9yYXJ5RmlsZSgpIGFzIGY6CkBAIC0zNSw2ICszOCwxMCBAQAogICAgICAgICB5aWVsZCBmCiAgICAgICAgIHRlc3QuYXNzZXJ0RmFsc2UoZi5jbG9zZWQpCiAKK2RlZiBvcGVuVSh6aXBmcCwgZm4pOgorICAgIHdpdGggY2hlY2tfd2FybmluZ3MoKCcnLCBEZXByZWNhdGlvbldhcm5pbmcpKToKKyAgICAgICAgcmV0dXJuIHppcGZwLm9wZW4oZm4sICdyVScpCisKIGNsYXNzIEFic3RyYWN0VGVzdHNXaXRoU291cmNlRmlsZToKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgc2V0VXBDbGFzcyhjbHMpOgpAQCAtMjg2LDcgKzI5Myw3IEBACiAgICAgICAgICMgdGhhbiByZXF1ZXN0ZWQuCiAgICAgICAgIGZvciB0ZXN0X3NpemUgaW4gKDEsIDQwOTUsIDQwOTYsIDQwOTcsIDE2Mzg0KToKICAgICAgICAgICAgIGZpbGVfc2l6ZSA9IHRlc3Rfc2l6ZSArIDEKLSAgICAgICAgICAgIGp1bmsgPSBnZXRyYW5kYml0cyg4ICogZmlsZV9zaXplKS50b19ieXRlcyhmaWxlX3NpemUsICdsaXR0bGUnKQorICAgICAgICAgICAganVuayA9IGdldHJhbmRieXRlcyhmaWxlX3NpemUpCiAgICAgICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShpby5CeXRlc0lPKCksICJ3Iiwgc2VsZi5jb21wcmVzc2lvbikgYXMgemlwZjoKICAgICAgICAgICAgICAgICB6aXBmLndyaXRlc3RyKCdmb28nLCBqdW5rKQogICAgICAgICAgICAgICAgIHdpdGggemlwZi5vcGVuKCdmb28nLCAncicpIGFzIGZwOgpAQCAtNDU5LDcgKzQ2Niw5IEBACiAKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIHNlbGYuX2xpbWl0ID0gemlwZmlsZS5aSVA2NF9MSU1JVAotICAgICAgICB6aXBmaWxlLlpJUDY0X0xJTUlUID0gNQorICAgICAgICBzZWxmLl9maWxlY291bnRfbGltaXQgPSB6aXBmaWxlLlpJUF9GSUxFQ09VTlRfTElNSVQKKyAgICAgICAgemlwZmlsZS5aSVA2NF9MSU1JVCA9IDEwMDAKKyAgICAgICAgemlwZmlsZS5aSVBfRklMRUNPVU5UX0xJTUlUID0gOQogCiAgICAgICAgICMgTWFrZSBhIHNvdXJjZSBmaWxlIHdpdGggc29tZSBsaW5lcwogICAgICAgICB3aXRoIG9wZW4oVEVTVEZOLCAid2IiKSBhcyBmcDoKQEAgLTUyNiw4ICs1MzUsNjcgQEAKICAgICAgICAgZm9yIGYgaW4gZ2V0X2ZpbGVzKHNlbGYpOgogICAgICAgICAgICAgc2VsZi56aXBfdGVzdChmLCBzZWxmLmNvbXByZXNzaW9uKQogCisgICAgZGVmIHRlc3RfdG9vX21hbnlfZmlsZXMoc2VsZik6CisgICAgICAgICMgVGhpcyB0ZXN0IGNoZWNrcyB0aGF0IG1vcmUgdGhhbiA2NGsgZmlsZXMgY2FuIGJlIGFkZGVkIHRvIGFuIGFyY2hpdmUsCisgICAgICAgICMgYW5kIHRoYXQgdGhlIHJlc3VsdGluZyBhcmNoaXZlIGNhbiBiZSByZWFkIHByb3Blcmx5IGJ5IFppcEZpbGUKKyAgICAgICAgemlwZiA9IHppcGZpbGUuWmlwRmlsZShURVNURk4sICJ3Iiwgc2VsZi5jb21wcmVzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd1ppcDY0PVRydWUpCisgICAgICAgIHppcGYuZGVidWcgPSAxMDAKKyAgICAgICAgbnVtZmlsZXMgPSAxNQorICAgICAgICBmb3IgaSBpbiByYW5nZShudW1maWxlcyk6CisgICAgICAgICAgICB6aXBmLndyaXRlc3RyKCJmb28lMDhkIiAlIGksICIlZCIgJSAoaSoqMyAlIDU3KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oemlwZi5uYW1lbGlzdCgpKSwgbnVtZmlsZXMpCisgICAgICAgIHppcGYuY2xvc2UoKQorCisgICAgICAgIHppcGYyID0gemlwZmlsZS5aaXBGaWxlKFRFU1RGTiwgInIiLCBzZWxmLmNvbXByZXNzaW9uKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih6aXBmMi5uYW1lbGlzdCgpKSwgbnVtZmlsZXMpCisgICAgICAgIGZvciBpIGluIHJhbmdlKG51bWZpbGVzKToKKyAgICAgICAgICAgIGNvbnRlbnQgPSB6aXBmMi5yZWFkKCJmb28lMDhkIiAlIGkpLmRlY29kZSgnYXNjaWknKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb250ZW50LCAiJWQiICUgKGkqKjMgJSA1NykpCisgICAgICAgIHppcGYyLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X3Rvb19tYW55X2ZpbGVzX2FwcGVuZChzZWxmKToKKyAgICAgICAgemlwZiA9IHppcGZpbGUuWmlwRmlsZShURVNURk4sICJ3Iiwgc2VsZi5jb21wcmVzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd1ppcDY0PUZhbHNlKQorICAgICAgICB6aXBmLmRlYnVnID0gMTAwCisgICAgICAgIG51bWZpbGVzID0gOQorICAgICAgICBmb3IgaSBpbiByYW5nZShudW1maWxlcyk6CisgICAgICAgICAgICB6aXBmLndyaXRlc3RyKCJmb28lMDhkIiAlIGksICIlZCIgJSAoaSoqMyAlIDU3KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oemlwZi5uYW1lbGlzdCgpKSwgbnVtZmlsZXMpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoemlwZmlsZS5MYXJnZVppcEZpbGUpOgorICAgICAgICAgICAgemlwZi53cml0ZXN0cigiZm9vJTA4ZCIgJSBudW1maWxlcywgYicnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih6aXBmLm5hbWVsaXN0KCkpLCBudW1maWxlcykKKyAgICAgICAgemlwZi5jbG9zZSgpCisKKyAgICAgICAgemlwZiA9IHppcGZpbGUuWmlwRmlsZShURVNURk4sICJhIiwgc2VsZi5jb21wcmVzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd1ppcDY0PUZhbHNlKQorICAgICAgICB6aXBmLmRlYnVnID0gMTAwCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHppcGYubmFtZWxpc3QoKSksIG51bWZpbGVzKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHppcGZpbGUuTGFyZ2VaaXBGaWxlKToKKyAgICAgICAgICAgIHppcGYud3JpdGVzdHIoImZvbyUwOGQiICUgbnVtZmlsZXMsIGInJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oemlwZi5uYW1lbGlzdCgpKSwgbnVtZmlsZXMpCisgICAgICAgIHppcGYuY2xvc2UoKQorCisgICAgICAgIHppcGYgPSB6aXBmaWxlLlppcEZpbGUoVEVTVEZOLCAiYSIsIHNlbGYuY29tcHJlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3daaXA2ND1UcnVlKQorICAgICAgICB6aXBmLmRlYnVnID0gMTAwCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHppcGYubmFtZWxpc3QoKSksIG51bWZpbGVzKQorICAgICAgICBudW1maWxlczIgPSAxNQorICAgICAgICBmb3IgaSBpbiByYW5nZShudW1maWxlcywgbnVtZmlsZXMyKToKKyAgICAgICAgICAgIHppcGYud3JpdGVzdHIoImZvbyUwOGQiICUgaSwgIiVkIiAlIChpKiozICUgNTcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih6aXBmLm5hbWVsaXN0KCkpLCBudW1maWxlczIpCisgICAgICAgIHppcGYuY2xvc2UoKQorCisgICAgICAgIHppcGYyID0gemlwZmlsZS5aaXBGaWxlKFRFU1RGTiwgInIiLCBzZWxmLmNvbXByZXNzaW9uKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih6aXBmMi5uYW1lbGlzdCgpKSwgbnVtZmlsZXMyKQorICAgICAgICBmb3IgaSBpbiByYW5nZShudW1maWxlczIpOgorICAgICAgICAgICAgY29udGVudCA9IHppcGYyLnJlYWQoImZvbyUwOGQiICUgaSkuZGVjb2RlKCdhc2NpaScpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbnRlbnQsICIlZCIgJSAoaSoqMyAlIDU3KSkKKyAgICAgICAgemlwZjIuY2xvc2UoKQorCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgogICAgICAgICB6aXBmaWxlLlpJUDY0X0xJTUlUID0gc2VsZi5fbGltaXQKKyAgICAgICAgemlwZmlsZS5aSVBfRklMRUNPVU5UX0xJTUlUID0gc2VsZi5fZmlsZWNvdW50X2xpbWl0CiAgICAgICAgIHVubGluayhURVNURk4pCiAgICAgICAgIHVubGluayhURVNURk4yKQogCkBAIC01MzcsMTIgKzYwNSwxMiBAQAogICAgIGNvbXByZXNzaW9uID0gemlwZmlsZS5aSVBfU1RPUkVECiAKICAgICBkZWYgbGFyZ2VfZmlsZV9leGNlcHRpb25fdGVzdChzZWxmLCBmLCBjb21wcmVzc2lvbik6Ci0gICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKGYsICJ3IiwgY29tcHJlc3Npb24pIGFzIHppcGZwOgorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShmLCAidyIsIGNvbXByZXNzaW9uLCBhbGxvd1ppcDY0PUZhbHNlKSBhcyB6aXBmcDoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHppcGZpbGUuTGFyZ2VaaXBGaWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgemlwZnAud3JpdGUsIFRFU1RGTiwgImFub3RoZXIubmFtZSIpCiAKICAgICBkZWYgbGFyZ2VfZmlsZV9leGNlcHRpb25fdGVzdDIoc2VsZiwgZiwgY29tcHJlc3Npb24pOgotICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShmLCAidyIsIGNvbXByZXNzaW9uKSBhcyB6aXBmcDoKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoZiwgInciLCBjb21wcmVzc2lvbiwgYWxsb3daaXA2ND1GYWxzZSkgYXMgemlwZnA6CiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh6aXBmaWxlLkxhcmdlWmlwRmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHppcGZwLndyaXRlc3RyLCAiYW5vdGhlci5uYW1lIiwgc2VsZi5kYXRhKQogCkBAIC01ODAsNyArNjQ4LDIxIEBACiAgICAgICAgIGlmIG5hbWUgKyAnbycgbm90IGluIG5hbWVsaXN0OgogICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihuYW1lICsgJ2MnLCBuYW1lbGlzdCkKIAorICAgIGRlZiByZXF1aXJlc1dyaXRlQWNjZXNzKHNlbGYsIHBhdGgpOgorICAgICAgICAjIGVmZmVjdGl2ZV9pZHMgdW5hdmFpbGFibGUgb24gd2luZG93cworICAgICAgICBpZiBub3Qgb3MuYWNjZXNzKHBhdGgsIG9zLldfT0ssCisgICAgICAgICAgICAgICAgICAgICAgICAgZWZmZWN0aXZlX2lkcz1vcy5hY2Nlc3MgaW4gb3Muc3VwcG9ydHNfZWZmZWN0aXZlX2lkcyk6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCdyZXF1aXJlcyB3cml0ZSBhY2Nlc3MgdG8gdGhlIGluc3RhbGxlZCBsb2NhdGlvbicpCisgICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5qb2luKHBhdGgsICd0ZXN0X3ppcGZpbGUudHJ5JykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZmQgPSBvcy5vcGVuKGZpbGVuYW1lLCBvcy5PX1dST05MWSB8IG9zLk9fQ1JFQVQpCisgICAgICAgICAgICBvcy5jbG9zZShmZCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoJ3JlcXVpcmVzIHdyaXRlIGFjY2VzcyB0byB0aGUgaW5zdGFsbGVkIGxvY2F0aW9uJykKKyAgICAgICAgdW5saW5rKGZpbGVuYW1lKQorCiAgICAgZGVmIHRlc3Rfd3JpdGVfcHlmaWxlKHNlbGYpOgorICAgICAgICBzZWxmLnJlcXVpcmVzV3JpdGVBY2Nlc3Mob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSkKICAgICAgICAgd2l0aCBUZW1wb3JhcnlGaWxlKCkgYXMgdCwgemlwZmlsZS5QeVppcEZpbGUodCwgInciKSBhcyB6aXBmcDoKICAgICAgICAgICAgIGZuID0gX19maWxlX18KICAgICAgICAgICAgIGlmIGZuLmVuZHN3aXRoKCcucHljJykgb3IgZm4uZW5kc3dpdGgoJy5weW8nKToKQEAgLTU4OCw3ICs2NzAsNyBAQAogICAgICAgICAgICAgICAgIGlmIG9zLmFsdHNlcCBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICAgICAgcGF0aF9zcGxpdC5leHRlbmQoZm4uc3BsaXQob3MuYWx0c2VwKSkKICAgICAgICAgICAgICAgICBpZiAnX19weWNhY2hlX18nIGluIHBhdGhfc3BsaXQ6Ci0gICAgICAgICAgICAgICAgICAgIGZuID0gaW1wLnNvdXJjZV9mcm9tX2NhY2hlKGZuKQorICAgICAgICAgICAgICAgICAgICBmbiA9IGltcG9ydGxpYi51dGlsLnNvdXJjZV9mcm9tX2NhY2hlKGZuKQogICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgIGZuID0gZm5bOi0xXQogCkBAIC02MTIsNiArNjk0LDcgQEAKICAgICBkZWYgdGVzdF93cml0ZV9weXRob25fcGFja2FnZShzZWxmKToKICAgICAgICAgaW1wb3J0IGVtYWlsCiAgICAgICAgIHBhY2thZ2VkaXIgPSBvcy5wYXRoLmRpcm5hbWUoZW1haWwuX19maWxlX18pCisgICAgICAgIHNlbGYucmVxdWlyZXNXcml0ZUFjY2VzcyhwYWNrYWdlZGlyKQogCiAgICAgICAgIHdpdGggVGVtcG9yYXJ5RmlsZSgpIGFzIHQsIHppcGZpbGUuUHlaaXBGaWxlKHQsICJ3IikgYXMgemlwZnA6CiAgICAgICAgICAgICB6aXBmcC53cml0ZXB5KHBhY2thZ2VkaXIpCkBAIC02MjIsMTYgKzcwNSw0NyBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRDb21waWxlZEluKCdlbWFpbC9fX2luaXRfXy5weScsIG5hbWVzKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRDb21waWxlZEluKCdlbWFpbC9taW1lL3RleHQucHknLCBuYW1lcykKIAorICAgIGRlZiB0ZXN0X3dyaXRlX2ZpbHRlcmVkX3B5dGhvbl9wYWNrYWdlKHNlbGYpOgorICAgICAgICBpbXBvcnQgdGVzdAorICAgICAgICBwYWNrYWdlZGlyID0gb3MucGF0aC5kaXJuYW1lKHRlc3QuX19maWxlX18pCisgICAgICAgIHNlbGYucmVxdWlyZXNXcml0ZUFjY2VzcyhwYWNrYWdlZGlyKQorCisgICAgICAgIHdpdGggVGVtcG9yYXJ5RmlsZSgpIGFzIHQsIHppcGZpbGUuUHlaaXBGaWxlKHQsICJ3IikgYXMgemlwZnA6CisKKyAgICAgICAgICAgICMgZmlyc3QgbWFrZSBzdXJlIHRoYXQgdGhlIHRlc3QgZm9sZGVyIGdpdmVzIGVycm9yIG1lc3NhZ2VzCisgICAgICAgICAgICAjIChvbiB0aGUgYmFkc3ludGF4Xy4uLiBmaWxlcykKKyAgICAgICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgcmVwb3J0U0lPOgorICAgICAgICAgICAgICAgIHppcGZwLndyaXRlcHkocGFja2FnZWRpcikKKyAgICAgICAgICAgIHJlcG9ydFN0ciA9IHJlcG9ydFNJTy5nZXR2YWx1ZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoJ1N5bnRheEVycm9yJyBpbiByZXBvcnRTdHIpCisKKyAgICAgICAgICAgICMgdGhlbiBjaGVjayB0aGF0IHRoZSBmaWx0ZXIgd29ya3Mgb24gdGhlIHdob2xlIHBhY2thZ2UKKyAgICAgICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgcmVwb3J0U0lPOgorICAgICAgICAgICAgICAgIHppcGZwLndyaXRlcHkocGFja2FnZWRpciwgZmlsdGVyZnVuYz1sYW1iZGEgd2hhdGV2ZXI6IEZhbHNlKQorICAgICAgICAgICAgcmVwb3J0U3RyID0gcmVwb3J0U0lPLmdldHZhbHVlKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnU3ludGF4RXJyb3InIG5vdCBpbiByZXBvcnRTdHIpCisKKyAgICAgICAgICAgICMgdGhlbiBjaGVjayB0aGF0IHRoZSBmaWx0ZXIgd29ya3Mgb24gaW5kaXZpZHVhbCBmaWxlcworICAgICAgICAgICAgZGVmIGZpbHRlcihwYXRoKToKKyAgICAgICAgICAgICAgICByZXR1cm4gbm90IG9zLnBhdGguYmFzZW5hbWUocGF0aCkuc3RhcnRzd2l0aCgiYmFkIikKKyAgICAgICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgcmVwb3J0U0lPLCBzZWxmLmFzc2VydFdhcm5zKFVzZXJXYXJuaW5nKToKKyAgICAgICAgICAgICAgICB6aXBmcC53cml0ZXB5KHBhY2thZ2VkaXIsIGZpbHRlcmZ1bmM9ZmlsdGVyKQorICAgICAgICAgICAgcmVwb3J0U3RyID0gcmVwb3J0U0lPLmdldHZhbHVlKCkKKyAgICAgICAgICAgIGlmIHJlcG9ydFN0cjoKKyAgICAgICAgICAgICAgICBwcmludChyZXBvcnRTdHIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoJ1N5bnRheEVycm9yJyBub3QgaW4gcmVwb3J0U3RyKQorCiAgICAgZGVmIHRlc3Rfd3JpdGVfd2l0aF9vcHRpbWl6YXRpb24oc2VsZik6CiAgICAgICAgIGltcG9ydCBlbWFpbAogICAgICAgICBwYWNrYWdlZGlyID0gb3MucGF0aC5kaXJuYW1lKGVtYWlsLl9fZmlsZV9fKQorICAgICAgICBzZWxmLnJlcXVpcmVzV3JpdGVBY2Nlc3MocGFja2FnZWRpcikKICAgICAgICAgIyB1c2UgLnB5YyBpZiBydW5uaW5nIHRlc3QgaW4gb3B0aW1pemF0aW9uIG1vZGUsCiAgICAgICAgICMgdXNlIC5weW8gaWYgcnVubmluZyB0ZXN0IGluIGRlYnVnIG1vZGUKICAgICAgICAgb3B0bGV2ZWwgPSAxIGlmIF9fZGVidWdfXyBlbHNlIDAKICAgICAgICAgZXh0ID0gJy5weW8nIGlmIG9wdGxldmVsID09IDEgZWxzZSAnLnB5YycKIAogICAgICAgICB3aXRoIFRlbXBvcmFyeUZpbGUoKSBhcyB0LCBcCi0gICAgICAgICAgICAgICAgIHppcGZpbGUuUHlaaXBGaWxlKHQsICJ3Iiwgb3B0aW1pemU9b3B0bGV2ZWwpIGFzIHppcGZwOgorICAgICAgICAgICAgIHppcGZpbGUuUHlaaXBGaWxlKHQsICJ3Iiwgb3B0aW1pemU9b3B0bGV2ZWwpIGFzIHppcGZwOgogICAgICAgICAgICAgemlwZnAud3JpdGVweShwYWNrYWdlZGlyKQogCiAgICAgICAgICAgICBuYW1lcyA9IHppcGZwLm5hbWVsaXN0KCkKQEAgLTY1OSwxNCArNzczLDM0IEBACiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbignbW9kMi50eHQnLCBuYW1lcykKIAogICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShURVNURk4yKQorICAgICAgICAgICAgcm10cmVlKFRFU1RGTjIpCisKKyAgICBkZWYgdGVzdF93cml0ZV9weXRob25fZGlyZWN0b3J5X2ZpbHRlcmVkKHNlbGYpOgorICAgICAgICBvcy5ta2RpcihURVNURk4yKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKFRFU1RGTjIsICJtb2QxLnB5IiksICJ3IikgYXMgZnA6CisgICAgICAgICAgICAgICAgZnAud3JpdGUoInByaW50KDQyKVxuIikKKworICAgICAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihURVNURk4yLCAibW9kMi5weSIpLCAidyIpIGFzIGZwOgorICAgICAgICAgICAgICAgIGZwLndyaXRlKCJwcmludCg0MiAqIDQyKVxuIikKKworICAgICAgICAgICAgd2l0aCBUZW1wb3JhcnlGaWxlKCkgYXMgdCwgemlwZmlsZS5QeVppcEZpbGUodCwgInciKSBhcyB6aXBmcDoKKyAgICAgICAgICAgICAgICB6aXBmcC53cml0ZXB5KFRFU1RGTjIsIGZpbHRlcmZ1bmM9bGFtYmRhIGZuOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3QgZm4uZW5kc3dpdGgoJ21vZDIucHknKSkKKworICAgICAgICAgICAgICAgIG5hbWVzID0gemlwZnAubmFtZWxpc3QoKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Q29tcGlsZWRJbignbW9kMS5weScsIG5hbWVzKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ21vZDIucHknLCBuYW1lcykKKworICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgcm10cmVlKFRFU1RGTjIpCiAKICAgICBkZWYgdGVzdF93cml0ZV9ub25fcHlmaWxlKHNlbGYpOgogICAgICAgICB3aXRoIFRlbXBvcmFyeUZpbGUoKSBhcyB0LCB6aXBmaWxlLlB5WmlwRmlsZSh0LCAidyIpIGFzIHppcGZwOgogICAgICAgICAgICAgd2l0aCBvcGVuKFRFU1RGTiwgJ3cnKSBhcyBmOgogICAgICAgICAgICAgICAgIGYud3JpdGUoJ21vc3QgZGVmaW5pdGVseSBub3QgYSBweXRob24gZmlsZScpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIHppcGZwLndyaXRlcHksIFRFU1RGTikKLSAgICAgICAgICAgIG9zLnJlbW92ZShURVNURk4pCisgICAgICAgICAgICB1bmxpbmsoVEVTVEZOKQogCiAgICAgZGVmIHRlc3Rfd3JpdGVfcHlmaWxlX2JhZF9zeW50YXgoc2VsZik6CiAgICAgICAgIG9zLm1rZGlyKFRFU1RGTjIpCkBAIC02ODksNyArODIzLDcgQEAKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdtb2QxLnB5bycsIG5hbWVzKQogCiAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBzaHV0aWwucm10cmVlKFRFU1RGTjIpCisgICAgICAgICAgICBybXRyZWUoVEVTVEZOMikKIAogCiBjbGFzcyBFeHRyYWN0VGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtNzEyLDEwICs4NDYsMTAgQEAKICAgICAgICAgICAgICAgICB3aXRoIG9wZW4od3JpdHRlbmZpbGUsICJyYiIpIGFzIGY6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmRhdGEuZW5jb2RlKCksIGYucmVhZCgpKQogCi0gICAgICAgICAgICAgICAgb3MucmVtb3ZlKHdyaXR0ZW5maWxlKQorICAgICAgICAgICAgICAgIHVubGluayh3cml0dGVuZmlsZSkKIAogICAgICAgICAjIHJlbW92ZSB0aGUgdGVzdCBmaWxlIHN1YmRpcmVjdG9yaWVzCi0gICAgICAgIHNodXRpbC5ybXRyZWUob3MucGF0aC5qb2luKG9zLmdldGN3ZCgpLCAnemlwdGVzdDJkaXInKSkKKyAgICAgICAgcm10cmVlKG9zLnBhdGguam9pbihvcy5nZXRjd2QoKSwgJ3ppcHRlc3QyZGlyJykpCiAKICAgICBkZWYgdGVzdF9leHRyYWN0X2FsbChzZWxmKToKICAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOMiwgInciLCB6aXBmaWxlLlpJUF9TVE9SRUQpIGFzIHppcGZwOgpAQCAtNzMwLDEwICs4NjQsMTAgQEAKICAgICAgICAgICAgICAgICB3aXRoIG9wZW4ob3V0ZmlsZSwgInJiIikgYXMgZjoKICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmZGF0YS5lbmNvZGUoKSwgZi5yZWFkKCkpCiAKLSAgICAgICAgICAgICAgICBvcy5yZW1vdmUob3V0ZmlsZSkKKyAgICAgICAgICAgICAgICB1bmxpbmsob3V0ZmlsZSkKIAogICAgICAgICAjIHJlbW92ZSB0aGUgdGVzdCBmaWxlIHN1YmRpcmVjdG9yaWVzCi0gICAgICAgIHNodXRpbC5ybXRyZWUob3MucGF0aC5qb2luKG9zLmdldGN3ZCgpLCAnemlwdGVzdDJkaXInKSkKKyAgICAgICAgcm10cmVlKG9zLnBhdGguam9pbihvcy5nZXRjd2QoKSwgJ3ppcHRlc3QyZGlyJykpCiAKICAgICBkZWYgY2hlY2tfZmlsZShzZWxmLCBmaWxlbmFtZSwgY29udGVudCk6CiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShmaWxlbmFtZSkpCkBAIC03NjQsMjUgKzg5OCwyNSBAQAogICAgIGRlZiB0ZXN0X2V4dHJhY3RfaGFja2Vyc19hcmNuYW1lc193aW5kb3dzX29ubHkoc2VsZik6CiAgICAgICAgICIiIlRlc3QgY29tYmluYXRpb24gb2YgcGF0aCBmaXhpbmcgYW5kIHdpbmRvd3MgbmFtZSBzYW5pdGl6YXRpb24uIiIiCiAgICAgICAgIHdpbmRvd3NfaGFja25hbWVzID0gWwotICAgICAgICAgICAgICAgIChyJy4uXGZvb1xiYXInLCAnZm9vL2JhcicpLAotICAgICAgICAgICAgICAgIChyJy4uXC9mb29cL2JhcicsICdmb28vYmFyJyksCi0gICAgICAgICAgICAgICAgKHInZm9vL1wuLlwvYmFyJywgJ2Zvby9iYXInKSwKLSAgICAgICAgICAgICAgICAocidmb29cLy4uL1xiYXInLCAnZm9vL2JhcicpLAotICAgICAgICAgICAgICAgIChyJ0M6Zm9vL2JhcicsICdmb28vYmFyJyksCi0gICAgICAgICAgICAgICAgKHInQzovZm9vL2JhcicsICdmb28vYmFyJyksCi0gICAgICAgICAgICAgICAgKHInQzovL2Zvby9iYXInLCAnZm9vL2JhcicpLAotICAgICAgICAgICAgICAgIChyJ0M6XGZvb1xiYXInLCAnZm9vL2JhcicpLAotICAgICAgICAgICAgICAgIChyJy8vY29ua3kvbW91bnRwb2ludC9mb28vYmFyJywgJ2Zvby9iYXInKSwKLSAgICAgICAgICAgICAgICAocidcXGNvbmt5XG1vdW50cG9pbnRcZm9vXGJhcicsICdmb28vYmFyJyksCi0gICAgICAgICAgICAgICAgKHInLy8vY29ua3kvbW91bnRwb2ludC9mb28vYmFyJywgJ2Nvbmt5L21vdW50cG9pbnQvZm9vL2JhcicpLAotICAgICAgICAgICAgICAgIChyJ1xcXGNvbmt5XG1vdW50cG9pbnRcZm9vXGJhcicsICdjb25reS9tb3VudHBvaW50L2Zvby9iYXInKSwKLSAgICAgICAgICAgICAgICAocicvL2Nvbmt5Ly9tb3VudHBvaW50L2Zvby9iYXInLCAnY29ua3kvbW91bnRwb2ludC9mb28vYmFyJyksCi0gICAgICAgICAgICAgICAgKHInXFxjb25reVxcbW91bnRwb2ludFxmb29cYmFyJywgJ2Nvbmt5L21vdW50cG9pbnQvZm9vL2JhcicpLAotICAgICAgICAgICAgICAgIChyJy8vPy9DOi9mb28vYmFyJywgJ2Zvby9iYXInKSwKLSAgICAgICAgICAgICAgICAocidcXD9cQzpcZm9vXGJhcicsICdmb28vYmFyJyksCi0gICAgICAgICAgICAgICAgKHInQzovLi4vQzovZm9vL2JhcicsICdDXy9mb28vYmFyJyksCi0gICAgICAgICAgICAgICAgKHInYTpiXGM8ZD5lfGYiZz9oKmknLCAnYi9jX2RfZV9mX2dfaF9pJyksCi0gICAgICAgICAgICAgICAgKCcuLi8uLi9mb28uLi8uLi9iYS4ucicsICdmb28vYmEuLnInKSwKKyAgICAgICAgICAgIChyJy4uXGZvb1xiYXInLCAnZm9vL2JhcicpLAorICAgICAgICAgICAgKHInLi5cL2Zvb1wvYmFyJywgJ2Zvby9iYXInKSwKKyAgICAgICAgICAgIChyJ2Zvby9cLi5cL2JhcicsICdmb28vYmFyJyksCisgICAgICAgICAgICAocidmb29cLy4uL1xiYXInLCAnZm9vL2JhcicpLAorICAgICAgICAgICAgKHInQzpmb28vYmFyJywgJ2Zvby9iYXInKSwKKyAgICAgICAgICAgIChyJ0M6L2Zvby9iYXInLCAnZm9vL2JhcicpLAorICAgICAgICAgICAgKHInQzovL2Zvby9iYXInLCAnZm9vL2JhcicpLAorICAgICAgICAgICAgKHInQzpcZm9vXGJhcicsICdmb28vYmFyJyksCisgICAgICAgICAgICAocicvL2Nvbmt5L21vdW50cG9pbnQvZm9vL2JhcicsICdmb28vYmFyJyksCisgICAgICAgICAgICAocidcXGNvbmt5XG1vdW50cG9pbnRcZm9vXGJhcicsICdmb28vYmFyJyksCisgICAgICAgICAgICAocicvLy9jb25reS9tb3VudHBvaW50L2Zvby9iYXInLCAnY29ua3kvbW91bnRwb2ludC9mb28vYmFyJyksCisgICAgICAgICAgICAocidcXFxjb25reVxtb3VudHBvaW50XGZvb1xiYXInLCAnY29ua3kvbW91bnRwb2ludC9mb28vYmFyJyksCisgICAgICAgICAgICAocicvL2Nvbmt5Ly9tb3VudHBvaW50L2Zvby9iYXInLCAnY29ua3kvbW91bnRwb2ludC9mb28vYmFyJyksCisgICAgICAgICAgICAocidcXGNvbmt5XFxtb3VudHBvaW50XGZvb1xiYXInLCAnY29ua3kvbW91bnRwb2ludC9mb28vYmFyJyksCisgICAgICAgICAgICAocicvLz8vQzovZm9vL2JhcicsICdmb28vYmFyJyksCisgICAgICAgICAgICAocidcXD9cQzpcZm9vXGJhcicsICdmb28vYmFyJyksCisgICAgICAgICAgICAocidDOi8uLi9DOi9mb28vYmFyJywgJ0NfL2Zvby9iYXInKSwKKyAgICAgICAgICAgIChyJ2E6YlxjPGQ+ZXxmImc/aCppJywgJ2IvY19kX2VfZl9nX2hfaScpLAorICAgICAgICAgICAgKCcuLi8uLi9mb28uLi8uLi9iYS4ucicsICdmb28vYmEuLnInKSwKICAgICAgICAgXQogICAgICAgICBzZWxmLl90ZXN0X2V4dHJhY3RfaGFja2Vyc19hcmNuYW1lcyh3aW5kb3dzX2hhY2tuYW1lcykKIApAQCAtODE1LDEyICs5NDksMTIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0nZXh0cmFjdCAlcjogJXIgIT0gJXInICUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhcmNuYW1lLCB3cml0dGVuZmlsZSwgY29ycmVjdGZpbGUpKQogICAgICAgICAgICAgc2VsZi5jaGVja19maWxlKGNvcnJlY3RmaWxlLCBjb250ZW50KQotICAgICAgICAgICAgc2h1dGlsLnJtdHJlZSgndGFyZ2V0JykKKyAgICAgICAgICAgIHJtdHJlZSgndGFyZ2V0JykKIAogICAgICAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOMiwgJ3InKSBhcyB6aXBmcDoKICAgICAgICAgICAgICAgICB6aXBmcC5leHRyYWN0YWxsKHRhcmdldHBhdGgpCiAgICAgICAgICAgICBzZWxmLmNoZWNrX2ZpbGUoY29ycmVjdGZpbGUsIGNvbnRlbnQpCi0gICAgICAgICAgICBzaHV0aWwucm10cmVlKCd0YXJnZXQnKQorICAgICAgICAgICAgcm10cmVlKCd0YXJnZXQnKQogCiAgICAgICAgICAgICBjb3JyZWN0ZmlsZSA9IG9zLnBhdGguam9pbihvcy5nZXRjd2QoKSwgKmZpeGVkbmFtZS5zcGxpdCgnLycpKQogCkBAIC04MjksMTQgKzk2MywxNCBAQAogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod3JpdHRlbmZpbGUsIGNvcnJlY3RmaWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnPSJleHRyYWN0ICVyIiAlIGFyY25hbWUpCiAgICAgICAgICAgICBzZWxmLmNoZWNrX2ZpbGUoY29ycmVjdGZpbGUsIGNvbnRlbnQpCi0gICAgICAgICAgICBzaHV0aWwucm10cmVlKGZpeGVkbmFtZS5zcGxpdCgnLycpWzBdKQorICAgICAgICAgICAgcm10cmVlKGZpeGVkbmFtZS5zcGxpdCgnLycpWzBdKQogCiAgICAgICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4yLCAncicpIGFzIHppcGZwOgogICAgICAgICAgICAgICAgIHppcGZwLmV4dHJhY3RhbGwoKQogICAgICAgICAgICAgc2VsZi5jaGVja19maWxlKGNvcnJlY3RmaWxlLCBjb250ZW50KQotICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShmaXhlZG5hbWUuc3BsaXQoJy8nKVswXSkKKyAgICAgICAgICAgIHJtdHJlZShmaXhlZG5hbWUuc3BsaXQoJy8nKVswXSkKIAotICAgICAgICAgICAgb3MucmVtb3ZlKFRFU1RGTjIpCisgICAgICAgICAgICB1bmxpbmsoVEVTVEZOMikKIAogCiBjbGFzcyBPdGhlclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTg2MCw2ICs5OTQsMTcgQEAKICAgICAgICAgICAgICAgICBkYXRhICs9IHppcGZwLnJlYWQoaW5mbykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZGF0YSwge2IiZm9vYmFyIiwgYiJiYXJmb28ifSkKIAorICAgIGRlZiB0ZXN0X3VuaXZlcnNhbF9kZXByZWNhdGlvbihzZWxmKToKKyAgICAgICAgZiA9IGlvLkJ5dGVzSU8oKQorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShmLCAidyIpIGFzIHppcGZwOgorICAgICAgICAgICAgemlwZnAud3JpdGVzdHIoJ3NwYW0udHh0JywgYidhYmFiYWdhbGFtYWdhJykKKworICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShmLCAiciIpIGFzIHppcGZwOgorICAgICAgICAgICAgZm9yIG1vZGUgaW4gJ1UnLCAnclUnOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgorICAgICAgICAgICAgICAgICAgICB6aXBvcGVuID0gemlwZnAub3Blbignc3BhbS50eHQnLCBtb2RlKQorICAgICAgICAgICAgICAgIHppcG9wZW4uY2xvc2UoKQorCiAgICAgZGVmIHRlc3RfdW5pdmVyc2FsX3JlYWRhaGVhZHMoc2VsZik6CiAgICAgICAgIGYgPSBpby5CeXRlc0lPKCkKIApAQCAtODY5LDcgKzEwMTQsNyBAQAogCiAgICAgICAgIGRhdGEyID0gYicnCiAgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKGYsICdyJykgYXMgemlwZnAsIFwKLSAgICAgICAgICAgICB6aXBmcC5vcGVuKFRFU1RGTiwgJ3JVJykgYXMgemlwb3BlbjoKKyAgICAgICAgICAgICBvcGVuVSh6aXBmcCwgVEVTVEZOKSBhcyB6aXBvcGVuOgogICAgICAgICAgICAgZm9yIGxpbmUgaW4gemlwb3BlbjoKICAgICAgICAgICAgICAgICBkYXRhMiArPSBsaW5lCiAKQEAgLTkxMCwxMCArMTA1NSwxMCBAQAogICAgIGRlZiB0ZXN0X3Vuc3VwcG9ydGVkX3ZlcnNpb24oc2VsZik6CiAgICAgICAgICMgRmlsZSBoYXMgYW4gZXh0cmFjdF92ZXJzaW9uIG9mIDEyMAogICAgICAgICBkYXRhID0gKGInUEtceDAzXHgwNHhceDAwXHgwMFx4MDBceDAwXHgwMCFwXHhhMUBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAnCi0gICAgICAgIGInXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMVx4MDBceDAwXHgwMHhQS1x4MDFceDAyeFx4MDN4XHgwMFx4MDBceDAwXHgwMCcKLSAgICAgICAgYidceDAwIXBceGExQFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDFceDAwXHgwMCcKLSAgICAgICAgYidceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDgwXHgwMVx4MDBceDAwXHgwMFx4MDB4UEtceDA1XHgwNicKLSAgICAgICAgYidceDAwXHgwMFx4MDBceDAwXHgwMVx4MDBceDAxXHgwMC9ceDAwXHgwMFx4MDBceDFmXHgwMFx4MDBceDAwXHgwMFx4MDAnKQorICAgICAgICAgICAgICAgIGInXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMVx4MDBceDAwXHgwMHhQS1x4MDFceDAyeFx4MDN4XHgwMFx4MDBceDAwXHgwMCcKKyAgICAgICAgICAgICAgICBiJ1x4MDAhcFx4YTFAXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMVx4MDBceDAwJworICAgICAgICAgICAgICAgIGInXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHg4MFx4MDFceDAwXHgwMFx4MDBceDAweFBLXHgwNVx4MDYnCisgICAgICAgICAgICAgICAgYidceDAwXHgwMFx4MDBceDAwXHgwMVx4MDBceDAxXHgwMC9ceDAwXHgwMFx4MDBceDFmXHgwMFx4MDBceDAwXHgwMFx4MDAnKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIHppcGZpbGUuWmlwRmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaW8uQnl0ZXNJTyhkYXRhKSwgJ3InKQpAQCAtOTQ2LDcgKzEwOTEsNyBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4sICdhJykgYXMgemY6CiAgICAgICAgICAgICAgICAgemYud3JpdGVzdHIoZmlsZW5hbWUsIGNvbnRlbnQpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHNlbGYuZmFpbCgnQ291bGQgbm90IGFwcGVuZCBkYXRhIHRvIGEgbm9uLWV4aXN0ZW50IHppcCBmaWxlLicpCiAKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKFRFU1RGTikpCkBAIC0xMDE4LDcgKzExNjMsNyBAQAogICAgICAgICBmcC5zZWVrKDAsIDApCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh6aXBmaWxlLmlzX3ppcGZpbGUoZnApKQogCi0gICAgZGVmIHRlc3Rfbm9uX2V4aXN0ZW50X2ZpbGVfcmFpc2VzX0lPRXJyb3Ioc2VsZik6CisgICAgZGVmIHRlc3Rfbm9uX2V4aXN0ZW50X2ZpbGVfcmFpc2VzX09TRXJyb3Ioc2VsZik6CiAgICAgICAgICMgbWFrZSBzdXJlIHdlIGRvbid0IHJhaXNlIGFuIEF0dHJpYnV0ZUVycm9yIHdoZW4gYSBwYXJ0aWFsbHktY29uc3RydWN0ZWQKICAgICAgICAgIyBaaXBGaWxlIGluc3RhbmNlIGlzIGZpbmFsaXplZDsgdGhpcyB0ZXN0cyBmb3IgcmVncmVzc2lvbiBvbiBTRiB0cmFja2VyCiAgICAgICAgICMgYnVnICM0MDM4NzEuCkBAIC0xMDMwLDcgKzExNzUsNyBAQAogICAgICAgICAjIGl0IGlzIGlnbm9yZWQsIGJ1dCB0aGUgdXNlciBzaG91bGQgYmUgc3VmZmljaWVudGx5IGFubm95ZWQgYnkKICAgICAgICAgIyB0aGUgbWVzc2FnZSBvbiB0aGUgb3V0cHV0IHRoYXQgcmVncmVzc2lvbiB3aWxsIGJlIG5vdGljZWQKICAgICAgICAgIyBxdWlja2x5LgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCB6aXBmaWxlLlppcEZpbGUsIFRFU1RGTikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgemlwZmlsZS5aaXBGaWxlLCBURVNURk4pCiAKICAgICBkZWYgdGVzdF9lbXB0eV9maWxlX3JhaXNlc19CYWRaaXBGaWxlKHNlbGYpOgogICAgICAgICBmID0gb3BlbihURVNURk4sICd3JykKQEAgLTEwOTksMTEgKzEyNDQsMTEgQEAKICAgICBkZWYgdGVzdF91bnN1cHBvcnRlZF9jb21wcmVzc2lvbihzZWxmKToKICAgICAgICAgIyBkYXRhIGlzIGRlY2xhcmVkIGFzIHNocnVuaywgYnV0IGFjdHVhbGx5IGRlZmxhdGVkCiAgICAgICAgIGRhdGEgPSAoYidQS1x4MDNceDA0Llx4MDBceDAwXHgwMFx4MDFceDAwXHhlNENceGExQFx4MDBceDAwXHgwMCcKLSAgICAgICAgYidceDAwXHgwMlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAxXHgwMFx4MDBceDAweFx4MDNceDAwUEtceDAxJwotICAgICAgICBiJ1x4MDIuXHgwMy5ceDAwXHgwMFx4MDBceDAxXHgwMFx4ZTRDXHhhMUBceDAwXHgwMFx4MDBceDAwXHgwMlx4MDBceDAwJwotICAgICAgICBiJ1x4MDBceDAwXHgwMFx4MDBceDAwXHgwMVx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwJwotICAgICAgICBiJ1x4ODBceDAxXHgwMFx4MDBceDAwXHgwMHhQS1x4MDVceDA2XHgwMFx4MDBceDAwXHgwMFx4MDFceDAwXHgwMVx4MDAnCi0gICAgICAgIGInL1x4MDBceDAwXHgwMCFceDAwXHgwMFx4MDBceDAwXHgwMCcpCisgICAgICAgICAgICAgICAgYidceDAwXHgwMlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAxXHgwMFx4MDBceDAweFx4MDNceDAwUEtceDAxJworICAgICAgICAgICAgICAgIGInXHgwMi5ceDAzLlx4MDBceDAwXHgwMFx4MDFceDAwXHhlNENceGExQFx4MDBceDAwXHgwMFx4MDBceDAyXHgwMFx4MDAnCisgICAgICAgICAgICAgICAgYidceDAwXHgwMFx4MDBceDAwXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCcKKyAgICAgICAgICAgICAgICBiJ1x4ODBceDAxXHgwMFx4MDBceDAwXHgwMHhQS1x4MDVceDA2XHgwMFx4MDBceDAwXHgwMFx4MDFceDAwXHgwMVx4MDAnCisgICAgICAgICAgICAgICAgYicvXHgwMFx4MDBceDAwIVx4MDBceDAwXHgwMFx4MDBceDAwJykKICAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoaW8uQnl0ZXNJTyhkYXRhKSwgJ3InKSBhcyB6aXBmOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgemlwZi5vcGVuLCAneCcpCiAKQEAgLTEyMTgsNyArMTM2Myw3IEBACiAgICAgZGVmIHRlc3Rfb3Blbl9lbXB0eV9maWxlKHNlbGYpOgogICAgICAgICAjIElzc3VlIDE3MTA3MDM6IENoZWNrIHRoYXQgb3BlbmluZyBhIGZpbGUgd2l0aCBsZXNzIHRoYW4gMjIgYnl0ZXMKICAgICAgICAgIyByYWlzZXMgYSBCYWRaaXBGaWxlIGV4Y2VwdGlvbiAocmF0aGVyIHRoYW4gdGhlIHByZXZpb3VzbHkgdW5oZWxwZnVsCi0gICAgICAgICMgSU9FcnJvcikKKyAgICAgICAgIyBPU0Vycm9yKQogICAgICAgICBmID0gb3BlbihURVNURk4sICd3JykKICAgICAgICAgZi5jbG9zZSgpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHppcGZpbGUuQmFkWmlwRmlsZSwgemlwZmlsZS5aaXBGaWxlLCBURVNURk4sICdyJykKQEAgLTEyMjcsNiArMTM3MiwyMSBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICB6aXBmaWxlLlppcEluZm8sICdzZXZlbnRpZXMnLCAoMTk3OSwgMSwgMSwgMCwgMCwgMCkpCiAKKyAgICBkZWYgdGVzdF96aXBmaWxlX3dpdGhfc2hvcnRfZXh0cmFfZmllbGQoc2VsZik6CisgICAgICAgICIiIklmIGFuIGV4dHJhIGZpZWxkIGluIHRoZSBoZWFkZXIgaXMgbGVzcyB0aGFuIDQgYnl0ZXMsIHNraXAgaXQuIiIiCisgICAgICAgIHppcGRhdGEgPSAoCisgICAgICAgICAgICBiJ1BLXHgwM1x4MDRceDE0XHgwMFx4MDBceDAwXHgwMFx4MDBceDkzXHg5Ylx4YWRAXHg4Ylx4OWUnCisgICAgICAgICAgICBiJ1x4ZDlceGQzXHgwMVx4MDBceDAwXHgwMFx4MDFceDAwXHgwMFx4MDBceDAzXHgwMFx4MDNceDAwYWInCisgICAgICAgICAgICBiJ2NceDAwXHgwMFx4MDBBUEtceDAxXHgwMlx4MTRceDAzXHgxNFx4MDBceDAwXHgwMFx4MDAnCisgICAgICAgICAgICBiJ1x4MDBceDkzXHg5Ylx4YWRAXHg4Ylx4OWVceGQ5XHhkM1x4MDFceDAwXHgwMFx4MDBceDAxXHgwMFx4MDAnCisgICAgICAgICAgICBiJ1x4MDBceDAzXHgwMFx4MDJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceGE0XHg4MVx4MDAnCisgICAgICAgICAgICBiJ1x4MDBceDAwXHgwMGFiY1x4MDBceDAwUEtceDA1XHgwNlx4MDBceDAwXHgwMFx4MDAnCisgICAgICAgICAgICBiJ1x4MDFceDAwXHgwMVx4MDAzXHgwMFx4MDBceDAwJVx4MDBceDAwXHgwMFx4MDBceDAwJworICAgICAgICApCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKGlvLkJ5dGVzSU8oemlwZGF0YSksICdyJykgYXMgemlwZjoKKyAgICAgICAgICAgICMgdGVzdHppcCByZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBmaXJzdCBjb3JydXB0IGZpbGUsIG9yIE5vbmUKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHppcGYudGVzdHppcCgpKQorCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgogICAgICAgICB1bmxpbmsoVEVTVEZOKQogICAgICAgICB1bmxpbmsoVEVTVEZOMikKQEAgLTEyNjYsNTcgKzE0MjYsNTcgQEAKIGNsYXNzIFN0b3JlZEJhZENyY1Rlc3RzKEFic3RyYWN0QmFkQ3JjVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBjb21wcmVzc2lvbiA9IHppcGZpbGUuWklQX1NUT1JFRAogICAgIHppcF93aXRoX2JhZF9jcmMgPSAoCi0gICAgICAgICAgICBiJ1BLXDAwM1wwMDRcMDI0XDBcMFwwXDBcMCBcMjEzXDIxMjs6cicKLSAgICAgICAgICAgIGInXDI1M1wzNzdcZlwwXDBcMFxmXDBcMFwwXDAwNVwwXDBcMDAwYWYnCi0gICAgICAgICAgICBiJ2lsZWhlbGxvLEF3b3JsZFAnCi0gICAgICAgICAgICBiJ0tcMDAxXDAwMlwwMjRcMDAzXDAyNFwwXDBcMFwwXDAgXDIxM1wyMTI7OicKLSAgICAgICAgICAgIGInclwyNTNcMzc3XGZcMFwwXDBcZlwwXDBcMFwwMDVcMFwwXDBcMCcKLSAgICAgICAgICAgIGInXDBcMFwwXDBcMFwwXDBcMjAwXDAwMVwwXDBcMFwwMDBhZmknCi0gICAgICAgICAgICBiJ2xlUEtcMDA1XDAwNlwwXDBcMFwwXDAwMVwwXDAwMVwwMDAzXDAwMCcKLSAgICAgICAgICAgIGInXDBcMC9cMFwwXDBcMFwwJykKKyAgICAgICAgYidQS1wwMDNcMDA0XDAyNFwwXDBcMFwwXDAgXDIxM1wyMTI7OnInCisgICAgICAgIGInXDI1M1wzNzdcZlwwXDBcMFxmXDBcMFwwXDAwNVwwXDBcMDAwYWYnCisgICAgICAgIGInaWxlaGVsbG8sQXdvcmxkUCcKKyAgICAgICAgYidLXDAwMVwwMDJcMDI0XDAwM1wwMjRcMFwwXDBcMFwwIFwyMTNcMjEyOzonCisgICAgICAgIGInclwyNTNcMzc3XGZcMFwwXDBcZlwwXDBcMFwwMDVcMFwwXDBcMCcKKyAgICAgICAgYidcMFwwXDBcMFwwXDBcMFwyMDBcMDAxXDBcMFwwXDAwMGFmaScKKyAgICAgICAgYidsZVBLXDAwNVwwMDZcMFwwXDBcMFwwMDFcMFwwMDFcMDAwM1wwMDAnCisgICAgICAgIGInXDBcMC9cMFwwXDBcMFwwJykKIAogQHJlcXVpcmVzX3psaWIKIGNsYXNzIERlZmxhdGVCYWRDcmNUZXN0cyhBYnN0cmFjdEJhZENyY1Rlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgY29tcHJlc3Npb24gPSB6aXBmaWxlLlpJUF9ERUZMQVRFRAogICAgIHppcF93aXRoX2JhZF9jcmMgPSAoCi0gICAgICAgICAgICBiJ1BLXHgwM1x4MDRceDE0XHgwMFx4MDBceDAwXHgwOFx4MDBufVx4MGM9RkEnCi0gICAgICAgICAgICBiJ0tFXHgxMFx4MDBceDAwXHgwMG5ceDAwXHgwMFx4MDBceDA1XHgwMFx4MDBceDAwYWYnCi0gICAgICAgICAgICBiJ2lsZVx4Y2JIXHhjZFx4YzlceGM5VyhceGNmL1x4Y2FJXHhjOVx4YTAnCi0gICAgICAgICAgICBiJz1ceDEzXHgwMFBLXHgwMVx4MDJceDE0XHgwM1x4MTRceDAwXHgwMFx4MDBceDA4XHgwMG4nCi0gICAgICAgICAgICBiJ31ceDBjPUZBS0VceDEwXHgwMFx4MDBceDAwblx4MDBceDAwXHgwMFx4MDUnCi0gICAgICAgICAgICBiJ1x4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHg4MFx4MDFceDAwXHgwMFx4MDAnCi0gICAgICAgICAgICBiJ1x4MDBhZmlsZVBLXHgwNVx4MDZceDAwXHgwMFx4MDBceDAwXHgwMVx4MDAnCi0gICAgICAgICAgICBiJ1x4MDFceDAwM1x4MDBceDAwXHgwMDNceDAwXHgwMFx4MDBceDAwXHgwMCcpCisgICAgICAgIGInUEtceDAzXHgwNFx4MTRceDAwXHgwMFx4MDBceDA4XHgwMG59XHgwYz1GQScKKyAgICAgICAgYidLRVx4MTBceDAwXHgwMFx4MDBuXHgwMFx4MDBceDAwXHgwNVx4MDBceDAwXHgwMGFmJworICAgICAgICBiJ2lsZVx4Y2JIXHhjZFx4YzlceGM5VyhceGNmL1x4Y2FJXHhjOVx4YTAnCisgICAgICAgIGInPVx4MTNceDAwUEtceDAxXHgwMlx4MTRceDAzXHgxNFx4MDBceDAwXHgwMFx4MDhceDAwbicKKyAgICAgICAgYid9XHgwYz1GQUtFXHgxMFx4MDBceDAwXHgwMG5ceDAwXHgwMFx4MDBceDA1JworICAgICAgICBiJ1x4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHg4MFx4MDFceDAwXHgwMFx4MDAnCisgICAgICAgIGInXHgwMGFmaWxlUEtceDA1XHgwNlx4MDBceDAwXHgwMFx4MDBceDAxXHgwMCcKKyAgICAgICAgYidceDAxXHgwMDNceDAwXHgwMFx4MDAzXHgwMFx4MDBceDAwXHgwMFx4MDAnKQogCiBAcmVxdWlyZXNfYnoyCiBjbGFzcyBCemlwMkJhZENyY1Rlc3RzKEFic3RyYWN0QmFkQ3JjVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBjb21wcmVzc2lvbiA9IHppcGZpbGUuWklQX0JaSVAyCiAgICAgemlwX3dpdGhfYmFkX2NyYyA9ICgKLSAgICAgICAgICAgIGInUEtceDAzXHgwNFx4MTRceDAzXHgwMFx4MDBceDBjXHgwMG51XHgwYz1GQScKLSAgICAgICAgICAgIGInS0U4XHgwMFx4MDBceDAwblx4MDBceDAwXHgwMFx4MDVceDAwXHgwMFx4MDBhZicKLSAgICAgICAgICAgIGInaWxlQlpoOTFBWSZTWVx4ZDRceGE4XHhjYScKLSAgICAgICAgICAgIGInXHg3Zlx4MDBceDAwXHgwZlx4MTFceDgwQFx4MDBceDA2RFx4OTBceDgwIFx4MDAgXHhhNScKLSAgICAgICAgICAgIGInUFx4ZDkhXHgwM1x4MDNceDEzXHgxM1x4MTNceDg5XHhhOVx4YTlceGMydTU6XHg5ZicKLSAgICAgICAgICAgIGInXHg4Ylx4YjkiXHg5YyhIalRlP1x4ODBQS1x4MDFceDAyXHgxNCcKLSAgICAgICAgICAgIGInXHgwM1x4MTRceDAzXHgwMFx4MDBceDBjXHgwMG51XHgwYz1GQUtFOCcKLSAgICAgICAgICAgIGInXHgwMFx4MDBceDAwblx4MDBceDAwXHgwMFx4MDVceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCcKLSAgICAgICAgICAgIGInXHgwMCBceDgwXHg4MFx4ODFceDAwXHgwMFx4MDBceDAwYWZpbGVQSycKLSAgICAgICAgICAgIGInXHgwNVx4MDZceDAwXHgwMFx4MDBceDAwXHgwMVx4MDBceDAxXHgwMDNceDAwXHgwMFx4MDBbXHgwMCcKLSAgICAgICAgICAgIGInXHgwMFx4MDBceDAwXHgwMCcpCisgICAgICAgIGInUEtceDAzXHgwNFx4MTRceDAzXHgwMFx4MDBceDBjXHgwMG51XHgwYz1GQScKKyAgICAgICAgYidLRThceDAwXHgwMFx4MDBuXHgwMFx4MDBceDAwXHgwNVx4MDBceDAwXHgwMGFmJworICAgICAgICBiJ2lsZUJaaDkxQVkmU1lceGQ0XHhhOFx4Y2EnCisgICAgICAgIGInXHg3Zlx4MDBceDAwXHgwZlx4MTFceDgwQFx4MDBceDA2RFx4OTBceDgwIFx4MDAgXHhhNScKKyAgICAgICAgYidQXHhkOSFceDAzXHgwM1x4MTNceDEzXHgxM1x4ODlceGE5XHhhOVx4YzJ1NTpceDlmJworICAgICAgICBiJ1x4OGJceGI5Ilx4OWMoSGpUZT9ceDgwUEtceDAxXHgwMlx4MTQnCisgICAgICAgIGInXHgwM1x4MTRceDAzXHgwMFx4MDBceDBjXHgwMG51XHgwYz1GQUtFOCcKKyAgICAgICAgYidceDAwXHgwMFx4MDBuXHgwMFx4MDBceDAwXHgwNVx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwJworICAgICAgICBiJ1x4MDAgXHg4MFx4ODBceDgxXHgwMFx4MDBceDAwXHgwMGFmaWxlUEsnCisgICAgICAgIGInXHgwNVx4MDZceDAwXHgwMFx4MDBceDAwXHgwMVx4MDBceDAxXHgwMDNceDAwXHgwMFx4MDBbXHgwMCcKKyAgICAgICAgYidceDAwXHgwMFx4MDBceDAwJykKIAogQHJlcXVpcmVzX2x6bWEKIGNsYXNzIEx6bWFCYWRDcmNUZXN0cyhBYnN0cmFjdEJhZENyY1Rlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgY29tcHJlc3Npb24gPSB6aXBmaWxlLlpJUF9MWk1BCiAgICAgemlwX3dpdGhfYmFkX2NyYyA9ICgKLSAgICAgICAgICAgIGInUEtceDAzXHgwNFx4MTRceDAzXHgwMFx4MDBceDBlXHgwMG51XHgwYz1GQScKLSAgICAgICAgICAgIGInS0VceDFiXHgwMFx4MDBceDAwblx4MDBceDAwXHgwMFx4MDVceDAwXHgwMFx4MDBhZicKLSAgICAgICAgICAgIGInaWxlXHRceDA0XHgwNVx4MDBdXHgwMFx4MDBceDAwXHgwNFx4MDA0XHgxOUknCi0gICAgICAgICAgICBiJ1x4ZWVceDhkXHhlOVx4MTdceDg5OjNgXHRxIS44XHgwMFBLJwotICAgICAgICAgICAgYidceDAxXHgwMlx4MTRceDAzXHgxNFx4MDNceDAwXHgwMFx4MGVceDAwbnVceDBjPUZBJwotICAgICAgICAgICAgYidLRVx4MWJceDAwXHgwMFx4MDBuXHgwMFx4MDBceDAwXHgwNVx4MDBceDAwXHgwMFx4MDBceDAwJwotICAgICAgICAgICAgYidceDAwXHgwMFx4MDBceDAwIFx4ODBceDgwXHg4MVx4MDBceDAwXHgwMFx4MDBhZmlsJwotICAgICAgICAgICAgYidlUEtceDA1XHgwNlx4MDBceDAwXHgwMFx4MDBceDAxXHgwMFx4MDFceDAwM1x4MDBceDAwJwotICAgICAgICAgICAgYidceDAwPlx4MDBceDAwXHgwMFx4MDBceDAwJykKKyAgICAgICAgYidQS1x4MDNceDA0XHgxNFx4MDNceDAwXHgwMFx4MGVceDAwbnVceDBjPUZBJworICAgICAgICBiJ0tFXHgxYlx4MDBceDAwXHgwMG5ceDAwXHgwMFx4MDBceDA1XHgwMFx4MDBceDAwYWYnCisgICAgICAgIGInaWxlXHRceDA0XHgwNVx4MDBdXHgwMFx4MDBceDAwXHgwNFx4MDA0XHgxOUknCisgICAgICAgIGInXHhlZVx4OGRceGU5XHgxN1x4ODk6M2BcdHEhLjhceDAwUEsnCisgICAgICAgIGInXHgwMVx4MDJceDE0XHgwM1x4MTRceDAzXHgwMFx4MDBceDBlXHgwMG51XHgwYz1GQScKKyAgICAgICAgYidLRVx4MWJceDAwXHgwMFx4MDBuXHgwMFx4MDBceDAwXHgwNVx4MDBceDAwXHgwMFx4MDBceDAwJworICAgICAgICBiJ1x4MDBceDAwXHgwMFx4MDAgXHg4MFx4ODBceDgxXHgwMFx4MDBceDAwXHgwMGFmaWwnCisgICAgICAgIGInZVBLXHgwNVx4MDZceDAwXHgwMFx4MDBceDAwXHgwMVx4MDBceDAxXHgwMDNceDAwXHgwMCcKKyAgICAgICAgYidceDAwPlx4MDBceDAwXHgwMFx4MDBceDAwJykKIAogCiBjbGFzcyBEZWNyeXB0aW9uVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtMTMyNSwyMiArMTQ4NSwyMiBAQAogICAgIFpJUCBmaWxlLiIiIgogCiAgICAgZGF0YSA9ICgKLSAgICBiJ1BLXHgwM1x4MDRceDE0XHgwMFx4MDFceDAwXHgwMFx4MDBuXHg5MmkuI3lceGVmPyZceDAwXHgwMFx4MDBceDFhXHgwMCcKLSAgICBiJ1x4MDBceDAwXHgwOFx4MDBceDAwXHgwMHRlc3QudHh0XHhmYVx4MTBceGEwZ2x5fFx4ZmEtXHhjNVx4YzA9XHhmOXknCi0gICAgYidceDE4XHhlMFx4YThyXHhiM1p9TGdceGJjXHhhZVx4Zjl8XHg5Ylx4MTlceGU0XHg4Ylx4YmFceGJiKVx4OGNceGIwXHhkYmwnCi0gICAgYidQS1x4MDFceDAyXHgxNFx4MDBceDE0XHgwMFx4MDFceDAwXHgwMFx4MDBuXHg5MmkuI3lceGVmPyZceDAwXHgwMFx4MDAnCi0gICAgYidceDFhXHgwMFx4MDBceDAwXHgwOFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAxXHgwMCBceDAwXHhiNlx4ODEnCi0gICAgYidceDAwXHgwMFx4MDBceDAwdGVzdC50eHRQS1x4MDVceDA2XHgwMFx4MDBceDAwXHgwMFx4MDFceDAwXHgwMVx4MDA2XHgwMCcKLSAgICBiJ1x4MDBceDAwTFx4MDBceDAwXHgwMFx4MDBceDAwJyApCisgICAgICAgIGInUEtceDAzXHgwNFx4MTRceDAwXHgwMVx4MDBceDAwXHgwMG5ceDkyaS4jeVx4ZWY/Jlx4MDBceDAwXHgwMFx4MWFceDAwJworICAgICAgICBiJ1x4MDBceDAwXHgwOFx4MDBceDAwXHgwMHRlc3QudHh0XHhmYVx4MTBceGEwZ2x5fFx4ZmEtXHhjNVx4YzA9XHhmOXknCisgICAgICAgIGInXHgxOFx4ZTBceGE4clx4YjNafUxnXHhiY1x4YWVceGY5fFx4OWJceDE5XHhlNFx4OGJceGJhXHhiYilceDhjXHhiMFx4ZGJsJworICAgICAgICBiJ1BLXHgwMVx4MDJceDE0XHgwMFx4MTRceDAwXHgwMVx4MDBceDAwXHgwMG5ceDkyaS4jeVx4ZWY/Jlx4MDBceDAwXHgwMCcKKyAgICAgICAgYidceDFhXHgwMFx4MDBceDAwXHgwOFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAxXHgwMCBceDAwXHhiNlx4ODEnCisgICAgICAgIGInXHgwMFx4MDBceDAwXHgwMHRlc3QudHh0UEtceDA1XHgwNlx4MDBceDAwXHgwMFx4MDBceDAxXHgwMFx4MDFceDAwNlx4MDAnCisgICAgICAgIGInXHgwMFx4MDBMXHgwMFx4MDBceDAwXHgwMFx4MDAnICkKICAgICBkYXRhMiA9ICgKLSAgICBiJ1BLXHgwM1x4MDRceDE0XHgwMFx0XHgwMFx4MDhceDAwXHhjZn0zOHh1XHhhYVx4YjJceDE0XHgwMFx4MDBceDAwXHgwMFx4MDInCi0gICAgYidceDAwXHgwMFx4MDRceDAwXHgxNVx4MDB6ZXJvVVRcdFx4MDBceDAzXHhkNlx4OGJceDkyR1x4ZGFceDhiXHg5MkdVeFx4MDQnCi0gICAgYidceDAwXHhlOFx4MDNceGU4XHgwM1x4Yzc8TVx4YjVhXHhjZVhceGEzWSZceDhie29FXHhkN1x4OWRceDhjXHg5OFx4MDJceGMwJwotICAgIGInUEtceDA3XHgwOHh1XHhhYVx4YjJceDE0XHgwMFx4MDBceDAwXHgwMFx4MDJceDAwXHgwMFBLXHgwMVx4MDJceDE3XHgwMycKLSAgICBiJ1x4MTRceDAwXHRceDAwXHgwOFx4MDBceGNmfTM4eHVceGFhXHhiMlx4MTRceDAwXHgwMFx4MDBceDAwXHgwMlx4MDBceDAwJwotICAgIGInXHgwNFx4MDBcclx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4YTRceDgxXHgwMFx4MDBceDAwXHgwMHplJwotICAgIGIncm9VVFx4MDVceDAwXHgwM1x4ZDZceDhiXHg5MkdVeFx4MDBceDAwUEtceDA1XHgwNlx4MDBceDAwXHgwMFx4MDBceDAxJwotICAgIGInXHgwMFx4MDFceDAwP1x4MDBceDAwXHgwMFtceDAwXHgwMFx4MDBceDAwXHgwMCcgKQorICAgICAgICBiJ1BLXHgwM1x4MDRceDE0XHgwMFx0XHgwMFx4MDhceDAwXHhjZn0zOHh1XHhhYVx4YjJceDE0XHgwMFx4MDBceDAwXHgwMFx4MDInCisgICAgICAgIGInXHgwMFx4MDBceDA0XHgwMFx4MTVceDAwemVyb1VUXHRceDAwXHgwM1x4ZDZceDhiXHg5MkdceGRhXHg4Ylx4OTJHVXhceDA0JworICAgICAgICBiJ1x4MDBceGU4XHgwM1x4ZThceDAzXHhjNzxNXHhiNWFceGNlWFx4YTNZJlx4OGJ7b0VceGQ3XHg5ZFx4OGNceDk4XHgwMlx4YzAnCisgICAgICAgIGInUEtceDA3XHgwOHh1XHhhYVx4YjJceDE0XHgwMFx4MDBceDAwXHgwMFx4MDJceDAwXHgwMFBLXHgwMVx4MDJceDE3XHgwMycKKyAgICAgICAgYidceDE0XHgwMFx0XHgwMFx4MDhceDAwXHhjZn0zOHh1XHhhYVx4YjJceDE0XHgwMFx4MDBceDAwXHgwMFx4MDJceDAwXHgwMCcKKyAgICAgICAgYidceDA0XHgwMFxyXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHhhNFx4ODFceDAwXHgwMFx4MDBceDAwemUnCisgICAgICAgIGIncm9VVFx4MDVceDAwXHgwM1x4ZDZceDhiXHg5MkdVeFx4MDBceDAwUEtceDA1XHgwNlx4MDBceDAwXHgwMFx4MDBceDAxJworICAgICAgICBiJ1x4MDBceDAxXHgwMD9ceDAwXHgwMFx4MDBbXHgwMFx4MDBceDAwXHgwMFx4MDAnICkKIAogICAgIHBsYWluID0gYid6aXBmaWxlLnB5IGVuY3J5cHRpb24gdGVzdCcKICAgICBwbGFpbjIgPSBiJ1x4MDAnKjUxMgpAQCAtMTQ5Nyw0NiArMTY1NywxMDUgQEAKIAogQHJlcXVpcmVzX3psaWIKIGNsYXNzIFRlc3RzV2l0aE11bHRpcGxlT3BlbnModW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc2V0VXBDbGFzcyhjbHMpOgorICAgICAgICBjbHMuZGF0YTEgPSBiJzExMScgKyBnZXRyYW5kYnl0ZXMoMTAwMDApCisgICAgICAgIGNscy5kYXRhMiA9IGInMjIyJyArIGdldHJhbmRieXRlcygxMDAwMCkKKworICAgIGRlZiBtYWtlX3Rlc3RfYXJjaGl2ZShzZWxmLCBmKToKICAgICAgICAgIyBDcmVhdGUgdGhlIFpJUCBhcmNoaXZlCi0gICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsICJ3IiwgemlwZmlsZS5aSVBfREVGTEFURUQpIGFzIHppcGZwOgotICAgICAgICAgICAgemlwZnAud3JpdGVzdHIoJ29uZXMnLCAnMScqRklYRURURVNUX1NJWkUpCi0gICAgICAgICAgICB6aXBmcC53cml0ZXN0cigndHdvcycsICcyJypGSVhFRFRFU1RfU0laRSkKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoZiwgInciLCB6aXBmaWxlLlpJUF9ERUZMQVRFRCkgYXMgemlwZnA6CisgICAgICAgICAgICB6aXBmcC53cml0ZXN0cignb25lcycsIHNlbGYuZGF0YTEpCisgICAgICAgICAgICB6aXBmcC53cml0ZXN0cigndHdvcycsIHNlbGYuZGF0YTIpCiAKICAgICBkZWYgdGVzdF9zYW1lX2ZpbGUoc2VsZik6CiAgICAgICAgICMgVmVyaWZ5IHRoYXQgKHdoZW4gdGhlIFppcEZpbGUgaXMgaW4gY29udHJvbCBvZiBjcmVhdGluZyBmaWxlIG9iamVjdHMpCiAgICAgICAgICMgbXVsdGlwbGUgb3BlbigpIGNhbGxzIGNhbiBiZSBtYWRlIHdpdGhvdXQgaW50ZXJmZXJpbmcgd2l0aCBlYWNoIG90aGVyLgorICAgICAgICBzZWxmLm1ha2VfdGVzdF9hcmNoaXZlKFRFU1RGTjIpCiAgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsIG1vZGU9InIiKSBhcyB6aXBmOgogICAgICAgICAgICAgd2l0aCB6aXBmLm9wZW4oJ29uZXMnKSBhcyB6b3BlbjEsIHppcGYub3Blbignb25lcycpIGFzIHpvcGVuMjoKICAgICAgICAgICAgICAgICBkYXRhMSA9IHpvcGVuMS5yZWFkKDUwMCkKICAgICAgICAgICAgICAgICBkYXRhMiA9IHpvcGVuMi5yZWFkKDUwMCkKLSAgICAgICAgICAgICAgICBkYXRhMSArPSB6b3BlbjEucmVhZCg1MDApCi0gICAgICAgICAgICAgICAgZGF0YTIgKz0gem9wZW4yLnJlYWQoNTAwKQorICAgICAgICAgICAgICAgIGRhdGExICs9IHpvcGVuMS5yZWFkKCkKKyAgICAgICAgICAgICAgICBkYXRhMiArPSB6b3BlbjIucmVhZCgpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGExLCBkYXRhMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YTEsIHNlbGYuZGF0YTEpCiAKICAgICBkZWYgdGVzdF9kaWZmZXJlbnRfZmlsZShzZWxmKToKICAgICAgICAgIyBWZXJpZnkgdGhhdCAod2hlbiB0aGUgWmlwRmlsZSBpcyBpbiBjb250cm9sIG9mIGNyZWF0aW5nIGZpbGUgb2JqZWN0cykKICAgICAgICAgIyBtdWx0aXBsZSBvcGVuKCkgY2FsbHMgY2FuIGJlIG1hZGUgd2l0aG91dCBpbnRlcmZlcmluZyB3aXRoIGVhY2ggb3RoZXIuCisgICAgICAgIHNlbGYubWFrZV90ZXN0X2FyY2hpdmUoVEVTVEZOMikKICAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOMiwgbW9kZT0iciIpIGFzIHppcGY6CiAgICAgICAgICAgICB3aXRoIHppcGYub3Blbignb25lcycpIGFzIHpvcGVuMSwgemlwZi5vcGVuKCd0d29zJykgYXMgem9wZW4yOgogICAgICAgICAgICAgICAgIGRhdGExID0gem9wZW4xLnJlYWQoNTAwKQogICAgICAgICAgICAgICAgIGRhdGEyID0gem9wZW4yLnJlYWQoNTAwKQotICAgICAgICAgICAgICAgIGRhdGExICs9IHpvcGVuMS5yZWFkKDUwMCkKLSAgICAgICAgICAgICAgICBkYXRhMiArPSB6b3BlbjIucmVhZCg1MDApCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGExLCBiJzEnKkZJWEVEVEVTVF9TSVpFKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhMiwgYicyJypGSVhFRFRFU1RfU0laRSkKKyAgICAgICAgICAgICAgICBkYXRhMSArPSB6b3BlbjEucmVhZCgpCisgICAgICAgICAgICAgICAgZGF0YTIgKz0gem9wZW4yLnJlYWQoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhMSwgc2VsZi5kYXRhMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YTIsIHNlbGYuZGF0YTIpCiAKICAgICBkZWYgdGVzdF9pbnRlcmxlYXZlZChzZWxmKToKICAgICAgICAgIyBWZXJpZnkgdGhhdCAod2hlbiB0aGUgWmlwRmlsZSBpcyBpbiBjb250cm9sIG9mIGNyZWF0aW5nIGZpbGUgb2JqZWN0cykKICAgICAgICAgIyBtdWx0aXBsZSBvcGVuKCkgY2FsbHMgY2FuIGJlIG1hZGUgd2l0aG91dCBpbnRlcmZlcmluZyB3aXRoIGVhY2ggb3RoZXIuCisgICAgICAgIHNlbGYubWFrZV90ZXN0X2FyY2hpdmUoVEVTVEZOMikKICAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOMiwgbW9kZT0iciIpIGFzIHppcGY6CiAgICAgICAgICAgICB3aXRoIHppcGYub3Blbignb25lcycpIGFzIHpvcGVuMSwgemlwZi5vcGVuKCd0d29zJykgYXMgem9wZW4yOgogICAgICAgICAgICAgICAgIGRhdGExID0gem9wZW4xLnJlYWQoNTAwKQogICAgICAgICAgICAgICAgIGRhdGEyID0gem9wZW4yLnJlYWQoNTAwKQotICAgICAgICAgICAgICAgIGRhdGExICs9IHpvcGVuMS5yZWFkKDUwMCkKLSAgICAgICAgICAgICAgICBkYXRhMiArPSB6b3BlbjIucmVhZCg1MDApCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGExLCBiJzEnKkZJWEVEVEVTVF9TSVpFKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhMiwgYicyJypGSVhFRFRFU1RfU0laRSkKKyAgICAgICAgICAgICAgICBkYXRhMSArPSB6b3BlbjEucmVhZCgpCisgICAgICAgICAgICAgICAgZGF0YTIgKz0gem9wZW4yLnJlYWQoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhMSwgc2VsZi5kYXRhMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YTIsIHNlbGYuZGF0YTIpCisKKyAgICBkZWYgdGVzdF9yZWFkX2FmdGVyX2Nsb3NlKHNlbGYpOgorICAgICAgICBzZWxmLm1ha2VfdGVzdF9hcmNoaXZlKFRFU1RGTjIpCisgICAgICAgIHdpdGggY29udGV4dGxpYi5FeGl0U3RhY2soKSBhcyBzdGFjazoKKyAgICAgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsICdyJykgYXMgemlwZjoKKyAgICAgICAgICAgICAgICB6b3BlbjEgPSBzdGFjay5lbnRlcl9jb250ZXh0KHppcGYub3Blbignb25lcycpKQorICAgICAgICAgICAgICAgIHpvcGVuMiA9IHN0YWNrLmVudGVyX2NvbnRleHQoemlwZi5vcGVuKCd0d29zJykpCisgICAgICAgICAgICBkYXRhMSA9IHpvcGVuMS5yZWFkKDUwMCkKKyAgICAgICAgICAgIGRhdGEyID0gem9wZW4yLnJlYWQoNTAwKQorICAgICAgICAgICAgZGF0YTEgKz0gem9wZW4xLnJlYWQoKQorICAgICAgICAgICAgZGF0YTIgKz0gem9wZW4yLnJlYWQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGExLCBzZWxmLmRhdGExKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEyLCBzZWxmLmRhdGEyKQorCisgICAgZGVmIHRlc3RfcmVhZF9hZnRlcl93cml0ZShzZWxmKToKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOMiwgJ3cnLCB6aXBmaWxlLlpJUF9ERUZMQVRFRCkgYXMgemlwZjoKKyAgICAgICAgICAgIHppcGYud3JpdGVzdHIoJ29uZXMnLCBzZWxmLmRhdGExKQorICAgICAgICAgICAgemlwZi53cml0ZXN0cigndHdvcycsIHNlbGYuZGF0YTIpCisgICAgICAgICAgICB3aXRoIHppcGYub3Blbignb25lcycpIGFzIHpvcGVuMToKKyAgICAgICAgICAgICAgICBkYXRhMSA9IHpvcGVuMS5yZWFkKDUwMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhMSwgc2VsZi5kYXRhMVs6NTAwXSkKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOMiwgJ3InKSBhcyB6aXBmOgorICAgICAgICAgICAgZGF0YTEgPSB6aXBmLnJlYWQoJ29uZXMnKQorICAgICAgICAgICAgZGF0YTIgPSB6aXBmLnJlYWQoJ3R3b3MnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGExLCBzZWxmLmRhdGExKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEyLCBzZWxmLmRhdGEyKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfYWZ0ZXJfcmVhZChzZWxmKToKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOMiwgInciLCB6aXBmaWxlLlpJUF9ERUZMQVRFRCkgYXMgemlwZjoKKyAgICAgICAgICAgIHppcGYud3JpdGVzdHIoJ29uZXMnLCBzZWxmLmRhdGExKQorICAgICAgICAgICAgd2l0aCB6aXBmLm9wZW4oJ29uZXMnKSBhcyB6b3BlbjE6CisgICAgICAgICAgICAgICAgem9wZW4xLnJlYWQoNTAwKQorICAgICAgICAgICAgICAgIHppcGYud3JpdGVzdHIoJ3R3b3MnLCBzZWxmLmRhdGEyKQorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4yLCAncicpIGFzIHppcGY6CisgICAgICAgICAgICBkYXRhMSA9IHppcGYucmVhZCgnb25lcycpCisgICAgICAgICAgICBkYXRhMiA9IHppcGYucmVhZCgndHdvcycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YTEsIHNlbGYuZGF0YTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YTIsIHNlbGYuZGF0YTIpCisKKyAgICBkZWYgdGVzdF9tYW55X29wZW5zKHNlbGYpOgorICAgICAgICAjIFZlcmlmeSB0aGF0IHJlYWQoKSBhbmQgb3BlbigpIHByb21wdGx5IGNsb3NlIHRoZSBmaWxlIGRlc2NyaXB0b3IsCisgICAgICAgICMgYW5kIGRvbid0IHJlbHkgb24gdGhlIGdhcmJhZ2UgY29sbGVjdG9yIHRvIGZyZWUgcmVzb3VyY2VzLgorICAgICAgICBzZWxmLm1ha2VfdGVzdF9hcmNoaXZlKFRFU1RGTjIpCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsIG1vZGU9InIiKSBhcyB6aXBmOgorICAgICAgICAgICAgZm9yIHggaW4gcmFuZ2UoMTAwKToKKyAgICAgICAgICAgICAgICB6aXBmLnJlYWQoJ29uZXMnKQorICAgICAgICAgICAgICAgIHdpdGggemlwZi5vcGVuKCdvbmVzJykgYXMgem9wZW4xOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIHdpdGggb3Blbihvcy5kZXZudWxsKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRMZXNzKGYuZmlsZW5vKCksIDEwMCkKIAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKICAgICAgICAgdW5saW5rKFRFU1RGTjIpCkBAIC0xNTU4LDE0ICsxNzc3LDUxIEBACiAgICAgICAgIG9zLm1rZGlyKG9zLnBhdGguam9pbihURVNURk4yLCAiYSIpKQogICAgICAgICBzZWxmLnRlc3RfZXh0cmFjdF9kaXIoKQogCi0gICAgZGVmIHRlc3Rfc3RvcmVfZGlyKHNlbGYpOgorICAgIGRlZiB0ZXN0X3dyaXRlX2RpcihzZWxmKToKKyAgICAgICAgZGlycGF0aCA9IG9zLnBhdGguam9pbihURVNURk4yLCAieCIpCisgICAgICAgIG9zLm1rZGlyKGRpcnBhdGgpCisgICAgICAgIG1vZGUgPSBvcy5zdGF0KGRpcnBhdGgpLnN0X21vZGUgJiAweEZGRkYKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOLCAidyIpIGFzIHppcGY6CisgICAgICAgICAgICB6aXBmLndyaXRlKGRpcnBhdGgpCisgICAgICAgICAgICB6aW5mbyA9IHppcGYuZmlsZWxpc3RbMF0KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh6aW5mby5maWxlbmFtZS5lbmRzd2l0aCgiL3gvIikpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppbmZvLmV4dGVybmFsX2F0dHIsIChtb2RlIDw8IDE2KSB8IDB4MTApCisgICAgICAgICAgICB6aXBmLndyaXRlKGRpcnBhdGgsICJ5IikKKyAgICAgICAgICAgIHppbmZvID0gemlwZi5maWxlbGlzdFsxXQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHppbmZvLmZpbGVuYW1lLCAieS8iKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aW5mby5leHRlcm5hbF9hdHRyLCAobW9kZSA8PCAxNikgfCAweDEwKQorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4sICJyIikgYXMgemlwZjoKKyAgICAgICAgICAgIHppbmZvID0gemlwZi5maWxlbGlzdFswXQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHppbmZvLmZpbGVuYW1lLmVuZHN3aXRoKCIveC8iKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemluZm8uZXh0ZXJuYWxfYXR0ciwgKG1vZGUgPDwgMTYpIHwgMHgxMCkKKyAgICAgICAgICAgIHppbmZvID0gemlwZi5maWxlbGlzdFsxXQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHppbmZvLmZpbGVuYW1lLCAieS8iKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aW5mby5leHRlcm5hbF9hdHRyLCAobW9kZSA8PCAxNikgfCAweDEwKQorICAgICAgICAgICAgdGFyZ2V0ID0gb3MucGF0aC5qb2luKFRFU1RGTjIsICJ0YXJnZXQiKQorICAgICAgICAgICAgb3MubWtkaXIodGFyZ2V0KQorICAgICAgICAgICAgemlwZi5leHRyYWN0YWxsKHRhcmdldCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZGlyKG9zLnBhdGguam9pbih0YXJnZXQsICJ5IikpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ob3MubGlzdGRpcih0YXJnZXQpKSwgMikKKworICAgIGRlZiB0ZXN0X3dyaXRlc3RyX2RpcihzZWxmKToKICAgICAgICAgb3MubWtkaXIob3MucGF0aC5qb2luKFRFU1RGTjIsICJ4IikpCi0gICAgICAgIHppcGYgPSB6aXBmaWxlLlppcEZpbGUoVEVTVEZOLCAidyIpCi0gICAgICAgIHppcGYud3JpdGUob3MucGF0aC5qb2luKFRFU1RGTjIsICJ4IiksICJ4IikKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHppcGYuZmlsZWxpc3RbMF0uZmlsZW5hbWUuZW5kc3dpdGgoIngvIikpCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTiwgInciKSBhcyB6aXBmOgorICAgICAgICAgICAgemlwZi53cml0ZXN0cigieC8iLCBiJycpCisgICAgICAgICAgICB6aW5mbyA9IHppcGYuZmlsZWxpc3RbMF0KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemluZm8uZmlsZW5hbWUsICJ4LyIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppbmZvLmV4dGVybmFsX2F0dHIsICgwbzQwNzc1IDw8IDE2KSB8IDB4MTApCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTiwgInIiKSBhcyB6aXBmOgorICAgICAgICAgICAgemluZm8gPSB6aXBmLmZpbGVsaXN0WzBdCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoemluZm8uZmlsZW5hbWUuZW5kc3dpdGgoIngvIikpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppbmZvLmV4dGVybmFsX2F0dHIsICgwbzQwNzc1IDw8IDE2KSB8IDB4MTApCisgICAgICAgICAgICB0YXJnZXQgPSBvcy5wYXRoLmpvaW4oVEVTVEZOMiwgInRhcmdldCIpCisgICAgICAgICAgICBvcy5ta2Rpcih0YXJnZXQpCisgICAgICAgICAgICB6aXBmLmV4dHJhY3RhbGwodGFyZ2V0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNkaXIob3MucGF0aC5qb2luKHRhcmdldCwgIngiKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLmxpc3RkaXIodGFyZ2V0KSwgWyJ4Il0pCiAKICAgICBkZWYgdGVhckRvd24oc2VsZik6Ci0gICAgICAgIHNodXRpbC5ybXRyZWUoVEVTVEZOMikKKyAgICAgICAgcm10cmVlKFRFU1RGTjIpCiAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKFRFU1RGTik6CiAgICAgICAgICAgICB1bmxpbmsoVEVTVEZOKQogCkBAIC0xNTk5LDcgKzE4NTUsNyBAQAogICAgICAgICAjIFJlYWQgdGhlIFpJUCBhcmNoaXZlCiAgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKGYsICJyIikgYXMgemlwZnA6CiAgICAgICAgICAgICBmb3Igc2VwLCBmbiBpbiBzZWxmLmFyY2ZpbGVzLml0ZW1zKCk6Ci0gICAgICAgICAgICAgICAgd2l0aCB6aXBmcC5vcGVuKGZuLCAiclUiKSBhcyBmcDoKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW5VKHppcGZwLCBmbikgYXMgZnA6CiAgICAgICAgICAgICAgICAgICAgIHppcGRhdGEgPSBmcC5yZWFkKCkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYXJjZGF0YVtzZXBdLCB6aXBkYXRhKQogCkBAIC0xNjEzLDcgKzE4NjksNyBAQAogICAgICAgICAjIFJlYWQgdGhlIFpJUCBhcmNoaXZlCiAgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKGYsICJyIikgYXMgemlwZnA6CiAgICAgICAgICAgICBmb3Igc2VwLCBmbiBpbiBzZWxmLmFyY2ZpbGVzLml0ZW1zKCk6Ci0gICAgICAgICAgICAgICAgd2l0aCB6aXBmcC5vcGVuKGZuLCAiclUiKSBhcyB6aXBvcGVuOgorICAgICAgICAgICAgICAgIHdpdGggb3BlblUoemlwZnAsIGZuKSBhcyB6aXBvcGVuOgogICAgICAgICAgICAgICAgICAgICBkYXRhID0gYicnCiAgICAgICAgICAgICAgICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgICAgICAgICAgICAgICAgICByZWFkID0gemlwb3Blbi5yZWFkbGluZSgpCkBAIC0xNjM4LDcgKzE4OTQsNyBAQAogICAgICAgICAjIFJlYWQgdGhlIFpJUCBhcmNoaXZlCiAgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKGYsICJyIikgYXMgemlwZnA6CiAgICAgICAgICAgICBmb3Igc2VwLCBmbiBpbiBzZWxmLmFyY2ZpbGVzLml0ZW1zKCk6Ci0gICAgICAgICAgICAgICAgd2l0aCB6aXBmcC5vcGVuKGZuLCAiclUiKSBhcyB6aXBvcGVuOgorICAgICAgICAgICAgICAgIHdpdGggb3BlblUoemlwZnAsIGZuKSBhcyB6aXBvcGVuOgogICAgICAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBzZWxmLmxpbmVfZ2VuOgogICAgICAgICAgICAgICAgICAgICAgICAgbGluZWRhdGEgPSB6aXBvcGVuLnJlYWRsaW5lKCkKICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZWRhdGEsIGxpbmUgKyBiJ1xuJykKQEAgLTE2NTMsNyArMTkwOSw3IEBACiAgICAgICAgICMgUmVhZCB0aGUgWklQIGFyY2hpdmUKICAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoZiwgInIiKSBhcyB6aXBmcDoKICAgICAgICAgICAgIGZvciBzZXAsIGZuIGluIHNlbGYuYXJjZmlsZXMuaXRlbXMoKToKLSAgICAgICAgICAgICAgICB3aXRoIHppcGZwLm9wZW4oZm4sICJyVSIpIGFzIGZwOgorICAgICAgICAgICAgICAgIHdpdGggb3BlblUoemlwZnAsIGZuKSBhcyBmcDoKICAgICAgICAgICAgICAgICAgICAgemlwbGluZXMgPSBmcC5yZWFkbGluZXMoKQogICAgICAgICAgICAgICAgIGZvciBsaW5lLCB6aXBsaW5lIGluIHppcChzZWxmLmxpbmVfZ2VuLCB6aXBsaW5lcyk6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwbGluZSwgbGluZSArIGInXG4nKQpAQCAtMTY2OCw3ICsxOTI0LDcgQEAKICAgICAgICAgIyBSZWFkIHRoZSBaSVAgYXJjaGl2ZQogICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShmLCAiciIpIGFzIHppcGZwOgogICAgICAgICAgICAgZm9yIHNlcCwgZm4gaW4gc2VsZi5hcmNmaWxlcy5pdGVtcygpOgotICAgICAgICAgICAgICAgIHdpdGggemlwZnAub3BlbihmbiwgInJVIikgYXMgZnA6CisgICAgICAgICAgICAgICAgd2l0aCBvcGVuVSh6aXBmcCwgZm4pIGFzIGZwOgogICAgICAgICAgICAgICAgICAgICBmb3IgbGluZSwgemlwbGluZSBpbiB6aXAoc2VsZi5saW5lX2dlbiwgZnApOgogICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXBsaW5lLCBsaW5lICsgYidcbicpCiAKQEAgLTE2NzgsNyArMTkzNCw3IEBACiAKICAgICBkZWYgdGVhckRvd24oc2VsZik6CiAgICAgICAgIGZvciBzZXAsIGZuIGluIHNlbGYuYXJjZmlsZXMuaXRlbXMoKToKLSAgICAgICAgICAgIG9zLnJlbW92ZShmbikKKyAgICAgICAgICAgIHVubGluayhmbikKICAgICAgICAgdW5saW5rKFRFU1RGTikKICAgICAgICAgdW5saW5rKFRFU1RGTjIpCiAKQEAgLTE3MDIsNiArMTk1OCw1IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBjb21wcmVzc2lvbiA9IHppcGZpbGUuWklQX0xaTUEKIAotCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF96aXBmaWxlNjQucHkgYi9MaWIvdGVzdC90ZXN0X3ppcGZpbGU2NC5weQppbmRleCBhOGZiN2FiLi43ZGVhOGEzIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3ppcGZpbGU2NC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3ppcGZpbGU2NC5weQpAQCAtMTgsNyArMTgsNyBAQAogZnJvbSBpbyBpbXBvcnQgU3RyaW5nSU8KIGZyb20gdGVtcGZpbGUgaW1wb3J0IFRlbXBvcmFyeUZpbGUKIAotZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IFRFU1RGTiwgcnVuX3VuaXR0ZXN0LCByZXF1aXJlc196bGliCitmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgVEVTVEZOLCByZXF1aXJlc196bGliCiAKIFRFU1RGTjIgPSBURVNURk4gKyAiMiIKIApAQCAtMzgsNyArMzgsNyBAQAogCiAgICAgZGVmIHppcFRlc3Qoc2VsZiwgZiwgY29tcHJlc3Npb24pOgogICAgICAgICAjIENyZWF0ZSB0aGUgWklQIGFyY2hpdmUuCi0gICAgICAgIHppcGZwID0gemlwZmlsZS5aaXBGaWxlKGYsICJ3IiwgY29tcHJlc3Npb24sIGFsbG93WmlwNjQ9VHJ1ZSkKKyAgICAgICAgemlwZnAgPSB6aXBmaWxlLlppcEZpbGUoZiwgInciLCBjb21wcmVzc2lvbikKIAogICAgICAgICAjIEl0IHdpbGwgY29udGFpbiBlbm91Z2ggY29waWVzIG9mIHNlbGYuZGF0YSB0byByZWFjaCBhYm91dCA2R0Igb2YKICAgICAgICAgIyByYXcgZGF0YSB0byBzdG9yZS4KQEAgLTkyLDcgKzkyLDcgQEAKICAgICBkZWYgdGVzdE1vcmVUaGFuNjRrRmlsZXMoc2VsZik6CiAgICAgICAgICMgVGhpcyB0ZXN0IGNoZWNrcyB0aGF0IG1vcmUgdGhhbiA2NGsgZmlsZXMgY2FuIGJlIGFkZGVkIHRvIGFuIGFyY2hpdmUsCiAgICAgICAgICMgYW5kIHRoYXQgdGhlIHJlc3VsdGluZyBhcmNoaXZlIGNhbiBiZSByZWFkIHByb3Blcmx5IGJ5IFppcEZpbGUKLSAgICAgICAgemlwZiA9IHppcGZpbGUuWmlwRmlsZShURVNURk4sIG1vZGU9InciKQorICAgICAgICB6aXBmID0gemlwZmlsZS5aaXBGaWxlKFRFU1RGTiwgbW9kZT0idyIsIGFsbG93WmlwNjQ9VHJ1ZSkKICAgICAgICAgemlwZi5kZWJ1ZyA9IDEwMAogICAgICAgICBudW1maWxlcyA9ICgxIDw8IDE2KSAqIDMvLzIKICAgICAgICAgZm9yIGkgaW4gcmFuZ2UobnVtZmlsZXMpOgpAQCAtMTA1LDE0ICsxMDUsNDcgQEAKICAgICAgICAgZm9yIGkgaW4gcmFuZ2UobnVtZmlsZXMpOgogICAgICAgICAgICAgY29udGVudCA9IHppcGYyLnJlYWQoImZvbyUwOGQiICUgaSkuZGVjb2RlKCdhc2NpaScpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbnRlbnQsICIlZCIgJSAoaSoqMyAlIDU3KSkKKyAgICAgICAgemlwZjIuY2xvc2UoKQorCisgICAgZGVmIHRlc3RNb3JlVGhhbjY0a0ZpbGVzQXBwZW5kKHNlbGYpOgorICAgICAgICB6aXBmID0gemlwZmlsZS5aaXBGaWxlKFRFU1RGTiwgbW9kZT0idyIsIGFsbG93WmlwNjQ9RmFsc2UpCisgICAgICAgIHppcGYuZGVidWcgPSAxMDAKKyAgICAgICAgbnVtZmlsZXMgPSAoMSA8PCAxNikgLSAxCisgICAgICAgIGZvciBpIGluIHJhbmdlKG51bWZpbGVzKToKKyAgICAgICAgICAgIHppcGYud3JpdGVzdHIoImZvbyUwOGQiICUgaSwgIiVkIiAlIChpKiozICUgNTcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih6aXBmLm5hbWVsaXN0KCkpLCBudW1maWxlcykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyh6aXBmaWxlLkxhcmdlWmlwRmlsZSk6CisgICAgICAgICAgICB6aXBmLndyaXRlc3RyKCJmb28lMDhkIiAlIG51bWZpbGVzLCBiJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHppcGYubmFtZWxpc3QoKSksIG51bWZpbGVzKQogICAgICAgICB6aXBmLmNsb3NlKCkKIAorICAgICAgICB6aXBmID0gemlwZmlsZS5aaXBGaWxlKFRFU1RGTiwgbW9kZT0iYSIsIGFsbG93WmlwNjQ9RmFsc2UpCisgICAgICAgIHppcGYuZGVidWcgPSAxMDAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oemlwZi5uYW1lbGlzdCgpKSwgbnVtZmlsZXMpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoemlwZmlsZS5MYXJnZVppcEZpbGUpOgorICAgICAgICAgICAgemlwZi53cml0ZXN0cigiZm9vJTA4ZCIgJSBudW1maWxlcywgYicnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih6aXBmLm5hbWVsaXN0KCkpLCBudW1maWxlcykKKyAgICAgICAgemlwZi5jbG9zZSgpCisKKyAgICAgICAgemlwZiA9IHppcGZpbGUuWmlwRmlsZShURVNURk4sIG1vZGU9ImEiLCBhbGxvd1ppcDY0PVRydWUpCisgICAgICAgIHppcGYuZGVidWcgPSAxMDAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oemlwZi5uYW1lbGlzdCgpKSwgbnVtZmlsZXMpCisgICAgICAgIG51bWZpbGVzMiA9ICgxIDw8IDE2KSAqIDMvLzIKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UobnVtZmlsZXMsIG51bWZpbGVzMik6CisgICAgICAgICAgICB6aXBmLndyaXRlc3RyKCJmb28lMDhkIiAlIGksICIlZCIgJSAoaSoqMyAlIDU3KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oemlwZi5uYW1lbGlzdCgpKSwgbnVtZmlsZXMyKQorICAgICAgICB6aXBmLmNsb3NlKCkKKworICAgICAgICB6aXBmMiA9IHppcGZpbGUuWmlwRmlsZShURVNURk4sIG1vZGU9InIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih6aXBmMi5uYW1lbGlzdCgpKSwgbnVtZmlsZXMyKQorICAgICAgICBmb3IgaSBpbiByYW5nZShudW1maWxlczIpOgorICAgICAgICAgICAgY29udGVudCA9IHppcGYyLnJlYWQoImZvbyUwOGQiICUgaSkuZGVjb2RlKCdhc2NpaScpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbnRlbnQsICIlZCIgJSAoaSoqMyAlIDU3KSkKKyAgICAgICAgemlwZjIuY2xvc2UoKQorCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgogICAgICAgICBzdXBwb3J0LnVubGluayhURVNURk4pCiAgICAgICAgIHN1cHBvcnQudW5saW5rKFRFU1RGTjIpCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBydW5fdW5pdHRlc3QoVGVzdHNXaXRoU291cmNlRmlsZSwgT3RoZXJUZXN0cykKLQogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF96aXBpbXBvcnQucHkgYi9MaWIvdGVzdC90ZXN0X3ppcGltcG9ydC5weQppbmRleCAzNzYwM2I5Li4xZTM1MWM4IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3ppcGltcG9ydC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3ppcGltcG9ydC5weQpAQCAtMSwxMyArMSwxMiBAQAogaW1wb3J0IHN5cwogaW1wb3J0IG9zCiBpbXBvcnQgbWFyc2hhbAotaW1wb3J0IGltcAoraW1wb3J0IGltcG9ydGxpYi51dGlsCiBpbXBvcnQgc3RydWN0CiBpbXBvcnQgdGltZQogaW1wb3J0IHVuaXR0ZXN0CiAKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAotZnJvbSB0ZXN0LnRlc3RfaW1wb3J0aG9va3MgaW1wb3J0IEltcG9ydEhvb2tzQmFzZVRlc3RDYXNlLCB0ZXN0X3NyYywgdGVzdF9jbwogCiBmcm9tIHppcGZpbGUgaW1wb3J0IFppcEZpbGUsIFppcEluZm8sIFpJUF9TVE9SRUQsIFpJUF9ERUZMQVRFRAogCkBAIC0xNyw2ICsxNiwxNCBAQAogaW1wb3J0IGluc3BlY3QKIGltcG9ydCBpbwogZnJvbSB0cmFjZWJhY2sgaW1wb3J0IGV4dHJhY3RfdGIsIGV4dHJhY3Rfc3RhY2ssIHByaW50X3RiCisKK3Rlc3Rfc3JjID0gIiIiXAorZGVmIGdldF9uYW1lKCk6CisgICAgcmV0dXJuIF9fbmFtZV9fCitkZWYgZ2V0X2ZpbGUoKToKKyAgICByZXR1cm4gX19maWxlX18KKyIiIgordGVzdF9jbyA9IGNvbXBpbGUodGVzdF9zcmMsICI8Pz8/PiIsICJleGVjIikKIHJhaXNlX3NyYyA9ICdkZWYgZG9fcmFpc2UoKTogcmFpc2UgVHlwZUVycm9yXG4nCiAKIGRlZiBtYWtlX3B5YyhjbywgbXRpbWUsIHNpemUpOgpAQCAtMjcsNyArMzQsOCBAQAogICAgICAgICAgICAgbXRpbWUgPSBpbnQobXRpbWUpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBtdGltZSA9IGludCgtMHgxMDAwMDAwMDAgKyBpbnQobXRpbWUpKQotICAgIHB5YyA9IGltcC5nZXRfbWFnaWMoKSArIHN0cnVjdC5wYWNrKCI8aWkiLCBpbnQobXRpbWUpLCBzaXplICYgMHhGRkZGRkZGRikgKyBkYXRhCisgICAgcHljID0gKGltcG9ydGxpYi51dGlsLk1BR0lDX05VTUJFUiArCisgICAgICAgIHN0cnVjdC5wYWNrKCI8aWkiLCBpbnQobXRpbWUpLCBzaXplICYgMHhGRkZGRkZGRikgKyBkYXRhKQogICAgIHJldHVybiBweWMKIAogZGVmIG1vZHVsZV9wYXRoX3RvX2RvdHRlZF9uYW1lKHBhdGgpOgpAQCAtNDIsMTAgKzUwLDI3IEBACiBURVNUUEFDSzIgPSAiemlwdGVzdHBhY2thZ2UyIgogVEVNUF9aSVAgPSBvcy5wYXRoLmFic3BhdGgoImp1bms5NTE0Mi56aXAiKQogCi1weWNfZmlsZSA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShURVNUTU9EICsgJy5weScpCitweWNfZmlsZSA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKFRFU1RNT0QgKyAnLnB5JykKIHB5Y19leHQgPSAoJy5weWMnIGlmIF9fZGVidWdfXyBlbHNlICcucHlvJykKIAogCitjbGFzcyBJbXBvcnRIb29rc0Jhc2VUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYucGF0aCA9IHN5cy5wYXRoWzpdCisgICAgICAgIHNlbGYubWV0YV9wYXRoID0gc3lzLm1ldGFfcGF0aFs6XQorICAgICAgICBzZWxmLnBhdGhfaG9va3MgPSBzeXMucGF0aF9ob29rc1s6XQorICAgICAgICBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZS5jbGVhcigpCisgICAgICAgIHNlbGYubW9kdWxlc19iZWZvcmUgPSBzdXBwb3J0Lm1vZHVsZXNfc2V0dXAoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzeXMucGF0aFs6XSA9IHNlbGYucGF0aAorICAgICAgICBzeXMubWV0YV9wYXRoWzpdID0gc2VsZi5tZXRhX3BhdGgKKyAgICAgICAgc3lzLnBhdGhfaG9va3NbOl0gPSBzZWxmLnBhdGhfaG9va3MKKyAgICAgICAgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGUuY2xlYXIoKQorICAgICAgICBzdXBwb3J0Lm1vZHVsZXNfY2xlYW51cCgqc2VsZi5tb2R1bGVzX2JlZm9yZSkKKworCiBjbGFzcyBVbmNvbXByZXNzZWRaaXBJbXBvcnRUZXN0Q2FzZShJbXBvcnRIb29rc0Jhc2VUZXN0Q2FzZSk6CiAKICAgICBjb21wcmVzc2lvbiA9IFpJUF9TVE9SRUQKQEAgLTE5Niw2ICsyMjEsNyBAQAogICAgICAgICAgICAgZm9yIG5hbWUsIChtdGltZSwgZGF0YSkgaW4gZmlsZXMuaXRlbXMoKToKICAgICAgICAgICAgICAgICB6aW5mbyA9IFppcEluZm8obmFtZSwgdGltZS5sb2NhbHRpbWUobXRpbWUpKQogICAgICAgICAgICAgICAgIHppbmZvLmNvbXByZXNzX3R5cGUgPSBzZWxmLmNvbXByZXNzaW9uCisgICAgICAgICAgICAgICAgemluZm8uY29tbWVudCA9IGIic3BhbSIKICAgICAgICAgICAgICAgICB6LndyaXRlc3RyKHppbmZvLCBkYXRhKQogICAgICAgICAgICAgei5jbG9zZSgpCiAKQEAgLTI0NSw2ICsyNzEsNyBAQAogICAgICAgICAgICAgZm9yIG5hbWUsIChtdGltZSwgZGF0YSkgaW4gZmlsZXMuaXRlbXMoKToKICAgICAgICAgICAgICAgICB6aW5mbyA9IFppcEluZm8obmFtZSwgdGltZS5sb2NhbHRpbWUobXRpbWUpKQogICAgICAgICAgICAgICAgIHppbmZvLmNvbXByZXNzX3R5cGUgPSBzZWxmLmNvbXByZXNzaW9uCisgICAgICAgICAgICAgICAgemluZm8uY29tbWVudCA9IGIiZWdncyIKICAgICAgICAgICAgICAgICB6LndyaXRlc3RyKHppbmZvLCBkYXRhKQogICAgICAgICAgICAgei5jbG9zZSgpCiAKQEAgLTQ1OSw3ICs0ODYsNyBAQAogCiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhlcnJvciwgei5sb2FkX21vZHVsZSwgJ2FiYycpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhlcnJvciwgei5nZXRfY29kZSwgJ2FiYycpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCB6LmdldF9kYXRhLCAnYWJjJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHouZ2V0X2RhdGEsICdhYmMnKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZXJyb3IsIHouZ2V0X3NvdXJjZSwgJ2FiYycpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhlcnJvciwgei5pc19wYWNrYWdlLCAnYWJjJykKICAgICAgICAgZmluYWxseToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfemlwaW1wb3J0X3N1cHBvcnQucHkgYi9MaWIvdGVzdC90ZXN0X3ppcGltcG9ydF9zdXBwb3J0LnB5CmluZGV4IGY3ZjMzOTguLjY2YzM1NTcgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfemlwaW1wb3J0X3N1cHBvcnQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF96aXBpbXBvcnRfc3VwcG9ydC5weQpAQCAtNTcsNyArNTcsNyBAQAogICAgICMgVGhpcyB1c2VkIHRvIHVzZSB0aGUgSW1wb3J0SG9va3NCYXNlVGVzdENhc2UgdG8gcmVzdG9yZQogICAgICMgdGhlIHN0YXRlIG9mIHRoZSBpbXBvcnQgcmVsYXRlZCBpbmZvcm1hdGlvbgogICAgICMgaW4gdGhlIHN5cyBtb2R1bGUgYWZ0ZXIgZWFjaCB0ZXN0LiBIb3dldmVyLCB0aGF0IHJlc3RvcmVzCi0gICAgIyAqdG9vIG11Y2gqIGluZm9ybWF0aW9uIGFuZCBicmVha3MgZm9yIHRoZSBpbnZvY2F0aW9uIG9mCisgICAgIyAqdG9vIG11Y2gqIGluZm9ybWF0aW9uIGFuZCBicmVha3MgZm9yIHRoZSBpbnZvY2F0aW9uCiAgICAgIyBvZiB0ZXN0X2RvY3Rlc3QuIFNvIHdlIGRvIG91ciBvd24gdGhpbmcgYW5kIGxlYXZlCiAgICAgIyBzeXMubW9kdWxlcyBhbG9uZS4KICAgICAjIFdlIGFsc28gY2xlYXIgdGhlIGxpbmVjYWNoZSBhbmQgemlwaW1wb3J0IGNhY2hlCkBAIC0yMjcsMTMgKzIyNywxNSBAQAogICAgICAgICAgICAgcCA9IHNwYXduX3B5dGhvbihzY3JpcHRfbmFtZSkKICAgICAgICAgICAgIHAuc3RkaW4ud3JpdGUoYidsXG4nKQogICAgICAgICAgICAgZGF0YSA9IGtpbGxfcHl0aG9uKHApCi0gICAgICAgICAgICBzZWxmLmFzc2VydEluKHNjcmlwdF9uYW1lLmVuY29kZSgndXRmLTgnKSwgZGF0YSkKKyAgICAgICAgICAgICMgYmRiL3BkYiBhcHBsaWVzIG5vcm1jYXNlIHRvIGl0cyBmaWxlbmFtZSBiZWZvcmUgZGlzcGxheWluZworICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihvcy5wYXRoLm5vcm1jYXNlKHNjcmlwdF9uYW1lLmVuY29kZSgndXRmLTgnKSksIGRhdGEpCiAgICAgICAgICAgICB6aXBfbmFtZSwgcnVuX25hbWUgPSBtYWtlX3ppcF9zY3JpcHQoZCwgInRlc3RfemlwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdF9uYW1lLCAnX19tYWluX18ucHknKQogICAgICAgICAgICAgcCA9IHNwYXduX3B5dGhvbih6aXBfbmFtZSkKICAgICAgICAgICAgIHAuc3RkaW4ud3JpdGUoYidsXG4nKQogICAgICAgICAgICAgZGF0YSA9IGtpbGxfcHl0aG9uKHApCi0gICAgICAgICAgICBzZWxmLmFzc2VydEluKHJ1bl9uYW1lLmVuY29kZSgndXRmLTgnKSwgZGF0YSkKKyAgICAgICAgICAgICMgYmRiL3BkYiBhcHBsaWVzIG5vcm1jYXNlIHRvIGl0cyBmaWxlbmFtZSBiZWZvcmUgZGlzcGxheWluZworICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihvcy5wYXRoLm5vcm1jYXNlKHJ1bl9uYW1lLmVuY29kZSgndXRmLTgnKSksIGRhdGEpCiAKIAogZGVmIHRlc3RfbWFpbigpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF96bGliLnB5IGIvTGliL3Rlc3QvdGVzdF96bGliLnB5CmluZGV4IDFkYWE4ZjguLmUxNTc1YzQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfemxpYi5weQorKysgYi9MaWIvdGVzdC90ZXN0X3psaWIucHkKQEAgLTEsNiArMSw3IEBACiBpbXBvcnQgdW5pdHRlc3QKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogaW1wb3J0IGJpbmFzY2lpCitpbXBvcnQgcGlja2xlCiBpbXBvcnQgcmFuZG9tCiBpbXBvcnQgc3lzCiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgYmlnbWVtdGVzdCwgXzFHLCBfNEcKQEAgLTIyMiw5ICsyMjMsOSBAQAogICAgICAgICBsZXZlbCA9IDIKICAgICAgICAgbWV0aG9kID0gemxpYi5ERUZMQVRFRAogICAgICAgICB3Yml0cyA9IC0xMgotICAgICAgICBtZW1sZXZlbCA9IDkKKyAgICAgICAgbWVtTGV2ZWwgPSA5CiAgICAgICAgIHN0cmF0ZWd5ID0gemxpYi5aX0ZJTFRFUkVECi0gICAgICAgIGNvID0gemxpYi5jb21wcmVzc29iaihsZXZlbCwgbWV0aG9kLCB3Yml0cywgbWVtbGV2ZWwsIHN0cmF0ZWd5KQorICAgICAgICBjbyA9IHpsaWIuY29tcHJlc3NvYmoobGV2ZWwsIG1ldGhvZCwgd2JpdHMsIG1lbUxldmVsLCBzdHJhdGVneSkKICAgICAgICAgeDEgPSBjby5jb21wcmVzcyhIQU1MRVRfU0NFTkUpCiAgICAgICAgIHgyID0gY28uZmx1c2goKQogICAgICAgICBkY28gPSB6bGliLmRlY29tcHJlc3NvYmood2JpdHMpCkBAIC0yMzIsNiArMjMzLDEwIEBACiAgICAgICAgIHkyID0gZGNvLmZsdXNoKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChIQU1MRVRfU0NFTkUsIHkxICsgeTIpCiAKKyAgICAgICAgIyBrZXl3b3JkIGFyZ3VtZW50cyBzaG91bGQgYWxzbyBiZSBzdXBwb3J0ZWQKKyAgICAgICAgemxpYi5jb21wcmVzc29iaihsZXZlbD1sZXZlbCwgbWV0aG9kPW1ldGhvZCwgd2JpdHM9d2JpdHMsCisgICAgICAgICAgICBtZW1MZXZlbD1tZW1MZXZlbCwgc3RyYXRlZ3k9c3RyYXRlZ3ksIHpkaWN0PWIiIikKKwogICAgIGRlZiB0ZXN0X2NvbXByZXNzaW5jcmVtZW50YWwoc2VsZik6CiAgICAgICAgICMgY29tcHJlc3Mgb2JqZWN0IGluIHN0ZXBzLCBkZWNvbXByZXNzIG9iamVjdCBhcyBvbmUtc2hvdAogICAgICAgICBkYXRhID0gSEFNTEVUX1NDRU5FICogMTI4CkBAIC01OTYsNiArNjAxLDE2IEBACiAgICAgICAgIGQuZmx1c2goKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBkLmNvcHkpCiAKKyAgICBkZWYgdGVzdF9jb21wcmVzc3BpY2tsZShzZWxmKToKKyAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKChUeXBlRXJyb3IsIHBpY2tsZS5QaWNrbGluZ0Vycm9yKSk6CisgICAgICAgICAgICAgICAgcGlja2xlLmR1bXBzKHpsaWIuY29tcHJlc3NvYmooemxpYi5aX0JFU1RfQ09NUFJFU1NJT04pLCBwcm90bykKKworICAgIGRlZiB0ZXN0X2RlY29tcHJlc3NwaWNrbGUoc2VsZik6CisgICAgICAgIGZvciBwcm90byBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcygoVHlwZUVycm9yLCBwaWNrbGUuUGlja2xpbmdFcnJvcikpOgorICAgICAgICAgICAgICAgIHBpY2tsZS5kdW1wcyh6bGliLmRlY29tcHJlc3NvYmooKSwgcHJvdG8pCisKICAgICAjIE1lbW9yeSB1c2Ugb2YgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgdGFrZXMgaW50byBhY2NvdW50IG92ZXJhbGxvY2F0aW9uCiAKICAgICBAYmlnbWVtdGVzdChzaXplPV8xRyArIDEwMjQgKiAxMDI0LCBtZW11c2U9MykKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3RmX2luaGVyaXRfY2hlY2sucHkgYi9MaWIvdGVzdC90Zl9pbmhlcml0X2NoZWNrLnB5CmluZGV4IDkyZWJkOTUuLmFmZTUwZDIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3RmX2luaGVyaXRfY2hlY2sucHkKKysrIGIvTGliL3Rlc3QvdGZfaW5oZXJpdF9jaGVjay5weQpAQCAtMTEsNyArMTEsNyBAQAogCiAgICAgdHJ5OgogICAgICAgICBvcy53cml0ZShmZCwgYiJibGF0IikKLSAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICMgU3VjY2VzcyAtLSBjb3VsZCBub3Qgd3JpdGUgdG8gZmQuCiAgICAgICAgIHN5cy5leGl0KDApCiAgICAgZWxzZToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3RpbWVfaGFzaGxpYi5weSBiL0xpYi90ZXN0L3RpbWVfaGFzaGxpYi5weQppbmRleCBkOTM5NDYzLi4yNTg1ZWNiIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90aW1lX2hhc2hsaWIucHkKKysrIGIvTGliL3Rlc3QvdGltZV9oYXNobGliLnB5CkBAIC0xLDcgKzEsOCBAQAogIyBJdCdzIGludGVuZGVkIHRoYXQgdGhpcyBzY3JpcHQgYmUgcnVuIGJ5IGhhbmQuICBJdCBydW5zIHNwZWVkIHRlc3RzIG9uCiAjIGhhc2hsaWIgZnVuY3Rpb25zOyBpdCBkb2VzIG5vdCB0ZXN0IGZvciBjb3JyZWN0bmVzcy4KIAotaW1wb3J0IHN5cywgdGltZQoraW1wb3J0IHN5cworaW1wb3J0IHRpbWUKIGltcG9ydCBoYXNobGliCiAKIApAQCAtOSw4ICsxMCw4IEBACiAgICAgcmFpc2UgUnVudGltZUVycm9yKCJlZWssIGNyZWF0b3JGdW5jIG5vdCBvdmVycmlkZGVuIikKIAogZGVmIHRlc3Rfc2NhbGVkX21zZyhzY2FsZSwgbmFtZSk6Ci0gICAgaXRlcmF0aW9ucyA9IDEwNjIwMS9zY2FsZSAqIDIwCi0gICAgbG9uZ1N0ciA9ICdaJypzY2FsZQorICAgIGl0ZXJhdGlvbnMgPSAxMDYyMDEvL3NjYWxlICogMjAKKyAgICBsb25nU3RyID0gYidaJypzY2FsZQogCiAgICAgbG9jYWxDRiA9IGNyZWF0b3JGdW5jCiAgICAgc3RhcnQgPSB0aW1lLnRpbWUoKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QveG1sdGVzdGRhdGEvdGVzdC54bWwgYi9MaWIvdGVzdC94bWx0ZXN0ZGF0YS90ZXN0LnhtbAppbmRleCA5YWY5MmZiLi45MjEzNmRhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC94bWx0ZXN0ZGF0YS90ZXN0LnhtbAorKysgYi9MaWIvdGVzdC94bWx0ZXN0ZGF0YS90ZXN0LnhtbApAQCAtMSw0ICsxLDQgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/PgogPEhUTUwgeG1sbnM6cHA9Imh0dHA6Ly93d3cuaXNvZ2VuLmNvbS9wYXVsL3Bvc3QtcHJvY2Vzc29yIj4KIDxUSVRMRT5JbnRyb2R1Y3Rpb24gdG8gWFNMPC9USVRMRT4KIDxIMT5JbnRyb2R1Y3Rpb24gdG8gWFNMPC9IMT4KQEAgLTExMCw2ICsxMTAsNiBAQAogCQk8L1VMPgogCQogCi0KK7UKIAkKIDwvSFRNTD4KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3htbHRlc3RkYXRhL3Rlc3QueG1sLm91dCBiL0xpYi90ZXN0L3htbHRlc3RkYXRhL3Rlc3QueG1sLm91dAppbmRleCBkNGFiMWFiLi5mN2U5YWQyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC94bWx0ZXN0ZGF0YS90ZXN0LnhtbC5vdXQKKysrIGIvTGliL3Rlc3QveG1sdGVzdGRhdGEvdGVzdC54bWwub3V0CkBAIC0xMTAsNiArMTEwLDYgQEAKIAkJPC9VTD4KIAkKIAotCiu1CiAJCiA8L0hUTUw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvTGliL3RleHR3cmFwLnB5IGIvTGliL3RleHR3cmFwLnB5CmluZGV4IDcwMjRkNGQuLjE3NTliMGQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXh0d3JhcC5weQorKysgYi9MaWIvdGV4dHdyYXAucHkKQEAgLTcsNyArNyw3IEBACiAKIGltcG9ydCByZQogCi1fX2FsbF9fID0gWydUZXh0V3JhcHBlcicsICd3cmFwJywgJ2ZpbGwnLCAnZGVkZW50JywgJ2luZGVudCddCitfX2FsbF9fID0gWydUZXh0V3JhcHBlcicsICd3cmFwJywgJ2ZpbGwnLCAnZGVkZW50JywgJ2luZGVudCcsICdzaG9ydGVuJ10KIAogIyBIYXJkY29kZSB0aGUgcmVjb2duaXplZCB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMgdG8gdGhlIFVTLUFTQ0lJCiAjIHdoaXRlc3BhY2UgY2hhcmFjdGVycy4gIFRoZSBtYWluIHJlYXNvbiBmb3IgZG9pbmcgdGhpcyBpcyB0aGF0IGluCkBAIC02Miw2ICs2MiwxMCBAQAogICAgICAgICBjb21wb3VuZCB3b3Jkcy4KICAgICAgIGRyb3Bfd2hpdGVzcGFjZSAoZGVmYXVsdDogdHJ1ZSkKICAgICAgICAgRHJvcCBsZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlIGZyb20gbGluZXMuCisgICAgICBtYXhfbGluZXMgKGRlZmF1bHQ6IE5vbmUpCisgICAgICAgIFRydW5jYXRlIHdyYXBwZWQgbGluZXMuCisgICAgICBwbGFjZWhvbGRlciAoZGVmYXVsdDogJyBbLi4uXScpCisgICAgICAgIEFwcGVuZCB0byB0aGUgbGFzdCBsaW5lIG9mIHRydW5jYXRlZCB0ZXh0LgogICAgICIiIgogCiAgICAgdW5pY29kZV93aGl0ZXNwYWNlX3RyYW5zID0ge30KQEAgLTEwNCw3ICsxMDgsMTAgQEAKICAgICAgICAgICAgICAgICAgYnJlYWtfbG9uZ193b3Jkcz1UcnVlLAogICAgICAgICAgICAgICAgICBkcm9wX3doaXRlc3BhY2U9VHJ1ZSwKICAgICAgICAgICAgICAgICAgYnJlYWtfb25faHlwaGVucz1UcnVlLAotICAgICAgICAgICAgICAgICB0YWJzaXplPTgpOgorICAgICAgICAgICAgICAgICB0YWJzaXplPTgsCisgICAgICAgICAgICAgICAgICosCisgICAgICAgICAgICAgICAgIG1heF9saW5lcz1Ob25lLAorICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0nIFsuLi5dJyk6CiAgICAgICAgIHNlbGYud2lkdGggPSB3aWR0aAogICAgICAgICBzZWxmLmluaXRpYWxfaW5kZW50ID0gaW5pdGlhbF9pbmRlbnQKICAgICAgICAgc2VsZi5zdWJzZXF1ZW50X2luZGVudCA9IHN1YnNlcXVlbnRfaW5kZW50CkBAIC0xMTUsNiArMTIyLDggQEAKICAgICAgICAgc2VsZi5kcm9wX3doaXRlc3BhY2UgPSBkcm9wX3doaXRlc3BhY2UKICAgICAgICAgc2VsZi5icmVha19vbl9oeXBoZW5zID0gYnJlYWtfb25faHlwaGVucwogICAgICAgICBzZWxmLnRhYnNpemUgPSB0YWJzaXplCisgICAgICAgIHNlbGYubWF4X2xpbmVzID0gbWF4X2xpbmVzCisgICAgICAgIHNlbGYucGxhY2Vob2xkZXIgPSBwbGFjZWhvbGRlcgogCiAKICAgICAjIC0tIFByaXZhdGUgbWV0aG9kcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTI0LDcgKzEzMyw3IEBACiAgICAgICAgICIiIl9tdW5nZV93aGl0ZXNwYWNlKHRleHQgOiBzdHJpbmcpIC0+IHN0cmluZwogCiAgICAgICAgIE11bmdlIHdoaXRlc3BhY2UgaW4gdGV4dDogZXhwYW5kIHRhYnMgYW5kIGNvbnZlcnQgYWxsIG90aGVyCi0gICAgICAgIHdoaXRlc3BhY2UgY2hhcmFjdGVycyB0byBzcGFjZXMuICBFZy4gIiBmb29cdGJhclxuXG5iYXoiCisgICAgICAgIHdoaXRlc3BhY2UgY2hhcmFjdGVycyB0byBzcGFjZXMuICBFZy4gIiBmb29cXHRiYXJcXG5cXG5iYXoiCiAgICAgICAgIGJlY29tZXMgIiBmb28gICAgYmFyICBiYXoiLgogICAgICAgICAiIiIKICAgICAgICAgaWYgc2VsZi5leHBhbmRfdGFiczoKQEAgLTE2MCw3ICsxNjksNyBAQAogICAgICAgICAiIiJfZml4X3NlbnRlbmNlX2VuZGluZ3MoY2h1bmtzIDogW3N0cmluZ10pCiAKICAgICAgICAgQ29ycmVjdCBmb3Igc2VudGVuY2UgZW5kaW5ncyBidXJpZWQgaW4gJ2NodW5rcycuICBFZy4gd2hlbiB0aGUKLSAgICAgICAgb3JpZ2luYWwgdGV4dCBjb250YWlucyAiLi4uIGZvby5cbkJhciAuLi4iLCBtdW5nZV93aGl0ZXNwYWNlKCkKKyAgICAgICAgb3JpZ2luYWwgdGV4dCBjb250YWlucyAiLi4uIGZvby5cXG5CYXIgLi4uIiwgbXVuZ2Vfd2hpdGVzcGFjZSgpCiAgICAgICAgIGFuZCBzcGxpdCgpIHdpbGwgY29udmVydCB0aGF0IHRvIFsuLi4sICJmb28uIiwgIiAiLCAiQmFyIiwgLi4uXQogICAgICAgICB3aGljaCBoYXMgb25lIHRvbyBmZXcgc3BhY2VzOyB0aGlzIG1ldGhvZCBzaW1wbHkgY2hhbmdlcyB0aGUgb25lCiAgICAgICAgIHNwYWNlIHRvIHR3by4KQEAgLTIyMyw2ICsyMzIsMTMgQEAKICAgICAgICAgbGluZXMgPSBbXQogICAgICAgICBpZiBzZWxmLndpZHRoIDw9IDA6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJpbnZhbGlkIHdpZHRoICVyIChtdXN0IGJlID4gMCkiICUgc2VsZi53aWR0aCkKKyAgICAgICAgaWYgc2VsZi5tYXhfbGluZXMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBpZiBzZWxmLm1heF9saW5lcyA+IDE6CisgICAgICAgICAgICAgICAgaW5kZW50ID0gc2VsZi5zdWJzZXF1ZW50X2luZGVudAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpbmRlbnQgPSBzZWxmLmluaXRpYWxfaW5kZW50CisgICAgICAgICAgICBpZiBsZW4oaW5kZW50KSArIGxlbihzZWxmLnBsYWNlaG9sZGVyLmxzdHJpcCgpKSA+IHNlbGYud2lkdGg6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigicGxhY2Vob2xkZXIgdG9vIGxhcmdlIGZvciBtYXggd2lkdGgiKQogCiAgICAgICAgICMgQXJyYW5nZSBpbiByZXZlcnNlIG9yZGVyIHNvIGl0ZW1zIGNhbiBiZSBlZmZpY2llbnRseSBwb3BwZWQKICAgICAgICAgIyBmcm9tIGEgc3RhY2sgb2YgY2h1Y2tzLgpAQCAtMjY1LDE4ICsyODEsNDcgQEAKICAgICAgICAgICAgICMgZml0IG9uICphbnkqIGxpbmUgKG5vdCBqdXN0IHRoaXMgb25lKS4KICAgICAgICAgICAgIGlmIGNodW5rcyBhbmQgbGVuKGNodW5rc1stMV0pID4gd2lkdGg6CiAgICAgICAgICAgICAgICAgc2VsZi5faGFuZGxlX2xvbmdfd29yZChjaHVua3MsIGN1cl9saW5lLCBjdXJfbGVuLCB3aWR0aCkKKyAgICAgICAgICAgICAgICBjdXJfbGVuID0gc3VtKG1hcChsZW4sIGN1cl9saW5lKSkKIAogICAgICAgICAgICAgIyBJZiB0aGUgbGFzdCBjaHVuayBvbiB0aGlzIGxpbmUgaXMgYWxsIHdoaXRlc3BhY2UsIGRyb3AgaXQuCiAgICAgICAgICAgICBpZiBzZWxmLmRyb3Bfd2hpdGVzcGFjZSBhbmQgY3VyX2xpbmUgYW5kIGN1cl9saW5lWy0xXS5zdHJpcCgpID09ICcnOgorICAgICAgICAgICAgICAgIGN1cl9sZW4gLT0gbGVuKGN1cl9saW5lWy0xXSkKICAgICAgICAgICAgICAgICBkZWwgY3VyX2xpbmVbLTFdCiAKLSAgICAgICAgICAgICMgQ29udmVydCBjdXJyZW50IGxpbmUgYmFjayB0byBhIHN0cmluZyBhbmQgc3RvcmUgaXQgaW4gbGlzdAotICAgICAgICAgICAgIyBvZiBhbGwgbGluZXMgKHJldHVybiB2YWx1ZSkuCiAgICAgICAgICAgICBpZiBjdXJfbGluZToKLSAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoaW5kZW50ICsgJycuam9pbihjdXJfbGluZSkpCisgICAgICAgICAgICAgICAgaWYgKHNlbGYubWF4X2xpbmVzIGlzIE5vbmUgb3IKKyAgICAgICAgICAgICAgICAgICAgbGVuKGxpbmVzKSArIDEgPCBzZWxmLm1heF9saW5lcyBvcgorICAgICAgICAgICAgICAgICAgICAobm90IGNodW5rcyBvcgorICAgICAgICAgICAgICAgICAgICAgc2VsZi5kcm9wX3doaXRlc3BhY2UgYW5kCisgICAgICAgICAgICAgICAgICAgICBsZW4oY2h1bmtzKSA9PSAxIGFuZAorICAgICAgICAgICAgICAgICAgICAgbm90IGNodW5rc1swXS5zdHJpcCgpKSBhbmQgY3VyX2xlbiA8PSB3aWR0aCk6CisgICAgICAgICAgICAgICAgICAgICMgQ29udmVydCBjdXJyZW50IGxpbmUgYmFjayB0byBhIHN0cmluZyBhbmQgc3RvcmUgaXQgaW4KKyAgICAgICAgICAgICAgICAgICAgIyBsaXN0IG9mIGFsbCBsaW5lcyAocmV0dXJuIHZhbHVlKS4KKyAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKGluZGVudCArICcnLmpvaW4oY3VyX2xpbmUpKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHdoaWxlIGN1cl9saW5lOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cl9saW5lWy0xXS5zdHJpcCgpIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cl9sZW4gKyBsZW4oc2VsZi5wbGFjZWhvbGRlcikgPD0gd2lkdGgpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cl9saW5lLmFwcGVuZChzZWxmLnBsYWNlaG9sZGVyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChpbmRlbnQgKyAnJy5qb2luKGN1cl9saW5lKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICAgICAgY3VyX2xlbiAtPSBsZW4oY3VyX2xpbmVbLTFdKQorICAgICAgICAgICAgICAgICAgICAgICAgZGVsIGN1cl9saW5lWy0xXQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbGluZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldl9saW5lID0gbGluZXNbLTFdLnJzdHJpcCgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxlbihwcmV2X2xpbmUpICsgbGVuKHNlbGYucGxhY2Vob2xkZXIpIDw9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLndpZHRoKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZXNbLTFdID0gcHJldl9saW5lICsgc2VsZi5wbGFjZWhvbGRlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKGluZGVudCArIHNlbGYucGxhY2Vob2xkZXIubHN0cmlwKCkpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCiAKICAgICAgICAgcmV0dXJuIGxpbmVzCiAKKyAgICBkZWYgX3NwbGl0X2NodW5rcyhzZWxmLCB0ZXh0KToKKyAgICAgICAgdGV4dCA9IHNlbGYuX211bmdlX3doaXRlc3BhY2UodGV4dCkKKyAgICAgICAgcmV0dXJuIHNlbGYuX3NwbGl0KHRleHQpCiAKICAgICAjIC0tIFB1YmxpYyBpbnRlcmZhY2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC0yODksOCArMzM0LDcgQEAKICAgICAgICAgYW5kIGFsbCBvdGhlciB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMgKGluY2x1ZGluZyBuZXdsaW5lKSBhcmUKICAgICAgICAgY29udmVydGVkIHRvIHNwYWNlLgogICAgICAgICAiIiIKLSAgICAgICAgdGV4dCA9IHNlbGYuX211bmdlX3doaXRlc3BhY2UodGV4dCkKLSAgICAgICAgY2h1bmtzID0gc2VsZi5fc3BsaXQodGV4dCkKKyAgICAgICAgY2h1bmtzID0gc2VsZi5fc3BsaXRfY2h1bmtzKHRleHQpCiAgICAgICAgIGlmIHNlbGYuZml4X3NlbnRlbmNlX2VuZGluZ3M6CiAgICAgICAgICAgICBzZWxmLl9maXhfc2VudGVuY2VfZW5kaW5ncyhjaHVua3MpCiAgICAgICAgIHJldHVybiBzZWxmLl93cmFwX2NodW5rcyhjaHVua3MpCkBAIC0zMzIsNiArMzc2LDIxIEBACiAgICAgdyA9IFRleHRXcmFwcGVyKHdpZHRoPXdpZHRoLCAqKmt3YXJncykKICAgICByZXR1cm4gdy5maWxsKHRleHQpCiAKK2RlZiBzaG9ydGVuKHRleHQsIHdpZHRoLCAqKmt3YXJncyk6CisgICAgIiIiQ29sbGFwc2UgYW5kIHRydW5jYXRlIHRoZSBnaXZlbiB0ZXh0IHRvIGZpdCBpbiB0aGUgZ2l2ZW4gd2lkdGguCisKKyAgICBUaGUgdGV4dCBmaXJzdCBoYXMgaXRzIHdoaXRlc3BhY2UgY29sbGFwc2VkLiAgSWYgaXQgdGhlbiBmaXRzIGluCisgICAgdGhlICp3aWR0aCosIGl0IGlzIHJldHVybmVkIGFzIGlzLiAgT3RoZXJ3aXNlLCBhcyBtYW55IHdvcmRzCisgICAgYXMgcG9zc2libGUgYXJlIGpvaW5lZCBhbmQgdGhlbiB0aGUgcGxhY2Vob2xkZXIgaXMgYXBwZW5kZWQ6OgorCisgICAgICAgID4+PiB0ZXh0d3JhcC5zaG9ydGVuKCJIZWxsbyAgd29ybGQhIiwgd2lkdGg9MTIpCisgICAgICAgICdIZWxsbyB3b3JsZCEnCisgICAgICAgID4+PiB0ZXh0d3JhcC5zaG9ydGVuKCJIZWxsbyAgd29ybGQhIiwgd2lkdGg9MTEpCisgICAgICAgICdIZWxsbyBbLi4uXScKKyAgICAiIiIKKyAgICB3ID0gVGV4dFdyYXBwZXIod2lkdGg9d2lkdGgsIG1heF9saW5lcz0xLCAqKmt3YXJncykKKyAgICByZXR1cm4gdy5maWxsKCcgJy5qb2luKHRleHQuc3RyaXAoKS5zcGxpdCgpKSkKKwogCiAjIC0tIExvb3NlbHkgcmVsYXRlZCBmdW5jdGlvbmFsaXR5IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtMzQ2LDcgKzQwNSw3IEBACiAgICAgaW4gaW5kZW50ZWQgZm9ybS4KIAogICAgIE5vdGUgdGhhdCB0YWJzIGFuZCBzcGFjZXMgYXJlIGJvdGggdHJlYXRlZCBhcyB3aGl0ZXNwYWNlLCBidXQgdGhleQotICAgIGFyZSBub3QgZXF1YWw6IHRoZSBsaW5lcyAiICBoZWxsbyIgYW5kICJcdGhlbGxvIiBhcmUKKyAgICBhcmUgbm90IGVxdWFsOiB0aGUgbGluZXMgIiAgaGVsbG8iIGFuZCAiXFx0aGVsbG8iIGFyZQogICAgIGNvbnNpZGVyZWQgdG8gaGF2ZSBubyBjb21tb24gbGVhZGluZyB3aGl0ZXNwYWNlLiAgKFRoaXMgYmVoYXZpb3VyIGlzCiAgICAgbmV3IGluIFB5dGhvbiAyLjU7IG9sZGVyIHZlcnNpb25zIG9mIHRoaXMgbW9kdWxlIGluY29ycmVjdGx5CiAgICAgZXhwYW5kZWQgdGFicyBiZWZvcmUgc2VhcmNoaW5nIGZvciBjb21tb24gbGVhZGluZyB3aGl0ZXNwYWNlLikKQEAgLTM3MCwxMSArNDI5LDE1IEBACiAgICAgICAgIGVsaWYgbWFyZ2luLnN0YXJ0c3dpdGgoaW5kZW50KToKICAgICAgICAgICAgIG1hcmdpbiA9IGluZGVudAogCi0gICAgICAgICMgQ3VycmVudCBsaW5lIGFuZCBwcmV2aW91cyB3aW5uZXIgaGF2ZSBubyBjb21tb24gd2hpdGVzcGFjZToKLSAgICAgICAgIyB0aGVyZSBpcyBubyBtYXJnaW4uCisgICAgICAgICMgRmluZCB0aGUgbGFyZ2VzdCBjb21tb24gd2hpdGVzcGFjZSBiZXR3ZWVuIGN1cnJlbnQgbGluZSBhbmQgcHJldmlvdXMKKyAgICAgICAgIyB3aW5uZXIuCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBtYXJnaW4gPSAiIgotICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGZvciBpLCAoeCwgeSkgaW4gZW51bWVyYXRlKHppcChtYXJnaW4sIGluZGVudCkpOgorICAgICAgICAgICAgICAgIGlmIHggIT0geToKKyAgICAgICAgICAgICAgICAgICAgbWFyZ2luID0gbWFyZ2luWzppXQorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBtYXJnaW4gPSBtYXJnaW5bOmxlbihpbmRlbnQpXQogCiAgICAgIyBzYW5pdHkgY2hlY2sgKHRlc3RpbmcvZGVidWdnaW5nIG9ubHkpCiAgICAgaWYgMCBhbmQgbWFyZ2luOgpkaWZmIC0tZ2l0IGEvTGliL3RocmVhZGluZy5weSBiL0xpYi90aHJlYWRpbmcucHkKaW5kZXggNjI1YzliOS4uNTZhNDA2MCAxMDA2NDQKLS0tIGEvTGliL3RocmVhZGluZy5weQorKysgYi9MaWIvdGhyZWFkaW5nLnB5CkBAIC0zLDEzICszLDE3IEBACiBpbXBvcnQgc3lzIGFzIF9zeXMKIGltcG9ydCBfdGhyZWFkCiAKLWZyb20gdGltZSBpbXBvcnQgc2xlZXAgYXMgX3NsZWVwCiB0cnk6CiAgICAgZnJvbSB0aW1lIGltcG9ydCBtb25vdG9uaWMgYXMgX3RpbWUKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICBmcm9tIHRpbWUgaW1wb3J0IHRpbWUgYXMgX3RpbWUKIGZyb20gdHJhY2ViYWNrIGltcG9ydCBmb3JtYXRfZXhjIGFzIF9mb3JtYXRfZXhjCiBmcm9tIF93ZWFrcmVmc2V0IGltcG9ydCBXZWFrU2V0Citmcm9tIGl0ZXJ0b29scyBpbXBvcnQgaXNsaWNlIGFzIF9pc2xpY2UsIGNvdW50IGFzIF9jb3VudAordHJ5OgorICAgIGZyb20gX2NvbGxlY3Rpb25zIGltcG9ydCBkZXF1ZSBhcyBfZGVxdWUKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBkZXF1ZSBhcyBfZGVxdWUKIAogIyBOb3RlIHJlZ2FyZGluZyBQRVAgOCBjb21wbGlhbnQgbmFtZXMKICMgIFRoaXMgdGhyZWFkaW5nIG1vZGVsIHdhcyBvcmlnaW5hbGx5IGluc3BpcmVkIGJ5IEphdmEsIGFuZCBpbmhlcml0ZWQKQEAgLTI4LDYgKzMyLDcgQEAKICMgUmVuYW1lIHNvbWUgc3R1ZmYgc28gImZyb20gdGhyZWFkaW5nIGltcG9ydCAqIiBpcyBzYWZlCiBfc3RhcnRfbmV3X3RocmVhZCA9IF90aHJlYWQuc3RhcnRfbmV3X3RocmVhZAogX2FsbG9jYXRlX2xvY2sgPSBfdGhyZWFkLmFsbG9jYXRlX2xvY2sKK19zZXRfc2VudGluZWwgPSBfdGhyZWFkLl9zZXRfc2VudGluZWwKIGdldF9pZGVudCA9IF90aHJlYWQuZ2V0X2lkZW50CiBUaHJlYWRFcnJvciA9IF90aHJlYWQuZXJyb3IKIHRyeToKQEAgLTEzMiw3ICsxMzcsNyBAQAogICAgICAgICAiIiIKICAgICAgICAgbWUgPSBnZXRfaWRlbnQoKQogICAgICAgICBpZiBzZWxmLl9vd25lciA9PSBtZToKLSAgICAgICAgICAgIHNlbGYuX2NvdW50ID0gc2VsZi5fY291bnQgKyAxCisgICAgICAgICAgICBzZWxmLl9jb3VudCArPSAxCiAgICAgICAgICAgICByZXR1cm4gMQogICAgICAgICByYyA9IHNlbGYuX2Jsb2NrLmFjcXVpcmUoYmxvY2tpbmcsIHRpbWVvdXQpCiAgICAgICAgIGlmIHJjOgpAQCAtMjI0LDcgKzIyOSw3IEBACiAgICAgICAgICAgICBzZWxmLl9pc19vd25lZCA9IGxvY2suX2lzX293bmVkCiAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgc2VsZi5fd2FpdGVycyA9IFtdCisgICAgICAgIHNlbGYuX3dhaXRlcnMgPSBfZGVxdWUoKQogCiAgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYuX2xvY2suX19lbnRlcl9fKCkKQEAgLTI0Myw3ICsyNDgsNyBAQAogCiAgICAgZGVmIF9pc19vd25lZChzZWxmKToKICAgICAgICAgIyBSZXR1cm4gVHJ1ZSBpZiBsb2NrIGlzIG93bmVkIGJ5IGN1cnJlbnRfdGhyZWFkLgotICAgICAgICAjIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBvbmx5IGlmIF9fbG9jayBkb2Vzbid0IGhhdmUgX2lzX293bmVkKCkuCisgICAgICAgICMgVGhpcyBtZXRob2QgaXMgY2FsbGVkIG9ubHkgaWYgX2xvY2sgZG9lc24ndCBoYXZlIF9pc19vd25lZCgpLgogICAgICAgICBpZiBzZWxmLl9sb2NrLmFjcXVpcmUoMCk6CiAgICAgICAgICAgICBzZWxmLl9sb2NrLnJlbGVhc2UoKQogICAgICAgICAgICAgcmV0dXJuIEZhbHNlCkBAIC0yNzksNiArMjg0LDcgQEAKICAgICAgICAgd2FpdGVyLmFjcXVpcmUoKQogICAgICAgICBzZWxmLl93YWl0ZXJzLmFwcGVuZCh3YWl0ZXIpCiAgICAgICAgIHNhdmVkX3N0YXRlID0gc2VsZi5fcmVsZWFzZV9zYXZlKCkKKyAgICAgICAgZ290aXQgPSBGYWxzZQogICAgICAgICB0cnk6ICAgICMgcmVzdG9yZSBzdGF0ZSBubyBtYXR0ZXIgd2hhdCAoZS5nLiwgS2V5Ym9hcmRJbnRlcnJ1cHQpCiAgICAgICAgICAgICBpZiB0aW1lb3V0IGlzIE5vbmU6CiAgICAgICAgICAgICAgICAgd2FpdGVyLmFjcXVpcmUoKQpAQCAtMjg4LDE0ICsyOTQsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgZ290aXQgPSB3YWl0ZXIuYWNxdWlyZShUcnVlLCB0aW1lb3V0KQogICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgIGdvdGl0ID0gd2FpdGVyLmFjcXVpcmUoRmFsc2UpCi0gICAgICAgICAgICAgICAgaWYgbm90IGdvdGl0OgotICAgICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl93YWl0ZXJzLnJlbW92ZSh3YWl0ZXIpCi0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgotICAgICAgICAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgcmV0dXJuIGdvdGl0CiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBzZWxmLl9hY3F1aXJlX3Jlc3RvcmUoc2F2ZWRfc3RhdGUpCisgICAgICAgICAgICBpZiBub3QgZ290aXQ6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBzZWxmLl93YWl0ZXJzLnJlbW92ZSh3YWl0ZXIpCisgICAgICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKIAogICAgIGRlZiB3YWl0X2ZvcihzZWxmLCBwcmVkaWNhdGUsIHRpbWVvdXQ9Tm9uZSk6CiAgICAgICAgICIiIldhaXQgdW50aWwgYSBjb25kaXRpb24gZXZhbHVhdGVzIHRvIFRydWUuCkBAIC0zMzIsMTQgKzMzOCwxNCBAQAogICAgICAgICAiIiIKICAgICAgICAgaWYgbm90IHNlbGYuX2lzX293bmVkKCk6CiAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoImNhbm5vdCBub3RpZnkgb24gdW4tYWNxdWlyZWQgbG9jayIpCi0gICAgICAgIF9fd2FpdGVycyA9IHNlbGYuX3dhaXRlcnMKLSAgICAgICAgd2FpdGVycyA9IF9fd2FpdGVyc1s6bl0KLSAgICAgICAgaWYgbm90IHdhaXRlcnM6CisgICAgICAgIGFsbF93YWl0ZXJzID0gc2VsZi5fd2FpdGVycworICAgICAgICB3YWl0ZXJzX3RvX25vdGlmeSA9IF9kZXF1ZShfaXNsaWNlKGFsbF93YWl0ZXJzLCBuKSkKKyAgICAgICAgaWYgbm90IHdhaXRlcnNfdG9fbm90aWZ5OgogICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGZvciB3YWl0ZXIgaW4gd2FpdGVyczoKKyAgICAgICAgZm9yIHdhaXRlciBpbiB3YWl0ZXJzX3RvX25vdGlmeToKICAgICAgICAgICAgIHdhaXRlci5yZWxlYXNlKCkKICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBfX3dhaXRlcnMucmVtb3ZlKHdhaXRlcikKKyAgICAgICAgICAgICAgICBhbGxfd2FpdGVycy5yZW1vdmUod2FpdGVyKQogICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CiAgICAgICAgICAgICAgICAgcGFzcwogCkBAIC00MTQsNyArNDIwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgICAgIHNlbGYuX2NvbmQud2FpdCh0aW1lb3V0KQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLl92YWx1ZSA9IHNlbGYuX3ZhbHVlIC0gMQorICAgICAgICAgICAgICAgIHNlbGYuX3ZhbHVlIC09IDEKICAgICAgICAgICAgICAgICByYyA9IFRydWUKICAgICAgICAgcmV0dXJuIHJjCiAKQEAgLTQyOCw3ICs0MzQsNyBAQAogCiAgICAgICAgICIiIgogICAgICAgICB3aXRoIHNlbGYuX2NvbmQ6Ci0gICAgICAgICAgICBzZWxmLl92YWx1ZSA9IHNlbGYuX3ZhbHVlICsgMQorICAgICAgICAgICAgc2VsZi5fdmFsdWUgKz0gMQogICAgICAgICAgICAgc2VsZi5fY29uZC5ub3RpZnkoKQogCiAgICAgZGVmIF9fZXhpdF9fKHNlbGYsIHQsIHYsIHRiKToKQEAgLTQ5MCw3ICs0OTYsNyBAQAogCiAgICAgZGVmIF9yZXNldF9pbnRlcm5hbF9sb2NrcyhzZWxmKToKICAgICAgICAgIyBwcml2YXRlISAgY2FsbGVkIGJ5IFRocmVhZC5fcmVzZXRfaW50ZXJuYWxfbG9ja3MgYnkgX2FmdGVyX2ZvcmsoKQotICAgICAgICBzZWxmLl9jb25kLl9faW5pdF9fKCkKKyAgICAgICAgc2VsZi5fY29uZC5fX2luaXRfXyhMb2NrKCkpCiAKICAgICBkZWYgaXNfc2V0KHNlbGYpOgogICAgICAgICAiIiJSZXR1cm4gdHJ1ZSBpZiBhbmQgb25seSBpZiB0aGUgaW50ZXJuYWwgZmxhZyBpcyB0cnVlLiIiIgpAQCAtNTA1LDEyICs1MTEsOSBAQAogICAgICAgICB0aGF0IGNhbGwgd2FpdCgpIG9uY2UgdGhlIGZsYWcgaXMgdHJ1ZSB3aWxsIG5vdCBibG9jayBhdCBhbGwuCiAKICAgICAgICAgIiIiCi0gICAgICAgIHNlbGYuX2NvbmQuYWNxdWlyZSgpCi0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBzZWxmLl9jb25kOgogICAgICAgICAgICAgc2VsZi5fZmxhZyA9IFRydWUKICAgICAgICAgICAgIHNlbGYuX2NvbmQubm90aWZ5X2FsbCgpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBzZWxmLl9jb25kLnJlbGVhc2UoKQogCiAgICAgZGVmIGNsZWFyKHNlbGYpOgogICAgICAgICAiIiJSZXNldCB0aGUgaW50ZXJuYWwgZmxhZyB0byBmYWxzZS4KQEAgLTUxOSwxMSArNTIyLDggQEAKICAgICAgICAgc2V0IHRoZSBpbnRlcm5hbCBmbGFnIHRvIHRydWUgYWdhaW4uCiAKICAgICAgICAgIiIiCi0gICAgICAgIHNlbGYuX2NvbmQuYWNxdWlyZSgpCi0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBzZWxmLl9jb25kOgogICAgICAgICAgICAgc2VsZi5fZmxhZyA9IEZhbHNlCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBzZWxmLl9jb25kLnJlbGVhc2UoKQogCiAgICAgZGVmIHdhaXQoc2VsZiwgdGltZW91dD1Ob25lKToKICAgICAgICAgIiIiQmxvY2sgdW50aWwgdGhlIGludGVybmFsIGZsYWcgaXMgdHJ1ZS4KQEAgLTU0MCwxNCArNTQwLDExIEBACiAgICAgICAgIFRydWUgZXhjZXB0IGlmIGEgdGltZW91dCBpcyBnaXZlbiBhbmQgdGhlIG9wZXJhdGlvbiB0aW1lcyBvdXQuCiAKICAgICAgICAgIiIiCi0gICAgICAgIHNlbGYuX2NvbmQuYWNxdWlyZSgpCi0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBzZWxmLl9jb25kOgogICAgICAgICAgICAgc2lnbmFsZWQgPSBzZWxmLl9mbGFnCiAgICAgICAgICAgICBpZiBub3Qgc2lnbmFsZWQ6CiAgICAgICAgICAgICAgICAgc2lnbmFsZWQgPSBzZWxmLl9jb25kLndhaXQodGltZW91dCkKICAgICAgICAgICAgIHJldHVybiBzaWduYWxlZAotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgc2VsZi5fY29uZC5yZWxlYXNlKCkKIAogCiAjIEEgYmFycmllciBjbGFzcy4gIEluc3BpcmVkIGluIHBhcnQgYnkgdGhlIHB0aHJlYWRfYmFycmllcl8qIGFwaSBhbmQKQEAgLTcyMCwxOCArNzE3LDE1IEBACiAKIAogIyBIZWxwZXIgdG8gZ2VuZXJhdGUgbmV3IHRocmVhZCBuYW1lcwotX2NvdW50ZXIgPSAwCitfY291bnRlciA9IF9jb3VudCgpLl9fbmV4dF9fCitfY291bnRlcigpICMgQ29uc3VtZSAwIHNvIGZpcnN0IG5vbi1tYWluIHRocmVhZCBoYXMgaWQgMS4KIGRlZiBfbmV3bmFtZSh0ZW1wbGF0ZT0iVGhyZWFkLSVkIik6Ci0gICAgZ2xvYmFsIF9jb3VudGVyCi0gICAgX2NvdW50ZXIgPSBfY291bnRlciArIDEKLSAgICByZXR1cm4gdGVtcGxhdGUgJSBfY291bnRlcgorICAgIHJldHVybiB0ZW1wbGF0ZSAlIF9jb3VudGVyKCkKIAogIyBBY3RpdmUgdGhyZWFkIGFkbWluaXN0cmF0aW9uCiBfYWN0aXZlX2xpbWJvX2xvY2sgPSBfYWxsb2NhdGVfbG9jaygpCiBfYWN0aXZlID0ge30gICAgIyBtYXBzIHRocmVhZCBpZCB0byBUaHJlYWQgb2JqZWN0CiBfbGltYm8gPSB7fQotCi0jIEZvciBkZWJ1ZyBhbmQgbGVhayB0ZXN0aW5nCiBfZGFuZ2xpbmcgPSBXZWFrU2V0KCkKIAogIyBNYWluIGNsYXNzIGZvciB0aHJlYWRzCkBAIC03NDUsMTIgKzczOSwxMiBAQAogCiAgICAgIiIiCiAKLSAgICBfX2luaXRpYWxpemVkID0gRmFsc2UKKyAgICBfaW5pdGlhbGl6ZWQgPSBGYWxzZQogICAgICMgTmVlZCB0byBzdG9yZSBhIHJlZmVyZW5jZSB0byBzeXMuZXhjX2luZm8gZm9yIHByaW50aW5nCiAgICAgIyBvdXQgZXhjZXB0aW9ucyB3aGVuIGEgdGhyZWFkIHRyaWVzIHRvIHVzZSBhIGdsb2JhbCB2YXIuIGR1cmluZyBpbnRlcnAuCiAgICAgIyBzaHV0ZG93biBhbmQgdGh1cyByYWlzZXMgYW4gZXhjZXB0aW9uIGFib3V0IHRyeWluZyB0byBwZXJmb3JtIHNvbWUKICAgICAjIG9wZXJhdGlvbiBvbi93aXRoIGEgTm9uZVR5cGUKLSAgICBfX2V4Y19pbmZvID0gX3N5cy5leGNfaW5mbworICAgIF9leGNfaW5mbyA9IF9zeXMuZXhjX2luZm8KICAgICAjIEtlZXAgc3lzLmV4Y19jbGVhciB0b28gdG8gY2xlYXIgdGhlIGV4Y2VwdGlvbiBqdXN0IGJlZm9yZQogICAgICMgYWxsb3dpbmcgLmpvaW4oKSB0byByZXR1cm4uCiAgICAgI1hYWCBfX2V4Y19jbGVhciA9IF9zeXMuZXhjX2NsZWFyCkBAIC03OTAsMjggKzc4NCwzNSBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5fZGFlbW9uaWMgPSBjdXJyZW50X3RocmVhZCgpLmRhZW1vbgogICAgICAgICBzZWxmLl9pZGVudCA9IE5vbmUKKyAgICAgICAgc2VsZi5fdHN0YXRlX2xvY2sgPSBOb25lCiAgICAgICAgIHNlbGYuX3N0YXJ0ZWQgPSBFdmVudCgpCi0gICAgICAgIHNlbGYuX3N0b3BwZWQgPSBGYWxzZQotICAgICAgICBzZWxmLl9ibG9jayA9IENvbmRpdGlvbihMb2NrKCkpCisgICAgICAgIHNlbGYuX2lzX3N0b3BwZWQgPSBGYWxzZQogICAgICAgICBzZWxmLl9pbml0aWFsaXplZCA9IFRydWUKICAgICAgICAgIyBzeXMuc3RkZXJyIGlzIG5vdCBzdG9yZWQgaW4gdGhlIGNsYXNzIGxpa2UKICAgICAgICAgIyBzeXMuZXhjX2luZm8gc2luY2UgaXQgY2FuIGJlIGNoYW5nZWQgYmV0d2VlbiBpbnN0YW5jZXMKICAgICAgICAgc2VsZi5fc3RkZXJyID0gX3N5cy5zdGRlcnIKKyAgICAgICAgIyBGb3IgZGVidWdnaW5nIGFuZCBfYWZ0ZXJfZm9yaygpCiAgICAgICAgIF9kYW5nbGluZy5hZGQoc2VsZikKIAotICAgIGRlZiBfcmVzZXRfaW50ZXJuYWxfbG9ja3Moc2VsZik6CisgICAgZGVmIF9yZXNldF9pbnRlcm5hbF9sb2NrcyhzZWxmLCBpc19hbGl2ZSk6CiAgICAgICAgICMgcHJpdmF0ZSEgIENhbGxlZCBieSBfYWZ0ZXJfZm9yaygpIHRvIHJlc2V0IG91ciBpbnRlcm5hbCBsb2NrcyBhcwogICAgICAgICAjIHRoZXkgbWF5IGJlIGluIGFuIGludmFsaWQgc3RhdGUgbGVhZGluZyB0byBhIGRlYWRsb2NrIG9yIGNyYXNoLgotICAgICAgICBpZiBoYXNhdHRyKHNlbGYsICdfYmxvY2snKTogICMgRHVtbXlUaHJlYWQgZGVsZXRlcyBfYmxvY2sKLSAgICAgICAgICAgIHNlbGYuX2Jsb2NrLl9faW5pdF9fKCkKICAgICAgICAgc2VsZi5fc3RhcnRlZC5fcmVzZXRfaW50ZXJuYWxfbG9ja3MoKQorICAgICAgICBpZiBpc19hbGl2ZToKKyAgICAgICAgICAgIHNlbGYuX3NldF90c3RhdGVfbG9jaygpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIFRoZSB0aHJlYWQgaXNuJ3QgYWxpdmUgYWZ0ZXIgZm9yazogaXQgZG9lc24ndCBoYXZlIGEgdHN0YXRlCisgICAgICAgICAgICAjIGFueW1vcmUuCisgICAgICAgICAgICBzZWxmLl9pc19zdG9wcGVkID0gVHJ1ZQorICAgICAgICAgICAgc2VsZi5fdHN0YXRlX2xvY2sgPSBOb25lCiAKICAgICBkZWYgX19yZXByX18oc2VsZik6CiAgICAgICAgIGFzc2VydCBzZWxmLl9pbml0aWFsaXplZCwgIlRocmVhZC5fX2luaXRfXygpIHdhcyBub3QgY2FsbGVkIgogICAgICAgICBzdGF0dXMgPSAiaW5pdGlhbCIKICAgICAgICAgaWYgc2VsZi5fc3RhcnRlZC5pc19zZXQoKToKICAgICAgICAgICAgIHN0YXR1cyA9ICJzdGFydGVkIgotICAgICAgICBpZiBzZWxmLl9zdG9wcGVkOgorICAgICAgICBzZWxmLmlzX2FsaXZlKCkgIyBlYXN5IHdheSB0byBnZXQgLl9pc19zdG9wcGVkIHNldCB3aGVuIGFwcHJvcHJpYXRlCisgICAgICAgIGlmIHNlbGYuX2lzX3N0b3BwZWQ6CiAgICAgICAgICAgICBzdGF0dXMgPSAic3RvcHBlZCIKICAgICAgICAgaWYgc2VsZi5fZGFlbW9uaWM6CiAgICAgICAgICAgICBzdGF0dXMgKz0gIiBkYWVtb24iCkBAIC04ODQsOSArODg1LDE4IEBACiAgICAgZGVmIF9zZXRfaWRlbnQoc2VsZik6CiAgICAgICAgIHNlbGYuX2lkZW50ID0gZ2V0X2lkZW50KCkKIAorICAgIGRlZiBfc2V0X3RzdGF0ZV9sb2NrKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgU2V0IGEgbG9jayBvYmplY3Qgd2hpY2ggd2lsbCBiZSByZWxlYXNlZCBieSB0aGUgaW50ZXJwcmV0ZXIgd2hlbgorICAgICAgICB0aGUgdW5kZXJseWluZyB0aHJlYWQgc3RhdGUgKHNlZSBweXN0YXRlLmgpIGdldHMgZGVsZXRlZC4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX3RzdGF0ZV9sb2NrID0gX3NldF9zZW50aW5lbCgpCisgICAgICAgIHNlbGYuX3RzdGF0ZV9sb2NrLmFjcXVpcmUoKQorCiAgICAgZGVmIF9ib290c3RyYXBfaW5uZXIoc2VsZik6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYuX3NldF9pZGVudCgpCisgICAgICAgICAgICBzZWxmLl9zZXRfdHN0YXRlX2xvY2soKQogICAgICAgICAgICAgc2VsZi5fc3RhcnRlZC5zZXQoKQogICAgICAgICAgICAgd2l0aCBfYWN0aXZlX2xpbWJvX2xvY2s6CiAgICAgICAgICAgICAgICAgX2FjdGl2ZVtzZWxmLl9pZGVudF0gPSBzZWxmCkBAIC05MDYsMTAgKzkxNiwxMCBAQAogICAgICAgICAgICAgICAgICMgc2h1dGRvd24pIHVzZSBzZWxmLl9zdGRlcnIuICBPdGhlcndpc2Ugc3RpbGwgdXNlIHN5cyAoYXMgaW4KICAgICAgICAgICAgICAgICAjIF9zeXMpIGluIGNhc2Ugc3lzLnN0ZGVyciB3YXMgcmVkZWZpbmVkIHNpbmNlIHRoZSBjcmVhdGlvbiBvZgogICAgICAgICAgICAgICAgICMgc2VsZi4KLSAgICAgICAgICAgICAgICBpZiBfc3lzOgotICAgICAgICAgICAgICAgICAgICBfc3lzLnN0ZGVyci53cml0ZSgiRXhjZXB0aW9uIGluIHRocmVhZCAlczpcbiVzXG4iICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYubmFtZSwgX2Zvcm1hdF9leGMoKSkpCi0gICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBfc3lzIGFuZCBfc3lzLnN0ZGVyciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoIkV4Y2VwdGlvbiBpbiB0aHJlYWQgJXM6XG4lcyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZi5uYW1lLCBfZm9ybWF0X2V4YygpKSwgZmlsZT1zZWxmLl9zdGRlcnIpCisgICAgICAgICAgICAgICAgZWxpZiBzZWxmLl9zdGRlcnIgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAgICAgICMgRG8gdGhlIGJlc3Qgam9iIHBvc3NpYmxlIHcvbyBhIGh1Z2UgYW10LiBvZiBjb2RlIHRvCiAgICAgICAgICAgICAgICAgICAgICMgYXBwcm94aW1hdGUgYSB0cmFjZWJhY2sgKGNvZGUgaWRlYXMgZnJvbQogICAgICAgICAgICAgICAgICAgICAjIExpYi90cmFjZWJhY2sucHkpCkBAIC05MzcsMTEgKzk0NywxMCBAQAogICAgICAgICAgICAgICAgICMgdGVzdF90aHJlYWRpbmcudGVzdF9ub19yZWZjeWNsZV90aHJvdWdoX3RhcmdldCB3aGVuCiAgICAgICAgICAgICAgICAgIyB0aGUgZXhjZXB0aW9uIGtlZXBzIHRoZSB0YXJnZXQgYWxpdmUgcGFzdCB3aGVuIHdlCiAgICAgICAgICAgICAgICAgIyBhc3NlcnQgdGhhdCBpdCdzIGRlYWQuCi0gICAgICAgICAgICAgICAgI1hYWCBzZWxmLl9fZXhjX2NsZWFyKCkKKyAgICAgICAgICAgICAgICAjWFhYIHNlbGYuX2V4Y19jbGVhcigpCiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgd2l0aCBfYWN0aXZlX2xpbWJvX2xvY2s6Ci0gICAgICAgICAgICAgICAgc2VsZi5fc3RvcCgpCiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICAjIFdlIGRvbid0IGNhbGwgc2VsZi5fZGVsZXRlKCkgYmVjYXVzZSBpdCBhbHNvCiAgICAgICAgICAgICAgICAgICAgICMgZ3JhYnMgX2FjdGl2ZV9saW1ib19sb2NrLgpAQCAtOTUwLDEwICs5NTksMjcgQEAKICAgICAgICAgICAgICAgICAgICAgcGFzcwogCiAgICAgZGVmIF9zdG9wKHNlbGYpOgotICAgICAgICBzZWxmLl9ibG9jay5hY3F1aXJlKCkKLSAgICAgICAgc2VsZi5fc3RvcHBlZCA9IFRydWUKLSAgICAgICAgc2VsZi5fYmxvY2subm90aWZ5X2FsbCgpCi0gICAgICAgIHNlbGYuX2Jsb2NrLnJlbGVhc2UoKQorICAgICAgICAjIEFmdGVyIGNhbGxpbmcgLl9zdG9wKCksIC5pc19hbGl2ZSgpIHJldHVybnMgRmFsc2UgYW5kIC5qb2luKCkgcmV0dXJucworICAgICAgICAjIGltbWVkaWF0ZWx5LiAgLl90c3RhdGVfbG9jayBtdXN0IGJlIHJlbGVhc2VkIGJlZm9yZSBjYWxsaW5nIC5fc3RvcCgpLgorICAgICAgICAjCisgICAgICAgICMgTm9ybWFsIGNhc2U6ICBDIGNvZGUgYXQgdGhlIGVuZCBvZiB0aGUgdGhyZWFkJ3MgbGlmZQorICAgICAgICAjIChyZWxlYXNlX3NlbnRpbmVsIGluIF90aHJlYWRtb2R1bGUuYykgcmVsZWFzZXMgLl90c3RhdGVfbG9jaywgYW5kCisgICAgICAgICMgdGhhdCdzIGRldGVjdGVkIGJ5IG91ciAuX3dhaXRfZm9yX3RzdGF0ZV9sb2NrKCksIGNhbGxlZCBieSAuam9pbigpCisgICAgICAgICMgYW5kIC5pc19hbGl2ZSgpLiAgQW55IG51bWJlciBvZiB0aHJlYWRzIF9tYXlfIGNhbGwgLl9zdG9wKCkKKyAgICAgICAgIyBzaW11bHRhbmVvdXNseSAoZm9yIGV4YW1wbGUsIGlmIG11bHRpcGxlIHRocmVhZHMgYXJlIGJsb2NrZWQgaW4KKyAgICAgICAgIyAuam9pbigpIGNhbGxzKSwgYW5kIHRoZXkncmUgbm90IHNlcmlhbGl6ZWQuICBUaGF0J3MgaGFybWxlc3MgLQorICAgICAgICAjIHRoZXknbGwganVzdCBtYWtlIHJlZHVuZGFudCByZWJpbmRpbmdzIG9mIC5faXNfc3RvcHBlZCBhbmQKKyAgICAgICAgIyAuX3RzdGF0ZV9sb2NrLiAgT2JzY3VyZTogIHdlIHJlYmluZCAuX3RzdGF0ZV9sb2NrIGxhc3Qgc28gdGhhdCB0aGUKKyAgICAgICAgIyAiYXNzZXJ0IHNlbGYuX2lzX3N0b3BwZWQiIGluIC5fd2FpdF9mb3JfdHN0YXRlX2xvY2soKSBhbHdheXMgd29ya3MKKyAgICAgICAgIyAodGhlIGFzc2VydCBpcyBleGVjdXRlZCBvbmx5IGlmIC5fdHN0YXRlX2xvY2sgaXMgTm9uZSkuCisgICAgICAgICMKKyAgICAgICAgIyBTcGVjaWFsIGNhc2U6ICBfbWFpbl90aHJlYWQgcmVsZWFzZXMgLl90c3RhdGVfbG9jayB2aWEgdGhpcworICAgICAgICAjIG1vZHVsZSdzIF9zaHV0ZG93bigpIGZ1bmN0aW9uLgorICAgICAgICBsb2NrID0gc2VsZi5fdHN0YXRlX2xvY2sKKyAgICAgICAgaWYgbG9jayBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGFzc2VydCBub3QgbG9jay5sb2NrZWQoKQorICAgICAgICBzZWxmLl9pc19zdG9wcGVkID0gVHJ1ZQorICAgICAgICBzZWxmLl90c3RhdGVfbG9jayA9IE5vbmUKIAogICAgIGRlZiBfZGVsZXRlKHNlbGYpOgogICAgICAgICAiUmVtb3ZlIGN1cnJlbnQgdGhyZWFkIGZyb20gdGhlIGRpY3Qgb2YgY3VycmVudGx5IHJ1bm5pbmcgdGhyZWFkcy4iCkBAIC0xMDIxLDIwICsxMDQ3LDI2IEBACiAgICAgICAgIGlmIHNlbGYgaXMgY3VycmVudF90aHJlYWQoKToKICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiY2Fubm90IGpvaW4gY3VycmVudCB0aHJlYWQiKQogCi0gICAgICAgIHNlbGYuX2Jsb2NrLmFjcXVpcmUoKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBpZiB0aW1lb3V0IGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgd2hpbGUgbm90IHNlbGYuX3N0b3BwZWQ6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuX2Jsb2NrLndhaXQoKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBkZWFkbGluZSA9IF90aW1lKCkgKyB0aW1lb3V0Ci0gICAgICAgICAgICAgICAgd2hpbGUgbm90IHNlbGYuX3N0b3BwZWQ6Ci0gICAgICAgICAgICAgICAgICAgIGRlbGF5ID0gZGVhZGxpbmUgLSBfdGltZSgpCi0gICAgICAgICAgICAgICAgICAgIGlmIGRlbGF5IDw9IDA6Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgICAgICBzZWxmLl9ibG9jay53YWl0KGRlbGF5KQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgc2VsZi5fYmxvY2sucmVsZWFzZSgpCisgICAgICAgIGlmIHRpbWVvdXQgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX3dhaXRfZm9yX3RzdGF0ZV9sb2NrKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgdGhlIGJlaGF2aW9yIG9mIGEgbmVnYXRpdmUgdGltZW91dCBpc24ndCBkb2N1bWVudGVkLCBidXQKKyAgICAgICAgICAgICMgaGlzdG9yaWNhbGx5IC5qb2luKHRpbWVvdXQ9eCkgZm9yIHg8MCBoYXMgYWN0ZWQgYXMgaWYgdGltZW91dD0wCisgICAgICAgICAgICBzZWxmLl93YWl0X2Zvcl90c3RhdGVfbG9jayh0aW1lb3V0PW1heCh0aW1lb3V0LCAwKSkKKworICAgIGRlZiBfd2FpdF9mb3JfdHN0YXRlX2xvY2soc2VsZiwgYmxvY2s9VHJ1ZSwgdGltZW91dD0tMSk6CisgICAgICAgICMgSXNzdWUgIzE4ODA4OiB3YWl0IGZvciB0aGUgdGhyZWFkIHN0YXRlIHRvIGJlIGdvbmUuCisgICAgICAgICMgQXQgdGhlIGVuZCBvZiB0aGUgdGhyZWFkJ3MgbGlmZSwgYWZ0ZXIgYWxsIGtub3dsZWRnZSBvZiB0aGUgdGhyZWFkCisgICAgICAgICMgaXMgcmVtb3ZlZCBmcm9tIEMgZGF0YSBzdHJ1Y3R1cmVzLCBDIGNvZGUgcmVsZWFzZXMgb3VyIF90c3RhdGVfbG9jay4KKyAgICAgICAgIyBUaGlzIG1ldGhvZCBwYXNzZXMgaXRzIGFyZ3VtZW50cyB0byBfdHN0YXRlX2xvY2suYXF1aXJlKCkuCisgICAgICAgICMgSWYgdGhlIGxvY2sgaXMgYWNxdWlyZWQsIHRoZSBDIGNvZGUgaXMgZG9uZSwgYW5kIHNlbGYuX3N0b3AoKSBpcworICAgICAgICAjIGNhbGxlZC4gIFRoYXQgc2V0cyAuX2lzX3N0b3BwZWQgdG8gVHJ1ZSwgYW5kIC5fdHN0YXRlX2xvY2sgdG8gTm9uZS4KKyAgICAgICAgbG9jayA9IHNlbGYuX3RzdGF0ZV9sb2NrCisgICAgICAgIGlmIGxvY2sgaXMgTm9uZTogICMgYWxyZWFkeSBkZXRlcm1pbmVkIHRoYXQgdGhlIEMgY29kZSBpcyBkb25lCisgICAgICAgICAgICBhc3NlcnQgc2VsZi5faXNfc3RvcHBlZAorICAgICAgICBlbGlmIGxvY2suYWNxdWlyZShibG9jaywgdGltZW91dCk6CisgICAgICAgICAgICBsb2NrLnJlbGVhc2UoKQorICAgICAgICAgICAgc2VsZi5fc3RvcCgpCiAKICAgICBAcHJvcGVydHkKICAgICBkZWYgbmFtZShzZWxmKToKQEAgLTEwNzMsNyArMTEwNSwxMCBAQAogCiAgICAgICAgICIiIgogICAgICAgICBhc3NlcnQgc2VsZi5faW5pdGlhbGl6ZWQsICJUaHJlYWQuX19pbml0X18oKSBub3QgY2FsbGVkIgotICAgICAgICByZXR1cm4gc2VsZi5fc3RhcnRlZC5pc19zZXQoKSBhbmQgbm90IHNlbGYuX3N0b3BwZWQKKyAgICAgICAgaWYgc2VsZi5faXNfc3RvcHBlZCBvciBub3Qgc2VsZi5fc3RhcnRlZC5pc19zZXQoKToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBzZWxmLl93YWl0X2Zvcl90c3RhdGVfbG9jayhGYWxzZSkKKyAgICAgICAgcmV0dXJuIG5vdCBzZWxmLl9pc19zdG9wcGVkCiAKICAgICBpc0FsaXZlID0gaXNfYWxpdmUKIApAQCAtMTA5OCw3ICsxMTMzLDcgQEAKICAgICAgICAgaWYgbm90IHNlbGYuX2luaXRpYWxpemVkOgogICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJUaHJlYWQuX19pbml0X18oKSBub3QgY2FsbGVkIikKICAgICAgICAgaWYgc2VsZi5fc3RhcnRlZC5pc19zZXQoKToKLSAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiY2Fubm90IHNldCBkYWVtb24gc3RhdHVzIG9mIGFjdGl2ZSB0aHJlYWQiKTsKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiY2Fubm90IHNldCBkYWVtb24gc3RhdHVzIG9mIGFjdGl2ZSB0aHJlYWQiKQogICAgICAgICBzZWxmLl9kYWVtb25pYyA9IGRhZW1vbmljCiAKICAgICBkZWYgaXNEYWVtb24oc2VsZik6CkBAIC0xMTQ5LDI1ICsxMTg0LDEyIEBACiAKICAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgIFRocmVhZC5fX2luaXRfXyhzZWxmLCBuYW1lPSJNYWluVGhyZWFkIiwgZGFlbW9uPUZhbHNlKQorICAgICAgICBzZWxmLl9zZXRfdHN0YXRlX2xvY2soKQogICAgICAgICBzZWxmLl9zdGFydGVkLnNldCgpCiAgICAgICAgIHNlbGYuX3NldF9pZGVudCgpCiAgICAgICAgIHdpdGggX2FjdGl2ZV9saW1ib19sb2NrOgogICAgICAgICAgICAgX2FjdGl2ZVtzZWxmLl9pZGVudF0gPSBzZWxmCiAKLSAgICBkZWYgX2V4aXRmdW5jKHNlbGYpOgotICAgICAgICBzZWxmLl9zdG9wKCkKLSAgICAgICAgdCA9IF9waWNrU29tZU5vbkRhZW1vblRocmVhZCgpCi0gICAgICAgIHdoaWxlIHQ6Ci0gICAgICAgICAgICB0LmpvaW4oKQotICAgICAgICAgICAgdCA9IF9waWNrU29tZU5vbkRhZW1vblRocmVhZCgpCi0gICAgICAgIHNlbGYuX2RlbGV0ZSgpCi0KLWRlZiBfcGlja1NvbWVOb25EYWVtb25UaHJlYWQoKToKLSAgICBmb3IgdCBpbiBlbnVtZXJhdGUoKToKLSAgICAgICAgaWYgbm90IHQuZGFlbW9uIGFuZCB0LmlzX2FsaXZlKCk6Ci0gICAgICAgICAgICByZXR1cm4gdAotICAgIHJldHVybiBOb25lCi0KIAogIyBEdW1teSB0aHJlYWQgY2xhc3MgdG8gcmVwcmVzZW50IHRocmVhZHMgbm90IHN0YXJ0ZWQgaGVyZS4KICMgVGhlc2UgYXJlbid0IGdhcmJhZ2UgY29sbGVjdGVkIHdoZW4gdGhleSBkaWUsIG5vciBjYW4gdGhleSBiZSB3YWl0ZWQgZm9yLgpAQCAtMTE4MiwxMSArMTIwNCw2IEBACiAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgICAgICBUaHJlYWQuX19pbml0X18oc2VsZiwgbmFtZT1fbmV3bmFtZSgiRHVtbXktJWQiKSwgZGFlbW9uPVRydWUpCiAKLSAgICAgICAgIyBUaHJlYWQuX2Jsb2NrIGNvbnN1bWVzIGFuIE9TLWxldmVsIGxvY2tpbmcgcHJpbWl0aXZlLCB3aGljaAotICAgICAgICAjIGNhbiBuZXZlciBiZSB1c2VkIGJ5IGEgX0R1bW15VGhyZWFkLiAgU2luY2UgYSBfRHVtbXlUaHJlYWQKLSAgICAgICAgIyBpbnN0YW5jZSBpcyBpbW1vcnRhbCwgdGhhdCdzIGJhZCwgc28gcmVsZWFzZSB0aGlzIHJlc291cmNlLgotICAgICAgICBkZWwgc2VsZi5fYmxvY2sKLQogICAgICAgICBzZWxmLl9zdGFydGVkLnNldCgpCiAgICAgICAgIHNlbGYuX3NldF9pZGVudCgpCiAgICAgICAgIHdpdGggX2FjdGl2ZV9saW1ib19sb2NrOgpAQCAtMTI0OCw3ICsxMjY1LDQwIEBACiAjIGFuZCBtYWtlIGl0IGF2YWlsYWJsZSBmb3IgdGhlIGludGVycHJldGVyCiAjIChQeV9NYWluKSBhcyB0aHJlYWRpbmcuX3NodXRkb3duLgogCi1fc2h1dGRvd24gPSBfTWFpblRocmVhZCgpLl9leGl0ZnVuYworX21haW5fdGhyZWFkID0gX01haW5UaHJlYWQoKQorCitkZWYgX3NodXRkb3duKCk6CisgICAgIyBPYnNjdXJlOiAgb3RoZXIgdGhyZWFkcyBtYXkgYmUgd2FpdGluZyB0byBqb2luIF9tYWluX3RocmVhZC4gIFRoYXQncworICAgICMgZHViaW91cywgYnV0IHNvbWUgY29kZSBkb2VzIGl0LiAgV2UgY2FuJ3Qgd2FpdCBmb3IgQyBjb2RlIHRvIHJlbGVhc2UKKyAgICAjIHRoZSBtYWluIHRocmVhZCdzIHRzdGF0ZV9sb2NrIC0gdGhhdCB3b24ndCBoYXBwZW4gdW50aWwgdGhlIGludGVycHJldGVyCisgICAgIyBpcyBuZWFybHkgZGVhZC4gIFNvIHdlIHJlbGVhc2UgaXQgaGVyZS4gIE5vdGUgdGhhdCBqdXN0IGNhbGxpbmcgX3N0b3AoKQorICAgICMgaXNuJ3QgZW5vdWdoOiAgb3RoZXIgdGhyZWFkcyBtYXkgYWxyZWFkeSBiZSB3YWl0aW5nIG9uIF90c3RhdGVfbG9jay4KKyAgICB0bG9jayA9IF9tYWluX3RocmVhZC5fdHN0YXRlX2xvY2sKKyAgICAjIFRoZSBtYWluIHRocmVhZCBpc24ndCBmaW5pc2hlZCB5ZXQsIHNvIGl0cyB0aHJlYWQgc3RhdGUgbG9jayBjYW4ndCBoYXZlCisgICAgIyBiZWVuIHJlbGVhc2VkLgorICAgIGFzc2VydCB0bG9jayBpcyBub3QgTm9uZQorICAgIGFzc2VydCB0bG9jay5sb2NrZWQoKQorICAgIHRsb2NrLnJlbGVhc2UoKQorICAgIF9tYWluX3RocmVhZC5fc3RvcCgpCisgICAgdCA9IF9waWNrU29tZU5vbkRhZW1vblRocmVhZCgpCisgICAgd2hpbGUgdDoKKyAgICAgICAgdC5qb2luKCkKKyAgICAgICAgdCA9IF9waWNrU29tZU5vbkRhZW1vblRocmVhZCgpCisgICAgX21haW5fdGhyZWFkLl9kZWxldGUoKQorCitkZWYgX3BpY2tTb21lTm9uRGFlbW9uVGhyZWFkKCk6CisgICAgZm9yIHQgaW4gZW51bWVyYXRlKCk6CisgICAgICAgIGlmIG5vdCB0LmRhZW1vbiBhbmQgdC5pc19hbGl2ZSgpOgorICAgICAgICAgICAgcmV0dXJuIHQKKyAgICByZXR1cm4gTm9uZQorCitkZWYgbWFpbl90aHJlYWQoKToKKyAgICAiIiJSZXR1cm4gdGhlIG1haW4gdGhyZWFkIG9iamVjdC4KKworICAgIEluIG5vcm1hbCBjb25kaXRpb25zLCB0aGUgbWFpbiB0aHJlYWQgaXMgdGhlIHRocmVhZCBmcm9tIHdoaWNoIHRoZQorICAgIFB5dGhvbiBpbnRlcnByZXRlciB3YXMgc3RhcnRlZC4KKyAgICAiIiIKKyAgICByZXR1cm4gX21haW5fdGhyZWFkCiAKICMgZ2V0IHRocmVhZC1sb2NhbCBpbXBsZW1lbnRhdGlvbiwgZWl0aGVyIGZyb20gdGhlIHRocmVhZAogIyBtb2R1bGUsIG9yIGZyb20gdGhlIHB5dGhvbiBmYWxsYmFjawpAQCAtMTI2NiwyNSArMTMxNiwzMSBAQAogCiAgICAgIyBSZXNldCBfYWN0aXZlX2xpbWJvX2xvY2ssIGluIGNhc2Ugd2UgZm9ya2VkIHdoaWxlIHRoZSBsb2NrIHdhcyBoZWxkCiAgICAgIyBieSBhbm90aGVyIChub24tZm9ya2VkKSB0aHJlYWQuICBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlODc0OTAwCi0gICAgZ2xvYmFsIF9hY3RpdmVfbGltYm9fbG9jaworICAgIGdsb2JhbCBfYWN0aXZlX2xpbWJvX2xvY2ssIF9tYWluX3RocmVhZAogICAgIF9hY3RpdmVfbGltYm9fbG9jayA9IF9hbGxvY2F0ZV9sb2NrKCkKIAogICAgICMgZm9yaygpIG9ubHkgY29waWVkIHRoZSBjdXJyZW50IHRocmVhZDsgY2xlYXIgcmVmZXJlbmNlcyB0byBvdGhlcnMuCiAgICAgbmV3X2FjdGl2ZSA9IHt9CiAgICAgY3VycmVudCA9IGN1cnJlbnRfdGhyZWFkKCkKKyAgICBfbWFpbl90aHJlYWQgPSBjdXJyZW50CiAgICAgd2l0aCBfYWN0aXZlX2xpbWJvX2xvY2s6Ci0gICAgICAgIGZvciB0aHJlYWQgaW4gX2VudW1lcmF0ZSgpOgorICAgICAgICAjIERhbmdsaW5nIHRocmVhZCBpbnN0YW5jZXMgbXVzdCBzdGlsbCBoYXZlIHRoZWlyIGxvY2tzIHJlc2V0LAorICAgICAgICAjIGJlY2F1c2Ugc29tZW9uZSBtYXkgam9pbigpIHRoZW0uCisgICAgICAgIHRocmVhZHMgPSBzZXQoX2VudW1lcmF0ZSgpKQorICAgICAgICB0aHJlYWRzLnVwZGF0ZShfZGFuZ2xpbmcpCisgICAgICAgIGZvciB0aHJlYWQgaW4gdGhyZWFkczoKICAgICAgICAgICAgICMgQW55IGxvY2svY29uZGl0aW9uIHZhcmlhYmxlIG1heSBiZSBjdXJyZW50bHkgbG9ja2VkIG9yIGluIGFuCiAgICAgICAgICAgICAjIGludmFsaWQgc3RhdGUsIHNvIHdlIHJlaW5pdGlhbGl6ZSB0aGVtLgotICAgICAgICAgICAgdGhyZWFkLl9yZXNldF9pbnRlcm5hbF9sb2NrcygpCiAgICAgICAgICAgICBpZiB0aHJlYWQgaXMgY3VycmVudDoKICAgICAgICAgICAgICAgICAjIFRoZXJlIGlzIG9ubHkgb25lIGFjdGl2ZSB0aHJlYWQuIFdlIHJlc2V0IHRoZSBpZGVudCB0bwogICAgICAgICAgICAgICAgICMgaXRzIG5ldyB2YWx1ZSBzaW5jZSBpdCBjYW4gaGF2ZSBjaGFuZ2VkLgorICAgICAgICAgICAgICAgIHRocmVhZC5fcmVzZXRfaW50ZXJuYWxfbG9ja3MoVHJ1ZSkKICAgICAgICAgICAgICAgICBpZGVudCA9IGdldF9pZGVudCgpCiAgICAgICAgICAgICAgICAgdGhyZWFkLl9pZGVudCA9IGlkZW50CiAgICAgICAgICAgICAgICAgbmV3X2FjdGl2ZVtpZGVudF0gPSB0aHJlYWQKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgIyBBbGwgdGhlIG90aGVycyBhcmUgYWxyZWFkeSBzdG9wcGVkLgorICAgICAgICAgICAgICAgIHRocmVhZC5fcmVzZXRfaW50ZXJuYWxfbG9ja3MoRmFsc2UpCiAgICAgICAgICAgICAgICAgdGhyZWFkLl9zdG9wKCkKIAogICAgICAgICBfbGltYm8uY2xlYXIoKQpkaWZmIC0tZ2l0IGEvTGliL3RpbWVpdC5weSBiL0xpYi90aW1laXQucHkKaW5kZXggNGY3ZDI4Zi4uMGIxYzYwMSAxMDA3NTUKLS0tIGEvTGliL3RpbWVpdC5weQorKysgYi9MaWIvdGltZWl0LnB5CkBAIC0xNCw3ICsxNCw4IEBACiBPcHRpb25zOgogICAtbi8tLW51bWJlciBOOiBob3cgbWFueSB0aW1lcyB0byBleGVjdXRlICdzdGF0ZW1lbnQnIChkZWZhdWx0OiBzZWUgYmVsb3cpCiAgIC1yLy0tcmVwZWF0IE46IGhvdyBtYW55IHRpbWVzIHRvIHJlcGVhdCB0aGUgdGltZXIgKGRlZmF1bHQgMykKLSAgLXMvLS1zZXR1cCBTOiBzdGF0ZW1lbnQgdG8gYmUgZXhlY3V0ZWQgb25jZSBpbml0aWFsbHkgKGRlZmF1bHQgJ3Bhc3MnKQorICAtcy8tLXNldHVwIFM6IHN0YXRlbWVudCB0byBiZSBleGVjdXRlZCBvbmNlIGluaXRpYWxseSAoZGVmYXVsdCAncGFzcycpLgorICAgICAgICAgICAgICAgIEV4ZWN1dGlvbiB0aW1lIG9mIHRoaXMgc2V0dXAgc3RhdGVtZW50IGlzIE5PVCB0aW1lZC4KICAgLXAvLS1wcm9jZXNzOiB1c2UgdGltZS5wcm9jZXNzX3RpbWUoKSAoZGVmYXVsdCBpcyB0aW1lLnBlcmZfY291bnRlcigpKQogICAtdC8tLXRpbWU6IHVzZSB0aW1lLnRpbWUoKSAoZGVwcmVjYXRlZCkKICAgLWMvLS1jbG9jazogdXNlIHRpbWUuY2xvY2soKSAoZGVwcmVjYXRlZCkKQEAgLTMxLDM4ICszMiwyOSBAQAogSWYgLW4gaXMgbm90IGdpdmVuLCBhIHN1aXRhYmxlIG51bWJlciBvZiBsb29wcyBpcyBjYWxjdWxhdGVkIGJ5IHRyeWluZwogc3VjY2Vzc2l2ZSBwb3dlcnMgb2YgMTAgdW50aWwgdGhlIHRvdGFsIHRpbWUgaXMgYXQgbGVhc3QgMC4yIHNlY29uZHMuCiAKLVRoZSBkaWZmZXJlbmNlIGluIGRlZmF1bHQgdGltZXIgZnVuY3Rpb24gaXMgYmVjYXVzZSBvbiBXaW5kb3dzLAotY2xvY2soKSBoYXMgbWljcm9zZWNvbmQgZ3JhbnVsYXJpdHkgYnV0IHRpbWUoKSdzIGdyYW51bGFyaXR5IGlzIDEvNjB0aAotb2YgYSBzZWNvbmQ7IG9uIFVuaXgsIGNsb2NrKCkgaGFzIDEvMTAwdGggb2YgYSBzZWNvbmQgZ3JhbnVsYXJpdHkgYW5kCi10aW1lKCkgaXMgbXVjaCBtb3JlIHByZWNpc2UuICBPbiBlaXRoZXIgcGxhdGZvcm0sIHRoZSBkZWZhdWx0IHRpbWVyCi1mdW5jdGlvbnMgbWVhc3VyZSB3YWxsIGNsb2NrIHRpbWUsIG5vdCB0aGUgQ1BVIHRpbWUuICBUaGlzIG1lYW5zIHRoYXQKLW90aGVyIHByb2Nlc3NlcyBydW5uaW5nIG9uIHRoZSBzYW1lIGNvbXB1dGVyIG1heSBpbnRlcmZlcmUgd2l0aCB0aGUKLXRpbWluZy4gIFRoZSBiZXN0IHRoaW5nIHRvIGRvIHdoZW4gYWNjdXJhdGUgdGltaW5nIGlzIG5lY2Vzc2FyeSBpcyB0bwotcmVwZWF0IHRoZSB0aW1pbmcgYSBmZXcgdGltZXMgYW5kIHVzZSB0aGUgYmVzdCB0aW1lLiAgVGhlIC1yIG9wdGlvbiBpcwotZ29vZCBmb3IgdGhpczsgdGhlIGRlZmF1bHQgb2YgMyByZXBldGl0aW9ucyBpcyBwcm9iYWJseSBlbm91Z2ggaW4gbW9zdAotY2FzZXMuICBPbiBVbml4LCB5b3UgY2FuIHVzZSBjbG9jaygpIHRvIG1lYXN1cmUgQ1BVIHRpbWUuCi0KIE5vdGU6IHRoZXJlIGlzIGEgY2VydGFpbiBiYXNlbGluZSBvdmVyaGVhZCBhc3NvY2lhdGVkIHdpdGggZXhlY3V0aW5nIGEKLXBhc3Mgc3RhdGVtZW50LiAgVGhlIGNvZGUgaGVyZSBkb2Vzbid0IHRyeSB0byBoaWRlIGl0LCBidXQgeW91IHNob3VsZAotYmUgYXdhcmUgb2YgaXQuICBUaGUgYmFzZWxpbmUgb3ZlcmhlYWQgY2FuIGJlIG1lYXN1cmVkIGJ5IGludm9raW5nIHRoZQotcHJvZ3JhbSB3aXRob3V0IGFyZ3VtZW50cy4KK3Bhc3Mgc3RhdGVtZW50LiAgSXQgZGlmZmVycyBiZXR3ZWVuIHZlcnNpb25zLiAgVGhlIGNvZGUgaGVyZSBkb2Vzbid0IHRyeQordG8gaGlkZSBpdCwgYnV0IHlvdSBzaG91bGQgYmUgYXdhcmUgb2YgaXQuICBUaGUgYmFzZWxpbmUgb3ZlcmhlYWQgY2FuIGJlCittZWFzdXJlZCBieSBpbnZva2luZyB0aGUgcHJvZ3JhbSB3aXRob3V0IGFyZ3VtZW50cy4KIAotVGhlIGJhc2VsaW5lIG92ZXJoZWFkIGRpZmZlcnMgYmV0d2VlbiBQeXRob24gdmVyc2lvbnMhICBBbHNvLCB0bwotZmFpcmx5IGNvbXBhcmUgb2xkZXIgUHl0aG9uIHZlcnNpb25zIHRvIFB5dGhvbiAyLjMsIHlvdSBtYXkgd2FudCB0bwotdXNlIHB5dGhvbiAtTyBmb3IgdGhlIG9sZGVyIHZlcnNpb25zIHRvIGF2b2lkIHRpbWluZyBTRVRfTElORU5PCi1pbnN0cnVjdGlvbnMuCitDbGFzc2VzOgorCisgICAgVGltZXIKKworRnVuY3Rpb25zOgorCisgICAgdGltZWl0KHN0cmluZywgc3RyaW5nKSAtPiBmbG9hdAorICAgIHJlcGVhdChzdHJpbmcsIHN0cmluZykgLT4gbGlzdAorICAgIGRlZmF1bHRfdGltZXIoKSAtPiBmbG9hdAorCiAiIiIKIAogaW1wb3J0IGdjCiBpbXBvcnQgc3lzCiBpbXBvcnQgdGltZQotdHJ5OgotICAgIGltcG9ydCBpdGVydG9vbHMKLWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAjIE11c3QgYmUgYW4gb2xkZXIgUHl0aG9uIHZlcnNpb24gKHNlZSB0aW1laXQoKSBiZWxvdykKLSAgICBpdGVydG9vbHMgPSBOb25lCitpbXBvcnQgaXRlcnRvb2xzCiAKLV9fYWxsX18gPSBbIlRpbWVyIl0KK19fYWxsX18gPSBbIlRpbWVyIiwgInRpbWVpdCIsICJyZXBlYXQiLCAiZGVmYXVsdF90aW1lciJdCiAKIGR1bW15X3NyY19uYW1lID0gIjx0aW1laXQtc3JjPiIKIGRlZmF1bHRfbnVtYmVyID0gMTAwMDAwMApAQCAtNzMsNyArNjUsNyBAQAogIyBpbiBUaW1lci5fX2luaXRfXygpIGRlcGVuZCBvbiBzZXR1cCBiZWluZyBpbmRlbnRlZCA0IHNwYWNlcyBhbmQgc3RtdAogIyBiZWluZyBpbmRlbnRlZCA4IHNwYWNlcy4KIHRlbXBsYXRlID0gIiIiCi1kZWYgaW5uZXIoX2l0LCBfdGltZXIpOgorZGVmIGlubmVyKF9pdCwgX3RpbWVye2luaXR9KToKICAgICB7c2V0dXB9CiAgICAgX3QwID0gX3RpbWVyKCkKICAgICBmb3IgX2kgaW4gX2l0OgpAQCAtMTE4LDEyICsxMTAsMTkgQEAKICAgICAgICAgc2VsZi50aW1lciA9IHRpbWVyCiAgICAgICAgIG5zID0ge30KICAgICAgICAgaWYgaXNpbnN0YW5jZShzdG10LCBzdHIpOgorICAgICAgICAgICAgIyBDaGVjayB0aGF0IHRoZSBjb2RlIGNhbiBiZSBjb21waWxlZCBvdXRzaWRlIGEgZnVuY3Rpb24KKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uoc2V0dXAsIHN0cik6CisgICAgICAgICAgICAgICAgY29tcGlsZShzZXR1cCwgZHVtbXlfc3JjX25hbWUsICJleGVjIikKKyAgICAgICAgICAgICAgICBjb21waWxlKHNldHVwICsgJ1xuJyArIHN0bXQsIGR1bW15X3NyY19uYW1lLCAiZXhlYyIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGNvbXBpbGUoc3RtdCwgZHVtbXlfc3JjX25hbWUsICJleGVjIikKICAgICAgICAgICAgIHN0bXQgPSByZWluZGVudChzdG10LCA4KQogICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShzZXR1cCwgc3RyKToKICAgICAgICAgICAgICAgICBzZXR1cCA9IHJlaW5kZW50KHNldHVwLCA0KQotICAgICAgICAgICAgICAgIHNyYyA9IHRlbXBsYXRlLmZvcm1hdChzdG10PXN0bXQsIHNldHVwPXNldHVwKQorICAgICAgICAgICAgICAgIHNyYyA9IHRlbXBsYXRlLmZvcm1hdChzdG10PXN0bXQsIHNldHVwPXNldHVwLCBpbml0PScnKQogICAgICAgICAgICAgZWxpZiBjYWxsYWJsZShzZXR1cCk6Ci0gICAgICAgICAgICAgICAgc3JjID0gdGVtcGxhdGUuZm9ybWF0KHN0bXQ9c3RtdCwgc2V0dXA9J19zZXR1cCgpJykKKyAgICAgICAgICAgICAgICBzcmMgPSB0ZW1wbGF0ZS5mb3JtYXQoc3RtdD1zdG10LCBzZXR1cD0nX3NldHVwKCknLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0PScsIF9zZXR1cD1fc2V0dXAnKQogICAgICAgICAgICAgICAgIG5zWydfc2V0dXAnXSA9IHNldHVwCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInNldHVwIGlzIG5laXRoZXIgYSBzdHJpbmcgbm9yIGNhbGxhYmxlIikKQEAgLTE4MCwxMCArMTc5LDcgQEAKICAgICAgICAgdG8gb25lIG1pbGxpb24uICBUaGUgbWFpbiBzdGF0ZW1lbnQsIHRoZSBzZXR1cCBzdGF0ZW1lbnQgYW5kCiAgICAgICAgIHRoZSB0aW1lciBmdW5jdGlvbiB0byBiZSB1c2VkIGFyZSBwYXNzZWQgdG8gdGhlIGNvbnN0cnVjdG9yLgogICAgICAgICAiIiIKLSAgICAgICAgaWYgaXRlcnRvb2xzOgotICAgICAgICAgICAgaXQgPSBpdGVydG9vbHMucmVwZWF0KE5vbmUsIG51bWJlcikKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGl0ID0gW05vbmVdICogbnVtYmVyCisgICAgICAgIGl0ID0gaXRlcnRvb2xzLnJlcGVhdChOb25lLCBudW1iZXIpCiAgICAgICAgIGdjb2xkID0gZ2MuaXNlbmFibGVkKCkKICAgICAgICAgZ2MuZGlzYWJsZSgpCiAgICAgICAgIHRyeToKZGlmZiAtLWdpdCBhL0xpYi90a2ludGVyL19faW5pdF9fLnB5IGIvTGliL3RraW50ZXIvX19pbml0X18ucHkKaW5kZXggYjllNWQyZS4uNzVjNDBlNTYgMTAwNjQ0Ci0tLSBhL0xpYi90a2ludGVyL19faW5pdF9fLnB5CisrKyBiL0xpYi90a2ludGVyL19faW5pdF9fLnB5CkBAIC0zNSw4ICszNSw2IEBACiAgICAgIyBBdHRlbXB0IHRvIGNvbmZpZ3VyZSBUY2wvVGsgd2l0aG91dCByZXF1aXJpbmcgUEFUSAogICAgIGZyb20gdGtpbnRlciBpbXBvcnQgX2ZpeAogCi1pbXBvcnQgd2FybmluZ3MKLQogaW1wb3J0IF90a2ludGVyICMgSWYgdGhpcyBmYWlscyB5b3VyIFB5dGhvbiBtYXkgbm90IGJlIGNvbmZpZ3VyZWQgZm9yIFRrCiBUY2xFcnJvciA9IF90a2ludGVyLlRjbEVycm9yCiBmcm9tIHRraW50ZXIuY29uc3RhbnRzIGltcG9ydCAqCkBAIC0xMTQsNiArMTEyLDI5IEBACiB0cnk6IF9jbmZtZXJnZSA9IF90a2ludGVyLl9jbmZtZXJnZQogZXhjZXB0IEF0dHJpYnV0ZUVycm9yOiBwYXNzCiAKK2RlZiBfc3BsaXRkaWN0KHRrLCB2LCBjdXRfbWludXM9VHJ1ZSwgY29udj1Ob25lKToKKyAgICAiIiJSZXR1cm4gYSBwcm9wZXJseSBmb3JtYXR0ZWQgZGljdCBidWlsdCBmcm9tIFRjbCBsaXN0IHBhaXJzLgorCisgICAgSWYgY3V0X21pbnVzIGlzIFRydWUsIHRoZSBzdXBwb3NlZCAnLScgcHJlZml4IHdpbGwgYmUgcmVtb3ZlZCBmcm9tCisgICAga2V5cy4gSWYgY29udiBpcyBzcGVjaWZpZWQsIGl0IGlzIHVzZWQgdG8gY29udmVydCB2YWx1ZXMuCisKKyAgICBUY2wgbGlzdCBpcyBleHBlY3RlZCB0byBjb250YWluIGFuIGV2ZW4gbnVtYmVyIG9mIGVsZW1lbnRzLgorICAgICIiIgorICAgIHQgPSB0ay5zcGxpdGxpc3QodikKKyAgICBpZiBsZW4odCkgJSAyOgorICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ1RjbCBsaXN0IHJlcHJlc2VudGluZyBhIGRpY3QgaXMgZXhwZWN0ZWQgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RvIGNvbnRhaW4gYW4gZXZlbiBudW1iZXIgb2YgZWxlbWVudHMnKQorICAgIGl0ID0gaXRlcih0KQorICAgIGRpY3QgPSB7fQorICAgIGZvciBrZXksIHZhbHVlIGluIHppcChpdCwgaXQpOgorICAgICAgICBrZXkgPSBzdHIoa2V5KQorICAgICAgICBpZiBjdXRfbWludXMgYW5kIGtleVswXSA9PSAnLSc6CisgICAgICAgICAgICBrZXkgPSBrZXlbMTpdCisgICAgICAgIGlmIGNvbnY6CisgICAgICAgICAgICB2YWx1ZSA9IGNvbnYodmFsdWUpCisgICAgICAgIGRpY3Rba2V5XSA9IHZhbHVlCisgICAgcmV0dXJuIGRpY3QKKwogY2xhc3MgRXZlbnQ6CiAgICAgIiIiQ29udGFpbmVyIGZvciB0aGUgcHJvcGVydGllcyBvZiBhbiBldmVudC4KIApAQCAtMTkzLDYgKzIxNCw3IEBACiAgICAgdGhhdCBjb25zdHJhaW4gdGhlIHR5cGUgb2YgdGhlIHZhbHVlIHJldHVybmVkIGZyb20gZ2V0KCkuIiIiCiAgICAgX2RlZmF1bHQgPSAiIgogICAgIF90ayA9IE5vbmUKKyAgICBfdGNsQ29tbWFuZHMgPSBOb25lCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hc3Rlcj1Ob25lLCB2YWx1ZT1Ob25lLCBuYW1lPU5vbmUpOgogICAgICAgICAiIiJDb25zdHJ1Y3QgYSB2YXJpYWJsZQogCkBAIC0yMTEsNyArMjMzLDcgQEAKICAgICAgICAgZ2xvYmFsIF92YXJudW0KICAgICAgICAgaWYgbm90IG1hc3RlcjoKICAgICAgICAgICAgIG1hc3RlciA9IF9kZWZhdWx0X3Jvb3QKLSAgICAgICAgc2VsZi5fbWFzdGVyID0gbWFzdGVyCisgICAgICAgIHNlbGYuX3Jvb3QgPSBtYXN0ZXIuX3Jvb3QoKQogICAgICAgICBzZWxmLl90ayA9IG1hc3Rlci50awogICAgICAgICBpZiBuYW1lOgogICAgICAgICAgICAgc2VsZi5fbmFtZSA9IG5hbWUKQEAgLTIyNCw5ICsyNDYsMTUgQEAKICAgICAgICAgICAgIHNlbGYuaW5pdGlhbGl6ZShzZWxmLl9kZWZhdWx0KQogICAgIGRlZiBfX2RlbF9fKHNlbGYpOgogICAgICAgICAiIiJVbnNldCB0aGUgdmFyaWFibGUgaW4gVGNsLiIiIgotICAgICAgICBpZiAoc2VsZi5fdGsgaXMgbm90IE5vbmUgYW5kCi0gICAgICAgICAgICBzZWxmLl90ay5nZXRib29sZWFuKHNlbGYuX3RrLmNhbGwoImluZm8iLCAiZXhpc3RzIiwgc2VsZi5fbmFtZSkpKToKKyAgICAgICAgaWYgc2VsZi5fdGsgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiBzZWxmLl90ay5nZXRib29sZWFuKHNlbGYuX3RrLmNhbGwoImluZm8iLCAiZXhpc3RzIiwgc2VsZi5fbmFtZSkpOgogICAgICAgICAgICAgc2VsZi5fdGsuZ2xvYmFsdW5zZXR2YXIoc2VsZi5fbmFtZSkKKyAgICAgICAgaWYgc2VsZi5fdGNsQ29tbWFuZHMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBmb3IgbmFtZSBpbiBzZWxmLl90Y2xDb21tYW5kczoKKyAgICAgICAgICAgICAgICAjcHJpbnQgJy0gVGtpbnRlcjogZGVsZXRlZCBjb21tYW5kJywgbmFtZQorICAgICAgICAgICAgICAgIHNlbGYuX3RrLmRlbGV0ZWNvbW1hbmQobmFtZSkKKyAgICAgICAgICAgIHNlbGYuX3RjbENvbW1hbmRzID0gTm9uZQogICAgIGRlZiBfX3N0cl9fKHNlbGYpOgogICAgICAgICAiIiJSZXR1cm4gdGhlIG5hbWUgb2YgdGhlIHZhcmlhYmxlIGluIFRjbC4iIiIKICAgICAgICAgcmV0dXJuIHNlbGYuX25hbWUKQEAgLTI0Niw3ICsyNzQsMjAgQEAKIAogICAgICAgICBSZXR1cm4gdGhlIG5hbWUgb2YgdGhlIGNhbGxiYWNrLgogICAgICAgICAiIiIKLSAgICAgICAgY2JuYW1lID0gc2VsZi5fbWFzdGVyLl9yZWdpc3RlcihjYWxsYmFjaykKKyAgICAgICAgZiA9IENhbGxXcmFwcGVyKGNhbGxiYWNrLCBOb25lLCBzZWxmKS5fX2NhbGxfXworICAgICAgICBjYm5hbWUgPSByZXByKGlkKGYpKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrLl9fZnVuY19fCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY2JuYW1lID0gY2JuYW1lICsgY2FsbGJhY2suX19uYW1lX18KKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLl90ay5jcmVhdGVjb21tYW5kKGNibmFtZSwgZikKKyAgICAgICAgaWYgc2VsZi5fdGNsQ29tbWFuZHMgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX3RjbENvbW1hbmRzID0gW10KKyAgICAgICAgc2VsZi5fdGNsQ29tbWFuZHMuYXBwZW5kKGNibmFtZSkKICAgICAgICAgc2VsZi5fdGsuY2FsbCgidHJhY2UiLCAidmFyaWFibGUiLCBzZWxmLl9uYW1lLCBtb2RlLCBjYm5hbWUpCiAgICAgICAgIHJldHVybiBjYm5hbWUKICAgICB0cmFjZSA9IHRyYWNlX3ZhcmlhYmxlCkBAIC0yNTcsNyArMjk4LDExIEBACiAgICAgICAgIENCTkFNRSBpcyB0aGUgbmFtZSBvZiB0aGUgY2FsbGJhY2sgcmV0dXJuZWQgZnJvbSB0cmFjZV92YXJpYWJsZSBvciB0cmFjZS4KICAgICAgICAgIiIiCiAgICAgICAgIHNlbGYuX3RrLmNhbGwoInRyYWNlIiwgInZkZWxldGUiLCBzZWxmLl9uYW1lLCBtb2RlLCBjYm5hbWUpCi0gICAgICAgIHNlbGYuX21hc3Rlci5kZWxldGVjb21tYW5kKGNibmFtZSkKKyAgICAgICAgc2VsZi5fdGsuZGVsZXRlY29tbWFuZChjYm5hbWUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX3RjbENvbW1hbmRzLnJlbW92ZShjYm5hbWUpCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgcGFzcwogICAgIGRlZiB0cmFjZV92aW5mbyhzZWxmKToKICAgICAgICAgIiIiUmV0dXJuIGFsbCB0cmFjZSBjYWxsYmFjayBpbmZvcm1hdGlvbi4iIiIKICAgICAgICAgcmV0dXJuIFtzZWxmLl90ay5zcGxpdCh4KSBmb3IgeCBpbiBzZWxmLl90ay5zcGxpdGxpc3QoCkBAIC0zNDYsNiArMzkxLDExIEBACiAgICAgICAgICIiIgogICAgICAgICBWYXJpYWJsZS5fX2luaXRfXyhzZWxmLCBtYXN0ZXIsIHZhbHVlLCBuYW1lKQogCisgICAgZGVmIHNldChzZWxmLCB2YWx1ZSk6CisgICAgICAgICIiIlNldCB0aGUgdmFyaWFibGUgdG8gVkFMVUUuIiIiCisgICAgICAgIHJldHVybiBzZWxmLl90ay5nbG9iYWxzZXR2YXIoc2VsZi5fbmFtZSwgc2VsZi5fdGsuZ2V0Ym9vbGVhbih2YWx1ZSkpCisgICAgaW5pdGlhbGl6ZSA9IHNldAorCiAgICAgZGVmIGdldChzZWxmKToKICAgICAgICAgIiIiUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgdmFyaWFibGUgYXMgYSBib29sLiIiIgogICAgICAgICB0cnk6CkBAIC00MjMsNyArNDczLDEwIEBACiAgICAgICAgICAgICAgICsgX2ZsYXR0ZW4oYXJncykgKyBfZmxhdHRlbihsaXN0KGt3Lml0ZW1zKCkpKSkKICAgICBkZWYgdGtfbWVudUJhcihzZWxmLCAqYXJncyk6CiAgICAgICAgICIiIkRvIG5vdCB1c2UuIE5lZWRlZCBpbiBUayAzLjYgYW5kIGVhcmxpZXIuIiIiCi0gICAgICAgIHBhc3MgIyBvYnNvbGV0ZSBzaW5jZSBUayA0LjAKKyAgICAgICAgIyBvYnNvbGV0ZSBzaW5jZSBUayA0LjAKKyAgICAgICAgaW1wb3J0IHdhcm5pbmdzCisgICAgICAgIHdhcm5pbmdzLndhcm4oJ3RrX21lbnVCYXIoKSBkb2VzIG5vdGhpbmcgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiAzLjYnLAorICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgc3RhY2tsZXZlbD0yKQogICAgIGRlZiB3YWl0X3ZhcmlhYmxlKHNlbGYsIG5hbWU9J1BZX1ZBUicpOgogICAgICAgICAiIiJXYWl0IHVudGlsIHRoZSB2YXJpYWJsZSBpcyBtb2RpZmllZC4KIApAQCAtNTM3LDYgKzU5MCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmRlbGV0ZWNvbW1hbmQobmFtZSkKICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IFRjbEVycm9yOgogICAgICAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgY2FsbGl0Ll9fbmFtZV9fID0gZnVuYy5fX25hbWVfXwogICAgICAgICAgICAgbmFtZSA9IHNlbGYuX3JlZ2lzdGVyKGNhbGxpdCkKICAgICAgICAgICAgIHJldHVybiBzZWxmLnRrLmNhbGwoJ2FmdGVyJywgbXMsIG5hbWUpCiAgICAgZGVmIGFmdGVyX2lkbGUoc2VsZiwgZnVuYywgKmFyZ3MpOgpAQCAtMTA2Myw3ICsxMTE3LDcgQEAKIAogICAgICAgICByZXR1cm4gc2VsZi5fYmluZCgoJ2JpbmQnLCBjbGFzc05hbWUpLCBzZXF1ZW5jZSwgZnVuYywgYWRkLCAwKQogICAgIGRlZiB1bmJpbmRfY2xhc3Moc2VsZiwgY2xhc3NOYW1lLCBzZXF1ZW5jZSk6Ci0gICAgICAgICIiIlVuYmluZCBmb3IgYSBhbGwgd2lkZ2V0cyB3aXRoIGJpbmR0YWcgQ0xBU1NOQU1FIGZvciBldmVudCBTRVFVRU5DRQorICAgICAgICAiIiJVbmJpbmQgZm9yIGFsbCB3aWRnZXRzIHdpdGggYmluZHRhZyBDTEFTU05BTUUgZm9yIGV2ZW50IFNFUVVFTkNFCiAgICAgICAgIGFsbCBmdW5jdGlvbnMuIiIiCiAgICAgICAgIHNlbGYudGsuY2FsbCgnYmluZCcsIGNsYXNzTmFtZSAsIHNlcXVlbmNlLCAnJykKICAgICBkZWYgbWFpbmxvb3Aoc2VsZiwgbj0wKToKQEAgLTEzNjUsMTUgKzE0MTksMTAgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIG9wdGlvbnMgPSBzZWxmLl9vcHRpb25zKGNuZiwga3cpCiAgICAgICAgIGlmIG5vdCBvcHRpb25zOgotICAgICAgICAgICAgcmVzID0gc2VsZi50ay5jYWxsKCdncmlkJywKLSAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZCwgc2VsZi5fdywgaW5kZXgpCi0gICAgICAgICAgICB3b3JkcyA9IHNlbGYudGsuc3BsaXRsaXN0KHJlcykKLSAgICAgICAgICAgIGRpY3QgPSB7fQotICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKHdvcmRzKSwgMik6Ci0gICAgICAgICAgICAgICAga2V5ID0gd29yZHNbaV1bMTpdCi0gICAgICAgICAgICAgICAgdmFsdWUgPSB3b3Jkc1tpKzFdCi0gICAgICAgICAgICAgICAgZGljdFtrZXldID0gc2VsZi5fZ3JpZGNvbnZ2YWx1ZSh2YWx1ZSkKLSAgICAgICAgICAgIHJldHVybiBkaWN0CisgICAgICAgICAgICByZXR1cm4gX3NwbGl0ZGljdCgKKyAgICAgICAgICAgICAgICBzZWxmLnRrLAorICAgICAgICAgICAgICAgIHNlbGYudGsuY2FsbCgnZ3JpZCcsIGNvbW1hbmQsIHNlbGYuX3csIGluZGV4KSwKKyAgICAgICAgICAgICAgICBjb252PXNlbGYuX2dyaWRjb252dmFsdWUpCiAgICAgICAgIHJlcyA9IHNlbGYudGsuY2FsbCgKICAgICAgICAgICAgICAgICAgICgnZ3JpZCcsIGNvbW1hbmQsIHNlbGYuX3csIGluZGV4KQogICAgICAgICAgICAgICAgICAgKyBvcHRpb25zKQpAQCAtMTY4NSw3ICsxNzM0LDcgQEAKIAogICAgICAgICBPbiBYLCB0aGUgaW1hZ2VzIGFyZSBhcnJhbmdlZCBpbnRvIHRoZSBfTkVUX1dNX0lDT04gWCBwcm9wZXJ0eSwKICAgICAgICAgd2hpY2ggbW9zdCBtb2Rlcm4gd2luZG93IG1hbmFnZXJzIHN1cHBvcnQuIEFuIGljb24gc3BlY2lmaWVkIGJ5Ci0gICAgICAgIHdtX2ljb25iaXRtYXAgbWF5IGV4aXN0IHNpbXV1bHRhbmVvdXNseS4KKyAgICAgICAgd21faWNvbmJpdG1hcCBtYXkgZXhpc3Qgc2ltdWx0YW5lb3VzbHkuCiAKICAgICAgICAgT24gTWFjaW50b3NoLCB0aGlzIGN1cnJlbnRseSBkb2VzIG5vdGhpbmcuIiIiCiAgICAgICAgIGlmIGRlZmF1bHQ6CkBAIC0xODczLDkgKzE5MjIsMTIgQEAKICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoYmFzZV9weSk6CiAgICAgICAgICAgICBleGVjKG9wZW4oYmFzZV9weSkucmVhZCgpLCBkaXIpCiAgICAgZGVmIHJlcG9ydF9jYWxsYmFja19leGNlcHRpb24oc2VsZiwgZXhjLCB2YWwsIHRiKToKLSAgICAgICAgIiIiSW50ZXJuYWwgZnVuY3Rpb24uIEl0IHJlcG9ydHMgZXhjZXB0aW9uIG9uIHN5cy5zdGRlcnIuIiIiCisgICAgICAgICIiIlJlcG9ydCBjYWxsYmFjayBleGNlcHRpb24gb24gc3lzLnN0ZGVyci4KKworICAgICAgICBBcHBsaWNhdGlvbnMgbWF5IHdhbnQgdG8gb3ZlcnJpZGUgdGhpcyBpbnRlcm5hbCBmdW5jdGlvbiwgYW5kCisgICAgICAgIHNob3VsZCB3aGVuIHN5cy5zdGRlcnIgaXMgTm9uZS4iIiIKICAgICAgICAgaW1wb3J0IHRyYWNlYmFjawotICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJFeGNlcHRpb24gaW4gVGtpbnRlciBjYWxsYmFja1xuIikKKyAgICAgICAgcHJpbnQoIkV4Y2VwdGlvbiBpbiBUa2ludGVyIGNhbGxiYWNrIiwgZmlsZT1zeXMuc3RkZXJyKQogICAgICAgICBzeXMubGFzdF90eXBlID0gZXhjCiAgICAgICAgIHN5cy5sYXN0X3ZhbHVlID0gdmFsCiAgICAgICAgIHN5cy5sYXN0X3RyYWNlYmFjayA9IHRiCkBAIC0xOTMzLDE2ICsxOTg1LDEwIEBACiAgICAgZGVmIHBhY2tfaW5mbyhzZWxmKToKICAgICAgICAgIiIiUmV0dXJuIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwYWNraW5nIG9wdGlvbnMKICAgICAgICAgZm9yIHRoaXMgd2lkZ2V0LiIiIgotICAgICAgICB3b3JkcyA9IHNlbGYudGsuc3BsaXRsaXN0KAotICAgICAgICAgICAgc2VsZi50ay5jYWxsKCdwYWNrJywgJ2luZm8nLCBzZWxmLl93KSkKLSAgICAgICAgZGljdCA9IHt9Ci0gICAgICAgIGZvciBpIGluIHJhbmdlKDAsIGxlbih3b3JkcyksIDIpOgotICAgICAgICAgICAga2V5ID0gd29yZHNbaV1bMTpdCi0gICAgICAgICAgICB2YWx1ZSA9IHdvcmRzW2krMV0KLSAgICAgICAgICAgIGlmIHN0cih2YWx1ZSlbOjFdID09ICcuJzoKLSAgICAgICAgICAgICAgICB2YWx1ZSA9IHNlbGYuX25hbWV0b3dpZGdldCh2YWx1ZSkKLSAgICAgICAgICAgIGRpY3Rba2V5XSA9IHZhbHVlCi0gICAgICAgIHJldHVybiBkaWN0CisgICAgICAgIGQgPSBfc3BsaXRkaWN0KHNlbGYudGssIHNlbGYudGsuY2FsbCgncGFjaycsICdpbmZvJywgc2VsZi5fdykpCisgICAgICAgIGlmICdpbicgaW4gZDoKKyAgICAgICAgICAgIGRbJ2luJ10gPSBzZWxmLm5hbWV0b3dpZGdldChkWydpbiddKQorICAgICAgICByZXR1cm4gZAogICAgIGluZm8gPSBwYWNrX2luZm8KICAgICBwcm9wYWdhdGUgPSBwYWNrX3Byb3BhZ2F0ZSA9IE1pc2MucGFja19wcm9wYWdhdGUKICAgICBzbGF2ZXMgPSBwYWNrX3NsYXZlcyA9IE1pc2MucGFja19zbGF2ZXMKQEAgLTE5ODQsMTYgKzIwMzAsMTAgQEAKICAgICBkZWYgcGxhY2VfaW5mbyhzZWxmKToKICAgICAgICAgIiIiUmV0dXJuIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwbGFjaW5nIG9wdGlvbnMKICAgICAgICAgZm9yIHRoaXMgd2lkZ2V0LiIiIgotICAgICAgICB3b3JkcyA9IHNlbGYudGsuc3BsaXRsaXN0KAotICAgICAgICAgICAgc2VsZi50ay5jYWxsKCdwbGFjZScsICdpbmZvJywgc2VsZi5fdykpCi0gICAgICAgIGRpY3QgPSB7fQotICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCBsZW4od29yZHMpLCAyKToKLSAgICAgICAgICAgIGtleSA9IHdvcmRzW2ldWzE6XQotICAgICAgICAgICAgdmFsdWUgPSB3b3Jkc1tpKzFdCi0gICAgICAgICAgICBpZiBzdHIodmFsdWUpWzoxXSA9PSAnLic6Ci0gICAgICAgICAgICAgICAgdmFsdWUgPSBzZWxmLl9uYW1ldG93aWRnZXQodmFsdWUpCi0gICAgICAgICAgICBkaWN0W2tleV0gPSB2YWx1ZQotICAgICAgICByZXR1cm4gZGljdAorICAgICAgICBkID0gX3NwbGl0ZGljdChzZWxmLnRrLCBzZWxmLnRrLmNhbGwoJ3BsYWNlJywgJ2luZm8nLCBzZWxmLl93KSkKKyAgICAgICAgaWYgJ2luJyBpbiBkOgorICAgICAgICAgICAgZFsnaW4nXSA9IHNlbGYubmFtZXRvd2lkZ2V0KGRbJ2luJ10pCisgICAgICAgIHJldHVybiBkCiAgICAgaW5mbyA9IHBsYWNlX2luZm8KICAgICBzbGF2ZXMgPSBwbGFjZV9zbGF2ZXMgPSBNaXNjLnBsYWNlX3NsYXZlcwogCkBAIC0yMDMzLDE2ICsyMDczLDEwIEBACiAgICAgZGVmIGdyaWRfaW5mbyhzZWxmKToKICAgICAgICAgIiIiUmV0dXJuIGluZm9ybWF0aW9uIGFib3V0IHRoZSBvcHRpb25zCiAgICAgICAgIGZvciBwb3NpdGlvbmluZyB0aGlzIHdpZGdldCBpbiBhIGdyaWQuIiIiCi0gICAgICAgIHdvcmRzID0gc2VsZi50ay5zcGxpdGxpc3QoCi0gICAgICAgICAgICBzZWxmLnRrLmNhbGwoJ2dyaWQnLCAnaW5mbycsIHNlbGYuX3cpKQotICAgICAgICBkaWN0ID0ge30KLSAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKHdvcmRzKSwgMik6Ci0gICAgICAgICAgICBrZXkgPSB3b3Jkc1tpXVsxOl0KLSAgICAgICAgICAgIHZhbHVlID0gd29yZHNbaSsxXQotICAgICAgICAgICAgaWYgc3RyKHZhbHVlKVs6MV0gPT0gJy4nOgotICAgICAgICAgICAgICAgIHZhbHVlID0gc2VsZi5fbmFtZXRvd2lkZ2V0KHZhbHVlKQotICAgICAgICAgICAgZGljdFtrZXldID0gdmFsdWUKLSAgICAgICAgcmV0dXJuIGRpY3QKKyAgICAgICAgZCA9IF9zcGxpdGRpY3Qoc2VsZi50aywgc2VsZi50ay5jYWxsKCdncmlkJywgJ2luZm8nLCBzZWxmLl93KSkKKyAgICAgICAgaWYgJ2luJyBpbiBkOgorICAgICAgICAgICAgZFsnaW4nXSA9IHNlbGYubmFtZXRvd2lkZ2V0KGRbJ2luJ10pCisgICAgICAgIHJldHVybiBkCiAgICAgaW5mbyA9IGdyaWRfaW5mbwogICAgIGxvY2F0aW9uID0gZ3JpZF9sb2NhdGlvbiA9IE1pc2MuZ3JpZF9sb2NhdGlvbgogICAgIHByb3BhZ2F0ZSA9IGdyaWRfcHJvcGFnYXRlID0gTWlzYy5ncmlkX3Byb3BhZ2F0ZQpAQCAtMjE5OSw0NSArMjIzMyw2IEBACiAgICAgICAgICIiIgogICAgICAgICByZXR1cm4gc2VsZi50ay5jYWxsKHNlbGYuX3csICdpbnZva2UnKQogCi0KLSMgSW5kaWNlczoKLSMgWFhYIEkgZG9uJ3QgbGlrZSB0aGVzZSAtLSB0YWtlIHRoZW0gYXdheQotZGVmIEF0RW5kKCk6Ci0gICAgd2FybmluZ3Mud2FybigidGtpbnRlci5BdEVuZCB3aWxsIGJlIHJlbW92ZWQgaW4gMy40IiwKLSAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgc3RhY2tsZXZlbD0yKQotICAgIHJldHVybiAnZW5kJwotCi0KLWRlZiBBdEluc2VydCgqYXJncyk6Ci0gICAgd2FybmluZ3Mud2FybigidGtpbnRlci5BdEluc2VydCB3aWxsIGJlIHJlbW92ZWQgaW4gMy40IiwKLSAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgc3RhY2tsZXZlbD0yKQotICAgIHMgPSAnaW5zZXJ0JwotICAgIGZvciBhIGluIGFyZ3M6Ci0gICAgICAgIGlmIGE6IHMgPSBzICsgKCcgJyArIGEpCi0gICAgcmV0dXJuIHMKLQotCi1kZWYgQXRTZWxGaXJzdCgpOgotICAgIHdhcm5pbmdzLndhcm4oInRraW50ZXIuQXRTZWxGaXJzdCB3aWxsIGJlIHJlbW92ZWQgaW4gMy40IiwKLSAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgc3RhY2tsZXZlbD0yKQotICAgIHJldHVybiAnc2VsLmZpcnN0JwotCi0KLWRlZiBBdFNlbExhc3QoKToKLSAgICB3YXJuaW5ncy53YXJuKCJ0a2ludGVyLkF0U2VsTGFzdCB3aWxsIGJlIHJlbW92ZWQgaW4gMy40IiwKLSAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgc3RhY2tsZXZlbD0yKQotICAgIHJldHVybiAnc2VsLmxhc3QnCi0KLQotZGVmIEF0KHgsIHk9Tm9uZSk6Ci0gICAgd2FybmluZ3Mud2FybigidGtpbnRlci5BdCB3aWxsIGJlIHJlbW92ZWQgaW4gMy40IiwKLSAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgc3RhY2tsZXZlbD0yKQotICAgIGlmIHkgaXMgTm9uZToKLSAgICAgICAgcmV0dXJuICdAJXInICUgKHgsKQotICAgIGVsc2U6Ci0gICAgICAgIHJldHVybiAnQCVyLCVyJyAlICh4LCB5KQotCi0KIGNsYXNzIENhbnZhcyhXaWRnZXQsIFhWaWV3LCBZVmlldyk6CiAgICAgIiIiQ2FudmFzIHdpZGdldCB0byBkaXNwbGF5IGdyYXBoaWNhbCBlbGVtZW50cyBsaWtlIGxpbmVzIG9yIHRleHQuIiIiCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hc3Rlcj1Ob25lLCBjbmY9e30sICoqa3cpOgpAQCAtMjYyNywyMiArMjYyMiwxOSBAQAogICAgIGRlZiBhY3RpdmF0ZShzZWxmLCBpbmRleCk6CiAgICAgICAgICIiIkFjdGl2YXRlIGl0ZW0gaWRlbnRpZmllZCBieSBJTkRFWC4iIiIKICAgICAgICAgc2VsZi50ay5jYWxsKHNlbGYuX3csICdhY3RpdmF0ZScsIGluZGV4KQotICAgIGRlZiBiYm94KHNlbGYsICphcmdzKToKKyAgICBkZWYgYmJveChzZWxmLCBpbmRleCk6CiAgICAgICAgICIiIlJldHVybiBhIHR1cGxlIG9mIFgxLFkxLFgyLFkyIGNvb3JkaW5hdGVzIGZvciBhIHJlY3RhbmdsZQotICAgICAgICB3aGljaCBlbmNsb3NlcyB0aGUgaXRlbSBpZGVudGlmaWVkIGJ5IGluZGV4IGluIEFSR1MuIiIiCi0gICAgICAgIHJldHVybiBzZWxmLl9nZXRpbnRzKAotICAgICAgICAgICAgc2VsZi50ay5jYWxsKChzZWxmLl93LCAnYmJveCcpICsgYXJncykpIG9yIE5vbmUKKyAgICAgICAgd2hpY2ggZW5jbG9zZXMgdGhlIGl0ZW0gaWRlbnRpZmllZCBieSB0aGUgZ2l2ZW4gaW5kZXguIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9nZXRpbnRzKHNlbGYudGsuY2FsbChzZWxmLl93LCAnYmJveCcsIGluZGV4KSkgb3IgTm9uZQogICAgIGRlZiBjdXJzZWxlY3Rpb24oc2VsZik6Ci0gICAgICAgICIiIlJldHVybiBsaXN0IG9mIGluZGljZXMgb2YgY3VycmVudGx5IHNlbGVjdGVkIGl0ZW0uIiIiCi0gICAgICAgICMgWFhYIE91Z2h0IHRvIGFwcGx5IHNlbGYuX2dldGludHMoKS4uLgotICAgICAgICByZXR1cm4gc2VsZi50ay5zcGxpdGxpc3Qoc2VsZi50ay5jYWxsKAotICAgICAgICAgICAgc2VsZi5fdywgJ2N1cnNlbGVjdGlvbicpKQorICAgICAgICAiIiJSZXR1cm4gdGhlIGluZGljZXMgb2YgY3VycmVudGx5IHNlbGVjdGVkIGl0ZW0uIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9nZXRpbnRzKHNlbGYudGsuY2FsbChzZWxmLl93LCAnY3Vyc2VsZWN0aW9uJykpIG9yICgpCiAgICAgZGVmIGRlbGV0ZShzZWxmLCBmaXJzdCwgbGFzdD1Ob25lKToKLSAgICAgICAgIiIiRGVsZXRlIGl0ZW1zIGZyb20gRklSU1QgdG8gTEFTVCAobm90IGluY2x1ZGVkKS4iIiIKKyAgICAgICAgIiIiRGVsZXRlIGl0ZW1zIGZyb20gRklSU1QgdG8gTEFTVCAoaW5jbHVkZWQpLiIiIgogICAgICAgICBzZWxmLnRrLmNhbGwoc2VsZi5fdywgJ2RlbGV0ZScsIGZpcnN0LCBsYXN0KQogICAgIGRlZiBnZXQoc2VsZiwgZmlyc3QsIGxhc3Q9Tm9uZSk6Ci0gICAgICAgICIiIkdldCBsaXN0IG9mIGl0ZW1zIGZyb20gRklSU1QgdG8gTEFTVCAobm90IGluY2x1ZGVkKS4iIiIKLSAgICAgICAgaWYgbGFzdDoKKyAgICAgICAgIiIiR2V0IGxpc3Qgb2YgaXRlbXMgZnJvbSBGSVJTVCB0byBMQVNUIChpbmNsdWRlZCkuIiIiCisgICAgICAgIGlmIGxhc3QgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICByZXR1cm4gc2VsZi50ay5zcGxpdGxpc3Qoc2VsZi50ay5jYWxsKAogICAgICAgICAgICAgICAgIHNlbGYuX3csICdnZXQnLCBmaXJzdCwgbGFzdCkpCiAgICAgICAgIGVsc2U6CkBAIC0yNjc1LDcgKzI2NjcsNyBAQAogICAgICAgICBzZWxmLnRrLmNhbGwoc2VsZi5fdywgJ3NlbGVjdGlvbicsICdhbmNob3InLCBpbmRleCkKICAgICBzZWxlY3RfYW5jaG9yID0gc2VsZWN0aW9uX2FuY2hvcgogICAgIGRlZiBzZWxlY3Rpb25fY2xlYXIoc2VsZiwgZmlyc3QsIGxhc3Q9Tm9uZSk6Ci0gICAgICAgICIiIkNsZWFyIHRoZSBzZWxlY3Rpb24gZnJvbSBGSVJTVCB0byBMQVNUIChub3QgaW5jbHVkZWQpLiIiIgorICAgICAgICAiIiJDbGVhciB0aGUgc2VsZWN0aW9uIGZyb20gRklSU1QgdG8gTEFTVCAoaW5jbHVkZWQpLiIiIgogICAgICAgICBzZWxmLnRrLmNhbGwoc2VsZi5fdywKICAgICAgICAgICAgICAgICAgJ3NlbGVjdGlvbicsICdjbGVhcicsIGZpcnN0LCBsYXN0KQogICAgIHNlbGVjdF9jbGVhciA9IHNlbGVjdGlvbl9jbGVhcgpAQCAtMjY4NSw3ICsyNjc3LDcgQEAKICAgICAgICAgICAgIHNlbGYuX3csICdzZWxlY3Rpb24nLCAnaW5jbHVkZXMnLCBpbmRleCkpCiAgICAgc2VsZWN0X2luY2x1ZGVzID0gc2VsZWN0aW9uX2luY2x1ZGVzCiAgICAgZGVmIHNlbGVjdGlvbl9zZXQoc2VsZiwgZmlyc3QsIGxhc3Q9Tm9uZSk6Ci0gICAgICAgICIiIlNldCB0aGUgc2VsZWN0aW9uIGZyb20gRklSU1QgdG8gTEFTVCAobm90IGluY2x1ZGVkKSB3aXRob3V0CisgICAgICAgICIiIlNldCB0aGUgc2VsZWN0aW9uIGZyb20gRklSU1QgdG8gTEFTVCAoaW5jbHVkZWQpIHdpdGhvdXQKICAgICAgICAgY2hhbmdpbmcgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBlbGVtZW50cy4iIiIKICAgICAgICAgc2VsZi50ay5jYWxsKHNlbGYuX3csICdzZWxlY3Rpb24nLCAnc2V0JywgZmlyc3QsIGxhc3QpCiAgICAgc2VsZWN0X3NldCA9IHNlbGVjdGlvbl9zZXQKQEAgLTI3MTgsNyArMjcxMCwxMSBAQAogICAgICAgICBzZWxlY3Rjb2xvciwgdGFrZWZvY3VzLCB0ZWFyb2ZmLCB0ZWFyb2ZmY29tbWFuZCwgdGl0bGUsIHR5cGUuIiIiCiAgICAgICAgIFdpZGdldC5fX2luaXRfXyhzZWxmLCBtYXN0ZXIsICdtZW51JywgY25mLCBrdykKICAgICBkZWYgdGtfYmluZEZvclRyYXZlcnNhbChzZWxmKToKLSAgICAgICAgcGFzcyAjIG9ic29sZXRlIHNpbmNlIFRrIDQuMAorICAgICAgICAjIG9ic29sZXRlIHNpbmNlIFRrIDQuMAorICAgICAgICBpbXBvcnQgd2FybmluZ3MKKyAgICAgICAgd2FybmluZ3Mud2FybigndGtfYmluZEZvclRyYXZlcnNhbCgpIGRvZXMgbm90aGluZyBhbmQgJworICAgICAgICAgICAgICAgICAgICAgICd3aWxsIGJlIHJlbW92ZWQgaW4gMy42JywKKyAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcsIHN0YWNrbGV2ZWw9MikKICAgICBkZWYgdGtfbWJQb3N0KHNlbGYpOgogICAgICAgICBzZWxmLnRrLmNhbGwoJ3RrX21iUG9zdCcsIHNlbGYuX3cpCiAgICAgZGVmIHRrX21iVW5wb3N0KHNlbGYpOgpAQCAtMjk2OCwxMSArMjk2NCwxMSBAQAogCiAgICAgICAgICIiIgogICAgICAgICBXaWRnZXQuX19pbml0X18oc2VsZiwgbWFzdGVyLCAndGV4dCcsIGNuZiwga3cpCi0gICAgZGVmIGJib3goc2VsZiwgKmFyZ3MpOgorICAgIGRlZiBiYm94KHNlbGYsIGluZGV4KToKICAgICAgICAgIiIiUmV0dXJuIGEgdHVwbGUgb2YgKHgseSx3aWR0aCxoZWlnaHQpIHdoaWNoIGdpdmVzIHRoZSBib3VuZGluZwotICAgICAgICBib3ggb2YgdGhlIHZpc2libGUgcGFydCBvZiB0aGUgY2hhcmFjdGVyIGF0IHRoZSBpbmRleCBpbiBBUkdTLiIiIgorICAgICAgICBib3ggb2YgdGhlIHZpc2libGUgcGFydCBvZiB0aGUgY2hhcmFjdGVyIGF0IHRoZSBnaXZlbiBpbmRleC4iIiIKICAgICAgICAgcmV0dXJuIHNlbGYuX2dldGludHMoCi0gICAgICAgICAgICBzZWxmLnRrLmNhbGwoKHNlbGYuX3csICdiYm94JykgKyBhcmdzKSkgb3IgTm9uZQorICAgICAgICAgICAgICAgIHNlbGYudGsuY2FsbChzZWxmLl93LCAnYmJveCcsIGluZGV4KSkgb3IgTm9uZQogICAgIGRlZiB0a190ZXh0U2VsZWN0VG8oc2VsZiwgaW5kZXgpOgogICAgICAgICBzZWxmLnRrLmNhbGwoJ3RrX3RleHRTZWxlY3RUbycsIHNlbGYuX3csIGluZGV4KQogICAgIGRlZiB0a190ZXh0QmFja3NwYWNlKHNlbGYpOgpAQCAtMzM2NCw3ICszMzYwLDcgQEAKICAgICAgICAgICAgIG1hc3RlciA9IF9kZWZhdWx0X3Jvb3QKICAgICAgICAgICAgIGlmIG5vdCBtYXN0ZXI6CiAgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdUb28gZWFybHkgdG8gY3JlYXRlIGltYWdlJykKLSAgICAgICAgc2VsZi50ayA9IG1hc3Rlci50aworICAgICAgICBzZWxmLnRrID0gZ2V0YXR0cihtYXN0ZXIsICd0aycsIG1hc3RlcikKICAgICAgICAgaWYgbm90IG5hbWU6CiAgICAgICAgICAgICBJbWFnZS5fbGFzdF9pZCArPSAxCiAgICAgICAgICAgICBuYW1lID0gInB5aW1hZ2UlciIgJSAoSW1hZ2UuX2xhc3RfaWQsKSAjIHRrIGl0c2VsZiB3b3VsZCB1c2UgaW1hZ2U8eD4KQEAgLTM0MzUsMjAgKzM0MzEsMjAgQEAKICAgICAjIFhYWCBjb3B5IC1mcm9tLCAtdG8sIC4uLj8KICAgICBkZWYgY29weShzZWxmKToKICAgICAgICAgIiIiUmV0dXJuIGEgbmV3IFBob3RvSW1hZ2Ugd2l0aCB0aGUgc2FtZSBpbWFnZSBhcyB0aGlzIHdpZGdldC4iIiIKLSAgICAgICAgZGVzdEltYWdlID0gUGhvdG9JbWFnZSgpCisgICAgICAgIGRlc3RJbWFnZSA9IFBob3RvSW1hZ2UobWFzdGVyPXNlbGYudGspCiAgICAgICAgIHNlbGYudGsuY2FsbChkZXN0SW1hZ2UsICdjb3B5Jywgc2VsZi5uYW1lKQogICAgICAgICByZXR1cm4gZGVzdEltYWdlCiAgICAgZGVmIHpvb20oc2VsZix4LHk9JycpOgogICAgICAgICAiIiJSZXR1cm4gYSBuZXcgUGhvdG9JbWFnZSB3aXRoIHRoZSBzYW1lIGltYWdlIGFzIHRoaXMgd2lkZ2V0CiAgICAgICAgIGJ1dCB6b29tIGl0IHdpdGggWCBhbmQgWS4iIiIKLSAgICAgICAgZGVzdEltYWdlID0gUGhvdG9JbWFnZSgpCisgICAgICAgIGRlc3RJbWFnZSA9IFBob3RvSW1hZ2UobWFzdGVyPXNlbGYudGspCiAgICAgICAgIGlmIHk9PScnOiB5PXgKICAgICAgICAgc2VsZi50ay5jYWxsKGRlc3RJbWFnZSwgJ2NvcHknLCBzZWxmLm5hbWUsICctem9vbScseCx5KQogICAgICAgICByZXR1cm4gZGVzdEltYWdlCiAgICAgZGVmIHN1YnNhbXBsZShzZWxmLHgseT0nJyk6CiAgICAgICAgICIiIlJldHVybiBhIG5ldyBQaG90b0ltYWdlIGJhc2VkIG9uIHRoZSBzYW1lIGltYWdlIGFzIHRoaXMgd2lkZ2V0CiAgICAgICAgIGJ1dCB1c2Ugb25seSBldmVyeSBYdGggb3IgWXRoIHBpeGVsLiIiIgotICAgICAgICBkZXN0SW1hZ2UgPSBQaG90b0ltYWdlKCkKKyAgICAgICAgZGVzdEltYWdlID0gUGhvdG9JbWFnZShtYXN0ZXI9c2VsZi50aykKICAgICAgICAgaWYgeT09Jyc6IHk9eAogICAgICAgICBzZWxmLnRrLmNhbGwoZGVzdEltYWdlLCAnY29weScsIHNlbGYubmFtZSwgJy1zdWJzYW1wbGUnLHgseSkKICAgICAgICAgcmV0dXJuIGRlc3RJbWFnZQpkaWZmIC0tZ2l0IGEvTGliL3RraW50ZXIvX2ZpeC5weSBiL0xpYi90a2ludGVyL19maXgucHkKaW5kZXggNWYzMmQyNS4uZmE4ODczNCAxMDA2NDQKLS0tIGEvTGliL3RraW50ZXIvX2ZpeC5weQorKysgYi9MaWIvdGtpbnRlci9fZml4LnB5CkBAIC00OCw4ICs0OCw4IEBACiAKIHByZWZpeCA9IG9zLnBhdGguam9pbihzeXMuYmFzZV9wcmVmaXgsInRjbCIpCiBpZiBub3Qgb3MucGF0aC5leGlzdHMocHJlZml4KToKLSAgICAjIGRldmRpci8uLi90Y2x0ay9saWIKLSAgICBwcmVmaXggPSBvcy5wYXRoLmpvaW4oc3lzLmJhc2VfcHJlZml4LCBvcy5wYXRoLnBhcmRpciwgInRjbHRrIiwgImxpYiIpCisgICAgIyBkZXZkaXIvZXh0ZXJuYWxzL3RjbHRrL2xpYgorICAgIHByZWZpeCA9IG9zLnBhdGguam9pbihzeXMuYmFzZV9wcmVmaXgsICJleHRlcm5hbHMiLCAidGNsdGsiLCAibGliIikKICAgICBwcmVmaXggPSBvcy5wYXRoLmFic3BhdGgocHJlZml4KQogIyBpZiB0aGlzIGRvZXMgbm90IGV4aXN0LCBubyBmdXJ0aGVyIHNlYXJjaCBpcyBuZWVkZWQKIGlmIG9zLnBhdGguZXhpc3RzKHByZWZpeCk6CmRpZmYgLS1naXQgYS9MaWIvdGtpbnRlci9jb2xvcmNob29zZXIucHkgYi9MaWIvdGtpbnRlci9jb2xvcmNob29zZXIucHkKaW5kZXggNjAyNzA2Ny4uOWRjOTY3MSAxMDA2NDQKLS0tIGEvTGliL3RraW50ZXIvY29sb3JjaG9vc2VyLnB5CisrKyBiL0xpYi90a2ludGVyL2NvbG9yY2hvb3Nlci5weQpAQCAtMSw0ICsxLDQgQEAKLSMgdGsgY29tbW9uIGNvbG91ciBjaG9vc2VyIGRpYWxvZ3VlCisjIHRrIGNvbW1vbiBjb2xvciBjaG9vc2VyIGRpYWxvZ3VlCiAjCiAjIHRoaXMgbW9kdWxlIHByb3ZpZGVzIGFuIGludGVyZmFjZSB0byB0aGUgbmF0aXZlIGNvbG9yIGRpYWxvZ3VlCiAjIGF2YWlsYWJsZSBpbiBUayA0LjIgYW5kIG5ld2VyLgpAQCAtMTEsNyArMTEsNyBAQAogIwogIyBvcHRpb25zIChhbGwgaGF2ZSBkZWZhdWx0IHZhbHVlcyk6CiAjCi0jIC0gaW5pdGlhbGNvbG9yOiBjb2xvdXIgdG8gbWFyayBhcyBzZWxlY3RlZCB3aGVuIGRpYWxvZyBpcyBkaXNwbGF5ZWQKKyMgLSBpbml0aWFsY29sb3I6IGNvbG9yIHRvIG1hcmsgYXMgc2VsZWN0ZWQgd2hlbiBkaWFsb2cgaXMgZGlzcGxheWVkCiAjICAgKGdpdmVuIGFzIGFuIFJHQiB0cmlwbGV0IG9yIGEgVGsgY29sb3Igc3RyaW5nKQogIwogIyAtIHBhcmVudDogd2hpY2ggd2luZG93IHRvIHBsYWNlIHRoZSBkaWFsb2cgb24gdG9wIG9mCmRpZmYgLS1naXQgYS9MaWIvdGtpbnRlci9maWxlZGlhbG9nLnB5IGIvTGliL3RraW50ZXIvZmlsZWRpYWxvZy5weQppbmRleCAzZmZiMjUyLi5hNzFhZmIyIDEwMDY0NAotLS0gYS9MaWIvdGtpbnRlci9maWxlZGlhbG9nLnB5CisrKyBiL0xpYi90a2ludGVyL2ZpbGVkaWFsb2cucHkKQEAgLTE2Niw3ICsxNjYsNyBAQAogICAgICAgICBkaXIsIHBhdCA9IHNlbGYuZ2V0X2ZpbHRlcigpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG5hbWVzID0gb3MubGlzdGRpcihkaXIpCi0gICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBzZWxmLm1hc3Rlci5iZWxsKCkKICAgICAgICAgICAgIHJldHVybgogICAgICAgICBzZWxmLmRpcmVjdG9yeSA9IGRpcgpAQCAtMjA5LDcgKzIwOSw3IEBACiAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzYWJzKGRpcik6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgcHdkID0gb3MuZ2V0Y3dkKCkKLSAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIHB3ZCA9IE5vbmUKICAgICAgICAgICAgIGlmIHB3ZDoKICAgICAgICAgICAgICAgICBkaXIgPSBvcy5wYXRoLmpvaW4ocHdkLCBkaXIpCmRpZmYgLS1naXQgYS9MaWIvdGtpbnRlci9mb250LnB5IGIvTGliL3RraW50ZXIvZm9udC5weQppbmRleCA0OTI5MjQxLi5iOTY2NzMyIDEwMDY0NAotLS0gYS9MaWIvdGtpbnRlci9mb250LnB5CisrKyBiL0xpYi90a2ludGVyL2ZvbnQucHkKQEAgLTY5LDkgKzY5LDEwIEBACiAgICAgICAgICAgICAgICAgICoqb3B0aW9ucyk6CiAgICAgICAgIGlmIG5vdCByb290OgogICAgICAgICAgICAgcm9vdCA9IHRraW50ZXIuX2RlZmF1bHRfcm9vdAorICAgICAgICB0ayA9IGdldGF0dHIocm9vdCwgJ3RrJywgcm9vdCkKICAgICAgICAgaWYgZm9udDoKICAgICAgICAgICAgICMgZ2V0IGFjdHVhbCBzZXR0aW5ncyBjb3JyZXNwb25kaW5nIHRvIHRoZSBnaXZlbiBmb250Ci0gICAgICAgICAgICBmb250ID0gcm9vdC50ay5zcGxpdGxpc3Qocm9vdC50ay5jYWxsKCJmb250IiwgImFjdHVhbCIsIGZvbnQpKQorICAgICAgICAgICAgZm9udCA9IHRrLnNwbGl0bGlzdCh0ay5jYWxsKCJmb250IiwgImFjdHVhbCIsIGZvbnQpKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgZm9udCA9IHNlbGYuX3NldChvcHRpb25zKQogICAgICAgICBpZiBub3QgbmFtZToKQEAgLTgxLDIwICs4MiwxOSBAQAogICAgICAgICBpZiBleGlzdHM6CiAgICAgICAgICAgICBzZWxmLmRlbGV0ZV9mb250ID0gRmFsc2UKICAgICAgICAgICAgICMgY29uZmlybSBmb250IGV4aXN0cwotICAgICAgICAgICAgaWYgc2VsZi5uYW1lIG5vdCBpbiByb290LnRrLmNhbGwoImZvbnQiLCAibmFtZXMiKToKKyAgICAgICAgICAgIGlmIHNlbGYubmFtZSBub3QgaW4gdGsuc3BsaXRsaXN0KHRrLmNhbGwoImZvbnQiLCAibmFtZXMiKSk6CiAgICAgICAgICAgICAgICAgcmFpc2UgdGtpbnRlci5fdGtpbnRlci5UY2xFcnJvcigKICAgICAgICAgICAgICAgICAgICAgIm5hbWVkIGZvbnQgJXMgZG9lcyBub3QgYWxyZWFkeSBleGlzdCIgJSAoc2VsZi5uYW1lLCkpCiAgICAgICAgICAgICAjIGlmIGZvbnQgY29uZmlnIGluZm8gc3VwcGxpZWQsIGFwcGx5IGl0CiAgICAgICAgICAgICBpZiBmb250OgotICAgICAgICAgICAgICAgIHJvb3QudGsuY2FsbCgiZm9udCIsICJjb25maWd1cmUiLCBzZWxmLm5hbWUsICpmb250KQorICAgICAgICAgICAgICAgIHRrLmNhbGwoImZvbnQiLCAiY29uZmlndXJlIiwgc2VsZi5uYW1lLCAqZm9udCkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgICMgY3JlYXRlIG5ldyBmb250IChyYWlzZXMgVGNsRXJyb3IgaWYgdGhlIGZvbnQgZXhpc3RzKQotICAgICAgICAgICAgcm9vdC50ay5jYWxsKCJmb250IiwgImNyZWF0ZSIsIHNlbGYubmFtZSwgKmZvbnQpCisgICAgICAgICAgICB0ay5jYWxsKCJmb250IiwgImNyZWF0ZSIsIHNlbGYubmFtZSwgKmZvbnQpCiAgICAgICAgICAgICBzZWxmLmRlbGV0ZV9mb250ID0gVHJ1ZQotICAgICAgICAjIGJhY2tsaW5rcyEKLSAgICAgICAgc2VsZi5fcm9vdCAgPSByb290Ci0gICAgICAgIHNlbGYuX3NwbGl0ID0gcm9vdC50ay5zcGxpdGxpc3QKLSAgICAgICAgc2VsZi5fY2FsbCAgPSByb290LnRrLmNhbGwKKyAgICAgICAgc2VsZi5fdGsgPSB0aworICAgICAgICBzZWxmLl9zcGxpdCA9IHRrLnNwbGl0bGlzdAorICAgICAgICBzZWxmLl9jYWxsICA9IHRrLmNhbGwKIAogICAgIGRlZiBfX3N0cl9fKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5uYW1lCkBAIC0xMTksNyArMTE5LDcgQEAKIAogICAgIGRlZiBjb3B5KHNlbGYpOgogICAgICAgICAiUmV0dXJuIGEgZGlzdGluY3QgY29weSBvZiB0aGUgY3VycmVudCBmb250IgotICAgICAgICByZXR1cm4gRm9udChzZWxmLl9yb290LCAqKnNlbGYuYWN0dWFsKCkpCisgICAgICAgIHJldHVybiBGb250KHNlbGYuX3RrLCAqKnNlbGYuYWN0dWFsKCkpCiAKICAgICBkZWYgYWN0dWFsKHNlbGYsIG9wdGlvbj1Ob25lLCBkaXNwbGF5b2Y9Tm9uZSk6CiAgICAgICAgICJSZXR1cm4gYWN0dWFsIGZvbnQgYXR0cmlidXRlcyIKZGlmZiAtLWdpdCBhL0xpYi90a2ludGVyL3Rlc3QvcnVudGt0ZXN0cy5weSBiL0xpYi90a2ludGVyL3Rlc3QvcnVudGt0ZXN0cy5weQppbmRleCBlMjFlY2E0Li5jY2IzNzU1IDEwMDY0NAotLS0gYS9MaWIvdGtpbnRlci90ZXN0L3J1bnRrdGVzdHMucHkKKysrIGIvTGliL3RraW50ZXIvdGVzdC9ydW50a3Rlc3RzLnB5CkBAIC02OCw1ICs2OCw0IEBACiAgICAgICAgICAgICAgICAgeWllbGQgdGVzdAogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3Quc3VwcG9ydC51c2VfcmVzb3VyY2VzID0gWydndWknXQogICAgIHRlc3Quc3VwcG9ydC5ydW5fdW5pdHRlc3QoKmdldF90ZXN0cygpKQpkaWZmIC0tZ2l0IGEvTGliL3RraW50ZXIvdGVzdC9zdXBwb3J0LnB5IGIvTGliL3RraW50ZXIvdGVzdC9zdXBwb3J0LnB5CmluZGV4IGZjZDlmZmMuLmRkMTU1ZmEgMTAwNjQ0Ci0tLSBhL0xpYi90a2ludGVyL3Rlc3Qvc3VwcG9ydC5weQorKysgYi9MaWIvdGtpbnRlci90ZXN0L3N1cHBvcnQucHkKQEAgLTEsNzQgKzEsNDUgQEAKLWltcG9ydCBzeXMKK2ltcG9ydCByZQogaW1wb3J0IHRraW50ZXIKIGltcG9ydCB1bml0dGVzdAogCi1fdGtfdW5hdmFpbGFibGUgPSBOb25lCitjbGFzcyBBYnN0cmFjdFRrVGVzdDoKIAotZGVmIGNoZWNrX3RrX2F2YWlsYWJpbGl0eSgpOgotICAgICIiIkNoZWNrIHRoYXQgVGsgaXMgaW5zdGFsbGVkIGFuZCBhdmFpbGFibGUuIiIiCi0gICAgZ2xvYmFsIF90a191bmF2YWlsYWJsZQorICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBzZXRVcENsYXNzKGNscyk6CisgICAgICAgIGNscy5fb2xkX3N1cHBvcnRfZGVmYXVsdF9yb290ID0gdGtpbnRlci5fc3VwcG9ydF9kZWZhdWx0X3Jvb3QKKyAgICAgICAgZGVzdHJveV9kZWZhdWx0X3Jvb3QoKQorICAgICAgICB0a2ludGVyLk5vRGVmYXVsdFJvb3QoKQorICAgICAgICBjbHMucm9vdCA9IHRraW50ZXIuVGsoKQorICAgICAgICBjbHMud2FudG9iamVjdHMgPSBjbHMucm9vdC53YW50b2JqZWN0cygpCisgICAgICAgICMgRGUtbWF4aW1pemUgbWFpbiB3aW5kb3cuCisgICAgICAgICMgU29tZSB3aW5kb3cgbWFuYWdlcnMgY2FuIG1heGltaXplIG5ldyB3aW5kb3dzLgorICAgICAgICBjbHMucm9vdC53bV9zdGF0ZSgnbm9ybWFsJykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY2xzLnJvb3Qud21fYXR0cmlidXRlcygnLXpvb21lZCcsIEZhbHNlKQorICAgICAgICBleGNlcHQgdGtpbnRlci5UY2xFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKIAotICAgIGlmIF90a191bmF2YWlsYWJsZSBpcyBOb25lOgotICAgICAgICBfdGtfdW5hdmFpbGFibGUgPSBGYWxzZQotICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ2Rhcndpbic6Ci0gICAgICAgICAgICAjIFRoZSBBcXVhIFRrIGltcGxlbWVudGF0aW9ucyBvbiBPUyBYIGNhbiBhYm9ydCB0aGUgcHJvY2VzcyBpZgotICAgICAgICAgICAgIyBiZWluZyBjYWxsZWQgaW4gYW4gZW52aXJvbm1lbnQgd2hlcmUgYSB3aW5kb3cgc2VydmVyIGNvbm5lY3Rpb24KLSAgICAgICAgICAgICMgY2Fubm90IGJlIG1hZGUsIGZvciBpbnN0YW5jZSB3aGVuIGludm9rZWQgYnkgYSBidWlsZGJvdCBvciBzc2gKLSAgICAgICAgICAgICMgcHJvY2VzcyBub3QgcnVubmluZyB1bmRlciB0aGUgc2FtZSB1c2VyIGlkIGFzIHRoZSBjdXJyZW50IGNvbnNvbGUKLSAgICAgICAgICAgICMgdXNlci4gIFRvIGF2b2lkIHRoYXQsIHJhaXNlIGFuIGV4Y2VwdGlvbiBpZiB0aGUgd2luZG93IG1hbmFnZXIKLSAgICAgICAgICAgICMgY29ubmVjdGlvbiBpcyBub3QgYXZhaWxhYmxlLgotICAgICAgICAgICAgZnJvbSBjdHlwZXMgaW1wb3J0IGNkbGwsIGNfaW50LCBwb2ludGVyLCBTdHJ1Y3R1cmUKLSAgICAgICAgICAgIGZyb20gY3R5cGVzLnV0aWwgaW1wb3J0IGZpbmRfbGlicmFyeQorICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiB0ZWFyRG93bkNsYXNzKGNscyk6CisgICAgICAgIGNscy5yb290LnVwZGF0ZV9pZGxldGFza3MoKQorICAgICAgICBjbHMucm9vdC5kZXN0cm95KCkKKyAgICAgICAgZGVsIGNscy5yb290CisgICAgICAgIHRraW50ZXIuX2RlZmF1bHRfcm9vdCA9IE5vbmUKKyAgICAgICAgdGtpbnRlci5fc3VwcG9ydF9kZWZhdWx0X3Jvb3QgPSBjbHMuX29sZF9zdXBwb3J0X2RlZmF1bHRfcm9vdAogCi0gICAgICAgICAgICBhcHBfc2VydmljZXMgPSBjZGxsLkxvYWRMaWJyYXJ5KGZpbmRfbGlicmFyeSgiQXBwbGljYXRpb25TZXJ2aWNlcyIpKQorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5yb290LmRlaWNvbmlmeSgpCiAKLSAgICAgICAgICAgIGlmIGFwcF9zZXJ2aWNlcy5DR01haW5EaXNwbGF5SUQoKSA9PSAwOgotICAgICAgICAgICAgICAgIF90a191bmF2YWlsYWJsZSA9ICJjYW5ub3QgcnVuIHdpdGhvdXQgT1MgWCB3aW5kb3cgbWFuYWdlciIKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgY2xhc3MgUHJvY2Vzc1NlcmlhbE51bWJlcihTdHJ1Y3R1cmUpOgotICAgICAgICAgICAgICAgICAgICBfZmllbGRzXyA9IFsoImhpZ2hMb25nT2ZQU04iLCBjX2ludCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgibG93TG9uZ09mUFNOIiwgY19pbnQpXQotICAgICAgICAgICAgICAgIHBzbiA9IFByb2Nlc3NTZXJpYWxOdW1iZXIoKQotICAgICAgICAgICAgICAgIHBzbl9wID0gcG9pbnRlcihwc24pCi0gICAgICAgICAgICAgICAgaWYgKCAgKGFwcF9zZXJ2aWNlcy5HZXRDdXJyZW50UHJvY2Vzcyhwc25fcCkgPCAwKSBvcgotICAgICAgICAgICAgICAgICAgICAgIChhcHBfc2VydmljZXMuU2V0RnJvbnRQcm9jZXNzKHBzbl9wKSA8IDApICk6Ci0gICAgICAgICAgICAgICAgICAgIF90a191bmF2YWlsYWJsZSA9ICJjYW5ub3QgcnVuIHdpdGhvdXQgT1MgWCBndWkgcHJvY2VzcyIKLSAgICAgICAgZWxzZTogICAjIG5vdCBPUyBYCi0gICAgICAgICAgICBpbXBvcnQgdGtpbnRlcgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHRraW50ZXIuQnV0dG9uKCkKLSAgICAgICAgICAgIGV4Y2VwdCB0a2ludGVyLlRjbEVycm9yIGFzIG1zZzoKLSAgICAgICAgICAgICAgICAjIGFzc3VtaW5nIHRrIGlzIG5vdCBhdmFpbGFibGUKLSAgICAgICAgICAgICAgICBfdGtfdW5hdmFpbGFibGUgPSAidGsgbm90IGF2YWlsYWJsZTogJXMiICUgbXNnCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBmb3IgdyBpbiBzZWxmLnJvb3Qud2luZm9fY2hpbGRyZW4oKToKKyAgICAgICAgICAgIHcuZGVzdHJveSgpCisgICAgICAgIHNlbGYucm9vdC53aXRoZHJhdygpCiAKLSAgICBpZiBfdGtfdW5hdmFpbGFibGU6Ci0gICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KF90a191bmF2YWlsYWJsZSkKLSAgICByZXR1cm4KLQotZGVmIGdldF90a19yb290KCk6Ci0gICAgY2hlY2tfdGtfYXZhaWxhYmlsaXR5KCkgICAgICMgcmFpc2UgZXhjZXB0aW9uIGlmIHRrIHVuYXZhaWxhYmxlCi0gICAgdHJ5OgotICAgICAgICByb290ID0gdGtpbnRlci5fZGVmYXVsdF9yb290Ci0gICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICAgICAjIGl0IGlzIHBvc3NpYmxlIHRvIGRpc2FibGUgZGVmYXVsdCByb290IGluIFRraW50ZXIsIGFsdGhvdWdoCi0gICAgICAgICMgSSBoYXZlbid0IHNlZW4gcGVvcGxlIGRvaW5nIGl0IChidXQgYXBwYXJlbnRseSBzb21lb25lIGRpZCBpdAotICAgICAgICAjIGhlcmUpLgotICAgICAgICByb290ID0gTm9uZQotCi0gICAgaWYgcm9vdCBpcyBOb25lOgotICAgICAgICAjIGNyZWF0ZSBhIG5ldyBtYXN0ZXIgb25seSBpZiB0aGVyZSBpc24ndCBvbmUgYWxyZWFkeQotICAgICAgICByb290ID0gdGtpbnRlci5UaygpCi0KLSAgICByZXR1cm4gcm9vdAotCi1kZWYgcm9vdF9kZWljb25pZnkoKToKLSAgICByb290ID0gZ2V0X3RrX3Jvb3QoKQotICAgIHJvb3QuZGVpY29uaWZ5KCkKLQotZGVmIHJvb3Rfd2l0aGRyYXcoKToKLSAgICByb290ID0gZ2V0X3RrX3Jvb3QoKQotICAgIHJvb3Qud2l0aGRyYXcoKQotCitkZWYgZGVzdHJveV9kZWZhdWx0X3Jvb3QoKToKKyAgICBpZiBnZXRhdHRyKHRraW50ZXIsICdfZGVmYXVsdF9yb290JywgTm9uZSk6CisgICAgICAgIHRraW50ZXIuX2RlZmF1bHRfcm9vdC51cGRhdGVfaWRsZXRhc2tzKCkKKyAgICAgICAgdGtpbnRlci5fZGVmYXVsdF9yb290LmRlc3Ryb3koKQorICAgICAgICB0a2ludGVyLl9kZWZhdWx0X3Jvb3QgPSBOb25lCiAKIGRlZiBzaW11bGF0ZV9tb3VzZV9jbGljayh3aWRnZXQsIHgsIHkpOgogICAgICIiIkdlbmVyYXRlIHByb3BlciBldmVudHMgdG8gY2xpY2sgYXQgdGhlIHgsIHkgcG9zaXRpb24gKHRyaWVzIHRvIGFjdApAQCAtOTEsMTQgKzYyLDE1IEBACiAgICAgZ2xvYmFsIF90a19wYXRjaGxldmVsCiAgICAgaWYgX3RrX3BhdGNobGV2ZWwgaXMgTm9uZToKICAgICAgICAgdGNsID0gdGtpbnRlci5UY2woKQotICAgICAgICBwYXRjaGxldmVsID0gW10KLSAgICAgICAgZm9yIHggaW4gdGNsLmNhbGwoJ2luZm8nLCAncGF0Y2hsZXZlbCcpLnNwbGl0KCcuJyk6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgeCA9IGludCh4LCAxMCkKLSAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgotICAgICAgICAgICAgICAgIHggPSAtMQotICAgICAgICAgICAgcGF0Y2hsZXZlbC5hcHBlbmQoeCkKLSAgICAgICAgX3RrX3BhdGNobGV2ZWwgPSB0dXBsZShwYXRjaGxldmVsKQorICAgICAgICBwYXRjaGxldmVsID0gdGNsLmNhbGwoJ2luZm8nLCAncGF0Y2hsZXZlbCcpCisgICAgICAgIG0gPSByZS5mdWxsbWF0Y2gocicoXGQrKVwuKFxkKykoW2FiLl0pKFxkKyknLCBwYXRjaGxldmVsKQorICAgICAgICBtYWpvciwgbWlub3IsIHJlbGVhc2VsZXZlbCwgc2VyaWFsID0gbS5ncm91cHMoKQorICAgICAgICBtYWpvciwgbWlub3IsIHNlcmlhbCA9IGludChtYWpvciksIGludChtaW5vciksIGludChzZXJpYWwpCisgICAgICAgIHJlbGVhc2VsZXZlbCA9IHsnYSc6ICdhbHBoYScsICdiJzogJ2JldGEnLCAnLic6ICdmaW5hbCd9W3JlbGVhc2VsZXZlbF0KKyAgICAgICAgaWYgcmVsZWFzZWxldmVsID09ICdmaW5hbCc6CisgICAgICAgICAgICBfdGtfcGF0Y2hsZXZlbCA9IG1ham9yLCBtaW5vciwgc2VyaWFsLCByZWxlYXNlbGV2ZWwsIDAKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIF90a19wYXRjaGxldmVsID0gbWFqb3IsIG1pbm9yLCAwLCByZWxlYXNlbGV2ZWwsIHNlcmlhbAogICAgIHJldHVybiBfdGtfcGF0Y2hsZXZlbAogCiB1bml0cyA9IHsKZGlmZiAtLWdpdCBhL0xpYi90a2ludGVyL3Rlc3QvdGVzdF90a2ludGVyL3Rlc3RfZm9udC5weSBiL0xpYi90a2ludGVyL3Rlc3QvdGVzdF90a2ludGVyL3Rlc3RfZm9udC5weQppbmRleCBkZmQ2MzBiLi5jMDk0YzYxIDEwMDY0NAotLS0gYS9MaWIvdGtpbnRlci90ZXN0L3Rlc3RfdGtpbnRlci90ZXN0X2ZvbnQucHkKKysrIGIvTGliL3RraW50ZXIvdGVzdC90ZXN0X3RraW50ZXIvdGVzdF9mb250LnB5CkBAIC0yLDMxICsyLDk0IEBACiBpbXBvcnQgdGtpbnRlcgogZnJvbSB0a2ludGVyIGltcG9ydCBmb250CiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcmVxdWlyZXMsIHJ1bl91bml0dGVzdAotaW1wb3J0IHRraW50ZXIudGVzdC5zdXBwb3J0IGFzIHN1cHBvcnQKK2Zyb20gdGtpbnRlci50ZXN0LnN1cHBvcnQgaW1wb3J0IEFic3RyYWN0VGtUZXN0CiAKIHJlcXVpcmVzKCdndWknKQogCi1jbGFzcyBGb250VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Citmb250bmFtZSA9ICJUa0RlZmF1bHRGb250IgogCi0gICAgZGVmIHNldFVwKHNlbGYpOgotICAgICAgICBzdXBwb3J0LnJvb3RfZGVpY29uaWZ5KCkKK2NsYXNzIEZvbnRUZXN0KEFic3RyYWN0VGtUZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CiAKLSAgICBkZWYgdGVhckRvd24oc2VsZik6Ci0gICAgICAgIHN1cHBvcnQucm9vdF93aXRoZHJhdygpCi0KLSAgICBkZWYgdGVzdF9mb250X2VxKHNlbGYpOgotICAgICAgICBmb250bmFtZSA9ICJUa0RlZmF1bHRGb250IgorICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBzZXRVcENsYXNzKGNscyk6CisgICAgICAgIEFic3RyYWN0VGtUZXN0LnNldFVwQ2xhc3MuX19mdW5jX18oY2xzKQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBmID0gZm9udC5Gb250KG5hbWU9Zm9udG5hbWUsIGV4aXN0cz1UcnVlKQotICAgICAgICBleGNlcHQgdGtpbnRlci5fdGtpbnRlci5UY2xFcnJvcjoKLSAgICAgICAgICAgIGYgPSBmb250LkZvbnQobmFtZT1mb250bmFtZSwgZXhpc3RzPUZhbHNlKQotICAgICAgICBmb250MSA9IGZvbnQubmFtZXRvZm9udChmb250bmFtZSkKLSAgICAgICAgZm9udDIgPSBmb250Lm5hbWV0b2ZvbnQoZm9udG5hbWUpCisgICAgICAgICAgICBjbHMuZm9udCA9IGZvbnQuRm9udChyb290PWNscy5yb290LCBuYW1lPWZvbnRuYW1lLCBleGlzdHM9VHJ1ZSkKKyAgICAgICAgZXhjZXB0IHRraW50ZXIuVGNsRXJyb3I6CisgICAgICAgICAgICBjbHMuZm9udCA9IGZvbnQuRm9udChyb290PWNscy5yb290LCBuYW1lPWZvbnRuYW1lLCBleGlzdHM9RmFsc2UpCisKKyAgICBkZWYgdGVzdF9jb25maWd1cmUoc2VsZik6CisgICAgICAgIG9wdGlvbnMgPSBzZWxmLmZvbnQuY29uZmlndXJlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoc2V0KG9wdGlvbnMpLAorICAgICAgICAgICAgeydmYW1pbHknLCAnc2l6ZScsICd3ZWlnaHQnLCAnc2xhbnQnLCAndW5kZXJsaW5lJywgJ292ZXJzdHJpa2UnfSkKKyAgICAgICAgZm9yIGtleSBpbiBvcHRpb25zOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZvbnQuY2dldChrZXkpLCBvcHRpb25zW2tleV0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZm9udFtrZXldLCBvcHRpb25zW2tleV0pCisgICAgICAgIGZvciBrZXkgaW4gJ2ZhbWlseScsICd3ZWlnaHQnLCAnc2xhbnQnOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG9wdGlvbnNba2V5XSwgc3RyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHNlbGYuZm9udC5jZ2V0KGtleSksIHN0cikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzZWxmLmZvbnRba2V5XSwgc3RyKQorICAgICAgICBzaXpldHlwZSA9IGludCBpZiBzZWxmLndhbnRvYmplY3RzIGVsc2Ugc3RyCisgICAgICAgIGZvciBrZXkgaW4gJ3NpemUnLCAndW5kZXJsaW5lJywgJ292ZXJzdHJpa2UnOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG9wdGlvbnNba2V5XSwgc2l6ZXR5cGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc2VsZi5mb250LmNnZXQoa2V5KSwgc2l6ZXR5cGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc2VsZi5mb250W2tleV0sIHNpemV0eXBlKQorCisgICAgZGVmIHRlc3RfYWN0dWFsKHNlbGYpOgorICAgICAgICBvcHRpb25zID0gc2VsZi5mb250LmFjdHVhbCgpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKHNldChvcHRpb25zKSwKKyAgICAgICAgICAgIHsnZmFtaWx5JywgJ3NpemUnLCAnd2VpZ2h0JywgJ3NsYW50JywgJ3VuZGVybGluZScsICdvdmVyc3RyaWtlJ30pCisgICAgICAgIGZvciBrZXkgaW4gb3B0aW9uczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mb250LmFjdHVhbChrZXkpLCBvcHRpb25zW2tleV0pCisgICAgICAgIGZvciBrZXkgaW4gJ2ZhbWlseScsICd3ZWlnaHQnLCAnc2xhbnQnOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG9wdGlvbnNba2V5XSwgc3RyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHNlbGYuZm9udC5hY3R1YWwoa2V5KSwgc3RyKQorICAgICAgICBzaXpldHlwZSA9IGludCBpZiBzZWxmLndhbnRvYmplY3RzIGVsc2Ugc3RyCisgICAgICAgIGZvciBrZXkgaW4gJ3NpemUnLCAndW5kZXJsaW5lJywgJ292ZXJzdHJpa2UnOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG9wdGlvbnNba2V5XSwgc2l6ZXR5cGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc2VsZi5mb250LmFjdHVhbChrZXkpLCBzaXpldHlwZSkKKworICAgIGRlZiB0ZXN0X25hbWUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mb250Lm5hbWUsIGZvbnRuYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihzZWxmLmZvbnQpLCBmb250bmFtZSkKKworICAgIGRlZiB0ZXN0X2VxKHNlbGYpOgorICAgICAgICBmb250MSA9IGZvbnQuRm9udChyb290PXNlbGYucm9vdCwgbmFtZT1mb250bmFtZSwgZXhpc3RzPVRydWUpCisgICAgICAgIGZvbnQyID0gZm9udC5Gb250KHJvb3Q9c2VsZi5yb290LCBuYW1lPWZvbnRuYW1lLCBleGlzdHM9VHJ1ZSkKICAgICAgICAgc2VsZi5hc3NlcnRJc05vdChmb250MSwgZm9udDIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9udDEsIGZvbnQyKQogICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGZvbnQxLCBmb250MS5jb3B5KCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZm9udDEsIDApCiAKKyAgICBkZWYgdGVzdF9tZWFzdXJlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc2VsZi5mb250Lm1lYXN1cmUoJ2FiYycpLCBpbnQpCisKKyAgICBkZWYgdGVzdF9tZXRyaWNzKHNlbGYpOgorICAgICAgICBtZXRyaWNzID0gc2VsZi5mb250Lm1ldHJpY3MoKQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChzZXQobWV0cmljcyksCisgICAgICAgICAgICB7J2FzY2VudCcsICdkZXNjZW50JywgJ2xpbmVzcGFjZScsICdmaXhlZCd9KQorICAgICAgICBmb3Iga2V5IGluIG1ldHJpY3M6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZm9udC5tZXRyaWNzKGtleSksIG1ldHJpY3Nba2V5XSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShtZXRyaWNzW2tleV0sIGludCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzZWxmLmZvbnQubWV0cmljcyhrZXkpLCBpbnQpCisKKyAgICBkZWYgdGVzdF9mYW1pbGllcyhzZWxmKToKKyAgICAgICAgZmFtaWxpZXMgPSBmb250LmZhbWlsaWVzKHNlbGYucm9vdCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGZhbWlsaWVzLCB0dXBsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZhbWlsaWVzKQorICAgICAgICBmb3IgZmFtaWx5IGluIGZhbWlsaWVzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGZhbWlseSwgc3RyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZhbWlseSkKKworICAgIGRlZiB0ZXN0X25hbWVzKHNlbGYpOgorICAgICAgICBuYW1lcyA9IGZvbnQubmFtZXMoc2VsZi5yb290KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UobmFtZXMsIHR1cGxlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobmFtZXMpCisgICAgICAgIGZvciBuYW1lIGluIG5hbWVzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG5hbWUsIHN0cikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShuYW1lKQorICAgICAgICBzZWxmLmFzc2VydEluKGZvbnRuYW1lLCBuYW1lcykKKwogdGVzdHNfZ3VpID0gKEZvbnRUZXN0LCApCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CmRpZmYgLS1naXQgYS9MaWIvdGtpbnRlci90ZXN0L3Rlc3RfdGtpbnRlci90ZXN0X2dlb21ldHJ5X21hbmFnZXJzLnB5IGIvTGliL3RraW50ZXIvdGVzdC90ZXN0X3RraW50ZXIvdGVzdF9nZW9tZXRyeV9tYW5hZ2Vycy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDJiMWJlCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3RraW50ZXIvdGVzdC90ZXN0X3RraW50ZXIvdGVzdF9nZW9tZXRyeV9tYW5hZ2Vycy5weQpAQCAtMCwwICsxLDkwMCBAQAoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgcmUKK2ltcG9ydCB0a2ludGVyCitmcm9tIHRraW50ZXIgaW1wb3J0IFRjbEVycm9yCitmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcmVxdWlyZXMKKworZnJvbSB0a2ludGVyLnRlc3Quc3VwcG9ydCBpbXBvcnQgcGl4ZWxzX2NvbnYsIHRjbF92ZXJzaW9uLCByZXF1aXJlc190Y2wKK2Zyb20gdGtpbnRlci50ZXN0LndpZGdldF90ZXN0cyBpbXBvcnQgQWJzdHJhY3RXaWRnZXRUZXN0CisKK3JlcXVpcmVzKCdndWknKQorCisKK2NsYXNzIFBhY2tUZXN0KEFic3RyYWN0V2lkZ2V0VGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIGNyZWF0ZTIoc2VsZik6CisgICAgICAgIHBhY2sgPSB0a2ludGVyLlRvcGxldmVsKHNlbGYucm9vdCwgbmFtZT0ncGFjaycpCisgICAgICAgIHBhY2sud21fZ2VvbWV0cnkoJzMwMHgyMDArMCswJykKKyAgICAgICAgcGFjay53bV9taW5zaXplKDEsIDEpCisgICAgICAgIGEgPSB0a2ludGVyLkZyYW1lKHBhY2ssIG5hbWU9J2EnLCB3aWR0aD0yMCwgaGVpZ2h0PTQwLCBiZz0ncmVkJykKKyAgICAgICAgYiA9IHRraW50ZXIuRnJhbWUocGFjaywgbmFtZT0nYicsIHdpZHRoPTUwLCBoZWlnaHQ9MzAsIGJnPSdibHVlJykKKyAgICAgICAgYyA9IHRraW50ZXIuRnJhbWUocGFjaywgbmFtZT0nYycsIHdpZHRoPTgwLCBoZWlnaHQ9ODAsIGJnPSdncmVlbicpCisgICAgICAgIGQgPSB0a2ludGVyLkZyYW1lKHBhY2ssIG5hbWU9J2QnLCB3aWR0aD00MCwgaGVpZ2h0PTMwLCBiZz0neWVsbG93JykKKyAgICAgICAgcmV0dXJuIHBhY2ssIGEsIGIsIGMsIGQKKworICAgIGRlZiB0ZXN0X3BhY2tfY29uZmlndXJlX2FmdGVyKHNlbGYpOgorICAgICAgICBwYWNrLCBhLCBiLCBjLCBkID0gc2VsZi5jcmVhdGUyKCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFRjbEVycm9yLCAnd2luZG93ICIlcyIgaXNuXCd0IHBhY2tlZCcgJSBiKToKKyAgICAgICAgICAgIGEucGFja19jb25maWd1cmUoYWZ0ZXI9YikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFRjbEVycm9yLCAnYmFkIHdpbmRvdyBwYXRoIG5hbWUgIi5mb28iJyk6CisgICAgICAgICAgICBhLnBhY2tfY29uZmlndXJlKGFmdGVyPScuZm9vJykKKyAgICAgICAgYS5wYWNrX2NvbmZpZ3VyZShzaWRlPSd0b3AnKQorICAgICAgICBiLnBhY2tfY29uZmlndXJlKHNpZGU9J3RvcCcpCisgICAgICAgIGMucGFja19jb25maWd1cmUoc2lkZT0ndG9wJykKKyAgICAgICAgZC5wYWNrX2NvbmZpZ3VyZShzaWRlPSd0b3AnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhY2sucGFja19zbGF2ZXMoKSwgW2EsIGIsIGMsIGRdKQorICAgICAgICBhLnBhY2tfY29uZmlndXJlKGFmdGVyPWIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFjay5wYWNrX3NsYXZlcygpLCBbYiwgYSwgYywgZF0pCisgICAgICAgIGEucGFja19jb25maWd1cmUoYWZ0ZXI9YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYWNrLnBhY2tfc2xhdmVzKCksIFtiLCBhLCBjLCBkXSkKKworICAgIGRlZiB0ZXN0X3BhY2tfY29uZmlndXJlX2FuY2hvcihzZWxmKToKKyAgICAgICAgcGFjaywgYSwgYiwgYywgZCA9IHNlbGYuY3JlYXRlMigpCisgICAgICAgIGRlZiBjaGVjayhhbmNob3IsIGdlb20pOgorICAgICAgICAgICAgYS5wYWNrX2NvbmZpZ3VyZShzaWRlPSd0b3AnLCBpcGFkeD01LCBwYWR4PTEwLCBpcGFkeT0xNSwgcGFkeT0yMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwYW5kPVRydWUsIGFuY2hvcj1hbmNob3IpCisgICAgICAgICAgICBzZWxmLnJvb3QudXBkYXRlKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS53aW5mb19nZW9tZXRyeSgpLCBnZW9tKQorICAgICAgICBjaGVjaygnbicsICczMHg3MCsxMzUrMjAnKQorICAgICAgICBjaGVjaygnbmUnLCAnMzB4NzArMjYwKzIwJykKKyAgICAgICAgY2hlY2soJ2UnLCAnMzB4NzArMjYwKzY1JykKKyAgICAgICAgY2hlY2soJ3NlJywgJzMweDcwKzI2MCsxMTAnKQorICAgICAgICBjaGVjaygncycsICczMHg3MCsxMzUrMTEwJykKKyAgICAgICAgY2hlY2soJ3N3JywgJzMweDcwKzEwKzExMCcpCisgICAgICAgIGNoZWNrKCd3JywgJzMweDcwKzEwKzY1JykKKyAgICAgICAgY2hlY2soJ253JywgJzMweDcwKzEwKzIwJykKKyAgICAgICAgY2hlY2soJ2NlbnRlcicsICczMHg3MCsxMzUrNjUnKQorCisgICAgZGVmIHRlc3RfcGFja19jb25maWd1cmVfYmVmb3JlKHNlbGYpOgorICAgICAgICBwYWNrLCBhLCBiLCBjLCBkID0gc2VsZi5jcmVhdGUyKCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFRjbEVycm9yLCAnd2luZG93ICIlcyIgaXNuXCd0IHBhY2tlZCcgJSBiKToKKyAgICAgICAgICAgIGEucGFja19jb25maWd1cmUoYmVmb3JlPWIpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUY2xFcnJvciwgJ2JhZCB3aW5kb3cgcGF0aCBuYW1lICIuZm9vIicpOgorICAgICAgICAgICAgYS5wYWNrX2NvbmZpZ3VyZShiZWZvcmU9Jy5mb28nKQorICAgICAgICBhLnBhY2tfY29uZmlndXJlKHNpZGU9J3RvcCcpCisgICAgICAgIGIucGFja19jb25maWd1cmUoc2lkZT0ndG9wJykKKyAgICAgICAgYy5wYWNrX2NvbmZpZ3VyZShzaWRlPSd0b3AnKQorICAgICAgICBkLnBhY2tfY29uZmlndXJlKHNpZGU9J3RvcCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFjay5wYWNrX3NsYXZlcygpLCBbYSwgYiwgYywgZF0pCisgICAgICAgIGEucGFja19jb25maWd1cmUoYmVmb3JlPWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFjay5wYWNrX3NsYXZlcygpLCBbYiwgYywgYSwgZF0pCisgICAgICAgIGEucGFja19jb25maWd1cmUoYmVmb3JlPWEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFjay5wYWNrX3NsYXZlcygpLCBbYiwgYywgYSwgZF0pCisKKyAgICBkZWYgdGVzdF9wYWNrX2NvbmZpZ3VyZV9leHBhbmQoc2VsZik6CisgICAgICAgIHBhY2ssIGEsIGIsIGMsIGQgPSBzZWxmLmNyZWF0ZTIoKQorICAgICAgICBkZWYgY2hlY2soKmdlb21zKToKKyAgICAgICAgICAgIHNlbGYucm9vdC51cGRhdGUoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLndpbmZvX2dlb21ldHJ5KCksIGdlb21zWzBdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLndpbmZvX2dlb21ldHJ5KCksIGdlb21zWzFdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLndpbmZvX2dlb21ldHJ5KCksIGdlb21zWzJdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLndpbmZvX2dlb21ldHJ5KCksIGdlb21zWzNdKQorICAgICAgICBhLnBhY2tfY29uZmlndXJlKHNpZGU9J2xlZnQnKQorICAgICAgICBiLnBhY2tfY29uZmlndXJlKHNpZGU9J3RvcCcpCisgICAgICAgIGMucGFja19jb25maWd1cmUoc2lkZT0ncmlnaHQnKQorICAgICAgICBkLnBhY2tfY29uZmlndXJlKHNpZGU9J2JvdHRvbScpCisgICAgICAgIGNoZWNrKCcyMHg0MCswKzgwJywgJzUweDMwKzEzNSswJywgJzgweDgwKzIyMCs3NScsICc0MHgzMCsxMDArMTcwJykKKyAgICAgICAgYS5wYWNrX2NvbmZpZ3VyZShzaWRlPSdsZWZ0JywgZXhwYW5kPSd5ZXMnKQorICAgICAgICBiLnBhY2tfY29uZmlndXJlKHNpZGU9J3RvcCcsIGV4cGFuZD0nb24nKQorICAgICAgICBjLnBhY2tfY29uZmlndXJlKHNpZGU9J3JpZ2h0JywgZXhwYW5kPVRydWUpCisgICAgICAgIGQucGFja19jb25maWd1cmUoc2lkZT0nYm90dG9tJywgZXhwYW5kPTEpCisgICAgICAgIGNoZWNrKCcyMHg0MCs0MCs4MCcsICc1MHgzMCsxNzUrMzUnLCAnODB4ODArMTgwKzExMCcsICc0MHgzMCsxMDArMTM1JykKKyAgICAgICAgYS5wYWNrX2NvbmZpZ3VyZShzaWRlPSdsZWZ0JywgZXhwYW5kPSd5ZXMnLCBmaWxsPSdib3RoJykKKyAgICAgICAgYi5wYWNrX2NvbmZpZ3VyZShzaWRlPSd0b3AnLCBleHBhbmQ9J29uJywgZmlsbD0nYm90aCcpCisgICAgICAgIGMucGFja19jb25maWd1cmUoc2lkZT0ncmlnaHQnLCBleHBhbmQ9VHJ1ZSwgZmlsbD0nYm90aCcpCisgICAgICAgIGQucGFja19jb25maWd1cmUoc2lkZT0nYm90dG9tJywgZXhwYW5kPTEsIGZpbGw9J2JvdGgnKQorICAgICAgICBjaGVjaygnMTAweDIwMCswKzAnLCAnMjAweDEwMCsxMDArMCcsICcxNjB4MTAwKzE0MCsxMDAnLCAnNDB4MTAwKzEwMCsxMDAnKQorCisgICAgZGVmIHRlc3RfcGFja19jb25maWd1cmVfaW4oc2VsZik6CisgICAgICAgIHBhY2ssIGEsIGIsIGMsIGQgPSBzZWxmLmNyZWF0ZTIoKQorICAgICAgICBhLnBhY2tfY29uZmlndXJlKHNpZGU9J3RvcCcpCisgICAgICAgIGIucGFja19jb25maWd1cmUoc2lkZT0ndG9wJykKKyAgICAgICAgYy5wYWNrX2NvbmZpZ3VyZShzaWRlPSd0b3AnKQorICAgICAgICBkLnBhY2tfY29uZmlndXJlKHNpZGU9J3RvcCcpCisgICAgICAgIGEucGFja19jb25maWd1cmUoaW5fPXBhY2spCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFjay5wYWNrX3NsYXZlcygpLCBbYiwgYywgZCwgYV0pCisgICAgICAgIGEucGFja19jb25maWd1cmUoaW5fPWMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFjay5wYWNrX3NsYXZlcygpLCBbYiwgYywgZF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5wYWNrX3NsYXZlcygpLCBbYV0pCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUY2xFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjYW5cJ3QgcGFjayAlcyBpbnNpZGUgaXRzZWxmJyAlIChhLCkpOgorICAgICAgICAgICAgYS5wYWNrX2NvbmZpZ3VyZShpbl89YSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFRjbEVycm9yLCAnYmFkIHdpbmRvdyBwYXRoIG5hbWUgIi5mb28iJyk6CisgICAgICAgICAgICBhLnBhY2tfY29uZmlndXJlKGluXz0nLmZvbycpCisKKyAgICBkZWYgdGVzdF9wYWNrX2NvbmZpZ3VyZV9wYWR4X2lwYWR4X2ZpbGwoc2VsZik6CisgICAgICAgIHBhY2ssIGEsIGIsIGMsIGQgPSBzZWxmLmNyZWF0ZTIoKQorICAgICAgICBkZWYgY2hlY2soZ2VvbTEsIGdlb20yLCAqKmt3YXJncyk6CisgICAgICAgICAgICBhLnBhY2tfZm9yZ2V0KCkKKyAgICAgICAgICAgIGIucGFja19mb3JnZXQoKQorICAgICAgICAgICAgYS5wYWNrX2NvbmZpZ3VyZSgqKmt3YXJncykKKyAgICAgICAgICAgIGIucGFja19jb25maWd1cmUoZXhwYW5kPVRydWUsIGZpbGw9J2JvdGgnKQorICAgICAgICAgICAgc2VsZi5yb290LnVwZGF0ZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEud2luZm9fZ2VvbWV0cnkoKSwgZ2VvbTEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIud2luZm9fZ2VvbWV0cnkoKSwgZ2VvbTIpCisgICAgICAgIGNoZWNrKCcyMHg0MCsyNjArODAnLCAnMjQweDIwMCswKzAnLCBzaWRlPSdyaWdodCcsIHBhZHg9MjApCisgICAgICAgIGNoZWNrKCcyMHg0MCsyNTArODAnLCAnMjQweDIwMCswKzAnLCBzaWRlPSdyaWdodCcsIHBhZHg9KDEwLCAzMCkpCisgICAgICAgIGNoZWNrKCc2MHg0MCsyNDArODAnLCAnMjQweDIwMCswKzAnLCBzaWRlPSdyaWdodCcsIGlwYWR4PTIwKQorICAgICAgICBjaGVjaygnMzB4NDArMjYwKzgwJywgJzI1MHgyMDArMCswJywgc2lkZT0ncmlnaHQnLCBpcGFkeD01LCBwYWR4PTEwKQorICAgICAgICBjaGVjaygnMjB4NDArMjYwKzgwJywgJzI0MHgyMDArMCswJywgc2lkZT0ncmlnaHQnLCBwYWR4PTIwLCBmaWxsPSd4JykKKyAgICAgICAgY2hlY2soJzIweDQwKzI0OSs4MCcsICcyNDB4MjAwKzArMCcsCisgICAgICAgICAgICAgIHNpZGU9J3JpZ2h0JywgcGFkeD0oOSwgMzEpLCBmaWxsPSd4JykKKyAgICAgICAgY2hlY2soJzYweDQwKzI0MCs4MCcsICcyNDB4MjAwKzArMCcsIHNpZGU9J3JpZ2h0JywgaXBhZHg9MjAsIGZpbGw9J3gnKQorICAgICAgICBjaGVjaygnMzB4NDArMjYwKzgwJywgJzI1MHgyMDArMCswJywKKyAgICAgICAgICAgICAgc2lkZT0ncmlnaHQnLCBpcGFkeD01LCBwYWR4PTEwLCBmaWxsPSd4JykKKyAgICAgICAgY2hlY2soJzMweDQwKzI1NSs4MCcsICcyNTB4MjAwKzArMCcsCisgICAgICAgICAgICAgIHNpZGU9J3JpZ2h0JywgaXBhZHg9NSwgcGFkeD0oNSwgMTUpLCBmaWxsPSd4JykKKyAgICAgICAgY2hlY2soJzIweDQwKzE0MCswJywgJzMwMHgxNjArMCs0MCcsIHNpZGU9J3RvcCcsIHBhZHg9MjApCisgICAgICAgIGNoZWNrKCcyMHg0MCsxMjArMCcsICczMDB4MTYwKzArNDAnLCBzaWRlPSd0b3AnLCBwYWR4PSgwLCA0MCkpCisgICAgICAgIGNoZWNrKCc2MHg0MCsxMjArMCcsICczMDB4MTYwKzArNDAnLCBzaWRlPSd0b3AnLCBpcGFkeD0yMCkKKyAgICAgICAgY2hlY2soJzMweDQwKzEzNSswJywgJzMwMHgxNjArMCs0MCcsIHNpZGU9J3RvcCcsIGlwYWR4PTUsIHBhZHg9MTApCisgICAgICAgIGNoZWNrKCczMHg0MCsxMzArMCcsICczMDB4MTYwKzArNDAnLCBzaWRlPSd0b3AnLCBpcGFkeD01LCBwYWR4PSg1LCAxNSkpCisgICAgICAgIGNoZWNrKCcyNjB4NDArMjArMCcsICczMDB4MTYwKzArNDAnLCBzaWRlPSd0b3AnLCBwYWR4PTIwLCBmaWxsPSd4JykKKyAgICAgICAgY2hlY2soJzI2MHg0MCsyNSswJywgJzMwMHgxNjArMCs0MCcsCisgICAgICAgICAgICAgIHNpZGU9J3RvcCcsIHBhZHg9KDI1LCAxNSksIGZpbGw9J3gnKQorICAgICAgICBjaGVjaygnMzAweDQwKzArMCcsICczMDB4MTYwKzArNDAnLCBzaWRlPSd0b3AnLCBpcGFkeD0yMCwgZmlsbD0neCcpCisgICAgICAgIGNoZWNrKCcyODB4NDArMTArMCcsICczMDB4MTYwKzArNDAnLAorICAgICAgICAgICAgICBzaWRlPSd0b3AnLCBpcGFkeD01LCBwYWR4PTEwLCBmaWxsPSd4JykKKyAgICAgICAgY2hlY2soJzI4MHg0MCs1KzAnLCAnMzAweDE2MCswKzQwJywKKyAgICAgICAgICAgICAgc2lkZT0ndG9wJywgaXBhZHg9NSwgcGFkeD0oNSwgMTUpLCBmaWxsPSd4JykKKyAgICAgICAgYS5wYWNrX2NvbmZpZ3VyZShwYWR4PScxYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5wYWNrX2luZm8oKVsncGFkeCddLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3N0cihwYWNrLndpbmZvX3BpeGVscygnMWMnKSkpCisgICAgICAgIGEucGFja19jb25maWd1cmUoaXBhZHg9JzFjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLnBhY2tfaW5mbygpWydpcGFkeCddLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3N0cihwYWNrLndpbmZvX3BpeGVscygnMWMnKSkpCisKKyAgICBkZWYgdGVzdF9wYWNrX2NvbmZpZ3VyZV9wYWR5X2lwYWR5X2ZpbGwoc2VsZik6CisgICAgICAgIHBhY2ssIGEsIGIsIGMsIGQgPSBzZWxmLmNyZWF0ZTIoKQorICAgICAgICBkZWYgY2hlY2soZ2VvbTEsIGdlb20yLCAqKmt3YXJncyk6CisgICAgICAgICAgICBhLnBhY2tfZm9yZ2V0KCkKKyAgICAgICAgICAgIGIucGFja19mb3JnZXQoKQorICAgICAgICAgICAgYS5wYWNrX2NvbmZpZ3VyZSgqKmt3YXJncykKKyAgICAgICAgICAgIGIucGFja19jb25maWd1cmUoZXhwYW5kPVRydWUsIGZpbGw9J2JvdGgnKQorICAgICAgICAgICAgc2VsZi5yb290LnVwZGF0ZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEud2luZm9fZ2VvbWV0cnkoKSwgZ2VvbTEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIud2luZm9fZ2VvbWV0cnkoKSwgZ2VvbTIpCisgICAgICAgIGNoZWNrKCcyMHg0MCsyODArODAnLCAnMjgweDIwMCswKzAnLCBzaWRlPSdyaWdodCcsIHBhZHk9MjApCisgICAgICAgIGNoZWNrKCcyMHg0MCsyODArNzAnLCAnMjgweDIwMCswKzAnLCBzaWRlPSdyaWdodCcsIHBhZHk9KDEwLCAzMCkpCisgICAgICAgIGNoZWNrKCcyMHg4MCsyODArNjAnLCAnMjgweDIwMCswKzAnLCBzaWRlPSdyaWdodCcsIGlwYWR5PTIwKQorICAgICAgICBjaGVjaygnMjB4NTArMjgwKzc1JywgJzI4MHgyMDArMCswJywgc2lkZT0ncmlnaHQnLCBpcGFkeT01LCBwYWR5PTEwKQorICAgICAgICBjaGVjaygnMjB4NDArMjgwKzgwJywgJzI4MHgyMDArMCswJywgc2lkZT0ncmlnaHQnLCBwYWR5PTIwLCBmaWxsPSd4JykKKyAgICAgICAgY2hlY2soJzIweDQwKzI4MCs2OScsICcyODB4MjAwKzArMCcsCisgICAgICAgICAgICAgIHNpZGU9J3JpZ2h0JywgcGFkeT0oOSwgMzEpLCBmaWxsPSd4JykKKyAgICAgICAgY2hlY2soJzIweDgwKzI4MCs2MCcsICcyODB4MjAwKzArMCcsIHNpZGU9J3JpZ2h0JywgaXBhZHk9MjAsIGZpbGw9J3gnKQorICAgICAgICBjaGVjaygnMjB4NTArMjgwKzc1JywgJzI4MHgyMDArMCswJywKKyAgICAgICAgICAgICAgc2lkZT0ncmlnaHQnLCBpcGFkeT01LCBwYWR5PTEwLCBmaWxsPSd4JykKKyAgICAgICAgY2hlY2soJzIweDUwKzI4MCs3MCcsICcyODB4MjAwKzArMCcsCisgICAgICAgICAgICAgIHNpZGU9J3JpZ2h0JywgaXBhZHk9NSwgcGFkeT0oNSwgMTUpLCBmaWxsPSd4JykKKyAgICAgICAgY2hlY2soJzIweDQwKzE0MCsyMCcsICczMDB4MTIwKzArODAnLCBzaWRlPSd0b3AnLCBwYWR5PTIwKQorICAgICAgICBjaGVjaygnMjB4NDArMTQwKzAnLCAnMzAweDEyMCswKzgwJywgc2lkZT0ndG9wJywgcGFkeT0oMCwgNDApKQorICAgICAgICBjaGVjaygnMjB4ODArMTQwKzAnLCAnMzAweDEyMCswKzgwJywgc2lkZT0ndG9wJywgaXBhZHk9MjApCisgICAgICAgIGNoZWNrKCcyMHg1MCsxNDArMTAnLCAnMzAweDEzMCswKzcwJywgc2lkZT0ndG9wJywgaXBhZHk9NSwgcGFkeT0xMCkKKyAgICAgICAgY2hlY2soJzIweDUwKzE0MCs1JywgJzMwMHgxMzArMCs3MCcsIHNpZGU9J3RvcCcsIGlwYWR5PTUsIHBhZHk9KDUsIDE1KSkKKyAgICAgICAgY2hlY2soJzMwMHg0MCswKzIwJywgJzMwMHgxMjArMCs4MCcsIHNpZGU9J3RvcCcsIHBhZHk9MjAsIGZpbGw9J3gnKQorICAgICAgICBjaGVjaygnMzAweDQwKzArMjUnLCAnMzAweDEyMCswKzgwJywKKyAgICAgICAgICAgICAgc2lkZT0ndG9wJywgcGFkeT0oMjUsIDE1KSwgZmlsbD0neCcpCisgICAgICAgIGNoZWNrKCczMDB4ODArMCswJywgJzMwMHgxMjArMCs4MCcsIHNpZGU9J3RvcCcsIGlwYWR5PTIwLCBmaWxsPSd4JykKKyAgICAgICAgY2hlY2soJzMwMHg1MCswKzEwJywgJzMwMHgxMzArMCs3MCcsCisgICAgICAgICAgICAgIHNpZGU9J3RvcCcsIGlwYWR5PTUsIHBhZHk9MTAsIGZpbGw9J3gnKQorICAgICAgICBjaGVjaygnMzAweDUwKzArNScsICczMDB4MTMwKzArNzAnLAorICAgICAgICAgICAgICBzaWRlPSd0b3AnLCBpcGFkeT01LCBwYWR5PSg1LCAxNSksIGZpbGw9J3gnKQorICAgICAgICBhLnBhY2tfY29uZmlndXJlKHBhZHk9JzFjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLnBhY2tfaW5mbygpWydwYWR5J10sCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fc3RyKHBhY2sud2luZm9fcGl4ZWxzKCcxYycpKSkKKyAgICAgICAgYS5wYWNrX2NvbmZpZ3VyZShpcGFkeT0nMWMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEucGFja19pbmZvKClbJ2lwYWR5J10sCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fc3RyKHBhY2sud2luZm9fcGl4ZWxzKCcxYycpKSkKKworICAgIGRlZiB0ZXN0X3BhY2tfY29uZmlndXJlX3NpZGUoc2VsZik6CisgICAgICAgIHBhY2ssIGEsIGIsIGMsIGQgPSBzZWxmLmNyZWF0ZTIoKQorICAgICAgICBkZWYgY2hlY2soc2lkZSwgZ2VvbTEsIGdlb20yKToKKyAgICAgICAgICAgIGEucGFja19jb25maWd1cmUoc2lkZT1zaWRlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLnBhY2tfaW5mbygpWydzaWRlJ10sIHNpZGUpCisgICAgICAgICAgICBiLnBhY2tfY29uZmlndXJlKGV4cGFuZD1UcnVlLCBmaWxsPSdib3RoJykKKyAgICAgICAgICAgIHNlbGYucm9vdC51cGRhdGUoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLndpbmZvX2dlb21ldHJ5KCksIGdlb20xKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLndpbmZvX2dlb21ldHJ5KCksIGdlb20yKQorICAgICAgICBjaGVjaygndG9wJywgJzIweDQwKzE0MCswJywgJzMwMHgxNjArMCs0MCcpCisgICAgICAgIGNoZWNrKCdib3R0b20nLCAnMjB4NDArMTQwKzE2MCcsICczMDB4MTYwKzArMCcpCisgICAgICAgIGNoZWNrKCdsZWZ0JywgJzIweDQwKzArODAnLCAnMjgweDIwMCsyMCswJykKKyAgICAgICAgY2hlY2soJ3JpZ2h0JywgJzIweDQwKzI4MCs4MCcsICcyODB4MjAwKzArMCcpCisKKyAgICBkZWYgdGVzdF9wYWNrX2ZvcmdldChzZWxmKToKKyAgICAgICAgcGFjaywgYSwgYiwgYywgZCA9IHNlbGYuY3JlYXRlMigpCisgICAgICAgIGEucGFja19jb25maWd1cmUoKQorICAgICAgICBiLnBhY2tfY29uZmlndXJlKCkKKyAgICAgICAgYy5wYWNrX2NvbmZpZ3VyZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFjay5wYWNrX3NsYXZlcygpLCBbYSwgYiwgY10pCisgICAgICAgIGIucGFja19mb3JnZXQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhY2sucGFja19zbGF2ZXMoKSwgW2EsIGNdKQorICAgICAgICBiLnBhY2tfZm9yZ2V0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYWNrLnBhY2tfc2xhdmVzKCksIFthLCBjXSkKKyAgICAgICAgZC5wYWNrX2ZvcmdldCgpCisKKyAgICBkZWYgdGVzdF9wYWNrX2luZm8oc2VsZik6CisgICAgICAgIHBhY2ssIGEsIGIsIGMsIGQgPSBzZWxmLmNyZWF0ZTIoKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVGNsRXJyb3IsICd3aW5kb3cgIiVzIiBpc25cJ3QgcGFja2VkJyAlIGEpOgorICAgICAgICAgICAgYS5wYWNrX2luZm8oKQorICAgICAgICBhLnBhY2tfY29uZmlndXJlKCkKKyAgICAgICAgYi5wYWNrX2NvbmZpZ3VyZShzaWRlPSdyaWdodCcsIGluXz1hLCBhbmNob3I9J3MnLCBleHBhbmQ9VHJ1ZSwgZmlsbD0neCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgaXBhZHg9NSwgcGFkeD0xMCwgaXBhZHk9MiwgcGFkeT0oNSwgMTUpKQorICAgICAgICBpbmZvID0gYS5wYWNrX2luZm8oKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoaW5mbywgZGljdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmZvWydhbmNob3InXSwgJ2NlbnRlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mb1snZXhwYW5kJ10sIHNlbGYuX3N0cigwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmZvWydmaWxsJ10sICdub25lJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmZvWydpbiddLCBwYWNrKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm9bJ2lwYWR4J10sIHNlbGYuX3N0cigwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmZvWydpcGFkeSddLCBzZWxmLl9zdHIoMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mb1sncGFkeCddLCBzZWxmLl9zdHIoMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mb1sncGFkeSddLCBzZWxmLl9zdHIoMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mb1snc2lkZSddLCAndG9wJykKKyAgICAgICAgaW5mbyA9IGIucGFja19pbmZvKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGluZm8sIGRpY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mb1snYW5jaG9yJ10sICdzJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmZvWydleHBhbmQnXSwgc2VsZi5fc3RyKDEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm9bJ2ZpbGwnXSwgJ3gnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm9bJ2luJ10sIGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mb1snaXBhZHgnXSwgc2VsZi5fc3RyKDUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm9bJ2lwYWR5J10sIHNlbGYuX3N0cigyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmZvWydwYWR4J10sIHNlbGYuX3N0cigxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mb1sncGFkeSddLCBzZWxmLl9zdHIoKDUsIDE1KSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mb1snc2lkZSddLCAncmlnaHQnKQorCisgICAgZGVmIHRlc3RfcGFja19wcm9wYWdhdGUoc2VsZik6CisgICAgICAgIHBhY2ssIGEsIGIsIGMsIGQgPSBzZWxmLmNyZWF0ZTIoKQorICAgICAgICBwYWNrLmNvbmZpZ3VyZSh3aWR0aD0zMDAsIGhlaWdodD0yMDApCisgICAgICAgIGEucGFja19jb25maWd1cmUoKQorICAgICAgICBwYWNrLnBhY2tfcHJvcGFnYXRlKEZhbHNlKQorICAgICAgICBzZWxmLnJvb3QudXBkYXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYWNrLndpbmZvX3JlcXdpZHRoKCksIDMwMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYWNrLndpbmZvX3JlcWhlaWdodCgpLCAyMDApCisgICAgICAgIHBhY2sucGFja19wcm9wYWdhdGUoVHJ1ZSkKKyAgICAgICAgc2VsZi5yb290LnVwZGF0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFjay53aW5mb19yZXF3aWR0aCgpLCAyMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYWNrLndpbmZvX3JlcWhlaWdodCgpLCA0MCkKKworICAgIGRlZiB0ZXN0X3BhY2tfc2xhdmVzKHNlbGYpOgorICAgICAgICBwYWNrLCBhLCBiLCBjLCBkID0gc2VsZi5jcmVhdGUyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYWNrLnBhY2tfc2xhdmVzKCksIFtdKQorICAgICAgICBhLnBhY2tfY29uZmlndXJlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYWNrLnBhY2tfc2xhdmVzKCksIFthXSkKKyAgICAgICAgYi5wYWNrX2NvbmZpZ3VyZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFjay5wYWNrX3NsYXZlcygpLCBbYSwgYl0pCisKKworY2xhc3MgUGxhY2VUZXN0KEFic3RyYWN0V2lkZ2V0VGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIGNyZWF0ZTIoc2VsZik6CisgICAgICAgIHQgPSB0a2ludGVyLlRvcGxldmVsKHNlbGYucm9vdCwgd2lkdGg9MzAwLCBoZWlnaHQ9MjAwLCBiZD0wKQorICAgICAgICB0LndtX2dlb21ldHJ5KCczMDB4MjAwKzArMCcpCisgICAgICAgIGYgPSB0a2ludGVyLkZyYW1lKHQsIHdpZHRoPTE1NCwgaGVpZ2h0PTg0LCBiZD0yLCByZWxpZWY9J3JhaXNlZCcpCisgICAgICAgIGYucGxhY2VfY29uZmlndXJlKHg9NDgsIHk9MzgpCisgICAgICAgIGYyID0gdGtpbnRlci5GcmFtZSh0LCB3aWR0aD0zMCwgaGVpZ2h0PTYwLCBiZD0yLCByZWxpZWY9J3JhaXNlZCcpCisgICAgICAgIHNlbGYucm9vdC51cGRhdGUoKQorICAgICAgICByZXR1cm4gdCwgZiwgZjIKKworICAgIGRlZiB0ZXN0X3BsYWNlX2NvbmZpZ3VyZV9pbihzZWxmKToKKyAgICAgICAgdCwgZiwgZjIgPSBzZWxmLmNyZWF0ZTIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYyLndpbmZvX21hbmFnZXIoKSwgJycpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUY2xFcnJvciwgImNhbid0IHBsYWNlICVzIHJlbGF0aXZlIHRvICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpdHNlbGYiICUgcmUuZXNjYXBlKHN0cihmMikpKToKKyAgICAgICAgICAgIGYyLnBsYWNlX2NvbmZpZ3VyZShpbl89ZjIpCisgICAgICAgIGlmIHRjbF92ZXJzaW9uID49ICg4LCA1KToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZjIud2luZm9fbWFuYWdlcigpLCAnJykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFRjbEVycm9yLCAnYmFkIHdpbmRvdyBwYXRoIG5hbWUnKToKKyAgICAgICAgICAgIGYyLnBsYWNlX2NvbmZpZ3VyZShpbl89J3NwYW0nKQorICAgICAgICBmMi5wbGFjZV9jb25maWd1cmUoaW5fPWYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZjIud2luZm9fbWFuYWdlcigpLCAncGxhY2UnKQorCisgICAgZGVmIHRlc3RfcGxhY2VfY29uZmlndXJlX3goc2VsZik6CisgICAgICAgIHQsIGYsIGYyID0gc2VsZi5jcmVhdGUyKCkKKyAgICAgICAgZjIucGxhY2VfY29uZmlndXJlKGluXz1mKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYyLnBsYWNlX2luZm8oKVsneCddLCAnMCcpCisgICAgICAgIHNlbGYucm9vdC51cGRhdGUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYyLndpbmZvX3goKSwgNTApCisgICAgICAgIGYyLnBsYWNlX2NvbmZpZ3VyZSh4PTEwMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmMi5wbGFjZV9pbmZvKClbJ3gnXSwgJzEwMCcpCisgICAgICAgIHNlbGYucm9vdC51cGRhdGUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYyLndpbmZvX3goKSwgMTUwKQorICAgICAgICBmMi5wbGFjZV9jb25maWd1cmUoeD0tMTAsIHJlbHg9MSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmMi5wbGFjZV9pbmZvKClbJ3gnXSwgJy0xMCcpCisgICAgICAgIHNlbGYucm9vdC51cGRhdGUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYyLndpbmZvX3goKSwgMTkwKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVGNsRXJyb3IsICdiYWQgc2NyZWVuIGRpc3RhbmNlICJzcGFtIicpOgorICAgICAgICAgICAgZjIucGxhY2VfY29uZmlndXJlKGluXz1mLCB4PSdzcGFtJykKKworICAgIGRlZiB0ZXN0X3BsYWNlX2NvbmZpZ3VyZV95KHNlbGYpOgorICAgICAgICB0LCBmLCBmMiA9IHNlbGYuY3JlYXRlMigpCisgICAgICAgIGYyLnBsYWNlX2NvbmZpZ3VyZShpbl89ZikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmMi5wbGFjZV9pbmZvKClbJ3knXSwgJzAnKQorICAgICAgICBzZWxmLnJvb3QudXBkYXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmMi53aW5mb195KCksIDQwKQorICAgICAgICBmMi5wbGFjZV9jb25maWd1cmUoeT01MCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmMi5wbGFjZV9pbmZvKClbJ3knXSwgJzUwJykKKyAgICAgICAgc2VsZi5yb290LnVwZGF0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZjIud2luZm9feSgpLCA5MCkKKyAgICAgICAgZjIucGxhY2VfY29uZmlndXJlKHk9LTEwLCByZWx5PTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZjIucGxhY2VfaW5mbygpWyd5J10sICctMTAnKQorICAgICAgICBzZWxmLnJvb3QudXBkYXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmMi53aW5mb195KCksIDExMCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFRjbEVycm9yLCAnYmFkIHNjcmVlbiBkaXN0YW5jZSAic3BhbSInKToKKyAgICAgICAgICAgIGYyLnBsYWNlX2NvbmZpZ3VyZShpbl89ZiwgeT0nc3BhbScpCisKKyAgICBkZWYgdGVzdF9wbGFjZV9jb25maWd1cmVfcmVseChzZWxmKToKKyAgICAgICAgdCwgZiwgZjIgPSBzZWxmLmNyZWF0ZTIoKQorICAgICAgICBmMi5wbGFjZV9jb25maWd1cmUoaW5fPWYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZjIucGxhY2VfaW5mbygpWydyZWx4J10sICcwJykKKyAgICAgICAgc2VsZi5yb290LnVwZGF0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZjIud2luZm9feCgpLCA1MCkKKyAgICAgICAgZjIucGxhY2VfY29uZmlndXJlKHJlbHg9MC41KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYyLnBsYWNlX2luZm8oKVsncmVseCddLCAnMC41JykKKyAgICAgICAgc2VsZi5yb290LnVwZGF0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZjIud2luZm9feCgpLCAxMjUpCisgICAgICAgIGYyLnBsYWNlX2NvbmZpZ3VyZShyZWx4PTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZjIucGxhY2VfaW5mbygpWydyZWx4J10sICcxJykKKyAgICAgICAgc2VsZi5yb290LnVwZGF0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZjIud2luZm9feCgpLCAyMDApCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUY2xFcnJvciwgJ2V4cGVjdGVkIGZsb2F0aW5nLXBvaW50IG51bWJlciAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYnV0IGdvdCAic3BhbSInKToKKyAgICAgICAgICAgIGYyLnBsYWNlX2NvbmZpZ3VyZShpbl89ZiwgcmVseD0nc3BhbScpCisKKyAgICBkZWYgdGVzdF9wbGFjZV9jb25maWd1cmVfcmVseShzZWxmKToKKyAgICAgICAgdCwgZiwgZjIgPSBzZWxmLmNyZWF0ZTIoKQorICAgICAgICBmMi5wbGFjZV9jb25maWd1cmUoaW5fPWYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZjIucGxhY2VfaW5mbygpWydyZWx5J10sICcwJykKKyAgICAgICAgc2VsZi5yb290LnVwZGF0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZjIud2luZm9feSgpLCA0MCkKKyAgICAgICAgZjIucGxhY2VfY29uZmlndXJlKHJlbHk9MC41KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYyLnBsYWNlX2luZm8oKVsncmVseSddLCAnMC41JykKKyAgICAgICAgc2VsZi5yb290LnVwZGF0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZjIud2luZm9feSgpLCA4MCkKKyAgICAgICAgZjIucGxhY2VfY29uZmlndXJlKHJlbHk9MSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmMi5wbGFjZV9pbmZvKClbJ3JlbHknXSwgJzEnKQorICAgICAgICBzZWxmLnJvb3QudXBkYXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmMi53aW5mb195KCksIDEyMCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFRjbEVycm9yLCAnZXhwZWN0ZWQgZmxvYXRpbmctcG9pbnQgbnVtYmVyICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdidXQgZ290ICJzcGFtIicpOgorICAgICAgICAgICAgZjIucGxhY2VfY29uZmlndXJlKGluXz1mLCByZWx5PSdzcGFtJykKKworICAgIGRlZiB0ZXN0X3BsYWNlX2NvbmZpZ3VyZV9hbmNob3Ioc2VsZik6CisgICAgICAgIGYgPSB0a2ludGVyLkZyYW1lKHNlbGYucm9vdCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFRjbEVycm9yLCAnYmFkIGFuY2hvciAiaiInKToKKyAgICAgICAgICAgIGYucGxhY2VfY29uZmlndXJlKGFuY2hvcj0naicpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUY2xFcnJvciwgJ2FtYmlndW91cyBhbmNob3IgIiInKToKKyAgICAgICAgICAgIGYucGxhY2VfY29uZmlndXJlKGFuY2hvcj0nJykKKyAgICAgICAgZm9yIHZhbHVlIGluICduJywgJ25lJywgJ2UnLCAnc2UnLCAncycsICdzdycsICd3JywgJ253JywgJ2NlbnRlcic6CisgICAgICAgICAgICBmLnBsYWNlX2NvbmZpZ3VyZShhbmNob3I9dmFsdWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucGxhY2VfaW5mbygpWydhbmNob3InXSwgdmFsdWUpCisKKyAgICBkZWYgdGVzdF9wbGFjZV9jb25maWd1cmVfd2lkdGgoc2VsZik6CisgICAgICAgIHQsIGYsIGYyID0gc2VsZi5jcmVhdGUyKCkKKyAgICAgICAgZjIucGxhY2VfY29uZmlndXJlKGluXz1mLCB3aWR0aD0xMjApCisgICAgICAgIHNlbGYucm9vdC51cGRhdGUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYyLndpbmZvX3dpZHRoKCksIDEyMCkKKyAgICAgICAgZjIucGxhY2VfY29uZmlndXJlKHdpZHRoPScnKQorICAgICAgICBzZWxmLnJvb3QudXBkYXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmMi53aW5mb193aWR0aCgpLCAzMCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFRjbEVycm9yLCAnYmFkIHNjcmVlbiBkaXN0YW5jZSAiYWJjZCInKToKKyAgICAgICAgICAgIGYyLnBsYWNlX2NvbmZpZ3VyZSh3aWR0aD0nYWJjZCcpCisKKyAgICBkZWYgdGVzdF9wbGFjZV9jb25maWd1cmVfaGVpZ2h0KHNlbGYpOgorICAgICAgICB0LCBmLCBmMiA9IHNlbGYuY3JlYXRlMigpCisgICAgICAgIGYyLnBsYWNlX2NvbmZpZ3VyZShpbl89ZiwgaGVpZ2h0PTEyMCkKKyAgICAgICAgc2VsZi5yb290LnVwZGF0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZjIud2luZm9faGVpZ2h0KCksIDEyMCkKKyAgICAgICAgZjIucGxhY2VfY29uZmlndXJlKGhlaWdodD0nJykKKyAgICAgICAgc2VsZi5yb290LnVwZGF0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZjIud2luZm9faGVpZ2h0KCksIDYwKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVGNsRXJyb3IsICdiYWQgc2NyZWVuIGRpc3RhbmNlICJhYmNkIicpOgorICAgICAgICAgICAgZjIucGxhY2VfY29uZmlndXJlKGhlaWdodD0nYWJjZCcpCisKKyAgICBkZWYgdGVzdF9wbGFjZV9jb25maWd1cmVfcmVsd2lkdGgoc2VsZik6CisgICAgICAgIHQsIGYsIGYyID0gc2VsZi5jcmVhdGUyKCkKKyAgICAgICAgZjIucGxhY2VfY29uZmlndXJlKGluXz1mLCByZWx3aWR0aD0wLjUpCisgICAgICAgIHNlbGYucm9vdC51cGRhdGUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYyLndpbmZvX3dpZHRoKCksIDc1KQorICAgICAgICBmMi5wbGFjZV9jb25maWd1cmUocmVsd2lkdGg9JycpCisgICAgICAgIHNlbGYucm9vdC51cGRhdGUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYyLndpbmZvX3dpZHRoKCksIDMwKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVGNsRXJyb3IsICdleHBlY3RlZCBmbG9hdGluZy1wb2ludCBudW1iZXIgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2J1dCBnb3QgImFiY2QiJyk6CisgICAgICAgICAgICBmMi5wbGFjZV9jb25maWd1cmUocmVsd2lkdGg9J2FiY2QnKQorCisgICAgZGVmIHRlc3RfcGxhY2VfY29uZmlndXJlX3JlbGhlaWdodChzZWxmKToKKyAgICAgICAgdCwgZiwgZjIgPSBzZWxmLmNyZWF0ZTIoKQorICAgICAgICBmMi5wbGFjZV9jb25maWd1cmUoaW5fPWYsIHJlbGhlaWdodD0wLjUpCisgICAgICAgIHNlbGYucm9vdC51cGRhdGUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYyLndpbmZvX2hlaWdodCgpLCA0MCkKKyAgICAgICAgZjIucGxhY2VfY29uZmlndXJlKHJlbGhlaWdodD0nJykKKyAgICAgICAgc2VsZi5yb290LnVwZGF0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZjIud2luZm9faGVpZ2h0KCksIDYwKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVGNsRXJyb3IsICdleHBlY3RlZCBmbG9hdGluZy1wb2ludCBudW1iZXIgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2J1dCBnb3QgImFiY2QiJyk6CisgICAgICAgICAgICBmMi5wbGFjZV9jb25maWd1cmUocmVsaGVpZ2h0PSdhYmNkJykKKworICAgIGRlZiB0ZXN0X3BsYWNlX2NvbmZpZ3VyZV9ib3JkZXJtb2RlKHNlbGYpOgorICAgICAgICBmID0gdGtpbnRlci5GcmFtZShzZWxmLnJvb3QpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUY2xFcnJvciwgJ2JhZCBib3JkZXJtb2RlICJqIicpOgorICAgICAgICAgICAgZi5wbGFjZV9jb25maWd1cmUoYm9yZGVybW9kZT0naicpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUY2xFcnJvciwgJ2FtYmlndW91cyBib3JkZXJtb2RlICIiJyk6CisgICAgICAgICAgICBmLnBsYWNlX2NvbmZpZ3VyZShib3JkZXJtb2RlPScnKQorICAgICAgICBmb3IgdmFsdWUgaW4gJ2luc2lkZScsICdvdXRzaWRlJywgJ2lnbm9yZSc6CisgICAgICAgICAgICBmLnBsYWNlX2NvbmZpZ3VyZShib3JkZXJtb2RlPXZhbHVlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnBsYWNlX2luZm8oKVsnYm9yZGVybW9kZSddLCB2YWx1ZSkKKworICAgIGRlZiB0ZXN0X3BsYWNlX2ZvcmdldChzZWxmKToKKyAgICAgICAgZm9vID0gdGtpbnRlci5GcmFtZShzZWxmLnJvb3QpCisgICAgICAgIGZvby5wbGFjZV9jb25maWd1cmUod2lkdGg9NTAsIGhlaWdodD01MCkKKyAgICAgICAgc2VsZi5yb290LnVwZGF0ZSgpCisgICAgICAgIGZvby5wbGFjZV9mb3JnZXQoKQorICAgICAgICBzZWxmLnJvb3QudXBkYXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmb28ud2luZm9faXNtYXBwZWQoKSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgZm9vLnBsYWNlX2ZvcmdldCgwKQorCisgICAgZGVmIHRlc3RfcGxhY2VfaW5mbyhzZWxmKToKKyAgICAgICAgdCwgZiwgZjIgPSBzZWxmLmNyZWF0ZTIoKQorICAgICAgICBmMi5wbGFjZV9jb25maWd1cmUoaW5fPWYsIHg9MSwgeT0yLCB3aWR0aD0zLCBoZWlnaHQ9NCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbHg9MC4xLCByZWx5PTAuMiwgcmVsd2lkdGg9MC4zLCByZWxoZWlnaHQ9MC40LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaG9yPSdzZScsIGJvcmRlcm1vZGU9J291dHNpZGUnKQorICAgICAgICBpbmZvID0gZjIucGxhY2VfaW5mbygpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShpbmZvLCBkaWN0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm9bJ3gnXSwgJzEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm9bJ3knXSwgJzInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm9bJ3dpZHRoJ10sICczJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmZvWydoZWlnaHQnXSwgJzQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm9bJ3JlbHgnXSwgJzAuMScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mb1sncmVseSddLCAnMC4yJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmZvWydyZWx3aWR0aCddLCAnMC4zJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmZvWydyZWxoZWlnaHQnXSwgJzAuNCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mb1snYW5jaG9yJ10sICdzZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mb1snYm9yZGVybW9kZSddLCAnb3V0c2lkZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mb1sneCddLCAnMScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mb1sneCddLCAnMScpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGYyLnBsYWNlX2luZm8oMCkKKworICAgIGRlZiB0ZXN0X3BsYWNlX3NsYXZlcyhzZWxmKToKKyAgICAgICAgZm9vID0gdGtpbnRlci5GcmFtZShzZWxmLnJvb3QpCisgICAgICAgIGJhciA9IHRraW50ZXIuRnJhbWUoc2VsZi5yb290KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvby5wbGFjZV9zbGF2ZXMoKSwgW10pCisgICAgICAgIGJhci5wbGFjZV9jb25maWd1cmUoaW5fPWZvbykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb28ucGxhY2Vfc2xhdmVzKCksIFtiYXJdKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBmb28ucGxhY2Vfc2xhdmVzKDApCisKKworY2xhc3MgR3JpZFRlc3QoQWJzdHJhY3RXaWRnZXRUZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGNvbHMsIHJvd3MgPSBzZWxmLnJvb3QuZ3JpZF9zaXplKCkKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoY29scyArIDEpOgorICAgICAgICAgICAgc2VsZi5yb290LmdyaWRfY29sdW1uY29uZmlndXJlKGksIHdlaWdodD0wLCBtaW5zaXplPTAsIHBhZD0wLCB1bmlmb3JtPScnKQorICAgICAgICBmb3IgaSBpbiByYW5nZShyb3dzICsgMSk6CisgICAgICAgICAgICBzZWxmLnJvb3QuZ3JpZF9yb3djb25maWd1cmUoaSwgd2VpZ2h0PTAsIG1pbnNpemU9MCwgcGFkPTAsIHVuaWZvcm09JycpCisgICAgICAgIHNlbGYucm9vdC5ncmlkX3Byb3BhZ2F0ZSgxKQorICAgICAgICBpZiB0Y2xfdmVyc2lvbiA+PSAoOCwgNSk6CisgICAgICAgICAgICBzZWxmLnJvb3QuZ3JpZF9hbmNob3IoJ253JykKKyAgICAgICAgc3VwZXIoKS50ZWFyRG93bigpCisKKyAgICBkZWYgdGVzdF9ncmlkX2NvbmZpZ3VyZShzZWxmKToKKyAgICAgICAgYiA9IHRraW50ZXIuQnV0dG9uKHNlbGYucm9vdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLmdyaWRfaW5mbygpLCB7fSkKKyAgICAgICAgYi5ncmlkX2NvbmZpZ3VyZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5ncmlkX2luZm8oKVsnaW4nXSwgc2VsZi5yb290KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuZ3JpZF9pbmZvKClbJ2NvbHVtbiddLCBzZWxmLl9zdHIoMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5ncmlkX2luZm8oKVsncm93J10sIHNlbGYuX3N0cigwKSkKKyAgICAgICAgYi5ncmlkX2NvbmZpZ3VyZSh7J2NvbHVtbic6IDF9LCByb3c9MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLmdyaWRfaW5mbygpWydjb2x1bW4nXSwgc2VsZi5fc3RyKDEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuZ3JpZF9pbmZvKClbJ3JvdyddLCBzZWxmLl9zdHIoMikpCisKKyAgICBkZWYgdGVzdF9ncmlkX2NvbmZpZ3VyZV9jb2x1bW4oc2VsZik6CisgICAgICAgIGIgPSB0a2ludGVyLkJ1dHRvbihzZWxmLnJvb3QpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUY2xFcnJvciwgJ2JhZCBjb2x1bW4gdmFsdWUgIi0xIjogJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ211c3QgYmUgYSBub24tbmVnYXRpdmUgaW50ZWdlcicpOgorICAgICAgICAgICAgYi5ncmlkX2NvbmZpZ3VyZShjb2x1bW49LTEpCisgICAgICAgIGIuZ3JpZF9jb25maWd1cmUoY29sdW1uPTIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5ncmlkX2luZm8oKVsnY29sdW1uJ10sIHNlbGYuX3N0cigyKSkKKworICAgIGRlZiB0ZXN0X2dyaWRfY29uZmlndXJlX2NvbHVtbnNwYW4oc2VsZik6CisgICAgICAgIGIgPSB0a2ludGVyLkJ1dHRvbihzZWxmLnJvb3QpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUY2xFcnJvciwgJ2JhZCBjb2x1bW5zcGFuIHZhbHVlICIwIjogJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ211c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyJyk6CisgICAgICAgICAgICBiLmdyaWRfY29uZmlndXJlKGNvbHVtbnNwYW49MCkKKyAgICAgICAgYi5ncmlkX2NvbmZpZ3VyZShjb2x1bW5zcGFuPTIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5ncmlkX2luZm8oKVsnY29sdW1uc3BhbiddLCBzZWxmLl9zdHIoMikpCisKKyAgICBkZWYgdGVzdF9ncmlkX2NvbmZpZ3VyZV9pbihzZWxmKToKKyAgICAgICAgZiA9IHRraW50ZXIuRnJhbWUoc2VsZi5yb290KQorICAgICAgICBiID0gdGtpbnRlci5CdXR0b24oc2VsZi5yb290KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuZ3JpZF9pbmZvKCksIHt9KQorICAgICAgICBiLmdyaWRfY29uZmlndXJlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLmdyaWRfaW5mbygpWydpbiddLCBzZWxmLnJvb3QpCisgICAgICAgIGIuZ3JpZF9jb25maWd1cmUoaW5fPWYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5ncmlkX2luZm8oKVsnaW4nXSwgZikKKyAgICAgICAgYi5ncmlkX2NvbmZpZ3VyZSh7J2luJzogc2VsZi5yb290fSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLmdyaWRfaW5mbygpWydpbiddLCBzZWxmLnJvb3QpCisKKyAgICBkZWYgdGVzdF9ncmlkX2NvbmZpZ3VyZV9pcGFkeChzZWxmKToKKyAgICAgICAgYiA9IHRraW50ZXIuQnV0dG9uKHNlbGYucm9vdCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFRjbEVycm9yLCAnYmFkIGlwYWR4IHZhbHVlICItMSI6ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtdXN0IGJlIHBvc2l0aXZlIHNjcmVlbiBkaXN0YW5jZScpOgorICAgICAgICAgICAgYi5ncmlkX2NvbmZpZ3VyZShpcGFkeD0tMSkKKyAgICAgICAgYi5ncmlkX2NvbmZpZ3VyZShpcGFkeD0xKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuZ3JpZF9pbmZvKClbJ2lwYWR4J10sIHNlbGYuX3N0cigxKSkKKyAgICAgICAgYi5ncmlkX2NvbmZpZ3VyZShpcGFkeD0nLjVjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLmdyaWRfaW5mbygpWydpcGFkeCddLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3N0cihyb3VuZChwaXhlbHNfY29udignLjVjJykgKiBzZWxmLnNjYWxpbmcpKSkKKworICAgIGRlZiB0ZXN0X2dyaWRfY29uZmlndXJlX2lwYWR5KHNlbGYpOgorICAgICAgICBiID0gdGtpbnRlci5CdXR0b24oc2VsZi5yb290KQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVGNsRXJyb3IsICdiYWQgaXBhZHkgdmFsdWUgIi0xIjogJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ211c3QgYmUgcG9zaXRpdmUgc2NyZWVuIGRpc3RhbmNlJyk6CisgICAgICAgICAgICBiLmdyaWRfY29uZmlndXJlKGlwYWR5PS0xKQorICAgICAgICBiLmdyaWRfY29uZmlndXJlKGlwYWR5PTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5ncmlkX2luZm8oKVsnaXBhZHknXSwgc2VsZi5fc3RyKDEpKQorICAgICAgICBiLmdyaWRfY29uZmlndXJlKGlwYWR5PScuNWMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuZ3JpZF9pbmZvKClbJ2lwYWR5J10sCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fc3RyKHJvdW5kKHBpeGVsc19jb252KCcuNWMnKSAqIHNlbGYuc2NhbGluZykpKQorCisgICAgZGVmIHRlc3RfZ3JpZF9jb25maWd1cmVfcGFkeChzZWxmKToKKyAgICAgICAgYiA9IHRraW50ZXIuQnV0dG9uKHNlbGYucm9vdCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFRjbEVycm9yLCAnYmFkIHBhZCB2YWx1ZSAiLTEiOiAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbXVzdCBiZSBwb3NpdGl2ZSBzY3JlZW4gZGlzdGFuY2UnKToKKyAgICAgICAgICAgIGIuZ3JpZF9jb25maWd1cmUocGFkeD0tMSkKKyAgICAgICAgYi5ncmlkX2NvbmZpZ3VyZShwYWR4PTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5ncmlkX2luZm8oKVsncGFkeCddLCBzZWxmLl9zdHIoMSkpCisgICAgICAgIGIuZ3JpZF9jb25maWd1cmUocGFkeD0oMTAsIDUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuZ3JpZF9pbmZvKClbJ3BhZHgnXSwgc2VsZi5fc3RyKCgxMCwgNSkpKQorICAgICAgICBiLmdyaWRfY29uZmlndXJlKHBhZHg9Jy41YycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5ncmlkX2luZm8oKVsncGFkeCddLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3N0cihyb3VuZChwaXhlbHNfY29udignLjVjJykgKiBzZWxmLnNjYWxpbmcpKSkKKworICAgIGRlZiB0ZXN0X2dyaWRfY29uZmlndXJlX3BhZHkoc2VsZik6CisgICAgICAgIGIgPSB0a2ludGVyLkJ1dHRvbihzZWxmLnJvb3QpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUY2xFcnJvciwgJ2JhZCBwYWQgdmFsdWUgIi0xIjogJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ211c3QgYmUgcG9zaXRpdmUgc2NyZWVuIGRpc3RhbmNlJyk6CisgICAgICAgICAgICBiLmdyaWRfY29uZmlndXJlKHBhZHk9LTEpCisgICAgICAgIGIuZ3JpZF9jb25maWd1cmUocGFkeT0xKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuZ3JpZF9pbmZvKClbJ3BhZHknXSwgc2VsZi5fc3RyKDEpKQorICAgICAgICBiLmdyaWRfY29uZmlndXJlKHBhZHk9KDEwLCA1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLmdyaWRfaW5mbygpWydwYWR5J10sIHNlbGYuX3N0cigoMTAsIDUpKSkKKyAgICAgICAgYi5ncmlkX2NvbmZpZ3VyZShwYWR5PScuNWMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuZ3JpZF9pbmZvKClbJ3BhZHknXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9zdHIocm91bmQocGl4ZWxzX2NvbnYoJy41YycpICogc2VsZi5zY2FsaW5nKSkpCisKKyAgICBkZWYgdGVzdF9ncmlkX2NvbmZpZ3VyZV9yb3coc2VsZik6CisgICAgICAgIGIgPSB0a2ludGVyLkJ1dHRvbihzZWxmLnJvb3QpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUY2xFcnJvciwgJ2JhZCAocm93fGdyaWQpIHZhbHVlICItMSI6ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIGludGVnZXInKToKKyAgICAgICAgICAgIGIuZ3JpZF9jb25maWd1cmUocm93PS0xKQorICAgICAgICBiLmdyaWRfY29uZmlndXJlKHJvdz0yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuZ3JpZF9pbmZvKClbJ3JvdyddLCBzZWxmLl9zdHIoMikpCisKKyAgICBkZWYgdGVzdF9ncmlkX2NvbmZpZ3VyZV9yb3duc3BhbihzZWxmKToKKyAgICAgICAgYiA9IHRraW50ZXIuQnV0dG9uKHNlbGYucm9vdCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFRjbEVycm9yLCAnYmFkIHJvd3NwYW4gdmFsdWUgIjAiOiAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXInKToKKyAgICAgICAgICAgIGIuZ3JpZF9jb25maWd1cmUocm93c3Bhbj0wKQorICAgICAgICBiLmdyaWRfY29uZmlndXJlKHJvd3NwYW49MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLmdyaWRfaW5mbygpWydyb3dzcGFuJ10sIHNlbGYuX3N0cigyKSkKKworICAgIGRlZiB0ZXN0X2dyaWRfY29uZmlndXJlX3N0aWNreShzZWxmKToKKyAgICAgICAgZiA9IHRraW50ZXIuRnJhbWUoc2VsZi5yb290LCBiZz0ncmVkJykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFRjbEVycm9yLCAnYmFkIHN0aWNreW5lc3MgdmFsdWUgImdsdWUiJyk6CisgICAgICAgICAgICBmLmdyaWRfY29uZmlndXJlKHN0aWNreT0nZ2x1ZScpCisgICAgICAgIGYuZ3JpZF9jb25maWd1cmUoc3RpY2t5PSduZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5ncmlkX2luZm8oKVsnc3RpY2t5J10sICduZScpCisgICAgICAgIGYuZ3JpZF9jb25maWd1cmUoc3RpY2t5PSduLHMsZSx3JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmdyaWRfaW5mbygpWydzdGlja3knXSwgJ25lc3cnKQorCisgICAgZGVmIHRlc3RfZ3JpZF9jb2x1bW5jb25maWd1cmUoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHNlbGYucm9vdC5ncmlkX2NvbHVtbmNvbmZpZ3VyZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5yb290LmdyaWRfY29sdW1uY29uZmlndXJlKDApLAorICAgICAgICAgICAgICAgICAgICAgICAgIHsnbWluc2l6ZSc6IDAsICdwYWQnOiAwLCAndW5pZm9ybSc6IE5vbmUsICd3ZWlnaHQnOiAwfSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFRjbEVycm9yLCAnYmFkIG9wdGlvbiAiLWZvbyInKToKKyAgICAgICAgICAgIHNlbGYucm9vdC5ncmlkX2NvbHVtbmNvbmZpZ3VyZSgwLCAnZm9vJykKKyAgICAgICAgc2VsZi5yb290LmdyaWRfY29sdW1uY29uZmlndXJlKCgwLCAzKSwgd2VpZ2h0PTIpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUY2xFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtdXN0IHNwZWNpZnkgYSBzaW5nbGUgZWxlbWVudCBvbiByZXRyaWV2YWwnKToKKyAgICAgICAgICAgIHNlbGYucm9vdC5ncmlkX2NvbHVtbmNvbmZpZ3VyZSgoMCwgMykpCisgICAgICAgIGIgPSB0a2ludGVyLkJ1dHRvbihzZWxmLnJvb3QpCisgICAgICAgIGIuZ3JpZF9jb25maWd1cmUoY29sdW1uPTAsIHJvdz0wKQorICAgICAgICBpZiB0Y2xfdmVyc2lvbiA+PSAoOCwgNSk6CisgICAgICAgICAgICBzZWxmLnJvb3QuZ3JpZF9jb2x1bW5jb25maWd1cmUoJ2FsbCcsIHdlaWdodD0zKQorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFRjbEVycm9yLCAnZXhwZWN0ZWQgaW50ZWdlciBidXQgZ290ICJhbGwiJyk6CisgICAgICAgICAgICAgICAgc2VsZi5yb290LmdyaWRfY29sdW1uY29uZmlndXJlKCdhbGwnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnJvb3QuZ3JpZF9jb2x1bW5jb25maWd1cmUoMCwgJ3dlaWdodCcpLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucm9vdC5ncmlkX2NvbHVtbmNvbmZpZ3VyZSgzLCAnd2VpZ2h0JyksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5yb290LmdyaWRfY29sdW1uY29uZmlndXJlKDI2NSwgJ3dlaWdodCcpLCAwKQorICAgICAgICBpZiB0Y2xfdmVyc2lvbiA+PSAoOCwgNSk6CisgICAgICAgICAgICBzZWxmLnJvb3QuZ3JpZF9jb2x1bW5jb25maWd1cmUoYiwgd2VpZ2h0PTQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucm9vdC5ncmlkX2NvbHVtbmNvbmZpZ3VyZSgwLCAnd2VpZ2h0JyksIDQpCisKKyAgICBkZWYgdGVzdF9ncmlkX2NvbHVtbmNvbmZpZ3VyZV9taW5zaXplKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVGNsRXJyb3IsICdiYWQgc2NyZWVuIGRpc3RhbmNlICJmb28iJyk6CisgICAgICAgICAgICBzZWxmLnJvb3QuZ3JpZF9jb2x1bW5jb25maWd1cmUoMCwgbWluc2l6ZT0nZm9vJykKKyAgICAgICAgc2VsZi5yb290LmdyaWRfY29sdW1uY29uZmlndXJlKDAsIG1pbnNpemU9MTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5yb290LmdyaWRfY29sdW1uY29uZmlndXJlKDAsICdtaW5zaXplJyksIDEwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucm9vdC5ncmlkX2NvbHVtbmNvbmZpZ3VyZSgwKVsnbWluc2l6ZSddLCAxMCkKKworICAgIGRlZiB0ZXN0X2dyaWRfY29sdW1uY29uZmlndXJlX3dlaWdodChzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFRjbEVycm9yLCAnZXhwZWN0ZWQgaW50ZWdlciBidXQgZ290ICJiYWQiJyk6CisgICAgICAgICAgICBzZWxmLnJvb3QuZ3JpZF9jb2x1bW5jb25maWd1cmUoMCwgd2VpZ2h0PSdiYWQnKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVGNsRXJyb3IsICdpbnZhbGlkIGFyZyAiLXdlaWdodCI6ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzaG91bGQgYmUgbm9uLW5lZ2F0aXZlJyk6CisgICAgICAgICAgICBzZWxmLnJvb3QuZ3JpZF9jb2x1bW5jb25maWd1cmUoMCwgd2VpZ2h0PS0zKQorICAgICAgICBzZWxmLnJvb3QuZ3JpZF9jb2x1bW5jb25maWd1cmUoMCwgd2VpZ2h0PTMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5yb290LmdyaWRfY29sdW1uY29uZmlndXJlKDAsICd3ZWlnaHQnKSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnJvb3QuZ3JpZF9jb2x1bW5jb25maWd1cmUoMClbJ3dlaWdodCddLCAzKQorCisgICAgZGVmIHRlc3RfZ3JpZF9jb2x1bW5jb25maWd1cmVfcGFkKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVGNsRXJyb3IsICdiYWQgc2NyZWVuIGRpc3RhbmNlICJmb28iJyk6CisgICAgICAgICAgICBzZWxmLnJvb3QuZ3JpZF9jb2x1bW5jb25maWd1cmUoMCwgcGFkPSdmb28nKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVGNsRXJyb3IsICdpbnZhbGlkIGFyZyAiLXBhZCI6ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzaG91bGQgYmUgbm9uLW5lZ2F0aXZlJyk6CisgICAgICAgICAgICBzZWxmLnJvb3QuZ3JpZF9jb2x1bW5jb25maWd1cmUoMCwgcGFkPS0zKQorICAgICAgICBzZWxmLnJvb3QuZ3JpZF9jb2x1bW5jb25maWd1cmUoMCwgcGFkPTMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5yb290LmdyaWRfY29sdW1uY29uZmlndXJlKDAsICdwYWQnKSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnJvb3QuZ3JpZF9jb2x1bW5jb25maWd1cmUoMClbJ3BhZCddLCAzKQorCisgICAgZGVmIHRlc3RfZ3JpZF9jb2x1bW5jb25maWd1cmVfdW5pZm9ybShzZWxmKToKKyAgICAgICAgc2VsZi5yb290LmdyaWRfY29sdW1uY29uZmlndXJlKDAsIHVuaWZvcm09J2ZvbycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5yb290LmdyaWRfY29sdW1uY29uZmlndXJlKDAsICd1bmlmb3JtJyksICdmb28nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucm9vdC5ncmlkX2NvbHVtbmNvbmZpZ3VyZSgwKVsndW5pZm9ybSddLCAnZm9vJykKKworICAgIGRlZiB0ZXN0X2dyaWRfcm93Y29uZmlndXJlKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBzZWxmLnJvb3QuZ3JpZF9yb3djb25maWd1cmUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucm9vdC5ncmlkX3Jvd2NvbmZpZ3VyZSgwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB7J21pbnNpemUnOiAwLCAncGFkJzogMCwgJ3VuaWZvcm0nOiBOb25lLCAnd2VpZ2h0JzogMH0pCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUY2xFcnJvciwgJ2JhZCBvcHRpb24gIi1mb28iJyk6CisgICAgICAgICAgICBzZWxmLnJvb3QuZ3JpZF9yb3djb25maWd1cmUoMCwgJ2ZvbycpCisgICAgICAgIHNlbGYucm9vdC5ncmlkX3Jvd2NvbmZpZ3VyZSgoMCwgMyksIHdlaWdodD0yKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVGNsRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbXVzdCBzcGVjaWZ5IGEgc2luZ2xlIGVsZW1lbnQgb24gcmV0cmlldmFsJyk6CisgICAgICAgICAgICBzZWxmLnJvb3QuZ3JpZF9yb3djb25maWd1cmUoKDAsIDMpKQorICAgICAgICBiID0gdGtpbnRlci5CdXR0b24oc2VsZi5yb290KQorICAgICAgICBiLmdyaWRfY29uZmlndXJlKGNvbHVtbj0wLCByb3c9MCkKKyAgICAgICAgaWYgdGNsX3ZlcnNpb24gPj0gKDgsIDUpOgorICAgICAgICAgICAgc2VsZi5yb290LmdyaWRfcm93Y29uZmlndXJlKCdhbGwnLCB3ZWlnaHQ9MykKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUY2xFcnJvciwgJ2V4cGVjdGVkIGludGVnZXIgYnV0IGdvdCAiYWxsIicpOgorICAgICAgICAgICAgICAgIHNlbGYucm9vdC5ncmlkX3Jvd2NvbmZpZ3VyZSgnYWxsJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5yb290LmdyaWRfcm93Y29uZmlndXJlKDAsICd3ZWlnaHQnKSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnJvb3QuZ3JpZF9yb3djb25maWd1cmUoMywgJ3dlaWdodCcpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucm9vdC5ncmlkX3Jvd2NvbmZpZ3VyZSgyNjUsICd3ZWlnaHQnKSwgMCkKKyAgICAgICAgaWYgdGNsX3ZlcnNpb24gPj0gKDgsIDUpOgorICAgICAgICAgICAgc2VsZi5yb290LmdyaWRfcm93Y29uZmlndXJlKGIsIHdlaWdodD00KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnJvb3QuZ3JpZF9yb3djb25maWd1cmUoMCwgJ3dlaWdodCcpLCA0KQorCisgICAgZGVmIHRlc3RfZ3JpZF9yb3djb25maWd1cmVfbWluc2l6ZShzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFRjbEVycm9yLCAnYmFkIHNjcmVlbiBkaXN0YW5jZSAiZm9vIicpOgorICAgICAgICAgICAgc2VsZi5yb290LmdyaWRfcm93Y29uZmlndXJlKDAsIG1pbnNpemU9J2ZvbycpCisgICAgICAgIHNlbGYucm9vdC5ncmlkX3Jvd2NvbmZpZ3VyZSgwLCBtaW5zaXplPTEwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucm9vdC5ncmlkX3Jvd2NvbmZpZ3VyZSgwLCAnbWluc2l6ZScpLCAxMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnJvb3QuZ3JpZF9yb3djb25maWd1cmUoMClbJ21pbnNpemUnXSwgMTApCisKKyAgICBkZWYgdGVzdF9ncmlkX3Jvd2NvbmZpZ3VyZV93ZWlnaHQoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUY2xFcnJvciwgJ2V4cGVjdGVkIGludGVnZXIgYnV0IGdvdCAiYmFkIicpOgorICAgICAgICAgICAgc2VsZi5yb290LmdyaWRfcm93Y29uZmlndXJlKDAsIHdlaWdodD0nYmFkJykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFRjbEVycm9yLCAnaW52YWxpZCBhcmcgIi13ZWlnaHQiOiAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2hvdWxkIGJlIG5vbi1uZWdhdGl2ZScpOgorICAgICAgICAgICAgc2VsZi5yb290LmdyaWRfcm93Y29uZmlndXJlKDAsIHdlaWdodD0tMykKKyAgICAgICAgc2VsZi5yb290LmdyaWRfcm93Y29uZmlndXJlKDAsIHdlaWdodD0zKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucm9vdC5ncmlkX3Jvd2NvbmZpZ3VyZSgwLCAnd2VpZ2h0JyksIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5yb290LmdyaWRfcm93Y29uZmlndXJlKDApWyd3ZWlnaHQnXSwgMykKKworICAgIGRlZiB0ZXN0X2dyaWRfcm93Y29uZmlndXJlX3BhZChzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFRjbEVycm9yLCAnYmFkIHNjcmVlbiBkaXN0YW5jZSAiZm9vIicpOgorICAgICAgICAgICAgc2VsZi5yb290LmdyaWRfcm93Y29uZmlndXJlKDAsIHBhZD0nZm9vJykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFRjbEVycm9yLCAnaW52YWxpZCBhcmcgIi1wYWQiOiAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2hvdWxkIGJlIG5vbi1uZWdhdGl2ZScpOgorICAgICAgICAgICAgc2VsZi5yb290LmdyaWRfcm93Y29uZmlndXJlKDAsIHBhZD0tMykKKyAgICAgICAgc2VsZi5yb290LmdyaWRfcm93Y29uZmlndXJlKDAsIHBhZD0zKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucm9vdC5ncmlkX3Jvd2NvbmZpZ3VyZSgwLCAncGFkJyksIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5yb290LmdyaWRfcm93Y29uZmlndXJlKDApWydwYWQnXSwgMykKKworICAgIGRlZiB0ZXN0X2dyaWRfcm93Y29uZmlndXJlX3VuaWZvcm0oc2VsZik6CisgICAgICAgIHNlbGYucm9vdC5ncmlkX3Jvd2NvbmZpZ3VyZSgwLCB1bmlmb3JtPSdmb28nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucm9vdC5ncmlkX3Jvd2NvbmZpZ3VyZSgwLCAndW5pZm9ybScpLCAnZm9vJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnJvb3QuZ3JpZF9yb3djb25maWd1cmUoMClbJ3VuaWZvcm0nXSwgJ2ZvbycpCisKKyAgICBkZWYgdGVzdF9ncmlkX2ZvcmdldChzZWxmKToKKyAgICAgICAgYiA9IHRraW50ZXIuQnV0dG9uKHNlbGYucm9vdCkKKyAgICAgICAgYyA9IHRraW50ZXIuQnV0dG9uKHNlbGYucm9vdCkKKyAgICAgICAgYi5ncmlkX2NvbmZpZ3VyZShyb3c9MiwgY29sdW1uPTIsIHJvd3NwYW49MiwgY29sdW1uc3Bhbj0yLAorICAgICAgICAgICAgICAgICAgICAgICAgIHBhZHg9MywgcGFkeT00LCBzdGlja3k9J25zJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnJvb3QuZ3JpZF9zbGF2ZXMoKSwgW2JdKQorICAgICAgICBiLmdyaWRfZm9yZ2V0KCkKKyAgICAgICAgYy5ncmlkX2ZvcmdldCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5yb290LmdyaWRfc2xhdmVzKCksIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuZ3JpZF9pbmZvKCksIHt9KQorICAgICAgICBiLmdyaWRfY29uZmlndXJlKHJvdz0wLCBjb2x1bW49MCkKKyAgICAgICAgaW5mbyA9IGIuZ3JpZF9pbmZvKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmZvWydyb3cnXSwgc2VsZi5fc3RyKDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm9bJ2NvbHVtbiddLCBzZWxmLl9zdHIoMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mb1sncm93c3BhbiddLCBzZWxmLl9zdHIoMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mb1snY29sdW1uc3BhbiddLCBzZWxmLl9zdHIoMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mb1sncGFkeCddLCBzZWxmLl9zdHIoMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mb1sncGFkeSddLCBzZWxmLl9zdHIoMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mb1snc3RpY2t5J10sICcnKQorCisgICAgZGVmIHRlc3RfZ3JpZF9yZW1vdmUoc2VsZik6CisgICAgICAgIGIgPSB0a2ludGVyLkJ1dHRvbihzZWxmLnJvb3QpCisgICAgICAgIGMgPSB0a2ludGVyLkJ1dHRvbihzZWxmLnJvb3QpCisgICAgICAgIGIuZ3JpZF9jb25maWd1cmUocm93PTIsIGNvbHVtbj0yLCByb3dzcGFuPTIsIGNvbHVtbnNwYW49MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwYWR4PTMsIHBhZHk9NCwgc3RpY2t5PSducycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5yb290LmdyaWRfc2xhdmVzKCksIFtiXSkKKyAgICAgICAgYi5ncmlkX3JlbW92ZSgpCisgICAgICAgIGMuZ3JpZF9yZW1vdmUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucm9vdC5ncmlkX3NsYXZlcygpLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLmdyaWRfaW5mbygpLCB7fSkKKyAgICAgICAgYi5ncmlkX2NvbmZpZ3VyZShyb3c9MCwgY29sdW1uPTApCisgICAgICAgIGluZm8gPSBiLmdyaWRfaW5mbygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mb1sncm93J10sIHNlbGYuX3N0cigwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmZvWydjb2x1bW4nXSwgc2VsZi5fc3RyKDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm9bJ3Jvd3NwYW4nXSwgc2VsZi5fc3RyKDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm9bJ2NvbHVtbnNwYW4nXSwgc2VsZi5fc3RyKDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm9bJ3BhZHgnXSwgc2VsZi5fc3RyKDMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm9bJ3BhZHknXSwgc2VsZi5fc3RyKDQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm9bJ3N0aWNreSddLCAnbnMnKQorCisgICAgZGVmIHRlc3RfZ3JpZF9pbmZvKHNlbGYpOgorICAgICAgICBiID0gdGtpbnRlci5CdXR0b24oc2VsZi5yb290KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuZ3JpZF9pbmZvKCksIHt9KQorICAgICAgICBiLmdyaWRfY29uZmlndXJlKHJvdz0yLCBjb2x1bW49Miwgcm93c3Bhbj0yLCBjb2x1bW5zcGFuPTIsCisgICAgICAgICAgICAgICAgICAgICAgICAgcGFkeD0zLCBwYWR5PTQsIHN0aWNreT0nbnMnKQorICAgICAgICBpbmZvID0gYi5ncmlkX2luZm8oKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoaW5mbywgZGljdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmZvWydpbiddLCBzZWxmLnJvb3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mb1sncm93J10sIHNlbGYuX3N0cigyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmZvWydjb2x1bW4nXSwgc2VsZi5fc3RyKDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm9bJ3Jvd3NwYW4nXSwgc2VsZi5fc3RyKDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm9bJ2NvbHVtbnNwYW4nXSwgc2VsZi5fc3RyKDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm9bJ3BhZHgnXSwgc2VsZi5fc3RyKDMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm9bJ3BhZHknXSwgc2VsZi5fc3RyKDQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm9bJ3N0aWNreSddLCAnbnMnKQorCisgICAgQHJlcXVpcmVzX3RjbCg4LCA1KQorICAgIGRlZiB0ZXN0X2dyaWRfYW5jaG9yKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVGNsRXJyb3IsICdiYWQgYW5jaG9yICJ4IicpOgorICAgICAgICAgICAgc2VsZi5yb290LmdyaWRfYW5jaG9yKCd4JykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFRjbEVycm9yLCAnYW1iaWd1b3VzIGFuY2hvciAiIicpOgorICAgICAgICAgICAgc2VsZi5yb290LmdyaWRfYW5jaG9yKCcnKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBzZWxmLnJvb3QuZ3JpZF9hbmNob3IoJ3NlJywgJ253JykKKyAgICAgICAgc2VsZi5yb290LmdyaWRfYW5jaG9yKCdzZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5yb290LnRrLmNhbGwoJ2dyaWQnLCAnYW5jaG9yJywgc2VsZi5yb290KSwgJ3NlJykKKworICAgIGRlZiB0ZXN0X2dyaWRfYmJveChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnJvb3QuZ3JpZF9iYm94KCksICgwLCAwLCAwLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnJvb3QuZ3JpZF9iYm94KDAsIDApLCAoMCwgMCwgMCwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5yb290LmdyaWRfYmJveCgwLCAwLCAxLCAxKSwgKDAsIDAsIDAsIDApKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVGNsRXJyb3IsICdleHBlY3RlZCBpbnRlZ2VyIGJ1dCBnb3QgIngiJyk6CisgICAgICAgICAgICBzZWxmLnJvb3QuZ3JpZF9iYm94KCd4JywgMCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFRjbEVycm9yLCAnZXhwZWN0ZWQgaW50ZWdlciBidXQgZ290ICJ4IicpOgorICAgICAgICAgICAgc2VsZi5yb290LmdyaWRfYmJveCgwLCAneCcpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUY2xFcnJvciwgJ2V4cGVjdGVkIGludGVnZXIgYnV0IGdvdCAieCInKToKKyAgICAgICAgICAgIHNlbGYucm9vdC5ncmlkX2Jib3goMCwgMCwgJ3gnLCAwKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVGNsRXJyb3IsICdleHBlY3RlZCBpbnRlZ2VyIGJ1dCBnb3QgIngiJyk6CisgICAgICAgICAgICBzZWxmLnJvb3QuZ3JpZF9iYm94KDAsIDAsIDAsICd4JykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5yb290LmdyaWRfYmJveCgwLCAwLCAwLCAwLCAwKQorICAgICAgICB0ID0gc2VsZi5yb290CisgICAgICAgICMgZGUtbWF4aW1pemUKKyAgICAgICAgdC53bV9nZW9tZXRyeSgnMXgxKzArMCcpCisgICAgICAgIHQud21fZ2VvbWV0cnkoJycpCisgICAgICAgIGYxID0gdGtpbnRlci5GcmFtZSh0LCB3aWR0aD03NSwgaGVpZ2h0PTc1LCBiZz0ncmVkJykKKyAgICAgICAgZjIgPSB0a2ludGVyLkZyYW1lKHQsIHdpZHRoPTkwLCBoZWlnaHQ9OTAsIGJnPSdibHVlJykKKyAgICAgICAgZjEuZ3JpZF9jb25maWd1cmUocm93PTAsIGNvbHVtbj0wKQorICAgICAgICBmMi5ncmlkX2NvbmZpZ3VyZShyb3c9MSwgY29sdW1uPTEpCisgICAgICAgIHNlbGYucm9vdC51cGRhdGUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuZ3JpZF9iYm94KCksICgwLCAwLCAxNjUsIDE2NSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5ncmlkX2Jib3goMCwgMCksICgwLCAwLCA3NSwgNzUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuZ3JpZF9iYm94KDAsIDAsIDEsIDEpLCAoMCwgMCwgMTY1LCAxNjUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuZ3JpZF9iYm94KDEsIDEpLCAoNzUsIDc1LCA5MCwgOTApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuZ3JpZF9iYm94KDEwLCAxMCwgMCwgMCksICgwLCAwLCAxNjUsIDE2NSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5ncmlkX2Jib3goLTIsIC0yLCAtMSwgLTEpLCAoMCwgMCwgMCwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5ncmlkX2Jib3goMTAsIDEwLCAxMiwgMTIpLCAoMTY1LCAxNjUsIDAsIDApKQorCisgICAgZGVmIHRlc3RfZ3JpZF9sb2NhdGlvbihzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5yb290LmdyaWRfbG9jYXRpb24oKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBzZWxmLnJvb3QuZ3JpZF9sb2NhdGlvbigwKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBzZWxmLnJvb3QuZ3JpZF9sb2NhdGlvbigwLCAwLCAwKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVGNsRXJyb3IsICdiYWQgc2NyZWVuIGRpc3RhbmNlICJ4IicpOgorICAgICAgICAgICAgc2VsZi5yb290LmdyaWRfbG9jYXRpb24oJ3gnLCAneScpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUY2xFcnJvciwgJ2JhZCBzY3JlZW4gZGlzdGFuY2UgInkiJyk6CisgICAgICAgICAgICBzZWxmLnJvb3QuZ3JpZF9sb2NhdGlvbignMWMnLCAneScpCisgICAgICAgIHQgPSBzZWxmLnJvb3QKKyAgICAgICAgIyBkZS1tYXhpbWl6ZQorICAgICAgICB0LndtX2dlb21ldHJ5KCcxeDErMCswJykKKyAgICAgICAgdC53bV9nZW9tZXRyeSgnJykKKyAgICAgICAgZiA9IHRraW50ZXIuRnJhbWUodCwgd2lkdGg9MjAwLCBoZWlnaHQ9MTAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICBoaWdobGlnaHR0aGlja25lc3M9MCwgYmc9J3JlZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5ncmlkX2xvY2F0aW9uKDEwLCAxMCksICgtMSwgLTEpKQorICAgICAgICBmLmdyaWRfY29uZmlndXJlKCkKKyAgICAgICAgc2VsZi5yb290LnVwZGF0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5ncmlkX2xvY2F0aW9uKC0xMCwgLTEwKSwgKC0xLCAtMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5ncmlkX2xvY2F0aW9uKC0xMCwgMCksICgtMSwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5ncmlkX2xvY2F0aW9uKC0xLCAwKSwgKC0xLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LmdyaWRfbG9jYXRpb24oMCwgLTEwKSwgKDAsIC0xKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LmdyaWRfbG9jYXRpb24oMCwgLTEpLCAoMCwgLTEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuZ3JpZF9sb2NhdGlvbigwLCAwKSwgKDAsIDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuZ3JpZF9sb2NhdGlvbigyMDAsIDApLCAoMCwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5ncmlkX2xvY2F0aW9uKDIwMSwgMCksICgxLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LmdyaWRfbG9jYXRpb24oMCwgMTAwKSwgKDAsIDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuZ3JpZF9sb2NhdGlvbigwLCAxMDEpLCAoMCwgMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5ncmlkX2xvY2F0aW9uKDIwMSwgMTAxKSwgKDEsIDEpKQorCisgICAgZGVmIHRlc3RfZ3JpZF9wcm9wYWdhdGUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5yb290LmdyaWRfcHJvcGFnYXRlKCksIFRydWUpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHNlbGYucm9vdC5ncmlkX3Byb3BhZ2F0ZShGYWxzZSwgRmFsc2UpCisgICAgICAgIHNlbGYucm9vdC5ncmlkX3Byb3BhZ2F0ZShGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnJvb3QuZ3JpZF9wcm9wYWdhdGUoKSkKKyAgICAgICAgZiA9IHRraW50ZXIuRnJhbWUoc2VsZi5yb290LCB3aWR0aD0xMDAsIGhlaWdodD0xMDAsIGJnPSdyZWQnKQorICAgICAgICBmLmdyaWRfY29uZmlndXJlKHJvdz0wLCBjb2x1bW49MCkKKyAgICAgICAgc2VsZi5yb290LnVwZGF0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi53aW5mb193aWR0aCgpLCAxMDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi53aW5mb19oZWlnaHQoKSwgMTAwKQorICAgICAgICBmLmdyaWRfcHJvcGFnYXRlKEZhbHNlKQorICAgICAgICBnID0gdGtpbnRlci5GcmFtZShzZWxmLnJvb3QsIHdpZHRoPTc1LCBoZWlnaHQ9ODUsIGJnPSdncmVlbicpCisgICAgICAgIGcuZ3JpZF9jb25maWd1cmUoaW5fPWYsIHJvdz0wLCBjb2x1bW49MCkKKyAgICAgICAgc2VsZi5yb290LnVwZGF0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi53aW5mb193aWR0aCgpLCAxMDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi53aW5mb19oZWlnaHQoKSwgMTAwKQorICAgICAgICBmLmdyaWRfcHJvcGFnYXRlKFRydWUpCisgICAgICAgIHNlbGYucm9vdC51cGRhdGUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYud2luZm9fd2lkdGgoKSwgNzUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi53aW5mb19oZWlnaHQoKSwgODUpCisKKyAgICBkZWYgdGVzdF9ncmlkX3NpemUoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHNlbGYucm9vdC5ncmlkX3NpemUoMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnJvb3QuZ3JpZF9zaXplKCksICgwLCAwKSkKKyAgICAgICAgZiA9IHRraW50ZXIuU2NhbGUoc2VsZi5yb290KQorICAgICAgICBmLmdyaWRfY29uZmlndXJlKHJvdz0wLCBjb2x1bW49MCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnJvb3QuZ3JpZF9zaXplKCksICgxLCAxKSkKKyAgICAgICAgZi5ncmlkX2NvbmZpZ3VyZShyb3c9NCwgY29sdW1uPTUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5yb290LmdyaWRfc2l6ZSgpLCAoNiwgNSkpCisKKyAgICBkZWYgdGVzdF9ncmlkX3NsYXZlcyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnJvb3QuZ3JpZF9zbGF2ZXMoKSwgW10pCisgICAgICAgIGEgPSB0a2ludGVyLkxhYmVsKHNlbGYucm9vdCkKKyAgICAgICAgYS5ncmlkX2NvbmZpZ3VyZShyb3c9MCwgY29sdW1uPTEpCisgICAgICAgIGIgPSB0a2ludGVyLkxhYmVsKHNlbGYucm9vdCkKKyAgICAgICAgYi5ncmlkX2NvbmZpZ3VyZShyb3c9MSwgY29sdW1uPTApCisgICAgICAgIGMgPSB0a2ludGVyLkxhYmVsKHNlbGYucm9vdCkKKyAgICAgICAgYy5ncmlkX2NvbmZpZ3VyZShyb3c9MSwgY29sdW1uPTEpCisgICAgICAgIGQgPSB0a2ludGVyLkxhYmVsKHNlbGYucm9vdCkKKyAgICAgICAgZC5ncmlkX2NvbmZpZ3VyZShyb3c9MSwgY29sdW1uPTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5yb290LmdyaWRfc2xhdmVzKCksIFtkLCBjLCBiLCBhXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnJvb3QuZ3JpZF9zbGF2ZXMocm93PTApLCBbYV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5yb290LmdyaWRfc2xhdmVzKHJvdz0xKSwgW2QsIGMsIGJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucm9vdC5ncmlkX3NsYXZlcyhjb2x1bW49MCksIFtiXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnJvb3QuZ3JpZF9zbGF2ZXMoY29sdW1uPTEpLCBbZCwgYywgYV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5yb290LmdyaWRfc2xhdmVzKHJvdz0xLCBjb2x1bW49MSksIFtkLCBjXSkKKworCit0ZXN0c19ndWkgPSAoCisgICAgUGFja1Rlc3QsIFBsYWNlVGVzdCwgR3JpZFRlc3QsCispCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGtpbnRlci90ZXN0L3Rlc3RfdGtpbnRlci90ZXN0X2ltYWdlcy5weSBiL0xpYi90a2ludGVyL3Rlc3QvdGVzdF90a2ludGVyL3Rlc3RfaW1hZ2VzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1YThjZDAKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGtpbnRlci90ZXN0L3Rlc3RfdGtpbnRlci90ZXN0X2ltYWdlcy5weQpAQCAtMCwwICsxLDMyNyBAQAoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgdGtpbnRlcgorZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0Citmcm9tIHRraW50ZXIudGVzdC5zdXBwb3J0IGltcG9ydCBBYnN0cmFjdFRrVGVzdCwgcmVxdWlyZXNfdGNsCisKK3N1cHBvcnQucmVxdWlyZXMoJ2d1aScpCisKKworY2xhc3MgTWlzY1Rlc3QoQWJzdHJhY3RUa1Rlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2ltYWdlX3R5cGVzKHNlbGYpOgorICAgICAgICBpbWFnZV90eXBlcyA9IHNlbGYucm9vdC5pbWFnZV90eXBlcygpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShpbWFnZV90eXBlcywgdHVwbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3Bob3RvJywgaW1hZ2VfdHlwZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2JpdG1hcCcsIGltYWdlX3R5cGVzKQorCisgICAgZGVmIHRlc3RfaW1hZ2VfbmFtZXMoc2VsZik6CisgICAgICAgIGltYWdlX25hbWVzID0gc2VsZi5yb290LmltYWdlX25hbWVzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGltYWdlX25hbWVzLCB0dXBsZSkKKworCitjbGFzcyBCaXRtYXBJbWFnZVRlc3QoQWJzdHJhY3RUa1Rlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBzZXRVcENsYXNzKGNscyk6CisgICAgICAgIEFic3RyYWN0VGtUZXN0LnNldFVwQ2xhc3MuX19mdW5jX18oY2xzKQorICAgICAgICBjbHMudGVzdGZpbGUgPSBzdXBwb3J0LmZpbmRmaWxlKCdweXRob24ueGJtJywgc3ViZGlyPSdpbWdoZHJkYXRhJykKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9mcm9tX2ZpbGUoc2VsZik6CisgICAgICAgIGltYWdlID0gdGtpbnRlci5CaXRtYXBJbWFnZSgnOjppbWc6OnRlc3QnLCBtYXN0ZXI9c2VsZi5yb290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWdyb3VuZD0neWVsbG93JywgYmFja2dyb3VuZD0nYmx1ZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlPXNlbGYudGVzdGZpbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGltYWdlKSwgJzo6aW1nOjp0ZXN0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWFnZS50eXBlKCksICdiaXRtYXAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlLndpZHRoKCksIDE2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlLmhlaWdodCgpLCAxNikKKyAgICAgICAgc2VsZi5hc3NlcnRJbignOjppbWc6OnRlc3QnLCBzZWxmLnJvb3QuaW1hZ2VfbmFtZXMoKSkKKyAgICAgICAgZGVsIGltYWdlCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJzo6aW1nOjp0ZXN0Jywgc2VsZi5yb290LmltYWdlX25hbWVzKCkpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfZnJvbV9kYXRhKHNlbGYpOgorICAgICAgICB3aXRoIG9wZW4oc2VsZi50ZXN0ZmlsZSwgJ3JiJykgYXMgZjoKKyAgICAgICAgICAgIGRhdGEgPSBmLnJlYWQoKQorICAgICAgICBpbWFnZSA9IHRraW50ZXIuQml0bWFwSW1hZ2UoJzo6aW1nOjp0ZXN0JywgbWFzdGVyPXNlbGYucm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVncm91bmQ9J3llbGxvdycsIGJhY2tncm91bmQ9J2JsdWUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YT1kYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihpbWFnZSksICc6OmltZzo6dGVzdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2UudHlwZSgpLCAnYml0bWFwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWFnZS53aWR0aCgpLCAxNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWFnZS5oZWlnaHQoKSwgMTYpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJzo6aW1nOjp0ZXN0Jywgc2VsZi5yb290LmltYWdlX25hbWVzKCkpCisgICAgICAgIGRlbCBpbWFnZQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCc6OmltZzo6dGVzdCcsIHNlbGYucm9vdC5pbWFnZV9uYW1lcygpKQorCisgICAgZGVmIGFzc2VydEVxdWFsU3RyTGlzdChzZWxmLCBhY3R1YWwsIGV4cGVjdGVkKToKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGFjdHVhbCwgc3RyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucm9vdC5zcGxpdGxpc3QoYWN0dWFsKSwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9jb25maWd1cmVfZGF0YShzZWxmKToKKyAgICAgICAgaW1hZ2UgPSB0a2ludGVyLkJpdG1hcEltYWdlKCc6OmltZzo6dGVzdCcsIG1hc3Rlcj1zZWxmLnJvb3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2VbJ2RhdGEnXSwgJy1kYXRhIHt9IHt9IHt9IHt9JykKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYudGVzdGZpbGUsICdyYicpIGFzIGY6CisgICAgICAgICAgICBkYXRhID0gZi5yZWFkKCkKKyAgICAgICAgaW1hZ2UuY29uZmlndXJlKGRhdGE9ZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbFN0ckxpc3QoaW1hZ2VbJ2RhdGEnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCctZGF0YScsICcnLCAnJywgJycsIGRhdGEuZGVjb2RlKCdhc2NpaScpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWFnZS53aWR0aCgpLCAxNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWFnZS5oZWlnaHQoKSwgMTYpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWFnZVsnbWFza2RhdGEnXSwgJy1tYXNrZGF0YSB7fSB7fSB7fSB7fScpCisgICAgICAgIGltYWdlLmNvbmZpZ3VyZShtYXNrZGF0YT1kYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsU3RyTGlzdChpbWFnZVsnbWFza2RhdGEnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCctbWFza2RhdGEnLCAnJywgJycsICcnLCBkYXRhLmRlY29kZSgnYXNjaWknKSkpCisKKyAgICBkZWYgdGVzdF9jb25maWd1cmVfZmlsZShzZWxmKToKKyAgICAgICAgaW1hZ2UgPSB0a2ludGVyLkJpdG1hcEltYWdlKCc6OmltZzo6dGVzdCcsIG1hc3Rlcj1zZWxmLnJvb3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2VbJ2ZpbGUnXSwgJy1maWxlIHt9IHt9IHt9IHt9JykKKyAgICAgICAgaW1hZ2UuY29uZmlndXJlKGZpbGU9c2VsZi50ZXN0ZmlsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbFN0ckxpc3QoaW1hZ2VbJ2ZpbGUnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCctZmlsZScsICcnLCAnJywgJycsc2VsZi50ZXN0ZmlsZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2Uud2lkdGgoKSwgMTYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2UuaGVpZ2h0KCksIDE2KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2VbJ21hc2tmaWxlJ10sICctbWFza2ZpbGUge30ge30ge30ge30nKQorICAgICAgICBpbWFnZS5jb25maWd1cmUobWFza2ZpbGU9c2VsZi50ZXN0ZmlsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbFN0ckxpc3QoaW1hZ2VbJ21hc2tmaWxlJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnLW1hc2tmaWxlJywgJycsICcnLCAnJywgc2VsZi50ZXN0ZmlsZSkpCisKKyAgICBkZWYgdGVzdF9jb25maWd1cmVfYmFja2dyb3VuZChzZWxmKToKKyAgICAgICAgaW1hZ2UgPSB0a2ludGVyLkJpdG1hcEltYWdlKCc6OmltZzo6dGVzdCcsIG1hc3Rlcj1zZWxmLnJvb3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2VbJ2JhY2tncm91bmQnXSwgJy1iYWNrZ3JvdW5kIHt9IHt9IHt9IHt9JykKKyAgICAgICAgaW1hZ2UuY29uZmlndXJlKGJhY2tncm91bmQ9J2JsdWUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlWydiYWNrZ3JvdW5kJ10sICctYmFja2dyb3VuZCB7fSB7fSB7fSBibHVlJykKKworICAgIGRlZiB0ZXN0X2NvbmZpZ3VyZV9mb3JlZ3JvdW5kKHNlbGYpOgorICAgICAgICBpbWFnZSA9IHRraW50ZXIuQml0bWFwSW1hZ2UoJzo6aW1nOjp0ZXN0JywgbWFzdGVyPXNlbGYucm9vdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWFnZVsnZm9yZWdyb3VuZCddLAorICAgICAgICAgICAgICAgICAgICAgICAgICctZm9yZWdyb3VuZCB7fSB7fSAjMDAwMDAwICMwMDAwMDAnKQorICAgICAgICBpbWFnZS5jb25maWd1cmUoZm9yZWdyb3VuZD0neWVsbG93JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWFnZVsnZm9yZWdyb3VuZCddLAorICAgICAgICAgICAgICAgICAgICAgICAgICctZm9yZWdyb3VuZCB7fSB7fSAjMDAwMDAwIHllbGxvdycpCisKKworY2xhc3MgUGhvdG9JbWFnZVRlc3QoQWJzdHJhY3RUa1Rlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBzZXRVcENsYXNzKGNscyk6CisgICAgICAgIEFic3RyYWN0VGtUZXN0LnNldFVwQ2xhc3MuX19mdW5jX18oY2xzKQorICAgICAgICBjbHMudGVzdGZpbGUgPSBzdXBwb3J0LmZpbmRmaWxlKCdweXRob24uZ2lmJywgc3ViZGlyPSdpbWdoZHJkYXRhJykKKworICAgIGRlZiBjcmVhdGUoc2VsZik6CisgICAgICAgIHJldHVybiB0a2ludGVyLlBob3RvSW1hZ2UoJzo6aW1nOjp0ZXN0JywgbWFzdGVyPXNlbGYucm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlPXNlbGYudGVzdGZpbGUpCisKKyAgICBkZWYgY29sb3JsaXN0KHNlbGYsICphcmdzKToKKyAgICAgICAgaWYgdGtpbnRlci5Ua1ZlcnNpb24gPj0gOC42IGFuZCBzZWxmLndhbnRvYmplY3RzOgorICAgICAgICAgICAgcmV0dXJuIGFyZ3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiB0a2ludGVyLl9qb2luKGFyZ3MpCisKKyAgICBkZWYgY2hlY2tfY3JlYXRlX2Zyb21fZmlsZShzZWxmLCBleHQpOgorICAgICAgICB0ZXN0ZmlsZSA9IHN1cHBvcnQuZmluZGZpbGUoJ3B5dGhvbi4nICsgZXh0LCBzdWJkaXI9J2ltZ2hkcmRhdGEnKQorICAgICAgICBpbWFnZSA9IHRraW50ZXIuUGhvdG9JbWFnZSgnOjppbWc6OnRlc3QnLCBtYXN0ZXI9c2VsZi5yb290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlPXRlc3RmaWxlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihpbWFnZSksICc6OmltZzo6dGVzdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2UudHlwZSgpLCAncGhvdG8nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlLndpZHRoKCksIDE2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlLmhlaWdodCgpLCAxNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWFnZVsnZGF0YSddLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWFnZVsnZmlsZSddLCB0ZXN0ZmlsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignOjppbWc6OnRlc3QnLCBzZWxmLnJvb3QuaW1hZ2VfbmFtZXMoKSkKKyAgICAgICAgZGVsIGltYWdlCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJzo6aW1nOjp0ZXN0Jywgc2VsZi5yb290LmltYWdlX25hbWVzKCkpCisKKyAgICBkZWYgY2hlY2tfY3JlYXRlX2Zyb21fZGF0YShzZWxmLCBleHQpOgorICAgICAgICB0ZXN0ZmlsZSA9IHN1cHBvcnQuZmluZGZpbGUoJ3B5dGhvbi4nICsgZXh0LCBzdWJkaXI9J2ltZ2hkcmRhdGEnKQorICAgICAgICB3aXRoIG9wZW4odGVzdGZpbGUsICdyYicpIGFzIGY6CisgICAgICAgICAgICBkYXRhID0gZi5yZWFkKCkKKyAgICAgICAgaW1hZ2UgPSB0a2ludGVyLlBob3RvSW1hZ2UoJzo6aW1nOjp0ZXN0JywgbWFzdGVyPXNlbGYucm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YT1kYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihpbWFnZSksICc6OmltZzo6dGVzdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2UudHlwZSgpLCAncGhvdG8nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlLndpZHRoKCksIDE2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlLmhlaWdodCgpLCAxNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWFnZVsnZGF0YSddLCBkYXRhIGlmIHNlbGYud2FudG9iamVjdHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGRhdGEuZGVjb2RlKCdsYXRpbjEnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWFnZVsnZmlsZSddLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbignOjppbWc6OnRlc3QnLCBzZWxmLnJvb3QuaW1hZ2VfbmFtZXMoKSkKKyAgICAgICAgZGVsIGltYWdlCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJzo6aW1nOjp0ZXN0Jywgc2VsZi5yb290LmltYWdlX25hbWVzKCkpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfZnJvbV9wcG1fZmlsZShzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19jcmVhdGVfZnJvbV9maWxlKCdwcG0nKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX2Zyb21fcHBtX2RhdGEoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfY3JlYXRlX2Zyb21fZGF0YSgncHBtJykKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9mcm9tX3BnbV9maWxlKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX2NyZWF0ZV9mcm9tX2ZpbGUoJ3BnbScpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfZnJvbV9wZ21fZGF0YShzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19jcmVhdGVfZnJvbV9kYXRhKCdwZ20nKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX2Zyb21fZ2lmX2ZpbGUoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfY3JlYXRlX2Zyb21fZmlsZSgnZ2lmJykKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9mcm9tX2dpZl9kYXRhKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX2NyZWF0ZV9mcm9tX2RhdGEoJ2dpZicpCisKKyAgICBAcmVxdWlyZXNfdGNsKDgsIDYpCisgICAgZGVmIHRlc3RfY3JlYXRlX2Zyb21fcG5nX2ZpbGUoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfY3JlYXRlX2Zyb21fZmlsZSgncG5nJykKKworICAgIEByZXF1aXJlc190Y2woOCwgNikKKyAgICBkZWYgdGVzdF9jcmVhdGVfZnJvbV9wbmdfZGF0YShzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19jcmVhdGVfZnJvbV9kYXRhKCdwbmcnKQorCisgICAgZGVmIHRlc3RfY29uZmlndXJlX2RhdGEoc2VsZik6CisgICAgICAgIGltYWdlID0gdGtpbnRlci5QaG90b0ltYWdlKCc6OmltZzo6dGVzdCcsIG1hc3Rlcj1zZWxmLnJvb3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2VbJ2RhdGEnXSwgJycpCisgICAgICAgIHdpdGggb3BlbihzZWxmLnRlc3RmaWxlLCAncmInKSBhcyBmOgorICAgICAgICAgICAgZGF0YSA9IGYucmVhZCgpCisgICAgICAgIGltYWdlLmNvbmZpZ3VyZShkYXRhPWRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2VbJ2RhdGEnXSwgZGF0YSBpZiBzZWxmLndhbnRvYmplY3RzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBkYXRhLmRlY29kZSgnbGF0aW4xJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2Uud2lkdGgoKSwgMTYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2UuaGVpZ2h0KCksIDE2KQorCisgICAgZGVmIHRlc3RfY29uZmlndXJlX2Zvcm1hdChzZWxmKToKKyAgICAgICAgaW1hZ2UgPSB0a2ludGVyLlBob3RvSW1hZ2UoJzo6aW1nOjp0ZXN0JywgbWFzdGVyPXNlbGYucm9vdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWFnZVsnZm9ybWF0J10sICcnKQorICAgICAgICBpbWFnZS5jb25maWd1cmUoZmlsZT1zZWxmLnRlc3RmaWxlLCBmb3JtYXQ9J2dpZicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2VbJ2Zvcm1hdCddLCAoJ2dpZicsKSBpZiBzZWxmLndhbnRvYmplY3RzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlICdnaWYnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlLndpZHRoKCksIDE2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlLmhlaWdodCgpLCAxNikKKworICAgIGRlZiB0ZXN0X2NvbmZpZ3VyZV9maWxlKHNlbGYpOgorICAgICAgICBpbWFnZSA9IHRraW50ZXIuUGhvdG9JbWFnZSgnOjppbWc6OnRlc3QnLCBtYXN0ZXI9c2VsZi5yb290KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlWydmaWxlJ10sICcnKQorICAgICAgICBpbWFnZS5jb25maWd1cmUoZmlsZT1zZWxmLnRlc3RmaWxlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlWydmaWxlJ10sIHNlbGYudGVzdGZpbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2Uud2lkdGgoKSwgMTYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2UuaGVpZ2h0KCksIDE2KQorCisgICAgZGVmIHRlc3RfY29uZmlndXJlX2dhbW1hKHNlbGYpOgorICAgICAgICBpbWFnZSA9IHRraW50ZXIuUGhvdG9JbWFnZSgnOjppbWc6OnRlc3QnLCBtYXN0ZXI9c2VsZi5yb290KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlWydnYW1tYSddLCAnMS4wJykKKyAgICAgICAgaW1hZ2UuY29uZmlndXJlKGdhbW1hPTIuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWFnZVsnZ2FtbWEnXSwgJzIuMCcpCisKKyAgICBkZWYgdGVzdF9jb25maWd1cmVfd2lkdGhfaGVpZ2h0KHNlbGYpOgorICAgICAgICBpbWFnZSA9IHRraW50ZXIuUGhvdG9JbWFnZSgnOjppbWc6OnRlc3QnLCBtYXN0ZXI9c2VsZi5yb290KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlWyd3aWR0aCddLCAnMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2VbJ2hlaWdodCddLCAnMCcpCisgICAgICAgIGltYWdlLmNvbmZpZ3VyZSh3aWR0aD0yMCkKKyAgICAgICAgaW1hZ2UuY29uZmlndXJlKGhlaWdodD0xMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWFnZVsnd2lkdGgnXSwgJzIwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWFnZVsnaGVpZ2h0J10sICcxMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2Uud2lkdGgoKSwgMjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2UuaGVpZ2h0KCksIDEwKQorCisgICAgZGVmIHRlc3RfY29uZmlndXJlX3BhbGV0dGUoc2VsZik6CisgICAgICAgIGltYWdlID0gdGtpbnRlci5QaG90b0ltYWdlKCc6OmltZzo6dGVzdCcsIG1hc3Rlcj1zZWxmLnJvb3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2VbJ3BhbGV0dGUnXSwgJycpCisgICAgICAgIGltYWdlLmNvbmZpZ3VyZShwYWxldHRlPTI1NikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWFnZVsncGFsZXR0ZSddLCAnMjU2JykKKyAgICAgICAgaW1hZ2UuY29uZmlndXJlKHBhbGV0dGU9JzMvNC8yJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWFnZVsncGFsZXR0ZSddLCAnMy80LzInKQorCisgICAgZGVmIHRlc3RfYmxhbmsoc2VsZik6CisgICAgICAgIGltYWdlID0gc2VsZi5jcmVhdGUoKQorICAgICAgICBpbWFnZS5ibGFuaygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2Uud2lkdGgoKSwgMTYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2UuaGVpZ2h0KCksIDE2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlLmdldCg0LCA2KSwgc2VsZi5jb2xvcmxpc3QoMCwgMCwgMCkpCisKKyAgICBkZWYgdGVzdF9jb3B5KHNlbGYpOgorICAgICAgICBpbWFnZSA9IHNlbGYuY3JlYXRlKCkKKyAgICAgICAgaW1hZ2UyID0gaW1hZ2UuY29weSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2UyLndpZHRoKCksIDE2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlMi5oZWlnaHQoKSwgMTYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2UuZ2V0KDQsIDYpLCBpbWFnZS5nZXQoNCwgNikpCisKKyAgICBkZWYgdGVzdF9zdWJzYW1wbGUoc2VsZik6CisgICAgICAgIGltYWdlID0gc2VsZi5jcmVhdGUoKQorICAgICAgICBpbWFnZTIgPSBpbWFnZS5zdWJzYW1wbGUoMiwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWFnZTIud2lkdGgoKSwgOCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWFnZTIuaGVpZ2h0KCksIDYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2UyLmdldCgyLCAyKSwgaW1hZ2UuZ2V0KDQsIDYpKQorCisgICAgICAgIGltYWdlMiA9IGltYWdlLnN1YnNhbXBsZSgyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlMi53aWR0aCgpLCA4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlMi5oZWlnaHQoKSwgOCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWFnZTIuZ2V0KDIsIDMpLCBpbWFnZS5nZXQoNCwgNikpCisKKyAgICBkZWYgdGVzdF96b29tKHNlbGYpOgorICAgICAgICBpbWFnZSA9IHNlbGYuY3JlYXRlKCkKKyAgICAgICAgaW1hZ2UyID0gaW1hZ2Uuem9vbSgyLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlMi53aWR0aCgpLCAzMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWFnZTIuaGVpZ2h0KCksIDQ4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlMi5nZXQoOCwgMTgpLCBpbWFnZS5nZXQoNCwgNikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2UyLmdldCg5LCAyMCksIGltYWdlLmdldCg0LCA2KSkKKworICAgICAgICBpbWFnZTIgPSBpbWFnZS56b29tKDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2UyLndpZHRoKCksIDMyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlMi5oZWlnaHQoKSwgMzIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2UyLmdldCg4LCAxMiksIGltYWdlLmdldCg0LCA2KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWFnZTIuZ2V0KDksIDEzKSwgaW1hZ2UuZ2V0KDQsIDYpKQorCisgICAgZGVmIHRlc3RfcHV0KHNlbGYpOgorICAgICAgICBpbWFnZSA9IHNlbGYuY3JlYXRlKCkKKyAgICAgICAgaW1hZ2UucHV0KCd7cmVkIGdyZWVufSB7Ymx1ZSB5ZWxsb3d9JywgdG89KDQsIDYpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlLmdldCg0LCA2KSwgc2VsZi5jb2xvcmxpc3QoMjU1LCAwLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWFnZS5nZXQoNSwgNiksCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb2xvcmxpc3QoMCwgMTI4IGlmIHRraW50ZXIuVGtWZXJzaW9uID49IDguNgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgMjU1LCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWFnZS5nZXQoNCwgNyksIHNlbGYuY29sb3JsaXN0KDAsIDAsIDI1NSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2UuZ2V0KDUsIDcpLCBzZWxmLmNvbG9ybGlzdCgyNTUsIDI1NSwgMCkpCisKKyAgICAgICAgaW1hZ2UucHV0KCgoJyNmMDAnLCAnIzAwZmYwMCcpLCAoJyMwMDAwMDBmZmYnLCAnI2ZmZmZmZmZmMDAwMCcpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWFnZS5nZXQoMCwgMCksIHNlbGYuY29sb3JsaXN0KDI1NSwgMCwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2UuZ2V0KDEsIDApLCBzZWxmLmNvbG9ybGlzdCgwLCAyNTUsIDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlLmdldCgwLCAxKSwgc2VsZi5jb2xvcmxpc3QoMCwgMCwgMjU1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWFnZS5nZXQoMSwgMSksIHNlbGYuY29sb3JsaXN0KDI1NSwgMjU1LCAwKSkKKworICAgIGRlZiB0ZXN0X2dldChzZWxmKToKKyAgICAgICAgaW1hZ2UgPSBzZWxmLmNyZWF0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2UuZ2V0KDQsIDYpLCBzZWxmLmNvbG9ybGlzdCg2MiwgMTE2LCAxNjIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlLmdldCgwLCAwKSwgc2VsZi5jb2xvcmxpc3QoMCwgMCwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2UuZ2V0KDE1LCAxNSksIHNlbGYuY29sb3JsaXN0KDAsIDAsIDApKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh0a2ludGVyLlRjbEVycm9yLCBpbWFnZS5nZXQsIC0xLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh0a2ludGVyLlRjbEVycm9yLCBpbWFnZS5nZXQsIDAsIC0xKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh0a2ludGVyLlRjbEVycm9yLCBpbWFnZS5nZXQsIDE2LCAxNSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXModGtpbnRlci5UY2xFcnJvciwgaW1hZ2UuZ2V0LCAxNSwgMTYpCisKKyAgICBkZWYgdGVzdF93cml0ZShzZWxmKToKKyAgICAgICAgaW1hZ2UgPSBzZWxmLmNyZWF0ZSgpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzdXBwb3J0LnVubGluaywgc3VwcG9ydC5URVNURk4pCisKKyAgICAgICAgaW1hZ2Uud3JpdGUoc3VwcG9ydC5URVNURk4pCisgICAgICAgIGltYWdlMiA9IHRraW50ZXIuUGhvdG9JbWFnZSgnOjppbWc6OnRlc3QyJywgbWFzdGVyPXNlbGYucm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdD0ncHBtJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGU9c3VwcG9ydC5URVNURk4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGltYWdlMiksICc6OmltZzo6dGVzdDInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlMi50eXBlKCksICdwaG90bycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2UyLndpZHRoKCksIDE2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlMi5oZWlnaHQoKSwgMTYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2UyLmdldCgwLCAwKSwgaW1hZ2UuZ2V0KDAsIDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlMi5nZXQoMTUsIDgpLCBpbWFnZS5nZXQoMTUsIDgpKQorCisgICAgICAgIGltYWdlLndyaXRlKHN1cHBvcnQuVEVTVEZOLCBmb3JtYXQ9J2dpZicsIGZyb21fY29vcmRzPSg0LCA2LCA2LCA5KSkKKyAgICAgICAgaW1hZ2UzID0gdGtpbnRlci5QaG90b0ltYWdlKCc6OmltZzo6dGVzdDMnLCBtYXN0ZXI9c2VsZi5yb290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0PSdnaWYnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZT1zdXBwb3J0LlRFU1RGTikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoaW1hZ2UzKSwgJzo6aW1nOjp0ZXN0MycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2UzLnR5cGUoKSwgJ3Bob3RvJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWFnZTMud2lkdGgoKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWFnZTMuaGVpZ2h0KCksIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2UzLmdldCgwLCAwKSwgaW1hZ2UuZ2V0KDQsIDYpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlMy5nZXQoMSwgMiksIGltYWdlLmdldCg1LCA4KSkKKworCit0ZXN0c19ndWkgPSAoTWlzY1Rlc3QsIEJpdG1hcEltYWdlVGVzdCwgUGhvdG9JbWFnZVRlc3QsKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KCp0ZXN0c19ndWkpCmRpZmYgLS1naXQgYS9MaWIvdGtpbnRlci90ZXN0L3Rlc3RfdGtpbnRlci90ZXN0X21pc2MucHkgYi9MaWIvdGtpbnRlci90ZXN0L3Rlc3RfdGtpbnRlci90ZXN0X21pc2MucHkKaW5kZXggZDMyNWIzMS4uZDhkZTk0OSAxMDA2NDQKLS0tIGEvTGliL3RraW50ZXIvdGVzdC90ZXN0X3RraW50ZXIvdGVzdF9taXNjLnB5CisrKyBiL0xpYi90a2ludGVyL3Rlc3QvdGVzdF90a2ludGVyL3Rlc3RfbWlzYy5weQpAQCAtMSwxNCArMSwxMSBAQAogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgdGtpbnRlcgotZnJvbSB0a2ludGVyIGltcG9ydCB0dGsKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAorZnJvbSB0a2ludGVyLnRlc3Quc3VwcG9ydCBpbXBvcnQgQWJzdHJhY3RUa1Rlc3QKIAogc3VwcG9ydC5yZXF1aXJlcygnZ3VpJykKIAotY2xhc3MgTWlzY1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgZGVmIHNldFVwKHNlbGYpOgotICAgICAgICBzZWxmLnJvb3QgPSB0dGsuc2V0dXBfbWFzdGVyKCkKK2NsYXNzIE1pc2NUZXN0KEFic3RyYWN0VGtUZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgdGVzdF90a19zZXRQYWxldHRlKHNlbGYpOgogICAgICAgICByb290ID0gc2VsZi5yb290CmRpZmYgLS1naXQgYS9MaWIvdGtpbnRlci90ZXN0L3Rlc3RfdGtpbnRlci90ZXN0X3RleHQucHkgYi9MaWIvdGtpbnRlci90ZXN0L3Rlc3RfdGtpbnRlci90ZXN0X3RleHQucHkKaW5kZXggNGMzZmEwNC4uMTNiN2M1NiAxMDA2NDQKLS0tIGEvTGliL3RraW50ZXIvdGVzdC90ZXN0X3RraW50ZXIvdGVzdF90ZXh0LnB5CisrKyBiL0xpYi90a2ludGVyL3Rlc3QvdGVzdF90a2ludGVyL3Rlc3RfdGV4dC5weQpAQCAtMSwxOSArMSwxNiBAQAogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgdGtpbnRlcgogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJlcXVpcmVzLCBydW5fdW5pdHRlc3QKLWZyb20gdGtpbnRlci50dGsgaW1wb3J0IHNldHVwX21hc3RlcgorZnJvbSB0a2ludGVyLnRlc3Quc3VwcG9ydCBpbXBvcnQgQWJzdHJhY3RUa1Rlc3QKIAogcmVxdWlyZXMoJ2d1aScpCiAKLWNsYXNzIFRleHRUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKK2NsYXNzIFRleHRUZXN0KEFic3RyYWN0VGtUZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgIHNlbGYucm9vdCA9IHNldHVwX21hc3RlcigpCisgICAgICAgIHN1cGVyKCkuc2V0VXAoKQogICAgICAgICBzZWxmLnRleHQgPSB0a2ludGVyLlRleHQoc2VsZi5yb290KQogCi0gICAgZGVmIHRlYXJEb3duKHNlbGYpOgotICAgICAgICBzZWxmLnRleHQuZGVzdHJveSgpCi0KICAgICBkZWYgdGVzdF9kZWJ1ZyhzZWxmKToKICAgICAgICAgdGV4dCA9IHNlbGYudGV4dAogICAgICAgICBvbGRkZWJ1ZyA9IHRleHQuZGVidWcoKQpkaWZmIC0tZ2l0IGEvTGliL3RraW50ZXIvdGVzdC90ZXN0X3RraW50ZXIvdGVzdF92YXJpYWJsZXMucHkgYi9MaWIvdGtpbnRlci90ZXN0L3Rlc3RfdGtpbnRlci90ZXN0X3ZhcmlhYmxlcy5weQppbmRleCA5ZDkxMGFjLi40YjcyOTQzIDEwMDY0NAotLS0gYS9MaWIvdGtpbnRlci90ZXN0L3Rlc3RfdGtpbnRlci90ZXN0X3ZhcmlhYmxlcy5weQorKysgYi9MaWIvdGtpbnRlci90ZXN0L3Rlc3RfdGtpbnRlci90ZXN0X3ZhcmlhYmxlcy5weQpAQCAtMSw2ICsxLDcgQEAKIGltcG9ydCB1bml0dGVzdAogCi1mcm9tIHRraW50ZXIgaW1wb3J0IFZhcmlhYmxlLCBTdHJpbmdWYXIsIEludFZhciwgRG91YmxlVmFyLCBCb29sZWFuVmFyLCBUaworZnJvbSB0a2ludGVyIGltcG9ydCAoVmFyaWFibGUsIFN0cmluZ1ZhciwgSW50VmFyLCBEb3VibGVWYXIsIEJvb2xlYW5WYXIsIFRjbCwKKyAgICAgICAgICAgICAgICAgICAgIFRjbEVycm9yKQogCiAKIGNsYXNzIFZhcihWYXJpYWJsZSk6CkBAIC0xNiwxMCArMTcsMTAgQEAKIGNsYXNzIFRlc3RCYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgc2VsZi5yb290ID0gVGsoKQorICAgICAgICBzZWxmLnJvb3QgPSBUY2woKQogCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgotICAgICAgICBzZWxmLnJvb3QuZGVzdHJveSgpCisgICAgICAgIGRlbCBzZWxmLnJvb3QKIAogCiBjbGFzcyBUZXN0VmFyaWFibGUoVGVzdEJhc2UpOgpAQCAtODEsNyArODIsNyBAQAogICAgICAgICAgICAgc2VsZi5yb290LnNldHZhcihiJ3Zhclx4MDBuYW1lJywgInZhbHVlIikKIAogICAgIGRlZiB0ZXN0X2luaXRpYWxpemUoc2VsZik6Ci0gICAgICAgIHYgPSBWYXIoKQorICAgICAgICB2ID0gVmFyKHNlbGYucm9vdCkKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh2LnNpZGVfZWZmZWN0KQogICAgICAgICB2LnNldCgidmFsdWUiKQogICAgICAgICBzZWxmLmFzc2VydFRydWUodi5zaWRlX2VmZmVjdCkKQEAgLTE1OSwxNiArMTYwLDQxIEBACiAKICAgICBkZWYgdGVzdF9kZWZhdWx0KHNlbGYpOgogICAgICAgICB2ID0gQm9vbGVhblZhcihzZWxmLnJvb3QpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRmFsc2UsIHYuZ2V0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModi5nZXQoKSwgRmFsc2UpCiAKICAgICBkZWYgdGVzdF9nZXQoc2VsZik6CiAgICAgICAgIHYgPSBCb29sZWFuVmFyKHNlbGYucm9vdCwgVHJ1ZSwgIm5hbWUiKQotICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKFRydWUsIHYuZ2V0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModi5nZXQoKSwgVHJ1ZSkKICAgICAgICAgc2VsZi5yb290Lmdsb2JhbHNldHZhcigibmFtZSIsICIwIikKLSAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChGYWxzZSwgdi5nZXQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh2LmdldCgpLCBGYWxzZSkKKyAgICAgICAgc2VsZi5yb290Lmdsb2JhbHNldHZhcigibmFtZSIsIDQyIGlmIHNlbGYucm9vdC53YW50b2JqZWN0cygpIGVsc2UgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh2LmdldCgpLCBUcnVlKQorICAgICAgICBzZWxmLnJvb3QuZ2xvYmFsc2V0dmFyKCJuYW1lIiwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh2LmdldCgpLCBGYWxzZSkKKyAgICAgICAgc2VsZi5yb290Lmdsb2JhbHNldHZhcigibmFtZSIsICJvbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModi5nZXQoKSwgVHJ1ZSkKKworICAgIGRlZiB0ZXN0X3NldChzZWxmKToKKyAgICAgICAgdHJ1ZSA9IDEgaWYgc2VsZi5yb290LndhbnRvYmplY3RzKCkgZWxzZSAiMSIKKyAgICAgICAgZmFsc2UgPSAwIGlmIHNlbGYucm9vdC53YW50b2JqZWN0cygpIGVsc2UgIjAiCisgICAgICAgIHYgPSBCb29sZWFuVmFyKHNlbGYucm9vdCwgbmFtZT0ibmFtZSIpCisgICAgICAgIHYuc2V0KFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5yb290Lmdsb2JhbGdldHZhcigibmFtZSIpLCB0cnVlKQorICAgICAgICB2LnNldCgiMCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5yb290Lmdsb2JhbGdldHZhcigibmFtZSIpLCBmYWxzZSkKKyAgICAgICAgdi5zZXQoNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5yb290Lmdsb2JhbGdldHZhcigibmFtZSIpLCB0cnVlKQorICAgICAgICB2LnNldCgwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucm9vdC5nbG9iYWxnZXR2YXIoIm5hbWUiKSwgZmFsc2UpCisgICAgICAgIHYuc2V0KCJvbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5yb290Lmdsb2JhbGdldHZhcigibmFtZSIpLCB0cnVlKQogCiAgICAgZGVmIHRlc3RfaW52YWxpZF92YWx1ZV9kb21haW4oc2VsZik6CisgICAgICAgIGZhbHNlID0gMCBpZiBzZWxmLnJvb3Qud2FudG9iamVjdHMoKSBlbHNlICIwIgogICAgICAgICB2ID0gQm9vbGVhblZhcihzZWxmLnJvb3QsIG5hbWU9Im5hbWUiKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFRjbEVycm9yKToKKyAgICAgICAgICAgIHYuc2V0KCJ2YWx1ZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5yb290Lmdsb2JhbGdldHZhcigibmFtZSIpLCBmYWxzZSkKICAgICAgICAgc2VsZi5yb290Lmdsb2JhbHNldHZhcigibmFtZSIsICJ2YWx1ZSIpCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CiAgICAgICAgICAgICB2LmdldCgpCmRpZmYgLS1naXQgYS9MaWIvdGtpbnRlci90ZXN0L3Rlc3RfdGtpbnRlci90ZXN0X3dpZGdldHMucHkgYi9MaWIvdGtpbnRlci90ZXN0L3Rlc3RfdGtpbnRlci90ZXN0X3dpZGdldHMucHkKaW5kZXggNmVmNzc1MC4uOGJlMDM3MSAxMDA2NDQKLS0tIGEvTGliL3RraW50ZXIvdGVzdC90ZXN0X3RraW50ZXIvdGVzdF93aWRnZXRzLnB5CisrKyBiL0xpYi90a2ludGVyL3Rlc3QvdGVzdF90a2ludGVyL3Rlc3Rfd2lkZ2V0cy5weQpAQCAtMSw1ICsxLDYgQEAKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IHRraW50ZXIKK2Zyb20gdGtpbnRlciBpbXBvcnQgVGNsRXJyb3IKIGltcG9ydCBvcwogaW1wb3J0IHN5cwogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJlcXVpcmVzCkBAIC02NSw3ICs2Niw3IEBACiAgICAgICAgICd0YWtlZm9jdXMnLCAndXNlJywgJ3Zpc3VhbCcsICd3aWR0aCcsCiAgICAgKQogCi0gICAgZGVmIF9jcmVhdGUoc2VsZiwgKiprd2FyZ3MpOgorICAgIGRlZiBjcmVhdGUoc2VsZiwgKiprd2FyZ3MpOgogICAgICAgICByZXR1cm4gdGtpbnRlci5Ub3BsZXZlbChzZWxmLnJvb3QsICoqa3dhcmdzKQogCiAgICAgZGVmIHRlc3RfbWVudShzZWxmKToKQEAgLTEwNCw3ICsxMDUsNyBAQAogICAgICAgICAncmVsaWVmJywgJ3Rha2Vmb2N1cycsICd2aXN1YWwnLCAnd2lkdGgnLAogICAgICkKIAotICAgIGRlZiBfY3JlYXRlKHNlbGYsICoqa3dhcmdzKToKKyAgICBkZWYgY3JlYXRlKHNlbGYsICoqa3dhcmdzKToKICAgICAgICAgcmV0dXJuIHRraW50ZXIuRnJhbWUoc2VsZi5yb290LCAqKmt3YXJncykKIAogCkBAIC0xMTksNyArMTIwLDcgQEAKICAgICAgICAgJ3Rha2Vmb2N1cycsICd0ZXh0JywgJ3Zpc3VhbCcsICd3aWR0aCcsCiAgICAgKQogCi0gICAgZGVmIF9jcmVhdGUoc2VsZiwgKiprd2FyZ3MpOgorICAgIGRlZiBjcmVhdGUoc2VsZiwgKiprd2FyZ3MpOgogICAgICAgICByZXR1cm4gdGtpbnRlci5MYWJlbEZyYW1lKHNlbGYucm9vdCwgKiprd2FyZ3MpCiAKICAgICBkZWYgdGVzdF9sYWJlbGFuY2hvcihzZWxmKToKQEAgLTE1Nyw3ICsxNTgsNyBAQAogICAgICAgICAndW5kZXJsaW5lJywgJ3dpZHRoJywgJ3dyYXBsZW5ndGgnLAogICAgICkKIAotICAgIGRlZiBfY3JlYXRlKHNlbGYsICoqa3dhcmdzKToKKyAgICBkZWYgY3JlYXRlKHNlbGYsICoqa3dhcmdzKToKICAgICAgICAgcmV0dXJuIHRraW50ZXIuTGFiZWwoc2VsZi5yb290LCAqKmt3YXJncykKIAogCkBAIC0xNzQsNyArMTc1LDcgQEAKICAgICAgICAgJ3N0YXRlJywgJ3Rha2Vmb2N1cycsICd0ZXh0JywgJ3RleHR2YXJpYWJsZScsCiAgICAgICAgICd1bmRlcmxpbmUnLCAnd2lkdGgnLCAnd3JhcGxlbmd0aCcpCiAKLSAgICBkZWYgX2NyZWF0ZShzZWxmLCAqKmt3YXJncyk6CisgICAgZGVmIGNyZWF0ZShzZWxmLCAqKmt3YXJncyk6CiAgICAgICAgIHJldHVybiB0a2ludGVyLkJ1dHRvbihzZWxmLnJvb3QsICoqa3dhcmdzKQogCiAgICAgZGVmIHRlc3RfZGVmYXVsdChzZWxmKToKQEAgLTE5OCw3ICsxOTksNyBAQAogICAgICAgICAndW5kZXJsaW5lJywgJ3ZhcmlhYmxlJywgJ3dpZHRoJywgJ3dyYXBsZW5ndGgnLAogICAgICkKIAotICAgIGRlZiBfY3JlYXRlKHNlbGYsICoqa3dhcmdzKToKKyAgICBkZWYgY3JlYXRlKHNlbGYsICoqa3dhcmdzKToKICAgICAgICAgcmV0dXJuIHRraW50ZXIuQ2hlY2tidXR0b24oc2VsZi5yb290LCAqKmt3YXJncykKIAogCkBAIC0yMjYsNyArMjI3LDcgQEAKICAgICAgICAgJ3VuZGVybGluZScsICd2YWx1ZScsICd2YXJpYWJsZScsICd3aWR0aCcsICd3cmFwbGVuZ3RoJywKICAgICApCiAKLSAgICBkZWYgX2NyZWF0ZShzZWxmLCAqKmt3YXJncyk6CisgICAgZGVmIGNyZWF0ZShzZWxmLCAqKmt3YXJncyk6CiAgICAgICAgIHJldHVybiB0a2ludGVyLlJhZGlvYnV0dG9uKHNlbGYucm9vdCwgKiprd2FyZ3MpCiAKICAgICBkZWYgdGVzdF92YWx1ZShzZWxmKToKQEAgLTI0OSw3ICsyNTAsNyBAQAogICAgICkKICAgICBfY29udl9waXhlbHMgPSBzdGF0aWNtZXRob2QocGl4ZWxzX3JvdW5kKQogCi0gICAgZGVmIF9jcmVhdGUoc2VsZiwgKiprd2FyZ3MpOgorICAgIGRlZiBjcmVhdGUoc2VsZiwgKiprd2FyZ3MpOgogICAgICAgICByZXR1cm4gdGtpbnRlci5NZW51YnV0dG9uKHNlbGYucm9vdCwgKiprd2FyZ3MpCiAKICAgICBkZWYgdGVzdF9kaXJlY3Rpb24oc2VsZik6CkBAIC0yNjcsNyArMjY4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICdjcmFzaGVzIHdpdGggQ29jb2EgVGsgKGlzc3VlMTk3MzMpJykKICAgICBkZWYgdGVzdF9pbWFnZShzZWxmKToKICAgICAgICAgd2lkZ2V0ID0gc2VsZi5jcmVhdGUoKQotICAgICAgICBpbWFnZSA9IHRraW50ZXIuUGhvdG9JbWFnZSgnaW1hZ2UxJykKKyAgICAgICAgaW1hZ2UgPSB0a2ludGVyLlBob3RvSW1hZ2UobWFzdGVyPXNlbGYucm9vdCwgbmFtZT0naW1hZ2UxJykKICAgICAgICAgc2VsZi5jaGVja1BhcmFtKHdpZGdldCwgJ2ltYWdlJywgaW1hZ2UsIGNvbnY9c3RyKQogICAgICAgICBlcnJtc2cgPSAnaW1hZ2UgInNwYW0iIGRvZXNuXCd0IGV4aXN0JwogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHRraW50ZXIuVGNsRXJyb3IpIGFzIGNtOgpAQCAtMzAyLDcgKzMwMyw3IEBACiAKIGNsYXNzIE9wdGlvbk1lbnVUZXN0KE1lbnVidXR0b25UZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CiAKLSAgICBkZWYgX2NyZWF0ZShzZWxmLCBkZWZhdWx0PSdiJywgdmFsdWVzPSgnYScsICdiJywgJ2MnKSwgKiprd2FyZ3MpOgorICAgIGRlZiBjcmVhdGUoc2VsZiwgZGVmYXVsdD0nYicsIHZhbHVlcz0oJ2EnLCAnYicsICdjJyksICoqa3dhcmdzKToKICAgICAgICAgcmV0dXJuIHRraW50ZXIuT3B0aW9uTWVudShzZWxmLnJvb3QsIE5vbmUsIGRlZmF1bHQsICp2YWx1ZXMsICoqa3dhcmdzKQogCiAKQEAgLTMyMSw3ICszMjIsNyBAQAogICAgICAgICAndmFsaWRhdGUnLCAndmFsaWRhdGVjb21tYW5kJywgJ3dpZHRoJywgJ3hzY3JvbGxjb21tYW5kJywKICAgICApCiAKLSAgICBkZWYgX2NyZWF0ZShzZWxmLCAqKmt3YXJncyk6CisgICAgZGVmIGNyZWF0ZShzZWxmLCAqKmt3YXJncyk6CiAgICAgICAgIHJldHVybiB0a2ludGVyLkVudHJ5KHNlbGYucm9vdCwgKiprd2FyZ3MpCiAKICAgICBkZWYgdGVzdF9kaXNhYmxlZGJhY2tncm91bmQoc2VsZik6CkBAIC0zOTUsNyArMzk2LDcgQEAKICAgICAgICAgJ3dpZHRoJywgJ3dyYXAnLCAneHNjcm9sbGNvbW1hbmQnLAogICAgICkKIAotICAgIGRlZiBfY3JlYXRlKHNlbGYsICoqa3dhcmdzKToKKyAgICBkZWYgY3JlYXRlKHNlbGYsICoqa3dhcmdzKToKICAgICAgICAgcmV0dXJuIHRraW50ZXIuU3BpbmJveChzZWxmLnJvb3QsICoqa3dhcmdzKQogCiAgICAgdGVzdF9zaG93ID0gTm9uZQpAQCAtNDY2LDExICs0NjcsNyBAQAogCiAgICAgZGVmIHRlc3RfYmJveChzZWxmKToKICAgICAgICAgd2lkZ2V0ID0gc2VsZi5jcmVhdGUoKQotICAgICAgICBiYm94ID0gd2lkZ2V0LmJib3goMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYmJveCksIDQpCi0gICAgICAgIGZvciBpdGVtIGluIGJib3g6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoaXRlbSwgaW50KQotCisgICAgICAgIHNlbGYuYXNzZXJ0SXNCb3VuZGluZ0JveCh3aWRnZXQuYmJveCgwKSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXModGtpbnRlci5UY2xFcnJvciwgd2lkZ2V0LmJib3gsICdub2luZGV4JykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXModGtpbnRlci5UY2xFcnJvciwgd2lkZ2V0LmJib3gsIE5vbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgd2lkZ2V0LmJib3gpCkBAIC00OTMsOSArNDkwLDkgQEAKICAgICAgICAgJ3hzY3JvbGxjb21tYW5kJywgJ3lzY3JvbGxjb21tYW5kJywKICAgICApCiAgICAgaWYgdGNsX3ZlcnNpb24gPCAoOCwgNSk6Ci0gICAgICAgIHdhbnRvYmplY3RzID0gRmFsc2UKKyAgICAgICAgX3N0cmluZ2lmeSA9IFRydWUKIAotICAgIGRlZiBfY3JlYXRlKHNlbGYsICoqa3dhcmdzKToKKyAgICBkZWYgY3JlYXRlKHNlbGYsICoqa3dhcmdzKToKICAgICAgICAgcmV0dXJuIHRraW50ZXIuVGV4dChzZWxmLnJvb3QsICoqa3dhcmdzKQogCiAgICAgZGVmIHRlc3RfYXV0b3NlcGFyYXRvcnMoc2VsZik6CkBAIC02MjMsMTYgKzYyMCwxMiBAQAogCiAgICAgZGVmIHRlc3RfYmJveChzZWxmKToKICAgICAgICAgd2lkZ2V0ID0gc2VsZi5jcmVhdGUoKQotICAgICAgICBiYm94ID0gd2lkZ2V0LmJib3goJzEuMScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGJib3gpLCA0KQotICAgICAgICBmb3IgaXRlbSBpbiBiYm94OgotICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGl0ZW0sIGludCkKLQorICAgICAgICBzZWxmLmFzc2VydElzQm91bmRpbmdCb3god2lkZ2V0LmJib3goJzEuMScpKQogICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh3aWRnZXQuYmJveCgnZW5kJykpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHRraW50ZXIuVGNsRXJyb3IsIHdpZGdldC5iYm94LCAnbm9pbmRleCcpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHRraW50ZXIuVGNsRXJyb3IsIHdpZGdldC5iYm94LCBOb25lKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh0a2ludGVyLlRjbEVycm9yLCB3aWRnZXQuYmJveCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXModGtpbnRlci5UY2xFcnJvciwgd2lkZ2V0LmJib3gsICcxLjEnLCAnZW5kJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB3aWRnZXQuYmJveCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB3aWRnZXQuYmJveCwgJzEuMScsICdlbmQnKQogCiAKIEBhZGRfc3RhbmRhcmRfb3B0aW9ucyhQaXhlbFNpemVUZXN0cywgU3RhbmRhcmRPcHRpb25zVGVzdHMpCkBAIC02NTEsOSArNjQ0LDkgQEAKICAgICApCiAKICAgICBfY29udl9waXhlbHMgPSByb3VuZAotICAgIHdhbnRvYmplY3RzID0gRmFsc2UKKyAgICBfc3RyaW5naWZ5ID0gVHJ1ZQogCi0gICAgZGVmIF9jcmVhdGUoc2VsZiwgKiprd2FyZ3MpOgorICAgIGRlZiBjcmVhdGUoc2VsZiwgKiprd2FyZ3MpOgogICAgICAgICByZXR1cm4gdGtpbnRlci5DYW52YXMoc2VsZi5yb290LCAqKmt3YXJncykKIAogICAgIGRlZiB0ZXN0X2Nsb3NlZW5vdWdoKHNlbGYpOgpAQCAtNzA2LDcgKzY5OSw3IEBACiAgICAgICAgICd0YWtlZm9jdXMnLCAnd2lkdGgnLCAneHNjcm9sbGNvbW1hbmQnLCAneXNjcm9sbGNvbW1hbmQnLAogICAgICkKIAotICAgIGRlZiBfY3JlYXRlKHNlbGYsICoqa3dhcmdzKToKKyAgICBkZWYgY3JlYXRlKHNlbGYsICoqa3dhcmdzKToKICAgICAgICAgcmV0dXJuIHRraW50ZXIuTGlzdGJveChzZWxmLnJvb3QsICoqa3dhcmdzKQogCiAgICAgZGVmIHRlc3RfYWN0aXZlc3R5bGUoc2VsZik6CkBAIC03MTYsNyArNzA5LDcgQEAKIAogICAgIGRlZiB0ZXN0X2xpc3R2YXJpYWJsZShzZWxmKToKICAgICAgICAgd2lkZ2V0ID0gc2VsZi5jcmVhdGUoKQotICAgICAgICB2YXIgPSB0a2ludGVyLkRvdWJsZVZhcigpCisgICAgICAgIHZhciA9IHRraW50ZXIuRG91YmxlVmFyKHNlbGYucm9vdCkKICAgICAgICAgc2VsZi5jaGVja1ZhcmlhYmxlUGFyYW0od2lkZ2V0LCAnbGlzdHZhcmlhYmxlJywgdmFyKQogCiAgICAgZGVmIHRlc3Rfc2VsZWN0bW9kZShzZWxmKToKQEAgLTczMCw2ICs3MjMsMTAxIEBACiAgICAgICAgIHdpZGdldCA9IHNlbGYuY3JlYXRlKCkKICAgICAgICAgc2VsZi5jaGVja0VudW1QYXJhbSh3aWRnZXQsICdzdGF0ZScsICdkaXNhYmxlZCcsICdub3JtYWwnKQogCisgICAgZGVmIHRlc3RfaXRlbWNvbmZpZ3VyZShzZWxmKToKKyAgICAgICAgd2lkZ2V0ID0gc2VsZi5jcmVhdGUoKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVGNsRXJyb3IsICdpdGVtIG51bWJlciAiMCIgb3V0IG9mIHJhbmdlJyk6CisgICAgICAgICAgICB3aWRnZXQuaXRlbWNvbmZpZ3VyZSgwKQorICAgICAgICBjb2xvcnMgPSAncmVkIG9yYW5nZSB5ZWxsb3cgZ3JlZW4gYmx1ZSB3aGl0ZSB2aW9sZXQnLnNwbGl0KCkKKyAgICAgICAgd2lkZ2V0Lmluc2VydCgnZW5kJywgKmNvbG9ycykKKyAgICAgICAgZm9yIGksIGNvbG9yIGluIGVudW1lcmF0ZShjb2xvcnMpOgorICAgICAgICAgICAgd2lkZ2V0Lml0ZW1jb25maWd1cmUoaSwgYmFja2dyb3VuZD1jb2xvcikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgd2lkZ2V0Lml0ZW1jb25maWd1cmUoKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVGNsRXJyb3IsICdiYWQgbGlzdGJveCBpbmRleCAicmVkIicpOgorICAgICAgICAgICAgd2lkZ2V0Lml0ZW1jb25maWd1cmUoJ3JlZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod2lkZ2V0Lml0ZW1jb25maWd1cmUoMCwgJ2JhY2tncm91bmQnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoJ2JhY2tncm91bmQnLCAnYmFja2dyb3VuZCcsICdCYWNrZ3JvdW5kJywgJycsICdyZWQnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3aWRnZXQuaXRlbWNvbmZpZ3VyZSgnZW5kJywgJ2JhY2tncm91bmQnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoJ2JhY2tncm91bmQnLCAnYmFja2dyb3VuZCcsICdCYWNrZ3JvdW5kJywgJycsICd2aW9sZXQnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3aWRnZXQuaXRlbWNvbmZpZ3VyZSgnQDAsMCcsICdiYWNrZ3JvdW5kJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgKCdiYWNrZ3JvdW5kJywgJ2JhY2tncm91bmQnLCAnQmFja2dyb3VuZCcsICcnLCAncmVkJykpCisKKyAgICAgICAgZCA9IHdpZGdldC5pdGVtY29uZmlndXJlKDApCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShkLCBkaWN0KQorICAgICAgICBmb3IgaywgdiBpbiBkLml0ZW1zKCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGxlbih2KSwgKDIsIDUpKQorICAgICAgICAgICAgaWYgbGVuKHYpID09IDU6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2LCB3aWRnZXQuaXRlbWNvbmZpZ3VyZSgwLCBrKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZbNF0sIHdpZGdldC5pdGVtY2dldCgwLCBrKSkKKworICAgIGRlZiBjaGVja19pdGVtY29uZmlndXJlKHNlbGYsIG5hbWUsIHZhbHVlKToKKyAgICAgICAgd2lkZ2V0ID0gc2VsZi5jcmVhdGUoKQorICAgICAgICB3aWRnZXQuaW5zZXJ0KCdlbmQnLCAnYScsICdiJywgJ2MnLCAnZCcpCisgICAgICAgIHdpZGdldC5pdGVtY29uZmlndXJlKDAsICoqe25hbWU6IHZhbHVlfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3aWRnZXQuaXRlbWNvbmZpZ3VyZSgwLCBuYW1lKVs0XSwgdmFsdWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod2lkZ2V0Lml0ZW1jZ2V0KDAsIG5hbWUpLCB2YWx1ZSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFRjbEVycm9yLCAndW5rbm93biBjb2xvciBuYW1lICJzcGFtIicpOgorICAgICAgICAgICAgd2lkZ2V0Lml0ZW1jb25maWd1cmUoMCwgKip7bmFtZTogJ3NwYW0nfSkKKworICAgIGRlZiB0ZXN0X2l0ZW1jb25maWd1cmVfYmFja2dyb3VuZChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19pdGVtY29uZmlndXJlKCdiYWNrZ3JvdW5kJywgJyNmZjAwMDAnKQorCisgICAgZGVmIHRlc3RfaXRlbWNvbmZpZ3VyZV9iZyhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19pdGVtY29uZmlndXJlKCdiZycsICcjZmYwMDAwJykKKworICAgIGRlZiB0ZXN0X2l0ZW1jb25maWd1cmVfZmcoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfaXRlbWNvbmZpZ3VyZSgnZmcnLCAnIzExMDAyMicpCisKKyAgICBkZWYgdGVzdF9pdGVtY29uZmlndXJlX2ZvcmVncm91bmQoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfaXRlbWNvbmZpZ3VyZSgnZm9yZWdyb3VuZCcsICcjMTEwMDIyJykKKworICAgIGRlZiB0ZXN0X2l0ZW1jb25maWd1cmVfc2VsZWN0YmFja2dyb3VuZChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19pdGVtY29uZmlndXJlKCdzZWxlY3RiYWNrZ3JvdW5kJywgJyMxMTAwMjInKQorCisgICAgZGVmIHRlc3RfaXRlbWNvbmZpZ3VyZV9zZWxlY3Rmb3JlZ3JvdW5kKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX2l0ZW1jb25maWd1cmUoJ3NlbGVjdGZvcmVncm91bmQnLCAnIzY1NDMyMScpCisKKyAgICBkZWYgdGVzdF9ib3goc2VsZik6CisgICAgICAgIGxiID0gc2VsZi5jcmVhdGUoKQorICAgICAgICBsYi5pbnNlcnQoMCwgKignZWwlZCcgJSBpIGZvciBpIGluIHJhbmdlKDgpKSkKKyAgICAgICAgbGIucGFjaygpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNCb3VuZGluZ0JveChsYi5iYm94KDApKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShsYi5iYm94KC0xKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUobGIuYmJveCgxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRjbEVycm9yLCBsYi5iYm94LCAnbm9pbmRleCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRjbEVycm9yLCBsYi5iYm94LCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxiLmJib3gpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGIuYmJveCwgMCwgMSkKKworICAgIGRlZiB0ZXN0X2N1cnNlbGVjdGlvbihzZWxmKToKKyAgICAgICAgbGIgPSBzZWxmLmNyZWF0ZSgpCisgICAgICAgIGxiLmluc2VydCgwLCAqKCdlbCVkJyAlIGkgZm9yIGkgaW4gcmFuZ2UoOCkpKQorICAgICAgICBsYi5zZWxlY3Rpb25fY2xlYXIoMCwgdGtpbnRlci5FTkQpCisgICAgICAgIGxiLnNlbGVjdGlvbl9zZXQoMiwgNCkKKyAgICAgICAgbGIuc2VsZWN0aW9uX3NldCg2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxiLmN1cnNlbGVjdGlvbigpLCAoMiwgMywgNCwgNikpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGIuY3Vyc2VsZWN0aW9uLCAwKQorCisgICAgZGVmIHRlc3RfZ2V0KHNlbGYpOgorICAgICAgICBsYiA9IHNlbGYuY3JlYXRlKCkKKyAgICAgICAgbGIuaW5zZXJ0KDAsICooJ2VsJWQnICUgaSBmb3IgaSBpbiByYW5nZSg4KSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGIuZ2V0KDApLCAnZWwwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsYi5nZXQoMyksICdlbDMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxiLmdldCgnZW5kJyksICdlbDcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxiLmdldCg4KSwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGIuZ2V0KC0xKSwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGIuZ2V0KDMsIDUpLCAoJ2VsMycsICdlbDQnLCAnZWw1JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGIuZ2V0KDUsICdlbmQnKSwgKCdlbDUnLCAnZWw2JywgJ2VsNycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxiLmdldCg1LCAwKSwgKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGIuZ2V0KDAsIDApLCAoJ2VsMCcsKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGNsRXJyb3IsIGxiLmdldCwgJ25vaW5kZXgnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUY2xFcnJvciwgbGIuZ2V0LCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxiLmdldCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGNsRXJyb3IsIGxiLmdldCwgJ2VuZCcsICdub2luZGV4JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYi5nZXQsIDEsIDIsIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRjbEVycm9yLCBsYi5nZXQsIDIuNCkKKworCiBAYWRkX3N0YW5kYXJkX29wdGlvbnMoUGl4ZWxTaXplVGVzdHMsIFN0YW5kYXJkT3B0aW9uc1Rlc3RzKQogY2xhc3MgU2NhbGVUZXN0KEFic3RyYWN0V2lkZ2V0VGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgogICAgIE9QVElPTlMgPSAoCkBAIC03NDMsNyArODMxLDcgQEAKICAgICApCiAgICAgZGVmYXVsdF9vcmllbnQgPSAndmVydGljYWwnCiAKLSAgICBkZWYgX2NyZWF0ZShzZWxmLCAqKmt3YXJncyk6CisgICAgZGVmIGNyZWF0ZShzZWxmLCAqKmt3YXJncyk6CiAgICAgICAgIHJldHVybiB0a2ludGVyLlNjYWxlKHNlbGYucm9vdCwgKiprd2FyZ3MpCiAKICAgICBkZWYgdGVzdF9iaWdpbmNyZW1lbnQoc2VsZik6CkBAIC04MDksMTAgKzg5NywxMCBAQAogICAgICAgICAndGFrZWZvY3VzJywgJ3Ryb3VnaGNvbG9yJywgJ3dpZHRoJywKICAgICApCiAgICAgX2NvbnZfcGl4ZWxzID0gcm91bmQKLSAgICB3YW50b2JqZWN0cyA9IEZhbHNlCisgICAgX3N0cmluZ2lmeSA9IFRydWUKICAgICBkZWZhdWx0X29yaWVudCA9ICd2ZXJ0aWNhbCcKIAotICAgIGRlZiBfY3JlYXRlKHNlbGYsICoqa3dhcmdzKToKKyAgICBkZWYgY3JlYXRlKHNlbGYsICoqa3dhcmdzKToKICAgICAgICAgcmV0dXJuIHRraW50ZXIuU2Nyb2xsYmFyKHNlbGYucm9vdCwgKiprd2FyZ3MpCiAKICAgICBkZWYgdGVzdF9hY3RpdmVyZWxpZWYoc2VsZik6CkBAIC04MjgsNiArOTE2LDI0IEBACiAgICAgICAgIHNlbGYuY2hlY2tFbnVtUGFyYW0od2lkZ2V0LCAnb3JpZW50JywgJ3ZlcnRpY2FsJywgJ2hvcml6b250YWwnLAogICAgICAgICAgICAgICAgIGVycm1zZz0nYmFkIG9yaWVudGF0aW9uICJ7fSI6IG11c3QgYmUgdmVydGljYWwgb3IgaG9yaXpvbnRhbCcpCiAKKyAgICBkZWYgdGVzdF9hY3RpdmF0ZShzZWxmKToKKyAgICAgICAgc2IgPSBzZWxmLmNyZWF0ZSgpCisgICAgICAgIGZvciBlIGluICgnYXJyb3cxJywgJ3NsaWRlcicsICdhcnJvdzInKToKKyAgICAgICAgICAgIHNiLmFjdGl2YXRlKGUpCisgICAgICAgIHNiLmFjdGl2YXRlKCcnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNiLmFjdGl2YXRlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNiLmFjdGl2YXRlLCAnYXJyb3cxJywgJ2Fycm93MicpCisKKyAgICBkZWYgdGVzdF9zZXQoc2VsZik6CisgICAgICAgIHNiID0gc2VsZi5jcmVhdGUoKQorICAgICAgICBzYi5zZXQoMC4yLCAwLjQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2IuZ2V0KCksICgwLjIsIDAuNCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRjbEVycm9yLCBzYi5zZXQsICdhYmMnLCAnZGVmJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGNsRXJyb3IsIHNiLnNldCwgMC42LCAnZGVmJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGNsRXJyb3IsIHNiLnNldCwgMC42LCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUY2xFcnJvciwgc2Iuc2V0LCAwLjYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRjbEVycm9yLCBzYi5zZXQsIDAuNiwgMC43LCAwLjgpCisKIAogQGFkZF9zdGFuZGFyZF9vcHRpb25zKFN0YW5kYXJkT3B0aW9uc1Rlc3RzKQogY2xhc3MgUGFuZWRXaW5kb3dUZXN0KEFic3RyYWN0V2lkZ2V0VGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtODQwLDcgKzk0Niw3IEBACiAgICAgKQogICAgIGRlZmF1bHRfb3JpZW50ID0gJ2hvcml6b250YWwnCiAKLSAgICBkZWYgX2NyZWF0ZShzZWxmLCAqKmt3YXJncyk6CisgICAgZGVmIGNyZWF0ZShzZWxmLCAqKmt3YXJncyk6CiAgICAgICAgIHJldHVybiB0a2ludGVyLlBhbmVkV2luZG93KHNlbGYucm9vdCwgKiprd2FyZ3MpCiAKICAgICBkZWYgdGVzdF9oYW5kbGVwYWQoc2VsZik6CkBAIC04ODcsNiArOTkzLDEwNSBAQAogICAgICAgICBzZWxmLmNoZWNrUGl4ZWxzUGFyYW0od2lkZ2V0LCAnd2lkdGgnLCA0MDIsIDQwMy40LCA0MDQuNiwgLTQwMiwgMCwgJzVpJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnY9bm9jb252KQogCisgICAgZGVmIGNyZWF0ZTIoc2VsZik6CisgICAgICAgIHAgPSBzZWxmLmNyZWF0ZSgpCisgICAgICAgIGIgPSB0a2ludGVyLkJ1dHRvbihwKQorICAgICAgICBjID0gdGtpbnRlci5CdXR0b24ocCkKKyAgICAgICAgcC5hZGQoYikKKyAgICAgICAgcC5hZGQoYykKKyAgICAgICAgcmV0dXJuIHAsIGIsIGMKKworICAgIGRlZiB0ZXN0X3BhbmVjb25maWd1cmUoc2VsZik6CisgICAgICAgIHAsIGIsIGMgPSBzZWxmLmNyZWF0ZTIoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHAucGFuZWNvbmZpZ3VyZSkKKyAgICAgICAgZCA9IHAucGFuZWNvbmZpZ3VyZShiKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZCwgZGljdCkKKyAgICAgICAgZm9yIGssIHYgaW4gZC5pdGVtcygpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odiksIDUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHYsIHAucGFuZWNvbmZpZ3VyZShiLCBrKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodls0XSwgcC5wYW5lY2dldChiLCBrKSkKKworICAgIGRlZiBjaGVja19wYW5lY29uZmlndXJlKHNlbGYsIHAsIGIsIG5hbWUsIHZhbHVlLCBleHBlY3RlZCwgc3RyaW5naWZ5PUZhbHNlKToKKyAgICAgICAgY29udiA9IGxhbWJkYSB4OiB4CisgICAgICAgIGlmIG5vdCBzZWxmLndhbnRvYmplY3RzIG9yIHN0cmluZ2lmeToKKyAgICAgICAgICAgIGV4cGVjdGVkID0gc3RyKGV4cGVjdGVkKQorICAgICAgICBpZiBzZWxmLndhbnRvYmplY3RzIGFuZCBzdHJpbmdpZnk6CisgICAgICAgICAgICBjb252ID0gc3RyCisgICAgICAgIHAucGFuZWNvbmZpZ3VyZShiLCAqKntuYW1lOiB2YWx1ZX0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29udihwLnBhbmVjb25maWd1cmUoYiwgbmFtZSlbNF0pLCBleHBlY3RlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb252KHAucGFuZWNnZXQoYiwgbmFtZSkpLCBleHBlY3RlZCkKKworICAgIGRlZiBjaGVja19wYW5lY29uZmlndXJlX2JhZChzZWxmLCBwLCBiLCBuYW1lLCBtc2cpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVGNsRXJyb3IsIG1zZyk6CisgICAgICAgICAgICBwLnBhbmVjb25maWd1cmUoYiwgKip7bmFtZTogJ2JhZFZhbHVlJ30pCisKKyAgICBkZWYgdGVzdF9wYW5lY29uZmlndXJlX2FmdGVyKHNlbGYpOgorICAgICAgICBwLCBiLCBjID0gc2VsZi5jcmVhdGUyKCkKKyAgICAgICAgc2VsZi5jaGVja19wYW5lY29uZmlndXJlKHAsIGIsICdhZnRlcicsIGMsIHN0cihjKSkKKyAgICAgICAgc2VsZi5jaGVja19wYW5lY29uZmlndXJlX2JhZChwLCBiLCAnYWZ0ZXInLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWQgd2luZG93IHBhdGggbmFtZSAiYmFkVmFsdWUiJykKKworICAgIGRlZiB0ZXN0X3BhbmVjb25maWd1cmVfYmVmb3JlKHNlbGYpOgorICAgICAgICBwLCBiLCBjID0gc2VsZi5jcmVhdGUyKCkKKyAgICAgICAgc2VsZi5jaGVja19wYW5lY29uZmlndXJlKHAsIGIsICdiZWZvcmUnLCBjLCBzdHIoYykpCisgICAgICAgIHNlbGYuY2hlY2tfcGFuZWNvbmZpZ3VyZV9iYWQocCwgYiwgJ2JlZm9yZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhZCB3aW5kb3cgcGF0aCBuYW1lICJiYWRWYWx1ZSInKQorCisgICAgZGVmIHRlc3RfcGFuZWNvbmZpZ3VyZV9oZWlnaHQoc2VsZik6CisgICAgICAgIHAsIGIsIGMgPSBzZWxmLmNyZWF0ZTIoKQorICAgICAgICBzZWxmLmNoZWNrX3BhbmVjb25maWd1cmUocCwgYiwgJ2hlaWdodCcsIDEwLCAxMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ2lmeT1nZXRfdGtfcGF0Y2hsZXZlbCgpIDwgKDgsIDUsIDExKSkKKyAgICAgICAgc2VsZi5jaGVja19wYW5lY29uZmlndXJlX2JhZChwLCBiLCAnaGVpZ2h0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFkIHNjcmVlbiBkaXN0YW5jZSAiYmFkVmFsdWUiJykKKworICAgIEByZXF1aXJlc190Y2woOCwgNSkKKyAgICBkZWYgdGVzdF9wYW5lY29uZmlndXJlX2hpZGUoc2VsZik6CisgICAgICAgIHAsIGIsIGMgPSBzZWxmLmNyZWF0ZTIoKQorICAgICAgICBzZWxmLmNoZWNrX3BhbmVjb25maWd1cmUocCwgYiwgJ2hpZGUnLCBGYWxzZSwgMCkKKyAgICAgICAgc2VsZi5jaGVja19wYW5lY29uZmlndXJlX2JhZChwLCBiLCAnaGlkZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4cGVjdGVkIGJvb2xlYW4gdmFsdWUgYnV0IGdvdCAiYmFkVmFsdWUiJykKKworICAgIGRlZiB0ZXN0X3BhbmVjb25maWd1cmVfbWluc2l6ZShzZWxmKToKKyAgICAgICAgcCwgYiwgYyA9IHNlbGYuY3JlYXRlMigpCisgICAgICAgIHNlbGYuY2hlY2tfcGFuZWNvbmZpZ3VyZShwLCBiLCAnbWluc2l6ZScsIDEwLCAxMCkKKyAgICAgICAgc2VsZi5jaGVja19wYW5lY29uZmlndXJlX2JhZChwLCBiLCAnbWluc2l6ZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhZCBzY3JlZW4gZGlzdGFuY2UgImJhZFZhbHVlIicpCisKKyAgICBkZWYgdGVzdF9wYW5lY29uZmlndXJlX3BhZHgoc2VsZik6CisgICAgICAgIHAsIGIsIGMgPSBzZWxmLmNyZWF0ZTIoKQorICAgICAgICBzZWxmLmNoZWNrX3BhbmVjb25maWd1cmUocCwgYiwgJ3BhZHgnLCAxLjMsIDEpCisgICAgICAgIHNlbGYuY2hlY2tfcGFuZWNvbmZpZ3VyZV9iYWQocCwgYiwgJ3BhZHgnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWQgc2NyZWVuIGRpc3RhbmNlICJiYWRWYWx1ZSInKQorCisgICAgZGVmIHRlc3RfcGFuZWNvbmZpZ3VyZV9wYWR5KHNlbGYpOgorICAgICAgICBwLCBiLCBjID0gc2VsZi5jcmVhdGUyKCkKKyAgICAgICAgc2VsZi5jaGVja19wYW5lY29uZmlndXJlKHAsIGIsICdwYWR5JywgMS4zLCAxKQorICAgICAgICBzZWxmLmNoZWNrX3BhbmVjb25maWd1cmVfYmFkKHAsIGIsICdwYWR5JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFkIHNjcmVlbiBkaXN0YW5jZSAiYmFkVmFsdWUiJykKKworICAgIGRlZiB0ZXN0X3BhbmVjb25maWd1cmVfc3RpY2t5KHNlbGYpOgorICAgICAgICBwLCBiLCBjID0gc2VsZi5jcmVhdGUyKCkKKyAgICAgICAgc2VsZi5jaGVja19wYW5lY29uZmlndXJlKHAsIGIsICdzdGlja3knLCAnbnNldycsICduZXN3JykKKyAgICAgICAgc2VsZi5jaGVja19wYW5lY29uZmlndXJlX2JhZChwLCBiLCAnc3RpY2t5JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFkIHN0aWNreW5lc3MgdmFsdWUgImJhZFZhbHVlIjogbXVzdCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JlIGEgc3RyaW5nIGNvbnRhaW5pbmcgemVybyBvciBtb3JlIG9mICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbiwgZSwgcywgYW5kIHcnKQorCisgICAgQHJlcXVpcmVzX3RjbCg4LCA1KQorICAgIGRlZiB0ZXN0X3BhbmVjb25maWd1cmVfc3RyZXRjaChzZWxmKToKKyAgICAgICAgcCwgYiwgYyA9IHNlbGYuY3JlYXRlMigpCisgICAgICAgIHNlbGYuY2hlY2tfcGFuZWNvbmZpZ3VyZShwLCBiLCAnc3RyZXRjaCcsICdhbHcnLCAnYWx3YXlzJykKKyAgICAgICAgc2VsZi5jaGVja19wYW5lY29uZmlndXJlX2JhZChwLCBiLCAnc3RyZXRjaCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhZCBzdHJldGNoICJiYWRWYWx1ZSI6IG11c3QgYmUgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhbHdheXMsIGZpcnN0LCBsYXN0LCBtaWRkbGUsIG9yIG5ldmVyJykKKworICAgIGRlZiB0ZXN0X3BhbmVjb25maWd1cmVfd2lkdGgoc2VsZik6CisgICAgICAgIHAsIGIsIGMgPSBzZWxmLmNyZWF0ZTIoKQorICAgICAgICBzZWxmLmNoZWNrX3BhbmVjb25maWd1cmUocCwgYiwgJ3dpZHRoJywgMTAsIDEwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5naWZ5PWdldF90a19wYXRjaGxldmVsKCkgPCAoOCwgNSwgMTEpKQorICAgICAgICBzZWxmLmNoZWNrX3BhbmVjb25maWd1cmVfYmFkKHAsIGIsICd3aWR0aCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhZCBzY3JlZW4gZGlzdGFuY2UgImJhZFZhbHVlIicpCisKIAogQGFkZF9zdGFuZGFyZF9vcHRpb25zKFN0YW5kYXJkT3B0aW9uc1Rlc3RzKQogY2xhc3MgTWVudVRlc3QoQWJzdHJhY3RXaWRnZXRUZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC04OTksNyArMTEwNCw3IEBACiAgICAgKQogICAgIF9jb252X3BpeGVscyA9IG5vY29udgogCi0gICAgZGVmIF9jcmVhdGUoc2VsZiwgKiprd2FyZ3MpOgorICAgIGRlZiBjcmVhdGUoc2VsZiwgKiprd2FyZ3MpOgogICAgICAgICByZXR1cm4gdGtpbnRlci5NZW51KHNlbGYucm9vdCwgKiprd2FyZ3MpCiAKICAgICBkZWYgdGVzdF9wb3N0Y29tbWFuZChzZWxmKToKQEAgLTkyMyw2ICsxMTI4LDM5IEBACiAgICAgICAgIHNlbGYuY2hlY2tFbnVtUGFyYW0od2lkZ2V0LCAndHlwZScsCiAgICAgICAgICAgICAgICAgJ25vcm1hbCcsICd0ZWFyb2ZmJywgJ21lbnViYXInKQogCisgICAgZGVmIHRlc3RfZW50cnljb25maWd1cmUoc2VsZik6CisgICAgICAgIG0xID0gc2VsZi5jcmVhdGUoKQorICAgICAgICBtMS5hZGRfY29tbWFuZChsYWJlbD0ndGVzdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbTEuZW50cnljb25maWd1cmUpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUY2xFcnJvciwgJ2JhZCBtZW51IGVudHJ5IGluZGV4ICJmb28iJyk6CisgICAgICAgICAgICBtMS5lbnRyeWNvbmZpZ3VyZSgnZm9vJykKKyAgICAgICAgZCA9IG0xLmVudHJ5Y29uZmlndXJlKDEpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShkLCBkaWN0KQorICAgICAgICBmb3IgaywgdiBpbiBkLml0ZW1zKCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoaywgc3RyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHYsIHR1cGxlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odiksIDUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZbMF0sIGspCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0xLmVudHJ5Y2dldCgxLCBrKSwgdls0XSkKKyAgICAgICAgbTEuZGVzdHJveSgpCisKKyAgICBkZWYgdGVzdF9lbnRyeWNvbmZpZ3VyZV9sYWJlbChzZWxmKToKKyAgICAgICAgbTEgPSBzZWxmLmNyZWF0ZSgpCisgICAgICAgIG0xLmFkZF9jb21tYW5kKGxhYmVsPSd0ZXN0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtMS5lbnRyeWNnZXQoMSwgJ2xhYmVsJyksICd0ZXN0JykKKyAgICAgICAgbTEuZW50cnljb25maWd1cmUoMSwgbGFiZWw9J2NoYW5nZWQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0xLmVudHJ5Y2dldCgxLCAnbGFiZWwnKSwgJ2NoYW5nZWQnKQorCisgICAgZGVmIHRlc3RfZW50cnljb25maWd1cmVfdmFyaWFibGUoc2VsZik6CisgICAgICAgIG0xID0gc2VsZi5jcmVhdGUoKQorICAgICAgICB2MSA9IHRraW50ZXIuQm9vbGVhblZhcihzZWxmLnJvb3QpCisgICAgICAgIHYyID0gdGtpbnRlci5Cb29sZWFuVmFyKHNlbGYucm9vdCkKKyAgICAgICAgbTEuYWRkX2NoZWNrYnV0dG9uKHZhcmlhYmxlPXYxLCBvbnZhbHVlPVRydWUsIG9mZnZhbHVlPUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9J05vbnNlbnNlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIobTEuZW50cnljZ2V0KDEsICd2YXJpYWJsZScpKSwgc3RyKHYxKSkKKyAgICAgICAgbTEuZW50cnljb25maWd1cmUoMSwgdmFyaWFibGU9djIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKG0xLmVudHJ5Y2dldCgxLCAndmFyaWFibGUnKSksIHN0cih2MikpCisKIAogQGFkZF9zdGFuZGFyZF9vcHRpb25zKFBpeGVsU2l6ZVRlc3RzLCBTdGFuZGFyZE9wdGlvbnNUZXN0cykKIGNsYXNzIE1lc3NhZ2VUZXN0KEFic3RyYWN0V2lkZ2V0VGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtOTM1LDcgKzExNzMsNyBAQAogICAgICkKICAgICBfY29udl9wYWRfcGl4ZWxzID0gbm9jb252CiAKLSAgICBkZWYgX2NyZWF0ZShzZWxmLCAqKmt3YXJncyk6CisgICAgZGVmIGNyZWF0ZShzZWxmLCAqKmt3YXJncyk6CiAgICAgICAgIHJldHVybiB0a2ludGVyLk1lc3NhZ2Uoc2VsZi5yb290LCAqKmt3YXJncykKIAogICAgIGRlZiB0ZXN0X2FzcGVjdChzZWxmKToKZGlmZiAtLWdpdCBhL0xpYi90a2ludGVyL3Rlc3QvdGVzdF90dGsvdGVzdF9leHRlbnNpb25zLnB5IGIvTGliL3RraW50ZXIvdGVzdC90ZXN0X3R0ay90ZXN0X2V4dGVuc2lvbnMucHkKaW5kZXggZDY5OTU0Ni4uYzNhZjA2YyAxMDA2NDQKLS0tIGEvTGliL3RraW50ZXIvdGVzdC90ZXN0X3R0ay90ZXN0X2V4dGVuc2lvbnMucHkKKysrIGIvTGliL3RraW50ZXIvdGVzdC90ZXN0X3R0ay90ZXN0X2V4dGVuc2lvbnMucHkKQEAgLTIsMzQgKzIsMzAgQEAKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IHRraW50ZXIKIGZyb20gdGtpbnRlciBpbXBvcnQgdHRrCi1mcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcmVxdWlyZXMsIHJ1bl91bml0dGVzdAotCi1pbXBvcnQgdGtpbnRlci50ZXN0LnN1cHBvcnQgYXMgc3VwcG9ydAorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJlcXVpcmVzLCBydW5fdW5pdHRlc3QsIHN3YXBfYXR0cgorZnJvbSB0a2ludGVyLnRlc3Quc3VwcG9ydCBpbXBvcnQgQWJzdHJhY3RUa1Rlc3QsIGRlc3Ryb3lfZGVmYXVsdF9yb290CiAKIHJlcXVpcmVzKCdndWknKQogCi1jbGFzcyBMYWJlbGVkU2NhbGVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgc3VwcG9ydC5yb290X2RlaWNvbmlmeSgpCitjbGFzcyBMYWJlbGVkU2NhbGVUZXN0KEFic3RyYWN0VGtUZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgdGVhckRvd24oc2VsZik6Ci0gICAgICAgIHN1cHBvcnQucm9vdF93aXRoZHJhdygpCi0KKyAgICAgICAgc2VsZi5yb290LnVwZGF0ZV9pZGxldGFza3MoKQorICAgICAgICBzdXBlcigpLnRlYXJEb3duKCkKIAogICAgIGRlZiB0ZXN0X3dpZGdldF9kZXN0cm95KHNlbGYpOgogICAgICAgICAjIGF1dG9tYXRpY2FsbHkgY3JlYXRlZCB2YXJpYWJsZQotICAgICAgICB4ID0gdHRrLkxhYmVsZWRTY2FsZSgpCisgICAgICAgIHggPSB0dGsuTGFiZWxlZFNjYWxlKHNlbGYucm9vdCkKICAgICAgICAgdmFyID0geC5fdmFyaWFibGUuX25hbWUKICAgICAgICAgeC5kZXN0cm95KCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXModGtpbnRlci5UY2xFcnJvciwgeC50ay5nbG9iYWxnZXR2YXIsIHZhcikKIAogICAgICAgICAjIG1hbnVhbGx5IGNyZWF0ZWQgdmFyaWFibGUKLSAgICAgICAgbXl2YXIgPSB0a2ludGVyLkRvdWJsZVZhcigpCisgICAgICAgIG15dmFyID0gdGtpbnRlci5Eb3VibGVWYXIoc2VsZi5yb290KQogICAgICAgICBuYW1lID0gbXl2YXIuX25hbWUKLSAgICAgICAgeCA9IHR0ay5MYWJlbGVkU2NhbGUodmFyaWFibGU9bXl2YXIpCisgICAgICAgIHggPSB0dGsuTGFiZWxlZFNjYWxlKHNlbGYucm9vdCwgdmFyaWFibGU9bXl2YXIpCiAgICAgICAgIHguZGVzdHJveSgpCi0gICAgICAgIGlmIHgudGsud2FudG9iamVjdHMoKToKKyAgICAgICAgaWYgc2VsZi53YW50b2JqZWN0czoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC50ay5nbG9iYWxnZXR2YXIobmFtZSksIG15dmFyLmdldCgpKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbG9hdCh4LnRrLmdsb2JhbGdldHZhcihuYW1lKSksIG15dmFyLmdldCgpKQpAQCAtMzcsMjYgKzMzLDM2IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHRraW50ZXIuVGNsRXJyb3IsIHgudGsuZ2xvYmFsZ2V0dmFyLCBuYW1lKQogCiAgICAgICAgICMgY2hlY2tpbmcgdGhhdCB0aGUgdHJhY2luZyBjYWxsYmFjayBpcyBwcm9wZXJseSByZW1vdmVkCi0gICAgICAgIG15dmFyID0gdGtpbnRlci5JbnRWYXIoKQorICAgICAgICBteXZhciA9IHRraW50ZXIuSW50VmFyKHNlbGYucm9vdCkKICAgICAgICAgIyBMYWJlbGVkU2NhbGUgd2lsbCBzdGFydCB0cmFjaW5nIG15dmFyCi0gICAgICAgIHggPSB0dGsuTGFiZWxlZFNjYWxlKHZhcmlhYmxlPW15dmFyKQorICAgICAgICB4ID0gdHRrLkxhYmVsZWRTY2FsZShzZWxmLnJvb3QsIHZhcmlhYmxlPW15dmFyKQogICAgICAgICB4LmRlc3Ryb3koKQogICAgICAgICAjIFVubGVzcyB0aGUgdHJhY2luZyBjYWxsYmFjayB3YXMgcmVtb3ZlZCwgY3JlYXRpbmcgYSBuZXcKICAgICAgICAgIyBMYWJlbGVkU2NhbGUgd2l0aCB0aGUgc2FtZSB2YXIgd2lsbCBjYXVzZSBhbiBlcnJvciBub3cuIFRoaXMKICAgICAgICAgIyBoYXBwZW5zIGJlY2F1c2UgdGhlIHZhcmlhYmxlIHdpbGwgYmUgc2V0IHRvIChwb3NzaWJseSkgYSBuZXcKICAgICAgICAgIyB2YWx1ZSB3aGljaCBjYXVzZXMgdGhlIHRyYWNpbmcgY2FsbGJhY2sgdG8gYmUgY2FsbGVkIGFuZCB0aGVuCiAgICAgICAgICMgaXQgdHJpZXMgY2FsbGluZyBpbnN0YW5jZSBhdHRyaWJ1dGVzIG5vdCB5ZXQgZGVmaW5lZC4KLSAgICAgICAgdHRrLkxhYmVsZWRTY2FsZSh2YXJpYWJsZT1teXZhcikKKyAgICAgICAgdHRrLkxhYmVsZWRTY2FsZShzZWxmLnJvb3QsIHZhcmlhYmxlPW15dmFyKQogICAgICAgICBpZiBoYXNhdHRyKHN5cywgJ2xhc3RfdHlwZScpOgogICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChzeXMubGFzdF90eXBlLCB0a2ludGVyLlRjbEVycm9yKQogCiAKKyAgICBkZWYgdGVzdF9pbml0aWFsaXphdGlvbl9ub19tYXN0ZXIoc2VsZik6CisgICAgICAgICMgbm8gbWFzdGVyIHBhc3NpbmcKKyAgICAgICAgd2l0aCBzd2FwX2F0dHIodGtpbnRlciwgJ19kZWZhdWx0X3Jvb3QnLCBOb25lKSwgXAorICAgICAgICAgICAgIHN3YXBfYXR0cih0a2ludGVyLCAnX3N1cHBvcnRfZGVmYXVsdF9yb290JywgVHJ1ZSk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgeCA9IHR0ay5MYWJlbGVkU2NhbGUoKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHRraW50ZXIuX2RlZmF1bHRfcm9vdCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgubWFzdGVyLCB0a2ludGVyLl9kZWZhdWx0X3Jvb3QpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LnRrLCB0a2ludGVyLl9kZWZhdWx0X3Jvb3QudGspCisgICAgICAgICAgICAgICAgeC5kZXN0cm95KCkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgZGVzdHJveV9kZWZhdWx0X3Jvb3QoKQorCiAgICAgZGVmIHRlc3RfaW5pdGlhbGl6YXRpb24oc2VsZik6CiAgICAgICAgICMgbWFzdGVyIHBhc3NpbmcKLSAgICAgICAgeCA9IHR0ay5MYWJlbGVkU2NhbGUoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgubWFzdGVyLCB0a2ludGVyLl9kZWZhdWx0X3Jvb3QpCi0gICAgICAgIHguZGVzdHJveSgpCi0gICAgICAgIG1hc3RlciA9IHRraW50ZXIuRnJhbWUoKQorICAgICAgICBtYXN0ZXIgPSB0a2ludGVyLkZyYW1lKHNlbGYucm9vdCkKICAgICAgICAgeCA9IHR0ay5MYWJlbGVkU2NhbGUobWFzdGVyKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgubWFzdGVyLCBtYXN0ZXIpCiAgICAgICAgIHguZGVzdHJveSgpCkBAIC02NCwyNSArNzAsMjUgQEAKICAgICAgICAgIyB2YXJpYWJsZSBpbml0aWFsaXphdGlvbi9wYXNzaW5nCiAgICAgICAgIHBhc3NlZF9leHBlY3RlZCA9ICgoJzAnLCAwKSwgKDAsIDApLCAoMTAsIDEwKSwKICAgICAgICAgICAgICgtMSwgLTEpLCAoc3lzLm1heHNpemUgKyAxLCBzeXMubWF4c2l6ZSArIDEpKQotICAgICAgICBpZiB4LnRrLndhbnRvYmplY3RzKCk6CisgICAgICAgIGlmIHNlbGYud2FudG9iamVjdHM6CiAgICAgICAgICAgICBwYXNzZWRfZXhwZWN0ZWQgKz0gKCgyLjUsIDIpLCkKICAgICAgICAgZm9yIHBhaXIgaW4gcGFzc2VkX2V4cGVjdGVkOgotICAgICAgICAgICAgeCA9IHR0ay5MYWJlbGVkU2NhbGUoZnJvbV89cGFpclswXSkKKyAgICAgICAgICAgIHggPSB0dGsuTGFiZWxlZFNjYWxlKHNlbGYucm9vdCwgZnJvbV89cGFpclswXSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC52YWx1ZSwgcGFpclsxXSkKICAgICAgICAgICAgIHguZGVzdHJveSgpCi0gICAgICAgIHggPSB0dGsuTGFiZWxlZFNjYWxlKGZyb21fPScyLjUnKQorICAgICAgICB4ID0gdHRrLkxhYmVsZWRTY2FsZShzZWxmLnJvb3QsIGZyb21fPScyLjUnKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB4Ll92YXJpYWJsZS5nZXQpCiAgICAgICAgIHguZGVzdHJveSgpCi0gICAgICAgIHggPSB0dGsuTGFiZWxlZFNjYWxlKGZyb21fPU5vbmUpCisgICAgICAgIHggPSB0dGsuTGFiZWxlZFNjYWxlKHNlbGYucm9vdCwgZnJvbV89Tm9uZSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgeC5fdmFyaWFibGUuZ2V0KQogICAgICAgICB4LmRlc3Ryb3koKQogICAgICAgICAjIHZhcmlhYmxlIHNob3VsZCBoYXZlIGl0cyBkZWZhdWx0IHZhbHVlIHNldCB0byB0aGUgZnJvbV8gdmFsdWUKLSAgICAgICAgbXl2YXIgPSB0a2ludGVyLkRvdWJsZVZhcih2YWx1ZT0yMCkKLSAgICAgICAgeCA9IHR0ay5MYWJlbGVkU2NhbGUodmFyaWFibGU9bXl2YXIpCisgICAgICAgIG15dmFyID0gdGtpbnRlci5Eb3VibGVWYXIoc2VsZi5yb290LCB2YWx1ZT0yMCkKKyAgICAgICAgeCA9IHR0ay5MYWJlbGVkU2NhbGUoc2VsZi5yb290LCB2YXJpYWJsZT1teXZhcikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LnZhbHVlLCAwKQogICAgICAgICB4LmRlc3Ryb3koKQogICAgICAgICAjIGNoZWNrIHRoYXQgaXQgaXMgcmVhbGx5IHVzaW5nIGEgRG91YmxlVmFyCi0gICAgICAgIHggPSB0dGsuTGFiZWxlZFNjYWxlKHZhcmlhYmxlPW15dmFyLCBmcm9tXz0wLjUpCisgICAgICAgIHggPSB0dGsuTGFiZWxlZFNjYWxlKHNlbGYucm9vdCwgdmFyaWFibGU9bXl2YXIsIGZyb21fPTAuNSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LnZhbHVlLCAwLjUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5fdmFyaWFibGUuX25hbWUsIG15dmFyLl9uYW1lKQogICAgICAgICB4LmRlc3Ryb3koKQpAQCAtOTEsMjUgKzk3LDI2IEBACiAgICAgICAgIGRlZiBjaGVja19wb3NpdGlvbnMoc2NhbGUsIHNjYWxlX3BvcywgbGFiZWwsIGxhYmVsX3Bvcyk6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNjYWxlLnBhY2tfaW5mbygpWydzaWRlJ10sIHNjYWxlX3BvcykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGFiZWwucGxhY2VfaW5mbygpWydhbmNob3InXSwgbGFiZWxfcG9zKQotICAgICAgICB4ID0gdHRrLkxhYmVsZWRTY2FsZShjb21wb3VuZD0ndG9wJykKKyAgICAgICAgeCA9IHR0ay5MYWJlbGVkU2NhbGUoc2VsZi5yb290LCBjb21wb3VuZD0ndG9wJykKICAgICAgICAgY2hlY2tfcG9zaXRpb25zKHguc2NhbGUsICdib3R0b20nLCB4LmxhYmVsLCAnbicpCiAgICAgICAgIHguZGVzdHJveSgpCi0gICAgICAgIHggPSB0dGsuTGFiZWxlZFNjYWxlKGNvbXBvdW5kPSdib3R0b20nKQorICAgICAgICB4ID0gdHRrLkxhYmVsZWRTY2FsZShzZWxmLnJvb3QsIGNvbXBvdW5kPSdib3R0b20nKQogICAgICAgICBjaGVja19wb3NpdGlvbnMoeC5zY2FsZSwgJ3RvcCcsIHgubGFiZWwsICdzJykKICAgICAgICAgeC5kZXN0cm95KCkKLSAgICAgICAgeCA9IHR0ay5MYWJlbGVkU2NhbGUoY29tcG91bmQ9J3Vua25vd24nKSAjIGludmVydCBkZWZhdWx0IHBvc2l0aW9ucworICAgICAgICAjIGludmVydCBkZWZhdWx0IHBvc2l0aW9ucworICAgICAgICB4ID0gdHRrLkxhYmVsZWRTY2FsZShzZWxmLnJvb3QsIGNvbXBvdW5kPSd1bmtub3duJykKICAgICAgICAgY2hlY2tfcG9zaXRpb25zKHguc2NhbGUsICd0b3AnLCB4LmxhYmVsLCAncycpCiAgICAgICAgIHguZGVzdHJveSgpCi0gICAgICAgIHggPSB0dGsuTGFiZWxlZFNjYWxlKCkgIyB0YWtlIGRlZmF1bHQgcG9zaXRpb25zCisgICAgICAgIHggPSB0dGsuTGFiZWxlZFNjYWxlKHNlbGYucm9vdCkgIyB0YWtlIGRlZmF1bHQgcG9zaXRpb25zCiAgICAgICAgIGNoZWNrX3Bvc2l0aW9ucyh4LnNjYWxlLCAnYm90dG9tJywgeC5sYWJlbCwgJ24nKQogICAgICAgICB4LmRlc3Ryb3koKQogCiAgICAgICAgICMgZXh0cmEsIGFuZCBpbnZhbGlkLCBrd2FyZ3MKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXModGtpbnRlci5UY2xFcnJvciwgdHRrLkxhYmVsZWRTY2FsZSwgYT0nYicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHRraW50ZXIuVGNsRXJyb3IsIHR0ay5MYWJlbGVkU2NhbGUsIG1hc3RlciwgYT0nYicpCiAKIAogICAgIGRlZiB0ZXN0X2hvcml6b250YWxfcmFuZ2Uoc2VsZik6Ci0gICAgICAgIGxzY2FsZSA9IHR0ay5MYWJlbGVkU2NhbGUoZnJvbV89MCwgdG89MTApCisgICAgICAgIGxzY2FsZSA9IHR0ay5MYWJlbGVkU2NhbGUoc2VsZi5yb290LCBmcm9tXz0wLCB0bz0xMCkKICAgICAgICAgbHNjYWxlLnBhY2soKQogICAgICAgICBsc2NhbGUud2FpdF92aXNpYmlsaXR5KCkKICAgICAgICAgbHNjYWxlLnVwZGF0ZSgpCkBAIC0xMjgsNyArMTM1LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChwcmV2X3hjb29yZCwgY3Vycl94Y29vcmQpCiAgICAgICAgICMgdGhlIGxhYmVsIHdpZGdldCBzaG91bGQgaGF2ZSBiZWVuIHJlcG9zaXRpb25lZCB0b28KICAgICAgICAgbGluZm9fMiA9IGxzY2FsZS5sYWJlbC5wbGFjZV9pbmZvKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsc2NhbGUubGFiZWxbJ3RleHQnXSwgMCBpZiBsc2NhbGUudGsud2FudG9iamVjdHMoKSBlbHNlICcwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsc2NhbGUubGFiZWxbJ3RleHQnXSwgMCBpZiBzZWxmLndhbnRvYmplY3RzIGVsc2UgJzAnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN1cnJfeGNvb3JkLCBpbnQobGluZm9fMlsneCddKSkKICAgICAgICAgIyBjaGFuZ2UgdGhlIHJhbmdlIGJhY2sKICAgICAgICAgbHNjYWxlLnNjYWxlLmNvbmZpZ3VyZShmcm9tXz0wLCB0bz0xMCkKQEAgLTEzOSw3ICsxNDYsNyBAQAogCiAKICAgICBkZWYgdGVzdF92YXJpYWJsZV9jaGFuZ2Uoc2VsZik6Ci0gICAgICAgIHggPSB0dGsuTGFiZWxlZFNjYWxlKCkKKyAgICAgICAgeCA9IHR0ay5MYWJlbGVkU2NhbGUoc2VsZi5yb290KQogICAgICAgICB4LnBhY2soKQogICAgICAgICB4LndhaXRfdmlzaWJpbGl0eSgpCiAgICAgICAgIHgudXBkYXRlKCkKQEAgLTE1MSwxMyArMTU4LDEzIEBACiAgICAgICAgICMgYXQgdGhlIHNhbWUgdGltZSB0aGlzIHNob3VsZG4ndCBhZmZlY3QgdGVzdCBvdXRjb21lCiAgICAgICAgIHgudXBkYXRlKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LmxhYmVsWyd0ZXh0J10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgbmV3dmFsIGlmIHgudGsud2FudG9iamVjdHMoKSBlbHNlIHN0cihuZXd2YWwpKQorICAgICAgICAgICAgICAgICAgICAgICAgIG5ld3ZhbCBpZiBzZWxmLndhbnRvYmplY3RzIGVsc2Ugc3RyKG5ld3ZhbCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcih4LnNjYWxlLmNvb3JkcygpWzBdLCBjdXJyX3hjb29yZCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LnNjYWxlLmNvb3JkcygpWzBdLAogICAgICAgICAgICAgaW50KHgubGFiZWwucGxhY2VfaW5mbygpWyd4J10pKQogCiAgICAgICAgICMgdmFsdWUgb3V0c2lkZSByYW5nZQotICAgICAgICBpZiB4LnRrLndhbnRvYmplY3RzKCk6CisgICAgICAgIGlmIHNlbGYud2FudG9iamVjdHM6CiAgICAgICAgICAgICBjb252ID0gbGFtYmRhIHg6IHgKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGNvbnYgPSBpbnQKQEAgLTE3MSw3ICsxNzgsNyBAQAogCiAKICAgICBkZWYgdGVzdF9yZXNpemUoc2VsZik6Ci0gICAgICAgIHggPSB0dGsuTGFiZWxlZFNjYWxlKCkKKyAgICAgICAgeCA9IHR0ay5MYWJlbGVkU2NhbGUoc2VsZi5yb290KQogICAgICAgICB4LnBhY2soZXhwYW5kPVRydWUsIGZpbGw9J2JvdGgnKQogICAgICAgICB4LndhaXRfdmlzaWJpbGl0eSgpCiAgICAgICAgIHgudXBkYXRlKCkKQEAgLTE5MCwyMCArMTk3LDIwIEBACiAgICAgICAgIHguZGVzdHJveSgpCiAKIAotY2xhc3MgT3B0aW9uTWVudVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorY2xhc3MgT3B0aW9uTWVudVRlc3QoQWJzdHJhY3RUa1Rlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgc3VwcG9ydC5yb290X2RlaWNvbmlmeSgpCi0gICAgICAgIHNlbGYudGV4dHZhciA9IHRraW50ZXIuU3RyaW5nVmFyKCkKKyAgICAgICAgc3VwZXIoKS5zZXRVcCgpCisgICAgICAgIHNlbGYudGV4dHZhciA9IHRraW50ZXIuU3RyaW5nVmFyKHNlbGYucm9vdCkKIAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKICAgICAgICAgZGVsIHNlbGYudGV4dHZhcgotICAgICAgICBzdXBwb3J0LnJvb3Rfd2l0aGRyYXcoKQorICAgICAgICBzdXBlcigpLnRlYXJEb3duKCkKIAogCiAgICAgZGVmIHRlc3Rfd2lkZ2V0X2Rlc3Ryb3koc2VsZik6Ci0gICAgICAgIHZhciA9IHRraW50ZXIuU3RyaW5nVmFyKCkKLSAgICAgICAgb3B0bWVudSA9IHR0ay5PcHRpb25NZW51KE5vbmUsIHZhcikKKyAgICAgICAgdmFyID0gdGtpbnRlci5TdHJpbmdWYXIoc2VsZi5yb290KQorICAgICAgICBvcHRtZW51ID0gdHRrLk9wdGlvbk1lbnUoc2VsZi5yb290LCB2YXIpCiAgICAgICAgIG5hbWUgPSB2YXIuX25hbWUKICAgICAgICAgb3B0bWVudS51cGRhdGVfaWRsZXRhc2tzKCkKICAgICAgICAgb3B0bWVudS5kZXN0cm95KCkKQEAgLTIxNCw5ICsyMjEsOSBAQAogCiAgICAgZGVmIHRlc3RfaW5pdGlhbGl6YXRpb24oc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHRraW50ZXIuVGNsRXJyb3IsCi0gICAgICAgICAgICB0dGsuT3B0aW9uTWVudSwgTm9uZSwgc2VsZi50ZXh0dmFyLCBpbnZhbGlkPSd0aGluZycpCisgICAgICAgICAgICB0dGsuT3B0aW9uTWVudSwgc2VsZi5yb290LCBzZWxmLnRleHR2YXIsIGludmFsaWQ9J3RoaW5nJykKIAotICAgICAgICBvcHRtZW51ID0gdHRrLk9wdGlvbk1lbnUoTm9uZSwgc2VsZi50ZXh0dmFyLCAnYicsICdhJywgJ2InKQorICAgICAgICBvcHRtZW51ID0gdHRrLk9wdGlvbk1lbnUoc2VsZi5yb290LCBzZWxmLnRleHR2YXIsICdiJywgJ2EnLCAnYicpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3B0bWVudS5fdmFyaWFibGUuZ2V0KCksICdiJykKIAogICAgICAgICBzZWxmLmFzc2VydFRydWUob3B0bWVudVsnbWVudSddKQpAQCAtMjI4LDcgKzIzNSw3IEBACiAgICAgZGVmIHRlc3RfbWVudShzZWxmKToKICAgICAgICAgaXRlbXMgPSAoJ2EnLCAnYicsICdjJykKICAgICAgICAgZGVmYXVsdCA9ICdhJwotICAgICAgICBvcHRtZW51ID0gdHRrLk9wdGlvbk1lbnUoTm9uZSwgc2VsZi50ZXh0dmFyLCBkZWZhdWx0LCAqaXRlbXMpCisgICAgICAgIG9wdG1lbnUgPSB0dGsuT3B0aW9uTWVudShzZWxmLnJvb3QsIHNlbGYudGV4dHZhciwgZGVmYXVsdCwgKml0ZW1zKQogICAgICAgICBmb3VuZF9kZWZhdWx0ID0gRmFsc2UKICAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKGl0ZW1zKSk6CiAgICAgICAgICAgICB2YWx1ZSA9IG9wdG1lbnVbJ21lbnUnXS5lbnRyeWNnZXQoaSwgJ3ZhbHVlJykKQEAgLTI0MCw3ICsyNDcsNyBAQAogCiAgICAgICAgICMgZGVmYXVsdCBzaG91bGRuJ3QgYmUgaW4gbWVudSBpZiBpdCBpcyBub3QgcGFydCBvZiB2YWx1ZXMKICAgICAgICAgZGVmYXVsdCA9ICdkJwotICAgICAgICBvcHRtZW51ID0gdHRrLk9wdGlvbk1lbnUoTm9uZSwgc2VsZi50ZXh0dmFyLCBkZWZhdWx0LCAqaXRlbXMpCisgICAgICAgIG9wdG1lbnUgPSB0dGsuT3B0aW9uTWVudShzZWxmLnJvb3QsIHNlbGYudGV4dHZhciwgZGVmYXVsdCwgKml0ZW1zKQogICAgICAgICBjdXJyID0gTm9uZQogICAgICAgICBpID0gMAogICAgICAgICB3aGlsZSBUcnVlOgpAQCAtMjY5LDcgKzI3Niw3IEBACiAgICAgICAgIGRlZiBjYl90ZXN0KGl0ZW0pOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpdGVtLCBpdGVtc1sxXSkKICAgICAgICAgICAgIHN1Y2Nlc3MuYXBwZW5kKFRydWUpCi0gICAgICAgIG9wdG1lbnUgPSB0dGsuT3B0aW9uTWVudShOb25lLCBzZWxmLnRleHR2YXIsICdhJywgY29tbWFuZD1jYl90ZXN0LAorICAgICAgICBvcHRtZW51ID0gdHRrLk9wdGlvbk1lbnUoc2VsZi5yb290LCBzZWxmLnRleHR2YXIsICdhJywgY29tbWFuZD1jYl90ZXN0LAogICAgICAgICAgICAgKml0ZW1zKQogICAgICAgICBvcHRtZW51WydtZW51J10uaW52b2tlKDEpCiAgICAgICAgIGlmIG5vdCBzdWNjZXNzOgpkaWZmIC0tZ2l0IGEvTGliL3RraW50ZXIvdGVzdC90ZXN0X3R0ay90ZXN0X2Z1bmN0aW9ucy5weSBiL0xpYi90a2ludGVyL3Rlc3QvdGVzdF90dGsvdGVzdF9mdW5jdGlvbnMucHkKaW5kZXggMTk4NmU2Ni4uYzlkY2Y5NyAxMDA2NDQKLS0tIGEvTGliL3RraW50ZXIvdGVzdC90ZXN0X3R0ay90ZXN0X2Z1bmN0aW9ucy5weQorKysgYi9MaWIvdGtpbnRlci90ZXN0L3Rlc3RfdHRrL3Rlc3RfZnVuY3Rpb25zLnB5CkBAIC0xLDcgKzEsMTkgQEAKICMgLSotIGVuY29kaW5nOiB1dGYtOCAtKi0KIGltcG9ydCB1bml0dGVzdAoraW1wb3J0IHRraW50ZXIKIGZyb20gdGtpbnRlciBpbXBvcnQgdHRrCiAKK2NsYXNzIE1vY2tUa0FwcDoKKworICAgIGRlZiBzcGxpdGxpc3Qoc2VsZiwgYXJnKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShhcmcsIHR1cGxlKToKKyAgICAgICAgICAgIHJldHVybiBhcmcKKyAgICAgICAgcmV0dXJuIGFyZy5zcGxpdCgnOicpCisKKyAgICBkZWYgd2FudG9iamVjdHMoc2VsZik6CisgICAgICAgIHJldHVybiBUcnVlCisKKwogY2xhc3MgTW9ja1RjbE9iaihvYmplY3QpOgogICAgIHR5cGVuYW1lID0gJ3Rlc3QnCiAKQEAgLTMxMiwyNiArMzI0LDEzIEBACiAgICAgICAgICAgICAiLW9wdCB7MyAybX0iKQogCiAKLSAgICBkZWYgdGVzdF9kaWN0X2Zyb21fdGNsdHVwbGUoc2VsZik6Ci0gICAgICAgIGZha2V0dHVwbGUgPSAoJy1hJywgJ3sxIDIgM30nLCAnLXNvbWV0aGluZycsICdmb28nKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHRrLl9kaWN0X2Zyb21fdGNsdHVwbGUoZmFrZXR0dXBsZSwgRmFsc2UpLAotICAgICAgICAgICAgeyctYSc6ICd7MSAyIDN9JywgJy1zb21ldGhpbmcnOiAnZm9vJ30pCi0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dGsuX2RpY3RfZnJvbV90Y2x0dXBsZShmYWtldHR1cGxlKSwKLSAgICAgICAgICAgIHsnYSc6ICd7MSAyIDN9JywgJ3NvbWV0aGluZyc6ICdmb28nfSkKLQotICAgICAgICAjIHBhc3NpbmcgYSB0dXBsZSB3aXRoIGEgc2luZ2xlIGl0ZW0gc2hvdWxkIHJldHVybiBhbiBlbXB0eSBkaWN0LAotICAgICAgICAjIHNpbmNlIGl0IHRyaWVzIHRvIGJyZWFrIHRoZSB0dXBsZSBieSBwYWlycy4KLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0dGsuX2RpY3RfZnJvbV90Y2x0dXBsZSgoJ3NpbmdsZScsICkpKQotCi0gICAgICAgIHNzcGVjID0gTW9ja1N0YXRlU3BlYygnYScsICdiJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dGsuX2RpY3RfZnJvbV90Y2x0dXBsZSgoJy1hJywgKHNzcGVjLCAndmFsJykpKSwKLSAgICAgICAgICAgIHsnYSc6IFsoJ2EnLCAnYicsICd2YWwnKV19KQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHRrLl9kaWN0X2Zyb21fdGNsdHVwbGUoKE1vY2tUY2xPYmooJy1wYWRkaW5nJyksCi0gICAgICAgICAgICBbTW9ja1RjbE9iaignMScpLCAyLCBNb2NrVGNsT2JqKCczbScpXSkpLAotICAgICAgICAgICAgeydwYWRkaW5nJzogWzEsIDIsICczbSddfSkKKyAgICBkZWYgdGVzdF90Y2xvYmpfdG9fcHkoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICB0dGsuX3RjbG9ial90b19weSgoTW9ja1N0YXRlU3BlYygnYScsICdiJyksICd2YWwnKSksCisgICAgICAgICAgICBbKCdhJywgJ2InLCAndmFsJyldKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgdHRrLl90Y2xvYmpfdG9fcHkoW01vY2tUY2xPYmooJzEnKSwgMiwgTW9ja1RjbE9iaignM20nKV0pLAorICAgICAgICAgICAgWzEsIDIsICczbSddKQogCiAKICAgICBkZWYgdGVzdF9saXN0X2Zyb21fc3RhdGVzcGVjKHNlbGYpOgpAQCAtMzUyLDIwICszNTEsMjIgQEAKIAogCiAgICAgZGVmIHRlc3RfbGlzdF9mcm9tX2xheW91dHR1cGxlKHNlbGYpOgorICAgICAgICB0ayA9IE1vY2tUa0FwcCgpCisKICAgICAgICAgIyBlbXB0eSBsYXlvdXQgdHVwbGUKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0dGsuX2xpc3RfZnJvbV9sYXlvdXR0dXBsZSgoKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHRrLl9saXN0X2Zyb21fbGF5b3V0dHVwbGUodGssICgpKSkKIAogICAgICAgICAjIHNob3J0ZXN0IGxheW91dCB0dXBsZQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR0ay5fbGlzdF9mcm9tX2xheW91dHR1cGxlKCgnbmFtZScsICkpLAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR0ay5fbGlzdF9mcm9tX2xheW91dHR1cGxlKHRrLCAoJ25hbWUnLCApKSwKICAgICAgICAgICAgIFsoJ25hbWUnLCB7fSldKQogCiAgICAgICAgICMgbm90IHNvIGludGVyZXN0aW5nIGx0dXBsZQogICAgICAgICBzYW1wbGVfbHR1cGxlID0gKCduYW1lJywgJy1vcHRpb24nLCAndmFsdWUnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR0ay5fbGlzdF9mcm9tX2xheW91dHR1cGxlKHNhbXBsZV9sdHVwbGUpLAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR0ay5fbGlzdF9mcm9tX2xheW91dHR1cGxlKHRrLCBzYW1wbGVfbHR1cGxlKSwKICAgICAgICAgICAgIFsoJ25hbWUnLCB7J29wdGlvbic6ICd2YWx1ZSd9KV0pCiAKICAgICAgICAgIyBlbXB0eSBjaGlsZHJlbgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR0ay5fbGlzdF9mcm9tX2xheW91dHR1cGxlKAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR0ay5fbGlzdF9mcm9tX2xheW91dHR1cGxlKHRrLAogICAgICAgICAgICAgKCdzb21ldGhpbmcnLCAnLWNoaWxkcmVuJywgKCkpKSwKICAgICAgICAgICAgIFsoJ3NvbWV0aGluZycsIHsnY2hpbGRyZW4nOiBbXX0pXQogICAgICAgICApCkBAIC0zNzgsNyArMzc5LDcgQEAKICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICApCiAgICAgICAgICkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dGsuX2xpc3RfZnJvbV9sYXlvdXR0dXBsZShsdHVwbGUpLAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR0ay5fbGlzdF9mcm9tX2xheW91dHR1cGxlKHRrLCBsdHVwbGUpLAogICAgICAgICAgICAgWygnbmFtZScsIHsnb3B0aW9uJzogJ25pY2VvbmUnLCAnY2hpbGRyZW4nOgogICAgICAgICAgICAgICAgIFsoJ290aGVyb25lJywgeydvdGhlcm9wdCc6ICdvdGhlcnZhbHVlJywgJ2NoaWxkcmVuJzoKICAgICAgICAgICAgICAgICAgICAgWygnY2hpbGQnLCB7fSldCkBAIC0zODcsMjkgKzM4OCwzNSBAQAogICAgICAgICApCiAKICAgICAgICAgIyBiYWQgdHVwbGVzCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHR0ay5fbGlzdF9mcm9tX2xheW91dHR1cGxlLAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0dGsuX2xpc3RfZnJvbV9sYXlvdXR0dXBsZSwgdGssCiAgICAgICAgICAgICAoJ25hbWUnLCAnbm9fbWludXMnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdHRrLl9saXN0X2Zyb21fbGF5b3V0dHVwbGUsCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHR0ay5fbGlzdF9mcm9tX2xheW91dHR1cGxlLCB0aywKICAgICAgICAgICAgICgnbmFtZScsICdub19taW51cycsICd2YWx1ZScpKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0dGsuX2xpc3RfZnJvbV9sYXlvdXR0dXBsZSwKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdHRrLl9saXN0X2Zyb21fbGF5b3V0dHVwbGUsIHRrLAogICAgICAgICAgICAgKCdzb21ldGhpbmcnLCAnLWNoaWxkcmVuJykpICMgbm8gY2hpbGRyZW4KLSAgICAgICAgaW1wb3J0IHRraW50ZXIKLSAgICAgICAgaWYgbm90IHRraW50ZXIuX2RlZmF1bHRfcm9vdCBvciB0a2ludGVyLl9kZWZhdWx0X3Jvb3Qud2FudG9iamVjdHMoKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHR0ay5fbGlzdF9mcm9tX2xheW91dHR1cGxlLAotICAgICAgICAgICAgICAgICgnc29tZXRoaW5nJywgJy1jaGlsZHJlbicsICd2YWx1ZScpKSAjIGludmFsaWQgY2hpbGRyZW4KIAogCiAgICAgZGVmIHRlc3RfdmFsX29yX2RpY3Qoc2VsZik6Ci0gICAgICAgIGRlZiBmdW5jKG9wdCwgdmFsPU5vbmUpOgorICAgICAgICBkZWYgZnVuYyhyZXMsIG9wdD1Ob25lLCB2YWw9Tm9uZSk6CisgICAgICAgICAgICBpZiBvcHQgaXMgTm9uZToKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzCiAgICAgICAgICAgICBpZiB2YWwgaXMgTm9uZToKICAgICAgICAgICAgICAgICByZXR1cm4gInRlc3QgdmFsIgogICAgICAgICAgICAgcmV0dXJuIChvcHQsIHZhbCkKIAotICAgICAgICBvcHRpb25zID0geyd0ZXN0JzogTm9uZX0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dGsuX3ZhbF9vcl9kaWN0KG9wdGlvbnMsIGZ1bmMpLCAidGVzdCB2YWwiKQorICAgICAgICB0ayA9IE1vY2tUa0FwcCgpCisgICAgICAgIHRrLmNhbGwgPSBmdW5jCiAKLSAgICAgICAgb3B0aW9ucyA9IHsndGVzdCc6IDN9Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHRrLl92YWxfb3JfZGljdChvcHRpb25zLCBmdW5jKSwgb3B0aW9ucykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dGsuX3ZhbF9vcl9kaWN0KHRrLCB7fSwgJy10ZXN0OjMnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB7J3Rlc3QnOiAnMyd9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR0ay5fdmFsX29yX2RpY3QodGssIHt9LCAoJy10ZXN0JywgMykpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHsndGVzdCc6IDN9KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHRrLl92YWxfb3JfZGljdCh0aywgeyd0ZXN0JzogTm9uZX0sICd4OnknKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdCB2YWwnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHRrLl92YWxfb3JfZGljdCh0aywgeyd0ZXN0JzogM30sICd4OnknKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB7J3Rlc3QnOiAzfSkKIAogCiAgICAgZGVmIHRlc3RfY29udmVydF9zdHJpbmd2YWwoc2VsZik6CmRpZmYgLS1naXQgYS9MaWIvdGtpbnRlci90ZXN0L3Rlc3RfdHRrL3Rlc3Rfc3R5bGUucHkgYi9MaWIvdGtpbnRlci90ZXN0L3Rlc3RfdHRrL3Rlc3Rfc3R5bGUucHkKaW5kZXggMGRhMGU1ZC4uMzUzNzUzNiAxMDA2NDQKLS0tIGEvTGliL3RraW50ZXIvdGVzdC90ZXN0X3R0ay90ZXN0X3N0eWxlLnB5CisrKyBiL0xpYi90a2ludGVyL3Rlc3QvdGVzdF90dGsvdGVzdF9zdHlsZS5weQpAQCAtMiwxNSArMiwxNSBAQAogaW1wb3J0IHRraW50ZXIKIGZyb20gdGtpbnRlciBpbXBvcnQgdHRrCiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcmVxdWlyZXMsIHJ1bl91bml0dGVzdAotCi1pbXBvcnQgdGtpbnRlci50ZXN0LnN1cHBvcnQgYXMgc3VwcG9ydAorZnJvbSB0a2ludGVyLnRlc3Quc3VwcG9ydCBpbXBvcnQgQWJzdHJhY3RUa1Rlc3QKIAogcmVxdWlyZXMoJ2d1aScpCiAKLWNsYXNzIFN0eWxlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBTdHlsZVRlc3QoQWJzdHJhY3RUa1Rlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgc2VsZi5zdHlsZSA9IHR0ay5TdHlsZSgpCisgICAgICAgIHN1cGVyKCkuc2V0VXAoKQorICAgICAgICBzZWxmLnN0eWxlID0gdHRrLlN0eWxlKHNlbGYucm9vdCkKIAogCiAgICAgZGVmIHRlc3RfY29uZmlndXJlKHNlbGYpOgpAQCAtMjUsNyArMjUsNyBAQAogICAgICAgICBzdHlsZSA9IHNlbGYuc3R5bGUKICAgICAgICAgc3R5bGUubWFwKCdUQnV0dG9uJywgYmFja2dyb3VuZD1bKCdhY3RpdmUnLCAnYmFja2dyb3VuZCcsICdibHVlJyldKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0eWxlLm1hcCgnVEJ1dHRvbicsICdiYWNrZ3JvdW5kJyksCi0gICAgICAgICAgICBbKCdhY3RpdmUnLCAnYmFja2dyb3VuZCcsICdibHVlJyldIGlmIHN0eWxlLnRrLndhbnRvYmplY3RzKCkgZWxzZQorICAgICAgICAgICAgWygnYWN0aXZlJywgJ2JhY2tncm91bmQnLCAnYmx1ZScpXSBpZiBzZWxmLndhbnRvYmplY3RzIGVsc2UKICAgICAgICAgICAgIFsoJ2FjdGl2ZSBiYWNrZ3JvdW5kJywgJ2JsdWUnKV0pCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzdHlsZS5tYXAoJ1RCdXR0b24nKSwgZGljdCkKIApkaWZmIC0tZ2l0IGEvTGliL3RraW50ZXIvdGVzdC90ZXN0X3R0ay90ZXN0X3dpZGdldHMucHkgYi9MaWIvdGtpbnRlci90ZXN0L3Rlc3RfdHRrL3Rlc3Rfd2lkZ2V0cy5weQppbmRleCAzYWMxNGJlLi5hZmQzMjMwIDEwMDY0NAotLS0gYS9MaWIvdGtpbnRlci90ZXN0L3Rlc3RfdHRrL3Rlc3Rfd2lkZ2V0cy5weQorKysgYi9MaWIvdGtpbnRlci90ZXN0L3Rlc3RfdHRrL3Rlc3Rfd2lkZ2V0cy5weQpAQCAtMSwxMiArMSwxMiBAQAogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgdGtpbnRlcgotZnJvbSB0a2ludGVyIGltcG9ydCB0dGsKK2Zyb20gdGtpbnRlciBpbXBvcnQgdHRrLCBUY2xFcnJvcgogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJlcXVpcmVzCiBpbXBvcnQgc3lzCiAKLWltcG9ydCB0a2ludGVyLnRlc3Quc3VwcG9ydCBhcyBzdXBwb3J0CiBmcm9tIHRraW50ZXIudGVzdC50ZXN0X3R0ay50ZXN0X2Z1bmN0aW9ucyBpbXBvcnQgTW9ja1RjbE9iagotZnJvbSB0a2ludGVyLnRlc3Quc3VwcG9ydCBpbXBvcnQgdGNsX3ZlcnNpb24sIGdldF90a19wYXRjaGxldmVsCitmcm9tIHRraW50ZXIudGVzdC5zdXBwb3J0IGltcG9ydCAoQWJzdHJhY3RUa1Rlc3QsIHRjbF92ZXJzaW9uLCBnZXRfdGtfcGF0Y2hsZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaW11bGF0ZV9tb3VzZV9jbGljaykKIGZyb20gdGtpbnRlci50ZXN0LndpZGdldF90ZXN0cyBpbXBvcnQgKGFkZF9zdGFuZGFyZF9vcHRpb25zLCBub2NvbnYsCiAgICAgQWJzdHJhY3RXaWRnZXRUZXN0LCBTdGFuZGFyZE9wdGlvbnNUZXN0cywgSW50ZWdlclNpemVUZXN0cywgUGl4ZWxTaXplVGVzdHMsCiAgICAgc2V0VXBNb2R1bGUpCkBAIC0yMCw3ICsyMCw3IEBACiAgICAgICAgIHdpZGdldCA9IHNlbGYuY3JlYXRlKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3aWRnZXRbJ2NsYXNzJ10sICcnKQogICAgICAgICBlcnJtc2c9J2F0dGVtcHQgdG8gY2hhbmdlIHJlYWQtb25seSBvcHRpb24nCi0gICAgICAgIGlmIGdldF90a19wYXRjaGxldmVsKCkgPCAoOCwgNiwgMCk6ICMgYWN0dWFsbHkgdGhpcyB3YXMgY2hhbmdlZCBpbiA4LjZiMworICAgICAgICBpZiBnZXRfdGtfcGF0Y2hsZXZlbCgpIDwgKDgsIDYsIDAsICdiZXRhJywgMyk6CiAgICAgICAgICAgICBlcnJtc2c9J0F0dGVtcHQgdG8gY2hhbmdlIHJlYWQtb25seSBvcHRpb24nCiAgICAgICAgIHNlbGYuY2hlY2tJbnZhbGlkUGFyYW0od2lkZ2V0LCAnY2xhc3MnLCAnRm9vJywgZXJybXNnPWVycm1zZykKICAgICAgICAgd2lkZ2V0MiA9IHNlbGYuY3JlYXRlKGNsYXNzXz0nRm9vJykKQEAgLTUzLDE5ICs1MywxNSBAQAogICAgICAgICBwYXNzCiAKIAotY2xhc3MgV2lkZ2V0VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBXaWRnZXRUZXN0KEFic3RyYWN0VGtUZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgIiIiVGVzdHMgbWV0aG9kcyBhdmFpbGFibGUgaW4gZXZlcnkgdHRrIHdpZGdldC4iIiIKIAogICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgc3VwcG9ydC5yb290X2RlaWNvbmlmeSgpCi0gICAgICAgIHNlbGYud2lkZ2V0ID0gdHRrLkJ1dHRvbih3aWR0aD0wLCB0ZXh0PSJUZXh0IikKKyAgICAgICAgc3VwZXIoKS5zZXRVcCgpCisgICAgICAgIHNlbGYud2lkZ2V0ID0gdHRrLkJ1dHRvbihzZWxmLnJvb3QsIHdpZHRoPTAsIHRleHQ9IlRleHQiKQogICAgICAgICBzZWxmLndpZGdldC5wYWNrKCkKICAgICAgICAgc2VsZi53aWRnZXQud2FpdF92aXNpYmlsaXR5KCkKIAotICAgIGRlZiB0ZWFyRG93bihzZWxmKToKLSAgICAgICAgc2VsZi53aWRnZXQuZGVzdHJveSgpCi0gICAgICAgIHN1cHBvcnQucm9vdF93aXRoZHJhdygpCi0KIAogICAgIGRlZiB0ZXN0X2lkZW50aWZ5KHNlbGYpOgogICAgICAgICBzZWxmLndpZGdldC51cGRhdGVfaWRsZXRhc2tzKCkKQEAgLTEyOCw3ICsxMjQsNyBAQAogICAgICAgICAnd2lkdGgnLAogICAgICkKIAotICAgIGRlZiBfY3JlYXRlKHNlbGYsICoqa3dhcmdzKToKKyAgICBkZWYgY3JlYXRlKHNlbGYsICoqa3dhcmdzKToKICAgICAgICAgcmV0dXJuIHR0ay5GcmFtZShzZWxmLnJvb3QsICoqa3dhcmdzKQogCiAKQEAgLTE0MSw3ICsxMzcsNyBAQAogICAgICAgICAndGV4dCcsICd1bmRlcmxpbmUnLCAnd2lkdGgnLAogICAgICkKIAotICAgIGRlZiBfY3JlYXRlKHNlbGYsICoqa3dhcmdzKToKKyAgICBkZWYgY3JlYXRlKHNlbGYsICoqa3dhcmdzKToKICAgICAgICAgcmV0dXJuIHR0ay5MYWJlbEZyYW1lKHNlbGYucm9vdCwgKiprd2FyZ3MpCiAKICAgICBkZWYgdGVzdF9sYWJlbGFuY2hvcihzZWxmKToKQEAgLTE2MSw4ICsxNTcsOCBAQAogY2xhc3MgQWJzdHJhY3RMYWJlbFRlc3QoQWJzdHJhY3RXaWRnZXRUZXN0KToKIAogICAgIGRlZiBjaGVja0ltYWdlUGFyYW0oc2VsZiwgd2lkZ2V0LCBuYW1lKToKLSAgICAgICAgaW1hZ2UgPSB0a2ludGVyLlBob3RvSW1hZ2UoJ2ltYWdlMScpCi0gICAgICAgIGltYWdlMiA9IHRraW50ZXIuUGhvdG9JbWFnZSgnaW1hZ2UyJykKKyAgICAgICAgaW1hZ2UgPSB0a2ludGVyLlBob3RvSW1hZ2UobWFzdGVyPXNlbGYucm9vdCwgbmFtZT0naW1hZ2UxJykKKyAgICAgICAgaW1hZ2UyID0gdGtpbnRlci5QaG90b0ltYWdlKG1hc3Rlcj1zZWxmLnJvb3QsIG5hbWU9J2ltYWdlMicpCiAgICAgICAgIHNlbGYuY2hlY2tQYXJhbSh3aWRnZXQsIG5hbWUsIGltYWdlLCBleHBlY3RlZD0oJ2ltYWdlMScsKSkKICAgICAgICAgc2VsZi5jaGVja1BhcmFtKHdpZGdldCwgbmFtZSwgJ2ltYWdlMScsIGV4cGVjdGVkPSgnaW1hZ2UxJywpKQogICAgICAgICBzZWxmLmNoZWNrUGFyYW0od2lkZ2V0LCBuYW1lLCAoaW1hZ2UsKSwgZXhwZWN0ZWQ9KCdpbWFnZTEnLCkpCkBAIC0xOTksNyArMTk1LDcgQEAKICAgICApCiAgICAgX2NvbnZfcGl4ZWxzID0gbm9jb252CiAKLSAgICBkZWYgX2NyZWF0ZShzZWxmLCAqKmt3YXJncyk6CisgICAgZGVmIGNyZWF0ZShzZWxmLCAqKmt3YXJncyk6CiAgICAgICAgIHJldHVybiB0dGsuTGFiZWwoc2VsZi5yb290LCAqKmt3YXJncykKIAogICAgIGRlZiB0ZXN0X2ZvbnQoc2VsZik6CkBAIC0yMTYsNyArMjEyLDcgQEAKICAgICAgICAgJ3VuZGVybGluZScsICd3aWR0aCcsCiAgICAgKQogCi0gICAgZGVmIF9jcmVhdGUoc2VsZiwgKiprd2FyZ3MpOgorICAgIGRlZiBjcmVhdGUoc2VsZiwgKiprd2FyZ3MpOgogICAgICAgICByZXR1cm4gdHRrLkJ1dHRvbihzZWxmLnJvb3QsICoqa3dhcmdzKQogCiAgICAgZGVmIHRlc3RfZGVmYXVsdChzZWxmKToKQEAgLTIyNSw3ICsyMjEsNyBAQAogCiAgICAgZGVmIHRlc3RfaW52b2tlKHNlbGYpOgogICAgICAgICBzdWNjZXNzID0gW10KLSAgICAgICAgYnRuID0gdHRrLkJ1dHRvbihjb21tYW5kPWxhbWJkYTogc3VjY2Vzcy5hcHBlbmQoMSkpCisgICAgICAgIGJ0biA9IHR0ay5CdXR0b24oc2VsZi5yb290LCBjb21tYW5kPWxhbWJkYTogc3VjY2Vzcy5hcHBlbmQoMSkpCiAgICAgICAgIGJ0bi5pbnZva2UoKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoc3VjY2VzcykKIApAQCAtMjQxLDcgKzIzNyw3IEBACiAgICAgICAgICd1bmRlcmxpbmUnLCAndmFyaWFibGUnLCAnd2lkdGgnLAogICAgICkKIAotICAgIGRlZiBfY3JlYXRlKHNlbGYsICoqa3dhcmdzKToKKyAgICBkZWYgY3JlYXRlKHNlbGYsICoqa3dhcmdzKToKICAgICAgICAgcmV0dXJuIHR0ay5DaGVja2J1dHRvbihzZWxmLnJvb3QsICoqa3dhcmdzKQogCiAgICAgZGVmIHRlc3Rfb2ZmdmFsdWUoc2VsZik6CkBAIC0yNTgsNyArMjU0LDcgQEAKICAgICAgICAgICAgIHN1Y2Nlc3MuYXBwZW5kKDEpCiAgICAgICAgICAgICByZXR1cm4gImNiIHRlc3QgY2FsbGVkIgogCi0gICAgICAgIGNidG4gPSB0dGsuQ2hlY2tidXR0b24oY29tbWFuZD1jYl90ZXN0KQorICAgICAgICBjYnRuID0gdHRrLkNoZWNrYnV0dG9uKHNlbGYucm9vdCwgY29tbWFuZD1jYl90ZXN0KQogICAgICAgICAjIHRoZSB2YXJpYWJsZSBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgYnkgdHRrLkNoZWNrYnV0dG9uIGlzIGFjdHVhbGx5CiAgICAgICAgICMgdW5kZWZpbmVkIHRpbGwgd2UgaW52b2tlIHRoZSBDaGVja2J1dHRvbgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNidG4uc3RhdGUoKSwgKCdhbHRlcm5hdGUnLCApKQpAQCAtMjg5LDE1ICsyODUsOSBAQAogCiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBzdXBlcigpLnNldFVwKCkKLSAgICAgICAgc3VwcG9ydC5yb290X2RlaWNvbmlmeSgpCiAgICAgICAgIHNlbGYuY29tYm8gPSBzZWxmLmNyZWF0ZSgpCiAKLSAgICBkZWYgdGVhckRvd24oc2VsZik6Ci0gICAgICAgIHNlbGYuY29tYm8uZGVzdHJveSgpCi0gICAgICAgIHN1cHBvcnQucm9vdF93aXRoZHJhdygpCi0gICAgICAgIHN1cGVyKCkudGVhckRvd24oKQotCi0gICAgZGVmIF9jcmVhdGUoc2VsZiwgKiprd2FyZ3MpOgorICAgIGRlZiBjcmVhdGUoc2VsZiwgKiprd2FyZ3MpOgogICAgICAgICByZXR1cm4gdHRrLkNvbWJvYm94KHNlbGYucm9vdCwgKiprd2FyZ3MpCiAKICAgICBkZWYgdGVzdF9oZWlnaHQoc2VsZik6CkBAIC0zNjIsNyArMzUyLDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkPSgnbW9uJywgJ3R1ZScsICd3ZWQnLCAndGh1cicpKQogICAgICAgICBzZWxmLmNoZWNrUGFyYW0oc2VsZi5jb21ibywgJ3ZhbHVlcycsICgnbW9uJywgJ3R1ZScsICd3ZWQnLCAndGh1cicpKQogICAgICAgICBzZWxmLmNoZWNrUGFyYW0oc2VsZi5jb21ibywgJ3ZhbHVlcycsICg0MiwgMy4xNCwgJycsICdhbnkgc3RyaW5nJykpCi0gICAgICAgIHNlbGYuY2hlY2tQYXJhbShzZWxmLmNvbWJvLCAndmFsdWVzJywgJycsIGV4cGVjdGVkPSgpKQorICAgICAgICBzZWxmLmNoZWNrUGFyYW0oc2VsZi5jb21ibywgJ3ZhbHVlcycsICcnLAorICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQ9JycgaWYgZ2V0X3RrX3BhdGNobGV2ZWwoKSA8ICg4LCA1LCAxMCkgZWxzZSAoKSkKIAogICAgICAgICBzZWxmLmNvbWJvWyd2YWx1ZXMnXSA9IFsnYScsIDEsICdjJ10KIApAQCAtNDA1LDcgKzM5Niw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHRraW50ZXIuVGNsRXJyb3IsIHNlbGYuY29tYm8uY3VycmVudCwgJycpCiAKICAgICAgICAgIyB0ZXN0aW5nIGNyZWF0aW5nIGNvbWJvYm94IHdpdGggZW1wdHkgc3RyaW5nIGluIHZhbHVlcwotICAgICAgICBjb21ibzIgPSB0dGsuQ29tYm9ib3godmFsdWVzPVsxLCAyLCAnJ10pCisgICAgICAgIGNvbWJvMiA9IHR0ay5Db21ib2JveChzZWxmLnJvb3QsIHZhbHVlcz1bMSwgMiwgJyddKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbWJvMlsndmFsdWVzJ10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgKCcxJywgJzInLCAnJykgaWYgc2VsZi53YW50b2JqZWN0cyBlbHNlICcxIDIge30nKQogICAgICAgICBjb21ibzIuZGVzdHJveSgpCkBAIC00MjMsMTUgKzQxNCw5IEBACiAKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIHN1cGVyKCkuc2V0VXAoKQotICAgICAgICBzdXBwb3J0LnJvb3RfZGVpY29uaWZ5KCkKICAgICAgICAgc2VsZi5lbnRyeSA9IHNlbGYuY3JlYXRlKCkKIAotICAgIGRlZiB0ZWFyRG93bihzZWxmKToKLSAgICAgICAgc2VsZi5lbnRyeS5kZXN0cm95KCkKLSAgICAgICAgc3VwcG9ydC5yb290X3dpdGhkcmF3KCkKLSAgICAgICAgc3VwZXIoKS50ZWFyRG93bigpCi0KLSAgICBkZWYgX2NyZWF0ZShzZWxmLCAqKmt3YXJncyk6CisgICAgZGVmIGNyZWF0ZShzZWxmLCAqKmt3YXJncyk6CiAgICAgICAgIHJldHVybiB0dGsuRW50cnkoc2VsZi5yb290LCAqKmt3YXJncykKIAogICAgIGRlZiB0ZXN0X2ludmFsaWRjb21tYW5kKHNlbGYpOgpAQCAtNDYwLDEwICs0NDUsNyBAQAogCiAKICAgICBkZWYgdGVzdF9iYm94KHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLmVudHJ5LmJib3goMCkpLCA0KQotICAgICAgICBmb3IgaXRlbSBpbiBzZWxmLmVudHJ5LmJib3goMCk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoaXRlbSwgaW50KQotCisgICAgICAgIHNlbGYuYXNzZXJ0SXNCb3VuZGluZ0JveChzZWxmLmVudHJ5LmJib3goMCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHRraW50ZXIuVGNsRXJyb3IsIHNlbGYuZW50cnkuYmJveCwgJ25vaW5kZXgnKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh0a2ludGVyLlRjbEVycm9yLCBzZWxmLmVudHJ5LmJib3gsIE5vbmUpCiAKQEAgLTU2MSwyMiArNTQzLDE2IEBACiAKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIHN1cGVyKCkuc2V0VXAoKQotICAgICAgICBzdXBwb3J0LnJvb3RfZGVpY29uaWZ5KCkKICAgICAgICAgc2VsZi5wYW5lZCA9IHNlbGYuY3JlYXRlKCkKIAotICAgIGRlZiB0ZWFyRG93bihzZWxmKToKLSAgICAgICAgc2VsZi5wYW5lZC5kZXN0cm95KCkKLSAgICAgICAgc3VwcG9ydC5yb290X3dpdGhkcmF3KCkKLSAgICAgICAgc3VwZXIoKS50ZWFyRG93bigpCi0KLSAgICBkZWYgX2NyZWF0ZShzZWxmLCAqKmt3YXJncyk6CisgICAgZGVmIGNyZWF0ZShzZWxmLCAqKmt3YXJncyk6CiAgICAgICAgIHJldHVybiB0dGsuUGFuZWRXaW5kb3coc2VsZi5yb290LCAqKmt3YXJncykKIAogICAgIGRlZiB0ZXN0X29yaWVudChzZWxmKToKICAgICAgICAgd2lkZ2V0ID0gc2VsZi5jcmVhdGUoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cih3aWRnZXRbJ29yaWVudCddKSwgJ3ZlcnRpY2FsJykKICAgICAgICAgZXJybXNnPSdhdHRlbXB0IHRvIGNoYW5nZSByZWFkLW9ubHkgb3B0aW9uJwotICAgICAgICBpZiBnZXRfdGtfcGF0Y2hsZXZlbCgpIDwgKDgsIDYsIDApOiAjIGFjdHVhbGx5IHRoaXMgd2FzIGNoYW5nZWQgaW4gOC42YjMKKyAgICAgICAgaWYgZ2V0X3RrX3BhdGNobGV2ZWwoKSA8ICg4LCA2LCAwLCAnYmV0YScsIDMpOgogICAgICAgICAgICAgZXJybXNnPSdBdHRlbXB0IHRvIGNoYW5nZSByZWFkLW9ubHkgb3B0aW9uJwogICAgICAgICBzZWxmLmNoZWNrSW52YWxpZFBhcmFtKHdpZGdldCwgJ29yaWVudCcsICdob3Jpem9udGFsJywKICAgICAgICAgICAgICAgICBlcnJtc2c9ZXJybXNnKQpAQCAtNTkxLDEzICs1NjcsMTMgQEAKICAgICAgICAgbGFiZWwuZGVzdHJveSgpCiAgICAgICAgIGNoaWxkLmRlc3Ryb3koKQogICAgICAgICAjIGFub3RoZXIgYXR0ZW1wdAotICAgICAgICBsYWJlbCA9IHR0ay5MYWJlbCgpCisgICAgICAgIGxhYmVsID0gdHRrLkxhYmVsKHNlbGYucm9vdCkKICAgICAgICAgY2hpbGQgPSB0dGsuTGFiZWwobGFiZWwpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHRraW50ZXIuVGNsRXJyb3IsIHNlbGYucGFuZWQuYWRkLCBjaGlsZCkKICAgICAgICAgY2hpbGQuZGVzdHJveSgpCiAgICAgICAgIGxhYmVsLmRlc3Ryb3koKQogCi0gICAgICAgIGdvb2RfY2hpbGQgPSB0dGsuTGFiZWwoKQorICAgICAgICBnb29kX2NoaWxkID0gdHRrLkxhYmVsKHNlbGYucm9vdCkKICAgICAgICAgc2VsZi5wYW5lZC5hZGQoZ29vZF9jaGlsZCkKICAgICAgICAgIyByZS1hZGRpbmcgYSBjaGlsZCBpcyBub3QgYWNjZXB0ZWQKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXModGtpbnRlci5UY2xFcnJvciwgc2VsZi5wYW5lZC5hZGQsIGdvb2RfY2hpbGQpCkBAIC02MTUsNyArNTkxLDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXModGtpbnRlci5UY2xFcnJvciwgc2VsZi5wYW5lZC5mb3JnZXQsIE5vbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHRraW50ZXIuVGNsRXJyb3IsIHNlbGYucGFuZWQuZm9yZ2V0LCAwKQogCi0gICAgICAgIHNlbGYucGFuZWQuYWRkKHR0ay5MYWJlbCgpKQorICAgICAgICBzZWxmLnBhbmVkLmFkZCh0dGsuTGFiZWwoc2VsZi5yb290KSkKICAgICAgICAgc2VsZi5wYW5lZC5mb3JnZXQoMCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXModGtpbnRlci5UY2xFcnJvciwgc2VsZi5wYW5lZC5mb3JnZXQsIDApCiAKQEAgLTYyNSw5ICs2MDEsOSBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh0a2ludGVyLlRjbEVycm9yLCBzZWxmLnBhbmVkLmluc2VydCwgMCwgTm9uZSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXModGtpbnRlci5UY2xFcnJvciwgc2VsZi5wYW5lZC5pbnNlcnQsIDAsIDApCiAKLSAgICAgICAgY2hpbGQgPSB0dGsuTGFiZWwoKQotICAgICAgICBjaGlsZDIgPSB0dGsuTGFiZWwoKQotICAgICAgICBjaGlsZDMgPSB0dGsuTGFiZWwoKQorICAgICAgICBjaGlsZCA9IHR0ay5MYWJlbChzZWxmLnJvb3QpCisgICAgICAgIGNoaWxkMiA9IHR0ay5MYWJlbChzZWxmLnJvb3QpCisgICAgICAgIGNoaWxkMyA9IHR0ay5MYWJlbChzZWxmLnJvb3QpCiAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXModGtpbnRlci5UY2xFcnJvciwgc2VsZi5wYW5lZC5pbnNlcnQsIDAsIGNoaWxkKQogCkBAIC02NTgsNyArNjM0LDcgQEAKICAgICBkZWYgdGVzdF9wYW5lKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh0a2ludGVyLlRjbEVycm9yLCBzZWxmLnBhbmVkLnBhbmUsIDApCiAKLSAgICAgICAgY2hpbGQgPSB0dGsuTGFiZWwoKQorICAgICAgICBjaGlsZCA9IHR0ay5MYWJlbChzZWxmLnJvb3QpCiAgICAgICAgIHNlbGYucGFuZWQuYWRkKGNoaWxkKQogICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc2VsZi5wYW5lZC5wYW5lKDApLCBkaWN0KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucGFuZWQucGFuZSgwLCB3ZWlnaHQ9Tm9uZSksCkBAIC03MDMsNyArNjc5LDcgQEAKICAgICAgICAgJ3VuZGVybGluZScsICd2YWx1ZScsICd2YXJpYWJsZScsICd3aWR0aCcsCiAgICAgKQogCi0gICAgZGVmIF9jcmVhdGUoc2VsZiwgKiprd2FyZ3MpOgorICAgIGRlZiBjcmVhdGUoc2VsZiwgKiprd2FyZ3MpOgogICAgICAgICByZXR1cm4gdHRrLlJhZGlvYnV0dG9uKHNlbGYucm9vdCwgKiprd2FyZ3MpCiAKICAgICBkZWYgdGVzdF92YWx1ZShzZWxmKToKQEAgLTcxNiw5ICs2OTIsMTEgQEAKICAgICAgICAgICAgIHN1Y2Nlc3MuYXBwZW5kKDEpCiAgICAgICAgICAgICByZXR1cm4gImNiIHRlc3QgY2FsbGVkIgogCi0gICAgICAgIG15dmFyID0gdGtpbnRlci5JbnRWYXIoKQotICAgICAgICBjYnRuID0gdHRrLlJhZGlvYnV0dG9uKGNvbW1hbmQ9Y2JfdGVzdCwgdmFyaWFibGU9bXl2YXIsIHZhbHVlPTApCi0gICAgICAgIGNidG4yID0gdHRrLlJhZGlvYnV0dG9uKGNvbW1hbmQ9Y2JfdGVzdCwgdmFyaWFibGU9bXl2YXIsIHZhbHVlPTEpCisgICAgICAgIG15dmFyID0gdGtpbnRlci5JbnRWYXIoc2VsZi5yb290KQorICAgICAgICBjYnRuID0gdHRrLlJhZGlvYnV0dG9uKHNlbGYucm9vdCwgY29tbWFuZD1jYl90ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlPW15dmFyLCB2YWx1ZT0wKQorICAgICAgICBjYnRuMiA9IHR0ay5SYWRpb2J1dHRvbihzZWxmLnJvb3QsIGNvbW1hbmQ9Y2JfdGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGU9bXl2YXIsIHZhbHVlPTEpCiAKICAgICAgICAgaWYgc2VsZi53YW50b2JqZWN0czoKICAgICAgICAgICAgIGNvbnYgPSBsYW1iZGEgeDogeApAQCAtNzUxLDcgKzcyOSw3IEBACiAgICAgICAgICd1bmRlcmxpbmUnLCAnd2lkdGgnLAogICAgICkKIAotICAgIGRlZiBfY3JlYXRlKHNlbGYsICoqa3dhcmdzKToKKyAgICBkZWYgY3JlYXRlKHNlbGYsICoqa3dhcmdzKToKICAgICAgICAgcmV0dXJuIHR0ay5NZW51YnV0dG9uKHNlbGYucm9vdCwgKiprd2FyZ3MpCiAKICAgICBkZWYgdGVzdF9kaXJlY3Rpb24oc2VsZik6CkBAIC03NzcsMTcgKzc1NSwxMSBAQAogCiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBzdXBlcigpLnNldFVwKCkKLSAgICAgICAgc3VwcG9ydC5yb290X2RlaWNvbmlmeSgpCiAgICAgICAgIHNlbGYuc2NhbGUgPSBzZWxmLmNyZWF0ZSgpCiAgICAgICAgIHNlbGYuc2NhbGUucGFjaygpCiAgICAgICAgIHNlbGYuc2NhbGUudXBkYXRlKCkKIAotICAgIGRlZiB0ZWFyRG93bihzZWxmKToKLSAgICAgICAgc2VsZi5zY2FsZS5kZXN0cm95KCkKLSAgICAgICAgc3VwcG9ydC5yb290X3dpdGhkcmF3KCkKLSAgICAgICAgc3VwZXIoKS50ZWFyRG93bigpCi0KLSAgICBkZWYgX2NyZWF0ZShzZWxmLCAqKmt3YXJncyk6CisgICAgZGVmIGNyZWF0ZShzZWxmLCAqKmt3YXJncyk6CiAgICAgICAgIHJldHVybiB0dGsuU2NhbGUoc2VsZi5yb290LCAqKmt3YXJncykKIAogICAgIGRlZiB0ZXN0X2Zyb20oc2VsZik6CkBAIC04NTksNyArODMxLDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb252KHNlbGYuc2NhbGUuZ2V0KCkpLCBtaW4pCiAKICAgICAgICAgIyBjaGFuZ2luZyBkaXJlY3RseSB0aGUgdmFyaWFibGUgZG9lc24ndCBpbXBvc2UgdGhpcyBsaW1pdGF0aW9uIHRobwotICAgICAgICB2YXIgPSB0a2ludGVyLkRvdWJsZVZhcigpCisgICAgICAgIHZhciA9IHRraW50ZXIuRG91YmxlVmFyKHNlbGYucm9vdCkKICAgICAgICAgc2VsZi5zY2FsZVsndmFyaWFibGUnXSA9IHZhcgogICAgICAgICB2YXIuc2V0KG1heCArIDUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29udihzZWxmLnNjYWxlLmdldCgpKSwgdmFyLmdldCgpKQpAQCAtODg5LDcgKzg2MSw3IEBACiAgICAgX2NvbnZfcGl4ZWxzID0gbm9jb252CiAgICAgZGVmYXVsdF9vcmllbnQgPSAnaG9yaXpvbnRhbCcKIAotICAgIGRlZiBfY3JlYXRlKHNlbGYsICoqa3dhcmdzKToKKyAgICBkZWYgY3JlYXRlKHNlbGYsICoqa3dhcmdzKToKICAgICAgICAgcmV0dXJuIHR0ay5Qcm9ncmVzc2JhcihzZWxmLnJvb3QsICoqa3dhcmdzKQogCiAgICAgZGVmIHRlc3RfbGVuZ3RoKHNlbGYpOgpAQCAtOTIzLDcgKzg5NSw3IEBACiAgICAgKQogICAgIGRlZmF1bHRfb3JpZW50ID0gJ3ZlcnRpY2FsJwogCi0gICAgZGVmIF9jcmVhdGUoc2VsZiwgKiprd2FyZ3MpOgorICAgIGRlZiBjcmVhdGUoc2VsZiwgKiprd2FyZ3MpOgogICAgICAgICByZXR1cm4gdHRrLlNjcm9sbGJhcihzZWxmLnJvb3QsICoqa3dhcmdzKQogCiAKQEAgLTkzNSwyMSArOTA3LDEzIEBACiAKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIHN1cGVyKCkuc2V0VXAoKQotICAgICAgICBzdXBwb3J0LnJvb3RfZGVpY29uaWZ5KCkKICAgICAgICAgc2VsZi5uYiA9IHNlbGYuY3JlYXRlKHBhZGRpbmc9MCkKLSAgICAgICAgc2VsZi5jaGlsZDEgPSB0dGsuTGFiZWwoKQotICAgICAgICBzZWxmLmNoaWxkMiA9IHR0ay5MYWJlbCgpCisgICAgICAgIHNlbGYuY2hpbGQxID0gdHRrLkxhYmVsKHNlbGYucm9vdCkKKyAgICAgICAgc2VsZi5jaGlsZDIgPSB0dGsuTGFiZWwoc2VsZi5yb290KQogICAgICAgICBzZWxmLm5iLmFkZChzZWxmLmNoaWxkMSwgdGV4dD0nYScpCiAgICAgICAgIHNlbGYubmIuYWRkKHNlbGYuY2hpbGQyLCB0ZXh0PSdiJykKIAotICAgIGRlZiB0ZWFyRG93bihzZWxmKToKLSAgICAgICAgc2VsZi5jaGlsZDEuZGVzdHJveSgpCi0gICAgICAgIHNlbGYuY2hpbGQyLmRlc3Ryb3koKQotICAgICAgICBzZWxmLm5iLmRlc3Ryb3koKQotICAgICAgICBzdXBwb3J0LnJvb3Rfd2l0aGRyYXcoKQotICAgICAgICBzdXBlcigpLnRlYXJEb3duKCkKLQotICAgIGRlZiBfY3JlYXRlKHNlbGYsICoqa3dhcmdzKToKKyAgICBkZWYgY3JlYXRlKHNlbGYsICoqa3dhcmdzKToKICAgICAgICAgcmV0dXJuIHR0ay5Ob3RlYm9vayhzZWxmLnJvb3QsICoqa3dhcmdzKQogCiAgICAgZGVmIHRlc3RfdGFiX2lkZW50aWZpZXJzKHNlbGYpOgpAQCAtOTg4LDcgKzk1Miw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHRraW50ZXIuVGNsRXJyb3IsIHNlbGYubmIuaGlkZSwgJ2hpJykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXModGtpbnRlci5UY2xFcnJvciwgc2VsZi5uYi5oaWRlLCBOb25lKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh0a2ludGVyLlRjbEVycm9yLCBzZWxmLm5iLmFkZCwgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXModGtpbnRlci5UY2xFcnJvciwgc2VsZi5uYi5hZGQsIHR0ay5MYWJlbCgpLAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh0a2ludGVyLlRjbEVycm9yLCBzZWxmLm5iLmFkZCwgdHRrLkxhYmVsKHNlbGYucm9vdCksCiAgICAgICAgICAgICB1bmtub3duPSdvcHRpb24nKQogCiAgICAgICAgIHRhYnMgPSBzZWxmLm5iLnRhYnMoKQpAQCAtOTk2LDcgKzk2MCw3IEBACiAgICAgICAgIHNlbGYubmIuYWRkKHNlbGYuY2hpbGQxKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubmIudGFicygpLCB0YWJzKQogCi0gICAgICAgIGNoaWxkID0gdHRrLkxhYmVsKCkKKyAgICAgICAgY2hpbGQgPSB0dGsuTGFiZWwoc2VsZi5yb290KQogICAgICAgICBzZWxmLm5iLmFkZChjaGlsZCwgdGV4dD0nYycpCiAgICAgICAgIHRhYnMgPSBzZWxmLm5iLnRhYnMoKQogCkBAIC0xMDU0LDcgKzEwMTgsNyBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh0a2ludGVyLlRjbEVycm9yLCBzZWxmLm5iLmluc2VydCwgLTEsIHRhYnNbMF0pCiAKICAgICAgICAgIyBuZXcgdGFiCi0gICAgICAgIGNoaWxkMyA9IHR0ay5MYWJlbCgpCisgICAgICAgIGNoaWxkMyA9IHR0ay5MYWJlbChzZWxmLnJvb3QpCiAgICAgICAgIHNlbGYubmIuaW5zZXJ0KDEsIGNoaWxkMykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5iLnRhYnMoKSwgKHRhYnNbMF0sIHN0cihjaGlsZDMpLCB0YWJzWzFdKSkKICAgICAgICAgc2VsZi5uYi5mb3JnZXQoY2hpbGQzKQpAQCAtMTEyMCw3ICsxMDg0LDcgQEAKIAogICAgICAgICBzZWxmLm5iLnNlbGVjdCgwKQogCi0gICAgICAgIHN1cHBvcnQuc2ltdWxhdGVfbW91c2VfY2xpY2soc2VsZi5uYiwgNSwgNSkKKyAgICAgICAgc2ltdWxhdGVfbW91c2VfY2xpY2soc2VsZi5uYiwgNSwgNSkKICAgICAgICAgc2VsZi5uYi5mb2N1c19mb3JjZSgpCiAgICAgICAgIHNlbGYubmIuZXZlbnRfZ2VuZXJhdGUoJzxDb250cm9sLVRhYj4nKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubmIuc2VsZWN0KCksIHN0cihzZWxmLmNoaWxkMikpCkBAIC0xMTM0LDcgKzEwOTgsNyBAQAogICAgICAgICBzZWxmLm5iLnRhYihzZWxmLmNoaWxkMSwgdGV4dD0nYScsIHVuZGVybGluZT0wKQogICAgICAgICBzZWxmLm5iLmVuYWJsZV90cmF2ZXJzYWwoKQogICAgICAgICBzZWxmLm5iLmZvY3VzX2ZvcmNlKCkKLSAgICAgICAgc3VwcG9ydC5zaW11bGF0ZV9tb3VzZV9jbGljayhzZWxmLm5iLCA1LCA1KQorICAgICAgICBzaW11bGF0ZV9tb3VzZV9jbGljayhzZWxmLm5iLCA1LCA1KQogICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ2Rhcndpbic6CiAgICAgICAgICAgICBzZWxmLm5iLmV2ZW50X2dlbmVyYXRlKCc8T3B0aW9uLWE+JykKICAgICAgICAgZWxzZToKQEAgLTExNTIsMTUgKzExMTYsOSBAQAogCiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBzdXBlcigpLnNldFVwKCkKLSAgICAgICAgc3VwcG9ydC5yb290X2RlaWNvbmlmeSgpCiAgICAgICAgIHNlbGYudHYgPSBzZWxmLmNyZWF0ZShwYWRkaW5nPTApCiAKLSAgICBkZWYgdGVhckRvd24oc2VsZik6Ci0gICAgICAgIHNlbGYudHYuZGVzdHJveSgpCi0gICAgICAgIHN1cHBvcnQucm9vdF93aXRoZHJhdygpCi0gICAgICAgIHN1cGVyKCkudGVhckRvd24oKQotCi0gICAgZGVmIF9jcmVhdGUoc2VsZiwgKiprd2FyZ3MpOgorICAgIGRlZiBjcmVhdGUoc2VsZiwgKiprd2FyZ3MpOgogICAgICAgICByZXR1cm4gdHRrLlRyZWV2aWV3KHNlbGYucm9vdCwgKiprd2FyZ3MpCiAKICAgICBkZWYgdGVzdF9jb2x1bW5zKHNlbGYpOgpAQCAtMTE2OCw3ICsxMTI2LDggQEAKICAgICAgICAgc2VsZi5jaGVja1BhcmFtKHdpZGdldCwgJ2NvbHVtbnMnLCAnYSBiIGMnLAogICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQ9KCdhJywgJ2InLCAnYycpKQogICAgICAgICBzZWxmLmNoZWNrUGFyYW0od2lkZ2V0LCAnY29sdW1ucycsICgnYScsICdiJywgJ2MnKSkKLSAgICAgICAgc2VsZi5jaGVja1BhcmFtKHdpZGdldCwgJ2NvbHVtbnMnLCAoKSkKKyAgICAgICAgc2VsZi5jaGVja1BhcmFtKHdpZGdldCwgJ2NvbHVtbnMnLCAoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkPScnIGlmIGdldF90a19wYXRjaGxldmVsKCkgPCAoOCwgNSwgMTApIGVsc2UgKCkpCiAKICAgICBkZWYgdGVzdF9kaXNwbGF5Y29sdW1ucyhzZWxmKToKICAgICAgICAgd2lkZ2V0ID0gc2VsZi5jcmVhdGUoKQpAQCAtMTIxNiwxMiArMTE3NSw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjaGlsZHJlbikKIAogICAgICAgICBiYm94ID0gc2VsZi50di5iYm94KGNoaWxkcmVuWzBdKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihiYm94KSwgNCkKLSAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGJib3gsIHR1cGxlKQotICAgICAgICBmb3IgaXRlbSBpbiBiYm94OgotICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoaXRlbSwgaW50KToKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIkludmFsaWQgYm91bmRpbmcgYm94OiAlcyIgJSBiYm94KQotICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIHNlbGYuYXNzZXJ0SXNCb3VuZGluZ0JveChiYm94KQogCiAgICAgICAgICMgY29tcGFyZSB3aWR0aCBpbiBiYm94ZXMKICAgICAgICAgc2VsZi50dlsnY29sdW1ucyddID0gWyd0ZXN0J10KQEAgLTE0MDEsNyArMTM1NSw3IEBACiAKICAgICBkZWYgdGVzdF9oZWFkaW5nX2NhbGxiYWNrKHNlbGYpOgogICAgICAgICBkZWYgc2ltdWxhdGVfaGVhZGluZ19jbGljayh4LCB5KToKLSAgICAgICAgICAgIHN1cHBvcnQuc2ltdWxhdGVfbW91c2VfY2xpY2soc2VsZi50diwgeCwgeSkKKyAgICAgICAgICAgIHNpbXVsYXRlX21vdXNlX2NsaWNrKHNlbGYudHYsIHgsIHkpCiAgICAgICAgICAgICBzZWxmLnR2LnVwZGF0ZSgpCiAKICAgICAgICAgc3VjY2VzcyA9IFtdICMgbm8gc3VjY2VzcyBmb3Igbm93CkBAIC0xNTkwLDcgKzE1NDQsNyBAQAogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHBvc195KSwgMikgIyBpdGVtMSBhbmQgaXRlbTIgeSBwb3MKICAgICAgICAgZm9yIHkgaW4gcG9zX3k6Ci0gICAgICAgICAgICBzdXBwb3J0LnNpbXVsYXRlX21vdXNlX2NsaWNrKHNlbGYudHYsIDAsIHkpCisgICAgICAgICAgICBzaW11bGF0ZV9tb3VzZV9jbGljayhzZWxmLnR2LCAwLCB5KQogCiAgICAgICAgICMgYnkgbm93IHRoZXJlIHNob3VsZCBiZSA0IHRoaW5ncyBpbiB0aGUgZXZlbnRzIGxpc3QsIHNpbmNlIGVhY2gKICAgICAgICAgIyBpdGVtIGhhZCBhIGJpbmQgZm9yIHR3byBldmVudHMgdGhhdCB3ZXJlIHNpbXVsYXRlZCBhYm92ZQpAQCAtMTYxMSw2ICsxNTY1LDIxIEBACiAgICAgICAgICAgICAnYmx1ZScpCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzZWxmLnR2LnRhZ19jb25maWd1cmUoJ3Rlc3QnKSwgZGljdCkKIAorICAgIGRlZiB0ZXN0X3RhZ19oYXMoc2VsZik6CisgICAgICAgIGl0ZW0xID0gc2VsZi50di5pbnNlcnQoJycsICdlbmQnLCB0ZXh0PSdJdGVtIDEnLCB0YWdzPVsndGFnMSddKQorICAgICAgICBpdGVtMiA9IHNlbGYudHYuaW5zZXJ0KCcnLCAnZW5kJywgdGV4dD0nSXRlbSAyJywgdGFncz1bJ3RhZzInXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnR2LnRhZ19oYXMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRjbEVycm9yLCBzZWxmLnR2LnRhZ19oYXMsICd0YWcxJywgJ25vbi1leGlzdGluZycpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnR2LnRhZ19oYXMoJ3RhZzEnLCBpdGVtMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi50di50YWdfaGFzKCd0YWcxJywgaXRlbTIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYudHYudGFnX2hhcygndGFnMicsIGl0ZW0xKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYudHYudGFnX2hhcygndGFnMicsIGl0ZW0yKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnR2LnRhZ19oYXMoJ3RhZzMnLCBpdGVtMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi50di50YWdfaGFzKCd0YWczJywgaXRlbTIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHYudGFnX2hhcygndGFnMScpLCAoaXRlbTEsKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR2LnRhZ19oYXMoJ3RhZzInKSwgKGl0ZW0yLCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50di50YWdfaGFzKCd0YWczJyksICgpKQorCiAKIEBhZGRfc3RhbmRhcmRfb3B0aW9ucyhTdGFuZGFyZFR0a09wdGlvbnNUZXN0cykKIGNsYXNzIFNlcGFyYXRvclRlc3QoQWJzdHJhY3RXaWRnZXRUZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC0xNjIwLDcgKzE1ODksNyBAQAogICAgICkKICAgICBkZWZhdWx0X29yaWVudCA9ICdob3Jpem9udGFsJwogCi0gICAgZGVmIF9jcmVhdGUoc2VsZiwgKiprd2FyZ3MpOgorICAgIGRlZiBjcmVhdGUoc2VsZiwgKiprd2FyZ3MpOgogICAgICAgICByZXR1cm4gdHRrLlNlcGFyYXRvcihzZWxmLnJvb3QsICoqa3dhcmdzKQogCiAKQEAgLTE2MzEsNyArMTYwMCw3IEBACiAgICAgICAgICMgJ3N0YXRlJz8KICAgICApCiAKLSAgICBkZWYgX2NyZWF0ZShzZWxmLCAqKmt3YXJncyk6CisgICAgZGVmIGNyZWF0ZShzZWxmLCAqKmt3YXJncyk6CiAgICAgICAgIHJldHVybiB0dGsuU2l6ZWdyaXAoc2VsZi5yb290LCAqKmt3YXJncykKIAogdGVzdHNfZ3VpID0gKApkaWZmIC0tZ2l0IGEvTGliL3RraW50ZXIvdGVzdC93aWRnZXRfdGVzdHMucHkgYi9MaWIvdGtpbnRlci90ZXN0L3dpZGdldF90ZXN0cy5weQppbmRleCBhOTgyMGE3Li43Nzk1MzhkIDEwMDY0NAotLS0gYS9MaWIvdGtpbnRlci90ZXN0L3dpZGdldF90ZXN0cy5weQorKysgYi9MaWIvdGtpbnRlci90ZXN0L3dpZGdldF90ZXN0cy5weQpAQCAtMyw5ICszLDkgQEAKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IHN5cwogaW1wb3J0IHRraW50ZXIKLWZyb20gdGtpbnRlci50dGsgaW1wb3J0IHNldHVwX21hc3RlciwgU2NhbGUKLWZyb20gdGtpbnRlci50ZXN0LnN1cHBvcnQgaW1wb3J0ICh0Y2xfdmVyc2lvbiwgcmVxdWlyZXNfdGNsLCBnZXRfdGtfcGF0Y2hsZXZlbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXhlbHNfY29udiwgdGNsX29ial9lcSkKK2Zyb20gdGtpbnRlci50dGsgaW1wb3J0IFNjYWxlCitmcm9tIHRraW50ZXIudGVzdC5zdXBwb3J0IGltcG9ydCAoQWJzdHJhY3RUa1Rlc3QsIHRjbF92ZXJzaW9uLCByZXF1aXJlc190Y2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0X3RrX3BhdGNobGV2ZWwsIHBpeGVsc19jb252LCB0Y2xfb2JqX2VxKQogaW1wb3J0IHRlc3Quc3VwcG9ydAogCiAKQEAgLTIyLDIxICsyMiwyNSBAQAogCiBfc2VudGluZWwgPSBvYmplY3QoKQogCi1jbGFzcyBBYnN0cmFjdFdpZGdldFRlc3Q6CitjbGFzcyBBYnN0cmFjdFdpZGdldFRlc3QoQWJzdHJhY3RUa1Rlc3QpOgogICAgIF9jb252X3BpeGVscyA9IHN0YXRpY21ldGhvZChwaXhlbHNfcm91bmQpCiAgICAgX2NvbnZfcGFkX3BpeGVscyA9IE5vbmUKLSAgICB3YW50b2JqZWN0cyA9IFRydWUKKyAgICBfc3RyaW5naWZ5ID0gRmFsc2UKIAotICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgc2VsZi5yb290ID0gc2V0dXBfbWFzdGVyKCkKLSAgICAgICAgc2VsZi5zY2FsaW5nID0gZmxvYXQoc2VsZi5yb290LmNhbGwoJ3RrJywgJ3NjYWxpbmcnKSkKLSAgICAgICAgaWYgbm90IHNlbGYucm9vdC53YW50b2JqZWN0cygpOgotICAgICAgICAgICAgc2VsZi53YW50b2JqZWN0cyA9IEZhbHNlCisgICAgQHByb3BlcnR5CisgICAgZGVmIHNjYWxpbmcoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9zY2FsaW5nCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHNlbGYuX3NjYWxpbmcgPSBmbG9hdChzZWxmLnJvb3QuY2FsbCgndGsnLCAnc2NhbGluZycpKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3NjYWxpbmcKIAotICAgIGRlZiBjcmVhdGUoc2VsZiwgKiprd2FyZ3MpOgotICAgICAgICB3aWRnZXQgPSBzZWxmLl9jcmVhdGUoKiprd2FyZ3MpCi0gICAgICAgIHNlbGYuYWRkQ2xlYW51cCh3aWRnZXQuZGVzdHJveSkKLSAgICAgICAgcmV0dXJuIHdpZGdldAorICAgIGRlZiBfc3RyKHNlbGYsIHZhbHVlKToKKyAgICAgICAgaWYgbm90IHNlbGYuX3N0cmluZ2lmeSBhbmQgc2VsZi53YW50b2JqZWN0cyBhbmQgdGNsX3ZlcnNpb24gPj0gKDgsIDYpOgorICAgICAgICAgICAgcmV0dXJuIHZhbHVlCisgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIHR1cGxlKToKKyAgICAgICAgICAgIHJldHVybiAnICcuam9pbihtYXAoc2VsZi5fc3RyLCB2YWx1ZSkpCisgICAgICAgIHJldHVybiBzdHIodmFsdWUpCiAKICAgICBkZWYgYXNzZXJ0RXF1YWwyKHNlbGYsIGFjdHVhbCwgZXhwZWN0ZWQsIG1zZz1Ob25lLCBlcT1vYmplY3QuX19lcV9fKToKICAgICAgICAgaWYgZXEoYWN0dWFsLCBleHBlY3RlZCk6CkBAIC01MCw3ICs1NCw3IEBACiAgICAgICAgICAgICBleHBlY3RlZCA9IHZhbHVlCiAgICAgICAgIGlmIGNvbnY6CiAgICAgICAgICAgICBleHBlY3RlZCA9IGNvbnYoZXhwZWN0ZWQpCi0gICAgICAgIGlmIG5vdCBzZWxmLndhbnRvYmplY3RzOgorICAgICAgICBpZiBzZWxmLl9zdHJpbmdpZnkgb3Igbm90IHNlbGYud2FudG9iamVjdHM6CiAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV4cGVjdGVkLCB0dXBsZSk6CiAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSB0a2ludGVyLl9qb2luKGV4cGVjdGVkKQogICAgICAgICAgICAgZWxzZToKQEAgLTE4Miw3ICsxODYsNyBAQAogICAgICAgICAgICAgICAgIGVycm1zZz1lcnJtc2cpCiAKICAgICBkZWYgY2hlY2tJbWFnZVBhcmFtKHNlbGYsIHdpZGdldCwgbmFtZSk6Ci0gICAgICAgIGltYWdlID0gdGtpbnRlci5QaG90b0ltYWdlKCdpbWFnZTEnKQorICAgICAgICBpbWFnZSA9IHRraW50ZXIuUGhvdG9JbWFnZShtYXN0ZXI9c2VsZi5yb290LCBuYW1lPSdpbWFnZTEnKQogICAgICAgICBzZWxmLmNoZWNrUGFyYW0od2lkZ2V0LCBuYW1lLCBpbWFnZSwgY29udj1zdHIpCiAgICAgICAgIHNlbGYuY2hlY2tJbnZhbGlkUGFyYW0od2lkZ2V0LCBuYW1lLCAnc3BhbScsCiAgICAgICAgICAgICAgICAgZXJybXNnPSdpbWFnZSAic3BhbSIgZG9lc25cJ3QgZXhpc3QnKQpAQCAtMTkxLDYgKzE5NSwxNiBAQAogICAgIGRlZiBjaGVja1ZhcmlhYmxlUGFyYW0oc2VsZiwgd2lkZ2V0LCBuYW1lLCB2YXIpOgogICAgICAgICBzZWxmLmNoZWNrUGFyYW0od2lkZ2V0LCBuYW1lLCB2YXIsIGNvbnY9c3RyKQogCisgICAgZGVmIGFzc2VydElzQm91bmRpbmdCb3goc2VsZiwgYmJveCk6CisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKGJib3gpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShiYm94LCB0dXBsZSkKKyAgICAgICAgaWYgbGVuKGJib3gpICE9IDQ6CisgICAgICAgICAgICBzZWxmLmZhaWwoJ0ludmFsaWQgYm91bmRpbmcgYm94OiAlcicgJSAoYmJveCwpKQorICAgICAgICBmb3IgaXRlbSBpbiBiYm94OgorICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoaXRlbSwgaW50KToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ0ludmFsaWQgYm91bmRpbmcgYm94OiAlcicgJSAoYmJveCwpKQorICAgICAgICAgICAgICAgIGJyZWFrCisKIAogY2xhc3MgU3RhbmRhcmRPcHRpb25zVGVzdHM6CiAgICAgU1RBTkRBUkRfT1BUSU9OUyA9ICgKQEAgLTM5Myw3ICs0MDcsNyBAQAogCiAgICAgZGVmIHRlc3RfdGV4dHZhcmlhYmxlKHNlbGYpOgogICAgICAgICB3aWRnZXQgPSBzZWxmLmNyZWF0ZSgpCi0gICAgICAgIHZhciA9IHRraW50ZXIuU3RyaW5nVmFyKCkKKyAgICAgICAgdmFyID0gdGtpbnRlci5TdHJpbmdWYXIoc2VsZi5yb290KQogICAgICAgICBzZWxmLmNoZWNrVmFyaWFibGVQYXJhbSh3aWRnZXQsICd0ZXh0dmFyaWFibGUnLCB2YXIpCiAKICAgICBkZWYgdGVzdF90cm91Z2hjb2xvcihzZWxmKToKQEAgLTQ1NCw3ICs0NjgsNyBAQAogCiAgICAgZGVmIHRlc3RfdmFyaWFibGUoc2VsZik6CiAgICAgICAgIHdpZGdldCA9IHNlbGYuY3JlYXRlKCkKLSAgICAgICAgdmFyID0gdGtpbnRlci5Eb3VibGVWYXIoKQorICAgICAgICB2YXIgPSB0a2ludGVyLkRvdWJsZVZhcihzZWxmLnJvb3QpCiAgICAgICAgIHNlbGYuY2hlY2tWYXJpYWJsZVBhcmFtKHdpZGdldCwgJ3ZhcmlhYmxlJywgdmFyKQogCiAKZGlmZiAtLWdpdCBhL0xpYi90a2ludGVyL3RpeC5weSBiL0xpYi90a2ludGVyL3RpeC5weQppbmRleCAxMzFhYTA2Li5jMWNkZmE3IDEwMDY0NAotLS0gYS9MaWIvdGtpbnRlci90aXgucHkKKysrIGIvTGliL3RraW50ZXIvdGl4LnB5CkBAIC0yNyw3ICsyNyw3IEBACiAjCiAKIGZyb20gdGtpbnRlciBpbXBvcnQgKgotZnJvbSB0a2ludGVyIGltcG9ydCBfZmxhdHRlbiwgX2NuZm1lcmdlLCBfZGVmYXVsdF9yb290Citmcm9tIHRraW50ZXIgaW1wb3J0IF9jbmZtZXJnZSwgX2RlZmF1bHRfcm9vdAogCiAjIFdBUk5JTkcgLSBUa1ZlcnNpb24gaXMgYSBsaW1pdGVkIHByZWNpc2lvbiBmbG9hdGluZyBwb2ludCBudW1iZXIKIGlmIFRrVmVyc2lvbiA8IDMuOTk5OgpkaWZmIC0tZ2l0IGEvTGliL3RraW50ZXIvdHRrLnB5IGIvTGliL3RraW50ZXIvdHRrLnB5CmluZGV4IGNhOTAyNzMuLjI0NGZiM2QgMTAwNjQ0Ci0tLSBhL0xpYi90a2ludGVyL3R0ay5weQorKysgYi9MaWIvdGtpbnRlci90dGsucHkKQEAgLTI2LDcgKzI2LDcgQEAKICAgICAgICAgICAgInRjbG9ianNfdG9fcHkiLCAic2V0dXBfbWFzdGVyIl0KIAogaW1wb3J0IHRraW50ZXIKLWZyb20gdGtpbnRlciBpbXBvcnQgX2ZsYXR0ZW4sIF9qb2luLCBfc3RyaW5naWZ5Citmcm9tIHRraW50ZXIgaW1wb3J0IF9mbGF0dGVuLCBfam9pbiwgX3N0cmluZ2lmeSwgX3NwbGl0ZGljdAogCiAjIFZlcmlmeSBpZiBUayBpcyBuZXcgZW5vdWdoIHRvIG5vdCBuZWVkIHRoZSBUaWxlIHBhY2thZ2UKIF9SRVFVSVJFX1RJTEUgPSBUcnVlIGlmIHRraW50ZXIuVGtWZXJzaW9uIDwgOC41IGVsc2UgRmFsc2UKQEAgLTI0MCwyMSArMjQwLDYgQEAKIAogICAgIHJldHVybiAnXG4nLmpvaW4oc2NyaXB0KQogCi1kZWYgX2RpY3RfZnJvbV90Y2x0dXBsZSh0dHVwbGUsIGN1dF9taW51cz1UcnVlKToKLSAgICAiIiJCcmVhayB0dXBsZSBpbiBwYWlycywgZm9ybWF0IGl0IHByb3Blcmx5LCB0aGVuIGJ1aWxkIHRoZSByZXR1cm4KLSAgICBkaWN0LiBJZiBjdXRfbWludXMgaXMgVHJ1ZSwgdGhlIHN1cHBvc2VkICctJyBwcmVmaXhpbmcgb3B0aW9ucyB3aWxsCi0gICAgYmUgcmVtb3ZlZC4KLQotICAgIHR0dXBsZSBpcyBleHBlY3RlZCB0byBjb250YWluIGFuIGV2ZW4gbnVtYmVyIG9mIGVsZW1lbnRzLiIiIgotICAgIG9wdF9zdGFydCA9IDEgaWYgY3V0X21pbnVzIGVsc2UgMAotCi0gICAgcmV0ZGljdCA9IHt9Ci0gICAgaXQgPSBpdGVyKHR0dXBsZSkKLSAgICBmb3Igb3B0LCB2YWwgaW4gemlwKGl0LCBpdCk6Ci0gICAgICAgIHJldGRpY3Rbc3RyKG9wdClbb3B0X3N0YXJ0Ol1dID0gdmFsCi0KLSAgICByZXR1cm4gdGNsb2Jqc190b19weShyZXRkaWN0KQotCiBkZWYgX2xpc3RfZnJvbV9zdGF0ZXNwZWMoc3R1cGxlKToKICAgICAiIiJDb25zdHJ1Y3QgYSBsaXN0IGZyb20gdGhlIGdpdmVuIHN0YXRlc3BlYyB0dXBsZSBhY2NvcmRpbmcgdG8gdGhlCiAgICAgYWNjZXB0ZWQgc3RhdGVzcGVjIGFjY2VwdGVkIGJ5IF9mb3JtYXRfbWFwZGljdC4iIiIKQEAgLTI3Miw5ICsyNTcsMTAgQEAKICAgICBpdCA9IGl0ZXIobnZhbCkKICAgICByZXR1cm4gW19mbGF0dGVuKHNwZWMpIGZvciBzcGVjIGluIHppcChpdCwgaXQpXQogCi1kZWYgX2xpc3RfZnJvbV9sYXlvdXR0dXBsZShsdHVwbGUpOgorZGVmIF9saXN0X2Zyb21fbGF5b3V0dHVwbGUodGssIGx0dXBsZSk6CiAgICAgIiIiQ29uc3RydWN0IGEgbGlzdCBmcm9tIHRoZSB0dXBsZSByZXR1cm5lZCBieSB0dGs6OmxheW91dCwgdGhpcyBpcwogICAgIHNvbWV3aGF0IHRoZSByZXZlcnNlIG9mIF9mb3JtYXRfbGF5b3V0bGlzdC4iIiIKKyAgICBsdHVwbGUgPSB0ay5zcGxpdGxpc3QobHR1cGxlKQogICAgIHJlcyA9IFtdCiAKICAgICBpbmR4ID0gMApAQCAtMjkzLDMyICsyNzksMjcgQEAKICAgICAgICAgICAgIGluZHggKz0gMgogCiAgICAgICAgICAgICBpZiBvcHQgPT0gJ2NoaWxkcmVuJzoKLSAgICAgICAgICAgICAgICBpZiAodGtpbnRlci5fZGVmYXVsdF9yb290IGFuZAotICAgICAgICAgICAgICAgICAgICBub3QgdGtpbnRlci5fZGVmYXVsdF9yb290LndhbnRvYmplY3RzKCkpOgotICAgICAgICAgICAgICAgICAgICB2YWwgPSB0a2ludGVyLl9kZWZhdWx0X3Jvb3Quc3BsaXRsaXN0KHZhbCkKLSAgICAgICAgICAgICAgICB2YWwgPSBfbGlzdF9mcm9tX2xheW91dHR1cGxlKHZhbCkKKyAgICAgICAgICAgICAgICB2YWwgPSBfbGlzdF9mcm9tX2xheW91dHR1cGxlKHRrLCB2YWwpCiAKICAgICAgICAgICAgIG9wdHNbb3B0XSA9IHZhbAogCiAgICAgcmV0dXJuIHJlcwogCi1kZWYgX3ZhbF9vcl9kaWN0KG9wdGlvbnMsIGZ1bmMsICphcmdzKToKLSAgICAiIiJGb3JtYXQgb3B0aW9ucyB0aGVuIGNhbGwgZnVuYyB3aXRoIGFyZ3MgYW5kIG9wdGlvbnMgYW5kIHJldHVybgorZGVmIF92YWxfb3JfZGljdCh0aywgb3B0aW9ucywgKmFyZ3MpOgorICAgICIiIkZvcm1hdCBvcHRpb25zIHRoZW4gY2FsbCBUayBjb21tYW5kIHdpdGggYXJncyBhbmQgb3B0aW9ucyBhbmQgcmV0dXJuCiAgICAgdGhlIGFwcHJvcHJpYXRlIHJlc3VsdC4KIAotICAgIElmIG5vIG9wdGlvbiBpcyBzcGVjaWZpZWQsIGEgZGljdCBpcyByZXR1cm5lZC4gSWYgYSBvcHRpb24gaXMKKyAgICBJZiBubyBvcHRpb24gaXMgc3BlY2lmaWVkLCBhIGRpY3QgaXMgcmV0dXJuZWQuIElmIGFuIG9wdGlvbiBpcwogICAgIHNwZWNpZmllZCB3aXRoIHRoZSBOb25lIHZhbHVlLCB0aGUgdmFsdWUgZm9yIHRoYXQgb3B0aW9uIGlzIHJldHVybmVkLgogICAgIE90aGVyd2lzZSwgdGhlIGZ1bmN0aW9uIGp1c3Qgc2V0cyB0aGUgcGFzc2VkIG9wdGlvbnMgYW5kIHRoZSBjYWxsZXIKICAgICBzaG91bGRuJ3QgYmUgZXhwZWN0aW5nIGEgcmV0dXJuIHZhbHVlIGFueXdheS4iIiIKICAgICBvcHRpb25zID0gX2Zvcm1hdF9vcHRkaWN0KG9wdGlvbnMpCi0gICAgcmVzID0gZnVuYygqKGFyZ3MgKyBvcHRpb25zKSkKKyAgICByZXMgPSB0ay5jYWxsKCooYXJncyArIG9wdGlvbnMpKQogCiAgICAgaWYgbGVuKG9wdGlvbnMpICUgMjogIyBvcHRpb24gc3BlY2lmaWVkIHdpdGhvdXQgYSB2YWx1ZSwgcmV0dXJuIGl0cyB2YWx1ZQogICAgICAgICByZXR1cm4gcmVzCiAKLSAgICBpZiB0a2ludGVyLl9kZWZhdWx0X3Jvb3Q6Ci0gICAgICAgIHJlcyA9IHRraW50ZXIuX2RlZmF1bHRfcm9vdC5zcGxpdGxpc3QocmVzKQotICAgIHJldHVybiBfZGljdF9mcm9tX3RjbHR1cGxlKHJlcykKKyAgICByZXR1cm4gX3NwbGl0ZGljdCh0aywgcmVzLCBjb252PV90Y2xvYmpfdG9fcHkpCiAKIGRlZiBfY29udmVydF9zdHJpbmd2YWwodmFsdWUpOgogICAgICIiIkNvbnZlcnRzIGEgdmFsdWUgdG8sIGhvcGVmdWxseSwgYSBtb3JlIGFwcHJvcHJpYXRlIFB5dGhvbiBvYmplY3QuIiIiCkBAIC0zMzgsMjAgKzMxOSwyNCBAQAogICAgICAgICAgICAgeCA9IGludCh4KQogICAgIHJldHVybiB4CiAKK2RlZiBfdGNsb2JqX3RvX3B5KHZhbCk6CisgICAgIiIiUmV0dXJuIHZhbHVlIGNvbnZlcnRlZCBmcm9tIFRjbCBvYmplY3QgdG8gUHl0aG9uIG9iamVjdC4iIiIKKyAgICBpZiB2YWwgYW5kIGhhc2F0dHIodmFsLCAnX19sZW5fXycpIGFuZCBub3QgaXNpbnN0YW5jZSh2YWwsIHN0cik6CisgICAgICAgIGlmIGdldGF0dHIodmFsWzBdLCAndHlwZW5hbWUnLCBOb25lKSA9PSAnU3RhdGVTcGVjJzoKKyAgICAgICAgICAgIHZhbCA9IF9saXN0X2Zyb21fc3RhdGVzcGVjKHZhbCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHZhbCA9IGxpc3QobWFwKF9jb252ZXJ0X3N0cmluZ3ZhbCwgdmFsKSkKKworICAgIGVsaWYgaGFzYXR0cih2YWwsICd0eXBlbmFtZScpOiAjIHNvbWUgb3RoZXIgKHNpbmdsZSkgVGNsIG9iamVjdAorICAgICAgICB2YWwgPSBfY29udmVydF9zdHJpbmd2YWwodmFsKQorCisgICAgcmV0dXJuIHZhbAorCiBkZWYgdGNsb2Jqc190b19weShhZGljdCk6CiAgICAgIiIiUmV0dXJucyBhZGljdCB3aXRoIGl0cyB2YWx1ZXMgY29udmVydGVkIGZyb20gVGNsIG9iamVjdHMgdG8gUHl0aG9uCiAgICAgb2JqZWN0cy4iIiIKICAgICBmb3Igb3B0LCB2YWwgaW4gYWRpY3QuaXRlbXMoKToKLSAgICAgICAgaWYgdmFsIGFuZCBoYXNhdHRyKHZhbCwgJ19fbGVuX18nKSBhbmQgbm90IGlzaW5zdGFuY2UodmFsLCBzdHIpOgotICAgICAgICAgICAgaWYgZ2V0YXR0cih2YWxbMF0sICd0eXBlbmFtZScsIE5vbmUpID09ICdTdGF0ZVNwZWMnOgotICAgICAgICAgICAgICAgIHZhbCA9IF9saXN0X2Zyb21fc3RhdGVzcGVjKHZhbCkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgdmFsID0gbGlzdChtYXAoX2NvbnZlcnRfc3RyaW5ndmFsLCB2YWwpKQotCi0gICAgICAgIGVsaWYgaGFzYXR0cih2YWwsICd0eXBlbmFtZScpOiAjIHNvbWUgb3RoZXIgKHNpbmdsZSkgVGNsIG9iamVjdAotICAgICAgICAgICAgdmFsID0gX2NvbnZlcnRfc3RyaW5ndmFsKHZhbCkKLQotICAgICAgICBhZGljdFtvcHRdID0gdmFsCisgICAgICAgIGFkaWN0W29wdF0gPSBfdGNsb2JqX3RvX3B5KHZhbCkKIAogICAgIHJldHVybiBhZGljdAogCkBAIC0zOTYsNyArMzgxLDcgQEAKICAgICAgICAgYSBzZXF1ZW5jZSBpZGVudGlmeWluZyB0aGUgdmFsdWUgZm9yIHRoYXQgb3B0aW9uLiIiIgogICAgICAgICBpZiBxdWVyeV9vcHQgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBrd1txdWVyeV9vcHRdID0gTm9uZQotICAgICAgICByZXR1cm4gX3ZhbF9vcl9kaWN0KGt3LCBzZWxmLnRrLmNhbGwsIHNlbGYuX25hbWUsICJjb25maWd1cmUiLCBzdHlsZSkKKyAgICAgICAgcmV0dXJuIF92YWxfb3JfZGljdChzZWxmLnRrLCBrdywgc2VsZi5fbmFtZSwgImNvbmZpZ3VyZSIsIHN0eWxlKQogCiAKICAgICBkZWYgbWFwKHNlbGYsIHN0eWxlLCBxdWVyeV9vcHQ9Tm9uZSwgKiprdyk6CkBAIC00MTEsOCArMzk2LDEwIEBACiAgICAgICAgICAgICByZXR1cm4gX2xpc3RfZnJvbV9zdGF0ZXNwZWMoc2VsZi50ay5zcGxpdGxpc3QoCiAgICAgICAgICAgICAgICAgc2VsZi50ay5jYWxsKHNlbGYuX25hbWUsICJtYXAiLCBzdHlsZSwgJy0lcycgJSBxdWVyeV9vcHQpKSkKIAotICAgICAgICByZXR1cm4gX2RpY3RfZnJvbV90Y2x0dXBsZSgKLSAgICAgICAgICAgIHNlbGYudGsuY2FsbChzZWxmLl9uYW1lLCAibWFwIiwgc3R5bGUsICooX2Zvcm1hdF9tYXBkaWN0KGt3KSkpKQorICAgICAgICByZXR1cm4gX3NwbGl0ZGljdCgKKyAgICAgICAgICAgIHNlbGYudGssCisgICAgICAgICAgICBzZWxmLnRrLmNhbGwoc2VsZi5fbmFtZSwgIm1hcCIsIHN0eWxlLCAqX2Zvcm1hdF9tYXBkaWN0KGt3KSksCisgICAgICAgICAgICBjb252PV90Y2xvYmpfdG9fcHkpCiAKIAogICAgIGRlZiBsb29rdXAoc2VsZiwgc3R5bGUsIG9wdGlvbiwgc3RhdGU9Tm9uZSwgZGVmYXVsdD1Ob25lKToKQEAgLTQ2Niw4ICs0NTMsOCBAQAogICAgICAgICAgICAgbHNwZWMgPSAibnVsbCIgIyBjb3VsZCBiZSBhbnkgb3RoZXIgd29yZCwgYnV0IHRoaXMgbWF5IG1ha2Ugc2Vuc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgd2hlbiBjYWxsaW5nIGxheW91dChzdHlsZSkgbGF0ZXIKIAotICAgICAgICByZXR1cm4gX2xpc3RfZnJvbV9sYXlvdXR0dXBsZShzZWxmLnRrLnNwbGl0bGlzdCgKLSAgICAgICAgICAgIHNlbGYudGsuY2FsbChzZWxmLl9uYW1lLCAibGF5b3V0Iiwgc3R5bGUsIGxzcGVjKSkpCisgICAgICAgIHJldHVybiBfbGlzdF9mcm9tX2xheW91dHR1cGxlKHNlbGYudGssCisgICAgICAgICAgICBzZWxmLnRrLmNhbGwoc2VsZi5fbmFtZSwgImxheW91dCIsIHN0eWxlLCBsc3BlYykpCiAKIAogICAgIGRlZiBlbGVtZW50X2NyZWF0ZShzZWxmLCBlbGVtZW50bmFtZSwgZXR5cGUsICphcmdzLCAqKmt3KToKQEAgLTU4Niw3ICs1NzMsNyBAQAogICAgICAgICBpZiByZXQgYW5kIGNhbGxiYWNrOgogICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCphcmdzLCAqKmt3KQogCi0gICAgICAgIHJldHVybiBib29sKHJldCkKKyAgICAgICAgcmV0dXJuIHJldAogCiAKICAgICBkZWYgc3RhdGUoc2VsZiwgc3RhdGVzcGVjPU5vbmUpOgpAQCAtNjk0LDcgKzY4MSw3IEBACiAgICAgICAgICIiIkZvcmNlIHJldmFsaWRhdGlvbiwgaW5kZXBlbmRlbnQgb2YgdGhlIGNvbmRpdGlvbnMgc3BlY2lmaWVkCiAgICAgICAgIGJ5IHRoZSB2YWxpZGF0ZSBvcHRpb24uIFJldHVybnMgRmFsc2UgaWYgdmFsaWRhdGlvbiBmYWlscywgVHJ1ZQogICAgICAgICBpZiBpdCBzdWNjZWVkcy4gU2V0cyBvciBjbGVhcnMgdGhlIGludmFsaWQgc3RhdGUgYWNjb3JkaW5nbHkuIiIiCi0gICAgICAgIHJldHVybiBib29sKHNlbGYudGsuZ2V0Ym9vbGVhbihzZWxmLnRrLmNhbGwoc2VsZi5fdywgInZhbGlkYXRlIikpKQorICAgICAgICByZXR1cm4gc2VsZi50ay5nZXRib29sZWFuKHNlbGYudGsuY2FsbChzZWxmLl93LCAidmFsaWRhdGUiKSkKIAogCiBjbGFzcyBDb21ib2JveChFbnRyeSk6CkBAIC05MDcsNyArODk0LDcgQEAKICAgICAgICAgb3B0aW9ucyB0byB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZXMuIiIiCiAgICAgICAgIGlmIG9wdGlvbiBpcyBub3QgTm9uZToKICAgICAgICAgICAgIGt3W29wdGlvbl0gPSBOb25lCi0gICAgICAgIHJldHVybiBfdmFsX29yX2RpY3Qoa3csIHNlbGYudGsuY2FsbCwgc2VsZi5fdywgInRhYiIsIHRhYl9pZCkKKyAgICAgICAgcmV0dXJuIF92YWxfb3JfZGljdChzZWxmLnRrLCBrdywgc2VsZi5fdywgInRhYiIsIHRhYl9pZCkKIAogCiAgICAgZGVmIHRhYnMoc2VsZik6CkBAIC05ODQsNyArOTcxLDcgQEAKICAgICAgICAgT3RoZXJ3aXNlLCBzZXRzIHRoZSBvcHRpb25zIHRvIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlcy4iIiIKICAgICAgICAgaWYgb3B0aW9uIGlzIG5vdCBOb25lOgogICAgICAgICAgICAga3dbb3B0aW9uXSA9IE5vbmUKLSAgICAgICAgcmV0dXJuIF92YWxfb3JfZGljdChrdywgc2VsZi50ay5jYWxsLCBzZWxmLl93LCAicGFuZSIsIHBhbmUpCisgICAgICAgIHJldHVybiBfdmFsX29yX2RpY3Qoc2VsZi50aywga3csIHNlbGYuX3csICJwYW5lIiwgcGFuZSkKIAogCiAgICAgZGVmIHNhc2hwb3Moc2VsZiwgaW5kZXgsIG5ld3Bvcz1Ob25lKToKQEAgLTEyMjMsNyArMTIxMCw3IEBACiAgICAgICAgIE90aGVyd2lzZSwgc2V0cyB0aGUgb3B0aW9ucyB0byB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZXMuIiIiCiAgICAgICAgIGlmIG9wdGlvbiBpcyBub3QgTm9uZToKICAgICAgICAgICAgIGt3W29wdGlvbl0gPSBOb25lCi0gICAgICAgIHJldHVybiBfdmFsX29yX2RpY3Qoa3csIHNlbGYudGsuY2FsbCwgc2VsZi5fdywgImNvbHVtbiIsIGNvbHVtbikKKyAgICAgICAgcmV0dXJuIF92YWxfb3JfZGljdChzZWxmLnRrLCBrdywgc2VsZi5fdywgImNvbHVtbiIsIGNvbHVtbikKIAogCiAgICAgZGVmIGRlbGV0ZShzZWxmLCAqaXRlbXMpOgpAQCAtMTI0NCw3ICsxMjMxLDcgQEAKICAgICBkZWYgZXhpc3RzKHNlbGYsIGl0ZW0pOgogICAgICAgICAiIiJSZXR1cm5zIFRydWUgaWYgdGhlIHNwZWNpZmllZCBpdGVtIGlzIHByZXNlbnQgaW4gdGhlIHRyZWUsCiAgICAgICAgIEZhbHNlIG90aGVyd2lzZS4iIiIKLSAgICAgICAgcmV0dXJuIGJvb2woc2VsZi50ay5nZXRib29sZWFuKHNlbGYudGsuY2FsbChzZWxmLl93LCAiZXhpc3RzIiwgaXRlbSkpKQorICAgICAgICByZXR1cm4gc2VsZi50ay5nZXRib29sZWFuKHNlbGYudGsuY2FsbChzZWxmLl93LCAiZXhpc3RzIiwgaXRlbSkpCiAKIAogICAgIGRlZiBmb2N1cyhzZWxmLCBpdGVtPU5vbmUpOgpAQCAtMTI4Miw3ICsxMjY5LDcgQEAKICAgICAgICAgaWYgb3B0aW9uIGlzIG5vdCBOb25lOgogICAgICAgICAgICAga3dbb3B0aW9uXSA9IE5vbmUKIAotICAgICAgICByZXR1cm4gX3ZhbF9vcl9kaWN0KGt3LCBzZWxmLnRrLmNhbGwsIHNlbGYuX3csICdoZWFkaW5nJywgY29sdW1uKQorICAgICAgICByZXR1cm4gX3ZhbF9vcl9kaWN0KHNlbGYudGssIGt3LCBzZWxmLl93LCAnaGVhZGluZycsIGNvbHVtbikKIAogCiAgICAgZGVmIGlkZW50aWZ5KHNlbGYsIGNvbXBvbmVudCwgeCwgeSk6CkBAIC0xMzYxLDcgKzEzNDgsNyBAQAogICAgICAgICB2YWx1ZXMgYXMgZ2l2ZW4gYnkga3cuIiIiCiAgICAgICAgIGlmIG9wdGlvbiBpcyBub3QgTm9uZToKICAgICAgICAgICAgIGt3W29wdGlvbl0gPSBOb25lCi0gICAgICAgIHJldHVybiBfdmFsX29yX2RpY3Qoa3csIHNlbGYudGsuY2FsbCwgc2VsZi5fdywgIml0ZW0iLCBpdGVtKQorICAgICAgICByZXR1cm4gX3ZhbF9vcl9kaWN0KHNlbGYudGssIGt3LCBzZWxmLl93LCAiaXRlbSIsIGl0ZW0pCiAKIAogICAgIGRlZiBtb3ZlKHNlbGYsIGl0ZW0sIHBhcmVudCwgaW5kZXgpOgpAQCAtMTQyOSwxMyArMTQxNiwxNiBAQAogCiAKICAgICBkZWYgc2V0KHNlbGYsIGl0ZW0sIGNvbHVtbj1Ob25lLCB2YWx1ZT1Ob25lKToKLSAgICAgICAgIiIiV2l0aCBvbmUgYXJndW1lbnQsIHJldHVybnMgYSBkaWN0aW9uYXJ5IG9mIGNvbHVtbi92YWx1ZSBwYWlycwotICAgICAgICBmb3IgdGhlIHNwZWNpZmllZCBpdGVtLiBXaXRoIHR3byBhcmd1bWVudHMsIHJldHVybnMgdGhlIGN1cnJlbnQKLSAgICAgICAgdmFsdWUgb2YgdGhlIHNwZWNpZmllZCBjb2x1bW4uIFdpdGggdGhyZWUgYXJndW1lbnRzLCBzZXRzIHRoZQorICAgICAgICAiIiJRdWVyeSBvciBzZXQgdGhlIHZhbHVlIG9mIGdpdmVuIGl0ZW0uCisKKyAgICAgICAgV2l0aCBvbmUgYXJndW1lbnQsIHJldHVybiBhIGRpY3Rpb25hcnkgb2YgY29sdW1uL3ZhbHVlIHBhaXJzCisgICAgICAgIGZvciB0aGUgc3BlY2lmaWVkIGl0ZW0uIFdpdGggdHdvIGFyZ3VtZW50cywgcmV0dXJuIHRoZSBjdXJyZW50CisgICAgICAgIHZhbHVlIG9mIHRoZSBzcGVjaWZpZWQgY29sdW1uLiBXaXRoIHRocmVlIGFyZ3VtZW50cywgc2V0IHRoZQogICAgICAgICB2YWx1ZSBvZiBnaXZlbiBjb2x1bW4gaW4gZ2l2ZW4gaXRlbSB0byB0aGUgc3BlY2lmaWVkIHZhbHVlLiIiIgogICAgICAgICByZXMgPSBzZWxmLnRrLmNhbGwoc2VsZi5fdywgInNldCIsIGl0ZW0sIGNvbHVtbiwgdmFsdWUpCiAgICAgICAgIGlmIGNvbHVtbiBpcyBOb25lIGFuZCB2YWx1ZSBpcyBOb25lOgotICAgICAgICAgICAgcmV0dXJuIF9kaWN0X2Zyb21fdGNsdHVwbGUoc2VsZi50ay5zcGxpdGxpc3QocmVzKSwgRmFsc2UpCisgICAgICAgICAgICByZXR1cm4gX3NwbGl0ZGljdChzZWxmLnRrLCByZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXRfbWludXM9RmFsc2UsIGNvbnY9X3RjbG9ial90b19weSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHJldHVybiByZXMKIApAQCAtMTQ1Niw3ICsxNDQ2LDcgQEAKICAgICAgICAgdmFsdWVzIGZvciB0aGUgZ2l2ZW4gdGFnbmFtZS4iIiIKICAgICAgICAgaWYgb3B0aW9uIGlzIG5vdCBOb25lOgogICAgICAgICAgICAga3dbb3B0aW9uXSA9IE5vbmUKLSAgICAgICAgcmV0dXJuIF92YWxfb3JfZGljdChrdywgc2VsZi50ay5jYWxsLCBzZWxmLl93LCAidGFnIiwgImNvbmZpZ3VyZSIsCisgICAgICAgIHJldHVybiBfdmFsX29yX2RpY3Qoc2VsZi50aywga3csIHNlbGYuX3csICJ0YWciLCAiY29uZmlndXJlIiwKICAgICAgICAgICAgIHRhZ25hbWUpCiAKIApAQCAtMTQ2Niw3ICsxNDU2LDExIEBACiAgICAgICAgIGFsbCBpdGVtcyB3aGljaCBoYXZlIHRoZSBzcGVjaWZpZWQgdGFnLgogCiAgICAgICAgICogQXZhaWxhYmlsaXR5OiBUayA4LjYiIiIKLSAgICAgICAgcmV0dXJuIHNlbGYudGsuZ2V0Ym9vbGVhbigKKyAgICAgICAgaWYgaXRlbSBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYudGsuc3BsaXRsaXN0KAorICAgICAgICAgICAgICAgIHNlbGYudGsuY2FsbChzZWxmLl93LCAidGFnIiwgImhhcyIsIHRhZ25hbWUpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYudGsuZ2V0Ym9vbGVhbigKICAgICAgICAgICAgICAgICBzZWxmLnRrLmNhbGwoc2VsZi5fdywgInRhZyIsICJoYXMiLCB0YWduYW1lLCBpdGVtKSkKIAogCmRpZmYgLS1naXQgYS9MaWIvdG9rZW4ucHkgYi9MaWIvdG9rZW4ucHkKaW5kZXggMzFmYWUwYS4uNzQ3MGM4YyAxMDA2NDQKLS0tIGEvTGliL3Rva2VuLnB5CisrKyBiL0xpYi90b2tlbi5weQpAQCAtOTMsNyArOTMsNyBAQAogICAgICAgICBvdXRGaWxlTmFtZSA9IGFyZ3NbMV0KICAgICB0cnk6CiAgICAgICAgIGZwID0gb3BlbihpbkZpbGVOYW1lKQotICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGVycjoKKyAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIkkvTyBlcnJvcjogJXNcbiIgJSBzdHIoZXJyKSkKICAgICAgICAgc3lzLmV4aXQoMSkKICAgICBsaW5lcyA9IGZwLnJlYWQoKS5zcGxpdCgiXG4iKQpAQCAtMTEyLDcgKzExMiw3IEBACiAgICAgIyBsb2FkIHRoZSBvdXRwdXQgc2tlbGV0b24gZnJvbSB0aGUgdGFyZ2V0OgogICAgIHRyeToKICAgICAgICAgZnAgPSBvcGVuKG91dEZpbGVOYW1lKQotICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGVycjoKKyAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIkkvTyBlcnJvcjogJXNcbiIgJSBzdHIoZXJyKSkKICAgICAgICAgc3lzLmV4aXQoMikKICAgICBmb3JtYXQgPSBmcC5yZWFkKCkuc3BsaXQoIlxuIikKQEAgLTEyOSw3ICsxMjksNyBAQAogICAgIGZvcm1hdFtzdGFydDplbmRdID0gbGluZXMKICAgICB0cnk6CiAgICAgICAgIGZwID0gb3BlbihvdXRGaWxlTmFtZSwgJ3cnKQotICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGVycjoKKyAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIkkvTyBlcnJvcjogJXNcbiIgJSBzdHIoZXJyKSkKICAgICAgICAgc3lzLmV4aXQoNCkKICAgICBmcC53cml0ZSgiXG4iLmpvaW4oZm9ybWF0KSkKZGlmZiAtLWdpdCBhL0xpYi90b2tlbml6ZS5weSBiL0xpYi90b2tlbml6ZS5weQppbmRleCA1MzA0ZGU1Li40ZDkzYTgzIDEwMDY0NAotLS0gYS9MaWIvdG9rZW5pemUucHkKKysrIGIvTGliL3Rva2VuaXplLnB5CkBAIC0yNCw3ICsyNCw3IEBACiBfX2NyZWRpdHNfXyA9ICgnR3ZSLCBFU1IsIFRpbSBQZXRlcnMsIFRob21hcyBXb3V0ZXJzLCBGcmVkIERyYWtlLCAnCiAgICAgICAgICAgICAgICAnU2tpcCBNb250YW5hcm8sIFJheW1vbmQgSGV0dGluZ2VyLCBUcmVudCBOZWxzb24sICcKICAgICAgICAgICAgICAgICdNaWNoYWVsIEZvb3JkJykKLWltcG9ydCBidWlsdGlucworZnJvbSBidWlsdGlucyBpbXBvcnQgb3BlbiBhcyBfYnVpbHRpbl9vcGVuCiBmcm9tIGNvZGVjcyBpbXBvcnQgbG9va3VwLCBCT01fVVRGOAogaW1wb3J0IGNvbGxlY3Rpb25zCiBmcm9tIGlvIGltcG9ydCBUZXh0SU9XcmFwcGVyCkBAIC0yNDQsNiArMjQ0LDggQEAKIAogICAgIGRlZiB1bnRva2VuaXplKHNlbGYsIGl0ZXJhYmxlKToKICAgICAgICAgaXQgPSBpdGVyKGl0ZXJhYmxlKQorICAgICAgICBpbmRlbnRzID0gW10KKyAgICAgICAgc3RhcnRsaW5lID0gRmFsc2UKICAgICAgICAgZm9yIHQgaW4gaXQ6CiAgICAgICAgICAgICBpZiBsZW4odCkgPT0gMjoKICAgICAgICAgICAgICAgICBzZWxmLmNvbXBhdCh0LCBpdCkKQEAgLTI1NCw2ICsyNTYsMjEgQEAKICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgaWYgdG9rX3R5cGUgPT0gRU5ETUFSS0VSOgogICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBpZiB0b2tfdHlwZSA9PSBJTkRFTlQ6CisgICAgICAgICAgICAgICAgaW5kZW50cy5hcHBlbmQodG9rZW4pCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGVsaWYgdG9rX3R5cGUgPT0gREVERU5UOgorICAgICAgICAgICAgICAgIGluZGVudHMucG9wKCkKKyAgICAgICAgICAgICAgICBzZWxmLnByZXZfcm93LCBzZWxmLnByZXZfY29sID0gZW5kCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGVsaWYgdG9rX3R5cGUgaW4gKE5FV0xJTkUsIE5MKToKKyAgICAgICAgICAgICAgICBzdGFydGxpbmUgPSBUcnVlCisgICAgICAgICAgICBlbGlmIHN0YXJ0bGluZSBhbmQgaW5kZW50czoKKyAgICAgICAgICAgICAgICBpbmRlbnQgPSBpbmRlbnRzWy0xXQorICAgICAgICAgICAgICAgIGlmIHN0YXJ0WzFdID49IGxlbihpbmRlbnQpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnRva2Vucy5hcHBlbmQoaW5kZW50KQorICAgICAgICAgICAgICAgICAgICBzZWxmLnByZXZfY29sID0gbGVuKGluZGVudCkKKyAgICAgICAgICAgICAgICBzdGFydGxpbmUgPSBGYWxzZQogICAgICAgICAgICAgc2VsZi5hZGRfd2hpdGVzcGFjZShzdGFydCkKICAgICAgICAgICAgIHNlbGYudG9rZW5zLmFwcGVuZCh0b2tlbikKICAgICAgICAgICAgIHNlbGYucHJldl9yb3csIHNlbGYucHJldl9jb2wgPSBlbmQKQEAgLTQzNCwxMiArNDUxLDE2IEBACiAgICAgIiIiT3BlbiBhIGZpbGUgaW4gcmVhZCBvbmx5IG1vZGUgdXNpbmcgdGhlIGVuY29kaW5nIGRldGVjdGVkIGJ5CiAgICAgZGV0ZWN0X2VuY29kaW5nKCkuCiAgICAgIiIiCi0gICAgYnVmZmVyID0gYnVpbHRpbnMub3BlbihmaWxlbmFtZSwgJ3JiJykKLSAgICBlbmNvZGluZywgbGluZXMgPSBkZXRlY3RfZW5jb2RpbmcoYnVmZmVyLnJlYWRsaW5lKQotICAgIGJ1ZmZlci5zZWVrKDApCi0gICAgdGV4dCA9IFRleHRJT1dyYXBwZXIoYnVmZmVyLCBlbmNvZGluZywgbGluZV9idWZmZXJpbmc9VHJ1ZSkKLSAgICB0ZXh0Lm1vZGUgPSAncicKLSAgICByZXR1cm4gdGV4dAorICAgIGJ1ZmZlciA9IF9idWlsdGluX29wZW4oZmlsZW5hbWUsICdyYicpCisgICAgdHJ5OgorICAgICAgICBlbmNvZGluZywgbGluZXMgPSBkZXRlY3RfZW5jb2RpbmcoYnVmZmVyLnJlYWRsaW5lKQorICAgICAgICBidWZmZXIuc2VlaygwKQorICAgICAgICB0ZXh0ID0gVGV4dElPV3JhcHBlcihidWZmZXIsIGVuY29kaW5nLCBsaW5lX2J1ZmZlcmluZz1UcnVlKQorICAgICAgICB0ZXh0Lm1vZGUgPSAncicKKyAgICAgICAgcmV0dXJuIHRleHQKKyAgICBleGNlcHQ6CisgICAgICAgIGJ1ZmZlci5jbG9zZSgpCisgICAgICAgIHJhaXNlCiAKIAogZGVmIHRva2VuaXplKHJlYWRsaW5lKToKQEAgLTY1Nyw3ICs2NzgsNyBAQAogICAgICAgICAjIFRva2VuaXplIHRoZSBpbnB1dAogICAgICAgICBpZiBhcmdzLmZpbGVuYW1lOgogICAgICAgICAgICAgZmlsZW5hbWUgPSBhcmdzLmZpbGVuYW1lCi0gICAgICAgICAgICB3aXRoIGJ1aWx0aW5zLm9wZW4oZmlsZW5hbWUsICdyYicpIGFzIGY6CisgICAgICAgICAgICB3aXRoIF9idWlsdGluX29wZW4oZmlsZW5hbWUsICdyYicpIGFzIGY6CiAgICAgICAgICAgICAgICAgdG9rZW5zID0gbGlzdCh0b2tlbml6ZShmLnJlYWRsaW5lKSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGZpbGVuYW1lID0gIjxzdGRpbj4iCkBAIC02NzksNyArNzAwLDcgQEAKICAgICAgICAgZXJyb3IoZXJyLmFyZ3NbMF0sIGZpbGVuYW1lLCAobGluZSwgY29sdW1uKSkKICAgICBleGNlcHQgU3ludGF4RXJyb3IgYXMgZXJyOgogICAgICAgICBlcnJvcihlcnIsIGZpbGVuYW1lKQotICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGVycjoKKyAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgICAgIGVycm9yKGVycikKICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CiAgICAgICAgIHByaW50KCJpbnRlcnJ1cHRlZFxuIikKZGlmZiAtLWdpdCBhL0xpYi90cmFjZS5weSBiL0xpYi90cmFjZS5weQppbmRleCBjMDliMzY1Li4wOWZlOWVlIDEwMDc1NQotLS0gYS9MaWIvdHJhY2UucHkKKysrIGIvTGliL3RyYWNlLnB5CkBAIC0yMzgsNyArMjM4LDcgQEAKICAgICAgICAgICAgICAgICBjb3VudHMsIGNhbGxlZGZ1bmNzLCBjYWxsZXJzID0gXAogICAgICAgICAgICAgICAgICAgICAgICAgcGlja2xlLmxvYWQob3BlbihzZWxmLmluZmlsZSwgJ3JiJykpCiAgICAgICAgICAgICAgICAgc2VsZi51cGRhdGUoc2VsZi5fX2NsYXNzX18oY291bnRzLCBjYWxsZWRmdW5jcywgY2FsbGVycykpCi0gICAgICAgICAgICBleGNlcHQgKElPRXJyb3IsIEVPRkVycm9yLCBWYWx1ZUVycm9yKSBhcyBlcnI6CisgICAgICAgICAgICBleGNlcHQgKE9TRXJyb3IsIEVPRkVycm9yLCBWYWx1ZUVycm9yKSBhcyBlcnI6CiAgICAgICAgICAgICAgICAgcHJpbnQoKCJTa2lwcGluZyBjb3VudHMgZmlsZSAlcjogJXMiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHNlbGYuaW5maWxlLCBlcnIpKSwgZmlsZT1zeXMuc3RkZXJyKQogCkBAIC0zNDgsNyArMzQ4LDcgQEAKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBwaWNrbGUuZHVtcCgoc2VsZi5jb3VudHMsIHNlbGYuY2FsbGVkZnVuY3MsIHNlbGYuY2FsbGVycyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlbihzZWxmLm91dGZpbGUsICd3YicpLCAxKQotICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgogICAgICAgICAgICAgICAgIHByaW50KCJDYW4ndCBzYXZlIGNvdW50cyBmaWxlcyBiZWNhdXNlICVzIiAlIGVyciwgZmlsZT1zeXMuc3RkZXJyKQogCiAgICAgZGVmIHdyaXRlX3Jlc3VsdHNfZmlsZShzZWxmLCBwYXRoLCBsaW5lcywgbG5vdGFiLCBsaW5lc19oaXQsIGVuY29kaW5nPU5vbmUpOgpAQCAtMzU2LDcgKzM1Niw3IEBACiAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgb3V0ZmlsZSA9IG9wZW4ocGF0aCwgInciLCBlbmNvZGluZz1lbmNvZGluZykKLSAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZXJyOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgICAgICAgICBwcmludCgoInRyYWNlOiBDb3VsZCBub3Qgb3BlbiAlciBmb3Igd3JpdGluZzogJXMiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0gc2tpcHBpbmciICUgKHBhdGgsIGVycikpLCBmaWxlPXN5cy5zdGRlcnIpCiAgICAgICAgICAgICByZXR1cm4gMCwgMApAQCAtNDM3LDcgKzQzNyw3IEBACiAgICAgICAgIHdpdGggdG9rZW5pemUub3BlbihmaWxlbmFtZSkgYXMgZjoKICAgICAgICAgICAgIHByb2cgPSBmLnJlYWQoKQogICAgICAgICAgICAgZW5jb2RpbmcgPSBmLmVuY29kaW5nCi0gICAgZXhjZXB0IElPRXJyb3IgYXMgZXJyOgorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKICAgICAgICAgcHJpbnQoKCJOb3QgcHJpbnRpbmcgY292ZXJhZ2UgZGF0YSBmb3IgJXI6ICVzIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoZmlsZW5hbWUsIGVycikpLCBmaWxlPXN5cy5zdGRlcnIpCiAgICAgICAgIHJldHVybiB7fQpAQCAtODAyLDcgKzgwMiw3IEBACiAgICAgICAgICAgICAgICAgJ19fY2FjaGVkX18nOiBOb25lLAogICAgICAgICAgICAgfQogICAgICAgICAgICAgdC5ydW5jdHgoY29kZSwgZ2xvYnMsIGdsb2JzKQotICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlcnI6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKICAgICAgICAgICAgIF9lcnJfZXhpdCgiQ2Fubm90IHJ1biBmaWxlICVyIGJlY2F1c2U6ICVzIiAlIChzeXMuYXJndlswXSwgZXJyKSkKICAgICAgICAgZXhjZXB0IFN5c3RlbUV4aXQ6CiAgICAgICAgICAgICBwYXNzCmRpZmYgLS1naXQgYS9MaWIvdHJhY2ViYWNrLnB5IGIvTGliL3RyYWNlYmFjay5weQppbmRleCBmMzNmY2VkLi5mYWY1OTNhIDEwMDY0NAotLS0gYS9MaWIvdHJhY2ViYWNrLnB5CisrKyBiL0xpYi90cmFjZWJhY2sucHkKQEAgLTIsMjYgKzIsMzIgQEAKIAogaW1wb3J0IGxpbmVjYWNoZQogaW1wb3J0IHN5cworaW1wb3J0IG9wZXJhdG9yCiAKIF9fYWxsX18gPSBbJ2V4dHJhY3Rfc3RhY2snLCAnZXh0cmFjdF90YicsICdmb3JtYXRfZXhjZXB0aW9uJywKICAgICAgICAgICAgJ2Zvcm1hdF9leGNlcHRpb25fb25seScsICdmb3JtYXRfbGlzdCcsICdmb3JtYXRfc3RhY2snLAogICAgICAgICAgICAnZm9ybWF0X3RiJywgJ3ByaW50X2V4YycsICdmb3JtYXRfZXhjJywgJ3ByaW50X2V4Y2VwdGlvbicsCi0gICAgICAgICAgICdwcmludF9sYXN0JywgJ3ByaW50X3N0YWNrJywgJ3ByaW50X3RiJ10KKyAgICAgICAgICAgJ3ByaW50X2xhc3QnLCAncHJpbnRfc3RhY2snLCAncHJpbnRfdGInLAorICAgICAgICAgICAnY2xlYXJfZnJhbWVzJ10KIAotZGVmIF9wcmludChmaWxlLCBzdHI9JycsIHRlcm1pbmF0b3I9J1xuJyk6Ci0gICAgZmlsZS53cml0ZShzdHIrdGVybWluYXRvcikKKyMKKyMgRm9ybWF0dGluZyBhbmQgcHJpbnRpbmcgbGlzdHMgb2YgdHJhY2ViYWNrIGxpbmVzLgorIwogCitkZWYgX2Zvcm1hdF9saXN0X2l0ZXIoZXh0cmFjdGVkX2xpc3QpOgorICAgIGZvciBmaWxlbmFtZSwgbGluZW5vLCBuYW1lLCBsaW5lIGluIGV4dHJhY3RlZF9saXN0OgorICAgICAgICBpdGVtID0gJyAgRmlsZSAie30iLCBsaW5lIHt9LCBpbiB7fVxuJy5mb3JtYXQoZmlsZW5hbWUsIGxpbmVubywgbmFtZSkKKyAgICAgICAgaWYgbGluZToKKyAgICAgICAgICAgIGl0ZW0gPSBpdGVtICsgJyAgICB7fVxuJy5mb3JtYXQobGluZS5zdHJpcCgpKQorICAgICAgICB5aWVsZCBpdGVtCiAKIGRlZiBwcmludF9saXN0KGV4dHJhY3RlZF9saXN0LCBmaWxlPU5vbmUpOgogICAgICIiIlByaW50IHRoZSBsaXN0IG9mIHR1cGxlcyBhcyByZXR1cm5lZCBieSBleHRyYWN0X3RiKCkgb3IKICAgICBleHRyYWN0X3N0YWNrKCkgYXMgYSBmb3JtYXR0ZWQgc3RhY2sgdHJhY2UgdG8gdGhlIGdpdmVuIGZpbGUuIiIiCiAgICAgaWYgZmlsZSBpcyBOb25lOgogICAgICAgICBmaWxlID0gc3lzLnN0ZGVycgotICAgIGZvciBmaWxlbmFtZSwgbGluZW5vLCBuYW1lLCBsaW5lIGluIGV4dHJhY3RlZF9saXN0OgotICAgICAgICBfcHJpbnQoZmlsZSwKLSAgICAgICAgICAgICAgICcgIEZpbGUgIiVzIiwgbGluZSAlZCwgaW4gJXMnICUgKGZpbGVuYW1lLGxpbmVubyxuYW1lKSkKLSAgICAgICAgaWYgbGluZToKLSAgICAgICAgICAgIF9wcmludChmaWxlLCAnICAgICVzJyAlIGxpbmUuc3RyaXAoKSkKKyAgICBmb3IgaXRlbSBpbiBfZm9ybWF0X2xpc3RfaXRlcihleHRyYWN0ZWRfbGlzdCk6CisgICAgICAgIHByaW50KGl0ZW0sIGZpbGU9ZmlsZSwgZW5kPSIiKQogCiBkZWYgZm9ybWF0X2xpc3QoZXh0cmFjdGVkX2xpc3QpOgogICAgICIiIkZvcm1hdCBhIGxpc3Qgb2YgdHJhY2ViYWNrIGVudHJ5IHR1cGxlcyBmb3IgcHJpbnRpbmcuCkBAIC0zMywxNCArMzksNDQgQEAKICAgICB0aGUgc3RyaW5ncyBtYXkgY29udGFpbiBpbnRlcm5hbCBuZXdsaW5lcyBhcyB3ZWxsLCBmb3IgdGhvc2UgaXRlbXMKICAgICB3aG9zZSBzb3VyY2UgdGV4dCBsaW5lIGlzIG5vdCBOb25lLgogICAgICIiIgotICAgIGxpc3QgPSBbXQotICAgIGZvciBmaWxlbmFtZSwgbGluZW5vLCBuYW1lLCBsaW5lIGluIGV4dHJhY3RlZF9saXN0OgotICAgICAgICBpdGVtID0gJyAgRmlsZSAiJXMiLCBsaW5lICVkLCBpbiAlc1xuJyAlIChmaWxlbmFtZSxsaW5lbm8sbmFtZSkKLSAgICAgICAgaWYgbGluZToKLSAgICAgICAgICAgIGl0ZW0gPSBpdGVtICsgJyAgICAlc1xuJyAlIGxpbmUuc3RyaXAoKQotICAgICAgICBsaXN0LmFwcGVuZChpdGVtKQotICAgIHJldHVybiBsaXN0CisgICAgcmV0dXJuIGxpc3QoX2Zvcm1hdF9saXN0X2l0ZXIoZXh0cmFjdGVkX2xpc3QpKQogCisjCisjIFByaW50aW5nIGFuZCBFeHRyYWN0aW5nIFRyYWNlYmFja3MuCisjCisKKyMgZXh0cmFjdG9yIHRha2VzIGN1cnIgYW5kIG5lZWRzIHRvIHJldHVybiBhIHR1cGxlIG9mOgorIyAtIEZyYW1lIG9iamVjdAorIyAtIExpbmUgbnVtYmVyCisjIC0gTmV4dCBpdGVtIChzYW1lIHR5cGUgYXMgY3VycikKKyMgSW4gcHJhY3RpY2UsIGN1cnIgaXMgZWl0aGVyIGEgdHJhY2ViYWNrIG9yIGEgZnJhbWUuCitkZWYgX2V4dHJhY3RfdGJfb3Jfc3RhY2tfaXRlcihjdXJyLCBsaW1pdCwgZXh0cmFjdG9yKToKKyAgICBpZiBsaW1pdCBpcyBOb25lOgorICAgICAgICBsaW1pdCA9IGdldGF0dHIoc3lzLCAndHJhY2ViYWNrbGltaXQnLCBOb25lKQorCisgICAgbiA9IDAKKyAgICB3aGlsZSBjdXJyIGlzIG5vdCBOb25lIGFuZCAobGltaXQgaXMgTm9uZSBvciBuIDwgbGltaXQpOgorICAgICAgICBmLCBsaW5lbm8sIG5leHRfaXRlbSA9IGV4dHJhY3RvcihjdXJyKQorICAgICAgICBjbyA9IGYuZl9jb2RlCisgICAgICAgIGZpbGVuYW1lID0gY28uY29fZmlsZW5hbWUKKyAgICAgICAgbmFtZSA9IGNvLmNvX25hbWUKKworICAgICAgICBsaW5lY2FjaGUuY2hlY2tjYWNoZShmaWxlbmFtZSkKKyAgICAgICAgbGluZSA9IGxpbmVjYWNoZS5nZXRsaW5lKGZpbGVuYW1lLCBsaW5lbm8sIGYuZl9nbG9iYWxzKQorCisgICAgICAgIGlmIGxpbmU6CisgICAgICAgICAgICBsaW5lID0gbGluZS5zdHJpcCgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsaW5lID0gTm9uZQorCisgICAgICAgIHlpZWxkIChmaWxlbmFtZSwgbGluZW5vLCBuYW1lLCBsaW5lKQorICAgICAgICBjdXJyID0gbmV4dF9pdGVtCisgICAgICAgIG4gKz0gMQorCitkZWYgX2V4dHJhY3RfdGJfaXRlcih0YiwgbGltaXQpOgorICAgIHJldHVybiBfZXh0cmFjdF90Yl9vcl9zdGFja19pdGVyKAorICAgICAgICAgICAgICAgIHRiLCBsaW1pdCwKKyAgICAgICAgICAgICAgICBvcGVyYXRvci5hdHRyZ2V0dGVyKCJ0Yl9mcmFtZSIsICJ0Yl9saW5lbm8iLCAidGJfbmV4dCIpKQogCiBkZWYgcHJpbnRfdGIodGIsIGxpbWl0PU5vbmUsIGZpbGU9Tm9uZSk6CiAgICAgIiIiUHJpbnQgdXAgdG8gJ2xpbWl0JyBzdGFjayB0cmFjZSBlbnRyaWVzIGZyb20gdGhlIHRyYWNlYmFjayAndGInLgpAQCAtNTAsMjkgKzg2LDExIEBACiAgICAgJ2ZpbGUnIHNob3VsZCBiZSBhbiBvcGVuIGZpbGUgb3IgZmlsZS1saWtlIG9iamVjdCB3aXRoIGEgd3JpdGUoKQogICAgIG1ldGhvZC4KICAgICAiIiIKLSAgICBpZiBmaWxlIGlzIE5vbmU6Ci0gICAgICAgIGZpbGUgPSBzeXMuc3RkZXJyCi0gICAgaWYgbGltaXQgaXMgTm9uZToKLSAgICAgICAgaWYgaGFzYXR0cihzeXMsICd0cmFjZWJhY2tsaW1pdCcpOgotICAgICAgICAgICAgbGltaXQgPSBzeXMudHJhY2ViYWNrbGltaXQKLSAgICBuID0gMAotICAgIHdoaWxlIHRiIGlzIG5vdCBOb25lIGFuZCAobGltaXQgaXMgTm9uZSBvciBuIDwgbGltaXQpOgotICAgICAgICBmID0gdGIudGJfZnJhbWUKLSAgICAgICAgbGluZW5vID0gdGIudGJfbGluZW5vCi0gICAgICAgIGNvID0gZi5mX2NvZGUKLSAgICAgICAgZmlsZW5hbWUgPSBjby5jb19maWxlbmFtZQotICAgICAgICBuYW1lID0gY28uY29fbmFtZQotICAgICAgICBfcHJpbnQoZmlsZSwKLSAgICAgICAgICAgICAgICcgIEZpbGUgIiVzIiwgbGluZSAlZCwgaW4gJXMnICUgKGZpbGVuYW1lLCBsaW5lbm8sIG5hbWUpKQotICAgICAgICBsaW5lY2FjaGUuY2hlY2tjYWNoZShmaWxlbmFtZSkKLSAgICAgICAgbGluZSA9IGxpbmVjYWNoZS5nZXRsaW5lKGZpbGVuYW1lLCBsaW5lbm8sIGYuZl9nbG9iYWxzKQotICAgICAgICBpZiBsaW5lOiBfcHJpbnQoZmlsZSwgJyAgICAnICsgbGluZS5zdHJpcCgpKQotICAgICAgICB0YiA9IHRiLnRiX25leHQKLSAgICAgICAgbiA9IG4rMQorICAgIHByaW50X2xpc3QoZXh0cmFjdF90Yih0YiwgbGltaXQ9bGltaXQpLCBmaWxlPWZpbGUpCiAKIGRlZiBmb3JtYXRfdGIodGIsIGxpbWl0PU5vbmUpOgogICAgICIiIkEgc2hvcnRoYW5kIGZvciAnZm9ybWF0X2xpc3QoZXh0cmFjdF90Yih0YiwgbGltaXQpKScuIiIiCi0gICAgcmV0dXJuIGZvcm1hdF9saXN0KGV4dHJhY3RfdGIodGIsIGxpbWl0KSkKKyAgICByZXR1cm4gZm9ybWF0X2xpc3QoZXh0cmFjdF90Yih0YiwgbGltaXQ9bGltaXQpKQogCiBkZWYgZXh0cmFjdF90Yih0YiwgbGltaXQ9Tm9uZSk6CiAgICAgIiIiUmV0dXJuIGxpc3Qgb2YgdXAgdG8gbGltaXQgcHJlLXByb2Nlc3NlZCBlbnRyaWVzIGZyb20gdHJhY2ViYWNrLgpAQCAtODUsMjYgKzEwMywxMSBAQAogICAgIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHdoaXRlc3BhY2Ugc3RyaXBwZWQ7IGlmIHRoZSBzb3VyY2UgaXMgbm90CiAgICAgYXZhaWxhYmxlIGl0IGlzIE5vbmUuCiAgICAgIiIiCi0gICAgaWYgbGltaXQgaXMgTm9uZToKLSAgICAgICAgaWYgaGFzYXR0cihzeXMsICd0cmFjZWJhY2tsaW1pdCcpOgotICAgICAgICAgICAgbGltaXQgPSBzeXMudHJhY2ViYWNrbGltaXQKLSAgICBsaXN0ID0gW10KLSAgICBuID0gMAotICAgIHdoaWxlIHRiIGlzIG5vdCBOb25lIGFuZCAobGltaXQgaXMgTm9uZSBvciBuIDwgbGltaXQpOgotICAgICAgICBmID0gdGIudGJfZnJhbWUKLSAgICAgICAgbGluZW5vID0gdGIudGJfbGluZW5vCi0gICAgICAgIGNvID0gZi5mX2NvZGUKLSAgICAgICAgZmlsZW5hbWUgPSBjby5jb19maWxlbmFtZQotICAgICAgICBuYW1lID0gY28uY29fbmFtZQotICAgICAgICBsaW5lY2FjaGUuY2hlY2tjYWNoZShmaWxlbmFtZSkKLSAgICAgICAgbGluZSA9IGxpbmVjYWNoZS5nZXRsaW5lKGZpbGVuYW1lLCBsaW5lbm8sIGYuZl9nbG9iYWxzKQotICAgICAgICBpZiBsaW5lOiBsaW5lID0gbGluZS5zdHJpcCgpCi0gICAgICAgIGVsc2U6IGxpbmUgPSBOb25lCi0gICAgICAgIGxpc3QuYXBwZW5kKChmaWxlbmFtZSwgbGluZW5vLCBuYW1lLCBsaW5lKSkKLSAgICAgICAgdGIgPSB0Yi50Yl9uZXh0Ci0gICAgICAgIG4gPSBuKzEKLSAgICByZXR1cm4gbGlzdAorICAgIHJldHVybiBsaXN0KF9leHRyYWN0X3RiX2l0ZXIodGIsIGxpbWl0PWxpbWl0KSkKIAorIworIyBFeGNlcHRpb24gZm9ybWF0dGluZyBhbmQgb3V0cHV0LgorIwogCiBfY2F1c2VfbWVzc2FnZSA9ICgKICAgICAiXG5UaGUgYWJvdmUgZXhjZXB0aW9uIHdhcyB0aGUgZGlyZWN0IGNhdXNlICIKQEAgLTEzMiw5ICsxMzUsMjMgQEAKICAgICBpdHMuYXBwZW5kKFsoZXhjLCBjdXN0b21fdGIgb3IgZXhjLl9fdHJhY2ViYWNrX18pXSkKICAgICAjIGl0ZXJ0b29scy5jaGFpbiBpcyBpbiBhbiBleHRlbnNpb24gbW9kdWxlIGFuZCBtYXkgYmUgdW5hdmFpbGFibGUKICAgICBmb3IgaXQgaW4gaXRzOgotICAgICAgICBmb3IgeCBpbiBpdDoKLSAgICAgICAgICAgIHlpZWxkIHgKKyAgICAgICAgeWllbGQgZnJvbSBpdAogCitkZWYgX2Zvcm1hdF9leGNlcHRpb25faXRlcihldHlwZSwgdmFsdWUsIHRiLCBsaW1pdCwgY2hhaW4pOgorICAgIGlmIGNoYWluOgorICAgICAgICB2YWx1ZXMgPSBfaXRlcl9jaGFpbih2YWx1ZSwgdGIpCisgICAgZWxzZToKKyAgICAgICAgdmFsdWVzID0gWyh2YWx1ZSwgdGIpXQorCisgICAgZm9yIHZhbHVlLCB0YiBpbiB2YWx1ZXM6CisgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIHN0cik6CisgICAgICAgICAgICAjIFRoaXMgaXMgYSBjYXVzZS9jb250ZXh0IG1lc3NhZ2UgbGluZQorICAgICAgICAgICAgeWllbGQgdmFsdWUgKyAnXG4nCisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBpZiB0YjoKKyAgICAgICAgICAgIHlpZWxkICdUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6XG4nCisgICAgICAgICAgICB5aWVsZCBmcm9tIF9mb3JtYXRfbGlzdF9pdGVyKF9leHRyYWN0X3RiX2l0ZXIodGIsIGxpbWl0PWxpbWl0KSkKKyAgICAgICAgeWllbGQgZnJvbSBfZm9ybWF0X2V4Y2VwdGlvbl9vbmx5X2l0ZXIodHlwZSh2YWx1ZSksIHZhbHVlKQogCiBkZWYgcHJpbnRfZXhjZXB0aW9uKGV0eXBlLCB2YWx1ZSwgdGIsIGxpbWl0PU5vbmUsIGZpbGU9Tm9uZSwgY2hhaW49VHJ1ZSk6CiAgICAgIiIiUHJpbnQgZXhjZXB0aW9uIHVwIHRvICdsaW1pdCcgc3RhY2sgdHJhY2UgZW50cmllcyBmcm9tICd0YicgdG8gJ2ZpbGUnLgpAQCAtMTQ5LDIwICsxNjYsOCBAQAogICAgICIiIgogICAgIGlmIGZpbGUgaXMgTm9uZToKICAgICAgICAgZmlsZSA9IHN5cy5zdGRlcnIKLSAgICBpZiBjaGFpbjoKLSAgICAgICAgdmFsdWVzID0gX2l0ZXJfY2hhaW4odmFsdWUsIHRiKQotICAgIGVsc2U6Ci0gICAgICAgIHZhbHVlcyA9IFsodmFsdWUsIHRiKV0KLSAgICBmb3IgdmFsdWUsIHRiIGluIHZhbHVlczoKLSAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgc3RyKToKLSAgICAgICAgICAgIF9wcmludChmaWxlLCB2YWx1ZSkKLSAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgIGlmIHRiOgotICAgICAgICAgICAgX3ByaW50KGZpbGUsICdUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6JykKLSAgICAgICAgICAgIHByaW50X3RiKHRiLCBsaW1pdCwgZmlsZSkKLSAgICAgICAgbGluZXMgPSBmb3JtYXRfZXhjZXB0aW9uX29ubHkodHlwZSh2YWx1ZSksIHZhbHVlKQotICAgICAgICBmb3IgbGluZSBpbiBsaW5lczoKLSAgICAgICAgICAgIF9wcmludChmaWxlLCBsaW5lLCAnJykKKyAgICBmb3IgbGluZSBpbiBfZm9ybWF0X2V4Y2VwdGlvbl9pdGVyKGV0eXBlLCB2YWx1ZSwgdGIsIGxpbWl0LCBjaGFpbik6CisgICAgICAgIHByaW50KGxpbmUsIGZpbGU9ZmlsZSwgZW5kPSIiKQogCiBkZWYgZm9ybWF0X2V4Y2VwdGlvbihldHlwZSwgdmFsdWUsIHRiLCBsaW1pdD1Ob25lLCBjaGFpbj1UcnVlKToKICAgICAiIiJGb3JtYXQgYSBzdGFjayB0cmFjZSBhbmQgdGhlIGV4Y2VwdGlvbiBpbmZvcm1hdGlvbi4KQEAgLTE3MywyMCArMTc4LDcgQEAKICAgICB0aGVzZSBsaW5lcyBhcmUgY29uY2F0ZW5hdGVkIGFuZCBwcmludGVkLCBleGFjdGx5IHRoZSBzYW1lIHRleHQgaXMKICAgICBwcmludGVkIGFzIGRvZXMgcHJpbnRfZXhjZXB0aW9uKCkuCiAgICAgIiIiCi0gICAgbGlzdCA9IFtdCi0gICAgaWYgY2hhaW46Ci0gICAgICAgIHZhbHVlcyA9IF9pdGVyX2NoYWluKHZhbHVlLCB0YikKLSAgICBlbHNlOgotICAgICAgICB2YWx1ZXMgPSBbKHZhbHVlLCB0YildCi0gICAgZm9yIHZhbHVlLCB0YiBpbiB2YWx1ZXM6Ci0gICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIHN0cik6Ci0gICAgICAgICAgICBsaXN0LmFwcGVuZCh2YWx1ZSArICdcbicpCi0gICAgICAgICAgICBjb250aW51ZQotICAgICAgICBpZiB0YjoKLSAgICAgICAgICAgIGxpc3QuYXBwZW5kKCdUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6XG4nKQotICAgICAgICAgICAgbGlzdC5leHRlbmQoZm9ybWF0X3RiKHRiLCBsaW1pdCkpCi0gICAgICAgIGxpc3QuZXh0ZW5kKGZvcm1hdF9leGNlcHRpb25fb25seSh0eXBlKHZhbHVlKSwgdmFsdWUpKQotICAgIHJldHVybiBsaXN0CisgICAgcmV0dXJuIGxpc3QoX2Zvcm1hdF9leGNlcHRpb25faXRlcihldHlwZSwgdmFsdWUsIHRiLCBsaW1pdCwgY2hhaW4pKQogCiBkZWYgZm9ybWF0X2V4Y2VwdGlvbl9vbmx5KGV0eXBlLCB2YWx1ZSk6CiAgICAgIiIiRm9ybWF0IHRoZSBleGNlcHRpb24gcGFydCBvZiBhIHRyYWNlYmFjay4KQEAgLTIwNCwxMCArMTk2LDE0IEBACiAgICAgc3RyaW5nIGluIHRoZSBsaXN0LgogCiAgICAgIiIiCisgICAgcmV0dXJuIGxpc3QoX2Zvcm1hdF9leGNlcHRpb25fb25seV9pdGVyKGV0eXBlLCB2YWx1ZSkpCisKK2RlZiBfZm9ybWF0X2V4Y2VwdGlvbl9vbmx5X2l0ZXIoZXR5cGUsIHZhbHVlKToKICAgICAjIEdyYWNlZnVsbHkgaGFuZGxlICh0aGUgd2F5IFB5dGhvbiAyLjQgYW5kIGVhcmxpZXIgZGlkKSB0aGUgY2FzZSBvZgogICAgICMgYmVpbmcgY2FsbGVkIHdpdGggKE5vbmUsIE5vbmUpLgogICAgIGlmIGV0eXBlIGlzIE5vbmU6Ci0gICAgICAgIHJldHVybiBbX2Zvcm1hdF9maW5hbF9leGNfbGluZShldHlwZSwgdmFsdWUpXQorICAgICAgICB5aWVsZCBfZm9ybWF0X2ZpbmFsX2V4Y19saW5lKGV0eXBlLCB2YWx1ZSkKKyAgICAgICAgcmV0dXJuCiAKICAgICBzdHlwZSA9IGV0eXBlLl9fbmFtZV9fCiAgICAgc21vZCA9IGV0eXBlLl9fbW9kdWxlX18KQEAgLTIxNSwyNyArMjExLDI3IEBACiAgICAgICAgIHN0eXBlID0gc21vZCArICcuJyArIHN0eXBlCiAKICAgICBpZiBub3QgaXNzdWJjbGFzcyhldHlwZSwgU3ludGF4RXJyb3IpOgotICAgICAgICByZXR1cm4gW19mb3JtYXRfZmluYWxfZXhjX2xpbmUoc3R5cGUsIHZhbHVlKV0KKyAgICAgICAgeWllbGQgX2Zvcm1hdF9maW5hbF9leGNfbGluZShzdHlwZSwgdmFsdWUpCisgICAgICAgIHJldHVybgogCiAgICAgIyBJdCB3YXMgYSBzeW50YXggZXJyb3I7IHNob3cgZXhhY3RseSB3aGVyZSB0aGUgcHJvYmxlbSB3YXMgZm91bmQuCi0gICAgbGluZXMgPSBbXQogICAgIGZpbGVuYW1lID0gdmFsdWUuZmlsZW5hbWUgb3IgIjxzdHJpbmc+IgogICAgIGxpbmVubyA9IHN0cih2YWx1ZS5saW5lbm8pIG9yICc/JwotICAgIGxpbmVzLmFwcGVuZCgnICBGaWxlICIlcyIsIGxpbmUgJXNcbicgJSAoZmlsZW5hbWUsIGxpbmVubykpCisgICAgeWllbGQgJyAgRmlsZSAie30iLCBsaW5lIHt9XG4nLmZvcm1hdChmaWxlbmFtZSwgbGluZW5vKQorCiAgICAgYmFkbGluZSA9IHZhbHVlLnRleHQKICAgICBvZmZzZXQgPSB2YWx1ZS5vZmZzZXQKICAgICBpZiBiYWRsaW5lIGlzIG5vdCBOb25lOgotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAlc1xuJyAlIGJhZGxpbmUuc3RyaXAoKSkKKyAgICAgICAgeWllbGQgJyAgICB7fVxuJy5mb3JtYXQoYmFkbGluZS5zdHJpcCgpKQogICAgICAgICBpZiBvZmZzZXQgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBjYXJldHNwYWNlID0gYmFkbGluZS5yc3RyaXAoJ1xuJykKICAgICAgICAgICAgIG9mZnNldCA9IG1pbihsZW4oY2FyZXRzcGFjZSksIG9mZnNldCkgLSAxCiAgICAgICAgICAgICBjYXJldHNwYWNlID0gY2FyZXRzcGFjZVs6b2Zmc2V0XS5sc3RyaXAoKQogICAgICAgICAgICAgIyBub24tc3BhY2Ugd2hpdGVzcGFjZSAobGlrZXMgdGFicykgbXVzdCBiZSBrZXB0IGZvciBhbGlnbm1lbnQKICAgICAgICAgICAgIGNhcmV0c3BhY2UgPSAoKGMuaXNzcGFjZSgpIGFuZCBjIG9yICcgJykgZm9yIGMgaW4gY2FyZXRzcGFjZSkKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICVzXlxuJyAlICcnLmpvaW4oY2FyZXRzcGFjZSkpCisgICAgICAgICAgICB5aWVsZCAnICAgIHt9XlxuJy5mb3JtYXQoJycuam9pbihjYXJldHNwYWNlKSkKICAgICBtc2cgPSB2YWx1ZS5tc2cgb3IgIjxubyBkZXRhaWwgYXZhaWxhYmxlPiIKLSAgICBsaW5lcy5hcHBlbmQoIiVzOiAlc1xuIiAlIChzdHlwZSwgbXNnKSkKLSAgICByZXR1cm4gbGluZXMKKyAgICB5aWVsZCAie306IHt9XG4iLmZvcm1hdChzdHlwZSwgbXNnKQogCiBkZWYgX2Zvcm1hdF9maW5hbF9leGNfbGluZShldHlwZSwgdmFsdWUpOgogICAgIHZhbHVlc3RyID0gX3NvbWVfc3RyKHZhbHVlKQpAQCAtMjUxLDM4ICsyNDcsMzQgQEAKICAgICBleGNlcHQ6CiAgICAgICAgIHJldHVybiAnPHVucHJpbnRhYmxlICVzIG9iamVjdD4nICUgdHlwZSh2YWx1ZSkuX19uYW1lX18KIAotCiBkZWYgcHJpbnRfZXhjKGxpbWl0PU5vbmUsIGZpbGU9Tm9uZSwgY2hhaW49VHJ1ZSk6CiAgICAgIiIiU2hvcnRoYW5kIGZvciAncHJpbnRfZXhjZXB0aW9uKCpzeXMuZXhjX2luZm8oKSwgbGltaXQsIGZpbGUpJy4iIiIKLSAgICBpZiBmaWxlIGlzIE5vbmU6Ci0gICAgICAgIGZpbGUgPSBzeXMuc3RkZXJyCi0gICAgdHJ5OgotICAgICAgICBldHlwZSwgdmFsdWUsIHRiID0gc3lzLmV4Y19pbmZvKCkKLSAgICAgICAgcHJpbnRfZXhjZXB0aW9uKGV0eXBlLCB2YWx1ZSwgdGIsIGxpbWl0LCBmaWxlLCBjaGFpbikKLSAgICBmaW5hbGx5OgotICAgICAgICBldHlwZSA9IHZhbHVlID0gdGIgPSBOb25lCi0KKyAgICBwcmludF9leGNlcHRpb24oKnN5cy5leGNfaW5mbygpLCBsaW1pdD1saW1pdCwgZmlsZT1maWxlLCBjaGFpbj1jaGFpbikKIAogZGVmIGZvcm1hdF9leGMobGltaXQ9Tm9uZSwgY2hhaW49VHJ1ZSk6CiAgICAgIiIiTGlrZSBwcmludF9leGMoKSBidXQgcmV0dXJuIGEgc3RyaW5nLiIiIgotICAgIHRyeToKLSAgICAgICAgZXR5cGUsIHZhbHVlLCB0YiA9IHN5cy5leGNfaW5mbygpCi0gICAgICAgIHJldHVybiAnJy5qb2luKAotICAgICAgICAgICAgZm9ybWF0X2V4Y2VwdGlvbihldHlwZSwgdmFsdWUsIHRiLCBsaW1pdCwgY2hhaW4pKQotICAgIGZpbmFsbHk6Ci0gICAgICAgIGV0eXBlID0gdmFsdWUgPSB0YiA9IE5vbmUKLQorICAgIHJldHVybiAiIi5qb2luKGZvcm1hdF9leGNlcHRpb24oKnN5cy5leGNfaW5mbygpLCBsaW1pdD1saW1pdCwgY2hhaW49Y2hhaW4pKQogCiBkZWYgcHJpbnRfbGFzdChsaW1pdD1Ob25lLCBmaWxlPU5vbmUsIGNoYWluPVRydWUpOgogICAgICIiIlRoaXMgaXMgYSBzaG9ydGhhbmQgZm9yICdwcmludF9leGNlcHRpb24oc3lzLmxhc3RfdHlwZSwKICAgICBzeXMubGFzdF92YWx1ZSwgc3lzLmxhc3RfdHJhY2ViYWNrLCBsaW1pdCwgZmlsZSknLiIiIgogICAgIGlmIG5vdCBoYXNhdHRyKHN5cywgImxhc3RfdHlwZSIpOgogICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJubyBsYXN0IGV4Y2VwdGlvbiIpCi0gICAgaWYgZmlsZSBpcyBOb25lOgotICAgICAgICBmaWxlID0gc3lzLnN0ZGVycgogICAgIHByaW50X2V4Y2VwdGlvbihzeXMubGFzdF90eXBlLCBzeXMubGFzdF92YWx1ZSwgc3lzLmxhc3RfdHJhY2ViYWNrLAogICAgICAgICAgICAgICAgICAgICBsaW1pdCwgZmlsZSwgY2hhaW4pCiAKKyMKKyMgUHJpbnRpbmcgYW5kIEV4dHJhY3RpbmcgU3RhY2tzLgorIworCitkZWYgX2V4dHJhY3Rfc3RhY2tfaXRlcihmLCBsaW1pdD1Ob25lKToKKyAgICByZXR1cm4gX2V4dHJhY3RfdGJfb3Jfc3RhY2tfaXRlcigKKyAgICAgICAgICAgICAgICBmLCBsaW1pdCwgbGFtYmRhIGY6IChmLCBmLmZfbGluZW5vLCBmLmZfYmFjaykpCisKK2RlZiBfZ2V0X3N0YWNrKGYpOgorICAgIGlmIGYgaXMgTm9uZToKKyAgICAgICAgZiA9IHN5cy5fZ2V0ZnJhbWUoKS5mX2JhY2suZl9iYWNrCisgICAgcmV0dXJuIGYKIAogZGVmIHByaW50X3N0YWNrKGY9Tm9uZSwgbGltaXQ9Tm9uZSwgZmlsZT1Ob25lKToKICAgICAiIiJQcmludCBhIHN0YWNrIHRyYWNlIGZyb20gaXRzIGludm9jYXRpb24gcG9pbnQuCkBAIC0yOTEsMjEgKzI4MywxMSBAQAogICAgIHN0YWNrIGZyYW1lIGF0IHdoaWNoIHRvIHN0YXJ0LiBUaGUgb3B0aW9uYWwgJ2xpbWl0JyBhbmQgJ2ZpbGUnCiAgICAgYXJndW1lbnRzIGhhdmUgdGhlIHNhbWUgbWVhbmluZyBhcyBmb3IgcHJpbnRfZXhjZXB0aW9uKCkuCiAgICAgIiIiCi0gICAgaWYgZiBpcyBOb25lOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICByYWlzZSBaZXJvRGl2aXNpb25FcnJvcgotICAgICAgICBleGNlcHQgWmVyb0RpdmlzaW9uRXJyb3I6Ci0gICAgICAgICAgICBmID0gc3lzLmV4Y19pbmZvKClbMl0udGJfZnJhbWUuZl9iYWNrCi0gICAgcHJpbnRfbGlzdChleHRyYWN0X3N0YWNrKGYsIGxpbWl0KSwgZmlsZSkKKyAgICBwcmludF9saXN0KGV4dHJhY3Rfc3RhY2soX2dldF9zdGFjayhmKSwgbGltaXQ9bGltaXQpLCBmaWxlPWZpbGUpCiAKIGRlZiBmb3JtYXRfc3RhY2soZj1Ob25lLCBsaW1pdD1Ob25lKToKICAgICAiIiJTaG9ydGhhbmQgZm9yICdmb3JtYXRfbGlzdChleHRyYWN0X3N0YWNrKGYsIGxpbWl0KSknLiIiIgotICAgIGlmIGYgaXMgTm9uZToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcmFpc2UgWmVyb0RpdmlzaW9uRXJyb3IKLSAgICAgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yOgotICAgICAgICAgICAgZiA9IHN5cy5leGNfaW5mbygpWzJdLnRiX2ZyYW1lLmZfYmFjawotICAgIHJldHVybiBmb3JtYXRfbGlzdChleHRyYWN0X3N0YWNrKGYsIGxpbWl0KSkKKyAgICByZXR1cm4gZm9ybWF0X2xpc3QoZXh0cmFjdF9zdGFjayhfZ2V0X3N0YWNrKGYpLCBsaW1pdD1saW1pdCkpCiAKIGRlZiBleHRyYWN0X3N0YWNrKGY9Tm9uZSwgbGltaXQ9Tm9uZSk6CiAgICAgIiIiRXh0cmFjdCB0aGUgcmF3IHRyYWNlYmFjayBmcm9tIHRoZSBjdXJyZW50IHN0YWNrIGZyYW1lLgpAQCAtMzE2LDI3ICsyOTgsMTYgQEAKICAgICBsaW5lIG51bWJlciwgZnVuY3Rpb24gbmFtZSwgdGV4dCksIGFuZCB0aGUgZW50cmllcyBhcmUgaW4gb3JkZXIKICAgICBmcm9tIG9sZGVzdCB0byBuZXdlc3Qgc3RhY2sgZnJhbWUuCiAgICAgIiIiCi0gICAgaWYgZiBpcyBOb25lOgorICAgIHN0YWNrID0gbGlzdChfZXh0cmFjdF9zdGFja19pdGVyKF9nZXRfc3RhY2soZiksIGxpbWl0PWxpbWl0KSkKKyAgICBzdGFjay5yZXZlcnNlKCkKKyAgICByZXR1cm4gc3RhY2sKKworZGVmIGNsZWFyX2ZyYW1lcyh0Yik6CisgICAgIkNsZWFyIGFsbCByZWZlcmVuY2VzIHRvIGxvY2FsIHZhcmlhYmxlcyBpbiB0aGUgZnJhbWVzIG9mIGEgdHJhY2ViYWNrLiIKKyAgICB3aGlsZSB0YiBpcyBub3QgTm9uZToKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgcmFpc2UgWmVyb0RpdmlzaW9uRXJyb3IKLSAgICAgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yOgotICAgICAgICAgICAgZiA9IHN5cy5leGNfaW5mbygpWzJdLnRiX2ZyYW1lLmZfYmFjawotICAgIGlmIGxpbWl0IGlzIE5vbmU6Ci0gICAgICAgIGlmIGhhc2F0dHIoc3lzLCAndHJhY2ViYWNrbGltaXQnKToKLSAgICAgICAgICAgIGxpbWl0ID0gc3lzLnRyYWNlYmFja2xpbWl0Ci0gICAgbGlzdCA9IFtdCi0gICAgbiA9IDAKLSAgICB3aGlsZSBmIGlzIG5vdCBOb25lIGFuZCAobGltaXQgaXMgTm9uZSBvciBuIDwgbGltaXQpOgotICAgICAgICBsaW5lbm8gPSBmLmZfbGluZW5vCi0gICAgICAgIGNvID0gZi5mX2NvZGUKLSAgICAgICAgZmlsZW5hbWUgPSBjby5jb19maWxlbmFtZQotICAgICAgICBuYW1lID0gY28uY29fbmFtZQotICAgICAgICBsaW5lY2FjaGUuY2hlY2tjYWNoZShmaWxlbmFtZSkKLSAgICAgICAgbGluZSA9IGxpbmVjYWNoZS5nZXRsaW5lKGZpbGVuYW1lLCBsaW5lbm8sIGYuZl9nbG9iYWxzKQotICAgICAgICBpZiBsaW5lOiBsaW5lID0gbGluZS5zdHJpcCgpCi0gICAgICAgIGVsc2U6IGxpbmUgPSBOb25lCi0gICAgICAgIGxpc3QuYXBwZW5kKChmaWxlbmFtZSwgbGluZW5vLCBuYW1lLCBsaW5lKSkKLSAgICAgICAgZiA9IGYuZl9iYWNrCi0gICAgICAgIG4gPSBuKzEKLSAgICBsaXN0LnJldmVyc2UoKQotICAgIHJldHVybiBsaXN0CisgICAgICAgICAgICB0Yi50Yl9mcmFtZS5jbGVhcigpCisgICAgICAgIGV4Y2VwdCBSdW50aW1lRXJyb3I6CisgICAgICAgICAgICAjIElnbm9yZSB0aGUgZXhjZXB0aW9uIHJhaXNlZCBpZiB0aGUgZnJhbWUgaXMgc3RpbGwgZXhlY3V0aW5nLgorICAgICAgICAgICAgcGFzcworICAgICAgICB0YiA9IHRiLnRiX25leHQKZGlmZiAtLWdpdCBhL0xpYi90cmFjZW1hbGxvYy5weSBiL0xpYi90cmFjZW1hbGxvYy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGVkZmM1Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3RyYWNlbWFsbG9jLnB5CkBAIC0wLDAgKzEsNDg3IEBACitmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBTZXF1ZW5jZSwgSXRlcmFibGUKK2Zyb20gZnVuY3Rvb2xzIGltcG9ydCB0b3RhbF9vcmRlcmluZworaW1wb3J0IGZubWF0Y2gKK2ltcG9ydCBsaW5lY2FjaGUKK2ltcG9ydCBvcy5wYXRoCitpbXBvcnQgcGlja2xlCisKKyMgSW1wb3J0IHR5cGVzIGFuZCBmdW5jdGlvbnMgaW1wbGVtZW50ZWQgaW4gQworZnJvbSBfdHJhY2VtYWxsb2MgaW1wb3J0ICoKK2Zyb20gX3RyYWNlbWFsbG9jIGltcG9ydCBfZ2V0X29iamVjdF90cmFjZWJhY2ssIF9nZXRfdHJhY2VzCisKKworZGVmIF9mb3JtYXRfc2l6ZShzaXplLCBzaWduKToKKyAgICBmb3IgdW5pdCBpbiAoJ0InLCAnS2lCJywgJ01pQicsICdHaUInLCAnVGlCJyk6CisgICAgICAgIGlmIGFicyhzaXplKSA8IDEwMCBhbmQgdW5pdCAhPSAnQic6CisgICAgICAgICAgICAjIDMgZGlnaXRzICh4eC54IFVOSVQpCisgICAgICAgICAgICBpZiBzaWduOgorICAgICAgICAgICAgICAgIHJldHVybiAiJSsuMWYgJXMiICUgKHNpemUsIHVuaXQpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiAiJS4xZiAlcyIgJSAoc2l6ZSwgdW5pdCkKKyAgICAgICAgaWYgYWJzKHNpemUpIDwgMTAgKiAxMDI0IG9yIHVuaXQgPT0gJ1RpQic6CisgICAgICAgICAgICAjIDQgb3IgNSBkaWdpdHMgKHh4eHggVU5JVCkKKyAgICAgICAgICAgIGlmIHNpZ246CisgICAgICAgICAgICAgICAgcmV0dXJuICIlKy4wZiAlcyIgJSAoc2l6ZSwgdW5pdCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuICIlLjBmICVzIiAlIChzaXplLCB1bml0KQorICAgICAgICBzaXplIC89IDEwMjQKKworCitjbGFzcyBTdGF0aXN0aWM6CisgICAgIiIiCisgICAgU3RhdGlzdGljIGRpZmZlcmVuY2Ugb24gbWVtb3J5IGFsbG9jYXRpb25zIGJldHdlZW4gdHdvIFNuYXBzaG90IGluc3RhbmNlLgorICAgICIiIgorCisgICAgX19zbG90c19fID0gKCd0cmFjZWJhY2snLCAnc2l6ZScsICdjb3VudCcpCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdHJhY2ViYWNrLCBzaXplLCBjb3VudCk6CisgICAgICAgIHNlbGYudHJhY2ViYWNrID0gdHJhY2ViYWNrCisgICAgICAgIHNlbGYuc2l6ZSA9IHNpemUKKyAgICAgICAgc2VsZi5jb3VudCA9IGNvdW50CisKKyAgICBkZWYgX19oYXNoX18oc2VsZik6CisgICAgICAgIHJldHVybiBoYXNoKChzZWxmLnRyYWNlYmFjaywgc2VsZi5zaXplLCBzZWxmLmNvdW50KSkKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gKHNlbGYudHJhY2ViYWNrID09IG90aGVyLnRyYWNlYmFjaworICAgICAgICAgICAgICAgIGFuZCBzZWxmLnNpemUgPT0gb3RoZXIuc2l6ZQorICAgICAgICAgICAgICAgIGFuZCBzZWxmLmNvdW50ID09IG90aGVyLmNvdW50KQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHRleHQgPSAoIiVzOiBzaXplPSVzLCBjb3VudD0laSIKKyAgICAgICAgICAgICAgICAgJSAoc2VsZi50cmFjZWJhY2ssCisgICAgICAgICAgICAgICAgICAgIF9mb3JtYXRfc2l6ZShzZWxmLnNpemUsIEZhbHNlKSwKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5jb3VudCkpCisgICAgICAgIGlmIHNlbGYuY291bnQ6CisgICAgICAgICAgICBhdmVyYWdlID0gc2VsZi5zaXplIC8gc2VsZi5jb3VudAorICAgICAgICAgICAgdGV4dCArPSAiLCBhdmVyYWdlPSVzIiAlIF9mb3JtYXRfc2l6ZShhdmVyYWdlLCBGYWxzZSkKKyAgICAgICAgcmV0dXJuIHRleHQKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICgnPFN0YXRpc3RpYyB0cmFjZWJhY2s9JXIgc2l6ZT0laSBjb3VudD0laT4nCisgICAgICAgICAgICAgICAgJSAoc2VsZi50cmFjZWJhY2ssIHNlbGYuc2l6ZSwgc2VsZi5jb3VudCkpCisKKyAgICBkZWYgX3NvcnRfa2V5KHNlbGYpOgorICAgICAgICByZXR1cm4gKHNlbGYuc2l6ZSwgc2VsZi5jb3VudCwgc2VsZi50cmFjZWJhY2spCisKKworY2xhc3MgU3RhdGlzdGljRGlmZjoKKyAgICAiIiIKKyAgICBTdGF0aXN0aWMgZGlmZmVyZW5jZSBvbiBtZW1vcnkgYWxsb2NhdGlvbnMgYmV0d2VlbiBhbiBvbGQgYW5kIGEgbmV3CisgICAgU25hcHNob3QgaW5zdGFuY2UuCisgICAgIiIiCisgICAgX19zbG90c19fID0gKCd0cmFjZWJhY2snLCAnc2l6ZScsICdzaXplX2RpZmYnLCAnY291bnQnLCAnY291bnRfZGlmZicpCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdHJhY2ViYWNrLCBzaXplLCBzaXplX2RpZmYsIGNvdW50LCBjb3VudF9kaWZmKToKKyAgICAgICAgc2VsZi50cmFjZWJhY2sgPSB0cmFjZWJhY2sKKyAgICAgICAgc2VsZi5zaXplID0gc2l6ZQorICAgICAgICBzZWxmLnNpemVfZGlmZiA9IHNpemVfZGlmZgorICAgICAgICBzZWxmLmNvdW50ID0gY291bnQKKyAgICAgICAgc2VsZi5jb3VudF9kaWZmID0gY291bnRfZGlmZgorCisgICAgZGVmIF9faGFzaF9fKHNlbGYpOgorICAgICAgICByZXR1cm4gaGFzaCgoc2VsZi50cmFjZWJhY2ssIHNlbGYuc2l6ZSwgc2VsZi5zaXplX2RpZmYsCisgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvdW50LCBzZWxmLmNvdW50X2RpZmYpKQorCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiAoc2VsZi50cmFjZWJhY2sgPT0gb3RoZXIudHJhY2ViYWNrCisgICAgICAgICAgICAgICAgYW5kIHNlbGYuc2l6ZSA9PSBvdGhlci5zaXplCisgICAgICAgICAgICAgICAgYW5kIHNlbGYuc2l6ZV9kaWZmID09IG90aGVyLnNpemVfZGlmZgorICAgICAgICAgICAgICAgIGFuZCBzZWxmLmNvdW50ID09IG90aGVyLmNvdW50CisgICAgICAgICAgICAgICAgYW5kIHNlbGYuY291bnRfZGlmZiA9PSBvdGhlci5jb3VudF9kaWZmKQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHRleHQgPSAoIiVzOiBzaXplPSVzICglcyksIGNvdW50PSVpICglK2kpIgorICAgICAgICAgICAgICAgICUgKHNlbGYudHJhY2ViYWNrLAorICAgICAgICAgICAgICAgICAgIF9mb3JtYXRfc2l6ZShzZWxmLnNpemUsIEZhbHNlKSwKKyAgICAgICAgICAgICAgICAgICBfZm9ybWF0X3NpemUoc2VsZi5zaXplX2RpZmYsIFRydWUpLAorICAgICAgICAgICAgICAgICAgIHNlbGYuY291bnQsCisgICAgICAgICAgICAgICAgICAgc2VsZi5jb3VudF9kaWZmKSkKKyAgICAgICAgaWYgc2VsZi5jb3VudDoKKyAgICAgICAgICAgIGF2ZXJhZ2UgPSBzZWxmLnNpemUgLyBzZWxmLmNvdW50CisgICAgICAgICAgICB0ZXh0ICs9ICIsIGF2ZXJhZ2U9JXMiICUgX2Zvcm1hdF9zaXplKGF2ZXJhZ2UsIEZhbHNlKQorICAgICAgICByZXR1cm4gdGV4dAorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gKCc8U3RhdGlzdGljRGlmZiB0cmFjZWJhY2s9JXIgc2l6ZT0laSAoJStpKSBjb3VudD0laSAoJStpKT4nCisgICAgICAgICAgICAgICAgJSAoc2VsZi50cmFjZWJhY2ssIHNlbGYuc2l6ZSwgc2VsZi5zaXplX2RpZmYsCisgICAgICAgICAgICAgICAgICAgc2VsZi5jb3VudCwgc2VsZi5jb3VudF9kaWZmKSkKKworICAgIGRlZiBfc29ydF9rZXkoc2VsZik6CisgICAgICAgIHJldHVybiAoYWJzKHNlbGYuc2l6ZV9kaWZmKSwgc2VsZi5zaXplLAorICAgICAgICAgICAgICAgIGFicyhzZWxmLmNvdW50X2RpZmYpLCBzZWxmLmNvdW50LAorICAgICAgICAgICAgICAgIHNlbGYudHJhY2ViYWNrKQorCisKK2RlZiBfY29tcGFyZV9ncm91cGVkX3N0YXRzKG9sZF9ncm91cCwgbmV3X2dyb3VwKToKKyAgICBzdGF0aXN0aWNzID0gW10KKyAgICBmb3IgdHJhY2ViYWNrLCBzdGF0IGluIG5ld19ncm91cC5pdGVtcygpOgorICAgICAgICBwcmV2aW91cyA9IG9sZF9ncm91cC5wb3AodHJhY2ViYWNrLCBOb25lKQorICAgICAgICBpZiBwcmV2aW91cyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHN0YXQgPSBTdGF0aXN0aWNEaWZmKHRyYWNlYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuc2l6ZSwgc3RhdC5zaXplIC0gcHJldmlvdXMuc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuY291bnQsIHN0YXQuY291bnQgLSBwcmV2aW91cy5jb3VudCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHN0YXQgPSBTdGF0aXN0aWNEaWZmKHRyYWNlYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuc2l6ZSwgc3RhdC5zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5jb3VudCwgc3RhdC5jb3VudCkKKyAgICAgICAgc3RhdGlzdGljcy5hcHBlbmQoc3RhdCkKKworICAgIGZvciB0cmFjZWJhY2ssIHN0YXQgaW4gb2xkX2dyb3VwLml0ZW1zKCk6CisgICAgICAgIHN0YXQgPSBTdGF0aXN0aWNEaWZmKHRyYWNlYmFjaywgMCwgLXN0YXQuc2l6ZSwgMCwgLXN0YXQuY291bnQpCisgICAgICAgIHN0YXRpc3RpY3MuYXBwZW5kKHN0YXQpCisgICAgcmV0dXJuIHN0YXRpc3RpY3MKKworCitAdG90YWxfb3JkZXJpbmcKK2NsYXNzIEZyYW1lOgorICAgICIiIgorICAgIEZyYW1lIG9mIGEgdHJhY2ViYWNrLgorICAgICIiIgorICAgIF9fc2xvdHNfXyA9ICgiX2ZyYW1lIiwpCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZnJhbWUpOgorICAgICAgICAjIGZyYW1lIGlzIGEgdHVwbGU6IChmaWxlbmFtZTogc3RyLCBsaW5lbm86IGludCkKKyAgICAgICAgc2VsZi5fZnJhbWUgPSBmcmFtZQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGZpbGVuYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fZnJhbWVbMF0KKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBsaW5lbm8oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9mcmFtZVsxXQorCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiAoc2VsZi5fZnJhbWUgPT0gb3RoZXIuX2ZyYW1lKQorCisgICAgZGVmIF9fbHRfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiAoc2VsZi5fZnJhbWUgPCBvdGhlci5fZnJhbWUpCisKKyAgICBkZWYgX19oYXNoX18oc2VsZik6CisgICAgICAgIHJldHVybiBoYXNoKHNlbGYuX2ZyYW1lKQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiAiJXM6JXMiICUgKHNlbGYuZmlsZW5hbWUsIHNlbGYubGluZW5vKQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIjxGcmFtZSBmaWxlbmFtZT0lciBsaW5lbm89JXI+IiAlIChzZWxmLmZpbGVuYW1lLCBzZWxmLmxpbmVubykKKworCitAdG90YWxfb3JkZXJpbmcKK2NsYXNzIFRyYWNlYmFjayhTZXF1ZW5jZSk6CisgICAgIiIiCisgICAgU2VxdWVuY2Ugb2YgRnJhbWUgaW5zdGFuY2VzIHNvcnRlZCBmcm9tIHRoZSBtb3N0IHJlY2VudCBmcmFtZQorICAgIHRvIHRoZSBvbGRlc3QgZnJhbWUuCisgICAgIiIiCisgICAgX19zbG90c19fID0gKCJfZnJhbWVzIiwpCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZnJhbWVzKToKKyAgICAgICAgU2VxdWVuY2UuX19pbml0X18oc2VsZikKKyAgICAgICAgIyBmcmFtZXMgaXMgYSB0dXBsZSBvZiBmcmFtZSB0dXBsZXM6IHNlZSBGcmFtZSBjb25zdHJ1Y3RvciBmb3IgdGhlCisgICAgICAgICMgZm9ybWF0IG9mIGEgZnJhbWUgdHVwbGUKKyAgICAgICAgc2VsZi5fZnJhbWVzID0gZnJhbWVzCisKKyAgICBkZWYgX19sZW5fXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGxlbihzZWxmLl9mcmFtZXMpCisKKyAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaW5kZXgpOgorICAgICAgICBpZiBpc2luc3RhbmNlKGluZGV4LCBzbGljZSk6CisgICAgICAgICAgICByZXR1cm4gdHVwbGUoRnJhbWUodHJhY2UpIGZvciB0cmFjZSBpbiBzZWxmLl9mcmFtZXNbaW5kZXhdKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIEZyYW1lKHNlbGYuX2ZyYW1lc1tpbmRleF0pCisKKyAgICBkZWYgX19jb250YWluc19fKHNlbGYsIGZyYW1lKToKKyAgICAgICAgcmV0dXJuIGZyYW1lLl9mcmFtZSBpbiBzZWxmLl9mcmFtZXMKKworICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGhhc2goc2VsZi5fZnJhbWVzKQorCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiAoc2VsZi5fZnJhbWVzID09IG90aGVyLl9mcmFtZXMpCisKKyAgICBkZWYgX19sdF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIChzZWxmLl9mcmFtZXMgPCBvdGhlci5fZnJhbWVzKQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzdHIoc2VsZlswXSkKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICI8VHJhY2ViYWNrICVyPiIgJSAodHVwbGUoc2VsZiksKQorCisgICAgZGVmIGZvcm1hdChzZWxmLCBsaW1pdD1Ob25lKToKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBpZiBsaW1pdCBpcyBub3QgTm9uZSBhbmQgbGltaXQgPCAwOgorICAgICAgICAgICAgcmV0dXJuIGxpbmVzCisgICAgICAgIGZvciBmcmFtZSBpbiBzZWxmWzpsaW1pdF06CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgRmlsZSAiJXMiLCBsaW5lICVzJworICAgICAgICAgICAgICAgICAgICAgICAgICUgKGZyYW1lLmZpbGVuYW1lLCBmcmFtZS5saW5lbm8pKQorICAgICAgICAgICAgbGluZSA9IGxpbmVjYWNoZS5nZXRsaW5lKGZyYW1lLmZpbGVuYW1lLCBmcmFtZS5saW5lbm8pLnN0cmlwKCkKKyAgICAgICAgICAgIGlmIGxpbmU6CisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgJXMnICUgbGluZSkKKyAgICAgICAgcmV0dXJuIGxpbmVzCisKKworZGVmIGdldF9vYmplY3RfdHJhY2ViYWNrKG9iaik6CisgICAgIiIiCisgICAgR2V0IHRoZSB0cmFjZWJhY2sgd2hlcmUgdGhlIFB5dGhvbiBvYmplY3QgKm9iaiogd2FzIGFsbG9jYXRlZC4KKyAgICBSZXR1cm4gYSBUcmFjZWJhY2sgaW5zdGFuY2UuCisKKyAgICBSZXR1cm4gTm9uZSBpZiB0aGUgdHJhY2VtYWxsb2MgbW9kdWxlIGlzIG5vdCB0cmFjaW5nIG1lbW9yeSBhbGxvY2F0aW9ucyBvcgorICAgIGRpZCBub3QgdHJhY2UgdGhlIGFsbG9jYXRpb24gb2YgdGhlIG9iamVjdC4KKyAgICAiIiIKKyAgICBmcmFtZXMgPSBfZ2V0X29iamVjdF90cmFjZWJhY2sob2JqKQorICAgIGlmIGZyYW1lcyBpcyBub3QgTm9uZToKKyAgICAgICAgcmV0dXJuIFRyYWNlYmFjayhmcmFtZXMpCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIE5vbmUKKworCitjbGFzcyBUcmFjZToKKyAgICAiIiIKKyAgICBUcmFjZSBvZiBhIG1lbW9yeSBibG9jay4KKyAgICAiIiIKKyAgICBfX3Nsb3RzX18gPSAoIl90cmFjZSIsKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRyYWNlKToKKyAgICAgICAgIyB0cmFjZSBpcyBhIHR1cGxlOiAoc2l6ZSwgdHJhY2ViYWNrKSwgc2VlIFRyYWNlYmFjayBjb25zdHJ1Y3RvcgorICAgICAgICAjIGZvciB0aGUgZm9ybWF0IG9mIHRoZSB0cmFjZWJhY2sgdHVwbGUKKyAgICAgICAgc2VsZi5fdHJhY2UgPSB0cmFjZQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHNpemUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl90cmFjZVswXQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHRyYWNlYmFjayhzZWxmKToKKyAgICAgICAgcmV0dXJuIFRyYWNlYmFjayhzZWxmLl90cmFjZVsxXSkKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gKHNlbGYuX3RyYWNlID09IG90aGVyLl90cmFjZSkKKworICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGhhc2goc2VsZi5fdHJhY2UpCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICIlczogJXMiICUgKHNlbGYudHJhY2ViYWNrLCBfZm9ybWF0X3NpemUoc2VsZi5zaXplLCBGYWxzZSkpCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAoIjxUcmFjZSBzaXplPSVzLCB0cmFjZWJhY2s9JXI+IgorICAgICAgICAgICAgICAgICUgKF9mb3JtYXRfc2l6ZShzZWxmLnNpemUsIEZhbHNlKSwgc2VsZi50cmFjZWJhY2spKQorCisKK2NsYXNzIF9UcmFjZXMoU2VxdWVuY2UpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0cmFjZXMpOgorICAgICAgICBTZXF1ZW5jZS5fX2luaXRfXyhzZWxmKQorICAgICAgICAjIHRyYWNlcyBpcyBhIHR1cGxlIG9mIHRyYWNlIHR1cGxlczogc2VlIFRyYWNlIGNvbnN0cnVjdG9yCisgICAgICAgIHNlbGYuX3RyYWNlcyA9IHRyYWNlcworCisgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgIHJldHVybiBsZW4oc2VsZi5fdHJhY2VzKQorCisgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGluZGV4KToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShpbmRleCwgc2xpY2UpOgorICAgICAgICAgICAgcmV0dXJuIHR1cGxlKFRyYWNlKHRyYWNlKSBmb3IgdHJhY2UgaW4gc2VsZi5fdHJhY2VzW2luZGV4XSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBUcmFjZShzZWxmLl90cmFjZXNbaW5kZXhdKQorCisgICAgZGVmIF9fY29udGFpbnNfXyhzZWxmLCB0cmFjZSk6CisgICAgICAgIHJldHVybiB0cmFjZS5fdHJhY2UgaW4gc2VsZi5fdHJhY2VzCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIChzZWxmLl90cmFjZXMgPT0gb3RoZXIuX3RyYWNlcykKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICI8VHJhY2VzIGxlbj0lcz4iICUgbGVuKHNlbGYpCisKKworZGVmIF9ub3JtYWxpemVfZmlsZW5hbWUoZmlsZW5hbWUpOgorICAgIGZpbGVuYW1lID0gb3MucGF0aC5ub3JtY2FzZShmaWxlbmFtZSkKKyAgICBpZiBmaWxlbmFtZS5lbmRzd2l0aCgoJy5weWMnLCAnLnB5bycpKToKKyAgICAgICAgZmlsZW5hbWUgPSBmaWxlbmFtZVs6LTFdCisgICAgcmV0dXJuIGZpbGVuYW1lCisKKworY2xhc3MgRmlsdGVyOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpbmNsdXNpdmUsIGZpbGVuYW1lX3BhdHRlcm4sCisgICAgICAgICAgICAgICAgIGxpbmVubz1Ob25lLCBhbGxfZnJhbWVzPUZhbHNlKToKKyAgICAgICAgc2VsZi5pbmNsdXNpdmUgPSBpbmNsdXNpdmUKKyAgICAgICAgc2VsZi5fZmlsZW5hbWVfcGF0dGVybiA9IF9ub3JtYWxpemVfZmlsZW5hbWUoZmlsZW5hbWVfcGF0dGVybikKKyAgICAgICAgc2VsZi5saW5lbm8gPSBsaW5lbm8KKyAgICAgICAgc2VsZi5hbGxfZnJhbWVzID0gYWxsX2ZyYW1lcworCisgICAgQHByb3BlcnR5CisgICAgZGVmIGZpbGVuYW1lX3BhdHRlcm4oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9maWxlbmFtZV9wYXR0ZXJuCisKKyAgICBkZWYgX19tYXRjaF9mcmFtZShzZWxmLCBmaWxlbmFtZSwgbGluZW5vKToKKyAgICAgICAgZmlsZW5hbWUgPSBfbm9ybWFsaXplX2ZpbGVuYW1lKGZpbGVuYW1lKQorICAgICAgICBpZiBub3QgZm5tYXRjaC5mbm1hdGNoKGZpbGVuYW1lLCBzZWxmLl9maWxlbmFtZV9wYXR0ZXJuKToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBpZiBzZWxmLmxpbmVubyBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiAobGluZW5vID09IHNlbGYubGluZW5vKQorCisgICAgZGVmIF9tYXRjaF9mcmFtZShzZWxmLCBmaWxlbmFtZSwgbGluZW5vKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX19tYXRjaF9mcmFtZShmaWxlbmFtZSwgbGluZW5vKSBeIChub3Qgc2VsZi5pbmNsdXNpdmUpCisKKyAgICBkZWYgX21hdGNoX3RyYWNlYmFjayhzZWxmLCB0cmFjZWJhY2spOgorICAgICAgICBpZiBzZWxmLmFsbF9mcmFtZXM6CisgICAgICAgICAgICBpZiBhbnkoc2VsZi5fX21hdGNoX2ZyYW1lKGZpbGVuYW1lLCBsaW5lbm8pCisgICAgICAgICAgICAgICAgICAgZm9yIGZpbGVuYW1lLCBsaW5lbm8gaW4gdHJhY2ViYWNrKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5pbmNsdXNpdmUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIChub3Qgc2VsZi5pbmNsdXNpdmUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmaWxlbmFtZSwgbGluZW5vID0gdHJhY2ViYWNrWzBdCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fbWF0Y2hfZnJhbWUoZmlsZW5hbWUsIGxpbmVubykKKworCitjbGFzcyBTbmFwc2hvdDoKKyAgICAiIiIKKyAgICBTbmFwc2hvdCBvZiB0cmFjZXMgb2YgbWVtb3J5IGJsb2NrcyBhbGxvY2F0ZWQgYnkgUHl0aG9uLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRyYWNlcywgdHJhY2ViYWNrX2xpbWl0KToKKyAgICAgICAgIyB0cmFjZXMgaXMgYSB0dXBsZSBvZiB0cmFjZSB0dXBsZXM6IHNlZSBfVHJhY2VzIGNvbnN0cnVjdG9yIGZvcgorICAgICAgICAjIHRoZSBleGFjdCBmb3JtYXQKKyAgICAgICAgc2VsZi50cmFjZXMgPSBfVHJhY2VzKHRyYWNlcykKKyAgICAgICAgc2VsZi50cmFjZWJhY2tfbGltaXQgPSB0cmFjZWJhY2tfbGltaXQKKworICAgIGRlZiBkdW1wKHNlbGYsIGZpbGVuYW1lKToKKyAgICAgICAgIiIiCisgICAgICAgIFdyaXRlIHRoZSBzbmFwc2hvdCBpbnRvIGEgZmlsZS4KKyAgICAgICAgIiIiCisgICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSwgIndiIikgYXMgZnA6CisgICAgICAgICAgICBwaWNrbGUuZHVtcChzZWxmLCBmcCwgcGlja2xlLkhJR0hFU1RfUFJPVE9DT0wpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGxvYWQoZmlsZW5hbWUpOgorICAgICAgICAiIiIKKyAgICAgICAgTG9hZCBhIHNuYXBzaG90IGZyb20gYSBmaWxlLgorICAgICAgICAiIiIKKyAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAicmIiKSBhcyBmcDoKKyAgICAgICAgICAgIHJldHVybiBwaWNrbGUubG9hZChmcCkKKworICAgIGRlZiBfZmlsdGVyX3RyYWNlKHNlbGYsIGluY2x1ZGVfZmlsdGVycywgZXhjbHVkZV9maWx0ZXJzLCB0cmFjZSk6CisgICAgICAgIHRyYWNlYmFjayA9IHRyYWNlWzFdCisgICAgICAgIGlmIGluY2x1ZGVfZmlsdGVyczoKKyAgICAgICAgICAgIGlmIG5vdCBhbnkodHJhY2VfZmlsdGVyLl9tYXRjaF90cmFjZWJhY2sodHJhY2ViYWNrKQorICAgICAgICAgICAgICAgICAgICAgICBmb3IgdHJhY2VfZmlsdGVyIGluIGluY2x1ZGVfZmlsdGVycyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGlmIGV4Y2x1ZGVfZmlsdGVyczoKKyAgICAgICAgICAgIGlmIGFueShub3QgdHJhY2VfZmlsdGVyLl9tYXRjaF90cmFjZWJhY2sodHJhY2ViYWNrKQorICAgICAgICAgICAgICAgICAgIGZvciB0cmFjZV9maWx0ZXIgaW4gZXhjbHVkZV9maWx0ZXJzKToKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBmaWx0ZXJfdHJhY2VzKHNlbGYsIGZpbHRlcnMpOgorICAgICAgICAiIiIKKyAgICAgICAgQ3JlYXRlIGEgbmV3IFNuYXBzaG90IGluc3RhbmNlIHdpdGggYSBmaWx0ZXJlZCB0cmFjZXMgc2VxdWVuY2UsIGZpbHRlcnMKKyAgICAgICAgaXMgYSBsaXN0IG9mIEZpbHRlciBpbnN0YW5jZXMuICBJZiBmaWx0ZXJzIGlzIGFuIGVtcHR5IGxpc3QsIHJldHVybiBhCisgICAgICAgIG5ldyBTbmFwc2hvdCBpbnN0YW5jZSB3aXRoIGEgY29weSBvZiB0aGUgdHJhY2VzLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZmlsdGVycywgSXRlcmFibGUpOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJmaWx0ZXJzIG11c3QgYmUgYSBsaXN0IG9mIGZpbHRlcnMsIG5vdCAlcyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIHR5cGUoZmlsdGVycykuX19uYW1lX18pCisgICAgICAgIGlmIGZpbHRlcnM6CisgICAgICAgICAgICBpbmNsdWRlX2ZpbHRlcnMgPSBbXQorICAgICAgICAgICAgZXhjbHVkZV9maWx0ZXJzID0gW10KKyAgICAgICAgICAgIGZvciB0cmFjZV9maWx0ZXIgaW4gZmlsdGVyczoKKyAgICAgICAgICAgICAgICBpZiB0cmFjZV9maWx0ZXIuaW5jbHVzaXZlOgorICAgICAgICAgICAgICAgICAgICBpbmNsdWRlX2ZpbHRlcnMuYXBwZW5kKHRyYWNlX2ZpbHRlcikKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBleGNsdWRlX2ZpbHRlcnMuYXBwZW5kKHRyYWNlX2ZpbHRlcikKKyAgICAgICAgICAgIG5ld190cmFjZXMgPSBbdHJhY2UgZm9yIHRyYWNlIGluIHNlbGYudHJhY2VzLl90cmFjZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5fZmlsdGVyX3RyYWNlKGluY2x1ZGVfZmlsdGVycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2x1ZGVfZmlsdGVycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNlKV0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG5ld190cmFjZXMgPSBzZWxmLnRyYWNlcy5fdHJhY2VzLmNvcHkoKQorICAgICAgICByZXR1cm4gU25hcHNob3QobmV3X3RyYWNlcywgc2VsZi50cmFjZWJhY2tfbGltaXQpCisKKyAgICBkZWYgX2dyb3VwX2J5KHNlbGYsIGtleV90eXBlLCBjdW11bGF0aXZlKToKKyAgICAgICAgaWYga2V5X3R5cGUgbm90IGluICgndHJhY2ViYWNrJywgJ2ZpbGVuYW1lJywgJ2xpbmVubycpOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigidW5rbm93biBrZXlfdHlwZTogJXIiICUgKGtleV90eXBlLCkpCisgICAgICAgIGlmIGN1bXVsYXRpdmUgYW5kIGtleV90eXBlIG5vdCBpbiAoJ2xpbmVubycsICdmaWxlbmFtZScpOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiY3VtdWxhdGl2ZSBtb2RlIGNhbm5vdCBieSB1c2VkICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndpdGgga2V5IHR5cGUgJXIiICUga2V5X3R5cGUpCisKKyAgICAgICAgc3RhdHMgPSB7fQorICAgICAgICB0cmFjZWJhY2tzID0ge30KKyAgICAgICAgaWYgbm90IGN1bXVsYXRpdmU6CisgICAgICAgICAgICBmb3IgdHJhY2UgaW4gc2VsZi50cmFjZXMuX3RyYWNlczoKKyAgICAgICAgICAgICAgICBzaXplLCB0cmFjZV90cmFjZWJhY2sgPSB0cmFjZQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgdHJhY2ViYWNrID0gdHJhY2ViYWNrc1t0cmFjZV90cmFjZWJhY2tdCisgICAgICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgICAgICAgICBpZiBrZXlfdHlwZSA9PSAndHJhY2ViYWNrJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lcyA9IHRyYWNlX3RyYWNlYmFjaworICAgICAgICAgICAgICAgICAgICBlbGlmIGtleV90eXBlID09ICdsaW5lbm8nOgorICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVzID0gdHJhY2VfdHJhY2ViYWNrWzoxXQorICAgICAgICAgICAgICAgICAgICBlbHNlOiAjIGtleV90eXBlID09ICdmaWxlbmFtZSc6CisgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZXMgPSAoKHRyYWNlX3RyYWNlYmFja1swXVswXSwgMCksKQorICAgICAgICAgICAgICAgICAgICB0cmFjZWJhY2sgPSBUcmFjZWJhY2soZnJhbWVzKQorICAgICAgICAgICAgICAgICAgICB0cmFjZWJhY2tzW3RyYWNlX3RyYWNlYmFja10gPSB0cmFjZWJhY2sKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHN0YXQgPSBzdGF0c1t0cmFjZWJhY2tdCisgICAgICAgICAgICAgICAgICAgIHN0YXQuc2l6ZSArPSBzaXplCisgICAgICAgICAgICAgICAgICAgIHN0YXQuY291bnQgKz0gMQorICAgICAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgc3RhdHNbdHJhY2ViYWNrXSA9IFN0YXRpc3RpYyh0cmFjZWJhY2ssIHNpemUsIDEpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIGN1bXVsYXRpdmUgc3RhdGlzdGljcworICAgICAgICAgICAgZm9yIHRyYWNlIGluIHNlbGYudHJhY2VzLl90cmFjZXM6CisgICAgICAgICAgICAgICAgc2l6ZSwgdHJhY2VfdHJhY2ViYWNrID0gdHJhY2UKKyAgICAgICAgICAgICAgICBmb3IgZnJhbWUgaW4gdHJhY2VfdHJhY2ViYWNrOgorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICB0cmFjZWJhY2sgPSB0cmFjZWJhY2tzW2ZyYW1lXQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBrZXlfdHlwZSA9PSAnbGluZW5vJzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZXMgPSAoZnJhbWUsKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZTogIyBrZXlfdHlwZSA9PSAnZmlsZW5hbWUnOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lcyA9ICgoZnJhbWVbMF0sIDApLCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNlYmFjayA9IFRyYWNlYmFjayhmcmFtZXMpCisgICAgICAgICAgICAgICAgICAgICAgICB0cmFjZWJhY2tzW2ZyYW1lXSA9IHRyYWNlYmFjaworICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ID0gc3RhdHNbdHJhY2ViYWNrXQorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5zaXplICs9IHNpemUKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuY291bnQgKz0gMQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0c1t0cmFjZWJhY2tdID0gU3RhdGlzdGljKHRyYWNlYmFjaywgc2l6ZSwgMSkKKyAgICAgICAgcmV0dXJuIHN0YXRzCisKKyAgICBkZWYgc3RhdGlzdGljcyhzZWxmLCBrZXlfdHlwZSwgY3VtdWxhdGl2ZT1GYWxzZSk6CisgICAgICAgICIiIgorICAgICAgICBHcm91cCBzdGF0aXN0aWNzIGJ5IGtleV90eXBlLiBSZXR1cm4gYSBzb3J0ZWQgbGlzdCBvZiBTdGF0aXN0aWMKKyAgICAgICAgaW5zdGFuY2VzLgorICAgICAgICAiIiIKKyAgICAgICAgZ3JvdXBlZCA9IHNlbGYuX2dyb3VwX2J5KGtleV90eXBlLCBjdW11bGF0aXZlKQorICAgICAgICBzdGF0aXN0aWNzID0gbGlzdChncm91cGVkLnZhbHVlcygpKQorICAgICAgICBzdGF0aXN0aWNzLnNvcnQocmV2ZXJzZT1UcnVlLCBrZXk9U3RhdGlzdGljLl9zb3J0X2tleSkKKyAgICAgICAgcmV0dXJuIHN0YXRpc3RpY3MKKworICAgIGRlZiBjb21wYXJlX3RvKHNlbGYsIG9sZF9zbmFwc2hvdCwga2V5X3R5cGUsIGN1bXVsYXRpdmU9RmFsc2UpOgorICAgICAgICAiIiIKKyAgICAgICAgQ29tcHV0ZSB0aGUgZGlmZmVyZW5jZXMgd2l0aCBhbiBvbGQgc25hcHNob3Qgb2xkX3NuYXBzaG90LiBHZXQKKyAgICAgICAgc3RhdGlzdGljcyBhcyBhIHNvcnRlZCBsaXN0IG9mIFN0YXRpc3RpY0RpZmYgaW5zdGFuY2VzLCBncm91cGVkIGJ5CisgICAgICAgIGdyb3VwX2J5LgorICAgICAgICAiIiIKKyAgICAgICAgbmV3X2dyb3VwID0gc2VsZi5fZ3JvdXBfYnkoa2V5X3R5cGUsIGN1bXVsYXRpdmUpCisgICAgICAgIG9sZF9ncm91cCA9IG9sZF9zbmFwc2hvdC5fZ3JvdXBfYnkoa2V5X3R5cGUsIGN1bXVsYXRpdmUpCisgICAgICAgIHN0YXRpc3RpY3MgPSBfY29tcGFyZV9ncm91cGVkX3N0YXRzKG9sZF9ncm91cCwgbmV3X2dyb3VwKQorICAgICAgICBzdGF0aXN0aWNzLnNvcnQocmV2ZXJzZT1UcnVlLCBrZXk9U3RhdGlzdGljRGlmZi5fc29ydF9rZXkpCisgICAgICAgIHJldHVybiBzdGF0aXN0aWNzCisKKworZGVmIHRha2Vfc25hcHNob3QoKToKKyAgICAiIiIKKyAgICBUYWtlIGEgc25hcHNob3Qgb2YgdHJhY2VzIG9mIG1lbW9yeSBibG9ja3MgYWxsb2NhdGVkIGJ5IFB5dGhvbi4KKyAgICAiIiIKKyAgICBpZiBub3QgaXNfdHJhY2luZygpOgorICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoInRoZSB0cmFjZW1hbGxvYyBtb2R1bGUgbXVzdCBiZSB0cmFjaW5nIG1lbW9yeSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWxsb2NhdGlvbnMgdG8gdGFrZSBhIHNuYXBzaG90IikKKyAgICB0cmFjZXMgPSBfZ2V0X3RyYWNlcygpCisgICAgdHJhY2ViYWNrX2xpbWl0ID0gZ2V0X3RyYWNlYmFja19saW1pdCgpCisgICAgcmV0dXJuIFNuYXBzaG90KHRyYWNlcywgdHJhY2ViYWNrX2xpbWl0KQpkaWZmIC0tZ2l0IGEvTGliL3R1cnRsZS5weSBiL0xpYi90dXJ0bGUucHkKaW5kZXggYzZlYmZhNS4uY2JkNGY0NyAxMDA2NDQKLS0tIGEvTGliL3R1cnRsZS5weQorKysgYi9MaWIvdHVydGxlLnB5CkBAIC0xMDksNiArMTA5LDcgQEAKIGltcG9ydCBtYXRoCiBpbXBvcnQgdGltZQogaW1wb3J0IGluc3BlY3QKK2ltcG9ydCBzeXMKIAogZnJvbSBvcy5wYXRoIGltcG9ydCBpc2ZpbGUsIHNwbGl0LCBqb2luCiBmcm9tIGNvcHkgaW1wb3J0IGRlZXBjb3B5CkBAIC0xMzksNyArMTQwLDcgQEAKIF90Z191dGlsaXRpZXMgPSBbJ3dyaXRlX2RvY3N0cmluZ2RpY3QnLCAnZG9uZSddCiAKIF9fYWxsX18gPSAoX3RnX2NsYXNzZXMgKyBfdGdfc2NyZWVuX2Z1bmN0aW9ucyArIF90Z190dXJ0bGVfZnVuY3Rpb25zICsKLSAgICAgICAgICAgX3RnX3V0aWxpdGllcykgIyArIF9tYXRoX2Z1bmN0aW9ucykKKyAgICAgICAgICAgX3RnX3V0aWxpdGllcyArIFsnVGVybWluYXRvciddKSAjICsgX21hdGhfZnVuY3Rpb25zKQogCiBfYWxpYXNfbGlzdCA9IFsnYWRkc2hhcGUnLCAnYmFja3dhcmQnLCAnYmsnLCAnZmQnLCAnaHQnLCAnbHQnLCAncGQnLCAncG9zJywKICAgICAgICAgICAgICAgICdwdScsICdydCcsICdzZXRoJywgJ3NldHBvcycsICdzZXRwb3NpdGlvbicsICdzdCcsCkBAIC05OTIsNiArOTkzLDEzIEBACiAgICAgICAgIHNlbGYuX2NvbG9ybW9kZSA9IF9DRkdbImNvbG9ybW9kZSJdCiAgICAgICAgIHNlbGYuX2tleXMgPSBbXQogICAgICAgICBzZWxmLmNsZWFyKCkKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nOgorICAgICAgICAgICAgIyBGb3JjZSBUdXJ0bGUgd2luZG93IHRvIHRoZSBmcm9udCBvbiBPUyBYLiBUaGlzIGlzIG5lZWRlZCBiZWNhdXNlCisgICAgICAgICAgICAjIHRoZSBUdXJ0bGUgd2luZG93IHdpbGwgc2hvdyBiZWhpbmQgdGhlIFRlcm1pbmFsIHdpbmRvdyB3aGVuIHlvdQorICAgICAgICAgICAgIyBzdGFydCB0aGUgZGVtbyBmcm9tIHRoZSBjb21tYW5kIGxpbmUuCisgICAgICAgICAgICByb290d2luZG93ID0gY3Yud2luZm9fdG9wbGV2ZWwoKQorICAgICAgICAgICAgcm9vdHdpbmRvdy5jYWxsKCd3bScsICdhdHRyaWJ1dGVzJywgJy4nLCAnLXRvcG1vc3QnLCAnMScpCisgICAgICAgICAgICByb290d2luZG93LmNhbGwoJ3dtJywgJ2F0dHJpYnV0ZXMnLCAnLicsICctdG9wbW9zdCcsICcwJykKIAogICAgIGRlZiBjbGVhcihzZWxmKToKICAgICAgICAgIiIiRGVsZXRlIGFsbCBkcmF3aW5ncyBhbmQgYWxsIHR1cnRsZXMgZnJvbSB0aGUgVHVydGxlU2NyZWVuLgpAQCAtMTI4MCw3ICsxMjg4LDcgQEAKICAgICBkZWYgX2luY3JlbWVudHVkYyhzZWxmKToKICAgICAgICAgIiIiSW5jcmVtZW50IHVwZGF0ZSBjb3VudGVyLiIiIgogICAgICAgICBpZiBub3QgVHVydGxlU2NyZWVuLl9SVU5OSU5HOgotICAgICAgICAgICAgVHVydGxlU2NyZWVuLl9SVU5OTklORyA9IFRydWUKKyAgICAgICAgICAgIFR1cnRsZVNjcmVlbi5fUlVOTklORyA9IFRydWUKICAgICAgICAgICAgIHJhaXNlIFRlcm1pbmF0b3IKICAgICAgICAgaWYgc2VsZi5fdHJhY2luZyA+IDA6CiAgICAgICAgICAgICBzZWxmLl91cGRhdGVjb3VudGVyICs9IDEKQEAgLTI1ODcsNyArMjU5NSw3IEBACiAgICAgICAgIEV4YW1wbGUgKGZvciBhIFR1cnRsZSBpbnN0YW5jZSBuYW1lZCB0dXJ0bGUpOgogICAgICAgICA+Pj4gdHVydGxlLnNldHVuZG9idWZmZXIoNDIpCiAgICAgICAgICIiIgotICAgICAgICBpZiBzaXplIGlzIE5vbmU6CisgICAgICAgIGlmIHNpemUgaXMgTm9uZSBvciBzaXplIDw9IDA6CiAgICAgICAgICAgICBzZWxmLnVuZG9idWZmZXIgPSBOb25lCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLnVuZG9idWZmZXIgPSBUYnVmZmVyKHNpemUpCkBAIC0yOTM4LDcgKzI5NDYsNyBAQAogICAgICAgICBzZWxmLl9zdHJldGNoZmFjdG9yID0gYTExLCBhMjIKICAgICAgICAgc2VsZi5fc2hlYXJmYWN0b3IgPSBhMTIvYTIyCiAgICAgICAgIHNlbGYuX3RpbHQgPSBhbGZhCi0gICAgICAgIHNlbGYuX3VwZGF0ZSgpCisgICAgICAgIHNlbGYucGVuKHJlc2l6ZW1vZGU9InVzZXIiKQogCiAKICAgICBkZWYgX3BvbHl0cmFmbyhzZWxmLCBwb2x5KToKQEAgLTM3NDYsNyArMzc1NCw3IEBACiAgICAgICAgICAgICBUdXJ0bGUuX3NjcmVlbiA9IE5vbmUKICAgICAgICAgICAgIF9TY3JlZW4uX3Jvb3QgPSBOb25lCiAgICAgICAgICAgICBfU2NyZWVuLl9jYW52YXMgPSBOb25lCi0gICAgICAgIFR1cnRsZVNjcmVlbi5fUlVOTklORyA9IFRydWUKKyAgICAgICAgVHVydGxlU2NyZWVuLl9SVU5OSU5HID0gRmFsc2UKICAgICAgICAgcm9vdC5kZXN0cm95KCkKIAogICAgIGRlZiBieWUoc2VsZik6CkBAIC0zNzg3LDcgKzM3OTUsNiBAQAogICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CiAgICAgICAgICAgICBleGl0KDApCiAKLQogY2xhc3MgVHVydGxlKFJhd1R1cnRsZSk6CiAgICAgIiIiUmF3VHVydGxlIGF1dG8tY3JlYXRpbmcgKHNjcm9sbGVkKSBjYW52YXMuCiAKQEAgLTM4MTAsMTggKzM4MTcsNiBAQAogCiBQZW4gPSBUdXJ0bGUKIAotZGVmIF9nZXRwZW4oKToKLSAgICAiIiJDcmVhdGUgdGhlICdhbm9ueW1vdXMnIHR1cnRsZSBpZiBub3QgYWxyZWFkeSBwcmVzZW50LiIiIgotICAgIGlmIFR1cnRsZS5fcGVuIGlzIE5vbmU6Ci0gICAgICAgIFR1cnRsZS5fcGVuID0gVHVydGxlKCkKLSAgICByZXR1cm4gVHVydGxlLl9wZW4KLQotZGVmIF9nZXRzY3JlZW4oKToKLSAgICAiIiJDcmVhdGUgYSBUdXJ0bGVTY3JlZW4gaWYgbm90IGFscmVhZHkgcHJlc2VudC4iIiIKLSAgICBpZiBUdXJ0bGUuX3NjcmVlbiBpcyBOb25lOgotICAgICAgICBUdXJ0bGUuX3NjcmVlbiA9IFNjcmVlbigpCi0gICAgcmV0dXJuIFR1cnRsZS5fc2NyZWVuCi0KIGRlZiB3cml0ZV9kb2NzdHJpbmdkaWN0KGZpbGVuYW1lPSJ0dXJ0bGVfZG9jc3RyaW5nZGljdCIpOgogICAgICIiIkNyZWF0ZSBhbmQgd3JpdGUgZG9jc3RyaW5nLWRpY3Rpb25hcnkgdG8gZmlsZS4KIApAQCAtMzg0MywxOCArMzgzOCwxOCBAQAogICAgICAgICBrZXkgPSAiVHVydGxlLiIrbWV0aG9kbmFtZQogICAgICAgICBkb2NzZGljdFtrZXldID0gZXZhbChrZXkpLl9fZG9jX18KIAotICAgIGYgPSBvcGVuKCIlcy5weSIgJSBmaWxlbmFtZSwidyIpCi0gICAga2V5cyA9IHNvcnRlZChbeCBmb3IgeCBpbiBkb2NzZGljdC5rZXlzKCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIHguc3BsaXQoJy4nKVsxXSBub3QgaW4gX2FsaWFzX2xpc3RdKQotICAgIGYud3JpdGUoJ2RvY3NkaWN0ID0ge1xuXG4nKQotICAgIGZvciBrZXkgaW4ga2V5c1s6LTFdOgorICAgIHdpdGggb3BlbigiJXMucHkiICUgZmlsZW5hbWUsInciKSBhcyBmOgorICAgICAgICBrZXlzID0gc29ydGVkKFt4IGZvciB4IGluIGRvY3NkaWN0LmtleXMoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHguc3BsaXQoJy4nKVsxXSBub3QgaW4gX2FsaWFzX2xpc3RdKQorICAgICAgICBmLndyaXRlKCdkb2NzZGljdCA9IHtcblxuJykKKyAgICAgICAgZm9yIGtleSBpbiBrZXlzWzotMV06CisgICAgICAgICAgICBmLndyaXRlKCclcyA6XG4nICUgcmVwcihrZXkpKQorICAgICAgICAgICAgZi53cml0ZSgnICAgICAgICAiIiIlc1xuIiIiLFxuXG4nICUgZG9jc2RpY3Rba2V5XSkKKyAgICAgICAga2V5ID0ga2V5c1stMV0KICAgICAgICAgZi53cml0ZSgnJXMgOlxuJyAlIHJlcHIoa2V5KSkKLSAgICAgICAgZi53cml0ZSgnICAgICAgICAiIiIlc1xuIiIiLFxuXG4nICUgZG9jc2RpY3Rba2V5XSkKLSAgICBrZXkgPSBrZXlzWy0xXQotICAgIGYud3JpdGUoJyVzIDpcbicgJSByZXByKGtleSkpCi0gICAgZi53cml0ZSgnICAgICAgICAiIiIlc1xuIiIiXG5cbicgJSBkb2NzZGljdFtrZXldKQotICAgIGYud3JpdGUoIn1cbiIpCi0gICAgZi5jbG9zZSgpCisgICAgICAgIGYud3JpdGUoJyAgICAgICAgIiIiJXNcbiIiIlxuXG4nICUgZG9jc2RpY3Rba2V5XSkKKyAgICAgICAgZi53cml0ZSgifVxuIikKKyAgICAgICAgZi5jbG9zZSgpCiAKIGRlZiByZWFkX2RvY3N0cmluZ3MobGFuZyk6CiAgICAgIiIiUmVhZCBpbiBkb2NzdHJpbmdzIGZyb20gbGFuZy1zcGVjaWZpYyBkb2NzdHJpbmcgZGljdGlvbmFyeS4KQEAgLTM5NDQsMjYgKzM5MzksMzggQEAKICMjIGFzIGZ1bmN0aW9ucy4gU28gd2UgY2FuIGVuaGFuY2UsIGNoYW5nZSwgYWRkLCBkZWxldGUgbWV0aG9kcyB0byB0aGVzZQogIyMgY2xhc3NlcyBhbmQgZG8gbm90IG5lZWQgdG8gY2hhbmdlIGFueXRoaW5nIGhlcmUuCiAKK19fZnVuY19ib2R5ID0gIiIiXAorZGVmIHtuYW1lfXtwYXJhbXNsaXN0fToKKyAgICBpZiB7b2JqfSBpcyBOb25lOgorICAgICAgICBpZiBub3QgVHVydGxlU2NyZWVuLl9SVU5OSU5HOgorICAgICAgICAgICAgVHVydGxlU2NyZWVuLl9SVU5OSU5HID0gVHJ1ZQorICAgICAgICAgICAgcmFpc2UgVGVybWluYXRvcgorICAgICAgICB7b2JqfSA9IHtpbml0fQorICAgIHRyeToKKyAgICAgICAgcmV0dXJuIHtvYmp9LntuYW1lfXthcmdzbGlzdH0KKyAgICBleGNlcHQgVEsuVGNsRXJyb3I6CisgICAgICAgIGlmIG5vdCBUdXJ0bGVTY3JlZW4uX1JVTk5JTkc6CisgICAgICAgICAgICBUdXJ0bGVTY3JlZW4uX1JVTk5JTkcgPSBUcnVlCisgICAgICAgICAgICByYWlzZSBUZXJtaW5hdG9yCisgICAgICAgIHJhaXNlCisiIiIKIAotZm9yIG1ldGhvZG5hbWUgaW4gX3RnX3NjcmVlbl9mdW5jdGlvbnM6Ci0gICAgcGwxLCBwbDIgPSBnZXRtZXRocGFybGlzdChldmFsKCdfU2NyZWVuLicgKyBtZXRob2RuYW1lKSkKLSAgICBpZiBwbDEgPT0gIiI6Ci0gICAgICAgIHByaW50KCI+Pj4+Pj4iLCBwbDEsIHBsMikKLSAgICAgICAgY29udGludWUKLSAgICBkZWZzdHIgPSAoImRlZiAlKGtleSlzJShwbDEpczogcmV0dXJuIF9nZXRzY3JlZW4oKS4lKGtleSlzJShwbDIpcyIgJQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7J2tleSc6bWV0aG9kbmFtZSwgJ3BsMSc6cGwxLCAncGwyJzpwbDJ9KQotICAgIGV4ZWMoZGVmc3RyKQotICAgIGV2YWwobWV0aG9kbmFtZSkuX19kb2NfXyA9IF9zY3JlZW5fZG9jcmV2aXNlKGV2YWwoJ19TY3JlZW4uJyttZXRob2RuYW1lKS5fX2RvY19fKQorZGVmIF9tYWtlX2dsb2JhbF9mdW5jcyhmdW5jdGlvbnMsIGNscywgb2JqLCBpbml0LCBkb2NyZXZpc2UpOgorICAgIGZvciBtZXRob2RuYW1lIGluIGZ1bmN0aW9uczoKKyAgICAgICAgbWV0aG9kID0gZ2V0YXR0cihjbHMsIG1ldGhvZG5hbWUpCisgICAgICAgIHBsMSwgcGwyID0gZ2V0bWV0aHBhcmxpc3QobWV0aG9kKQorICAgICAgICBpZiBwbDEgPT0gIiI6CisgICAgICAgICAgICBwcmludCgiPj4+Pj4+IiwgcGwxLCBwbDIpCisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBkZWZzdHIgPSBfX2Z1bmNfYm9keS5mb3JtYXQob2JqPW9iaiwgaW5pdD1pbml0LCBuYW1lPW1ldGhvZG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNsaXN0PXBsMSwgYXJnc2xpc3Q9cGwyKQorICAgICAgICBleGVjKGRlZnN0ciwgZ2xvYmFscygpKQorICAgICAgICBnbG9iYWxzKClbbWV0aG9kbmFtZV0uX19kb2NfXyA9IGRvY3JldmlzZShtZXRob2QuX19kb2NfXykKIAotZm9yIG1ldGhvZG5hbWUgaW4gX3RnX3R1cnRsZV9mdW5jdGlvbnM6Ci0gICAgcGwxLCBwbDIgPSBnZXRtZXRocGFybGlzdChldmFsKCdUdXJ0bGUuJyArIG1ldGhvZG5hbWUpKQotICAgIGlmIHBsMSA9PSAiIjoKLSAgICAgICAgcHJpbnQoIj4+Pj4+PiIsIHBsMSwgcGwyKQotICAgICAgICBjb250aW51ZQotICAgIGRlZnN0ciA9ICgiZGVmICUoa2V5KXMlKHBsMSlzOiByZXR1cm4gX2dldHBlbigpLiUoa2V5KXMlKHBsMilzIiAlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsna2V5JzptZXRob2RuYW1lLCAncGwxJzpwbDEsICdwbDInOnBsMn0pCi0gICAgZXhlYyhkZWZzdHIpCi0gICAgZXZhbChtZXRob2RuYW1lKS5fX2RvY19fID0gX3R1cnRsZV9kb2NyZXZpc2UoZXZhbCgnVHVydGxlLicrbWV0aG9kbmFtZSkuX19kb2NfXykKK19tYWtlX2dsb2JhbF9mdW5jcyhfdGdfc2NyZWVuX2Z1bmN0aW9ucywgX1NjcmVlbiwKKyAgICAgICAgICAgICAgICAgICAnVHVydGxlLl9zY3JlZW4nLCAnU2NyZWVuKCknLCBfc2NyZWVuX2RvY3JldmlzZSkKK19tYWtlX2dsb2JhbF9mdW5jcyhfdGdfdHVydGxlX2Z1bmN0aW9ucywgVHVydGxlLAorICAgICAgICAgICAgICAgICAgICdUdXJ0bGUuX3BlbicsICdUdXJ0bGUoKScsIF90dXJ0bGVfZG9jcmV2aXNlKQogCiAKIGRvbmUgPSBtYWlubG9vcApkaWZmIC0tZ2l0IGEvTGliL3R1cnRsZWRlbW8vX19pbml0X18ucHkgYi9MaWIvdHVydGxlZGVtby9fX2luaXRfXy5weQppbmRleCBlNjlkZTI5Li43NzE1MGUyIDEwMDY0NAotLS0gYS9MaWIvdHVydGxlZGVtby9fX2luaXRfXy5weQorKysgYi9MaWIvdHVydGxlZGVtby9fX2luaXRfXy5weQpAQCAtMCwwICsxLDE0IEBACisiIiIKKyAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBBYm91dCB0aGlzIHZpZXdlcgorICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBUaW55IGRlbW8gdmlld2VyIHRvIHZpZXcgdHVydGxlIGdyYXBoaWNzIGV4YW1wbGUgc2NyaXB0cy4KKworICAgIFF1aWNrbHkgYW5kIGRpcnR5bHkgYXNzZW1ibGVkIGJ5IEdyZWdvciBMaW5nbC4KKyAgICBKdW5lLCAyMDA2CisKKyAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWU6IHR1cnRsZWRlbW8gLSBIZWxwCisKKyAgICBIYXZlIGZ1biEKKyIiIgpkaWZmIC0tZ2l0IGEvTGliL3R1cnRsZWRlbW8vX19tYWluX18ucHkgYi9MaWIvdHVydGxlZGVtby9fX21haW5fXy5weQppbmRleCBjYmYzYWViLi4xMDZkMDU4IDEwMDc1NQotLS0gYS9MaWIvdHVydGxlZGVtby9fX21haW5fXy5weQorKysgYi9MaWIvdHVydGxlZGVtby9fX21haW5fXy5weQpAQCAtMSwxNyArMSwxMDQgQEAKICMhL3Vzci9iaW4vZW52IHB5dGhvbjMKKworIiIiCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgIHR1cnRsZURlbW8gLSBIZWxwCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBUaGlzIGRvY3VtZW50IGhhcyB0d28gc2VjdGlvbnM6CisKKyAgKDEpIEhvdyB0byB1c2UgdGhlIGRlbW8gdmlld2VyCisgICgyKSBIb3cgdG8gYWRkIHlvdXIgb3duIGRlbW9zIHRvIHRoZSBkZW1vIHJlcG9zaXRvcnkKKworCisgICgxKSBIb3cgdG8gdXNlIHRoZSBkZW1vIHZpZXdlci4KKworICBTZWxlY3QgYSBkZW1vc2NyaXB0IGZyb20gdGhlIGV4YW1wbGUgbWVudS4KKyAgVGhlIChzeW50YXggY29sb3JlZCkgc291cmNlIGNvZGUgYXBwZWFycyBpbiB0aGUgbGVmdAorICBzb3VyY2UgY29kZSB3aW5kb3cuIElUIENBTk5PVCBCRSBFRElURUQsIGJ1dCBPTkxZIFZJRVdFRCEKKworICBUaGUgZGVtbyB2aWV3ZXIgd2luZG93cyBjYW4gYmUgcmVzaXplZC4gVGhlIGRpdmlkZXIgYmV0d2VlbiB0ZXh0CisgIGFuZCBjYW52YXMgY2FuIGJlIG1vdmVkIGJ5IGdyYWJiaW5nIGl0IHdpdGggdGhlIG1vdXNlLiBUaGUgdGV4dCBmb250CisgIHNpemUgY2FuIGJlIGNoYW5nZWQgZnJvbSB0aGUgbWVudSBhbmQgd2l0aCBDb250cm9sL0NvbW1hbmQgJy0nLycrJy4KKyAgSXQgY2FuIGFsc28gYmUgY2hhbmdlZCBvbiBtb3N0IHN5c3RlbXMgd2l0aCBDb250cm9sLW1vdXNld2hlZWwKKyAgd2hlbiB0aGUgbW91c2UgaXMgb3ZlciB0aGUgdGV4dC4KKworICBQcmVzcyBTVEFSVCBidXR0b24gdG8gc3RhcnQgdGhlIGRlbW8uCisgIFN0b3AgZXhlY3V0aW9uIGJ5IHByZXNzaW5nIHRoZSBTVE9QIGJ1dHRvbi4KKyAgQ2xlYXIgc2NyZWVuIGJ5IHByZXNzaW5nIHRoZSBDTEVBUiBidXR0b24uCisgIFJlc3RhcnQgYnkgcHJlc3NpbmcgdGhlIFNUQVJUIGJ1dHRvbiBhZ2Fpbi4KKworICBTUEVDSUFMIGRlbW9zLCBzdWNoIGFzIGNsb2NrLnB5IGFyZSB0aG9zZSB3aGljaCBydW4gRVZFTlREUklWRU4uCisKKyAgICAgIFByZXNzIFNUQVJUIGJ1dHRvbiB0byBzdGFydCB0aGUgZGVtby4KKworICAgICAgLSBVbnRpbCB0aGUgRVZFTlRMT09QIGlzIGVudGVyZWQgZXZlcnl0aGluZyB3b3JrcworICAgICAgYXMgaW4gYW4gb3JkaW5hcnkgZGVtbyBzY3JpcHQuCisKKyAgICAgIC0gV2hlbiB0aGUgRVZFTlRMT09QIGlzIGVudGVyZWQsIHlvdSBjb250cm9sIHRoZQorICAgICAgYXBwbGljYXRpb24gYnkgdXNpbmcgdGhlIG1vdXNlIGFuZC9vciBrZXlzIChvciBpdCdzCisgICAgICBjb250cm9sbGVkIGJ5IHNvbWUgdGltZXIgZXZlbnRzKQorICAgICAgVG8gc3RvcCBpdCB5b3UgY2FuIGFuZCBtdXN0IHByZXNzIHRoZSBTVE9QIGJ1dHRvbi4KKworICAgICAgV2hpbGUgdGhlIEVWRU5UTE9PUCBpcyBydW5uaW5nLCB0aGUgZXhhbXBsZXMgbWVudSBpcyBkaXNhYmxlZC4KKworICAgICAgLSBPbmx5IGFmdGVyIGhhdmluZyBwcmVzc2VkIHRoZSBTVE9QIGJ1dHRvbiwgeW91IG1heQorICAgICAgcmVzdGFydCBpdCBvciBjaG9vc2UgYW5vdGhlciBleGFtcGxlIHNjcmlwdC4KKworICAgKiAqICogKiAqICogKiAqCisgICBJbiBzb21lIHJhcmUgc2l0dWF0aW9ucyB0aGVyZSBtYXkgb2NjdXIgaW50ZXJmZXJlbmNlcy9jb25mbGljdHMKKyAgIGJldHdlZW4gZXZlbnRzIGNvbmNlcm5pbmcgdGhlIGRlbW8gc2NyaXB0IGFuZCB0aG9zZSBjb25jZXJuaW5nIHRoZQorICAgZGVtby12aWV3ZXIuIChUaGV5IHJ1biBpbiB0aGUgc2FtZSBwcm9jZXNzLikgU3RyYW5nZSBiZWhhdmlvdXIgbWF5IGJlCisgICB0aGUgY29uc2VxdWVuY2UgYW5kIGluIHRoZSB3b3JzdCBjYXNlIHlvdSBtdXN0IGNsb3NlIGFuZCByZXN0YXJ0IHRoZQorICAgdmlld2VyLgorICAgKiAqICogKiAqICogKiAqCisKKworICAgKDIpIEhvdyB0byBhZGQgeW91ciBvd24gZGVtb3MgdG8gdGhlIGRlbW8gcmVwb3NpdG9yeQorCisgICAtIFBsYWNlIHRoZSBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeSBhcyB0dXJ0bGVkZW1vL19fbWFpbl9fLnB5CisgICAgIElNUE9SVEFOVCEgV2hlbiBpbXBvcnRlZCwgdGhlIGRlbW8gc2hvdWxkIG5vdCBtb2RpZnkgdGhlIHN5c3RlbQorICAgICBieSBjYWxsaW5nIGZ1bmN0aW9ucyBpbiBvdGhlciBtb2R1bGVzLCBzdWNoIGFzIHN5cywgdGtpbnRlciwgb3IKKyAgICAgdHVydGxlLiBHbG9iYWwgdmFyaWFibGVzIHNob3VsZCBiZSBpbml0aWFsaXplZCBpbiBtYWluKCkuCisKKyAgIC0gVGhlIGNvZGUgbXVzdCBjb250YWluIGEgbWFpbigpIGZ1bmN0aW9uIHdoaWNoIHdpbGwKKyAgICAgYmUgZXhlY3V0ZWQgYnkgdGhlIHZpZXdlciAoc2VlIHByb3ZpZGVkIGV4YW1wbGUgc2NyaXB0cykuCisgICAgIEl0IG1heSByZXR1cm4gYSBzdHJpbmcgd2hpY2ggd2lsbCBiZSBkaXNwbGF5ZWQgaW4gdGhlIExhYmVsIGJlbG93CisgICAgIHRoZSBzb3VyY2UgY29kZSB3aW5kb3cgKHdoZW4gZXhlY3V0aW9uIGhhcyBmaW5pc2hlZC4pCisKKyAgIC0gSW4gb3JkZXIgdG8gcnVuIG15ZGVtby5weSBieSBpdHNlbGYsIHN1Y2ggYXMgZHVyaW5nIGRldmVsb3BtZW50LAorICAgICBhZGQgdGhlIGZvbGxvd2luZyBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlOgorCisgICAgaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICAgICAgbWFpbigpCisgICAgICAgIG1haW5sb29wKCkgICMga2VlcCB3aW5kb3cgb3BlbgorCisgICAgcHl0aG9uIC1tIHR1cnRsZWRlbW8ubXlkZW1vICAjIHdpbGwgdGhlbiBydW4gaXQKKworICAgLSBJZiB0aGUgZGVtbyBpcyBFVkVOVCBEUklWRU4sIG1haW4gbXVzdCByZXR1cm4gdGhlIHN0cmluZworICAgICAiRVZFTlRMT09QIi4gVGhpcyBpbmZvcm1zIHRoZSBkZW1vIHZpZXdlciB0aGF0IHRoZSBzY3JpcHQgaXMKKyAgICAgc3RpbGwgcnVubmluZyBhbmQgbXVzdCBiZSBzdG9wcGVkIGJ5IHRoZSB1c2VyIQorCisgICAgIElmIGFuICJFVkVOVExPT1AiIGRlbW8gcnVucyBieSBpdHNlbGYsIGFzIHdpdGggY2xvY2ssIHdoaWNoIHVzZXMKKyAgICAgb250aW1lciwgb3IgbWluaW1hbF9oYW5vaSwgd2hpY2ggbG9vcHMgYnkgcmVjdXJzaW9uLCB0aGVuIHRoZQorICAgICBjb2RlIHNob3VsZCBjYXRjaCB0aGUgdHVydGxlLlRlcm1pbmF0b3IgZXhjZXB0aW9uIHRoYXQgd2lsbCBiZQorICAgICByYWlzZWQgd2hlbiB0aGUgdXNlciBwcmVzc2VzIHRoZSBTVE9QIGJ1dHRvbi4gIChQYWludCBpcyBub3Qgc3VjaAorICAgICBhIGRlbW87IGl0IG9ubHkgYWN0cyBpbiByZXNwb25zZSB0byBtb3VzZSBjbGlja3MgYW5kIG1vdmVtZW50cy4pCisiIiIKIGltcG9ydCBzeXMKIGltcG9ydCBvcwogCiBmcm9tIHRraW50ZXIgaW1wb3J0ICoKIGZyb20gaWRsZWxpYi5QZXJjb2xhdG9yIGltcG9ydCBQZXJjb2xhdG9yCiBmcm9tIGlkbGVsaWIuQ29sb3JEZWxlZ2F0b3IgaW1wb3J0IENvbG9yRGVsZWdhdG9yCi1mcm9tIGlkbGVsaWIudGV4dFZpZXcgaW1wb3J0IHZpZXdfZmlsZSAjIFRleHRWaWV3ZXIKLWZyb20gaW1wIGltcG9ydCByZWxvYWQKK2Zyb20gaWRsZWxpYi50ZXh0VmlldyBpbXBvcnQgdmlld190ZXh0Citmcm9tIHR1cnRsZWRlbW8gaW1wb3J0IF9fZG9jX18gYXMgYWJvdXRfdHVydGxlZGVtbwogCiBpbXBvcnQgdHVydGxlCiBpbXBvcnQgdGltZQogCiBkZW1vX2RpciA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoX19maWxlX18pKQorZGFyd2luID0gc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nCiAKIFNUQVJUVVAgPSAxCiBSRUFEWSA9IDIKQEAgLTIxLDE3MCArMTA4LDIxMyBAQAogCiBtZW51Zm9udCA9ICgiQXJpYWwiLCAxMiwgTk9STUFMKQogYnRuZm9udCA9ICgiQXJpYWwiLCAxMiwgJ2JvbGQnKQotdHh0Zm9udCA9ICgnTHVjaWRhIENvbnNvbGUnLCA4LCAnbm9ybWFsJykKK3R4dGZvbnQgPSBbJ0x1Y2lkYSBDb25zb2xlJywgMTAsICdub3JtYWwnXQorCitNSU5JTVVNX0ZPTlRfU0laRSA9IDYKK01BWElNVU1fRk9OVF9TSVpFID0gMTAwCitmb250X3NpemVzID0gWzgsIDksIDEwLCAxMSwgMTIsIDE0LCAxOCwgMjAsIDIyLCAyNCwgMzBdCiAKIGRlZiBnZXRFeGFtcGxlRW50cmllcygpOgogICAgIHJldHVybiBbZW50cnlbOi0zXSBmb3IgZW50cnkgaW4gb3MubGlzdGRpcihkZW1vX2RpcikgaWYKICAgICAgICAgICAgIGVudHJ5LmVuZHN3aXRoKCIucHkiKSBhbmQgZW50cnlbMF0gIT0gJ18nXQogCi1kZWYgc2hvd0RlbW9IZWxwKCk6Ci0gICAgdmlld19maWxlKGRlbW8ucm9vdCwgIkhlbHAgb24gdHVydGxlRGVtbyIsCi0gICAgICAgICAgICAgIG9zLnBhdGguam9pbihkZW1vX2RpciwgImRlbW9oZWxwLnR4dCIpKQotCi1kZWYgc2hvd0Fib3V0RGVtbygpOgotICAgIHZpZXdfZmlsZShkZW1vLnJvb3QsICJBYm91dCB0dXJ0bGVEZW1vIiwKLSAgICAgICAgICAgICAgb3MucGF0aC5qb2luKGRlbW9fZGlyLCAiYWJvdXRfdHVydGxlZGVtby50eHQiKSkKLQotZGVmIHNob3dBYm91dFR1cnRsZSgpOgotICAgIHZpZXdfZmlsZShkZW1vLnJvb3QsICJBYm91dCB0aGUgbmV3IHR1cnRsZSBtb2R1bGUuIiwKLSAgICAgICAgICAgICAgb3MucGF0aC5qb2luKGRlbW9fZGlyLCAiYWJvdXRfdHVydGxlLnR4dCIpKQoraGVscF9lbnRyaWVzID0gKCAgIyAoaGVscF9sYWJlbCwgIGhlbHBfZG9jKQorICAgICgnVHVydGxlZGVtbyBoZWxwJywgX19kb2NfXyksCisgICAgKCdBYm91dCB0dXJ0bGVkZW1vJywgYWJvdXRfdHVydGxlZGVtbyksCisgICAgKCdBYm91dCB0dXJ0bGUgbW9kdWxlJywgdHVydGxlLl9fZG9jX18pLAorICAgICkKIAogY2xhc3MgRGVtb1dpbmRvdyhvYmplY3QpOgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVuYW1lPU5vbmUpOiAgICMsIHJvb3Q9Tm9uZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVuYW1lPU5vbmUpOgogICAgICAgICBzZWxmLnJvb3QgPSByb290ID0gdHVydGxlLl9yb290ID0gVGsoKQorICAgICAgICByb290LnRpdGxlKCdQeXRob24gdHVydGxlLWdyYXBoaWNzIGV4YW1wbGVzJykKICAgICAgICAgcm9vdC53bV9wcm90b2NvbCgiV01fREVMRVRFX1dJTkRPVyIsIHNlbGYuX2Rlc3Ryb3kpCiAKLSAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMKLSAgICAgICAgc2VsZi5tQmFyID0gRnJhbWUocm9vdCwgcmVsaWVmPVJBSVNFRCwgYm9yZGVyd2lkdGg9MikKLSAgICAgICAgc2VsZi5tQmFyLnBhY2soZmlsbD1YKQorICAgICAgICBpZiBkYXJ3aW46CisgICAgICAgICAgICBpbXBvcnQgc3VicHJvY2VzcworICAgICAgICAgICAgIyBNYWtlIHN1cmUgd2UgYXJlIHRoZSBjdXJyZW50bHkgYWN0aXZhdGVkIE9TIFggYXBwbGljYXRpb24KKyAgICAgICAgICAgICMgc28gdGhhdCBvdXIgbWVudSBiYXIgYXBwZWFycy4KKyAgICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKAorICAgICAgICAgICAgICAgICAgICBbCisgICAgICAgICAgICAgICAgICAgICAgICAnb3Nhc2NyaXB0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICctZScsICd0ZWxsIGFwcGxpY2F0aW9uICJTeXN0ZW0gRXZlbnRzIicsCisgICAgICAgICAgICAgICAgICAgICAgICAnLWUnLCAnc2V0IGZyb250bW9zdCBvZiB0aGUgZmlyc3QgcHJvY2VzcyB3aG9zZSAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndW5peCBpZCBpcyB7fSB0byB0cnVlJy5mb3JtYXQob3MuZ2V0cGlkKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgJy1lJywgJ2VuZCB0ZWxsJywKKyAgICAgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuREVWTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuREVWTlVMTCwpCiAKLSAgICAgICAgc2VsZi5FeGFtcGxlc0J0biA9IHNlbGYubWFrZUxvYWREZW1vTWVudSgpCi0gICAgICAgIHNlbGYuT3B0aW9uc0J0biA9IHNlbGYubWFrZUhlbHBNZW51KCkKLSAgICAgICAgc2VsZi5tQmFyLnRrX21lbnVCYXIoc2VsZi5FeGFtcGxlc0J0biwgc2VsZi5PcHRpb25zQnRuKSAjLCBRdWl0QnRuKQorICAgICAgICByb290LmdyaWRfcm93Y29uZmlndXJlKDAsIHdlaWdodD0xKQorICAgICAgICByb290LmdyaWRfY29sdW1uY29uZmlndXJlKDAsIHdlaWdodD0xKQorICAgICAgICByb290LmdyaWRfY29sdW1uY29uZmlndXJlKDEsIG1pbnNpemU9OTAsIHdlaWdodD0xKQorICAgICAgICByb290LmdyaWRfY29sdW1uY29uZmlndXJlKDIsIG1pbnNpemU9OTAsIHdlaWdodD0xKQorICAgICAgICByb290LmdyaWRfY29sdW1uY29uZmlndXJlKDMsIG1pbnNpemU9OTAsIHdlaWdodD0xKQogCi0gICAgICAgIHJvb3QudGl0bGUoJ1B5dGhvbiB0dXJ0bGUtZ3JhcGhpY3MgZXhhbXBsZXMnKQotICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIwotICAgICAgICBzZWxmLmxlZnRfZnJhbWUgPSBsZWZ0X2ZyYW1lID0gRnJhbWUocm9vdCkKLSAgICAgICAgc2VsZi50ZXh0X2ZyYW1lID0gdGV4dF9mcmFtZSA9IEZyYW1lKGxlZnRfZnJhbWUpCi0gICAgICAgIHNlbGYudmJhciA9IHZiYXIgPVNjcm9sbGJhcih0ZXh0X2ZyYW1lLCBuYW1lPSd2YmFyJykKLSAgICAgICAgc2VsZi50ZXh0ID0gdGV4dCA9IFRleHQodGV4dF9mcmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT0ndGV4dCcsIHBhZHg9NSwgd3JhcD0nbm9uZScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPTQ1KQotICAgICAgICB2YmFyWydjb21tYW5kJ10gPSB0ZXh0Lnl2aWV3Ci0gICAgICAgIHZiYXIucGFjayhzaWRlPUxFRlQsIGZpbGw9WSkKLSAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0gICAgICAgIHNlbGYuaGJhciA9IGhiYXIgPVNjcm9sbGJhcih0ZXh0X2ZyYW1lLCBuYW1lPSdoYmFyJywgb3JpZW50PUhPUklaT05UQUwpCi0gICAgICAgIGhiYXJbJ2NvbW1hbmQnXSA9IHRleHQueHZpZXcKLSAgICAgICAgaGJhci5wYWNrKHNpZGU9Qk9UVE9NLCBmaWxsPVgpCi0gICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIwotICAgICAgICB0ZXh0Wyd5c2Nyb2xsY29tbWFuZCddID0gdmJhci5zZXQKLSAgICAgICAgdGV4dC5jb25maWcoZm9udD10eHRmb250KQotICAgICAgICB0ZXh0LmNvbmZpZyh4c2Nyb2xsY29tbWFuZD1oYmFyLnNldCkKLSAgICAgICAgdGV4dC5wYWNrKHNpZGU9TEVGVCwgZmlsbD1ZLCBleHBhbmQ9MSkKLSAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0gICAgICAgIHNlbGYub3V0cHV0X2xibCA9IExhYmVsKGxlZnRfZnJhbWUsIGhlaWdodD0gMSx0ZXh0PSIgLS0tICIsIGJnID0gIiNkZGYiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250ID0gKCJBcmlhbCIsIDE2LCAnbm9ybWFsJykpCi0gICAgICAgIHNlbGYub3V0cHV0X2xibC5wYWNrKHNpZGU9Qk9UVE9NLCBleHBhbmQ9MCwgZmlsbD1YKQotICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSAgICAgICAgdGV4dF9mcmFtZS5wYWNrKHNpZGU9TEVGVCwgZmlsbD1CT1RILCBleHBhbmQ9MCkKLSAgICAgICAgbGVmdF9mcmFtZS5wYWNrKHNpZGU9TEVGVCwgZmlsbD1CT1RILCBleHBhbmQ9MCkKLSAgICAgICAgc2VsZi5ncmFwaF9mcmFtZSA9IGdfZnJhbWUgPSBGcmFtZShyb290KQorICAgICAgICBzZWxmLm1CYXIgPSBNZW51KHJvb3QsIHJlbGllZj1SQUlTRUQsIGJvcmRlcndpZHRoPTIpCisgICAgICAgIHNlbGYubUJhci5hZGRfY2FzY2FkZShtZW51PXNlbGYubWFrZUxvYWREZW1vTWVudShzZWxmLm1CYXIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9J0V4YW1wbGVzJywgdW5kZXJsaW5lPTApCisgICAgICAgIHNlbGYubUJhci5hZGRfY2FzY2FkZShtZW51PXNlbGYubWFrZUZvbnRNZW51KHNlbGYubUJhciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbD0nRm9udHNpemUnLCB1bmRlcmxpbmU9MCkKKyAgICAgICAgc2VsZi5tQmFyLmFkZF9jYXNjYWRlKG1lbnU9c2VsZi5tYWtlSGVscE1lbnUoc2VsZi5tQmFyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPSdIZWxwJywgdW5kZXJsaW5lPTApCisgICAgICAgIHJvb3RbJ21lbnUnXSA9IHNlbGYubUJhcgogCi0gICAgICAgIHR1cnRsZS5fU2NyZWVuLl9yb290ID0gZ19mcmFtZQotICAgICAgICB0dXJ0bGUuX1NjcmVlbi5fY2FudmFzID0gdHVydGxlLlNjcm9sbGVkQ2FudmFzKGdfZnJhbWUsIDgwMCwgNjAwLCAxMDAwLCA4MDApCi0gICAgICAgICN4dHVydGxlLlNjcmVlbi5fY2FudmFzLnBhY2soZXhwYW5kPTEsIGZpbGw9ImJvdGgiKQotICAgICAgICBzZWxmLnNjcmVlbiA9IF9zXyA9IHR1cnRsZS5TY3JlZW4oKQotIyMjIyMKLSAgICAgICAgdHVydGxlLlR1cnRsZVNjcmVlbi5fX2luaXRfXyhfc18sIF9zXy5fY2FudmFzKQotIyMjIyMKLSAgICAgICAgc2VsZi5zY2FudmFzID0gX3NfLl9jYW52YXMKLSAgICAgICAgI3h0dXJ0bGUuUmF3VHVydGxlLmNhbnZhc2VzID0gW3NlbGYuc2NhbnZhc10KLSAgICAgICAgdHVydGxlLlJhd1R1cnRsZS5zY3JlZW5zID0gW19zX10KKyAgICAgICAgcGFuZSA9IFBhbmVkV2luZG93KG9yaWVudD1IT1JJWk9OVEFMLCBzYXNod2lkdGg9NSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhc2hyZWxpZWY9U09MSUQsIGJnPScjZGRkJykKKyAgICAgICAgcGFuZS5hZGQoc2VsZi5tYWtlVGV4dEZyYW1lKHBhbmUpKQorICAgICAgICBwYW5lLmFkZChzZWxmLm1ha2VHcmFwaEZyYW1lKHBhbmUpKQorICAgICAgICBwYW5lLmdyaWQocm93PTAsIGNvbHVtbnNwYW49NCwgc3RpY2t5PSduZXdzJykKIAotICAgICAgICBzZWxmLnNjYW52YXMucGFjayhzaWRlPVRPUCwgZmlsbD1CT1RILCBleHBhbmQ9MSkKKyAgICAgICAgc2VsZi5vdXRwdXRfbGJsID0gTGFiZWwocm9vdCwgaGVpZ2h0PSAxLCB0ZXh0PSIgLS0tICIsIGJnPSIjZGRmIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udD0oIkFyaWFsIiwgMTYsICdub3JtYWwnKSwgYm9yZGVyd2lkdGg9MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsaWVmPVJJREdFKQorICAgICAgICBzZWxmLnN0YXJ0X2J0biA9IEJ1dHRvbihyb290LCB0ZXh0PSIgU1RBUlQgIiwgZm9udD1idG5mb250LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZz0id2hpdGUiLCBkaXNhYmxlZGZvcmVncm91bmQgPSAiI2ZlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ9c2VsZi5zdGFydERlbW8pCisgICAgICAgIHNlbGYuc3RvcF9idG4gPSBCdXR0b24ocm9vdCwgdGV4dD0iIFNUT1AgIiwgZm9udD1idG5mb250LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZnPSJ3aGl0ZSIsIGRpc2FibGVkZm9yZWdyb3VuZCA9ICIjZmVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kPXNlbGYuc3RvcEl0KQorICAgICAgICBzZWxmLmNsZWFyX2J0biA9IEJ1dHRvbihyb290LCB0ZXh0PSIgQ0xFQVIgIiwgZm9udD1idG5mb250LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZz0id2hpdGUiLCBkaXNhYmxlZGZvcmVncm91bmQ9IiNmZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kID0gc2VsZi5jbGVhckNhbnZhcykKKyAgICAgICAgc2VsZi5vdXRwdXRfbGJsLmdyaWQocm93PTEsIGNvbHVtbj0wLCBzdGlja3k9J25ld3MnLCBwYWR4PSgwLDUpKQorICAgICAgICBzZWxmLnN0YXJ0X2J0bi5ncmlkKHJvdz0xLCBjb2x1bW49MSwgc3RpY2t5PSdldycpCisgICAgICAgIHNlbGYuc3RvcF9idG4uZ3JpZChyb3c9MSwgY29sdW1uPTIsIHN0aWNreT0nZXcnKQorICAgICAgICBzZWxmLmNsZWFyX2J0bi5ncmlkKHJvdz0xLCBjb2x1bW49Mywgc3RpY2t5PSdldycpCiAKLSAgICAgICAgc2VsZi5idG5fZnJhbWUgPSBidG5fZnJhbWUgPSBGcmFtZShnX2ZyYW1lLCBoZWlnaHQ9MTAwKQotICAgICAgICBzZWxmLnN0YXJ0X2J0biA9IEJ1dHRvbihidG5fZnJhbWUsIHRleHQ9IiBTVEFSVCAiLCBmb250PWJ0bmZvbnQsIGZnID0gIndoaXRlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWRmb3JlZ3JvdW5kID0gIiNmZWQiLCBjb21tYW5kPXNlbGYuc3RhcnREZW1vKQotICAgICAgICBzZWxmLnN0YXJ0X2J0bi5wYWNrKHNpZGU9TEVGVCwgZmlsbD1YLCBleHBhbmQ9MSkKLSAgICAgICAgc2VsZi5zdG9wX2J0biA9IEJ1dHRvbihidG5fZnJhbWUsIHRleHQ9IiBTVE9QICIsICBmb250PWJ0bmZvbnQsIGZnID0gIndoaXRlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWRmb3JlZ3JvdW5kID0gIiNmZWQiLCBjb21tYW5kID0gc2VsZi5zdG9wSXQpCi0gICAgICAgIHNlbGYuc3RvcF9idG4ucGFjayhzaWRlPUxFRlQsIGZpbGw9WCwgZXhwYW5kPTEpCi0gICAgICAgIHNlbGYuY2xlYXJfYnRuID0gQnV0dG9uKGJ0bl9mcmFtZSwgdGV4dD0iIENMRUFSICIsICBmb250PWJ0bmZvbnQsIGZnID0gIndoaXRlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWRmb3JlZ3JvdW5kID0gIiNmZWQiLCBjb21tYW5kID0gc2VsZi5jbGVhckNhbnZhcykKLSAgICAgICAgc2VsZi5jbGVhcl9idG4ucGFjayhzaWRlPUxFRlQsIGZpbGw9WCwgZXhwYW5kPTEpCi0KLSAgICAgICAgc2VsZi5idG5fZnJhbWUucGFjayhzaWRlPVRPUCwgZmlsbD1CT1RILCBleHBhbmQ9MCkKLSAgICAgICAgc2VsZi5ncmFwaF9mcmFtZS5wYWNrKHNpZGU9VE9QLCBmaWxsPUJPVEgsIGV4cGFuZD0xKQotCi0gICAgICAgIFBlcmNvbGF0b3IodGV4dCkuaW5zZXJ0ZmlsdGVyKENvbG9yRGVsZWdhdG9yKCkpCisgICAgICAgIFBlcmNvbGF0b3Ioc2VsZi50ZXh0KS5pbnNlcnRmaWx0ZXIoQ29sb3JEZWxlZ2F0b3IoKSkKICAgICAgICAgc2VsZi5kaXJ0eSA9IEZhbHNlCiAgICAgICAgIHNlbGYuZXhpdGZsYWcgPSBGYWxzZQogICAgICAgICBpZiBmaWxlbmFtZToKICAgICAgICAgICAgIHNlbGYubG9hZGZpbGUoZmlsZW5hbWUpCi0gICAgICAgIHNlbGYuY29uZmlnR1VJKE5PUk1BTCwgRElTQUJMRUQsIERJU0FCTEVELCBESVNBQkxFRCwKKyAgICAgICAgc2VsZi5jb25maWdHVUkoRElTQUJMRUQsIERJU0FCTEVELCBESVNBQkxFRCwKICAgICAgICAgICAgICAgICAgICAgICAgIkNob29zZSBleGFtcGxlIGZyb20gbWVudSIsICJibGFjayIpCiAgICAgICAgIHNlbGYuc3RhdGUgPSBTVEFSVFVQCiAKLSAgICBkZWYgX2Rlc3Ryb3koc2VsZik6Ci0gICAgICAgIHNlbGYucm9vdC5kZXN0cm95KCkKLSAgICAgICAgc3lzLmV4aXQoKQogCi0gICAgZGVmIGNvbmZpZ0dVSShzZWxmLCBtZW51LCBzdGFydCwgc3RvcCwgY2xlYXIsIHR4dD0iIiwgY29sb3I9ImJsdWUiKToKLSAgICAgICAgc2VsZi5FeGFtcGxlc0J0bi5jb25maWcoc3RhdGU9bWVudSkKKyAgICBkZWYgb25SZXNpemUoc2VsZiwgZXZlbnQpOgorICAgICAgICBjd2lkdGggPSBzZWxmLl9jYW52YXMud2luZm9fd2lkdGgoKQorICAgICAgICBjaGVpZ2h0ID0gc2VsZi5fY2FudmFzLndpbmZvX2hlaWdodCgpCisgICAgICAgIHNlbGYuX2NhbnZhcy54dmlld19tb3ZldG8oMC41KihzZWxmLmNhbnZ3aWR0aC1jd2lkdGgpL3NlbGYuY2FudndpZHRoKQorICAgICAgICBzZWxmLl9jYW52YXMueXZpZXdfbW92ZXRvKDAuNSooc2VsZi5jYW52aGVpZ2h0LWNoZWlnaHQpL3NlbGYuY2FudmhlaWdodCkKIAotICAgICAgICBzZWxmLnN0YXJ0X2J0bi5jb25maWcoc3RhdGU9c3RhcnQpCi0gICAgICAgIGlmIHN0YXJ0ID09IE5PUk1BTDoKLSAgICAgICAgICAgIHNlbGYuc3RhcnRfYnRuLmNvbmZpZyhiZz0iI2QwMCIpCisgICAgZGVmIG1ha2VUZXh0RnJhbWUoc2VsZiwgcm9vdCk6CisgICAgICAgIHNlbGYudGV4dF9mcmFtZSA9IHRleHRfZnJhbWUgPSBGcmFtZShyb290KQorICAgICAgICBzZWxmLnRleHQgPSB0ZXh0ID0gVGV4dCh0ZXh0X2ZyYW1lLCBuYW1lPSd0ZXh0JywgcGFkeD01LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cmFwPSdub25lJywgd2lkdGg9NDUpCisKKyAgICAgICAgc2VsZi52YmFyID0gdmJhciA9IFNjcm9sbGJhcih0ZXh0X2ZyYW1lLCBuYW1lPSd2YmFyJykKKyAgICAgICAgdmJhclsnY29tbWFuZCddID0gdGV4dC55dmlldworICAgICAgICB2YmFyLnBhY2soc2lkZT1MRUZULCBmaWxsPVkpCisgICAgICAgIHNlbGYuaGJhciA9IGhiYXIgPSBTY3JvbGxiYXIodGV4dF9mcmFtZSwgbmFtZT0naGJhcicsIG9yaWVudD1IT1JJWk9OVEFMKQorICAgICAgICBoYmFyWydjb21tYW5kJ10gPSB0ZXh0Lnh2aWV3CisgICAgICAgIGhiYXIucGFjayhzaWRlPUJPVFRPTSwgZmlsbD1YKQorICAgICAgICB0ZXh0Wyd5c2Nyb2xsY29tbWFuZCddID0gdmJhci5zZXQKKyAgICAgICAgdGV4dFsneHNjcm9sbGNvbW1hbmQnXSA9IGhiYXIuc2V0CisKKyAgICAgICAgdGV4dFsnZm9udCddID0gdHVwbGUodHh0Zm9udCkKKyAgICAgICAgc2hvcnRjdXQgPSAnQ29tbWFuZCcgaWYgZGFyd2luIGVsc2UgJ0NvbnRyb2wnCisgICAgICAgIHRleHQuYmluZF9hbGwoJzwlcy1taW51cz4nICUgc2hvcnRjdXQsIHNlbGYuZGVjcmVhc2Vfc2l6ZSkKKyAgICAgICAgdGV4dC5iaW5kX2FsbCgnPCVzLXVuZGVyc2NvcmU+JyAlIHNob3J0Y3V0LCBzZWxmLmRlY3JlYXNlX3NpemUpCisgICAgICAgIHRleHQuYmluZF9hbGwoJzwlcy1lcXVhbD4nICUgc2hvcnRjdXQsIHNlbGYuaW5jcmVhc2Vfc2l6ZSkKKyAgICAgICAgdGV4dC5iaW5kX2FsbCgnPCVzLXBsdXM+JyAlIHNob3J0Y3V0LCBzZWxmLmluY3JlYXNlX3NpemUpCisgICAgICAgIHRleHQuYmluZCgnPENvbnRyb2wtTW91c2VXaGVlbD4nLCBzZWxmLnVwZGF0ZV9tb3VzZXdoZWVsKQorICAgICAgICB0ZXh0LmJpbmQoJzxDb250cm9sLUJ1dHRvbi00PicsIHNlbGYuaW5jcmVhc2Vfc2l6ZSkKKyAgICAgICAgdGV4dC5iaW5kKCc8Q29udHJvbC1CdXR0b24tNT4nLCBzZWxmLmRlY3JlYXNlX3NpemUpCisKKyAgICAgICAgdGV4dC5wYWNrKHNpZGU9TEVGVCwgZmlsbD1CT1RILCBleHBhbmQ9MSkKKyAgICAgICAgcmV0dXJuIHRleHRfZnJhbWUKKworICAgIGRlZiBtYWtlR3JhcGhGcmFtZShzZWxmLCByb290KToKKyAgICAgICAgdHVydGxlLl9TY3JlZW4uX3Jvb3QgPSByb290CisgICAgICAgIHNlbGYuY2FudndpZHRoID0gMTAwMAorICAgICAgICBzZWxmLmNhbnZoZWlnaHQgPSA4MDAKKyAgICAgICAgdHVydGxlLl9TY3JlZW4uX2NhbnZhcyA9IHNlbGYuX2NhbnZhcyA9IGNhbnZhcyA9IHR1cnRsZS5TY3JvbGxlZENhbnZhcygKKyAgICAgICAgICAgICAgICByb290LCA4MDAsIDYwMCwgc2VsZi5jYW52d2lkdGgsIHNlbGYuY2FudmhlaWdodCkKKyAgICAgICAgY2FudmFzLmFkanVzdFNjcm9sbHMoKQorICAgICAgICBjYW52YXMuX3Jvb3R3aW5kb3cuYmluZCgnPENvbmZpZ3VyZT4nLCBzZWxmLm9uUmVzaXplKQorICAgICAgICBjYW52YXMuX2NhbnZhc1snYm9yZGVyd2lkdGgnXSA9IDAKKworICAgICAgICBzZWxmLnNjcmVlbiA9IF9zXyA9IHR1cnRsZS5TY3JlZW4oKQorICAgICAgICB0dXJ0bGUuVHVydGxlU2NyZWVuLl9faW5pdF9fKF9zXywgX3NfLl9jYW52YXMpCisgICAgICAgIHNlbGYuc2NhbnZhcyA9IF9zXy5fY2FudmFzCisgICAgICAgIHR1cnRsZS5SYXdUdXJ0bGUuc2NyZWVucyA9IFtfc19dCisgICAgICAgIHJldHVybiBjYW52YXMKKworICAgIGRlZiBzZXRfdHh0c2l6ZShzZWxmLCBzaXplKToKKyAgICAgICAgdHh0Zm9udFsxXSA9IHNpemUKKyAgICAgICAgc2VsZi50ZXh0Wydmb250J10gPSB0dXBsZSh0eHRmb250KQorICAgICAgICBzZWxmLm91dHB1dF9sYmxbJ3RleHQnXSA9ICdGb250IHNpemUgJWQnICUgc2l6ZQorCisgICAgZGVmIGRlY3JlYXNlX3NpemUoc2VsZiwgZHVtbXk9Tm9uZSk6CisgICAgICAgIHNlbGYuc2V0X3R4dHNpemUobWF4KHR4dGZvbnRbMV0gLSAxLCBNSU5JTVVNX0ZPTlRfU0laRSkpCisgICAgICAgIHJldHVybiAnYnJlYWsnCisKKyAgICBkZWYgaW5jcmVhc2Vfc2l6ZShzZWxmLCBkdW1teT1Ob25lKToKKyAgICAgICAgc2VsZi5zZXRfdHh0c2l6ZShtaW4odHh0Zm9udFsxXSArIDEsIE1BWElNVU1fRk9OVF9TSVpFKSkKKyAgICAgICAgcmV0dXJuICdicmVhaycKKworICAgIGRlZiB1cGRhdGVfbW91c2V3aGVlbChzZWxmLCBldmVudCk6CisgICAgICAgICMgRm9yIHdoZWVsIHVwLCBldmVudC5kZWx0ZSA9IDEyMCBvbiBXaW5kb3dzLCAtMSBvbiBkYXJ3aW4uCisgICAgICAgICMgWC0xMSBzZW5kcyBDb250cm9sLUJ1dHRvbi00IGV2ZW50IGluc3RlYWQuCisgICAgICAgIGlmIChldmVudC5kZWx0YSA8IDApID09IChub3QgZGFyd2luKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmRlY3JlYXNlX3NpemUoKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5zdGFydF9idG4uY29uZmlnKGJnPSIjZmNhIikKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmluY3JlYXNlX3NpemUoKQogCi0gICAgICAgIHNlbGYuc3RvcF9idG4uY29uZmlnKHN0YXRlPXN0b3ApCi0gICAgICAgIGlmIHN0b3AgPT0gTk9STUFMOgotICAgICAgICAgICAgc2VsZi5zdG9wX2J0bi5jb25maWcoYmc9IiNkMDAiKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5zdG9wX2J0bi5jb25maWcoYmc9IiNmY2EiKQotICAgICAgICBzZWxmLmNsZWFyX2J0bi5jb25maWcoc3RhdGU9Y2xlYXIpCi0KLSAgICAgICAgc2VsZi5jbGVhcl9idG4uY29uZmlnKHN0YXRlPWNsZWFyKQotICAgICAgICBpZiBjbGVhciA9PSBOT1JNQUw6Ci0gICAgICAgICAgICBzZWxmLmNsZWFyX2J0bi5jb25maWcoYmc9IiNkMDAiKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5jbGVhcl9idG4uY29uZmlnKGJnPSIjZmNhIikKLQorICAgIGRlZiBjb25maWdHVUkoc2VsZiwgc3RhcnQsIHN0b3AsIGNsZWFyLCB0eHQ9IiIsIGNvbG9yPSJibHVlIik6CisgICAgICAgIHNlbGYuc3RhcnRfYnRuLmNvbmZpZyhzdGF0ZT1zdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJnPSIjZDAwIiBpZiBzdGFydCA9PSBOT1JNQUwgZWxzZSAiI2ZjYSIpCisgICAgICAgIHNlbGYuc3RvcF9idG4uY29uZmlnKHN0YXRlPXN0b3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJnPSIjZDAwIiBpZiBzdG9wID09IE5PUk1BTCBlbHNlICIjZmNhIikKKyAgICAgICAgc2VsZi5jbGVhcl9idG4uY29uZmlnKHN0YXRlPWNsZWFyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmc9IiNkMDAiIGlmIGNsZWFyID09IE5PUk1BTCBlbHNlIiNmY2EiKQogICAgICAgICBzZWxmLm91dHB1dF9sYmwuY29uZmlnKHRleHQ9dHh0LCBmZz1jb2xvcikKIAotCi0gICAgZGVmIG1ha2VMb2FkRGVtb01lbnUoc2VsZik6Ci0gICAgICAgIENtZEJ0biA9IE1lbnVidXR0b24oc2VsZi5tQmFyLCB0ZXh0PSdFeGFtcGxlcycsIHVuZGVybGluZT0wLCBmb250PW1lbnVmb250KQotICAgICAgICBDbWRCdG4ucGFjayhzaWRlPUxFRlQsIHBhZHg9IjJtIikKLSAgICAgICAgQ21kQnRuLm1lbnUgPSBNZW51KENtZEJ0bikKKyAgICBkZWYgbWFrZUxvYWREZW1vTWVudShzZWxmLCBtYXN0ZXIpOgorICAgICAgICBtZW51ID0gTWVudShtYXN0ZXIpCiAKICAgICAgICAgZm9yIGVudHJ5IGluIGdldEV4YW1wbGVFbnRyaWVzKCk6Ci0gICAgICAgICAgICBkZWYgbG9hZGV4YW1wbGUoeCk6Ci0gICAgICAgICAgICAgICAgZGVmIGVtaXQoKToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2FkZmlsZSh4KQotICAgICAgICAgICAgICAgIHJldHVybiBlbWl0Ci0gICAgICAgICAgICBDbWRCdG4ubWVudS5hZGRfY29tbWFuZChsYWJlbD1lbnRyeSwgdW5kZXJsaW5lPTAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250PW1lbnVmb250LCBjb21tYW5kPWxvYWRleGFtcGxlKGVudHJ5KSkKKyAgICAgICAgICAgIGRlZiBsb2FkKGVudHJ5PWVudHJ5KToKKyAgICAgICAgICAgICAgICBzZWxmLmxvYWRmaWxlKGVudHJ5KQorICAgICAgICAgICAgbWVudS5hZGRfY29tbWFuZChsYWJlbD1lbnRyeSwgdW5kZXJsaW5lPTAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQ9bWVudWZvbnQsIGNvbW1hbmQ9bG9hZCkKKyAgICAgICAgcmV0dXJuIG1lbnUKIAotICAgICAgICBDbWRCdG5bJ21lbnUnXSA9IENtZEJ0bi5tZW51Ci0gICAgICAgIHJldHVybiBDbWRCdG4KKyAgICBkZWYgbWFrZUZvbnRNZW51KHNlbGYsIG1hc3Rlcik6CisgICAgICAgIG1lbnUgPSBNZW51KG1hc3RlcikKKyAgICAgICAgbWVudS5hZGRfY29tbWFuZChsYWJlbD0iRGVjcmVhc2UgKEMtJy0nKSIsIGNvbW1hbmQ9c2VsZi5kZWNyZWFzZV9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQ9bWVudWZvbnQpCisgICAgICAgIG1lbnUuYWRkX2NvbW1hbmQobGFiZWw9IkluY3JlYXNlIChDLScrJykiLCBjb21tYW5kPXNlbGYuaW5jcmVhc2Vfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmb250PW1lbnVmb250KQorICAgICAgICBtZW51LmFkZF9zZXBhcmF0b3IoKQogCi0gICAgZGVmIG1ha2VIZWxwTWVudShzZWxmKToKLSAgICAgICAgQ21kQnRuID0gTWVudWJ1dHRvbihzZWxmLm1CYXIsIHRleHQ9J0hlbHAnLCB1bmRlcmxpbmU9MCwgZm9udD1tZW51Zm9udCkKLSAgICAgICAgQ21kQnRuLnBhY2soc2lkZT1MRUZULCBwYWR4PScybScpCi0gICAgICAgIENtZEJ0bi5tZW51ID0gTWVudShDbWRCdG4pCisgICAgICAgIGZvciBzaXplIGluIGZvbnRfc2l6ZXM6CisgICAgICAgICAgICBkZWYgcmVzaXplKHNpemU9c2l6ZSk6CisgICAgICAgICAgICAgICAgc2VsZi5zZXRfdHh0c2l6ZShzaXplKQorICAgICAgICAgICAgbWVudS5hZGRfY29tbWFuZChsYWJlbD1zdHIoc2l6ZSksIHVuZGVybGluZT0wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250PW1lbnVmb250LCBjb21tYW5kPXJlc2l6ZSkKKyAgICAgICAgcmV0dXJuIG1lbnUKIAotICAgICAgICBDbWRCdG4ubWVudS5hZGRfY29tbWFuZChsYWJlbD0nQWJvdXQgdHVydGxlLnB5JywgZm9udD1tZW51Zm9udCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZD1zaG93QWJvdXRUdXJ0bGUpCi0gICAgICAgIENtZEJ0bi5tZW51LmFkZF9jb21tYW5kKGxhYmVsPSd0dXJ0bGVEZW1vIC0gSGVscCcsIGZvbnQ9bWVudWZvbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ9c2hvd0RlbW9IZWxwKQotICAgICAgICBDbWRCdG4ubWVudS5hZGRfY29tbWFuZChsYWJlbD0nQWJvdXQgdHVydGxlRGVtbycsIGZvbnQ9bWVudWZvbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ9c2hvd0Fib3V0RGVtbykKKyAgICBkZWYgbWFrZUhlbHBNZW51KHNlbGYsIG1hc3Rlcik6CisgICAgICAgIG1lbnUgPSBNZW51KG1hc3RlcikKIAotICAgICAgICBDbWRCdG5bJ21lbnUnXSA9IENtZEJ0bi5tZW51Ci0gICAgICAgIHJldHVybiBDbWRCdG4KKyAgICAgICAgZm9yIGhlbHBfbGFiZWwsIGhlbHBfZmlsZSBpbiBoZWxwX2VudHJpZXM6CisgICAgICAgICAgICBkZWYgc2hvdyhoZWxwX2xhYmVsPWhlbHBfbGFiZWwsIGhlbHBfZmlsZT1oZWxwX2ZpbGUpOgorICAgICAgICAgICAgICAgIHZpZXdfdGV4dChzZWxmLnJvb3QsIGhlbHBfbGFiZWwsIGhlbHBfZmlsZSkKKyAgICAgICAgICAgIG1lbnUuYWRkX2NvbW1hbmQobGFiZWw9aGVscF9sYWJlbCwgZm9udD1tZW51Zm9udCwgY29tbWFuZD1zaG93KQorICAgICAgICByZXR1cm4gbWVudQogCiAgICAgZGVmIHJlZnJlc2hDYW52YXMoc2VsZik6Ci0gICAgICAgIGlmIG5vdCBzZWxmLmRpcnR5OiByZXR1cm4KLSAgICAgICAgc2VsZi5zY3JlZW4uY2xlYXIoKQotICAgICAgICAjc2VsZi5zY3JlZW4ubW9kZSgic3RhbmRhcmQiKQotICAgICAgICBzZWxmLmRpcnR5PUZhbHNlCisgICAgICAgIGlmIHNlbGYuZGlydHk6CisgICAgICAgICAgICBzZWxmLnNjcmVlbi5jbGVhcigpCisgICAgICAgICAgICBzZWxmLmRpcnR5PUZhbHNlCiAKICAgICBkZWYgbG9hZGZpbGUoc2VsZiwgZmlsZW5hbWUpOgotICAgICAgICBzZWxmLnJlZnJlc2hDYW52YXMoKQorICAgICAgICBzZWxmLmNsZWFyQ2FudmFzKCkKKyAgICAgICAgdHVydGxlLlR1cnRsZVNjcmVlbi5fUlVOTklORyA9IEZhbHNlCiAgICAgICAgIG1vZG5hbWUgPSAndHVydGxlZGVtby4nICsgZmlsZW5hbWUKICAgICAgICAgX19pbXBvcnRfXyhtb2RuYW1lKQogICAgICAgICBzZWxmLm1vZHVsZSA9IHN5cy5tb2R1bGVzW21vZG5hbWVdCkBAIC0xOTMsOCArMzIzLDcgQEAKICAgICAgICAgc2VsZi50ZXh0LmRlbGV0ZSgiMS4wIiwgImVuZCIpCiAgICAgICAgIHNlbGYudGV4dC5pbnNlcnQoIjEuMCIsIGNoYXJzKQogICAgICAgICBzZWxmLnJvb3QudGl0bGUoZmlsZW5hbWUgKyAiIC0gYSBQeXRob24gdHVydGxlIGdyYXBoaWNzIGV4YW1wbGUiKQotICAgICAgICByZWxvYWQoc2VsZi5tb2R1bGUpCi0gICAgICAgIHNlbGYuY29uZmlnR1VJKE5PUk1BTCwgTk9STUFMLCBESVNBQkxFRCwgRElTQUJMRUQsCisgICAgICAgIHNlbGYuY29uZmlnR1VJKE5PUk1BTCwgRElTQUJMRUQsIERJU0FCTEVELAogICAgICAgICAgICAgICAgICAgICAgICAiUHJlc3Mgc3RhcnQgYnV0dG9uIiwgInJlZCIpCiAgICAgICAgIHNlbGYuc3RhdGUgPSBSRUFEWQogCkBAIC0yMDIsNyArMzMxLDcgQEAKICAgICAgICAgc2VsZi5yZWZyZXNoQ2FudmFzKCkKICAgICAgICAgc2VsZi5kaXJ0eSA9IFRydWUKICAgICAgICAgdHVydGxlLlR1cnRsZVNjcmVlbi5fUlVOTklORyA9IFRydWUKLSAgICAgICAgc2VsZi5jb25maWdHVUkoRElTQUJMRUQsIERJU0FCTEVELCBOT1JNQUwsIERJU0FCTEVELAorICAgICAgICBzZWxmLmNvbmZpZ0dVSShESVNBQkxFRCwgTk9STUFMLCBESVNBQkxFRCwKICAgICAgICAgICAgICAgICAgICAgICAgImRlbW8gcnVubmluZy4uLiIsICJibGFjayIpCiAgICAgICAgIHNlbGYuc2NyZWVuLmNsZWFyKCkKICAgICAgICAgc2VsZi5zY3JlZW4ubW9kZSgic3RhbmRhcmQiKQpAQCAtMjE1LDUyICszNDQsNDEgQEAKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgc2VsZi5zdGF0ZSA9IERPTkUKICAgICAgICAgZXhjZXB0IHR1cnRsZS5UZXJtaW5hdG9yOgorICAgICAgICAgICAgaWYgc2VsZi5yb290IGlzIE5vbmU6CisgICAgICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgICAgICBzZWxmLnN0YXRlID0gRE9ORQogICAgICAgICAgICAgcmVzdWx0ID0gInN0b3BwZWQhIgogICAgICAgICBpZiBzZWxmLnN0YXRlID09IERPTkU6Ci0gICAgICAgICAgICBzZWxmLmNvbmZpZ0dVSShOT1JNQUwsIE5PUk1BTCwgRElTQUJMRUQsIE5PUk1BTCwKKyAgICAgICAgICAgIHNlbGYuY29uZmlnR1VJKE5PUk1BTCwgRElTQUJMRUQsIE5PUk1BTCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCkKICAgICAgICAgZWxpZiBzZWxmLnN0YXRlID09IEVWRU5URFJJVkVOOgogICAgICAgICAgICAgc2VsZi5leGl0ZmxhZyA9IFRydWUKLSAgICAgICAgICAgIHNlbGYuY29uZmlnR1VJKERJU0FCTEVELCBESVNBQkxFRCwgTk9STUFMLCBESVNBQkxFRCwKKyAgICAgICAgICAgIHNlbGYuY29uZmlnR1VJKERJU0FCTEVELCBOT1JNQUwsIERJU0FCTEVELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgInVzZSBtb3VzZS9rZXlzIG9yIFNUT1AiLCAicmVkIikKIAogICAgIGRlZiBjbGVhckNhbnZhcyhzZWxmKToKICAgICAgICAgc2VsZi5yZWZyZXNoQ2FudmFzKCkKICAgICAgICAgc2VsZi5zY3JlZW4uX2RlbGV0ZSgiYWxsIikKICAgICAgICAgc2VsZi5zY2FudmFzLmNvbmZpZyhjdXJzb3I9IiIpCi0gICAgICAgIHNlbGYuY29uZmlnR1VJKE5PUk1BTCwgTk9STUFMLCBESVNBQkxFRCwgRElTQUJMRUQpCisgICAgICAgIHNlbGYuY29uZmlnR1VJKE5PUk1BTCwgRElTQUJMRUQsIERJU0FCTEVEKQogCiAgICAgZGVmIHN0b3BJdChzZWxmKToKICAgICAgICAgaWYgc2VsZi5leGl0ZmxhZzoKICAgICAgICAgICAgIHNlbGYuY2xlYXJDYW52YXMoKQogICAgICAgICAgICAgc2VsZi5leGl0ZmxhZyA9IEZhbHNlCi0gICAgICAgICAgICBzZWxmLmNvbmZpZ0dVSShOT1JNQUwsIE5PUk1BTCwgRElTQUJMRUQsIERJU0FCTEVELAorICAgICAgICAgICAgc2VsZi5jb25maWdHVUkoTk9STUFMLCBESVNBQkxFRCwgRElTQUJMRUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU1RPUFBFRCEiLCAicmVkIikKLSAgICAgICAgICAgIHR1cnRsZS5UdXJ0bGVTY3JlZW4uX1JVTk5JTkcgPSBGYWxzZQotICAgICAgICAgICAgI3ByaW50ICJzdG9wSVQ6IGV4aXRmbGFnID0gVHJ1ZSIKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHR1cnRsZS5UdXJ0bGVTY3JlZW4uX1JVTk5JTkcgPSBGYWxzZQotICAgICAgICAgICAgI3ByaW50ICJzdG9wSXQ6IGV4aXRmbGFnID0gRmFsc2UiCisgICAgICAgIHR1cnRsZS5UdXJ0bGVTY3JlZW4uX1JVTk5JTkcgPSBGYWxzZQorCisgICAgZGVmIF9kZXN0cm95KHNlbGYpOgorICAgICAgICB0dXJ0bGUuVHVydGxlU2NyZWVuLl9SVU5OSU5HID0gRmFsc2UKKyAgICAgICAgc2VsZi5yb290LmRlc3Ryb3koKQorICAgICAgICBzZWxmLnJvb3QgPSBOb25lCisKKworZGVmIG1haW4oKToKKyAgICBkZW1vID0gRGVtb1dpbmRvdygpCisgICAgZGVtby5yb290Lm1haW5sb29wKCkKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICBkZW1vID0gRGVtb1dpbmRvdygpCi0gICAgUlVOID0gVHJ1ZQotICAgIHdoaWxlIFJVTjoKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgI3ByaW50KCJFTlRFUklORyBtYWlubG9vcCIpCi0gICAgICAgICAgICBkZW1vLnJvb3QubWFpbmxvb3AoKQotICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICAjcHJpbnQoIkF0dHJpYnV0ZUVycm9yIS0gV0FJVCBBIE1PTUVOVCEiKQotICAgICAgICAgICAgdGltZS5zbGVlcCgwLjMpCi0gICAgICAgICAgICBwcmludCgiR09JTkcgT04gLi4iKQotICAgICAgICAgICAgZGVtby5ja2VhckNhbnZhcygpCi0gICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6Ci0gICAgICAgICAgICBkZW1vLnNjcmVlbi5fZGVsZXRlKCJhbGwiKQotICAgICAgICAgICAgI3ByaW50KCJDUkFTSCEhIS0gV0FJVCBBIE1PTUVOVCEiKQotICAgICAgICAgICAgdGltZS5zbGVlcCgwLjMpCi0gICAgICAgICAgICAjcHJpbnQoIkdPSU5HIE9OIC4uIikKLSAgICAgICAgICAgIGRlbW8uY2xlYXJDYW52YXMoKQotICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICBwcmludCgiQllFISIpCi0gICAgICAgICAgICBSVU4gPSBGYWxzZQorICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3R1cnRsZWRlbW8vYWJvdXRfdHVydGxlLnR4dCBiL0xpYi90dXJ0bGVkZW1vL2Fib3V0X3R1cnRsZS50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwMmM3YjMuLjAwMDAwMDAKLS0tIGEvTGliL3R1cnRsZWRlbW8vYWJvdXRfdHVydGxlLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDc2ICswLDAgQEAKLQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICBBIG5ldyB0dXJ0bGUgbW9kdWxlIGZvciBQeXRob24KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLVR1cnRsZSBncmFwaGljcyBpcyBhIHBvcHVsYXIgd2F5IGZvciBpbnRyb2R1Y2luZyBwcm9ncmFtbWluZyB0bwota2lkcy4gSXQgd2FzIHBhcnQgb2YgdGhlIG9yaWdpbmFsIExvZ28gcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UgZGV2ZWxvcGVkCi1ieSBXYWxseSBGZXVyemlnIGFuZCBTZXltb3VyIFBhcGVydCBpbiAxOTY2LgotCi1JbWFnaW5lIGEgcm9ib3RpYyB0dXJ0bGUgc3RhcnRpbmcgYXQgKDAsIDApIGluIHRoZSB4LXkgcGxhbmUuIEFmdGVyIGFuIGBgaW1wb3J0IHR1cnRsZWBgLCBnaXZlIGl0Ci10aGUgY29tbWFuZCB0dXJ0bGUuZm9yd2FyZCgxNSksIGFuZCBpdCBtb3ZlcyAob24tc2NyZWVuISkgMTUgcGl4ZWxzIGluCi10aGUgZGlyZWN0aW9uIGl0IGlzIGZhY2luZywgZHJhd2luZyBhIGxpbmUgYXMgaXQgbW92ZXMuIEdpdmUgaXQgdGhlCi1jb21tYW5kIHR1cnRsZS5yaWdodCgyNSksIGFuZCBpdCByb3RhdGVzIGluLXBsYWNlIDI1IGRlZ3JlZXMgY2xvY2t3aXNlLgotCi1CeSBjb21iaW5pbmcgdG9nZXRoZXIgdGhlc2UgYW5kIHNpbWlsYXIgY29tbWFuZHMsIGludHJpY2F0ZSBzaGFwZXMgYW5kCi1waWN0dXJlcyBjYW4gZWFzaWx5IGJlIGRyYXduLgotCi0tLS0tLSB0dXJ0bGUucHkKLQotVGhpcyBtb2R1bGUgaXMgYW4gZXh0ZW5kZWQgcmVpbXBsZW1lbnRhdGlvbiBvZiB0dXJ0bGUucHkgZnJvbSB0aGUKLVB5dGhvbiBzdGFuZGFyZCBkaXN0cmlidXRpb24gdXAgdG8gUHl0aG9uIDIuNS4gKFNlZTogaHR0cDpcXHd3dy5weXRob24ub3JnKQotCi1JdCB0cmllcyB0byBrZWVwIHRoZSBtZXJpdHMgb2YgdHVydGxlLnB5IGFuZCB0byBiZSAobmVhcmx5KSAxMDAlCi1jb21wYXRpYmxlIHdpdGggaXQuIFRoaXMgbWVhbnMgaW4gdGhlIGZpcnN0IHBsYWNlIHRvIGVuYWJsZSB0aGUKLWxlYXJuaW5nIHByb2dyYW1tZXIgdG8gdXNlIGFsbCB0aGUgY29tbWFuZHMsIGNsYXNzZXMgYW5kIG1ldGhvZHMKLWludGVyYWN0aXZlbHkgd2hlbiB1c2luZyB0aGUgbW9kdWxlIGZyb20gd2l0aGluIElETEUgcnVuIHdpdGgKLXRoZSAtbiBzd2l0Y2guCi0KLVJvdWdobHkgaXQgaGFzIHRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYWRkZWQ6Ci0KLS0gQmV0dGVyIGFuaW1hdGlvbiBvZiB0aGUgdHVydGxlIG1vdmVtZW50cywgZXNwZWNpYWxseSBvZiB0dXJuaW5nIHRoZQotICAgIHR1cnRsZS4gU28gdGhlIHR1cnRsZXMgY2FuIG1vcmUgZWFzaWx5IGJlIHVzZWQgYXMgYSB2aXN1YWwgZmVlZGJhY2sKLSAgICBpbnN0cnVtZW50IGJ5IHRoZSAoYmVnaW5uaW5nKSBwcm9ncmFtbWVyLgotCi0tIERpZmZlcmVudCB0dXJ0bGUgc2hhcGVzLCBnaWYtaW1hZ2VzIGFzIHR1cnRsZSBzaGFwZXMsIHVzZXIgZGVmaW5lZAotICAgIGFuZCB1c2VyIGNvbnRyb2xsYWJsZSB0dXJ0bGUgc2hhcGVzLCBhbW9uZyB0aGVtIGNvbXBvdW5kCi0gICAgKG11bHRpY29sb3JlZCkgc2hhcGVzLiBUdXJ0bGUgc2hhcGVzIGNhbiBiZSBzdGdyZXRjaGVkIGFuZCB0aWx0ZWQsIHdoaWNoCi0gICAgbWFrZXMgdHVydGxlcyB6dSB2ZXJ5IHZlcnNhdGlsZSBnZW9tZXRyaWNhbCBvYmplY3RzLgotCi0tIEZpbmUgY29udHJvbCBvdmVyIHR1cnRsZSBtb3ZlbWVudCBhbmQgc2NyZWVuIHVwZGF0ZXMgdmlhIGRlbGF5KCksCi0gICAgYW5kIGVuaGFuY2VkIHRyYWNlcigpIGFuZCBzcGVlZCgpIG1ldGhvZHMuCi0KLS0gQWxpYXNlcyBmb3IgdGhlIG1vc3QgY29tbW9ubHkgdXNlZCBjb21tYW5kcywgbGlrZSBmZCBmb3IgZm9yd2FyZCBldGMuLAotICAgIGZvbGxvd2luZyB0aGUgZWFybHkgTG9nbyB0cmFkaXRpb25zLiBUaGlzIHJlZHVjZXMgdGhlIGJvcmluZyB3b3JrIG9mCi0gICAgdHlwaW5nIGxvbmcgc2VxdWVuY2VzIG9mIGNvbW1hbmRzLCB3aGljaCBvZnRlbiBvY2N1ciBpbiBhIG5hdHVyYWwgd2F5Ci0gICAgd2hlbiBraWRzIHRyeSB0byBwcm9ncmFtIGZhbmN5IHBpY3R1cmVzIG9uIHRoZWlyIGZpcnN0IGVuY291bnRlciB3aXRoCi0gICAgdHVydGxlIGdyYXBoY2lzLgotCi0tIFR1cnRsZXMgbm93IGhhdmUgYW4gdW5kbygpLW1ldGhvZCB3aXRoIGNvbmZpZ3VyYWJsZSB1bmRvLWJ1ZmZlci4KLQotLSBTb21lIHNpbXBsZSBjb21tYW5kcy9tZXRob2RzIGZvciBjcmVhdGluZyBldmVudCBkcml2ZW4gcHJvZ3JhbXMKLSAgICAobW91c2UtLCBrZXktLCB0aW1lci1ldmVudHMpLiBFc3BlY2lhbGx5IHVzZWZ1bCBmb3IgcHJvZ3JhbW1pbmcgZ2FtZXMuCi0KLS0gQSBzY3JvbGxhYmxlIENhbnZhcyBjbGFzcy4gVGhlIGRlZmF1bHQgc2Nyb2xsYWJsZSBDYW52YXMgY2FuIGJlCi0gICAgZXh0ZW5kZWQgaW50ZXJhY3RpdmVseSBhcyBuZWVkZWQgd2hpbGUgcGxheWluZyBhcm91bmQgd2l0aCB0aGUgdHVydGxlKHMpLgotCi0tIEEgVHVydGxlU2NyZWVuIGNsYXNzIHdpdGggbWV0aG9kcyBjb250cm9sbGluZyBiYWNrZ3JvdW5kIGNvbG9yIG9yCi0gICAgYmFja2dyb3VuZCBpbWFnZSwgd2luZG93IGFuZCBjYW52YXMgc2l6ZSBhbmQgb3RoZXIgcHJvcGVydGllcyBvZiB0aGUKLSAgICBUdXJ0bGVTY3JlZW4uCi0KLS0gVGhlcmUgaXMgYSBtZXRob2QsIHNldHdvcmxkY29vcmRpbmF0ZXMoKSwgdG8gaW5zdGFsbCBhIHVzZXIgZGVmaW5lZAotICAgIGNvb3JkaW5hdGUtc3lzdGVtIGZvciB0aGUgVHVydGxlU2NyZWVuLgotCi0tIFRoZSBpbXBsZW1lbnRhdGlvbiB1c2VzIGEgMi12ZWN0b3IgY2xhc3MgbmFtZWQgVmVjMkQsIGRlcml2ZWQgZnJvbSB0dXBsZS4KLSAgICBUaGlzIGNsYXNzIGlzIHB1YmxpYywgc28gaXQgY2FuIGJlIGltcG9ydGVkIGJ5IHRoZSBhcHBsaWNhdGlvbiBwcm9ncmFtbWVyLAotICAgIHdoaWNoIG1ha2VzIGNlcnRhaW4gdHlwZXMgb2YgY29tcHV0YXRpb25zIHZlcnkgbmF0dXJhbCBhbmQgY29tcGFjdC4KLQotLSBBcHBlYXJhbmNlIG9mIHRoZSBUdXJ0bGVTY3JlZW4gYW5kIHRoZSBUdXJ0bGVzIGF0IHN0YXJ0dXAvaW1wb3J0IGNhbiBiZQotICAgIGNvbmZpZ3VyZWQgYnkgbWVhbnMgb2YgYSB0dXJ0bGUuY2ZnIGNvbmZpZ3VyYXRpb24gZmlsZS4KLSAgICBUaGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIG1pbWljcyB0aGUgYXBwZWFyYW5jZSBvZiB0aGUgb2xkIHR1cnRsZSBtb2R1bGUuCi0KLS0gSWYgY29uZmlndXJlZCBhcHByb3ByaWF0ZWx5IHRoZSBtb2R1bGUgcmVhZHMgaW4gZG9jc3RyaW5ncyBmcm9tIGEgZG9jc3RyaW5nCi0gICAgZGljdGlvbmFyeSBpbiBzb21lIGRpZmZlcmVudCBsYW5ndWFnZSwgc3VwcGxpZWQgc2VwYXJhdGVseSAgYW5kIHJlcGxhY2VzCi0gICAgdGhlIGVuZ2xpc2ggb25lcyBieSB0aG9zZSByZWFkIGluLiBUaGVyZSBpcyBhIHV0aWxpdHkgZnVuY3Rpb24KLSAgICB3cml0ZV9kb2NzdHJpbmdkaWN0KCkgdG8gd3JpdGUgYSBkaWN0aW9uYXJ5IHdpdGggdGhlIG9yaWdpbmFsIChlbmdsaXNoKQotICAgIGRvY3N0cmluZ3MgdG8gZGlzYywgc28gaXQgY2FuIHNlcnZlIGFzIGEgdGVtcGxhdGUgZm9yIHRyYW5zbGF0aW9ucy4KZGlmZiAtLWdpdCBhL0xpYi90dXJ0bGVkZW1vL2Fib3V0X3R1cnRsZWRlbW8udHh0IGIvTGliL3R1cnRsZWRlbW8vYWJvdXRfdHVydGxlZGVtby50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5MDA5YmQuLjAwMDAwMDAKLS0tIGEvTGliL3R1cnRsZWRlbW8vYWJvdXRfdHVydGxlZGVtby50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi0KLSAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICBBYm91dCB0aGlzIHZpZXdlcgotICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgICBUaW55IGRlbW8gdmlld2VyIHRvIHZpZXcgdHVydGxlIGdyYXBoaWNzIGV4YW1wbGUgc2NyaXB0cy4KLQotICAgIFF1aWNrbHkgYW5kIGRpcnR5bHkgYXNzZW1ibGVkIGJ5IEdyZWdvciBMaW5nbC4KLSAgICBKdW5lLCAyMDA2Ci0KLSAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWU6IHR1cnRsZURlbW8gLSBIZWxwCi0KLSAgICBIYXZlIGZ1biEKZGlmZiAtLWdpdCBhL0xpYi90dXJ0bGVkZW1vL2NoYW9zLnB5IGIvTGliL3R1cnRsZWRlbW8vY2hhb3MucHkKaW5kZXggZDQ2NTZmOC4uNmE0NWQwZCAxMDA2NDQKLS0tIGEvTGliL3R1cnRsZWRlbW8vY2hhb3MucHkKKysrIGIvTGliL3R1cnRsZWRlbW8vY2hhb3MucHkKQEAgLTI5LDggKzI5LDggQEAKICAgICBsaW5lKC0xLCAwLCBOKzEsIDApCiAgICAgbGluZSgwLCAtMC4xLCAwLCAxLjEpCiAKLWRlZiBwbG90KGZ1biwgc3RhcnQsIGNvbG91cik6Ci0gICAgcGVuY29sb3IoY29sb3VyKQorZGVmIHBsb3QoZnVuLCBzdGFydCwgY29sb3IpOgorICAgIHBlbmNvbG9yKGNvbG9yKQogICAgIHggPSBzdGFydAogICAgIGp1bXB0bygwLCB4KQogICAgIHBlbmRvd24oKQpkaWZmIC0tZ2l0IGEvTGliL3R1cnRsZWRlbW8vY2xvY2sucHkgYi9MaWIvdHVydGxlZGVtby9jbG9jay5weQppbmRleCBhMGQxNTdiLi42MmM4ODUxIDEwMDc1NQotLS0gYS9MaWIvdHVydGxlZGVtby9jbG9jay5weQorKysgYi9MaWIvdHVydGxlZGVtby9jbG9jay5weQpAQCAtMTMsOCArMTMsNiBAQAogZnJvbSB0dXJ0bGUgaW1wb3J0ICoKIGZyb20gZGF0ZXRpbWUgaW1wb3J0IGRhdGV0aW1lCiAKLW1vZGUoImxvZ28iKQotCiBkZWYganVtcChkaXN0YW56LCB3aW5rZWw9MCk6CiAgICAgcGVudXAoKQogICAgIHJpZ2h0KHdpbmtlbCkKQEAgLTQyLDcgKzQwLDYgQEAKICAgICBoYW5kX2Zvcm0gPSBnZXRfcG9seSgpCiAgICAgcmVnaXN0ZXJfc2hhcGUobmFtZSwgaGFuZF9mb3JtKQogCi0KIGRlZiBjbG9ja2ZhY2UocmFkaXVzKToKICAgICByZXNldCgpCiAgICAgcGVuc2l6ZSg3KQpAQCAtODMsNyArODAsNiBAQAogICAgIHdyaXRlci5wdSgpCiAgICAgd3JpdGVyLmJrKDg1KQogCi0KIGRlZiB3b2NoZW50YWcodCk6CiAgICAgd29jaGVudGFnID0gWyJNb25kYXkiLCAiVHVlc2RheSIsICJXZWRuZXNkYXkiLAogICAgICAgICAiVGh1cnNkYXkiLCAiRnJpZGF5IiwgIlNhdHVyZGF5IiwgIlN1bmRheSJdCkBAIC0xMDIsMjIgKzk4LDI1IEBACiAgICAgc2VrdW5kZSA9IHQuc2Vjb25kICsgdC5taWNyb3NlY29uZCowLjAwMDAwMQogICAgIG1pbnV0ZSA9IHQubWludXRlICsgc2VrdW5kZS82MC4wCiAgICAgc3R1bmRlID0gdC5ob3VyICsgbWludXRlLzYwLjAKLSAgICB0cmFjZXIoRmFsc2UpCi0gICAgd3JpdGVyLmNsZWFyKCkKLSAgICB3cml0ZXIuaG9tZSgpCi0gICAgd3JpdGVyLmZvcndhcmQoNjUpCi0gICAgd3JpdGVyLndyaXRlKHdvY2hlbnRhZyh0KSwKLSAgICAgICAgICAgICAgICAgYWxpZ249ImNlbnRlciIsIGZvbnQ9KCJDb3VyaWVyIiwgMTQsICJib2xkIikpCi0gICAgd3JpdGVyLmJhY2soMTUwKQotICAgIHdyaXRlci53cml0ZShkYXR1bSh0KSwKLSAgICAgICAgICAgICAgICAgYWxpZ249ImNlbnRlciIsIGZvbnQ9KCJDb3VyaWVyIiwgMTQsICJib2xkIikpCi0gICAgd3JpdGVyLmZvcndhcmQoODUpCi0gICAgdHJhY2VyKFRydWUpCi0gICAgc2Vjb25kX2hhbmQuc2V0aGVhZGluZyg2KnNla3VuZGUpCi0gICAgbWludXRlX2hhbmQuc2V0aGVhZGluZyg2Km1pbnV0ZSkKLSAgICBob3VyX2hhbmQuc2V0aGVhZGluZygzMCpzdHVuZGUpCi0gICAgdHJhY2VyKFRydWUpCi0gICAgb250aW1lcih0aWNrLCAxMDApCisgICAgdHJ5OgorICAgICAgICB0cmFjZXIoRmFsc2UpICAjIFRlcm1pbmF0b3IgY2FuIG9jY3VyIGhlcmUKKyAgICAgICAgd3JpdGVyLmNsZWFyKCkKKyAgICAgICAgd3JpdGVyLmhvbWUoKQorICAgICAgICB3cml0ZXIuZm9yd2FyZCg2NSkKKyAgICAgICAgd3JpdGVyLndyaXRlKHdvY2hlbnRhZyh0KSwKKyAgICAgICAgICAgICAgICAgICAgIGFsaWduPSJjZW50ZXIiLCBmb250PSgiQ291cmllciIsIDE0LCAiYm9sZCIpKQorICAgICAgICB3cml0ZXIuYmFjaygxNTApCisgICAgICAgIHdyaXRlci53cml0ZShkYXR1bSh0KSwKKyAgICAgICAgICAgICAgICAgICAgIGFsaWduPSJjZW50ZXIiLCBmb250PSgiQ291cmllciIsIDE0LCAiYm9sZCIpKQorICAgICAgICB3cml0ZXIuZm9yd2FyZCg4NSkKKyAgICAgICAgdHJhY2VyKFRydWUpCisgICAgICAgIHNlY29uZF9oYW5kLnNldGhlYWRpbmcoNipzZWt1bmRlKSAgIyBvciBoZXJlCisgICAgICAgIG1pbnV0ZV9oYW5kLnNldGhlYWRpbmcoNiptaW51dGUpCisgICAgICAgIGhvdXJfaGFuZC5zZXRoZWFkaW5nKDMwKnN0dW5kZSkKKyAgICAgICAgdHJhY2VyKFRydWUpCisgICAgICAgIG9udGltZXIodGljaywgMTAwKQorICAgIGV4Y2VwdCBUZXJtaW5hdG9yOgorICAgICAgICBwYXNzICAjIHR1cnRsZWRlbW8gdXNlciBwcmVzc2VkIFNUT1AKIAogZGVmIG1haW4oKToKICAgICB0cmFjZXIoRmFsc2UpCkBAIC0xMjcsNiArMTI2LDcgQEAKICAgICByZXR1cm4gIkVWRU5UTE9PUCIKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBtb2RlKCJsb2dvIikKICAgICBtc2cgPSBtYWluKCkKICAgICBwcmludChtc2cpCiAgICAgbWFpbmxvb3AoKQpkaWZmIC0tZ2l0IGEvTGliL3R1cnRsZWRlbW8vY29sb3JtaXhlci5weSBiL0xpYi90dXJ0bGVkZW1vL2NvbG9ybWl4ZXIucHkKaW5kZXggZjVkMzA4ZC4uNDQ4ZGI4MyAxMDA2NDQKLS0tIGEvTGliL3R1cnRsZWRlbW8vY29sb3JtaXhlci5weQorKysgYi9MaWIvdHVydGxlZGVtby9jb2xvcm1peGVyLnB5CkBAIC0xLDggKzEsNiBAQAogIyBjb2xvcm1peGVyCiAKIGZyb20gdHVydGxlIGltcG9ydCBTY3JlZW4sIFR1cnRsZSwgbWFpbmxvb3AKLWltcG9ydCBzeXMKLXN5cy5zZXRyZWN1cnNpb25saW1pdCgyMDAwMCkgICAjIG92ZXJjb21lcywgZm9yIG5vdywgYW4gaW5zdGFiaWxpdHkgb2YgUHl0aG9uIDMuMAogCiBjbGFzcyBDb2xvclR1cnRsZShUdXJ0bGUpOgogCmRpZmYgLS1naXQgYS9MaWIvdHVydGxlZGVtby9kZW1vaGVscC50eHQgYi9MaWIvdHVydGxlZGVtby9kZW1vaGVscC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlODNiYzcuLjAwMDAwMDAKLS0tIGEvTGliL3R1cnRsZWRlbW8vZGVtb2hlbHAudHh0CisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotCi0KLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gICAgICB0dXJ0bGVEZW1vIC0gSGVscAotCi0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICBUaGlzIGRvY3VtZW50IGhhcyB0d28gc2VjdGlvbnM6Ci0KLSAgKDEpIEhvdyB0byB1c2UgdGhlIGRlbW8gdmlld2VyCi0gICgyKSBIb3cgdG8gYWRkIHlvdXIgb3duIGRlbW9zIHRvIHRoZSBkZW1vIHJlcG9zaXRvcnkKLQotCi0gICgxKSBIb3cgdG8gdXNlIHRoZSBkZW1vIHZpZXdlci4KLQotICBTZWxlY3QgYSBkZW1vc2NyaXB0IGZyb20gdGhlIGV4YW1wbGUgbWVudS4KLSAgVGhlIChzeW50YXggY29sb3VyZWQpIHNvdXJjZSBjb2RlIGFwcGVhcnMgaW4gdGhlIGxlZnQKLSAgc291cmNlIGNvZGUgd2luZG93LiBJVCBDQU5OT1QgQkUgRURJVEVELCBidXQgT05MWSBWSUVXRUQhCi0KLSAgLSBQcmVzcyBTVEFSVCBidXR0b24gdG8gc3RhcnQgdGhlIGRlbW8uCi0gIC0gU3RvcCBleGVjdXRpb24gYnkgcHJlc3NpbmcgdGhlIFNUT1AgYnV0dG9uLgotICAtIENsZWFyIHNjcmVlbiBieSBwcmVzc2luZyB0aGUgQ0xFQVIgYnV0dG9uLgotICAtIFJlc3RhcnQgYnkgcHJlc3NpbmcgdGhlIFNUQVJUIGJ1dHRvbiBhZ2Fpbi4KLQotICBTUEVDSUFMIGRlbW9zIGFyZSB0aG9zZSB3aGljaCBydW4gRVZFTlREUklWRU4uCi0gIChGb3IgZXhhbXBsZSBjbG9jay5weSAtIG9yIG9sZFR1cnRsZURlbW8ucHkgd2hpY2gKLSAgaW4gdGhlIGVuZCBleHBlY3RzIGEgbW91c2UgY2xpY2suKToKLQotICAgICAgUHJlc3MgU1RBUlQgYnV0dG9uIHRvIHN0YXJ0IHRoZSBkZW1vLgotCi0gICAgICAtIFVudGlsIHRoZSBFVkVOVExPT1AgaXMgZW50ZXJlZCBldmVyeXRoaW5nIHdvcmtzCi0gICAgICBhcyBpbiBhbiBvcmRpbmFyeSBkZW1vIHNjcmlwdC4KLQotICAgICAgLSBXaGVuIHRoZSBFVkVOVExPT1AgaXMgZW50ZXJlZCwgeW91IGNvbnRyb2wgdGhlCi0gICAgICBhcHBsaWNhdGlvbiBieSB1c2luZyB0aGUgbW91c2UgYW5kL29yIGtleXMgKG9yIGl0J3MKLSAgICAgIGNvbnRyb2xsZWQgYnkgc29tZSB0aW1lciBldmVudHMpCi0gICAgICBUbyBzdG9wIGl0IHlvdSBjYW4gYW5kIG11c3QgcHJlc3MgdGhlIFNUT1AgYnV0dG9uLgotCi0gICAgICBXaGlsZSB0aGUgRVZFTlRMT09QIGlzIHJ1bm5pbmcsIHRoZSBleGFtcGxlcyBtZW51IGlzIGRpc2FibGVkLgotCi0gICAgICAtIE9ubHkgYWZ0ZXIgaGF2aW5nIHByZXNzZWQgdGhlIFNUT1AgYnV0dG9uLCB5b3UgbWF5Ci0gICAgICByZXN0YXJ0IGl0IG9yIGNob29zZSBhbm90aGVyIGV4YW1wbGUgc2NyaXB0LgotCi0gICAqICogKiAqICogKiAqICoKLSAgIEluIHNvbWUgcmFyZSBzaXR1YXRpb25zIHRoZXJlIG1heSBvY2N1ciBpbnRlcmZlcmVuY2VzL2NvbmZsaWN0cwotICAgYmV0d2VlbiBldmVudHMgY29uY2VybmluZyB0aGUgZGVtbyBzY3JpcHQgYW5kIHRob3NlIGNvbmNlcm5pbmcgdGhlCi0gICBkZW1vLXZpZXdlci4gKFRoZXkgcnVuIGluIHRoZSBzYW1lIHByb2Nlc3MuKSBTdHJhbmdlIGJlaGF2aW91ciBtYXkgYmUKLSAgIHRoZSBjb25zZXF1ZW5jZSBhbmQgaW4gdGhlIHdvcnN0IGNhc2UgeW91IG11c3QgY2xvc2UgYW5kIHJlc3RhcnQgdGhlCi0gICB2aWV3ZXIuCi0gICAqICogKiAqICogKiAqICoKLQotCi0gICAoMikgSG93IHRvIGFkZCB5b3VyIG93biBkZW1vcyB0byB0aGUgZGVtbyByZXBvc2l0b3J5Ci0KLSAgIC0gcGxhY2U6IHNhbWUgZGlyZWN0b3J5IGFzIHR1cnRsZWRlbW8vX19tYWluX18ucHkKLQotICAgLSByZXF1aXJlbWVudHMgb24gc291cmNlIGNvZGU6Ci0gICAgICAgY29kZSBtdXN0IGNvbnRhaW4gYSBtYWluKCkgZnVuY3Rpb24gd2hpY2ggd2lsbAotICAgICAgIGJlIGV4ZWN1dGVkIGJ5IHRoZSB2aWV3ZXIgKHNlZSBwcm92aWRlZCBleGFtcGxlIHNjcmlwdHMpCi0gICAgICAgbWFpbigpIG1heSByZXR1cm4gYSBzdHJpbmcgd2hpY2ggd2lsbCBiZSBkaXNwbGF5ZWQKLSAgICAgICBpbiB0aGUgTGFiZWwgYmVsb3cgdGhlIHNvdXJjZSBjb2RlIHdpbmRvdyAod2hlbiBleGVjdXRpb24KLSAgICAgICBoYXMgZmluaXNoZWQuKSAKLQotICAgICAgICEhIEZvciBwcm9ncmFtcywgd2hpY2ggYXJlIEVWRU5UIERSSVZFTiwgbWFpbiBtdXN0IHJldHVybgotICAgICAgICEhIHRoZSBzdHJpbmcgIkVWRU5UTE9PUCIuIFRoaXMgaW5mb3JtcyB0aGUgdmlld2VyLCB0aGF0IHRoZQotICAgICAgICEhIHNjcmlwdCBpcyBzdGlsbCBydW5uaW5nIGFuZCBtdXN0IGJlIHN0b3BwZWQgYnkgdGhlIHVzZXIhCi0KLSAgICAgICAgCi0gIApkaWZmIC0tZ2l0IGEvTGliL3R1cnRsZWRlbW8vZm9yZXN0LnB5IGIvTGliL3R1cnRsZWRlbW8vZm9yZXN0LnB5CmluZGV4IGE4MzdkODQuLjdmZTA4MGUgMTAwNzU1Ci0tLSBhL0xpYi90dXJ0bGVkZW1vL2ZvcmVzdC5weQorKysgYi9MaWIvdHVydGxlZGVtby9mb3Jlc3QucHkKQEAgLTMsMTIgKzMsMTIgQEAKIAogICAgICAgICAgICAgIHRkZW1vX2ZvcmVzdC5weQogCi1EaXNwbGF5cyBhICdmb3Jlc3QnIG9mIDMgJ2JyZWFkdGgtZmlyc3QtdHJlZXMnCi1zaW1pbGFyIHRvIHRoZSBvbmUgZnJvbSBleGFtcGxlIHRyZWUuCi1Gb3IgZnVydGhlciByZW1hcmtzIHNlZSB4dHhfdHJlZS5weQorRGlzcGxheXMgYSAnZm9yZXN0JyBvZiAzIGJyZWFkdGgtZmlyc3QtdHJlZXMKK3NpbWlsYXIgdG8gdGhlIG9uZSBpbiB0cmVlLgorRm9yIGZ1cnRoZXIgcmVtYXJrcyBzZWUgdHJlZS5weQogCiBUaGlzIGV4YW1wbGUgaXMgYSAnYnJlYWR0aC1maXJzdCctcmV3cml0ZSBvZgotYSBMb2dvIHByb2dyYW0gd3JpdHRlbiBieSBFcmljaCBOZXV3aXJ0aC4gU2VlOgorYSBMb2dvIHByb2dyYW0gd3JpdHRlbiBieSBFcmljaCBOZXV3aXJ0aC4gU2VlCiBodHRwOi8vaG9tZXBhZ2UudW5pdmllLmFjLmF0L2VyaWNoLm5ldXdpcnRoLwogIiIiCiBmcm9tIHR1cnRsZSBpbXBvcnQgVHVydGxlLCBjb2xvcm1vZGUsIHRyYWNlciwgbWFpbmxvb3AKQEAgLTEwNCw2ICsxMDQsNSBAQAogICAgIHJldHVybiAicnVudGltZTogJS4yZiBzZWMuIiAlIChiLWEpCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgbXNnID0gbWFpbigpCi0gICAgcHJpbnQobXNnKQorICAgIG1haW4oKQogICAgIG1haW5sb29wKCkKZGlmZiAtLWdpdCBhL0xpYi90dXJ0bGVkZW1vL21pbmltYWxfaGFub2kucHkgYi9MaWIvdHVydGxlZGVtby9taW5pbWFsX2hhbm9pLnB5CmluZGV4IGNmYjc4ZGMuLjRhNDMyZjIgMTAwNzU1Ci0tLSBhL0xpYi90dXJ0bGVkZW1vL21pbmltYWxfaGFub2kucHkKKysrIGIvTGliL3R1cnRsZWRlbW8vbWluaW1hbF9oYW5vaS5weQpAQCAtNTAsOSArNTAsMTIgQEAKIGRlZiBwbGF5KCk6CiAgICAgb25rZXkoTm9uZSwic3BhY2UiKQogICAgIGNsZWFyKCkKLSAgICBoYW5vaSg2LCB0MSwgdDIsIHQzKQotICAgIHdyaXRlKCJwcmVzcyBTVE9QIGJ1dHRvbiB0byBleGl0IiwKLSAgICAgICAgICBhbGlnbj0iY2VudGVyIiwgZm9udD0oIkNvdXJpZXIiLCAxNiwgImJvbGQiKSkKKyAgICB0cnk6CisgICAgICAgIGhhbm9pKDYsIHQxLCB0MiwgdDMpCisgICAgICAgIHdyaXRlKCJwcmVzcyBTVE9QIGJ1dHRvbiB0byBleGl0IiwKKyAgICAgICAgICAgICAgYWxpZ249ImNlbnRlciIsIGZvbnQ9KCJDb3VyaWVyIiwgMTYsICJib2xkIikpCisgICAgZXhjZXB0IFRlcm1pbmF0b3I6CisgICAgICAgIHBhc3MgICMgdHVydGxlZGVtbyB1c2VyIHByZXNzZWQgU1RPUAogCiBkZWYgbWFpbigpOgogICAgIGdsb2JhbCB0MSwgdDIsIHQzCmRpZmYgLS1naXQgYS9MaWIvdHVydGxlZGVtby9uaW0ucHkgYi9MaWIvdHVydGxlZGVtby9uaW0ucHkKaW5kZXggNzkyYmE1MS4uOWFlNmNjNSAxMDA2NDQKLS0tIGEvTGliL3R1cnRsZWRlbW8vbmltLnB5CisrKyBiL0xpYi90dXJ0bGVkZW1vL25pbS5weQpAQCAtMTQzLDcgKzE0Myw2IEBACiAgICAgICAgIHNlbGYud3JpdGVyLndyaXRlKG1zZzEsIGFsaWduPSJjZW50ZXIiLCBmb250PSgiQ291cmllciIsMTQsImJvbGQiKSkKICAgICAgICAgc2VsZi5zY3JlZW4udHJhY2VyKFRydWUpCiAKLQogICAgIGRlZiBzZXR1cChzZWxmKToKICAgICAgICAgc2VsZi5zY3JlZW4udHJhY2VyKEZhbHNlKQogICAgICAgICBmb3Igcm93IGluIHJhbmdlKDMpOgpAQCAtMTgxLDYgKzE4MCw3IEBACiAgICAgICAgIGlmIHNlbGYuZ2FtZS5zdGF0ZSA9PSBOaW0uT1ZFUjoKICAgICAgICAgICAgIHNlbGYuc2NyZWVuLmNsZWFyKCkKIAorCiBjbGFzcyBOaW1Db250cm9sbGVyKG9iamVjdCk6CiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgZ2FtZSk6CkBAIC0yMDEsNiArMjAxLDcgQEAKICAgICAgICAgc2VsZi5nYW1lLm1vZGVsLm5vdGlmeV9tb3ZlKHJvdywgY29sKQogICAgICAgICBzZWxmLkJVU1kgPSBGYWxzZQogCisKIGNsYXNzIE5pbShvYmplY3QpOgogICAgIENSRUFURUQgPSAwCiAgICAgUlVOTklORyA9IDEKQEAgLTIxMywxMyArMjE0LDEyIEBACiAgICAgICAgIHNlbGYuY29udHJvbGxlciA9IE5pbUNvbnRyb2xsZXIoc2VsZikKIAogCi1tYWluc2NyZWVuID0gdHVydGxlLlNjcmVlbigpCi1tYWluc2NyZWVuLm1vZGUoInN0YW5kYXJkIikKLW1haW5zY3JlZW4uc2V0dXAoU0NSRUVOV0lEVEgsIFNDUkVFTkhFSUdIVCkKLQogZGVmIG1haW4oKToKKyAgICBtYWluc2NyZWVuID0gdHVydGxlLlNjcmVlbigpCisgICAgbWFpbnNjcmVlbi5tb2RlKCJzdGFuZGFyZCIpCisgICAgbWFpbnNjcmVlbi5zZXR1cChTQ1JFRU5XSURUSCwgU0NSRUVOSEVJR0hUKQogICAgIG5pbSA9IE5pbShtYWluc2NyZWVuKQotICAgIHJldHVybiAiRVZFTlRMT09QISIKKyAgICByZXR1cm4gIkVWRU5UTE9PUCIKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICBtYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90dXJ0bGVkZW1vL3BhaW50LnB5IGIvTGliL3R1cnRsZWRlbW8vcGFpbnQucHkKaW5kZXggNjgwNThhYi4uZGRlMTY5MSAxMDA3NTUKLS0tIGEvTGliL3R1cnRsZWRlbW8vcGFpbnQucHkKKysrIGIvTGliL3R1cnRsZWRlbW8vcGFpbnQucHkKQEAgLTMsMTEgKzMsMTUgQEAKIAogICAgICAgICAgICAgdGRlbW9fcGFpbnQucHkKIAotQSBzaW1wbGUgIGV2ZW50ZHJpdmVuIHBhaW50IHByb2dyYW0KK0Egc2ltcGxlICBldmVudC1kcml2ZW4gcGFpbnQgcHJvZ3JhbQogCi0tIHVzZSBsZWZ0IG1vdXNlIGJ1dHRvbiB0byBtb3ZlIHR1cnRsZQotLSBtaWRkbGUgbW91c2UgYnV0dG9uIHRvIGNoYW5nZSBjb2xvcgotLSByaWdodCBtb3VzZSBidXR0b24gZG8gdHVybiBmaWxsaW5nIG9uL29mZgorLSBsZWZ0IG1vdXNlIGJ1dHRvbiBtb3ZlcyB0dXJ0bGUKKy0gbWlkZGxlIG1vdXNlIGJ1dHRvbiBjaGFuZ2VzIGNvbG9yCistIHJpZ2h0IG1vdXNlIGJ1dHRvbiB0b29nbGVzIGJldHdlZW0gcGVuIHVwCisobm8gbGluZSBkcmF3biB3aGVuIHRoZSB0dXJ0bGUgbW92ZXMpIGFuZAorcGVuIGRvd24gKGxpbmUgaXMgZHJhd24pLiBJZiBwZW4gdXAgZm9sbG93cworYXQgbGVhc3QgdHdvIHBlbi1kb3duIG1vdmVzLCB0aGUgcG9seWdvbiB0aGF0CitpbmNsdWRlcyB0aGUgc3RhcnRpbmcgcG9pbnQgaXMgZmlsbGVkLgogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICBQbGF5IGFyb3VuZCBieSBjbGlja2luZyBpbnRvIHRoZSBjYW52YXMKICB1c2luZyBhbGwgdGhyZWUgbW91c2UgYnV0dG9ucy4KZGlmZiAtLWdpdCBhL0xpYi90dXJ0bGVkZW1vL3BlYWNlLnB5IGIvTGliL3R1cnRsZWRlbW8vcGVhY2UucHkKaW5kZXggNjNjZjdjYy4uZTJiYTkyOCAxMDA3NTUKLS0tIGEvTGliL3R1cnRsZWRlbW8vcGVhY2UucHkKKysrIGIvTGliL3R1cnRsZWRlbW8vcGVhY2UucHkKQEAgLTMsMTQgKzMsMTAgQEAKIAogICAgICAgICAgICAgICB0ZGVtb19wZWFjZS5weQogCi1BIHZlcnkgc2ltcGxlIGRyYXdpbmcgc3VpdGFibGUgYXMgYSBiZWdpbm5lcidzCi1wcm9ncmFtbWluZyBleGFtcGxlLgotCi1Vc2VzIG9ubHkgY29tbWFuZHMsIHdoaWNoIGFyZSBhbHNvIGF2YWlsYWJsZSBpbgotb2xkIHR1cnRsZS5weS4KLQotSW50ZW50aW9uYWxseSBubyB2YXJpYWJsZXMgYXJlIHVzZWQgZXhjZXB0IGZvciB0aGUKLWNvbG9ybG9vcDoKK0Egc2ltcGxlIGRyYXdpbmcgc3VpdGFibGUgYXMgYSBiZWdpbm5lcidzCitwcm9ncmFtbWluZyBleGFtcGxlLiBBc2lkZSBmcm9tIHRoZQorcGVhY2Vjb2xvcnMgYXNzaWdubWVudCBhbmQgdGhlIGZvciBsb29wLAoraXQgb25seSB1c2VzIHR1cnRsZSBjb21tYW5kcy4KICIiIgogCiBmcm9tIHR1cnRsZSBpbXBvcnQgKgpAQCAtMjEsNyArMTcsNyBAQAogICAgICAgICAgICAgICAgICAgICJyb3lhbGJsdWUxIiwgImRvZGdlcmJsdWU0IikKIAogICAgIHJlc2V0KCkKLSAgICBzID0gU2NyZWVuKCkKKyAgICBTY3JlZW4oKQogICAgIHVwKCkKICAgICBnb3RvKC0zMjAsLTE5NSkKICAgICB3aWR0aCg3MCkKQEAgLTU4LDcgKzU0LDcgQEAKICAgICB1cCgpCiAKICAgICBnb3RvKDAsMzAwKSAjIHZhbmlzaCBpZiBoaWRldHVydGxlKCkgaXMgbm90IGF2YWlsYWJsZSA7LSkKLSAgICByZXR1cm4gIkRvbmUhISIKKyAgICByZXR1cm4gIkRvbmUhIgogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3R1cnRsZWRlbW8vcGxhbmV0X2FuZF9tb29uLnB5IGIvTGliL3R1cnRsZWRlbW8vcGxhbmV0X2FuZF9tb29uLnB5CmluZGV4IDE0YzRiYmMuLjI2YWJmZGIgMTAwNzU1Ci0tLSBhL0xpYi90dXJ0bGVkZW1vL3BsYW5ldF9hbmRfbW9vbi5weQorKysgYi9MaWIvdHVydGxlZGVtby9wbGFuZXRfYW5kX21vb24ucHkKQEAgLTEyLDkgKzEyLDkgQEAKIFBsYW5ldCBoYXMgYSBjaXJjdWxhciBvcmJpdCwgbW9vbiBhIHN0YWJsZQogb3JiaXQgYXJvdW5kIHRoZSBwbGFuZXQuCiAKLVlvdSBjYW4gaG9sZCB0aGUgbW92ZW1lbnQgdGVtcG9yYXJpbHkgYnkgcHJlc3NpbmcKLXRoZSBsZWZ0IG1vdXNlIGJ1dHRvbiB3aXRoIG1vdXNlIG92ZXIgdGhlCi1zY3JvbGxiYXIgb2YgdGhlIGNhbnZhcy4KK1lvdSBjYW4gaG9sZCB0aGUgbW92ZW1lbnQgdGVtcG9yYXJpbHkgYnkKK3ByZXNzaW5nIHRoZSBsZWZ0IG1vdXNlIGJ1dHRvbiB3aXRoIHRoZQorbW91c2Ugb3ZlciB0aGUgc2Nyb2xsYmFyIG9mIHRoZSBjYW52YXMuCiAKICIiIgogZnJvbSB0dXJ0bGUgaW1wb3J0IFNoYXBlLCBUdXJ0bGUsIG1haW5sb29wLCBWZWMyRCBhcyBWZWMKQEAgLTEwOCw2ICsxMDgsNSBAQAogICAgIHJldHVybiAiRG9uZSEiCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgbXNnID0gbWFpbigpCi0gICAgcHJpbnQobXNnKQotICAgICNtYWlubG9vcCgpCisgICAgbWFpbigpCisgICAgbWFpbmxvb3AoKQpkaWZmIC0tZ2l0IGEvTGliL3R1cnRsZWRlbW8vdHJlZS5weSBiL0xpYi90dXJ0bGVkZW1vL3RyZWUucHkKaW5kZXggOWMwYjFmNy4uNzFmZmYzNSAxMDA3NTUKLS0tIGEvTGliL3R1cnRsZWRlbW8vdHJlZS5weQorKysgYi9MaWIvdHVydGxlZGVtby90cmVlLnB5CkBAIC0xMSw5ICsxMSw5IEBACiAoMSkgYSB0cmVlLWdlbmVyYXRvciwgd2hlcmUgdGhlIGRyYXdpbmcgaXMKIHF1YXNpIHRoZSBzaWRlLWVmZmVjdCwgd2hlcmVhcyB0aGUgZ2VuZXJhdG9yCiBhbHdheXMgeWllbGRzIE5vbmUuCi0oMikgVHVydGxlLWNsb25pbmc6IEF0IGVhY2ggYnJhbmNoaW5nIHBvaW50IHRoZQotY3VycmVudCBwZW4gaXMgY2xvbmVkLiBTbyBpbiB0aGUgZW5kIHRoZXJlCi1hcmUgMTAyNCB0dXJ0bGVzLgorKDIpIFR1cnRsZS1jbG9uaW5nOiBBdCBlYWNoIGJyYW5jaGluZyBwb2ludAordGhlIGN1cnJlbnQgcGVuIGlzIGNsb25lZC4gU28gaW4gdGhlIGVuZAordGhlcmUgYXJlIDEwMjQgdHVydGxlcy4KICIiIgogZnJvbSB0dXJ0bGUgaW1wb3J0IFR1cnRsZSwgbWFpbmxvb3AKIGZyb20gdGltZSBpbXBvcnQgY2xvY2sKZGlmZiAtLWdpdCBhL0xpYi90dXJ0bGVkZW1vL3R3b19jYW52YXNlcy5weSBiL0xpYi90dXJ0bGVkZW1vL3R3b19jYW52YXNlcy5weQppbmRleCAwMmQ4OWRiLi5kNTc5ODc2IDEwMDc1NQotLS0gYS9MaWIvdHVydGxlZGVtby90d29fY2FudmFzZXMucHkKKysrIGIvTGliL3R1cnRsZWRlbW8vdHdvX2NhbnZhc2VzLnB5CkBAIC0xLDUyICsxLDU0IEBACi0jIS91c3IvYmluL2VudiBweXRob24zCi0jIyBERU1PTlNUUkFURVMgVVNFIE9GIDIgQ0FOVkFTRVMsIFNPIENBTk5PVCBCRSBSVU4gSU4gREVNT1ZJRVdFUiEKLSIiInR1cnRsZSBleGFtcGxlOiBVc2luZyBUdXJ0bGVTY3JlZW4gYW5kIFJhd1R1cnRsZQotZm9yIGRyYXdpbmcgb24gdHdvIGRpc3RpbmN0IGNhbnZhc2VzLgorIiIidHVydGxlZGVtby50d29fY2FudmFzZXMKKworVXNlIFR1cnRsZVNjcmVlbiBhbmQgUmF3VHVydGxlIHRvIGRyYXcgb24gdHdvCitkaXN0aW5jdCBjYW52YXNlcyBpbiBhIHNlcGFyYXRlIHdpbmRvd3MuIFRoZQorbmV3IHdpbmRvdyBtdXN0IGJlIHNlcGFyYXRlbHkgY2xvc2VkIGluCithZGRpdGlvbiB0byBwcmVzc2luZyB0aGUgU1RPUCBidXR0b24uCiAiIiIKKwogZnJvbSB0dXJ0bGUgaW1wb3J0IFR1cnRsZVNjcmVlbiwgUmF3VHVydGxlLCBUSwogCi1yb290ID0gVEsuVGsoKQotY3YxID0gVEsuQ2FudmFzKHJvb3QsIHdpZHRoPTMwMCwgaGVpZ2h0PTIwMCwgYmc9IiNkZGZmZmYiKQotY3YyID0gVEsuQ2FudmFzKHJvb3QsIHdpZHRoPTMwMCwgaGVpZ2h0PTIwMCwgYmc9IiNmZmVlZWUiKQotY3YxLnBhY2soKQotY3YyLnBhY2soKQorZGVmIG1haW4oKToKKyAgICByb290ID0gVEsuVGsoKQorICAgIGN2MSA9IFRLLkNhbnZhcyhyb290LCB3aWR0aD0zMDAsIGhlaWdodD0yMDAsIGJnPSIjZGRmZmZmIikKKyAgICBjdjIgPSBUSy5DYW52YXMocm9vdCwgd2lkdGg9MzAwLCBoZWlnaHQ9MjAwLCBiZz0iI2ZmZWVlZSIpCisgICAgY3YxLnBhY2soKQorICAgIGN2Mi5wYWNrKCkKIAotczEgPSBUdXJ0bGVTY3JlZW4oY3YxKQotczEuYmdjb2xvcigwLjg1LCAwLjg1LCAxKQotczIgPSBUdXJ0bGVTY3JlZW4oY3YyKQotczIuYmdjb2xvcigxLCAwLjg1LCAwLjg1KQorICAgIHMxID0gVHVydGxlU2NyZWVuKGN2MSkKKyAgICBzMS5iZ2NvbG9yKDAuODUsIDAuODUsIDEpCisgICAgczIgPSBUdXJ0bGVTY3JlZW4oY3YyKQorICAgIHMyLmJnY29sb3IoMSwgMC44NSwgMC44NSkKIAotcCA9IFJhd1R1cnRsZShzMSkKLXEgPSBSYXdUdXJ0bGUoczIpCisgICAgcCA9IFJhd1R1cnRsZShzMSkKKyAgICBxID0gUmF3VHVydGxlKHMyKQogCi1wLmNvbG9yKCJyZWQiLCAoMSwgMC44NSwgMC44NSkpCi1wLndpZHRoKDMpCi1xLmNvbG9yKCJibHVlIiwgKDAuODUsIDAuODUsIDEpKQotcS53aWR0aCgzKQorICAgIHAuY29sb3IoInJlZCIsICgxLCAwLjg1LCAwLjg1KSkKKyAgICBwLndpZHRoKDMpCisgICAgcS5jb2xvcigiYmx1ZSIsICgwLjg1LCAwLjg1LCAxKSkKKyAgICBxLndpZHRoKDMpCiAKLWZvciB0IGluIHAscToKLSAgICB0LnNoYXBlKCJ0dXJ0bGUiKQotICAgIHQubHQoMzYpCisgICAgZm9yIHQgaW4gcCxxOgorICAgICAgICB0LnNoYXBlKCJ0dXJ0bGUiKQorICAgICAgICB0Lmx0KDM2KQogCi1xLmx0KDE4MCkKKyAgICBxLmx0KDE4MCkKIAotZm9yIHQgaW4gcCwgcToKLSAgICB0LmJlZ2luX2ZpbGwoKQotZm9yIGkgaW4gcmFuZ2UoNSk6CiAgICAgZm9yIHQgaW4gcCwgcToKLSAgICAgICAgdC5mZCg1MCkKLSAgICAgICAgdC5sdCg3MikKLWZvciB0IGluIHAscToKLSAgICB0LmVuZF9maWxsKCkKLSAgICB0Lmx0KDU0KQotICAgIHQucHUoKQotICAgIHQuYmsoNTApCisgICAgICAgIHQuYmVnaW5fZmlsbCgpCisgICAgZm9yIGkgaW4gcmFuZ2UoNSk6CisgICAgICAgIGZvciB0IGluIHAsIHE6CisgICAgICAgICAgICB0LmZkKDUwKQorICAgICAgICAgICAgdC5sdCg3MikKKyAgICBmb3IgdCBpbiBwLHE6CisgICAgICAgIHQuZW5kX2ZpbGwoKQorICAgICAgICB0Lmx0KDU0KQorICAgICAgICB0LnB1KCkKKyAgICAgICAgdC5iayg1MCkKIAotIyMgV2FudCB0byBnZXQgc29tZSBpbmZvPworICAgIHJldHVybiAiRVZFTlRMT09QIgogCi0jcHJpbnQoczEsIHMyKQotI3ByaW50KHAsIHEpCi0jcHJpbnQoczEudHVydGxlcygpKQotI3ByaW50KHMyLnR1cnRsZXMoKSkKIAotVEsubWFpbmxvb3AoKQoraWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBtYWluKCkKKyAgICBUSy5tYWlubG9vcCgpICAjIGtlZXAgd2luZG93IG9wZW4gdW50aWwgdXNlciBjbG9zZXMgaXQKZGlmZiAtLWdpdCBhL0xpYi90eXBlcy5weSBiL0xpYi90eXBlcy5weQppbmRleCBjZmQwOWVhLi40ZmIyZGVmIDEwMDY0NAotLS0gYS9MaWIvdHlwZXMucHkKKysrIGIvTGliL3R5cGVzLnB5CkBAIC05OSwzICs5OSw2MyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIm11c3QgYmUgYSAobm9uLXN0cmljdCkgc3ViY2xhc3MgIgogICAgICAgICAgICAgICAgICAgICAgICAgIm9mIHRoZSBtZXRhY2xhc3NlcyBvZiBhbGwgaXRzIGJhc2VzIikKICAgICByZXR1cm4gd2lubmVyCisKK2NsYXNzIER5bmFtaWNDbGFzc0F0dHJpYnV0ZToKKyAgICAiIiJSb3V0ZSBhdHRyaWJ1dGUgYWNjZXNzIG9uIGEgY2xhc3MgdG8gX19nZXRhdHRyX18uCisKKyAgICBUaGlzIGlzIGEgZGVzY3JpcHRvciwgdXNlZCB0byBkZWZpbmUgYXR0cmlidXRlcyB0aGF0IGFjdCBkaWZmZXJlbnRseSB3aGVuCisgICAgYWNjZXNzZWQgdGhyb3VnaCBhbiBpbnN0YW5jZSBhbmQgdGhyb3VnaCBhIGNsYXNzLiAgSW5zdGFuY2UgYWNjZXNzIHJlbWFpbnMKKyAgICBub3JtYWwsIGJ1dCBhY2Nlc3MgdG8gYW4gYXR0cmlidXRlIHRocm91Z2ggYSBjbGFzcyB3aWxsIGJlIHJvdXRlZCB0byB0aGUKKyAgICBjbGFzcydzIF9fZ2V0YXR0cl9fIG1ldGhvZDsgdGhpcyBpcyBkb25lIGJ5IHJhaXNpbmcgQXR0cmlidXRlRXJyb3IuCisKKyAgICBUaGlzIGFsbG93cyBvbmUgdG8gaGF2ZSBwcm9wZXJ0aWVzIGFjdGl2ZSBvbiBhbiBpbnN0YW5jZSwgYW5kIGhhdmUgdmlydHVhbAorICAgIGF0dHJpYnV0ZXMgb24gdGhlIGNsYXNzIHdpdGggdGhlIHNhbWUgbmFtZSAoc2VlIEVudW0gZm9yIGFuIGV4YW1wbGUpLgorCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZnZXQ9Tm9uZSwgZnNldD1Ob25lLCBmZGVsPU5vbmUsIGRvYz1Ob25lKToKKyAgICAgICAgc2VsZi5mZ2V0ID0gZmdldAorICAgICAgICBzZWxmLmZzZXQgPSBmc2V0CisgICAgICAgIHNlbGYuZmRlbCA9IGZkZWwKKyAgICAgICAgIyBuZXh0IHR3byBsaW5lcyBtYWtlIER5bmFtaWNDbGFzc0F0dHJpYnV0ZSBhY3QgdGhlIHNhbWUgYXMgcHJvcGVydHkKKyAgICAgICAgc2VsZi5fX2RvY19fID0gZG9jIG9yIGZnZXQuX19kb2NfXworICAgICAgICBzZWxmLm92ZXJ3cml0ZV9kb2MgPSBkb2MgaXMgTm9uZQorICAgICAgICAjIHN1cHBvcnQgZm9yIGFic3RyYWN0IG1ldGhvZHMKKyAgICAgICAgc2VsZi5fX2lzYWJzdHJhY3RtZXRob2RfXyA9IGJvb2woZ2V0YXR0cihmZ2V0LCAnX19pc2Fic3RyYWN0bWV0aG9kX18nLCBGYWxzZSkpCisKKyAgICBkZWYgX19nZXRfXyhzZWxmLCBpbnN0YW5jZSwgb3duZXJjbGFzcz1Ob25lKToKKyAgICAgICAgaWYgaW5zdGFuY2UgaXMgTm9uZToKKyAgICAgICAgICAgIGlmIHNlbGYuX19pc2Fic3RyYWN0bWV0aG9kX186CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKKyAgICAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKCkKKyAgICAgICAgZWxpZiBzZWxmLmZnZXQgaXMgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKCJ1bnJlYWRhYmxlIGF0dHJpYnV0ZSIpCisgICAgICAgIHJldHVybiBzZWxmLmZnZXQoaW5zdGFuY2UpCisKKyAgICBkZWYgX19zZXRfXyhzZWxmLCBpbnN0YW5jZSwgdmFsdWUpOgorICAgICAgICBpZiBzZWxmLmZzZXQgaXMgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKCJjYW4ndCBzZXQgYXR0cmlidXRlIikKKyAgICAgICAgc2VsZi5mc2V0KGluc3RhbmNlLCB2YWx1ZSkKKworICAgIGRlZiBfX2RlbGV0ZV9fKHNlbGYsIGluc3RhbmNlKToKKyAgICAgICAgaWYgc2VsZi5mZGVsIGlzIE5vbmU6CisgICAgICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcigiY2FuJ3QgZGVsZXRlIGF0dHJpYnV0ZSIpCisgICAgICAgIHNlbGYuZmRlbChpbnN0YW5jZSkKKworICAgIGRlZiBnZXR0ZXIoc2VsZiwgZmdldCk6CisgICAgICAgIGZkb2MgPSBmZ2V0Ll9fZG9jX18gaWYgc2VsZi5vdmVyd3JpdGVfZG9jIGVsc2UgTm9uZQorICAgICAgICByZXN1bHQgPSB0eXBlKHNlbGYpKGZnZXQsIHNlbGYuZnNldCwgc2VsZi5mZGVsLCBmZG9jIG9yIHNlbGYuX19kb2NfXykKKyAgICAgICAgcmVzdWx0Lm92ZXJ3cml0ZV9kb2MgPSBzZWxmLm92ZXJ3cml0ZV9kb2MKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVmIHNldHRlcihzZWxmLCBmc2V0KToKKyAgICAgICAgcmVzdWx0ID0gdHlwZShzZWxmKShzZWxmLmZnZXQsIGZzZXQsIHNlbGYuZmRlbCwgc2VsZi5fX2RvY19fKQorICAgICAgICByZXN1bHQub3ZlcndyaXRlX2RvYyA9IHNlbGYub3ZlcndyaXRlX2RvYworICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBkZWYgZGVsZXRlcihzZWxmLCBmZGVsKToKKyAgICAgICAgcmVzdWx0ID0gdHlwZShzZWxmKShzZWxmLmZnZXQsIHNlbGYuZnNldCwgZmRlbCwgc2VsZi5fX2RvY19fKQorICAgICAgICByZXN1bHQub3ZlcndyaXRlX2RvYyA9IHNlbGYub3ZlcndyaXRlX2RvYworICAgICAgICByZXR1cm4gcmVzdWx0CisKKworX19hbGxfXyA9IFtuIGZvciBuIGluIGdsb2JhbHMoKSBpZiBuWzoxXSAhPSAnXyddCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvX19tYWluX18ucHkgYi9MaWIvdW5pdHRlc3QvX19tYWluX18ucHkKaW5kZXggNzk4ZWJjMC4uMjY2MzE3OCAxMDA2NDQKLS0tIGEvTGliL3VuaXR0ZXN0L19fbWFpbl9fLnB5CisrKyBiL0xpYi91bml0dGVzdC9fX21haW5fXy5weQpAQCAtMTMsNyArMTMsNiBAQAogCiBfX3VuaXR0ZXN0ID0gVHJ1ZQogCi1mcm9tIC5tYWluIGltcG9ydCBtYWluLCBUZXN0UHJvZ3JhbSwgVVNBR0VfQVNfTUFJTgotVGVzdFByb2dyYW0uVVNBR0UgPSBVU0FHRV9BU19NQUlOCitmcm9tIC5tYWluIGltcG9ydCBtYWluLCBUZXN0UHJvZ3JhbQogCiBtYWluKG1vZHVsZT1Ob25lKQpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L2Nhc2UucHkgYi9MaWIvdW5pdHRlc3QvY2FzZS5weQppbmRleCBmNTZhZjU1Li44YTlmMWMwIDEwMDY0NAotLS0gYS9MaWIvdW5pdHRlc3QvY2FzZS5weQorKysgYi9MaWIvdW5pdHRlc3QvY2FzZS5weQpAQCAtMywxNCArMywxNyBAQAogaW1wb3J0IHN5cwogaW1wb3J0IGZ1bmN0b29scwogaW1wb3J0IGRpZmZsaWIKK2ltcG9ydCBsb2dnaW5nCiBpbXBvcnQgcHByaW50CiBpbXBvcnQgcmUKIGltcG9ydCB3YXJuaW5ncwogaW1wb3J0IGNvbGxlY3Rpb25zCitpbXBvcnQgY29udGV4dGxpYgoraW1wb3J0IHRyYWNlYmFjawogCiBmcm9tIC4gaW1wb3J0IHJlc3VsdAogZnJvbSAudXRpbCBpbXBvcnQgKHN0cmNsYXNzLCBzYWZlX3JlcHIsIF9jb3VudF9kaWZmX2FsbF9wdXJwb3NlLAotICAgICAgICAgICAgICAgICAgIF9jb3VudF9kaWZmX2hhc2hhYmxlKQorICAgICAgICAgICAgICAgICAgIF9jb3VudF9kaWZmX2hhc2hhYmxlLCBfY29tbW9uX3Nob3J0ZW5fcmVwcikKIAogX191bml0dGVzdCA9IFRydWUKIApAQCAtMjYsMTcgKzI5LDExIEBACiAgICAgaW5zdGVhZCBvZiByYWlzaW5nIHRoaXMgZGlyZWN0bHkuCiAgICAgIiIiCiAKLWNsYXNzIF9FeHBlY3RlZEZhaWx1cmUoRXhjZXB0aW9uKToKK2NsYXNzIF9TaG91bGRTdG9wKEV4Y2VwdGlvbik6CiAgICAgIiIiCi0gICAgUmFpc2UgdGhpcyB3aGVuIGEgdGVzdCBpcyBleHBlY3RlZCB0byBmYWlsLgotCi0gICAgVGhpcyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwuCisgICAgVGhlIHRlc3Qgc2hvdWxkIHN0b3AuCiAgICAgIiIiCiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgZXhjX2luZm8pOgotICAgICAgICBzdXBlcihfRXhwZWN0ZWRGYWlsdXJlLCBzZWxmKS5fX2luaXRfXygpCi0gICAgICAgIHNlbGYuZXhjX2luZm8gPSBleGNfaW5mbwotCiBjbGFzcyBfVW5leHBlY3RlZFN1Y2Nlc3MoRXhjZXB0aW9uKToKICAgICAiIiIKICAgICBUaGUgdGVzdCB3YXMgc3VwcG9zZWQgdG8gZmFpbCwgYnV0IGl0IGRpZG4ndCEKQEAgLTQ0LDEzICs0MSw0MyBAQAogCiAKIGNsYXNzIF9PdXRjb21lKG9iamVjdCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZXN1bHQ9Tm9uZSk6CisgICAgICAgIHNlbGYuZXhwZWN0aW5nX2ZhaWx1cmUgPSBGYWxzZQorICAgICAgICBzZWxmLnJlc3VsdCA9IHJlc3VsdAorICAgICAgICBzZWxmLnJlc3VsdF9zdXBwb3J0c19zdWJ0ZXN0cyA9IGhhc2F0dHIocmVzdWx0LCAiYWRkU3ViVGVzdCIpCiAgICAgICAgIHNlbGYuc3VjY2VzcyA9IFRydWUKLSAgICAgICAgc2VsZi5za2lwcGVkID0gTm9uZQotICAgICAgICBzZWxmLnVuZXhwZWN0ZWRTdWNjZXNzID0gTm9uZQorICAgICAgICBzZWxmLnNraXBwZWQgPSBbXQogICAgICAgICBzZWxmLmV4cGVjdGVkRmFpbHVyZSA9IE5vbmUKICAgICAgICAgc2VsZi5lcnJvcnMgPSBbXQotICAgICAgICBzZWxmLmZhaWx1cmVzID0gW10KKworICAgIEBjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VyCisgICAgZGVmIHRlc3RQYXJ0RXhlY3V0b3Ioc2VsZiwgdGVzdF9jYXNlLCBpc1Rlc3Q9RmFsc2UpOgorICAgICAgICBvbGRfc3VjY2VzcyA9IHNlbGYuc3VjY2VzcworICAgICAgICBzZWxmLnN1Y2Nlc3MgPSBUcnVlCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHlpZWxkCisgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKKyAgICAgICAgICAgIHJhaXNlCisgICAgICAgIGV4Y2VwdCBTa2lwVGVzdCBhcyBlOgorICAgICAgICAgICAgc2VsZi5zdWNjZXNzID0gRmFsc2UKKyAgICAgICAgICAgIHNlbGYuc2tpcHBlZC5hcHBlbmQoKHRlc3RfY2FzZSwgc3RyKGUpKSkKKyAgICAgICAgZXhjZXB0IF9TaG91bGRTdG9wOgorICAgICAgICAgICAgcGFzcworICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBleGNfaW5mbyA9IHN5cy5leGNfaW5mbygpCisgICAgICAgICAgICBpZiBzZWxmLmV4cGVjdGluZ19mYWlsdXJlOgorICAgICAgICAgICAgICAgIHNlbGYuZXhwZWN0ZWRGYWlsdXJlID0gZXhjX2luZm8KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5zdWNjZXNzID0gRmFsc2UKKyAgICAgICAgICAgICAgICBzZWxmLmVycm9ycy5hcHBlbmQoKHRlc3RfY2FzZSwgZXhjX2luZm8pKQorICAgICAgICAgICAgIyBleHBsaWNpdGx5IGJyZWFrIGEgcmVmZXJlbmNlIGN5Y2xlOgorICAgICAgICAgICAgIyBleGNfaW5mbyAtPiBmcmFtZSAtPiBleGNfaW5mbworICAgICAgICAgICAgZXhjX2luZm8gPSBOb25lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBzZWxmLnJlc3VsdF9zdXBwb3J0c19zdWJ0ZXN0cyBhbmQgc2VsZi5zdWNjZXNzOgorICAgICAgICAgICAgICAgIHNlbGYuZXJyb3JzLmFwcGVuZCgodGVzdF9jYXNlLCBOb25lKSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYuc3VjY2VzcyA9IHNlbGYuc3VjY2VzcyBhbmQgb2xkX3N1Y2Nlc3MKIAogCiBkZWYgX2lkKG9iaik6CkBAIC04OCwyMiArMTE1LDI2IEBACiAgICAgICAgIHJldHVybiBza2lwKHJlYXNvbikKICAgICByZXR1cm4gX2lkCiAKLQotZGVmIGV4cGVjdGVkRmFpbHVyZShmdW5jKToKLSAgICBAZnVuY3Rvb2xzLndyYXBzKGZ1bmMpCi0gICAgZGVmIHdyYXBwZXIoKmFyZ3MsICoqa3dhcmdzKToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZnVuYygqYXJncywgKiprd2FyZ3MpCi0gICAgICAgIGV4Y2VwdCBFeGNlcHRpb246Ci0gICAgICAgICAgICByYWlzZSBfRXhwZWN0ZWRGYWlsdXJlKHN5cy5leGNfaW5mbygpKQotICAgICAgICByYWlzZSBfVW5leHBlY3RlZFN1Y2Nlc3MKLSAgICByZXR1cm4gd3JhcHBlcgorZGVmIGV4cGVjdGVkRmFpbHVyZSh0ZXN0X2l0ZW0pOgorICAgIHRlc3RfaXRlbS5fX3VuaXR0ZXN0X2V4cGVjdGluZ19mYWlsdXJlX18gPSBUcnVlCisgICAgcmV0dXJuIHRlc3RfaXRlbQogCiAKLWNsYXNzIF9Bc3NlcnRSYWlzZXNCYXNlQ29udGV4dChvYmplY3QpOgorY2xhc3MgX0Jhc2VUZXN0Q2FzZUNvbnRleHQ6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGVzdF9jYXNlKToKKyAgICAgICAgc2VsZi50ZXN0X2Nhc2UgPSB0ZXN0X2Nhc2UKKworICAgIGRlZiBfcmFpc2VGYWlsdXJlKHNlbGYsIHN0YW5kYXJkTXNnKToKKyAgICAgICAgbXNnID0gc2VsZi50ZXN0X2Nhc2UuX2Zvcm1hdE1lc3NhZ2Uoc2VsZi5tc2csIHN0YW5kYXJkTXNnKQorICAgICAgICByYWlzZSBzZWxmLnRlc3RfY2FzZS5mYWlsdXJlRXhjZXB0aW9uKG1zZykKKworCitjbGFzcyBfQXNzZXJ0UmFpc2VzQmFzZUNvbnRleHQoX0Jhc2VUZXN0Q2FzZUNvbnRleHQpOgogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGV4cGVjdGVkLCB0ZXN0X2Nhc2UsIGNhbGxhYmxlX29iaj1Ob25lLAogICAgICAgICAgICAgICAgICBleHBlY3RlZF9yZWdleD1Ob25lKToKKyAgICAgICAgX0Jhc2VUZXN0Q2FzZUNvbnRleHQuX19pbml0X18oc2VsZiwgdGVzdF9jYXNlKQogICAgICAgICBzZWxmLmV4cGVjdGVkID0gZXhwZWN0ZWQKICAgICAgICAgc2VsZi50ZXN0X2Nhc2UgPSB0ZXN0X2Nhc2UKICAgICAgICAgaWYgY2FsbGFibGVfb2JqIGlzIG5vdCBOb25lOgpAQCAtMTEzLDE1ICsxNDQsMTEgQEAKICAgICAgICAgICAgICAgICBzZWxmLm9ial9uYW1lID0gc3RyKGNhbGxhYmxlX29iaikKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYub2JqX25hbWUgPSBOb25lCi0gICAgICAgIGlmIGlzaW5zdGFuY2UoZXhwZWN0ZWRfcmVnZXgsIChieXRlcywgc3RyKSk6CisgICAgICAgIGlmIGV4cGVjdGVkX3JlZ2V4IGlzIG5vdCBOb25lOgogICAgICAgICAgICAgZXhwZWN0ZWRfcmVnZXggPSByZS5jb21waWxlKGV4cGVjdGVkX3JlZ2V4KQogICAgICAgICBzZWxmLmV4cGVjdGVkX3JlZ2V4ID0gZXhwZWN0ZWRfcmVnZXgKICAgICAgICAgc2VsZi5tc2cgPSBOb25lCiAKLSAgICBkZWYgX3JhaXNlRmFpbHVyZShzZWxmLCBzdGFuZGFyZE1zZyk6Ci0gICAgICAgIG1zZyA9IHNlbGYudGVzdF9jYXNlLl9mb3JtYXRNZXNzYWdlKHNlbGYubXNnLCBzdGFuZGFyZE1zZykKLSAgICAgICAgcmFpc2Ugc2VsZi50ZXN0X2Nhc2UuZmFpbHVyZUV4Y2VwdGlvbihtc2cpCi0KICAgICBkZWYgaGFuZGxlKHNlbGYsIG5hbWUsIGNhbGxhYmxlX29iaiwgYXJncywga3dhcmdzKToKICAgICAgICAgIiIiCiAgICAgICAgIElmIGNhbGxhYmxlX29iaiBpcyBOb25lLCBhc3NlcnRSYWlzZXMvV2FybnMgaXMgYmVpbmcgdXNlZCBhcyBhCkBAIC0xMzUsNyArMTYyLDYgQEAKICAgICAgICAgICAgIGNhbGxhYmxlX29iaigqYXJncywgKiprd2FyZ3MpCiAKIAotCiBjbGFzcyBfQXNzZXJ0UmFpc2VzQ29udGV4dChfQXNzZXJ0UmFpc2VzQmFzZUNvbnRleHQpOgogICAgICIiIkEgY29udGV4dCBtYW5hZ2VyIHVzZWQgdG8gaW1wbGVtZW50IFRlc3RDYXNlLmFzc2VydFJhaXNlcyogbWV0aG9kcy4iIiIKIApAQCAtMTUzLDYgKzE3OSw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vYmpfbmFtZSkpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHNlbGYuX3JhaXNlRmFpbHVyZSgie30gbm90IHJhaXNlZCIuZm9ybWF0KGV4Y19uYW1lKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHRyYWNlYmFjay5jbGVhcl9mcmFtZXModGIpCiAgICAgICAgIGlmIG5vdCBpc3N1YmNsYXNzKGV4Y190eXBlLCBzZWxmLmV4cGVjdGVkKToKICAgICAgICAgICAgICMgbGV0IHVuZXhwZWN0ZWQgZXhjZXB0aW9ucyBwYXNzIHRocm91Z2gKICAgICAgICAgICAgIHJldHVybiBGYWxzZQpAQCAtMjE3LDYgKzI0NSw3NCBAQAogICAgICAgICAgICAgc2VsZi5fcmFpc2VGYWlsdXJlKCJ7fSBub3QgdHJpZ2dlcmVkIi5mb3JtYXQoZXhjX25hbWUpKQogCiAKKworX0xvZ2dpbmdXYXRjaGVyID0gY29sbGVjdGlvbnMubmFtZWR0dXBsZSgiX0xvZ2dpbmdXYXRjaGVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJyZWNvcmRzIiwgIm91dHB1dCJdKQorCisKK2NsYXNzIF9DYXB0dXJpbmdIYW5kbGVyKGxvZ2dpbmcuSGFuZGxlcik6CisgICAgIiIiCisgICAgQSBsb2dnaW5nIGhhbmRsZXIgY2FwdHVyaW5nIGFsbCAocmF3IGFuZCBmb3JtYXR0ZWQpIGxvZ2dpbmcgb3V0cHV0LgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBsb2dnaW5nLkhhbmRsZXIuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi53YXRjaGVyID0gX0xvZ2dpbmdXYXRjaGVyKFtdLCBbXSkKKworICAgIGRlZiBmbHVzaChzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIGVtaXQoc2VsZiwgcmVjb3JkKToKKyAgICAgICAgc2VsZi53YXRjaGVyLnJlY29yZHMuYXBwZW5kKHJlY29yZCkKKyAgICAgICAgbXNnID0gc2VsZi5mb3JtYXQocmVjb3JkKQorICAgICAgICBzZWxmLndhdGNoZXIub3V0cHV0LmFwcGVuZChtc2cpCisKKworCitjbGFzcyBfQXNzZXJ0TG9nc0NvbnRleHQoX0Jhc2VUZXN0Q2FzZUNvbnRleHQpOgorICAgICIiIkEgY29udGV4dCBtYW5hZ2VyIHVzZWQgdG8gaW1wbGVtZW50IFRlc3RDYXNlLmFzc2VydExvZ3MoKS4iIiIKKworICAgIExPR0dJTkdfRk9STUFUID0gIiUobGV2ZWxuYW1lKXM6JShuYW1lKXM6JShtZXNzYWdlKXMiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGVzdF9jYXNlLCBsb2dnZXJfbmFtZSwgbGV2ZWwpOgorICAgICAgICBfQmFzZVRlc3RDYXNlQ29udGV4dC5fX2luaXRfXyhzZWxmLCB0ZXN0X2Nhc2UpCisgICAgICAgIHNlbGYubG9nZ2VyX25hbWUgPSBsb2dnZXJfbmFtZQorICAgICAgICBpZiBsZXZlbDoKKyAgICAgICAgICAgIHNlbGYubGV2ZWwgPSBsb2dnaW5nLl9uYW1lVG9MZXZlbC5nZXQobGV2ZWwsIGxldmVsKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5sZXZlbCA9IGxvZ2dpbmcuSU5GTworICAgICAgICBzZWxmLm1zZyA9IE5vbmUKKworICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIGlmIGlzaW5zdGFuY2Uoc2VsZi5sb2dnZXJfbmFtZSwgbG9nZ2luZy5Mb2dnZXIpOgorICAgICAgICAgICAgbG9nZ2VyID0gc2VsZi5sb2dnZXIgPSBzZWxmLmxvZ2dlcl9uYW1lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsb2dnZXIgPSBzZWxmLmxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKHNlbGYubG9nZ2VyX25hbWUpCisgICAgICAgIGZvcm1hdHRlciA9IGxvZ2dpbmcuRm9ybWF0dGVyKHNlbGYuTE9HR0lOR19GT1JNQVQpCisgICAgICAgIGhhbmRsZXIgPSBfQ2FwdHVyaW5nSGFuZGxlcigpCisgICAgICAgIGhhbmRsZXIuc2V0Rm9ybWF0dGVyKGZvcm1hdHRlcikKKyAgICAgICAgc2VsZi53YXRjaGVyID0gaGFuZGxlci53YXRjaGVyCisgICAgICAgIHNlbGYub2xkX2hhbmRsZXJzID0gbG9nZ2VyLmhhbmRsZXJzWzpdCisgICAgICAgIHNlbGYub2xkX2xldmVsID0gbG9nZ2VyLmxldmVsCisgICAgICAgIHNlbGYub2xkX3Byb3BhZ2F0ZSA9IGxvZ2dlci5wcm9wYWdhdGUKKyAgICAgICAgbG9nZ2VyLmhhbmRsZXJzID0gW2hhbmRsZXJdCisgICAgICAgIGxvZ2dlci5zZXRMZXZlbChzZWxmLmxldmVsKQorICAgICAgICBsb2dnZXIucHJvcGFnYXRlID0gRmFsc2UKKyAgICAgICAgcmV0dXJuIGhhbmRsZXIud2F0Y2hlcgorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsIGV4Y190eXBlLCBleGNfdmFsdWUsIHRiKToKKyAgICAgICAgc2VsZi5sb2dnZXIuaGFuZGxlcnMgPSBzZWxmLm9sZF9oYW5kbGVycworICAgICAgICBzZWxmLmxvZ2dlci5wcm9wYWdhdGUgPSBzZWxmLm9sZF9wcm9wYWdhdGUKKyAgICAgICAgc2VsZi5sb2dnZXIuc2V0TGV2ZWwoc2VsZi5vbGRfbGV2ZWwpCisgICAgICAgIGlmIGV4Y190eXBlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgIyBsZXQgdW5leHBlY3RlZCBleGNlcHRpb25zIHBhc3MgdGhyb3VnaAorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGlmIGxlbihzZWxmLndhdGNoZXIucmVjb3JkcykgPT0gMDoKKyAgICAgICAgICAgIHNlbGYuX3JhaXNlRmFpbHVyZSgKKyAgICAgICAgICAgICAgICAibm8gbG9ncyBvZiBsZXZlbCB7fSBvciBoaWdoZXIgdHJpZ2dlcmVkIG9uIHt9IgorICAgICAgICAgICAgICAgIC5mb3JtYXQobG9nZ2luZy5nZXRMZXZlbE5hbWUoc2VsZi5sZXZlbCksIHNlbGYubG9nZ2VyLm5hbWUpKQorCisKIGNsYXNzIFRlc3RDYXNlKG9iamVjdCk6CiAgICAgIiIiQSBjbGFzcyB3aG9zZSBpbnN0YW5jZXMgYXJlIHNpbmdsZSB0ZXN0IGNhc2VzLgogCkBAIC0yNzAsNyArMzY2LDcgQEAKICAgICAgICAgICAgbm90IGhhdmUgYSBtZXRob2Qgd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWUuCiAgICAgICAgICIiIgogICAgICAgICBzZWxmLl90ZXN0TWV0aG9kTmFtZSA9IG1ldGhvZE5hbWUKLSAgICAgICAgc2VsZi5fb3V0Y29tZUZvckRvQ2xlYW51cHMgPSBOb25lCisgICAgICAgIHNlbGYuX291dGNvbWUgPSBOb25lCiAgICAgICAgIHNlbGYuX3Rlc3RNZXRob2REb2MgPSAnTm8gdGVzdCcKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgdGVzdE1ldGhvZCA9IGdldGF0dHIoc2VsZiwgbWV0aG9kTmFtZSkKQEAgLTI4Myw2ICszNzksNyBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5fdGVzdE1ldGhvZERvYyA9IHRlc3RNZXRob2QuX19kb2NfXwogICAgICAgICBzZWxmLl9jbGVhbnVwcyA9IFtdCisgICAgICAgIHNlbGYuX3N1YnRlc3QgPSBOb25lCiAKICAgICAgICAgIyBNYXAgdHlwZXMgdG8gY3VzdG9tIGFzc2VydEVxdWFsIGZ1bmN0aW9ucyB0aGF0IHdpbGwgY29tcGFyZQogICAgICAgICAjIGluc3RhbmNlcyBvZiBzYWlkIHR5cGUgaW4gbW9yZSBkZXRhaWwgdG8gZ2VuZXJhdGUgYSBtb3JlIHVzZWZ1bApAQCAtMzcwLDQ0ICs0NjcsODAgQEAKICAgICAgICAgcmV0dXJuICI8JXMgdGVzdE1ldGhvZD0lcz4iICUgXAogICAgICAgICAgICAgICAgKHN0cmNsYXNzKHNlbGYuX19jbGFzc19fKSwgc2VsZi5fdGVzdE1ldGhvZE5hbWUpCiAKLSAgICBkZWYgX2FkZFNraXAoc2VsZiwgcmVzdWx0LCByZWFzb24pOgorICAgIGRlZiBfYWRkU2tpcChzZWxmLCByZXN1bHQsIHRlc3RfY2FzZSwgcmVhc29uKToKICAgICAgICAgYWRkU2tpcCA9IGdldGF0dHIocmVzdWx0LCAnYWRkU2tpcCcsIE5vbmUpCiAgICAgICAgIGlmIGFkZFNraXAgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBhZGRTa2lwKHNlbGYsIHJlYXNvbikKKyAgICAgICAgICAgIGFkZFNraXAodGVzdF9jYXNlLCByZWFzb24pCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICB3YXJuaW5ncy53YXJuKCJUZXN0UmVzdWx0IGhhcyBubyBhZGRTa2lwIG1ldGhvZCwgc2tpcHMgbm90IHJlcG9ydGVkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgUnVudGltZVdhcm5pbmcsIDIpCi0gICAgICAgICAgICByZXN1bHQuYWRkU3VjY2VzcyhzZWxmKQorICAgICAgICAgICAgcmVzdWx0LmFkZFN1Y2Nlc3ModGVzdF9jYXNlKQogCi0gICAgZGVmIF9leGVjdXRlVGVzdFBhcnQoc2VsZiwgZnVuY3Rpb24sIG91dGNvbWUsIGlzVGVzdD1GYWxzZSk6CisgICAgQGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIKKyAgICBkZWYgc3ViVGVzdChzZWxmLCBtc2c9Tm9uZSwgKipwYXJhbXMpOgorICAgICAgICAiIiJSZXR1cm4gYSBjb250ZXh0IG1hbmFnZXIgdGhhdCB3aWxsIHJldHVybiB0aGUgZW5jbG9zZWQgYmxvY2sKKyAgICAgICAgb2YgY29kZSBpbiBhIHN1YnRlc3QgaWRlbnRpZmllZCBieSB0aGUgb3B0aW9uYWwgbWVzc2FnZSBhbmQKKyAgICAgICAga2V5d29yZCBwYXJhbWV0ZXJzLiAgQSBmYWlsdXJlIGluIHRoZSBzdWJ0ZXN0IG1hcmtzIHRoZSB0ZXN0CisgICAgICAgIGNhc2UgYXMgZmFpbGVkIGJ1dCByZXN1bWVzIGV4ZWN1dGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBlbmNsb3NlZAorICAgICAgICBibG9jaywgYWxsb3dpbmcgZnVydGhlciB0ZXN0IGNvZGUgdG8gYmUgZXhlY3V0ZWQuCisgICAgICAgICIiIgorICAgICAgICBpZiBub3Qgc2VsZi5fb3V0Y29tZS5yZXN1bHRfc3VwcG9ydHNfc3VidGVzdHM6CisgICAgICAgICAgICB5aWVsZAorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHBhcmVudCA9IHNlbGYuX3N1YnRlc3QKKyAgICAgICAgaWYgcGFyZW50IGlzIE5vbmU6CisgICAgICAgICAgICBwYXJhbXNfbWFwID0gY29sbGVjdGlvbnMuQ2hhaW5NYXAocGFyYW1zKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcGFyYW1zX21hcCA9IHBhcmVudC5wYXJhbXMubmV3X2NoaWxkKHBhcmFtcykKKyAgICAgICAgc2VsZi5fc3VidGVzdCA9IF9TdWJUZXN0KHNlbGYsIG1zZywgcGFyYW1zX21hcCkKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgZnVuY3Rpb24oKQotICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6Ci0gICAgICAgICAgICByYWlzZQotICAgICAgICBleGNlcHQgU2tpcFRlc3QgYXMgZToKLSAgICAgICAgICAgIG91dGNvbWUuc3VjY2VzcyA9IEZhbHNlCi0gICAgICAgICAgICBvdXRjb21lLnNraXBwZWQgPSBzdHIoZSkKLSAgICAgICAgZXhjZXB0IF9VbmV4cGVjdGVkU3VjY2VzczoKLSAgICAgICAgICAgIGV4Y19pbmZvID0gc3lzLmV4Y19pbmZvKCkKLSAgICAgICAgICAgIG91dGNvbWUuc3VjY2VzcyA9IEZhbHNlCi0gICAgICAgICAgICBpZiBpc1Rlc3Q6Ci0gICAgICAgICAgICAgICAgb3V0Y29tZS51bmV4cGVjdGVkU3VjY2VzcyA9IGV4Y19pbmZvCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIG91dGNvbWUuZXJyb3JzLmFwcGVuZChleGNfaW5mbykKLSAgICAgICAgZXhjZXB0IF9FeHBlY3RlZEZhaWx1cmU6Ci0gICAgICAgICAgICBvdXRjb21lLnN1Y2Nlc3MgPSBGYWxzZQotICAgICAgICAgICAgZXhjX2luZm8gPSBzeXMuZXhjX2luZm8oKQotICAgICAgICAgICAgaWYgaXNUZXN0OgotICAgICAgICAgICAgICAgIG91dGNvbWUuZXhwZWN0ZWRGYWlsdXJlID0gZXhjX2luZm8KLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgb3V0Y29tZS5lcnJvcnMuYXBwZW5kKGV4Y19pbmZvKQotICAgICAgICBleGNlcHQgc2VsZi5mYWlsdXJlRXhjZXB0aW9uOgotICAgICAgICAgICAgb3V0Y29tZS5zdWNjZXNzID0gRmFsc2UKLSAgICAgICAgICAgIG91dGNvbWUuZmFpbHVyZXMuYXBwZW5kKHN5cy5leGNfaW5mbygpKQotICAgICAgICAgICAgZXhjX2luZm8gPSBzeXMuZXhjX2luZm8oKQotICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICBvdXRjb21lLnN1Y2Nlc3MgPSBGYWxzZQotICAgICAgICAgICAgb3V0Y29tZS5lcnJvcnMuYXBwZW5kKHN5cy5leGNfaW5mbygpKQorICAgICAgICAgICAgd2l0aCBzZWxmLl9vdXRjb21lLnRlc3RQYXJ0RXhlY3V0b3Ioc2VsZi5fc3VidGVzdCwgaXNUZXN0PVRydWUpOgorICAgICAgICAgICAgICAgIHlpZWxkCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5fb3V0Y29tZS5zdWNjZXNzOgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuX291dGNvbWUucmVzdWx0CisgICAgICAgICAgICAgICAgaWYgcmVzdWx0IGlzIG5vdCBOb25lIGFuZCByZXN1bHQuZmFpbGZhc3Q6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIF9TaG91bGRTdG9wCisgICAgICAgICAgICBlbGlmIHNlbGYuX291dGNvbWUuZXhwZWN0ZWRGYWlsdXJlOgorICAgICAgICAgICAgICAgICMgSWYgdGhlIHRlc3QgaXMgZXhwZWN0aW5nIGEgZmFpbHVyZSwgd2UgcmVhbGx5IHdhbnQgdG8KKyAgICAgICAgICAgICAgICAjIHN0b3Agbm93IGFuZCByZWdpc3RlciB0aGUgZXhwZWN0ZWQgZmFpbHVyZS4KKyAgICAgICAgICAgICAgICByYWlzZSBfU2hvdWxkU3RvcAorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5fc3VidGVzdCA9IHBhcmVudAorCisgICAgZGVmIF9mZWVkRXJyb3JzVG9SZXN1bHQoc2VsZiwgcmVzdWx0LCBlcnJvcnMpOgorICAgICAgICBmb3IgdGVzdCwgZXhjX2luZm8gaW4gZXJyb3JzOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh0ZXN0LCBfU3ViVGVzdCk6CisgICAgICAgICAgICAgICAgcmVzdWx0LmFkZFN1YlRlc3QodGVzdC50ZXN0X2Nhc2UsIHRlc3QsIGV4Y19pbmZvKQorICAgICAgICAgICAgZWxpZiBleGNfaW5mbyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBpZiBpc3N1YmNsYXNzKGV4Y19pbmZvWzBdLCBzZWxmLmZhaWx1cmVFeGNlcHRpb24pOgorICAgICAgICAgICAgICAgICAgICByZXN1bHQuYWRkRmFpbHVyZSh0ZXN0LCBleGNfaW5mbykKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByZXN1bHQuYWRkRXJyb3IodGVzdCwgZXhjX2luZm8pCisKKyAgICBkZWYgX2FkZEV4cGVjdGVkRmFpbHVyZShzZWxmLCByZXN1bHQsIGV4Y19pbmZvKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYWRkRXhwZWN0ZWRGYWlsdXJlID0gcmVzdWx0LmFkZEV4cGVjdGVkRmFpbHVyZQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICB3YXJuaW5ncy53YXJuKCJUZXN0UmVzdWx0IGhhcyBubyBhZGRFeHBlY3RlZEZhaWx1cmUgbWV0aG9kLCByZXBvcnRpbmcgYXMgcGFzc2VzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUnVudGltZVdhcm5pbmcpCisgICAgICAgICAgICByZXN1bHQuYWRkU3VjY2VzcyhzZWxmKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYWRkRXhwZWN0ZWRGYWlsdXJlKHNlbGYsIGV4Y19pbmZvKQorCisgICAgZGVmIF9hZGRVbmV4cGVjdGVkU3VjY2VzcyhzZWxmLCByZXN1bHQpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBhZGRVbmV4cGVjdGVkU3VjY2VzcyA9IHJlc3VsdC5hZGRVbmV4cGVjdGVkU3VjY2VzcworICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICB3YXJuaW5ncy53YXJuKCJUZXN0UmVzdWx0IGhhcyBubyBhZGRVbmV4cGVjdGVkU3VjY2VzcyBtZXRob2QsIHJlcG9ydGluZyBhcyBmYWlsdXJlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUnVudGltZVdhcm5pbmcpCisgICAgICAgICAgICAjIFdlIG5lZWQgdG8gcGFzcyBhbiBhY3R1YWwgZXhjZXB0aW9uIGFuZCB0cmFjZWJhY2sgdG8gYWRkRmFpbHVyZSwKKyAgICAgICAgICAgICMgb3RoZXJ3aXNlIHRoZSBsZWdhY3kgcmVzdWx0IGNhbiBjaG9rZS4KKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByYWlzZSBfVW5leHBlY3RlZFN1Y2Nlc3MgZnJvbSBOb25lCisgICAgICAgICAgICBleGNlcHQgX1VuZXhwZWN0ZWRTdWNjZXNzOgorICAgICAgICAgICAgICAgIHJlc3VsdC5hZGRGYWlsdXJlKHNlbGYsIHN5cy5leGNfaW5mbygpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYWRkVW5leHBlY3RlZFN1Y2Nlc3Moc2VsZikKIAogICAgIGRlZiBydW4oc2VsZiwgcmVzdWx0PU5vbmUpOgogICAgICAgICBvcmlnX3Jlc3VsdCA9IHJlc3VsdApAQCAtNDI2LDQ2ICs1NTksNDEgQEAKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBza2lwX3doeSA9IChnZXRhdHRyKHNlbGYuX19jbGFzc19fLCAnX191bml0dGVzdF9za2lwX3doeV9fJywgJycpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgZ2V0YXR0cih0ZXN0TWV0aG9kLCAnX191bml0dGVzdF9za2lwX3doeV9fJywgJycpKQotICAgICAgICAgICAgICAgIHNlbGYuX2FkZFNraXAocmVzdWx0LCBza2lwX3doeSkKKyAgICAgICAgICAgICAgICBzZWxmLl9hZGRTa2lwKHJlc3VsdCwgc2VsZiwgc2tpcF93aHkpCiAgICAgICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgICAgIHJlc3VsdC5zdG9wVGVzdChzZWxmKQogICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGV4cGVjdGluZ19mYWlsdXJlX21ldGhvZCA9IGdldGF0dHIodGVzdE1ldGhvZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiX191bml0dGVzdF9leHBlY3RpbmdfZmFpbHVyZV9fIiwgRmFsc2UpCisgICAgICAgIGV4cGVjdGluZ19mYWlsdXJlX2NsYXNzID0gZ2V0YXR0cihzZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl9fdW5pdHRlc3RfZXhwZWN0aW5nX2ZhaWx1cmVfXyIsIEZhbHNlKQorICAgICAgICBleHBlY3RpbmdfZmFpbHVyZSA9IGV4cGVjdGluZ19mYWlsdXJlX2NsYXNzIG9yIGV4cGVjdGluZ19mYWlsdXJlX21ldGhvZAorICAgICAgICBvdXRjb21lID0gX091dGNvbWUocmVzdWx0KQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBvdXRjb21lID0gX091dGNvbWUoKQotICAgICAgICAgICAgc2VsZi5fb3V0Y29tZUZvckRvQ2xlYW51cHMgPSBvdXRjb21lCisgICAgICAgICAgICBzZWxmLl9vdXRjb21lID0gb3V0Y29tZQogCi0gICAgICAgICAgICBzZWxmLl9leGVjdXRlVGVzdFBhcnQoc2VsZi5zZXRVcCwgb3V0Y29tZSkKKyAgICAgICAgICAgIHdpdGggb3V0Y29tZS50ZXN0UGFydEV4ZWN1dG9yKHNlbGYpOgorICAgICAgICAgICAgICAgIHNlbGYuc2V0VXAoKQogICAgICAgICAgICAgaWYgb3V0Y29tZS5zdWNjZXNzOgotICAgICAgICAgICAgICAgIHNlbGYuX2V4ZWN1dGVUZXN0UGFydCh0ZXN0TWV0aG9kLCBvdXRjb21lLCBpc1Rlc3Q9VHJ1ZSkKLSAgICAgICAgICAgICAgICBzZWxmLl9leGVjdXRlVGVzdFBhcnQoc2VsZi50ZWFyRG93biwgb3V0Y29tZSkKKyAgICAgICAgICAgICAgICBvdXRjb21lLmV4cGVjdGluZ19mYWlsdXJlID0gZXhwZWN0aW5nX2ZhaWx1cmUKKyAgICAgICAgICAgICAgICB3aXRoIG91dGNvbWUudGVzdFBhcnRFeGVjdXRvcihzZWxmLCBpc1Rlc3Q9VHJ1ZSk6CisgICAgICAgICAgICAgICAgICAgIHRlc3RNZXRob2QoKQorICAgICAgICAgICAgICAgIG91dGNvbWUuZXhwZWN0aW5nX2ZhaWx1cmUgPSBGYWxzZQorICAgICAgICAgICAgICAgIHdpdGggb3V0Y29tZS50ZXN0UGFydEV4ZWN1dG9yKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnRlYXJEb3duKCkKIAogICAgICAgICAgICAgc2VsZi5kb0NsZWFudXBzKCkKKyAgICAgICAgICAgIGZvciB0ZXN0LCByZWFzb24gaW4gb3V0Y29tZS5za2lwcGVkOgorICAgICAgICAgICAgICAgIHNlbGYuX2FkZFNraXAocmVzdWx0LCB0ZXN0LCByZWFzb24pCisgICAgICAgICAgICBzZWxmLl9mZWVkRXJyb3JzVG9SZXN1bHQocmVzdWx0LCBvdXRjb21lLmVycm9ycykKICAgICAgICAgICAgIGlmIG91dGNvbWUuc3VjY2VzczoKLSAgICAgICAgICAgICAgICByZXN1bHQuYWRkU3VjY2VzcyhzZWxmKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBpZiBvdXRjb21lLnNraXBwZWQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuX2FkZFNraXAocmVzdWx0LCBvdXRjb21lLnNraXBwZWQpCi0gICAgICAgICAgICAgICAgZm9yIGV4Y19pbmZvIGluIG91dGNvbWUuZXJyb3JzOgotICAgICAgICAgICAgICAgICAgICByZXN1bHQuYWRkRXJyb3Ioc2VsZiwgZXhjX2luZm8pCi0gICAgICAgICAgICAgICAgZm9yIGV4Y19pbmZvIGluIG91dGNvbWUuZmFpbHVyZXM6Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hZGRGYWlsdXJlKHNlbGYsIGV4Y19pbmZvKQotICAgICAgICAgICAgICAgIGlmIG91dGNvbWUudW5leHBlY3RlZFN1Y2Nlc3MgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgIGFkZFVuZXhwZWN0ZWRTdWNjZXNzID0gZ2V0YXR0cihyZXN1bHQsICdhZGRVbmV4cGVjdGVkU3VjY2VzcycsIE5vbmUpCi0gICAgICAgICAgICAgICAgICAgIGlmIGFkZFVuZXhwZWN0ZWRTdWNjZXNzIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgICAgICAgICAgYWRkVW5leHBlY3RlZFN1Y2Nlc3Moc2VsZikKKyAgICAgICAgICAgICAgICBpZiBleHBlY3RpbmdfZmFpbHVyZToKKyAgICAgICAgICAgICAgICAgICAgaWYgb3V0Y29tZS5leHBlY3RlZEZhaWx1cmU6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9hZGRFeHBlY3RlZEZhaWx1cmUocmVzdWx0LCBvdXRjb21lLmV4cGVjdGVkRmFpbHVyZSkKICAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oIlRlc3RSZXN1bHQgaGFzIG5vIGFkZFVuZXhwZWN0ZWRTdWNjZXNzIG1ldGhvZCwgcmVwb3J0aW5nIGFzIGZhaWx1cmVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUnVudGltZVdhcm5pbmcpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuYWRkRmFpbHVyZShzZWxmLCBvdXRjb21lLnVuZXhwZWN0ZWRTdWNjZXNzKQotCi0gICAgICAgICAgICAgICAgaWYgb3V0Y29tZS5leHBlY3RlZEZhaWx1cmUgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgIGFkZEV4cGVjdGVkRmFpbHVyZSA9IGdldGF0dHIocmVzdWx0LCAnYWRkRXhwZWN0ZWRGYWlsdXJlJywgTm9uZSkKLSAgICAgICAgICAgICAgICAgICAgaWYgYWRkRXhwZWN0ZWRGYWlsdXJlIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgICAgICAgICAgYWRkRXhwZWN0ZWRGYWlsdXJlKHNlbGYsIG91dGNvbWUuZXhwZWN0ZWRGYWlsdXJlKQotICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ3Mud2FybigiVGVzdFJlc3VsdCBoYXMgbm8gYWRkRXhwZWN0ZWRGYWlsdXJlIG1ldGhvZCwgcmVwb3J0aW5nIGFzIHBhc3NlcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJ1bnRpbWVXYXJuaW5nKQotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFkZFN1Y2Nlc3Moc2VsZikKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2FkZFVuZXhwZWN0ZWRTdWNjZXNzKHJlc3VsdCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByZXN1bHQuYWRkU3VjY2VzcyhzZWxmKQogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgcmVzdWx0LnN0b3BUZXN0KHNlbGYpCkBAIC00NzQsMTQgKzYwMiwyMyBAQAogICAgICAgICAgICAgICAgIGlmIHN0b3BUZXN0UnVuIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgICAgICBzdG9wVGVzdFJ1bigpCiAKKyAgICAgICAgICAgICMgZXhwbGljaXRseSBicmVhayByZWZlcmVuY2UgY3ljbGVzOgorICAgICAgICAgICAgIyBvdXRjb21lLmVycm9ycyAtPiBmcmFtZSAtPiBvdXRjb21lIC0+IG91dGNvbWUuZXJyb3JzCisgICAgICAgICAgICAjIG91dGNvbWUuZXhwZWN0ZWRGYWlsdXJlIC0+IGZyYW1lIC0+IG91dGNvbWUgLT4gb3V0Y29tZS5leHBlY3RlZEZhaWx1cmUKKyAgICAgICAgICAgIG91dGNvbWUuZXJyb3JzLmNsZWFyKCkKKyAgICAgICAgICAgIG91dGNvbWUuZXhwZWN0ZWRGYWlsdXJlID0gTm9uZQorCisgICAgICAgICAgICAjIGNsZWFyIHRoZSBvdXRjb21lLCBubyBtb3JlIG5lZWRlZAorICAgICAgICAgICAgc2VsZi5fb3V0Y29tZSA9IE5vbmUKKwogICAgIGRlZiBkb0NsZWFudXBzKHNlbGYpOgogICAgICAgICAiIiJFeGVjdXRlIGFsbCBjbGVhbnVwIGZ1bmN0aW9ucy4gTm9ybWFsbHkgY2FsbGVkIGZvciB5b3UgYWZ0ZXIKICAgICAgICAgdGVhckRvd24uIiIiCi0gICAgICAgIG91dGNvbWUgPSBzZWxmLl9vdXRjb21lRm9yRG9DbGVhbnVwcyBvciBfT3V0Y29tZSgpCisgICAgICAgIG91dGNvbWUgPSBzZWxmLl9vdXRjb21lIG9yIF9PdXRjb21lKCkKICAgICAgICAgd2hpbGUgc2VsZi5fY2xlYW51cHM6CiAgICAgICAgICAgICBmdW5jdGlvbiwgYXJncywga3dhcmdzID0gc2VsZi5fY2xlYW51cHMucG9wKCkKLSAgICAgICAgICAgIHBhcnQgPSBsYW1iZGE6IGZ1bmN0aW9uKCphcmdzLCAqKmt3YXJncykKLSAgICAgICAgICAgIHNlbGYuX2V4ZWN1dGVUZXN0UGFydChwYXJ0LCBvdXRjb21lKQorICAgICAgICAgICAgd2l0aCBvdXRjb21lLnRlc3RQYXJ0RXhlY3V0b3Ioc2VsZik6CisgICAgICAgICAgICAgICAgZnVuY3Rpb24oKmFyZ3MsICoqa3dhcmdzKQogCiAgICAgICAgICMgcmV0dXJuIHRoaXMgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5CiAgICAgICAgICMgZXZlbiB0aG91Z2ggd2Ugbm8gbG9uZ2VyIHVzIGl0IGludGVybmFsbHkKQEAgLTYwMCw2ICs3MzcsMjggQEAKICAgICAgICAgY29udGV4dCA9IF9Bc3NlcnRXYXJuc0NvbnRleHQoZXhwZWN0ZWRfd2FybmluZywgc2VsZiwgY2FsbGFibGVfb2JqKQogICAgICAgICByZXR1cm4gY29udGV4dC5oYW5kbGUoJ2Fzc2VydFdhcm5zJywgY2FsbGFibGVfb2JqLCBhcmdzLCBrd2FyZ3MpCiAKKyAgICBkZWYgYXNzZXJ0TG9ncyhzZWxmLCBsb2dnZXI9Tm9uZSwgbGV2ZWw9Tm9uZSk6CisgICAgICAgICIiIkZhaWwgdW5sZXNzIGEgbG9nIG1lc3NhZ2Ugb2YgbGV2ZWwgKmxldmVsKiBvciBoaWdoZXIgaXMgZW1pdHRlZAorICAgICAgICBvbiAqbG9nZ2VyX25hbWUqIG9yIGl0cyBjaGlsZHJlbi4gIElmIG9taXR0ZWQsICpsZXZlbCogZGVmYXVsdHMgdG8KKyAgICAgICAgSU5GTyBhbmQgKmxvZ2dlciogZGVmYXVsdHMgdG8gdGhlIHJvb3QgbG9nZ2VyLgorCisgICAgICAgIFRoaXMgbWV0aG9kIG11c3QgYmUgdXNlZCBhcyBhIGNvbnRleHQgbWFuYWdlciwgYW5kIHdpbGwgeWllbGQKKyAgICAgICAgYSByZWNvcmRpbmcgb2JqZWN0IHdpdGggdHdvIGF0dHJpYnV0ZXM6IGBvdXRwdXRgIGFuZCBgcmVjb3Jkc2AuCisgICAgICAgIEF0IHRoZSBlbmQgb2YgdGhlIGNvbnRleHQgbWFuYWdlciwgdGhlIGBvdXRwdXRgIGF0dHJpYnV0ZSB3aWxsCisgICAgICAgIGJlIGEgbGlzdCBvZiB0aGUgbWF0Y2hpbmcgZm9ybWF0dGVkIGxvZyBtZXNzYWdlcyBhbmQgdGhlCisgICAgICAgIGByZWNvcmRzYCBhdHRyaWJ1dGUgd2lsbCBiZSBhIGxpc3Qgb2YgdGhlIGNvcnJlc3BvbmRpbmcgTG9nUmVjb3JkCisgICAgICAgIG9iamVjdHMuCisKKyAgICAgICAgRXhhbXBsZTo6CisKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRMb2dzKCdmb28nLCBsZXZlbD0nSU5GTycpIGFzIGNtOgorICAgICAgICAgICAgICAgIGxvZ2dpbmcuZ2V0TG9nZ2VyKCdmb28nKS5pbmZvKCdmaXJzdCBtZXNzYWdlJykKKyAgICAgICAgICAgICAgICBsb2dnaW5nLmdldExvZ2dlcignZm9vLmJhcicpLmVycm9yKCdzZWNvbmQgbWVzc2FnZScpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLm91dHB1dCwgWydJTkZPOmZvbzpmaXJzdCBtZXNzYWdlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0VSUk9SOmZvby5iYXI6c2Vjb25kIG1lc3NhZ2UnXSkKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBfQXNzZXJ0TG9nc0NvbnRleHQoc2VsZiwgbG9nZ2VyLCBsZXZlbCkKKwogICAgIGRlZiBfZ2V0QXNzZXJ0RXF1YWxpdHlGdW5jKHNlbGYsIGZpcnN0LCBzZWNvbmQpOgogICAgICAgICAiIiJHZXQgYSBkZXRhaWxlZCBjb21wYXJpc29uIGZ1bmN0aW9uIGZvciB0aGUgdHlwZXMgb2YgdGhlIHR3byBhcmdzLgogCkBAIC02MjksNyArNzg4LDcgQEAKICAgICBkZWYgX2Jhc2VBc3NlcnRFcXVhbChzZWxmLCBmaXJzdCwgc2Vjb25kLCBtc2c9Tm9uZSk6CiAgICAgICAgICIiIlRoZSBkZWZhdWx0IGFzc2VydEVxdWFsIGltcGxlbWVudGF0aW9uLCBub3QgdHlwZSBzcGVjaWZpYy4iIiIKICAgICAgICAgaWYgbm90IGZpcnN0ID09IHNlY29uZDoKLSAgICAgICAgICAgIHN0YW5kYXJkTXNnID0gJyVzICE9ICVzJyAlIChzYWZlX3JlcHIoZmlyc3QpLCBzYWZlX3JlcHIoc2Vjb25kKSkKKyAgICAgICAgICAgIHN0YW5kYXJkTXNnID0gJyVzICE9ICVzJyAlIF9jb21tb25fc2hvcnRlbl9yZXByKGZpcnN0LCBzZWNvbmQpCiAgICAgICAgICAgICBtc2cgPSBzZWxmLl9mb3JtYXRNZXNzYWdlKG1zZywgc3RhbmRhcmRNc2cpCiAgICAgICAgICAgICByYWlzZSBzZWxmLmZhaWx1cmVFeGNlcHRpb24obXNnKQogCkBAIC03NjQsMTQgKzkyMyw5IEBACiAgICAgICAgICAgICBpZiBzZXExID09IHNlcTI6CiAgICAgICAgICAgICAgICAgcmV0dXJuCiAKLSAgICAgICAgICAgIHNlcTFfcmVwciA9IHNhZmVfcmVwcihzZXExKQotICAgICAgICAgICAgc2VxMl9yZXByID0gc2FmZV9yZXByKHNlcTIpCi0gICAgICAgICAgICBpZiBsZW4oc2VxMV9yZXByKSA+IDMwOgotICAgICAgICAgICAgICAgIHNlcTFfcmVwciA9IHNlcTFfcmVwcls6MzBdICsgJy4uLicKLSAgICAgICAgICAgIGlmIGxlbihzZXEyX3JlcHIpID4gMzA6Ci0gICAgICAgICAgICAgICAgc2VxMl9yZXByID0gc2VxMl9yZXByWzozMF0gKyAnLi4uJwotICAgICAgICAgICAgZWxlbWVudHMgPSAoc2VxX3R5cGVfbmFtZS5jYXBpdGFsaXplKCksIHNlcTFfcmVwciwgc2VxMl9yZXByKQotICAgICAgICAgICAgZGlmZmVyaW5nID0gJyVzcyBkaWZmZXI6ICVzICE9ICVzXG4nICUgZWxlbWVudHMKKyAgICAgICAgICAgIGRpZmZlcmluZyA9ICclc3MgZGlmZmVyOiAlcyAhPSAlc1xuJyAlICgKKyAgICAgICAgICAgICAgICAgICAgKHNlcV90eXBlX25hbWUuY2FwaXRhbGl6ZSgpLCkgKworICAgICAgICAgICAgICAgICAgICBfY29tbW9uX3Nob3J0ZW5fcmVwcihzZXExLCBzZXEyKSkKIAogICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UobWluKGxlbjEsIGxlbjIpKToKICAgICAgICAgICAgICAgICB0cnk6CkBAIC05MjksNyArMTA4Myw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShkMiwgZGljdCwgJ1NlY29uZCBhcmd1bWVudCBpcyBub3QgYSBkaWN0aW9uYXJ5JykKIAogICAgICAgICBpZiBkMSAhPSBkMjoKLSAgICAgICAgICAgIHN0YW5kYXJkTXNnID0gJyVzICE9ICVzJyAlIChzYWZlX3JlcHIoZDEsIFRydWUpLCBzYWZlX3JlcHIoZDIsIFRydWUpKQorICAgICAgICAgICAgc3RhbmRhcmRNc2cgPSAnJXMgIT0gJXMnICUgX2NvbW1vbl9zaG9ydGVuX3JlcHIoZDEsIGQyKQogICAgICAgICAgICAgZGlmZiA9ICgnXG4nICsgJ1xuJy5qb2luKGRpZmZsaWIubmRpZmYoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcHJpbnQucGZvcm1hdChkMSkuc3BsaXRsaW5lcygpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgcHByaW50LnBmb3JtYXQoZDIpLnNwbGl0bGluZXMoKSkpKQpAQCAtMTAxMyw4ICsxMTY3LDcgQEAKICAgICAgICAgICAgIGlmIGxlbihmaXJzdGxpbmVzKSA9PSAxIGFuZCBmaXJzdC5zdHJpcCgnXHJcbicpID09IGZpcnN0OgogICAgICAgICAgICAgICAgIGZpcnN0bGluZXMgPSBbZmlyc3QgKyAnXG4nXQogICAgICAgICAgICAgICAgIHNlY29uZGxpbmVzID0gW3NlY29uZCArICdcbiddCi0gICAgICAgICAgICBzdGFuZGFyZE1zZyA9ICclcyAhPSAlcycgJSAoc2FmZV9yZXByKGZpcnN0LCBUcnVlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYWZlX3JlcHIoc2Vjb25kLCBUcnVlKSkKKyAgICAgICAgICAgIHN0YW5kYXJkTXNnID0gJyVzICE9ICVzJyAlIF9jb21tb25fc2hvcnRlbl9yZXByKGZpcnN0LCBzZWNvbmQpCiAgICAgICAgICAgICBkaWZmID0gJ1xuJyArICcnLmpvaW4oZGlmZmxpYi5uZGlmZihmaXJzdGxpbmVzLCBzZWNvbmRsaW5lcykpCiAgICAgICAgICAgICBzdGFuZGFyZE1zZyA9IHNlbGYuX3RydW5jYXRlTWVzc2FnZShzdGFuZGFyZE1zZywgZGlmZikKICAgICAgICAgICAgIHNlbGYuZmFpbChzZWxmLl9mb3JtYXRNZXNzYWdlKG1zZywgc3RhbmRhcmRNc2cpKQpAQCAtMTE5Miw5ICsxMzQ1LDYgQEAKICAgICAgICAgICAgICAgIHNlbGYuX3Rlc3RGdW5jID09IG90aGVyLl90ZXN0RnVuYyBhbmQgXAogICAgICAgICAgICAgICAgc2VsZi5fZGVzY3JpcHRpb24gPT0gb3RoZXIuX2Rlc2NyaXB0aW9uCiAKLSAgICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKLSAgICAgICAgcmV0dXJuIG5vdCBzZWxmID09IG90aGVyCi0KICAgICBkZWYgX19oYXNoX18oc2VsZik6CiAgICAgICAgIHJldHVybiBoYXNoKCh0eXBlKHNlbGYpLCBzZWxmLl9zZXRVcEZ1bmMsIHNlbGYuX3RlYXJEb3duRnVuYywKICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3Rlc3RGdW5jLCBzZWxmLl9kZXNjcmlwdGlvbikpCkBAIC0xMjEyLDMgKzEzNjIsMzkgQEAKICAgICAgICAgICAgIHJldHVybiBzZWxmLl9kZXNjcmlwdGlvbgogICAgICAgICBkb2MgPSBzZWxmLl90ZXN0RnVuYy5fX2RvY19fCiAgICAgICAgIHJldHVybiBkb2MgYW5kIGRvYy5zcGxpdCgiXG4iKVswXS5zdHJpcCgpIG9yIE5vbmUKKworCitjbGFzcyBfU3ViVGVzdChUZXN0Q2FzZSk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGVzdF9jYXNlLCBtZXNzYWdlLCBwYXJhbXMpOgorICAgICAgICBzdXBlcigpLl9faW5pdF9fKCkKKyAgICAgICAgc2VsZi5fbWVzc2FnZSA9IG1lc3NhZ2UKKyAgICAgICAgc2VsZi50ZXN0X2Nhc2UgPSB0ZXN0X2Nhc2UKKyAgICAgICAgc2VsZi5wYXJhbXMgPSBwYXJhbXMKKyAgICAgICAgc2VsZi5mYWlsdXJlRXhjZXB0aW9uID0gdGVzdF9jYXNlLmZhaWx1cmVFeGNlcHRpb24KKworICAgIGRlZiBydW5UZXN0KHNlbGYpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCJzdWJ0ZXN0cyBjYW5ub3QgYmUgcnVuIGRpcmVjdGx5IikKKworICAgIGRlZiBfc3ViRGVzY3JpcHRpb24oc2VsZik6CisgICAgICAgIHBhcnRzID0gW10KKyAgICAgICAgaWYgc2VsZi5fbWVzc2FnZToKKyAgICAgICAgICAgIHBhcnRzLmFwcGVuZCgiW3t9XSIuZm9ybWF0KHNlbGYuX21lc3NhZ2UpKQorICAgICAgICBpZiBzZWxmLnBhcmFtczoKKyAgICAgICAgICAgIHBhcmFtc19kZXNjID0gJywgJy5qb2luKAorICAgICAgICAgICAgICAgICJ7fT17IXJ9Ii5mb3JtYXQoaywgdikKKyAgICAgICAgICAgICAgICBmb3IgKGssIHYpIGluIHNvcnRlZChzZWxmLnBhcmFtcy5pdGVtcygpKSkKKyAgICAgICAgICAgIHBhcnRzLmFwcGVuZCgiKHt9KSIuZm9ybWF0KHBhcmFtc19kZXNjKSkKKyAgICAgICAgcmV0dXJuICIgIi5qb2luKHBhcnRzKSBvciAnKDxzdWJ0ZXN0PiknCisKKyAgICBkZWYgaWQoc2VsZik6CisgICAgICAgIHJldHVybiAie30ge30iLmZvcm1hdChzZWxmLnRlc3RfY2FzZS5pZCgpLCBzZWxmLl9zdWJEZXNjcmlwdGlvbigpKQorCisgICAgZGVmIHNob3J0RGVzY3JpcHRpb24oc2VsZik6CisgICAgICAgICIiIlJldHVybnMgYSBvbmUtbGluZSBkZXNjcmlwdGlvbiBvZiB0aGUgc3VidGVzdCwgb3IgTm9uZSBpZiBubworICAgICAgICBkZXNjcmlwdGlvbiBoYXMgYmVlbiBwcm92aWRlZC4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBzZWxmLnRlc3RfY2FzZS5zaG9ydERlc2NyaXB0aW9uKCkKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gInt9IHt9Ii5mb3JtYXQoc2VsZi50ZXN0X2Nhc2UsIHNlbGYuX3N1YkRlc2NyaXB0aW9uKCkpCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvbG9hZGVyLnB5IGIvTGliL3VuaXR0ZXN0L2xvYWRlci5weQppbmRleCA5YWIyNmMxLi5hZjM5MjE2IDEwMDY0NAotLS0gYS9MaWIvdW5pdHRlc3QvbG9hZGVyLnB5CisrKyBiL0xpYi91bml0dGVzdC9sb2FkZXIucHkKQEAgLTE5LDE5ICsxOSwzOCBAQAogVkFMSURfTU9EVUxFX05BTUUgPSByZS5jb21waWxlKHInW19hLXpdXHcqXC5weSQnLCByZS5JR05PUkVDQVNFKQogCiAKK2NsYXNzIF9GYWlsZWRUZXN0KGNhc2UuVGVzdENhc2UpOgorICAgIF90ZXN0TWV0aG9kTmFtZSA9IE5vbmUKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtZXRob2RfbmFtZSwgZXhjZXB0aW9uKToKKyAgICAgICAgc2VsZi5fZXhjZXB0aW9uID0gZXhjZXB0aW9uCisgICAgICAgIHN1cGVyKF9GYWlsZWRUZXN0LCBzZWxmKS5fX2luaXRfXyhtZXRob2RfbmFtZSkKKworICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgaWYgbmFtZSAhPSBzZWxmLl90ZXN0TWV0aG9kTmFtZToKKyAgICAgICAgICAgIHJldHVybiBzdXBlcihfRmFpbGVkVGVzdCwgc2VsZikuX19nZXRhdHRyX18obmFtZSkKKyAgICAgICAgZGVmIHRlc3RGYWlsdXJlKCk6CisgICAgICAgICAgICByYWlzZSBzZWxmLl9leGNlcHRpb24KKyAgICAgICAgcmV0dXJuIHRlc3RGYWlsdXJlCisKKwogZGVmIF9tYWtlX2ZhaWxlZF9pbXBvcnRfdGVzdChuYW1lLCBzdWl0ZUNsYXNzKToKICAgICBtZXNzYWdlID0gJ0ZhaWxlZCB0byBpbXBvcnQgdGVzdCBtb2R1bGU6ICVzXG4lcycgJSAobmFtZSwgdHJhY2ViYWNrLmZvcm1hdF9leGMoKSkKLSAgICByZXR1cm4gX21ha2VfZmFpbGVkX3Rlc3QoJ01vZHVsZUltcG9ydEZhaWx1cmUnLCBuYW1lLCBJbXBvcnRFcnJvcihtZXNzYWdlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VpdGVDbGFzcykKKyAgICByZXR1cm4gX21ha2VfZmFpbGVkX3Rlc3QobmFtZSwgSW1wb3J0RXJyb3IobWVzc2FnZSksIHN1aXRlQ2xhc3MpCiAKIGRlZiBfbWFrZV9mYWlsZWRfbG9hZF90ZXN0cyhuYW1lLCBleGNlcHRpb24sIHN1aXRlQ2xhc3MpOgotICAgIHJldHVybiBfbWFrZV9mYWlsZWRfdGVzdCgnTG9hZFRlc3RzRmFpbHVyZScsIG5hbWUsIGV4Y2VwdGlvbiwgc3VpdGVDbGFzcykKKyAgICByZXR1cm4gX21ha2VfZmFpbGVkX3Rlc3QobmFtZSwgZXhjZXB0aW9uLCBzdWl0ZUNsYXNzKQogCi1kZWYgX21ha2VfZmFpbGVkX3Rlc3QoY2xhc3NuYW1lLCBtZXRob2RuYW1lLCBleGNlcHRpb24sIHN1aXRlQ2xhc3MpOgotICAgIGRlZiB0ZXN0RmFpbHVyZShzZWxmKToKLSAgICAgICAgcmFpc2UgZXhjZXB0aW9uCi0gICAgYXR0cnMgPSB7bWV0aG9kbmFtZTogdGVzdEZhaWx1cmV9Ci0gICAgVGVzdENsYXNzID0gdHlwZShjbGFzc25hbWUsIChjYXNlLlRlc3RDYXNlLCksIGF0dHJzKQorZGVmIF9tYWtlX2ZhaWxlZF90ZXN0KG1ldGhvZG5hbWUsIGV4Y2VwdGlvbiwgc3VpdGVDbGFzcyk6CisgICAgdGVzdCA9IF9GYWlsZWRUZXN0KG1ldGhvZG5hbWUsIGV4Y2VwdGlvbikKKyAgICByZXR1cm4gc3VpdGVDbGFzcygodGVzdCwpKQorCitkZWYgX21ha2Vfc2tpcHBlZF90ZXN0KG1ldGhvZG5hbWUsIGV4Y2VwdGlvbiwgc3VpdGVDbGFzcyk6CisgICAgQGNhc2Uuc2tpcChzdHIoZXhjZXB0aW9uKSkKKyAgICBkZWYgdGVzdFNraXBwZWQoc2VsZik6CisgICAgICAgIHBhc3MKKyAgICBhdHRycyA9IHttZXRob2RuYW1lOiB0ZXN0U2tpcHBlZH0KKyAgICBUZXN0Q2xhc3MgPSB0eXBlKCJNb2R1bGVTa2lwcGVkIiwgKGNhc2UuVGVzdENhc2UsKSwgYXR0cnMpCiAgICAgcmV0dXJuIHN1aXRlQ2xhc3MoKFRlc3RDbGFzcyhtZXRob2RuYW1lKSwpKQogCiBkZWYgX2p5dGhvbl9hd2FyZV9zcGxpdGV4dChwYXRoKToKQEAgLTUzLDggKzcyLDkgQEAKICAgICBkZWYgbG9hZFRlc3RzRnJvbVRlc3RDYXNlKHNlbGYsIHRlc3RDYXNlQ2xhc3MpOgogICAgICAgICAiIiJSZXR1cm4gYSBzdWl0ZSBvZiBhbGwgdGVzdHMgY2FzZXMgY29udGFpbmVkIGluIHRlc3RDYXNlQ2xhc3MiIiIKICAgICAgICAgaWYgaXNzdWJjbGFzcyh0ZXN0Q2FzZUNsYXNzLCBzdWl0ZS5UZXN0U3VpdGUpOgotICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJUZXN0IGNhc2VzIHNob3VsZCBub3QgYmUgZGVyaXZlZCBmcm9tIFRlc3RTdWl0ZS4iIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBNYXliZSB5b3UgbWVhbnQgdG8gZGVyaXZlIGZyb20gVGVzdENhc2U/IikKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiVGVzdCBjYXNlcyBzaG91bGQgbm90IGJlIGRlcml2ZWQgZnJvbSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRlc3RTdWl0ZS4gTWF5YmUgeW91IG1lYW50IHRvIGRlcml2ZSBmcm9tICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGVzdENhc2U/IikKICAgICAgICAgdGVzdENhc2VOYW1lcyA9IHNlbGYuZ2V0VGVzdENhc2VOYW1lcyh0ZXN0Q2FzZUNsYXNzKQogICAgICAgICBpZiBub3QgdGVzdENhc2VOYW1lcyBhbmQgaGFzYXR0cih0ZXN0Q2FzZUNsYXNzLCAncnVuVGVzdCcpOgogICAgICAgICAgICAgdGVzdENhc2VOYW1lcyA9IFsncnVuVGVzdCddCkBAIC0xNjksNiArMTg5LDkgQEAKICAgICAgICAgVGhlIHBhdHRlcm4gaXMgZGVsaWJlcmF0ZWx5IG5vdCBzdG9yZWQgYXMgYSBsb2FkZXIgYXR0cmlidXRlIHNvIHRoYXQKICAgICAgICAgcGFja2FnZXMgY2FuIGNvbnRpbnVlIGRpc2NvdmVyeSB0aGVtc2VsdmVzLiB0b3BfbGV2ZWxfZGlyIGlzIHN0b3JlZCBzbwogICAgICAgICBsb2FkX3Rlc3RzIGRvZXMgbm90IG5lZWQgdG8gcGFzcyB0aGlzIGFyZ3VtZW50IGluIHRvIGxvYWRlci5kaXNjb3ZlcigpLgorCisgICAgICAgIFBhdGhzIGFyZSBzb3J0ZWQgYmVmb3JlIGJlaW5nIGltcG9ydGVkIHRvIGVuc3VyZSByZXByb2R1Y2libGUgZXhlY3V0aW9uCisgICAgICAgIG9yZGVyIGV2ZW4gb24gZmlsZXN5c3RlbXMgd2l0aCBub24tYWxwaGFiZXRpY2FsIG9yZGVyaW5nIGxpa2UgZXh0My80LgogICAgICAgICAiIiIKICAgICAgICAgc2V0X2ltcGxpY2l0X3RvcCA9IEZhbHNlCiAgICAgICAgIGlmIHRvcF9sZXZlbF9kaXIgaXMgTm9uZSBhbmQgc2VsZi5fdG9wX2xldmVsX2RpciBpcyBub3QgTm9uZToKQEAgLTE4OSw2ICsyMTIsOCBAQAogICAgICAgICBzZWxmLl90b3BfbGV2ZWxfZGlyID0gdG9wX2xldmVsX2RpcgogCiAgICAgICAgIGlzX25vdF9pbXBvcnRhYmxlID0gRmFsc2UKKyAgICAgICAgaXNfbmFtZXNwYWNlID0gRmFsc2UKKyAgICAgICAgdGVzdHMgPSBbXQogICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKG9zLnBhdGguYWJzcGF0aChzdGFydF9kaXIpKToKICAgICAgICAgICAgIHN0YXJ0X2RpciA9IG9zLnBhdGguYWJzcGF0aChzdGFydF9kaXIpCiAgICAgICAgICAgICBpZiBzdGFydF9kaXIgIT0gdG9wX2xldmVsX2RpcjoKQEAgLTIwMiwxNSArMjI3LDUyIEBACiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHRoZV9tb2R1bGUgPSBzeXMubW9kdWxlc1tzdGFydF9kaXJdCiAgICAgICAgICAgICAgICAgdG9wX3BhcnQgPSBzdGFydF9kaXIuc3BsaXQoJy4nKVswXQotICAgICAgICAgICAgICAgIHN0YXJ0X2RpciA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmRpcm5hbWUoKHRoZV9tb2R1bGUuX19maWxlX18pKSkKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHN0YXJ0X2RpciA9IG9zLnBhdGguYWJzcGF0aCgKKyAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5kaXJuYW1lKCh0aGVfbW9kdWxlLl9fZmlsZV9fKSkpCisgICAgICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgICAgICAjIGxvb2sgZm9yIG5hbWVzcGFjZSBwYWNrYWdlcworICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBzcGVjID0gdGhlX21vZHVsZS5fX3NwZWNfXworICAgICAgICAgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICBzcGVjID0gTm9uZQorCisgICAgICAgICAgICAgICAgICAgIGlmIHNwZWMgYW5kIHNwZWMubG9hZGVyIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzX25hbWVzcGFjZSA9IFRydWUKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBwYXRoIGluIHRoZV9tb2R1bGUuX19wYXRoX186CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub3Qgc2V0X2ltcGxpY2l0X3RvcCBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdCBwYXRoLnN0YXJ0c3dpdGgodG9wX2xldmVsX2RpcikpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdG9wX2xldmVsX2RpciA9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYXRoLnNwbGl0KHRoZV9tb2R1bGUuX19uYW1lX18KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoIi4iLCBvcy5wYXRoLnNlcCkpWzBdKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0cy5leHRlbmQoc2VsZi5fZmluZF90ZXN0cyhwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lc3BhY2U9VHJ1ZSkpCisgICAgICAgICAgICAgICAgICAgIGVsaWYgdGhlX21vZHVsZS5fX25hbWVfXyBpbiBzeXMuYnVpbHRpbl9tb2R1bGVfbmFtZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAjIGJ1aWx0aW4gbW9kdWxlCisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ0NhbiBub3QgdXNlIGJ1aWx0aW4gbW9kdWxlcyAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FzIGRvdHRlZCBtb2R1bGUgbmFtZXMnKSBmcm9tIE5vbmUKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZG9uXCd0IGtub3cgaG93IHRvIGRpc2NvdmVyIGZyb20geyFyfScKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KHRoZV9tb2R1bGUpKSBmcm9tIE5vbmUKKwogICAgICAgICAgICAgICAgIGlmIHNldF9pbXBsaWNpdF90b3A6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuX3RvcF9sZXZlbF9kaXIgPSBzZWxmLl9nZXRfZGlyZWN0b3J5X2NvbnRhaW5pbmdfbW9kdWxlKHRvcF9wYXJ0KQotICAgICAgICAgICAgICAgICAgICBzeXMucGF0aC5yZW1vdmUodG9wX2xldmVsX2RpcikKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGlzX25hbWVzcGFjZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3RvcF9sZXZlbF9kaXIgPSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9nZXRfZGlyZWN0b3J5X2NvbnRhaW5pbmdfbW9kdWxlKHRvcF9wYXJ0KQorICAgICAgICAgICAgICAgICAgICAgICAgc3lzLnBhdGgucmVtb3ZlKHRvcF9sZXZlbF9kaXIpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBzeXMucGF0aC5yZW1vdmUodG9wX2xldmVsX2RpcikKIAogICAgICAgICBpZiBpc19ub3RfaW1wb3J0YWJsZToKICAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCdTdGFydCBkaXJlY3RvcnkgaXMgbm90IGltcG9ydGFibGU6ICVyJyAlIHN0YXJ0X2RpcikKIAotICAgICAgICB0ZXN0cyA9IGxpc3Qoc2VsZi5fZmluZF90ZXN0cyhzdGFydF9kaXIsIHBhdHRlcm4pKQorICAgICAgICBpZiBub3QgaXNfbmFtZXNwYWNlOgorICAgICAgICAgICAgdGVzdHMgPSBsaXN0KHNlbGYuX2ZpbmRfdGVzdHMoc3RhcnRfZGlyLCBwYXR0ZXJuKSkKICAgICAgICAgcmV0dXJuIHNlbGYuc3VpdGVDbGFzcyh0ZXN0cykKIAogICAgIGRlZiBfZ2V0X2RpcmVjdG9yeV9jb250YWluaW5nX21vZHVsZShzZWxmLCBtb2R1bGVfbmFtZSk6CkBAIC0yNDMsOSArMzA1LDkgQEAKICAgICAgICAgIyBvdmVycmlkZSB0aGlzIG1ldGhvZCB0byB1c2UgYWx0ZXJuYXRpdmUgbWF0Y2hpbmcgc3RyYXRlZ3kKICAgICAgICAgcmV0dXJuIGZubWF0Y2gocGF0aCwgcGF0dGVybikKIAotICAgIGRlZiBfZmluZF90ZXN0cyhzZWxmLCBzdGFydF9kaXIsIHBhdHRlcm4pOgorICAgIGRlZiBfZmluZF90ZXN0cyhzZWxmLCBzdGFydF9kaXIsIHBhdHRlcm4sIG5hbWVzcGFjZT1GYWxzZSk6CiAgICAgICAgICIiIlVzZWQgYnkgZGlzY292ZXJ5LiBZaWVsZHMgdGVzdCBzdWl0ZXMgaXQgbG9hZHMuIiIiCi0gICAgICAgIHBhdGhzID0gb3MubGlzdGRpcihzdGFydF9kaXIpCisgICAgICAgIHBhdGhzID0gc29ydGVkKG9zLmxpc3RkaXIoc3RhcnRfZGlyKSkKIAogICAgICAgICBmb3IgcGF0aCBpbiBwYXRoczoKICAgICAgICAgICAgIGZ1bGxfcGF0aCA9IG9zLnBhdGguam9pbihzdGFydF9kaXIsIHBhdGgpCkBAIC0yNTksNiArMzIxLDggQEAKICAgICAgICAgICAgICAgICBuYW1lID0gc2VsZi5fZ2V0X25hbWVfZnJvbV9wYXRoKGZ1bGxfcGF0aCkKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuX2dldF9tb2R1bGVfZnJvbV9uYW1lKG5hbWUpCisgICAgICAgICAgICAgICAgZXhjZXB0IGNhc2UuU2tpcFRlc3QgYXMgZToKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgX21ha2Vfc2tpcHBlZF90ZXN0KG5hbWUsIGUsIHNlbGYuc3VpdGVDbGFzcykKICAgICAgICAgICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICAgICAgICAgIHlpZWxkIF9tYWtlX2ZhaWxlZF9pbXBvcnRfdGVzdChuYW1lLCBzZWxmLnN1aXRlQ2xhc3MpCiAgICAgICAgICAgICAgICAgZWxzZToKQEAgLTI3NCw3ICszMzgsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IobXNnICUgKG1vZF9uYW1lLCBtb2R1bGVfZGlyLCBleHBlY3RlZF9kaXIpKQogICAgICAgICAgICAgICAgICAgICB5aWVsZCBzZWxmLmxvYWRUZXN0c0Zyb21Nb2R1bGUobW9kdWxlKQogICAgICAgICAgICAgZWxpZiBvcy5wYXRoLmlzZGlyKGZ1bGxfcGF0aCk6Ci0gICAgICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihmdWxsX3BhdGgsICdfX2luaXRfXy5weScpKToKKyAgICAgICAgICAgICAgICBpZiAobm90IG5hbWVzcGFjZSBhbmQKKyAgICAgICAgICAgICAgICAgICAgbm90IG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihmdWxsX3BhdGgsICdfX2luaXRfXy5weScpKSk6CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAKICAgICAgICAgICAgICAgICBsb2FkX3Rlc3RzID0gTm9uZQpAQCAtMjkxLDggKzM1Niw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAjIHRlc3RzIGxvYWRlZCBmcm9tIHBhY2thZ2UgZmlsZQogICAgICAgICAgICAgICAgICAgICAgICAgeWllbGQgdGVzdHMKICAgICAgICAgICAgICAgICAgICAgIyByZWN1cnNlIGludG8gdGhlIHBhY2thZ2UKLSAgICAgICAgICAgICAgICAgICAgZm9yIHRlc3QgaW4gc2VsZi5fZmluZF90ZXN0cyhmdWxsX3BhdGgsIHBhdHRlcm4pOgotICAgICAgICAgICAgICAgICAgICAgICAgeWllbGQgdGVzdAorICAgICAgICAgICAgICAgICAgICB5aWVsZCBmcm9tIHNlbGYuX2ZpbmRfdGVzdHMoZnVsbF9wYXRoLCBwYXR0ZXJuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXNwYWNlPW5hbWVzcGFjZSkKICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgICAgICB5aWVsZCBsb2FkX3Rlc3RzKHNlbGYsIHRlc3RzLCBwYXR0ZXJuKQpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L21haW4ucHkgYi9MaWIvdW5pdHRlc3QvbWFpbi5weQppbmRleCBlYWQ2NDkzLi5lNzUwY2E1IDEwMDY0NAotLS0gYS9MaWIvdW5pdHRlc3QvbWFpbi5weQorKysgYi9MaWIvdW5pdHRlc3QvbWFpbi5weQpAQCAtMSw3ICsxLDcgQEAKICIiIlVuaXR0ZXN0IG1haW4gcHJvZ3JhbSIiIgogCiBpbXBvcnQgc3lzCi1pbXBvcnQgb3B0cGFyc2UKK2ltcG9ydCBhcmdwYXJzZQogaW1wb3J0IG9zCiAKIGZyb20gLiBpbXBvcnQgbG9hZGVyLCBydW5uZXIKQEAgLTksNTMgKzksMjAgQEAKIAogX191bml0dGVzdCA9IFRydWUKIAotRkFJTEZBU1QgICAgID0gIiAgLWYsIC0tZmFpbGZhc3QgICBTdG9wIG9uIGZpcnN0IGZhaWx1cmVcbiIKLUNBVENIQlJFQUsgICA9ICIgIC1jLCAtLWNhdGNoICAgICAgQ2F0Y2ggY29udHJvbC1DIGFuZCBkaXNwbGF5IHJlc3VsdHNcbiIKLUJVRkZFUk9VVFBVVCA9ICIgIC1iLCAtLWJ1ZmZlciAgICAgQnVmZmVyIHN0ZG91dCBhbmQgc3RkZXJyIGR1cmluZyB0ZXN0IHJ1bnNcbiIKLQotVVNBR0VfQVNfTUFJTiA9ICIiIlwKLVVzYWdlOiAlKHByb2dOYW1lKXMgW29wdGlvbnNdIFt0ZXN0c10KLQotT3B0aW9uczoKLSAgLWgsIC0taGVscCAgICAgICBTaG93IHRoaXMgbWVzc2FnZQotICAtdiwgLS12ZXJib3NlICAgIFZlcmJvc2Ugb3V0cHV0Ci0gIC1xLCAtLXF1aWV0ICAgICAgTWluaW1hbCBvdXRwdXQKLSUoZmFpbGZhc3QpcyUoY2F0Y2hicmVhaylzJShidWZmZXIpcworTUFJTl9FWEFNUExFUyA9ICIiIlwKIEV4YW1wbGVzOgotICAlKHByb2dOYW1lKXMgdGVzdF9tb2R1bGUgICAgICAgICAgICAgICAtIHJ1biB0ZXN0cyBmcm9tIHRlc3RfbW9kdWxlCi0gICUocHJvZ05hbWUpcyBtb2R1bGUuVGVzdENsYXNzICAgICAgICAgIC0gcnVuIHRlc3RzIGZyb20gbW9kdWxlLlRlc3RDbGFzcwotICAlKHByb2dOYW1lKXMgbW9kdWxlLkNsYXNzLnRlc3RfbWV0aG9kICAtIHJ1biBzcGVjaWZpZWQgdGVzdCBtZXRob2QKLQotW3Rlc3RzXSBjYW4gYmUgYSBsaXN0IG9mIGFueSBudW1iZXIgb2YgdGVzdCBtb2R1bGVzLCBjbGFzc2VzIGFuZCB0ZXN0Ci1tZXRob2RzLgotCi1BbHRlcm5hdGl2ZSBVc2FnZTogJShwcm9nTmFtZSlzIGRpc2NvdmVyIFtvcHRpb25zXQotCi1PcHRpb25zOgotICAtdiwgLS12ZXJib3NlICAgIFZlcmJvc2Ugb3V0cHV0Ci0lKGZhaWxmYXN0KXMlKGNhdGNoYnJlYWspcyUoYnVmZmVyKXMgIC1zIGRpcmVjdG9yeSAgICAgRGlyZWN0b3J5IHRvIHN0YXJ0IGRpc2NvdmVyeSAoJy4nIGRlZmF1bHQpCi0gIC1wIHBhdHRlcm4gICAgICAgUGF0dGVybiB0byBtYXRjaCB0ZXN0IGZpbGVzICgndGVzdCoucHknIGRlZmF1bHQpCi0gIC10IGRpcmVjdG9yeSAgICAgVG9wIGxldmVsIGRpcmVjdG9yeSBvZiBwcm9qZWN0IChkZWZhdWx0IHRvCi0gICAgICAgICAgICAgICAgICAgc3RhcnQgZGlyZWN0b3J5KQotCi1Gb3IgdGVzdCBkaXNjb3ZlcnkgYWxsIHRlc3QgbW9kdWxlcyBtdXN0IGJlIGltcG9ydGFibGUgZnJvbSB0aGUgdG9wCi1sZXZlbCBkaXJlY3Rvcnkgb2YgdGhlIHByb2plY3QuCisgICUocHJvZylzIHRlc3RfbW9kdWxlICAgICAgICAgICAgICAgLSBydW4gdGVzdHMgZnJvbSB0ZXN0X21vZHVsZQorICAlKHByb2cpcyBtb2R1bGUuVGVzdENsYXNzICAgICAgICAgIC0gcnVuIHRlc3RzIGZyb20gbW9kdWxlLlRlc3RDbGFzcworICAlKHByb2cpcyBtb2R1bGUuQ2xhc3MudGVzdF9tZXRob2QgIC0gcnVuIHNwZWNpZmllZCB0ZXN0IG1ldGhvZAogIiIiCiAKLVVTQUdFX0ZST01fTU9EVUxFID0gIiIiXAotVXNhZ2U6ICUocHJvZ05hbWUpcyBbb3B0aW9uc10gW3Rlc3RdIFsuLi5dCi0KLU9wdGlvbnM6Ci0gIC1oLCAtLWhlbHAgICAgICAgU2hvdyB0aGlzIG1lc3NhZ2UKLSAgLXYsIC0tdmVyYm9zZSAgICBWZXJib3NlIG91dHB1dAotICAtcSwgLS1xdWlldCAgICAgIE1pbmltYWwgb3V0cHV0Ci0lKGZhaWxmYXN0KXMlKGNhdGNoYnJlYWspcyUoYnVmZmVyKXMKK01PRFVMRV9FWEFNUExFUyA9ICIiIlwKIEV4YW1wbGVzOgotICAlKHByb2dOYW1lKXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBydW4gZGVmYXVsdCBzZXQgb2YgdGVzdHMKLSAgJShwcm9nTmFtZSlzIE15VGVzdFN1aXRlICAgICAgICAgICAgICAgICAgIC0gcnVuIHN1aXRlICdNeVRlc3RTdWl0ZScKLSAgJShwcm9nTmFtZSlzIE15VGVzdENhc2UudGVzdFNvbWV0aGluZyAgICAgIC0gcnVuIE15VGVzdENhc2UudGVzdFNvbWV0aGluZwotICAlKHByb2dOYW1lKXMgTXlUZXN0Q2FzZSAgICAgICAgICAgICAgICAgICAgLSBydW4gYWxsICd0ZXN0KicgdGVzdCBtZXRob2RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIE15VGVzdENhc2UKKyAgJShwcm9nKXMgICAgICAgICAgICAgICAgICAgICAgICAgICAtIHJ1biBkZWZhdWx0IHNldCBvZiB0ZXN0cworICAlKHByb2cpcyBNeVRlc3RTdWl0ZSAgICAgICAgICAgICAgIC0gcnVuIHN1aXRlICdNeVRlc3RTdWl0ZScKKyAgJShwcm9nKXMgTXlUZXN0Q2FzZS50ZXN0U29tZXRoaW5nICAtIHJ1biBNeVRlc3RDYXNlLnRlc3RTb21ldGhpbmcKKyAgJShwcm9nKXMgTXlUZXN0Q2FzZSAgICAgICAgICAgICAgICAtIHJ1biBhbGwgJ3Rlc3QqJyB0ZXN0IG1ldGhvZHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIE15VGVzdENhc2UKICIiIgogCiBkZWYgX2NvbnZlcnRfbmFtZShuYW1lKToKQEAgLTgyLDEwICs0OSwxMSBAQAogICAgICIiIkEgY29tbWFuZC1saW5lIHByb2dyYW0gdGhhdCBydW5zIGEgc2V0IG9mIHRlc3RzOyB0aGlzIGlzIHByaW1hcmlseQogICAgICAgIGZvciBtYWtpbmcgdGVzdCBtb2R1bGVzIGNvbnZlbmllbnRseSBleGVjdXRhYmxlLgogICAgICIiIgotICAgIFVTQUdFID0gVVNBR0VfRlJPTV9NT0RVTEUKLQogICAgICMgZGVmYXVsdHMgZm9yIHRlc3RpbmcKKyAgICBtb2R1bGU9Tm9uZQorICAgIHZlcmJvc2l0eSA9IDEKICAgICBmYWlsZmFzdCA9IGNhdGNoYnJlYWsgPSBidWZmZXIgPSBwcm9nTmFtZSA9IHdhcm5pbmdzID0gTm9uZQorICAgIF9kaXNjb3ZlcnlfcGFyc2VyID0gTm9uZQogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZHVsZT0nX19tYWluX18nLCBkZWZhdWx0VGVzdD1Ob25lLCBhcmd2PU5vbmUsCiAgICAgICAgICAgICAgICAgICAgIHRlc3RSdW5uZXI9Tm9uZSwgdGVzdExvYWRlcj1sb2FkZXIuZGVmYXVsdFRlc3RMb2FkZXIsCkBAIC0xMjcsNDQgKzk1LDQ3IEBACiAgICAgZGVmIHVzYWdlRXhpdChzZWxmLCBtc2c9Tm9uZSk6CiAgICAgICAgIGlmIG1zZzoKICAgICAgICAgICAgIHByaW50KG1zZykKLSAgICAgICAgdXNhZ2UgPSB7J3Byb2dOYW1lJzogc2VsZi5wcm9nTmFtZSwgJ2NhdGNoYnJlYWsnOiAnJywgJ2ZhaWxmYXN0JzogJycsCi0gICAgICAgICAgICAgICAgICdidWZmZXInOiAnJ30KLSAgICAgICAgaWYgc2VsZi5mYWlsZmFzdCAhPSBGYWxzZToKLSAgICAgICAgICAgIHVzYWdlWydmYWlsZmFzdCddID0gRkFJTEZBU1QKLSAgICAgICAgaWYgc2VsZi5jYXRjaGJyZWFrICE9IEZhbHNlOgotICAgICAgICAgICAgdXNhZ2VbJ2NhdGNoYnJlYWsnXSA9IENBVENIQlJFQUsKLSAgICAgICAgaWYgc2VsZi5idWZmZXIgIT0gRmFsc2U6Ci0gICAgICAgICAgICB1c2FnZVsnYnVmZmVyJ10gPSBCVUZGRVJPVVRQVVQKLSAgICAgICAgcHJpbnQoc2VsZi5VU0FHRSAlIHVzYWdlKQorICAgICAgICBpZiBzZWxmLl9kaXNjb3ZlcnlfcGFyc2VyIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLl9pbml0QXJnUGFyc2VycygpCisgICAgICAgIHNlbGYuX3ByaW50X2hlbHAoKQogICAgICAgICBzeXMuZXhpdCgyKQogCisgICAgZGVmIF9wcmludF9oZWxwKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIGlmIHNlbGYubW9kdWxlIGlzIE5vbmU6CisgICAgICAgICAgICBwcmludChzZWxmLl9tYWluX3BhcnNlci5mb3JtYXRfaGVscCgpKQorICAgICAgICAgICAgcHJpbnQoTUFJTl9FWEFNUExFUyAlIHsncHJvZyc6IHNlbGYucHJvZ05hbWV9KQorICAgICAgICAgICAgc2VsZi5fZGlzY292ZXJ5X3BhcnNlci5wcmludF9oZWxwKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByaW50KHNlbGYuX21haW5fcGFyc2VyLmZvcm1hdF9oZWxwKCkpCisgICAgICAgICAgICBwcmludChNT0RVTEVfRVhBTVBMRVMgJSB7J3Byb2cnOiBzZWxmLnByb2dOYW1lfSkKKwogICAgIGRlZiBwYXJzZUFyZ3Moc2VsZiwgYXJndik6Ci0gICAgICAgIGlmICgobGVuKGFyZ3YpID4gMSBhbmQgYXJndlsxXS5sb3dlcigpID09ICdkaXNjb3ZlcicpIG9yCi0gICAgICAgICAgICAobGVuKGFyZ3YpID09IDEgYW5kIHNlbGYubW9kdWxlIGlzIE5vbmUpKToKLSAgICAgICAgICAgIHNlbGYuX2RvX2Rpc2NvdmVyeShhcmd2WzI6XSkKLSAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLl9pbml0QXJnUGFyc2VycygpCisgICAgICAgIGlmIHNlbGYubW9kdWxlIGlzIE5vbmU6CisgICAgICAgICAgICBpZiBsZW4oYXJndikgPiAxIGFuZCBhcmd2WzFdLmxvd2VyKCkgPT0gJ2Rpc2NvdmVyJzoKKyAgICAgICAgICAgICAgICBzZWxmLl9kb19kaXNjb3ZlcnkoYXJndlsyOl0pCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBzZWxmLl9tYWluX3BhcnNlci5wYXJzZV9hcmdzKGFyZ3ZbMTpdLCBzZWxmKQorICAgICAgICAgICAgaWYgbm90IHNlbGYudGVzdHM6CisgICAgICAgICAgICAgICAgIyB0aGlzIGFsbG93cyAicHl0aG9uIC1tIHVuaXR0ZXN0IC12IiB0byBzdGlsbCB3b3JrIGZvcgorICAgICAgICAgICAgICAgICMgdGVzdCBkaXNjb3ZlcnkuCisgICAgICAgICAgICAgICAgc2VsZi5fZG9fZGlzY292ZXJ5KFtdKQorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fbWFpbl9wYXJzZXIucGFyc2VfYXJncyhhcmd2WzE6XSwgc2VsZikKIAotICAgICAgICBwYXJzZXIgPSBzZWxmLl9nZXRPcHRQYXJzZXIoKQotICAgICAgICBvcHRpb25zLCBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoYXJndlsxOl0pCi0gICAgICAgIHNlbGYuX3NldEF0dHJpYnV0ZXNGcm9tT3B0aW9ucyhvcHRpb25zKQotCi0gICAgICAgIGlmIGxlbihhcmdzKSA9PSAwIGFuZCBzZWxmLm1vZHVsZSBpcyBOb25lOgotICAgICAgICAgICAgIyB0aGlzIGFsbG93cyAicHl0aG9uIC1tIHVuaXR0ZXN0IC12IiB0byBzdGlsbCB3b3JrIGZvcgotICAgICAgICAgICAgIyB0ZXN0IGRpc2NvdmVyeS4gVGhpcyBtZWFucyAtYyAvIC1iIC8gLXYgLyAtZiBvcHRpb25zIHdpbGwKLSAgICAgICAgICAgICMgYmUgaGFuZGxlZCB0d2ljZSwgd2hpY2ggaXMgaGFybWxlc3MgYnV0IG5vdCBpZGVhbC4KLSAgICAgICAgICAgIHNlbGYuX2RvX2Rpc2NvdmVyeShhcmd2WzE6XSkKLSAgICAgICAgICAgIHJldHVybgotCi0gICAgICAgIGlmIGxlbihhcmdzKSA9PSAwIGFuZCBzZWxmLmRlZmF1bHRUZXN0IGlzIE5vbmU6Ci0gICAgICAgICAgICAjIGNyZWF0ZVRlc3RzIHdpbGwgbG9hZCB0ZXN0cyBmcm9tIHNlbGYubW9kdWxlCi0gICAgICAgICAgICBzZWxmLnRlc3ROYW1lcyA9IE5vbmUKLSAgICAgICAgZWxpZiBsZW4oYXJncykgPiAwOgotICAgICAgICAgICAgc2VsZi50ZXN0TmFtZXMgPSBfY29udmVydF9uYW1lcyhhcmdzKQorICAgICAgICBpZiBzZWxmLnRlc3RzOgorICAgICAgICAgICAgc2VsZi50ZXN0TmFtZXMgPSBfY29udmVydF9uYW1lcyhzZWxmLnRlc3RzKQogICAgICAgICAgICAgaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICAgICAgICAgICAgICAjIHRvIHN1cHBvcnQgcHl0aG9uIC1tIHVuaXR0ZXN0IC4uLgogICAgICAgICAgICAgICAgIHNlbGYubW9kdWxlID0gTm9uZQotICAgICAgICBlbHNlOgorICAgICAgICBlbGlmIHNlbGYuZGVmYXVsdFRlc3QgaXMgTm9uZToKKyAgICAgICAgICAgICMgY3JlYXRlVGVzdHMgd2lsbCBsb2FkIHRlc3RzIGZyb20gc2VsZi5tb2R1bGUKKyAgICAgICAgICAgIHNlbGYudGVzdE5hbWVzID0gTm9uZQorICAgICAgICBlbGlmIGlzaW5zdGFuY2Uoc2VsZi5kZWZhdWx0VGVzdCwgc3RyKToKICAgICAgICAgICAgIHNlbGYudGVzdE5hbWVzID0gKHNlbGYuZGVmYXVsdFRlc3QsKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi50ZXN0TmFtZXMgPSBsaXN0KHNlbGYuZGVmYXVsdFRlc3QpCiAgICAgICAgIHNlbGYuY3JlYXRlVGVzdHMoKQogCiAgICAgZGVmIGNyZWF0ZVRlc3RzKHNlbGYpOgpAQCAtMTc0LDc2ICsxNDUsODQgQEAKICAgICAgICAgICAgIHNlbGYudGVzdCA9IHNlbGYudGVzdExvYWRlci5sb2FkVGVzdHNGcm9tTmFtZXMoc2VsZi50ZXN0TmFtZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubW9kdWxlKQogCi0gICAgZGVmIF9nZXRPcHRQYXJzZXIoc2VsZik6Ci0gICAgICAgIGltcG9ydCBvcHRwYXJzZQotICAgICAgICBwYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIoKQotICAgICAgICBwYXJzZXIucHJvZyA9IHNlbGYucHJvZ05hbWUKLSAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oJy12JywgJy0tdmVyYm9zZScsIGRlc3Q9J3ZlcmJvc2UnLCBkZWZhdWx0PUZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdWZXJib3NlIG91dHB1dCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCi0gICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCctcScsICctLXF1aWV0JywgZGVzdD0ncXVpZXQnLCBkZWZhdWx0PUZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdRdWlldCBvdXRwdXQnLCBhY3Rpb249J3N0b3JlX3RydWUnKQorICAgIGRlZiBfaW5pdEFyZ1BhcnNlcnMoc2VsZik6CisgICAgICAgIHBhcmVudF9wYXJzZXIgPSBzZWxmLl9nZXRQYXJlbnRBcmdQYXJzZXIoKQorICAgICAgICBzZWxmLl9tYWluX3BhcnNlciA9IHNlbGYuX2dldE1haW5BcmdQYXJzZXIocGFyZW50X3BhcnNlcikKKyAgICAgICAgc2VsZi5fZGlzY292ZXJ5X3BhcnNlciA9IHNlbGYuX2dldERpc2NvdmVyeUFyZ1BhcnNlcihwYXJlbnRfcGFyc2VyKQogCi0gICAgICAgIGlmIHNlbGYuZmFpbGZhc3QgIT0gRmFsc2U6Ci0gICAgICAgICAgICBwYXJzZXIuYWRkX29wdGlvbignLWYnLCAnLS1mYWlsZmFzdCcsIGRlc3Q9J2ZhaWxmYXN0JywgZGVmYXVsdD1GYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1N0b3Agb24gZmlyc3QgZmFpbCBvciBlcnJvcicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249J3N0b3JlX3RydWUnKQotICAgICAgICBpZiBzZWxmLmNhdGNoYnJlYWsgIT0gRmFsc2U6Ci0gICAgICAgICAgICBwYXJzZXIuYWRkX29wdGlvbignLWMnLCAnLS1jYXRjaCcsIGRlc3Q9J2NhdGNoYnJlYWsnLCBkZWZhdWx0PUZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nQ2F0Y2ggY3RybC1DIGFuZCBkaXNwbGF5IHJlc3VsdHMgc28gZmFyJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCi0gICAgICAgIGlmIHNlbGYuYnVmZmVyICE9IEZhbHNlOgotICAgICAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oJy1iJywgJy0tYnVmZmVyJywgZGVzdD0nYnVmZmVyJywgZGVmYXVsdD1GYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0J1ZmZlciBzdGRvdXQgYW5kIHN0ZGVyciBkdXJpbmcgdGVzdHMnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSdzdG9yZV90cnVlJykKKyAgICBkZWYgX2dldFBhcmVudEFyZ1BhcnNlcihzZWxmKToKKyAgICAgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoYWRkX2hlbHA9RmFsc2UpCisKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLXYnLCAnLS12ZXJib3NlJywgZGVzdD0ndmVyYm9zaXR5JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249J3N0b3JlX2NvbnN0JywgY29uc3Q9MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdWZXJib3NlIG91dHB1dCcpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1xJywgJy0tcXVpZXQnLCBkZXN0PSd2ZXJib3NpdHknLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0nc3RvcmVfY29uc3QnLCBjb25zdD0wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1F1aWV0IG91dHB1dCcpCisKKyAgICAgICAgaWYgc2VsZi5mYWlsZmFzdCBpcyBOb25lOgorICAgICAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLWYnLCAnLS1mYWlsZmFzdCcsIGRlc3Q9J2ZhaWxmYXN0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nU3RvcCBvbiBmaXJzdCBmYWlsIG9yIGVycm9yJykKKyAgICAgICAgICAgIHNlbGYuZmFpbGZhc3QgPSBGYWxzZQorICAgICAgICBpZiBzZWxmLmNhdGNoYnJlYWsgaXMgTm9uZToKKyAgICAgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1jJywgJy0tY2F0Y2gnLCBkZXN0PSdjYXRjaGJyZWFrJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nQ2F0Y2ggQ3RybC1DIGFuZCBkaXNwbGF5IHJlc3VsdHMgc28gZmFyJykKKyAgICAgICAgICAgIHNlbGYuY2F0Y2hicmVhayA9IEZhbHNlCisgICAgICAgIGlmIHNlbGYuYnVmZmVyIGlzIE5vbmU6CisgICAgICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctYicsICctLWJ1ZmZlcicsIGRlc3Q9J2J1ZmZlcicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0J1ZmZlciBzdGRvdXQgYW5kIHN0ZGVyciBkdXJpbmcgdGVzdHMnKQorICAgICAgICAgICAgc2VsZi5idWZmZXIgPSBGYWxzZQorCiAgICAgICAgIHJldHVybiBwYXJzZXIKIAotICAgIGRlZiBfc2V0QXR0cmlidXRlc0Zyb21PcHRpb25zKHNlbGYsIG9wdGlvbnMpOgotICAgICAgICAjIG9ubHkgc2V0IG9wdGlvbnMgZnJvbSB0aGUgcGFyc2luZyBoZXJlCi0gICAgICAgICMgaWYgdGhleSB3ZXJlbid0IHNldCBleHBsaWNpdGx5IGluIHRoZSBjb25zdHJ1Y3RvcgotICAgICAgICBpZiBzZWxmLmZhaWxmYXN0IGlzIE5vbmU6Ci0gICAgICAgICAgICBzZWxmLmZhaWxmYXN0ID0gb3B0aW9ucy5mYWlsZmFzdAotICAgICAgICBpZiBzZWxmLmNhdGNoYnJlYWsgaXMgTm9uZToKLSAgICAgICAgICAgIHNlbGYuY2F0Y2hicmVhayA9IG9wdGlvbnMuY2F0Y2hicmVhawotICAgICAgICBpZiBzZWxmLmJ1ZmZlciBpcyBOb25lOgotICAgICAgICAgICAgc2VsZi5idWZmZXIgPSBvcHRpb25zLmJ1ZmZlcgorICAgIGRlZiBfZ2V0TWFpbkFyZ1BhcnNlcihzZWxmLCBwYXJlbnQpOgorICAgICAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihwYXJlbnRzPVtwYXJlbnRdKQorICAgICAgICBwYXJzZXIucHJvZyA9IHNlbGYucHJvZ05hbWUKKyAgICAgICAgcGFyc2VyLnByaW50X2hlbHAgPSBzZWxmLl9wcmludF9oZWxwCiAKLSAgICAgICAgaWYgb3B0aW9ucy52ZXJib3NlOgotICAgICAgICAgICAgc2VsZi52ZXJib3NpdHkgPSAyCi0gICAgICAgIGVsaWYgb3B0aW9ucy5xdWlldDoKLSAgICAgICAgICAgIHNlbGYudmVyYm9zaXR5ID0gMAorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCd0ZXN0cycsIG5hcmdzPScqJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdhIGxpc3Qgb2YgYW55IG51bWJlciBvZiB0ZXN0IG1vZHVsZXMsICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2xhc3NlcyBhbmQgdGVzdCBtZXRob2RzLicpCiAKLSAgICBkZWYgX2FkZERpc2NvdmVyeU9wdGlvbnMoc2VsZiwgcGFyc2VyKToKLSAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oJy1zJywgJy0tc3RhcnQtZGlyZWN0b3J5JywgZGVzdD0nc3RhcnQnLCBkZWZhdWx0PScuJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iRGlyZWN0b3J5IHRvIHN0YXJ0IGRpc2NvdmVyeSAoJy4nIGRlZmF1bHQpIikKLSAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oJy1wJywgJy0tcGF0dGVybicsIGRlc3Q9J3BhdHRlcm4nLCBkZWZhdWx0PSd0ZXN0Ki5weScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IlBhdHRlcm4gdG8gbWF0Y2ggdGVzdHMgKCd0ZXN0Ki5weScgZGVmYXVsdCkiKQotICAgICAgICBwYXJzZXIuYWRkX29wdGlvbignLXQnLCAnLS10b3AtbGV2ZWwtZGlyZWN0b3J5JywgZGVzdD0ndG9wJywgZGVmYXVsdD1Ob25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdUb3AgbGV2ZWwgZGlyZWN0b3J5IG9mIHByb2plY3QgKGRlZmF1bHRzIHRvIHN0YXJ0IGRpcmVjdG9yeSknKQorICAgICAgICByZXR1cm4gcGFyc2VyCisKKyAgICBkZWYgX2dldERpc2NvdmVyeUFyZ1BhcnNlcihzZWxmLCBwYXJlbnQpOgorICAgICAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihwYXJlbnRzPVtwYXJlbnRdKQorICAgICAgICBwYXJzZXIucHJvZyA9ICclcyBkaXNjb3ZlcicgJSBzZWxmLnByb2dOYW1lCisgICAgICAgIHBhcnNlci5lcGlsb2cgPSAoJ0ZvciB0ZXN0IGRpc2NvdmVyeSBhbGwgdGVzdCBtb2R1bGVzIG11c3QgYmUgJworICAgICAgICAgICAgICAgICAgICAgICAgICdpbXBvcnRhYmxlIGZyb20gdGhlIHRvcCBsZXZlbCBkaXJlY3Rvcnkgb2YgdGhlICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAncHJvamVjdC4nKQorCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1zJywgJy0tc3RhcnQtZGlyZWN0b3J5JywgZGVzdD0nc3RhcnQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IkRpcmVjdG9yeSB0byBzdGFydCBkaXNjb3ZlcnkgKCcuJyBkZWZhdWx0KSIpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1wJywgJy0tcGF0dGVybicsIGRlc3Q9J3BhdHRlcm4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IlBhdHRlcm4gdG8gbWF0Y2ggdGVzdHMgKCd0ZXN0Ki5weScgZGVmYXVsdCkiKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctdCcsICctLXRvcC1sZXZlbC1kaXJlY3RvcnknLCBkZXN0PSd0b3AnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1RvcCBsZXZlbCBkaXJlY3Rvcnkgb2YgcHJvamVjdCAoZGVmYXVsdHMgdG8gJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N0YXJ0IGRpcmVjdG9yeSknKQorICAgICAgICBmb3IgYXJnIGluICgnc3RhcnQnLCAncGF0dGVybicsICd0b3AnKToKKyAgICAgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoYXJnLCBuYXJncz0nPycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9YXJncGFyc2UuU1VQUFJFU1MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9YXJncGFyc2UuU1VQUFJFU1MpCisKKyAgICAgICAgcmV0dXJuIHBhcnNlcgogCiAgICAgZGVmIF9kb19kaXNjb3Zlcnkoc2VsZiwgYXJndiwgTG9hZGVyPU5vbmUpOgotICAgICAgICBpZiBMb2FkZXIgaXMgTm9uZToKLSAgICAgICAgICAgIExvYWRlciA9IGxhbWJkYTogc2VsZi50ZXN0TG9hZGVyCisgICAgICAgIHNlbGYuc3RhcnQgPSAnLicKKyAgICAgICAgc2VsZi5wYXR0ZXJuID0gJ3Rlc3QqLnB5JworICAgICAgICBzZWxmLnRvcCA9IE5vbmUKKyAgICAgICAgaWYgYXJndiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICMgaGFuZGxlIGNvbW1hbmQgbGluZSBhcmdzIGZvciB0ZXN0IGRpc2NvdmVyeQorICAgICAgICAgICAgaWYgc2VsZi5fZGlzY292ZXJ5X3BhcnNlciBpcyBOb25lOgorICAgICAgICAgICAgICAgICMgZm9yIHRlc3RpbmcKKyAgICAgICAgICAgICAgICBzZWxmLl9pbml0QXJnUGFyc2VycygpCisgICAgICAgICAgICBzZWxmLl9kaXNjb3ZlcnlfcGFyc2VyLnBhcnNlX2FyZ3MoYXJndiwgc2VsZikKIAotICAgICAgICAjIGhhbmRsZSBjb21tYW5kIGxpbmUgYXJncyBmb3IgdGVzdCBkaXNjb3ZlcnkKLSAgICAgICAgc2VsZi5wcm9nTmFtZSA9ICclcyBkaXNjb3ZlcicgJSBzZWxmLnByb2dOYW1lCi0gICAgICAgIHBhcnNlciA9IHNlbGYuX2dldE9wdFBhcnNlcigpCi0gICAgICAgIHNlbGYuX2FkZERpc2NvdmVyeU9wdGlvbnMocGFyc2VyKQotCi0gICAgICAgIG9wdGlvbnMsIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncyhhcmd2KQotICAgICAgICBpZiBsZW4oYXJncykgPiAzOgotICAgICAgICAgICAgc2VsZi51c2FnZUV4aXQoKQotCi0gICAgICAgIGZvciBuYW1lLCB2YWx1ZSBpbiB6aXAoKCdzdGFydCcsICdwYXR0ZXJuJywgJ3RvcCcpLCBhcmdzKToKLSAgICAgICAgICAgIHNldGF0dHIob3B0aW9ucywgbmFtZSwgdmFsdWUpCi0KLSAgICAgICAgc2VsZi5fc2V0QXR0cmlidXRlc0Zyb21PcHRpb25zKG9wdGlvbnMpCi0KLSAgICAgICAgc3RhcnRfZGlyID0gb3B0aW9ucy5zdGFydAotICAgICAgICBwYXR0ZXJuID0gb3B0aW9ucy5wYXR0ZXJuCi0gICAgICAgIHRvcF9sZXZlbF9kaXIgPSBvcHRpb25zLnRvcAotCi0gICAgICAgIGxvYWRlciA9IExvYWRlcigpCi0gICAgICAgIHNlbGYudGVzdCA9IGxvYWRlci5kaXNjb3ZlcihzdGFydF9kaXIsIHBhdHRlcm4sIHRvcF9sZXZlbF9kaXIpCisgICAgICAgIGxvYWRlciA9IHNlbGYudGVzdExvYWRlciBpZiBMb2FkZXIgaXMgTm9uZSBlbHNlIExvYWRlcigpCisgICAgICAgIHNlbGYudGVzdCA9IGxvYWRlci5kaXNjb3ZlcihzZWxmLnN0YXJ0LCBzZWxmLnBhdHRlcm4sIHNlbGYudG9wKQogCiAgICAgZGVmIHJ1blRlc3RzKHNlbGYpOgogICAgICAgICBpZiBzZWxmLmNhdGNoYnJlYWs6CmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvbW9jay5weSBiL0xpYi91bml0dGVzdC9tb2NrLnB5CmluZGV4IDA3Mzg2OWEuLjU3M2M3OTkgMTAwNjQ0Ci0tLSBhL0xpYi91bml0dGVzdC9tb2NrLnB5CisrKyBiL0xpYi91bml0dGVzdC9tb2NrLnB5CkBAIC0yNyw3ICsyNyw3IEBACiBpbXBvcnQgaW5zcGVjdAogaW1wb3J0IHBwcmludAogaW1wb3J0IHN5cwotZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHdyYXBzCitmcm9tIGZ1bmN0b29scyBpbXBvcnQgd3JhcHMsIHBhcnRpYWwKIAogCiBCYXNlRXhjZXB0aW9ucyA9IChCYXNlRXhjZXB0aW9uLCkKQEAgLTY2LDU1ICs2Niw0NSBAQAogKQogCiAKLWRlZiBfZ2V0c2lnbmF0dXJlKGZ1bmMsIHNraXBmaXJzdCwgaW5zdGFuY2U9RmFsc2UpOgotICAgIGlmIGlzaW5zdGFuY2UoZnVuYywgdHlwZSkgYW5kIG5vdCBpbnN0YW5jZToKK2RlZiBfZ2V0X3NpZ25hdHVyZV9vYmplY3QoZnVuYywgYXNfaW5zdGFuY2UsIGVhdF9zZWxmKToKKyAgICAiIiIKKyAgICBHaXZlbiBhbiBhcmJpdHJhcnksIHBvc3NpYmx5IGNhbGxhYmxlIG9iamVjdCwgdHJ5IHRvIGNyZWF0ZSBhIHN1aXRhYmxlCisgICAgc2lnbmF0dXJlIG9iamVjdC4KKyAgICBSZXR1cm4gYSAocmVkdWNlZCBmdW5jLCBzaWduYXR1cmUpIHR1cGxlLCBvciBOb25lLgorICAgICIiIgorICAgIGlmIGlzaW5zdGFuY2UoZnVuYywgdHlwZSkgYW5kIG5vdCBhc19pbnN0YW5jZToKKyAgICAgICAgIyBJZiBpdCdzIGEgdHlwZSBhbmQgc2hvdWxkIGJlIG1vZGVsbGVkIGFzIGEgdHlwZSwgdXNlIF9faW5pdF9fLgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmdW5jID0gZnVuYy5fX2luaXRfXwogICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgc2tpcGZpcnN0ID0gVHJ1ZQorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgIyBTa2lwIHRoZSBgc2VsZmAgYXJndW1lbnQgaW4gX19pbml0X18KKyAgICAgICAgZWF0X3NlbGYgPSBUcnVlCiAgICAgZWxpZiBub3QgaXNpbnN0YW5jZShmdW5jLCBGdW5jdGlvblR5cGVzKToKLSAgICAgICAgIyBmb3IgY2xhc3NlcyB3aGVyZSBpbnN0YW5jZSBpcyBUcnVlIHdlIGVuZCB1cCBoZXJlIHRvbworICAgICAgICAjIElmIHdlIHJlYWxseSB3YW50IHRvIG1vZGVsIGFuIGluc3RhbmNlIG9mIHRoZSBwYXNzZWQgdHlwZSwKKyAgICAgICAgIyBfX2NhbGxfXyBzaG91bGQgYmUgbG9va2VkIHVwLCBub3QgX19pbml0X18uCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGZ1bmMgPSBmdW5jLl9fY2FsbF9fCiAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICAgICAgICAgIHJldHVybgotCisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgIGlmIGVhdF9zZWxmOgorICAgICAgICBzaWdfZnVuYyA9IHBhcnRpYWwoZnVuYywgTm9uZSkKKyAgICBlbHNlOgorICAgICAgICBzaWdfZnVuYyA9IGZ1bmMKICAgICB0cnk6Ci0gICAgICAgIGFyZ3NwZWMgPSBpbnNwZWN0LmdldGZ1bGxhcmdzcGVjKGZ1bmMpCi0gICAgZXhjZXB0IFR5cGVFcnJvcjoKLSAgICAgICAgIyBDIGZ1bmN0aW9uIC8gbWV0aG9kLCBwb3NzaWJseSBpbmhlcml0ZWQgb2JqZWN0KCkuX19pbml0X18KLSAgICAgICAgcmV0dXJuCi0KLSAgICByZWdhcmdzLCB2YXJhcmdzLCB2YXJrdywgZGVmYXVsdHMsIGt3b25seSwga3dvbmx5ZGVmLCBhbm4gPSBhcmdzcGVjCi0KLQotICAgICMgaW5zdGFuY2UgbWV0aG9kcyBhbmQgY2xhc3NtZXRob2RzIG5lZWQgdG8gbG9zZSB0aGUgc2VsZiBhcmd1bWVudAotICAgIGlmIGdldGF0dHIoZnVuYywgJ19fc2VsZl9fJywgTm9uZSkgaXMgbm90IE5vbmU6Ci0gICAgICAgIHJlZ2FyZ3MgPSByZWdhcmdzWzE6XQotICAgIGlmIHNraXBmaXJzdDoKLSAgICAgICAgIyB0aGlzIGNvbmRpdGlvbiBhbmQgdGhlIGFib3ZlIG9uZSBhcmUgbmV2ZXIgYm90aCBUcnVlIC0gd2h5PwotICAgICAgICByZWdhcmdzID0gcmVnYXJnc1sxOl0KLQotICAgIHNpZ25hdHVyZSA9IGluc3BlY3QuZm9ybWF0YXJnc3BlYygKLSAgICAgICAgcmVnYXJncywgdmFyYXJncywgdmFya3csIGRlZmF1bHRzLAotICAgICAgICBrd29ubHksIGt3b25seWRlZiwgYW5uLCBmb3JtYXR2YWx1ZT1sYW1iZGEgdmFsdWU6ICIiKQotICAgIHJldHVybiBzaWduYXR1cmVbMTotMV0sIGZ1bmMKKyAgICAgICAgcmV0dXJuIGZ1bmMsIGluc3BlY3Quc2lnbmF0dXJlKHNpZ19mdW5jKQorICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAjIENlcnRhaW4gY2FsbGFibGUgdHlwZXMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgaW5zcGVjdC5zaWduYXR1cmUoKQorICAgICAgICByZXR1cm4gTm9uZQogCiAKIGRlZiBfY2hlY2tfc2lnbmF0dXJlKGZ1bmMsIG1vY2ssIHNraXBmaXJzdCwgaW5zdGFuY2U9RmFsc2UpOgotICAgIGlmIG5vdCBfY2FsbGFibGUoZnVuYyk6CisgICAgc2lnID0gX2dldF9zaWduYXR1cmVfb2JqZWN0KGZ1bmMsIGluc3RhbmNlLCBza2lwZmlyc3QpCisgICAgaWYgc2lnIGlzIE5vbmU6CiAgICAgICAgIHJldHVybgotCi0gICAgcmVzdWx0ID0gX2dldHNpZ25hdHVyZShmdW5jLCBza2lwZmlyc3QsIGluc3RhbmNlKQotICAgIGlmIHJlc3VsdCBpcyBOb25lOgotICAgICAgICByZXR1cm4KLSAgICBzaWduYXR1cmUsIGZ1bmMgPSByZXN1bHQKLQotICAgICMgY2FuJ3QgdXNlIHNlbGYgYmVjYXVzZSAic2VsZiIgaXMgY29tbW9uIGFzIGFuIGFyZ3VtZW50IG5hbWUKLSAgICAjIHVuZm9ydHVuYXRlbHkgZXZlbiBub3QgaW4gdGhlIGZpcnN0IHBsYWNlCi0gICAgc3JjID0gImxhbWJkYSBfbW9ja19zZWxmLCAlczogTm9uZSIgJSBzaWduYXR1cmUKLSAgICBjaGVja3NpZyA9IGV2YWwoc3JjLCB7fSkKKyAgICBmdW5jLCBzaWcgPSBzaWcKKyAgICBkZWYgY2hlY2tzaWcoX21vY2tfc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgc2lnLmJpbmQoKmFyZ3MsICoqa3dhcmdzKQogICAgIF9jb3B5X2Z1bmNfZGV0YWlscyhmdW5jLCBjaGVja3NpZykKICAgICB0eXBlKG1vY2spLl9tb2NrX2NoZWNrX3NpZyA9IGNoZWNrc2lnCiAKQEAgLTEyMiwxMSArMTEyLDI0IEBACiBkZWYgX2NvcHlfZnVuY19kZXRhaWxzKGZ1bmMsIGZ1bmNvcHkpOgogICAgIGZ1bmNvcHkuX19uYW1lX18gPSBmdW5jLl9fbmFtZV9fCiAgICAgZnVuY29weS5fX2RvY19fID0gZnVuYy5fX2RvY19fCisgICAgdHJ5OgorICAgICAgICBmdW5jb3B5Ll9fdGV4dF9zaWduYXR1cmVfXyA9IGZ1bmMuX190ZXh0X3NpZ25hdHVyZV9fCisgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICBwYXNzCiAgICAgIyB3ZSBleHBsaWNpdGx5IGRvbid0IGNvcHkgZnVuYy5fX2RpY3RfXyBpbnRvIHRoaXMgY29weSBhcyBpdCB3b3VsZAogICAgICMgZXhwb3NlIG9yaWdpbmFsIGF0dHJpYnV0ZXMgdGhhdCBzaG91bGQgYmUgbW9ja2VkCi0gICAgZnVuY29weS5fX21vZHVsZV9fID0gZnVuYy5fX21vZHVsZV9fCi0gICAgZnVuY29weS5fX2RlZmF1bHRzX18gPSBmdW5jLl9fZGVmYXVsdHNfXwotICAgIGZ1bmNvcHkuX19rd2RlZmF1bHRzX18gPSBmdW5jLl9fa3dkZWZhdWx0c19fCisgICAgdHJ5OgorICAgICAgICBmdW5jb3B5Ll9fbW9kdWxlX18gPSBmdW5jLl9fbW9kdWxlX18KKyAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgIHBhc3MKKyAgICB0cnk6CisgICAgICAgIGZ1bmNvcHkuX19kZWZhdWx0c19fID0gZnVuYy5fX2RlZmF1bHRzX18KKyAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgIHBhc3MKKyAgICB0cnk6CisgICAgICAgIGZ1bmNvcHkuX19rd2RlZmF1bHRzX18gPSBmdW5jLl9fa3dkZWZhdWx0c19fCisgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICBwYXNzCiAKIAogZGVmIF9jYWxsYWJsZShvYmopOgpAQCAtMTY2LDE1ICsxNjksMTIgQEAKICAgICAgICAgcmV0dXJuCiAKICAgICBza2lwZmlyc3QgPSBpc2luc3RhbmNlKG9yaWdpbmFsLCB0eXBlKQotICAgIHJlc3VsdCA9IF9nZXRzaWduYXR1cmUob3JpZ2luYWwsIHNraXBmaXJzdCwgaW5zdGFuY2UpCisgICAgcmVzdWx0ID0gX2dldF9zaWduYXR1cmVfb2JqZWN0KG9yaWdpbmFsLCBpbnN0YW5jZSwgc2tpcGZpcnN0KQogICAgIGlmIHJlc3VsdCBpcyBOb25lOgotICAgICAgICAjIHdhcyBhIEMgZnVuY3Rpb24gKGUuZy4gb2JqZWN0KCkuX19pbml0X18gKSB0aGF0IGNhbid0IGJlIG1vY2tlZAogICAgICAgICByZXR1cm4KLQotICAgIHNpZ25hdHVyZSwgZnVuYyA9IHJlc3VsdAotCi0gICAgc3JjID0gImxhbWJkYSAlczogTm9uZSIgJSBzaWduYXR1cmUKLSAgICBjaGVja3NpZyA9IGV2YWwoc3JjLCB7fSkKKyAgICBmdW5jLCBzaWcgPSByZXN1bHQKKyAgICBkZWYgY2hlY2tzaWcoKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgc2lnLmJpbmQoKmFyZ3MsICoqa3dhcmdzKQogICAgIF9jb3B5X2Z1bmNfZGV0YWlscyhmdW5jLCBjaGVja3NpZykKIAogICAgIG5hbWUgPSBvcmlnaW5hbC5fX25hbWVfXwpAQCAtMzQzLDcgKzM0MywxNCBAQAogICAgICAgICB2YWx1ZS5fbW9ja19uYW1lID0gbmFtZQogICAgIHJldHVybiBUcnVlCiAKLQorIyBJbnRlcm5hbCBjbGFzcyB0byBpZGVudGlmeSBpZiB3ZSB3cmFwcGVkIGFuIGl0ZXJhdG9yIG9iamVjdCBvciBub3QuCitjbGFzcyBfTW9ja0l0ZXIob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgb2JqKToKKyAgICAgICAgc2VsZi5vYmogPSBpdGVyKG9iaikKKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisgICAgZGVmIF9fbmV4dF9fKHNlbGYpOgorICAgICAgICByZXR1cm4gbmV4dChzZWxmLm9iaikKIAogY2xhc3MgQmFzZShvYmplY3QpOgogICAgIF9tb2NrX3JldHVybl92YWx1ZSA9IERFRkFVTFQKQEAgLTM2OCw3ICszNzUsNyBAQAogICAgIGRlZiBfX2luaXRfXygKICAgICAgICAgICAgIHNlbGYsIHNwZWM9Tm9uZSwgd3JhcHM9Tm9uZSwgbmFtZT1Ob25lLCBzcGVjX3NldD1Ob25lLAogICAgICAgICAgICAgcGFyZW50PU5vbmUsIF9zcGVjX3N0YXRlPU5vbmUsIF9uZXdfbmFtZT0nJywgX25ld19wYXJlbnQ9Tm9uZSwKLSAgICAgICAgICAgICoqa3dhcmdzCisgICAgICAgICAgICBfc3BlY19hc19pbnN0YW5jZT1GYWxzZSwgX2VhdF9zZWxmPU5vbmUsICoqa3dhcmdzCiAgICAgICAgICk6CiAgICAgICAgIGlmIF9uZXdfcGFyZW50IGlzIE5vbmU6CiAgICAgICAgICAgICBfbmV3X3BhcmVudCA9IHBhcmVudApAQCAtMzgyLDggKzM4OSwxMCBAQAogICAgICAgICBpZiBzcGVjX3NldCBpcyBub3QgTm9uZToKICAgICAgICAgICAgIHNwZWMgPSBzcGVjX3NldAogICAgICAgICAgICAgc3BlY19zZXQgPSBUcnVlCisgICAgICAgIGlmIF9lYXRfc2VsZiBpcyBOb25lOgorICAgICAgICAgICAgX2VhdF9zZWxmID0gcGFyZW50IGlzIG5vdCBOb25lCiAKLSAgICAgICAgc2VsZi5fbW9ja19hZGRfc3BlYyhzcGVjLCBzcGVjX3NldCkKKyAgICAgICAgc2VsZi5fbW9ja19hZGRfc3BlYyhzcGVjLCBzcGVjX3NldCwgX3NwZWNfYXNfaW5zdGFuY2UsIF9lYXRfc2VsZikKIAogICAgICAgICBfX2RpY3RfX1snX21vY2tfY2hpbGRyZW4nXSA9IHt9CiAgICAgICAgIF9fZGljdF9fWydfbW9ja193cmFwcyddID0gd3JhcHMKQEAgLTQyOCwyMCArNDM3LDI2IEBACiAgICAgICAgIHNlbGYuX21vY2tfYWRkX3NwZWMoc3BlYywgc3BlY19zZXQpCiAKIAotICAgIGRlZiBfbW9ja19hZGRfc3BlYyhzZWxmLCBzcGVjLCBzcGVjX3NldCk6CisgICAgZGVmIF9tb2NrX2FkZF9zcGVjKHNlbGYsIHNwZWMsIHNwZWNfc2V0LCBfc3BlY19hc19pbnN0YW5jZT1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgX2VhdF9zZWxmPUZhbHNlKToKICAgICAgICAgX3NwZWNfY2xhc3MgPSBOb25lCisgICAgICAgIF9zcGVjX3NpZ25hdHVyZSA9IE5vbmUKIAogICAgICAgICBpZiBzcGVjIGlzIG5vdCBOb25lIGFuZCBub3QgX2lzX2xpc3Qoc3BlYyk6CiAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHNwZWMsIHR5cGUpOgogICAgICAgICAgICAgICAgIF9zcGVjX2NsYXNzID0gc3BlYwogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBfc3BlY19jbGFzcyA9IF9nZXRfY2xhc3Moc3BlYykKKyAgICAgICAgICAgIHJlcyA9IF9nZXRfc2lnbmF0dXJlX29iamVjdChzcGVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9zcGVjX2FzX2luc3RhbmNlLCBfZWF0X3NlbGYpCisgICAgICAgICAgICBfc3BlY19zaWduYXR1cmUgPSByZXMgYW5kIHJlc1sxXQogCiAgICAgICAgICAgICBzcGVjID0gZGlyKHNwZWMpCiAKICAgICAgICAgX19kaWN0X18gPSBzZWxmLl9fZGljdF9fCiAgICAgICAgIF9fZGljdF9fWydfc3BlY19jbGFzcyddID0gX3NwZWNfY2xhc3MKICAgICAgICAgX19kaWN0X19bJ19zcGVjX3NldCddID0gc3BlY19zZXQKKyAgICAgICAgX19kaWN0X19bJ19zcGVjX3NpZ25hdHVyZSddID0gX3NwZWNfc2lnbmF0dXJlCiAgICAgICAgIF9fZGljdF9fWydfbW9ja19tZXRob2RzJ10gPSBzcGVjCiAKIApAQCAtNDg3LDcgKzUwMiwxMSBAQAogICAgICAgICBkZWxlZ2F0ZWQgPSBzZWxmLl9tb2NrX2RlbGVnYXRlCiAgICAgICAgIGlmIGRlbGVnYXRlZCBpcyBOb25lOgogICAgICAgICAgICAgcmV0dXJuIHNlbGYuX21vY2tfc2lkZV9lZmZlY3QKLSAgICAgICAgcmV0dXJuIGRlbGVnYXRlZC5zaWRlX2VmZmVjdAorICAgICAgICBzZiA9IGRlbGVnYXRlZC5zaWRlX2VmZmVjdAorICAgICAgICBpZiBzZiBpcyBub3QgTm9uZSBhbmQgbm90IGNhbGxhYmxlKHNmKSBhbmQgbm90IGlzaW5zdGFuY2Uoc2YsIF9Nb2NrSXRlcik6CisgICAgICAgICAgICBzZiA9IF9Nb2NrSXRlcihzZikKKyAgICAgICAgICAgIGRlbGVnYXRlZC5zaWRlX2VmZmVjdCA9IHNmCisgICAgICAgIHJldHVybiBzZgogCiAgICAgZGVmIF9fc2V0X3NpZGVfZWZmZWN0KHNlbGYsIHZhbHVlKToKICAgICAgICAgdmFsdWUgPSBfdHJ5X2l0ZXIodmFsdWUpCkBAIC01MDAsOCArNTE5LDE0IEBACiAgICAgc2lkZV9lZmZlY3QgPSBwcm9wZXJ0eShfX2dldF9zaWRlX2VmZmVjdCwgX19zZXRfc2lkZV9lZmZlY3QpCiAKIAotICAgIGRlZiByZXNldF9tb2NrKHNlbGYpOgorICAgIGRlZiByZXNldF9tb2NrKHNlbGYsIHZpc2l0ZWQ9Tm9uZSk6CiAgICAgICAgICJSZXN0b3JlIHRoZSBtb2NrIG9iamVjdCB0byBpdHMgaW5pdGlhbCBzdGF0ZS4iCisgICAgICAgIGlmIHZpc2l0ZWQgaXMgTm9uZToKKyAgICAgICAgICAgIHZpc2l0ZWQgPSBbXQorICAgICAgICBpZiBpZChzZWxmKSBpbiB2aXNpdGVkOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHZpc2l0ZWQuYXBwZW5kKGlkKHNlbGYpKQorCiAgICAgICAgIHNlbGYuY2FsbGVkID0gRmFsc2UKICAgICAgICAgc2VsZi5jYWxsX2FyZ3MgPSBOb25lCiAgICAgICAgIHNlbGYuY2FsbF9jb3VudCA9IDAKQEAgLTUxMiwxMSArNTM3LDExIEBACiAgICAgICAgIGZvciBjaGlsZCBpbiBzZWxmLl9tb2NrX2NoaWxkcmVuLnZhbHVlcygpOgogICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShjaGlsZCwgX1NwZWNTdGF0ZSk6CiAgICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIGNoaWxkLnJlc2V0X21vY2soKQorICAgICAgICAgICAgY2hpbGQucmVzZXRfbW9jayh2aXNpdGVkKQogCiAgICAgICAgIHJldCA9IHNlbGYuX21vY2tfcmV0dXJuX3ZhbHVlCiAgICAgICAgIGlmIF9pc19pbnN0YW5jZV9tb2NrKHJldCkgYW5kIHJldCBpcyBub3Qgc2VsZjoKLSAgICAgICAgICAgIHJldC5yZXNldF9tb2NrKCkKKyAgICAgICAgICAgIHJldC5yZXNldF9tb2NrKHZpc2l0ZWQpCiAKIAogICAgIGRlZiBjb25maWd1cmVfbW9jayhzZWxmLCAqKmt3YXJncyk6CkBAIC02OTUsNyArNzIwLDYgQEAKICAgICAgICAgc2VsZi5fbW9ja19jaGlsZHJlbltuYW1lXSA9IF9kZWxldGVkCiAKIAotCiAgICAgZGVmIF9mb3JtYXRfbW9ja19jYWxsX3NpZ25hdHVyZShzZWxmLCBhcmdzLCBrd2FyZ3MpOgogICAgICAgICBuYW1lID0gc2VsZi5fbW9ja19uYW1lIG9yICdtb2NrJwogICAgICAgICByZXR1cm4gX2Zvcm1hdF9jYWxsX3NpZ25hdHVyZShuYW1lLCBhcmdzLCBrd2FyZ3MpCkBAIC03MTEsNiArNzM1LDI4IEBACiAgICAgICAgIHJldHVybiBtZXNzYWdlICUgKGV4cGVjdGVkX3N0cmluZywgYWN0dWFsX3N0cmluZykKIAogCisgICAgZGVmIF9jYWxsX21hdGNoZXIoc2VsZiwgX2NhbGwpOgorICAgICAgICAiIiIKKyAgICAgICAgR2l2ZW4gYSBjYWxsIChvciBzaW1wbHkgYSAoYXJncywga3dhcmdzKSB0dXBsZSksIHJldHVybiBhCisgICAgICAgIGNvbXBhcmlzb24ga2V5IHN1aXRhYmxlIGZvciBtYXRjaGluZyB3aXRoIG90aGVyIGNhbGxzLgorICAgICAgICBUaGlzIGlzIGEgYmVzdCBlZmZvcnQgbWV0aG9kIHdoaWNoIHJlbGllcyBvbiB0aGUgc3BlYydzIHNpZ25hdHVyZSwKKyAgICAgICAgaWYgYXZhaWxhYmxlLCBvciBmYWxscyBiYWNrIG9uIHRoZSBhcmd1bWVudHMgdGhlbXNlbHZlcy4KKyAgICAgICAgIiIiCisgICAgICAgIHNpZyA9IHNlbGYuX3NwZWNfc2lnbmF0dXJlCisgICAgICAgIGlmIHNpZyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGlmIGxlbihfY2FsbCkgPT0gMjoKKyAgICAgICAgICAgICAgICBuYW1lID0gJycKKyAgICAgICAgICAgICAgICBhcmdzLCBrd2FyZ3MgPSBfY2FsbAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBuYW1lLCBhcmdzLCBrd2FyZ3MgPSBfY2FsbAorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJldHVybiBuYW1lLCBzaWcuYmluZCgqYXJncywgKiprd2FyZ3MpCisgICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgcmV0dXJuIGUud2l0aF90cmFjZWJhY2soTm9uZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBfY2FsbAorCisKICAgICBkZWYgYXNzZXJ0X2NhbGxlZF93aXRoKF9tb2NrX3NlbGYsICphcmdzLCAqKmt3YXJncyk6CiAgICAgICAgICIiImFzc2VydCB0aGF0IHRoZSBtb2NrIHdhcyBjYWxsZWQgd2l0aCB0aGUgc3BlY2lmaWVkIGFyZ3VtZW50cy4KIApAQCAtNzIxLDkgKzc2NywxNCBAQAogICAgICAgICAgICAgZXhwZWN0ZWQgPSBzZWxmLl9mb3JtYXRfbW9ja19jYWxsX3NpZ25hdHVyZShhcmdzLCBrd2FyZ3MpCiAgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcignRXhwZWN0ZWQgY2FsbDogJXNcbk5vdCBjYWxsZWQnICUgKGV4cGVjdGVkLCkpCiAKLSAgICAgICAgaWYgc2VsZi5jYWxsX2FyZ3MgIT0gKGFyZ3MsIGt3YXJncyk6CisgICAgICAgIGRlZiBfZXJyb3JfbWVzc2FnZSgpOgogICAgICAgICAgICAgbXNnID0gc2VsZi5fZm9ybWF0X21vY2tfZmFpbHVyZV9tZXNzYWdlKGFyZ3MsIGt3YXJncykKLSAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKG1zZykKKyAgICAgICAgICAgIHJldHVybiBtc2cKKyAgICAgICAgZXhwZWN0ZWQgPSBzZWxmLl9jYWxsX21hdGNoZXIoKGFyZ3MsIGt3YXJncykpCisgICAgICAgIGFjdHVhbCA9IHNlbGYuX2NhbGxfbWF0Y2hlcihzZWxmLmNhbGxfYXJncykKKyAgICAgICAgaWYgZXhwZWN0ZWQgIT0gYWN0dWFsOgorICAgICAgICAgICAgY2F1c2UgPSBleHBlY3RlZCBpZiBpc2luc3RhbmNlKGV4cGVjdGVkLCBFeGNlcHRpb24pIGVsc2UgTm9uZQorICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoX2Vycm9yX21lc3NhZ2UoKSkgZnJvbSBjYXVzZQogCiAKICAgICBkZWYgYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoX21vY2tfc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKQEAgLTc0NywxOCArNzk4LDIxIEBACiAKICAgICAgICAgSWYgYGFueV9vcmRlcmAgaXMgVHJ1ZSB0aGVuIHRoZSBjYWxscyBjYW4gYmUgaW4gYW55IG9yZGVyLCBidXQKICAgICAgICAgdGhleSBtdXN0IGFsbCBhcHBlYXIgaW4gYG1vY2tfY2FsbHNgLiIiIgorICAgICAgICBleHBlY3RlZCA9IFtzZWxmLl9jYWxsX21hdGNoZXIoYykgZm9yIGMgaW4gY2FsbHNdCisgICAgICAgIGNhdXNlID0gZXhwZWN0ZWQgaWYgaXNpbnN0YW5jZShleHBlY3RlZCwgRXhjZXB0aW9uKSBlbHNlIE5vbmUKKyAgICAgICAgYWxsX2NhbGxzID0gX0NhbGxMaXN0KHNlbGYuX2NhbGxfbWF0Y2hlcihjKSBmb3IgYyBpbiBzZWxmLm1vY2tfY2FsbHMpCiAgICAgICAgIGlmIG5vdCBhbnlfb3JkZXI6Ci0gICAgICAgICAgICBpZiBjYWxscyBub3QgaW4gc2VsZi5tb2NrX2NhbGxzOgorICAgICAgICAgICAgaWYgZXhwZWN0ZWQgbm90IGluIGFsbF9jYWxsczoKICAgICAgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigKICAgICAgICAgICAgICAgICAgICAgJ0NhbGxzIG5vdCBmb3VuZC5cbkV4cGVjdGVkOiAlclxuJwogICAgICAgICAgICAgICAgICAgICAnQWN0dWFsOiAlcicgJSAoY2FsbHMsIHNlbGYubW9ja19jYWxscykKLSAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgKSBmcm9tIGNhdXNlCiAgICAgICAgICAgICByZXR1cm4KIAotICAgICAgICBhbGxfY2FsbHMgPSBsaXN0KHNlbGYubW9ja19jYWxscykKKyAgICAgICAgYWxsX2NhbGxzID0gbGlzdChhbGxfY2FsbHMpCiAKICAgICAgICAgbm90X2ZvdW5kID0gW10KLSAgICAgICAgZm9yIGthbGwgaW4gY2FsbHM6CisgICAgICAgIGZvciBrYWxsIGluIGV4cGVjdGVkOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGFsbF9jYWxscy5yZW1vdmUoa2FsbCkKICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgpAQCAtNzY2LDcgKzgyMCw3IEBACiAgICAgICAgIGlmIG5vdF9mb3VuZDoKICAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKAogICAgICAgICAgICAgICAgICclciBub3QgYWxsIGZvdW5kIGluIGNhbGwgbGlzdCcgJSAodHVwbGUobm90X2ZvdW5kKSwpCi0gICAgICAgICAgICApCisgICAgICAgICAgICApIGZyb20gY2F1c2UKIAogCiAgICAgZGVmIGFzc2VydF9hbnlfY2FsbChzZWxmLCAqYXJncywgKiprd2FyZ3MpOgpAQCAtNzc1LDEyICs4MjksMTQgQEAKICAgICAgICAgVGhlIGFzc2VydCBwYXNzZXMgaWYgdGhlIG1vY2sgaGFzICpldmVyKiBiZWVuIGNhbGxlZCwgdW5saWtlCiAgICAgICAgIGBhc3NlcnRfY2FsbGVkX3dpdGhgIGFuZCBgYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGhgIHRoYXQgb25seSBwYXNzIGlmCiAgICAgICAgIHRoZSBjYWxsIGlzIHRoZSBtb3N0IHJlY2VudCBvbmUuIiIiCi0gICAgICAgIGthbGwgPSBjYWxsKCphcmdzLCAqKmt3YXJncykKLSAgICAgICAgaWYga2FsbCBub3QgaW4gc2VsZi5jYWxsX2FyZ3NfbGlzdDoKKyAgICAgICAgZXhwZWN0ZWQgPSBzZWxmLl9jYWxsX21hdGNoZXIoKGFyZ3MsIGt3YXJncykpCisgICAgICAgIGFjdHVhbCA9IFtzZWxmLl9jYWxsX21hdGNoZXIoYykgZm9yIGMgaW4gc2VsZi5jYWxsX2FyZ3NfbGlzdF0KKyAgICAgICAgaWYgZXhwZWN0ZWQgbm90IGluIGFjdHVhbDoKKyAgICAgICAgICAgIGNhdXNlID0gZXhwZWN0ZWQgaWYgaXNpbnN0YW5jZShleHBlY3RlZCwgRXhjZXB0aW9uKSBlbHNlIE5vbmUKICAgICAgICAgICAgIGV4cGVjdGVkX3N0cmluZyA9IHNlbGYuX2Zvcm1hdF9tb2NrX2NhbGxfc2lnbmF0dXJlKGFyZ3MsIGt3YXJncykKICAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKAogICAgICAgICAgICAgICAgICclcyBjYWxsIG5vdCBmb3VuZCcgJSBleHBlY3RlZF9zdHJpbmcKLSAgICAgICAgICAgICkKKyAgICAgICAgICAgICkgZnJvbSBjYXVzZQogCiAKICAgICBkZWYgX2dldF9jaGlsZF9tb2NrKHNlbGYsICoqa3cpOgpAQCAtODUwLDExICs5MDYsMTIgQEAKICAgICAgICAgc2VsZiA9IF9tb2NrX3NlbGYKICAgICAgICAgc2VsZi5jYWxsZWQgPSBUcnVlCiAgICAgICAgIHNlbGYuY2FsbF9jb3VudCArPSAxCi0gICAgICAgIHNlbGYuY2FsbF9hcmdzID0gX0NhbGwoKGFyZ3MsIGt3YXJncyksIHR3bz1UcnVlKQotICAgICAgICBzZWxmLmNhbGxfYXJnc19saXN0LmFwcGVuZChfQ2FsbCgoYXJncywga3dhcmdzKSwgdHdvPVRydWUpKQotCiAgICAgICAgIF9uZXdfbmFtZSA9IHNlbGYuX21vY2tfbmV3X25hbWUKICAgICAgICAgX25ld19wYXJlbnQgPSBzZWxmLl9tb2NrX25ld19wYXJlbnQKKworICAgICAgICBfY2FsbCA9IF9DYWxsKChhcmdzLCBrd2FyZ3MpLCB0d289VHJ1ZSkKKyAgICAgICAgc2VsZi5jYWxsX2FyZ3MgPSBfY2FsbAorICAgICAgICBzZWxmLmNhbGxfYXJnc19saXN0LmFwcGVuZChfY2FsbCkKICAgICAgICAgc2VsZi5tb2NrX2NhbGxzLmFwcGVuZChfQ2FsbCgoJycsIGFyZ3MsIGt3YXJncykpKQogCiAgICAgICAgIHNlZW4gPSBzZXQoKQpAQCAtOTA5LDggKzk2Niw2IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAogCiAgICAgICAgICAgICByZXRfdmFsID0gZWZmZWN0KCphcmdzLCAqKmt3YXJncykKLSAgICAgICAgICAgIGlmIHJldF92YWwgaXMgREVGQVVMVDoKLSAgICAgICAgICAgICAgICByZXRfdmFsID0gc2VsZi5yZXR1cm5fdmFsdWUKIAogICAgICAgICBpZiAoc2VsZi5fbW9ja193cmFwcyBpcyBub3QgTm9uZSBhbmQKICAgICAgICAgICAgICBzZWxmLl9tb2NrX3JldHVybl92YWx1ZSBpcyBERUZBVUxUKToKQEAgLTEwMDEsNyArMTA1Niw3IEBACiBjbGFzcyBfcGF0Y2gob2JqZWN0KToKIAogICAgIGF0dHJpYnV0ZV9uYW1lID0gTm9uZQotICAgIF9hY3RpdmVfcGF0Y2hlcyA9IHNldCgpCisgICAgX2FjdGl2ZV9wYXRjaGVzID0gW10KIAogICAgIGRlZiBfX2luaXRfXygKICAgICAgICAgICAgIHNlbGYsIGdldHRlciwgYXR0cmlidXRlLCBuZXcsIHNwZWMsIGNyZWF0ZSwKQEAgLTEyNzQsMTMgKzEzMjksMTggQEAKICAgICBkZWYgc3RhcnQoc2VsZik6CiAgICAgICAgICIiIkFjdGl2YXRlIGEgcGF0Y2gsIHJldHVybmluZyBhbnkgY3JlYXRlZCBtb2NrLiIiIgogICAgICAgICByZXN1bHQgPSBzZWxmLl9fZW50ZXJfXygpCi0gICAgICAgIHNlbGYuX2FjdGl2ZV9wYXRjaGVzLmFkZChzZWxmKQorICAgICAgICBzZWxmLl9hY3RpdmVfcGF0Y2hlcy5hcHBlbmQoc2VsZikKICAgICAgICAgcmV0dXJuIHJlc3VsdAogCiAKICAgICBkZWYgc3RvcChzZWxmKToKICAgICAgICAgIiIiU3RvcCBhbiBhY3RpdmUgcGF0Y2guIiIiCi0gICAgICAgIHNlbGYuX2FjdGl2ZV9wYXRjaGVzLmRpc2NhcmQoc2VsZikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5fYWN0aXZlX3BhdGNoZXMucmVtb3ZlKHNlbGYpCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgIyBJZiB0aGUgcGF0Y2ggaGFzbid0IGJlZW4gc3RhcnRlZCB0aGlzIHdpbGwgZmFpbAorICAgICAgICAgICAgcGFzcworCiAgICAgICAgIHJldHVybiBzZWxmLl9fZXhpdF9fKCkKIAogCkBAIC0xNDAyLDcgKzE0NjIsNyBAQAogICAgIHVzZWQuCiAKICAgICBBIG1vcmUgcG93ZXJmdWwgZm9ybSBvZiBgc3BlY2AgaXMgYGF1dG9zcGVjYC4gSWYgeW91IHNldCBgYXV0b3NwZWM9VHJ1ZWAKLSAgICB0aGVuIHRoZSBtb2NrIHdpdGggYmUgY3JlYXRlZCB3aXRoIGEgc3BlYyBmcm9tIHRoZSBvYmplY3QgYmVpbmcgcmVwbGFjZWQuCisgICAgdGhlbiB0aGUgbW9jayB3aWxsIGJlIGNyZWF0ZWQgd2l0aCBhIHNwZWMgZnJvbSB0aGUgb2JqZWN0IGJlaW5nIHJlcGxhY2VkLgogICAgIEFsbCBhdHRyaWJ1dGVzIG9mIHRoZSBtb2NrIHdpbGwgYWxzbyBoYXZlIHRoZSBzcGVjIG9mIHRoZSBjb3JyZXNwb25kaW5nCiAgICAgYXR0cmlidXRlIG9mIHRoZSBvYmplY3QgYmVpbmcgcmVwbGFjZWQuIE1ldGhvZHMgYW5kIGZ1bmN0aW9ucyBiZWluZwogICAgIG1vY2tlZCB3aWxsIGhhdmUgdGhlaXIgYXJndW1lbnRzIGNoZWNrZWQgYW5kIHdpbGwgcmFpc2UgYSBgVHlwZUVycm9yYCBpZgpAQCAtMTU3Myw4ICsxNjMzLDggQEAKIAogCiBkZWYgX3BhdGNoX3N0b3BhbGwoKToKLSAgICAiIiJTdG9wIGFsbCBhY3RpdmUgcGF0Y2hlcy4iIiIKLSAgICBmb3IgcGF0Y2ggaW4gbGlzdChfcGF0Y2guX2FjdGl2ZV9wYXRjaGVzKToKKyAgICAiIiJTdG9wIGFsbCBhY3RpdmUgcGF0Y2hlcy4gTElGTyB0byB1bnJvbGwgbmVzdGVkIHBhdGNoZXMuIiIiCisgICAgZm9yIHBhdGNoIGluIHJldmVyc2VkKF9wYXRjaC5fYWN0aXZlX3BhdGNoZXMpOgogICAgICAgICBwYXRjaC5zdG9wKCkKIAogCkBAIC0xNTkwLDEzICsxNjUwLDE3IEBACiAgICAgImxlbiBjb250YWlucyBpdGVyICIKICAgICAiaGFzaCBzdHIgc2l6ZW9mICIKICAgICAiZW50ZXIgZXhpdCAiCi0gICAgImRpdm1vZCBuZWcgcG9zIGFicyBpbnZlcnQgIgorICAgICMgd2UgYWRkZWQgZGl2bW9kIGFuZCByZGl2bW9kIGhlcmUgaW5zdGVhZCBvZiBudW1lcmljcworICAgICMgYmVjYXVzZSB0aGVyZSBpcyBubyBpZGl2bW9kCisgICAgImRpdm1vZCByZGl2bW9kIG5lZyBwb3MgYWJzIGludmVydCAiCiAgICAgImNvbXBsZXggaW50IGZsb2F0IGluZGV4ICIKICAgICAidHJ1bmMgZmxvb3IgY2VpbCAiCiAgICAgImJvb2wgbmV4dCAiCiApCiAKLW51bWVyaWNzID0gImFkZCBzdWIgbXVsIGRpdiBmbG9vcmRpdiBtb2QgbHNoaWZ0IHJzaGlmdCBhbmQgeG9yIG9yIHBvdyAiCitudW1lcmljcyA9ICgKKyAgICAiYWRkIHN1YiBtdWwgZGl2IGZsb29yZGl2IG1vZCBsc2hpZnQgcnNoaWZ0IGFuZCB4b3Igb3IgcG93IHRydWVkaXYiCispCiBpbnBsYWNlID0gJyAnLmpvaW4oJ2klcycgJSBuIGZvciBuIGluIG51bWVyaWNzLnNwbGl0KCkpCiByaWdodCA9ICcgJy5qb2luKCdyJXMnICUgbiBmb3IgbiBpbiBudW1lcmljcy5zcGxpdCgpKQogCkBAIC0xNzEzLDE0ICsxNzc3LDE1IEBACiAKIGNsYXNzIE1hZ2ljTWl4aW4ob2JqZWN0KToKICAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3cpOgorICAgICAgICBzZWxmLl9tb2NrX3NldF9tYWdpY3MoKSAgIyBtYWtlIG1hZ2ljIHdvcmsgZm9yIGt3YXJncyBpbiBpbml0CiAgICAgICAgIF9zYWZlX3N1cGVyKE1hZ2ljTWl4aW4sIHNlbGYpLl9faW5pdF9fKCphcmdzLCAqKmt3KQotICAgICAgICBzZWxmLl9tb2NrX3NldF9tYWdpY3MoKQorICAgICAgICBzZWxmLl9tb2NrX3NldF9tYWdpY3MoKSAgIyBmaXggbWFnaWMgYnJva2VuIGJ5IHVwcGVyIGxldmVsIGluaXQKIAogCiAgICAgZGVmIF9tb2NrX3NldF9tYWdpY3Moc2VsZik6CiAgICAgICAgIHRoZXNlX21hZ2ljcyA9IF9tYWdpY3MKIAotICAgICAgICBpZiBzZWxmLl9tb2NrX21ldGhvZHMgaXMgbm90IE5vbmU6CisgICAgICAgIGlmIGdldGF0dHIoc2VsZiwgIl9tb2NrX21ldGhvZHMiLCBOb25lKSBpcyBub3QgTm9uZToKICAgICAgICAgICAgIHRoZXNlX21hZ2ljcyA9IF9tYWdpY3MuaW50ZXJzZWN0aW9uKHNlbGYuX21vY2tfbWV0aG9kcykKIAogICAgICAgICAgICAgcmVtb3ZlX21hZ2ljcyA9IHNldCgpCkBAIC0xOTIxLDggKzE5ODYsNyBAQAogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBvdGhlcl9hcmdzID0gKCkKICAgICAgICAgICAgICAgICBvdGhlcl9rd2FyZ3MgPSB2YWx1ZQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgIyBsZW4gMgorICAgICAgICBlbGlmIGxlbl9vdGhlciA9PSAyOgogICAgICAgICAgICAgIyBjb3VsZCBiZSAobmFtZSwgYXJncykgb3IgKG5hbWUsIGt3YXJncykgb3IgKGFyZ3MsIGt3YXJncykKICAgICAgICAgICAgIGZpcnN0LCBzZWNvbmQgPSBvdGhlcgogICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShmaXJzdCwgc3RyKToKQEAgLTE5MzMsNiArMTk5Nyw4IEBACiAgICAgICAgICAgICAgICAgICAgIG90aGVyX2FyZ3MsIG90aGVyX2t3YXJncyA9ICgpLCBzZWNvbmQKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgb3RoZXJfYXJncywgb3RoZXJfa3dhcmdzID0gZmlyc3QsIHNlY29uZAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAKICAgICAgICAgaWYgc2VsZl9uYW1lIGFuZCBvdGhlcl9uYW1lICE9IHNlbGZfbmFtZToKICAgICAgICAgICAgIHJldHVybiBGYWxzZQpAQCAtMjAzMCw2ICsyMDk2LDggQEAKICAgICBlbGlmIHNwZWMgaXMgTm9uZToKICAgICAgICAgIyBOb25lIHdlIG1vY2sgd2l0aCBhIG5vcm1hbCBtb2NrIHdpdGhvdXQgYSBzcGVjCiAgICAgICAgIF9rd2FyZ3MgPSB7fQorICAgIGlmIF9rd2FyZ3MgYW5kIGluc3RhbmNlOgorICAgICAgICBfa3dhcmdzWydfc3BlY19hc19pbnN0YW5jZSddID0gVHJ1ZQogCiAgICAgX2t3YXJncy51cGRhdGUoa3dhcmdzKQogCkBAIC0yMDQzLDYgKzIxMTEsOCBAQAogICAgIGVsaWYgaXNfdHlwZSBhbmQgaW5zdGFuY2UgYW5kIG5vdCBfaW5zdGFuY2VfY2FsbGFibGUoc3BlYyk6CiAgICAgICAgIEtsYXNzID0gTm9uQ2FsbGFibGVNYWdpY01vY2sKIAorICAgIF9uYW1lID0gX2t3YXJncy5wb3AoJ25hbWUnLCBfbmFtZSkKKwogICAgIF9uZXdfbmFtZSA9IF9uYW1lCiAgICAgaWYgX3BhcmVudCBpcyBOb25lOgogICAgICAgICAjIGZvciBhIHRvcCBsZXZlbCBvYmplY3Qgbm8gX25ld19uYW1lIHNob3VsZCBiZSBzZXQKQEAgLTIwOTYsMTAgKzIxNjYsMTIgQEAKICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uoc3BlYywgRnVuY3Rpb25UeXBlcyk6CiAgICAgICAgICAgICAgICAgcGFyZW50ID0gbW9jay5tb2NrCiAKLSAgICAgICAgICAgIG5ldyA9IE1hZ2ljTW9jayhwYXJlbnQ9cGFyZW50LCBuYW1lPWVudHJ5LCBfbmV3X25hbWU9ZW50cnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgX25ld19wYXJlbnQ9cGFyZW50LCAqKmt3YXJncykKLSAgICAgICAgICAgIG1vY2suX21vY2tfY2hpbGRyZW5bZW50cnldID0gbmV3CiAgICAgICAgICAgICBza2lwZmlyc3QgPSBfbXVzdF9za2lwKHNwZWMsIGVudHJ5LCBpc190eXBlKQorICAgICAgICAgICAga3dhcmdzWydfZWF0X3NlbGYnXSA9IHNraXBmaXJzdAorICAgICAgICAgICAgbmV3ID0gTWFnaWNNb2NrKHBhcmVudD1wYXJlbnQsIG5hbWU9ZW50cnksIF9uZXdfbmFtZT1lbnRyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfbmV3X3BhcmVudD1wYXJlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiprd2FyZ3MpCisgICAgICAgICAgICBtb2NrLl9tb2NrX2NoaWxkcmVuW2VudHJ5XSA9IG5ldwogICAgICAgICAgICAgX2NoZWNrX3NpZ25hdHVyZShvcmlnaW5hbCwgbmV3LCBza2lwZmlyc3Q9c2tpcGZpcnN0KQogCiAgICAgICAgICMgc28gZnVuY3Rpb25zIGNyZWF0ZWQgd2l0aCBfc2V0X3NpZ25hdHVyZSBiZWNvbWUgaW5zdGFuY2UgYXR0cmlidXRlcywKQEAgLTIxMTMsNiArMjE4NSwxMCBAQAogCiAKIGRlZiBfbXVzdF9za2lwKHNwZWMsIGVudHJ5LCBpc190eXBlKToKKyAgICAiIiIKKyAgICBSZXR1cm4gd2hldGhlciB3ZSBzaG91bGQgc2tpcCB0aGUgZmlyc3QgYXJndW1lbnQgb24gc3BlYydzIGBlbnRyeWAKKyAgICBhdHRyaWJ1dGUuCisgICAgIiIiCiAgICAgaWYgbm90IGlzaW5zdGFuY2Uoc3BlYywgdHlwZSk6CiAgICAgICAgIGlmIGVudHJ5IGluIGdldGF0dHIoc3BlYywgJ19fZGljdF9fJywge30pOgogICAgICAgICAgICAgIyBpbnN0YW5jZSBhdHRyaWJ1dGUgLSBzaG91bGRuJ3Qgc2tpcApAQCAtMjEyNSw3ICsyMjAxLDEyIEBACiAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICBpZiBpc2luc3RhbmNlKHJlc3VsdCwgKHN0YXRpY21ldGhvZCwgY2xhc3NtZXRob2QpKToKICAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICByZXR1cm4gaXNfdHlwZQorICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZ2V0YXR0cihyZXN1bHQsICdfX2dldF9fJywgTm9uZSksIE1ldGhvZFdyYXBwZXJUeXBlcyk6CisgICAgICAgICAgICAjIE5vcm1hbCBtZXRob2QgPT4gc2tpcCBpZiBsb29rZWQgdXAgb24gdHlwZQorICAgICAgICAgICAgIyAoaWYgbG9va2VkIHVwIG9uIGluc3RhbmNlLCBzZWxmIGlzIGFscmVhZHkgc2tpcHBlZCkKKyAgICAgICAgICAgIHJldHVybiBpc190eXBlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKIAogICAgICMgc2hvdWxkbid0IGdldCBoZXJlIHVubGVzcyBmdW5jdGlvbiBpcyBhIGR5bmFtaWNhbGx5IHByb3ZpZGVkIGF0dHJpYnV0ZQogICAgICMgWFhYWCB1bnRlc3RlZCBiZWhhdmlvdXIKQEAgLTIxNTksOSArMjI0MCwzMyBAQAogICAgIHR5cGUoQU5ZLl9fZXFfXyksCiApCiAKK01ldGhvZFdyYXBwZXJUeXBlcyA9ICgKKyAgICB0eXBlKEFOWS5fX2VxX18uX19nZXRfXyksCispCisKIAogZmlsZV9zcGVjID0gTm9uZQogCitkZWYgX2l0ZXJhdGVfcmVhZF9kYXRhKHJlYWRfZGF0YSk6CisgICAgIyBIZWxwZXIgZm9yIG1vY2tfb3BlbjoKKyAgICAjIFJldHJpZXZlIGxpbmVzIGZyb20gcmVhZF9kYXRhIHZpYSBhIGdlbmVyYXRvciBzbyB0aGF0IHNlcGFyYXRlIGNhbGxzIHRvCisgICAgIyByZWFkbGluZSwgcmVhZCwgYW5kIHJlYWRsaW5lcyBhcmUgcHJvcGVybHkgaW50ZXJsZWF2ZWQKKyAgICBzZXAgPSBiJ1xuJyBpZiBpc2luc3RhbmNlKHJlYWRfZGF0YSwgYnl0ZXMpIGVsc2UgJ1xuJworICAgIGRhdGFfYXNfbGlzdCA9IFtsICsgc2VwIGZvciBsIGluIHJlYWRfZGF0YS5zcGxpdChzZXApXQorCisgICAgaWYgZGF0YV9hc19saXN0Wy0xXSA9PSBzZXA6CisgICAgICAgICMgSWYgdGhlIGxhc3QgbGluZSBlbmRlZCBpbiBhIG5ld2xpbmUsIHRoZSBsaXN0IGNvbXByZWhlbnNpb24gd2lsbCBoYXZlIGFuCisgICAgICAgICMgZXh0cmEgZW50cnkgdGhhdCdzIGp1c3QgYSBuZXdsaW5lLiAgUmVtb3ZlIHRoaXMuCisgICAgICAgIGRhdGFfYXNfbGlzdCA9IGRhdGFfYXNfbGlzdFs6LTFdCisgICAgZWxzZToKKyAgICAgICAgIyBJZiB0aGVyZSB3YXNuJ3QgYW4gZXh0cmEgbmV3bGluZSBieSBpdHNlbGYsIHRoZW4gdGhlIGZpbGUgYmVpbmcKKyAgICAgICAgIyBlbXVsYXRlZCBkb2Vzbid0IGhhdmUgYSBuZXdsaW5lIHRvIGVuZCB0aGUgbGFzdCBsaW5lICByZW1vdmUgdGhlCisgICAgICAgICMgbmV3bGluZSB0aGF0IG91ciBuYWl2ZSBmb3JtYXQoKSBhZGRlZAorICAgICAgICBkYXRhX2FzX2xpc3RbLTFdID0gZGF0YV9hc19saXN0Wy0xXVs6LTFdCisKKyAgICBmb3IgbGluZSBpbiBkYXRhX2FzX2xpc3Q6CisgICAgICAgIHlpZWxkIGxpbmUKKwogCiBkZWYgbW9ja19vcGVuKG1vY2s9Tm9uZSwgcmVhZF9kYXRhPScnKToKICAgICAiIiIKQEAgLTIxNzIsOSArMjI3NywyNyBAQAogICAgIGRlZmF1bHQpIHRoZW4gYSBgTWFnaWNNb2NrYCB3aWxsIGJlIGNyZWF0ZWQgZm9yIHlvdSwgd2l0aCB0aGUgQVBJIGxpbWl0ZWQKICAgICB0byBtZXRob2RzIG9yIGF0dHJpYnV0ZXMgYXZhaWxhYmxlIG9uIHN0YW5kYXJkIGZpbGUgaGFuZGxlcy4KIAotICAgIGByZWFkX2RhdGFgIGlzIGEgc3RyaW5nIGZvciB0aGUgYHJlYWRgIG1ldGhvZCBvZiB0aGUgZmlsZSBoYW5kbGUgdG8gcmV0dXJuLgotICAgIFRoaXMgaXMgYW4gZW1wdHkgc3RyaW5nIGJ5IGRlZmF1bHQuCisgICAgYHJlYWRfZGF0YWAgaXMgYSBzdHJpbmcgZm9yIHRoZSBgcmVhZGAgbWV0aG9kZGxpbmVgLCBhbmQgYHJlYWRsaW5lc2Agb2YgdGhlCisgICAgZmlsZSBoYW5kbGUgdG8gcmV0dXJuLiAgVGhpcyBpcyBhbiBlbXB0eSBzdHJpbmcgYnkgZGVmYXVsdC4KICAgICAiIiIKKyAgICBkZWYgX3JlYWRsaW5lc19zaWRlX2VmZmVjdCgqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBpZiBoYW5kbGUucmVhZGxpbmVzLnJldHVybl92YWx1ZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBoYW5kbGUucmVhZGxpbmVzLnJldHVybl92YWx1ZQorICAgICAgICByZXR1cm4gbGlzdChfc3RhdGVbMF0pCisKKyAgICBkZWYgX3JlYWRfc2lkZV9lZmZlY3QoKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgaWYgaGFuZGxlLnJlYWQucmV0dXJuX3ZhbHVlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmV0dXJuIGhhbmRsZS5yZWFkLnJldHVybl92YWx1ZQorICAgICAgICByZXR1cm4gdHlwZShyZWFkX2RhdGEpKCkuam9pbihfc3RhdGVbMF0pCisKKyAgICBkZWYgX3JlYWRsaW5lX3NpZGVfZWZmZWN0KCk6CisgICAgICAgIGlmIGhhbmRsZS5yZWFkbGluZS5yZXR1cm5fdmFsdWUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgIHlpZWxkIGhhbmRsZS5yZWFkbGluZS5yZXR1cm5fdmFsdWUKKyAgICAgICAgZm9yIGxpbmUgaW4gX3N0YXRlWzBdOgorICAgICAgICAgICAgeWllbGQgbGluZQorCisKICAgICBnbG9iYWwgZmlsZV9zcGVjCiAgICAgaWYgZmlsZV9zcGVjIGlzIE5vbmU6CiAgICAgICAgIGltcG9ydCBfaW8KQEAgLTIxODQsMTAgKzIzMDcsMjkgQEAKICAgICAgICAgbW9jayA9IE1hZ2ljTW9jayhuYW1lPSdvcGVuJywgc3BlYz1vcGVuKQogCiAgICAgaGFuZGxlID0gTWFnaWNNb2NrKHNwZWM9ZmlsZV9zcGVjKQotICAgIGhhbmRsZS53cml0ZS5yZXR1cm5fdmFsdWUgPSBOb25lCiAgICAgaGFuZGxlLl9fZW50ZXJfXy5yZXR1cm5fdmFsdWUgPSBoYW5kbGUKLSAgICBoYW5kbGUucmVhZC5yZXR1cm5fdmFsdWUgPSByZWFkX2RhdGEKIAorICAgIF9zdGF0ZSA9IFtfaXRlcmF0ZV9yZWFkX2RhdGEocmVhZF9kYXRhKSwgTm9uZV0KKworICAgIGhhbmRsZS53cml0ZS5yZXR1cm5fdmFsdWUgPSBOb25lCisgICAgaGFuZGxlLnJlYWQucmV0dXJuX3ZhbHVlID0gTm9uZQorICAgIGhhbmRsZS5yZWFkbGluZS5yZXR1cm5fdmFsdWUgPSBOb25lCisgICAgaGFuZGxlLnJlYWRsaW5lcy5yZXR1cm5fdmFsdWUgPSBOb25lCisKKyAgICBoYW5kbGUucmVhZC5zaWRlX2VmZmVjdCA9IF9yZWFkX3NpZGVfZWZmZWN0CisgICAgX3N0YXRlWzFdID0gX3JlYWRsaW5lX3NpZGVfZWZmZWN0KCkKKyAgICBoYW5kbGUucmVhZGxpbmUuc2lkZV9lZmZlY3QgPSBfc3RhdGVbMV0KKyAgICBoYW5kbGUucmVhZGxpbmVzLnNpZGVfZWZmZWN0ID0gX3JlYWRsaW5lc19zaWRlX2VmZmVjdAorCisgICAgZGVmIHJlc2V0X2RhdGEoKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgX3N0YXRlWzBdID0gX2l0ZXJhdGVfcmVhZF9kYXRhKHJlYWRfZGF0YSkKKyAgICAgICAgaWYgaGFuZGxlLnJlYWRsaW5lLnNpZGVfZWZmZWN0ID09IF9zdGF0ZVsxXToKKyAgICAgICAgICAgICMgT25seSByZXNldCB0aGUgc2lkZSBlZmZlY3QgaWYgdGhlIHVzZXIgaGFzbid0IG92ZXJyaWRkZW4gaXQuCisgICAgICAgICAgICBfc3RhdGVbMV0gPSBfcmVhZGxpbmVfc2lkZV9lZmZlY3QoKQorICAgICAgICAgICAgaGFuZGxlLnJlYWRsaW5lLnNpZGVfZWZmZWN0ID0gX3N0YXRlWzFdCisgICAgICAgIHJldHVybiBERUZBVUxUCisKKyAgICBtb2NrLnNpZGVfZWZmZWN0ID0gcmVzZXRfZGF0YQogICAgIG1vY2sucmV0dXJuX3ZhbHVlID0gaGFuZGxlCiAgICAgcmV0dXJuIG1vY2sKIApkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3Jlc3VsdC5weSBiL0xpYi91bml0dGVzdC9yZXN1bHQucHkKaW5kZXggOTdlNTQyNi4uOGUwYTY0MyAxMDA2NDQKLS0tIGEvTGliL3VuaXR0ZXN0L3Jlc3VsdC5weQorKysgYi9MaWIvdW5pdHRlc3QvcmVzdWx0LnB5CkBAIC0xMjEsNiArMTIxLDIzIEBACiAgICAgICAgIHNlbGYuZmFpbHVyZXMuYXBwZW5kKCh0ZXN0LCBzZWxmLl9leGNfaW5mb190b19zdHJpbmcoZXJyLCB0ZXN0KSkpCiAgICAgICAgIHNlbGYuX21pcnJvck91dHB1dCA9IFRydWUKIAorICAgIGRlZiBhZGRTdWJUZXN0KHNlbGYsIHRlc3QsIHN1YnRlc3QsIGVycik6CisgICAgICAgICIiIkNhbGxlZCBhdCB0aGUgZW5kIG9mIGEgc3VidGVzdC4KKyAgICAgICAgJ2VycicgaXMgTm9uZSBpZiB0aGUgc3VidGVzdCBlbmRlZCBzdWNjZXNzZnVsbHksIG90aGVyd2lzZSBpdCdzIGEKKyAgICAgICAgdHVwbGUgb2YgdmFsdWVzIGFzIHJldHVybmVkIGJ5IHN5cy5leGNfaW5mbygpLgorICAgICAgICAiIiIKKyAgICAgICAgIyBCeSBkZWZhdWx0LCB3ZSBkb24ndCBkbyBhbnl0aGluZyB3aXRoIHN1Y2Nlc3NmdWwgc3VidGVzdHMsIGJ1dAorICAgICAgICAjIG1vcmUgc29waGlzdGljYXRlZCB0ZXN0IHJlc3VsdHMgbWlnaHQgd2FudCB0byByZWNvcmQgdGhlbS4KKyAgICAgICAgaWYgZXJyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgaWYgZ2V0YXR0cihzZWxmLCAnZmFpbGZhc3QnLCBGYWxzZSk6CisgICAgICAgICAgICAgICAgc2VsZi5zdG9wKCkKKyAgICAgICAgICAgIGlmIGlzc3ViY2xhc3MoZXJyWzBdLCB0ZXN0LmZhaWx1cmVFeGNlcHRpb24pOgorICAgICAgICAgICAgICAgIGVycm9ycyA9IHNlbGYuZmFpbHVyZXMKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZXJyb3JzID0gc2VsZi5lcnJvcnMKKyAgICAgICAgICAgIGVycm9ycy5hcHBlbmQoKHN1YnRlc3QsIHNlbGYuX2V4Y19pbmZvX3RvX3N0cmluZyhlcnIsIHRlc3QpKSkKKyAgICAgICAgICAgIHNlbGYuX21pcnJvck91dHB1dCA9IFRydWUKKwogICAgIGRlZiBhZGRTdWNjZXNzKHNlbGYsIHRlc3QpOgogICAgICAgICAiQ2FsbGVkIHdoZW4gYSB0ZXN0IGhhcyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IgogICAgICAgICBwYXNzCkBAIC0xNDAsMTEgKzE1NywxNiBAQAogICAgICAgICBzZWxmLnVuZXhwZWN0ZWRTdWNjZXNzZXMuYXBwZW5kKHRlc3QpCiAKICAgICBkZWYgd2FzU3VjY2Vzc2Z1bChzZWxmKToKLSAgICAgICAgIlRlbGxzIHdoZXRoZXIgb3Igbm90IHRoaXMgcmVzdWx0IHdhcyBhIHN1Y2Nlc3MiCi0gICAgICAgIHJldHVybiBsZW4oc2VsZi5mYWlsdXJlcykgPT0gbGVuKHNlbGYuZXJyb3JzKSA9PSAwCisgICAgICAgICIiIlRlbGxzIHdoZXRoZXIgb3Igbm90IHRoaXMgcmVzdWx0IHdhcyBhIHN1Y2Nlc3MuIiIiCisgICAgICAgICMgVGhlIGhhc2F0dHIgY2hlY2sgaXMgZm9yIHRlc3RfcmVzdWx0J3MgT2xkUmVzdWx0IHRlc3QuICBUaGF0CisgICAgICAgICMgd2F5IHRoaXMgbWV0aG9kIHdvcmtzIG9uIG9iamVjdHMgdGhhdCBsYWNrIHRoZSBhdHRyaWJ1dGUuCisgICAgICAgICMgKHdoZXJlIHdvdWxkIHN1Y2ggcmVzdWx0IGludGFuY2VzIGNvbWUgZnJvbT8gb2xkIHN0b3JlZCBwaWNrbGVzPykKKyAgICAgICAgcmV0dXJuICgobGVuKHNlbGYuZmFpbHVyZXMpID09IGxlbihzZWxmLmVycm9ycykgPT0gMCkgYW5kCisgICAgICAgICAgICAgICAgKG5vdCBoYXNhdHRyKHNlbGYsICd1bmV4cGVjdGVkU3VjY2Vzc2VzJykgb3IKKyAgICAgICAgICAgICAgICAgbGVuKHNlbGYudW5leHBlY3RlZFN1Y2Nlc3NlcykgPT0gMCkpCiAKICAgICBkZWYgc3RvcChzZWxmKToKLSAgICAgICAgIkluZGljYXRlcyB0aGF0IHRoZSB0ZXN0cyBzaG91bGQgYmUgYWJvcnRlZCIKKyAgICAgICAgIiIiSW5kaWNhdGVzIHRoYXQgdGhlIHRlc3RzIHNob3VsZCBiZSBhYm9ydGVkLiIiIgogICAgICAgICBzZWxmLnNob3VsZFN0b3AgPSBUcnVlCiAKICAgICBkZWYgX2V4Y19pbmZvX3RvX3N0cmluZyhzZWxmLCBlcnIsIHRlc3QpOgpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3N1aXRlLnB5IGIvTGliL3VuaXR0ZXN0L3N1aXRlLnB5CmluZGV4IGNkZTVkMzguLjc2YzQ3MjUgMTAwNjQ0Ci0tLSBhL0xpYi91bml0dGVzdC9zdWl0ZS5weQorKysgYi9MaWIvdW5pdHRlc3Qvc3VpdGUucHkKQEAgLTE2LDggKzE2LDExIEBACiBjbGFzcyBCYXNlVGVzdFN1aXRlKG9iamVjdCk6CiAgICAgIiIiQSBzaW1wbGUgdGVzdCBzdWl0ZSB0aGF0IGRvZXNuJ3QgcHJvdmlkZSBjbGFzcyBvciBtb2R1bGUgc2hhcmVkIGZpeHR1cmVzLgogICAgICIiIgorICAgIF9jbGVhbnVwID0gVHJ1ZQorCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRlc3RzPSgpKToKICAgICAgICAgc2VsZi5fdGVzdHMgPSBbXQorICAgICAgICBzZWxmLl9yZW1vdmVkX3Rlc3RzID0gMAogICAgICAgICBzZWxmLmFkZFRlc3RzKHRlc3RzKQogCiAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgpAQCAtMjgsMTYgKzMxLDE0IEBACiAgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKICAgICAgICAgcmV0dXJuIGxpc3Qoc2VsZikgPT0gbGlzdChvdGhlcikKIAotICAgIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgotICAgICAgICByZXR1cm4gbm90IHNlbGYgPT0gb3RoZXIKLQogICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKICAgICAgICAgcmV0dXJuIGl0ZXIoc2VsZi5fdGVzdHMpCiAKICAgICBkZWYgY291bnRUZXN0Q2FzZXMoc2VsZik6Ci0gICAgICAgIGNhc2VzID0gMAorICAgICAgICBjYXNlcyA9IHNlbGYuX3JlbW92ZWRfdGVzdHMKICAgICAgICAgZm9yIHRlc3QgaW4gc2VsZjoKLSAgICAgICAgICAgIGNhc2VzICs9IHRlc3QuY291bnRUZXN0Q2FzZXMoKQorICAgICAgICAgICAgaWYgdGVzdDoKKyAgICAgICAgICAgICAgICBjYXNlcyArPSB0ZXN0LmNvdW50VGVzdENhc2VzKCkKICAgICAgICAgcmV0dXJuIGNhc2VzCiAKICAgICBkZWYgYWRkVGVzdChzZWxmLCB0ZXN0KToKQEAgLTU3LDEyICs1OCwyOCBAQAogICAgICAgICAgICAgc2VsZi5hZGRUZXN0KHRlc3QpCiAKICAgICBkZWYgcnVuKHNlbGYsIHJlc3VsdCk6Ci0gICAgICAgIGZvciB0ZXN0IGluIHNlbGY6CisgICAgICAgIGZvciBpbmRleCwgdGVzdCBpbiBlbnVtZXJhdGUoc2VsZik6CiAgICAgICAgICAgICBpZiByZXN1bHQuc2hvdWxkU3RvcDoKICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgdGVzdChyZXN1bHQpCisgICAgICAgICAgICBpZiBzZWxmLl9jbGVhbnVwOgorICAgICAgICAgICAgICAgIHNlbGYuX3JlbW92ZVRlc3RBdEluZGV4KGluZGV4KQogICAgICAgICByZXR1cm4gcmVzdWx0CiAKKyAgICBkZWYgX3JlbW92ZVRlc3RBdEluZGV4KHNlbGYsIGluZGV4KToKKyAgICAgICAgIiIiU3RvcCBob2xkaW5nIGEgcmVmZXJlbmNlIHRvIHRoZSBUZXN0Q2FzZSBhdCBpbmRleC4iIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdGVzdCA9IHNlbGYuX3Rlc3RzW2luZGV4XQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgIyBzdXBwb3J0IGZvciBzdWl0ZSBpbXBsZW1lbnRhdGlvbnMgdGhhdCBoYXZlIG92ZXJyaWRlbiBzZWxmLl90ZXN0cworICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBTb21lIHVuaXR0ZXN0IHRlc3RzIGFkZCBub24gVGVzdENhc2UvVGVzdFN1aXRlIG9iamVjdHMgdG8KKyAgICAgICAgICAgICMgdGhlIHN1aXRlLgorICAgICAgICAgICAgaWYgaGFzYXR0cih0ZXN0LCAnY291bnRUZXN0Q2FzZXMnKToKKyAgICAgICAgICAgICAgICBzZWxmLl9yZW1vdmVkX3Rlc3RzICs9IHRlc3QuY291bnRUZXN0Q2FzZXMoKQorICAgICAgICAgICAgc2VsZi5fdGVzdHNbaW5kZXhdID0gTm9uZQorCiAgICAgZGVmIF9fY2FsbF9fKHNlbGYsICphcmdzLCAqKmt3ZHMpOgogICAgICAgICByZXR1cm4gc2VsZi5ydW4oKmFyZ3MsICoqa3dkcykKIApAQCAtODcsNyArMTA0LDcgQEAKICAgICAgICAgaWYgZ2V0YXR0cihyZXN1bHQsICdfdGVzdFJ1bkVudGVyZWQnLCBGYWxzZSkgaXMgRmFsc2U6CiAgICAgICAgICAgICByZXN1bHQuX3Rlc3RSdW5FbnRlcmVkID0gdG9wTGV2ZWwgPSBUcnVlCiAKLSAgICAgICAgZm9yIHRlc3QgaW4gc2VsZjoKKyAgICAgICAgZm9yIGluZGV4LCB0ZXN0IGluIGVudW1lcmF0ZShzZWxmKToKICAgICAgICAgICAgIGlmIHJlc3VsdC5zaG91bGRTdG9wOgogICAgICAgICAgICAgICAgIGJyZWFrCiAKQEAgLTEwNiw2ICsxMjMsOSBAQAogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICB0ZXN0LmRlYnVnKCkKIAorICAgICAgICAgICAgaWYgc2VsZi5fY2xlYW51cDoKKyAgICAgICAgICAgICAgICBzZWxmLl9yZW1vdmVUZXN0QXRJbmRleChpbmRleCkKKwogICAgICAgICBpZiB0b3BMZXZlbDoKICAgICAgICAgICAgIHNlbGYuX3RlYXJEb3duUHJldmlvdXNDbGFzcyhOb25lLCByZXN1bHQpCiAgICAgICAgICAgICBzZWxmLl9oYW5kbGVNb2R1bGVUZWFyRG93bihyZXN1bHQpCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvdGVzdC9fX21haW5fXy5weSBiL0xpYi91bml0dGVzdC90ZXN0L19fbWFpbl9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0ZDA1OTEKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdW5pdHRlc3QvdGVzdC9fX21haW5fXy5weQpAQCAtMCwwICsxLDE4IEBACitpbXBvcnQgb3MKK2ltcG9ydCB1bml0dGVzdAorCisKK2RlZiBsb2FkX3Rlc3RzKGxvYWRlciwgc3RhbmRhcmRfdGVzdHMsIHBhdHRlcm4pOgorICAgICMgdG9wIGxldmVsIGRpcmVjdG9yeSBjYWNoZWQgb24gbG9hZGVyIGluc3RhbmNlCisgICAgdGhpc19kaXIgPSBvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pCisgICAgcGF0dGVybiA9IHBhdHRlcm4gb3IgInRlc3RfKi5weSIKKyAgICAjIFdlIGFyZSBpbnNpZGUgdW5pdHRlc3QudGVzdCwgc28gdGhlIHRvcC1sZXZlbCBpcyB0d28gbm90Y2hlcyB1cAorICAgIHRvcF9sZXZlbF9kaXIgPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKHRoaXNfZGlyKSkKKyAgICBwYWNrYWdlX3Rlc3RzID0gbG9hZGVyLmRpc2NvdmVyKHN0YXJ0X2Rpcj10aGlzX2RpciwgcGF0dGVybj1wYXR0ZXJuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wX2xldmVsX2Rpcj10b3BfbGV2ZWxfZGlyKQorICAgIHN0YW5kYXJkX3Rlc3RzLmFkZFRlc3RzKHBhY2thZ2VfdGVzdHMpCisgICAgcmV0dXJuIHN0YW5kYXJkX3Rlc3RzCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC90ZXN0L3N1cHBvcnQucHkgYi9MaWIvdW5pdHRlc3QvdGVzdC9zdXBwb3J0LnB5CmluZGV4IGRiZTRkZGMuLjAyZThmM2EgMTAwNjQ0Ci0tLSBhL0xpYi91bml0dGVzdC90ZXN0L3N1cHBvcnQucHkKKysrIGIvTGliL3VuaXR0ZXN0L3Rlc3Qvc3VwcG9ydC5weQpAQCAtNDEsNyArNDEsNyBAQAogICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiUHJvYmxlbSBoYXNoaW5nICVzIGFuZCAlczogJXMiICUgKG9ial8xLCBvYmpfMiwgZSkpCiAKIAotY2xhc3MgTG9nZ2luZ1Jlc3VsdCh1bml0dGVzdC5UZXN0UmVzdWx0KToKK2NsYXNzIF9CYXNlTG9nZ2luZ1Jlc3VsdCh1bml0dGVzdC5UZXN0UmVzdWx0KToKICAgICBkZWYgX19pbml0X18oc2VsZiwgbG9nKToKICAgICAgICAgc2VsZi5fZXZlbnRzID0gbG9nCiAgICAgICAgIHN1cGVyKCkuX19pbml0X18oKQpAQCAtNTIsNyArNTIsNyBAQAogCiAgICAgZGVmIHN0YXJ0VGVzdFJ1bihzZWxmKToKICAgICAgICAgc2VsZi5fZXZlbnRzLmFwcGVuZCgnc3RhcnRUZXN0UnVuJykKLSAgICAgICAgc3VwZXIoTG9nZ2luZ1Jlc3VsdCwgc2VsZikuc3RhcnRUZXN0UnVuKCkKKyAgICAgICAgc3VwZXIoKS5zdGFydFRlc3RSdW4oKQogCiAgICAgZGVmIHN0b3BUZXN0KHNlbGYsIHRlc3QpOgogICAgICAgICBzZWxmLl9ldmVudHMuYXBwZW5kKCdzdG9wVGVzdCcpCkBAIC02MCw3ICs2MCw3IEBACiAKICAgICBkZWYgc3RvcFRlc3RSdW4oc2VsZik6CiAgICAgICAgIHNlbGYuX2V2ZW50cy5hcHBlbmQoJ3N0b3BUZXN0UnVuJykKLSAgICAgICAgc3VwZXIoTG9nZ2luZ1Jlc3VsdCwgc2VsZikuc3RvcFRlc3RSdW4oKQorICAgICAgICBzdXBlcigpLnN0b3BUZXN0UnVuKCkKIAogICAgIGRlZiBhZGRGYWlsdXJlKHNlbGYsICphcmdzKToKICAgICAgICAgc2VsZi5fZXZlbnRzLmFwcGVuZCgnYWRkRmFpbHVyZScpCkBAIC02OCw3ICs2OCw3IEBACiAKICAgICBkZWYgYWRkU3VjY2VzcyhzZWxmLCAqYXJncyk6CiAgICAgICAgIHNlbGYuX2V2ZW50cy5hcHBlbmQoJ2FkZFN1Y2Nlc3MnKQotICAgICAgICBzdXBlcihMb2dnaW5nUmVzdWx0LCBzZWxmKS5hZGRTdWNjZXNzKCphcmdzKQorICAgICAgICBzdXBlcigpLmFkZFN1Y2Nlc3MoKmFyZ3MpCiAKICAgICBkZWYgYWRkRXJyb3Ioc2VsZiwgKmFyZ3MpOgogICAgICAgICBzZWxmLl9ldmVudHMuYXBwZW5kKCdhZGRFcnJvcicpCkBAIC03NiwxNSArNzYsMzkgQEAKIAogICAgIGRlZiBhZGRTa2lwKHNlbGYsICphcmdzKToKICAgICAgICAgc2VsZi5fZXZlbnRzLmFwcGVuZCgnYWRkU2tpcCcpCi0gICAgICAgIHN1cGVyKExvZ2dpbmdSZXN1bHQsIHNlbGYpLmFkZFNraXAoKmFyZ3MpCisgICAgICAgIHN1cGVyKCkuYWRkU2tpcCgqYXJncykKIAogICAgIGRlZiBhZGRFeHBlY3RlZEZhaWx1cmUoc2VsZiwgKmFyZ3MpOgogICAgICAgICBzZWxmLl9ldmVudHMuYXBwZW5kKCdhZGRFeHBlY3RlZEZhaWx1cmUnKQotICAgICAgICBzdXBlcihMb2dnaW5nUmVzdWx0LCBzZWxmKS5hZGRFeHBlY3RlZEZhaWx1cmUoKmFyZ3MpCisgICAgICAgIHN1cGVyKCkuYWRkRXhwZWN0ZWRGYWlsdXJlKCphcmdzKQogCiAgICAgZGVmIGFkZFVuZXhwZWN0ZWRTdWNjZXNzKHNlbGYsICphcmdzKToKICAgICAgICAgc2VsZi5fZXZlbnRzLmFwcGVuZCgnYWRkVW5leHBlY3RlZFN1Y2Nlc3MnKQotICAgICAgICBzdXBlcihMb2dnaW5nUmVzdWx0LCBzZWxmKS5hZGRVbmV4cGVjdGVkU3VjY2VzcygqYXJncykKKyAgICAgICAgc3VwZXIoKS5hZGRVbmV4cGVjdGVkU3VjY2VzcygqYXJncykKKworCitjbGFzcyBMZWdhY3lMb2dnaW5nUmVzdWx0KF9CYXNlTG9nZ2luZ1Jlc3VsdCk6CisgICAgIiIiCisgICAgQSBsZWdhY3kgVGVzdFJlc3VsdCBpbXBsZW1lbnRhdGlvbiwgd2l0aG91dCBhbiBhZGRTdWJUZXN0IG1ldGhvZCwKKyAgICB3aGljaCByZWNvcmRzIGl0cyBtZXRob2QgY2FsbHMuCisgICAgIiIiCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgYWRkU3ViVGVzdChzZWxmKToKKyAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IKKworCitjbGFzcyBMb2dnaW5nUmVzdWx0KF9CYXNlTG9nZ2luZ1Jlc3VsdCk6CisgICAgIiIiCisgICAgQSBUZXN0UmVzdWx0IGltcGxlbWVudGF0aW9uIHdoaWNoIHJlY29yZHMgaXRzIG1ldGhvZCBjYWxscy4KKyAgICAiIiIKKworICAgIGRlZiBhZGRTdWJUZXN0KHNlbGYsIHRlc3QsIHN1YnRlc3QsIGVycik6CisgICAgICAgIGlmIGVyciBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5fZXZlbnRzLmFwcGVuZCgnYWRkU3ViVGVzdFN1Y2Nlc3MnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fZXZlbnRzLmFwcGVuZCgnYWRkU3ViVGVzdEZhaWx1cmUnKQorICAgICAgICBzdXBlcigpLmFkZFN1YlRlc3QodGVzdCwgc3VidGVzdCwgZXJyKQogCiAKIGNsYXNzIFJlc3VsdFdpdGhOb1N0YXJ0VGVzdFJ1blN0b3BUZXN0UnVuKG9iamVjdCk6CmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X2Fzc2VydGlvbnMucHkgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X2Fzc2VydGlvbnMucHkKaW5kZXggNzkzMWNhZC4uYzM0OWE5NSAxMDA2NDQKLS0tIGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9hc3NlcnRpb25zLnB5CisrKyBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfYXNzZXJ0aW9ucy5weQpAQCAtMSw1ICsxLDYgQEAKIGltcG9ydCBkYXRldGltZQogaW1wb3J0IHdhcm5pbmdzCitpbXBvcnQgd2Vha3JlZgogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIGl0ZXJ0b29scyBpbXBvcnQgcHJvZHVjdAogCkBAIC05Nyw2ICs5OCwzNiBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5mYWlsKCJhc3NlcnRSYWlzZXMoKSBkaWRuJ3QgbGV0IGV4Y2VwdGlvbiBwYXNzIHRocm91Z2giKQogCisgICAgZGVmIHRlc3RfYXNzZXJ0UmFpc2VzX2ZyYW1lc19zdXJ2aXZhbChzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjOTgxNTogYXNzZXJ0UmFpc2VzIHNob3VsZCBhdm9pZCBrZWVwaW5nIGxvY2FsIHZhcmlhYmxlcworICAgICAgICAjIGluIGEgdHJhY2ViYWNrIGFsaXZlLgorICAgICAgICBjbGFzcyBBOgorICAgICAgICAgICAgcGFzcworICAgICAgICB3ciA9IE5vbmUKKworICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgICAgICAgICBkZWYgZm9vKHNlbGYpOgorICAgICAgICAgICAgICAgIG5vbmxvY2FsIHdyCisgICAgICAgICAgICAgICAgYSA9IEEoKQorICAgICAgICAgICAgICAgIHdyID0gd2Vha3JlZi5yZWYoYSkKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIElPRXJyb3IKKyAgICAgICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcgorCisgICAgICAgICAgICBkZWYgdGVzdF9mdW5jdGlvbmFsKHNlbGYpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYuZm9vKQorCisgICAgICAgICAgICBkZWYgdGVzdF93aXRoKHNlbGYpOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZm9vKCkKKworICAgICAgICBGb28oInRlc3RfZnVuY3Rpb25hbCIpLnJ1bigpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHdyKCkpCisgICAgICAgIEZvbygidGVzdF93aXRoIikucnVuKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUod3IoKSkKKwogICAgIGRlZiB0ZXN0QXNzZXJ0Tm90UmVnZXgoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0Tm90UmVnZXgoJ0FsYSBtYSBrb3RhJywgcidyKycpCiAgICAgICAgIHRyeToKQEAgLTM2MSwzICszOTIsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWydeInJlZ2V4IiBkb2VzIG5vdCBtYXRjaCAiZm9vIiQnLCAnXm9vcHMkJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXiJyZWdleCIgZG9lcyBub3QgbWF0Y2ggImZvbyIkJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXiJyZWdleCIgZG9lcyBub3QgbWF0Y2ggImZvbyIgOiBvb3BzJCddKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X2JyZWFrLnB5IGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9icmVhay5weQppbmRleCA3NTUzMmY0Li4wYmYxYTIyIDEwMDY0NAotLS0gYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X2JyZWFrLnB5CisrKyBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfYnJlYWsucHkKQEAgLTI4MiwzICsyODIsNyBAQAogICAgICJpZiB0aHJlYWRzIGhhdmUgYmVlbiB1c2VkIikKIGNsYXNzIFRlc3RCcmVha1NpZ25hbERlZmF1bHQoVGVzdEJyZWFrKToKICAgICBpbnRfaGFuZGxlciA9IHNpZ25hbC5TSUdfREZMCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfY2FzZS5weSBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfY2FzZS5weQppbmRleCBiOGNiMGM3Li4zMjFkNjdhIDEwMDY0NAotLS0gYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X2Nhc2UucHkKKysrIGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9jYXNlLnB5CkBAIC0xLDggKzEsMTAgQEAKK2ltcG9ydCBjb250ZXh0bGliCiBpbXBvcnQgZGlmZmxpYgogaW1wb3J0IHBwcmludAogaW1wb3J0IHBpY2tsZQogaW1wb3J0IHJlCiBpbXBvcnQgc3lzCitpbXBvcnQgbG9nZ2luZwogaW1wb3J0IHdhcm5pbmdzCiBpbXBvcnQgd2Vha3JlZgogaW1wb3J0IGluc3BlY3QKQEAgLTEyLDEwICsxNCwxNiBAQAogCiBpbXBvcnQgdW5pdHRlc3QKIAotZnJvbSAuc3VwcG9ydCBpbXBvcnQgKAotICAgIFRlc3RFcXVhbGl0eSwgVGVzdEhhc2hpbmcsIExvZ2dpbmdSZXN1bHQsCitmcm9tIHVuaXR0ZXN0LnRlc3Quc3VwcG9ydCBpbXBvcnQgKAorICAgIFRlc3RFcXVhbGl0eSwgVGVzdEhhc2hpbmcsIExvZ2dpbmdSZXN1bHQsIExlZ2FjeUxvZ2dpbmdSZXN1bHQsCiAgICAgUmVzdWx0V2l0aE5vU3RhcnRUZXN0UnVuU3RvcFRlc3RSdW4KICkKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBjYXB0dXJlZF9zdGRlcnIKKworCitsb2dfZm9vID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2ZvbycpCitsb2dfZm9vYmFyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2Zvby5iYXInKQorbG9nX3F1dXggPSBsb2dnaW5nLmdldExvZ2dlcigncXV1eCcpCiAKIAogY2xhc3MgVGVzdChvYmplY3QpOgpAQCAtMjk3LDYgKzMwNSwxMjYgQEAKIAogICAgICAgICBGb28oJ3Rlc3QnKS5ydW4oKQogCisgICAgZGVmIF9jaGVja19jYWxsX29yZGVyX19zdWJ0ZXN0cyhzZWxmLCByZXN1bHQsIGV2ZW50cywgZXhwZWN0ZWRfZXZlbnRzKToKKyAgICAgICAgY2xhc3MgRm9vKFRlc3QuTG9nZ2luZ1Rlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICAgICAgICAgIHN1cGVyKEZvbywgc2VsZikudGVzdCgpCisgICAgICAgICAgICAgICAgZm9yIGkgaW4gWzEsIDIsIDNdOgorICAgICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChpPWkpOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgaSA9PSAxOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnZmFpbHVyZScpCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgaiBpbiBbMiwgM106CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3Qoaj1qKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgaSAqIGogPT0gNjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigncmFpc2VkIGJ5IEZvby50ZXN0JykKKyAgICAgICAgICAgICAgICAxIC8gMAorCisgICAgICAgICMgT3JkZXIgaXMgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgIyBpPTEgPT4gc3VidGVzdCBmYWlsdXJlCisgICAgICAgICMgaT0yLCBqPTIgPT4gc3VidGVzdCBzdWNjZXNzCisgICAgICAgICMgaT0yLCBqPTMgPT4gc3VidGVzdCBlcnJvcgorICAgICAgICAjIGk9Mywgaj0yID0+IHN1YnRlc3QgZXJyb3IKKyAgICAgICAgIyBpPTMsIGo9MyA9PiBzdWJ0ZXN0IHN1Y2Nlc3MKKyAgICAgICAgIyB0b3BsZXZlbCA9PiBlcnJvcgorICAgICAgICBGb28oZXZlbnRzKS5ydW4ocmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2ZW50cywgZXhwZWN0ZWRfZXZlbnRzKQorCisgICAgZGVmIHRlc3RfcnVuX2NhbGxfb3JkZXJfX3N1YnRlc3RzKHNlbGYpOgorICAgICAgICBldmVudHMgPSBbXQorICAgICAgICByZXN1bHQgPSBMb2dnaW5nUmVzdWx0KGV2ZW50cykKKyAgICAgICAgZXhwZWN0ZWQgPSBbJ3N0YXJ0VGVzdCcsICdzZXRVcCcsICd0ZXN0JywgJ3RlYXJEb3duJywKKyAgICAgICAgICAgICAgICAgICAgJ2FkZFN1YlRlc3RGYWlsdXJlJywgJ2FkZFN1YlRlc3RTdWNjZXNzJywKKyAgICAgICAgICAgICAgICAgICAgJ2FkZFN1YlRlc3RGYWlsdXJlJywgJ2FkZFN1YlRlc3RGYWlsdXJlJywKKyAgICAgICAgICAgICAgICAgICAgJ2FkZFN1YlRlc3RTdWNjZXNzJywgJ2FkZEVycm9yJywgJ3N0b3BUZXN0J10KKyAgICAgICAgc2VsZi5fY2hlY2tfY2FsbF9vcmRlcl9fc3VidGVzdHMocmVzdWx0LCBldmVudHMsIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfcnVuX2NhbGxfb3JkZXJfX3N1YnRlc3RzX2xlZ2FjeShzZWxmKToKKyAgICAgICAgIyBXaXRoIGEgbGVnYWN5IHJlc3VsdCBvYmplY3QgKHdpdGhvdXQgYSBhZGRTdWJUZXN0IG1ldGhvZCksCisgICAgICAgICMgdGV4dCBleGVjdXRpb24gc3RvcHMgYWZ0ZXIgdGhlIGZpcnN0IHN1YnRlc3QgZmFpbHVyZS4KKyAgICAgICAgZXZlbnRzID0gW10KKyAgICAgICAgcmVzdWx0ID0gTGVnYWN5TG9nZ2luZ1Jlc3VsdChldmVudHMpCisgICAgICAgIGV4cGVjdGVkID0gWydzdGFydFRlc3QnLCAnc2V0VXAnLCAndGVzdCcsICd0ZWFyRG93bicsCisgICAgICAgICAgICAgICAgICAgICdhZGRGYWlsdXJlJywgJ3N0b3BUZXN0J10KKyAgICAgICAgc2VsZi5fY2hlY2tfY2FsbF9vcmRlcl9fc3VidGVzdHMocmVzdWx0LCBldmVudHMsIGV4cGVjdGVkKQorCisgICAgZGVmIF9jaGVja19jYWxsX29yZGVyX19zdWJ0ZXN0c19zdWNjZXNzKHNlbGYsIHJlc3VsdCwgZXZlbnRzLCBleHBlY3RlZF9ldmVudHMpOgorICAgICAgICBjbGFzcyBGb28oVGVzdC5Mb2dnaW5nVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgICAgICAgICAgc3VwZXIoRm9vLCBzZWxmKS50ZXN0KCkKKyAgICAgICAgICAgICAgICBmb3IgaSBpbiBbMSwgMl06CisgICAgICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGk9aSk6CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgaiBpbiBbMiwgM106CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3Qoaj1qKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIEZvbyhldmVudHMpLnJ1bihyZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZlbnRzLCBleHBlY3RlZF9ldmVudHMpCisKKyAgICBkZWYgdGVzdF9ydW5fY2FsbF9vcmRlcl9fc3VidGVzdHNfc3VjY2VzcyhzZWxmKToKKyAgICAgICAgZXZlbnRzID0gW10KKyAgICAgICAgcmVzdWx0ID0gTG9nZ2luZ1Jlc3VsdChldmVudHMpCisgICAgICAgICMgVGhlIDYgc3VidGVzdCBzdWNjZXNzZXMgYXJlIGluZGl2aWR1YWxseSByZWNvcmRlZCwgaW4gYWRkaXRpb24KKyAgICAgICAgIyB0byB0aGUgd2hvbGUgdGVzdCBzdWNjZXNzLgorICAgICAgICBleHBlY3RlZCA9IChbJ3N0YXJ0VGVzdCcsICdzZXRVcCcsICd0ZXN0JywgJ3RlYXJEb3duJ10KKyAgICAgICAgICAgICAgICAgICAgKyA2ICogWydhZGRTdWJUZXN0U3VjY2VzcyddCisgICAgICAgICAgICAgICAgICAgICsgWydhZGRTdWNjZXNzJywgJ3N0b3BUZXN0J10pCisgICAgICAgIHNlbGYuX2NoZWNrX2NhbGxfb3JkZXJfX3N1YnRlc3RzX3N1Y2Nlc3MocmVzdWx0LCBldmVudHMsIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfcnVuX2NhbGxfb3JkZXJfX3N1YnRlc3RzX3N1Y2Nlc3NfbGVnYWN5KHNlbGYpOgorICAgICAgICAjIFdpdGggYSBsZWdhY3kgcmVzdWx0LCBvbmx5IHRoZSB3aG9sZSB0ZXN0IHN1Y2Nlc3MgaXMgcmVjb3JkZWQuCisgICAgICAgIGV2ZW50cyA9IFtdCisgICAgICAgIHJlc3VsdCA9IExlZ2FjeUxvZ2dpbmdSZXN1bHQoZXZlbnRzKQorICAgICAgICBleHBlY3RlZCA9IFsnc3RhcnRUZXN0JywgJ3NldFVwJywgJ3Rlc3QnLCAndGVhckRvd24nLAorICAgICAgICAgICAgICAgICAgICAnYWRkU3VjY2VzcycsICdzdG9wVGVzdCddCisgICAgICAgIHNlbGYuX2NoZWNrX2NhbGxfb3JkZXJfX3N1YnRlc3RzX3N1Y2Nlc3MocmVzdWx0LCBldmVudHMsIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfcnVuX2NhbGxfb3JkZXJfX3N1YnRlc3RzX2ZhaWxmYXN0KHNlbGYpOgorICAgICAgICBldmVudHMgPSBbXQorICAgICAgICByZXN1bHQgPSBMb2dnaW5nUmVzdWx0KGV2ZW50cykKKyAgICAgICAgcmVzdWx0LmZhaWxmYXN0ID0gVHJ1ZQorCisgICAgICAgIGNsYXNzIEZvbyhUZXN0LkxvZ2dpbmdUZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgICAgICAgICBzdXBlcihGb28sIHNlbGYpLnRlc3QoKQorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGk9MSk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnZmFpbHVyZScpCisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoaT0yKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdmYWlsdXJlJykKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ2ZhaWx1cmUnKQorCisgICAgICAgIGV4cGVjdGVkID0gWydzdGFydFRlc3QnLCAnc2V0VXAnLCAndGVzdCcsICd0ZWFyRG93bicsCisgICAgICAgICAgICAgICAgICAgICdhZGRTdWJUZXN0RmFpbHVyZScsICdzdG9wVGVzdCddCisgICAgICAgIEZvbyhldmVudHMpLnJ1bihyZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZlbnRzLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X3N1YnRlc3RzX2ZhaWxmYXN0KHNlbGYpOgorICAgICAgICAjIEVuc3VyZSBwcm9wZXIgdGVzdCBmbG93IHdpdGggc3VidGVzdHMgYW5kIGZhaWxmYXN0IChpc3N1ZSAjMjI4OTQpCisgICAgICAgIGV2ZW50cyA9IFtdCisKKyAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0X2Eoc2VsZik6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoKToKKyAgICAgICAgICAgICAgICAgICAgZXZlbnRzLmFwcGVuZCgnYTEnKQorICAgICAgICAgICAgICAgIGV2ZW50cy5hcHBlbmQoJ2EyJykKKworICAgICAgICAgICAgZGVmIHRlc3RfYihzZWxmKToKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdCgpOgorICAgICAgICAgICAgICAgICAgICBldmVudHMuYXBwZW5kKCdiMScpCisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdmYWlsdXJlJykKKyAgICAgICAgICAgICAgICBldmVudHMuYXBwZW5kKCdiMicpCisKKyAgICAgICAgICAgIGRlZiB0ZXN0X2Moc2VsZik6CisgICAgICAgICAgICAgICAgZXZlbnRzLmFwcGVuZCgnYycpCisKKyAgICAgICAgcmVzdWx0ID0gdW5pdHRlc3QuVGVzdFJlc3VsdCgpCisgICAgICAgIHJlc3VsdC5mYWlsZmFzdCA9IFRydWUKKyAgICAgICAgc3VpdGUgPSB1bml0dGVzdC5tYWtlU3VpdGUoRm9vKQorICAgICAgICBzdWl0ZS5ydW4ocmVzdWx0KQorCisgICAgICAgIGV4cGVjdGVkID0gWydhMScsICdhMicsICdiMSddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZlbnRzLCBleHBlY3RlZCkKKwogICAgICMgIlRoaXMgY2xhc3MgYXR0cmlidXRlIGdpdmVzIHRoZSBleGNlcHRpb24gcmFpc2VkIGJ5IHRoZSB0ZXN0KCkgbWV0aG9kLgogICAgICMgSWYgYSB0ZXN0IGZyYW1ld29yayBuZWVkcyB0byB1c2UgYSBzcGVjaWFsaXplZCBleGNlcHRpb24sIHBvc3NpYmx5IHRvCiAgICAgIyBjYXJyeSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLCBpdCBtdXN0IHN1YmNsYXNzIHRoaXMgZXhjZXB0aW9uIGluCkBAIC03MjksMTggKzg1NywxOCBAQAogCiAgICAgICAgICMgc2V0IGEgbG93ZXIgdGhyZXNob2xkIHZhbHVlIGFuZCBhZGQgYSBjbGVhbnVwIHRvIHJlc3RvcmUgaXQKICAgICAgICAgb2xkX3RocmVzaG9sZCA9IHNlbGYuX2RpZmZUaHJlc2hvbGQKLSAgICAgICAgc2VsZi5fZGlmZlRocmVzaG9sZCA9IDIqKjgKKyAgICAgICAgc2VsZi5fZGlmZlRocmVzaG9sZCA9IDIqKjUKICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGxhbWJkYTogc2V0YXR0cihzZWxmLCAnX2RpZmZUaHJlc2hvbGQnLCBvbGRfdGhyZXNob2xkKSkKIAogICAgICAgICAjIHVuZGVyIHRoZSB0aHJlc2hvbGQ6IGRpZmYgbWFya2VyICheKSBpbiBlcnJvciBtZXNzYWdlCi0gICAgICAgIHMgPSAneCcgKiAoMioqNykKKyAgICAgICAgcyA9ICd4JyAqICgyKio0KQogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbikgYXMgY206CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMgKyAnYScsIHMgKyAnYicpCiAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ14nLCBzdHIoY20uZXhjZXB0aW9uKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzICsgJ2EnLCBzICsgJ2EnKQogCiAgICAgICAgICMgb3ZlciB0aGUgdGhyZXNob2xkOiBkaWZmIG5vdCB1c2VkIGFuZCBtYXJrZXIgKF4pIG5vdCBpbiBlcnJvciBtZXNzYWdlCi0gICAgICAgIHMgPSAneCcgKiAoMioqOSkKKyAgICAgICAgcyA9ICd4JyAqICgyKio2KQogICAgICAgICAjIGlmIHRoZSBwYXRoIHRoYXQgdXNlcyBkaWZmbGliIGlzIHRha2VuLCBfdHJ1bmNhdGVNZXNzYWdlIHdpbGwgYmUKICAgICAgICAgIyBjYWxsZWQgLS0gcmVwbGFjZSBpdCB3aXRoIGV4cGxvZGluZ1RydW5jYXRpb24gdG8gdmVyaWZ5IHRoYXQgdGhpcwogICAgICAgICAjIGRvZXNuJ3QgaGFwcGVuCkBAIC03NTcsNiArODg1LDM1IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGNtLmV4Y2VwdGlvbiksICclciAhPSAlcicgJSAoczEsIHMyKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzICsgJ2EnLCBzICsgJ2EnKQogCisgICAgZGVmIHRlc3RBc3NlcnRFcXVhbF9zaG9ydGVuKHNlbGYpOgorICAgICAgICAjIHNldCBhIGxvd2VyIHRocmVzaG9sZCB2YWx1ZSBhbmQgYWRkIGEgY2xlYW51cCB0byByZXN0b3JlIGl0CisgICAgICAgIG9sZF90aHJlc2hvbGQgPSBzZWxmLl9kaWZmVGhyZXNob2xkCisgICAgICAgIHNlbGYuX2RpZmZUaHJlc2hvbGQgPSAwCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChsYW1iZGE6IHNldGF0dHIoc2VsZiwgJ19kaWZmVGhyZXNob2xkJywgb2xkX3RocmVzaG9sZCkpCisKKyAgICAgICAgcyA9ICd4JyAqIDEwMAorICAgICAgICBzMSwgczIgPSBzICsgJ2EnLCBzICsgJ2InCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uKSBhcyBjbToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoczEsIHMyKQorICAgICAgICBjID0gJ3h4eHhbMzUgY2hhcnNdJyArICd4JyAqIDYxCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGNtLmV4Y2VwdGlvbiksICInJXNhJyAhPSAnJXNiJyIgJSAoYywgYykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocyArICdhJywgcyArICdhJykKKworICAgICAgICBwID0gJ3knICogNTAKKyAgICAgICAgczEsIHMyID0gcyArICdhJyArIHAsIHMgKyAnYicgKyBwCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uKSBhcyBjbToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoczEsIHMyKQorICAgICAgICBjID0gJ3h4eHhbODUgY2hhcnNdeHh4eHh4eHh4eHgnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGNtLmV4Y2VwdGlvbiksICInJXNhJXMnICE9ICclc2IlcyciICUgKGMsIHAsIGMsIHApKQorCisgICAgICAgIHAgPSAneScgKiAxMDAKKyAgICAgICAgczEsIHMyID0gcyArICdhJyArIHAsIHMgKyAnYicgKyBwCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uKSBhcyBjbToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoczEsIHMyKQorICAgICAgICBjID0gJ3h4eHhbOTEgY2hhcnNdeHh4eHgnCisgICAgICAgIGQgPSAneScgKiA0MCArICdbNTYgY2hhcnNdeXl5eScKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoY20uZXhjZXB0aW9uKSwgIiclc2ElcycgIT0gJyVzYiVzJyIgJSAoYywgZCwgYywgZCkpCisKICAgICBkZWYgdGVzdEFzc2VydENvdW50RXF1YWwoc2VsZik6CiAgICAgICAgIGEgPSBvYmplY3QoKQogICAgICAgICBzZWxmLmFzc2VydENvdW50RXF1YWwoWzEsIDIsIDNdLCBbMywgMiwgMV0pCkBAIC05NzcsNiArMTEzNCw0NyBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0UmVnZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdzYWFhcycsIHInYWFhYScpCiAKKyAgICBkZWYgdGVzdEFzc2VydFJhaXNlc0NhbGxhYmxlKHNlbGYpOgorICAgICAgICBjbGFzcyBFeGNlcHRpb25Nb2NrKEV4Y2VwdGlvbik6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGRlZiBTdHViKCk6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb25Nb2NrKCdXZSBleHBlY3QnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFeGNlcHRpb25Nb2NrLCBTdHViKQorICAgICAgICAjIEEgdHVwbGUgb2YgZXhjZXB0aW9uIGNsYXNzZXMgaXMgYWNjZXB0ZWQKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoKFZhbHVlRXJyb3IsIEV4Y2VwdGlvbk1vY2spLCBTdHViKQorICAgICAgICAjICphcmdzIGFuZCAqKmt3YXJncyBhbHNvIHdvcmsKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgaW50LCAnMTknLCBiYXNlPTgpCisgICAgICAgICMgRmFpbHVyZSB3aGVuIG5vIGV4Y2VwdGlvbiBpcyByYWlzZWQKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24pOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRXhjZXB0aW9uTW9jaywgbGFtYmRhOiAwKQorICAgICAgICAjIEZhaWx1cmUgd2hlbiBhbm90aGVyIGV4Y2VwdGlvbiBpcyByYWlzZWQKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhFeGNlcHRpb25Nb2NrKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIFN0dWIpCisKKyAgICBkZWYgdGVzdEFzc2VydFJhaXNlc0NvbnRleHQoc2VsZik6CisgICAgICAgIGNsYXNzIEV4Y2VwdGlvbk1vY2soRXhjZXB0aW9uKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZGVmIFN0dWIoKToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbk1vY2soJ1dlIGV4cGVjdCcpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoRXhjZXB0aW9uTW9jayk6CisgICAgICAgICAgICBTdHViKCkKKyAgICAgICAgIyBBIHR1cGxlIG9mIGV4Y2VwdGlvbiBjbGFzc2VzIGlzIGFjY2VwdGVkCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoKFZhbHVlRXJyb3IsIEV4Y2VwdGlvbk1vY2spKSBhcyBjbToKKyAgICAgICAgICAgIFN0dWIoKQorICAgICAgICAjIFRoZSBjb250ZXh0IG1hbmFnZXIgZXhwb3NlcyBjYXVnaHQgZXhjZXB0aW9uCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShjbS5leGNlcHRpb24sIEV4Y2VwdGlvbk1vY2spCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLmFyZ3NbMF0sICdXZSBleHBlY3QnKQorICAgICAgICAjICphcmdzIGFuZCAqKmt3YXJncyBhbHNvIHdvcmsKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGludCgnMTknLCBiYXNlPTgpCisgICAgICAgICMgRmFpbHVyZSB3aGVuIG5vIGV4Y2VwdGlvbiBpcyByYWlzZWQKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24pOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhFeGNlcHRpb25Nb2NrKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICMgRmFpbHVyZSB3aGVuIGFub3RoZXIgZXhjZXB0aW9uIGlzIHJhaXNlZAorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEV4Y2VwdGlvbk1vY2spOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgU3R1YikKKwogICAgIGRlZiB0ZXN0QXNzZXJ0UmFpc2VzUmVnZXgoc2VsZik6CiAgICAgICAgIGNsYXNzIEV4Y2VwdGlvbk1vY2soRXhjZXB0aW9uKToKICAgICAgICAgICAgIHBhc3MKQEAgLTk5Nyw2ICsxMTk1LDE4IEBACiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleCwgRXhjZXB0aW9uLCAneCcsCiAgICAgICAgICAgICAgICAgbGFtYmRhOiBOb25lKQogCisgICAgZGVmIHRlc3RBc3NlcnRSYWlzZXNSZWdleEludmFsaWRSZWdleChzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAyMDE0NS4KKyAgICAgICAgY2xhc3MgTXlFeGMoRXhjZXB0aW9uKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4LCBNeUV4YywgbGFtYmRhOiBUcnVlKQorCisgICAgZGVmIHRlc3RBc3NlcnRXYXJuc1JlZ2V4SW52YWxpZFJlZ2V4KHNlbGYpOgorICAgICAgICAjIElzc3VlIDIwMTQ1LgorICAgICAgICBjbGFzcyBNeVdhcm4oV2FybmluZyk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5hc3NlcnRXYXJuc1JlZ2V4LCBNeVdhcm4sIGxhbWJkYTogVHJ1ZSkKKwogICAgIGRlZiB0ZXN0QXNzZXJ0UmFpc2VzUmVnZXhNaXNtYXRjaChzZWxmKToKICAgICAgICAgZGVmIFN0dWIoKToKICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignVW5leHBlY3RlZCcpCkBAIC0xMTU5LDYgKzEzNjksOTQgQEAKICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnNSZWdleChSdW50aW1lV2FybmluZywgIm8rIik6CiAgICAgICAgICAgICAgICAgICAgIF9ydW50aW1lX3dhcm4oImJhcnoiKQogCisgICAgQGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIKKyAgICBkZWYgYXNzZXJ0Tm9TdGRlcnIoc2VsZik6CisgICAgICAgIHdpdGggY2FwdHVyZWRfc3RkZXJyKCkgYXMgYnVmOgorICAgICAgICAgICAgeWllbGQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWYuZ2V0dmFsdWUoKSwgIiIpCisKKyAgICBkZWYgYXNzZXJ0TG9nUmVjb3JkcyhzZWxmLCByZWNvcmRzLCBtYXRjaGVzKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVjb3JkcyksIGxlbihtYXRjaGVzKSkKKyAgICAgICAgZm9yIHJlYywgbWF0Y2ggaW4gemlwKHJlY29yZHMsIG1hdGNoZXMpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHJlYywgbG9nZ2luZy5Mb2dSZWNvcmQpCisgICAgICAgICAgICBmb3IgaywgdiBpbiBtYXRjaC5pdGVtcygpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXR0cihyZWMsIGspLCB2KQorCisgICAgZGVmIHRlc3RBc3NlcnRMb2dzRGVmYXVsdHMoc2VsZik6CisgICAgICAgICMgZGVmYXVsdHM6IHJvb3QgbG9nZ2VyLCBsZXZlbCBJTkZPCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnROb1N0ZGVycigpOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydExvZ3MoKSBhcyBjbToKKyAgICAgICAgICAgICAgICBsb2dfZm9vLmluZm8oIjEiKQorICAgICAgICAgICAgICAgIGxvZ19mb29iYXIuZGVidWcoIjIiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5vdXRwdXQsIFsiSU5GTzpmb286MSJdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRMb2dSZWNvcmRzKGNtLnJlY29yZHMsIFt7J25hbWUnOiAnZm9vJ31dKQorCisgICAgZGVmIHRlc3RBc3NlcnRMb2dzVHdvTWF0Y2hpbmdNZXNzYWdlcyhzZWxmKToKKyAgICAgICAgIyBTYW1lLCBidXQgd2l0aCB0d28gbWF0Y2hpbmcgbG9nIG1lc3NhZ2VzCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnROb1N0ZGVycigpOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydExvZ3MoKSBhcyBjbToKKyAgICAgICAgICAgICAgICBsb2dfZm9vLmluZm8oIjEiKQorICAgICAgICAgICAgICAgIGxvZ19mb29iYXIuZGVidWcoIjIiKQorICAgICAgICAgICAgICAgIGxvZ19xdXV4Lndhcm5pbmcoIjMiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5vdXRwdXQsIFsiSU5GTzpmb286MSIsICJXQVJOSU5HOnF1dXg6MyJdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRMb2dSZWNvcmRzKGNtLnJlY29yZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt7J25hbWUnOiAnZm9vJ30sIHsnbmFtZSc6ICdxdXV4J31dKQorCisgICAgZGVmIGNoZWNrQXNzZXJ0TG9nc1BlckxldmVsKHNlbGYsIGxldmVsKToKKyAgICAgICAgIyBDaGVjayBsZXZlbCBmaWx0ZXJpbmcKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydE5vU3RkZXJyKCk6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0TG9ncyhsZXZlbD1sZXZlbCkgYXMgY206CisgICAgICAgICAgICAgICAgbG9nX2Zvby53YXJuaW5nKCIxIikKKyAgICAgICAgICAgICAgICBsb2dfZm9vYmFyLmVycm9yKCIyIikKKyAgICAgICAgICAgICAgICBsb2dfcXV1eC5jcml0aWNhbCgiMyIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLm91dHB1dCwgWyJFUlJPUjpmb28uYmFyOjIiLCAiQ1JJVElDQUw6cXV1eDozIl0pCisgICAgICAgICAgICBzZWxmLmFzc2VydExvZ1JlY29yZHMoY20ucmVjb3JkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3snbmFtZSc6ICdmb28uYmFyJ30sIHsnbmFtZSc6ICdxdXV4J31dKQorCisgICAgZGVmIHRlc3RBc3NlcnRMb2dzUGVyTGV2ZWwoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tBc3NlcnRMb2dzUGVyTGV2ZWwobG9nZ2luZy5FUlJPUikKKyAgICAgICAgc2VsZi5jaGVja0Fzc2VydExvZ3NQZXJMZXZlbCgnRVJST1InKQorCisgICAgZGVmIGNoZWNrQXNzZXJ0TG9nc1BlckxvZ2dlcihzZWxmLCBsb2dnZXIpOgorICAgICAgICAjIENoZWNrIHBlci1sb2dnZXIgZmlsdGVyaW5nCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnROb1N0ZGVycigpOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydExvZ3MobGV2ZWw9J0RFQlVHJykgYXMgb3V0ZXJfY206CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydExvZ3MobG9nZ2VyLCBsZXZlbD0nREVCVUcnKSBhcyBjbToKKyAgICAgICAgICAgICAgICAgICAgbG9nX2Zvby5pbmZvKCIxIikKKyAgICAgICAgICAgICAgICAgICAgbG9nX2Zvb2Jhci5kZWJ1ZygiMiIpCisgICAgICAgICAgICAgICAgICAgIGxvZ19xdXV4Lndhcm5pbmcoIjMiKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20ub3V0cHV0LCBbIklORk86Zm9vOjEiLCAiREVCVUc6Zm9vLmJhcjoyIl0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRMb2dSZWNvcmRzKGNtLnJlY29yZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbeyduYW1lJzogJ2Zvbyd9LCB7J25hbWUnOiAnZm9vLmJhcid9XSkKKyAgICAgICAgICAgICMgVGhlIG91dGVyIGNhdGNoYWxsIGNhdWdodCB0aGUgcXV1eCBsb2cKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0ZXJfY20ub3V0cHV0LCBbIldBUk5JTkc6cXV1eDozIl0pCisKKyAgICBkZWYgdGVzdEFzc2VydExvZ3NQZXJMb2dnZXIoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tBc3NlcnRMb2dzUGVyTG9nZ2VyKGxvZ2dpbmcuZ2V0TG9nZ2VyKCdmb28nKSkKKyAgICAgICAgc2VsZi5jaGVja0Fzc2VydExvZ3NQZXJMb2dnZXIoJ2ZvbycpCisKKyAgICBkZWYgdGVzdEFzc2VydExvZ3NGYWlsdXJlTm9Mb2dzKHNlbGYpOgorICAgICAgICAjIEZhaWx1cmUgZHVlIHRvIG5vIGxvZ3MKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydE5vU3RkZXJyKCk6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbik6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydExvZ3MoKToKKyAgICAgICAgICAgICAgICAgICAgcGFzcworCisgICAgZGVmIHRlc3RBc3NlcnRMb2dzRmFpbHVyZUxldmVsVG9vSGlnaChzZWxmKToKKyAgICAgICAgIyBGYWlsdXJlIGR1ZSB0byBsZXZlbCB0b28gaGlnaAorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0Tm9TdGRlcnIoKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uKToKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0TG9ncyhsZXZlbD0nV0FSTklORycpOgorICAgICAgICAgICAgICAgICAgICBsb2dfZm9vLmluZm8oIjEiKQorCisgICAgZGVmIHRlc3RBc3NlcnRMb2dzRmFpbHVyZU1pc21hdGNoaW5nTG9nZ2VyKHNlbGYpOgorICAgICAgICAjIEZhaWx1cmUgZHVlIHRvIG1pc21hdGNoaW5nIGxvZ2dlciAoYW5kIHRoZSBsb2dnZWQgbWVzc2FnZSBpcworICAgICAgICAjIHBhc3NlZCB0aHJvdWdoKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0TG9ncygncXV1eCcsIGxldmVsPSdFUlJPUicpOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24pOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRMb2dzKCdmb28nKToKKyAgICAgICAgICAgICAgICAgICAgbG9nX3F1dXguZXJyb3IoIjEiKQorCiAgICAgZGVmIHRlc3REZXByZWNhdGVkTWV0aG9kTmFtZXMoc2VsZik6CiAgICAgICAgICIiIgogICAgICAgICBUZXN0IHRoYXQgdGhlIGRlcHJlY2F0ZWQgbWV0aG9kcyByYWlzZSBhIERlcHJlY2F0aW9uV2FybmluZy4gU2VlICM5NDI0LgpAQCAtMTMxMywzICsxNjExLDMzIEBACiAgICAgICAgIHdpdGggc3VwcG9ydC5kaXNhYmxlX2djKCk6CiAgICAgICAgICAgICBkZWwgY2FzZQogICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh3cigpKQorCisgICAgZGVmIHRlc3Rfbm9fZXhjZXB0aW9uX2xlYWsoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzE5ODgwOiBUZXN0Q2FzZS5ydW4oKSBzaG91bGQgbm90IGtlZXAgYSByZWZlcmVuY2UKKyAgICAgICAgIyB0byB0aGUgZXhjZXB0aW9uCisgICAgICAgIGNsYXNzIE15RXhjZXB0aW9uKEV4Y2VwdGlvbik6CisgICAgICAgICAgICBuaW5zdGFuY2UgPSAwCisKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBNeUV4Y2VwdGlvbi5uaW5zdGFuY2UgKz0gMQorICAgICAgICAgICAgICAgIEV4Y2VwdGlvbi5fX2luaXRfXyhzZWxmKQorCisgICAgICAgICAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBNeUV4Y2VwdGlvbi5uaW5zdGFuY2UgLT0gMQorCisgICAgICAgIGNsYXNzIFRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0MShzZWxmKToKKyAgICAgICAgICAgICAgICByYWlzZSBNeUV4Y2VwdGlvbigpCisKKyAgICAgICAgICAgIEB1bml0dGVzdC5leHBlY3RlZEZhaWx1cmUKKyAgICAgICAgICAgIGRlZiB0ZXN0MihzZWxmKToKKyAgICAgICAgICAgICAgICByYWlzZSBNeUV4Y2VwdGlvbigpCisKKyAgICAgICAgZm9yIG1ldGhvZF9uYW1lIGluICgndGVzdDEnLCAndGVzdDInKToKKyAgICAgICAgICAgIHRlc3RjYXNlID0gVGVzdENhc2UobWV0aG9kX25hbWUpCisgICAgICAgICAgICB0ZXN0Y2FzZS5ydW4oKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChNeUV4Y2VwdGlvbi5uaW5zdGFuY2UsIDApCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfZGlzY292ZXJ5LnB5IGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9kaXNjb3ZlcnkucHkKaW5kZXggY2NjN2RiMi4uZjEyZTg5OCAxMDA2NDQKLS0tIGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9kaXNjb3ZlcnkucHkKKysrIGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9kaXNjb3ZlcnkucHkKQEAgLTEsMTIgKzEsMTcgQEAKIGltcG9ydCBvcwogaW1wb3J0IHJlCiBpbXBvcnQgc3lzCitpbXBvcnQgdHlwZXMKK2ltcG9ydCBwaWNrbGUKK2ltcG9ydCBidWlsdGlucworZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiAKIGltcG9ydCB1bml0dGVzdAoraW1wb3J0IHVuaXR0ZXN0LnRlc3QKIAogCiBjbGFzcyBUZXN0YWJsZVRlc3RQcm9ncmFtKHVuaXR0ZXN0LlRlc3RQcm9ncmFtKToKLSAgICBtb2R1bGUgPSAnX19tYWluX18nCisgICAgbW9kdWxlID0gTm9uZQogICAgIGV4aXQgPSBUcnVlCiAgICAgZGVmYXVsdFRlc3QgPSBmYWlsZmFzdCA9IGNhdGNoYnJlYWsgPSBidWZmZXIgPSBOb25lCiAgICAgdmVyYm9zaXR5ID0gMQpAQCAtNDYsOSArNTEsOSBAQAogICAgICAgICBkZWYgcmVzdG9yZV9pc2RpcigpOgogICAgICAgICAgICAgb3MucGF0aC5pc2RpciA9IG9yaWdpbmFsX2lzZGlyCiAKLSAgICAgICAgcGF0aF9saXN0cyA9IFtbJ3Rlc3QxLnB5JywgJ3Rlc3QyLnB5JywgJ25vdF9hX3Rlc3QucHknLCAndGVzdF9kaXInLAorICAgICAgICBwYXRoX2xpc3RzID0gW1sndGVzdDIucHknLCAndGVzdDEucHknLCAnbm90X2FfdGVzdC5weScsICd0ZXN0X2RpcicsCiAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0LmZvbycsICd0ZXN0LW5vdC1hLW1vZHVsZS5weScsICdhbm90aGVyX2RpciddLAotICAgICAgICAgICAgICAgICAgICAgIFsndGVzdDMucHknLCAndGVzdDQucHknLCBdXQorICAgICAgICAgICAgICAgICAgICAgIFsndGVzdDQucHknLCAndGVzdDMucHknLCBdXQogICAgICAgICBvcy5saXN0ZGlyID0gbGFtYmRhIHBhdGg6IHBhdGhfbGlzdHMucG9wKDApCiAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChyZXN0b3JlX2xpc3RkaXIpCiAKQEAgLTcwLDYgKzc1LDggQEAKICAgICAgICAgbG9hZGVyLl90b3BfbGV2ZWxfZGlyID0gdG9wX2xldmVsCiAgICAgICAgIHN1aXRlID0gbGlzdChsb2FkZXIuX2ZpbmRfdGVzdHModG9wX2xldmVsLCAndGVzdCoucHknKSkKIAorICAgICAgICAjIFRoZSB0ZXN0IHN1aXRlcyBmb3VuZCBzaG91bGQgYmUgc29ydGVkIGFscGhhYmV0aWNhbGx5IGZvciByZWxpYWJsZQorICAgICAgICAjIGV4ZWN1dGlvbiBvcmRlci4KICAgICAgICAgZXhwZWN0ZWQgPSBbbmFtZSArICcgbW9kdWxlIHRlc3RzJyBmb3IgbmFtZSBpbgogICAgICAgICAgICAgICAgICAgICAoJ3Rlc3QxJywgJ3Rlc3QyJyldCiAgICAgICAgIGV4cGVjdGVkLmV4dGVuZChbKCd0ZXN0X2Rpci4lcycgJSBuYW1lKSArICcgbW9kdWxlIHRlc3RzJyBmb3IgbmFtZSBpbgpAQCAtMTMyLDYgKzEzOSw3IEBACiAgICAgICAgICMgYW5kIGRpcmVjdGx5IGZyb20gdGhlIHRlc3RfZGlyZWN0b3J5MiBwYWNrYWdlCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VpdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgWydsb2FkX3Rlc3RzJywgJ3Rlc3RfZGlyZWN0b3J5MicgKyAnIG1vZHVsZSB0ZXN0cyddKQorICAgICAgICAjIFRoZSB0ZXN0IG1vZHVsZSBwYXRocyBzaG91bGQgYmUgc29ydGVkIGZvciByZWxpYWJsZSBleGVjdXRpb24gb3JkZXIKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChNb2R1bGUucGF0aHMsIFsndGVzdF9kaXJlY3RvcnknLCAndGVzdF9kaXJlY3RvcnkyJ10pCiAKICAgICAgICAgIyBsb2FkX3Rlc3RzIHNob3VsZCBoYXZlIGJlZW4gY2FsbGVkIG9uY2Ugd2l0aCBsb2FkZXIsIHRlc3RzIGFuZCBwYXR0ZXJuCkBAIC0xNjksNyArMTc3LDcgQEAKICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHJlc3RvcmVfaXNkaXIpCiAKICAgICAgICAgX2ZpbmRfdGVzdHNfYXJncyA9IFtdCi0gICAgICAgIGRlZiBfZmluZF90ZXN0cyhzdGFydF9kaXIsIHBhdHRlcm4pOgorICAgICAgICBkZWYgX2ZpbmRfdGVzdHMoc3RhcnRfZGlyLCBwYXR0ZXJuLCBuYW1lc3BhY2U9Tm9uZSk6CiAgICAgICAgICAgICBfZmluZF90ZXN0c19hcmdzLmFwcGVuZCgoc3RhcnRfZGlyLCBwYXR0ZXJuKSkKICAgICAgICAgICAgIHJldHVybiBbJ3Rlc3RzJ10KICAgICAgICAgbG9hZGVyLl9maW5kX3Rlc3RzID0gX2ZpbmRfdGVzdHMKQEAgLTE4NCwxMSArMTkyLDkgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfZmluZF90ZXN0c19hcmdzLCBbKHN0YXJ0X2RpciwgJ3BhdHRlcm4nKV0pCiAgICAgICAgIHNlbGYuYXNzZXJ0SW4odG9wX2xldmVsX2Rpciwgc3lzLnBhdGgpCiAKLSAgICBkZWYgdGVzdF9kaXNjb3Zlcl93aXRoX21vZHVsZXNfdGhhdF9mYWlsX3RvX2ltcG9ydChzZWxmKToKLSAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCi0KKyAgICBkZWYgc2V0dXBfaW1wb3J0X2lzc3VlX3Rlc3RzKHNlbGYsIGZha2VmaWxlKToKICAgICAgICAgbGlzdGRpciA9IG9zLmxpc3RkaXIKLSAgICAgICAgb3MubGlzdGRpciA9IGxhbWJkYSBfOiBbJ3Rlc3RfdGhpc19kb2VzX25vdF9leGlzdC5weSddCisgICAgICAgIG9zLmxpc3RkaXIgPSBsYW1iZGEgXzogW2Zha2VmaWxlXQogICAgICAgICBpc2ZpbGUgPSBvcy5wYXRoLmlzZmlsZQogICAgICAgICBvcy5wYXRoLmlzZmlsZSA9IGxhbWJkYSBfOiBUcnVlCiAgICAgICAgIG9yaWdfc3lzX3BhdGggPSBzeXMucGF0aFs6XQpAQCAtMTk4LDYgKzIwNCwxMSBAQAogICAgICAgICAgICAgc3lzLnBhdGhbOl0gPSBvcmlnX3N5c19wYXRoCiAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChyZXN0b3JlKQogCisgICAgZGVmIHRlc3RfZGlzY292ZXJfd2l0aF9tb2R1bGVzX3RoYXRfZmFpbF90b19pbXBvcnQoc2VsZik6CisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorCisgICAgICAgIHNlbGYuc2V0dXBfaW1wb3J0X2lzc3VlX3Rlc3RzKCd0ZXN0X3RoaXNfZG9lc19ub3RfZXhpc3QucHknKQorCiAgICAgICAgIHN1aXRlID0gbG9hZGVyLmRpc2NvdmVyKCcuJykKICAgICAgICAgc2VsZi5hc3NlcnRJbihvcy5nZXRjd2QoKSwgc3lzLnBhdGgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VpdGUuY291bnRUZXN0Q2FzZXMoKSwgMSkKQEAgLTIwNiw2MiArMjE3LDgyIEBACiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpOgogICAgICAgICAgICAgdGVzdC50ZXN0X3RoaXNfZG9lc19ub3RfZXhpc3QoKQogCisgICAgICAgICMgQ2hlY2sgcGlja2xhYmlsaXR5CisgICAgICAgIGZvciBwcm90byBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyh0ZXN0LCBwcm90bykpCisKKyAgICBkZWYgdGVzdF9kaXNjb3Zlcl93aXRoX21vZHVsZV90aGF0X3JhaXNlc19Ta2lwVGVzdF9vbl9pbXBvcnQoc2VsZik6CisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorCisgICAgICAgIGRlZiBfZ2V0X21vZHVsZV9mcm9tX25hbWUobmFtZSk6CisgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgnc2tpcHBlcm9vJykKKyAgICAgICAgbG9hZGVyLl9nZXRfbW9kdWxlX2Zyb21fbmFtZSA9IF9nZXRfbW9kdWxlX2Zyb21fbmFtZQorCisgICAgICAgIHNlbGYuc2V0dXBfaW1wb3J0X2lzc3VlX3Rlc3RzKCd0ZXN0X3NraXBfZHVtbXkucHknKQorCisgICAgICAgIHN1aXRlID0gbG9hZGVyLmRpc2NvdmVyKCcuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWl0ZS5jb3VudFRlc3RDYXNlcygpLCAxKQorCisgICAgICAgIHJlc3VsdCA9IHVuaXR0ZXN0LlRlc3RSZXN1bHQoKQorICAgICAgICBzdWl0ZS5ydW4ocmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQuc2tpcHBlZCksIDEpCisKKyAgICAgICAgIyBDaGVjayBwaWNrbGFiaWxpdHkKKyAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKHN1aXRlLCBwcm90bykpCisKICAgICBkZWYgdGVzdF9jb21tYW5kX2xpbmVfaGFuZGxpbmdfcGFyc2VBcmdzKHNlbGYpOgogICAgICAgICBwcm9ncmFtID0gVGVzdGFibGVUZXN0UHJvZ3JhbSgpCiAKICAgICAgICAgYXJncyA9IFtdCi0gICAgICAgIGRlZiBkb19kaXNjb3ZlcnkoYXJndik6Ci0gICAgICAgICAgICBhcmdzLmV4dGVuZChhcmd2KQotICAgICAgICBwcm9ncmFtLl9kb19kaXNjb3ZlcnkgPSBkb19kaXNjb3ZlcnkKKyAgICAgICAgcHJvZ3JhbS5fZG9fZGlzY292ZXJ5ID0gYXJncy5hcHBlbmQKICAgICAgICAgcHJvZ3JhbS5wYXJzZUFyZ3MoWydzb21ldGhpbmcnLCAnZGlzY292ZXInXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhcmdzLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhcmdzLCBbW11dKQogCisgICAgICAgIGFyZ3NbOl0gPSBbXQogICAgICAgICBwcm9ncmFtLnBhcnNlQXJncyhbJ3NvbWV0aGluZycsICdkaXNjb3ZlcicsICdmb28nLCAnYmFyJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXJncywgWydmb28nLCAnYmFyJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXJncywgW1snZm9vJywgJ2JhciddXSkKIAogICAgIGRlZiB0ZXN0X2NvbW1hbmRfbGluZV9oYW5kbGluZ19kaXNjb3Zlcl9ieV9kZWZhdWx0KHNlbGYpOgogICAgICAgICBwcm9ncmFtID0gVGVzdGFibGVUZXN0UHJvZ3JhbSgpCi0gICAgICAgIHByb2dyYW0ubW9kdWxlID0gTm9uZQogCi0gICAgICAgIHNlbGYuY2FsbGVkID0gRmFsc2UKLSAgICAgICAgZGVmIGRvX2Rpc2NvdmVyeShhcmd2KToKLSAgICAgICAgICAgIHNlbGYuY2FsbGVkID0gVHJ1ZQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhcmd2LCBbXSkKLSAgICAgICAgcHJvZ3JhbS5fZG9fZGlzY292ZXJ5ID0gZG9fZGlzY292ZXJ5CisgICAgICAgIGFyZ3MgPSBbXQorICAgICAgICBwcm9ncmFtLl9kb19kaXNjb3ZlcnkgPSBhcmdzLmFwcGVuZAogICAgICAgICBwcm9ncmFtLnBhcnNlQXJncyhbJ3NvbWV0aGluZyddKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXJncywgW1tdXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm9ncmFtLnZlcmJvc2l0eSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhwcm9ncmFtLmJ1ZmZlciwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocHJvZ3JhbS5jYXRjaGJyZWFrLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhwcm9ncmFtLmZhaWxmYXN0LCBGYWxzZSkKIAogICAgIGRlZiB0ZXN0X2NvbW1hbmRfbGluZV9oYW5kbGluZ19kaXNjb3Zlcl9ieV9kZWZhdWx0X3dpdGhfb3B0aW9ucyhzZWxmKToKICAgICAgICAgcHJvZ3JhbSA9IFRlc3RhYmxlVGVzdFByb2dyYW0oKQotICAgICAgICBwcm9ncmFtLm1vZHVsZSA9IE5vbmUKIAotICAgICAgICBhcmdzID0gWydzb21ldGhpbmcnLCAnLXYnLCAnLWInLCAnLXYnLCAnLWMnLCAnLWYnXQotICAgICAgICBzZWxmLmNhbGxlZCA9IEZhbHNlCi0gICAgICAgIGRlZiBkb19kaXNjb3ZlcnkoYXJndik6Ci0gICAgICAgICAgICBzZWxmLmNhbGxlZCA9IFRydWUKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXJndiwgYXJnc1sxOl0pCi0gICAgICAgIHByb2dyYW0uX2RvX2Rpc2NvdmVyeSA9IGRvX2Rpc2NvdmVyeQotICAgICAgICBwcm9ncmFtLnBhcnNlQXJncyhhcmdzKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5jYWxsZWQpCisgICAgICAgIGFyZ3MgPSBbXQorICAgICAgICBwcm9ncmFtLl9kb19kaXNjb3ZlcnkgPSBhcmdzLmFwcGVuZAorICAgICAgICBwcm9ncmFtLnBhcnNlQXJncyhbJ3NvbWV0aGluZycsICctdicsICctYicsICctdicsICctYycsICctZiddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFyZ3MsIFtbXV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvZ3JhbS52ZXJib3NpdHksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocHJvZ3JhbS5idWZmZXIsIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocHJvZ3JhbS5jYXRjaGJyZWFrLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydElzKHByb2dyYW0uZmFpbGZhc3QsIFRydWUpCiAKIAogICAgIGRlZiB0ZXN0X2NvbW1hbmRfbGluZV9oYW5kbGluZ19kb19kaXNjb3ZlcnlfdG9vX21hbnlfYXJndW1lbnRzKHNlbGYpOgotICAgICAgICBjbGFzcyBTdG9wKEV4Y2VwdGlvbik6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIGRlZiB1c2FnZUV4aXQoKToKLSAgICAgICAgICAgIHJhaXNlIFN0b3AKLQogICAgICAgICBwcm9ncmFtID0gVGVzdGFibGVUZXN0UHJvZ3JhbSgpCi0gICAgICAgIHByb2dyYW0udXNhZ2VFeGl0ID0gdXNhZ2VFeGl0CiAgICAgICAgIHByb2dyYW0udGVzdExvYWRlciA9IE5vbmUKIAotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFN0b3ApOgorICAgICAgICB3aXRoIHN1cHBvcnQuY2FwdHVyZWRfc3RkZXJyKCkgYXMgc3RkZXJyLCBcCisgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3lzdGVtRXhpdCkgYXMgY206CiAgICAgICAgICAgICAjIHRvbyBtYW55IGFyZ3MKICAgICAgICAgICAgIHByb2dyYW0uX2RvX2Rpc2NvdmVyeShbJ29uZScsICd0d28nLCAndGhyZWUnLCAnZm91ciddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5hcmdzLCAoMiwpKQorICAgICAgICBzZWxmLmFzc2VydEluKCd1c2FnZTonLCBzdGRlcnIuZ2V0dmFsdWUoKSkKIAogCiAgICAgZGVmIHRlc3RfY29tbWFuZF9saW5lX2hhbmRsaW5nX2RvX2Rpc2NvdmVyeV91c2VzX2RlZmF1bHRfbG9hZGVyKHNlbGYpOgogICAgICAgICBwcm9ncmFtID0gb2JqZWN0Ll9fbmV3X18odW5pdHRlc3QuVGVzdFByb2dyYW0pCisgICAgICAgIHByb2dyYW0uX2luaXRBcmdQYXJzZXJzKCkKIAogICAgICAgICBjbGFzcyBMb2FkZXIob2JqZWN0KToKICAgICAgICAgICAgIGFyZ3MgPSBbXQpAQCAtNDE3LDcgKzQ0OCw3IEBACiAgICAgICAgIGV4cGVjdGVkUGF0aCA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmRpcm5hbWUodW5pdHRlc3QudGVzdC5fX2ZpbGVfXykpCiAKICAgICAgICAgc2VsZi53YXNSdW4gPSBGYWxzZQotICAgICAgICBkZWYgX2ZpbmRfdGVzdHMoc3RhcnRfZGlyLCBwYXR0ZXJuKToKKyAgICAgICAgZGVmIF9maW5kX3Rlc3RzKHN0YXJ0X2RpciwgcGF0dGVybiwgbmFtZXNwYWNlPU5vbmUpOgogICAgICAgICAgICAgc2VsZi53YXNSdW4gPSBUcnVlCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXJ0X2RpciwgZXhwZWN0ZWRQYXRoKQogICAgICAgICAgICAgcmV0dXJuIHRlc3RzCkBAIC00MjcsNSArNDU4LDc5IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VpdGUuX3Rlc3RzLCB0ZXN0cykKIAogCisgICAgZGVmIHRlc3RfZGlzY292ZXJ5X2Zyb21fZG90dGVkX3BhdGhfYnVpbHRpbl9tb2R1bGVzKHNlbGYpOgorCisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorCisgICAgICAgIGxpc3RkaXIgPSBvcy5saXN0ZGlyCisgICAgICAgIG9zLmxpc3RkaXIgPSBsYW1iZGEgXzogWyd0ZXN0X3RoaXNfZG9lc19ub3RfZXhpc3QucHknXQorICAgICAgICBpc2ZpbGUgPSBvcy5wYXRoLmlzZmlsZQorICAgICAgICBpc2RpciA9IG9zLnBhdGguaXNkaXIKKyAgICAgICAgb3MucGF0aC5pc2RpciA9IGxhbWJkYSBfOiBGYWxzZQorICAgICAgICBvcmlnX3N5c19wYXRoID0gc3lzLnBhdGhbOl0KKyAgICAgICAgZGVmIHJlc3RvcmUoKToKKyAgICAgICAgICAgIG9zLnBhdGguaXNmaWxlID0gaXNmaWxlCisgICAgICAgICAgICBvcy5wYXRoLmlzZGlyID0gaXNkaXIKKyAgICAgICAgICAgIG9zLmxpc3RkaXIgPSBsaXN0ZGlyCisgICAgICAgICAgICBzeXMucGF0aFs6XSA9IG9yaWdfc3lzX3BhdGgKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHJlc3RvcmUpCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgbG9hZGVyLmRpc2NvdmVyKCdzeXMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihjbS5leGNlcHRpb24pLAorICAgICAgICAgICAgICAgICAgICAgICAgICdDYW4gbm90IHVzZSBidWlsdGluIG1vZHVsZXMgJworICAgICAgICAgICAgICAgICAgICAgICAgICdhcyBkb3R0ZWQgbW9kdWxlIG5hbWVzJykKKworICAgIGRlZiB0ZXN0X2Rpc2NvdmVyeV9mcm9tX2RvdHRlZF9uYW1lc3BhY2VfcGFja2FnZXMoc2VsZik6CisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorCisgICAgICAgIG9yaWdfaW1wb3J0ID0gX19pbXBvcnRfXworICAgICAgICBwYWNrYWdlID0gdHlwZXMuTW9kdWxlVHlwZSgncGFja2FnZScpCisgICAgICAgIHBhY2thZ2UuX19wYXRoX18gPSBbJy9hJywgJy9iJ10KKyAgICAgICAgcGFja2FnZS5fX3NwZWNfXyA9IHR5cGVzLlNpbXBsZU5hbWVzcGFjZSgKKyAgICAgICAgICAgbG9hZGVyPU5vbmUsCisgICAgICAgICAgIHN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zPVsnL2EnLCAnL2InXQorICAgICAgICApCisKKyAgICAgICAgZGVmIF9pbXBvcnQocGFja2FnZW5hbWUsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICAgICBzeXMubW9kdWxlc1twYWNrYWdlbmFtZV0gPSBwYWNrYWdlCisgICAgICAgICAgICByZXR1cm4gcGFja2FnZQorCisgICAgICAgIGRlZiBjbGVhbnVwKCk6CisgICAgICAgICAgICBidWlsdGlucy5fX2ltcG9ydF9fID0gb3JpZ19pbXBvcnQKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGNsZWFudXApCisgICAgICAgIGJ1aWx0aW5zLl9faW1wb3J0X18gPSBfaW1wb3J0CisKKyAgICAgICAgX2ZpbmRfdGVzdHNfYXJncyA9IFtdCisgICAgICAgIGRlZiBfZmluZF90ZXN0cyhzdGFydF9kaXIsIHBhdHRlcm4sIG5hbWVzcGFjZT1Ob25lKToKKyAgICAgICAgICAgIF9maW5kX3Rlc3RzX2FyZ3MuYXBwZW5kKChzdGFydF9kaXIsIHBhdHRlcm4pKQorICAgICAgICAgICAgcmV0dXJuIFsnJXMvdGVzdHMnICUgc3RhcnRfZGlyXQorCisgICAgICAgIGxvYWRlci5fZmluZF90ZXN0cyA9IF9maW5kX3Rlc3RzCisgICAgICAgIGxvYWRlci5zdWl0ZUNsYXNzID0gbGlzdAorICAgICAgICBzdWl0ZSA9IGxvYWRlci5kaXNjb3ZlcigncGFja2FnZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VpdGUsIFsnL2EvdGVzdHMnLCAnL2IvdGVzdHMnXSkKKworICAgIGRlZiB0ZXN0X2Rpc2NvdmVyeV9mYWlsZWRfZGlzY292ZXJ5KHNlbGYpOgorICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKyAgICAgICAgcGFja2FnZSA9IHR5cGVzLk1vZHVsZVR5cGUoJ3BhY2thZ2UnKQorICAgICAgICBvcmlnX2ltcG9ydCA9IF9faW1wb3J0X18KKworICAgICAgICBkZWYgX2ltcG9ydChwYWNrYWdlbmFtZSwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgICAgIHN5cy5tb2R1bGVzW3BhY2thZ2VuYW1lXSA9IHBhY2thZ2UKKyAgICAgICAgICAgIHJldHVybiBwYWNrYWdlCisKKyAgICAgICAgZGVmIGNsZWFudXAoKToKKyAgICAgICAgICAgIGJ1aWx0aW5zLl9faW1wb3J0X18gPSBvcmlnX2ltcG9ydAorICAgICAgICBzZWxmLmFkZENsZWFudXAoY2xlYW51cCkKKyAgICAgICAgYnVpbHRpbnMuX19pbXBvcnRfXyA9IF9pbXBvcnQKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcikgYXMgY206CisgICAgICAgICAgICBsb2FkZXIuZGlzY292ZXIoJ3BhY2thZ2UnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihjbS5leGNlcHRpb24pLAorICAgICAgICAgICAgICAgICAgICAgICAgICdkb25cJ3Qga25vdyBob3cgdG8gZGlzY292ZXIgZnJvbSB7IXJ9JworICAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JtYXQocGFja2FnZSkpCisKKwogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfZnVuY3Rpb250ZXN0Y2FzZS5weSBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfZnVuY3Rpb250ZXN0Y2FzZS5weQppbmRleCA5Y2U1ZWUzLi5jNWYyYmNiIDEwMDY0NAotLS0gYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X2Z1bmN0aW9udGVzdGNhc2UucHkKKysrIGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9mdW5jdGlvbnRlc3RjYXNlLnB5CkBAIC0xLDYgKzEsNiBAQAogaW1wb3J0IHVuaXR0ZXN0CiAKLWZyb20gLnN1cHBvcnQgaW1wb3J0IExvZ2dpbmdSZXN1bHQKK2Zyb20gdW5pdHRlc3QudGVzdC5zdXBwb3J0IGltcG9ydCBMb2dnaW5nUmVzdWx0CiAKIAogY2xhc3MgVGVzdF9GdW5jdGlvblRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTE0MiwzICsxNDIsNyBAQAogICAgICAgICB0ZXN0ID0gdW5pdHRlc3QuRnVuY3Rpb25UZXN0Q2FzZShsYW1iZGE6IE5vbmUsIGRlc2NyaXB0aW9uPWRlc2MpCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0LnNob3J0RGVzY3JpcHRpb24oKSwgInRoaXMgdGVzdHMgZm9vIikKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9sb2FkZXIucHkgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X2xvYWRlci5weQppbmRleCBmY2QyZTA3Li5iNjJhMWI1IDEwMDY0NAotLS0gYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X2xvYWRlci5weQorKysgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X2xvYWRlci5weQpAQCAtMTMwNiwzICsxMzA2LDcgQEAKICAgICBkZWYgdGVzdF9zdWl0ZUNsYXNzX19kZWZhdWx0X3ZhbHVlKHNlbGYpOgogICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKICAgICAgICAgc2VsZi5hc3NlcnRJcyhsb2FkZXIuc3VpdGVDbGFzcywgdW5pdHRlc3QuVGVzdFN1aXRlKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3Byb2dyYW0ucHkgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3Byb2dyYW0ucHkKaW5kZXggOGE0YjNmYS4uNzI1ZDY3ZiAxMDA2NDQKLS0tIGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9wcm9ncmFtLnB5CisrKyBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfcHJvZ3JhbS5weQpAQCAtMiw3ICsyLDkgQEAKIAogaW1wb3J0IG9zCiBpbXBvcnQgc3lzCitmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIGltcG9ydCB1bml0dGVzdAoraW1wb3J0IHVuaXR0ZXN0LnRlc3QKIAogCiBjbGFzcyBUZXN0X1Rlc3RQcm9ncmFtKHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTY0LDYgKzY2LDQxIEBACiAgICAgICAgICAgICByZXR1cm4gc2VsZi5zdWl0ZUNsYXNzKAogICAgICAgICAgICAgICAgIFtzZWxmLmxvYWRUZXN0c0Zyb21UZXN0Q2FzZShUZXN0X1Rlc3RQcm9ncmFtLkZvb0JhcildKQogCisgICAgICAgIGRlZiBsb2FkVGVzdHNGcm9tTmFtZXMoc2VsZiwgbmFtZXMsIG1vZHVsZSk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5zdWl0ZUNsYXNzKAorICAgICAgICAgICAgICAgIFtzZWxmLmxvYWRUZXN0c0Zyb21UZXN0Q2FzZShUZXN0X1Rlc3RQcm9ncmFtLkZvb0JhcildKQorCisgICAgZGVmIHRlc3RfZGVmYXVsdFRlc3Rfd2l0aF9zdHJpbmcoc2VsZik6CisgICAgICAgIGNsYXNzIEZha2VSdW5uZXIob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBydW4oc2VsZiwgdGVzdCk6CisgICAgICAgICAgICAgICAgc2VsZi50ZXN0ID0gdGVzdAorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgb2xkX2FyZ3YgPSBzeXMuYXJndgorICAgICAgICBzeXMuYXJndiA9IFsnZmFrZXRlc3QnXQorICAgICAgICBydW5uZXIgPSBGYWtlUnVubmVyKCkKKyAgICAgICAgcHJvZ3JhbSA9IHVuaXR0ZXN0LlRlc3RQcm9ncmFtKHRlc3RSdW5uZXI9cnVubmVyLCBleGl0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFRlc3Q9J3VuaXR0ZXN0LnRlc3QnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdExvYWRlcj1zZWxmLkZvb0JhckxvYWRlcigpKQorICAgICAgICBzeXMuYXJndiA9IG9sZF9hcmd2CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKCd1bml0dGVzdC50ZXN0JywpLCBwcm9ncmFtLnRlc3ROYW1lcykKKworICAgIGRlZiB0ZXN0X2RlZmF1bHRUZXN0X3dpdGhfaXRlcmFibGUoc2VsZik6CisgICAgICAgIGNsYXNzIEZha2VSdW5uZXIob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBydW4oc2VsZiwgdGVzdCk6CisgICAgICAgICAgICAgICAgc2VsZi50ZXN0ID0gdGVzdAorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgb2xkX2FyZ3YgPSBzeXMuYXJndgorICAgICAgICBzeXMuYXJndiA9IFsnZmFrZXRlc3QnXQorICAgICAgICBydW5uZXIgPSBGYWtlUnVubmVyKCkKKyAgICAgICAgcHJvZ3JhbSA9IHVuaXR0ZXN0LlRlc3RQcm9ncmFtKAorICAgICAgICAgICAgdGVzdFJ1bm5lcj1ydW5uZXIsIGV4aXQ9RmFsc2UsCisgICAgICAgICAgICBkZWZhdWx0VGVzdD1bJ3VuaXR0ZXN0LnRlc3QnLCAndW5pdHRlc3QudGVzdDInXSwKKyAgICAgICAgICAgIHRlc3RMb2FkZXI9c2VsZi5Gb29CYXJMb2FkZXIoKSkKKyAgICAgICAgc3lzLmFyZ3YgPSBvbGRfYXJndgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsndW5pdHRlc3QudGVzdCcsICd1bml0dGVzdC50ZXN0MiddLAorICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLnRlc3ROYW1lcykKIAogICAgIGRlZiB0ZXN0X05vbkV4aXQoc2VsZik6CiAgICAgICAgIHByb2dyYW0gPSB1bml0dGVzdC5tYWluKGV4aXQ9RmFsc2UsCkBAIC0xNTEsMjAgKzE4OCwzOCBAQAogICAgICAgICAgICAgaWYgYXR0ciA9PSAnY2F0Y2gnIGFuZCBub3QgaGFzSW5zdGFsbEhhbmRsZXI6CiAgICAgICAgICAgICAgICAgY29udGludWUKIAorICAgICAgICAgICAgc2V0YXR0cihwcm9ncmFtLCBhdHRyLCBOb25lKQorICAgICAgICAgICAgcHJvZ3JhbS5wYXJzZUFyZ3MoW05vbmVdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhnZXRhdHRyKHByb2dyYW0sIGF0dHIpLCBGYWxzZSkKKworICAgICAgICAgICAgZmFsc2UgPSBbXQorICAgICAgICAgICAgc2V0YXR0cihwcm9ncmFtLCBhdHRyLCBmYWxzZSkKKyAgICAgICAgICAgIHByb2dyYW0ucGFyc2VBcmdzKFtOb25lXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoZ2V0YXR0cihwcm9ncmFtLCBhdHRyKSwgZmFsc2UpCisKKyAgICAgICAgICAgIHRydWUgPSBbNDJdCisgICAgICAgICAgICBzZXRhdHRyKHByb2dyYW0sIGF0dHIsIHRydWUpCisgICAgICAgICAgICBwcm9ncmFtLnBhcnNlQXJncyhbTm9uZV0pCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKGdldGF0dHIocHJvZ3JhbSwgYXR0ciksIHRydWUpCisKICAgICAgICAgICAgIHNob3J0X29wdCA9ICctJXMnICUgYXJnWzBdCiAgICAgICAgICAgICBsb25nX29wdCA9ICctLSVzJyAlIGFyZwogICAgICAgICAgICAgZm9yIG9wdCBpbiBzaG9ydF9vcHQsIGxvbmdfb3B0OgogICAgICAgICAgICAgICAgIHNldGF0dHIocHJvZ3JhbSwgYXR0ciwgTm9uZSkKLQogICAgICAgICAgICAgICAgIHByb2dyYW0ucGFyc2VBcmdzKFtOb25lLCBvcHRdKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShnZXRhdHRyKHByb2dyYW0sIGF0dHIpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoZ2V0YXR0cihwcm9ncmFtLCBhdHRyKSwgVHJ1ZSkKIAotICAgICAgICAgICAgZm9yIG9wdCBpbiBzaG9ydF9vcHQsIGxvbmdfb3B0OgotICAgICAgICAgICAgICAgIG5vdF9ub25lID0gb2JqZWN0KCkKLSAgICAgICAgICAgICAgICBzZXRhdHRyKHByb2dyYW0sIGF0dHIsIG5vdF9ub25lKQorICAgICAgICAgICAgICAgIHNldGF0dHIocHJvZ3JhbSwgYXR0ciwgRmFsc2UpCisgICAgICAgICAgICAgICAgd2l0aCBzdXBwb3J0LmNhcHR1cmVkX3N0ZGVycigpIGFzIHN0ZGVyciwgXAorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeXN0ZW1FeGl0KSBhcyBjbToKKyAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS5wYXJzZUFyZ3MoW05vbmUsIG9wdF0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24uYXJncywgKDIsKSkKIAotICAgICAgICAgICAgICAgIHByb2dyYW0ucGFyc2VBcmdzKFtOb25lLCBvcHRdKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXR0cihwcm9ncmFtLCBhdHRyKSwgbm90X25vbmUpCisgICAgICAgICAgICAgICAgc2V0YXR0cihwcm9ncmFtLCBhdHRyLCBUcnVlKQorICAgICAgICAgICAgICAgIHdpdGggc3VwcG9ydC5jYXB0dXJlZF9zdGRlcnIoKSBhcyBzdGRlcnIsIFwKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3lzdGVtRXhpdCkgYXMgY206CisgICAgICAgICAgICAgICAgICAgIHByb2dyYW0ucGFyc2VBcmdzKFtOb25lLCBvcHRdKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLmFyZ3MsICgyLCkpCiAKICAgICBkZWYgdGVzdFdhcm5pbmcoc2VsZik6CiAgICAgICAgICIiIlRlc3QgdGhlIHdhcm5pbmdzIGFyZ3VtZW50IiIiCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3Jlc3VsdC5weSBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfcmVzdWx0LnB5CmluZGV4IDdkNDA3MjUuLjQ4OWZlMTcgMTAwNjQ0Ci0tLSBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfcmVzdWx0LnB5CisrKyBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfcmVzdWx0LnB5CkBAIC0yMjcsNiArMjI3LDQwIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0SXModGVzdF9jYXNlLCB0ZXN0KQogICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZm9ybWF0dGVkX2V4Yywgc3RyKQogCisgICAgZGVmIHRlc3RfYWRkU3ViVGVzdChzZWxmKToKKyAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0XzEoc2VsZik6CisgICAgICAgICAgICAgICAgbm9ubG9jYWwgc3VidGVzdAorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGZvbz0xKToKKyAgICAgICAgICAgICAgICAgICAgc3VidGVzdCA9IHNlbGYuX3N1YnRlc3QKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgMS8wCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y19pbmZvX3R1cGxlID0gc3lzLmV4Y19pbmZvKCkKKyAgICAgICAgICAgICAgICAgICAgIyBSZWdpc3RlciBhbiBlcnJvciBieSBoYW5kICh0byBjaGVjayB0aGUgQVBJKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQuYWRkU3ViVGVzdCh0ZXN0LCBzdWJ0ZXN0LCBleGNfaW5mb190dXBsZSkKKyAgICAgICAgICAgICAgICAgICAgIyBOb3cgdHJpZ2dlciBhIGZhaWx1cmUKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJzb21lIHJlY29nbml6YWJsZSBmYWlsdXJlIikKKworICAgICAgICBzdWJ0ZXN0ID0gTm9uZQorICAgICAgICB0ZXN0ID0gRm9vKCd0ZXN0XzEnKQorICAgICAgICByZXN1bHQgPSB1bml0dGVzdC5UZXN0UmVzdWx0KCkKKworICAgICAgICB0ZXN0LnJ1bihyZXN1bHQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyZXN1bHQud2FzU3VjY2Vzc2Z1bCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQuZXJyb3JzKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0LmZhaWx1cmVzKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQudGVzdHNSdW4sIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnNob3VsZFN0b3AsIEZhbHNlKQorCisgICAgICAgIHRlc3RfY2FzZSwgZm9ybWF0dGVkX2V4YyA9IHJlc3VsdC5lcnJvcnNbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0ZXN0X2Nhc2UsIHN1YnRlc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oIlplcm9EaXZpc2lvbkVycm9yIiwgZm9ybWF0dGVkX2V4YykKKyAgICAgICAgdGVzdF9jYXNlLCBmb3JtYXR0ZWRfZXhjID0gcmVzdWx0LmZhaWx1cmVzWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0SXModGVzdF9jYXNlLCBzdWJ0ZXN0KQorICAgICAgICBzZWxmLmFzc2VydEluKCJzb21lIHJlY29nbml6YWJsZSBmYWlsdXJlIiwgZm9ybWF0dGVkX2V4YykKKwogICAgIGRlZiB0ZXN0R2V0RGVzY3JpcHRpb25XaXRob3V0RG9jc3RyaW5nKHNlbGYpOgogICAgICAgICByZXN1bHQgPSB1bml0dGVzdC5UZXh0VGVzdFJlc3VsdChOb25lLCBUcnVlLCAxKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKApAQCAtMjM0LDYgKzI2OCwzNyBAQAogICAgICAgICAgICAgICAgICd0ZXN0R2V0RGVzY3JpcHRpb25XaXRob3V0RG9jc3RyaW5nICgnICsgX19uYW1lX18gKwogICAgICAgICAgICAgICAgICcuVGVzdF9UZXN0UmVzdWx0KScpCiAKKyAgICBkZWYgdGVzdEdldFN1YlRlc3REZXNjcmlwdGlvbldpdGhvdXREb2NzdHJpbmcoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGZvbz0xLCBiYXI9Mik6CisgICAgICAgICAgICByZXN1bHQgPSB1bml0dGVzdC5UZXh0VGVzdFJlc3VsdChOb25lLCBUcnVlLCAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmdldERlc2NyaXB0aW9uKHNlbGYuX3N1YnRlc3QpLAorICAgICAgICAgICAgICAgICAgICAndGVzdEdldFN1YlRlc3REZXNjcmlwdGlvbldpdGhvdXREb2NzdHJpbmcgKCcgKyBfX25hbWVfXyArCisgICAgICAgICAgICAgICAgICAgICcuVGVzdF9UZXN0UmVzdWx0KSAoYmFyPTIsIGZvbz0xKScpCisgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KCdzb21lIG1lc3NhZ2UnKToKKyAgICAgICAgICAgIHJlc3VsdCA9IHVuaXR0ZXN0LlRleHRUZXN0UmVzdWx0KE5vbmUsIFRydWUsIDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgICAgICByZXN1bHQuZ2V0RGVzY3JpcHRpb24oc2VsZi5fc3VidGVzdCksCisgICAgICAgICAgICAgICAgICAgICd0ZXN0R2V0U3ViVGVzdERlc2NyaXB0aW9uV2l0aG91dERvY3N0cmluZyAoJyArIF9fbmFtZV9fICsKKyAgICAgICAgICAgICAgICAgICAgJy5UZXN0X1Rlc3RSZXN1bHQpIFtzb21lIG1lc3NhZ2VdJykKKworICAgIGRlZiB0ZXN0R2V0U3ViVGVzdERlc2NyaXB0aW9uV2l0aG91dERvY3N0cmluZ0FuZFBhcmFtcyhzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoKToKKyAgICAgICAgICAgIHJlc3VsdCA9IHVuaXR0ZXN0LlRleHRUZXN0UmVzdWx0KE5vbmUsIFRydWUsIDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgICAgICByZXN1bHQuZ2V0RGVzY3JpcHRpb24oc2VsZi5fc3VidGVzdCksCisgICAgICAgICAgICAgICAgICAgICd0ZXN0R2V0U3ViVGVzdERlc2NyaXB0aW9uV2l0aG91dERvY3N0cmluZ0FuZFBhcmFtcyAnCisgICAgICAgICAgICAgICAgICAgICcoJyArIF9fbmFtZV9fICsgJy5UZXN0X1Rlc3RSZXN1bHQpICg8c3VidGVzdD4pJykKKworICAgIGRlZiB0ZXN0R2V0TmVzdGVkU3ViVGVzdERlc2NyaXB0aW9uV2l0aG91dERvY3N0cmluZyhzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoZm9vPTEpOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoYmFyPTIpOgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IHVuaXR0ZXN0LlRleHRUZXN0UmVzdWx0KE5vbmUsIFRydWUsIDEpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5nZXREZXNjcmlwdGlvbihzZWxmLl9zdWJ0ZXN0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0R2V0TmVzdGVkU3ViVGVzdERlc2NyaXB0aW9uV2l0aG91dERvY3N0cmluZyAnCisgICAgICAgICAgICAgICAgICAgICAgICAnKCcgKyBfX25hbWVfXyArICcuVGVzdF9UZXN0UmVzdWx0KSAoYmFyPTIsIGZvbz0xKScpCisKICAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAogICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKICAgICBkZWYgdGVzdEdldERlc2NyaXB0aW9uV2l0aE9uZUxpbmVEb2NzdHJpbmcoc2VsZik6CkBAIC0yNDcsNiArMzEyLDE4IEBACiAKICAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAogICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKKyAgICBkZWYgdGVzdEdldFN1YlRlc3REZXNjcmlwdGlvbldpdGhPbmVMaW5lRG9jc3RyaW5nKHNlbGYpOgorICAgICAgICAiIiJUZXN0cyBnZXREZXNjcmlwdGlvbigpIGZvciBhIG1ldGhvZCB3aXRoIGEgZG9jc3RyaW5nLiIiIgorICAgICAgICByZXN1bHQgPSB1bml0dGVzdC5UZXh0VGVzdFJlc3VsdChOb25lLCBUcnVlLCAxKQorICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChmb289MSwgYmFyPTIpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICByZXN1bHQuZ2V0RGVzY3JpcHRpb24oc2VsZi5fc3VidGVzdCksCisgICAgICAgICAgICAgICAoJ3Rlc3RHZXRTdWJUZXN0RGVzY3JpcHRpb25XaXRoT25lTGluZURvY3N0cmluZyAnCisgICAgICAgICAgICAgICAgJygnICsgX19uYW1lX18gKyAnLlRlc3RfVGVzdFJlc3VsdCkgKGJhcj0yLCBmb289MSlcbicKKyAgICAgICAgICAgICAgICAnVGVzdHMgZ2V0RGVzY3JpcHRpb24oKSBmb3IgYSBtZXRob2Qgd2l0aCBhIGRvY3N0cmluZy4nKSkKKworICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLmZsYWdzLm9wdGltaXplID49IDIsCisgICAgICAgICAgICAgICAgICAgICAiRG9jc3RyaW5ncyBhcmUgb21pdHRlZCB3aXRoIC1PMiBhbmQgYWJvdmUiKQogICAgIGRlZiB0ZXN0R2V0RGVzY3JpcHRpb25XaXRoTXVsdGlMaW5lRG9jc3RyaW5nKHNlbGYpOgogICAgICAgICAiIiJUZXN0cyBnZXREZXNjcmlwdGlvbigpIGZvciBhIG1ldGhvZCB3aXRoIGEgbG9uZ2VyIGRvY3N0cmluZy4KICAgICAgICAgVGhlIHNlY29uZCBsaW5lIG9mIHRoZSBkb2NzdHJpbmcuCkBAIC0yNTksNiArMzM2LDIxIEBACiAgICAgICAgICAgICAgICAgJ1Rlc3RzIGdldERlc2NyaXB0aW9uKCkgZm9yIGEgbWV0aG9kIHdpdGggYSBsb25nZXIgJwogICAgICAgICAgICAgICAgICdkb2NzdHJpbmcuJykpCiAKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAorICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKKyAgICBkZWYgdGVzdEdldFN1YlRlc3REZXNjcmlwdGlvbldpdGhNdWx0aUxpbmVEb2NzdHJpbmcoc2VsZik6CisgICAgICAgICIiIlRlc3RzIGdldERlc2NyaXB0aW9uKCkgZm9yIGEgbWV0aG9kIHdpdGggYSBsb25nZXIgZG9jc3RyaW5nLgorICAgICAgICBUaGUgc2Vjb25kIGxpbmUgb2YgdGhlIGRvY3N0cmluZy4KKyAgICAgICAgIiIiCisgICAgICAgIHJlc3VsdCA9IHVuaXR0ZXN0LlRleHRUZXN0UmVzdWx0KE5vbmUsIFRydWUsIDEpCisgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGZvbz0xLCBiYXI9Mik6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgIHJlc3VsdC5nZXREZXNjcmlwdGlvbihzZWxmLl9zdWJ0ZXN0KSwKKyAgICAgICAgICAgICAgICgndGVzdEdldFN1YlRlc3REZXNjcmlwdGlvbldpdGhNdWx0aUxpbmVEb2NzdHJpbmcgJworICAgICAgICAgICAgICAgICcoJyArIF9fbmFtZV9fICsgJy5UZXN0X1Rlc3RSZXN1bHQpIChiYXI9MiwgZm9vPTEpXG4nCisgICAgICAgICAgICAgICAgJ1Rlc3RzIGdldERlc2NyaXB0aW9uKCkgZm9yIGEgbWV0aG9kIHdpdGggYSBsb25nZXIgJworICAgICAgICAgICAgICAgICdkb2NzdHJpbmcuJykpCisKICAgICBkZWYgdGVzdFN0YWNrRnJhbWVUcmltbWluZyhzZWxmKToKICAgICAgICAgY2xhc3MgRnJhbWUob2JqZWN0KToKICAgICAgICAgICAgIGNsYXNzIHRiX2ZyYW1lKG9iamVjdCk6CmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3J1bm5lci5weSBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfcnVubmVyLnB5CmluZGV4IGUyMmU2YmMuLjdjMGJkNTEgMTAwNjQ0Ci0tLSBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfcnVubmVyLnB5CisrKyBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfcnVubmVyLnB5CkBAIC01LDggKzUsMTAgQEAKIGltcG9ydCBzdWJwcm9jZXNzCiAKIGltcG9ydCB1bml0dGVzdAorZnJvbSB1bml0dGVzdC5jYXNlIGltcG9ydCBfT3V0Y29tZQogCi1mcm9tIC5zdXBwb3J0IGltcG9ydCBMb2dnaW5nUmVzdWx0LCBSZXN1bHRXaXRoTm9TdGFydFRlc3RSdW5TdG9wVGVzdFJ1bgorZnJvbSB1bml0dGVzdC50ZXN0LnN1cHBvcnQgaW1wb3J0IChMb2dnaW5nUmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXN1bHRXaXRoTm9TdGFydFRlc3RSdW5TdG9wVGVzdFJ1bikKIAogCiBjbGFzcyBUZXN0Q2xlYW5VcCh1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC00MiwxMiArNDQsOCBAQAogICAgICAgICAgICAgZGVmIHRlc3ROb3RoaW5nKHNlbGYpOgogICAgICAgICAgICAgICAgIHBhc3MKIAotICAgICAgICBjbGFzcyBNb2NrT3V0Y29tZShvYmplY3QpOgotICAgICAgICAgICAgc3VjY2VzcyA9IFRydWUKLSAgICAgICAgICAgIGVycm9ycyA9IFtdCi0KICAgICAgICAgdGVzdCA9IFRlc3RhYmxlVGVzdCgndGVzdE5vdGhpbmcnKQotICAgICAgICB0ZXN0Ll9vdXRjb21lRm9yRG9DbGVhbnVwcyA9IE1vY2tPdXRjb21lCisgICAgICAgIG91dGNvbWUgPSB0ZXN0Ll9vdXRjb21lID0gX091dGNvbWUoKQogCiAgICAgICAgIGV4YzEgPSBFeGNlcHRpb24oJ2ZvbycpCiAgICAgICAgIGV4YzIgPSBFeGNlcHRpb24oJ2JhcicpCkBAIC02MSw5ICs1OSwxMCBAQAogICAgICAgICB0ZXN0LmFkZENsZWFudXAoY2xlYW51cDIpCiAKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0ZXN0LmRvQ2xlYW51cHMoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShNb2NrT3V0Y29tZS5zdWNjZXNzKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG91dGNvbWUuc3VjY2VzcykKIAotICAgICAgICAoVHlwZTEsIGluc3RhbmNlMSwgXyksIChUeXBlMiwgaW5zdGFuY2UyLCBfKSA9IHJldmVyc2VkKE1vY2tPdXRjb21lLmVycm9ycykKKyAgICAgICAgKChfLCAoVHlwZTEsIGluc3RhbmNlMSwgXykpLAorICAgICAgICAgKF8sIChUeXBlMiwgaW5zdGFuY2UyLCBfKSkpID0gcmV2ZXJzZWQob3V0Y29tZS5lcnJvcnMpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKFR5cGUxLCBpbnN0YW5jZTEpLCAoRXhjZXB0aW9uLCBleGMxKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoVHlwZTIsIGluc3RhbmNlMiksIChFeGNlcHRpb24sIGV4YzIpKQogCkBAIC0zNDEsMyArMzQwLDcgQEAKICAgICAgICAgZiA9IGlvLlN0cmluZ0lPKCkKICAgICAgICAgcnVubmVyID0gdW5pdHRlc3QuVGV4dFRlc3RSdW5uZXIoZikKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJ1bm5lci5zdHJlYW0uc3RyZWFtIGlzIGYpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rfc2V0dXBzLnB5IGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9zZXR1cHMucHkKaW5kZXggYjhkNWFhNC4uMzkyZjk1ZSAxMDA2NDQKLS0tIGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9zZXR1cHMucHkKKysrIGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9zZXR1cHMucHkKQEAgLTQ5NCwxNCArNDk0LDEzIEBACiAgICAgICAgIFRlc3QuX19tb2R1bGVfXyA9ICdNb2R1bGUnCiAgICAgICAgIHN5cy5tb2R1bGVzWydNb2R1bGUnXSA9IE1vZHVsZQogCi0gICAgICAgIF9zdWl0ZSA9IHVuaXR0ZXN0LmRlZmF1bHRUZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21UZXN0Q2FzZShUZXN0KQotICAgICAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCi0gICAgICAgIHN1aXRlLmFkZFRlc3QoX3N1aXRlKQotCiAgICAgICAgIG1lc3NhZ2VzID0gKCdzZXRVcE1vZHVsZScsICd0ZWFyRG93bk1vZHVsZScsICdzZXRVcENsYXNzJywgJ3RlYXJEb3duQ2xhc3MnLCAndGVzdF9zb21ldGhpbmcnKQogICAgICAgICBmb3IgcGhhc2UsIG1zZyBpbiBlbnVtZXJhdGUobWVzc2FnZXMpOgorICAgICAgICAgICAgX3N1aXRlID0gdW5pdHRlc3QuZGVmYXVsdFRlc3RMb2FkZXIubG9hZFRlc3RzRnJvbVRlc3RDYXNlKFRlc3QpCisgICAgICAgICAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZShbX3N1aXRlXSkKICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChFeGNlcHRpb24sIG1zZyk6CiAgICAgICAgICAgICAgICAgc3VpdGUuZGVidWcoKQogCisKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3NraXBwaW5nLnB5IGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9za2lwcGluZy5weQppbmRleCA5NTIyNDBlLi43MWY3YjcwIDEwMDY0NAotLS0gYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3NraXBwaW5nLnB5CisrKyBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rfc2tpcHBpbmcucHkKQEAgLTEsNiArMSw2IEBACiBpbXBvcnQgdW5pdHRlc3QKIAotZnJvbSAuc3VwcG9ydCBpbXBvcnQgTG9nZ2luZ1Jlc3VsdAorZnJvbSB1bml0dGVzdC50ZXN0LnN1cHBvcnQgaW1wb3J0IExvZ2dpbmdSZXN1bHQKIAogCiBjbGFzcyBUZXN0X1Rlc3RTa2lwcGluZyh1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC0yOSw2ICsyOSwzMSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5za2lwcGVkLCBbKHRlc3QsICJ0ZXN0aW5nIildKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC50ZXN0c1J1biwgMSkKIAorICAgIGRlZiB0ZXN0X3NraXBwaW5nX3N1YnRlc3RzKHNlbGYpOgorICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3Rfc2tpcF9tZShzZWxmKToKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChhPTEpOgorICAgICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChiPTIpOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgic2tpcCAxIikKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgic2tpcCAyIikKKyAgICAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJza2lwIDMiKQorICAgICAgICBldmVudHMgPSBbXQorICAgICAgICByZXN1bHQgPSBMb2dnaW5nUmVzdWx0KGV2ZW50cykKKyAgICAgICAgdGVzdCA9IEZvbygidGVzdF9za2lwX21lIikKKyAgICAgICAgdGVzdC5ydW4ocmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2ZW50cywgWydzdGFydFRlc3QnLCAnYWRkU2tpcCcsICdhZGRTa2lwJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYWRkU2tpcCcsICdzdG9wVGVzdCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQuc2tpcHBlZCksIDMpCisgICAgICAgIHN1YnRlc3QsIG1zZyA9IHJlc3VsdC5za2lwcGVkWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLCAic2tpcCAxIikKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN1YnRlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKQorICAgICAgICBzZWxmLmFzc2VydElzTm90KHN1YnRlc3QsIHRlc3QpCisgICAgICAgIHN1YnRlc3QsIG1zZyA9IHJlc3VsdC5za2lwcGVkWzFdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLCAic2tpcCAyIikKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN1YnRlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKQorICAgICAgICBzZWxmLmFzc2VydElzTm90KHN1YnRlc3QsIHRlc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnNraXBwZWRbMl0sICh0ZXN0LCAic2tpcCAzIikpCisKICAgICBkZWYgdGVzdF9za2lwcGluZ19kZWNvcmF0b3JzKHNlbGYpOgogICAgICAgICBvcF90YWJsZSA9ICgodW5pdHRlc3Quc2tpcFVubGVzcywgRmFsc2UsIFRydWUpLAogICAgICAgICAgICAgICAgICAgICAodW5pdHRlc3Quc2tpcElmLCBUcnVlLCBGYWxzZSkpCkBAIC05NSw2ICsxMjAsNjQgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuZXhwZWN0ZWRGYWlsdXJlc1swXVswXSwgdGVzdCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdC53YXNTdWNjZXNzZnVsKCkpCiAKKyAgICBkZWYgdGVzdF9leHBlY3RlZF9mYWlsdXJlX3dpdGhfd3JhcHBlZF9jbGFzcyhzZWxmKToKKyAgICAgICAgQHVuaXR0ZXN0LmV4cGVjdGVkRmFpbHVyZQorICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3RfMShzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoRmFsc2UpCisKKyAgICAgICAgZXZlbnRzID0gW10KKyAgICAgICAgcmVzdWx0ID0gTG9nZ2luZ1Jlc3VsdChldmVudHMpCisgICAgICAgIHRlc3QgPSBGb28oInRlc3RfMSIpCisgICAgICAgIHRlc3QucnVuKHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmVudHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgWydzdGFydFRlc3QnLCAnYWRkRXhwZWN0ZWRGYWlsdXJlJywgJ3N0b3BUZXN0J10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LmV4cGVjdGVkRmFpbHVyZXNbMF1bMF0sIHRlc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXN1bHQud2FzU3VjY2Vzc2Z1bCgpKQorCisgICAgZGVmIHRlc3RfZXhwZWN0ZWRfZmFpbHVyZV93aXRoX3dyYXBwZWRfc3ViY2xhc3Moc2VsZik6CisgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdF8xKHNlbGYpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShGYWxzZSkKKworICAgICAgICBAdW5pdHRlc3QuZXhwZWN0ZWRGYWlsdXJlCisgICAgICAgIGNsYXNzIEJhcihGb28pOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGV2ZW50cyA9IFtdCisgICAgICAgIHJlc3VsdCA9IExvZ2dpbmdSZXN1bHQoZXZlbnRzKQorICAgICAgICB0ZXN0ID0gQmFyKCJ0ZXN0XzEiKQorICAgICAgICB0ZXN0LnJ1bihyZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZlbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsnc3RhcnRUZXN0JywgJ2FkZEV4cGVjdGVkRmFpbHVyZScsICdzdG9wVGVzdCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5leHBlY3RlZEZhaWx1cmVzWzBdWzBdLCB0ZXN0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzdWx0Lndhc1N1Y2Nlc3NmdWwoKSkKKworICAgIGRlZiB0ZXN0X2V4cGVjdGVkX2ZhaWx1cmVfc3VidGVzdHMoc2VsZik6CisgICAgICAgICMgQSBmYWlsdXJlIGluIGFueSBzdWJ0ZXN0IGNvdW50cyBhcyB0aGUgZXhwZWN0ZWQgZmFpbHVyZSBvZiB0aGUKKyAgICAgICAgIyB3aG9sZSB0ZXN0LgorICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgQHVuaXR0ZXN0LmV4cGVjdGVkRmFpbHVyZQorICAgICAgICAgICAgZGVmIHRlc3RfZGllKHNlbGYpOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KCk6CisgICAgICAgICAgICAgICAgICAgICMgVGhpcyBvbmUgc3VjY2VlZHMKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KCk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiaGVscCBtZSEiKQorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KCk6CisgICAgICAgICAgICAgICAgICAgICMgVGhpcyBvbmUgZG9lc24ndCBnZXQgZXhlY3V0ZWQKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGRuJ3QgY29tZSBoZXJlIikKKyAgICAgICAgZXZlbnRzID0gW10KKyAgICAgICAgcmVzdWx0ID0gTG9nZ2luZ1Jlc3VsdChldmVudHMpCisgICAgICAgIHRlc3QgPSBGb28oInRlc3RfZGllIikKKyAgICAgICAgdGVzdC5ydW4ocmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2ZW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICBbJ3N0YXJ0VGVzdCcsICdhZGRTdWJUZXN0U3VjY2VzcycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICdhZGRFeHBlY3RlZEZhaWx1cmUnLCAnc3RvcFRlc3QnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0LmV4cGVjdGVkRmFpbHVyZXMpLCAxKQorICAgICAgICBzZWxmLmFzc2VydElzKHJlc3VsdC5leHBlY3RlZEZhaWx1cmVzWzBdWzBdLCB0ZXN0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzdWx0Lndhc1N1Y2Nlc3NmdWwoKSkKKwogICAgIGRlZiB0ZXN0X3VuZXhwZWN0ZWRfc3VjY2VzcyhzZWxmKToKICAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgICAgIEB1bml0dGVzdC5leHBlY3RlZEZhaWx1cmUKQEAgLTEwOCw3ICsxOTEsMzEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICBbJ3N0YXJ0VGVzdCcsICdhZGRVbmV4cGVjdGVkU3VjY2VzcycsICdzdG9wVGVzdCddKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHJlc3VsdC5mYWlsdXJlcykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQudW5leHBlY3RlZFN1Y2Nlc3NlcywgW3Rlc3RdKQotICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzdWx0Lndhc1N1Y2Nlc3NmdWwoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyZXN1bHQud2FzU3VjY2Vzc2Z1bCgpKQorCisgICAgZGVmIHRlc3RfdW5leHBlY3RlZF9zdWNjZXNzX3N1YnRlc3RzKHNlbGYpOgorICAgICAgICAjIFN1Y2Nlc3MgaW4gYWxsIHN1YnRlc3RzIGNvdW50cyBhcyB0aGUgdW5leHBlY3RlZCBzdWNjZXNzIG9mCisgICAgICAgICMgdGhlIHdob2xlIHRlc3QuCisgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBAdW5pdHRlc3QuZXhwZWN0ZWRGYWlsdXJlCisgICAgICAgICAgICBkZWYgdGVzdF9kaWUoc2VsZik6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoKToKKyAgICAgICAgICAgICAgICAgICAgIyBUaGlzIG9uZSBzdWNjZWVkcworICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoKToKKyAgICAgICAgICAgICAgICAgICAgIyBTbyBkb2VzIHRoaXMgb25lCisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZXZlbnRzID0gW10KKyAgICAgICAgcmVzdWx0ID0gTG9nZ2luZ1Jlc3VsdChldmVudHMpCisgICAgICAgIHRlc3QgPSBGb28oInRlc3RfZGllIikKKyAgICAgICAgdGVzdC5ydW4ocmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2ZW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICBbJ3N0YXJ0VGVzdCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICdhZGRTdWJUZXN0U3VjY2VzcycsICdhZGRTdWJUZXN0U3VjY2VzcycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICdhZGRVbmV4cGVjdGVkU3VjY2VzcycsICdzdG9wVGVzdCddKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHJlc3VsdC5mYWlsdXJlcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQudW5leHBlY3RlZFN1Y2Nlc3NlcywgW3Rlc3RdKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHJlc3VsdC53YXNTdWNjZXNzZnVsKCkpCiAKICAgICBkZWYgdGVzdF9za2lwX2RvZXNudF9ydW5fc2V0dXAoc2VsZik6CiAgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC0xNDcsMyArMjU0LDcgQEAKICAgICAgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoW3Rlc3RdKQogICAgICAgICBzdWl0ZS5ydW4ocmVzdWx0KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5za2lwcGVkLCBbKHRlc3QsICJ0ZXN0aW5nIildKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3N1aXRlLnB5IGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9zdWl0ZS5weQppbmRleCAyZGI5NzhkLi4wNTUxYTE2IDEwMDY0NAotLS0gYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3N1aXRlLnB5CisrKyBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rfc3VpdGUucHkKQEAgLTEsNyArMSw5IEBACiBpbXBvcnQgdW5pdHRlc3QKIAoraW1wb3J0IGdjCiBpbXBvcnQgc3lzCi1mcm9tIC5zdXBwb3J0IGltcG9ydCBMb2dnaW5nUmVzdWx0LCBUZXN0RXF1YWxpdHkKK2ltcG9ydCB3ZWFrcmVmCitmcm9tIHVuaXR0ZXN0LnRlc3Quc3VwcG9ydCBpbXBvcnQgTG9nZ2luZ1Jlc3VsdCwgVGVzdEVxdWFsaXR5CiAKIAogIyMjIFN1cHBvcnQgY29kZSBmb3IgVGVzdF9UZXN0U3VpdGUKQEAgLTQ5LDYgKzUxLDkgQEAKICAgICAgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VpdGUuY291bnRUZXN0Q2FzZXMoKSwgMCkKKyAgICAgICAgIyBjb3VudFRlc3RDYXNlcygpIHN0aWxsIHdvcmtzIGFmdGVyIHRlc3RzIGFyZSBydW4KKyAgICAgICAgc3VpdGUucnVuKHVuaXR0ZXN0LlRlc3RSZXN1bHQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWl0ZS5jb3VudFRlc3RDYXNlcygpLCAwKQogCiAgICAgIyAiY2xhc3MgVGVzdFN1aXRlKFt0ZXN0c10pIgogICAgICMgLi4uCkBAIC02MSw2ICs2Niw5IEBACiAgICAgICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKFtdKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VpdGUuY291bnRUZXN0Q2FzZXMoKSwgMCkKKyAgICAgICAgIyBjb3VudFRlc3RDYXNlcygpIHN0aWxsIHdvcmtzIGFmdGVyIHRlc3RzIGFyZSBydW4KKyAgICAgICAgc3VpdGUucnVuKHVuaXR0ZXN0LlRlc3RSZXN1bHQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWl0ZS5jb3VudFRlc3RDYXNlcygpLCAwKQogCiAgICAgIyAiY2xhc3MgVGVzdFN1aXRlKFt0ZXN0c10pIgogICAgICMgLi4uCkBAIC04Miw2ICs5MCwxNCBAQAogICAgICAgICBzdWl0ZV8zID0gdW5pdHRlc3QuVGVzdFN1aXRlKHNldChzdWl0ZV8xKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWl0ZV8zLmNvdW50VGVzdENhc2VzKCksIDIpCiAKKyAgICAgICAgIyBjb3VudFRlc3RDYXNlcygpIHN0aWxsIHdvcmtzIGFmdGVyIHRlc3RzIGFyZSBydW4KKyAgICAgICAgc3VpdGVfMS5ydW4odW5pdHRlc3QuVGVzdFJlc3VsdCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1aXRlXzEuY291bnRUZXN0Q2FzZXMoKSwgMikKKyAgICAgICAgc3VpdGVfMi5ydW4odW5pdHRlc3QuVGVzdFJlc3VsdCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1aXRlXzIuY291bnRUZXN0Q2FzZXMoKSwgMikKKyAgICAgICAgc3VpdGVfMy5ydW4odW5pdHRlc3QuVGVzdFJlc3VsdCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1aXRlXzMuY291bnRUZXN0Q2FzZXMoKSwgMikKKwogICAgICMgImNsYXNzIFRlc3RTdWl0ZShbdGVzdHNdKSIKICAgICAjIC4uLgogICAgICMgIklmIHRlc3RzIGlzIGdpdmVuLCBpdCBtdXN0IGJlIGFuIGl0ZXJhYmxlIG9mIGluZGl2aWR1YWwgdGVzdCBjYXNlcwpAQCAtOTcsNiArMTEzLDkgQEAKIAogICAgICAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSh0ZXN0cygpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1aXRlLmNvdW50VGVzdENhc2VzKCksIDIpCisgICAgICAgICMgY291bnRUZXN0Q2FzZXMoKSBzdGlsbCB3b3JrcyBhZnRlciB0ZXN0cyBhcmUgcnVuCisgICAgICAgIHN1aXRlLnJ1bih1bml0dGVzdC5UZXN0UmVzdWx0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VpdGUuY291bnRUZXN0Q2FzZXMoKSwgMikKIAogICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICAgICAjIyMgL1Rlc3RzIGZvciBUZXN0U3VpdGUuX19pbml0X18KQEAgLTE0Myw2ICsxNjIsOSBAQAogICAgICAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgodGVzdDEsIHRlc3QyKSkKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1aXRlLmNvdW50VGVzdENhc2VzKCksIDIpCisgICAgICAgICMgY291bnRUZXN0Q2FzZXMoKSBzdGlsbCB3b3JrcyBhZnRlciB0ZXN0cyBhcmUgcnVuCisgICAgICAgIHN1aXRlLnJ1bih1bml0dGVzdC5UZXN0UmVzdWx0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VpdGUuY291bnRUZXN0Q2FzZXMoKSwgMikKIAogICAgICMgIlJldHVybiB0aGUgbnVtYmVyIG9mIHRlc3RzIHJlcHJlc2VudGVkIGJ5IHRoZSB0aGlzIHRlc3Qgb2JqZWN0LgogICAgICMgLi4udGhpcyBtZXRob2QgaXMgYWxzbyBpbXBsZW1lbnRlZCBieSB0aGUgVGVzdFN1aXRlIGNsYXNzLCB3aGljaCBjYW4KQEAgLTE2MCw2ICsxODIsMTAgQEAKICAgICAgICAgcGFyZW50ID0gdW5pdHRlc3QuVGVzdFN1aXRlKCh0ZXN0MywgY2hpbGQsIFRlc3QxKCd0ZXN0MScpKSkKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcmVudC5jb3VudFRlc3RDYXNlcygpLCA0KQorICAgICAgICAjIGNvdW50VGVzdENhc2VzKCkgc3RpbGwgd29ya3MgYWZ0ZXIgdGVzdHMgYXJlIHJ1bgorICAgICAgICBwYXJlbnQucnVuKHVuaXR0ZXN0LlRlc3RSZXN1bHQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJlbnQuY291bnRUZXN0Q2FzZXMoKSwgNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjaGlsZC5jb3VudFRlc3RDYXNlcygpLCAyKQogCiAgICAgIyAiUnVuIHRoZSB0ZXN0cyBhc3NvY2lhdGVkIHdpdGggdGhpcyBzdWl0ZSwgY29sbGVjdGluZyB0aGUgcmVzdWx0IGludG8KICAgICAjIHRoZSB0ZXN0IHJlc3VsdCBvYmplY3QgcGFzc2VkIGFzIHJlc3VsdC4iCkBAIC0yMTgsNiArMjQ0LDkgQEAKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1aXRlLmNvdW50VGVzdENhc2VzKCksIDEpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChzdWl0ZSksIFt0ZXN0XSkKKyAgICAgICAgIyBjb3VudFRlc3RDYXNlcygpIHN0aWxsIHdvcmtzIGFmdGVyIHRlc3RzIGFyZSBydW4KKyAgICAgICAgc3VpdGUucnVuKHVuaXR0ZXN0LlRlc3RSZXN1bHQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWl0ZS5jb3VudFRlc3RDYXNlcygpLCAxKQogCiAgICAgIyAiQWRkIGEgLi4uIFRlc3RTdWl0ZSB0byB0aGUgc3VpdGUiCiAgICAgZGVmIHRlc3RfYWRkVGVzdF9fVGVzdFN1aXRlKHNlbGYpOgpAQCAtMjMxLDYgKzI2MCw5IEBACiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWl0ZS5jb3VudFRlc3RDYXNlcygpLCAxKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc3VpdGUpLCBbc3VpdGVfMl0pCisgICAgICAgICMgY291bnRUZXN0Q2FzZXMoKSBzdGlsbCB3b3JrcyBhZnRlciB0ZXN0cyBhcmUgcnVuCisgICAgICAgIHN1aXRlLnJ1bih1bml0dGVzdC5UZXN0UmVzdWx0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VpdGUuY291bnRUZXN0Q2FzZXMoKSwgMSkKIAogICAgICMgIkFkZCBhbGwgdGhlIHRlc3RzIGZyb20gYW4gaXRlcmFibGUgb2YgVGVzdENhc2UgYW5kIFRlc3RTdWl0ZQogICAgICMgaW5zdGFuY2VzIHRvIHRoaXMgdGVzdCBzdWl0ZS4iCkBAIC0zMDAsNyArMzMyLDU0IEBACiAgICAgICAgICMgd2hlbiB0aGUgYnVnIGlzIGZpeGVkIHRoaXMgbGluZSB3aWxsIG5vdCBjcmFzaAogICAgICAgICBzdWl0ZS5ydW4odW5pdHRlc3QuVGVzdFJlc3VsdCgpKQogCisgICAgZGVmIHRlc3RfcmVtb3ZlX3Rlc3RfYXRfaW5kZXgoc2VsZik6CisgICAgICAgIGlmIG5vdCB1bml0dGVzdC5CYXNlVGVzdFN1aXRlLl9jbGVhbnVwOgorICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIlN1aXRlIGNsZWFudXAgaXMgZGlzYWJsZWQiKQogCisgICAgICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKKworICAgICAgICBzdWl0ZS5fdGVzdHMgPSBbMSwgMiwgM10KKyAgICAgICAgc3VpdGUuX3JlbW92ZVRlc3RBdEluZGV4KDEpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbMSwgTm9uZSwgM10sIHN1aXRlLl90ZXN0cykKKworICAgIGRlZiB0ZXN0X3JlbW92ZV90ZXN0X2F0X2luZGV4X25vdF9pbmRleGFibGUoc2VsZik6CisgICAgICAgIGlmIG5vdCB1bml0dGVzdC5CYXNlVGVzdFN1aXRlLl9jbGVhbnVwOgorICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIlN1aXRlIGNsZWFudXAgaXMgZGlzYWJsZWQiKQorCisgICAgICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKKyAgICAgICAgc3VpdGUuX3Rlc3RzID0gTm9uZQorCisgICAgICAgICMgaWYgX3JlbW92ZUF0SW5kZXggcmFpc2VzIGZvciBub25pdGVyYWJsZXMgdGhpcyBuZXh0IGxpbmUgd2lsbCBicmVhaworICAgICAgICBzdWl0ZS5fcmVtb3ZlVGVzdEF0SW5kZXgoMikKKworICAgIGRlZiBhc3NlcnRfZ2FyYmFnZV9jb2xsZWN0X3Rlc3RfYWZ0ZXJfcnVuKHNlbGYsIFRlc3RTdWl0ZUNsYXNzKToKKyAgICAgICAgaWYgbm90IHVuaXR0ZXN0LkJhc2VUZXN0U3VpdGUuX2NsZWFudXA6CisgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiU3VpdGUgY2xlYW51cCBpcyBkaXNhYmxlZCIpCisKKyAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0X25vdGhpbmcoc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIHRlc3QgPSBGb28oJ3Rlc3Rfbm90aGluZycpCisgICAgICAgIHdyZWYgPSB3ZWFrcmVmLnJlZih0ZXN0KQorCisgICAgICAgIHN1aXRlID0gVGVzdFN1aXRlQ2xhc3MoW3dyZWYoKV0pCisgICAgICAgIHN1aXRlLnJ1bih1bml0dGVzdC5UZXN0UmVzdWx0KCkpCisKKyAgICAgICAgZGVsIHRlc3QKKworICAgICAgICAjIGZvciB0aGUgYmVuZWZpdCBvZiBub24tcmVmZXJlbmNlIGNvdW50aW5nIGltcGxlbWVudGF0aW9ucworICAgICAgICBnYy5jb2xsZWN0KCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1aXRlLl90ZXN0cywgW05vbmVdKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh3cmVmKCkpCisKKyAgICBkZWYgdGVzdF9nYXJiYWdlX2NvbGxlY3RfdGVzdF9hZnRlcl9ydW5fQmFzZVRlc3RTdWl0ZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRfZ2FyYmFnZV9jb2xsZWN0X3Rlc3RfYWZ0ZXJfcnVuKHVuaXR0ZXN0LkJhc2VUZXN0U3VpdGUpCisKKyAgICBkZWYgdGVzdF9nYXJiYWdlX2NvbGxlY3RfdGVzdF9hZnRlcl9ydW5fVGVzdFN1aXRlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydF9nYXJiYWdlX2NvbGxlY3RfdGVzdF9hZnRlcl9ydW4odW5pdHRlc3QuVGVzdFN1aXRlKQogCiAgICAgZGVmIHRlc3RfYmFzZXRlc3RzdWl0ZShzZWxmKToKICAgICAgICAgY2xhc3MgVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC0zNDMsNiArNDIyLDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0LmVycm9ycyksIDEpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdC5mYWlsdXJlcyksIDApCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnRlc3RzUnVuLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1aXRlLmNvdW50VGVzdENhc2VzKCksIDIpCiAKIAogICAgIGRlZiB0ZXN0X292ZXJyaWRpbmdfY2FsbChzZWxmKToKQEAgLTM2Myw2ICs0NDMsNSBAQAogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHJlc3VsdC5fdGVzdFJ1bkVudGVyZWQpCiAKIAotCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdG1vY2svX19tYWluX18ucHkgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0bW9jay9fX21haW5fXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NWM2MzNhCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdG1vY2svX19tYWluX18ucHkKQEAgLTAsMCArMSwxOCBAQAoraW1wb3J0IG9zCitpbXBvcnQgdW5pdHRlc3QKKworCitkZWYgbG9hZF90ZXN0cyhsb2FkZXIsIHN0YW5kYXJkX3Rlc3RzLCBwYXR0ZXJuKToKKyAgICAjIHRvcCBsZXZlbCBkaXJlY3RvcnkgY2FjaGVkIG9uIGxvYWRlciBpbnN0YW5jZQorICAgIHRoaXNfZGlyID0gb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKQorICAgIHBhdHRlcm4gPSBwYXR0ZXJuIG9yICJ0ZXN0Ki5weSIKKyAgICAjIFdlIGFyZSBpbnNpZGUgdW5pdHRlc3QudGVzdC50ZXN0bW9jaywgc28gdGhlIHRvcC1sZXZlbCBpcyB0aHJlZSBub3RjaGVzIHVwCisgICAgdG9wX2xldmVsX2RpciA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKHRoaXNfZGlyKSkpCisgICAgcGFja2FnZV90ZXN0cyA9IGxvYWRlci5kaXNjb3ZlcihzdGFydF9kaXI9dGhpc19kaXIsIHBhdHRlcm49cGF0dGVybiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcF9sZXZlbF9kaXI9dG9wX2xldmVsX2RpcikKKyAgICBzdGFuZGFyZF90ZXN0cy5hZGRUZXN0cyhwYWNrYWdlX3Rlc3RzKQorICAgIHJldHVybiBzdGFuZGFyZF90ZXN0cworCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0bW9jay90ZXN0Y2FsbGFibGUucHkgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0bW9jay90ZXN0Y2FsbGFibGUucHkKaW5kZXggN2IyZGQwMC4uNTM5MGE0ZSAxMDA2NDQKLS0tIGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdG1vY2svdGVzdGNhbGxhYmxlLnB5CisrKyBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rtb2NrL3Rlc3RjYWxsYWJsZS5weQpAQCAtMTQ1LDMgKzE0NSw3IEBACiAgICAgICAgIG1vY2sud2liYmxlLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKCkKIAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1vY2sud2liYmxlLCAnc29tZScsICAnYXJncycpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rtb2NrL3Rlc3RoZWxwZXJzLnB5IGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdG1vY2svdGVzdGhlbHBlcnMucHkKaW5kZXggYTM2MmEyZi4uMWRiYzBiNiAxMDA2NDQKLS0tIGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdG1vY2svdGVzdGhlbHBlcnMucHkKKysrIGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdG1vY2svdGVzdGhlbHBlcnMucHkKQEAgLTMzNyw5ICszMzcsMTAgQEAKIAogCiAgICAgZGVmIHRlc3RfYmFzaWMoc2VsZik6Ci0gICAgICAgIGZvciBzcGVjIGluIChTb21lQ2xhc3MsIFNvbWVDbGFzcygpKToKLSAgICAgICAgICAgIG1vY2sgPSBjcmVhdGVfYXV0b3NwZWMoc3BlYykKLSAgICAgICAgICAgIHNlbGYuX2NoZWNrX3NvbWVjbGFzc19tb2NrKG1vY2spCisgICAgICAgIG1vY2sgPSBjcmVhdGVfYXV0b3NwZWMoU29tZUNsYXNzKQorICAgICAgICBzZWxmLl9jaGVja19zb21lY2xhc3NfbW9jayhtb2NrKQorICAgICAgICBtb2NrID0gY3JlYXRlX2F1dG9zcGVjKFNvbWVDbGFzcygpKQorICAgICAgICBzZWxmLl9jaGVja19zb21lY2xhc3NfbW9jayhtb2NrKQogCiAKICAgICBkZWYgdGVzdF9jcmVhdGVfYXV0b3NwZWNfcmV0dXJuX3ZhbHVlKHNlbGYpOgpAQCAtNTc2LDEwICs1NzcsMTAgQEAKIAogICAgIGRlZiB0ZXN0X3NwZWNfaW5oZXJpdGFuY2VfZm9yX2NsYXNzZXMoc2VsZik6CiAgICAgICAgIGNsYXNzIEZvbyhvYmplY3QpOgotICAgICAgICAgICAgZGVmIGEoc2VsZik6CisgICAgICAgICAgICBkZWYgYShzZWxmLCB4KToKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICBjbGFzcyBCYXIob2JqZWN0KToKLSAgICAgICAgICAgICAgICBkZWYgZihzZWxmKToKKyAgICAgICAgICAgICAgICBkZWYgZihzZWxmLCB5KToKICAgICAgICAgICAgICAgICAgICAgcGFzcwogCiAgICAgICAgIGNsYXNzX21vY2sgPSBjcmVhdGVfYXV0b3NwZWMoRm9vKQpAQCAtNTg3LDI2ICs1ODgsMzAgQEAKICAgICAgICAgc2VsZi5hc3NlcnRJc05vdChjbGFzc19tb2NrLCBjbGFzc19tb2NrKCkpCiAKICAgICAgICAgZm9yIHRoaXNfbW9jayBpbiBjbGFzc19tb2NrLCBjbGFzc19tb2NrKCk6Ci0gICAgICAgICAgICB0aGlzX21vY2suYSgpCi0gICAgICAgICAgICB0aGlzX21vY2suYS5hc3NlcnRfY2FsbGVkX3dpdGgoKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0aGlzX21vY2suYSwgJ2ZvbycpCisgICAgICAgICAgICB0aGlzX21vY2suYSh4PTUpCisgICAgICAgICAgICB0aGlzX21vY2suYS5hc3NlcnRfY2FsbGVkX3dpdGgoeD01KQorICAgICAgICAgICAgdGhpc19tb2NrLmEuYXNzZXJ0X2NhbGxlZF93aXRoKDUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHRoaXNfbW9jay5hLCAnZm9vJywgJ2JhcicpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvciwgZ2V0YXR0ciwgdGhpc19tb2NrLCAnYicpCiAKICAgICAgICAgaW5zdGFuY2VfbW9jayA9IGNyZWF0ZV9hdXRvc3BlYyhGb28oKSkKLSAgICAgICAgaW5zdGFuY2VfbW9jay5hKCkKLSAgICAgICAgaW5zdGFuY2VfbW9jay5hLmFzc2VydF9jYWxsZWRfd2l0aCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaW5zdGFuY2VfbW9jay5hLCAnZm9vJykKKyAgICAgICAgaW5zdGFuY2VfbW9jay5hKDUpCisgICAgICAgIGluc3RhbmNlX21vY2suYS5hc3NlcnRfY2FsbGVkX3dpdGgoNSkKKyAgICAgICAgaW5zdGFuY2VfbW9jay5hLmFzc2VydF9jYWxsZWRfd2l0aCh4PTUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaW5zdGFuY2VfbW9jay5hLCAnZm9vJywgJ2JhcicpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yLCBnZXRhdHRyLCBpbnN0YW5jZV9tb2NrLCAnYicpCiAKICAgICAgICAgIyBUaGUgcmV0dXJuIHZhbHVlIGlzbid0IGlzbid0IGNhbGxhYmxlCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaW5zdGFuY2VfbW9jaykKIAotICAgICAgICBpbnN0YW5jZV9tb2NrLkJhci5mKCkKLSAgICAgICAgaW5zdGFuY2VfbW9jay5CYXIuZi5hc3NlcnRfY2FsbGVkX3dpdGgoKQorICAgICAgICBpbnN0YW5jZV9tb2NrLkJhci5mKDYpCisgICAgICAgIGluc3RhbmNlX21vY2suQmFyLmYuYXNzZXJ0X2NhbGxlZF93aXRoKDYpCisgICAgICAgIGluc3RhbmNlX21vY2suQmFyLmYuYXNzZXJ0X2NhbGxlZF93aXRoKHk9NikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IsIGdldGF0dHIsIGluc3RhbmNlX21vY2suQmFyLCAnZycpCiAKLSAgICAgICAgaW5zdGFuY2VfbW9jay5CYXIoKS5mKCkKLSAgICAgICAgaW5zdGFuY2VfbW9jay5CYXIoKS5mLmFzc2VydF9jYWxsZWRfd2l0aCgpCisgICAgICAgIGluc3RhbmNlX21vY2suQmFyKCkuZig2KQorICAgICAgICBpbnN0YW5jZV9tb2NrLkJhcigpLmYuYXNzZXJ0X2NhbGxlZF93aXRoKDYpCisgICAgICAgIGluc3RhbmNlX21vY2suQmFyKCkuZi5hc3NlcnRfY2FsbGVkX3dpdGgoeT02KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvciwgZ2V0YXR0ciwgaW5zdGFuY2VfbW9jay5CYXIoKSwgJ2cnKQogCiAKQEAgLTY2MywxMiArNjY4LDE1IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbW9jaykKICAgICAgICAgbW9jaygxLCAyKQogICAgICAgICBtb2NrLmFzc2VydF9jYWxsZWRfd2l0aCgxLCAyKQorICAgICAgICBtb2NrLmFzc2VydF9jYWxsZWRfd2l0aCgxLCBiPTIpCisgICAgICAgIG1vY2suYXNzZXJ0X2NhbGxlZF93aXRoKGE9MSwgYj0yKQogCiAgICAgICAgIGYuZiA9IGYKICAgICAgICAgbW9jayA9IGNyZWF0ZV9hdXRvc3BlYyhmKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1vY2suZikKICAgICAgICAgbW9jay5mKDMsIDQpCiAgICAgICAgIG1vY2suZi5hc3NlcnRfY2FsbGVkX3dpdGgoMywgNCkKKyAgICAgICAgbW9jay5mLmFzc2VydF9jYWxsZWRfd2l0aChhPTMsIGI9NCkKIAogCiAgICAgZGVmIHRlc3Rfc2tpcF9hdHRyaWJ1dGVlcnJvcnMoc2VsZik6CkBAIC03MDQsOSArNzEyLDEzIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbW9jaykKICAgICAgICAgbW9jaygxKQogICAgICAgICBtb2NrLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKDEpCisgICAgICAgIG1vY2suYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoYT0xKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvciwgbW9jay5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCwgMikKIAogICAgICAgICBtb2NrKDQsIDUpCiAgICAgICAgIG1vY2suYXNzZXJ0X2NhbGxlZF93aXRoKDQsIDUpCisgICAgICAgIG1vY2suYXNzZXJ0X2NhbGxlZF93aXRoKGE9NCwgYj01KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvciwgbW9jay5hc3NlcnRfY2FsbGVkX3dpdGgsIGE9NSwgYj00KQogCiAKICAgICBkZWYgdGVzdF9jbGFzc193aXRoX25vX2luaXQoc2VsZik6CkBAIC03MTksMjQgKzczMSwyNyBAQAogCiAgICAgZGVmIHRlc3Rfc2lnbmF0dXJlX2NhbGxhYmxlKHNlbGYpOgogICAgICAgICBjbGFzcyBDYWxsYWJsZShvYmplY3QpOgotICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHgsIHkpOgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBhKToKICAgICAgICAgICAgICAgICBwYXNzCiAKICAgICAgICAgbW9jayA9IGNyZWF0ZV9hdXRvc3BlYyhDYWxsYWJsZSkKLSAgICAgICAgbW9jaygpCi0gICAgICAgIG1vY2suYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoKQorICAgICAgICBtb2NrKDEsIDIpCisgICAgICAgIG1vY2suYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoMSwgMikKKyAgICAgICAgbW9jay5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCh4PTEsIHk9MikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtb2NrLCAnYScpCiAKLSAgICAgICAgaW5zdGFuY2UgPSBtb2NrKCkKKyAgICAgICAgaW5zdGFuY2UgPSBtb2NrKDEsIDIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaW5zdGFuY2UpCiAgICAgICAgIGluc3RhbmNlKGE9J2EnKQorICAgICAgICBpbnN0YW5jZS5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgnYScpCiAgICAgICAgIGluc3RhbmNlLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKGE9J2EnKQogICAgICAgICBpbnN0YW5jZSgnYScpCiAgICAgICAgIGluc3RhbmNlLmFzc2VydF9jYWxsZWRfd2l0aCgnYScpCisgICAgICAgIGluc3RhbmNlLmFzc2VydF9jYWxsZWRfd2l0aChhPSdhJykKIAotICAgICAgICBtb2NrID0gY3JlYXRlX2F1dG9zcGVjKENhbGxhYmxlKCkpCisgICAgICAgIG1vY2sgPSBjcmVhdGVfYXV0b3NwZWMoQ2FsbGFibGUoMSwgMikpCiAgICAgICAgIG1vY2soYT0nYScpCiAgICAgICAgIG1vY2suYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoYT0nYScpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbW9jaykKQEAgLTc3OSw3ICs3OTQsMTEgQEAKICAgICAgICAgICAgICAgICBwYXNzCiAKICAgICAgICAgYSA9IGNyZWF0ZV9hdXRvc3BlYyhGb28pCisgICAgICAgIGEuZigxMCkKKyAgICAgICAgYS5mLmFzc2VydF9jYWxsZWRfd2l0aCgxMCkKKyAgICAgICAgYS5mLmFzc2VydF9jYWxsZWRfd2l0aChzZWxmPTEwKQogICAgICAgICBhLmYoc2VsZj0xMCkKKyAgICAgICAgYS5mLmFzc2VydF9jYWxsZWRfd2l0aCgxMCkKICAgICAgICAgYS5mLmFzc2VydF9jYWxsZWRfd2l0aChzZWxmPTEwKQogCiAKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rtb2NrL3Rlc3RtYWdpY21ldGhvZHMucHkgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0bW9jay90ZXN0bWFnaWNtZXRob2RzLnB5CmluZGV4IDVmZjE1OGQuLmUwNWM2ZTAgMTAwNjQ0Ci0tLSBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rtb2NrL3Rlc3RtYWdpY21ldGhvZHMucHkKKysrIGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdG1vY2svdGVzdG1hZ2ljbWV0aG9kcy5weQpAQCAtMTI2LDYgKzEyNiwzMSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDcgKyBtb2NrLCBtb2NrKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vY2sudmFsdWUsIDE2KQogCisgICAgZGVmIHRlc3RfZGl2aXNpb24oc2VsZik6CisgICAgICAgIG9yaWdpbmFsID0gbW9jayA9IE1vY2soKQorICAgICAgICBtb2NrLnZhbHVlID0gMzIKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IG1vY2sgLyAyKQorCisgICAgICAgIGRlZiB0cnVlZGl2KHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgIG1vY2sudmFsdWUgLz0gb3RoZXIKKyAgICAgICAgICAgIHJldHVybiBzZWxmCisgICAgICAgIG1vY2suX190cnVlZGl2X18gPSB0cnVlZGl2CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9jayAvIDIsIG1vY2spCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9jay52YWx1ZSwgMTYpCisKKyAgICAgICAgZGVsIG1vY2suX190cnVlZGl2X18KKyAgICAgICAgZGVmIGl0cnVlZGl2KG1vY2spOgorICAgICAgICAgICAgbW9jayAvPSA0CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaXRydWVkaXYsIG1vY2spCisgICAgICAgIG1vY2suX19pdHJ1ZWRpdl9fID0gdHJ1ZWRpdgorICAgICAgICBtb2NrIC89IDgKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2NrLCBvcmlnaW5hbCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2NrLnZhbHVlLCAyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiA4IC8gbW9jaykKKyAgICAgICAgbW9jay5fX3J0cnVlZGl2X18gPSB0cnVlZGl2CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMC41IC8gbW9jaywgbW9jaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2NrLnZhbHVlLCA0KQogCiAgICAgZGVmIHRlc3RfaGFzaChzZWxmKToKICAgICAgICAgbW9jayA9IE1vY2soKQpAQCAtMzk5LDUgKzQyNCwzNSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QobSksIFtdKQogCiAKKyAgICBkZWYgdGVzdF9kaXZtb2RfYW5kX3JkaXZtb2Qoc2VsZik6CisgICAgICAgIG0gPSBNYWdpY01vY2soKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZGl2bW9kKDUsIG0pLCBNYWdpY01vY2spCisgICAgICAgIG0uX19kaXZtb2RfXy5yZXR1cm5fdmFsdWUgPSAoMiwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXZtb2QobSwgMiksICgyLCAxKSkKKyAgICAgICAgbSA9IE1hZ2ljTW9jaygpCisgICAgICAgIGZvbyA9IGRpdm1vZCgyLCBtKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZm9vLCBNYWdpY01vY2spCisgICAgICAgIGZvb19kaXJlY3QgPSBtLl9fZGl2bW9kX18oMikKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGZvb19kaXJlY3QsIE1hZ2ljTW9jaykKKyAgICAgICAgYmFyID0gZGl2bW9kKG0sIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShiYXIsIE1hZ2ljTW9jaykKKyAgICAgICAgYmFyX2RpcmVjdCA9IG0uX19yZGl2bW9kX18oMikKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGJhcl9kaXJlY3QsIE1hZ2ljTW9jaykKKworICAgICMgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTIzMzEwCisgICAgIyBDaGVjayBpZiB5b3UgY2FuIGNoYW5nZSBiZWhhdmlvdXIgb2YgbWFnaWMgbWV0aGRzIGluIE1hZ2ljTW9jayBpbml0CisgICAgZGVmIHRlc3RfbWFnaWNfaW5faW5pdGlhbGl6YXRpb24oc2VsZik6CisgICAgICAgIG0gPSBNYWdpY01vY2soKip7J19fc3RyX18ucmV0dXJuX3ZhbHVlJzogIjEyIn0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKG0pLCAiMTIiKQorCisgICAgZGVmIHRlc3RfY2hhbmdpbmdfbWFnaWNfc2V0X2luX2luaXRpYWxpemF0aW9uKHNlbGYpOgorICAgICAgICBtID0gTWFnaWNNb2NrKCoqeydfX3N0cl9fLnJldHVybl92YWx1ZSc6ICIxMiJ9KQorICAgICAgICBtLl9fc3RyX18ucmV0dXJuX3ZhbHVlID0gIjEzIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihtKSwgIjEzIikKKyAgICAgICAgbSA9IE1hZ2ljTW9jaygqKnsnX19zdHJfXy5yZXR1cm5fdmFsdWUnOiAiMTIifSkKKyAgICAgICAgbS5jb25maWd1cmVfbW9jaygqKnsnX19zdHJfXy5yZXR1cm5fdmFsdWUnOiAiMTQifSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIobSksICIxNCIpCisKKwogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rtb2NrL3Rlc3Rtb2NrLnB5IGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdG1vY2svdGVzdG1vY2sucHkKaW5kZXggY2VmNTQwNS4uY2YxNjczYyAxMDA2NDQKLS0tIGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdG1vY2svdGVzdG1vY2sucHkKKysrIGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdG1vY2svdGVzdG1vY2sucHkKQEAgLTEsNSArMSw2IEBACiBpbXBvcnQgY29weQogaW1wb3J0IHN5cworaW1wb3J0IHRlbXBmaWxlCiAKIGltcG9ydCB1bml0dGVzdAogZnJvbSB1bml0dGVzdC50ZXN0LnRlc3Rtb2NrLnN1cHBvcnQgaW1wb3J0IGlzX2luc3RhbmNlCkBAIC0yNSw2ICsyNiwxOCBAQAogICAgIF9fbmV4dF9fID0gbmV4dAogCiAKK2NsYXNzIFNvbWV0aGluZyhvYmplY3QpOgorICAgIGRlZiBtZXRoKHNlbGYsIGEsIGIsIGMsIGQ9Tm9uZSk6CisgICAgICAgIHBhc3MKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBjbWV0aChjbHMsIGEsIGIsIGMsIGQ9Tm9uZSk6CisgICAgICAgIHBhc3MKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgc21ldGgoYSwgYiwgYywgZD1Ob25lKToKKyAgICAgICAgcGFzcworCiAKIGNsYXNzIE1vY2tUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIApAQCAtMTQyLDYgKzE1NSwyNCBAQAogICAgICAgICBtb2NrID0gTW9jayhzaWRlX2VmZmVjdD1zaWRlX2VmZmVjdCwgcmV0dXJuX3ZhbHVlPXNlbnRpbmVsLlJFVFVSTikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2NrKCksIHNlbnRpbmVsLlJFVFVSTikKIAorICAgIGRlZiB0ZXN0X2F1dG9zcGVjX3NpZGVfZWZmZWN0KHNlbGYpOgorICAgICAgICAjIFRlc3QgZm9yIGlzc3VlMTc4MjYKKyAgICAgICAgcmVzdWx0cyA9IFsxLCAyLCAzXQorICAgICAgICBkZWYgZWZmZWN0KCk6CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0cy5wb3AoKQorICAgICAgICBkZWYgZigpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIG1vY2sgPSBjcmVhdGVfYXV0b3NwZWMoZikKKyAgICAgICAgbW9jay5zaWRlX2VmZmVjdCA9IFsxLCAyLCAzXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFttb2NrKCksIG1vY2soKSwgbW9jaygpXSwgWzEsIDIsIDNdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAic2lkZSBlZmZlY3Qgbm90IHVzZWQgY29ycmVjdGx5IGluIGNyZWF0ZV9hdXRvc3BlYyIpCisgICAgICAgICMgVGVzdCB3aGVyZSBzaWRlIGVmZmVjdCBpcyBhIGNhbGxhYmxlCisgICAgICAgIHJlc3VsdHMgPSBbMSwgMiwgM10KKyAgICAgICAgbW9jayA9IGNyZWF0ZV9hdXRvc3BlYyhmKQorICAgICAgICBtb2NrLnNpZGVfZWZmZWN0ID0gZWZmZWN0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW21vY2soKSwgbW9jaygpLCBtb2NrKCldLCBbMywgMiwgMV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICJjYWxsYWJsZSBzaWRlIGVmZmVjdCBub3QgdXNlZCBjb3JyZWN0bHkiKQogCiAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoJ2phdmEnIGluIHN5cy5wbGF0Zm9ybSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1RoaXMgdGVzdCBvbmx5IGFwcGxpZXMgdG8gSnl0aG9uJykKQEAgLTIwNyw2ICsyMzgsOSBAQAogICAgICAgICAjIHVzZWQgdG8gY2F1c2UgcmVjdXJzaW9uCiAgICAgICAgIG1vY2sucmVzZXRfbW9jaygpCiAKKyAgICBkZWYgdGVzdF9yZXNldF9tb2NrX29uX21vY2tfb3Blbl9pc3N1ZV8xODYyMihzZWxmKToKKyAgICAgICAgYSA9IG1vY2subW9ja19vcGVuKCkKKyAgICAgICAgYS5yZXNldF9tb2NrKCkKIAogICAgIGRlZiB0ZXN0X2NhbGwoc2VsZik6CiAgICAgICAgIG1vY2sgPSBNb2NrKCkKQEAgLTI1Nyw2ICsyOTEsOSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vY2suY2FsbF9hcmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICgoc2VudGluZWwuQXJnLCksIHsia3ciOiBzZW50aW5lbC5Ld2FyZ30pKQogCisgICAgICAgICMgQ29tcGFyaW5nIGNhbGxfYXJncyB0byBhIGxvbmcgc2VxdWVuY2Ugc2hvdWxkIG5vdCByYWlzZQorICAgICAgICAjIGFuIGV4Y2VwdGlvbi4gU2VlIGlzc3VlIDI0ODU3LgorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG1vY2suY2FsbF9hcmdzID09ICJhIGxvbmcgc2VxdWVuY2UiKQogCiAgICAgZGVmIHRlc3RfYXNzZXJ0X2NhbGxlZF93aXRoKHNlbGYpOgogICAgICAgICBtb2NrID0gTW9jaygpCkBAIC0yNzMsNiArMzEwLDQzIEBACiAgICAgICAgIG1vY2suYXNzZXJ0X2NhbGxlZF93aXRoKDEsIDIsIDMsIGE9J2Zpc2gnLCBiPSdub3RoaW5nJykKIAogCisgICAgZGVmIHRlc3RfYXNzZXJ0X2NhbGxlZF93aXRoX2Z1bmN0aW9uX3NwZWMoc2VsZik6CisgICAgICAgIGRlZiBmKGEsIGIsIGMsIGQ9Tm9uZSk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgbW9jayA9IE1vY2soc3BlYz1mKQorCisgICAgICAgIG1vY2soMSwgYj0yLCBjPTMpCisgICAgICAgIG1vY2suYXNzZXJ0X2NhbGxlZF93aXRoKDEsIDIsIDMpCisgICAgICAgIG1vY2suYXNzZXJ0X2NhbGxlZF93aXRoKGE9MSwgYj0yLCBjPTMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yLCBtb2NrLmFzc2VydF9jYWxsZWRfd2l0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgYj0zLCBjPTIpCisgICAgICAgICMgRXhwZWN0ZWQgY2FsbCBkb2Vzbid0IG1hdGNoIHRoZSBzcGVjJ3Mgc2lnbmF0dXJlCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgbW9jay5hc3NlcnRfY2FsbGVkX3dpdGgoZT04KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoY20uZXhjZXB0aW9uLl9fY2F1c2VfXywgVHlwZUVycm9yKQorCisKKyAgICBkZWYgdGVzdF9hc3NlcnRfY2FsbGVkX3dpdGhfbWV0aG9kX3NwZWMoc2VsZik6CisgICAgICAgIGRlZiBfY2hlY2sobW9jayk6CisgICAgICAgICAgICBtb2NrKDEsIGI9MiwgYz0zKQorICAgICAgICAgICAgbW9jay5hc3NlcnRfY2FsbGVkX3dpdGgoMSwgMiwgMykKKyAgICAgICAgICAgIG1vY2suYXNzZXJ0X2NhbGxlZF93aXRoKGE9MSwgYj0yLCBjPTMpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvciwgbW9jay5hc3NlcnRfY2FsbGVkX3dpdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCBiPTMsIGM9MikKKworICAgICAgICBtb2NrID0gTW9jayhzcGVjPVNvbWV0aGluZygpLm1ldGgpCisgICAgICAgIF9jaGVjayhtb2NrKQorICAgICAgICBtb2NrID0gTW9jayhzcGVjPVNvbWV0aGluZy5jbWV0aCkKKyAgICAgICAgX2NoZWNrKG1vY2spCisgICAgICAgIG1vY2sgPSBNb2NrKHNwZWM9U29tZXRoaW5nKCkuY21ldGgpCisgICAgICAgIF9jaGVjayhtb2NrKQorICAgICAgICBtb2NrID0gTW9jayhzcGVjPVNvbWV0aGluZy5zbWV0aCkKKyAgICAgICAgX2NoZWNrKG1vY2spCisgICAgICAgIG1vY2sgPSBNb2NrKHNwZWM9U29tZXRoaW5nKCkuc21ldGgpCisgICAgICAgIF9jaGVjayhtb2NrKQorCisKICAgICBkZWYgdGVzdF9hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aChzZWxmKToKICAgICAgICAgbW9jayA9IE1vY2soKQogICAgICAgICBtb2NrKCkKQEAgLTI5Nyw2ICszNzEsMjkgQEAKICAgICAgICAgKQogCiAKKyAgICBkZWYgdGVzdF9hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aF9mdW5jdGlvbl9zcGVjKHNlbGYpOgorICAgICAgICBkZWYgZihhLCBiLCBjLCBkPU5vbmUpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIG1vY2sgPSBNb2NrKHNwZWM9ZikKKworICAgICAgICBtb2NrKDEsIGI9MiwgYz0zKQorICAgICAgICBtb2NrLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKDEsIDIsIDMpCisgICAgICAgIG1vY2suYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoYT0xLCBiPTIsIGM9MykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsIG1vY2suYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIGI9MywgYz0yKQorICAgICAgICAjIEV4cGVjdGVkIGNhbGwgZG9lc24ndCBtYXRjaCB0aGUgc3BlYydzIHNpZ25hdHVyZQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yKSBhcyBjbToKKyAgICAgICAgICAgIG1vY2suYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoZT04KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoY20uZXhjZXB0aW9uLl9fY2F1c2VfXywgVHlwZUVycm9yKQorICAgICAgICAjIE1vY2sgY2FsbGVkIG1vcmUgdGhhbiBvbmNlID0+IGFsd2F5cyBmYWlscworICAgICAgICBtb2NrKDQsIDUsIDYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yLCBtb2NrLmFzc2VydF9jYWxsZWRfb25jZV93aXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAxLCAyLCAzKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvciwgbW9jay5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgNCwgNSwgNikKKworCiAgICAgZGVmIHRlc3RfYXR0cmlidXRlX2FjY2Vzc19yZXR1cm5zX21vY2tzKHNlbGYpOgogICAgICAgICBtb2NrID0gTW9jaygpCiAgICAgICAgIHNvbWV0aGluZyA9IG1vY2suc29tZXRoaW5nCkBAIC05OTUsNiArMTA5MiwzOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgKQogCiAKKyAgICBkZWYgdGVzdF9hc3NlcnRfaGFzX2NhbGxzX3dpdGhfZnVuY3Rpb25fc3BlYyhzZWxmKToKKyAgICAgICAgZGVmIGYoYSwgYiwgYywgZD1Ob25lKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBtb2NrID0gTW9jayhzcGVjPWYpCisKKyAgICAgICAgbW9jaygxLCBiPTIsIGM9MykKKyAgICAgICAgbW9jayg0LCA1LCBjPTYsIGQ9NykKKyAgICAgICAgbW9jaygxMCwgMTEsIGM9MTIpCisgICAgICAgIGNhbGxzID0gWworICAgICAgICAgICAgKCcnLCAoMSwgMiwgMyksIHt9KSwKKyAgICAgICAgICAgICgnJywgKDQsIDUsIDYpLCB7J2QnOiA3fSksCisgICAgICAgICAgICAoKDEwLCAxMSwgMTIpLCB7fSksCisgICAgICAgICAgICBdCisgICAgICAgIG1vY2suYXNzZXJ0X2hhc19jYWxscyhjYWxscykKKyAgICAgICAgbW9jay5hc3NlcnRfaGFzX2NhbGxzKGNhbGxzLCBhbnlfb3JkZXI9VHJ1ZSkKKyAgICAgICAgbW9jay5hc3NlcnRfaGFzX2NhbGxzKGNhbGxzWzE6XSkKKyAgICAgICAgbW9jay5hc3NlcnRfaGFzX2NhbGxzKGNhbGxzWzE6XSwgYW55X29yZGVyPVRydWUpCisgICAgICAgIG1vY2suYXNzZXJ0X2hhc19jYWxscyhjYWxsc1s6LTFdKQorICAgICAgICBtb2NrLmFzc2VydF9oYXNfY2FsbHMoY2FsbHNbOi0xXSwgYW55X29yZGVyPVRydWUpCisgICAgICAgICMgUmV2ZXJzZWQgb3JkZXIKKyAgICAgICAgY2FsbHMgPSBsaXN0KHJldmVyc2VkKGNhbGxzKSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvcik6CisgICAgICAgICAgICBtb2NrLmFzc2VydF9oYXNfY2FsbHMoY2FsbHMpCisgICAgICAgIG1vY2suYXNzZXJ0X2hhc19jYWxscyhjYWxscywgYW55X29yZGVyPVRydWUpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IpOgorICAgICAgICAgICAgbW9jay5hc3NlcnRfaGFzX2NhbGxzKGNhbGxzWzE6XSkKKyAgICAgICAgbW9jay5hc3NlcnRfaGFzX2NhbGxzKGNhbGxzWzE6XSwgYW55X29yZGVyPVRydWUpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IpOgorICAgICAgICAgICAgbW9jay5hc3NlcnRfaGFzX2NhbGxzKGNhbGxzWzotMV0pCisgICAgICAgIG1vY2suYXNzZXJ0X2hhc19jYWxscyhjYWxsc1s6LTFdLCBhbnlfb3JkZXI9VHJ1ZSkKKworCiAgICAgZGVmIHRlc3RfYXNzZXJ0X2FueV9jYWxsKHNlbGYpOgogICAgICAgICBtb2NrID0gTW9jaygpCiAgICAgICAgIG1vY2soMSwgMikKQEAgLTEwMjEsNiArMTE1MSwyNiBAQAogICAgICAgICApCiAKIAorICAgIGRlZiB0ZXN0X2Fzc2VydF9hbnlfY2FsbF93aXRoX2Z1bmN0aW9uX3NwZWMoc2VsZik6CisgICAgICAgIGRlZiBmKGEsIGIsIGMsIGQ9Tm9uZSk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgbW9jayA9IE1vY2soc3BlYz1mKQorCisgICAgICAgIG1vY2soMSwgYj0yLCBjPTMpCisgICAgICAgIG1vY2soNCwgNSwgYz02LCBkPTcpCisgICAgICAgIG1vY2suYXNzZXJ0X2FueV9jYWxsKDEsIDIsIDMpCisgICAgICAgIG1vY2suYXNzZXJ0X2FueV9jYWxsKGE9MSwgYj0yLCBjPTMpCisgICAgICAgIG1vY2suYXNzZXJ0X2FueV9jYWxsKDQsIDUsIDYsIDcpCisgICAgICAgIG1vY2suYXNzZXJ0X2FueV9jYWxsKGE9NCwgYj01LCBjPTYsIGQ9NykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsIG1vY2suYXNzZXJ0X2FueV9jYWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAxLCBiPTMsIGM9MikKKyAgICAgICAgIyBFeHBlY3RlZCBjYWxsIGRvZXNuJ3QgbWF0Y2ggdGhlIHNwZWMncyBzaWduYXR1cmUKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvcikgYXMgY206CisgICAgICAgICAgICBtb2NrLmFzc2VydF9hbnlfY2FsbChlPTgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShjbS5leGNlcHRpb24uX19jYXVzZV9fLCBUeXBlRXJyb3IpCisKKwogICAgIGRlZiB0ZXN0X21vY2tfY2FsbHNfY3JlYXRlX2F1dG9zcGVjKHNlbGYpOgogICAgICAgICBkZWYgZihhLCBiKToKICAgICAgICAgICAgIHBhc3MKQEAgLTEwMzksNiArMTE4OSwxMCBAQAogICAgICAgICAgICAgICAgIGZ1bmMubW9ja19jYWxscywgW2NhbGwoMSwgMiksIGNhbGwoMywgNCldCiAgICAgICAgICAgICApCiAKKyAgICAjSXNzdWUyMTIyMgorICAgIGRlZiB0ZXN0X2NyZWF0ZV9hdXRvc3BlY193aXRoX25hbWUoc2VsZik6CisgICAgICAgIG0gPSBtb2NrLmNyZWF0ZV9hdXRvc3BlYyhvYmplY3QoKSwgbmFtZT0nc3dlZXRfZnVuYycpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3N3ZWV0X2Z1bmMnLCByZXByKG0pKQogCiAgICAgZGVmIHRlc3RfbW9ja19hZGRfc3BlYyhzZWxmKToKICAgICAgICAgY2xhc3MgX09uZShvYmplY3QpOgpAQCAtMTE3NiwyMCArMTMzMCwzMiBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLm1vY2tfY2FsbHMsIFtjYWxsLl9faW50X18oKSwgY2FsbC5fX2Zsb2F0X18oKV0pCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0ubWV0aG9kX2NhbGxzLCBbXSkKIAorICAgIGRlZiB0ZXN0X21vY2tfb3Blbl9yZXVzZV9pc3N1ZV8yMTc1MChzZWxmKToKKyAgICAgICAgbW9ja2VkX29wZW4gPSBtb2NrLm1vY2tfb3BlbihyZWFkX2RhdGE9J2RhdGEnKQorICAgICAgICBmMSA9IG1vY2tlZF9vcGVuKCdhLW5hbWUnKQorICAgICAgICBmMV9kYXRhID0gZjEucmVhZCgpCisgICAgICAgIGYyID0gbW9ja2VkX29wZW4oJ2Fub3RoZXItbmFtZScpCisgICAgICAgIGYyX2RhdGEgPSBmMi5yZWFkKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmMV9kYXRhLCBmMl9kYXRhKQogCi0gICAgZGVmIHRlc3RfYXR0cmlidXRlX2RlbGV0aW9uKHNlbGYpOgotICAgICAgICAjIHRoaXMgYmVoYXZpb3VyIGlzbid0ICp1c2VmdWwqLCBidXQgYXQgbGVhc3QgaXQncyBub3cgdGVzdGVkLi4uCi0gICAgICAgIGZvciBLbGFzcyBpbiBNb2NrLCBNYWdpY01vY2ssIE5vbkNhbGxhYmxlTWFnaWNNb2NrLCBOb25DYWxsYWJsZU1vY2s6Ci0gICAgICAgICAgICBtID0gS2xhc3MoKQotICAgICAgICAgICAgb3JpZ2luYWwgPSBtLmZvbwotICAgICAgICAgICAgbS5mb28gPSAzCi0gICAgICAgICAgICBkZWwgbS5mb28KLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5mb28sIG9yaWdpbmFsKQorICAgIGRlZiB0ZXN0X21vY2tfb3Blbl93cml0ZShzZWxmKToKKyAgICAgICAgIyBUZXN0IGV4Y2VwdGlvbiBpbiBmaWxlIHdyaXRpbmcgd3JpdGUoKQorICAgICAgICBtb2NrX25hbWVkdGVtcCA9IG1vY2subW9ja19vcGVuKG1vY2suTWFnaWNNb2NrKG5hbWU9J0pMVicpKQorICAgICAgICB3aXRoIG1vY2sucGF0Y2goJ3RlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZScsIG1vY2tfbmFtZWR0ZW1wKToKKyAgICAgICAgICAgIG1vY2tfZmlsZWhhbmRsZSA9IG1vY2tfbmFtZWR0ZW1wLnJldHVybl92YWx1ZQorICAgICAgICAgICAgbW9ja193cml0ZSA9IG1vY2tfZmlsZWhhbmRsZS53cml0ZQorICAgICAgICAgICAgbW9ja193cml0ZS5zaWRlX2VmZmVjdCA9IE9TRXJyb3IoJ1Rlc3QgMiBFcnJvcicpCisgICAgICAgICAgICBkZWYgYXR0ZW1wdCgpOgorICAgICAgICAgICAgICAgIHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZSgpLndyaXRlKCdhc2QnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgYXR0ZW1wdCkKIAotICAgICAgICAgICAgbmV3ID0gbS5mb28gPSBNb2NrKCkKLSAgICAgICAgICAgIGRlbCBtLmZvbwotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmZvbywgbmV3KQotCisgICAgZGVmIHRlc3RfbW9ja19vcGVuX2FsdGVyX3JlYWRsaW5lKHNlbGYpOgorICAgICAgICBtb3BlbiA9IG1vY2subW9ja19vcGVuKHJlYWRfZGF0YT0nZm9vXG5iYXJuJykKKyAgICAgICAgbW9wZW4ucmV0dXJuX3ZhbHVlLnJlYWRsaW5lLnNpZGVfZWZmZWN0ID0gbGFtYmRhICphcmdzOidhYmMnCisgICAgICAgIGZpcnN0ID0gbW9wZW4oKS5yZWFkbGluZSgpCisgICAgICAgIHNlY29uZCA9IG1vcGVuKCkucmVhZGxpbmUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdhYmMnLCBmaXJzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnYWJjJywgc2Vjb25kKQogCiAgICAgZGVmIHRlc3RfbW9ja19wYXJlbnRzKHNlbGYpOgogICAgICAgICBmb3IgS2xhc3MgaW4gTW9jaywgTWFnaWNNb2NrOgpAQCAtMTI1NCw3ICsxNDIwLDggQEAKIAogCiAgICAgZGVmIHRlc3RfYXR0cmlidXRlX2RlbGV0aW9uKHNlbGYpOgotICAgICAgICBmb3IgbW9jayBpbiBNb2NrKCksIE1hZ2ljTW9jaygpOgorICAgICAgICBmb3IgbW9jayBpbiAoTW9jaygpLCBNYWdpY01vY2soKSwgTm9uQ2FsbGFibGVNYWdpY01vY2soKSwKKyAgICAgICAgICAgICAgICAgICAgIE5vbkNhbGxhYmxlTW9jaygpKToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKG1vY2ssICdtJykpCiAKICAgICAgICAgICAgIGRlbCBtb2NrLm0KQEAgLTEyNzQsNiArMTQ0MSw1IEBACiAgICAgICAgICAgICBtb2NrLmZvbwogCiAKLQogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rtb2NrL3Rlc3RwYXRjaC5weSBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rtb2NrL3Rlc3RwYXRjaC5weQppbmRleCBjMTA5MWI0Li5iNTE2ZjQyIDEwMDY0NAotLS0gYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0bW9jay90ZXN0cGF0Y2gucHkKKysrIGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdG1vY2svdGVzdHBhdGNoLnB5CkBAIC0xMiw3ICsxMiw3IEBACiBmcm9tIHVuaXR0ZXN0Lm1vY2sgaW1wb3J0ICgKICAgICBOb25DYWxsYWJsZU1vY2ssIENhbGxhYmxlTWl4aW4sIHBhdGNoLCBzZW50aW5lbCwKICAgICBNYWdpY01vY2ssIE1vY2ssIE5vbkNhbGxhYmxlTWFnaWNNb2NrLCBwYXRjaCwgX3BhdGNoLAotICAgIERFRkFVTFQsIGNhbGwsIF9nZXRfdGFyZ2V0CisgICAgREVGQVVMVCwgY2FsbCwgX2dldF90YXJnZXQsIF9wYXRjaAogKQogCiAKQEAgLTE3NzksNiArMTc3OSwyMiBAQAogICAgICAgICBwYXRjaGVkKCkKICAgICAgICAgc2VsZi5hc3NlcnRJcyhvcy5wYXRoLCBwYXRoKQogCisgICAgZGVmIHRlc3Rfc3RvcGFsbF9saWZvKHNlbGYpOgorICAgICAgICBzdG9wcGVkID0gW10KKyAgICAgICAgY2xhc3MgdGhpbmcob2JqZWN0KToKKyAgICAgICAgICAgIG9uZSA9IHR3byA9IHRocmVlID0gTm9uZQorCisgICAgICAgIGRlZiBnZXRfcGF0Y2goYXR0cmlidXRlKToKKyAgICAgICAgICAgIGNsYXNzIG15cGF0Y2goX3BhdGNoKToKKyAgICAgICAgICAgICAgICBkZWYgc3RvcChzZWxmKToKKyAgICAgICAgICAgICAgICAgICAgc3RvcHBlZC5hcHBlbmQoYXR0cmlidXRlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3VwZXIobXlwYXRjaCwgc2VsZikuc3RvcCgpCisgICAgICAgICAgICByZXR1cm4gbXlwYXRjaChsYW1iZGE6IHRoaW5nLCBhdHRyaWJ1dGUsIE5vbmUsIE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGYWxzZSwgTm9uZSwgTm9uZSwgTm9uZSwge30pCisgICAgICAgIFtnZXRfcGF0Y2godmFsKS5zdGFydCgpIGZvciB2YWwgaW4gKCJvbmUiLCAidHdvIiwgInRocmVlIildCisgICAgICAgIHBhdGNoLnN0b3BhbGwoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RvcHBlZCwgWyJ0aHJlZSIsICJ0d28iLCAib25lIl0pCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rtb2NrL3Rlc3R3aXRoLnB5IGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdG1vY2svdGVzdHdpdGgucHkKaW5kZXggMGEwY2ZhZC4uYTdiZWU3MyAxMDA2NDQKLS0tIGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdG1vY2svdGVzdHdpdGgucHkKKysrIGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdG1vY2svdGVzdHdpdGgucHkKQEAgLTE1MSw2ICsxNTEsMjAgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2NrLm1vY2tfY2FsbHMsIGV4cGVjdGVkX2NhbGxzKQogICAgICAgICBzZWxmLmFzc2VydElzKGYsIGhhbmRsZSkKIAorICAgIGRlZiB0ZXN0X21vY2tfb3Blbl9jb250ZXh0X21hbmFnZXJfbXVsdGlwbGVfdGltZXMoc2VsZik6CisgICAgICAgIG1vY2sgPSBtb2NrX29wZW4oKQorICAgICAgICB3aXRoIHBhdGNoKCclcy5vcGVuJyAlIF9fbmFtZV9fLCBtb2NrLCBjcmVhdGU9VHJ1ZSk6CisgICAgICAgICAgICB3aXRoIG9wZW4oJ2ZvbycpIGFzIGY6CisgICAgICAgICAgICAgICAgZi5yZWFkKCkKKyAgICAgICAgICAgIHdpdGggb3BlbignYmFyJykgYXMgZjoKKyAgICAgICAgICAgICAgICBmLnJlYWQoKQorCisgICAgICAgIGV4cGVjdGVkX2NhbGxzID0gWworICAgICAgICAgICAgY2FsbCgnZm9vJyksIGNhbGwoKS5fX2VudGVyX18oKSwgY2FsbCgpLnJlYWQoKSwKKyAgICAgICAgICAgIGNhbGwoKS5fX2V4aXRfXyhOb25lLCBOb25lLCBOb25lKSwKKyAgICAgICAgICAgIGNhbGwoJ2JhcicpLCBjYWxsKCkuX19lbnRlcl9fKCksIGNhbGwoKS5yZWFkKCksCisgICAgICAgICAgICBjYWxsKCkuX19leGl0X18oTm9uZSwgTm9uZSwgTm9uZSldCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9jay5tb2NrX2NhbGxzLCBleHBlY3RlZF9jYWxscykKIAogICAgIGRlZiB0ZXN0X2V4cGxpY2l0X21vY2soc2VsZik6CiAgICAgICAgIG1vY2sgPSBNYWdpY01vY2soKQpAQCAtMTcyLDUgKzE4NiwxMTYgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsICdmb28nKQogCiAKKyAgICBkZWYgdGVzdF9yZWFkbGluZV9kYXRhKHNlbGYpOgorICAgICAgICAjIENoZWNrIHRoYXQgcmVhZGxpbmUgd2lsbCByZXR1cm4gYWxsIHRoZSBsaW5lcyBmcm9tIHRoZSBmYWtlIGZpbGUKKyAgICAgICAgbW9jayA9IG1vY2tfb3BlbihyZWFkX2RhdGE9J2Zvb1xuYmFyXG5iYXpcbicpCisgICAgICAgIHdpdGggcGF0Y2goJyVzLm9wZW4nICUgX19uYW1lX18sIG1vY2ssIGNyZWF0ZT1UcnVlKToKKyAgICAgICAgICAgIGggPSBvcGVuKCdiYXInKQorICAgICAgICAgICAgbGluZTEgPSBoLnJlYWRsaW5lKCkKKyAgICAgICAgICAgIGxpbmUyID0gaC5yZWFkbGluZSgpCisgICAgICAgICAgICBsaW5lMyA9IGgucmVhZGxpbmUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmUxLCAnZm9vXG4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmUyLCAnYmFyXG4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmUzLCAnYmF6XG4nKQorCisgICAgICAgICMgQ2hlY2sgdGhhdCB3ZSBwcm9wZXJseSBlbXVsYXRlIGEgZmlsZSB0aGF0IGRvZXNuJ3QgZW5kIGluIGEgbmV3bGluZQorICAgICAgICBtb2NrID0gbW9ja19vcGVuKHJlYWRfZGF0YT0nZm9vJykKKyAgICAgICAgd2l0aCBwYXRjaCgnJXMub3BlbicgJSBfX25hbWVfXywgbW9jaywgY3JlYXRlPVRydWUpOgorICAgICAgICAgICAgaCA9IG9wZW4oJ2JhcicpCisgICAgICAgICAgICByZXN1bHQgPSBoLnJlYWRsaW5lKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsICdmb28nKQorCisKKyAgICBkZWYgdGVzdF9yZWFkbGluZXNfZGF0YShzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgZW11bGF0aW5nIGEgZmlsZSB0aGF0IGVuZHMgaW4gYSBuZXdsaW5lIGNoYXJhY3RlciB3b3JrcworICAgICAgICBtb2NrID0gbW9ja19vcGVuKHJlYWRfZGF0YT0nZm9vXG5iYXJcbmJhelxuJykKKyAgICAgICAgd2l0aCBwYXRjaCgnJXMub3BlbicgJSBfX25hbWVfXywgbW9jaywgY3JlYXRlPVRydWUpOgorICAgICAgICAgICAgaCA9IG9wZW4oJ2JhcicpCisgICAgICAgICAgICByZXN1bHQgPSBoLnJlYWRsaW5lcygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBbJ2Zvb1xuJywgJ2JhclxuJywgJ2JhelxuJ10pCisKKyAgICAgICAgIyBUZXN0IHRoYXQgZmlsZXMgd2l0aG91dCBhIGZpbmFsIG5ld2xpbmUgd2lsbCBhbHNvIGJlIGNvcnJlY3RseQorICAgICAgICAjIGVtdWxhdGVkCisgICAgICAgIG1vY2sgPSBtb2NrX29wZW4ocmVhZF9kYXRhPSdmb29cbmJhclxuYmF6JykKKyAgICAgICAgd2l0aCBwYXRjaCgnJXMub3BlbicgJSBfX25hbWVfXywgbW9jaywgY3JlYXRlPVRydWUpOgorICAgICAgICAgICAgaCA9IG9wZW4oJ2JhcicpCisgICAgICAgICAgICByZXN1bHQgPSBoLnJlYWRsaW5lcygpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIFsnZm9vXG4nLCAnYmFyXG4nLCAnYmF6J10pCisKKworICAgIGRlZiB0ZXN0X3JlYWRfYnl0ZXMoc2VsZik6CisgICAgICAgIG1vY2sgPSBtb2NrX29wZW4ocmVhZF9kYXRhPWInXHhjNicpCisgICAgICAgIHdpdGggcGF0Y2goJyVzLm9wZW4nICUgX19uYW1lX18sIG1vY2ssIGNyZWF0ZT1UcnVlKToKKyAgICAgICAgICAgIHdpdGggb3BlbignYWJjJywgJ3JiJykgYXMgZjoKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBmLnJlYWQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgYidceGM2JykKKworCisgICAgZGVmIHRlc3RfcmVhZGxpbmVfYnl0ZXMoc2VsZik6CisgICAgICAgIG0gPSBtb2NrX29wZW4ocmVhZF9kYXRhPWInYWJjXG5kZWZcbmdoaVxuJykKKyAgICAgICAgd2l0aCBwYXRjaCgnJXMub3BlbicgJSBfX25hbWVfXywgbSwgY3JlYXRlPVRydWUpOgorICAgICAgICAgICAgd2l0aCBvcGVuKCdhYmMnLCAncmInKSBhcyBmOgorICAgICAgICAgICAgICAgIGxpbmUxID0gZi5yZWFkbGluZSgpCisgICAgICAgICAgICAgICAgbGluZTIgPSBmLnJlYWRsaW5lKCkKKyAgICAgICAgICAgICAgICBsaW5lMyA9IGYucmVhZGxpbmUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmUxLCBiJ2FiY1xuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lMiwgYidkZWZcbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZTMsIGInZ2hpXG4nKQorCisKKyAgICBkZWYgdGVzdF9yZWFkbGluZXNfYnl0ZXMoc2VsZik6CisgICAgICAgIG0gPSBtb2NrX29wZW4ocmVhZF9kYXRhPWInYWJjXG5kZWZcbmdoaVxuJykKKyAgICAgICAgd2l0aCBwYXRjaCgnJXMub3BlbicgJSBfX25hbWVfXywgbSwgY3JlYXRlPVRydWUpOgorICAgICAgICAgICAgd2l0aCBvcGVuKCdhYmMnLCAncmInKSBhcyBmOgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IGYucmVhZGxpbmVzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIFtiJ2FiY1xuJywgYidkZWZcbicsIGInZ2hpXG4nXSkKKworCisgICAgZGVmIHRlc3RfbW9ja19vcGVuX3JlYWRfd2l0aF9hcmd1bWVudChzZWxmKToKKyAgICAgICAgIyBBdCBvbmUgcG9pbnQgY2FsbGluZyByZWFkIHdpdGggYW4gYXJndW1lbnQgd2FzIGJyb2tlbgorICAgICAgICAjIGZvciBtb2NrcyByZXR1cm5lZCBieSBtb2NrX29wZW4KKyAgICAgICAgc29tZV9kYXRhID0gJ2Zvb1xuYmFyXG5iYXonCisgICAgICAgIG1vY2sgPSBtb2NrX29wZW4ocmVhZF9kYXRhPXNvbWVfZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2NrKCkucmVhZCgxMCksIHNvbWVfZGF0YSkKKworCisgICAgZGVmIHRlc3RfaW50ZXJsZWF2ZWRfcmVhZHMoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IGNhbGxpbmcgcmVhZCwgcmVhZGxpbmUsIGFuZCByZWFkbGluZXMgcHVsbHMgZGF0YQorICAgICAgICAjIHNlcXVlbnRpYWxseSBmcm9tIHRoZSBkYXRhIHdlIHByZWxvYWQgd2l0aAorICAgICAgICBtb2NrID0gbW9ja19vcGVuKHJlYWRfZGF0YT0nZm9vXG5iYXJcbmJhelxuJykKKyAgICAgICAgd2l0aCBwYXRjaCgnJXMub3BlbicgJSBfX25hbWVfXywgbW9jaywgY3JlYXRlPVRydWUpOgorICAgICAgICAgICAgaCA9IG9wZW4oJ2JhcicpCisgICAgICAgICAgICBsaW5lMSA9IGgucmVhZGxpbmUoKQorICAgICAgICAgICAgcmVzdCA9IGgucmVhZGxpbmVzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lMSwgJ2Zvb1xuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN0LCBbJ2JhclxuJywgJ2JhelxuJ10pCisKKyAgICAgICAgbW9jayA9IG1vY2tfb3BlbihyZWFkX2RhdGE9J2Zvb1xuYmFyXG5iYXpcbicpCisgICAgICAgIHdpdGggcGF0Y2goJyVzLm9wZW4nICUgX19uYW1lX18sIG1vY2ssIGNyZWF0ZT1UcnVlKToKKyAgICAgICAgICAgIGggPSBvcGVuKCdiYXInKQorICAgICAgICAgICAgbGluZTEgPSBoLnJlYWRsaW5lKCkKKyAgICAgICAgICAgIHJlc3QgPSBoLnJlYWQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmUxLCAnZm9vXG4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3QsICdiYXJcbmJhelxuJykKKworCisgICAgZGVmIHRlc3Rfb3ZlcnJpZGluZ19yZXR1cm5fdmFsdWVzKHNlbGYpOgorICAgICAgICBtb2NrID0gbW9ja19vcGVuKHJlYWRfZGF0YT0nZm9vJykKKyAgICAgICAgaGFuZGxlID0gbW9jaygpCisKKyAgICAgICAgaGFuZGxlLnJlYWQucmV0dXJuX3ZhbHVlID0gJ2JhcicKKyAgICAgICAgaGFuZGxlLnJlYWRsaW5lLnJldHVybl92YWx1ZSA9ICdiYXInCisgICAgICAgIGhhbmRsZS5yZWFkbGluZXMucmV0dXJuX3ZhbHVlID0gWydiYXInXQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFuZGxlLnJlYWQoKSwgJ2JhcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFuZGxlLnJlYWRsaW5lKCksICdiYXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhbmRsZS5yZWFkbGluZXMoKSwgWydiYXInXSkKKworICAgICAgICAjIGNhbGwgcmVwZWF0ZWRseSB0byBjaGVjayB0aGF0IGEgU3RvcEl0ZXJhdGlvbiBpcyBub3QgcHJvcGFnYXRlZAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhbmRsZS5yZWFkbGluZSgpLCAnYmFyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYW5kbGUucmVhZGxpbmUoKSwgJ2JhcicpCisKKwogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC91dGlsLnB5IGIvTGliL3VuaXR0ZXN0L3V0aWwucHkKaW5kZXggY2NkZjBiOC4uYWVlNDk4ZiAxMDA2NDQKLS0tIGEvTGliL3VuaXR0ZXN0L3V0aWwucHkKKysrIGIvTGliL3VuaXR0ZXN0L3V0aWwucHkKQEAgLTEsMTAgKzEsNDcgQEAKICIiIlZhcmlvdXMgdXRpbGl0eSBmdW5jdGlvbnMuIiIiCiAKIGZyb20gY29sbGVjdGlvbnMgaW1wb3J0IG5hbWVkdHVwbGUsIE9yZGVyZWREaWN0Citmcm9tIG9zLnBhdGggaW1wb3J0IGNvbW1vbnByZWZpeAogCiBfX3VuaXR0ZXN0ID0gVHJ1ZQogCiBfTUFYX0xFTkdUSCA9IDgwCitfUExBQ0VIT0xERVJfTEVOID0gMTIKK19NSU5fQkVHSU5fTEVOID0gNQorX01JTl9FTkRfTEVOID0gNQorX01JTl9DT01NT05fTEVOID0gNQorX01JTl9ESUZGX0xFTiA9IF9NQVhfTEVOR1RIIC0gXAorICAgICAgICAgICAgICAgKF9NSU5fQkVHSU5fTEVOICsgX1BMQUNFSE9MREVSX0xFTiArIF9NSU5fQ09NTU9OX0xFTiArCisgICAgICAgICAgICAgICAgX1BMQUNFSE9MREVSX0xFTiArIF9NSU5fRU5EX0xFTikKK2Fzc2VydCBfTUlOX0RJRkZfTEVOID49IDAKKworZGVmIF9zaG9ydGVuKHMsIHByZWZpeGxlbiwgc3VmZml4bGVuKToKKyAgICBza2lwID0gbGVuKHMpIC0gcHJlZml4bGVuIC0gc3VmZml4bGVuCisgICAgaWYgc2tpcCA+IF9QTEFDRUhPTERFUl9MRU46CisgICAgICAgIHMgPSAnJXNbJWQgY2hhcnNdJXMnICUgKHNbOnByZWZpeGxlbl0sIHNraXAsIHNbbGVuKHMpIC0gc3VmZml4bGVuOl0pCisgICAgcmV0dXJuIHMKKworZGVmIF9jb21tb25fc2hvcnRlbl9yZXByKCphcmdzKToKKyAgICBhcmdzID0gdHVwbGUobWFwKHNhZmVfcmVwciwgYXJncykpCisgICAgbWF4bGVuID0gbWF4KG1hcChsZW4sIGFyZ3MpKQorICAgIGlmIG1heGxlbiA8PSBfTUFYX0xFTkdUSDoKKyAgICAgICAgcmV0dXJuIGFyZ3MKKworICAgIHByZWZpeCA9IGNvbW1vbnByZWZpeChhcmdzKQorICAgIHByZWZpeGxlbiA9IGxlbihwcmVmaXgpCisKKyAgICBjb21tb25fbGVuID0gX01BWF9MRU5HVEggLSBcCisgICAgICAgICAgICAgICAgIChtYXhsZW4gLSBwcmVmaXhsZW4gKyBfTUlOX0JFR0lOX0xFTiArIF9QTEFDRUhPTERFUl9MRU4pCisgICAgaWYgY29tbW9uX2xlbiA+IF9NSU5fQ09NTU9OX0xFTjoKKyAgICAgICAgYXNzZXJ0IF9NSU5fQkVHSU5fTEVOICsgX1BMQUNFSE9MREVSX0xFTiArIF9NSU5fQ09NTU9OX0xFTiArIFwKKyAgICAgICAgICAgICAgIChtYXhsZW4gLSBwcmVmaXhsZW4pIDwgX01BWF9MRU5HVEgKKyAgICAgICAgcHJlZml4ID0gX3Nob3J0ZW4ocHJlZml4LCBfTUlOX0JFR0lOX0xFTiwgY29tbW9uX2xlbikKKyAgICAgICAgcmV0dXJuIHR1cGxlKHByZWZpeCArIHNbcHJlZml4bGVuOl0gZm9yIHMgaW4gYXJncykKKworICAgIHByZWZpeCA9IF9zaG9ydGVuKHByZWZpeCwgX01JTl9CRUdJTl9MRU4sIF9NSU5fQ09NTU9OX0xFTikKKyAgICByZXR1cm4gdHVwbGUocHJlZml4ICsgX3Nob3J0ZW4oc1twcmVmaXhsZW46XSwgX01JTl9ESUZGX0xFTiwgX01JTl9FTkRfTEVOKQorICAgICAgICAgICAgICAgICBmb3IgcyBpbiBhcmdzKQorCiBkZWYgc2FmZV9yZXByKG9iaiwgc2hvcnQ9RmFsc2UpOgogICAgIHRyeToKICAgICAgICAgcmVzdWx0ID0gcmVwcihvYmopCmRpZmYgLS1naXQgYS9MaWIvdXJsbGliL2Vycm9yLnB5IGIvTGliL3VybGxpYi9lcnJvci5weQppbmRleCBiNzEyZWJiLi40NWI3MTY5IDEwMDY0NAotLS0gYS9MaWIvdXJsbGliL2Vycm9yLnB5CisrKyBiL0xpYi91cmxsaWIvZXJyb3IucHkKQEAgLTEsNiArMSw2IEBACiAiIiJFeGNlcHRpb24gY2xhc3NlcyByYWlzZWQgYnkgdXJsbGliLgogCi1UaGUgYmFzZSBleGNlcHRpb24gY2xhc3MgaXMgVVJMRXJyb3IsIHdoaWNoIGluaGVyaXRzIGZyb20gSU9FcnJvci4gIEl0CitUaGUgYmFzZSBleGNlcHRpb24gY2xhc3MgaXMgVVJMRXJyb3IsIHdoaWNoIGluaGVyaXRzIGZyb20gT1NFcnJvci4gIEl0CiBkb2Vzbid0IGRlZmluZSBhbnkgYmVoYXZpb3Igb2YgaXRzIG93biwgYnV0IGlzIHRoZSBiYXNlIGNsYXNzIGZvciBhbGwKIGV4Y2VwdGlvbnMgZGVmaW5lZCBpbiB0aGlzIHBhY2thZ2UuCiAKQEAgLTE3LDExICsxNywxMSBAQAogCiAKICMgZG8gdGhlc2UgZXJyb3IgY2xhc3NlcyBtYWtlIHNlbnNlPwotIyBtYWtlIHN1cmUgYWxsIG9mIHRoZSBJT0Vycm9yIHN0dWZmIGlzIG92ZXJyaWRkZW4uICB3ZSBqdXN0IHdhbnQgdG8gYmUKKyMgbWFrZSBzdXJlIGFsbCBvZiB0aGUgT1NFcnJvciBzdHVmZiBpcyBvdmVycmlkZGVuLiAgd2UganVzdCB3YW50IHRvIGJlCiAjIHN1YnR5cGVzLgogCi1jbGFzcyBVUkxFcnJvcihJT0Vycm9yKToKLSAgICAjIFVSTEVycm9yIGlzIGEgc3ViLXR5cGUgb2YgSU9FcnJvciwgYnV0IGl0IGRvZXNuJ3Qgc2hhcmUgYW55IG9mCitjbGFzcyBVUkxFcnJvcihPU0Vycm9yKToKKyAgICAjIFVSTEVycm9yIGlzIGEgc3ViLXR5cGUgb2YgT1NFcnJvciwgYnV0IGl0IGRvZXNuJ3Qgc2hhcmUgYW55IG9mCiAgICAgIyB0aGUgaW1wbGVtZW50YXRpb24uICBuZWVkIHRvIG92ZXJyaWRlIF9faW5pdF9fIGFuZCBfX3N0cl9fLgogICAgICMgSXQgc2V0cyBzZWxmLmFyZ3MgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBvdGhlciBFbnZpcm9ubWVudEVycm9yCiAgICAgIyBzdWJjbGFzc2VzLCBidXQgYXJncyBkb2Vzbid0IGhhdmUgdGhlIHR5cGljYWwgZm9ybWF0IHdpdGggZXJybm8gaW4KQEAgLTYxLDkgKzYxLDEzIEBACiAgICAgZGVmIHJlYXNvbihzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYubXNnCiAKLSAgICBkZWYgaW5mbyhzZWxmKToKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgaGVhZGVycyhzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYuaGRycwogCisgICAgQGhlYWRlcnMuc2V0dGVyCisgICAgZGVmIGhlYWRlcnMoc2VsZiwgaGVhZGVycyk6CisgICAgICAgIHNlbGYuaGRycyA9IGhlYWRlcnMKIAogIyBleGNlcHRpb24gcmFpc2VkIHdoZW4gZG93bmxvYWRlZCBzaXplIGRvZXMgbm90IG1hdGNoIGNvbnRlbnQtbGVuZ3RoCiBjbGFzcyBDb250ZW50VG9vU2hvcnRFcnJvcihVUkxFcnJvcik6CmRpZmYgLS1naXQgYS9MaWIvdXJsbGliL3BhcnNlLnB5IGIvTGliL3VybGxpYi9wYXJzZS5weQppbmRleCA5NzVjNmZmLi5kMzY4MzMxIDEwMDY0NAotLS0gYS9MaWIvdXJsbGliL3BhcnNlLnB5CisrKyBiL0xpYi91cmxsaWIvcGFyc2UucHkKQEAgLTQ3Miw4ICs0NzIsNyBAQAogICAgIHJldHVybiBfY29lcmNlX3Jlc3VsdChEZWZyYWdSZXN1bHQoZGVmcmFnLCBmcmFnKSkKIAogX2hleGRpZyA9ICcwMTIzNDU2Nzg5QUJDREVGYWJjZGVmJwotX2hleHRvYnl0ZSA9IHsoYSArIGIpLmVuY29kZSgpOiBieXRlcyhbaW50KGEgKyBiLCAxNildKQotICAgICAgICAgICAgICBmb3IgYSBpbiBfaGV4ZGlnIGZvciBiIGluIF9oZXhkaWd9CitfaGV4dG9ieXRlID0gTm9uZQogCiBkZWYgdW5xdW90ZV90b19ieXRlcyhzdHJpbmcpOgogICAgICIiInVucXVvdGVfdG9fYnl0ZXMoJ2FiYyUyMGRlZicpIC0+IGInYWJjIGRlZicuIiIiCkBAIC00OTAsNiArNDg5LDEyIEBACiAgICAgICAgIHJldHVybiBzdHJpbmcKICAgICByZXMgPSBbYml0c1swXV0KICAgICBhcHBlbmQgPSByZXMuYXBwZW5kCisgICAgIyBEZWxheSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHRhYmxlIHRvIG5vdCB3YXN0ZSBtZW1vcnkKKyAgICAjIGlmIHRoZSBmdW5jdGlvbiBpcyBuZXZlciBjYWxsZWQKKyAgICBnbG9iYWwgX2hleHRvYnl0ZQorICAgIGlmIF9oZXh0b2J5dGUgaXMgTm9uZToKKyAgICAgICAgX2hleHRvYnl0ZSA9IHsoYSArIGIpLmVuY29kZSgpOiBieXRlcyhbaW50KGEgKyBiLCAxNildKQorICAgICAgICAgICAgICAgICAgICAgIGZvciBhIGluIF9oZXhkaWcgZm9yIGIgaW4gX2hleGRpZ30KICAgICBmb3IgaXRlbSBpbiBiaXRzWzE6XToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgYXBwZW5kKF9oZXh0b2J5dGVbaXRlbVs6Ml1dKQpAQCAtNjY1LDggKzY3MCw4IEBACiAgICAgY2FsbGVkIG9uIGEgcGF0aCB3aGVyZSB0aGUgZXhpc3Rpbmcgc2xhc2ggY2hhcmFjdGVycyBhcmUgdXNlZCBhcwogICAgIHJlc2VydmVkIGNoYXJhY3RlcnMuCiAKLSAgICBzdHJpbmcgYW5kIHNhZmUgbWF5IGJlIGVpdGhlciBzdHIgb3IgYnl0ZXMgb2JqZWN0cy4gZW5jb2RpbmcgbXVzdAotICAgIG5vdCBiZSBzcGVjaWZpZWQgaWYgc3RyaW5nIGlzIGEgc3RyLgorICAgIHN0cmluZyBhbmQgc2FmZSBtYXkgYmUgZWl0aGVyIHN0ciBvciBieXRlcyBvYmplY3RzLiBlbmNvZGluZyBhbmQgZXJyb3JzCisgICAgbXVzdCBub3QgYmUgc3BlY2lmaWVkIGlmIHN0cmluZyBpcyBhIGJ5dGVzIG9iamVjdC4KIAogICAgIFRoZSBvcHRpb25hbCBlbmNvZGluZyBhbmQgZXJyb3JzIHBhcmFtZXRlcnMgc3BlY2lmeSBob3cgdG8gZGVhbCB3aXRoCiAgICAgbm9uLUFTQ0lJIGNoYXJhY3RlcnMsIGFzIGFjY2VwdGVkIGJ5IHRoZSBzdHIuZW5jb2RlIG1ldGhvZC4KQEAgLTczOCw4ICs3NDMsOSBAQAogICAgIGlucHV0LgogCiAgICAgVGhlIGNvbXBvbmVudHMgb2YgYSBxdWVyeSBhcmcgbWF5IGVhY2ggYmUgZWl0aGVyIGEgc3RyaW5nIG9yIGEgYnl0ZXMgdHlwZS4KLSAgICBXaGVuIGEgY29tcG9uZW50IGlzIGEgc3RyaW5nLCB0aGUgc2FmZSwgZW5jb2RpbmcgYW5kIGVycm9yIHBhcmFtZXRlcnMgYXJlCi0gICAgc2VudCB0byB0aGUgcXVvdGVfcGx1cyBmdW5jdGlvbiBmb3IgZW5jb2RpbmcuCisKKyAgICBUaGUgc2FmZSwgZW5jb2RpbmcsIGFuZCBlcnJvcnMgcGFyYW1ldGVycyBhcmUgcGFzc2VkIGRvd24gdG8gcXVvdGVfcGx1cygpCisgICAgKGVuY29kaW5nIGFuZCBlcnJvcnMgb25seSBpZiBhIGNvbXBvbmVudCBpcyBhIHN0cikuCiAgICAgIiIiCiAKICAgICBpZiBoYXNhdHRyKHF1ZXJ5LCAiaXRlbXMiKToKQEAgLTg0Niw3ICs4NTIsNiBAQAogICAgICIiInNwbGl0dHlwZSgndHlwZTpvcGFxdWVzdHJpbmcnKSAtLT4gJ3R5cGUnLCAnb3BhcXVlc3RyaW5nJy4iIiIKICAgICBnbG9iYWwgX3R5cGVwcm9nCiAgICAgaWYgX3R5cGVwcm9nIGlzIE5vbmU6Ci0gICAgICAgIGltcG9ydCByZQogICAgICAgICBfdHlwZXByb2cgPSByZS5jb21waWxlKCdeKFteLzpdKyk6JykKIAogICAgIG1hdGNoID0gX3R5cGVwcm9nLm1hdGNoKHVybCkKQEAgLTg2MCw3ICs4NjUsNiBAQAogICAgICIiInNwbGl0aG9zdCgnLy9ob3N0Wzpwb3J0XS9wYXRoJykgLS0+ICdob3N0Wzpwb3J0XScsICcvcGF0aCcuIiIiCiAgICAgZ2xvYmFsIF9ob3N0cHJvZwogICAgIGlmIF9ob3N0cHJvZyBpcyBOb25lOgotICAgICAgICBpbXBvcnQgcmUKICAgICAgICAgX2hvc3Rwcm9nID0gcmUuY29tcGlsZSgnXi8vKFteLz9dKikoLiopJCcpCiAKICAgICBtYXRjaCA9IF9ob3N0cHJvZy5tYXRjaCh1cmwpCkBAIC04NzcsNyArODgxLDYgQEAKICAgICAiIiJzcGxpdHVzZXIoJ3VzZXJbOnBhc3N3ZF1AaG9zdFs6cG9ydF0nKSAtLT4gJ3VzZXJbOnBhc3N3ZF0nLCAnaG9zdFs6cG9ydF0nLiIiIgogICAgIGdsb2JhbCBfdXNlcnByb2cKICAgICBpZiBfdXNlcnByb2cgaXMgTm9uZToKLSAgICAgICAgaW1wb3J0IHJlCiAgICAgICAgIF91c2VycHJvZyA9IHJlLmNvbXBpbGUoJ14oLiopQCguKikkJykKIAogICAgIG1hdGNoID0gX3VzZXJwcm9nLm1hdGNoKGhvc3QpCkBAIC04ODksNyArODkyLDYgQEAKICAgICAiIiJzcGxpdHBhc3N3ZCgndXNlcjpwYXNzd2QnKSAtPiAndXNlcicsICdwYXNzd2QnLiIiIgogICAgIGdsb2JhbCBfcGFzc3dkcHJvZwogICAgIGlmIF9wYXNzd2Rwcm9nIGlzIE5vbmU6Ci0gICAgICAgIGltcG9ydCByZQogICAgICAgICBfcGFzc3dkcHJvZyA9IHJlLmNvbXBpbGUoJ14oW146XSopOiguKikkJyxyZS5TKQogCiAgICAgbWF0Y2ggPSBfcGFzc3dkcHJvZy5tYXRjaCh1c2VyKQpAQCAtOTAyLDcgKzkwNCw2IEBACiAgICAgIiIic3BsaXRwb3J0KCdob3N0OnBvcnQnKSAtLT4gJ2hvc3QnLCAncG9ydCcuIiIiCiAgICAgZ2xvYmFsIF9wb3J0cHJvZwogICAgIGlmIF9wb3J0cHJvZyBpcyBOb25lOgotICAgICAgICBpbXBvcnQgcmUKICAgICAgICAgX3BvcnRwcm9nID0gcmUuY29tcGlsZSgnXiguKik6KFswLTldKikkJykKIAogICAgIG1hdGNoID0gX3BvcnRwcm9nLm1hdGNoKGhvc3QpCkBAIC05MjAsNyArOTIxLDYgQEAKICAgICBSZXR1cm4gTm9uZSBpZiAnOicgYnV0IG5vdCBhIHZhbGlkIG51bWJlci4iIiIKICAgICBnbG9iYWwgX25wb3J0cHJvZwogICAgIGlmIF9ucG9ydHByb2cgaXMgTm9uZToKLSAgICAgICAgaW1wb3J0IHJlCiAgICAgICAgIF9ucG9ydHByb2cgPSByZS5jb21waWxlKCdeKC4qKTooLiopJCcpCiAKICAgICBtYXRjaCA9IF9ucG9ydHByb2cubWF0Y2goaG9zdCkKQEAgLTkzOSw3ICs5MzksNiBAQAogICAgICIiInNwbGl0cXVlcnkoJy9wYXRoP3F1ZXJ5JykgLS0+ICcvcGF0aCcsICdxdWVyeScuIiIiCiAgICAgZ2xvYmFsIF9xdWVyeXByb2cKICAgICBpZiBfcXVlcnlwcm9nIGlzIE5vbmU6Ci0gICAgICAgIGltcG9ydCByZQogICAgICAgICBfcXVlcnlwcm9nID0gcmUuY29tcGlsZSgnXiguKilcPyhbXj9dKikkJykKIAogICAgIG1hdGNoID0gX3F1ZXJ5cHJvZy5tYXRjaCh1cmwpCkBAIC05NTEsNyArOTUwLDYgQEAKICAgICAiIiJzcGxpdHRhZygnL3BhdGgjdGFnJykgLS0+ICcvcGF0aCcsICd0YWcnLiIiIgogICAgIGdsb2JhbCBfdGFncHJvZwogICAgIGlmIF90YWdwcm9nIGlzIE5vbmU6Ci0gICAgICAgIGltcG9ydCByZQogICAgICAgICBfdGFncHJvZyA9IHJlLmNvbXBpbGUoJ14oLiopIyhbXiNdKikkJykKIAogICAgIG1hdGNoID0gX3RhZ3Byb2cubWF0Y2godXJsKQpAQCAtOTY5LDcgKzk2Nyw2IEBACiAgICAgIiIic3BsaXR2YWx1ZSgnYXR0cj12YWx1ZScpIC0tPiAnYXR0cicsICd2YWx1ZScuIiIiCiAgICAgZ2xvYmFsIF92YWx1ZXByb2cKICAgICBpZiBfdmFsdWVwcm9nIGlzIE5vbmU6Ci0gICAgICAgIGltcG9ydCByZQogICAgICAgICBfdmFsdWVwcm9nID0gcmUuY29tcGlsZSgnXihbXj1dKik9KC4qKSQnKQogCiAgICAgbWF0Y2ggPSBfdmFsdWVwcm9nLm1hdGNoKGF0dHIpCmRpZmYgLS1naXQgYS9MaWIvdXJsbGliL3JlcXVlc3QucHkgYi9MaWIvdXJsbGliL3JlcXVlc3QucHkKaW5kZXggZWY2MmFjYy4uMzc2YmJhNCAxMDA2NDQKLS0tIGEvTGliL3VybGxpYi9yZXF1ZXN0LnB5CisrKyBiL0xpYi91cmxsaWIvcmVxdWVzdC5weQpAQCAtMTgsNyArMTgsNyBAQAogdXJsbGliLiAgcGFzcyB0aGUgdXJsIGFuZCBvcHRpb25hbGx5IGRhdGEgdG8gcG9zdCB0byBhbiBIVFRQIFVSTCwgYW5kCiBnZXQgYSBmaWxlLWxpa2Ugb2JqZWN0IGJhY2suICBPbmUgZGlmZmVyZW5jZSBpcyB0aGF0IHlvdSBjYW4gYWxzbyBwYXNzCiBhIFJlcXVlc3QgaW5zdGFuY2UgaW5zdGVhZCBvZiBVUkwuICBSYWlzZXMgYSBVUkxFcnJvciAoc3ViY2xhc3Mgb2YKLUlPRXJyb3IpOyBmb3IgSFRUUCBlcnJvcnMsIHJhaXNlcyBhbiBIVFRQRXJyb3IsIHdoaWNoIGNhbiBhbHNvIGJlCitPU0Vycm9yKTsgZm9yIEhUVFAgZXJyb3JzLCByYWlzZXMgYW4gSFRUUEVycm9yLCB3aGljaCBjYW4gYWxzbyBiZQogdHJlYXRlZCBhcyBhIHZhbGlkIHJlc3BvbnNlLgogCiBidWlsZF9vcGVuZXIgLS0gRnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgbmV3IE9wZW5lckRpcmVjdG9yIGluc3RhbmNlLgpAQCAtMTAzLDcgKzEwMyw4IEBACiBmcm9tIHVybGxpYi5wYXJzZSBpbXBvcnQgKAogICAgIHVybHBhcnNlLCB1cmxzcGxpdCwgdXJsam9pbiwgdW53cmFwLCBxdW90ZSwgdW5xdW90ZSwKICAgICBzcGxpdHR5cGUsIHNwbGl0aG9zdCwgc3BsaXRwb3J0LCBzcGxpdHVzZXIsIHNwbGl0cGFzc3dkLAotICAgIHNwbGl0YXR0ciwgc3BsaXRxdWVyeSwgc3BsaXR2YWx1ZSwgc3BsaXR0YWcsIHRvX2J5dGVzLCB1cmx1bnBhcnNlKQorICAgIHNwbGl0YXR0ciwgc3BsaXRxdWVyeSwgc3BsaXR2YWx1ZSwgc3BsaXR0YWcsIHRvX2J5dGVzLAorICAgIHVucXVvdGVfdG9fYnl0ZXMsIHVybHVucGFyc2UpCiBmcm9tIHVybGxpYi5yZXNwb25zZSBpbXBvcnQgYWRkaW5mb3VybCwgYWRkY2xvc2Vob29rCiAKICMgY2hlY2sgZm9yIFNTTApAQCAtMTIxLDcgKzEyMiw3IEBACiAgICAgJ0hUVFBQYXNzd29yZE1ncicsICdIVFRQUGFzc3dvcmRNZ3JXaXRoRGVmYXVsdFJlYWxtJywKICAgICAnQWJzdHJhY3RCYXNpY0F1dGhIYW5kbGVyJywgJ0hUVFBCYXNpY0F1dGhIYW5kbGVyJywgJ1Byb3h5QmFzaWNBdXRoSGFuZGxlcicsCiAgICAgJ0Fic3RyYWN0RGlnZXN0QXV0aEhhbmRsZXInLCAnSFRUUERpZ2VzdEF1dGhIYW5kbGVyJywgJ1Byb3h5RGlnZXN0QXV0aEhhbmRsZXInLAotICAgICdIVFRQSGFuZGxlcicsICdGaWxlSGFuZGxlcicsICdGVFBIYW5kbGVyJywgJ0NhY2hlRlRQSGFuZGxlcicsCisgICAgJ0hUVFBIYW5kbGVyJywgJ0ZpbGVIYW5kbGVyJywgJ0ZUUEhhbmRsZXInLCAnQ2FjaGVGVFBIYW5kbGVyJywgJ0RhdGFIYW5kbGVyJywKICAgICAnVW5rbm93bkhhbmRsZXInLCAnSFRUUEVycm9yUHJvY2Vzc29yJywKICAgICAjIEZ1bmN0aW9ucwogICAgICd1cmxvcGVuJywgJ2luc3RhbGxfb3BlbmVyJywgJ2J1aWxkX29wZW5lcicsCkBAIC0xMzUsMTkgKzEzNiwyMyBAQAogCiBfb3BlbmVyID0gTm9uZQogZGVmIHVybG9wZW4odXJsLCBkYXRhPU5vbmUsIHRpbWVvdXQ9c29ja2V0Ll9HTE9CQUxfREVGQVVMVF9USU1FT1VULAotICAgICAgICAgICAgKiwgY2FmaWxlPU5vbmUsIGNhcGF0aD1Ob25lLCBjYWRlZmF1bHQ9RmFsc2UpOgorICAgICAgICAgICAgKiwgY2FmaWxlPU5vbmUsIGNhcGF0aD1Ob25lLCBjYWRlZmF1bHQ9RmFsc2UsIGNvbnRleHQ9Tm9uZSk6CiAgICAgZ2xvYmFsIF9vcGVuZXIKICAgICBpZiBjYWZpbGUgb3IgY2FwYXRoIG9yIGNhZGVmYXVsdDoKKyAgICAgICAgaWYgY29udGV4dCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCisgICAgICAgICAgICAgICAgIllvdSBjYW4ndCBwYXNzIGJvdGggY29udGV4dCBhbmQgYW55IG9mIGNhZmlsZSwgY2FwYXRoLCBhbmQgIgorICAgICAgICAgICAgICAgICJjYWRlZmF1bHQiCisgICAgICAgICAgICApCiAgICAgICAgIGlmIG5vdCBfaGF2ZV9zc2w6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdTU0wgc3VwcG9ydCBub3QgYXZhaWxhYmxlJykKLSAgICAgICAgY29udGV4dCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9TU0x2MjMpCi0gICAgICAgIGNvbnRleHQub3B0aW9ucyB8PSBzc2wuT1BfTk9fU1NMdjIKLSAgICAgICAgY29udGV4dC52ZXJpZnlfbW9kZSA9IHNzbC5DRVJUX1JFUVVJUkVECi0gICAgICAgIGlmIGNhZmlsZSBvciBjYXBhdGg6Ci0gICAgICAgICAgICBjb250ZXh0LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhjYWZpbGUsIGNhcGF0aCkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGNvbnRleHQuc2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzKCkKLSAgICAgICAgaHR0cHNfaGFuZGxlciA9IEhUVFBTSGFuZGxlcihjb250ZXh0PWNvbnRleHQsIGNoZWNrX2hvc3RuYW1lPVRydWUpCisgICAgICAgIGNvbnRleHQgPSBzc2wuY3JlYXRlX2RlZmF1bHRfY29udGV4dChzc2wuUHVycG9zZS5TRVJWRVJfQVVUSCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhZmlsZT1jYWZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXBhdGg9Y2FwYXRoKQorICAgICAgICBodHRwc19oYW5kbGVyID0gSFRUUFNIYW5kbGVyKGNvbnRleHQ9Y29udGV4dCkKKyAgICAgICAgb3BlbmVyID0gYnVpbGRfb3BlbmVyKGh0dHBzX2hhbmRsZXIpCisgICAgZWxpZiBjb250ZXh0OgorICAgICAgICBodHRwc19oYW5kbGVyID0gSFRUUFNIYW5kbGVyKGNvbnRleHQ9Y29udGV4dCkKICAgICAgICAgb3BlbmVyID0gYnVpbGRfb3BlbmVyKGh0dHBzX2hhbmRsZXIpCiAgICAgZWxpZiBfb3BlbmVyIGlzIE5vbmU6CiAgICAgICAgIF9vcGVuZXIgPSBvcGVuZXIgPSBidWlsZF9vcGVuZXIoKQpAQCAtMjI0LDEwICsyMjksMTEgQEAKICAgICByZXR1cm4gcmVzdWx0CiAKIGRlZiB1cmxjbGVhbnVwKCk6CisgICAgIiIiQ2xlYW4gdXAgdGVtcG9yYXJ5IGZpbGVzIGZyb20gdXJscmV0cmlldmUgY2FsbHMuIiIiCiAgICAgZm9yIHRlbXBfZmlsZSBpbiBfdXJsX3RlbXBmaWxlczoKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgb3MudW5saW5rKHRlbXBfZmlsZSkKLSAgICAgICAgZXhjZXB0IEVudmlyb25tZW50RXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcGFzcwogCiAgICAgZGVsIF91cmxfdGVtcGZpbGVzWzpdCkBAIC0yNTgsMjQgKzI2NCw2MCBAQAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCB1cmwsIGRhdGE9Tm9uZSwgaGVhZGVycz17fSwKICAgICAgICAgICAgICAgICAgb3JpZ2luX3JlcV9ob3N0PU5vbmUsIHVudmVyaWZpYWJsZT1GYWxzZSwKICAgICAgICAgICAgICAgICAgbWV0aG9kPU5vbmUpOgotICAgICAgICAjIHVud3JhcCgnPFVSTDp0eXBlOi8vaG9zdC9wYXRoPicpIC0tPiAndHlwZTovL2hvc3QvcGF0aCcKLSAgICAgICAgc2VsZi5mdWxsX3VybCA9IHVud3JhcCh1cmwpCi0gICAgICAgIHNlbGYuZnVsbF91cmwsIHNlbGYuZnJhZ21lbnQgPSBzcGxpdHRhZyhzZWxmLmZ1bGxfdXJsKQotICAgICAgICBzZWxmLmRhdGEgPSBkYXRhCisgICAgICAgIHNlbGYuZnVsbF91cmwgPSB1cmwKICAgICAgICAgc2VsZi5oZWFkZXJzID0ge30KKyAgICAgICAgc2VsZi51bnJlZGlyZWN0ZWRfaGRycyA9IHt9CisgICAgICAgIHNlbGYuX2RhdGEgPSBOb25lCisgICAgICAgIHNlbGYuZGF0YSA9IGRhdGEKICAgICAgICAgc2VsZi5fdHVubmVsX2hvc3QgPSBOb25lCiAgICAgICAgIGZvciBrZXksIHZhbHVlIGluIGhlYWRlcnMuaXRlbXMoKToKICAgICAgICAgICAgIHNlbGYuYWRkX2hlYWRlcihrZXksIHZhbHVlKQotICAgICAgICBzZWxmLnVucmVkaXJlY3RlZF9oZHJzID0ge30KICAgICAgICAgaWYgb3JpZ2luX3JlcV9ob3N0IGlzIE5vbmU6CiAgICAgICAgICAgICBvcmlnaW5fcmVxX2hvc3QgPSByZXF1ZXN0X2hvc3Qoc2VsZikKICAgICAgICAgc2VsZi5vcmlnaW5fcmVxX2hvc3QgPSBvcmlnaW5fcmVxX2hvc3QKICAgICAgICAgc2VsZi51bnZlcmlmaWFibGUgPSB1bnZlcmlmaWFibGUKLSAgICAgICAgc2VsZi5tZXRob2QgPSBtZXRob2QKKyAgICAgICAgaWYgbWV0aG9kOgorICAgICAgICAgICAgc2VsZi5tZXRob2QgPSBtZXRob2QKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBmdWxsX3VybChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5mcmFnbWVudDoKKyAgICAgICAgICAgIHJldHVybiAne30je30nLmZvcm1hdChzZWxmLl9mdWxsX3VybCwgc2VsZi5mcmFnbWVudCkKKyAgICAgICAgcmV0dXJuIHNlbGYuX2Z1bGxfdXJsCisKKyAgICBAZnVsbF91cmwuc2V0dGVyCisgICAgZGVmIGZ1bGxfdXJsKHNlbGYsIHVybCk6CisgICAgICAgICMgdW53cmFwKCc8VVJMOnR5cGU6Ly9ob3N0L3BhdGg+JykgLS0+ICd0eXBlOi8vaG9zdC9wYXRoJworICAgICAgICBzZWxmLl9mdWxsX3VybCA9IHVud3JhcCh1cmwpCisgICAgICAgIHNlbGYuX2Z1bGxfdXJsLCBzZWxmLmZyYWdtZW50ID0gc3BsaXR0YWcoc2VsZi5fZnVsbF91cmwpCiAgICAgICAgIHNlbGYuX3BhcnNlKCkKIAorICAgIEBmdWxsX3VybC5kZWxldGVyCisgICAgZGVmIGZ1bGxfdXJsKHNlbGYpOgorICAgICAgICBzZWxmLl9mdWxsX3VybCA9IE5vbmUKKyAgICAgICAgc2VsZi5mcmFnbWVudCA9IE5vbmUKKyAgICAgICAgc2VsZi5zZWxlY3RvciA9ICcnCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgZGF0YShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2RhdGEKKworICAgIEBkYXRhLnNldHRlcgorICAgIGRlZiBkYXRhKHNlbGYsIGRhdGEpOgorICAgICAgICBpZiBkYXRhICE9IHNlbGYuX2RhdGE6CisgICAgICAgICAgICBzZWxmLl9kYXRhID0gZGF0YQorICAgICAgICAgICAgIyBpc3N1ZSAxNjQ2NAorICAgICAgICAgICAgIyBpZiB3ZSBjaGFuZ2UgZGF0YSB3ZSBuZWVkIHRvIHJlbW92ZSBjb250ZW50LWxlbmd0aCBoZWFkZXIKKyAgICAgICAgICAgICMgKGNhdXNlIGl0J3MgbW9zdCBwcm9iYWJseSBjYWxjdWxhdGVkIGZvciBwcmV2aW91cyB2YWx1ZSkKKyAgICAgICAgICAgIGlmIHNlbGYuaGFzX2hlYWRlcigiQ29udGVudC1sZW5ndGgiKToKKyAgICAgICAgICAgICAgICBzZWxmLnJlbW92ZV9oZWFkZXIoIkNvbnRlbnQtbGVuZ3RoIikKKworICAgIEBkYXRhLmRlbGV0ZXIKKyAgICBkZWYgZGF0YShzZWxmKToKKyAgICAgICAgc2VsZi5kYXRhID0gTm9uZQorCiAgICAgZGVmIF9wYXJzZShzZWxmKToKLSAgICAgICAgc2VsZi50eXBlLCByZXN0ID0gc3BsaXR0eXBlKHNlbGYuZnVsbF91cmwpCisgICAgICAgIHNlbGYudHlwZSwgcmVzdCA9IHNwbGl0dHlwZShzZWxmLl9mdWxsX3VybCkKICAgICAgICAgaWYgc2VsZi50eXBlIGlzIE5vbmU6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ1bmtub3duIHVybCB0eXBlOiAlciIgJSBzZWxmLmZ1bGxfdXJsKQogICAgICAgICBzZWxmLmhvc3QsIHNlbGYuc2VsZWN0b3IgPSBzcGxpdGhvc3QocmVzdCkKQEAgLTI4NCw2MiArMzI2LDExIEBACiAKICAgICBkZWYgZ2V0X21ldGhvZChzZWxmKToKICAgICAgICAgIiIiUmV0dXJuIGEgc3RyaW5nIGluZGljYXRpbmcgdGhlIEhUVFAgcmVxdWVzdCBtZXRob2QuIiIiCi0gICAgICAgIGlmIHNlbGYubWV0aG9kIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYubWV0aG9kCi0gICAgICAgIGVsaWYgc2VsZi5kYXRhIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgcmV0dXJuICJQT1NUIgotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuICJHRVQiCisgICAgICAgIGRlZmF1bHRfbWV0aG9kID0gIlBPU1QiIGlmIHNlbGYuZGF0YSBpcyBub3QgTm9uZSBlbHNlICJHRVQiCisgICAgICAgIHJldHVybiBnZXRhdHRyKHNlbGYsICdtZXRob2QnLCBkZWZhdWx0X21ldGhvZCkKIAogICAgIGRlZiBnZXRfZnVsbF91cmwoc2VsZik6Ci0gICAgICAgIGlmIHNlbGYuZnJhZ21lbnQ6Ci0gICAgICAgICAgICByZXR1cm4gJyVzIyVzJyAlIChzZWxmLmZ1bGxfdXJsLCBzZWxmLmZyYWdtZW50KQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuZnVsbF91cmwKLQotICAgICMgQmVnaW4gZGVwcmVjYXRlZCBtZXRob2RzCi0KLSAgICBkZWYgYWRkX2RhdGEoc2VsZiwgZGF0YSk6Ci0gICAgICAgIG1zZyA9ICJSZXF1ZXN0LmFkZF9kYXRhIG1ldGhvZCBpcyBkZXByZWNhdGVkLiIKLSAgICAgICAgd2FybmluZ3Mud2Fybihtc2csIERlcHJlY2F0aW9uV2FybmluZywgc3RhY2tsZXZlbD0xKQotICAgICAgICBzZWxmLmRhdGEgPSBkYXRhCi0KLSAgICBkZWYgaGFzX2RhdGEoc2VsZik6Ci0gICAgICAgIG1zZyA9ICJSZXF1ZXN0Lmhhc19kYXRhIG1ldGhvZCBpcyBkZXByZWNhdGVkLiIKLSAgICAgICAgd2FybmluZ3Mud2Fybihtc2csIERlcHJlY2F0aW9uV2FybmluZywgc3RhY2tsZXZlbD0xKQotICAgICAgICByZXR1cm4gc2VsZi5kYXRhIGlzIG5vdCBOb25lCi0KLSAgICBkZWYgZ2V0X2RhdGEoc2VsZik6Ci0gICAgICAgIG1zZyA9ICJSZXF1ZXN0LmdldF9kYXRhIG1ldGhvZCBpcyBkZXByZWNhdGVkLiIKLSAgICAgICAgd2FybmluZ3Mud2Fybihtc2csIERlcHJlY2F0aW9uV2FybmluZywgc3RhY2tsZXZlbD0xKQotICAgICAgICByZXR1cm4gc2VsZi5kYXRhCi0KLSAgICBkZWYgZ2V0X3R5cGUoc2VsZik6Ci0gICAgICAgIG1zZyA9ICJSZXF1ZXN0LmdldF90eXBlIG1ldGhvZCBpcyBkZXByZWNhdGVkLiIKLSAgICAgICAgd2FybmluZ3Mud2Fybihtc2csIERlcHJlY2F0aW9uV2FybmluZywgc3RhY2tsZXZlbD0xKQotICAgICAgICByZXR1cm4gc2VsZi50eXBlCi0KLSAgICBkZWYgZ2V0X2hvc3Qoc2VsZik6Ci0gICAgICAgIG1zZyA9ICJSZXF1ZXN0LmdldF9ob3N0IG1ldGhvZCBpcyBkZXByZWNhdGVkLiIKLSAgICAgICAgd2FybmluZ3Mud2Fybihtc2csIERlcHJlY2F0aW9uV2FybmluZywgc3RhY2tsZXZlbD0xKQotICAgICAgICByZXR1cm4gc2VsZi5ob3N0Ci0KLSAgICBkZWYgZ2V0X3NlbGVjdG9yKHNlbGYpOgotICAgICAgICBtc2cgPSAiUmVxdWVzdC5nZXRfc2VsZWN0b3IgbWV0aG9kIGlzIGRlcHJlY2F0ZWQuIgotICAgICAgICB3YXJuaW5ncy53YXJuKG1zZywgRGVwcmVjYXRpb25XYXJuaW5nLCBzdGFja2xldmVsPTEpCi0gICAgICAgIHJldHVybiBzZWxmLnNlbGVjdG9yCi0KLSAgICBkZWYgaXNfdW52ZXJpZmlhYmxlKHNlbGYpOgotICAgICAgICBtc2cgPSAiUmVxdWVzdC5pc191bnZlcmlmaWFibGUgbWV0aG9kIGlzIGRlcHJlY2F0ZWQuIgotICAgICAgICB3YXJuaW5ncy53YXJuKG1zZywgRGVwcmVjYXRpb25XYXJuaW5nLCBzdGFja2xldmVsPTEpCi0gICAgICAgIHJldHVybiBzZWxmLnVudmVyaWZpYWJsZQotCi0gICAgZGVmIGdldF9vcmlnaW5fcmVxX2hvc3Qoc2VsZik6Ci0gICAgICAgIG1zZyA9ICJSZXF1ZXN0LmdldF9vcmlnaW5fcmVxX2hvc3QgbWV0aG9kIGlzIGRlcHJlY2F0ZWQuIgotICAgICAgICB3YXJuaW5ncy53YXJuKG1zZywgRGVwcmVjYXRpb25XYXJuaW5nLCBzdGFja2xldmVsPTEpCi0gICAgICAgIHJldHVybiBzZWxmLm9yaWdpbl9yZXFfaG9zdAotCi0gICAgIyBFbmQgZGVwcmVjYXRlZCBtZXRob2RzCisgICAgICAgIHJldHVybiBzZWxmLmZ1bGxfdXJsCiAKICAgICBkZWYgc2V0X3Byb3h5KHNlbGYsIGhvc3QsIHR5cGUpOgogICAgICAgICBpZiBzZWxmLnR5cGUgPT0gJ2h0dHBzJyBhbmQgbm90IHNlbGYuX3R1bm5lbF9ob3N0OgpAQCAtMzY5LDYgKzM2MCwxMCBAQAogICAgICAgICAgICAgaGVhZGVyX25hbWUsCiAgICAgICAgICAgICBzZWxmLnVucmVkaXJlY3RlZF9oZHJzLmdldChoZWFkZXJfbmFtZSwgZGVmYXVsdCkpCiAKKyAgICBkZWYgcmVtb3ZlX2hlYWRlcihzZWxmLCBoZWFkZXJfbmFtZSk6CisgICAgICAgIHNlbGYuaGVhZGVycy5wb3AoaGVhZGVyX25hbWUsIE5vbmUpCisgICAgICAgIHNlbGYudW5yZWRpcmVjdGVkX2hkcnMucG9wKGhlYWRlcl9uYW1lLCBOb25lKQorCiAgICAgZGVmIGhlYWRlcl9pdGVtcyhzZWxmKToKICAgICAgICAgaGRycyA9IHNlbGYudW5yZWRpcmVjdGVkX2hkcnMuY29weSgpCiAgICAgICAgIGhkcnMudXBkYXRlKHNlbGYuaGVhZGVycykKQEAgLTUyNSwxOSArNTIwLDE3IEBACiAgICAgSWYgYW55IG9mIHRoZSBoYW5kbGVycyBwYXNzZWQgYXMgYXJndW1lbnRzIGFyZSBzdWJjbGFzc2VzIG9mIHRoZQogICAgIGRlZmF1bHQgaGFuZGxlcnMsIHRoZSBkZWZhdWx0IGhhbmRsZXJzIHdpbGwgbm90IGJlIHVzZWQuCiAgICAgIiIiCi0gICAgZGVmIGlzY2xhc3Mob2JqKToKLSAgICAgICAgcmV0dXJuIGlzaW5zdGFuY2Uob2JqLCB0eXBlKSBvciBoYXNhdHRyKG9iaiwgIl9fYmFzZXNfXyIpCi0KICAgICBvcGVuZXIgPSBPcGVuZXJEaXJlY3RvcigpCiAgICAgZGVmYXVsdF9jbGFzc2VzID0gW1Byb3h5SGFuZGxlciwgVW5rbm93bkhhbmRsZXIsIEhUVFBIYW5kbGVyLAogICAgICAgICAgICAgICAgICAgICAgICBIVFRQRGVmYXVsdEVycm9ySGFuZGxlciwgSFRUUFJlZGlyZWN0SGFuZGxlciwKLSAgICAgICAgICAgICAgICAgICAgICAgRlRQSGFuZGxlciwgRmlsZUhhbmRsZXIsIEhUVFBFcnJvclByb2Nlc3Nvcl0KKyAgICAgICAgICAgICAgICAgICAgICAgRlRQSGFuZGxlciwgRmlsZUhhbmRsZXIsIEhUVFBFcnJvclByb2Nlc3NvciwKKyAgICAgICAgICAgICAgICAgICAgICAgRGF0YUhhbmRsZXJdCiAgICAgaWYgaGFzYXR0cihodHRwLmNsaWVudCwgIkhUVFBTQ29ubmVjdGlvbiIpOgogICAgICAgICBkZWZhdWx0X2NsYXNzZXMuYXBwZW5kKEhUVFBTSGFuZGxlcikKICAgICBza2lwID0gc2V0KCkKICAgICBmb3Iga2xhc3MgaW4gZGVmYXVsdF9jbGFzc2VzOgogICAgICAgICBmb3IgY2hlY2sgaW4gaGFuZGxlcnM6Ci0gICAgICAgICAgICBpZiBpc2NsYXNzKGNoZWNrKToKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoY2hlY2ssIHR5cGUpOgogICAgICAgICAgICAgICAgIGlmIGlzc3ViY2xhc3MoY2hlY2ssIGtsYXNzKToKICAgICAgICAgICAgICAgICAgICAgc2tpcC5hZGQoa2xhc3MpCiAgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2UoY2hlY2ssIGtsYXNzKToKQEAgLTU0OSw3ICs1NDIsNyBAQAogICAgICAgICBvcGVuZXIuYWRkX2hhbmRsZXIoa2xhc3MoKSkKIAogICAgIGZvciBoIGluIGhhbmRsZXJzOgotICAgICAgICBpZiBpc2NsYXNzKGgpOgorICAgICAgICBpZiBpc2luc3RhbmNlKGgsIHR5cGUpOgogICAgICAgICAgICAgaCA9IGgoKQogICAgICAgICBvcGVuZXIuYWRkX2hhbmRsZXIoaCkKICAgICByZXR1cm4gb3BlbmVyCkBAIC03MDMsNTAgKzY5Niw3IEBACiAKICAgICBJZiBhIFVSTCBpcyBzdXBwbGllZCwgaXQgbXVzdCBoYXZlIGFuIGF1dGhvcml0eSAoaG9zdDpwb3J0KSBjb21wb25lbnQuCiAgICAgQWNjb3JkaW5nIHRvIFJGQyAzOTg2LCBoYXZpbmcgYW4gYXV0aG9yaXR5IGNvbXBvbmVudCBtZWFucyB0aGUgVVJMIG11c3QKLSAgICBoYXZlIHR3byBzbGFzaGVzIGFmdGVyIHRoZSBzY2hlbWU6Ci0KLSAgICA+Pj4gX3BhcnNlX3Byb3h5KCdmaWxlOi9mdHAuZXhhbXBsZS5jb20vJykKLSAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6Ci0gICAgVmFsdWVFcnJvcjogcHJveHkgVVJMIHdpdGggbm8gYXV0aG9yaXR5OiAnZmlsZTovZnRwLmV4YW1wbGUuY29tLycKLQotICAgIFRoZSBmaXJzdCB0aHJlZSBpdGVtcyBvZiB0aGUgcmV0dXJuZWQgdHVwbGUgbWF5IGJlIE5vbmUuCi0KLSAgICBFeGFtcGxlcyBvZiBhdXRob3JpdHkgcGFyc2luZzoKLQotICAgID4+PiBfcGFyc2VfcHJveHkoJ3Byb3h5LmV4YW1wbGUuY29tJykKLSAgICAoTm9uZSwgTm9uZSwgTm9uZSwgJ3Byb3h5LmV4YW1wbGUuY29tJykKLSAgICA+Pj4gX3BhcnNlX3Byb3h5KCdwcm94eS5leGFtcGxlLmNvbTozMTI4JykKLSAgICAoTm9uZSwgTm9uZSwgTm9uZSwgJ3Byb3h5LmV4YW1wbGUuY29tOjMxMjgnKQotCi0gICAgVGhlIGF1dGhvcml0eSBjb21wb25lbnQgbWF5IG9wdGlvbmFsbHkgaW5jbHVkZSB1c2VyaW5mbyAoYXNzdW1lZCB0byBiZQotICAgIHVzZXJuYW1lOnBhc3N3b3JkKToKLQotICAgID4+PiBfcGFyc2VfcHJveHkoJ2pvZTpwYXNzd29yZEBwcm94eS5leGFtcGxlLmNvbScpCi0gICAgKE5vbmUsICdqb2UnLCAncGFzc3dvcmQnLCAncHJveHkuZXhhbXBsZS5jb20nKQotICAgID4+PiBfcGFyc2VfcHJveHkoJ2pvZTpwYXNzd29yZEBwcm94eS5leGFtcGxlLmNvbTozMTI4JykKLSAgICAoTm9uZSwgJ2pvZScsICdwYXNzd29yZCcsICdwcm94eS5leGFtcGxlLmNvbTozMTI4JykKLQotICAgIFNhbWUgZXhhbXBsZXMsIGJ1dCB3aXRoIFVSTHMgaW5zdGVhZDoKLQotICAgID4+PiBfcGFyc2VfcHJveHkoJ2h0dHA6Ly9wcm94eS5leGFtcGxlLmNvbS8nKQotICAgICgnaHR0cCcsIE5vbmUsIE5vbmUsICdwcm94eS5leGFtcGxlLmNvbScpCi0gICAgPj4+IF9wYXJzZV9wcm94eSgnaHR0cDovL3Byb3h5LmV4YW1wbGUuY29tOjMxMjgvJykKLSAgICAoJ2h0dHAnLCBOb25lLCBOb25lLCAncHJveHkuZXhhbXBsZS5jb206MzEyOCcpCi0gICAgPj4+IF9wYXJzZV9wcm94eSgnaHR0cDovL2pvZTpwYXNzd29yZEBwcm94eS5leGFtcGxlLmNvbS8nKQotICAgICgnaHR0cCcsICdqb2UnLCAncGFzc3dvcmQnLCAncHJveHkuZXhhbXBsZS5jb20nKQotICAgID4+PiBfcGFyc2VfcHJveHkoJ2h0dHA6Ly9qb2U6cGFzc3dvcmRAcHJveHkuZXhhbXBsZS5jb206MzEyOCcpCi0gICAgKCdodHRwJywgJ2pvZScsICdwYXNzd29yZCcsICdwcm94eS5leGFtcGxlLmNvbTozMTI4JykKLQotICAgIEV2ZXJ5dGhpbmcgYWZ0ZXIgdGhlIGF1dGhvcml0eSBpcyBpZ25vcmVkOgotCi0gICAgPj4+IF9wYXJzZV9wcm94eSgnZnRwOi8vam9lOnBhc3N3b3JkQHByb3h5LmV4YW1wbGUuY29tL3J1YmJpc2g6MzEyOCcpCi0gICAgKCdmdHAnLCAnam9lJywgJ3Bhc3N3b3JkJywgJ3Byb3h5LmV4YW1wbGUuY29tJykKLQotICAgIFRlc3QgZm9yIG5vIHRyYWlsaW5nICcvJyBjYXNlOgotCi0gICAgPj4+IF9wYXJzZV9wcm94eSgnaHR0cDovL2pvZTpwYXNzd29yZEBwcm94eS5leGFtcGxlLmNvbScpCi0gICAgKCdodHRwJywgJ2pvZScsICdwYXNzd29yZCcsICdwcm94eS5leGFtcGxlLmNvbScpCi0KKyAgICBoYXZlIHR3byBzbGFzaGVzIGFmdGVyIHRoZSBzY2hlbWUuCiAgICAgIiIiCiAgICAgc2NoZW1lLCByX3NjaGVtZSA9IHNwbGl0dHlwZShwcm94eSkKICAgICBpZiBub3Qgcl9zY2hlbWUuc3RhcnRzd2l0aCgiLyIpOgpAQCAtOTA1LDEwICs4NTUsNiBAQAogICAgICAgICAgICAgcGFzc3dvcmRfbWdyID0gSFRUUFBhc3N3b3JkTWdyKCkKICAgICAgICAgc2VsZi5wYXNzd2QgPSBwYXNzd29yZF9tZ3IKICAgICAgICAgc2VsZi5hZGRfcGFzc3dvcmQgPSBzZWxmLnBhc3N3ZC5hZGRfcGFzc3dvcmQKLSAgICAgICAgc2VsZi5yZXRyaWVkID0gMAotCi0gICAgZGVmIHJlc2V0X3JldHJ5X2NvdW50KHNlbGYpOgotICAgICAgICBzZWxmLnJldHJpZWQgPSAwCiAKICAgICBkZWYgaHR0cF9lcnJvcl9hdXRoX3JlcWVkKHNlbGYsIGF1dGhyZXEsIGhvc3QsIHJlcSwgaGVhZGVycyk6CiAgICAgICAgICMgaG9zdCBtYXkgYmUgYW4gYXV0aG9yaXR5ICh3aXRob3V0IHVzZXJpbmZvKSBvciBhIFVSTCB3aXRoIGFuCkBAIC05MTYsMTMgKzg2Miw2IEBACiAgICAgICAgICMgWFhYIGNvdWxkIGJlIG11bHRpcGxlIGhlYWRlcnMKICAgICAgICAgYXV0aHJlcSA9IGhlYWRlcnMuZ2V0KGF1dGhyZXEsIE5vbmUpCiAKLSAgICAgICAgaWYgc2VsZi5yZXRyaWVkID4gNToKLSAgICAgICAgICAgICMgcmV0cnkgc2VuZGluZyB0aGUgdXNlcm5hbWU6cGFzc3dvcmQgNSB0aW1lcyBiZWZvcmUgZmFpbGluZy4KLSAgICAgICAgICAgIHJhaXNlIEhUVFBFcnJvcihyZXEuZ2V0X2Z1bGxfdXJsKCksIDQwMSwgImJhc2ljIGF1dGggZmFpbGVkIiwKLSAgICAgICAgICAgICAgICAgICAgaGVhZGVycywgTm9uZSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYucmV0cmllZCArPSAxCi0KICAgICAgICAgaWYgYXV0aHJlcToKICAgICAgICAgICAgIHNjaGVtZSA9IGF1dGhyZXEuc3BsaXQoKVswXQogICAgICAgICAgICAgaWYgc2NoZW1lLmxvd2VyKCkgIT0gJ2Jhc2ljJzoKQEAgLTkzNywxNyArODc2LDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5ncy53YXJuKCJCYXNpYyBBdXRoIFJlYWxtIHdhcyB1bnF1b3RlZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJXYXJuaW5nLCAyKQogICAgICAgICAgICAgICAgICAgICBpZiBzY2hlbWUubG93ZXIoKSA9PSAnYmFzaWMnOgotICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBzZWxmLnJldHJ5X2h0dHBfYmFzaWNfYXV0aChob3N0LCByZXEsIHJlYWxtKQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgcmVzcG9uc2UgYW5kIHJlc3BvbnNlLmNvZGUgIT0gNDAxOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucmV0cmllZCA9IDAKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYucmV0cnlfaHR0cF9iYXNpY19hdXRoKGhvc3QsIHJlcSwgcmVhbG0pCiAKICAgICBkZWYgcmV0cnlfaHR0cF9iYXNpY19hdXRoKHNlbGYsIGhvc3QsIHJlcSwgcmVhbG0pOgogICAgICAgICB1c2VyLCBwdyA9IHNlbGYucGFzc3dkLmZpbmRfdXNlcl9wYXNzd29yZChyZWFsbSwgaG9zdCkKICAgICAgICAgaWYgcHcgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICByYXcgPSAiJXM6JXMiICUgKHVzZXIsIHB3KQogICAgICAgICAgICAgYXV0aCA9ICJCYXNpYyAiICsgYmFzZTY0LmI2NGVuY29kZShyYXcuZW5jb2RlKCkpLmRlY29kZSgiYXNjaWkiKQotICAgICAgICAgICAgaWYgcmVxLmhlYWRlcnMuZ2V0KHNlbGYuYXV0aF9oZWFkZXIsIE5vbmUpID09IGF1dGg6CisgICAgICAgICAgICBpZiByZXEuZ2V0X2hlYWRlcihzZWxmLmF1dGhfaGVhZGVyLCBOb25lKSA9PSBhdXRoOgogICAgICAgICAgICAgICAgIHJldHVybiBOb25lCiAgICAgICAgICAgICByZXEuYWRkX3VucmVkaXJlY3RlZF9oZWFkZXIoc2VsZi5hdXRoX2hlYWRlciwgYXV0aCkKICAgICAgICAgICAgIHJldHVybiBzZWxmLnBhcmVudC5vcGVuKHJlcSwgdGltZW91dD1yZXEudGltZW91dCkKQEAgLTk2Myw3ICs4OTksNiBAQAogICAgICAgICB1cmwgPSByZXEuZnVsbF91cmwKICAgICAgICAgcmVzcG9uc2UgPSBzZWxmLmh0dHBfZXJyb3JfYXV0aF9yZXFlZCgnd3d3LWF1dGhlbnRpY2F0ZScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmwsIHJlcSwgaGVhZGVycykKLSAgICAgICAgc2VsZi5yZXNldF9yZXRyeV9jb3VudCgpCiAgICAgICAgIHJldHVybiByZXNwb25zZQogCiAKQEAgLTk3OSw3ICs5MTQsNiBAQAogICAgICAgICBhdXRob3JpdHkgPSByZXEuaG9zdAogICAgICAgICByZXNwb25zZSA9IHNlbGYuaHR0cF9lcnJvcl9hdXRoX3JlcWVkKCdwcm94eS1hdXRoZW50aWNhdGUnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0aG9yaXR5LCByZXEsIGhlYWRlcnMpCi0gICAgICAgIHNlbGYucmVzZXRfcmV0cnlfY291bnQoKQogICAgICAgICByZXR1cm4gcmVzcG9uc2UKIAogCkBAIC0xMjQ1LDE4ICsxMTc5LDIxIEBACiAgICAgICAgICAgICBoLnNldF90dW5uZWwocmVxLl90dW5uZWxfaG9zdCwgaGVhZGVycz10dW5uZWxfaGVhZGVycykKIAogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBoLnJlcXVlc3QocmVxLmdldF9tZXRob2QoKSwgcmVxLnNlbGVjdG9yLCByZXEuZGF0YSwgaGVhZGVycykKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBlcnI6ICMgdGltZW91dCBlcnJvcgotICAgICAgICAgICAgaC5jbG9zZSgpCi0gICAgICAgICAgICByYWlzZSBVUkxFcnJvcihlcnIpCi0gICAgICAgIGVsc2U6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaC5yZXF1ZXN0KHJlcS5nZXRfbWV0aG9kKCksIHJlcS5zZWxlY3RvciwgcmVxLmRhdGEsIGhlYWRlcnMpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6ICMgdGltZW91dCBlcnJvcgorICAgICAgICAgICAgICAgIHJhaXNlIFVSTEVycm9yKGVycikKICAgICAgICAgICAgIHIgPSBoLmdldHJlc3BvbnNlKCkKLSAgICAgICAgICAgICMgSWYgdGhlIHNlcnZlciBkb2VzIG5vdCBzZW5kIHVzIGEgJ0Nvbm5lY3Rpb246IGNsb3NlJyBoZWFkZXIsCi0gICAgICAgICAgICAjIEhUVFBDb25uZWN0aW9uIGFzc3VtZXMgdGhlIHNvY2tldCBzaG91bGQgYmUgbGVmdCBvcGVuLiBNYW51YWxseQotICAgICAgICAgICAgIyBtYXJrIHRoZSBzb2NrZXQgdG8gYmUgY2xvc2VkIHdoZW4gdGhpcyByZXNwb25zZSBvYmplY3QgZ29lcyBhd2F5LgotICAgICAgICAgICAgaWYgaC5zb2NrOgotICAgICAgICAgICAgICAgIGguc29jay5jbG9zZSgpCi0gICAgICAgICAgICAgICAgaC5zb2NrID0gTm9uZQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBoLmNsb3NlKCkKKyAgICAgICAgICAgIHJhaXNlCisKKyAgICAgICAgIyBJZiB0aGUgc2VydmVyIGRvZXMgbm90IHNlbmQgdXMgYSAnQ29ubmVjdGlvbjogY2xvc2UnIGhlYWRlciwKKyAgICAgICAgIyBIVFRQQ29ubmVjdGlvbiBhc3N1bWVzIHRoZSBzb2NrZXQgc2hvdWxkIGJlIGxlZnQgb3Blbi4gTWFudWFsbHkKKyAgICAgICAgIyBtYXJrIHRoZSBzb2NrZXQgdG8gYmUgY2xvc2VkIHdoZW4gdGhpcyByZXNwb25zZSBvYmplY3QgZ29lcyBhd2F5LgorICAgICAgICBpZiBoLnNvY2s6CisgICAgICAgICAgICBoLnNvY2suY2xvc2UoKQorICAgICAgICAgICAgaC5zb2NrID0gTm9uZQogCiAgICAgICAgIHIudXJsID0gcmVxLmdldF9mdWxsX3VybCgpCiAgICAgICAgICMgVGhpcyBsaW5lIHJlcGxhY2VzIHRoZSAubXNnIGF0dHJpYnV0ZSBvZiB0aGUgSFRUUFJlc3BvbnNlCkBAIC0xMzc0LDcgKzEzMTEsNyBAQAogICAgICAgICB1cmwgPSByZXEuc2VsZWN0b3IKICAgICAgICAgaWYgdXJsWzoyXSA9PSAnLy8nIGFuZCB1cmxbMjozXSAhPSAnLycgYW5kIChyZXEuaG9zdCBhbmQKICAgICAgICAgICAgICAgICByZXEuaG9zdCAhPSAnbG9jYWxob3N0Jyk6Ci0gICAgICAgICAgICBpZiBub3QgcmVxLmhvc3QgaXMgc2VsZi5nZXRfbmFtZXMoKToKKyAgICAgICAgICAgIGlmIG5vdCByZXEuaG9zdCBpbiBzZWxmLmdldF9uYW1lcygpOgogICAgICAgICAgICAgICAgIHJhaXNlIFVSTEVycm9yKCJmaWxlOi8vIHNjaGVtZSBpcyBzdXBwb3J0ZWQgb25seSBvbiBsb2NhbGhvc3QiKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmV0dXJuIHNlbGYub3Blbl9sb2NhbF9maWxlKHJlcSkKQEAgLTE0NTEsNyArMTM4OCw3IEBACiAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgaG9zdCA9IHNvY2tldC5nZXRob3N0YnluYW1lKGhvc3QpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgbXNnOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBtc2c6CiAgICAgICAgICAgICByYWlzZSBVUkxFcnJvcihtc2cpCiAgICAgICAgIHBhdGgsIGF0dHJzID0gc3BsaXRhdHRyKHJlcS5zZWxlY3RvcikKICAgICAgICAgZGlycyA9IHBhdGguc3BsaXQoJy8nKQpAQCAtMTUzNyw2ICsxNDc0LDM2IEBACiAgICAgICAgIHNlbGYuY2FjaGUuY2xlYXIoKQogICAgICAgICBzZWxmLnRpbWVvdXQuY2xlYXIoKQogCitjbGFzcyBEYXRhSGFuZGxlcihCYXNlSGFuZGxlcik6CisgICAgZGVmIGRhdGFfb3BlbihzZWxmLCByZXEpOgorICAgICAgICAjIGRhdGEgVVJMcyBhcyBzcGVjaWZpZWQgaW4gUkZDIDIzOTcuCisgICAgICAgICMKKyAgICAgICAgIyBpZ25vcmVzIFBPU1RlZCBkYXRhCisgICAgICAgICMKKyAgICAgICAgIyBzeW50YXg6CisgICAgICAgICMgZGF0YXVybCAgIDo9ICJkYXRhOiIgWyBtZWRpYXR5cGUgXSBbICI7YmFzZTY0IiBdICIsIiBkYXRhCisgICAgICAgICMgbWVkaWF0eXBlIDo9IFsgdHlwZSAiLyIgc3VidHlwZSBdICooICI7IiBwYXJhbWV0ZXIgKQorICAgICAgICAjIGRhdGEgICAgICA6PSAqdXJsY2hhcgorICAgICAgICAjIHBhcmFtZXRlciA6PSBhdHRyaWJ1dGUgIj0iIHZhbHVlCisgICAgICAgIHVybCA9IHJlcS5mdWxsX3VybAorCisgICAgICAgIHNjaGVtZSwgZGF0YSA9IHVybC5zcGxpdCgiOiIsMSkKKyAgICAgICAgbWVkaWF0eXBlLCBkYXRhID0gZGF0YS5zcGxpdCgiLCIsMSkKKworICAgICAgICAjIGV2ZW4gYmFzZTY0IGVuY29kZWQgZGF0YSBVUkxzIG1pZ2h0IGJlIHF1b3RlZCBzbyB1bnF1b3RlIGluIGFueSBjYXNlOgorICAgICAgICBkYXRhID0gdW5xdW90ZV90b19ieXRlcyhkYXRhKQorICAgICAgICBpZiBtZWRpYXR5cGUuZW5kc3dpdGgoIjtiYXNlNjQiKToKKyAgICAgICAgICAgIGRhdGEgPSBiYXNlNjQuZGVjb2RlYnl0ZXMoZGF0YSkKKyAgICAgICAgICAgIG1lZGlhdHlwZSA9IG1lZGlhdHlwZVs6LTddCisKKyAgICAgICAgaWYgbm90IG1lZGlhdHlwZToKKyAgICAgICAgICAgIG1lZGlhdHlwZSA9ICJ0ZXh0L3BsYWluO2NoYXJzZXQ9VVMtQVNDSUkiCisKKyAgICAgICAgaGVhZGVycyA9IGVtYWlsLm1lc3NhZ2VfZnJvbV9zdHJpbmcoIkNvbnRlbnQtdHlwZTogJXNcbkNvbnRlbnQtbGVuZ3RoOiAlZFxuIiAlCisgICAgICAgICAgICAobWVkaWF0eXBlLCBsZW4oZGF0YSkpKQorCisgICAgICAgIHJldHVybiBhZGRpbmZvdXJsKGlvLkJ5dGVzSU8oZGF0YSksIGhlYWRlcnMsIHVybCkKKwogCiAjIENvZGUgbW92ZSBmcm9tIHRoZSBvbGQgdXJsbGliIG1vZHVsZQogCkBAIC0xNjYwLDIwICsxNjI3LDIwIEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIGdldGF0dHIoc2VsZiwgbmFtZSkodXJsKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0YXR0cihzZWxmLCBuYW1lKSh1cmwsIGRhdGEpCi0gICAgICAgIGV4Y2VwdCBIVFRQRXJyb3I6CisgICAgICAgIGV4Y2VwdCAoSFRUUEVycm9yLCBVUkxFcnJvcik6CiAgICAgICAgICAgICByYWlzZQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIG1zZzoKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoJ3NvY2tldCBlcnJvcicsIG1zZykud2l0aF90cmFjZWJhY2soc3lzLmV4Y19pbmZvKClbMl0pCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIG1zZzoKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoJ3NvY2tldCBlcnJvcicsIG1zZykud2l0aF90cmFjZWJhY2soc3lzLmV4Y19pbmZvKClbMl0pCiAKICAgICBkZWYgb3Blbl91bmtub3duKHNlbGYsIGZ1bGx1cmwsIGRhdGE9Tm9uZSk6CiAgICAgICAgICIiIk92ZXJyaWRhYmxlIGludGVyZmFjZSB0byBvcGVuIHVua25vd24gVVJMIHR5cGUuIiIiCiAgICAgICAgIHR5cGUsIHVybCA9IHNwbGl0dHlwZShmdWxsdXJsKQotICAgICAgICByYWlzZSBJT0Vycm9yKCd1cmwgZXJyb3InLCAndW5rbm93biB1cmwgdHlwZScsIHR5cGUpCisgICAgICAgIHJhaXNlIE9TRXJyb3IoJ3VybCBlcnJvcicsICd1bmtub3duIHVybCB0eXBlJywgdHlwZSkKIAogICAgIGRlZiBvcGVuX3Vua25vd25fcHJveHkoc2VsZiwgcHJveHksIGZ1bGx1cmwsIGRhdGE9Tm9uZSk6CiAgICAgICAgICIiIk92ZXJyaWRhYmxlIGludGVyZmFjZSB0byBvcGVuIHVua25vd24gVVJMIHR5cGUuIiIiCiAgICAgICAgIHR5cGUsIHVybCA9IHNwbGl0dHlwZShmdWxsdXJsKQotICAgICAgICByYWlzZSBJT0Vycm9yKCd1cmwgZXJyb3InLCAnaW52YWxpZCBwcm94eSBmb3IgJXMnICUgdHlwZSwgcHJveHkpCisgICAgICAgIHJhaXNlIE9TRXJyb3IoJ3VybCBlcnJvcicsICdpbnZhbGlkIHByb3h5IGZvciAlcycgJSB0eXBlLCBwcm94eSkKIAogICAgICMgRXh0ZXJuYWwgaW50ZXJmYWNlCiAgICAgZGVmIHJldHJpZXZlKHNlbGYsIHVybCwgZmlsZW5hbWU9Tm9uZSwgcmVwb3J0aG9vaz1Ob25lLCBkYXRhPU5vbmUpOgpAQCAtMTY4OSw3ICsxNjU2LDcgQEAKICAgICAgICAgICAgICAgICBoZHJzID0gZnAuaW5mbygpCiAgICAgICAgICAgICAgICAgZnAuY2xvc2UoKQogICAgICAgICAgICAgICAgIHJldHVybiB1cmwycGF0aG5hbWUoc3BsaXRob3N0KHVybDEpWzFdKSwgaGRycwotICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgbXNnOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgbXNnOgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgZnAgPSBzZWxmLm9wZW4odXJsLCBkYXRhKQogICAgICAgICB0cnk6CkBAIC0xNzgyLDcgKzE3NDksNyBAQAogICAgICAgICAgICAgICAgIGlmIHByb3h5X2J5cGFzcyhyZWFsaG9zdCk6CiAgICAgICAgICAgICAgICAgICAgIGhvc3QgPSByZWFsaG9zdAogCi0gICAgICAgIGlmIG5vdCBob3N0OiByYWlzZSBJT0Vycm9yKCdodHRwIGVycm9yJywgJ25vIGhvc3QgZ2l2ZW4nKQorICAgICAgICBpZiBub3QgaG9zdDogcmFpc2UgT1NFcnJvcignaHR0cCBlcnJvcicsICdubyBob3N0IGdpdmVuJykKIAogICAgICAgICBpZiBwcm94eV9wYXNzd2Q6CiAgICAgICAgICAgICBwcm94eV9wYXNzd2QgPSB1bnF1b3RlKHByb3h5X3Bhc3N3ZCkKQEAgLTE4NTUsNyArMTgyMiw3IEBACiAgICAgICAgIHJldHVybiBzZWxmLmh0dHBfZXJyb3JfZGVmYXVsdCh1cmwsIGZwLCBlcnJjb2RlLCBlcnJtc2csIGhlYWRlcnMpCiAKICAgICBkZWYgaHR0cF9lcnJvcl9kZWZhdWx0KHNlbGYsIHVybCwgZnAsIGVycmNvZGUsIGVycm1zZywgaGVhZGVycyk6Ci0gICAgICAgICIiIkRlZmF1bHQgZXJyb3IgaGFuZGxlcjogY2xvc2UgdGhlIGNvbm5lY3Rpb24gYW5kIHJhaXNlIElPRXJyb3IuIiIiCisgICAgICAgICIiIkRlZmF1bHQgZXJyb3IgaGFuZGxlcjogY2xvc2UgdGhlIGNvbm5lY3Rpb24gYW5kIHJhaXNlIE9TRXJyb3IuIiIiCiAgICAgICAgIGZwLmNsb3NlKCkKICAgICAgICAgcmFpc2UgSFRUUEVycm9yKHVybCwgZXJyY29kZSwgZXJybXNnLCBoZWFkZXJzLCBOb25lKQogCkBAIC0xOTQwLDcgKzE5MDcsNyBAQAogICAgICAgICAjIFhYWCB0aHJlYWQgdW5zYWZlIQogICAgICAgICBpZiBsZW4oc2VsZi5mdHBjYWNoZSkgPiBNQVhGVFBDQUNIRToKICAgICAgICAgICAgICMgUHJ1bmUgdGhlIGNhY2hlLCByYXRoZXIgYXJiaXRyYXJpbHkKLSAgICAgICAgICAgIGZvciBrIGluIHNlbGYuZnRwY2FjaGUua2V5cygpOgorICAgICAgICAgICAgZm9yIGsgaW4gbGlzdChzZWxmLmZ0cGNhY2hlKToKICAgICAgICAgICAgICAgICBpZiBrICE9IGtleToKICAgICAgICAgICAgICAgICAgICAgdiA9IHNlbGYuZnRwY2FjaGVba10KICAgICAgICAgICAgICAgICAgICAgZGVsIHNlbGYuZnRwY2FjaGVba10KQEAgLTE5ODIsNyArMTk0OSw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIFt0eXBlLCBkYXRhXSA9IHVybC5zcGxpdCgnLCcsIDEpCiAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcignZGF0YSBlcnJvcicsICdiYWQgZGF0YSBVUkwnKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcignZGF0YSBlcnJvcicsICdiYWQgZGF0YSBVUkwnKQogICAgICAgICBpZiBub3QgdHlwZToKICAgICAgICAgICAgIHR5cGUgPSAndGV4dC9wbGFpbjtjaGFyc2V0PVVTLUFTQ0lJJwogICAgICAgICBzZW1pID0gdHlwZS5yZmluZCgnOycpCkBAIC0yMjc0LDcgKzIyNDEsMTEgQEAKICAgICAgICAgc2VsZi50aW1lb3V0ID0gdGltZW91dAogICAgICAgICBzZWxmLnJlZmNvdW50ID0gMAogICAgICAgICBzZWxmLmtlZXBhbGl2ZSA9IHBlcnNpc3RlbnQKLSAgICAgICAgc2VsZi5pbml0KCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5pbml0KCkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgc2VsZi5jbG9zZSgpCisgICAgICAgICAgICByYWlzZQogCiAgICAgZGVmIGluaXQoc2VsZik6CiAgICAgICAgIGltcG9ydCBmdHBsaWIKQEAgLTI0MzEsNyArMjQwMiw3IEBACiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBob3N0SVAgPSBzb2NrZXQuZ2V0aG9zdGJ5bmFtZShob3N0b25seSkKICAgICAgICAgICAgICAgICAgICAgaG9zdElQID0gaXAybnVtKGhvc3RJUCkKLSAgICAgICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgICAgICBjb250aW51ZQogCiAgICAgICAgICAgICBiYXNlID0gaXAybnVtKG0uZ3JvdXAoMSkpCkBAIC0yNTE3LDcgKzI0ODgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgcHJveGllc1snaHR0cHMnXSA9ICdodHRwczovLyVzJyAlIHByb3h5U2VydmVyCiAgICAgICAgICAgICAgICAgICAgICAgICBwcm94aWVzWydmdHAnXSA9ICdmdHA6Ly8lcycgJSBwcm94eVNlcnZlcgogICAgICAgICAgICAgaW50ZXJuZXRTZXR0aW5ncy5DbG9zZSgpCi0gICAgICAgIGV4Y2VwdCAoV2luZG93c0Vycm9yLCBWYWx1ZUVycm9yLCBUeXBlRXJyb3IpOgorICAgICAgICBleGNlcHQgKE9TRXJyb3IsIFZhbHVlRXJyb3IsIFR5cGVFcnJvcik6CiAgICAgICAgICAgICAjIEVpdGhlciByZWdpc3RyeSBrZXkgbm90IGZvdW5kIGV0Yywgb3IgdGhlIHZhbHVlIGluIGFuCiAgICAgICAgICAgICAjIHVuZXhwZWN0ZWQgZm9ybWF0LgogICAgICAgICAgICAgIyBwcm94aWVzIGFscmVhZHkgc2V0IHVwIHRvIGJlIGVtcHR5IHNvIG5vdGhpbmcgdG8gZG8KQEAgLTI1NDcsNyArMjUxOCw3IEBACiAgICAgICAgICAgICBwcm94eU92ZXJyaWRlID0gc3RyKHdpbnJlZy5RdWVyeVZhbHVlRXgoaW50ZXJuZXRTZXR0aW5ncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1Byb3h5T3ZlcnJpZGUnKVswXSkKICAgICAgICAgICAgICMgXl5eXiBSZXR1cm5lZCBhcyBVbmljb2RlIGJ1dCBwcm9ibGVtcyBpZiBub3QgY29udmVydGVkIHRvIEFTQ0lJCi0gICAgICAgIGV4Y2VwdCBXaW5kb3dzRXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcmV0dXJuIDAKICAgICAgICAgaWYgbm90IHByb3h5RW5hYmxlIG9yIG5vdCBwcm94eU92ZXJyaWRlOgogICAgICAgICAgICAgcmV0dXJuIDAKQEAgLTI1NTgsMTMgKzI1MjksMTMgQEAKICAgICAgICAgICAgIGFkZHIgPSBzb2NrZXQuZ2V0aG9zdGJ5bmFtZShyYXdIb3N0KQogICAgICAgICAgICAgaWYgYWRkciAhPSByYXdIb3N0OgogICAgICAgICAgICAgICAgIGhvc3QuYXBwZW5kKGFkZHIpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcGFzcwogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmcWRuID0gc29ja2V0LmdldGZxZG4ocmF3SG9zdCkKICAgICAgICAgICAgIGlmIGZxZG4gIT0gcmF3SG9zdDoKICAgICAgICAgICAgICAgICBob3N0LmFwcGVuZChmcWRuKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgIyBtYWtlIGEgY2hlY2sgdmFsdWUgbGlzdCBmcm9tIHRoZSByZWdpc3RyeSBlbnRyeTogcmVwbGFjZSB0aGUKICAgICAgICAgIyAnPGxvY2FsPicgc3RyaW5nIGJ5IHRoZSBsb2NhbGhvc3QgZW50cnkgYW5kIHRoZSBjb3JyZXNwb25kaW5nCmRpZmYgLS1naXQgYS9MaWIvdXJsbGliL3Jlc3BvbnNlLnB5IGIvTGliL3VybGxpYi9yZXNwb25zZS5weQppbmRleCAxY2YxZDFhLi40Nzc4MTE4IDEwMDY0NAotLS0gYS9MaWIvdXJsbGliL3Jlc3BvbnNlLnB5CisrKyBiL0xpYi91cmxsaWIvcmVzcG9uc2UucHkKQEAgLTYsOTIgKzYsNzMgQEAKIGhlYWRlcnMgYW5kIGEgZ2V0dXJsKCkgbWV0aG9kIHRoYXQgcmV0dXJucyB0aGUgdXJsLgogIiIiCiAKLWNsYXNzIGFkZGJhc2Uob2JqZWN0KToKLSAgICAiIiJCYXNlIGNsYXNzIGZvciBhZGRpbmZvIGFuZCBhZGRjbG9zZWhvb2suIiIiCitpbXBvcnQgdGVtcGZpbGUKKworX19hbGxfXyA9IFsnYWRkYmFzZScsICdhZGRjbG9zZWhvb2snLCAnYWRkaW5mbycsICdhZGRpbmZvdXJsJ10KKworCitjbGFzcyBhZGRiYXNlKHRlbXBmaWxlLl9UZW1wb3JhcnlGaWxlV3JhcHBlcik6CisgICAgIiIiQmFzZSBjbGFzcyBmb3IgYWRkaW5mbyBhbmQgYWRkY2xvc2Vob29rLiBJcyBhIGdvb2QgaWRlYSBmb3IgZ2FyYmFnZSBjb2xsZWN0aW9uLiIiIgogCiAgICAgIyBYWFggQWRkIGEgbWV0aG9kIHRvIGV4cG9zZSB0aGUgdGltZW91dCBvbiB0aGUgdW5kZXJseWluZyBzb2NrZXQ/CiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgZnApOgotICAgICAgICAjIFRPRE8oamh5bHRvbik6IElzIHRoZXJlIGEgYmV0dGVyIHdheSB0byBkZWxlZ2F0ZSB1c2luZyBpbz8KKyAgICAgICAgc3VwZXIoYWRkYmFzZSwgIHNlbGYpLl9faW5pdF9fKGZwLCAnPHVybGxpYiByZXNwb25zZT4nLCBkZWxldGU9RmFsc2UpCisgICAgICAgICMgS2VlcCByZWZlcmVuY2UgYXJvdW5kIGFzIHRoaXMgd2FzIHBhcnQgb2YgdGhlIG9yaWdpbmFsIEFQSS4KICAgICAgICAgc2VsZi5mcCA9IGZwCi0gICAgICAgIHNlbGYucmVhZCA9IHNlbGYuZnAucmVhZAotICAgICAgICBzZWxmLnJlYWRsaW5lID0gc2VsZi5mcC5yZWFkbGluZQotICAgICAgICAjIFRPRE8oamh5bHRvbik6IE1ha2Ugc3VyZSBhbiBvYmplY3Qgd2l0aCByZWFkbGluZXMoKSBpcyBhbHNvIGl0ZXJhYmxlCi0gICAgICAgIGlmIGhhc2F0dHIoc2VsZi5mcCwgInJlYWRsaW5lcyIpOgotICAgICAgICAgICAgc2VsZi5yZWFkbGluZXMgPSBzZWxmLmZwLnJlYWRsaW5lcwotICAgICAgICBpZiBoYXNhdHRyKHNlbGYuZnAsICJmaWxlbm8iKToKLSAgICAgICAgICAgIHNlbGYuZmlsZW5vID0gc2VsZi5mcC5maWxlbm8KLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmlsZW5vID0gbGFtYmRhOiBOb25lCi0KLSAgICBkZWYgX19pdGVyX18oc2VsZik6Ci0gICAgICAgICMgQXNzaWduaW5nIGBfX2l0ZXJfX2AgdG8gdGhlIGluc3RhbmNlIGRvZXNuJ3Qgd29yayBhcyBpbnRlbmRlZAotICAgICAgICAjIGJlY2F1c2UgdGhlIGl0ZXIgYnVpbHRpbiBkb2VzIHNvbWV0aGluZyBsaWtlIGBjbHMuX19pdGVyX18ob2JqKWAKLSAgICAgICAgIyBhbmQgdGh1cyBmYWlscyB0byBmaW5kIHRoZSBfYm91bmRfIG1ldGhvZCBgb2JqLl9faXRlcl9fYC4KLSAgICAgICAgIyBSZXR1cm5pbmcganVzdCBgc2VsZi5mcGAgd29ya3MgZm9yIGJ1aWx0LWluIGZpbGUgb2JqZWN0cyBidXQKLSAgICAgICAgIyBtaWdodCBub3Qgd29yayBmb3IgZ2VuZXJhbCBmaWxlLWxpa2Ugb2JqZWN0cy4KLSAgICAgICAgcmV0dXJuIGl0ZXIoc2VsZi5mcCkKIAogICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgICAgICAgcmV0dXJuICc8JXMgYXQgJXIgd2hvc2UgZnAgPSAlcj4nICUgKHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQoc2VsZiksIHNlbGYuZnApCi0KLSAgICBkZWYgY2xvc2Uoc2VsZik6Ci0gICAgICAgIGlmIHNlbGYuZnA6Ci0gICAgICAgICAgICBzZWxmLmZwLmNsb3NlKCkKLSAgICAgICAgc2VsZi5mcCA9IE5vbmUKLSAgICAgICAgc2VsZi5yZWFkID0gTm9uZQotICAgICAgICBzZWxmLnJlYWRsaW5lID0gTm9uZQotICAgICAgICBzZWxmLnJlYWRsaW5lcyA9IE5vbmUKLSAgICAgICAgc2VsZi5maWxlbm8gPSBOb25lCi0gICAgICAgIHNlbGYuX19pdGVyX18gPSBOb25lCi0gICAgICAgIHNlbGYuX19uZXh0X18gPSBOb25lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZChzZWxmKSwgc2VsZi5maWxlKQogCiAgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKLSAgICAgICAgaWYgc2VsZi5mcCBpcyBOb25lOgorICAgICAgICBpZiBzZWxmLmZwLmNsb3NlZDoKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkkvTyBvcGVyYXRpb24gb24gY2xvc2VkIGZpbGUiKQogICAgICAgICByZXR1cm4gc2VsZgogCiAgICAgZGVmIF9fZXhpdF9fKHNlbGYsIHR5cGUsIHZhbHVlLCB0cmFjZWJhY2spOgogICAgICAgICBzZWxmLmNsb3NlKCkKIAorCiBjbGFzcyBhZGRjbG9zZWhvb2soYWRkYmFzZSk6CiAgICAgIiIiQ2xhc3MgdG8gYWRkIGEgY2xvc2UgaG9vayB0byBhbiBvcGVuIGZpbGUuIiIiCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgZnAsIGNsb3NlaG9vaywgKmhvb2thcmdzKToKLSAgICAgICAgYWRkYmFzZS5fX2luaXRfXyhzZWxmLCBmcCkKKyAgICAgICAgc3VwZXIoYWRkY2xvc2Vob29rLCBzZWxmKS5fX2luaXRfXyhmcCkKICAgICAgICAgc2VsZi5jbG9zZWhvb2sgPSBjbG9zZWhvb2sKICAgICAgICAgc2VsZi5ob29rYXJncyA9IGhvb2thcmdzCiAKICAgICBkZWYgY2xvc2Uoc2VsZik6Ci0gICAgICAgIGlmIHNlbGYuY2xvc2Vob29rOgotICAgICAgICAgICAgc2VsZi5jbG9zZWhvb2soKnNlbGYuaG9va2FyZ3MpCi0gICAgICAgICAgICBzZWxmLmNsb3NlaG9vayA9IE5vbmUKLSAgICAgICAgICAgIHNlbGYuaG9va2FyZ3MgPSBOb25lCi0gICAgICAgIGFkZGJhc2UuY2xvc2Uoc2VsZikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY2xvc2Vob29rID0gc2VsZi5jbG9zZWhvb2sKKyAgICAgICAgICAgIGhvb2thcmdzID0gc2VsZi5ob29rYXJncworICAgICAgICAgICAgaWYgY2xvc2Vob29rOgorICAgICAgICAgICAgICAgIHNlbGYuY2xvc2Vob29rID0gTm9uZQorICAgICAgICAgICAgICAgIHNlbGYuaG9va2FyZ3MgPSBOb25lCisgICAgICAgICAgICAgICAgY2xvc2Vob29rKCpob29rYXJncykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHN1cGVyKGFkZGNsb3NlaG9vaywgc2VsZikuY2xvc2UoKQorCiAKIGNsYXNzIGFkZGluZm8oYWRkYmFzZSk6CiAgICAgIiIiY2xhc3MgdG8gYWRkIGFuIGluZm8oKSBtZXRob2QgdG8gYW4gb3BlbiBmaWxlLiIiIgogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZwLCBoZWFkZXJzKToKLSAgICAgICAgYWRkYmFzZS5fX2luaXRfXyhzZWxmLCBmcCkKKyAgICAgICAgc3VwZXIoYWRkaW5mbywgc2VsZikuX19pbml0X18oZnApCiAgICAgICAgIHNlbGYuaGVhZGVycyA9IGhlYWRlcnMKIAogICAgIGRlZiBpbmZvKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5oZWFkZXJzCiAKLWNsYXNzIGFkZGluZm91cmwoYWRkYmFzZSk6CisKK2NsYXNzIGFkZGluZm91cmwoYWRkaW5mbyk6CiAgICAgIiIiY2xhc3MgdG8gYWRkIGluZm8oKSBhbmQgZ2V0dXJsKCkgbWV0aG9kcyB0byBhbiBvcGVuIGZpbGUuIiIiCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgZnAsIGhlYWRlcnMsIHVybCwgY29kZT1Ob25lKToKLSAgICAgICAgYWRkYmFzZS5fX2luaXRfXyhzZWxmLCBmcCkKLSAgICAgICAgc2VsZi5oZWFkZXJzID0gaGVhZGVycworICAgICAgICBzdXBlcihhZGRpbmZvdXJsLCBzZWxmKS5fX2luaXRfXyhmcCwgaGVhZGVycykKICAgICAgICAgc2VsZi51cmwgPSB1cmwKICAgICAgICAgc2VsZi5jb2RlID0gY29kZQogCi0gICAgZGVmIGluZm8oc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLmhlYWRlcnMKLQogICAgIGRlZiBnZXRjb2RlKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5jb2RlCiAKZGlmZiAtLWdpdCBhL0xpYi91cmxsaWIvcm9ib3RwYXJzZXIucHkgYi9MaWIvdXJsbGliL3JvYm90cGFyc2VyLnB5CmluZGV4IDk3OGJhNTguLjFkN2I3NTEgMTAwNjQ0Ci0tLSBhL0xpYi91cmxsaWIvcm9ib3RwYXJzZXIucHkKKysrIGIvTGliL3VybGxpYi9yb2JvdHBhcnNlci5weQpAQCAtNyw3ICs3LDcgQEAKICAgICAyKSBQU0YgbGljZW5zZSBmb3IgUHl0aG9uIDIuMgogCiAgICAgVGhlIHJvYm90cy50eHQgRXhjbHVzaW9uIFByb3RvY29sIGlzIGltcGxlbWVudGVkIGFzIHNwZWNpZmllZCBpbgotICAgIGh0dHA6Ly9pbmZvLndlYmNyYXdsZXIuY29tL21hay9wcm9qZWN0cy9yb2JvdHMvbm9yb2JvdHMtcmZjLmh0bWwKKyAgICBodHRwOi8vd3d3LnJvYm90c3R4dC5vcmcvbm9yb2JvdHMtcmZjLnR4dAogIiIiCiAKIGltcG9ydCB1cmxsaWIucGFyc2UsIHVybGxpYi5yZXF1ZXN0CkBAIC01Nyw3ICs1Nyw3IEBACiAgICAgICAgIGV4Y2VwdCB1cmxsaWIuZXJyb3IuSFRUUEVycm9yIGFzIGVycjoKICAgICAgICAgICAgIGlmIGVyci5jb2RlIGluICg0MDEsIDQwMyk6CiAgICAgICAgICAgICAgICAgc2VsZi5kaXNhbGxvd19hbGwgPSBUcnVlCi0gICAgICAgICAgICBlbGlmIGVyci5jb2RlID49IDQwMDoKKyAgICAgICAgICAgIGVsaWYgZXJyLmNvZGUgPj0gNDAwIGFuZCBlcnIuY29kZSA8IDUwMDoKICAgICAgICAgICAgICAgICBzZWxmLmFsbG93X2FsbCA9IFRydWUKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHJhdyA9IGYucmVhZCgpCkBAIC04NSw2ICs4NSw3IEBACiAgICAgICAgIHN0YXRlID0gMAogICAgICAgICBlbnRyeSA9IEVudHJ5KCkKIAorICAgICAgICBzZWxmLm1vZGlmaWVkKCkKICAgICAgICAgZm9yIGxpbmUgaW4gbGluZXM6CiAgICAgICAgICAgICBpZiBub3QgbGluZToKICAgICAgICAgICAgICAgICBpZiBzdGF0ZSA9PSAxOgpAQCAtMTI5LDYgKzEzMCwxMiBAQAogICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgIGlmIHNlbGYuYWxsb3dfYWxsOgogICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgIyBVbnRpbCB0aGUgcm9ib3RzLnR4dCBmaWxlIGhhcyBiZWVuIHJlYWQgb3IgZm91bmQgbm90CisgICAgICAgICMgdG8gZXhpc3QsIHdlIG11c3QgYXNzdW1lIHRoYXQgbm8gdXJsIGlzIGFsbG93YWJsZS4KKyAgICAgICAgIyBUaGlzIHByZXZlbnRzIGZhbHNlIHBvc2l0aXZlcyB3aGVuIGEgdXNlciBlcnJvbmVub3VzbHkKKyAgICAgICAgIyBjYWxscyBjYW5fZmV0Y2goKSBiZWZvcmUgY2FsbGluZyByZWFkKCkuCisgICAgICAgIGlmIG5vdCBzZWxmLmxhc3RfY2hlY2tlZDoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICAjIHNlYXJjaCBmb3IgZ2l2ZW4gdXNlciBhZ2VudCBtYXRjaGVzCiAgICAgICAgICMgdGhlIGZpcnN0IG1hdGNoIGNvdW50cwogICAgICAgICBwYXJzZWRfdXJsID0gdXJsbGliLnBhcnNlLnVybHBhcnNlKHVybGxpYi5wYXJzZS51bnF1b3RlKHVybCkpCmRpZmYgLS1naXQgYS9MaWIvdXVpZC5weSBiL0xpYi91dWlkLnB5CmluZGV4IDk5NDYwNDIuLjEwNjFiZmYgMTAwNjQ0Ci0tLSBhL0xpYi91dWlkLnB5CisrKyBiL0xpYi91dWlkLnB5CkBAIC0xNDcsNyArMTQ3LDcgQEAKICAgICAgICAgICAgIGlmIGxlbihieXRlcykgIT0gMTY6CiAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignYnl0ZXMgaXMgbm90IGEgMTYtY2hhciBzdHJpbmcnKQogICAgICAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoYnl0ZXMsIGJ5dGVzXyksIHJlcHIoYnl0ZXMpCi0gICAgICAgICAgICBpbnQgPSBpbnRfKCgnJTAyeCcqMTYpICUgdHVwbGUoYnl0ZXMpLCAxNikKKyAgICAgICAgICAgIGludCA9IGludF8uZnJvbV9ieXRlcyhieXRlcywgYnl0ZW9yZGVyPSdiaWcnKQogICAgICAgICBpZiBmaWVsZHMgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBpZiBsZW4oZmllbGRzKSAhPSA2OgogICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ2ZpZWxkcyBpcyBub3QgYSA2LXR1cGxlJykKQEAgLTMxMSw3ICszMTEsNyBAQAogICAgICAgICBpZiBzZWxmLnZhcmlhbnQgPT0gUkZDXzQxMjI6CiAgICAgICAgICAgICByZXR1cm4gaW50KChzZWxmLmludCA+PiA3NikgJiAweGYpCiAKLWRlZiBfZmluZF9tYWMoY29tbWFuZCwgYXJncywgaHdfaWRlbnRpZmllcnMsIGdldF9pbmRleCk6CitkZWYgX3BvcGVuKGNvbW1hbmQsIGFyZ3MpOgogICAgIGltcG9ydCBvcywgc2h1dGlsCiAgICAgZXhlY3V0YWJsZSA9IHNodXRpbC53aGljaChjb21tYW5kKQogICAgIGlmIGV4ZWN1dGFibGUgaXMgTm9uZToKQEAgLTMxOSwxOSArMzE5LDI3IEBACiAgICAgICAgIGV4ZWN1dGFibGUgPSBzaHV0aWwud2hpY2goY29tbWFuZCwgcGF0aD1wYXRoKQogICAgICAgICBpZiBleGVjdXRhYmxlIGlzIE5vbmU6CiAgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICMgTENfQUxMIHRvIGVuc3VyZSBFbmdsaXNoIG91dHB1dCwgMj4vZGV2L251bGwgdG8gcHJldmVudCBvdXRwdXQgb24KKyAgICAjIHN0ZGVyciAoTm90ZTogd2UgZG9uJ3QgaGF2ZSBhbiBleGFtcGxlIHdoZXJlIHRoZSB3b3JkcyB3ZSBzZWFyY2ggZm9yCisgICAgIyBhcmUgYWN0dWFsbHkgbG9jYWxpemVkLCBidXQgaW4gdGhlb3J5IHNvbWUgc3lzdGVtIGNvdWxkIGRvIHNvLikKKyAgICBjbWQgPSAnTENfQUxMPUMgJXMgJXMgMj4vZGV2L251bGwnICUgKGV4ZWN1dGFibGUsIGFyZ3MpCisgICAgcmV0dXJuIG9zLnBvcGVuKGNtZCkKIAorZGVmIF9maW5kX21hYyhjb21tYW5kLCBhcmdzLCBod19pZGVudGlmaWVycywgZ2V0X2luZGV4KToKICAgICB0cnk6Ci0gICAgICAgICMgTENfQUxMIHRvIGVuc3VyZSBFbmdsaXNoIG91dHB1dCwgMj4vZGV2L251bGwgdG8KLSAgICAgICAgIyBwcmV2ZW50IG91dHB1dCBvbiBzdGRlcnIKLSAgICAgICAgY21kID0gJ0xDX0FMTD1DICVzICVzIDI+L2Rldi9udWxsJyAlIChleGVjdXRhYmxlLCBhcmdzKQotICAgICAgICB3aXRoIG9zLnBvcGVuKGNtZCkgYXMgcGlwZToKKyAgICAgICAgcGlwZSA9IF9wb3Blbihjb21tYW5kLCBhcmdzKQorICAgICAgICBpZiBub3QgcGlwZToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICB3aXRoIHBpcGU6CiAgICAgICAgICAgICBmb3IgbGluZSBpbiBwaXBlOgotICAgICAgICAgICAgICAgIHdvcmRzID0gbGluZS5sb3dlcigpLnNwbGl0KCkKKyAgICAgICAgICAgICAgICB3b3JkcyA9IGxpbmUubG93ZXIoKS5yc3RyaXAoKS5zcGxpdCgpCiAgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKHdvcmRzKSk6CiAgICAgICAgICAgICAgICAgICAgIGlmIHdvcmRzW2ldIGluIGh3X2lkZW50aWZpZXJzOgogICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmRzW2dldF9pbmRleChpKV0ucmVwbGFjZSgnOicsICcnKSwgMTYpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29yZCA9IHdvcmRzW2dldF9pbmRleChpKV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWMgPSBpbnQod29yZC5yZXBsYWNlKCc6JywgJycpLCAxNikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBtYWM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYWMKICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCAoVmFsdWVFcnJvciwgSW5kZXhFcnJvcik6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBWaXJ0dWFsIGludGVyZmFjZXMsIHN1Y2ggYXMgdGhvc2UgcHJvdmlkZWQgYnkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFZQTnMsIGRvIG5vdCBoYXZlIGEgY29sb24tZGVsaW1pdGVkIE1BQyBhZGRyZXNzCkBAIC0zMzksMzIgKzM0Nyw1OCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZGFzaGVzLiBUaGVzZSBzaG91bGQgYmUgaWdub3JlZCBpbiBmYXZvciBvZiBhCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyByZWFsIE1BQyBhZGRyZXNzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzcwotICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICBwYXNzCiAKIGRlZiBfaWZjb25maWdfZ2V0bm9kZSgpOgogICAgICIiIkdldCB0aGUgaGFyZHdhcmUgYWRkcmVzcyBvbiBVbml4IGJ5IHJ1bm5pbmcgaWZjb25maWcuIiIiCi0KICAgICAjIFRoaXMgd29ya3Mgb24gTGludXggKCcnIG9yICctYScpLCBUcnU2NCAoJy1hdicpLCBidXQgbm90IGFsbCBVbml4ZXMuCiAgICAgZm9yIGFyZ3MgaW4gKCcnLCAnLWEnLCAnLWF2Jyk6CiAgICAgICAgIG1hYyA9IF9maW5kX21hYygnaWZjb25maWcnLCBhcmdzLCBbJ2h3YWRkcicsICdldGhlciddLCBsYW1iZGEgaTogaSsxKQogICAgICAgICBpZiBtYWM6CiAgICAgICAgICAgICByZXR1cm4gbWFjCiAKLSAgICBpbXBvcnQgc29ja2V0Ci0gICAgaXBfYWRkciA9IHNvY2tldC5nZXRob3N0YnluYW1lKHNvY2tldC5nZXRob3N0bmFtZSgpKQorZGVmIF9hcnBfZ2V0bm9kZSgpOgorICAgICIiIkdldCB0aGUgaGFyZHdhcmUgYWRkcmVzcyBvbiBVbml4IGJ5IHJ1bm5pbmcgYXJwLiIiIgorICAgIGltcG9ydCBvcywgc29ja2V0CisgICAgdHJ5OgorICAgICAgICBpcF9hZGRyID0gc29ja2V0LmdldGhvc3RieW5hbWUoc29ja2V0LmdldGhvc3RuYW1lKCkpCisgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgIHJldHVybiBOb25lCiAKICAgICAjIFRyeSBnZXR0aW5nIHRoZSBNQUMgYWRkciBmcm9tIGFycCBiYXNlZCBvbiBvdXIgSVAgYWRkcmVzcyAoU29sYXJpcykuCi0gICAgbWFjID0gX2ZpbmRfbWFjKCdhcnAnLCAnLWFuJywgW2lwX2FkZHJdLCBsYW1iZGEgaTogLTEpCi0gICAgaWYgbWFjOgotICAgICAgICByZXR1cm4gbWFjCisgICAgcmV0dXJuIF9maW5kX21hYygnYXJwJywgJy1hbicsIFtpcF9hZGRyXSwgbGFtYmRhIGk6IC0xKQogCitkZWYgX2xhbnNjYW5fZ2V0bm9kZSgpOgorICAgICIiIkdldCB0aGUgaGFyZHdhcmUgYWRkcmVzcyBvbiBVbml4IGJ5IHJ1bm5pbmcgbGFuc2Nhbi4iIiIKICAgICAjIFRoaXMgbWlnaHQgd29yayBvbiBIUC1VWC4KLSAgICBtYWMgPSBfZmluZF9tYWMoJ2xhbnNjYW4nLCAnLWFpJywgWydsYW4wJ10sIGxhbWJkYSBpOiAwKQotICAgIGlmIG1hYzoKLSAgICAgICAgcmV0dXJuIG1hYworICAgIHJldHVybiBfZmluZF9tYWMoJ2xhbnNjYW4nLCAnLWFpJywgWydsYW4wJ10sIGxhbWJkYSBpOiAwKQogCi0gICAgcmV0dXJuIE5vbmUKK2RlZiBfbmV0c3RhdF9nZXRub2RlKCk6CisgICAgIiIiR2V0IHRoZSBoYXJkd2FyZSBhZGRyZXNzIG9uIFVuaXggYnkgcnVubmluZyBuZXRzdGF0LiIiIgorICAgICMgVGhpcyBtaWdodCB3b3JrIG9uIEFJWCwgVHJ1NjQgVU5JWCBhbmQgcHJlc3VtYWJseSBvbiBJUklYLgorICAgIHRyeToKKyAgICAgICAgcGlwZSA9IF9wb3BlbignbmV0c3RhdCcsICctaWEnKQorICAgICAgICBpZiBub3QgcGlwZToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICB3aXRoIHBpcGU6CisgICAgICAgICAgICB3b3JkcyA9IHBpcGUucmVhZGxpbmUoKS5yc3RyaXAoKS5zcGxpdCgpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaSA9IHdvcmRzLmluZGV4KCdBZGRyZXNzJykKKyAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gcGlwZToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHdvcmRzID0gbGluZS5yc3RyaXAoKS5zcGxpdCgpCisgICAgICAgICAgICAgICAgICAgIHdvcmQgPSB3b3Jkc1tpXQorICAgICAgICAgICAgICAgICAgICBpZiBsZW4od29yZCkgPT0gMTcgYW5kIHdvcmQuY291bnQoJzonKSA9PSA1OgorICAgICAgICAgICAgICAgICAgICAgICAgbWFjID0gaW50KHdvcmQucmVwbGFjZSgnOicsICcnKSwgMTYpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBtYWM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hYworICAgICAgICAgICAgICAgIGV4Y2VwdCAoVmFsdWVFcnJvciwgSW5kZXhFcnJvcik6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgcGFzcwogCiBkZWYgX2lwY29uZmlnX2dldG5vZGUoKToKICAgICAiIiJHZXQgdGhlIGhhcmR3YXJlIGFkZHJlc3Mgb24gV2luZG93cyBieSBydW5uaW5nIGlwY29uZmlnLmV4ZS4iIiIKQEAgLTM4MCwxNSArNDE0LDEzIEBACiAgICAgZm9yIGRpciBpbiBkaXJzOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBwaXBlID0gb3MucG9wZW4ob3MucGF0aC5qb2luKGRpciwgJ2lwY29uZmlnJykgKyAnIC9hbGwnKQotICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICBlbHNlOgorICAgICAgICB3aXRoIHBpcGU6CiAgICAgICAgICAgICBmb3IgbGluZSBpbiBwaXBlOgogICAgICAgICAgICAgICAgIHZhbHVlID0gbGluZS5zcGxpdCgnOicpWy0xXS5zdHJpcCgpLmxvd2VyKCkKICAgICAgICAgICAgICAgICBpZiByZS5tYXRjaCgnKFswLTlhLWZdWzAtOWEtZl0tKXs1fVswLTlhLWZdWzAtOWEtZl0nLCB2YWx1ZSk6CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnQodmFsdWUucmVwbGFjZSgnLScsICcnKSwgMTYpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBwaXBlLmNsb3NlKCkKIAogZGVmIF9uZXRiaW9zX2dldG5vZGUoKToKICAgICAiIiJHZXQgdGhlIGhhcmR3YXJlIGFkZHJlc3Mgb24gV2luZG93cyB1c2luZyBOZXRCSU9TIGNhbGxzLgpAQCAtNTA3LDcgKzUzOSw4IEBACiAgICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6CiAgICAgICAgIGdldHRlcnMgPSBbX3dpbmRsbF9nZXRub2RlLCBfbmV0Ymlvc19nZXRub2RlLCBfaXBjb25maWdfZ2V0bm9kZV0KICAgICBlbHNlOgotICAgICAgICBnZXR0ZXJzID0gW191bml4ZGxsX2dldG5vZGUsIF9pZmNvbmZpZ19nZXRub2RlXQorICAgICAgICBnZXR0ZXJzID0gW191bml4ZGxsX2dldG5vZGUsIF9pZmNvbmZpZ19nZXRub2RlLCBfYXJwX2dldG5vZGUsCisgICAgICAgICAgICAgICAgICAgX2xhbnNjYW5fZ2V0bm9kZSwgX25ldHN0YXRfZ2V0bm9kZV0KIAogICAgIGZvciBnZXR0ZXIgaW4gZ2V0dGVycyArIFtfcmFuZG9tX2dldG5vZGVdOgogICAgICAgICB0cnk6CmRpZmYgLS1naXQgYS9MaWIvdmVudi9fX2luaXRfXy5weSBiL0xpYi92ZW52L19faW5pdF9fLnB5CmluZGV4IDM2MDYzNzAuLjNkNjA2ZWYgMTAwNjQ0Ci0tLSBhL0xpYi92ZW52L19faW5pdF9fLnB5CisrKyBiL0xpYi92ZW52L19faW5pdF9fLnB5CkBAIC0xLDcgKzEsNyBAQAogIiIiCiBWaXJ0dWFsIGVudmlyb25tZW50ICh2ZW52KSBwYWNrYWdlIGZvciBQeXRob24uIEJhc2VkIG9uIFBFUCA0MDUuCiAKLUNvcHlyaWdodCAoQykgMjAxMS0yMDEyIFZpbmF5IFNhamlwLgorQ29weXJpZ2h0IChDKSAyMDExLTIwMTQgVmluYXkgU2FqaXAuCiBMaWNlbnNlZCB0byB0aGUgUFNGIHVuZGVyIGEgY29udHJpYnV0b3IgYWdyZWVtZW50LgogCiB1c2FnZTogcHl0aG9uIC1tIHZlbnYgWy1oXSBbLS1zeXN0ZW0tc2l0ZS1wYWNrYWdlc10gWy0tc3ltbGlua3NdIFstLWNsZWFyXQpAQCAtMjQsMTIgKzI0LDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZWQuCiAgIC0tdXBncmFkZSAgICAgICAgICAgICBVcGdyYWRlIHRoZSBlbnZpcm9ubWVudCBkaXJlY3RvcnkgdG8gdXNlIHRoaXMgdmVyc2lvbgogICAgICAgICAgICAgICAgICAgICAgICAgb2YgUHl0aG9uLCBhc3N1bWluZyBQeXRob24gaGFzIGJlZW4gdXBncmFkZWQgaW4tcGxhY2UuCisgIC0td2l0aG91dC1waXAgICAgICAgICBTa2lwcyBpbnN0YWxsaW5nIG9yIHVwZ3JhZGluZyBwaXAgaW4gdGhlIHZpcnR1YWwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVudmlyb25tZW50IChwaXAgaXMgYm9vdHN0cmFwcGVkIGJ5IGRlZmF1bHQpCiAiIiIKIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgb3MKIGltcG9ydCBzaHV0aWwKK2ltcG9ydCBzdWJwcm9jZXNzCiBpbXBvcnQgc3lzCi1pbXBvcnQgc3lzY29uZmlnCiBpbXBvcnQgdHlwZXMKIAogbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCkBAIC01NiwxNCArNTgsMTcgQEAKICAgICA6cGFyYW0gc3ltbGlua3M6IElmIFRydWUsIGF0dGVtcHQgdG8gc3ltbGluayByYXRoZXIgdGhhbiBjb3B5IGZpbGVzIGludG8KICAgICAgICAgICAgICAgICAgICAgIHZpcnR1YWwgZW52aXJvbm1lbnQuCiAgICAgOnBhcmFtIHVwZ3JhZGU6IElmIFRydWUsIHVwZ3JhZGUgYW4gZXhpc3RpbmcgdmlydHVhbCBlbnZpcm9ubWVudC4KKyAgICA6cGFyYW0gd2l0aF9waXA6IElmIFRydWUsIGVuc3VyZSBwaXAgaXMgaW5zdGFsbGVkIGluIHRoZSB2aXJ0dWFsCisgICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudAogICAgICIiIgogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHN5c3RlbV9zaXRlX3BhY2thZ2VzPUZhbHNlLCBjbGVhcj1GYWxzZSwKLSAgICAgICAgICAgICAgICAgc3ltbGlua3M9RmFsc2UsIHVwZ3JhZGU9RmFsc2UpOgorICAgICAgICAgICAgICAgICBzeW1saW5rcz1GYWxzZSwgdXBncmFkZT1GYWxzZSwgd2l0aF9waXA9RmFsc2UpOgogICAgICAgICBzZWxmLnN5c3RlbV9zaXRlX3BhY2thZ2VzID0gc3lzdGVtX3NpdGVfcGFja2FnZXMKICAgICAgICAgc2VsZi5jbGVhciA9IGNsZWFyCiAgICAgICAgIHNlbGYuc3ltbGlua3MgPSBzeW1saW5rcwogICAgICAgICBzZWxmLnVwZ3JhZGUgPSB1cGdyYWRlCisgICAgICAgIHNlbGYud2l0aF9waXAgPSB3aXRoX3BpcAogCiAgICAgZGVmIGNyZWF0ZShzZWxmLCBlbnZfZGlyKToKICAgICAgICAgIiIiCkBAIC03NiwxMCArODEsMjAgQEAKICAgICAgICAgY29udGV4dCA9IHNlbGYuZW5zdXJlX2RpcmVjdG9yaWVzKGVudl9kaXIpCiAgICAgICAgIHNlbGYuY3JlYXRlX2NvbmZpZ3VyYXRpb24oY29udGV4dCkKICAgICAgICAgc2VsZi5zZXR1cF9weXRob24oY29udGV4dCkKKyAgICAgICAgaWYgc2VsZi53aXRoX3BpcDoKKyAgICAgICAgICAgIHNlbGYuX3NldHVwX3BpcChjb250ZXh0KQogICAgICAgICBpZiBub3Qgc2VsZi51cGdyYWRlOgogICAgICAgICAgICAgc2VsZi5zZXR1cF9zY3JpcHRzKGNvbnRleHQpCiAgICAgICAgICAgICBzZWxmLnBvc3Rfc2V0dXAoY29udGV4dCkKIAorICAgIGRlZiBjbGVhcl9kaXJlY3Rvcnkoc2VsZiwgcGF0aCk6CisgICAgICAgIGZvciBmbiBpbiBvcy5saXN0ZGlyKHBhdGgpOgorICAgICAgICAgICAgZm4gPSBvcy5wYXRoLmpvaW4ocGF0aCwgZm4pCisgICAgICAgICAgICBpZiBvcy5wYXRoLmlzbGluayhmbikgb3Igb3MucGF0aC5pc2ZpbGUoZm4pOgorICAgICAgICAgICAgICAgIG9zLnJlbW92ZShmbikKKyAgICAgICAgICAgIGVsaWYgb3MucGF0aC5pc2Rpcihmbik6CisgICAgICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShmbikKKwogICAgIGRlZiBlbnN1cmVfZGlyZWN0b3JpZXMoc2VsZiwgZW52X2Rpcik6CiAgICAgICAgICIiIgogICAgICAgICBDcmVhdGUgdGhlIGRpcmVjdG9yaWVzIGZvciB0aGUgZW52aXJvbm1lbnQuCkBAIC05MSwxMSArMTA2LDExIEBACiAgICAgICAgIGRlZiBjcmVhdGVfaWZfbmVlZGVkKGQpOgogICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGQpOgogICAgICAgICAgICAgICAgIG9zLm1ha2VkaXJzKGQpCisgICAgICAgICAgICBlbGlmIG9zLnBhdGguaXNsaW5rKGQpIG9yIG9zLnBhdGguaXNmaWxlKGQpOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1VuYWJsZSB0byBjcmVhdGUgZGlyZWN0b3J5ICVyJyAlIGQpCiAKLSAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZW52X2RpcikgYW5kIG5vdCAoc2VsZi5jbGVhciBvciBzZWxmLnVwZ3JhZGUpOgotICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignRGlyZWN0b3J5IGV4aXN0czogJXMnICUgZW52X2RpcikKICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZW52X2RpcikgYW5kIHNlbGYuY2xlYXI6Ci0gICAgICAgICAgICBzaHV0aWwucm10cmVlKGVudl9kaXIpCisgICAgICAgICAgICBzZWxmLmNsZWFyX2RpcmVjdG9yeShlbnZfZGlyKQogICAgICAgICBjb250ZXh0ID0gdHlwZXMuU2ltcGxlTmFtZXNwYWNlKCkKICAgICAgICAgY29udGV4dC5lbnZfZGlyID0gZW52X2RpcgogICAgICAgICBjb250ZXh0LmVudl9uYW1lID0gb3MucGF0aC5zcGxpdChlbnZfZGlyKVsxXQpAQCAtMTE3LDEwICsxMzIsMTggQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGJpbm5hbWUgPSAnYmluJwogICAgICAgICAgICAgaW5jcGF0aCA9ICdpbmNsdWRlJwotICAgICAgICAgICAgbGlicGF0aCA9IG9zLnBhdGguam9pbihlbnZfZGlyLCAnbGliJywgJ3B5dGhvbiVkLiVkJyAlIHN5cy52ZXJzaW9uX2luZm9bOjJdLCAnc2l0ZS1wYWNrYWdlcycpCisgICAgICAgICAgICBsaWJwYXRoID0gb3MucGF0aC5qb2luKGVudl9kaXIsICdsaWInLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncHl0aG9uJWQuJWQnICUgc3lzLnZlcnNpb25faW5mb1s6Ml0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzaXRlLXBhY2thZ2VzJykKICAgICAgICAgY29udGV4dC5pbmNfcGF0aCA9IHBhdGggPSBvcy5wYXRoLmpvaW4oZW52X2RpciwgaW5jcGF0aCkKICAgICAgICAgY3JlYXRlX2lmX25lZWRlZChwYXRoKQogICAgICAgICBjcmVhdGVfaWZfbmVlZGVkKGxpYnBhdGgpCisgICAgICAgICMgSXNzdWUgMjExOTc6IGNyZWF0ZSBsaWI2NCBhcyBhIHN5bWxpbmsgdG8gbGliIG9uIDY0LWJpdCBub24tT1MgWCBQT1NJWAorICAgICAgICBpZiAoKHN5cy5tYXhzaXplID4gMioqMzIpIGFuZCAob3MubmFtZSA9PSAncG9zaXgnKSBhbmQKKyAgICAgICAgICAgIChzeXMucGxhdGZvcm0gIT0gJ2RhcndpbicpKToKKyAgICAgICAgICAgIGxpbmtfcGF0aCA9IG9zLnBhdGguam9pbihlbnZfZGlyLCAnbGliNjQnKQorICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGxpbmtfcGF0aCk6ICAgIyBJc3N1ZSAjMjE2NDMKKyAgICAgICAgICAgICAgICBvcy5zeW1saW5rKCdsaWInLCBsaW5rX3BhdGgpCiAgICAgICAgIGNvbnRleHQuYmluX3BhdGggPSBiaW5wYXRoID0gb3MucGF0aC5qb2luKGVudl9kaXIsIGJpbm5hbWUpCiAgICAgICAgIGNvbnRleHQuYmluX25hbWUgPSBiaW5uYW1lCiAgICAgICAgIGNvbnRleHQuZW52X2V4ZSA9IG9zLnBhdGguam9pbihiaW5wYXRoLCBleGVuYW1lKQpAQCAtMTU0LDcgKzE3Nyw3IEBACiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gZi5zdGFydHN3aXRoKCdweXRob24nKSBhbmQgZi5lbmRzd2l0aCgnLmV4ZScpCiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0CiAKLSAgICBkZWYgc3ltbGlua19vcl9jb3B5KHNlbGYsIHNyYywgZHN0KToKKyAgICBkZWYgc3ltbGlua19vcl9jb3B5KHNlbGYsIHNyYywgZHN0LCByZWxhdGl2ZV9zeW1saW5rc19vaz1GYWxzZSk6CiAgICAgICAgICIiIgogICAgICAgICBUcnkgc3ltbGlua2luZyBhIGZpbGUsIGFuZCBpZiB0aGF0IGZhaWxzLCBmYWxsIGJhY2sgdG8gY29weWluZy4KICAgICAgICAgIiIiCkBAIC0xNjIsNyArMTg1LDExIEBACiAgICAgICAgIGlmIG5vdCBmb3JjZV9jb3B5OgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzbGluayhkc3QpOiAjIGNhbid0IGxpbmsgdG8gaXRzZWxmIQotICAgICAgICAgICAgICAgICAgICBvcy5zeW1saW5rKHNyYywgZHN0KQorICAgICAgICAgICAgICAgICAgICBpZiByZWxhdGl2ZV9zeW1saW5rc19vazoKKyAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCBvcy5wYXRoLmRpcm5hbWUoc3JjKSA9PSBvcy5wYXRoLmRpcm5hbWUoZHN0KQorICAgICAgICAgICAgICAgICAgICAgICAgb3Muc3ltbGluayhvcy5wYXRoLmJhc2VuYW1lKHNyYyksIGRzdCkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIG9zLnN5bWxpbmsoc3JjLCBkc3QpCiAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOiAgICMgbWF5IG5lZWQgdG8gdXNlIGEgbW9yZSBzcGVjaWZpYyBleGNlcHRpb24KICAgICAgICAgICAgICAgICBsb2dnZXIud2FybmluZygnVW5hYmxlIHRvIHN5bWxpbmsgJXIgdG8gJXInLCBzcmMsIGRzdCkKICAgICAgICAgICAgICAgICBmb3JjZV9jb3B5ID0gVHJ1ZQpAQCAtMTc3LDcgKzIwNCw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBiZWluZyBwcm9jZXNzZWQuCiAgICAgICAgICIiIgogICAgICAgICBiaW5wYXRoID0gY29udGV4dC5iaW5fcGF0aAotICAgICAgICBleGVuYW1lID0gY29udGV4dC5weXRob25fZXhlCiAgICAgICAgIHBhdGggPSBjb250ZXh0LmVudl9leGUKICAgICAgICAgY29waWVyID0gc2VsZi5zeW1saW5rX29yX2NvcHkKICAgICAgICAgY29waWVyKGNvbnRleHQuZXhlY3V0YWJsZSwgcGF0aCkKQEAgLTE4OCw3ICsyMTQsMTEgQEAKICAgICAgICAgICAgIGZvciBzdWZmaXggaW4gKCdweXRob24nLCAncHl0aG9uMycpOgogICAgICAgICAgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oYmlucGF0aCwgc3VmZml4KQogICAgICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhwYXRoKToKLSAgICAgICAgICAgICAgICAgICAgb3Muc3ltbGluayhleGVuYW1lLCBwYXRoKQorICAgICAgICAgICAgICAgICAgICAjIElzc3VlIDE4ODA3OiBtYWtlIGNvcGllcyBpZgorICAgICAgICAgICAgICAgICAgICAjIHN5bWxpbmtzIGFyZSBub3Qgd2FudGVkCisgICAgICAgICAgICAgICAgICAgIGNvcGllcihjb250ZXh0LmVudl9leGUsIHBhdGgsIHJlbGF0aXZlX3N5bWxpbmtzX29rPVRydWUpCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzbGluayhwYXRoKToKKyAgICAgICAgICAgICAgICAgICAgICAgIG9zLmNobW9kKHBhdGgsIDBvNzU1KQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc3ViZGlyID0gJ0RMTHMnCiAgICAgICAgICAgICBpbmNsdWRlID0gc2VsZi5pbmNsdWRlX2JpbmFyeQpAQCAtMjEwLDEyICsyNDAsMjIgQEAKICAgICAgICAgICAgICAgICBpZiAnaW5pdC50Y2wnIGluIGZpbGVzOgogICAgICAgICAgICAgICAgICAgICB0Y2xkaXIgPSBvcy5wYXRoLmJhc2VuYW1lKHJvb3QpCiAgICAgICAgICAgICAgICAgICAgIHRjbGRpciA9IG9zLnBhdGguam9pbihjb250ZXh0LmVudl9kaXIsICdMaWInLCB0Y2xkaXIpCi0gICAgICAgICAgICAgICAgICAgIG9zLm1ha2VkaXJzKHRjbGRpcikKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHRjbGRpcik6CisgICAgICAgICAgICAgICAgICAgICAgICBvcy5tYWtlZGlycyh0Y2xkaXIpCiAgICAgICAgICAgICAgICAgICAgIHNyYyA9IG9zLnBhdGguam9pbihyb290LCAnaW5pdC50Y2wnKQogICAgICAgICAgICAgICAgICAgICBkc3QgPSBvcy5wYXRoLmpvaW4odGNsZGlyLCAnaW5pdC50Y2wnKQogICAgICAgICAgICAgICAgICAgICBzaHV0aWwuY29weWZpbGUoc3JjLCBkc3QpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrCiAKKyAgICBkZWYgX3NldHVwX3BpcChzZWxmLCBjb250ZXh0KToKKyAgICAgICAgIiIiSW5zdGFsbHMgb3IgdXBncmFkZXMgcGlwIGluIGEgdmlydHVhbCBlbnZpcm9ubWVudCIiIgorICAgICAgICAjIFdlIHJ1biBlbnN1cmVwaXAgaW4gaXNvbGF0ZWQgbW9kZSB0byBhdm9pZCBzaWRlIGVmZmVjdHMgZnJvbQorICAgICAgICAjIGVudmlyb25tZW50IHZhcnMsIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBhbmQgYW55dGhpbmcgZWxzZQorICAgICAgICAjIGludGVuZGVkIGZvciB0aGUgZ2xvYmFsIFB5dGhvbiBlbnZpcm9ubWVudAorICAgICAgICBjbWQgPSBbY29udGV4dC5lbnZfZXhlLCAnLUltJywgJ2Vuc3VyZXBpcCcsICctLXVwZ3JhZGUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctLWRlZmF1bHQtcGlwJ10KKyAgICAgICAgc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpCisKICAgICBkZWYgc2V0dXBfc2NyaXB0cyhzZWxmLCBjb250ZXh0KToKICAgICAgICAgIiIiCiAgICAgICAgIFNldCB1cCBzY3JpcHRzIGludG8gdGhlIGNyZWF0ZWQgZW52aXJvbm1lbnQgZnJvbSBhIGRpcmVjdG9yeS4KQEAgLTI1Myw3ICsyOTMsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgYmVpbmcgcHJvY2Vzc2VkLgogICAgICAgICAiIiIKICAgICAgICAgdGV4dCA9IHRleHQucmVwbGFjZSgnX19WRU5WX0RJUl9fJywgY29udGV4dC5lbnZfZGlyKQotICAgICAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKCdfX1ZFTlZfTkFNRV9fJywgY29udGV4dC5wcm9tcHQpCisgICAgICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoJ19fVkVOVl9OQU1FX18nLCBjb250ZXh0LmVudl9uYW1lKQorICAgICAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKCdfX1ZFTlZfUFJPTVBUX18nLCBjb250ZXh0LnByb21wdCkKICAgICAgICAgdGV4dCA9IHRleHQucmVwbGFjZSgnX19WRU5WX0JJTl9OQU1FX18nLCBjb250ZXh0LmJpbl9uYW1lKQogICAgICAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKCdfX1ZFTlZfUFlUSE9OX18nLCBjb250ZXh0LmVudl9leGUpCiAgICAgICAgIHJldHVybiB0ZXh0CkBAIC0zMDgsNyArMzQ5LDggQEAKICAgICAgICAgICAgICAgICAgICAgc2h1dGlsLmNvcHltb2RlKHNyY2ZpbGUsIGRzdGZpbGUpCiAKIAotZGVmIGNyZWF0ZShlbnZfZGlyLCBzeXN0ZW1fc2l0ZV9wYWNrYWdlcz1GYWxzZSwgY2xlYXI9RmFsc2UsIHN5bWxpbmtzPUZhbHNlKToKK2RlZiBjcmVhdGUoZW52X2Rpciwgc3lzdGVtX3NpdGVfcGFja2FnZXM9RmFsc2UsIGNsZWFyPUZhbHNlLAorICAgICAgICAgICAgICAgICAgICBzeW1saW5rcz1GYWxzZSwgd2l0aF9waXA9RmFsc2UpOgogICAgICIiIgogICAgIENyZWF0ZSBhIHZpcnR1YWwgZW52aXJvbm1lbnQgaW4gYSBkaXJlY3RvcnkuCiAKQEAgLTMyNCw5ICszNjYsMTEgQEAKICAgICAgICAgICAgICAgICAgIHJhaXNlZC4KICAgICA6cGFyYW0gc3ltbGlua3M6IElmIFRydWUsIGF0dGVtcHQgdG8gc3ltbGluayByYXRoZXIgdGhhbiBjb3B5IGZpbGVzIGludG8KICAgICAgICAgICAgICAgICAgICAgIHZpcnR1YWwgZW52aXJvbm1lbnQuCisgICAgOnBhcmFtIHdpdGhfcGlwOiBJZiBUcnVlLCBlbnN1cmUgcGlwIGlzIGluc3RhbGxlZCBpbiB0aGUgdmlydHVhbAorICAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQKICAgICAiIiIKICAgICBidWlsZGVyID0gRW52QnVpbGRlcihzeXN0ZW1fc2l0ZV9wYWNrYWdlcz1zeXN0ZW1fc2l0ZV9wYWNrYWdlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXI9Y2xlYXIsIHN5bWxpbmtzPXN5bWxpbmtzKQorICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyPWNsZWFyLCBzeW1saW5rcz1zeW1saW5rcywgd2l0aF9waXA9d2l0aF9waXApCiAgICAgYnVpbGRlci5jcmVhdGUoZW52X2RpcikKIAogZGVmIG1haW4oYXJncz1Ob25lKToKQEAgLTM2MCwyOCArNDA0LDQwIEBACiAgICAgICAgICAgICB1c2Vfc3ltbGlua3MgPSBGYWxzZQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgdXNlX3N5bWxpbmtzID0gVHJ1ZQotICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXN5bWxpbmtzJywgZGVmYXVsdD11c2Vfc3ltbGlua3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVzdD0nc3ltbGlua3MnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1RyeSB0byB1c2Ugc3ltbGlua3MgcmF0aGVyIHRoYW4gY29waWVzLCAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2hlbiBzeW1saW5rcyBhcmUgbm90IHRoZSBkZWZhdWx0IGZvciAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGhlIHBsYXRmb3JtLicpCisgICAgICAgIGdyb3VwID0gcGFyc2VyLmFkZF9tdXR1YWxseV9leGNsdXNpdmVfZ3JvdXAoKQorICAgICAgICBncm91cC5hZGRfYXJndW1lbnQoJy0tc3ltbGlua3MnLCBkZWZhdWx0PXVzZV9zeW1saW5rcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlc3Q9J3N5bWxpbmtzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1RyeSB0byB1c2Ugc3ltbGlua3MgcmF0aGVyIHRoYW4gY29waWVzLCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3aGVuIHN5bWxpbmtzIGFyZSBub3QgdGhlIGRlZmF1bHQgZm9yICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RoZSBwbGF0Zm9ybS4nKQorICAgICAgICBncm91cC5hZGRfYXJndW1lbnQoJy0tY29waWVzJywgZGVmYXVsdD1ub3QgdXNlX3N5bWxpbmtzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSdzdG9yZV9mYWxzZScsIGRlc3Q9J3N5bWxpbmtzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1RyeSB0byB1c2UgY29waWVzIHJhdGhlciB0aGFuIHN5bWxpbmtzLCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdldmVuIHdoZW4gc3ltbGlua3MgYXJlIHRoZSBkZWZhdWx0IGZvciAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0aGUgcGxhdGZvcm0uJykKICAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1jbGVhcicsIGRlZmF1bHQ9RmFsc2UsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdD0nY2xlYXInLCBoZWxwPSdEZWxldGUgdGhlIGVudmlyb25tZW50ICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RpcmVjdG9yeSBpZiBpdCBhbHJlYWR5ICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4aXN0cy4gSWYgbm90IHNwZWNpZmllZCBhbmQgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGhlIGRpcmVjdG9yeSBleGlzdHMsIGFuIGVycm9yJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIGlzIHJhaXNlZC4nKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9J2NsZWFyJywgaGVscD0nRGVsZXRlIHRoZSBjb250ZW50cyBvZiB0aGUgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZW52aXJvbm1lbnQgZGlyZWN0b3J5IGlmIGl0ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FscmVhZHkgZXhpc3RzLCBiZWZvcmUgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZW52aXJvbm1lbnQgY3JlYXRpb24uJykKICAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS11cGdyYWRlJywgZGVmYXVsdD1GYWxzZSwgYWN0aW9uPSdzdG9yZV90cnVlJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0PSd1cGdyYWRlJywgaGVscD0nVXBncmFkZSB0aGUgZW52aXJvbm1lbnQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGlyZWN0b3J5IHRvIHVzZSB0aGlzIHZlcnNpb24gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb2YgUHl0aG9uLCBhc3N1bWluZyBQeXRob24gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaGFzIGJlZW4gdXBncmFkZWQgaW4tcGxhY2UuJykKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS13aXRob3V0LXBpcCcsIGRlc3Q9J3dpdGhfcGlwJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PVRydWUsIGFjdGlvbj0nc3RvcmVfZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1NraXBzIGluc3RhbGxpbmcgb3IgdXBncmFkaW5nIHBpcCBpbiB0aGUgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3ZpcnR1YWwgZW52aXJvbm1lbnQgKHBpcCBpcyBib290c3RyYXBwZWQgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2J5IGRlZmF1bHQpJykKICAgICAgICAgb3B0aW9ucyA9IHBhcnNlci5wYXJzZV9hcmdzKGFyZ3MpCiAgICAgICAgIGlmIG9wdGlvbnMudXBncmFkZSBhbmQgb3B0aW9ucy5jbGVhcjoKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3lvdSBjYW5ub3Qgc3VwcGx5IC0tdXBncmFkZSBhbmQgLS1jbGVhciB0b2dldGhlci4nKQogICAgICAgICBidWlsZGVyID0gRW52QnVpbGRlcihzeXN0ZW1fc2l0ZV9wYWNrYWdlcz1vcHRpb25zLnN5c3RlbV9zaXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhcj1vcHRpb25zLmNsZWFyLCBzeW1saW5rcz1vcHRpb25zLnN5bWxpbmtzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGdyYWRlPW9wdGlvbnMudXBncmFkZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXI9b3B0aW9ucy5jbGVhciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltbGlua3M9b3B0aW9ucy5zeW1saW5rcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBncmFkZT1vcHRpb25zLnVwZ3JhZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhfcGlwPW9wdGlvbnMud2l0aF9waXApCiAgICAgICAgIGZvciBkIGluIG9wdGlvbnMuZGlyczoKICAgICAgICAgICAgIGJ1aWxkZXIuY3JlYXRlKGQpCiAKZGlmZiAtLWdpdCBhL0xpYi92ZW52L3NjcmlwdHMvbnQvQWN0aXZhdGUucHMxIGIvTGliL3ZlbnYvc2NyaXB0cy9udC9BY3RpdmF0ZS5wczEKaW5kZXggMWM1ZWY5OC4uYjE1ZGVjYiAxMDA2NDQKLS0tIGEvTGliL3ZlbnYvc2NyaXB0cy9udC9BY3RpdmF0ZS5wczEKKysrIGIvTGliL3ZlbnYvc2NyaXB0cy9udC9BY3RpdmF0ZS5wczEKQEAgLTEsMjUgKzEsNDAgQEAKK2Z1bmN0aW9uIGdsb2JhbDpkZWFjdGl2YXRlIChbc3dpdGNoXSROb25EZXN0cnVjdGl2ZSkgew0KKyAgICAjIFJldmVydCB0byBvcmlnaW5hbCB2YWx1ZXMNCisgICAgaWYgKFRlc3QtUGF0aCBmdW5jdGlvbjpfT0xEX1ZJUlRVQUxfUFJPTVBUKSB7DQorICAgICAgICBjb3B5LWl0ZW0gZnVuY3Rpb246X09MRF9WSVJUVUFMX1BST01QVCBmdW5jdGlvbjpwcm9tcHQNCisgICAgICAgIHJlbW92ZS1pdGVtIGZ1bmN0aW9uOl9PTERfVklSVFVBTF9QUk9NUFQNCisgICAgfQ0KKw0KKyAgICBpZiAoVGVzdC1QYXRoIGVudjpfT0xEX1ZJUlRVQUxfUFlUSE9OSE9NRSkgew0KKyAgICAgICAgY29weS1pdGVtIGVudjpfT0xEX1ZJUlRVQUxfUFlUSE9OSE9NRSBlbnY6UFlUSE9OSE9NRQ0KKyAgICAgICAgcmVtb3ZlLWl0ZW0gZW52Ol9PTERfVklSVFVBTF9QWVRIT05IT01FDQorICAgIH0NCisNCisgICAgaWYgKFRlc3QtUGF0aCBlbnY6X09MRF9WSVJUVUFMX1BBVEgpIHsNCisgICAgICAgIGNvcHktaXRlbSBlbnY6X09MRF9WSVJUVUFMX1BBVEggZW52OlBBVEgNCisgICAgICAgIHJlbW92ZS1pdGVtIGVudjpfT0xEX1ZJUlRVQUxfUEFUSA0KKyAgICB9DQorDQorICAgIGlmIChUZXN0LVBhdGggZW52OlZJUlRVQUxfRU5WKSB7DQorICAgICAgICByZW1vdmUtaXRlbSBlbnY6VklSVFVBTF9FTlYNCisgICAgfQ0KKw0KKyAgICBpZiAoISROb25EZXN0cnVjdGl2ZSkgew0KKyAgICAgICAgIyBTZWxmIGRlc3RydWN0IQ0KKyAgICAgICAgcmVtb3ZlLWl0ZW0gZnVuY3Rpb246ZGVhY3RpdmF0ZQ0KKyAgICB9DQorfQ0KKw0KK2RlYWN0aXZhdGUgLW5vbmRlc3RydWN0aXZlDQorCiAkZW52OlZJUlRVQUxfRU5WPSJfX1ZFTlZfRElSX18iDQogDQotIyBSZXZlcnQgdG8gb3JpZ2luYWwgdmFsdWVzDQotaWYgKFRlc3QtUGF0aCBmdW5jdGlvbjpfT0xEX1ZJUlRVQUxfUFJPTVBUKSB7DQotICAgIGNvcHktaXRlbSBmdW5jdGlvbjpfT0xEX1ZJUlRVQUxfUFJPTVBUIGZ1bmN0aW9uOnByb21wdA0KLSAgICByZW1vdmUtaXRlbSBmdW5jdGlvbjpfT0xEX1ZJUlRVQUxfUFJPTVBUDQotfQ0KLQ0KLWlmIChUZXN0LVBhdGggZW52Ol9PTERfVklSVFVBTF9QWVRIT05IT01FKSB7DQotICAgIGNvcHktaXRlbSBlbnY6X09MRF9WSVJUVUFMX1BZVEhPTkhPTUUgZW52OlBZVEhPTkhPTUUNCi0gICAgcmVtb3ZlLWl0ZW0gZW52Ol9PTERfVklSVFVBTF9QWVRIT05IT01FDQotfQ0KLQ0KLWlmIChUZXN0LVBhdGggZW52Ol9PTERfVklSVFVBTF9QQVRIKSB7DQotICAgIGNvcHktaXRlbSBlbnY6X09MRF9WSVJUVUFMX1BBVEggZW52OlBBVEgNCi0gICAgcmVtb3ZlLWl0ZW0gZW52Ol9PTERfVklSVFVBTF9QQVRIDQotfQ0KLQ0KICMgU2V0IHRoZSBwcm9tcHQgdG8gaW5jbHVkZSB0aGUgZW52IG5hbWUNCisjIE1ha2Ugc3VyZSBfT0xEX1ZJUlRVQUxfUFJPTVBUIGlzIGdsb2JhbA0KK2Z1bmN0aW9uIGdsb2JhbDpfT0xEX1ZJUlRVQUxfUFJPTVBUIHsiIn0NCiBjb3B5LWl0ZW0gZnVuY3Rpb246cHJvbXB0IGZ1bmN0aW9uOl9PTERfVklSVFVBTF9QUk9NUFQNCi1mdW5jdGlvbiBwcm9tcHQgew0KLSAgICBXcml0ZS1Ib3N0IC1Ob05ld2xpbmUgLUZvcmVncm91bmRDb2xvciBHcmVlbiAnW19fVkVOVl9OQU1FX19dJw0KK2Z1bmN0aW9uIGdsb2JhbDpwcm9tcHQgew0KKyAgICBXcml0ZS1Ib3N0IC1Ob05ld2xpbmUgLUZvcmVncm91bmRDb2xvciBHcmVlbiAnX19WRU5WX1BST01QVF9fJw0KICAgICBfT0xEX1ZJUlRVQUxfUFJPTVBUDQogfQ0KIA0KZGlmZiAtLWdpdCBhL0xpYi92ZW52L3NjcmlwdHMvbnQvRGVhY3RpdmF0ZS5wczEgYi9MaWIvdmVudi9zY3JpcHRzL250L0RlYWN0aXZhdGUucHMxCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZDFlOTZiLi4wMDAwMDAwCi0tLSBhL0xpYi92ZW52L3NjcmlwdHMvbnQvRGVhY3RpdmF0ZS5wczEKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi0jIFJldmVydCB0byBvcmlnaW5hbCB2YWx1ZXMNCi1pZiAoVGVzdC1QYXRoIGZ1bmN0aW9uOl9PTERfVklSVFVBTF9QUk9NUFQpIHsNCi0gICAgY29weS1pdGVtIGZ1bmN0aW9uOl9PTERfVklSVFVBTF9QUk9NUFQgZnVuY3Rpb246cHJvbXB0DQotICAgIHJlbW92ZS1pdGVtIGZ1bmN0aW9uOl9PTERfVklSVFVBTF9QUk9NUFQNCi19DQotDQotaWYgKFRlc3QtUGF0aCBlbnY6X09MRF9WSVJUVUFMX1BZVEhPTkhPTUUpIHsNCi0gICAgY29weS1pdGVtIGVudjpfT0xEX1ZJUlRVQUxfUFlUSE9OSE9NRSBlbnY6UFlUSE9OSE9NRQ0KLSAgICByZW1vdmUtaXRlbSBlbnY6X09MRF9WSVJUVUFMX1BZVEhPTkhPTUUNCi19DQotDQotaWYgKFRlc3QtUGF0aCBlbnY6X09MRF9WSVJUVUFMX1BBVEgpIHsNCi0gICAgY29weS1pdGVtIGVudjpfT0xEX1ZJUlRVQUxfUEFUSCBlbnY6UEFUSA0KLSAgICByZW1vdmUtaXRlbSBlbnY6X09MRF9WSVJUVUFMX1BBVEgNCi19DQotDQotaWYgKFRlc3QtUGF0aCBlbnY6VklSVFVBTF9FTlYpIHsNCi0gICAgcmVtb3ZlLWl0ZW0gZW52OlZJUlRVQUxfRU5WDQotfQ0KZGlmZiAtLWdpdCBhL0xpYi92ZW52L3NjcmlwdHMvbnQvYWN0aXZhdGUuYmF0IGIvTGliL3ZlbnYvc2NyaXB0cy9udC9hY3RpdmF0ZS5iYXQKaW5kZXggM2NlYmUyNi4uOWVhYjE0NyAxMDA2NDQKLS0tIGEvTGliL3ZlbnYvc2NyaXB0cy9udC9hY3RpdmF0ZS5iYXQKKysrIGIvTGliL3ZlbnYvc2NyaXB0cy9udC9hY3RpdmF0ZS5iYXQKQEAgLTE0LDcgKzE0LDcgQEAKICkNCiANCiBzZXQgIl9PTERfVklSVFVBTF9QUk9NUFQ9JVBST01QVCUiDQotc2V0ICJQUk9NUFQ9X19WRU5WX05BTUVfXyVQUk9NUFQlIg0KK3NldCAiUFJPTVBUPV9fVkVOVl9QUk9NUFRfXyVQUk9NUFQlIg0KIA0KIGlmIGRlZmluZWQgUFlUSE9OSE9NRSAoDQogICAgIHNldCAiX09MRF9WSVJUVUFMX1BZVEhPTkhPTUU9JVBZVEhPTkhPTUUlIg0KZGlmZiAtLWdpdCBhL0xpYi92ZW52L3NjcmlwdHMvcG9zaXgvYWN0aXZhdGUgYi9MaWIvdmVudi9zY3JpcHRzL3Bvc2l4L2FjdGl2YXRlCmluZGV4IGMyNDE0NTAuLjdiYmZmZDkgMTAwNjQ0Ci0tLSBhL0xpYi92ZW52L3NjcmlwdHMvcG9zaXgvYWN0aXZhdGUKKysrIGIvTGliL3ZlbnYvc2NyaXB0cy9wb3NpeC9hY3RpdmF0ZQpAQCAtNTQsOCArNTQsOCBAQAogCiBpZiBbIC16ICIkVklSVFVBTF9FTlZfRElTQUJMRV9QUk9NUFQiIF0gOyB0aGVuCiAgICAgX09MRF9WSVJUVUFMX1BTMT0iJFBTMSIKLSAgICBpZiBbICJ4X19WRU5WX05BTUVfXyIgIT0geCBdIDsgdGhlbgotCVBTMT0iX19WRU5WX05BTUVfXyRQUzEiCisgICAgaWYgWyAieF9fVkVOVl9QUk9NUFRfXyIgIT0geCBdIDsgdGhlbgorCVBTMT0iX19WRU5WX1BST01QVF9fJFBTMSIKICAgICBlbHNlCiAgICAgaWYgWyAiYGJhc2VuYW1lIFwiJFZJUlRVQUxfRU5WXCJgIiA9ICJfXyIgXSA7IHRoZW4KICAgICAgICAgIyBzcGVjaWFsIGNhc2UgZm9yIEFzcGVuIG1hZ2ljIGRpcmVjdG9yaWVzCmRpZmYgLS1naXQgYS9MaWIvdmVudi9zY3JpcHRzL3Bvc2l4L2FjdGl2YXRlLmNzaCBiL0xpYi92ZW52L3NjcmlwdHMvcG9zaXgvYWN0aXZhdGUuY3NoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5ZDc5ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdmVudi9zY3JpcHRzL3Bvc2l4L2FjdGl2YXRlLmNzaApAQCAtMCwwICsxLDM3IEBACisjIFRoaXMgZmlsZSBtdXN0IGJlIHVzZWQgd2l0aCAic291cmNlIGJpbi9hY3RpdmF0ZS5jc2giICpmcm9tIGNzaCouCisjIFlvdSBjYW5ub3QgcnVuIGl0IGRpcmVjdGx5LgorIyBDcmVhdGVkIGJ5IERhdmlkZSBEaSBCbGFzaSA8ZGF2aWRlZGJAZ21haWwuY29tPi4KKyMgUG9ydGVkIHRvIFB5dGhvbiAzLjMgdmVudiBieSBBbmRyZXcgU3ZldGxvdiA8YW5kcmV3LnN2ZXRsb3ZAZ21haWwuY29tPgorCithbGlhcyBkZWFjdGl2YXRlICd0ZXN0ICQ/X09MRF9WSVJUVUFMX1BBVEggIT0gMCAmJiBzZXRlbnYgUEFUSCAiJF9PTERfVklSVFVBTF9QQVRIIiAmJiB1bnNldCBfT0xEX1ZJUlRVQUxfUEFUSDsgcmVoYXNoOyB0ZXN0ICQ/X09MRF9WSVJUVUFMX1BST01QVCAhPSAwICYmIHNldCBwcm9tcHQ9IiRfT0xEX1ZJUlRVQUxfUFJPTVBUIiAmJiB1bnNldCBfT0xEX1ZJUlRVQUxfUFJPTVBUOyB1bnNldGVudiBWSVJUVUFMX0VOVjsgdGVzdCAiXCE6KiIgIT0gIm5vbmRlc3RydWN0aXZlIiAmJiB1bmFsaWFzIGRlYWN0aXZhdGUnCisKKyMgVW5zZXQgaXJyZWxhdmVudCB2YXJpYWJsZXMuCitkZWFjdGl2YXRlIG5vbmRlc3RydWN0aXZlCisKK3NldGVudiBWSVJUVUFMX0VOViAiX19WRU5WX0RJUl9fIgorCitzZXQgX09MRF9WSVJUVUFMX1BBVEg9IiRQQVRIIgorc2V0ZW52IFBBVEggIiRWSVJUVUFMX0VOVi9fX1ZFTlZfQklOX05BTUVfXzokUEFUSCIKKworCitzZXQgX09MRF9WSVJUVUFMX1BST01QVD0iJHByb21wdCIKKworaWYgKCEgIiQ/VklSVFVBTF9FTlZfRElTQUJMRV9QUk9NUFQiKSB0aGVuCisgICAgaWYgKCJfX1ZFTlZfTkFNRV9fIiAhPSAiIikgdGhlbgorICAgICAgICBzZXQgZW52X25hbWUgPSAiX19WRU5WX05BTUVfXyIKKyAgICBlbHNlCisgICAgICAgIGlmIChgYmFzZW5hbWUgIlZJUlRVQUxfRU5WImAgPT0gIl9fIikgdGhlbgorICAgICAgICAgICAgIyBzcGVjaWFsIGNhc2UgZm9yIEFzcGVuIG1hZ2ljIGRpcmVjdG9yaWVzCisgICAgICAgICAgICAjIHNlZSBodHRwOi8vd3d3LnpldGFkZXYuY29tL3NvZnR3YXJlL2FzcGVuLworICAgICAgICAgICAgc2V0IGVudl9uYW1lID0gYGJhc2VuYW1lIFxgZGlybmFtZSAiJFZJUlRVQUxfRU5WIlxgYAorICAgICAgICBlbHNlCisgICAgICAgICAgICBzZXQgZW52X25hbWUgPSBgYmFzZW5hbWUgIiRWSVJUVUFMX0VOViJgCisgICAgICAgIGVuZGlmCisgICAgZW5kaWYKKyAgICBzZXQgcHJvbXB0ID0gIlskZW52X25hbWVdICRwcm9tcHQiCisgICAgdW5zZXQgZW52X25hbWUKK2VuZGlmCisKK2FsaWFzIHB5ZG9jIHB5dGhvbiAtbSBweWRvYworCityZWhhc2gKZGlmZiAtLWdpdCBhL0xpYi92ZW52L3NjcmlwdHMvcG9zaXgvYWN0aXZhdGUuZmlzaCBiL0xpYi92ZW52L3NjcmlwdHMvcG9zaXgvYWN0aXZhdGUuZmlzaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTM5MWFhCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3ZlbnYvc2NyaXB0cy9wb3NpeC9hY3RpdmF0ZS5maXNoCkBAIC0wLDAgKzEsNzQgQEAKKyMgVGhpcyBmaWxlIG11c3QgYmUgdXNlZCB3aXRoICIuIGJpbi9hY3RpdmF0ZS5maXNoIiAqZnJvbSBmaXNoKiAoaHR0cDovL2Zpc2hzaGVsbC5vcmcpCisjIHlvdSBjYW5ub3QgcnVuIGl0IGRpcmVjdGx5CisKK2Z1bmN0aW9uIGRlYWN0aXZhdGUgIC1kICJFeGl0IHZpcnR1YWxlbnYgYW5kIHJldHVybiB0byBub3JtYWwgc2hlbGwgZW52aXJvbm1lbnQiCisgICAgIyByZXNldCBvbGQgZW52aXJvbm1lbnQgdmFyaWFibGVzCisgICAgaWYgdGVzdCAtbiAiJF9PTERfVklSVFVBTF9QQVRIIgorICAgICAgICBzZXQgLWd4IFBBVEggJF9PTERfVklSVFVBTF9QQVRICisgICAgICAgIHNldCAtZSBfT0xEX1ZJUlRVQUxfUEFUSAorICAgIGVuZAorICAgIGlmIHRlc3QgLW4gIiRfT0xEX1ZJUlRVQUxfUFlUSE9OSE9NRSIKKyAgICAgICAgc2V0IC1neCBQWVRIT05IT01FICRfT0xEX1ZJUlRVQUxfUFlUSE9OSE9NRQorICAgICAgICBzZXQgLWUgX09MRF9WSVJUVUFMX1BZVEhPTkhPTUUKKyAgICBlbmQKKworICAgIGlmIHRlc3QgLW4gIiRfT0xEX0ZJU0hfUFJPTVBUX09WRVJSSURFIgorICAgICAgICBmdW5jdGlvbnMgLWUgZmlzaF9wcm9tcHQKKyAgICAgICAgc2V0IC1lIF9PTERfRklTSF9QUk9NUFRfT1ZFUlJJREUKKyAgICAgICAgLiAoIGJlZ2luCisgICAgICAgICAgICAgICAgcHJpbnRmICJmdW5jdGlvbiBmaXNoX3Byb21wdFxuXHQjIgorICAgICAgICAgICAgICAgIGZ1bmN0aW9ucyBfb2xkX2Zpc2hfcHJvbXB0CisgICAgICAgICAgICBlbmQgfCBwc3ViICkKKyAgICAgICAgZnVuY3Rpb25zIC1lIF9vbGRfZmlzaF9wcm9tcHQKKyAgICBlbmQKKworICAgIHNldCAtZSBWSVJUVUFMX0VOVgorICAgIGlmIHRlc3QgIiRhcmd2WzFdIiAhPSAibm9uZGVzdHJ1Y3RpdmUiCisgICAgICAgICMgU2VsZiBkZXN0cnVjdCEKKyAgICAgICAgZnVuY3Rpb25zIC1lIGRlYWN0aXZhdGUKKyAgICBlbmQKK2VuZAorCisjIHVuc2V0IGlycmVsYXZlbnQgdmFyaWFibGVzCitkZWFjdGl2YXRlIG5vbmRlc3RydWN0aXZlCisKK3NldCAtZ3ggVklSVFVBTF9FTlYgIl9fVkVOVl9ESVJfXyIKKworc2V0IC1neCBfT0xEX1ZJUlRVQUxfUEFUSCAkUEFUSAorc2V0IC1neCBQQVRIICIkVklSVFVBTF9FTlYvX19WRU5WX0JJTl9OQU1FX18iICRQQVRICisKKyMgdW5zZXQgUFlUSE9OSE9NRSBpZiBzZXQKK2lmIHNldCAtcSBQWVRIT05IT01FCisgICAgc2V0IC1neCBfT0xEX1ZJUlRVQUxfUFlUSE9OSE9NRSAkUFlUSE9OSE9NRQorICAgIHNldCAtZSBQWVRIT05IT01FCitlbmQKKworaWYgdGVzdCAteiAiJFZJUlRVQUxfRU5WX0RJU0FCTEVfUFJPTVBUIgorICAgICMgZmlzaCB1c2VzIGEgZnVuY3Rpb24gaW5zdGVhZCBvZiBhbiBlbnYgdmFyIHRvIGdlbmVyYXRlIHRoZSBwcm9tcHQuCisKKyAgICAjIHNhdmUgdGhlIGN1cnJlbnQgZmlzaF9wcm9tcHQgZnVuY3Rpb24gYXMgdGhlIGZ1bmN0aW9uIF9vbGRfZmlzaF9wcm9tcHQKKyAgICAuICggYmVnaW4KKyAgICAgICAgICAgIHByaW50ZiAiZnVuY3Rpb24gX29sZF9maXNoX3Byb21wdFxuXHQjIgorICAgICAgICAgICAgZnVuY3Rpb25zIGZpc2hfcHJvbXB0CisgICAgICAgIGVuZCB8IHBzdWIgKQorCisgICAgIyB3aXRoIHRoZSBvcmlnaW5hbCBwcm9tcHQgZnVuY3Rpb24gcmVuYW1lZCwgd2UgY2FuIG92ZXJyaWRlIHdpdGggb3VyIG93bi4KKyAgICBmdW5jdGlvbiBmaXNoX3Byb21wdAorICAgICAgICAjIFByb21wdCBvdmVycmlkZT8KKyAgICAgICAgaWYgdGVzdCAtbiAiX19WRU5WX1BST01QVF9fIgorICAgICAgICAgICAgcHJpbnRmICIlcyVzJXMiICJfX1ZFTlZfUFJPTVBUX18iIChzZXRfY29sb3Igbm9ybWFsKSAoX29sZF9maXNoX3Byb21wdCkKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBlbmQKKyAgICAgICAgIyAuLi5PdGhlcndpc2UsIHByZXBlbmQgZW52CisgICAgICAgIHNldCAtbCBfY2hlY2tiYXNlIChiYXNlbmFtZSAiJFZJUlRVQUxfRU5WIikKKyAgICAgICAgaWYgdGVzdCAkX2NoZWNrYmFzZSA9ICJfXyIKKyAgICAgICAgICAgICMgc3BlY2lhbCBjYXNlIGZvciBBc3BlbiBtYWdpYyBkaXJlY3RvcmllcworICAgICAgICAgICAgIyBzZWUgaHR0cDovL3d3dy56ZXRhZGV2LmNvbS9zb2Z0d2FyZS9hc3Blbi8KKyAgICAgICAgICAgIHByaW50ZiAiJXNbJXNdJXMgJXMiIChzZXRfY29sb3IgLWIgYmx1ZSB3aGl0ZSkgKGJhc2VuYW1lIChkaXJuYW1lICIkVklSVFVBTF9FTlYiKSkgKHNldF9jb2xvciBub3JtYWwpIChfb2xkX2Zpc2hfcHJvbXB0KQorICAgICAgICBlbHNlCisgICAgICAgICAgICBwcmludGYgIiVzKCVzKSVzJXMiIChzZXRfY29sb3IgLWIgYmx1ZSB3aGl0ZSkgKGJhc2VuYW1lICIkVklSVFVBTF9FTlYiKSAoc2V0X2NvbG9yIG5vcm1hbCkgKF9vbGRfZmlzaF9wcm9tcHQpCisgICAgICAgIGVuZAorICAgIGVuZAorCisgICAgc2V0IC1neCBfT0xEX0ZJU0hfUFJPTVBUX09WRVJSSURFICIkVklSVFVBTF9FTlYiCitlbmQKZGlmZiAtLWdpdCBhL0xpYi93YXJuaW5ncy5weSBiL0xpYi93YXJuaW5ncy5weQppbmRleCBlZGJiYjVlLi43MGQwODdlIDEwMDY0NAotLS0gYS9MaWIvd2FybmluZ3MucHkKKysrIGIvTGliL3dhcm5pbmdzLnB5CkBAIC0xLDEyICsxLDkgQEAKICIiIlB5dGhvbiBwYXJ0IG9mIHRoZSB3YXJuaW5ncyBzdWJzeXN0ZW0uIiIiCiAKLSMgTm90ZTogZnVuY3Rpb24gbGV2ZWwgaW1wb3J0cyBzaG91bGQgKm5vdCogYmUgdXNlZAotIyBpbiB0aGlzIG1vZHVsZSBhcyBpdCBtYXkgY2F1c2UgaW1wb3J0IGxvY2sgZGVhZGxvY2suCi0jIFNlZSBidWcgNjgzNjU4LgotaW1wb3J0IGxpbmVjYWNoZQogaW1wb3J0IHN5cwogCi1fX2FsbF9fID0gWyJ3YXJuIiwgInNob3d3YXJuaW5nIiwgImZvcm1hdHdhcm5pbmciLCAiZmlsdGVyd2FybmluZ3MiLAorX19hbGxfXyA9IFsid2FybiIsICJ3YXJuX2V4cGxpY2l0IiwgInNob3d3YXJuaW5nIiwKKyAgICAgICAgICAgImZvcm1hdHdhcm5pbmciLCAiZmlsdGVyd2FybmluZ3MiLCAic2ltcGxlZmlsdGVyIiwKICAgICAgICAgICAgInJlc2V0d2FybmluZ3MiLCAiY2F0Y2hfd2FybmluZ3MiXQogCiAKQEAgLTE0LDEzICsxMSwxNyBAQAogICAgICIiIkhvb2sgdG8gd3JpdGUgYSB3YXJuaW5nIHRvIGEgZmlsZTsgcmVwbGFjZSBpZiB5b3UgbGlrZS4iIiIKICAgICBpZiBmaWxlIGlzIE5vbmU6CiAgICAgICAgIGZpbGUgPSBzeXMuc3RkZXJyCisgICAgICAgIGlmIGZpbGUgaXMgTm9uZToKKyAgICAgICAgICAgICMgc3lzLnN0ZGVyciBpcyBOb25lIHdoZW4gcnVuIHdpdGggcHl0aG9udy5leGUgLSB3YXJuaW5ncyBnZXQgbG9zdAorICAgICAgICAgICAgcmV0dXJuCiAgICAgdHJ5OgogICAgICAgICBmaWxlLndyaXRlKGZvcm1hdHdhcm5pbmcobWVzc2FnZSwgY2F0ZWdvcnksIGZpbGVuYW1lLCBsaW5lbm8sIGxpbmUpKQotICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICBwYXNzICMgdGhlIGZpbGUgKHByb2JhYmx5IHN0ZGVycikgaXMgaW52YWxpZCAtIHRoaXMgd2FybmluZyBnZXRzIGxvc3QuCiAKIGRlZiBmb3JtYXR3YXJuaW5nKG1lc3NhZ2UsIGNhdGVnb3J5LCBmaWxlbmFtZSwgbGluZW5vLCBsaW5lPU5vbmUpOgogICAgICIiIkZ1bmN0aW9uIHRvIGZvcm1hdCBhIHdhcm5pbmcgdGhlIHN0YW5kYXJkIHdheS4iIiIKKyAgICBpbXBvcnQgbGluZWNhY2hlCiAgICAgcyA9ICAiJXM6JXM6ICVzOiAlc1xuIiAlIChmaWxlbmFtZSwgbGluZW5vLCBjYXRlZ29yeS5fX25hbWVfXywgbWVzc2FnZSkKICAgICBsaW5lID0gbGluZWNhY2hlLmdldGxpbmUoZmlsZW5hbWUsIGxpbmVubykgaWYgbGluZSBpcyBOb25lIGVsc2UgbGluZQogICAgIGlmIGxpbmU6CkBAIC01NSw2ICs1Niw3IEBACiAgICAgICAgIGZpbHRlcnMuYXBwZW5kKGl0ZW0pCiAgICAgZWxzZToKICAgICAgICAgZmlsdGVycy5pbnNlcnQoMCwgaXRlbSkKKyAgICBfZmlsdGVyc19tdXRhdGVkKCkKIAogZGVmIHNpbXBsZWZpbHRlcihhY3Rpb24sIGNhdGVnb3J5PVdhcm5pbmcsIGxpbmVubz0wLCBhcHBlbmQ9RmFsc2UpOgogICAgICIiIkluc2VydCBhIHNpbXBsZSBlbnRyeSBpbnRvIHRoZSBsaXN0IG9mIHdhcm5pbmdzIGZpbHRlcnMgKGF0IHRoZSBmcm9udCkuCkBAIC03NSwxMCArNzcsMTIgQEAKICAgICAgICAgZmlsdGVycy5hcHBlbmQoaXRlbSkKICAgICBlbHNlOgogICAgICAgICBmaWx0ZXJzLmluc2VydCgwLCBpdGVtKQorICAgIF9maWx0ZXJzX211dGF0ZWQoKQogCiBkZWYgcmVzZXR3YXJuaW5ncygpOgogICAgICIiIkNsZWFyIHRoZSBsaXN0IG9mIHdhcm5pbmcgZmlsdGVycywgc28gdGhhdCBubyBmaWx0ZXJzIGFyZSBhY3RpdmUuIiIiCiAgICAgZmlsdGVyc1s6XSA9IFtdCisgICAgX2ZpbHRlcnNfbXV0YXRlZCgpCiAKIGNsYXNzIF9PcHRpb25FcnJvcihFeGNlcHRpb24pOgogICAgICIiIkV4Y2VwdGlvbiB1c2VkIGJ5IG9wdGlvbiBwcm9jZXNzaW5nIGhlbHBlcnMuIiIiCkBAIC0yMDYsNiArMjEwLDkgQEAKICAgICAgICAgICAgIG1vZHVsZSA9IG1vZHVsZVs6LTNdICMgWFhYIFdoYXQgYWJvdXQgbGVhZGluZyBwYXRobmFtZT8KICAgICBpZiByZWdpc3RyeSBpcyBOb25lOgogICAgICAgICByZWdpc3RyeSA9IHt9CisgICAgaWYgcmVnaXN0cnkuZ2V0KCd2ZXJzaW9uJywgMCkgIT0gX2ZpbHRlcnNfdmVyc2lvbjoKKyAgICAgICAgcmVnaXN0cnkuY2xlYXIoKQorICAgICAgICByZWdpc3RyeVsndmVyc2lvbiddID0gX2ZpbHRlcnNfdmVyc2lvbgogICAgIGlmIGlzaW5zdGFuY2UobWVzc2FnZSwgV2FybmluZyk6CiAgICAgICAgIHRleHQgPSBzdHIobWVzc2FnZSkKICAgICAgICAgY2F0ZWdvcnkgPSBtZXNzYWdlLl9fY2xhc3NfXwpAQCAtMjMzLDYgKzI0MCw3IEBACiAKICAgICAjIFByaW1lIHRoZSBsaW5lY2FjaGUgZm9yIGZvcm1hdHRpbmcsIGluIGNhc2UgdGhlCiAgICAgIyAiZmlsZSIgaXMgYWN0dWFsbHkgaW4gYSB6aXBmaWxlIG9yIHNvbWV0aGluZy4KKyAgICBpbXBvcnQgbGluZWNhY2hlCiAgICAgbGluZWNhY2hlLmdldGxpbmVzKGZpbGVuYW1lLCBtb2R1bGVfZ2xvYmFscykKIAogICAgIGlmIGFjdGlvbiA9PSAiZXJyb3IiOgpAQCAtMzMwLDYgKzMzOCw3IEBACiAgICAgICAgIHNlbGYuX2VudGVyZWQgPSBUcnVlCiAgICAgICAgIHNlbGYuX2ZpbHRlcnMgPSBzZWxmLl9tb2R1bGUuZmlsdGVycwogICAgICAgICBzZWxmLl9tb2R1bGUuZmlsdGVycyA9IHNlbGYuX2ZpbHRlcnNbOl0KKyAgICAgICAgc2VsZi5fbW9kdWxlLl9maWx0ZXJzX211dGF0ZWQoKQogICAgICAgICBzZWxmLl9zaG93d2FybmluZyA9IHNlbGYuX21vZHVsZS5zaG93d2FybmluZwogICAgICAgICBpZiBzZWxmLl9yZWNvcmQ6CiAgICAgICAgICAgICBsb2cgPSBbXQpAQCAtMzQ0LDYgKzM1Myw3IEBACiAgICAgICAgIGlmIG5vdCBzZWxmLl9lbnRlcmVkOgogICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJDYW5ub3QgZXhpdCAlciB3aXRob3V0IGVudGVyaW5nIGZpcnN0IiAlIHNlbGYpCiAgICAgICAgIHNlbGYuX21vZHVsZS5maWx0ZXJzID0gc2VsZi5fZmlsdGVycworICAgICAgICBzZWxmLl9tb2R1bGUuX2ZpbHRlcnNfbXV0YXRlZCgpCiAgICAgICAgIHNlbGYuX21vZHVsZS5zaG93d2FybmluZyA9IHNlbGYuX3Nob3d3YXJuaW5nCiAKIApAQCAtMzU4LDE1ICszNjgsMjIgQEAKIF93YXJuaW5nc19kZWZhdWx0cyA9IEZhbHNlCiB0cnk6CiAgICAgZnJvbSBfd2FybmluZ3MgaW1wb3J0IChmaWx0ZXJzLCBfZGVmYXVsdGFjdGlvbiwgX29uY2VyZWdpc3RyeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuLCB3YXJuX2V4cGxpY2l0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgd2Fybiwgd2Fybl9leHBsaWNpdCwgX2ZpbHRlcnNfbXV0YXRlZCkKICAgICBkZWZhdWx0YWN0aW9uID0gX2RlZmF1bHRhY3Rpb24KICAgICBvbmNlcmVnaXN0cnkgPSBfb25jZXJlZ2lzdHJ5CiAgICAgX3dhcm5pbmdzX2RlZmF1bHRzID0gVHJ1ZQorCiBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgZmlsdGVycyA9IFtdCiAgICAgZGVmYXVsdGFjdGlvbiA9ICJkZWZhdWx0IgogICAgIG9uY2VyZWdpc3RyeSA9IHt9CiAKKyAgICBfZmlsdGVyc192ZXJzaW9uID0gMQorCisgICAgZGVmIF9maWx0ZXJzX211dGF0ZWQoKToKKyAgICAgICAgZ2xvYmFsIF9maWx0ZXJzX3ZlcnNpb24KKyAgICAgICAgX2ZpbHRlcnNfdmVyc2lvbiArPSAxCisKIAogIyBNb2R1bGUgaW5pdGlhbGl6YXRpb24KIF9wcm9jZXNzb3B0aW9ucyhzeXMud2Fybm9wdGlvbnMpCmRpZmYgLS1naXQgYS9MaWIvd2F2ZS5weSBiL0xpYi93YXZlLnB5CmluZGV4IDRhMjIzNDUuLjhhMTAxZTMgMTAwNjQ0Ci0tLSBhL0xpYi93YXZlLnB5CisrKyBiL0xpYi93YXZlLnB5CkBAIC0xOCw3ICsxOCw3IEBACiAgICAgICBnZXRjb21wdHlwZSgpICAgLS0gcmV0dXJucyBjb21wcmVzc2lvbiB0eXBlICgnTk9ORScgZm9yIGxpbmVhciBzYW1wbGVzKQogICAgICAgZ2V0Y29tcG5hbWUoKSAgIC0tIHJldHVybnMgaHVtYW4tcmVhZGFibGUgdmVyc2lvbiBvZgogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXByZXNzaW9uIHR5cGUgKCdub3QgY29tcHJlc3NlZCcgbGluZWFyIHNhbXBsZXMpCi0gICAgICBnZXRwYXJhbXMoKSAgICAgLS0gcmV0dXJucyBhIHR1cGxlIGNvbnNpc3Rpbmcgb2YgYWxsIG9mIHRoZQorICAgICAgZ2V0cGFyYW1zKCkgICAgIC0tIHJldHVybnMgYSBuYW1lZHR1cGxlIGNvbnNpc3Rpbmcgb2YgYWxsIG9mIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgIGFib3ZlIGluIHRoZSBhYm92ZSBvcmRlcgogICAgICAgZ2V0bWFya2VycygpICAgIC0tIHJldHVybnMgTm9uZSAoZm9yIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICBhaWZjIG1vZHVsZSkKQEAgLTY1LDcgKzY1LDcgQEAKIGJlIHBhdGNoZWQgdXAuCiBJdCBpcyBiZXN0IHRvIGZpcnN0IHNldCBhbGwgcGFyYW1ldGVycywgcGVyaGFwcyBwb3NzaWJseSB0aGUKIGNvbXByZXNzaW9uIHR5cGUsIGFuZCB0aGVuIHdyaXRlIGF1ZGlvIGZyYW1lcyB1c2luZyB3cml0ZWZyYW1lc3Jhdy4KLVdoZW4gYWxsIGZyYW1lcyBoYXZlIGJlZW4gd3JpdHRlbiwgZWl0aGVyIGNhbGwgd3JpdGVmcmFtZXMoJycpIG9yCitXaGVuIGFsbCBmcmFtZXMgaGF2ZSBiZWVuIHdyaXR0ZW4sIGVpdGhlciBjYWxsIHdyaXRlZnJhbWVzKGInJykgb3IKIGNsb3NlKCkgdG8gcGF0Y2ggdXAgdGhlIHNpemVzIGluIHRoZSBoZWFkZXIuCiBUaGUgY2xvc2UoKSBtZXRob2QgaXMgY2FsbGVkIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgY2xhc3MgaW5zdGFuY2UKIGlzIGRlc3Ryb3llZC4KQEAgLTgyLDE1ICs4MiwxNCBAQAogCiBfYXJyYXlfZm10cyA9IE5vbmUsICdiJywgJ2gnLCBOb25lLCAnaScKIAoraW1wb3J0IGF1ZGlvb3AKIGltcG9ydCBzdHJ1Y3QKIGltcG9ydCBzeXMKIGZyb20gY2h1bmsgaW1wb3J0IENodW5rCitmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBuYW1lZHR1cGxlCiAKLWRlZiBfYnl0ZXN3YXAzKGRhdGEpOgotICAgIGJhID0gYnl0ZWFycmF5KGRhdGEpCi0gICAgYmFbOjozXSA9IGRhdGFbMjo6M10KLSAgICBiYVsyOjozXSA9IGRhdGFbOjozXQotICAgIHJldHVybiBieXRlcyhiYSkKK193YXZlX3BhcmFtcyA9IG5hbWVkdHVwbGUoJ193YXZlX3BhcmFtcycsCisgICAgICAgICAgICAgICAgICAgICAnbmNoYW5uZWxzIHNhbXB3aWR0aCBmcmFtZXJhdGUgbmZyYW1lcyBjb21wdHlwZSBjb21wbmFtZScpCiAKIGNsYXNzIFdhdmVfcmVhZDoKICAgICAiIiJWYXJpYWJsZXMgdXNlZCBpbiB0aGlzIGNsYXNzOgpAQCAtMTY5LDYgKzE2OCwxMyBAQAogCiAgICAgZGVmIF9fZGVsX18oc2VsZik6CiAgICAgICAgIHNlbGYuY2xvc2UoKQorCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqYXJncyk6CisgICAgICAgIHNlbGYuY2xvc2UoKQorCiAgICAgIwogICAgICMgVXNlciB2aXNpYmxlIG1ldGhvZHMuCiAgICAgIwpAQCAtMTgwLDEwICsxODYsMTEgQEAKICAgICAgICAgc2VsZi5fc291bmRwb3MgPSAwCiAKICAgICBkZWYgY2xvc2Uoc2VsZik6Ci0gICAgICAgIGlmIHNlbGYuX2lfb3BlbmVkX3RoZV9maWxlOgotICAgICAgICAgICAgc2VsZi5faV9vcGVuZWRfdGhlX2ZpbGUuY2xvc2UoKQotICAgICAgICAgICAgc2VsZi5faV9vcGVuZWRfdGhlX2ZpbGUgPSBOb25lCiAgICAgICAgIHNlbGYuX2ZpbGUgPSBOb25lCisgICAgICAgIGZpbGUgPSBzZWxmLl9pX29wZW5lZF90aGVfZmlsZQorICAgICAgICBpZiBmaWxlOgorICAgICAgICAgICAgc2VsZi5faV9vcGVuZWRfdGhlX2ZpbGUgPSBOb25lCisgICAgICAgICAgICBmaWxlLmNsb3NlKCkKIAogICAgIGRlZiB0ZWxsKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5fc291bmRwb3MKQEAgLTIwNyw5ICsyMTQsOSBAQAogICAgICAgICByZXR1cm4gc2VsZi5fY29tcG5hbWUKIAogICAgIGRlZiBnZXRwYXJhbXMoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLmdldG5jaGFubmVscygpLCBzZWxmLmdldHNhbXB3aWR0aCgpLCBcCi0gICAgICAgICAgICAgICBzZWxmLmdldGZyYW1lcmF0ZSgpLCBzZWxmLmdldG5mcmFtZXMoKSwgXAotICAgICAgICAgICAgICAgc2VsZi5nZXRjb21wdHlwZSgpLCBzZWxmLmdldGNvbXBuYW1lKCkKKyAgICAgICAgcmV0dXJuIF93YXZlX3BhcmFtcyhzZWxmLmdldG5jaGFubmVscygpLCBzZWxmLmdldHNhbXB3aWR0aCgpLAorICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdldGZyYW1lcmF0ZSgpLCBzZWxmLmdldG5mcmFtZXMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZXRjb21wdHlwZSgpLCBzZWxmLmdldGNvbXBuYW1lKCkpCiAKICAgICBkZWYgZ2V0bWFya2VycyhzZWxmKToKICAgICAgICAgcmV0dXJuIE5vbmUKQEAgLTIzMiwyOSArMjM5LDkgQEAKICAgICAgICAgICAgIHNlbGYuX2RhdGFfc2Vla19uZWVkZWQgPSAwCiAgICAgICAgIGlmIG5mcmFtZXMgPT0gMDoKICAgICAgICAgICAgIHJldHVybiBiJycKLSAgICAgICAgaWYgc2VsZi5fc2FtcHdpZHRoIGluICgyLCA0KSBhbmQgc3lzLmJ5dGVvcmRlciA9PSAnYmlnJzoKLSAgICAgICAgICAgICMgdW5mb3J0dW5hdGVseSB0aGUgZnJvbWZpbGUoKSBtZXRob2QgZG9lcyBub3QgdGFrZQotICAgICAgICAgICAgIyBzb21ldGhpbmcgdGhhdCBvbmx5IGxvb2tzIGxpa2UgYSBmaWxlIG9iamVjdCwgc28KLSAgICAgICAgICAgICMgd2UgaGF2ZSB0byByZWFjaCBpbnRvIHRoZSBpbm5hcmRzIG9mIHRoZSBjaHVuayBvYmplY3QKLSAgICAgICAgICAgIGltcG9ydCBhcnJheQotICAgICAgICAgICAgY2h1bmsgPSBzZWxmLl9kYXRhX2NodW5rCi0gICAgICAgICAgICBkYXRhID0gYXJyYXkuYXJyYXkoX2FycmF5X2ZtdHNbc2VsZi5fc2FtcHdpZHRoXSkKLSAgICAgICAgICAgIGFzc2VydCBkYXRhLml0ZW1zaXplID09IHNlbGYuX3NhbXB3aWR0aAotICAgICAgICAgICAgbml0ZW1zID0gbmZyYW1lcyAqIHNlbGYuX25jaGFubmVscwotICAgICAgICAgICAgaWYgbml0ZW1zICogc2VsZi5fc2FtcHdpZHRoID4gY2h1bmsuY2h1bmtzaXplIC0gY2h1bmsuc2l6ZV9yZWFkOgotICAgICAgICAgICAgICAgIG5pdGVtcyA9IChjaHVuay5jaHVua3NpemUgLSBjaHVuay5zaXplX3JlYWQpIC8vIHNlbGYuX3NhbXB3aWR0aAotICAgICAgICAgICAgZGF0YS5mcm9tZmlsZShjaHVuay5maWxlLmZpbGUsIG5pdGVtcykKLSAgICAgICAgICAgICMgInRlbGwiIGRhdGEgY2h1bmsgaG93IG11Y2ggd2FzIHJlYWQKLSAgICAgICAgICAgIGNodW5rLnNpemVfcmVhZCA9IGNodW5rLnNpemVfcmVhZCArIG5pdGVtcyAqIHNlbGYuX3NhbXB3aWR0aAotICAgICAgICAgICAgIyBkbyB0aGUgc2FtZSBmb3IgdGhlIG91dGVybW9zdCBjaHVuawotICAgICAgICAgICAgY2h1bmsgPSBjaHVuay5maWxlCi0gICAgICAgICAgICBjaHVuay5zaXplX3JlYWQgPSBjaHVuay5zaXplX3JlYWQgKyBuaXRlbXMgKiBzZWxmLl9zYW1wd2lkdGgKLSAgICAgICAgICAgIGRhdGEuYnl0ZXN3YXAoKQotICAgICAgICAgICAgZGF0YSA9IGRhdGEudG9ieXRlcygpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBkYXRhID0gc2VsZi5fZGF0YV9jaHVuay5yZWFkKG5mcmFtZXMgKiBzZWxmLl9mcmFtZXNpemUpCi0gICAgICAgICAgICBpZiBzZWxmLl9zYW1wd2lkdGggPT0gMyBhbmQgc3lzLmJ5dGVvcmRlciA9PSAnYmlnJzoKLSAgICAgICAgICAgICAgICBkYXRhID0gX2J5dGVzd2FwMyhkYXRhKQorICAgICAgICBkYXRhID0gc2VsZi5fZGF0YV9jaHVuay5yZWFkKG5mcmFtZXMgKiBzZWxmLl9mcmFtZXNpemUpCisgICAgICAgIGlmIHNlbGYuX3NhbXB3aWR0aCAhPSAxIGFuZCBzeXMuYnl0ZW9yZGVyID09ICdiaWcnOgorICAgICAgICAgICAgZGF0YSA9IGF1ZGlvb3AuYnl0ZXN3YXAoZGF0YSwgc2VsZi5fc2FtcHdpZHRoKQogICAgICAgICBpZiBzZWxmLl9jb252ZXJ0IGFuZCBkYXRhOgogICAgICAgICAgICAgZGF0YSA9IHNlbGYuX2NvbnZlcnQoZGF0YSkKICAgICAgICAgc2VsZi5fc291bmRwb3MgPSBzZWxmLl9zb3VuZHBvcyArIGxlbihkYXRhKSAvLyAoc2VsZi5fbmNoYW5uZWxzICogc2VsZi5fc2FtcHdpZHRoKQpAQCAtMzI4LDYgKzMxNSwxMiBAQAogICAgIGRlZiBfX2RlbF9fKHNlbGYpOgogICAgICAgICBzZWxmLmNsb3NlKCkKIAorICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgKmFyZ3MpOgorICAgICAgICBzZWxmLmNsb3NlKCkKKwogICAgICMKICAgICAjIFVzZXIgdmlzaWJsZSBtZXRob2RzLgogICAgICMKQEAgLTQwMiw4ICszOTUsOCBAQAogICAgIGRlZiBnZXRwYXJhbXMoc2VsZik6CiAgICAgICAgIGlmIG5vdCBzZWxmLl9uY2hhbm5lbHMgb3Igbm90IHNlbGYuX3NhbXB3aWR0aCBvciBub3Qgc2VsZi5fZnJhbWVyYXRlOgogICAgICAgICAgICAgcmFpc2UgRXJyb3IoJ25vdCBhbGwgcGFyYW1ldGVycyBzZXQnKQotICAgICAgICByZXR1cm4gc2VsZi5fbmNoYW5uZWxzLCBzZWxmLl9zYW1wd2lkdGgsIHNlbGYuX2ZyYW1lcmF0ZSwgXAotICAgICAgICAgICAgICBzZWxmLl9uZnJhbWVzLCBzZWxmLl9jb21wdHlwZSwgc2VsZi5fY29tcG5hbWUKKyAgICAgICAgcmV0dXJuIF93YXZlX3BhcmFtcyhzZWxmLl9uY2hhbm5lbHMsIHNlbGYuX3NhbXB3aWR0aCwgc2VsZi5fZnJhbWVyYXRlLAorICAgICAgICAgICAgICBzZWxmLl9uZnJhbWVzLCBzZWxmLl9jb21wdHlwZSwgc2VsZi5fY29tcG5hbWUpCiAKICAgICBkZWYgc2V0bWFyayhzZWxmLCBpZCwgcG9zLCBuYW1lKToKICAgICAgICAgcmFpc2UgRXJyb3IoJ3NldG1hcmsoKSBub3Qgc3VwcG9ydGVkJykKQEAgLTQxOCwyNCArNDExLDE2IEBACiAgICAgICAgIHJldHVybiBzZWxmLl9uZnJhbWVzd3JpdHRlbgogCiAgICAgZGVmIHdyaXRlZnJhbWVzcmF3KHNlbGYsIGRhdGEpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShkYXRhLCAoYnl0ZXMsIGJ5dGVhcnJheSkpOgorICAgICAgICAgICAgZGF0YSA9IG1lbW9yeXZpZXcoZGF0YSkuY2FzdCgnQicpCiAgICAgICAgIHNlbGYuX2Vuc3VyZV9oZWFkZXJfd3JpdHRlbihsZW4oZGF0YSkpCiAgICAgICAgIG5mcmFtZXMgPSBsZW4oZGF0YSkgLy8gKHNlbGYuX3NhbXB3aWR0aCAqIHNlbGYuX25jaGFubmVscykKICAgICAgICAgaWYgc2VsZi5fY29udmVydDoKICAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9jb252ZXJ0KGRhdGEpCi0gICAgICAgIGlmIHNlbGYuX3NhbXB3aWR0aCBpbiAoMiwgNCkgYW5kIHN5cy5ieXRlb3JkZXIgPT0gJ2JpZyc6Ci0gICAgICAgICAgICBpbXBvcnQgYXJyYXkKLSAgICAgICAgICAgIGEgPSBhcnJheS5hcnJheShfYXJyYXlfZm10c1tzZWxmLl9zYW1wd2lkdGhdKQotICAgICAgICAgICAgYS5mcm9tYnl0ZXMoZGF0YSkKLSAgICAgICAgICAgIGRhdGEgPSBhCi0gICAgICAgICAgICBhc3NlcnQgZGF0YS5pdGVtc2l6ZSA9PSBzZWxmLl9zYW1wd2lkdGgKLSAgICAgICAgICAgIGRhdGEuYnl0ZXN3YXAoKQotICAgICAgICAgICAgZGF0YS50b2ZpbGUoc2VsZi5fZmlsZSkKLSAgICAgICAgICAgIHNlbGYuX2RhdGF3cml0dGVuID0gc2VsZi5fZGF0YXdyaXR0ZW4gKyBsZW4oZGF0YSkgKiBzZWxmLl9zYW1wd2lkdGgKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGlmIHNlbGYuX3NhbXB3aWR0aCA9PSAzIGFuZCBzeXMuYnl0ZW9yZGVyID09ICdiaWcnOgotICAgICAgICAgICAgICAgIGRhdGEgPSBfYnl0ZXN3YXAzKGRhdGEpCi0gICAgICAgICAgICBzZWxmLl9maWxlLndyaXRlKGRhdGEpCi0gICAgICAgICAgICBzZWxmLl9kYXRhd3JpdHRlbiA9IHNlbGYuX2RhdGF3cml0dGVuICsgbGVuKGRhdGEpCisgICAgICAgIGlmIHNlbGYuX3NhbXB3aWR0aCAhPSAxIGFuZCBzeXMuYnl0ZW9yZGVyID09ICdiaWcnOgorICAgICAgICAgICAgZGF0YSA9IGF1ZGlvb3AuYnl0ZXN3YXAoZGF0YSwgc2VsZi5fc2FtcHdpZHRoKQorICAgICAgICBzZWxmLl9maWxlLndyaXRlKGRhdGEpCisgICAgICAgIHNlbGYuX2RhdGF3cml0dGVuICs9IGxlbihkYXRhKQogICAgICAgICBzZWxmLl9uZnJhbWVzd3JpdHRlbiA9IHNlbGYuX25mcmFtZXN3cml0dGVuICsgbmZyYW1lcwogCiAgICAgZGVmIHdyaXRlZnJhbWVzKHNlbGYsIGRhdGEpOgpAQCAtNDQ0LDE3ICs0MjksMTggQEAKICAgICAgICAgICAgIHNlbGYuX3BhdGNoaGVhZGVyKCkKIAogICAgIGRlZiBjbG9zZShzZWxmKToKLSAgICAgICAgaWYgc2VsZi5fZmlsZToKLSAgICAgICAgICAgIHRyeToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgc2VsZi5fZmlsZToKICAgICAgICAgICAgICAgICBzZWxmLl9lbnN1cmVfaGVhZGVyX3dyaXR0ZW4oMCkKICAgICAgICAgICAgICAgICBpZiBzZWxmLl9kYXRhbGVuZ3RoICE9IHNlbGYuX2RhdGF3cml0dGVuOgogICAgICAgICAgICAgICAgICAgICBzZWxmLl9wYXRjaGhlYWRlcigpCiAgICAgICAgICAgICAgICAgc2VsZi5fZmlsZS5mbHVzaCgpCi0gICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGUgPSBOb25lCi0gICAgICAgIGlmIHNlbGYuX2lfb3BlbmVkX3RoZV9maWxlOgotICAgICAgICAgICAgc2VsZi5faV9vcGVuZWRfdGhlX2ZpbGUuY2xvc2UoKQotICAgICAgICAgICAgc2VsZi5faV9vcGVuZWRfdGhlX2ZpbGUgPSBOb25lCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLl9maWxlID0gTm9uZQorICAgICAgICAgICAgZmlsZSA9IHNlbGYuX2lfb3BlbmVkX3RoZV9maWxlCisgICAgICAgICAgICBpZiBmaWxlOgorICAgICAgICAgICAgICAgIHNlbGYuX2lfb3BlbmVkX3RoZV9maWxlID0gTm9uZQorICAgICAgICAgICAgICAgIGZpbGUuY2xvc2UoKQogCiAgICAgIwogICAgICMgSW50ZXJuYWwgbWV0aG9kcy4KQEAgLTQ3NiwxNCArNDYyLDE4IEBACiAgICAgICAgIGlmIG5vdCBzZWxmLl9uZnJhbWVzOgogICAgICAgICAgICAgc2VsZi5fbmZyYW1lcyA9IGluaXRsZW5ndGggLy8gKHNlbGYuX25jaGFubmVscyAqIHNlbGYuX3NhbXB3aWR0aCkKICAgICAgICAgc2VsZi5fZGF0YWxlbmd0aCA9IHNlbGYuX25mcmFtZXMgKiBzZWxmLl9uY2hhbm5lbHMgKiBzZWxmLl9zYW1wd2lkdGgKLSAgICAgICAgc2VsZi5fZm9ybV9sZW5ndGhfcG9zID0gc2VsZi5fZmlsZS50ZWxsKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5fZm9ybV9sZW5ndGhfcG9zID0gc2VsZi5fZmlsZS50ZWxsKCkKKyAgICAgICAgZXhjZXB0IChBdHRyaWJ1dGVFcnJvciwgT1NFcnJvcik6CisgICAgICAgICAgICBzZWxmLl9mb3JtX2xlbmd0aF9wb3MgPSBOb25lCiAgICAgICAgIHNlbGYuX2ZpbGUud3JpdGUoc3RydWN0LnBhY2soJzxMNHM0c0xISExMSEg0cycsCiAgICAgICAgICAgICAzNiArIHNlbGYuX2RhdGFsZW5ndGgsIGInV0FWRScsIGInZm10ICcsIDE2LAogICAgICAgICAgICAgV0FWRV9GT1JNQVRfUENNLCBzZWxmLl9uY2hhbm5lbHMsIHNlbGYuX2ZyYW1lcmF0ZSwKICAgICAgICAgICAgIHNlbGYuX25jaGFubmVscyAqIHNlbGYuX2ZyYW1lcmF0ZSAqIHNlbGYuX3NhbXB3aWR0aCwKICAgICAgICAgICAgIHNlbGYuX25jaGFubmVscyAqIHNlbGYuX3NhbXB3aWR0aCwKICAgICAgICAgICAgIHNlbGYuX3NhbXB3aWR0aCAqIDgsIGInZGF0YScpKQotICAgICAgICBzZWxmLl9kYXRhX2xlbmd0aF9wb3MgPSBzZWxmLl9maWxlLnRlbGwoKQorICAgICAgICBpZiBzZWxmLl9mb3JtX2xlbmd0aF9wb3MgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl9kYXRhX2xlbmd0aF9wb3MgPSBzZWxmLl9maWxlLnRlbGwoKQogICAgICAgICBzZWxmLl9maWxlLndyaXRlKHN0cnVjdC5wYWNrKCc8TCcsIHNlbGYuX2RhdGFsZW5ndGgpKQogICAgICAgICBzZWxmLl9oZWFkZXJ3cml0dGVuID0gVHJ1ZQogCmRpZmYgLS1naXQgYS9MaWIvd2Vha3JlZi5weSBiL0xpYi93ZWFrcmVmLnB5CmluZGV4IGZjYjZiNzQuLjVkMDk0OTcgMTAwNjQ0Ci0tLSBhL0xpYi93ZWFrcmVmLnB5CisrKyBiL0xpYi93ZWFrcmVmLnB5CkBAIC0yMSwxMyArMjEsNjkgQEAKIGZyb20gX3dlYWtyZWZzZXQgaW1wb3J0IFdlYWtTZXQsIF9JdGVyYXRpb25HdWFyZAogCiBpbXBvcnQgY29sbGVjdGlvbnMgICMgSW1wb3J0IGFmdGVyIF93ZWFrcmVmIHRvIGF2b2lkIGNpcmN1bGFyIGltcG9ydC4KK2ltcG9ydCBzeXMKK2ltcG9ydCBpdGVydG9vbHMKIAogUHJveHlUeXBlcyA9IChQcm94eVR5cGUsIENhbGxhYmxlUHJveHlUeXBlKQogCiBfX2FsbF9fID0gWyJyZWYiLCAicHJveHkiLCAiZ2V0d2Vha3JlZmNvdW50IiwgImdldHdlYWtyZWZzIiwKICAgICAgICAgICAgIldlYWtLZXlEaWN0aW9uYXJ5IiwgIlJlZmVyZW5jZVR5cGUiLCAiUHJveHlUeXBlIiwKICAgICAgICAgICAgIkNhbGxhYmxlUHJveHlUeXBlIiwgIlByb3h5VHlwZXMiLCAiV2Vha1ZhbHVlRGljdGlvbmFyeSIsCi0gICAgICAgICAgICJXZWFrU2V0Il0KKyAgICAgICAgICAgIldlYWtTZXQiLCAiV2Vha01ldGhvZCIsICJmaW5hbGl6ZSJdCisKKworY2xhc3MgV2Vha01ldGhvZChyZWYpOgorICAgICIiIgorICAgIEEgY3VzdG9tIGB3ZWFrcmVmLnJlZmAgc3ViY2xhc3Mgd2hpY2ggc2ltdWxhdGVzIGEgd2VhayByZWZlcmVuY2UgdG8KKyAgICBhIGJvdW5kIG1ldGhvZCwgd29ya2luZyBhcm91bmQgdGhlIGxpZmV0aW1lIHByb2JsZW0gb2YgYm91bmQgbWV0aG9kcy4KKyAgICAiIiIKKworICAgIF9fc2xvdHNfXyA9ICJfZnVuY19yZWYiLCAiX21ldGhfdHlwZSIsICJfYWxpdmUiLCAiX193ZWFrcmVmX18iCisKKyAgICBkZWYgX19uZXdfXyhjbHMsIG1ldGgsIGNhbGxiYWNrPU5vbmUpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBvYmogPSBtZXRoLl9fc2VsZl9fCisgICAgICAgICAgICBmdW5jID0gbWV0aC5fX2Z1bmNfXworICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoImFyZ3VtZW50IHNob3VsZCBiZSBhIGJvdW5kIG1ldGhvZCwgbm90IHt9IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JtYXQodHlwZShtZXRoKSkpIGZyb20gTm9uZQorICAgICAgICBkZWYgX2NiKGFyZyk6CisgICAgICAgICAgICAjIFRoZSBzZWxmLXdlYWtyZWYgdHJpY2sgaXMgbmVlZGVkIHRvIGF2b2lkIGNyZWF0aW5nIGEgcmVmZXJlbmNlCisgICAgICAgICAgICAjIGN5Y2xlLgorICAgICAgICAgICAgc2VsZiA9IHNlbGZfd3IoKQorICAgICAgICAgICAgaWYgc2VsZi5fYWxpdmU6CisgICAgICAgICAgICAgICAgc2VsZi5fYWxpdmUgPSBGYWxzZQorICAgICAgICAgICAgICAgIGlmIGNhbGxiYWNrIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhzZWxmKQorICAgICAgICBzZWxmID0gcmVmLl9fbmV3X18oY2xzLCBvYmosIF9jYikKKyAgICAgICAgc2VsZi5fZnVuY19yZWYgPSByZWYoZnVuYywgX2NiKQorICAgICAgICBzZWxmLl9tZXRoX3R5cGUgPSB0eXBlKG1ldGgpCisgICAgICAgIHNlbGYuX2FsaXZlID0gVHJ1ZQorICAgICAgICBzZWxmX3dyID0gcmVmKHNlbGYpCisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19jYWxsX18oc2VsZik6CisgICAgICAgIG9iaiA9IHN1cGVyKCkuX19jYWxsX18oKQorICAgICAgICBmdW5jID0gc2VsZi5fZnVuY19yZWYoKQorICAgICAgICBpZiBvYmogaXMgTm9uZSBvciBmdW5jIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICByZXR1cm4gc2VsZi5fbWV0aF90eXBlKGZ1bmMsIG9iaikKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBXZWFrTWV0aG9kKToKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9hbGl2ZSBvciBub3Qgb3RoZXIuX2FsaXZlOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmIGlzIG90aGVyCisgICAgICAgICAgICByZXR1cm4gcmVmLl9fZXFfXyhzZWxmLCBvdGhlcikgYW5kIHNlbGYuX2Z1bmNfcmVmID09IG90aGVyLl9mdW5jX3JlZgorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBXZWFrTWV0aG9kKToKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9hbGl2ZSBvciBub3Qgb3RoZXIuX2FsaXZlOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmIGlzIG5vdCBvdGhlcgorICAgICAgICAgICAgcmV0dXJuIHJlZi5fX25lX18oc2VsZiwgb3RoZXIpIG9yIHNlbGYuX2Z1bmNfcmVmICE9IG90aGVyLl9mdW5jX3JlZgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgX19oYXNoX18gPSByZWYuX19oYXNoX18KIAogCiBjbGFzcyBXZWFrVmFsdWVEaWN0aW9uYXJ5KGNvbGxlY3Rpb25zLk11dGFibGVNYXBwaW5nKToKQEAgLTQyLDcgKzk4LDEzIEBACiAgICAgIyBvYmplY3RzIGFyZSB1bndyYXBwZWQgb24gdGhlIHdheSBvdXQsIGFuZCB3ZSBhbHdheXMgd3JhcCBvbiB0aGUKICAgICAjIHdheSBpbikuCiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3cpOgorICAgIGRlZiBfX2luaXRfXygqYXJncywgKiprdyk6CisgICAgICAgIGlmIG5vdCBhcmdzOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJkZXNjcmlwdG9yICdfX2luaXRfXycgb2YgJ1dlYWtWYWx1ZURpY3Rpb25hcnknICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAib2JqZWN0IG5lZWRzIGFuIGFyZ3VtZW50IikKKyAgICAgICAgc2VsZiwgKmFyZ3MgPSBhcmdzCisgICAgICAgIGlmIGxlbihhcmdzKSA+IDE6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ2V4cGVjdGVkIGF0IG1vc3QgMSBhcmd1bWVudHMsIGdvdCAlZCcgJSBsZW4oYXJncykpCiAgICAgICAgIGRlZiByZW1vdmUod3IsIHNlbGZyZWY9cmVmKHNlbGYpKToKICAgICAgICAgICAgIHNlbGYgPSBzZWxmcmVmKCkKICAgICAgICAgICAgIGlmIHNlbGYgaXMgbm90IE5vbmU6CkBAIC0xNTMsOCArMjE1LDcgQEAKIAogICAgICAgICAiIiIKICAgICAgICAgd2l0aCBfSXRlcmF0aW9uR3VhcmQoc2VsZik6Ci0gICAgICAgICAgICBmb3Igd3IgaW4gc2VsZi5kYXRhLnZhbHVlcygpOgotICAgICAgICAgICAgICAgIHlpZWxkIHdyCisgICAgICAgICAgICB5aWVsZCBmcm9tIHNlbGYuZGF0YS52YWx1ZXMoKQogCiAgICAgZGVmIHZhbHVlcyhzZWxmKToKICAgICAgICAgd2l0aCBfSXRlcmF0aW9uR3VhcmQoc2VsZik6CkBAIC0xOTcsNyArMjU4LDE0IEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICByZXR1cm4gd3IoKQogCi0gICAgZGVmIHVwZGF0ZShzZWxmLCBkaWN0PU5vbmUsICoqa3dhcmdzKToKKyAgICBkZWYgdXBkYXRlKCphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIGlmIG5vdCBhcmdzOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJkZXNjcmlwdG9yICd1cGRhdGUnIG9mICdXZWFrVmFsdWVEaWN0aW9uYXJ5JyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9iamVjdCBuZWVkcyBhbiBhcmd1bWVudCIpCisgICAgICAgIHNlbGYsICphcmdzID0gYXJncworICAgICAgICBpZiBsZW4oYXJncykgPiAxOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdleHBlY3RlZCBhdCBtb3N0IDEgYXJndW1lbnRzLCBnb3QgJWQnICUgbGVuKGFyZ3MpKQorICAgICAgICBkaWN0ID0gYXJnc1swXSBpZiBhcmdzIGVsc2UgTm9uZQogICAgICAgICBpZiBzZWxmLl9wZW5kaW5nX3JlbW92YWxzOgogICAgICAgICAgICAgc2VsZi5fY29tbWl0X3JlbW92YWxzKCkKICAgICAgICAgZCA9IHNlbGYuZGF0YQpAQCAtMjY3LDYgKzMzNSw3IEBACiAgICAgICAgICMgQSBsaXN0IG9mIGRlYWQgd2Vha3JlZnMgKGtleXMgdG8gYmUgcmVtb3ZlZCkKICAgICAgICAgc2VsZi5fcGVuZGluZ19yZW1vdmFscyA9IFtdCiAgICAgICAgIHNlbGYuX2l0ZXJhdGluZyA9IHNldCgpCisgICAgICAgIHNlbGYuX2RpcnR5X2xlbiA9IEZhbHNlCiAgICAgICAgIGlmIGRpY3QgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBzZWxmLnVwZGF0ZShkaWN0KQogCkBAIC0yODMsMTMgKzM1MiwyMyBAQAogICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgogICAgICAgICAgICAgICAgIHBhc3MKIAorICAgIGRlZiBfc2NydWJfcmVtb3ZhbHMoc2VsZik6CisgICAgICAgIGQgPSBzZWxmLmRhdGEKKyAgICAgICAgc2VsZi5fcGVuZGluZ19yZW1vdmFscyA9IFtrIGZvciBrIGluIHNlbGYuX3BlbmRpbmdfcmVtb3ZhbHMgaWYgayBpbiBkXQorICAgICAgICBzZWxmLl9kaXJ0eV9sZW4gPSBGYWxzZQorCiAgICAgZGVmIF9fZGVsaXRlbV9fKHNlbGYsIGtleSk6CisgICAgICAgIHNlbGYuX2RpcnR5X2xlbiA9IFRydWUKICAgICAgICAgZGVsIHNlbGYuZGF0YVtyZWYoa2V5KV0KIAogICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBrZXkpOgogICAgICAgICByZXR1cm4gc2VsZi5kYXRhW3JlZihrZXkpXQogCiAgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgIGlmIHNlbGYuX2RpcnR5X2xlbiBhbmQgc2VsZi5fcGVuZGluZ19yZW1vdmFsczoKKyAgICAgICAgICAgICMgc2VsZi5fcGVuZGluZ19yZW1vdmFscyBtYXkgc3RpbGwgY29udGFpbiBrZXlzIHdoaWNoIHdlcmUKKyAgICAgICAgICAgICMgZXhwbGljaXRseSByZW1vdmVkLCB3ZSBoYXZlIHRvIHNjcnViIHRoZW0gKHNlZSBpc3N1ZSAjMjExNzMpLgorICAgICAgICAgICAgc2VsZi5fc2NydWJfcmVtb3ZhbHMoKQogICAgICAgICByZXR1cm4gbGVuKHNlbGYuZGF0YSkgLSBsZW4oc2VsZi5fcGVuZGluZ19yZW1vdmFscykKIAogICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKQEAgLTM2Miw2ICs0NDEsNyBAQAogICAgICAgICByZXR1cm4gbGlzdChzZWxmLmRhdGEpCiAKICAgICBkZWYgcG9waXRlbShzZWxmKToKKyAgICAgICAgc2VsZi5fZGlydHlfbGVuID0gVHJ1ZQogICAgICAgICB3aGlsZSBUcnVlOgogICAgICAgICAgICAga2V5LCB2YWx1ZSA9IHNlbGYuZGF0YS5wb3BpdGVtKCkKICAgICAgICAgICAgIG8gPSBrZXkoKQpAQCAtMzY5LDYgKzQ0OSw3IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIG8sIHZhbHVlCiAKICAgICBkZWYgcG9wKHNlbGYsIGtleSwgKmFyZ3MpOgorICAgICAgICBzZWxmLl9kaXJ0eV9sZW4gPSBUcnVlCiAgICAgICAgIHJldHVybiBzZWxmLmRhdGEucG9wKHJlZihrZXkpLCAqYXJncykKIAogICAgIGRlZiBzZXRkZWZhdWx0KHNlbGYsIGtleSwgZGVmYXVsdD1Ob25lKToKQEAgLTM4MywzICs0NjQsMTQwIEBACiAgICAgICAgICAgICAgICAgZFtyZWYoa2V5LCBzZWxmLl9yZW1vdmUpXSA9IHZhbHVlCiAgICAgICAgIGlmIGxlbihrd2FyZ3MpOgogICAgICAgICAgICAgc2VsZi51cGRhdGUoa3dhcmdzKQorCisKK2NsYXNzIGZpbmFsaXplOgorICAgICIiIkNsYXNzIGZvciBmaW5hbGl6YXRpb24gb2Ygd2Vha3JlZmFibGUgb2JqZWN0cworCisgICAgZmluYWxpemUob2JqLCBmdW5jLCAqYXJncywgKiprd2FyZ3MpIHJldHVybnMgYSBjYWxsYWJsZSBmaW5hbGl6ZXIKKyAgICBvYmplY3Qgd2hpY2ggd2lsbCBiZSBjYWxsZWQgd2hlbiBvYmogaXMgZ2FyYmFnZSBjb2xsZWN0ZWQuIFRoZQorICAgIGZpcnN0IHRpbWUgdGhlIGZpbmFsaXplciBpcyBjYWxsZWQgaXQgZXZhbHVhdGVzIGZ1bmMoKmFyZywgKiprd2FyZ3MpCisgICAgYW5kIHJldHVybnMgdGhlIHJlc3VsdC4gQWZ0ZXIgdGhpcyB0aGUgZmluYWxpemVyIGlzIGRlYWQsIGFuZAorICAgIGNhbGxpbmcgaXQganVzdCByZXR1cm5zIE5vbmUuCisKKyAgICBXaGVuIHRoZSBwcm9ncmFtIGV4aXRzIGFueSByZW1haW5pbmcgZmluYWxpemVycyBmb3Igd2hpY2ggdGhlCisgICAgYXRleGl0IGF0dHJpYnV0ZSBpcyB0cnVlIHdpbGwgYmUgcnVuIGluIHJldmVyc2Ugb3JkZXIgb2YgY3JlYXRpb24uCisgICAgQnkgZGVmYXVsdCBhdGV4aXQgaXMgdHJ1ZS4KKyAgICAiIiIKKworICAgICMgRmluYWxpemVyIG9iamVjdHMgZG9uJ3QgaGF2ZSBhbnkgc3RhdGUgb2YgdGhlaXIgb3duLiAgVGhleSBhcmUKKyAgICAjIGp1c3QgdXNlZCBhcyBrZXlzIHRvIGxvb2t1cCBfSW5mbyBvYmplY3RzIGluIHRoZSByZWdpc3RyeS4gIFRoaXMKKyAgICAjIGVuc3VyZXMgdGhhdCB0aGV5IGNhbm5vdCBiZSBwYXJ0IG9mIGEgcmVmLWN5Y2xlLgorCisgICAgX19zbG90c19fID0gKCkKKyAgICBfcmVnaXN0cnkgPSB7fQorICAgIF9zaHV0ZG93biA9IEZhbHNlCisgICAgX2luZGV4X2l0ZXIgPSBpdGVydG9vbHMuY291bnQoKQorICAgIF9kaXJ0eSA9IEZhbHNlCisgICAgX3JlZ2lzdGVyZWRfd2l0aF9hdGV4aXQgPSBGYWxzZQorCisgICAgY2xhc3MgX0luZm86CisgICAgICAgIF9fc2xvdHNfXyA9ICgid2Vha3JlZiIsICJmdW5jIiwgImFyZ3MiLCAia3dhcmdzIiwgImF0ZXhpdCIsICJpbmRleCIpCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgb2JqLCBmdW5jLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBpZiBub3Qgc2VsZi5fcmVnaXN0ZXJlZF93aXRoX2F0ZXhpdDoKKyAgICAgICAgICAgICMgV2UgbWF5IHJlZ2lzdGVyIHRoZSBleGl0IGZ1bmN0aW9uIG1vcmUgdGhhbiBvbmNlIGJlY2F1c2UKKyAgICAgICAgICAgICMgb2YgYSB0aHJlYWQgcmFjZSwgYnV0IHRoYXQgaXMgaGFybWxlc3MKKyAgICAgICAgICAgIGltcG9ydCBhdGV4aXQKKyAgICAgICAgICAgIGF0ZXhpdC5yZWdpc3RlcihzZWxmLl9leGl0ZnVuYykKKyAgICAgICAgICAgIGZpbmFsaXplLl9yZWdpc3RlcmVkX3dpdGhfYXRleGl0ID0gVHJ1ZQorICAgICAgICBpbmZvID0gc2VsZi5fSW5mbygpCisgICAgICAgIGluZm8ud2Vha3JlZiA9IHJlZihvYmosIHNlbGYpCisgICAgICAgIGluZm8uZnVuYyA9IGZ1bmMKKyAgICAgICAgaW5mby5hcmdzID0gYXJncworICAgICAgICBpbmZvLmt3YXJncyA9IGt3YXJncyBvciBOb25lCisgICAgICAgIGluZm8uYXRleGl0ID0gVHJ1ZQorICAgICAgICBpbmZvLmluZGV4ID0gbmV4dChzZWxmLl9pbmRleF9pdGVyKQorICAgICAgICBzZWxmLl9yZWdpc3RyeVtzZWxmXSA9IGluZm8KKyAgICAgICAgZmluYWxpemUuX2RpcnR5ID0gVHJ1ZQorCisgICAgZGVmIF9fY2FsbF9fKHNlbGYsIF89Tm9uZSk6CisgICAgICAgICIiIklmIGFsaXZlIHRoZW4gbWFyayBhcyBkZWFkIGFuZCByZXR1cm4gZnVuYygqYXJncywgKiprd2FyZ3MpOworICAgICAgICBvdGhlcndpc2UgcmV0dXJuIE5vbmUiIiIKKyAgICAgICAgaW5mbyA9IHNlbGYuX3JlZ2lzdHJ5LnBvcChzZWxmLCBOb25lKQorICAgICAgICBpZiBpbmZvIGFuZCBub3Qgc2VsZi5fc2h1dGRvd246CisgICAgICAgICAgICByZXR1cm4gaW5mby5mdW5jKCppbmZvLmFyZ3MsICoqKGluZm8ua3dhcmdzIG9yIHt9KSkKKworICAgIGRlZiBkZXRhY2goc2VsZik6CisgICAgICAgICIiIklmIGFsaXZlIHRoZW4gbWFyayBhcyBkZWFkIGFuZCByZXR1cm4gKG9iaiwgZnVuYywgYXJncywga3dhcmdzKTsKKyAgICAgICAgb3RoZXJ3aXNlIHJldHVybiBOb25lIiIiCisgICAgICAgIGluZm8gPSBzZWxmLl9yZWdpc3RyeS5nZXQoc2VsZikKKyAgICAgICAgb2JqID0gaW5mbyBhbmQgaW5mby53ZWFrcmVmKCkKKyAgICAgICAgaWYgb2JqIGlzIG5vdCBOb25lIGFuZCBzZWxmLl9yZWdpc3RyeS5wb3Aoc2VsZiwgTm9uZSk6CisgICAgICAgICAgICByZXR1cm4gKG9iaiwgaW5mby5mdW5jLCBpbmZvLmFyZ3MsIGluZm8ua3dhcmdzIG9yIHt9KQorCisgICAgZGVmIHBlZWsoc2VsZik6CisgICAgICAgICIiIklmIGFsaXZlIHRoZW4gcmV0dXJuIChvYmosIGZ1bmMsIGFyZ3MsIGt3YXJncyk7CisgICAgICAgIG90aGVyd2lzZSByZXR1cm4gTm9uZSIiIgorICAgICAgICBpbmZvID0gc2VsZi5fcmVnaXN0cnkuZ2V0KHNlbGYpCisgICAgICAgIG9iaiA9IGluZm8gYW5kIGluZm8ud2Vha3JlZigpCisgICAgICAgIGlmIG9iaiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJldHVybiAob2JqLCBpbmZvLmZ1bmMsIGluZm8uYXJncywgaW5mby5rd2FyZ3Mgb3Ige30pCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgYWxpdmUoc2VsZik6CisgICAgICAgICIiIldoZXRoZXIgZmluYWxpemVyIGlzIGFsaXZlIiIiCisgICAgICAgIHJldHVybiBzZWxmIGluIHNlbGYuX3JlZ2lzdHJ5CisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgYXRleGl0KHNlbGYpOgorICAgICAgICAiIiJXaGV0aGVyIGZpbmFsaXplciBzaG91bGQgYmUgY2FsbGVkIGF0IGV4aXQiIiIKKyAgICAgICAgaW5mbyA9IHNlbGYuX3JlZ2lzdHJ5LmdldChzZWxmKQorICAgICAgICByZXR1cm4gYm9vbChpbmZvKSBhbmQgaW5mby5hdGV4aXQKKworICAgIEBhdGV4aXQuc2V0dGVyCisgICAgZGVmIGF0ZXhpdChzZWxmLCB2YWx1ZSk6CisgICAgICAgIGluZm8gPSBzZWxmLl9yZWdpc3RyeS5nZXQoc2VsZikKKyAgICAgICAgaWYgaW5mbzoKKyAgICAgICAgICAgIGluZm8uYXRleGl0ID0gYm9vbCh2YWx1ZSkKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgaW5mbyA9IHNlbGYuX3JlZ2lzdHJ5LmdldChzZWxmKQorICAgICAgICBvYmogPSBpbmZvIGFuZCBpbmZvLndlYWtyZWYoKQorICAgICAgICBpZiBvYmogaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiAnPCVzIG9iamVjdCBhdCAlI3g7IGRlYWQ+JyAlICh0eXBlKHNlbGYpLl9fbmFtZV9fLCBpZChzZWxmKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiAnPCVzIG9iamVjdCBhdCAlI3g7IGZvciAlciBhdCAlI3g+JyAlIFwKKyAgICAgICAgICAgICAgICAodHlwZShzZWxmKS5fX25hbWVfXywgaWQoc2VsZiksIHR5cGUob2JqKS5fX25hbWVfXywgaWQob2JqKSkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfc2VsZWN0X2Zvcl9leGl0KGNscyk6CisgICAgICAgICMgUmV0dXJuIGxpdmUgZmluYWxpemVycyBtYXJrZWQgZm9yIGV4aXQsIG9sZGVzdCBmaXJzdAorICAgICAgICBMID0gWyhmLGkpIGZvciAoZixpKSBpbiBjbHMuX3JlZ2lzdHJ5Lml0ZW1zKCkgaWYgaS5hdGV4aXRdCisgICAgICAgIEwuc29ydChrZXk9bGFtYmRhIGl0ZW06aXRlbVsxXS5pbmRleCkKKyAgICAgICAgcmV0dXJuIFtmIGZvciAoZixpKSBpbiBMXQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9leGl0ZnVuYyhjbHMpOgorICAgICAgICAjIEF0IHNodXRkb3duIGludm9rZSBmaW5hbGl6ZXJzIGZvciB3aGljaCBhdGV4aXQgaXMgdHJ1ZS4KKyAgICAgICAgIyBUaGlzIGlzIGNhbGxlZCBvbmNlIGFsbCBvdGhlciBub24tZGFlbW9uaWMgdGhyZWFkcyBoYXZlIGJlZW4KKyAgICAgICAgIyBqb2luZWQuCisgICAgICAgIHJlZW5hYmxlX2djID0gRmFsc2UKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgY2xzLl9yZWdpc3RyeToKKyAgICAgICAgICAgICAgICBpbXBvcnQgZ2MKKyAgICAgICAgICAgICAgICBpZiBnYy5pc2VuYWJsZWQoKToKKyAgICAgICAgICAgICAgICAgICAgcmVlbmFibGVfZ2MgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgIGdjLmRpc2FibGUoKQorICAgICAgICAgICAgICAgIHBlbmRpbmcgPSBOb25lCisgICAgICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICAgICAgaWYgcGVuZGluZyBpcyBOb25lIG9yIGZpbmFsaXplLl9kaXJ0eToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBlbmRpbmcgPSBjbHMuX3NlbGVjdF9mb3JfZXhpdCgpCisgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbGl6ZS5fZGlydHkgPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgcGVuZGluZzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgIGYgPSBwZW5kaW5nLnBvcCgpCisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgICMgZ2MgaXMgZGlzYWJsZWQsIHNvIChhc3N1bWluZyBubyBkYWVtb25pYworICAgICAgICAgICAgICAgICAgICAgICAgIyB0aHJlYWRzKSB0aGUgZm9sbG93aW5nIGlzIHRoZSBvbmx5IGxpbmUgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICMgdGhpcyBmdW5jdGlvbiB3aGljaCBtaWdodCB0cmlnZ2VyIGNyZWF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAjIG9mIGEgbmV3IGZpbmFsaXplcgorICAgICAgICAgICAgICAgICAgICAgICAgZigpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICAgICAgICAgICAgICBzeXMuZXhjZXB0aG9vaygqc3lzLmV4Y19pbmZvKCkpCisgICAgICAgICAgICAgICAgICAgIGFzc2VydCBmIG5vdCBpbiBjbHMuX3JlZ2lzdHJ5CisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAjIHByZXZlbnQgYW55IG1vcmUgZmluYWxpemVycyBmcm9tIGV4ZWN1dGluZyBkdXJpbmcgc2h1dGRvd24KKyAgICAgICAgICAgIGZpbmFsaXplLl9zaHV0ZG93biA9IFRydWUKKyAgICAgICAgICAgIGlmIHJlZW5hYmxlX2djOgorICAgICAgICAgICAgICAgIGdjLmVuYWJsZSgpCmRpZmYgLS1naXQgYS9MaWIvd2ViYnJvd3Nlci5weSBiL0xpYi93ZWJicm93c2VyLnB5CmluZGV4IDk0NWVkYTQuLjg0NWYxZDAgMTAwNzU1Ci0tLSBhL0xpYi93ZWJicm93c2VyLnB5CisrKyBiL0xpYi93ZWJicm93c2VyLnB5CkBAIC0yLDEzICsyLDExIEBACiAiIiJJbnRlcmZhY2VzIGZvciBsYXVuY2hpbmcgYW5kIHJlbW90ZWx5IGNvbnRyb2xsaW5nIFdlYiBicm93c2Vycy4iIiIKICMgTWFpbnRhaW5lZCBieSBHZW9yZyBCcmFuZGwuCiAKLWltcG9ydCBpbwogaW1wb3J0IG9zCiBpbXBvcnQgc2hsZXgKK2ltcG9ydCBzaHV0aWwKIGltcG9ydCBzeXMKLWltcG9ydCBzdGF0CiBpbXBvcnQgc3VicHJvY2VzcwotaW1wb3J0IHRpbWUKIAogX19hbGxfXyA9IFsiRXJyb3IiLCAib3BlbiIsICJvcGVuX25ldyIsICJvcGVuX25ld190YWIiLCAiZ2V0IiwgInJlZ2lzdGVyIl0KIApAQCAtODMsNyArODEsNyBAQAogCiAgICAgIiIiCiAgICAgY21kID0gYnJvd3Nlci5zcGxpdCgpWzBdCi0gICAgaWYgbm90IF9pc2NvbW1hbmQoY21kKToKKyAgICBpZiBub3Qgc2h1dGlsLndoaWNoKGNtZCk6CiAgICAgICAgIHJldHVybiBbTm9uZSwgTm9uZV0KICAgICBuYW1lID0gb3MucGF0aC5iYXNlbmFtZShjbWQpCiAgICAgdHJ5OgpAQCAtMTAyLDM4ICsxMDAsNiBAQAogICAgIHJldHVybiBbTm9uZSwgTm9uZV0KIAogCi1pZiBzeXMucGxhdGZvcm1bOjNdID09ICJ3aW4iOgotICAgIGRlZiBfaXNleGVjdXRhYmxlKGNtZCk6Ci0gICAgICAgIGNtZCA9IGNtZC5sb3dlcigpCi0gICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGNtZCkgYW5kIGNtZC5lbmRzd2l0aCgoIi5leGUiLCAiLmJhdCIpKToKLSAgICAgICAgICAgIHJldHVybiBUcnVlCi0gICAgICAgIGZvciBleHQgaW4gIi5leGUiLCAiLmJhdCI6Ci0gICAgICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShjbWQgKyBleHQpOgotICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCi0gICAgICAgIHJldHVybiBGYWxzZQotZWxzZToKLSAgICBkZWYgX2lzZXhlY3V0YWJsZShjbWQpOgotICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShjbWQpOgotICAgICAgICAgICAgbW9kZSA9IG9zLnN0YXQoY21kKVtzdGF0LlNUX01PREVdCi0gICAgICAgICAgICBpZiBtb2RlICYgc3RhdC5TX0lYVVNSIG9yIG1vZGUgJiBzdGF0LlNfSVhHUlAgb3IgbW9kZSAmIHN0YXQuU19JWE9USDoKLSAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQotICAgICAgICByZXR1cm4gRmFsc2UKLQotZGVmIF9pc2NvbW1hbmQoY21kKToKLSAgICAiIiJSZXR1cm4gVHJ1ZSBpZiBjbWQgaXMgZXhlY3V0YWJsZSBvciBjYW4gYmUgZm91bmQgb24gdGhlIGV4ZWN1dGFibGUKLSAgICBzZWFyY2ggcGF0aC4iIiIKLSAgICBpZiBfaXNleGVjdXRhYmxlKGNtZCk6Ci0gICAgICAgIHJldHVybiBUcnVlCi0gICAgcGF0aCA9IG9zLmVudmlyb24uZ2V0KCJQQVRIIikKLSAgICBpZiBub3QgcGF0aDoKLSAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgZm9yIGQgaW4gcGF0aC5zcGxpdChvcy5wYXRoc2VwKToKLSAgICAgICAgZXhlID0gb3MucGF0aC5qb2luKGQsIGNtZCkKLSAgICAgICAgaWYgX2lzZXhlY3V0YWJsZShleGUpOgotICAgICAgICAgICAgcmV0dXJuIFRydWUKLSAgICByZXR1cm4gRmFsc2UKLQotCiAjIEdlbmVyYWwgcGFyZW50IGNsYXNzZXMKIAogY2xhc3MgQmFzZUJyb3dzZXIob2JqZWN0KToKQEAgLTE5MywxMCArMTU5LDggQEAKICAgICAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybVs6M10gPT0gJ3dpbic6CiAgICAgICAgICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oY21kbGluZSkKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2V0c2lkID0gZ2V0YXR0cihvcywgJ3NldHNpZCcsIE5vbmUpCi0gICAgICAgICAgICAgICAgaWYgbm90IHNldHNpZDoKLSAgICAgICAgICAgICAgICAgICAgc2V0c2lkID0gZ2V0YXR0cihvcywgJ3NldHBncnAnLCBOb25lKQotICAgICAgICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKGNtZGxpbmUsIGNsb3NlX2Zkcz1UcnVlLCBwcmVleGVjX2ZuPXNldHNpZCkKKyAgICAgICAgICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbihjbWRsaW5lLCBjbG9zZV9mZHM9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydF9uZXdfc2Vzc2lvbj1UcnVlKQogICAgICAgICAgICAgcmV0dXJuIChwLnBvbGwoKSBpcyBOb25lKQogICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHJldHVybiBGYWxzZQpAQCAtMzU1LDExICszMTksNiBAQAogICAgICAgICAgICAgYWN0aW9uID0gIm9wZW5VUkwiCiAKICAgICAgICAgZGV2bnVsbCA9IHN1YnByb2Nlc3MuREVWTlVMTAotICAgICAgICAjIGlmIHBvc3NpYmxlLCBwdXQgYnJvd3NlciBpbiBzZXBhcmF0ZSBwcm9jZXNzIGdyb3VwLCBzbwotICAgICAgICAjIGtleWJvYXJkIGludGVycnVwdHMgZG9uJ3QgYWZmZWN0IGJyb3dzZXIgYXMgd2VsbCBhcyBQeXRob24KLSAgICAgICAgc2V0c2lkID0gZ2V0YXR0cihvcywgJ3NldHNpZCcsIE5vbmUpCi0gICAgICAgIGlmIG5vdCBzZXRzaWQ6Ci0gICAgICAgICAgICBzZXRzaWQgPSBnZXRhdHRyKG9zLCAnc2V0cGdycCcsIE5vbmUpCiAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oWyJrZm1jbGllbnQiLCBhY3Rpb24sIHVybF0sCkBAIC0zNzcsNyArMzM2LDcgQEAKICAgICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFsia29ucXVlcm9yIiwgIi0tc2lsZW50IiwgdXJsXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlX2Zkcz1UcnVlLCBzdGRpbj1kZXZudWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PWRldm51bGwsIHN0ZGVycj1kZXZudWxsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZXhlY19mbj1zZXRzaWQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydF9uZXdfc2Vzc2lvbj1UcnVlKQogICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICMgZmFsbCB0aHJvdWdoIHRvIG5leHQgdmFyaWFudAogICAgICAgICAgICAgcGFzcwpAQCAtMzkwLDcgKzM0OSw3IEBACiAgICAgICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbihbImtmbSIsICItZCIsIHVybF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZV9mZHM9VHJ1ZSwgc3RkaW49ZGV2bnVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1kZXZudWxsLCBzdGRlcnI9ZGV2bnVsbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWV4ZWNfZm49c2V0c2lkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRfbmV3X3Nlc3Npb249VHJ1ZSkKICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgZWxzZToKQEAgLTQxOCwxMSArMzc3LDExIEBACiAgICAgICAgICAgICAjIG5lZWQgdG8gUElORyBlYWNoIG9uZSB1bnRpbCB3ZSBmaW5kIG9uZSB0aGF0J3MgbGl2ZQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHMuY29ubmVjdChmbikKLSAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICAjIG5vIGdvb2Q7IGF0dGVtcHQgdG8gY2xlYW4gaXQgb3V0LCBidXQgZG9uJ3QgZmFpbDoKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIG9zLnVubGluayhmbikKLSAgICAgICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICByZXR1cm4gcwpAQCAtNDUzLDIyICs0MTIsMjIgQEAKIGRlZiByZWdpc3Rlcl9YX2Jyb3dzZXJzKCk6CiAKICAgICAjIHVzZSB4ZGctb3BlbiBpZiBhcm91bmQKLSAgICBpZiBfaXNjb21tYW5kKCJ4ZGctb3BlbiIpOgorICAgIGlmIHNodXRpbC53aGljaCgieGRnLW9wZW4iKToKICAgICAgICAgcmVnaXN0ZXIoInhkZy1vcGVuIiwgTm9uZSwgQmFja2dyb3VuZEJyb3dzZXIoInhkZy1vcGVuIikpCiAKICAgICAjIFRoZSBkZWZhdWx0IEdOT01FMyBicm93c2VyCi0gICAgaWYgIkdOT01FX0RFU0tUT1BfU0VTU0lPTl9JRCIgaW4gb3MuZW52aXJvbiBhbmQgX2lzY29tbWFuZCgiZ3Zmcy1vcGVuIik6CisgICAgaWYgIkdOT01FX0RFU0tUT1BfU0VTU0lPTl9JRCIgaW4gb3MuZW52aXJvbiBhbmQgc2h1dGlsLndoaWNoKCJndmZzLW9wZW4iKToKICAgICAgICAgcmVnaXN0ZXIoImd2ZnMtb3BlbiIsIE5vbmUsIEJhY2tncm91bmRCcm93c2VyKCJndmZzLW9wZW4iKSkKIAogICAgICMgVGhlIGRlZmF1bHQgR05PTUUgYnJvd3NlcgotICAgIGlmICJHTk9NRV9ERVNLVE9QX1NFU1NJT05fSUQiIGluIG9zLmVudmlyb24gYW5kIF9pc2NvbW1hbmQoImdub21lLW9wZW4iKToKKyAgICBpZiAiR05PTUVfREVTS1RPUF9TRVNTSU9OX0lEIiBpbiBvcy5lbnZpcm9uIGFuZCBzaHV0aWwud2hpY2goImdub21lLW9wZW4iKToKICAgICAgICAgcmVnaXN0ZXIoImdub21lLW9wZW4iLCBOb25lLCBCYWNrZ3JvdW5kQnJvd3NlcigiZ25vbWUtb3BlbiIpKQogCiAgICAgIyBUaGUgZGVmYXVsdCBLREUgYnJvd3NlcgotICAgIGlmICJLREVfRlVMTF9TRVNTSU9OIiBpbiBvcy5lbnZpcm9uIGFuZCBfaXNjb21tYW5kKCJrZm1jbGllbnQiKToKKyAgICBpZiAiS0RFX0ZVTExfU0VTU0lPTiIgaW4gb3MuZW52aXJvbiBhbmQgc2h1dGlsLndoaWNoKCJrZm1jbGllbnQiKToKICAgICAgICAgcmVnaXN0ZXIoImtmbWNsaWVudCIsIEtvbnF1ZXJvciwgS29ucXVlcm9yKCJrZm1jbGllbnQiKSkKIAotICAgIGlmIF9pc2NvbW1hbmQoIngtd3d3LWJyb3dzZXIiKToKKyAgICBpZiBzaHV0aWwud2hpY2goIngtd3d3LWJyb3dzZXIiKToKICAgICAgICAgcmVnaXN0ZXIoIngtd3d3LWJyb3dzZXIiLCBOb25lLCBCYWNrZ3JvdW5kQnJvd3NlcigieC13d3ctYnJvd3NlciIpKQogCiAgICAgIyBUaGUgTW96aWxsYS9OZXRzY2FwZSBicm93c2VycwpAQCAtNDc2LDM5ICs0MzUsMzkgQEAKICAgICAgICAgICAgICAgICAgICAgIm1vemlsbGEtZmlyZWJpcmQiLCAiZmlyZWJpcmQiLAogICAgICAgICAgICAgICAgICAgICAiaWNld2Vhc2VsIiwgImljZWFwZSIsCiAgICAgICAgICAgICAgICAgICAgICJzZWFtb25rZXkiLCAibW96aWxsYSIsICJuZXRzY2FwZSIpOgotICAgICAgICBpZiBfaXNjb21tYW5kKGJyb3dzZXIpOgorICAgICAgICBpZiBzaHV0aWwud2hpY2goYnJvd3Nlcik6CiAgICAgICAgICAgICByZWdpc3Rlcihicm93c2VyLCBOb25lLCBNb3ppbGxhKGJyb3dzZXIpKQogCiAgICAgIyBLb25xdWVyb3Iva2ZtLCB0aGUgS0RFIGJyb3dzZXIuCi0gICAgaWYgX2lzY29tbWFuZCgia2ZtIik6CisgICAgaWYgc2h1dGlsLndoaWNoKCJrZm0iKToKICAgICAgICAgcmVnaXN0ZXIoImtmbSIsIEtvbnF1ZXJvciwgS29ucXVlcm9yKCJrZm0iKSkKLSAgICBlbGlmIF9pc2NvbW1hbmQoImtvbnF1ZXJvciIpOgorICAgIGVsaWYgc2h1dGlsLndoaWNoKCJrb25xdWVyb3IiKToKICAgICAgICAgcmVnaXN0ZXIoImtvbnF1ZXJvciIsIEtvbnF1ZXJvciwgS29ucXVlcm9yKCJrb25xdWVyb3IiKSkKIAogICAgICMgR25vbWUncyBHYWxlb24gYW5kIEVwaXBoYW55CiAgICAgZm9yIGJyb3dzZXIgaW4gKCJnYWxlb24iLCAiZXBpcGhhbnkiKToKLSAgICAgICAgaWYgX2lzY29tbWFuZChicm93c2VyKToKKyAgICAgICAgaWYgc2h1dGlsLndoaWNoKGJyb3dzZXIpOgogICAgICAgICAgICAgcmVnaXN0ZXIoYnJvd3NlciwgTm9uZSwgR2FsZW9uKGJyb3dzZXIpKQogCiAgICAgIyBTa2lwc3RvbmUsIGFub3RoZXIgR3RrL01vemlsbGEgYmFzZWQgYnJvd3NlcgotICAgIGlmIF9pc2NvbW1hbmQoInNraXBzdG9uZSIpOgorICAgIGlmIHNodXRpbC53aGljaCgic2tpcHN0b25lIik6CiAgICAgICAgIHJlZ2lzdGVyKCJza2lwc3RvbmUiLCBOb25lLCBCYWNrZ3JvdW5kQnJvd3Nlcigic2tpcHN0b25lIikpCiAKICAgICAjIEdvb2dsZSBDaHJvbWUvQ2hyb21pdW0gYnJvd3NlcnMKICAgICBmb3IgYnJvd3NlciBpbiAoImdvb2dsZS1jaHJvbWUiLCAiY2hyb21lIiwgImNocm9taXVtIiwgImNocm9taXVtLWJyb3dzZXIiKToKLSAgICAgICAgaWYgX2lzY29tbWFuZChicm93c2VyKToKKyAgICAgICAgaWYgc2h1dGlsLndoaWNoKGJyb3dzZXIpOgogICAgICAgICAgICAgcmVnaXN0ZXIoYnJvd3NlciwgTm9uZSwgQ2hyb21lKGJyb3dzZXIpKQogCiAgICAgIyBPcGVyYSwgcXVpdGUgcG9wdWxhcgotICAgIGlmIF9pc2NvbW1hbmQoIm9wZXJhIik6CisgICAgaWYgc2h1dGlsLndoaWNoKCJvcGVyYSIpOgogICAgICAgICByZWdpc3Rlcigib3BlcmEiLCBOb25lLCBPcGVyYSgib3BlcmEiKSkKIAogICAgICMgTmV4dCwgTW9zYWljIC0tIG9sZCBidXQgc3RpbGwgaW4gdXNlLgotICAgIGlmIF9pc2NvbW1hbmQoIm1vc2FpYyIpOgorICAgIGlmIHNodXRpbC53aGljaCgibW9zYWljIik6CiAgICAgICAgIHJlZ2lzdGVyKCJtb3NhaWMiLCBOb25lLCBCYWNrZ3JvdW5kQnJvd3NlcigibW9zYWljIikpCiAKICAgICAjIEdyYWlsLCB0aGUgUHl0aG9uIGJyb3dzZXIuIERvZXMgYW55Ym9keSBzdGlsbCB1c2UgaXQ/Ci0gICAgaWYgX2lzY29tbWFuZCgiZ3JhaWwiKToKKyAgICBpZiBzaHV0aWwud2hpY2goImdyYWlsIik6CiAgICAgICAgIHJlZ2lzdGVyKCJncmFpbCIsIEdyYWlsLCBOb25lKQogCiAjIFByZWZlciBYIGJyb3dzZXJzIGlmIHByZXNlbnQKQEAgLTUxNywxOCArNDc2LDE4IEBACiAKICMgQWxzbyB0cnkgY29uc29sZSBicm93c2VycwogaWYgb3MuZW52aXJvbi5nZXQoIlRFUk0iKToKLSAgICBpZiBfaXNjb21tYW5kKCJ3d3ctYnJvd3NlciIpOgorICAgIGlmIHNodXRpbC53aGljaCgid3d3LWJyb3dzZXIiKToKICAgICAgICAgcmVnaXN0ZXIoInd3dy1icm93c2VyIiwgTm9uZSwgR2VuZXJpY0Jyb3dzZXIoInd3dy1icm93c2VyIikpCiAgICAgIyBUaGUgTGlua3MvZWxpbmtzIGJyb3dzZXJzIDxodHRwOi8vYXJ0YXgua2FybGluLm1mZi5jdW5pLmN6L35taWt1bGFzL2xpbmtzLz4KLSAgICBpZiBfaXNjb21tYW5kKCJsaW5rcyIpOgorICAgIGlmIHNodXRpbC53aGljaCgibGlua3MiKToKICAgICAgICAgcmVnaXN0ZXIoImxpbmtzIiwgTm9uZSwgR2VuZXJpY0Jyb3dzZXIoImxpbmtzIikpCi0gICAgaWYgX2lzY29tbWFuZCgiZWxpbmtzIik6CisgICAgaWYgc2h1dGlsLndoaWNoKCJlbGlua3MiKToKICAgICAgICAgcmVnaXN0ZXIoImVsaW5rcyIsIE5vbmUsIEVsaW5rcygiZWxpbmtzIikpCiAgICAgIyBUaGUgTHlueCBicm93c2VyIDxodHRwOi8vbHlueC5pc2Mub3JnLz4sIDxodHRwOi8vbHlueC5icm93c2VyLm9yZy8+Ci0gICAgaWYgX2lzY29tbWFuZCgibHlueCIpOgorICAgIGlmIHNodXRpbC53aGljaCgibHlueCIpOgogICAgICAgICByZWdpc3RlcigibHlueCIsIE5vbmUsIEdlbmVyaWNCcm93c2VyKCJseW54IikpCiAgICAgIyBUaGUgdzNtIGJyb3dzZXIgPGh0dHA6Ly93M20uc291cmNlZm9yZ2UubmV0Lz4KLSAgICBpZiBfaXNjb21tYW5kKCJ3M20iKToKKyAgICBpZiBzaHV0aWwud2hpY2goInczbSIpOgogICAgICAgICByZWdpc3RlcigidzNtIiwgTm9uZSwgR2VuZXJpY0Jyb3dzZXIoInczbSIpKQogCiAjCkBAIC01NDAsNyArNDk5LDcgQEAKICAgICAgICAgZGVmIG9wZW4oc2VsZiwgdXJsLCBuZXc9MCwgYXV0b3JhaXNlPVRydWUpOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIG9zLnN0YXJ0ZmlsZSh1cmwpCi0gICAgICAgICAgICBleGNlcHQgV2luZG93c0Vycm9yOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgIyBbRXJyb3IgMjJdIE5vIGFwcGxpY2F0aW9uIGlzIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3BlY2lmaWVkCiAgICAgICAgICAgICAgICAgIyBmaWxlIGZvciB0aGlzIG9wZXJhdGlvbjogJzxVUkw+JwogICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQpAQCAtNTU4LDcgKzUxNyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkludGVybmV0IEV4cGxvcmVyXFxJRVhQTE9SRS5FWEUiKQogICAgIGZvciBicm93c2VyIGluICgiZmlyZWZveCIsICJmaXJlYmlyZCIsICJzZWFtb25rZXkiLCAibW96aWxsYSIsCiAgICAgICAgICAgICAgICAgICAgICJuZXRzY2FwZSIsICJvcGVyYSIsIGlleHBsb3JlKToKLSAgICAgICAgaWYgX2lzY29tbWFuZChicm93c2VyKToKKyAgICAgICAgaWYgc2h1dGlsLndoaWNoKGJyb3dzZXIpOgogICAgICAgICAgICAgcmVnaXN0ZXIoYnJvd3NlciwgTm9uZSwgQmFja2dyb3VuZEJyb3dzZXIoYnJvd3NlcikpCiAKICMKQEAgLTY0NCwxNyArNjAzLDYgQEAKICAgICByZWdpc3RlcigiTWFjT1NYIiwgTm9uZSwgTWFjT1NYT1NBU2NyaXB0KCdkZWZhdWx0JyksIC0xKQogCiAKLSMKLSMgUGxhdGZvcm0gc3VwcG9ydCBmb3IgT1MvMgotIwotCi1pZiBzeXMucGxhdGZvcm1bOjNdID09ICJvczIiIGFuZCBfaXNjb21tYW5kKCJuZXRzY2FwZSIpOgotICAgIF90cnlvcmRlciA9IFtdCi0gICAgX2Jyb3dzZXJzID0ge30KLSAgICByZWdpc3Rlcigib3MybmV0c2NhcGUiLCBOb25lLAotICAgICAgICAgICAgIEdlbmVyaWNCcm93c2VyKFsic3RhcnQiLCAibmV0c2NhcGUiLCAiJXMiXSksIC0xKQotCi0KICMgT0ssIG5vdyB0aGF0IHdlIGtub3cgd2hhdCB0aGUgZGVmYXVsdCBwcmVmZXJlbmNlIG9yZGVycyBmb3IgZWFjaAogIyBwbGF0Zm9ybSBhcmUsIGFsbG93IHVzZXIgdG8gb3ZlcnJpZGUgdGhlbSB3aXRoIHRoZSBCUk9XU0VSIHZhcmlhYmxlLgogaWYgIkJST1dTRVIiIGluIG9zLmVudmlyb246CmRpZmYgLS1naXQgYS9MaWIvd3NnaXJlZi9fX2luaXRfXy5weSBiL0xpYi93c2dpcmVmL19faW5pdF9fLnB5CmluZGV4IDQ2YzU3OWYuLjFlZmJiYTAgMTAwNjQ0Ci0tLSBhL0xpYi93c2dpcmVmL19faW5pdF9fLnB5CisrKyBiL0xpYi93c2dpcmVmL19faW5pdF9fLnB5CkBAIC0xLDQgKzEsNCBAQAotIiIid3NnaXJlZiAtLSBhIFdTR0kgKFBFUCAzMzMpIFJlZmVyZW5jZSBMaWJyYXJ5CisiIiJ3c2dpcmVmIC0tIGEgV1NHSSAoUEVQIDMzMzMpIFJlZmVyZW5jZSBMaWJyYXJ5CiAKIEN1cnJlbnQgQ29udGVudHM6CiAKZGlmZiAtLWdpdCBhL0xpYi93c2dpcmVmL3ZhbGlkYXRlLnB5IGIvTGliL3dzZ2lyZWYvdmFsaWRhdGUucHkKaW5kZXggNDllYWE1MS4uNjEwN2RjZCAxMDA2NDQKLS0tIGEvTGliL3dzZ2lyZWYvdmFsaWRhdGUucHkKKysrIGIvTGliL3dzZ2lyZWYvdmFsaWRhdGUucHkKQEAgLTMzNyw3ICszMzcsNyBAQAogCiAgICAgIyBAQDogdGhlc2UgbmVlZCBmaWxsaW5nIG91dDoKICAgICBpZiBlbnZpcm9uWydSRVFVRVNUX01FVEhPRCddIG5vdCBpbiAoCi0gICAgICAgICdHRVQnLCAnSEVBRCcsICdQT1NUJywgJ09QVElPTlMnLCdQVVQnLCdERUxFVEUnLCdUUkFDRScpOgorICAgICAgICAnR0VUJywgJ0hFQUQnLCAnUE9TVCcsICdPUFRJT05TJywgJ1BBVENIJywgJ1BVVCcsICdERUxFVEUnLCAnVFJBQ0UnKToKICAgICAgICAgd2FybmluZ3Mud2FybigKICAgICAgICAgICAgICJVbmtub3duIFJFUVVFU1RfTUVUSE9EOiAlciIgJSBlbnZpcm9uWydSRVFVRVNUX01FVEhPRCddLAogICAgICAgICAgICAgV1NHSVdhcm5pbmcpCmRpZmYgLS1naXQgYS9MaWIveGRybGliLnB5IGIvTGliL3hkcmxpYi5weQppbmRleCBjMDVjZjg3Li5kNmUxYWViIDEwMDY0NAotLS0gYS9MaWIveGRybGliLnB5CisrKyBiL0xpYi94ZHJsaWIucHkKQEAgLTYsNiArNiw3IEBACiAKIGltcG9ydCBzdHJ1Y3QKIGZyb20gaW8gaW1wb3J0IEJ5dGVzSU8KK2Zyb20gZnVuY3Rvb2xzIGltcG9ydCB3cmFwcwogCiBfX2FsbF9fID0gWyJFcnJvciIsICJQYWNrZXIiLCAiVW5wYWNrZXIiLCAiQ29udmVyc2lvbkVycm9yIl0KIApAQCAtMzEsNiArMzIsMTYgQEAKIGNsYXNzIENvbnZlcnNpb25FcnJvcihFcnJvcik6CiAgICAgcGFzcwogCitkZWYgcmFpc2VfY29udmVyc2lvbl9lcnJvcihmdW5jdGlvbik6CisgICAgIiIiIFdyYXAgYW55IHJhaXNlZCBzdHJ1Y3QuZXJyb3JzIGluIGEgQ29udmVyc2lvbkVycm9yLiAiIiIKKworICAgIEB3cmFwcyhmdW5jdGlvbikKKyAgICBkZWYgcmVzdWx0KHNlbGYsIHZhbHVlKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNlbGYsIHZhbHVlKQorICAgICAgICBleGNlcHQgc3RydWN0LmVycm9yIGFzIGU6CisgICAgICAgICAgICByYWlzZSBDb252ZXJzaW9uRXJyb3IoZS5hcmdzWzBdKSBmcm9tIE5vbmUKKyAgICByZXR1cm4gcmVzdWx0CiAKIAogY2xhc3MgUGFja2VyOgpAQCAtNDcsOSArNTgsMTEgQEAKICAgICAjIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5CiAgICAgZ2V0X2J1ZiA9IGdldF9idWZmZXIKIAorICAgIEByYWlzZV9jb252ZXJzaW9uX2Vycm9yCiAgICAgZGVmIHBhY2tfdWludChzZWxmLCB4KToKICAgICAgICAgc2VsZi5fX2J1Zi53cml0ZShzdHJ1Y3QucGFjaygnPkwnLCB4KSkKIAorICAgIEByYWlzZV9jb252ZXJzaW9uX2Vycm9yCiAgICAgZGVmIHBhY2tfaW50KHNlbGYsIHgpOgogICAgICAgICBzZWxmLl9fYnVmLndyaXRlKHN0cnVjdC5wYWNrKCc+bCcsIHgpKQogCkBAIC02MCwyMCArNzMsMjQgQEAKICAgICAgICAgZWxzZTogc2VsZi5fX2J1Zi53cml0ZShiJ1wwXDBcMFwwJykKIAogICAgIGRlZiBwYWNrX3VoeXBlcihzZWxmLCB4KToKLSAgICAgICAgc2VsZi5wYWNrX3VpbnQoeD4+MzIgJiAweGZmZmZmZmZmKQotICAgICAgICBzZWxmLnBhY2tfdWludCh4ICYgMHhmZmZmZmZmZikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5wYWNrX3VpbnQoeD4+MzIgJiAweGZmZmZmZmZmKQorICAgICAgICBleGNlcHQgKFR5cGVFcnJvciwgc3RydWN0LmVycm9yKSBhcyBlOgorICAgICAgICAgICAgcmFpc2UgQ29udmVyc2lvbkVycm9yKGUuYXJnc1swXSkgZnJvbSBOb25lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYucGFja191aW50KHggJiAweGZmZmZmZmZmKQorICAgICAgICBleGNlcHQgKFR5cGVFcnJvciwgc3RydWN0LmVycm9yKSBhcyBlOgorICAgICAgICAgICAgcmFpc2UgQ29udmVyc2lvbkVycm9yKGUuYXJnc1swXSkgZnJvbSBOb25lCiAKICAgICBwYWNrX2h5cGVyID0gcGFja191aHlwZXIKIAorICAgIEByYWlzZV9jb252ZXJzaW9uX2Vycm9yCiAgICAgZGVmIHBhY2tfZmxvYXQoc2VsZiwgeCk6Ci0gICAgICAgIHRyeTogc2VsZi5fX2J1Zi53cml0ZShzdHJ1Y3QucGFjaygnPmYnLCB4KSkKLSAgICAgICAgZXhjZXB0IHN0cnVjdC5lcnJvciBhcyBtc2c6Ci0gICAgICAgICAgICByYWlzZSBDb252ZXJzaW9uRXJyb3IobXNnKQorICAgICAgICBzZWxmLl9fYnVmLndyaXRlKHN0cnVjdC5wYWNrKCc+ZicsIHgpKQogCisgICAgQHJhaXNlX2NvbnZlcnNpb25fZXJyb3IKICAgICBkZWYgcGFja19kb3VibGUoc2VsZiwgeCk6Ci0gICAgICAgIHRyeTogc2VsZi5fX2J1Zi53cml0ZShzdHJ1Y3QucGFjaygnPmQnLCB4KSkKLSAgICAgICAgZXhjZXB0IHN0cnVjdC5lcnJvciBhcyBtc2c6Ci0gICAgICAgICAgICByYWlzZSBDb252ZXJzaW9uRXJyb3IobXNnKQorICAgICAgICBzZWxmLl9fYnVmLndyaXRlKHN0cnVjdC5wYWNrKCc+ZCcsIHgpKQogCiAgICAgZGVmIHBhY2tfZnN0cmluZyhzZWxmLCBuLCBzKToKICAgICAgICAgaWYgbiA8IDA6CmRpZmYgLS1naXQgYS9MaWIveG1sL2RvbS9leHBhdGJ1aWxkZXIucHkgYi9MaWIveG1sL2RvbS9leHBhdGJ1aWxkZXIucHkKaW5kZXggZjA3NGFiOS4uODk3NjE0NCAxMDA2NDQKLS0tIGEvTGliL3htbC9kb20vZXhwYXRidWlsZGVyLnB5CisrKyBiL0xpYi94bWwvZG9tL2V4cGF0YnVpbGRlci5weQpAQCAtMTIxLDEwICsxMjEsMTIgQEAKICAgICAgICAgcW5hbWUgPSAiJXM6JXMiICUgKHByZWZpeCwgbG9jYWxuYW1lKQogICAgICAgICBxbmFtZSA9IGludGVybihxbmFtZSwgcW5hbWUpCiAgICAgICAgIGxvY2FsbmFtZSA9IGludGVybihsb2NhbG5hbWUsIGxvY2FsbmFtZSkKLSAgICBlbHNlOgorICAgIGVsaWYgbGVuKHBhcnRzKSA9PSAyOgogICAgICAgICB1cmksIGxvY2FsbmFtZSA9IHBhcnRzCiAgICAgICAgIHByZWZpeCA9IEVNUFRZX1BSRUZJWAogICAgICAgICBxbmFtZSA9IGxvY2FsbmFtZSA9IGludGVybihsb2NhbG5hbWUsIGxvY2FsbmFtZSkKKyAgICBlbHNlOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJVbnN1cHBvcnRlZCBzeW50YXg6IHNwYWNlcyBpbiBVUklzIG5vdCBzdXBwb3J0ZWQ6ICVyIiAlIG5hbWUpCiAgICAgcmV0dXJuIGludGVybih1cmksIHVyaSksIGxvY2FsbmFtZSwgcHJlZml4LCBxbmFtZQogCiAKQEAgLTkwNSwxMSArOTA3LDggQEAKICAgICAgICAgYnVpbGRlciA9IEV4cGF0QnVpbGRlcigpCiAKICAgICBpZiBpc2luc3RhbmNlKGZpbGUsIHN0cik6Ci0gICAgICAgIGZwID0gb3BlbihmaWxlLCAncmInKQotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggb3BlbihmaWxlLCAncmInKSBhcyBmcDoKICAgICAgICAgICAgIHJlc3VsdCA9IGJ1aWxkZXIucGFyc2VGaWxlKGZwKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgZnAuY2xvc2UoKQogICAgIGVsc2U6CiAgICAgICAgIHJlc3VsdCA9IGJ1aWxkZXIucGFyc2VGaWxlKGZpbGUpCiAgICAgcmV0dXJuIHJlc3VsdApAQCAtOTM5LDExICs5MzgsOCBAQAogICAgICAgICBidWlsZGVyID0gRnJhZ21lbnRCdWlsZGVyKGNvbnRleHQpCiAKICAgICBpZiBpc2luc3RhbmNlKGZpbGUsIHN0cik6Ci0gICAgICAgIGZwID0gb3BlbihmaWxlLCAncmInKQotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggb3BlbihmaWxlLCAncmInKSBhcyBmcDoKICAgICAgICAgICAgIHJlc3VsdCA9IGJ1aWxkZXIucGFyc2VGaWxlKGZwKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgZnAuY2xvc2UoKQogICAgIGVsc2U6CiAgICAgICAgIHJlc3VsdCA9IGJ1aWxkZXIucGFyc2VGaWxlKGZpbGUpCiAgICAgcmV0dXJuIHJlc3VsdApkaWZmIC0tZ2l0IGEvTGliL3htbC9kb20vbWluaWNvbXBhdC5weSBiL0xpYi94bWwvZG9tL21pbmljb21wYXQucHkKaW5kZXggMTI0NDUwMC4uNWQ2ZmFlOSAxMDA2NDQKLS0tIGEvTGliL3htbC9kb20vbWluaWNvbXBhdC5weQorKysgYi9MaWIveG1sL2RvbS9taW5pY29tcGF0LnB5CkBAIC02NCwxMCArNjQsMTAgQEAKICAgICBsZW5ndGggPSBwcm9wZXJ0eShfZ2V0X2xlbmd0aCwgX3NldF9sZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgZG9jPSJUaGUgbnVtYmVyIG9mIG5vZGVzIGluIHRoZSBOb2RlTGlzdC4iKQogCi0gICAgZGVmIF9fZ2V0c3RhdGVfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuIGxpc3Qoc2VsZikKLQorICAgICMgRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkKICAgICBkZWYgX19zZXRzdGF0ZV9fKHNlbGYsIHN0YXRlKToKKyAgICAgICAgaWYgc3RhdGUgaXMgTm9uZToKKyAgICAgICAgICAgIHN0YXRlID0gW10KICAgICAgICAgc2VsZls6XSA9IHN0YXRlCiAKIApkaWZmIC0tZ2l0IGEvTGliL3htbC9kb20vbWluaWRvbS5weSBiL0xpYi94bWwvZG9tL21pbmlkb20ucHkKaW5kZXggNmY3MTYzMS4uYzM3OWEzMyAxMDA2NDQKLS0tIGEvTGliL3htbC9kb20vbWluaWRvbS5weQorKysgYi9MaWIveG1sL2RvbS9taW5pZG9tLnB5CkBAIC05NzYsNyArOTc2LDcgQEAKICAgICBkZWYgX2dldF9ub2RlVmFsdWUoc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLmRhdGEKICAgICBkZWYgX3NldF9ub2RlVmFsdWUoc2VsZiwgdmFsdWUpOgotICAgICAgICBzZWxmLmRhdGEgPSBkYXRhCisgICAgICAgIHNlbGYuZGF0YSA9IHZhbHVlCiAgICAgbm9kZVZhbHVlID0gcHJvcGVydHkoX2dldF9ub2RlVmFsdWUsIF9zZXRfbm9kZVZhbHVlKQogCiAgICAgIyBub2RlTmFtZSBpcyBhbiBhbGlhcyBmb3IgdGFyZ2V0CmRpZmYgLS1naXQgYS9MaWIveG1sL2V0cmVlL0VsZW1lbnRJbmNsdWRlLnB5IGIvTGliL3htbC9ldHJlZS9FbGVtZW50SW5jbHVkZS5weQppbmRleCA3MWVlYjA1Li45NjM0NzBlIDEwMDY0NAotLS0gYS9MaWIveG1sL2V0cmVlL0VsZW1lbnRJbmNsdWRlLnB5CisrKyBiL0xpYi94bWwvZXRyZWUvRWxlbWVudEluY2x1ZGUucHkKQEAgLTcxLDggKzcxLDggQEAKICMgQHJldHVybiBUaGUgZXhwYW5kZWQgcmVzb3VyY2UuICBJZiB0aGUgcGFyc2UgbW9kZSBpcyAieG1sIiwgdGhpcwogIyAgICBpcyBhbiBFbGVtZW50VHJlZSBpbnN0YW5jZS4gIElmIHRoZSBwYXJzZSBtb2RlIGlzICJ0ZXh0IiwgdGhpcwogIyAgICBpcyBhIFVuaWNvZGUgc3RyaW5nLiAgSWYgdGhlIGxvYWRlciBmYWlscywgaXQgY2FuIHJldHVybiBOb25lCi0jICAgIG9yIHJhaXNlIGFuIElPRXJyb3IgZXhjZXB0aW9uLgotIyBAdGhyb3dzIElPRXJyb3IgSWYgdGhlIGxvYWRlciBmYWlscyB0byBsb2FkIHRoZSByZXNvdXJjZS4KKyMgICAgb3IgcmFpc2UgYW4gT1NFcnJvciBleGNlcHRpb24uCisjIEB0aHJvd3MgT1NFcnJvciBJZiB0aGUgbG9hZGVyIGZhaWxzIHRvIGxvYWQgdGhlIHJlc291cmNlLgogCiBkZWYgZGVmYXVsdF9sb2FkZXIoaHJlZiwgcGFyc2UsIGVuY29kaW5nPU5vbmUpOgogICAgIGlmIHBhcnNlID09ICJ4bWwiOgpAQCAtOTQsNyArOTQsNyBAQAogIyAgICAgdGhhdCBpbXBsZW1lbnRzIHRoZSBzYW1lIGludGVyZmFjZSBhcyA8Yj5kZWZhdWx0X2xvYWRlcjwvYj4uCiAjIEB0aHJvd3MgRmF0YWxJbmNsdWRlRXJyb3IgSWYgdGhlIGZ1bmN0aW9uIGZhaWxzIHRvIGluY2x1ZGUgYSBnaXZlbgogIyAgICAgcmVzb3VyY2UsIG9yIGlmIHRoZSB0cmVlIGNvbnRhaW5zIG1hbGZvcm1lZCBYSW5jbHVkZSBlbGVtZW50cy4KLSMgQHRocm93cyBJT0Vycm9yIElmIHRoZSBmdW5jdGlvbiBmYWlscyB0byBsb2FkIGEgZ2l2ZW4gcmVzb3VyY2UuCisjIEB0aHJvd3MgT1NFcnJvciBJZiB0aGUgZnVuY3Rpb24gZmFpbHMgdG8gbG9hZCBhIGdpdmVuIHJlc291cmNlLgogCiBkZWYgaW5jbHVkZShlbGVtLCBsb2FkZXI9Tm9uZSk6CiAgICAgaWYgbG9hZGVyIGlzIE5vbmU6CmRpZmYgLS1naXQgYS9MaWIveG1sL2V0cmVlL0VsZW1lbnRQYXRoLnB5IGIvTGliL3htbC9ldHJlZS9FbGVtZW50UGF0aC5weQppbmRleCBlNzAxNWM3Li5kOTE0ZGRiIDEwMDY0NAotLS0gYS9MaWIveG1sL2V0cmVlL0VsZW1lbnRQYXRoLnB5CisrKyBiL0xpYi94bWwvZXRyZWUvRWxlbWVudFBhdGgucHkKQEAgLTEwNSwxNCArMTA1LDEyIEBACiBkZWYgcHJlcGFyZV9zdGFyKG5leHQsIHRva2VuKToKICAgICBkZWYgc2VsZWN0KGNvbnRleHQsIHJlc3VsdCk6CiAgICAgICAgIGZvciBlbGVtIGluIHJlc3VsdDoKLSAgICAgICAgICAgIGZvciBlIGluIGVsZW06Ci0gICAgICAgICAgICAgICAgeWllbGQgZQorICAgICAgICAgICAgeWllbGQgZnJvbSBlbGVtCiAgICAgcmV0dXJuIHNlbGVjdAogCiBkZWYgcHJlcGFyZV9zZWxmKG5leHQsIHRva2VuKToKICAgICBkZWYgc2VsZWN0KGNvbnRleHQsIHJlc3VsdCk6Ci0gICAgICAgIGZvciBlbGVtIGluIHJlc3VsdDoKLSAgICAgICAgICAgIHlpZWxkIGVsZW0KKyAgICAgICAgeWllbGQgZnJvbSByZXN1bHQKICAgICByZXR1cm4gc2VsZWN0CiAKIGRlZiBwcmVwYXJlX2Rlc2NlbmRhbnQobmV4dCwgdG9rZW4pOgpAQCAtMTc2LDcgKzE3NCw3IEBACiAgICAgICAgICAgICAgICAgaWYgZWxlbS5nZXQoa2V5KSA9PSB2YWx1ZToKICAgICAgICAgICAgICAgICAgICAgeWllbGQgZWxlbQogICAgICAgICByZXR1cm4gc2VsZWN0Ci0gICAgaWYgc2lnbmF0dXJlID09ICItIiBhbmQgbm90IHJlLm1hdGNoKCJcZCskIiwgcHJlZGljYXRlWzBdKToKKyAgICBpZiBzaWduYXR1cmUgPT0gIi0iIGFuZCBub3QgcmUubWF0Y2goIlwtP1xkKyQiLCBwcmVkaWNhdGVbMF0pOgogICAgICAgICAjIFt0YWddCiAgICAgICAgIHRhZyA9IHByZWRpY2F0ZVswXQogICAgICAgICBkZWYgc2VsZWN0KGNvbnRleHQsIHJlc3VsdCk6CkBAIC0xODQsNyArMTgyLDcgQEAKICAgICAgICAgICAgICAgICBpZiBlbGVtLmZpbmQodGFnKSBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICAgICAgeWllbGQgZWxlbQogICAgICAgICByZXR1cm4gc2VsZWN0Ci0gICAgaWYgc2lnbmF0dXJlID09ICItPSciIGFuZCBub3QgcmUubWF0Y2goIlxkKyQiLCBwcmVkaWNhdGVbMF0pOgorICAgIGlmIHNpZ25hdHVyZSA9PSAiLT0nIiBhbmQgbm90IHJlLm1hdGNoKCJcLT9cZCskIiwgcHJlZGljYXRlWzBdKToKICAgICAgICAgIyBbdGFnPSd2YWx1ZSddCiAgICAgICAgIHRhZyA9IHByZWRpY2F0ZVswXQogICAgICAgICB2YWx1ZSA9IHByZWRpY2F0ZVstMV0KQEAgLTE5OCw3ICsxOTYsMTAgQEAKICAgICBpZiBzaWduYXR1cmUgPT0gIi0iIG9yIHNpZ25hdHVyZSA9PSAiLSgpIiBvciBzaWduYXR1cmUgPT0gIi0oKS0iOgogICAgICAgICAjIFtpbmRleF0gb3IgW2xhc3QoKV0gb3IgW2xhc3QoKS1pbmRleF0KICAgICAgICAgaWYgc2lnbmF0dXJlID09ICItIjoKKyAgICAgICAgICAgICMgW2luZGV4XQogICAgICAgICAgICAgaW5kZXggPSBpbnQocHJlZGljYXRlWzBdKSAtIDEKKyAgICAgICAgICAgIGlmIGluZGV4IDwgMDoKKyAgICAgICAgICAgICAgICByYWlzZSBTeW50YXhFcnJvcigiWFBhdGggcG9zaXRpb24gPj0gMSBleHBlY3RlZCIpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBpZiBwcmVkaWNhdGVbMF0gIT0gImxhc3QiOgogICAgICAgICAgICAgICAgIHJhaXNlIFN5bnRheEVycm9yKCJ1bnN1cHBvcnRlZCBmdW5jdGlvbiIpCkBAIC0yMDcsNiArMjA4LDggQEAKICAgICAgICAgICAgICAgICAgICAgaW5kZXggPSBpbnQocHJlZGljYXRlWzJdKSAtIDEKICAgICAgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgcmFpc2UgU3ludGF4RXJyb3IoInVuc3VwcG9ydGVkIGV4cHJlc3Npb24iKQorICAgICAgICAgICAgICAgIGlmIGluZGV4ID4gLTI6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFN5bnRheEVycm9yKCJYUGF0aCBvZmZzZXQgZnJvbSBsYXN0KCkgbXVzdCBiZSBuZWdhdGl2ZSIpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIGluZGV4ID0gLTEKICAgICAgICAgZGVmIHNlbGVjdChjb250ZXh0LCByZXN1bHQpOgpkaWZmIC0tZ2l0IGEvTGliL3htbC9ldHJlZS9FbGVtZW50VHJlZS5weSBiL0xpYi94bWwvZXRyZWUvRWxlbWVudFRyZWUucHkKaW5kZXggYThlNTcyOS4uNWEwOWIzNSAxMDA2NDQKLS0tIGEvTGliL3htbC9ldHJlZS9FbGVtZW50VHJlZS5weQorKysgYi9MaWIveG1sL2V0cmVlL0VsZW1lbnRUcmVlLnB5CkBAIC0xLDI4ICsxLDQ3IEBACisiIiJMaWdodHdlaWdodCBYTUwgc3VwcG9ydCBmb3IgUHl0aG9uLgorCisgWE1MIGlzIGFuIGluaGVyZW50bHkgaGllcmFyY2hpY2FsIGRhdGEgZm9ybWF0LCBhbmQgdGhlIG1vc3QgbmF0dXJhbCB3YXkgdG8KKyByZXByZXNlbnQgaXQgaXMgd2l0aCBhIHRyZWUuICBUaGlzIG1vZHVsZSBoYXMgdHdvIGNsYXNzZXMgZm9yIHRoaXMgcHVycG9zZToKKworICAgIDEuIEVsZW1lbnRUcmVlIHJlcHJlc2VudHMgdGhlIHdob2xlIFhNTCBkb2N1bWVudCBhcyBhIHRyZWUgYW5kCisKKyAgICAyLiBFbGVtZW50IHJlcHJlc2VudHMgYSBzaW5nbGUgbm9kZSBpbiB0aGlzIHRyZWUuCisKKyBJbnRlcmFjdGlvbnMgd2l0aCB0aGUgd2hvbGUgZG9jdW1lbnQgKHJlYWRpbmcgYW5kIHdyaXRpbmcgdG8vZnJvbSBmaWxlcykgYXJlCisgdXN1YWxseSBkb25lIG9uIHRoZSBFbGVtZW50VHJlZSBsZXZlbC4gIEludGVyYWN0aW9ucyB3aXRoIGEgc2luZ2xlIFhNTCBlbGVtZW50CisgYW5kIGl0cyBzdWItZWxlbWVudHMgYXJlIGRvbmUgb24gdGhlIEVsZW1lbnQgbGV2ZWwuCisKKyBFbGVtZW50IGlzIGEgZmxleGlibGUgY29udGFpbmVyIG9iamVjdCBkZXNpZ25lZCB0byBzdG9yZSBoaWVyYXJjaGljYWwgZGF0YQorIHN0cnVjdHVyZXMgaW4gbWVtb3J5LiBJdCBjYW4gYmUgZGVzY3JpYmVkIGFzIGEgY3Jvc3MgYmV0d2VlbiBhIGxpc3QgYW5kIGEKKyBkaWN0aW9uYXJ5LiAgRWFjaCBFbGVtZW50IGhhcyBhIG51bWJlciBvZiBwcm9wZXJ0aWVzIGFzc29jaWF0ZWQgd2l0aCBpdDoKKworICAgICd0YWcnIC0gYSBzdHJpbmcgY29udGFpbmluZyB0aGUgZWxlbWVudCdzIG5hbWUuCisKKyAgICAnYXR0cmlidXRlcycgLSBhIFB5dGhvbiBkaWN0aW9uYXJ5IHN0b3JpbmcgdGhlIGVsZW1lbnQncyBhdHRyaWJ1dGVzLgorCisgICAgJ3RleHQnIC0gYSBzdHJpbmcgY29udGFpbmluZyB0aGUgZWxlbWVudCdzIHRleHQgY29udGVudC4KKworICAgICd0YWlsJyAtIGFuIG9wdGlvbmFsIHN0cmluZyBjb250YWluaW5nIHRleHQgYWZ0ZXIgdGhlIGVsZW1lbnQncyBlbmQgdGFnLgorCisgICAgQW5kIGEgbnVtYmVyIG9mIGNoaWxkIGVsZW1lbnRzIHN0b3JlZCBpbiBhIFB5dGhvbiBzZXF1ZW5jZS4KKworIFRvIGNyZWF0ZSBhbiBlbGVtZW50IGluc3RhbmNlLCB1c2UgdGhlIEVsZW1lbnQgY29uc3RydWN0b3IsCisgb3IgdGhlIFN1YkVsZW1lbnQgZmFjdG9yeSBmdW5jdGlvbi4KKworIFlvdSBjYW4gYWxzbyB1c2UgdGhlIEVsZW1lbnRUcmVlIGNsYXNzIHRvIHdyYXAgYW4gZWxlbWVudCBzdHJ1Y3R1cmUKKyBhbmQgY29udmVydCBpdCB0byBhbmQgZnJvbSBYTUwuCisKKyIiIgorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIExpY2Vuc2VkIHRvIFBTRiB1bmRlciBhIENvbnRyaWJ1dG9yIEFncmVlbWVudC4KKyMgU2VlIGh0dHA6Ly93d3cucHl0aG9uLm9yZy9wc2YvbGljZW5zZSBmb3IgbGljZW5zaW5nIGRldGFpbHMuCiAjCiAjIEVsZW1lbnRUcmVlCi0jICRJZDogRWxlbWVudFRyZWUucHkgMzQ0MCAyMDA4LTA3LTE4IDE0OjQ1OjAxWiBmcmVkcmlrICQKLSMKLSMgbGlnaHQtd2VpZ2h0IFhNTCBzdXBwb3J0IGZvciBQeXRob24gMi4zIGFuZCBsYXRlci4KLSMKLSMgaGlzdG9yeSAoc2luY2UgMS4yLjYpOgotIyAyMDA1LTExLTEyIGZsICAgYWRkZWQgdG9zdHJpbmdsaXN0L2Zyb21zdHJpbmdsaXN0IGhlbHBlcnMKLSMgMjAwNi0wNy0wNSBmbCAgIG1lcmdlZCBpbiBzZWxlY3RlZCBjaGFuZ2VzIGZyb20gdGhlIDEuMyBzYW5kYm94Ci0jIDIwMDYtMDctMDUgZmwgICByZW1vdmVkIHN1cHBvcnQgZm9yIDIuMSBhbmQgZWFybGllcgotIyAyMDA3LTA2LTIxIGZsICAgYWRkZWQgZGVwcmVjYXRpb24vZnV0dXJlIHdhcm5pbmdzCi0jIDIwMDctMDgtMjUgZmwgICBhZGRlZCBkb2N0eXBlIGhvb2ssIGFkZGVkIHBhcnNlciB2ZXJzaW9uIGF0dHJpYnV0ZSBldGMKLSMgMjAwNy0wOC0yNiBmbCAgIGFkZGVkIG5ldyBzZXJpYWxpemVyIGNvZGUgKGJldHRlciBuYW1lc3BhY2UgaGFuZGxpbmcsIGV0YykKLSMgMjAwNy0wOC0yNyBmbCAgIHdhcm4gZm9yIGJyb2tlbiAvdGFnIHNlYXJjaGVzIG9uIHRyZWUgbGV2ZWwKLSMgMjAwNy0wOS0wMiBmbCAgIGFkZGVkIGh0bWwvdGV4dCBtZXRob2RzIHRvIHNlcmlhbGl6ZXIgKGV4cGVyaW1lbnRhbCkKLSMgMjAwNy0wOS0wNSBmbCAgIGFkZGVkIG1ldGhvZCBhcmd1bWVudCB0byB0b3N0cmluZy90b3N0cmluZ2xpc3QKLSMgMjAwNy0wOS0wNiBmbCAgIGltcHJvdmVkIGVycm9yIGhhbmRsaW5nCi0jIDIwMDctMDktMTMgZmwgICBhZGRlZCBpdGVydGV4dCwgaXRlcmZpbmQ7IGFzc29ydGVkIGNsZWFudXBzCi0jIDIwMDctMTItMTUgZmwgICBhZGRlZCBDMTROIGhvb2tzLCBjb3B5IG1ldGhvZCAoZXhwZXJpbWVudGFsKQotIwogIyBDb3B5cmlnaHQgKGMpIDE5OTktMjAwOCBieSBGcmVkcmlrIEx1bmRoLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMKICMgZnJlZHJpa0BweXRob253YXJlLmNvbQogIyBodHRwOi8vd3d3LnB5dGhvbndhcmUuY29tCi0jCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIFRoZSBFbGVtZW50VHJlZSB0b29sa2l0IGlzCiAjCkBAIC01MSw5ICs3MCw2IEBACiAjIE9GIFRISVMgU09GVFdBUkUuCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSMgTGljZW5zZWQgdG8gUFNGIHVuZGVyIGEgQ29udHJpYnV0b3IgQWdyZWVtZW50LgotIyBTZWUgaHR0cDovL3d3dy5weXRob24ub3JnL3BzZi9saWNlbnNlIGZvciBsaWNlbnNpbmcgZGV0YWlscy4KLQogX19hbGxfXyA9IFsKICAgICAjIHB1YmxpYyBzeW1ib2xzCiAgICAgIkNvbW1lbnQiLApAQCAtNjksMzQgKzg1LDEyIEBACiAgICAgIlRyZWVCdWlsZGVyIiwKICAgICAiVkVSU0lPTiIsCiAgICAgIlhNTCIsICJYTUxJRCIsCi0gICAgIlhNTFBhcnNlciIsICJYTUxUcmVlQnVpbGRlciIsCisgICAgIlhNTFBhcnNlciIsCiAgICAgInJlZ2lzdGVyX25hbWVzcGFjZSIsCiAgICAgXQogCiBWRVJTSU9OID0gIjEuMy4wIgogCi0jIwotIyBUaGUgPGI+RWxlbWVudDwvYj4gdHlwZSBpcyBhIGZsZXhpYmxlIGNvbnRhaW5lciBvYmplY3QsIGRlc2lnbmVkIHRvCi0jIHN0b3JlIGhpZXJhcmNoaWNhbCBkYXRhIHN0cnVjdHVyZXMgaW4gbWVtb3J5LiBUaGUgdHlwZSBjYW4gYmUKLSMgZGVzY3JpYmVkIGFzIGEgY3Jvc3MgYmV0d2VlbiBhIGxpc3QgYW5kIGEgZGljdGlvbmFyeS4KLSMgPHA+Ci0jIEVhY2ggZWxlbWVudCBoYXMgYSBudW1iZXIgb2YgcHJvcGVydGllcyBhc3NvY2lhdGVkIHdpdGggaXQ6Ci0jIDx1bD4KLSMgPGxpPmEgPGk+dGFnPC9pPi4gVGhpcyBpcyBhIHN0cmluZyBpZGVudGlmeWluZyB3aGF0IGtpbmQgb2YgZGF0YQotIyB0aGlzIGVsZW1lbnQgcmVwcmVzZW50cyAodGhlIGVsZW1lbnQgdHlwZSwgaW4gb3RoZXIgd29yZHMpLjwvbGk+Ci0jIDxsaT5hIG51bWJlciBvZiA8aT5hdHRyaWJ1dGVzPC9pPiwgc3RvcmVkIGluIGEgUHl0aG9uIGRpY3Rpb25hcnkuPC9saT4KLSMgPGxpPmEgPGk+dGV4dDwvaT4gc3RyaW5nLjwvbGk+Ci0jIDxsaT5hbiBvcHRpb25hbCA8aT50YWlsPC9pPiBzdHJpbmcuPC9saT4KLSMgPGxpPmEgbnVtYmVyIG9mIDxpPmNoaWxkIGVsZW1lbnRzPC9pPiwgc3RvcmVkIGluIGEgUHl0aG9uIHNlcXVlbmNlPC9saT4KLSMgPC91bD4KLSMKLSMgVG8gY3JlYXRlIGFuIGVsZW1lbnQgaW5zdGFuY2UsIHVzZSB0aGUge0BsaW5rICNFbGVtZW50fSBjb25zdHJ1Y3RvcgotIyBvciB0aGUge0BsaW5rICNTdWJFbGVtZW50fSBmYWN0b3J5IGZ1bmN0aW9uLgotIyA8cD4KLSMgVGhlIHtAbGluayAjRWxlbWVudFRyZWV9IGNsYXNzIGNhbiBiZSB1c2VkIHRvIHdyYXAgYW4gZWxlbWVudAotIyBzdHJ1Y3R1cmUsIGFuZCBjb252ZXJ0IGl0IGZyb20gYW5kIHRvIFhNTC4KLSMjCi0KIGltcG9ydCBzeXMKIGltcG9ydCByZQogaW1wb3J0IHdhcm5pbmdzCkBAIC0xMDYsODEgKzEwMCw2OCBAQAogZnJvbSAuIGltcG9ydCBFbGVtZW50UGF0aAogCiAKLSMjCi0jIFBhcnNlciBlcnJvci4gIFRoaXMgaXMgYSBzdWJjbGFzcyBvZiA8Yj5TeW50YXhFcnJvcjwvYj4uCi0jIDxwPgotIyBJbiBhZGRpdGlvbiB0byB0aGUgZXhjZXB0aW9uIHZhbHVlLCBhbiBleGNlcHRpb24gaW5zdGFuY2UgY29udGFpbnMgYQotIyBzcGVjaWZpYyBleGNlcHRpb24gY29kZSBpbiB0aGUgPGI+Y29kZTwvYj4gYXR0cmlidXRlLCBhbmQgdGhlIGxpbmUgYW5kCi0jIGNvbHVtbiBvZiB0aGUgZXJyb3IgaW4gdGhlIDxiPnBvc2l0aW9uPC9iPiBhdHRyaWJ1dGUuCi0KIGNsYXNzIFBhcnNlRXJyb3IoU3ludGF4RXJyb3IpOgorICAgICIiIkFuIGVycm9yIHdoZW4gcGFyc2luZyBhbiBYTUwgZG9jdW1lbnQuCisKKyAgICBJbiBhZGRpdGlvbiB0byBpdHMgZXhjZXB0aW9uIHZhbHVlLCBhIFBhcnNlRXJyb3IgY29udGFpbnMKKyAgICB0d28gZXh0cmEgYXR0cmlidXRlczoKKyAgICAgICAgJ2NvZGUnICAgICAtIHRoZSBzcGVjaWZpYyBleGNlcHRpb24gY29kZQorICAgICAgICAncG9zaXRpb24nIC0gdGhlIGxpbmUgYW5kIGNvbHVtbiBvZiB0aGUgZXJyb3IKKworICAgICIiIgogICAgIHBhc3MKIAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0jIwotIyBDaGVja3MgaWYgYW4gb2JqZWN0IGFwcGVhcnMgdG8gYmUgYSB2YWxpZCBlbGVtZW50IG9iamVjdC4KLSMKLSMgQHBhcmFtIEFuIGVsZW1lbnQgaW5zdGFuY2UuCi0jIEByZXR1cm4gQSB0cnVlIHZhbHVlIGlmIHRoaXMgaXMgYW4gZWxlbWVudCBvYmplY3QuCi0jIEBkZWZyZXR1cm4gZmxhZwogCiBkZWYgaXNlbGVtZW50KGVsZW1lbnQpOgotICAgICMgRklYTUU6IG5vdCBzdXJlIGFib3V0IHRoaXM7Ci0gICAgIyBpc2luc3RhbmNlKGVsZW1lbnQsIEVsZW1lbnQpIG9yIGxvb2sgZm9yIHRhZy9hdHRyaWIvdGV4dCBhdHRyaWJ1dGVzCisgICAgIiIiUmV0dXJuIFRydWUgaWYgKmVsZW1lbnQqIGFwcGVhcnMgdG8gYmUgYW4gRWxlbWVudC4iIiIKICAgICByZXR1cm4gaGFzYXR0cihlbGVtZW50LCAndGFnJykKIAotIyMKLSMgRWxlbWVudCBjbGFzcy4gIFRoaXMgY2xhc3MgZGVmaW5lcyB0aGUgRWxlbWVudCBpbnRlcmZhY2UsIGFuZAotIyBwcm92aWRlcyBhIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGludGVyZmFjZS4KLSMgPHA+Ci0jIFRoZSBlbGVtZW50IG5hbWUsIGF0dHJpYnV0ZSBuYW1lcywgYW5kIGF0dHJpYnV0ZSB2YWx1ZXMgY2FuIGJlCi0jIGVpdGhlciBBU0NJSSBzdHJpbmdzIChvcmRpbmFyeSBQeXRob24gc3RyaW5ncyBjb250YWluaW5nIG9ubHkgNy1iaXQKLSMgQVNDSUkgY2hhcmFjdGVycykgb3IgVW5pY29kZSBzdHJpbmdzLgotIwotIyBAcGFyYW0gdGFnIFRoZSBlbGVtZW50IG5hbWUuCi0jIEBwYXJhbSBhdHRyaWIgQW4gb3B0aW9uYWwgZGljdGlvbmFyeSwgY29udGFpbmluZyBlbGVtZW50IGF0dHJpYnV0ZXMuCi0jIEBwYXJhbSAqKmV4dHJhIEFkZGl0aW9uYWwgYXR0cmlidXRlcywgZ2l2ZW4gYXMga2V5d29yZCBhcmd1bWVudHMuCi0jIEBzZWUgRWxlbWVudAotIyBAc2VlIFN1YkVsZW1lbnQKLSMgQHNlZSBDb21tZW50Ci0jIEBzZWUgUHJvY2Vzc2luZ0luc3RydWN0aW9uCiAKIGNsYXNzIEVsZW1lbnQ6Ci0gICAgIyA8dGFnIGF0dHJpYj50ZXh0PGNoaWxkLz4uLi48L3RhZz50YWlsCisgICAgIiIiQW4gWE1MIGVsZW1lbnQuCiAKLSAgICAjIwotICAgICMgKEF0dHJpYnV0ZSkgRWxlbWVudCB0YWcuCisgICAgVGhpcyBjbGFzcyBpcyB0aGUgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBFbGVtZW50IGludGVyZmFjZS4KKworICAgIEFuIGVsZW1lbnQncyBsZW5ndGggaXMgaXRzIG51bWJlciBvZiBzdWJlbGVtZW50cy4gIFRoYXQgbWVhbnMgaWYgeW91CisgICAgd2FudCB0byBjaGVjayBpZiBhbiBlbGVtZW50IGlzIHRydWx5IGVtcHR5LCB5b3Ugc2hvdWxkIGNoZWNrIEJPVEgKKyAgICBpdHMgbGVuZ3RoIEFORCBpdHMgdGV4dCBhdHRyaWJ1dGUuCisKKyAgICBUaGUgZWxlbWVudCB0YWcsIGF0dHJpYnV0ZSBuYW1lcywgYW5kIGF0dHJpYnV0ZSB2YWx1ZXMgY2FuIGJlIGVpdGhlcgorICAgIGJ5dGVzIG9yIHN0cmluZ3MuCisKKyAgICAqdGFnKiBpcyB0aGUgZWxlbWVudCBuYW1lLiAgKmF0dHJpYiogaXMgYW4gb3B0aW9uYWwgZGljdGlvbmFyeSBjb250YWluaW5nCisgICAgZWxlbWVudCBhdHRyaWJ1dGVzLiAqZXh0cmEqIGFyZSBhZGRpdGlvbmFsIGVsZW1lbnQgYXR0cmlidXRlcyBnaXZlbiBhcworICAgIGtleXdvcmQgYXJndW1lbnRzLgorCisgICAgRXhhbXBsZSBmb3JtOgorICAgICAgICA8dGFnIGF0dHJpYj50ZXh0PGNoaWxkLz4uLi48L3RhZz50YWlsCisKKyAgICAiIiIKIAogICAgIHRhZyA9IE5vbmUKLQotICAgICMjCi0gICAgIyAoQXR0cmlidXRlKSBFbGVtZW50IGF0dHJpYnV0ZSBkaWN0aW9uYXJ5LiAgV2hlcmUgcG9zc2libGUsIHVzZQotICAgICMge0BsaW5rICNFbGVtZW50LmdldH0sCi0gICAgIyB7QGxpbmsgI0VsZW1lbnQuc2V0fSwKLSAgICAjIHtAbGluayAjRWxlbWVudC5rZXlzfSwgYW5kCi0gICAgIyB7QGxpbmsgI0VsZW1lbnQuaXRlbXN9IHRvIGFjY2VzcwotICAgICMgZWxlbWVudCBhdHRyaWJ1dGVzLgorICAgICIiIlRoZSBlbGVtZW50J3MgbmFtZS4iIiIKIAogICAgIGF0dHJpYiA9IE5vbmUKLQotICAgICMjCi0gICAgIyAoQXR0cmlidXRlKSBUZXh0IGJlZm9yZSBmaXJzdCBzdWJlbGVtZW50LiAgVGhpcyBpcyBlaXRoZXIgYQotICAgICMgc3RyaW5nIG9yIHRoZSB2YWx1ZSBOb25lLiAgTm90ZSB0aGF0IGlmIHRoZXJlIHdhcyBubyB0ZXh0LCB0aGlzCi0gICAgIyBhdHRyaWJ1dGUgbWF5IGJlIGVpdGhlciBOb25lIG9yIGFuIGVtcHR5IHN0cmluZywgZGVwZW5kaW5nIG9uCi0gICAgIyB0aGUgcGFyc2VyLgorICAgICIiIkRpY3Rpb25hcnkgb2YgdGhlIGVsZW1lbnQncyBhdHRyaWJ1dGVzLiIiIgogCiAgICAgdGV4dCA9IE5vbmUKKyAgICAiIiIKKyAgICBUZXh0IGJlZm9yZSBmaXJzdCBzdWJlbGVtZW50LiBUaGlzIGlzIGVpdGhlciBhIHN0cmluZyBvciB0aGUgdmFsdWUgTm9uZS4KKyAgICBOb3RlIHRoYXQgaWYgdGhlcmUgaXMgbm8gdGV4dCwgdGhpcyBhdHRyaWJ1dGUgbWF5IGJlIGVpdGhlcgorICAgIE5vbmUgb3IgdGhlIGVtcHR5IHN0cmluZywgZGVwZW5kaW5nIG9uIHRoZSBwYXJzZXIuCiAKLSAgICAjIwotICAgICMgKEF0dHJpYnV0ZSkgVGV4dCBhZnRlciB0aGlzIGVsZW1lbnQncyBlbmQgdGFnLCBidXQgYmVmb3JlIHRoZQotICAgICMgbmV4dCBzaWJsaW5nIGVsZW1lbnQncyBzdGFydCB0YWcuICBUaGlzIGlzIGVpdGhlciBhIHN0cmluZyBvcgotICAgICMgdGhlIHZhbHVlIE5vbmUuICBOb3RlIHRoYXQgaWYgdGhlcmUgd2FzIG5vIHRleHQsIHRoaXMgYXR0cmlidXRlCi0gICAgIyBtYXkgYmUgZWl0aGVyIE5vbmUgb3IgYW4gZW1wdHkgc3RyaW5nLCBkZXBlbmRpbmcgb24gdGhlIHBhcnNlci4KKyAgICAiIiIKIAotICAgIHRhaWwgPSBOb25lICMgdGV4dCBhZnRlciBlbmQgdGFnLCBpZiBhbnkKKyAgICB0YWlsID0gTm9uZQorICAgICIiIgorICAgIFRleHQgYWZ0ZXIgdGhpcyBlbGVtZW50J3MgZW5kIHRhZywgYnV0IGJlZm9yZSB0aGUgbmV4dCBzaWJsaW5nIGVsZW1lbnQncworICAgIHN0YXJ0IHRhZy4gIFRoaXMgaXMgZWl0aGVyIGEgc3RyaW5nIG9yIHRoZSB2YWx1ZSBOb25lLiAgTm90ZSB0aGF0IGlmIHRoZXJlCisgICAgd2FzIG5vIHRleHQsIHRoaXMgYXR0cmlidXRlIG1heSBiZSBlaXRoZXIgTm9uZSBvciBhbiBlbXB0eSBzdHJpbmcsCisgICAgZGVwZW5kaW5nIG9uIHRoZSBwYXJzZXIuCiAKLSAgICAjIGNvbnN0cnVjdG9yCisgICAgIiIiCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgdGFnLCBhdHRyaWI9e30sICoqZXh0cmEpOgogICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShhdHRyaWIsIGRpY3QpOgpAQCAtMTk1LDM2ICsxNzYsMzAgQEAKICAgICBkZWYgX19yZXByX18oc2VsZik6CiAgICAgICAgIHJldHVybiAiPEVsZW1lbnQgJXMgYXQgMHgleD4iICUgKHJlcHIoc2VsZi50YWcpLCBpZChzZWxmKSkKIAotICAgICMjCi0gICAgIyBDcmVhdGVzIGEgbmV3IGVsZW1lbnQgb2JqZWN0IG9mIHRoZSBzYW1lIHR5cGUgYXMgdGhpcyBlbGVtZW50LgotICAgICMKLSAgICAjIEBwYXJhbSB0YWcgRWxlbWVudCB0YWcuCi0gICAgIyBAcGFyYW0gYXR0cmliIEVsZW1lbnQgYXR0cmlidXRlcywgZ2l2ZW4gYXMgYSBkaWN0aW9uYXJ5LgotICAgICMgQHJldHVybiBBIG5ldyBlbGVtZW50IGluc3RhbmNlLgotCiAgICAgZGVmIG1ha2VlbGVtZW50KHNlbGYsIHRhZywgYXR0cmliKToKKyAgICAgICAgIiIiQ3JlYXRlIGEgbmV3IGVsZW1lbnQgd2l0aCB0aGUgc2FtZSB0eXBlLgorCisgICAgICAgICp0YWcqIGlzIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGVsZW1lbnQgbmFtZS4KKyAgICAgICAgKmF0dHJpYiogaXMgYSBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcgdGhlIGVsZW1lbnQgYXR0cmlidXRlcy4KKworICAgICAgICBEbyBub3QgY2FsbCB0aGlzIG1ldGhvZCwgdXNlIHRoZSBTdWJFbGVtZW50IGZhY3RvcnkgZnVuY3Rpb24gaW5zdGVhZC4KKworICAgICAgICAiIiIKICAgICAgICAgcmV0dXJuIHNlbGYuX19jbGFzc19fKHRhZywgYXR0cmliKQogCi0gICAgIyMKLSAgICAjIChFeHBlcmltZW50YWwpIENvcGllcyB0aGUgY3VycmVudCBlbGVtZW50LiAgVGhpcyBjcmVhdGVzIGEKLSAgICAjIHNoYWxsb3cgY29weTsgc3ViZWxlbWVudHMgd2lsbCBiZSBzaGFyZWQgd2l0aCB0aGUgb3JpZ2luYWwgdHJlZS4KLSAgICAjCi0gICAgIyBAcmV0dXJuIEEgbmV3IGVsZW1lbnQgaW5zdGFuY2UuCi0KICAgICBkZWYgY29weShzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIGNvcHkgb2YgY3VycmVudCBlbGVtZW50LgorCisgICAgICAgIFRoaXMgY3JlYXRlcyBhIHNoYWxsb3cgY29weS4gU3ViZWxlbWVudHMgd2lsbCBiZSBzaGFyZWQgd2l0aCB0aGUKKyAgICAgICAgb3JpZ2luYWwgdHJlZS4KKworICAgICAgICAiIiIKICAgICAgICAgZWxlbSA9IHNlbGYubWFrZWVsZW1lbnQoc2VsZi50YWcsIHNlbGYuYXR0cmliKQogICAgICAgICBlbGVtLnRleHQgPSBzZWxmLnRleHQKICAgICAgICAgZWxlbS50YWlsID0gc2VsZi50YWlsCiAgICAgICAgIGVsZW1bOl0gPSBzZWxmCiAgICAgICAgIHJldHVybiBlbGVtCiAKLSAgICAjIwotICAgICMgUmV0dXJucyB0aGUgbnVtYmVyIG9mIHN1YmVsZW1lbnRzLiAgTm90ZSB0aGF0IHRoaXMgb25seSBjb3VudHMKLSAgICAjIGZ1bGwgZWxlbWVudHM7IHRvIGNoZWNrIGlmIHRoZXJlJ3MgYW55IGNvbnRlbnQgaW4gYW4gZWxlbWVudCwgeW91Ci0gICAgIyBoYXZlIHRvIGNoZWNrIGJvdGggdGhlIGxlbmd0aCBhbmQgdGhlIDxiPnRleHQ8L2I+IGF0dHJpYnV0ZS4KLSAgICAjCi0gICAgIyBAcmV0dXJuIFRoZSBudW1iZXIgb2Ygc3ViZWxlbWVudHMuCi0KICAgICBkZWYgX19sZW5fXyhzZWxmKToKICAgICAgICAgcmV0dXJuIGxlbihzZWxmLl9jaGlsZHJlbikKIApAQCAtMjM2LDIzICsyMTEsOSBAQAogICAgICAgICAgICAgKQogICAgICAgICByZXR1cm4gbGVuKHNlbGYuX2NoaWxkcmVuKSAhPSAwICMgZW11bGF0ZSBvbGQgYmVoYXZpb3VyLCBmb3Igbm93CiAKLSAgICAjIwotICAgICMgUmV0dXJucyB0aGUgZ2l2ZW4gc3ViZWxlbWVudCwgYnkgaW5kZXguCi0gICAgIwotICAgICMgQHBhcmFtIGluZGV4IFdoYXQgc3ViZWxlbWVudCB0byByZXR1cm4uCi0gICAgIyBAcmV0dXJuIFRoZSBnaXZlbiBzdWJlbGVtZW50LgotICAgICMgQGV4Y2VwdGlvbiBJbmRleEVycm9yIElmIHRoZSBnaXZlbiBlbGVtZW50IGRvZXMgbm90IGV4aXN0LgotCiAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGluZGV4KToKICAgICAgICAgcmV0dXJuIHNlbGYuX2NoaWxkcmVuW2luZGV4XQogCi0gICAgIyMKLSAgICAjIFJlcGxhY2VzIHRoZSBnaXZlbiBzdWJlbGVtZW50LCBieSBpbmRleC4KLSAgICAjCi0gICAgIyBAcGFyYW0gaW5kZXggV2hhdCBzdWJlbGVtZW50IHRvIHJlcGxhY2UuCi0gICAgIyBAcGFyYW0gZWxlbWVudCBUaGUgbmV3IGVsZW1lbnQgdmFsdWUuCi0gICAgIyBAZXhjZXB0aW9uIEluZGV4RXJyb3IgSWYgdGhlIGdpdmVuIGVsZW1lbnQgZG9lcyBub3QgZXhpc3QuCi0KICAgICBkZWYgX19zZXRpdGVtX18oc2VsZiwgaW5kZXgsIGVsZW1lbnQpOgogICAgICAgICAjIGlmIGlzaW5zdGFuY2UoaW5kZXgsIHNsaWNlKToKICAgICAgICAgIyAgICAgZm9yIGVsdCBpbiBlbGVtZW50OgpAQCAtMjYxLDc2ICsyMjIsNjIgQEAKICAgICAgICAgIyAgICAgYXNzZXJ0IGlzZWxlbWVudChlbGVtZW50KQogICAgICAgICBzZWxmLl9jaGlsZHJlbltpbmRleF0gPSBlbGVtZW50CiAKLSAgICAjIwotICAgICMgRGVsZXRlcyB0aGUgZ2l2ZW4gc3ViZWxlbWVudCwgYnkgaW5kZXguCi0gICAgIwotICAgICMgQHBhcmFtIGluZGV4IFdoYXQgc3ViZWxlbWVudCB0byBkZWxldGUuCi0gICAgIyBAZXhjZXB0aW9uIEluZGV4RXJyb3IgSWYgdGhlIGdpdmVuIGVsZW1lbnQgZG9lcyBub3QgZXhpc3QuCi0KICAgICBkZWYgX19kZWxpdGVtX18oc2VsZiwgaW5kZXgpOgogICAgICAgICBkZWwgc2VsZi5fY2hpbGRyZW5baW5kZXhdCiAKLSAgICAjIwotICAgICMgQWRkcyBhIHN1YmVsZW1lbnQgdG8gdGhlIGVuZCBvZiB0aGlzIGVsZW1lbnQuICBJbiBkb2N1bWVudCBvcmRlciwKLSAgICAjIHRoZSBuZXcgZWxlbWVudCB3aWxsIGFwcGVhciBhZnRlciB0aGUgbGFzdCBleGlzdGluZyBzdWJlbGVtZW50IChvcgotICAgICMgZGlyZWN0bHkgYWZ0ZXIgdGhlIHRleHQsIGlmIGl0J3MgdGhlIGZpcnN0IHN1YmVsZW1lbnQpLCBidXQgYmVmb3JlCi0gICAgIyB0aGUgZW5kIHRhZyBmb3IgdGhpcyBlbGVtZW50LgotICAgICMKLSAgICAjIEBwYXJhbSBlbGVtZW50IFRoZSBlbGVtZW50IHRvIGFkZC4KKyAgICBkZWYgYXBwZW5kKHNlbGYsIHN1YmVsZW1lbnQpOgorICAgICAgICAiIiJBZGQgKnN1YmVsZW1lbnQqIHRvIHRoZSBlbmQgb2YgdGhpcyBlbGVtZW50LgogCi0gICAgZGVmIGFwcGVuZChzZWxmLCBlbGVtZW50KToKLSAgICAgICAgc2VsZi5fYXNzZXJ0X2lzX2VsZW1lbnQoZWxlbWVudCkKLSAgICAgICAgc2VsZi5fY2hpbGRyZW4uYXBwZW5kKGVsZW1lbnQpCisgICAgICAgIFRoZSBuZXcgZWxlbWVudCB3aWxsIGFwcGVhciBpbiBkb2N1bWVudCBvcmRlciBhZnRlciB0aGUgbGFzdCBleGlzdGluZworICAgICAgICBzdWJlbGVtZW50IChvciBkaXJlY3RseSBhZnRlciB0aGUgdGV4dCwgaWYgaXQncyB0aGUgZmlyc3Qgc3ViZWxlbWVudCksCisgICAgICAgIGJ1dCBiZWZvcmUgdGhlIGVuZCB0YWcgZm9yIHRoaXMgZWxlbWVudC4KIAotICAgICMjCi0gICAgIyBBcHBlbmRzIHN1YmVsZW1lbnRzIGZyb20gYSBzZXF1ZW5jZS4KLSAgICAjCi0gICAgIyBAcGFyYW0gZWxlbWVudHMgQSBzZXF1ZW5jZSBvYmplY3Qgd2l0aCB6ZXJvIG9yIG1vcmUgZWxlbWVudHMuCi0gICAgIyBAc2luY2UgMS4zCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9hc3NlcnRfaXNfZWxlbWVudChzdWJlbGVtZW50KQorICAgICAgICBzZWxmLl9jaGlsZHJlbi5hcHBlbmQoc3ViZWxlbWVudCkKIAogICAgIGRlZiBleHRlbmQoc2VsZiwgZWxlbWVudHMpOgorICAgICAgICAiIiJBcHBlbmQgc3ViZWxlbWVudHMgZnJvbSBhIHNlcXVlbmNlLgorCisgICAgICAgICplbGVtZW50cyogaXMgYSBzZXF1ZW5jZSB3aXRoIHplcm8gb3IgbW9yZSBlbGVtZW50cy4KKworICAgICAgICAiIiIKICAgICAgICAgZm9yIGVsZW1lbnQgaW4gZWxlbWVudHM6CiAgICAgICAgICAgICBzZWxmLl9hc3NlcnRfaXNfZWxlbWVudChlbGVtZW50KQogICAgICAgICBzZWxmLl9jaGlsZHJlbi5leHRlbmQoZWxlbWVudHMpCiAKLSAgICAjIwotICAgICMgSW5zZXJ0cyBhIHN1YmVsZW1lbnQgYXQgdGhlIGdpdmVuIHBvc2l0aW9uIGluIHRoaXMgZWxlbWVudC4KLSAgICAjCi0gICAgIyBAcGFyYW0gaW5kZXggV2hlcmUgdG8gaW5zZXJ0IHRoZSBuZXcgc3ViZWxlbWVudC4KLQotICAgIGRlZiBpbnNlcnQoc2VsZiwgaW5kZXgsIGVsZW1lbnQpOgotICAgICAgICBzZWxmLl9hc3NlcnRfaXNfZWxlbWVudChlbGVtZW50KQotICAgICAgICBzZWxmLl9jaGlsZHJlbi5pbnNlcnQoaW5kZXgsIGVsZW1lbnQpCisgICAgZGVmIGluc2VydChzZWxmLCBpbmRleCwgc3ViZWxlbWVudCk6CisgICAgICAgICIiIkluc2VydCAqc3ViZWxlbWVudCogYXQgcG9zaXRpb24gKmluZGV4Ki4iIiIKKyAgICAgICAgc2VsZi5fYXNzZXJ0X2lzX2VsZW1lbnQoc3ViZWxlbWVudCkKKyAgICAgICAgc2VsZi5fY2hpbGRyZW4uaW5zZXJ0KGluZGV4LCBzdWJlbGVtZW50KQogCiAgICAgZGVmIF9hc3NlcnRfaXNfZWxlbWVudChzZWxmLCBlKToKICAgICAgICAgIyBOZWVkIHRvIHJlZmVyIHRvIHRoZSBhY3R1YWwgUHl0aG9uIGltcGxlbWVudGF0aW9uLCBub3QgdGhlCiAgICAgICAgICMgc2hhZG93aW5nIEMgaW1wbGVtZW50YXRpb24uCi0gICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGUsIF9FbGVtZW50KToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZSwgX0VsZW1lbnRfUHkpOgogICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdleHBlY3RlZCBhbiBFbGVtZW50LCBub3QgJXMnICUgdHlwZShlKS5fX25hbWVfXykKIAotICAgICMjCi0gICAgIyBSZW1vdmVzIGEgbWF0Y2hpbmcgc3ViZWxlbWVudC4gIFVubGlrZSB0aGUgPGI+ZmluZDwvYj4gbWV0aG9kcywKLSAgICAjIHRoaXMgbWV0aG9kIGNvbXBhcmVzIGVsZW1lbnRzIGJhc2VkIG9uIGlkZW50aXR5LCBub3Qgb24gdGFnCi0gICAgIyB2YWx1ZSBvciBjb250ZW50cy4gIFRvIHJlbW92ZSBzdWJlbGVtZW50cyBieSBvdGhlciBtZWFucywgdGhlCi0gICAgIyBlYXNpZXN0IHdheSBpcyBvZnRlbiB0byB1c2UgYSBsaXN0IGNvbXByZWhlbnNpb24gdG8gc2VsZWN0IHdoYXQKLSAgICAjIGVsZW1lbnRzIHRvIGtlZXAsIGFuZCB1c2Ugc2xpY2UgYXNzaWdubWVudCB0byB1cGRhdGUgdGhlIHBhcmVudAotICAgICMgZWxlbWVudC4KLSAgICAjCi0gICAgIyBAcGFyYW0gZWxlbWVudCBXaGF0IGVsZW1lbnQgdG8gcmVtb3ZlLgotICAgICMgQGV4Y2VwdGlvbiBWYWx1ZUVycm9yIElmIGEgbWF0Y2hpbmcgZWxlbWVudCBjb3VsZCBub3QgYmUgZm91bmQuCisgICAgZGVmIHJlbW92ZShzZWxmLCBzdWJlbGVtZW50KToKKyAgICAgICAgIiIiUmVtb3ZlIG1hdGNoaW5nIHN1YmVsZW1lbnQuCiAKLSAgICBkZWYgcmVtb3ZlKHNlbGYsIGVsZW1lbnQpOgorICAgICAgICBVbmxpa2UgdGhlIGZpbmQgbWV0aG9kcywgdGhpcyBtZXRob2QgY29tcGFyZXMgZWxlbWVudHMgYmFzZWQgb24KKyAgICAgICAgaWRlbnRpdHksIE5PVCBPTiB0YWcgdmFsdWUgb3IgY29udGVudHMuICBUbyByZW1vdmUgc3ViZWxlbWVudHMgYnkKKyAgICAgICAgb3RoZXIgbWVhbnMsIHRoZSBlYXNpZXN0IHdheSBpcyB0byB1c2UgYSBsaXN0IGNvbXByZWhlbnNpb24gdG8KKyAgICAgICAgc2VsZWN0IHdoYXQgZWxlbWVudHMgdG8ga2VlcCwgYW5kIHRoZW4gdXNlIHNsaWNlIGFzc2lnbm1lbnQgdG8gdXBkYXRlCisgICAgICAgIHRoZSBwYXJlbnQgZWxlbWVudC4KKworICAgICAgICBWYWx1ZUVycm9yIGlzIHJhaXNlZCBpZiBhIG1hdGNoaW5nIGVsZW1lbnQgY291bGQgbm90IGJlIGZvdW5kLgorCisgICAgICAgICIiIgogICAgICAgICAjIGFzc2VydCBpc2VsZW1lbnQoZWxlbWVudCkKLSAgICAgICAgc2VsZi5fY2hpbGRyZW4ucmVtb3ZlKGVsZW1lbnQpCi0KLSAgICAjIwotICAgICMgKERlcHJlY2F0ZWQpIFJldHVybnMgYWxsIHN1YmVsZW1lbnRzLiAgVGhlIGVsZW1lbnRzIGFyZSByZXR1cm5lZAotICAgICMgaW4gZG9jdW1lbnQgb3JkZXIuCi0gICAgIwotICAgICMgQHJldHVybiBBIGxpc3Qgb2Ygc3ViZWxlbWVudHMuCi0gICAgIyBAZGVmcmV0dXJuIGxpc3Qgb2YgRWxlbWVudCBpbnN0YW5jZXMKKyAgICAgICAgc2VsZi5fY2hpbGRyZW4ucmVtb3ZlKHN1YmVsZW1lbnQpCiAKICAgICBkZWYgZ2V0Y2hpbGRyZW4oc2VsZik6CisgICAgICAgICIiIihEZXByZWNhdGVkKSBSZXR1cm4gYWxsIHN1YmVsZW1lbnRzLgorCisgICAgICAgIEVsZW1lbnRzIGFyZSByZXR1cm5lZCBpbiBkb2N1bWVudCBvcmRlci4KKworICAgICAgICAiIiIKICAgICAgICAgd2FybmluZ3Mud2FybigKICAgICAgICAgICAgICJUaGlzIG1ldGhvZCB3aWxsIGJlIHJlbW92ZWQgaW4gZnV0dXJlIHZlcnNpb25zLiAgIgogICAgICAgICAgICAgIlVzZSAnbGlzdChlbGVtKScgb3IgaXRlcmF0aW9uIG92ZXIgZWxlbSBpbnN0ZWFkLiIsCkBAIC0zMzgsMTMxICsyODUsMTI4IEBACiAgICAgICAgICAgICApCiAgICAgICAgIHJldHVybiBzZWxmLl9jaGlsZHJlbgogCi0gICAgIyMKLSAgICAjIEZpbmRzIHRoZSBmaXJzdCBtYXRjaGluZyBzdWJlbGVtZW50LCBieSB0YWcgbmFtZSBvciBwYXRoLgotICAgICMKLSAgICAjIEBwYXJhbSBwYXRoIFdoYXQgZWxlbWVudCB0byBsb29rIGZvci4KLSAgICAjIEBrZXlwYXJhbSBuYW1lc3BhY2VzIE9wdGlvbmFsIG5hbWVzcGFjZSBwcmVmaXggbWFwLgotICAgICMgQHJldHVybiBUaGUgZmlyc3QgbWF0Y2hpbmcgZWxlbWVudCwgb3IgTm9uZSBpZiBubyBlbGVtZW50IHdhcyBmb3VuZC4KLSAgICAjIEBkZWZyZXR1cm4gRWxlbWVudCBvciBOb25lCi0KICAgICBkZWYgZmluZChzZWxmLCBwYXRoLCBuYW1lc3BhY2VzPU5vbmUpOgorICAgICAgICAiIiJGaW5kIGZpcnN0IG1hdGNoaW5nIGVsZW1lbnQgYnkgdGFnIG5hbWUgb3IgcGF0aC4KKworICAgICAgICAqcGF0aCogaXMgYSBzdHJpbmcgaGF2aW5nIGVpdGhlciBhbiBlbGVtZW50IHRhZyBvciBhbiBYUGF0aCwKKyAgICAgICAgKm5hbWVzcGFjZXMqIGlzIGFuIG9wdGlvbmFsIG1hcHBpbmcgZnJvbSBuYW1lc3BhY2UgcHJlZml4IHRvIGZ1bGwgbmFtZS4KKworICAgICAgICBSZXR1cm4gdGhlIGZpcnN0IG1hdGNoaW5nIGVsZW1lbnQsIG9yIE5vbmUgaWYgbm8gZWxlbWVudCB3YXMgZm91bmQuCisKKyAgICAgICAgIiIiCiAgICAgICAgIHJldHVybiBFbGVtZW50UGF0aC5maW5kKHNlbGYsIHBhdGgsIG5hbWVzcGFjZXMpCiAKLSAgICAjIwotICAgICMgRmluZHMgdGV4dCBmb3IgdGhlIGZpcnN0IG1hdGNoaW5nIHN1YmVsZW1lbnQsIGJ5IHRhZyBuYW1lIG9yIHBhdGguCi0gICAgIwotICAgICMgQHBhcmFtIHBhdGggV2hhdCBlbGVtZW50IHRvIGxvb2sgZm9yLgotICAgICMgQHBhcmFtIGRlZmF1bHQgV2hhdCB0byByZXR1cm4gaWYgdGhlIGVsZW1lbnQgd2FzIG5vdCBmb3VuZC4KLSAgICAjIEBrZXlwYXJhbSBuYW1lc3BhY2VzIE9wdGlvbmFsIG5hbWVzcGFjZSBwcmVmaXggbWFwLgotICAgICMgQHJldHVybiBUaGUgdGV4dCBjb250ZW50IG9mIHRoZSBmaXJzdCBtYXRjaGluZyBlbGVtZW50LCBvciB0aGUKLSAgICAjICAgICBkZWZhdWx0IHZhbHVlIG5vIGVsZW1lbnQgd2FzIGZvdW5kLiAgTm90ZSB0aGF0IGlmIHRoZSBlbGVtZW50Ci0gICAgIyAgICAgaXMgZm91bmQsIGJ1dCBoYXMgbm8gdGV4dCBjb250ZW50LCB0aGlzIG1ldGhvZCByZXR1cm5zIGFuCi0gICAgIyAgICAgZW1wdHkgc3RyaW5nLgotICAgICMgQGRlZnJldHVybiBzdHJpbmcKLQogICAgIGRlZiBmaW5kdGV4dChzZWxmLCBwYXRoLCBkZWZhdWx0PU5vbmUsIG5hbWVzcGFjZXM9Tm9uZSk6CisgICAgICAgICIiIkZpbmQgdGV4dCBmb3IgZmlyc3QgbWF0Y2hpbmcgZWxlbWVudCBieSB0YWcgbmFtZSBvciBwYXRoLgorCisgICAgICAgICpwYXRoKiBpcyBhIHN0cmluZyBoYXZpbmcgZWl0aGVyIGFuIGVsZW1lbnQgdGFnIG9yIGFuIFhQYXRoLAorICAgICAgICAqZGVmYXVsdCogaXMgdGhlIHZhbHVlIHRvIHJldHVybiBpZiB0aGUgZWxlbWVudCB3YXMgbm90IGZvdW5kLAorICAgICAgICAqbmFtZXNwYWNlcyogaXMgYW4gb3B0aW9uYWwgbWFwcGluZyBmcm9tIG5hbWVzcGFjZSBwcmVmaXggdG8gZnVsbCBuYW1lLgorCisgICAgICAgIFJldHVybiB0ZXh0IGNvbnRlbnQgb2YgZmlyc3QgbWF0Y2hpbmcgZWxlbWVudCwgb3IgZGVmYXVsdCB2YWx1ZSBpZgorICAgICAgICBub25lIHdhcyBmb3VuZC4gIE5vdGUgdGhhdCBpZiBhbiBlbGVtZW50IGlzIGZvdW5kIGhhdmluZyBubyB0ZXh0CisgICAgICAgIGNvbnRlbnQsIHRoZSBlbXB0eSBzdHJpbmcgaXMgcmV0dXJuZWQuCisKKyAgICAgICAgIiIiCiAgICAgICAgIHJldHVybiBFbGVtZW50UGF0aC5maW5kdGV4dChzZWxmLCBwYXRoLCBkZWZhdWx0LCBuYW1lc3BhY2VzKQogCi0gICAgIyMKLSAgICAjIEZpbmRzIGFsbCBtYXRjaGluZyBzdWJlbGVtZW50cywgYnkgdGFnIG5hbWUgb3IgcGF0aC4KLSAgICAjCi0gICAgIyBAcGFyYW0gcGF0aCBXaGF0IGVsZW1lbnQgdG8gbG9vayBmb3IuCi0gICAgIyBAa2V5cGFyYW0gbmFtZXNwYWNlcyBPcHRpb25hbCBuYW1lc3BhY2UgcHJlZml4IG1hcC4KLSAgICAjIEByZXR1cm4gQSBsaXN0IG9yIG90aGVyIHNlcXVlbmNlIGNvbnRhaW5pbmcgYWxsIG1hdGNoaW5nIGVsZW1lbnRzLAotICAgICMgICAgaW4gZG9jdW1lbnQgb3JkZXIuCi0gICAgIyBAZGVmcmV0dXJuIGxpc3Qgb2YgRWxlbWVudCBpbnN0YW5jZXMKLQogICAgIGRlZiBmaW5kYWxsKHNlbGYsIHBhdGgsIG5hbWVzcGFjZXM9Tm9uZSk6CisgICAgICAgICIiIkZpbmQgYWxsIG1hdGNoaW5nIHN1YmVsZW1lbnRzIGJ5IHRhZyBuYW1lIG9yIHBhdGguCisKKyAgICAgICAgKnBhdGgqIGlzIGEgc3RyaW5nIGhhdmluZyBlaXRoZXIgYW4gZWxlbWVudCB0YWcgb3IgYW4gWFBhdGgsCisgICAgICAgICpuYW1lc3BhY2VzKiBpcyBhbiBvcHRpb25hbCBtYXBwaW5nIGZyb20gbmFtZXNwYWNlIHByZWZpeCB0byBmdWxsIG5hbWUuCisKKyAgICAgICAgUmV0dXJucyBsaXN0IGNvbnRhaW5pbmcgYWxsIG1hdGNoaW5nIGVsZW1lbnRzIGluIGRvY3VtZW50IG9yZGVyLgorCisgICAgICAgICIiIgogICAgICAgICByZXR1cm4gRWxlbWVudFBhdGguZmluZGFsbChzZWxmLCBwYXRoLCBuYW1lc3BhY2VzKQogCi0gICAgIyMKLSAgICAjIEZpbmRzIGFsbCBtYXRjaGluZyBzdWJlbGVtZW50cywgYnkgdGFnIG5hbWUgb3IgcGF0aC4KLSAgICAjCi0gICAgIyBAcGFyYW0gcGF0aCBXaGF0IGVsZW1lbnQgdG8gbG9vayBmb3IuCi0gICAgIyBAa2V5cGFyYW0gbmFtZXNwYWNlcyBPcHRpb25hbCBuYW1lc3BhY2UgcHJlZml4IG1hcC4KLSAgICAjIEByZXR1cm4gQW4gaXRlcmF0b3Igb3Igc2VxdWVuY2UgY29udGFpbmluZyBhbGwgbWF0Y2hpbmcgZWxlbWVudHMsCi0gICAgIyAgICBpbiBkb2N1bWVudCBvcmRlci4KLSAgICAjIEBkZWZyZXR1cm4gYSBnZW5lcmF0ZWQgc2VxdWVuY2Ugb2YgRWxlbWVudCBpbnN0YW5jZXMKLQogICAgIGRlZiBpdGVyZmluZChzZWxmLCBwYXRoLCBuYW1lc3BhY2VzPU5vbmUpOgorICAgICAgICAiIiJGaW5kIGFsbCBtYXRjaGluZyBzdWJlbGVtZW50cyBieSB0YWcgbmFtZSBvciBwYXRoLgorCisgICAgICAgICpwYXRoKiBpcyBhIHN0cmluZyBoYXZpbmcgZWl0aGVyIGFuIGVsZW1lbnQgdGFnIG9yIGFuIFhQYXRoLAorICAgICAgICAqbmFtZXNwYWNlcyogaXMgYW4gb3B0aW9uYWwgbWFwcGluZyBmcm9tIG5hbWVzcGFjZSBwcmVmaXggdG8gZnVsbCBuYW1lLgorCisgICAgICAgIFJldHVybiBhbiBpdGVyYWJsZSB5aWVsZGluZyBhbGwgbWF0Y2hpbmcgZWxlbWVudHMgaW4gZG9jdW1lbnQgb3JkZXIuCisKKyAgICAgICAgIiIiCiAgICAgICAgIHJldHVybiBFbGVtZW50UGF0aC5pdGVyZmluZChzZWxmLCBwYXRoLCBuYW1lc3BhY2VzKQogCi0gICAgIyMKLSAgICAjIFJlc2V0cyBhbiBlbGVtZW50LiAgVGhpcyBmdW5jdGlvbiByZW1vdmVzIGFsbCBzdWJlbGVtZW50cywgY2xlYXJzCi0gICAgIyBhbGwgYXR0cmlidXRlcywgYW5kIHNldHMgdGhlIDxiPnRleHQ8L2I+IGFuZCA8Yj50YWlsPC9iPiBhdHRyaWJ1dGVzCi0gICAgIyB0byBOb25lLgotCiAgICAgZGVmIGNsZWFyKHNlbGYpOgorICAgICAgICAiIiJSZXNldCBlbGVtZW50LgorCisgICAgICAgIFRoaXMgZnVuY3Rpb24gcmVtb3ZlcyBhbGwgc3ViZWxlbWVudHMsIGNsZWFycyBhbGwgYXR0cmlidXRlcywgYW5kIHNldHMKKyAgICAgICAgdGhlIHRleHQgYW5kIHRhaWwgYXR0cmlidXRlcyB0byBOb25lLgorCisgICAgICAgICIiIgogICAgICAgICBzZWxmLmF0dHJpYi5jbGVhcigpCiAgICAgICAgIHNlbGYuX2NoaWxkcmVuID0gW10KICAgICAgICAgc2VsZi50ZXh0ID0gc2VsZi50YWlsID0gTm9uZQogCi0gICAgIyMKLSAgICAjIEdldHMgYW4gZWxlbWVudCBhdHRyaWJ1dGUuICBFcXVpdmFsZW50IHRvIDxiPmF0dHJpYi5nZXQ8L2I+LCBidXQKLSAgICAjIHNvbWUgaW1wbGVtZW50YXRpb25zIG1heSBoYW5kbGUgdGhpcyBhIGJpdCBtb3JlIGVmZmljaWVudGx5LgotICAgICMKLSAgICAjIEBwYXJhbSBrZXkgV2hhdCBhdHRyaWJ1dGUgdG8gbG9vayBmb3IuCi0gICAgIyBAcGFyYW0gZGVmYXVsdCBXaGF0IHRvIHJldHVybiBpZiB0aGUgYXR0cmlidXRlIHdhcyBub3QgZm91bmQuCi0gICAgIyBAcmV0dXJuIFRoZSBhdHRyaWJ1dGUgdmFsdWUsIG9yIHRoZSBkZWZhdWx0IHZhbHVlLCBpZiB0aGUKLSAgICAjICAgICBhdHRyaWJ1dGUgd2FzIG5vdCBmb3VuZC4KLSAgICAjIEBkZWZyZXR1cm4gc3RyaW5nIG9yIE5vbmUKLQogICAgIGRlZiBnZXQoc2VsZiwga2V5LCBkZWZhdWx0PU5vbmUpOgorICAgICAgICAiIiJHZXQgZWxlbWVudCBhdHRyaWJ1dGUuCisKKyAgICAgICAgRXF1aXZhbGVudCB0byBhdHRyaWIuZ2V0LCBidXQgc29tZSBpbXBsZW1lbnRhdGlvbnMgbWF5IGhhbmRsZSB0aGlzIGEKKyAgICAgICAgYml0IG1vcmUgZWZmaWNpZW50bHkuICAqa2V5KiBpcyB3aGF0IGF0dHJpYnV0ZSB0byBsb29rIGZvciwgYW5kCisgICAgICAgICpkZWZhdWx0KiBpcyB3aGF0IHRvIHJldHVybiBpZiB0aGUgYXR0cmlidXRlIHdhcyBub3QgZm91bmQuCisKKyAgICAgICAgUmV0dXJucyBhIHN0cmluZyBjb250YWluaW5nIHRoZSBhdHRyaWJ1dGUgdmFsdWUsIG9yIHRoZSBkZWZhdWx0IGlmCisgICAgICAgIGF0dHJpYnV0ZSB3YXMgbm90IGZvdW5kLgorCisgICAgICAgICIiIgogICAgICAgICByZXR1cm4gc2VsZi5hdHRyaWIuZ2V0KGtleSwgZGVmYXVsdCkKIAotICAgICMjCi0gICAgIyBTZXRzIGFuIGVsZW1lbnQgYXR0cmlidXRlLiAgRXF1aXZhbGVudCB0byA8Yj5hdHRyaWJba2V5XSA9IHZhbHVlPC9iPiwKLSAgICAjIGJ1dCBzb21lIGltcGxlbWVudGF0aW9ucyBtYXkgaGFuZGxlIHRoaXMgYSBiaXQgbW9yZSBlZmZpY2llbnRseS4KLSAgICAjCi0gICAgIyBAcGFyYW0ga2V5IFdoYXQgYXR0cmlidXRlIHRvIHNldC4KLSAgICAjIEBwYXJhbSB2YWx1ZSBUaGUgYXR0cmlidXRlIHZhbHVlLgotCiAgICAgZGVmIHNldChzZWxmLCBrZXksIHZhbHVlKToKKyAgICAgICAgIiIiU2V0IGVsZW1lbnQgYXR0cmlidXRlLgorCisgICAgICAgIEVxdWl2YWxlbnQgdG8gYXR0cmliW2tleV0gPSB2YWx1ZSwgYnV0IHNvbWUgaW1wbGVtZW50YXRpb25zIG1heSBoYW5kbGUKKyAgICAgICAgdGhpcyBhIGJpdCBtb3JlIGVmZmljaWVudGx5LiAgKmtleSogaXMgd2hhdCBhdHRyaWJ1dGUgdG8gc2V0LCBhbmQKKyAgICAgICAgKnZhbHVlKiBpcyB0aGUgYXR0cmlidXRlIHZhbHVlIHRvIHNldCBpdCB0by4KKworICAgICAgICAiIiIKICAgICAgICAgc2VsZi5hdHRyaWJba2V5XSA9IHZhbHVlCiAKLSAgICAjIwotICAgICMgR2V0cyBhIGxpc3Qgb2YgYXR0cmlidXRlIG5hbWVzLiAgVGhlIG5hbWVzIGFyZSByZXR1cm5lZCBpbiBhbgotICAgICMgYXJiaXRyYXJ5IG9yZGVyIChqdXN0IGxpa2UgZm9yIGFuIG9yZGluYXJ5IFB5dGhvbiBkaWN0aW9uYXJ5KS4KLSAgICAjIEVxdWl2YWxlbnQgdG8gPGI+YXR0cmliLmtleXMoKTwvYj4uCi0gICAgIwotICAgICMgQHJldHVybiBBIGxpc3Qgb2YgZWxlbWVudCBhdHRyaWJ1dGUgbmFtZXMuCi0gICAgIyBAZGVmcmV0dXJuIGxpc3Qgb2Ygc3RyaW5ncwotCiAgICAgZGVmIGtleXMoc2VsZik6CisgICAgICAgICIiIkdldCBsaXN0IG9mIGF0dHJpYnV0ZSBuYW1lcy4KKworICAgICAgICBOYW1lcyBhcmUgcmV0dXJuZWQgaW4gYW4gYXJiaXRyYXJ5IG9yZGVyLCBqdXN0IGxpa2UgYW4gb3JkaW5hcnkKKyAgICAgICAgUHl0aG9uIGRpY3QuICBFcXVpdmFsZW50IHRvIGF0dHJpYi5rZXlzKCkKKworICAgICAgICAiIiIKICAgICAgICAgcmV0dXJuIHNlbGYuYXR0cmliLmtleXMoKQogCi0gICAgIyMKLSAgICAjIEdldHMgZWxlbWVudCBhdHRyaWJ1dGVzLCBhcyBhIHNlcXVlbmNlLiAgVGhlIGF0dHJpYnV0ZXMgYXJlCi0gICAgIyByZXR1cm5lZCBpbiBhbiBhcmJpdHJhcnkgb3JkZXIuICBFcXVpdmFsZW50IHRvIDxiPmF0dHJpYi5pdGVtcygpPC9iPi4KLSAgICAjCi0gICAgIyBAcmV0dXJuIEEgbGlzdCBvZiAobmFtZSwgdmFsdWUpIHR1cGxlcyBmb3IgYWxsIGF0dHJpYnV0ZXMuCi0gICAgIyBAZGVmcmV0dXJuIGxpc3Qgb2YgKHN0cmluZywgc3RyaW5nKSB0dXBsZXMKLQogICAgIGRlZiBpdGVtcyhzZWxmKToKKyAgICAgICAgIiIiR2V0IGVsZW1lbnQgYXR0cmlidXRlcyBhcyBhIHNlcXVlbmNlLgorCisgICAgICAgIFRoZSBhdHRyaWJ1dGVzIGFyZSByZXR1cm5lZCBpbiBhcmJpdHJhcnkgb3JkZXIuICBFcXVpdmFsZW50IHRvCisgICAgICAgIGF0dHJpYi5pdGVtcygpLgorCisgICAgICAgIFJldHVybiBhIGxpc3Qgb2YgKG5hbWUsIHZhbHVlKSB0dXBsZXMuCisKKyAgICAgICAgIiIiCiAgICAgICAgIHJldHVybiBzZWxmLmF0dHJpYi5pdGVtcygpCiAKLSAgICAjIwotICAgICMgQ3JlYXRlcyBhIHRyZWUgaXRlcmF0b3IuICBUaGUgaXRlcmF0b3IgbG9vcHMgb3ZlciB0aGlzIGVsZW1lbnQKLSAgICAjIGFuZCBhbGwgc3ViZWxlbWVudHMsIGluIGRvY3VtZW50IG9yZGVyLCBhbmQgcmV0dXJucyBhbGwgZWxlbWVudHMKLSAgICAjIHdpdGggYSBtYXRjaGluZyB0YWcuCi0gICAgIyA8cD4KLSAgICAjIElmIHRoZSB0cmVlIHN0cnVjdHVyZSBpcyBtb2RpZmllZCBkdXJpbmcgaXRlcmF0aW9uLCBuZXcgb3IgcmVtb3ZlZAotICAgICMgZWxlbWVudHMgbWF5IG9yIG1heSBub3QgYmUgaW5jbHVkZWQuICBUbyBnZXQgYSBzdGFibGUgc2V0LCB1c2UgdGhlCi0gICAgIyBsaXN0KCkgZnVuY3Rpb24gb24gdGhlIGl0ZXJhdG9yLCBhbmQgbG9vcCBvdmVyIHRoZSByZXN1bHRpbmcgbGlzdC4KLSAgICAjCi0gICAgIyBAcGFyYW0gdGFnIFdoYXQgdGFncyB0byBsb29rIGZvciAoZGVmYXVsdCBpcyB0byByZXR1cm4gYWxsIGVsZW1lbnRzKS4KLSAgICAjIEByZXR1cm4gQW4gaXRlcmF0b3IgY29udGFpbmluZyBhbGwgdGhlIG1hdGNoaW5nIGVsZW1lbnRzLgotICAgICMgQGRlZnJldHVybiBpdGVyYXRvcgotCiAgICAgZGVmIGl0ZXIoc2VsZiwgdGFnPU5vbmUpOgorICAgICAgICAiIiJDcmVhdGUgdHJlZSBpdGVyYXRvci4KKworICAgICAgICBUaGUgaXRlcmF0b3IgbG9vcHMgb3ZlciB0aGUgZWxlbWVudCBhbmQgYWxsIHN1YmVsZW1lbnRzIGluIGRvY3VtZW50CisgICAgICAgIG9yZGVyLCByZXR1cm5pbmcgYWxsIGVsZW1lbnRzIHdpdGggYSBtYXRjaGluZyB0YWcuCisKKyAgICAgICAgSWYgdGhlIHRyZWUgc3RydWN0dXJlIGlzIG1vZGlmaWVkIGR1cmluZyBpdGVyYXRpb24sIG5ldyBvciByZW1vdmVkCisgICAgICAgIGVsZW1lbnRzIG1heSBvciBtYXkgbm90IGJlIGluY2x1ZGVkLiAgVG8gZ2V0IGEgc3RhYmxlIHNldCwgdXNlIHRoZQorICAgICAgICBsaXN0KCkgZnVuY3Rpb24gb24gdGhlIGl0ZXJhdG9yLCBhbmQgbG9vcCBvdmVyIHRoZSByZXN1bHRpbmcgbGlzdC4KKworICAgICAgICAqdGFnKiBpcyB3aGF0IHRhZ3MgdG8gbG9vayBmb3IgKGRlZmF1bHQgaXMgdG8gcmV0dXJuIGFsbCBlbGVtZW50cykKKworICAgICAgICBSZXR1cm4gYW4gaXRlcmF0b3IgY29udGFpbmluZyBhbGwgdGhlIG1hdGNoaW5nIGVsZW1lbnRzLgorCisgICAgICAgICIiIgogICAgICAgICBpZiB0YWcgPT0gIioiOgogICAgICAgICAgICAgdGFnID0gTm9uZQogICAgICAgICBpZiB0YWcgaXMgTm9uZSBvciBzZWxmLnRhZyA9PSB0YWc6CiAgICAgICAgICAgICB5aWVsZCBzZWxmCiAgICAgICAgIGZvciBlIGluIHNlbGYuX2NoaWxkcmVuOgotICAgICAgICAgICAgZm9yIGUgaW4gZS5pdGVyKHRhZyk6Ci0gICAgICAgICAgICAgICAgeWllbGQgZQorICAgICAgICAgICAgeWllbGQgZnJvbSBlLml0ZXIodGFnKQogCiAgICAgIyBjb21wYXRpYmlsaXR5CiAgICAgZGVmIGdldGl0ZXJhdG9yKHNlbGYsIHRhZz1Ob25lKToKQEAgLTQ3NCw3OCArNDE4LDY3IEBACiAgICAgICAgICkKICAgICAgICAgcmV0dXJuIGxpc3Qoc2VsZi5pdGVyKHRhZykpCiAKLSAgICAjIwotICAgICMgQ3JlYXRlcyBhIHRleHQgaXRlcmF0b3IuICBUaGUgaXRlcmF0b3IgbG9vcHMgb3ZlciB0aGlzIGVsZW1lbnQKLSAgICAjIGFuZCBhbGwgc3ViZWxlbWVudHMsIGluIGRvY3VtZW50IG9yZGVyLCBhbmQgcmV0dXJucyBhbGwgaW5uZXIKLSAgICAjIHRleHQuCi0gICAgIwotICAgICMgQHJldHVybiBBbiBpdGVyYXRvciBjb250YWluaW5nIGFsbCBpbm5lciB0ZXh0LgotICAgICMgQGRlZnJldHVybiBpdGVyYXRvcgotCiAgICAgZGVmIGl0ZXJ0ZXh0KHNlbGYpOgorICAgICAgICAiIiJDcmVhdGUgdGV4dCBpdGVyYXRvci4KKworICAgICAgICBUaGUgaXRlcmF0b3IgbG9vcHMgb3ZlciB0aGUgZWxlbWVudCBhbmQgYWxsIHN1YmVsZW1lbnRzIGluIGRvY3VtZW50CisgICAgICAgIG9yZGVyLCByZXR1cm5pbmcgYWxsIGlubmVyIHRleHQuCisKKyAgICAgICAgIiIiCiAgICAgICAgIHRhZyA9IHNlbGYudGFnCiAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHRhZywgc3RyKSBhbmQgdGFnIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIGlmIHNlbGYudGV4dDoKICAgICAgICAgICAgIHlpZWxkIHNlbGYudGV4dAogICAgICAgICBmb3IgZSBpbiBzZWxmOgotICAgICAgICAgICAgZm9yIHMgaW4gZS5pdGVydGV4dCgpOgotICAgICAgICAgICAgICAgIHlpZWxkIHMKKyAgICAgICAgICAgIHlpZWxkIGZyb20gZS5pdGVydGV4dCgpCiAgICAgICAgICAgICBpZiBlLnRhaWw6CiAgICAgICAgICAgICAgICAgeWllbGQgZS50YWlsCiAKLSMgY29tcGF0aWJpbGl0eQotX0VsZW1lbnQgPSBfRWxlbWVudEludGVyZmFjZSA9IEVsZW1lbnQKLQotIyMKLSMgU3ViZWxlbWVudCBmYWN0b3J5LiAgVGhpcyBmdW5jdGlvbiBjcmVhdGVzIGFuIGVsZW1lbnQgaW5zdGFuY2UsIGFuZAotIyBhcHBlbmRzIGl0IHRvIGFuIGV4aXN0aW5nIGVsZW1lbnQuCi0jIDxwPgotIyBUaGUgZWxlbWVudCBuYW1lLCBhdHRyaWJ1dGUgbmFtZXMsIGFuZCBhdHRyaWJ1dGUgdmFsdWVzIGNhbiBiZQotIyBlaXRoZXIgOC1iaXQgQVNDSUkgc3RyaW5ncyBvciBVbmljb2RlIHN0cmluZ3MuCi0jCi0jIEBwYXJhbSBwYXJlbnQgVGhlIHBhcmVudCBlbGVtZW50LgotIyBAcGFyYW0gdGFnIFRoZSBzdWJlbGVtZW50IG5hbWUuCi0jIEBwYXJhbSBhdHRyaWIgQW4gb3B0aW9uYWwgZGljdGlvbmFyeSwgY29udGFpbmluZyBlbGVtZW50IGF0dHJpYnV0ZXMuCi0jIEBwYXJhbSAqKmV4dHJhIEFkZGl0aW9uYWwgYXR0cmlidXRlcywgZ2l2ZW4gYXMga2V5d29yZCBhcmd1bWVudHMuCi0jIEByZXR1cm4gQW4gZWxlbWVudCBpbnN0YW5jZS4KLSMgQGRlZnJldHVybiBFbGVtZW50CiAKIGRlZiBTdWJFbGVtZW50KHBhcmVudCwgdGFnLCBhdHRyaWI9e30sICoqZXh0cmEpOgorICAgICIiIlN1YmVsZW1lbnQgZmFjdG9yeSB3aGljaCBjcmVhdGVzIGFuIGVsZW1lbnQgaW5zdGFuY2UsIGFuZCBhcHBlbmRzIGl0CisgICAgdG8gYW4gZXhpc3RpbmcgcGFyZW50LgorCisgICAgVGhlIGVsZW1lbnQgdGFnLCBhdHRyaWJ1dGUgbmFtZXMsIGFuZCBhdHRyaWJ1dGUgdmFsdWVzIGNhbiBiZSBlaXRoZXIKKyAgICBieXRlcyBvciBVbmljb2RlIHN0cmluZ3MuCisKKyAgICAqcGFyZW50KiBpcyB0aGUgcGFyZW50IGVsZW1lbnQsICp0YWcqIGlzIHRoZSBzdWJlbGVtZW50cyBuYW1lLCAqYXR0cmliKiBpcworICAgIGFuIG9wdGlvbmFsIGRpcmVjdG9yeSBjb250YWluaW5nIGVsZW1lbnQgYXR0cmlidXRlcywgKmV4dHJhKiBhcmUKKyAgICBhZGRpdGlvbmFsIGF0dHJpYnV0ZXMgZ2l2ZW4gYXMga2V5d29yZCBhcmd1bWVudHMuCisKKyAgICAiIiIKICAgICBhdHRyaWIgPSBhdHRyaWIuY29weSgpCiAgICAgYXR0cmliLnVwZGF0ZShleHRyYSkKICAgICBlbGVtZW50ID0gcGFyZW50Lm1ha2VlbGVtZW50KHRhZywgYXR0cmliKQogICAgIHBhcmVudC5hcHBlbmQoZWxlbWVudCkKICAgICByZXR1cm4gZWxlbWVudAogCi0jIwotIyBDb21tZW50IGVsZW1lbnQgZmFjdG9yeS4gIFRoaXMgZmFjdG9yeSBmdW5jdGlvbiBjcmVhdGVzIGEgc3BlY2lhbAotIyBlbGVtZW50IHRoYXQgd2lsbCBiZSBzZXJpYWxpemVkIGFzIGFuIFhNTCBjb21tZW50IGJ5IHRoZSBzdGFuZGFyZAotIyBzZXJpYWxpemVyLgotIyA8cD4KLSMgVGhlIGNvbW1lbnQgc3RyaW5nIGNhbiBiZSBlaXRoZXIgYW4gOC1iaXQgQVNDSUkgc3RyaW5nIG9yIGEgVW5pY29kZQotIyBzdHJpbmcuCi0jCi0jIEBwYXJhbSB0ZXh0IEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGNvbW1lbnQgc3RyaW5nLgotIyBAcmV0dXJuIEFuIGVsZW1lbnQgaW5zdGFuY2UsIHJlcHJlc2VudGluZyBhIGNvbW1lbnQuCi0jIEBkZWZyZXR1cm4gRWxlbWVudAogCiBkZWYgQ29tbWVudCh0ZXh0PU5vbmUpOgorICAgICIiIkNvbW1lbnQgZWxlbWVudCBmYWN0b3J5LgorCisgICAgVGhpcyBmdW5jdGlvbiBjcmVhdGVzIGEgc3BlY2lhbCBlbGVtZW50IHdoaWNoIHRoZSBzdGFuZGFyZCBzZXJpYWxpemVyCisgICAgc2VyaWFsaXplcyBhcyBhbiBYTUwgY29tbWVudC4KKworICAgICp0ZXh0KiBpcyBhIHN0cmluZyBjb250YWluaW5nIHRoZSBjb21tZW50IHN0cmluZy4KKworICAgICIiIgogICAgIGVsZW1lbnQgPSBFbGVtZW50KENvbW1lbnQpCiAgICAgZWxlbWVudC50ZXh0ID0gdGV4dAogICAgIHJldHVybiBlbGVtZW50CiAKLSMjCi0jIFBJIGVsZW1lbnQgZmFjdG9yeS4gIFRoaXMgZmFjdG9yeSBmdW5jdGlvbiBjcmVhdGVzIGEgc3BlY2lhbCBlbGVtZW50Ci0jIHRoYXQgd2lsbCBiZSBzZXJpYWxpemVkIGFzIGFuIFhNTCBwcm9jZXNzaW5nIGluc3RydWN0aW9uIGJ5IHRoZSBzdGFuZGFyZAotIyBzZXJpYWxpemVyLgotIwotIyBAcGFyYW0gdGFyZ2V0IEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFBJIHRhcmdldC4KLSMgQHBhcmFtIHRleHQgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgUEkgY29udGVudHMsIGlmIGFueS4KLSMgQHJldHVybiBBbiBlbGVtZW50IGluc3RhbmNlLCByZXByZXNlbnRpbmcgYSBQSS4KLSMgQGRlZnJldHVybiBFbGVtZW50CiAKIGRlZiBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24odGFyZ2V0LCB0ZXh0PU5vbmUpOgorICAgICIiIlByb2Nlc3NpbmcgSW5zdHJ1Y3Rpb24gZWxlbWVudCBmYWN0b3J5LgorCisgICAgVGhpcyBmdW5jdGlvbiBjcmVhdGVzIGEgc3BlY2lhbCBlbGVtZW50IHdoaWNoIHRoZSBzdGFuZGFyZCBzZXJpYWxpemVyCisgICAgc2VyaWFsaXplcyBhcyBhbiBYTUwgY29tbWVudC4KKworICAgICp0YXJnZXQqIGlzIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24sICp0ZXh0KiBpcyBhCisgICAgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24gY29udGVudHMsIGlmIGFueS4KKworICAgICIiIgogICAgIGVsZW1lbnQgPSBFbGVtZW50KFByb2Nlc3NpbmdJbnN0cnVjdGlvbikKICAgICBlbGVtZW50LnRleHQgPSB0YXJnZXQKICAgICBpZiB0ZXh0OgpAQCAtNTU0LDE3ICs0ODcsMjEgQEAKIAogUEkgPSBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24KIAotIyMKLSMgUU5hbWUgd3JhcHBlci4gIFRoaXMgY2FuIGJlIHVzZWQgdG8gd3JhcCBhIFFOYW1lIGF0dHJpYnV0ZSB2YWx1ZSwgaW4KLSMgb3JkZXIgdG8gZ2V0IHByb3BlciBuYW1lc3BhY2UgaGFuZGxpbmcgb24gb3V0cHV0LgotIwotIyBAcGFyYW0gdGV4dCBBIHN0cmluZyBjb250YWluaW5nIHRoZSBRTmFtZSB2YWx1ZSwgaW4gdGhlIGZvcm0ge3VyaX1sb2NhbCwKLSMgICAgIG9yLCBpZiB0aGUgdGFnIGFyZ3VtZW50IGlzIGdpdmVuLCB0aGUgVVJJIHBhcnQgb2YgYSBRTmFtZS4KLSMgQHBhcmFtIHRhZyBPcHRpb25hbCB0YWcuICBJZiBnaXZlbiwgdGhlIGZpcnN0IGFyZ3VtZW50IGlzIGludGVycHJldGVkIGFzCi0jICAgICBhbiBVUkksIGFuZCB0aGlzIGFyZ3VtZW50IGlzIGludGVycHJldGVkIGFzIGEgbG9jYWwgbmFtZS4KLSMgQHJldHVybiBBbiBvcGFxdWUgb2JqZWN0LCByZXByZXNlbnRpbmcgdGhlIFFOYW1lLgogCiBjbGFzcyBRTmFtZToKKyAgICAiIiJRdWFsaWZpZWQgbmFtZSB3cmFwcGVyLgorCisgICAgVGhpcyBjbGFzcyBjYW4gYmUgdXNlZCB0byB3cmFwIGEgUU5hbWUgYXR0cmlidXRlIHZhbHVlIGluIG9yZGVyIHRvIGdldAorICAgIHByb3BlciBuYW1lc3BhY2UgaGFuZGluZyBvbiBvdXRwdXQuCisKKyAgICAqdGV4dF9vcl91cmkqIGlzIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFFOYW1lIHZhbHVlIGVpdGhlciBpbiB0aGUgZm9ybQorICAgIHt1cml9bG9jYWwsIG9yIGlmIHRoZSB0YWcgYXJndW1lbnQgaXMgZ2l2ZW4sIHRoZSBVUkkgcGFydCBvZiBhIFFOYW1lLgorCisgICAgKnRhZyogaXMgYW4gb3B0aW9uYWwgYXJndW1lbnQgd2hpY2ggaWYgZ2l2ZW4sIHdpbGwgbWFrZSB0aGUgZmlyc3QKKyAgICBhcmd1bWVudCAodGV4dF9vcl91cmkpIGJlIGludGVycHJldGVkIGFzIGEgVVJJLCBhbmQgdGhpcyBhcmd1bWVudCAodGFnKQorICAgIGJlIGludGVycHJldGVkIGFzIGEgbG9jYWwgbmFtZS4KKworICAgICIiIgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0ZXh0X29yX3VyaSwgdGFnPU5vbmUpOgogICAgICAgICBpZiB0YWc6CiAgICAgICAgICAgICB0ZXh0X29yX3VyaSA9ICJ7JXN9JXMiICUgKHRleHRfb3JfdXJpLCB0YWcpCkBAIC02MDIsNjMgKzUzOSw2NSBAQAogCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSMjCi0jIEVsZW1lbnRUcmVlIHdyYXBwZXIgY2xhc3MuICBUaGlzIGNsYXNzIHJlcHJlc2VudHMgYW4gZW50aXJlIGVsZW1lbnQKLSMgaGllcmFyY2h5LCBhbmQgYWRkcyBzb21lIGV4dHJhIHN1cHBvcnQgZm9yIHNlcmlhbGl6YXRpb24gdG8gYW5kIGZyb20KLSMgc3RhbmRhcmQgWE1MLgotIwotIyBAcGFyYW0gZWxlbWVudCBPcHRpb25hbCByb290IGVsZW1lbnQuCi0jIEBrZXlwYXJhbSBmaWxlIE9wdGlvbmFsIGZpbGUgaGFuZGxlIG9yIGZpbGUgbmFtZS4gIElmIGdpdmVuLCB0aGUKLSMgICAgIHRyZWUgaXMgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgY29udGVudHMgb2YgdGhpcyBYTUwgZmlsZS4KIAogY2xhc3MgRWxlbWVudFRyZWU6CisgICAgIiIiQW4gWE1MIGVsZW1lbnQgaGllcmFyY2h5LgogCisgICAgVGhpcyBjbGFzcyBhbHNvIHByb3ZpZGVzIHN1cHBvcnQgZm9yIHNlcmlhbGl6YXRpb24gdG8gYW5kIGZyb20KKyAgICBzdGFuZGFyZCBYTUwuCisKKyAgICAqZWxlbWVudCogaXMgYW4gb3B0aW9uYWwgcm9vdCBlbGVtZW50IG5vZGUsCisgICAgKmZpbGUqIGlzIGFuIG9wdGlvbmFsIGZpbGUgaGFuZGxlIG9yIGZpbGUgbmFtZSBvZiBhbiBYTUwgZmlsZSB3aG9zZQorICAgIGNvbnRlbnRzIHdpbGwgYmUgdXNlZCB0byBpbml0aWFsaXplIHRoZSB0cmVlIHdpdGguCisKKyAgICAiIiIKICAgICBkZWYgX19pbml0X18oc2VsZiwgZWxlbWVudD1Ob25lLCBmaWxlPU5vbmUpOgogICAgICAgICAjIGFzc2VydCBlbGVtZW50IGlzIE5vbmUgb3IgaXNlbGVtZW50KGVsZW1lbnQpCiAgICAgICAgIHNlbGYuX3Jvb3QgPSBlbGVtZW50ICMgZmlyc3Qgbm9kZQogICAgICAgICBpZiBmaWxlOgogICAgICAgICAgICAgc2VsZi5wYXJzZShmaWxlKQogCi0gICAgIyMKLSAgICAjIEdldHMgdGhlIHJvb3QgZWxlbWVudCBmb3IgdGhpcyB0cmVlLgotICAgICMKLSAgICAjIEByZXR1cm4gQW4gZWxlbWVudCBpbnN0YW5jZS4KLSAgICAjIEBkZWZyZXR1cm4gRWxlbWVudAotCiAgICAgZGVmIGdldHJvb3Qoc2VsZik6CisgICAgICAgICIiIlJldHVybiByb290IGVsZW1lbnQgb2YgdGhpcyB0cmVlLiIiIgogICAgICAgICByZXR1cm4gc2VsZi5fcm9vdAogCi0gICAgIyMKLSAgICAjIFJlcGxhY2VzIHRoZSByb290IGVsZW1lbnQgZm9yIHRoaXMgdHJlZS4gIFRoaXMgZGlzY2FyZHMgdGhlCi0gICAgIyBjdXJyZW50IGNvbnRlbnRzIG9mIHRoZSB0cmVlLCBhbmQgcmVwbGFjZXMgaXQgd2l0aCB0aGUgZ2l2ZW4KLSAgICAjIGVsZW1lbnQuICBVc2Ugd2l0aCBjYXJlLgotICAgICMKLSAgICAjIEBwYXJhbSBlbGVtZW50IEFuIGVsZW1lbnQgaW5zdGFuY2UuCi0KICAgICBkZWYgX3NldHJvb3Qoc2VsZiwgZWxlbWVudCk6CisgICAgICAgICIiIlJlcGxhY2Ugcm9vdCBlbGVtZW50IG9mIHRoaXMgdHJlZS4KKworICAgICAgICBUaGlzIHdpbGwgZGlzY2FyZCB0aGUgY3VycmVudCBjb250ZW50cyBvZiB0aGUgdHJlZSBhbmQgcmVwbGFjZSBpdAorICAgICAgICB3aXRoIHRoZSBnaXZlbiBlbGVtZW50LiAgVXNlIHdpdGggY2FyZSEKKworICAgICAgICAiIiIKICAgICAgICAgIyBhc3NlcnQgaXNlbGVtZW50KGVsZW1lbnQpCiAgICAgICAgIHNlbGYuX3Jvb3QgPSBlbGVtZW50CiAKLSAgICAjIwotICAgICMgTG9hZHMgYW4gZXh0ZXJuYWwgWE1MIGRvY3VtZW50IGludG8gdGhpcyBlbGVtZW50IHRyZWUuCi0gICAgIwotICAgICMgQHBhcmFtIHNvdXJjZSBBIGZpbGUgbmFtZSBvciBmaWxlIG9iamVjdC4gIElmIGEgZmlsZSBvYmplY3QgaXMKLSAgICAjICAgICBnaXZlbiwgaXQgb25seSBoYXMgdG8gaW1wbGVtZW50IGEgPGI+cmVhZChuKTwvYj4gbWV0aG9kLgotICAgICMgQGtleXBhcmFtIHBhcnNlciBBbiBvcHRpb25hbCBwYXJzZXIgaW5zdGFuY2UuICBJZiBub3QgZ2l2ZW4sIHRoZQotICAgICMgICAgIHN0YW5kYXJkIHtAbGluayBYTUxQYXJzZXJ9IHBhcnNlciBpcyB1c2VkLgotICAgICMgQHJldHVybiBUaGUgZG9jdW1lbnQgcm9vdCBlbGVtZW50LgotICAgICMgQGRlZnJldHVybiBFbGVtZW50Ci0gICAgIyBAZXhjZXB0aW9uIFBhcnNlRXJyb3IgSWYgdGhlIHBhcnNlciBmYWlscyB0byBwYXJzZSB0aGUgZG9jdW1lbnQuCi0KICAgICBkZWYgcGFyc2Uoc2VsZiwgc291cmNlLCBwYXJzZXI9Tm9uZSk6CisgICAgICAgICIiIkxvYWQgZXh0ZXJuYWwgWE1MIGRvY3VtZW50IGludG8gZWxlbWVudCB0cmVlLgorCisgICAgICAgICpzb3VyY2UqIGlzIGEgZmlsZSBuYW1lIG9yIGZpbGUgb2JqZWN0LCAqcGFyc2VyKiBpcyBhbiBvcHRpb25hbCBwYXJzZXIKKyAgICAgICAgaW5zdGFuY2UgdGhhdCBkZWZhdWx0cyB0byBYTUxQYXJzZXIuCisKKyAgICAgICAgUGFyc2VFcnJvciBpcyByYWlzZWQgaWYgdGhlIHBhcnNlciBmYWlscyB0byBwYXJzZSB0aGUgZG9jdW1lbnQuCisKKyAgICAgICAgUmV0dXJucyB0aGUgcm9vdCBlbGVtZW50IG9mIHRoZSBnaXZlbiBzb3VyY2UgZG9jdW1lbnQuCisKKyAgICAgICAgIiIiCiAgICAgICAgIGNsb3NlX3NvdXJjZSA9IEZhbHNlCiAgICAgICAgIGlmIG5vdCBoYXNhdHRyKHNvdXJjZSwgInJlYWQiKToKICAgICAgICAgICAgIHNvdXJjZSA9IG9wZW4oc291cmNlLCAicmIiKQogICAgICAgICAgICAgY2xvc2Vfc291cmNlID0gVHJ1ZQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBpZiBub3QgcGFyc2VyOgotICAgICAgICAgICAgICAgIHBhcnNlciA9IFhNTFBhcnNlcih0YXJnZXQ9VHJlZUJ1aWxkZXIoKSkKLSAgICAgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICBpZiBwYXJzZXIgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAjIElmIG5vIHBhcnNlciB3YXMgc3BlY2lmaWVkLCBjcmVhdGUgYSBkZWZhdWx0IFhNTFBhcnNlcgorICAgICAgICAgICAgICAgIHBhcnNlciA9IFhNTFBhcnNlcigpCisgICAgICAgICAgICAgICAgaWYgaGFzYXR0cihwYXJzZXIsICdfcGFyc2Vfd2hvbGUnKToKKyAgICAgICAgICAgICAgICAgICAgIyBUaGUgZGVmYXVsdCBYTUxQYXJzZXIsIHdoZW4gaXQgY29tZXMgZnJvbSBhbiBhY2NlbGVyYXRvciwKKyAgICAgICAgICAgICAgICAgICAgIyBjYW4gZGVmaW5lIGFuIGludGVybmFsIF9wYXJzZV93aG9sZSBBUEkgZm9yIGVmZmljaWVuY3kuCisgICAgICAgICAgICAgICAgICAgICMgSXQgY2FuIGJlIHVzZWQgdG8gcGFyc2UgdGhlIHdob2xlIHNvdXJjZSB3aXRob3V0IGZlZWRpbmcKKyAgICAgICAgICAgICAgICAgICAgIyBpdCB3aXRoIGNodW5rcy4KKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fcm9vdCA9IHBhcnNlci5fcGFyc2Vfd2hvbGUoc291cmNlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fcm9vdAorICAgICAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgICAgICBkYXRhID0gc291cmNlLnJlYWQoNjU1MzYpCiAgICAgICAgICAgICAgICAgaWYgbm90IGRhdGE6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrCkBAIC02NjksMTUgKzYwOCwxNSBAQAogICAgICAgICAgICAgaWYgY2xvc2Vfc291cmNlOgogICAgICAgICAgICAgICAgIHNvdXJjZS5jbG9zZSgpCiAKLSAgICAjIwotICAgICMgQ3JlYXRlcyBhIHRyZWUgaXRlcmF0b3IgZm9yIHRoZSByb290IGVsZW1lbnQuICBUaGUgaXRlcmF0b3IgbG9vcHMKLSAgICAjIG92ZXIgYWxsIGVsZW1lbnRzIGluIHRoaXMgdHJlZSwgaW4gZG9jdW1lbnQgb3JkZXIuCi0gICAgIwotICAgICMgQHBhcmFtIHRhZyBXaGF0IHRhZ3MgdG8gbG9vayBmb3IgKGRlZmF1bHQgaXMgdG8gcmV0dXJuIGFsbCBlbGVtZW50cykKLSAgICAjIEByZXR1cm4gQW4gaXRlcmF0b3IuCi0gICAgIyBAZGVmcmV0dXJuIGl0ZXJhdG9yCi0KICAgICBkZWYgaXRlcihzZWxmLCB0YWc9Tm9uZSk6CisgICAgICAgICIiIkNyZWF0ZSBhbmQgcmV0dXJuIHRyZWUgaXRlcmF0b3IgZm9yIHRoZSByb290IGVsZW1lbnQuCisKKyAgICAgICAgVGhlIGl0ZXJhdG9yIGxvb3BzIG92ZXIgYWxsIGVsZW1lbnRzIGluIHRoaXMgdHJlZSwgaW4gZG9jdW1lbnQgb3JkZXIuCisKKyAgICAgICAgKnRhZyogaXMgYSBzdHJpbmcgd2l0aCB0aGUgdGFnIG5hbWUgdG8gaXRlcmF0ZSBvdmVyCisgICAgICAgIChkZWZhdWx0IGlzIHRvIHJldHVybiBhbGwgZWxlbWVudHMpLgorCisgICAgICAgICIiIgogICAgICAgICAjIGFzc2VydCBzZWxmLl9yb290IGlzIG5vdCBOb25lCiAgICAgICAgIHJldHVybiBzZWxmLl9yb290Lml0ZXIodGFnKQogCkBAIC02OTEsMTUgKzYzMCwxNyBAQAogICAgICAgICApCiAgICAgICAgIHJldHVybiBsaXN0KHNlbGYuaXRlcih0YWcpKQogCi0gICAgIyMKLSAgICAjIFNhbWUgYXMgZ2V0cm9vdCgpLmZpbmQocGF0aCksIHN0YXJ0aW5nIGF0IHRoZSByb290IG9mIHRoZSB0cmVlLgotICAgICMKLSAgICAjIEBwYXJhbSBwYXRoIFdoYXQgZWxlbWVudCB0byBsb29rIGZvci4KLSAgICAjIEBrZXlwYXJhbSBuYW1lc3BhY2VzIE9wdGlvbmFsIG5hbWVzcGFjZSBwcmVmaXggbWFwLgotICAgICMgQHJldHVybiBUaGUgZmlyc3QgbWF0Y2hpbmcgZWxlbWVudCwgb3IgTm9uZSBpZiBubyBlbGVtZW50IHdhcyBmb3VuZC4KLSAgICAjIEBkZWZyZXR1cm4gRWxlbWVudCBvciBOb25lCi0KICAgICBkZWYgZmluZChzZWxmLCBwYXRoLCBuYW1lc3BhY2VzPU5vbmUpOgorICAgICAgICAiIiJGaW5kIGZpcnN0IG1hdGNoaW5nIGVsZW1lbnQgYnkgdGFnIG5hbWUgb3IgcGF0aC4KKworICAgICAgICBTYW1lIGFzIGdldHJvb3QoKS5maW5kKHBhdGgpLCB3aGljaCBpcyBFbGVtZW50LmZpbmQoKQorCisgICAgICAgICpwYXRoKiBpcyBhIHN0cmluZyBoYXZpbmcgZWl0aGVyIGFuIGVsZW1lbnQgdGFnIG9yIGFuIFhQYXRoLAorICAgICAgICAqbmFtZXNwYWNlcyogaXMgYW4gb3B0aW9uYWwgbWFwcGluZyBmcm9tIG5hbWVzcGFjZSBwcmVmaXggdG8gZnVsbCBuYW1lLgorCisgICAgICAgIFJldHVybiB0aGUgZmlyc3QgbWF0Y2hpbmcgZWxlbWVudCwgb3IgTm9uZSBpZiBubyBlbGVtZW50IHdhcyBmb3VuZC4KKworICAgICAgICAiIiIKICAgICAgICAgIyBhc3NlcnQgc2VsZi5fcm9vdCBpcyBub3QgTm9uZQogICAgICAgICBpZiBwYXRoWzoxXSA9PSAiLyI6CiAgICAgICAgICAgICBwYXRoID0gIi4iICsgcGF0aApAQCAtNzExLDE5ICs2NTIsMTcgQEAKICAgICAgICAgICAgICAgICApCiAgICAgICAgIHJldHVybiBzZWxmLl9yb290LmZpbmQocGF0aCwgbmFtZXNwYWNlcykKIAotICAgICMjCi0gICAgIyBTYW1lIGFzIGdldHJvb3QoKS5maW5kdGV4dChwYXRoKSwgc3RhcnRpbmcgYXQgdGhlIHJvb3Qgb2YgdGhlIHRyZWUuCi0gICAgIwotICAgICMgQHBhcmFtIHBhdGggV2hhdCBlbGVtZW50IHRvIGxvb2sgZm9yLgotICAgICMgQHBhcmFtIGRlZmF1bHQgV2hhdCB0byByZXR1cm4gaWYgdGhlIGVsZW1lbnQgd2FzIG5vdCBmb3VuZC4KLSAgICAjIEBrZXlwYXJhbSBuYW1lc3BhY2VzIE9wdGlvbmFsIG5hbWVzcGFjZSBwcmVmaXggbWFwLgotICAgICMgQHJldHVybiBUaGUgdGV4dCBjb250ZW50IG9mIHRoZSBmaXJzdCBtYXRjaGluZyBlbGVtZW50LCBvciB0aGUKLSAgICAjICAgICBkZWZhdWx0IHZhbHVlIG5vIGVsZW1lbnQgd2FzIGZvdW5kLiAgTm90ZSB0aGF0IGlmIHRoZSBlbGVtZW50Ci0gICAgIyAgICAgaXMgZm91bmQsIGJ1dCBoYXMgbm8gdGV4dCBjb250ZW50LCB0aGlzIG1ldGhvZCByZXR1cm5zIGFuCi0gICAgIyAgICAgZW1wdHkgc3RyaW5nLgotICAgICMgQGRlZnJldHVybiBzdHJpbmcKLQogICAgIGRlZiBmaW5kdGV4dChzZWxmLCBwYXRoLCBkZWZhdWx0PU5vbmUsIG5hbWVzcGFjZXM9Tm9uZSk6CisgICAgICAgICIiIkZpbmQgZmlyc3QgbWF0Y2hpbmcgZWxlbWVudCBieSB0YWcgbmFtZSBvciBwYXRoLgorCisgICAgICAgIFNhbWUgYXMgZ2V0cm9vdCgpLmZpbmR0ZXh0KHBhdGgpLCAgd2hpY2ggaXMgRWxlbWVudC5maW5kdGV4dCgpCisKKyAgICAgICAgKnBhdGgqIGlzIGEgc3RyaW5nIGhhdmluZyBlaXRoZXIgYW4gZWxlbWVudCB0YWcgb3IgYW4gWFBhdGgsCisgICAgICAgICpuYW1lc3BhY2VzKiBpcyBhbiBvcHRpb25hbCBtYXBwaW5nIGZyb20gbmFtZXNwYWNlIHByZWZpeCB0byBmdWxsIG5hbWUuCisKKyAgICAgICAgUmV0dXJuIHRoZSBmaXJzdCBtYXRjaGluZyBlbGVtZW50LCBvciBOb25lIGlmIG5vIGVsZW1lbnQgd2FzIGZvdW5kLgorCisgICAgICAgICIiIgogICAgICAgICAjIGFzc2VydCBzZWxmLl9yb290IGlzIG5vdCBOb25lCiAgICAgICAgIGlmIHBhdGhbOjFdID09ICIvIjoKICAgICAgICAgICAgIHBhdGggPSAiLiIgKyBwYXRoCkBAIC03MzUsMTYgKzY3NCwxNyBAQAogICAgICAgICAgICAgICAgICkKICAgICAgICAgcmV0dXJuIHNlbGYuX3Jvb3QuZmluZHRleHQocGF0aCwgZGVmYXVsdCwgbmFtZXNwYWNlcykKIAotICAgICMjCi0gICAgIyBTYW1lIGFzIGdldHJvb3QoKS5maW5kYWxsKHBhdGgpLCBzdGFydGluZyBhdCB0aGUgcm9vdCBvZiB0aGUgdHJlZS4KLSAgICAjCi0gICAgIyBAcGFyYW0gcGF0aCBXaGF0IGVsZW1lbnQgdG8gbG9vayBmb3IuCi0gICAgIyBAa2V5cGFyYW0gbmFtZXNwYWNlcyBPcHRpb25hbCBuYW1lc3BhY2UgcHJlZml4IG1hcC4KLSAgICAjIEByZXR1cm4gQSBsaXN0IG9yIGl0ZXJhdG9yIGNvbnRhaW5pbmcgYWxsIG1hdGNoaW5nIGVsZW1lbnRzLAotICAgICMgICAgaW4gZG9jdW1lbnQgb3JkZXIuCi0gICAgIyBAZGVmcmV0dXJuIGxpc3Qgb2YgRWxlbWVudCBpbnN0YW5jZXMKLQogICAgIGRlZiBmaW5kYWxsKHNlbGYsIHBhdGgsIG5hbWVzcGFjZXM9Tm9uZSk6CisgICAgICAgICIiIkZpbmQgYWxsIG1hdGNoaW5nIHN1YmVsZW1lbnRzIGJ5IHRhZyBuYW1lIG9yIHBhdGguCisKKyAgICAgICAgU2FtZSBhcyBnZXRyb290KCkuZmluZGFsbChwYXRoKSwgd2hpY2ggaXMgRWxlbWVudC5maW5kYWxsKCkuCisKKyAgICAgICAgKnBhdGgqIGlzIGEgc3RyaW5nIGhhdmluZyBlaXRoZXIgYW4gZWxlbWVudCB0YWcgb3IgYW4gWFBhdGgsCisgICAgICAgICpuYW1lc3BhY2VzKiBpcyBhbiBvcHRpb25hbCBtYXBwaW5nIGZyb20gbmFtZXNwYWNlIHByZWZpeCB0byBmdWxsIG5hbWUuCisKKyAgICAgICAgUmV0dXJuIGxpc3QgY29udGFpbmluZyBhbGwgbWF0Y2hpbmcgZWxlbWVudHMgaW4gZG9jdW1lbnQgb3JkZXIuCisKKyAgICAgICAgIiIiCiAgICAgICAgICMgYXNzZXJ0IHNlbGYuX3Jvb3QgaXMgbm90IE5vbmUKICAgICAgICAgaWYgcGF0aFs6MV0gPT0gIi8iOgogICAgICAgICAgICAgcGF0aCA9ICIuIiArIHBhdGgKQEAgLTc1NiwxNyArNjk2LDE3IEBACiAgICAgICAgICAgICAgICAgKQogICAgICAgICByZXR1cm4gc2VsZi5fcm9vdC5maW5kYWxsKHBhdGgsIG5hbWVzcGFjZXMpCiAKLSAgICAjIwotICAgICMgRmluZHMgYWxsIG1hdGNoaW5nIHN1YmVsZW1lbnRzLCBieSB0YWcgbmFtZSBvciBwYXRoLgotICAgICMgU2FtZSBhcyBnZXRyb290KCkuaXRlcmZpbmQocGF0aCkuCi0gICAgIwotICAgICMgQHBhcmFtIHBhdGggV2hhdCBlbGVtZW50IHRvIGxvb2sgZm9yLgotICAgICMgQGtleXBhcmFtIG5hbWVzcGFjZXMgT3B0aW9uYWwgbmFtZXNwYWNlIHByZWZpeCBtYXAuCi0gICAgIyBAcmV0dXJuIEFuIGl0ZXJhdG9yIG9yIHNlcXVlbmNlIGNvbnRhaW5pbmcgYWxsIG1hdGNoaW5nIGVsZW1lbnRzLAotICAgICMgICAgaW4gZG9jdW1lbnQgb3JkZXIuCi0gICAgIyBAZGVmcmV0dXJuIGEgZ2VuZXJhdGVkIHNlcXVlbmNlIG9mIEVsZW1lbnQgaW5zdGFuY2VzCi0KICAgICBkZWYgaXRlcmZpbmQoc2VsZiwgcGF0aCwgbmFtZXNwYWNlcz1Ob25lKToKKyAgICAgICAgIiIiRmluZCBhbGwgbWF0Y2hpbmcgc3ViZWxlbWVudHMgYnkgdGFnIG5hbWUgb3IgcGF0aC4KKworICAgICAgICBTYW1lIGFzIGdldHJvb3QoKS5pdGVyZmluZChwYXRoKSwgd2hpY2ggaXMgZWxlbWVudC5pdGVyZmluZCgpCisKKyAgICAgICAgKnBhdGgqIGlzIGEgc3RyaW5nIGhhdmluZyBlaXRoZXIgYW4gZWxlbWVudCB0YWcgb3IgYW4gWFBhdGgsCisgICAgICAgICpuYW1lc3BhY2VzKiBpcyBhbiBvcHRpb25hbCBtYXBwaW5nIGZyb20gbmFtZXNwYWNlIHByZWZpeCB0byBmdWxsIG5hbWUuCisKKyAgICAgICAgUmV0dXJuIGFuIGl0ZXJhYmxlIHlpZWxkaW5nIGFsbCBtYXRjaGluZyBlbGVtZW50cyBpbiBkb2N1bWVudCBvcmRlci4KKworICAgICAgICAiIiIKICAgICAgICAgIyBhc3NlcnQgc2VsZi5fcm9vdCBpcyBub3QgTm9uZQogICAgICAgICBpZiBwYXRoWzoxXSA9PSAiLyI6CiAgICAgICAgICAgICBwYXRoID0gIi4iICsgcGF0aApAQCAtNzc4LDI2ICs3MTgsMzUgQEAKICAgICAgICAgICAgICAgICApCiAgICAgICAgIHJldHVybiBzZWxmLl9yb290Lml0ZXJmaW5kKHBhdGgsIG5hbWVzcGFjZXMpCiAKLSAgICAjIwotICAgICMgV3JpdGVzIHRoZSBlbGVtZW50IHRyZWUgdG8gYSBmaWxlLCBhcyBYTUwuCi0gICAgIwotICAgICMgQGRlZiB3cml0ZShmaWxlLCAqKm9wdGlvbnMpCi0gICAgIyBAcGFyYW0gZmlsZSBBIGZpbGUgbmFtZSwgb3IgYSBmaWxlIG9iamVjdCBvcGVuZWQgZm9yIHdyaXRpbmcuCi0gICAgIyBAcGFyYW0gKipvcHRpb25zIE9wdGlvbnMsIGdpdmVuIGFzIGtleXdvcmQgYXJndW1lbnRzLgotICAgICMgQGtleXBhcmFtIGVuY29kaW5nIE9wdGlvbmFsIG91dHB1dCBlbmNvZGluZyAoZGVmYXVsdCBpcyBVUy1BU0NJSSkuCi0gICAgIyAgICAgVXNlICJ1bmljb2RlIiB0byByZXR1cm4gYSBVbmljb2RlIHN0cmluZy4KLSAgICAjIEBrZXlwYXJhbSB4bWxfZGVjbGFyYXRpb24gQ29udHJvbHMgaWYgYW4gWE1MIGRlY2xhcmF0aW9uIHNob3VsZAotICAgICMgICAgIGJlIGFkZGVkIHRvIHRoZSBmaWxlLiAgVXNlIEZhbHNlIGZvciBuZXZlciwgVHJ1ZSBmb3IgYWx3YXlzLAotICAgICMgICAgIE5vbmUgZm9yIG9ubHkgaWYgbm90IFVTLUFTQ0lJIG9yIFVURi04IG9yIFVuaWNvZGUuICBOb25lIGlzIGRlZmF1bHQuCi0gICAgIyBAa2V5cGFyYW0gZGVmYXVsdF9uYW1lc3BhY2UgU2V0cyB0aGUgZGVmYXVsdCBYTUwgbmFtZXNwYWNlIChmb3IgInhtbG5zIikuCi0gICAgIyBAa2V5cGFyYW0gbWV0aG9kIE9wdGlvbmFsIG91dHB1dCBtZXRob2QgKCJ4bWwiLCAiaHRtbCIsICJ0ZXh0IiBvcgotICAgICMgICAgICJjMTRuIjsgZGVmYXVsdCBpcyAieG1sIikuCi0KICAgICBkZWYgd3JpdGUoc2VsZiwgZmlsZV9vcl9maWxlbmFtZSwKICAgICAgICAgICAgICAgZW5jb2Rpbmc9Tm9uZSwKICAgICAgICAgICAgICAgeG1sX2RlY2xhcmF0aW9uPU5vbmUsCiAgICAgICAgICAgICAgIGRlZmF1bHRfbmFtZXNwYWNlPU5vbmUsCi0gICAgICAgICAgICAgIG1ldGhvZD1Ob25lKToKKyAgICAgICAgICAgICAgbWV0aG9kPU5vbmUsICosCisgICAgICAgICAgICAgIHNob3J0X2VtcHR5X2VsZW1lbnRzPVRydWUpOgorICAgICAgICAiIiJXcml0ZSBlbGVtZW50IHRyZWUgdG8gYSBmaWxlIGFzIFhNTC4KKworICAgICAgICBBcmd1bWVudHM6CisgICAgICAgICAgKmZpbGVfb3JfZmlsZW5hbWUqIC0tIGZpbGUgbmFtZSBvciBhIGZpbGUgb2JqZWN0IG9wZW5lZCBmb3Igd3JpdGluZworCisgICAgICAgICAgKmVuY29kaW5nKiAtLSB0aGUgb3V0cHV0IGVuY29kaW5nIChkZWZhdWx0OiBVUy1BU0NJSSkKKworICAgICAgICAgICp4bWxfZGVjbGFyYXRpb24qIC0tIGJvb2wgaW5kaWNhdGluZyBpZiBhbiBYTUwgZGVjbGFyYXRpb24gc2hvdWxkIGJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkZWQgdG8gdGhlIG91dHB1dC4gSWYgTm9uZSwgYW4gWE1MIGRlY2xhcmF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgYWRkZWQgaWYgZW5jb2RpbmcgSVMgTk9UIGVpdGhlciBvZjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUy1BU0NJSSwgVVRGLTgsIG9yIFVuaWNvZGUKKworICAgICAgICAgICpkZWZhdWx0X25hbWVzcGFjZSogLS0gc2V0cyB0aGUgZGVmYXVsdCBYTUwgbmFtZXNwYWNlIChmb3IgInhtbG5zIikKKworICAgICAgICAgICptZXRob2QqIC0tIGVpdGhlciAieG1sIiAoZGVmYXVsdCksICJodG1sLCAidGV4dCIsIG9yICJjMTRuIgorCisgICAgICAgICAgKnNob3J0X2VtcHR5X2VsZW1lbnRzKiAtLSBjb250cm9scyB0aGUgZm9ybWF0dGluZyBvZiBlbGVtZW50cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCBjb250YWluIG5vIGNvbnRlbnQuIElmIFRydWUgKGRlZmF1bHQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGV5IGFyZSBlbWl0dGVkIGFzIGEgc2luZ2xlIHNlbGYtY2xvc2VkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWcsIG90aGVyd2lzZSB0aGV5IGFyZSBlbWl0dGVkIGFzIGEgcGFpcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Ygc3RhcnQvZW5kIHRhZ3MKKworICAgICAgICAiIiIKICAgICAgICAgaWYgbm90IG1ldGhvZDoKICAgICAgICAgICAgIG1ldGhvZCA9ICJ4bWwiCiAgICAgICAgIGVsaWYgbWV0aG9kIG5vdCBpbiBfc2VyaWFsaXplOgpAQCAtODA3LDE0ICs3NTYsMTMgQEAKICAgICAgICAgICAgICAgICBlbmNvZGluZyA9ICJ1dGYtOCIKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgZW5jb2RpbmcgPSAidXMtYXNjaWkiCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBlbmNvZGluZyA9IGVuY29kaW5nLmxvd2VyKCkKLSAgICAgICAgd2l0aCBfZ2V0X3dyaXRlcihmaWxlX29yX2ZpbGVuYW1lLCBlbmNvZGluZykgYXMgd3JpdGU6CisgICAgICAgIGVuY19sb3dlciA9IGVuY29kaW5nLmxvd2VyKCkKKyAgICAgICAgd2l0aCBfZ2V0X3dyaXRlcihmaWxlX29yX2ZpbGVuYW1lLCBlbmNfbG93ZXIpIGFzIHdyaXRlOgogICAgICAgICAgICAgaWYgbWV0aG9kID09ICJ4bWwiIGFuZCAoeG1sX2RlY2xhcmF0aW9uIG9yCiAgICAgICAgICAgICAgICAgICAgICh4bWxfZGVjbGFyYXRpb24gaXMgTm9uZSBhbmQKLSAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nIG5vdCBpbiAoInV0Zi04IiwgInVzLWFzY2lpIiwgInVuaWNvZGUiKSkpOgorICAgICAgICAgICAgICAgICAgICAgZW5jX2xvd2VyIG5vdCBpbiAoInV0Zi04IiwgInVzLWFzY2lpIiwgInVuaWNvZGUiKSkpOgogICAgICAgICAgICAgICAgIGRlY2xhcmVkX2VuY29kaW5nID0gZW5jb2RpbmcKLSAgICAgICAgICAgICAgICBpZiBlbmNvZGluZyA9PSAidW5pY29kZSI6CisgICAgICAgICAgICAgICAgaWYgZW5jX2xvd2VyID09ICJ1bmljb2RlIjoKICAgICAgICAgICAgICAgICAgICAgIyBSZXRyaWV2ZSB0aGUgZGVmYXVsdCBlbmNvZGluZyBmb3IgdGhlIHhtbCBkZWNsYXJhdGlvbgogICAgICAgICAgICAgICAgICAgICBpbXBvcnQgbG9jYWxlCiAgICAgICAgICAgICAgICAgICAgIGRlY2xhcmVkX2VuY29kaW5nID0gbG9jYWxlLmdldHByZWZlcnJlZGVuY29kaW5nKCkKQEAgLTgyNSw3ICs3NzMsOCBAQAogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBxbmFtZXMsIG5hbWVzcGFjZXMgPSBfbmFtZXNwYWNlcyhzZWxmLl9yb290LCBkZWZhdWx0X25hbWVzcGFjZSkKICAgICAgICAgICAgICAgICBzZXJpYWxpemUgPSBfc2VyaWFsaXplW21ldGhvZF0KLSAgICAgICAgICAgICAgICBzZXJpYWxpemUod3JpdGUsIHNlbGYuX3Jvb3QsIHFuYW1lcywgbmFtZXNwYWNlcykKKyAgICAgICAgICAgICAgICBzZXJpYWxpemUod3JpdGUsIHNlbGYuX3Jvb3QsIHFuYW1lcywgbmFtZXNwYWNlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnRfZW1wdHlfZWxlbWVudHM9c2hvcnRfZW1wdHlfZWxlbWVudHMpCiAKICAgICBkZWYgd3JpdGVfYzE0bihzZWxmLCBmaWxlKToKICAgICAgICAgIyBseG1sLmV0cmVlIGNvbXBhdGliaWxpdHkuICB1c2Ugb3V0cHV0IG1ldGhvZCBpbnN0ZWFkCkBAIC05NDcsNyArODk2LDggQEAKICAgICAgICAgICAgIGFkZF9xbmFtZSh0ZXh0LnRleHQpCiAgICAgcmV0dXJuIHFuYW1lcywgbmFtZXNwYWNlcwogCi1kZWYgX3NlcmlhbGl6ZV94bWwod3JpdGUsIGVsZW0sIHFuYW1lcywgbmFtZXNwYWNlcyk6CitkZWYgX3NlcmlhbGl6ZV94bWwod3JpdGUsIGVsZW0sIHFuYW1lcywgbmFtZXNwYWNlcywKKyAgICAgICAgICAgICAgICAgICBzaG9ydF9lbXB0eV9lbGVtZW50cywgKiprd2FyZ3MpOgogICAgIHRhZyA9IGVsZW0udGFnCiAgICAgdGV4dCA9IGVsZW0udGV4dAogICAgIGlmIHRhZyBpcyBDb21tZW50OgpAQCAtOTYwLDcgKzkxMCw4IEBACiAgICAgICAgICAgICBpZiB0ZXh0OgogICAgICAgICAgICAgICAgIHdyaXRlKF9lc2NhcGVfY2RhdGEodGV4dCkpCiAgICAgICAgICAgICBmb3IgZSBpbiBlbGVtOgotICAgICAgICAgICAgICAgIF9zZXJpYWxpemVfeG1sKHdyaXRlLCBlLCBxbmFtZXMsIE5vbmUpCisgICAgICAgICAgICAgICAgX3NlcmlhbGl6ZV94bWwod3JpdGUsIGUsIHFuYW1lcywgTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG9ydF9lbXB0eV9lbGVtZW50cz1zaG9ydF9lbXB0eV9lbGVtZW50cykKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHdyaXRlKCI8IiArIHRhZykKICAgICAgICAgICAgIGl0ZW1zID0gbGlzdChlbGVtLml0ZW1zKCkpCkBAIC05ODIsMTIgKzkzMywxMyBAQAogICAgICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICAgICAgdiA9IF9lc2NhcGVfYXR0cmliKHYpCiAgICAgICAgICAgICAgICAgICAgIHdyaXRlKCIgJXM9XCIlc1wiIiAlIChxbmFtZXNba10sIHYpKQotICAgICAgICAgICAgaWYgdGV4dCBvciBsZW4oZWxlbSk6CisgICAgICAgICAgICBpZiB0ZXh0IG9yIGxlbihlbGVtKSBvciBub3Qgc2hvcnRfZW1wdHlfZWxlbWVudHM6CiAgICAgICAgICAgICAgICAgd3JpdGUoIj4iKQogICAgICAgICAgICAgICAgIGlmIHRleHQ6CiAgICAgICAgICAgICAgICAgICAgIHdyaXRlKF9lc2NhcGVfY2RhdGEodGV4dCkpCiAgICAgICAgICAgICAgICAgZm9yIGUgaW4gZWxlbToKLSAgICAgICAgICAgICAgICAgICAgX3NlcmlhbGl6ZV94bWwod3JpdGUsIGUsIHFuYW1lcywgTm9uZSkKKyAgICAgICAgICAgICAgICAgICAgX3NlcmlhbGl6ZV94bWwod3JpdGUsIGUsIHFuYW1lcywgTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnRfZW1wdHlfZWxlbWVudHM9c2hvcnRfZW1wdHlfZWxlbWVudHMpCiAgICAgICAgICAgICAgICAgd3JpdGUoIjwvIiArIHRhZyArICI+IikKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgd3JpdGUoIiAvPiIpCkBAIC0xMDAyLDcgKzk1NCw3IEBACiBleGNlcHQgTmFtZUVycm9yOgogICAgIHBhc3MKIAotZGVmIF9zZXJpYWxpemVfaHRtbCh3cml0ZSwgZWxlbSwgcW5hbWVzLCBuYW1lc3BhY2VzKToKK2RlZiBfc2VyaWFsaXplX2h0bWwod3JpdGUsIGVsZW0sIHFuYW1lcywgbmFtZXNwYWNlcywgKiprd2FyZ3MpOgogICAgIHRhZyA9IGVsZW0udGFnCiAgICAgdGV4dCA9IGVsZW0udGV4dAogICAgIGlmIHRhZyBpcyBDb21tZW50OgpAQCAtMTA2NiwxOCArMTAxOCwxOSBAQAogIyAgICJjMTRuIjogX3NlcmlhbGl6ZV9jMTRuLAogfQogCi0jIwotIyBSZWdpc3RlcnMgYSBuYW1lc3BhY2UgcHJlZml4LiAgVGhlIHJlZ2lzdHJ5IGlzIGdsb2JhbCwgYW5kIGFueQotIyBleGlzdGluZyBtYXBwaW5nIGZvciBlaXRoZXIgdGhlIGdpdmVuIHByZWZpeCBvciB0aGUgbmFtZXNwYWNlIFVSSQotIyB3aWxsIGJlIHJlbW92ZWQuCi0jCi0jIEBwYXJhbSBwcmVmaXggTmFtZXNwYWNlIHByZWZpeC4KLSMgQHBhcmFtIHVyaSBOYW1lc3BhY2UgdXJpLiAgVGFncyBhbmQgYXR0cmlidXRlcyBpbiB0aGlzIG5hbWVzcGFjZQotIyAgICAgd2lsbCBiZSBzZXJpYWxpemVkIHdpdGggdGhlIGdpdmVuIHByZWZpeCwgaWYgYXQgYWxsIHBvc3NpYmxlLgotIyBAZXhjZXB0aW9uIFZhbHVlRXJyb3IgSWYgdGhlIHByZWZpeCBpcyByZXNlcnZlZCwgb3IgaXMgb3RoZXJ3aXNlCi0jICAgICBpbnZhbGlkLgogCiBkZWYgcmVnaXN0ZXJfbmFtZXNwYWNlKHByZWZpeCwgdXJpKToKKyAgICAiIiJSZWdpc3RlciBhIG5hbWVzcGFjZSBwcmVmaXguCisKKyAgICBUaGUgcmVnaXN0cnkgaXMgZ2xvYmFsLCBhbmQgYW55IGV4aXN0aW5nIG1hcHBpbmcgZm9yIGVpdGhlciB0aGUKKyAgICBnaXZlbiBwcmVmaXggb3IgdGhlIG5hbWVzcGFjZSBVUkkgd2lsbCBiZSByZW1vdmVkLgorCisgICAgKnByZWZpeCogaXMgdGhlIG5hbWVzcGFjZSBwcmVmaXgsICp1cmkqIGlzIGEgbmFtZXNwYWNlIHVyaS4gVGFncyBhbmQKKyAgICBhdHRyaWJ1dGVzIGluIHRoaXMgbmFtZXNwYWNlIHdpbGwgYmUgc2VyaWFsaXplZCB3aXRoIHByZWZpeCBpZiBwb3NzaWJsZS4KKworICAgIFZhbHVlRXJyb3IgaXMgcmFpc2VkIGlmIHByZWZpeCBpcyByZXNlcnZlZCBvciBpcyBpbnZhbGlkLgorCisgICAgIiIiCiAgICAgaWYgcmUubWF0Y2goIm5zXGQrJCIsIHByZWZpeCk6CiAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIlByZWZpeCBmb3JtYXQgcmVzZXJ2ZWQgZm9yIGludGVybmFsIHVzZSIpCiAgICAgZm9yIGssIHYgaW4gbGlzdChfbmFtZXNwYWNlX21hcC5pdGVtcygpKToKQEAgLTExNTMsNDAgKzExMDYsMjcgQEAKIAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0jIwotIyBHZW5lcmF0ZXMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW4gWE1MIGVsZW1lbnQsIGluY2x1ZGluZyBhbGwKLSMgc3ViZWxlbWVudHMuICBJZiBlbmNvZGluZyBpcyAidW5pY29kZSIsIHRoZSByZXR1cm4gdHlwZSBpcyBhIHN0cmluZzsKLSMgb3RoZXJ3aXNlIGl0IGlzIGEgYnl0ZXMgYXJyYXkuCi0jCi0jIEBwYXJhbSBlbGVtZW50IEFuIEVsZW1lbnQgaW5zdGFuY2UuCi0jIEBrZXlwYXJhbSBlbmNvZGluZyBPcHRpb25hbCBvdXRwdXQgZW5jb2RpbmcgKGRlZmF1bHQgaXMgVVMtQVNDSUkpLgotIyAgICAgVXNlICJ1bmljb2RlIiB0byByZXR1cm4gYSBVbmljb2RlIHN0cmluZy4KLSMgQGtleXBhcmFtIG1ldGhvZCBPcHRpb25hbCBvdXRwdXQgbWV0aG9kICgieG1sIiwgImh0bWwiLCAidGV4dCIgb3IKLSMgICAgICJjMTRuIjsgZGVmYXVsdCBpcyAieG1sIikuCi0jIEByZXR1cm4gQW4gKG9wdGlvbmFsbHkpIGVuY29kZWQgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFhNTCBkYXRhLgotIyBAZGVmcmV0dXJuIHN0cmluZworZGVmIHRvc3RyaW5nKGVsZW1lbnQsIGVuY29kaW5nPU5vbmUsIG1ldGhvZD1Ob25lLCAqLAorICAgICAgICAgICAgIHNob3J0X2VtcHR5X2VsZW1lbnRzPVRydWUpOgorICAgICIiIkdlbmVyYXRlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBYTUwgZWxlbWVudC4KIAotZGVmIHRvc3RyaW5nKGVsZW1lbnQsIGVuY29kaW5nPU5vbmUsIG1ldGhvZD1Ob25lKToKKyAgICBBbGwgc3ViZWxlbWVudHMgYXJlIGluY2x1ZGVkLiAgSWYgZW5jb2RpbmcgaXMgInVuaWNvZGUiLCBhIHN0cmluZworICAgIGlzIHJldHVybmVkLiBPdGhlcndpc2UgYSBieXRlc3RyaW5nIGlzIHJldHVybmVkLgorCisgICAgKmVsZW1lbnQqIGlzIGFuIEVsZW1lbnQgaW5zdGFuY2UsICplbmNvZGluZyogaXMgYW4gb3B0aW9uYWwgb3V0cHV0CisgICAgZW5jb2RpbmcgZGVmYXVsdGluZyB0byBVUy1BU0NJSSwgKm1ldGhvZCogaXMgYW4gb3B0aW9uYWwgb3V0cHV0IHdoaWNoIGNhbgorICAgIGJlIG9uZSBvZiAieG1sIiAoZGVmYXVsdCksICJodG1sIiwgInRleHQiIG9yICJjMTRuIi4KKworICAgIFJldHVybnMgYW4gKG9wdGlvbmFsbHkpIGVuY29kZWQgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFhNTCBkYXRhLgorCisgICAgIiIiCiAgICAgc3RyZWFtID0gaW8uU3RyaW5nSU8oKSBpZiBlbmNvZGluZyA9PSAndW5pY29kZScgZWxzZSBpby5CeXRlc0lPKCkKLSAgICBFbGVtZW50VHJlZShlbGVtZW50KS53cml0ZShzdHJlYW0sIGVuY29kaW5nLCBtZXRob2Q9bWV0aG9kKQorICAgIEVsZW1lbnRUcmVlKGVsZW1lbnQpLndyaXRlKHN0cmVhbSwgZW5jb2RpbmcsIG1ldGhvZD1tZXRob2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnRfZW1wdHlfZWxlbWVudHM9c2hvcnRfZW1wdHlfZWxlbWVudHMpCiAgICAgcmV0dXJuIHN0cmVhbS5nZXR2YWx1ZSgpCiAKLSMjCi0jIEdlbmVyYXRlcyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhbiBYTUwgZWxlbWVudCwgaW5jbHVkaW5nIGFsbAotIyBzdWJlbGVtZW50cy4KLSMKLSMgQHBhcmFtIGVsZW1lbnQgQW4gRWxlbWVudCBpbnN0YW5jZS4KLSMgQGtleXBhcmFtIGVuY29kaW5nIE9wdGlvbmFsIG91dHB1dCBlbmNvZGluZyAoZGVmYXVsdCBpcyBVUy1BU0NJSSkuCi0jICAgICBVc2UgInVuaWNvZGUiIHRvIHJldHVybiBhIFVuaWNvZGUgc3RyaW5nLgotIyBAa2V5cGFyYW0gbWV0aG9kIE9wdGlvbmFsIG91dHB1dCBtZXRob2QgKCJ4bWwiLCAiaHRtbCIsICJ0ZXh0IiBvcgotIyAgICAgImMxNG4iOyBkZWZhdWx0IGlzICJ4bWwiKS4KLSMgQHJldHVybiBBIHNlcXVlbmNlIG9iamVjdCBjb250YWluaW5nIHRoZSBYTUwgZGF0YS4KLSMgQGRlZnJldHVybiBzZXF1ZW5jZQotIyBAc2luY2UgMS4zCi0KIGNsYXNzIF9MaXN0RGF0YVN0cmVhbShpby5CdWZmZXJlZElPQmFzZSk6Ci0gICAgIiIiIEFuIGF1eGlsaWFyeSBzdHJlYW0gYWNjdW11bGF0aW5nIGludG8gYSBsaXN0IHJlZmVyZW5jZQotICAgICIiIgorICAgICIiIkFuIGF1eGlsaWFyeSBzdHJlYW0gYWNjdW11bGF0aW5nIGludG8gYSBsaXN0IHJlZmVyZW5jZS4iIiIKICAgICBkZWYgX19pbml0X18oc2VsZiwgbHN0KToKICAgICAgICAgc2VsZi5sc3QgPSBsc3QKIApAQCAtMTIwMiwyMiArMTE0MiwyNSBAQAogICAgIGRlZiB0ZWxsKHNlbGYpOgogICAgICAgICByZXR1cm4gbGVuKHNlbGYubHN0KQogCi1kZWYgdG9zdHJpbmdsaXN0KGVsZW1lbnQsIGVuY29kaW5nPU5vbmUsIG1ldGhvZD1Ob25lKToKK2RlZiB0b3N0cmluZ2xpc3QoZWxlbWVudCwgZW5jb2Rpbmc9Tm9uZSwgbWV0aG9kPU5vbmUsICosCisgICAgICAgICAgICAgICAgIHNob3J0X2VtcHR5X2VsZW1lbnRzPVRydWUpOgogICAgIGxzdCA9IFtdCiAgICAgc3RyZWFtID0gX0xpc3REYXRhU3RyZWFtKGxzdCkKLSAgICBFbGVtZW50VHJlZShlbGVtZW50KS53cml0ZShzdHJlYW0sIGVuY29kaW5nLCBtZXRob2Q9bWV0aG9kKQorICAgIEVsZW1lbnRUcmVlKGVsZW1lbnQpLndyaXRlKHN0cmVhbSwgZW5jb2RpbmcsIG1ldGhvZD1tZXRob2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnRfZW1wdHlfZWxlbWVudHM9c2hvcnRfZW1wdHlfZWxlbWVudHMpCiAgICAgcmV0dXJuIGxzdAogCi0jIwotIyBXcml0ZXMgYW4gZWxlbWVudCB0cmVlIG9yIGVsZW1lbnQgc3RydWN0dXJlIHRvIHN5cy5zdGRvdXQuICBUaGlzCi0jIGZ1bmN0aW9uIHNob3VsZCBiZSB1c2VkIGZvciBkZWJ1Z2dpbmcgb25seS4KLSMgPHA+Ci0jIFRoZSBleGFjdCBvdXRwdXQgZm9ybWF0IGlzIGltcGxlbWVudGF0aW9uIGRlcGVuZGVudC4gIEluIHRoaXMKLSMgdmVyc2lvbiwgaXQncyB3cml0dGVuIGFzIGFuIG9yZGluYXJ5IFhNTCBmaWxlLgotIwotIyBAcGFyYW0gZWxlbSBBbiBlbGVtZW50IHRyZWUgb3IgYW4gaW5kaXZpZHVhbCBlbGVtZW50LgogCiBkZWYgZHVtcChlbGVtKToKKyAgICAiIiJXcml0ZSBlbGVtZW50IHRyZWUgb3IgZWxlbWVudCBzdHJ1Y3R1cmUgdG8gc3lzLnN0ZG91dC4KKworICAgIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIHVzZWQgZm9yIGRlYnVnZ2luZyBvbmx5LgorCisgICAgKmVsZW0qIGlzIGVpdGhlciBhbiBFbGVtZW50VHJlZSwgb3IgYSBzaW5nbGUgRWxlbWVudC4gIFRoZSBleGFjdCBvdXRwdXQKKyAgICBmb3JtYXQgaXMgaW1wbGVtZW50YXRpb24gZGVwZW5kZW50LiAgSW4gdGhpcyB2ZXJzaW9uLCBpdCdzIHdyaXR0ZW4gYXMgYW4KKyAgICBvcmRpbmFyeSBYTUwgZmlsZS4KKworICAgICIiIgogICAgICMgZGVidWdnaW5nCiAgICAgaWYgbm90IGlzaW5zdGFuY2UoZWxlbSwgRWxlbWVudFRyZWUpOgogICAgICAgICBlbGVtID0gRWxlbWVudFRyZWUoZWxlbSkKQEAgLTEyMjksMTQ0ICsxMTcyLDE4MCBAQAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBwYXJzaW5nCiAKLSMjCi0jIFBhcnNlcyBhbiBYTUwgZG9jdW1lbnQgaW50byBhbiBlbGVtZW50IHRyZWUuCi0jCi0jIEBwYXJhbSBzb3VyY2UgQSBmaWxlbmFtZSBvciBmaWxlIG9iamVjdCBjb250YWluaW5nIFhNTCBkYXRhLgotIyBAcGFyYW0gcGFyc2VyIEFuIG9wdGlvbmFsIHBhcnNlciBpbnN0YW5jZS4gIElmIG5vdCBnaXZlbiwgdGhlCi0jICAgICBzdGFuZGFyZCB7QGxpbmsgWE1MUGFyc2VyfSBwYXJzZXIgaXMgdXNlZC4KLSMgQHJldHVybiBBbiBFbGVtZW50VHJlZSBpbnN0YW5jZQogCiBkZWYgcGFyc2Uoc291cmNlLCBwYXJzZXI9Tm9uZSk6CisgICAgIiIiUGFyc2UgWE1MIGRvY3VtZW50IGludG8gZWxlbWVudCB0cmVlLgorCisgICAgKnNvdXJjZSogaXMgYSBmaWxlbmFtZSBvciBmaWxlIG9iamVjdCBjb250YWluaW5nIFhNTCBkYXRhLAorICAgICpwYXJzZXIqIGlzIGFuIG9wdGlvbmFsIHBhcnNlciBpbnN0YW5jZSBkZWZhdWx0aW5nIHRvIFhNTFBhcnNlci4KKworICAgIFJldHVybiBhbiBFbGVtZW50VHJlZSBpbnN0YW5jZS4KKworICAgICIiIgogICAgIHRyZWUgPSBFbGVtZW50VHJlZSgpCiAgICAgdHJlZS5wYXJzZShzb3VyY2UsIHBhcnNlcikKICAgICByZXR1cm4gdHJlZQogCi0jIwotIyBQYXJzZXMgYW4gWE1MIGRvY3VtZW50IGludG8gYW4gZWxlbWVudCB0cmVlIGluY3JlbWVudGFsbHksIGFuZCByZXBvcnRzCi0jIHdoYXQncyBnb2luZyBvbiB0byB0aGUgdXNlci4KLSMKLSMgQHBhcmFtIHNvdXJjZSBBIGZpbGVuYW1lIG9yIGZpbGUgb2JqZWN0IGNvbnRhaW5pbmcgWE1MIGRhdGEuCi0jIEBwYXJhbSBldmVudHMgQSBsaXN0IG9mIGV2ZW50cyB0byByZXBvcnQgYmFjay4gIElmIG9taXR0ZWQsIG9ubHkgImVuZCIKLSMgICAgIGV2ZW50cyBhcmUgcmVwb3J0ZWQuCi0jIEBwYXJhbSBwYXJzZXIgQW4gb3B0aW9uYWwgcGFyc2VyIGluc3RhbmNlLiAgSWYgbm90IGdpdmVuLCB0aGUKLSMgICAgIHN0YW5kYXJkIHtAbGluayBYTUxQYXJzZXJ9IHBhcnNlciBpcyB1c2VkLgotIyBAcmV0dXJuIEEgKGV2ZW50LCBlbGVtKSBpdGVyYXRvci4KIAogZGVmIGl0ZXJwYXJzZShzb3VyY2UsIGV2ZW50cz1Ob25lLCBwYXJzZXI9Tm9uZSk6CisgICAgIiIiSW5jcmVtZW50YWxseSBwYXJzZSBYTUwgZG9jdW1lbnQgaW50byBFbGVtZW50VHJlZS4KKworICAgIFRoaXMgY2xhc3MgYWxzbyByZXBvcnRzIHdoYXQncyBnb2luZyBvbiB0byB0aGUgdXNlciBiYXNlZCBvbiB0aGUKKyAgICAqZXZlbnRzKiBpdCBpcyBpbml0aWFsaXplZCB3aXRoLiAgVGhlIHN1cHBvcnRlZCBldmVudHMgYXJlIHRoZSBzdHJpbmdzCisgICAgInN0YXJ0IiwgImVuZCIsICJzdGFydC1ucyIgYW5kICJlbmQtbnMiICh0aGUgIm5zIiBldmVudHMgYXJlIHVzZWQgdG8gZ2V0CisgICAgZGV0YWlsZWQgbmFtZXNwYWNlIGluZm9ybWF0aW9uKS4gIElmICpldmVudHMqIGlzIG9taXR0ZWQsIG9ubHkKKyAgICAiZW5kIiBldmVudHMgYXJlIHJlcG9ydGVkLgorCisgICAgKnNvdXJjZSogaXMgYSBmaWxlbmFtZSBvciBmaWxlIG9iamVjdCBjb250YWluaW5nIFhNTCBkYXRhLCAqZXZlbnRzKiBpcworICAgIGEgbGlzdCBvZiBldmVudHMgdG8gcmVwb3J0IGJhY2ssICpwYXJzZXIqIGlzIGFuIG9wdGlvbmFsIHBhcnNlciBpbnN0YW5jZS4KKworICAgIFJldHVybnMgYW4gaXRlcmF0b3IgcHJvdmlkaW5nIChldmVudCwgZWxlbSkgcGFpcnMuCisKKyAgICAiIiIKICAgICBjbG9zZV9zb3VyY2UgPSBGYWxzZQogICAgIGlmIG5vdCBoYXNhdHRyKHNvdXJjZSwgInJlYWQiKToKICAgICAgICAgc291cmNlID0gb3Blbihzb3VyY2UsICJyYiIpCiAgICAgICAgIGNsb3NlX3NvdXJjZSA9IFRydWUKLSAgICBpZiBub3QgcGFyc2VyOgotICAgICAgICBwYXJzZXIgPSBYTUxQYXJzZXIodGFyZ2V0PVRyZWVCdWlsZGVyKCkpCi0gICAgcmV0dXJuIF9JdGVyUGFyc2VJdGVyYXRvcihzb3VyY2UsIGV2ZW50cywgcGFyc2VyLCBjbG9zZV9zb3VyY2UpCisgICAgdHJ5OgorICAgICAgICByZXR1cm4gX0l0ZXJQYXJzZUl0ZXJhdG9yKHNvdXJjZSwgZXZlbnRzLCBwYXJzZXIsIGNsb3NlX3NvdXJjZSkKKyAgICBleGNlcHQ6CisgICAgICAgIGlmIGNsb3NlX3NvdXJjZToKKyAgICAgICAgICAgIHNvdXJjZS5jbG9zZSgpCisgICAgICAgIHJhaXNlCisKKworY2xhc3MgWE1MUHVsbFBhcnNlcjoKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBldmVudHM9Tm9uZSwgKiwgX3BhcnNlcj1Ob25lKToKKyAgICAgICAgIyBUaGUgX3BhcnNlciBhcmd1bWVudCBpcyBmb3IgaW50ZXJuYWwgdXNlIG9ubHkgYW5kIG11c3Qgbm90IGJlIHJlbGllZAorICAgICAgICAjIHVwb24gaW4gdXNlciBjb2RlLiBJdCB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgcmVsZWFzZS4KKyAgICAgICAgIyBTZWUgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTE3NzQxIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICAgICAgIyBfZWxlbWVudHRyZWUuYyBleHBlY3RzIGEgbGlzdCwgbm90IGEgZGVxdWUKKyAgICAgICAgc2VsZi5fZXZlbnRzX3F1ZXVlID0gW10KKyAgICAgICAgc2VsZi5faW5kZXggPSAwCisgICAgICAgIHNlbGYuX3BhcnNlciA9IF9wYXJzZXIgb3IgWE1MUGFyc2VyKHRhcmdldD1UcmVlQnVpbGRlcigpKQorICAgICAgICAjIHdpcmUgdXAgdGhlIHBhcnNlciBmb3IgZXZlbnQgcmVwb3J0aW5nCisgICAgICAgIGlmIGV2ZW50cyBpcyBOb25lOgorICAgICAgICAgICAgZXZlbnRzID0gKCJlbmQiLCkKKyAgICAgICAgc2VsZi5fcGFyc2VyLl9zZXRldmVudHMoc2VsZi5fZXZlbnRzX3F1ZXVlLCBldmVudHMpCisKKyAgICBkZWYgZmVlZChzZWxmLCBkYXRhKToKKyAgICAgICAgIiIiRmVlZCBlbmNvZGVkIGRhdGEgdG8gcGFyc2VyLiIiIgorICAgICAgICBpZiBzZWxmLl9wYXJzZXIgaXMgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImZlZWQoKSBjYWxsZWQgYWZ0ZXIgZW5kIG9mIHN0cmVhbSIpCisgICAgICAgIGlmIGRhdGE6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5fcGFyc2VyLmZlZWQoZGF0YSkKKyAgICAgICAgICAgIGV4Y2VwdCBTeW50YXhFcnJvciBhcyBleGM6CisgICAgICAgICAgICAgICAgc2VsZi5fZXZlbnRzX3F1ZXVlLmFwcGVuZChleGMpCisKKyAgICBkZWYgX2Nsb3NlX2FuZF9yZXR1cm5fcm9vdChzZWxmKToKKyAgICAgICAgIyBpdGVycGFyc2UgbmVlZHMgdGhpcyB0byBzZXQgaXRzIHJvb3QgYXR0cmlidXRlIHByb3Blcmx5IDooCisgICAgICAgIHJvb3QgPSBzZWxmLl9wYXJzZXIuY2xvc2UoKQorICAgICAgICBzZWxmLl9wYXJzZXIgPSBOb25lCisgICAgICAgIHJldHVybiByb290CisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgICIiIkZpbmlzaCBmZWVkaW5nIGRhdGEgdG8gcGFyc2VyLgorCisgICAgICAgIFVubGlrZSBYTUxQYXJzZXIsIGRvZXMgbm90IHJldHVybiB0aGUgcm9vdCBlbGVtZW50LiBVc2UKKyAgICAgICAgcmVhZF9ldmVudHMoKSB0byBjb25zdW1lIGVsZW1lbnRzIGZyb20gWE1MUHVsbFBhcnNlci4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX2Nsb3NlX2FuZF9yZXR1cm5fcm9vdCgpCisKKyAgICBkZWYgcmVhZF9ldmVudHMoc2VsZik6CisgICAgICAgICIiIlJldHVybiBhbiBpdGVyYXRvciBvdmVyIGN1cnJlbnRseSBhdmFpbGFibGUgKGV2ZW50LCBlbGVtKSBwYWlycy4KKworICAgICAgICBFdmVudHMgYXJlIGNvbnN1bWVkIGZyb20gdGhlIGludGVybmFsIGV2ZW50IHF1ZXVlIGFzIHRoZXkgYXJlCisgICAgICAgIHJldHJpZXZlZCBmcm9tIHRoZSBpdGVyYXRvci4KKyAgICAgICAgIiIiCisgICAgICAgIGV2ZW50cyA9IHNlbGYuX2V2ZW50c19xdWV1ZQorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgaW5kZXggPSBzZWxmLl9pbmRleAorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGV2ZW50ID0gZXZlbnRzW3NlbGYuX2luZGV4XQorICAgICAgICAgICAgICAgICMgQXZvaWQgcmV0YWluaW5nIHJlZmVyZW5jZXMgdG8gcGFzdCBldmVudHMKKyAgICAgICAgICAgICAgICBldmVudHNbc2VsZi5faW5kZXhdID0gTm9uZQorICAgICAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGluZGV4ICs9IDEKKyAgICAgICAgICAgICMgQ29tcGFjdCB0aGUgbGlzdCBpbiBhIE8oMSkgYW1vcnRpemVkIGZhc2hpb24KKyAgICAgICAgICAgICMgQXMgbm90ZWQgYWJvdmUsIF9lbGVtZW50cmVlLmMgbmVlZHMgYSBsaXN0LCBub3QgYSBkZXF1ZQorICAgICAgICAgICAgaWYgaW5kZXggKiAyID49IGxlbihldmVudHMpOgorICAgICAgICAgICAgICAgIGV2ZW50c1s6aW5kZXhdID0gW10KKyAgICAgICAgICAgICAgICBzZWxmLl9pbmRleCA9IDAKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5faW5kZXggPSBpbmRleAorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShldmVudCwgRXhjZXB0aW9uKToKKyAgICAgICAgICAgICAgICByYWlzZSBldmVudAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB5aWVsZCBldmVudAorCiAKIGNsYXNzIF9JdGVyUGFyc2VJdGVyYXRvcjoKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzb3VyY2UsIGV2ZW50cywgcGFyc2VyLCBjbG9zZV9zb3VyY2U9RmFsc2UpOgorICAgICAgICAjIFVzZSB0aGUgaW50ZXJuYWwsIHVuZG9jdW1lbnRlZCBfcGFyc2VyIGFyZ3VtZW50IGZvciBub3c7IFdoZW4gdGhlCisgICAgICAgICMgcGFyc2VyIGFyZ3VtZW50IG9mIGl0ZXJwYXJzZSBpcyByZW1vdmVkLCB0aGlzIGNhbiBiZSBraWxsZWQuCisgICAgICAgIHNlbGYuX3BhcnNlciA9IFhNTFB1bGxQYXJzZXIoZXZlbnRzPWV2ZW50cywgX3BhcnNlcj1wYXJzZXIpCiAgICAgICAgIHNlbGYuX2ZpbGUgPSBzb3VyY2UKICAgICAgICAgc2VsZi5fY2xvc2VfZmlsZSA9IGNsb3NlX3NvdXJjZQotICAgICAgICBzZWxmLl9ldmVudHMgPSBbXQotICAgICAgICBzZWxmLl9pbmRleCA9IDAKLSAgICAgICAgc2VsZi5fZXJyb3IgPSBOb25lCiAgICAgICAgIHNlbGYucm9vdCA9IHNlbGYuX3Jvb3QgPSBOb25lCi0gICAgICAgIHNlbGYuX3BhcnNlciA9IHBhcnNlcgotICAgICAgICAjIHdpcmUgdXAgdGhlIHBhcnNlciBmb3IgZXZlbnQgcmVwb3J0aW5nCi0gICAgICAgIHBhcnNlciA9IHNlbGYuX3BhcnNlci5fcGFyc2VyCi0gICAgICAgIGFwcGVuZCA9IHNlbGYuX2V2ZW50cy5hcHBlbmQKLSAgICAgICAgaWYgZXZlbnRzIGlzIE5vbmU6Ci0gICAgICAgICAgICBldmVudHMgPSBbImVuZCJdCi0gICAgICAgIGZvciBldmVudCBpbiBldmVudHM6Ci0gICAgICAgICAgICBpZiBldmVudCA9PSAic3RhcnQiOgotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgcGFyc2VyLm9yZGVyZWRfYXR0cmlidXRlcyA9IDEKLSAgICAgICAgICAgICAgICAgICAgcGFyc2VyLnNwZWNpZmllZF9hdHRyaWJ1dGVzID0gMQotICAgICAgICAgICAgICAgICAgICBkZWYgaGFuZGxlcih0YWcsIGF0dHJpYl9pbiwgZXZlbnQ9ZXZlbnQsIGFwcGVuZD1hcHBlbmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0PXNlbGYuX3BhcnNlci5fc3RhcnRfbGlzdCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmQoKGV2ZW50LCBzdGFydCh0YWcsIGF0dHJpYl9pbikpKQotICAgICAgICAgICAgICAgICAgICBwYXJzZXIuU3RhcnRFbGVtZW50SGFuZGxlciA9IGhhbmRsZXIKLSAgICAgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgIGRlZiBoYW5kbGVyKHRhZywgYXR0cmliX2luLCBldmVudD1ldmVudCwgYXBwZW5kPWFwcGVuZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQ9c2VsZi5fcGFyc2VyLl9zdGFydCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmQoKGV2ZW50LCBzdGFydCh0YWcsIGF0dHJpYl9pbikpKQotICAgICAgICAgICAgICAgICAgICBwYXJzZXIuU3RhcnRFbGVtZW50SGFuZGxlciA9IGhhbmRsZXIKLSAgICAgICAgICAgIGVsaWYgZXZlbnQgPT0gImVuZCI6Ci0gICAgICAgICAgICAgICAgZGVmIGhhbmRsZXIodGFnLCBldmVudD1ldmVudCwgYXBwZW5kPWFwcGVuZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQ9c2VsZi5fcGFyc2VyLl9lbmQpOgotICAgICAgICAgICAgICAgICAgICBhcHBlbmQoKGV2ZW50LCBlbmQodGFnKSkpCi0gICAgICAgICAgICAgICAgcGFyc2VyLkVuZEVsZW1lbnRIYW5kbGVyID0gaGFuZGxlcgotICAgICAgICAgICAgZWxpZiBldmVudCA9PSAic3RhcnQtbnMiOgotICAgICAgICAgICAgICAgIGRlZiBoYW5kbGVyKHByZWZpeCwgdXJpLCBldmVudD1ldmVudCwgYXBwZW5kPWFwcGVuZCk6Ci0gICAgICAgICAgICAgICAgICAgIGFwcGVuZCgoZXZlbnQsIChwcmVmaXggb3IgIiIsIHVyaSBvciAiIikpKQotICAgICAgICAgICAgICAgIHBhcnNlci5TdGFydE5hbWVzcGFjZURlY2xIYW5kbGVyID0gaGFuZGxlcgotICAgICAgICAgICAgZWxpZiBldmVudCA9PSAiZW5kLW5zIjoKLSAgICAgICAgICAgICAgICBkZWYgaGFuZGxlcihwcmVmaXgsIGV2ZW50PWV2ZW50LCBhcHBlbmQ9YXBwZW5kKToKLSAgICAgICAgICAgICAgICAgICAgYXBwZW5kKChldmVudCwgTm9uZSkpCi0gICAgICAgICAgICAgICAgcGFyc2VyLkVuZE5hbWVzcGFjZURlY2xIYW5kbGVyID0gaGFuZGxlcgotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ1bmtub3duIGV2ZW50ICVyIiAlIGV2ZW50KQogCiAgICAgZGVmIF9fbmV4dF9fKHNlbGYpOgotICAgICAgICB3aGlsZSAxOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGl0ZW0gPSBzZWxmLl9ldmVudHNbc2VsZi5faW5kZXhdCi0gICAgICAgICAgICAgICAgc2VsZi5faW5kZXggKz0gMQotICAgICAgICAgICAgICAgIHJldHVybiBpdGVtCi0gICAgICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICBpZiBzZWxmLl9lcnJvcjoKLSAgICAgICAgICAgICAgICBlID0gc2VsZi5fZXJyb3IKLSAgICAgICAgICAgICAgICBzZWxmLl9lcnJvciA9IE5vbmUKLSAgICAgICAgICAgICAgICByYWlzZSBlCi0gICAgICAgICAgICBpZiBzZWxmLl9wYXJzZXIgaXMgTm9uZToKLSAgICAgICAgICAgICAgICBzZWxmLnJvb3QgPSBzZWxmLl9yb290Ci0gICAgICAgICAgICAgICAgaWYgc2VsZi5fY2xvc2VfZmlsZToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fZmlsZS5jbG9zZSgpCi0gICAgICAgICAgICAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvbgotICAgICAgICAgICAgIyBsb2FkIGV2ZW50IGJ1ZmZlcgotICAgICAgICAgICAgZGVsIHNlbGYuX2V2ZW50c1s6XQotICAgICAgICAgICAgc2VsZi5faW5kZXggPSAwCi0gICAgICAgICAgICBkYXRhID0gc2VsZi5fZmlsZS5yZWFkKDE2Mzg0KQotICAgICAgICAgICAgaWYgZGF0YToKLSAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICAgICAgZm9yIGV2ZW50IGluIHNlbGYuX3BhcnNlci5yZWFkX2V2ZW50cygpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXZlbnQKKyAgICAgICAgICAgICAgICBpZiBzZWxmLl9wYXJzZXIuX3BhcnNlciBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICMgbG9hZCBldmVudCBidWZmZXIKKyAgICAgICAgICAgICAgICBkYXRhID0gc2VsZi5fZmlsZS5yZWFkKDE2ICogMTAyNCkKKyAgICAgICAgICAgICAgICBpZiBkYXRhOgogICAgICAgICAgICAgICAgICAgICBzZWxmLl9wYXJzZXIuZmVlZChkYXRhKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBTeW50YXhFcnJvciBhcyBleGM6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuX2Vycm9yID0gZXhjCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuX3Jvb3QgPSBzZWxmLl9wYXJzZXIuY2xvc2UoKQotICAgICAgICAgICAgICAgIHNlbGYuX3BhcnNlciA9IE5vbmUKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9yb290ID0gc2VsZi5fcGFyc2VyLl9jbG9zZV9hbmRfcmV0dXJuX3Jvb3QoKQorICAgICAgICAgICAgc2VsZi5yb290ID0gc2VsZi5fcm9vdAorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBpZiBzZWxmLl9jbG9zZV9maWxlOgorICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGUuY2xvc2UoKQorICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgaWYgc2VsZi5fY2xvc2VfZmlsZToKKyAgICAgICAgICAgIHNlbGYuX2ZpbGUuY2xvc2UoKQorICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uCiAKICAgICBkZWYgX19pdGVyX18oc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmCiAKLSMjCi0jIFBhcnNlcyBhbiBYTUwgZG9jdW1lbnQgZnJvbSBhIHN0cmluZyBjb25zdGFudC4gIFRoaXMgZnVuY3Rpb24gY2FuCi0jIGJlIHVzZWQgdG8gZW1iZWQgIlhNTCBsaXRlcmFscyIgaW4gUHl0aG9uIGNvZGUuCi0jCi0jIEBwYXJhbSBzb3VyY2UgQSBzdHJpbmcgY29udGFpbmluZyBYTUwgZGF0YS4KLSMgQHBhcmFtIHBhcnNlciBBbiBvcHRpb25hbCBwYXJzZXIgaW5zdGFuY2UuICBJZiBub3QgZ2l2ZW4sIHRoZQotIyAgICAgc3RhbmRhcmQge0BsaW5rIFhNTFBhcnNlcn0gcGFyc2VyIGlzIHVzZWQuCi0jIEByZXR1cm4gQW4gRWxlbWVudCBpbnN0YW5jZS4KLSMgQGRlZnJldHVybiBFbGVtZW50CiAKIGRlZiBYTUwodGV4dCwgcGFyc2VyPU5vbmUpOgorICAgICIiIlBhcnNlIFhNTCBkb2N1bWVudCBmcm9tIHN0cmluZyBjb25zdGFudC4KKworICAgIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gZW1iZWQgIlhNTCBMaXRlcmFscyIgaW4gUHl0aG9uIGNvZGUuCisKKyAgICAqdGV4dCogaXMgYSBzdHJpbmcgY29udGFpbmluZyBYTUwgZGF0YSwgKnBhcnNlciogaXMgYW4KKyAgICBvcHRpb25hbCBwYXJzZXIgaW5zdGFuY2UsIGRlZmF1bHRpbmcgdG8gdGhlIHN0YW5kYXJkIFhNTFBhcnNlci4KKworICAgIFJldHVybnMgYW4gRWxlbWVudCBpbnN0YW5jZS4KKworICAgICIiIgogICAgIGlmIG5vdCBwYXJzZXI6CiAgICAgICAgIHBhcnNlciA9IFhNTFBhcnNlcih0YXJnZXQ9VHJlZUJ1aWxkZXIoKSkKICAgICBwYXJzZXIuZmVlZCh0ZXh0KQogICAgIHJldHVybiBwYXJzZXIuY2xvc2UoKQogCi0jIwotIyBQYXJzZXMgYW4gWE1MIGRvY3VtZW50IGZyb20gYSBzdHJpbmcgY29uc3RhbnQsIGFuZCBhbHNvIHJldHVybnMKLSMgYSBkaWN0aW9uYXJ5IHdoaWNoIG1hcHMgZnJvbSBlbGVtZW50IGlkOnMgdG8gZWxlbWVudHMuCi0jCi0jIEBwYXJhbSBzb3VyY2UgQSBzdHJpbmcgY29udGFpbmluZyBYTUwgZGF0YS4KLSMgQHBhcmFtIHBhcnNlciBBbiBvcHRpb25hbCBwYXJzZXIgaW5zdGFuY2UuICBJZiBub3QgZ2l2ZW4sIHRoZQotIyAgICAgc3RhbmRhcmQge0BsaW5rIFhNTFBhcnNlcn0gcGFyc2VyIGlzIHVzZWQuCi0jIEByZXR1cm4gQSB0dXBsZSBjb250YWluaW5nIGFuIEVsZW1lbnQgaW5zdGFuY2UgYW5kIGEgZGljdGlvbmFyeS4KLSMgQGRlZnJldHVybiAoRWxlbWVudCwgZGljdGlvbmFyeSkKIAogZGVmIFhNTElEKHRleHQsIHBhcnNlcj1Ob25lKToKKyAgICAiIiJQYXJzZSBYTUwgZG9jdW1lbnQgZnJvbSBzdHJpbmcgY29uc3RhbnQgZm9yIGl0cyBJRHMuCisKKyAgICAqdGV4dCogaXMgYSBzdHJpbmcgY29udGFpbmluZyBYTUwgZGF0YSwgKnBhcnNlciogaXMgYW4KKyAgICBvcHRpb25hbCBwYXJzZXIgaW5zdGFuY2UsIGRlZmF1bHRpbmcgdG8gdGhlIHN0YW5kYXJkIFhNTFBhcnNlci4KKworICAgIFJldHVybnMgYW4gKEVsZW1lbnQsIGRpY3QpIHR1cGxlLCBpbiB3aGljaCB0aGUKKyAgICBkaWN0IG1hcHMgZWxlbWVudCBpZDpzIHRvIGVsZW1lbnRzLgorCisgICAgIiIiCiAgICAgaWYgbm90IHBhcnNlcjoKICAgICAgICAgcGFyc2VyID0gWE1MUGFyc2VyKHRhcmdldD1UcmVlQnVpbGRlcigpKQogICAgIHBhcnNlci5mZWVkKHRleHQpCkBAIC0xMzc4LDI3ICsxMzU3LDE4IEBACiAgICAgICAgICAgICBpZHNbaWRdID0gZWxlbQogICAgIHJldHVybiB0cmVlLCBpZHMKIAotIyMKLSMgUGFyc2VzIGFuIFhNTCBkb2N1bWVudCBmcm9tIGEgc3RyaW5nIGNvbnN0YW50LiAgU2FtZSBhcyB7QGxpbmsgI1hNTH0uCi0jCi0jIEBkZWYgZnJvbXN0cmluZyh0ZXh0KQotIyBAcGFyYW0gc291cmNlIEEgc3RyaW5nIGNvbnRhaW5pbmcgWE1MIGRhdGEuCi0jIEByZXR1cm4gQW4gRWxlbWVudCBpbnN0YW5jZS4KLSMgQGRlZnJldHVybiBFbGVtZW50Ci0KKyMgUGFyc2UgWE1MIGRvY3VtZW50IGZyb20gc3RyaW5nIGNvbnN0YW50LiAgQWxpYXMgZm9yIFhNTCgpLgogZnJvbXN0cmluZyA9IFhNTAogCi0jIwotIyBQYXJzZXMgYW4gWE1MIGRvY3VtZW50IGZyb20gYSBzZXF1ZW5jZSBvZiBzdHJpbmcgZnJhZ21lbnRzLgotIwotIyBAcGFyYW0gc2VxdWVuY2UgQSBsaXN0IG9yIG90aGVyIHNlcXVlbmNlIGNvbnRhaW5pbmcgWE1MIGRhdGEgZnJhZ21lbnRzLgotIyBAcGFyYW0gcGFyc2VyIEFuIG9wdGlvbmFsIHBhcnNlciBpbnN0YW5jZS4gIElmIG5vdCBnaXZlbiwgdGhlCi0jICAgICBzdGFuZGFyZCB7QGxpbmsgWE1MUGFyc2VyfSBwYXJzZXIgaXMgdXNlZC4KLSMgQHJldHVybiBBbiBFbGVtZW50IGluc3RhbmNlLgotIyBAZGVmcmV0dXJuIEVsZW1lbnQKLSMgQHNpbmNlIDEuMwotCiBkZWYgZnJvbXN0cmluZ2xpc3Qoc2VxdWVuY2UsIHBhcnNlcj1Ob25lKToKKyAgICAiIiJQYXJzZSBYTUwgZG9jdW1lbnQgZnJvbSBzZXF1ZW5jZSBvZiBzdHJpbmcgZnJhZ21lbnRzLgorCisgICAgKnNlcXVlbmNlKiBpcyBhIGxpc3Qgb2Ygb3RoZXIgc2VxdWVuY2UsICpwYXJzZXIqIGlzIGFuIG9wdGlvbmFsIHBhcnNlcgorICAgIGluc3RhbmNlLCBkZWZhdWx0aW5nIHRvIHRoZSBzdGFuZGFyZCBYTUxQYXJzZXIuCisKKyAgICBSZXR1cm5zIGFuIEVsZW1lbnQgaW5zdGFuY2UuCisKKyAgICAiIiIKICAgICBpZiBub3QgcGFyc2VyOgogICAgICAgICBwYXJzZXIgPSBYTUxQYXJzZXIodGFyZ2V0PVRyZWVCdWlsZGVyKCkpCiAgICAgZm9yIHRleHQgaW4gc2VxdWVuY2U6CkBAIC0xNDA3LDE5ICsxMzc3LDIwIEBACiAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotIyMKLSMgR2VuZXJpYyBlbGVtZW50IHN0cnVjdHVyZSBidWlsZGVyLiAgVGhpcyBidWlsZGVyIGNvbnZlcnRzIGEgc2VxdWVuY2UKLSMgb2Yge0BsaW5rICNUcmVlQnVpbGRlci5zdGFydH0sIHtAbGluayAjVHJlZUJ1aWxkZXIuZGF0YX0sIGFuZCB7QGxpbmsKLSMgI1RyZWVCdWlsZGVyLmVuZH0gbWV0aG9kIGNhbGxzIHRvIGEgd2VsbC1mb3JtZWQgZWxlbWVudCBzdHJ1Y3R1cmUuCi0jIDxwPgotIyBZb3UgY2FuIHVzZSB0aGlzIGNsYXNzIHRvIGJ1aWxkIGFuIGVsZW1lbnQgc3RydWN0dXJlIHVzaW5nIGEgY3VzdG9tIFhNTAotIyBwYXJzZXIsIG9yIGEgcGFyc2VyIGZvciBzb21lIG90aGVyIFhNTC1saWtlIGZvcm1hdC4KLSMKLSMgQHBhcmFtIGVsZW1lbnRfZmFjdG9yeSBPcHRpb25hbCBlbGVtZW50IGZhY3RvcnkuICBUaGlzIGZhY3RvcnkKLSMgICAgaXMgY2FsbGVkIHRvIGNyZWF0ZSBuZXcgRWxlbWVudCBpbnN0YW5jZXMsIGFzIG5lY2Vzc2FyeS4KIAogY2xhc3MgVHJlZUJ1aWxkZXI6CisgICAgIiIiR2VuZXJpYyBlbGVtZW50IHN0cnVjdHVyZSBidWlsZGVyLgogCisgICAgVGhpcyBidWlsZGVyIGNvbnZlcnRzIGEgc2VxdWVuY2Ugb2Ygc3RhcnQsIGRhdGEsIGFuZCBlbmQgbWV0aG9kCisgICAgY2FsbHMgdG8gYSB3ZWxsLWZvcm1lZCBlbGVtZW50IHN0cnVjdHVyZS4KKworICAgIFlvdSBjYW4gdXNlIHRoaXMgY2xhc3MgdG8gYnVpbGQgYW4gZWxlbWVudCBzdHJ1Y3R1cmUgdXNpbmcgYSBjdXN0b20gWE1MCisgICAgcGFyc2VyLCBvciBhIHBhcnNlciBmb3Igc29tZSBvdGhlciBYTUwtbGlrZSBmb3JtYXQuCisKKyAgICAqZWxlbWVudF9mYWN0b3J5KiBpcyBhbiBvcHRpb25hbCBlbGVtZW50IGZhY3Rvcnkgd2hpY2ggaXMgY2FsbGVkCisgICAgdG8gY3JlYXRlIG5ldyBFbGVtZW50IGluc3RhbmNlcywgYXMgbmVjZXNzYXJ5LgorCisgICAgIiIiCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGVsZW1lbnRfZmFjdG9yeT1Ob25lKToKICAgICAgICAgc2VsZi5fZGF0YSA9IFtdICMgZGF0YSBjb2xsZWN0b3IKICAgICAgICAgc2VsZi5fZWxlbSA9IFtdICMgZWxlbWVudCBzdGFjawpAQCAtMTQyOSwxNCArMTQwMCw4IEBACiAgICAgICAgICAgICBlbGVtZW50X2ZhY3RvcnkgPSBFbGVtZW50CiAgICAgICAgIHNlbGYuX2ZhY3RvcnkgPSBlbGVtZW50X2ZhY3RvcnkKIAotICAgICMjCi0gICAgIyBGbHVzaGVzIHRoZSBidWlsZGVyIGJ1ZmZlcnMsIGFuZCByZXR1cm5zIHRoZSB0b3BsZXZlbCBkb2N1bWVudAotICAgICMgZWxlbWVudC4KLSAgICAjCi0gICAgIyBAcmV0dXJuIEFuIEVsZW1lbnQgaW5zdGFuY2UuCi0gICAgIyBAZGVmcmV0dXJuIEVsZW1lbnQKLQogICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgIiIiRmx1c2ggYnVpbGRlciBidWZmZXJzIGFuZCByZXR1cm4gdG9wbGV2ZWwgZG9jdW1lbnQgRWxlbWVudC4iIiIKICAgICAgICAgYXNzZXJ0IGxlbihzZWxmLl9lbGVtKSA9PSAwLCAibWlzc2luZyBlbmQgdGFncyIKICAgICAgICAgYXNzZXJ0IHNlbGYuX2xhc3QgaXMgbm90IE5vbmUsICJtaXNzaW5nIHRvcGxldmVsIGVsZW1lbnQiCiAgICAgICAgIHJldHVybiBzZWxmLl9sYXN0CkBAIC0xNDUzLDI0ICsxNDE4LDE3IEBACiAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2xhc3QudGV4dCA9IHRleHQKICAgICAgICAgICAgIHNlbGYuX2RhdGEgPSBbXQogCi0gICAgIyMKLSAgICAjIEFkZHMgdGV4dCB0byB0aGUgY3VycmVudCBlbGVtZW50LgotICAgICMKLSAgICAjIEBwYXJhbSBkYXRhIEEgc3RyaW5nLiAgVGhpcyBzaG91bGQgYmUgZWl0aGVyIGFuIDgtYml0IHN0cmluZwotICAgICMgICAgY29udGFpbmluZyBBU0NJSSB0ZXh0LCBvciBhIFVuaWNvZGUgc3RyaW5nLgotCiAgICAgZGVmIGRhdGEoc2VsZiwgZGF0YSk6CisgICAgICAgICIiIkFkZCB0ZXh0IHRvIGN1cnJlbnQgZWxlbWVudC4iIiIKICAgICAgICAgc2VsZi5fZGF0YS5hcHBlbmQoZGF0YSkKIAotICAgICMjCi0gICAgIyBPcGVucyBhIG5ldyBlbGVtZW50LgotICAgICMKLSAgICAjIEBwYXJhbSB0YWcgVGhlIGVsZW1lbnQgbmFtZS4KLSAgICAjIEBwYXJhbSBhdHRyaWIgQSBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcgZWxlbWVudCBhdHRyaWJ1dGVzLgotICAgICMgQHJldHVybiBUaGUgb3BlbmVkIGVsZW1lbnQuCi0gICAgIyBAZGVmcmV0dXJuIEVsZW1lbnQKLQogICAgIGRlZiBzdGFydChzZWxmLCB0YWcsIGF0dHJzKToKKyAgICAgICAgIiIiT3BlbiBuZXcgZWxlbWVudCBhbmQgcmV0dXJuIGl0LgorCisgICAgICAgICp0YWcqIGlzIHRoZSBlbGVtZW50IG5hbWUsICphdHRycyogaXMgYSBkaWN0IGNvbnRhaW5pbmcgZWxlbWVudAorICAgICAgICBhdHRyaWJ1dGVzLgorCisgICAgICAgICIiIgogICAgICAgICBzZWxmLl9mbHVzaCgpCiAgICAgICAgIHNlbGYuX2xhc3QgPSBlbGVtID0gc2VsZi5fZmFjdG9yeSh0YWcsIGF0dHJzKQogICAgICAgICBpZiBzZWxmLl9lbGVtOgpAQCAtMTQ3OSwxNCArMTQzNywxMiBAQAogICAgICAgICBzZWxmLl90YWlsID0gMAogICAgICAgICByZXR1cm4gZWxlbQogCi0gICAgIyMKLSAgICAjIENsb3NlcyB0aGUgY3VycmVudCBlbGVtZW50LgotICAgICMKLSAgICAjIEBwYXJhbSB0YWcgVGhlIGVsZW1lbnQgbmFtZS4KLSAgICAjIEByZXR1cm4gVGhlIGNsb3NlZCBlbGVtZW50LgotICAgICMgQGRlZnJldHVybiBFbGVtZW50Ci0KICAgICBkZWYgZW5kKHNlbGYsIHRhZyk6CisgICAgICAgICIiIkNsb3NlIGFuZCByZXR1cm4gY3VycmVudCBFbGVtZW50LgorCisgICAgICAgICp0YWcqIGlzIHRoZSBlbGVtZW50IG5hbWUuCisKKyAgICAgICAgIiIiCiAgICAgICAgIHNlbGYuX2ZsdXNoKCkKICAgICAgICAgc2VsZi5fbGFzdCA9IHNlbGYuX2VsZW0ucG9wKCkKICAgICAgICAgYXNzZXJ0IHNlbGYuX2xhc3QudGFnID09IHRhZyxcCkBAIC0xNDk1LDIwICsxNDUxLDE4IEBACiAgICAgICAgIHNlbGYuX3RhaWwgPSAxCiAgICAgICAgIHJldHVybiBzZWxmLl9sYXN0CiAKLSMjCi0jIEVsZW1lbnQgc3RydWN0dXJlIGJ1aWxkZXIgZm9yIFhNTCBzb3VyY2UgZGF0YSwgYmFzZWQgb24gdGhlCi0jIDxiPmV4cGF0PC9iPiBwYXJzZXIuCi0jCi0jIEBrZXlwYXJhbSB0YXJnZXQgVGFyZ2V0IG9iamVjdC4gIElmIG9taXR0ZWQsIHRoZSBidWlsZGVyIHVzZXMgYW4KLSMgICAgIGluc3RhbmNlIG9mIHRoZSBzdGFuZGFyZCB7QGxpbmsgI1RyZWVCdWlsZGVyfSBjbGFzcy4KLSMgQGtleXBhcmFtIGh0bWwgUHJlZGVmaW5lIEhUTUwgZW50aXRpZXMuICBUaGlzIGZsYWcgaXMgbm90IHN1cHBvcnRlZAotIyAgICAgYnkgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24uCi0jIEBrZXlwYXJhbSBlbmNvZGluZyBPcHRpb25hbCBlbmNvZGluZy4gIElmIGdpdmVuLCB0aGUgdmFsdWUgb3ZlcnJpZGVzCi0jICAgICB0aGUgZW5jb2Rpbmcgc3BlY2lmaWVkIGluIHRoZSBYTUwgZmlsZS4KLSMgQHNlZSAjRWxlbWVudFRyZWUKLSMgQHNlZSAjVHJlZUJ1aWxkZXIKIAorIyBhbHNvIHNlZSBFbGVtZW50VHJlZSBhbmQgVHJlZUJ1aWxkZXIKIGNsYXNzIFhNTFBhcnNlcjoKKyAgICAiIiJFbGVtZW50IHN0cnVjdHVyZSBidWlsZGVyIGZvciBYTUwgc291cmNlIGRhdGEgYmFzZWQgb24gdGhlIGV4cGF0IHBhcnNlci4KKworICAgICpodG1sKiBhcmUgcHJlZGVmaW5lZCBIVE1MIGVudGl0aWVzIChub3Qgc3VwcG9ydGVkIGN1cnJlbnRseSksCisgICAgKnRhcmdldCogaXMgYW4gb3B0aW9uYWwgdGFyZ2V0IG9iamVjdCB3aGljaCBkZWZhdWx0cyB0byBhbiBpbnN0YW5jZSBvZiB0aGUKKyAgICBzdGFuZGFyZCBUcmVlQnVpbGRlciBjbGFzcywgKmVuY29kaW5nKiBpcyBhbiBvcHRpb25hbCBlbmNvZGluZyBzdHJpbmcKKyAgICB3aGljaCBpZiBnaXZlbiwgb3ZlcnJpZGVzIHRoZSBlbmNvZGluZyBzcGVjaWZpZWQgaW4gdGhlIFhNTCBmaWxlOgorICAgIGh0dHA6Ly93d3cuaWFuYS5vcmcvYXNzaWdubWVudHMvY2hhcmFjdGVyLXNldHMKKworICAgICIiIgogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGh0bWw9MCwgdGFyZ2V0PU5vbmUsIGVuY29kaW5nPU5vbmUpOgogICAgICAgICB0cnk6CkBAIC0xNTQxLDE5ICsxNDk1LDEwIEBACiAgICAgICAgICAgICBwYXJzZXIuQ29tbWVudEhhbmRsZXIgPSB0YXJnZXQuY29tbWVudAogICAgICAgICBpZiBoYXNhdHRyKHRhcmdldCwgJ3BpJyk6CiAgICAgICAgICAgICBwYXJzZXIuUHJvY2Vzc2luZ0luc3RydWN0aW9uSGFuZGxlciA9IHRhcmdldC5waQotICAgICAgICAjIGxldCBleHBhdCBkbyB0aGUgYnVmZmVyaW5nLCBpZiBzdXBwb3J0ZWQKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcGFyc2VyLmJ1ZmZlcl90ZXh0ID0gMQotICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgICMgdXNlIG5ldy1zdHlsZSBhdHRyaWJ1dGUgaGFuZGxpbmcsIGlmIHN1cHBvcnRlZAotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBwYXJzZXIub3JkZXJlZF9hdHRyaWJ1dGVzID0gMQotICAgICAgICAgICAgcGFyc2VyLnNwZWNpZmllZF9hdHRyaWJ1dGVzID0gMQotICAgICAgICAgICAgaWYgaGFzYXR0cih0YXJnZXQsICdzdGFydCcpOgotICAgICAgICAgICAgICAgIHBhcnNlci5TdGFydEVsZW1lbnRIYW5kbGVyID0gc2VsZi5fc3RhcnRfbGlzdAotICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICBwYXNzCisgICAgICAgICMgQ29uZmlndXJlIHB5ZXhwYXQ6IGJ1ZmZlcmluZywgbmV3LXN0eWxlIGF0dHJpYnV0ZSBoYW5kbGluZy4KKyAgICAgICAgcGFyc2VyLmJ1ZmZlcl90ZXh0ID0gMQorICAgICAgICBwYXJzZXIub3JkZXJlZF9hdHRyaWJ1dGVzID0gMQorICAgICAgICBwYXJzZXIuc3BlY2lmaWVkX2F0dHJpYnV0ZXMgPSAxCiAgICAgICAgIHNlbGYuX2RvY3R5cGUgPSBOb25lCiAgICAgICAgIHNlbGYuZW50aXR5ID0ge30KICAgICAgICAgdHJ5OgpAQCAtMTU2MSw2ICsxNTA2LDM5IEBACiAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKICAgICAgICAgICAgIHBhc3MgIyB1bmtub3duCiAKKyAgICBkZWYgX3NldGV2ZW50cyhzZWxmLCBldmVudHNfcXVldWUsIGV2ZW50c190b19yZXBvcnQpOgorICAgICAgICAjIEludGVybmFsIEFQSSBmb3IgWE1MUHVsbFBhcnNlcgorICAgICAgICAjIGV2ZW50c190b19yZXBvcnQ6IGEgbGlzdCBvZiBldmVudHMgdG8gcmVwb3J0IGR1cmluZyBwYXJzaW5nIChzYW1lIGFzCisgICAgICAgICMgdGhlICpldmVudHMqIG9mIFhNTFB1bGxQYXJzZXIncyBjb25zdHJ1Y3Rvci4KKyAgICAgICAgIyBldmVudHNfcXVldWU6IGEgbGlzdCBvZiBhY3R1YWwgcGFyc2luZyBldmVudHMgdGhhdCB3aWxsIGJlIHBvcHVsYXRlZAorICAgICAgICAjIGJ5IHRoZSB1bmRlcmx5aW5nIHBhcnNlci4KKyAgICAgICAgIworICAgICAgICBwYXJzZXIgPSBzZWxmLl9wYXJzZXIKKyAgICAgICAgYXBwZW5kID0gZXZlbnRzX3F1ZXVlLmFwcGVuZAorICAgICAgICBmb3IgZXZlbnRfbmFtZSBpbiBldmVudHNfdG9fcmVwb3J0OgorICAgICAgICAgICAgaWYgZXZlbnRfbmFtZSA9PSAic3RhcnQiOgorICAgICAgICAgICAgICAgIHBhcnNlci5vcmRlcmVkX2F0dHJpYnV0ZXMgPSAxCisgICAgICAgICAgICAgICAgcGFyc2VyLnNwZWNpZmllZF9hdHRyaWJ1dGVzID0gMQorICAgICAgICAgICAgICAgIGRlZiBoYW5kbGVyKHRhZywgYXR0cmliX2luLCBldmVudD1ldmVudF9uYW1lLCBhcHBlbmQ9YXBwZW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0PXNlbGYuX3N0YXJ0KToKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kKChldmVudCwgc3RhcnQodGFnLCBhdHRyaWJfaW4pKSkKKyAgICAgICAgICAgICAgICBwYXJzZXIuU3RhcnRFbGVtZW50SGFuZGxlciA9IGhhbmRsZXIKKyAgICAgICAgICAgIGVsaWYgZXZlbnRfbmFtZSA9PSAiZW5kIjoKKyAgICAgICAgICAgICAgICBkZWYgaGFuZGxlcih0YWcsIGV2ZW50PWV2ZW50X25hbWUsIGFwcGVuZD1hcHBlbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kPXNlbGYuX2VuZCk6CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZCgoZXZlbnQsIGVuZCh0YWcpKSkKKyAgICAgICAgICAgICAgICBwYXJzZXIuRW5kRWxlbWVudEhhbmRsZXIgPSBoYW5kbGVyCisgICAgICAgICAgICBlbGlmIGV2ZW50X25hbWUgPT0gInN0YXJ0LW5zIjoKKyAgICAgICAgICAgICAgICBkZWYgaGFuZGxlcihwcmVmaXgsIHVyaSwgZXZlbnQ9ZXZlbnRfbmFtZSwgYXBwZW5kPWFwcGVuZCk6CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZCgoZXZlbnQsIChwcmVmaXggb3IgIiIsIHVyaSBvciAiIikpKQorICAgICAgICAgICAgICAgIHBhcnNlci5TdGFydE5hbWVzcGFjZURlY2xIYW5kbGVyID0gaGFuZGxlcgorICAgICAgICAgICAgZWxpZiBldmVudF9uYW1lID09ICJlbmQtbnMiOgorICAgICAgICAgICAgICAgIGRlZiBoYW5kbGVyKHByZWZpeCwgZXZlbnQ9ZXZlbnRfbmFtZSwgYXBwZW5kPWFwcGVuZCk6CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZCgoZXZlbnQsIE5vbmUpKQorICAgICAgICAgICAgICAgIHBhcnNlci5FbmROYW1lc3BhY2VEZWNsSGFuZGxlciA9IGhhbmRsZXIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigidW5rbm93biBldmVudCAlciIgJSBldmVudF9uYW1lKQorCiAgICAgZGVmIF9yYWlzZWVycm9yKHNlbGYsIHZhbHVlKToKICAgICAgICAgZXJyID0gUGFyc2VFcnJvcih2YWx1ZSkKICAgICAgICAgZXJyLmNvZGUgPSB2YWx1ZS5jb2RlCkBAIC0xNTc4LDIxICsxNTU2LDE2IEBACiAgICAgICAgICAgICBzZWxmLl9uYW1lc1trZXldID0gbmFtZQogICAgICAgICByZXR1cm4gbmFtZQogCi0gICAgZGVmIF9zdGFydChzZWxmLCB0YWcsIGF0dHJpYl9pbik6CisgICAgZGVmIF9zdGFydChzZWxmLCB0YWcsIGF0dHJfbGlzdCk6CisgICAgICAgICMgSGFuZGxlciBmb3IgZXhwYXQncyBTdGFydEVsZW1lbnRIYW5kbGVyLiBTaW5jZSBvcmRlcmVkX2F0dHJpYnV0ZXMKKyAgICAgICAgIyBpcyBzZXQsIHRoZSBhdHRyaWJ1dGVzIGFyZSByZXBvcnRlZCBhcyBhIGxpc3Qgb2YgYWx0ZXJuYXRpbmcKKyAgICAgICAgIyBhdHRyaWJ1dGUgbmFtZSx2YWx1ZS4KICAgICAgICAgZml4bmFtZSA9IHNlbGYuX2ZpeG5hbWUKICAgICAgICAgdGFnID0gZml4bmFtZSh0YWcpCiAgICAgICAgIGF0dHJpYiA9IHt9Ci0gICAgICAgIGZvciBrZXksIHZhbHVlIGluIGF0dHJpYl9pbi5pdGVtcygpOgotICAgICAgICAgICAgYXR0cmliW2ZpeG5hbWUoa2V5KV0gPSB2YWx1ZQotICAgICAgICByZXR1cm4gc2VsZi50YXJnZXQuc3RhcnQodGFnLCBhdHRyaWIpCi0KLSAgICBkZWYgX3N0YXJ0X2xpc3Qoc2VsZiwgdGFnLCBhdHRyaWJfaW4pOgotICAgICAgICBmaXhuYW1lID0gc2VsZi5fZml4bmFtZQotICAgICAgICB0YWcgPSBmaXhuYW1lKHRhZykKLSAgICAgICAgYXR0cmliID0ge30KLSAgICAgICAgaWYgYXR0cmliX2luOgotICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKGF0dHJpYl9pbiksIDIpOgotICAgICAgICAgICAgICAgIGF0dHJpYltmaXhuYW1lKGF0dHJpYl9pbltpXSldID0gYXR0cmliX2luW2krMV0KKyAgICAgICAgaWYgYXR0cl9saXN0OgorICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKGF0dHJfbGlzdCksIDIpOgorICAgICAgICAgICAgICAgIGF0dHJpYltmaXhuYW1lKGF0dHJfbGlzdFtpXSldID0gYXR0cl9saXN0W2krMV0KICAgICAgICAgcmV0dXJuIHNlbGYudGFyZ2V0LnN0YXJ0KHRhZywgYXR0cmliKQogCiAgICAgZGVmIF9lbmQoc2VsZiwgdGFnKToKQEAgLTE2NTAsMTUgKzE2MjMsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgc2VsZi5kb2N0eXBlKG5hbWUsIHB1YmlkLCBzeXN0ZW1bMTotMV0pCiAgICAgICAgICAgICAgICAgc2VsZi5fZG9jdHlwZSA9IE5vbmUKIAotICAgICMjCi0gICAgIyAoRGVwcmVjYXRlZCkgSGFuZGxlcyBhIGRvY3R5cGUgZGVjbGFyYXRpb24uCi0gICAgIwotICAgICMgQHBhcmFtIG5hbWUgRG9jdHlwZSBuYW1lLgotICAgICMgQHBhcmFtIHB1YmlkIFB1YmxpYyBpZGVudGlmaWVyLgotICAgICMgQHBhcmFtIHN5c3RlbSBTeXN0ZW0gaWRlbnRpZmllci4KLQogICAgIGRlZiBkb2N0eXBlKHNlbGYsIG5hbWUsIHB1YmlkLCBzeXN0ZW0pOgotICAgICAgICAiIiJUaGlzIG1ldGhvZCBvZiBYTUxQYXJzZXIgaXMgZGVwcmVjYXRlZC4iIiIKKyAgICAgICAgIiIiKERlcHJlY2F0ZWQpICBIYW5kbGUgZG9jdHlwZSBkZWNsYXJhdGlvbgorCisgICAgICAgICpuYW1lKiBpcyB0aGUgRG9jdHlwZSBuYW1lLCAqcHViaWQqIGlzIHRoZSBwdWJsaWMgaWRlbnRpZmllciwKKyAgICAgICAgYW5kICpzeXN0ZW0qIGlzIHRoZSBzeXN0ZW0gaWRlbnRpZmllci4KKworICAgICAgICAiIiIKICAgICAgICAgd2FybmluZ3Mud2FybigKICAgICAgICAgICAgICJUaGlzIG1ldGhvZCBvZiBYTUxQYXJzZXIgaXMgZGVwcmVjYXRlZC4gIERlZmluZSBkb2N0eXBlKCkgIgogICAgICAgICAgICAgIm1ldGhvZCBvbiB0aGUgVHJlZUJ1aWxkZXIgdGFyZ2V0LiIsCkBAIC0xNjY4LDI0ICsxNjM5LDE1IEBACiAgICAgIyBzZW50aW5lbCwgaWYgZG9jdHlwZSBpcyByZWRlZmluZWQgaW4gYSBzdWJjbGFzcwogICAgIF9fZG9jdHlwZSA9IGRvY3R5cGUKIAotICAgICMjCi0gICAgIyBGZWVkcyBkYXRhIHRvIHRoZSBwYXJzZXIuCi0gICAgIwotICAgICMgQHBhcmFtIGRhdGEgRW5jb2RlZCBkYXRhLgotCiAgICAgZGVmIGZlZWQoc2VsZiwgZGF0YSk6CisgICAgICAgICIiIkZlZWQgZW5jb2RlZCBkYXRhIHRvIHBhcnNlci4iIiIKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5wYXJzZXIuUGFyc2UoZGF0YSwgMCkKICAgICAgICAgZXhjZXB0IHNlbGYuX2Vycm9yIGFzIHY6CiAgICAgICAgICAgICBzZWxmLl9yYWlzZWVycm9yKHYpCiAKLSAgICAjIwotICAgICMgRmluaXNoZXMgZmVlZGluZyBkYXRhIHRvIHRoZSBwYXJzZXIuCi0gICAgIwotICAgICMgQHJldHVybiBBbiBlbGVtZW50IHN0cnVjdHVyZS4KLSAgICAjIEBkZWZyZXR1cm4gRWxlbWVudAotCiAgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICAiIiJGaW5pc2ggZmVlZGluZyBkYXRhIHRvIHBhcnNlciBhbmQgcmV0dXJuIGVsZW1lbnQgc3RydWN0dXJlLiIiIgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLnBhcnNlci5QYXJzZSgiIiwgMSkgIyBlbmQgb2YgZGF0YQogICAgICAgICBleGNlcHQgc2VsZi5fZXJyb3IgYXMgdjoKQEAgLTE3MDQsMTAzICsxNjY2LDEyIEBACiAKICMgSW1wb3J0IHRoZSBDIGFjY2VsZXJhdG9ycwogdHJ5OgorICAgICMgRWxlbWVudCBpcyBnb2luZyB0byBiZSBzaGFkb3dlZCBieSB0aGUgQyBpbXBsZW1lbnRhdGlvbi4gV2UgbmVlZCB0byBrZWVwCisgICAgIyB0aGUgUHl0aG9uIHZlcnNpb24gb2YgaXQgYWNjZXNzaWJsZSBmb3Igc29tZSAiY3JlYXRpdmUiIGJ5IGV4dGVybmFsIGNvZGUKKyAgICAjIChzZWUgdGVzdHMpCisgICAgX0VsZW1lbnRfUHkgPSBFbGVtZW50CisKICAgICAjIEVsZW1lbnQsIFN1YkVsZW1lbnQsIFBhcnNlRXJyb3IsIFRyZWVCdWlsZGVyLCBYTUxQYXJzZXIKICAgICBmcm9tIF9lbGVtZW50dHJlZSBpbXBvcnQgKgogZXhjZXB0IEltcG9ydEVycm9yOgogICAgIHBhc3MKLWVsc2U6Ci0gICAgIyBPdmVyd3JpdGUgJ0VsZW1lbnRUcmVlLnBhcnNlJyBhbmQgJ2l0ZXJwYXJzZScgdG8gdXNlIHRoZSBDIFhNTFBhcnNlcgotCi0gICAgY2xhc3MgRWxlbWVudFRyZWUoRWxlbWVudFRyZWUpOgotICAgICAgICBkZWYgcGFyc2Uoc2VsZiwgc291cmNlLCBwYXJzZXI9Tm9uZSk6Ci0gICAgICAgICAgICBjbG9zZV9zb3VyY2UgPSBGYWxzZQotICAgICAgICAgICAgaWYgbm90IGhhc2F0dHIoc291cmNlLCAncmVhZCcpOgotICAgICAgICAgICAgICAgIHNvdXJjZSA9IG9wZW4oc291cmNlLCAncmInKQotICAgICAgICAgICAgICAgIGNsb3NlX3NvdXJjZSA9IFRydWUKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBpZiBwYXJzZXIgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgIHdoaWxlIFRydWU6Ci0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gc291cmNlLnJlYWQoNjU1MzYpCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgZGF0YToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VyLmZlZWQoZGF0YSkKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fcm9vdCA9IHBhcnNlci5jbG9zZSgpCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgcGFyc2VyID0gWE1MUGFyc2VyKCkKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fcm9vdCA9IHBhcnNlci5fcGFyc2Uoc291cmNlKQotICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9yb290Ci0gICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgIGlmIGNsb3NlX3NvdXJjZToKLSAgICAgICAgICAgICAgICAgICAgc291cmNlLmNsb3NlKCkKLQotICAgIGNsYXNzIGl0ZXJwYXJzZToKLSAgICAgICAgIiIiUGFyc2VzIGFuIFhNTCBzZWN0aW9uIGludG8gYW4gZWxlbWVudCB0cmVlIGluY3JlbWVudGFsbHkuCi0KLSAgICAgICAgUmVwb3J0cyB3aGF04oCZcyBnb2luZyBvbiB0byB0aGUgdXNlci4gJ3NvdXJjZScgaXMgYSBmaWxlbmFtZSBvciBmaWxlCi0gICAgICAgIG9iamVjdCBjb250YWluaW5nIFhNTCBkYXRhLiAnZXZlbnRzJyBpcyBhIGxpc3Qgb2YgZXZlbnRzIHRvIHJlcG9ydCBiYWNrLgotICAgICAgICBUaGUgc3VwcG9ydGVkIGV2ZW50cyBhcmUgdGhlIHN0cmluZ3MgInN0YXJ0IiwgImVuZCIsICJzdGFydC1ucyIgYW5kCi0gICAgICAgICJlbmQtbnMiICh0aGUgIm5zIiBldmVudHMgYXJlIHVzZWQgdG8gZ2V0IGRldGFpbGVkIG5hbWVzcGFjZQotICAgICAgICBpbmZvcm1hdGlvbikuIElmICdldmVudHMnIGlzIG9taXR0ZWQsIG9ubHkgImVuZCIgZXZlbnRzIGFyZSByZXBvcnRlZC4KLSAgICAgICAgJ3BhcnNlcicgaXMgYW4gb3B0aW9uYWwgcGFyc2VyIGluc3RhbmNlLiBJZiBub3QgZ2l2ZW4sIHRoZSBzdGFuZGFyZAotICAgICAgICBYTUxQYXJzZXIgcGFyc2VyIGlzIHVzZWQuIFJldHVybnMgYW4gaXRlcmF0b3IgcHJvdmlkaW5nCi0gICAgICAgIChldmVudCwgZWxlbSkgcGFpcnMuCi0gICAgICAgICIiIgotCi0gICAgICAgIHJvb3QgPSBOb25lCi0gICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlLCBldmVudHM9Tm9uZSwgcGFyc2VyPU5vbmUpOgotICAgICAgICAgICAgc2VsZi5fY2xvc2VfZmlsZSA9IEZhbHNlCi0gICAgICAgICAgICBpZiBub3QgaGFzYXR0cihmaWxlLCAncmVhZCcpOgotICAgICAgICAgICAgICAgIGZpbGUgPSBvcGVuKGZpbGUsICdyYicpCi0gICAgICAgICAgICAgICAgc2VsZi5fY2xvc2VfZmlsZSA9IFRydWUKLSAgICAgICAgICAgIHNlbGYuX2ZpbGUgPSBmaWxlCi0gICAgICAgICAgICBzZWxmLl9ldmVudHMgPSBbXQotICAgICAgICAgICAgc2VsZi5faW5kZXggPSAwCi0gICAgICAgICAgICBzZWxmLl9lcnJvciA9IE5vbmUKLSAgICAgICAgICAgIHNlbGYucm9vdCA9IHNlbGYuX3Jvb3QgPSBOb25lCi0gICAgICAgICAgICBpZiBwYXJzZXIgaXMgTm9uZToKLSAgICAgICAgICAgICAgICBwYXJzZXIgPSBYTUxQYXJzZXIodGFyZ2V0PVRyZWVCdWlsZGVyKCkpCi0gICAgICAgICAgICBzZWxmLl9wYXJzZXIgPSBwYXJzZXIKLSAgICAgICAgICAgIHNlbGYuX3BhcnNlci5fc2V0ZXZlbnRzKHNlbGYuX2V2ZW50cywgZXZlbnRzKQotCi0gICAgICAgIGRlZiBfX25leHRfXyhzZWxmKToKLSAgICAgICAgICAgIHdoaWxlIFRydWU6Ci0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBpdGVtID0gc2VsZi5fZXZlbnRzW3NlbGYuX2luZGV4XQotICAgICAgICAgICAgICAgICAgICBzZWxmLl9pbmRleCArPSAxCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtCi0gICAgICAgICAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgICAgICBpZiBzZWxmLl9lcnJvcjoKLSAgICAgICAgICAgICAgICAgICAgZSA9IHNlbGYuX2Vycm9yCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuX2Vycm9yID0gTm9uZQotICAgICAgICAgICAgICAgICAgICByYWlzZSBlCi0gICAgICAgICAgICAgICAgaWYgc2VsZi5fcGFyc2VyIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYucm9vdCA9IHNlbGYuX3Jvb3QKLSAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5fY2xvc2VfZmlsZToKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGUuY2xvc2UoKQotICAgICAgICAgICAgICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uCi0gICAgICAgICAgICAgICAgIyBsb2FkIGV2ZW50IGJ1ZmZlcgotICAgICAgICAgICAgICAgIGRlbCBzZWxmLl9ldmVudHNbOl0KLSAgICAgICAgICAgICAgICBzZWxmLl9pbmRleCA9IDAKLSAgICAgICAgICAgICAgICBkYXRhID0gc2VsZi5fZmlsZS5yZWFkKDE2Mzg0KQotICAgICAgICAgICAgICAgIGlmIGRhdGE6Ci0gICAgICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3BhcnNlci5mZWVkKGRhdGEpCi0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBTeW50YXhFcnJvciBhcyBleGM6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9lcnJvciA9IGV4YwotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuX3Jvb3QgPSBzZWxmLl9wYXJzZXIuY2xvc2UoKQotICAgICAgICAgICAgICAgICAgICBzZWxmLl9wYXJzZXIgPSBOb25lCi0KLSAgICAgICAgZGVmIF9faXRlcl9fKHNlbGYpOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYKLQotIyBjb21wYXRpYmlsaXR5Ci1YTUxUcmVlQnVpbGRlciA9IFhNTFBhcnNlcgotCi0jIHdvcmthcm91bmQgY2lyY3VsYXIgaW1wb3J0LgotdHJ5OgotICAgIGZyb20gRWxlbWVudEMxNE4gaW1wb3J0IF9zZXJpYWxpemVfYzE0bgotICAgIF9zZXJpYWxpemVbImMxNG4iXSA9IF9zZXJpYWxpemVfYzE0bgotZXhjZXB0IEltcG9ydEVycm9yOgotICAgIHBhc3MKZGlmZiAtLWdpdCBhL0xpYi94bWwvc2F4L2V4cGF0cmVhZGVyLnB5IGIvTGliL3htbC9zYXgvZXhwYXRyZWFkZXIucHkKaW5kZXggYTIyN2NkYS4uM2I2MzczNyAxMDA2NDQKLS0tIGEvTGliL3htbC9zYXgvZXhwYXRyZWFkZXIucHkKKysrIGIvTGliL3htbC9zYXgvZXhwYXRyZWFkZXIucHkKQEAgLTQzLDYgKzQzLDkgQEAKICAgICBfbWtwcm94eSA9IHdlYWtyZWYucHJveHkKICAgICBkZWwgd2Vha3JlZiwgX3dlYWtyZWYKIAorY2xhc3MgX0Nsb3NlZFBhcnNlcjoKKyAgICBwYXNzCisKICMgLS0tIEV4cGF0TG9jYXRvcgogCiBjbGFzcyBFeHBhdExvY2F0b3IoeG1scmVhZGVyLkxvY2F0b3IpOgpAQCAtMjExLDE3ICsyMTQsMjcgQEAKICAgICAgICAgICAgIHNlbGYuX2Vycl9oYW5kbGVyLmZhdGFsRXJyb3IoZXhjKQogCiAgICAgZGVmIGNsb3NlKHNlbGYpOgotICAgICAgICBpZiBzZWxmLl9lbnRpdHlfc3RhY2s6CisgICAgICAgIGlmIChzZWxmLl9lbnRpdHlfc3RhY2sgb3Igc2VsZi5fcGFyc2VyIGlzIE5vbmUgb3IKKyAgICAgICAgICAgIGlzaW5zdGFuY2Uoc2VsZi5fcGFyc2VyLCBfQ2xvc2VkUGFyc2VyKSk6CiAgICAgICAgICAgICAjIElmIHdlIGFyZSBjb21wbGV0aW5nIGFuIGV4dGVybmFsIGVudGl0eSwgZG8gbm90aGluZyBoZXJlCiAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgc2VsZi5mZWVkKCIiLCBpc0ZpbmFsID0gMSkKLSAgICAgICAgc2VsZi5fY29udF9oYW5kbGVyLmVuZERvY3VtZW50KCkKLSAgICAgICAgc2VsZi5fcGFyc2luZyA9IDAKLSAgICAgICAgIyBicmVhayBjeWNsZSBjcmVhdGVkIGJ5IGV4cGF0IGhhbmRsZXJzIHBvaW50aW5nIHRvIG91ciBtZXRob2RzCi0gICAgICAgIHNlbGYuX3BhcnNlciA9IE5vbmUKLSAgICAgICAgYnMgPSBzZWxmLl9zb3VyY2UuZ2V0Qnl0ZVN0cmVhbSgpCi0gICAgICAgIGlmIGJzIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgYnMuY2xvc2UoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmZlZWQoIiIsIGlzRmluYWwgPSAxKQorICAgICAgICAgICAgc2VsZi5fY29udF9oYW5kbGVyLmVuZERvY3VtZW50KCkKKyAgICAgICAgICAgIHNlbGYuX3BhcnNpbmcgPSAwCisgICAgICAgICAgICAjIGJyZWFrIGN5Y2xlIGNyZWF0ZWQgYnkgZXhwYXQgaGFuZGxlcnMgcG9pbnRpbmcgdG8gb3VyIG1ldGhvZHMKKyAgICAgICAgICAgIHNlbGYuX3BhcnNlciA9IE5vbmUKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYuX3BhcnNpbmcgPSAwCisgICAgICAgICAgICBpZiBzZWxmLl9wYXJzZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgIyBLZWVwIEVycm9yQ29sdW1uTnVtYmVyIGFuZCBFcnJvckxpbmVOdW1iZXIgYWZ0ZXIgY2xvc2luZy4KKyAgICAgICAgICAgICAgICBwYXJzZXIgPSBfQ2xvc2VkUGFyc2VyKCkKKyAgICAgICAgICAgICAgICBwYXJzZXIuRXJyb3JDb2x1bW5OdW1iZXIgPSBzZWxmLl9wYXJzZXIuRXJyb3JDb2x1bW5OdW1iZXIKKyAgICAgICAgICAgICAgICBwYXJzZXIuRXJyb3JMaW5lTnVtYmVyID0gc2VsZi5fcGFyc2VyLkVycm9yTGluZU51bWJlcgorICAgICAgICAgICAgICAgIHNlbGYuX3BhcnNlciA9IHBhcnNlcgorICAgICAgICAgICAgYnMgPSBzZWxmLl9zb3VyY2UuZ2V0Qnl0ZVN0cmVhbSgpCisgICAgICAgICAgICBpZiBicyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBicy5jbG9zZSgpCiAKICAgICBkZWYgX3Jlc2V0X2NvbnRfaGFuZGxlcihzZWxmKToKICAgICAgICAgc2VsZi5fcGFyc2VyLlByb2Nlc3NpbmdJbnN0cnVjdGlvbkhhbmRsZXIgPSBcCmRpZmYgLS1naXQgYS9MaWIveG1sL3NheC9zYXh1dGlscy5weSBiL0xpYi94bWwvc2F4L3NheHV0aWxzLnB5CmluZGV4IDc0ZGU5YjAuLjFkM2QwZWMgMTAwNjQ0Ci0tLSBhL0xpYi94bWwvc2F4L3NheHV0aWxzLnB5CisrKyBiL0xpYi94bWwvc2F4L3NheHV0aWxzLnB5CkBAIC0zNDYsNyArMzQ2LDcgQEAKICAgICAgICAgZiA9IHNvdXJjZQogICAgICAgICBzb3VyY2UgPSB4bWxyZWFkZXIuSW5wdXRTb3VyY2UoKQogICAgICAgICBzb3VyY2Uuc2V0Qnl0ZVN0cmVhbShmKQotICAgICAgICBpZiBoYXNhdHRyKGYsICJuYW1lIik6CisgICAgICAgIGlmIGhhc2F0dHIoZiwgIm5hbWUiKSBhbmQgaXNpbnN0YW5jZShmLm5hbWUsIHN0cik6CiAgICAgICAgICAgICBzb3VyY2Uuc2V0U3lzdGVtSWQoZi5uYW1lKQogCiAgICAgaWYgc291cmNlLmdldEJ5dGVTdHJlYW0oKSBpcyBOb25lOgpkaWZmIC0tZ2l0IGEvTGliL3htbHJwYy9jbGllbnQucHkgYi9MaWIveG1scnBjL2NsaWVudC5weQppbmRleCBjYTJhYzlmLi45ZGU1MTExIDEwMDY0NAotLS0gYS9MaWIveG1scnBjL2NsaWVudC5weQorKysgYi9MaWIveG1scnBjL2NsaWVudC5weQpAQCAtMTM1LDcgKzEzNSw2IEBACiBpbXBvcnQgaHR0cC5jbGllbnQKIGltcG9ydCB1cmxsaWIucGFyc2UKIGZyb20geG1sLnBhcnNlcnMgaW1wb3J0IGV4cGF0Ci1pbXBvcnQgc29ja2V0CiBpbXBvcnQgZXJybm8KIGZyb20gaW8gaW1wb3J0IEJ5dGVzSU8KIHRyeToKQEAgLTQ0Nyw4ICs0NDYsMTMgQEAKICAgICAgICAgc2VsZi5fcGFyc2VyLlBhcnNlKGRhdGEsIDApCiAKICAgICBkZWYgY2xvc2Uoc2VsZik6Ci0gICAgICAgIHNlbGYuX3BhcnNlci5QYXJzZSgiIiwgMSkgIyBlbmQgb2YgZGF0YQotICAgICAgICBkZWwgc2VsZi5fdGFyZ2V0LCBzZWxmLl9wYXJzZXIgIyBnZXQgcmlkIG9mIGNpcmN1bGFyIHJlZmVyZW5jZXMKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcGFyc2VyID0gc2VsZi5fcGFyc2VyCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGRlbCBzZWxmLl90YXJnZXQsIHNlbGYuX3BhcnNlciAjIGdldCByaWQgb2YgY2lyY3VsYXIgcmVmZXJlbmNlcworICAgICAgICAgICAgcGFyc2VyLlBhcnNlKGIiIiwgVHJ1ZSkgIyBlbmQgb2YgZGF0YQogCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIFhNTC1SUEMgbWFyc2hhbGxpbmcgYW5kIHVubWFyc2hhbGxpbmcgY29kZQpAQCAtODI3LDcgKzgzMSw3IEBACiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ1bmV4cGVjdGVkIHR5cGUgaW4gbXVsdGljYWxsIHJlc3VsdCIpCiAKIGNsYXNzIE11bHRpQ2FsbDoKLSAgICAiIiJzZXJ2ZXIgLT4gYSBvYmplY3QgdXNlZCB0byBib3hjYXIgbWV0aG9kIGNhbGxzCisgICAgIiIic2VydmVyIC0+IGFuIG9iamVjdCB1c2VkIHRvIGJveGNhciBtZXRob2QgY2FsbHMKIAogICAgIHNlcnZlciBzaG91bGQgYmUgYSBTZXJ2ZXJQcm94eSBvYmplY3QuCiAKQEAgLTEwNTIsNyArMTA1Niw3IEBACiAgICAgICAgICAgICBkZWNvZGVkID0gZ3pmLnJlYWQoKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgZGVjb2RlZCA9IGd6Zi5yZWFkKG1heF9kZWNvZGUgKyAxKQotICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJpbnZhbGlkIGRhdGEiKQogICAgIGYuY2xvc2UoKQogICAgIGd6Zi5jbG9zZSgpCkBAIC0xMDgwLDggKzEwODQsMTAgQEAKICAgICAgICAgZ3ppcC5HemlwRmlsZS5fX2luaXRfXyhzZWxmLCBtb2RlPSJyYiIsIGZpbGVvYmo9c2VsZi5pbykKIAogICAgIGRlZiBjbG9zZShzZWxmKToKLSAgICAgICAgZ3ppcC5HemlwRmlsZS5jbG9zZShzZWxmKQotICAgICAgICBzZWxmLmlvLmNsb3NlKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZ3ppcC5HemlwRmlsZS5jbG9zZShzZWxmKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5pby5jbG9zZSgpCiAKIAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTEzOSw4ICsxMTQ1LDkgQEAKICAgICAgICAgZm9yIGkgaW4gKDAsIDEpOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnNpbmdsZV9yZXF1ZXN0KGhvc3QsIGhhbmRsZXIsIHJlcXVlc3RfYm9keSwgdmVyYm9zZSkKLSAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZToKLSAgICAgICAgICAgICAgICBpZiBpIG9yIGUuZXJybm8gbm90IGluIChlcnJuby5FQ09OTlJFU0VULCBlcnJuby5FQ09OTkFCT1JURUQsIGVycm5vLkVQSVBFKToKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgaWYgaSBvciBlLmVycm5vIG5vdCBpbiAoZXJybm8uRUNPTk5SRVNFVCwgZXJybm8uRUNPTk5BQk9SVEVELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm5vLkVQSVBFKToKICAgICAgICAgICAgICAgICAgICAgcmFpc2UKICAgICAgICAgICAgIGV4Y2VwdCBodHRwLmNsaWVudC5CYWRTdGF0dXNMaW5lOiAjY2xvc2UgYWZ0ZXIgd2Ugc2VudCByZXF1ZXN0CiAgICAgICAgICAgICAgICAgaWYgaToKQEAgLTExNzcsNyArMTE4NCw3IEBACiAgICAgIyMKICAgICAjIENyZWF0ZSBwYXJzZXIuCiAgICAgIwotICAgICMgQHJldHVybiBBIDItdHVwbGUgY29udGFpbmluZyBhIHBhcnNlciBhbmQgYSB1bm1hcnNoYWxsZXIuCisgICAgIyBAcmV0dXJuIEEgMi10dXBsZSBjb250YWluaW5nIGEgcGFyc2VyIGFuZCBhbiB1bm1hcnNoYWxsZXIuCiAKICAgICBkZWYgZ2V0cGFyc2VyKHNlbGYpOgogICAgICAgICAjIGdldCBwYXJzZXIgYW5kIHVubWFyc2hhbGxlcgpAQCAtMTIzNSw5ICsxMjQyLDEwIEBACiAgICAgIyBVc2VkIGluIHRoZSBldmVudCBvZiBzb2NrZXQgZXJyb3JzLgogICAgICMKICAgICBkZWYgY2xvc2Uoc2VsZik6Ci0gICAgICAgIGlmIHNlbGYuX2Nvbm5lY3Rpb25bMV06Ci0gICAgICAgICAgICBzZWxmLl9jb25uZWN0aW9uWzFdLmNsb3NlKCkKKyAgICAgICAgaG9zdCwgY29ubmVjdGlvbiA9IHNlbGYuX2Nvbm5lY3Rpb24KKyAgICAgICAgaWYgY29ubmVjdGlvbjoKICAgICAgICAgICAgIHNlbGYuX2Nvbm5lY3Rpb24gPSAoTm9uZSwgTm9uZSkKKyAgICAgICAgICAgIGNvbm5lY3Rpb24uY2xvc2UoKQogCiAgICAgIyMKICAgICAjIFNlbmQgSFRUUCByZXF1ZXN0LgpAQCAtMTMzMiw2ICsxMzQwLDExIEBACiBjbGFzcyBTYWZlVHJhbnNwb3J0KFRyYW5zcG9ydCk6CiAgICAgIiIiSGFuZGxlcyBhbiBIVFRQUyB0cmFuc2FjdGlvbiB0byBhbiBYTUwtUlBDIHNlcnZlci4iIiIKIAorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB1c2VfZGF0ZXRpbWU9RmFsc2UsIHVzZV9idWlsdGluX3R5cGVzPUZhbHNlLCAqLAorICAgICAgICAgICAgICAgICBjb250ZXh0PU5vbmUpOgorICAgICAgICBzdXBlcigpLl9faW5pdF9fKHVzZV9kYXRldGltZT11c2VfZGF0ZXRpbWUsIHVzZV9idWlsdGluX3R5cGVzPXVzZV9idWlsdGluX3R5cGVzKQorICAgICAgICBzZWxmLmNvbnRleHQgPSBjb250ZXh0CisKICAgICAjIEZJWE1FOiBtb3N0bHkgdW50ZXN0ZWQKIAogICAgIGRlZiBtYWtlX2Nvbm5lY3Rpb24oc2VsZiwgaG9zdCk6CkBAIC0xMzQ1LDcgKzEzNTgsNyBAQAogICAgICAgICAjIGhvc3QgbWF5IGJlIGEgc3RyaW5nLCBvciBhIChob3N0LCB4NTA5LWRpY3QpIHR1cGxlCiAgICAgICAgIGNob3N0LCBzZWxmLl9leHRyYV9oZWFkZXJzLCB4NTA5ID0gc2VsZi5nZXRfaG9zdF9pbmZvKGhvc3QpCiAgICAgICAgIHNlbGYuX2Nvbm5lY3Rpb24gPSBob3N0LCBodHRwLmNsaWVudC5IVFRQU0Nvbm5lY3Rpb24oY2hvc3QsCi0gICAgICAgICAgICBOb25lLCAqKih4NTA5IG9yIHt9KSkKKyAgICAgICAgICAgIE5vbmUsIGNvbnRleHQ9c2VsZi5jb250ZXh0LCAqKih4NTA5IG9yIHt9KSkKICAgICAgICAgcmV0dXJuIHNlbGYuX2Nvbm5lY3Rpb25bMV0KIAogIyMKQEAgLTEzODgsMTMgKzE0MDEsMTQgQEAKICAgICAiIiIKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCB1cmksIHRyYW5zcG9ydD1Ob25lLCBlbmNvZGluZz1Ob25lLCB2ZXJib3NlPUZhbHNlLAotICAgICAgICAgICAgICAgICBhbGxvd19ub25lPUZhbHNlLCB1c2VfZGF0ZXRpbWU9RmFsc2UsIHVzZV9idWlsdGluX3R5cGVzPUZhbHNlKToKKyAgICAgICAgICAgICAgICAgYWxsb3dfbm9uZT1GYWxzZSwgdXNlX2RhdGV0aW1lPUZhbHNlLCB1c2VfYnVpbHRpbl90eXBlcz1GYWxzZSwKKyAgICAgICAgICAgICAgICAgKiwgY29udGV4dD1Ob25lKToKICAgICAgICAgIyBlc3RhYmxpc2ggYSAibG9naWNhbCIgc2VydmVyIGNvbm5lY3Rpb24KIAogICAgICAgICAjIGdldCB0aGUgdXJsCiAgICAgICAgIHR5cGUsIHVyaSA9IHVybGxpYi5wYXJzZS5zcGxpdHR5cGUodXJpKQogICAgICAgICBpZiB0eXBlIG5vdCBpbiAoImh0dHAiLCAiaHR0cHMiKToKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoInVuc3VwcG9ydGVkIFhNTC1SUEMgcHJvdG9jb2wiKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigidW5zdXBwb3J0ZWQgWE1MLVJQQyBwcm90b2NvbCIpCiAgICAgICAgIHNlbGYuX19ob3N0LCBzZWxmLl9faGFuZGxlciA9IHVybGxpYi5wYXJzZS5zcGxpdGhvc3QodXJpKQogICAgICAgICBpZiBub3Qgc2VsZi5fX2hhbmRsZXI6CiAgICAgICAgICAgICBzZWxmLl9faGFuZGxlciA9ICIvUlBDMiIKQEAgLTE0MDIsMTAgKzE0MTYsMTMgQEAKICAgICAgICAgaWYgdHJhbnNwb3J0IGlzIE5vbmU6CiAgICAgICAgICAgICBpZiB0eXBlID09ICJodHRwcyI6CiAgICAgICAgICAgICAgICAgaGFuZGxlciA9IFNhZmVUcmFuc3BvcnQKKyAgICAgICAgICAgICAgICBleHRyYV9rd2FyZ3MgPSB7ImNvbnRleHQiOiBjb250ZXh0fQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBoYW5kbGVyID0gVHJhbnNwb3J0CisgICAgICAgICAgICAgICAgZXh0cmFfa3dhcmdzID0ge30KICAgICAgICAgICAgIHRyYW5zcG9ydCA9IGhhbmRsZXIodXNlX2RhdGV0aW1lPXVzZV9kYXRldGltZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlX2J1aWx0aW5fdHlwZXM9dXNlX2J1aWx0aW5fdHlwZXMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZV9idWlsdGluX3R5cGVzPXVzZV9idWlsdGluX3R5cGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKmV4dHJhX2t3YXJncykKICAgICAgICAgc2VsZi5fX3RyYW5zcG9ydCA9IHRyYW5zcG9ydAogCiAgICAgICAgIHNlbGYuX19lbmNvZGluZyA9IGVuY29kaW5nIG9yICd1dGYtOCcKZGlmZiAtLWdpdCBhL0xpYi94bWxycGMvc2VydmVyLnB5IGIvTGliL3htbHJwYy9zZXJ2ZXIucHkKaW5kZXggZDI3YmY1YS4uMzA0ZTIxOCAxMDA2NDQKLS0tIGEvTGliL3htbHJwYy9zZXJ2ZXIucHkKKysrIGIvTGliL3htbHJwYy9zZXJ2ZXIucHkKQEAgLTU4NCwxMyArNTg0LDYgQEAKICAgICAgICAgU2ltcGxlWE1MUlBDRGlzcGF0Y2hlci5fX2luaXRfXyhzZWxmLCBhbGxvd19ub25lLCBlbmNvZGluZywgdXNlX2J1aWx0aW5fdHlwZXMpCiAgICAgICAgIHNvY2tldHNlcnZlci5UQ1BTZXJ2ZXIuX19pbml0X18oc2VsZiwgYWRkciwgcmVxdWVzdEhhbmRsZXIsIGJpbmRfYW5kX2FjdGl2YXRlKQogCi0gICAgICAgICMgW0J1ZyAjMTIyMjc5MF0gSWYgcG9zc2libGUsIHNldCBjbG9zZS1vbi1leGVjIGZsYWc7IGlmIGEKLSAgICAgICAgIyBtZXRob2Qgc3Bhd25zIGEgc3VicHJvY2VzcywgdGhlIHN1YnByb2Nlc3Mgc2hvdWxkbid0IGhhdmUKLSAgICAgICAgIyB0aGUgbGlzdGVuaW5nIHNvY2tldCBvcGVuLgotICAgICAgICBpZiBmY250bCBpcyBub3QgTm9uZSBhbmQgaGFzYXR0cihmY250bCwgJ0ZEX0NMT0VYRUMnKToKLSAgICAgICAgICAgIGZsYWdzID0gZmNudGwuZmNudGwoc2VsZi5maWxlbm8oKSwgZmNudGwuRl9HRVRGRCkKLSAgICAgICAgICAgIGZsYWdzIHw9IGZjbnRsLkZEX0NMT0VYRUMKLSAgICAgICAgICAgIGZjbnRsLmZjbnRsKHNlbGYuZmlsZW5vKCksIGZjbnRsLkZfU0VURkQsIGZsYWdzKQogCiBjbGFzcyBNdWx0aVBhdGhYTUxSUENTZXJ2ZXIoU2ltcGxlWE1MUlBDU2VydmVyKToKICAgICAiIiJNdWx0aXBhdGggWE1MLVJQQyBTZXJ2ZXIKZGlmZiAtLWdpdCBhL0xpYi96aXBmaWxlLnB5IGIvTGliL3ppcGZpbGUucHkKaW5kZXggZmY2NGM5MC4uMTFkN2NmOSAxMDA2NDQKLS0tIGEvTGliL3ppcGZpbGUucHkKKysrIGIvTGliL3ppcGZpbGUucHkKQEAgLTYsNyArNiw3IEBACiBpbXBvcnQgaW8KIGltcG9ydCBvcwogaW1wb3J0IHJlCi1pbXBvcnQgaW1wCitpbXBvcnQgaW1wb3J0bGliLnV0aWwKIGltcG9ydCBzeXMKIGltcG9ydCB0aW1lCiBpbXBvcnQgc3RhdApAQCAtNTAsNyArNTAsNyBAQAogCiAKIFpJUDY0X0xJTUlUID0gKDEgPDwgMzEpIC0gMQotWklQX0ZJTEVDT1VOVF9MSU1JVCA9IDEgPDwgMTYKK1pJUF9GSUxFQ09VTlRfTElNSVQgPSAoMSA8PCAxNikgLSAxCiBaSVBfTUFYX0NPTU1FTlQgPSAoMSA8PCAxNikgLSAxCiAKICMgY29uc3RhbnRzIGZvciBaaXAgZmlsZSBjb21wcmVzc2lvbiBtZXRob2RzCkBAIC0xNjQsNyArMTY0LDcgQEAKICAgICB0cnk6CiAgICAgICAgIGlmIF9FbmRSZWNEYXRhKGZwKToKICAgICAgICAgICAgIHJldHVybiBUcnVlICAgICAgICAgIyBmaWxlIGhhcyBjb3JyZWN0IG1hZ2ljIG51bWJlcgotICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICBwYXNzCiAgICAgcmV0dXJuIEZhbHNlCiAKQEAgLTE4MCw3ICsxODAsNyBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAicmIiKSBhcyBmcDoKICAgICAgICAgICAgICAgICByZXN1bHQgPSBfY2hlY2tfemlwZmlsZShmcCkKLSAgICBleGNlcHQgSU9FcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcGFzcwogICAgIHJldHVybiByZXN1bHQKIApAQCAtMTkwLDcgKzE5MCw3IEBACiAgICAgIiIiCiAgICAgdHJ5OgogICAgICAgICBmcGluLnNlZWsob2Zmc2V0IC0gc2l6ZUVuZENlbnREaXI2NExvY2F0b3IsIDIpCi0gICAgZXhjZXB0IElPRXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICMgSWYgdGhlIHNlZWsgZmFpbHMsIHRoZSBmaWxlIGlzIG5vdCBsYXJnZSBlbm91Z2ggdG8gY29udGFpbiBhIFpJUDY0CiAgICAgICAgICMgZW5kLW9mLWFyY2hpdmUgcmVjb3JkLCBzbyBqdXN0IHJldHVybiB0aGUgZW5kIHJlY29yZCB3ZSB3ZXJlIGdpdmVuLgogICAgICAgICByZXR1cm4gZW5kcmVjCkBAIC0yMTEsOCArMjExLDggQEAKICAgICBpZiBsZW4oZGF0YSkgIT0gc2l6ZUVuZENlbnREaXI2NDoKICAgICAgICAgcmV0dXJuIGVuZHJlYwogICAgIHNpZywgc3osIGNyZWF0ZV92ZXJzaW9uLCByZWFkX3ZlcnNpb24sIGRpc2tfbnVtLCBkaXNrX2RpciwgXAotICAgICAgICAgICAgZGlyY291bnQsIGRpcmNvdW50MiwgZGlyc2l6ZSwgZGlyb2Zmc2V0ID0gXAotICAgICAgICAgICAgc3RydWN0LnVucGFjayhzdHJ1Y3RFbmRBcmNoaXZlNjQsIGRhdGEpCisgICAgICAgIGRpcmNvdW50LCBkaXJjb3VudDIsIGRpcnNpemUsIGRpcm9mZnNldCA9IFwKKyAgICAgICAgc3RydWN0LnVucGFjayhzdHJ1Y3RFbmRBcmNoaXZlNjQsIGRhdGEpCiAgICAgaWYgc2lnICE9IHN0cmluZ0VuZEFyY2hpdmU2NDoKICAgICAgICAgcmV0dXJuIGVuZHJlYwogCkBAIC0yNDIsNyArMjQyLDcgQEAKICAgICAjIGZpbGUgaWYgdGhpcyBpcyB0aGUgY2FzZSkuCiAgICAgdHJ5OgogICAgICAgICBmcGluLnNlZWsoLXNpemVFbmRDZW50RGlyLCAyKQotICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICByZXR1cm4gTm9uZQogICAgIGRhdGEgPSBmcGluLnJlYWQoKQogICAgIGlmIChsZW4oZGF0YSkgPT0gc2l6ZUVuZENlbnREaXIgYW5kCkBAIC0yOTIsMjYgKzI5MiwyNiBAQAogICAgICIiIkNsYXNzIHdpdGggYXR0cmlidXRlcyBkZXNjcmliaW5nIGVhY2ggZmlsZSBpbiB0aGUgWklQIGFyY2hpdmUuIiIiCiAKICAgICBfX3Nsb3RzX18gPSAoCi0gICAgICAgICAgICAnb3JpZ19maWxlbmFtZScsCi0gICAgICAgICAgICAnZmlsZW5hbWUnLAotICAgICAgICAgICAgJ2RhdGVfdGltZScsCi0gICAgICAgICAgICAnY29tcHJlc3NfdHlwZScsCi0gICAgICAgICAgICAnY29tbWVudCcsCi0gICAgICAgICAgICAnZXh0cmEnLAotICAgICAgICAgICAgJ2NyZWF0ZV9zeXN0ZW0nLAotICAgICAgICAgICAgJ2NyZWF0ZV92ZXJzaW9uJywKLSAgICAgICAgICAgICdleHRyYWN0X3ZlcnNpb24nLAotICAgICAgICAgICAgJ3Jlc2VydmVkJywKLSAgICAgICAgICAgICdmbGFnX2JpdHMnLAotICAgICAgICAgICAgJ3ZvbHVtZScsCi0gICAgICAgICAgICAnaW50ZXJuYWxfYXR0cicsCi0gICAgICAgICAgICAnZXh0ZXJuYWxfYXR0cicsCi0gICAgICAgICAgICAnaGVhZGVyX29mZnNldCcsCi0gICAgICAgICAgICAnQ1JDJywKLSAgICAgICAgICAgICdjb21wcmVzc19zaXplJywKLSAgICAgICAgICAgICdmaWxlX3NpemUnLAotICAgICAgICAgICAgJ19yYXdfdGltZScsCi0gICAgICAgICkKKyAgICAgICAgJ29yaWdfZmlsZW5hbWUnLAorICAgICAgICAnZmlsZW5hbWUnLAorICAgICAgICAnZGF0ZV90aW1lJywKKyAgICAgICAgJ2NvbXByZXNzX3R5cGUnLAorICAgICAgICAnY29tbWVudCcsCisgICAgICAgICdleHRyYScsCisgICAgICAgICdjcmVhdGVfc3lzdGVtJywKKyAgICAgICAgJ2NyZWF0ZV92ZXJzaW9uJywKKyAgICAgICAgJ2V4dHJhY3RfdmVyc2lvbicsCisgICAgICAgICdyZXNlcnZlZCcsCisgICAgICAgICdmbGFnX2JpdHMnLAorICAgICAgICAndm9sdW1lJywKKyAgICAgICAgJ2ludGVybmFsX2F0dHInLAorICAgICAgICAnZXh0ZXJuYWxfYXR0cicsCisgICAgICAgICdoZWFkZXJfb2Zmc2V0JywKKyAgICAgICAgJ0NSQycsCisgICAgICAgICdjb21wcmVzc19zaXplJywKKyAgICAgICAgJ2ZpbGVfc2l6ZScsCisgICAgICAgICdfcmF3X3RpbWUnLAorICAgICkKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlbmFtZT0iTm9OYW1lIiwgZGF0ZV90aW1lPSgxOTgwLDEsMSwwLDAsMCkpOgogICAgICAgICBzZWxmLm9yaWdfZmlsZW5hbWUgPSBmaWxlbmFtZSAgICMgT3JpZ2luYWwgZmlsZSBuYW1lIGluIGFyY2hpdmUKQEAgLTM3Niw3ICszNzYsNyBAQAogICAgICAgICBpZiB6aXA2NDoKICAgICAgICAgICAgIGZtdCA9ICc8SEhRUScKICAgICAgICAgICAgIGV4dHJhID0gZXh0cmEgKyBzdHJ1Y3QucGFjayhmbXQsCi0gICAgICAgICAgICAgICAgICAgIDEsIHN0cnVjdC5jYWxjc2l6ZShmbXQpLTQsIGZpbGVfc2l6ZSwgY29tcHJlc3Nfc2l6ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCBzdHJ1Y3QuY2FsY3NpemUoZm10KS00LCBmaWxlX3NpemUsIGNvbXByZXNzX3NpemUpCiAgICAgICAgIGlmIGZpbGVfc2l6ZSA+IFpJUDY0X0xJTUlUIG9yIGNvbXByZXNzX3NpemUgPiBaSVA2NF9MSU1JVDoKICAgICAgICAgICAgIGlmIG5vdCB6aXA2NDoKICAgICAgICAgICAgICAgICByYWlzZSBMYXJnZVppcEZpbGUoIkZpbGVzaXplIHdvdWxkIHJlcXVpcmUgWklQNjQgZXh0ZW5zaW9ucyIpCkBAIC0zOTUsMTAgKzM5NSwxMCBAQAogICAgICAgICBzZWxmLmNyZWF0ZV92ZXJzaW9uID0gbWF4KG1pbl92ZXJzaW9uLCBzZWxmLmNyZWF0ZV92ZXJzaW9uKQogICAgICAgICBmaWxlbmFtZSwgZmxhZ19iaXRzID0gc2VsZi5fZW5jb2RlRmlsZW5hbWVGbGFncygpCiAgICAgICAgIGhlYWRlciA9IHN0cnVjdC5wYWNrKHN0cnVjdEZpbGVIZWFkZXIsIHN0cmluZ0ZpbGVIZWFkZXIsCi0gICAgICAgICAgICAgICAgIHNlbGYuZXh0cmFjdF92ZXJzaW9uLCBzZWxmLnJlc2VydmVkLCBmbGFnX2JpdHMsCi0gICAgICAgICAgICAgICAgIHNlbGYuY29tcHJlc3NfdHlwZSwgZG9zdGltZSwgZG9zZGF0ZSwgQ1JDLAotICAgICAgICAgICAgICAgICBjb21wcmVzc19zaXplLCBmaWxlX3NpemUsCi0gICAgICAgICAgICAgICAgIGxlbihmaWxlbmFtZSksIGxlbihleHRyYSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZXh0cmFjdF92ZXJzaW9uLCBzZWxmLnJlc2VydmVkLCBmbGFnX2JpdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29tcHJlc3NfdHlwZSwgZG9zdGltZSwgZG9zZGF0ZSwgQ1JDLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wcmVzc19zaXplLCBmaWxlX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbihmaWxlbmFtZSksIGxlbihleHRyYSkpCiAgICAgICAgIHJldHVybiBoZWFkZXIgKyBmaWxlbmFtZSArIGV4dHJhCiAKICAgICBkZWYgX2VuY29kZUZpbGVuYW1lRmxhZ3Moc2VsZik6CkBAIC00MTEsNyArNDExLDcgQEAKICAgICAgICAgIyBUcnkgdG8gZGVjb2RlIHRoZSBleHRyYSBmaWVsZC4KICAgICAgICAgZXh0cmEgPSBzZWxmLmV4dHJhCiAgICAgICAgIHVucGFjayA9IHN0cnVjdC51bnBhY2sKLSAgICAgICAgd2hpbGUgZXh0cmE6CisgICAgICAgIHdoaWxlIGxlbihleHRyYSkgPj0gNDoKICAgICAgICAgICAgIHRwLCBsbiA9IHVucGFjaygnPEhIJywgZXh0cmFbOjRdKQogICAgICAgICAgICAgaWYgdHAgPT0gMToKICAgICAgICAgICAgICAgICBpZiBsbiA+PSAyNDoKQEAgLTQ3NSwxMyArNDc1LDE1IEBACiAgICAgICAgICAgICAgICAgICAgIGNyYyA9ICgoY3JjID4+IDEpICYgMHg3RkZGRkZGRikKICAgICAgICAgICAgIHRhYmxlW2ldID0gY3JjCiAgICAgICAgIHJldHVybiB0YWJsZQotICAgIGNyY3RhYmxlID0gX0dlbmVyYXRlQ1JDVGFibGUoKQorICAgIGNyY3RhYmxlID0gTm9uZQogCiAgICAgZGVmIF9jcmMzMihzZWxmLCBjaCwgY3JjKToKICAgICAgICAgIiIiQ29tcHV0ZSB0aGUgQ1JDMzIgcHJpbWl0aXZlIG9uIG9uZSBieXRlLiIiIgogICAgICAgICByZXR1cm4gKChjcmMgPj4gOCkgJiAweGZmZmZmZikgXiBzZWxmLmNyY3RhYmxlWyhjcmMgXiBjaCkgJiAweGZmXQogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHB3ZCk6CisgICAgICAgIGlmIF9aaXBEZWNyeXB0ZXIuY3JjdGFibGUgaXMgTm9uZToKKyAgICAgICAgICAgIF9aaXBEZWNyeXB0ZXIuY3JjdGFibGUgPSBfWmlwRGVjcnlwdGVyLl9HZW5lcmF0ZUNSQ1RhYmxlKCkKICAgICAgICAgc2VsZi5rZXkwID0gMzA1NDE5ODk2CiAgICAgICAgIHNlbGYua2V5MSA9IDU5MTc1MTA0OQogICAgICAgICBzZWxmLmtleTIgPSA4NzgwODIxOTIKQEAgLTUxMSw3ICs1MTMsNyBAQAogICAgIGRlZiBfaW5pdChzZWxmKToKICAgICAgICAgcHJvcHMgPSBsem1hLl9lbmNvZGVfZmlsdGVyX3Byb3BlcnRpZXMoeydpZCc6IGx6bWEuRklMVEVSX0xaTUExfSkKICAgICAgICAgc2VsZi5fY29tcCA9IGx6bWEuTFpNQUNvbXByZXNzb3IobHptYS5GT1JNQVRfUkFXLCBmaWx0ZXJzPVsKLSAgICAgICAgICAgICAgICBsem1hLl9kZWNvZGVfZmlsdGVyX3Byb3BlcnRpZXMobHptYS5GSUxURVJfTFpNQTEsIHByb3BzKQorICAgICAgICAgICAgbHptYS5fZGVjb2RlX2ZpbHRlcl9wcm9wZXJ0aWVzKGx6bWEuRklMVEVSX0xaTUExLCBwcm9wcykKICAgICAgICAgXSkKICAgICAgICAgcmV0dXJuIHN0cnVjdC5wYWNrKCc8QkJIJywgOSwgNCwgbGVuKHByb3BzKSkgKyBwcm9wcwogCkBAIC01NDMsOCArNTQ1LDggQEAKICAgICAgICAgICAgICAgICByZXR1cm4gYicnCiAKICAgICAgICAgICAgIHNlbGYuX2RlY29tcCA9IGx6bWEuTFpNQURlY29tcHJlc3Nvcihsem1hLkZPUk1BVF9SQVcsIGZpbHRlcnM9WwotICAgICAgICAgICAgICAgICAgICBsem1hLl9kZWNvZGVfZmlsdGVyX3Byb3BlcnRpZXMobHptYS5GSUxURVJfTFpNQTEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdW5jb25zdW1lZFs0OjQgKyBwc2l6ZV0pCisgICAgICAgICAgICAgICAgbHptYS5fZGVjb2RlX2ZpbHRlcl9wcm9wZXJ0aWVzKGx6bWEuRklMVEVSX0xaTUExLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl91bmNvbnN1bWVkWzQ6NCArIHBzaXplXSkKICAgICAgICAgICAgIF0pCiAgICAgICAgICAgICBkYXRhID0gc2VsZi5fdW5jb25zdW1lZFs0ICsgcHNpemU6XQogICAgICAgICAgICAgZGVsIHNlbGYuX3VuY29uc3VtZWQKQEAgLTU4MCwxNSArNTgyLDE1IEBACiAgICAgZWxpZiBjb21wcmVzc2lvbiA9PSBaSVBfREVGTEFURUQ6CiAgICAgICAgIGlmIG5vdCB6bGliOgogICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKAotICAgICAgICAgICAgICAgICAgICAiQ29tcHJlc3Npb24gcmVxdWlyZXMgdGhlIChtaXNzaW5nKSB6bGliIG1vZHVsZSIpCisgICAgICAgICAgICAgICAgIkNvbXByZXNzaW9uIHJlcXVpcmVzIHRoZSAobWlzc2luZykgemxpYiBtb2R1bGUiKQogICAgIGVsaWYgY29tcHJlc3Npb24gPT0gWklQX0JaSVAyOgogICAgICAgICBpZiBub3QgYnoyOgogICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKAotICAgICAgICAgICAgICAgICAgICAiQ29tcHJlc3Npb24gcmVxdWlyZXMgdGhlIChtaXNzaW5nKSBiejIgbW9kdWxlIikKKyAgICAgICAgICAgICAgICAiQ29tcHJlc3Npb24gcmVxdWlyZXMgdGhlIChtaXNzaW5nKSBiejIgbW9kdWxlIikKICAgICBlbGlmIGNvbXByZXNzaW9uID09IFpJUF9MWk1BOgogICAgICAgICBpZiBub3QgbHptYToKICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigKLSAgICAgICAgICAgICAgICAgICAgIkNvbXByZXNzaW9uIHJlcXVpcmVzIHRoZSAobWlzc2luZykgbHptYSBtb2R1bGUiKQorICAgICAgICAgICAgICAgICJDb21wcmVzc2lvbiByZXF1aXJlcyB0aGUgKG1pc3NpbmcpIGx6bWEgbW9kdWxlIikKICAgICBlbHNlOgogICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIlRoYXQgY29tcHJlc3Npb24gbWV0aG9kIGlzIG5vdCBzdXBwb3J0ZWQiKQogCkBAIC01OTYsNyArNTk4LDcgQEAKIGRlZiBfZ2V0X2NvbXByZXNzb3IoY29tcHJlc3NfdHlwZSk6CiAgICAgaWYgY29tcHJlc3NfdHlwZSA9PSBaSVBfREVGTEFURUQ6CiAgICAgICAgIHJldHVybiB6bGliLmNvbXByZXNzb2JqKHpsaWIuWl9ERUZBVUxUX0NPTVBSRVNTSU9OLAotICAgICAgICAgICAgIHpsaWIuREVGTEFURUQsIC0xNSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgemxpYi5ERUZMQVRFRCwgLTE1KQogICAgIGVsaWYgY29tcHJlc3NfdHlwZSA9PSBaSVBfQlpJUDI6CiAgICAgICAgIHJldHVybiBiejIuQloyQ29tcHJlc3NvcigpCiAgICAgZWxpZiBjb21wcmVzc190eXBlID09IFpJUF9MWk1BOgpAQCAtODM2LDggKzgzOCw4IEBACiAgICAgICAgICAgICBuID0gbWF4KG4sIHNlbGYuTUlOX1JFQURfU0laRSkKICAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9kZWNvbXByZXNzb3IuZGVjb21wcmVzcyhkYXRhLCBuKQogICAgICAgICAgICAgc2VsZi5fZW9mID0gKHNlbGYuX2RlY29tcHJlc3Nvci5lb2Ygb3IKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fY29tcHJlc3NfbGVmdCA8PSAwIGFuZAotICAgICAgICAgICAgICAgICAgICBub3Qgc2VsZi5fZGVjb21wcmVzc29yLnVuY29uc3VtZWRfdGFpbCkKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9jb21wcmVzc19sZWZ0IDw9IDAgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgbm90IHNlbGYuX2RlY29tcHJlc3Nvci51bmNvbnN1bWVkX3RhaWwpCiAgICAgICAgICAgICBpZiBzZWxmLl9lb2Y6CiAgICAgICAgICAgICAgICAgZGF0YSArPSBzZWxmLl9kZWNvbXByZXNzb3IuZmx1c2goKQogICAgICAgICBlbHNlOgpAQCAtODc4LDcgKzg4MCw3IEBACiBjbGFzcyBaaXBGaWxlOgogICAgICIiIiBDbGFzcyB3aXRoIG1ldGhvZHMgdG8gb3BlbiwgcmVhZCwgd3JpdGUsIGNsb3NlLCBsaXN0IHppcCBmaWxlcy4KIAotICAgIHogPSBaaXBGaWxlKGZpbGUsIG1vZGU9InIiLCBjb21wcmVzc2lvbj1aSVBfU1RPUkVELCBhbGxvd1ppcDY0PUZhbHNlKQorICAgIHogPSBaaXBGaWxlKGZpbGUsIG1vZGU9InIiLCBjb21wcmVzc2lvbj1aSVBfU1RPUkVELCBhbGxvd1ppcDY0PVRydWUpCiAKICAgICBmaWxlOiBFaXRoZXIgdGhlIHBhdGggdG8gdGhlIGZpbGUsIG9yIGEgZmlsZS1saWtlIG9iamVjdC4KICAgICAgICAgICBJZiBpdCBpcyBhIHBhdGgsIHRoZSBmaWxlIHdpbGwgYmUgb3BlbmVkIGFuZCBjbG9zZWQgYnkgWmlwRmlsZS4KQEAgLTg5NCw3ICs4OTYsNyBAQAogICAgIGZwID0gTm9uZSAgICAgICAgICAgICAgICAgICAjIFNldCBoZXJlIHNpbmNlIF9fZGVsX18gY2hlY2tzIGl0CiAgICAgX3dpbmRvd3NfaWxsZWdhbF9uYW1lX3RyYW5zX3RhYmxlID0gTm9uZQogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGUsIG1vZGU9InIiLCBjb21wcmVzc2lvbj1aSVBfU1RPUkVELCBhbGxvd1ppcDY0PUZhbHNlKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZSwgbW9kZT0iciIsIGNvbXByZXNzaW9uPVpJUF9TVE9SRUQsIGFsbG93WmlwNjQ9VHJ1ZSk6CiAgICAgICAgICIiIk9wZW4gdGhlIFpJUCBmaWxlIHdpdGggbW9kZSByZWFkICJyIiwgd3JpdGUgInciIG9yIGFwcGVuZCAiYSIuIiIiCiAgICAgICAgIGlmIG1vZGUgbm90IGluICgiciIsICJ3IiwgImEiKToKICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignWmlwRmlsZSgpIHJlcXVpcmVzIG1vZGUgInIiLCAidyIsIG9yICJhIicpCkBAIC05MTksNyArOTIxLDcgQEAKICAgICAgICAgICAgIG1vZGVEaWN0ID0geydyJyA6ICdyYicsICd3JzogJ3diJywgJ2EnIDogJ3IrYid9CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc2VsZi5mcCA9IGlvLm9wZW4oZmlsZSwgbW9kZURpY3RbbW9kZV0pCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIGlmIG1vZGUgPT0gJ2EnOgogICAgICAgICAgICAgICAgICAgICBtb2RlID0ga2V5ID0gJ3cnCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuZnAgPSBpby5vcGVuKGZpbGUsIG1vZGVEaWN0W21vZGVdKQpAQCAtOTcwLDcgKzk3Miw3IEBACiAgICAgICAgIGZwID0gc2VsZi5mcAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBlbmRyZWMgPSBfRW5kUmVjRGF0YShmcCkKLSAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcmFpc2UgQmFkWmlwRmlsZSgiRmlsZSBpcyBub3QgYSB6aXAgZmlsZSIpCiAgICAgICAgIGlmIG5vdCBlbmRyZWM6CiAgICAgICAgICAgICByYWlzZSBCYWRaaXBGaWxlKCJGaWxlIGlzIG5vdCBhIHppcCBmaWxlIikKQEAgLTEwMTgsOCArMTAyMCw4IEBACiAgICAgICAgICAgICB4LmNvbW1lbnQgPSBmcC5yZWFkKGNlbnRkaXJbX0NEX0NPTU1FTlRfTEVOR1RIXSkKICAgICAgICAgICAgIHguaGVhZGVyX29mZnNldCA9IGNlbnRkaXJbX0NEX0xPQ0FMX0hFQURFUl9PRkZTRVRdCiAgICAgICAgICAgICAoeC5jcmVhdGVfdmVyc2lvbiwgeC5jcmVhdGVfc3lzdGVtLCB4LmV4dHJhY3RfdmVyc2lvbiwgeC5yZXNlcnZlZCwKLSAgICAgICAgICAgICAgICB4LmZsYWdfYml0cywgeC5jb21wcmVzc190eXBlLCB0LCBkLAotICAgICAgICAgICAgICAgIHguQ1JDLCB4LmNvbXByZXNzX3NpemUsIHguZmlsZV9zaXplKSA9IGNlbnRkaXJbMToxMl0KKyAgICAgICAgICAgICB4LmZsYWdfYml0cywgeC5jb21wcmVzc190eXBlLCB0LCBkLAorICAgICAgICAgICAgIHguQ1JDLCB4LmNvbXByZXNzX3NpemUsIHguZmlsZV9zaXplKSA9IGNlbnRkaXJbMToxMl0KICAgICAgICAgICAgIGlmIHguZXh0cmFjdF92ZXJzaW9uID4gTUFYX0VYVFJBQ1RfVkVSU0lPTjoKICAgICAgICAgICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCJ6aXAgZmlsZSB2ZXJzaW9uICUuMWYiICUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh4LmV4dHJhY3RfdmVyc2lvbiAvIDEwKSkKQEAgLTEwMjcsNyArMTAyOSw3IEBACiAgICAgICAgICAgICAjIENvbnZlcnQgZGF0ZS90aW1lIGNvZGUgdG8gKHllYXIsIG1vbnRoLCBkYXksIGhvdXIsIG1pbiwgc2VjKQogICAgICAgICAgICAgeC5fcmF3X3RpbWUgPSB0CiAgICAgICAgICAgICB4LmRhdGVfdGltZSA9ICggKGQ+PjkpKzE5ODAsIChkPj41KSYweEYsIGQmMHgxRiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Pj4xMSwgKHQ+PjUpJjB4M0YsICh0JjB4MUYpICogMiApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdD4+MTEsICh0Pj41KSYweDNGLCAodCYweDFGKSAqIDIgKQogCiAgICAgICAgICAgICB4Ll9kZWNvZGVFeHRyYSgpCiAgICAgICAgICAgICB4LmhlYWRlcl9vZmZzZXQgPSB4LmhlYWRlcl9vZmZzZXQgKyBjb25jYXQKQEAgLTExMTksMTEgKzExMjEsMTUgQEAKICAgICAgICAgIiIiUmV0dXJuIGZpbGUtbGlrZSBvYmplY3QgZm9yICduYW1lJy4iIiIKICAgICAgICAgaWYgbW9kZSBub3QgaW4gKCJyIiwgIlUiLCAiclUiKToKICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignb3BlbigpIHJlcXVpcmVzIG1vZGUgInIiLCAiVSIsIG9yICJyVSInKQorICAgICAgICBpZiAnVScgaW4gbW9kZToKKyAgICAgICAgICAgIGltcG9ydCB3YXJuaW5ncworICAgICAgICAgICAgd2FybmluZ3Mud2FybigiJ1UnIG1vZGUgaXMgZGVwcmVjYXRlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgMikKICAgICAgICAgaWYgcHdkIGFuZCBub3QgaXNpbnN0YW5jZShwd2QsIGJ5dGVzKToKICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigicHdkOiBleHBlY3RlZCBieXRlcywgZ290ICVzIiAlIHR5cGUocHdkKSkKICAgICAgICAgaWYgbm90IHNlbGYuZnA6CiAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoCi0gICAgICAgICAgICAgICAgICAiQXR0ZW1wdCB0byByZWFkIFpJUCBhcmNoaXZlIHRoYXQgd2FzIGFscmVhZHkgY2xvc2VkIikKKyAgICAgICAgICAgICAgICAiQXR0ZW1wdCB0byByZWFkIFpJUCBhcmNoaXZlIHRoYXQgd2FzIGFscmVhZHkgY2xvc2VkIikKIAogICAgICAgICAjIE9ubHkgb3BlbiBhIG5ldyBmaWxlIGZvciBpbnN0YW5jZXMgd2hlcmUgd2Ugd2VyZSBub3QKICAgICAgICAgIyBnaXZlbiBhIGZpbGUgb2JqZWN0IGluIHRoZSBjb25zdHJ1Y3RvcgpAQCAtMTI5NiwyMiArMTMwMiwyNiBAQAogICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCd3cml0ZSgpIHJlcXVpcmVzIG1vZGUgInciIG9yICJhIicpCiAgICAgICAgIGlmIG5vdCBzZWxmLmZwOgogICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKAotICAgICAgICAgICAgICAgICAgIkF0dGVtcHQgdG8gd3JpdGUgWklQIGFyY2hpdmUgdGhhdCB3YXMgYWxyZWFkeSBjbG9zZWQiKQorICAgICAgICAgICAgICAgICJBdHRlbXB0IHRvIHdyaXRlIFpJUCBhcmNoaXZlIHRoYXQgd2FzIGFscmVhZHkgY2xvc2VkIikKICAgICAgICAgX2NoZWNrX2NvbXByZXNzaW9uKHppbmZvLmNvbXByZXNzX3R5cGUpCi0gICAgICAgIGlmIHppbmZvLmZpbGVfc2l6ZSA+IFpJUDY0X0xJTUlUOgotICAgICAgICAgICAgaWYgbm90IHNlbGYuX2FsbG93WmlwNjQ6Ci0gICAgICAgICAgICAgICAgcmFpc2UgTGFyZ2VaaXBGaWxlKCJGaWxlc2l6ZSB3b3VsZCByZXF1aXJlIFpJUDY0IGV4dGVuc2lvbnMiKQotICAgICAgICBpZiB6aW5mby5oZWFkZXJfb2Zmc2V0ID4gWklQNjRfTElNSVQ6Ci0gICAgICAgICAgICBpZiBub3Qgc2VsZi5fYWxsb3daaXA2NDoKLSAgICAgICAgICAgICAgICByYWlzZSBMYXJnZVppcEZpbGUoCi0gICAgICAgICAgICAgICAgICAgICAgIlppcGZpbGUgc2l6ZSB3b3VsZCByZXF1aXJlIFpJUDY0IGV4dGVuc2lvbnMiKQorICAgICAgICBpZiBub3Qgc2VsZi5fYWxsb3daaXA2NDoKKyAgICAgICAgICAgIHJlcXVpcmVzX3ppcDY0ID0gTm9uZQorICAgICAgICAgICAgaWYgbGVuKHNlbGYuZmlsZWxpc3QpID49IFpJUF9GSUxFQ09VTlRfTElNSVQ6CisgICAgICAgICAgICAgICAgcmVxdWlyZXNfemlwNjQgPSAiRmlsZXMgY291bnQiCisgICAgICAgICAgICBlbGlmIHppbmZvLmZpbGVfc2l6ZSA+IFpJUDY0X0xJTUlUOgorICAgICAgICAgICAgICAgIHJlcXVpcmVzX3ppcDY0ID0gIkZpbGVzaXplIgorICAgICAgICAgICAgZWxpZiB6aW5mby5oZWFkZXJfb2Zmc2V0ID4gWklQNjRfTElNSVQ6CisgICAgICAgICAgICAgICAgcmVxdWlyZXNfemlwNjQgPSAiWmlwZmlsZSBzaXplIgorICAgICAgICAgICAgaWYgcmVxdWlyZXNfemlwNjQ6CisgICAgICAgICAgICAgICAgcmFpc2UgTGFyZ2VaaXBGaWxlKHJlcXVpcmVzX3ppcDY0ICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiB3b3VsZCByZXF1aXJlIFpJUDY0IGV4dGVuc2lvbnMiKQogCiAgICAgZGVmIHdyaXRlKHNlbGYsIGZpbGVuYW1lLCBhcmNuYW1lPU5vbmUsIGNvbXByZXNzX3R5cGU9Tm9uZSk6CiAgICAgICAgICIiIlB1dCB0aGUgYnl0ZXMgZnJvbSBmaWxlbmFtZSBpbnRvIHRoZSBhcmNoaXZlIHVuZGVyIHRoZSBuYW1lCiAgICAgICAgIGFyY25hbWUuIiIiCiAgICAgICAgIGlmIG5vdCBzZWxmLmZwOgogICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKAotICAgICAgICAgICAgICAgICAgIkF0dGVtcHQgdG8gd3JpdGUgdG8gWklQIGFyY2hpdmUgdGhhdCB3YXMgYWxyZWFkeSBjbG9zZWQiKQorICAgICAgICAgICAgICAgICJBdHRlbXB0IHRvIHdyaXRlIHRvIFpJUCBhcmNoaXZlIHRoYXQgd2FzIGFscmVhZHkgY2xvc2VkIikKIAogICAgICAgICBzdCA9IG9zLnN0YXQoZmlsZW5hbWUpCiAgICAgICAgIGlzZGlyID0gc3RhdC5TX0lTRElSKHN0LnN0X21vZGUpCkBAIC0xMzI3LDcgKzEzMzcsOSBAQAogICAgICAgICAgICAgYXJjbmFtZSArPSAnLycKICAgICAgICAgemluZm8gPSBaaXBJbmZvKGFyY25hbWUsIGRhdGVfdGltZSkKICAgICAgICAgemluZm8uZXh0ZXJuYWxfYXR0ciA9IChzdFswXSAmIDB4RkZGRikgPDwgMTYgICAgICAjIFVuaXggYXR0cmlidXRlcwotICAgICAgICBpZiBjb21wcmVzc190eXBlIGlzIE5vbmU6CisgICAgICAgIGlmIGlzZGlyOgorICAgICAgICAgICAgemluZm8uY29tcHJlc3NfdHlwZSA9IFpJUF9TVE9SRUQKKyAgICAgICAgZWxpZiBjb21wcmVzc190eXBlIGlzIE5vbmU6CiAgICAgICAgICAgICB6aW5mby5jb21wcmVzc190eXBlID0gc2VsZi5jb21wcmVzc2lvbgogICAgICAgICBlbHNlOgogICAgICAgICAgICAgemluZm8uY29tcHJlc3NfdHlwZSA9IGNvbXByZXNzX3R5cGUKQEAgLTEzNDYsNiArMTM1OCw3IEBACiAgICAgICAgICAgICB6aW5mby5maWxlX3NpemUgPSAwCiAgICAgICAgICAgICB6aW5mby5jb21wcmVzc19zaXplID0gMAogICAgICAgICAgICAgemluZm8uQ1JDID0gMAorICAgICAgICAgICAgemluZm8uZXh0ZXJuYWxfYXR0ciB8PSAweDEwICAjIE1TLURPUyBkaXJlY3RvcnkgZmxhZwogICAgICAgICAgICAgc2VsZi5maWxlbGlzdC5hcHBlbmQoemluZm8pCiAgICAgICAgICAgICBzZWxmLk5hbWVUb0luZm9bemluZm8uZmlsZW5hbWVdID0gemluZm8KICAgICAgICAgICAgIHNlbGYuZnAud3JpdGUoemluZm8uRmlsZUhlYWRlcihGYWxzZSkpCkBAIC0xMzU4LDcgKzEzNzEsNyBAQAogICAgICAgICAgICAgemluZm8uY29tcHJlc3Nfc2l6ZSA9IGNvbXByZXNzX3NpemUgPSAwCiAgICAgICAgICAgICAjIENvbXByZXNzZWQgc2l6ZSBjYW4gYmUgbGFyZ2VyIHRoYW4gdW5jb21wcmVzc2VkIHNpemUKICAgICAgICAgICAgIHppcDY0ID0gc2VsZi5fYWxsb3daaXA2NCBhbmQgXAotICAgICAgICAgICAgICAgICAgICB6aW5mby5maWxlX3NpemUgKiAxLjA1ID4gWklQNjRfTElNSVQKKyAgICAgICAgICAgICAgICB6aW5mby5maWxlX3NpemUgKiAxLjA1ID4gWklQNjRfTElNSVQKICAgICAgICAgICAgIHNlbGYuZnAud3JpdGUoemluZm8uRmlsZUhlYWRlcih6aXA2NCkpCiAgICAgICAgICAgICBmaWxlX3NpemUgPSAwCiAgICAgICAgICAgICB3aGlsZSAxOgpAQCAtMTQwNiwxMyArMTQxOSwxNyBAQAogICAgICAgICAgICAgemluZm8gPSBaaXBJbmZvKGZpbGVuYW1lPXppbmZvX29yX2FyY25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZV90aW1lPXRpbWUubG9jYWx0aW1lKHRpbWUudGltZSgpKVs6Nl0pCiAgICAgICAgICAgICB6aW5mby5jb21wcmVzc190eXBlID0gc2VsZi5jb21wcmVzc2lvbgotICAgICAgICAgICAgemluZm8uZXh0ZXJuYWxfYXR0ciA9IDBvNjAwIDw8IDE2CisgICAgICAgICAgICBpZiB6aW5mby5maWxlbmFtZVstMV0gPT0gJy8nOgorICAgICAgICAgICAgICAgIHppbmZvLmV4dGVybmFsX2F0dHIgPSAwbzQwNzc1IDw8IDE2ICAgIyBkcnd4cnd4ci14CisgICAgICAgICAgICAgICAgemluZm8uZXh0ZXJuYWxfYXR0ciB8PSAweDEwICAgICAgICAgICAjIE1TLURPUyBkaXJlY3RvcnkgZmxhZworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB6aW5mby5leHRlcm5hbF9hdHRyID0gMG82MDAgPDwgMTYgICAgICMgP3J3LS0tLS0tLQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgemluZm8gPSB6aW5mb19vcl9hcmNuYW1lCiAKICAgICAgICAgaWYgbm90IHNlbGYuZnA6CiAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoCi0gICAgICAgICAgICAgICAgICAiQXR0ZW1wdCB0byB3cml0ZSB0byBaSVAgYXJjaGl2ZSB0aGF0IHdhcyBhbHJlYWR5IGNsb3NlZCIpCisgICAgICAgICAgICAgICAgIkF0dGVtcHQgdG8gd3JpdGUgdG8gWklQIGFyY2hpdmUgdGhhdCB3YXMgYWxyZWFkeSBjbG9zZWQiKQogCiAgICAgICAgIHppbmZvLmZpbGVfc2l6ZSA9IGxlbihkYXRhKSAgICAgICAgICAgICMgVW5jb21wcmVzc2VkIHNpemUKICAgICAgICAgemluZm8uaGVhZGVyX29mZnNldCA9IHNlbGYuZnAudGVsbCgpICAgICMgU3RhcnQgb2YgaGVhZGVyIGRhdGEKQEAgLTE0MzIsNyArMTQ0OSw3IEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICB6aW5mby5jb21wcmVzc19zaXplID0gemluZm8uZmlsZV9zaXplCiAgICAgICAgIHppcDY0ID0gemluZm8uZmlsZV9zaXplID4gWklQNjRfTElNSVQgb3IgXAotICAgICAgICAgICAgICAgIHppbmZvLmNvbXByZXNzX3NpemUgPiBaSVA2NF9MSU1JVAorICAgICAgICAgICAgemluZm8uY29tcHJlc3Nfc2l6ZSA+IFpJUDY0X0xJTUlUCiAgICAgICAgIGlmIHppcDY0IGFuZCBub3Qgc2VsZi5fYWxsb3daaXA2NDoKICAgICAgICAgICAgIHJhaXNlIExhcmdlWmlwRmlsZSgiRmlsZXNpemUgd291bGQgcmVxdWlyZSBaSVA2NCBleHRlbnNpb25zIikKICAgICAgICAgc2VsZi5mcC53cml0ZSh6aW5mby5GaWxlSGVhZGVyKHppcDY0KSkKQEAgLTE0NDEsNyArMTQ1OCw3IEBACiAgICAgICAgICAgICAjIFdyaXRlIENSQyBhbmQgZmlsZSBzaXplcyBhZnRlciB0aGUgZmlsZSBkYXRhCiAgICAgICAgICAgICBmbXQgPSAnPExRUScgaWYgemlwNjQgZWxzZSAnPExMTCcKICAgICAgICAgICAgIHNlbGYuZnAud3JpdGUoc3RydWN0LnBhY2soZm10LCB6aW5mby5DUkMsIHppbmZvLmNvbXByZXNzX3NpemUsCi0gICAgICAgICAgICAgICAgICB6aW5mby5maWxlX3NpemUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6aW5mby5maWxlX3NpemUpKQogICAgICAgICBzZWxmLmZwLmZsdXNoKCkKICAgICAgICAgc2VsZi5maWxlbGlzdC5hcHBlbmQoemluZm8pCiAgICAgICAgIHNlbGYuTmFtZVRvSW5mb1t6aW5mby5maWxlbmFtZV0gPSB6aW5mbwpAQCAtMTQ1OCwxNiArMTQ3NSwxNCBAQAogCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGlmIHNlbGYubW9kZSBpbiAoInciLCAiYSIpIGFuZCBzZWxmLl9kaWRNb2RpZnk6ICMgd3JpdGUgZW5kaW5nIHJlY29yZHMKLSAgICAgICAgICAgICAgICBjb3VudCA9IDAKICAgICAgICAgICAgICAgICBwb3MxID0gc2VsZi5mcC50ZWxsKCkKICAgICAgICAgICAgICAgICBmb3IgemluZm8gaW4gc2VsZi5maWxlbGlzdDogICAgICAgICAjIHdyaXRlIGNlbnRyYWwgZGlyZWN0b3J5Ci0gICAgICAgICAgICAgICAgICAgIGNvdW50ID0gY291bnQgKyAxCiAgICAgICAgICAgICAgICAgICAgIGR0ID0gemluZm8uZGF0ZV90aW1lCiAgICAgICAgICAgICAgICAgICAgIGRvc2RhdGUgPSAoZHRbMF0gLSAxOTgwKSA8PCA5IHwgZHRbMV0gPDwgNSB8IGR0WzJdCiAgICAgICAgICAgICAgICAgICAgIGRvc3RpbWUgPSBkdFszXSA8PCAxMSB8IGR0WzRdIDw8IDUgfCAoZHRbNV0gLy8gMikKICAgICAgICAgICAgICAgICAgICAgZXh0cmEgPSBbXQogICAgICAgICAgICAgICAgICAgICBpZiB6aW5mby5maWxlX3NpemUgPiBaSVA2NF9MSU1JVCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgemluZm8uY29tcHJlc3Nfc2l6ZSA+IFpJUDY0X0xJTUlUOgorICAgICAgICAgICAgICAgICAgICAgICBvciB6aW5mby5jb21wcmVzc19zaXplID4gWklQNjRfTElNSVQ6CiAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYS5hcHBlbmQoemluZm8uZmlsZV9zaXplKQogICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEuYXBwZW5kKHppbmZvLmNvbXByZXNzX3NpemUpCiAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX3NpemUgPSAweGZmZmZmZmZmCkBAIC0xNDg3LDggKzE1MDIsOCBAQAogICAgICAgICAgICAgICAgICAgICBpZiBleHRyYToKICAgICAgICAgICAgICAgICAgICAgICAgICMgQXBwZW5kIGEgWklQNjQgZmllbGQgdG8gdGhlIGV4dHJhJ3MKICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhX2RhdGEgPSBzdHJ1Y3QucGFjaygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxISCcgKyAnUScqbGVuKGV4dHJhKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgOCpsZW4oZXh0cmEpLCAqZXh0cmEpICsgZXh0cmFfZGF0YQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8SEgnICsgJ1EnKmxlbihleHRyYSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgOCpsZW4oZXh0cmEpLCAqZXh0cmEpICsgZXh0cmFfZGF0YQogCiAgICAgICAgICAgICAgICAgICAgICAgICBtaW5fdmVyc2lvbiA9IFpJUDY0X1ZFUlNJT04KIApAQCAtMTUwMiwyMSArMTUxNywyMSBAQAogICAgICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSwgZmxhZ19iaXRzID0gemluZm8uX2VuY29kZUZpbGVuYW1lRmxhZ3MoKQogICAgICAgICAgICAgICAgICAgICAgICAgY2VudGRpciA9IHN0cnVjdC5wYWNrKHN0cnVjdENlbnRyYWxEaXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nQ2VudHJhbERpciwgY3JlYXRlX3ZlcnNpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgemluZm8uY3JlYXRlX3N5c3RlbSwgZXh0cmFjdF92ZXJzaW9uLCB6aW5mby5yZXNlcnZlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFnX2JpdHMsIHppbmZvLmNvbXByZXNzX3R5cGUsIGRvc3RpbWUsIGRvc2RhdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgemluZm8uQ1JDLCBjb21wcmVzc19zaXplLCBmaWxlX3NpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuKGZpbGVuYW1lKSwgbGVuKGV4dHJhX2RhdGEpLCBsZW4oemluZm8uY29tbWVudCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgemluZm8uaW50ZXJuYWxfYXR0ciwgemluZm8uZXh0ZXJuYWxfYXR0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJfb2Zmc2V0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ0NlbnRyYWxEaXIsIGNyZWF0ZV92ZXJzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHppbmZvLmNyZWF0ZV9zeXN0ZW0sIGV4dHJhY3RfdmVyc2lvbiwgemluZm8ucmVzZXJ2ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ19iaXRzLCB6aW5mby5jb21wcmVzc190eXBlLCBkb3N0aW1lLCBkb3NkYXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHppbmZvLkNSQywgY29tcHJlc3Nfc2l6ZSwgZmlsZV9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbihmaWxlbmFtZSksIGxlbihleHRyYV9kYXRhKSwgbGVuKHppbmZvLmNvbW1lbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIHppbmZvLmludGVybmFsX2F0dHIsIHppbmZvLmV4dGVybmFsX2F0dHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyX29mZnNldCkKICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IERlcHJlY2F0aW9uV2FybmluZzoKICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KChzdHJ1Y3RDZW50cmFsRGlyLCBzdHJpbmdDZW50cmFsRGlyLCBjcmVhdGVfdmVyc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB6aW5mby5jcmVhdGVfc3lzdGVtLCBleHRyYWN0X3ZlcnNpb24sIHppbmZvLnJlc2VydmVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHppbmZvLmZsYWdfYml0cywgemluZm8uY29tcHJlc3NfdHlwZSwgZG9zdGltZSwgZG9zZGF0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB6aW5mby5DUkMsIGNvbXByZXNzX3NpemUsIGZpbGVfc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4oemluZm8uZmlsZW5hbWUpLCBsZW4oZXh0cmFfZGF0YSksIGxlbih6aW5mby5jb21tZW50KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCB6aW5mby5pbnRlcm5hbF9hdHRyLCB6aW5mby5leHRlcm5hbF9hdHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcl9vZmZzZXQpLCBmaWxlPXN5cy5zdGRlcnIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgemluZm8uY3JlYXRlX3N5c3RlbSwgZXh0cmFjdF92ZXJzaW9uLCB6aW5mby5yZXNlcnZlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6aW5mby5mbGFnX2JpdHMsIHppbmZvLmNvbXByZXNzX3R5cGUsIGRvc3RpbWUsIGRvc2RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgemluZm8uQ1JDLCBjb21wcmVzc19zaXplLCBmaWxlX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuKHppbmZvLmZpbGVuYW1lKSwgbGVuKGV4dHJhX2RhdGEpLCBsZW4oemluZm8uY29tbWVudCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgemluZm8uaW50ZXJuYWxfYXR0ciwgemluZm8uZXh0ZXJuYWxfYXR0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJfb2Zmc2V0KSwgZmlsZT1zeXMuc3RkZXJyKQogICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKICAgICAgICAgICAgICAgICAgICAgc2VsZi5mcC53cml0ZShjZW50ZGlyKQogICAgICAgICAgICAgICAgICAgICBzZWxmLmZwLndyaXRlKGZpbGVuYW1lKQpAQCAtMTUyNSwzMCArMTU0MCwzOCBAQAogCiAgICAgICAgICAgICAgICAgcG9zMiA9IHNlbGYuZnAudGVsbCgpCiAgICAgICAgICAgICAgICAgIyBXcml0ZSBlbmQtb2YtemlwLWFyY2hpdmUgcmVjb3JkCi0gICAgICAgICAgICAgICAgY2VudERpckNvdW50ID0gY291bnQKKyAgICAgICAgICAgICAgICBjZW50RGlyQ291bnQgPSBsZW4oc2VsZi5maWxlbGlzdCkKICAgICAgICAgICAgICAgICBjZW50RGlyU2l6ZSA9IHBvczIgLSBwb3MxCiAgICAgICAgICAgICAgICAgY2VudERpck9mZnNldCA9IHBvczEKLSAgICAgICAgICAgICAgICBpZiAoY2VudERpckNvdW50ID49IFpJUF9GSUxFQ09VTlRfTElNSVQgb3IKLSAgICAgICAgICAgICAgICAgICAgY2VudERpck9mZnNldCA+IFpJUDY0X0xJTUlUIG9yCi0gICAgICAgICAgICAgICAgICAgIGNlbnREaXJTaXplID4gWklQNjRfTElNSVQpOgorICAgICAgICAgICAgICAgIHJlcXVpcmVzX3ppcDY0ID0gTm9uZQorICAgICAgICAgICAgICAgIGlmIGNlbnREaXJDb3VudCA+IFpJUF9GSUxFQ09VTlRfTElNSVQ6CisgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVzX3ppcDY0ID0gIkZpbGVzIGNvdW50IgorICAgICAgICAgICAgICAgIGVsaWYgY2VudERpck9mZnNldCA+IFpJUDY0X0xJTUlUOgorICAgICAgICAgICAgICAgICAgICByZXF1aXJlc196aXA2NCA9ICJDZW50cmFsIGRpcmVjdG9yeSBvZmZzZXQiCisgICAgICAgICAgICAgICAgZWxpZiBjZW50RGlyU2l6ZSA+IFpJUDY0X0xJTUlUOgorICAgICAgICAgICAgICAgICAgICByZXF1aXJlc196aXA2NCA9ICJDZW50cmFsIGRpcmVjdG9yeSBzaXplIgorICAgICAgICAgICAgICAgIGlmIHJlcXVpcmVzX3ppcDY0OgogICAgICAgICAgICAgICAgICAgICAjIE5lZWQgdG8gd3JpdGUgdGhlIFpJUDY0IGVuZC1vZi1hcmNoaXZlIHJlY29yZHMKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuX2FsbG93WmlwNjQ6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBMYXJnZVppcEZpbGUocmVxdWlyZXNfemlwNjQgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgd291bGQgcmVxdWlyZSBaSVA2NCBleHRlbnNpb25zIikKICAgICAgICAgICAgICAgICAgICAgemlwNjRlbmRyZWMgPSBzdHJ1Y3QucGFjaygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3RFbmRBcmNoaXZlNjQsIHN0cmluZ0VuZEFyY2hpdmU2NCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA0NCwgNDUsIDQ1LCAwLCAwLCBjZW50RGlyQ291bnQsIGNlbnREaXJDb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZW50RGlyU2l6ZSwgY2VudERpck9mZnNldCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdEVuZEFyY2hpdmU2NCwgc3RyaW5nRW5kQXJjaGl2ZTY0LAorICAgICAgICAgICAgICAgICAgICAgICAgNDQsIDQ1LCA0NSwgMCwgMCwgY2VudERpckNvdW50LCBjZW50RGlyQ291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICBjZW50RGlyU2l6ZSwgY2VudERpck9mZnNldCkKICAgICAgICAgICAgICAgICAgICAgc2VsZi5mcC53cml0ZSh6aXA2NGVuZHJlYykKIAogICAgICAgICAgICAgICAgICAgICB6aXA2NGxvY3JlYyA9IHN0cnVjdC5wYWNrKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdEVuZEFyY2hpdmU2NExvY2F0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nRW5kQXJjaGl2ZTY0TG9jYXRvciwgMCwgcG9zMiwgMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdEVuZEFyY2hpdmU2NExvY2F0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmdFbmRBcmNoaXZlNjRMb2NhdG9yLCAwLCBwb3MyLCAxKQogICAgICAgICAgICAgICAgICAgICBzZWxmLmZwLndyaXRlKHppcDY0bG9jcmVjKQogICAgICAgICAgICAgICAgICAgICBjZW50RGlyQ291bnQgPSBtaW4oY2VudERpckNvdW50LCAweEZGRkYpCiAgICAgICAgICAgICAgICAgICAgIGNlbnREaXJTaXplID0gbWluKGNlbnREaXJTaXplLCAweEZGRkZGRkZGKQogICAgICAgICAgICAgICAgICAgICBjZW50RGlyT2Zmc2V0ID0gbWluKGNlbnREaXJPZmZzZXQsIDB4RkZGRkZGRkYpCiAKICAgICAgICAgICAgICAgICBlbmRyZWMgPSBzdHJ1Y3QucGFjayhzdHJ1Y3RFbmRBcmNoaXZlLCBzdHJpbmdFbmRBcmNoaXZlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgY2VudERpckNvdW50LCBjZW50RGlyQ291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZW50RGlyU2l6ZSwgY2VudERpck9mZnNldCwgbGVuKHNlbGYuX2NvbW1lbnQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIGNlbnREaXJDb3VudCwgY2VudERpckNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbnREaXJTaXplLCBjZW50RGlyT2Zmc2V0LCBsZW4oc2VsZi5fY29tbWVudCkpCiAgICAgICAgICAgICAgICAgc2VsZi5mcC53cml0ZShlbmRyZWMpCiAgICAgICAgICAgICAgICAgc2VsZi5mcC53cml0ZShzZWxmLl9jb21tZW50KQogICAgICAgICAgICAgICAgIHNlbGYuZnAuZmx1c2goKQpAQCAtMTU2MywxMiArMTU4NiwxMiBAQAogICAgICIiIkNsYXNzIHRvIGNyZWF0ZSBaSVAgYXJjaGl2ZXMgd2l0aCBQeXRob24gbGlicmFyeSBmaWxlcyBhbmQgcGFja2FnZXMuIiIiCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZSwgbW9kZT0iciIsIGNvbXByZXNzaW9uPVpJUF9TVE9SRUQsCi0gICAgICAgICAgICAgICAgIGFsbG93WmlwNjQ9RmFsc2UsIG9wdGltaXplPS0xKToKKyAgICAgICAgICAgICAgICAgYWxsb3daaXA2ND1UcnVlLCBvcHRpbWl6ZT0tMSk6CiAgICAgICAgIFppcEZpbGUuX19pbml0X18oc2VsZiwgZmlsZSwgbW9kZT1tb2RlLCBjb21wcmVzc2lvbj1jb21wcmVzc2lvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd1ppcDY0PWFsbG93WmlwNjQpCiAgICAgICAgIHNlbGYuX29wdGltaXplID0gb3B0aW1pemUKIAotICAgIGRlZiB3cml0ZXB5KHNlbGYsIHBhdGhuYW1lLCBiYXNlbmFtZT0iIik6CisgICAgZGVmIHdyaXRlcHkoc2VsZiwgcGF0aG5hbWUsIGJhc2VuYW1lPSIiLCBmaWx0ZXJmdW5jPU5vbmUpOgogICAgICAgICAiIiJBZGQgYWxsIGZpbGVzIGZyb20gInBhdGhuYW1lIiB0byB0aGUgWklQIGFyY2hpdmUuCiAKICAgICAgICAgSWYgcGF0aG5hbWUgaXMgYSBwYWNrYWdlIGRpcmVjdG9yeSwgc2VhcmNoIHRoZSBkaXJlY3RvcnkgYW5kCkBAIC0xNTc5LDcgKzE2MDIsMTQgQEAKICAgICAgICAgYXJjaGl2ZS4gIEFkZGVkIG1vZHVsZXMgYXJlIGFsd2F5cyBtb2R1bGUucHlvIG9yIG1vZHVsZS5weWMuCiAgICAgICAgIFRoaXMgbWV0aG9kIHdpbGwgY29tcGlsZSB0aGUgbW9kdWxlLnB5IGludG8gbW9kdWxlLnB5YyBpZgogICAgICAgICBuZWNlc3NhcnkuCisgICAgICAgIElmIGZpbHRlcmZ1bmMocGF0aG5hbWUpIGlzIGdpdmVuLCBpdCBpcyBjYWxsZWQgd2l0aCBldmVyeSBhcmd1bWVudC4KKyAgICAgICAgV2hlbiBpdCBpcyBGYWxzZSwgdGhlIGZpbGUgb3IgZGlyZWN0b3J5IGlzIHNraXBwZWQuCiAgICAgICAgICIiIgorICAgICAgICBpZiBmaWx0ZXJmdW5jIGFuZCBub3QgZmlsdGVyZnVuYyhwYXRobmFtZSk6CisgICAgICAgICAgICBpZiBzZWxmLmRlYnVnOgorICAgICAgICAgICAgICAgIGxhYmVsID0gJ3BhdGgnIGlmIG9zLnBhdGguaXNkaXIocGF0aG5hbWUpIGVsc2UgJ2ZpbGUnCisgICAgICAgICAgICAgICAgcHJpbnQoJyVzICIlcyIgc2tpcHBlZCBieSBmaWx0ZXJmdW5jJyAlIChsYWJlbCwgcGF0aG5hbWUpKQorICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIGRpciwgbmFtZSA9IG9zLnBhdGguc3BsaXQocGF0aG5hbWUpCiAgICAgICAgIGlmIG9zLnBhdGguaXNkaXIocGF0aG5hbWUpOgogICAgICAgICAgICAgaW5pdG5hbWUgPSBvcy5wYXRoLmpvaW4ocGF0aG5hbWUsICJfX2luaXRfXy5weSIpCkBAIC0xNjA0LDEwICsxNjM0LDE1IEBACiAgICAgICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNkaXIocGF0aCk6CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4ocGF0aCwgIl9faW5pdF9fLnB5IikpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgVGhpcyBpcyBhIHBhY2thZ2UgZGlyZWN0b3J5LCBhZGQgaXQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLndyaXRlcHkocGF0aCwgYmFzZW5hbWUpICAjIFJlY3Vyc2l2ZSBjYWxsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi53cml0ZXB5KHBhdGgsIGJhc2VuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJmdW5jPWZpbHRlcmZ1bmMpICAjIFJlY3Vyc2l2ZSBjYWxsCiAgICAgICAgICAgICAgICAgICAgIGVsaWYgZXh0ID09ICIucHkiOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZmlsdGVyZnVuYyBhbmQgbm90IGZpbHRlcmZ1bmMocGF0aCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5kZWJ1ZzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoJ2ZpbGUgIiVzIiBza2lwcGVkIGJ5IGZpbHRlcmZ1bmMnICUgcGF0aCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgICAgICAgICAgICAgZm5hbWUsIGFyY25hbWUgPSBzZWxmLl9nZXRfY29kZW5hbWUocGF0aFswOi0zXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZW5hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlbmFtZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuZGVidWc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoIkFkZGluZyIsIGFyY25hbWUpCiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLndyaXRlKGZuYW1lLCBhcmNuYW1lKQpAQCAtMTYxOSwxNSArMTY1NCwxOSBAQAogICAgICAgICAgICAgICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKHBhdGhuYW1lLCBmaWxlbmFtZSkKICAgICAgICAgICAgICAgICAgICAgcm9vdCwgZXh0ID0gb3MucGF0aC5zcGxpdGV4dChmaWxlbmFtZSkKICAgICAgICAgICAgICAgICAgICAgaWYgZXh0ID09ICIucHkiOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZmlsdGVyZnVuYyBhbmQgbm90IGZpbHRlcmZ1bmMocGF0aCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5kZWJ1ZzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoJ2ZpbGUgIiVzIiBza2lwcGVkIGJ5IGZpbHRlcmZ1bmMnICUgcGF0aCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgICAgICAgICAgICAgZm5hbWUsIGFyY25hbWUgPSBzZWxmLl9nZXRfY29kZW5hbWUocGF0aFswOi0zXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZW5hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlbmFtZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuZGVidWc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoIkFkZGluZyIsIGFyY25hbWUpCiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLndyaXRlKGZuYW1lLCBhcmNuYW1lKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgaWYgcGF0aG5hbWVbLTM6XSAhPSAiLnB5IjoKICAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoCi0gICAgICAgICAgICAgICAgICAgICAgJ0ZpbGVzIGFkZGVkIHdpdGggd3JpdGVweSgpIG11c3QgZW5kIHdpdGggIi5weSInKQorICAgICAgICAgICAgICAgICAgICAnRmlsZXMgYWRkZWQgd2l0aCB3cml0ZXB5KCkgbXVzdCBlbmQgd2l0aCAiLnB5IicpCiAgICAgICAgICAgICBmbmFtZSwgYXJjbmFtZSA9IHNlbGYuX2dldF9jb2RlbmFtZShwYXRobmFtZVswOi0zXSwgYmFzZW5hbWUpCiAgICAgICAgICAgICBpZiBzZWxmLmRlYnVnOgogICAgICAgICAgICAgICAgIHByaW50KCJBZGRpbmcgZmlsZSIsIGFyY25hbWUpCkBAIC0xNjU0LDggKzE2OTMsOCBAQAogICAgICAgICBmaWxlX3B5ICA9IHBhdGhuYW1lICsgIi5weSIKICAgICAgICAgZmlsZV9weWMgPSBwYXRobmFtZSArICIucHljIgogICAgICAgICBmaWxlX3B5byA9IHBhdGhuYW1lICsgIi5weW8iCi0gICAgICAgIHB5Y2FjaGVfcHljID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKGZpbGVfcHksIFRydWUpCi0gICAgICAgIHB5Y2FjaGVfcHlvID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKGZpbGVfcHksIEZhbHNlKQorICAgICAgICBweWNhY2hlX3B5YyA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKGZpbGVfcHksIFRydWUpCisgICAgICAgIHB5Y2FjaGVfcHlvID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoZmlsZV9weSwgRmFsc2UpCiAgICAgICAgIGlmIHNlbGYuX29wdGltaXplID09IC0xOgogICAgICAgICAgICAgIyBsZWdhY3kgbW9kZTogdXNlIHdoYXRldmVyIGZpbGUgaXMgcHJlc2VudAogICAgICAgICAgICAgaWYgKG9zLnBhdGguaXNmaWxlKGZpbGVfcHlvKSBhbmQKQEAgLTE3NDIsMTggKzE3ODEsNyBAQAogICAgICAgICAgICAgc3lzLmV4aXQoMSkKIAogICAgICAgICB3aXRoIFppcEZpbGUoYXJnc1sxXSwgJ3InKSBhcyB6ZjoKLSAgICAgICAgICAgIG91dCA9IGFyZ3NbMl0KLSAgICAgICAgICAgIGZvciBwYXRoIGluIHpmLm5hbWVsaXN0KCk6Ci0gICAgICAgICAgICAgICAgaWYgcGF0aC5zdGFydHN3aXRoKCcuLycpOgotICAgICAgICAgICAgICAgICAgICB0Z3QgPSBvcy5wYXRoLmpvaW4ob3V0LCBwYXRoWzI6XSkKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICB0Z3QgPSBvcy5wYXRoLmpvaW4ob3V0LCBwYXRoKQotCi0gICAgICAgICAgICAgICAgdGd0ZGlyID0gb3MucGF0aC5kaXJuYW1lKHRndCkKLSAgICAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHModGd0ZGlyKToKLSAgICAgICAgICAgICAgICAgICAgb3MubWFrZWRpcnModGd0ZGlyKQotICAgICAgICAgICAgICAgIHdpdGggb3Blbih0Z3QsICd3YicpIGFzIGZwOgotICAgICAgICAgICAgICAgICAgICBmcC53cml0ZSh6Zi5yZWFkKHBhdGgpKQorICAgICAgICAgICAgemYuZXh0cmFjdGFsbChhcmdzWzJdKQogCiAgICAgZWxpZiBhcmdzWzBdID09ICctYyc6CiAgICAgICAgIGlmIGxlbihhcmdzKSA8IDM6CkBAIC0xNzY0LDE0ICsxNzkyLDIxIEBACiAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShwYXRoKToKICAgICAgICAgICAgICAgICB6Zi53cml0ZShwYXRoLCB6aXBwYXRoLCBaSVBfREVGTEFURUQpCiAgICAgICAgICAgICBlbGlmIG9zLnBhdGguaXNkaXIocGF0aCk6CisgICAgICAgICAgICAgICAgaWYgemlwcGF0aDoKKyAgICAgICAgICAgICAgICAgICAgemYud3JpdGUocGF0aCwgemlwcGF0aCkKICAgICAgICAgICAgICAgICBmb3Igbm0gaW4gb3MubGlzdGRpcihwYXRoKToKICAgICAgICAgICAgICAgICAgICAgYWRkVG9aaXAoemYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHBhdGgsIG5tKSwgb3MucGF0aC5qb2luKHppcHBhdGgsIG5tKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHBhdGgsIG5tKSwgb3MucGF0aC5qb2luKHppcHBhdGgsIG5tKSkKICAgICAgICAgICAgICMgZWxzZTogaWdub3JlCiAKLSAgICAgICAgd2l0aCBaaXBGaWxlKGFyZ3NbMV0sICd3JywgYWxsb3daaXA2ND1UcnVlKSBhcyB6ZjoKLSAgICAgICAgICAgIGZvciBzcmMgaW4gYXJnc1syOl06Ci0gICAgICAgICAgICAgICAgYWRkVG9aaXAoemYsIHNyYywgb3MucGF0aC5iYXNlbmFtZShzcmMpKQorICAgICAgICB3aXRoIFppcEZpbGUoYXJnc1sxXSwgJ3cnKSBhcyB6ZjoKKyAgICAgICAgICAgIGZvciBwYXRoIGluIGFyZ3NbMjpdOgorICAgICAgICAgICAgICAgIHppcHBhdGggPSBvcy5wYXRoLmJhc2VuYW1lKHBhdGgpCisgICAgICAgICAgICAgICAgaWYgbm90IHppcHBhdGg6CisgICAgICAgICAgICAgICAgICAgIHppcHBhdGggPSBvcy5wYXRoLmJhc2VuYW1lKG9zLnBhdGguZGlybmFtZShwYXRoKSkKKyAgICAgICAgICAgICAgICBpZiB6aXBwYXRoIGluICgnJywgb3MuY3VyZGlyLCBvcy5wYXJkaXIpOgorICAgICAgICAgICAgICAgICAgICB6aXBwYXRoID0gJycKKyAgICAgICAgICAgICAgICBhZGRUb1ppcCh6ZiwgcGF0aCwgemlwcGF0aCkKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICBtYWluKCkKZGlmZiAtLWdpdCBhL01hYy9CdWlsZFNjcmlwdC9SRUFETUUudHh0IGIvTWFjL0J1aWxkU2NyaXB0L1JFQURNRS50eHQKaW5kZXggNTZjNzY5YS4uZGI2ODdiZSAxMDA2NDQKLS0tIGEvTWFjL0J1aWxkU2NyaXB0L1JFQURNRS50eHQKKysrIGIvTWFjL0J1aWxkU2NyaXB0L1JFQURNRS50eHQKQEAgLTEsMzUgKzEsNDYgQEAKIEJ1aWxkaW5nIGEgUHl0aG9uIE1hYyBPUyBYIGRpc3RyaWJ1dGlvbgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKLVRoZSBgYGJ1aWxkLWluc3RhbGwucHlgYCBzY3JpcHQgY3JlYXRlcyBQeXRob24gZGlzdHJpYnV0aW9ucywgaW5jbHVkaW5nCitUaGUgYGBidWlsZC1pbnN0YWxsZXIucHlgYCBzY3JpcHQgY3JlYXRlcyBQeXRob24gZGlzdHJpYnV0aW9ucywgaW5jbHVkaW5nCiBjZXJ0YWluIHRoaXJkLXBhcnR5IGxpYnJhcmllcyBhcyBuZWNlc3NhcnkuICBJdCBidWlsZHMgYSBjb21wbGV0ZSAKIGZyYW1ld29yay1iYXNlZCBQeXRob24gb3V0LW9mLXRyZWUsIGluc3RhbGxzIGl0IGluIGEgZnVubnkgcGxhY2Ugd2l0aCAKICRERVNUUk9PVCwgbWFzc2FnZXMgdGhhdCBpbnN0YWxsYXRpb24gdG8gcmVtb3ZlIC5weWMgZmlsZXMgYW5kIHN1Y2gsIGNyZWF0ZXMgCiBhbiBJbnN0YWxsZXIgcGFja2FnZSBmcm9tIHRoZSBpbnN0YWxsYXRpb24gcGx1cyBvdGhlciBmaWxlcyBpbiBgYHJlc291cmNlc2BgIAogYW5kIGBgc2NyaXB0c2BgIGFuZCBwbGFjZWQgdGhhdCBvbiBhIGBgLmRtZ2BgIGRpc2sgaW1hZ2UuCiAKLUFzIG9mIFB5dGhvbiAzLjMuMCwgUFNGIHByYWN0aWNlIGlzIHRvIGJ1aWxkIHR3byBpbnN0YWxsZXIgdmFyaWFudHMKLWZvciBlYWNoIHJlbGVhc2UuCitUaGlzIGluc3RhbGxlcnMgYnVpbHQgYnkgdGhpcyBzY3JpcHQgYXJlIGxlZ2FjeSBidW5kbGUgaW5zdGFsbGVycyB0aGF0IGhhdmUKK2JlZW4gc3VwcG9ydGVkIGZyb20gdGhlIGVhcmx5IGRheXMgb2YgT1MgWC4gIEluIHBhcnRpY3VsYXIsIHRoZXkgYXJlIHN1cHBvcnRlZAorb24gT1MgWCAxMC4zLjksIHRoZSBlYXJsaWVzdCBzdXBwb3J0ZWQgcmVsZWFzZSBmb3IgYnVpbGRzIGZyb20gdGhpcyBzY3JpcHQuCisKK0JlZ2lubmluZyB3aXRoIFB5dGhvbiAzLjQuMiwgUFNGIHByYWN0aWNlIGlzIHRvIGJ1aWxkIHR3byBpbnN0YWxsZXIgdmFyaWFudHMKK3VzaW5nIHRoZSBuZXdlciBmbGF0IHBhY2thZ2UgZm9ybWF0LCBzdXBwb3J0ZWQgb24gMTAuNSssIGFuZCBzaWduZWQgd2l0aCB0aGUKK2J1aWxkZXIncyBBcHBsZSBkZXZlbG9wZXIga2V5LCBhbGxvd2luZyBkb3dubG9hZGVkIHBhY2thZ2VzIHRvIHNhdGlzZnkgQXBwbGUncworZGVmYXVsdCBHYXRla2VlcGVyIHBvbGljeSAoZS5nLiBzdGFydGluZyB3aXRoIDEwLjgsIEFwcGxlIHN0b3JlIGRvd25sb2FkcyBhbmQKK0FwcGxlIGRldmVsb3BlciBJRCBzaWduZWQgYXBwcyBhbmQgaW5zdGFsbGVyIHBhY2thZ2VzKS4gIFRoZSBwcm9jZXNzIGZvcgordHJhbnNmb3JtaW5nIHRoZSBvdXRwdXQgYnVpbGQgYXJ0aWZhY3RzIGludG8gc2lnbmVkIGZsYXQgcGFja2FnZXMgaXMgbm90Cit5ZXQgaW50ZWdyYXRlZCBpbnRvIGBgYnVpbGQtaW5zdGFsbGVyLnB5YGAuICBUaGUgc3RlcHMgcHJpb3IgdG8gdGhlIGZsYXQKK3BhY2thZ2UgY3JlYXRpb24gYXJlIHRoZSBzYW1lIGFzIGZvciAzLjQuMSBiZWxvdy4KIAogMS4gIDMyLWJpdC1vbmx5LCBpMzg2IGFuZCBQUEMgdW5pdmVyc2FsLCBjYXBhYmxlIG9uIHJ1bm5pbmcgb24gYWxsIG1hY2hpbmVzCi0gICAgc3VwcG9ydGVkIGJ5IE1hYyBPUyBYIDEwLjUgdGhyb3VnaCAoYXQgbGVhc3QpIDEwLjg6OgorICAgIHN1cHBvcnRlZCBieSBNYWMgT1MgWCAxMC41IHRocm91Z2ggKGF0IGxlYXN0KSAxMC45OjoKIAotICAgICAgICAvdXNyL2Jpbi9weXRob24gYnVpbGQtaW5zdGFsbGVyLnB5IFwKKyAgICAgICAgL3BhdGgvdG8vYm9vdHN0cmFwL3B5dGhvbjIuNyBidWlsZC1pbnN0YWxsZXIucHkgXAogICAgICAgICAgICAgLS1zZGstcGF0aD0vRGV2ZWxvcGVyL1NES3MvTWFjT1NYMTAuNS5zZGsgXAogICAgICAgICAgICAgLS11bml2ZXJzYWwtYXJjaHM9MzItYml0IFwKICAgICAgICAgICAgIC0tZGVwLXRhcmdldD0xMC41CiAKICAgICAtIGJ1aWxkcyB0aGUgZm9sbG93aW5nIHRoaXJkLXBhcnR5IGxpYnJhcmllcwogCisgICAgICAgICogbGliY3J5cHRvIGFuZCBsaWJzc2wgZnJvbSBPcGVuU1NMIDEuMC4xIChuZXcsIGFzIG9mIDMuNC4zKQogICAgICAgICAqIE5DdXJzZXMgNS45IChodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTUwMzcpCi0gICAgICAgICogU1FMaXRlIDMuNy4xMwotICAgICAgICAqIFhaIDUuMC4zCisgICAgICAgICogU1FMaXRlIDMuOC4xMQorICAgICAgICAqIFhaIDUuMC41CiAKICAgICAtIHVzZXMgc3lzdGVtLXN1cHBsaWVkIHZlcnNpb25zIG9mIHRoaXJkLXBhcnR5IGxpYnJhcmllcwogCiAgICAgICAgICogcmVhZGxpbmUgbW9kdWxlIGxpbmtzIHdpdGggQXBwbGUgQlNEIGVkaXRsaW5lIChsaWJlZGl0KQogCi0gICAgLSByZXF1aXJlcyBBY3RpdmVTdGF0ZSBgYFRjbC9UayA4LjRgYCAoY3VycmVudGx5IDguNC4xOSkgdG8gYmUgaW5zdGFsbGVkIGZvciBidWlsZGluZworICAgIC0gcmVxdWlyZXMgQWN0aXZlU3RhdGUgYGBUY2wvVGsgOC40YGAgKGN1cnJlbnRseSA4LjQuMjApIHRvIGJlIGluc3RhbGxlZCBmb3IgYnVpbGRpbmcKIAogICAgIC0gcmVjb21tZW5kZWQgYnVpbGQgZW52aXJvbm1lbnQ6CiAKQEAgLTM4LDcgKzQ5LDggQEAKICAgICAgICAgKiBgYE1hY09TWDEwLjVgYCBTREsKICAgICAgICAgKiBgYE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVD0xMC41YGAKICAgICAgICAgKiBBcHBsZSBgYGdjYy00LjJgYAotICAgICAgICAqIHN5c3RlbSBQeXRob24gMi41IGZvciBkb2N1bWVudGF0aW9uIGJ1aWxkIHdpdGggU3BoaW54CisgICAgICAgICogYm9vdHN0cmFwIG5vbi1mcmFtZXdvcmsgUHl0aG9uIDIuNyBmb3IgZG9jdW1lbnRhdGlvbiBidWlsZCB3aXRoCisgICAgICAgICAgU3BoaW54IChhcyBvZiAzLjQuMSkKIAogICAgIC0gYWx0ZXJuYXRlIGJ1aWxkIGVudmlyb25tZW50czoKIApAQCAtNDgsNyArNjAsNyBAQAogCiAyLiAgNjQtYml0IC8gMzItYml0LCB4ODZfNjQgYW5kIGkzODYgdW5pdmVyc2FsLCBmb3IgT1MgWCAxMC42IChhbmQgbGF0ZXIpOjoKIAotICAgICAgICAvdXNyL2Jpbi9weXRob24gYnVpbGQtaW5zdGFsbGVyLnB5IFwKKyAgICAgICAgL3BhdGgvdG8vYm9vdHN0cmFwL3B5dGhvbjIuNyBidWlsZC1pbnN0YWxsZXIucHkgXAogICAgICAgICAgICAgLS1zZGstcGF0aD0vRGV2ZWxvcGVyL1NES3MvTWFjT1NYMTAuNi5zZGsgXAogICAgICAgICAgICAgLS11bml2ZXJzYWwtYXJjaHM9aW50ZWwgXAogICAgICAgICAgICAgLS1kZXAtdGFyZ2V0PTEwLjYKQEAgLTU2LDE0ICs2OCwxNSBAQAogICAgIC0gYnVpbGRzIHRoZSBmb2xsb3dpbmcgdGhpcmQtcGFydHkgbGlicmFyaWVzCiAKICAgICAgICAgKiBOQ3Vyc2VzIDUuOSAoaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTE1MDM3KQotICAgICAgICAqIFNRTGl0ZSAzLjcuMTMKLSAgICAgICAgKiBYWiA1LjAuMworICAgICAgICAqIFNRTGl0ZSAzLjguMTEKKyAgICAgICAgKiBYWiA1LjAuNQogCiAgICAgLSB1c2VzIHN5c3RlbS1zdXBwbGllZCB2ZXJzaW9ucyBvZiB0aGlyZC1wYXJ0eSBsaWJyYXJpZXMKIAorICAgICAgICAqIGxpYmNyeXB0byBhbmQgbGlic3NsIGZyb20gQXBwbGUgT3BlblNTTCAwLjkuOAogICAgICAgICAqIHJlYWRsaW5lIG1vZHVsZSBsaW5rcyB3aXRoIEFwcGxlIEJTRCBlZGl0bGluZSAobGliZWRpdCkKIAotICAgIC0gcmVxdWlyZXMgQWN0aXZlU3RhdGUgVGNsL1RrIDguNS45IChvciBsYXRlcikgdG8gYmUgaW5zdGFsbGVkIGZvciBidWlsZGluZworICAgIC0gcmVxdWlyZXMgQWN0aXZlU3RhdGUgVGNsL1RrIDguNS4xNS4xIChvciBsYXRlcikgdG8gYmUgaW5zdGFsbGVkIGZvciBidWlsZGluZwogCiAgICAgLSByZWNvbW1lbmRlZCBidWlsZCBlbnZpcm9ubWVudDoKIApAQCAtNzIsNyArODUsOCBAQAogICAgICAgICAqIGBgTWFjT1NYMTAuNmBgIFNESwogICAgICAgICAqIGBgTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUPTEwLjZgYAogICAgICAgICAqIEFwcGxlIGBgZ2NjLTQuMmBgCi0gICAgICAgICogc3lzdGVtIFB5dGhvbiAyLjYgZm9yIGRvY3VtZW50YXRpb24gYnVpbGQgd2l0aCBTcGhpbngKKyAgICAgICAgKiBib290c3RyYXAgbm9uLWZyYW1ld29yayBQeXRob24gMi43IGZvciBkb2N1bWVudGF0aW9uIGJ1aWxkIHdpdGgKKyAgICAgICAgICBTcGhpbnggKGFzIG9mIDMuNC4xKQogCiAgICAgLSBhbHRlcm5hdGUgYnVpbGQgZW52aXJvbm1lbnRzOgogCkBAIC04Miw1MSArOTYsMTAgQEAKICAgICAgICAgICBjb25zaWRlcmVkIGEgbWlncmF0aW9uIGFpZCBieSBBcHBsZSBhbmQgaXMgbm90IGxpa2VseSB0byBiZSBmaXhlZCwKICAgICAgICAgICBpdHMgdXNlIHNob3VsZCBiZSBhdm9pZGVkLiAgVGhlIG90aGVyIGNvbXBpbGVyLCBgYGNsYW5nYGAsIGhhcyBiZWVuCiAgICAgICAgICAgdW5kZXJnb2luZyByYXBpZCBkZXZlbG9wbWVudC4gIFdoaWxlIGl0IGFwcGVhcnMgdG8gaGF2ZSBiZWNvbWUKLSAgICAgICAgICBwcm9kdWN0aW9uLXJlYWR5IGluIHRoZSBtb3N0IHJlY2VudCBYY29kZSA0IHJlbGVhc2VzIChYY29kZSA0LjYuMwotICAgICAgICAgIGFzIG9mIHRoaXMgd3JpdGluZyksIHRoZXJlIGFyZSBzdGlsbCBzb21lIG9wZW4gaXNzdWVzIHdoZW4KLSAgICAgICAgICBidWlsZGluZyBQeXRob24gYW5kIHRoZXJlIGhhcyBub3QgeWV0IGJlZW4gdGhlIGxldmVsIG9mIGV4cG9zdXJlIGluCi0gICAgICAgICAgcHJvZHVjdGlvbiBlbnZpcm9ubWVudHMgdGhhdCB0aGUgWGNvZGUgMyBnY2MtNC4yIGNvbXBpbGVyIGhhcyBoYWQuCi0KLQotKiAgIEZvciBQeXRob24gMi43LnggYW5kIDMuMi54LCB0aGUgMzItYml0LW9ubHkgaW5zdGFsbGVyIHdhcyBjb25maWd1cmVkIHRvCi0gICAgc3VwcG9ydCBNYWMgT1MgWCAxMC4zLjkgdGhyb3VnaCAoYXQgbGVhc3QpIDEwLjYuICBCZWNhdXNlIGl0IGlzCi0gICAgYmVsaWV2ZWQgdGhhdCB0aGVyZSBhcmUgZmV3IHN5c3RlbXMgc3RpbGwgcnVubmluZyBPUyBYIDEwLjMgb3IgMTAuNAotICAgIGFuZCBiZWNhdXNlIGl0IGhhcyBiZWNvbWUgaW5jcmVhc2luZ2x5IGRpZmZpY3VsdCB0byB0ZXN0IGFuZAotICAgIHN1cHBvcnQgdGhlIGRpZmZlcmVuY2VzIGluIHRoZXNlIGVhcmxpZXIgc3lzdGVtcywgYXMgb2YgUHl0aG9uIDMuMy4wIHRoZSBQU0YKLSAgICAzMi1iaXQgaW5zdGFsbGVyIG5vIGxvbmdlciBzdXBwb3J0cyB0aGVtLiAgRm9yIHJlZmVyZW5jZSBpbiBidWlsZGluZyBzdWNoCi0gICAgYW4gaW5zdGFsbGVyIHlvdXJzZWxmLCB0aGUgZGV0YWlscyBhcmU6OgotCi0gICAgICAgIC91c3IvYmluL3B5dGhvbiBidWlsZC1pbnN0YWxsZXIucHkgXAotICAgICAgICAgICAgLS1zZGstcGF0aD0vRGV2ZWxvcGVyL1NES3MvTWFjT1NYMTAuNHUuc2RrIFwKLSAgICAgICAgICAgIC0tdW5pdmVyc2FsLWFyY2hzPTMyLWJpdCBcCi0gICAgICAgICAgICAtLWRlcC10YXJnZXQ9MTAuMyAKLQotICAgIC0gYnVpbGRzIHRoZSBmb2xsb3dpbmcgdGhpcmQtcGFydHkgbGlicmFyaWVzCi0KLSAgICAgICAgKiBCemlwMgotICAgICAgICAqIE5DdXJzZXMKLSAgICAgICAgKiBHTlUgUmVhZGxpbmUgKEdQTCkKLSAgICAgICAgKiBTUUxpdGUgMwotICAgICAgICAqIFhaCi0gICAgICAgICogWmxpYiAxLjIuMwotICAgICAgICAqIE9yYWNsZSBTbGVlcHljYXQgREIgNC44IChQeXRob24gMi54IG9ubHkpCi0KLSAgICAtIHJlcXVpcmVzIEFjdGl2ZVN0YXRlIGBgVGNsL1RrIDguNGBgIChjdXJyZW50bHkgOC40LjE5KSB0byBiZSBpbnN0YWxsZWQgZm9yIGJ1aWxkaW5nCi0KLSAgICAtIHJlY29tbWVuZGVkIGJ1aWxkIGVudmlyb25tZW50OgotICAgICAgICAKLSAgICAgICAgKiBNYWMgT1MgWCAxMC41LjggUFBDIG9yIEludGVsCi0gICAgICAgICogWGNvZGUgMy4xLjQgKG9yIGxhdGVyKQotICAgICAgICAqIGBgTWFjT1NYMTAuNHVgYCBTREsgKGxhdGVyIFNES3MgZG8gbm90IHN1cHBvcnQgUFBDIEczIHByb2Nlc3NvcnMpCi0gICAgICAgICogYGBNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQ9MTAuM2BgCi0gICAgICAgICogQXBwbGUgYGBnY2MtNC4wYGAKLSAgICAgICAgKiBzeXN0ZW0gUHl0aG9uIDIuNSBmb3IgZG9jdW1lbnRhdGlvbiBidWlsZCB3aXRoIFNwaGlueAotCi0gICAgLSBhbHRlcm5hdGUgYnVpbGQgZW52aXJvbm1lbnRzOgotCi0gICAgICAgICogTWFjIE9TIFggMTAuNi44IHdpdGggWGNvZGUgMy4yLjYKLSAgICAgICAgICAgIC0gbmVlZCB0byBjaGFuZ2UgYGAvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy97VGNsLFRrfS5mcmFtZXdvcmsvVmVyc2lvbi9DdXJyZW50YGAgdG8gYGA4LjRgYAotCisgICAgICAgICAgcHJvZHVjdGlvbi1yZWFkeSBpbiB0aGUgbW9zdCByZWNlbnQgWGNvZGUgNSByZWxlYXNlcywgdGhlIHZlcnNpb25zCisgICAgICAgICAgYXZhaWxhYmxlIG9uIHRoZSBkZXByZWNhdGVkIFhjb2RlIDQueCBmb3IgMTAuNiB3ZXJlIGVhcmx5IHJlbGVhc2VzCisgICAgICAgICAgYW5kIGRpZCBub3QgcmVjZWl2ZSB0aGUgbGV2ZWwgb2YgZXhwb3N1cmUgaW4gcHJvZHVjdGlvbiBlbnZpcm9ubWVudHMKKyAgICAgICAgICB0aGF0IHRoZSBYY29kZSAzIGdjYy00LjIgY29tcGlsZXIgaGFzIGhhZC4KIAogCiBHZW5lcmFsIFByZXJlcXVpc2l0ZXMKQEAgLTEzNyw3ICsxMTAsMTMgQEAKICAgaW50ZXJmZXJlIHdpdGggdGhlIGJ1aWxkLgogCiAqIFRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgcmVsZWFzZSBpcyBidWlsdCB1c2luZyBTcGhpbngKLSAgYmVjYXVzZSBpdCBpcyBpbmNsdWRlZCBpbiB0aGUgaW5zdGFsbGVyLgorICBiZWNhdXNlIGl0IGlzIGluY2x1ZGVkIGluIHRoZSBpbnN0YWxsZXIuICBGb3IgMi43LnggYW5kIDMueC54IHVwIHRvIGFuZAorICBpbmNsdWRpbmcgMy40LjAsIHRoZSBgYERvYy9NYWtlZmlsZWBgIHVzZXMgYGBzdm5gYCB0byBkb3dubG9hZCByZXBvcyBvZgorICBgYFNwaGlueGBgIGFuZCBpdHMgZGVwZW5kZW5jaWVzLiAgQmVnaW5uaW5nIHdpdGggMy40LjEsIHRoZSBgYERvYy9NYWtlZmlsZWBgCisgIGFzc3VtZXMgdGhlcmUgaXMgYW4gZXh0ZXJuYWxseS1wcm92aWRlZCBgYHNwaGlueC1idWlsZGBgIGFuZCByZXF1aXJlcyBhdAorICBsZWFzdCBQeXRob24gMi42IHRvIHJ1bi4gIEJlY2F1c2Ugb2YgdGhpcywgaXQgaXMgbm8gbG9uZ2VyIHBvc3NpYmxlIHRvCisgIGJ1aWxkIGEgMy40LjEgb3IgbGF0ZXIgaW5zdGFsbGVyIG9uIE9TIFggMTAuNSB1c2luZyB0aGUgQXBwbGUtc3VwcGxpZWQKKyAgUHl0aG9uIDIuNS4KIAogKiBJdCBpcyBzYWZlc3QgdG8gc3RhcnQgZWFjaCB2YXJpYW50IGJ1aWxkIHdpdGggYW4gZW1wdHkgc291cmNlIGRpcmVjdG9yeQogICBwb3B1bGF0ZWQgd2l0aCBhIGZyZXNoIGNvcHkgb2YgdGhlIHVudGFycmVkIHNvdXJjZS4KQEAgLTE5NSw4ICsxNzQsOCBAQAogb24gYWxsIHN1cHBvcnRlZCBPUyBYIHJlbGVhc2VzIGFuZCBhcmNoaXRlY3R1cmVzLiAgQXMgYSBwcmFjdGljYWwgbWF0dGVyLAogdGhhdCBpcyBnZW5lcmFsbHkgbm90IHBvc3NpYmxlLiAgQXQgYSBtaW5pbXVtLCB2YXJpYW50IDEgc2hvdWxkIGJlIHJ1biBvbgogYSBQUEMgRzQgc3lzdGVtIHdpdGggT1MgWCAxMC41IGFuZCBhdCBsZWFzdCBvbmUgSW50ZWwgc3lzdGVtIHJ1bm5pbmcgT1MgWAotMTAuOCwgMTAuNywgMTAuNiwgb3IgMTAuNS4gIFZhcmlhbnQgMiBzaG91bGQgYmUgcnVuIG9uIDEwLjgsIDEwLjcsIGFuZCAxMC42Ci1zeXN0ZW1zIGluIGJvdGggMzItYml0IGFuZCA2NC1iaXQgbW9kZXMuOjoKKzEwLjksIDEwLjgsIDEwLjcsIDEwLjYsIG9yIDEwLjUuICBWYXJpYW50IDIgc2hvdWxkIGJlIHJ1biBvbiAxMC45LCAxMC44LAorMTAuNywgYW5kIDEwLjYgc3lzdGVtcyBpbiBib3RoIDMyLWJpdCBhbmQgNjQtYml0IG1vZGVzLjo6CiAKICAgICAvdXNyL2xvY2FsL2Jpbi9weXRob25uLm4gLW0gdGVzdCAtdyAtdSBhbGwsLWxhcmdlZmlsZQogICAgIC91c3IvbG9jYWwvYmluL3B5dGhvbm4ubi0zMiAtbSB0ZXN0IC13IC11IGFsbApAQCAtMjA3LDcgKzE4Niw3IEBACiBkdXJpbmcgdGVzdGluZyBhbmQgY2FuIGJlIGlnbm9yZWQuCiAKIEl0IGlzIGFsc28gcmVjb21tZW5kIHRvIGxhdW5jaCBJRExFIGFuZCB2ZXJpZnkgdGhhdCBpdCBpcyBhdCBsZWFzdAotZnVuY3Rpb25hbC4gIERvdWJsZS1jbGljayBvbiB0aGUgSURMRSBhcHAgaWNvbiBpbiBgYC9BcHBsaWNhdGlvbnMvUHl0aG9ubi5uYGAuCitmdW5jdGlvbmFsLiAgRG91YmxlLWNsaWNrIG9uIHRoZSBJRExFIGFwcCBpY29uIGluIGBgL0FwcGxpY2F0aW9ucy9QeXRob24gbi5uYGAuCiBJdCBzaG91bGQgYWxzbyBiZSB0ZXN0ZWQgZnJvbSB0aGUgY29tbWFuZCBsaW5lOjoKIAogICAgIC91c3IvbG9jYWwvYmluL2lkbGVuLm4KZGlmZiAtLWdpdCBhL01hYy9CdWlsZFNjcmlwdC9idWlsZC1pbnN0YWxsZXIucHkgYi9NYWMvQnVpbGRTY3JpcHQvYnVpbGQtaW5zdGFsbGVyLnB5CmluZGV4IGZkNWQ1YzMuLjFkNDY5YmIgMTAwNzU1Ci0tLSBhL01hYy9CdWlsZFNjcmlwdC9idWlsZC1pbnN0YWxsZXIucHkKKysrIGIvTWFjL0J1aWxkU2NyaXB0L2J1aWxkLWluc3RhbGxlci5weQpAQCAtOCw3ICs4LDkgQEAKIFBsZWFzZSBlbnN1cmUgdGhhdCB0aGlzIHNjcmlwdCBrZWVwcyB3b3JraW5nIHdpdGggUHl0aG9uIDIuNSwgdG8gYXZvaWQKIGJvb3RzdHJhcCBpc3N1ZXMgKC91c3IvYmluL3B5dGhvbiBpcyBQeXRob24gMi41IG9uIE9TWCAxMC41KS4gIFNwaGlueCwKIHdoaWNoIGlzIHVzZWQgdG8gYnVpbGQgdGhlIGRvY3VtZW50YXRpb24sIGN1cnJlbnRseSByZXF1aXJlcyBhdCBsZWFzdAotUHl0aG9uIDIuNC4KK1B5dGhvbiAyLjQuICBIb3dldmVyLCBhcyBvZiBQeXRob24gMy40LjEsIERvYyBidWlsZHMgcmVxdWlyZSBhbiBleHRlcm5hbAorc3BoaW54LWJ1aWxkIGFuZCB0aGUgY3VycmVudCB2ZXJzaW9ucyBvZiBTcGhpbnggbm93IHJlcXVpcmUgYXQgbGVhc3QKK1B5dGhvbiAyLjYuCiAKIEluIGFkZGl0aW9uIHRvIHdoYXQgaXMgc3VwcGxpZWQgd2l0aCBPUyBYIDEwLjUrIGFuZCBYY29kZSAzKywgdGhlIHNjcmlwdAogcmVxdWlyZXMgYW4gaW5zdGFsbGVkIHZlcnNpb24gb2YgaGcgYW5kIGEgdGhpcmQtcGFydHkgdmVyc2lvbiBvZgpAQCAtMjEsOCArMjMsOCBAQAogCiAzMi1iaXQtb25seSBpbnN0YWxsZXIgYnVpbGRzIGFyZSBzdGlsbCBwb3NzaWJsZSBvbiBPUyBYIDEwLjQgd2l0aCBYY29kZSAyLjUKIGFuZCB0aGUgaW5zdGFsbGF0aW9uIG9mIGFkZGl0aW9uYWwgY29tcG9uZW50cywgc3VjaCBhcyBhIG5ld2VyIFB5dGhvbgotKDIuNSBpcyBuZWVkZWQgZm9yIFB5dGhvbiBwYXJzZXIgdXBkYXRlcyksIGhnLCBhbmQgc3ZuIChmb3IgdGhlIGRvY3VtZW50YXRpb24KLWJ1aWxkKS4KKygyLjUgaXMgbmVlZGVkIGZvciBQeXRob24gcGFyc2VyIHVwZGF0ZXMpLCBoZywgYW5kIGZvciB0aGUgZG9jdW1lbnRhdGlvbgorYnVpbGQgZWl0aGVyIHN2biAocHJlLTMuNC4xKSBvciBzcGhpbngtYnVpbGQgKDMuNC4xIGFuZCBsYXRlcikuCiAKIFVzYWdlOiBzZWUgVVNBR0UgdmFyaWFibGUgaW4gdGhlIHNjcmlwdC4KICIiIgpAQCAtNjAsMTEgKzYyLDE2IEBACiAgICAgcmV0dXJuICInJXMnIiUodmFsdWUucmVwbGFjZSgiJyIsICInXCInXCInIikpCiAKIGRlZiBncmVwVmFsdWUoZm4sIHZhcmlhYmxlKToKKyAgICAiIiIKKyAgICBSZXR1cm4gdGhlIHVucXVvdGVkIHZhbHVlIG9mIGEgdmFyaWFibGUgZnJvbSBhIGZpbGUuLgorICAgIFFVT1RFRF9WQUxVRT0ncXVvdGVzJyAgICAtPiBzdHIoJ3F1b3RlcycpCisgICAgVU5RVU9URURfVkFMVUU9bm9xdW90ZXMgIC0+IHN0cignbm9xdW90ZXMnKQorICAgICIiIgogICAgIHZhcmlhYmxlID0gdmFyaWFibGUgKyAnPScKICAgICBmb3IgbG4gaW4gb3BlbihmbiwgJ3InKToKICAgICAgICAgaWYgbG4uc3RhcnRzd2l0aCh2YXJpYWJsZSk6CiAgICAgICAgICAgICB2YWx1ZSA9IGxuW2xlbih2YXJpYWJsZSk6XS5zdHJpcCgpCi0gICAgICAgICAgICByZXR1cm4gdmFsdWVbMTotMV0KKyAgICAgICAgICAgIHJldHVybiB2YWx1ZS5zdHJpcCgiXCInIikKICAgICByYWlzZSBSdW50aW1lRXJyb3IoIkNhbm5vdCBmaW5kIHZhcmlhYmxlICVzIiAlIHZhcmlhYmxlWzotMV0pCiAKIF9jYWNoZV9nZXRWZXJzaW9uID0gTm9uZQpAQCAtNzYsOSArODMsNiBAQAogICAgICAgICAgICAgb3MucGF0aC5qb2luKFNSQ0RJUiwgJ2NvbmZpZ3VyZScpLCAnUEFDS0FHRV9WRVJTSU9OJykKICAgICByZXR1cm4gX2NhY2hlX2dldFZlcnNpb24KIAotZGVmIGdldFZlcnNpb25UdXBsZSgpOgotICAgIHJldHVybiB0dXBsZShbaW50KG4pIGZvciBuIGluIGdldFZlcnNpb24oKS5zcGxpdCgnLicpXSkKLQogZGVmIGdldFZlcnNpb25NYWpvck1pbm9yKCk6CiAgICAgcmV0dXJuIHR1cGxlKFtpbnQobikgZm9yIG4gaW4gZ2V0VmVyc2lvbigpLnNwbGl0KCcuJywgMildKQogCkBAIC05NSw2ICs5OSw5IEBACiAgICAgICAgICAgICByZXR1cm4gX2NhY2hlX2dldEZ1bGxWZXJzaW9uCiAgICAgcmFpc2UgUnVudGltZUVycm9yKCJDYW5ub3QgZmluZCBmdWxsIHZlcnNpb24/PyIpCiAKK0ZXX1BSRUZJWCA9IFsiTGlicmFyeSIsICJGcmFtZXdvcmtzIiwgIlB5dGhvbi5mcmFtZXdvcmsiXQorRldfVkVSU0lPTl9QUkVGSVggPSAiLS11bmRlZmluZWQtLSIgIyBpbml0aWFsaXplZCBpbiBwYXJzZU9wdGlvbnMKKwogIyBUaGUgZGlyZWN0b3J5IHdlJ2xsIHVzZSB0byBjcmVhdGUgdGhlIGJ1aWxkICh3aWxsIGJlIGVyYXNlZCBhbmQgcmVjcmVhdGVkKQogV09SS0RJUiA9ICIvdG1wL19weSIKIApAQCAtMTQ4LDE5ICsxNTUsMjEgQEAKICMgJE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCAtPiBtaW5pbXVtIE9TIFggbGV2ZWwKIERFUFRBUkdFVCA9ICcxMC4zJwogCi10YXJnZXRfY2NfbWFwID0geworZGVmIGdldERlcHRhcmdldFR1cGxlKCk6CisgICAgcmV0dXJuIHR1cGxlKFtpbnQobikgZm9yIG4gaW4gREVQVEFSR0VULnNwbGl0KCcuJylbMDoyXV0pCisKK2RlZiBnZXRUYXJnZXRDb21waWxlcnMoKToKKyAgICB0YXJnZXRfY2NfbWFwID0gewogICAgICAgICAnMTAuMyc6ICgnZ2NjLTQuMCcsICdnKystNC4wJyksCiAgICAgICAgICcxMC40JzogKCdnY2MtNC4wJywgJ2crKy00LjAnKSwKICAgICAgICAgJzEwLjUnOiAoJ2djYy00LjInLCAnZysrLTQuMicpLAogICAgICAgICAnMTAuNic6ICgnZ2NjLTQuMicsICdnKystNC4yJyksCi0gICAgICAgICcxMC43JzogKCdjbGFuZycsICdjbGFuZysrJyksCi0gICAgICAgICcxMC44JzogKCdjbGFuZycsICdjbGFuZysrJyksCi0gICAgICAgICcxMC45JzogKCdjbGFuZycsICdjbGFuZysrJyksCi19CisgICAgfQorICAgIHJldHVybiB0YXJnZXRfY2NfbWFwLmdldChERVBUQVJHRVQsICgnY2xhbmcnLCAnY2xhbmcrKycpICkKIAotQ0MsIENYWCA9IHRhcmdldF9jY19tYXBbREVQVEFSR0VUXQorQ0MsIENYWCA9IGdldFRhcmdldENvbXBpbGVycygpCiAKLVBZVEhPTl8zID0gZ2V0VmVyc2lvblR1cGxlKCkgPj0gKDMsIDApCitQWVRIT05fMyA9IGdldFZlcnNpb25NYWpvck1pbm9yKCkgPj0gKDMsIDApCiAKIFVTQUdFID0gdGV4dHdyYXAuZGVkZW50KCIiIlwKICAgICBVc2FnZTogYnVpbGRfcHl0aG9uIFtvcHRpb25zXQpAQCAtMTg0LDYgKzE5MywxMCBAQAogIyAgICAgICAgICAgICAgICAgICAgICAgJy9MaWJyYXJ5L0ZyYW1ld29ya3MvVGsuZnJhbWV3b3JrL1ZlcnNpb25zLzguNS9UayddCiBFWFBFQ1RFRF9TSEFSRURfTElCUyA9IHt9CiAKKyMgTGlzdCBvZiBuYW1lcyBvZiB0aGlyZCBwYXJ0eSBzb2Z0d2FyZSBidWlsdCB3aXRoIHRoaXMgaW5zdGFsbGVyLgorIyBUaGUgbmFtZXMgd2lsbCBiZSBpbnNlcnRlZCBpbnRvIHRoZSBydGYgdmVyc2lvbiBvZiB0aGUgTGljZW5zZS4KK1RISVJEX1BBUlRZX0xJQlMgPSBbXQorCiAjIEluc3RydWN0aW9ucyBmb3IgYnVpbGRpbmcgbGlicmFyaWVzIHRoYXQgYXJlIG5lY2Vzc2FyeSBmb3IgYnVpbGRpbmcgYQogIyBiYXR0ZXJpZXMgaW5jbHVkZWQgcHl0aG9uLgogIyAgIFtUaGUgcmVjaXBlcyBhcmUgZGVmaW5lZCBoZXJlIGZvciBjb252ZW5pZW5jZSBidXQgaW5zdGFudGlhdGVkIGxhdGVyIGFmdGVyCkBAIC0xOTEsOSArMjA0LDUzIEBACiBkZWYgbGlicmFyeV9yZWNpcGVzKCk6CiAgICAgcmVzdWx0ID0gW10KIAotICAgIExUXzEwXzUgPSBib29sKERFUFRBUkdFVCA8ICcxMC41JykKKyAgICBMVF8xMF81ID0gYm9vbChnZXREZXB0YXJnZXRUdXBsZSgpIDwgKDEwLCA1KSkKIAotICAgIGlmIChERVBUQVJHRVQgPiAnMTAuNScpIGFuZCAoZ2V0VmVyc2lvblR1cGxlKCkgPj0gKDMsIDQpKToKKyAgICBpZiBnZXREZXB0YXJnZXRUdXBsZSgpIDwgKDEwLCA2KToKKyAgICAgICAgIyBUaGUgT3BlblNTTCBsaWJzIHNoaXBwZWQgd2l0aCBPUyBYIDEwLjUgYW5kIGVhcmxpZXIgYXJlCisgICAgICAgICMgaG9wZWxlc3NseSBvdXQtb2YtZGF0ZSBhbmQgZG8gbm90IGluY2x1ZGUgQXBwbGUncyB0aWUtaW4gdG8KKyAgICAgICAgIyB0aGUgcm9vdCBjZXJ0aWZpY2F0ZXMgaW4gdGhlIHVzZXIgYW5kIHN5c3RlbSBrZXljaGFpbnMgdmlhIFRFQQorICAgICAgICAjIHRoYXQgd2FzIGludHJvZHVjZWQgaW4gT1MgWCAxMC42LiAgTm90ZSB0aGF0IHRoaXMgYXBwbGllcyB0bworICAgICAgICAjIHByb2dyYW1zIGJ1aWx0IGFuZCBsaW5rZWQgd2l0aCBhIDEwLjUgU0RLIGV2ZW4gd2hlbiBydW4gb24KKyAgICAgICAgIyBuZXdlciB2ZXJzaW9ucyBvZiBPUyBYLgorICAgICAgICAjCisgICAgICAgICMgRGVhbGluZyB3aXRoIENBcyBpcyBtZXNzeS4gIEZvciBub3csIGp1c3Qgc3VwcGx5IGEKKyAgICAgICAgIyBsb2NhbCBsaWJzc2wgYW5kIGxpYmNyeXB0byBmb3IgdGhlIG9sZGVyIGluc3RhbGxlciB2YXJpYW50cworICAgICAgICAjIChlLmcuIHRoZSBweXRob24ub3JnIDEwLjUrIDMyLWJpdC1vbmx5IGluc3RhbGxlcikgdGhhdCB1c2UgdGhlCisgICAgICAgICMgc2FtZSBkZWZhdWx0IHNzbCBjZXJ0ZmlsZSBsb2NhdGlvbiBhcyB0aGUgc3lzdGVtIGxpYnMgZG86CisgICAgICAgICMgICAvU3lzdGVtL0xpYnJhcnkvT3BlblNTTC9jZXJ0LnBlbQorICAgICAgICAjIFRoZW4gYXQgbGVhc3QgVExTIGNvbm5lY3Rpb25zIGNhbiBiZSBuZWdvdGlhdGVkIHdpdGggc2l0ZXMgdGhhdAorICAgICAgICAjIHVzZSBzaGEtMjU2IGNlcnRzIGxpa2UgcHl0aG9uLm9yZywgYXNzdW1pbmcgdGhlIHByb3BlciBDQSBjZXJ0cworICAgICAgICAjIGhhdmUgYmVlbiBzdXBwbGllZC4gIFRoZSBkZWZhdWx0IENBIGNlcnQgbWFuYWdlbWVudCBpc3N1ZXMgZm9yCisgICAgICAgICMgMTAuNSBhbmQgZWFybGllciBidWlsZHMgYXJlIHRoZSBzYW1lIGFzIGJlZm9yZSwgb3RoZXIgdGhhbiBpdCBpcworICAgICAgICAjIG5vdyBtb3JlIG9idmlvdXMgd2l0aCBjZXJ0IGNoZWNraW5nIGVuYWJsZWQgYnkgZGVmYXVsdCBpbiB0aGUKKyAgICAgICAgIyBzdGFuZGFyZCBsaWJyYXJ5LgorICAgICAgICAjCisgICAgICAgICMgRm9yIGJ1aWxkcyB3aXRoIDEwLjYrIFNES3MsIGNvbnRpbnVlIHRvIHVzZSB0aGUgZGVwcmVjYXRlZCBidXQKKyAgICAgICAgIyBsZXNzIG91dC1vZi1kYXRlIEFwcGxlIDAuOS44IGxpYnMgZm9yIG5vdy4gIFdoaWxlIHRoZXkgYXJlIGxlc3MKKyAgICAgICAgIyBzZWN1cmUgdGhhbiB1c2luZyBhbiB1cC10by1kYXRlIDEuMC4xIHZlcnNpb24sIGRvaW5nIHNvCisgICAgICAgICMgYXZvaWRzIHRoZSBiaWcgcHJvYmxlbXMgb2YgZm9yY2luZyB1c2VycyB0byBoYXZlIHRvIG1hbmFnZQorICAgICAgICAjIGRlZmF1bHQgQ0FzIHRoZW1zZWx2ZXMsIHRoYW5rcyB0byB0aGUgQXBwbGUgbGlicyB1c2luZyBwcml2YXRlIFRFQQorICAgICAgICAjIEFQSXMgZm9yIGNlcnQgdmFsaWRhdGlvbiBmcm9tIGtleWNoYWlucyBpZiB2YWxpZGF0aW9uIHVzaW5nIHRoZQorICAgICAgICAjIHN0YW5kYXJkIE9wZW5TU0wgbG9jYXRpb25zICgvU3lzdGVtL0xpYnJhcnkvT3BlblNTTCwgbm9ybWFsbHkgZW1wdHkpCisgICAgICAgICMgZmFpbHMuCisKKyAgICAgICAgcmVzdWx0LmV4dGVuZChbCisgICAgICAgICAgZGljdCgKKyAgICAgICAgICAgICAgbmFtZT0iT3BlblNTTCAxLjAuMmUiLAorICAgICAgICAgICAgICB1cmw9Imh0dHBzOi8vd3d3Lm9wZW5zc2wub3JnL3NvdXJjZS9vcGVuc3NsLTEuMC4yZS50YXIuZ3oiLAorICAgICAgICAgICAgICBjaGVja3N1bT0nNTI2MmJmYTI1YjYwZWQ5ZGU5ZjI4ZDVkNTJkNzdmYzUnLAorICAgICAgICAgICAgICBwYXRjaGVzPVsKKyAgICAgICAgICAgICAgICAgICJvcGVuc3NsX3Nka19tYWtlZGVwZW5kLnBhdGNoIiwKKyAgICAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICBidWlsZHJlY2lwZT1idWlsZF91bml2ZXJzYWxfb3BlbnNzbCwKKyAgICAgICAgICAgICAgY29uZmlndXJlPU5vbmUsCisgICAgICAgICAgICAgIGluc3RhbGw9Tm9uZSwKKyAgICAgICAgICApLAorICAgICAgICBdKQorCisjICAgRGlzYWJsZSBmb3Igbm93CisgICAgaWYgRmFsc2U6ICAgIyBpZiBnZXREZXB0YXJnZXRUdXBsZSgpID4gKDEwLCA1KToKICAgICAgICAgcmVzdWx0LmV4dGVuZChbCiAgICAgICAgICAgZGljdCgKICAgICAgICAgICAgICAgbmFtZT0iVGNsIDguNS4xNSIsCkBAIC0yMzQsMTIgKzI5MSwxMiBAQAogICAgICAgICAgICAgICAgICksCiAgICAgICAgIF0pCiAKLSAgICBpZiBnZXRWZXJzaW9uVHVwbGUoKSA+PSAoMywgMyk6CisgICAgaWYgUFlUSE9OXzM6CiAgICAgICAgIHJlc3VsdC5leHRlbmQoWwogICAgICAgICAgIGRpY3QoCi0gICAgICAgICAgICAgIG5hbWU9IlhaIDUuMC4zIiwKLSAgICAgICAgICAgICAgdXJsPSJodHRwOi8vdHVrYWFuaS5vcmcveHoveHotNS4wLjMudGFyLmd6IiwKLSAgICAgICAgICAgICAgY2hlY2tzdW09J2ZlZmU1MmY5ZWNkNTIxZGUyYThjZTM4YzIxYTI3NTc0JywKKyAgICAgICAgICAgICAgbmFtZT0iWFogNS4wLjUiLAorICAgICAgICAgICAgICB1cmw9Imh0dHA6Ly90dWthYW5pLm9yZy94ei94ei01LjAuNS50YXIuZ3oiLAorICAgICAgICAgICAgICBjaGVja3N1bT0nMTlkOTI0ZTA2NmI2ZmZmMGJjOWQxOTgxYjRlNTMxOTYnLAogICAgICAgICAgICAgICBjb25maWd1cmVfcHJlPVsKICAgICAgICAgICAgICAgICAgICAgJy0tZGlzYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nJywKICAgICAgICAgICAgICAgXQpAQCAtMjgyLDkgKzMzOSw5IEBACiAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICksCiAgICAgICAgICAgZGljdCgKLSAgICAgICAgICAgICAgbmFtZT0iU1FMaXRlIDMuNy4xMyIsCi0gICAgICAgICAgICAgIHVybD0iaHR0cDovL3d3dy5zcWxpdGUub3JnL3NxbGl0ZS1hdXRvY29uZi0zMDcxMzAwLnRhci5neiIsCi0gICAgICAgICAgICAgIGNoZWNrc3VtPSdjOTdkZjQwM2U4YTNkNWI2N2JiNDA4ZmNkNmFhYmQ4ZScsCisgICAgICAgICAgICAgIG5hbWU9IlNRTGl0ZSAzLjguMTEiLAorICAgICAgICAgICAgICB1cmw9Imh0dHBzOi8vd3d3LnNxbGl0ZS5vcmcvMjAxNS9zcWxpdGUtYXV0b2NvbmYtMzA4MTEwMC50YXIuZ3oiLAorICAgICAgICAgICAgICBjaGVja3N1bT0nNzdiNDUxOTI1MTIxMDI4YmVmYmRkYmY0NWVhMmJjNDknLAogICAgICAgICAgICAgICBleHRyYV9jZmxhZ3M9KCctT3MgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICctRFNRTElURV9FTkFCTEVfRlRTNCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1EU1FMSVRFX0VOQUJMRV9GVFMzX1BBUkVOVEhFU0lTICcKQEAgLTMwMSw3ICszNTgsNyBAQAogICAgICAgICAgICksCiAgICAgICAgIF0pCiAKLSAgICBpZiBERVBUQVJHRVQgPCAnMTAuNSc6CisgICAgaWYgZ2V0RGVwdGFyZ2V0VHVwbGUoKSA8ICgxMCwgNSk6CiAgICAgICAgIHJlc3VsdC5leHRlbmQoWwogICAgICAgICAgIGRpY3QoCiAgICAgICAgICAgICAgIG5hbWU9IkJ6aXAyIDEuMC42IiwKQEAgLTQzMiwxMSArNDg5LDI0IEBACiAgICAgICAgICAgICB0b3BkaXI9Ii9MaWJyYXJ5L0ZyYW1ld29ya3MvUHl0aG9uLmZyYW1ld29yayIsCiAgICAgICAgICAgICBzb3VyY2U9Ii9lbXB0eS1kaXIiLAogICAgICAgICAgICAgcmVxdWlyZWQ9RmFsc2UsCi0gICAgICAgICAgICBzZWxlY3RlZD11bnNlbGVjdGVkX2Zvcl9weXRob24zLAorICAgICAgICAgICAgc2VsZWN0ZWQ9J3NlbGVjdGVkJywKKyAgICAgICAgKSwKKyAgICAgICAgZGljdCgKKyAgICAgICAgICAgIG5hbWU9IlB5dGhvbkluc3RhbGxQaXAiLAorICAgICAgICAgICAgbG9uZ19uYW1lPSJJbnN0YWxsIG9yIHVwZ3JhZGUgcGlwIiwKKyAgICAgICAgICAgIHJlYWRtZT0iIiJcCisgICAgICAgICAgICAgICAgVGhpcyBwYWNrYWdlIGluc3RhbGxzIChvciB1cGdyYWRlcyBmcm9tIGFuIGVhcmxpZXIgdmVyc2lvbikKKyAgICAgICAgICAgICAgICBwaXAsIGEgdG9vbCBmb3IgaW5zdGFsbGluZyBhbmQgbWFuYWdpbmcgUHl0aG9uIHBhY2thZ2VzLgorICAgICAgICAgICAgICAgICIiIiwKKyAgICAgICAgICAgIHBvc3RmbGlnaHQ9InNjcmlwdHMvcG9zdGZsaWdodC5lbnN1cmVwaXAiLAorICAgICAgICAgICAgdG9wZGlyPSIvTGlicmFyeS9GcmFtZXdvcmtzL1B5dGhvbi5mcmFtZXdvcmsiLAorICAgICAgICAgICAgc291cmNlPSIvZW1wdHktZGlyIiwKKyAgICAgICAgICAgIHJlcXVpcmVkPUZhbHNlLAorICAgICAgICAgICAgc2VsZWN0ZWQ9J3NlbGVjdGVkJywKICAgICAgICAgKSwKICAgICBdCiAKLSAgICBpZiBERVBUQVJHRVQgPCAnMTAuNCcgYW5kIG5vdCBQWVRIT05fMzoKKyAgICBpZiBnZXREZXB0YXJnZXRUdXBsZSgpIDwgKDEwLCA0KSBhbmQgbm90IFBZVEhPTl8zOgogICAgICAgICByZXN1bHQuYXBwZW5kKAogICAgICAgICAgICAgZGljdCgKICAgICAgICAgICAgICAgICBuYW1lPSJQeXRob25TeXN0ZW1GaXhlcyIsCkBAIC00NTMsNiArNTIzLDcgQEAKICAgICAgICAgICAgICAgICBzZWxlY3RlZD11bnNlbGVjdGVkX2Zvcl9weXRob24zLAogICAgICAgICAgICAgKQogICAgICAgICApCisKICAgICByZXR1cm4gcmVzdWx0CiAKIGRlZiBmYXRhbChtc2cpOgpAQCAtNTY3LDIwICs2MzgsNiBAQAogICAgICAgICAgICAgICAgICUgZnJhbWV3b3Jrc1snVGsnXSwKICAgICAgICAgICAgIF0KIAotICAgICMgRm9yIDEwLjYrIGJ1aWxkcywgd2UgYnVpbGQgdHdvIHZlcnNpb25zIG9mIF90a2ludGVyOgotICAgICMgICAgLSB0aGUgdHJhZGl0aW9uYWwgdmVyc2lvbiAocmVuYW1lZCB0byBfdGtpbnRlcl9saWJyYXJ5LnNvKSBsaW5rZWQKLSAgICAjICAgICAgIHdpdGggL0xpYnJhcnkvRnJhbWV3b3Jrcy97VGNsLFRrfS5mcmFtZXdvcmsKLSAgICAjICAgIC0gdGhlIGRlZmF1bHQgdmVyc2lvbiBsaW5rZWQgd2l0aCBvdXIgYnVpbHRpbiBjb3BpZXMgb2YgVGNsIGFuZCBUawotICAgIGlmIChERVBUQVJHRVQgPiAnMTAuNScpIGFuZCAoZ2V0VmVyc2lvblR1cGxlKCkgPj0gKDMsIDQpKToKLSAgICAgICAgRVhQRUNURURfU0hBUkVEX0xJQlNbJ190a2ludGVyX2xpYnJhcnkuc28nXSA9IFwKLSAgICAgICAgICAgIEVYUEVDVEVEX1NIQVJFRF9MSUJTWydfdGtpbnRlci5zbyddCi0gICAgICAgIEVYUEVDVEVEX1NIQVJFRF9MSUJTWydfdGtpbnRlci5zbyddID0gWwotICAgICAgICAgICAgICAgICIvTGlicmFyeS9GcmFtZXdvcmtzL1B5dGhvbi5mcmFtZXdvcmsvVmVyc2lvbnMvJXMvbGliL2xpYnRjbCVzLmR5bGliIgotICAgICAgICAgICAgICAgICAgICAlIChnZXRWZXJzaW9uKCksIGZyYW1ld29ya3NbJ1RjbCddKSwKLSAgICAgICAgICAgICAgICAiL0xpYnJhcnkvRnJhbWV3b3Jrcy9QeXRob24uZnJhbWV3b3JrL1ZlcnNpb25zLyVzL2xpYi9saWJ0ayVzLmR5bGliIgotICAgICAgICAgICAgICAgICAgICAlIChnZXRWZXJzaW9uKCksIGZyYW1ld29ya3NbJ1RrJ10pLAotICAgICAgICAgICAgICAgIF0KLQogICAgICMgUmVtb3ZlIGluaGVyaXRlZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgd2hpY2ggbWlnaHQgaW5mbHVlbmNlIGJ1aWxkCiAgICAgZW52aXJvbl92YXJfcHJlZml4ZXMgPSBbJ0NQQVRIJywgJ0NfSU5DTFVERV8nLCAnRFlMRF8nLCAnTEFORycsICdMQ18nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICdMRF8nLCAnTElCUkFSWV8nLCAnUEFUSCcsICdQWVRIT04nXQpAQCAtNjAxLDcgKzY1OCwxMCBAQAogICAgICAgICBiYXNlX3BhdGggPSBiYXNlX3BhdGggKyAnOicgKyBPTERfREVWRUxPUEVSX1RPT0xTCiAgICAgb3MuZW52aXJvblsnUEFUSCddID0gYmFzZV9wYXRoCiAgICAgcHJpbnQoIlNldHRpbmcgZGVmYXVsdCBQQVRIOiAlcyIlKG9zLmVudmlyb25bJ1BBVEgnXSkpCi0KKyAgICAjIEVuc3VyZSB3cyBoYXZlIGFjY2VzcyB0byBoZyBhbmQgdG8gc3BoaW54LWJ1aWxkLgorICAgICMgWW91IG1heSBoYXZlIHRvIGNyZWF0ZSBsaW5rcyBpbiAvdXNyL2JpbiBmb3IgdGhlbS4KKyAgICBydW5Db21tYW5kKCdoZyAtLXZlcnNpb24nKQorICAgIHJ1bkNvbW1hbmQoJ3NwaGlueC1idWlsZCAtLXZlcnNpb24nKQogCiBkZWYgcGFyc2VPcHRpb25zKGFyZ3M9Tm9uZSk6CiAgICAgIiIiCkBAIC02MDksNiArNjY5LDcgQEAKICAgICAiIiIKICAgICBnbG9iYWwgV09SS0RJUiwgREVQU1JDLCBTREtQQVRILCBTUkNESVIsIERFUFRBUkdFVAogICAgIGdsb2JhbCBVTklWRVJTQUxPUFRTLCBVTklWRVJTQUxBUkNIUywgQVJDSExJU1QsIENDLCBDWFgKKyAgICBnbG9iYWwgRldfVkVSU0lPTl9QUkVGSVgKIAogICAgIGlmIGFyZ3MgaXMgTm9uZToKICAgICAgICAgYXJncyA9IHN5cy5hcmd2WzE6XQpAQCAtNjY2LDIxICs3MjcsMjMgQEAKICAgICBTREtQQVRIPW9zLnBhdGguYWJzcGF0aChTREtQQVRIKQogICAgIERFUFNSQz1vcy5wYXRoLmFic3BhdGgoREVQU1JDKQogCi0gICAgQ0MsIENYWD10YXJnZXRfY2NfbWFwW0RFUFRBUkdFVF0KKyAgICBDQywgQ1hYID0gZ2V0VGFyZ2V0Q29tcGlsZXJzKCkKIAotICAgIHByaW50KCJTZXR0aW5nczoiKQotICAgIHByaW50KCIgKiBTb3VyY2UgZGlyZWN0b3J5OiIsIFNSQ0RJUikKLSAgICBwcmludCgiICogQnVpbGQgZGlyZWN0b3J5OiAiLCBXT1JLRElSKQotICAgIHByaW50KCIgKiBTREsgbG9jYXRpb246ICAgICIsIFNES1BBVEgpCi0gICAgcHJpbnQoIiAqIFRoaXJkLXBhcnR5IHNvdXJjZToiLCBERVBTUkMpCi0gICAgcHJpbnQoIiAqIERlcGxveW1lbnQgdGFyZ2V0OiIsIERFUFRBUkdFVCkKLSAgICBwcmludCgiICogVW5pdmVyc2FsIGFyY2hpdGVjdHVyZXM6IiwgQVJDSExJU1QpCi0gICAgcHJpbnQoIiAqIEMgY29tcGlsZXI6IiwgQ0MpCi0gICAgcHJpbnQoIiAqIEMrKyBjb21waWxlcjoiLCBDWFgpCisgICAgRldfVkVSU0lPTl9QUkVGSVggPSBGV19QUkVGSVhbOl0gKyBbIlZlcnNpb25zIiwgZ2V0VmVyc2lvbigpXQorCisgICAgcHJpbnQoIi0tIFNldHRpbmdzOiIpCisgICAgcHJpbnQoIiAgICogU291cmNlIGRpcmVjdG9yeTogICAgJXMiICUgU1JDRElSKQorICAgIHByaW50KCIgICAqIEJ1aWxkIGRpcmVjdG9yeTogICAgICVzIiAlIFdPUktESVIpCisgICAgcHJpbnQoIiAgICogU0RLIGxvY2F0aW9uOiAgICAgICAgJXMiICUgU0RLUEFUSCkKKyAgICBwcmludCgiICAgKiBUaGlyZC1wYXJ0eSBzb3VyY2U6ICAlcyIgJSBERVBTUkMpCisgICAgcHJpbnQoIiAgICogRGVwbG95bWVudCB0YXJnZXQ6ICAgJXMiICUgREVQVEFSR0VUKQorICAgIHByaW50KCIgICAqIFVuaXZlcnNhbCBhcmNoczogICAgICVzIiAlIHN0cihBUkNITElTVCkpCisgICAgcHJpbnQoIiAgICogQyBjb21waWxlcjogICAgICAgICAgJXMiICUgQ0MpCisgICAgcHJpbnQoIiAgICogQysrIGNvbXBpbGVyOiAgICAgICAgJXMiICUgQ1hYKQogICAgIHByaW50KCIiKQotCi0KLQorICAgIHByaW50KCIgLS0gQnVpbGRpbmcgYSBQeXRob24gJXMgZnJhbWV3b3JrIGF0IHBhdGNoIGxldmVsICVzIgorICAgICAgICAgICAgICAgICUgKGdldFZlcnNpb24oKSwgZ2V0RnVsbFZlcnNpb24oKSkpCisgICAgcHJpbnQoIiIpCiAKIGRlZiBleHRyYWN0QXJjaGl2ZShidWlsZGRpciwgYXJjaGl2ZU5hbWUpOgogICAgICIiIgpAQCAtNzcyLDYgKzgzNSwxMzIgQEAKICAgICAgICAgICAgICAgICAlIChzaGVsbFF1b3RlKGZuYW1lKSwgY2hlY2tzdW0pICk6CiAgICAgICAgIGZhdGFsKCdNRDUgY2hlY2tzdW0gbWlzbWF0Y2ggZm9yIGZpbGUgJXMnICUgZm5hbWUpCiAKK2RlZiBidWlsZF91bml2ZXJzYWxfb3BlbnNzbChiYXNlZGlyLCBhcmNoTGlzdCk6CisgICAgIiIiCisgICAgU3BlY2lhbCBjYXNlIGJ1aWxkIHJlY2lwZSBmb3IgdW5pdmVyc2FsIGJ1aWxkIG9mIG9wZW5zc2wuCisKKyAgICBUaGUgdXBzdHJlYW0gT3BlblNTTCBidWlsZCBzeXN0ZW0gZG9lcyBub3QgZGlyZWN0bHkgc3VwcG9ydAorICAgIE9TIFggdW5pdmVyc2FsIGJ1aWxkcy4gIFdlIG5lZWQgdG8gYnVpbGQgZWFjaCBhcmNoaXRlY3R1cmUKKyAgICBzZXBhcmF0ZWx5IHRoZW4gbGlwbyB0aGVtIHRvZ2V0aGVyIGludG8gZmF0IGxpYnJhcmllcy4KKyAgICAiIiIKKworICAgICMgT3BlblNTTCBmYWlscyB0byBidWlsZCB3aXRoIFhjb2RlIDIuNSAob24gT1MgWCAxMC40KS4KKyAgICAjIElmIHdlIGFyZSBidWlsZGluZyBvbiBhIDEwLjQueCBvciBlYXJsaWVyIHN5c3RlbSwKKyAgICAjIHVuaWxhdGVyYWxseSBkaXNhYmxlIGFzc2VtYmx5IGNvZGUgYnVpbGRpbmcgdG8gYXZvaWQgdGhlIHByb2JsZW0uCisgICAgbm9fYXNtID0gaW50KHBsYXRmb3JtLnJlbGVhc2UoKS5zcGxpdCgiLiIpWzBdKSA8IDkKKworICAgIGRlZiBidWlsZF9vcGVuc3NsX2FyY2goYXJjaGJhc2UsIGFyY2gpOgorICAgICAgICAiQnVpbGQgb25lIGFyY2hpdGVjdHVyZSBvZiBvcGVuc3NsIgorICAgICAgICBhcmNoX29wdHMgPSB7CisgICAgICAgICAgICAiaTM4NiI6IFsiZGFyd2luLWkzODYtY2MiXSwKKyAgICAgICAgICAgICJ4ODZfNjQiOiBbImRhcndpbjY0LXg4Nl82NC1jYyIsICJlbmFibGUtZWNfbmlzdHBfNjRfZ2NjXzEyOCJdLAorICAgICAgICAgICAgInBwYyI6IFsiZGFyd2luLXBwYy1jYyJdLAorICAgICAgICAgICAgInBwYzY0IjogWyJkYXJ3aW42NC1wcGMtY2MiXSwKKyAgICAgICAgfQorICAgICAgICBjb25maWd1cmVfb3B0cyA9IFsKKyAgICAgICAgICAgICJuby1rcmI1IiwKKyAgICAgICAgICAgICJuby1pZGVhIiwKKyAgICAgICAgICAgICJuby1tZGMyIiwKKyAgICAgICAgICAgICJuby1yYzUiLAorICAgICAgICAgICAgIm5vLXpsaWIiLAorICAgICAgICAgICAgImVuYWJsZS10bHNleHQiLAorICAgICAgICAgICAgIm5vLXNzbDIiLAorICAgICAgICAgICAgIm5vLXNzbDMiLAorICAgICAgICAgICAgIm5vLXNzbDMtbWV0aG9kIiwKKyAgICAgICAgICAgICMgImVuYWJsZS11bml0LXRlc3QiLAorICAgICAgICAgICAgInNoYXJlZCIsCisgICAgICAgICAgICAiLS1pbnN0YWxsX3ByZWZpeD0lcyIlc2hlbGxRdW90ZShhcmNoYmFzZSksCisgICAgICAgICAgICAiLS1wcmVmaXg9JXMiJW9zLnBhdGguam9pbigiLyIsICpGV19WRVJTSU9OX1BSRUZJWCksCisgICAgICAgICAgICAiLS1vcGVuc3NsZGlyPS9TeXN0ZW0vTGlicmFyeS9PcGVuU1NMIiwKKyAgICAgICAgXQorICAgICAgICBpZiBub19hc206CisgICAgICAgICAgICBjb25maWd1cmVfb3B0cy5hcHBlbmQoIm5vLWFzbSIpCisgICAgICAgIHJ1bkNvbW1hbmQoIiAiLmpvaW4oWyJwZXJsIiwgIkNvbmZpZ3VyZSJdCisgICAgICAgICAgICAgICAgICAgICAgICArIGFyY2hfb3B0c1thcmNoXSArIGNvbmZpZ3VyZV9vcHRzKSkKKyAgICAgICAgcnVuQ29tbWFuZCgibWFrZSBkZXBlbmQgT1NYX1NESz0lcyIgJSBTREtQQVRIKQorICAgICAgICBydW5Db21tYW5kKCJtYWtlIGFsbCBPU1hfU0RLPSVzIiAlIFNES1BBVEgpCisgICAgICAgIHJ1bkNvbW1hbmQoIm1ha2UgaW5zdGFsbF9zdyBPU1hfU0RLPSVzIiAlIFNES1BBVEgpCisgICAgICAgICMgcnVuQ29tbWFuZCgibWFrZSB0ZXN0IikKKyAgICAgICAgcmV0dXJuCisKKyAgICBzcmNkaXIgPSBvcy5nZXRjd2QoKQorICAgIHVuaXZlcnNhbGJhc2UgPSBvcy5wYXRoLmpvaW4oc3JjZGlyLCAiLi4iLAorICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5iYXNlbmFtZShzcmNkaXIpICsgIi11bml2ZXJzYWwiKQorICAgIG9zLm1rZGlyKHVuaXZlcnNhbGJhc2UpCisgICAgYXJjaGJhc2Vmd3MgPSBbXQorICAgIGZvciBhcmNoIGluIGFyY2hMaXN0OgorICAgICAgICAjIGZyZXNoIGNvcHkgb2YgdGhlIHNvdXJjZSB0cmVlCisgICAgICAgIGFyY2hzcmMgPSBvcy5wYXRoLmpvaW4odW5pdmVyc2FsYmFzZSwgYXJjaCwgInNyYyIpCisgICAgICAgIHNodXRpbC5jb3B5dHJlZShzcmNkaXIsIGFyY2hzcmMsIHN5bWxpbmtzPVRydWUpCisgICAgICAgICMgaW5zdGFsbCBiYXNlIGZvciB0aGlzIGFyY2gKKyAgICAgICAgYXJjaGJhc2UgPSBvcy5wYXRoLmpvaW4odW5pdmVyc2FsYmFzZSwgYXJjaCwgInJvb3QiKQorICAgICAgICBvcy5ta2RpcihhcmNoYmFzZSkKKyAgICAgICAgIyBQeXRob24gZnJhbWV3b3JrIGJhc2Ugd2l0aGluIGluc3RhbGxfcHJlZml4OgorICAgICAgICAjIHRoZSBidWlsZCB3aWxsIGluc3RhbGwgaW50byB0aGlzIGZyYW1ld29yay4uCisgICAgICAgICMgVGhpcyBpcyB0byBlbnN1cmUgdGhhdCB0aGUgcmVzdWx0aW5nIHNoYXJlZCBsaWJzIGhhdmUKKyAgICAgICAgIyB0aGUgZGVzaXJlZCByZWFsIGluc3RhbGwgcGF0aHMgYnVpbHQgaW50byB0aGVtLgorICAgICAgICBhcmNoYmFzZWZ3ID0gb3MucGF0aC5qb2luKGFyY2hiYXNlLCAqRldfVkVSU0lPTl9QUkVGSVgpCisKKyAgICAgICAgIyBidWlsZCBvbmUgYXJjaGl0ZWN0dXJlCisgICAgICAgIG9zLmNoZGlyKGFyY2hzcmMpCisgICAgICAgIGJ1aWxkX29wZW5zc2xfYXJjaChhcmNoYmFzZSwgYXJjaCkKKyAgICAgICAgb3MuY2hkaXIoc3JjZGlyKQorICAgICAgICBhcmNoYmFzZWZ3cy5hcHBlbmQoYXJjaGJhc2VmdykKKworICAgICMgY29weSBhcmNoLWluZGVwZW5kZW50IGZpbGVzIGZyb20gbGFzdCBidWlsZCBpbnRvIHRoZSBiYXNlZGlyIGZyYW1ld29yaworICAgIGJhc2VmdyA9IG9zLnBhdGguam9pbihiYXNlZGlyLCAqRldfVkVSU0lPTl9QUkVGSVgpCisgICAgc2h1dGlsLmNvcHl0cmVlKAorICAgICAgICAgICAgb3MucGF0aC5qb2luKGFyY2hiYXNlZncsICJpbmNsdWRlIiwgIm9wZW5zc2wiKSwKKyAgICAgICAgICAgIG9zLnBhdGguam9pbihiYXNlZncsICJpbmNsdWRlIiwgIm9wZW5zc2wiKQorICAgICAgICAgICAgKQorCisgICAgc2hsaWJfdmVyc2lvbl9udW1iZXIgPSBncmVwVmFsdWUob3MucGF0aC5qb2luKGFyY2hzcmMsICJNYWtlZmlsZSIpLAorICAgICAgICAgICAgIlNITElCX1ZFUlNJT05fTlVNQkVSIikKKyAgICAjICAgZS5nLiAtPiAiMS4wLjAiCisgICAgbGliY3J5cHRvID0gImxpYmNyeXB0by5keWxpYiIKKyAgICBsaWJjcnlwdG9fdmVyc2lvbmVkID0gbGliY3J5cHRvLnJlcGxhY2UoIi4iLCAiLiIrc2hsaWJfdmVyc2lvbl9udW1iZXIrIi4iKQorICAgICMgICBlLmcuIC0+ICJsaWJjcnlwdG8uMS4wLjAuZHlsaWIiCisgICAgbGlic3NsID0gImxpYnNzbC5keWxpYiIKKyAgICBsaWJzc2xfdmVyc2lvbmVkID0gbGlic3NsLnJlcGxhY2UoIi4iLCAiLiIrc2hsaWJfdmVyc2lvbl9udW1iZXIrIi4iKQorICAgICMgICBlLmcuIC0+ICJsaWJzc2wuMS4wLjAuZHlsaWIiCisKKyAgICB0cnk6CisgICAgICAgIG9zLm1rZGlyKG9zLnBhdGguam9pbihiYXNlZncsICJsaWIiKSkKKyAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgcGFzcworCisgICAgIyBtZXJnZSB0aGUgaW5kaXZpZHVhbCBhcmNoLWRlcGVuZGVudCBzaGFyZWQgbGlicyBpbnRvIGEgZmF0IHNoYXJlZCBsaWIKKyAgICBhcmNoYmFzZWZ3cy5pbnNlcnQoMCwgYmFzZWZ3KQorICAgIGZvciAobGliX3VudmVyc2lvbmVkLCBsaWJfdmVyc2lvbmVkKSBpbiBbCisgICAgICAgICAgICAgICAgKGxpYmNyeXB0bywgbGliY3J5cHRvX3ZlcnNpb25lZCksCisgICAgICAgICAgICAgICAgKGxpYnNzbCwgbGlic3NsX3ZlcnNpb25lZCkKKyAgICAgICAgICAgIF06CisgICAgICAgIHJ1bkNvbW1hbmQoImxpcG8gLWNyZWF0ZSAtb3V0cHV0ICIgKworICAgICAgICAgICAgICAgICAgICAiICIuam9pbihzaGVsbFF1b3RlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihmdywgImxpYiIsIGxpYl92ZXJzaW9uZWQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGZ3IGluIGFyY2hiYXNlZndzKSkKKyAgICAgICAgIyBhbmQgY3JlYXRlIGFuIHVudmVyc2lvbmVkIHN5bWxpbmsgb2YgaXQKKyAgICAgICAgb3Muc3ltbGluayhsaWJfdmVyc2lvbmVkLCBvcy5wYXRoLmpvaW4oYmFzZWZ3LCAibGliIiwgbGliX3VudmVyc2lvbmVkKSkKKworICAgICMgQ3JlYXRlIGxpbmtzIGluIHRoZSB0ZW1wIGluY2x1ZGUgYW5kIGxpYiBkaXJzIHRoYXQgd2lsbCBiZSBpbmplY3RlZAorICAgICMgaW50byB0aGUgUHl0aG9uIGJ1aWxkIHNvIHRoYXQgc2V0dXAucHkgY2FuIGZpbmQgdGhlbSB3aGlsZSBidWlsZGluZworICAgICMgYW5kIHRoZSB2ZXJzaW9uZWQgbGlua3Mgc28gdGhhdCB0aGUgc2V0dXAucHkgcG9zdC1idWlsZCBpbXBvcnQgdGVzdAorICAgICMgZG9lcyBub3QgZmFpbC4KKyAgICByZWxhdGl2ZV9wYXRoID0gb3MucGF0aC5qb2luKCIuLiIsICIuLiIsICIuLiIsICpGV19WRVJTSU9OX1BSRUZJWCkKKyAgICBmb3IgZm4gaW4gWworICAgICAgICAgICAgWyJpbmNsdWRlIiwgIm9wZW5zc2wiXSwKKyAgICAgICAgICAgIFsibGliIiwgbGliY3J5cHRvXSwKKyAgICAgICAgICAgIFsibGliIiwgbGlic3NsXSwKKyAgICAgICAgICAgIFsibGliIiwgbGliY3J5cHRvX3ZlcnNpb25lZF0sCisgICAgICAgICAgICBbImxpYiIsIGxpYnNzbF92ZXJzaW9uZWRdLAorICAgICAgICBdOgorICAgICAgICBvcy5zeW1saW5rKAorICAgICAgICAgICAgb3MucGF0aC5qb2luKHJlbGF0aXZlX3BhdGgsICpmbiksCisgICAgICAgICAgICBvcy5wYXRoLmpvaW4oYmFzZWRpciwgInVzciIsICJsb2NhbCIsICpmbikKKyAgICAgICAgKQorCisgICAgcmV0dXJuCisKIGRlZiBidWlsZFJlY2lwZShyZWNpcGUsIGJhc2VkaXIsIGFyY2hMaXN0KToKICAgICAiIiIKICAgICBCdWlsZCBzb2Z0d2FyZSB1c2luZyBhIHJlY2lwZS4gVGhpcyBmdW5jdGlvbiBkb2VzIHRoZQpAQCAtNzgxLDggKzk3MCwxMCBAQAogICAgIGN1cmRpciA9IG9zLmdldGN3ZCgpCiAKICAgICBuYW1lID0gcmVjaXBlWyduYW1lJ10KKyAgICBUSElSRF9QQVJUWV9MSUJTLmFwcGVuZChuYW1lKQogICAgIHVybCA9IHJlY2lwZVsndXJsJ10KICAgICBjb25maWd1cmUgPSByZWNpcGUuZ2V0KCdjb25maWd1cmUnLCAnLi9jb25maWd1cmUnKQorICAgIGJ1aWxkcmVjaXBlID0gcmVjaXBlLmdldCgnYnVpbGRyZWNpcGUnLCBOb25lKQogICAgIGluc3RhbGwgPSByZWNpcGUuZ2V0KCdpbnN0YWxsJywgJ21ha2UgJiYgbWFrZSBpbnN0YWxsIERFU1RESVI9JXMnJSgKICAgICAgICAgc2hlbGxRdW90ZShiYXNlZGlyKSkpCiAKQEAgLTg1NCw3ICsxMDQ1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICcgLWFyY2ggJy5qb2luKGFyY2hMaXN0KSwKICAgICAgICAgICAgICAgICAgICAgICAgIHNoZWxsUXVvdGUoU0RLUEFUSClbMTotMV0sCiAgICAgICAgICAgICAgICAgICAgICAgICBzaGVsbFF1b3RlKGJhc2VkaXIpWzE6LTFdLCksCi0gICAgICAgICAgICAgICAgIkxERkxBR1M9LW1tYWNvc3gtdmVyc2lvbi1taW49JXMgLXN5c2xpYnJvb3QsJXMgLUwlcy91c3IvbG9jYWwvbGliIC1hcmNoICVzIiUoCisgICAgICAgICAgICAgICAgIkxERkxBR1M9LW1tYWNvc3gtdmVyc2lvbi1taW49JXMgLWlzeXNyb290ICVzIC1MJXMvdXNyL2xvY2FsL2xpYiAtYXJjaCAlcyIlKAogICAgICAgICAgICAgICAgICAgICBERVBUQVJHRVQsCiAgICAgICAgICAgICAgICAgICAgIHNoZWxsUXVvdGUoU0RLUEFUSClbMTotMV0sCiAgICAgICAgICAgICAgICAgICAgIHNoZWxsUXVvdGUoYmFzZWRpcilbMTotMV0sCkBAIC04ODAsOCArMTA3MSwxMyBAQAogICAgICAgICBwcmludCgiUnVubmluZyBjb25maWd1cmUgZm9yICVzIiUobmFtZSwpKQogICAgICAgICBydW5Db21tYW5kKCcgJy5qb2luKGNvbmZpZ3VyZV9hcmdzKSArICcgMj4mMScpCiAKLSAgICBwcmludCgiUnVubmluZyBpbnN0YWxsIGZvciAlcyIlKG5hbWUsKSkKLSAgICBydW5Db21tYW5kKCd7ICcgKyBpbnN0YWxsICsgJyA7fSAyPiYxJykKKyAgICBpZiBidWlsZHJlY2lwZSBpcyBub3QgTm9uZToKKyAgICAgICAgIyBjYWxsIHNwZWNpYWwtY2FzZSBidWlsZCByZWNpcGUsIGUuZy4gZm9yIG9wZW5zc2wKKyAgICAgICAgYnVpbGRyZWNpcGUoYmFzZWRpciwgYXJjaExpc3QpCisKKyAgICBpZiBpbnN0YWxsIGlzIG5vdCBOb25lOgorICAgICAgICBwcmludCgiUnVubmluZyBpbnN0YWxsIGZvciAlcyIlKG5hbWUsKSkKKyAgICAgICAgcnVuQ29tbWFuZCgneyAnICsgaW5zdGFsbCArICcgO30gMj4mMScpCiAKICAgICBwcmludCgiRG9uZSAlcyIlKG5hbWUsKSkKICAgICBwcmludCgiIikKQEAgLTkxNCw4ICsxMTEwLDEwIEBACiAgICAgZG9jZGlyID0gb3MucGF0aC5qb2luKHJvb3REaXIsICdweWRvY3MnKQogICAgIGN1ckRpciA9IG9zLmdldGN3ZCgpCiAgICAgb3MuY2hkaXIoYnVpbGREaXIpCi0gICAgcnVuQ29tbWFuZCgnbWFrZSB1cGRhdGUnKQotICAgIHJ1bkNvbW1hbmQoIm1ha2UgaHRtbCBQWVRIT049JyVzJyIgJSBvcy5wYXRoLmFic3BhdGgoc3lzLmV4ZWN1dGFibGUpKQorICAgICMgVGhlIERvYyBidWlsZCBjaGFuZ2VkIGZvciAzLjQgKHRlY2huaWNhbGx5LCBmb3IgMy40LjEpIGFuZCBmb3IgMi43LjkKKyAgICBydW5Db21tYW5kKCdtYWtlIGNsZWFuJykKKyAgICAjIEFzc3VtZSBzcGhpbngtYnVpbGQgaXMgb24gb3VyIFBBVEgsIGNoZWNrZWQgaW4gY2hlY2tFbnZpcm9ubWVudAorICAgIHJ1bkNvbW1hbmQoJ21ha2UgaHRtbCcpCiAgICAgb3MuY2hkaXIoY3VyRGlyKQogICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhkb2NkaXIpOgogICAgICAgICBvcy5ta2Rpcihkb2NkaXIpCkBAIC05NTUsMzQgKzExNTMsMjIgQEAKICAgICBydW5Db21tYW5kKCIlcyAtQyAtLWVuYWJsZS1mcmFtZXdvcmsgLS1lbmFibGUtdW5pdmVyc2Fsc2RrPSVzICIKICAgICAgICAgICAgICAgICItLXdpdGgtdW5pdmVyc2FsLWFyY2hzPSVzICIKICAgICAgICAgICAgICAgICIlcyAiCisgICAgICAgICAgICAgICAiJXMgIgogICAgICAgICAgICAgICAgIkxERkxBR1M9Jy1nIC1MJXMvbGlicmFyaWVzL3Vzci9sb2NhbC9saWInICIKICAgICAgICAgICAgICAgICJDRkxBR1M9Jy1nIC1JJXMvbGlicmFyaWVzL3Vzci9sb2NhbC9pbmNsdWRlJyAyPiYxIiUoCiAgICAgICAgIHNoZWxsUXVvdGUob3MucGF0aC5qb2luKFNSQ0RJUiwgJ2NvbmZpZ3VyZScpKSwgc2hlbGxRdW90ZShTREtQQVRIKSwKICAgICAgICAgVU5JVkVSU0FMQVJDSFMsCiAgICAgICAgICgnICcsICctLXdpdGgtY29tcHV0ZWQtZ290b3MgJylbUFlUSE9OXzNdLAorICAgICAgICAoJyAnLCAnLS13aXRob3V0LWVuc3VyZXBpcCAnKVtQWVRIT05fM10sCiAgICAgICAgIHNoZWxsUXVvdGUoV09SS0RJUilbMTotMV0sCiAgICAgICAgIHNoZWxsUXVvdGUoV09SS0RJUilbMTotMV0pKQogCisgICAgcHJpbnQoIlJ1bm5pbmcgbWFrZSB0b3VjaCIpCisgICAgcnVuQ29tbWFuZCgibWFrZSB0b3VjaCIpCisKICAgICBwcmludCgiUnVubmluZyBtYWtlIikKICAgICBydW5Db21tYW5kKCJtYWtlIikKIAotICAgICMgRm9yIGRlcGxveW1lbnQgdGFyZ2V0cyBvZiAxMC42IGFuZCBoaWdoZXIsIHdlIGJ1aWxkIG91ciBvd24gdmVyc2lvbgotICAgICMgb2YgVGNsIGFuZCBDb2NvYSBBcXVhIFRrIGxpYnMgYmVjYXVzZSB0aGUgQXBwbGUtc3VwcGxpZWQgVGsgOC41IGlzCi0gICAgIyBvdXQtb2YtZGF0ZSBhbmQgaGFzIGNyaXRpY2FsIGJ1Z3MuICBTYXZlIHRoZSBfdGtpbnRlci5zbyB0aGF0IHdhcwotICAgICMgbGlua2VkIHdpdGggL0xpYnJhcnkvRnJhbWV3b3Jrcy97VGNrLFRrfS5mcmFtZXdvcmsgYW5kIGJ1aWxkCi0gICAgIyBhbm90aGVyIF90a2ludGVyLnNvIGxpbmtlZCB3aXRoIG91ciBidWlsdGluIFRjbCBhbmQgVGsgbGlicy4KLSAgICBpZiAoREVQVEFSR0VUID4gJzEwLjUnKSBhbmQgKGdldFZlcnNpb25UdXBsZSgpID49ICgzLCA0KSk6Ci0gICAgICAgIHJ1bkNvbW1hbmQoImZpbmQgYnVpbGQgLW5hbWUgJ190a2ludGVyLnNvJyAiCi0gICAgICAgICAgICAgICAgICAgICAgICAiIC1leGVjZGlyIG12ICd7fScgX3RraW50ZXJfbGlicmFyeS5zbyBcOyIpCi0gICAgICAgIHByaW50KCJSdW5uaW5nIG1ha2UgdG8gYnVpbGQgYnVpbHRpbiBfdGtpbnRlciIpCi0gICAgICAgIHJ1bkNvbW1hbmQoIm1ha2UgVENMVEtfSU5DTFVERVM9Jy1JJXMvbGlicmFyaWVzL3Vzci9sb2NhbC9pbmNsdWRlJyAiCi0gICAgICAgICAgICAgICAgIlRDTFRLX0xJQlM9Jy1MJXMvbGlicmFyaWVzL3Vzci9sb2NhbC9saWIgLWx0Y2w4LjUgLWx0azguNSciJSgKLSAgICAgICAgICAgIHNoZWxsUXVvdGUoV09SS0RJUilbMTotMV0sCi0gICAgICAgICAgICBzaGVsbFF1b3RlKFdPUktESVIpWzE6LTFdKSkKLSAgICAgICAgIyBtYWtlIGEgY29weSB3aGljaCB3aWxsIGJlIG1vdmVkIHRvIGxpYi10a2ludGVyIGxhdGVyCi0gICAgICAgIHJ1bkNvbW1hbmQoImZpbmQgYnVpbGQgLW5hbWUgJ190a2ludGVyLnNvJyAiCi0gICAgICAgICAgICAgICAgICAgICAgICAiIC1leGVjZGlyIGNwIC1wICd7fScgX3RraW50ZXJfYnVpbHRpbi5zbyBcOyIpCi0KICAgICBwcmludCgiUnVubmluZyBtYWtlIGluc3RhbGwiKQogICAgIHJ1bkNvbW1hbmQoIm1ha2UgaW5zdGFsbCBERVNURElSPSVzIiUoCiAgICAgICAgIHNoZWxsUXVvdGUocm9vdERpcikpKQpAQCAtMTAwNywyNyArMTE5MywxMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUHl0aG9uLmZyYW1ld29yaycsICdWZXJzaW9ucycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcnNpb24sICdsaWInLCAncHl0aG9uJXMnJSh2ZXJzaW9uLCkpCiAKLSAgICAjIElmIHdlIG1hZGUgbXVsdGlwbGUgdmVyc2lvbnMgb2YgX3RraW50ZXIsIG1vdmUgdGhlbSB0bwotICAgICMgdGhlaXIgb3duIGRpcmVjdG9yaWVzIHVuZGVyIHB5dGhvbiBsaWIuICBUaGlzIGFsbG93cwotICAgICMgdXNlcnMgdG8gc2VsZWN0IHdoaWNoIHRvIGltcG9ydCBieSBtYW5pcHVsYXRpbmcgc3lzLnBhdGgKLSAgICAjIGRpcmVjdGx5IG9yIHdpdGggUFlUSE9OUEFUSC4KLQotICAgIGlmIChERVBUQVJHRVQgPiAnMTAuNScpIGFuZCAoZ2V0VmVyc2lvblR1cGxlKCkgPj0gKDMsIDQpKToKLSAgICAgICAgVEtJTlRFUlMgPSBbJ2J1aWx0aW4nLCAnbGlicmFyeSddCi0gICAgICAgIHRraW50ZXJfbW92ZXMgPSBbKCdfdGtpbnRlcl8nICsgdGtuICsgJy5zbycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihwYXRoX3RvX2xpYiwgJ2xpYi10a2ludGVyJywgdGtuKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgdGtuIGluIFRLSU5URVJTXQotICAgICAgICAjIENyZWF0ZSB0aGUgZGVzdGluYXRpb24gZGlyZWN0b3JpZXMgdW5kZXIgbGliLXRraW50ZXIuCi0gICAgICAgICMgVGhlIHBlcm1pc3Npb25zIGFuZCB1aWQvZ2lkIHdpbGwgYmUgZml4ZWQgdXAgbmV4dC4KLSAgICAgICAgZm9yIHRrbSBpbiB0a2ludGVyX21vdmVzOgotICAgICAgICAgICAgb3MubWFrZWRpcnModGttWzFdKQotCiAgICAgcHJpbnQoIkZpeCBmaWxlIG1vZGVzIikKICAgICBmcm1EaXIgPSBvcy5wYXRoLmpvaW4ocm9vdERpciwgJ0xpYnJhcnknLCAnRnJhbWV3b3JrcycsICdQeXRob24uZnJhbWV3b3JrJykKICAgICBnaWQgPSBncnAuZ2V0Z3JuYW0oJ2FkbWluJykuZ3JfZ2lkCiAKICAgICBzaGFyZWRfbGliX2Vycm9yID0gRmFsc2UKLSAgICBtb3Zlc19saXN0ID0gW10KICAgICBmb3IgZGlycGF0aCwgZGlybmFtZXMsIGZpbGVuYW1lcyBpbiBvcy53YWxrKGZybURpcik6CiAgICAgICAgIGZvciBkbiBpbiBkaXJuYW1lczoKICAgICAgICAgICAgIG9zLmNobW9kKG9zLnBhdGguam9pbihkaXJwYXRoLCBkbiksIFNUQVRfMG83NzUpCkBAIC0xMDUzLDI1ICsxMjIzLDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoc2wsIHApKQogICAgICAgICAgICAgICAgICAgICAgICAgc2hhcmVkX2xpYl9lcnJvciA9IFRydWUKIAotICAgICAgICAgICAgIyBJZiB0aGlzIGlzIGEgX3RraW50ZXIgdmFyaWFudCwgbW92ZSBpdCB0byBpdHMgb3duIGRpcmVjdG9yeQotICAgICAgICAgICAgIyBub3cgdGhhdCB3ZSBoYXZlIGZpeGVkIGl0cyBwZXJtaXNzaW9ucyBhbmQgY2hlY2tlZCB0aGF0IGl0Ci0gICAgICAgICAgICAjIHdhcyBsaW5rZWQgcHJvcGVybHkuICBUaGUgZGlyZWN0b3J5IHdhcyBjcmVhdGVkIGVhcmxpZXIuCi0gICAgICAgICAgICAjIFRoZSBmaWxlcyBhcmUgbW92ZWQgYWZ0ZXIgdGhlIGVudGlyZSB0cmVlIGhhcyBiZWVuIHdhbGtlZAotICAgICAgICAgICAgIyBzaW5jZSB0aGUgc2hhcmVkIGxpYnJhcnkgY2hlY2tpbmcgZGVwZW5kcyBvbiB0aGUgZmlsZXMKLSAgICAgICAgICAgICMgaGF2aW5nIHVuaXF1ZSBuYW1lcy4KLSAgICAgICAgICAgIGlmIChERVBUQVJHRVQgPiAnMTAuNScpIGFuZCAoZ2V0VmVyc2lvblR1cGxlKCkgPj0gKDMsIDQpKToKLSAgICAgICAgICAgICAgICBmb3IgdGttIGluIHRraW50ZXJfbW92ZXM6Ci0gICAgICAgICAgICAgICAgICAgIGlmIGZuID09IHRrbVswXToKLSAgICAgICAgICAgICAgICAgICAgICAgIG1vdmVzX2xpc3QuYXBwZW5kKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwLCBvcy5wYXRoLmpvaW4odGttWzFdLCAnX3RraW50ZXIuc28nKSkpCi0KICAgICBpZiBzaGFyZWRfbGliX2Vycm9yOgogICAgICAgICBmYXRhbCgiVW5leHBlY3RlZCBzaGFyZWQgbGlicmFyeSBlcnJvcnMuIikKIAotICAgICMgTm93IGRvIHRoZSBtb3Zlcy4KLSAgICBmb3IgbWwgaW4gbW92ZXNfbGlzdDoKLSAgICAgICAgc2h1dGlsLm1vdmUobWxbMF0sIG1sWzFdKQotCiAgICAgaWYgUFlUSE9OXzM6CiAgICAgICAgIExEVkVSU0lPTj1Ob25lCiAgICAgICAgIFZFUlNJT049Tm9uZQpAQCAtMTE3OSw2ICsxMzMzLDcgQEAKICAgICBkYXRhID0gZGF0YS5yZXBsYWNlKCckTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUJywgJycuam9pbigoREVQVEFSR0VULCAnIG9yIGxhdGVyJykpKQogICAgIGRhdGEgPSBkYXRhLnJlcGxhY2UoJyRBUkNISVRFQ1RVUkVTJywgIiwgIi5qb2luKHVuaXZlcnNhbF9vcHRzX21hcFtVTklWRVJTQUxBUkNIU10pKQogICAgIGRhdGEgPSBkYXRhLnJlcGxhY2UoJyRJTlNUQUxMX1NJWkUnLCBpbnN0YWxsU2l6ZSgpKQorICAgIGRhdGEgPSBkYXRhLnJlcGxhY2UoJyRUSElSRF9QQVJUWV9MSUJTJywgIlxcXG4iLmpvaW4oVEhJUkRfUEFSVFlfTElCUykpCiAKICAgICAjIFRoaXMgb25lIGlzIG5vdCBoYW5keSBhcyBhIHRlbXBsYXRlIHZhcmlhYmxlCiAgICAgZGF0YSA9IGRhdGEucmVwbGFjZSgnJFBZVEhPTkZSQU1FV09SS0lOU1RBTExESVInLCAnL0xpYnJhcnkvRnJhbWV3b3Jrcy9QeXRob24uZnJhbWV3b3JrJykKQEAgLTExODcsNyArMTM0Miw5IEBACiAgICAgZnAuY2xvc2UoKQogCiBkZWYgcGF0Y2hTY3JpcHQoaW5QYXRoLCBvdXRQYXRoKToKKyAgICBtYWpvciwgbWlub3IgPSBnZXRWZXJzaW9uTWFqb3JNaW5vcigpCiAgICAgZGF0YSA9IGZpbGVDb250ZW50cyhpblBhdGgpCisgICAgZGF0YSA9IGRhdGEucmVwbGFjZSgnQFBZTUFKT1JAJywgc3RyKG1ham9yKSkKICAgICBkYXRhID0gZGF0YS5yZXBsYWNlKCdAUFlWRVJAJywgZ2V0VmVyc2lvbigpKQogICAgIGZwID0gb3BlbihvdXRQYXRoLCAndycpCiAgICAgZnAud3JpdGUoZGF0YSkKQEAgLTEzNTksOCArMTUxNiw2IEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBwYXRjaEZpbGUob3MucGF0aC5qb2luKCdyZXNvdXJjZXMnLCBmbiksIG9zLnBhdGguam9pbihyc3JjRGlyLCBmbikpCiAKLSAgICBzaHV0aWwuY29weSgiLi4vLi4vTElDRU5TRSIsIG9zLnBhdGguam9pbihyc3JjRGlyLCAnTGljZW5zZS50eHQnKSkKLQogCiBkZWYgaW5zdGFsbFNpemUoY2xlYXI9RmFsc2UsIF9zYXZlZD1bXSk6CiAgICAgaWYgY2xlYXI6CkBAIC0xNDY4LDEyICsxNjIzLDE0IEBACiAKIAogICAgICMgUHJlcGFyZSB0aGUgYXBwbGljYXRpb25zIGZvbGRlcgotICAgIGZuID0gb3MucGF0aC5qb2luKFdPUktESVIsICJfcm9vdCIsICJBcHBsaWNhdGlvbnMiLAotICAgICAgICAgICAgICAgICJQeXRob24gJXMiJShnZXRWZXJzaW9uKCksKSwgIlVwZGF0ZSBTaGVsbCBQcm9maWxlLmNvbW1hbmQiKQotICAgIHBhdGNoU2NyaXB0KCJzY3JpcHRzL3Bvc3RmbGlnaHQucGF0Y2gtcHJvZmlsZSIsICBmbikKLQogICAgIGZvbGRlciA9IG9zLnBhdGguam9pbihXT1JLRElSLCAiX3Jvb3QiLCAiQXBwbGljYXRpb25zIiwgIlB5dGhvbiAlcyIlKAogICAgICAgICBnZXRWZXJzaW9uKCksKSkKKyAgICBmbiA9IG9zLnBhdGguam9pbihmb2xkZXIsICJMaWNlbnNlLnJ0ZiIpCisgICAgcGF0Y2hGaWxlKCJyZXNvdXJjZXMvTGljZW5zZS5ydGYiLCAgZm4pCisgICAgZm4gPSBvcy5wYXRoLmpvaW4oZm9sZGVyLCAiUmVhZE1lLnJ0ZiIpCisgICAgcGF0Y2hGaWxlKCJyZXNvdXJjZXMvUmVhZE1lLnJ0ZiIsICBmbikKKyAgICBmbiA9IG9zLnBhdGguam9pbihmb2xkZXIsICJVcGRhdGUgU2hlbGwgUHJvZmlsZS5jb21tYW5kIikKKyAgICBwYXRjaFNjcmlwdCgic2NyaXB0cy9wb3N0ZmxpZ2h0LnBhdGNoLXByb2ZpbGUiLCAgZm4pCiAgICAgb3MuY2htb2QoZm9sZGVyLCBTVEFUXzBvNzU1KQogICAgIHNldEljb24oZm9sZGVyLCAiLi4vSWNvbnMvUHl0aG9uIEZvbGRlci5pY25zIikKIApAQCAtMTQ4MSwxMCArMTYzOCwxMiBAQAogICAgIGJ1aWxkSW5zdGFsbGVyKCkKIAogICAgICMgQW5kIGNvcHkgdGhlIHJlYWRtZSBpbnRvIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgaW5zdGFsbGVyCi0gICAgcGF0Y2hGaWxlKCdyZXNvdXJjZXMvUmVhZE1lLnR4dCcsIG9zLnBhdGguam9pbihXT1JLRElSLCAnaW5zdGFsbGVyJywgJ1JlYWRNZS50eHQnKSkKKyAgICBwYXRjaEZpbGUoJ3Jlc291cmNlcy9SZWFkTWUucnRmJywKKyAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oV09SS0RJUiwgJ2luc3RhbGxlcicsICdSZWFkTWUucnRmJykpCiAKICAgICAjIERpdHRvIGZvciB0aGUgbGljZW5zZSBmaWxlLgotICAgIHNodXRpbC5jb3B5KCcuLi8uLi9MSUNFTlNFJywgb3MucGF0aC5qb2luKFdPUktESVIsICdpbnN0YWxsZXInLCAnTGljZW5zZS50eHQnKSkKKyAgICBwYXRjaEZpbGUoJ3Jlc291cmNlcy9MaWNlbnNlLnJ0ZicsCisgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKFdPUktESVIsICdpbnN0YWxsZXInLCAnTGljZW5zZS5ydGYnKSkKIAogICAgIGZwID0gb3Blbihvcy5wYXRoLmpvaW4oV09SS0RJUiwgJ2luc3RhbGxlcicsICdCdWlsZC50eHQnKSwgJ3cnKQogICAgIGZwLndyaXRlKCIjIEJVSUxEIElORk9cbiIpCmRpZmYgLS1naXQgYS9NYWMvQnVpbGRTY3JpcHQvb3BlbnNzbF9zZGtfbWFrZWRlcGVuZC5wYXRjaCBiL01hYy9CdWlsZFNjcmlwdC9vcGVuc3NsX3Nka19tYWtlZGVwZW5kLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1YmQ2OWIKLS0tIC9kZXYvbnVsbAorKysgYi9NYWMvQnVpbGRTY3JpcHQvb3BlbnNzbF9zZGtfbWFrZWRlcGVuZC5wYXRjaApAQCAtMCwwICsxLDU2IEBACisjIEhHIGNoYW5nZXNldCBwYXRjaAorIyBQYXJlbnQgIGZmOGE3NTU3NjA3Y2ZmZDYyNjk5N2U1N2VkMzFjMTAxMmEzMDE4YWEKKyMgb3BlbnNzbF9zZGtfbWFrZWRlcGVuZC5wYXRjaAorIworIyAJdXNpbmcgb3BlbnNzbCAxLjAuMmUKKyMKKyMgLSBzdXBwb3J0IGJ1aWxkaW5nIHdpdGggYW4gT1MgWCBTREsKKyMgLSBhbGxvdyAibWFrZSBkZXBlbmQiIHRvIHVzZSBjb21waWxlcnMgd2l0aCBuYW1lcyBvdGhlciB0aGFuICJnY2MiCisKK2RpZmYgQ29uZmlndXJlCisKK2RpZmYgLS1naXQgYS9Db25maWd1cmUgYi9Db25maWd1cmUKKy0tLSBhL0NvbmZpZ3VyZQorKysrIGIvQ29uZmlndXJlCitAQCAtNjM1LDEyICs2MzUsMTIgQEAKKyAKKyAjIyMjIyBNYWNPUyBYIChhLmsuYS4gUmhhcHNvZHkgb3IgRGFyd2luKSBzZXR1cAorICJyaGFwc29keS1wcGMtY2MiLCJjYzotTzMgLURCX0VORElBTjo6KHVua25vd24pOk1BQ09TWF9SSEFQU09EWTo6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19VTlJPTEwgQkZfUFRSOiR7bm9fYXNtfTo6IiwKKy0iZGFyd2luLXBwYy1jYyIsImNjOi1hcmNoIHBwYyAtTzMgLURCX0VORElBTiAtV2EsLWZvcmNlX2NwdXN1YnR5cGVfQUxMOjotRF9SRUVOVFJBTlQ6TUFDT1NYOi1XbCwtc2VhcmNoX3BhdGhzX2ZpcnN0JTpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1VOUk9MTCBCRl9QVFI6JHtwcGMzMl9hc219Om9zeDMyOmRsZmNuOmRhcndpbi1zaGFyZWQ6LWZQSUMgLWZuby1jb21tb246LWFyY2ggcHBjIC1keW5hbWljbGliOi5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpLmR5bGliIiwKKy0iZGFyd2luNjQtcHBjLWNjIiwiY2M6LWFyY2ggcHBjNjQgLU8zIC1EQl9FTkRJQU46Oi1EX1JFRU5UUkFOVDpNQUNPU1g6LVdsLC1zZWFyY2hfcGF0aHNfZmlyc3QlOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19VTlJPTEwgQkZfUFRSOiR7cHBjNjRfYXNtfTpvc3g2NDpkbGZjbjpkYXJ3aW4tc2hhcmVkOi1mUElDIC1mbm8tY29tbW9uOi1hcmNoIHBwYzY0IC1keW5hbWljbGliOi5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpLmR5bGliIiwKKy0iZGFyd2luLWkzODYtY2MiLCJjYzotYXJjaCBpMzg2IC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtRExfRU5ESUFOOjotRF9SRUVOVFJBTlQ6TUFDT1NYOi1XbCwtc2VhcmNoX3BhdGhzX2ZpcnN0JTpCTl9MTE9ORyBSQzRfSU5UIFJDNF9DSFVOSyBERVNfVU5ST0xMIEJGX1BUUjoiLmV2YWx7bXkgJGFzbT0keDg2X2FzbTskYXNtPX5zL2Nhc3RcLTU4Nlwuby8vOyRhc219LiI6bWFjb3N4OmRsZmNuOmRhcndpbi1zaGFyZWQ6LWZQSUMgLWZuby1jb21tb246LWFyY2ggaTM4NiAtZHluYW1pY2xpYjouXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKS5keWxpYiIsCistImRlYnVnLWRhcndpbi1pMzg2LWNjIiwiY2M6LWFyY2ggaTM4NiAtZzMgLURMX0VORElBTjo6LURfUkVFTlRSQU5UOk1BQ09TWDotV2wsLXNlYXJjaF9wYXRoc19maXJzdCU6Qk5fTExPTkcgUkM0X0lOVCBSQzRfQ0hVTksgREVTX1VOUk9MTCBCRl9QVFI6JHt4ODZfYXNtfTptYWNvc3g6ZGxmY246ZGFyd2luLXNoYXJlZDotZlBJQyAtZm5vLWNvbW1vbjotYXJjaCBpMzg2IC1keW5hbWljbGliOi5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpLmR5bGliIiwKKy0iZGFyd2luNjQteDg2XzY0LWNjIiwiY2M6LWFyY2ggeDg2XzY0IC1PMyAtRExfRU5ESUFOIC1XYWxsOjotRF9SRUVOVFJBTlQ6TUFDT1NYOi1XbCwtc2VhcmNoX3BhdGhzX2ZpcnN0JTpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEw6Ii5ldmFse215ICRhc209JHg4Nl82NF9hc207JGFzbT1+cy9yYzRcLVteOl0rLy87JGFzbX0uIjptYWNvc3g6ZGxmY246ZGFyd2luLXNoYXJlZDotZlBJQyAtZm5vLWNvbW1vbjotYXJjaCB4ODZfNjQgLWR5bmFtaWNsaWI6LlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikuZHlsaWIiLAorLSJkZWJ1Zy1kYXJ3aW42NC14ODZfNjQtY2MiLCJjYzotYXJjaCB4ODZfNjQgLWdnZGIgLWcyIC1PMCAtRExfRU5ESUFOIC1XYWxsOjotRF9SRUVOVFJBTlQ6TUFDT1NYOi1XbCwtc2VhcmNoX3BhdGhzX2ZpcnN0JTpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEw6Ii5ldmFse215ICRhc209JHg4Nl82NF9hc207JGFzbT1+cy9yYzRcLVteOl0rLy87JGFzbX0uIjptYWNvc3g6ZGxmY246ZGFyd2luLXNoYXJlZDotZlBJQyAtZm5vLWNvbW1vbjotYXJjaCB4ODZfNjQgLWR5bmFtaWNsaWI6LlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikuZHlsaWIiLAorKyJkYXJ3aW4tcHBjLWNjIiwiY2M6LWFyY2ggcHBjIC1pc3lzcm9vdCBcJChPU1hfU0RLKSAtTzMgLURCX0VORElBTiAtV2EsLWZvcmNlX2NwdXN1YnR5cGVfQUxMOjotRF9SRUVOVFJBTlQ6TUFDT1NYOi1XbCwtc2VhcmNoX3BhdGhzX2ZpcnN0JTpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1VOUk9MTCBCRl9QVFI6JHtwcGMzMl9hc219Om9zeDMyOmRsZmNuOmRhcndpbi1zaGFyZWQ6LWZQSUMgLWZuby1jb21tb246LWFyY2ggcHBjIC1keW5hbWljbGliOi5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpLmR5bGliIiwKKysiZGFyd2luNjQtcHBjLWNjIiwiY2M6LWFyY2ggcHBjNjQgLWlzeXNyb290IFwkKE9TWF9TREspIC1PMyAtREJfRU5ESUFOOjotRF9SRUVOVFJBTlQ6TUFDT1NYOi1XbCwtc2VhcmNoX3BhdGhzX2ZpcnN0JTpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfVU5ST0xMIEJGX1BUUjoke3BwYzY0X2FzbX06b3N4NjQ6ZGxmY246ZGFyd2luLXNoYXJlZDotZlBJQyAtZm5vLWNvbW1vbjotYXJjaCBwcGM2NCAtZHluYW1pY2xpYjouXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKS5keWxpYiIsCisrImRhcndpbi1pMzg2LWNjIiwiY2M6LWFyY2ggaTM4NiAtaXN5c3Jvb3QgXCQoT1NYX1NESykgLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1ETF9FTkRJQU46Oi1EX1JFRU5UUkFOVDpNQUNPU1g6LVdsLC1zZWFyY2hfcGF0aHNfZmlyc3QlOkJOX0xMT05HIFJDNF9JTlQgUkM0X0NIVU5LIERFU19VTlJPTEwgQkZfUFRSOiIuZXZhbHtteSAkYXNtPSR4ODZfYXNtOyRhc209fnMvY2FzdFwtNTg2XC5vLy87JGFzbX0uIjptYWNvc3g6ZGxmY246ZGFyd2luLXNoYXJlZDotZlBJQyAtZm5vLWNvbW1vbjotYXJjaCBpMzg2IC1keW5hbWljbGliOi5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpLmR5bGliIiwKKysiZGVidWctZGFyd2luLWkzODYtY2MiLCJjYzotYXJjaCBpMzg2IC1pc3lzcm9vdCBcJChPU1hfU0RLKSAtZzMgLURMX0VORElBTjo6LURfUkVFTlRSQU5UOk1BQ09TWDotV2wsLXNlYXJjaF9wYXRoc19maXJzdCU6Qk5fTExPTkcgUkM0X0lOVCBSQzRfQ0hVTksgREVTX1VOUk9MTCBCRl9QVFI6JHt4ODZfYXNtfTptYWNvc3g6ZGxmY246ZGFyd2luLXNoYXJlZDotZlBJQyAtZm5vLWNvbW1vbjotYXJjaCBpMzg2IC1keW5hbWljbGliOi5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpLmR5bGliIiwKKysiZGFyd2luNjQteDg2XzY0LWNjIiwiY2M6LWFyY2ggeDg2XzY0IC1pc3lzcm9vdCBcJChPU1hfU0RLKSAtTzMgLURMX0VORElBTiAtV2FsbDo6LURfUkVFTlRSQU5UOk1BQ09TWDotV2wsLXNlYXJjaF9wYXRoc19maXJzdCU6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMOiIuZXZhbHtteSAkYXNtPSR4ODZfNjRfYXNtOyRhc209fnMvcmM0XC1bXjpdKy8vOyRhc219LiI6bWFjb3N4OmRsZmNuOmRhcndpbi1zaGFyZWQ6LWZQSUMgLWZuby1jb21tb246LWFyY2ggeDg2XzY0IC1keW5hbWljbGliOi5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpLmR5bGliIiwKKysiZGVidWctZGFyd2luNjQteDg2XzY0LWNjIiwiY2M6LWFyY2ggeDg2XzY0IC1pc3lzcm9vdCBcJChPU1hfU0RLKSAtZ2dkYiAtZzIgLU8wIC1ETF9FTkRJQU4gLVdhbGw6Oi1EX1JFRU5UUkFOVDpNQUNPU1g6LVdsLC1zZWFyY2hfcGF0aHNfZmlyc3QlOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19JTlQgREVTX1VOUk9MTDoiLmV2YWx7bXkgJGFzbT0keDg2XzY0X2FzbTskYXNtPX5zL3JjNFwtW146XSsvLzskYXNtfS4iOm1hY29zeDpkbGZjbjpkYXJ3aW4tc2hhcmVkOi1mUElDIC1mbm8tY29tbW9uOi1hcmNoIHg4Nl82NCAtZHluYW1pY2xpYjouXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKS5keWxpYiIsCisgImRlYnVnLWRhcndpbi1wcGMtY2MiLCJjYzotREJOX0RFQlVHIC1EUkVGX0NIRUNLIC1EQ09ORl9ERUJVRyAtRENSWVBUT19NREVCVUcgLURCX0VORElBTiAtZyAtV2FsbCAtTzo6LURfUkVFTlRSQU5UOk1BQ09TWDo6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19VTlJPTEwgQkZfUFRSOiR7cHBjMzJfYXNtfTpvc3gzMjpkbGZjbjpkYXJ3aW4tc2hhcmVkOi1mUElDOi1keW5hbWljbGliOi5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpLmR5bGliIiwKKyAjIGlQaG9uZU9TL2lPUworICJpcGhvbmVvcy1jcm9zcyIsImxsdm0tZ2NjOi1PMyAtaXN5c3Jvb3QgXCQoQ1JPU1NfVE9QKS9TREtzL1wkKENST1NTX1NESykgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLWZuby1jb21tb246Oi1EX1JFRU5UUkFOVDppT1M6LVdsLC1zZWFyY2hfcGF0aHNfZmlyc3QlOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfVU5ST0xMIEJGX1BUUjoke25vX2FzbX06ZGxmY246ZGFyd2luLXNoYXJlZDotZlBJQyAtZm5vLWNvbW1vbjotZHluYW1pY2xpYjouXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKS5keWxpYiIsCitAQCAtMTcxNCw4ICsxNzE0LDcgQEAKKyAJCXMvXkNDPS4qJC9DQz0gJGNjLzsKKyAJCXMvXkFSPVxzKmFyL0FSPSAkYXIvOworIAkJcy9eUkFOTElCPS4qL1JBTkxJQj0gJHJhbmxpYi87CistCQlzL15NQUtFREVQUFJPRz0uKiQvTUFLRURFUFBST0c9ICRjYy8gaWYgJGNjIGVxICJnY2MiOworLQkJcy9eTUFLRURFUFBST0c9LiokL01BS0VERVBQUk9HPSAkY2MvIGlmICRlY2MgZXEgImdjYyIgfHwgJGVjYyBlcSAiY2xhbmciOworKwkJcy9eTUFLRURFUFBST0c9LiokL01BS0VERVBQUk9HPSAkY2MvCisgCQl9CisgCXMvXkNGTEFHPS4qJC9DRkxBRz0gJGNmbGFncy87CisgCXMvXkRFUEZMQUc9LiokL0RFUEZMQUc9JGRlcGZsYWdzLzsKK2RpZmYgLS1naXQgYS91dGlsL2RvbWQgYi91dGlsL2RvbWQKKy0tLSBhL3V0aWwvZG9tZAorKysrIGIvdXRpbC9kb21kCitAQCAtMTQsOCArMTQsNyBAQAorIGNwIE1ha2VmaWxlIE1ha2VmaWxlLnNhdmUKKyAjIGZha2UgdGhlIHByZXNlbmNlIG9mIEtlcmJlcm9zCisgdG91Y2ggJFRPUC9rcmI1LmgKKy1pZiAke01BS0VERVBFTkR9IC0tdmVyc2lvbiAyPiYxIHwgZ3JlcCAtcSAiY2xhbmciIHx8CistICAgZWNobyAkTUFLRURFUEVORCB8IGdyZXAgLXEgImdjYyI7IHRoZW4KKytpZiB0cnVlIDsgdGhlbgorICAgICBhcmdzPSIiCisgICAgIHdoaWxlIFsgJCMgLWd0IDAgXTsgZG8KKyAJaWYgWyAiJDEiICE9ICItLSIgXTsgdGhlbiBhcmdzPSIkYXJncyAkMSI7IGZpCmRpZmYgLS1naXQgYS9NYWMvQnVpbGRTY3JpcHQvcmVzb3VyY2VzL0xpY2Vuc2UucnRmIGIvTWFjL0J1aWxkU2NyaXB0L3Jlc291cmNlcy9MaWNlbnNlLnJ0ZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZmY0ZDViCi0tLSAvZGV2L251bGwKKysrIGIvTWFjL0J1aWxkU2NyaXB0L3Jlc291cmNlcy9MaWNlbnNlLnJ0ZgpAQCAtMCwwICsxLDE0MiBAQAore1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcY29jb2FydGYxMzQzXGNvY29hc3VicnRmMTYwCit7XGZvbnR0YmxcZjBcZnN3aXNzXGZjaGFyc2V0MCBIZWx2ZXRpY2E7XGYxXGZtb2Rlcm5cZmNoYXJzZXQwIENvdXJpZXJOZXdQUy1Cb2xkTVQ7XGYyXGZtb2Rlcm5cZmNoYXJzZXQwIENvdXJpZXJOZXdQU01UOworfQore1xjb2xvcnRibDtccmVkMjU1XGdyZWVuMjU1XGJsdWUyNTU7fQorXG1hcmdsMTQ0MFxtYXJncjE0NDBcdmlld3cxNDYyMFx2aWV3aDEzMzgwXHZpZXdraW5kMAorXHBhcmRcdHg3MjBcdHgxNDQwXHR4MjE2MFx0eDI4ODBcdHgzNjAwXHR4NDMyMFx0eDUwNDBcdHg1NzYwXHR4NjQ4MFx0eDcyMDBcdHg3OTIwXHR4ODY0MFxwYXJkaXJuYXR1cmFsCisKK1xmMFxiXGZzMzYgXGNmMCBcdWwgXHVsYzAgSElTVE9SWSBBTkQgTElDRU5TRVwKKworXGZzMjQgXAorSElTVE9SWSBPRiBUSEUgU09GVFdBUkVcCisKK1xiMCBcdWxub25lIFwKK1B5dGhvbiB3YXMgY3JlYXRlZCBpbiB0aGUgZWFybHkgMTk5MHMgYnkgR3VpZG8gdmFuIFJvc3N1bSBhdCBTdGljaHRpbmcgTWF0aGVtYXRpc2NoIENlbnRydW0gKENXSSwgc2VlIGh0dHA6Ly93d3cuY3dpLm5sKSBpbiB0aGUgTmV0aGVybGFuZHMgYXMgYSBzdWNjZXNzb3Igb2YgYSBsYW5ndWFnZSBjYWxsZWQgQUJDLiBHdWlkbyByZW1haW5zIFB5dGhvbidzIHByaW5jaXBhbCBhdXRob3IsIGFsdGhvdWdoIGl0IGluY2x1ZGVzIG1hbnkgY29udHJpYnV0aW9ucyBmcm9tIG90aGVycy5cCitcCitJbiAxOTk1LCBHdWlkbyBjb250aW51ZWQgaGlzIHdvcmsgb24gUHl0aG9uIGF0IHRoZSBDb3Jwb3JhdGlvbiBmb3IgTmF0aW9uYWwgUmVzZWFyY2ggSW5pdGlhdGl2ZXMgKENOUkksIHNlZSBodHRwOi8vd3d3LmNucmkucmVzdG9uLnZhLnVzKSBpbiBSZXN0b24sIFZpcmdpbmlhIHdoZXJlIGhlIHJlbGVhc2VkIHNldmVyYWwgdmVyc2lvbnMgb2YgdGhlIHNvZnR3YXJlLlwKK1wKK0luIE1heSAyMDAwLCBHdWlkbyBhbmQgdGhlIFB5dGhvbiBjb3JlIGRldmVsb3BtZW50IHRlYW0gbW92ZWQgdG8gQmVPcGVuLmNvbSB0byBmb3JtIHRoZSBCZU9wZW4gUHl0aG9uTGFicyB0ZWFtLiBJbiBPY3RvYmVyIG9mIHRoZSBzYW1lIHllYXIsIHRoZSBQeXRob25MYWJzIHRlYW0gbW92ZWQgdG8gRGlnaXRhbCBDcmVhdGlvbnMgKG5vdyBab3BlIENvcnBvcmF0aW9uLCBzZWUgaHR0cDovL3d3dy56b3BlLmNvbSkuIEluIDIwMDEsIHRoZSBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiAoUFNGLCBzZWUgaHR0cDovL3d3dy5weXRob24ub3JnL3BzZi8pIHdhcyBmb3JtZWQsIGEgbm9uLXByb2ZpdCBvcmdhbml6YXRpb24gY3JlYXRlZCBzcGVjaWZpY2FsbHkgdG8gb3duIFB5dGhvbi1yZWxhdGVkIEludGVsbGVjdHVhbCBQcm9wZXJ0eS4gWm9wZSBDb3Jwb3JhdGlvbiBpcyBhIHNwb25zb3JpbmcgbWVtYmVyIG9mIHRoZSBQU0YuXAorXAorQWxsIFB5dGhvbiByZWxlYXNlcyBhcmUgT3BlbiBTb3VyY2UgKHNlZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnIGZvciB0aGUgT3BlbiBTb3VyY2UgRGVmaW5pdGlvbikuIEhpc3RvcmljYWxseSwgbW9zdCwgYnV0IG5vdCBhbGwsIFB5dGhvbiByZWxlYXNlcyBoYXZlIGFsc28gYmVlbiBHUEwtY29tcGF0aWJsZTsgdGhlIHRhYmxlIGJlbG93IHN1bW1hcml6ZXMgdGhlIHZhcmlvdXMgcmVsZWFzZXMuXAorXAorCitcZjFcYiBSZWxlYXNlICAgICAgICAgRGVyaXZlZCAgICAgWWVhciAgICAgICAgT3duZXIgICAgICAgR1BMLVwKKyAgICAgICAgICAgICAgICBmcm9tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wYXRpYmxlP1wKKworXGYyXGIwIFwKKzAuOS4wIHRocnUgMS4yICBuL2EgICAgICAgICAxOTkxLTE5OTUgICBDV0kgICAgICAgICB5ZXNcCisxLjMgdGhydSAxLjUuMiAgMS4yICAgICAgICAgMTk5NS0xOTk5ICAgQ05SSSAgICAgICAgeWVzXAorMS42ICAgICAgICAgICAgIDEuNS4yICAgICAgIDIwMDAgICAgICAgIENOUkkgICAgICAgIG5vXAorMi4wICAgICAgICAgICAgIDEuNiAgICAgICAgIDIwMDAgICAgICAgIEJlT3Blbi5jb20gIG5vXAorMS42LjEgICAgICAgICAgIDEuNiAgICAgICAgIDIwMDEgICAgICAgIENOUkkgICAgICAgIG5vXAorMi4xICAgICAgICAgICAgIDIuMCsxLjYuMSAgIDIwMDEgICAgICAgIFBTRiAgICAgICAgIG5vXAorMi4wLjEgICAgICAgICAgIDIuMCsxLjYuMSAgIDIwMDEgICAgICAgIFBTRiAgICAgICAgIHllc1wKKzIuMS4xICAgICAgICAgICAyLjErMi4wLjEgICAyMDAxICAgICAgICBQU0YgICAgICAgICB5ZXNcCisyLjEuMiAgICAgICAgICAgMi4xLjEgICAgICAgMjAwMiAgICAgICAgUFNGICAgICAgICAgeWVzXAorMi4xLjMgICAgICAgICAgIDIuMS4yICAgICAgIDIwMDIgICAgICAgIFBTRiAgICAgICAgIHllc1wKKzIuMiBhbmQgYWJvdmUgICAyLjEuMSAgICAgICAyMDAxLW5vdyAgICBQU0YgICAgICAgICB5ZXNcCisKK1xmMCBcCisKK1xiIE5vdGU6ICAKK1xiMCBHUEwtY29tcGF0aWJsZSBkb2Vzbid0IG1lYW4gdGhhdCB3ZSdyZSBkaXN0cmlidXRpbmcgUHl0aG9uIHVuZGVyIHRoZSBHUEwuIEFsbCBQeXRob24gbGljZW5zZXMsIHVubGlrZSB0aGUgR1BMLCBsZXQgeW91IGRpc3RyaWJ1dGUgYSBtb2RpZmllZCB2ZXJzaW9uIHdpdGhvdXQgbWFraW5nIHlvdXIgY2hhbmdlcyBvcGVuIHNvdXJjZS4gVGhlIEdQTC1jb21wYXRpYmxlIGxpY2Vuc2VzIG1ha2UgaXQgcG9zc2libGUgdG8gY29tYmluZSBQeXRob24gd2l0aCBvdGhlciBzb2Z0d2FyZSB0aGF0IGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBHUEw7IHRoZSBvdGhlcnMgZG9uJ3QuXAorXAorVGhhbmtzIHRvIHRoZSBtYW55IG91dHNpZGUgdm9sdW50ZWVycyB3aG8gaGF2ZSB3b3JrZWQgdW5kZXIgR3VpZG8ncyBkaXJlY3Rpb24gdG8gbWFrZSB0aGVzZSByZWxlYXNlcyBwb3NzaWJsZS5cCitcCitcCisKK1xiIFx1bCBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgQUNDRVNTSU5HIE9SIE9USEVSV0lTRSBVU0lORyBQWVRIT05cCisKK1xiMCBcdWxub25lIFwKKworXGIgUFlUSE9OIFNPRlRXQVJFIEZPVU5EQVRJT04gTElDRU5TRSBWRVJTSU9OIDJcCisKK1xiMCBcCisxLiBUaGlzIExJQ0VOU0UgQUdSRUVNRU5UIGlzIGJldHdlZW4gdGhlIFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uICgiUFNGIiksIGFuZCB0aGUgSW5kaXZpZHVhbCBvciBPcmdhbml6YXRpb24gKCJMaWNlbnNlZSIpIGFjY2Vzc2luZyBhbmQgb3RoZXJ3aXNlIHVzaW5nIHRoaXMgc29mdHdhcmUgKCJQeXRob24iKSBpbiBzb3VyY2Ugb3IgYmluYXJ5IGZvcm0gYW5kIGl0cyBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24uXAorXAorMi4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudCwgUFNGIGhlcmVieSBncmFudHMgTGljZW5zZWUgYSBub25leGNsdXNpdmUsIHJveWFsdHktZnJlZSwgd29ybGQtd2lkZSBsaWNlbnNlIHRvIHJlcHJvZHVjZSwgYW5hbHl6ZSwgdGVzdCwgcGVyZm9ybSBhbmQvb3IgZGlzcGxheSBwdWJsaWNseSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzLCBkaXN0cmlidXRlLCBhbmQgb3RoZXJ3aXNlIHVzZSBQeXRob24gYWxvbmUgb3IgaW4gYW55IGRlcml2YXRpdmUgdmVyc2lvbiwgcHJvdmlkZWQsIGhvd2V2ZXIsIHRoYXQgUFNGJ3MgTGljZW5zZSBBZ3JlZW1lbnQgYW5kIFBTRidzIG5vdGljZSBvZiBjb3B5cmlnaHQsIGkuZS4sICJDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEsIDIwMTIsIDIwMTMsIDIwMTQsIDIwMTUgUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb247IEFsbCBSaWdodHMgUmVzZXJ2ZWQiIGFyZSByZXRhaW5lZCBpbiBQeXRob24gYWxvbmUgb3IgaW4gYW55IGRlcml2YXRpdmUgdmVyc2lvbiBwcmVwYXJlZCBieSBMaWNlbnNlZS5cCitcCiszLiBJbiB0aGUgZXZlbnQgTGljZW5zZWUgcHJlcGFyZXMgYSBkZXJpdmF0aXZlIHdvcmsgdGhhdCBpcyBiYXNlZCBvbiBvciBpbmNvcnBvcmF0ZXMgUHl0aG9uIG9yIGFueSBwYXJ0IHRoZXJlb2YsIGFuZCB3YW50cyB0byBtYWtlIHRoZSBkZXJpdmF0aXZlIHdvcmsgYXZhaWxhYmxlIHRvIG90aGVycyBhcyBwcm92aWRlZCBoZXJlaW4sIHRoZW4gTGljZW5zZWUgaGVyZWJ5IGFncmVlcyB0byBpbmNsdWRlIGluIGFueSBzdWNoIHdvcmsgYSBicmllZiBzdW1tYXJ5IG9mIHRoZSBjaGFuZ2VzIG1hZGUgdG8gUHl0aG9uLlwKK1wKKzQuIFBTRiBpcyBtYWtpbmcgUHl0aG9uIGF2YWlsYWJsZSB0byBMaWNlbnNlZSBvbiBhbiAiQVMgSVMiIGJhc2lzLiBQU0YgTUFLRVMgTk8gUkVQUkVTRU5UQVRJT05TIE9SIFdBUlJBTlRJRVMsIEVYUFJFU1MgT1IgSU1QTElFRC4gQlkgV0FZIE9GIEVYQU1QTEUsIEJVVCBOT1QgTElNSVRBVElPTiwgUFNGIE1BS0VTIE5PIEFORCBESVNDTEFJTVMgQU5ZIFJFUFJFU0VOVEFUSU9OIE9SIFdBUlJBTlRZIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBTlkgUEFSVElDVUxBUiBQVVJQT1NFIE9SIFRIQVQgVEhFIFVTRSBPRiBQWVRIT04gV0lMTCBOT1QgSU5GUklOR0UgQU5ZIFRISVJEIFBBUlRZIFJJR0hUUy5cCitcCis1LiBQU0YgU0hBTEwgTk9UIEJFIExJQUJMRSBUTyBMSUNFTlNFRSBPUiBBTlkgT1RIRVIgVVNFUlMgT0YgUFlUSE9OIEZPUiBBTlkgSU5DSURFTlRBTCwgU1BFQ0lBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIExPU1MgQVMgQSBSRVNVTFQgT0YgTU9ESUZZSU5HLCBESVNUUklCVVRJTkcsIE9SIE9USEVSV0lTRSBVU0lORyBQWVRIT04sIE9SIEFOWSBERVJJVkFUSVZFIFRIRVJFT0YsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgVEhFUkVPRi5cCitcCis2LiBUaGlzIExpY2Vuc2UgQWdyZWVtZW50IHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgdXBvbiBhIG1hdGVyaWFsIGJyZWFjaCBvZiBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMuXAorXAorNy4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50IHNoYWxsIGJlIGRlZW1lZCB0byBjcmVhdGUgYW55IHJlbGF0aW9uc2hpcCBvZiBhZ2VuY3ksIHBhcnRuZXJzaGlwLCBvciBqb2ludCB2ZW50dXJlIGJldHdlZW4gUFNGIGFuZCBMaWNlbnNlZS4gVGhpcyBMaWNlbnNlIEFncmVlbWVudCBkb2VzIG5vdCBncmFudCBwZXJtaXNzaW9uIHRvIHVzZSBQU0YgdHJhZGVtYXJrcyBvciB0cmFkZSBuYW1lIGluIGEgdHJhZGVtYXJrIHNlbnNlIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBvciBzZXJ2aWNlcyBvZiBMaWNlbnNlZSwgb3IgYW55IHRoaXJkIHBhcnR5LlwKK1wKKzguIEJ5IGNvcHlpbmcsIGluc3RhbGxpbmcgb3Igb3RoZXJ3aXNlIHVzaW5nIFB5dGhvbiwgTGljZW5zZWUgYWdyZWVzIHRvIGJlIGJvdW5kIGJ5IHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LlwKK1wKK1wKKworXGIgQkVPUEVOLkNPTSBMSUNFTlNFIEFHUkVFTUVOVCBGT1IgUFlUSE9OIDIuMFwKKworXGIwIFwKK0JFT1BFTiBQWVRIT04gT1BFTiBTT1VSQ0UgTElDRU5TRSBBR1JFRU1FTlQgVkVSU0lPTiAxXAorXAorMS4gVGhpcyBMSUNFTlNFIEFHUkVFTUVOVCBpcyBiZXR3ZWVuIEJlT3Blbi5jb20gKCJCZU9wZW4iKSwgaGF2aW5nIGFuIG9mZmljZSBhdCAxNjAgU2FyYXRvZ2EgQXZlbnVlLCBTYW50YSBDbGFyYSwgQ0EgOTUwNTEsIGFuZCB0aGUgSW5kaXZpZHVhbCBvciBPcmdhbml6YXRpb24gKCJMaWNlbnNlZSIpIGFjY2Vzc2luZyBhbmQgb3RoZXJ3aXNlIHVzaW5nIHRoaXMgc29mdHdhcmUgaW4gc291cmNlIG9yIGJpbmFyeSBmb3JtIGFuZCBpdHMgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uICgidGhlIFNvZnR3YXJlIikuXAorXAorMi4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBCZU9wZW4gUHl0aG9uIExpY2Vuc2UgQWdyZWVtZW50LCBCZU9wZW4gaGVyZWJ5IGdyYW50cyBMaWNlbnNlZSBhIG5vbi1leGNsdXNpdmUsIHJveWFsdHktZnJlZSwgd29ybGQtd2lkZSBsaWNlbnNlIHRvIHJlcHJvZHVjZSwgYW5hbHl6ZSwgdGVzdCwgcGVyZm9ybSBhbmQvb3IgZGlzcGxheSBwdWJsaWNseSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzLCBkaXN0cmlidXRlLCBhbmQgb3RoZXJ3aXNlIHVzZSB0aGUgU29mdHdhcmUgYWxvbmUgb3IgaW4gYW55IGRlcml2YXRpdmUgdmVyc2lvbiwgcHJvdmlkZWQsIGhvd2V2ZXIsIHRoYXQgdGhlIEJlT3BlbiBQeXRob24gTGljZW5zZSBpcyByZXRhaW5lZCBpbiB0aGUgU29mdHdhcmUsIGFsb25lIG9yIGluIGFueSBkZXJpdmF0aXZlIHZlcnNpb24gcHJlcGFyZWQgYnkgTGljZW5zZWUuXAorXAorMy4gQmVPcGVuIGlzIG1ha2luZyB0aGUgU29mdHdhcmUgYXZhaWxhYmxlIHRvIExpY2Vuc2VlIG9uIGFuICJBUyBJUyIgYmFzaXMuIEJFT1BFTiBNQUtFUyBOTyBSRVBSRVNFTlRBVElPTlMgT1IgV0FSUkFOVElFUywgRVhQUkVTUyBPUiBJTVBMSUVELiBCWSBXQVkgT0YgRVhBTVBMRSwgQlVUIE5PVCBMSU1JVEFUSU9OLCBCRU9QRU4gTUFLRVMgTk8gQU5EIERJU0NMQUlNUyBBTlkgUkVQUkVTRU5UQVRJT04gT1IgV0FSUkFOVFkgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEFOWSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgVEhBVCBUSEUgVVNFIE9GIFRIRSBTT0ZUV0FSRSBXSUxMIE5PVCBJTkZSSU5HRSBBTlkgVEhJUkQgUEFSVFkgUklHSFRTLlwKK1wKKzQuIEJFT1BFTiBTSEFMTCBOT1QgQkUgTElBQkxFIFRPIExJQ0VOU0VFIE9SIEFOWSBPVEhFUiBVU0VSUyBPRiBUSEUgU09GVFdBUkUgRk9SIEFOWSBJTkNJREVOVEFMLCBTUEVDSUFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgTE9TUyBBUyBBIFJFU1VMVCBPRiBVU0lORywgTU9ESUZZSU5HIE9SIERJU1RSSUJVVElORyBUSEUgU09GVFdBUkUsIE9SIEFOWSBERVJJVkFUSVZFIFRIRVJFT0YsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgVEhFUkVPRi5cCitcCis1LiBUaGlzIExpY2Vuc2UgQWdyZWVtZW50IHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgdXBvbiBhIG1hdGVyaWFsIGJyZWFjaCBvZiBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMuXAorXAorNi4gVGhpcyBMaWNlbnNlIEFncmVlbWVudCBzaGFsbCBiZSBnb3Zlcm5lZCBieSBhbmQgaW50ZXJwcmV0ZWQgaW4gYWxsIHJlc3BlY3RzIGJ5IHRoZSBsYXcgb2YgdGhlIFN0YXRlIG9mIENhbGlmb3JuaWEsIGV4Y2x1ZGluZyBjb25mbGljdCBvZiBsYXcgcHJvdmlzaW9ucy4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50IHNoYWxsIGJlIGRlZW1lZCB0byBjcmVhdGUgYW55IHJlbGF0aW9uc2hpcCBvZiBhZ2VuY3ksIHBhcnRuZXJzaGlwLCBvciBqb2ludCB2ZW50dXJlIGJldHdlZW4gQmVPcGVuIGFuZCBMaWNlbnNlZS4gVGhpcyBMaWNlbnNlIEFncmVlbWVudCBkb2VzIG5vdCBncmFudCBwZXJtaXNzaW9uIHRvIHVzZSBCZU9wZW4gdHJhZGVtYXJrcyBvciB0cmFkZSBuYW1lcyBpbiBhIHRyYWRlbWFyayBzZW5zZSB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgb3Igc2VydmljZXMgb2YgTGljZW5zZWUsIG9yIGFueSB0aGlyZCBwYXJ0eS4gQXMgYW4gZXhjZXB0aW9uLCB0aGUgIkJlT3BlbiBQeXRob24iIGxvZ29zIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LnB5dGhvbmxhYnMuY29tL2xvZ29zLmh0bWwgbWF5IGJlIHVzZWQgYWNjb3JkaW5nIHRvIHRoZSBwZXJtaXNzaW9ucyBncmFudGVkIG9uIHRoYXQgd2ViIHBhZ2UuXAorXAorNy4gQnkgY29weWluZywgaW5zdGFsbGluZyBvciBvdGhlcndpc2UgdXNpbmcgdGhlIHNvZnR3YXJlLCBMaWNlbnNlZSBhZ3JlZXMgdG8gYmUgYm91bmQgYnkgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuXAorXAorXAorCitcYiBDTlJJIExJQ0VOU0UgQUdSRUVNRU5UIEZPUiBQWVRIT04gMS42LjFcCisKK1xiMCBcCisxLiBUaGlzIExJQ0VOU0UgQUdSRUVNRU5UIGlzIGJldHdlZW4gdGhlIENvcnBvcmF0aW9uIGZvciBOYXRpb25hbCBSZXNlYXJjaCBJbml0aWF0aXZlcywgaGF2aW5nIGFuIG9mZmljZSBhdCAxODk1IFByZXN0b24gV2hpdGUgRHJpdmUsIFJlc3RvbiwgVkEgMjAxOTEgKCJDTlJJIiksIGFuZCB0aGUgSW5kaXZpZHVhbCBvciBPcmdhbml6YXRpb24gKCJMaWNlbnNlZSIpIGFjY2Vzc2luZyBhbmQgb3RoZXJ3aXNlIHVzaW5nIFB5dGhvbiAxLjYuMSBzb2Z0d2FyZSBpbiBzb3VyY2Ugb3IgYmluYXJ5IGZvcm0gYW5kIGl0cyBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24uXAorXAorMi4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudCwgQ05SSSBoZXJlYnkgZ3JhbnRzIExpY2Vuc2VlIGEgbm9uZXhjbHVzaXZlLCByb3lhbHR5LWZyZWUsIHdvcmxkLXdpZGUgbGljZW5zZSB0byByZXByb2R1Y2UsIGFuYWx5emUsIHRlc3QsIHBlcmZvcm0gYW5kL29yIGRpc3BsYXkgcHVibGljbHksIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcywgZGlzdHJpYnV0ZSwgYW5kIG90aGVyd2lzZSB1c2UgUHl0aG9uIDEuNi4xIGFsb25lIG9yIGluIGFueSBkZXJpdmF0aXZlIHZlcnNpb24sIHByb3ZpZGVkLCBob3dldmVyLCB0aGF0IENOUkkncyBMaWNlbnNlIEFncmVlbWVudCBhbmQgQ05SSSdzIG5vdGljZSBvZiBjb3B5cmlnaHQsIGkuZS4sICJDb3B5cmlnaHQgKGMpIDE5OTUtMjAwMSBDb3Jwb3JhdGlvbiBmb3IgTmF0aW9uYWwgUmVzZWFyY2ggSW5pdGlhdGl2ZXM7IEFsbCBSaWdodHMgUmVzZXJ2ZWQiIGFyZSByZXRhaW5lZCBpbiBQeXRob24gMS42LjEgYWxvbmUgb3IgaW4gYW55IGRlcml2YXRpdmUgdmVyc2lvbiBwcmVwYXJlZCBieSBMaWNlbnNlZS4gQWx0ZXJuYXRlbHksIGluIGxpZXUgb2YgQ05SSSdzIExpY2Vuc2UgQWdyZWVtZW50LCBMaWNlbnNlZSBtYXkgc3Vic3RpdHV0ZSB0aGUgZm9sbG93aW5nIHRleHQgKG9taXR0aW5nIHRoZSBxdW90ZXMpOiAiUHl0aG9uIDEuNi4xIGlzIG1hZGUgYXZhaWxhYmxlIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGluIENOUkkncyBMaWNlbnNlIEFncmVlbWVudC4gVGhpcyBBZ3JlZW1lbnQgdG9nZXRoZXIgd2l0aCBQeXRob24gMS42LjEgbWF5IGJlIGxvY2F0ZWQgb24gdGhlIEludGVybmV0IHVzaW5nIHRoZSBmb2xsb3dpbmcgdW5pcXVlLCBwZXJzaXN0ZW50IGlkZW50aWZpZXIgKGtub3duIGFzIGEgaGFuZGxlKTogMTg5NS4yMi8xMDEzLiBUaGlzIEFncmVlbWVudCBtYXkgYWxzbyBiZSBvYnRhaW5lZCBmcm9tIGEgcHJveHkgc2VydmVyIG9uIHRoZSBJbnRlcm5ldCB1c2luZyB0aGUgZm9sbG93aW5nIFVSTDogaHR0cDovL2hkbC5oYW5kbGUubmV0LzE4OTUuMjIvMTAxMyIuXAorXAorMy4gSW4gdGhlIGV2ZW50IExpY2Vuc2VlIHByZXBhcmVzIGEgZGVyaXZhdGl2ZSB3b3JrIHRoYXQgaXMgYmFzZWQgb24gb3IgaW5jb3Jwb3JhdGVzIFB5dGhvbiAxLjYuMSBvciBhbnkgcGFydCB0aGVyZW9mLCBhbmQgd2FudHMgdG8gbWFrZSB0aGUgZGVyaXZhdGl2ZSB3b3JrIGF2YWlsYWJsZSB0byBvdGhlcnMgYXMgcHJvdmlkZWQgaGVyZWluLCB0aGVuIExpY2Vuc2VlIGhlcmVieSBhZ3JlZXMgdG8gaW5jbHVkZSBpbiBhbnkgc3VjaCB3b3JrIGEgYnJpZWYgc3VtbWFyeSBvZiB0aGUgY2hhbmdlcyBtYWRlIHRvIFB5dGhvbiAxLjYuMS5cCitcCis0LiBDTlJJIGlzIG1ha2luZyBQeXRob24gMS42LjEgYXZhaWxhYmxlIHRvIExpY2Vuc2VlIG9uIGFuICJBUyBJUyIgYmFzaXMuIENOUkkgTUFLRVMgTk8gUkVQUkVTRU5UQVRJT05TIE9SIFdBUlJBTlRJRVMsIEVYUFJFU1MgT1IgSU1QTElFRC4gQlkgV0FZIE9GIEVYQU1QTEUsIEJVVCBOT1QgTElNSVRBVElPTiwgQ05SSSBNQUtFUyBOTyBBTkQgRElTQ0xBSU1TIEFOWSBSRVBSRVNFTlRBVElPTiBPUiBXQVJSQU5UWSBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQU5ZIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBUSEFUIFRIRSBVU0UgT0YgUFlUSE9OIDEuNi4xIFdJTEwgTk9UIElORlJJTkdFIEFOWSBUSElSRCBQQVJUWSBSSUdIVFMuXAorXAorNS4gQ05SSSBTSEFMTCBOT1QgQkUgTElBQkxFIFRPIExJQ0VOU0VFIE9SIEFOWSBPVEhFUiBVU0VSUyBPRiBQWVRIT04gMS42LjEgRk9SIEFOWSBJTkNJREVOVEFMLCBTUEVDSUFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgTE9TUyBBUyBBIFJFU1VMVCBPRiBNT0RJRllJTkcsIERJU1RSSUJVVElORywgT1IgT1RIRVJXSVNFIFVTSU5HIFBZVEhPTiAxLjYuMSwgT1IgQU5ZIERFUklWQVRJVkUgVEhFUkVPRiwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBUSEVSRU9GLlwKK1wKKzYuIFRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB1cG9uIGEgbWF0ZXJpYWwgYnJlYWNoIG9mIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucy5cCitcCis3LiBUaGlzIExpY2Vuc2UgQWdyZWVtZW50IHNoYWxsIGJlIGdvdmVybmVkIGJ5IHRoZSBmZWRlcmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBsYXcgb2YgdGhlIFVuaXRlZCBTdGF0ZXMsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIGZlZGVyYWwgY29weXJpZ2h0IGxhdywgYW5kLCB0byB0aGUgZXh0ZW50IHN1Y2ggVS5TLiBmZWRlcmFsIGxhdyBkb2VzIG5vdCBhcHBseSwgYnkgdGhlIGxhdyBvZiB0aGUgQ29tbW9ud2VhbHRoIG9mIFZpcmdpbmlhLCBleGNsdWRpbmcgVmlyZ2luaWEncyBjb25mbGljdCBvZiBsYXcgcHJvdmlzaW9ucy4gTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcsIHdpdGggcmVnYXJkIHRvIGRlcml2YXRpdmUgd29ya3MgYmFzZWQgb24gUHl0aG9uIDEuNi4xIHRoYXQgaW5jb3Jwb3JhdGUgbm9uLXNlcGFyYWJsZSBtYXRlcmlhbCB0aGF0IHdhcyBwcmV2aW91c2x5IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSwgdGhlIGxhdyBvZiB0aGUgQ29tbW9ud2VhbHRoIG9mIFZpcmdpbmlhIHNoYWxsIGdvdmVybiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50IG9ubHkgYXMgdG8gaXNzdWVzIGFyaXNpbmcgdW5kZXIgb3Igd2l0aCByZXNwZWN0IHRvIFBhcmFncmFwaHMgNCwgNSwgYW5kIDcgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudC4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50IHNoYWxsIGJlIGRlZW1lZCB0byBjcmVhdGUgYW55IHJlbGF0aW9uc2hpcCBvZiBhZ2VuY3ksIHBhcnRuZXJzaGlwLCBvciBqb2ludCB2ZW50dXJlIGJldHdlZW4gQ05SSSBhbmQgTGljZW5zZWUuIFRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgZG9lcyBub3QgZ3JhbnQgcGVybWlzc2lvbiB0byB1c2UgQ05SSSB0cmFkZW1hcmtzIG9yIHRyYWRlIG5hbWUgaW4gYSB0cmFkZW1hcmsgc2Vuc2UgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIG9yIHNlcnZpY2VzIG9mIExpY2Vuc2VlLCBvciBhbnkgdGhpcmQgcGFydHkuXAorXAorOC4gQnkgY2xpY2tpbmcgb24gdGhlICJBQ0NFUFQiIGJ1dHRvbiB3aGVyZSBpbmRpY2F0ZWQsIG9yIGJ5IGNvcHlpbmcsIGluc3RhbGxpbmcgb3Igb3RoZXJ3aXNlIHVzaW5nIFB5dGhvbiAxLjYuMSwgTGljZW5zZWUgYWdyZWVzIHRvIGJlIGJvdW5kIGJ5IHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LlwKK1wKKyAgICAgICAgQUNDRVBUXAorXAorXAorCitcYiBDV0kgTElDRU5TRSBBR1JFRU1FTlQgRk9SIFBZVEhPTiAwLjkuMCBUSFJPVUdIIDEuMlwKKworXGIwIFwKK0NvcHlyaWdodCAoYykgMTk5MSAtIDE5OTUsIFN0aWNodGluZyBNYXRoZW1hdGlzY2ggQ2VudHJ1bSBBbXN0ZXJkYW0sIFRoZSBOZXRoZXJsYW5kcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cCitcCitQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIFN0aWNodGluZyBNYXRoZW1hdGlzY2ggQ2VudHJ1bSBvciBDV0kgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uXAorXAorU1RJQ0hUSU5HIE1BVEhFTUFUSVNDSCBDRU5UUlVNIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFLCBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MsIElOIE5PIEVWRU5UIFNIQUxMIFNUSUNIVElORyBNQVRIRU1BVElTQ0ggQ0VOVFJVTSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXAorXAorXAorCitcYiBcdWwgTElDRU5TRVMgQU5EIEFDS05PV0xFREdFTUVOVFMgRk9SIElOQ09SUE9SQVRFRCBTT0ZUV0FSRVwKKworXGIwIFx1bG5vbmUgXAorVGhpcyBpbnN0YWxsZXIgaW5jb3Jwb3JhdGVzIHBvcnRpb25zIG9mIHRoZSBmb2xsb3dpbmcgdGhpcmQtcGFydHkgc29mdHdhcmU6XAorXAorCitcZjIgJFRISVJEX1BBUlRZX0xJQlNcCitcCisKK1xmMCBGb3IgbGljZW5zZXMgYW5kIGFja25vd2xlZGdlbWVudHMgZm9yIHRoZXNlIGFuZCBvdGhlciB0aGlyZC1wYXJ0eSBzb2Z0d2FyZSBpbmNvcnBvcmF0ZWQgaW4gdGhpcyBQeXRob24gZGlzdHJpYnV0aW9uLCBwbGVhc2UgcmVmZXIgdG8gdGhlIG9uLWxpbmUgZG9jdW1lbnRhdGlvbiB7XGZpZWxke1wqXGZsZGluc3R7SFlQRVJMSU5LICJodHRwczovL2RvY3MucHl0aG9uLm9yZy8kVkVSU0lPTi9saWNlbnNlLmh0bWwjbGljZW5zZXMtYW5kLWFja25vd2xlZGdlbWVudHMtZm9yLWluY29ycG9yYXRlZC1zb2Z0d2FyZSJ9fXtcZmxkcnNsdCBoZXJlfX0uXAorXAorXAorXAorXAorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL01hYy9CdWlsZFNjcmlwdC9yZXNvdXJjZXMvUmVhZE1lLnJ0ZiBiL01hYy9CdWlsZFNjcmlwdC9yZXNvdXJjZXMvUmVhZE1lLnJ0ZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmQ4YjgwCi0tLSAvZGV2L251bGwKKysrIGIvTWFjL0J1aWxkU2NyaXB0L3Jlc291cmNlcy9SZWFkTWUucnRmCkBAIC0wLDAgKzEsMTgwIEBACit7XHJ0ZjFcYW5zaVxhbnNpY3BnMTI1Mlxjb2NvYXJ0ZjEzNDdcY29jb2FzdWJydGY1NzAKK3tcZm9udHRibFxmMFxmc3dpc3NcZmNoYXJzZXQwIEhlbHZldGljYTtcZjFcZm1vZGVyblxmY2hhcnNldDAgQ291cmllck5ld1BTTVQ7fQore1xjb2xvcnRibDtccmVkMjU1XGdyZWVuMjU1XGJsdWUyNTU7fQorXG1hcmdsMTQ0MFxtYXJncjE0NDBcdmlld3cxMzM4MFx2aWV3aDE0NjAwXHZpZXdraW5kMAorXHBhcmRcdHg3MjBcdHgxNDQwXHR4MjE2MFx0eDI4ODBcdHgzNjAwXHR4NDMyMFx0eDUwNDBcdHg1NzYwXHR4NjQ4MFx0eDcyMDBcdHg3OTIwXHR4ODY0MFxwYXJkaXJuYXR1cmFsCisKK1xmMFxmczI0IFxjZjAgVGhpcyBwYWNrYWdlIHdpbGwgaW5zdGFsbCBQeXRob24gJEZVTExfVkVSU0lPTiBmb3IgTWFjIE9TIFggJE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCBmb3IgdGhlIGZvbGxvd2luZyBhcmNoaXRlY3R1cmUocyk6ICRBUkNISVRFQ1RVUkVTLlwKK1wKK1xwYXJkXHR4NzIwXHR4MTQ0MFx0eDIxNjBcdHgyODgwXHR4MzYwMFx0eDQzMjBcdHg1MDQwXHR4NTc2MFx0eDY0ODBcdHg3MjAwXHR4NzkyMFx0eDg2NDBccGFyZGlybmF0dXJhbAorCitcYiBcY2YwIFx1bCBcdWxjMCBXaGljaCBpbnN0YWxsZXIgdmFyaWFudCBzaG91bGQgSSB1c2U/CitcYjAgXHVsbm9uZSBcCitcCitQeXRob24ub3JnIHByb3ZpZGVzIHR3byBpbnN0YWxsZXIgdmFyaWFudHMgZm9yIGRvd25sb2FkOiBvbmUgdGhhdCBpbnN0YWxscyBhIAorXGkgNjQtYml0LzMyLWJpdCBJbnRlbAorXGkwICBQeXRob24gY2FwYWJsZSBvZiBydW5uaW5nIG9uIAorXGkgTWFjIE9TIFggMTAuNiAoU25vdyBMZW9wYXJkKQorXGkwICBvciBsYXRlcjsgYW5kIG9uZSB0aGF0IGluc3RhbGxzIGEgCitcaSAzMi1iaXQtb25seSAoSW50ZWwgYW5kIFBQQykKK1xpMCAgUHl0aG9uIGNhcGFibGUgb2YgcnVubmluZyBvbiAKK1xpIE1hYyBPUyBYIDEwLjUgKExlb3BhcmQpCitcaTAgIG9yIGxhdGVyLiAgVGhpcyBSZWFkTWUgd2FzIGluc3RhbGxlZCB3aXRoIHRoZSAKK1xpICRNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQKK1xpMCAgdmFyaWFudC4gIFVubGVzcyB5b3UgYXJlIGluc3RhbGxpbmcgdG8gYW4gMTAuNSBzeXN0ZW0gb3IgeW91IG5lZWQgdG8gYnVpbGQgYXBwbGljYXRpb25zIHRoYXQgY2FuIHJ1biBvbiAxMC41IHN5c3RlbXMsIHVzZSB0aGUgMTAuNiB2YXJpYW50IGlmIHBvc3NpYmxlLiAgVGhlcmUgYXJlIHNvbWUgYWRkaXRpb25hbCBvcGVyYXRpbmcgc3lzdGVtIGZ1bmN0aW9ucyB0aGF0IGFyZSBzdXBwb3J0ZWQgc3RhcnRpbmcgd2l0aCAxMC42IGFuZCB5b3UgbWF5IHNlZSBiZXR0ZXIgcGVyZm9ybWFuY2UgdXNpbmcgNjQtYml0IG1vZGUuICBCeSBkZWZhdWx0LCBQeXRob24gd2lsbCBhdXRvbWF0aWNhbGx5IHJ1biBpbiA2NC1iaXQgbW9kZSBpZiB5b3VyIHN5c3RlbSBzdXBwb3J0cyBpdC4gIEFsc28gc2VlIAorXGkgQ2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uIGFuZCBPcGVuU1NMCitcaTAgIGJlbG93LiAgVGhlIFB5dGhvbnMgaW5zdGFsbGVkIGJ5IHRoZXNlIGluc3RhbGxlcnMgYXJlIGJ1aWx0IHdpdGggcHJpdmF0ZSBjb3BpZXMgb2Ygc29tZSB0aGlyZC1wYXJ0eSBsaWJyYXJpZXMgbm90IGluY2x1ZGVkIHdpdGggb3IgbmV3ZXIgdGhhbiB0aG9zZSBpbiBPUyBYIGl0c2VsZi4gIFRoZSBsaXN0IG9mIHRoZXNlIGxpYnJhcmllcyB2YXJpZXMgYnkgaW5zdGFsbGVyIHZhcmlhbnQgYW5kIGlzIGluY2x1ZGVkIGF0IHRoZSBlbmQgb2YgdGhlIExpY2Vuc2UucnRmIGZpbGUuCitcYiBcdWwgXHVsYzAgXAorXAorVXBkYXRlIHlvdXIgdmVyc2lvbiBvZiBUY2wvVGsgdG8gdXNlIElETEUgb3Igb3RoZXIgVGsgYXBwbGljYXRpb25zCitcYjAgXHVsbm9uZSBcCitcCitUbyB1c2UgSURMRSBvciBvdGhlciBwcm9ncmFtcyB0aGF0IHVzZSB0aGUgVGtpbnRlciBncmFwaGljYWwgdXNlciBpbnRlcmZhY2UgdG9vbGtpdCwgeW91IG5lZWQgdG8gaW5zdGFsbCBhIG5ld2VyIHRoaXJkLXBhcnR5IHZlcnNpb24gb2YgdGhlIAorXGkgVGNsL1RrCitcaTAgIGZyYW1ld29ya3MuICBWaXNpdCB7XGZpZWxke1wqXGZsZGluc3R7SFlQRVJMSU5LICJodHRwczovL3d3dy5weXRob24ub3JnL2Rvd25sb2FkL21hYy90Y2x0ay8ifX17XGZsZHJzbHQgaHR0cHM6Ly93d3cucHl0aG9uLm9yZy9kb3dubG9hZC9tYWMvdGNsdGsvfX0gZm9yIGN1cnJlbnQgaW5mb3JtYXRpb24gYWJvdXQgc3VwcG9ydGVkIGFuZCByZWNvbW1lbmRlZCB2ZXJzaW9ucyBvZiAKK1xpIFRjbC9UaworXGkwICBmb3IgdGhpcyB2ZXJzaW9uIG9mIFB5dGhvbiBhbmQgb2YgTWFjIE9TIFguXAorCitcYiBcdWwgXAorSW5zdGFsbGluZyBvbiBPUyBYIDEwLjggKE1vdW50YWluIExpb24pIG9yIGxhdGVyIHN5c3RlbXNcCitccGFyZFx0eDcyMFx0eDE0NDBcdHgyMTYwXHR4Mjg4MFx0eDM2MDBcdHg0MzIwXHR4NTA0MFx0eDU3NjBcdHg2NDgwXHR4NzIwMFx0eDc5MjBcdHg4NjQwXHBhcmRpcm5hdHVyYWwKK1xjZjAgXHVsbm9uZSBbQ0hBTkdFRCBmb3IgUHl0aG9uIDMuNC4yXQorXGIwIFwKK1wKK0FzIG9mIFB5dGhvbiAzLjQuMiwgaW5zdGFsbGVyIHBhY2thZ2VzIGZyb20gcHl0aG9uLm9yZyBhcmUgbm93IGNvbXBhdGlibGUgd2l0aCB0aGUgR2F0ZWtlZXBlciBzZWN1cml0eSBmZWF0dXJlIGludHJvZHVjZWQgaW4gT1MgWCAxMC44LiAgIERvd25sb2FkZWQgcGFja2FnZXMgY2FuIG5vdyBiZSBkaXJlY3RseSBpbnN0YWxsZWQgYnkgZG91YmxlLWNsaWNraW5nIHdpdGggdGhlIGRlZmF1bHQgc3lzdGVtIHNlY3VyaXR5IHNldHRpbmdzLiAgUHl0aG9uLm9yZyBpbnN0YWxsZXIgcGFja2FnZXMgZm9yIE9TIFggYXJlIHNpZ25lZCB3aXRoIHRoZSBEZXZlbG9wZXIgSUQgb2YgdGhlIGJ1aWxkZXIsIGFzIGlkZW50aWZpZWQgb24ge1xmaWVsZHtcKlxmbGRpbnN0e0hZUEVSTElOSyAiaHR0cHM6Ly93d3cucHl0aG9uLm9yZy9kb3dubG9hZHMvIn19e1xmbGRyc2x0IHRoZSBkb3dubG9hZCBwYWdlfX0gZm9yIHRoaXMgcmVsZWFzZS4gIFRvIGluc3BlY3QgdGhlIGRpZ2l0YWwgc2lnbmF0dXJlIG9mIHRoZSBwYWNrYWdlLCBjbGljayBvbiB0aGUgbG9jayBpY29uIGluIHRoZSB1cHBlciByaWdodCBjb3JuZXIgb2YgdGhlIAorXGkgSW5zdGFsbCBQeXRob24KK1xpMCAgaW5zdGFsbGVyIHdpbmRvdy4gIFJlZmVyIHRvIEFwcGxlXCc5MnMgc3VwcG9ydCBwYWdlcyBmb3Ige1xmaWVsZHtcKlxmbGRpbnN0e0hZUEVSTElOSyAiaHR0cDovL3N1cHBvcnQuYXBwbGUuY29tL2tiL2h0NTI5MCJ9fXtcZmxkcnNsdCBtb3JlIGluZm9ybWF0aW9uIG9uIEdhdGVrZWVwZXJ9fS5cCitcCitccGFyZFx0eDcyMFx0eDE0NDBcdHgyMTYwXHR4Mjg4MFx0eDM2MDBcdHg0MzIwXHR4NTA0MFx0eDU3NjBcdHg2NDgwXHR4NzIwMFx0eDc5MjBcdHg4NjQwXHBhcmRpcm5hdHVyYWwKKworXGIgXGNmMCBcdWwgU2ltcGxpZmllZCB3ZWItYmFzZWQgaW5zdGFsbHNcCitccGFyZFx0eDcyMFx0eDE0NDBcdHgyMTYwXHR4Mjg4MFx0eDM2MDBcdHg0MzIwXHR4NTA0MFx0eDU3NjBcdHg2NDgwXHR4NzIwMFx0eDc5MjBcdHg4NjQwXHBhcmRpcm5hdHVyYWwKK1xjZjAgXHVsbm9uZSBbTkVXIGZvciBQeXRob24gMy40LjJdCitcYjAgXAorXAorV2l0aCB0aGUgY2hhbmdlIHRvIHRoZSBuZXdlciBmbGF0IGZvcm1hdCBpbnN0YWxsZXIgcGFja2FnZSwgdGhlIGRvd25sb2FkIGZpbGUgbm93IGhhcyBhIAorXGYxIC5wa2cKK1xmMCAgZXh0ZW5zaW9uIGFzIGl0IGlzIG5vIGxvbmdlciBuZWNlc3NhcnkgdG8gZW1iZWQgdGhlIGluc3RhbGxlciB3aXRoaW4gYSBkaXNrIGltYWdlICgKK1xmMSAuZG1nCitcZjAgKSBjb250YWluZXIuICAgSWYgeW91IGRvd25sb2FkIHRoZSBQeXRob24gaW5zdGFsbGVyIHRocm91Z2ggYSB3ZWIgYnJvd3NlciwgdGhlIE9TIFggaW5zdGFsbGVyIGFwcGxpY2F0aW9uIG1heSBvcGVuIGF1dG9tYXRpY2FsbHkgdG8gYWxsb3cgeW91IHRvIHBlcmZvcm0gdGhlIGluc3RhbGwuICBJZiB5b3VyIGJyb3dzZXIgc2V0dGluZ3MgZG8gbm90IGFsbG93IGF1dG9tYXRpYyBvcGVuLCBkb3VibGUgY2xpY2sgb24gdGhlIGRvd25sb2FkZWQgaW5zdGFsbGVyIGZpbGUuXAorXAorXHBhcmRcdHg3MjBcdHgxNDQwXHR4MjE2MFx0eDI4ODBcdHgzNjAwXHR4NDMyMFx0eDUwNDBcdHg1NzYwXHR4NjQ4MFx0eDcyMDBcdHg3OTIwXHR4ODY0MFxwYXJkaXJuYXR1cmFsCisKK1xiIFxjZjAgXHVsIE5ldyBJbnN0YWxsYXRpb24gT3B0aW9ucyBhbmQgRGVmYXVsdHNcCitccGFyZFx0eDcyMFx0eDE0NDBcdHgyMTYwXHR4Mjg4MFx0eDM2MDBcdHg0MzIwXHR4NTA0MFx0eDU3NjBcdHg2NDgwXHR4NzIwMFx0eDc5MjBcdHg4NjQwXHBhcmRpcm5hdHVyYWwKK1xjZjAgXHVsbm9uZSBbTkVXIGZvciBQeXRob24gMy40LjBdCitcYjAgXAorXAorVGhlIFB5dGhvbiBpbnN0YWxsZXIgbm93IGluY2x1ZGVzIGFuIG9wdGlvbiB0byBhdXRvbWF0aWNhbGx5IGluc3RhbGwgb3IgdXBncmFkZSAKK1xmMSBwaXAKK1xmMCAsIGEgdG9vbCBmb3IgaW5zdGFsbGluZyBhbmQgbWFuYWdpbmcgUHl0aG9uIHBhY2thZ2VzLiAgVGhpcyBvcHRpb24gaXMgZW5hYmxlZCBieSBkZWZhdWx0IGFuZCBubyBJbnRlcm5ldCBhY2Nlc3MgaXMgcmVxdWlyZWQuICBJZiB5b3UgZG8gbm90IHdhbnQgdGhlIGluc3RhbGxlciB0byBkbyB0aGlzLCBzZWxlY3QgdGhlIAorXGkgQ3VzdG9taXplCitcaTAgIG9wdGlvbiBhdCB0aGUgCitcaSBJbnN0YWxsYXRpb24gVHlwZQorXGkwICBzdGVwIGFuZCB1bmNoZWNrIHRoZSAKK1xpIEluc3RhbGwgb3IgdWdwcmFkZSBwaXAKK1xpMCAgb3B0aW9uLlwKK1wKK1RvIG1ha2UgaXQgZWFzaWVyIHRvIHVzZSBzY3JpcHRzIGluc3RhbGxlZCBieSB0aGlyZC1wYXJ0eSBQeXRob24gcGFja2FnZXMsIHdpdGggCitcZjEgcGlwCitcZjAgIG9yIGJ5IG90aGVyIG1lYW5zLCB0aGUgCitcaSBTaGVsbCBwcm9maWxlIHVwZGF0ZXIKK1xpMCAgb3B0aW9uIGlzIG5vdyBlbmFibGVkIGJ5IGRlZmF1bHQsIGFzIGhhcyBiZWVuIHRoZSBjYXNlIHdpdGggUHl0aG9uIDIuNy54IGluc3RhbGxlcnMuIFlvdSBjYW4gYWxzbyB0dXJuIHRoaXMgb3B0aW9uIG9mZiBieSBzZWxlY3RpbmcgCitcaSBDdXN0b21pemUKK1xpMCAgYW5kIHVuY2hlY2tpbmcgdGhlIAorXGkgU2hlbGwgcHJvZmlsZSB1cGRhdGVyCitcaTAgIG9wdGlvbi4gWW91IGNhbiBhbHNvIHVwZGF0ZSB5b3VyIHNoZWxsIHByb2ZpbGUgbGF0ZXIgYnkgbGF1bmNoaW5nIHRoZSAKK1xpIFVwZGF0ZSBTaGVsbCBQcm9maWxlCitcaTAgIGNvbW1hbmQgZm91bmQgaW4gdGhlIAorXGYxIC9BcHBsaWNhdGlvbnMvUHl0aG9uICRWRVJTSU9OIAorXGYwIGZvbGRlci4gIFlvdSBtYXkgbmVlZCB0byBzdGFydCBhIG5ldyB0ZXJtaW5hbCB3aW5kb3cgZm9yIHRoZSBjaGFuZ2VzIHRvIHRha2UgZWZmZWN0LlwKK1wKK0ZvciBvdGhlciBjaGFuZ2VzIGluIHRoaXMgcmVsZWFzZSwgc2VlIHRoZSBSZWxlYXNlIE5vdGVzIGxpbmsgZm9yIHRoaXMgcmVsZWFzZSBhdCB7XGZpZWxke1wqXGZsZGluc3R7SFlQRVJMSU5LICJodHRwczovL3d3dy5weXRob24ub3JnL2Rvd25sb2Fkcy8ifX17XGZsZHJzbHQgaHR0cHM6Ly93d3cucHl0aG9uLm9yZy9kb3dubG9hZHMvfX0uXAorXAorXHBhcmRcdHg3MjBcdHgxNDQwXHR4MjE2MFx0eDI4ODBcdHgzNjAwXHR4NDMyMFx0eDUwNDBcdHg1NzYwXHR4NjQ4MFx0eDcyMDBcdHg3OTIwXHR4ODY0MFxwYXJkaXJuYXR1cmFsCisKK1xiIFxjZjAgXHVsIENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiBhbmQgT3BlblNTTFwKK1xwYXJkXHR4NzIwXHR4MTQ0MFx0eDIxNjBcdHgyODgwXHR4MzYwMFx0eDQzMjBcdHg1MDQwXHR4NTc2MFx0eDY0ODBcdHg3MjAwXHR4NzkyMFx0eDg2NDBccGFyZGlybmF0dXJhbAorXGNmMCBcdWxub25lIFtDSEFOR0VEIGZvciBQeXRob24gMy40LjNdCitcYjAgXAorXAorUHl0aG9uIDMuNC4zIGluY2x1ZGVzIGEgbnVtYmVyIG9mIG5ldHdvcmsgc2VjdXJpdHkgZW5oYW5jZW1lbnRzIHRoYXQgaGF2ZSBiZWVuIGFwcHJvdmVkIGZvciBpbmNsdXNpb24gaW4gUHl0aG9uIDMuNCBtYWludGVuYW5jZSByZWxlYXNlcy4gIHtcZmllbGR7XCpcZmxkaW5zdHtIWVBFUkxJTksgImh0dHBzOi8vd3d3LnB5dGhvbi5vcmcvZGV2L3BlcHMvcGVwLTA0NzYvIn19e1xmbGRyc2x0IFBFUCA0NzZ9fSBjaGFuZ2VzIHNldmVyYWwgc3RhbmRhcmQgbGlicmFyeSBtb2R1bGVzLCBsaWtlIAorXGkgaHR0cGxpYgorXGkwICwgCitcaSB1cmxsaWIKK1xpMCAsIGFuZCAKK1xpIHhtbHJwY2xpYgorXGkwICwgdG8gYnkgZGVmYXVsdCB2ZXJpZnkgY2VydGlmaWNhdGVzIHByZXNlbnRlZCBieSBzZXJ2ZXJzIG92ZXIgc2VjdXJlIChUTFMpIGNvbm5lY3Rpb25zLiAgVGhlIHZlcmlmaWNhdGlvbiBpcyBwZXJmb3JtZWQgYnkgdGhlIE9wZW5TU0wgbGlicmFyaWVzIHRoYXQgUHl0aG9uIGlzIGxpbmtlZCB0by4gIFByaW9yIHRvIDMuNC4zLCB0aGUgcHl0aG9uLm9yZyBpbnN0YWxsZXJzIGR5bmFtaWNhbGx5IGxpbmtlZCB3aXRoIEFwcGxlLXN1cHBsaWVkIE9wZW5TU0wgbGlicmFyaWVzIHNoaXBwZWQgd2l0aCBPUyBYLiAgT1MgWCBwcm92aWRlcyBhIG11bHRpcGxlIGxldmVsIHNlY3VyaXR5IGZyYW1ld29yayB0aGF0IHN0b3JlcyB0cnVzdCBjZXJ0aWZpY2F0ZXMgaW4gc3lzdGVtIGFuZCB1c2VyIGtleWNoYWlucyBtYW5hZ2VkIGJ5IHRoZSAKK1xpIEtleWNoYWluIEFjY2VzcyAKK1xpMCBhcHBsaWNhdGlvbiBhbmQgdGhlIAorXGkgc2VjdXJpdHkKK1xpMCAgY29tbWFuZCBsaW5lIHV0aWxpdHkuXAorXAorRm9yIE9TIFggMTAuNSwgQXBwbGUgcHJvdmlkZXMgCitcaSBPcGVuU1NMIDAuOS43CitcaTAgIGxpYnJhcmllcy4gIFRoaXMgdmVyc2lvbiBvZiBBcHBsZSdzIE9wZW5TU0wgCitcYiBkb2VzIG5vdAorXGIwICB1c2UgdGhlIGNlcnRpZmljYXRlcyBmcm9tIHRoZSBzeXN0ZW0gc2VjdXJpdHkgZnJhbWV3b3JrLCBldmVuIHdoZW4gdXNlZCBvbiBuZXdlciB2ZXJzaW9ucyBvZiBPUyBYLiAgSW5zdGVhZCBpdCBjb25zdWx0cyBhIHRyYWRpdGlvbmFsIE9wZW5TU0wgY29uY2F0ZW5hdGVkIGNlcnRpZmljYXRlIGZpbGUgKAorXGkgY2FmaWxlCitcaTAgKSBvciBjZXJ0aWZpY2F0ZSBkaXJlY3RvcnkgKAorXGkgY2FwYXRoCitcaTAgKSwgbG9jYXRlZCBpbiAKK1xmMSAvU3lzdGVtL0xpYnJhcnkvT3BlblNTTAorXGYwIC4gIFRoZXNlIGRpcmVjdG9yaWVzIGFyZSB0eXBpY2FsbHkgZW1wdHkgYW5kIG5vdCBtYW5hZ2VkIGJ5IE9TIFg7IHlvdSBtdXN0IG1hbmFnZSB0aGVtIHlvdXJzZWxmIG9yIHN1cHBseSB5b3VyIG93biBTU0wgY29udGV4dHMuICBPcGVuU1NMIDAuOS43IGlzIG9ic29sZXRlIGJ5IGN1cnJlbnQgc2VjdXJpdHkgc3RhbmRhcmRzLCBsYWNraW5nIGEgbnVtYmVyIG9mIGltcG9ydGFudCBmZWF0dXJlcyBmb3VuZCBpbiBsYXRlciB2ZXJzaW9ucy4gIEFtb25nIHRoZSBwcm9ibGVtcyB0aGlzIGNhdXNlcyBpcyB0aGUgaW5hYmlsaXR5IHRvIHZlcmlmeSBoaWdoZXItc2VjdXJpdHkgY2VydGlmaWNhdGVzIG5vdyB1c2VkIGJ5IHB5dGhvbi5vcmcgc2VydmljZXMsIGluY2x1ZGluZyAKK1xpIHR7XGZpZWxke1wqXGZsZGluc3R7SFlQRVJMSU5LICJodHRwczovL3B5cGkucHl0aG9uLm9yZy9weXBpIn19e1xmbGRyc2x0IGhlIFB5dGhvbiBQYWNrYWdlIEluZGV4LCBQeVBJfX0KK1xpMCAuICBUbyBzb2x2ZSB0aGlzIHByb2JsZW0sIGFzIG9mIDMuNC4zIHRoZSAKK1xpIDEwLjUrIDMyLWJpdC1vbmx5IHB5dGhvbi5vcmcgdmFyaWFudAorXGkwICBpcyBsaW5rZWQgd2l0aCBhIHByaXZhdGUgY29weSBvZiAKK1xpIE9wZW5TU0wgMS4wCitcaTAgOyBpdCBjb25zdWx0cyB0aGUgc2FtZSBkZWZhdWx0IGNlcnRpZmljYXRlIGRpcmVjdG9yeSwgCitcZjEgL1N5c3RlbS9MaWJyYXJ5L09wZW5TU0wKK1xmMCAuICAgQXMgYmVmb3JlLCBpdCBpcyBzdGlsbCBuZWNlc3NhcnkgdG8gbWFuYWdlIGNlcnRpZmljYXRlcyB5b3Vyc2VsZiB3aGVuIHlvdSB1c2UgdGhpcyBQeXRob24gdmFyaWFudCBhbmQsIHdpdGggY2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uIG5vdyBlbmFibGVkIGJ5IGRlZmF1bHQsIHlvdSBtYXkgbm93IG5lZWQgdG8gdGFrZSBhZGRpdGlvbmFsIHN0ZXBzIHRvIGVuc3VyZSB5b3VyIFB5dGhvbiBwcm9ncmFtcyBoYXZlIGFjY2VzcyB0byBDQSBjZXJ0aWZpY2F0ZXMgeW91IHRydXN0LiAgSWYgeW91IHVzZSB0aGlzIFB5dGhvbiB2YXJpYW50IHRvIGJ1aWxkIHN0YW5kYWxvbmUgYXBwbGljYXRpb25zIHdpdGggdGhpcmQtcGFydHkgdG9vbHMgbGlrZSB7XGZpZWxke1wqXGZsZGluc3R7SFlQRVJMSU5LICJodHRwczovL3B5cGkucHl0aG9uLm9yZy9weXBpL3B5MmFwcC8ifX17XGZsZHJzbHQgCitcZjEgcHkyYXBwfX0sIHlvdSBtYXkgbm93IG5lZWQgdG8gYnVuZGxlIENBIGNlcnRpZmljYXRlcyBpbiB0aGVtIG9yIG90aGVyd2lzZSBzdXBwbHkgbm9uLWRlZmF1bHQgU1NMIGNvbnRleHRzLlwKK1wKK0ZvciBPUyBYIDEwLjYrLCBBcHBsZSBhbHNvIHByb3ZpZGVzIAorXGkgT3BlblNTTAorXGkwICAKK1xpIDAuOS44IGxpYnJhcmllcworXGkwIC4gIEFwcGxlJ3MgMC45LjggdmVyc2lvbiBpbmNsdWRlcyBhbiBpbXBvcnRhbnQgYWRkaXRpb25hbCBmZWF0dXJlOiBpZiBhIGNlcnRpZmljYXRlIGNhbm5vdCBiZSB2ZXJpZmllZCB1c2luZyB0aGUgbWFudWFsbHkgYWRtaW5pc3RlcmVkIGNlcnRpZmljYXRlcyBpbiAKK1xmMSAvU3lzdGVtL0xpYnJhcnkvT3BlblNTTAorXGYwICwgdGhlIGNlcnRpZmljYXRlcyBtYW5hZ2VkIGJ5IHRoZSBzeXN0ZW0gc2VjdXJpdHkgZnJhbWV3b3JrIEluIHRoZSB1c2VyIGFuZCBzeXN0ZW0ga2V5Y2hhaW5zIGFyZSBhbHNvIGNvbnN1bHRlZCAodXNpbmcgQXBwbGUgcHJpdmF0ZSBBUElzKS4gIEZvciB0aGlzIHJlYXNvbiwgZm9yIDMuNC4zIHRoZSAKK1xpIDY0LWJpdC8zMi1iaXQgMTAuNisgcHl0aG9uLm9yZyB2YXJpYW50CitcaTAgIGNvbnRpbnVlcyB0byBiZSBkeW5hbWljYWxseSBsaW5rZWQgd2l0aCBBcHBsZSdzIE9wZW5TU0wgMC45Ljggc2luY2UgaXQgd2FzIGZlbHQgdGhhdCB0aGUgbG9zcyBvZiB0aGUgc3lzdGVtLXByb3ZpZGVkIGNlcnRpZmljYXRlcyBhbmQgbWFuYWdlbWVudCB0b29scyBvdXR3ZWlnaHMgdGhlIGFkZGl0aW9uYWwgc2VjdXJpdHkgZmVhdHVyZXMgcHJvdmlkZWQgYnkgbmV3ZXIgdmVyc2lvbnMgb2YgT3BlblNTTC4gIFRoaXMgd2lsbCBsaWtlbHkgY2hhbmdlIGluIGZ1dHVyZSByZWxlYXNlcyBvZiB0aGUgcHl0aG9uLm9yZyBpbnN0YWxsZXJzIGFzIEFwcGxlIGhhcyBkZXByZWNhdGVkIHVzZSBvZiB0aGUgc3lzdGVtLXN1cHBsaWVkIE9wZW5TU0wgbGlicmFyaWVzLiAgSWYgeW91IGRvIG5lZWQgZmVhdHVyZXMgZnJvbSBuZXdlciB2ZXJzaW9ucyBvZiBPcGVuU1NMLCB0aGVyZSBhcmUgdGhpcmQtcGFydHkgT3BlblNTTCB3cmFwcGVyIHBhY2thZ2VzIGF2YWlsYWJsZSB0aHJvdWdoIAorXGkgUHlQSQorXGkwIC5cCitcCitUaGUgYnVuZGxlZCAKK1xmMSBwaXAKK1xmMCAgaW5jbHVkZWQgd2l0aCAzLjQuMyBoYXMgaXRzIG93biBkZWZhdWx0IGNlcnRpZmljYXRlIHN0b3JlIGZvciB2ZXJpZnlpbmcgZG93bmxvYWQgY29ubmVjdGlvbnMuXAorXHBhcmRcdHg3MjBcdHgxNDQwXHR4MjE2MFx0eDI4ODBcdHgzNjAwXHR4NDMyMFx0eDUwNDBcdHg1NzYwXHR4NjQ4MFx0eDcyMDBcdHg3OTIwXHR4ODY0MFxwYXJkaXJuYXR1cmFsCisKK1xiIFxjZjAgXHVsIFwKK1B5dGhvbiAzIGFuZCBQeXRob24gMiBDby1leGlzdGVuY2VcCisKK1xiMCBcdWxub25lIFwKK1B5dGhvbi5vcmcgUHl0aG9uICRWRVJTSU9OIGFuZCAyLjcueCB2ZXJzaW9ucyBjYW4gYm90aCBiZSBpbnN0YWxsZWQgb24geW91ciBzeXN0ZW0gYW5kIHdpbGwgbm90IGNvbmZsaWN0LiBDb21tYW5kIG5hbWVzIGZvciBQeXRob24gMyBjb250YWluIGEgMyBpbiB0aGVtLCAKK1xmMSBweXRob24zCitcZjAgIChvcgorXGYxICBweXRob24kVkVSU0lPTgorXGYwICksIAorXGYxIGlkbGUzCitcZjAgIChvciBpCitcZjEgZGxlJFZFUlNJT04KK1xmMCApLCAKK1xmMSBwaXAzCitcZjAgIChvciAKK1xmMSBwaXAkVkVSU0lPTgorXGYwICksIGV0Yy4gIFB5dGhvbiAyLjcgY29tbWFuZCBuYW1lcyBjb250YWluIGEgMiBvciBubyBkaWdpdDogCitcZjEgcHl0aG9uMgorXGYwICAob3IgCitcZjEgcHl0aG9uMi43CitcZjAgIG9yIAorXGYxIHB5dGhvbgorXGYwICksIAorXGYxIGlkbGUyCitcZjAgIChvciAKK1xmMSBpZGxlMi43CitcZjAgIG9yIAorXGYxIGlkbGUKK1xmMCApLCBldGMuXAorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL01hYy9CdWlsZFNjcmlwdC9yZXNvdXJjZXMvUmVhZE1lLnR4dCBiL01hYy9CdWlsZFNjcmlwdC9yZXNvdXJjZXMvUmVhZE1lLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjEyZDk2My4uMDAwMDAwMAotLS0gYS9NYWMvQnVpbGRTY3JpcHQvcmVzb3VyY2VzL1JlYWRNZS50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi1UaGlzIHBhY2thZ2Ugd2lsbCBpbnN0YWxsIFB5dGhvbiAkRlVMTF9WRVJTSU9OIGZvciBNYWMgT1MgWAotJE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCBmb3IgdGhlIGZvbGxvd2luZyBhcmNoaXRlY3R1cmUocyk6Ci0kQVJDSElURUNUVVJFUy4KLQotICAgICAgICAgICAgICAgKioqKiBJTVBPUlRBTlQgKioqKgotCi1JbnN0YWxsaW5nIG9uIE9TIFggMTAuOCAoTW91bnRhaW4gTGlvbikgb3IgbGF0ZXIgc3lzdGVtcwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotSWYgeW91IGFyZSBhdHRlbXB0aW5nIHRvIGluc3RhbGwgb24gYW4gT1MgWCAxMC44KyBzeXN0ZW0sIHlvdSBtYXkKLXNlZSBhIG1lc3NhZ2UgdGhhdCBQeXRob24gY2FuJ3QgYmUgaW5zdGFsbGVkIGJlY2F1c2UgaXQgaXMgZnJvbSBhbgotdW5pZGVudGlmaWVkIGRldmVsb3Blci4gIFRoaXMgaXMgYmVjYXVzZSB0aGlzIFB5dGhvbiBpbnN0YWxsZXIKLXBhY2thZ2UgaXMgbm90IHlldCBjb21wYXRpYmxlIHdpdGggdGhlIEdhdGVrZWVwZXIgc2VjdXJpdHkgZmVhdHVyZQotaW50cm9kdWNlZCBpbiBPUyBYIDEwLjguICBUbyBhbGxvdyBQeXRob24gdG8gYmUgaW5zdGFsbGVkLCB5b3UKLWNhbiBvdmVycmlkZSB0aGUgR2F0ZWtlZXBlciBwb2xpY3kgZm9yIHRoaXMgaW5zdGFsbC4gIEluIHRoZSBGaW5kZXIsCi1pbnN0ZWFkIG9mIGRvdWJsZS1jbGlja2luZywgY29udHJvbC1jbGljayBvciByaWdodCBjbGljayB0aGUgIlB5dGhvbiIKLWluc3RhbGxlciBwYWNrYWdlIGljb24uICBUaGVuIHNlbGVjdCAiT3BlbiB1c2luZyAuLi4gSW5zdGFsbGVyIiBmcm9tCi10aGUgY29udGV4dHVhbCBtZW51IHRoYXQgYXBwZWFycy4KLQotICAgICAgICAgICAgICAgKioqKiBJTVBPUlRBTlQgKioqKgotCi1VcGRhdGUgeW91ciB2ZXJzaW9uIG9mIFRjbC9UayB0byB1c2UgSURMRSBvciBvdGhlciBUayBhcHBsaWNhdGlvbnMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1UbyB1c2UgSURMRSBvciBvdGhlciBwcm9ncmFtcyB0aGF0IHVzZSB0aGUgVGtpbnRlciBncmFwaGljYWwgdXNlcgotaW50ZXJmYWNlIHRvb2xraXQsIHlvdSBtYXkgbmVlZCB0byBpbnN0YWxsIGEgbmV3ZXIgdGhpcmQtcGFydHkgdmVyc2lvbgotb2YgdGhlIFRjbC9UayBmcmFtZXdvcmtzLiAgVmlzaXQgaHR0cDovL3d3dy5weXRob24ub3JnL2Rvd25sb2FkL21hYy90Y2x0ay8KLWZvciBjdXJyZW50IGluZm9ybWF0aW9uIGFib3V0IHN1cHBvcnRlZCBhbmQgcmVjb21tZW5kZWQgdmVyc2lvbnMgb2YKLVRjbC9UayBmb3IgdGhpcyB2ZXJzaW9uIG9mIFB5dGhvbiBhbmQgb2YgTWFjIE9TIFguCi0KLQotVXNpbmcgdGhpcyB2ZXJzaW9uIG9mIFB5dGhvbiBvbiBPUyBYCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotUHl0aG9uIGNvbnNpc3RzIG9mIHRoZSBQeXRob24gcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UgaW50ZXJwcmV0ZXIsIHBsdXMKLWEgc2V0IG9mIHByb2dyYW1zIHRvIGFsbG93IGVhc3kgYWNjZXNzIHRvIGl0IGZvciBNYWMgdXNlcnMgaW5jbHVkaW5nCi1hbiBpbnRlZ3JhdGVkIGRldmVsb3BtZW50IGVudmlyb25tZW50LCBJRExFLCBwbHVzIGEgc2V0IG9mIHByZS1idWlsdAotZXh0ZW5zaW9uIG1vZHVsZXMgdGhhdCBvcGVuIHVwIHNwZWNpZmljIE1hY2ludG9zaCB0ZWNobm9sb2dpZXMgdG8KLVB5dGhvbiBwcm9ncmFtcy4KLQotVGhlIGluc3RhbGxlciBwdXRzIGFwcGxpY2F0aW9ucywgYW4gIlVwZGF0ZSBTaGVsbCBQcm9maWxlIiBjb21tYW5kLAotYW5kIGEgbGluayB0byB0aGUgb3B0aW9uYWxseSBpbnN0YWxsZWQgUHl0aG9uIERvY3VtZW50YXRpb24gaW50byB0aGUKLSJQeXRob24gJFZFUlNJT04iIHN1YmZvbGRlciBvZiB0aGUgc3lzdGVtIEFwcGxpY2F0aW9ucyBmb2xkZXIsCi1hbmQgcHV0cyB0aGUgdW5kZXJseWluZyBtYWNoaW5lcnkgaW50byB0aGUgZm9sZGVyCi0kUFlUSE9ORlJBTUVXT1JLSU5TVEFMTERJUi4gSXQgY2FuCi1vcHRpb25hbGx5IHBsYWNlIGxpbmtzIHRvIHRoZSBjb21tYW5kLWxpbmUgdG9vbHMgaW4gL3Vzci9sb2NhbC9iaW4gYXMKLXdlbGwuIERvdWJsZS1jbGljayBvbiB0aGUgIlVwZGF0ZSBTaGVsbCBQcm9maWxlIiBjb21tYW5kIHRvIGFkZCB0aGUKLSJiaW4iIGRpcmVjdG9yeSBpbnNpZGUgdGhlIGZyYW1ld29yayB0byB5b3VyIHNoZWxsJ3Mgc2VhcmNoIHBhdGguCi0KLVlvdSBtdXN0IGluc3RhbGwgb250byB5b3VyIGN1cnJlbnQgYm9vdCBkaXNrLCBldmVuIHRob3VnaCB0aGUKLWluc3RhbGxlciBtYXkgbm90IGVuZm9yY2UgdGhpcywgb3RoZXJ3aXNlIHRoaW5ncyB3aWxsIG5vdCB3b3JrLgotCi1Zb3UgY2FuIHZlcmlmeSB0aGUgaW50ZWdyaXR5IG9mIHRoZSBkaXNrIGltYWdlIGZpbGUgY29udGFpbmluZyB0aGUKLWluc3RhbGxlciBwYWNrYWdlIGFuZCB0aGlzIFJlYWRNZSBmaWxlIGJ5IGNvbXBhcmluZyBpdHMgbWQ1IGNoZWNrc3VtCi1hbmQgc2l6ZSB3aXRoIHRoZSB2YWx1ZXMgcHVibGlzaGVkIG9uIHRoZSByZWxlYXNlIHBhZ2UgbGlua2VkIGF0Ci1odHRwOi8vd3d3LnB5dGhvbi5vcmcvZG93bmxvYWQvCi0KLUluc3RhbGxhdGlvbiByZXF1aXJlcyBhcHByb3hpbWF0ZWx5ICRJTlNUQUxMX1NJWkUgTUIgb2YgZGlzayBzcGFjZSwKLWlnbm9yZSB0aGUgbWVzc2FnZSB0aGF0IGl0IHdpbGwgdGFrZSB6ZXJvIGJ5dGVzLgotCi1Nb3JlIGluZm9ybWF0aW9uIG9uIFB5dGhvbiBpbiBnZW5lcmFsIGNhbiBiZSBmb3VuZCBhdAotaHR0cDovL3d3dy5weXRob24ub3JnLgpkaWZmIC0tZ2l0IGEvTWFjL0J1aWxkU2NyaXB0L3Jlc291cmNlcy9XZWxjb21lLnJ0ZiBiL01hYy9CdWlsZFNjcmlwdC9yZXNvdXJjZXMvV2VsY29tZS5ydGYKaW5kZXggMjM5ZDc2ZS4uMjUyNzc4NyAxMDA2NDQKLS0tIGEvTWFjL0J1aWxkU2NyaXB0L3Jlc291cmNlcy9XZWxjb21lLnJ0ZgorKysgYi9NYWMvQnVpbGRTY3JpcHQvcmVzb3VyY2VzL1dlbGNvbWUucnRmCkBAIC0xLDcgKzEsNyBAQAote1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcY29jb2FydGYxMTg3XGNvY29hc3VicnRmNDAwCi1cY29jb2FzY3JlZW5mb250czF7XGZvbnR0YmxcZjBcZnN3aXNzXGZjaGFyc2V0MCBIZWx2ZXRpY2E7fQore1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcY29jb2FydGYxMzQzXGNvY29hc3VicnRmMTYwCitcY29jb2FzY3JlZW5mb250czF7XGZvbnR0YmxcZjBcZnN3aXNzXGZjaGFyc2V0MCBIZWx2ZXRpY2E7XGYxXGZtb2Rlcm5cZmNoYXJzZXQwIENvdXJpZXJOZXdQU01UO30KIHtcY29sb3J0Ymw7XHJlZDI1NVxncmVlbjI1NVxibHVlMjU1O30KLVxwYXBlcncxMTkwNVxwYXBlcmgxNjgzN1xtYXJnbDE0NDBcbWFyZ3IxNDQwXHZpZXd3OTY0MFx2aWV3aDEwNjIwXHZpZXdraW5kMAorXHBhcGVydzExOTA1XHBhcGVyaDE2ODM3XG1hcmdsMTQ0MFxtYXJncjE0NDBcdmlld3cxMjIwMFx2aWV3aDEwODgwXHZpZXdraW5kMAogXHBhcmRcdHg3MjBcdHgxNDQwXHR4MjE2MFx0eDI4ODBcdHgzNjAwXHR4NDMyMFx0eDUwNDBcdHg1NzYwXHR4NjQ4MFx0eDcyMDBcdHg3OTIwXHR4ODY0MAogCiBcZjBcZnMyNCBcY2YwIFRoaXMgcGFja2FnZSB3aWxsIGluc3RhbGwgCkBAIC0xNCwxNSArMTQsMTMgQEAKIFxiIFB5dGhvbiBmb3IgTWFjIE9TIFgKIFxiMCAgY29uc2lzdHMgb2YgdGhlIFB5dGhvbiBwcm9ncmFtbWluZyBsYW5ndWFnZSBpbnRlcnByZXRlciwgcGx1cyBhIHNldCBvZiBwcm9ncmFtcyB0byBhbGxvdyBlYXN5IGFjY2VzcyB0byBpdCBmb3IgTWFjIE9TIFggdXNlcnMgaW5jbHVkaW5nIGFuIGludGVncmF0ZWQgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQgCiBcYiBJRExFCi1cYjAgIGFuZCBhIHNldCBvZiBwcmUtYnVpbHQgZXh0ZW5zaW9uIG1vZHVsZXMgdGhhdCBvcGVuIHVwIHNwZWNpZmljIE1hY2ludG9zaCB0ZWNobm9sb2dpZXMgdG8gUHl0aG9uIHByb2dyYW1zLlwKLVwKLVNlZSB0aGUgUmVhZE1lIGZpbGUgYW5kIHRoZSBQeXRob24gZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cCitcYjAgLlwKIFwKIAotXGIgTk9URTogCi1cYjAgVGhpcyBwYWNrYWdlIHdpbGwgbm90IHVwZGF0ZSB5b3VyIHNoZWxsIHByb2ZpbGUgYnkgZGVmYXVsdC4gIERvdWJsZS1jbGljayAKLVxiIFVwZGF0ZSBTaGVsbCBQcm9maWxlCi1cYjAgIGF0IGFueSB0aW1lIHRvIG1ha2UgJEZVTExfVkVSU0lPTiB0aGUgZGVmYXVsdCBQeXRob24gMyB2ZXJzaW9uLiAgVGhpcyB2ZXJzaW9uIGNhbiBjby1leGlzdCB3aXRoIG90aGVyIGluc3RhbGxlZCB2ZXJzaW9ucyBvZiBQeXRob24gMyBhbmQgUHl0aG9uIDIuXAorXGIgTkVXIGZvciBQeXRob24gMy40LjM6IAorXGIwICAzLjQuMyBpbmNsdWRlcyBuZXR3b3JrIHNlY3VyaXR5IGVuaGFuY2VtZW50cyB0aGF0IG1heSByZXF1aXJlIGNoYW5nZXMgdG8geW91ciBQeXRob24gYXBwbGljYXRpb25zLiAgU2VlIHRoZSAKK1xmMSBSZWFkTWUKK1xmMCAgZmlsZSBhbmQge1xmaWVsZHtcKlxmbGRpbnN0e0hZUEVSTElOSyAiaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy93aGF0c25ldy8zLjQuaHRtbCNjaGFuZ2VkLWluLTMtNC0zIn19e1xmbGRyc2x0IHRoZSBQeXRob24gZG9jdW1lbnRhdGlvbn19IGZvciBtb3JlIGluZm9ybWF0aW9uLlwKIFwKIAogXGIgSU1QT1JUQU5UOgpAQCAtMzIsNCArMzAsNCBAQAogXGIgdGtpbnRlcgogXGIwICBncmFwaGljYWwgdXNlciBpbnRlcmZhY2UgdG9vbGtpdCByZXF1aXJlIHNwZWNpZmljIHZlcnNpb25zIG9mIHRoZSAKIFxiIFRjbC9UawotXGIwICBwbGF0Zm9ybSBpbmRlcGVuZGVudCB3aW5kb3dpbmcgdG9vbGtpdC4gIFZpc2l0IHtcZmllbGR7XCpcZmxkaW5zdHtIWVBFUkxJTksgImh0dHA6Ly93d3cucHl0aG9uLm9yZy9kb3dubG9hZC9tYWMvdGNsdGsvIn19e1xmbGRyc2x0IGh0dHA6Ly93d3cucHl0aG9uLm9yZy9kb3dubG9hZC9tYWMvdGNsdGsvfX0gZm9yIGN1cnJlbnQgaW5mb3JtYXRpb24gb24gc3VwcG9ydGVkIGFuZCByZWNvbW1lbmRlZCB2ZXJzaW9ucyBvZiBUY2wvVGsgZm9yIHRoaXMgdmVyc2lvbiBvZiBQeXRob24gYW5kIE1hYyBPUyBYLn0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitcYjAgIHBsYXRmb3JtIGluZGVwZW5kZW50IHdpbmRvd2luZyB0b29sa2l0LiAgVmlzaXQge1xmaWVsZHtcKlxmbGRpbnN0e0hZUEVSTElOSyAiaHR0cHM6Ly93d3cucHl0aG9uLm9yZy9kb3dubG9hZC9tYWMvdGNsdGsvIn19e1xmbGRyc2x0IGh0dHBzOi8vd3d3LnB5dGhvbi5vcmcvZG93bmxvYWQvbWFjL3RjbHRrL319IGZvciBjdXJyZW50IGluZm9ybWF0aW9uIG9uIHN1cHBvcnRlZCBhbmQgcmVjb21tZW5kZWQgdmVyc2lvbnMgb2YgVGNsL1RrIGZvciB0aGlzIHZlcnNpb24gb2YgUHl0aG9uIGFuZCBNYWMgT1MgWC59ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvTWFjL0J1aWxkU2NyaXB0L3NjcmlwdHMvcG9zdGZsaWdodC5lbnN1cmVwaXAgYi9NYWMvQnVpbGRTY3JpcHQvc2NyaXB0cy9wb3N0ZmxpZ2h0LmVuc3VyZXBpcApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iZjg5M2QxCi0tLSAvZGV2L251bGwKKysrIGIvTWFjL0J1aWxkU2NyaXB0L3NjcmlwdHMvcG9zdGZsaWdodC5lbnN1cmVwaXAKQEAgLTAsMCArMSw2OSBAQAorIyEvYmluL3NoCisjCisjIEluc3RhbGwvdXBncmFkZSBwaXAuCisjCisKK1BZVkVSPSJAUFlWRVJAIgorUFlNQUpPUj0iQFBZTUFKT1JAIgorRldLPSIvTGlicmFyeS9GcmFtZXdvcmtzL1B5dGhvbi5mcmFtZXdvcmsvVmVyc2lvbnMvJHtQWVZFUn0iCitSRUxGV0tCSU49Ii4uLy4uLy4uJHtGV0t9L2JpbiIKKwordW1hc2sgMDIyCisKKyIke0ZXS30vYmluL3B5dGhvbiR7UFlWRVJ9IiAtbSBlbnN1cmVwaXAgLS11cGdyYWRlCisKKyIke0ZXS30vYmluL3B5dGhvbiR7UFlWRVJ9IiAtV2kgXAorICAgICIke0ZXS30vbGliL3B5dGhvbiR7UFlWRVJ9L2NvbXBpbGVhbGwucHkiIFwKKyAgICAtZiAteCBiYWRzeW50YXggXAorICAgICIke0ZXS30vbGliL3B5dGhvbiR7UFlWRVJ9L3NpdGUtcGFja2FnZXMiCisKKyIke0ZXS30vYmluL3B5dGhvbiR7UFlWRVJ9IiAtV2kgLU8gXAorICAgICIke0ZXS30vbGliL3B5dGhvbiR7UFlWRVJ9L2NvbXBpbGVhbGwucHkiIFwKKyAgICAtZiAteCBiYWRzeW50YXggXAorICAgICIke0ZXS30vbGliL3B5dGhvbiR7UFlWRVJ9L3NpdGUtcGFja2FnZXMiCisKK2NoZ3JwIC1SIGFkbWluICIke0ZXS30vbGliL3B5dGhvbiR7UFlWRVJ9L3NpdGUtcGFja2FnZXMiICIke0ZXS30vYmluIgorY2htb2QgLVIgZyt3ICIke0ZXS30vbGliL3B5dGhvbiR7UFlWRVJ9L3NpdGUtcGFja2FnZXMiICIke0ZXS30vYmluIgorCisjIFdlIGRvIG5vdCBrbm93IGlmIHRoZSB1c2VyIHNlbGVjdGVkIHRoZSBQeXRob24gY29tbWFuZC1saW5lIHRvb2xzCisjIHBhY2thZ2UgdGhhdCBpbnN0YWxscyBzeW1saW5rcyB0byAvdXNyL2xvY2FsL2Jpbi4gIFNvIHdlIGFzc3VtZQorIyB0aGF0IHRoZSBjb21tYW5kLWxpbmUgdG9vbHMgcGFja2FnZSBoYXMgYWxyZWFkeSBjb21wbGV0ZWQgb3Igd2FzCisjIG5vdCBzZWxlY3RlZCBhbmQgd2Ugd2lsbCBvbmx5IGluc3RhbGwgL3Vzci9sb2NhbC9iaW4gc3ltbGlua3MgZm9yCisjIHBpcCBldCBhbCBpZiB0aGVyZSBhcmUgL3Vzci9sb2NhbC9iaW4vcHl0aG9uKiBzeW1saW5rcyB0byBvdXIKKyMgZnJhbWV3b3JrIGJpbiBkaXJlY3RvcnkuCisKK2lmIFsgLWQgL3Vzci9sb2NhbC9iaW4gXSA7IHRoZW4KKyAgICAoCisgICAgICAgIGluc3RhbGxfbGlua3NfaWZfb3VyX2Z3KCkgeworICAgICAgICAgICAgaWYgWyAiJChyZWFkbGluayAtbiAuLyQxKSIgPSAiJHtSRUxGV0tCSU59LyQxIiBdIDsgdGhlbgorICAgICAgICAgICAgICAgIHNoaWZ0CisgICAgICAgICAgICAgICAgZm9yIGZuIDsKKyAgICAgICAgICAgICAgICBkbworICAgICAgICAgICAgICAgICAgICBpZiBbIC1lICIke1JFTEZXS0JJTn0vJHtmbn0iIF0gOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBybSAtZiAuLyR7Zm59CisgICAgICAgICAgICAgICAgICAgICAgICBsbiAtcyAiJHtSRUxGV0tCSU59LyR7Zm59IiAiLi8ke2ZufSIKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoZ3JwIC1oIGFkbWluICIuLyR7Zm59IgorICAgICAgICAgICAgICAgICAgICAgICAgY2htb2QgLWggZyt3ICIuLyR7Zm59IgorICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgIGZpCisgICAgICAgIH0KKworICAgICAgICBjZCAvdXNyL2xvY2FsL2JpbgorCisgICAgICAgICMgQ3JlYXRlIHBpcHgueSBhbmQgZWFzeV9pbnN0YWxsLXgueSBsaW5rcyBpZiAvdXNyL2xvY2FsL2Jpbi9weXRob254LnkKKyAgICAgICAgIyAgIGlzIGxpbmtlZCB0byB0aGlzIGZyYW1ld29yayB2ZXJzaW9uCisgICAgICAgIGluc3RhbGxfbGlua3NfaWZfb3VyX2Z3ICJweXRob24ke1BZVkVSfSIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBpcCR7UFlWRVJ9IiAiZWFzeV9pbnN0YWxsLSR7UFlWRVJ9IgorCisgICAgICAgICMgQ3JlYXRlIHBpcHggbGluayBpZiAvdXNyL2xvY2FsL2Jpbi9weXRob254IGlzIGxpbmtlZCB0byB0aGlzIHZlcnNpb24KKyAgICAgICAgaW5zdGFsbF9saW5rc19pZl9vdXJfZncgInB5dGhvbiR7UFlNQUpPUn0iIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwaXAke1BZTUFKT1J9IgorCisgICAgICAgICMgQ3JlYXRlIHBpcCBhbmQgZWFzeV9pbnN0YWxsIGxpbmsgaWYgL3Vzci9sb2NhbC9iaW4vcHl0aG9uCisgICAgICAgICMgICBpcyBsaW5rZWQgdG8gdGhpcyB2ZXJzaW9uCisgICAgICAgIGluc3RhbGxfbGlua3NfaWZfb3VyX2Z3ICJweXRob24iIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwaXAiICJlYXN5X2luc3RhbGwiCisgICAgKQorZmkKK2V4aXQgMApkaWZmIC0tZ2l0IGEvTWFjL0lETEUvSURMRS5hcHAvQ29udGVudHMvSW5mby5wbGlzdCBiL01hYy9JRExFL0lETEUuYXBwL0NvbnRlbnRzL0luZm8ucGxpc3QKaW5kZXggZDAyNTdiYS4uOTUzOGMwNiAxMDA2NDQKLS0tIGEvTWFjL0lETEUvSURMRS5hcHAvQ29udGVudHMvSW5mby5wbGlzdAorKysgYi9NYWMvSURMRS9JRExFLmFwcC9Db250ZW50cy9JbmZvLnBsaXN0CkBAIC0zNiw3ICszNiw3IEBACiAJPGtleT5DRkJ1bmRsZUV4ZWN1dGFibGU8L2tleT4KIAk8c3RyaW5nPklETEU8L3N0cmluZz4KIAk8a2V5PkNGQnVuZGxlR2V0SW5mb1N0cmluZzwva2V5PgotCTxzdHJpbmc+JXZlcnNpb24lLCDCqSAyMDAxLTIwMTQgUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb248L3N0cmluZz4KKwk8c3RyaW5nPiV2ZXJzaW9uJSwgwqkgMjAwMS0yMDE1IFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uPC9zdHJpbmc+CiAJPGtleT5DRkJ1bmRsZUljb25GaWxlPC9rZXk+CiAJPHN0cmluZz5JRExFLmljbnM8L3N0cmluZz4KIAk8a2V5PkNGQnVuZGxlSWRlbnRpZmllcjwva2V5PgpkaWZmIC0tZ2l0IGEvTWFjL01ha2VmaWxlLmluIGIvTWFjL01ha2VmaWxlLmluCmluZGV4IDVjYjY2NGQuLjAzZWM3MzggMTAwNjQ0Ci0tLSBhL01hYy9NYWtlZmlsZS5pbgorKysgYi9NYWMvTWFrZWZpbGUuaW4KQEAgLTMsOSArMywxMyBAQAogIyBjb21tYW5kbGluZSBpbiB0aGF0IGNhc2UuCiAKIFZFUlNJT049QFZFUlNJT05ACitBQklGTEFHUz1AQUJJRkxBR1NACitMRFZFUlNJT049QExEVkVSU0lPTkAKK0VOU1VSRVBJUD1ARU5TVVJFUElQQAogYnVpbGRkaXIgPSAuLgogc3JjZGlyPUBzcmNkaXJACiBwcmVmaXg9QHByZWZpeEAKK2V4ZWNfcHJlZml4PUBleGVjX3ByZWZpeEAKIExJQkRFU1Q9JChwcmVmaXgpL2xpYi9weXRob24kKFZFUlNJT04pCiBSVU5TSEFSRUQ9QFJVTlNIQVJFREAKIEJVSUxERVhFPUBCVUlMREVYRUVYVEAKQEAgLTIzLDcgKzI3LDcgQEAKIAogCiAjIFRoZXNlIGFyZSBub3JtYWxseSBnbGltcHNlZCBmcm9tIHRoZSBwcmV2aW91cyBzZXQKLWJpbmRpcj0kKHByZWZpeCkvYmluCitCSU5ESVI9CQlAYmluZGlyQAogUFlUSE9OQVBQU0RJUj1ARlJBTUVXT1JLSU5TVEFMTEFQUFNQUkVGSVhALyQoUFlUSE9ORlJBTUVXT1JLKSAkKFZFUlNJT04pCiBBUFBJTlNUQUxMRElSPSQocHJlZml4KS9SZXNvdXJjZXMvUHl0aG9uLmFwcAogCkBAIC00NiwxOSArNTAsNyBAQAogQVBQU1VCRElSUz1NYWNPUyBSZXNvdXJjZXMKIGNvbXBpbGVhbGw9JChzcmNkaXIpLy4uL0xpYi9jb21waWxlYWxsLnB5CiAKLWluc3RhbGxhcHBzOiBpbnN0YWxsX1B5dGhvbiBpbnN0YWxsX3B5dGhvbncgaW5zdGFsbF9QeXRob25MYXVuY2hlciBpbnN0YWxsX0lETEUKLQotaW5zdGFsbF9weXRob253OiBweXRob253Ci0JJChJTlNUQUxMX1BST0dSQU0pICQoU1RSSVBGTEFHKSBweXRob253ICIkKERFU1RESVIpJChwcmVmaXgpL2Jpbi9weXRob253JChWRVJTSU9OKSIKLQkkKElOU1RBTExfUFJPR1JBTSkgJChTVFJJUEZMQUcpIHB5dGhvbncgIiQoREVTVERJUikkKHByZWZpeCkvYmluL3B5dGhvbiQoVkVSU0lPTikiCi0JbG4gLXNmIHB5dGhvbiQoVkVSU0lPTikgIiQoREVTVERJUikkKHByZWZpeCkvYmluL3B5dGhvbjMiCi0JbG4gLXNmIHB5dGhvbnckKFZFUlNJT04pICIkKERFU1RESVIpJChwcmVmaXgpL2Jpbi9weXRob253MyIKLWlmbmVxICgkKExJUE9fMzJCSVRfRkxBR1MpLCkKLQlsaXBvICQoTElQT18zMkJJVF9GTEFHUykgLW91dHB1dCAkKERFU1RESVIpJChwcmVmaXgpL2Jpbi9weXRob24kKFZFUlNJT04pLTMyIHB5dGhvbncKLQlsaXBvICQoTElQT18zMkJJVF9GTEFHUykgLW91dHB1dCAkKERFU1RESVIpJChwcmVmaXgpL2Jpbi9weXRob253JChWRVJTSU9OKS0zMiBweXRob253Ci0JbG4gLXNmIHB5dGhvbnckKFZFUlNJT04pLTMyCSIkKERFU1RESVIpJChwcmVmaXgpL2Jpbi9weXRob253My0zMiIKLQlsbiAtc2YgcHl0aG9uJChWRVJTSU9OKS0zMgkiJChERVNURElSKSQocHJlZml4KS9iaW4vcHl0aG9uMy0zMiIKLWVuZGlmCitpbnN0YWxsYXBwczogaW5zdGFsbF9QeXRob24gaW5zdGFsbF9QeXRob25MYXVuY2hlciBpbnN0YWxsX0lETEUKIAogIwogIyBJbnN0YWxsIHVuaXggdG9vbHMgaW4gL3Vzci9sb2NhbC9iaW4uIFRoZXNlIGFyZSBqdXN0IGFsaWFzZXMgZm9yIHRoZSAKQEAgLTY4LDIxICs2MCw0OSBAQAogCWlmIFsgISAtZCAiJChERVNURElSKSQoRlJBTUVXT1JLVU5JWFRPT0xTUFJFRklYKS9iaW4iIF07IHRoZW4gIFwKIAkJJChJTlNUQUxMKSAtZCAtbSAkKERJUk1PREUpICIkKERFU1RESVIpJChGUkFNRVdPUktVTklYVE9PTFNQUkVGSVgpL2JpbiIgO1wKIAlmaQotCWZvciBmbiBpbiBweXRob24zIHB5dGhvbnczIGlkbGUzIHB5ZG9jMyBweXRob24zLWNvbmZpZyBcCi0JCSAgcHl0aG9uJChWRVJTSU9OKSBweXRob253JChWRVJTSU9OKSBpZGxlJChWRVJTSU9OKSBcCi0JCSAgcHlkb2MkKFZFUlNJT04pIHB5dGhvbiQoVkVSU0lPTiktY29uZmlnIDJ0bzMgXAotCQkgIDJ0bzMtJChWRVJTSU9OKSBweXZlbnYgcHl2ZW52LSQoVkVSU0lPTikgO1wKKwljZCAiJChERVNURElSKSQoRlJBTUVXT1JLVU5JWFRPT0xTUFJFRklYKS9iaW4iICYmIFwKKwlmb3IgZm4gaW4gXAorCQkJMnRvMyBcCisJCQlpZGxlMyBcCisJCQlweWRvYzMgXAorCQkJcHl0aG9uMyBcCisJCQlweXRob24zLWNvbmZpZyBcCisJCQlweXZlbnYgXAorCQkJOyBcCiAJZG8gXAotCQlsbiAtZnMgIiQocHJlZml4KS9iaW4vJCR7Zm59IiAiJChERVNURElSKSQoRlJBTUVXT1JLVU5JWFRPT0xTUFJFRklYKS9iaW4vJCR7Zm59IiA7XAorCQlybSAtZiAkJHtmbn0gOyBcCisJCSQoTE4pIC1zICQoQklORElSKS8kJHtmbn0gJCR7Zm59IDtcCiAJZG9uZQotaWZuZXEgKCQoTElQT18zMkJJVF9GTEFHUyksKQotCWZvciBmbiBpbiBweXRob24zLTMyIHB5dGhvbnczLTMyIFwKLQkJICBweXRob24kKFZFUlNJT04pLTMyIHB5dGhvbnckKFZFUlNJT04pLTMyIDtcCi0JZG8gXAotCQlsbiAtZnMgIiQocHJlZml4KS9iaW4vJCR7Zm59IiAiJChERVNURElSKSQoRlJBTUVXT1JLVU5JWFRPT0xTUFJFRklYKS9iaW4vJCR7Zm59IiA7XAotCWRvbmUKLWVuZGlmCi0KKwktaWYgdGVzdCAieCQoVkVSU0lPTikiICE9ICJ4JChMRFZFUlNJT04pIjsgdGhlbiBcCisJCWNkICIkKERFU1RESVIpJChGUkFNRVdPUktVTklYVE9PTFNQUkVGSVgpL2JpbiIgJiYgXAorCQlmb3IgZm4gaW4gXAorCQkJCXB5dGhvbiQoVkVSU0lPTiktY29uZmlnIFwKKwkJCQk7IFwKKwkJZG8gXAorCQkJcm0gLWYgJCR7Zm59IDtcCisJCQkkKExOKSAtcyAkKEJJTkRJUikvJCR7Zm59ICQke2ZufSA7XAorCQlkb25lIDtcCisJZmkKKwktaWYgdGVzdCAieCQoTElQT18zMkJJVF9GTEFHUykiICE9ICJ4IjsgdGhlbiBcCisJCWNkICIkKERFU1RESVIpJChGUkFNRVdPUktVTklYVE9PTFNQUkVGSVgpL2JpbiIgJiYgXAorCQlmb3IgZm4gaW4gXAorCQkJCXB5dGhvbjMtMzIgXAorCQkJCTsgXAorCQlkbyBcCisJCQlybSAtZiAkJHtmbn0gO1wKKwkJCSQoTE4pIC1zICQoQklORElSKS8kJHtmbn0gJCR7Zm59IDtcCisJCWRvbmUgO1wKKwlmaQorCS1pZiB0ZXN0ICJ4JChFTlNVUkVQSVApIiAhPSAieG5vIiAgOyB0aGVuIFwKKwkJY2QgIiQoREVTVERJUikkKEZSQU1FV09SS1VOSVhUT09MU1BSRUZJWCkvYmluIiAmJiBcCisJCWZvciBmbiBpbiBcCisJCQkJcGlwMyBcCisJCQkJOyBcCisJCWRvIFwKKwkJCXJtIC1mICQke2ZufSA7XAorCQkJJChMTikgLXMgJChCSU5ESVIpLyQke2ZufSAkJHtmbn0gO1wKKwkJZG9uZSA7XAorCWZpCiAKICMKICMgTGlrZSBpbnN0YWxsdW5peHRvb2xzLCBidXQgb25seSBpbnN0YWxsIGxpbmtzIHRvIHRoZSB2ZXJzaW9uZWQgYmluYXJpZXMuCkBAIC05MSwyMCArMTExLDU1IEBACiAJaWYgWyAhIC1kICIkKERFU1RESVIpJChGUkFNRVdPUktVTklYVE9PTFNQUkVGSVgpL2JpbiIgXTsgdGhlbiAgXAogCQkkKElOU1RBTEwpIC1kIC1tICQoRElSTU9ERSkgIiQoREVTVERJUikkKEZSQU1FV09SS1VOSVhUT09MU1BSRUZJWCkvYmluIiA7XAogCWZpCi0JZm9yIGZuIGluIHB5dGhvbiQoVkVSU0lPTikgcHl0aG9udyQoVkVSU0lPTikgaWRsZSQoVkVSU0lPTikgXAotCQkgIHB5ZG9jJChWRVJTSU9OKSBweXRob24kKFZFUlNJT04pLWNvbmZpZyAydG8zLSQoVkVSU0lPTikgcHl2ZW52LSQoVkVSU0lPTikgO1wKKwljZCAiJChERVNURElSKSQoRlJBTUVXT1JLVU5JWFRPT0xTUFJFRklYKS9iaW4iICYmIFwKKwlmb3IgZm4gaW4gXAorCQkJMnRvMy0kKFZFUlNJT04pIFwKKwkJCWlkbGUkKFZFUlNJT04pIFwKKwkJCXB5ZG9jJChWRVJTSU9OKSBcCisJCQlweXRob24kKFZFUlNJT04pIFwKKwkJCXB5dGhvbiQoTERWRVJTSU9OKS1jb25maWcgXAorCQkJcHl2ZW52LSQoVkVSU0lPTikgXAorCQkJOyBcCiAJZG8gXAotCQlsbiAtZnMgIiQocHJlZml4KS9iaW4vJCR7Zm59IiAiJChERVNURElSKSQoRlJBTUVXT1JLVU5JWFRPT0xTUFJFRklYKS9iaW4vJCR7Zm59IiA7XAorCQlybSAtZiAkJHtmbn0gO1wKKwkJJChMTikgLXMgJChCSU5ESVIpLyQke2ZufSAkJHtmbn0gO1wKIAlkb25lCi1pZm5lcSAoJChMSVBPXzMyQklUX0ZMQUdTKSwpCi0JZm9yIGZuIGluIHB5dGhvbiQoVkVSU0lPTiktMzIgcHl0aG9udyQoVkVSU0lPTiktMzIgO1wKLQlkbyBcCi0JCWxuIC1mcyAiJChwcmVmaXgpL2Jpbi8kJHtmbn0iICIkKERFU1RESVIpJChGUkFNRVdPUktVTklYVE9PTFNQUkVGSVgpL2Jpbi8kJHtmbn0iIDtcCi0JZG9uZQotZW5kaWYKKwktaWYgdGVzdCAieCQoVkVSU0lPTikiICE9ICJ4JChMRFZFUlNJT04pIjsgdGhlbiBcCisJCWNkICIkKERFU1RESVIpJChGUkFNRVdPUktVTklYVE9PTFNQUkVGSVgpL2JpbiIgJiYgXAorCQlmb3IgZm4gaW4gXAorCQkJCXB5dGhvbiQoTERWRVJTSU9OKSBcCisJCQkJOyBcCisJCWRvIFwKKwkJCXJtIC1mICQke2ZufSA7XAorCQkJJChMTikgLXMgJChCSU5ESVIpLyQke2ZufSAkJHtmbn0gO1wKKwkJZG9uZSA7XAorCWZpCisJLWlmIHRlc3QgIngkKExJUE9fMzJCSVRfRkxBR1MpIiAhPSAieCI7IHRoZW4gXAorCQljZCAiJChERVNURElSKSQoRlJBTUVXT1JLVU5JWFRPT0xTUFJFRklYKS9iaW4iICYmIFwKKwkJZm9yIGZuIGluIFwKKwkJCQlweXRob24kKFZFUlNJT04pLTMyIFwKKwkJCQk7IFwKKwkJZG8gXAorCQkJcm0gLWYgJCR7Zm59IDtcCisJCQkkKExOKSAtcyAkKEJJTkRJUikvJCR7Zm59ICQke2ZufSA7XAorCQlkb25lIDtcCisJZmkKKwktaWYgdGVzdCAieCQoRU5TVVJFUElQKSIgIT0gInhubyIgIDsgdGhlbiBcCisJCWNkICIkKERFU1RESVIpJChGUkFNRVdPUktVTklYVE9PTFNQUkVGSVgpL2JpbiIgJiYgXAorCQlmb3IgZm4gaW4gXAorCQkJCWVhc3lfaW5zdGFsbC0kKFZFUlNJT04pIFwKKwkJCQlwaXAkKFZFUlNJT04pIFwKKwkJCQk7IFwKKwkJZG8gXAorCQkJcm0gLWYgJCR7Zm59IDtcCisJCQkkKExOKSAtcyAkKEJJTkRJUikvJCR7Zm59ICQke2ZufSA7XAorCQlkb25lIDtcCisJZmkKIAogcHl0aG9udzogJChzcmNkaXIpL1Rvb2xzL3B5dGhvbncuYyBNYWtlZmlsZQotCSQoQ0MpICQoTERGTEFHUykgLURQWVRIT05GUkFNRVdPUks9JyIkKFBZVEhPTkZSQU1FV09SSykiJyAtbyAkQCAkKHNyY2RpcikvVG9vbHMvcHl0aG9udy5jIC1JLi4gLUkkKHNyY2RpcikvLi4vSW5jbHVkZSAuLi8kKFBZVEhPTkZSQU1FV09SSykuZnJhbWV3b3JrL1ZlcnNpb25zLyQoVkVSU0lPTikvJChQWVRIT05GUkFNRVdPUkspCisJJChDQykgJChMREZMQUdTKSAtRFBZVEhPTkZSQU1FV09SSz0nIiQoUFlUSE9ORlJBTUVXT1JLKSInIC1vICRAIFwKKwkJJChzcmNkaXIpL1Rvb2xzL3B5dGhvbncuYyAtSS4uIC1JJChzcmNkaXIpLy4uL0luY2x1ZGUgXAorCQkuLi8kKFBZVEhPTkZSQU1FV09SSykuZnJhbWV3b3JrL1ZlcnNpb25zLyQoVkVSU0lPTikvJChQWVRIT05GUkFNRVdPUkspCiAKIGluc3RhbGxfUHl0aG9uTGF1bmNoZXI6CiAJY2QgUHl0aG9uTGF1bmNoZXIgJiYgbWFrZSBpbnN0YWxsIERFU1RESVI9JChERVNURElSKQpkaWZmIC0tZ2l0IGEvTWFjL1B5dGhvbkxhdW5jaGVyL0luZm8ucGxpc3QuaW4gYi9NYWMvUHl0aG9uTGF1bmNoZXIvSW5mby5wbGlzdC5pbgppbmRleCAwYTVhNDM5Li40Mjg0NmVhIDEwMDY0NAotLS0gYS9NYWMvUHl0aG9uTGF1bmNoZXIvSW5mby5wbGlzdC5pbgorKysgYi9NYWMvUHl0aG9uTGF1bmNoZXIvSW5mby5wbGlzdC5pbgpAQCAtNDAsNyArNDAsNyBAQAogCTxrZXk+Q0ZCdW5kbGVFeGVjdXRhYmxlPC9rZXk+CiAJPHN0cmluZz5QeXRob25MYXVuY2hlcjwvc3RyaW5nPgogCTxrZXk+Q0ZCdW5kbGVHZXRJbmZvU3RyaW5nPC9rZXk+Ci0JPHN0cmluZz4lVkVSU0lPTiUsIMKpIDIwMDEtMjAxNCBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbjwvc3RyaW5nPgorCTxzdHJpbmc+JVZFUlNJT04lLCDCqSAyMDAxLTIwMTUgUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb248L3N0cmluZz4KIAk8a2V5PkNGQnVuZGxlSWNvbkZpbGU8L2tleT4KIAk8c3RyaW5nPlB5dGhvbkxhdW5jaGVyLmljbnM8L3N0cmluZz4KIAk8a2V5PkNGQnVuZGxlSWRlbnRpZmllcjwva2V5PgpkaWZmIC0tZ2l0IGEvTWFjL1B5dGhvbkxhdW5jaGVyL01ha2VmaWxlLmluIGIvTWFjL1B5dGhvbkxhdW5jaGVyL01ha2VmaWxlLmluCmluZGV4IDk3MGI4M2YuLmYwNWVmZGYgMTAwNjQ0Ci0tLSBhL01hYy9QeXRob25MYXVuY2hlci9NYWtlZmlsZS5pbgorKysgYi9NYWMvUHl0aG9uTGF1bmNoZXIvTWFrZWZpbGUuaW4KQEAgLTUzLDggKzUzLDYgQEAKIAkJLS1yZXNvdXJjZT0kKHNyY2RpcikvZmFjdG9yeVNldHRpbmdzLnBsaXN0IFwKIAkJLS1wbGlzdCBJbmZvLnBsaXN0IFwKIAkJYnVpbGQKLQlmaW5kICJQeXRob24gTGF1bmNoZXIuYXBwIiAtbmFtZSAnLnN2bicgLXByaW50MCB8IHhhcmdzIC0wIHJtIC1yCi0JCQogCiBGaWxlU2V0dGluZ3MubzogJChzcmNkaXIpL0ZpbGVTZXR0aW5ncy5tCiAJJChDQykgJChDRkxBR1MpIC1vICRAIC1jICQoc3JjZGlyKS9GaWxlU2V0dGluZ3MubQpkaWZmIC0tZ2l0IGEvTWFjL1JFQURNRSBiL01hYy9SRUFETUUKaW5kZXggOGQ0ZWIzYi4uMGEzMTNkMSAxMDA2NDQKLS0tIGEvTWFjL1JFQURNRQorKysgYi9NYWMvUkVBRE1FCkBAIC03LDExICs3LDE0IEBACiAgICAgUm9uYWxkIE91c3NvcmVuICgyMDEwLTA0KSwKICAgICBOZWQgRGVpbHkgKDIwMTItMDYpCiAKLTpWZXJzaW9uOiAzLjMuMAorOlZlcnNpb246IDMuNC4wCiAKIFRoaXMgZG9jdW1lbnQgcHJvdmlkZXMgYSBxdWljayBvdmVydmlldyBvZiBzb21lIE1hYyBPUyBYIHNwZWNpZmljIGZlYXR1cmVzIGluCiB0aGUgUHl0aG9uIGRpc3RyaWJ1dGlvbi4KIAorT1MgWCBzcGVjaWZpYyBhcmd1bWVudHMgdG8gY29uZmlndXJlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwogKiBgYC0tZW5hYmxlLWZyYW1ld29ya1s9RElSXWBgCiAKICAgSWYgdGhpcyBhcmd1bWVudCBpcyBzcGVjaWZpZWQgdGhlIGJ1aWxkIHdpbGwgY3JlYXRlIGEgUHl0aG9uLmZyYW1ld29yayByYXRoZXIKQEAgLTEwNiw2ICsxMDksOCBAQAogCiAgICogYGBpbnRlbGBgOgkgIGBgaTM4NmBgLCBgYHg4Nl82NGBgCiAKKyAgKiBgYGludGVsLTMyYGA6IGBgaTM4NmBgCisKICAgKiBgYDMyLWJpdGBgOiAgIGBgcHBjYGAsIGBgaTM4NmBgCiAKICAgKiBgYDMtd2F5YGA6CSAgYGBpMzg2YGAsIGBgeDg2XzY0YGAsIGBgcHBjYGAKQEAgLTExOSw3ICsxMjQsNyBAQAogb25seSBiZSBidWlsdCB3aXRoIGFuIDEwLjUgU0RLIGJlY2F1c2UgYGBwcGM2NGBgIHN1cHBvcnQgd2FzIG9ubHkgaW5jbHVkZWQgd2l0aAogT1MgWCAxMC41LiAgQWx0aG91Z2ggbGVnYWN5IGBgcHBjYGAgc3VwcG9ydCB3YXMgaW5jbHVkZWQgd2l0aCBYY29kZSAzIG9uIE9TIFgKIDEwLjYsIGl0IHdhcyByZW1vdmVkIGluIFhjb2RlIDQsIHZlcnNpb25zIG9mIHdoaWNoIHdlcmUgcmVsZWFzZWQgb24gT1MgWCAxMC42Ci1hbmQgd2hpY2ggaXMgdGhlIGN1cnJlbnQgc3RhbmRhcmQgZm9yIE9TIFggMTAuNyBhbmQgMTAuOC4gIFRvIHN1bW1hcml6ZSwgdGhlCithbmQgd2hpY2ggaXMgdGhlIHN0YW5kYXJkIGZvciBPUyBYIDEwLjcuICBUbyBzdW1tYXJpemUsIHRoZQogZm9sbG93aW5nIGNvbWJpbmF0aW9ucyBvZiBTREtzIGFuZCB1bml2ZXJzYWwtYXJjaHMgZmxhdm9ycyBhcmUgYXZhaWxhYmxlOgogCiAgICogMTAuNHUgU0RLIHdpdGggWGNvZGUgMiBzdXBwb3J0cyBgYDMyLWJpdGBgIG9ubHkKQEAgLTEzMiw3ICsxMzcsOSBAQAogCiAgICogMTAuNyBhbmQgMTAuOCBTREtzIHdpdGggWGNvZGUgNCBzdXBwb3J0IGBgaW50ZWxgYCBvbmx5CiAKLVRoZSBtYWtlZmlsZSBmb3IgYSBmcmFtZXdvcmsgYnVpbGQgd2lsbCBhbHNvIGluc3RhbGwgYGBweXRob24zLjMtMzJgYAorICAqIDEwLjggYW5kIDEwLjkgU0RLcyB3aXRoIFhjb2RlIDUgc3VwcG9ydCBgYGludGVsYGAgb25seQorCitUaGUgbWFrZWZpbGUgZm9yIGEgZnJhbWV3b3JrIGJ1aWxkIHdpbGwgYWxzbyBpbnN0YWxsIGBgcHl0aG9uMy40LTMyYGAKIGJpbmFyaWVzIHdoZW4gdGhlIHVuaXZlcnNhbCBhcmNoaXRlY3R1cmUgaW5jbHVkZXMgYXQgbGVhc3Qgb25lIDMyLWJpdAogYXJjaGl0ZWN0dXJlICh0aGF0IGlzLCBmb3IgYWxsIGZsYXZvcnMgYnV0IGBgNjQtYml0YGApLgogCkBAIC0xNTYsMTAgKzE2Myw5IEBACiBub3QgYXV0b21hdGljYWxseSBjYXJyeSB0aHJvdWdoIHRvIHN1YnByb2Nlc3NlcyBsYXVuY2hlZCBieSBwcm9ncmFtcyBhbmQgdGVzdHMKIHVuZGVyIHRoYXQgUHl0aG9uLiAgSWYgeW91IHdhbnQgdG8gZW5zdXJlIHRoYXQgUHl0aG9uIGludGVycHJldGVycyBsYXVuY2hlZCBpbgogc3VicHJvY2Vzc2VzIGFsc28gcnVuIGluIDMyLWJpdC1tb2RlIGlmIHRoZSBtYWluIGludGVycHJldGVyIGRvZXMsIHVzZQotYSBgYHB5dGhvbjMuMy0zMmBgIGJpbmFyeSBhbmQgdXNlIHRoZSB2YWx1ZSBvZiBgYHN5cy5leGVjdXRhYmxlYGAgYXMgdGhlCithIGBgcHl0aG9uMy40LTMyYGAgYmluYXJ5IGFuZCB1c2UgdGhlIHZhbHVlIG9mIGBgc3lzLmV4ZWN1dGFibGVgYCBhcyB0aGUKIGBgc3VicHJvY2Vzc2BgIGBgUG9wZW5gYCBleGVjdXRhYmxlIHZhbHVlLgogCi0KIEJ1aWxkaW5nIGFuZCB1c2luZyBhIGZyYW1ld29yay1iYXNlZCBQeXRob24gb24gTWFjIE9TIFguCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCkBAIC0xNjksMTQgKzE3NSwxNCBAQAogCiBUaGUgbWFpbiByZWFzb24gaXMgYmVjYXVzZSB5b3Ugd2FudCB0byBjcmVhdGUgR1VJIHByb2dyYW1zIGluIFB5dGhvbi4gV2l0aCB0aGUKIGV4Y2VwdGlvbiBvZiBYMTEvWERhcndpbi1iYXNlZCBHVUkgdG9vbGtpdHMgYWxsIEdVSSBwcm9ncmFtcyBuZWVkIHRvIGJlIHJ1biAKLWZyb20gYSBNYWMgT1NYIGFwcGxpY2F0aW9uIGJ1bmRsZSAoIi5hcHAiKS4KK2Zyb20gYSBNYWMgT1MgWCBhcHBsaWNhdGlvbiBidW5kbGUgKCIuYXBwIikuCiAKIFdoaWxlIGl0IGlzIHRlY2huaWNhbGx5IHBvc3NpYmxlIHRvIGNyZWF0ZSBhIC5hcHAgd2l0aG91dCB1c2luZyBmcmFtZXdvcmtzIHlvdQogd2lsbCBoYXZlIHRvIGRvIHRoZSB3b3JrIHlvdXJzZWxmIGlmIHlvdSByZWFsbHkgd2FudCB0aGlzLgogCiBBIHNlY29uZCByZWFzb24gZm9yIHVzaW5nIGZyYW1ld29ya3MgaXMgdGhhdCB0aGV5IHB1dCBQeXRob24tcmVsYXRlZCBpdGVtcyBpbgogb25seSB0d28gcGxhY2VzOiAiL0xpYnJhcnkvRnJhbWV3b3JrL1B5dGhvbi5mcmFtZXdvcmsiIGFuZCAKLSIvQXBwbGljYXRpb25zL1B5dGhvbiA8VkVSU0lPTj4iIHdoZXJlIGBgPFZFUlNJT04+YGAgY2FuIGJlIGUuZy4gIjMuMyIsCisiL0FwcGxpY2F0aW9ucy9QeXRob24gPFZFUlNJT04+IiB3aGVyZSBgYDxWRVJTSU9OPmBgIGNhbiBiZSBlLmcuICIzLjQiLAogIjIuNyIsIGV0Yy4gIFRoaXMgc2ltcGxpZmllcyBtYXR0ZXJzIGZvciB1c2VycyBpbnN0YWxsaW5nCiBQeXRob24gZnJvbSBhIGJpbmFyeSBkaXN0cmlidXRpb24gaWYgdGhleSB3YW50IHRvIGdldCByaWQgb2YgaXQgYWdhaW4uIE1vcmVvdmVyLAogZHVlIHRvIHRoZSB3YXkgZnJhbWV3b3JrcyB3b3JrLCBhIHVzZXIgd2l0aG91dCBhZG1pbiBwcml2aWxlZ2VzIGNhbiBpbnN0YWxsIGEKQEAgLTE5NCw3ICsyMDAsNyBAQAogMy4gRG8gSSBuZWVkIGV4dHJhIHBhY2thZ2VzPwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1ZZXMsIHByb2JhYmx5LiAgSWYgeW91IHdhbnQgVGtpbnRlciBzdXBwb3J0IHlvdSBuZWVkIHRvIGdldCB0aGUgT1NYIEFxdWFUayAKK1llcywgcHJvYmFibHkuICBJZiB5b3Ugd2FudCBUa2ludGVyIHN1cHBvcnQgeW91IG5lZWQgdG8gZ2V0IHRoZSBPUyBYIEFxdWFUawogZGlzdHJpYnV0aW9uLCB0aGlzIGlzIGluc3RhbGxlZCBieSBkZWZhdWx0IG9uIE1hYyBPUyBYIDEwLjQgb3IgbGF0ZXIuICBCZQogYXdhcmUsIHRob3VnaCwgdGhhdCB0aGUgQ29jb2EtYmFzZWQgQXF1YVRrJ3Mgc3VwcGxpZWQgc3RhcnRpbmcgd2l0aCBPUyBYCiAxMC42IGhhdmUgcHJvdmVuIHRvIGJlIHVuc3RhYmxlLiAgSWYgcG9zc2libGUsIHlvdSBzaG91bGQgY29uc2lkZXIKQEAgLTIxMCw5ICsyMTYsOSBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBUaGlzIGRpcmVjdG9yeSBjb250YWlucyBhIE1ha2VmaWxlIHRoYXQgd2lsbCBjcmVhdGUgYSBjb3VwbGUgb2YgcHl0aG9uLXJlbGF0ZWQKLWFwcGxpY2F0aW9ucyAoZnVsbC1ibG93biBPU1ggLmFwcCBhcHBsaWNhdGlvbnMsIHRoYXQgaXMpIGluCithcHBsaWNhdGlvbnMgKGZ1bGwtYmxvd24gT1MgWCAuYXBwIGFwcGxpY2F0aW9ucywgdGhhdCBpcykgaW4KICIvQXBwbGljYXRpb25zL1B5dGhvbiA8VkVSU0lPTj4iLCBhbmQgYSBoaWRkZW4gaGVscGVyIGFwcGxpY2F0aW9uIFB5dGhvbi5hcHAKLWluc2lkZSB0aGUgUHl0aG9uLmZyYW1ld29yaywgYW5kIHVuaXggdG9vbHMgInB5dGhvbiIgYW5kICJweXRob253IiBpbnRvCitpbnNpZGUgdGhlIFB5dGhvbi5mcmFtZXdvcmssIGFuZCB1bml4IHRvb2xzIGluY2x1ZGluZyAicHl0aG9uIiBpbnRvCiAvdXNyL2xvY2FsL2Jpbi4gIEluIGFkZGl0aW9uIGl0IGhhcyBhIHRhcmdldCAiaW5zdGFsbG1hY3N1YnRyZWUiIHRoYXQgaW5zdGFsbHMKIHRoZSByZWxldmFudCBwb3J0aW9ucyBvZiB0aGUgTWFjIHN1YnRyZWUgaW50byB0aGUgUHl0aG9uLmZyYW1ld29yay4KIApAQCAtMjUwLDE4ICsyNTYsMTggQEAKICJJRExFLmFwcCIgaXMgYW4gaW50ZWdyYXRlZCBkZXZlbG9wbWVudCBlbnZpcm9ubWVudCBmb3IgUHl0aG9uOiBlZGl0b3IsCiBkZWJ1Z2dlciwgZXRjLgogCi0iUHl0aG9uTGF1bmNoZXIuYXBwIiBpcyBhIGhlbHBlciBhcHBsaWNhdGlvbiB0aGF0IHdpbGwgaGFuZGxlIHRoaW5ncyB3aGVuIHlvdQorIlB5dGhvbiBMYXVuY2hlci5hcHAiIGlzIGEgaGVscGVyIGFwcGxpY2F0aW9uIHRoYXQgd2lsbCBoYW5kbGUgdGhpbmdzIHdoZW4geW91CiBkb3VibGUtY2xpY2sgYSAucHksIC5weWMgb3IgLnB5dyBmaWxlLiBGb3IgdGhlIGZpcnN0IHR3byBpdCBjcmVhdGVzIGEgVGVybWluYWwKIHdpbmRvdyBhbmQgcnVucyB0aGUgc2NyaXB0cyB3aXRoIHRoZSBub3JtYWwgY29tbWFuZC1saW5lIFB5dGhvbi4gRm9yIHRoZQogbGF0dGVyIGl0IHJ1bnMgdGhlIHNjcmlwdCBpbiB0aGUgUHl0aG9uLmFwcCBpbnRlcnByZXRlciBzbyB0aGUgc2NyaXB0IGNhbiBkbwogR1VJLXRoaW5ncy4gS2VlcCB0aGUgYGBPcHRpb25gYCBrZXkgZGVwcmVzc2VkIHdoaWxlIGRyYWdnaW5nIG9yIGRvdWJsZS1jbGlja2luZwogYSBzY3JpcHQgdG8gc2V0IHJ1bnRpbWUgb3B0aW9ucy4gVGhlc2Ugb3B0aW9ucyBjYW4gYmUgc2V0IHBlcnNpc3RlbnRseQotdGhyb3VnaCBQeXRob25MYXVuY2hlcidzIHByZWZlcmVuY2VzIGRpYWxvZy4KK3Rocm91Z2ggUHl0aG9uIExhdW5jaGVyJ3MgcHJlZmVyZW5jZXMgZGlhbG9nLgogCi1UaGUgcHJvZ3JhbSBgYHB5dGhvbngueGBgIHJ1bnMgcHl0aG9uIHNjcmlwdHMgZnJvbSB0aGUgY29tbWFuZCBsaW5lLiAgVmFyaW91cwotY29tcGF0aWJpbGl0eSBhbGlhc2VzIGFyZSBhbHNvIGluc3RhbGxlZCwgaW5jbHVkaW5nIGBgcHl0aG9ud3gueGBgIHdoaWNoCi1pbiBlYXJseSByZWxlYXNlcyBvZiBQeXRob24gb24gT1MgWCB3YXMgcmVxdWlyZWQgdG8gcnVuIEdVSSBwcm9ncmFtcy4gIEluCi1jdXJyZW50IHJlbGVhc2VzLCB0aGUgYGBweXRob254LnhgYCBhbmQgYGBweXRob253eC54YGAgY29tbWFuZHMgYXJlIGlkZW50aWNhbC4KK1RoZSBwcm9ncmFtIGBgcHl0aG9ueC54YGAgcnVucyBweXRob24gc2NyaXB0cyBmcm9tIHRoZSBjb21tYW5kIGxpbmUuCitQcmV2aW91c2x5LCB2YXJpb3VzIGNvbXBhdGliaWxpdHkgYWxpYXNlcyB3ZXJlIGFsc28gaW5zdGFsbGVkLCBpbmNsdWRpbmcKK2BgcHl0aG9ud3gueGBgIHdoaWNoIGluIGVhcmx5IHJlbGVhc2VzIG9mIFB5dGhvbiBvbiBPUyBYIHdhcyByZXF1aXJlZCB0byBydW4KK0dVSSBwcm9ncmFtcy4gIEFzIG9mIDMuNC4wLCB0aGUgYGBweXRob253eC54YGAgYWxpYXNlcyBhcmUgbm8gbG9uZ2VyIGluc3RhbGxlZC4KIAogSG93IGRvIEkgY3JlYXRlIGEgYmluYXJ5IGRpc3RyaWJ1dGlvbj8KID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0zMDYsNyArMzEyLDcgQEAKICAgIGNvbmZpZ3VyZTogV0FSTklORzogbGliaW50bC5oOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/CiAgICBjb25maWd1cmU6IFdBUk5JTkc6IGxpYmludGwuaDogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uCiAgICBjb25maWd1cmU6IFdBUk5JTkc6IGxpYmludGwuaDogICAgIHNlY3Rpb24gIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZCIKLSAgIGNvbmZpZ3VyZTogV0FSTklORzogbGliaW50bC5oOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCAgIAorICAgY29uZmlndXJlOiBXQVJOSU5HOiBsaWJpbnRsLmg6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0CiAgICBjb25maWd1cmU6IFdBUk5JTkc6IGxpYmludGwuaDogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlCiAgICBjb25maWd1cmU6IFdBUk5JTkc6ICAgICAjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwogICAgY29uZmlndXJlOiBXQVJOSU5HOiAgICAgIyMgUmVwb3J0IHRoaXMgdG8gaHR0cDovL2J1Z3MucHl0aG9uLm9yZy8gIyMKZGlmZiAtLWdpdCBhL01hYy9SZXNvdXJjZXMvYXBwL0luZm8ucGxpc3QuaW4gYi9NYWMvUmVzb3VyY2VzL2FwcC9JbmZvLnBsaXN0LmluCmluZGV4IDkzYjFjNDQuLmNiN2U4ZDcgMTAwNjQ0Ci0tLSBhL01hYy9SZXNvdXJjZXMvYXBwL0luZm8ucGxpc3QuaW4KKysrIGIvTWFjL1Jlc291cmNlcy9hcHAvSW5mby5wbGlzdC5pbgpAQCAtMjAsNyArMjAsNyBAQAogCTxrZXk+Q0ZCdW5kbGVFeGVjdXRhYmxlPC9rZXk+CiAJPHN0cmluZz5QeXRob248L3N0cmluZz4KIAk8a2V5PkNGQnVuZGxlR2V0SW5mb1N0cmluZzwva2V5PgotCTxzdHJpbmc+JXZlcnNpb24lLCAoYykgMjAwNC0yMDE0IFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uLjwvc3RyaW5nPgorCTxzdHJpbmc+JXZlcnNpb24lLCAoYykgMjAwMS0yMDE1IFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uLjwvc3RyaW5nPgogCTxrZXk+Q0ZCdW5kbGVIZWxwQm9va0ZvbGRlcjwva2V5PgogCTxhcnJheT4KIAkJPHN0cmluZz5Eb2N1bWVudGF0aW9uPC9zdHJpbmc+CkBAIC0zNyw3ICszNyw3IEBACiAJPGtleT5DRkJ1bmRsZUluZm9EaWN0aW9uYXJ5VmVyc2lvbjwva2V5PgogCTxzdHJpbmc+Ni4wPC9zdHJpbmc+CiAJPGtleT5DRkJ1bmRsZUxvbmdWZXJzaW9uU3RyaW5nPC9rZXk+Ci0JPHN0cmluZz4ldmVyc2lvbiUsIChjKSAyMDA0LTIwMTQgUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24uPC9zdHJpbmc+CisJPHN0cmluZz4ldmVyc2lvbiUsIChjKSAyMDAxLTIwMTUgUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24uPC9zdHJpbmc+CiAJPGtleT5DRkJ1bmRsZU5hbWU8L2tleT4KIAk8c3RyaW5nPlB5dGhvbjwvc3RyaW5nPgogCTxrZXk+Q0ZCdW5kbGVQYWNrYWdlVHlwZTwva2V5PgpAQCAtNTUsNyArNTUsNyBAQAogCTxrZXk+TlNBcHBsZVNjcmlwdEVuYWJsZWQ8L2tleT4KIAk8dHJ1ZS8+CiAJPGtleT5OU0h1bWFuUmVhZGFibGVDb3B5cmlnaHQ8L2tleT4KLQk8c3RyaW5nPihjKSAyMDE0IFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uLjwvc3RyaW5nPgorCTxzdHJpbmc+KGMpIDIwMDEtMjAxNSBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbi48L3N0cmluZz4KIAk8a2V5Pk5TSGlnaFJlc29sdXRpb25DYXBhYmxlPC9rZXk+CiAJPHRydWUvPgogPC9kaWN0PgpkaWZmIC0tZ2l0IGEvTWFjL1Jlc291cmNlcy9mcmFtZXdvcmsvSW5mby5wbGlzdC5pbiBiL01hYy9SZXNvdXJjZXMvZnJhbWV3b3JrL0luZm8ucGxpc3QuaW4KaW5kZXggNDNhNTc0MC4uYTk3Y2MxZiAxMDA2NDQKLS0tIGEvTWFjL1Jlc291cmNlcy9mcmFtZXdvcmsvSW5mby5wbGlzdC5pbgorKysgYi9NYWMvUmVzb3VyY2VzL2ZyYW1ld29yay9JbmZvLnBsaXN0LmluCkBAIC0xNyw5ICsxNyw5IEBACiAJPGtleT5DRkJ1bmRsZVBhY2thZ2VUeXBlPC9rZXk+CiAJPHN0cmluZz5GTVdLPC9zdHJpbmc+CiAJPGtleT5DRkJ1bmRsZVNob3J0VmVyc2lvblN0cmluZzwva2V5PgotCTxzdHJpbmc+JVZFUlNJT04lLCAoYykgMjAwNC0yMDE0IFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uLjwvc3RyaW5nPgorCTxzdHJpbmc+JVZFUlNJT04lLCAoYykgMjAwMS0yMDE1IFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uLjwvc3RyaW5nPgogCTxrZXk+Q0ZCdW5kbGVMb25nVmVyc2lvblN0cmluZzwva2V5PgotCTxzdHJpbmc+JVZFUlNJT04lLCAoYykgMjAwNC0yMDE0IFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uLjwvc3RyaW5nPgorCTxzdHJpbmc+JVZFUlNJT04lLCAoYykgMjAwMS0yMDE1IFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uLjwvc3RyaW5nPgogCTxrZXk+Q0ZCdW5kbGVTaWduYXR1cmU8L2tleT4KIAk8c3RyaW5nPj8/Pz88L3N0cmluZz4KIAk8a2V5PkNGQnVuZGxlVmVyc2lvbjwva2V5PgpkaWZmIC0tZ2l0IGEvTWFjL1Rvb2xzL0RvYy9IZWxwSW5kZXhpbmdUb29sL0hlbHBfSW5kZXhpbmdfVG9vbF9TdWl0ZS5weSBiL01hYy9Ub29scy9Eb2MvSGVscEluZGV4aW5nVG9vbC9IZWxwX0luZGV4aW5nX1Rvb2xfU3VpdGUucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliM2FjZTQuLjAwMDAwMDAKLS0tIGEvTWFjL1Rvb2xzL0RvYy9IZWxwSW5kZXhpbmdUb29sL0hlbHBfSW5kZXhpbmdfVG9vbF9TdWl0ZS5weQorKysgL2Rldi9udWxsCkBAIC0xLDExMCArMCwwIEBACi0iIiJTdWl0ZSBIZWxwIEluZGV4aW5nIFRvb2wgU3VpdGU6IFNwZWNpYWwgZXZlbnRzIHRoYXQganVzdCB0aGUgSGVscCBJbmRleGluZyBUb29sIHN1cHBvcnRzLgotTGV2ZWwgMCwgdmVyc2lvbiAwCi0KLUdlbmVyYXRlZCBmcm9tIC9EZXZlbG9wZXIvQXBwbGljYXRpb25zL0FwcGxlIEhlbHAgSW5kZXhpbmcgVG9vbC5hcHAKLUFFVEUvQUVVVCByZXNvdXJjZSB2ZXJzaW9uIDEvMSwgbGFuZ3VhZ2UgMCwgc2NyaXB0IDAKLSIiIgotCi1pbXBvcnQgYWV0b29scwotaW1wb3J0IE1hY09TCi0KLV9jb2RlID0gJ0hJVCAnCi0KLWNsYXNzIEhlbHBfSW5kZXhpbmdfVG9vbF9TdWl0ZV9FdmVudHM6Ci0KLSAgICBkZWYgdHVybl9hbmNob3JfaW5kZXhpbmcoc2VsZiwgX29iamVjdCwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6Ci0gICAgICAgICIiInR1cm4gYW5jaG9yIGluZGV4aW5nOiBUdXJucyBhbmNob3IgaW5kZXhpbmcgb24gb3Igb2ZmLgotICAgICAgICBSZXF1aXJlZCBhcmd1bWVudDogXHhkMm9uXHhkMyBvciBceGQyb2ZmXHhkMywgdG8gdHVybiBhbmNob3IgaW5kZXhpbmcgb24gb3Igb2ZmCi0gICAgICAgIEtleXdvcmQgYXJndW1lbnQgX2F0dHJpYnV0ZXM6IEFwcGxlRXZlbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkKLSAgICAgICAgIiIiCi0gICAgICAgIF9jb2RlID0gJ0hJVCAnCi0gICAgICAgIF9zdWJjb2RlID0gJ3RBbmMnCi0KLSAgICAgICAgaWYgX2FyZ3VtZW50czogcmFpc2UgVHlwZUVycm9yKCdObyBvcHRpb25hbCBhcmdzIGV4cGVjdGVkJykKLSAgICAgICAgX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAotCi0KLSAgICAgICAgX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCi0gICAgICAgICAgICAgICAgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCi0gICAgICAgIGlmIF9hcmd1bWVudHMuZ2V0KCdlcnJuJywgMCk6Ci0gICAgICAgICAgICByYWlzZSBhZXRvb2xzLkVycm9yKGFldG9vbHMuZGVjb2RlZXJyb3IoX2FyZ3VtZW50cykpCi0gICAgICAgICMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKLSAgICAgICAgaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCctLS0tJyk6Ci0gICAgICAgICAgICByZXR1cm4gX2FyZ3VtZW50c1snLS0tLSddCi0KLSAgICBfYXJnbWFwX3R1cm5fcmVtb3RlX3Jvb3QgPSB7Ci0gICAgICAgICd3aXRoX3Jvb3RfdXJsJyA6ICdyVVJMJywKLSAgICB9Ci0KLSAgICBkZWYgdHVybl9yZW1vdGVfcm9vdChzZWxmLCBfb2JqZWN0LCBfYXR0cmlidXRlcz17fSwgKipfYXJndW1lbnRzKToKLSAgICAgICAgIiIidHVybiByZW1vdGUgcm9vdDogVHVybiB1c2FnZSBvZiByZW1vdGUgcm9vdCBmb3IgY29udGVudCBvbiB0aGUgd2ViIG9uIG9yIG9mZi4gSWYgdHVybmluZyBceGQyb25ceGQzLCBzdXBwbHkgYSBzdHJpbmcgYXMgc2Vjb25kIHBhcmFtZXRlci4KLSAgICAgICAgUmVxdWlyZWQgYXJndW1lbnQ6IFx4ZDJvblx4ZDMgb3IgXHhkMm9mZlx4ZDMsIHRvIHR1cm4gcmVtb3RlIHJvb3Qgb24gb3Igb2ZmCi0gICAgICAgIEtleXdvcmQgYXJndW1lbnQgd2l0aF9yb290X3VybDogVGhlIHJlbW90ZSByb290IHRvIHVzZSwgaW4gdGhlIGZvcm0gb2YgXHhkMmh0dHA6Ly93d3cuYXBwbGUuY29tL2hlbHAvXHhkMy4KLSAgICAgICAgS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQotICAgICAgICAiIiIKLSAgICAgICAgX2NvZGUgPSAnSElUICcKLSAgICAgICAgX3N1YmNvZGUgPSAndFJlbScKLQotICAgICAgICBhZXRvb2xzLmtleXN1YnN0KF9hcmd1bWVudHMsIHNlbGYuX2FyZ21hcF90dXJuX3JlbW90ZV9yb290KQotICAgICAgICBfYXJndW1lbnRzWyctLS0tJ10gPSBfb2JqZWN0Ci0KLQotICAgICAgICBfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKLSAgICAgICAgICAgICAgICBfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKLSAgICAgICAgaWYgX2FyZ3VtZW50cy5nZXQoJ2Vycm4nLCAwKToKLSAgICAgICAgICAgIHJhaXNlIGFldG9vbHMuRXJyb3IoYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKSkKLSAgICAgICAgIyBYWFhYIE9wdGlvbmFsbHkgZGVjb2RlIHJlc3VsdAotICAgICAgICBpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKLSAgICAgICAgICAgIHJldHVybiBfYXJndW1lbnRzWyctLS0tJ10KLQotICAgIGRlZiB1c2VfdG9rZW5pemVyKHNlbGYsIF9vYmplY3QsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgotICAgICAgICAiIiJ1c2UgdG9rZW5pemVyOiBUZWxscyB0aGUgaW5kZXhpbmcgdG9vbCB3aGljaCB0b2tlbml6ZXIgdG8gdXNlLgotICAgICAgICBSZXF1aXJlZCBhcmd1bWVudDogU3BlY2lmeSBceGQyRW5nbGlzaFx4ZDMsIFx4ZDJFdXJvcGVhblx4ZDMsIFx4ZDJKYXBhbmVzZVx4ZDMsIFx4ZDJLb3JlYW5ceGQzLCBvciBceGQyU2ltcGxlXHhkMy4KLSAgICAgICAgS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQotICAgICAgICAiIiIKLSAgICAgICAgX2NvZGUgPSAnSElUICcKLSAgICAgICAgX3N1YmNvZGUgPSAndVRvaycKLQotICAgICAgICBpZiBfYXJndW1lbnRzOiByYWlzZSBUeXBlRXJyb3IoJ05vIG9wdGlvbmFsIGFyZ3MgZXhwZWN0ZWQnKQotICAgICAgICBfYXJndW1lbnRzWyctLS0tJ10gPSBfb2JqZWN0Ci0KLQotICAgICAgICBfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKLSAgICAgICAgICAgICAgICBfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKLSAgICAgICAgaWYgX2FyZ3VtZW50cy5nZXQoJ2Vycm4nLCAwKToKLSAgICAgICAgICAgIHJhaXNlIGFldG9vbHMuRXJyb3IoYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKSkKLSAgICAgICAgIyBYWFhYIE9wdGlvbmFsbHkgZGVjb2RlIHJlc3VsdAotICAgICAgICBpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKLSAgICAgICAgICAgIHJldHVybiBfYXJndW1lbnRzWyctLS0tJ10KLQotCi1jbGFzcyBhcHBsaWNhdGlvbihhZXRvb2xzLkNvbXBvbmVudEl0ZW0pOgotICAgICIiImFwcGxpY2F0aW9uIC0gQXBwbGljYXRpb24gY2xhc3MgIiIiCi0gICAgd2FudCA9ICdjYXBwJwotY2xhc3MgX1Byb3BfaWRsZVN0YXR1cyhhZXRvb2xzLk5Qcm9wZXJ0eSk6Ci0gICAgIiIiaWRsZVN0YXR1cyAtICAiIiIKLSAgICB3aGljaCA9ICdzSWRsJwotICAgIHdhbnQgPSAnYm9vbCcKLWFwcGxpY2F0aW9uLl9zdXBlcmNsYXNzbmFtZXMgPSBbXQotYXBwbGljYXRpb24uX3ByaXZwcm9wZGljdCA9IHsKLSAgICAnaWRsZVN0YXR1cycgOiBfUHJvcF9pZGxlU3RhdHVzLAotfQotYXBwbGljYXRpb24uX3ByaXZlbGVtZGljdCA9IHsKLX0KLQotIwotIyBJbmRpY2VzIG9mIHR5cGVzIGRlY2xhcmVkIGluIHRoaXMgbW9kdWxlCi0jCi1fY2xhc3NkZWNsYXJhdGlvbnMgPSB7Ci0gICAgJ2NhcHAnIDogYXBwbGljYXRpb24sCi19Ci0KLV9wcm9wZGVjbGFyYXRpb25zID0gewotICAgICdzSWRsJyA6IF9Qcm9wX2lkbGVTdGF0dXMsCi19Ci0KLV9jb21wZGVjbGFyYXRpb25zID0gewotfQotCi1fZW51bWRlY2xhcmF0aW9ucyA9IHsKLX0KZGlmZiAtLWdpdCBhL01hYy9Ub29scy9Eb2MvSGVscEluZGV4aW5nVG9vbC9NaXNjZWxsYW5lb3VzX1N0YW5kYXJkcy5weSBiL01hYy9Ub29scy9Eb2MvSGVscEluZGV4aW5nVG9vbC9NaXNjZWxsYW5lb3VzX1N0YW5kYXJkcy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjE2YWU3MC4uMDAwMDAwMAotLS0gYS9NYWMvVG9vbHMvRG9jL0hlbHBJbmRleGluZ1Rvb2wvTWlzY2VsbGFuZW91c19TdGFuZGFyZHMucHkKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi0iIiJTdWl0ZSBNaXNjZWxsYW5lb3VzIFN0YW5kYXJkczogVXNlZnVsIGV2ZW50cyB0aGF0IGFyZW5ceGQ1dCBpbiBhbnkgb3RoZXIgc3VpdGUKLUxldmVsIDAsIHZlcnNpb24gMAotCi1HZW5lcmF0ZWQgZnJvbSAvRGV2ZWxvcGVyL0FwcGxpY2F0aW9ucy9BcHBsZSBIZWxwIEluZGV4aW5nIFRvb2wuYXBwCi1BRVRFL0FFVVQgcmVzb3VyY2UgdmVyc2lvbiAxLzEsIGxhbmd1YWdlIDAsIHNjcmlwdCAwCi0iIiIKLQotaW1wb3J0IGFldG9vbHMKLWltcG9ydCBNYWNPUwotCi1fY29kZSA9ICdtaXNjJwotCi1jbGFzcyBNaXNjZWxsYW5lb3VzX1N0YW5kYXJkc19FdmVudHM6Ci0KLSAgICBkZWYgcmV2ZXJ0KHNlbGYsIF9vYmplY3QsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgotICAgICAgICAiIiJyZXZlcnQ6IFJldmVydCBhbiBvYmplY3QgdG8gdGhlIG1vc3QgcmVjZW50bHkgc2F2ZWQgdmVyc2lvbgotICAgICAgICBSZXF1aXJlZCBhcmd1bWVudDogb2JqZWN0IHRvIHJldmVydAotICAgICAgICBLZXl3b3JkIGFyZ3VtZW50IF9hdHRyaWJ1dGVzOiBBcHBsZUV2ZW50IGF0dHJpYnV0ZSBkaWN0aW9uYXJ5Ci0gICAgICAgICIiIgotICAgICAgICBfY29kZSA9ICdtaXNjJwotICAgICAgICBfc3ViY29kZSA9ICdydnJ0JwotCi0gICAgICAgIGlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvcignTm8gb3B0aW9uYWwgYXJncyBleHBlY3RlZCcpCi0gICAgICAgIF9hcmd1bWVudHNbJy0tLS0nXSA9IF9vYmplY3QKLQotCi0gICAgICAgIF9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAotICAgICAgICAgICAgICAgIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQotICAgICAgICBpZiBfYXJndW1lbnRzLmdldCgnZXJybicsIDApOgotICAgICAgICAgICAgcmFpc2UgYWV0b29scy5FcnJvcihhZXRvb2xzLmRlY29kZWVycm9yKF9hcmd1bWVudHMpKQotICAgICAgICAjIFhYWFggT3B0aW9uYWxseSBkZWNvZGUgcmVzdWx0Ci0gICAgICAgIGlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgotICAgICAgICAgICAgcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQotCi0KLSMKLSMgSW5kaWNlcyBvZiB0eXBlcyBkZWNsYXJlZCBpbiB0aGlzIG1vZHVsZQotIwotX2NsYXNzZGVjbGFyYXRpb25zID0gewotfQotCi1fcHJvcGRlY2xhcmF0aW9ucyA9IHsKLX0KLQotX2NvbXBkZWNsYXJhdGlvbnMgPSB7Ci19Ci0KLV9lbnVtZGVjbGFyYXRpb25zID0gewotfQpkaWZmIC0tZ2l0IGEvTWFjL1Rvb2xzL0RvYy9IZWxwSW5kZXhpbmdUb29sL1JlcXVpcmVkX1N1aXRlLnB5IGIvTWFjL1Rvb2xzL0RvYy9IZWxwSW5kZXhpbmdUb29sL1JlcXVpcmVkX1N1aXRlLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYjlmZWUwLi4wMDAwMDAwCi0tLSBhL01hYy9Ub29scy9Eb2MvSGVscEluZGV4aW5nVG9vbC9SZXF1aXJlZF9TdWl0ZS5weQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLSIiIlN1aXRlIFJlcXVpcmVkIFN1aXRlOiBUZXJtcyB0aGF0IGV2ZXJ5IGFwcGxpY2F0aW9uIHNob3VsZCBzdXBwb3J0Ci1MZXZlbCAxLCB2ZXJzaW9uIDEKLQotR2VuZXJhdGVkIGZyb20gL0RldmVsb3Blci9BcHBsaWNhdGlvbnMvQXBwbGUgSGVscCBJbmRleGluZyBUb29sLmFwcAotQUVURS9BRVVUIHJlc291cmNlIHZlcnNpb24gMS8xLCBsYW5ndWFnZSAwLCBzY3JpcHQgMAotIiIiCi0KLWltcG9ydCBhZXRvb2xzCi1pbXBvcnQgTWFjT1MKLQotX2NvZGUgPSAncmVxZCcKLQotZnJvbSBTdGRTdWl0ZXMuUmVxdWlyZWRfU3VpdGUgaW1wb3J0ICoKLWNsYXNzIFJlcXVpcmVkX1N1aXRlX0V2ZW50cyhSZXF1aXJlZF9TdWl0ZV9FdmVudHMpOgotCi0gICAgcGFzcwotCi0KLSMKLSMgSW5kaWNlcyBvZiB0eXBlcyBkZWNsYXJlZCBpbiB0aGlzIG1vZHVsZQotIwotX2NsYXNzZGVjbGFyYXRpb25zID0gewotfQotCi1fcHJvcGRlY2xhcmF0aW9ucyA9IHsKLX0KLQotX2NvbXBkZWNsYXJhdGlvbnMgPSB7Ci19Ci0KLV9lbnVtZGVjbGFyYXRpb25zID0gewotfQpkaWZmIC0tZ2l0IGEvTWFjL1Rvb2xzL0RvYy9IZWxwSW5kZXhpbmdUb29sL1N0YW5kYXJkX1N1aXRlLnB5IGIvTWFjL1Rvb2xzL0RvYy9IZWxwSW5kZXhpbmdUb29sL1N0YW5kYXJkX1N1aXRlLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZjBiNjNhLi4wMDAwMDAwCi0tLSBhL01hYy9Ub29scy9Eb2MvSGVscEluZGV4aW5nVG9vbC9TdGFuZGFyZF9TdWl0ZS5weQorKysgL2Rldi9udWxsCkBAIC0xLDM0MyArMCwwIEBACi0iIiJTdWl0ZSBTdGFuZGFyZCBTdWl0ZTogQ29tbW9uIHRlcm1zIGZvciBtb3N0IGFwcGxpY2F0aW9ucwotTGV2ZWwgMSwgdmVyc2lvbiAxCi0KLUdlbmVyYXRlZCBmcm9tIC9EZXZlbG9wZXIvQXBwbGljYXRpb25zL0FwcGxlIEhlbHAgSW5kZXhpbmcgVG9vbC5hcHAKLUFFVEUvQUVVVCByZXNvdXJjZSB2ZXJzaW9uIDEvMSwgbGFuZ3VhZ2UgMCwgc2NyaXB0IDAKLSIiIgotCi1pbXBvcnQgYWV0b29scwotaW1wb3J0IE1hY09TCi0KLV9jb2RlID0gJ0NvUmUnCi0KLWZyb20gU3RkU3VpdGVzLlN0YW5kYXJkX1N1aXRlIGltcG9ydCAqCi1jbGFzcyBTdGFuZGFyZF9TdWl0ZV9FdmVudHMoU3RhbmRhcmRfU3VpdGVfRXZlbnRzKToKLQotICAgIF9hcmdtYXBfY2xvc2UgPSB7Ci0gICAgICAgICdzYXZpbmcnIDogJ3Nhdm8nLAotICAgICAgICAnaW5fJyA6ICdrZmlsJywKLSAgICB9Ci0KLSAgICBkZWYgY2xvc2Uoc2VsZiwgX29iamVjdCwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6Ci0gICAgICAgICIiImNsb3NlOiBDbG9zZSBhbiBvYmplY3QKLSAgICAgICAgUmVxdWlyZWQgYXJndW1lbnQ6IHRoZSBvYmplY3RzIHRvIGNsb3NlCi0gICAgICAgIEtleXdvcmQgYXJndW1lbnQgc2F2aW5nOiBzcGVjaWZpZXMgd2hldGhlciBvciBub3QgY2hhbmdlcyBzaG91bGQgYmUgc2F2ZWQgYmVmb3JlIGNsb3NpbmcKLSAgICAgICAgS2V5d29yZCBhcmd1bWVudCBpbl86IHRoZSBmaWxlIGluIHdoaWNoIHRvIHNhdmUgdGhlIG9iamVjdAotICAgICAgICBLZXl3b3JkIGFyZ3VtZW50IF9hdHRyaWJ1dGVzOiBBcHBsZUV2ZW50IGF0dHJpYnV0ZSBkaWN0aW9uYXJ5Ci0gICAgICAgICIiIgotICAgICAgICBfY29kZSA9ICdjb3JlJwotICAgICAgICBfc3ViY29kZSA9ICdjbG9zJwotCi0gICAgICAgIGFldG9vbHMua2V5c3Vic3QoX2FyZ3VtZW50cywgc2VsZi5fYXJnbWFwX2Nsb3NlKQotICAgICAgICBfYXJndW1lbnRzWyctLS0tJ10gPSBfb2JqZWN0Ci0KLSAgICAgICAgYWV0b29scy5lbnVtc3Vic3QoX2FyZ3VtZW50cywgJ3Nhdm8nLCBfRW51bV9zYXZvKQotCi0gICAgICAgIF9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAotICAgICAgICAgICAgICAgIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQotICAgICAgICBpZiBfYXJndW1lbnRzLmdldCgnZXJybicsIDApOgotICAgICAgICAgICAgcmFpc2UgYWV0b29scy5FcnJvcihhZXRvb2xzLmRlY29kZWVycm9yKF9hcmd1bWVudHMpKQotICAgICAgICAjIFhYWFggT3B0aW9uYWxseSBkZWNvZGUgcmVzdWx0Ci0gICAgICAgIGlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgotICAgICAgICAgICAgcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQotCi0gICAgZGVmIGRhdGFfc2l6ZShzZWxmLCBfb2JqZWN0LCBfYXR0cmlidXRlcz17fSwgKipfYXJndW1lbnRzKToKLSAgICAgICAgIiIiZGF0YSBzaXplOiBSZXR1cm4gdGhlIHNpemUgaW4gYnl0ZXMgb2YgYW4gb2JqZWN0Ci0gICAgICAgIFJlcXVpcmVkIGFyZ3VtZW50OiB0aGUgb2JqZWN0IHdob3NlIGRhdGEgc2l6ZSBpcyB0byBiZSByZXR1cm5lZAotICAgICAgICBLZXl3b3JkIGFyZ3VtZW50IF9hdHRyaWJ1dGVzOiBBcHBsZUV2ZW50IGF0dHJpYnV0ZSBkaWN0aW9uYXJ5Ci0gICAgICAgIFJldHVybnM6IHRoZSBzaXplIG9mIHRoZSBvYmplY3QgaW4gYnl0ZXMKLSAgICAgICAgIiIiCi0gICAgICAgIF9jb2RlID0gJ2NvcmUnCi0gICAgICAgIF9zdWJjb2RlID0gJ2RzaXonCi0KLSAgICAgICAgaWYgX2FyZ3VtZW50czogcmFpc2UgVHlwZUVycm9yKCdObyBvcHRpb25hbCBhcmdzIGV4cGVjdGVkJykKLSAgICAgICAgX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAotCi0KLSAgICAgICAgX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCi0gICAgICAgICAgICAgICAgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCi0gICAgICAgIGlmIF9hcmd1bWVudHMuZ2V0KCdlcnJuJywgMCk6Ci0gICAgICAgICAgICByYWlzZSBhZXRvb2xzLkVycm9yKGFldG9vbHMuZGVjb2RlZXJyb3IoX2FyZ3VtZW50cykpCi0gICAgICAgICMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKLSAgICAgICAgaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCctLS0tJyk6Ci0gICAgICAgICAgICByZXR1cm4gX2FyZ3VtZW50c1snLS0tLSddCi0KLSAgICBkZWYgZ2V0KHNlbGYsIF9vYmplY3QsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgotICAgICAgICAiIiJnZXQ6IEdldCB0aGUgZGF0YSBmb3IgYW4gb2JqZWN0Ci0gICAgICAgIFJlcXVpcmVkIGFyZ3VtZW50OiB0aGUgb2JqZWN0IHdob3NlIGRhdGEgaXMgdG8gYmUgcmV0dXJuZWQKLSAgICAgICAgS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQotICAgICAgICBSZXR1cm5zOiBUaGUgZGF0YSBmcm9tIHRoZSBvYmplY3QKLSAgICAgICAgIiIiCi0gICAgICAgIF9jb2RlID0gJ2NvcmUnCi0gICAgICAgIF9zdWJjb2RlID0gJ2dldGQnCi0KLSAgICAgICAgaWYgX2FyZ3VtZW50czogcmFpc2UgVHlwZUVycm9yKCdObyBvcHRpb25hbCBhcmdzIGV4cGVjdGVkJykKLSAgICAgICAgX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAotCi0KLSAgICAgICAgX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCi0gICAgICAgICAgICAgICAgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCi0gICAgICAgIGlmIF9hcmd1bWVudHMuZ2V0KCdlcnJuJywgMCk6Ci0gICAgICAgICAgICByYWlzZSBhZXRvb2xzLkVycm9yKGFldG9vbHMuZGVjb2RlZXJyb3IoX2FyZ3VtZW50cykpCi0gICAgICAgICMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKLSAgICAgICAgaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCctLS0tJyk6Ci0gICAgICAgICAgICByZXR1cm4gX2FyZ3VtZW50c1snLS0tLSddCi0KLSAgICBfYXJnbWFwX21ha2UgPSB7Ci0gICAgICAgICduZXcnIDogJ2tvY2wnLAotICAgICAgICAnYXQnIDogJ2luc2gnLAotICAgICAgICAnd2l0aF9kYXRhJyA6ICdkYXRhJywKLSAgICAgICAgJ3dpdGhfcHJvcGVydGllcycgOiAncHJkdCcsCi0gICAgfQotCi0gICAgZGVmIG1ha2Uoc2VsZiwgX25vX29iamVjdD1Ob25lLCBfYXR0cmlidXRlcz17fSwgKipfYXJndW1lbnRzKToKLSAgICAgICAgIiIibWFrZTogTWFrZSBhIG5ldyBlbGVtZW50Ci0gICAgICAgIEtleXdvcmQgYXJndW1lbnQgbmV3OiB0aGUgY2xhc3Mgb2YgdGhlIG5ldyBlbGVtZW50Ci0gICAgICAgIEtleXdvcmQgYXJndW1lbnQgYXQ6IHRoZSBsb2NhdGlvbiBhdCB3aGljaCB0byBpbnNlcnQgdGhlIGVsZW1lbnQKLSAgICAgICAgS2V5d29yZCBhcmd1bWVudCB3aXRoX2RhdGE6IHRoZSBpbml0aWFsIGRhdGEgZm9yIHRoZSBlbGVtZW50Ci0gICAgICAgIEtleXdvcmQgYXJndW1lbnQgd2l0aF9wcm9wZXJ0aWVzOiB0aGUgaW5pdGlhbCB2YWx1ZXMgZm9yIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBlbGVtZW50Ci0gICAgICAgIEtleXdvcmQgYXJndW1lbnQgX2F0dHJpYnV0ZXM6IEFwcGxlRXZlbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkKLSAgICAgICAgUmV0dXJuczogT2JqZWN0IHNwZWNpZmllciBmb3IgdGhlIG5ldyBlbGVtZW50Ci0gICAgICAgICIiIgotICAgICAgICBfY29kZSA9ICdjb3JlJwotICAgICAgICBfc3ViY29kZSA9ICdjcmVsJwotCi0gICAgICAgIGFldG9vbHMua2V5c3Vic3QoX2FyZ3VtZW50cywgc2VsZi5fYXJnbWFwX21ha2UpCi0gICAgICAgIGlmIF9ub19vYmplY3QgaXMgbm90IE5vbmU6IHJhaXNlIFR5cGVFcnJvcignTm8gZGlyZWN0IGFyZyBleHBlY3RlZCcpCi0KLQotICAgICAgICBfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKLSAgICAgICAgICAgICAgICBfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKLSAgICAgICAgaWYgX2FyZ3VtZW50cy5nZXQoJ2Vycm4nLCAwKToKLSAgICAgICAgICAgIHJhaXNlIGFldG9vbHMuRXJyb3IoYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKSkKLSAgICAgICAgIyBYWFhYIE9wdGlvbmFsbHkgZGVjb2RlIHJlc3VsdAotICAgICAgICBpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKLSAgICAgICAgICAgIHJldHVybiBfYXJndW1lbnRzWyctLS0tJ10KLQotICAgIGRlZiBvcGVuKHNlbGYsIF9vYmplY3QsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgotICAgICAgICAiIiJvcGVuOiBPcGVuIHRoZSBzcGVjaWZpZWQgb2JqZWN0KHMpCi0gICAgICAgIFJlcXVpcmVkIGFyZ3VtZW50OiBPYmplY3RzIHRvIG9wZW4uIENhbiBiZSBhIGxpc3Qgb2YgZmlsZXMgb3IgYW4gb2JqZWN0IHNwZWNpZmllci4KLSAgICAgICAgS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQotICAgICAgICAiIiIKLSAgICAgICAgX2NvZGUgPSAnYWV2dCcKLSAgICAgICAgX3N1YmNvZGUgPSAnb2RvYycKLQotICAgICAgICBpZiBfYXJndW1lbnRzOiByYWlzZSBUeXBlRXJyb3IoJ05vIG9wdGlvbmFsIGFyZ3MgZXhwZWN0ZWQnKQotICAgICAgICBfYXJndW1lbnRzWyctLS0tJ10gPSBfb2JqZWN0Ci0KLQotICAgICAgICBfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKLSAgICAgICAgICAgICAgICBfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKLSAgICAgICAgaWYgX2FyZ3VtZW50cy5nZXQoJ2Vycm4nLCAwKToKLSAgICAgICAgICAgIHJhaXNlIGFldG9vbHMuRXJyb3IoYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKSkKLSAgICAgICAgIyBYWFhYIE9wdGlvbmFsbHkgZGVjb2RlIHJlc3VsdAotICAgICAgICBpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKLSAgICAgICAgICAgIHJldHVybiBfYXJndW1lbnRzWyctLS0tJ10KLQotICAgIGRlZiBwcmludF8oc2VsZiwgX29iamVjdCwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6Ci0gICAgICAgICIiInByaW50OiBQcmludCB0aGUgc3BlY2lmaWVkIG9iamVjdChzKQotICAgICAgICBSZXF1aXJlZCBhcmd1bWVudDogT2JqZWN0cyB0byBwcmludC4gQ2FuIGJlIGEgbGlzdCBvZiBmaWxlcyBvciBhbiBvYmplY3Qgc3BlY2lmaWVyLgotICAgICAgICBLZXl3b3JkIGFyZ3VtZW50IF9hdHRyaWJ1dGVzOiBBcHBsZUV2ZW50IGF0dHJpYnV0ZSBkaWN0aW9uYXJ5Ci0gICAgICAgICIiIgotICAgICAgICBfY29kZSA9ICdhZXZ0JwotICAgICAgICBfc3ViY29kZSA9ICdwZG9jJwotCi0gICAgICAgIGlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvcignTm8gb3B0aW9uYWwgYXJncyBleHBlY3RlZCcpCi0gICAgICAgIF9hcmd1bWVudHNbJy0tLS0nXSA9IF9vYmplY3QKLQotCi0gICAgICAgIF9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAotICAgICAgICAgICAgICAgIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQotICAgICAgICBpZiBfYXJndW1lbnRzLmdldCgnZXJybicsIDApOgotICAgICAgICAgICAgcmFpc2UgYWV0b29scy5FcnJvcihhZXRvb2xzLmRlY29kZWVycm9yKF9hcmd1bWVudHMpKQotICAgICAgICAjIFhYWFggT3B0aW9uYWxseSBkZWNvZGUgcmVzdWx0Ci0gICAgICAgIGlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgotICAgICAgICAgICAgcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQotCi0gICAgX2FyZ21hcF9zYXZlID0gewotICAgICAgICAnaW5fJyA6ICdrZmlsJywKLSAgICAgICAgJ2FzJyA6ICdmbHRwJywKLSAgICB9Ci0KLSAgICBkZWYgc2F2ZShzZWxmLCBfb2JqZWN0LCBfYXR0cmlidXRlcz17fSwgKipfYXJndW1lbnRzKToKLSAgICAgICAgIiIic2F2ZTogc2F2ZSBhIHNldCBvZiBvYmplY3RzCi0gICAgICAgIFJlcXVpcmVkIGFyZ3VtZW50OiBPYmplY3RzIHRvIHNhdmUuCi0gICAgICAgIEtleXdvcmQgYXJndW1lbnQgaW5fOiB0aGUgZmlsZSBpbiB3aGljaCB0byBzYXZlIHRoZSBvYmplY3QocykKLSAgICAgICAgS2V5d29yZCBhcmd1bWVudCBhczogdGhlIGZpbGUgdHlwZSBvZiB0aGUgZG9jdW1lbnQgaW4gd2hpY2ggdG8gc2F2ZSB0aGUgZGF0YQotICAgICAgICBLZXl3b3JkIGFyZ3VtZW50IF9hdHRyaWJ1dGVzOiBBcHBsZUV2ZW50IGF0dHJpYnV0ZSBkaWN0aW9uYXJ5Ci0gICAgICAgICIiIgotICAgICAgICBfY29kZSA9ICdjb3JlJwotICAgICAgICBfc3ViY29kZSA9ICdzYXZlJwotCi0gICAgICAgIGFldG9vbHMua2V5c3Vic3QoX2FyZ3VtZW50cywgc2VsZi5fYXJnbWFwX3NhdmUpCi0gICAgICAgIF9hcmd1bWVudHNbJy0tLS0nXSA9IF9vYmplY3QKLQotCi0gICAgICAgIF9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAotICAgICAgICAgICAgICAgIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQotICAgICAgICBpZiBfYXJndW1lbnRzLmdldCgnZXJybicsIDApOgotICAgICAgICAgICAgcmFpc2UgYWV0b29scy5FcnJvcihhZXRvb2xzLmRlY29kZWVycm9yKF9hcmd1bWVudHMpKQotICAgICAgICAjIFhYWFggT3B0aW9uYWxseSBkZWNvZGUgcmVzdWx0Ci0gICAgICAgIGlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgotICAgICAgICAgICAgcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQotCi0gICAgX2FyZ21hcF9zZXQgPSB7Ci0gICAgICAgICd0bycgOiAnZGF0YScsCi0gICAgfQotCi0gICAgZGVmIHNldChzZWxmLCBfb2JqZWN0LCBfYXR0cmlidXRlcz17fSwgKipfYXJndW1lbnRzKToKLSAgICAgICAgIiIic2V0OiBTZXQgYW4gb2JqZWN0XHhkNXMgZGF0YQotICAgICAgICBSZXF1aXJlZCBhcmd1bWVudDogdGhlIG9iamVjdCB0byBjaGFuZ2UKLSAgICAgICAgS2V5d29yZCBhcmd1bWVudCB0bzogdGhlIG5ldyB2YWx1ZQotICAgICAgICBLZXl3b3JkIGFyZ3VtZW50IF9hdHRyaWJ1dGVzOiBBcHBsZUV2ZW50IGF0dHJpYnV0ZSBkaWN0aW9uYXJ5Ci0gICAgICAgICIiIgotICAgICAgICBfY29kZSA9ICdjb3JlJwotICAgICAgICBfc3ViY29kZSA9ICdzZXRkJwotCi0gICAgICAgIGFldG9vbHMua2V5c3Vic3QoX2FyZ3VtZW50cywgc2VsZi5fYXJnbWFwX3NldCkKLSAgICAgICAgX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAotCi0KLSAgICAgICAgX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCi0gICAgICAgICAgICAgICAgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCi0gICAgICAgIGlmIF9hcmd1bWVudHMuZ2V0KCdlcnJuJywgMCk6Ci0gICAgICAgICAgICByYWlzZSBhZXRvb2xzLkVycm9yKGFldG9vbHMuZGVjb2RlZXJyb3IoX2FyZ3VtZW50cykpCi0gICAgICAgICMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKLSAgICAgICAgaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCctLS0tJyk6Ci0gICAgICAgICAgICByZXR1cm4gX2FyZ3VtZW50c1snLS0tLSddCi0KLQotY2xhc3MgYXBwbGljYXRpb24oYWV0b29scy5Db21wb25lbnRJdGVtKToKLSAgICAiIiJhcHBsaWNhdGlvbiAtIEFuIGFwcGxpY2F0aW9uIHByb2dyYW0gIiIiCi0gICAgd2FudCA9ICdjYXBwJwotIyAgICAgICAgZWxlbWVudCAnY3dpbicgYXMgWydpbmR4JywgJ25hbWUnLCAncmVsZSddCi0jICAgICAgICBlbGVtZW50ICdkb2N1JyBhcyBbJ25hbWUnXQotCi1jbGFzcyB3aW5kb3coYWV0b29scy5Db21wb25lbnRJdGVtKToKLSAgICAiIiJ3aW5kb3cgLSBBIFdpbmRvdyAiIiIKLSAgICB3YW50ID0gJ2N3aW4nCi1jbGFzcyBfUHJvcF9ib3VuZHMoYWV0b29scy5OUHJvcGVydHkpOgotICAgICIiImJvdW5kcyAtIHRoZSBib3VuZGFyeSByZWN0YW5nbGUgZm9yIHRoZSB3aW5kb3cgIiIiCi0gICAgd2hpY2ggPSAncGJuZCcKLSAgICB3YW50ID0gJ3FkcnQnCi1jbGFzcyBfUHJvcF9jbG9zZWFibGUoYWV0b29scy5OUHJvcGVydHkpOgotICAgICIiImNsb3NlYWJsZSAtIERvZXMgdGhlIHdpbmRvdyBoYXZlIGEgY2xvc2UgYm94PyAiIiIKLSAgICB3aGljaCA9ICdoY2xiJwotICAgIHdhbnQgPSAnYm9vbCcKLWNsYXNzIF9Qcm9wX2Zsb2F0aW5nKGFldG9vbHMuTlByb3BlcnR5KToKLSAgICAiIiJmbG9hdGluZyAtIERvZXMgdGhlIHdpbmRvdyBmbG9hdD8gIiIiCi0gICAgd2hpY2ggPSAnaXNmbCcKLSAgICB3YW50ID0gJ2Jvb2wnCi1jbGFzcyBfUHJvcF9pbmRleChhZXRvb2xzLk5Qcm9wZXJ0eSk6Ci0gICAgIiIiaW5kZXggLSB0aGUgbnVtYmVyIG9mIHRoZSB3aW5kb3cgIiIiCi0gICAgd2hpY2ggPSAncGlkeCcKLSAgICB3YW50ID0gJ2xvbmcnCi1jbGFzcyBfUHJvcF9tb2RhbChhZXRvb2xzLk5Qcm9wZXJ0eSk6Ci0gICAgIiIibW9kYWwgLSBJcyB0aGUgd2luZG93IG1vZGFsPyAiIiIKLSAgICB3aGljaCA9ICdwbW9kJwotICAgIHdhbnQgPSAnYm9vbCcKLWNsYXNzIF9Qcm9wX25hbWUoYWV0b29scy5OUHJvcGVydHkpOgotICAgICIiIm5hbWUgLSB0aGUgdGl0bGUgb2YgdGhlIHdpbmRvdyAiIiIKLSAgICB3aGljaCA9ICdwbmFtJwotICAgIHdhbnQgPSAnaXR4dCcKLWNsYXNzIF9Qcm9wX3Bvc2l0aW9uKGFldG9vbHMuTlByb3BlcnR5KToKLSAgICAiIiJwb3NpdGlvbiAtIHVwcGVyIGxlZnQgY29vcmRpbmF0ZXMgb2Ygd2luZG93ICIiIgotICAgIHdoaWNoID0gJ3Bwb3MnCi0gICAgd2FudCA9ICdRRHB0JwotY2xhc3MgX1Byb3BfcmVzaXphYmxlKGFldG9vbHMuTlByb3BlcnR5KToKLSAgICAiIiJyZXNpemFibGUgLSBJcyB0aGUgd2luZG93IHJlc2l6YWJsZT8gIiIiCi0gICAgd2hpY2ggPSAncHJzeicKLSAgICB3YW50ID0gJ2Jvb2wnCi1jbGFzcyBfUHJvcF90aXRsZWQoYWV0b29scy5OUHJvcGVydHkpOgotICAgICIiInRpdGxlZCAtIERvZXMgdGhlIHdpbmRvdyBoYXZlIGEgdGl0bGUgYmFyPyAiIiIKLSAgICB3aGljaCA9ICdwdGl0JwotICAgIHdhbnQgPSAnYm9vbCcKLWNsYXNzIF9Qcm9wX3Zpc2libGUoYWV0b29scy5OUHJvcGVydHkpOgotICAgICIiInZpc2libGUgLSBpcyB0aGUgd2luZG93IHZpc2libGU/ICIiIgotICAgIHdoaWNoID0gJ3B2aXMnCi0gICAgd2FudCA9ICdib29sJwotY2xhc3MgX1Byb3Bfem9vbWFibGUoYWV0b29scy5OUHJvcGVydHkpOgotICAgICIiInpvb21hYmxlIC0gSXMgdGhlIHdpbmRvdyB6b29tYWJsZT8gIiIiCi0gICAgd2hpY2ggPSAnaXN6bScKLSAgICB3YW50ID0gJ2Jvb2wnCi1jbGFzcyBfUHJvcF96b29tZWQoYWV0b29scy5OUHJvcGVydHkpOgotICAgICIiInpvb21lZCAtIElzIHRoZSB3aW5kb3cgem9vbWVkPyAiIiIKLSAgICB3aGljaCA9ICdwenVtJwotICAgIHdhbnQgPSAnYm9vbCcKLQotY2xhc3MgZG9jdW1lbnQoYWV0b29scy5Db21wb25lbnRJdGVtKToKLSAgICAiIiJkb2N1bWVudCAtIEEgRG9jdW1lbnQgIiIiCi0gICAgd2FudCA9ICdkb2N1JwotY2xhc3MgX1Byb3BfbW9kaWZpZWQoYWV0b29scy5OUHJvcGVydHkpOgotICAgICIiIm1vZGlmaWVkIC0gSGFzIHRoZSBkb2N1bWVudCBiZWVuIG1vZGlmaWVkIHNpbmNlIHRoZSBsYXN0IHNhdmU/ICIiIgotICAgIHdoaWNoID0gJ2ltb2QnCi0gICAgd2FudCA9ICdib29sJwotYXBwbGljYXRpb24uX3N1cGVyY2xhc3NuYW1lcyA9IFtdCi1hcHBsaWNhdGlvbi5fcHJpdnByb3BkaWN0ID0gewotfQotYXBwbGljYXRpb24uX3ByaXZlbGVtZGljdCA9IHsKLSAgICAnZG9jdW1lbnQnIDogZG9jdW1lbnQsCi0gICAgJ3dpbmRvdycgOiB3aW5kb3csCi19Ci13aW5kb3cuX3N1cGVyY2xhc3NuYW1lcyA9IFtdCi13aW5kb3cuX3ByaXZwcm9wZGljdCA9IHsKLSAgICAnYm91bmRzJyA6IF9Qcm9wX2JvdW5kcywKLSAgICAnY2xvc2VhYmxlJyA6IF9Qcm9wX2Nsb3NlYWJsZSwKLSAgICAnZmxvYXRpbmcnIDogX1Byb3BfZmxvYXRpbmcsCi0gICAgJ2luZGV4JyA6IF9Qcm9wX2luZGV4LAotICAgICdtb2RhbCcgOiBfUHJvcF9tb2RhbCwKLSAgICAnbmFtZScgOiBfUHJvcF9uYW1lLAotICAgICdwb3NpdGlvbicgOiBfUHJvcF9wb3NpdGlvbiwKLSAgICAncmVzaXphYmxlJyA6IF9Qcm9wX3Jlc2l6YWJsZSwKLSAgICAndGl0bGVkJyA6IF9Qcm9wX3RpdGxlZCwKLSAgICAndmlzaWJsZScgOiBfUHJvcF92aXNpYmxlLAotICAgICd6b29tYWJsZScgOiBfUHJvcF96b29tYWJsZSwKLSAgICAnem9vbWVkJyA6IF9Qcm9wX3pvb21lZCwKLX0KLXdpbmRvdy5fcHJpdmVsZW1kaWN0ID0gewotfQotZG9jdW1lbnQuX3N1cGVyY2xhc3NuYW1lcyA9IFtdCi1kb2N1bWVudC5fcHJpdnByb3BkaWN0ID0gewotICAgICdtb2RpZmllZCcgOiBfUHJvcF9tb2RpZmllZCwKLSAgICAnbmFtZScgOiBfUHJvcF9uYW1lLAotfQotZG9jdW1lbnQuX3ByaXZlbGVtZGljdCA9IHsKLX0KLV9FbnVtX3Nhdm8gPSB7Ci0gICAgJ3llcycgOiAneWVzICcsICAgICAjIFNhdmUgb2JqZWN0cyBub3cKLSAgICAnbm8nIDogJ25vICAnLCAgICAgICMgRG8gbm90IHNhdmUgb2JqZWN0cwotICAgICdhc2snIDogJ2FzayAnLCAgICAgIyBBc2sgdGhlIHVzZXIgd2hldGhlciB0byBzYXZlCi19Ci0KLQotIwotIyBJbmRpY2VzIG9mIHR5cGVzIGRlY2xhcmVkIGluIHRoaXMgbW9kdWxlCi0jCi1fY2xhc3NkZWNsYXJhdGlvbnMgPSB7Ci0gICAgJ2NhcHAnIDogYXBwbGljYXRpb24sCi0gICAgJ2N3aW4nIDogd2luZG93LAotICAgICdkb2N1JyA6IGRvY3VtZW50LAotfQotCi1fcHJvcGRlY2xhcmF0aW9ucyA9IHsKLSAgICAnaGNsYicgOiBfUHJvcF9jbG9zZWFibGUsCi0gICAgJ2ltb2QnIDogX1Byb3BfbW9kaWZpZWQsCi0gICAgJ2lzZmwnIDogX1Byb3BfZmxvYXRpbmcsCi0gICAgJ2lzem0nIDogX1Byb3Bfem9vbWFibGUsCi0gICAgJ3BibmQnIDogX1Byb3BfYm91bmRzLAotICAgICdwaWR4JyA6IF9Qcm9wX2luZGV4LAotICAgICdwbW9kJyA6IF9Qcm9wX21vZGFsLAotICAgICdwbmFtJyA6IF9Qcm9wX25hbWUsCi0gICAgJ3Bwb3MnIDogX1Byb3BfcG9zaXRpb24sCi0gICAgJ3Byc3onIDogX1Byb3BfcmVzaXphYmxlLAotICAgICdwdGl0JyA6IF9Qcm9wX3RpdGxlZCwKLSAgICAncHZpcycgOiBfUHJvcF92aXNpYmxlLAotICAgICdwenVtJyA6IF9Qcm9wX3pvb21lZCwKLX0KLQotX2NvbXBkZWNsYXJhdGlvbnMgPSB7Ci19Ci0KLV9lbnVtZGVjbGFyYXRpb25zID0gewotICAgICdzYXZvJyA6IF9FbnVtX3Nhdm8sCi19CmRpZmYgLS1naXQgYS9NYWMvVG9vbHMvRG9jL0hlbHBJbmRleGluZ1Rvb2wvX19pbml0X18ucHkgYi9NYWMvVG9vbHMvRG9jL0hlbHBJbmRleGluZ1Rvb2wvX19pbml0X18ucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzNTlkZjUuLjAwMDAwMDAKLS0tIGEvTWFjL1Rvb2xzL0RvYy9IZWxwSW5kZXhpbmdUb29sL19faW5pdF9fLnB5CisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAotIiIiCi1QYWNrYWdlIGdlbmVyYXRlZCBmcm9tIC9EZXZlbG9wZXIvQXBwbGljYXRpb25zL0FwcGxlIEhlbHAgSW5kZXhpbmcgVG9vbC5hcHAKLSIiIgotaW1wb3J0IGFldG9vbHMKLUVycm9yID0gYWV0b29scy5FcnJvcgotaW1wb3J0IFN0YW5kYXJkX1N1aXRlCi1pbXBvcnQgSGVscF9JbmRleGluZ19Ub29sX1N1aXRlCi1pbXBvcnQgb2Rkc19hbmRfZW5kcwotaW1wb3J0IE1pc2NlbGxhbmVvdXNfU3RhbmRhcmRzCi1pbXBvcnQgUmVxdWlyZWRfU3VpdGUKLQotCi1fY29kZV90b19tb2R1bGUgPSB7Ci0gICAgJ0NvUmUnIDogU3RhbmRhcmRfU3VpdGUsCi0gICAgJ0hJVCAnIDogSGVscF9JbmRleGluZ19Ub29sX1N1aXRlLAotICAgICdPZGRzJyA6IG9kZHNfYW5kX2VuZHMsCi0gICAgJ21pc2MnIDogTWlzY2VsbGFuZW91c19TdGFuZGFyZHMsCi0gICAgJ3JlcWQnIDogUmVxdWlyZWRfU3VpdGUsCi19Ci0KLQotCi1fY29kZV90b19mdWxsbmFtZSA9IHsKLSAgICAnQ29SZScgOiAoJ0hlbHBJbmRleGluZ1Rvb2wuU3RhbmRhcmRfU3VpdGUnLCAnU3RhbmRhcmRfU3VpdGUnKSwKLSAgICAnSElUICcgOiAoJ0hlbHBJbmRleGluZ1Rvb2wuSGVscF9JbmRleGluZ19Ub29sX1N1aXRlJywgJ0hlbHBfSW5kZXhpbmdfVG9vbF9TdWl0ZScpLAotICAgICdPZGRzJyA6ICgnSGVscEluZGV4aW5nVG9vbC5vZGRzX2FuZF9lbmRzJywgJ29kZHNfYW5kX2VuZHMnKSwKLSAgICAnbWlzYycgOiAoJ0hlbHBJbmRleGluZ1Rvb2wuTWlzY2VsbGFuZW91c19TdGFuZGFyZHMnLCAnTWlzY2VsbGFuZW91c19TdGFuZGFyZHMnKSwKLSAgICAncmVxZCcgOiAoJ0hlbHBJbmRleGluZ1Rvb2wuUmVxdWlyZWRfU3VpdGUnLCAnUmVxdWlyZWRfU3VpdGUnKSwKLX0KLQotZnJvbSBTdGFuZGFyZF9TdWl0ZSBpbXBvcnQgKgotZnJvbSBIZWxwX0luZGV4aW5nX1Rvb2xfU3VpdGUgaW1wb3J0ICoKLWZyb20gb2Rkc19hbmRfZW5kcyBpbXBvcnQgKgotZnJvbSBNaXNjZWxsYW5lb3VzX1N0YW5kYXJkcyBpbXBvcnQgKgotZnJvbSBSZXF1aXJlZF9TdWl0ZSBpbXBvcnQgKgotCi1kZWYgZ2V0YmFzZWNsYXNzZXModik6Ci0gICAgaWYgbm90IGdldGF0dHIodiwgJ19wcm9wZGljdCcsIE5vbmUpOgotICAgICAgICB2Ll9wcm9wZGljdCA9IHt9Ci0gICAgICAgIHYuX2VsZW1kaWN0ID0ge30KLSAgICAgICAgZm9yIHN1cGVyY2xhc3NuYW1lIGluIGdldGF0dHIodiwgJ19zdXBlcmNsYXNzbmFtZXMnLCBbXSk6Ci0gICAgICAgICAgICBzdXBlcmNsYXNzID0gZXZhbChzdXBlcmNsYXNzbmFtZSkKLSAgICAgICAgICAgIGdldGJhc2VjbGFzc2VzKHN1cGVyY2xhc3MpCi0gICAgICAgICAgICB2Ll9wcm9wZGljdC51cGRhdGUoZ2V0YXR0cihzdXBlcmNsYXNzLCAnX3Byb3BkaWN0Jywge30pKQotICAgICAgICAgICAgdi5fZWxlbWRpY3QudXBkYXRlKGdldGF0dHIoc3VwZXJjbGFzcywgJ19lbGVtZGljdCcsIHt9KSkKLSAgICAgICAgdi5fcHJvcGRpY3QudXBkYXRlKGdldGF0dHIodiwgJ19wcml2cHJvcGRpY3QnLCB7fSkpCi0gICAgICAgIHYuX2VsZW1kaWN0LnVwZGF0ZShnZXRhdHRyKHYsICdfcHJpdmVsZW1kaWN0Jywge30pKQotCi1pbXBvcnQgU3RkU3VpdGVzCi0KLSMKLSMgU2V0IHByb3BlcnR5IGFuZCBlbGVtZW50IGRpY3Rpb25hcmllcyBub3cgdGhhdCBhbGwgY2xhc3NlcyBoYXZlIGJlZW4gZGVmaW5lZAotIwotZ2V0YmFzZWNsYXNzZXMod2luZG93KQotZ2V0YmFzZWNsYXNzZXMoYXBwbGljYXRpb24pCi1nZXRiYXNlY2xhc3Nlcyhkb2N1bWVudCkKLWdldGJhc2VjbGFzc2VzKGFwcGxpY2F0aW9uKQotCi0jCi0jIEluZGljZXMgb2YgdHlwZXMgZGVjbGFyZWQgaW4gdGhpcyBtb2R1bGUKLSMKLV9jbGFzc2RlY2xhcmF0aW9ucyA9IHsKLSAgICAnY3dpbicgOiB3aW5kb3csCi0gICAgJ2NhcHAnIDogYXBwbGljYXRpb24sCi0gICAgJ2RvY3UnIDogZG9jdW1lbnQsCi0gICAgJ2NhcHAnIDogYXBwbGljYXRpb24sCi19Ci0KLQotY2xhc3MgSGVscEluZGV4aW5nVG9vbChTdGFuZGFyZF9TdWl0ZV9FdmVudHMsCi0gICAgICAgIEhlbHBfSW5kZXhpbmdfVG9vbF9TdWl0ZV9FdmVudHMsCi0gICAgICAgIG9kZHNfYW5kX2VuZHNfRXZlbnRzLAotICAgICAgICBNaXNjZWxsYW5lb3VzX1N0YW5kYXJkc19FdmVudHMsCi0gICAgICAgIFJlcXVpcmVkX1N1aXRlX0V2ZW50cywKLSAgICAgICAgYWV0b29scy5UYWxrVG8pOgotICAgIF9zaWduYXR1cmUgPSAnaGl0aScKLQotICAgIF9tb2R1bGVOYW1lID0gJ0hlbHBJbmRleGluZ1Rvb2wnCmRpZmYgLS1naXQgYS9NYWMvVG9vbHMvRG9jL0hlbHBJbmRleGluZ1Rvb2wvb2Rkc19hbmRfZW5kcy5weSBiL01hYy9Ub29scy9Eb2MvSGVscEluZGV4aW5nVG9vbC9vZGRzX2FuZF9lbmRzLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NmVjYjk1Li4wMDAwMDAwCi0tLSBhL01hYy9Ub29scy9Eb2MvSGVscEluZGV4aW5nVG9vbC9vZGRzX2FuZF9lbmRzLnB5CisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotIiIiU3VpdGUgb2RkcyBhbmQgZW5kczogVGhpbmdzIHRoYXQgc2hvdWxkIGJlIGluIHNvbWUgc3RhbmRhcmQgc3VpdGUsIGJ1dCBhcmVuXHhkNXQKLUxldmVsIDEsIHZlcnNpb24gMQotCi1HZW5lcmF0ZWQgZnJvbSAvRGV2ZWxvcGVyL0FwcGxpY2F0aW9ucy9BcHBsZSBIZWxwIEluZGV4aW5nIFRvb2wuYXBwCi1BRVRFL0FFVVQgcmVzb3VyY2UgdmVyc2lvbiAxLzEsIGxhbmd1YWdlIDAsIHNjcmlwdCAwCi0iIiIKLQotaW1wb3J0IGFldG9vbHMKLWltcG9ydCBNYWNPUwotCi1fY29kZSA9ICdPZGRzJwotCi1jbGFzcyBvZGRzX2FuZF9lbmRzX0V2ZW50czoKLQotICAgIGRlZiBzZWxlY3Qoc2VsZiwgX29iamVjdD1Ob25lLCBfYXR0cmlidXRlcz17fSwgKipfYXJndW1lbnRzKToKLSAgICAgICAgIiIic2VsZWN0OiBTZWxlY3QgdGhlIHNwZWNpZmllZCBvYmplY3QKLSAgICAgICAgUmVxdWlyZWQgYXJndW1lbnQ6IHRoZSBvYmplY3QgdG8gc2VsZWN0Ci0gICAgICAgIEtleXdvcmQgYXJndW1lbnQgX2F0dHJpYnV0ZXM6IEFwcGxlRXZlbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkKLSAgICAgICAgIiIiCi0gICAgICAgIF9jb2RlID0gJ21pc2MnCi0gICAgICAgIF9zdWJjb2RlID0gJ3NsY3QnCi0KLSAgICAgICAgaWYgX2FyZ3VtZW50czogcmFpc2UgVHlwZUVycm9yKCdObyBvcHRpb25hbCBhcmdzIGV4cGVjdGVkJykKLSAgICAgICAgX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAotCi0KLSAgICAgICAgX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCi0gICAgICAgICAgICAgICAgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCi0gICAgICAgIGlmIF9hcmd1bWVudHMuZ2V0KCdlcnJuJywgMCk6Ci0gICAgICAgICAgICByYWlzZSBhZXRvb2xzLkVycm9yKGFldG9vbHMuZGVjb2RlZXJyb3IoX2FyZ3VtZW50cykpCi0gICAgICAgICMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKLSAgICAgICAgaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCctLS0tJyk6Ci0gICAgICAgICAgICByZXR1cm4gX2FyZ3VtZW50c1snLS0tLSddCi0KLQotIwotIyBJbmRpY2VzIG9mIHR5cGVzIGRlY2xhcmVkIGluIHRoaXMgbW9kdWxlCi0jCi1fY2xhc3NkZWNsYXJhdGlvbnMgPSB7Ci19Ci0KLV9wcm9wZGVjbGFyYXRpb25zID0gewotfQotCi1fY29tcGRlY2xhcmF0aW9ucyA9IHsKLX0KLQotX2VudW1kZWNsYXJhdGlvbnMgPSB7Ci19CmRpZmYgLS1naXQgYS9NYWMvVG9vbHMvRG9jL1JFQURNRSBiL01hYy9Ub29scy9Eb2MvUkVBRE1FCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZjRkNTNkLi4wMDAwMDAwCi0tLSBhL01hYy9Ub29scy9Eb2MvUkVBRE1FCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotSW4gdGhpcyBkaXJlY3RvcnkgeW91IGNhbiBidWlsZCB0aGUgUHl0aG9uIGRvY3VtZW50YXRpb24gaW4gYSBmb3JtIHRoYXQKLWlzIHN1aXRhYmxlIGZvciBhY2Nlc3Mgd2l0aCBBcHBsZSBIZWxwIFZpZXdlci4gVGhpcyB3aWxsIGVuYWJsZSB0aGUKLSJQeXRob24gRG9jdW1lbnRhdGlvbiIgbWVudSBlbnRyaWVzIGluIHRoZSBNYWNQeXRob24gSURFIEhlbHAgbWVudS4KLQotVW5mb3J0dW5hdGVseSB0aGUgcHJvY2VkdXJlIHRvIGJ1aWxkIHRoZSBkb2NzIGlzIG5vdCB2ZXJ5IHN0cmVhbWxpbmVkLgotCi1GaXJzdCwgZWRpdCBzZXR1cC5weS4gQXQgdGhlIHRvcCwgZWRpdCBNQUpPUl9WRVJTSU9OIGFuZCBNSU5PUl9WRVJTSU9OLAotYW5kIGNoZWNrIHRoYXQgREVTVERJUiBtYWtlcyBzZW5zZS4gVGhlIGRvY3VtZW50YXRpb24gd2lsbCBiZSBpbnN0YWxsZWQKLWluc2lkZSBQeXRob25JREUuYXBwLgotCi1JbiBEb2NCdWlsZC5pbml0aWFsaXplX29wdGlvbnMsIHNldCBzZWxmLmRvd25sb2FkIHRvIFRydWUgaWYgeW91IHdhbnQgdG8KLWRvd25sb2FkIHRoZSBkb2NzLiBTZXQgaXQgdG8gRmFsc2UgaWYgeW91IHdhbnQgdG8gYnVpbGQgdGhlIGRvY3MgZnJvbQotdGhlIHNvdXJjZSB0cmVlLCBidXQgdGhpcyByZXF1aXJlcyBMYVRleCBhbmQgbG90cyBvZiBvdGhlciBzdHVmZi4KLURvYWJsZSwgYnV0IG5vdCBlYXN5LgotCi1TZWNvbmQsIGlmIHlvdSB3YW50IHRvIGRvd25sb2FkIHRoZSBkb2NzIHlvdSBtYXkgbmVlZCB0byBkbyBhIGNvdXBsZQotbW9yZSBlZGl0cy4gVGhlIHdheSB0aGUgZG9jcyBhcmUgcGFja2FnZWQgd2lsbCBvZnRlbiBjaGFuZ2UgYmV0d2VlbgotbWFqb3IgcmVsZWFzZXMuIEZpZGRsZSBEb2NCdWlsZC5kb3dubG9hZERvY3MgdG8gbWFrZSBpdCBkbyB0aGUgcmlnaHQKLXRoaW5nIChkb3dubG9hZCB0aGUgZG9jcyBmcm9tIHB5dGhvbi5vcmcsIHVucGFjayB0aGVtLCByZW5hbWUgdGhlCi1kaXJlY3RvcnkgdG8gImJ1aWxkL2h0bWwiKS4KLQotQWZ0ZXIgdGhlc2UgZWRpdHMgeW91IHNob3VsZCBiZSByZWFkeSB0byByb2xsLiAicHl0aG9udyBzZXR1cC5weSBidWlsZCIKLXNob3VsZCBkb3dubG9hZCBhbmQgdW5wYWNrIChvciBidWlsZCkgdGhlIGRvY3MuIE5leHQsIGl0IHdpbGwgZG8gc29tZQotbWFnaWMgdG8gbWFrZSB0aGUgZG9jcyBpbmRleGFibGUuIEZpbmFsbHksIGl0IHdpbGwgcnVuIHRoZSBBcHBsZSBIZWxwCi1JbmRleGluZyBUb29sLiAoVGhpcyBsYXN0IHN0ZXAgaXMgdGhlIHJlYXNvbiB5b3UgbXVzdCB1c2UgInB5dGhvbnciIGFzCi1vcHBvc2VkIHRvICJweXRob24iKS4gVXN1YWxseSBpdCB3aWxsIHRpbWUgb3V0IHdoaWxlIHdhaXRpbmcgZm9yIEFISVQgdG8KLWRvIGl0cyB3b3JrLiBXYWl0IHVudGlsIEFISVQgaXMgZG9uZS4KLQotTm93IHlvdSdyZSByZWFkeSB0byBpbnN0YWxsIHdpdGggInB5dGhvbiBzZXR1cC5weSBpbnN0YWxsIi4KLQotQWZ0ZXIgdGhpcyBpcyBkb25lIHRlc3QgeW91ciB3b3JrLiBGaXJlIHVwIFB5dGhvbklERSwgYW5kIGNoZWNrIHRoYXQKLUhlbHAtPlB5dGhvbiBEb2N1bWVudGF0aW9uIGJyaW5ncyB1cCB0aGUgZG9jdW1lbnRhdGlvbiBpbiB0aGUgSGVscCBWaWV3ZXIuCi1BbHNvIG9wZW4gYW4gSURFIGVkaXQgd2luZG93LCB0eXBlIHNvbWV0aGluZyBsaWtlICJpbXBvcnQgc3lzIiwgc2VsZWN0Ci0iaW1wb3J0IiwgYW5kIHVzZSBIZWxwLT5Mb29rdXAgaW4gUHl0aG9uIERvY3VtZW50YXRpb24gdG8gY2hlY2sgdGhhdCB0aGUKLWluZGV4IGhhcyBiZWVuIGdlbmVyYXRlZCBjb3JyZWN0bHkuCmRpZmYgLS1naXQgYS9NYWMvVG9vbHMvRG9jL3NldHVwLnB5IGIvTWFjL1Rvb2xzL0RvYy9zZXR1cC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTM1MTUyYy4uMDAwMDAwMAotLS0gYS9NYWMvVG9vbHMvRG9jL3NldHVwLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjEzICswLDAgQEAKLSMgQnVpbGQgYW5kIGluc3RhbGwgYW4gQXBwbGUgSGVscCBWaWV3ZXIgY29tcGF0aWJsZSB2ZXJzaW9uIG9mIHRoZSBQeXRob24KLSMgZG9jdW1lbnRhdGlvbiBpbnRvIHRoZSBmcmFtZXdvcmsuCi0jIENvZGUgYnkgQmlsbCBGYW5jaGVyLCB3aXRoIHNvbWUgbW9kaWZpY2F0aW9ucyBieSBKYWNrIEphbnNlbi4KLSMKLSMgWW91IG11c3QgcnVuIHRoaXMgYXMgYSB0d28tc3RlcCBwcm9jZXNzCi0jIDEuIHB5dGhvbiBzZXR1cERvY3MucHkgYnVpbGQKLSMgMi4gV2FpdCBmb3IgQXBwbGUgSGVscCBJbmRleGluZyBUb29sIHRvIGZpbmlzaAotIyAzLiBweXRob24gc2V0dXBEb2NzLnB5IGluc3RhbGwKLSMKLSMgVG8gZG86Ci0jIC0gdGVzdCB3aGV0aGVyIHRoZSBkb2NzIGFyZSBhdmFpbGFibGUgbG9jYWxseSBiZWZvcmUgZG93bmxvYWRpbmcKLSMgLSBmaXggYnVpbGREb2NzRnJvbVNvdXJjZQotIyAtIEdldCBkb2N1bWVudGF0aW9uIHZlcnNpb24gZnJvbSBzeXMudmVyc2lvbiwgZmFsbGJhY2sgdG8gMi4yLjEKLSMgLSBTZWUgaWYgd2UgY2FuIHNvbWVob3cgZGV0ZWN0IHRoYXQgQXBwbGUgSGVscCBJbmRleGluZyBUb29sIGlzIGZpbmlzaGVkCi0jIC0gZGF0YV9maWxlcyB0byBzZXR1cCgpIGRvZXNuJ3Qgc2VlbSB0aGUgcmlnaHQgd2F5IHRvIHBhc3MgdGhlIGFyZ3VtZW50cwotIwotaW1wb3J0IHN5cywgb3MsIHJlCi1mcm9tIGRpc3R1dGlscy5jbWQgaW1wb3J0IENvbW1hbmQKLWZyb20gZGlzdHV0aWxzLmNvbW1hbmQuYnVpbGQgaW1wb3J0IGJ1aWxkCi1mcm9tIGRpc3R1dGlscy5jb3JlIGltcG9ydCBzZXR1cAotZnJvbSBkaXN0dXRpbHMuZmlsZV91dGlsIGltcG9ydCBjb3B5X2ZpbGUKLWZyb20gZGlzdHV0aWxzLmRpcl91dGlsIGltcG9ydCBjb3B5X3RyZWUKLWZyb20gZGlzdHV0aWxzLmxvZyBpbXBvcnQgbG9nCi1mcm9tIGRpc3R1dGlscy5zcGF3biBpbXBvcnQgc3Bhd24KLWZyb20gZGlzdHV0aWxzIGltcG9ydCBzeXNjb25maWcsIGRlcF91dGlsCi1mcm9tIGRpc3R1dGlscy51dGlsIGltcG9ydCBjaGFuZ2Vfcm9vdAotaW1wb3J0IEhlbHBJbmRleGluZ1Rvb2wKLWltcG9ydCBDYXJib24uRmlsZQotaW1wb3J0IHRpbWUKLQotTUFKT1JfVkVSU0lPTj0nMi40JwotTUlOT1JfVkVSU0lPTj0nMi40LjEnCi1ERVNURElSPScvQXBwbGljYXRpb25zL01hY1B5dGhvbi0lcy9QeXRob25JREUuYXBwL0NvbnRlbnRzL1Jlc291cmNlcy9FbmdsaXNoLmxwcm9qL1B5dGhvbkRvY3VtZW50YXRpb24nICUgTUFKT1JfVkVSU0lPTgotCi1jbGFzcyBEb2NCdWlsZChidWlsZCk6Ci0gICAgZGVmIGluaXRpYWxpemVfb3B0aW9ucyhzZWxmKToKLSAgICAgICAgYnVpbGQuaW5pdGlhbGl6ZV9vcHRpb25zKHNlbGYpCi0gICAgICAgIHNlbGYuYnVpbGRfaHRtbCA9IE5vbmUKLSAgICAgICAgc2VsZi5idWlsZF9kZXN0ID0gTm9uZQotICAgICAgICBzZWxmLmRvd25sb2FkID0gMQotICAgICAgICBzZWxmLmRvY192ZXJzaW9uID0gTUlOT1JfVkVSU0lPTiAjIE9ubHkgbmVlZGVkIGlmIGRvd25sb2FkIGlzIHRydWUKLQotICAgIGRlZiBmaW5hbGl6ZV9vcHRpb25zKHNlbGYpOgotICAgICAgICBidWlsZC5maW5hbGl6ZV9vcHRpb25zKHNlbGYpCi0gICAgICAgIGlmIHNlbGYuYnVpbGRfaHRtbCBpcyBOb25lOgotICAgICAgICAgICAgc2VsZi5idWlsZF9odG1sID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRfYmFzZSwgJ2h0bWwnKQotICAgICAgICBpZiBzZWxmLmJ1aWxkX2Rlc3QgaXMgTm9uZToKLSAgICAgICAgICAgIHNlbGYuYnVpbGRfZGVzdCA9IG9zLnBhdGguam9pbihzZWxmLmJ1aWxkX2Jhc2UsICdQeXRob25Eb2N1bWVudGF0aW9uJykKLQotICAgIGRlZiBzcGF3bihzZWxmLCAqYXJncyk6Ci0gICAgICAgIHNwYXduKGFyZ3MsIDEsICBzZWxmLnZlcmJvc2UsIHNlbGYuZHJ5X3J1bikKLQotICAgIGRlZiBkb3dubG9hZERvY3Moc2VsZik6Ci0gICAgICAgIHdvcmtkaXIgPSBvcy5nZXRjd2QoKQotICAgICAgICAjIFhYWCBOb3RlOiB0aGUgbmV4dCBzdHJpbmdzIG1heSBjaGFuZ2UgZnJvbSB2ZXJzaW9uIHRvIHZlcnNpb24KLSAgICAgICAgdXJsID0gJ2h0dHA6Ly93d3cucHl0aG9uLm9yZy9mdHAvcHl0aG9uL2RvYy8lcy9odG1sLSVzLnRhci5iejInICUgXAotICAgICAgICAgICAgICAgIChzZWxmLmRvY192ZXJzaW9uLHNlbGYuZG9jX3ZlcnNpb24pCi0gICAgICAgIHRhcmZpbGUgPSAnaHRtbC0lcy50YXIuYnoyJyAlIHNlbGYuZG9jX3ZlcnNpb24KLSAgICAgICAgZGlybmFtZSA9ICdQeXRob24tRG9jcy0lcycgJSBzZWxmLmRvY192ZXJzaW9uCi0KLSAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoc2VsZi5idWlsZF9odG1sKToKLSAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignJXM6IGFscmVhZHkgZXhpc3RzLCBwbGVhc2UgcmVtb3ZlIGFuZCB0cnkgYWdhaW4nICUgc2VsZi5idWlsZF9odG1sKQotICAgICAgICBvcy5jaGRpcihzZWxmLmJ1aWxkX2Jhc2UpCi0gICAgICAgIHNlbGYuc3Bhd24oJ2N1cmwnLCctTycsIHVybCkKLSAgICAgICAgc2VsZi5zcGF3bigndGFyJywgJy14amYnLCB0YXJmaWxlKQotICAgICAgICBvcy5yZW5hbWUoZGlybmFtZSwgJ2h0bWwnKQotICAgICAgICBvcy5jaGRpcih3b3JrZGlyKQotIyMgICAgICAgIHByaW50ICIqKiBQbGVhc2UgdW5wYWNrICVzIiAlIG9zLnBhdGguam9pbihzZWxmLmJ1aWxkX2Jhc2UsIHRhcmZpbGUpCi0jIyAgICAgICAgcHJpbnQgIioqIFVucGFjayB0aGUgZmlsZXMgaW50byAlcyIgJSBzZWxmLmJ1aWxkX2h0bWwKLSMjICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IsICJZb3UgbmVlZCB0byB1bnBhY2sgdGhlIGRvY3MgbWFudWFsbHkiCi0KLSAgICBkZWYgYnVpbGREb2NzRnJvbVNvdXJjZShzZWxmKToKLSAgICAgICAgc3JjZGlyID0gJy4uLy4uLy4uJwotICAgICAgICBkb2NkaXIgPSBvcy5wYXRoLmpvaW4oc3JjZGlyLCAnRG9jJykKLSAgICAgICAgaHRtbGRpciA9IG9zLnBhdGguam9pbihkb2NkaXIsICdodG1sJykKLSAgICAgICAgc3Bhd24oKCdtYWtlJywnLS1kaXJlY3RvcnknLCBkb2NkaXIsICdodG1sJyksIDEsIHNlbGYudmVyYm9zZSwgc2VsZi5kcnlfcnVuKQotICAgICAgICBzZWxmLm1rcGF0aChzZWxmLmJ1aWxkX2h0bWwpCi0gICAgICAgIGNvcHlfdHJlZShodG1sZGlyLCBzZWxmLmJ1aWxkX2h0bWwpCi0KLSAgICBkZWYgZW5zdXJlSHRtbChzZWxmKToKLSAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHNlbGYuYnVpbGRfaHRtbCk6Ci0gICAgICAgICAgICBpZiBzZWxmLmRvd25sb2FkOgotICAgICAgICAgICAgICAgIHNlbGYuZG93bmxvYWREb2NzKCkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5idWlsZERvY3NGcm9tU291cmNlKCkKLQotICAgIGRlZiBoYWNrSW5kZXgoc2VsZik6Ci0gICAgICAgIGluZF9odG1sID0gJ2luZGV4Lmh0bWwnCi0gICAgICAgICNwcmludCAnc2VsZi5idWlsZF9kZXN0ID0nLCBzZWxmLmJ1aWxkX2Rlc3QKLSAgICAgICAgaGFja2VkSW5kZXggPSBmaWxlKG9zLnBhdGguam9pbihzZWxmLmJ1aWxkX2Rlc3QsIGluZF9odG1sKSwndycpCi0gICAgICAgIG9yaWdJbmRleCA9IGZpbGUob3MucGF0aC5qb2luKHNlbGYuYnVpbGRfaHRtbCxpbmRfaHRtbCkpCi0gICAgICAgIHIgPSByZS5jb21waWxlKCc8c3R5bGUgdHlwZT0idGV4dC9jc3MiPi4qPC9zdHlsZT4nLCByZS5ET1RBTEwpCi0gICAgICAgIGhhY2tlZEluZGV4LndyaXRlKHIuc3ViKCc8TUVUQSBOQU1FPSJBcHBsZVRpdGxlIiBDT05URU5UPSJQeXRob24gRG9jdW1lbnRhdGlvbiI+JyxvcmlnSW5kZXgucmVhZCgpKSkKLQotICAgIGRlZiBoYWNrRmlsZShzZWxmLGQsZik6Ci0gICAgICAgIG9yaWdQYXRoID0gb3MucGF0aC5qb2luKGQsZikKLSAgICAgICAgYXNzZXJ0KG9yaWdQYXRoWzpsZW4oc2VsZi5idWlsZF9odG1sKV0gPT0gc2VsZi5idWlsZF9odG1sKQotICAgICAgICBvdXRQYXRoID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRfZGVzdCwgZFtsZW4oc2VsZi5idWlsZF9odG1sKSsxOl0sIGYpCi0gICAgICAgIChuYW1lLCBleHQpID0gb3MucGF0aC5zcGxpdGV4dChmKQotICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKG9yaWdQYXRoKToKLSAgICAgICAgICAgIHNlbGYubWtwYXRoKG91dFBhdGgpCi0gICAgICAgIGVsaWYgZXh0ID09ICcuaHRtbCc6Ci0gICAgICAgICAgICBpZiBzZWxmLnZlcmJvc2U6IHByaW50KCdoYWNraW5nICVzIHRvICVzJyAlIChvcmlnUGF0aCxvdXRQYXRoKSkKLSAgICAgICAgICAgIGhhY2tlZEZpbGUgPSBmaWxlKG91dFBhdGgsICd3JykKLSAgICAgICAgICAgIG9yaWdGaWxlID0gZmlsZShvcmlnUGF0aCwncicpCi0gICAgICAgICAgICBoYWNrZWRGaWxlLndyaXRlKHNlbGYuci5zdWIoJzxkbD48ZHQ+PGRkPicsIG9yaWdGaWxlLnJlYWQoKSkpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBjb3B5X2ZpbGUob3JpZ1BhdGgsIG91dFBhdGgpCi0KLSAgICBkZWYgaGFja0h0bWwoc2VsZik6Ci0gICAgICAgIHNlbGYuciA9IHJlLmNvbXBpbGUoJzxkbD48ZGQ+JykKLSAgICAgICAgb3Mud2FsayhzZWxmLmJ1aWxkX2h0bWwsIHNlbGYudmlzaXQsIE5vbmUpCi0KLSAgICBkZWYgdmlzaXQoc2VsZiwgZHVtbXksIGRpcm5hbWUsIGZpbGVuYW1lcyk6Ci0gICAgICAgIGZvciBmIGluIGZpbGVuYW1lczoKLSAgICAgICAgICAgIHNlbGYuaGFja0ZpbGUoZGlybmFtZSwgZikKLQotICAgIGRlZiBtYWtlSGVscEluZGV4KHNlbGYpOgotICAgICAgICBhcHAgPSAnL0RldmVsb3Blci9BcHBsaWNhdGlvbnMvQXBwbGUgSGVscCBJbmRleGluZyBUb29sLmFwcCcKLSAgICAgICAgc2VsZi5zcGF3bignb3BlbicsICctYScsIGFwcCAsIHNlbGYuYnVpbGRfZGVzdCkKLSAgICAgICAgcHJpbnQoIlBsZWFzZSB3YWl0IHVudGlsIEFwcGxlIEhlbHAgSW5kZXhpbmcgVG9vbCBmaW5pc2hlcyBiZWZvcmUgaW5zdGFsbGluZyIpCi0KLSAgICBkZWYgbWFrZUhlbHBJbmRleChzZWxmKToKLSAgICAgICAgYXBwID0gSGVscEluZGV4aW5nVG9vbC5IZWxwSW5kZXhpbmdUb29sKHN0YXJ0PTEpCi0gICAgICAgIGFwcC5vcGVuKENhcmJvbi5GaWxlLkZTU3BlYyhzZWxmLmJ1aWxkX2Rlc3QpKQotICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJXYWl0aW5nIGZvciBIZWxwIEluZGV4aW5nIFRvb2wgdG8gc3RhcnQuLi4iKQotICAgICAgICB3aGlsZSAxOgotICAgICAgICAgICAgIyBUaGlzIGlzIGJhZCBkZXNpZ24gaW4gdGhlIHN1aXRlIGdlbmVyYXRpb24gY29kZSEKLSAgICAgICAgICAgIGlkbGUgPSBhcHAuX2dldChIZWxwSW5kZXhpbmdUb29sLkhlbHBfSW5kZXhpbmdfVG9vbF9TdWl0ZS5fUHJvcF9pZGxlU3RhdHVzKCkpCi0gICAgICAgICAgICB0aW1lLnNsZWVwKDEwKQotICAgICAgICAgICAgaWYgbm90IGlkbGU6IGJyZWFrCi0gICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCIuIikKLSAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiXG4iKQotICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJXYWl0aW5nIGZvciBIZWxwIEluZGV4aW5nIFRvb2wgdG8gZmluaXNoLi4uIikKLSAgICAgICAgd2hpbGUgMToKLSAgICAgICAgICAgICMgVGhpcyBpcyBiYWQgZGVzaWduIGluIHRoZSBzdWl0ZSBnZW5lcmF0aW9uIGNvZGUhCi0gICAgICAgICAgICBpZGxlID0gYXBwLl9nZXQoSGVscEluZGV4aW5nVG9vbC5IZWxwX0luZGV4aW5nX1Rvb2xfU3VpdGUuX1Byb3BfaWRsZVN0YXR1cygpKQotICAgICAgICAgICAgdGltZS5zbGVlcCgxMCkKLSAgICAgICAgICAgIGlmIGlkbGU6IGJyZWFrCi0gICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCIuIikKLSAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiXG4iKQotCi0KLSAgICBkZWYgcnVuKHNlbGYpOgotICAgICAgICBzZWxmLmVuc3VyZV9maW5hbGl6ZWQoKQotICAgICAgICBzZWxmLm1rcGF0aChzZWxmLmJ1aWxkX2Jhc2UpCi0gICAgICAgIHNlbGYuZW5zdXJlSHRtbCgpCi0gICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKHNlbGYuYnVpbGRfaHRtbCk6Ci0gICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIkNhbid0IGZpbmQgc291cmNlIGZvbGRlciBmb3IgZG9jdW1lbnRhdGlvbi4iKQotICAgICAgICBzZWxmLm1rcGF0aChzZWxmLmJ1aWxkX2Rlc3QpCi0gICAgICAgIGlmIGRlcF91dGlsLm5ld2VyKG9zLnBhdGguam9pbihzZWxmLmJ1aWxkX2h0bWwsJ2luZGV4Lmh0bWwnKSwgb3MucGF0aC5qb2luKHNlbGYuYnVpbGRfZGVzdCwnaW5kZXguaHRtbCcpKToKLSAgICAgICAgICAgIHNlbGYubWtwYXRoKHNlbGYuYnVpbGRfZGVzdCkKLSAgICAgICAgICAgIHNlbGYuaGFja0h0bWwoKQotICAgICAgICAgICAgc2VsZi5oYWNrSW5kZXgoKQotICAgICAgICAgICAgc2VsZi5tYWtlSGVscEluZGV4KCkKLQotY2xhc3MgQUhWRG9jSW5zdGFsbChDb21tYW5kKToKLSAgICBkZXNjcmlwdGlvbiA9ICJpbnN0YWxsIEFwcGxlIEhlbHAgVmlld2VyIGh0bWwgZmlsZXMiCi0gICAgdXNlcl9vcHRpb25zID0gWygnaW5zdGFsbC1kb2M9JywgJ2QnLAotICAgICAgICAgICAgJ2RpcmVjdG9yeSB0byBpbnN0YWxsIEhUTUwgdHJlZScpLAotICAgICAgICAgICAgICgncm9vdD0nLCBOb25lLAotICAgICAgICAgICAgICJpbnN0YWxsIGV2ZXJ5dGhpbmcgcmVsYXRpdmUgdG8gdGhpcyBhbHRlcm5hdGUgcm9vdCBkaXJlY3RvcnkiKSwKLSAgICAgICAgICAgIF0KLQotICAgIGRlZiBpbml0aWFsaXplX29wdGlvbnMoc2VsZik6Ci0gICAgICAgIHNlbGYuYnVpbGRfZGVzdCA9IE5vbmUKLSAgICAgICAgc2VsZi5pbnN0YWxsX2RvYyA9IE5vbmUKLSAgICAgICAgc2VsZi5wcmVmaXggPSBOb25lCi0gICAgICAgIHNlbGYucm9vdCA9IE5vbmUKLQotICAgIGRlZiBmaW5hbGl6ZV9vcHRpb25zKHNlbGYpOgotICAgICAgICBzZWxmLnNldF91bmRlZmluZWRfb3B0aW9ucygnaW5zdGFsbCcsCi0gICAgICAgICAgICAgICAgKCdwcmVmaXgnLCAncHJlZml4JyksCi0gICAgICAgICAgICAgICAgKCdyb290JywgJ3Jvb3QnKSkKLSMgICAgICAgICAgICAgICBpbXBvcnQgcGRiIDsgcGRiLnNldF90cmFjZSgpCi0gICAgICAgIGJ1aWxkX2NtZCA9IHNlbGYuZ2V0X2ZpbmFsaXplZF9jb21tYW5kKCdidWlsZCcpCi0gICAgICAgIGlmIHNlbGYuYnVpbGRfZGVzdCBpcyBOb25lOgotICAgICAgICAgICAgYnVpbGRfY21kID0gc2VsZi5nZXRfZmluYWxpemVkX2NvbW1hbmQoJ2J1aWxkJykKLSAgICAgICAgICAgIHNlbGYuYnVpbGRfZGVzdCA9IGJ1aWxkX2NtZC5idWlsZF9kZXN0Ci0gICAgICAgIGlmIHNlbGYuaW5zdGFsbF9kb2MgaXMgTm9uZToKLSAgICAgICAgICAgIHNlbGYuaW5zdGFsbF9kb2MgPSBvcy5wYXRoLmpvaW4oc2VsZi5wcmVmaXgsIERFU1RESVIpCi0gICAgICAgIHByaW50KCdJTlNUQUxMJywgc2VsZi5idWlsZF9kZXN0LCAnLT4nLCBzZWxmLmluc3RhbGxfZG9jKQotCi0gICAgZGVmIHJ1bihzZWxmKToKLSAgICAgICAgc2VsZi5maW5hbGl6ZV9vcHRpb25zKCkKLSAgICAgICAgc2VsZi5lbnN1cmVfZmluYWxpemVkKCkKLSAgICAgICAgcHJpbnQoIlJ1bm5pbmcgSW5zdGFsbGVyIikKLSAgICAgICAgaW5zdGxvYyA9IHNlbGYuaW5zdGFsbF9kb2MKLSAgICAgICAgaWYgc2VsZi5yb290OgotICAgICAgICAgICAgaW5zdGxvYyA9IGNoYW5nZV9yb290KHNlbGYucm9vdCwgaW5zdGxvYykKLSAgICAgICAgc2VsZi5ta3BhdGgoaW5zdGxvYykKLSAgICAgICAgY29weV90cmVlKHNlbGYuYnVpbGRfZGVzdCwgaW5zdGxvYykKLSAgICAgICAgcHJpbnQoIkluc3RhbGxhdGlvbiBjb21wbGV0ZSIpCi0KLWRlZiBtdW5nZVZlcnNpb24oaW5maWxlLCBvdXRmaWxlKToKLSAgICBpID0gZmlsZShpbmZpbGUsJ3InKQotICAgIG8gPSBmaWxlKG91dGZpbGUsJ3cnKQotICAgIG8ud3JpdGUocmUuc3ViKCdcJFwoVkVSU0lPTlwpJyxzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ1ZFUlNJT04nKSxpLnJlYWQoKSkpCi0gICAgaS5jbG9zZSgpCi0gICAgby5jbG9zZSgpCi0KLWRlZiBtYWluKCk6Ci0gICAgIyB0dXJuIG9mZiB3YXJuaW5ncyB3aGVuIGRlcHJlY2F0ZWQgbW9kdWxlcyBhcmUgaW1wb3J0ZWQKLSMjICAgICAgaW1wb3J0IHdhcm5pbmdzCi0jIyAgICAgIHdhcm5pbmdzLmZpbHRlcndhcm5pbmdzKCJpZ25vcmUiLGNhdGVnb3J5PURlcHJlY2F0aW9uV2FybmluZykKLSAgICBzZXR1cChuYW1lID0gJ0RvY3VtZW50YXRpb24nLAotICAgICAgICAgICAgdmVyc2lvbiA9ICclZC4lZCcgJSBzeXMudmVyc2lvbl9pbmZvWzoyXSwKLSAgICAgICAgICAgIGNtZGNsYXNzID0geydpbnN0YWxsX2RhdGEnOkFIVkRvY0luc3RhbGwsICdidWlsZCc6RG9jQnVpbGR9LAotICAgICAgICAgICAgZGF0YV9maWxlcyA9IFsnZHVtbXknXSwKLSAgICAgICAgICAgICkKLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICBtYWluKCkKZGlmZiAtLWdpdCBhL01hYy9Ub29scy9idW5kbGVidWlsZGVyLnB5IGIvTWFjL1Rvb2xzL2J1bmRsZWJ1aWxkZXIucHkKaW5kZXggNmNjMTMwZi4uZjU2NzlkMyAxMDA3NTUKLS0tIGEvTWFjL1Rvb2xzL2J1bmRsZWJ1aWxkZXIucHkKKysrIGIvTWFjL1Rvb2xzL2J1bmRsZWJ1aWxkZXIucHkKQEAgLTI3MCw3ICsyNzAsNyBAQAogZGVsIF9fbG9hZAogIiIiCiAKLU1BWU1JU1NfTU9EVUxFUyA9IFsnbWFjJywgJ29zMicsICdudCcsICdudHBhdGgnLCAnZG9zJywgJ2Rvc3BhdGgnLAorTUFZTUlTU19NT0RVTEVTID0gWydtYWMnLCAnbnQnLCAnbnRwYXRoJywgJ2RvcycsICdkb3NwYXRoJywKICAgICAnd2luMzJhcGknLCAnY2UnLCAnX3dpbnJlZycsICdudHVybDJwYXRoJywgJ3NpdGVjdXN0b21pemUnLAogICAgICdvcmcucHl0aG9uLmNvcmUnLCAncmlzY29zJywgJ3Jpc2Nvc2Vudmlyb24nLCAncmlzY29zcGF0aCcKIF0KZGlmZiAtLWdpdCBhL01hYy9Ub29scy9wbGlzdGxpYl9nZW5lcmF0ZV90ZXN0ZGF0YS5weSBiL01hYy9Ub29scy9wbGlzdGxpYl9nZW5lcmF0ZV90ZXN0ZGF0YS5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wNTdiNjE3Ci0tLSAvZGV2L251bGwKKysrIGIvTWFjL1Rvb2xzL3BsaXN0bGliX2dlbmVyYXRlX3Rlc3RkYXRhLnB5CkBAIC0wLDAgKzEsMTAzIEBACisjIS91c3IvYmluL2VudiBweXRob24zCisKK2Zyb20gQ29jb2EgaW1wb3J0IE5TTXV0YWJsZURpY3Rpb25hcnksIE5TTXV0YWJsZUFycmF5LCBOU1N0cmluZywgTlNEYXRlLCBOU051bWJlcgorZnJvbSBDb2NvYSBpbXBvcnQgTlNQcm9wZXJ0eUxpc3RTZXJpYWxpemF0aW9uLCBOU1Byb3BlcnR5TGlzdE9wZW5TdGVwRm9ybWF0Citmcm9tIENvY29hIGltcG9ydCBOU1Byb3BlcnR5TGlzdFhNTEZvcm1hdF92MV8wLCBOU1Byb3BlcnR5TGlzdEJpbmFyeUZvcm1hdF92MV8wCitmcm9tIENvY29hIGltcG9ydCBDRlVVSURDcmVhdGVGcm9tU3RyaW5nLCBOU051bGwsIE5TVVVJRCwgQ0ZQcm9wZXJ0eUxpc3RDcmVhdGVEYXRhCitmcm9tIENvY29hIGltcG9ydCBOU1VSTAorCitpbXBvcnQgZGF0ZXRpbWUKK2Zyb20gY29sbGVjdGlvbnMgaW1wb3J0IE9yZGVyZWREaWN0CitpbXBvcnQgYmluYXNjaWkKKworRk9STUFUUz1bCisjICAgICgnb3BlbnN0ZXAnLCBOU1Byb3BlcnR5TGlzdE9wZW5TdGVwRm9ybWF0KSwKKyAgICAoJ3BsaXN0bGliLkZNVF9YTUwnLCBOU1Byb3BlcnR5TGlzdFhNTEZvcm1hdF92MV8wKSwKKyAgICAoJ3BsaXN0bGliLkZNVF9CSU5BUlknLCBOU1Byb3BlcnR5TGlzdEJpbmFyeUZvcm1hdF92MV8wKSwKK10KKworZGVmIG5zc3RyKHZhbHVlKToKKyAgICByZXR1cm4gTlNTdHJpbmcuYWxsb2MoKS5pbml0V2l0aFN0cmluZ18odmFsdWUpCisKKworZGVmIG1haW4oKToKKyAgICBwbCA9IE9yZGVyZWREaWN0KCkKKworICAgICMgTm90ZTogcGwgaXMgYW4gT3JkZXJlZERpY3QgdG8gY29udHJvbCB0aGUgb3JkZXIKKyAgICAjIG9mIGtleXMsIGFuZCBoZW5jZSBoYXZlIHNvbWUgY29udHJvbCBvbiB0aGUgc3RydWN0dXJlCisgICAgIyBvZiB0aGUgb3V0cHV0IGZpbGUuCisgICAgIyBOZXcga2V5cyBzaG91bGQgYmUgYWRkZWQgaW4gYWxwaGFiZXRpY2FsIG9yZGVyLgorCisgICAgc2Vjb25kcyA9IGRhdGV0aW1lLmRhdGV0aW1lKDIwMDQsIDEwLCAyNiwgMTAsIDMzLCAzMywgdHppbmZvPWRhdGV0aW1lLnRpbWV6b25lKGRhdGV0aW1lLnRpbWVkZWx0YSgwKSkpLnRpbWVzdGFtcCgpCisgICAgcGxbbnNzdHIoJ2FCaWdJbnQnKV0gPSAyICoqIDYzIC0gNDQKKyAgICBwbFtuc3N0cignYUJpZ0ludDInKV0gPSBOU051bWJlci5udW1iZXJXaXRoVW5zaWduZWRMb25nTG9uZ18oMiAqKiA2MyArIDQ0KQorICAgIHBsW25zc3RyKCdhRGF0ZScpXSA9IE5TRGF0ZS5kYXRlV2l0aFRpbWVJbnRlcnZhbFNpbmNlMTk3MF8oc2Vjb25kcykKKworICAgIHBsW25zc3RyKCdhRGljdCcpXSA9IGQgPSBPcmRlcmVkRGljdCgpCisgICAgZFtuc3N0cignYUZhbHNlVmFsdWUnKV0gPSBGYWxzZQorICAgIGRbbnNzdHIoJ2FUcnVlVmFsdWUnKV0gPSBUcnVlCisgICAgZFtuc3N0cignYVVuaWNvZGVWYWx1ZScpXSA9ICJNXHhlNHNzaWcsIE1hXHhkZiIKKyAgICBkW25zc3RyKCdhbm90aGVyU3RyaW5nJyldID0gIjxoZWxsbyAmICdoaScgdGhlcmUhPiIKKyAgICBkW25zc3RyKCdkZWVwZXJEaWN0JyldID0gZGQgPSBPcmRlcmVkRGljdCgpCisgICAgZGRbbnNzdHIoJ2EnKV0gPSAxNworICAgIGRkW25zc3RyKCdiJyldID0gMzIuNQorICAgIGRkW25zc3RyKCdjJyldID0gYSA9IE5TTXV0YWJsZUFycmF5LmFsbG9jKCkuaW5pdCgpCisgICAgYS5hcHBlbmQoMSkKKyAgICBhLmFwcGVuZCgyKQorICAgIGEuYXBwZW5kKG5zc3RyKCd0ZXh0JykpCisKKyAgICBwbFtuc3N0cignYUZsb2F0JyldID0gMC41CisKKyAgICBwbFtuc3N0cignYUxpc3QnKV0gPSBhID0gTlNNdXRhYmxlQXJyYXkuYWxsb2MoKS5pbml0KCkKKyAgICBhLmFwcGVuZChuc3N0cignQScpKQorICAgIGEuYXBwZW5kKG5zc3RyKCdCJykpCisgICAgYS5hcHBlbmQoMTIpCisgICAgYS5hcHBlbmQoMzIuNSkKKyAgICBhYSA9IE5TTXV0YWJsZUFycmF5LmFsbG9jKCkuaW5pdCgpCisgICAgYS5hcHBlbmQoYWEpCisgICAgYWEuYXBwZW5kKDEpCisgICAgYWEuYXBwZW5kKDIpCisgICAgYWEuYXBwZW5kKDMpCisKKyAgICBwbFtuc3N0cignYU5lZ2F0aXZlQmlnSW50JyldID0gLTgwMDAwMDAwMDAwCisgICAgcGxbbnNzdHIoJ2FOZWdhdGl2ZUludCcpXSA9IC01CisgICAgcGxbbnNzdHIoJ2FTdHJpbmcnKV0gPSBuc3N0cignRG9vZGFoJykKKworICAgIHBsW25zc3RyKCdhbkVtcHR5RGljdCcpXSA9IE5TTXV0YWJsZURpY3Rpb25hcnkuYWxsb2MoKS5pbml0KCkKKworICAgIHBsW25zc3RyKCdhbkVtcHR5TGlzdCcpXSA9IE5TTXV0YWJsZUFycmF5LmFsbG9jKCkuaW5pdCgpCisKKyAgICBwbFtuc3N0cignYW5JbnQnKV0gPSA3MjgKKworICAgIHBsW25zc3RyKCduZXN0ZWREYXRhJyldID0gYSA9IE5TTXV0YWJsZUFycmF5LmFsbG9jKCkuaW5pdCgpCisgICAgYS5hcHBlbmQoYicnJzxsb3RzIG9mIGJpbmFyeSBndW5rPlx4MDBceDAxXHgwMlx4MDM8bG90cyBvZiBiaW5hcnkgZ3Vuaz5ceDAwXHgwMVx4MDJceDAzPGxvdHMgb2YgYmluYXJ5IGd1bms+XHgwMFx4MDFceDAyXHgwMzxsb3RzIG9mIGJpbmFyeSBndW5rPlx4MDBceDAxXHgwMlx4MDM8bG90cyBvZiBiaW5hcnkgZ3Vuaz5ceDAwXHgwMVx4MDJceDAzPGxvdHMgb2YgYmluYXJ5IGd1bms+XHgwMFx4MDFceDAyXHgwMzxsb3RzIG9mIGJpbmFyeSBndW5rPlx4MDBceDAxXHgwMlx4MDM8bG90cyBvZiBiaW5hcnkgZ3Vuaz5ceDAwXHgwMVx4MDJceDAzPGxvdHMgb2YgYmluYXJ5IGd1bms+XHgwMFx4MDFceDAyXHgwMzxsb3RzIG9mIGJpbmFyeSBndW5rPlx4MDBceDAxXHgwMlx4MDMnJycpCisKKworICAgIHBsW25zc3RyKCdzb21lRGF0YScpXSA9IGInPGJpbmFyeSBndW5rPicKKworICAgIHBsW25zc3RyKCdzb21lTW9yZURhdGEnKV0gPSBiJycnPGxvdHMgb2YgYmluYXJ5IGd1bms+XHgwMFx4MDFceDAyXHgwMzxsb3RzIG9mIGJpbmFyeSBndW5rPlx4MDBceDAxXHgwMlx4MDM8bG90cyBvZiBiaW5hcnkgZ3Vuaz5ceDAwXHgwMVx4MDJceDAzPGxvdHMgb2YgYmluYXJ5IGd1bms+XHgwMFx4MDFceDAyXHgwMzxsb3RzIG9mIGJpbmFyeSBndW5rPlx4MDBceDAxXHgwMlx4MDM8bG90cyBvZiBiaW5hcnkgZ3Vuaz5ceDAwXHgwMVx4MDJceDAzPGxvdHMgb2YgYmluYXJ5IGd1bms+XHgwMFx4MDFceDAyXHgwMzxsb3RzIG9mIGJpbmFyeSBndW5rPlx4MDBceDAxXHgwMlx4MDM8bG90cyBvZiBiaW5hcnkgZ3Vuaz5ceDAwXHgwMVx4MDJceDAzPGxvdHMgb2YgYmluYXJ5IGd1bms+XHgwMFx4MDFceDAyXHgwMycnJworCisgICAgcGxbbnNzdHIoJ1x4YzViZW5yYWEnKV0gPSBuc3N0cigiVGhhdCB3YXMgYSB1bmljb2RlIGtleS4iKQorCisgICAgcHJpbnQoIlRFU1REQVRBPXsiKQorICAgIGZvciBmbXRfbmFtZSwgZm10X2tleSBpbiBGT1JNQVRTOgorICAgICAgICBkYXRhLCBlcnJvciA9IE5TUHJvcGVydHlMaXN0U2VyaWFsaXphdGlvbi5kYXRhV2l0aFByb3BlcnR5TGlzdF9mb3JtYXRfb3B0aW9uc19lcnJvcl8oCisgICAgICAgICAgICBwbCwgZm10X2tleSwgMCwgTm9uZSkKKyAgICAgICAgaWYgZGF0YSBpcyBOb25lOgorICAgICAgICAgICAgcHJpbnQoIkNhbm5vdCBzZXJpYWxpemUiLCBmbXRfbmFtZSwgZXJyb3IpCisKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByaW50KCIgICAgJXM6IGJpbmFzY2lpLmEyYl9iYXNlNjQoYicnJ1xuICAgICAgICAlcycnJyksIiUoZm10X25hbWUsIF9lbmNvZGVfYmFzZTY0KGJ5dGVzKGRhdGEpKS5kZWNvZGUoJ2FzY2lpJylbOi0xXSkpCisKKyAgICBwcmludCgifSIpCisgICAgcHJpbnQoKQorCitkZWYgX2VuY29kZV9iYXNlNjQocywgbWF4bGluZWxlbmd0aD02MCk6CisgICAgbWF4Ymluc2l6ZSA9IChtYXhsaW5lbGVuZ3RoLy80KSozCisgICAgcGllY2VzID0gW10KKyAgICBmb3IgaSBpbiByYW5nZSgwLCBsZW4ocyksIG1heGJpbnNpemUpOgorICAgICAgICBjaHVuayA9IHNbaSA6IGkgKyBtYXhiaW5zaXplXQorICAgICAgICBwaWVjZXMuYXBwZW5kKGJpbmFzY2lpLmIyYV9iYXNlNjQoY2h1bmspKQorICAgIHJldHVybiBiJyAgICAgICAgJy5qb2luKHBpZWNlcykKKworbWFpbigpCmRpZmYgLS1naXQgYS9NYWtlZmlsZS5wcmUuaW4gYi9NYWtlZmlsZS5wcmUuaW4KaW5kZXggZmRjYTM4ZS4uZTE5ZmMwMCAxMDA2NDQKLS0tIGEvTWFrZWZpbGUucHJlLmluCisrKyBiL01ha2VmaWxlLnByZS5pbgpAQCAtNzEsMTIgKzcxLDE3IEBACiBCQVNFQ0ZMQUdTPQlAQkFTRUNGTEFHU0AKIEJBU0VDUFBGTEFHUz0JQEJBU0VDUFBGTEFHU0AKIENPTkZJR1VSRV9DRkxBR1M9CUBDRkxBR1NACisjIENGTEFHU19OT0RJU1QgaXMgdXNlZCBmb3IgYnVpbGRpbmcgdGhlIGludGVycHJldGVyIGFuZCBzdGRsaWIgQyBleHRlbnNpb25zLgorIyBVc2UgaXQgd2hlbiBhIGNvbXBpbGVyIGZsYWcgc2hvdWxkIF9ub3RfIGJlIHBhcnQgb2YgdGhlIGRpc3R1dGlscyBDRkxBR1MKKyMgb25jZSBQeXRob24gaXMgaW5zdGFsbGVkIChJc3N1ZSAjMjExMjEpLgorQ09ORklHVVJFX0NGTEFHU19OT0RJU1Q9QENGTEFHU19OT0RJU1RACiBDT05GSUdVUkVfQ1BQRkxBR1M9CUBDUFBGTEFHU0AKIENPTkZJR1VSRV9MREZMQUdTPQlATERGTEFHU0AKICMgQXZvaWQgYXNzaWduaW5nIENGTEFHUywgTERGTEFHUywgZXRjLiBzbyB1c2VycyBjYW4gdXNlIHRoZW0gb24gdGhlCiAjIGNvbW1hbmQgbGluZSB0byBhcHBlbmQgdG8gdGhlc2UgdmFsdWVzIHdpdGhvdXQgc3RvbXBpbmcgdGhlIHByZS1zZXQKICMgdmFsdWVzLgogUFlfQ0ZMQUdTPQkkKEJBU0VDRkxBR1MpICQoT1BUKSAkKENPTkZJR1VSRV9DRkxBR1MpICQoQ0ZMQUdTKSAkKEVYVFJBX0NGTEFHUykKK1BZX0NGTEFHU19OT0RJU1Q9JChDT05GSUdVUkVfQ0ZMQUdTX05PRElTVCkgJChDRkxBR1NfTk9ESVNUKQogIyBCb3RoIENQUEZMQUdTIGFuZCBMREZMQUdTIG5lZWQgdG8gY29udGFpbiB0aGUgc2hlbGwncyB2YWx1ZSBmb3Igc2V0dXAucHkgdG8KICMgYmUgYWJsZSB0byBidWlsZCBleHRlbnNpb24gbW9kdWxlcyB1c2luZyB0aGUgZGlyZWN0b3JpZXMgc3BlY2lmaWVkIGluIHRoZQogIyBlbnZpcm9ubWVudCB2YXJpYWJsZXMKQEAgLTkxLDcgKzk2LDcgQEAKICMgRXh0cmEgQyBmbGFncyBhZGRlZCBmb3IgYnVpbGRpbmcgdGhlIGludGVycHJldGVyIG9iamVjdCBmaWxlcy4KIENGTEFHU0ZPUlNIQVJFRD1AQ0ZMQUdTRk9SU0hBUkVEQAogIyBDIGZsYWdzIHVzZWQgZm9yIGJ1aWxkaW5nIHRoZSBpbnRlcnByZXRlciBvYmplY3QgZmlsZXMKLVBZX0NPUkVfQ0ZMQUdTPQkkKFBZX0NGTEFHUykgJChQWV9DUFBGTEFHUykgJChDRkxBR1NGT1JTSEFSRUQpIC1EUHlfQlVJTERfQ09SRQorUFlfQ09SRV9DRkxBR1M9CSQoUFlfQ0ZMQUdTKSAkKFBZX0NGTEFHU19OT0RJU1QpICQoUFlfQ1BQRkxBR1MpICQoQ0ZMQUdTRk9SU0hBUkVEKSAtRFB5X0JVSUxEX0NPUkUKIAogCiAjIE1hY2hpbmUtZGVwZW5kZW50IHN1YmRpcmVjdG9yaWVzCkBAIC0xMjcsNyArMTMyLDYgQEAKICMgU3ltYm9scyB1c2VkIGZvciB1c2luZyBzaGFyZWQgbGlicmFyaWVzCiBTSExJQl9TVUZGSVg9CUBTSExJQl9TVUZGSVhACiBFWFRfU1VGRklYPQlARVhUX1NVRkZJWEAKLVNPPQkJJChTSExJQl9TVUZGSVgpCiBMRFNIQVJFRD0JQExEU0hBUkVEQCAkKFBZX0xERkxBR1MpCiBCTERTSEFSRUQ9CUBCTERTSEFSRURAICQoUFlfTERGTEFHUykKIExEQ1hYU0hBUkVEPQlATERDWFhTSEFSRURACkBAIC0xNDksMTIgKzE1MywyMSBAQAogTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUPUBDT05GSUdVUkVfTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUQAogQEVYUE9SVF9NQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVRAZXhwb3J0IE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVAogCisjIE9wdGlvbiB0byBpbnN0YWxsIHRvIHN0cmlwIGJpbmFyaWVzCitTVFJJUEZMQUc9LXMKKworIyBGbGFncyB0byBsaXBvIHRvIHByb2R1Y2UgYSAzMi1iaXQtb25seSB1bml2ZXJzYWwgZXhlY3V0YWJsZQorTElQT18zMkJJVF9GTEFHUz1ATElQT18zMkJJVF9GTEFHU0AKKwogIyBPcHRpb25zIHRvIGVuYWJsZSBwcmViaW5kaW5nIChmb3IgZmFzdCBzdGFydHVwIHByaW9yIHRvIE1hYyBPUyBYIDEwLjMpCiBPVEhFUl9MSUJUT09MX09QVD1AT1RIRVJfTElCVE9PTF9PUFRACiAKICMgRW52aXJvbm1lbnQgdG8gcnVuIHNoYXJlZCBweXRob24gd2l0aG91dCBpbnN0YWxsZWQgbGlicmFyaWVzCiBSVU5TSEFSRUQ9ICAgICAgIEBSVU5TSEFSRURACiAKKyMgZW5zdXJlcGlwIG9wdGlvbnMKK0VOU1VSRVBJUD0gICAgICBARU5TVVJFUElQQAorCiAjIE1vZGVzIGZvciBkaXJlY3RvcmllcywgZXhlY3V0YWJsZXMgYW5kIGRhdGEgZmlsZXMgY3JlYXRlZCBieSB0aGUKICMgaW5zdGFsbCBwcm9jZXNzLiAgRGVmYXVsdCB0byB1c2VyLW9ubHktd3JpdGFibGUgZm9yIGFsbCBmaWxlIHR5cGVzLgogRElSTU9ERT0JNzU1CkBAIC0yMTYsNiArMjI5LDEyIEBACiBQUk9GSUxFX1RBU0s9CSQoc3JjZGlyKS9Ub29scy9weWJlbmNoL3B5YmVuY2gucHkgLW4gMiAtLXdpdGgtZ2MgLS13aXRoLXN5c2NoZWNrCiAjUFJPRklMRV9UQVNLPQkkKHNyY2RpcikvTGliL3Rlc3QvcmVncnRlc3QucHkKIAorIyByZXBvcnQgZmlsZXMgZm9yIGdjb3YgLyBsY292IGNvdmVyYWdlIHJlcG9ydAorQ09WRVJBR0VfSU5GTz0JJChhYnNfYnVpbGRkaXIpL2NvdmVyYWdlLmluZm8KK0NPVkVSQUdFX1JFUE9SVD0kKGFic19idWlsZGRpcikvbGNvdi1yZXBvcnQKK0NPVkVSQUdFX1JFUE9SVF9PUFRJT05TPS0tbm8tYnJhbmNoLWNvdmVyYWdlIC0tdGl0bGUgIkNQeXRob24gbGNvdiByZXBvcnQiCisKKwogIyA9PT0gRGVmaW5pdGlvbnMgYWRkZWQgYnkgbWFrZXNldHVwID09PQogCiAKQEAgLTMxNyw3ICszMzYsOCBAQAogQVNUX0FTREw9CSQoc3JjZGlyKS9QYXJzZXIvUHl0aG9uLmFzZGwKIAogQVNETEdFTl9GSUxFUz0JJChzcmNkaXIpL1BhcnNlci9hc2RsLnB5ICQoc3JjZGlyKS9QYXJzZXIvYXNkbF9jLnB5Ci0jIFhYWCBOb3RlIHRoYXQgYSBidWlsZCBub3cgcmVxdWlyZXMgUHl0aG9uIGV4aXN0IGJlZm9yZSB0aGUgYnVpbGQgc3RhcnRzCisjIE5vdGUgdGhhdCBhIGJ1aWxkIG5vdyByZXF1aXJlcyBQeXRob24gdG8gZXhpc3QgYmVmb3JlIHRoZSBidWlsZCBzdGFydHMuCisjIFVzZSAiaGcgdG91Y2giIHRvIGZpeCB1cCBzY3Jld2VkIHVwIGZpbGUgbXRpbWVzIGluIGEgY2hlY2tvdXQuCiBBU0RMR0VOPQlAQVNETEdFTkAgJChzcmNkaXIpL1BhcnNlci9hc2RsX2MucHkKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKQEAgLTM2MSw2ICszODEsNyBAQAogCQlQeXRob24vcHlhcmVuYS5vIFwKIAkJUHl0aG9uL3B5Y3R5cGUubyBcCiAJCVB5dGhvbi9weWZwZS5vIFwKKwkJUHl0aG9uL3B5aGFzaC5vIFwKIAkJUHl0aG9uL3B5bWF0aC5vIFwKIAkJUHl0aG9uL3B5c3RhdGUubyBcCiAJCVB5dGhvbi9weXRob25ydW4ubyBcCkBAIC00NDQsNyArNDY1LDcgQEAKIAogIyBEZWZhdWx0IHRhcmdldAogYWxsOgkJYnVpbGRfYWxsCi1idWlsZF9hbGw6CSQoQlVJTERQWVRIT04pIG9sZHNoYXJlZG1vZHMgc2hhcmVkbW9kcyBnZGJob29rcyBNb2R1bGVzL190ZXN0ZW1iZWQKK2J1aWxkX2FsbDoJJChCVUlMRFBZVEhPTikgb2xkc2hhcmVkbW9kcyBzaGFyZWRtb2RzIGdkYmhvb2tzIE1vZHVsZXMvX3Rlc3RlbWJlZCBweXRob24tY29uZmlnCiAKICMgQ29tcGlsZSBhIGJpbmFyeSB3aXRoIGdjYyBwcm9maWxlIGd1aWRlZCBvcHRpbWl6YXRpb24uCiBwcm9maWxlLW9wdDoKQEAgLTQ1OSwyMCArNDgwLDYyIEBACiAJJChNQUtFKSBidWlsZF9hbGxfdXNlX3Byb2ZpbGUKIAogYnVpbGRfYWxsX2dlbmVyYXRlX3Byb2ZpbGU6Ci0JJChNQUtFKSBhbGwgQ0ZMQUdTPSIkKENGTEFHUykgLWZwcm9maWxlLWdlbmVyYXRlIiBMSUJTPSIkKExJQlMpIC1sZ2NvdiIKKwkkKE1BS0UpIGFsbCBDRkxBR1NfTk9ESVNUPSIkKENGTEFHUykgLWZwcm9maWxlLWdlbmVyYXRlIiBMREZMQUdTPSItZnByb2ZpbGUtZ2VuZXJhdGUiIExJQlM9IiQoTElCUykgLWxnY292IgogCiBydW5fcHJvZmlsZV90YXNrOgogCTogIyBGSVhNRTogY2FuJ3QgcnVuIGZvciBhIGNyb3NzIGJ1aWxkCiAJJChSVU5TSEFSRUQpIC4vJChCVUlMRFBZVEhPTikgJChQUk9GSUxFX1RBU0spCiAKIGJ1aWxkX2FsbF91c2VfcHJvZmlsZToKLQkkKE1BS0UpIGFsbCBDRkxBR1M9IiQoQ0ZMQUdTKSAtZnByb2ZpbGUtdXNlIC1mcHJvZmlsZS1jb3JyZWN0aW9uIgorCSQoTUFLRSkgYWxsIENGTEFHU19OT0RJU1Q9IiQoQ0ZMQUdTKSAtZnByb2ZpbGUtdXNlIC1mcHJvZmlsZS1jb3JyZWN0aW9uIgogCisjIENvbXBpbGUgYW5kIHJ1biB3aXRoIGdjb3YKKy5QSE9OWT1jb3ZlcmFnZSBjb3ZlcmFnZS1sY292IGNvdmVyYWdlLXJlcG9ydAogY292ZXJhZ2U6CiAJQGVjaG8gIkJ1aWxkaW5nIHdpdGggc3VwcG9ydCBmb3IgY292ZXJhZ2UgY2hlY2tpbmc6IgotCSQoTUFLRSkgY2xlYW4KKwkkKE1BS0UpIGNsZWFuIHByb2ZpbGUtcmVtb3ZhbAogCSQoTUFLRSkgYWxsIENGTEFHUz0iJChDRkxBR1MpIC1PMCAtcGcgLWZwcm9maWxlLWFyY3MgLWZ0ZXN0LWNvdmVyYWdlIiBMSUJTPSIkKExJQlMpIC1sZ2NvdiIKIAorY292ZXJhZ2UtbGNvdjoKKwlAZWNobyAiQ3JlYXRpbmcgQ292ZXJhZ2UgSFRNTCByZXBvcnQgd2l0aCBMQ09WOiIKKwlAcm0gLWYgJChDT1ZFUkFHRV9JTkZPKQorCUBybSAtcmYgJChDT1ZFUkFHRV9SRVBPUlQpCisJQGxjb3YgLS1jYXB0dXJlIC0tZGlyZWN0b3J5ICQoYWJzX2J1aWxkZGlyKSBcCisJICAgIC0tYmFzZS1kaXJlY3RvcnkgJChyZWFscGF0aCAkKGFic19idWlsZGRpcikpIFwKKwkgICAgLS1wYXRoICQocmVhbHBhdGggJChhYnNfc3JjZGlyKSkgXAorCSAgICAtLW91dHB1dC1maWxlICQoQ09WRVJBR0VfSU5GTykKKwk6ICMgcmVtb3ZlIDNyZCBwYXJ0eSBtb2R1bGVzIGFuZCBzeXN0ZW0gaGVhZGVycworCUBsY292IC0tcmVtb3ZlICQoQ09WRVJBR0VfSU5GTykgXAorCSAgICAnKi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpKi8qJyBcCisJICAgICcqL01vZHVsZXMvX2RlY2ltYWwvbGlibXBkZWMvKicgXAorCSAgICAnKi9Nb2R1bGVzL2V4cGF0LyonIFwKKwkgICAgJyovTW9kdWxlcy96bGliLyonIFwKKwkgICAgJyovSW5jbHVkZS8qJyBcCisJICAgICcvdXNyL2luY2x1ZGUvKicgXAorCSAgICAnL3Vzci9sb2NhbC9pbmNsdWRlLyonIFwKKwkgICAgLS1vdXRwdXQtZmlsZSAkKENPVkVSQUdFX0lORk8pCisJQGdlbmh0bWwgJChDT1ZFUkFHRV9JTkZPKSAtLW91dHB1dC1kaXJlY3RvcnkgJChDT1ZFUkFHRV9SRVBPUlQpIFwKKwkgICAgJChDT1ZFUkFHRV9SRVBPUlRfT1BUSU9OUykKKwlAZWNobworCUBlY2hvICJsY292IHJlcG9ydCBhdCAkKENPVkVSQUdFX1JFUE9SVCkvaW5kZXguaHRtbCIKKwlAZWNobworCitjb3ZlcmFnZS1yZXBvcnQ6CisJOiAjIGZvcmNlIHJlYnVpbGRpbmcgb2YgcGFyc2VyIGFuZCBpbXBvcnRsaWIKKwlAdG91Y2ggJChHUkFNTUFSX0lOUFVUKQorCUB0b3VjaCAkKHNyY2RpcikvTGliL2ltcG9ydGxpYi9fYm9vdHN0cmFwLnB5CisJOiAjIGJ1aWxkIHdpdGggY292ZXJhZ2UgaW5mbworCSQoTUFLRSkgY292ZXJhZ2UKKwk6ICMgcnVuIHRlc3RzLCBpZ25vcmUgZmFpbHVyZXMKKwkkKFRFU1RSVU5ORVIpICQoVEVTVE9QVFMpIHx8IHRydWUKKwk6ICMgYnVpbGQgbGNvdiByZXBvcnQKKwkkKE1BS0UpIGNvdmVyYWdlLWxjb3YKKworIyBSdW4gIkFyZ3VtZW50IENsaW5pYyIgb3ZlciBhbGwgc291cmNlIGZpbGVzCisjIChkZXBlbmRzIG9uIHB5dGhvbiBoYXZpbmcgYWxyZWFkeSBiZWVuIGJ1aWx0KQorLlBIT05ZPWNsaW5pYworY2xpbmljOiAkKEJVSUxEUFlUSE9OKQorCSQoUlVOU0hBUkVEKSAkKFBZVEhPTl9GT1JfQlVJTEQpIC4vVG9vbHMvY2xpbmljL2NsaW5pYy5weSAtLW1ha2UKIAogIyBCdWlsZCB0aGUgaW50ZXJwcmV0ZXIKICQoQlVJTERQWVRIT04pOglNb2R1bGVzL3B5dGhvbi5vICQoTElCUkFSWSkgJChMRExJQlJBUlkpICQoUFkzTElCUkFSWSkKQEAgLTQ4NCw4ICs1NDcsMTggQEAKICMgQ3JlYXRlIGJ1aWxkIGRpcmVjdG9yeSBhbmQgZ2VuZXJhdGUgdGhlIHN5c2NvbmZpZyBidWlsZC10aW1lIGRhdGEgdGhlcmUuCiAjIHB5YnVpbGRkaXIudHh0IGNvbnRhaW5zIHRoZSBuYW1lIG9mIHRoZSBidWlsZCBkaXIgYW5kIGlzIHVzZWQgZm9yCiAjIHN5cy5wYXRoIGZpeHVwIC0tIHNlZSBNb2R1bGVzL2dldHBhdGguYy4KKyMgU2luY2UgdGhpcyBzdGVwIHJ1bnMgYmVmb3JlIHNoYXJlZCBtb2R1bGVzIGFyZSBidWlsdCwgdHJ5IHRvIGF2b2lkIGJvb3RzdHJhcAorIyBwcm9ibGVtcyBieSBjcmVhdGluZyBhIGR1bW15IHB5YnVpbGRkaXIudHh0IGp1c3QgdG8gYWxsb3cgaW50ZXJwcmV0ZXIKKyMgaW5pdGlhbGl6YXRpb24gdG8gc3VjY2VlZC4gIEl0IHdpbGwgYmUgb3ZlcndyaXR0ZW4gYnkgZ2VuZXJhdGUtcG9zaXgtdmFycworIyBvciByZW1vdmVkIGluIGNhc2Ugb2YgZmFpbHVyZS4KIHB5YnVpbGRkaXIudHh0OiAkKEJVSUxEUFlUSE9OKQotCSQoUlVOU0hBUkVEKSAkKFBZVEhPTl9GT1JfQlVJTEQpIC1TIC1tIHN5c2NvbmZpZyAtLWdlbmVyYXRlLXBvc2l4LXZhcnMKKwlAZWNobyAibm9uZSIgPiAuL3B5YnVpbGRkaXIudHh0CisJJChSVU5TSEFSRUQpICQoUFlUSE9OX0ZPUl9CVUlMRCkgLVMgLW0gc3lzY29uZmlnIC0tZ2VuZXJhdGUtcG9zaXgtdmFycyA7XAorCWlmIHRlc3QgJCQ/IC1uZSAwIDsgdGhlbiBcCisJCWVjaG8gImdlbmVyYXRlLXBvc2l4LXZhcnMgZmFpbGVkIiA7IFwKKwkJcm0gLWYgLi9weWJ1aWxkZGlyLnR4dCA7IFwKKwkJZXhpdCAxIDsgXAorCWZpCiAKICMgQnVpbGQgdGhlIHNoYXJlZCBtb2R1bGVzCiAjIFVuZGVyIEdOVSBtYWtlLCBNQUtFRkxBR1MgYXJlIHNvcnRlZCBhbmQgbm9ybWFsaXplZDsgdGhlICdzJyBmb3IKQEAgLTY0Niw2ICs3MTksOCBAQAogTW9kdWxlcy9fdGVzdGVtYmVkLm86ICQoc3JjZGlyKS9Nb2R1bGVzL190ZXN0ZW1iZWQuYwogCSQoTUFJTkNDKSAtYyAkKFBZX0NPUkVfQ0ZMQUdTKSAtbyAkQCAkKHNyY2RpcikvTW9kdWxlcy9fdGVzdGVtYmVkLmMKIAorTW9kdWxlcy9fc3JlLm86ICQoc3JjZGlyKS9Nb2R1bGVzL19zcmUuYyAkKHNyY2RpcikvTW9kdWxlcy9zcmUuaCAkKHNyY2RpcikvTW9kdWxlcy9zcmVfY29uc3RhbnRzLmggJChzcmNkaXIpL01vZHVsZXMvc3JlX2xpYi5oCisKIE1vZHVsZXMvcG9zaXhtb2R1bGUubzogJChzcmNkaXIpL01vZHVsZXMvcG9zaXhtb2R1bGUuYyAkKHNyY2RpcikvTW9kdWxlcy9wb3NpeG1vZHVsZS5oCiAKIE1vZHVsZXMvZ3JwbW9kdWxlLm86ICQoc3JjZGlyKS9Nb2R1bGVzL2dycG1vZHVsZS5jICQoc3JjZGlyKS9Nb2R1bGVzL3Bvc2l4bW9kdWxlLmgKQEAgLTcxMywyNyArNzg4LDMxIEBACiAJCQkJJChzcmNkaXIpL09iamVjdHMvdW5pY29kZXR5cGVfZGIuaAogCiBCWVRFU1RSX0RFUFMgPSBcCi0JCSQoc3JjZGlyKS9JbmNsdWRlL2J5dGVzX21ldGhvZHMuaCBcCiAJCSQoc3JjZGlyKS9PYmplY3RzL3N0cmluZ2xpYi9jb3VudC5oIFwKIAkJJChzcmNkaXIpL09iamVjdHMvc3RyaW5nbGliL2N0eXBlLmggXAotCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvZXEuaCBcCiAJCSQoc3JjZGlyKS9PYmplY3RzL3N0cmluZ2xpYi9mYXN0c2VhcmNoLmggXAogCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvZmluZC5oIFwKLQkJJChzcmNkaXIpL09iamVjdHMvc3RyaW5nbGliL2ZpbmRfbWF4X2NoYXIuaCBcCisJCSQoc3JjZGlyKS9PYmplY3RzL3N0cmluZ2xpYi9qb2luLmggXAogCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvcGFydGl0aW9uLmggXAogCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvc3BsaXQuaCBcCiAJCSQoc3JjZGlyKS9PYmplY3RzL3N0cmluZ2xpYi9zdHJpbmdkZWZzLmggXAotCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvdHJhbnNtb2dyaWZ5LmggXAotCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvdW5pY29kZWRlZnMuaCBcCi0JCSQoc3JjZGlyKS9PYmplY3RzL3N0cmluZ2xpYi9sb2NhbGV1dGlsLmggXAotCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvdW5kZWYuaAorCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvdHJhbnNtb2dyaWZ5LmgKIAotVU5JQ09ERV9ERVBTID0gJChCWVRFU1RSX0RFUFMpIFwKK1VOSUNPREVfREVQUyA9IFwKIAkJJChzcmNkaXIpL09iamVjdHMvc3RyaW5nbGliL2FzY2lpbGliLmggXAogCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvY29kZWNzLmggXAorCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvY291bnQuaCBcCisJCSQoc3JjZGlyKS9PYmplY3RzL3N0cmluZ2xpYi9mYXN0c2VhcmNoLmggXAorCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvZmluZC5oIFwKKwkJJChzcmNkaXIpL09iamVjdHMvc3RyaW5nbGliL2ZpbmRfbWF4X2NoYXIuaCBcCisJCSQoc3JjZGlyKS9PYmplY3RzL3N0cmluZ2xpYi9sb2NhbGV1dGlsLmggXAorCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvcGFydGl0aW9uLmggXAorCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvcmVwbGFjZS5oIFwKKwkJJChzcmNkaXIpL09iamVjdHMvc3RyaW5nbGliL3NwbGl0LmggXAogCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvdWNzMWxpYi5oIFwKIAkJJChzcmNkaXIpL09iamVjdHMvc3RyaW5nbGliL3VjczJsaWIuaCBcCiAJCSQoc3JjZGlyKS9PYmplY3RzL3N0cmluZ2xpYi91Y3M0bGliLmggXAorCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvdW5kZWYuaCBcCiAJCSQoc3JjZGlyKS9PYmplY3RzL3N0cmluZ2xpYi91bmljb2RlX2Zvcm1hdC5oIFwKIAkJJChzcmNkaXIpL09iamVjdHMvc3RyaW5nbGliL3VuaWNvZGVkZWZzLmgKIApAQCAtNzUxLDkgKzgzMCw2IEBACiAKIFB5dGhvbi9jZXZhbC5vOiAkKE9QQ09ERVRBUkdFVFNfSCkgJChzcmNkaXIpL1B5dGhvbi9jZXZhbF9naWwuaAogCi1QeXRob24vZm9ybWF0dGVyX3VuaWNvZGUubzogJChzcmNkaXIpL1B5dGhvbi9mb3JtYXR0ZXJfdW5pY29kZS5jIFwKLQkJCQkkKEJZVEVTVFJfREVQUykKLQogUHl0aG9uL2Zyb3plbi5vOiBQeXRob24vaW1wb3J0bGliLmgKIAogT2JqZWN0cy90eXBlb2JqZWN0Lm86IE9iamVjdHMvdHlwZXNsb3RzLmluYwpAQCAtODIzLDYgKzg5OSw3IEBACiAJCSQoc3JjZGlyKS9JbmNsdWRlL3B5ZGVidWcuaCBcCiAJCSQoc3JjZGlyKS9JbmNsdWRlL3B5ZXJyb3JzLmggXAogCQkkKHNyY2RpcikvSW5jbHVkZS9weWZwZS5oIFwKKwkJJChzcmNkaXIpL0luY2x1ZGUvcHloYXNoLmggXAogCQkkKHNyY2RpcikvSW5jbHVkZS9weW1hdGguaCBcCiAJCSQoc3JjZGlyKS9JbmNsdWRlL3B5Z2V0b3B0LmggXAogCQkkKHNyY2RpcikvSW5jbHVkZS9weW1hY3JvLmggXApAQCAtOTAxLDE2ICs5NzgsMzggQEAKIAogUVVJQ0tURVNUT1BUUz0JJChURVNUT1BUUykgLXggdGVzdF9zdWJwcm9jZXNzIHRlc3RfaW8gdGVzdF9saWIydG8zIFwKIAkJdGVzdF9tdWx0aWJ5dGVjb2RlYyB0ZXN0X3VybGxpYjJfbG9jYWxuZXQgdGVzdF9pdGVydG9vbHMgXAotCQl0ZXN0X211bHRpcHJvY2Vzc2luZyB0ZXN0X21haWxib3ggdGVzdF9zb2NrZXQgdGVzdF9wb2xsIFwKKwkJdGVzdF9tdWx0aXByb2Nlc3NpbmdfZm9yayB0ZXN0X211bHRpcHJvY2Vzc2luZ19zcGF3biBcCisJCXRlc3RfbXVsdGlwcm9jZXNzaW5nX2ZvcmtzZXJ2ZXIgXAorCQl0ZXN0X21haWxib3ggdGVzdF9zb2NrZXQgdGVzdF9wb2xsIFwKIAkJdGVzdF9zZWxlY3QgdGVzdF96aXBmaWxlIHRlc3RfY29uY3VycmVudF9mdXR1cmVzCiBxdWlja3Rlc3Q6CWFsbCBwbGF0Zm9ybQogCQkkKFRFU1RSVU5ORVIpICQoUVVJQ0tURVNUT1BUUykKIAogCi1pbnN0YWxsOiBhbHRpbnN0YWxsIGJpbmluc3RhbGwgbWFuaW5zdGFsbAoraW5zdGFsbDogQEZSQU1FV09SS0lOU1RBTExGSVJTVEAgY29tbW9uaW5zdGFsbCBiaW5pbnN0YWxsIG1hbmluc3RhbGwgQEZSQU1FV09SS0lOU1RBTExMQVNUQAorCWlmIHRlc3QgIngkKEVOU1VSRVBJUCkiICE9ICJ4bm8iICA7IHRoZW4gXAorCQljYXNlICQoRU5TVVJFUElQKSBpbiBcCisJCQl1cGdyYWRlKSBlbnN1cmVwaXA9Ii0tdXBncmFkZSIgOzsgXAorCQkJaW5zdGFsbHwqKSBlbnN1cmVwaXA9IiIgOzsgXAorCQllc2FjOyBcCisJCSQoUlVOU0hBUkVEKSAkKFBZVEhPTl9GT1JfQlVJTEQpIC1tIGVuc3VyZXBpcCBcCisJCQkkJGVuc3VyZXBpcCAtLXJvb3Q9JChERVNURElSKS8gOyBcCisJZmkKIAotYWx0aW5zdGFsbDoJQEZSQU1FV09SS0FMVElOU1RBTExGSVJTVEAgYWx0YmluaW5zdGFsbCBsaWJpbnN0YWxsIGluY2xpbnN0YWxsIGxpYmFpbnN0YWxsIFwKLSAgICAgICAgICAgICAgICBzaGFyZWRpbnN0YWxsIG9sZHNoYXJlZGluc3RhbGwgYWx0bWFuaW5zdGFsbCBARlJBTUVXT1JLQUxUSU5TVEFMTExBU1RACithbHRpbnN0YWxsOiBjb21tb25pbnN0YWxsCisJaWYgdGVzdCAieCQoRU5TVVJFUElQKSIgIT0gInhubyIgIDsgdGhlbiBcCisJCWNhc2UgJChFTlNVUkVQSVApIGluIFwKKwkJCXVwZ3JhZGUpIGVuc3VyZXBpcD0iLS1hbHRpbnN0YWxsIC0tdXBncmFkZSIgOzsgXAorCQkJaW5zdGFsbHwqKSBlbnN1cmVwaXA9Ii0tYWx0aW5zdGFsbCIgOzsgXAorCQllc2FjOyBcCisJCSQoUlVOU0hBUkVEKSAkKFBZVEhPTl9GT1JfQlVJTEQpIC1tIGVuc3VyZXBpcCBcCisJCQkkJGVuc3VyZXBpcCAtLXJvb3Q9JChERVNURElSKS8gOyBcCisJZmkKKworY29tbW9uaW5zdGFsbDogIEBGUkFNRVdPUktBTFRJTlNUQUxMRklSU1RAIFwKKwkJYWx0YmluaW5zdGFsbCBsaWJpbnN0YWxsIGluY2xpbnN0YWxsIGxpYmFpbnN0YWxsIFwKKwkJc2hhcmVkaW5zdGFsbCBvbGRzaGFyZWRpbnN0YWxsIGFsdG1hbmluc3RhbGwgXAorCQlARlJBTUVXT1JLQUxUSU5TVEFMTExBU1RACiAKICMgSW5zdGFsbCBzaGFyZWQgbGlicmFyaWVzIGVuYWJsZWQgYnkgU2V0dXAKIERFU1RESVJTPQkkKGV4ZWNfcHJlZml4KSAkKExJQkRJUikgJChCSU5MSUJERVNUKSAkKERFU1RTSEFSRUQpCkBAIC05MzUsNyArMTAzNCw3IEBACiAKICMgSW5zdGFsbCB0aGUgaW50ZXJwcmV0ZXIgd2l0aCAkKFZFUlNJT04pIGFmZml4ZWQKICMgVGhpcyBnb2VzIGludG8gJChleGVjX3ByZWZpeCkKLWFsdGJpbmluc3RhbGw6ICQoQlVJTERQWVRIT04pCithbHRiaW5pbnN0YWxsOiAkKEJVSUxEUFlUSE9OKSBARlJBTUVXT1JLUFlUSE9OV0AKIAlAZm9yIGkgaW4gJChCSU5ESVIpICQoTElCRElSKTsgXAogCWRvIFwKIAkJaWYgdGVzdCAhIC1kICQoREVTVERJUikkJGk7IHRoZW4gXApAQCAtOTQ0LDE0ICsxMDQzLDE4IEBACiAJCWVsc2UJdHJ1ZTsgXAogCQlmaTsgXAogCWRvbmUKLQkkKElOU1RBTExfUFJPR1JBTSkgJChCVUlMRFBZVEhPTikgJChERVNURElSKSQoQklORElSKS9weXRob24kKExEVkVSU0lPTikkKEVYRSkKKwlpZiB0ZXN0ICIkKFBZVEhPTkZSQU1FV09SS0RJUikiID0gIm5vLWZyYW1ld29yayIgOyB0aGVuIFwKKwkJJChJTlNUQUxMX1BST0dSQU0pICQoQlVJTERQWVRIT04pICQoREVTVERJUikkKEJJTkRJUikvcHl0aG9uJChMRFZFUlNJT04pJChFWEUpOyBcCisJZWxzZSBcCisJCSQoSU5TVEFMTF9QUk9HUkFNKSAkKFNUUklQRkxBRykgTWFjL3B5dGhvbncgJChERVNURElSKSQoQklORElSKS9weXRob24kKExEVkVSU0lPTikkKEVYRSk7IFwKKwlmaQogCS1pZiB0ZXN0ICIkKFZFUlNJT04pIiAhPSAiJChMRFZFUlNJT04pIjsgdGhlbiBcCiAJCWlmIHRlc3QgLWYgJChERVNURElSKSQoQklORElSKS9weXRob24kKFZFUlNJT04pJChFWEUpIC1vIC1oICQoREVTVERJUikkKEJJTkRJUikvcHl0aG9uJChWRVJTSU9OKSQoRVhFKTsgXAogCQl0aGVuIHJtIC1mICQoREVTVERJUikkKEJJTkRJUikvcHl0aG9uJChWRVJTSU9OKSQoRVhFKTsgXAogCQlmaTsgXAogCQkoY2QgJChERVNURElSKSQoQklORElSKTsgJChMTikgcHl0aG9uJChMRFZFUlNJT04pJChFWEUpIHB5dGhvbiQoVkVSU0lPTikkKEVYRSkpOyBcCiAJZmkKLQlpZiB0ZXN0IC1mICQoTERMSUJSQVJZKTsgdGhlbiBcCisJaWYgdGVzdCAtZiAkKExETElCUkFSWSkgJiYgdGVzdCAiJChQWVRIT05GUkFNRVdPUktESVIpIiA9ICJuby1mcmFtZXdvcmsiIDsgdGhlbiBcCiAJCWlmIHRlc3QgLW4gIiQoRExMTElCUkFSWSkiIDsgdGhlbiBcCiAJCQkkKElOU1RBTExfU0hBUkVEKSAkKERMTExJQlJBUlkpICQoREVTVERJUikkKEJJTkRJUik7IFwKIAkJZWxzZSBcCkBAIC05NjUsNiArMTA2OCwxMiBAQAogCQlmaTsgXAogCWVsc2UJdHJ1ZTsgXAogCWZpCisJaWYgdGVzdCAieCQoTElQT18zMkJJVF9GTEFHUykiICE9ICJ4IiA7IHRoZW4gXAorCQlybSAtZiAkKERFU1RESVIpJChCSU5ESVIpcHl0aG9uJChWRVJTSU9OKS0zMiQoRVhFKTsgXAorCQlsaXBvICQoTElQT18zMkJJVF9GTEFHUykgXAorCQkJLW91dHB1dCAkKERFU1RESVIpJChCSU5ESVIpL3B5dGhvbiQoVkVSU0lPTiktMzIkKEVYRSkgXAorCQkJJChERVNURElSKSQoQklORElSKS9weXRob24kKFZFUlNJT04pJChFWEUpOyBcCisJZmkKIAogYmluaW5zdGFsbDogYWx0YmluaW5zdGFsbAogCS1pZiB0ZXN0IC1mICQoREVTVERJUikkKEJJTkRJUikvcHl0aG9uMyQoRVhFKSAtbyAtaCAkKERFU1RESVIpJChCSU5ESVIpL3B5dGhvbjMkKEVYRSk7IFwKQEAgLTk5MCw2ICsxMDk5LDEwIEBACiAJKGNkICQoREVTVERJUikkKEJJTkRJUik7ICQoTE4pIC1zIDJ0bzMtJChWRVJTSU9OKSAydG8zKQogCS1ybSAtZiAkKERFU1RESVIpJChCSU5ESVIpL3B5dmVudgogCShjZCAkKERFU1RESVIpJChCSU5ESVIpOyAkKExOKSAtcyBweXZlbnYtJChWRVJTSU9OKSBweXZlbnYpCisJaWYgdGVzdCAieCQoTElQT18zMkJJVF9GTEFHUykiICE9ICJ4IiA7IHRoZW4gXAorCQlybSAtZiAkKERFU1RESVIpJChCSU5ESVIpL3B5dGhvbjMtMzIkKEVYRSk7IFwKKwkJKGNkICQoREVTVERJUikkKEJJTkRJUik7ICQoTE4pIC1zIHB5dGhvbiQoVkVSU0lPTiktMzIkKEVYRSkgcHl0aG9uMy0zMiQoRVhFKSkgXAorCWZpCiAKICMgSW5zdGFsbCB0aGUgdmVyc2lvbmVkIG1hbnVhbCBwYWdlCiBhbHRtYW5pbnN0YWxsOgpAQCAtMTAxMCw5ICsxMTIzLDggQEAKIAkoY2QgJChERVNURElSKSQoTUFORElSKS9tYW4xOyAkKExOKSAtcyBweXRob24kKFZFUlNJT04pLjEgcHl0aG9uMy4xKQogCiAjIEluc3RhbGwgdGhlIGxpYnJhcnkKLVBMQVRESVI9CXBsYXQtJChNQUNIREVQKQotRVhUUkFQTEFURElSPSBARVhUUkFQTEFURElSQAotTUFDSERFUFM9CSQoUExBVERJUikgJChFWFRSQVBMQVRESVIpCitQTEFURElSPQlAUExBVERJUkAKK01BQ0hERVBTPQkkKFBMQVRESVIpCiBYTUxMSUJTVUJESVJTPSAgeG1sIHhtbC9kb20geG1sL2V0cmVlIHhtbC9wYXJzZXJzIHhtbC9zYXgKIExJQlNVQkRJUlM9CXRraW50ZXIgdGtpbnRlci90ZXN0IHRraW50ZXIvdGVzdC90ZXN0X3RraW50ZXIgXAogCQl0a2ludGVyL3Rlc3QvdGVzdF90dGsgc2l0ZS1wYWNrYWdlcyB0ZXN0IFwKQEAgLTEwMjIsMjggKzExMzQsMzEgQEAKIAkJdGVzdC9pbWdoZHJkYXRhIFwKIAkJdGVzdC9zdWJwcm9jZXNzZGF0YSB0ZXN0L3NuZGhkcmRhdGEgdGVzdC9zdXBwb3J0IFwKIAkJdGVzdC90cmFjZWRtb2R1bGVzIHRlc3QvZW5jb2RlZF9tb2R1bGVzIFwKLQkJdGVzdC9uYW1lc3BhY2VfcGtncyBcCi0JCXRlc3QvbmFtZXNwYWNlX3BrZ3MvYm90aF9wb3J0aW9ucyBcCi0JCXRlc3QvbmFtZXNwYWNlX3BrZ3MvYm90aF9wb3J0aW9ucy9mb28gXAotCQl0ZXN0L25hbWVzcGFjZV9wa2dzL25vdF9hX25hbWVzcGFjZV9wa2cgXAotCQl0ZXN0L25hbWVzcGFjZV9wa2dzL25vdF9hX25hbWVzcGFjZV9wa2cvZm9vIFwKLQkJdGVzdC9uYW1lc3BhY2VfcGtncy9wb3J0aW9uMSBcCi0JCXRlc3QvbmFtZXNwYWNlX3BrZ3MvcG9ydGlvbjEvZm9vIFwKLQkJdGVzdC9uYW1lc3BhY2VfcGtncy9wb3J0aW9uMiBcCi0JCXRlc3QvbmFtZXNwYWNlX3BrZ3MvcG9ydGlvbjIvZm9vIFwKLQkJdGVzdC9uYW1lc3BhY2VfcGtncy9wcm9qZWN0MSBcCi0JCXRlc3QvbmFtZXNwYWNlX3BrZ3MvcHJvamVjdDEvcGFyZW50IFwKLQkJdGVzdC9uYW1lc3BhY2VfcGtncy9wcm9qZWN0MS9wYXJlbnQvY2hpbGQgXAotCQl0ZXN0L25hbWVzcGFjZV9wa2dzL3Byb2plY3QyIFwKLQkJdGVzdC9uYW1lc3BhY2VfcGtncy9wcm9qZWN0Mi9wYXJlbnQgXAotCQl0ZXN0L25hbWVzcGFjZV9wa2dzL3Byb2plY3QyL3BhcmVudC9jaGlsZCBcCi0JCXRlc3QvbmFtZXNwYWNlX3BrZ3MvcHJvamVjdDMgXAotCQl0ZXN0L25hbWVzcGFjZV9wa2dzL3Byb2plY3QzL3BhcmVudCBcCi0JCXRlc3QvbmFtZXNwYWNlX3BrZ3MvcHJvamVjdDMvcGFyZW50L2NoaWxkIFwKLSAgICAgICAgICAgICAgICB0ZXN0L25hbWVzcGFjZV9wa2dzL21vZHVsZV9hbmRfbmFtZXNwYWNlX3BhY2thZ2UgXAotICAgICAgICAgICAgICAgIHRlc3QvbmFtZXNwYWNlX3BrZ3MvbW9kdWxlX2FuZF9uYW1lc3BhY2VfcGFja2FnZS9hX3Rlc3QgXAorCQl0ZXN0L3Rlc3RfaW1wb3J0bGliL25hbWVzcGFjZV9wa2dzIFwKKwkJdGVzdC90ZXN0X2ltcG9ydGxpYi9uYW1lc3BhY2VfcGtncy9ib3RoX3BvcnRpb25zIFwKKwkJdGVzdC90ZXN0X2ltcG9ydGxpYi9uYW1lc3BhY2VfcGtncy9ib3RoX3BvcnRpb25zL2ZvbyBcCisJCXRlc3QvdGVzdF9pbXBvcnRsaWIvbmFtZXNwYWNlX3BrZ3Mvbm90X2FfbmFtZXNwYWNlX3BrZyBcCisJCXRlc3QvdGVzdF9pbXBvcnRsaWIvbmFtZXNwYWNlX3BrZ3Mvbm90X2FfbmFtZXNwYWNlX3BrZy9mb28gXAorCQl0ZXN0L3Rlc3RfaW1wb3J0bGliL25hbWVzcGFjZV9wa2dzL3BvcnRpb24xIFwKKwkJdGVzdC90ZXN0X2ltcG9ydGxpYi9uYW1lc3BhY2VfcGtncy9wb3J0aW9uMS9mb28gXAorCQl0ZXN0L3Rlc3RfaW1wb3J0bGliL25hbWVzcGFjZV9wa2dzL3BvcnRpb24yIFwKKwkJdGVzdC90ZXN0X2ltcG9ydGxpYi9uYW1lc3BhY2VfcGtncy9wb3J0aW9uMi9mb28gXAorCQl0ZXN0L3Rlc3RfaW1wb3J0bGliL25hbWVzcGFjZV9wa2dzL3Byb2plY3QxIFwKKwkJdGVzdC90ZXN0X2ltcG9ydGxpYi9uYW1lc3BhY2VfcGtncy9wcm9qZWN0MS9wYXJlbnQgXAorCQl0ZXN0L3Rlc3RfaW1wb3J0bGliL25hbWVzcGFjZV9wa2dzL3Byb2plY3QxL3BhcmVudC9jaGlsZCBcCisJCXRlc3QvdGVzdF9pbXBvcnRsaWIvbmFtZXNwYWNlX3BrZ3MvcHJvamVjdDIgXAorCQl0ZXN0L3Rlc3RfaW1wb3J0bGliL25hbWVzcGFjZV9wa2dzL3Byb2plY3QyL3BhcmVudCBcCisJCXRlc3QvdGVzdF9pbXBvcnRsaWIvbmFtZXNwYWNlX3BrZ3MvcHJvamVjdDIvcGFyZW50L2NoaWxkIFwKKwkJdGVzdC90ZXN0X2ltcG9ydGxpYi9uYW1lc3BhY2VfcGtncy9wcm9qZWN0MyBcCisJCXRlc3QvdGVzdF9pbXBvcnRsaWIvbmFtZXNwYWNlX3BrZ3MvcHJvamVjdDMvcGFyZW50IFwKKwkJdGVzdC90ZXN0X2ltcG9ydGxpYi9uYW1lc3BhY2VfcGtncy9wcm9qZWN0My9wYXJlbnQvY2hpbGQgXAorICAgICAgICAgICAgICAgIHRlc3QvdGVzdF9pbXBvcnRsaWIvbmFtZXNwYWNlX3BrZ3MvbW9kdWxlX2FuZF9uYW1lc3BhY2VfcGFja2FnZSBcCisgICAgICAgICAgICAgICAgdGVzdC90ZXN0X2ltcG9ydGxpYi9uYW1lc3BhY2VfcGtncy9tb2R1bGVfYW5kX25hbWVzcGFjZV9wYWNrYWdlL2FfdGVzdCBcCisJCWFzeW5jaW8gXAorCQl0ZXN0L3Rlc3RfYXN5bmNpbyBcCiAJCWNvbGxlY3Rpb25zIGNvbmN1cnJlbnQgY29uY3VycmVudC9mdXR1cmVzIGVuY29kaW5ncyBcCiAJCWVtYWlsIGVtYWlsL21pbWUgdGVzdC90ZXN0X2VtYWlsIHRlc3QvdGVzdF9lbWFpbC9kYXRhIFwKKwkJZW5zdXJlcGlwIGVuc3VyZXBpcC9fYnVuZGxlZCBcCiAJCWh0bWwganNvbiB0ZXN0L3Rlc3RfanNvbiBodHRwIGRibSB4bWxycGMgXAogCQlzcWxpdGUzIHNxbGl0ZTMvdGVzdCBcCiAJCWxvZ2dpbmcgY3N2IHdzZ2lyZWYgdXJsbGliIFwKQEAgLTExNjEsMTAgKzEyNzYsMTkgQEAKIAlmaTsgXAogCWNkICQoc3JjZGlyKS9MaWIvJChQTEFURElSKTsgJChSVU5TSEFSRUQpIC4vcmVnZW4KIAotcHl0aG9uLWNvbmZpZzogJChzcmNkaXIpL01pc2MvcHl0aG9uLWNvbmZpZy5pbgorcHl0aG9uLWNvbmZpZzogJChzcmNkaXIpL01pc2MvcHl0aG9uLWNvbmZpZy5pbiBNaXNjL3B5dGhvbi1jb25maWcuc2gKIAkjIFN1YnN0aXR1dGlvbiBoYXBwZW5zIGhlcmUsIGFzIHRoZSBjb21wbGV0ZWx5LWV4cGFuZGVkIEJJTkRJUgogCSMgaXMgbm90IGF2YWlsYWJsZSBpbiBjb25maWd1cmUKLQlzZWQgLWUgInMsQEVYRU5BTUVALCQoQklORElSKS9weXRob24kKExEVkVSU0lPTikkKEVYRSksIiA8ICQoc3JjZGlyKS9NaXNjL3B5dGhvbi1jb25maWcuaW4gPnB5dGhvbi1jb25maWcKKwlzZWQgLWUgInMsQEVYRU5BTUVALCQoQklORElSKS9weXRob24kKExEVkVSU0lPTikkKEVYRSksIiA8ICQoc3JjZGlyKS9NaXNjL3B5dGhvbi1jb25maWcuaW4gPnB5dGhvbi1jb25maWcucHkKKwkjIFJlcGxhY2UgbWFrZWZpbGUgY29tcGF0LiB2YXJpYWJsZSByZWZlcmVuY2VzIHdpdGggc2hlbGwgc2NyaXB0IGNvbXBhdC4gb25lczsgJChWQVIpIC0+ICR7VkFSfQorCXNlZCAtZSAncyxcJCQoXChbQS1aYS16MC05X10qXCkpLFwkJFx7XDFcfSxnJyA8IE1pc2MvcHl0aG9uLWNvbmZpZy5zaCA+cHl0aG9uLWNvbmZpZworCSMgT24gRGFyd2luLCBhbHdheXMgdXNlIHRoZSBweXRob24gdmVyc2lvbiBvZiB0aGUgc2NyaXB0LCB0aGUgc2hlbGwKKwkjIHZlcnNpb24gZG9lc24ndCB1c2UgdGhlIGNvbXBpbGVyIGN1c3RvbWl6YXRpb25zIHRoYXQgYXJlIHByb3ZpZGVkCisJIyBpbiBweXRob24gKF9vc3hfc3VwcG9ydC5weSkuCisJaWYgdGVzdCBgdW5hbWUgLXNgID0gRGFyd2luOyB0aGVuIFwKKwkJY3AgcHl0aG9uLWNvbmZpZy5weSBweXRob24tY29uZmlnOyBcCisJZmkKKwogCiAjIEluc3RhbGwgdGhlIGluY2x1ZGUgZmlsZXMKIElOQ0xESVJTVE9NQUtFPSQoSU5DTFVERURJUikgJChDT05GSU5DTFVERURJUikgJChJTkNMVURFUFkpICQoQ09ORklOQ0xVREVQWSkKQEAgLTExODYsNyArMTMxMCw3IEBACiAKICMgSW5zdGFsbCB0aGUgbGlicmFyeSBhbmQgbWlzY2VsbGFuZW91cyBzdHVmZiBuZWVkZWQgZm9yIGV4dGVuZGluZy9lbWJlZGRpbmcKICMgVGhpcyBnb2VzIGludG8gJChleGVjX3ByZWZpeCkKLUxJQlBMPQkJJChMSUJERVNUKS9jb25maWctJChMRFZFUlNJT04pCitMSUJQTD0JCUBMSUJQTEAKIAogIyBwa2djb25maWcgZGlyZWN0b3J5CiBMSUJQQz0JCSQoTElCRElSKS9wa2djb25maWcKQEAgLTEyMjIsOCArMTM0Niw4IEBACiAJJChJTlNUQUxMX0RBVEEpIE1pc2MvcHl0aG9uLnBjICQoREVTVERJUikkKExJQlBDKS9weXRob24tJChWRVJTSU9OKS5wYwogCSQoSU5TVEFMTF9TQ1JJUFQpICQoc3JjZGlyKS9Nb2R1bGVzL21ha2VzZXR1cCAkKERFU1RESVIpJChMSUJQTCkvbWFrZXNldHVwCiAJJChJTlNUQUxMX1NDUklQVCkgJChzcmNkaXIpL2luc3RhbGwtc2ggJChERVNURElSKSQoTElCUEwpL2luc3RhbGwtc2gKKwkkKElOU1RBTExfU0NSSVBUKSBweXRob24tY29uZmlnLnB5ICQoREVTVERJUikkKExJQlBMKS9weXRob24tY29uZmlnLnB5CiAJJChJTlNUQUxMX1NDUklQVCkgcHl0aG9uLWNvbmZpZyAkKERFU1RESVIpJChCSU5ESVIpL3B5dGhvbiQoTERWRVJTSU9OKS1jb25maWcKLQlybSBweXRob24tY29uZmlnCiAJQGlmIFsgLXMgTW9kdWxlcy9weXRob24uZXhwIC1hIFwKIAkJImBlY2hvICQoTUFDSERFUCkgfCBzZWQgJ3MvXlwoLi4uXCkuKi9cMS8nYCIgPSAiYWl4IiBdOyB0aGVuIFwKIAkJZWNobzsgZWNobyAiSW5zdGFsbGluZyBzdXBwb3J0IGZpbGVzIGZvciBidWlsZGluZyBzaGFyZWQgZXh0ZW5zaW9uIG1vZHVsZXMgb24gQUlYOiI7IFwKQEAgLTEzMDUsNyArMTQyOSwxNCBAQAogZnJhbWV3b3JraW5zdGFsbGFwcHM6CiAJY2QgTWFjICYmICQoTUFLRSkgaW5zdGFsbGFwcHMgREVTVERJUj0iJChERVNURElSKSIKIAotIyBUaGlzIGluc3RhbGwgdGhlIHVuaXggcHl0aG9uIGFuZCBweXRob253IHRvb2xzIGluIC91c3IvbG9jYWwvYmluCisjIEJ1aWxkIHRoZSBib290c3RyYXAgZXhlY3V0YWJsZSB0aGF0IHdpbGwgc3Bhd24gdGhlIGludGVycHJldGVyIGluc2lkZQorIyBhbiBhcHAgYnVuZGxlIHdpdGhpbiB0aGUgZnJhbWV3b3JrLiAgVGhpcyBhbGxvd3MgdGhlIGludGVycHJldGVyIHRvCisjIHJ1biBPUyBYIEdVSSBBUElzLgorZnJhbWV3b3JrcHl0aG9udzoKKwljZCBNYWMgJiYgJChNQUtFKSBweXRob253CisKKyMgVGhpcyBpbnN0YWxscyB0aGUgcHl0aG9uKiBhbmQgb3RoZXIgYmluIHN5bWxpbmtzIGluICRwcmVmaXgvYmluIG9yIGluCisjIGEgYmluIGRpcmVjdG9yeSByZWxhdGl2ZSB0byB0aGUgZnJhbWV3b3JrIHJvb3QKIGZyYW1ld29ya2luc3RhbGx1bml4dG9vbHM6CiAJY2QgTWFjICYmICQoTUFLRSkgaW5zdGFsbHVuaXh0b29scyBERVNURElSPSIkKERFU1RESVIpIgogCkBAIC0xMzY5LDggKzE1MDAsMTIgQEAKIAlldGFncyBJbmNsdWRlLyouaDsgXAogCWZvciBpIGluICQoU1JDRElSUyk7IGRvIGV0YWdzIC1hICQkaS8qLltjaF07IGRvbmUKIAotIyBUb3VjaCBnZW5lcmF0ZWQgZmlsZXMKKyMgVGhpcyBmaXhlcyB1cCB0aGUgbXRpbWVzIG9mIGNoZWNrZWQtaW4gZ2VuZXJhdGVkIGZpbGVzLCBhc3N1bWluZyB0aGF0IHRoZXkKKyMgb25seSAqYXBwZWFyKiB0byBiZSBvdXRkYXRlZCBiZWNhdXNlIG9mIGNoZWNrb3V0IG9yZGVyLgorIyBUaGlzIGlzIHJ1biB3aGlsZSBwcmVwYXJpbmcgYSBzb3VyY2UgcmVsZWFzZSB0YXJiYWxsLCBhbmQgY2FuIGJlIHJ1biBtYW51YWxseQorIyB0byBhdm9pZCBib290c3RyYXAgaXNzdWVzLgogdG91Y2g6CisJY2QgJChzcmNkaXIpOyBcCiAJaGcgLS1jb25maWcgZXh0ZW5zaW9ucy50b3VjaD1Ub29scy9oZy9oZ3RvdWNoLnB5IHRvdWNoIC12CiAKICMgU2FuaXRhdGlvbiB0YXJnZXRzIC0tIGNsZWFuIGxlYXZlcyBsaWJyYXJpZXMsIGV4ZWN1dGFibGVzIGFuZCB0YWdzCkBAIC0xNDAzLDYgKzE1MzgsOCBAQAogCiBwcm9maWxlLXJlbW92YWw6CiAJZmluZCAuIC1uYW1lICcqLmdjPz8nIC1leGVjIHJtIC1mIHt9ICc7JworCXJtIC1mICQoQ09WRVJBR0VfSU5GTykKKwlybSAtcmYgJChDT1ZFUkFHRV9SRVBPUlQpCiAKIGNsb2JiZXI6IGNsZWFuIHByb2ZpbGUtcmVtb3ZhbAogCS1ybSAtZiAkKEJVSUxEUFlUSE9OKSAkKFBHRU4pICQoTElCUkFSWSkgJChMRExJQlJBUlkpICQoRExMTElCUkFSWSkgXApAQCAtMTQxMCw2ICsxNTQ3LDcgQEAKIAkJY29uZmlnLmNhY2hlIGNvbmZpZy5sb2cgcHljb25maWcuaCBNb2R1bGVzL2NvbmZpZy5jCiAJLXJtIC1yZiBidWlsZCBwbGF0Zm9ybQogCS1ybSAtcmYgJChQWVRIT05GUkFNRVdPUktESVIpCisJLXJtIC1mIHB5dGhvbi1jb25maWcucHkgcHl0aG9uLWNvbmZpZwogCiAjIE1ha2UgdGhpbmdzIGV4dHJhIGNsZWFuLCBiZWZvcmUgbWFraW5nIGEgZGlzdHJpYnV0aW9uOgogIyByZW1vdmUgYWxsIGdlbmVyYXRlZCBmaWxlcywgZXZlbiBNYWtlZmlsZVsucHJlXQpAQCAtMTQ4MSw3ICsxNjE5LDcgQEAKIC5QSE9OWTogZnJhbWV3b3JraW5zdGFsbCBmcmFtZXdvcmtpbnN0YWxsZnJhbWV3b3JrIGZyYW1ld29ya2luc3RhbGxzdHJ1Y3R1cmUKIC5QSE9OWTogZnJhbWV3b3JraW5zdGFsbG1hY2xpYiBmcmFtZXdvcmtpbnN0YWxsYXBwcyBmcmFtZXdvcmtpbnN0YWxsdW5peHRvb2xzCiAuUEhPTlk6IGZyYW1ld29ya2FsdGluc3RhbGx1bml4dG9vbHMgcmVjaGVjayBhdXRvY29uZiBjbGVhbiBjbG9iYmVyIGRpc3RjbGVhbgotLlBIT05ZOiBzbWVsbHkgZnVubnkgcGF0Y2hjaGVjayB0b3VjaCBhbHRtYW5pbnN0YWxsCisuUEhPTlk6IHNtZWxseSBmdW5ueSBwYXRjaGNoZWNrIHRvdWNoIGFsdG1hbmluc3RhbGwgY29tbW9uaW5zdGFsbAogLlBIT05ZOiBnZGJob29rcwogCiAjIElGIFlPVSBQVVQgQU5ZVEhJTkcgSEVSRSBJVCBXSUxMIEdPIEFXQVkKZGlmZiAtLWdpdCBhL01pc2MvQUNLUyBiL01pc2MvQUNLUwppbmRleCBjYzE5NGFiLi42MTMwNTY4IDEwMDY0NAotLS0gYS9NaXNjL0FDS1MKKysrIGIvTWlzYy9BQ0tTCkBAIC0xNiwyMCArMTYsMjcgQEAKIFJhaml2IEFicmFoYW0KIERhdmlkIEFicmFoYW1zCiBNYXJjIEFicmFtb3dpdHoKK0VsZGFyIEFidXNhbGltb3YKIFJvbiBBZGFtCitBbnRvbiBBZmFuYXN5ZXYKIEFsaSBBZnNoYXIKK05pdGlrYSBBZ2Fyd2FsCiBKaW0gQWhsc3Ryb20KIEZhcmhhbiBBaG1hZAogTWF0dGhldyBBaHJlbnMKIE5pciBBaWRlcworQWtpcmEKIFlhbml2IEFrbmluCiBKeXJraSBBbGFrdWlqYWxhCiBTdGV2ZSBBbGV4YW5kZXIKIEZyZWQgQWxsZW4KK0plZmYgQWxsZW4KIFJheSBBbGxlbgogQmlsbHkgRy4gQWxsaWUKIEtldmluIEFsdGlzCitTa3lsZXIgTGVpZ2ggQW1hZG9yCiBKb2UgQW1lbnRhCitSb3NlIEFtZXMKIEEuIEFtb3Jvc28KIE1hcmsgQW5hY2tlcgogU2hhc2h3YXQgQW5hbmQKQEAgLTQyLDggKzQ5LDggQEAKIEp1YW5jYXJsbyBBw7FlegogQ2hyaXMgQW5nZWxpY28KIErDqXLDqW15IEFuZ2VyCi1Bbmt1ciBBbmthbgogSm9uIEFuZ2xpbgorQW5rdXIgQW5rYW4KIEhlaWRpIEFubmV4c3RhZAogUmFtY2hhbmRyYSBBcHRlCiDDiXJpYyBBcmF1am8KQEAgLTU3LDYgKzY0LDcgQEAKIERvbm92YW4gQmFhcmRhCiBBcm5lIEJhYmVuaGF1c2VyaGVpZGUKIEF0dGlsYSBCYWJvCitNYXR0IEJhY2htYW5uCiBNYXJjaW4gQmFjaHJ5CiBBbGZvbnNvIEJhY2llcm8KIER3YXluZSBCYWlsZXkKQEAgLTcxLDYgKzc5LDcgQEAKIERhbmllbCBCYXJjbGF5CiBOaWNvbGFzIEJhcmVpbAogQ2hyaXMgQmFya2VyCitTdGV2ZW4gQmFya2VyCiBBbnRvbiBCYXJrb3Zza3kKIE5pY2sgQmFybmVzCiBRdWVudGluIEJhcm5lcwpAQCAtOTEsNiArMTAwLDcgQEAKIFNhbXVlbCBMLiBCYXllcgogRG9uYWxkIEJlYXVkcnkKIERhdmlkIEJlYXpsZXkKK0pvaG4gQmVjawogTmVhbCBCZWNrZXIKIFJvYmluIEJlY2tlcgogVG9yc3RlbiBCZWNrZXIKQEAgLTEyNCw2ICsxMzQsNyBAQAogTWljaGFlbCBCaXJ0d2VsbAogU3R1YXJ0IEJpc2hvcAogUm95IEJpeGxlcgorRGFuaWVsIEJsYWNrCiBKb25hdGhhbiBCbGFjawogUmVuYXVkIEJsYW5jaAogTWlrZSBCbGFuZApAQCAtMTQyLDYgKzE1Myw3IEBACiBGb3Jlc3QgQm9uZAogR3JlZ29yeSBCb25kCiBNYXRpYXMgQm9yZGVzZQorSm9uYXMgQm9yZ3N0csO2bQogSnVyamVuIEJvcwogUGV0ZXIgQm9zY2gKIERhbiBCb3N3ZWxsCkBAIC0xNTUsOSArMTY3LDExIEBACiBHZW9yZyBCcmFuZGwKIENocmlzdG9waGVyIEJyYW5ub24KIFRlcnJlbmNlIEJyYW5ub24KK1N2ZW4gQnJhdWNoCiBHZXJtw6FuIE0uIEJyYXZvCiBFcmlrIEJyYXkKIEJyaWFuIEJyYXppbAorRGVtaWFuIEJyZWNodAogRGF2ZSBCcmVubmFuCiBUb20gQnJpZGdtYW4KIEFudGhvbnkgQnJpZ2dzCkBAIC0xNjUsNiArMTc5LDcgQEAKIFRvYmlhcyBCcmluawogUmljaGFyZCBCcm9kaWUKIE1pY2hhZWwgQnJvZ2h0b24KK0FtbWFyIEJyb2hpCiBEYW5pZWwgQnJvdHNreQogSmVhbiBCcm91d2VycwogR2FyeSBTLiBCcm93bgpAQCAtMTc0LDkgKzE4OSwxMSBAQAogRnJhbmNpc2NvIE1hcnTDrW4gQnJ1Z3XDqQogSWFuIEJydW50bGV0dAogRmxvcmlzIEJydXlub29naGUKK01hdHQgQnJ5YW50CiBTdGFuIEJ1YnJvdXNraQogRXJpayBkZSBCdWVnZXIKIEphbi1IZWluIELDvGhybWFuCitMYXJzIEJ1aXRpbmNrCiBEaWNrIEJ1bHRlcm1hbgogQmlsbCBCdW1nYXJuZXIKIEppbW15IEJ1cmdldHQKQEAgLTE4Niw3ICsyMDMsOSBAQAogQWxhc3RhaXIgQnVydAogVGFybiBXZWlzbmVyIEJ1cnRvbgogTGVlIEJ1c2J5CitLYXRoZXJpbmUgQnVzY2gKIFJhbHBoIEJ1dGxlcgorTGF1cmVudCBEZSBCdXlzdAogWmFjaCBCeXJuZQogTmljb2xhcyBDYWRvdQogSnAgQ2FsZGVyb25lCkBAIC0xOTcsNyArMjE2LDkgQEAKIE1pa2UgQ2FybHRvbgogUGllcnJlIENhcnJpZXIKIFRlcnJ5IENhcnJvbGwKK0Vkd2FyZCBDYXRtdXIKIExvcmVuem8gTS4gQ2F0dWNjaQorQnJ1bm8gQ2F1ZXQKIERvbm4gQ2F2ZQogQ2hhcmxlcyBDYXphYm9uCiBKZXPDunMgQ2VhIEF2acOzbgpAQCAtMjA1LDYgKzIyNiw3IEBACiBNYXRlaiBDZXBsCiBDYXJsIENlcmVja2UKIE9jdGF2aWFuIENlcm5hCitNaWNoYWVsIENldHJ1bG8KIERhdmUgQ2hhbWJlcnMKIFBhc2NhbCBDaGFtYm9uCiBKb2huIENoYW5kbGVyCkBAIC0yMjAsMTcgKzI0MiwyMiBAQAogSmVycnkgQ2hlbgogTWljaGFlbCBDaGVybXNpZGUKIEluZ3JpZCBDaGV1bmcKK1RlcnJ5IENoaWEKIEFsYmVydCBDaGluLUEtWW91bmcKIEFkYWwgQ2hpcmlsaXVjCiBNYXR0IENoaXNob2xtCitMaXRhIENobwogQW5kZXJzIENocmlnc3Ryw7ZtCiBUb20gQ2hyaXN0aWFuc2VuCitSZW5lZSBDaHUKIFZhZGltIENodWd1bm92CiBNYXVybyBDaWNvZ25pbmkKIERhdmlkIENpbmVnZQogQ3JhaWcgQ2l0cm8KIEdpbGxlcyBDaXZhcmlvCiBDaHJpcyBDbGFyaworRGlhbmEgQ2xhcmtlCitMYXVyaWUgQ2xhcmstTWljaGFsZWsKIE1pa2UgQ2xhcmtzb24KIEFuZHJldyBDbGVnZwogQnJhZCBDbGVtZW50cwpAQCAtMjU2LDYgKzI4Myw3IEBACiBKYXNvbiBSLiBDb29tYnMKIEdhcnJldHQgQ29vcGVyCiBHcmVnIENvcGVsYW5kCitJYW4gQ29yZGFzY28KIEFsZG8gQ29ydGVzaQogRGF2aWQgQ29zdGFuem8KIFNjb3R0IENvdHRvbgpAQCAtMjc1LDYgKzMwMyw3IEBACiBKb2FxdWluIEN1ZW5jYSBBYmVsYQogSm9obiBDdWdpbmkKIFRvbSBDdWxsaXRvbgorUmHDumwgQ3VtcGxpZG8KIEFudG9uaW8gQ3VuaQogQnJpYW4gQ3VydGluCiBMaXNhbmRybyBEYWxjaW4KQEAgLTI4OSwxMiArMzE4LDE0IEBACiBKb25hdGhhbiBEYXN0ZWVsCiBQaWVycmUtWXZlcyBEYXZpZAogQS4gSmVzc2UgSmlyeXUgRGF2aXMKK01lcmxpam4gdmFuIERlZW4KIEpvaG4gRGVHb29kCiBOZWQgRGVpbHkKIFZpbmNlbnQgRGVsZnQKIEFybmF1ZCBEZWxvYmVsbGUKIEtvbnJhZCBEZWxvbmcKIEVyaWsgRGVtYWluZQorTWFydGluIERlbmdsZXIKIEpvaG4gRGVubmlzCiBMLiBQZXRlciBEZXV0c2NoCiBSb2dlciBEZXYKQEAgLTMwMyw2ICszMzQsNyBAQAogQ2FsZWIgRGV2ZXJhdXgKIENhdGhlcmluZSBEZXZsaW4KIFNjb3R0IERpYWwKK0Fsb24gRGlhbWFudAogVG9ieSBEaWNrZW5zb24KIE1hcmsgRGlja2luc29uCiBKYWNrIERpZWRlcmljaApAQCAtMzExLDEyICszNDMsMTQgQEAKIFl2ZXMgRGlvbm5lCiBEYW5pZWwgRGl0dG1hcgogSm9zaXAgRGpvbG9uZ2EKK1dhbHRlciBEw7Zyd2FsZAogSmFyb21pciBEb2xlY2VrCiBJc21haWwgRG9ubWV6CiBSb2JlcnQgRG9ub2h1ZQogTWFyY29zIERvbm9sbwogRGltYSBEb3JmbWFuCiBZdmVzIERvcmZzbWFuCitNaWNoYWVsIERvcm1hbgogQ2VzYXIgRG91YWR5CiBEZWFuIERyYWF5ZXIKIEZyZWQgTC4gRHJha2UsIEpyLgpAQCAtMzI0LDE5ICszNTgsMjIgQEAKIEpvaG4gRHVCb2lzCiBQYXVsIER1Ym9pcwogSmFjcXVlcyBEdWNhc3NlCitBbmRyZWkgRG9yaWFuIER1bWEKIEdyYWhhbSBEdW1wbGV0b24KIFF1aW5uIER1bmthbgogUm9iaW4gRHVubgogTHVrZSBEdW5zdGFuCiBWaXJnaWwgRHVwcmFzCitCcnVubyBEdXB1aXMKIEFuZHkgRHVzdG1hbgogR2FyeSBEdXphbgogRXVnZW5lIER2dXJlY2hlbnNraQorS2FybWVuIER5a3N0cmEKIEpvc2lwIER6b2xvbmdhCiBNYXhpbSBEenVtYW5lbmtvCi1XYWx0ZXIgRMO2cndhbGQKIEhhbnMgRWNrYXJkdAogUm9kb2xwaG8gRWNraGFyZHQKK1VscmljaCBFY2toYXJkdAogRGF2aWQgRWRlbHNvaG4KIEpvaG4gRWRtb25kcwogR3JhbnQgRWR3YXJkcwpAQCAtMzUxLDYgKzM4OCw3IEBACiBEYXZpZCBFbHkKIEplZmYgRXBsZXIKIFRvbSBFcHBlcmx5CitHw7ZrY2VuIEVyYXNsYW4KIFN0b2ZmZWwgRXJhc211cwogSsO8cmdlbiBBLiBFcmhhcmQKIE1pY2hhZWwgRXJuc3QKQEAgLTM3NywxNyArNDE1LDIwIEBACiBCb3JpcyBGZWxkCiBUaG9tYXMgRmVuemwKIE5pZWxzIEZlcmd1c29uCitGcmFuY2lzY28gRmVybsOhbmRleiBDYXN0YcOxbwogU2ViYXN0aWFuIEZlcm5hbmRlegogRmxvcmlhbiBGZXN0aQogSm9obiBGZXVlcnN0ZWluCiBDYXJsIEZleW5tYW4KIFZpbmNlbnQgRmlhY2sKK0FuYXN0YXNpYSBGaWxhdG92YQogVG9tZXIgRmlsaWJhCiBKZWZmcmV5IEZpbmtlbHN0ZWluCiBSdXNzZWxsIEZpbm4KIERhbiBGaW5uaWUKIE5pbHMgRmlzY2hiZWNrCiBGcmVkZXJpayBGaXgKK1RvbSBGbGFuYWdhbgogTWF0dCBGbGVtaW5nCiBIZXJuw6FuIE1hcnTDrW5leiBGb2ZmYW5pCiBBcnRlbSBGb2tpbgpAQCAtMzk1LDggKzQzNiwxMSBAQAogTWljaGFlbCBGb29yZAogQW1hdXJ5IEZvcmdlb3QgZCdBcmMKIERvdWcgRm9ydAorRXZlbnMgRm9ydHVuw6kKK0NocmlzIEZvc3RlcgogSm9obiBGb3VoeQogQW5kcmV3IEZyYW5jaXMKK01hdHQgRnJhbmsKIFN0ZWZhbiBGcmFua2UKIE1hcnRpbiBGcmFua2xpbgogS2VudCBGcmF6aWVyCkBAIC00MjYsOCArNDcwLDEwIEBACiBOaXRpbiBHYW5hdHJhCiBGcmVkIEdhbnNldmxlcwogTGFycyBNYXJpdXMgR2Fyc2hvbAorSmFrZSBHYXJ2ZXIKIERhbiBHYXNzCiBBbmRyZXcgR2F1bAorTWF0dGhpZXUgR2F1dGllcgogU3RlcGhlbiBNLiBHYXZhCiBYYXZpZXIgZGUgR2F5ZQogSGFycnkgSGVucnkgR2ViZWwKQEAgLTQ0Nyw2ICs0OTMsOCBAQAogTWF0dCBHaXVjYQogV2ltIEdsZW5uCiBNaWNoYWVsIEdvZGVyYmF1ZXIKK0thcmFuIEdvZWwKK0plcm9lbiBWYW4gR29leQogQ2hyaXN0b3BoIEdvaGxrZQogVGltIEdvbGRlbgogR3VpbGhlcm1lIEdvbsOnYWx2ZXMKQEAgLTQ1NSwxNyArNTAzLDIxIEBACiBTaGVsbGV5IEdvb2NoCiBEYXZpZCBHb29kZ2VyCiBIYW5zIGRlIEdyYWFmZgorVGltIEdyYWhhbQogTmF0aGFuaWVsIEdyYXkKIEVkZHkgRGUgR3JlZWYKIEdyYW50IEdyaWZmaW4KIEFuZHJlYSBHcmlmZmluaQogRHVuY2FuIEdyaXNieQorT2xpdmllciBHcmlzZWwKIEZhYmlhbiBHcm9mZmVuCiBFcmljIEdyb28KK0RhbmllbCBBbmRyYWRlIEdyb3BwZQogRGFnIEdydW5lYXUKIEZpbGlwIEdydXN6Y3p5xYRza2kKIFRob21hcyBHdWV0dGxlcgotQWppdGVzaCBHdXB0YQorWXV5YW5nIEd1bworQW51aiBHdXB0YQogTWljaGFlbCBHdXJhdmFnZQogTGFycyBHdXN0w6RiZWwKIFRob21hcyBHw7x0dGxlcgpAQCAtNDc2LDYgKzUyOCw3IEBACiBSYXNtdXMgSGFobgogUGV0ZXIgSGFpZ2h0CiBWw6FjbGF2IEhhaXNtYW4KK1piaWduaWV3IEhhbGFzCiBXYWxrZXIgSGFsZSBJVgogQm9iIEhhbGxleQogSmVzc2UgSGFsbGlvCkBAIC00OTEsNiArNTQ0LDcgQEAKIEx5bmRhIEhhcmRtYW4KIERlcmVrIEhhcmxhbmQKIEphc29uIEhhcnBlcgorRGF2aWQgSGFycmlnYW4KIEJyaWFuIEhhcnJpbmcKIEpvbmF0aGFuIEhhcnRsZXkKIFRyYXZpcyBCLiBIYXJ0d2VsbApAQCAtNTAxLDYgKzU1NSw3IEBACiBSeWNoYXJkZSBIYXdrZXMKIEJlbiBIYXlkZW4KIEpvY2hlbiBIYXllaworVGltIEhlYW5leQogSGVucmlrIEhlaW1idWVyZ2VyCiBDaHJpc3RpYW4gSGVpbWVzCiBUaG9tYXMgSGVsbGVyCkBAIC01MjAsMTkgKzU3NSwyMyBAQAogTWFnbnVzIEwuIEhldGxhbmQKIFJheW1vbmQgSGV0dGluZ2VyCiBLZXZhbiBIZXlkb24KK1dvdXRlciB2YW4gSGV5c3QKIEtlbHNleSBIaWdodG93ZXIKIEphc29uIEhpbGRlYnJhbmQKIFJpY2hpZSBIaW5kbGUKIEtvbnJhZCBIaW5zZW4KIERhdmlkIEhvYmxleQogVGltIEhvY2hiZXJnCitCZW5qYW1pbiBIb2Rnc29uCiBKb2VyZy1DeXJpbCBIb2VobGUKIEdyZWdvciBIb2ZmbGVpdAogQ2hyaXMgSG9mZm1hbgogU3RlZmFuIEhvZmZtZWlzdGVyCiBBbGJlcnQgSG9ma2FtcAorQ2hyaXMgSG9nYW4KIFRvbWFzIEhvZ2VyCiBKb25hdGhhbiBIb2dnCitLYW1pbGxhIEhvbGFuZGEKIFN0ZXZlIEhvbGRlbgogQWtpbnRheW8gSG9sZGVyCiBUaG9tYXMgSG9sZW5zdGVpbgpAQCAtNTQwLDYgKzU5OSw3IEBACiBTaGFuZSBIb2xsb3dheQogUnVuZSBIb2xtCiBUaG9tYXMgSG9sbWVzCitDcmFpZyBIb2xtcXVpc3QKIFBoaWxpcCBIb21idXJnCiBOYW9mdW1pIEhvbmRhCiBKZWZmcmV5IEhvbmlnCkBAIC01NTAsMTAgKzYxMCwxMiBAQAogTmFkYXYgSG9yZXNoCiBBbG9uIEhvcmV2CiBKYW4gSG9zYW5nCitKb25hdGhhbiBIb3NtZXIKIEFsYW4gSG91cmloYW5lCiBLZW4gSG93YXJkCiBCcmFkIEhvd2VzCiBNaWtlIEhveQorQ2hpdS1Ic2lhbmcgSHN1CiBDaGloLUhhbyBIdWFuZwogQ2hyaXN0aWFuIEh1ZG9uCiBMYXdyZW5jZSBIdWRzb24KQEAgLTU2MSw2ICs2MjMsNyBAQAogSmltIEh1Z3VuaW4KIEdyZWcgSHVtcGhyZXlzCiBFcmljIEh1c3MKK05laGFsIEh1c3NhaW4KIFRhaWh5dW4gSHdhbmcKIEplcmVteSBIeWx0b24KIEx1ZHdpZyBIw6RobmUKQEAgLTU3MywxMSArNjM2LDEzIEBACiBMYXJzIEltbWlzY2gKIEJvYmJ5IEltcG9sbG9uaWEKIE1lYWRvciBJbmdlCitQZXRlciBJbmdlYnJldHNvbgogVG9ueSBJbmdyYWxkaQogSm9obiBJbnRlcnJhbnRlCiBCb2IgSXBwb2xpdG8KIFJvZ2VyIElyd2luCiBBdHN1byBJc2hpbW90bworS2FzaWEgSmFjaGltCiBBZGFtIEphY2tzb24KIEJlbiBKYWNrc29uCiBQYXVsIEphY2tzb24KQEAgLTYwNiw2ICs2NzEsNyBAQAogRnJlZHJpayBKb2hhbnNzb24KIEdyZWdvcnkgSy4gSm9obnNvbgogS2VudCBKb2huc29uCitNaWNoYWVsIEpvaG5zb24KIFNpbW9uIEpvaG5zdG9uCiBNYXR0IEpvaW5lcgogVGhvbWFzIEpvbGxhbnMKQEAgLTYyNSwxNyArNjkxLDIwIEBACiBTYXJhaCBLLgogU3VubnkgSwogQm9odXNsYXYgS2FicmRhCitBbGV4ZXkgS2FjaGF5ZXYKIEJvYiBLYWhuCiBLdXJ0IEIuIEthaXNlcgogVGFtaXRvIEthaml5YW1hCiBKYW4gS2FsaXN6ZXdza2kKIFBldGVyIHZhbiBLYW1wZW4KK0phbiBLYW5pcwogUmFmZSBLYXBsYW4KIEphY29iIEthcGxhbi1Nb3NzCiBKYW5uZSBLYXJpbGEKIFBlciDDmHl2aW5kIEthcmxzZW4KIEFudG9uIEthc3lhbm92CiBMb3UgS2F0ZXMKK01ha290byBLYXRvCiBIaXJvYWtpIEthd2FpCiBTZWJhc3RpZW4gS2VpbQogUnlhbiBLZWxseQpAQCAtNjQ2LDEwICs3MTUsMTIgQEAKIE1hZ251cyBLZXNzbGVyCiBMYXdyZW5jZSBLZXN0ZWxvb3QKIFZpdmVrIEtoZXJhCitEaGlydSBLaG9saWEKIE1hZHMgS2lpbGVyaWNoCiBKYXNvbiBLaWxsZW4KIEphbiBLaW0KIFRhZWsgSm9vIEtpbQorU2FtIEtpbWJyZWwKIFcuIFRyZXZvciBLaW5nCiBQYXVsIEtpcHBlcwogU3RldmUgS2lyc2NoCkBAIC02NzQsOSArNzQ1LDkgQEAKIFZhanJhc2t5IEtvawogR3VpZG8gS29sbGVyaWUKIEphY2VrIEtvbmllY3pueQot0JzQsNGA0Log0JrQvtGA0LXQvdCx0LXRgNCzCiBBcmthZHkgS29wbHlhcm92CiBQZXRlciBBLiBLb3Jlbgor0JzQsNGA0Log0JrQvtGA0LXQvdCx0LXRgNCzCiBWbGFkIEtvcm9sZXYKIEpvc2VwaCBLb3NoeQogRGFuaWVsIEtvemFuCkBAIC03MDIsOSArNzczLDEyIEBACiBFcm5vIEt1dXNlbGEKIFJvc3MgTGFnZXJ3YWxsCiBDYW1lcm9uIExhaXJkCitEYXZpZCBMYW0KIFRob21hcyBMYW1iCitWYWxlcmllIExhbWJlcnQKIEplYW4tQmFwdGlzdGUgIkppYmEiIExhbXkKIFJvbmFuIExhbXkKK1BldGVyIExhbmRyeQogVG9yc3RlbiBMYW5kc2Nob2ZmCiDFgXVrYXN6IExhbmdhCiBUaW5vIExhbmdlCkBAIC03MTgsOCArNzkyLDExIEBACiBTaW1vbiBMYXcKIEp1bGlhIExhd2FsbAogQ2hyaXMgTGF3cmVuY2UKK0NocmlzIExhd3MKIEJyaWFuIExlYWlyCiBNYXRoaWV1IExlZHVjLUhhbWVsCitBbWFuZGluZSBMZWUKK0FudG9ueSBMZWUKIENocmlzdG9waGVyIExlZQogSW55ZW9sIExlZQogSmFtZXMgTGVlCkBAIC03MzUsMTYgKzgxMiwyMSBAQAogUm9iZXJ0IExlaG1hbm4KIFBldHJpIExlaHRpbmVuCiBMdWtlIEtlbm5ldGggQ2Fzc29uIExlaWdodG9uCitKb2huIExlaXRjaAogVHNoZXBhbmcgTGVraG9ua2hvYmUKIE1hcmMtQW5kcsOpIExlbWJ1cmcKIE1hdGV1c3ogTGVuaWsKIEpvaG4gTGVudG9uCiBLb3N0eWFudHluIExlc2NoZW5rbworQmVubm8gTGVzbGllCiBDaHJpc3RvcGhlciBUdXIgTGVzbmlld3NraS1MYWFzCiBBbGFpbiBMZXVmcm95CiBNYXJrIExldmluc29uCitNYXJrIExldml0dAorSXZhbiBMZXZraXZza3lpCiBXaWxsaWFtIExld2lzCiBBa2lyYSBMaQorUm9iZXJ0IExpCiBYdWFuamkgTGkKIFJvYmVydCB2YW4gTGllcmUKIFJvc3MgTGlnaHQKQEAgLTc2MiwzMSArODQ0LDQwIEBACiBNaXJrbyBMaXNzCiBOaWNrIExvY2t3b29kCiBTdGVwaGFuaWUgTG9ja3dvb2QKK01hcnRpbiB2b24gTMO2d2lzCiBIdWdvIExvcGVzIFRhdmFyZXMKK0d1aWxsZXJtbyBMw7NwZXotQW5nbGFkYQogQW5uZSBMb3JkCiBUb20gTG9yZWRvCiBKdXN0aW4gTG92ZQorTmVkIEphY2tzb24gTG92ZWx5CitQZXRlciBMb3ZldHQKIEphc29uIExvd2UKIFRvbnkgTG93bmRzCiBSYXkgTG95emFnYQorS2FuZy1IYW8gKEtlbm55KSBMdQogTHVrYXMgTHVlZwogTG9yZW4gTHVrZQogRnJlZHJpayBMdW5kaAogWmhvbmd5dWUgTHVvCiBNYXJrIEx1dHoKK1RhcmFzIEx5YXB1bgogSmltIEx5bmNoCiBNaWthZWwgTHluZ3ZpZwotTWFydGluIHZvbiBMw7Z3aXMKLUd1aWxsZXJtbyBMw7NwZXotQW5nbGFkYQogSmVmZiBNYWNEb25hbGQKIEpvaG4gTWFjaGluCiBBbmRyZXcgSSBNYWNJbnR5cmUKIFRpbSBNYWNLZW56aWUKIE5pY2sgTWFjbGFyZW4KIERvbiBNYWNNaWxsZW4KK1RvbWFzeiBNYcSHa293aWFrCitXb2xmZ2FuZyBNYWllcgogU3RldmUgTWFqZXdza2kKK01hcmVrIE1hamtvd3NraQogR3J6ZWdvcnogTWFrYXJld2ljegogRGF2aWQgTWFsY29sbQorR3JlZyBNYWxjb2xtCitXaWxsaWFtIE1hbGxhcmQKIEtlbiBNYW5oZWltZXIKIFZsYWRpbWlyIE1hcmFuZ296b3YKIENvbGluIE1hcmMKQEAgLTc5NywxOSArODg4LDIzIEBACiBBbGV4IE1hcnRlbGxpCiBBbnRob255IE1hcnRpbgogT3dlbiBNYXJ0aW4KK1NpZG5leSBTYW4gTWFydMOtbgogV2VzdGxleSBNYXJ0w61uZXoKIFPDqWJhc3RpZW4gTWFydGluaQotU2lkbmV5IFNhbiBNYXJ0w61uCiBSb2dlciBNYXNzZQogTmljayBNYXRoZXdzb24KIFNpbW9uIE1hdGhpZXUKIExhdXJhIE1hdHNvbgogR3JhaGFtIE1hdHRoZXdzCittYXR0aXAKIE1hcnRpbiBNYXR1c2lhawogRGlldGVyIE1hdXJlcgogRGFuaWVsIE1heQogTWFkaXNvbiBNYXkKK0x1Y2FzIE1heXN0cmUKIEFybmF1ZCBNYXppbgorUGFtIE1jQSdOdWx0eQorTWF0dCBNY0NsdXJlCiBSZWJlY2NhIE1jQ3JlYXJ5CiBLaXJrIE1jRG9uYWxkCiBDaHJpcyBNY0Rvbm91Z2gKQEAgLTgzMCwxNSArOTI1LDE2IEBACiBFemlvIE1lbG90dGkKIERvdWcgTWVubmVsbGEKIEJyaWFuIE1lcnJlbGwKK0FsZXhpcyBNw6l0YWlyZWF1CiBMdWtlIE1ld2J1cm4KIENhcmwgTWV5ZXIKIE1pa2UgTWV5ZXIKIFBpb3RyIE1leWVyCi1BbGV4aXMgTcOpdGFpcmVhdQogU3RldmVuIE1pYWxlCi1UcmVudCBNaWNrCiBKYXNvbiBNaWNoYWxza2kKIEZyYW5jayBNaWNoZWEKK1ZpbmNlbnQgTWljaGVsCitUcmVudCBNaWNrCiBUb20gTWlkZGxldG9uCiBUaG9tYXMgTWllZGVtYQogU3RhbiBNaWhhaQpAQCAtODQ5LDYgKzk0NSw3IEBACiBEYW1pZW4gTWlsbGVyCiBKYXNvbiBWLiBNaWxsZXIKIEpheSBULiBNaWxsZXIKK0thdGllIE1pbGxlcgogUm9tYW4gTWlsbmVyCiBKdWxpZW4gTWlvdHRlCiBBbmRyaWkgVi4gTWlzaGtvdnNreWkKQEAgLTg1OCw2ICs5NTUsNyBAQAogRmxvcmlhbiBNbGFkaXRzY2gKIERvdWcgTW9lbgogVGhlIERyYWdvbiBEZSBNb25zeW5lCitCYXN0aWVuIE1vbnRhZ25lCiBTa2lwIE1vbnRhbmFybwogUGV0ZXIgTW9vZHkKIFBhdWwgTW9vcmUKQEAgLTg2NSw2ICs5NjMsNyBAQAogQmVuIE1vcmdhbgogRGVyZWsgTW9ycgogSmFtZXMgQSBNb3JyaXNvbgorTWFydGluIE1vcnJpc29uCiBEZXJlayBNY1RhdmlzaCBNb3VuY2UKIEFsZXNzYW5kcm8gTW91cmEKIFBhYmxvIE1vdXpvCkBAIC04NzksNiArOTc4LDcgQEAKIExvdWlzIE11bnJvCiBSLiBEYXZpZCBNdXJyYXkKIE1hdHRpIE3DpGtpCitKw7ZyZyBNw7xsbGVyCiBEYWxlIE5hZ2F0YQogSm9obiBOYWdsZQogVGFrYWhpcm8gTmFrYXlhbWEKQEAgLTg5MCw2ICs5OTAsNyBAQAogVHJlbnQgTmVsc29uCiBDaGFkIE5ldHplcgogTWF4IE5ldW5ow7ZmZmVyCitBbnRob24gdmFuIGRlciBOZXV0CiBHZW9yZ2UgTmV2aWxsZS1OZWlsCiBIaWV1IE5ndXllbgogSm9oYW5uZXMgTmljb2xhaQpAQCAtOTE3LDYgKzEwMTgsNyBAQAogSmFtZXMgT2FrbGV5CiBFbGVuYSBPYXQKIEpvbiBPYmVyaGVpZGUKK01pbGFuIE9iZXJraXJjaAogUGFzY2FsIE9iZXJuZG9lcmZlcgogSmVmZnJleSBPbGxpZQogQWRhbSBPbHNlbgpAQCAtOTI2LDEyICsxMDI4LDEzIEBACiBUb21hcyBPcHBlbHN0cnVwCiBKYXNvbiBPcmVuZG9yZmYKIERvdWdsYXMgT3JyCitXaWxsaWFtIE9ycgogTWljaGVsZSBPcnLDuQogT2xlZyBPc2hteWFuCiBEZW5pcyBTLiBPdGtpZGFjaAogUGV0ZXIgT3R0ZW4KIE1pY2hhZWwgT3R0ZW5lZGVyCi1SLiBNLiBPdWRrZXJrCitSaWNoYXJkIE91ZGtlcmsKIFJ1c3NlbCBPd2VuCiBKb29uYXMgUGFhbGFzbWFhCiBNYXJ0aW4gUGFja21hbgpAQCAtOTQwLDcgKzEwNDMsMTIgQEAKIE1pa2UgUGFsbAogVG9kZCBSLiBQYWxtZXIKIEp1YW4gRGF2aWQgSWLDocOxZXogUGFsb21hcgorTmljb2xhIFBhbHVtYm8KIEphbiBQYWx1cworWW9uZ3poaSBQYW4KK01hcnRpbiBQYW50ZXIKK01hdGhpYXMgUGFuemVuYsO2Y2sKK01hcmNvIFBhb2xpbmkKIE0uIFBhcGlsbG9uCiBQZXRlciBQYXJlbnRlCiBBbGV4YW5kcmUgUGFyZW50ZWF1CkBAIC05NDksNiArMTA1Nyw3IEBACiBIZWlra2kgUGFydGFuZW4KIEhhcnJpIFBhc2FuZW4KIEdhw6tsIFBhc2dyaW1hdWQKK0FzaGlzaCBOaXRpbiBQYXRpbAogUmFuZHkgUGF1c2NoCiBTYW11ZWxlIFBlZHJvbmkKIEp1c3RpbiBQZWVsCkBAIC05NjcsOCArMTA3NiwxMCBAQAogQmVuamFtaW4gUGV0ZXJzb24KIEpvZSBQZXRlcnNvbgogQ2hyaXMgUGV0cmlsbGkKK1JvdW1lbiBQZXRyb3YKIEJqb3JuIFBldHRlcnNlbgogSnVzdGluIEQuIFBldHRpdAorRXNhIFBldWhhCiBSb25ueSBQZmFubnNjaG1pZHQKIEdlb2ZmIFBoaWxicmljawogR2F2cmllIFBoaWxpcHNvbgpAQCAtOTgzLDMzICsxMDk0LDQ1IEBACiBUb20gUGluY2tuZXkKIFphY2ggUGluY3VzCiBNaWNoYWVsIFBpb3Ryb3dza2kKK1plcm8gUGlyYWV1cwogQW50b2luZSBQaXRyb3UKIEplYW4tRnJhbsOnb2lzIFBpw6lyb25uZQogT2xlZyBQbGFraG90bnl1awogUmVtaSBQb2ludGVsCitKb24gUG9sZXIKK0FyaWVsIFBvbGlhawogR3VpbGhlcm1lIFBvbG8KK0lsbGlhIFBvbG9zdWtoaW4KIE1pY2hhZWwgUG9tcmFuaW5nCiBNYXJ0aW4gUG9vbAogSXVzdGluIFBvcAogQ2xhdWRpdSBQb3BhCiBKb2huIFBvcHBsZXdlbGwKK01hdGhldXMgVmllaXJhIFBvcnRlbGEKK0RhdmluIFBvdHRzCiBHdWlsbGF1bWUgUHJhdHRlCitGbG9yaWFuIFByZWluc3RvcmZlcgogQW1yaXQgUHJlbQogUGF1bCBQcmVzY29kCiBEb25vdmFuIFByZXN0b24KIFBhdWwgUHJpY2UKK0l1bGlpYSBQcm9za3VybmlhCitEb3JpYW4gUHVsYQogSnlya2kgUHVsbGlhaW5lbgogU3RldmUgUHVyY2VsbAogRWR1YXJkbyBQw6lyZXoKIEZlcm5hbmRvIFDDqXJlegorS2V2aW4gSmluZyBRaXUKIFBpZXJyZSBRdWVudGVsCiBCcmlhbiBRdWlubGFuCiBBbmRlcnMgUXZpc3QKIFRob21hcyBSYWNoZWwKK1JhbSBSYWNodW0KIErDqXLDtG1lIFJhZGl4CiBCdXJ0b24gUmFkb25zCiBKZWZmIFJhbW5hbmkKIEJyb2RpZSBSYW8KK1NlbmtvIFJhc2ljCiBBbnR0aSBSYXNpbmVuCiBOaWtvbGF1cyBSYXRoCiBTcmlkaGFyIFJhdG5ha3VtYXIKQEAgLTEwMzUsNiArMTE1OCw3IEBACiBGbMOhdmlvIFJpYmVpcm8KIEZyYW5jZXNjbyBSaWNjaWFyZGkKIFRpbSBSaWNlCitNYXJ0aW4gUmljaGFyZAogSmFuIFBpZXRlciBSaWVnZWwKIEFybWluIFJpZ28KIEFyYyBSaWxleQpAQCAtMTA0Miw4ICsxMTY2LDkgQEAKIEplYW4tQ2xhdWRlIFJpbWJhdWx0CiBWbGFkIFJpc2N1dGlhCiBXZXMgUmlzaGVsCi1EYW4gUml0aQorRGFuaWVsIFJpdGkKIEp1YW4gTS4gQmVsbG8gUml2YXMKK01vaGQgU2FuYWQgWmFraSBSaXp2aQogRGF2aWRlIFJpenpvCiBBbnRob255IFJvYWNoCiBDYXJsIFJvYmJlbgpAQCAtMTA2MiwxMiArMTE4NywxNCBAQAogQ2FzZSBSb29sZQogVGltb3RoeSBSb3Njb2UKIEVyaWsgUm9zZQorTWFyayBSb3NlbWFuCiBKaW0gUm9za2luZAogQnJpYW4gUm9zbmVyCiBHdWlkbyB2YW4gUm9zc3VtCiBKdXN0IHZhbiBSb3NzdW0KIEh1Z28gdmFuIFJvc3N1bQogU2Fza2lhIHZhbiBSb3NzdW0KK0NsZW1lbnQgUm91YXVsdAogRG9uYWxkIFdhbGxhY2UgUm91c2UgSUkKIExpYW0gUm91dHQKIFRvZGQgUm92aXRvCkBAIC0xMDg0LDcgKzEyMTEsOSBAQAogTWFyayBSdXNzZWxsCiBSdXN0eSBSdXNzZWxsCiBOaWNrIFJ1c3NvCitKYW1lcyBSdXRoZXJmb3JkCiBDaHJpcyBSeWxhbmQKK0Jlcm50IFLDuHNrYXIgQnJlbm5hCiBDb25zdGFudGluYSBTLgogUGF0cmljayBTYWJpbgogU8OpYmFzdGllbiBTYWJsw6kKQEAgLTExMDIsOCArMTIzMSw5IEBACiBUeSBTYXJuYQogSHVnaCBTYXNzZQogQm9iIFNhdmFnZQorRGF2ZSBTYXd5ZXIKIEJlbiBTYXllcgotc2J0CitMdWNhIFNiYXJkZWxsYQogTWFyY28gU2NhdGFnbGluaQogQW5kcmV3IFNjaGFhZgogTWljaGFlbCBTY2hhcmYKQEAgLTExMjMsNiArMTI1Myw3IEBACiBDaGFkIEouIFNjaHJvZWRlcgogQ2hyaXN0aWFuIFNjaHViZXJ0CiBTYW0gU2NodWxlbmJ1cmcKK0FuZHJlYXMgU2Nod2FiCiBTdGVmYW4gU2Nod2FyemVyCiBEaWV0bWFyIFNjaHdlcnRiZXJnZXIKIEZlZGVyaWNvIFNjaHdpbmR0CkBAIC0xMTQwLDEwICsxMjcxLDEyIEBACiBQZXRlIFNldmFuZGVyCiBEZW5pcyBTZXZlcnNvbgogSWFuIFNleWVyCitEbWl0cnkgU2hhY2huZXYKIERhbmllbCBTaGFoYWYKLUhhIFNoYW8KIE1hcmsgU2hhbm5vbgorSGEgU2hhbwogUmljaGFyZCBTaGFwaXJvCitWYXJ1biBTaGFybWEKIFZsYWQgU2hjaGVyYmluYQogSnVzdGluIFNoZWVoeQogQ2hhcmxpZSBTaGVwaGVyZApAQCAtMTE1Miw2ICsxMjg1LDggQEAKIFBldGUgU2hpbm5lcnMKIE1pY2hhZWwgU2hpcGxldHQKIEpvaG4gVy4gU2hpcG1hbgorU2hpeWFvIE1hCitBbGV4IFNoa29wCiBKb2VsIFNocHJlbnR6CiBZdWUgU2h1YWlqaWUKIFRlcnJlbCBTaHVtd2F5CkBAIC0xMTY4LDExICsxMzAzLDE0IEBACiBSYXZpIFNpbmhhCiBKYW5uZSBTaW5ra29uZW4KIE5nIFBoZW5nIFNpb25nCitZYW5uIFNpb25uZWF1CiBHZW9yZ2UgU2lwZQogSi4gU2lwcHJlbGwKIEtyYWdlbiBTaXRha2VyCitWaWxsZSBTa3l0dMOkCiBNaWNoYWVsIFNsb2FuCiBOaWNrIFNsb2FuCitWw6FjbGF2IMWgbWlsYXVlcgogQ2hyaXN0b3BoZXIgU21pdGgKIEVyaWMgVi4gU21pdGgKIEdyZWdvcnkgUC4gU21pdGgKQEAgLTExODIsNiArMTMyMCw3IEBACiBSYWZhbCBTbW90cnp5awogRXJpYyBTbm93CiBEaXJrIFNvZWRlCitOaXIgU29mZmVyCiBQYXVsIFNva29sb3Zza3kKIEV2Z2VueSBTb2xvZ3Vib3YKIENvZHkgU29tZXJ2aWxsZQpAQCAtMTIwMSw2ICsxMzQwLDcgQEAKIEFudGhvbnkgU3RhcmtzCiBPbGl2ZXIgU3RlZWxlCiBHcmVnIFN0ZWluCitNYXJlayBTdGVwbmlvd3NraQogQmFydWNoIFN0ZXJpbgogQ2hyaXMgU3Rlcm4KIEFsZXggU3Rld2FydApAQCAtMTIxMiw2ICsxMzUyLDcgQEAKIFNlcmhpeSBTdG9yY2hha2EKIEtlbiBTdG94CiBEYW4gU3Ryb21iZXJnCitEb25hbGQgU3R1ZmZ0CiBEYW5pZWwgU3R1dHpiYWNoCiBBbmRyZWFzIFN0w7xocmsKIENvbGluIFN1CkBAIC0xMjE5LDE1ICsxMzYwLDIwIEBACiBOYXRoYW4gU3VsbGl2YW4KIE1hcmsgU3VtbWVyZmllbGQKIFJldWJlbiBTdW1uZXIKK0VyeWsgU3VuCiBNYXJlayDFoHVwcGEKIEhpc2FvIFN1enVraQogS2FsbGUgU3ZlbnNzb24KIEFuZHJldyBTdmV0bG92CiBQYXVsIFN3YXJ0egorQWwgU3dlaWdhcnQKIFRoZW5hdWx0IFN5bHZhaW4KIFDDqXRlciBTemFiw7MKK0pvaG4gU3pha21laXN0ZXIKIEFtaXIgU3pla2VseQogQXJmcmV2ZXIgRnJlaHRlcyBUYWlmZXJzYXIgQXJhaGVzaXMKK0hpZGVha2kgVGFrYWhhc2hpCitUYWthc2UgQXJpaGlybwogSW5kcmEgVGFsaXAKIE5laWwgVGFsbGltCiBHZW9mZiBUYWx2b2xhCkBAIC0xMjM5LDYgKzEzODUsNyBAQAogTW9udHkgVGF5bG9yCiBBbmF0b2x5IFRlY2h0b25pawogTWlraGFpbCBUZXJla2hvdgorVmljdG9yIFRlcnLDs24KIFJpY2hhcmQgTS4gVGV3CiBUb2JpYXMgVGhlbGVuCiBGw6l2cnkgVGhpYmF1bHQKQEAgLTEyNDYsMTIgKzEzOTMsMTQgQEAKIE5pY29sYXMgTS4gVGhpw6lyeQogSmFtZXMgVGhvbWFzCiBSb2JpbiBUaG9tYXMKK0JyaWFuIFRob3JuZQogU3RlcGhlbiBUaG9ybmUKIEplcmVteSBUaHVyZ29vZAogRXJpYyBUaWVkZW1hbm4KIEp1bHkgVGlraG9ub3YKIFRyYWN5IFRpbXMKIE9yZW4gVGlyb3NoCitUaW0gVGlzZGFsbAogSmFzb24gVGlzaGxlcgogQ2hyaXN0aWFuIFRpc21lcgogSmltIFRpdHRzbGVyCkBAIC0xMjg1LDYgKzE0MzQsNyBAQAogRG9vYmVlIFIuIFR6ZWNrCiBFcmVuIFTDvHJrYXkKIExpb25lbCBVbG1lcgorQWRuYW4gVW1lcgogUm9nZXIgVXBvbGUKIERhbmllbCBVcmJhbgogTWljaGFlbCBVcm1hbgpAQCAtMTMxNCw5ICsxNDY0LDEwIEBACiBGcmFuayBWaXNzZXIKIEpvaGFubmVzIFZvZ2VsCiBBbGV4IFZvbGtvdgorR3VpZG8gVnJhbmtlbgogTWFydGlqbiBWcmllcwogU2pvZXJkIGRlIFZyaWVzCi1HdWlkbyBWcmFua2VuCitKb25hcyBXYWduZXIKIE5pa2kgVy4gV2FpYmVsCiBXb2p0ZWsgV2FsY3phawogQ2hhcmxlcyBXYWxkbWFuCkBAIC0xMzI0LDEwICsxNDc1LDExIEBACiBMYXJyeSBXYWxsCiBLZXZpbiBXYWx6ZXIKIFJvZHJpZ28gU3RlaW5tdWxsZXIgV2FuZGVybGV5CitEaW5neXVhbiBXYW5nCiBLZSBXYW5nCiBHcmVnIFdhcmQKK1RvbSBXYXJkaWxsCiBaYWNoYXJ5IFdhcmUKLUpvbmFzIFdhZ25lcgogQmFycnkgV2Fyc2F3CiBTdGV2ZSBXYXRlcmJ1cnkKIEJvYiBXYXRzb24KQEAgLTEzNDMsNiArMTQ5NSw3IEBACiBFZHdhcmQgV2VsYm91cm5lCiBDbGlmZiBXZWxscwogUmlja2FyZCBXZXN0bWFuCitKb3NlcGggV2VzdG9uCiBKZWZmIFdoZWVsZXIKIENocmlzdG9waGVyIFdoaXRlCiBEYXZpZCBXaGl0ZQpAQCAtMTM1MSw2ICsxNTA0LDcgQEAKIEZlbGl4IFdpZW1hbm4KIEdlcnJ5IFdpZW5lcgogRnJhbmsgV2llcnpiaWNraQorU2FudG9zbyBXaWpheWEKIEJyeWNlICJab29rbyIgV2lsY294LU8nSGVhcm4KIFRpbW90aHkgV2lsZAogSmFrdWIgV2lsawpAQCAtMTM1OCw2ICsxNTEyLDcgQEAKIEphc29uIFdpbGxpYW1zCiBKb2huIFdpbGxpYW1zCiBTdWUgV2lsbGlhbXMKK0Nhcm9sIFdpbGxpbmcKIFN0ZXZlbiBXaWxsaXMKIEZyYW5rIFdpbGxpc29uCiBHZW9mZiBXaWxzb24KQEAgLTEzNjksNiArMTUyNCw3IEBACiBEaWsgV2ludGVyCiBCbGFrZSBXaW50b24KIEplYW4tQ2xhdWRlIFdpcHBsZXIKK1N0w6lwaGFuZSBXaXJ0ZWwKIExhcnMgV2lyemVuaXVzCiBKb2huIFdpc2VtYW4KIENocmlzIFdpdGhlcnMKQEAgLTEzODMsOCArMTUzOSwxMCBAQAogR29yZG9uIFdvcmxleQogRGFycmVuIFdvcnJhbGwKIFRob21hcyBXb3V0ZXJzCitEYW5pZWwgV296bmlhawogSGVpa28gV3VuZHJhbQogRG91ZyBXeWF0dAorWGlhbmcgWmhhbmcKIFJvYmVydCBYaWFvCiBGbG9yZW50IFhpY2x1bmEKIEhpcm9rYXp1IFlhbWFtb3RvCkBAIC0xMzk1LDYgKzE1NTMsNyBAQAogRGFubnkgWW9vCiBSb3J5IFlvcmtlCiBHZW9yZ2UgWW9zaGlkYQorS2F6dWhpcm8gWW9zaGlkYQogTWFzYXp1bWkgWW9zaGlrYXdhCiBBcm5hdWQgWXNtYWwKIEJlcm5hcmQgWXVlCkBAIC0xNDEwLDQgKzE1NjksNyBAQAogQ2hlbmcgWmhhbmcKIEthaSBaaHUKIFRhcmVrIFppYWTDqQorR2VubmFkaXkgWmxvYmluCitEb3VnIFpvbmdrZXIKIFBldGVyIMOFc3RyYW5kCitldmlsemVybwpkaWZmIC0tZ2l0IGEvTWlzYy9ISVNUT1JZIGIvTWlzYy9ISVNUT1JZCmluZGV4IDAxYzYzNWIuLmE5ZTI5MTAgMTAwNjQ0Ci0tLSBhL01pc2MvSElTVE9SWQorKysgYi9NaXNjL0hJU1RPUlkKQEAgLTMsMTMgKzMsNDExMCBAQAogCiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIHJlbGVhc2UgbWVzc2FnZXMgZm9yIHByZXZpb3VzIFB5dGhvbiByZWxlYXNlcy4KIEFzIHlvdSByZWFkIG9uIHlvdSBnbyBiYWNrIHRvIHRoZSBkYXJrIGFnZXMgb2YgUHl0aG9uJ3MgaGlzdG9yeS4KLShOb3RlOiBuZXdzIGFib3V0IDIuNWMyIGFuZCBsYXRlciAyLjUgcmVsZWFzZXMgaXMgaW4gdGhlIE1pc2MvTkVXUwotZmlsZSBvZiB0aGUgcmVsZWFzZTI1LW1haW50IGJyYW5jaC4pCiAKIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiAKK1doYXQncyBOZXcgaW4gUHl0aG9uIDMuMy4wPworPT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKypSZWxlYXNlIGRhdGU6IDI5LVNlcC0yMDEyKgorCitDb3JlIGFuZCBCdWlsdGlucworLS0tLS0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTYwNDY6IEZpeCBsb2FkaW5nIHNvdXJjZWxlc3MgbGVnYWN5IC5weW8gZmlsZXMuCisKKy0gSXNzdWUgIzE2MDYwOiBGaXggcmVmY291bnRpbmcgYnVnIHdoZW4gX190cnVuY19fIHJldHVybnMgYW4gb2JqZWN0CisgIHdob3NlIF9faW50X18gZ2l2ZXMgYSBub24taW50ZWdlci4gIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKK0V4dGVuc2lvbiBNb2R1bGVzCistLS0tLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxNjAxMjogRml4IGEgcmVncmVzc2lvbiBpbiBweWV4cGF0LiBUaGUgcGFyc2VyJ3MgVXNlRm9yZWlnbkRURCgpCisgIG1ldGhvZCBkb2Vzbid0IHJlcXVpcmUgYW4gYXJndW1lbnQgYWdhaW4uCisKKworV2hhdCdzIE5ldyBpbiBQeXRob24gMy4zLjAgUmVsZWFzZSBDYW5kaWRhdGUgMz8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKypSZWxlYXNlIGRhdGU6IDIzLVNlcC0yMDEyKgorCitDb3JlIGFuZCBCdWlsdGlucworLS0tLS0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTU5MDA6IEZpeCByZWZlcmVuY2UgbGVhayBpbiBQeVVuaWNvZGVfVHJhbnNsYXRlQ2hhcm1hcCgpLgorCistIElzc3VlICMxNTkyNjogRml4IGNyYXNoIGFmdGVyIG11bHRpcGxlIHJlaW5pdGlhbGl6YXRpb25zIG9mIHRoZSBpbnRlcnByZXRlci4KKworLSBJc3N1ZSAjMTU4OTU6IEZpeCBGSUxFIHBvaW50ZXIgbGVhayBpbiBvbmUgZXJyb3IgYnJhbmNoIG9mCisgIFB5UnVuX1NpbXBsZUZpbGVFeEZsYWdzKCkgd2hlbiBmaWxlbmFtZSBwb2ludHMgdG8gYSBweWMvcHlvIGZpbGUsIGNsb3NlaXQKKyAgaXMgZmFsc2UgYW4gYW5kIHNldF9tYWluX2xvYWRlcigpIGZhaWxzLgorCistIEZpeGVzIGZvciBhIGZldyBjcmFzaCBhbmQgbWVtb3J5IGxlYWsgcmVncmVzc2lvbnMgZm91bmQgYnkgQ292ZXJpdHkuCisKK0xpYnJhcnkKKy0tLS0tLS0KKworLSBJc3N1ZSAjMTU4ODI6IENoYW5nZSBfZGVjaW1hbCB0byBhY2NlcHQgYW55IGNvZWZmaWNpZW50IHR1cGxlIHdoZW4KKyAgY29uc3RydWN0aW5nIGluZmluaXRpZXMuIFRoaXMgaXMgZG9uZSBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkKKyAgd2l0aCBkZWNpbWFsLnB5OiBJbmZpbml0eSBjb2VmZmljaWVudHMgYXJlIHVuZGVmaW5lZCBpbiBfZGVjaW1hbAorICAoaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBzcGVjaWZpY2F0aW9uKS4KKworLSBJc3N1ZSAjMTU5MjU6IEZpeCBhIHJlZ3Jlc3Npb24gaW4gZW1haWwudXRpbCB3aGVyZSB0aGUgcGFyc2VkYXRlKCkgYW5kCisgIHBhcnNlZGF0ZV90eigpIGZ1bmN0aW9ucyBkaWQgbm90IHJldHVybiBOb25lIGFueW1vcmUgd2hlbiB0aGUgYXJndW1lbnQgY291bGQKKyAgbm90IGJlIHBhcnNlZC4KKworRXh0ZW5zaW9uIE1vZHVsZXMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzE1OTczOiBGaXggYSBzZWdtZW50YXRpb24gZmF1bHQgd2hlbiBjb21wYXJpbmcgZGF0ZXRpbWUgdGltZXpvbmUKKyAgb2JqZWN0cy4KKworLSBJc3N1ZSAjMTU5Nzc6IEZpeCBtZW1vcnkgbGVhayBpbiBNb2R1bGVzL19zc2wuYyB3aGVuIHRoZSBmdW5jdGlvbgorICBfc2V0X25wbl9wcm90b2NvbHMoKSBpcyBjYWxsZWQgbXVsdGlwbGUgdGltZXMsIHRoYW5rcyB0byBEYW5pZWwgU29tbWVybWFubi4KKworLSBJc3N1ZSAjMTU5Njk6IGZhdWx0aGFuZGxlciBtb2R1bGU6IHJlbmFtZSBkdW1wX3RyYWNlYmFja3NfbGF0ZXIoKSB0bworICBkdW1wX3RyYWNlYmFja19sYXRlcigpIGFuZCBjYW5jZWxfZHVtcF90cmFjZWJhY2tzX2xhdGVyKCkgdG8KKyAgY2FuY2VsX2R1bXBfdHJhY2ViYWNrX2xhdGVyKCkuCisKKy0gX2RlY2ltYWwgbW9kdWxlOiB1c2Ugb25seSBDIDg5IHN0eWxlIGNvbW1lbnRzLgorCisKK1doYXQncyBOZXcgaW4gUHl0aG9uIDMuMy4wIFJlbGVhc2UgQ2FuZGlkYXRlIDI/Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisqUmVsZWFzZSBkYXRlOiAwOS1TZXAtMjAxMioKKworQ29yZSBhbmQgQnVpbHRpbnMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzEzOTkyOiBUaGUgdHJhc2hjYW4gbWVjaGFuaXNtIGlzIG5vdyB0aHJlYWQtc2FmZS4gIFRoaXMgZWxpbWluYXRlcworICBzcG9yYWRpYyBjcmFzaGVzIGluIG11bHRpLXRocmVhZCBwcm9ncmFtcyB3aGVuIHNldmVyYWwgbG9uZyBkZWFsbG9jYXRvcgorICBjaGFpbnMgcmFuIGNvbmN1cnJlbnRseSBhbmQgaW52b2x2ZWQgc3ViY2xhc3NlcyBvZiBidWlsdC1pbiBjb250YWluZXIKKyAgdHlwZXMuCisKKy0gSXNzdWUgIzE1Nzg0OiBNb2RpZnkgT1NFcnJvci5fX3N0cl9fKCkgdG8gYmV0dGVyIGRpc3Rpbmd1aXNoIGJldHdlZW4KKyAgZXJybm8gZXJyb3IgbnVtYmVycyBhbmQgV2luZG93cyBlcnJvciBudW1iZXJzLgorCistIElzc3VlICMxNTc4MTogRml4IHR3byBzbWFsbCByYWNlIGNvbmRpdGlvbnMgaW4gaW1wb3J0J3MgbW9kdWxlIGxvY2tpbmcuCisKK0xpYnJhcnkKKy0tLS0tLS0KKworLSBJc3N1ZSAjMTU4NDc6IEZpeCBhIHJlZ3Jlc3Npb24gaW4gYXJncGFyc2UsIHdoaWNoIGRpZCBub3QgYWNjZXB0IHR1cGxlcworICBhcyBhcmd1bWVudCBsaXN0cyBhbnltb3JlLgorCistIElzc3VlICMxNTgyODogUmVzdG9yZSBzdXBwb3J0IGZvciBDIGV4dGVuc2lvbnMgaW4gaW1wLmxvYWRfbW9kdWxlKCkuCisKKy0gSXNzdWUgIzE1MzQwOiBGaXggaW1wb3J0aW5nIHRoZSByYW5kb20gbW9kdWxlIHdoZW4gL2Rldi91cmFuZG9tIGNhbm5vdAorICBiZSBvcGVuZWQuICBUaGlzIHdhcyBhIHJlZ3Jlc3Npb24gY2F1c2VkIGJ5IHRoZSBoYXNoIHJhbmRvbWl6YXRpb24gcGF0Y2guCisKKy0gSXNzdWUgIzEwNjUwOiBEZXByZWNhdGUgdGhlIHdhdGNoZXhwIHBhcmFtZXRlciBvZiB0aGUgRGVjaW1hbC5xdWFudGl6ZSgpCisgIG1ldGhvZC4KKworLSBJc3N1ZSAjMTU3ODU6IE1vZGlmeSB3aW5kb3cuZ2V0X3djaCgpIEFQSSBvZiB0aGUgY3Vyc2VzIG1vZHVsZTogcmV0dXJuCisgIGEgY2hhcmFjdGVyIGZvciBtb3N0IGtleXMsIGFuZCBhbiBpbnRlZ2VyIGZvciBzcGVjaWFsIGtleXMsIGluc3RlYWQgb2YKKyAgYWx3YXlzIHJldHVybmluZyBhbiBpbnRlZ2VyLiBTbyBpdCBpcyBub3cgcG9zc2libGUgdG8gZGlzdGluZ3Vpc2ggc3BlY2lhbAorICBrZXlzIGxpa2Uga2V5cGFkIGtleXMuCisKKy0gSXNzdWUgIzE0MjIzOiBGaXggd2luZG93LmFkZGNoKCkgb2YgdGhlIGN1cnNlcyBtb2R1bGUgZm9yIHNwZWNpYWwgY2hhcmFjdGVycworICBsaWtlIGN1cnNlcy5BQ1NfSExJTkU6IHRoZSBQeXRob24gZnVuY3Rpb24gYWRkY2goaW50KSBhbmQgYWRkY2goYnl0ZXMpIGlzIG5vdworICBjYWxsaW5nIHRoZSBDIGZ1bmN0aW9uIHdhZGRjaCgpL212d2FkZGNoKCkgKGFzIGl0IHdhcyBkb25lIGluIFB5dGhvbiAzLjIpLAorICBpbnN0ZWFkIG9mIHdhZGRfd2NoKCkvbXZ3YWRkX3djaCgpLiBUaGUgUHl0aG9uIGZ1bmN0aW9uIGFkZGNoKHN0cikgaXMgc3RpbGwKKyAgY2FsbGluZyB0aGUgQyBmdW5jdGlvbiB3YWRkX3djaCgpL212d2FkZF93Y2goKSBpZiB0aGUgUHl0aG9uIGN1cnNlcyBpcyBsaW5rZWQKKyAgdG8gbGlibmN1cnNlc3cuCisKK0J1aWxkCistLS0tLQorCistIElzc3VlICMxNTgyMjogUmVhbGx5IGVuc3VyZSAydG8zIGdyYW1tYXIgcGlja2xlcyBhcmUgcHJvcGVybHkgaW5zdGFsbGVkCisgIChyZXBsYWNlcyBmaXhlcyBmb3IgSXNzdWUgIzE1NjQ1KS4KKworRG9jdW1lbnRhdGlvbgorLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxNTgxNDogVGhlIG1lbW9yeXZpZXcgZW5oYW5jZW1lbnRzIGluIDMuMy4wIGFjY2lkZW50YWxseSBwZXJtaXR0ZWQKKyAgdGhlIGhhc2hpbmcgb2YgbXVsdGktZGltZW5zaW9uYWwgbWVtb3J2aWV3cyBhbmQgbWVtb3J5dmlld3Mgd2l0aCBtdWx0aS1ieXRlCisgIGl0ZW0gZm9ybWF0cy4gVGhlIGludGVuZGVkIHJlc3RyaWN0aW9ucyBoYXZlIG5vdyBiZWVuIGRvY3VtZW50ZWQgLSB0aGV5CisgIHdpbGwgYmUgY29ycmVjdGx5IGVuZm9yY2VkIGluIDMuMy4xCisKKworV2hhdCdzIE5ldyBpbiBQeXRob24gMy4zLjAgUmVsZWFzZSBDYW5kaWRhdGUgMT8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKypSZWxlYXNlIGRhdGU6IDI1LUF1Zy0yMDEyKgorCitDb3JlIGFuZCBCdWlsdGlucworLS0tLS0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTU1NzM6IG1lbW9yeXZpZXcgY29tcGFyaXNvbnMgYXJlIG5vdyBwZXJmb3JtZWQgYnkgdmFsdWUgd2l0aCBmdWxsCisgIHN1cHBvcnQgZm9yIGFueSB2YWxpZCBzdHJ1Y3QgbW9kdWxlIGZvcm1hdCBkZWZpbml0aW9uLgorCistIElzc3VlICMxNTMxNjogV2hlbiBhbiBpdGVtIGluIHRoZSBmcm9tbGlzdCBmb3IgX19pbXBvcnRfXyBkb2Vzbid0IGV4aXN0LAorICBkb24ndCByYWlzZSBhbiBlcnJvciwgYnV0IGlmIGFuIGV4Y2VwdGlvbiBpcyByYWlzZWQgYXMgcGFydCBvZiBhbiBpbXBvcnQgZG8KKyAgbGV0IHRoYXQgcHJvcGFnYXRlLgorCistIElzc3VlICMxNTc3ODogZW5zdXJlIHRoYXQgc3RyKEltcG9ydEVycm9yKG1zZykpIHJldHVybnMgYSBzdHIKKyAgZXZlbiB3aGVuIG1zZyBpc24ndCBhIHN0ci4KKworLSBJc3N1ZSAjMjA1MTogU291cmNlIGZpbGUgcGVybWlzc2lvbiBiaXRzIGFyZSBvbmNlIGFnYWluIGNvcnJlY3RseQorICBjb3BpZWQgdG8gdGhlIGNhY2hlZCBieXRlY29kZSBmaWxlLiAoVGhlIG1pZ3JhdGlvbiB0byBpbXBvcnRsaWIKKyAgcmVpbnRyb2R1Y2VkIHRoaXMgcHJvYmxlbSBiZWNhdXNlIHRoZXNlIHdhcyBubyByZWdyZXNzaW9uIHRlc3QuIEEgdGVzdAorICBoYXMgYmVlbiBhZGRlZCBhcyBwYXJ0IG9mIHRoaXMgcGF0Y2gpCisKKy0gSXNzdWUgIzE1NzYxOiBGaXggY3Jhc2ggd2hlbiBQWVRIT05FWEVDVVRBQkxFIGlzIHNldCBvbiBNYWMgT1MgWC4KKworLSBJc3N1ZSAjMTU3MjY6IEZpeCBpbmNvcnJlY3QgYm91bmRzIGNoZWNraW5nIGluIFB5U3RhdGVfRmluZE1vZHVsZS4KKyAgUGF0Y2ggYnkgUm9iaW4gU2NocmVpYmVyLgorCistIElzc3VlICMxNTYwNDogVXBkYXRlIHVzZXMgb2YgUHlPYmplY3RfSXNUcnVlKCkgdG8gY2hlY2sgZm9yIGFuZCBoYW5kbGUKKyAgZXJyb3JzIGNvcnJlY3RseS4gIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE0ODQ2OiBpbXBvcnRsaWIuRmlsZUZpbmRlciBub3cgaGFuZGxlcyB0aGUgY2FzZSB3aGVyZSB0aGUKKyAgZGlyZWN0b3J5IGJlaW5nIHNlYXJjaGVkIGlzIHJlbW92ZWQgYWZ0ZXIgYSBwcmV2aW91cyBpbXBvcnQgYXR0ZW1wdAorCitMaWJyYXJ5CistLS0tLS0tCisKKy0gSXNzdWUgIzEzMzcwOiBFbnN1cmUgdGhhdCBjdHlwZXMgd29ya3Mgb24gTWFjIE9TIFggd2hlbiBQeXRob24gaXMKKyAgY29tcGlsZWQgdXNpbmcgdGhlIGNsYW5nIGNvbXBpbGVyCisKKy0gSXNzdWUgIzEzMDcyOiBUaGUgYXJyYXkgbW9kdWxlJ3MgJ3UnIGZvcm1hdCBjb2RlIGlzIG5vdyBkZXByZWNhdGVkIGFuZAorICB3aWxsIGJlIHJlbW92ZWQgaW4gUHl0aG9uIDQuMC4KKworLSBJc3N1ZSAjMTU1NDQ6IEZpeCBEZWNpbWFsLl9fZmxvYXRfXyB0byB3b3JrIHdpdGggcGF5bG9hZC1jYXJyeWluZyBOYU5zLgorCistIElzc3VlICMxNTI0OTogQnl0ZXNHZW5lcmF0b3Igbm93IGNvcnJlY3RseSBtYW5nbGVzIEZyb20gbGluZXMgKHdoZW4KKyAgcmVxdWVzdGVkKSBldmVuIGlmIHRoZSBib2R5IGNvbnRhaW5zIHVuZGVjb2RhYmxlIGJ5dGVzLgorCistIElzc3VlICMxNTc3NzogRml4IGEgcmVmbGVhayBpbiBfcG9zaXhzdWJwcm9jZXNzLgorCistIElzc3VlICMjNjY1MTk0OiBVcGRhdGUgZW1haWwudXRpbHMubG9jYWx0aW1lIHRvIHVzZSBkYXRldGltZS5hc3RpbWV6b25lIGFuZAorICBjb3JyZWN0bHkgaGFuZGxlIGhpc3RvcmljIGNoYW5nZXMgaW4gVVRDIG9mZnNldHMuCisKKy0gSXNzdWUgIzE1MTk5OiBGaXggSmF2YVNjcmlwdCdzIGRlZmF1bHQgTUlNRSB0eXBlIHRvIGFwcGxpY2F0aW9uL2phdmFzY3JpcHQuCisgIFBhdGNoIGJ5IEJvaHVzbGF2IEthYnJkYS4KKworLSBJc3N1ZSAjMTI2NDM6IGNvZGUuSW50ZXJhY3RpdmVDb25zb2xlIG5vdyByZXNwZWN0cyBzeXMuZXhjZXB0aG9vayB3aGVuCisgIGRpc3BsYXlpbmcgZXhjZXB0aW9ucyAoUGF0Y2ggYnkgQWFyb24gSWxlcykKKworLSBJc3N1ZSAjMTM1Nzk6IHN0cmluZy5Gb3JtYXR0ZXIgbm93IHVuZGVyc3RhbmRzIHRoZSAnYScgY29udmVyc2lvbiBzcGVjaWZpZXIuCisKKy0gSXNzdWUgIzE1NzkzOiBTdGFjayBjb3JydXB0aW9uIGluIHNzbC5SQU5EX2VnZCgpLgorICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxNTU5NTogRml4IHN1YnByb2Nlc3MuUG9wZW4odW5pdmVyc2FsX25ld2xpbmVzPVRydWUpCisgIGZvciBjZXJ0YWluIGxvY2FsZXMgKHV0Zi0xNiBhbmQgdXRmLTMyIGZhbWlseSkuIFBhdGNoIGJ5IENocmlzIEplcmRvbmVrLgorCistIElzc3VlICMxNTQ3NzogSW4gY21hdGggYW5kIG1hdGggbW9kdWxlcywgYWRkIHdvcmthcm91bmQgZm9yIHBsYXRmb3JtcyB3aG9zZQorICBzeXN0ZW0tc3VwcGxpZWQgbG9nMXAgZnVuY3Rpb24gZG9lc24ndCByZXNwZWN0IHNpZ25zIG9mIHplcm9zLgorCistIElzc3VlICMxNTcxNTogaW1wb3J0bGliLl9faW1wb3J0X18oKSB3aWxsIHNpbGVuY2UgYW4gSW1wb3J0RXJyb3Igd2hlbiB0aGUgdXNlCisgIG9mIGZyb21saXN0IGxlYWRzIHRvIGEgZmFpbGVkIGltcG9ydC4KKworLSBJc3N1ZSAjMTQ2Njk6IEZpeCBwaWNrbGluZyBvZiBjb25uZWN0aW9ucyBhbmQgc29ja2V0cyBvbiBNYWNPU1gKKyAgYnkgc2VuZGluZy9yZWNlaXZpbmcgYW4gYWNrbm93bGVkZ21lbnQgYWZ0ZXIgZmlsZSBkZXNjcmlwdG9yIHRyYW5zZmVyLgorICBUZXN0UGlja2xpbmdDb25uZWN0aW9uIGhhcyBiZWVuIHJlZW5hYmxlZCBmb3IgTWFjT1NYLgorCistIElzc3VlICMxMTA2MjogRml4IGFkZGluZyBhIG1lc3NhZ2UgZnJvbSBmaWxlIHRvIEJhYnlsIG1haWxib3guCisKKy0gSXNzdWUgIzE1NjQ2OiBQcmV2ZW50IGVxdWl2YWxlbnQgb2YgYSBmb3JrIGJvbWIgd2hlbiB1c2luZworICBtdWx0aXByb2Nlc3Npbmcgb24gV2luZG93cyB3aXRob3V0IHRoZSAiaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJyIKKyAgaWRpb20uCisKKy0gSXNzdWUgIzE1Njc4OiBGaXggSURMRSBtZW51cyB3aGVuIHN0YXJ0ZWQgZnJvbSBPUyBYIGNvbW1hbmQgbGluZQorICAoMy4zLjBiMiByZWdyZXNzaW9uKS4KKworQyBBUEkKKy0tLS0tCisKK0V4dGVuc2lvbiBNb2R1bGVzCistLS0tLS0tLS0tLS0tLS0tLQorCitUb29scy9EZW1vcworLS0tLS0tLS0tLS0KKworRG9jdW1lbnRhdGlvbgorLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxNDY3NDogQWRkIGEgZGlzY3Vzc2lvbiBvZiB0aGUganNvbiBtb2R1bGUncyBzdGFuZGFyZCBjb21wbGlhbmNlLgorICBQYXRjaCBieSBDaHJpcyBSZWJlcnQuCisKKy0gQ3JlYXRlIGEgJ0NvbmN1cnJlbnQgRXhlY3V0aW9uJyBzZWN0aW9uIGluIHRoZSBkb2NzLCBhbmQgc3BsaXQgdXAgdGhlCisgICdPcHRpb25hbCBPcGVyYXRpbmcgU3lzdGVtIFNlcnZpY2VzJyBzZWN0aW9uIHRvIHVzZSBhIG1vcmUgdXNlci1jZW50cmljCisgIGNsYXNzaWZpY2F0aW9uIHNjaGVtZSAoc3BsaXR0aW5nIHRoZW0gYWNyb3NzIHRoZSBuZXcgQ0Ugc2VjdGlvbiwgSVBDIGFuZAorICB0ZXh0IHByb2Nlc3NpbmcpLiBPcGVyYXRpbmcgc3lzdGVtIGxpbWl0YXRvbnMgY2FuIGJlIHJlZmxlY3RlZCB3aXRoCisgIHRoZSBTcGhpbnggYGA6cGxhdGZvcm06YGAgdGFnLCBpdCBkb2Vzbid0IG1ha2Ugc2Vuc2UgYXMgcGFydCBvZiB0aGUgVGFibGUgb2YKKyAgQ29udGVudHMuCisKKy0gSXNzdWUgIzQ5NjY6IEJyaW5nIHRoZSBzZXF1ZW5jZSBkb2NzIHVwIHRvIGRhdGUgZm9yIHRoZSBQeTNrIHRyYW5zaXRpb24KKyAgYW5kIHRoZSBtYW55IGxhbmd1YWdlIGVuaGFuY2VtZW50cyBzaW5jZSB0aGV5IHdlcmUgb3JpZ2luYWwgd3JpdHRlbgorCistIFRoZSAicGF0aCBpbXBvcnRlciIgbWlzbm9tZXIgaGFzIGJlZW4gcmVwbGFjZWQgd2l0aCBFcmljIFNub3cncworICBtb3JlLWF3a3dhcmQtYnV0LWF0LWxlYXN0LW5vdC13cm9uZyBzdWdnZXN0aW9uIG9mICJwYXRoIGJhc2VkIGZpbmRlciIgaW4KKyAgdGhlIGltcG9ydCBzeXN0ZW0gcmVmZXJlbmNlIGRvY3MKKworLSBJc3N1ZSAjMTU2NDA6IERvY3VtZW50IGltcG9ydGxpYi5hYmMuRmluZGVyIGFzIGRlcHJlY2F0ZWQuCisKKy0gSXNzdWUgIzE1NjMwOiBBZGQgYW4gZXhhbXBsZSBmb3IgImNvbnRpbnVlIiBzdG10IGluIHRoZSB0dXRvcmlhbC4gUGF0Y2ggYnkKKyAgRGFuaWVsIEVsbGlzLgorCitUZXN0cworLS0tLS0KKworLSBJc3N1ZSAjMTU3NDc6IFpGUyBhbHdheXMgcmV0dXJucyBFT1BOT1RTVVBQIHdoZW4gYXR0ZW1wdGluZyB0byBzZXQgdGhlCisgIFVGX0lNTVVUQUJMRSBmbGFnICh2aWEgZWl0aGVyIGNoZmxhZ3Mgb3IgbGNoZmxhZ3MpOyByZWZhY3RvciBhZmZlY3RlZAorICB0ZXN0cyBpbiB0ZXN0X3Bvc2l4LnB5IHRvIGFjY291bnQgZm9yIHRoaXMuCisKKy0gSXNzdWUgIzE1Mjg1OiBSZWZhY3RvciB0aGUgYXBwcm9hY2ggZm9yIHRlc3RpbmcgY29ubmVjdCB0aW1lb3V0cyB1c2luZworICB0d28gZXh0ZXJuYWwgaG9zdHMgdGhhdCBoYXZlIGJlZW4gY29uZmlndXJlZCBzcGVjaWZpY2FsbHkgZm9yIHRoaXMgdHlwZQorICBvZiB0ZXN0LgorCistIElzc3VlICMxNTc0MzogUmVtb3ZlIHRoZSBkZXByZWNhdGVkIG1ldGhvZCB1c2FnZSBpbiB1cmxsaWIgdGVzdHMuIFBhdGNoIGJ5CisgIEplZmYgS251cHAuCisKKy0gSXNzdWUgIzE1NjE1OiBBZGQgc29tZSB0ZXN0cyBmb3IgdGhlIGpzb24gbW9kdWxlJ3MgaGFuZGxpbmcgb2YgaW52YWxpZAorICBpbnB1dCBkYXRhLiAgUGF0Y2ggYnkgS3VzaGFsIERhcy4KKworQnVpbGQKKy0tLS0tCisKKy0gT3V0cHV0IGxpYiBmaWxlcyBmb3IgUEdPIGJ1aWxkIGludG8gUEdPIGRpcmVjdG9yeS4KKworLSBQaWNrIHVwIDMyLWJpdCBsYXVuY2hlciBmcm9tIFBHTyBkaXJlY3Rvcnkgb24gNjQtYml0IFBHTyBidWlsZC4KKworLSBEcm9wIFBDXHB5dGhvbl9udC5oIGFzIGl0J3Mgbm90IHVzZWQuIEFkZCBpbnB1dCBkZXBlbmRlbmN5IG9uIGN1c3RvbQorICBidWlsZCBzdGVwLgorCistIElzc3VlICMxNTUxMTogRHJvcCBleHBsaWNpdCBkZXBlbmRlbmN5IG9uIHB5dGhvbnh5LmxpYiBmcm9tIF9kZWNpbWFsCisgIGFtZDY0IGNvbmZpZ3VyYXRpb24uCisKKy0gQWRkIG1pc3NpbmcgUEdJL1BHTyBjb25maWd1cmF0aW9ucyBmb3IgcHl3bGF1bmNoZXIuCisKKy0gSXNzdWUgIzE1NjQ1OiBFbnN1cmUgMnRvMyBncmFtbWFyIHBpY2tsZXMgYXJlIHByb3Blcmx5IGluc3RhbGxlZC4KKworCitXaGF0J3MgTmV3IGluIFB5dGhvbiAzLjMuMCBCZXRhIDI/Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKypSZWxlYXNlIGRhdGU6IDEyLUF1Zy0yMDEyKgorCitDb3JlIGFuZCBCdWlsdGlucworLS0tLS0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTU1Njg6IEZpeCB0aGUgcmV0dXJuIHZhbHVlIG9mICJ5aWVsZCBmcm9tIiB3aGVuIFN0b3BJdGVyYXRpb24gaXMKKyAgcmFpc2VkIGJ5IGEgY3VzdG9tIGl0ZXJhdG9yLgorCistIElzc3VlICMxMzExOTogc3lzLnN0ZG91dCBhbmQgc3lzLnN0ZGVyciBhcmUgbm93IHVzaW5nICJcclxuIiBuZXdsaW5lIG9uCisgIFdpbmRvd3MsIGFzIFB5dGhvbiAyLgorCistIElzc3VlICMxNTUzNDogRml4IHRoZSBmYXN0LXNlYXJjaCBmdW5jdGlvbiBmb3Igbm9uLUFTQ0lJIFVuaWNvZGUgc3RyaW5ncy4KKworLSBJc3N1ZSAjMTU1MDg6IEZpeCB0aGUgZG9jc3RyaW5nIGZvciBfX2ltcG9ydF9fIHRvIGhhdmUgdGhlIHByb3BlciBkZWZhdWx0CisgIHZhbHVlIG9mIDAgZm9yICdsZXZlbCcgYW5kIHRvIG5vdCBtZW50aW9uIG5lZ2F0aXZlIGxldmVscyBzaW5jZSB0aGV5IGFyZSBub3QKKyAgc3VwcG9ydGVkLgorCistIElzc3VlICMxNTQyNTogRWxpbWluYXRlZCB0cmFjZWJhY2sgbm9pc2UgZnJvbSBtb3JlIHNpdHVhdGlvbnMgaW52b2x2aW5nCisgIGltcG9ydGxpYi4KKworLSBJc3N1ZSAjMTQ1Nzg6IFN1cHBvcnQgbW9kdWxlcyByZWdpc3RlcmVkIGluIHRoZSBXaW5kb3dzIHJlZ2lzdHJ5IGFnYWluLgorCistIElzc3VlICMxNTQ2NjogU3RvcCB1c2luZyBUWVBFX0lOVDY0IGluIG1hcnNoYWwsIHRvIG1ha2UgaW1wb3J0bGliLmggKGFuZCBvdGhlcgorICBieXRlIGNvZGUgZmlsZXMpIGVxdWFsIGJldHdlZW4gMzItYml0IGFuZCA2NC1iaXQgc3lzdGVtcy4KKworLSBJc3N1ZSAjMTY5MjMzNTogTW92ZSBpbml0aWFsIGV4Y2VwdGlvbiBhcmdzIGFzc2lnbm1lbnQgdG8KKyAgIkJhc2VFeGNlcHRpb24uX19uZXdfXyIgdG8gaGVscCBwaWNrbGluZyBvZiBuYWl2ZSBzdWJjbGFzc2VzLgorCistIElzc3VlICMxMjgzNDogRml4IFB5QnVmZmVyX1RvQ29udGlndW91cygpIGZvciBub24tY29udGlndW91cyBhcnJheXMuCisKKy0gSXNzdWUgIzE1NDU2OiBGaXggY29kZSBfX3NpemVvZl9fIGFmdGVyICMxMjM5OSBjaGFuZ2UuICBQYXRjaCBieSBTZXJoaXkKKyAgU3RvcmNoYWthLgorCistIElzc3VlICMxNTQwNDogUmVmbGVhayBpbiBQeU1ldGhvZE9iamVjdCByZXByLgorCistIElzc3VlICMxNTM5NDogQW4gaXNzdWUgaW4gUHlNb2R1bGVfQ3JlYXRlIHRoYXQgY2F1c2VkIHJlZmVyZW5jZXMgdG8gYmUgbGVha2VkCisgIG9uIHNvbWUgZXJyb3IgcGF0aHMgaGFzIGJlZW4gZml4ZWQuICBQYXRjaCBieSBKdWxpYSBMYXdhbGwuCisKKy0gSXNzdWUgIzE1MzY4OiBBbiBpc3N1ZSB0aGF0IGNhdXNlZCBieXRlY29kZSBnZW5lcmF0aW9uIHRvIGJlIG5vbi1kZXRlcm1pbmlzdGljCisgIGhhcyBiZWVuIGZpeGVkLgorCistIElzc3VlICMxNTIwMjogQ29uc2lzdGVudGx5IHVzZSB0aGUgbmFtZSAiZm9sbG93X3N5bWxpbmtzIiBmb3IgbmV3IHBhcmFtZXRlcnMKKyAgaW4gb3MgYW5kIHNodXRpbCBmdW5jdGlvbnMuCisKKy0gSXNzdWUgIzE1MzE0OiBfX21haW5fXy5fX2xvYWRlcl9fIGlzIG5vdyBzZXQgY29ycmVjdGx5IGR1cmluZyBpbnRlcnByZXRlcgorICBzdGFydHVwLgorCistIElzc3VlICMxNTExMTogV2hlbiBhIG1vZHVsZSBpbXBvcnRlZCB1c2luZyAnZnJvbSBpbXBvcnQnIGhhcyBhbiBJbXBvcnRFcnJvcgorICBpbnNpZGUgaXRzZWxmLCBkb24ndCBtYXNrIHRoYXQgZmFjdCBiZWhpbmQgYSBnZW5lcmljIEltcG9ydEVycm9yIGZvciB0aGUKKyAgbW9kdWxlIGl0c2VsZi4KKworLSBJc3N1ZSAjMTUyOTM6IEFkZCBHQyBzdXBwb3J0IHRvIHRoZSBBU1QgYmFzZSBub2RlIHR5cGUuCisKKy0gSXNzdWUgIzE1MjkxOiBGaXggYSBtZW1vcnkgbGVhayB3aGVyZSBBU1Qgbm9kZXMgd2hlcmUgbm90IHByb3Blcmx5CisgIGRlYWxsb2NhdGVkLgorCistIElzc3VlICMxNTExMDogRml4IHRoZSB0cmFjZWJhY2tzIGdlbmVyYXRlZCBieSAiaW1wb3J0IHh4eCIgdG8gbm90IHNob3cgdGhlCisgIGltcG9ydGxpYiBzdGFjayBmcmFtZXMuCisKKy0gSXNzdWUgIzE1MDIwOiBUaGUgcHJvZ3JhbSBuYW1lIHVzZWQgdG8gc2VhcmNoIGZvciBQeXRob24ncyBwYXRoIGlzIG5vdworICAicHl0aG9uMyIgdW5kZXIgVW5peCwgbm90ICJweXRob24iLgorCistIElzc3VlICMxNTAzMzogRml4IHRoZSBleGl0IHN0YXR1cyBidWcgd2hlbiBtb2R1bGVzIGludm9rZWQgdXNpbmcgLW0gc3dpdGgsCisgIHJldHVybiB0aGUgcHJvcGVyIGZhaWx1cmUgcmV0dXJuIHZhbHVlICgxKS4gUGF0Y2ggY29udHJpYnV0ZWQgYnkgSmVmZiBLbnVwcC4KKworLSBJc3N1ZSAjMTUyMjk6IEFuIE9TRXJyb3Igc3ViY2xhc3Mgd2hvc2UgX19pbml0X18gZG9lc24ndCBjYWxsIGJhY2sKKyAgT1NFcnJvci5fX2luaXRfXyBjb3VsZCBwcm9kdWNlIGluY29tcGxldGUgaW5zdGFuY2VzLCBsZWFkaW5nIHRvIGNyYXNoZXMgd2hlbgorICBjYWxsaW5nIHN0cigpIG9uIHRoZW0uCisKKy0gSXNzdWUgMTUzMDc6IFZpcnR1YWwgZW52aXJvbm1lbnRzIG5vdyB1c2Ugc3ltbGlua3Mgd2l0aCBmcmFtZXdvcmsgYnVpbGRzIG9uCisgIE1hYyBPUyBYLCBsaWtlIG90aGVyIFBPU0lYIGJ1aWxkcy4KKworTGlicmFyeQorLS0tLS0tLQorCistIElzc3VlICMxNTQyNDogQWRkIGEgX19zaXplb2ZfXyBpbXBsZW1lbnRhdGlvbiBmb3IgYXJyYXkgb2JqZWN0cy4gIFBhdGNoIGJ5CisgIEx1ZHdpZyBIw6RobmUuCisKKy0gSXNzdWUgIzE1NTc2OiBBbGxvdyBleHRlbnNpb24gbW9kdWxlcyB0byBhY3QgYXMgYSBwYWNrYWdlJ3MgX19pbml0X18gbW9kdWxlLgorCistIElzc3VlICMxNTUwMjogSGF2ZSBpbXBvcnRsaWIuaW52YWxpZGF0ZV9jYWNoZXMoKSB3b3JrIG9uIHN5cy5tZXRhX3BhdGggaW5zdGVhZAorICBvZiBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZS4KKworLSBJc3N1ZSAjMTUxNjM6IFB5ZG9jIHNob3VsZG4ndCBsaXN0IF9fbG9hZGVyX18gYXMgbW9kdWxlIGRhdGEuCisKKy0gSXNzdWUgIzE1NDcxOiBEbyBub3QgdXNlIG11dGFibGUgb2JqZWN0cyBhcyBkZWZhdWx0cyBmb3IKKyAgaW1wb3J0bGliLl9faW1wb3J0X18oKS4KKworLSBJc3N1ZSAjMTU1NTk6IFRvIGF2b2lkIGEgcHJvYmxlbWF0aWMgZmFpbHVyZSBtb2RlIHdoZW4gcGFzc2VkIHRvIHRoZSBieXRlcworICBjb25zdHJ1Y3Rvciwgb2JqZWN0cyBpbiB0aGUgaXBhZGRyZXNzIG1vZHVsZSBubyBsb25nZXIgaW1wbGVtZW50IF9faW5kZXhfXworICAodGhleSBzdGlsbCBpbXBsZW1lbnQgX19pbnRfXyBhcyBhcHByb3ByaWF0ZSkKKworLSBJc3N1ZSAjMTU1NDY6IEZpeCBoYW5kbGluZyBvZiBwYXRob2xvZ2ljYWwgaW5wdXQgZGF0YSBpbiB0aGUgcGVlaygpIGFuZAorICByZWFkMSgpIG1ldGhvZHMgb2YgdGhlIEJaMkZpbGUsIEd6aXBGaWxlIGFuZCBMWk1BRmlsZSBjbGFzc2VzLgorCistIElzc3VlICMxMzA1MjogRml4IElETEUgY3Jhc2hpbmcgd2hlbiByZXBsYWNlIHN0cmluZyBpbiBTZWFyY2gvUmVwbGFjZSBkaWFsb2cKKyAgZW5kZWQgd2l0aCAnXCcuIFBhdGNoIGJ5IFJvZ2VyIFNlcnd5LgorCistIElzc3VlICMxMjY1NTogSW5zdGVhZCBvZiByZXF1aXJpbmcgYSBjdXN0b20gdHlwZSwgb3Muc2NoZWRfZ2V0YWZmaW5pdHkgYW5kCisgIG9zLnNjaGVkX3NldGFmZmluaXR5IG5vdyB1c2UgcmVndWxhciBzZXRzIG9mIGludGVnZXJzIHRvIHJlcHJlc2VudCB0aGUgQ1BVcyBhCisgIHByb2Nlc3MgaXMgcmVzdHJpY3RlZCB0by4KKworLSBJc3N1ZSAjMTU1Mzg6IEZpeCBjb21waWxhdGlvbiBvZiB0aGUgZ2V0bmFtZWluZm8oKSAvIGdldGFkZHJpbmZvKCkgZW11bGF0aW9uCisgIGNvZGUuICBQYXRjaCBieSBQaGlsaXBwIEhhZ2VtZWlzdGVyLgorCistIElzc3VlICMxNTUxOTogUHJvcGVybHkgZXhwb3NlIFdpbmRvd3NSZWdpc3RyeUZpbmRlciBpbiBpbXBvcnRsaWIgKGFuZCB1c2UgdGhlCisgIGNvcnJlY3QgdGVybSBmb3IgaXQpLiBPcmlnaW5hbCBwYXRjaCBieSBFcmljIFNub3cuCisKKy0gSXNzdWUgIzE1NTAyOiBCcmluZyB0aGUgaW1wb3J0bGliIEFCQ3MgaW50byBsaW5lIHdpdGggdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlCisgIGltcG9ydCBwcm90b2NvbHMgZ2l2ZW4gUEVQIDQyMC4gT3JpZ2luYWwgcGF0Y2ggYnkgRXJpYyBTbm93LgorCistIElzc3VlICMxNTQ5OTogTGF1bmNoaW5nIGEgd2ViYnJvd3NlciBpbiBVbml4IHVzZWQgdG8gc2xlZXAgZm9yIGEgZmV3IHNlY29uZHMuCisgIE9yaWdpbmFsIHBhdGNoIGJ5IEFudG9uIEJhcmtvdnNreS4KKworLSBJc3N1ZSAjMTU0NjM6IFRoZSBmYXVsdGhhbmRsZXIgbW9kdWxlIHRydW5jYXRlcyBzdHJpbmdzIHRvIDUwMCBjaGFyYWN0ZXJzLAorICBpbnN0ZWFkIG9mIDEwMCwgdG8gYmUgYWJsZSB0byBkaXNwbGF5IGxvbmcgZmlsZSBwYXRocy4KKworLSBJc3N1ZSAjNjA1NjogTWFrZSBtdWx0aXByb2Nlc3NpbmcgdXNlIHNldGJsb2NraW5nKFRydWUpIG9uIHRoZSBzb2NrZXRzIGl0CisgIHVzZXMuICBPcmlnaW5hbCBwYXRjaCBieSBKIERlcmVrIFdpbHNvbi4KKworLSBJc3N1ZSAjMTUzNjQ6IEZpeCBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ3NyY2RpcicpIHRvIGJlIGFuIGFic29sdXRlIHBhdGguCisKKy0gSXNzdWUgIzE1MDQxOiBVcGRhdGUgInNlZSBhbHNvIiBsaXN0IGluIHRraW50ZXIgZG9jdW1lbnRhdGlvbi4KKworLSBJc3N1ZSAjMTU0MTM6IG9zLnRpbWVzKCkgaGFkIGRpc2FwcGVhcmVkIHVuZGVyIFdpbmRvd3MuCisKKy0gSXNzdWUgIzE1NDAyOiBBbiBpc3N1ZSBpbiB0aGUgc3RydWN0IG1vZHVsZSB0aGF0IGNhdXNlZCBzeXMuZ2V0c2l6ZW9mIHRvCisgIHJldHVybiBpbmNvcnJlY3QgcmVzdWx0cyBmb3Igc3RydWN0LlN0cnVjdCBpbnN0YW5jZXMgaGFzIGJlZW4gZml4ZWQuICBJbml0aWFsCisgIHBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE1MjMyOiBXaGVuIG1hbmdsZV9mcm9tIGlzIFRydWUsIGVtYWlsLkdlbmVyYXRvciBub3cgY29ycmVjdGx5IG1hbmdsZXMKKyAgbGluZXMgdGhhdCBzdGFydCB3aXRoICdGcm9tICcgdGhhdCBvY2N1ciBpbiBhIE1JTUUgcHJlYW1ibGUgb3IgZXBpbG9ndWUuCisKKy0gSXNzdWUgIzE1MDk0OiBJbmNvcnJlY3RseSBwbGFjZWQgI2VuZGlmIGluIF90a2ludGVyLmMuICBQYXRjaCBieSBTZXJoaXkKKyAgU3RvcmNoYWthLgorCistIElzc3VlICMxMzkyMjogYXJncGFyc2Ugbm8gbG9uZ2VyIGluY29ycmVjdGx5IHN0cmlwcyAnLS0ncyB0aGF0IGFwcGVhciBhZnRlcgorICB0aGUgZmlyc3Qgb25lLgorCistIElzc3VlICMxMjM1MzogYXJncGFyc2Ugbm93IGNvcnJlY3RseSBoYW5kbGVzIG51bGwgYXJndW1lbnQgdmFsdWVzLgorCistIElzc3VlICMxMDAxNywgaXNzdWUgIzE0OTk4OiBGaXggVHlwZUVycm9yIHVzaW5nIHBwcmludCBvbiBkaWN0aW9uYXJpZXMgd2l0aAorICB1c2VyLWRlZmluZWQgdHlwZXMgYXMga2V5cyBvciBvdGhlciB1bm9yZGVyYWJsZSBrZXlzLgorCistIElzc3VlICMxNTM5NzogaW5zcGVjdC5nZXRtb2R1bGVuYW1lKCkgaXMgbm93IGJhc2VkIGRpcmVjdGx5IG9uIGltcG9ydGxpYiB2aWEgYQorICBuZXcgaW1wb3J0bGliLm1hY2hpbmVyeS5hbGxfc3VmZml4ZXMoKSBBUEkuCisKKy0gSXNzdWUgIzE0NjM1OiB0ZWxuZXRsaWIgd2lsbCB1c2UgcG9sbCgpIHJhdGhlciB0aGFuIHNlbGVjdCgpIHdoZW4gcG9zc2libGUgdG8KKyAgYXZvaWQgZmFpbGluZyBkdWUgdG8gdGhlIHNlbGVjdCgpIGZpbGUgZGVzY3JpcHRvciBsaW1pdC4KKworLSBJc3N1ZSAjMTUxODA6IENsYXJpZnkgcG9zaXhwYXRoLmpvaW4oKSBlcnJvciBtZXNzYWdlIHdoZW4gbWl4aW5nIHN0ciAmIGJ5dGVzLgorCistIElzc3VlICMxNTM0MzogcGtndXRpbCBub3cgaW5jbHVkZXMgYW4gaXRlcl9pbXBvcnRlcl9tb2R1bGVzIGltcGxlbWVudGF0aW9uIGZvcgorICBpbXBvcnRsaWIubWFjaGluZXJ5LkZpbGVGaW5kZXIgKHNpbWlsYXIgdG8gdGhlIHdheSBpdCBhbHJlYWR5IGhhbmRsZWQKKyAgemlwaW1wb3J0LnppcGltcG9ydGVyKS4KKworLSBJc3N1ZSAjMTUzMTQ6IHJ1bnB5IG5vdyBzZXRzIF9fbWFpbl9fLl9fbG9hZGVyX18gY29ycmVjdGx5LgorCistIElzc3VlICMxNTM1NzogVGhlIGltcG9ydCBlbXVsYXRpb24gaW4gcGtndXRpbCBpcyBub3cgZGVwcmVjYXRlZC4gcGtndXRpbCB1c2VzCisgIGltcG9ydGxpYiBpbnRlcm5hbGx5IHJhdGhlciB0aGFuIHRoZSBlbXVsYXRpb24uCisKKy0gSXNzdWUgIzE1MjMzOiBQeXRob24gbm93IGd1YXJhbnRlZXMgdGhhdCBjYWxsYWJsZXMgcmVnaXN0ZXJlZCB3aXRoIHRoZSBhdGV4aXQKKyAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGluIGEgZGV0ZXJtaW5pc3RpYyBvcmRlci4KKworLSBJc3N1ZSAjMTUyMzg6IHNodXRpbC5jb3B5c3RhdCBub3cgY29waWVzIExpbnV4ICJleHRlbmRlZCBhdHRyaWJ1dGVzIi4KKworLSBJc3N1ZSAjMTUyMzA6IHJ1bnB5LnJ1bl9wYXRoIG5vdyBjb3JyZWN0bHkgc2V0cyBfX3BhY2thZ2VfXyBhcyBkZXNjcmliZWQgaW4KKyAgdGhlIGRvY3VtZW50YXRpb24uCisKKy0gSXNzdWUgIzE1MzE1OiBTdXBwb3J0IFZTIDIwMTAgaW4gZGlzdHV0aWxzIGN5Z3dpbmNvbXBpbGVyLgorCistIElzc3VlICMxNTI5NDogRml4IGEgcmVncmVzc2lvbiBpbiBwa2d1dGlsLmV4dGVuZF9wYXRoKCkncyBoYW5kbGluZyBvZiBuZXN0ZWQKKyAgbmFtZXNwYWNlIHBhY2thZ2VzLgorCistIElzc3VlICMxNTA1NjogaW1wLmNhY2hlX2Zyb21fc291cmNlKCkgYW5kIHNvdXJjZV9mcm9tX2NhY2hlKCkgcmFpc2UKKyAgTm90SW1wbGVtZW50ZWRFcnJvciB3aGVuIHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWcgaXMgc2V0IHRvIE5vbmUuCisKKy0gSXNzdWUgIzE1MjU2OiBHcmFtbWF0aWNhbCBtaXN0YWtlIGluIGV4Y2VwdGlvbiByYWlzZWQgYnkgaW1wLmZpbmRfbW9kdWxlKCkuCisKKy0gSXNzdWUgIzU5MzE6IHdzZ2lyZWYgZW52aXJvbiB2YXJpYWJsZSBTRVJWRVJfU09GVFdBUkUgd2lsbCBzcGVjaWZ5IGFuCisgIGltcGxlbWVudGF0aW9uIHNwZWNpZmljIHRlcm0gbGlrZSBDUHl0aG9uLCBKeXRob24gaW5zdGVhZCBvZiBnZW5lcmljICJQeXRob24iLgorCistIElzc3VlICMxMzI0ODogUmVtb3ZlIG9ic29sZXRlIGFyZ3VtZW50ICJtYXhfYnVmZmVyX3NpemUiIG9mIEJ1ZmZlcmVkV3JpdGVyIGFuZAorICBCdWZmZXJlZFJXUGFpciwgZnJvbSB0aGUgaW8gbW9kdWxlLgorCistIElzc3VlICMxMzI0ODogUmVtb3ZlIG9ic29sZXRlIGFyZ3VtZW50ICJ2ZXJzaW9uIiBvZiBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlci4KKworLSBJc3N1ZSAjMTQ4MTQ6IEltcGxlbWVudCBtb3JlIGNvbnNpc3RlbnQgb3JkZXJpbmcgYW5kIHNvcnRpbmcgYmVoYXZpb3VyIGZvcgorICBpcGFkZHJlc3Mgb2JqZWN0cy4KKworLSBJc3N1ZSAjMTQ4MTQ6IGlwYWRkcmVzcyBuZXR3b3JrIG9iamVjdHMgY29ycmVjdGx5IHJldHVybiBOb3RJbXBsZW1lbnRlZCB3aGVuCisgIGNvbXBhcmVkIHRvIGFyYml0cmFyeSBvYmplY3RzIGluc3RlYWQgb2YgcmFpc2luZyBUeXBlRXJyb3IuCisKKy0gSXNzdWUgIzE0OTkwOiBDb3JyZWN0bHkgZmFpbCB3aXRoIFN5bnRheEVycm9yIG9uIGludmFsaWQgZW5jb2RpbmcgZGVjbGFyYXRpb24uCisKKy0gSXNzdWUgIzE0ODE0OiBpcGFkZHJlc3Mgbm93IHByb3ZpZGVzIG1vcmUgaW5mb3JtYXRpdmUgZXJyb3IgbWVzc2FnZXMgd2hlbgorICBjb25zdHJ1Y3RpbmcgaW5zdGFuY2VzIGRpcmVjdGx5IChjaGFuZ2VzIHBlcm1pdHRlZCBkdXJpbmcgYmV0YSBkdWUgdG8KKyAgcHJvdmlzaW9uYWwgQVBJIHN0YXR1cykuCisKKy0gSXNzdWUgIzE1MjQ3OiBGaWxlSU8gbm93IHJhaXNlcyBhbiBlcnJvciB3aGVuIGdpdmVuIGEgZmlsZSBkZXNjcmlwdG9yIHBvaW50aW5nCisgIHRvIGEgZGlyZWN0b3J5LgorCistIElzc3VlICMxNTI2MTogU3RvcCBvcy5zdGF0KGZkKSBjcmFzaGluZyBvbiBXaW5kb3dzIHdoZW4gZmQgbm90IG9wZW4uCisKKy0gSXNzdWUgIzE1MTY2OiBJbXBsZW1lbnQgaW1wLmdldF90YWcoKSB1c2luZyBzeXMuaW1wbGVtZW50YXRpb24uY2FjaGVfdGFnLgorCistIElzc3VlICMxNTIxMDogQ2F0Y2ggS2V5RXJyb3Igd2hlbiBpbXBvcnRsaWIuX19pbml0X18gY2FuJ3QgZmluZAorICBfZnJvemVuX2ltcG9ydGxpYiBpbiBzeXMubW9kdWxlcywgbm90IEltcG9ydEVycm9yLgorCistIElzc3VlICMxNTAzMDogaW1wb3J0bGliLmFiYy5QeVB5Y0xvYWRlciBub3cgc3VwcG9ydHMgdGhlIG5ldyBzb3VyY2Ugc2l6ZQorICBoZWFkZXIgZmllbGQgaW4gLnB5YyBmaWxlcy4KKworLSBJc3N1ZSAjNTM0NjogUHJlc2VydmUgcGVybWlzc2lvbnMgb2YgbWJveCwgTU1ERiBhbmQgQmFieWwgbWFpbGJveCBmaWxlcyBvbgorICBmbHVzaCgpLgorCistIElzc3VlICMxMDU3MTogRml4IHRoZSAiLS1zaWduIiBvcHRpb24gb2YgZGlzdHV0aWxzJyB1cGxvYWQgY29tbWFuZC4gIFBhdGNoIGJ5CisgIEpha3ViIFdpbGsuCisKKy0gSXNzdWUgIzk1NTk6IElmIG1lc3NhZ2VzIHdlcmUgb25seSBhZGRlZCwgYSBuZXcgZmlsZSBpcyBubyBsb25nZXIgY3JlYXRlZCBhbmQKKyAgcmVuYW1lZCBvdmVyIHRoZSBvbGQgZmlsZSB3aGVuIGZsdXNoKCkgaXMgY2FsbGVkIG9uIGFuIG1ib3gsIE1NREYgb3IgQmFieWwKKyAgbWFpbGJveC4KKworLSBJc3N1ZSAxMDkyNDogRml4ZWQgY3J5cHQubWtzYWx0KCkgdG8gdXNlIGEgUk5HIHRoYXQgaXMgc3VpdGFibGUgZm9yCisgIGNyeXB0b2dyYXBoaWMgcHVycG9zZS4KKworLSBJc3N1ZSAjMTUxODQ6IEVuc3VyZSBjb25zaXN0ZW50IHJlc3VsdHMgb2YgT1MgWCBjb25maWd1cmF0aW9uIHRhaWxvcmluZyBmb3IKKyAgdW5pdmVyc2FsIGJ1aWxkcyBieSBmYWN0b3Jpbmcgb3V0IGNvbW1vbiBPUyBYLXNwZWNpZmljIGN1c3RvbWl6YXRpb25zIGZyb20KKyAgc3lzY29uZmlnLCBkaXN0dXRpbHMuc3lzY29uZmlnLCBkaXN0dXRpbHMudXRpbCwgYW5kIGRpc3R1dGlscy51bml4Y2NvbXBpbGVyCisgIGludG8gYSBuZXcgbW9kdWxlIF9vc3hfc3VwcG9ydC4KKworQyBBUEkKKy0tLS0tCisKKy0gSXNzdWUgIzE1NjEwOiBQeUltcG9ydF9JbXBvcnRNb2R1bGVFeCgpIG5vdyB1c2VzIGEgJ2xldmVsJyBvZiAwIGluc3RlYWQgb2YgLTEuCisKKy0gSXNzdWVzICMxNTE2OSwgIzE0NTk5OiBTdHJpcCBvdXQgdGhlIEMgaW1wbGVtZW50YXRpb24gb2YKKyAgaW1wLnNvdXJjZV9mcm9tX2NhY2hlKCkgdXNlZCBieSBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZVdpdGhQYXRobmFtZXMoKSBhbmQKKyAgdXNlZCB0aGUgUHl0aG9uIGNvZGUgaW5zdGVhZC4gTGVhZHMgdG8gUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVPYmplY3QoKSB0byBub3QKKyAgdHJ5IHRvIGluZmVyIHRoZSBzb3VyY2UgcGF0aCBmcm9tIHRoZSBieXRlY29kZSBwYXRoIGFzCisgIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlV2l0aFBhdGhuYW1lcygpIGRvZXMuCisKK0V4dGVuc2lvbiBNb2R1bGVzCistLS0tLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxNTY3NjogTm93ICJtbWFwIiBjaGVjayBmb3IgZW1wdHkgZmlsZXMgYmVmb3JlIGRvaW5nIHRoZQorICBvZmZzZXQgY2hlY2suICBQYXRjaCBieSBTdGV2ZW4gV2lsbGlzLgorCistIElzc3VlICM2NDkzOiBBbiBpc3N1ZSBpbiBjdHlwZXMgb24gV2luZG93cyB0aGF0IGNhdXNlZCBzdHJ1Y3R1cmUgYml0ZmllbGRzCisgIG9mIHR5cGUgY3R5cGVzLmNfdWludDMyIGFuZCB3aWR0aCAzMiB0byBpbmNvcnJlY3RseSBiZSBzZXQgaGFzIGJlZW4gZml4ZWQuCisKKy0gSXNzdWUgIzE1MTk0OiBVcGRhdGUgbGliZmZpIHRvIHRoZSAzLjAuMTEgcmVsZWFzZS4KKworVG9vbHMvRGVtb3MKKy0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzE1NDU4OiBweXRob24tY29uZmlnIGdldHMgYSBuZXcgb3B0aW9uIC0tY29uZmlnZGlyIHRvIHByaW50IHRoZSAkTElCUEwKKyAgdmFsdWUuCisKKy0gTW92ZSBpbXBvcnRsaWIudGVzdC5iZW5jaG1hcmsgdG8gVG9vbHMvaW1wb3J0YmVuY2guCisKKy0gSXNzdWUgIzEyNjA1OiBUaGUgZ2RiIGhvb2tzIGZvciBkZWJ1Z2dpbmcgQ1B5dGhvbiAod2l0aGluIFRvb2xzL2dkYikgaGF2ZSBiZWVuCisgIGVuaGFuY2VkIHRvIHNob3cgaW5mb3JtYXRpb24gb24gbW9yZSBDIGZyYW1lcyByZWxldmFudCB0byBDUHl0aG9uIHdpdGhpbiB0aGUKKyAgInB5LWJ0IiBhbmQgInB5LWJ0LWZ1bGwiIGNvbW1hbmRzOgorCisgICogQyBmcmFtZXMgdGhhdCBhcmUgd2FpdGluZyBvbiB0aGUgR0lMCisgICogQyBmcmFtZXMgdGhhdCBhcmUgZ2FyYmFnZS1jb2xsZWN0aW5nCisgICogQyBmcmFtZXMgdGhhdCBhcmUgZHVlIHRvIHRoZSBpbnZvY2F0aW9uIG9mIGEgUHlDRnVuY3Rpb24KKworRG9jdW1lbnRhdGlvbgorLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxNTQ0NDogVXNlIHByb3BlciBzcGVsbGluZyBmb3Igbm9uLUFTQ0lJIGNvbnRyaWJ1dG9yIG5hbWVzLiAgUGF0Y2gKKyAgYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTUyOTU6IFJlb3JnYW5pemUgYW5kIHJld3JpdGUgdGhlIGRvY3VtZW50YXRpb24gb24gdGhlIGltcG9ydCBzeXN0ZW0uCisKKy0gSXNzdWUgIzE1MjMwOiBDbGVhcmx5IGRvY3VtZW50IHNvbWUgb2YgdGhlIGxpbWl0YXRpb25zIG9mIHRoZSBydW5weSBtb2R1bGUgYW5kCisgIG51ZGdlIHJlYWRlcnMgdG93YXJkcyBpbXBvcnRsaWIgd2hlbiBhcHByb3ByaWF0ZS4KKworLSBJc3N1ZSAjMTUwNTM6IENvcHkgUHl0aG9uIDMuMyBpbXBvcnQgbG9jayBjaGFuZ2Ugbm90aWNlIHRvIGFsbCByZWxldmFudAorICBmdW5jdGlvbnMgaW4gaW1wIGluc3RlYWQgb2YganVzdCBhdCB0aGUgdG9wIG9mIHRoZSByZWxldmFudCBzZWN0aW9uLgorCistIElzc3VlICMxNTI4ODogTGluayB0byB0aGUgdGVybSAibG9hZGVyIiBpbiBub3RlcyBpbiBwa2d1dGlsIGFib3V0IGhvdyB0aGluZ3MKKyAgd29uJ3Qgd29yayBhcyBleHBlY3RlZCBpbiBQeXRob24gMy4zIGFuZCBtYXJrIHRoZSByZXF1aXNpdGUgZnVuY3Rpb25zIGFzCisgICJjaGFuZ2VkIiBzaW5jZSB0aGV5IHdpbGwgbm8gbG9uZ2VyIHdvcmsgd2l0aCBtb2R1bGVzIGRpcmVjdGx5IGltcG9ydGVkIGJ5CisgIGltcG9ydCBpdHNlbGYuCisKKy0gSXNzdWUgIzEzNTU3OiBDbGFyaWZ5IGVmZmVjdCBvZiBnaXZpbmcgdHdvIGRpZmZlcmVudCBuYW1lc3BhY2VzIHRvIGV4ZWMgb3IKKyAgZXhlY2ZpbGUoKS4KKworLSBJc3N1ZSAjMTUyNTA6IERvY3VtZW50IHRoYXQgZmlsZWNtcC5kaXJjbXAgY29tcGFyZXMgZmlsZXMgc2hhbGxvd2x5LiBQYXRjaAorICBjb250cmlidXRlZCBieSBDaHJpcyBKZXJkb25lay4KKworVGVzdHMKKy0tLS0tCisKKy0gSXNzdWUgIzE1NDY3OiBNb3ZlIGhlbHBlcnMgZm9yIF9fc2l6ZW9mX18gdGVzdHMgaW50byB0ZXN0X3N1cHBvcnQuICBQYXRjaCBieQorICBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxNTMyMDogTWFrZSBpdGVyYXRpbmcgdGhlIGxpc3Qgb2YgdGVzdHMgdGhyZWFkLXNhZmUgd2hlbiBydW5uaW5nIHRlc3RzCisgIGluIG11bHRpcHJvY2VzcyBtb2RlLiBQYXRjaCBieSBDaHJpcyBKZXJkb25lay4KKworLSBJc3N1ZSAjMTUxNjg6IE1vdmUgaW1wb3J0bGliLnRlc3QgdG8gdGVzdC50ZXN0X2ltcG9ydGxpYi4KKworLSBJc3N1ZSAjMTUwOTE6IFJlYWN0aXZhdGUgYSB0ZXN0IG9uIFVOSVggd2hpY2ggd2FzIGZhaWxpbmcgdGhhbmtzIHRvIGEKKyAgZm9yZ290dGVuIGltcG9ydGxpYi5pbnZhbGlkYXRlX2NhY2hlcygpIGNhbGwuCisKKy0gSXNzdWUgIzE1MjMwOiBBZG9wdGVkIGEgbW9yZSBzeXN0ZW1hdGljIGFwcHJvYWNoIGluIHRoZSBydW5weSB0ZXN0cy4KKworLSBJc3N1ZSAjMTUzMDA6IEVuc3VyZSB0aGUgdGVtcG9yYXJ5IHRlc3Qgd29ya2luZyBkaXJlY3RvcmllcyBhcmUgaW4gdGhlIHNhbWUKKyAgcGFyZW50IGZvbGRlciB3aGVuIHJ1bm5pbmcgdGVzdHMgaW4gbXVsdGlwcm9jZXNzIG1vZGUgZnJvbSBhIFB5dGhvbiBidWlsZC4KKyAgUGF0Y2ggYnkgQ2hyaXMgSmVyZG9uZWsuCisKKy0gSXNzdWUgIzE1Mjg0OiBTa2lwIHtzZW5kLHJlY3Z9bXNnIHRlc3RzIGluIHRlc3Rfc29ja2V0IHdoZW4gSVB2NiBpcyBub3QKKyAgZW5hYmxlZC4gUGF0Y2ggYnkgQnJpYW4gQnJhemlsLgorCistIElzc3VlICMxNTI3NzogRml4IGEgcmVzb3VyY2UgbGVhayBpbiBzdXBwb3J0LnB5IHdoZW4gSVB2NiBpcyBkaXNhYmxlZC4gIFBhdGNoCisgIGJ5IEJyaWFuIEJyYXppbC4KKworQnVpbGQKKy0tLS0tCisKKy0gSXNzdWUgIzExNzE1OiBGaXggbXVsdGlhcmNoIGRldGVjdGlvbiB3aXRob3V0IGhhdmluZyBEZWJpYW4gZGV2ZWxvcG1lbnQgdG9vbHMKKyAgKGRwa2ctZGV2KSBpbnN0YWxsZWQuCisKKy0gSXNzdWUgIzE1MDM3OiBCdWlsZCBPUyBYIGluc3RhbGxlcnMgd2l0aCBsb2NhbCBjb3B5IG9mIG5jdXJzZXMgNS45IGxpYnJhcmllcworICB0byBhdm9pZCBjdXJzZXMudW5nZXRfd2NoIGJ1ZyBwcmVzZW50IGluIG9sZGVyIHZlcnNpb25zIG9mIG5jdXJzZXMgc3VjaCBhcworICB0aG9zZSBzaGlwcGVkIHdpdGggT1MgWC4KKworLSBJc3N1ZSAjMTU1NjA6IEZpeCBidWlsZGluZyBfc3FsaXRlMyBleHRlbnNpb24gb24gT1MgWCB3aXRoIGFuIFNESy4gIEFsc28sIGZvcgorICBPUyBYIGluc3RhbGxlcnMsIGVuc3VyZSBjb25zaXN0ZW50IHNxbGl0ZTMgYmVoYXZpb3IgYW5kIGZlYXR1cmUgYXZhaWxhYmlsaXR5CisgIGJ5IGJ1aWxkaW5nIGEgbG9jYWwgY29weSBvZiBsaWJzcWxpdGUzIHJhdGhlciB0aGFuIGRlcGVuZGluZyBvbiB0aGUgd2lkZSByYW5nZQorICBvZiB2ZXJzaW9ucyBzdXBwbGllZCB3aXRoIHZhcmlvdXMgT1MgWCByZWxlYXNlcy4KKworLSBJc3N1ZSAjODg0NzogRGlzYWJsZSBDT01EQVQgZm9sZGluZyBpbiBXaW5kb3dzIFBHTyBidWlsZHMuCisKKy0gSXNzdWUgIzE0MDE4OiBGaXggT1MgWCBUY2wvVGsgZnJhbWV3b3JrIGNoZWNraW5nIHdoZW4gdXNpbmcgT1MgWCBTREtzLgorCistIElzc3VlICMxNTQzMTogQWRkIF9mcmVlemVfaW1wb3J0bGliIHByb2plY3QgdG8gcmVnZW5lcmF0ZSBpbXBvcnRsaWIuaCBvbgorICBXaW5kb3dzLiBQYXRjaCBieSBLcmlzdGrDoW4gVmFsdXIgSsOzbnNzb24uCisKKy0gSXNzdWUgIzE0MTk3OiBGb3IgT1MgWCBmcmFtZXdvcmsgYnVpbGRzLCBlbnN1cmUgbGlua3MgdG8gdGhlIHNoYXJlZCBsaWJyYXJ5CisgIGFyZSBjcmVhdGVkIHdpdGggdGhlIHByb3BlciBBQkkgc3VmZml4LgorCistIElzc3VlICMxNDMzMDogRm9yIGNyb3NzIGJ1aWxkcywgZG9uJ3QgdXNlIGhvc3QgcHl0aG9uLCB1c2UgaG9zdCBzZWFyY2ggcGF0aHMKKyAgZm9yIGhvc3QgY29tcGlsZXIuCisKKy0gSXNzdWUgIzE1MjM1OiBBbGxvdyBCZXJrbGV5IERCIHZlcnNpb25zIHVwIHRvIDUuMyB0byBidWlsZCB0aGUgZGJtIG1vZHVsZS4KKworLSBJc3N1ZSAjMTUyNjg6IFNlYXJjaCBjdXJzZXMuaCBpbiAvdXNyL2luY2x1ZGUvbmN1cnNlc3cuCisKKworV2hhdCdzIE5ldyBpbiBQeXRob24gMy4zLjAgQmV0YSAxPworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisqUmVsZWFzZSBkYXRlOiAyNy1KdW4tMjAxMioKKworQ29yZSBhbmQgQnVpbHRpbnMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy0gRml4IGEgKG1vc3QgbGlrZWx5KSB2ZXJ5IHJhcmUgbWVtb3J5IGxlYWsgd2hlbiBjYWxsaW5nIG1haW4oKSBhbmQgbm90IGJlaW5nCisgIGFibGUgdG8gZGVjb2RlIGEgY29tbWFuZC1saW5lIGFyZ3VtZW50LgorCistIElzc3VlICMxNDgxNTogVXNlIFB5X3NzaXplX3QgaW5zdGVhZCBvZiBsb25nIGZvciB0aGUgb2JqZWN0IGhhc2gsIHRvCisgIHByZXNlcnZlIGFsbCA2NCBiaXRzIG9mIGhhc2ggb24gV2luNjQuCisKKy0gSXNzdWUgIzEyMjY4OiBGaWxlIHJlYWRsaW5lLCByZWFkbGluZXMgYW5kIHJlYWQoKSBvciByZWFkYWxsKCkgbWV0aG9kcworICBubyBsb25nZXIgbG9zZSBkYXRhIHdoZW4gYW4gdW5kZXJseWluZyByZWFkIHN5c3RlbSBjYWxsIGlzIGludGVycnVwdGVkLgorICBJT0Vycm9yIGlzIG5vIGxvbmdlciByYWlzZWQgZHVlIHRvIGEgcmVhZCBzeXN0ZW0gY2FsbCByZXR1cm5pbmcgRUlOVFIKKyAgZnJvbSB3aXRoaW4gdGhlc2UgbWV0aG9kcy4KKworLSBJc3N1ZSAjMTE2MjY6IEFkZCBfU2l6ZVQgZnVuY3Rpb25zIHRvIHN0YWJsZSBBQkkuCisKKy0gSXNzdWUgIzE1MTQ2OiBBZGQgUHlUeXBlX0Zyb21TcGVjV2l0aEJhc2VzLiBQYXRjaCBieSBSb2JpbiBTY2hyZWliZXIuCisKKy0gSXNzdWUgIzE1MTQyOiBGaXggcmVmZXJlbmNlIGxlYWsgd2hlbiBkZWFsbG9jYXRpbmcgaW5zdGFuY2VzIG9mIHR5cGVzCisgIGNyZWF0ZWQgdXNpbmcgUHlUeXBlX0Zyb21TcGVjKCkuCisKKy0gSXNzdWUgIzE1MDQyOiBBZGQgUHlTdGF0ZV9BZGRNb2R1bGUgYW5kIFB5U3RhdGVfUmVtb3ZlTW9kdWxlLiBBZGQgdmVyc2lvbgorICBndWFyZCBmb3IgUHlfTElNSVRFRF9BUEkgYWRkaXRpb25zLiBQYXRjaCBieSBSb2JpbiBTY2hyZWliZXIuCisKKy0gSXNzdWUgIzEwMDUzOiBEb24ndCBjbG9zZSBGRHMgd2hlbiBGaWxlSU8uX19pbml0X18gZmFpbHMuIExvb3NlbHkgYmFzZWQgb24KKyAgdGhlIHdvcmsgYnkgSGlyb2thenUgWWFtYW1vdG8uCisKKy0gSXNzdWUgIzE1MDk2OiBSZW1vdmVkIHN1cHBvcnQgZm9yIHVyJycgYXMgdGhlIHJhdyBub3RhdGlvbiBpc24ndAorICBjb21wYXRpYmxlIHdpdGggUHl0aG9uIDIueCdzIHJhdyB1bmljb2RlIHN0cmluZ3MuCisKKy0gSXNzdWUgIzEzNzgzOiBHZW5lcmF0b3Igb2JqZWN0cyBub3cgdXNlIHRoZSBpZGVudGlmaWVyIEFQSXMgaW50ZXJuYWxseQorCistIElzc3VlICMxNDg3NDogUmVzdG9yZSBjaGFybWFwIGRlY29kaW5nIHNwZWVkIHRvIHByZS1QRVAgMzkzIGxldmVscy4KKyAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTUwMjY6IHV0Zi0xNiBlbmNvZGluZyBpcyBub3cgc2lnbmlmaWNhbnRseSBmYXN0ZXIgKHVwIHRvIDEweCkuCisgIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzExMDIyOiBvcGVuKCkgYW5kIGlvLlRleHRJT1dyYXBwZXIgYXJlIG5vdyBjYWxsaW5nCisgIGxvY2FsZS5nZXRwcmVmZXJyZWRlbmNvZGluZyhGYWxzZSkgaW5zdGVhZCBvZiBsb2NhbGUuZ2V0cHJlZmVycmVkZW5jb2RpbmcoKQorICBpbiB0ZXh0IG1vZGUgaWYgdGhlIGVuY29kaW5nIGlzIG5vdCBzcGVjaWZpZWQuIERvbid0IGNoYW5nZSB0ZW1wb3JhcnkgdGhlCisgIGxvY2FsZSBlbmNvZGluZyB1c2luZyBsb2NhbGUuc2V0bG9jYWxlKCksIHVzZSB0aGUgY3VycmVudCBsb2NhbGUgZW5jb2RpbmcKKyAgaW5zdGVhZCBvZiB0aGUgdXNlciBwcmVmZXJyZWQgZW5jb2RpbmcuCisKKy0gSXNzdWUgIzE0NjczOiBBZGQgRXJpYyBTbm93J3Mgc3lzLmltcGxlbWVudGF0aW9uIGltcGxlbWVudGF0aW9uLgorCistIElzc3VlICMxNTAzODogT3B0aW1pemUgcHl0aG9uIExvY2tzIG9uIFdpbmRvd3MuCisKK0xpYnJhcnkKKy0tLS0tLS0KKworLSBJc3N1ZSAjOTgwMzogRG9uJ3QgY2xvc2UgSURMRSBvbiBzYXZpbmcgaWYgYnJlYWtwb2ludCBpcyBvcGVuLgorICBQYXRjaCBieSBSb2dlciBTZXJ3eS4KKworLSBJc3N1ZSAjMTIyODg6IENvbnNpZGVyICcwJyBhbmQgJzAuMCcgYXMgdmFsaWQgaW5pdGlhbHZhbHVlCisgIGZvciB0a2ludGVyIFNpbXBsZURpYWxvZy4KKworLSBJc3N1ZSAjMTU1MTI6IEFkZCBhIF9fc2l6ZW9mX18gaW1wbGVtZW50YXRpb24gZm9yIHBhcnNlci4KKyAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTU0Njk6IEFkZCBhIF9fc2l6ZW9mX18gaW1wbGVtZW50YXRpb24gZm9yIGRlcXVlIG9iamVjdHMuCisgIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE1NDg5OiBBZGQgYSBfX3NpemVvZl9fIGltcGxlbWVudGF0aW9uIGZvciBCeXRlc0lPIG9iamVjdHMuCisgIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE1NDg3OiBBZGQgYSBfX3NpemVvZl9fIGltcGxlbWVudGF0aW9uIGZvciBidWZmZXJlZCBJL08gb2JqZWN0cy4KKyAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTU1MTQ6IENvcnJlY3QgX19zaXplb2ZfXyBzdXBwb3J0IGZvciBjcHVfc2V0LgorICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxNTE4NzogQnVnZml4OiByZW1vdmUgdGVtcG9yYXJ5IGRpcmVjdG9yaWVzIHRlc3Rfc2h1dGlsIHdhcyBsZWF2aW5nCisgIGJlaGluZC4KKworLSBJc3N1ZSAjMTUxNzc6IEFkZGVkIGRpcl9mZCBwYXJhbWV0ZXIgdG8gb3MuZndhbGsoKS4KKworLSBJc3N1ZSAjMTUxNzY6IENsYXJpZmllZCBiZWhhdmlvciwgZG9jdW1lbnRhdGlvbiwgYW5kIGltcGxlbWVudGF0aW9uCisgIG9mIG9zLmxpc3RkaXIoKS4KKworLSBJc3N1ZSAjMTUwNjE6IFJlLWltcGxlbWVudGVkIGhtYWMuY29tcGFyZV9kaWdlc3QoKSBpbiBDIHRvIHByZXZlbnQgZnVydGhlcgorICB0aW1pbmcgYW5hbHlzaXMgYW5kIHRvIHN1cHBvcnQgYWxsIGJ1ZmZlciBwcm90b2NvbCBhd2FyZSBvYmplY3RzIGFzIHdlbGwgYXMKKyAgQVNDSUkgb25seSBzdHIgaW5zdGFuY2VzIHNhZmVseS4KKworLSBJc3N1ZSAjMTUxNjQ6IENoYW5nZSByZXR1cm4gdmFsdWUgb2YgcGxhdGZvcm0udW5hbWUoKSBmcm9tIGEKKyAgcGxhaW4gdHVwbGUgdG8gYSBjb2xsZWN0aW9ucy5uYW1lZHR1cGxlLgorCistIFN1cHBvcnQgTWFnZWlhIExpbnV4IGluIHRoZSBwbGF0Zm9ybSBtb2R1bGUuCisKKy0gSXNzdWUgIzExNjc4OiBTdXBwb3J0IEFyY2ggbGludXggaW4gdGhlIHBsYXRmb3JtIG1vZHVsZS4KKworLSBJc3N1ZSAjMTUxMTg6IENoYW5nZSByZXR1cm4gdmFsdWUgb2Ygb3MudW5hbWUoKSBhbmQgb3MudGltZXMoKSBmcm9tCisgIHBsYWluIHR1cGxlcyB0byBpbW11dGFibGUgaXRlcmFibGUgb2JqZWN0cyB3aXRoIG5hbWVkIGF0dHJpYnV0ZXMKKyAgKHN0cnVjdHNlcSBvYmplY3RzKS4KKworLSBTcGVlZCB1cCBfZGVjaW1hbCBieSBhbm90aGVyIDEwLTE1JSBieSBjYWNoaW5nIHRoZSB0aHJlYWQgbG9jYWwgY29udGV4dAorICB0aGF0IHdhcyBsYXN0IGFjY2Vzc2VkLiBJbiB0aGUgcGkgYmVuY2htYXJrICg2NC1iaXQgcGxhdGZvcm0sIHByZWM9OSksCisgIF9kZWNpbWFsIGlzIG5vdyBvbmx5IDEuNXggc2xvd2VyIHRoYW4gZmxvYXQuCisKKy0gUmVtb3ZlIHRoZSBwYWNrYWdpbmcgbW9kdWxlLCB3aGljaCBpcyBub3QgcmVhZHkgZm9yIHByaW1lIHRpbWUuCisKKy0gSXNzdWUgIzE1MTU0OiBBZGQgImRpcl9mZCIgcGFyYW1ldGVyIHRvIG9zLnJtZGlyLCByZW1vdmUgInJtZGlyIgorICBwYXJhbWV0ZXIgZnJvbSBvcy5yZW1vdmUgLyBvcy51bmxpbmsuCisKKy0gSXNzdWUgIzQ0ODk6IEFkZCBhIHNodXRpbC5ybXRyZWUgdGhhdCBpc24ndCBzdXNjZXB0aWJsZSB0byBzeW1saW5rIGF0dGFja3MuCisgIEl0IGlzIHVzZWQgYXV0b21hdGljYWxseSBvbiBwbGF0Zm9ybXMgc3VwcG9ydGluZyB0aGUgbmVjZXNzYXJ5IG9zLm9wZW5hdCgpCisgIGFuZCBvcy51bmxpbmthdCgpIGZ1bmN0aW9ucy4gTWFpbiBjb2RlIGJ5IE1hcnRpbiB2b24gTMO2d2lzLgorCistIElzc3VlICMxNTE1NjogSFRNTFBhcnNlciBub3cgdXNlcyB0aGUgbmV3ICJodG1sLmVudGl0aWVzLmh0bWw1IiBkaWN0aW9uYXJ5LgorCistIElzc3VlICMxMTExMzogYWRkIGEgbmV3ICJodG1sNSIgZGljdGlvbmFyeSBjb250YWluaW5nIHRoZSBuYW1lZCBjaGFyYWN0ZXIKKyAgcmVmZXJlbmNlcyBkZWZpbmVkIGJ5IHRoZSBIVE1MNSBzdGFuZGFyZCBhbmQgdGhlIGVxdWl2YWxlbnQgVW5pY29kZQorICBjaGFyYWN0ZXIocykgdG8gdGhlIGh0bWwuZW50aXRpZXMgbW9kdWxlLgorCistIElzc3VlICMxNTExNDogdGhlIHN0cmljdCBtb2RlIG9mIEhUTUxQYXJzZXIgYW5kIHRoZSBIVE1MUGFyc2VFcnJvciBleGNlcHRpb24KKyAgYXJlIGRlcHJlY2F0ZWQgbm93IHRoYXQgdGhlIHBhcnNlciBpcyBhYmxlIHRvIHBhcnNlIGludmFsaWQgbWFya3VwLgorCistIElzc3VlICMzNjY1OiBcdSBhbmQgXFUgZXNjYXBlcyBhcmUgbm93IHN1cHBvcnRlZCBpbiB1bmljb2RlIHJlZ3VsYXIKKyAgZXhwcmVzc2lvbnMuICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxNTE1MzogQWRkZWQgaW5zcGVjdC5nZXRnZW5lcmF0b3Jsb2NhbHMgdG8gc2ltcGxpZnkgd2hpdGUgYm94CisgIHRlc3Rpbmcgb2YgZ2VuZXJhdG9yIHN0YXRlIHVwZGF0ZXMKKworLSBJc3N1ZSAjMTMwNjI6IEFkZGVkIGluc3BlY3QuZ2V0Y2xvc3VyZXZhcnMgdG8gc2ltcGxpZnkgdGVzdGluZyBzdGF0ZWZ1bAorICBjbG9zdXJlcworCistIElzc3VlICMxMTAyNDogRml4ZXMgYW5kIGFkZGl0aW9uYWwgdGVzdHMgZm9yIFRpbWUySW50ZXJuYWxkYXRlLgorCistIElzc3VlICMxNDYyNjogTGFyZ2UgcmVmYWN0b3Jpbmcgb2YgZnVuY3Rpb25zIC8gcGFyYW1ldGVycyBpbiB0aGUgb3MgbW9kdWxlLgorICBNYW55IGZ1bmN0aW9ucyBub3cgc3VwcG9ydCAiZGlyX2ZkIiBhbmQgImZvbGxvd19zeW1saW5rcyIgcGFyYW1ldGVyczsKKyAgc29tZSBhbHNvIHN1cHBvcnQgYWNjZXB0aW5nIGFuIG9wZW4gZmlsZSBkZXNjcmlwdG9yIGluIHBsYWNlIG9mIGEgcGF0aAorICBzdHJpbmcuICBBZGRlZCBvcy5zdXBwb3J0XyogY29sbGVjdGlvbnMgYXMgTEJZTCBoZWxwZXJzLiAgUmVtb3ZlZCBtYW55CisgIGZ1bmN0aW9ucyBvbmx5IHByZXZpb3VzbHkgc2VlbiBpbiAzLjMgYWxwaGEgcmVsZWFzZXMgKG9mdGVuIHN0YXJ0aW5nIHdpdGgKKyAgImYiIG9yICJsIiwgb3IgZW5kaW5nIHdpdGggImF0IikuICBPcmlnaW5hbGx5IHN1Z2dlc3RlZCBieSBTZXJoaXkgU3RvcmNoYWthOworICBpbXBsZW1lbnRlZCBieSBMYXJyeSBIYXN0aW5ncy4KKworLSBJc3N1ZSAjMTUwMDg6IEltcGxlbWVudCBQRVAgMzYyICJTaWduYXR1cmUgT2JqZWN0cyIuCisgIFBhdGNoIGJ5IFl1cnkgU2VsaXZhbm92LgorCistIElzc3VlOiAjMTUxMzg6IGJhc2U2NC51cmxzYWZlX3tlbixkZX1jb2RlKCkgYXJlIG5vdyAzLTR4IGZhc3Rlci4KKworLSBJc3N1ZSAjNDQ0NTgyOiBBZGQgc2h1dGlsLndoaWNoLCBmb3IgZmluZGluZyBwcm9ncmFtcyBvbiB0aGUgc3lzdGVtIHBhdGguCisgIE9yaWdpbmFsIHBhdGNoIGJ5IEVyaWsgRGVtYWluZSwgd2l0aCBsYXRlciBpdGVyYXRpb25zIGJ5IEphbiBLaWxsaWFuCisgIGFuZCBCcmlhbiBDdXJ0aW4uCisKKy0gSXNzdWUgIzE0ODM3OiBTU0wgZXJyb3JzIG5vdyBoYXZlIGBgbGlicmFyeWBgIGFuZCBgYHJlYXNvbmBgIGF0dHJpYnV0ZXMKKyAgZGVzY3JpYmluZyBwcmVjaXNlbHkgd2hhdCBoYXBwZW5lZCBhbmQgaW4gd2hpY2ggT3BlblNTTCBzdWJtb2R1bGUuICBUaGUKKyAgc3RyKCkgb2YgYSBTU0xFcnJvciBpcyBhbHNvIGVuaGFuY2VkIGFjY29yZGluZ2x5LgorCistIElzc3VlICM5NTI3OiBkYXRldGltZS5hc3RpbWV6b25lKCkgbWV0aG9kIHdpbGwgbm93IHN1cHBseSBhIGNsYXNzCisgIHRpbWV6b25lIGluc3RhbmNlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHN5c3RlbSBsb2NhbCB0aW1lem9uZSB3aGVuCisgIGNhbGxlZCB3aXRoIG5vIGFyZ3VtZW50cy4KKworLSBJc3N1ZSAjMTQ2NTM6IGVtYWlsLnV0aWxzLm1rdGltZV90eigpIG5vIGxvbmdlciByZWxpZXMgb24gc3lzdGVtCisgIG1rdGltZSgpIHdoZW4gdGltZXpvbmUgb2ZmZXN0IGlzIHN1cHBsaWVkLgorCistIElzc3VlICMxNDY4NDogemxpYi5jb21wcmVzc29iaigpIGFuZCB6bGliLmRlY29tcHJlc3NvYmooKSBub3cgc3VwcG9ydCB0aGUgdXNlCisgIG9mIHByZWRlZmluZWQgY29tcHJlc3Npb24gZGljdGlvbmFyaWVzLiBPcmlnaW5hbCBwYXRjaCBieSBTYW0gUnVzaGluZy4KKworLSBGaXggR3ppcEZpbGUncyBoYW5kbGluZyBvZiBmaWxlbmFtZXMgZ2l2ZW4gYXMgYnl0ZXMgb2JqZWN0cy4KKworLSBJc3N1ZSAjMTQ3NzI6IFJldHVybiBkZXN0aW5hdGlvbiB2YWx1ZXMgZnJvbSBzb21lIHNodXRpbCBmdW5jdGlvbnMuCisKKy0gSXNzdWUgIzE1MDY0OiBJbXBsZW1lbnQgY29udGV4dCBtYW5hZ2VtZW50IHByb3RvY29sIGZvciBtdWx0aXByb2Nlc3NpbmcgdHlwZXMKKworLSBJc3N1ZSAjMTUxMDE6IE1ha2UgcG9vbCBmaW5hbGl6ZXIgYXZvaWQgam9pbmluZyBjdXJyZW50IHRocmVhZC4KKworLSBJc3N1ZSAjMTQ2NTc6IFRoZSBmcm96ZW4gaW5zdGFuY2Ugb2YgaW1wb3J0bGliIHVzZWQgZm9yIGJvb3RzdHJhcCBpcyBub3cKKyAgYWxzbyB0aGUgbW9kdWxlIGltcG9ydGVkIGFzIGltcG9ydGxpYi5fYm9vdHN0cmFwLgorCistIElzc3VlICMxNDA1NTogQWRkIF9fc2l6ZW9mX18gc3VwcG9ydCB0byBfZWxlbWVudHRyZWUuCisKKy0gSXNzdWUgIzE1MDU0OiBBIGJ1ZyBpbiB0b2tlbml6ZS50b2tlbml6ZSB0aGF0IGNhdXNlZCBzdHJpbmcgbGl0ZXJhbHMKKyAgd2l0aCAnYicgcHJlZml4ZXMgdG8gYmUgaW5jb3JyZWN0bHkgdG9rZW5pemVkIGhhcyBiZWVuIGZpeGVkLgorICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxNTAwNjogQWxsb3cgZXF1YWxpdHkgY29tcGFyaXNvbiBiZXR3ZWVuIG5haXZlIGFuZCBhd2FyZQorICB0aW1lIG9yIGRhdGV0aW1lIG9iamVjdHMuCisKKy0gSXNzdWUgIzE0OTgyOiBEb2N1bWVudCB0aGF0IHBrZ3V0aWwncyBpdGVyYXRpb24gZnVuY3Rpb25zIHJlcXVpcmUgdGhlCisgIG5vbi1zdGFuZGFyZCBpdGVyX21vZHVsZXMoKSBtZXRob2QgdG8gYmUgZGVmaW5lZCBieSBhbiBpbXBvcnRlciAoc29tZXRoaW5nCisgIHRoZSBpbXBvcnRsaWIgaW1wb3J0ZXJzIGRvIG5vdCBkZWZpbmUpLgorCistIElzc3VlICMxNTAzNjogTWFpbGJveCBubyBsb25nZXIgdGhyb3dzIGFuIGVycm9yIGlmIGEgZmx1c2ggaXMgZG9uZQorICBiZXR3ZWVuIG9wZXJhdGlvbnMgd2hlbiByZW1vdmluZyBvciBjaGFuZ2luZyBtdWx0aXBsZSBpdGVtcyBpbiBtYm94LAorICBNTURGLCBvciBCYWJ5bCBtYWlsYm94ZXMuCisKKy0gSXNzdWUgIzE0MDU5OiBJbXBsZW1lbnQgbXVsdGlwcm9jZXNzaW5nLkJhcnJpZXIuCisKKy0gSXNzdWUgIzE1MDYxOiBUaGUgaW5hcHByb3ByaWF0ZWx5IG5hbWVkIGhtYWMuc2VjdXJlX2NvbXBhcmUgaGFzIGJlZW4KKyAgcmVuYW1lZCB0byBobWFjLmNvbXBhcmVfZGlnZXN0LCByZXN0cmljdGVkIHRvIG9wZXJhdGluZyBvbiBieXRlcyBpbnB1dHMKKyAgb25seSBhbmQgaGFkIGl0cyBkb2N1bWVudGF0aW9uIHVwZGF0ZWQgdG8gbW9yZSBhY2N1cmF0ZWx5IHJlZmxlY3QgYm90aCBpdHMKKyAgaW50ZW50IGFuZCBpdHMgbGltaXRhdGlvbnMKKworLSBJc3N1ZSAjMTM4NDE6IE1ha2UgY2hpbGQgcHJvY2Vzc2VzIGV4aXQgdXNpbmcgc3lzLmV4aXQoKSBvbiBXaW5kb3dzLgorCistIElzc3VlICMxNDkzNjogY3Vyc2VzX3BhbmVsIHdhcyBjb252ZXJ0ZWQgdG8gUEVQIDMxMjEgYW5kIFBFUCAzODQgQVBJLgorICBQYXRjaCBieSBSb2JpbiBTY2hyZWliZXIuCisKKy0gSXNzdWUgIzE2Njc1NDY6IE9uIHBsYXRmb3JtcyBzdXBwb3J0aW5nIHRtX3pvbmUgYW5kIHRtX2dtdG9mZiBmaWVsZHMKKyAgaW4gc3RydWN0IHRtLCB0aW1lLnN0cnVjdF90aW1lIG9iamVjdHMgcmV0dXJuZWQgYnkgdGltZS5nbXRpbWUoKSwKKyAgdGltZS5sb2NhbHRpbWUoKSBhbmQgdGltZS5zdHJwdGltZSgpIGZ1bmN0aW9ucyBub3cgaGF2ZSB0bV96b25lIGFuZAorICB0bV9nbXRvZmYgYXR0cmlidXRlcy4gIE9yaWdpbmFsIHBhdGNoIGJ5IFBhdWwgQm9kZGllLgorCistIFJlbmFtZSBhZGp1c3RlZCBhdHRyaWJ1dGUgdG8gYWRqdXN0YWJsZSBpbiB0aW1lLmdldF9jbG9ja19pbmZvKCkgcmVzdWx0LgorCistIElzc3VlICMzNTE4OiBSZW1vdmUgcmVmZXJlbmNlcyB0byBub24tZXhpc3RlbnQgQmFzZU1hbmFnZXIuZnJvbV9hZGRyZXNzKCkKKyAgbWV0aG9kLgorCistIElzc3VlICMxMzg1NzogQWRkZWQgdGV4dHdyYXAuaW5kZW50KCkgZnVuY3Rpb24gKGluaXRpYWwgcGF0Y2ggYnkgRXpyYQorICBCZXJjaCkKKworLSBJc3N1ZSAjMjczNjogQWRkZWQgZGF0ZXRpbWUudGltZXN0YW1wKCkgbWV0aG9kLgorCistIElzc3VlICMxMzg1NDogTWFrZSBtdWx0aXByb2Nlc3NpbmcgcHJvcGVybHkgaGFuZGxlIG5vbi1pbnRlZ2VyCisgIG5vbi1zdHJpbmcgYXJndW1lbnQgdG8gU3lzdGVtRXhpdC4KKworLSBJc3N1ZSAjMTIxNTc6IE1ha2UgcG9vbC5tYXAoKSBlbXB0eSBpdGVyYWJsZXMgY29ycmVjdGx5LiAgSW5pdGlhbAorICBwYXRjaCBieSBtb3VhZC4KKworLSBJc3N1ZSAjMTE4MjM6IGRpc2Fzc2VtYmx5IG5vdyBzaG93cyBhcmd1bWVudCBjb3VudHMgb24gY2FsbHMgd2l0aCBrZXl3b3JkIGFyZ3MuCisKKy0gSXNzdWUgIzE0NzExOiBvcy5zdGF0X2Zsb2F0X3RpbWVzKCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4KKworLSBMWk1BRmlsZSBub3cgYWNjZXB0cyB0aGUgbW9kZXMgInJiIi8id2IiLyJhYiIgYXMgc3lub255bXMgb2YgInIiLyJ3Ii8iYSIuCisKKy0gVGhlIGJ6MiBhbmQgbHptYSBtb2R1bGVzIG5vdyBlYWNoIGNvbnRhaW4gYW4gb3BlbigpIGZ1bmN0aW9uLCBhbGxvd2luZworICBjb21wcmVzc2VkIGZpbGVzIHRvIHJlYWRpbHkgYmUgb3BlbmVkIGluIHRleHQgbW9kZSBhcyB3ZWxsIGFzIGJpbmFyeSBtb2RlLgorCistIEJaMkZpbGUuX19pbml0X18oKSBhbmQgTFpNQUZpbGUuX19pbml0X18oKSBub3cgYWNjZXB0IGEgZmlsZSBvYmplY3QgYXMgdGhlaXIKKyAgZmlyc3QgYXJndW1lbnQsIHJhdGhlciB0aGFuIHJlcXVpcmluZyBhIHNlcGFyYXRlICJmaWxlb2JqIiBhcmd1bWVudC4KKworLSBnemlwLm9wZW4oKSBub3cgYWNjZXB0cyBmaWxlIG9iamVjdHMgYXMgd2VsbCBhcyBmaWxlbmFtZXMuCisKKy0gSXNzdWUgIzE0OTkyOiBvcy5tYWtlZGlycyhwYXRoLCBleGlzdF9vaz1UcnVlKSB3b3VsZCByYWlzZSBhbiBPU0Vycm9yCisgIHdoZW4gdGhlIHBhdGggZXhpc3RlZCBhbmQgaGFkIHRoZSBTX0lTR0lEIG1vZGUgYml0IHNldCB3aGVuIGl0IHdhcworICBub3QgZXhwbGljaXRseSBhc2tlZCBmb3IuICBUaGlzIGlzIG5vIGxvbmdlciBhbiBleGNlcHRpb24gYXMgbWtkaXIKKyAgY2Fubm90IGNvbnRyb2wgaWYgdGhlIE9TIHNldHMgdGhhdCBiaXQgZm9yIGl0IG9yIG5vdC4KKworLSBJc3N1ZSAjMTQ5ODk6IE1ha2UgdGhlIENHSSBlbmFibGUgb3B0aW9uIHRvIGh0dHAuc2VydmVyIGF2YWlsYWJsZSB2aWEgY29tbWFuZAorICBsaW5lLgorCistIElzc3VlICMxNDk4NzogQWRkIGEgbWlzc2luZyBpbXBvcnQgc3RhdGVtZW50IHRvIGluc3BlY3QuCisKKy0gSXNzdWUgIzEwNzk6IGVtYWlsLmhlYWRlci5kZWNvZGVfaGVhZGVyIG5vdyBjb3JyZWN0bHkgcGFyc2VzIGFsbCB0aGUgZXhhbXBsZXMKKyAgaW4gUkZDMjA0Ny4gIFRoZXJlIGlzIGEgbmVjZXNzYXJ5IHZpc2libGUgYmVoYXZpb3IgY2hhbmdlOiB0aGUgbGVhZGluZyBhbmQvb3IKKyAgdHJhaWxpbmcgd2hpdGVzcGFjZSBvbiBBU0NJSSBwYXJ0cyBpcyBub3cgcHJlc2VydmVkLgorCistIElzc3VlICMxNDk2OTogQmV0dGVyIGhhbmRsaW5nIG9mIGV4Y2VwdGlvbiBjaGFpbmluZyBpbiBjb250ZXh0bGliLkV4aXRTdGFjaworCistIElzc3VlICMxNDk2MjogVXBkYXRlIHRleHQgY29sb3JpbmcgaW4gSURMRSBzaGVsbCB3aW5kb3cgYWZ0ZXIgY2hhbmdpbmcKKyAgb3B0aW9ucy4gIFBhdGNoIGJ5IFJvZ2VyIFNlcnd5LgorCistIElzc3VlICMxNDk2MzogQ29udmVydCBjb250ZXh0bGliLkV4aXRTdGFjay5fX2V4aXRfXyB0byB1c2UgYW4gaXRlcmF0aXZlCisgIGFsZ29yaXRobSAoUGF0Y2ggYnkgQWxvbiBIb3JldikKKworLSBJc3N1ZSAjMTQ3ODU6IEFkZCBzeXMuX2RlYnVnbWFsbG9jc3RhdHMoKSB0byBoZWxwIGRlYnVnIGxvdy1sZXZlbCBtZW1vcnkKKyAgYWxsb2NhdGlvbiBpc3N1ZXMKKworLSBJc3N1ZSAjMTQ0NDM6IEVuc3VyZSB0aGF0IC5weSBmaWxlcyBhcmUgYnl0ZS1jb21waWxlZCB3aXRoIHRoZSBjb3JyZWN0IFB5dGhvbgorICBleGVjdXRhYmxlIHdpdGhpbiBiZGlzdF9ycG0gZXZlbiBvbiBvbGRlciB2ZXJzaW9ucyBvZiBSUE0KKworQy1BUEkKKy0tLS0tCisKKy0gSXNzdWUgIzEzNzgzOiBJbmFkdmVydGVudCBhZGRpdGlvbnMgdG8gdGhlIHB1YmxpYyBDIEFQSSBpbiB0aGUgUEVQIDM4MAorICBpbXBsZW1lbnRhdGlvbiBoYXZlIGVpdGhlciBiZWVuIHJlbW92ZWQgb3IgbWFya2VkIGFzIHByaXZhdGUgaW50ZXJmYWNlcy4KKworRXh0ZW5zaW9uIE1vZHVsZXMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzE1MDAwOiBTdXBwb3J0IHRoZSAidW5pcXVlIiB4MzIgYXJjaGl0ZWN0dXJlIGluIF9wb3NpeHN1YnByb2Nlc3MuYy4KKworRG9jdW1lbnRhdGlvbgorLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxNTA4MTogRG9jdW1lbnQgUHlTdGF0ZV9GaW5kTW9kdWxlLgorICBQYXRjaCBieSBSb2JpbiBTY2hyZWliZXIuCisKKy0gSXNzdWUgIzE0ODE0OiBBZGRlZCBmaXJzdCBkcmFmdCBvZiBpcGFkZHJlc3MgbW9kdWxlIEFQSSByZWZlcmVuY2UKKworVGVzdHMKKy0tLS0tCisKKy0gSXNzdWUgIzE0NzY5OiB0ZXN0X2NhcGkgbm93IGhhcyBTa2lwaXRlbVRlc3QsIHdoaWNoIGNsZXZlcmx5IGNoZWNrcworICBmb3IgInBhcml0eSIgYmV0d2VlbiBQeUFyZ19QYXJzZVR1cGxlKCkgYW5kIHRoZSBQeXRob24vZ2V0YXJncy5jIHN0YXRpYworICBmdW5jdGlvbiBza2lwaXRlbSgpIGZvciBhbGwgcG9zc2libGUgImZvcm1hdCB1bml0cyIuCisKKy0gdGVzdF9ubnRwbGliIG5vdyB0b2xlcmF0ZXMgYmVpbmcgcnVuIGZyb20gYmVoaW5kIE5OVFAgZ2F0ZXdheXMgdGhhdCBhZGQKKyAgIlgtQW50aXZpcnVzIiBoZWFkZXJzIHRvIGFydGljbGVzCisKKy0gSXNzdWUgIzE1MDQzOiB0ZXN0X2dkYiBpcyBub3cgc2tpcHBlZCBlbnRpcmVseSBpZiBnZGIgc2VjdXJpdHkgc2V0dGluZ3MKKyAgYmxvY2sgbG9hZGluZyBvZiB0aGUgZ2RiIGhvb2tzCisKKy0gSXNzdWUgIzE0OTYzOiBBZGQgdGVzdCBjYXNlcyBmb3IgZXhjZXB0aW9uIGhhbmRsaW5nIGJlaGF2aW91cgorICBpbiBjb250ZXh0bGliLkV4aXRTdGFjayAoSW5pdGlhbCBwYXRjaCBieSBBbG9uIEhvcmV2KQorCitCdWlsZAorLS0tLS0KKworLSBJc3N1ZSAjMTM1OTA6IEltcHJvdmUgc3VwcG9ydCBmb3IgT1MgWCBYY29kZSA0OgorICAgICogVHJ5IHRvIGF2b2lkIGJ1aWxkaW5nIFB5dGhvbiBvciBleHRlbnNpb24gbW9kdWxlcyB3aXRoIHByb2JsZW1hdGljCisgICAgICBsbHZtLWdjYyBjb21waWxlci4KKyAgICAqIFNpbmNlIFhjb2RlIDQgcmVtb3ZlcyBwcGMgc3VwcG9ydCwgZXh0ZW5zaW9uIG1vZHVsZSBidWlsZHMgbm93CisgICAgICBjaGVjayBmb3IgcHBjIGNvbXBpbGVyIHN1cHBvcnQgYW5kIGF1dG9tYXRpY2FsbHkgcmVtb3ZlIHBwYyBhbmQKKyAgICAgIHBwYzY0IGFyY2hzIHdoZW4gbm90IGF2YWlsYWJsZS4KKyAgICAqIFNpbmNlIFhjb2RlIDQgbm8gbG9uZ2VyIGluc3RhbGwgU0RLcyBpbiBkZWZhdWx0IGxvY2F0aW9ucywKKyAgICAgIGV4dGVuc2lvbiBtb2R1bGUgYnVpbGRzIG5vdyByZXZlcnQgdG8gdXNpbmcgaW5zdGFsbGVkIGhlYWRlcnMKKyAgICAgIGFuZCBsaWJzIGlmIHRoZSBTREsgdXNlZCB0byBidWlsZCB0aGUgaW50ZXJwcmV0ZXIgaXMgbm90CisgICAgICBhdmFpbGFibGUuCisgICAgKiBVcGRhdGUgLi9jb25maWd1cmUgdG8gdXNlIGJldHRlciBkZWZhdWx0cyBmb3IgdW5pdmVyc2FsIGJ1aWxkczsKKyAgICAgIGluIHBhcnRpY3VsYXIsIC0tZW5hYmxlLXVuaXZlcnNhbHNkaz15ZXMgdXNlcyB0aGUgWGNvZGUgZGVmYXVsdAorICAgICAgU0RLIGFuZCAtLXdpdGgtdW5pdmVyc2FsLWFyY2hzIG5vdyBkZWZhdWx0cyB0byAiaW50ZWwiIGlmIHBwYworICAgICAgbm90IGF2YWlsYWJsZS4KKworLSBJc3N1ZSAjMTQyMjU6IEZpeCBVbmljb2RlIHN1cHBvcnQgZm9yIGN1cnNlcyAoIzEyNTY3KSBvbiBPUyBYCisKKy0gSXNzdWUgIzE0OTI4OiBGaXggaW1wb3J0bGliIGJvb3RzdHJhcCBpc3N1ZXMgYnkgdXNpbmcgYSBjdXN0b20gZXhlY3V0YWJsZQorICAoTW9kdWxlcy9fZnJlZXplX2ltcG9ydGxpYikgdG8gYnVpbGQgUHl0aG9uL2ltcG9ydGxpYi5oLgorCisKK1doYXQncyBOZXcgaW4gUHl0aG9uIDMuMy4wIEFscGhhIDQ/Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisqUmVsZWFzZSBkYXRlOiAzMS1NYXktMjAxMioKKworQ29yZSBhbmQgQnVpbHRpbnMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzE0ODM1OiBNYWtlIHBsaXN0bGliIG91dHB1dCBlbXB0eSBhcnJheXMgJiBkaWN0cyBsaWtlIE9TIFguCisgIFBhdGNoIGJ5IFNpZG5leSBTYW4gTWFydMOtbi4KKworLSBJc3N1ZSAjMTQ3NDQ6IFVzZSB0aGUgbmV3IF9QeVVuaWNvZGVXcml0ZXIgaW50ZXJuYWwgQVBJIHRvIHNwZWVkIHVwCisgIHN0ciVhcmdzIGFuZCBzdHIuZm9ybWF0KGFyZ3MpLgorCistIElzc3VlICMxNDkzMDogTWFrZSBtZW1vcnl2aWV3IG9iamVjdHMgd2Vha3JlZmFibGUuCisKKy0gSXNzdWUgIzE0Nzc1OiBGaXggYSBwb3RlbnRpYWwgcXVhZHJhdGljIGRpY3QgYnVpbGQtdXAgZHVlIHRvIHRoZSBnYXJiYWdlCisgIGNvbGxlY3RvciByZXBlYXRlZGx5IHRyeWluZyB0byB1bnRyYWNrIGRpY3RzLgorCistIElzc3VlICMxNDg1NzogZml4IHJlZ3Jlc3Npb24gaW4gcmVmZXJlbmNlcyB0byBQRVAgMzEzNSBpbXBsaWNpdCBfX2NsYXNzX18KKyAgY2xvc3VyZSB2YXJpYWJsZSAoUmVvcGVucyBpc3N1ZSAjMTIzNzApCisKKy0gSXNzdWUgIzE0NzEyIChQRVAgNDA1KTogVmlydHVhbCBlbnZpcm9ubWVudHMuIEltcGxlbWVudGVkIGJ5IFZpbmF5IFNhamlwLgorCistIElzc3VlICMxNDY2MCAoUEVQIDQyMCk6IE5hbWVzcGFjZSBwYWNrYWdlcy4gSW1wbGVtZW50ZWQgYnkgRXJpYyBTbWl0aC4KKworLSBJc3N1ZSAjMTQ0OTQ6IEZpeCBfX2Z1dHVyZV9fLnB5IGFuZCBpdHMgZG9jdW1lbnRhdGlvbiB0byBub3RlIHRoYXQKKyAgYWJzb2x1dGUgaW1wb3J0cyBhcmUgdGhlIGRlZmF1bHQgYmVoYXZpb3IgaW4gMy4wIGluc3RlYWQgb2YgMi43LgorICBQYXRjaCBieSBTdmVuIE1hcm5hY2guCisKKy0gSXNzdWUgIzkyNjA6IEEgZmluZXItZ3JhaW5lZCBpbXBvcnQgbG9jay4gIE1vc3Qgb2YgdGhlIGltcG9ydCBzZXF1ZW5jZQorICBub3cgdXNlcyBwZXItbW9kdWxlIGxvY2tzIHJhdGhlciB0aGFuIHRoZSBnbG9iYWwgaW1wb3J0IGxvY2ssIGVsaW1pbmF0aW5nCisgIHdlbGwta25vd24gaXNzdWVzIHdpdGggdGhyZWFkcyBhbmQgaW1wb3J0cy4KKworLSBJc3N1ZSAjMTQ2MjQ6IFVURi0xNiBkZWNvZGluZyBpcyBub3cgM3ggdG8gNHggZmFzdGVyIG9uIHZhcmlvdXMgaW5wdXRzLgorICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIGFzZGxfc2VxIGFuZCBhc2RsX2ludF9zZXEgYXJlIG5vdyBQeV9zc2l6ZV90IHNpemVkLgorCistIElzc3VlICMxNDEzMyAoUEVQIDQxNSk6IEltcGxlbWVudCBzdXBwcmVzc2lvbiBvZiBfX2NvbnRleHRfXyBkaXNwbGF5IHdpdGggYW4KKyAgYXR0cmlidXRlIG9uIEJhc2VFeGNlcHRpb24uIFRoaXMgcmVwbGFjZXMgdGhlIG9yaWdpbmFsIG1lY2hhbmlzbSBvZiBQRVAgNDA5LgorCistIElzc3VlICMxNDQxNzogTXV0YXRpbmcgYSBkaWN0IGR1cmluZyBsb29rdXAgbm93IHJlc3RhcnRzIHRoZSBsb29rdXAgaW5zdGVhZAorICBvZiByYWlzaW5nIGEgUnVudGltZUVycm9yICh1bmRvZXMgaXNzdWUgIzE0MjA1KS4KKworLSBJc3N1ZSAjMTQ3Mzg6IFNwZWVkLXVwIFVURi04IGRlY29kaW5nIG9uIG5vbi1BU0NJSSBkYXRhLiAgUGF0Y2ggYnkgU2VyaGl5CisgIFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTQ3MDA6IEZpeCB0d28gYnJva2VuIGFuZCB1bmRlZmluZWQtYmVoYXZpb3VyLWluZHVjaW5nIG92ZXJmbG93IGNoZWNrcworICBpbiBvbGQtc3R5bGUgc3RyaW5nIGZvcm1hdHRpbmcuCisKKy0gSXNzdWUgIzE0NzA1OiBUaGUgUHlBcmdfUGFyc2UoKSBmYW1pbHkgb2YgZnVuY3Rpb25zIG5vdyBzdXBwb3J0IHRoZSAncCcgZm9ybWF0CisgIHVuaXQsIHdoaWNoIGFjY2VwdHMgYSAiYm9vbGVhbiBwcmVkaWNhdGUiIGFyZ3VtZW50LiAgSXQgY29udmVydHMgYW55IFB5dGhvbgorICB2YWx1ZSBpbnRvIGFuIGludGVnZXItLTAgaWYgaXQgaXMgImZhbHNlIiwgYW5kIDEgb3RoZXJ3aXNlLgorCitMaWJyYXJ5CistLS0tLS0tCisKKy0gSXNzdWUgIzE0NjkwOiBVc2UgbW9ub3RvbmljIGNsb2NrIGluc3RlYWQgb2Ygc3lzdGVtIGNsb2NrIGluIHRoZSBzY2hlZCwKKyAgc3VicHJvY2VzcyBhbmQgdHJhY2UgbW9kdWxlcy4KKworLSBJc3N1ZSAjMTQ5NTg6IENoYW5nZSBJRExFIHN5c3RheCBoaWdobGlnaHRpbmcgdG8gcmVjb2duaXplIGFsbCBzdHJpbmcgYW5kCisgIGJ5dGUgbGl0ZXJhbHMgc3VwcG9ydGVkIGluIFB5dGhvbiAzLjMuCisKKy0gSXNzdWUgIzEwOTk3OiBQcmV2ZW50IGEgZHVwbGljYXRlIGVudHJ5IGluIElETEUncyAiUmVjZW50IEZpbGVzIiBtZW51LgorCistIElzc3VlICMxNDQ0MzogVGVsbCBycG1idWlsZCB0byB1c2UgdGhlIGNvcnJlY3QgdmVyc2lvbiBvZiBQeXRob24gaW4KKyAgYmRpc3RfcnBtLiBJbml0aWFsIHBhdGNoIGJ5IFJvc3MgTGFnZXJ3YWxsLgorCistIElzc3VlICMxNDkyOTogU3RvcCBJZGxlIDMueCBmcm9tIGNsb3Npbmcgb24gVW5pY29kZSBkZWNvZGUgZXJyb3JzIHdoZW4KKyAgZ3JlcHBpbmcuIFBhdGNoIGJ5IFJvZ2VyIFNlcnd5LgorCistIElzc3VlICMxMjUxNTogZW1haWwgbm93IHJlZ2lzdGVycyBhIGRlZmVjdCBpZiBpdCBnZXRzIHRvIEVPRiB3aGlsZSBwYXJzaW5nCisgIGEgTUlNRSBwYXJ0IHdpdGhvdXQgc2VlaW5nIHRoZSBjbG9zaW5nIE1JTUUgYm91bmRhcnkuCisKKy0gSXNzdWUgIzEyNTEwOiBBdHRlbXB0aW5nIHRvIGdldCBpbnZhbGlkIHRvb2x0aXAgbm8gbG9uZ2VyIGNsb3NlcyBJZGxlLgorICBPdGhlciB0b29sdGlwc3MgaGF2ZSBiZWVuIGNvcnJlY3RlZCBvciBpbXByb3ZlZCBhbmQgdGhlIG51bWJlciBvZiB0ZXN0cworICBoYXMgYmVlbiB0cmlwbGVkLiBPcmlnaW5hbCBwYXRjaCBieSBSb2dlciBTZXJ3eS4KKworLSBJc3N1ZSAjMTY3MjU2ODogZW1haWwgbm93IGFsd2F5cyBkZWNvZGVzIGJhc2U2NCBwYXlsb2FkcywgYWRkaW5nIHBhZGRpbmcgYW5kCisgIGlnbm9yaW5nIG5vbi1iYXNlNjQtYWxwaGFiZXQgY2hhcmFjdGVycyBpZiBuZWVkZWQsIGFuZCByZWdpc3RlcmluZyBkZWZlY3RzCisgIGZvciBhbnkgc3VjaCBwcm9ibGVtcy4KKworLSBJc3N1ZSAjMTQ5MjU6IGVtYWlsIG5vdyByZWdpc3RlcnMgYSBkZWZlY3Qgd2hlbiB0aGUgcGFyc2VyIGRlY2lkZXMgdGhhdCB0aGVyZQorICBpcyBhIG1pc3NpbmcgaGVhZGVyL2JvZHkgc2VwYXJhdG9yIGxpbmUuICBNYWxmb3JtZWRIZWFkZXJEZWZlY3QsIHdoaWNoIHRoZQorICBleGlzdGluZyBjb2RlIHdvdWxkIG5ldmVyIGFjdHVhbGx5IGdlbmVyYXRlLCBpcyBkZXByZWNhdGVkLgorCistIElzc3VlICMxMDM2NTogRmlsZSBvcGVuIGRpYWxvZyBub3cgd29ya3MgaW5zdGVhZCBvZiBjcmFzaGluZyBldmVuIHdoZW4KKyAgdGhlIHBhcmVudCB3aW5kb3cgaXMgY2xvc2VkIGJlZm9yZSB0aGUgZGlhbG9nLiBQYXRjaCBieSBSb2dlciBTZXJ3eS4KKworLSBJc3N1ZSAjODczOTogVXBkYXRlZCBzbXRwZCB0byBzdXBwb3J0IFJGQyA1MzIxLCBhbmQgYWRkZWQgc3VwcG9ydCBmb3IgdGhlCisgIFJGQyAxODcwIFNJWkUgZXh0ZW5zaW9uLgorCistIElzc3VlICM2NjUxOTQ6IEFkZGVkIGEgbG9jYWx0aW1lIGZ1bmN0aW9uIHRvIGVtYWlsLnV0aWxzIHRvIHByb3ZpZGUgYW4KKyAgYXdhcmUgbG9jYWwgZGF0ZXRpbWUgZm9yIHVzZSBpbiBzZXR0aW5nIERhdGUgaGVhZGVycy4KKworLSBJc3N1ZSAjMTI1ODY6IEFkZGVkIG5ldyBwcm92aXNpb25hbCBwb2xpY2llcyB0aGF0IGltcGxlbWVudCBjb252ZW5pZW50CisgIHVuaWNvZGUgc3VwcG9ydCBmb3IgZW1haWwgaGVhZGVycy4gIFNlZSBXaGF0J3MgTmV3IGZvciBkZXRhaWxzLgorCistIElzc3VlICMxNDczMTogUmVmYWN0b3JlZCBlbWFpbCBQb2xpY3kgZnJhbWV3b3JrIHRvIHN1cHBvcnQgZnVsbCBiYWNrd2FyZAorICBjb21wYXRpYmlsaXR5IHdpdGggUHl0aG9uIDMuMiBieSBkZWZhdWx0IHlldCBhbGxvdyBmb3IgdGhlIGludHJvZHVjdGlvbiBvZgorICBuZXcgZmVhdHVyZXMgdGhyb3VnaCBuZXcgcG9saWNpZXMuICBOb3RlIHRoYXQgUG9saWN5Lm11c3RfYmVfN2JpdCBpcyByZW5hbWVkCisgIHRvIGN0ZV90eXBlLgorCistIElzc3VlICMxNDg3NjogVXNlIHVzZXItc2VsZWN0ZWQgZm9udCBmb3IgaGlnaGxpZ2h0IGNvbmZpZ3VyYXRpb24uCisKKy0gSXNzdWUgIzE0OTIwOiBGaXggdGhlIGhlbHAodXJsbGliLnBhcnNlKSBmYWlsdXJlIG9uIGxvY2FsZSBDIG9uIHRlcm1pbmFscy4KKyAgSGF2ZSBhc2NpaSBjaGFyYWN0ZXJzIGluIGhlbHAuCisKKy0gSXNzdWUgIzE0NTQ4OiBNYWtlIG11bHRpcHJvY2Vzc2luZyBmaW5hbGl6ZXJzIGNoZWNrIHBpZCBiZWZvcmUKKyAgcnVubmluZyB0byBjb3BlIHdpdGggcG9zc2liaWxpdHkgb2YgZ2MgcnVubmluZyBqdXN0IGFmdGVyIGZvcmsuCisKKy0gSXNzdWUgIzE0ODYzOiBVcGRhdGUgdGhlIGRvY3VtZW50YXRpb24gb2Ygb3MuZmRvcGVuKCkgdG8gcmVmbGVjdCB0aGUKKyAgZmFjdCB0aGF0IGl0J3Mgb25seSBhIHRoaW4gd3JhcHBlciBhcm91bmQgb3BlbigpIGFueW1vcmUuCisKKy0gSXNzdWUgIzE0MDM2OiBBZGQgYW4gYWRkaXRpb25hbCBjaGVjayB0byB2YWxpZGF0ZSB0aGF0IHBvcnQgaW4gdXJscGFyc2UgZG9lcworICBub3QgZ28gaW4gaWxsZWdhbCByYW5nZSBhbmQgcmV0dXJucyBOb25lLgorCistIElzc3VlICMxNDg2MjogQWRkIG1pc3NpbmcgbmFtZXMgdG8gb3MuX19hbGxfXworCistIElzc3VlICMxNDg3NTogVXNlIGZsb2F0KCdpbmYnKSBpbnN0ZWFkIG9mIGZsb2F0KCcxZTY2NjY2JykgaW4gdGhlIGpzb24gbW9kdWxlLgorCistIElzc3VlICMxMzU4NTogQWRkZWQgY29udGV4dGxpYi5FeGl0U3RhY2sKKworLSBQRVAgMzE0NCwgSXNzdWUgIzE0ODE0OiBBZGRlZCB0aGUgaXBhZGRyZXNzIG1vZHVsZQorCistIElzc3VlICMxNDQyNjogQ29ycmVjdCB0aGUgRGF0ZSBmb3JtYXQgaW4gRXhwaXJlcyBhdHRyaWJ1dGUgb2YgU2V0LUNvb2tpZQorICBIZWFkZXIgaW4gQ29va2llLnB5LgorCistIElzc3VlICMxNDU4ODogVGhlIHR5cGVzIG1vZHVsZSBub3cgcHJvdmlkZSBuZXdfY2xhc3MoKSBhbmQgcHJlcGFyZV9jbGFzcygpCisgIGZ1bmN0aW9ucyB0byBzdXBwb3J0IFBFUCAzMTE1IGNvbXBsaWFudCBkeW5hbWljIGNsYXNzIGNyZWF0aW9uLiBQYXRjaCBieQorICBEYW5pZWwgVXJiYW4gYW5kIE5pY2sgQ29naGxhbi4KKworLSBJc3N1ZSAjMTMxNTI6IEFsbG93IHRvIHNwZWNpZnkgYSBjdXN0b20gdGFic2l6ZSBmb3IgZXhwYW5kaW5nIHRhYnMgaW4KKyAgdGV4dHdyYXAuIFBhdGNoIGJ5IEpvaG4gRmV1ZXJzdGVpbi4KKworLSBJc3N1ZSAjMTQ3MjE6IFNlbmQgdGhlIGNvcnJlY3QgJ0NvbnRlbnQtbGVuZ3RoOiAwJyBoZWFkZXIgd2hlbiB0aGUgYm9keSBpcyBhbgorICBlbXB0eSBzdHJpbmcgJycuIEluaXRpYWwgUGF0Y2ggY29udHJpYnV0ZWQgYnkgQXJ2ZSBLbnVkc2VuLgorCistIElzc3VlICMxNDA3MjogRml4IHBhcnNpbmcgb2YgJ3RlbCcgVVJJcyBpbiB1cmxwYXJzZSBieSBtYWtpbmcgdGhlIGNoZWNrIGZvcgorICBwb3J0cyBzdHJpY3Rlci4KKworLSBJc3N1ZSAjOTM3NDogR2VuZXJpYyBwYXJzaW5nIG9mIHF1ZXJ5IGFuZCBmcmFnbWVudCBwb3J0aW9ucyBvZiB1cmwgZm9yIGFueQorICBzY2hlbWUuIFN1cHBvcnRlZCBib3RoIGJ5IFJGQzM5ODYgYW5kIFJGQzIzOTYuCisKKy0gSXNzdWUgIzE0Nzk4OiBGaXggdGhlIGZ1bmN0aW9ucyBpbiBweWNsYnIgdG8gcmFpc2UgYW4gSW1wb3J0RXJyb3IKKyAgd2hlbiB0aGUgZmlyc3QgcGFydCBvZiBhIGRvdHRlZCBuYW1lIGlzIG5vdCBhIHBhY2thZ2UuIFBhdGNoIGJ5CisgIFhhdmllciBkZSBHYXllLgorCistIElzc3VlICMxMjA5ODogbXVsdGlwcm9jZXNzaW5nIG9uIFdpbmRvd3Mgbm93IHN0YXJ0cyBjaGlsZCBwcm9jZXNzZXMKKyAgdXNpbmcgdGhlIHNhbWUgc3lzLmZsYWdzIGFzIHRoZSBjdXJyZW50IHByb2Nlc3MuICBJbml0aWFsIHBhdGNoIGJ5CisgIFNlcmdleSBNZXplbnRzZXYuCisKKy0gSXNzdWUgIzEzMDMxOiBTbWFsbCBzcGVlZC11cCBmb3IgdGFyZmlsZSB3aGVuIHVuemlwcGluZyB0YXJmaWxlcy4KKyAgUGF0Y2ggYnkgSnVzdGluIFBlZWwuCisKKy0gSXNzdWUgIzE0NzgwOiB1cmxsaWIucmVxdWVzdC51cmxvcGVuKCkgbm93IGhhcyBhIGBgY2FkZWZhdWx0YGAgYXJndW1lbnQKKyAgdG8gdXNlIHRoZSBkZWZhdWx0IGNlcnRpZmljYXRlIHN0b3JlLiAgSW5pdGlhbCBwYXRjaCBieSBKYW1lcyBPYWtsZXkuCisKKy0gSXNzdWUgIzE0ODI5OiBGaXggYmlzZWN0IGFuZCByYW5nZSgpIGluZGV4aW5nIHdpdGggbGFyZ2UgaW5kaWNlcworICAoPj0gMiAqKiAzMikgdW5kZXIgNjQtYml0IFdpbmRvd3MuCisKKy0gSXNzdWUgIzE0NzMyOiBUaGUgX2NzdiBtb2R1bGUgbm93IHVzZXMgUEVQIDMxMjEgbW9kdWxlIGluaXRpYWxpemF0aW9uLgorICBQYXRjaCBieSBSb2JpbiBTY2hyZWliZXIuCisKKy0gSXNzdWUgIzE0ODA5OiBBZGQgSFRUUCBzdGF0dXMgY29kZXMgaW50cm9kdWNlZCBieSBSRkMgNjU4NSB0byBodHRwLnNlcnZlcgorICBhbmQgaHR0cC5jbGllbnQuIFBhdGNoIGJ5IEV1bmdKdW4gWWkuCisKKy0gSXNzdWUgIzE0Nzc3OiB0a2ludGVyIG1heSByZXR1cm4gdW5kZWNvZGVkIFVURi04IGJ5dGVzIGFzIGEgc3RyaW5nIHdoZW4KKyAgYWNjZXNzaW5nIHRoZSBUayBjbGlwYm9hcmQuICBNb2RpZnkgY2xpcGJvYWRfZ2V0KCkgdG8gZmlyc3QgcmVxdWVzdCB0eXBlCisgIFVURjhfU1RSSU5HIHdoZW4gbm8gc3BlY2lmaWMgdHlwZSBpcyByZXF1ZXN0ZWQgaW4gYW4gWDExIHdpbmRvd2luZworICBlbnZpcm9ubWVudCwgZmFsbGluZyBiYWNrIHRvIHRoZSBjdXJyZW50IGRlZmF1bHQgdHlwZSBTVFJJTkcgaWYgdGhhdCBmYWlscy4KKyAgT3JpZ2luYWwgcGF0Y2ggYnkgVGhvbWFzIEtsdXl2ZXIuCisKKy0gSXNzdWUgIzE0NzczOiBGaXggb3MuZndhbGsoKSBmYWlsaW5nIG9uIGRhbmdsaW5nIHN5bWxpbmtzLgorCistIElzc3VlICMxMjU0MTogQmUgbGVuaWVudCB3aXRoIHF1b3RlcyBhcm91bmQgUmVhbG0gZmllbGQgb2YgSFRUUCBCYXNpYworICBBdXRoZW50YXRpb24gaW4gdXJsbGliMi4KKworLSBJc3N1ZSAjMTQ4MDc6IG1vdmUgdW5kb2N1bWVudGVkIHRhcmZpbGUuZmlsZW1vZGUoKSB0byBzdGF0LmZpbGVtb2RlKCkgYW5kIGFkZAorICBkb2MgZW50cnkuIEFkZCB0YXJmaWxlLmZpbGVtb2RlIGFsaWFzIHdpdGggZGVwcmVjYXRpb24gd2FybmluZy4KKworLSBJc3N1ZSAjMTM4MTU6IFRhckZpbGUuZXh0cmFjdGZpbGUoKSBub3cgcmV0dXJucyBpby5CdWZmZXJlZFJlYWRlciBvYmplY3RzLgorCistIElzc3VlICMxNDUzMjogQWRkIGEgc2VjdXJlX2NvbXBhcmUoKSBoZWxwZXIgdG8gdGhlIGhtYWMgbW9kdWxlLCB0byBtaXRpZ2F0ZQorICB0aW1pbmcgYXR0YWNrcy4gUGF0Y2ggYnkgSm9uIE9iZXJoZWlkZS4KKworLSBBZGQgaW1wb3J0bGliLnV0aWwucmVzb2x2ZV9uYW1lKCkuCisKKy0gSXNzdWUgIzE0MzY2OiBTdXBwb3J0IGx6bWEgY29tcHJlc3Npb24gaW4gemlwIGZpbGVzLgorICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxMzk1OTogSW50cm9kdWNlIGltcG9ydGxpYi5maW5kX2xvYWRlcigpIGFuZCBkb2N1bWVudAorICBpbXAuZmluZF9tb2R1bGUvbG9hZF9tb2R1bGUgYXMgZGVwcmVjYXRlZC4KKworLSBJc3N1ZSAjMTQwODI6IHNodXRpbC5jb3B5MigpIG5vdyBjb3BpZXMgZXh0ZW5kZWQgYXR0cmlidXRlcywgaWYgcG9zc2libGUuCisgIFBhdGNoIGJ5IEh5bmVrIFNjaGxhd2Fjay4KKworLSBJc3N1ZSAjMTM5NTk6IE1ha2UgaW1wb3J0bGliLmFiYy5GaWxlTG9hZGVyLmxvYWRfbW9kdWxlKCkvZ2V0X2ZpbGVuYW1lKCkgYW5kCisgIGltcG9ydGxpYi5tYWNoaW5lcnkuRXh0ZW5zaW9uRmlsZUxvYWRlci5sb2FkX21vZHVsZSgpIGhhdmUgdGhlaXIgc2luZ2xlCisgIGFyZ3VtZW50IGJlIG9wdGlvbmFsLiBBbGxvd3MgZm9yIHRoZSByZXBsYWNlbWVudCAoYW5kIHRodXMgZGVwcmVjYXRpb24pIG9mCisgIGltcC5sb2FkX3NvdXJjZSgpL2xvYWRfcGFja2FnZSgpL2xvYWRfY29tcGlsZWQoKS4KKworLSBJc3N1ZSAjMTM5NTk6IGltcC5nZXRfc3VmZml4ZXMoKSBoYXMgYmVlbiBkZXByZWNhdGVkIGluIGZhdm91ciBvZiB0aGUgbmV3CisgIGF0dHJpYnV0ZXMgb24gaW1wb3J0bGliLm1hY2hpbmVyeTogU09VUkNFX1NVRkZJWEVTLCBERUJVR19CWVRFQ09ERV9TVUZGSVhFUywKKyAgT1BUSU1JWkVEX0JZVEVDT0RFX1NVRkZJWEVTLCBCWVRFQ09ERV9TVUZGSVhFUywgYW5kIEVYVEVOU0lPTl9TVUZGSVhFUy4gVGhpcworICBsZWQgdG8gYW4gaW5kaXJlY3QgZGVwcmVjYXRpb24gb2YgaW5zcGVjdC5nZXRtb2R1bGVpbmZvKCkuCisKKy0gSXNzdWUgIzE0NjYyOiBQcmV2ZW50IHNodXRpbCBmYWlsdXJlcyBvbiBPUyBYIHdoZW4gZGVzdGluYXRpb24gZG9lcyBub3QKKyAgc3VwcG9ydCBjaGZsYWcgb3BlcmF0aW9ucy4gIFBhdGNoIGJ5IEh5bmVrIFNjaGxhd2Fjay4KKworLSBJc3N1ZSAjMTQxNTc6IEZpeCB0aW1lLnN0cnB0aW1lIGZhaWxpbmcgd2l0aG91dCBhIHllYXIgb24gRmVicnVhcnkgMjl0aC4KKyAgUGF0Y2ggYnkgSHluZWsgU2NobGF3YWNrLgorCistIElzc3VlICMxNDc1MzogTWFrZSBtdWx0aXByb2Nlc3NpbmcncyBoYW5kbGluZyBvZiBuZWdhdGl2ZSB0aW1lb3V0cworICB0aGUgc2FtZSBhcyBpdCB3YXMgaW4gUHl0aG9uIDMuMi4KKworLSBJc3N1ZSAjMTQ1ODM6IEZpeCBpbXBvcnRsaWIgYnVnIHdoZW4gYSBwYWNrYWdlJ3MgX19pbml0X18ucHkgd291bGQgZmlyc3QKKyAgaW1wb3J0IG9uZSBvZiBpdHMgbW9kdWxlcyB0aGVuIHJhaXNlIGFuIGVycm9yLgorCistIElzc3VlICMxNDc0MTogRml4IG1pc3Npbmcgc3VwcG9ydCBmb3IgRWxsaXBzaXMgKCcuLi4nKSBpbiBwYXJzZXIgbW9kdWxlLgorCistIElzc3VlICMxNDY5NzogRml4IG1pc3Npbmcgc3VwcG9ydCBmb3Igc2V0IGRpc3BsYXlzIGFuZCBzZXQgY29tcHJlaGVuc2lvbnMgaW4KKyAgcGFyc2VyIG1vZHVsZS4KKworLSBJc3N1ZSAjMTQ3MDE6IEZpeCBtaXNzaW5nIHN1cHBvcnQgZm9yICdyYWlzZSAuLi4gZnJvbScgaW4gcGFyc2VyIG1vZHVsZS4KKworLSBBZGQgc3VwcG9ydCBmb3IgdGltZW91dHMgdG8gdGhlIGFjcXVpcmUoKSBtZXRob2RzIG9mCisgIG11bHRpcHJvY2Vzc2luZydzIGxvY2svc2VtYXBob3JlL2NvbmRpdGlvbiBwcm94aWVzLgorCistIElzc3VlICMxMzk4OTogQWRkIHN1cHBvcnQgZm9yIHRleHQgbW9kZSB0byBnemlwLm9wZW4oKS4KKworLSBJc3N1ZSAjMTQxMjc6IFRoZSBvcy5zdGF0KCkgcmVzdWx0IG9iamVjdCBub3cgcHJvdmlkZXMgdGhyZWUgYWRkaXRpb25hbAorICBmaWVsZHM6IHN0X2N0aW1lX25zLCBzdF9tdGltZV9ucywgYW5kIHN0X2F0aW1lX25zLCBwcm92aWRpbmcgdGhvc2UgdGltZXMgYXMgYW4KKyAgaW50ZWdlciB3aXRoIG5hbm9zZWNvbmQgcmVzb2x1dGlvbi4gIFRoZSBmdW5jdGlvbnMgb3MudXRpbWUoKSwgb3MubHV0aW1lcygpLAorICBhbmQgb3MuZnV0aW1lcygpIG5vdyBhY2NlcHQgYSBuZXcgcGFyYW1ldGVyLCBucywgd2hpY2ggYWNjZXB0cyBtdGltZSBhbmQgYXRpbWUKKyAgYXMgaW50ZWdlcnMgd2l0aCBuYW5vc2Vjb25kIHJlc29sdXRpb24uCisKKy0gSXNzdWUgIzE0MTI3IGFuZCAjMTAxNDg6IHNodXRpbC5jb3B5c3RhdCBub3cgcHJlc2VydmVzIGV4YWN0IG10aW1lIGFuZCBhdGltZQorICBvbiBmaWxlc3lzdGVtcyBwcm92aWRpbmcgbmFub3NlY29uZCByZXNvbHV0aW9uLgorCitUb29scy9EZW1vcworLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTQ2OTU6IEJyaW5nIFRvb2xzL3BhcnNlci91bnBhcnNlLnB5IHN1cHBvcnQgdXAgdG8gZGF0ZSB3aXRoCisgIHRoZSBQeXRob24gMy4zIEdyYW1tYXIuCisKK0J1aWxkCistLS0tLQorCistIElzc3VlICMxNDQ3MjogVXBkYXRlIC5naXRpZ25vcmUuIFBhdGNoIGJ5IE1hdGVqIENlcGwuCisKKy0gVXBncmFkZSBXaW5kb3dzIGxpYnJhcnkgdmVyc2lvbnM6IGJ6aXAgMS4wLjYsIE9wZW5TU0wgMS4wLjFjLgorCistIElzc3VlICMxNDY5MzogVW5kZXIgbm9uLVdpbmRvd3MgcGxhdGZvcm1zLCBoYXNobGliJ3MgZmFsbGJhY2sgbW9kdWxlcyBhcmUKKyAgYWx3YXlzIGNvbXBpbGVkLCBldmVuIGlmIE9wZW5TU0wgaXMgcHJlc2VudCBhdCBidWlsZCB0aW1lLgorCistIElzc3VlICMxMzIxMDogV2luZG93cyBidWlsZCBub3cgdXNlcyBWUzIwMTAsIHBvcnRlZCBmcm9tIFZTMjAwOC4KKworRG9jdW1lbnRhdGlvbgorLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxNDU4ODogVGhlIGxhbmd1YWdlIHJlZmVyZW5jZSBub3cgYWNjdXJhdGVseSBkb2N1bWVudHMgdGhlIFB5dGhvbiAzCisgIGNsYXNzIGRlZmluaXRpb24gcHJvY2Vzcy4gUGF0Y2ggYnkgTmljayBDb2dobGFuLgorCistIElzc3VlICMxNDk0MzogQ29ycmVjdCBhIGRlZmF1bHQgYXJndW1lbnQgdmFsdWUgZm9yIHdpbnJlZy5PcGVuS2V5CisgIGFuZCBjb3JyZWN0bHkgbGlzdCB0aGUgYXJndW1lbnQgbmFtZXMgaW4gdGhlIGZ1bmN0aW9uJ3MgZXhwbGFuYXRpb24uCisKKworV2hhdCdzIE5ldyBpbiBQeXRob24gMy4zLjAgQWxwaGEgMz8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKypSZWxlYXNlIGRhdGU6IDAxLU1heS0yMDEyKgorCitDb3JlIGFuZCBCdWlsdGlucworLS0tLS0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTQ2OTk6IEZpeCBjYWxsaW5nIHRoZSBjbGFzc21ldGhvZCBkZXNjcmlwdG9yIGRpcmVjdGx5LgorCistIElzc3VlICMxNDQzMzogUHJldmVudCBtc3ZjcnQgY3Jhc2ggaW4gaW50ZXJhY3RpdmUgcHJvbXB0IHdoZW4gc3RkaW4gaXMgY2xvc2VkLgorCistIElzc3VlICMxNDUyMTogTWFrZSByZXN1bHQgb2YgZmxvYXQoJ25hbicpIGFuZCBmbG9hdCgnLW5hbicpIG1vcmUgY29uc2lzdGVudAorICBhY3Jvc3MgcGxhdGZvcm1zLgorCistIElzc3VlICMxNDY0NjogX19pbXBvcnRfXygpIHNldHMgX19sb2FkZXJfXyBpZiB0aGUgbG9hZGVyIGRpZCBub3QuCisKKy0gSXNzdWUgIzE0NjA1OiBObyBsb25nZXIgaGF2ZSBpbXBsaWNpdCBlbnRyaWVzIGluIHN5cy5tZXRhX3BhdGguIElmCisgIHN5cy5tZXRhX3BhdGggaXMgZm91bmQgdG8gYmUgZW1wdHksIHJhaXNlIEltcG9ydFdhcm5pbmcuCisKKy0gSXNzdWUgIzE0NjA1OiBObyBsb25nZXIgaGF2ZSBpbXBsaWNpdCBlbnRyaWVzIGluIHN5cy5wYXRoX2hvb2tzLiBJZgorICBzeXMucGF0aF9ob29rcyBpcyBmb3VuZCB0byBiZSBlbXB0eSwgYSB3YXJuaW5nIHdpbGwgYmUgcmFpc2VkLiBOb25lIGlzIG5vdworICBpbnNlcnRlZCBpbnRvIHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlIGlmIG5vIGZpbmRlciB3YXMgZGlzY292ZXJlZC4gVGhpcyBhbHNvCisgIG1lYW5zIGltcC5OdWxsSW1wb3J0ZXIgaXMgbm8gbG9uZ2VyIGltcGxpY2l0bHkgdXNlZC4KKworLSBJc3N1ZSAjMTM5MDM6IEltcGxlbWVudCBQRVAgNDEyLiBJbmRpdmlkdWFsIGRpY3Rpb25hcnkgaW5zdGFuY2VzIGNhbiBub3cgc2hhcmUKKyAgdGhlaXIga2V5cyB3aXRoIG90aGVyIGRpY3Rpb25hcmllcy4gQ2xhc3NlcyB0YWtlIGFkdmFudGFnZSBvZiB0aGlzIHRvIHNoYXJlCisgIHRoZWlyIGluc3RhbmNlIGRpY3Rpb25hcnkga2V5cyBmb3IgaW1wcm92ZWQgbWVtb3J5IGFuZCBwZXJmb3JtYW5jZS4KKworLSBJc3N1ZSAjMTE2MDMgKGFnYWluKTogU2V0dGluZyBfX3JlcHJfXyB0byBfX3N0cl9fIG5vdyByYWlzZXMgYSBSdW50aW1lRXJyb3IKKyAgd2hlbiByZXByKCkgb3Igc3RyKCkgaXMgY2FsbGVkIG9uIHN1Y2ggYW4gb2JqZWN0LgorCistIElzc3VlICMxNDY1ODogRml4IGJpbmRpbmcgYSBzcGVjaWFsIG1ldGhvZCB0byBhIGJ1aWx0aW4gaW1wbGVtZW50YXRpb24gb2YgYQorICBzcGVjaWFsIG1ldGhvZCB3aXRoIGEgZGlmZmVyZW50IG5hbWUuCisKKy0gSXNzdWUgIzE0NjMwOiBGaXggYSBtZW1vcnkgYWNjZXNzIGJ1ZyBmb3IgaW5zdGFuY2VzIG9mIGEgc3ViY2xhc3Mgb2YgaW50CisgIHdpdGggdmFsdWUgMC4KKworLSBJc3N1ZSAjMTQzMzk6IFNwZWVkIGltcHJvdmVtZW50cyB0byBiaW4sIG9jdCBhbmQgaGV4IGZ1bmN0aW9ucy4gIFBhdGNoIGJ5CisgIFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE0MDk4OiBOZXcgZnVuY3Rpb25zIFB5RXJyX0dldEV4Y0luZm8gYW5kIFB5RXJyX1NldEV4Y0luZm8uCisgIFBhdGNoIGJ5IFN0ZWZhbiBCZWhuZWwuCisKKy0gSXNzdWUgIzE0Mzg1OiBJdCBpcyBub3cgcG9zc2libGUgdG8gdXNlIGEgY3VzdG9tIHR5cGUgZm9yIHRoZSBfX2J1aWx0aW5zX18KKyAgbmFtZXNwYWNlLCBpbnN0ZWFkIG9mIGEgZGljdC4gSXQgY2FuIGJlIHVzZWQgZm9yIHNhbmRib3hpbmcgZm9yIGV4YW1wbGUuCisgIFJhaXNlIGFsc28gYSBOYW1lRXJyb3IgaW5zdGVhZCBvZiBJbXBvcnRFcnJvciBpZiBfX2J1aWxkX2NsYXNzX18gbmFtZSBpZiBub3QKKyAgZm91bmQgaW4gX19idWlsdGluc19fLgorCistIElzc3VlICMxMjU5OTogQmUgbW9yZSBzdHJpY3QgaW4gYWNjZXB0aW5nIE5vbmUgY29tcGFyZWQgdG8gYSBmYWxzZS1saWtlCisgIG9iamVjdCBmb3IgaW1wb3J0bGliLnV0aWwubW9kdWxlX2Zvcl9sb2FkZXIgYW5kCisgIGltcG9ydGxpYi5tYWNoaW5lcnkuUGF0aEZpbmRlci4KKworLSBJc3N1ZSAjMTQ2MTI6IEZpeCBqdW1waW5nIGFyb3VuZCB3aXRoIGJsb2NrcyBieSBzZXR0aW5nIGZfbGluZW5vLgorCistIElzc3VlICMxNDU5MjogQXR0ZW1wdGluZyBhIHJlbGF0aXZlIGltcG9ydCB3L28gX19wYWNrYWdlX18gb3IgX19uYW1lX18gc2V0IGluCisgIGdsb2JhbHMgcmFpc2VzIGEgS2V5RXJyb3IuCisKKy0gSXNzdWUgIzE0NjA3OiBGaXgga2V5d29yZC1vbmx5IGFyZ3VtZW50cyB3aGljaCBzdGFydGVkIHdpdGggYGBfX2BgLgorCistIElzc3VlICMxMDg1NDogVGhlIEltcG9ydEVycm9yIHJhaXNlZCB3aGVuIGFuIGV4dGVuc2lvbiBtb2R1bGUgb24gV2luZG93cworICBmYWlscyB0byBpbXBvcnQgbm93IHVzZXMgdGhlIG5ldyBwYXRoIGFuZCBuYW1lIGF0dHJpYnV0ZXMgZnJvbQorICBJc3N1ZSAjMTU1OTU0OS4KKworLSBJc3N1ZSAjMTM4ODk6IENoZWNrIGFuZCAoaWYgbmVjZXNzYXJ5KSBzZXQgRlBVIGNvbnRyb2wgd29yZCBiZWZvcmUgY2FsbGluZworICBhbnkgb2YgdGhlIGR0b2EuYyBzdHJpbmcgPC0+IGZsb2F0IGNvbnZlcnNpb24gZnVuY3Rpb25zLCBvbiBNU1ZDIGJ1aWxkcyBvZgorICBQeXRob24uICBUaGlzIGZpeGVzIGlzc3VlcyB3aGVuIGVtYmVkZGluZyBQeXRob24gaW4gYSBEZWxwaGkgYXBwLgorCistIF9faW1wb3J0X18oKSBub3cgbWF0Y2hlcyBQRVAgMzI4IGFuZCBkb2N1bWVudGF0aW9uIGJ5IGRlZmF1bHRpbmcgJ2luZGV4JyB0byAwCisgIGluc3RlYWQgb2YgLTEgYW5kIHJlbW92aW5nIHN1cHBvcnQgZm9yIG5lZ2F0aXZlIHZhbHVlcy4KKworLSBJc3N1ZSAjMjM3NzogTWFrZSBpbXBvcnRsaWIgdGhlIGltcGxlbWVudGF0aW9uIG9mIF9faW1wb3J0X18oKS4KKworLSBJc3N1ZSAjMTU1OTU0OTogSW1wb3J0RXJyb3Igbm93IGhhcyAnbmFtZScgYW5kICdwYXRoJyBhdHRyaWJ1dGVzIHRoYXQgYXJlIHNldAorICB1c2luZyBrZXl3b3JkIGFyZ3VtZW50cyB0byBpdHMgY29uc3RydWN0b3IuIFRoZXkgYXJlIGN1cnJlbnRseSBub3Qgc2V0IGJ5CisgIGltcG9ydCBhcyB0aGV5IGFyZSBtZWFudCBmb3IgdXNlIGJ5IGltcG9ydGxpYi4KKworLSBJc3N1ZSAjMTQ0NzQ6IFNhdmUgYW5kIHJlc3RvcmUgZXhjZXB0aW9uIHN0YXRlIGluIHRocmVhZC5zdGFydF9uZXdfdGhyZWFkKCkKKyAgd2hpbGUgd3JpdGluZyBlcnJvciBtZXNzYWdlIGlmIHRoZSB0aHJlYWQgbGVhdmVzIGFuIHVuaGFuZGxlZCBleGNlcHRpb24uCisKKy0gSXNzdWUgIzEzMDE5OiBGaXggcG90ZW50aWFsIHJlZmVyZW5jZSBsZWFrcyBpbiBieXRlYXJyYXkuZXh0ZW5kKCkuICBQYXRjaAorICBieSBTdW1hbiBTYWhhLgorCitMaWJyYXJ5CistLS0tLS0tCisKKy0gSXNzdWUgIzE0NzY4OiBvcy5wYXRoLmV4cGFuZHVzZXIoJ34vYScpIGRvZXNuJ3Qgd29ya3MgY29ycmVjdGx5IHdoZW4gSE9NRSBpcyAnLycuCisKKy0gSXNzdWUgIzE0MzcxOiBTdXBwb3J0IGJ6aXAyIGluIHppcGZpbGUgbW9kdWxlLiAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTMxODM6IEZpeCBwZGIgc2tpcHBpbmcgZnJhbWVzIGFmdGVyIGhpdHRpbmcgYSBicmVha3BvaW50IGFuZCBydW5uaW5nCisgIHN0ZXAuICBQYXRjaCBieSBYYXZpZXIgZGUgR2F5ZS4KKworLSBJc3N1ZSAjMTQ2OTY6IEZpeCBwYXJzZXIgbW9kdWxlIHRvIHVuZGVyc3RhbmQgJ25vbmxvY2FsJyBkZWNsYXJhdGlvbnMuCisKKy0gSXNzdWUgIzEwOTQxOiBGaXggaW1hcGxpYi5JbnRlcm5hbGRhdGUydHVwbGUgdG8gcHJvZHVjZSBjb3JyZWN0IHJlc3VsdCBuZWFyCisgIHRoZSBEU1QgdHJhbnNpdGlvbi4gIFBhdGNoIGJ5IEpvZSBQZXRlcnNvbi4KKworLSBJc3N1ZSAjOTE1NDogRml4IHBhcnNlciBtb2R1bGUgdG8gdW5kZXJzdGFuZCBmdW5jdGlvbiBhbm5vdGF0aW9ucy4KKworLSBJc3N1ZSAjNjA4NTogSW4gaHR0cC5zZXJ2ZXIucHkgU2ltcGxlSFRUUFNlcnZlci5hZGRyZXNzX3N0cmluZyByZXR1cm5zIHRoZQorICBjbGllbnQgaXAgYWRkcmVzcyBpbnN0ZWFkIGNsaWVudCBob3N0bmFtZS4gUGF0Y2ggYnkgQ2hhcmxlcy1GcmFuw6dvaXMgTmF0YWxpLgorCistIElzc3VlICMxNDMwOTogRGVwcmVjYXRlIHRpbWUuY2xvY2soKSwgdXNlIHRpbWUucGVyZl9jb3VudGVyKCkgb3IKKyAgdGltZS5wcm9jZXNzX3RpbWUoKSBpbnN0ZWFkLgorCistIElzc3VlICMxNDQyODogSW1wbGVtZW50IHRoZSBQRVAgNDE4LiBBZGQgdGltZS5nZXRfY2xvY2tfaW5mbygpLAorICB0aW1lLnBlcmZfY291bnRlcigpIGFuZCB0aW1lLnByb2Nlc3NfdGltZSgpIGZ1bmN0aW9ucywgYW5kIHJlbmFtZQorICB0aW1lLnN0ZWFkeSgpIHRvIHRpbWUubW9ub3RvbmljKCkuCisKKy0gSXNzdWUgIzE0NjQ2OiBpbXBvcnRsaWIudXRpbC5tb2R1bGVfZm9yX2xvYWRlcigpIG5vdyBzZXRzIF9fbG9hZGVyX18gYW5kCisgIF9fcGFja2FnZV9fICh3aGVuIHBvc3NpYmxlKS4KKworLSBJc3N1ZSAjMTQ2NjQ6IEl0IGlzIG5vdyBwb3NzaWJsZSB0byB1c2UgQHVuaXR0ZXN0LnNraXB7SWYsVW5sZXNzfSBvbiBhCisgIHRlc3QgY2xhc3MgdGhhdCBkb2Vzbid0IGluaGVyaXQgZnJvbSBUZXN0Q2FzZSAoaS5lLiBhIG1peGluKS4KKworLSBJc3N1ZSAjNDg5MjogbXVsdGlwcm9jZXNzaW5nIENvbm5lY3Rpb25zIGNhbiBub3cgYmUgdHJhbnNmZXJyZWQgb3ZlcgorICBtdWx0aXByb2Nlc3NpbmcgQ29ubmVjdGlvbnMuICBQYXRjaCBieSBSaWNoYXJkIE91ZGtlcmsgKHNidCkuCisKKy0gSXNzdWUgIzE0MTYwOiBUYXJGaWxlLmV4dHJhY3RmaWxlKCkgZmFpbGVkIHRvIHJlc29sdmUgc3ltYm9saWMgbGlua3Mgd2hlbgorICB0aGUgbGlua3Mgd2VyZSBub3QgbG9jYXRlZCBpbiBhbiBhcmNoaXZlIHN1YmRpcmVjdG9yeS4KKworLSBJc3N1ZSAjMTQ2Mzg6IHB5ZG9jIG5vdyB0cmVhdHMgbm9uLXN0cmluZyBfX25hbWVfXyB2YWx1ZXMgYXMgaWYgdGhleQorICB3ZXJlIG1pc3NpbmcsIGluc3RlYWQgb2YgcmFpc2luZyBhbiBlcnJvci4KKworLSBJc3N1ZSAjMTM2ODQ6IEZpeCBodHRwbGliIHR1bm5lbCBpc3N1ZSBvZiBpbmZpbml0ZSBsb29wcyBmb3IgY2VydGFpbiBzaXRlcworICB3aGljaCBzZW5kIEVPRiB3aXRob3V0IHRyYWlsaW5nIFxyXG4uCisKKy0gSXNzdWUgIzE0NjA1OiBBZGQgaW1wb3J0bGliLmFiYy5GaWxlTG9hZGVyLCBpbXBvcnRsaWIubWFjaGluZXJ5LihGaWxlRmluZGVyLAorICBTb3VyY2VGaWxlTG9hZGVyLCBTb3VyY2VsZXNzRmlsZUxvYWRlciwgRXh0ZW5zaW9uRmlsZUxvYWRlcikuCisKKy0gSXNzdWUgIzEzOTU5OiBpbXAuY2FjaGVfZnJvbV9zb3VyY2UoKS9zb3VyY2VfZnJvbV9jYWNoZSgpIG5vdyBmb2xsb3cKKyAgb3MucGF0aC5qb2luKCkvc3BsaXQoKSBzZW1hbnRpY3MgZm9yIHBhdGggbWFuaXB1bGF0aW9uIGluc3RlYWQgb2YgaXRzIHByaW9yLAorICBjdXN0b20gc2VtYW50aWNzIG9mIGNhcmluZyB0aGUgcmlnaHQtbW9zdCBwYXRoIHNlcGFyYXRvciBmb3J3YXJkIGluIHBhdGgKKyAgam9pbmluZy4KKworLSBJc3N1ZSAjMjE5MzogQWxsb3cgIjoiIGNoYXJhY3RlciBpbiBDb29raWUgTkFNRSB2YWx1ZXMuCisKKy0gSXNzdWUgIzE0NjI5OiB0b2tlbml6ZXIuZGV0ZWN0X2VuY29kaW5nIHdpbGwgc3BlY2lmeSB0aGUgZmlsZW5hbWUgaW4gdGhlCisgIFN5bnRheEVycm9yIGV4Y2VwdGlvbiBpZiBmb3VuZCBhdCByZWFkbGluZS5fX3NlbGZfXy5uYW1lLgorCistIElzc3VlICMxNDYyOTogUmFpc2UgU3ludGF4RXJyb3IgaW4gdG9rZW5pemVyLmRldGVjdF9lbmNvZGluZyBpZiB0aGUKKyAgZmlyc3QgdHdvIGxpbmVzIGhhdmUgbm9uLVVURi04IGNoYXJhY3RlcnMgd2l0aG91dCBhbiBlbmNvZGluZyBkZWNsYXJhdGlvbi4KKworLSBJc3N1ZSAjMTQzMDg6IEZpeCBhbiBleGNlcHRpb24gd2hlbiBhICJkdW1teSIgdGhyZWFkIGlzIGluIHRoZSB0aHJlYWRpbmcKKyAgbW9kdWxlJ3MgYWN0aXZlIGxpc3QgYWZ0ZXIgYSBmb3JrKCkuCisKKy0gSXNzdWUgIzExNzUwOiBUaGUgV2luZG93cyBBUEkgZnVuY3Rpb25zIHNjYXR0ZXJlZCBpbiB0aGUgX3N1YnByb2Nlc3MgYW5kCisgIF9tdWx0aXByb2Nlc3Npbmcud2luMzIgbW9kdWxlcyBub3cgbGl2ZSBpbiBhIHNpbmdsZSBtb2R1bGUgIl93aW5hcGkiLgorICBQYXRjaCBieSBzYnQuCisKKy0gSXNzdWUgIzE0MDg3OiBtdWx0aXByb2Nlc3Npbmc6IGFkZCBDb25kaXRpb24ud2FpdF9mb3IoKS4gUGF0Y2ggYnkgc2J0LgorCistIElzc3VlICMxNDUzODogSFRNTFBhcnNlciBjYW4gbm93IHBhcnNlIGNvcnJlY3RseSBzdGFydCB0YWdzIHRoYXQgY29udGFpbgorICBhIGJhcmUgJy8nLgorCistIElzc3VlICMxNDQ1MjogU3lzTG9nSGFuZGxlciBubyBsb25nZXIgaW5zZXJ0cyBhIFVURi04IEJPTSBpbnRvIHRoZSBtZXNzYWdlLgorCistIElzc3VlICMxNDM4NjogRXhwb3NlIHRoZSBkaWN0X3Byb3h5IGludGVybmFsIHR5cGUgYXMgdHlwZXMuTWFwcGluZ1Byb3h5VHlwZS4KKworLSBJc3N1ZSAjMTM5NTk6IE1ha2UgaW1wLnJlbG9hZCgpIGFsd2F5cyB1c2UgYSBtb2R1bGUncyBfX2xvYWRlcl9fIHRvIHBlcmZvcm0KKyAgdGhlIHJlbG9hZC4KKworLSBJc3N1ZSAjMTM5NTk6IEFkZCBpbXAucHkgYW5kIHJlbmFtZSB0aGUgYnVpbHQtaW4gbW9kdWxlIHRvIF9pbXAsIGFsbG93aW5nIGZvcgorICByZS1pbXBsZW1lbnRpbmcgcGFydHMgb2YgdGhlIG1vZHVsZSBpbiBwdXJlIFB5dGhvbi4KKworLSBJc3N1ZSAjMTM0OTY6IEZpeCBwb3RlbnRpYWwgb3ZlcmZsb3cgaW4gYmlzZWN0LmJpc2VjdCBhbGdvcml0aG0gd2hlbiBhcHBsaWVkCisgIHRvIGEgY29sbGVjdGlvbiBvZiBzaXplID4gc3lzLm1heHNpemUgLyAyLgorCistIEhhdmUgaW1wb3J0bGliIHRha2UgYWR2YW50YWdlIG9mIEltcG9ydEVycm9yJ3MgbmV3ICduYW1lJyBhbmQgJ3BhdGgnCisgIGF0dHJpYnV0ZXMuCisKKy0gSXNzdWUgIzE0Mzk5OiB6aXBmaWxlIG5vdyByZWNvZ25pemVzIHRoYXQgdGhlIGFyY2hpdmUgaGFzIGJlZW4gbW9kaWZpZWQgZXZlbgorICBpZiBvbmx5IHRoZSBjb21tZW50IGlzIGNoYW5nZWQuICBJbiBhZGRpdGlvbiwgdGhlIFR5cGVFcnJvciB0aGF0IHJlc3VsdHMgZnJvbQorICB0cnlpbmcgdG8gc2V0IGEgbm9uLWJpbmFyeSB2YWx1ZSBhcyBhIGNvbW1lbnQgaXMgbm93IHJhaXNlZCBhdCB0aGUgdGltZQorICB0aGUgY29tbWVudCBpcyBzZXQgcmF0aGVyIHRoYW4gYXQgdGhlIHRpbWUgdGhlIHppcGZpbGUgaXMgd3JpdHRlbi4KKworLSB0cmFjZS5Db3ZlcmFnZVJlc3VsdHMuaXNfaWdub3JlZF9maWxlbmFtZSgpIG5vdyBpZ25vcmVzIGFueSBuYW1lIHRoYXQgc3RhcnRzCisgIHdpdGggIjwiIGFuZCBlbmRzIHdpdGggIj4iIGluc3RlYWQgb2Ygc3BlY2lhbC1jYXNpbmcgIjxzdHJpbmc+IiBhbmQKKyAgIjxkb2N0ZXN0ICIuCisKKy0gSXNzdWUgIzEyNTM3OiBUaGUgbWFpbGJveCBtb2R1bGUgbm8gbG9uZ2VyIGRlcGVuZHMgb24ga25vd2xlZGdlIG9mIGludGVybmFsCisgIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb2YgdGhlIGVtYWlsIHBhY2thZ2UgTWVzc2FnZSBvYmplY3QuCisKKy0gSXNzdWUgIzc5Nzg6IHNvY2tldHNlcnZlciBub3cgcmVzdGFydHMgdGhlIHNlbGVjdCgpIGNhbGwgd2hlbiBFSU5UUiBpcworICByZXR1cm5lZC4gIFRoaXMgYXZvaWRzIGNyYXNoaW5nIHRoZSBzZXJ2ZXIgbG9vcCB3aGVuIGEgc2lnbmFsIGlzIHJlY2VpdmVkLgorICBQYXRjaCBieSBKZXJ6eSBLb3plcmEuCisKKy0gSXNzdWUgIzE0NTIyOiBBdm9pZCBkdXBsaWNhdGluZyBzb2NrZXQgaGFuZGxlcyBpbiBtdWx0aXByb2Nlc3NpbmcuY29ubmVjdGlvbi4KKyAgUGF0Y2ggYnkgc2J0LgorCistIERvbid0IFB5X0RFQ1JFRiBOVUxMIHZhcmlhYmxlIGluIGlvLkluY3JlbWVudGFsTmV3bGluZURlY29kZXIuCisKKy0gSXNzdWUgIzg1MTU6IFNldCBfX2ZpbGVfXyB3aGVuIHJ1biBmaWxlIGluIElETEUuCisgIEluaXRpYWwgcGF0Y2ggYnkgQnJ1Y2UgRnJlZGVyaWtzZW4uCisKKy0gSXNzdWUgIzE0NDk2OiBGaXggd3JvbmcgbmFtZSBpbiBpZGxlbGliL3RhYmJlZHBhZ2VzLnB5LgorICBQYXRjaCBieSBQb3BhIENsYXVkaXUuCisKKy0gSXNzdWUgIzMwMzM6IEFkZCBkaXNwbGF5b2YgcGFyYW1ldGVyIHRvIHRraW50ZXIgZm9udC4gUGF0Y2ggYnkgR3VpbGhlcm1lIFBvbG8uCisKKy0gSXNzdWUgIzE0NDgyOiBSYWlzZSBhIFZhbHVlRXJyb3IsIG5vdCBhIE5hbWVFcnJvciwgd2hlbiB0cnlpbmcgdG8gY3JlYXRlCisgIGEgbXVsdGlwcm9jZXNzaW5nIENsaWVudCBvciBMaXN0ZW5lciB3aXRoIGFuIEFGX1VOSVggdHlwZSBhZGRyZXNzIHVuZGVyCisgIFdpbmRvd3MuICBQYXRjaCBieSBQb3BhIENsYXVkaXUuCisKKy0gSXNzdWUgIzgwMjMxMDogR2VuZXJhdGUgYWx3YXlzIHVuaXF1ZSB0a2ludGVyIGZvbnQgbmFtZXMgaWYgbm90IGRpcmVjdGx5IHBhc3NlZC4KKworLSBJc3N1ZSAjMTQxNTE6IFJhaXNlIGEgVmFsdWVFcnJvciwgbm90IGEgTmFtZUVycm9yLCB3aGVuIHRyeWluZyB0byBjcmVhdGUKKyAgYSBtdWx0aXByb2Nlc3NpbmcgQ2xpZW50IG9yIExpc3RlbmVyIHdpdGggYW4gQUZfUElQRSB0eXBlIGFkZHJlc3MgdW5kZXIKKyAgbm9uLVdpbmRvd3MgcGxhdGZvcm1zLiAgUGF0Y2ggYnkgUG9wYSBDbGF1ZGl1LgorCistIElzc3VlICMxNDQ5MzogVXNlIGd2ZnMtb3BlbiBvciB4ZGctb3BlbiBpbiB3ZWJicm93c2VyLgorCitCdWlsZAorLS0tLS0KKworLSAibWFrZSB0b3VjaCIgd2lsbCBub3cgdG91Y2ggZ2VuZXJhdGVkIGZpbGVzIHRoYXQgYXJlIGNoZWNrZWQgaW50byBNZXJjdXJpYWwsCisgIGFmdGVyIGEgImhnIHVwZGF0ZSIgd2hpY2ggZmFpbGVkIHRvIGJyaW5nIHRoZSB0aW1lc3RhbXBzIGludG8gdGhlIHJpZ2h0IG9yZGVyLgorCitUZXN0cworLS0tLS0KKworLSBJc3N1ZSAjMTQwMjY6IEluIHRlc3RfY21kX2xpbmVfc2NyaXB0LCBjaGVjayB0aGF0IHN5cy5hcmd2IGlzIHBvcHVsYXRlZAorICBjb3JyZWN0bHkgZm9yIHRoZSB2YXJpb3VzIGludm9jYXRpb24gYXBwcm9hY2hlcyAoUGF0Y2ggYnkgSmFzb24gWWVvKQorCistIElzc3VlICMxNDAzMjogRml4IGluY29ycmVjdCB2YXJpYWJsZSBuYW1lIGluIHRlc3RfY21kX2xpbmVfc2NyaXB0IGRlYnVnZ2luZworICBtZXNzYWdlIChQYXRjaCBieSBKYXNvbiBZZW8pCisKKy0gSXNzdWUgIzE0NTg5OiBVcGRhdGUgY2VydGlmaWNhdGUgY2hhaW4gZm9yIHNoYTI1Ni50YnMtaW50ZXJuZXQuY29tLCBmaXhpbmcKKyAgYSB0ZXN0IGZhaWx1cmUgaW4gdGVzdF9zc2wuCisKKy0gSXNzdWUgIzE0MzU1OiBSZWdydGVzdCBub3cgc3VwcG9ydHMgdGhlIHN0YW5kYXJkIHVuaXR0ZXN0IHRlc3QgbG9hZGluZywgYW5kCisgIHdpbGwgdXNlIGl0IGlmIGEgdGVzdCBmaWxlIGNvbnRhaW5zIG5vIGB0ZXN0X21haW5gIG1ldGhvZC4KKworVG9vbHMgLyBEZW1vcworLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMzNTYxOiBUaGUgV2luZG93cyBpbnN0YWxsZXIgbm93IGhhcyBhbiBvcHRpb24sIG9mZiBieSBkZWZhdWx0LCBmb3IKKyAgcGxhY2luZyB0aGUgUHl0aG9uIGluc3RhbGxhdGlvbiBpbnRvIHRoZSBzeXN0ZW0gIlBhdGgiIGVudmlyb25tZW50IHZhcmlhYmxlLgorCistIElzc3VlICMxMzE2NTogc3RyaW5nYmVuY2ggaXMgbm93IGF2YWlsYWJsZSBpbiB0aGUgVG9vbHMvc3RyaW5nYmVuY2ggZm9sZGVyLgorICBJdCB1c2VkIHRvIGxpdmUgaW4gaXRzIG93biBTVk4gcHJvamVjdC4KKworCitXaGF0J3MgTmV3IGluIFB5dGhvbiAzLjMuMCBBbHBoYSAyPworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworKlJlbGVhc2UgZGF0ZTogMDEtQXByLTIwMTIqCisKK0NvcmUgYW5kIEJ1aWx0aW5zCistLS0tLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxNjgzMzY4OiBvYmplY3QuX19uZXdfXyBhbmQgb2JqZWN0Ll9faW5pdF9fIHJhaXNlIGEgVHlwZUVycm9yIGlmIHRoZXkKKyAgYXJlIHBhc3NlZCBhcmd1bWVudHMgYW5kIHRoZWlyIGNvbXBsZW1lbnRhcnkgbWV0aG9kIGlzIG5vdCBvdmVycmlkZGVuLgorCistIElzc3VlICMxNDM3ODogRml4IGNvbXBpbGluZyBhc3QuSW1wb3J0RnJvbSBub2RlcyB3aXRoIGEgIl9fZnV0dXJlX18iIHN0cmluZyBhcworICB0aGUgbW9kdWxlIG5hbWUgdGhhdCB3YXMgbm90IGludGVybmVkLgorCistIElzc3VlICMxNDMzMTogVXNlIHNpZ25pZmljYW50bHkgbGVzcyBzdGFjayBzcGFjZSB3aGVuIGltcG9ydGluZyBtb2R1bGVzIGJ5CisgIGFsbG9jYXRpbmcgcGF0aCBidWZmZXJzIG9uIHRoZSBoZWFwIGluc3RlYWQgb2YgdGhlIHN0YWNrLgorCistIElzc3VlICMxNDMzNDogUHJldmVudCBpbiBhIHNlZ2ZhdWx0IGluIHR5cGUuX19nZXRhdHRyaWJ1dGVfXyB3aGVuIGl0IHdhcyBub3QKKyAgcGFzc2VkIHN0cmluZ3MuCisKKy0gSXNzdWUgIzE0Njk2Mjk6IEFsbG93IGN5Y2xlcyB0aHJvdWdoIGFuIG9iamVjdCdzIF9fZGljdF9fIHNsb3QgdG8gYmUKKyAgY29sbGVjdGVkLiAoRm9yIGV4YW1wbGUgaWYgYGB4Ll9fZGljdF9fIGlzIHhgYCkuCisKKy0gSXNzdWUgIzE0MjA1OiBkaWN0IGxvb2t1cCByYWlzZXMgYSBSdW50aW1lRXJyb3IgaWYgdGhlIGRpY3QgaXMgbW9kaWZpZWQKKyAgZHVyaW5nIGEgbG9va3VwLgorCistIElzc3VlICMxNDIyMDogV2hlbiBhIGdlbmVyYXRvciBpcyBkZWxlZ2F0aW5nIHRvIGFub3RoZXIgaXRlcmF0b3Igd2l0aCB0aGUKKyAgeWllbGQgZnJvbSBzeW50YXgsIGl0IG5lZWRzIHRvIGhhdmUgaXRzIGBgZ2lfcnVubmluZ2BgIGZsYWcgc2V0IHRvIFRydWUuCisKKy0gSXNzdWUgIzE0NDM1OiBSZW1vdmUgZGVkaWNhdGVkIGJsb2NrIGFsbG9jYXRvciBmcm9tIGZsb2F0b2JqZWN0LmMgYW5kIHJlbHkKKyAgb24gdGhlIFB5T2JqZWN0X01hbGxvYygpIGFwaSBsaWtlIGFsbCBvdGhlciBvYmplY3RzLgorCistIElzc3VlICMxNDQ3MTogRml4IGEgcG9zc2libGUgYnVmZmVyIG92ZXJydW4gaW4gdGhlIHdpbnJlZyBtb2R1bGUuCisKKy0gSXNzdWUgIzE0Mjg4OiBBbGxvdyB0aGUgc2VyaWFsaXphdGlvbiBvZiBidWlsdGluIGl0ZXJhdG9ycworCitMaWJyYXJ5CistLS0tLS0tCisKKy0gSXNzdWUgIzE0MzAwOiBVbmRlciBXaW5kb3dzLCBzb2NrZXRzIGNyZWF0ZWQgdXNpbmcgc29ja2V0LmR1cCgpIG5vdyBhbGxvdworICBvdmVybGFwcGVkIEkvTy4gIFBhdGNoIGJ5IHNidC4KKworLSBJc3N1ZSAjMTM4NzI6IHNvY2tldC5kZXRhY2goKSBub3cgbWFya3MgdGhlIHNvY2tldCBjbG9zZWQgKGFzIG1pcnJvcmVkCisgIGluIHRoZSBzb2NrZXQgcmVwcigpKS4gIFBhdGNoIGJ5IE1hdHQgSm9pbmVyLgorCistIElzc3VlICMxNDQwNjogRml4IGEgcmFjZSBjb25kaXRpb24gd2hlbiB1c2luZyBgYGNvbmN1cnJlbnQuZnV0dXJlcy53YWl0KAorICByZXR1cm5fd2hlbj1BTExfQ09NUExFVEVEKWBgLiAgUGF0Y2ggYnkgTWF0dCBKb2luZXIuCisKKy0gSXNzdWUgIzUxMzY6IGRlcHJlY2F0ZSBvbGQsIHVudXNlZCBmdW5jdGlvbnMgZnJvbSB0a2ludGVyLgorCistIElzc3VlICMxNDQwOTogSURMRSBub3cgcHJvcGVybHkgZXhlY3V0ZXMgY29tbWFuZHMgaW4gdGhlIFNoZWxsIHdpbmRvdworICB3aGVuIGl0IGNhbm5vdCByZWFkIHRoZSBub3JtYWwgY29uZmlnIGZpbGVzIG9uIHN0YXJ0dXAgYW5kCisgIGhhcyB0byB1c2UgdGhlIGJ1aWx0LWluIGRlZmF1bHQga2V5IGJpbmRpbmdzLgorICBUaGVyZSB3YXMgcHJldmlvdXNseSBhIGJ1ZyBpbiBvbmUgb2YgdGhlIGRlZmF1bHRzLgorCistIElzc3VlICMxNDQxNjogc3lzbG9nIG5vdyBkZWZpbmVzIHRoZSBMT0dfT0RFTEFZIGFuZCBMT0dfQVVUSFBSSVYgY29uc3RhbnRzCisgIGlmIHRoZXkgYXJlIGRlZmluZWQgaW4gPHN5c2xvZy5oPi4KKworLSBJRExFIGNhbiBiZSBsYXVuY2hlZCBhcyBweXRob24gLW0gaWRsZWxpYgorCistIElzc3VlICMxNDI5NTogQWRkIHVuaXR0ZXN0Lm1vY2sKKworLSBJc3N1ZSAjNzY1MjogQWRkIC0td2l0aC1zeXN0ZW0tbGlibXBkZWMgb3B0aW9uIHRvIGNvbmZpZ3VyZSBmb3IgbGlua2luZworICB0aGUgX2RlY2ltYWwgbW9kdWxlIGFnYWluc3QgYW4gaW5zdGFsbGVkIGxpYm1wZGVjLgorCistIElzc3VlICMxNDM4MDogTUlNRVRleHQgbm93IGRlZmF1bHRzIHRvIHV0Zi04IHdoZW4gcGFzc2VkIG5vbi1BU0NJSSB1bmljb2RlCisgIHdpdGggbm8gY2hhcnNldCBzcGVjaWZpZWQuCisKKy0gSXNzdWUgIzEwMzQwOiBhc3luY29yZSAtIHByb3Blcmx5IGhhbmRsZSBFSU5WQUwgaW4gZGlzcGF0Y2hlciBjb25zdHJ1Y3RvciBvbgorICBPU1g7IGF2b2lkIHRvIGNhbGwgaGFuZGxlX2Nvbm5lY3QgaW4gY2FzZSBvZiBhIGRpc2Nvbm5lY3RlZCBzb2NrZXQgd2hpY2gKKyAgd2FzIG5vdCBtZWFudCB0byBjb25uZWN0LgorCistIElzc3VlICMxNDIwNDogVGhlIHNzbCBtb2R1bGUgbm93IGhhcyBzdXBwb3J0IGZvciB0aGUgTmV4dCBQcm90b2NvbAorICBOZWdvdGlhdGlvbiBleHRlbnNpb24sIGlmIGF2YWlsYWJsZSBpbiB0aGUgdW5kZXJseWluZyBPcGVuU1NMIGxpYnJhcnkuCisgIFBhdGNoIGJ5IENvbGluIE1hcmMuCisKKy0gSXNzdWUgIzMwMzU6IFVudXNlZCBmdW5jdGlvbnMgZnJvbSB0a2ludGVyIGFyZSBtYXJrZWQgYXMgcGVuZGluZyBkZXByZWNhdGVkLgorCistIElzc3VlICMxMjc1NzogRml4IHRoZSBza2lwcGluZyBvZiBkb2N0ZXN0cyB3aGVuIHB5dGhvbiBpcyBydW4gd2l0aCAtT08gc28KKyAgdGhhdCBpdCB3b3JrcyBpbiB1bml0dGVzdCdzIHZlcmJvc2UgbW9kZSBhcyB3ZWxsIGFzIG5vbi12ZXJib3NlIG1vZGUuCisKKy0gSXNzdWUgIzc2NTI6IEludGVncmF0ZSB0aGUgZGVjaW1hbCBmbG9hdGluZyBwb2ludCBsaWJtcGRlYyBsaWJyYXJ5IHRvIHNwZWVkCisgIHVwIHRoZSBkZWNpbWFsIG1vZHVsZS4gUGVyZm9ybWFuY2UgZ2FpbnMgb2YgdGhlIG5ldyBDIGltcGxlbWVudGF0aW9uIGFyZQorICBiZXR3ZWVuIDEweCBhbmQgMTAweCwgZGVwZW5kaW5nIG9uIHRoZSBhcHBsaWNhdGlvbi4KKworLSBJc3N1ZSAjMzU3MzogSURMRSBoYW5ncyB3aGVuIHBhc3NpbmcgaW52YWxpZCBjb21tYW5kIGxpbmUgYXJncworICAoZGlyZWN0b3J5KGllcykgaW5zdGVhZCBvZiBmaWxlKHMpKSAoUGF0Y2ggYnkgR3VpbGhlcm1lIFBvbG8pCisKKy0gSXNzdWUgIzE0MjY5OiBTTVRQRCBub3cgY29uZm9ybXMgdG8gdGhlIFJGQyBhbmQgcmVxdWlyZXMgYSBIRUxPIGNvbW1hbmQKKyAgYmVmb3JlIE1BSUwsIFJDUFQsIG9yIERBVEEuCisKKy0gSXNzdWUgIzEzNjk0OiBhc3luY2hyb25vdXMgY29ubmVjdCBpbiBhc3luY29yZS5kaXNwYXRjaGVyIGRvZXMgbm90IHNldCBhZGRyCisgIGF0dHJpYnV0ZS4KKworLSBJc3N1ZSAjMTQzNDQ6IGZpeGVkIHRoZSByZXByIG9mIGVtYWlsLnBvbGljeSBvYmplY3RzLgorCistIElzc3VlICMxMTY4NjogQWRkZWQgbWlzc2luZyBlbnRyaWVzIHRvIGVtYWlsIHBhY2thZ2UgX19hbGxfXyBsaXN0cworICAobW9zdGx5IHRoZSBuZXcgQnl0ZXMgY2xhc3NlcykuCisKKy0gSXNzdWUgIzE0MzM1OiBtdWx0aXByb2Nlc3NpbmcncyBjdXN0b20gUGlja2xlciBzdWJjbGFzcyBub3cgaW5oZXJpdHMgZnJvbQorICB0aGUgQy1hY2NlbGVyYXRlZCBpbXBsZW1lbnRhdGlvbi4gIFBhdGNoIGJ5IHNidC4KKworLSBJc3N1ZSAjMTA0ODQ6IEZpeCB0aGUgQ0dJSFRUUFNlcnZlcidzIFBBVEhfSU5GTyBoYW5kbGluZyBwcm9ibGVtLgorCistIElzc3VlICMxMTE5OTogRml4IHRoZSB3aXRoIHVybGxpYiB3aGljaCBoYW5ncyBvbiBwYXJ0aWN1bGFyIGZ0cCB1cmxzLgorCistIEltcHJvdmUgdGhlIG1lbW9yeSB1dGlsaXphdGlvbiBhbmQgc3BlZWQgb2YgZnVuY3Rvb2xzLmxydV9jYWNoZS4KKworLSBJc3N1ZSAjMTQyMjI6IFVzZSB0aGUgbmV3IHRpbWUuc3RlYWR5KCkgZnVuY3Rpb24gaW5zdGVhZCBvZiB0aW1lLnRpbWUoKSBmb3IKKyAgdGltZW91dCBpbiBxdWV1ZSBhbmQgdGhyZWFkaW5nIG1vZHVsZXMgdG8gbm90IGJlIGFmZmVjdGVkIG9mIHN5c3RlbSB0aW1lCisgIHVwZGF0ZS4KKworLSBJc3N1ZSAjMTMyNDg6IFJlbW92ZSBsaWIydG8zLnB5dHJlZS5CYXNlLmdldF9wcmVmaXgvc2V0X3ByZWZpeC4KKworLSBJc3N1ZSAjMTQyMzQ6IENWRS0yMDEyLTA4NzY6IFJhbmRvbWl6ZSBoYXNoZXMgb2YgeG1sIGF0dHJpYnV0ZXMgaW4gdGhlIGhhc2gKKyAgdGFibGUgaW50ZXJuYWwgdG8gdGhlIHB5ZXhwYXQgbW9kdWxlJ3MgY29weSBvZiB0aGUgZXhwYXQgbGlicmFyeSB0byBhdm9pZCBhCisgIGRlbmlhbCBvZiBzZXJ2aWNlIGR1ZSB0byBoYXNoIGNvbGxpc2lvbnMuICBQYXRjaCBieSBEYXZpZCBNYWxjb2xtIHdpdGggc29tZQorICBtb2RpZmljYXRpb25zIGJ5IHRoZSBleHBhdCBwcm9qZWN0LgorCistIElzc3VlICMxNDIwMDogSWRsZSBzaGVsbCBjcmFzaCBvbiBwcmludGluZyBub24tQk1QIHVuaWNvZGUgY2hhcmFjdGVyLgorCistIElzc3VlICMxMjgxODogZm9ybWF0IGFkZHJlc3Mgbm8gbG9uZ2VyIG5lZWRsZXNzbHkgXCBlc2NhcGVzICgpcyBpbiBuYW1lcyB3aGVuCisgIHRoZSBuYW1lIGVuZHMgdXAgYmVpbmcgcXVvdGVkLgorCistIElzc3VlICMxNDA2MjogQnl0ZXNHZW5lcmF0b3Igbm93IGNvcnJlY3RseSBmb2xkcyBIZWFkZXIgb2JqZWN0cywKKyAgaW5jbHVkaW5nIHVzaW5nIGxpbmVzZXAgd2hlbiBmb2xkaW5nLgorCistIElzc3VlICMxMzgzOTogV2hlbiBpbnZva2VkIG9uIHRoZSBjb21tYW5kLWxpbmUsIHRoZSBwc3RhdHMgbW9kdWxlIG5vdworICBhY2NlcHRzIHNldmVyYWwgZmlsZW5hbWVzIG9mIHByb2ZpbGUgc3RhdCBmaWxlcyBhbmQgbWVyZ2VzIHRoZW0gYWxsLgorICBQYXRjaCBieSBNYXR0IEpvaW5lci4KKworLSBJc3N1ZSAjMTQyOTE6IEVtYWlsIG5vdyBkZWZhdWx0cyB0byB1dGYtOCBmb3Igbm9uLUFTQ0lJIHVuaWNvZGUgaGVhZGVycworICBpbnN0ZWFkIG9mIHJhaXNpbmcgYW4gZXJyb3IuICBUaGlzIGZpeGVzIGEgcmVncmVzc2lvbiByZWxhdGl2ZSB0byAyLjcuCisKKy0gSXNzdWUgIzk4OTcxMjogU3VwcG9ydCB1c2luZyBUayB3aXRob3V0IGEgbWFpbmxvb3AuCisKKy0gSXNzdWUgIzUyMTk6IFByZXZlbnQgZXZlbnQgaGFuZGxlciBjYXNjYWRlIGluIElETEUuCisKKy0gSXNzdWUgIzM4MzU6IFJlZnVzZSB0byB1c2UgdW50aHJlYWRlZCBUY2wgaW4gdGhyZWFkZWQgUHl0aG9uLgorCistIElzc3VlICMyODQzOiBBZGQgbmV3IFRrIEFQSSB0byBUa2ludGVyLgorCistIElzc3VlICMxNDE4NDogSW5jcmVhc2UgdGhlIGRlZmF1bHQgc3RhY2sgc2l6ZSBmb3Igc2Vjb25kYXJ5IHRocmVhZHMgb24KKyAgTWFjIE9TIFggdG8gYXZvaWQgaW50ZXJwcmV0ZXIgY3Jhc2hlcyB3aGVuIHVzaW5nIHRocmVhZHMgb24gMTAuNy4KKworLSBJc3N1ZSAjMTQxODA6IGRhdGV0aW1lLmRhdGUuZnJvbXRpbWVzdGFtcCgpLAorICBkYXRldGltZS5kYXRldGltZS5mcm9tdGltZXN0YW1wKCkgYW5kIGRhdGV0aW1lLmRhdGV0aW1lLnV0Y2Zyb210aW1lc3RhbXAoKQorICBub3cgcmFpc2UgYW4gT1NFcnJvciBpbnN0ZWFkIG9mIFZhbHVlRXJyb3IgaWYgbG9jYWx0aW1lKCkgb3IgZ210aW1lKCkgZmFpbGVkLgorCistIElzc3VlICMxNDE4MDogdGltZS5jdGltZSgpLCBnbXRpbWUoKSwgdGltZS5sb2NhbHRpbWUoKSwKKyAgZGF0ZXRpbWUuZGF0ZS5mcm9tdGltZXN0YW1wKCksIGRhdGV0aW1lLmRhdGV0aW1lLmZyb210aW1lc3RhbXAoKSBhbmQKKyAgZGF0ZXRpbWUuZGF0ZXRpbWUudXRjZnJvbXRpbWVzdGFtcCgpIG5vdyByYWlzZXMgYW4gT3ZlcmZsb3dFcnJvciwgaW5zdGVhZCBvZgorICBhIFZhbHVlRXJyb3IsIGlmIHRoZSB0aW1lc3RhbXAgZG9lcyBub3QgZml0IGluIHRpbWVfdC4KKworLSBJc3N1ZSAjMTQxODA6IGRhdGV0aW1lLmRhdGV0aW1lLmZyb210aW1lc3RhbXAoKSBhbmQKKyAgZGF0ZXRpbWUuZGF0ZXRpbWUudXRjZnJvbXRpbWVzdGFtcCgpIG5vdyByb3VuZCBtaWNyb3NlY29uZHMgdG93YXJkcyB6ZXJvCisgIGluc3RlYWQgb2Ygcm91bmRpbmcgdG8gbmVhcmVzdCB3aXRoIHRpZXMgZ29pbmcgYXdheSBmcm9tIHplcm8uCisKKy0gSXNzdWUgIzEwNTQzOiBGaXggdW5pdHRlc3QgdGVzdCBkaXNjb3Zlcnkgd2l0aCBKeXRob24gYnl0ZWNvZGUgZmlsZXMuCisKKy0gSXNzdWUgIzExNzg4NjM6IFNlcGFyYXRlIGluaXRpYWxpc2F0aW9uIGZyb20gc2V0dGluZyB3aGVuIGluaXRpYWxpemluZworICBUa2ludGVyLlZhcmlhYmxlczsgaGFybW9uaXplIGV4Y2VwdGlvbnMgdG8gVmFsdWVFcnJvcjsgb25seSBkZWxldGUgdmFyaWFibGVzCisgIHRoYXQgaGF2ZSBub3QgYmVlbiBkZWxldGVkOyBhc3NlcnQgdGhhdCB2YXJpYWJsZSBuYW1lcyBhcmUgc3RyaW5ncy4KKworLSBJc3N1ZSAjMTQxMDQ6IEltcGxlbWVudCB0aW1lLm1vbm90b25pYygpIG9uIE1hYyBPUyBYLCBwYXRjaCB3cml0dGVuIGJ5CisgIE5pY2hvbGFzIFJpbGV5LgorCistIElzc3VlICMxMzM5NDogdGhlIGFpZmMgbW9kdWxlIG5vdyB1c2VzIHdhcm5pbmdzLndhcm4oKSB0byBzaWduYWwgd2FybmluZ3MuCisKKy0gSXNzdWUgIzE0MjUyOiBGaXggc3VicHJvY2Vzcy5Qb3Blbi50ZXJtaW5hdGUoKSB0byBub3QgcmFpc2UgYW4gZXJyb3IgdW5kZXIKKyAgV2luZG93cyB3aGVuIHRoZSBjaGlsZCBwcm9jZXNzIGhhcyBhbHJlYWR5IGV4aXRlZC4KKworLSBJc3N1ZSAjMTQyMjM6IGN1cnNlcy5hZGRjaCgpIGlzIG5vIG1vcmUgbGltaXRlZCB0byB0aGUgcmFuZ2UgMC0yNTUgd2hlbiB0aGUKKyAgUHl0aG9uIGN1cnNlcyBpcyBub3QgbGlua2VkIHRvIGxpYm5jdXJzZXN3LiBJdCB3YXMgYSByZWdyZXNzaW9uIGludHJvZHVjZWQKKyAgaW4gUHl0aG9uIDMuM2ExLgorCistIElzc3VlICMxNDE2ODogQ2hlY2sgZm9yIHByZXNlbmNlIG9mIEVsZW1lbnQuX2F0dHJzIGluIG1pbmlkb20gYmVmb3JlCisgIGFjY2Vzc2luZyBpdC4KKworLSBJc3N1ZSAjMTIzMjg6IEZpeCBtdWx0aXByb2Nlc3NpbmcncyB1c2Ugb2Ygb3ZlcmxhcHBlZCBJL08gb24gV2luZG93cy4KKyAgQWxzbywgYWRkIGEgbXVsdGlwcm9jZXNzaW5nLmNvbm5lY3Rpb24ud2FpdChybGlzdCwgdGltZW91dD1Ob25lKSBmdW5jdGlvbgorICBmb3IgcG9sbGluZyBtdWx0aXBsZSBvYmplY3RzIGF0IG9uY2UuICBQYXRjaCBieSBzYnQuCisKKy0gSXNzdWUgIzE0MDA3OiBBY2NlcHQgaW5jb21wbGV0ZSBUcmVlQnVpbGRlciBvYmplY3RzIChtaXNzaW5nIHN0YXJ0LCBlbmQsCisgIGRhdGEgb3IgY2xvc2UgbWV0aG9kKSBmb3IgdGhlIFB5dGhvbiBpbXBsZW1lbnRhdGlvbiBhcyB3ZWxsLgorICBEcm9wIHRoZSBuby1vcCBUcmVlQnVpbGRlcigpLnhtbCgpIG1ldGhvZCBmcm9tIHRoZSBDIGltcGxlbWVudGF0aW9uLgorCistIElzc3VlICMxNDIxMDogcGRiIG5vdyBoYXMgdGFiLWNvbXBsZXRpb24gbm90IG9ubHkgZm9yIGNvbW1hbmQgbmFtZXMsIGJ1dAorICBhbHNvIGZvciB0aGVpciBhcmd1bWVudHMsIHdoZXJldmVyIHBvc3NpYmxlLgorCistIElzc3VlICMxNDMxMDogU29ja2V0cyBjYW4gbm93IGJlIHdpdGggb3RoZXIgcHJvY2Vzc2VzIG9uIFdpbmRvd3MgdXNpbmcKKyAgdGhlIGFwaSBzb2NrZXQuc29ja2V0LnNoYXJlKCkgYW5kIHNvY2tldC5mcm9tc2hhcmUoKS4KKworLSBJc3N1ZSAjMTA1NzY6IFRoZSBnYyBtb2R1bGUgbm93IGhhcyBhICdjYWxsYmFja3MnIG1lbWJlciB0aGF0IHdpbGwgZ2V0CisgIGNhbGxlZCB3aGVuIGdhcmJhZ2UgY29sbGVjdGlvbiB0YWtlcyBwbGFjZS4KKworQnVpbGQKKy0tLS0tCisKKy0gSXNzdWUgIzE0NTU3OiBGaXggZXh0ZW5zaW9ucyBidWlsZCBvbiBIUC1VWC4gUGF0Y2ggYnkgQWRpIFJvaWJhbi4KKworLSBJc3N1ZSAjMTQzODc6IERvIG5vdCBpbmNsdWRlIGFjY3UuaCBmcm9tIFB5dGhvbi5oLgorCistIElzc3VlICMxNDM1OTogT25seSB1c2UgT19DTE9FWEVDIGluIF9wb3NpeG1vZHVsZS5jIGlmIGl0IGlzIGRlZmluZWQuCisgIEJhc2VkIG9uIHBhdGNoIGZyb20gSGVydsOpIENvYXRhbmhheS4KKworLSBJc3N1ZSAjMTQzMjE6IERvIG5vdCBydW4gcGdlbiBkdXJpbmcgdGhlIGJ1aWxkIGlmIGZpbGVzIGFyZSB1cCB0byBkYXRlLgorCitEb2N1bWVudGF0aW9uCistLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzE0MDM0OiBhZGRlZCB0aGUgYXJncGFyc2UgdHV0b3JpYWwuCisKKy0gSXNzdWUgIzE0MzI0OiBGaXggY29uZmlndXJlIHRlc3RzIGZvciBjcm9zcyBidWlsZHMuCisKKy0gSXNzdWUgIzE0MzI3OiBDYWxsIEFDX0NBTk9OSUNBTF9IT1NUIGluIGNvbmZpZ3VyZS5hYyBhbmQgY2hlY2sgaW4KKyAgY29uZmlnLntndWVzcyxzdWJ9LiBEb24ndCB1c2UgdW5hbWUgY2FsbHMgZm9yIGNyb3NzIGJ1aWxkcy4KKworRXh0ZW5zaW9uIE1vZHVsZXMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzkwNDE6IEFuIGlzc3VlIGluIGN0eXBlcy5jX2xvbmdkb3VibGUsIGN0eXBlcy5jX2RvdWJsZSwgYW5kCisgIGN0eXBlcy5jX2Zsb2F0IHRoYXQgY2F1c2VkIGFuIGluY29ycmVjdCBleGNlcHRpb24gdG8gYmUgcmV0dXJuZWQgaW4gdGhlCisgIGNhc2Ugb2Ygb3ZlcmZsb3cgaGFzIGJlZW4gZml4ZWQuCisKKy0gSXNzdWUgIzE0MjEyOiBUaGUgcmUgbW9kdWxlIGRpZG4ndCByZXRhaW4gYSByZWZlcmVuY2UgdG8gYnVmZmVycyBpdCB3YXMKKyAgc2Nhbm5pbmcsIHJlc3VsdGluZyBpbiBzZWdmYXVsdHMuCisKKy0gSXNzdWUgIzE0MjU5OiBUaGUgZmluZGl0ZXIoKSBtZXRob2Qgb2YgcmUgb2JqZWN0cyBkaWQgbm90IHRha2UgYW55CisgIGtleXdvcmQgYXJndW1lbnRzLCBjb250cmFyeSB0byB0aGUgZG9jdW1lbnRhdGlvbi4KKworLSBJc3N1ZSAjMTAxNDI6IFN1cHBvcnQgZm9yIFNFRUtfSE9MRS9TRUVLX0RBVEEgKGZvciBleGFtcGxlLCB1bmRlciBaRlMpLgorCitUZXN0cworLS0tLS0KKworLSBJc3N1ZSAjMTQ0NDI6IEFkZCBtaXNzaW5nIGVycm5vIGltcG9ydCBpbiB0ZXN0X3NtdHBsaWIuCisKKy0gSXNzdWUgIzgzMTU6IChwYXJ0aWFsIGZpeCkgcHl0aG9uIC1tIHVuaXR0ZXN0IHRlc3QudGVzdF9lbWFpbCBub3cgd29ya3MuCisKKworV2hhdCdzIE5ldyBpbiBQeXRob24gMy4zLjAgQWxwaGEgMT8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKypSZWxlYXNlIGRhdGU6IDA1LU1hci0yMDEyKgorCitDb3JlIGFuZCBCdWlsdGlucworLS0tLS0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTQxNzI6IEZpeCByZWZlcmVuY2UgbGVhayB3aGVuIG1hcnNoYWxsaW5nIGEgYnVmZmVyLWxpa2Ugb2JqZWN0CisgIChvdGhlciB0aGFuIGEgYnl0ZXMgb2JqZWN0KS4KKworLSBJc3N1ZSAjMTM1MjE6IGRpY3Quc2V0ZGVmYXVsdCgpIG5vdyBkb2VzIG9ubHkgb25lIGxvb2t1cCBmb3IgdGhlIGdpdmVuIGtleSwKKyAgbWFraW5nIGl0ICJhdG9taWMiIGZvciBtYW55IHB1cnBvc2VzLiAgUGF0Y2ggYnkgRmlsaXAgR3J1c3pjennFhHNraS4KKworLSBQRVAgNDA5LCBJc3N1ZSAjNjIxMDogInJhaXNlIFggZnJvbSBOb25lIiBpcyBub3cgc3VwcG9ydGVkIGFzIGEgbWVhbnMgb2YKKyAgc3VwcHJlc3NpbmcgdGhlIGRpc3BsYXkgb2YgdGhlIGNoYWluZWQgZXhjZXB0aW9uIGNvbnRleHQuIFRoZSBjaGFpbmVkCisgIGNvbnRleHQgc3RpbGwgcmVtYWlucyBhdmFpbGFibGUgYXMgdGhlIF9fY29udGV4dF9fIGF0dHJpYnV0ZS4KKworLSBJc3N1ZSAjMTAxODE6IE5ldyBtZW1vcnl2aWV3IGltcGxlbWVudGF0aW9uIGZpeGVzIG11bHRpcGxlIG93bmVyc2hpcAorICBhbmQgbGlmZXRpbWUgaXNzdWVzIG9mIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBQeV9idWZmZXIgbWVtYmVycyAoIzk5OTApCisgIGFzIHdlbGwgYXMgY3Jhc2hlcyAoIzgzMDUsICM3NDMzKS4gTWFueSBuZXcgZmVhdHVyZXMgaGF2ZSBiZWVuIGFkZGVkCisgIChTZWUgd2hhdHNuZXcvMy4zKSwgYW5kIHRoZSBkb2N1bWVudGF0aW9uIGhhcyBiZWVuIHVwZGF0ZWQgZXh0ZW5zaXZlbHkuCisgIFRoZSBuZGFycmF5IHRlc3Qgb2JqZWN0IGZyb20gX3Rlc3RidWZmZXIuYyBpbXBsZW1lbnRzIGFsbCBhc3BlY3RzIG9mCisgIFBFUC0zMTE4LCBzbyBmdXJ0aGVyIGRldmVsb3BtZW50IHRvd2FyZHMgdGhlIGNvbXBsZXRlIGltcGxlbWVudGF0aW9uCisgIG9mIHRoZSBQRVAgY2FuIHByb2NlZWQgaW4gYSB0ZXN0LWRyaXZlbiBtYW5uZXIuCisKKyAgVGhhbmtzIHRvIE5pY2sgQ29naGxhbiwgQW50b2luZSBQaXRyb3UgYW5kIFBhdWxpIFZpcnRhbmVuIGZvciByZXZpZXcKKyAgYW5kIG1hbnkgaWRlYXMuCisKKy0gSXNzdWUgIzEyODM0OiBGaXggaW5jb3JyZWN0IHJlc3VsdHMgb2YgbWVtb3J5dmlldy50b2J5dGVzKCkgZm9yCisgIG5vbi1jb250aWd1b3VzIGFycmF5cy4KKworLSBJc3N1ZSAjNTIzMTogSW50cm9kdWNlIG1lbW9yeXZpZXcuY2FzdCgpIG1ldGhvZCB0aGF0IGFsbG93cyBjaGFuZ2luZworICBmb3JtYXQgYW5kIHNoYXBlIHdpdGhvdXQgbWFraW5nIGEgY29weSBvZiB0aGUgdW5kZXJseWluZyBtZW1vcnkuCisKKy0gSXNzdWUgIzE0MDg0OiBGaXggYSBmaWxlIGRlc2NyaXB0b3IgbGVhayB3aGVuIGltcG9ydGluZyBhIG1vZHVsZSB3aXRoIGEKKyAgYmFkIGVuY29kaW5nLgorCistIFVwZ3JhZGUgVW5pY29kZSBkYXRhIHRvIFVuaWNvZGUgNi4xLgorCistIElzc3VlICMxNDA0MDogUmVtb3ZlIHJhcmVseSB1c2VkIGZpbGUgbmFtZSBzdWZmaXhlcyBmb3IgQyBleHRlbnNpb25zCisgICh1bmRlciBQT1NJWCBtYWlubHkpLgorCistIElzc3VlICMxNDA1MTogQWxsb3cgYXJiaXRyYXJ5IGF0dHJpYnV0ZXMgdG8gYmUgc2V0IG9mIGNsYXNzbWV0aG9kIGFuZAorICBzdGF0aWNtZXRob2QuCisKKy0gSXNzdWUgIzEzNzAzOiBvQ0VSVC0yMDExLTAwMzogUmFuZG9taXplIGhhc2hlcyBvZiBzdHIgYW5kIGJ5dGVzIHRvIHByb3RlY3QKKyAgYWdhaW5zdCBkZW5pYWwgb2Ygc2VydmljZSBhdHRhY2tzIGR1ZSB0byBoYXNoIGNvbGxpc2lvbnMgd2l0aGluIHRoZSBkaWN0IGFuZAorICBzZXQgdHlwZXMuICBQYXRjaCBieSBEYXZpZCBNYWxjb2xtLCBiYXNlZCBvbiB3b3JrIGJ5IFZpY3RvciBTdGlubmVyLgorCistIElzc3VlICMxMzAyMDogRml4IGEgcmVmZXJlbmNlIGxlYWsgd2hlbiBhbGxvY2F0aW5nIGEgc3RydWN0c2VxdWVuY2Ugb2JqZWN0CisgIGZhaWxzLiAgUGF0Y2ggYnkgU3VtYW4gU2FoYS4KKworLSBJc3N1ZSAjMTM5MDg6IFJlYWR5IHR5cGVzIHJldHVybmVkIGZyb20gUHlUeXBlX0Zyb21TcGVjLgorCistIElzc3VlICMxMTIzNTogRml4IE92ZXJmbG93RXJyb3Igd2hlbiB0cnlpbmcgdG8gaW1wb3J0IGEgc291cmNlIGZpbGUgd2hvc2UKKyAgbW9kaWZpY2F0aW9uIHRpbWUgZG9lc24ndCBmaXQgaW4gYSAzMi1iaXQgdGltZXN0YW1wLgorCistIElzc3VlICMxMjcwNTogQSBTeW50YXhFcnJvciBleGNlcHRpb24gaXMgbm93IHJhaXNlZCB3aGVuIGF0dGVtcHRpbmcgdG8KKyAgY29tcGlsZSBtdWx0aXBsZSBzdGF0ZW1lbnRzIGFzIGEgc2luZ2xlIGludGVyYWN0aXZlIHN0YXRlbWVudC4KKworLSBGaXggdGhlIGJ1aWx0aW4gbW9kdWxlIGluaXRpYWxpemF0aW9uIGNvZGUgdG8gc3RvcmUgdGhlIGluaXQgZnVuY3Rpb24gZm9yCisgIGZ1dHVyZSByZWluaXRpYWxpemF0aW9uLgorCistIElzc3VlICM4MDUyOiBUaGUgcG9zaXggc3VicHJvY2VzcyBtb2R1bGUgd291bGQgdGFrZSBhIGxvbmcgdGltZSBjbG9zaW5nCisgIGFsbCBwb3NzaWJsZSBmaWxlIGRlc2NyaXB0b3JzIGluIHRoZSBjaGlsZCBwcm9jZXNzIHJhdGhlciB0aGFuIGp1c3Qgb3BlbgorICBmaWxlIGRlc2NyaXB0b3JzLiAgSXQgbm93IGNsb3NlcyBvbmx5IHRoZSBvcGVuIGZkcyBpZiBwb3NzaWJsZSBmb3IgdGhlCisgIGRlZmF1bHQgY2xvc2VfZmRzPVRydWUgYmVoYXZpb3IuCisKKy0gSXNzdWUgIzEzNjI5OiBSZW51bWJlciB0aGUgdG9rZW5zIGluIHRva2VuLmggc28gdGhhdCB0aGV5IG1hdGNoIHRoZSBpbmRleGVzCisgIGludG8gX1B5UGFyc2VyX1Rva2VuTmFtZXMuCisKKy0gSXNzdWUgIzEzNzUyOiBBZGQgYSBjYXNlZm9sZCgpIG1ldGhvZCB0byBzdHIuCisKKy0gSXNzdWUgIzEzNzYxOiBBZGQgYSAiZmx1c2giIGtleXdvcmQgYXJndW1lbnQgdG8gdGhlIHByaW50KCkgZnVuY3Rpb24sCisgIHVzZWQgdG8gZW5zdXJlIGZsdXNoaW5nIHRoZSBvdXRwdXQgc3RyZWFtLgorCistIElzc3VlICMxMzY0NTogcHljIGZpbGVzIG5vdyBjb250YWluIHRoZSBzaXplIG9mIHRoZSBjb3JyZXNwb25kaW5nIHNvdXJjZQorICBjb2RlLCB0byBhdm9pZCB0aW1lc3RhbXAgY29sbGlzaW9ucyAoZXNwZWNpYWxseSBvbiBmaWxlc3lzdGVtcyB3aXRoIGEgbG93CisgIHRpbWVzdGFtcCByZXNvbHV0aW9uKSB3aGVuIGNoZWNraW5nIGZvciBmcmVzaG5lc3Mgb2YgdGhlIGJ5dGVjb2RlLgorCistIFBFUCAzODAsIElzc3VlICMxMTY4MjogQWRkICJ5aWVsZCBmcm9tIDx4PiIgdG8gc3VwcG9ydCBlYXN5IGRlbGVnYXRpb24gdG8KKyAgc3ViZ2VuZXJhdG9ycyAoaW5pdGlhbCBwYXRjaCBieSBHcmVnIEV3aW5nLCBpbnRlZ3JhdGlvbiBpbnRvIDMuMyBieQorICBSZW5hdWQgQmxhbmNoLCBSeWFuIEtlbGx5LCBaYmlnbmlldyBKxJlkcnplamV3c2tpLVN6bWVrIGFuZCBOaWNrIENvZ2hsYW4pCisKKy0gSXNzdWUgIzEzNzQ4OiBSYXcgYnl0ZXMgbGl0ZXJhbHMgY2FuIG5vdyBiZSB3cml0dGVuIHdpdGggdGhlIGBgcmJgYCBwcmVmaXgKKyAgYXMgd2VsbCBhcyBgYGJyYGAuCisKKy0gSXNzdWUgIzEyNzM2OiBVc2UgZnVsbCB1bmljb2RlIGNhc2UgbWFwcGluZ3MgZm9yIHVwcGVyLCBsb3dlciwgYW5kIHRpdGxlIGNhc2UuCisKKy0gSXNzdWUgIzEyNzYwOiBBZGQgYSBjcmVhdGUgbW9kZSB0byBvcGVuKCkuIFBhdGNoIGJ5IERhdmlkIFRvd25zaGVuZC4KKworLSBJc3N1ZSAjMTM3Mzg6IFNpbXBsaWZ5IGltcGxlbWVudGF0aW9uIG9mIGJ5dGVzLmxvd2VyKCkgYW5kIGJ5dGVzLnVwcGVyKCkuCisKKy0gSXNzdWUgIzEzNTc3OiBCdWlsdC1pbiBtZXRob2RzIGFuZCBmdW5jdGlvbnMgbm93IGhhdmUgYSBfX3F1YWxuYW1lX18uCisgIFBhdGNoIGJ5IHNidC4KKworLSBJc3N1ZSAjNjY5NTogRnVsbCBnYXJiYWdlIGNvbGxlY3Rpb24gcnVucyBub3cgY2xlYXIgdGhlIGZyZWVsaXN0IG9mIHNldAorICBvYmplY3RzLiAgSW5pdGlhbCBwYXRjaCBieSBNYXR0aGlhcyBUcm9mZmFlcy4KKworLSBGaXggT1NFcnJvci5fX2luaXRfXyBhbmQgT1NFcnJvci5fX25ld19fIHNvIHRoYXQgZWFjaCBvZiB0aGVtIGNhbiBiZQorICBvdmVycmlkZW4gYW5kIHRha2UgYWRkaXRpb25hbCBhcmd1bWVudHMgKGZvbGxvd3VwIHRvIGlzc3VlICMxMjU1NSkuCisKKy0gRml4IHRoZSBmaXggZm9yIGlzc3VlICMxMjE0OTogaXQgd2FzIGluY29ycmVjdCwgYWx0aG91Z2ggaXQgaGFkIHRoZSBzaWRlCisgIGVmZmVjdCBvZiBhcHBlYXJpbmcgdG8gcmVzb2x2ZSB0aGUgaXNzdWUuICBUaGFua3MgdG8gTWFyayBTaGFubm9uIGZvcgorICBub3RpY2luZy4KKworLSBJc3N1ZSAjMTM1MDU6IFBpY2tsZSBieXRlcyBvYmplY3RzIGluIGEgd2F5IHRoYXQgaXMgY29tcGF0aWJsZSB3aXRoCisgIFB5dGhvbiAyIHdoZW4gdXNpbmcgcHJvdG9jb2xzIDw9IDIuCisKKy0gSXNzdWUgIzExMTQ3OiBGaXggYW4gdW51c2VkIGFyZ3VtZW50IGluIF9QeV9BTk5PVEFURV9NRU1PUllfT1JERVIuICAoRml4CisgIGdpdmVuIGJ5IENhbXBiZWxsIEJhcnRvbikuCisKKy0gSXNzdWUgIzEzNTAzOiBVc2UgYSBtb3JlIGVmZmljaWVudCByZWR1Y3Rpb24gZm9ybWF0IGZvciBieXRlYXJyYXlzIHdpdGgKKyAgcGlja2xlIHByb3RvY29sID49IDMuICBUaGUgb2xkIHJlZHVjdGlvbiBmb3JtYXQgaXMga2VwdCB3aXRoIG9sZGVyIHByb3RvY29scworICBpbiBvcmRlciB0byBhbGxvdyB1bnBpY2tsaW5nIHVuZGVyIFB5dGhvbiAyLiAgUGF0Y2ggYnkgSXJtZW4gZGUgSm9uZy4KKworLSBJc3N1ZSAjNzExMTogUHl0aG9uIGNhbiBub3cgYmUgcnVuIHdpdGhvdXQgYSBzdGRpbiwgc3Rkb3V0IG9yIHN0ZGVycgorICBzdHJlYW0uICBJdCB3YXMgYWxyZWFkeSB0aGUgY2FzZSB3aXRoIFB5dGhvbiAyLiAgSG93ZXZlciwgdGhlIGNvcnJlc3BvbmRpbmcKKyAgc3lzIG1vZHVsZSBlbnRyaWVzIGFyZSBub3cgc2V0IHRvIE5vbmUgKGluc3RlYWQgb2YgYW4gdW51c2FibGUgZmlsZSBvYmplY3QpLgorCistIElzc3VlICMxMTg0OTogRW5zdXJlIHRoYXQgZnJlZSgpZCBtZW1vcnkgYXJlbmFzIGFyZSByZWFsbHkgcmVsZWFzZWQKKyAgb24gUE9TSVggc3lzdGVtcyBzdXBwb3J0aW5nIGFub255bW91cyBtZW1vcnkgbWFwcGluZ3MuICBQYXRjaCBieQorICBDaGFybGVzLUZyYW7Dp29pcyBOYXRhbGkuCisKKy0gSXNzdWUgIzEzNDUyOiBQeVVuaWNvZGVfRW5jb2RlRGVjaW1hbCgpIGRvZXNuJ3Qgc3VwcG9ydCBlcnJvciBoYW5kbGVycworICBkaWZmZXJlbnQgdGhhbiAic3RyaWN0IiBhbnltb3JlLiBUaGUgY2FsbGVyIHdhcyB1bmFibGUgdG8gY29tcHV0ZSB0aGUKKyAgc2l6ZSBvZiB0aGUgb3V0cHV0IGJ1ZmZlcjogaXQgZGVwZW5kcyBvbiB0aGUgZXJyb3IgaGFuZGxlci4KKworLSBQRVAgMzE1NSAvIGlzc3VlICMxMzQ0ODogUXVhbGlmaWVkIG5hbWUgZm9yIGNsYXNzZXMgYW5kIGZ1bmN0aW9ucy4KKworLSBJc3N1ZSAjMTM0MzY6IEZpeCBhIGJvZ3VzIGVycm9yIG1lc3NhZ2Ugd2hlbiBhbiBBU1Qgb2JqZWN0IHdhcyBwYXNzZWQKKyAgYW4gaW52YWxpZCBpbnRlZ2VyIHZhbHVlLgorCistIElzc3VlICMxMzQxMTogbWVtb3J5dmlldyBvYmplY3RzIGFyZSBub3cgaGFzaGFibGUgd2hlbiB0aGUgdW5kZXJseWluZworICBvYmplY3QgaXMgaGFzaGFibGUuCisKKy0gSXNzdWUgIzEzMzM4OiBIYW5kbGUgYWxsIGVudW1lcmF0aW9ucyBpbiBfUHlfQU5OT1RBVEVfTUVNT1JZX09SREVSCisgIHRvIGFsbG93IGNvbXBpbGluZyBleHRlbnNpb24gbW9kdWxlcyB3aXRoIC1Xc3dpdGNoLWVudW0gb24gZ2NjLgorICBJbml0aWFsIHBhdGNoIGJ5IEZsb3JpcyBCcnV5bm9vZ2hlLgorCistIElzc3VlICMxMDIyNzogQWRkIGFuIGFsbG9jYXRpb24gY2FjaGUgZm9yIGEgc2luZ2xlIHNsaWNlIG9iamVjdC4gIFBhdGNoIGJ5CisgIFN0ZWZhbiBCZWhuZWwuCisKKy0gSXNzdWUgIzEzMzkzOiBCdWZmZXJlZFJlYWRlci5yZWFkMSgpIG5vdyBhc2tzIHRoZSBmdWxsIHJlcXVlc3RlZCBzaXplIHRvCisgIHRoZSByYXcgc3RyZWFtIGluc3RlYWQgb2YgbGltaXRpbmcgaXRzZWxmIHRvIHRoZSBidWZmZXIgc2l6ZS4KKworLSBJc3N1ZSAjMTMzOTI6IFdyaXRpbmcgYSBweWMgZmlsZSBzaG91bGQgbm93IGJlIGF0b21pYyB1bmRlciBXaW5kb3dzIGFzIHdlbGwuCisKKy0gSXNzdWUgIzEzMzMzOiBUaGUgVVRGLTcgZGVjb2RlciBub3cgYWNjZXB0cyBsb25lIHN1cnJvZ2F0ZXMgKHRoZSBlbmNvZGVyCisgIGFscmVhZHkgYWNjZXB0cyB0aGVtKS4KKworLSBJc3N1ZSAjMTMzODk6IEZ1bGwgZ2FyYmFnZSBjb2xsZWN0aW9uIHBhc3NlcyBub3cgY2xlYXIgdGhlIGZyZWVsaXN0cyBmb3IKKyAgbGlzdCBhbmQgZGljdCBvYmplY3RzLiAgVGhleSBhbHJlYWR5IGNsZWFyZWQgb3RoZXIgZnJlZWxpc3RzIGluIHRoZQorICBpbnRlcnByZXRlci4KKworLSBJc3N1ZSAjMTMzMjc6IFJlbW92ZSB0aGUgbmVlZCBmb3IgYW4gZXhwbGljaXQgTm9uZSBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50CisgIHRvIG9zLnV0aW1lLCBvcy5sdXRpbWVzLCBvcy5mdXRpbWVzLCBvcy5mdXRpbWVucywgb3MuZnV0aW1lc2F0LCBpbgorICBvcmRlciB0byB1cGRhdGUgdG8gdGhlIGN1cnJlbnQgdGltZS4gQWxzbyBhZGRlZCBrZXl3b3JkIGFyZ3VtZW50CisgIGhhbmRsaW5nIHRvIG9zLnV0aW1lbnNhdCBpbiBvcmRlciB0byByZW1vdmUgdGhlIG5lZWQgZm9yIGV4cGxpY2l0IE5vbmUuCisKKy0gSXNzdWUgIzEzMzUwOiBTaW1wbGlmeSBzb21lIEMgY29kZSBieSByZXBsYWNpbmcgbW9zdCB1c2FnZXMgb2YKKyAgUHlVbmljb2RlX0Zvcm1hdCBieSBQeVVuaWNvZGVfRnJvbUZvcm1hdC4KKworLSBJc3N1ZSAjMTMzNDI6IGlucHV0KCkgdXNlZCB0byBpZ25vcmUgc3lzLnN0ZGluJ3MgYW5kIHN5cy5zdGRvdXQncyB1bmljb2RlCisgIGVycm9yIGhhbmRsZXIgaW4gaW50ZXJhY3RpdmUgbW9kZSAod2hlbiBjYWxsaW5nIGludG8gUHlPU19SZWFkbGluZSgpKS4KKworLSBJc3N1ZSAjOTg5NjogQWRkIHN0YXJ0LCBzdG9wLCBhbmQgc3RlcCBhdHRyaWJ1dGVzIHRvIHJhbmdlIG9iamVjdHMuCisKKy0gSXNzdWUgIzEzMzQzOiBGaXggYSBTeXN0ZW1FcnJvciB3aGVuIGEgbGFtYmRhIGV4cHJlc3Npb24gdXNlcyBhIGdsb2JhbAorICB2YXJpYWJsZSBpbiB0aGUgZGVmYXVsdCB2YWx1ZSBvZiBhIGtleXdvcmQtb25seSBhcmd1bWVudDogYGBsYW1iZGEgKiwKKyAgYXJnPUdMT0JBTF9OQU1FOiBOb25lYGAKKworLSBJc3N1ZSAjMTI3OTc6IEFkZGVkIGN1c3RvbSBvcGVuZXIgcGFyYW1ldGVyIHRvIGJ1aWx0aW4gb3BlbigpIGFuZAorICBGaWxlSU8ub3BlbigpLgorCistIElzc3VlICMxMDUxOTogQXZvaWQgdW5uZWNlc3NhcnkgcmVjdXJzaXZlIGZ1bmN0aW9uIGNhbGxzIGluCisgIHNldG9iamVjdC5jLgorCistIElzc3VlICMxMDM2MzogRGVhbGxvY2F0ZSBnbG9iYWwgbG9ja3MgaW4gUHlfRmluYWxpemUoKS4KKworLSBJc3N1ZSAjMTMwMTg6IEZpeCByZWZlcmVuY2UgbGVha3MgaW4gZXJyb3IgcGF0aHMgaW4gZGljdG9iamVjdC5jLgorICBQYXRjaCBieSBTdW1hbiBTYWhhLgorCistIElzc3VlICMxMzIwMTogRGVmaW5lICc9PScgYW5kICchPScgdG8gY29tcGFyZSByYW5nZSBvYmplY3RzIGJhc2VkIG9uCisgIHRoZSBzZXF1ZW5jZSBvZiB2YWx1ZXMgdGhleSBkZWZpbmUgKGluc3RlYWQgb2YgY29tcGFyaW5nIGJhc2VkIG9uCisgIG9iamVjdCBpZGVudGl0eSkuCisKKy0gSXNzdWUgIzEyOTQyMzI6IEluIGEgZmV3IGNhc2VzIGludm9sdmluZyBtZXRhY2xhc3MgaW5oZXJpdGFuY2UsIHRoZQorICBpbnRlcnByZXRlciB3b3VsZCBzb21ldGltZXMgaW52b2tlIHRoZSB3cm9uZyBtZXRhY2xhc3Mgd2hlbiBidWlsZGluZyBhIG5ldworICBjbGFzcyBvYmplY3QuIFRoZXNlIGNhc2VzIG5vdyBiZWhhdmUgY29ycmVjdGx5LiBQYXRjaCBieSBEYW5pZWwgVXJiYW4uCisKKy0gSXNzdWUgIzEyNzUzOiBBZGQgc3VwcG9ydCBmb3IgVW5pY29kZSBuYW1lIGFsaWFzZXMgYW5kIG5hbWVkIHNlcXVlbmNlcy4KKyAgQm90aCBgYHVuaWNvZGVkYXRhLmxvb2t1cCgpYGAgYW5kICdcTnsuLi59JyBub3cgcmVzb2x2ZSBhbGlhc2VzLAorICBhbmQgYGB1bmljb2RlZGF0YS5sb29rdXAoKWBgIHJlc29sdmVzIG5hbWVkIHNlcXVlbmNlcyB0b28uCisKKy0gSXNzdWUgIzEyMTcwOiBUaGUgY291bnQoKSwgZmluZCgpLCByZmluZCgpLCBpbmRleCgpIGFuZCByaW5kZXgoKSBtZXRob2RzCisgIG9mIGJ5dGVzIGFuZCBieXRlYXJyYXkgb2JqZWN0cyBub3cgYWNjZXB0IGFuIGludGVnZXIgYmV0d2VlbiAwIGFuZCAyNTUKKyAgYXMgdGhlaXIgZmlyc3QgYXJndW1lbnQuICBQYXRjaCBieSBQZXRyaSBMZWh0aW5lbi4KKworLSBJc3N1ZSAjMTI2MDQ6IFZUUkFDRSBtYWNybyBleHBhbmRlZCB0byBuby1vcCBpbiBfc3JlLmMgdG8gYXZvaWQgY29tcGlsZXIKKyAgd2FybmluZ3MuIFBhdGNoIGJ5IEpvc2ggVHJpcGxldHQgYW5kIFBldHJpIExlaHRpbmVuLgorCistIElzc3VlICMxMjI4MTogUmV3cml0ZSB0aGUgTUJDUyBjb2RlYyB0byBoYW5kbGUgY29ycmVjdGx5IHJlcGxhY2UgYW5kIGlnbm9yZQorICBlcnJvciBoYW5kbGVycyBvbiBhbGwgV2luZG93cyB2ZXJzaW9ucy4gVGhlIE1CQ1MgY29kZWMgaXMgbm93IHN1cHBvcnRpbmcgYWxsCisgIGVycm9yIGhhbmRsZXJzLCBpbnN0ZWFkIG9mIG9ubHkgcmVwbGFjZSB0byBlbmNvZGUgYW5kIGlnbm9yZSB0byBkZWNvZGUuCisKKy0gSXNzdWUgIzEzMTg4OiBXaGVuIGNhbGxlZCB3aXRob3V0IGFuIGV4cGxpY2l0IHRyYWNlYmFjayBhcmd1bWVudCwKKyAgZ2VuZXJhdG9yLnRocm93KCkgbm93IGdldHMgdGhlIHRyYWNlYmFjayBmcm9tIHRoZSBwYXNzZWQgZXhjZXB0aW9uJ3MKKyAgYGBfX3RyYWNlYmFja19fYGAgYXR0cmlidXRlLiAgUGF0Y2ggYnkgUGV0cmkgTGVodGluZW4uCisKKy0gSXNzdWUgIzEzMTQ2OiBXcml0aW5nIGEgcHljIGZpbGUgaXMgbm93IGF0b21pYyB1bmRlciBQT1NJWC4KKworLSBJc3N1ZSAjNzgzMzogRXh0ZW5zaW9uIG1vZHVsZXMgYnVpbHQgdXNpbmcgZGlzdHV0aWxzIG9uIFdpbmRvd3Mgd2lsbCBubworICBsb25nZXIgaW5jbHVkZSBhICJtYW5pZmVzdCIgdG8gcHJldmVudCB0aGVtIGZhaWxpbmcgYXQgaW1wb3J0IHRpbWUgaW4gc29tZQorICBlbWJlZGRlZCBzaXR1YXRpb25zLgorCistIFBFUCAzMTUxIC8gaXNzdWUgIzEyNTU1OiByZXdvcmtpbmcgdGhlIE9TIGFuZCBJTyBleGNlcHRpb24gaGllcmFyY2h5LgorCistIElzc3VlICMxMzU2MDogQWRkIFB5VW5pY29kZV9EZWNvZGVMb2NhbGUoKSwgUHlVbmljb2RlX0RlY29kZUxvY2FsZUFuZFNpemUoKQorICBhbmQgUHlVbmljb2RlX0VuY29kZUxvY2FsZSgpIGZ1bmN0aW9ucyB0byB0aGUgQyBBUEkgdG8gZGVjb2RlL2VuY29kZSBmcm9tL3RvCisgIHRoZSBjdXJyZW50IGxvY2FsZSBlbmNvZGluZy4KKworLSBBZGQgaW50ZXJuYWwgQVBJIGZvciBzdGF0aWMgc3RyaW5ncyAoX1B5X2lkZW50aWZpZXIgZXQgYWwuKS4KKworLSBJc3N1ZSAjMTMwNjM6IHRoZSBXaW5kb3dzIGVycm9yIEVSUk9SX05PX0RBVEEgKG51bWJlcmVkIDIzMiBhbmQgZGVzY3JpYmVkCisgIGFzICJUaGUgcGlwZSBpcyBiZWluZyBjbG9zZWQiKSBpcyBub3cgbWFwcGVkIHRvIFBPU0lYIGVycm5vIEVQSVBFCisgIChwcmV2aW91c2x5IEVJTlZBTCkuCisKKy0gSXNzdWUgIzEyOTExOiBGaXggbWVtb3J5IGNvbnN1bXB0aW9uIHdoZW4gY2FsY3VsYXRpbmcgdGhlIHJlcHIoKSBvZiBodWdlCisgIHR1cGxlcyBvciBsaXN0cy4KKworLSBQRVAgMzkzOiBmbGV4aWJsZSBzdHJpbmcgcmVwcmVzZW50YXRpb24uIFRoYW5rcyB0byBUb3JzdGVuIEJlY2tlciBmb3IgdGhlCisgIGluaXRpYWwgaW1wbGVtZW50YXRpb24sIGFuZCBWaWN0b3IgU3Rpbm5lciBmb3IgdmFyaW91cyBidWcgZml4ZXMuCisKKy0gSXNzdWUgIzE0MDgxOiBUaGUgJ3NlcCcgYW5kICdtYXhzcGxpdCcgcGFyYW1ldGVyIHRvIHN0ci5zcGxpdCwgYnl0ZXMuc3BsaXQsCisgIGFuZCBieXRlYXJyYXkuc3BsaXQgbWF5IG5vdyBiZSBwYXNzZWQgYXMga2V5d29yZCBhcmd1bWVudHMuCisKKy0gSXNzdWUgIzEzMDEyOiBUaGUgJ2tlZXBlbmRzJyBwYXJhbWV0ZXIgdG8gc3RyLnNwbGl0bGluZXMgbWF5IG5vdyBiZSBwYXNzZWQKKyAgYXMgYSBrZXl3b3JkIGFyZ3VtZW50OiAgIm15X3N0cmluZy5zcGxpdGxpbmVzKGtlZXBlbmRzPVRydWUpIi4gIFRoZSBzYW1lCisgIGNoYW5nZSBhbHNvIGFwcGxpZXMgdG8gYnl0ZXMuc3BsaXRsaW5lcyBhbmQgYnl0ZWFycmF5LnNwbGl0bGluZXMuCisKKy0gSXNzdWUgIzc3MzI6IERvbid0IG9wZW4gYSBkaXJlY3RvcnkgYXMgYSBmaWxlIGFueW1vcmUgd2hpbGUgaW1wb3J0aW5nIGEKKyAgbW9kdWxlLiBJZ25vcmUgdGhlIGRpcmVjdG9yeSBpZiBpdHMgbmFtZSBtYXRjaGVzIHRoZSBtb2R1bGUgbmFtZSAoZS5nLgorICAiX19pbml0X18ucHkiKSBhbmQgcmFpc2UgYW4gSW1wb3J0RXJyb3IgaW5zdGVhZC4KKworLSBJc3N1ZSAjMTMwMjE6IE1pc3NpbmcgZGVjcmVmIG9uIGFuIGVycm9yIHBhdGguICBUaGFua3MgdG8gU3VtYW4gU2FoYSBmb3IKKyAgZmluZGluZyB0aGUgYnVnIGFuZCBwcm92aWRpbmcgYSBwYXRjaC4KKworLSBJc3N1ZSAjMTI5NzM6IEZpeCBvdmVyZmxvdyBjaGVja3MgdGhhdCByZWxpZWQgb24gdW5kZWZpbmVkIGJlaGF2aW91ciBpbgorICBsaXN0X3JlcGVhdCAobGlzdG9iamVjdC5jKSBhbmQgaXNsaWNlX25leHQgKGl0ZXJ0b29sc21vZHVsZS5jKS4gIFRoZXNlIGJ1Z3MKKyAgY2F1c2VkIHRlc3QgZmFpbHVyZXMgd2l0aCByZWNlbnQgdmVyc2lvbnMgb2YgQ2xhbmcuCisKKy0gSXNzdWUgIzEyOTA0OiBvcy51dGltZSwgb3MuZnV0aW1lcywgb3MubHV0aW1lcywgYW5kIG9zLmZ1dGltZXNhdCBub3cgd3JpdGUKKyAgYXRpbWUgYW5kIG10aW1lIHdpdGggbmFub3NlY29uZCBwcmVjaXNpb24gb24gbW9kZXJuIFBPU0lYIHBsYXRmb3Jtcy4KKworLSBJc3N1ZSAjMTI4MDI6IHRoZSBXaW5kb3dzIGVycm9yIEVSUk9SX0RJUkVDVE9SWSAobnVtYmVyZWQgMjY3KSBpcyBub3cKKyAgbWFwcGVkIHRvIFBPU0lYIGVycm5vIEVOT1RESVIgKHByZXZpb3VzbHkgRUlOVkFMKS4KKworLSBJc3N1ZSAjOTIwMDogVGhlIHN0ci5pcyogbWV0aG9kcyBub3cgd29yayB3aXRoIHN0cmluZ3MgdGhhdCBjb250YWluIG5vbi1CTVAKKyAgY2hhcmFjdGVycyBldmVuIGluIG5hcnJvdyBVbmljb2RlIGJ1aWxkcy4KKworLSBJc3N1ZSAjMTI3OTE6IEJyZWFrIHJlZmVyZW5jZSBjeWNsZXMgZWFybHkgd2hlbiBhIGdlbmVyYXRvciBleGl0cyB3aXRoCisgIGFuIGV4Y2VwdGlvbi4KKworLSBJc3N1ZSAjMTI3NzM6IE1ha2UgX19kb2NfXyBtdXRhYmxlIG9uIHVzZXItZGVmaW5lZCBjbGFzc2VzLgorCistIElzc3VlICMxMjc2NjogUmFpc2UgYSBWYWx1ZUVycm9yIHdoZW4gY3JlYXRpbmcgYSBjbGFzcyB3aXRoIGEgY2xhc3MgdmFyaWFibGUKKyAgdGhhdCBjb25mbGljdHMgd2l0aCBhIG5hbWUgaW4gX19zbG90c19fLgorCistIElzc3VlICMxMjI2NjogRml4IHN0ci5jYXBpdGFsaXplKCkgdG8gY29ycmVjdGx5IHVwcGVyY2FzZS9sb3dlcmNhc2UKKyAgdGl0bGVjYXNlZCBhbmQgY2FzZWQgbm9uLWxldHRlciBjaGFyYWN0ZXJzLgorCistIElzc3VlICMxMjczMjogSW4gbmFycm93IHVuaWNvZGUgYnVpbGRzLCBhbGxvdyBVbmljb2RlIGlkZW50aWZpZXJzIHdoaWNoIGZhbGwKKyAgb3V0c2lkZSB0aGUgQk1QLgorCistIElzc3VlICMxMjU3NTogVmFsaWRhdGUgdXNlci1nZW5lcmF0ZWQgQVNUIGJlZm9yZSBpdCBpcyBjb21waWxlZC4KKworLSBNYWtlIHR5cGUoTm9uZSksIHR5cGUoRWxsaXBzaXMpLCBhbmQgdHlwZShOb3RJbXBsZW1lbnRlZCkgY2FsbGFibGUuIFRoZXkKKyAgcmV0dXJuIHRoZSByZXNwZWN0aXZlIHNpbmdsZXRvbiBpbnN0YW5jZXMuCisKKy0gRm9yYmlkIHN1bW1pbmcgYnl0ZXMgd2l0aCBzdW0oKS4KKworLSBWZXJpZnkgdGhlIHR5cGVzIG9mIEFTVCBzdHJpbmdzIGFuZCBpZGVudGlmaWVycyBwcm92aWRlZCBieSB0aGUgdXNlciBiZWZvcmUKKyAgY29tcGlsaW5nIHRoZW0uCisKKy0gSXNzdWUgIzEyNjQ3OiBUaGUgTm9uZSBvYmplY3Qgbm93IGhhcyBhIF9fYm9vbF9fKCkgbWV0aG9kIHRoYXQgcmV0dXJucyBGYWxzZS4KKyAgRm9ybWVybHksIGJvb2woTm9uZSkgcmV0dXJuZWQgRmFsc2Ugb25seSBiZWNhdXNlIG9mIHNwZWNpYWwgY2FzZSBsb2dpYworICBpbiBQeU9iamVjdF9Jc1RydWUoKS4KKworLSBJc3N1ZSAjMTI1Nzk6IHN0ci5mb3JtYXRfbWFwKCkgbm93IHJhaXNlcyBhIFZhbHVlRXJyb3IgaWYgdXNlZCBvbiBhCisgIGZvcm1hdCBzdHJpbmcgdGhhdCBjb250YWlucyBwb3NpdGlvbmFsIGZpZWxkcy4gSW5pdGlhbCBwYXRjaCBieQorICBKdWxpYW4gQmVybWFuLgorCistIElzc3VlICMxMDI3MTogQWxsb3cgd2FybmluZ3Muc2hvd3dhcm5pbmcoKSBiZSBhbnkgY2FsbGFibGUuCisKKy0gSXNzdWUgIzExNjI3OiBGaXggc2VnZmF1bHQgd2hlbiBfX25ld19fIG9uIGFuIGV4Y2VwdGlvbiByZXR1cm5zIGEKKyAgbm9uLWV4Y2VwdGlvbiBjbGFzcy4KKworLSBJc3N1ZSAjMTIxNDk6IFVwZGF0ZSB0aGUgbWV0aG9kIGNhY2hlIGFmdGVyIGEgdHlwZSdzIGRpY3Rpb25hcnkgZ2V0cworICBjbGVhcmVkIGJ5IHRoZSBnYXJiYWdlIGNvbGxlY3Rvci4gIFRoaXMgZml4ZXMgYSBzZWdmYXVsdCB3aGVuIGFuIGluc3RhbmNlCisgIGFuZCBpdHMgdHlwZSBnZXQgY2F1Z2h0IGluIGEgcmVmZXJlbmNlIGN5Y2xlLCBhbmQgdGhlIGluc3RhbmNlJ3MKKyAgZGVhbGxvY2F0b3IgY2FsbHMgb25lIG9mIHRoZSBtZXRob2RzIG9uIHRoZSB0eXBlIChlLmcuIHdoZW4gc3ViY2xhc3NpbmcKKyAgSU9CYXNlKS4gIERpYWdub3NpcyBhbmQgcGF0Y2ggYnkgRGF2aWRlIFJpenpvLgorCistIElzc3VlICM5NjExLCAjOTAxNTogRmlsZUlPLnJlYWQoKSBjbGFtcHMgdGhlIGxlbmd0aCB0byBJTlRfTUFYIG9uIFdpbmRvd3MuCisKKy0gSXNzdWUgIzk2NDI6IFVuaWZvcm1pemUgdGhlIHRlc3RzIG9uIHRoZSBhdmFpbGFiaWxpdHkgb2YgdGhlIG1iY3MgY29kZWMsIGFkZAorICBhIG5ldyBIQVZFX01CQ1MgZGVmaW5lLgorCistIElzc3VlICM5NjQyOiBGaXggZmlsZXN5c3RlbSBlbmNvZGluZyBpbml0aWFsaXphdGlvbjogdXNlIHRoZSBBTlNJIGNvZGUgcGFnZQorICBvbiBXaW5kb3dzIGlmIHRoZSBtYmNzIGNvZGVjIGlzIG5vdCBhdmFpbGFibGUsIGFuZCBmYWlsIHdpdGggYSBmYXRhbCBlcnJvciBpZgorICB3ZSBjYW5ub3QgZ2V0IHRoZSBsb2NhbGUgZW5jb2RpbmcgKGlmIG5sX2xhbmdpbmZvKENPREVTRVQpIGlzIG5vdCBhdmFpbGFibGUpCisgIGluc3RlYWQgb2YgdXNpbmcgVVRGLTguCisKKy0gV2hlbiBhIGdlbmVyYXRvciB5aWVsZHMsIGRvIG5vdCByZXRhaW4gdGhlIGNhbGxlcidzIGV4Y2VwdGlvbiBzdGF0ZSBvbiB0aGUKKyAgZ2VuZXJhdG9yLgorCistIElzc3VlICMxMjQ3NTogUHJldmVudCBnZW5lcmF0b3JzIGZyb20gbGVha2luZyB0aGVpciBleGNlcHRpb24gc3RhdGUgaW50byB0aGUKKyAgY2FsbGVyJ3MgZnJhbWUgYXMgdGhleSByZXR1cm4gZm9yIHRoZSBsYXN0IHRpbWUuCisKKy0gSXNzdWUgIzEyMjkxOiBZb3UgY2FuIG5vdyBsb2FkIG11bHRpcGxlIG1hcnNoYWxsZWQgb2JqZWN0cyBmcm9tIGEgc3RyZWFtLAorICB3aXRoIG90aGVyIGRhdGEgaW50ZXJsZWF2ZWQgYmV0d2VlbiBtYXJzaGFsbGVkIG9iamVjdHMuCisKKy0gSXNzdWUgIzEyMzU2OiBXaGVuIHJlcXVpcmVkIHBvc2l0aW9uYWwgb3Iga2V5d29yZC1vbmx5IGFyZ3VtZW50cyBhcmUgbm90CisgIGdpdmVuLCBwcm9kdWNlIGFuIGluZm9ybWF0aXZlIGVycm9yIG1lc3NhZ2Ugd2hpY2ggaW5jbHVkZXMgdGhlIG5hbWUocykgb2YgdGhlCisgIG1pc3NpbmcgYXJndW1lbnRzLgorCistIElzc3VlICMxMjM3MDogRml4IHN1cGVyIHdpdGggbm8gYXJndW1lbnRzIHdoZW4gX19jbGFzc19fIGlzIG92ZXJyaWRlbiBpbiB0aGUKKyAgY2xhc3MgYm9keS4KKworLSBJc3N1ZSAjMTIwODQ6IG9zLnN0YXQgb24gV2luZG93cyBub3cgd29ya3MgcHJvcGVybHkgd2l0aCByZWxhdGl2ZSBzeW1ib2xpYworICBsaW5rcyB3aGVuIGNhbGxlZCBmcm9tIGFueSBkaXJlY3RvcnkuCisKKy0gTG9vc2VuIHR5cGUgcmVzdHJpY3Rpb25zIG9uIHRoZSBfX2Rpcl9fIG1ldGhvZC4gX19kaXJfXyBjYW4gbm93IHJldHVybiBhbnkKKyAgc2VxdWVuY2UsIHdoaWNoIHdpbGwgYmUgY29udmVydGVkIHRvIGEgbGlzdCBhbmQgc29ydGVkIGJ5IGRpcigpLgorCistIElzc3VlICMxMjI2NTogTWFrZSBlcnJvciBtZXNzYWdlcyBwcm9kdWNlZCBieSBwYXNzaW5nIGFuIGludmFsaWQgc2V0IG9mCisgIGFyZ3VtZW50cyB0byBhIGZ1bmN0aW9uIG1vcmUgaW5mb3JtYXRpdmUuCisKKy0gSXNzdWUgIzEyMjI1OiBTdGlsbCBhbGxvdyBQeXRob24gdG8gYnVpbGQgaWYgUHl0aG9uIGlzIG5vdCBpbiBpdHMgaGcgcmVwbyBvcgorICBtZXJjdXJpYWwgaXMgbm90IGluc3RhbGxlZC4KKworLSBJc3N1ZSAjMTE5NTogbXlfZmdldHMoKSBub3cgYWx3YXlzIGNsZWFycyBlcnJvcnMgYmVmb3JlIGNhbGxpbmcgZmdldHMoKS4gRml4CisgIHRoZSBmb2xsb3dpbmcgY2FzZTogc3lzLnN0ZGluLnJlYWQoKSBzdG9wcGVkIHdpdGggQ1RSTCtkIChlbmQgb2YgZmlsZSksCisgIHJhd19pbnB1dCgpIGludGVycnVwdGVkIGJ5IENUUkwrYy4KKworLSBJc3N1ZSAjMTIyMTY6IEFsbG93IHVuZXhwZWN0ZWQgRU9GIGVycm9ycyB0byBoYXBwZW4gb24gYW55IGxpbmUgb2YgdGhlIGZpbGUuCisKKy0gSXNzdWUgIzEyMTk5OiBUaGUgVHJ5RXhjZXB0IGFuZCBUcnlGaW5hbGx5IGFuZCBBU1Qgbm9kZXMgaGF2ZSBiZWVuIHVuaWZpZWQKKyAgaW50byBhIFRyeSBub2RlLgorCistIElzc3VlICM5NjcwOiBJbmNyZWFzZSB0aGUgZGVmYXVsdCBzdGFjayBzaXplIGZvciBzZWNvbmRhcnkgdGhyZWFkcyBvbgorICBNYWMgT1MgWCBhbmQgRnJlZUJTRCB0byByZWR1Y2UgdGhlIGNoYW5jZXMgb2YgYSBjcmFzaCBpbnN0ZWFkIG9mIGEKKyAgIm1heGltdW0gcmVjdXJzaW9uIGRlcHRoIiBSdW50aW1lRXJyb3IgZXhjZXB0aW9uLgorICAocGF0Y2ggYnkgUm9uYWxkIE91c3NvcmVuKQorCistIElzc3VlICMxMjEwNjogVGhlIHVzZSBvZiB0aGUgbXVsdGlwbGUtd2l0aCBzaG9ydGhhbmQgc3ludGF4IGlzIG5vdyByZWZsZWN0ZWQKKyAgaW4gdGhlIEFTVC4KKworLSBJc3N1ZSAjMTIxOTA6IFRyeSB0byB1c2UgdGhlIHNhbWUgZmlsZW5hbWUgb2JqZWN0IHdoZW4gY29tcGlsaW5nIHVubWFyc2hhbGxpbmcKKyAgYSBjb2RlIG9iamVjdHMgaW4gdGhlIHNhbWUgZmlsZS4KKworLSBJc3N1ZSAjMTIxNjY6IE1vdmUgaW1wbGVtZW50YXRpb25zIG9mIGRpcigpIHNwZWNpYWxpemVkIGZvciB2YXJpb3VzIHR5cGVzIGludG8KKyAgdGhlIF9fZGlyX18oKSBtZXRob2RzIG9mIHRob3NlIHR5cGVzLgorCistIElzc3VlICM1NzE1OiBJbiBzb2NrZXRzZXJ2ZXIsIGNsb3NlIHRoZSBzZXJ2ZXIgc29ja2V0IGluIHRoZSBjaGlsZCBwcm9jZXNzLgorCistIENvcnJlY3QgbG9va3VwIG9mIF9fZGlyX18gb24gb2JqZWN0cy4gQW1vbmcgb3RoZXIgdGhpbmdzLCB0aGlzIGNhdXNlcyBlcnJvcnMKKyAgYmVzaWRlcyBBdHRyaWJ1dGVFcnJvciBmb3VuZCBvbiBsb29rdXAgdG8gYmUgcHJvcGFnYXRlZC4KKworLSBJc3N1ZSAjMTIwNjA6IFVzZSBzaWdfYXRvbWljX3QgdHlwZSBhbmQgdm9sYXRpbGUga2V5d29yZCBpbiB0aGUgc2lnbmFsCisgIG1vZHVsZS4gUGF0Y2ggd3JpdHRlbiBieSBDaGFybGVzLUZyYW7Dp29pcyBOYXRhbGkuCisKKy0gSXNzdWUgIzE3NDY2NTY6IEFkZGVkIHRoZSBpZl9uYW1laW5kZXgsIGlmX2luZGV4dG9uYW1lLCBpZl9uYW1ldG9pbmRleAorICBtZXRob2RzIHRvIHRoZSBzb2NrZXQgbW9kdWxlLgorCistIElzc3VlICMxMjA0NDogRml4ZWQgc3VicHJvY2Vzcy5Qb3BlbiB3aGVuIHVzZWQgYXMgYSBjb250ZXh0IG1hbmFnZXIgdG8KKyAgd2FpdCBmb3IgdGhlIHByb2Nlc3MgdG8gZW5kIHdoZW4gZXhpdGluZyB0aGUgY29udGV4dCB0byBhdm9pZCB1bmludGVudGlvbmFsbHkKKyAgbGVhdmluZyB6b21iaWUgcHJvY2Vzc2VzIGFyb3VuZC4KKworLSBJc3N1ZSAjMTE5NTogRml4IGlucHV0KCkgaWYgaXQgaXMgaW50ZXJydXB0ZWQgYnkgQ1RSTCtkIGFuZCB0aGVuIENUUkwrYywKKyAgY2xlYXIgdGhlIGVuZC1vZi1maWxlIGluZGljYXRvciBhZnRlciBDVFJMK2QuCisKKy0gSXNzdWUgIzE4NTY6IEF2b2lkIGNyYXNoZXMgYW5kIGxvY2t1cHMgd2hlbiBkYWVtb24gdGhyZWFkcyBydW4gd2hpbGUgdGhlCisgIGludGVycHJldGVyIGlzIHNodXR0aW5nIGRvd247IGluc3RlYWQsIHRoZXNlIHRocmVhZHMgYXJlIG5vdyBraWxsZWQgd2hlbgorICB0aGV5IHRyeSB0byB0YWtlIHRoZSBHSUwuCisKKy0gSXNzdWUgIzk3NTY6IFdoZW4gY2FsbGluZyBhIG1ldGhvZCBkZXNjcmlwdG9yIG9yIGEgc2xvdCB3cmFwcGVyIGRlc2NyaXB0b3IsCisgIHRoZSBjaGVjayBvZiB0aGUgb2JqZWN0IHR5cGUgZG9lc24ndCByZWFkIHRoZSBfX2NsYXNzX18gYXR0cmlidXRlIGFueW1vcmUuCisgIEZpeCBhIGNyYXNoIGlmIGEgY2xhc3Mgb3ZlcnJpZGUgaXRzIF9fY2xhc3NfXyBhdHRyaWJ1dGUgKGUuZy4gYSBwcm94eSBvZiB0aGUKKyAgc3RyIHR5cGUpLiBQYXRjaCB3cml0dGVuIGJ5IEFuZHJlYXMgU3TDvGhyay4KKworLSBJc3N1ZSAjMTA1MTc6IEFmdGVyIGZvcmsoKSwgcmVpbml0aWFsaXplIHRoZSBUTFMgdXNlZCBieSB0aGUgUHlHSUxTdGF0ZV8qCisgIEFQSXMsIHRvIGF2b2lkIGEgY3Jhc2ggd2l0aCB0aGUgcHRocmVhZCBpbXBsZW1lbnRhdGlvbiBpbiBSSEVMIDUuICBQYXRjaAorICBieSBDaGFybGVzLUZyYW7Dp29pcyBOYXRhbGkuCisKKy0gSXNzdWUgIzEwOTE0OiBJbml0aWFsaXplIGNvcnJlY3RseSB0aGUgZmlsZXN5c3RlbSBjb2RlYyB3aGVuIGNyZWF0aW5nIGEgbmV3CisgIHN1YmludGVycHJldGVyIHRvIGZpeCBhIGJvb3RzdHJhcCBpc3N1ZSB3aXRoIGNvZGVjcyBpbXBsZW1lbnRlZCBpbiBQeXRob24sIGFzCisgIHRoZSBJU08tODg1OS0xNSBjb2RlYy4KKworLSBJc3N1ZSAjMTE5MTg6IE9TLzIgYW5kIFZNUyBhcmUgbm8gbW9yZSBzdXBwb3J0ZWQgYmVjYXVzZSBvZiB0aGUgbGFjayBvZgorICBtYWludGFpbmVyLgorCistIElzc3VlICM2NzgwOiBmaXggc3RhcnRzL2VuZHN3aXRoIGVycm9yIG1lc3NhZ2UgdG8gbWVudGlvbiB0aGF0IHR1cGxlcyBhcmUKKyAgYWNjZXB0ZWQgdG9vLgorCistIElzc3VlICM1MDU3OiBmaXggYSBidWcgaW4gdGhlIHBlZXBob2xlciB0aGF0IGxlZCB0byBub24tcG9ydGFibGUgcHljIGZpbGVzCisgIGJldHdlZW4gbmFycm93IGFuZCB3aWRlIGJ1aWxkcyB3aGlsZSBvcHRpbWl6aW5nIEJJTkFSWV9TVUJTQ1Igb24gbm9uLUJNUAorICBjaGFycyAoZS5nLiAiXFUwMDAxMjM0NSJbMF0pLgorCistIElzc3VlICMxMTg0NTogRml4IHR5cG8gaW4gcmFuZ2VvYmplY3QuYyB0aGF0IGNhdXNlZCBhIGNyYXNoIGluCisgIGNvbXB1dGVfc2xpY2VfaW5kaWNlcy4gIFBhdGNoIGJ5IERhbmllbCBVcmJhbi4KKworLSBJc3N1ZSAjNTY3MzogQWRkZWQgYSBgdGltZW91dGAga2V5d29yZCBhcmd1bWVudCB0byBzdWJwcm9jZXNzLlBvcGVuLndhaXQsCisgIHN1YnByb2Nlc3MuUG9wZW4uY29tbXVuaWNhdGVkLCBzdWJwcm9jZXNzLmNhbGwsIHN1YnByb2Nlc3MuY2hlY2tfY2FsbCwgYW5kCisgIHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0LiAgSWYgdGhlIGJsb2NraW5nIG9wZXJhdGlvbiB0YWtlcyBtb3JlIHRoYW4gYHRpbWVvdXRgCisgIHNlY29uZHMsIHRoZSBgc3VicHJvY2Vzcy5UaW1lb3V0RXhwaXJlZGAgZXhjZXB0aW9uIGlzIHJhaXNlZC4KKworLSBJc3N1ZSAjMTE2NTA6IFB5T1NfU3RkaW9SZWFkbGluZSgpIHJldHJpZXMgZmdldHMoKSBpZiBpdCB3YXMgaW50ZXJydXB0ZWQKKyAgKEVJTlRSKSwgZm9yIGV4YW1wbGUgaWYgdGhlIHByb2dyYW0gaXMgc3RvcHBlZCB3aXRoIENUUkwreiBvbiBNYWMgT1MgWC4gUGF0Y2gKKyAgd3JpdHRlbiBieSBDaGFybGVzLUZyYW5jb2lzIE5hdGFsaS4KKworLSBJc3N1ZSAjOTMxOTogSW5jbHVkZSB0aGUgZmlsZW5hbWUgaW4gIk5vbi1VVEY4IGNvZGUgLi4uIiBzeW50YXggZXJyb3IuCisKKy0gSXNzdWUgIzEwNzg1OiBTdG9yZSB0aGUgZmlsZW5hbWUgYXMgVW5pY29kZSBpbiB0aGUgUHl0aG9uIHBhcnNlci4KKworLSBJc3N1ZSAjMTE2MTk6IF9QeUltcG9ydF9Mb2FkRHluYW1pY01vZHVsZSgpIGRvZXNuJ3QgZW5jb2RlIHRoZSBwYXRoIHRvIGJ5dGVzCisgIG9uIFdpbmRvd3MuCisKKy0gSXNzdWUgIzEwOTk4OiBSZW1vdmUgbWVudGlvbnMgb2YgLVEsIHN5cy5mbGFncy5kaXZpc2lvbl93YXJuaW5nIGFuZAorICBQeV9EaXZpc2lvbldhcm5pbmdGbGFnIGxlZnQgb3ZlciBmcm9tIFB5dGhvbiAyLgorCistIElzc3VlICMxMTI0NDogUmVtb3ZlIGFuIHVubmVjZXNzYXJ5IHBlZXBob2xlciBjaGVjayB0aGF0IHdhcyBwcmV2ZW50aW5nCisgIG5lZ2F0aXZlIHplcm9zIGZyb20gYmVpbmcgY29uc3RhbnQtZm9sZGVkIHByb3Blcmx5LgorCistIElzc3VlICMxMTM5NTogaW8uRmlsZUlPKCkud3JpdGUoKSBjbGFtcHMgdGhlIGRhdGEgbGVuZ3RoIHRvIDMyLDc2NyBieXRlcyBvbgorICBXaW5kb3dzIGlmIHRoZSBmaWxlIGlzIGEgVFRZIHRvIHdvcmthcm91bmQgYSBXaW5kb3dzIGJ1Zy4gVGhlIFdpbmRvd3MgY29uc29sZQorICByZXR1cm5zIGFuIGVycm9yICgxMjogbm90IGVub3VnaCBzcGFjZSBlcnJvcikgb24gd3JpdGluZyBpbnRvIHN0ZG91dCBpZgorICBzdGRvdXQgbW9kZSBpcyBiaW5hcnkgYW5kIHRoZSBsZW5ndGggaXMgZ3JlYXRlciB0aGFuIDY2LDAwMCBieXRlcyAob3IgbGVzcywKKyAgZGVwZW5kaW5nIG9uIGhlYXAgdXNhZ2UpLgorCistIElzc3VlICMxMTMyMDogZml4IGJvZ3VzIG1lbW9yeSBtYW5hZ2VtZW50IGluIE1vZHVsZXMvZ2V0cGF0aC5jLCBsZWFkaW5nIHRvCisgIGEgcG9zc2libGUgY3Jhc2ggd2hlbiBjYWxsaW5nIFB5X1NldFBhdGgoKS4KKworLSBJc3N1ZSAjMTE0MzI6IEEgYnVnIHdhcyBpbnRyb2R1Y2VkIGluIHN1YnByb2Nlc3MuUG9wZW4gb24gcG9zaXggc3lzdGVtcyB3aXRoCisgIDMuMi4wIHdoZXJlIHRoZSBzdGRvdXQgb3Igc3RkZXJyIGZpbGUgZGVzY3JpcHRvciBiZWluZyB0aGUgc2FtZSBhcyB0aGUgc3RkaW4KKyAgZmlsZSBkZXNjcmlwdG9yIHdvdWxkIHJhaXNlIGFuIGV4Y2VwdGlvbi4gd2ViYnJvd3Nlci5vcGVuIHdvdWxkIGZhaWwuIGZpeGVkLgorCistIElzc3VlICM5ODU2OiBDaGFuZ2Ugb2JqZWN0Ll9fZm9ybWF0X18gd2l0aCBhIG5vbi1lbXB0eSBmb3JtYXQgc3RyaW5nCisgIHRvIGJlIGEgRGVwcmVjYXRpb25XYXJuaW5nLiBJbiAzLjIgaXQgd2FzIGEgUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZy4KKyAgSW4gMy40IGl0IHdpbGwgYmUgYSBUeXBlRXJyb3IuCisKKy0gSXNzdWUgIzExMjQ0OiBUaGUgcGVlcGhvbGUgb3B0aW1pemVyIGlzIG5vdyBhYmxlIHRvIGNvbnN0YW50LWZvbGQKKyAgYXJiaXRyYXJpbHkgY29tcGxleCBleHByZXNzaW9ucy4gIFRoaXMgYWxzbyBmaXhlcyBhIDMuMiByZWdyZXNzaW9uIHdoZXJlCisgIG9wZXJhdGlvbnMgaW52b2x2aW5nIG5lZ2F0aXZlIG51bWJlcnMgd2VyZSBub3QgY29uc3RhbnQtZm9sZGVkLgorCistIElzc3VlICMxMTQ1MDogRG9uJ3QgdHJ1bmNhdGUgaGcgdmVyc2lvbiBpbmZvIGluIFB5X0dldEJ1aWxkSW5mbygpIHdoZW4KKyAgdGhlcmUgYXJlIG1hbnkgdGFncyAoZS5nLiB3aGVuIHVzaW5nIG1xKS4gIFBhdGNoIGJ5IE5hZGVlbSBWYXdkYS4KKworLSBJc3N1ZSAjMTEzMzU6IEZpeGVkIGEgbWVtb3J5IGxlYWsgaW4gbGlzdC5zb3J0IHdoZW4gdGhlIGtleSBmdW5jdGlvbgorICB0aHJvd3MgYW4gZXhjZXB0aW9uLgorCistIElzc3VlICM4OTIzOiBXaGVuIGEgc3RyaW5nIGlzIGVuY29kZWQgdG8gVVRGLTggaW4gc3RyaWN0IG1vZGUsIHRoZSByZXN1bHQgaXMKKyAgY2FjaGVkIGludG8gdGhlIG9iamVjdC4gRXhhbXBsZXM6IHN0ci5lbmNvZGUoKSwgc3RyLmVuY29kZSgndXRmLTgnKSwKKyAgUHlVbmljb2RlX0FzVVRGOFN0cmluZygpIGFuZCBQeVVuaWNvZGVfQXNFbmNvZGVkU3RyaW5nKHVuaWNvZGUsICJ1dGYtOCIsCisgIE5VTEwpLgorCistIElzc3VlICMxMDgzMTogUHlVbmljb2RlX0Zyb21Gb3JtYXQoKSBzdXBwb3J0cyAlbGksICVsbGkgYW5kICV6aSBmb3JtYXRzLgorCistIElzc3VlICMxMDgyOTogUmVmYWN0b3IgUHlVbmljb2RlX0Zyb21Gb3JtYXQoKSwgdXNlIHRoZSBzYW1lIGZ1bmN0aW9uIHRvIHBhcnNlCisgIHRoZSBmb3JtYXQgc3RyaW5nIGluIHRoZSAzIHN0ZXBzLCBmaXggY3Jhc2hzIG9uIGludmFsaWQgZm9ybWF0IHN0cmluZ3MuCisKKy0gSXNzdWUgIzEzMDA3OiB3aGljaGRiIHNob3VsZCByZWNvZ25pemUgZ2RibSAxLjkgbWFnaWMgbnVtYmVycy4KKworLSBJc3N1ZSAjMTEyNDY6IEZpeCBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiJVYiKSB0byBkZWNvZGUgdGhlIGJ5dGUgc3RyaW5nIGZyb20KKyAgVVRGLTggKHdpdGggcmVwbGFjZSBlcnJvciBoYW5kbGVyKSBpbnN0ZWFkIG9mIElTTy04ODU5LTEgKGluIHN0cmljdCBtb2RlKS4KKyAgUGF0Y2ggd3JpdHRlbiBieSBSYXkgQWxsZW4uCisKKy0gSXNzdWUgIzExMjg2OiBSYWlzZSBhIFZhbHVlRXJyb3IgZnJvbSBjYWxsaW5nIFB5TWVtb3J5Vmlld19Gcm9tQnVmZmVyIHdpdGgKKyAgYSBidWZmZXIgc3RydWN0IGhhdmluZyBhIE5VTEwgZGF0YSBwb2ludGVyLgorCistIElzc3VlICMxMTI3MjogT24gV2luZG93cywgaW5wdXQoKSBzdHJpcHMgJ1xyJyAoYW5kIG5vdCBvbmx5ICdcbicpLCBhbmQKKyAgc3lzLnN0ZGluIHVzZXMgdW5pdmVyc2FsIG5ld2xpbmUgKHJlcGxhY2UgJ1xyXG4nIGJ5ICdcbicpLgorCistIElzc3VlICMxMTgyODogc3RhcnRzd2l0aCBhbmQgZW5kc3dpdGggbm93IGFjY2VwdCBOb25lIGFzIHNsaWNlIGluZGV4LgorICBQYXRjaCBieSBUb3JzdGVuIEJlY2tlci4KKworLSBJc3N1ZSAjMTA4MzA6IEZpeCBQeVVuaWNvZGVfRnJvbUZvcm1hdFYoIiVjIikgZm9yIG5vbi1CTVAgY2hhcmFjdGVycyBvbgorICBuYXJyb3cgYnVpbGQuCisKKy0gSXNzdWUgIzExMTY4OiBSZW1vdmUgZmlsZW5hbWUgZGVidWcgdmFyaWFibGUgZnJvbSBQeUV2YWxfRXZhbEZyYW1lRXgoKS4KKyAgSXQgZW5jb2RlZCB0aGUgVW5pY29kZSBmaWxlbmFtZSB0byBVVEYtOCwgYnV0IHRoZSBlbmNvZGluZyBmYWlscyBvbgorICB1bmRlY29kYWJsZSBmaWxlbmFtZSAob24gc3Vycm9nYXRlIGNoYXJhY3RlcnMpIHdoaWNoIHJhaXNlcyBhbiB1bmV4cGVjdGVkCisgIFVuaWNvZGVFbmNvZGVFcnJvciBvbiByZWN1cnNpb24gbGltaXQuCisKKy0gSXNzdWUgIzExMTg3OiBSZW1vdmUgYm9vdHN0cmFwIGNvZGUgKHVzZSBBU0NJSSkgb2YKKyAgUHlVbmljb2RlX0FzRW5jb2RlZFN0cmluZygpLCBpdCB3YXMgcmVwbGFjZWQgYnkgYSBiZXR0ZXIgZmFsbGJhY2sgKHVzZSB0aGUKKyAgbG9jYWxlIGVuY29kaW5nKSBpbiBQeVVuaWNvZGVfRW5jb2RlRlNEZWZhdWx0KCkuCisKKy0gQ2hlY2sgZm9yIE5VTEwgcmVzdWx0IGluIFB5VHlwZV9Gcm9tU3BlYy4KKworLSBJc3N1ZSAjMTA1MTY6IE5ldyBjb3B5KCkgYW5kIGNsZWFyKCkgbWV0aG9kcyBmb3IgbGlzdHMgYW5kIGJ5dGVhcnJheXMuCisKKy0gSXNzdWUgIzExMzg2OiBieXRlYXJyYXkucG9wKCkgbm93IHRocm93cyBJbmRleEVycm9yIHdoZW4gdGhlIGJ5dGVhcnJheSBpcworICBlbXB0eSwgaW5zdGVhZCBvZiBPdmVyZmxvd0Vycm9yLgorCistIElzc3VlICMxMjM4MDogVGhlIHJqdXN0LCBsanVzdCBhbmQgY2VudGVyIG1ldGhvZHMgb2YgYnl0ZXMgYW5kIGJ5dGVhcnJheQorICBub3cgYWNjZXB0IGEgYnl0ZWFycmF5IGFyZ3VtZW50LgorCitMaWJyYXJ5CistLS0tLS0tCisKKy0gSXNzdWUgIzE0MTk1OiBBbiBpc3N1ZSB0aGF0IGNhdXNlZCB3ZWFrcmVmLldlYWtTZXQgaW5zdGFuY2VzIHRvIGluY29ycmVjdGx5CisgIHJldHVybiBUcnVlIGZvciBhIFdlYWtTZXQgaW5zdGFuY2UgJ2EnIGluIGJvdGggJ2EgPCBhJyBhbmQgJ2EgPiBhJyBoYXMgYmVlbgorICBmaXhlZC4KKworLSBJc3N1ZSAjMTQxNjY6IFBpY2tsZXIgb2JqZWN0cyBub3cgaGF2ZSBhbiBvcHRpb25hbCBgYGRpc3BhdGNoX3RhYmxlYGAKKyAgYXR0cmlidXRlIHdoaWNoIGFsbG93cyB0byBzZXQgY3VzdG9tIHBlci1waWNrbGVyIHJlZHVjdGlvbiBmdW5jdGlvbnMuCisgIFBhdGNoIGJ5IHNidC4KKworLSBJc3N1ZSAjMTQxNzc6IG1hcnNoYWwubG9hZHMoKSBub3cgcmFpc2VzIFR5cGVFcnJvciB3aGVuIGdpdmVuIGFuIHVuaWNvZGUKKyAgc3RyaW5nLiAgUGF0Y2ggYnkgR3VpbGhlcm1lIEdvbsOnYWx2ZXMuCisKKy0gSXNzdWUgIzEzNTUwOiBSZW1vdmUgdGhlIGRlYnVnIG1hY2hpbmVyeSBmcm9tIHRoZSB0aHJlYWRpbmcgbW9kdWxlOiByZW1vdmUKKyAgdmVyYm9zZSBhcmd1bWVudHMgZnJvbSBhbGwgdGhyZWFkaW5nIGNsYXNzZXMgYW5kIGZ1bmN0aW9ucy4KKworLSBJc3N1ZSAjMTQxNTk6IEZpeCB0aGUgbGVuKCkgb2Ygd2VhayBjb250YWluZXJzIChXZWFrU2V0LCBXZWFrS2V5RGljdGlvbmFyeSwKKyAgV2Vha1ZhbHVlRGljdGlvbmFyeSkgdG8gcmV0dXJuIGEgYmV0dGVyIGFwcHJveGltYXRpb24gd2hlbiBzb21lIG9iamVjdHMKKyAgYXJlIGRlYWQgb3IgZHlpbmcuICBNb3Jlb3ZlciwgdGhlIGltcGxlbWVudGF0aW9uIGlzIG5vdyBPKDEpIHJhdGhlciB0aGFuCisgIE8obikuCisKKy0gSXNzdWUgIzEzMTI1OiBTaWxlbmNlIHNwdXJpb3VzIHRlc3RfbGliMnRvMyBvdXRwdXQgd2hlbiBpbiBub24tdmVyYm9zZSBtb2RlLgorICBQYXRjaCBieSBNaWtoYWlsIE5vdmlrb3YuCisKKy0gSXNzdWUgIzExODQxOiBGaXggY29tcGFyaXNvbiBidWcgd2l0aCAncmMnIHZlcnNpb25zIGluIHBhY2thZ2luZy52ZXJzaW9uLgorICBQYXRjaCBieSBGaWxpcCBHcnVzemN6ecWEc2tpLgorCistIElzc3VlICMxMzQ0NzogQWRkIGEgdGVzdCBmaWxlIHRvIGhvc3QgcmVncmVzc2lvbiB0ZXN0cyBmb3IgYnVncyBpbiB0aGUKKyAgc2NyaXB0cyBmb3VuZCBpbiB0aGUgVG9vbHMgZGlyZWN0b3J5LgorCistIElzc3VlICM2ODg0OiBGaXggbG9uZy1zdGFuZGluZyBidWdzIHdpdGggTUFOSUZFU1QuaW4gcGFyc2luZyBpbiBkaXN0dXRpbHMKKyAgb24gV2luZG93cy4gIEFsc28gZml4ZWQgaW4gcGFja2FnaW5nLgorCistIElzc3VlICM4MDMzOiBzcWxpdGUzOiBGaXggNjQtYml0IGludGVnZXIgaGFuZGxpbmcgaW4gdXNlciBmdW5jdGlvbnMKKyAgb24gMzItYml0IGFyY2hpdGVjdHVyZXMuIEluaXRpYWwgcGF0Y2ggYnkgUGhpbGlwcGUgRGV2YWxrZW5lZXIuCisKKy0gSFRNTFBhcnNlciBpcyBub3cgYWJsZSB0byBoYW5kbGUgc2xhc2hlcyBpbiB0aGUgc3RhcnQgdGFnLgorCistIElzc3VlICMxMzY0MTogRGVjb2RpbmcgZnVuY3Rpb25zIGluIHRoZSBiYXNlNjQgbW9kdWxlIG5vdyBhY2NlcHQgQVNDSUktb25seQorICB1bmljb2RlIHN0cmluZ3MuICBQYXRjaCBieSBDYXRhbGluIElhY29iLgorCistIElzc3VlICMxNDA0MzogU3BlZWQgdXAgaW1wb3J0bGliJ3MgX0ZpbGVGaW5kZXIgYnkgYXQgbGVhc3QgOHgsIGFuZCBhZGQgYQorICBuZXcgaW1wb3J0bGliLmludmFsaWRhdGVfY2FjaGVzKCkgZnVuY3Rpb24uCisKKy0gSXNzdWUgIzE0MDAxOiBDVkUtMjAxMi0wODQ1OiB4bWxycGM6IEZpeCBhbiBlbmRsZXNzIGxvb3AgaW4KKyAgU2ltcGxlWE1MUlBDU2VydmVyIHVwb24gbWFsZm9ybWVkIFBPU1QgcmVxdWVzdC4KKworLSBJc3N1ZSAjMTM5NjE6IE1vdmUgaW1wb3J0bGliIG92ZXIgdG8gdXNpbmcgb3MucmVwbGFjZSgpIGZvciBhdG9taWMgcmVuYW1pbmcuCisKKy0gRG8gYXdheSB3aXRoIGFtYmlndW91cyBsZXZlbCB2YWx1ZXMgKGFzIHN1Z2dlc3RlZCBieSBQRVAgMzI4KSBpbgorICBpbXBvcnRsaWIuX19pbXBvcnRfXygpIGJ5IHJhaXNpbmcgVmFsdWVFcnJvciB3aGVuIGxldmVsIDwgMC4KKworLSBJc3N1ZSAjMjQ4OTogcHR5LnNwYXduIGNvdWxkIGNvbnN1bWUgMTAwJSBjcHUgd2hlbiBpdCBlbmNvdW50ZXJlZCBhbiBFT0YuCisKKy0gSXNzdWUgIzEzMDE0OiBGaXggYSBwb3NzaWJsZSByZWZlcmVuY2UgbGVhayBpbiBTU0xTb2NrZXQuZ2V0cGVlcmNlcnQoKS4KKworLSBJc3N1ZSAjMTM3Nzc6IEFkZCBQRl9TWVNURU0gc29ja2V0cyBvbiBPUyBYLgorICBQYXRjaCBieSBNaWNoYWVsIEdvZGVyYmF1ZXIuCisKKy0gSXNzdWUgIzEzMDE1OiBGaXggYSBwb3NzaWJsZSByZWZlcmVuY2UgbGVhayBpbiBkZWZhdWx0ZGljdC5fX3JlcHJfXy4KKyAgUGF0Y2ggYnkgU3VtYW4gU2FoYS4KKworLSBJc3N1ZSAjMTMyNjExMzogZGlzdHV0aWxzJyBhbmQgcGFja2FnaW5nJ3MgYnVpbGRfZXh0IGNvbW1hbmRzIG9wdGlvbiBub3cKKyAgY29ycmVjdGx5IHBhcnNlcyBtdWx0aXBsZSB2YWx1ZXMgKHNlcGFyYXRlZCBieSB3aGl0ZXNwYWNlIG9yIGNvbW1hcykgZ2l2ZW4KKyAgdG8gdGhlaXIgLS1saWJyYXJpZXMgb3B0aW9uLgorCistIElzc3VlICMxMDI4Nzogbm50cGxpYiBub3cgcXVlcmllcyB0aGUgc2VydmVyJ3MgQ0FQQUJJTElUSUVTIGZpcnN0IGJlZm9yZQorICBzZW5kaW5nIE1PREUgUkVBREVSLCBhbmQgb25seSBzZW5kcyBpdCBpZiBub3QgYWxyZWFkeSBpbiBSRUFERVIgbW9kZS4KKyAgUGF0Y2ggYnkgSHluZWsgU2NobGF3YWNrLgorCistIElzc3VlICMxMzk5MzogSFRNTFBhcnNlciBpcyBub3cgYWJsZSB0byBoYW5kbGUgYnJva2VuIGVuZCB0YWdzIHdoZW4KKyAgc3RyaWN0PUZhbHNlLgorCistIElzc3VlICMxMzkzMDogbGliMnRvMyBub3cgc3VwcG9ydHMgd3JpdGluZyBjb252ZXJ0ZWQgb3V0cHV0IGZpbGVzIHRvIGFub3RoZXIKKyAgZGlyZWN0b3J5IHRyZWUgYXMgd2VsbCBhcyBjb3B5aW5nIHVuY2hhbmdlZCBmaWxlcyBhbmQgYWx0ZXJpbmcgdGhlIGZpbGUKKyAgc3VmZml4LgorCistIElzc3VlICM5NzUwOiBGaXggc3FsaXRlMy5Db25uZWN0aW9uLml0ZXJkdW1wIG9uIHRhYmxlcyBhbmQgZmllbGRzCisgIHdpdGggYSBuYW1lIHRoYXQgaXMgYSBrZXl3b3JkIG9yIGNvbnRhaW5zIHF1b3Rlcy4gUGF0Y2ggYnkgTWFya28KKyAgS29odGFsYS4KKworLSBJc3N1ZSAjMTAyODc6IG5udHBsaWIgbm93IHF1ZXJpZXMgdGhlIHNlcnZlcidzIENBUEFCSUxJVElFUyBhZ2FpbiBhZnRlcgorICBhdXRoZW50aWNhdGluZyAoc2luY2UgdGhlIHJlc3VsdCBtYXkgY2hhbmdlLCBhY2NvcmRpbmcgdG8gUkZDIDQ2NDMpLgorICBQYXRjaCBieSBIeW5layBTY2hsYXdhY2suCisKKy0gSXNzdWUgIzEzOTg5OiBEb2N1bWVudCB0aGF0IEd6aXBGaWxlIGRvZXMgbm90IHN1cHBvcnQgdGV4dCBtb2RlLCBhbmQgZ2l2ZSBhCisgIG1vcmUgaGVscGZ1bCBlcnJvciBtZXNzYWdlIHdoZW4gb3BlbmVkIHdpdGggYW4gaW52YWxpZCBtb2RlIHN0cmluZy4KKworLSBJc3N1ZSAjMTM1OTA6IE9uIE9TIFggMTAuNyBhbmQgMTAuNiB3aXRoIFhjb2RlIDQuMiwgYnVpbGRpbmcKKyAgRGlzdHV0aWxzLWJhc2VkIHBhY2thZ2VzIHdpdGggQyBleHRlbnNpb24gbW9kdWxlcyBtYXkgZmFpbCBiZWNhdXNlCisgIEFwcGxlIGhhcyByZW1vdmVkIGdjYy00LjIsIHRoZSB2ZXJzaW9uIHVzZWQgdG8gYnVpbGQgcHl0aG9uLm9yZworICA2NC1iaXQvMzItYml0IFB5dGhvbnMuICBJZiB0aGUgdXNlciBkb2VzIG5vdCBleHBsaWNpdGx5IG92ZXJyaWRlCisgIHRoZSBkZWZhdWx0IEMgY29tcGlsZXIgYnkgc2V0dGluZyB0aGUgQ0MgZW52aXJvbm1lbnQgdmFyaWFibGUsCisgIERpc3R1dGlscyB3aWxsIG5vdyBhdHRlbXB0IHRvIGNvbXBpbGUgZXh0ZW5zaW9uIG1vZHVsZXMgd2l0aCBjbGFuZworICBpZiBnY2MtNC4yIGlzIHJlcXVpcmVkIGJ1dCBub3QgZm91bmQuIEFsc28gYXMgYSBjb252ZW5pZW5jZSwgaWYKKyAgdGhlIHVzZXIgZG9lcyBleHBsaWNpdGx5IHNldCBDQywgc3Vic3RpdHV0ZSBpdHMgdmFsdWUgYXMgdGhlIGRlZmF1bHQKKyAgY29tcGlsZXIgaW4gdGhlIERpc3R1dGlscyBMRFNIQVJFRCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGZvciBPUyBYLgorICAoTm90ZSwgdGhlIHB5dGhvbi5vcmcgMzItYml0LW9ubHkgUHl0aG9ucyB1c2UgZ2NjLTQuMCBhbmQgdGhlIDEwLjR1CisgIFNESywgbmVpdGhlciBvZiB3aGljaCBhcmUgYXZhaWxhYmxlIGluIFhjb2RlIDQuICBUaGlzIGNoYW5nZSBkb2VzIG5vdAorICBhdHRlbXB0IHRvIG92ZXJyaWRlIHNldHRpbmdzIHRvIHN1cHBvcnQgdGhlaXIgdXNlIHdpdGggWGNvZGUgNC4pCisKKy0gSXNzdWUgIzEzOTYwOiBIVE1MUGFyc2VyIGlzIG5vdyBhYmxlIHRvIGhhbmRsZSBicm9rZW4gY29tbWVudHMgd2hlbgorICBzdHJpY3Q9RmFsc2UuCisKKy0gSXNzdWUgIzEzOTIxOiBVbmRvY3VtZW50IGFuZCBjbGVhbiB1cCBzcWxpdGUzLk9wdGltaXplZFVuaWNvZGUsCisgIHdoaWNoIGlzIG9ic29sZXRlIGluIFB5dGhvbiAzLnguIEl0J3Mgbm93IGFsaWFzZWQgdG8gc3RyIGZvcgorICBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4KKworLSBXaGVuICcnIGlzIGEgcGF0aCAoZS5nLiBpbiBzeXMucGF0aCksIG1ha2Ugc3VyZSBfX2ZpbGVfXyB1c2VzIHRoZSBjdXJyZW50CisgIHdvcmtpbmcgZGlyZWN0b3J5IGluc3RlYWQgb2YgJycgaW4gaW1wb3J0bGliLgorCistIElzc3VlICMxMzYwOTogQWRkIHR3byBmdW5jdGlvbnMgdG8gcXVlcnkgdGhlIHRlcm1pbmFsIHNpemU6CisgIG9zLmdldF90ZXJtaW5hbF9zaXplIChsb3cgbGV2ZWwpIGFuZCBzaHV0aWwuZ2V0X3Rlcm1pbmFsX3NpemUgKGhpZ2ggbGV2ZWwpLgorICBQYXRjaCBieSBaYmlnbmlldyBKxJlkcnplamV3c2tpLVN6bWVrLgorCistIElzc3VlICMxMzg0NTogT24gV2luZG93cywgdGltZS50aW1lKCkgbm93IHVzZXMgR2V0U3lzdGVtVGltZUFzRmlsZVRpbWUoKQorICBpbnN0ZWFkIG9mIGZ0aW1lKCkgdG8gaGF2ZSBhIHJlc29sdXRpb24gb2YgMTAwIG5zIGluc3RlYWQgb2YgMSBtcyAodGhlIGNsb2NrCisgIGFjY3VyYWN5IGlzIGJldHdlZW4gMC41IG1zIGFuZCAxNSBtcykuCisKKy0gSXNzdWUgIzEzODQ2OiBBZGQgdGltZS5tb25vdG9uaWMoKSwgbW9ub3RvbmljIGNsb2NrLgorCistIElzc3VlICM4MTg0OiBtdWx0aXByb2Nlc3Npbmc6IE9uIFdpbmRvd3MsIGRvbid0IHNldCBTT19SRVVTRUFERFIgb24KKyAgQ29ubmVjdGlvbiBzb2NrZXRzLCBhbmQgc2V0IEZJTEVfRkxBR19GSVJTVF9QSVBFX0lOU1RBTkNFIG9uIG5hbWVkIHBpcGVzLCB0bworICBtYWtlIHN1cmUgdHdvIGxpc3RlbmVycyBjYW4ndCBiaW5kIHRvIHRoZSBzYW1lIHNvY2tldC9waXBlIChvciBhbnkgZXhpc3RpbmcKKyAgc29ja2V0L3BpcGUpLgorCistIElzc3VlICMxMDgxMTogRml4IHJlY3Vyc2l2ZSB1c2FnZSBvZiBjdXJzb3JzLiBJbnN0ZWFkIG9mIGNyYXNoaW5nLAorICByYWlzZSBhIFByb2dyYW1taW5nRXJyb3Igbm93LgorCistIElzc3VlICMxMDg4MTogRml4IHRlc3Rfc2l0ZSBmYWlsdXJlIHdpdGggT1MgWCBmcmFtZXdvcmsgYnVpbGRzLgorCistIElzc3VlICM5NjQ0Mzc6IE1ha2UgSURMRSBoZWxwIHdpbmRvdyBub24tbW9kYWwuCisgIFBhdGNoIGJ5IEd1aWxoZXJtZSBQb2xvIGFuZCBSb2dlciBTZXJ3eS4KKworLSBJc3N1ZSAjMTM3MzQ6IEFkZCBvcy5md2FsaygpLCBhIGRpcmVjdG9yeSB3YWxraW5nIGZ1bmN0aW9uIHlpZWxkaW5nIGZpbGUKKyAgZGVzY3JpcHRvcnMuCisKKy0gSXNzdWUgIzI5NDU6IE1ha2UgdGhlIGRpc3R1dGlscyB1cGxvYWQgY29tbWFuZCBhd2FyZSBvZiBiZGlzdF9ycG0gcHJvZHVjdHMuCisKKy0gSXNzdWUgIzEzNzEyOiBweXNldHVwIGNyZWF0ZSBzaG91bGQgbm90IGNvbnZlcnQgcGFja2FnZV9kYXRhIHRvIGV4dHJhX2ZpbGVzLgorCistIElzc3VlICMxMTgwNTogcGFja2FnZV9kYXRhIGluIHNldHVwLmNmZyBzaG91bGQgYWxsb3cgbW9yZSB0aGFuIG9uZSB2YWx1ZS4KKworLSBJc3N1ZSAjMTM5MzM6IElETEUgYXV0by1jb21wbGV0ZSBkaWQgbm90IHdvcmsgd2l0aCBzb21lIGltcG9ydGVkCisgIG1vZHVsZSwgbGlrZSBoYXNobGliLiAgKFBhdGNoIGJ5IFJvZ2VyIFNlcnd5KQorCistIElzc3VlICMxMzkwMTogUHJldmVudCB0ZXN0X2Rpc3R1dGlscyBmYWlsdXJlcyBvbiBPUyBYIHdpdGggLS1lbmFibGUtc2hhcmVkLgorCistIElzc3VlICMxMzY3NjogSGFuZGxlIHN0cmluZ3Mgd2l0aCBlbWJlZGRlZCB6ZXJvcyBjb3JyZWN0bHkgaW4gc3FsaXRlMy4KKworLSBJc3N1ZSAjMTM1MDY6IEFkZCAnJyB0byBwYXRoIGZvciBJRExFIFNoZWxsIHdoZW4gc3RhcnRlZCBhbmQgcmVzdGFydGVkIHdpdGggUmVzdGFydCBTaGVsbC4KKyAgT3JpZ2luYWwgcGF0Y2hlcyBieSBNYXJjbyBTY2F0YWdsaW5pIGFuZCBSb2dlciBTZXJ3eS4KKworLSBJc3N1ZSAjODgyODogQWRkIG5ldyBmdW5jdGlvbiBvcy5yZXBsYWNlKCksIGZvciBjcm9zcy1wbGF0Zm9ybSByZW5hbWluZworICB3aXRoIG92ZXJ3cml0aW5nLgorCistIElzc3VlICMxMzg0ODogb3BlbigpIGFuZCB0aGUgRmlsZUlPIGNvbnN0cnVjdG9yIG5vdyBjaGVjayBmb3IgTlVMCisgIGNoYXJhY3RlcnMgaW4gdGhlIGZpbGUgbmFtZS4gIFBhdGNoIGJ5IEh5bmVrIFNjaGxhd2Fjay4KKworLSBJc3N1ZSAjMTM4MDY6IFRoZSBzaXplIGNoZWNrIGluIGF1ZGlvb3AgZGVjb21wcmVzc2lvbiBmdW5jdGlvbnMgd2FzIHRvbworICBzdHJpY3QgYW5kIGNvdWxkIHJlamVjdCB2YWxpZCBjb21wcmVzc2VkIGRhdGEuICBQYXRjaCBieSBPbGVnIFBsYWtob3RueXVrLgorCistIElzc3VlICMxMzgxMjogV2hlbiBhIG11bHRpcHJvY2Vzc2luZyBQcm9jZXNzIGNoaWxkIHJhaXNlcyBhbiBleGNlcHRpb24sCisgIGZsdXNoIHN0ZGVyciBhZnRlciBwcmludGluZyB0aGUgZXhjZXB0aW9uIHRyYWNlYmFjay4KKworLSBJc3N1ZSAjMTM4ODU6IENWRS0yMDExLTMzODk6IHRoZSBfc3NsIG1vZHVsZSB3b3VsZCBhbHdheXMgZGlzYWJsZSB0aGUgQ0JDCisgIElWIGF0dGFjayBjb3VudGVybWVhc3VyZS4KKworLSBJc3N1ZSAjMTM4NDc6IHRpbWUubG9jYWx0aW1lKCkgYW5kIHRpbWUuZ210aW1lKCkgbm93IHJhaXNlIGFuIE9TRXJyb3IgaW5zdGVhZAorICBvZiBWYWx1ZUVycm9yIG9uIGZhaWx1cmUuIHRpbWUuY3RpbWUoKSBhbmQgdGltZS5hc2N0aW1lKCkgbm93IHJhaXNlcyBhbgorICBPU0Vycm9yIGlmIGxvY2FsdGltZSgpIGZhaWxlZC4gdGltZS5jbG9jaygpIG5vdyByYWlzZXMgYSBSdW50aW1lRXJyb3IgaWYgdGhlCisgIHByb2Nlc3NvciB0aW1lIHVzZWQgaXMgbm90IGF2YWlsYWJsZSBvciBpdHMgdmFsdWUgY2Fubm90IGJlIHJlcHJlc2VudGVkCisKKy0gSXNzdWUgIzEzODYyOiBGaXggc3B1cmlvdXMgZmFpbHVyZSBpbiB0ZXN0X3psaWIgZHVlIHRvIHJ1bnRpbWUvY29tcGlsZSB0aW1lCisgIG1pbm9yIHZlcnNpb25zIG5vdCBtYXRjaGluZy4KKworLSBJc3N1ZSAjMTI4MDQ6IEZpeCB0ZXN0X3NvY2tldCBhbmQgdGVzdF91cmxsaWIybmV0IGZhaWx1cmVzIHdoZW4gcnVubmluZyB0ZXN0cworICBvbiBhIHN5c3RlbSB3aXRob3V0IGludGVybmV0IGFjY2Vzcy4KKworLSBJc3N1ZSAjMTM3NzI6IEluIG9zLnN5bWxpbmsoKSB1bmRlciBXaW5kb3dzLCBkbyBub3QgdHJ5IHRvIGd1ZXNzIHRoZSBsaW5rCisgIHRhcmdldCdzIHR5cGUgKGZpbGUgb3IgZGlyZWN0b3J5KS4gIFRoZSBkZXRlY3Rpb24gd2FzIGJ1Z2d5IGFuZCBtYWRlIHRoZQorICBjYWxsIG5vbi1hdG9taWMgKHRoZXJlZm9yZSBwcm9uZSB0byByYWNlIGNvbmRpdGlvbnMpLgorCistIElzc3VlICM2NjMxOiBEaXNhbGxvdyByZWxhdGl2ZSBmaWxlIHBhdGhzIGluIHVybGxpYiB1cmxvcGVuIG1ldGhvZHMuCisKKy0gSXNzdWUgIzEzNzIyOiBBdm9pZCBzaWxlbmNpbmcgSW1wb3J0RXJyb3JzIHdoZW4gaW5pdGlhbGl6aW5nIHRoZSBjb2RlY3MKKyAgcmVnaXN0cnkuCisKKy0gSXNzdWUgIzEzNzgxOiBGaXggR3ppcEZpbGUgYnVnIHRoYXQgY2F1c2VkIGFuIGV4Y2VwdGlvbiB0byBiZSByYWlzZWQgd2hlbgorICBvcGVuaW5nIGZvciB3cml0aW5nIHVzaW5nIGEgZmlsZW9iaiByZXR1cm5lZCBieSBvcy5mZG9wZW4oKS4KKworLSBJc3N1ZSAjMTM4MDM6IFVuZGVyIFNvbGFyaXMsIGRpc3R1dGlscyBkb2Vzbid0IGluY2x1ZGUgYml0bmVzcworICBpbiB0aGUgZGlyZWN0b3J5IG5hbWUuCisKKy0gSXNzdWUgIzEwMjc4OiBBZGQgdGltZS53YWxsY2xvY2soKSBmdW5jdGlvbiwgbW9ub3RvbmljIGNsb2NrLgorCistIElzc3VlICMxMzgwOTogRml4IHJlZ3Jlc3Npb24gd2hlcmUgYnoyIG1vZHVsZSB3b3VsZG4ndCB3b3JrIHdoZW4gdGhyZWFkcyBhcmUKKyAgZGlzYWJsZWQuIE9yaWdpbmFsIHBhdGNoIGJ5IEFtYXVyeSBGb3JnZW90IGQnQXJjLgorCistIElzc3VlICMxMzU4OTogRml4IHNvbWUgc2VyaWFsaXphdGlvbiBwcmltaXRpdmVzIGluIHRoZSBhaWZjIG1vZHVsZS4KKyAgUGF0Y2ggYnkgT2xlZyBQbGFraG90bnl1ay4KKworLSBJc3N1ZSAjMTM2NDI6IFVucXVvdGUgYmVmb3JlIGI2NGVuY29kaW5nIHVzZXI6cGFzc3dvcmQgZHVyaW5nIEJhc2ljCisgIEF1dGhlbnRpY2F0aW9uLiBQYXRjaCBjb250cmlidXRlZCBieSBKb29uYXMgS3VvcmlsZWh0by4KKworLSBJc3N1ZSAjMTM3MjY6IEZpeCB0aGUgYW1iaWd1b3VzIC1TIGZsYWcgaW4gcmVncnRlc3QuIEl0IGlzIC1vLy0tc2xvdyBmb3Igc2xvdworICB0ZXN0cy4KKworLSBJc3N1ZSAjMTIzNjQ6IEZpeCBhIGhhbmcgaW4gY29uY3VycmVudC5mdXR1cmVzLlByb2Nlc3NQb29sRXhlY3V0b3IuCisgIFRoZSBoYW5nIHdvdWxkIG9jY3VyIHdoZW4gcmV0cmlldmluZyB0aGUgcmVzdWx0IG9mIGEgc2NoZWR1bGVkIGZ1dHVyZSBhZnRlcgorICB0aGUgZXhlY3V0b3IgaGFkIGJlZW4gc2h1dCBkb3duLgorCistIElzc3VlICMxMzUwMjogdGhyZWFkaW5nOiBGaXggYSByYWNlIGNvbmRpdGlvbiBpbiBFdmVudC53YWl0KCkgdGhhdCBtYWRlIGl0CisgIHJldHVybiBGYWxzZSB3aGVuIHRoZSBldmVudCB3YXMgc2V0IGFuZCBjbGVhcmVkIHJpZ2h0IGFmdGVyLgorCistIElzc3VlICM5OTkzOiBXaGVuIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFyZSBvbiBkaWZmZXJlbnQgZmlsZXN5c3RlbXMsCisgIGFuZCB0aGUgc291cmNlIGlzIGEgc3ltbGluaywgc2h1dGlsLm1vdmUoKSBub3cgcmVjcmVhdGVzIGEgc3ltbGluayBvbiB0aGUKKyAgZGVzdGluYXRpb24gaW5zdGVhZCBvZiBjb3B5aW5nIHRoZSBmaWxlIGNvbnRlbnRzLiAgUGF0Y2ggYnkgSm9uYXRoYW4gTmllaG9mCisgIGFuZCBIeW5layBTY2hsYXdhY2suCisKKy0gSXNzdWUgIzEyOTI2OiBGaXggYSBidWcgaW4gdGFyZmlsZSdzIGxpbmsgZXh0cmFjdGlvbi4KKworLSBJc3N1ZSAjMTM2OTY6IEZpeCB0aGUgMzAyIFJlbGF0aXZlIFVSTCBSZWRpcmVjdGlvbiBwcm9ibGVtLgorCistIElzc3VlICMxMzYzNjogV2VhayBjaXBoZXJzIGFyZSBub3cgZGlzYWJsZWQgYnkgZGVmYXVsdCBpbiB0aGUgc3NsIG1vZHVsZQorICAoZXhjZXB0IHdoZW4gU1NMdjIgaXMgZXhwbGljaXRseSBhc2tlZCBmb3IpLgorCistIElzc3VlICMxMjcxNTogQWRkIGFuIG9wdGlvbmFsIHN5bWxpbmtzIGFyZ3VtZW50IHRvIHNodXRpbCBmdW5jdGlvbnMKKyAgKGNvcHlmaWxlLCBjb3B5bW9kZSwgY29weXN0YXQsIGNvcHksIGNvcHkyKS4gIFdoZW4gdGhhdCBwYXJhbWV0ZXIgaXMKKyAgdHJ1ZSwgc3ltbGlua3MgYXJlbid0IGRlcmVmZXJlbmNlZCBhbmQgdGhlIG9wZXJhdGlvbiBpbnN0ZWFkIGFjdHMgb24gdGhlCisgIHN5bWxpbmsgaXRzZWxmIChvciBjcmVhdGVzIG9uZSwgaWYgcmVsZXZhbnQpLiAgUGF0Y2ggYnkgSHluZWsgU2NobGF3YWNrLgorCistIEFkZCBhIGZsYWdzIHBhcmFtZXRlciB0byBzZWxlY3QuZXBvbGwuCisKKy0gSXNzdWUgIzEzNjI2OiBBZGQgc3VwcG9ydCBmb3IgU1NMIERpZmZpZS1IZWxsbWFuIGtleSBleGNoYW5nZSwgdGhyb3VnaCB0aGUKKyAgU1NMQ29udGV4dC5sb2FkX2RoX3BhcmFtcygpIG1ldGhvZCBhbmQgdGhlIHNzbC5PUF9TSU5HTEVfREhfVVNFIG9wdGlvbi4KKworLSBJc3N1ZSAjMTEwMDY6IERvbid0IGlzc3VlIGxvdyBsZXZlbCB3YXJuaW5nIGluIHN1YnByb2Nlc3Mgd2hlbiBwaXBlMigpIGZhaWxzLgorCistIElzc3VlICMxMzYyMDogU3VwcG9ydCBmb3IgQ2hyb21lIGJyb3dzZXIgaW4gd2ViYnJvd3Nlci4gIFBhdGNoIGNvbnRyaWJ1dGVkCisgIGJ5IEFybmF1ZCBDYWxtZXR0ZXMuCisKKy0gSXNzdWUgIzExODI5OiBGaXggY29kZSBleGVjdXRpb24gaG9sZXMgaW4gaW5zcGVjdC5nZXRhdHRyX3N0YXRpYyBmb3IKKyAgbWV0YWNsYXNzZXMgd2l0aCBtZXRhY2xhc3Nlcy4gUGF0Y2ggYnkgQW5kcmVhcyBTdMO8aHJrLgorCistIElzc3VlICMxMjcwODogQWRkIHN0YXJtYXAoKSBhbmQgc3Rhcm1hcF9hc3luYygpIG1ldGhvZHMgKHNpbWlsYXIgdG8KKyAgaXRlcnRvb2xzLnN0YXJtYXAoKSkgdG8gbXVsdGlwcm9jZXNzaW5nLlBvb2wuICBQYXRjaCBieSBIeW5layBTY2hsYXdhY2suCisKKy0gSXNzdWUgIzE3ODU6IEZpeCBpbnNwZWN0IGFuZCBweWRvYyB3aXRoIG1pc2JlaGF2aW5nIGRlc2NyaXB0b3JzLgorCistIElzc3VlICMxMzYzNzogImEyYiIgZnVuY3Rpb25zIGluIHRoZSBiaW5hc2NpaSBtb2R1bGUgbm93IGFjY2VwdCBBU0NJSS1vbmx5CisgIHVuaWNvZGUgc3RyaW5ncy4KKworLSBJc3N1ZSAjMTM2MzQ6IEFkZCBzdXBwb3J0IGZvciBxdWVyeWluZyBhbmQgZGlzYWJsaW5nIFNTTCBjb21wcmVzc2lvbi4KKworLSBJc3N1ZSAjMTM2Mjc6IEFkZCBzdXBwb3J0IGZvciBTU0wgRWxsaXB0aWMgQ3VydmUtYmFzZWQgRGlmZmllLUhlbGxtYW4KKyAga2V5IGV4Y2hhbmdlLCB0aHJvdWdoIHRoZSBTU0xDb250ZXh0LnNldF9lY2RoX2N1cnZlKCkgbWV0aG9kIGFuZCB0aGUKKyAgc3NsLk9QX1NJTkdMRV9FQ0RIX1VTRSBvcHRpb24uCisKKy0gSXNzdWUgIzEzNjM1OiBBZGQgc3NsLk9QX0NJUEhFUl9TRVJWRVJfUFJFRkVSRU5DRSwgc28gdGhhdCBTU0wgc2VydmVycworICBjaG9vc2UgdGhlIGNpcGhlciBiYXNlZCBvbiB0aGVpciBvd24gcHJlZmVyZW5jZXMsIHJhdGhlciB0aGFuIG9uIHRoZQorICBjbGllbnQncy4KKworLSBJc3N1ZSAjMTE4MTM6IEZpeCBpbnNwZWN0LmdldGF0dHJfc3RhdGljIGZvciBtb2R1bGVzLiBQYXRjaCBieSBBbmRyZWFzCisgIFN0w7xocmsuCisKKy0gSXNzdWUgIzc1MDI6IEZpeCBlcXVhbGl0eSBjb21wYXJpc29uIGZvciBEb2NUZXN0Q2FzZSBpbnN0YW5jZXMuICBQYXRjaCBieQorICBDw6lkcmljIEtyaWVyLgorCistIElzc3VlICMxMTg3MDogdGhyZWFkaW5nOiBQcm9wZXJseSByZWluaXRpYWxpemUgdGhyZWFkcyBpbnRlcm5hbCBsb2NrcyBhbmQKKyAgY29uZGl0aW9uIHZhcmlhYmxlcyB0byBhdm9pZCBkZWFkbG9ja3MgaW4gY2hpbGQgcHJvY2Vzc2VzLgorCistIElzc3VlICM4MDM1OiB1cmxsaWI6IEZpeCBhIGJ1ZyB3aGVyZSB0aGUgY2xpZW50IGNvdWxkIHJlbWFpbiBzdHVjayBhZnRlciBhCisgIHJlZGlyZWN0aW9uIG9yIGFuIGVycm9yLgorCistIElzc3VlICMxMzU2MDogb3Muc3RyZXJyb3IoKSBub3cgdXNlcyB0aGUgY3VycmVudCBsb2NhbGUgZW5jb2RpbmcgaW5zdGVhZCBvZgorICBVVEYtOC4KKworLSBJc3N1ZSAjODM3MzogVGhlIGZpbGVzeXN0ZW0gcGF0aCBvZiBBRl9VTklYIHNvY2tldHMgbm93IHVzZXMgdGhlIGZpbGVzeXN0ZW0KKyAgZW5jb2RpbmcgYW5kIHRoZSBzdXJyb2dhdGVlc2NhcGUgZXJyb3IgaGFuZGxlciwgcmF0aGVyIHRoYW4gVVRGLTguICBQYXRjaAorICBieSBEYXZpZCBXYXRzb24uCisKKy0gSXNzdWUgIzEwMzUwOiBSZWFkIGFuZCBzYXZlIGVycm5vIGJlZm9yZSBjYWxsaW5nIGEgZnVuY3Rpb24gd2hpY2ggbWlnaHQKKyAgb3ZlcndyaXRlIGl0LiAgT3JpZ2luYWwgcGF0Y2ggYnkgSGFsbHZhcmQgQiBGdXJ1c2V0aC4KKworLSBJc3N1ZSAjMTE2MTA6IEludHJvZHVjZSBhIG1vcmUgZ2VuZXJhbCB3YXkgdG8gZGVjbGFyZSBhYnN0cmFjdCBwcm9wZXJ0aWVzLgorCistIElzc3VlICMxMzU5MTogQSBidWcgaW4gaW1wb3J0bGliIGhhcyBiZWVuIGZpeGVkIHRoYXQgY2F1c2VkIGltcG9ydF9tb2R1bGUKKyAgdG8gbG9hZCBhIG1vZHVsZSB0d2ljZS4KKworLSBJc3N1ZSAjNDYyNTogSWYgSURMRSBjYW5ub3Qgd3JpdGUgdG8gaXRzIHJlY2VudCBmaWxlIG9yIGJyZWFrcG9pbnQgZmlsZXMsCisgIGRpc3BsYXkgYSBtZXNzYWdlIHBvcHVwIGFuZCBjb250aW51ZSByYXRoZXIgdGhhbiBjcmFzaC4gIE9yaWdpbmFsIHBhdGNoIGJ5CisgIFJvZ2VyIFNlcnd5LgorCistIElzc3VlICMxMzQ0OSBzY2hlZC5zY2hlZHVsZXIucnVuKCkgbWV0aG9kIGhhcyBhIG5ldyAiYmxvY2tpbmciIHBhcmFtZXRlciB3aGljaAorICB3aGVuIHNldCB0byBGYWxzZSBtYWtlcyBydW4oKSBleGVjdXRlIHRoZSBzY2hlZHVsZWQgZXZlbnRzIGR1ZSB0byBleHBpcmUKKyAgc29vbmVzdCAoaWYgYW55KSBhbmQgdGhlbiByZXR1cm4uICBQYXRjaCBieSBHaWFtcGFvbG8gUm9kb2zDoC4KKworLSBJc3N1ZSAjODY4NCBzY2hlZC5zY2hlZHVsZXIgY2xhc3MgY2FuIGJlIHNhZmVseSB1c2VkIGluIG11bHRpLXRocmVhZGVkCisgIGVudmlyb25tZW50cy4gIFBhdGNoIGJ5IEpvc2lhaCBDYXJsc29uIGFuZCBHaWFtcGFvbG8gUm9kb2zDoC4KKworLSBBbGlhcyByZXNvdXJjZS5lcnJvciB0byBPU0Vycm9yIGFsYSBQRVAgMzE1MS4KKworLSBJc3N1ZSAjNTY4OTogQWRkIHN1cHBvcnQgZm9yIGx6bWEgY29tcHJlc3Npb24gdG8gdGhlIHRhcmZpbGUgbW9kdWxlLgorCistIElzc3VlICMxMzI0ODogVHVybiAzLjIncyBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nIGludG8gMy4zJ3MKKyAgRGVwcmVjYXRpb25XYXJuaW5nLiAgSXQgY292ZXJzICdjZ2kuZXNjYXBlJywgJ2ltcG9ydGxpYi5hYmMuUHlMb2FkZXInLAorICAnaW1wb3J0bGliLmFiYy5QeVB5Y0xvYWRlcicsICdubnRwbGliLk5OVFAueGd0aXRsZScsICdubnRwbGliLk5OVFAueHBhdGgnLAorICBhbmQgcHJpdmF0ZSBhdHRyaWJ1dGVzIG9mICdzbXRwZC5TTVRQQ2hhbm5lbCcuCisKKy0gSXNzdWUgIzU5MDUsICMxMzU2MDogdGltZS5zdHJmdGltZSgpIGlzIG5vdyB1c2luZyB0aGUgY3VycmVudCBsb2NhbGUKKyAgZW5jb2RpbmcsIGluc3RlYWQgb2YgVVRGLTgsIGlmIHRoZSB3Y3NmdGltZSgpIGZ1bmN0aW9uIGlzIG5vdCBhdmFpbGFibGUuCisKKy0gSXNzdWUgIzg2NDE6IFVwZGF0ZSBJRExFIDMgc3ludGF4IGNvbG9yaW5nIHRvIHJlY29nbml6ZSBiIi4uIiBhbmQgbm90IHUiLi4iLgorICBQYXRjaCBieSBUYWwgRWluYXQuCisKKy0gSXNzdWUgIzEzNDY0OiBBZGQgYSByZWFkaW50bygpIG1ldGhvZCB0byBodHRwLmNsaWVudC5IVFRQUmVzcG9uc2UuICBQYXRjaAorICBieSBKb24gS3Vobi4KKworLSB0YXJmaWxlLnB5OiBDb3JyZWN0bHkgZGV0ZWN0IGJ6aXAyIGNvbXByZXNzZWQgc3RyZWFtcyB3aXRoIGJsb2Nrc2l6ZXMKKyAgb3RoZXIgdGhhbiA5MDBrLgorCistIElzc3VlICMxMzQzOTogRml4IG1hbnkgZXJyb3JzIGluIHR1cnRsZSBkb2NzdHJpbmdzLgorCistIElzc3VlICM2NzE1OiBBZGQgYSBtb2R1bGUgJ2x6bWEnIGZvciBjb21wcmVzc2lvbiB1c2luZyB0aGUgTFpNQSBhbGdvcml0aG0uCisgIFRoYW5rcyB0byBQZXIgw5h5dmluZCBLYXJsc2VuIGZvciB0aGUgaW5pdGlhbCBpbXBsZW1lbnRhdGlvbi4KKworLSBJc3N1ZSAjMTM0ODc6IE1ha2UgaW5zcGVjdC5nZXRtb2R1bGUgcm9idXN0IGFnYWluc3QgY2hhbmdlcyBkb25lIHRvCisgIHN5cy5tb2R1bGVzIHdoaWxlIGl0IGlzIGl0ZXJhdGluZyBvdmVyIGl0LgorCistIElzc3VlICMxMjYxODogRml4IGEgYnVnIHRoYXQgcHJldmVudGVkIHB5X2NvbXBpbGUgZnJvbSBjcmVhdGluZyBieXRlCisgIGNvbXBpbGVkIGZpbGVzIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4gIEluaXRpYWwgcGF0Y2ggYnkgU2pvZXJkIGRlIFZyaWVzLgorCistIElzc3VlICMxMzQ0NDogV2hlbiBzdGRvdXQgaGFzIGJlZW4gY2xvc2VkIGV4cGxpY2l0bHksIHdlIHNob3VsZCBub3QgYXR0ZW1wdAorICB0byBmbHVzaCBpdCBhdCBzaHV0ZG93biBhbmQgcHJpbnQgYW4gZXJyb3IuCisKKy0gSXNzdWUgIzEyNTY3OiBUaGUgY3Vyc2VzIG1vZHVsZSB1c2VzIFVuaWNvZGUgZnVuY3Rpb25zIGZvciBVbmljb2RlIGFyZ3VtZW50cworICB3aGVuIGl0IGlzIGxpbmtlZCB0byB0aGUgbmN1cnNlcyBsaWJyYXJ5LiBJdCBlbmNvZGVzIGFsc28gVW5pY29kZSBzdHJpbmdzIHRvCisgIHRoZSBsb2NhbGUgZW5jb2RpbmcgaW5zdGVhZCBvZiBVVEYtOC4KKworLSBJc3N1ZSAjMTI4NTY6IEVuc3VyZSBjaGlsZCBwcm9jZXNzZXMgZG8gbm90IGluaGVyaXQgdGhlIHBhcmVudCdzIHJhbmRvbQorICBzZWVkIGZvciBmaWxlbmFtZSBnZW5lcmF0aW9uIGluIHRoZSB0ZW1wZmlsZSBtb2R1bGUuICBQYXRjaCBieSBCcmlhbgorICBIYXJyaW5nLgorCistIElzc3VlICM5OTU3OiBTcG9vbGVkVGVtcG9yYXJ5RmlsZS50cnVuY2F0ZSgpIG5vdyBhY2NlcHRzIGFuIG9wdGlvbmFsIHNpemUKKyAgcGFyYW1ldGVyLCBhcyBvdGhlciBmaWxlLWxpa2Ugb2JqZWN0cy4gIFBhdGNoIGJ5IFJ5YW4gS2VsbHkuCisKKy0gSXNzdWUgIzEzNDU4OiBGaXggYSBtZW1vcnkgbGVhayBpbiB0aGUgc3NsIG1vZHVsZSB3aGVuIGRlY29kaW5nIGEKKyAgY2VydGlmaWNhdGUgd2l0aCBhIHN1YmplY3RBbHROYW1lLiAgUGF0Y2ggYnkgUm9iZXJ0IFhpYW8uCisKKy0gSXNzdWUgIzEzNDE1OiBvcy51bnNldGVudigpIGRvZXNuJ3QgaWdub3JlIGVycm9ycyBhbnltb3JlLgorCistIElzc3VlICMxMzI0NTogc2NoZWQuc2NoZWR1bGVyIGNsYXNzIGNvbnN0cnVjdG9yJ3MgdGltZWZ1bmMgYW5kCisgIGRlbGF5ZnVuY3QgcGFyYW1ldGVycyBhcmUgbm93IG9wdGlvbmFsLgorICBzY2hlZHVsZXIuZW50ZXIgYW5kIHNjaGVkdWxlci5lbnRlcmFicyBtZXRob2RzIGdhaW5lZCBhIG5ldyBrd2FyZ3MgcGFyYW1ldGVyLgorICBQYXRjaCBjb250cmlidXRlZCBieSBDaHJpcyBDbGFyay4KKworLSBJc3N1ZSAjMTIzMjg6IFVuZGVyIFdpbmRvd3MsIHJlZmFjdG9yIGhhbmRsaW5nIG9mIEN0cmwtQyBldmVudHMgYW5kCisgIG1ha2UgX211bHRpcHJvY2Vzc2luZy53aW4zMi5XYWl0Rm9yTXVsdGlwbGVPYmplY3RzIGludGVycnVwdGlibGUgd2hlbgorICB0aGUgd2FpdF9mbGFnIHBhcmFtZXRlciBpcyBmYWxzZS4gIFBhdGNoIGJ5IHNidC4KKworLSBJc3N1ZSAjMTMzMjI6IEZpeCBCdWZmZXJlZFdyaXRlci53cml0ZSgpIHRvIGVuc3VyZSB0aGF0IEJsb2NraW5nSU9FcnJvciBpcworICByYWlzZWQgd2hlbiB0aGUgd3JhcHBlZCByYXcgZmlsZSBpcyBub24tYmxvY2tpbmcgYW5kIHRoZSB3cml0ZSB3b3VsZCBibG9jay4KKyAgUHJldmlvdXMgY29kZSBhc3N1bWVkIHRoYXQgdGhlIHJhdyB3cml0ZSgpIHdvdWxkIHJhaXNlIEJsb2NraW5nSU9FcnJvciwgYnV0CisgIFJhd0lPQmFzZS53cml0ZSgpIGlzIGRlZmluZWQgdG8gcmV0dXJuZWQgTm9uZSB3aGVuIHRoZSBjYWxsIHdvdWxkIGJsb2NrLgorICBQYXRjaCBieSBzYnQuCisKKy0gSXNzdWUgIzEzMzU4OiBIVE1MUGFyc2VyIG5vdyBjYWxscyBoYW5kbGVfZGF0YSBvbmx5IG9uY2UgZm9yIGVhY2ggQ0RBVEEuCisKKy0gSXNzdWUgIzQxNDc6IG1pbmlkb20ncyB0b3ByZXR0eXhtbCBubyBsb25nZXIgYWRkcyB3aGl0ZXNwYWNlIGFyb3VuZCBhIHRleHQKKyAgbm9kZSB3aGVuIGl0IGlzIHRoZSBvbmx5IGNoaWxkIG9mIGFuIGVsZW1lbnQuICBJbml0aWFsIHBhdGNoIGJ5IERhbgorICBLZW5pZ3NiZXJnLgorCistIElzc3VlICMxMzM3NDogVGhlIFdpbmRvd3MgYnl0ZXMgQVBJIGhhcyBiZWVuIGRlcHJlY2F0ZWQgaW4gdGhlIG9zIG1vZHVsZS4gVXNlCisgIFVuaWNvZGUgZmlsZW5hbWVzIGluc3RlYWQgb2YgYnl0ZXMgZmlsZW5hbWVzIHRvIG5vdCBkZXBlbmQgb24gdGhlIEFOU0kgY29kZQorICBwYWdlIGFueW1vcmUgYW5kIHRvIHN1cHBvcnQgYW55IGZpbGVuYW1lLgorCistIElzc3VlICMxMzI5NzogVXNlIGJ5dGVzIHR5cGUgdG8gc2VuZCBhbmQgcmVjZWl2ZSBiaW5hcnkgZGF0YSB0aHJvdWdoIFhNTFJQQy4KKworLSBJc3N1ZSAjNjM5NzogU3VwcG9ydCAiL2Rldi9wb2xsIiBwb2xsaW5nIG9iamVjdHMgaW4gc2VsZWN0IG1vZHVsZSwKKyAgdW5kZXIgU29sYXJpcyAmIGRlcml2YXRpdmVzLgorCistIElzc3VlcyAjMTc0NTc2MSwgIzc1NTY3MCwgIzEzMzU3LCAjMTI2MjksICMxMjAwMzEzOiBIVE1MUGFyc2VyIG5vdyBjb3JyZWN0bHkKKyAgaGFuZGxlcyBub24tdmFsaWQgYXR0cmlidXRlcywgaW5jbHVkaW5nIGFkamFjZW50IGFuZCB1bnF1b3RlZCBhdHRyaWJ1dGVzLgorCistIElzc3VlICMxMzE5MzogRml4IGRpc3R1dGlscy5maWxlbGlzdC5GaWxlTGlzdCBhbmQgcGFja2FnaW5nLm1hbmlmZXN0Lk1hbmlmZXN0CisgIHVuZGVyIFdpbmRvd3MuCisKKy0gSXNzdWUgIzEzMzg0OiBSZW1vdmUgdW5uZWNlc3NhcnkgX19mdXR1cmVfXyBpbXBvcnQgaW4gTGliL3JhbmRvbS5weQorCistIElzc3VlICMxMzE0OTogU3BlZWQgdXAgYXBwZW5kLW9ubHkgU3RyaW5nSU8gb2JqZWN0cy4KKworLSBJc3N1ZSAjMTMzNzM6IG11bHRpcHJvY2Vzc2luZy5RdWV1ZS5nZXQoKSBjb3VsZCBzb21ldGltZXMgYmxvY2sgaW5kZWZpbml0ZWx5CisgIHdoZW4gY2FsbGVkIHdpdGggYSB0aW1lb3V0LiAgUGF0Y2ggYnkgQXJuYXVkIFlzbWFsLgorCistIElzc3VlICMxMzI1NDogRml4IE1haWxkaXIgaW5pdGlhbGl6YXRpb24gc28gdGhhdCBtYWlsZGlyIGNvbnRlbnRzCisgIGFyZSByZWFkIGNvcnJlY3RseS4KKworLSBJc3N1ZSAjMzA2NzogbG9jYWxlLnNldGxvY2FsZSgpIG5vdyByYWlzZXMgVHlwZUVycm9yIGlmIHRoZSBzZWNvbmQKKyAgYXJndW1lbnQgaXMgYW4gaW52YWxpZCBpdGVyYWJsZS4gSXRzIGRvY3VtZW50YXRpb24gYW5kIGRvY3N0cmluZworICB3ZXJlIGFsc28gdXBkYXRlZC4gSW5pdGlhbCBwYXRjaCBieSBKeXJraSBQdWxsaWFpbmVuLgorCistIElzc3VlICMxMzE0MDogRml4IHRoZSBkYWVtb25fdGhyZWFkcyBhdHRyaWJ1dGUgb2YgVGhyZWFkaW5nTWl4SW4uCisKKy0gSXNzdWUgIzEzMzM5OiBGaXggY29tcGlsZSBlcnJvciBpbiBwb3NpeG1vZHVsZS5jIGR1ZSB0byBtaXNzaW5nIHNlbWljb2xvbi4KKyAgVGhhbmtzIHRvIFJvYmVydCBYaWFvLgorCistIEJ5dGUgY29tcGlsYXRpb24gaW4gcGFja2FnaW5nIGlzIG5vdyBpc29sYXRlZCBmcm9tIHRoZSBjYWxsaW5nIFB5dGhvbiAtQiBvcgorICAtTyBvcHRpb25zLCBpbnN0ZWFkIG9mIGJlaW5nIGRpc2FsbG93ZWQgdW5kZXIgLUIgb3IgYnVnZ3kgdW5kZXIgLU8uCisKKy0gSXNzdWUgIzEwNTcwOiBjdXJzZXMucHV0cCgpIGFuZCBjdXJzZXMudHBhcm0oKSBhcmUgbm93IGV4cGVjdGluZyBhIGJ5dGUKKyAgc3RyaW5nLCBpbnN0ZWFkIG9mIGEgVW5pY29kZSBzdHJpbmcuCisKKy0gSXNzdWUgIzEzMjk1OiBodHRwLnNlcnZlciBub3cgcHJvZHVjZXMgdmFsaWQgSFRNTCA0LjAxIHN0cmljdC4KKworLSBJc3N1ZSAjMjg5MjogcHJlc2VydmUgaXRlcnBhcnNlIGV2ZW50cyBpbiBjYXNlIG9mIFN5bnRheEVycm9yLgorCistIElzc3VlICMxMzI4NzogdXJsbGliLnJlcXVlc3QgYW5kIHVybGxpYi5lcnJvciBub3cgY29udGFpbnMgYW4gX19hbGxfXworICBhdHRyaWJ1dGUgdG8gZXhwb3NlIG9ubHkgcmVsZXZhbnQgY2xhc3NlcyBhbmQgZnVuY3Rpb25zLiAgUGF0Y2ggYnkgRmxvcmVudAorICBYaWNsdW5hLgorCistIElzc3VlICM2NzA2NjQ6IEZpeCBIVE1MUGFyc2VyIHRvIGNvcnJlY3RseSBoYW5kbGUgdGhlIGNvbnRlbnQgb2YKKyAgYGA8c2NyaXB0Pi4uLjwvc2NyaXB0PmBgIGFuZCBgYDxzdHlsZT4uLi48L3N0eWxlPmBgLgorCistIElzc3VlICMxMDgxNzogRml4IHVybHJldHJpZXZlIGZ1bmN0aW9uIHRvIHJhaXNlIENvbnRlbnRUb29TaG9ydEVycm9yIGV2ZW4KKyAgd2hlbiByZXBvcnRob29rIGlzIE5vbmUuIFBhdGNoIGJ5IEp5cmtpIFB1bGxpYWluZW4uCisKKy0gSXNzdWUgIzEzMjk2OiBGaXggSURMRSB0byBjbGVhciBjb21waWxlIF9fZnV0dXJlX18gZmxhZ3Mgb24gc2hlbGwgcmVzdGFydC4KKyAgKFBhdGNoIGJ5IFJvZ2VyIFNlcnd5KQorCistIEZpeCB0aGUgeG1scnBjLmNsaWVudCB1c2VyIGFnZW50IHRvIHJldHVybiBzb21ldGhpbmcgc2ltaWxhciB0bworICB1cmxsaWIucmVxdWVzdCB1c2VyIGFnZW50OiAiUHl0aG9uLXhtbHJwYy8zLjMiLgorCistIElzc3VlICMxMzI5MzogQmV0dGVyIGVycm9yIG1lc3NhZ2Ugd2hlbiB0cnlpbmcgdG8gbWFyc2hhbCBieXRlcyB1c2luZworICB4bWxycGMuY2xpZW50LgorCistIElzc3VlICMxMzI5MTogTmFtZUVycm9yIGluIHhtbHJwYyBwYWNrYWdlLgorCistIElzc3VlICMxMzI1ODogVXNlIGNhbGxhYmxlKCkgYnVpbHQtaW4gaW4gdGhlIHN0YW5kYXJkIGxpYnJhcnkuCisKKy0gSXNzdWUgIzEzMjczOiBmaXggYSBidWcgdGhhdCBwcmV2ZW50ZWQgSFRNTFBhcnNlciB0byBwcm9wZXJseSBkZXRlY3Qgc29tZQorICB0YWdzIHdoZW4gc3RyaWN0PUZhbHNlLgorCistIElzc3VlICMxMTE4MzogQWRkIGZpbmVyLWdyYWluZWQgZXhjZXB0aW9ucyB0byB0aGUgc3NsIG1vZHVsZSwgc28gdGhhdAorICB5b3UgZG9uJ3QgaGF2ZSB0byBpbnNwZWN0IHRoZSBleGNlcHRpb24ncyBhdHRyaWJ1dGVzIGluIHRoZSBjb21tb24gY2FzZS4KKworLSBJc3N1ZSAjMTMyMTY6IEFkZCBjcDY1MDAxIGNvZGVjLCB0aGUgV2luZG93cyBVVEYtOCAoQ1BfVVRGOCkuCisKKy0gSXNzdWUgIzEzMjI2OiBBZGQgUlRMRF94eHggY29uc3RhbnRzIHRvIHRoZSBvcyBtb2R1bGUuIFRoZXNlIGNvbnN0YW50cyBjYW4gYmUKKyAgdXNlZCB3aXRoIHN5cy5zZXRkbG9wZW5mbGFncygpLgorCistIElzc3VlICMxMDI3ODogQWRkIGNsb2NrX2dldHJlcygpLCBjbG9ja19nZXR0aW1lKCkgYW5kIENMT0NLX3h4eCBjb25zdGFudHMgdG8KKyAgdGhlIHRpbWUgbW9kdWxlLiB0aW1lLmNsb2NrX2dldHRpbWUodGltZS5DTE9DS19NT05PVE9OSUMpIHByb3ZpZGVzIGEKKyAgbW9ub3RvbmljIGNsb2NrCisKKy0gSXNzdWUgIzEwMzMyOiBtdWx0aXByb2Nlc3Npbmc6IGZpeCBhIHJhY2UgY29uZGl0aW9uIHdoZW4gYSBQb29sIGlzIGNsb3NlZAorICBiZWZvcmUgYWxsIHRhc2tzIGhhdmUgY29tcGxldGVkLgorCistIElzc3VlICMxMzI1NTogd3JvbmcgZG9jc3RyaW5ncyBpbiBhcnJheSBtb2R1bGUuCisKKy0gSXNzdWUgIzg1NDA6IFJlbW92ZSBkZXByZWNhdGVkIENvbnRleHQuX2NsYW1wIGF0dHJpYnV0ZSBpbiBEZWNpbWFsIG1vZHVsZS4KKworLSBJc3N1ZSAjMTMyMzU6IEFkZGVkIERlcHJlY2F0aW9uV2FybmluZyB0byBsb2dnaW5nLndhcm4oKSBtZXRob2QgYW5kIGZ1bmN0aW9uLgorCistIElzc3VlICM5MTY4OiBub3cgc210cGQgaXMgYWJsZSB0byBiaW5kIHByaXZpbGVnZWQgcG9ydC4KKworLSBJc3N1ZSAjMTI1Mjk6IGZpeCBjZ2kucGFyc2VfaGVhZGVyIGlzc3VlIG9uIHN0cmluZ3Mgd2l0aCBkb3VibGUtcXVvdGVzIGFuZAorICBzZW1pY29sb25zIHRvZ2V0aGVyLiBQYXRjaCBieSBCZW4gRGFybmVsbCBhbmQgUGV0cmkgTGVodGluZW4uCisKKy0gSXNzdWUgIzEzMjI3OiBmdW5jdG9vbHMubHJ1X2NhY2hlKCkgbm93IGhhcyBhbiBvcHRpb24gdG8gZGlzdGluZ3Vpc2gKKyAgY2FsbHMgd2l0aCBkaWZmZXJlbnQgYXJndW1lbnQgdHlwZXMuCisKKy0gSXNzdWUgIzYwOTA6IHppcGZpbGUgcmFpc2VzIGEgVmFsdWVFcnJvciB3aGVuIGEgZG9jdW1lbnQgd2l0aCBhIHRpbWVzdGFtcAorICBlYXJsaWVyIHRoYW4gMTk4MCBpcyBwcm92aWRlZC4gUGF0Y2ggY29udHJpYnV0ZWQgYnkgUGV0cmkgTGVodGluZW4uCisKKy0gSXNzdWUgIzEzMTUwOiBzeXNjb25maWcgbm8gbG9uZ2VyIHBhcnNlcyB0aGUgTWFrZWZpbGUgYW5kIGNvbmZpZy5oIGZpbGVzCisgIHdoZW4gaW1wb3J0ZWQsIGluc3RlYWQgZG9pbmcgaXQgYXQgYnVpbGQgdGltZS4gIFRoaXMgbWFrZXMgaW1wb3J0aW5nCisgIHN5c2NvbmZpZyBmYXN0ZXIgYW5kIHJlZHVjZXMgUHl0aG9uIHN0YXJ0dXAgdGltZSBieSAyMCUuCisKKy0gSXNzdWUgIzEyNDQ4OiBzbXRwbGliIG5vdyBmbHVzaGVzIHN0ZG91dCB3aGlsZSBydW5uaW5nIGBgcHl0aG9uIC1tIHNtdHBsaWJgYAorICBpbiBvcmRlciB0byBkaXNwbGF5IHRoZSBwcm9tcHQgY29ycmVjdGx5LgorCistIElzc3VlICMxMjQ1NDogVGhlIG1haWxib3ggbW9kdWxlIGlzIG5vdyB1c2luZyBBU0NJSSwgaW5zdGVhZCBvZiB0aGUgbG9jYWxlCisgIGVuY29kaW5nLCB0byByZWFkIGFuZCB3cml0ZSAubWhfc2VxdWVuY2VzIGZpbGVzLgorCistIElzc3VlICMxMzE5NDogemxpYi5jb21wcmVzc29iaigpLmNvcHkoKSBhbmQgemxpYi5kZWNvbXByZXNzb2JqKCkuY29weSgpIGFyZQorICBub3cgYXZhaWxhYmxlIG9uIFdpbmRvd3MuCisKKy0gSXNzdWUgIzE2NzMwMDc6IHVybGxpYi5yZXF1ZXN0IG5vdyBzdXBwb3J0cyBIRUFEIHJlcXVlc3QgdmlhIG5ldyBtZXRob2QgYXJndW1lbnQuCisgIFBhdGNoIGNvbnRyaWJ1dGlvbnMgYnkgRGF2aWQgU3RhbmVrLCBQYXRyaWNrIFdlc3RlcmhvZmYgYW5kIEV6aW8gTWVsb3R0aS4KKworLSBJc3N1ZSAjMTIzODY6IHBhY2thZ2luZyBkb2VzIG5vdCBmYWlsIGFueW1vcmUgd2hlbiB3cml0aW5nIHRoZSBSRVNPVVJDRVMKKyAgZmlsZS4KKworLSBJc3N1ZSAjMTMxNTg6IEZpeCBkZWNvZGluZyBhbmQgZW5jb2Rpbmcgb2YgR05VIHRhciBzcGVjaWZpYyBiYXNlLTI1NiBudW1iZXIKKyAgZmllbGRzIGluIHRhcmZpbGUuCisKKy0gSXNzdWUgIzEzMDI1OiBtaW1ldHlwZXMgaXMgbm93IHJlYWRpbmcgTUlNRSB0eXBlcyB1c2luZyB0aGUgVVRGLTggZW5jb2RpbmcsCisgIGluc3RlYWQgb2YgdGhlIGxvY2FsZSBlbmNvZGluZy4KKworLSBJc3N1ZSAjMTA2NTM6IE9uIFdpbmRvd3MsIHVzZSBzdHJmdGltZSgpIGluc3RlYWQgb2Ygd2NzZnRpbWUoKSBiZWNhdXNlCisgIHdjc2Z0aW1lKCkgZG9lc24ndCBmb3JtYXQgdGltZSB6b25lIGNvcnJlY3RseS4KKworLSBJc3N1ZSAjMTMxNTA6IFRoZSB0b2tlbml6ZSBtb2R1bGUgZG9lc24ndCBjb21waWxlIGxhcmdlIHJlZ3VsYXIgZXhwcmVzc2lvbnMKKyAgYXQgc3RhcnR1cCBhbnltb3JlLgorCistIElzc3VlICMxMTE3MTogRml4IGRpc3R1dGlscy5zeXNjb25maWcuZ2V0X21ha2VmaWxlX2ZpbGVuYW1lIHdoZW4gUHl0aG9uIHdhcworICBjb25maWd1cmVkIHdpdGggZGlmZmVyZW50IHByZWZpeCBhbmQgZXhlYy1wcmVmaXguCisKKy0gSXNzdWUgIzExMjU0OiBUZWFjaCBkaXN0dXRpbHMgYW5kIHBhY2thZ2luZyB0byBjb21waWxlIC5weWMgYW5kIC5weW8gZmlsZXMgaW4KKyAgUEVQIDMxNDctY29tcGxpYW50IF9fcHljYWNoZV9fIGRpcmVjdG9yaWVzLgorCistIElzc3VlICM3MzY3OiBGaXggcGtndXRpbC53YWxrX3BhdGhzIHRvIHNraXAgZGlyZWN0b3JpZXMgd2hvc2UKKyAgY29udGVudHMgY2Fubm90IGJlIHJlYWQuCisKKy0gSXNzdWUgIzMxNjM6IFRoZSBzdHJ1Y3QgbW9kdWxlIGdldHMgbmV3IGZvcm1hdCBjaGFyYWN0ZXJzICduJyBhbmQgJ04nCisgIHN1cHBvcnRpbmcgQyBpbnRlZ2VyIHR5cGVzIGBgc3NpemVfdGBgIGFuZCBgYHNpemVfdGBgLCByZXNwZWN0aXZlbHkuCisKKy0gSXNzdWUgIzEzMDk5OiBGaXggc3FsaXRlMy5DdXJzb3IubGFzdHJvd2lkIHVuZGVyIGEgVHVya2lzaCBsb2NhbGUuCisgIFJlcG9ydGVkIGFuZCBkaWFnbm9zZWQgYnkgVGhvbWFzIEtsdXl2ZXIuCisKKy0gSXNzdWUgIzEzMDg3OiBCdWZmZXJlZFJlYWRlci5zZWVrKCkgbm93IGFsd2F5cyByYWlzZXMgVW5zdXBwb3J0ZWRPcGVyYXRpb24KKyAgaWYgdGhlIHVuZGVybHlpbmcgcmF3IHN0cmVhbSBpcyB1bnNlZWthYmxlLCBldmVuIGlmIHRoZSBzZWVrIGNvdWxkIGJlCisgIHNhdGlzZmllZCB1c2luZyB0aGUgaW50ZXJuYWwgYnVmZmVyLiAgUGF0Y2ggYnkgSm9obiBPJ0Nvbm5vci4KKworLSBJc3N1ZSAjNzY4OTogQWxsb3cgcGlja2xpbmcgb2YgZHluYW1pY2FsbHkgY3JlYXRlZCBjbGFzc2VzIHdoZW4gdGhlaXIKKyAgbWV0YWNsYXNzIGlzIHJlZ2lzdGVyZWQgd2l0aCBjb3B5cmVnLiAgUGF0Y2ggYnkgTmljb2xhcyBNLiBUaGnDqXJ5IGFuZCBDcmFpZworICBDaXRyby4KKworLSBJc3N1ZSAjMTMwMzQ6IFdoZW4gZGVjb2Rpbmcgc29tZSBTU0wgY2VydGlmaWNhdGVzLCB0aGUgc3ViamVjdEFsdE5hbWUKKyAgZXh0ZW5zaW9uIGNvdWxkIGJlIHVucmVwb3J0ZWQuCisKKy0gSXNzdWUgIzk4NzE6IFByZXZlbnQgSURMRSAzIGNyYXNoIHdoZW4gZ2l2ZW4gYnl0ZSBzdGluZ3MKKyAgd2l0aCBpbnZhbGlkIGhleCBlc2NhcGUgc2VxdWVuY2VzLCBsaWtlIGInXHgwJy4KKyAgKE9yaWdpbmFsIHBhdGNoIGJ5IENsYXVkaXUgUG9wYS4pCisKKy0gSXNzdWUgIzEyMzA2OiBFeHBvc2UgdGhlIHJ1bnRpbWUgdmVyc2lvbiBvZiB0aGUgemxpYiBDIGxpYnJhcnkgYXMgYSBjb25zdGFudCwKKyAgWkxJQl9SVU5USU1FX1ZFUlNJT04sIGluIHRoZSB6bGliIG1vZHVsZS4gUGF0Y2ggYnkgVG9yc3RlbiBMYW5kc2Nob2ZmLgorCistIElzc3VlICMxMjk1OTogQWRkIGNvbGxlY3Rpb25zLkNoYWluTWFwIHRvIGNvbGxlY3Rpb25zLl9fYWxsX18uCisKKy0gSXNzdWUgIzg5MzM6IGRpc3R1dGlscycgUEtHLUlORk8gZmlsZXMgYW5kIHBhY2thZ2luZydzIE1FVEFEQVRBIGZpbGVzIHdpbGwKKyAgbm93IGNvcnJlY3RseSByZXBvcnQgTWV0YWRhdGEtVmVyc2lvbjogMS4xIGluc3RlYWQgb2YgMS4wIGlmIGEgQ2xhc3NpZmllciBvcgorICBEb3dubG9hZC1VUkwgZmllbGQgaXMgcHJlc2VudC4KKworLSBJc3N1ZSAjMTI1Njc6IEFkZCBjdXJzZXMudW5nZXRfd2NoKCkgZnVuY3Rpb24uIFB1c2ggYSBjaGFyYWN0ZXIgc28gdGhlIG5leHQKKyAgZ2V0X3djaCgpIHdpbGwgcmV0dXJuIGl0LgorCistIElzc3VlICM5NTYxOiBkaXN0dXRpbHMgYW5kIHBhY2thZ2luZyBub3cgd3JpdGVzIGVnZy1pbmZvIGZpbGVzIHVzaW5nIFVURi04LAorICBpbnN0ZWFkIG9mIHRoZSBsb2NhbGUgZW5jb2RpbmcuCisKKy0gSXNzdWUgIzgyODY6IFRoZSBkaXN0dXRpbHMgY29tbWFuZCBzZGlzdCB3aWxsIHByaW50IGEgd2FybmluZyBtZXNzYWdlIGluc3RlYWQKKyAgb2YgY3Jhc2hpbmcgd2hlbiBhbiBpbnZhbGlkIHBhdGggaXMgZ2l2ZW4gaW4gdGhlIG1hbmlmZXN0IHRlbXBsYXRlLgorCistIElzc3VlICMxMjg0MTogdGFyZmlsZSB1bm5lY2Vzc2FyaWx5IGNoZWNrZWQgdGhlIGV4aXN0ZW5jZSBvZiBudW1lcmljYWwgdXNlcgorICBhbmQgZ3JvdXAgaWRzIG9uIGV4dHJhY3Rpb24uIElmIG9uZSBvZiB0aGVtIGRpZCBub3QgZXhpc3QgdGhlIHJlc3BlY3RpdmUgaWQKKyAgb2YgdGhlIGN1cnJlbnQgdXNlciAoaS5lLiByb290KSB3YXMgdXNlZCBmb3IgdGhlIGZpbGUgYW5kIG93bmVyc2hpcAorICBpbmZvcm1hdGlvbiB3YXMgbG9zdC4KKworLSBJc3N1ZSAjMTI4ODg6IEZpeCBhIGJ1ZyBpbiBIVE1MUGFyc2VyLnVuZXNjYXBlIHRoYXQgcHJldmVudGVkIGl0IHRvIGVzY2FwZQorICBtb3JlIHRoYW4gMTI4IGVudGl0aWVzLiAgUGF0Y2ggYnkgUGV0ZXIgT3R0ZW4uCisKKy0gSXNzdWUgIzEyODc4OiBFeHBvc2UgYSBfX2RpY3RfXyBhdHRyaWJ1dGUgb24gaW8uSU9CYXNlIGFuZCBpdHMgc3ViY2xhc3Nlcy4KKworLSBJc3N1ZSAjMTI2MzY6IElETEUgcmVhZHMgdGhlIGNvZGluZyBjb29raWUgd2hlbiBleGVjdXRpbmcgYSBQeXRob24gc2NyaXB0LgorCistIElzc3VlICMxMjQ5NDogT24gZXJyb3IsIGNhbGwoKSwgY2hlY2tfY2FsbCgpLCBjaGVja19vdXRwdXQoKSBhbmQKKyAgZ2V0c3RhdHVzb3V0cHV0KCkgZnVuY3Rpb25zIG9mIHRoZSBzdWJwcm9jZXNzIG1vZHVsZSBub3cga2lsbCB0aGUgcHJvY2VzcywKKyAgcmVhZCBpdHMgc3RhdHVzICh0byBhdm9pZCB6b21iaXMpIGFuZCBjbG9zZSBwaXBlcy4KKworLSBJc3N1ZSAjMTI3MjA6IEV4cG9zZSBsb3ctbGV2ZWwgTGludXggZXh0ZW5kZWQgZmlsZSBhdHRyaWJ1dGUgZnVuY3Rpb25zIGluIG9zLgorCistIElzc3VlICMxMDk0NjogVGhlIGRpc3R1dGlscyBjb21tYW5kcyBiZGlzdF9kdW1iLCBiZGlzdF93aW5pbnN0IGFuZCBiZGlzdF9tc2kKKyAgbm93IHJlc3BlY3QgYSAtLXNraXAtYnVpbGQgb3B0aW9uIGdpdmVuIHRvIGJkaXN0LiAgVGhlIHBhY2thZ2luZyBjb21tYW5kcworICB3ZXJlIGZpeGVkIHRvby4KKworLSBJc3N1ZSAjMTI4NDc6IEZpeCBhIGNyYXNoIHdpdGggbmVnYXRpdmUgUFVUIGFuZCBMT05HX0JJTlBVVCBhcmd1bWVudHMgaW4KKyAgdGhlIEMgcGlja2xlIGltcGxlbWVudGF0aW9uLgorCistIElzc3VlICMxMTU2NDogQXZvaWQgY3Jhc2hlcyB3aGVuIHRyeWluZyB0byBwaWNrbGUgaHVnZSBvYmplY3RzIG9yIGNvbnRhaW5lcnMKKyAgKG1vcmUgdGhhbiAyKiozMSBpdGVtcykuICBJbnN0ZWFkLCBpbiBtb3N0IGNhc2VzLCBhbiBPdmVyZmxvd0Vycm9yIGlzIHJhaXNlZC4KKworLSBJc3N1ZSAjMTIyODc6IEZpeCBhIHN0YWNrIGNvcnJ1cHRpb24gaW4gb3NzYXVkaW9kZXYgbW9kdWxlIHdoZW4gdGhlIEZEIGlzCisgIGdyZWF0ZXIgdGhhbiBGRF9TRVRTSVpFLgorCistIElzc3VlICMxMjgzOTogRml4IGNyYXNoIGluIHpsaWIgbW9kdWxlIGR1ZSB0byB2ZXJzaW9uIG1pc21hdGNoLgorICBGaXggYnkgUmljaGFyZCBNLiBUZXcuCisKKy0gSXNzdWUgIzk5MjM6IFRoZSBtYWlsY2FwIG1vZHVsZSBub3cgY29ycmVjdGx5IHVzZXMgdGhlIHBsYXRmb3JtIHBhdGgKKyAgc2VwYXJhdG9yIGZvciB0aGUgTUFJTENBUCBlbnZpcm9ubWVudCB2YXJpYWJsZSBvbiBub24tUE9TSVggcGxhdGZvcm1zLgorCistIElzc3VlICMxMjgzNTogRm9sbG93IHVwIHRvICM2NTYwIHRoYXQgdW5jb25kaXRpb25hbGx5IHByZXZlbnRzIHVzZSBvZiB0aGUKKyAgdW5lbmNyeXB0ZWQgc2VuZG1zZy9yZWN2bXNnIEFQSXMgb24gU1NMIHdyYXBwZWQgc29ja2V0cy4gUGF0Y2ggYnkgRGF2aWQKKyAgV2F0c29uLgorCistIElzc3VlICMxMjgwMzogU1NMQ29udGV4dC5sb2FkX2NlcnRfY2hhaW4oKSBub3cgYWNjZXB0cyBhIHBhc3N3b3JkIGFyZ3VtZW50CisgIHRvIGJlIHVzZWQgaWYgdGhlIHByaXZhdGUga2V5IGlzIGVuY3J5cHRlZC4gIFBhdGNoIGJ5IEFkYW0gU2ltcGtpbnMuCisKKy0gSXNzdWUgIzExNjU3OiBGaXggc2VuZGluZyBmaWxlIGRlc2NyaXB0b3JzIG92ZXIgMjU1IG92ZXIgYSBtdWx0aXByb2Nlc3NpbmcKKyAgUGlwZS4KKworLSBJc3N1ZSAjMTI4MTE6IHRhYm5hbm55LmNoZWNrKCkgbm93IHByb21wdGx5IGNsb3NlcyBjaGVja2VkIGZpbGVzLiBQYXRjaCBieQorICBBbnRob255IEJyaWdncy4KKworLSBJc3N1ZSAjNjU2MDogVGhlIHNlbmRtc2cvcmVjdm1zZyBBUEkgaXMgbm93IGV4cG9zZWQgYnkgdGhlIHNvY2tldCBtb2R1bGUKKyAgd2hlbiBwcm92aWRlZCBieSB0aGUgdW5kZXJseWluZyBwbGF0Zm9ybSwgc3VwcG9ydGluZyBwcm9jZXNzaW5nIG9mCisgIGFuY2lsbGFyeSBkYXRhIGluIHB1cmUgUHl0aG9uIGNvZGUuIFBhdGNoIGJ5IERhdmlkIFdhdHNvbiBhbmQgSGVpa28gV3VuZHJhbS4KKworLSBJc3N1ZSAjMTIzMjY6IE9uIExpbnV4LCBzeXMucGxhdGZvcm0gZG9lc24ndCBjb250YWluIHRoZSBtYWpvciB2ZXJzaW9uCisgIGFueW1vcmUuIEl0IGlzIG5vdyBhbHdheXMgJ2xpbnV4JywgaW5zdGVhZCBvZiAnbGludXgyJyBvciAnbGludXgzJyBkZXBlbmRpbmcKKyAgb24gdGhlIExpbnV4IHZlcnNpb24gdXNlZCB0byBidWlsZCBQeXRob24uCisKKy0gSXNzdWUgIzEyMjEzOiBGaXggYSBidWZmZXJpbmcgYnVnIHdpdGggaW50ZXJsZWF2ZWQgcmVhZHMgYW5kIHdyaXRlcyB0aGF0CisgIGNvdWxkIGFwcGVhciBvbiBCdWZmZXJlZFJhbmRvbSBzdHJlYW1zLgorCistIElzc3VlICMxMjc3ODogUmVkdWNlIG1lbW9yeSBjb25zdW1wdGlvbiB3aGVuIEpTT04tZW5jb2RpbmcgYSBsYXJnZQorICBjb250YWluZXIgb2YgbWFueSBzbWFsbCBvYmplY3RzLgorCistIElzc3VlICMxMjY1MDogRml4IGEgcmFjZSBjb25kaXRpb24gd2hlcmUgYSBzdWJwcm9jZXNzLlBvcGVuIGNvdWxkIGxlYWsKKyAgcmVzb3VyY2VzIChGRC96b21iaWUpIHdoZW4ga2lsbGVkIGF0IHRoZSB3cm9uZyB0aW1lLgorCistIElzc3VlICMxMjc0NDogRml4IGluZWZmaWNpZW50IHJlcHJlc2VudGF0aW9uIG9mIGludGVnZXJzIGJldHdlZW4gMioqMzEgYW5kCisgIDIqKjYzIG9uIHN5c3RlbXMgd2l0aCBhIDY0LWJpdCBDICJsb25nIi4KKworLSBJc3N1ZSAjMTI2NDY6IEFkZCBhbiAnZW9mJyBhdHRyaWJ1dGUgdG8gemxpYi5EZWNvbXByZXNzLCB0byBtYWtlIGl0IGVhc2llciB0bworICBkZXRlY3QgdHJ1bmNhdGVkIGlucHV0IHN0cmVhbXMuCisKKy0gSXNzdWUgIzExNTEzOiBGaXggZXhjZXB0aW9uIGhhbmRsaW5nIGBgdGFyZmlsZS5UYXJGaWxlLmd6b3BlbigpYGAgd2hlbgorICB0aGUgZmlsZSBjYW5ub3QgYmUgb3BlbmVkLgorCistIElzc3VlICMxMjY4NzogRml4IGEgcG9zc2libGUgYnVmZmVyaW5nIGJ1ZyB3aGVuIHVucGlja2xpbmcgdGV4dCBtb2RlCisgIChwcm90b2NvbCAwLCBtb3N0bHkpIHBpY2tsZXMuCisKKy0gSXNzdWUgIzEwMDg3OiBGaXggdGhlIGh0bWwgb3V0cHV0IGZvcm1hdCBvZiB0aGUgY2FsZW5kYXIgbW9kdWxlLgorCistIElzc3VlICMxMjU0MDogUHJldmVudCB6b21iaWUgSURMRSBwcm9jZXNzZXMgb24gV2luZG93cyBkdWUgdG8gY2hhbmdlcworICBpbiBvcy5raWxsKCkuCisKKy0gSXNzdWUgIzEzMTIxOiBhZGQgc3VwcG9ydCBmb3IgaW5wbGFjZSBtYXRoIG9wZXJhdG9ycyB0byBjb2xsZWN0aW9ucy5Db3VudGVyLgorCistIEFkZCBzdXBwb3J0IGZvciB1bmFyeSBwbHVzIGFuZCB1bmFyeSBtaW51cyB0byBjb2xsZWN0aW9ucy5Db3VudGVyLgorCistIElzc3VlICMxMjY4MzogdXJscGFyc2UgdXBkYXRlZCB0byBpbmNsdWRlIHN2biBhcyBzY2hlbWVzIHRoYXQgdXNlcyByZWxhdGl2ZQorICBwYXRocy4gKHN2biBmcm9tIDEuNSBvbndhcmRzIHN1cHBvcnQgcmVsYXRpdmUgcGF0aCkuCisKKy0gSXNzdWUgIzEyNjU1OiBFeHBvc2UgZnVuY3Rpb25zIGZyb20gc2NoZWQuaCBpbiB0aGUgb3MgbW9kdWxlOiBzY2hlZF95aWVsZCgpLAorICBzY2hlZF9zZXRzY2hlZHVsZXIoKSwgc2NoZWRfZ2V0c2NoZWR1bGVyKCksIHNjaGVkX3NldHBhcmFtKCksCisgIHNjaGVkX2dldF9taW5fcHJpb3JpdHkoKSwgc2NoZWRfZ2V0X21heF9wcmlvcml0eSgpLCBzY2hlZF9ycl9nZXRfaW50ZXJ2YWwoKSwKKyAgc2NoZWRfZ2V0YWZmaW5pdHkoKSwgc2NoZWRfc2V0YWZmaW5pdHkoKS4KKworLSBBZGQgVGhyZWFkRXJyb3IgdG8gdGhyZWFkaW5nLl9fYWxsX18uCisKKy0gSXNzdWVzICMxMTEwNCwgIzg2ODg6IEZpeCB0aGUgYmVoYXZpb3Igb2YgZGlzdHV0aWxzJyBzZGlzdCBjb21tYW5kIHdpdGgKKyAgbWFudWFsbHktbWFpbnRhaW5lZCBNQU5JRkVTVCBmaWxlcy4KKworLSBJc3N1ZSAjMTEyODE6IHNtdHBsaWIuU1RNUCBnZXRzIHNvdXJjZV9hZGRyZXNzIHBhcmFtZXRlciwgd2hpY2ggYWRkcyB0aGUKKyAgYWJpbGl0eSB0byBiaW5kIHRvIHNwZWNpZmljIHNvdXJjZSBhZGRyZXNzIG9uIGEgbWFjaGluZSB3aXRoIG11bHRpcGxlCisgIGludGVyZmFjZXMuIFBhdGNoIGJ5IFBhdWxvIFNjYXJkaW5lLgorCistIElzc3VlICMxMjQ2NDogdGVtcGZpbGUuVGVtcG9yYXJ5RGlyZWN0b3J5LmNsZWFudXAoKSBzaG91bGQgbm90IGZvbGxvdworICBzeW1saW5rczogZml4IGl0LiBQYXRjaCBieSBQZXRyaSBMZWh0aW5lbi4KKworLSBJc3N1ZSAjODg4NzogInB5ZG9jIHNvbWVidWlsdGluLnNvbWVtZXRob2QiIChvciBoZWxwKCdzb21lYnVpbHRpbi5zb21lbWV0aG9kJykKKyAgaW4gUHl0aG9uIGNvZGUpIG5vdyBmaW5kcyB0aGUgZG9jIG9mIHRoZSBtZXRob2QuCisKKy0gSXNzdWUgIzEwOTY4OiBSZW1vdmUgaW5kaXJlY3Rpb24gaW4gdGhyZWFkaW5nLiAgVGhlIHB1YmxpYyBuYW1lcyAoRXZlbnQsCisgIENvbmRpdGlvbiwgZXRjLikgdXNlZCB0byBiZSBmYWN0b3J5IGZ1bmN0aW9ucyByZXR1cm5pbmcgaW5zdGFuY2VzIG9mIGhpZGRlbgorICBjbGFzc2VzIChfRXZlbnQsIF9Db25kaXRpb24sIGV0Yy4pLCBiZWNhdXNlIChpZiBHdWlkbyByZWNhbGxzIGNvcnJlY3RseSkgdGhpcworICBjb2RlIHByZS1kYXRlcyB0aGUgYWJpbGl0eSB0byBzdWJjbGFzcyBleHRlbnNpb24gdHlwZXMuICBJdCBpcyBub3cgcG9zc2libGUKKyAgdG8gaW5oZXJpdCBmcm9tIHRoZXNlIGNsYXNzZXMgd2l0aG91dCBoYXZpbmcgdG8gaW1wb3J0IHRoZSBwcml2YXRlCisgIHVuZGVyc2NvcmVkIG5hbWVzIGxpa2UgbXVsdGlwcm9jZXNzaW5nIGRpZC4KKworLSBJc3N1ZSAjOTcyMzogQWRkIHNobGV4LnF1b3RlIGZ1bmN0aW9ucywgdG8gZXNjYXBlIGZpbGVuYW1lcyBhbmQgY29tbWFuZAorICBsaW5lcy4KKworLSBJc3N1ZSAjMTI2MDM6IEZpeCBweWRvYy5zeW5vcHNpcygpIG9uIGZpbGVzIHdpdGggbm9uLW5lZ2F0aXZlIHN0X210aW1lLgorCistIElzc3VlICMxMjUxNDogVXNlIHRyeS9maW5hbGx5IHRvIGFzc3VyZSB0aGUgdGltZWl0IG1vZHVsZSByZXN0b3JlcyBnYXJiYWdlCisgIGNvbGxlY3Rpb25zIHdoZW4gaXQgaXMgZG9uZS4KKworLSBJc3N1ZSAjMTI2MDc6IEluIHN1YnByb2Nlc3MsIGZpeCBpc3N1ZSB3aGVyZSBpZiBzdGRpbiwgc3Rkb3V0IG9yIHN0ZGVyciBpcworICBnaXZlbiBhcyBhIGxvdyBmZCwgaXQgZ2V0cyBvdmVyd3JpdHRlbi4KKworLSBJc3N1ZSAjMTI1OTA6IElETEUgZWRpdG9yIHdpbmRvdyBub3cgYWx3YXlzIGRpc3BsYXlzIHRoZSBmaXJzdCBsaW5lCisgIHdoZW4gb3BlbmluZyBhIGxvbmcgZmlsZS4gIFdpdGggVGsgOC41LCB0aGUgZmlyc3QgbGluZSB3YXMgaGlkZGVuLgorCistIElzc3VlICMxMjU3NjogRml4IHVybG9wZW4gYmVoYXZpb3Igb24gc2l0ZXMgd2hpY2ggZG8gbm90IHNlbmQgKG9yIG9iZnVzY2F0ZXMpCisgIENvbm5lY3Rpb246Y2xvc2UgaGVhZGVyLgorCistIElzc3VlICMxMjEwMjogRG9jdW1lbnQgdGhhdCBidWZmZXJlZCBmaWxlcyBtdXN0IGJlIGZsdXNoZWQgYmVmb3JlIGJlaW5nIHVzZWQKKyAgd2l0aCBtbWFwLiBQYXRjaCBieSBTdGVmZmVuIERhb2RlIE51cnBtZXNvLgorCistIElzc3VlICMxMjU2MDogQnVpbGQgbGlicHl0aG9uLnNvIG9uIE9wZW5CU0QuIFBhdGNoIGJ5IFN0ZWZhbiBTcGVybGluZy4KKworLSBJc3N1ZSAjMTgxMzogRml4IGNvZGVjIGxvb2t1cCB1bmRlciBUdXJraXNoIGxvY2FsZXMuCisKKy0gSXNzdWUgIzEyNTkxOiBJbXByb3ZlIHN1cHBvcnQgb2YgInVuaXZlcnNhbCBuZXdsaW5lcyIgaW4gdGhlIHN1YnByb2Nlc3MKKyAgbW9kdWxlOiB0aGUgcGlwZWQgc3RyZWFtcyBjYW4gbm93IGJlIHByb3Blcmx5IHJlYWQgZnJvbSBvciB3cml0dGVuIHRvLgorCistIElzc3VlICMxMjU5MTogQWxsb3cgaW8uVGV4dElPV3JhcHBlciB0byB3b3JrIHdpdGggcmF3IElPIG9iamVjdHMgKHdpdGhvdXQKKyAgYSByZWFkMSgpIG1ldGhvZCksIGFuZCBhZGQgYSAqd3JpdGVfdGhyb3VnaCogcGFyYW1ldGVyIHRvIG1hbmRhdGUKKyAgdW5idWZmZXJlZCB3cml0ZXMuCisKKy0gSXNzdWUgIzEwODgzOiBGaXggc29ja2V0IGxlYWtzIGluIHVybGxpYi5yZXF1ZXN0IHdoZW4gdXNpbmcgRlRQLgorCistIElzc3VlICMxMjU5MjogTWFrZSBQeXRob24gYnVpbGQgb24gT3BlbkJTRCA1IChhbmQgZnV0dXJlIG1ham9yIHJlbGVhc2VzKS4KKworLSBJc3N1ZSAjMTIzNzI6IFBPU0lYIHNlbWFwaG9yZXMgYXJlIGJyb2tlbiBvbiBBSVg6IGRvbid0IHVzZSB0aGVtLgorCistIElzc3VlICMxMjU1MTogUHJvdmlkZSBhIGdldF9jaGFubmVsX2JpbmRpbmcoKSBtZXRob2Qgb24gU1NMIHNvY2tldHMgc28gYXMKKyAgdG8gZ2V0IGNoYW5uZWwgYmluZGluZyBkYXRhIGZvciB0aGUgY3VycmVudCBTU0wgc2Vzc2lvbiAob25seSB0aGUKKyAgInRscy11bmlxdWUiIGNoYW5uZWwgYmluZGluZyBpcyBpbXBsZW1lbnRlZCkuICBUaGlzIGFsbG93cyB0aGUgaW1wbGVtZW50YXRpb24KKyAgb2YgY2VydGFpbiBhdXRoZW50aWNhdGlvbiBtZWNoYW5pc21zIHN1Y2ggYXMgU0NSQU0tU0hBLTEtUExVUy4gIFBhdGNoIGJ5CisgIEphY2VrIEtvbmllY3pueS4KKworLSBJc3N1ZSAjNjY1MTk0OiBlbWFpbC51dGlscyBub3cgaGFzIGZvcm1hdF9kYXRldGltZSBhbmQgcGFyc2VkYXRlX3RvX2RhdGV0aW1lCisgIGZ1bmN0aW9ucywgYWxsb3dpbmcgZm9yIHJvdW5kIHRyaXBwaW5nIG9mIFJGQzI4MjIgZm9ybWF0IGRhdGVzLgorCistIElzc3VlICMxMjU3MTogQWRkIGEgcGxhdC1saW51eDMgZGlyZWN0b3J5IG1pcnJvcmluZyB0aGUgcGxhdC1saW51eDIKKyAgZGlyZWN0b3J5LCBzbyB0aGF0ICJpbXBvcnQgRExGQ04iIGFuZCBvdGhlciBzaW1pbGFyIGltcG9ydHMgd29yayBvbgorICBMaW51eCAzLjAuCisKKy0gSXNzdWUgIzc0ODQ6IHNtdHBsaWIgbm8gbG9uZ2VyIHB1dHMgPD4gYXJvdW5kIGFkZHJlc3NlcyBpbiBWUkZZIGFuZCBFWFBOCisgIGNvbW1hbmRzOyB0aGV5IGFyZW4ndCByZXF1aXJlZCBhbmQgaW4gZmFjdCBwb3N0Zml4IGRvZXNuJ3Qgc3VwcG9ydCB0aGF0IGZvcm0uCisKKy0gSXNzdWUgIzEyMjczOiBSZW1vdmUgYXN0Ll9fdmVyc2lvbl9fLiBBU1QgY2hhbmdlcyBjYW4gYmUgYWNjb3VudGVkIGZvciBieQorICBjaGVja2luZyBzeXMudmVyc2lvbl9pbmZvIG9yIHN5cy5fbWVyY3VyaWFsLgorCistIFNpbGVuY2Ugc3B1cmlvdXMgImJyb2tlbiBwaXBlIiB0cmFjZWJhY2tzIHdoZW4gc2h1dHRpbmcgZG93biBhCisgIFByb2Nlc3NQb29sRXhlY3V0b3IuCisKKy0gRml4IHBvdGVudGlhbCByZXNvdXJjZSBsZWFrcyBpbiBjb25jdXJyZW50LmZ1dHVyZXMuUHJvY2Vzc1Bvb2xFeGVjdXRvcgorICBieSBqb2luaW5nIGFsbCBxdWV1ZXMgYW5kIHByb2Nlc3NlcyB3aGVuIHNodXRkb3duKCkgaXMgY2FsbGVkLgorCistIElzc3VlICMxMTYwMzogRml4IGEgY3Jhc2ggd2hlbiBfX3N0cl9fIGlzIHJlYm91bmQgYXMgX19yZXByX18uICBQYXRjaCBieQorICBBbmRyZWFzIFN0w7xocmsuCisKKy0gSXNzdWUgIzExMzIxOiBGaXggYSBjcmFzaCB3aXRoIG11bHRpcGxlIGltcG9ydHMgb2YgdGhlIF9waWNrbGUgbW9kdWxlIHdoZW4KKyAgZW1iZWRkaW5nIFB5dGhvbi4gIFBhdGNoIGJ5IEFuZHJlYXMgU3TDvGhyay4KKworLSBJc3N1ZSAjNjc1NTogQWRkIGdldF93Y2goKSBtZXRob2QgdG8gY3Vyc2VzLndpbmRvdyBjbGFzcy4gUGF0Y2ggYnkgScOxaWdvCisgIFNlcm5hLgorCistIEFkZCBjZ2kuY2xvc2Vsb2coKSBmdW5jdGlvbiB0byBjbG9zZSB0aGUgbG9nIGZpbGUuCisKKy0gSXNzdWUgIzEyNTAyOiBhc3luY29yZTogZml4IHBvbGxpbmcgbG9vcCB3aXRoIEFGX1VOSVggc29ja2V0cy4KKworLSBJc3N1ZSAjNDM3NjogY3R5cGVzIG5vdyBzdXBwb3J0cyBuZXN0ZWQgc3RydWN0dXJlcyBpbiBhbiBlbmRpYW4gZGlmZmVyZW50IHRoYW4KKyAgdGhlIHBhcmVudCBzdHJ1Y3R1cmUuIFBhdGNoIGJ5IFZsYWQgUmlzY3V0aWEuCisKKy0gUmFpc2UgVmFsdWVFcnJvciB3aGVuIGF0dGVtcHRpbmcgdG8gc2V0IHRoZSBfQ0hVTktfU0laRSBhdHRyaWJ1dGUgb2YgYQorICBUZXh0SU9XcmFwcGVyIHRvIGEgaHVnZSB2YWx1ZSwgbm90IFR5cGVFcnJvci4KKworLSBJc3N1ZSAjMTI1MDQ6IENsb3NlIGZpbGUgaGFuZGxlcyBpbiBhIHRpbWVseSBtYW5uZXIgaW4gcGFja2FnaW5nLmRhdGFiYXNlLgorICBUaGlzIGZpeGVzIGEgYnVnIHdpdGggdGhlIHJlbW92ZSAodW5pbnN0YWxsKSBmZWF0dXJlIG9uIFdpbmRvd3MuCisKKy0gSXNzdWVzICMxMjE2OSBhbmQgIzEwNTEwOiBGYWN0b3Igb3V0IGNvZGUgdXNlZCBieSB2YXJpb3VzIHBhY2thZ2luZyBjb21tYW5kcworICB0byBtYWtlIEhUVFAgUE9TVCByZXF1ZXN0cywgYW5kIG1ha2Ugc3VyZSBpdCB1c2VzIENSTEYuCisKKy0gSXNzdWUgIzEyMDE2OiBNdWx0aWJ5dGUgQ0pLIGRlY29kZXJzIG5vdyByZXN5bmNocm9uaXplIGZhc3Rlci4gVGhleSBvbmx5CisgIGlnbm9yZSB0aGUgZmlyc3QgYnl0ZSBvZiBhbiBpbnZhbGlkIGJ5dGUgc2VxdWVuY2UuIEZvciBleGFtcGxlLAorICBiJ1x4ZmZcbicuZGVjb2RlKCdnYjIzMTInLCAncmVwbGFjZScpIGdpdmVzICdcdWZmZmRcbicgaW5zdGVhZCBvZiAnXHVmZmZkJy4KKworLSBJc3N1ZSAjMTI0NTk6IHRpbWUuc2xlZXAoKSBub3cgcmFpc2VzIGEgVmFsdWVFcnJvciBpZiB0aGUgc2xlZXAgbGVuZ3RoIGlzCisgIG5lZ2F0aXZlLCBpbnN0ZWFkIG9mIGFuIGluZmluaXRlIHNsZWVwIG9uIFdpbmRvd3Mgb3IgcmFpc2luZyBhbiBJT0Vycm9yIG9uCisgIExpbnV4IGZvciBleGFtcGxlLCB0byBoYXZlIHRoZSBzYW1lIGJlaGF2aW91ciBvbiBhbGwgcGxhdGZvcm1zLgorCistIElzc3VlICMxMjQ1MTogcHlkb2M6IGh0bWxfZ2V0ZmlsZSgpIG5vdyB1c2VzIHRva2VuaXplLm9wZW4oKSB0byBzdXBwb3J0CisgIFB5dGhvbiBzY3JpcHRzIHVzaW5nIGFuIGVuY29kaW5nIGRpZmZlcmVudCB0aGFuIFVURi04IChyZWFkIHRoZSBjb2RpbmcgY29va2llCisgIG9mIHRoZSBzY3JpcHQpLgorCistIElzc3VlICMxMjQ5Mzogc3VicHJvY2VzczogUG9wZW4uY29tbXVuaWNhdGUoKSBub3cgYWxzbyBoYW5kbGVzIEVJTlRSIGVycm9ycworICBpZiB0aGUgcHJvY2VzcyBoYXMgb25seSBvbmUgcGlwZS4KKworLSBJc3N1ZSAjMTI0Njc6IHdhcm5pbmdzOiBmaXggYSByYWNlIGNvbmRpdGlvbiBpZiBhIHdhcm5pbmcgaXMgZW1pdHRlZCBhdAorICBzaHV0ZG93biwgaWYgZ2xvYmFscygpWydfX2ZpbGVfXyddIGlzIE5vbmUuCisKKy0gSXNzdWUgIzEyNDUxOiBweWRvYzogaW1wb3J0ZmlsZSgpIG5vdyBvcGVucyB0aGUgUHl0aG9uIHNjcmlwdCBpbiBiaW5hcnkgbW9kZSwKKyAgaW5zdGVhZCBvZiB0ZXh0IG1vZGUgdXNpbmcgdGhlIGxvY2FsZSBlbmNvZGluZywgdG8gYXZvaWQgZW5jb2RpbmcgaXNzdWVzLgorCistIElzc3VlICMxMjQ1MTogcnVucHk6IHJ1bl9wYXRoKCkgbm93IG9wZW5zIHRoZSBQeXRob24gc2NyaXB0IGluIGJpbmFyeSBtb2RlLAorICBpbnN0ZWFkIG9mIHRleHQgbW9kZSB1c2luZyB0aGUgbG9jYWxlIGVuY29kaW5nLCB0byBzdXBwb3J0IG90aGVyIGVuY29kaW5ncworICB0aGFuIFVURi04IChzY3JpcHRzIHVzaW5nIHRoZSBjb2RpbmcgY29va2llKS4KKworLSBJc3N1ZSAjMTI0NTE6IHhtbC5kb20ucHVsbGRvbTogcGFyc2UoKSBub3cgb3BlbnMgZmlsZXMgaW4gYmluYXJ5IG1vZGUgaW5zdGVhZAorICBvZiB0aGUgdGV4dCBtb2RlICh1c2luZyB0aGUgbG9jYWxlIGVuY29kaW5nKSB0byBhdm9pZCBlbmNvZGluZyBpc3N1ZXMuCisKKy0gSXNzdWUgIzEyMTQ3OiBBZGp1c3QgdGhlIG5ldy1pbi0zLjIgc210cGxpYi5zZW5kX21lc3NhZ2UgbWV0aG9kIGZvciBiZXR0ZXIKKyAgY29uZm9ybWFuY2UgdG8gdGhlIFJGQ3M6ICBjb3JyZWN0bHkgaGFuZGxlIFNlbmRlciBhbmQgUmVzZW50LSBoZWFkZXJzLgorCistIElzc3VlICMxMjM1MjogRml4IGEgZGVhZGxvY2sgaW4gbXVsdGlwcm9jZXNzaW5nLkhlYXAgd2hlbiBhIGJsb2NrIGlzIGZyZWVkIGJ5CisgIHRoZSBnYXJiYWdlIGNvbGxlY3RvciB3aGlsZSB0aGUgSGVhcCBsb2NrIGlzIGhlbGQuCisKKy0gSXNzdWUgIzEyNDYyOiB0aW1lLnNsZWVwKCkgbm93IGltbWVkaWF0ZWx5IGNhbGxzIHRoZSAoUHl0aG9uKSBzaWduYWwgaGFuZGxlcgorICBpZiBpdCBpcyBpbnRlcnJ1cHRlZCBieSBhIHNpZ25hbCwgaW5zdGVhZCBvZiBoYXZpbmcgdG8gd2FpdCB1bnRpbCB0aGUgbmV4dAorICBpbnN0cnVjdGlvbi4KKworLSBJc3N1ZSAjMTI0NDI6IG5ldyBzaHV0aWwuZGlza191c2FnZSBmdW5jdGlvbiwgcHJvdmlkaW5nIHRvdGFsLCB1c2VkIGFuZCBmcmVlCisgIGRpc2sgc3BhY2Ugc3RhdGlzdGljcy4KKworLSBJc3N1ZSAjMTI0NTE6IFRoZSBYSW5jbHVkZSBkZWZhdWx0IGxvYWRlciBvZiB4bWwuZXRyZWUgbm93IGRlY29kZXMgZmlsZXMgZnJvbQorICBVVEYtOCBpbnN0ZWFkIG9mIHRoZSBsb2NhbGUgZW5jb2RpbmcgaWYgdGhlIGVuY29kaW5nIGlzIG5vdCBzcGVjaWZpZWQuIEl0IG5vdworICBhbHNvIG9wZW5zIFhNTCBmaWxlcyBmb3IgdGhlIHBhcnNlciBpbiBiaW5hcnkgbW9kZSBpbnN0ZWFkIG9mIHRoZSB0ZXh0IG1vZGUKKyAgdG8gYXZvaWQgZW5jb2RpbmcgaXNzdWVzLgorCistIElzc3VlICMxMjQ1MTogZG9jdGVzdC5kZWJ1Z19zY3JpcHQoKSBkb2Vzbid0IGNyZWF0ZSBhIHRlbXBvcmFyeSBmaWxlCisgIGFueW1vcmUgdG8gYXZvaWQgZW5jb2RpbmcgaXNzdWVzLgorCistIElzc3VlICMxMjQ1MTogcHlkb2Muc3lub3BzaXMoKSBub3cgcmVhZHMgdGhlIGVuY29kaW5nIGNvb2tpZSBpZiBhdmFpbGFibGUsCisgIHRvIHJlYWQgdGhlIFB5dGhvbiBzY3JpcHQgZnJvbSB0aGUgcmlnaHQgZW5jb2RpbmcuCisKKy0gSXNzdWUgIzEyNDUxOiBkaXN0dXRpbHMgbm93IG9wZW5zIHRoZSBzZXR1cCBzY3JpcHQgaW4gYmluYXJ5IG1vZGUgdG8gcmVhZCB0aGUKKyAgZW5jb2RpbmcgY29va2llLCBpbnN0ZWFkIG9mIG9wZW5pbmcgaXQgaW4gVVRGLTguCisKKy0gSXNzdWUgIzk1MTY6IE9uIE1hYyBPUyBYLCBjaGFuZ2UgRGlzdHV0aWxzIHRvIG5vIGxvbmdlciBnbG9iYWxseSBhdHRlbXB0IHRvCisgIGNoZWNrIG9yIHNldCB0aGUgTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUIGVudmlyb25tZW50IHZhcmlhYmxlIGZvciB0aGUKKyAgaW50ZXJwcmV0ZXIgcHJvY2Vzcy4gIFRoaXMgY291bGQgY2F1c2UgZmFpbHVyZXMgaW4gbm9uLURpc3R1dGlscyBzdWJwcm9jZXNzZXMKKyAgYW5kIHdhcyB1bnJlbGlhYmxlIHNpbmNlIHRlc3RzIG9yIHVzZXIgcHJvZ3JhbXMgY291bGQgbW9kaWZ5IHRoZSBpbnRlcnByZXRlcgorICBlbnZpcm9ubWVudCBhZnRlciBEaXN0dXRpbHMgc2V0IGl0LiAgSW5zdGVhZCwgaGF2ZSBEaXN0dXRpbHMgc2V0IHRoZQorICBkZXBsb3ltZW50IHRhcmdldCBvbmx5IGluIHRoZSBlbnZpcm9ubWVudCBvZiBlYWNoIGJ1aWxkIHN1YnByb2Nlc3MuICBJdCBpcworICBzdGlsbCBwb3NzaWJsZSB0byBnbG9iYWxseSBvdmVycmlkZSB0aGUgZGVmYXVsdCBieSBzZXR0aW5nCisgIE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCBiZWZvcmUgbGF1bmNoaW5nIHRoZSBpbnRlcnByZXRlcjsgaXRzIHZhbHVlIG11c3QgYmUKKyAgZ3JlYXRlciBvciBlcXVhbCB0byB0aGUgZGVmYXVsdCB2YWx1ZSwgdGhlIHZhbHVlIHdpdGggd2hpY2ggdGhlIGludGVycHJldGVyCisgIHdhcyBidWlsdC4gIEFsc28sIGltcGxlbWVudCB0aGUgc2FtZSBoYW5kbGluZyBpbiBwYWNrYWdpbmcuCisKKy0gSXNzdWUgIzEyNDIyOiBJbiB0aGUgY29weSBtb2R1bGUsIGRvbid0IHN0b3JlIG9iamVjdHMgdGhhdCBhcmUgdGhlaXIgb3duIGNvcHkKKyAgaW4gdGhlIG1lbW8gZGljdC4KKworLSBJc3N1ZSAjMTIzMDM6IEFkZCBzaWd3YWl0aW5mbygpIGFuZCBzaWd0aW1lZHdhaXQoKSB0byB0aGUgc2lnbmFsIG1vZHVsZS4KKworLSBJc3N1ZSAjMTI0MDQ6IFJlbW92ZSBDODkgaW5jb21wYXRpYmxlIGNvZGUgZnJvbSBtbWFwIG1vZHVsZS4gUGF0Y2ggYnkgQWtpcmEKKyAgS2l0YWRhLgorCistIElzc3VlICMxODc0OiBlbWFpbCBub3cgZGV0ZWN0cyBhbmQgcmVwb3J0cyBhcyBhIGRlZmVjdCB0aGUgcHJlc2VuY2Ugb2YKKyAgYW55IENURSBvdGhlciB0aGFuIDdiaXQsIDhiaXQsIG9yIGJpbmFyeSBvbiBhIG11bHRpcGFydC4KKworLSBJc3N1ZSAjMTIzODM6IEZpeCBzdWJwcm9jZXNzIG1vZHVsZSB3aXRoIGVudj17fTogZG9uJ3QgY29weSB0aGUgZW52aXJvbm1lbnQKKyAgdmFyaWFibGVzLCBzdGFydCB3aXRoIGFuIGVtcHR5IGVudmlyb25tZW50LgorCistIElzc3VlICMxMTYzNzogRml4IHN1cHBvcnQgZm9yIGltcG9ydGluZyBwYWNrYWdpbmcgc2V0dXAgaG9va3MgZnJvbSB0aGUKKyAgcHJvamVjdCBkaXJlY3RvcnkuCisKKy0gSXNzdWUgIzY3NzE6IE1vdmVkIHRoZSBjdXJzZXMud3JhcHBlciBmdW5jdGlvbiBmcm9tIHRoZSBzaW5nbGUtZnVuY3Rpb24KKyAgd3JhcHBlciBtb2R1bGUgaW50byBfX2luaXRfXywgZWxpbWluYXRpbmcgdGhlIG1vZHVsZS4gIFNpbmNlIF9faW5pdF9fIHdhcworICBhbHJlYWR5IGltcG9ydGluZyB0aGUgZnVuY3Rpb24gdG8gY3Vyc2VzLndyYXBwZXIsIHRoZXJlIGlzIG5vIEFQSSBjaGFuZ2UuCisKKy0gSXNzdWUgIzExNTg0OiBlbWFpbC5oZWFkZXIuZGVjb2RlX2hlYWRlciBubyBsb25nZXIgZmFpbHMgaWYgdGhlIGhlYWRlcgorICBwYXNzZWQgdG8gaXQgaXMgYSBIZWFkZXIgb2JqZWN0LCBhbmQgSGVhZGVyL21ha2VfaGVhZGVyIG5vIGxvbmdlciBmYWlsCisgIGlmIGdpdmVuIGJpbmFyeSB1bmtub3duLThiaXQgaW5wdXQuCisKKy0gSXNzdWUgIzExNzAwOiBtYWlsYm94IHByb3h5IG9iamVjdCBjbG9zZSBtZXRob2RzIGNhbiBub3cgYmUgY2FsbGVkIG11bHRpcGxlCisgIHRpbWVzIHdpdGhvdXQgZXJyb3IuCisKKy0gSXNzdWUgIzExNzY3OiBDb3JyZWN0IGZpbGUgZGVzY3JpcHRvciBsZWFrIGluIG1haWxib3gncyBfX2dldGl0ZW1fXyBtZXRob2QuCisKKy0gSXNzdWUgIzEyMTMzOiBBYnN0cmFjdEhUVFBIYW5kbGVyLmRvX29wZW4oKSBvZiB1cmxsaWIucmVxdWVzdCBjbG9zZXMgdGhlIEhUVFAKKyAgY29ubmVjdGlvbiBpZiBpdHMgZ2V0cmVzcG9uc2UoKSBtZXRob2QgZmFpbHMgd2l0aCBhIHNvY2tldCBlcnJvci4gUGF0Y2gKKyAgd3JpdHRlbiBieSBFemlvIE1lbG90dGkuCisKKy0gSXNzdWUgIzEyMjQwOiBBbGxvdyBtdWx0aXBsZSBzZXR1cCBob29rcyBpbiBwYWNrYWdpbmcncyBzZXR1cC5jZmcgZmlsZXMuCisgIE9yaWdpbmFsIHBhdGNoIGJ5IEVyaWsgQnJheS4KKworLSBJc3N1ZSAjOTI4NDogQWxsb3cgaW5zcGVjdC5maW5kc291cmNlKCkgdG8gZmluZCB0aGUgc291cmNlIG9mIGRvY3Rlc3QKKyAgZnVuY3Rpb25zLgorCistIElzc3VlICMxMTU5NTogRml4IGFzc29ydGVkIGJ1Z3MgaW4gcGFja2FnaW5nLnV0aWwuY2ZnX3RvX2FyZ3MsIGEKKyAgY29tcGF0aWJpbGl0eSBoZWxwZXIgZm9yIHRoZSBkaXN0dXRpbHMtcGFja2FnaW5nIHRyYW5zaXRpb24uICBPcmlnaW5hbCBwYXRjaAorICBieSBFcmlrIEJyYXkuCisKKy0gSXNzdWUgIzEyMjg3OiBJbiBvc3NhdWRpb2RldiwgY2hlY2sgdGhhdCB0aGUgZGV2aWNlIGlzbid0IGNsb3NlZCBpbiBzZXZlcmFsCisgIG1ldGhvZHMuCisKKy0gSXNzdWUgIzEyMDA5OiBGaXhlZCByZWdyZXNzaW9uIGluIG5ldHJjIGZpbGUgY29tbWVudCBoYW5kbGluZy4KKworLSBJc3N1ZSAjMTIyNDY6IFdhcm4gYW5kIGZhaWwgd2hlbiB0cnlpbmcgdG8gaW5zdGFsbCBhIHRoaXJkLXBhcnR5IHByb2plY3QgZnJvbQorICBhbiB1bmluc3RhbGxlZCBQeXRob24gKGJ1aWx0IGluIGEgc291cmNlIGNoZWNrb3V0KS4gIE9yaWdpbmFsIHBhdGNoIGJ5CisgIFRzaGVwYW5nIExla2hvbmtob2JlLgorCistIElzc3VlICMxMDY5NDogemlwZmlsZSBub3cgaWdub3JlcyBnYXJiYWdlIGF0IHRoZSBlbmQgb2YgYSB6aXBmaWxlLgorCistIElzc3VlICMxMjI4MzogRml4ZWQgcmVncmVzc2lvbiBpbiBzbXRwbGliIHF1b3Rpbmcgb2YgbGVhZGluZyBkb3RzIGluIERBVEEuCisKKy0gSXNzdWUgIzEwNDI0OiBBcmdwYXJzZSBub3cgaW5jbHVkZXMgdGhlIG5hbWVzIG9mIHRoZSBtaXNzaW5nIHJlcXVpcmVkCisgIGFyZ3VtZW50cyBpbiB0aGUgbWlzc2luZyBhcmd1bWVudHMgZXJyb3IgbWVzc2FnZS4KKworLSBJc3N1ZSAjMTIxNjg6IFN5c0xvZ0hhbmRsZXIgbm93IGFsbG93cyBOVUwgdGVybWluYXRpb24gdG8gYmUgY29udHJvbGxlZCB1c2luZworICBhIG5ldyAnYXBwZW5kX251bCcgYXR0cmlidXRlIG9uIHRoZSBoYW5kbGVyLgorCistIElzc3VlICMxMTU4MzogU3BlZWQgdXAgb3MucGF0aC5pc2RpciBvbiBXaW5kb3dzIGJ5IHVzaW5nIEdldEZpbGVBdHRyaWJ1dGVzCisgIGluc3RlYWQgb2Ygb3Muc3RhdC4KKworLSBJc3N1ZSAjMTIwMjE6IE1ha2UgbW1hcCdzIHJlYWQoKSBtZXRob2QgYXJndW1lbnQgb3B0aW9uYWwuIFBhdGNoIGJ5IFBldHJpCisgIExlaHRpbmVuLgorCistIElzc3VlICM5MjA1OiBjb25jdXJyZW50LmZ1dHVyZXMuUHJvY2Vzc1Bvb2xFeGVjdXRvciBub3cgZGV0ZWN0cyBraWxsZWQKKyAgY2hpbGRyZW4gYW5kIHJhaXNlcyBCcm9rZW5Qcm9jZXNzUG9vbCBpbiBzdWNoIGEgc2l0dWF0aW9uLiAgUHJldmlvdXNseSBpdAorICB3b3VsZCByZWxpYWJseSBmcmVlemUvZGVhZGxvY2suCisKKy0gSXNzdWUgIzEyMDQwOiBFeHBvc2UgYSBuZXcgYXR0cmlidXRlIGBgc2VudGluZWxgYCBvbiBpbnN0YW5jZXMgb2YKKyAgYGBtdWx0aXByb2Nlc3NpbmcuUHJvY2Vzc2BgLiAgQWxzbywgZml4IFByb2Nlc3Muam9pbigpIHRvIG5vdCB1c2UgcG9sbGluZworICBhbnltb3JlLCB3aGVuIGdpdmVuIGEgdGltZW91dC4KKworLSBJc3N1ZSAjMTE4OTM6IFJlbW92ZSBvYnNvbGV0ZSBpbnRlcm5hbCB3cmFwcGVyIGNsYXNzIGBgU1NMRmFrZUZpbGVgYCBpbiB0aGUKKyAgc210cGxpYiBtb2R1bGUuICBQYXRjaCBieSBDYXRhbGluIElhY29iLgorCistIElzc3VlICMxMjA4MDogRml4IGEgRGVjaW1hbC5wb3dlcigpIGNhc2UgdGhhdCB0b29rIGFuIHVucmVhc29uYWJseSBsb25nIHRpbWUKKyAgdG8gY29tcHV0ZS4KKworLSBJc3N1ZSAjMTIyMjE6IFJlbW92ZSBfX3ZlcnNpb25fXyBhdHRyaWJ1dGVzIGZyb20gcHlleHBhdCwgcGlja2xlLCB0YXJmaWxlLAorICBweWRvYywgdGtpbnRlciwgYW5kIHhtbC5wYXJzZXJzLmV4cGF0LiBUaGlzIHdlcmUgdXNlbGVzcyB2ZXJzaW9uIGNvbnN0YW50cworICBsZWZ0IG92ZXIgZnJvbSB0aGUgTWVyY3VyaWFsIHRyYW5zaXRpb24KKworLSBOYW1lZCB0dXBsZXMgbm93IHdvcmsgY29ycmVjdGx5IHdpdGggdmFycygpLgorCistIElzc3VlICMxMjA4NTogRml4IGFuIGF0dHJpYnV0ZSBlcnJvciBpbiBzdWJwcm9jZXNzLlBvcGVuIGRlc3RydWN0b3IgaWYgdGhlCisgIGNvbnN0cnVjdG9yIGhhcyBmYWlsZWQsIGUuZy4gYmVjYXVzZSBvZiBhbiB1bmRlY2xhcmVkIGtleXdvcmQgYXJndW1lbnQuIFBhdGNoCisgIHdyaXR0ZW4gYnkgT2xlZyBPc2hteWFuLgorCistIElzc3VlICMxMjAyODogTWFrZSB0aHJlYWRpbmcuX2dldF9pZGVudCgpIHB1YmxpYywgcmVuYW1lIGl0IHRvCisgIHRocmVhZGluZy5nZXRfaWRlbnQoKSBhbmQgZG9jdW1lbnQgaXQuIFRoaXMgZnVuY3Rpb24gd2FzIGFscmVhZHkgdXNlZCB1c2luZworICBfdGhyZWFkLmdldF9pZGVudCgpLgorCistIElzc3VlICMxMjE3MTogSW5jcmVtZW50YWxFbmNvZGVyLnJlc2V0KCkgb2YgQ0pLIGNvZGVjcyAobXVsdGlieXRlY29kZWMpIGNhbGxzCisgIGVuY3Jlc2V0KCkgaW5zdGVhZCBvZiBkZWNyZXNldCgpLgorCistIElzc3VlICMxMjIxODogUmVtb3ZlZCB3c2dpcmVmLmVnZy1pbmZvLgorCistIElzc3VlICMxMjE5NjogQWRkIHBpcGUyKCkgdG8gdGhlIG9zIG1vZHVsZS4KKworLSBJc3N1ZSAjOTg1MDY0OiBNYWtlIHBsaXN0bGliIG1vcmUgcmVzaWxpZW50IHRvIGZhdWx0eSBpbnB1dCBwbGlzdHMuCisgIFBhdGNoIGJ5IE1oZXIgTW92c2lzeWFuLgorCistIElzc3VlICMxNjI1OiBCWjJGaWxlIGFuZCBiejIuZGVjb21wcmVzcygpIG5vdyBzdXBwb3J0IG11bHRpLXN0cmVhbSBmaWxlcy4KKyAgSW5pdGlhbCBwYXRjaCBieSBOaXIgQWlkZXMuCisKKy0gSXNzdWUgIzEyMTc1OiBCdWZmZXJlZFJlYWRlci5yZWFkKC0xKSBub3cgY2FsbHMgcmF3LnJlYWRhbGwoKSBpZiBhdmFpbGFibGUuCisKKy0gSXNzdWUgIzEyMTc1OiBGaWxlSU8ucmVhZGFsbCgpIG5vdyBvbmx5IHJlYWRzIHRoZSBmaWxlIHBvc2l0aW9uIGFuZCBzaXplCisgIG9uY2UuCisKKy0gSXNzdWUgIzEyMTc1OiBSYXdJT0Jhc2UucmVhZGFsbCgpIG5vdyByZXR1cm5zIE5vbmUgaWYgcmVhZCgpIHJldHVybnMgTm9uZS4KKworLSBJc3N1ZSAjMTIxNzU6IEZpbGVJTy5yZWFkYWxsKCkgbm93IHJhaXNlcyBhIFZhbHVlRXJyb3IgaW5zdGVhZCBvZiBhbiBJT0Vycm9yCisgIGlmIHRoZSBmaWxlIGlzIGNsb3NlZC4KKworLSBJc3N1ZSAjMTExMDk6IE5ldyBzZXJ2aWNlX2FjdGlvbiBtZXRob2QgZm9yIEJhc2VTZXJ2ZXIsIHVzZWQgYnkgRm9ya2luZ01peEluCisgIGNsYXNzIGZvciBjbGVhbnVwLiBJbml0aWFsIFBhdGNoIGJ5IEp1c3RpbiBXYXJrZW50aW4uCisKKy0gSXNzdWUgIzEyMDQ1OiBBdm9pZCBkdXBsaWNhdGUgZXhlY3V0aW9uIG9mIGNvbW1hbmQgaW4KKyAgY3R5cGVzLnV0aWwuX2dldF9zb25hbWUoKS4gIFBhdGNoIGJ5IFNpamluIEpvc2VwaC4KKworLSBJc3N1ZSAjMTA4MTg6IFJlbW92ZSB0aGUgVGsgR1VJIGFuZCB0aGUgc2VydmUoKSBmdW5jdGlvbiBvZiB0aGUgcHlkb2MgbW9kdWxlLAorICBweWRvYyAtZyBoYXMgYmVlbiBkZXByZWNhdGVkIGluIFB5dGhvbiAzLjIgYW5kIGl0IGhhcyBhIG5ldyBlbmhhbmNlZCB3ZWIKKyAgc2VydmVyLgorCistIElzc3VlICMxNDQxNTMwOiBJbiBpbWFwbGliLCByZWFkIHRoZSBkYXRhIGluIG9uZSBjaHVuayB0byBzcGVlZCB1cCBsYXJnZQorICByZWFkcyBhbmQgc2ltcGxpZnkgY29kZS4KKworLSBJc3N1ZSAjMTIwNzA6IEZpeCB0aGUgTWFrZWZpbGUgcGFyc2VyIG9mIHRoZSBzeXNjb25maWcgbW9kdWxlIHRvIGhhbmRsZQorICBjb3JyZWN0bHkgcmVmZXJlbmNlcyB0byAiYm9ndXMgdmFyaWFibGUiIChlLmcuICJwcmVmaXg9JC9vcHQvcHl0aG9uIikuCisKKy0gSXNzdWUgIzEyMTAwOiBEb24ndCByZXNldCBpbmNyZW1lbnRhbCBlbmNvZGVycyBvZiBDSksgY29kZWNzIGF0IGVhY2ggY2FsbCB0bworICB0aGVpciBlbmNvZGUoKSBtZXRob2QgYW55bW9yZSwgYnV0IGNvbnRpbnVlIHRvIGNhbGwgdGhlIHJlc2V0KCkgbWV0aG9kIGlmIHRoZQorICBmaW5hbCBhcmd1bWVudCBpcyBUcnVlLgorCistIElzc3VlICMxMjA0OTogQWRkIFJBTkRfYnl0ZXMoKSBhbmQgUkFORF9wc2V1ZG9fYnl0ZXMoKSBmdW5jdGlvbnMgdG8gdGhlIHNzbAorICBtb2R1bGUuCisKKy0gSXNzdWUgIzY1MDE6IG9zLmRldmljZV9lbmNvZGluZygpIHJldHVybnMgTm9uZSBvbiBXaW5kb3dzIGlmIHRoZSBhcHBsaWNhdGlvbgorICBoYXMgbm8gY29uc29sZS4KKworLSBJc3N1ZSAjMTIxMDU6IEFkZCBPX0NMT0VYRUMgdG8gdGhlIG9zIG1vZHVsZS4KKworLSBJc3N1ZSAjMTIwNzk6IERlY2ltYWwoJ0luZmluaXR5JykuZm1hKERlY2ltYWwoJzAnKSwgKDMuOTEyMjQzMTgxMjY3ODZlKzE5KzBqKSkKKyAgbm93IHJhaXNlcyBUeXBlRXJyb3IgKHJlZmxlY3RpbmcgdGhlIGludmFsaWQgdHlwZSBvZiB0aGUgM3JkIGFyZ3VtZW50KSByYXRoZXIKKyAgdGhhbiBEZWNpbWFsLkludmFsaWRPcGVyYXRpb24uCisKKy0gSXNzdWUgIzEyMTI0OiB6aXBpbXBvcnQgZG9lc24ndCBrZWVwIGEgcmVmZXJlbmNlIHRvIHpsaWIuZGVjb21wcmVzcygpIGFueW1vcmUKKyAgdG8gYmUgYWJsZSB0byB1bmxvYWQgdGhlIG1vZHVsZS4KKworLSBBZGQgdGhlIHBhY2thZ2luZyBtb2R1bGUsIGFuIGltcHJvdmVkIGZvcmsgb2YgZGlzdHV0aWxzIChhbHNvIGtub3duIGFzCisgIGRpc3R1dGlsczIpLgorCistIElzc3VlICMxMjA2NTogY29ubmVjdF9leCgpIG9uIGFuIFNTTCBzb2NrZXQgbm93IHJldHVybnMgdGhlIG9yaWdpbmFsIGVycm5vCisgIHdoZW4gdGhlIHNvY2tldCdzIHRpbWVvdXQgZXhwaXJlcyAoaXQgdXNlZCB0byByZXR1cm4gTm9uZSkuCisKKy0gSXNzdWUgIzg4MDk6IFRoZSBTTVRQX1NTTCBjb25zdHJ1Y3RvciBhbmQgU01UUC5zdGFydHRscygpIG5vdyBzdXBwb3J0CisgIHBhc3NpbmcgYSBgYGNvbnRleHRgYCBhcmd1bWVudCBwb2ludGluZyB0byBhbiBzc2wuU1NMQ29udGV4dCBpbnN0YW5jZS4KKyAgUGF0Y2ggYnkgS2FzdW4gSGVyYXRoLgorCistIElzc3VlICMxMTA4ODogZG9uJ3QgY3Jhc2ggd2hlbiB1c2luZyBGNSB0byBydW4gYSBzY3JpcHQgaW4gSURMRSBvbiBNYWNPU1gKKyAgd2l0aCBUayA4LjUuCisKKy0gSXNzdWUgIzk1MTY6IElzc3VlICM5NTE2OiBhdm9pZCBlcnJvcnMgaW4gc3lzY29uZmlnIHdoZW4gTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUCisgIGlzIHNldCBpbiBzaGVsbC4KKworLSBJc3N1ZSAjODY1MDogTWFrZSB6bGliIG1vZHVsZSA2NC1iaXQgY2xlYW4uIGNvbXByZXNzKCksIGRlY29tcHJlc3MoKSBhbmQKKyAgdGhlaXIgaW5jcmVtZW50YWwgY291bnRlcnBhcnRzIG5vdyByYWlzZSBPdmVyZmxvd0Vycm9yIGlmIGdpdmVuIGFuIGlucHV0CisgIGxhcmdlciB0aGFuIDRHQiwgaW5zdGVhZCBvZiBzaWxlbnRseSB0cnVuY2F0aW5nIHRoZSBpbnB1dCBhbmQgcmV0dXJuaW5nCisgIGFuIGluY29ycmVjdCByZXN1bHQuCisKKy0gSXNzdWUgIzEyMDUwOiB6bGliLmRlY29tcHJlc3NvYmooKS5kZWNvbXByZXNzKCkgbm93IGNsZWFycyB0aGUgdW5jb25zdW1lZF90YWlsCisgIGF0dHJpYnV0ZSB3aGVuIGNhbGxlZCB3aXRob3V0IGEgbWF4X2xlbmd0aCBhcmd1bWVudC4KKworLSBJc3N1ZSAjMTIwNjI6IEZpeCBhIGZsdXNoaW5nIGJ1ZyB3aGVuIGRvaW5nIGEgY2VydGFpbiB0eXBlIG9mIEkvTyBzZXF1ZW5jZQorICBvbiBhIGZpbGUgb3BlbmVkIGluIHJlYWQrd3JpdGUgbW9kZSAobmFtZWx5OiByZWFkaW5nLCBzZWVraW5nIGEgYml0IGZvcndhcmQsCisgIHdyaXRpbmcsIHRoZW4gc2Vla2luZyBiZWZvcmUgdGhlIHByZXZpb3VzIHdyaXRlIGJ1dCBzdGlsbCB3aXRoaW4gYnVmZmVyZWQKKyAgZGF0YSwgYW5kIHdyaXRpbmcgYWdhaW4pLgorCistIElzc3VlICM5OTcxOiBXcml0ZSBhbiBvcHRpbWl6ZWQgaW1wbGVtZW50YXRpb24gb2YgQnVmZmVyZWRSZWFkZXIucmVhZGludG8oKS4KKyAgUGF0Y2ggYnkgSm9obiBPJ0Nvbm5vci4KKworLSBJc3N1ZSAjMTAyODogVGsgcmV0dXJucyBpbnZhbGlkIFVuaWNvZGUgbnVsbCBpbiAlQTogVW5pY29kZURlY29kZUVycm9yLgorICBXaXRoIFRrIDwgOC41IF90a2ludGVyLmM6UHl0aG9uQ21kKCkgcmFpc2VkIFVuaWNvZGVEZWNvZGVFcnJvciwgY2F1c2VkCisgIElETEUgdG8gZXhpdC4gIENvbnZlcnRlZCB0byB2YWxpZCBVbmljb2RlIG51bGwgaW4gUHl0aG9uQ21kKCkuCisKKy0gSXNzdWUgIzExNzk5OiB1cmxsaWIucmVxdWVzdCBBdXRoZW50aWNhdGlvbiBIYW5kbGVycyB3aWxsIHJhaXNlIGEgVmFsdWVFcnJvcgorICB3aGVuIHByZXNlbnRlZCB3aXRoIGFuIHVuc3VwcG9ydGVkIEF1dGhlbnRpY2F0aW9uIFNjaGVtZS4gUGF0Y2ggY29udHJpYnV0ZWQKKyAgYnkgWXV2YWwgR3JlZW5maWVsZC4KKworLSBJc3N1ZSAjMTA0MTksICM2MDExOiBidWlsZF9zY3JpcHRzIGNvbW1hbmQgb2YgZGlzdHV0aWxzIGhhbmRsZXMgY29ycmVjdGx5CisgIG5vbi1BU0NJSSBwYXRoIChwYXRoIHRvIHRoZSBQeXRob24gZXhlY3V0YWJsZSkuIE9wZW4gYW5kIHdyaXRlIHRoZSBzY3JpcHQgaW4KKyAgYmluYXJ5IG1vZGUsIGJ1dCBlbnN1cmUgdGhhdCB0aGUgc2hlYmFuZyBpcyBkZWNvZGFibGUgZnJvbSBVVEYtOCBhbmQgZnJvbSB0aGUKKyAgZW5jb2Rpbmcgb2YgdGhlIHNjcmlwdC4KKworLSBJc3N1ZSAjODQ5ODogSW4gc29ja2V0LmFjY2VwdCgpLCBhbGxvdyB0byBzcGVjaWZ5IDAgYXMgYSBiYWNrbG9nIHZhbHVlIGluCisgIG9yZGVyIHRvIGFjY2VwdCBleGFjdGx5IG9uZSBjb25uZWN0aW9uLiAgUGF0Y2ggYnkgRGFuaWVsIEV2ZXJzLgorCistIElzc3VlICMxMjAxMTogc2lnbmFsLnNpZ25hbCgpIGFuZCBzaWduYWwuc2lnaW50ZXJydXB0KCkgcmFpc2UgYW4gT1NFcnJvciwKKyAgaW5zdGVhZCBvZiBhIFJ1bnRpbWVFcnJvcjogT1NFcnJvciBoYXMgYW4gZXJybm8gYXR0cmlidXRlLgorCistIElzc3VlICMzNzA5OiBhZGQgYSBmbHVzaF9oZWFkZXJzIG1ldGhvZCB0byBCYXNlSFRUUFJlcXVlc3RIYW5kbGVyLCB3aGljaAorICBtYW5hZ2VzIHRoZSBzZW5kaW5nIG9mIGhlYWRlcnMgdG8gb3V0cHV0IHN0cmVhbSBhbmQgZmx1c2hpbmcgdGhlIGludGVybmFsCisgIGhlYWRlcnMgYnVmZmVyLiBQYXRjaCBjb250cmlidXRpb24gYnkgQW5kcmV3IFNjaGFhZgorCistIElzc3VlICMxMTc0MzogUmV3cml0ZSBtdWx0aXByb2Nlc3NpbmcgY29ubmVjdGlvbiBjbGFzc2VzIGluIHB1cmUgUHl0aG9uLgorCistIElzc3VlICMxMTE2NDogU3RvcCB0cnlpbmcgdG8gdXNlIF94bWxwbHVzIGluIHRoZSB4bWwgbW9kdWxlLgorCistIElzc3VlICMxMTg4ODogQWRkIGxvZzIgZnVuY3Rpb24gdG8gbWF0aCBtb2R1bGUuIFBhdGNoIHdyaXR0ZW4gYnkgTWFyaworICBEaWNraW5zb24uCisKKy0gSXNzdWUgIzEyMDEyOiBzc2wuUFJPVE9DT0xfU1NMdjIgYmVjb21lcyBvcHRpb25hbC4KKworLSBJc3N1ZSAjODQwNzogVGhlIHNpZ25hbCBoYW5kbGVyIHdyaXRlcyB0aGUgc2lnbmFsIG51bWJlciBhcyBhIHNpbmdsZSBieXRlCisgIGluc3RlYWQgb2YgYSBudWwgYnl0ZSBpbnRvIHRoZSB3YWtldXAgZmlsZSBkZXNjcmlwdG9yLiBTbyBpdCBpcyBwb3NzaWJsZSB0bworICB3YWl0IG1vcmUgdGhhbiBvbmUgc2lnbmFsIGFuZCBrbm93IHdoaWNoIHNpZ25hbHMgd2VyZSByYWlzZWQuCisKKy0gSXNzdWUgIzg0MDc6IEFkZCBwdGhyZWFkX2tpbGwoKSwgc2lncGVuZGluZygpIGFuZCBzaWd3YWl0KCkgZnVuY3Rpb25zIHRvIHRoZQorICBzaWduYWwgbW9kdWxlLgorCistIElzc3VlICMxMTkyNzogU01UUF9TU0wgbm93IHVzZXMgcG9ydCA0NjUgYnkgZGVmYXVsdCBhcyBkb2N1bWVudGVkLiAgUGF0Y2gKKyAgYnkgS2FzdW4gSGVyYXRoLgorCistIElzc3VlICMxMjAwMjogZnRwbGliJ3MgYWJvcnQoKSBtZXRob2QgcmFpc2VzIFR5cGVFcnJvci4KKworLSBJc3N1ZSAjMTE5MTY6IEFkZCBhIG51bWJlciBvZiBNYWNPU1ggc3BlY2lmaWMgZGVmaW5pdGlvbnMgdG8gdGhlIGVycm5vIG1vZHVsZS4KKyAgUGF0Y2ggYnkgUGllcnJlIENhcnJpZXIuCisKKy0gSXNzdWUgIzExOTk5OiBmaXhlZCBzcG9yYWRpYyBzeW5jIGZhaWx1cmUgbWFpbGJveC5NYWlsZGlyIGR1ZSB0byBpdHMgdHJ5aW5nIHRvCisgIGRldGVjdCBtdGltZSBjaGFuZ2VzIGJ5IGNvbXBhcmluZyB0byB0aGUgc3lzdGVtIGNsb2NrIGluc3RlYWQgb2YgdG8gdGhlCisgIHByZXZpb3VzIHZhbHVlIG9mIHRoZSBtdGltZS4KKworLSBJc3N1ZSAjMTEwNzI6IGFkZGVkIE1MU0QgY29tbWFuZCAoUkZDLTM2NTkpIHN1cHBvcnQgdG8gZnRwbGliLgorCistIElzc3VlICM4ODA4OiBUaGUgSU1BUDRfU1NMIGNvbnN0cnVjdG9yIG5vdyBhbGxvd3MgcGFzc2luZyBhbiBTU0xDb250ZXh0CisgIHBhcmFtZXRlciB0byBjb250cm9sIHBhcmFtZXRlcnMgb2YgdGhlIHNlY3VyZSBjaGFubmVsLiAgUGF0Y2ggYnkgU2lqaW4KKyAgSm9zZXBoLgorCistIG50cGF0aC5zYW1lZmlsZSBmYWlsZWQgdG8gbm90aWNlIHRoYXQgImEudHh0IiBhbmQgIkEuVFhUIiByZWZlciB0byB0aGUgc2FtZQorICBmaWxlIG9uIFdpbmRvd3MgWFAuIEFzIG5vdGljZWQgaW4gaXNzdWUgIzEwNjg0LgorCistIElzc3VlICMxMjAwMDogV2hlbiBhIFNTTCBjZXJ0aWZpY2F0ZSBoYXMgYSBzdWJqZWN0QWx0TmFtZSB3aXRob3V0IGFueQorICBkTlNOYW1lIGVudHJ5LCBzc2wubWF0Y2hfaG9zdG5hbWUoKSBzaG91bGQgdXNlIHRoZSBzdWJqZWN0J3MgY29tbW9uTmFtZS4KKyAgUGF0Y2ggYnkgTmljb2xhcyBCYXJlaWwuCisKKy0gSXNzdWUgIzEwNzc1OiBhc3NlcnRSYWlzZXMsIGFzc2VydFJhaXNlc1JlZ2V4LCBhc3NlcnRXYXJucywgYW5kCisgIGFzc2VydFdhcm5zUmVnZXggbm93IGFjY2VwdCBhIGtleXdvcmQgYXJndW1lbnQgJ21zZycgd2hlbiB1c2VkIGFzIGNvbnRleHQKKyAgbWFuYWdlcnMuICBJbml0aWFsIHBhdGNoIGJ5IFdpbnN0b24gRXdlcnQuCisKKy0gSXNzdWUgIzEwNjg0OiBzaHV0aWwubW92ZSB1c2VkIHRvIGRlbGV0ZSBhIGZvbGRlciBvbiBjYXNlIGluc2Vuc2l0aXZlCisgIGZpbGVzeXN0ZW1zIHdoZW4gdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gbmFtZSB3aGVyZSB0aGUgc2FtZSBleGNlcHQKKyAgZm9yIHRoZSBjYXNlLgorCistIElzc3VlICMxMTY0Nzogb2JqZWN0cyBjcmVhdGVkIHVzaW5nIGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIgbm93IHN1cHBvcnQKKyAgbW9yZSB0aGFuIG9uZSBjYWxsIHRvIHRoZSBmdW5jdGlvbiB3aGVuIHVzZWQgYXMgYSBkZWNvcmF0b3IuIEluaXRpYWwgcGF0Y2gKKyAgYnkgWXNqIFJheS4KKworLSBJc3N1ZSAjMTE5MzA6IFJlbW92ZWQgZGVwcmVjYXRlZCB0aW1lLmFjY2VwdDJkeWVhciB2YXJpYWJsZS4KKyAgUmVtb3ZlZCB5ZWFyID49IDEwMDAgcmVzdHJpY3Rpb24gZnJvbSBkYXRldGltZS5zdHJmdGltZS4KKworLSBsb2dnaW5nOiBkb24ndCBkZWZpbmUgUXVldWVMaXN0ZW5lciBpZiBQeXRob24gaGFzIG5vIHRocmVhZCBzdXBwb3J0LgorCistIGZ1bmN0b29scy5jbXBfdG9fa2V5KCkgbm93IHdvcmtzIHdpdGggY29sbGVjdGlvbnMuSGFzaGFibGUoKS4KKworLSBJc3N1ZSAjMTEyNzc6IG1tYXAubW1hcCgpIGNhbGxzIGZjbnRsKGZkLCBGX0ZVTExGU1lOQykgb24gTWFjIE9TIFggdG8gZ2V0CisgIGFyb3VuZCBhIG1tYXAgYnVnIHdpdGggc3BhcnNlIGZpbGVzLiBQYXRjaCB3cml0dGVuIGJ5IFN0ZWZmZW4gRGFvZGUgTnVycG1lc28uCisKKy0gSXNzdWUgIzg0MDc6IEFkZCBzaWduYWwucHRocmVhZF9zaWdtYXNrKCkgZnVuY3Rpb24gdG8gZmV0Y2ggYW5kL29yIGNoYW5nZSB0aGUKKyAgc2lnbmFsIG1hc2sgb2YgdGhlIGNhbGxpbmcgdGhyZWFkLgorCistIElzc3VlICMxMTg1ODogY29uZmlncGFyc2VyLkV4dGVuZGVkSW50ZXJwb2xhdGlvbiBleHBlY3RlZCBsb3dlci1jYXNlIHNlY3Rpb24KKyAgbmFtZXMuCisKKy0gSXNzdWUgIzExMzI0OiBDb25maWdQYXJzZXIoaW50ZXJwb2xhdGlvbj1Ob25lKSBub3cgd29ya3MgY29ycmVjdGx5LgorCistIElzc3VlICMxMTgxMTogc3NsLmdldF9zZXJ2ZXJfY2VydGlmaWNhdGUoKSBpcyBub3cgSVB2Ni1jb21wYXRpYmxlLiAgUGF0Y2gKKyAgYnkgQ2hhcmxlcy1GcmFuw6dvaXMgTmF0YWxpLgorCistIElzc3VlICMxMTc2MzogZG9uJ3QgdXNlIGRpZmZsaWIgaW4gVGVzdENhc2UuYXNzZXJ0TXVsdGlMaW5lRXF1YWwgaWYgdGhlCisgIHN0cmluZ3MgYXJlIHRvbyBsb25nLgorCistIElzc3VlICMxMTIzNjogZ2V0cGFzcy5nZXRwYXNzIHJlc3BvbmRzIHRvIGN0cmwtYyBvciBjdHJsLXogb24gdGVybWluYWwuCisKKy0gSXNzdWUgIzExODU2OiBTcGVlZCB1cCBwYXJzaW5nIG9mIEpTT04gbnVtYmVycy4KKworLSBJc3N1ZSAjMTEwMDU6IHRocmVhZGluZy5STG9jaygpLl9yZWxlYXNlX3NhdmUoKSByYWlzZXMgYSBSdW50aW1lRXJyb3IgaWYgdGhlCisgIGxvY2sgd2FzIG5vdCBhY3F1aXJlZC4KKworLSBJc3N1ZSAjMTEyNTg6IFNwZWVkIHVwIGN0eXBlcy51dGlsLmZpbmRfbGlicmFyeSgpIHVuZGVyIExpbnV4IGJ5IGEgZmFjdG9yCisgIG9mIDUgdG8gMTAuICBJbml0aWFsIHBhdGNoIGJ5IEpvbmFzIEguCisKKy0gSXNzdWUgIzExMzgyOiBUcml2aWFsIHN5c3RlbSBjYWxscywgc3VjaCBhcyBkdXAoKSBvciBwaXBlKCksIG5lZWRuJ3QKKyAgcmVsZWFzZSB0aGUgR0lMLiAgUGF0Y2ggYnkgQ2hhcmxlcy1GcmFuw6dvaXMgTmF0YWxpLgorCistIElzc3VlICMxMTIyMzogQWRkIHRocmVhZGluZy5faW5mbygpIGZ1bmN0aW9uIHByb3ZpZGluZyBpbmZvcm1hdGlvbnMgYWJvdXQKKyAgdGhlIHRocmVhZCBpbXBsZW1lbnRhdGlvbi4KKworLSBJc3N1ZSAjMTE3MzE6IHNpbXBsaWZ5L2VuaGFuY2UgZW1haWwgcGFyc2VyL2dlbmVyYXRvciBBUEkgYnkgaW50cm9kdWNpbmcKKyAgcG9saWN5IG9iamVjdHMuCisKKy0gSXNzdWUgIzExNzY4OiBUaGUgc2lnbmFsIGhhbmRsZXIgb2YgdGhlIHNpZ25hbCBtb2R1bGUgb25seSBjYWxscworICBQeV9BZGRQZW5kaW5nQ2FsbCgpIGZvciB0aGUgZmlyc3Qgc2lnbmFsIHRvIGZpeCBhIGRlYWRsb2NrIG9uIHJlZW50cmFudCBvcgorICBwYXJhbGxlbCBjYWxscy4gUHlFcnJfU2V0SW50ZXJydXB0KCkgd3JpdGVzIGFsc28gaW50byB0aGUgd2FrZSB1cCBmaWxlLgorCistIElzc3VlICMxMTQ5MjogZml4IHNldmVyYWwgaXNzdWVzIHdpdGggaGVhZGVyIGZvbGRpbmcgaW4gdGhlIGVtYWlsIHBhY2thZ2UuCisKKy0gSXNzdWUgIzExODUyOiBBZGQgbWlzc2luZyBpbXBvcnRzIGFuZCB1cGRhdGUgdGVzdHMuCisKKy0gSXNzdWUgIzExODc1OiBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdCdzIF9fcmVkdWNlX18gd2FzIHRlbXBvcmFyaWx5CisgIG11dGF0aW5nIHRoZSBvYmplY3QgaW5zdGVhZCBvZiBqdXN0IHdvcmtpbmcgb24gYSBjb3B5LgorCistIElzc3VlICMxMTQ2NzogRml4IHVybHBhcnNlIGJlaGF2aW9yIHdoZW4gaGFuZGxpbmcgdXJscyB3aGljaCBjb250YWlucyBzY2hlbWUKKyAgc3BlY2lmaWMgcGFydCBvbmx5IGRpZ2l0cy4gUGF0Y2ggYnkgU2FudG9zbyBXaWpheWEuCisKKy0gY29sbGVjdGlvbnMuQ291bnRlcigpLmNvcHkoKSBub3cgd29ya3MgY29ycmVjdGx5IGZvciBzdWJjbGFzc2VzLgorCistIElzc3VlICMxMTQ3NDogRml4IHRoZSBidWcgd2l0aCB1cmwycGF0aG5hbWUoKSBoYW5kbGluZyBvZiAnL0N8Lycgb24gV2luZG93cy4KKyAgUGF0Y2ggYnkgU2FudG9zbyBXaWpheWEuCisKKy0gSXNzdWUgIzExNjg0OiBjb21wbGV0ZSBlbWFpbC5wYXJzZXIgYnl0ZXMgQVBJIGJ5IGFkZGluZyBCeXRlc0hlYWRlclBhcnNlci4KKworLSBUaGUgYnoyIG1vZHVsZSBub3cgaGFuZGxlcyA0R2lCKyBpbnB1dCBidWZmZXJzIGNvcnJlY3RseS4KKworLSBJc3N1ZSAjOTIzMzogRml4IGpzb24ubG9hZHMoJ3t9JykgdG8gcmV0dXJuIGEgZGljdCAoaW5zdGVhZCBvZiBhIGxpc3QpLCB3aGVuCisgIF9qc29uIGlzIG5vdCBhdmFpbGFibGUuCisKKy0gSXNzdWUgIzExODMwOiBSZW1vdmUgdW5uZWNlc3NhcnkgaW50cm9zcGVjdGlvbiBjb2RlIGluIHRoZSBkZWNpbWFsIG1vZHVsZS4KKworLSBJc3N1ZSAjMTE3MDM6IHVybGxpYjIuZ2V0dXJsKCkgZG9lcyBub3QgcmV0dXJuIGNvcnJlY3QgdXJsIHdoZW4gdGhlIG9yaWdpbmFsCisgIHVybCBjb250YWlucyAjZnJhZ21lbnQuCisKKy0gSXNzdWUgIzEwMDE5OiBGaXhlZCByZWdyZXNzaW9uIGluIGpzb24gbW9kdWxlIHdoZXJlIGFuIGluZGVudCBvZiAwIHN0b3BwZWQKKyAgYWRkaW5nIG5ld2xpbmVzIGFuZCBhY3RlZCBpbnN0ZWFkIGxpa2UgJ05vbmUnLgorCistIElzc3VlICMxMTE4NjogcHlkb2MgaWdub3JlcyBhIG1vZHVsZSBpZiBpdHMgbmFtZSBjb250YWlucyBhIHN1cnJvZ2F0ZQorICBjaGFyYWN0ZXIgaW4gdGhlIGluZGV4IG9mIG1vZHVsZXMuCisKKy0gSXNzdWUgIzExODE1OiBVc2UgYSBsaWdodC13ZWlnaHQgU2ltcGxlUXVldWUgZm9yIHRoZSByZXN1bHQgcXVldWUgaW4KKyAgY29uY3VycmVudC5mdXR1cmVzLlByb2Nlc3NQb29sRXhlY3V0b3IuCisKKy0gSXNzdWUgIzUxNjI6IFRyZWF0IHNlcnZpY2VzIGxpa2UgZnJvemVuIGV4ZWN1dGFibGVzIHRvIGFsbG93IGNoaWxkIHNwYXduaW5nCisgIGZyb20gbXVsdGlwcm9jZXNzaW5nLmZvcmtpbmcgb24gV2luZG93cy4KKworLSBsb2dnaW5nLmJhc2ljQ29uZmlnIG5vdyBzdXBwb3J0cyBhbiBvcHRpb25hbCAnaGFuZGxlcnMnIGFyZ3VtZW50IHRha2luZyBhbgorICBpdGVyYWJsZSBvZiBoYW5kbGVycyB0byBiZSBhZGRlZCB0byB0aGUgcm9vdCBsb2dnZXIuIEFkZGl0aW9uYWwgcGFyYW1ldGVyCisgIGNoZWNrcyB3ZXJlIGFsc28gYWRkZWQgdG8gYmFzaWNDb25maWcuCisKKy0gSXNzdWUgIzExODE0OiBGaXggbGlrZWx5IHR5cG8gaW4gbXVsdGlwcm9jZXNzaW5nLlBvb2wuX3Rlcm1pbmF0ZSgpLgorCistIElzc3VlICMxMTc0NzogRml4IHJhbmdlIGZvcm1hdHRpbmcgaW4gZGlmZmxpYi5jb250ZXh0X2RpZmYoKSBhbmQKKyAgZGlmZmxpYi51bmlmaWVkX2RpZmYoKS4KKworLSBJc3N1ZSAjODQyODogRml4IGEgcmFjZSBjb25kaXRpb24gaW4gbXVsdGlwcm9jZXNzaW5nLlBvb2wgd2hlbiB0ZXJtaW5hdGluZworICB3b3JrZXIgcHJvY2Vzc2VzOiBuZXcgcHJvY2Vzc2VzIHdvdWxkIGJlIHNwYXduZWQgd2hpbGUgdGhlIHBvb2wgaXMgYmVpbmcKKyAgc2h1dCBkb3duLiAgUGF0Y2ggYnkgQ2hhcmxlcy1GcmFuw6dvaXMgTmF0YWxpLgorCistIElzc3VlICMyNjUwOiByZS5lc2NhcGUoKSBubyBsb25nZXIgZXNjYXBlcyB0aGUgJ18nLgorCistIElzc3VlICMxMTc1Nzogc2VsZWN0LnNlbGVjdCgpIG5vdyByYWlzZXMgVmFsdWVFcnJvciB3aGVuIGEgbmVnYXRpdmUgdGltZW91dAorICBpcyBwYXNzZWQgKHByZXZpb3VzbHksIGEgc2VsZWN0LmVycm9yIHdpdGggRUlOVkFMIHdvdWxkIGJlIHJhaXNlZCkuICBQYXRjaAorICBieSBDaGFybGVzLUZyYW7Dp29pcyBOYXRhbGkuCisKKy0gSXNzdWUgIzczMTE6IGZpeCBodG1sLnBhcnNlciB0byBhY2NlcHQgbm9uLUFTQ0lJIGF0dHJpYnV0ZSB2YWx1ZXMuCisKKy0gSXNzdWUgIzExNjA1OiBlbWFpbC5wYXJzZXIuQnl0ZXNGZWVkUGFyc2VyIHdhcyBpbmNvcnJlY3RseSBjb252ZXJ0aW5nCisgIG11bHRpcGFydCBzdWJwYXJ0cyB3aXRoIGFuIDgtYml0IENURSBpbnRvIHVuaWNvZGUgaW5zdGVhZCBvZiBwcmVzZXJ2aW5nIHRoZQorICBieXRlcy4KKworLSBJc3N1ZSAjMTY5MDYwODogZW1haWwudXRpbC5mb3JtYXRhZGRyIGlzIG5vdyBSRkMgMjA0NyBhd2FyZTogIGl0IG5vdyBoYXMgYQorICBjaGFyc2V0IHBhcmFtZXRlciB0aGF0IGRlZmF1bHRzIHRvIHV0Zi04IGFuZCBpcyB1c2VkIGFzIHRoZSBjaGFyc2V0IGZvciBSRkMKKyAgMjA0NyBlbmNvZGluZyB3aGVuIHRoZSByZWFsbmFtZSBjb250YWlucyBub24tQVNDSUkgY2hhcmFjdGVycy4KKworLSBJc3N1ZSAjMTA5NjM6IEVuc3VyZSB0aGF0IHN1YnByb2Nlc3MuY29tbXVuaWNhdGUoKSBuZXZlciByYWlzZXMgRVBJUEUuCisKKy0gSXNzdWUgIzEwNzkxOiBJbXBsZW1lbnQgbWlzc2luZyBtZXRob2QgR3ppcEZpbGUucmVhZDEoKSwgYWxsb3dpbmcgR3ppcEZpbGUKKyAgdG8gYmUgd3JhcHBlZCBpbiBhIFRleHRJT1dyYXBwZXIuICBQYXRjaCBieSBOYWRlZW0gVmF3ZGEuCisKKy0gSXNzdWUgIzExNzA3OiBBZGRlZCBhIGZhc3QgQyB2ZXJzaW9uIG9mIGZ1bmN0b29scy5jbXBfdG9fa2V5KCkuCisgIFBhdGNoIGJ5IEZpbGlwIEdydXN6Y3p5xYRza2kuCisKKy0gSXNzdWUgIzExNjg4OiBBZGQgc3FsaXRlMy5Db25uZWN0aW9uLnNldF90cmFjZV9jYWxsYmFjaygpLiAgUGF0Y2ggYnkKKyAgVG9yc3RlbiBMYW5kc2Nob2ZmLgorCistIElzc3VlICMxMTc0NjogRml4IFNTTENvbnRleHQubG9hZF9jZXJ0X2NoYWluKCkgdG8gYWNjZXB0IGVsbGlwdGljIGN1cnZlCisgIHByaXZhdGUga2V5cy4KKworLSBJc3N1ZSAjNTg2MzogUmV3cml0ZSBCWjJGaWxlIGluIHB1cmUgUHl0aG9uLCBhbmQgYWxsb3cgaXQgdG8gYWNjZXB0CisgIGZpbGUtbGlrZSBvYmplY3RzIHVzaW5nIGEgbmV3IGBgZmlsZW9iamBgIGNvbnN0cnVjdG9yIGFyZ3VtZW50LiAgUGF0Y2ggYnkKKyAgTmFkZWVtIFZhd2RhLgorCistIHVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydFNhbWVFbGVtZW50cyBoYXMgYmVlbiByZW1vdmVkLgorCistIHN5cy5nZXRmaWxlc3lzdGVtZW5jb2RpbmcoKSByYWlzZXMgYSBSdW50aW1lRXJyb3IgaWYgaW5pdGZzZW5jb2RpbmcoKSB3YXMgbm90CisgIGNhbGxlZCB5ZXQ6IGRldGVjdCBib290c3RyYXAgKHN0YXJ0dXApIGlzc3VlcyBlYXJsaWVyLgorCistIElzc3VlICMxMTM5MzogQWRkIHRoZSBuZXcgZmF1bHRoYW5kbGVyIG1vZHVsZS4KKworLSBJc3N1ZSAjMTE2MTg6IEZpeCB0aGUgdGltZW91dCBsb2dpYyBpbiB0aHJlYWRpbmcuTG9jay5hY3F1aXJlKCkgdW5kZXIgV2luZG93cy4KKworLSBSZW1vdmVkIHRoZSAnc3RyaWN0JyBhcmd1bWVudCB0byBlbWFpbC5wYXJzZXIuUGFyc2VyLCB3aGljaCBoYXMgYmVlbgorICBkZXByZWNhdGVkIHNpbmNlIFB5dGhvbiAyLjQuCisKKy0gSXNzdWUgIzExMjU2OiBGaXggaW5zcGVjdC5nZXRjYWxsYXJncyBvbiBmdW5jdGlvbnMgdGhhdCB0YWtlIG9ubHkga2V5d29yZAorICBhcmd1bWVudHMuCisKKy0gSXNzdWUgIzExNjk2OiBGaXggSUQgZ2VuZXJhdGlvbiBpbiBtc2lsaWIuCisKKy0gaXRlcnRvb2xzLmFjY3VtdWxhdGUgbm93IHN1cHBvcnRzIGFuIG9wdGlvbmFsICpmdW5jKiBhcmd1bWVudCBmb3IKKyAgYSB1c2VyLXN1cHBsaWVkIGJpbmFyeSBmdW5jdGlvbi4KKworLSBJc3N1ZSAjMTE2OTI6IFJlbW92ZSB1bm5lY2Vzc2FyeSBkZW1vIGZ1bmN0aW9ucyBpbiBzdWJwcm9jZXNzIG1vZHVsZS4KKworLSBJc3N1ZSAjOTY5NjogRml4IGV4Y2VwdGlvbiBpbmNvcnJlY3RseSByYWlzZWQgYnkgeGRybGliLlBhY2tlci5wYWNrX2ludCB3aGVuCisgIHRyeWluZyB0byBwYWNrIGEgbmVnYXRpdmUgKGluLXJhbmdlKSBpbnRlZ2VyLgorCistIElzc3VlICMxMTY3NTogbXVsdGlwcm9jZXNzaW5nLltSYXddQXJyYXkgb2JqZWN0cyBjcmVhdGVkIGZyb20gYW4gaW50ZWdlciBzaXplCisgIGFyZSBub3cgemVyb2VkIG9uIGNyZWF0aW9uLiAgVGhpcyBtYXRjaGVzIHRoZSBiZWhhdmlvdXIgc3BlY2lmaWVkIGJ5IHRoZQorICBkb2N1bWVudGF0aW9uLgorCistIElzc3VlICM3NjM5OiBGaXggc2hvcnQgZmlsZSBuYW1lIGdlbmVyYXRpb24gaW4gYmRpc3RfbXNpCisKKy0gSXNzdWUgIzExNjU5OiBGaXggUmVzb3VyY2VXYXJuaW5nIGluIHRlc3Rfc3VicHJvY2VzcyBpbnRyb2R1Y2VkIGJ5ICMxMTQ1OS4KKyAgUGF0Y2ggYnkgQmVuIEhheWRlbi4KKworLSBJc3N1ZSAjMTE2MzU6IERvbid0IHVzZSBwb2xsaW5nIGluIHdvcmtlciB0aHJlYWRzIGFuZCBwcm9jZXNzZXMgbGF1bmNoZWQgYnkKKyAgY29uY3VycmVudC5mdXR1cmVzLgorCistIElzc3VlICM2ODExOiBBbGxvdyBpbXBvcnRsaWIgdG8gY2hhbmdlIGEgY29kZSBvYmplY3QncyBjb19maWxlbmFtZSBhdHRyaWJ1dGUKKyAgdG8gbWF0Y2ggdGhlIHBhdGggdG8gd2hlcmUgdGhlIHNvdXJjZSBjb2RlIGN1cnJlbnRseSBpcywgbm90IHdoZXJlIHRoZSBjb2RlCisgIG9iamVjdCBvcmlnaW5hbGx5IGNhbWUgZnJvbS4KKworLSBJc3N1ZSAjODc1NDogSGF2ZSBpbXBvcnRsaWIgdXNlIHRoZSByZXByIG9mIGEgbW9kdWxlIG5hbWUgaW4gZXJyb3IgbWVzc2FnZXMuCisKKy0gSXNzdWUgIzExNTkxOiBQcmV2ZW50ICJpbXBvcnQgc2l0ZSIgZnJvbSBtb2RpZnlpbmcgc3lzLnBhdGggd2hlbiBweXRob24KKyAgd2FzIHN0YXJ0ZWQgd2l0aCAtUy4KKworLSBjb2xsZWN0aW9ucy5uYW1lZHR1cGxlKCkgbm93IGFkZHMgYSBfc291cmNlIGF0dHJpYnV0ZSB0byB0aGUgZ2VuZXJhdGVkCisgIGNsYXNzLiAgVGhpcyBtYWtlIHRoZSBzb3VyY2UgbW9yZSBhY2Nlc3NpYmxlIHRoYW4gdGhlIG91dGRhdGVkCisgICJ2ZXJib3NlIiBvcHRpb24gd2hpY2ggcHJpbnRzIHRvIHN0ZG91dCBidXQgZG9lc24ndCBtYWtlIHRoZSBzb3VyY2UKKyAgc3RyaW5nIGF2YWlsYWJsZS4KKworLSBJc3N1ZSAjMTEzNzE6IE1hcmsgZ2V0b3B0IGVycm9yIG1lc3NhZ2VzIGFzIGxvY2FsaXphYmxlLiAgUGF0Y2ggYnkgRmlsaXAKKyAgR3J1c3pjennFhHNraS4KKworLSBJc3N1ZSAjMTEzMzM6IEFkZCBfX3Nsb3RzX18gdG8gY29sbGVjdGlvbnMgQUJDcy4KKworLSBJc3N1ZSAjMTE2Mjg6IGNtcF90b19rZXkgZ2VuZXJhdGVkIGNsYXNzIHNob3VsZCB1c2UgX19zbG90c19fLgorCistIElzc3VlICMxMTY2NjogbGV0IGhlbHAoKSBkaXNwbGF5IG5hbWVkIHR1cGxlIGF0dHJpYnV0ZXMgYW5kIG1ldGhvZHMKKyAgdGhhdCBzdGFydCB3aXRoIGEgbGVhZGluZyB1bmRlcnNjb3JlLgorCistIElzc3VlICMxMTY2MjogTWFrZSB1cmxsaWIgYW5kIHVybGxpYjIgaWdub3JlIHJlZGlyZWN0aW9ucyBpZiB0aGUKKyAgc2NoZW1lIGlzIG5vdCBIVFRQLCBIVFRQUyBvciBGVFAgKENWRS0yMDExLTE1MjEpLgorCistIElzc3VlICM1NTM3OiBGaXggdGltZTJpc296KCkgYW5kIHRpbWUybmV0c2NhcGUoKSBmdW5jdGlvbnMgb2YKKyAgaHR0cGxpYi5jb29raWVqYXIgZm9yIGV4cGlyYXRpb24geWVhciBncmVhdGVyIHRoYW4gMjAzOCBvbiAzMi1iaXQgc3lzdGVtcy4KKworLSBJc3N1ZSAjNDM5MTogVXNlIHByb3BlciBnZXR0ZXh0IHBsdXJhbCBmb3JtcyBpbiBvcHRwYXJzZS4KKworLSBJc3N1ZSAjMTExMjc6IFJhaXNlIGEgVHlwZUVycm9yIHdoZW4gdHJ5aW5nIHRvIHBpY2tsZSBhIHNvY2tldCBvYmplY3QuCisKKy0gSXNzdWUgIzExNTYzOiBDb25uZWN0aW9uOmNsb3NlIGhlYWRlciBpcyBzZW50IGJ5IHJlcXVlc3RzIHVzaW5nIFVSTE9wZW5lcgorICBjbGFzcyB3aGljaCBoZWxwcyBpbiBjbG9zaW5nIG9mIHNvY2tldHMgYWZ0ZXIgY29ubmVjdGlvbiBpcyBvdmVyLiBQYXRjaAorICBjb250cmlidXRpb25zIGJ5IEplZmYgTWNOZWlsIGFuZCBOYWRlZW0gVmF3ZGEuCisKKy0gSXNzdWUgIzExNDU5OiBBIGBgYnVmc2l6ZWBgIHZhbHVlIG9mIDAgaW4gc3VicHJvY2Vzcy5Qb3BlbigpIHJlYWxseSBjcmVhdGVzCisgIHVuYnVmZmVyZWQgcGlwZXMsIHN1Y2ggdGhhdCBzZWxlY3QoKSB3b3JrcyBwcm9wZXJseSBvbiB0aGVtLgorCistIElzc3VlICM1NDIxOiBGaXggbWlzbGVhZGluZyBlcnJvciBtZXNzYWdlIHdoZW4gb25lIG9mIHNvY2tldC5zZW5kdG8oKSdzCisgIGFyZ3VtZW50cyBoYXMgdGhlIHdyb25nIHR5cGUuICBQYXRjaCBieSBOaWtpdGEgVmV0b3Noa2luLgorCistIElzc3VlICMxMDgxMjogQWRkIHNvbWUgZXh0cmEgcG9zaXggZnVuY3Rpb25zIHRvIHRoZSBvcyBtb2R1bGUuCisKKy0gSXNzdWUgIzEwOTc5OiB1bml0dGVzdCBzdGRvdXQgYnVmZmVyaW5nIG5vdyB3b3JrcyB3aXRoIGNsYXNzIGFuZCBtb2R1bGUKKyAgc2V0dXAgYW5kIHRlYXJkb3duLgorCistIElzc3VlICMxMTU3NzogZml4IFJlc291cmNlV2FybmluZyB0cmlnZ2VyZWQgYnkgaW1wcm92ZWQgYmluaGV4IHRlc3QgY292ZXJhZ2UKKworLSBJc3N1ZSAjMTEyNDM6IGZpeCB0aGUgcGFyYW1ldGVyIHF1ZXJ5aW5nIG1ldGhvZHMgb2YgTWVzc2FnZSB0byB3b3JrIGlmCisgIHRoZSBoZWFkZXJzIGNvbnRhaW4gdW4tZW5jb2RlZCBub24tQVNDSUkgZGF0YS4KKworLSBJc3N1ZSAjMTE0MDE6IGZpeCBoYW5kbGluZyBvZiBoZWFkZXJzIHdpdGggbm8gdmFsdWU7IHRoaXMgZml4ZXMgYSByZWdyZXNzaW9uCisgIHJlbGF0aXZlIHRvIFB5dGhvbjIgYW5kIHRoZSByZXN1bHQgaXMgbm93IHRoZSBzYW1lIGFzIGl0IHdhcyBpbiBQeXRob24yLgorCistIElzc3VlICM5Mjk4OiBiYXNlNjQgYm9kaWVzIHdlcmVuJ3QgYmVpbmcgZm9sZGVkIHRvIGxpbmUgbGVuZ3RocyBsZXNzIHRoYW4gNzgsCisgIHdoaWNoIHdhcyBhIHJlZ3Jlc3Npb24gcmVsYXRpdmUgdG8gUHl0aG9uMi4gIFVubGlrZSBQeXRob24yLCB0aGUgbGFzdCBsaW5lCisgIG9mIHRoZSBmb2xkZWQgYm9keSBub3cgZW5kcyB3aXRoIGEgY2FycmlhZ2UgcmV0dXJuLgorCistIElzc3VlICMxMTU2MDogc2h1dGlsLnVucGFja19hcmNoaXZlIG5vdyBjb3JyZWN0bHkgaGFuZGxlcyB0aGUgZm9ybWF0CisgIHBhcmFtZXRlci4gUGF0Y2ggYnkgRXZhbiBEYW5kcmVhLgorCistIElzc3VlICM1ODcwOiBBZGQgYHN1YnByb2Nlc3MuREVWTlVMTGAgY29uc3RhbnQuCisKKy0gSXNzdWUgIzExMTMzOiBmaXggdHdvIGNhc2VzIHdoZXJlIGluc3BlY3QuZ2V0YXR0cl9zdGF0aWMgY2FuIHRyaWdnZXIgY29kZQorICBleGVjdXRpb24uIFBhdGNoIGJ5IEFuZHJlYXMgU3TDvGhyay4KKworLSBJc3N1ZSAjMTE1Njk6IHVzZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBzeXNjdGwgY29tbWFuZCBpbiBtdWx0aXByb2Nlc3NpbmcgdG8KKyAgZW5zdXJlIHRoYXQgaXQgd2lsbCBiZSBmb3VuZCByZWdhcmRsZXNzIG9mIHRoZSBzaGVsbCBQQVRILiBUaGlzIGVuc3VyZXMKKyAgdGhhdCBtdWx0aXByb2Nlc3NpbmcuY3B1X2NvdW50IHdvcmtzIG9uIGRlZmF1bHQgaW5zdGFsbHMgb2YgTWFjT1NYLgorCistIElzc3VlICMxMTUwMTogZGlzdXRpbHMuYXJjaGl2ZV91dGlscy5tYWtlX3ppcGZpbGUgbm8gbG9uZ2VyIGZhaWxzIGlmIHpsaWIgaXMKKyAgbm90IGluc3RhbGxlZC4gSW5zdGVhZCwgdGhlIHppcGZpbGUuWklQX1NUT1JFRCBjb21wcmVzc2lvbiBpcyB1c2VkIHRvIGNyZWF0ZQorICB0aGUgWmlwRmlsZS4gUGF0Y2ggYnkgTmF0YWxpYSBCLiBCaWRhcnQuCisKKy0gSXNzdWUgIzExMjg5OiBgc210cC5TTVRQYCBjbGFzcyBpcyBub3cgYSBjb250ZXh0IG1hbmFnZXIgc28gaXQgY2FuIGJlIHVzZWQKKyAgaW4gYSBgd2l0aGAgc3RhdGVtZW50LiAgQ29udHJpYnV0ZWQgYnkgR2lhbXBhb2xvIFJvZG9sYS4KKworLSBJc3N1ZSAjMTE1NTQ6IEZpeGVkIHN1cHBvcnQgZm9yIEphcGFuZXNlIGNvZGVjczsgcHJldmlvdXNseSB0aGUgYm9keSBvdXRwdXQKKyAgZW5jb2Rpbmcgd2FzIG5vdCBkb25lIGlmIGV1Yy1qcCBvciBzaGlmdC1qaXMgd2FzIHNwZWNpZmllZCBhcyB0aGUgY2hhcnNldC4KKworLSBJc3N1ZSAjMTE1MDk6IFNpZ25pZmljYW50bHkgaW5jcmVhc2UgdGVzdCBjb3ZlcmFnZSBvZiBmaWxlaW5wdXQuCisgIFBhdGNoIGJ5IERlbnZlciBDb25leWJlYXJlIGF0IFB5Q29uIDIwMTEgU3ByaW50cy4KKworLSBJc3N1ZSAjMTE0MDc6IGBUZXN0Q2FzZS5ydW5gIHJldHVybnMgdGhlIHJlc3VsdCBvYmplY3QgdXNlZCBvciBjcmVhdGVkLgorICBDb250cmlidXRlZCBieSBKYW5hdGhhbiBIYXJ0bGV5LgorCistIElzc3VlICMxMTUwMDogRml4ZWQgYSBidWcgaW4gdGhlIE9TIFggcHJveHkgYnlwYXNzIGNvZGUgZm9yIGZ1bGx5IHF1YWxpZmllZAorICBJUCBhZGRyZXNzZXMgaW4gdGhlIHByb3h5IGV4Y2VwdGlvbiBsaXN0LgorCistIElzc3VlICMxMTQ5MTogZGJtLmVycm9yIGlzIG5vIGxvbmdlciByYWlzZWQgd2hlbiBkYm0ub3BlbiBpcyBjYWxsZWQgd2l0aAorICB0aGUgIm4iIGFzIHRoZSBmbGFnIGFyZ3VtZW50IGFuZCB0aGUgZmlsZSBleGlzdHMuIFRoZSBiZWhhdmlvciBtYXRjaGVzCisgIHRoZSBkb2N1bWVudGF0aW9uIGFuZCBnZW5lcmFsIGxvZ2ljLgorCistIElzc3VlICMxMTYyNDc3OiBQb3N0ZWwgUHJpbmNpcGxlIGFkanVzdG1lbnQgdG8gZW1haWwgZGF0ZSBwYXJzaW5nOiBoYW5kbGUgdGhlCisgIGZhY3QgdGhhdCBzb21lIG5vbi1jb21wbGlhbnQgTVVBcyB1c2UgJy4nIGluc3RlYWQgb2YgJzonIGluIHRpbWUgc3BlY3MuCisKKy0gSXNzdWUgIzExMTMxOiBGaXggc2lnbiBvZiB6ZXJvIGluIGRlY2ltYWwuRGVjaW1hbCBwbHVzIGFuZCBtaW51cworICBvcGVyYXRpb25zIHdoZW4gdGhlIHJvdW5kaW5nIG1vZGUgaXMgUk9VTkRfRkxPT1IuCisKKy0gSXNzdWUgIzk5MzU6IFNwZWVkIHVwIHBpY2tsaW5nIG9mIGluc3RhbmNlcyBvZiB1c2VyLWRlZmluZWQgY2xhc3Nlcy4KKworLSBJc3N1ZSAjNTYyMjogRml4IGN1cnNlcy53cmFwcGVyIHRvIHJhaXNlIGNvcnJlY3QgZXhjZXB0aW9uIGlmIGN1cnNlcworICBpbml0aWFsaXphdGlvbiBmYWlscy4KKworLSBJc3N1ZSAjMTE0MDg6IEluIHRocmVhZGluZy5Mb2NrLmFjcXVpcmUoKSwgb25seSBjYWxsIGdldHRpbWVvZmRheSgpIHdoZW4KKyAgcmVhbGx5IG5lY2Vzc2FyeS4gIFBhdGNoIGJ5IENoYXJsZXMtRnJhbsOnb2lzIE5hdGFsaS4KKworLSBJc3N1ZSAjMTEzOTE6IFdyaXRpbmcgdG8gYSBtbWFwIG9iamVjdCBjcmVhdGVkIHdpdGgKKyAgYGBtbWFwLlBST1RfUkVBRHxtbWFwLlBST1RfRVhFQ2BgIHdvdWxkIHNlZ2ZhdWx0IGluc3RlYWQgb2YgcmFpc2luZyBhCisgIFR5cGVFcnJvci4gIFBhdGNoIGJ5IENoYXJsZXMtRnJhbsOnb2lzIE5hdGFsaS4KKworLSBJc3N1ZSAjOTc5NTogYWRkIGNvbnRleHQgbWFuYWdlbWVudCBwcm90b2NvbCBzdXBwb3J0IGZvciBubnRwbGliLk5OVFAgY2xhc3MuCisKKy0gSXNzdWUgIzExMzA2OiBtYWlsYm94IGluIGNlcnRhaW4gY2FzZXMgYWRhcHRzIHRvIGFuIGluYWJpbGl0eSB0byBvcGVuCisgIGNlcnRhaW4gZmlsZXMgaW4gcmVhZC13cml0ZSBtb2RlLiAgUHJldmlvdXNseSBpdCBkZXRlY3RlZCB0aGlzIGJ5CisgIGNoZWNraW5nIGZvciBFQUNDRVMsIG5vdyBpdCBhbHNvIGNoZWNrcyBmb3IgRVJPRlMuCisKKy0gSXNzdWUgIzExMjY1OiBhc3luY29yZSBub3cgY29ycmVjdGx5IGhhbmRsZXMgRVBJUEUsIEVCQURGIGFuZCBFQUdBSU4gZXJyb3JzCisgIG9uIGFjY2VwdCgpLCBzZW5kKCkgYW5kIHJlY3YoKS4KKworLSBJc3N1ZSAjMTEzNzc6IERlcHJlY2F0ZSBwbGF0Zm9ybS5wb3BlbigpIGFuZCByZWltcGxlbWVudCBpdCB3aXRoIG9zLnBvcGVuKCkuCisKKy0gSXNzdWUgIzg1MTM6IE9uIFVOSVgsIHN1YnByb2Nlc3Mgc3VwcG9ydHMgYnl0ZXMgY29tbWFuZCBzdHJpbmcuCisKKy0gSXNzdWUgIzEwODY2OiBBZGQgc29ja2V0LnNldGhvc3RuYW1lKCkuICBJbml0aWFsIHBhdGNoIGJ5IFJvc3MgTGFnZXJ3YWxsLgorCistIElzc3VlICMxMTE0MDogTG9jay5yZWxlYXNlKCkgbm93IHJhaXNlcyBhIFJ1bnRpbWVFcnJvciB3aGVuIGF0dGVtcHRpbmcKKyAgdG8gcmVsZWFzZSBhbiB1bmFjcXVpcmVkIGxvY2ssIGFzIGNsYWltZWQgaW4gdGhlIHRocmVhZGluZyBkb2N1bWVudGF0aW9uLgorICBUaGUgX3RocmVhZC5lcnJvciBleGNlcHRpb24gaXMgbm93IGFuIGFsaWFzIG9mIFJ1bnRpbWVFcnJvci4gIFBhdGNoIGJ5CisgIEZpbGlwIEdydXN6Y3p5xYRza2kuICBQYXRjaCBmb3IgX2R1bW15X3RocmVhZCBieSBBeW1lcmljIEF1Z3VzdGluLgorCistIElzc3VlICM4NTk0OiBmdHBsaWIgbm93IHByb3ZpZGVzIGEgc291cmNlX2FkZHJlc3MgcGFyYW1ldGVyIHRvIHNwZWNpZnkgd2hpY2gKKyAgKGFkZHJlc3MsIHBvcnQpIHRvIGJpbmQgdG8gYmVmb3JlIGNvbm5lY3RpbmcuCisKKy0gSXNzdWUgIzExMzI2OiBBZGQgdGhlIG1pc3NpbmcgY29ubmVjdF9leCgpIGltcGxlbWVudGF0aW9uIGZvciBTU0wgc29ja2V0cywKKyAgYW5kIG1ha2UgaXQgd29yayBmb3Igbm9uLWJsb2NraW5nIGNvbm5lY3RzLgorCistIElzc3VlICMxMTI5NzogQWRkIGNvbGxlY3Rpb25zLkNoYWluTWFwKCkuCisKKy0gSXNzdWUgIzEwNzU1OiBBZGQgdGhlIHBvc2l4LmZsaXN0ZGlyKCkgZnVuY3Rpb24uICBQYXRjaCBieSBSb3NzIExhZ2Vyd2FsbC4KKworLSBJc3N1ZSAjNDc2MTogQWRkIHRoZSBgYCphdCgpYGAgZmFtaWx5IG9mIGZ1bmN0aW9ucyAob3BlbmF0KCksIGV0Yy4pIHRvIHRoZQorICBwb3NpeCBtb2R1bGUuICBQYXRjaCBieSBSb3NzIExhZ2Vyd2FsbC4KKworLSBJc3N1ZSAjNzMyMjogVHJ5aW5nIHRvIHJlYWQgZnJvbSBhIHNvY2tldCdzIGZpbGUtbGlrZSBvYmplY3QgYWZ0ZXIgYSB0aW1lb3V0CisgIG9jY3VycmVkIG5vdyByYWlzZXMgYW4gZXJyb3IgaW5zdGVhZCBvZiBzaWxlbnRseSBsb3NpbmcgZGF0YS4KKworLSBJc3N1ZSAjMTEyOTE6IHBvcGxpYi5QT1Agbm8gbG9uZ2VyIHN1cHByZXNzZXMgZXJyb3JzIG9uIHF1aXQoKS4KKworLSBJc3N1ZSAjMTExNzc6IGFzeW5jb3JlJ3MgY3JlYXRlX3NvY2tldCgpIGFyZ3VtZW50cyBjYW4gbm93IGJlIG9taXR0ZWQuCisKKy0gSXNzdWUgIzYwNjQ6IEFkZCBhIGBgZGFlbW9uYGAga2V5d29yZCBhcmd1bWVudCB0byB0aGUgdGhyZWFkaW5nLlRocmVhZAorICBhbmQgbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3MgY29uc3RydWN0b3JzIGluIG9yZGVyIHRvIG92ZXJyaWRlIHRoZQorICBkZWZhdWx0IGJlaGF2aW91ciBvZiBpbmhlcml0aW5nIHRoZSBkYWVtb25pYyBwcm9wZXJ0eSBmcm9tIHRoZSBjdXJyZW50CisgIHRocmVhZC9wcm9jZXNzLgorCistIElzc3VlICMxMDk1NjogQnVmZmVyZWQgSS9PIGNsYXNzZXMgcmV0cnkgcmVhZGluZyBvciB3cml0aW5nIGFmdGVyIGEgc2lnbmFsCisgIGhhcyBhcnJpdmVkIGFuZCB0aGUgaGFuZGxlciByZXR1cm5lZCBzdWNjZXNzZnVsbHkuCisKKy0gSXNzdWUgIzEwNzg0OiBOZXcgb3MuZ2V0cHJpb3JpdHkoKSBhbmQgb3Muc2V0cHJpb3JpdHkoKSBmdW5jdGlvbnMuCisKKy0gSXNzdWUgIzExMTE0OiBGaXggY2F0YXN0cm9waGljIHBlcmZvcm1hbmNlIG9mIHRlbGwoKSBvbiB0ZXh0IGZpbGVzICh1cAorICB0byAxMDAweCBmYXN0ZXIgaW4gc29tZSBjYXNlcykuICBJdCBpcyBzdGlsbCBvbmUgdG8gdHdvIG9yZGVyIG9mIG1hZ25pdHVkZXMKKyAgc2xvd2VyIHRoYW4gYmluYXJ5IHRlbGwoKS4KKworLSBJc3N1ZSAjMTA4ODI6IEFkZCBvcy5zZW5kZmlsZSBmdW5jdGlvbi4KKworLSBJc3N1ZSAjMTA4Njg6IEFsbG93IHVzYWdlIG9mIHRoZSByZWdpc3RlciBtZXRob2Qgb2YgYW4gQUJDIGFzIGEgY2xhc3MKKyAgZGVjb3JhdG9yLgorCistIElzc3VlICMxMTIyNDogRml4ZWQgYSByZWdyZXNzaW9uIGluIHRhcmZpbGUgdGhhdCBhZmZlY3RlZCB0aGUgZmlsZS1saWtlCisgIG9iamVjdHMgcmV0dXJuZWQgYnkgVGFyRmlsZS5leHRyYWN0ZmlsZSgpIHJlZ2FyZGluZyBwZXJmb3JtYW5jZSwgbWVtb3J5CisgIGNvbnN1bXB0aW9uIGFuZCBmYWlsdXJlcyB3aXRoIHRoZSBzdHJlYW0gaW50ZXJmYWNlLgorCistIElzc3VlICMxMDkyNDogQWRkaW5nIHNhbHQgYW5kIE1vZHVsYXIgQ3J5cHQgRm9ybWF0IHRvIGNyeXB0IGxpYnJhcnkuCisgIE1vdmVkIG9sZCBDIHdyYXBwZXIgdG8gX2NyeXB0LCBhbmQgYWRkZWQgYSBQeXRob24gd3JhcHBlciB3aXRoCisgIGVuaGFuY2VkIHNhbHQgZ2VuZXJhdGlvbiBhbmQgc2ltcGxlciBBUEkgZm9yIHBhc3N3b3JkIGdlbmVyYXRpb24uCisKKy0gSXNzdWUgIzExMDc0OiBNYWtlICd0b2tlbml6ZScgc28gaXQgY2FuIGJlIHJlbG9hZGVkLgorCistIElzc3VlICMxMTA4NTogTW92ZWQgY29sbGVjdGlvbnMgYWJzdHJhY3QgYmFzZSBjbGFzc2VzIGludG8gYSBzZXBhcmF0ZQorICBtb2R1bGUgY2FsbGVkIGNvbGxlY3Rpb25zLmFiYywgZm9sbG93aW5nIHRoZSBwYXR0ZXJuIHVzZWQgYnkgaW1wb3J0bGliLmFiYy4KKyAgRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LCB0aGUgbmFtZXMgYXJlIGltcG9ydGVkIGludG8gdGhlIGNvbGxlY3Rpb25zCisgIG1vZHVsZS4KKworLSBJc3N1ZSAjNDY4MTogQWxsb3cgbW1hcCgpIHRvIHdvcmsgb24gZmlsZSBzaXplcyBhbmQgb2Zmc2V0cyBsYXJnZXIgdGhhbgorICA0R0IsIGV2ZW4gb24gMzItYml0IGJ1aWxkcy4gIEluaXRpYWwgcGF0Y2ggYnkgUm9zcyBMYWdlcndhbGwsIGFkYXB0ZWQgZm9yCisgIDMyLWJpdCBXaW5kb3dzLgorCistIElzc3VlICMxMTE2OTogY29tcGlsZWFsbCBtb2R1bGUgdXNlcyByZXByKCkgdG8gZm9ybWF0IGZpbGVuYW1lcyBhbmQgcGF0aHMgdG8KKyAgZXNjYXBlIHN1cnJvZ2F0ZSBjaGFyYWN0ZXJzIGFuZCBzaG93IHNwYWNlcy4KKworLSBJc3N1ZSAjMTEwODk6IEZpeCBwZXJmb3JtYW5jZSBpc3N1ZSBsaW1pdGluZyB0aGUgdXNlIG9mIENvbmZpZ1BhcnNlcigpCisgIHdpdGggbGFyZ2UgY29uZmlnIGZpbGVzLgorCistIElzc3VlICMxMDI3NjogRml4IHRoZSByZXN1bHRzIG9mIHpsaWIuY3JjMzIoKSBhbmQgemxpYi5hZGxlcjMyKCkgb24gYnVmZmVycworICBsYXJnZXIgdGhhbiA0R0IuICBQYXRjaCBieSBOYWRlZW0gVmF3ZGEuCisKKy0gSXNzdWUgIzExMzg4OiBBZGRlZCBhIGNsZWFyKCkgbWV0aG9kIHRvIE11dGFibGVTZXF1ZW5jZQorCistIElzc3VlICMxMTE3NDogQWRkIGFyZ3BhcnNlLk1ldGF2YXJUeXBlSGVscEZvcm1hdHRlciwgd2hpY2ggdXNlcyB0eXBlIG5hbWVzCisgIGZvciB0aGUgbmFtZXMgb2Ygb3B0aW9uYWwgYW5kIHBvc2l0aW9uYWwgYXJndW1lbnRzIGluIGhlbHAgbWVzc2FnZXMuCisKKy0gSXNzdWUgIzkzNDg6IFJhaXNlIGFuIGVhcmx5IGVycm9yIGlmIGFyZ3BhcnNlIG5hcmdzIGFuZCBtZXRhdmFyIGRvbid0IG1hdGNoLgorCistIElzc3VlICM4OTgyOiBJbXByb3ZlIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgYXJncGFyc2UgTmFtZXNwYWNlIG9iamVjdC4KKworLSBJc3N1ZSAjOTM0MzogRG9jdW1lbnQgdGhhdCBhcmdwYXJzZSBwYXJlbnQgcGFyc2VycyBtdXN0IGJlIGNvbmZpZ3VyZWQgYmVmb3JlCisgIHRoZWlyIGNoaWxkcmVuLgorCistIElzc3VlICM5MDI2OiBGaXggb3JkZXIgb2YgYXJncGFyc2Ugc3ViLWNvbW1hbmRzIGluIGhlbHAgbWVzc2FnZXMuCisKKy0gSXNzdWUgIzkzNDc6IEZpeCBmb3JtYXR0aW5nIGZvciB0dXBsZXMgaW4gYXJncGFyc2UgdHlwZT0gZXJyb3IgbWVzc2FnZXMuCisKKy0gSXNzdWUgIzEyMTkxOiBBZGRlZCBzaHV0aWwuY2hvd24oKSB0byBjaGFuZ2UgdXNlciBhbmQvb3IgZ3JvdXAgb3duZXIgb2YgYQorICBnaXZlbiBwYXRoIGFsc28gc3BlY2lmeWluZyB0aGVpciBuYW1lcy4KKworLSBJc3N1ZSAjMTM5ODg6IFRoZSBfZWxlbWVudHRyZWUgYWNjZWxlcmF0b3IgaXMgdXNlZCB3aGVuZXZlciBhdmFpbGFibGUuCisgIE5vdyB4bWwuZXRyZWUuY0VsZW1lbnRUcmVlIGJlY29tZXMgYSBkZXByZWNhdGVkIGFsaWFzIHRvIEVsZW1lbnRUcmVlLgorCitCdWlsZAorLS0tLS0KKworLSBJc3N1ZSAjNjgwNzogUnVuIG1zaXN1cHBvcnQubWFrIGVhcmxpZXIuCisKKy0gSXNzdWUgIzEwNTgwOiBNaW5vciBncmFtbWFyIGNoYW5nZSBpbiBXaW5kb3dzIGluc3RhbGxlci4KKworLSBJc3N1ZSAjMTMzMjY6IENsZWFuIF9fcHljYWNoZV9fIGRpcmVjdG9yaWVzIGNvcnJlY3RseSBvbiBPcGVuQlNELgorCistIFBFUCAzOTM6IHRoZSBjb25maWd1cmUgb3B0aW9uIC0td2l0aC13aWRlLXVuaWNvZGUgaXMgcmVtb3ZlZC4KKworLSBJc3N1ZSAjMTI4NTI6IFNldCBfWE9QRU5fU09VUkNFIHRvIDcwMCwgaW5zdGVhZCBvZiA2MDAsIHRvIGdldCBQT1NJWCAyMDA4CisgIGZ1bmN0aW9ucyBvbiBPcGVuQlNEIChlLmcuIGZkb3BlbmRpcikuCisKKy0gSXNzdWUgIzExODYzOiBSZW1vdmUgc3VwcG9ydCBmb3IgbGVnYWN5IHN5c3RlbXMgZGVwcmVjYXRlZCBpbiBQeXRob24gMy4yCisgIChmb2xsb3dpbmcgUEVQIDExKS4gIFRoZXNlIHN5c3RlbXMgYXJlIHN5c3RlbXMgdXNpbmcgTWFjaCBDIFRocmVhZHMsCisgIFN1bk9TIGxpZ2h0d2VpZ2h0IHByb2Nlc3NlcywgR05VIHB0aCB0aHJlYWRzIGFuZCBJUklYIHRocmVhZHMuCisKKy0gSXNzdWUgIzg3NDY6IENvcnJlY3QgZmF1bHR5IGNvbmZpZ3VyZSBjaGVja3Mgc28gdGhhdCBvcy5jaGZsYWdzKCkgYW5kCisgIG9zLmxjaGZsYWdzKCkgYXJlIG9uY2UgYWdhaW4gYnVpbHQgb24gc3lzdGVtcyB0aGF0IHN1cHBvcnQgdGhlc2UKKyAgZnVuY3Rpb25zIChCU0QgYW5kIE9TIFgpLiAgQWxzbyBhZGQgbmV3IHN0YXQgZmlsZSBmbGFncyBmb3IgT1MgWAorICAoVUZfSElEREVOIGFuZCBVRl9DT01QUkVTU0VEKS4KKworLSBJc3N1ZSAjMTA2NDU6IEluc3RhbGxpbmcgUHl0aG9uIG5vIGxvbmdlciBjcmVhdGVzIGEKKyAgUHl0aG9uLVguWS5aLXB5WC5ZLmVnZy1pbmZvIGZpbGUgaW4gdGhlIGxpYi1keW5sb2FkIGRpcmVjdG9yeS4KKworLSBEbyBub3QgYWNjaWRlbnRhbGx5IGluY2x1ZGUgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHNxbGl0ZS5oIHR3aWNlIHdoZW4KKyAgYnVpbGRpbmcgc3FsaXRlMy4KKworLSBJc3N1ZSAjMTEyMTc6IEZvciA2NC1iaXQvMzItYml0IE1hYyBPUyBYIHVuaXZlcnNhbCBmcmFtZXdvcmsgYnVpbGRzLAorICBlbnN1cmUgIm1ha2UgaW5zdGFsbCIgY3JlYXRlcyBzeW1saW5rcyBpbiAtLXByZWZpeCBiaW4gZm9yIHRoZSAiLTMyIgorICBmaWxlcyBpbiB0aGUgZnJhbWV3b3JrIGJpbiBkaXJlY3RvcnkgbGlrZSB0aGUgaW5zdGFsbGVyIGRvZXMuCisKKy0gSXNzdWUgIzExMzQ3OiBVc2UgLS1uby1hcy1uZWVkZWQgd2hlbiBsaW5raW5nIGxpYnB5dGhvbjMuc28uCisKKy0gSXNzdWUgIzExNDExOiBGaXggJ21ha2UgREVTVERJUj0nIHdpdGggYSByZWxhdGl2ZSBkZXN0aW5hdGlvbi4KKworLSBJc3N1ZSAjMTEyNjg6IFByZXZlbnQgTWFjIE9TIFggSW5zdGFsbGVyIGZhaWx1cmUgaWYgRG9jdW1lbnRhdGlvbgorICBwYWNrYWdlIGhhZCBwcmV2aW91c2x5IGJlZW4gaW5zdGFsbGVkLgorCistIElzc3VlICMxMTQ5NTogT1NGIHN1cHBvcnQgaXMgZWxpbWluYXRlZC4gSXQgd2FzIGRlcHJlY2F0ZWQgaW4gUHl0aG9uIDMuMi4KKworCitJRExFCistLS0tCisKKy0gSXNzdWUgIzExNzE4OiBJRExFJ3Mgb3BlbiBtb2R1bGUgZGlhbG9nIGNvdWxkbid0IGZpbmQgdGhlIF9faW5pdF9fLnB5CisgIGZpbGUgaW4gYSBwYWNrYWdlLgorCitUb29scy9EZW1vcworLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTQwNTM6IHBhdGNoY2hlY2sucHkgKCJtYWtlIHBhdGNoY2hlY2siKSBub3cgd29ya3Mgd2l0aCBNUSBwYXRjaGVzLgorICBQYXRjaCBieSBGcmFuY2lzY28gTWFydMOtbiBCcnVndcOpLgorCistIElzc3VlICMxMzkzMDogMnRvMyBpcyBub3cgYWJsZSB0byB3cml0ZSBpdHMgY29udmVydGVkIG91dHB1dCBmaWxlcyB0byBhbm90aGVyCisgIGRpcmVjdG9yeSB0cmVlIGFzIHdlbGwgYXMgY29weWluZyB1bmNoYW5nZWQgZmlsZXMgYW5kIGFsdGVyaW5nIHRoZSBmaWxlCisgIHN1ZmZpeC4gIFNlZSBpdHMgbmV3IC1vLCAtVyBhbmQgLS1hZGQtc3VmZml4IG9wdGlvbnMuICBUaGlzIG1ha2VzIGl0IG1vcmUKKyAgdXNlZnVsIGluIG1hbnkgYXV0b21hdGVkIGNvZGUgdHJhbnNsYXRpb24gd29ya2Zsb3dzLgorCistIElzc3VlICMxMzYyODogcHl0aG9uLWdkYi5weSBpcyBub3cgYWJsZSB0byByZXRyaWV2ZSBtb3JlIGZyYW1lcyBpbiB0aGUgUHl0aG9uCisgIHRyYWNlYmFjayBpZiBQeXRob24gaXMgb3B0aW1pemVkLgorCistIElzc3VlICMxMTk5NjogbGlicHl0aG9uIChnZGIpLCByZXBsYWNlICJweS1idCIgY29tbWFuZCBieSAicHktYnQtZnVsbCIgYW5kCisgIGFkZCBhIHNtYXJ0ZXIgInB5LWJ0IiBjb21tYW5kIHByaW50aW5nIGEgY2xhc3NpYyBQeXRob24gdHJhY2ViYWNrLgorCistIElzc3VlICMxMTE3OTogTWFrZSBjY2JlbmNoIHdvcmsgdW5kZXIgUHl0aG9uIDMuMSBhbmQgMi43IGFnYWluLgorCistIElzc3VlICMxMDYzOTogcmVpbmRlbnQucHkgbm8gbG9uZ2VyIGNvbnZlcnRzIG5ld2xpbmVzIGFuZCB3aWxsIHJhaXNlCisgIGFuIGVycm9yIGlmIGF0dGVtcHRpbmcgdG8gY29udmVydCBhIGZpbGUgd2l0aCBtaXhlZCBuZXdsaW5lcy4KKyAgIi0tbmV3bGluZSIgb3B0aW9uIGFkZGVkIHRvIHNwZWNpZnkgbmV3IGxpbmUgY2hhcmFjdGVyLgorCitFeHRlbnNpb24gTW9kdWxlcworLS0tLS0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTM4NDA6IFRoZSBlcnJvciBtZXNzYWdlIHByb2R1Y2VkIGJ5IGN0eXBlcy5jcmVhdGVfc3RyaW5nX2J1ZmZlcgorICB3aGVuIGdpdmVuIGEgVW5pY29kZSBzdHJpbmcgaGFzIGJlZW4gZml4ZWQuCisKKy0gSXNzdWUgIzk5NzU6IHNvY2tldDogRml4IGluY29ycmVjdCB1c2Ugb2YgZmxvd2luZm8gYW5kIHNjb3BlX2lkLiBQYXRjaCBieQorICBWaWxtb3MgTmViZWhhai4KKworLSBJc3N1ZSAjNzc3Nzogc29ja2V0OiBBZGQgUmVsaWFibGUgRGF0YWdyYW0gU29ja2V0cyAoUEZfUkRTKSBzdXBwb3J0LgorCistIElzc3VlICMxMzE1OTogRmlsZUlPIGFuZCBCWjJDb21wcmVzc29yL0JaMkRlY29tcHJlc3NvciBub3cgdXNlIGEgbGluZWFyLXRpbWUKKyAgYnVmZmVyIGdyb3d0aCBzdHJhdGVneSBpbnN0ZWFkIG9mIGEgcXVhZHJhdGljLXRpbWUgb25lLgorCistIElzc3VlICMxMDE0MTogc29ja2V0OiBBZGQgU29ja2V0Q0FOIChQRl9DQU4pIHN1cHBvcnQuIEluaXRpYWwgcGF0Y2ggYnkKKyAgTWF0dGhpYXMgRnVjaHMsIHVwZGF0ZWQgYnkgVGlhZ28gR29uw6dhbHZlcy4KKworLSBJc3N1ZSAjMTMwNzA6IEZpeCBhIGNyYXNoIHdoZW4gYSBUZXh0SU9XcmFwcGVyIGNhdWdodCBpbiBhIHJlZmVyZW5jZSBjeWNsZQorICB3b3VsZCBiZSBmaW5hbGl6ZWQgYWZ0ZXIgdGhlIHJlZmVyZW5jZSB0byBpdHMgdW5kZXJseWluZyBCdWZmZXJlZFJXUGFpcidzCisgIHdyaXRlciBnb3QgY2xlYXJlZCBieSB0aGUgR0MuCisKKy0gSXNzdWUgIzEyODgxOiBjdHlwZXM6IEZpeCBzZWdmYXVsdCB3aXRoIGxhcmdlIHN0cnVjdHVyZSBmaWVsZCBuYW1lcy4KKworLSBJc3N1ZSAjMTMwNTg6IG9zc2F1ZGlvZGV2OiBmaXggYSBmaWxlIGRlc2NyaXB0b3IgbGVhayBvbiBlcnJvci4gUGF0Y2ggYnkKKyAgVGhvbWFzIEphcm9zY2guCisKKy0gSXNzdWUgIzEzMDEzOiBjdHlwZXM6IEZpeCBhIHJlZmVyZW5jZSBsZWFrIGluIFB5Q0FycmF5VHlwZV9mcm9tX2N0eXBlLgorICBUaGFua3MgdG8gU3VtYW4gU2FoYSBmb3IgZmluZGluZyB0aGUgYnVnIGFuZCBwcm92aWRpbmcgYSBwYXRjaC4KKworLSBJc3N1ZSAjMTMwMjI6IEZpeDogX211bHRpcHJvY2Vzc2luZy5yZWN2ZmQoKSBkb2Vzbid0IGNoZWNrIHRoYXQKKyAgZmlsZSBkZXNjcmlwdG9yIHdhcyBhY3R1YWxseSByZWNlaXZlZC4KKworLSBJc3N1ZSAjMTE3MjcxMTogQWRkICdsb25nIGxvbmcnIHN1cHBvcnQgdG8gdGhlIGFycmF5IG1vZHVsZS4KKyAgSW5pdGlhbCBwYXRjaCBieSBPcmVuIFRpcm9zaCBhbmQgSGlyb2thenUgWWFtYW1vdG8uCisKKy0gSXNzdWUgIzEyNDgzOiBjdHlwZXM6IEZpeCBhIGNyYXNoIHdoZW4gdGhlIGRlc3RydWN0aW9uIG9mIGEgY2FsbGJhY2sKKyAgb2JqZWN0IHRyaWdnZXJzIHRoZSBnYXJiYWdlIGNvbGxlY3Rvci4KKworLSBJc3N1ZSAjMTI5NTA6IEZpeCBwYXNzaW5nIGZpbGUgZGVzY3JpcHRvcnMgaW4gbXVsdGlwcm9jZXNzaW5nLCB1bmRlcgorICBPcGVuSW5kaWFuYS9JbGx1bW9zLgorCistIElzc3VlICMxMjc2NDogRml4IGEgY3Jhc2ggaW4gY3R5cGVzIHdoZW4gdGhlIG5hbWUgb2YgYSBTdHJ1Y3R1cmUgZmllbGQgaXMgbm90CisgIGEgc3RyaW5nLgorCistIElzc3VlICMxMTI0MTogc3ViY2xhc3NlcyBvZiBjdHlwZXMuQXJyYXkgY2FuIG5vdyBiZSBzdWJjbGFzc2VkLgorCistIElzc3VlICM5NjUxOiBGaXggYSBjcmFzaCB3aGVuIGN0eXBlcy5jcmVhdGVfc3RyaW5nX2J1ZmZlcigwKSB3YXMgcGFzc2VkIHRvCisgIHNvbWUgZnVuY3Rpb25zIGxpa2UgZmlsZS53cml0ZSgpLgorCistIElzc3VlICMxMDMwOTogRGVmaW5lIF9HTlVfU09VUkNFIHNvIHRoYXQgbXJlbWFwKCkgZ2V0cyB0aGUgcHJvcGVyCisgIHNpZ25hdHVyZS4gIFdpdGhvdXQgdGhpcywgYXJjaGl0ZWN0dXJlcyB3aGVyZSBzaXplb2Ygdm9pZCogIT0gc2l6ZW9mIGludCBhcmUKKyAgYnJva2VuLiAgUGF0Y2ggZ2l2ZW4gYnkgSGFsbHZhcmQgQiBGdXJ1c2V0aC4KKworLSBJc3N1ZSAjMTIwNTE6IEZpeCBzZWdmYXVsdCBpbiBqc29uLmR1bXBzKCkgd2hpbGUgZW5jb2RpbmcgaGlnaGx5LW5lc3RlZAorICBvYmplY3RzIHVzaW5nIHRoZSBDIGFjY2VsZXJhdGlvbnMuCisKKy0gSXNzdWUgIzEyMDE3OiBGaXggc2VnZmF1bHQgaW4ganNvbi5sb2FkcygpIHdoaWxlIGRlY29kaW5nIGhpZ2hseS1uZXN0ZWQKKyAgb2JqZWN0cyB1c2luZyB0aGUgQyBhY2NlbGVyYXRpb25zLgorCistIElzc3VlICMxODM4OiBQcmV2ZW50IHNlZ2ZhdWx0IGluIGN0eXBlcywgd2hlbiBfYXNfcGFyYW1ldGVyXyBvbiBhIGNsYXNzIGlzIHNldAorICB0byBhbiBpbnN0YW5jZSBvZiB0aGUgY2xhc3MuCisKK1Rlc3RzCistLS0tLQorCistIElzc3VlICMxMTY4OTogRml4IGEgdmFyaWFibGUgc2NvcGluZyBlcnJvciBpbiBhbiBzcWxpdGUzIHRlc3QKKworLSBJc3N1ZSAjMTM3ODY6IFJlbW92ZSB1bmltcGxlbWVudGVkICd0cmFjZScgbG9uZyBvcHRpb24gZnJvbSByZWdydGVzdC5weS4KKworLSBJc3N1ZSAjMTM3MjU6IEZpeCByZWdydGVzdCB0byByZWNvZ25pemUgdGhlIGRvY3VtZW50ZWQgLWQgZmxhZy4KKyAgUGF0Y2ggYnkgRXJubyBUdWtpYS4KKworLSBJc3N1ZSAjMTMzMDQ6IFNraXAgdGVzdCBjYXNlIGlmIHVzZXIgc2l0ZS1wYWNrYWdlcyBkaXNhYmxlZCAoLXMgb3IKKyAgUFlUSE9OTk9VU0VSU0lURSkuICAoUGF0Y2ggYnkgQ2FybCBNZXllcikKKworLSBJc3N1ZSAjNTY2MTogQWRkIGEgdGVzdCBmb3IgRUNPTk5SRVNFVC9FUElQRSBoYW5kbGluZyB0byB0ZXN0X2FzeW5jb3JlLiBQYXRjaAorICBieSBYYXZpZXIgZGUgR2F5ZS4KKworLSBJc3N1ZSAjMTMyMTg6IEZpeCB0ZXN0X3NzbCBmYWlsdXJlcyBvbiBEZWJpYW4vVWJ1bnR1LgorCistIFJlLWVuYWJsZSBsaWIydG8zJ3MgdGVzdF9wYXJzZXIucHkgdGVzdHMsIHRob3VnaCB3aXRoIGFuIGV4cGVjdGVkIGZhaWx1cmUKKyAgKHNlZSBpc3N1ZSAxMzEyNSkuCisKKy0gSXNzdWUgIzEyNjU2OiBBZGQgdGVzdHMgZm9yIElQdjYgYW5kIFVuaXggc29ja2V0cyB0byB0ZXN0X2FzeW5jb3JlLgorCistIElzc3VlICM2NDg0OiBBZGQgdW5pdCB0ZXN0cyBmb3IgbWFpbGNhcCBtb2R1bGUgKHBhdGNoIGJ5IEdyZWdvcnkgTm9maSkKKworLSBJc3N1ZSAjMTE2NTE6IEltcHJvdmUgdGhlIE1ha2VmaWxlIHRlc3QgdGFyZ2V0cyB0byBydW4gbW9yZSBvZiB0aGUgdGVzdCBzdWl0ZQorICBtb3JlIHF1aWNrbHkuIFRoZSAtLW11bHRpcHJvY2VzcyBvcHRpb24gaXMgbm93IGVuYWJsZWQgYnkgZGVmYXVsdCwgcmVkdWNpbmcKKyAgdGhlIGFtb3VudCBvZiB0aW1lIG5lZWRlZCB0byBydW4gdGhlIHRlc3RzLiAibWFrZSB0ZXN0IiBhbmQgIm1ha2UgcXVpY2t0ZXN0IgorICBub3cgaW5jbHVkZSBzb21lIHJlc291cmNlLWludGVuc2l2ZSB0ZXN0cywgYnV0IG5vIGxvbmdlciBydW4gdGhlIHRlc3Qgc3VpdGUKKyAgdHdpY2UgdG8gY2hlY2sgZm9yIGJ1Z3MgaW4gLnB5YyBnZW5lcmF0aW9uLiBUb29scy9zY3JpcHRzL3J1bl90ZXN0LnB5IHByb3ZpZGVzCisgIGFuIGVhc3kgcGxhdGZvcm0taW5kZXBlbmRlbnQgd2F5IHRvIHJ1biB0ZXN0IHN1aXRlIHdpdGggc2Vuc2libGUgZGVmYXVsdHMuCisKKy0gSXNzdWUgIzEyMzMxOiBUaGUgdGVzdCBzdWl0ZSBmb3IgdGhlIHBhY2thZ2luZyBtb2R1bGUgY2FuIG5vdyBydW4gZnJvbSBhbgorICBpbnN0YWxsZWQgUHl0aG9uLgorCistIElzc3VlICMxMjMzMTogVGhlIHRlc3Qgc3VpdGUgZm9yIGxpYjJ0bzMgY2FuIG5vdyBydW4gZnJvbSBhbiBpbnN0YWxsZWQKKyAgUHl0aG9uLgorCistIElzc3VlICMxMjYyNjogSW4gcmVncnRlc3QsIGFsbG93IHRvIGZpbHRlciB0ZXN0cyB1c2luZyBhIGdsb2IgZmlsdGVyCisgIHdpdGggdGhlIGBgLW1gYCAob3IgYGAtLW1hdGNoYGApIG9wdGlvbi4gIFRoaXMgd29ya3Mgd2l0aCBhbGwgdGVzdCBjYXNlcworICB1c2luZyB0aGUgdW5pdHRlc3QgbW9kdWxlLiAgVGhpcyBpcyB1c2VmdWwgd2l0aCBsb25nIHRlc3Qgc3VpdGVzCisgIHN1Y2ggYXMgdGVzdF9pbyBvciB0ZXN0X3N1YnByb2Nlc3MuCisKKy0gSXNzdWUgIzEyNjI0OiBJdCBpcyBub3cgcG9zc2libGUgdG8gZmFpbCBhZnRlciB0aGUgZmlyc3QgZmFpbHVyZSB3aGVuCisgIHJ1bm5pbmcgaW4gdmVyYm9zZSBtb2RlIChgYC12YGAgb3IgYGAtV2BgKSwgYnkgdXNpbmcgdGhlIGBgLS1mYWlsZmFzdGBgCisgIChvciBgYC1HYGApIG9wdGlvbiB0byByZWdydGVzdC4gIFRoaXMgaXMgdXNlZnVsIHdpdGggbG9uZyB0ZXN0IHN1aXRlcworICBzdWNoIGFzIHRlc3RfaW8gb3IgdGVzdF9zdWJwcm9jZXNzLgorCistIElzc3VlICMxMjU4NzogQ29ycmVjdCBmYXVsdHkgdGVzdCBmaWxlIGFuZCByZWZlcmVuY2UgaW4gdGVzdF90b2tlbml6ZS4KKyAgKFBhdGNoIGJ5IFJvYmVydCBYaWFvKQorCistIElzc3VlICMxMjU3MzogQWRkIHJlc291cmNlIGNoZWNrcyBmb3IgZGFuZ2xpbmcgVGhyZWFkIGFuZCBQcm9jZXNzIG9iamVjdHMuCisKKy0gSXNzdWUgIzEyNTQ5OiBDb3JyZWN0IHRlc3RfcGxhdGZvcm0gdG8gbm90IGZhaWwgd2hlbiBPUyBYIHJldHVybnMgJ3g4Nl82NCcKKyAgYXMgdGhlIHByb2Nlc3NvciB0eXBlIG9uIHNvbWUgTWFjIHN5c3RlbXMuCisKKy0gU2tpcCBuZXR3b3JrIHRlc3RzIHdoZW4gZ2V0YWRkcmluZm8oKSByZXR1cm5zIEVBSV9BR0FJTiwgbWVhbmluZyBhIHRlbXBvcmFyeQorICBmYWlsdXJlIGluIG5hbWUgcmVzb2x1dGlvbi4KKworLSBJc3N1ZSAjMTE4MTI6IFNvbHZlIHRyYW5zaWVudCBzb2NrZXQgZmFpbHVyZSB0byBjb25uZWN0IHRvICdsb2NhbGhvc3QnCisgIGluIHRlc3RfdGVsbmV0bGliLnB5LgorCistIFNvbHZlZCBhIHBvdGVudGlhbCBkZWFkbG9jayBpbiB0ZXN0X3RlbG5ldGxpYi5weS4gUmVsYXRlZCB0byBpc3N1ZSAjMTE4MTIuCisKKy0gQXZvaWQgZmFpbGluZyBpbiB0ZXN0X3JvYm90cGFyc2VyIHdoZW4gbXVlYmxlc21vcmFsZWRhLmNvbSBpcyBmbGFreSBhbmQKKyAgYW4gb3ZlcnplYWxvdXMgRE5TIHNlcnZpY2UgKGUuZy4gT3BlbkROUykgcmVkaXJlY3RzIHRvIGEgcGxhY2Vob2xkZXIKKyAgV2ViIHNpdGUuCisKKy0gQXZvaWQgZmFpbGluZyBpbiB0ZXN0X3VybGxpYm5ldC50ZXN0X2JhZF9hZGRyZXNzIHdoZW4gc29tZSBvdmVyemVhbG91cworICBETlMgc2VydmljZSAoZS5nLiBPcGVuRE5TKSByZXNvbHZlcyBhIG5vbi1leGlzdGVudCBkb21haW4gbmFtZS4gIFRoZSB0ZXN0CisgIGlzIG5vdyBza2lwcGVkIGluc3RlYWQuCisKKy0gSXNzdWUgIzEyNDQwOiBXaGVuIHRlc3Rpbmcgd2hldGhlciBzb21lIGJpdHMgaW4gU1NMQ29udGV4dC5vcHRpb25zIGNhbiBiZQorICByZXNldCwgY2hlY2sgdGhlIHZlcnNpb24gb2YgdGhlIE9wZW5TU0wgaGVhZGVycyBQeXRob24gd2FzIGNvbXBpbGVkIGFnYWluc3QsCisgIHJhdGhlciB0aGFuIHRoZSBydW50aW1lIHZlcnNpb24gb2YgdGhlIE9wZW5TU0wgbGlicmFyeS4KKworLSBJc3N1ZSAjMTE1MTI6IEFkZCBhIHRlc3Qgc3VpdGUgZm9yIHRoZSBjZ2l0YiBtb2R1bGUuIFBhdGNoIGJ5IFJvYmJpZSBDbGVtb25zLgorCistIElzc3VlICMxMjQ5NzogSW5zdGFsbCB0ZXN0L2RhdGEgdG8gcHJldmVudCBmYWlsdXJlcyBvZiB0aGUgdmFyaW91cyBjb2RlY21hcHMKKyAgdGVzdHMuCisKKy0gSXNzdWUgIzEyNDk2OiBJbnN0YWxsIHRlc3QvY2FwYXRoIGRpcmVjdG9yeSB0byBwcmV2ZW50IHRlc3RfY29ubmVjdF9jYXBhdGgKKyAgdGVzdGNhc2UgZmFpbHVyZSBpbiB0ZXN0X3NzbC4KKworLSBJc3N1ZSAjMTI0Njk6IFJ1biB3YWtldXAgYW5kIHBlbmRpbmcgc2lnbmFsIHRlc3RzIGluIGEgc3VicHJvY2VzcyB0byBydW4gdGhlCisgIHRlc3QgaW4gYSBmcmVzaCBwcm9jZXNzIHdpdGggb25seSBvbmUgdGhyZWFkIGFuZCB0byBub3QgY2hhbmdlIHNpZ25hbAorICBoYW5kbGluZyBvZiB0aGUgcGFyZW50IHByb2Nlc3MuCisKKy0gSXNzdWUgIzg3MTY6IEF2b2lkIGNyYXNoZXMgY2F1c2VkIGJ5IEFxdWEgVGsgb24gT1NYIHdoZW4gYXR0ZW1wdGluZyB0byBydW4KKyAgdGVzdF90ayBvciB0ZXN0X3R0a19ndWlvbmx5IHVuZGVyIGEgdXNlcm5hbWUgdGhhdCBpcyBub3QgY3VycmVudGx5IGxvZ2dlZAorICBpbiB0byB0aGUgY29uc29sZSB3aW5kb3dzZXJ2ZXIgKGFzIG1heSBiZSB0aGUgY2FzZSB1bmRlciBidWlsZGJvdCBvciBzc2gpLgorCistIElzc3VlICMxMjQwNzogRXhwbGljaXRseSBza2lwIHRlc3RfY2FwaS5FbWJlZGRpbmdUZXN0IHVuZGVyIFdpbmRvd3MuCisKKy0gSXNzdWUgIzEyNDAwOiByZWdydGVzdCAtVyBkb2Vzbid0IHJlcnVuIHRoZSB0ZXN0cyB0d2ljZSBhbnltb3JlLCBidXQgY2FwdHVyZXMKKyAgdGhlIG91dHB1dCBhbmQgZGlzcGxheXMgaXQgb24gZmFpbHVyZSBpbnN0ZWFkLiByZWdydGVzdCAtdiBkb2Vzbid0IHByaW50IHRoZQorICBlcnJvciB0d2ljZSBhbnltb3JlIGlmIHRoZXJlIGlzIG9ubHkgb25lIGVycm9yLgorCistIElzc3VlICMxMjE0MTogSW5zdGFsbCBjb3BpZXMgb2YgdGVtcGxhdGUgQyBtb2R1bGUgZmlsZSBzbyB0aGF0CisgIHRlc3RfYnVpbGRfZXh0IG9mIHRlc3RfZGlzdHV0aWxzIGFuZCB0ZXN0X2NvbW1hbmRfYnVpbGRfZXh0IG9mCisgIHRlc3RfcGFja2FnaW5nIGFyZSBubyBsb25nZXIgc2lsZW50bHkgc2tpcHBlZCB3aGVuCisgIHJ1biBvdXRzaWRlIG9mIGEgYnVpbGQgZGlyZWN0b3J5LgorCistIElzc3VlICM4NzQ2OiBBZGQgYWRkaXRpb25hbCB0ZXN0cyBmb3Igb3MuY2hmbGFncygpIGFuZCBvcy5sY2hmbGFncygpLgorICBQYXRjaCBieSBHYXJyZXR0IENvb3Blci4KKworLSBJc3N1ZSAjMTA3MzY6IEZpeCB0ZXN0X3R0ayB0ZXN0X3dpZGdldHMgZmFpbHVyZXMgd2l0aCBDb2NvYSBUayA4LjUuOQorICAyLjggKyAgb24gTWFjIE9TIFguICAoUGF0Y2ggYnkgUm9uYWxkIE91c3NvcmVuKQorCistIElzc3VlICMxMjA1NzogQWRkIHRlc3RzIGZvciBJU08gMjAyMiBjb2RlY3MgKGlzbzIwMjJfanAsIGlzbzIwMjJfanBfMiwKKyAgaXNvMjAyMl9rcikuCisKKy0gSXNzdWUgIzEyMDk2OiBGaXggYSByYWNlIGNvbmRpdGlvbiBpbiB0ZXN0X3RocmVhZGluZy50ZXN0X3dhaXRmb3IoKS4gUGF0Y2gKKyAgd3JpdHRlbiBieSBDaGFybGVzLUZyYW7Dp29pcyBOYXRhbGkuCisKKy0gSXNzdWUgIzExNjE0OiBpbXBvcnQgX19oZWxsb19fIHByaW50cyAiSGVsbG8gV29ybGQhIi4gUGF0Y2ggd3JpdHRlbiBieQorICBBbmRyZWFzIFN0w7xocmsuCisKKy0gSXNzdWUgIzU3MjM6IEltcHJvdmUganNvbiB0ZXN0cyB0byBiZSBleGVjdXRlZCB3aXRoIGFuZCB3aXRob3V0IGFjY2VsZXJhdGlvbnMuCisKKy0gSXNzdWUgIzEyMDQxOiBNYWtlIHRlc3Rfd2FpdDMgbW9yZSByb2J1c3QuCisKKy0gSXNzdWUgIzExODczOiBDaGFuZ2UgcmVnZXggaW4gdGVzdF9jb21waWxlYWxsIHRvIGZpeCBvY2Nhc2lvbmFsIGZhaWx1cmVzIHdoZW4KKyAgdGhlIHJhbmRvbWx5IGdlbmVyYXRlZCB0ZW1wb3JhcnkgcGF0aCBoYXBwZW5lZCB0byBtYXRjaCB0aGUgcmVnZXguCisKKy0gSXNzdWUgIzExOTU4OiBGaXggRlRQIHRlc3RzIGZvciBJUHY2LCBiaW5kIHRvICI6OjEiIGluc3RlYWQgb2YgImxvY2FsaG9zdCIuCisgIFBhdGNoIHdyaXR0ZW4gYnkgQ2hhcmxlcy1GcmFuY29pcyBOYXRhbGkuCisKKy0gSXNzdWUgIzg0MDcsICMxMTg1OTogRml4IHRlc3RzIG9mIHRlc3RfaW8gdXNpbmcgdGhyZWFkcyBhbmQgYW4gYWxhcm06IHVzZQorICBwdGhyZWFkX3NpZ21hc2soKSB0byBlbnN1cmUgdGhhdCB0aGUgU0lHQUxSTSBzaWduYWwgaXMgcmVjZWl2ZWQgYnkgdGhlIG1haW4KKyAgdGhyZWFkLgorCistIElzc3VlICMxMTgxMTogRmFjdG9yIG91dCBkZXRlY3Rpb24gb2YgSVB2NiBzdXBwb3J0IG9uIHRoZSBjdXJyZW50IGhvc3QKKyAgYW5kIG1ha2UgaXQgYXZhaWxhYmxlIGFzIGBgdGVzdC5zdXBwb3J0LklQVjZfRU5BQkxFRGBgLiAgUGF0Y2ggYnkKKyAgQ2hhcmxlcy1GcmFuw6dvaXMgTmF0YWxpLgorCistIElzc3VlICMxMDkxNDogQWRkIGEgbWluaW1hbCBlbWJlZGRpbmcgdGVzdCB0byB0ZXN0X2NhcGkuCisKKy0gSXNzdWUgIzExMjIzOiBTa2lwIHRlc3RfbG9ja19hY3F1aXJlX2ludGVycnVwdGlvbigpIGFuZAorICB0ZXN0X3Jsb2NrX2FjcXVpcmVfaW50ZXJydXB0aW9uKCkgb2YgdGVzdF90aHJlYWRzaWduYWxzIGlmIGEgdGhyZWFkIGxvY2sgaXMKKyAgaW1wbGVtZW50ZWQgdXNpbmcgYSBQT1NJWCBtdXRleCBhbmQgYSBQT1NJWCBjb25kaXRpb24gdmFyaWFibGUuIEEgUE9TSVgKKyAgY29uZGl0aW9uIHZhcmlhYmxlIGNhbm5vdCBiZSBpbnRlcnJ1cHRlZCBieSBhIHNpZ25hbCAoZS5nLiBvbiBMaW51eCwgdGhlCisgIGZ1dGV4IHN5c3RlbSBjYWxsIGlzIHJlc3RhcnRlZCkuCisKKy0gSXNzdWUgIzExNzkwOiBGaXggc3BvcmFkaWMgZmFpbHVyZXMgaW4gdGVzdF9tdWx0aXByb2Nlc3NpbmcuV2l0aFByb2Nlc3Nlc1Rlc3RDb25kaXRpb24uCisKKy0gRml4IHBvc3NpYmxlICJmaWxlIGFscmVhZHkgZXhpc3RzIiBlcnJvciB3aGVuIHJ1bm5pbmcgdGhlIHRlc3RzIGluIHBhcmFsbGVsLgorCistIElzc3VlICMxMTcxOTogRml4IG1lc3NhZ2UgYWJvdXQgdW5leHBlY3RlZCB0ZXN0X21zaWxpYiBza2lwIG9uIG5vbi1XaW5kb3dzCisgIHBsYXRmb3Jtcy4gUGF0Y2ggYnkgTmFkZWVtIFZhd2RhLgorCistIElzc3VlICMxMTcyNzogQWRkIGEgLS10aW1lb3V0IG9wdGlvbiB0byByZWdydGVzdDogaWYgYSB0ZXN0IHRha2VzIG1vcmUgdGhhbgorICBUSU1FT1VUIHNlY29uZHMsIGR1bXBzIHRoZSB0cmFjZWJhY2sgb2YgYWxsIHRocmVhZHMgYW5kIGV4aXRzLgorCistIElzc3VlICMxMTY1MzogZml4IC1XIHdpdGggLWogaW4gcmVncnRlc3QuCisKKy0gVGhlIGVtYWlsIHRlc3Qgc3VpdGUgbm93IGxpdmVzIGluIHRoZSBMaWIvdGVzdC90ZXN0X2VtYWlsIHBhY2thZ2UuICBUaGUgdGVzdAorICBoYXJuZXNzIGNvZGUgaGFzIGFsc28gYmVlbiBtb2Rlcm5pemVkIHRvIGFsbG93IHVzZSBvZiBuZXcgdW5pdHRlc3QgZmVhdHVyZXMuCisKKy0gcmVncnRlc3Qgbm93IGRpc2NvdmVycyB0ZXN0IHBhY2thZ2VzIGFzIHdlbGwgYXMgdGVzdCBtb2R1bGVzLgorCistIElzc3VlICMxMTU3NzogaW1wcm92ZSB0ZXN0IGNvdmVyYWdlIG9mIGJpbmhleC5weS4gUGF0Y2ggYnkgQXJrYWR5IEtvcGx5YXJvdi4KKworLSBOZXcgdGVzdF9jcmFzaGVycyBhZGRlZCB0byBleGVyY2lzZSB0aGUgc2NyaXB0cyBpbiB0aGUgTGliL3Rlc3QvY3Jhc2hlcnMKKyAgZGlyZWN0b3J5IGFuZCBjb25maXJtIHRoZXkgZmFpbCBhcyBleHBlY3RlZAorCistIElzc3VlICMxMTU3ODogYWRkZWQgdGVzdCBmb3IgdGhlIHRpbWVpdCBtb2R1bGUuICBQYXRjaCBieSBNaWNoYWVsIEhlbnJ5LgorCistIElzc3VlICMxMTUwMzogaW1wcm92ZSB0ZXN0IGNvdmVyYWdlIG9mIHBvc2l4cGF0aC5weS4gUGF0Y2ggYnkgRXZhbiBEYW5kcmVhLgorCistIElzc3VlICMxMTUwNTogaW1wcm92ZXMgdGVzdCBjb3ZlcmFnZSBvZiBzdHJpbmcucHksIGluY3JlYXNlcyBncmFudWxhcml0eSBvZgorICBzdHJpbmcuRm9ybWF0dGVyIHRlc3RzLiBJbml0aWFsIHBhdGNoIGJ5IEFsaWNpYSBBcmxlbi4KKworLSBJc3N1ZSAjMTE1NDg6IEltcHJvdmUgdGVzdCBjb3ZlcmFnZSBvZiB0aGUgc2h1dGlsIG1vZHVsZS4gUGF0Y2ggYnkKKyAgRXZhbiBEYW5kcmVhLgorCistIElzc3VlICMxMTU1NDogUmVhY3RpdmF0ZWQgdGVzdF9lbWFpbF9jb2RlY3MuCisKKy0gSXNzdWUgIzExNTA1OiBpbXByb3ZlcyB0ZXN0IGNvdmVyYWdlIG9mIHN0cmluZy5weS4gUGF0Y2ggYnkgQWxpY2lhCisgIEFybGVuCisKKy0gSXNzdWUgIzExNDkwOiB0ZXN0X3N1YnByb2Nlc3M6dGVzdF9sZWFraW5nX2Zkc19vbl9lcnJvciBubyBsb25nZXIgZ2l2ZXMgYQorICBmYWxzZSBwb3NpdGl2ZSBpZiB0aGUgbGFzdCBkaXJlY3RvcnkgaW4gdGhlIHBhdGggaXMgaW5hY2Nlc3NpYmxlLgorCistIElzc3VlICMxMTIyMzogRml4IHRlc3RfdGhyZWFkc2lnbmFscyB0byBmYWlsLCBub3QgaGFuZywgd2hlbiB0aGUKKyAgbm9uLXNlbWFwaG9yZSBpbXBsZW1lbnRhdGlvbiBvZiBsb2NrcyBpcyB1c2VkIHVuZGVyIFBPU0lYLgorCistIElzc3VlICMxMDkxMTogQWRkIHRlc3RzIG9uIENHSSB3aXRoIG5vbi1BU0NJSSBjaGFyYWN0ZXJzLiBQYXRjaCB3cml0dGVuIGJ5CisgIFBpZXJyZSBRdWVudGVsLgorCistIElzc3VlICM5OTMxOiBGaXggaGFuZ3MgaW4gR1VJIHRlc3RzIHVuZGVyIFdpbmRvd3MgaW4gY2VydGFpbiBjb25kaXRpb25zLgorICBQYXRjaCBieSBIaXJva2F6dSBZYW1hbW90by4KKworLSBJc3N1ZSAjMTA1MTI6IFByb3Blcmx5IGNsb3NlIHNvY2tldHMgdW5kZXIgdGVzdC50ZXN0X2NnaS4KKworLSBJc3N1ZSAjMTA5OTI6IE1ha2UgdGVzdHMgcGFzcyB1bmRlciBjb3ZlcmFnZS4KKworLSBJc3N1ZSAjMTA4MjY6IFByZXZlbnQgc3BvcmFkaWMgZmFpbHVyZSBpbiB0ZXN0X3N1YnByb2Nlc3Mgb24gU29sYXJpcyBkdWUKKyAgdG8gb3BlbiBkb29yIGZpbGVzLgorCistIElzc3VlICMxMDk5MDogUHJldmVudCB0ZXN0cyBmcm9tIGNsb2JiZXJpbmcgYSBzZXQgdHJhY2UgZnVuY3Rpb24uCisKK0MtQVBJCistLS0tLQorCistIEFkZCBQeU9iamVjdF9HZW5lcmljR2V0RGljdCBhbmQgUHlPYmplY3RfR2VuZXJpU2V0RGljdC4gVGhleSBhcmUgZ2VuZXJpYworICBpbXBsZW1lbnRhdGlvbnMgZm9yIHRoZSBnZXR0ZXIgYW5kIHNldHRlciBvZiBhIGBgX19kaWN0X19gYCBkZXNjcmlwdG9yIG9mIEMKKyAgdHlwZXMuCisKKy0gSXNzdWUgIzEzNzI3OiBBZGQgMyBtYWNyb3MgdG8gYWNjZXNzIFB5RGF0ZVRpbWVfRGVsdGEgbWVtYmVyczoKKyAgUHlEYXRlVGltZV9ERUxUQV9HRVRfREFZUywgUHlEYXRlVGltZV9ERUxUQV9HRVRfU0VDT05EUywKKyAgUHlEYXRlVGltZV9ERUxUQV9HRVRfTUlDUk9TRUNPTkRTLgorCistIElzc3VlICMxMDU0MjogQWRkIDQgbWFjcm9zIHRvIHdvcmsgd2l0aCBzdXJyb2dhdGVzOiBQeV9VTklDT0RFX0lTX1NVUlJPR0FURSwKKyAgUHlfVU5JQ09ERV9JU19ISUdIX1NVUlJPR0FURSwgUHlfVU5JQ09ERV9JU19MT1dfU1VSUk9HQVRFLAorICBQeV9VTklDT0RFX0pPSU5fU1VSUk9HQVRFUy4KKworLSBJc3N1ZSAjMTI3MjQ6IEFkZCBQeV9SRVRVUk5fTk9USU1QTEVNRU5URUQgbWFjcm8gZm9yIHJldHVybmluZyBOb3RJbXBsZW1lbnRlZC4KKworLSBQWV9QQVRDSExFVkVMX1JFVklTSU9OIGhhcyBiZWVuIHJlbW92ZWQsIHNpbmNlIGl0J3MgbWVhbmluZ2xlc3Mgd2l0aAorICBNZXJjdXJpYWwuCisKKy0gSXNzdWUgIzEyMTczOiBUaGUgZmlyc3QgYXJndW1lbnQgb2YgUHlJbXBvcnRfSW1wb3J0TW9kdWxlTGV2ZWwgaXMgbm93IGBjb25zdAorICBjaGFyICpgIGluc3RlYWQgb2YgYGNoYXIgKmAuCisKKy0gSXNzdWUgIzEyMzgwOiBQeUFyZ19QYXJzZVR1cGxlIG5vdyBhY2NlcHRzIGEgYnl0ZWFycmF5IGZvciB0aGUgJ2MnIGZvcm1hdC4KKworRG9jdW1lbnRhdGlvbgorLS0tLS0tLS0tLS0tLQorCistIElzc3VlcyAjMTM0OTEgYW5kICMxMzk5NTogRml4IG1hbnkgZXJyb3JzIGluIHNxbGl0ZTMgZG9jdW1lbnRhdGlvbi4KKyAgSW5pdGlhbCBwYXRjaCBmb3IgIzEzNDkxIGJ5IEpvaGFubmVzIFZvZ2VsLgorCistIElzc3VlICMxMzQwMjogRG9jdW1lbnQgYWJzb2x1dGVuZXNzIG9mIHN5cy5leGVjdXRhYmxlLgorCistIElzc3VlICMxMzg4MzogUFlUSE9OQ0FTRU9LIGFsc28gd29ya3Mgb24gT1MgWC4KKworLSBJc3N1ZSAjOTAyMTogQWRkIGFuIGludHJvZHVjdGlvbiB0byB0aGUgY29weSBtb2R1bGUgZG9jdW1lbnRhdGlvbi4KKworLSBJc3N1ZSAjNjAwNTogRXhhbXBsZXMgaW4gdGhlIHNvY2tldCBsaWJyYXJ5IGRvY3VtZW50YXRpb24gdXNlIHNlbmRhbGwsIHdoZXJlCisgIHJlbGV2YW50LCBpbnN0ZWFkIHNlbmQgbWV0aG9kLgorCistIElzc3VlICMxMjc5ODogVXBkYXRlZCB0aGUgbWltZXR5cGVzIGRvY3VtZW50YXRpb24uCisKKy0gSXNzdWUgIzEyOTQ5OiBEb2N1bWVudCB0aGUga3dvbmx5YXJnY291bnQgYXJndW1lbnQgZm9yIHRoZSBQeUNvZGVfTmV3CisgIEMgQVBJIGZ1bmN0aW9uLgorCistIElzc3VlICMxMzUxMzogRml4IGlvLklPQmFzZSBkb2N1bWVudGF0aW9uIHRvIGNvcnJlY3RseSBsaW5rIHRvIHRoZQorICBpby5JT0Jhc2UucmVhZGxpbmUgbWV0aG9kIGluc3RlYWQgb2YgdGhlIHJlYWRsaW5lIG1vZHVsZS4KKworLSBJc3N1ZSAjMTMyMzc6IFJlb3JnYW5pc2Ugc3VicHJvY2VzcyBkb2N1bWVudGF0aW9uIHRvIGVtcGhhc2lzZSBjb252ZW5pZW5jZQorICBmdW5jdGlvbnMgYW5kIHRoZSBtb3N0IGNvbW1vbmx5IG5lZWRlZCBhcmd1bWVudHMgdG8gUG9wZW4uCisKKy0gSXNzdWUgIzEzMTQxOiBEZW1vbnN0cmF0ZSByZWNvbW1lbmRlZCBzdHlsZSBmb3Igc29ja2V0c2VydmVyIGV4YW1wbGVzLgorCistIElzc3VlICMxMTgxODogRml4IHRlbXBmaWxlIGV4YW1wbGVzIGZvciBQeXRob24gMy4KKworCiBXaGF0J3MgTmV3IGluIFB5dGhvbiAzLjI/CiA9PT09PT09PT09PT09PT09PT09PT09PT09CiAKQEAgLTcwNyw3ICs0ODA0LDcgQEAKIC0gSXNzdWUgIzE0ODY3MTM6IEhUTUxQYXJzZXIgbm93IGhhcyBhbiBvcHRpb25hbCB0b2xlcmFudCBtb2RlIHdoZXJlIGl0IHRyaWVzIHRvCiAgIGd1ZXNzIGF0IHRoZSBjb3JyZWN0IHBhcnNpbmcgb2YgaW52YWxpZCBodG1sLgogCi0tIElzc3VlICMxMDU1NDogQWRkIGNvbnRleHQgbWFuYWdlciBzdXBwb3J0IHRvIHN1YnByb2Nlc3MuUG9wZW4gb2JqZWN0cy4KKy0gSXNzdWUgIzEwNTU0OiBBZGQgY29udGV4dCBtYW5hZ2VtZW50IHByb3RvY29sIHN1cHBvcnQgdG8gc3VicHJvY2Vzcy5Qb3BlbiBvYmplY3RzLgogCiAtIElzc3VlICM4OTg5OiBlbWFpbC51dGlscy5tYWtlX21zZ2lkIG5vdyBoYXMgYSBkb21haW4gcGFyYW1ldGVyIHRoYXQgY2FuCiAgIG92ZXJyaWRlIHRoZSBkb21haW4gbmFtZSB1c2VkIGluIHRoZSBnZW5lcmF0ZWQgbXNnaWQuCkBAIC05ODMsNyArNTA4MCw3IEBACiAgIGBgTWF5YmVFbmNvZGluZ0Vycm9yYGAgZXhjZXB0aW9uLgogCiAtIElzc3VlICM5MjQ0OiBUaGUgYGBhcHBseV9hc3luYygpYGAgYW5kIGBgbWFwX2FzeW5jKClgYCBtZXRob2RzIG9mCi0gIGBgbXVsdGlwcm9jZXNzaW5nLlBvb2xgYCBub3cgYWNjZXB0cyBhIGBgZXJyb3JfY2FsbGJhY2tgYCBhcmd1bWVudC4gIFRoaXMgY2FuCisgIGBgbXVsdGlwcm9jZXNzaW5nLlBvb2xgYCBub3cgYWNjZXB0cyBhbiBgYGVycm9yX2NhbGxiYWNrYGAgYXJndW1lbnQuICBUaGlzIGNhbgogICBiZSBhIGNhbGxiYWNrIHdpdGggdGhlIHNpZ25hdHVyZSBgYGNhbGxiYWNrKGV4YylgYCwgd2hpY2ggd2lsbCBiZSBjYWxsZWQgaWYKICAgdGhlIHRhcmdldCByYWlzZXMgYW4gZXhjZXB0aW9uLgogCkBAIC0xMDY5LDcgKzUxNjYsNyBAQAogLSBJc3N1ZSAjMTAyNTM6IEZpbGVJTyBsZWFrcyBhIGZpbGUgZGVzY3JpcHRvciB3aGVuIHRyeWluZyB0byBvcGVuIGEgZmlsZSBmb3IKICAgYXBwZW5kIHRoYXQgaXNuJ3Qgc2Vla2FibGUuICBQYXRjaCBieSBCcmlhbiBCcmF6aWwuCiAKLS0gU3VwcG9ydCBjb250ZXh0IG1hbmFnZXIgcHJvdG9jb2wgZm9yIGZpbGUtbGlrZSBvYmplY3RzIHJldHVybmVkIGJ5IG1haWxib3gKKy0gU3VwcG9ydCBjb250ZXh0IG1hbmFnZW1lbnQgcHJvdG9jb2wgZm9yIGZpbGUtbGlrZSBvYmplY3RzIHJldHVybmVkIGJ5IG1haWxib3gKICAgYGBnZXRfZmlsZSgpYGAgbWV0aG9kcy4KIAogLSBJc3N1ZSAjMTAyNDY6IHV1LmVuY29kZSBkaWRuJ3QgY2xvc2UgZmlsZSBvYmplY3RzIGV4cGxpY2l0bHkgd2hlbiBmaWxlbmFtZXMKQEAgLTEwODAsNyArNTE3Nyw3IEBACiAKIC0gQ2xvc2UgZmlsZSBvYmplY3RzIGluIG1vZHVsZWZpbmRlciBpbiBhIHRpbWVseSBtYW5uZXIuCiAKLS0gQ2xvc2UgYSBpby5UZXh0SU9XcmFwcGVyIG9iamVjdCBpbiBlbWFpbC5wYXJzZXIgaW4gYSB0aW1lbHkgbWFubmVyLgorLSBDbG9zZSBhbiBpby5UZXh0SU9XcmFwcGVyIG9iamVjdCBpbiBlbWFpbC5wYXJzZXIgaW4gYSB0aW1lbHkgbWFubmVyLgogCiAtIENsb3NlIGEgZmlsZSBvYmplY3QgaW4gZGlzdHV0aWxzLnN5c2NvbmZpZyBpbiBhIHRpbWVseSBtYW5uZXIuCiAKQEAgLTEyMDMsNyArNTMwMCw3IEBACiAKIC0gSXNzdWUgIzEwMTQzOiBVcGRhdGUgIm9zLnBhdGhjb25mIiB2YWx1ZXMuCiAKLS0gSXNzdWUgIzY1MTg6IFN1cHBvcnQgY29udGV4dCBtYW5hZ2VyIHByb3Rjb2wgZm9yIG9zc2F1ZGlvZGV2IHR5cGVzLgorLSBJc3N1ZSAjNjUxODogU3VwcG9ydCBjb250ZXh0IG1hbmFnZW1lbnQgcHJvdG9jb2wgZm9yIG9zc2F1ZGlvZGV2IHR5cGVzLgogCiAtIElzc3VlICM2NzgyNTA6IE1ha2UgbW1hcCBmbHVzaCBhIG5vb3Agb24gQUNDRVNTX1JFQUQgYW5kIEFDQ0VTU19DT1BZLgogCkBAIC0xODEyLDcgKzU5MDksNyBAQAogCiAtIElzc3VlICM4MTA1OiBWYWxpZGF0ZSBmaWxlIGRlc2NyaXB0b3IgcGFzc2VkIHRvIG1tYXAubW1hcCBvbiBXaW5kb3dzLgogCi0tIElzc3VlICM4MDQ2OiBBZGQgY29udGV4dCBtYW5hZ2VyIHByb3RvY29sIHN1cHBvcnQgYW5kIC5jbG9zZWQgcHJvcGVydHkgdG8gbW1hcAorLSBJc3N1ZSAjODA0NjogQWRkIGNvbnRleHQgbWFuYWdlbWVudCBwcm90b2NvbCBzdXBwb3J0IGFuZCAuY2xvc2VkIHByb3BlcnR5IHRvIG1tYXAKICAgb2JqZWN0cy4KIAogTGlicmFyeQpAQCAtMjYyMSw3ICs2NzE4LDcgQEAKIAogLSBJc3N1ZSAjNzg5NTogcGxhdGZvcm0ubWFjX3ZlcigpIG5vIGxvbmdlciBjcmFzaGVzIGFmdGVyIGNhbGxpbmcgb3MuZm9yaygpLgogCi0tIElzc3VlICM5MzIzOiBGaXhlZCBhIGJ1ZyBpbiB0cmFjZS5weSB0aGF0IHJlc3VsdGVkIGluIGxvb3NpbmcgdGhlIG5hbWUgb2YgdGhlCistIElzc3VlICM5MzIzOiBGaXhlZCBhIGJ1ZyBpbiB0cmFjZS5weSB0aGF0IHJlc3VsdGVkIGluIGxvc2luZyB0aGUgbmFtZSBvZiB0aGUKICAgc2NyaXB0IGJlaW5nIHRyYWNlZC4gIFBhdGNoIGJ5IEVsaSBCZW5kZXJza3kuCiAKIC0gSXNzdWUgIzkyODI6IEZpeGVkIC0tbGlzdGZ1bmNzIG9wdGlvbiBvZiB0cmFjZS5weS4gIFRoYW5rcyBFbGkgQmVuZGVyc2t5IGZvcgpAQCAtMjgxOSw3ICs2OTE2LDcgQEAKIC0gVGhlIGF1ZGlvb3AgbW9kdWxlIG5vdyBzdXBwb3J0cyBzb3VuZCBmcmFnbWVudHMgb2YgbGVuZ3RoIGdyZWF0ZXIgdGhhbiAyKiozMQogICBieXRlcyBvbiA2NC1iaXQgbWFjaGluZXMsIGFuZCBpcyBQWV9TU0laRV9UX0NMRUFOLgogCi0tIElzc3VlICM0OTcyOiBBZGQgc3VwcG9ydCBmb3IgdGhlIGNvbnRleHQgbWFuYWdlciBwcm90b2NvbCB0byB0aGUgZnRwbGliLkZUUAorLSBJc3N1ZSAjNDk3MjogQWRkIHN1cHBvcnQgZm9yIHRoZSBjb250ZXh0IG1hbmFnZW1lbnQgcHJvdG9jb2wgdG8gdGhlIGZ0cGxpYi5GVFAKICAgY2xhc3MuCiAKIC0gSXNzdWUgIzg2NjQ6IEluIHB5X2NvbXBpbGUsIGNyZWF0ZSBfX3B5Y2FjaGVfXyB3aGVuIHRoZSBjb21waWxlZCBwYXRoIGlzCkBAIC0zMTA3LDcgKzcyMDQsNyBAQAogLSBJc3N1ZSAjNzQ5NDogZml4IGEgY3Jhc2ggaW4gX2xzcHJvZiAoY1Byb2ZpbGUpIGFmdGVyIGNsZWFyaW5nIHRoZSBwcm9maWxlciwKICAgcmVzZXQgYWxzbyB0aGUgcG9pbnRlciB0byB0aGUgY3VycmVudCBwb2ludGVyIGNvbnRleHQuCiAKLS0gSXNzdWUgIzcyMzI6IEFkZCBzdXBwb3J0IGZvciB0aGUgY29udGV4dCBtYW5hZ2VyIHByb3RvY29sIHRvIHRoZSBUYXJGaWxlCistIElzc3VlICM3MjMyOiBBZGQgc3VwcG9ydCBmb3IgdGhlIGNvbnRleHQgbWFuYWdlbWVudCBwcm90b2NvbCB0byB0aGUgVGFyRmlsZQogICBjbGFzcy4KIAogLSBJc3N1ZSAjNzI1MDogRml4IGluZm8gbGVhayBvZiBvcy5lbnZpcm9uIGFjcm9zcyBtdWx0aS1ydW4gdXNlcyBvZgpAQCAtMzE3OCw3ICs3Mjc1LDcgQEAKIC0gSXNzdWUgIzc2MTA6IFJld29ya2VkIGltcGxlbWVudGF0aW9uIG9mIHRoZSBpbnRlcm5hbAogICBgYHppcGZpbGUuWmlwRXh0RmlsZWBgIGNsYXNzIHVzZWQgdG8gcmVwcmVzZW50IGZpbGVzIHN0b3JlZCBpbnNpZGUgYW4KICAgYXJjaGl2ZS4gIFRoZSBuZXcgaW1wbGVtZW50YXRpb24gaXMgc2lnbmlmaWNhbnRseSBmYXN0ZXIgYW5kIGNhbiBiZSB3cmFwcGVkIGluCi0gIGEgYGBpby5CdWZmZXJlZFJlYWRlcmBgIG9iamVjdCBmb3IgbW9yZSBzcGVlZHVwcy4gIEl0IGFsc28gc29sdmVzIGFuCisgIGFuIGBgaW8uQnVmZmVyZWRSZWFkZXJgYCBvYmplY3QgZm9yIG1vcmUgc3BlZWR1cHMuICBJdCBhbHNvIHNvbHZlcyBhbgogICBpc3N1ZSB3aGVyZSBpbnRlcmxlYXZlZCBjYWxscyB0byBgcmVhZCgpYCBhbmQgYHJlYWRsaW5lKClgIGdpdmUgd3JvbmcgcmVzdWx0cy4KICAgUGF0Y2ggYnkgTmlyIEFpZGVzLgogCkBAIC00NTUzLDcgKzg2NTAsNyBAQAogCiAtIElzc3VlICM1NjI0OiBGaXggdGhlIF93aW5yZWcgbW9kdWxlIG5hbWUgc3RpbGwgdXNlZCBpbiBzZXZlcmFsIG1vZHVsZXMuCiAKLS0gSXNzdWUgIzU2Mjg6IEZpeCBpby5UZXh0SU9XcmFwcGVyLnJlYWQoKSB3aXRoIGEgdW5yZWFkYWJsZSBidWZmZXIuCistIElzc3VlICM1NjI4OiBGaXggaW8uVGV4dElPV3JhcHBlci5yZWFkKCkgd2l0aCBhbiB1bnJlYWRhYmxlIGJ1ZmZlci4KIAogLSBJc3N1ZSAjNTYxOTogTXVsdGlwcm9jZXNzaW5nIGNoaWxkcmVuIGRpc29iZXkgdGhlIGRlYnVnIGZsYWcgYW5kIGNhdXNlcwogICBwb3B1cHMgb24gd2luZG93cyBidWlsZGJvdHMuIFBhdGNoIGFwcGxpZWQgdG8gd29yayBhcm91bmQgdGhpcyBpc3N1ZS4KQEAgLTUxNDUsNyArOTI0Miw3IEBACiAtIElzc3VlICMxNjk2MTk5OiAgQWRkIGNvbGxlY3Rpb25zLkNvdW50ZXIoKSBmb3IgcmFwaWQgYW5kIGNvbnZlbmllbnQKICAgY291bnRpbmcuCiAKLS0gSXNzdWUgIzM4NjA6IEd6aXBGaWxlIGFuZCBCWjJGaWxlIG5vdyBzdXBwb3J0IHRoZSBjb250ZXh0IG1hbmFnZXIgcHJvdG9jb2wuCistIElzc3VlICMzODYwOiBHemlwRmlsZSBhbmQgQloyRmlsZSBub3cgc3VwcG9ydCB0aGUgY29udGV4dCBtYW5hZ2VtZW50IHByb3RvY29sLgogCiAtIElzc3VlICM0ODY3OiBGaXhlZCBhIGNyYXNoIGluIGN0eXBlcyB3aGVuIHBhc3NpbmcgYSBzdHJpbmcgdG8gYQogICBmdW5jdGlvbiB3aXRob3V0IGRlZmluaW5nIGFyZ3R5cGVzLgpAQCAtNTUxOSw3ICs5NjE2LDcgQEAKIC0gSXNzdWUgIzQzMDc6IFRoZSBuYW1lZCB0dXBsZSB0aGF0IGBgaW5zcGVjdC5nZXRmdWxsYXJnc3BlYygpYGAgcmV0dXJucyBub3cKICAgdXNlcyBgYGt3b25seWRlZmF1bHRzYGAgaW5zdGVhZCBvZiBgYGt3ZGVmYXVsdHNgYC4KIAotLSBJc3N1ZSAjNDI5ODogRml4IGEgc2VnZmF1bHQgd2hlbiBwaWNrbGUubG9hZHMgaXMgcGFzc2VkIGEgaWxsLWZvcm1lZCBpbnB1dC4KKy0gSXNzdWUgIzQyOTg6IEZpeCBhIHNlZ2ZhdWx0IHdoZW4gcGlja2xlLmxvYWRzIGlzIHBhc3NlZCBpbGwtZm9ybWVkIGlucHV0LgogCiAtIElzc3VlICM0MjgzOiBGaXggYSBsZWZ0LW92ZXIgIml0ZXJpdGVtcyIgY2FsbCBpbiBkaXN0dXRpbHMuCiAKQEAgLTcxNzUsNyArMTEyNzIsNyBAQAogLS0tLS0tLS0tLS0tLS0tLS0KIAogLSBCdWcgIzE0NDE0ODY6IFRoZSBsaXRlcmFsIHJlcHJlc2VudGF0aW9uIG9mIC0oc3lzLm1heGludCAtIDEpCi0gIGFnYWluIGV2YWx1YXRlcyB0byBhIGludCBvYmplY3QsIG5vdCBhIGxvbmcuCisgIGFnYWluIGV2YWx1YXRlcyB0byBhbiBpbnQgb2JqZWN0LCBub3QgYSBsb25nLgogCiAtIEJ1ZyAjMTUwMTkzNDogVGhlIHNjb3BlIG9mIGdsb2JhbCB2YXJpYWJsZXMgdGhhdCBhcmUgbG9jYWxseSBhc3NpZ25lZAogICB1c2luZyBhdWdtZW50ZWQgYXNzaWdubWVudCBpcyBub3cgY29ycmVjdGx5IGRldGVybWluZWQuCkBAIC04MjgyLDcgKzEyMzc5LDcgQEAKIAogLSBCdWcgIzExOTQxODE6IGJ6Mi5CWjJGaWxlIGRpZG4ndCBoYW5kbGUgbW9kZSAnVScgY29ycmVjdGx5LgogCi0tIFBhdGNoICMxMjEyMTE3OiBvcy5zdGF0KCkuc3RfZmxhZ3MgaXMgbm93IGFjY2Vzc2libGUgYXMgYSBhdHRyaWJ1dGUKKy0gUGF0Y2ggIzEyMTIxMTc6IG9zLnN0YXQoKS5zdF9mbGFncyBpcyBub3cgYWNjZXNzaWJsZSBhcyBhbiBhdHRyaWJ1dGUKICAgaWYgYXZhaWxhYmxlIG9uIHRoZSBwbGF0Zm9ybS4KIAogLSBQYXRjaCAjMTEwMzk1MTogRXhwb3NlIE9fU0hMT0NLIGFuZCBPX0VYTE9DSyBpbiB0aGUgcG9zaXggbW9kdWxlIGlmCkBAIC05OTIxLDcgKzE0MDE4LDcgQEAKIC0gV2hlbiBtZXRob2Qgb2JqZWN0cyBoYXZlIGFuIGF0dHJpYnV0ZSB0aGF0IGNhbiBiZSBzYXRpc2ZpZWQgZWl0aGVyCiAgIGJ5IHRoZSBmdW5jdGlvbiBvYmplY3Qgb3IgYnkgdGhlIG1ldGhvZCBvYmplY3QsIHRoZSBmdW5jdGlvbgogICBvYmplY3QncyBhdHRyaWJ1dGUgdXN1YWxseSB3aW5zLiAgQ2hyaXN0aWFuIFRpc21lciBwb2ludGVkIG91dCB0aGF0Ci0gIHRoYXQgdGhpcyBpcyByZWFsbHkgYSBtaXN0YWtlLCBiZWNhdXNlIHRoaXMgb25seSBoYXBwZW5zIGZvciBzcGVjaWFsCisgIHRoaXMgaXMgcmVhbGx5IGEgbWlzdGFrZSwgYmVjYXVzZSB0aGlzIG9ubHkgaGFwcGVucyBmb3Igc3BlY2lhbAogICBtZXRob2RzIChsaWtlIF9fcmVkdWNlX18pIHdoZXJlIHRoZSBtZXRob2Qgb2JqZWN0J3MgdmVyc2lvbiBpcwogICByZWFsbHkgbW9yZSBhcHByb3ByaWF0ZSB0aGFuIHRoZSBmdW5jdGlvbidzIGF0dHJpYnV0ZS4gIFNvIGZyb20gbm93CiAgIG9uLCBhbGwgbWV0aG9kIGF0dHJpYnV0ZXMgd2lsbCBoYXZlIHByZWNlZGVuY2Ugb3ZlciBmdW5jdGlvbgpAQCAtMTEwODIsNyArMTUxNzksNyBAQAogICBpbnRlcnByZXRlciBleGVjdXRpb25zLCB3b3VsZCBmYWlsLgogCiAtICIlYyIgJSB1ImEiIG5vdyByZXR1cm5zIGEgdW5pY29kZSBzdHJpbmcgaW5zdGVhZCBvZiByYWlzaW5nIGEKLSAgVHlwZUVycm9yLiB1IiVjIiAlIDB4ZmZmZmZmZmYgbm93IHJhaXNlcyBhIE92ZXJmbG93RXJyb3IgaW5zdGVhZAorICBUeXBlRXJyb3IuIHUiJWMiICUgMHhmZmZmZmZmZiBub3cgcmFpc2VzIGFuIE92ZXJmbG93RXJyb3IgaW5zdGVhZAogICBvZiBhIFZhbHVlRXJyb3IgdG8gYmUgY29uc2lzdGVudCB3aXRoICIlYyIgJSAyNTYuIFNlZSBTRiBwYXRjaCAjNzEwMTI3LgogCiBFeHRlbnNpb24gbW9kdWxlcwpAQCAtMTc0MTUsNyArMjE1MTIsNyBAQAogCUJvdyB0byBmb250LWxvY2sgYXQgdGhlIGVuZCBvZiB0aGUgZG9jc3RyaW5nLCBzaW5jZSBpdCB0aHJvd3Mgc3R1ZmYKIAlvZmYuCiAKLQlNYWtlIHN1cmUgdGhlIHBhdGggcGFyYW10ZXIgdG8gcmVhZG1vZHVsZSgpIGlzIGEgbGlzdCBiZWZvcmUgYWRkaW5nIGl0CisJTWFrZSBzdXJlIHRoZSBwYXRoIHBhcmFtZXRlciB0byByZWFkbW9kdWxlKCkgaXMgYSBsaXN0IGJlZm9yZSBhZGRpbmcgaXQKIAl3aXRoIHN5cy5wYXRoLCBvciB0aGUgYWRkaXRpb24gY291bGQgZmFpbC4KIAogCkBAIC0xODk3NSw3ICsyMzA3Miw3IEBACiAKIC0gVGhlIGludGVyZmFjZXMgZm9yIHRoZSBiaW5kKigpIGFuZCB1bmJpbmQoKSB3aWRnZXQgbWV0aG9kcyBoYXZlIGJlZW4KIHJlZGVzaWduZWQ7IHRoZSBiaW5kKigpIG1ldGhvZHMgbm93IHJldHVybiB0aGUgbmFtZSBvZiB0aGUgVGNsIGNvbW1hbmQgCi1jcmVhdGVkIGZvciB0aGUgY2FsbGJhY2ssIGFuZCB0aGlzIGNhbiBiZSBwYXNzZWQgYXMgYSBvcHRpb25hbAorY3JlYXRlZCBmb3IgdGhlIGNhbGxiYWNrLCBhbmQgdGhpcyBjYW4gYmUgcGFzc2VkIGFzIGFuIG9wdGlvbmFsCiBhcmd1bWVudCB0byB1bmJpbmQoKSBpbiBvcmRlciB0byBkZWxldGUgdGhlIGNvbW1hbmQgKG5vcm1hbGx5LCBzdWNoCiBjb21tYW5kcyBhcmUgYXV0b21hdGljYWxseSB1bmJvdW5kIHdoZW4gdGhlIHdpZGdldCBpcyBkZXN0cm95ZWQsIGJ1dAogZm9yIHNvbWUgYXBwbGljYXRpb25zIHRoaXMgaXNuJ3QgZW5vdWdoKS4KQEAgLTE5NDY3LDcgKzIzNTY0LDcgQEAKIC0gVGhlIHdhcm5pbmcgYWJvdXQgYSB0aHJlYWQgc3RpbGwgaGF2aW5nIGEgZnJhbWUgbm93IG9ubHkgaGFwcGVucyBpbgogdmVyYm9zZSBtb2RlLgogCi0tIENoYW5nZSB0aGUgc2lnbmFsIGZpbmlhbGl6YXRpb24gc28gdGhhdCBpdCBhbHNvIHJlc2V0cyB0aGUgc2lnbmFsCistIENoYW5nZSB0aGUgc2lnbmFsIGZpbmFsaXphdGlvbiBzbyB0aGF0IGl0IGFsc28gcmVzZXRzIHRoZSBzaWduYWwKIGhhbmRsZXJzLiAgQWZ0ZXIgdGhpcyBoYXMgYmVlbiBjYWxsZWQsIG91ciBzaWduYWwgaGFuZGxlcnMgYXJlIG5vCiBsb25nZXIgYWN0aXZlIQogCkBAIC0yMTMxOSw3ICsyNTQxNiw3IEBACiBmaXhlZC4KIAogLSBUaGUgdGVzdCBvZiBuZWdhdGl2ZSBudW1iZXIgdG8gdGhlIGZsb2F0IHBvd2VyIGhhcyBiZWVuIG1vdmVkIGZyb20gdGhlIAotYnVpbHQtaW4gcG93KCkgZnVuY3RpbiB0byBmbG9hdG9iamVjdC5jIChzbyBjb21wbGV4IG51bWJlcnMgY2FuIHlpZWxkIHRoZSAKK2J1aWx0LWluIHBvdygpIGZ1bmN0aW9uIHRvIGZsb2F0b2JqZWN0LmMgKHNvIGNvbXBsZXggbnVtYmVycyBjYW4geWllbGQgdGhlCiBjb3JyZWN0IHJlc3VsdCkuCiAKIC0gVGhlIGJ1ZyBpbnRyb2R1Y2VkIGluIGJldGEyIHdoZXJlIHNoYXJlZCBsaWJyYXJpZXMgbG9hZGVkICh1c2luZyAKZGlmZiAtLWdpdCBhL01pc2MvTkVXUyBiL01pc2MvTkVXUwppbmRleCA4NmQ3YzVlLi5mNTY2ZjY1IDEwMDY0NAotLS0gYS9NaXNjL05FV1MKKysrIGIvTWlzYy9ORVdTCkBAIC0xLDcwICsxLDg4MiBAQAotKysrKysrKysrKysKK++7vysrKysrKysrKysrCiBQeXRob24gTmV3cwogKysrKysrKysrKysKIAotV2hhdCdzIE5ldyBpbiBQeXRob24gMy4zLjc/Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitXaGF0J3MgTmV3IGluIFB5dGhvbiAzLjQuNT8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi0qUmVsZWFzZSBkYXRlOiBYWFhYLVhYLVhYKgorUmVsZWFzZSBkYXRlOiB0YmEKIAogQ29yZSBhbmQgQnVpbHRpbnMKIC0tLS0tLS0tLS0tLS0tLS0tCiAKK0xpYnJhcnkKKy0tLS0tLS0KKworCitXaGF0J3MgTmV3IGluIFB5dGhvbiAzLjQuND8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitSZWxlYXNlIGRhdGU6IDIwMTUvMTIvMjAKKworV2luZG93cworLS0tLS0tLQorCistIElzc3VlICMyNTg0NDogQ29ycmVjdGVkID0vPT0gdHlwbyBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIGNyYXNoIGluIGxhdW5jaGVyLgorCisKK1doYXQncyBOZXcgaW4gUHl0aG9uIDMuNC40cmMxPworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1JlbGVhc2UgZGF0ZTogMjAxNS8xMi8wNgorCitDb3JlIGFuZCBCdWlsdGlucworLS0tLS0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMjU3MDk6IEZpeGVkIHByb2JsZW0gd2l0aCBpbi1wbGFjZSBzdHJpbmcgY29uY2F0ZW5hdGlvbiBhbmQgdXRmLTgKKyAgY2FjaGUuCisKKy0gSXNzdWUgIzI0MDk3OiBGaXhlZCBjcmFzaCBpbiBvYmplY3QuX19yZWR1Y2VfXygpIGlmIHNsb3QgbmFtZSBpcyBmcmVlZCBpbnNpZGUKKyAgX19nZXRhdHRyX18uCisKKy0gSXNzdWUgIzI0NzMxOiBGaXhlZCBjcmFzaCBvbiBjb252ZXJ0aW5nIG9iamVjdHMgd2l0aCBzcGVjaWFsIG1ldGhvZHMKKyAgX19ieXRlc19fLCBfX3RydW5jX18sIGFuZCBfX2Zsb2F0X18gcmV0dXJuaW5nIGluc3RhbmNlcyBvZiBzdWJjbGFzc2VzIG9mCisgIGJ5dGVzLCBpbnQsIGFuZCBmbG9hdCB0byBzdWJjbGFzc2VzIG9mIGJ5dGVzLCBpbnQsIGFuZCBmbG9hdCBjb3JyZXNwb25kaW5nbHkuCisKKy0gSXNzdWUgIzI1Mzg4OiBGaXhlZCB0b2tlbml6ZXIgY3Jhc2ggd2hlbiBwcm9jZXNzaW5nIHVuZGVjb2RhYmxlIHNvdXJjZSBjb2RlCisgIHdpdGggYSBudWxsIGJ5dGUuCisKKy0gSXNzdWUgIzIyOTk1OiBEZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIF9fcmVkdWNlX18gYW5kIF9fcmVkdWNlX2V4X18gbm93CisgIHJlamVjdHMgYnVpbHRpbiB0eXBlcyB3aXRoIG5vdCBkZWZpbmVkIF9fbmV3X18uCisKKy0gSXNzdWUgIzI0ODAyOiBBdm9pZCBidWZmZXIgb3ZlcnJlYWRzIHdoZW4gaW50KCksIGZsb2F0KCksIGNvbXBpbGUoKSwgZXhlYygpCisgIGFuZCBldmFsKCkgYXJlIHBhc3NlZCBieXRlcy1saWtlIG9iamVjdHMuICBUaGVzZSBvYmplY3RzIGFyZSBub3QKKyAgbmVjZXNzYXJpbHkgdGVybWluYXRlZCBieSBhIG51bGwgYnl0ZSwgYnV0IHRoZSBmdW5jdGlvbnMgYXNzdW1lZCB0aGV5IHdlcmUuCisKKy0gSXNzdWUgIzI0NDAyOiBGaXggaW5wdXQoKSB0byBwcm9tcHQgdG8gdGhlIHJlZGlyZWN0ZWQgc3Rkb3V0IHdoZW4KKyAgc3lzLnN0ZG91dC5maWxlbm8oKSBmYWlscy4KKworLSBJc3N1ZSAjMjQ4MDY6IFByZXZlbnQgYnVpbHRpbiB0eXBlcyB0aGF0IGFyZSBub3QgYWxsb3dlZCB0byBiZSBzdWJjbGFzc2VkIGZyb20KKyAgYmVpbmcgc3ViY2xhc3NlZCB0aHJvdWdoIG11bHRpcGxlIGluaGVyaXRhbmNlLgorCistIElzc3VlICMyNDg0ODogRml4ZWQgYSBudW1iZXIgb2YgYnVncyBpbiBVVEYtNyBkZWNvZGluZyBvZiBtaXNmb3JtZWQgZGF0YS4KKworLSBJc3N1ZSAjMjUyODA6IEltcG9ydCB0cmFjZSBtZXNzYWdlcyBlbWl0dGVkIGluIHZlcmJvc2UgKC12KSBtb2RlIGFyZSBubworICBsb25nZXIgZm9ybWF0dGVkIHR3aWNlLgorCistIElzc3VlICMyNTAwMzogb3MudXJhbmRvbSgpIGRvZXNuJ3QgdXNlIGdldGVudHJvcHkoKSBvbiBTb2xhcmlzIGJlY2F1c2UKKyAgZ2V0ZW50cm9weSgpIGlzIGJsb2NraW5nLCB3aGVyZWFzIG9zLnVyYW5kb20oKSBzaG91bGQgbm90IGJsb2NrLiBnZXRlbnRyb3B5KCkKKyAgaXMgc3VwcG9ydGVkIHNpbmNlIFNvbGFyaXMgMTEuMy4KKworLSBJc3N1ZSAjMjUxODI6IFRoZSBzdGRwcmludGVyICh1c2VkIGFzIHN5cy5zdGRlcnIgYmVmb3JlIHRoZSBpbyBtb2R1bGUgaXMKKyAgaW1wb3J0ZWQgYXQgc3RhcnR1cCkgbm93IHVzZXMgdGhlIGJhY2tzbGFzaHJlcGxhY2UgZXJyb3IgaGFuZGxlci4KKworLSBJc3N1ZSAjMjQ4OTE6IEZpeCBhIHJhY2UgY29uZGl0aW9uIGF0IFB5dGhvbiBzdGFydHVwIGlmIHRoZSBmaWxlIGRlc2NyaXB0b3IKKyAgb2Ygc3RkaW4gKDApLCBzdGRvdXQgKDEpIG9yIHN0ZGVyciAoMikgaXMgY2xvc2VkIHdoaWxlIFB5dGhvbiBpcyBjcmVhdGluZworICBzeXMuc3RkaW4sIHN5cy5zdGRvdXQgYW5kIHN5cy5zdGRlcnIgb2JqZWN0cy4gVGhlc2UgYXR0cmlidXRlcyBhcmUgbm93IHNldAorICB0byBOb25lIGlmIHRoZSBjcmVhdGlvbiBvZiB0aGUgb2JqZWN0IGZhaWxlZCwgaW5zdGVhZCBvZiByYWlzaW5nIGFuIE9TRXJyb3IKKyAgZXhjZXB0aW9uLiBJbml0aWFsIHBhdGNoIHdyaXR0ZW4gYnkgTWFyY28gUGFvbGluaS4KKworLSBJc3N1ZSAjMjExNjc6IE5BTiBvcGVyYXRpb25zIGFyZSBub3cgaGFuZGxlZCBjb3JyZWN0bHkgd2hlbiBweXRob24gaXMKKyAgY29tcGlsZWQgd2l0aCBJQ0MgZXZlbiBpZiAtZnAtbW9kZWwgc3RyaWN0IGlzIG5vdCBzcGVjaWZpZWQuCisKKy0gSXNzdWUgIzQzOTU6IEJldHRlciB0ZXN0aW5nIGFuZCBkb2N1bWVudGF0aW9uIG9mIGJpbmFyeSBvcGVyYXRvcnMuCisgIFBhdGNoIGJ5IE1hcnRpbiBQYW50ZXIuCisKKy0gSXNzdWUgIzI0NDY3OiBGaXhlZCBwb3NzaWJsZSBidWZmZXIgb3Zlci1yZWFkIGluIGJ5dGVhcnJheS4gVGhlIGJ5dGVhcnJheQorICBvYmplY3Qgbm93IGFsd2F5cyBhbGxvY2F0ZXMgcGxhY2UgZm9yIHRyYWlsaW5nIG51bGwgYnl0ZSBhbmQgaXQncyBidWZmZXIgbm93CisgIGlzIGFsd2F5cyBudWxsLXRlcm1pbmF0ZWQuCisKKy0gSXNzdWUgIzI0MTE1OiBVcGRhdGUgdXNlcyBvZiBQeU9iamVjdF9Jc1RydWUoKSwgUHlPYmplY3RfTm90KCksCisgIFB5T2JqZWN0X0lzSW5zdGFuY2UoKSwgUHlPYmplY3RfUmljaENvbXBhcmVCb29sKCkgYW5kIF9QeURpY3RfQ29udGFpbnMoKQorICB0byBjaGVjayBmb3IgYW5kIGhhbmRsZSBlcnJvcnMgY29ycmVjdGx5LgorCistIElzc3VlICMyNDI1NzogRml4ZWQgc3lzdGVtIGVycm9yIGluIHRoZSBjb21wYXJpc29uIG9mIGZha2VkCisgIHR5cGVzLlNpbXBsZU5hbWVzcGFjZS4KKworLSBJc3N1ZSAjMjI5Mzk6IEZpeGVkIGludGVnZXIgb3ZlcmZsb3cgaW4gaXRlcmF0b3Igb2JqZWN0LiAgUGF0Y2ggYnkKKyAgQ2xlbWVudCBSb3VhdWx0LgorCistIElzc3VlICMyMzk4NTogRml4IGEgcG9zc2libGUgYnVmZmVyIG92ZXJydW4gd2hlbiBkZWxldGluZyBhIHNsaWNlIGZyb20KKyAgdGhlIGZyb250IG9mIGEgYnl0ZWFycmF5IGFuZCB0aGVuIGFwcGVuZGluZyBzb21lIG90aGVyIGJ5dGVzIGRhdGEuCisKKy0gSXNzdWUgIzI0MTAyOiBGaXhlZCBleGNlcHRpb24gdHlwZSBjaGVja2luZyBpbiBzdGFuZGFyZCBlcnJvciBoYW5kbGVycy4KKworLSBJc3N1ZSAjMjM3NTc6IFB5U2VxdWVuY2VfVHVwbGUoKSBpbmNvcnJlY3RseSBjYWxsZWQgdGhlIGNvbmNyZXRlIGxpc3QgQVBJCisgIHdoZW4gdGhlIGRhdGEgd2FzIGEgbGlzdCBzdWJjbGFzcy4KKwogLSBJc3N1ZSAjMjQ0MDc6IEZpeCBjcmFzaCB3aGVuIGRpY3QgaXMgbXV0YXRlZCB3aGlsZSBiZWluZyB1cGRhdGVkLgogCiAtIElzc3VlICMyNDA5NjogTWFrZSB3YXJuaW5ncy53YXJuX2V4cGxpY2l0IG1vcmUgcm9idXN0IGFnYWluc3QgbXV0YXRpb24gb2YgdGhlCiAgIHdhcm5pbmdzLmZpbHRlcnMgbGlzdC4KIAorLSBJc3N1ZSAjMjM5OTY6IEF2b2lkIGEgY3Jhc2ggd2hlbiBhIGRlbGVnYXRlZCBnZW5lcmF0b3IgcmFpc2VzIGFuCisgIHVubm9ybWFsaXplZCBTdG9wSXRlcmF0aW9uIGV4Y2VwdGlvbi4gIFBhdGNoIGJ5IFN0ZWZhbiBCZWhuZWwuCisKKy0gSXNzdWUgIzI0MDIyOiBGaXggdG9rZW5pemVyIGNyYXNoIHdoZW4gcHJvY2Vzc2luZyB1bmRlY29kYWJsZSBzb3VyY2UgY29kZS4KKworLSBJc3N1ZSAjMjMzMDk6IEF2b2lkIGEgZGVhZGxvY2sgYXQgc2h1dGRvd24gaWYgYSBkYWVtb24gdGhyZWFkIGlzIGFib3J0ZWQKKyAgd2hpbGUgaXQgaXMgaG9sZGluZyBhIGxvY2sgdG8gYSBidWZmZXJlZCBJL08gb2JqZWN0LCBhbmQgdGhlIG1haW4gdGhyZWFkCisgIHRyaWVzIHRvIHVzZSB0aGUgc2FtZSBJL08gb2JqZWN0ICh0eXBpY2FsbHkgc3Rkb3V0IG9yIHN0ZGVycikuICBBIGZhdGFsCisgIGVycm9yIGlzIGVtaXR0ZWQgaW5zdGVhZC4KKworLSBJc3N1ZSAjMjI5Nzc6IEZpeGVkIGZvcm1hdHRpbmcgV2luZG93cyBlcnJvciBtZXNzYWdlcyBvbiBXaW5lLgorICBQYXRjaCBieSBNYXJ0aW4gUGFudGVyLgorCistIElzc3VlICMyMzgwMzogRml4ZWQgc3RyLnBhcnRpdGlvbigpIGFuZCBzdHIucnBhcnRpdGlvbigpIHdoZW4gYSBzZXBhcmF0b3IKKyAgaXMgd2lkZXIgdGhlbiBwYXJ0aXRpb25lZCBzdHJpbmcuCisKKy0gSXNzdWUgIzIzMTkyOiBGaXhlZCBnZW5lcmF0b3IgbGFtYmRhcy4gIFBhdGNoIGJ5IEJydW5vIENhdWV0LgorCistIElzc3VlICMyMzYyOTogRml4IHRoZSBkZWZhdWx0IF9fc2l6ZW9mX18gaW1wbGVtZW50YXRpb24gZm9yIHZhcmlhYmxlLXNpemVkCisgIG9iamVjdHMuCisKIC0gSXNzdWUgIzI0MDQ0OiBGaXggcG9zc2libGUgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGxpc3Quc29ydCBpbiBvdXQgb2YKICAgbWVtb3J5IGNvbmRpdGlvbnMuCiAKLS0gSXNzdWUgIzIzMDU1OiBGaXhlZCBhIGJ1ZmZlciBvdmVyZmxvdyBpbiBQeVVuaWNvZGVfRnJvbUZvcm1hdFYuICBBbmFseXNpcwotICBhbmQgZml4IGJ5IEd1aWRvIFZyYW5rZW4uCistIElzc3VlICMyMTM1NDogUHlDRnVuY3Rpb25fTmV3IGZ1bmN0aW9uIGlzIGV4cG9zZWQgYnkgcHl0aG9uIERMTCBhZ2Fpbi4KIAogTGlicmFyeQogLS0tLS0tLQogCistIElzc3VlICMyNDkwMzogRml4IHJlZ3Jlc3Npb24gaW4gbnVtYmVyIG9mIGFyZ3VtZW50cyBjb21waWxlYWxsIGFjY2VwdHMgd2hlbgorICAnLWQnIGlzIHNwZWNpZmllZC4gIFRoZSBjaGVjayBvbiB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cyBoYXMgYmVlbiBkcm9wcGVkCisgIGNvbXBsZXRlbHkgYXMgaXQgbmV2ZXIgd29ya2VkIGNvcnJlY3RseSBhbnl3YXkuCisKKy0gSXNzdWUgIzI1NzY0OiBJbiB0aGUgc3VicHJvY2VzcyBtb2R1bGUsIHByZXNlcnZlIGFueSBleGNlcHRpb24gY2F1c2VkIGJ5CisgIGZvcmsoKSBmYWlsdXJlIHdoZW4gcHJlZXhlY19mbiBpcyB1c2VkLgorCistIElzc3VlICM2NDc4OiBfc3RycHRpbWUncyByZWdleHAgY2FjaGUgbm93IGlzIHJlc2V0IGFmdGVyIGNoYW5naW5nIHRpbWV6b25lCisgIHdpdGggdGltZS50enNldCgpLgorCistIElzc3VlICMyNTE3NzogRml4ZWQgcHJvYmxlbSB3aXRoIHRoZSBtZWFuIG9mIHZlcnkgc21hbGwgYW5kIHZlcnkgbGFyZ2UKKyAgbnVtYmVycy4gQXMgYSBzaWRlIGVmZmVjdCwgc3RhdGlzdGljcy5tZWFuIGFuZCBzdGF0aXN0aWNzLnZhcmlhbmNlIHNob3VsZAorICBiZSBzaWduaWZpY2FudGx5IGZhc3Rlci4KKworLSBJc3N1ZSAjMjU3MTg6IEZpeGVkIGNvcHlpbmcgb2JqZWN0IHdpdGggc3RhdGUgd2l0aCBib29sZWFuIHZhbHVlIGlzIGZhbHNlLgorCistIElzc3VlICMxMDEzMTogRml4ZWQgZGVlcCBjb3B5aW5nIG9mIG1pbmlkb20gZG9jdW1lbnRzLiAgQmFzZWQgb24gcGF0Y2gKKyAgYnkgTWFyaWFuIEdhbmlzaW4uCisKKy0gSXNzdWUgIzI1NzI1OiBGaXhlZCBhIHJlZmVyZW5jZSBsZWFrIGluIHBpY2tsZS5sb2FkcygpIHdoZW4gdW5waWNrbGluZworICBpbnZhbGlkIGRhdGEgaW5jbHVkaW5nIHR1cGxlIGluc3RydWN0aW9ucy4KKworLSBJc3N1ZSAjMjU2NjM6IEluIHRoZSBSZWFkbGluZSBjb21wbGV0ZXIsIGF2b2lkIGxpc3RpbmcgZHVwbGljYXRlIGdsb2JhbAorICBuYW1lcywgYW5kIHNlYXJjaCB0aGUgZ2xvYmFsIG5hbWVzcGFjZSBiZWZvcmUgc2VhcmNoaW5nIGJ1aWx0aW5zLgorCistIElzc3VlICMyNTY4ODogRml4ZWQgZmlsZSBsZWFrIGluIEVsZW1lbnRUcmVlLml0ZXJwYXJzZSgpIHJhaXNpbmcgYW4gZXJyb3IuCisKKy0gSXNzdWUgIzIzOTE0OiBGaXhlZCBTeXN0ZW1FcnJvciByYWlzZWQgYnkgdW5waWNrbGVyIG9uIGJyb2tlbiBwaWNrbGUgZGF0YS4KKworLSBJc3N1ZSAjMjU2OTE6IEZpeGVkIGNyYXNoIG9uIGRlbGV0aW5nIEVsZW1lbnRUcmVlLkVsZW1lbnQgYXR0cmlidXRlcy4KKworLSBJc3N1ZSAjMjU2MjQ6IFppcEZpbGUgbm93IGFsd2F5cyB3cml0ZXMgYSBaSVBfU1RPUkVEIGhlYWRlciBmb3IgZGlyZWN0b3J5CisgIGVudHJpZXMuICBQYXRjaCBieSBEaW5neXVhbiBXYW5nLgorCistIElzc3VlICMyNTU4MzogQXZvaWQgaW5jb3JyZWN0IGVycm9ycyByYWlzZWQgYnkgb3MubWFrZWRpcnMoZXhpc3Rfb2s9VHJ1ZSkKKyAgd2hlbiB0aGUgT1MgZ2l2ZXMgcHJpb3JpdHkgdG8gZXJyb3JzIHN1Y2ggYXMgRUFDQ0VTIG92ZXIgRUVYSVNULgorCistIElzc3VlICMyNTU5MzogQ2hhbmdlIHNlbWFudGljcyBvZiBFdmVudExvb3Auc3RvcCgpIGluIGFzeW5jaW8uCisKKy0gSXNzdWUgIzY5NzM6IFdoZW4gd2Uga25vdyBhIHN1YnByb2Nlc3MuUG9wZW4gcHJvY2VzcyBoYXMgZGllZCwgZG8KKyAgbm90IGFsbG93IHRoZSBzZW5kX3NpZ25hbCgpLCB0ZXJtaW5hdGUoKSwgb3Iga2lsbCgpIG1ldGhvZHMgdG8gZG8KKyAgYW55dGhpbmcgYXMgdGhleSBjb3VsZCBwb3RlbnRpYWxseSBzaWduYWwgYSBkaWZmZXJlbnQgcHJvY2Vzcy4KKworLSBJc3N1ZSAjMjU1Nzg6IEZpeCAoYW5vdGhlcikgbWVtb3J5IGxlYWsgaW4gU1NMU29ja2V0LmdldHBlZXJjZXIoKS4KKworLSBJc3N1ZSAjMjU1OTA6IEluIHRoZSBSZWFkbGluZSBjb21wbGV0ZXIsIG9ubHkgY2FsbCBnZXRhdHRyKCkgb25jZSBwZXIKKyAgYXR0cmlidXRlLgorCistIElzc3VlICMyNTQ5ODogRml4IGEgY3Jhc2ggd2hlbiBnYXJiYWdlLWNvbGxlY3RpbmcgY3R5cGVzIG9iamVjdHMgY3JlYXRlZAorICBieSB3cmFwcGluZyBhIG1lbW9yeXZpZXcuICBUaGlzIHdhcyBhIHJlZ3Jlc3Npb24gbWFkZSBpbiAzLjQuMy4gIEJhc2VkCisgIG9uIHBhdGNoIGJ5IEVyeWtzdW4uCisKKy0gSXNzdWUgIzE4MDEwOiBGaXggdGhlIHB5ZG9jIHdlYiBzZXJ2ZXIncyBtb2R1bGUgc2VhcmNoIGZ1bmN0aW9uIHRvIGhhbmRsZQorICBleGNlcHRpb25zIGZyb20gaW1wb3J0aW5nIHBhY2thZ2VzLgorCistIElzc3VlICMyNTUxMDogZmlsZWlucHV0LkZpbGVJbnB1dC5yZWFkbGluZSgpIG5vdyByZXR1cm5zIGInJyBpbnN0ZWFkIG9mICcnCisgIGF0IHRoZSBlbmQgaWYgdGhlIEZpbGVJbnB1dCB3YXMgb3BlbmVkIHdpdGggYmluYXJ5IG1vZGUuCisgIFBhdGNoIGJ5IFJ5b3N1a2UgSXRvLgorCistIElzc3VlICMyNTUzMDogRGlzYWJsZSB0aGUgdnVsbmVyYWJsZSBTU0x2MyBwcm90b2NvbCBieSBkZWZhdWx0IHdoZW4gY3JlYXRpbmcKKyAgc3NsLlNTTENvbnRleHQuCisKKy0gSXNzdWUgIzI1NTY5OiBGaXggbWVtb3J5IGxlYWsgaW4gU1NMU29ja2V0LmdldHBlZXJjZXJ0KCkuCisKKy0gSXNzdWUgIzIxODI3OiBGaXhlZCB0ZXh0d3JhcC5kZWRlbnQoKSBmb3IgdGhlIGNhc2Ugd2hlbiBsYXJnZXN0IGNvbW1vbgorICB3aGl0ZXNwYWNlIGlzIGEgc3Vic3RyaW5nIG9mIHNtYWxsZXN0IGxlYWRpbmcgd2hpdGVzcGFjZS4KKyAgQmFzZWQgb24gcGF0Y2ggYnkgUm9iZXJ0IExpLgorCistIElzc3VlICMyNTQ3MTogU29ja2V0cyByZXR1cm5lZCBmcm9tIGFjY2VwdCgpIHNob3VsZG4ndCBhcHBlYXIgdG8gYmUKKyAgbm9uYmxvY2tpbmcuCisKKy0gSXNzdWUgIzI1NDQxOiBhc3luY2lvOiBSYWlzZSBlcnJvciBmcm9tIGRyYWluKCkgd2hlbiBzb2NrZXQgaXMgY2xvc2VkLgorCistIElzc3VlICMyNTQxMTogSW1wcm92ZWQgVW5pY29kZSBzdXBwb3J0IGluIFNNVFBIYW5kbGVyIHRocm91Z2ggYmV0dGVyIHVzZSBvZgorICB0aGUgZW1haWwgcGFja2FnZS4gVGhhbmtzIHRvIHVzZXIgc2ltb24wNCBmb3IgdGhlIHBhdGNoLgorCistIElzc3VlICMyNTM4MDogRml4ZWQgcHJvdG9jb2wgZm9yIHRoZSBTVEFDS19HTE9CQUwgb3Bjb2RlIGluCisgIHBpY2tsZXRvb2xzLm9wY29kZXMuCisKKy0gSXNzdWUgIzIzOTcyOiBVcGRhdGVzIGFzeW5jaW8gZGF0YWdyYW0gY3JlYXRlIG1ldGhvZCBhbGxvd2luZyByZXVzZXBvcnQKKyAgYW5kIHJldXNlYWRkciBzb2NrZXQgb3B0aW9ucyB0byBiZSBzZXQgcHJpb3IgdG8gYmluZGluZyB0aGUgc29ja2V0LgorICBNaXJyb3JpbmcgdGhlIGV4aXN0aW5nIGFzeW5jaW8gY3JlYXRlX3NlcnZlciBtZXRob2QgdGhlIHJldXNlYWRkciBvcHRpb24KKyAgZm9yIGRhdGFncmFtIHNvY2tldHMgZGVmYXVsdHMgdG8gVHJ1ZSBpZiB0aGUgTy9TIGlzICdwb3NpeCcgKGV4Y2VwdCBpZiB0aGUKKyAgcGxhdGZvcm0gaXMgQ3lnd2luKS4gUGF0Y2ggYnkgQ2hyaXMgTGF3cy4KKworLSBJc3N1ZSAjMjUzMDQ6IEFkZCBhc3luY2lvLnJ1bl9jb3JvdXRpbmVfdGhyZWFkc2FmZSgpLiAgVGhpcyBsZXRzIHlvdQorICBzdWJtaXQgYSBjb3JvdXRpbmUgdG8gYSBsb29wIGZyb20gYW5vdGhlciB0aHJlYWQsIHJldHVybmluZyBhCisgIGNvbmN1cnJlbnQuZnV0dXJlcy5GdXR1cmUuICBCeSBWaW5jZW50IE1pY2hlbC4KKworLSBJc3N1ZSAjMjUzMTk6IFdoZW4gdGhyZWFkaW5nLkV2ZW50IGlzIHJlaW5pdGlhbGl6ZWQsIHRoZSB1bmRlcmx5aW5nIGNvbmRpdGlvbgorICBzaG91bGQgdXNlIGEgcmVndWxhciBsb2NrIHJhdGhlciB0aGFuIGEgcmVjdXJzaXZlIGxvY2suCisKKy0gSXNzdWUgIzI1MjMyOiBGaXggQ0dJUmVxdWVzdEhhbmRsZXIgdG8gc3BsaXQgdGhlIHF1ZXJ5IGZyb20gdGhlIFVSTCBhdCB0aGUKKyAgZmlyc3QgcXVlc3Rpb24gbWFyayAoPykgcmF0aGVyIHRoYW4gdGhlIGxhc3QuIFBhdGNoIGZyb20gWGlhbmcgWmhhbmcuCisKKy0gSXNzdWUgIzI0NjU3OiBQcmV2ZW50IENHSVJlcXVlc3RIYW5kbGVyIGZyb20gY29sbGFwc2luZyBzbGFzaGVzIGluIHRoZQorICBxdWVyeSBwYXJ0IG9mIHRoZSBVUkwgYXMgaWYgaXQgd2VyZSBhIHBhdGguIFBhdGNoIGZyb20gWGlhbmcgWmhhbmcuCisKKy0gSXNzdWUgIzIyOTU4OiBDb25zdHJ1Y3RvciBhbmQgdXBkYXRlIG1ldGhvZCBvZiB3ZWFrcmVmLldlYWtWYWx1ZURpY3Rpb25hcnkKKyAgbm93IGFjY2VwdCB0aGUgc2VsZiBhbmQgdGhlIGRpY3Qga2V5d29yZCBhcmd1bWVudHMuCisKKy0gSXNzdWUgIzIyNjA5OiBDb25zdHJ1Y3RvciBvZiBjb2xsZWN0aW9ucy5Vc2VyRGljdCBub3cgYWNjZXB0cyB0aGUgc2VsZiBrZXl3b3JkCisgIGFyZ3VtZW50LgorCistIElzc3VlICMyNTI2Mi4gQWRkZWQgc3VwcG9ydCBmb3IgQklOQllURVM4IG9wY29kZSBpbiBQeXRob24gaW1wbGVtZW50YXRpb24gb2YKKyAgdW5waWNrbGVyLiAgSGlnaGVzdCAzMiBiaXRzIG9mIDY0LWJpdCBzaXplIGZvciBCSU5VTklDT0RFOCBhbmQgQklOQllURVM4CisgIG9wY29kZXMgbm8gbG9uZ2VyIHNpbGVudGx5IGlnbm9yZWQgb24gMzItYml0IHBsYXRmb3JtcyBpbiBDIGltcGxlbWVudGF0aW9uLgorCistIElzc3VlICMyNTAzNDogRml4IHN0cmluZy5Gb3JtYXR0ZXIgcHJvYmxlbSB3aXRoIGF1dG8tbnVtYmVyaW5nIGFuZAorICBuZXN0ZWQgZm9ybWF0X3NwZWNzLiBQYXRjaCBieSBBbnRob24gdmFuIGRlciBOZXV0LgorCistIElzc3VlICMyNTIzMzogUmV3cml0ZSB0aGUgZ3V0cyBvZiBhc3luY2lvLlF1ZXVlIGFuZAorICBhc3luY2lvLlNlbWFwaG9yZSB0byBiZSBtb3JlIHVuZGVyc3RhbmRhYmxlIGFuZCBjb3JyZWN0LgorCistIElzc3VlICMyMzYwMDogRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiB0emluZm8uZnJvbXV0YygpIHdhcyByZXR1cm5pbmcKKyAgd3JvbmcgcmVzdWx0cyBpbiBzb21lIGNhc2VzLgorCistIElzc3VlICMyNTIwMzogRmFpbGVkIHJlYWRsaW5lLnNldF9jb21wbGV0ZXJfZGVsaW1zKCkgbm8gbG9uZ2VyIGxlZnQgdGhlCisgIG1vZHVsZSBpbiBpbmNvbnNpc3RlbnQgc3RhdGUuCisKKy0gUHJldmVudCBvdmVyZmxvdyBpbiBfVW5waWNrbGVyX1JlYWQuCisKKy0gSXNzdWUgIzI1MDQ3OiBUaGUgWE1MIGVuY29kaW5nIGRlY2xhcmF0aW9uIHdyaXR0ZW4gYnkgRWxlbWVudCBUcmVlIG5vdworICByZXNwZWN0cyB0aGUgbGV0dGVyIGNhc2UgZ2l2ZW4gYnkgdGhlIHVzZXIuIFRoaXMgcmVzdG9yZXMgdGhlIGFiaWxpdHkgdG8KKyAgd3JpdGUgZW5jb2RpbmcgbmFtZXMgaW4gdXBwZXJjYXNlIGxpa2UgIlVURi04Iiwgd2hpY2ggd29ya2VkIGluIFB5dGhvbiAyLgorCistIElzc3VlICMxOTE0MzogcGxhdGZvcm0gbW9kdWxlIG5vdyByZWFkcyBXaW5kb3dzIHZlcnNpb24gZnJvbSBrZXJuZWwzMi5kbGwgdG8KKyAgYXZvaWQgY29tcGF0aWJpbGl0eSBzaGltcy4KKworLSBJc3N1ZSAjMjM1MTc6IEZpeCByb3VuZGluZyBpbiBmcm9tdGltZXN0YW1wKCkgYW5kIHV0Y2Zyb210aW1lc3RhbXAoKSBtZXRob2RzCisgIG9mIGRhdGV0aW1lLmRhdGV0aW1lOiBtaWNyb3NlY29uZHMgYXJlIG5vdyByb3VuZGVkIHRvIG5lYXJlc3Qgd2l0aCB0aWVzCisgIGdvaW5nIHRvIG5lYXJlc3QgZXZlbiBpbnRlZ2VyIChST1VORF9IQUxGX0VWRU4pLCBpbnN0ZWFkIG9mIGJlaW5nIHJvdW5kaW5nCisgIHRvd2FyZHMgemVybyAoUk9VTkRfRE9XTikuIEl0J3MgaW1wb3J0YW50IHRoYXQgdGhlc2UgbWV0aG9kcyB1c2UgdGhlIHNhbWUKKyAgcm91bmRpbmcgbW9kZSB0aGFuIGRhdGV0aW1lLnRpbWVkZWx0YSB0byBrZWVwIHRoZSBwcm9wZXJ0eToKKyAgKGRhdGV0aW1lKDE5NzAsMSwxKSArIHRpbWVkZWx0YShzZWNvbmRzPXQpKSA9PSBkYXRldGltZS51dGNmcm9tdGltZXN0YW1wKHQpLgorICBJdCBhbHNvIHRoZSByb3VuZGluZyBtb2RlIHVzZWQgYnkgcm91bmQoZmxvYXQpIGZvciBleGFtcGxlLgorCistIElzc3VlICMyNDY4NDogc29ja2V0LnNvY2tldC5nZXRhZGRyaW5mbygpIG5vdyBjYWxscworICBQeVVuaWNvZGVfQXNFbmNvZGVkU3RyaW5nKCkgaW5zdGVhZCBvZiBjYWxsaW5nIHRoZSBlbmNvZGUoKSBtZXRob2Qgb2YgdGhlCisgIGhvc3QsIHRvIGhhbmRsZSBjb3JyZWN0bHkgY3VzdG9tIHN0cmluZyB3aXRoIGFuIGVuY29kZSgpIG1ldGhvZCB3aGljaCBkb2Vzbid0CisgIHJldHVybiBhIGJ5dGUgc3RyaW5nLiBUaGUgZW5jb2RlciBvZiB0aGUgSUROQSBjb2RlYyBpcyBub3cgY2FsbGVkIGRpcmVjdGx5CisgIGluc3RlYWQgb2YgY2FsbGluZyB0aGUgZW5jb2RlKCkgbWV0aG9kIG9mIHRoZSBzdHJpbmcuCisKKy0gSXNzdWUgIzI0OTgyOiBzaHV0aWwubWFrZV9hcmNoaXZlKCkgd2l0aCB0aGUgInppcCIgZm9ybWF0IG5vdyBhZGRzIGVudHJpZXMKKyAgZm9yIGRpcmVjdG9yaWVzIChpbmNsdWRpbmcgZW1wdHkgZGlyZWN0b3JpZXMpIGluIFpJUCBmaWxlLgorCistIElzc3VlICMyNDg1NzogQ29tcGFyaW5nIGNhbGxfYXJncyB0byBhIGxvbmcgc2VxdWVuY2Ugbm93IGNvcnJlY3RseSByZXR1cm5zIGEKKyAgYm9vbGVhbiByZXN1bHQgaW5zdGVhZCBvZiByYWlzaW5nIGFuIGV4Y2VwdGlvbi4gIFBhdGNoIGJ5IEEgS2FwdHVyLgorCistIElzc3VlICMyNTAxOTogRml4ZWQgYSBjcmFzaCBjYXVzZWQgYnkgc2V0dGluZyBub24tc3RyaW5nIGtleSBvZiBleHBhdCBwYXJzZXIuCisgIEJhc2VkIG9uIHBhdGNoIGJ5IEpvaG4gTGVpdGNoLgorCistIElzc3VlICMyNDkxNzogdGltZV9zdHJmdGltZSgpIGJ1ZmZlciBvdmVyLXJlYWQuCisKKy0gSXNzdWUgIzIzMTQ0OiBNYWtlIHN1cmUgdGhhdCBIVE1MUGFyc2VyLmZlZWQoKSByZXR1cm5zIGFsbCB0aGUgZGF0YSwgZXZlbgorICB3aGVuIGNvbnZlcnRfY2hhcnJlZnMgaXMgVHJ1ZS4KKworLSBJc3N1ZSAjMTYxODA6IEV4aXQgcGRiIGlmIGZpbGUgaGFzIHN5bnRheCBlcnJvciwgaW5zdGVhZCBvZiB0cmFwcGluZyB1c2VyCisgIGluIGFuIGluZmluaXRlIGxvb3AuICBQYXRjaCBieSBYYXZpZXIgZGUgR2F5ZS4KKworLSBJc3N1ZSAjMjExMTI6IEZpeCByZWdyZXNzaW9uIGluIHVuaXR0ZXN0LmV4cGVjdGVkRmFpbHVyZSBvbiBzdWJjbGFzc2VzLgorICBQYXRjaCBmcm9tIEJlcmtlciBQZWtzYWcuCisKKy0gSXNzdWUgIzI0OTMxOiBJbnN0YW5jZXMgb2Ygc3ViY2xhc3NlcyBvZiBuYW1lZHR1cGxlcyBoYXZlIHRoZWlyIG93biBfX2RpY3RfXworICB3aGljaCBicmVha3MgdGhlIGluaGVyaXRlZCBfX2RpY3RfXyBwcm9wZXJ0eSBhbmQgYnJlYWtzIHRoZSBfYXNkaWN0KCkgbWV0aG9kLgorICBSZW1vdmVkIHRoZSBfX2RpY3RfXyBwcm9wZXJ0eSB0byBwcmV2ZW50IHRoZSBjb25mbGljdCBhbmQgZml4ZWQgX2FzZGljdCgpLgorCistIElzc3VlICMyNDc2NDogY2dpLkZpZWxkU3RvcmFnZS5yZWFkX211bHRpKCkgbm93IGlnbm9yZXMgdGhlIENvbnRlbnQtTGVuZ3RoCisgIGhlYWRlciBpbiBwYXJ0IGhlYWRlcnMuIFBhdGNoIHdyaXR0ZW4gYnkgUGV0ZXIgTGFuZHJ5IGFuZCByZXZpZXdlZCBieSBQaWVycmUKKyAgUXVlbnRlbC4KKworLSBJc3N1ZSAjMjQ3NzQ6IEZpeCBkb2NzdHJpbmcgaW4gaHR0cC5zZXJ2ZXIudGVzdC4gUGF0Y2ggZnJvbSBDaGl1LUhzaWFuZyBIc3UuCisKKy0gSXNzdWUgIzIxMTU5OiBJbXByb3ZlIG1lc3NhZ2UgaW4gY29uZmlncGFyc2VyLkludGVycG9sYXRpb25NaXNzaW5nT3B0aW9uRXJyb3IuCisgIFBhdGNoIGZyb20gxYF1a2FzeiBMYW5nYS4KKworLSBJc3N1ZSAjMjM4ODg6IEhhbmRsZSBmcmFjdGlvbmFsIHRpbWUgaW4gY29va2llIGV4cGlyeS4gUGF0Y2ggYnkgc3NoLgorCistIElzc3VlICMyMzAwNDogbW9ja19vcGVuKCkgbm93IHJlYWRzIGJpbmFyeSBkYXRhIGNvcnJlY3RseSB3aGVuIHRoZSB0eXBlIG9mCisgIHJlYWRfZGF0YSBpcyBieXRlcy4gIEluaXRpYWwgcGF0Y2ggYnkgQWFyb24gSGlsbC4KKworLSBJc3N1ZSAjMjM2NTI6IE1ha2UgaXQgcG9zc2libGUgdG8gY29tcGlsZSB0aGUgc2VsZWN0IG1vZHVsZSBhZ2FpbnN0IHRoZQorICBsaWJjIGhlYWRlcnMgZnJvbSB0aGUgTGludXggU3RhbmRhcmQgQmFzZSwgd2hpY2ggZG8gbm90IGluY2x1ZGUgc29tZQorICBFUE9MTCBtYWNyb3MuICBQYXRjaCBieSBNYXR0IEZyYW5rLgorCistIElzc3VlICMyMjkzMjogRml4IHRpbWV6b25lcyBpbiBlbWFpbC51dGlscy5mb3JtYXRkYXRlLgorICBQYXRjaCBmcm9tIERtaXRyeSBTaGFjaG5ldi4KKworLSBJc3N1ZSAjMjM3Nzk6IGltYXBsaWIgcmFpc2VzIFR5cGVFcnJvciBpZiBhdXRoZW50aWNhdG9yIHRyaWVzIHRvIGFib3J0LgorICBQYXRjaCBmcm9tIENyYWlnIEhvbG1xdWlzdC4KKworLSBJc3N1ZSAjMjMzMTk6IEZpeCBjdHlwZXMuQmlnRW5kaWFuU3RydWN0dXJlLCBzd2FwIGNvcnJlY3RseSBieXRlcy4gUGF0Y2gKKyAgd3JpdHRlbiBieSBNYXR0aGlldSBHYXV0aWVyLgorCistIElzc3VlICMyMzI1NDogRG9jdW1lbnQgaG93IHRvIGNsb3NlIHRoZSBUQ1BTZXJ2ZXIgbGlzdGVuaW5nIHNvY2tldC4KKyAgUGF0Y2ggZnJvbSBNYXJ0aW4gUGFudGVyLgorCistIElzc3VlICMxOTQ1MDogVXBkYXRlIFdpbmRvd3MgYW5kIE9TIFggaW5zdGFsbGVyIGJ1aWxkcyB0byB1c2UgU1FMaXRlIDMuOC4xMS4KKworLSBJc3N1ZSAjMjM0NDE6IHJjb21wbGV0ZXIgbm93IHByaW50cyBhIHRhYiBjaGFyYWN0ZXIgaW5zdGVhZCBvZiBkaXNwbGF5aW5nCisgIHBvc3NpYmxlIGNvbXBsZXRpb25zIGZvciBhbiBlbXB0eSB3b3JkLiAgSW5pdGlhbCBwYXRjaCBieSBNYXJ0aW4gU2VrZXJhLgorCistIElzc3VlICMyNDczNTogRml4IGludmFsaWQgbWVtb3J5IGFjY2VzcyBpbgorICBpdGVydG9vbHMuY29tYmluYXRpb25zX3dpdGhfcmVwbGFjZW1lbnQoKS4KKworLSBJc3N1ZSAjMTc1Mjc6IEFkZCBQQVRDSCB0byB3c2dpcmVmLnZhbGlkYXRvci4gUGF0Y2ggZnJvbSBMdWNhIFNiYXJkZWxsYS4KKworLSBJc3N1ZSAjMjQ2ODM6IEZpeGVkIGNyYXNoZXMgaW4gX2pzb24gZnVuY3Rpb25zIGNhbGxlZCB3aXRoIGFyZ3VtZW50cyBvZgorICBpbmFwcHJvcHJpYXRlIHR5cGUuCisKKy0gSXNzdWUgIzIxNjk3OiBzaHV0aWwuY29weXRyZWUoKSBub3cgY29ycmVjdGx5IGhhbmRsZXMgc3ltYm9saWMgbGlua3MgdGhhdAorICBwb2ludCB0byBkaXJlY3Rvcmllcy4gIFBhdGNoIGJ5IEVkdWFyZG8gU2VhYnJhIGFuZCBUaG9tYXMgS2x1eXZlci4KKworLSBJc3N1ZSAjMjQ2MjA6IFJhbmRvbS5zZXRzdGF0ZSgpIG5vdyB2YWxpZGF0ZXMgdGhlIHZhbHVlIG9mIHN0YXRlIGxhc3QgZWxlbWVudC4KKworLSBJc3N1ZSAjMjIxNTM6IEltcHJvdmUgdW5pdHRlc3QgZG9jcy4gUGF0Y2ggZnJvbSBNYXJ0aW4gUGFudGVyIGFuZCBldmlsemVyby4KKworLSBJc3N1ZSAjMjQyMDY6IEZpeGVkIF9fZXFfXyBhbmQgX19uZV9fIG1ldGhvZHMgb2YgaW5zcGVjdCBjbGFzc2VzLgorCistIElzc3VlICMyMTc1MDogbW9ja19vcGVuLnJlYWRfZGF0YSBjYW4gbm93IGJlIHJlYWQgZnJvbSBlYWNoIGluc3RhbmNlLCBhcyBpdAorICBjb3VsZCBpbiBQeXRob24gMy4zLgorCistIElzc3VlICMyMzI0NzogRml4IGEgY3Jhc2ggaW4gdGhlIFN0cmVhbVdyaXRlci5yZXNldCgpIG9mIENKSyBjb2RlY3MuCisKKy0gSXNzdWUgIzE4NjIyOiB1bml0dGVzdC5tb2NrLm1vY2tfb3BlbigpLnJlc2V0X21vY2sgd291bGQgcmVjdXJzZSBpbmZpbml0ZWx5LgorICBQYXRjaCBmcm9tIE5pY29sYSBQYWx1bWJvIGFuZCBMYXVyZW50IERlIEJ1eXN0LgorCistIElzc3VlICMyNDYwODogY2h1bmsuQ2h1bmsucmVhZCgpIG5vdyBhbHdheXMgcmV0dXJucyBieXRlcywgbm90IHN0ci4KKworLSBJc3N1ZSAjMTg2ODQ6IEZpeGVkIHJlYWRpbmcgb3V0IG9mIHRoZSBidWZmZXIgaW4gdGhlIHJlIG1vZHVsZS4KKworLSBJc3N1ZSAjMjQyNTk6IHRhcmZpbGUgbm93IHJhaXNlcyBhIFJlYWRFcnJvciBpZiBhbiBhcmNoaXZlIGlzIHRydW5jYXRlZAorICBpbnNpZGUgYSBkYXRhIHNlZ21lbnQuCisKKy0gSXNzdWUgIzI0NTUyOiBGaXggdXNlIGFmdGVyIGZyZWUgaW4gYW4gZXJyb3IgY2FzZSBvZiB0aGUgX3BpY2tsZSBtb2R1bGUuCisKKy0gSXNzdWUgIzI0NTE0OiB0YXJmaWxlIG5vdyB0b2xlcmF0ZXMgbnVtYmVyIGZpZWxkcyBjb25zaXN0aW5nIG9mIG9ubHkKKyAgd2hpdGVzcGFjZS4KKworLSBJc3N1ZSAjMTkxNzY6IEZpeGVkIGRvY3R5cGUoKSByZWxhdGVkIGJ1Z3MgaW4gQyBpbXBsZW1lbnRhdGlvbiBvZiBFbGVtZW50VHJlZS4KKyAgQSBkZXByZWNhdGlvbiB3YXJuaW5nIG5vIGxvbmdlciBpc3N1ZWQgYnkgWE1MUGFyc2VyIHN1YmNsYXNzIHdpdGggZGVmYXVsdAorICBkb2N0eXBlKCkgbWV0aG9kLiAgRGlyZWN0IGNhbGwgb2YgZG9jdHlwZSgpIG5vdyBpc3N1ZXMgYSB3YXJuaW5nLiAgUGFyc2VyJ3MKKyAgZG9jdHlwZSgpIG5vdyBpcyBub3QgY2FsbGVkIGlmIHRhcmdldCdzIGRvY3R5cGUoKSBpcyBjYWxsZWQuICBCYXNlZCBvbiBwYXRjaAorICBieSBNYXJ0aW4gUGFudGVyLgorCistIElzc3VlICMyMDM4NzogUmVzdG9yZSBzZW1hbnRpYyByb3VuZC10cmlwIGNvcnJlY3RuZXNzIGluIHRva2VuaXplL3VudG9rZW5pemUKKyAgZm9yIHRhYi1pbmRlbnRlZCBibG9ja3MuCisKKy0gSXNzdWUgIzI0NDU2OiBGaXhlZCBwb3NzaWJsZSBidWZmZXIgb3Zlci1yZWFkIGluIGFkcGNtMmxpbigpIGFuZCBsaW4yYWRwY20oKQorICBmdW5jdGlvbnMgb2YgdGhlIGF1ZGlvb3AgbW9kdWxlLgorCistIElzc3VlICMyNDMzNjogVGhlIGNvbnRleHRtYW5hZ2VyIGRlY29yYXRvciBub3cgd29ya3Mgd2l0aCBmdW5jdGlvbnMgd2l0aAorICBrZXl3b3JkIGFyZ3VtZW50cyBjYWxsZWQgImZ1bmMiIGFuZCAic2VsZiIuICBQYXRjaCBieSBNYXJ0aW4gUGFudGVyLgorCistIElzc3VlICMyNDQ4OTogZW5zdXJlIGEgcHJldmlvdXNseSBzZXQgQyBlcnJubyBkb2Vzbid0IGRpc3R1cmIgY21hdGgucG9sYXIoKS4KKworLSBJc3N1ZSAjNTYzMzogRml4ZWQgdGltZWl0IHdoZW4gdGhlIHN0YXRlbWVudCBpcyBhIHN0cmluZyBhbmQgdGhlIHNldHVwIGlzIG5vdC4KKworLSBJc3N1ZSAjMjQzMjY6IEZpeGVkIGF1ZGlvb3AucmF0ZWN2KCkgd2l0aCBub24tZGVmYXVsdCB3ZWlnaHRCIGFyZ3VtZW50LgorICBPcmlnaW5hbCBwYXRjaCBieSBEYXZpZCBNb29yZS4KKworLSBJc3N1ZSAjMjM4NDA6IHRva2VuaXplLm9wZW4oKSBub3cgY2xvc2VzIHRoZSB0ZW1wb3JhcnkgYmluYXJ5IGZpbGUgb24gZXJyb3IKKyAgdG8gZml4IGEgcmVzb3VyY2Ugd2FybmluZy4KKworLSBJc3N1ZSAjMjQyNTc6IEZpeGVkIHNlZ21lbnRhdGlvbiBmYXVsdCBpbiBzcWxpdGUzLlJvdyBjb25zdHJ1Y3RvciB3aXRoIGZha2VkCisgIGN1cnNvciB0eXBlLgorCistIElzc3VlICMyMjEwNzogdGVtcGZpbGUuZ2V0dGVtcGRpcigpIGFuZCB0ZW1wZmlsZS5ta2R0ZW1wKCkgbm93IHRyeSBhZ2FpbgorICB3aGVuIGEgZGlyZWN0b3J5IHdpdGggdGhlIGNob3NlbiBuYW1lIGFscmVhZHkgZXhpc3RzIG9uIFdpbmRvd3MgYXMgd2VsbCBhcworICBvbiBVbml4LiAgdGVtcGZpbGUubWtzdGVtcCgpIG5vdyBmYWlscyBlYXJseSBpZiBwYXJlbnQgZGlyZWN0b3J5IGlzIG5vdAorICB2YWxpZCAobm90IGV4aXN0cyBvciBpcyBhIGZpbGUpIG9uIFdpbmRvd3MuCisKKy0gSXNzdWUgIzY1OTg6IEluY3JlYXNlZCB0aW1lIHByZWNpc2lvbiBhbmQgcmFuZG9tIG51bWJlciByYW5nZSBpbgorICBlbWFpbC51dGlscy5tYWtlX21zZ2lkKCkgdG8gc3RyZW5ndGhlbiB0aGUgdW5pcXVlbmVzcyBvZiB0aGUgbWVzc2FnZSBJRC4KKworLSBJc3N1ZSAjMjQwOTE6IEZpeGVkIHZhcmlvdXMgY3Jhc2hlcyBpbiBjb3JuZXIgY2FzZXMgaW4gQyBpbXBsZW1lbnRhdGlvbiBvZgorICBFbGVtZW50VHJlZS4KKworLSBJc3N1ZSAjMjE5MzE6IG1zaWxpYi5GQ0lDcmVhdGUoKSBub3cgcmFpc2VzIFR5cGVFcnJvciBpbiB0aGUgY2FzZSBvZiBhIGJhZAorICBhcmd1bWVudCBpbnN0ZWFkIG9mIGEgVmFsdWVFcnJvciB3aXRoIGEgYm9ndXMgRkNJIGVycm9yIG51bWJlci4KKyAgUGF0Y2ggYnkgSmVmZnJleSBBcm1zdHJvbmcuCisKKy0gSXNzdWUgIzIzNzk2OiBwZWVrIGFuZCByZWFkMSBtZXRob2RzIG9mIEJ1ZmZlcmVkUmVhZGVyIG5vdyByYWlzZSBWYWx1ZUVycm9yCisgIGlmIHRoZXkgY2FsbGVkIG9uIGEgY2xvc2VkIG9iamVjdC4gUGF0Y2ggYnkgSm9obiBIZXJnZW5yb2VkZXIuCisKIC0gSXNzdWUgIzI0NTIxOiBGaXggcG9zc2libGUgaW50ZWdlciBvdmVyZmxvd3MgaW4gdGhlIHBpY2tsZSBtb2R1bGUuCiAKIC0gSXNzdWUgIzIyOTMxOiBBbGxvdyAnWycgYW5kICddJyBpbiBjb29raWUgdmFsdWVzLgogCistIElzc3VlICMyMDI3NDogUmVtb3ZlIGlnbm9yZWQgYW5kIGVycm9uZW91cyAia3dhcmdzIiBwYXJhbWV0ZXJzIGZyb20gdGhyZWUKKyAgTUVUSF9WQVJBUkdTIG1ldGhvZHMgb24gX3NxbGl0ZS5Db25uZWN0aW9uLgorCiAtIElzc3VlICMyNDA5NDogRml4IHBvc3NpYmxlIGNyYXNoIGluIGpzb24uZW5jb2RlIHdpdGggcG9vcmx5IGJlaGF2ZWQgZGljdAogICBzdWJjbGFzc2VzLgogCistIEFzeW5jaW8gaXNzdWUgMjIyIC8gUFIgMjMxIChWaWN0b3IgU3Rpbm5lcikgLS0gZml4IEBjb3JvdXRpbmUKKyAgZnVuY3Rpb25zIHdpdGhvdXQgX19uYW1lX18uCisKKy0gSXNzdWUgIzkyNDY6IE9uIFBPU0lYLCBvcy5nZXRjd2QoKSBub3cgc3VwcG9ydHMgcGF0aHMgbG9uZ2VyIHRoYW4gMTAyNSBieXRlcy4KKyAgUGF0Y2ggd3JpdHRlbiBieSBXaWxsaWFtIE9yci4KKworLSBUaGUga2V5d29yZHMgYXR0cmlidXRlIG9mIGZ1bmN0b29scy5wYXJ0aWFsIGlzIG5vdyBhbHdheXMgYSBkaWN0aW9uYXJ5LgorCistIElzc3VlcyAjMjQwOTksICMyNDEwMCwgYW5kICMyNDEwMTogRml4IGZyZWUtYWZ0ZXItdXNlIGJ1ZyBpbiBoZWFwcSdzIHNpZnR1cAorICBhbmQgc2lmdGRvd24gZnVuY3Rpb25zLgorCistIEJhY2twb3J0IGNvbGxlY3Rpb25zLmRlcXVlIGZpeGVzIGZyb20gUHl0aG9uIDMuNS4gIFByZXZlbnRzIHJlZW50cmFudCBiYWRuZXNzCisgIGR1cmluZyBkZWxldGlvbiBieSBkZWZlcnJpbmcgdGhlIGRlY3JlZiB1bnRpbCB0aGUgY29udGFpbmVyIGhhcyBiZWVuIHJlc3RvcmVkCisgIHRvIGEgY29uc2lzdGVudCBzdGF0ZS4KKworLSBJc3N1ZSAjMjMwMDg6IEZpeGVkIHJlc29sdmluZyBhdHRyaWJ1dGVzIHdpdGggYm9vbGVhbiB2YWx1ZSBpcyBGYWxzZSBpbiBweWRvYy4KKworLSBGaXggYXN5bmNpbyBpc3N1ZSAyMzU6IExpZm9RdWV1ZSBhbmQgUHJpb3JpdHlRdWV1ZSdzIHB1dCBkaWRuJ3QKKyAgaW5jcmVtZW50IHVuZmluaXNoZWQgdGFza3MgKHRoaXMgYnVnIHdhcyBpbnRyb2R1Y2VkIGluIDMuNC4zIHdoZW4KKyAgSm9pbmFibGVRdWV1ZSB3YXMgbWVyZ2VkIHdpdGggUXVldWUpLgorCistIElzc3VlICMyMzkwODogb3MgZnVuY3Rpb25zIG5vdyByZWplY3QgcGF0aHMgd2l0aCBlbWJlZGRlZCBudWxsIGNoYXJhY3RlcgorICBvbiBXaW5kb3dzIGluc3RlYWQgb2Ygc2lsZW50bHkgdHJ1bmNhdGUgdGhlbS4KKworLSBJc3N1ZSAjMjM3Mjg6IGJpbmFzY2lpLmNyY19ocXgoKSBjb3VsZCByZXR1cm4gYW4gaW50ZWdlciBvdXRzaWRlIG9mIHRoZSByYW5nZQorICAwLTB4ZmZmZiBmb3IgZW1wdHkgZGF0YS4KKworLSBJc3N1ZSAjMjM4MTE6IEFkZCBtaXNzaW5nIG5ld2xpbmUgdG8gdGhlIFB5Q29tcGlsZUVycm9yIGVycm9yIG1lc3NhZ2UuCisgIFBhdGNoIGJ5IEFsZXggU2hrb3AuCisKKy0gSXNzdWUgIzE3ODk4OiBGaXggZXhjZXB0aW9uIGluIGdldHRleHQucHkgd2hlbiBwYXJzaW5nIGNlcnRhaW4gcGx1cmFsIGZvcm1zLgorCistIElzc3VlICMyMjk4MjogSW1wcm92ZSBCT00gaGFuZGxpbmcgd2hlbiBzZWVraW5nIHRvIG11bHRpcGxlIHBvc2l0aW9ucyBvZgorICBhIHdyaXRhYmxlIHRleHQgZmlsZS4KKworLSBJc3N1ZSAjMjM4NjU6IGNsb3NlKCkgbWV0aG9kcyBpbiBtdWx0aXBsZSBtb2R1bGVzIG5vdyBhcmUgaWRlbXBvdGVudCBhbmQgbW9yZQorICByb2J1c3QgYXQgc2h1dGRvd24uIElmIHRoZXkgbmVlZCB0byByZWxlYXNlIG11bHRpcGxlIHJlc291cmNlcywgYWxsIGFyZQorICByZWxlYXNlZCBldmVuIGlmIGVycm9ycyBvY2N1ci4KKworLSBJc3N1ZSAjMjM4ODE6IHVybGxpYi5yZXF1ZXN0LmZ0cHdyYXBwZXIgY29uc3RydWN0b3Igbm93IGNsb3NlcyB0aGUgc29ja2V0IGlmCisgIHRoZSBGVFAgY29ubmVjdGlvbiBmYWlsZWQgdG8gZml4IGEgUmVzb3VyY2VXYXJuaW5nLgorCistIElzc3VlICMyMzQwMDogUmFpc2Ugc2FtZSBleGNlcHRpb24gb24gYm90aCBQeXRob24gMiBhbmQgMyBpZiBzZW1fb3BlbiBpcyBub3QKKyAgYXZhaWxhYmxlLiAgUGF0Y2ggYnkgRGF2aW4gUG90dHMuCisKKy0gSXNzdWUgIzE1MTMzOiBfdGtpbnRlci50a2FwcC5nZXRib29sZWFuKCkgbm93IHN1cHBvcnRzIFRjbF9PYmogYW5kIGFsd2F5cworICByZXR1cm5zIGJvb2wuICB0a2ludGVyLkJvb2xlYW5WYXIgbm93IHZhbGlkYXRlcyBpbnB1dCB2YWx1ZXMgKGFjY2VwdGVkIGJvb2wsCisgIGludCwgc3RyLCBhbmQgVGNsX09iaikuICB0a2ludGVyLkJvb2xlYW5WYXIuZ2V0KCkgbm93IGFsd2F5cyByZXR1cm5zIGJvb2wuCisKKy0gSXNzdWUgIzIzMzM4OiBGaXhlZCBmb3JtYXR0aW5nIGN0eXBlcyBlcnJvciBtZXNzYWdlcyBvbiBDeWd3aW4uCisgIFBhdGNoIGJ5IE1ha290byBLYXRvLgorCistIElzc3VlICMxNjg0MDogVGtpbnRlciBub3cgc3VwcG9ydHMgNjQtYml0IGludGVnZXJzIGFkZGVkIGluIFRjbCA4LjQgYW5kCisgIGFyYml0cmFyeSBwcmVjaXNpb24gaW50ZWdlcnMgYWRkZWQgaW4gVGNsIDguNS4KKworLSBJc3N1ZSAjMjM4MzQ6IEZpeCBzb2NrZXQuc2VuZHRvKCksIHVzZSB0aGUgQyBQeV9zc2l6ZV90IHR5cGUgdG8gc3RvcmUgdGhlCisgIHJlc3VsdCBvZiBzZW5kdG8oKSBpbnN0ZWFkIG9mIHRoZSBDIGludCB0eXBlLgorCistIElzc3VlICMyMTUyNjogVGtpbnRlciBub3cgc3VwcG9ydHMgbmV3IGJvb2xlYW4gdHlwZSBpbiBUY2wgOC41LgorCistIElzc3VlICMyMzgzODogbGluZWNhY2hlIG5vdyBjbGVhcnMgdGhlIGNhY2hlIGFuZCByZXR1cm5zIGFuIGVtcHR5IHJlc3VsdCBvbgorICBNZW1vcnlFcnJvci4KKworLSBJc3N1ZSAjMTg0NzM6IEZpeGVkIDJ0bzMgYW5kIDN0bzIgY29tcGF0aWJsZSBwaWNrbGUgbWFwcGluZ3MuICBGaXhlZAorICBhbWJpZ2lvdXMgcmV2ZXJzZSBtYXBwaW5ncy4gIEFkZGVkIG1hbnkgbmV3IG1hcHBpbmdzLiAgSW1wb3J0IG1hcHBpbmcgaXMgbm8KKyAgbG9uZ2VyIGFwcGxpZWQgdG8gbW9kdWxlcyBhbHJlYWR5IG1hcHBlZCB3aXRoIGZ1bGwgbmFtZSBtYXBwaW5nLgorCistIElzc3VlICMyMzc0NTogVGhlIG5ldyBlbWFpbCBoZWFkZXIgcGFyc2VyIG5vdyBoYW5kbGVzIGR1cGxpY2F0ZSBNSU1FCisgIHBhcmFtZXRlciBuYW1lcyB3aXRob3V0IGVycm9yLCBzaW1pbGFyIHRvIGhvdyBnZXRfcGFyYW0gYmVoYXZlcy4KKworLSBJc3N1ZSAjMjM3OTI6IElnbm9yZSBLZXlib2FyZEludGVycnVwdCB3aGVuIHRoZSBweWRvYyBwYWdlciBpcyBhY3RpdmUuCisgIFRoaXMgbWltaWNzIHRoZSBiZWhhdmlvciBvZiB0aGUgc3RhbmRhcmQgdW5peCBwYWdlcnMsIGFuZCBwcmV2ZW50cworICBwaXBlcGFnZXIgZnJvbSBzaHV0dGluZyBkb3duIHdoaWxlIHRoZSBwYWdlciBpdHNlbGYgaXMgc3RpbGwgcnVubmluZy4KKworLSBJc3N1ZSAjMjM3NDI6IG50cGF0aC5leHBhbmR2YXJzKCkgbm8gbG9uZ2VyIGxvc2VzIHVuYmFsYW5jZWQgc2luZ2xlIHF1b3Rlcy4KKworLSBJc3N1ZSAjMjE4MDI6IFRoZSByZWFkZXIgaW4gQnVmZmVyZWRSV1BhaXIgbm93IGlzIGNsb3NlZCBldmVuIHdoZW4gY2xvc2luZworICB3cml0ZXIgZmFpbGVkIGluIEJ1ZmZlcmVkUldQYWlyLmNsb3NlKCkuCisKKy0gSXNzdWUgIzIzNjcxOiBzdHJpbmcuVGVtcGxhdGUgbm93IGFsbG93cyB0byBzcGVjaWZ5IHRoZSAic2VsZiIgcGFyYW1ldGVyIGFzCisgIGtleXdvcmQgYXJndW1lbnQuICBzdHJpbmcuRm9ybWF0dGVyIG5vdyBhbGxvd3MgdG8gc3BlY2lmeSB0aGUgInNlbGYiIGFuZAorICB0aGUgImZvcm1hdF9zdHJpbmciIHBhcmFtZXRlcnMgYXMga2V5d29yZCBhcmd1bWVudHMuCisKKy0gSXNzdWUgIzIxNTYwOiBBbiBhdHRlbXB0IHRvIHdyaXRlIGEgZGF0YSBvZiB3cm9uZyB0eXBlIG5vIGxvbmdlciBjYXVzZQorICBHemlwRmlsZSBjb3JydXB0aW9uLiAgT3JpZ2luYWwgcGF0Y2ggYnkgV29sZmdhbmcgTWFpZXIuCisKKy0gSXNzdWUgIzIzNjQ3OiBJbmNyZWFzZSBpbXBhbGliJ3MgTUFYTElORSB0byBhY2NvbW1vZGF0ZSBtb2Rlcm4gbWFpbGJveCBzaXplcy4KKworLSBJc3N1ZSAjMjM1Mzk6IElmIGJvZHkgaXMgTm9uZSwgaHR0cC5jbGllbnQuSFRUUENvbm5lY3Rpb24ucmVxdWVzdCBub3cgc2V0cworICBDb250ZW50LUxlbmd0aCB0byAwIGZvciBQVVQsIFBPU1QsIGFuZCBQQVRDSCBoZWFkZXJzIHRvIGF2b2lkIDQxMSBlcnJvcnMgZnJvbQorICBzb21lIHdlYiBzZXJ2ZXJzLgorCistIElzc3VlICMyMjM1MTogVGhlIG5udHBsaWIuTk5UUCBjb25zdHJ1Y3RvciBubyBsb25nZXIgbGVhdmVzIHRoZSBjb25uZWN0aW9uCisgIGFuZCBzb2NrZXQgb3BlbiB1bnRpbCB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IgY2xlYW5zIHRoZW0gdXAuICBQYXRjaCBieQorICBNYXJ0aW4gUGFudGVyLgorCistIElzc3VlICMyMzEzNjogX3N0cnB0aW1lIG5vdyB1bmlmb3JtbHkgaGFuZGxlcyBhbGwgZGF5cyBpbiB3ZWVrIDAsIGluY2x1ZGluZworICBEZWMgMzAgb2YgcHJldmlvdXMgeWVhci4gIEJhc2VkIG9uIHBhdGNoIGJ5IEppbSBDYXJyb2xsLgorCistIElzc3VlICMyMzcwMDogSXRlcmF0b3Igb2YgTmFtZWRUZW1wb3JhcnlGaWxlIG5vdyBrZWVwcyBhIHJlZmVyZW5jZSB0bworICBOYW1lZFRlbXBvcmFyeUZpbGUgaW5zdGFuY2UuICBQYXRjaCBieSBCb2h1c2xhdiBLYWJyZGEuCisKKy0gSXNzdWUgIzIyOTAzOiBUaGUgZmFrZSB0ZXN0IGNhc2UgY3JlYXRlZCBieSB1bml0dGVzdC5sb2FkZXIgd2hlbiBpdCBmYWlscworICBpbXBvcnRpbmcgYSB0ZXN0IG1vZHVsZSBpcyBub3cgcGlja2xhYmxlLgorCistIElzc3VlICMyMzU2ODogQWRkIHJkaXZtb2Qgc3VwcG9ydCB0byBNYWdpY01vY2soKSBvYmplY3RzLgorICBQYXRjaCBieSBIw6VrYW4gTMO2dmRhaGwuCisKKy0gSXNzdWUgIzIzMTM4OiBGaXhlZCBwYXJzaW5nIGNvb2tpZXMgd2l0aCBhYnNlbnQga2V5cyBvciB2YWx1ZXMgaW4gY29va2llamFyLgorICBQYXRjaCBieSBEZW1pYW4gQnJlY2h0LgorCistIElzc3VlICMyMzA1MTogbXVsdGlwcm9jZXNzaW5nLlBvb2wgbWV0aG9kcyBpbWFwKCkgYW5kIGltYXBfdW5vcmRlcmVkKCkgbm93CisgIGhhbmRsZSBleGNlcHRpb25zIHJhaXNlZCBieSBhbiBpdGVyYXRvci4gIFBhdGNoIGJ5IEFsb24gRGlhbWFudCBhbmQgRGF2aW4KKyAgUG90dHMuCisKKy0gSXNzdWUgIzIyOTI4OiBEaXNhYmxlZCBIVFRQIGhlYWRlciBpbmplY3Rpb25zIGluIGh0dHAuY2xpZW50LgorICBPcmlnaW5hbCBwYXRjaCBieSBEZW1pYW4gQnJlY2h0LgorCistIElzc3VlICMyMzYxNTogTW9kdWxlcyBiejIsIHRhcmZpbGUgYW5kIHRva2VuaXplIG5vdyBjYW4gYmUgcmVsb2FkZWQgd2l0aAorICBpbXAucmVsb2FkKCkuICBQYXRjaCBieSBUaG9tYXMgS2x1eXZlci4KKworLSBJc3N1ZSAjMjM0NzY6IEluIHRoZSBzc2wgbW9kdWxlLCBlbmFibGUgT3BlblNTTCdzIFg1MDlfVl9GTEFHX1RSVVNURURfRklSU1QKKyAgZmxhZyBvbiBjZXJ0aWZpY2F0ZSBzdG9yZXMgd2hlbiBpdCBpcyBhdmFpbGFibGUuCisKKy0gSXNzdWUgIzIzNTc2OiBBdm9pZCBzdGFsbGluZyBpbiBTU0wgcmVhZHMgd2hlbiBFT0YgaGFzIGJlZW4gcmVhY2hlZCBpbiB0aGUKKyAgU1NMIGxheWVyIGJ1dCB0aGUgdW5kZXJseWluZyBjb25uZWN0aW9uIGhhc24ndCBiZWVuIGNsb3NlZC4KKworLSBJc3N1ZSAjMjM1MDQ6IEFkZGVkIGFuIF9fYWxsX18gdG8gdGhlIHR5cGVzIG1vZHVsZS4KKworLSBJc3N1ZSAjMjAyMDQ6IEFkZGVkIHRoZSBfX21vZHVsZV9fIGF0dHJpYnV0ZSB0byBfdGtpbnRlciBjbGFzc2VzLgorCistIElzc3VlICMyMzUyMTogQ29ycmVjdGVkIHB1cmUgcHl0aG9uIGltcGxlbWVudGF0aW9uIG9mIHRpbWVkZWx0YSBkaXZpc2lvbi4KKworICogRWxpbWluYXRlZCBPdmVyZmxvd0Vycm9yIGZyb20gdGltZWRlbHRhICogZmxvYXQgZm9yIHNvbWUgZmxvYXRzOworICogQ29ycmVjdGVkIHJvdW5kaW5nIGluIHRpbWVkbHRhIHRydWUgZGl2aXNpb24uCisKKy0gSXNzdWUgIzIxNjE5OiBQb3BlbiBvYmplY3RzIG5vIGxvbmdlciBsZWF2ZSBhIHpvbWJpZSBhZnRlciBleGl0IGluIHRoZSB3aXRoCisgIHN0YXRlbWVudCBpZiB0aGUgcGlwZSB3YXMgYnJva2VuLiAgUGF0Y2ggYnkgTWFydGluIFBhbnRlci4KKworLSBJc3N1ZSAjNjYzOTogTW9kdWxlLWxldmVsIHR1cnRsZSBmdW5jdGlvbnMgbm8gbG9uZ2VyIHJhaXNlIFRjbEVycm9yIGFmdGVyCisgIGNsb3NpbmcgdGhlIHdpbmRvdy4KKworLSBJc3N1ZXMgIzgxNDI1MywgIzkxNzk6IFdhcm5pbmdzIG5vdyBhcmUgcmFpc2VkIHdoZW4gZ3JvdXAgcmVmZXJlbmNlcyBhbmQKKyAgY29uZGl0aW9uYWwgZ3JvdXAgcmVmZXJlbmNlcyBhcmUgdXNlZCBpbiBsb29rYmVoaW5kIGFzc2VydGlvbnMgaW4gcmVndWxhcgorICBleHByZXNzaW9ucy4KKworLSBJc3N1ZSAjMjMyMTU6IE11bHRpYnl0ZSBjb2RlY3Mgd2l0aCBjdXN0b20gZXJyb3IgaGFuZGxlcnMgdGhhdCBpZ25vcmVzIGVycm9ycworICBjb25zdW1lZCB0b28gbXVjaCBtZW1vcnkgYW5kIHJhaXNlZCBTeXN0ZW1FcnJvciBvciBNZW1vcnlFcnJvci4KKyAgT3JpZ2luYWwgcGF0Y2ggYnkgQWxla3NpIFRvcmhhbW8uCisKKy0gSXNzdWUgIzU3MDA6IGlvLkZpbGVJTygpIGNhbGxlZCBmbHVzaCgpIGFmdGVyIGNsb3NpbmcgdGhlIGZpbGUuCisgIGZsdXNoKCkgd2FzIG5vdCBjYWxsZWQgaW4gY2xvc2UoKSBpZiBjbG9zZWZkPUZhbHNlLgorCistIElzc3VlICMyMzM3NDogRml4ZWQgcHlkb2MgZmFpbHVyZSB3aXRoIG5vbi1BU0NJSSBmaWxlcyB3aGVuIHN0ZG91dCBlbmNvZGluZworICBkaWZmZXJzIGZyb20gZmlsZSBzeXN0ZW0gZW5jb2RpbmcgKGUuZy4gb24gTWFjIE9TKS4KKworLSBJc3N1ZSAjMjM0ODE6IFJlbW92ZSBSQzQgZnJvbSB0aGUgU1NMIG1vZHVsZSdzIGRlZmF1bHQgY2lwaGVyIGxpc3QuCisKKy0gSXNzdWUgIzIxNTQ4OiBGaXggcHlkb2Muc3lub3BzaXMoKSBhbmQgcHlkb2MuYXByb3BvcygpIG9uIG1vZHVsZXMgd2l0aCBlbXB0eQorICBkb2NzdHJpbmdzLgorCistIElzc3VlICMyMjg4NTogRml4ZWQgYXJiaXRyYXJ5IGNvZGUgZXhlY3V0aW9uIHZ1bG5lcmFiaWxpdHkgaW4gdGhlIGRibS5kdW1iCisgIG1vZHVsZS4gIE9yaWdpbmFsIHBhdGNoIGJ5IENsYXVkaXUgUG9wYS4KKworLSBJc3N1ZSAjMjMxNDY6IEZpeCBtaXNoYW5kbGluZyBvZiBhYnNvbHV0ZSBXaW5kb3dzIHBhdGhzIHdpdGggZm9yd2FyZAorICBzbGFzaGVzIGluIHBhdGhsaWIuCisKKy0gSXNzdWUgIzIzNDIxOiBGaXhlZCBjb21wcmVzc2lvbiBpbiB0YXJmaWxlIENMSS4gIFBhdGNoIGJ5IHdkdjQ3NThoLgorCiAtIElzc3VlICMyMzM2NzogRml4IHBvc3NpYmxlIG92ZXJmbG93cyBpbiB0aGUgdW5pY29kZWRhdGEgbW9kdWxlLgogCiAtIElzc3VlICMyMzM2MTogRml4IHBvc3NpYmxlIG92ZXJmbG93IGluIFdpbmRvd3Mgc3VicHJvY2VzcyBjcmVhdGlvbiBjb2RlLgogCi0tIElzc3VlICMyMzM2MzogRml4IHBvc3NpYmxlIG92ZXJmbG93IGluIGl0ZXJ0b29scy5wZXJtdXRhdGlvbnMuCistIElzc3VlICMyMzgwMTogRml4IGlzc3VlIHdoZXJlIGNnaS5GaWVsZFN0b3JhZ2UgZGlkIG5vdCBhbHdheXMgaWdub3JlIHRoZQorICBlbnRpcmUgcHJlYW1ibGUgdG8gYSBtdWx0aXBhcnQgYm9keS4KIAotLSBJc3N1ZSAjMjMzNjQ6IEZpeCBwb3NzaWJsZSBvdmVyZmxvdyBpbiBpdGVydG9vbHMucHJvZHVjdC4KKy0gSXNzdWUgIzIzMzEwOiBGaXggTWFnaWNNb2NrJ3MgaW5pdGlhbGl6ZXIgdG8gd29yayB3aXRoIF9fbWV0aG9kc19fLCBqdXN0CisgIGxpa2UgY29uZmlndXJlX21vY2soKS4gIFBhdGNoIGJ5IEthc2lhIEphY2hpbS4KIAotLSBJc3N1ZSAjMjMzNjk6IEZpeGVkIHBvc3NpYmxlIGludGVnZXIgb3ZlcmZsb3cgaW4KLSAgX2pzb24uZW5jb2RlX2Jhc2VzdHJpbmdfYXNjaWkuCistIGFzeW5jaW86IE5ldyBldmVudCBsb29wIEFQSXM6IHNldF90YXNrX2ZhY3RvcnkoKSBhbmQgZ2V0X3Rhc2tfZmFjdG9yeSgpLgogCi0tIElzc3VlICMyMzM2NjogRml4ZWQgcG9zc2libGUgaW50ZWdlciBvdmVyZmxvdyBpbiBpdGVydG9vbHMuY29tYmluYXRpb25zLgorLSBhc3luY2lvOiBhc3luYygpIGZ1bmN0aW9uIGlzIGRlcHJlY2F0ZWQgaW4gZmF2b3VyIG9mIGVuc3VyZV9mdXR1cmUoKS4KIAotLSBJc3N1ZSAjMjMzNjU6IEZpeGVkIHBvc3NpYmxlIGludGVnZXIgb3ZlcmZsb3cgaW4KLSAgaXRlcnRvb2xzLmNvbWJpbmF0aW9uc193aXRoX3JlcGxhY2VtZW50LgorLSBJc3N1ZSAjMjM4OTg6IEZpeCBpbnNwZWN0LmNsYXNzaWZ5X2NsYXNzX2F0dHJzKCkgdG8gc3VwcG9ydCBhdHRyaWJ1dGVzCisgIHdpdGggb3ZlcmxvYWRlZCBfX2VxX18gYW5kIF9fYm9vbF9fLiAgUGF0Y2ggYnkgTWlrZSBCYXllci4KKworLSBJc3N1ZSAjMjQyOTg6IEZpeCBpbnNwZWN0LnNpZ25hdHVyZSgpIHRvIGNvcnJlY3RseSB1bndyYXAgd3JhcHBlcnMKKyAgYXJvdW5kIGJvdW5kIG1ldGhvZHMuCisKKy0gSXNzdWUgIzIzNTcyOiBGaXhlZCBmdW5jdG9vbHMuc2luZ2xlZGlzcGF0Y2ggb24gY2xhc3NlcyB3aXRoIGZhbHN5CisgIG1ldGFjbGFzc2VzLiAgUGF0Y2ggYnkgRXRoYW4gRnVybWFuLgorCitJRExFCistLS0tCisKKy0gSXNzdWUgMTUzNDg6IFN0b3AgdGhlIGRlYnVnZ2VyIGVuZ2luZSAobm9ybWFsbHkgaW4gYSB1c2VyIHByb2Nlc3MpCisgIGJlZm9yZSBjbG9zaW5nIHRoZSBkZWJ1Z2dlciB3aW5kb3cgKHJ1bm5pbmcgaW4gdGhlIElETEUgcHJvY2VzcykuCisgIFRoaXMgcHJldmVudHMgdGhlIFJ1bnRpbWVFcnJvcnMgdGhhdCB3ZXJlIGJlaW5nIGNhdWdodCBhbmQgaWdub3JlZC4KKworLSBJc3N1ZSAjMjQ0NTU6IFByZXZlbnQgSURMRSBmcm9tIGhhbmdpbmcgd2hlbiBhKSBjbG9zaW5nIHRoZSBzaGVsbCB3aGlsZSB0aGUKKyAgZGVidWdnZXIgaXMgYWN0aXZlICgxNTM0Nyk7IGIpIGNsb3NpbmcgdGhlIGRlYnVnZ2VyIHdpdGggdGhlIFtYXSBidXR0b24KKyAgKDE1MzQ4KTsgYW5kIGMpIGFjdGl2YXRpbmcgdGhlIGRlYnVnZ2VyIHdoZW4gYWxyZWFkeSBhY3RpdmUgKDI0NDU1KS4KKyAgVGhlIHBhdGNoIGJ5IE1hcmsgUm9zZW1hbiBkb2VzIHRoaXMgYnkgbWFraW5nIHR3byBjaGFuZ2VzLgorICAxLiBTdXNwZW5kIGFuZCByZXN1bWUgdGhlIGd1aS5pbnRlcmFjdGlvbiBtZXRob2Qgd2l0aCB0aGUgdGNsIHZ3YWl0CisgIG1lY2hhbmlzbSBpbnRlbmRlZCBmb3IgdGhpcyBwdXJwb3NlIChpbnN0ZWFkIG9mIHJvb3QubWFpbmxvb3AgJiAucXVpdCkuCisgIDIuIEluIGd1aS5ydW4sIGFsbG93IGFueSBleGlzdGluZyBpbnRlcmFjdGlvbiB0byB0ZXJtaW5hdGUgZmlyc3QuCisKKy0gQ2hhbmdlICdUaGUgcHJvZ3JhbScgdG8gJ1lvdXIgcHJvZ3JhbScgaW4gYW4gSURMRSAna2lsbCBwcm9ncmFtPycgbWVzc2FnZQorICB0byBtYWtlIGl0IGNsZWFyZXIgdGhhdCB0aGUgcHJvZ3JhbSByZWZlcnJlZCB0byBpcyB0aGUgY3VycmVudGx5IHJ1bm5pbmcKKyAgdXNlciBwcm9ncmFtLCBub3QgSURMRSBpdHNlbGYuCisKKy0gSXNzdWUgIzI0NzUwOiBJbXByb3ZlIHRoZSBhcHBlYXJhbmNlIG9mIHRoZSBJRExFIGVkaXRvciB3aW5kb3cgc3RhdHVzIGJhci4KKyAgUGF0Y2ggYnkgTWFyayBSb3NlbWFuLgorCistIElzc3VlICMyNTMxMzogQ2hhbmdlIHRoZSBoYW5kbGluZyBvZiBuZXcgYnVpbHQtaW4gdGV4dCBjb2xvciB0aGVtZXMgdG8gYmV0dGVyCisgIGFkZHJlc3MgdGhlIGNvbXBhdGliaWxpdHkgcHJvYmxlbSBpbnRyb2R1Y2VkIGJ5IHRoZSBhZGRpdGlvbiBvZiBJRExFIERhcmsuCisgIENvbnNpc3RlbnRseSB1c2UgdGhlIHJldmlzZWQgaWRsZUNvbmYuQ3VycmVudFRoZW1lIGV2ZXJ5d2hlcmUgaW4gaWRsZWxpYi4KKworLSBJc3N1ZSAjMjQ3ODI6IEV4dGVuc2lvbiBjb25maWd1cmF0aW9uIGlzIG5vdyBhIHRhYiBpbiB0aGUgSURMRSBQcmVmZXJlbmNlcworICBkaWFsb2cgcmF0aGVyIHRoYW4gYSBzZXBhcmF0ZSBkaWFsb2cuICAgVGhlIGZvcm1lciB0YWJzIGFyZSBub3cgYSBzb3J0ZWQKKyAgbGlzdC4gIFBhdGNoIGJ5IE1hcmsgUm9zZW1hbi4KKworLSBJc3N1ZSAjMjI3MjY6IFJlLWFjdGl2YXRlIHRoZSBjb25maWcgZGlhbG9nIGhlbHAgYnV0dG9uIHdpdGggc29tZSBjb250ZW50CisgIGFib3V0IHRoZSBvdGhlciBidXR0b25zIGFuZCB0aGUgbmV3IElETEUgRGFyayB0aGVtZS4KKworLSBJc3N1ZSAjMjQ4MjA6IElETEUgbm93IGhhcyBhbiAnSURMRSBEYXJrJyBidWlsdC1pbiB0ZXh0IGNvbG9yIHRoZW1lLgorICBJdCBpcyBtb3JlIG9yIGxlc3MgSURMRSBDbGFzc2ljIGludmVydGVkLCB3aXRoIGEgY29iYWx0IGJsdWUgYmFja2dyb3VuZC4KKyAgU3RyaW5ncywgY29tbWVudHMsIGtleXdvcmRzLCAuLi4gYXJlIHN0aWxsIGdyZWVuLCByZWQsIG9yYW5nZSwgLi4uIC4KKyAgVG8gdXNlIGl0IHdpdGggSURMRXMgcmVsZWFzZWQgYmVmb3JlIE5vdmVtYmVyIDIwMTUsIGhpdCB0aGUKKyAgJ1NhdmUgYXMgTmV3IEN1c3RvbSBUaGVtZScgYnV0dG9uIGFuZCBlbnRlciBhIG5ldyBuYW1lLAorICBzdWNoIGFzICdDdXN0b20gRGFyaycuICBUaGUgY3VzdG9tIHRoZW1lIHdpbGwgd29yayB3aXRoIGFueSBJRExFCisgIHJlbGVhc2UsIGFuZCBjYW4gYmUgbW9kaWZpZWQuCisKKy0gSXNzdWUgIzI1MjI0OiBSRUFETUUudHh0IGlzIG5vdyBhbiBpZGxlbGliIGluZGV4IGZvciBJRExFIGRldmVsb3BlcnMgYW5kCisgIGN1cmlvdXMgdXNlcnMuICBUaGUgcHJldmlvdXMgdXNlciBjb250ZW50IGlzIG5vdyBpbiB0aGUgSURMRSBkb2MgY2hhcHRlci4KKyAgJ0lETEUnIG5vdyBtZWFucyAnSW50ZWdyYXRlZCBEZXZlbG9wbWVudCBhbmQgTGVhcm5pbmcgRW52aXJvbm1lbnQnLgorCistIElzc3VlICMyNDgyMDogVXNlcnMgY2FuIG5vdyBzZXQgYnJlYWtwb2ludCBjb2xvcnMgaW4KKyAgU2V0dGluZ3MgLT4gQ3VzdG9tIEhpZ2hsaWdodGluZy4gIE9yaWdpbmFsIHBhdGNoIGJ5IE1hcmsgUm9zZW1hbi4KKworLSBJc3N1ZSAjMjQ5NzI6IEluYWN0aXZlIHNlbGVjdGlvbiBiYWNrZ3JvdW5kIG5vdyBtYXRjaGVzIGFjdGl2ZSBzZWxlY3Rpb24KKyAgYmFja2dyb3VuZCwgYXMgY29uZmlndXJlZCBieSB1c2Vycywgb24gYWxsIHN5c3RlbXMuICBGb3VuZCBpdGVtcyBhcmUgbm93CisgIGFsd2F5cyBoaWdobGlnaHRlZCBvbiBXaW5kb3dzLiAgSW5pdGlhbCBwYXRjaCBieSBNYXJrIFJvc2VtYW4uCisKKy0gSXNzdWUgIzI0NTcwOiBJZGxlOiBtYWtlIGNhbGx0aXAgYW5kIGNvbXBsZXRpb24gYm94ZXMgYXBwZWFyIG9uIE1hY3MKKyAgYWZmZWN0ZWQgYnkgYSB0ayByZWdyZXNzaW9uLiAgSW5pdGlhbCBwYXRjaCBieSBNYXJrIFJvc2VtYW4uCisKKy0gSXNzdWUgIzI0OTg4OiBJZGxlIFNjcm9sbGVkTGlzdCBjb250ZXh0IG1lbnVzICh1c2VkIGluIGRlYnVnZ2VyKQorICBub3cgd29yayBvbiBNYWMgQXF1YS4gIFBhdGNoIGJ5IE1hcmsgUm9zZW1hbi4KKworLSBJc3N1ZSAjMjQ4MDE6IE1ha2UgcmlnaHQtY2xpY2sgZm9yIGNvbnRleHQgbWVudSB3b3JrIG9uIE1hYyBBcXVhLgorICBQYXRjaCBieSBNYXJrIFJvc2VtYW4uCisKKy0gSXNzdWUgIzI1MTczOiBBc3NvY2lhdGUgdGtpbnRlciBtZXNzYWdlYm94ZXMgd2l0aCBhIHNwZWNpZmljIHdpZGdldC4KKyAgRm9yIE1hYyBPU1gsIG1ha2UgdGhlbSBhICdzaGVldCcuICBQYXRjaCBieSBNYXJrIFJvc2VtYW4uCisKKy0gSXNzdWUgIzI1MTk4OiBFbmhhbmNlIHRoZSBpbml0aWFsIGh0bWwgdmlld2VyIG5vdyB1c2VkIGZvciBJZGxlIEhlbHAuCisgICogUHJvcGVybHkgaW5kZW50IGZpeGVkLXBpdGNoIHRleHQgKHBhdGNoIGJ5IE1hcmsgUm9zZW1hbikuCisgICogR2l2ZSBjb2RlIHNuaXBwZXQgYSB2ZXJ5IFNwaGlueC1saWtlIGxpZ2h0IGJsdWVpc2gtZ3JheSBiYWNrZ3JvdW5kLgorICAqIFJlLXVzZSBpbml0aWFsIHdpZHRoIGFuZCBoZWlnaHQgc2V0IGJ5IHVzZXJzIGZvciBzaGVsbCBhbmQgZWRpdG9yLgorICAqIFdoZW4gdGhlIFRhYmxlIG9mIENvbnRlbnRzIChUT0MpIG1lbnUgaXMgdXNlZCwgcHV0IHRoZSBzZWN0aW9uIGhlYWRlcgorICBhdCB0aGUgdG9wIG9mIHRoZSBzY3JlZW4uCisKKy0gSXNzdWUgIzI1MjI1OiBDb25kZW5zZSBhbmQgcmV3cml0ZSBJZGxlIGRvYyBzZWN0aW9uIG9uIHRleHQgY29sb3JzLgorCistIElzc3VlICMyMTk5NTogRXhwbGFpbiBzb21lIGRpZmZlcmVuY2VzIGJldHdlZW4gSURMRSBhbmQgY29uc29sZSBQeXRob24uCisKKy0gSXNzdWUgIzIyODIwOiBFeHBsYWluIG5lZWQgZm9yICpwcmludCogd2hlbiBydW5uaW5nIGZpbGUgZnJvbSBJZGxlIGVkaXRvci4KKworLSBJc3N1ZSAjMjUyMjQ6IERvYzogYXVnbWVudCBJZGxlIGZlYXR1cmUgbGlzdCBhbmQgbm8tc3VicHJvY2VzcyBzZWN0aW9uLgorCistIElzc3VlICMyNTIxOTogVXBkYXRlIGRvYyBmb3IgSWRsZSBjb21tYW5kIGxpbmUgb3B0aW9ucy4KKyAgU29tZSB3ZXJlIG1pc3NpbmcgYW5kIG5vdGVzIHdlcmUgbm90IGNvcnJlY3QuCisKKy0gSXNzdWUgIzI0ODYxOiBNb3N0IG9mIGlkbGVsaWIgaXMgcHJpdmF0ZSBhbmQgc3ViamVjdCB0byBjaGFuZ2UuCisgIFVzZSBpZGxlaWIuaWRsZS4qIHRvIHN0YXJ0IElkbGUuIFNlZSBpZGxlbGliLl9faW5pdF9fLl9fZG9jX18uCisKKy0gSXNzdWUgIzI1MTk5OiBJZGxlOiBhZGQgc3luY2hyb25pemF0aW9uIGNvbW1lbnRzIGZvciBmdXR1cmUgbWFpbnRhaW5lcnMuCisKKy0gSXNzdWUgIzE2ODkzOiBSZXBsYWNlIGhlbHAudHh0IHdpdGggaGVscC5odG1sIGZvciBJZGxlIGRvYyBkaXNwbGF5LgorICBUaGUgbmV3IGlkbGVsaWIvaGVscC5odG1sIGlzIHJzdHJpcHBlZCBEb2MvYnVpbGQvaHRtbC9saWJyYXJ5L2lkbGUuaHRtbC4KKyAgSXQgbG9va3MgYmV0dGVyIHRoYW4gaGVscC50eHQgYW5kIHdpbGwgYmV0dGVyIGRvY3VtZW50IElkbGUgYXMgcmVsZWFzZWQuCisgIFRoZSB0a2ludGVyIGh0bWwgdmlld2VyIHRoYXQgd29ya3MgZm9yIHRoaXMgZmlsZSB3YXMgd3JpdHRlbiBieSBNYXJrIFJvc2VtYW4uCisgIFRoZSBub3cgdW51c2VkIEVkaXRvcldpbmRvdy5IZWxwRGlhbG9nIGNsYXNzIGFuZCBoZWx0LnR4dCBmaWxlIGFyZSBkZXByZWNhdGVkLgorCistIElzc3VlICMyNDE5OTogRGVwcmVjYXRlIHVudXNlZCBpZGxlbGliLmlkbGV2ZXIgd2l0aCBwb3NzaWJsZSByZW1vdmFsIGluIDMuNi4KKworLSBJc3N1ZSAjMjQ3OTA6IFJlbW92ZSBleHRyYW5lb3VzIGNvZGUgKHdoaWNoIGFsc28gY3JlYXRlIDIgJiAzIGNvbmZsaWN0cykuCisKKy0gSXNzdWUgIzIzNjcyOiBBbGxvdyBJZGxlIHRvIGVkaXQgYW5kIHJ1biBmaWxlcyB3aXRoIGFzdHJhbCBjaGFycyBpbiBuYW1lLgorICBQYXRjaCBieSBNb2hkIFNhbmFkIFpha2kgUml6dmkuCisKKy0gSXNzdWUgMjQ3NDU6IElkbGUgZWRpdG9yIGRlZmF1bHQgZm9udC4gU3dpdGNoIGZyb20gQ291cmllciB0bworICBwbGF0Zm9ybS1zZW5zaXRpdmUgVGtGaXhlZEZvbnQuICBUaGlzIHNob3VsZCBub3QgYWZmZWN0IGN1cnJlbnQgY3VzdG9taXplZAorICBmb250IHNlbGVjdGlvbnMuICBJZiB0aGVyZSBpcyBhIHByb2JsZW0sIGVkaXQgJEhPTUUvLmlkbGVyYy9jb25maWctbWFpbi5jZmcKKyAgYW5kIHJlbW92ZSAnZm9udHh4eCcgZW50cmllcyBmcm9tIFtFZGl0b3IgV2luZG93XS4gIFBhdGNoIGJ5IE1hcmsgUm9zZW1hbi4KKworLSBJc3N1ZSAjMjExOTI6IElkbGUgZWRpdG9yLiBXaGVuIGEgZmlsZSBpcyBydW4sIHB1dCBpdHMgbmFtZSBpbiB0aGUgcmVzdGFydCBiYXIuCisgIERvIG5vdCBwcmludCBmYWxzZSBwcm9tcHRzLiBPcmlnaW5hbCBwYXRjaCBieSBBZG5hbiBVbWVyLgorCistIElzc3VlICMxMzg4NDogSWRsZSBtZW51cy4gUmVtb3ZlIHRlYXJvZmYgbGluZXMuIFBhdGNoIGJ5IFJvZ2VyIFNlcnd5LgorCistIElzc3VlICMyMzE4NDogcmVtb3ZlIHVudXNlZCBuYW1lcyBhbmQgaW1wb3J0cyBpbiBpZGxlbGliLgorICBJbml0aWFsIHBhdGNoIGJ5IEFsIFN3ZWlnYXJ0LgorCitUZXN0cworLS0tLS0KKworLSBJc3N1ZSAjMjU2MTY6IFRlc3RzIGZvciBPcmRlcmVkRGljdCBhcmUgZXh0cmFjdGVkIGZyb20gdGVzdF9jb2xsZWN0aW9ucworICBpbnRvIHNlcGFyYXRlIGZpbGUgdGVzdF9vcmRlcmVkX2RpY3QuCisKKy0gSXNzdWUgIzI1MDk5OiBNYWtlIHRlc3RfY29tcGlsZWFsbCBub3QgZmFpbCB3aGVuIGFuIGVudHJ5IG9uIHN5cy5wYXRoIGNhbm5vdAorICBiZSB3cml0dGVuIHRvIChjb21tb25seSBzZWVuIGluIGFkbWluaXN0cmF0aXZlIGluc3RhbGxzIG9uIFdpbmRvd3MpLgorCistIElzc3VlICMyNDc1MTogV2hlbiBydW5uaW5nIHJlZ3J0ZXN0IHdpdGggdGhlIGBgLXdgYCBjb21tYW5kIGxpbmUgb3B0aW9uLAorICBhIHRlc3QgcnVuIGlzIG5vIGxvbmdlciBtYXJrZWQgYXMgYSBmYWlsdXJlIGlmIGFsbCB0ZXN0cyBzdWNjZWVkIHdoZW4KKyAgcmUtcnVuLgorCistIElzc3VlICMyMTUyMDogdGVzdF96aXBmaWxlIG5vIGxvbmdlciBmYWlscyBpZiB0aGUgd29yZCAnYmFkJyBhcHBlYXJzCisgIGFueXdoZXJlIGluIHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KKworLSBJc3N1ZSAjMjM3OTk6IEFkZGVkIHRlc3Quc3VwcG9ydC5zdGFydF90aHJlYWRzKCkgZm9yIHJ1bm5pbmcgYW5kCisgIGNsZWFuaW5nIHVwIG11bHRpcGxlIHRocmVhZHMuCisKKy0gSXNzdWUgIzIyMzkwOiB0ZXN0LnJlZ3J0ZXN0IG5vdyBlbWl0cyBhIHdhcm5pbmcgaWYgdGVtcG9yYXJ5IGZpbGVzIG9yCisgIGRpcmVjdG9yaWVzIGFyZSBsZWZ0IGFmdGVyIHJ1bm5pbmcgYSB0ZXN0LgorCistIElzc3VlICMyMzU4MzogQWRkZWQgdGVzdHMgZm9yIHN0YW5kYXJkIElPIHN0cmVhbXMgaW4gSURMRS4KKworQnVpbGQKKy0tLS0tCisKKy0gSXNzdWUgIzIzNDQ1OiBweWRlYnVnIGJ1aWxkcyBub3cgdXNlICJnY2MgLU9nIiB3aGVyZSBwb3NzaWJsZSwgdG8gbWFrZQorICB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgZmFzdGVyLgorCistIElzc3VlICMyNDYwMzogVXBkYXRlIFdpbmRvd3MgYnVpbGRzIHRvIHVzZSBPcGVuU1NMMS4wLjJkCisgIGFuZCBPUyBYIDEwLjUgaW5zdGFsbGVyIHRvIHVzZSBPcGVuU1NMIDEuMC4yZS4KIAogQyBBUEkKIC0tLS0tCiAKIC0gSXNzdWUgIzIzOTk4OiBQeUltcG9ydF9SZUluaXRMb2NrKCkgbm93IGNoZWNrcyBmb3IgbG9jayBhbGxvY2F0aW9uIGVycm9yCiAKK0RvY3VtZW50YXRpb24KKy0tLS0tLS0tLS0tLS0KIAotV2hhdCdzIE5ldyBpbiBQeXRob24gMy4zLjY/CistIElzc3VlICMxMjA2NzogUmV3cml0ZSBDb21wYXJpc29ucyBzZWN0aW9uIGluIHRoZSBFeHByZXNzaW9ucyBjaGFwdGVyIG9mIHRoZQorICBsYW5ndWFnZSByZWZlcmVuY2UuIFNvbWUgb2YgdGhlIGRldGFpbHMgb2YgY29tcGFyaW5nIG1peGVkIHR5cGVzIHdlcmUKKyAgaW5jb3JyZWN0IG9yIGFtYmlndW91cy4gTm90SW1wbGVtZW50ZWQgaXMgb25seSByZWxldmFudCBhdCBhIGxvd2VyIGxldmVsCisgIHRoYW4gdGhlIEV4cHJlc3Npb25zIGNoYXB0ZXIuIEFkZGVkIGRldGFpbHMgb2YgY29tcGFyaW5nIHJhbmdlKCkgb2JqZWN0cywKKyAgYW5kIGRlZmF1bHQgYmVoYXZpb3VyIGFuZCBjb25zaXN0ZW5jeSBzdWdnZXN0aW9ucyBmb3IgdXNlci1kZWZpbmVkIGNsYXNzZXMuCisgIFBhdGNoIGZyb20gQW5keSBNYWllci4KKworLSBJc3N1ZSAjMjQ5NTI6IENsYXJpZnkgdGhlIGRlZmF1bHQgc2l6ZSBhcmd1bWVudCBvZiBzdGFja19zaXplKCkgaW4KKyAgdGhlICJ0aHJlYWRpbmciIGFuZCAiX3RocmVhZCIgbW9kdWxlcy4gUGF0Y2ggZnJvbSBNYXR0aXAuCisKKy0gSXNzdWUgIzI0ODA4OiBVcGRhdGUgdGhlIHR5cGVzIG9mIHNvbWUgUHlUeXBlT2JqZWN0IGZpZWxkcy4gUGF0Y2ggYnkKKyAgSm9zZXBoIFdlc3Rvbi4KKworLSBJc3N1ZSAjMjI4MTI6IEZpeCB1bml0dGVzdCBkaXNjb3ZlcnkgZXhhbXBsZXMuCisgIFBhdGNoIGZyb20gUGFtIE1jQSdOdWx0eS4KKworLSBJc3N1ZSAjMjQxMjk6IENsYXJpZnkgdGhlIHJlZmVyZW5jZSBkb2N1bWVudGF0aW9uIGZvciBuYW1lIHJlc29sdXRpb24uCisgIFRoaXMgaW5jbHVkZXMgcmVtb3ZpbmcgdGhlIGFzc3VtcHRpb24gdGhhdCByZWFkZXJzIHdpbGwgYmUgZmFtaWxpYXIgd2l0aCB0aGUKKyAgbmFtZSByZXNvbHV0aW9uIHNjaGVtZSBQeXRob24gdXNlZCBwcmlvciB0byB0aGUgaW50cm9kdWN0aW9uIG9mIGxleGljYWwKKyAgc2NvcGluZyBmb3IgZnVuY3Rpb24gbmFtZXNwYWNlcy4gUGF0Y2ggYnkgSXZhbiBMZXZraXZza3lpLgorCistIElzc3VlICMyMDc2OTogSW1wcm92ZSByZWxvYWQoKSBkb2NzLiBQYXRjaCBieSBEb3JpYW4gUHVsYS4KKworLSBJc3N1ZSAjMjM1ODk6IFJlbW92ZSBkdXBsaWNhdGUgc2VudGVuY2UgZnJvbSB0aGUgRkFRLiAgUGF0Y2ggYnkgWW9uZ3poaSBQYW4uCisKKy0gSXNzdWUgIzI0NzI5OiBDb3JyZWN0IElPIHR1dG9yaWFsIHRvIG1hdGNoIGltcGxlbWVudGF0aW9uIHJlZ2FyZGluZworICBlbmNvZGluZyBwYXJhbWV0ZXIgdG8gb3BlbiBmdW5jdGlvbi4KKworLSBJc3N1ZSAjMjQzNTE6IENsYXJpZnkgd2hhdCBpcyBtZWFudCBieSAiaWRlbnRpZmllciIgaW4gdGhlIGNvbnRleHQgb2YKKyAgc3RyaW5nLlRlbXBsYXRlIGluc3RhbmNlcy4KKworLSBJc3N1ZSAjMjIxNTU6IEFkZCBGaWxlIEhhbmRsZXJzIHN1YnNlY3Rpb24gd2l0aCBjcmVhdGVmaWxlaGFuZGxlciB0byB0a2ludGVyCisgIGRvYy4gIFJlbW92ZSBvYnNvbGV0ZSBleGFtcGxlIGZyb20gRkFRLiAgUGF0Y2ggYnkgTWFydGluIFBhbnRlci4KKworLSBJc3N1ZSAjMjQwMjk6IERvY3VtZW50IHRoZSBuYW1lIGJpbmRpbmcgYmVoYXZpb3IgZm9yIHN1Ym1vZHVsZSBpbXBvcnRzLgorCistIElzc3VlICMyNDA3NzogRml4IHR5cG8gaW4gbWFuIHBhZ2UgZm9yIC1JIGNvbW1hbmQgb3B0aW9uOiAtcywgbm90IC1TLgorCitUb29scy9EZW1vcworLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMjU0NDA6IEZpeCBvdXRwdXQgb2YgcHl0aG9uLWNvbmZpZyAtLWV4dGVuc2lvbi1zdWZmaXguCisKKy0gSXNzdWUgIzIzMzMwOiBoMnB5IG5vdyBzdXBwb3J0cyBhcmJpdHJhcnkgZmlsZW5hbWVzIGluICNpbmNsdWRlLgorCistIElzc3VlICMyNDAzMTogbWFrZSBwYXRjaGNoZWNrIG5vdyBzdXBwb3J0cyBnaXQgY2hlY2tvdXRzLCB0b28uCisKK1dpbmRvd3MKKy0tLS0tLS0KKworLSBJc3N1ZSAjMjQzMDY6IFNldHMgY29tcG9uZW50IElEIGZvciBsYXVuY2hlciB0byBtYXRjaCAzLjUgYW5kIGxhdGVyCisgIHRvIGF2b2lkIGRvd25ncmFkaW5nLgorCistIElzc3VlICMyNTAyMjogUmVtb3ZlZCB2ZXJ5IG91dGRhdGVkIFBDL2V4YW1wbGVfbnQvIGRpcmVjdG9yeS4KKworCitXaGF0J3MgTmV3IGluIFB5dGhvbiAzLjQuMz8KID09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi0qUmVsZWFzZSBkYXRlOiAxMS1PY3QtMjAxNCoKK1JlbGVhc2UgZGF0ZTogMjAxNS0wMi0yMwogCiBDb3JlIGFuZCBCdWlsdGlucwogLS0tLS0tLS0tLS0tLS0tLS0KIAorLSBJc3N1ZSAjMjI3MzU6IEZpeCBtYW55IGVkZ2UgY2FzZXMgKGluY2x1ZGluZyBjcmFzaGVzKSBpbnZvbHZpbmcgY3VzdG9tIG1ybygpCisgIGltcGxlbWVudGF0aW9ucy4KKworLSBJc3N1ZSAjMjI4OTY6IEF2b2lkIHVzaW5nIFB5T2JqZWN0X0FzQ2hhckJ1ZmZlcigpLCBQeU9iamVjdF9Bc1JlYWRCdWZmZXIoKQorICBhbmQgUHlPYmplY3RfQXNXcml0ZUJ1ZmZlcigpLgorCistIElzc3VlICMyMTI5NTogUmV2ZXJ0IHNvbWUgY2hhbmdlcyAoaXNzdWUgIzE2Nzk1KSB0byBBU1QgbGluZSBudW1iZXJzIGFuZAorICBjb2x1bW4gb2Zmc2V0cyB0aGF0IGNvbnN0aXR1dGVkIGEgcmVncmVzc2lvbi4KKworLSBJc3N1ZSAjMjE0MDg6IFRoZSBkZWZhdWx0IF9fbmVfXygpIG5vdyByZXR1cm5zIE5vdEltcGxlbWVudGVkIGlmIF9fZXFfXygpCisgIHJldHVybmVkIE5vdEltcGxlbWVudGVkLiAgT3JpZ2luYWwgcGF0Y2ggYnkgTWFydGluIFBhbnRlci4KKworLSBJc3N1ZSAjMjMzMjE6IEZpeGVkIGEgY3Jhc2ggaW4gc3RyLmRlY29kZSgpIHdoZW4gZXJyb3IgaGFuZGxlciByZXR1cm5lZAorICByZXBsYWNtZW50IHN0cmluZyBsb25nZXIgdGhhbiBtYWlsZm9ybWVkIGlucHV0IGRhdGEuCisKKy0gSXNzdWUgIzIzMDQ4OiBGaXgganVtcGluZyBvdXQgb2YgYW4gaW5maW5pdGUgd2hpbGUgbG9vcCBpbiB0aGUgcGRiLgorCistIElzc3VlICMyMDMzNTogYnl0ZXMgY29uc3RydWN0b3Igbm93IHJhaXNlcyBUeXBlRXJyb3Igd2hlbiBlbmNvZGluZyBvciBlcnJvcnMKKyAgaXMgc3BlY2lmaWVkIHdpdGggbm9uLXN0cmluZyBhcmd1bWVudC4gIEJhc2VkIG9uIHBhdGNoIGJ5IFJlbmF1ZCBCbGFuY2guCisKKy0gSXNzdWUgIzIyMzM1OiBGaXggY3Jhc2ggd2hlbiB0cnlpbmcgdG8gZW5sYXJnZSBhIGJ5dGVhcnJheSB0byAweDdmZmZmZmZmCisgIGJ5dGVzIG9uIGEgMzItYml0IHBsYXRmb3JtLgorCistIElzc3VlICMyMjY1MzogRml4IGFuIGFzc2VydGlvbiBmYWlsdXJlIGluIGRlYnVnIG1vZGUgd2hlbiBkb2luZyBhIHJlZW50cmFudAorICBkaWN0IGluc2VydGlvbiBpbiBkZWJ1ZyBtb2RlLgorCiAtIElzc3VlICMyMjY0MzogRml4IGludGVnZXIgb3ZlcmZsb3cgaW4gVW5pY29kZSBjYXNlIG9wZXJhdGlvbnMgKHVwcGVyLCBsb3dlciwKICAgdGl0bGUsIHN3YXBjYXNlLCBjYXNlZm9sZCkuCiAKLS0gSXNzdWUgIzIyNTE4OiBGaXhlZCBpbnRlZ2VyIG92ZXJmbG93IGlzc3VlcyBpbiAiYmFja3NsYXNocmVwbGFjZSIsCistIElzc3VlICMyMjYwNDogRml4IGFzc2VydGlvbiBlcnJvciBpbiBkZWJ1ZyBtb2RlIHdoZW4gZGl2aWRpbmcgYSBjb21wbGV4CisgIG51bWJlciBieSAobmFuKzBqKS4KKworLSBJc3N1ZSAjMjI0NzA6IEZpeGVkIGludGVnZXIgb3ZlcmZsb3cgaXNzdWVzIGluICJiYWNrc2xhc2hyZXBsYWNlIiwKICAgInhtbGNoYXJyZWZyZXBsYWNlIiwgYW5kICJzdXJyb2dhdGVwYXNzIiBlcnJvciBoYW5kbGVycy4KIAogLSBJc3N1ZSAjMjI1MjA6IEZpeCBvdmVyZmxvdyBjaGVja2luZyB3aGVuIGdlbmVyYXRpbmcgdGhlIHJlcHIgb2YgYSB1bmljb2RlCkBAIC04MCwxMiArODkyLDQyOSBAQAogTGlicmFyeQogLS0tLS0tLQogCistIElzc3VlICMyMzM5OTogcHl2ZW52IGNyZWF0ZXMgcmVsYXRpdmUgc3ltbGlua3Mgd2hlcmUgcG9zc2libGUuCisKKy0gSXNzdWUgIzIzMDk5OiBDbG9zaW5nIGlvLkJ5dGVzSU8gd2l0aCBleHBvcnRlZCBidWZmZXIgaXMgcmVqZWN0ZWQgbm93IHRvCisgIHByZXZlbnQgY29ycnVwdGluZyBleHBvcnRlZCBidWZmZXIuCisKKy0gSXNzdWUgIzIzMzYzOiBGaXggcG9zc2libGUgb3ZlcmZsb3cgaW4gaXRlcnRvb2xzLnBlcm11dGF0aW9ucy4KKworLSBJc3N1ZSAjMjMzNjQ6IEZpeCBwb3NzaWJsZSBvdmVyZmxvdyBpbiBpdGVydG9vbHMucHJvZHVjdC4KKworLSBJc3N1ZSAjMjMzNjY6IEZpeGVkIHBvc3NpYmxlIGludGVnZXIgb3ZlcmZsb3cgaW4gaXRlcnRvb2xzLmNvbWJpbmF0aW9ucy4KKworLSBJc3N1ZSAjMjMzNjk6IEZpeGVkIHBvc3NpYmxlIGludGVnZXIgb3ZlcmZsb3cgaW4KKyAgX2pzb24uZW5jb2RlX2Jhc2VzdHJpbmdfYXNjaWkuCisKKy0gSXNzdWUgIzIzMzUzOiBGaXggdGhlIGV4Y2VwdGlvbiBoYW5kbGluZyBvZiBnZW5lcmF0b3JzIGluCisgIFB5RXZhbF9FdmFsRnJhbWVFeCgpLiBBdCBlbnRyeSwgc2F2ZSBvciBzd2FwIHRoZSBleGNlcHRpb24gc3RhdGUgZXZlbiBpZgorICBQeUV2YWxfRXZhbEZyYW1lRXgoKSBpcyBjYWxsZWQgd2l0aCB0aHJvd2ZsYWc9MC4gQXQgZXhpdCwgdGhlIGV4Y2VwdGlvbiBzdGF0ZQorICBpcyBub3cgYWx3YXlzIHJlc3RvcmVkIG9yIHN3YXBwZWQsIG5vdCBvbmx5IGlmIHdoeSBpcyBXSFlfWUlFTEQgb3IKKyAgV0hZX1JFVFVSTi4gUGF0Y2ggY28td3JpdHRlbiB3aXRoIEFudG9pbmUgUGl0cm91LgorCistIElzc3VlICMxODUxODogdGltZWl0IG5vdyByZWplY3RzIHN0YXRlbWVudHMgd2hpY2ggY2FuJ3QgYmUgY29tcGlsZWQgb3V0c2lkZQorICBhIGZ1bmN0aW9uIG9yIGEgbG9vcCAoZS5nLiAicmV0dXJuIiBvciAiYnJlYWsiKS4KKworLSBJc3N1ZSAjMjMwOTQ6IEZpeGVkIHJlYWRsaW5lIHdpdGggZnJhbWVzIGluIFB5dGhvbiBpbXBsZW1lbnRhdGlvbiBvZiBwaWNrbGUuCisKKy0gSXNzdWUgIzIzMjY4OiBGaXhlZCBidWdzIGluIHRoZSBjb21wYXJpc29uIG9mIGlwYWRkcmVzcyBjbGFzc2VzLgorCistIElzc3VlICMyMTQwODogUmVtb3ZlZCBpbmNvcnJlY3QgaW1wbGVtZW50YXRpb25zIG9mIF9fbmVfXygpIHdoaWNoIGRpZG4ndAorICByZXR1cm5lZCBOb3RJbXBsZW1lbnRlZCBpZiBfX2VxX18oKSByZXR1cm5lZCBOb3RJbXBsZW1lbnRlZC4gIFRoZSBkZWZhdWx0CisgIF9fbmVfXygpIG5vdyB3b3JrcyBjb3JyZWN0bHkuCisKKy0gSXNzdWUgIzE5OTk2OiA6Y2xhc3M6YGVtYWlsLmZlZWRwYXJzZXIuRmVlZFBhcnNlcmAgbm93IGhhbmRsZXMgKG1hbGZvcm1lZCkKKyAgaGVhZGVycyB3aXRoIG5vIGtleSByYXRoZXIgdGhhbiBhc3N1bWluZyB0aGUgYm9keSBoYXMgc3RhcnRlZC4KKworLSBJc3N1ZSAjMjMyNDg6IFVwZGF0ZSBzc2wgZXJyb3IgY29kZXMgZnJvbSBsYXRlc3QgT3BlblNTTCBnaXQgbWFzdGVyLgorCistIElzc3VlICMyMzA5ODogNjQtYml0IGRldl90IGlzIG5vdyBzdXBwb3J0ZWQgaW4gdGhlIG9zIG1vZHVsZS4KKworLSBJc3N1ZSAjMjMyNTA6IEluIHRoZSBodHRwLmNvb2tpZXMgbW9kdWxlLCBjYXBpdGFsaXplICJIdHRwT25seSIgYW5kICJTZWN1cmUiCisgIGFzIHRoZXkgYXJlIHdyaXR0ZW4gaW4gdGhlIHN0YW5kYXJkLgorCistIElzc3VlICMyMzA2MzogSW4gdGhlIGRpc3V0aWxzJyBjaGVjayBjb21tYW5kLCBmaXggcGFyc2luZyBvZiByZVNUIHdpdGggY29kZSBvcgorICBjb2RlLWJsb2NrIGRpcmVjdGl2ZXMuCisKKy0gSXNzdWUgIzIzMjA5LCAjMjMyMjU6IHNlbGVjdG9ycy5CYXNlU2VsZWN0b3IuY2xvc2UoKSBub3cgY2xlYXJzIGl0cyBpbnRlcm5hbAorICByZWZlcmVuY2UgdG8gdGhlIHNlbGVjdG9yIG1hcHBpbmcgdG8gYnJlYWsgYSByZWZlcmVuY2UgY3ljbGUuIEluaXRpYWwgcGF0Y2gKKyAgd3JpdHRlbiBieSBNYXJ0aW4gUmljaGFyZC4KKworLSBJc3N1ZSAjMjEzNTY6IE1ha2Ugc3NsLlJBTkRfZWdkKCkgb3B0aW9uYWwgdG8gc3VwcG9ydCBMaWJyZVNTTC4gVGhlCisgIGF2YWlsYWJpbGl0eSBvZiB0aGUgZnVuY3Rpb24gaXMgY2hlY2tlZCBkdXJpbmcgdGhlIGNvbXBpbGF0aW9uLiBQYXRjaCB3cml0dGVuCisgIGJ5IEJlcm5hcmQgU3BpbC4KKworLSBJc3N1ZSAjMjA4OTYsICMyMjkzNTogVGhlIDpmdW5jOmBzc2wuZ2V0X3NlcnZlcl9jZXJ0aWZpY2F0ZWAgZnVuY3Rpb24gbm93CisgIHVzZXMgdGhlIDpkYXRhOmB+c3NsLlBST1RPQ09MX1NTTHYyM2AgcHJvdG9jb2wgYnkgZGVmYXVsdCwgbm90CisgIDpkYXRhOmB+c3NsLlBST1RPQ09MX1NTTHYzYCwgZm9yIG1heGltdW0gY29tcGF0aWJpbGl0eSBhbmQgc3VwcG9ydCBwbGF0Zm9ybXMKKyAgd2hlcmUgOmRhdGE6YH5zc2wuUFJPVE9DT0xfU1NMdjNgIHN1cHBvcnQgaXMgZGlzYWJsZWQuCisKKy0gSXNzdWUgIzIzMTExOiBJbiB0aGUgZnRwbGliLCBtYWtlIHNzbC5QUk9UT0NPTF9TU0x2MjMgdGhlIGRlZmF1bHQgcHJvdG9jb2wKKyAgdmVyc2lvbi4KKworLSBJc3N1ZSAjMjMxMzI6IE1pdGlnYXRlIHJlZ3Jlc3Npb24gaW4gc3BlZWQgYW5kIGNsYXJpdHkgaW4gZnVuY3Rvb2xzLnRvdGFsX29yZGVyaW5nLgorCistIElzc3VlICMyMjU4NTogT24gT3BlbkJTRCA1LjYgYW5kIG5ld2VyLCBvcy51cmFuZG9tKCkgbm93IGNhbGxzIGdldGVudHJvcHkoKSwKKyAgaW5zdGVhZCBvZiByZWFkaW5nIC9kZXYvdXJhbmRvbSwgdG8gZ2V0IHBzZXVkby1yYW5kb20gYnl0ZXMuCisKKy0gSXNzdWUgIzIzMTEyOiBGaXggU2ltcGxlSFRUUFNlcnZlciB0byBjb3JyZWN0bHkgY2FycnkgdGhlIHF1ZXJ5IHN0cmluZyBhbmQKKyAgZnJhZ21lbnQgd2hlbiBpdCByZWRpcmVjdHMgdG8gYWRkIGEgdHJhaWxpbmcgc2xhc2guCisKKy0gSXNzdWUgIzIzMDkzOiBJbiB0aGUgaW8sIG1vZHVsZSBhbGxvdyBtb3JlIG9wZXJhdGlvbnMgdG8gd29yayBvbiBkZXRhY2hlZAorICBzdHJlYW1zLgorCistIElzc3VlICMxOTEwNDogcHByaW50IG5vdyBwcm9kdWNlcyBldmFsdWFibGUgb3V0cHV0IGZvciB3cmFwcGVkIHN0cmluZ3MuCisKKy0gSXNzdWUgIzIzMDcxOiBBZGRlZCBtaXNzaW5nIG5hbWVzIHRvIGNvZGVjcy5fX2FsbF9fLiAgUGF0Y2ggYnkgTWFydGluIFBhbnRlci4KKworLSBJc3N1ZSAjMTU1MTM6IEFkZGVkIGEgX19zaXplb2ZfXyBpbXBsZW1lbnRhdGlvbiBmb3IgcGlja2xlIGNsYXNzZXMuCisKKy0gSXNzdWUgIzE5ODU4OiBwaWNrbGV0b29scy5vcHRpbWl6ZSgpIG5vdyBhd2FyZSBvZiB0aGUgTUVNT0laRSBvcGNvZGUsIGNhbgorICBwcm9kdWNlIG1vcmUgY29tcGFjdCByZXN1bHQgYW5kIG5vIGxvbmdlciBwcm9kdWNlcyBpbnZhbGlkIG91dHB1dCBpZiBpbnB1dAorICBkYXRhIGNvbnRhaW5zIE1FTU9JWkUgb3Bjb2RlcyB0b2dldGhlciB3aXRoIFBVVCBvciBCSU5QVVQgb3Bjb2Rlcy4KKworLSBJc3N1ZSAjMjIwOTU6IEZpeGVkIEhUVFBDb25uZWN0aW9uLnNldF90dW5uZWwgd2l0aCBkZWZhdWx0IHBvcnQuICBUaGUgcG9ydAorICB2YWx1ZSBpbiB0aGUgaG9zdCBoZWFkZXIgd2FzIHNldCB0byAiTm9uZSIuICBQYXRjaCBieSBEZW1pYW4gQnJlY2h0LgorCistIElzc3VlICMyMzAxNjogQSB3YXJuaW5nIG5vIGxvbmdlciBwcm9kdWNlcyBhbiBBdHRyaWJ1dGVFcnJvciB3aGVuIHRoZSBwcm9ncmFtCisgIGlzIHJ1biB3aXRoIHB5dGhvbncuZXhlLgorCistIElzc3VlICMyMTc3NTogc2h1dGlsLmNvcHl0cmVlKCk6IGZpeCBjcmFzaCB3aGVuIGNvcHlpbmcgdG8gVkZBVC4gQW4gZXhjZXB0aW9uCisgIGhhbmRsZXIgYXNzdW1lZCB0aGF0IHRoYXQgT1NFcnJvciBvYmplY3RzIGFsd2F5cyBoYXZlIGEgJ3dpbmVycm9yJyBhdHRyaWJ1dGUuCisgIFRoYXQgaXMgbm90IHRoZSBjYXNlLCBzbyB0aGUgZXhjZXB0aW9uIGhhbmRsZXIgaXRzZWxmIHJhaXNlZCBBdHRyaWJ1dGVFcnJvcgorICB3aGVuIHJ1biBvbiBMaW51eCAoYW5kLCBwcmVzdW1hYmx5LCBhbnkgb3RoZXIgbm9uLVdpbmRvd3MgT1MpLgorICBQYXRjaCBieSBHcmVnIFdhcmQuCisKKy0gSXNzdWUgIzEyMTgyMzQ6IEZpeCBpbnNwZWN0LmdldHNvdXJjZSgpIHRvIGxvYWQgdXBkYXRlZCBzb3VyY2Ugb2YKKyAgcmVsb2FkZWQgbW9kdWxlLiBJbml0aWFsIHBhdGNoIGJ5IEJlcmtlciBQZWtzYWcuCisKKy0gSXNzdWUgIzIyOTU5OiBJbiB0aGUgY29uc3RydWN0b3Igb2YgaHR0cC5jbGllbnQuSFRUUFNDb25uZWN0aW9uLCBwcmVmZXIgdGhlCisgIGNvbnRleHQncyBjaGVja19ob3N0bmFtZSBhdHRyaWJ1dGUgb3ZlciB0aGUgKmNoZWNrX2hvc3RuYW1lKiBwYXJhbWV0ZXIuCisKIC0gSXNzdWUgIzE2MDQzOiBBZGQgYSBkZWZhdWx0IGxpbWl0IGZvciB0aGUgYW1vdW50IG9mIGRhdGEgeG1scnBjbGliLmd6aXBfZGVjb2RlCiAgIHdpbGwgcmV0dXJuLiBUaGlzIHJlc29sdmVzIENWRS0yMDEzLTE3NTMuCiAKKy0gSXNzdWUgIzIyOTY2OiBGaXggX19weWNhY2hlX18gcHljIGZpbGUgbmFtZSBjbG9iYmVyIHdoZW4gcHljX2NvbXBpbGUgaXMKKyAgYXNrZWQgdG8gY29tcGlsZSBhIHNvdXJjZSBmaWxlIGNvbnRhaW5pbmcgbXVsdGlwbGUgZG90cyBpbiB0aGUgc291cmNlIGZpbGUKKyAgbmFtZS4KKworLSBJc3N1ZSAjMjE5NzE6IFVwZGF0ZSB0dXJ0bGVkZW1vIGRvYyBhbmQgYWRkIG1vZHVsZSB0byB0aGUgaW5kZXguCisKKy0gSXNzdWUgIzIxMDMyLiBGaXhlZCBzb2NrZXQgbGVhayBpZiBIVFRQQ29ubmVjdGlvbi5nZXRyZXNwb25zZSgpIGZhaWxzLgorICBPcmlnaW5hbCBwYXRjaCBieSBNYXJ0aW4gUGFudGVyLgorCistIElzc3VlICMyMjk2MDogQWRkIGEgY29udGV4dCBhcmd1bWVudCB0byB4bWxycGNsaWIuU2VydmVyUHJveHkgY29uc3RydWN0b3IuCisKKy0gSXNzdWUgIzIyOTE1OiBTQVggcGFyc2VyIG5vdyBzdXBwb3J0cyBmaWxlcyBvcGVuZWQgd2l0aCBmaWxlIGRlc2NyaXB0b3Igb3IKKyAgYnl0ZXMgcGF0aC4KKworLSBJc3N1ZSAjMjI2MDk6IENvbnN0cnVjdG9ycyBhbmQgdXBkYXRlIG1ldGhvZHMgb2YgbWFwcGluZyBjbGFzc2VzIGluIHRoZQorICBjb2xsZWN0aW9ucyBtb2R1bGUgbm93IGFjY2VwdCB0aGUgc2VsZiBrZXl3b3JkIGFyZ3VtZW50LgorCistIElzc3VlICMyMjc4ODogQWRkICpjb250ZXh0KiBwYXJhbWV0ZXIgdG8gbG9nZ2luZy5oYW5kbGVycy5IVFRQSGFuZGxlci4KKworLSBJc3N1ZSAjMjI5MjE6IEFsbG93IFNTTENvbnRleHQgdG8gdGFrZSB0aGUgKmhvc3RuYW1lKiBwYXJhbWV0ZXIgZXZlbiBpZgorICBPcGVuU1NMIGRvZXNuJ3Qgc3VwcG9ydCBTTkkuCisKKy0gSXNzdWUgIzIyODk0OiBUZXN0Q2FzZS5zdWJUZXN0KCkgd291bGQgY2F1c2UgdGhlIHRlc3Qgc3VpdGUgdG8gYmUgc3RvcHBlZAorICB3aGVuIGluIGZhaWxmYXN0IG1vZGUsIGV2ZW4gaW4gdGhlIGFic2VuY2Ugb2YgZmFpbHVyZXMuCisKKy0gSXNzdWUgIzIyNjM4OiBTU0x2MyBpcyBub3cgZGlzYWJsZWQgdGhyb3VnaG91dCB0aGUgc3RhbmRhcmQgbGlicmFyeS4KKyAgSXQgY2FuIHN0aWxsIGJlIGVuYWJsZWQgYnkgaW5zdGFudGlhdGluZyBhIFNTTENvbnRleHQgbWFudWFsbHkuCisKKy0gSXNzdWUgIzIyMzcwOiBXaW5kb3dzIGRldGVjdGlvbiBpbiBwYXRobGliIGlzIG5vdyBtb3JlIHJvYnVzdC4KKworLSBJc3N1ZSAjMjI4NDE6IFJlamVjdCBjb3JvdXRpbmVzIGluIGFzeW5jaW8gYWRkX3NpZ25hbF9oYW5kbGVyKCkuCisgIFBhdGNoIGJ5IEx1ZG92aWMuR2FzYy4KKworLSBJc3N1ZSAjMjI4NDk6IEZpeCBwb3NzaWJsZSBkb3VibGUgZnJlZSBpbiB0aGUgaW8uVGV4dElPV3JhcHBlciBjb25zdHJ1Y3Rvci4KKworLSBJc3N1ZSAjMTI3Mjg6IERpZmZlcmVudCBVbmljb2RlIGNoYXJhY3RlcnMgaGF2aW5nIHRoZSBzYW1lIHVwcGVyY2FzZSBidXQKKyAgZGlmZmVyZW50IGxvd2VyY2FzZSBhcmUgbm93IG1hdGNoZWQgaW4gY2FzZS1pbnNlbnNpdGl2ZSByZWd1bGFyIGV4cHJlc3Npb25zLgorCistIElzc3VlICMyMjgyMTogRml4ZWQgZmNudGwoKSB3aXRoIGludGVnZXIgYXJndW1lbnQgb24gNjQtYml0IGJpZy1lbmRpYW4KKyAgcGxhdGZvcm1zLgorCistIElzc3VlICMyMjQwNjogRml4ZWQgdGhlIHV1X2NvZGVjIGNvZGVjIGluY29ycmVjdGx5IHBvcnRlZCB0byAzLnguCisgIEJhc2VkIG9uIHBhdGNoIGJ5IE1hcnRpbiBQYW50ZXIuCisKKy0gSXNzdWUgIzE3MjkzOiB1dWlkLmdldG5vZGUoKSBub3cgZGV0ZXJtaW5lcyBNQUMgYWRkcmVzcyBvbiBBSVggdXNpbmcgbmV0c3RhdC4KKyAgQmFzZWQgb24gcGF0Y2ggYnkgQWl2YXJzIEthbHbEgW5zLgorCistIElzc3VlICMyMjc2OTogRml4ZWQgdHRrLlRyZWV2aWV3LnRhZ19oYXMoKSB3aGVuIGNhbGxlZCB3aXRob3V0IGFyZ3VtZW50cy4KKworLSBJc3N1ZSAjMjI0MTc6IFZlcmlmeSBjZXJ0aWZpY2F0ZXMgYnkgZGVmYXVsdCBpbiBodHRwbGliIChQRVAgNDc2KS4KKworLSBJc3N1ZSAjMjI3NzU6IEZpeGVkIHVucGlja2xpbmcgb2YgaHR0cC5jb29raWVzLlNpbXBsZUNvb2tpZSB3aXRoIHByb3RvY29sIDIKKyAgYW5kIGFib3ZlLiAgUGF0Y2ggYnkgVGltIEdyYWhhbS4KKworLSBJc3N1ZSAjMjIzNjY6IHVybGxpYi5yZXF1ZXN0LnVybG9wZW4gd2lsbCBhY2NlcHQgYSBjb250ZXh0IG9iamVjdAorICAoU1NMQ29udGV4dCkgYXMgYW4gYXJndW1lbnQgd2hpY2ggd2lsbCB0aGVuIHVzZWQgYmUgZm9yIEhUVFBTIGNvbm5lY3Rpb24uCisgIFBhdGNoIGJ5IEFsZXggR2F5bm9yLgorCistIElzc3VlICMyMjc3NjogQnJvdWdodCBleGNsdWRlZCBjb2RlIGludG8gdGhlIHNjb3BlIG9mIGEgdHJ5IGJsb2NrIGluCisgIFN5c0xvZ0hhbmRsZXIuZW1pdCgpLgorCistIElzc3VlICMyMjY2NTogQWRkIG1pc3NpbmcgZ2V0X3Rlcm1pbmFsX3NpemUgYW5kIFNhbWVGaWxlRXJyb3IgdG8KKyAgc2h1dGlsLl9fYWxsX18uCisKKy0gSXNzdWUgIzE3MzgxOiBGaXhlZCBoYW5kbGluZyBvZiBjYXNlLWluc2Vuc2l0aXZlIHJhbmdlcyBpbiByZWd1bGFyCisgIGV4cHJlc3Npb25zLgorCistIElzc3VlICMyMjQxMDogTW9kdWxlIGxldmVsIGZ1bmN0aW9ucyBpbiB0aGUgcmUgbW9kdWxlIG5vdyBjYWNoZSBjb21waWxlZAorICBsb2NhbGUtZGVwZW5kZW50IHJlZ3VsYXIgZXhwcmVzc2lvbnMgdGFraW5nIGludG8gYWNjb3VudCB0aGUgbG9jYWxlLgorCistIElzc3VlICMyMjc1OTogUXVlcnkgbWV0aG9kcyBvbiBwYXRobGliLlBhdGgoKSAoZXhpc3RzKCksIGlzX2RpcigpLCBldGMuKQorICBub3cgcmV0dXJuIEZhbHNlIHdoZW4gdGhlIHVuZGVybHlpbmcgc3RhdCBjYWxsIHJhaXNlcyBOb3RBRGlyZWN0b3J5RXJyb3IuCisKKy0gSXNzdWUgIzg4NzY6IGRpc3R1dGlscyBub3cgZmFsbHMgYmFjayB0byBjb3B5aW5nIGZpbGVzIHdoZW4gaGFyZCBsaW5raW5nCisgIGRvZXNuJ3Qgd29yay4gIFRoaXMgYWxsb3dzIHVzZSB3aXRoIHNwZWNpYWwgZmlsZXN5c3RlbXMgc3VjaCBhcyBWaXJ0dWFsQm94CisgIHNoYXJlZCBmb2xkZXJzLgorCistIElzc3VlICMxODg1MzogRml4ZWQgUmVzb3VyY2VXYXJuaW5nIGluIHNobGV4Ll9fbmFpbl9fLgorCistIElzc3VlICM5MzUxOiBEZWZhdWx0cyBzZXQgd2l0aCBzZXRfZGVmYXVsdHMgb24gYW4gYXJncGFyc2Ugc3VicGFyc2VyCisgIGFyZSBubyBsb25nZXIgaWdub3JlZCB3aGVuIGFsc28gc2V0IG9uIHRoZSBwYXJlbnQgcGFyc2VyLgorCistIElzc3VlICMyMTk5MTogTWFrZSBlbWFpbC5oZWFkZXJyZWdpc3RyeSdzIGhlYWRlciAncGFyYW1zJyBhdHRyaWJ1dGVzCisgIGJlIHJlYWQtb25seSAoTWFwcGluZ1Byb3h5VHlwZSkuICBQcmV2aW91c2x5IHRoZSBkaWN0aW9uYXJ5IHdhcyBtb2RpZmlhYmxlCisgIGJ1dCBhIG5ldyBvbmUgd2FzIGNyZWF0ZWQgb24gZWFjaCBhY2Nlc3Mgb2YgdGhlIGF0dHJpYnV0ZS4KKworLSBJc3N1ZSAjMjI2NDE6IEluIGFzeW5jaW8sIHRoZSBkZWZhdWx0IFNTTCBjb250ZXh0IGZvciBjbGllbnQgY29ubmVjdGlvbnMKKyAgaXMgbm93IGNyZWF0ZWQgdXNpbmcgc3NsLmNyZWF0ZV9kZWZhdWx0X2NvbnRleHQoKSwgZm9yIHN0cm9uZ2VyIHNlY3VyaXR5LgorCistIElzc3VlICMyMjQzNTogRml4IGEgZmlsZSBkZXNjcmlwdG9yIGxlYWsgd2hlbiBTb2NrZXRTZXJ2ZXIgYmluZCBmYWlscy4KKworLSBJc3N1ZSAjMTMwOTY6IEZpeGVkIHNlZ2ZhdWx0IGluIENUeXBlcyBQT0lOVEVSIGhhbmRsaW5nIG9mIGxhcmdlCisgIHZhbHVlcy4KKworLSBJc3N1ZSAjMTE2OTQ6IFJhaXNlIENvbnZlcnNpb25FcnJvciBpbiB4ZHJsaWIgYXMgZG9jdW1lbnRlZC4gIFBhdGNoCisgIGJ5IEZpbGlwIEdydXN6Y3p5xYRza2kgYW5kIENsYXVkaXUgUG9wYS4KKworLSBJc3N1ZSAjMjI0NjI6IEZpeCBweWV4cGF0J3MgY3JlYXRpb24gb2YgYSBkdW1teSBmcmFtZSB0byBtYWtlIGl0CisgIGFwcGVhciBpbiBleGNlcHRpb24gdHJhY2ViYWNrcy4KKworLSBJc3N1ZSAjMjExNzM6IEZpeCBsZW4oKSBvbiBhIFdlYWtLZXlEaWN0aW9uYXJ5IHdoZW4gLmNsZWFyKCkgd2FzIGNhbGxlZAorICB3aXRoIGFuIGl0ZXJhdG9yIGFsaXZlLgorCistIElzc3VlICMxMTg2NjogRWxpbWluYXRlZCByYWNlIGNvbmRpdGlvbiBpbiB0aGUgY29tcHV0YXRpb24gb2YgbmFtZXMKKyAgZm9yIG5ldyB0aHJlYWRzLgorCistIElzc3VlICMyMTkwNTogQXZvaWQgUnVudGltZUVycm9yIGluIHBpY2tsZS53aGljaG1vZHVsZSgpIHdoZW4gc3lzLm1vZHVsZXMKKyAgaXMgbXV0YXRlZCB3aGlsZSBpdGVyYXRpbmcuICBQYXRjaCBieSBPbGl2aWVyIEdyaXNlbC4KKworLSBJc3N1ZSAjMjIyMTk6IFRoZSB6aXBmaWxlIG1vZHVsZSBDTEkgbm93IGFkZHMgZW50cmllcyBmb3IgZGlyZWN0b3JpZXMKKyAgKGluY2x1ZGluZyBlbXB0eSBkaXJlY3RvcmllcykgaW4gWklQIGZpbGUuCisKKy0gSXNzdWUgIzIyNDQ5OiBJbiB0aGUgc3NsLlNTTENvbnRleHQubG9hZF9kZWZhdWx0X2NlcnRzLCBjb25zdWx0IHRoZQorICBlbnZpcm9ubWVudGFsIHZhcmlhYmxlcyBTU0xfQ0VSVF9ESVIgYW5kIFNTTF9DRVJUX0ZJTEUgb24gV2luZG93cy4KKworLSBJc3N1ZSAjMjAwNzY6IEFkZGVkIG5vbiBkZXJpdmVkIFVURi04IGFsaWFzZXMgdG8gbG9jYWxlIGFsaWFzZXMgdGFibGUuCisKKy0gSXNzdWUgIzIwMDc5OiBBZGRlZCBsb2NhbGVzIHN1cHBvcnRlZCBpbiBnbGliYyAyLjE4IHRvIGxvY2FsZSBhbGlhcyB0YWJsZS4KKworLSBJc3N1ZSAjMjIzOTY6IE9uIDMyLWJpdCBBSVggcGxhdGZvcm0sIGRvbid0IGV4cG9zZSBvcy5wb3NpeF9mYWR2aXNlKCkgbm9yCisgIG9zLnBvc2l4X2ZhbGxvY2F0ZSgpIGJlY2F1c2UgdGhlaXIgcHJvdG90eXBlcyBpbiBzeXN0ZW0gaGVhZGVycyBhcmUgd3JvbmcuCisKIC0gSXNzdWUgIzIyNTE3OiBXaGVuIGEgaW8uQnVmZmVyZWRSV1BhaXIgb2JqZWN0IGlzIGRlYWxsb2NhdGVkLCBjbGVhciBpdHMKICAgd2Vha3JlZnMuCiAKKy0gSXNzdWUgIzIyNDQ4OiBJbXByb3ZlIGNhbmNlbGVkIHRpbWVyIGhhbmRsZXMgY2xlYW51cCB0byBwcmV2ZW50CisgIHVuYm91bmQgbWVtb3J5IHVzYWdlLiBQYXRjaCBieSBKb3NodWEgTW9vcmUtT2xpdmEuCisKKy0gSXNzdWUgIzIzMDA5OiBNYWtlIHN1cmUgc2VsZWN0b3JzLkVwb2xsU2VsZWNydG9yLnNlbGVjdCgpIHdvcmtzIHdoZW4gbm8KKyAgRkQgaXMgcmVnaXN0ZXJlZC4KKworSURMRQorLS0tLQorCistIElzc3VlICMyMDU3NzogQ29uZmlndXJhdGlvbiBvZiB0aGUgbWF4IGxpbmUgbGVuZ3RoIGZvciB0aGUgRm9ybWF0UGFyYWdyYXBoCisgIGV4dGVuc2lvbiBoYXMgYmVlbiBtb3ZlZCBmcm9tIHRoZSBHZW5lcmFsIHRhYiBvZiB0aGUgSWRsZSBwcmVmZXJlbmNlcyBkaWFsb2cKKyAgdG8gdGhlIEZvcm1hdFBhcmFncmFwaCB0YWIgb2YgdGhlIENvbmZpZyBFeHRlbnNpb25zIGRpYWxvZy4KKyAgUGF0Y2ggYnkgVGFsIEVpbmF0LgorCistIElzc3VlICMxNjg5MzogVXBkYXRlIElkbGUgZG9jIGNoYXB0ZXIgdG8gbWF0Y2ggY3VycmVudCBJZGxlIGFuZCBhZGQgbmV3CisgIGluZm9ybWF0aW9uLgorCistIElzc3VlICMzMDY4OiBBZGQgSWRsZSBleHRlbnNpb24gY29uZmlndXJhdGlvbiBkaWFsb2cgdG8gT3B0aW9ucyBtZW51LgorICBDaGFuZ2VzIGFyZSB3cml0dGVuIHRvIEhPTUUvLmlkbGVyYy9jb25maWctZXh0ZW5zaW9ucy5jZmcuCisgIE9yaWdpbmFsIHBhdGNoIGJ5IFRhbCBFaW5hdC4KKworLSBJc3N1ZSAjMTYyMzM6IEEgbW9kdWxlIGJyb3dzZXIgKEZpbGUgOiBDbGFzcyBCcm93c2VyLCBBbHQrQykgcmVxdWlyZXMgYW4KKyAgZWRpdG9yIHdpbmRvdyB3aXRoIGEgZmlsZW5hbWUuICBXaGVuIENsYXNzIEJyb3dzZXIgaXMgcmVxdWVzdGVkIG90aGVyd2lzZSwKKyAgZnJvbSBhIHNoZWxsLCBvdXRwdXQgd2luZG93LCBvciAnVW50aXRsZWQnIGVkaXRvciwgSWRsZSBubyBsb25nZXIgZGlzcGxheXMKKyAgYW4gZXJyb3IgYm94LiAgSXQgbm93IHBvcHMgdXAgYW4gT3BlbiBNb2R1bGUgYm94IChBbHQrTSkuIElmIGEgdmFsaWQgbmFtZQorICBpcyBlbnRlcmVkIGFuZCBhIG1vZHVsZSBpcyBvcGVuZWQsIGEgY29ycmVzcG9uZGluZyBicm93c2VyIGlzIGFsc28gb3BlbmVkLgorCistIElzc3VlICM0ODMyOiBTYXZlIEFzIHRvIHR5cGUgUHl0aG9uIGZpbGVzIGF1dG9tYXRpY2FsbHkgYWRkcyAucHkgdG8gdGhlCisgIG5hbWUgeW91IGVudGVyIChldmVuIGlmIHlvdXIgc3lzdGVtIGRvZXMgbm90IGRpc3BsYXkgaXQpLiAgU29tZSBzeXN0ZW1zCisgIGF1dG9tYXRpY2FsbHkgYWRkIC50eHQgd2hlbiB0eXBlIGlzIFRleHQgZmlsZXMuCisKKy0gSXNzdWUgIzIxOTg2OiBDb2RlIG9iamVjdHMgYXJlIG5vdCBub3JtYWxseSBwaWNrbGVkIGJ5IHRoZSBwaWNrbGUgbW9kdWxlLgorICBUbyBtYXRjaCB0aGlzLCB0aGV5IGFyZSBubyBsb25nZXIgcGlja2xlZCB3aGVuIHJ1bm5pbmcgdW5kZXIgSWRsZS4KKworLSBJc3N1ZSAjMjMxODA6IFJlbmFtZSBJRExFICJXaW5kb3dzIiBtZW51IGl0ZW0gdG8gIldpbmRvdyIuCisgIFBhdGNoIGJ5IEFsIFN3ZWlnYXJ0LgorCitUZXN0cworLS0tLS0KKworLSBJc3N1ZSAjMjMzOTI6IEFkZGVkIHRlc3RzIGZvciBtYXJzaGFsIEMgQVBJIHRoYXQgd29ya3Mgd2l0aCBGSUxFKi4KKworLSBJc3N1ZSAjMTg5ODI6IEFkZCB0ZXN0cyBmb3IgQ0xJIG9mIHRoZSBjYWxlbmRhciBtb2R1bGUuCisKKy0gSXNzdWUgIzE5NTQ4OiBBZGRlZCBzb21lIGFkZGl0aW9uYWwgY2hlY2tzIHRvIHRlc3RfY29kZWNzIHRvIGVuc3VyZSB0aGF0CisgIHN0YXRlbWVudHMgaW4gdGhlIHVwZGF0ZWQgZG9jdW1lbnRhdGlvbiByZW1haW4gYWNjdXJhdGUuIFBhdGNoIGJ5IE1hcnRpbgorICBQYW50ZXIuCisKKy0gSXNzdWUgIzIyODM4OiBBbGwgdGVzdF9yZSB0ZXN0cyBub3cgd29yayB3aXRoIHVuaXR0ZXN0IHRlc3QgZGlzY292ZXJ5LgorCistIElzc3VlICMyMjE3MzogVXBkYXRlIGxpYjJ0bzMgdGVzdHMgdG8gdXNlIHVuaXR0ZXN0IHRlc3QgZGlzY292ZXJ5LgorCistIElzc3VlICMxNjAwMDogQ29udmVydCB0ZXN0X2N1cnNlcyB0byB1c2UgdW5pdHRlc3QuCisKKy0gSXNzdWUgIzIxNDU2OiBTa2lwIHR3byB0ZXN0cyBpbiB0ZXN0X3VybGxpYjJuZXQucHkgaWYgX3NzbCBtb2R1bGUgbm90CisgIHByZXNlbnQuIFBhdGNoIGJ5IFJlbWkgUG9pbnRlbC4KKworLSBJc3N1ZSAjMjI3NzA6IFByZXZlbnQgc29tZSBUayBzZWdmYXVsdHMgb24gT1MgWCB3aGVuIHJ1bm5pbmcgZ3VpIHRlc3RzLgorCistIElzc3VlICMyMzIxMTogV29ya2Fyb3VuZCB0ZXN0X2xvZ2dpbmcgZmFpbHVyZSBvbiBzb21lIE9TIFggMTAuNiBzeXN0ZW1zLgorCistIElzc3VlICMyMzM0NTogUHJldmVudCB0ZXN0X3NzbCBmYWlsdXJlcyB3aXRoIGxhcmdlIE9wZW5TU0wgcGF0Y2ggbGV2ZWwKKyAgdmFsdWVzIChsaWtlIDAuOS44emMpLgorCistIElzc3VlICMyMjI4OTogUHJldmVudCB0ZXN0X3VybGxpYjJuZXQgZmFpbHVyZXMgZHVlIHRvIGZ0cCBjb25uZWN0aW9uIHRpbWVvdXQuCisKK0J1aWxkCistLS0tLQorCistIElzc3VlICMxNTUwNjogVXNlIHN0YW5kYXJkIFBLR19QUk9HX1BLR19DT05GSUcgYXV0b2NvbmYgbWFjcm8gaW4gdGhlIGNvbmZpZ3VyZQorICBzY3JpcHQuCisKKy0gSXNzdWUgIzIyOTM1OiBBbGxvdyB0aGUgc3NsIG1vZHVsZSB0byBiZSBjb21waWxlZCBpZiBvcGVuc3NsIGRvZXNuJ3Qgc3VwcG9ydAorICBTU0wgMy4KKworLSBJc3N1ZSAjMTY1Mzc6IENoZWNrIHdoZXRoZXIgc2VsZi5leHRlbnNpb25zIGlzIGVtcHR5IGluIHNldHVwLnB5LiBQYXRjaCBieQorICBKb25hdGhhbiBIb3NtZXIuCisKKy0gSXNzdWUgIzE4MDk2OiBGaXggbGlicmFyeSBvcmRlciByZXR1cm5lZCBieSBweXRob24tY29uZmlnLgorCistIElzc3VlICMxNzIxOTogQWRkIGxpYnJhcnkgYnVpbGQgZGlyIGZvciBQeXRob24gZXh0ZW5zaW9uIGNyb3NzLWJ1aWxkcy4KKworLSBJc3N1ZSAjMTcxMjg6IFVzZSBwcml2YXRlIHZlcnNpb24gb2YgT3BlblNTTCBmb3IgMy40LjMgT1MgWCAxMC41KyBpbnN0YWxsZXIuCisKK0MgQVBJCistLS0tLQorCistIElzc3VlICMyMjA3OTogUHlUeXBlX1JlYWR5KCkgbm93IGNoZWNrcyB0aGF0IHN0YXRpY2FsbHkgYWxsb2NhdGVkIHR5cGUgaGFzCisgIG5vIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBiYXNlcy4KKworRG9jdW1lbnRhdGlvbgorLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxOTU0ODogVXBkYXRlIHRoZSBjb2RlY3MgbW9kdWxlIGRvY3VtZW50YXRpb24gdG8gYmV0dGVyIGNvdmVyIHRoZQorICBkaXN0aW5jdGlvbiBiZXR3ZWVuIHRleHQgZW5jb2RpbmdzIGFuZCBvdGhlciBjb2RlY3MsIHRvZ2V0aGVyIHdpdGggb3RoZXIKKyAgY2xhcmlmaWNhdGlvbnMuIFBhdGNoIGJ5IE1hcnRpbiBQYW50ZXIuCisKKy0gSXNzdWUgIzIyOTE0OiBVcGRhdGUgdGhlIFB5dGhvbiAyLzMgcG9ydGluZyBIT1dUTyB0byBkZXNjcmliZSBhIG1vcmUgYXV0b21hdGVkCisgIGFwcHJvYWNoLgorCistIElzc3VlICMyMTUxNDogVGhlIGRvY3VtZW50YXRpb24gb2YgdGhlIGpzb24gbW9kdWxlIG5vdyByZWZlcnMgdG8gbmV3IEpTT04gUkZDCisgIDcxNTkgaW5zdGVhZCBvZiBvYnNvbGV0ZWQgUkZDIDQ2MjcuCisKK1Rvb2xzL0RlbW9zCistLS0tLS0tLS0tLQorCistIElzc3VlICMyMjMxNDogcHlkb2Mgbm93IHdvcmtzIHdoZW4gdGhlIExJTkVTIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHNldC4KKworV2luZG93cworLS0tLS0tLQorCistIElzc3VlICMxNzg5NjogVGhlIFdpbmRvd3MgYnVpbGQgc2NyaXB0cyBub3cgZXhwZWN0IGV4dGVybmFsIGxpYnJhcnkgc291cmNlcworICB0byBiZSBpbiBgYFBDYnVpbGRcLi5cZXh0ZXJuYWxzYGAgcmF0aGVyIHRoYW4gYGBQQ2J1aWxkXC4uXC4uYGAuCisKKy0gSXNzdWUgIzE3NzE3OiBUaGUgV2luZG93cyBidWlsZCBzY3JpcHRzIG5vdyB1c2UgYSBjb3B5IG9mIE5BU00gcHVsbGVkIGZyb20KKyAgc3ZuLnB5dGhvbi5vcmcgdG8gYnVpbGQgT3BlblNTTC4KKworLSBJc3N1ZSAjMjI2NDQ6IFRoZSBidW5kbGVkIHZlcnNpb24gb2YgT3BlblNTTCBoYXMgYmVlbiB1cGRhdGVkIHRvIDEuMC4xai4KKworCitXaGF0J3MgTmV3IGluIFB5dGhvbiAzLjQuMj8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitSZWxlYXNlIGRhdGU6IDIwMTQtMTAtMDYKKworTGlicmFyeQorLS0tLS0tLQorCistIElzc3VlICMxMDUxMDogZGlzdHV0aWxzIHJlZ2lzdGVyIGFuZCB1cGxvYWQgbWV0aG9kcyBub3cgdXNlIEhUTUwgc3RhbmRhcmRzCisgIGNvbXBsaWFudCBDUkxGIGxpbmUgZW5kaW5ncy4KKworLSBJc3N1ZSAjOTg1MDogRml4ZWQgbWFjcGF0aC5qb2luKCkgZm9yIGVtcHR5IGZpcnN0IGNvbXBvbmVudC4gIFBhdGNoIGJ5CisgIE9sZWcgT3NobXlhbi4KKworLSBJc3N1ZSAjMjI0Mjc6IFRlbXBvcmFyeURpcmVjdG9yeSBubyBsb25nZXIgYXR0ZW1wdHMgdG8gY2xlYW4gdXAgdHdpY2Ugd2hlbgorICB1c2VkIGluIHRoZSB3aXRoIHN0YXRlbWVudCBpbiBnZW5lcmF0b3IuCisKKy0gSXNzdWUgIzIwOTEyOiBOb3cgZGlyZWN0b3JpZXMgYWRkZWQgdG8gWklQIGZpbGUgaGF2ZSBjb3JyZWN0IFVuaXggYW5kIE1TLURPUworICBkaXJlY3RvcnkgYXR0cmlidXRlcy4KKworLSBJc3N1ZSAjMjE4NjY6IFppcEZpbGUuY2xvc2UoKSBubyBsb25nZXIgd3JpdGVzIFpJUDY0IGNlbnRyYWwgZGlyZWN0b3J5CisgIHJlY29yZHMgaWYgYWxsb3daaXA2NCBpcyBmYWxzZS4KKworLSBJc3N1ZSAjMjI0MTU6IEZpeGVkIGRlYnVnZ2luZyBvdXRwdXQgb2YgdGhlIEdST1VQUkVGX0VYSVNUUyBvcGNvZGUgaW4gdGhlIHJlCisgIG1vZHVsZS4gIFJlbW92ZWQgdHJhaWxpbmcgc3BhY2VzIGluIGRlYnVnZ2luZyBvdXRwdXQuCisKKy0gSXNzdWUgIzIyNDIzOiBVbmhhbmRsZWQgZXhjZXB0aW9uIGluIHRocmVhZCBubyBsb25nZXIgY2F1c2VzIHVuaGFuZGxlZAorICBBdHRyaWJ1dGVFcnJvciB3aGVuIHN5cy5zdGRlcnIgaXMgTm9uZS4KKworLSBJc3N1ZSAjMjEzMzI6IEVuc3VyZSB0aGF0IGBgYnVmc2l6ZT0xYGAgaW4gc3VicHJvY2Vzcy5Qb3BlbigpIHNlbGVjdHMKKyAgbGluZSBidWZmZXJpbmcsIHJhdGhlciB0aGFuIGJsb2NrIGJ1ZmZlcmluZy4gIFBhdGNoIGJ5IEFraXJhIExpLgorCisKK1doYXQncyBOZXcgaW4gUHl0aG9uIDMuNC4ycmMxPworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1JlbGVhc2UgZGF0ZTogMjAxNC0wOS0yMgorCitDb3JlIGFuZCBCdWlsdGlucworLS0tLS0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMjIyNTg6IEZpeCB0aGUgdGhlIGludGVybmFsIGZ1bmN0aW9uIHNldF9pbmhlcml0YWJsZSgpIG9uIElsbHVtb3MuCisgIFRoaXMgcGxhdGZvcm0gZXhwb3NlcyB0aGUgZnVuY3Rpb24gYGBpb2N0bChGSU9DTEVYKWBgLCBidXQgY2FsbGluZyBpdCBmYWlscworICB3aXRoIGVycm5vIGlzIEVOT1RUWTogIkluYXBwcm9wcmlhdGUgaW9jdGwgZm9yIGRldmljZSIuIHNldF9pbmhlcml0YWJsZSgpCisgIG5vdyBmYWxscyBiYWNrIHRvIHRoZSBzbG93ZXIgYGBmY250bCgpYGAgKGBgRl9HRVRGRGBgIGFuZCB0aGVuIGBgRl9TRVRGRGBgKS4KKworLSBJc3N1ZSAjMjE2Njk6IFdpdGggdGhlIGFpZCBvZiBoZXVyaXN0aWNzIGluIFN5bnRheEVycm9yLl9faW5pdF9fLCB0aGUKKyAgcGFyc2VyIG5vdyBhdHRlbXB0cyB0byBnZW5lcmF0ZSBtb3JlIG1lYW5pbmdmdWwgKG9yIGF0IGxlYXN0IG1vcmUgc2VhcmNoCisgIGVuZ2luZSBmcmllbmRseSkgZXJyb3IgbWVzc2FnZXMgd2hlbiAiZXhlYyIgYW5kICJwcmludCIgYXJlIHVzZWQgYXMKKyAgc3RhdGVtZW50cy4KKworLSBJc3N1ZSAjMjE2NDI6IEluIHRoZSBjb25kaXRpb25hbCBpZi1lbHNlIGV4cHJlc3Npb24sIGFsbG93IGFuIGludGVnZXIgd3JpdHRlbgorICB3aXRoIG5vIHNwYWNlIGJldHdlZW4gaXRzZWxmIGFuZCB0aGUgYGBlbHNlYGAga2V5d29yZCAoZS5nLiBgYFRydWUgaWYgNDJlbHNlCisgIEZhbHNlYGApIHRvIGJlIHZhbGlkIHN5bnRheC4KKworLSBJc3N1ZSAjMjE1MjM6IEZpeCBvdmVyLXBlc3NpbWlzdGljIGNvbXB1dGF0aW9uIG9mIHRoZSBzdGFjayBlZmZlY3Qgb2YKKyAgc29tZSBvcGNvZGVzIGluIHRoZSBjb21waWxlci4gIFRoaXMgYWxzbyBmaXhlcyBhIHF1YWRyYXRpYyBjb21waWxhdGlvbgorICB0aW1lIGlzc3VlIG5vdGljZWFibGUgd2hlbiBjb21waWxpbmcgY29kZSB3aXRoIGEgbGFyZ2UgbnVtYmVyIG9mICJhbmQiCisgIGFuZCAib3IiIG9wZXJhdG9ycy4KKworTGlicmFyeQorLS0tLS0tLQorCistIElzc3VlICMyMTA5MTogRml4IEFQSSBidWc6IGVtYWlsLm1lc3NhZ2UuRW1haWxNZXNzYWdlLmlzX2F0dGFjaG1lbnQgaXMgbm93CisgIGEgbWV0aG9kLiAgU2luY2UgRW1haWxNZXNzYWdlIGlzIHByb3Zpc2lvbmFsLCB3ZSBjYW4gY2hhbmdlIHRoZSBBUEkgaW4gYQorICBtYWludGVuYW5jZSByZWxlYXNlLCBidXQgd2UgdXNlIGEgdHJpY2sgdG8gcmVtYWluIGJhY2t3YXJkIGNvbXBhdGlibGUgd2l0aAorICAzLjQuMC8xLgorCistIElzc3VlICMyMTA3OTogRml4IGVtYWlsLm1lc3NhZ2UuRW1haWxNZXNzYWdlLmlzX2F0dGFjaG1lbnQgdG8gcmV0dXJuIHRoZQorICBjb3JyZWN0IHJlc3VsdCB3aGVuIHRoZSBoZWFkZXIgaGFzIHBhcmFtZXRlcnMgYXMgd2VsbCBhcyBhIHZhbHVlLgorCistIElzc3VlICMyMjI0NzogQWRkIE5OVFBFcnJvciB0byBubnRwbGliLl9fYWxsX18uCisKKy0gSXNzdWUgIzQxODA6IFRoZSB3YXJuaW5ncyByZWdpc3RyaWVzIGFyZSBub3cgcmVzZXQgd2hlbiB0aGUgZmlsdGVycworICBhcmUgbW9kaWZpZWQuCisKIC0gSXNzdWUgIzIyNDE5OiBMaW1pdCB0aGUgbGVuZ3RoIG9mIGluY29taW5nIEhUVFAgcmVxdWVzdCBpbiB3c2dpcmVmIHNlcnZlciB0bwogICA2NTUzNiBieXRlcyBhbmQgc2VuZCBhIDQxNCBlcnJvciBjb2RlIGZvciBoaWdoZXIgbGVuZ3Rocy4gUGF0Y2ggY29udHJpYnV0ZWQKICAgYnkgRGV2aW4gQ29vay4KQEAgLTk0LDE2ICsxMzIzLDYwNiBAQAogICB3aXRoIG5vbi1zdGFuZGFyZCBjb29raWUgaGFuZGxpbmcgaW4gc29tZSBXZWIgYnJvd3NlcnMuICBSZXBvcnRlZCBieQogICBTZXJnZXkgQm9icm92LgogCistIElzc3VlICMyMjM4NDogQW4gZXhjZXB0aW9uIGluIFRraW50ZXIgY2FsbGJhY2sgbm8gbG9uZ2VyIGNyYXNoZXMgdGhlIHByb2dyYW0KKyAgd2hlbiBpdCBpcyBydW4gd2l0aCBweXRob253LmV4ZS4KKworLSBJc3N1ZSAjMjIxNjg6IFByZXZlbnQgdHVydGxlIEF0dHJpYnV0ZUVycm9yIHdpdGggbm9uLWRlZmF1bHQgQ2FudmFzIG9uIE9TIFguCisKKy0gSXNzdWUgIzIxMTQ3OiBzcWxpdGUzIG5vdyByYWlzZXMgYW4gZXhjZXB0aW9uIGlmIHRoZSByZXF1ZXN0IGNvbnRhaW5zIGEgbnVsbAorICBjaGFyYWN0ZXIgaW5zdGVhZCBvZiB0cnVuY2F0ZSBpdC4gIEJhc2VkIG9uIHBhdGNoIGJ5IFZpY3RvciBTdGlubmVyLgorCistIElzc3VlICMyMTk1MTogRml4ZWQgYSBjcmFzaCBpbiBUa2ludGVyIG9uIEFJWCB3aGVuIGNhbGxlZCBUY2wgY29tbWFuZCB3aXRoCisgIGVtcHR5IHN0cmluZyBvciB0dXBsZSBhcmd1bWVudC4KKworLSBJc3N1ZSAjMjE5NTE6IFRraW50ZXIgbm93IG1vc3QgbGlrZWx5IHJhaXNlcyBNZW1vcnlFcnJvciBpbnN0ZWFkIG9mIGNyYXNoCisgIGlmIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlscy4KKworLSBJc3N1ZSAjMjIzMzg6IEZpeCBhIGNyYXNoIGluIHRoZSBqc29uIG1vZHVsZSBvbiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlLgorCistIElzc3VlICMyMjIyNjogRmlyc3QgbGV0dGVyIG5vIGxvbmdlciBpcyBzdHJpcHBlZCBmcm9tIHRoZSAic3RhdHVzIiBrZXkgaW4KKyAgdGhlIHJlc3VsdCBvZiBUcmVldmlldy5oZWFkaW5nKCkuCisKKy0gSXNzdWUgIzE5NTI0OiBGaXhlZCByZXNvdXJjZSBsZWFrIGluIHRoZSBIVFRQIGNvbm5lY3Rpb24gd2hlbiBhbiBpbnZhbGlkCisgIHJlc3BvbnNlIGlzIHJlY2VpdmVkLiAgUGF0Y2ggYnkgTWFydGluIFBhbnRlci4KKworLSBJc3N1ZSAjMjIwNTE6IHR1cnRsZWRlbW8gbm8gbG9uZ2VyIHJlbG9hZHMgZXhhbXBsZXMgdG8gcmUtcnVuIHRoZW0uCisgIEluaXRpYWxpemF0aW9uIG9mIHZhcmlhYmxlcyBhbmQgZ3VpIHNldHVwIHNob3VsZCBiZSBkb25lIGluIG1haW4oKSwKKyAgd2hpY2ggaXMgY2FsbGVkIGVhY2ggdGltZSBhIGRlbW8gaXMgcnVuLCBidXQgbm90IG9uIGltcG9ydC4KKworLSBJc3N1ZSAjMjE5MzM6IFR1cnRsZWRlbW8gdXNlcnMgY2FuIGNoYW5nZSB0aGUgY29kZSBmb250IHNpemUgd2l0aCBhIG1lbnUKKyAgc2VsZWN0aW9uIG9yIGNvbnRyb2woY29tbWFuZCkgJy0nIG9yICcrJyBvciBjb250cm9sLW1vdXNld2hlZWwuCisgIE9yaWdpbmFsIHBhdGNoIGJ5IExpdGEgQ2hvLgorCistIElzc3VlICMyMTU5NzogVGhlIHNlcGFyYXRvciBiZXR3ZWVuIHRoZSB0dXJ0bGVkZW1vIHRleHQgcGFuZSBhbmQgdGhlIGRyYXdpbmcKKyAgY2FudmFzIGNhbiBub3cgYmUgZ3JhYmJlZCBhbmQgZHJhZ2dlZCB3aXRoIGEgbW91c2UuICBUaGUgY29kZSB0ZXh0IHBhbmUgY2FuCisgIGJlIHdpZGVuZWQgdG8gZWFzaWx5IHZpZXcgb3IgY29weSB0aGUgZnVsbCB3aWR0aCBvZiB0aGUgdGV4dC4gIFRoZSBjYW52YXMKKyAgY2FuIGJlIHdpZGVuZWQgb24gc21hbGwgc2NyZWVucy4gIE9yaWdpbmFsIHBhdGNoZXMgYnkgSmFuIEthbmlzIGFuZCBMaXRhIENoby4KKworLSBJc3N1ZSAjMTgxMzI6IFR1cnRsZWRlbW8gYnV0dG9ucyBubyBsb25nZXIgZGlzYXBwZWFyIHdoZW4gdGhlIHdpbmRvdyBpcworICBzaHJ1bmsuICBPcmlnaW5hbCBwYXRjaGVzIGJ5IEphbiBLYW5pcyBhbmQgTGl0YSBDaG8uCisKKy0gSXNzdWUgIzIyMjE2OiBzbXRwbGliIG5vdyByZXNldHMgaXRzIHN0YXRlIG1vcmUgY29tcGxldGVseSBhZnRlciBhIHF1aXQuICBUaGUKKyAgbW9zdCBvYnZpb3VzIGNvbnNlcXVlbmNlIG9mIHRoZSBwcmV2aW91cyBiZWhhdmlvciB3YXMgYSBTVEFSVFRMUyBmYWlsdXJlCisgIGR1cmluZyBhIGNvbm5lY3Qvc3RhcnR0bHMvcXVpdC9jb25uZWN0L3N0YXJ0dGxzIHNlcXVlbmNlLgorCistIElzc3VlICMyMjE4NTogRml4IGFuIG9jY2FzaW9uYWwgUnVudGltZUVycm9yIGluIHRocmVhZGluZy5Db25kaXRpb24ud2FpdCgpCisgIGNhdXNlZCBieSBtdXRhdGlvbiBvZiB0aGUgd2FpdGVycyBxdWV1ZSB3aXRob3V0IGhvbGRpbmcgdGhlIGxvY2suICBQYXRjaAorICBieSBEb3VnIFpvbmdrZXIuCisKKy0gSXNzdWUgIzIyMTgyOiBVc2UgZS5hcmdzIHRvIHVucGFjayBleGNlcHRpb25zIGNvcnJlY3RseSBpbgorICBkaXN0dXRpbHMuZmlsZV91dGlsLm1vdmVfZmlsZS4gUGF0Y2ggYnkgQ2xhdWRpdSBQb3BhLgorCistIFRoZSB3ZWJicm93c2VyIG1vZHVsZSBub3cgdXNlcyBzdWJwcm9jZXNzJ3Mgc3RhcnRfbmV3X3Nlc3Npb249VHJ1ZSByYXRoZXIKKyAgdGhhbiBhIHBvdGVudGlhbGx5IHJpc2t5IHByZWV4ZWNfZm49b3Muc2V0c2lkIGNhbGwuCisKKy0gSXNzdWUgIzIyMjM2OiBGaXhlZCBUa2ludGVyIGltYWdlcyBjb3B5aW5nIG9wZXJhdGlvbnMgaW4gTm9EZWZhdWx0Um9vdCBtb2RlLgorCistIElzc3VlICMyMjE5MTogRml4IHdhcm5pbmdzLl9fYWxsX18uCisKKy0gSXNzdWUgIzE1Njk2OiBBZGQgYSBfX3NpemVvZl9fIGltcGxlbWVudGF0aW9uIGZvciBtbWFwIG9iamVjdHMgb24gV2luZG93cy4KKworLSBJc3N1ZSAjMjIwNjg6IEF2b2lkZWQgcmVmZXJlbmNlIGxvb3BzIHdpdGggVmFyaWFibGVzIGFuZCBGb250cyBpbiBUa2ludGVyLgorCistIElzc3VlICMyMjE2NTogU2ltcGxlSFRUUFJlcXVlc3RIYW5kbGVyIG5vdyBzdXBwb3J0cyB1bmRlY29kYWJsZSBmaWxlIG5hbWVzLgorCistIElzc3VlICM4Nzk3OiBSYWlzZSBIVFRQRXJyb3Igb24gZmFpbGVkIEJhc2ljIEF1dGhlbnRpY2F0aW9uIGltbWVkaWF0ZWx5LgorICBJbml0aWFsIHBhdGNoIGJ5IFNhbSBCdWxsLgorCistIElzc3VlICMyMDcyOTogUmVzdG9yZWQgdGhlIHVzZSBvZiBsYXp5IGl0ZXJrZXlzKCkvaXRlcnZhbHVlcygpL2l0ZXJpdGVtcygpCisgIGluIHRoZSBtYWlsYm94IG1vZHVsZS4KKworLSBJc3N1ZSAjMjE0NDg6IENoYW5nZWQgRmVlZFBhcnNlciBmZWVkKCkgdG8gYXZvaWQgTyhOKioyKSBiZWhhdmlvciB3aGVuCisgIHBhcnNpbmcgbG9uZyBsaW5lLiAgT3JpZ2luYWwgcGF0Y2ggYnkgUmF5bW9uZCBIZXR0aW5nZXIuCisKKy0gSXNzdWUgIzIyMTg0OiBUaGUgZnVuY3Rvb2xzIExSVSBDYWNoZSBkZWNvcmF0b3IgZmFjdG9yeSBub3cgZ2l2ZXMgYW4gZWFybGllcgorICBhbmQgY2xlYXJlciBlcnJvciBtZXNzYWdlIHdoZW4gdGhlIHVzZXIgZm9yZ2V0cyB0aGUgcmVxdWlyZWQgcGFyYW1ldGVycy4KKworLSBJc3N1ZSAjMTc5MjM6IGdsb2IoKSBwYXR0ZXJucyBlbmRpbmcgd2l0aCBhIHNsYXNoIG5vIGxvbmdlciBtYXRjaCBub24tZGlycyBvbgorICBBSVguICBCYXNlZCBvbiBwYXRjaCBieSBEZWxoYWxsdC4KKworLSBJc3N1ZSAjMjExMjE6IERvbid0IGZvcmNlIDNyZCBwYXJ0eSBDIGV4dGVuc2lvbnMgdG8gYmUgYnVpbHQgd2l0aAorICAtV2Vycm9yPWRlY2xhcmF0aW9uLWFmdGVyLXN0YXRlbWVudC4KKworLSBJc3N1ZSAjMjE5NzU6IEZpeGVkIGNyYXNoIHdoZW4gdXNpbmcgdW5pbml0aWFsaXplZCBzcWxpdGUzLlJvdyAoaW4gcGFydGljdWxhcgorICB3aGVuIHVucGlja2xpbmcgcGlja2xlZCBzcWxpdGUzLlJvdykuICBzcWxpdGUzLlJvdyBpcyBub3cgaW5pdGlhbGl6ZWQgaW4gdGhlCisgIF9fbmV3X18oKSBtZXRob2QuCisKKy0gSXNzdWUgIzIxNTgwOiBOb3cgVGtpbnRlciBjb3JyZWN0bHkgaGFuZGxlcyBieXRlcyBhcmd1bWVudHMgcGFzc2VkIHRvIFRrLgorICBJbiBwYXJ0aWN1bGFyIHRoaXMgYWxsb3dzIHRvIGluaXRpYWxpemUgaW1hZ2VzIGZyb20gYmluYXJ5IGRhdGEuCisKKy0gSXNzdWUgIzE3MTcyOiBNYWtlIHR1cnRsZWRlbW8gc3RhcnQgYXMgYWN0aXZlIG9uIE9TIFggZXZlbiB3aGVuIHJ1biB3aXRoCisgIHN1YnByb2Nlc3MuICBQYXRjaCBieSBMaXRhIENoby4KKworLSBJc3N1ZSAjMjE3MDQ6IEZpeCBidWlsZCBlcnJvciBmb3IgX211bHRpcHJvY2Vzc2luZyB3aGVuIHNlbWFwaG9yZXMKKyAgYXJlIG5vdCBhdmFpbGFibGUuICBQYXRjaCBieSBBcmZyZXZlciBGcmVodGVzIFRhaWZlcnNhciBBcmFoZXNpcy4KKworLSBGaXggcmVwcihfc29ja2V0LnNvY2tldCkgb24gV2luZG93cyA2NC1iaXQ6IGRvbid0IGZhaWwgd2l0aCBPdmVyZmxvd0Vycm9yCisgIG9uIGNsb3NlZCBzb2NrZXQuIHJlcHIoc29ja2V0LnNvY2tldCkgYWxyZWFkeSB3b3JrcyBmaW5lLgorCistIElzc3VlICMxNjEzMzogVGhlIGFzeW5jaGF0LmFzeW5jX2NoYXQuaGFuZGxlX3JlYWQoKSBtZXRob2Qgbm93IGlnbm9yZXMKKyAgQmxvY2tpbmdJT0Vycm9yIGV4Y2VwdGlvbnMuCisKKy0gSXNzdWUgIzIyMDQ0OiBGaXhlZCBwcmVtYXR1cmUgREVDUkVGIGluIGNhbGxfdHppbmZvX21ldGhvZC4KKyAgUGF0Y2ggYnkgVG9tIEZsYW5hZ2FuLgorCistIElzc3VlICMxOTg4NDogcmVhZGxpbmU6IERpc2FibGUgdGhlIG1ldGEgbW9kaWZpZXIga2V5IGlmIHN0ZG91dCBpcyBub3QKKyAgYSB0ZXJtaW5hbCB0byBub3Qgd3JpdGUgdGhlIEFOU0kgc2VxdWVuY2UgIlwwMzNbMTAzNGgiIGludG8gc3Rkb3V0LiBUaGlzCisgIHNlcXVlbmNlIGlzIHVzZWQgb24gc29tZSB0ZXJtaW5hbCAoZXg6IFRFUk09eHRlcm0tMjU2Y29sb3IiKSB0byBlbmFibGUKKyAgc3VwcG9ydCBvZiA4IGJpdCBjaGFyYWN0ZXJzLgorCistIElzc3VlICMyMTg4ODogcGxpc3RsaWIncyBsb2FkKCkgYW5kIGxvYWRzKCkgbm93IHdvcmsgaWYgdGhlIGZtdCBwYXJhbWV0ZXIgaXMKKyAgc3BlY2lmaWVkLgorCistIElzc3VlICMyMTA0NDogdGFyZmlsZS5vcGVuKCkgbm93IGhhbmRsZXMgZmlsZW9iaiB3aXRoIGFuIGludGVnZXIgJ25hbWUnCisgIGF0dHJpYnV0ZS4gIEJhc2VkIG9uIHBhdGNoIGJ5IEFudG9pbmUgUGlldHJpLgorCistIElzc3VlICMyMTg2NzogUHJldmVudCB0dXJ0bGUgY3Jhc2ggZHVlIHRvIGludmFsaWQgdW5kbyBidWZmZXIgc2l6ZS4KKworLSBJc3N1ZSAjMTkwNzY6IERvbid0IHBhc3MgdGhlIHJlZHVuZGFudCAnZmlsZScgYXJndW1lbnQgdG8gc2VsZi5lcnJvcigpLgorCistIElzc3VlICMyMTk0MjogRml4ZWQgc291cmNlIGZpbGUgdmlld2luZyBpbiBweWRvYydzIHNlcnZlciBtb2RlIG9uIFdpbmRvd3MuCisKKy0gSXNzdWUgIzExMjU5OiBhc3luY2hhdC5hc3luY19jaGF0KCkuc2V0X3Rlcm1pbmF0b3IoKSBub3cgcmFpc2VzIGEgVmFsdWVFcnJvcgorICBpZiB0aGUgbnVtYmVyIG9mIHJlY2VpdmVkIGJ5dGVzIGlzIG5lZ2F0aXZlLgorCistIElzc3VlICMxMjUyMzogYXN5bmNoYXQuYXN5bmNfY2hhdC5wdXNoKCkgbm93IHJhaXNlcyBhIFR5cGVFcnJvciBpZiBpdCBkb2Vzbid0CisgIGdldCBhIGJ5dGVzIHN0cmluZworCistIElzc3VlICMyMTcwNzogQWRkIG1pc3Npbmcga3dvbmx5YXJnY291bnQgYXJndW1lbnQgdG8KKyAgTW9kdWxlRmluZGVyLnJlcGxhY2VfcGF0aHNfaW5fY29kZSgpLgorCistIElzc3VlICMyMDYzOTogY2FsbGluZyBQYXRoLndpdGhfc3VmZml4KCcnKSBhbGxvd3MgcmVtb3ZpbmcgdGhlIHN1ZmZpeAorICBhZ2Fpbi4gIFBhdGNoIGJ5IEp1bHkgVGlraG9ub3YuCisKKy0gSXNzdWUgIzIxNzE0OiBEaXNhbGxvdyB0aGUgY29uc3RydWN0aW9uIG9mIGludmFsaWQgcGF0aHMgdXNpbmcKKyAgUGF0aC53aXRoX25hbWUoKS4gIE9yaWdpbmFsIHBhdGNoIGJ5IEFudG9ueSBMZWUuCisKKy0gSXNzdWUgIzIxODk3OiBGaXggYSBjcmFzaCB3aXRoIHRoZSBmX2xvY2FscyBhdHRyaWJ1dGUgd2l0aCBjbG9zdXJlCisgIHZhcmlhYmxlcyB3aGVuIGZyYW1lLmNsZWFyKCkgaGFzIGJlZW4gY2FsbGVkLgorCistIElzc3VlICMyMTE1MTogRml4ZWQgYSBzZWdmYXVsdCBpbiB0aGUgd2lucmVnIG1vZHVsZSB3aGVuIGBgTm9uZWBgIGlzIHBhc3NlZAorICBhcyBhIGBgUkVHX0JJTkFSWWBgIHZhbHVlIHRvIFNldFZhbHVlRXguICBQYXRjaCBieSBKb2huIEVocmVzbWFuLgorCistIElzc3VlICMyMTA5MDogaW8uRmlsZUlPLnJlYWRhbGwoKSBkb2VzIG5vdCBpZ25vcmUgSS9PIGVycm9ycyBhbnltb3JlLiBCZWZvcmUsCisgIGl0IGlnbm9yZWQgSS9PIGVycm9ycyBpZiBhdCBsZWFzdCB0aGUgZmlyc3QgQyBjYWxsIHJlYWQoKSBzdWNjZWVkLgorCistIElzc3VlICMyMTc4MTogc3NsLlJBTkRfYWRkKCkgbm93IHN1cHBvcnRzIHN0cmluZ3MgbG9uZ2VyIHRoYW4gMiBHQi4KKworLSBJc3N1ZSAjMTE0NTM6IGFzeW5jb3JlOiBlbWl0IGEgUmVzb3VyY2VXYXJuaW5nIHdoZW4gYW4gdW5jbG9zZWQgZmlsZV93cmFwcGVyCisgIG9iamVjdCBpcyBkZXN0cm95ZWQuIFRoZSBkZXN0cnVjdG9yIG5vdyBjbG9zZXMgdGhlIGZpbGUgaWYgbmVlZGVkLiBUaGUKKyAgY2xvc2UoKSBtZXRob2QgY2FuIG5vdyBiZSBjYWxsZWQgdHdpY2U6IHRoZSBzZWNvbmQgY2FsbCBkb2VzIG5vdGhpbmcuCisKKy0gSXNzdWUgIzIxODU4OiBCZXR0ZXIgaGFuZGxpbmcgb2YgUHl0aG9uIGV4Y2VwdGlvbnMgaW4gdGhlIHNxbGl0ZTMgbW9kdWxlLgorCistIElzc3VlICMyMTQ3NjogTWFrZSBzdXJlIHRoZSBlbWFpbC5wYXJzZXIuQnl0ZXNQYXJzZXIgVGV4dElPV3JhcHBlciBpcworICBkaXNjYXJkZWQgYWZ0ZXIgcGFyc2luZywgc28gdGhlIGlucHV0IGZpbGUgaXNuJ3QgdW5leHBlY3RlZGx5IGNsb3NlZC4KKworLSBJc3N1ZSAjMjE3Mjk6IFVzZWQgdGhlICJ3aXRoIiBzdGF0ZW1lbnQgaW4gdGhlIGRibS5kdW1iIG1vZHVsZSB0byBlbnN1cmUKKyAgZmlsZXMgY2xvc2luZy4gIFBhdGNoIGJ5IENsYXVkaXUgUG9wYS4KKworLSBJc3N1ZSAjMjE0OTE6IHNvY2tldHNlcnZlcjogRml4IGEgcmFjZSBjb25kaXRpb24gaW4gY2hpbGQgcHJvY2Vzc2VzIHJlYXBpbmcuCisKKy0gSXNzdWUgIzIxODMyOiBSZXF1aXJlIG5hbWVkIHR1cGxlIGlucHV0cyB0byBiZSBleGFjdCBzdHJpbmdzLgorCistIElzc3VlICMxOTE0NTogVGhlIHRpbWVzIGFyZ3VtZW50IGZvciBpdGVydG9vbHMucmVwZWF0IG5vdyBoYW5kbGVzCisgIG5lZ2F0aXZlIHZhbHVlcyB0aGUgc2FtZSB3YXkgZm9yIGtleXdvcmQgYXJndW1lbnRzIGFzIGl0IGRvZXMgZm9yCisgIHBvc2l0aW9uYWwgYXJndW1lbnRzLgorCistIElzc3VlICMyMTgxMjogdHVydGxlLnNoYXBldHJhbnNmb3JtIGRpZCBub3QgdHJhbmZvcm0gdGhlIHR1cnRsZSBvbiB0aGUKKyAgZmlyc3QgY2FsbC4gIChJc3N1ZSBpZGVudGlmaWVkIGFuZCBmaXhlZCBieSBMaXRhIENoby4pCisKKy0gSXNzdWUgIzIxNjM1OiBUaGUgZGlmZmxpYiBTZXF1ZW5jZU1hdGNoZXIuZ2V0X21hdGNoaW5nX2Jsb2NrcygpIG1ldGhvZAorICBjYWNoZSBkaWRuJ3QgbWF0Y2ggdGhlIGFjdHVhbCByZXN1bHQuICBUaGUgZm9ybWVyIHdhcyBhIGxpc3Qgb2YgdHVwbGVzCisgIGFuZCB0aGUgbGF0dGVyIHdhcyBhIGxpc3Qgb2YgbmFtZWQgdHVwbGVzLgorCistIElzc3VlICMyMTcyMjogVGhlIGRpc3R1dGlscyAidXBsb2FkIiBjb21tYW5kIG5vdyBleGl0cyB3aXRoIGEgbm9uLXplcm8KKyAgcmV0dXJuIGNvZGUgd2hlbiB1cGxvYWRpbmcgZmFpbHMuICBQYXRjaCBieSBNYXJ0aW4gRGVuZ2xlci4KKworLSBJc3N1ZSAjMjE3MjM6IGFzeW5jaW8uUXVldWU6IHN1cHBvcnQgYW55IHR5cGUgb2YgbnVtYmVyIChleDogZmxvYXQpIGZvciB0aGUKKyAgbWF4aW11bSBzaXplLiBQYXRjaCB3cml0dGVuIGJ5IFZhanJhc2t5IEtvay4KKworLSBJc3N1ZSAjMjEzMjY6IEFkZCBhIG5ldyBpc19jbG9zZWQoKSBtZXRob2QgdG8gYXN5bmNpby5CYXNlRXZlbnRMb29wLgorICBydW5fZm9yZXZlcigpIGFuZCBydW5fdW50aWxfY29tcGxldGUoKSBtZXRob2RzIG9mIGFzeW5jaW8uQmFzZUV2ZW50TG9vcCBub3cKKyAgcmFpc2UgYW4gZXhjZXB0aW9uIGlmIHRoZSBldmVudCBsb29wIHdhcyBjbG9zZWQuCisKKy0gSXNzdWUgIzIxNzc0OiBGaXhlZCBOYW1lRXJyb3IgZm9yIGFuIGluY29ycmVjdCB2YXJpYWJsZSByZWZlcmVuY2UgaW4gdGhlCisgIFhNTCBNaW5pZG9tIGNvZGUgZm9yIGNyZWF0aW5nIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb25zLgorICAoRm91bmQgYW5kIGZpeGVkIGJ5IENsYXVkaXUgUG9wYS4pCisKIC0gSXNzdWUgIzIxNzY2OiBQcmV2ZW50IGEgc2VjdXJpdHkgaG9sZSBpbiBDR0lIVFRQU2VydmVyIGJ5IFVSTCB1bnF1b3RpbmcgcGF0aHMKICAgYmVmb3JlIGNoZWNraW5nIGZvciBhIENHSSBzY3JpcHQgYXQgdGhhdCBwYXRoLgogCistIElzc3VlICMyMTMxMDogRml4ZWQgcG9zc2libGUgcmVzb3VyY2UgbGVhayBpbiBmYWlsZWQgb3BlbigpLgorCistIElzc3VlICMyMTY3NzogRml4ZWQgY2hhaW5pbmcgbm9ubm9ybWFsaXplZCBleGNlcHRpb25zIGluIGlvIGNsb3NlKCkgbWV0aG9kcy4KKworLSBJc3N1ZSAjMTE3MDk6IEZpeCB0aGUgcHlkb2MuaGVscCBmdW5jdGlvbiB0byBub3QgZmFpbCB3aGVuIHN5cy5zdGRpbiBpcyBub3QgYQorICB2YWxpZCBmaWxlLgorCistIElzc3VlICMxMzIyMzogRml4IHB5ZG9jLndyaXRlZG9jIHNvIHRoYXQgdGhlIEhUTUwgZG9jdW1lbnRhdGlvbiBmb3IgbWV0aG9kcworICB0aGF0IHVzZSAnc2VsZicgaW4gdGhlIGV4YW1wbGUgY29kZSBpcyBnZW5lcmF0ZWQgY29ycmVjdGx5LgorCistIElzc3VlICMyMTQ2MzogSW4gdXJsbGliLnJlcXVlc3QsIGZpeCBwcnVuaW5nIG9mIHRoZSBGVFAgY2FjaGUuCisKKy0gSXNzdWUgIzIxNjE4OiBUaGUgc3VicHJvY2VzcyBtb2R1bGUgY291bGQgZmFpbCB0byBjbG9zZSBvcGVuIGZkcyB0aGF0IHdlcmUKKyAgaW5oZXJpdGVkIGJ5IHRoZSBjYWxsaW5nIHByb2Nlc3MgYW5kIGFscmVhZHkgaGlnaGVyIHRoYW4gUE9TSVggcmVzb3VyY2UKKyAgbGltaXRzIHdvdWxkIG90aGVyd2lzZSBhbGxvdy4gIE9uIHN5c3RlbXMgd2l0aCBhIGZ1bmN0aW9uaW5nIC9wcm9jL3NlbGYvZmQKKyAgb3IgL2Rldi9mZCBpbnRlcmZhY2UgdGhlIG1heCBpcyBub3cgaWdub3JlZCBhbmQgYWxsIGZkcyBhcmUgY2xvc2VkLgorCistIElzc3VlICMyMTU1MjogRml4ZWQgcG9zc2libGUgaW50ZWdlciBvdmVyZmxvdyBvZiB0b28gbG9uZyBzdHJpbmcgbGVuZ3RocyBpbgorICB0aGUgdGtpbnRlciBtb2R1bGUgb24gNjQtYml0IHBsYXRmb3Jtcy4KKworLSBJc3N1ZSAjMTQzMTU6IFRoZSB6aXBmaWxlIG1vZHVsZSBub3cgaWdub3JlcyBleHRyYSBmaWVsZHMgaW4gdGhlIGNlbnRyYWwKKyAgZGlyZWN0b3J5IHRoYXQgYXJlIHRvbyBzaG9ydCB0byBiZSBwYXJzZWQgaW5zdGVhZCBvZiBsZXR0aW5nIGEgc3RydWN0LnVucGFjaworICBlcnJvciBidWJibGUgdXAgYXMgdGhpcyAiYmFkIGRhdGEiIGFwcGVhcnMgaW4gbWFueSByZWFsIHdvcmxkIHppcCBmaWxlcyBpbgorICB0aGUgd2lsZCBhbmQgaXMgaWdub3JlZCBieSBvdGhlciB6aXAgdG9vbHMuCisKKy0gSXNzdWUgIzIxNDAyOiB0a2ludGVyLnR0ayBub3cgd29ya3Mgd2hlbiBkZWZhdWx0IHJvb3Qgd2luZG93IGlzIG5vdCBzZXQuCisKKy0gSXNzdWUgIzEwMjAzOiBzcWxpdGUzLlJvdyBub3cgdHJ1bHkgc3VwcG9ydHMgc2VxdWVuY2UgcHJvdG9jb2wuICBJbiBwYXJ0aWN1bGFyCisgIGl0IHN1cHBvcnRzIHJldmVyc2UoKSBhbmQgbmVnYXRpdmUgaW5kaWNlcy4gIE9yaWdpbmFsIHBhdGNoIGJ5IENsYXVkaXUgUG9wYS4KKworLSBJc3N1ZSAjMTg4MDc6IElmIGNvcHlpbmcgKG5vIHN5bWxpbmtzKSBzcGVjaWZpZWQgZm9yIGEgdmVudiwgdGhlbiB0aGUgcHl0aG9uCisgIGludGVycHJldGVyIGFsaWFzZXMgKHB5dGhvbiwgcHl0aG9uMykgYXJlIG5vdyBjcmVhdGVkIGJ5IGNvcHlpbmcgcmF0aGVyIHRoYW4KKyAgc3ltbGlua2luZy4KKworLSBJc3N1ZSAjMTQ3MTA6IHBrZ3V0aWwuZ2V0X2xvYWRlcigpIG5vIGxvbmdlciByYWlzZXMgYW4gZXhjZXB0aW9uIHdoZW4gTm9uZSBpcworICBmb3VuZCBpbiBzeXMubW9kdWxlcy4KKworLSBJc3N1ZSAjMTQ3MTA6IHBrZ3V0aWwuZmluZF9sb2FkZXIoKSBubyBsb25nZXIgcmFpc2VzIGFuIGV4Y2VwdGlvbiB3aGVuIGEKKyAgbW9kdWxlIGRvZXNuJ3QgZXhpc3QuCisKKy0gSXNzdWUgIzIxNDgxOiBBcmdwYXJzZSBlcXVhbGl0eSBhbmQgaW5lcXVhbGl0eSB0ZXN0cyBub3cgcmV0dXJuCisgIE5vdEltcGxlbWVudGVkIHdoZW4gY29tcGFyaW5nIHRvIGFuIHVua25vd24gdHlwZS4KKworLSBJc3N1ZSAjODc0MzogRml4IGludGVyb3BlcmFiaWxpdHkgYmV0d2VlbiBzZXQgb2JqZWN0cyBhbmQgdGhlCisgIGNvbGxlY3Rpb25zLlNldCgpIGFic3RyYWN0IGJhc2UgY2xhc3MuCisKKy0gSXNzdWUgIzEzMzU1OiByYW5kb20udHJpYW5ndWxhcigpIG5vIGxvbmdlciBmYWlscyB3aXRoIGEgWmVyb0RpdmlzaW9uRXJyb3IKKyAgd2hlbiBsb3cgZXF1YWxzIGhpZ2guCisKKy0gSXNzdWUgIzIxNTM4OiBUaGUgcGxpc3RsaWIgbW9kdWxlIG5vdyBzdXBwb3J0cyBsb2FkaW5nIG9mIGJpbmFyeSBwbGlzdCBmaWxlcworICB3aGVuIHJlZmVyZW5jZSBvciBvZmZzZXQgc2l6ZSBpcyBub3QgYSBwb3dlciBvZiB0d28uCisKKy0gSXNzdWUgIzIxODAxOiBWYWxpZGF0ZSB0aGF0IF9fc2lnbmF0dXJlX18gaXMgTm9uZSBvciBhbiBpbnN0YW5jZSBvZiBTaWduYXR1cmUuCisKKy0gSXNzdWUgIzIxOTIzOiBQcmV2ZW50IEF0dHJpYnV0ZUVycm9yIGluIGRpc3R1dGlscy5zeXNjb25maWcuY3VzdG9taXplX2NvbXBpbGVyCisgIGR1ZSB0byBwb3NzaWJsZSB1bmluaXRpYWxpemVkIF9jb25maWdfdmFycy4KKworLSBJc3N1ZSAjMjEzMjM6IEZpeCBodHRwLnNlcnZlciB0byBhZ2FpbiBoYW5kbGUgc2NyaXB0cyBpbiBDR0kgc3ViZGlyZWN0b3JpZXMsCisgIGJyb2tlbiBieSB0aGUgZml4IGZvciBzZWN1cml0eSBpc3N1ZSAjMTk0MzUuICBQYXRjaCBieSBaYWNoIEJ5cm5lLgorCitFeHRlbnNpb24gTW9kdWxlcworLS0tLS0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMjIxNzY6IFVwZGF0ZSB0aGUgY3R5cGVzIG1vZHVsZSdzIGxpYmZmaSB0byB2My4xLiAgVGhpcyByZWxlYXNlCisgIGFkZHMgc3VwcG9ydCBmb3IgdGhlIExpbnV4IEFBcmNoNjQgYW5kIFBPV0VSUEMgRUxGIEFCSXYyIGxpdHRsZSBlbmRpYW4KKyAgYXJjaGl0ZWN0dXJlcy4KKworQnVpbGQKKy0tLS0tCisKKy0gSXNzdWUgIzE1NjYxOiBweXRob24ub3JnIE9TIFggaW5zdGFsbGVycyBhcmUgbm93IGRpc3RyaWJ1dGVkIGFzIHNpZ25lZAorICBpbnN0YWxsZXIgcGFja2FnZXMgY29tcGF0aWJsZSB3aXRoIHRoZSBHYXRla2VlcGVyIHNlY3VyaXR5IGZlYXR1cmUuCisKKy0gSXNzdWUgIzIxOTU4OiBEZWZpbmUgSEFWRV9ST1VORCB3aGVuIGJ1aWxkaW5nIHdpdGggVmlzdWFsIFN0dWRpbyAyMDEzIGFuZAorICBhYm92ZS4gIFBhdGNoIGJ5IFphY2hhcnkgVHVybmVyLgorCistIElzc3VlICMxNTc1OTogIm1ha2Ugc3VzcGljaW91cyIsICJtYWtlIGxpbmtjaGVjayIgYW5kICJtYWtlIGRvY3Rlc3QiIGluIERvYy8KKyAgbm93IGRpc3BsYXkgc3BlY2lhbCBtZXNzYWdlIHdoZW4gYW5kIG9ubHkgd2hlbiB0aGVyZSBhcmUgZmFpbHVyZXMuCisKKy0gSXNzdWUgIzE3MDk1OiBGaXggTW9kdWxlcy9TZXR1cCAqc2hhcmVkKiBzdXBwb3J0LgorCistIElzc3VlICMyMTgxMTogQW50aWNpcGF0ZWQgZml4ZXMgdG8gc3VwcG9ydCBPUyBYIHZlcnNpb25zID4gMTAuOS4KKworLSBJc3N1ZSAjMjExNjY6IFByZXZlbnQgcG9zc2libGUgc2VnZmF1bHRzIGFuZCBvdGhlciByYW5kb20gZmFpbHVyZXMgb2YKKyAgcHl0aG9uIC0tZ2VuZXJhdGUtcG9zaXgtdmFycyBpbiBweWJ1aWxkZGlyLnR4dCBidWlsZCB0YXJnZXQuCisKK0lETEUKKy0tLS0KKworLSBJc3N1ZSAjMTczOTA6IEFkanVzdCBFZGl0b3Igd2luZG93IHRpdGxlOyByZW1vdmUgJ1B5dGhvbicsCisgIG1vdmUgdmVyc2lvbiB0byBlbmQuCisKKy0gSXNzdWUgIzE0MTA1OiBJZGxlIGRlYnVnZ2VyIGJyZWFrcG9pbnRzIG5vIGxvbmdlciBkaXNhcHBlYXIKKyAgd2hlbiBpbnNldGluZyBvciBkZWxldGluZyBsaW5lcy4KKworLSBJc3N1ZSAjMTcxNzI6IFR1cnRsZWRlbW8gY2FuIG5vdyBiZSBydW4gZnJvbSBJZGxlLgorICBDdXJyZW50bHksIHRoZSBlbnRyeSBpcyBvbiB0aGUgSGVscCBtZW51LCBidXQgaXQgbWF5IG1vdmUgdG8gUnVuLgorICBQYXRjaCBieSBSYW1jaGFuZHJhIEFwdCBhbmQgTGl0YSBDaG8uCisKKy0gSXNzdWUgIzIxNzY1OiBBZGQgc3VwcG9ydCBmb3Igbm9uLWFzY2lpIGlkZW50aWZpZXJzIHRvIEh5cGVyUGFyc2VyLgorCistIElzc3VlICMyMTk0MDogQWRkIHVuaXR0ZXN0IGZvciBXaWRnZXRSZWRpcmVjdG9yLiBJbml0aWFsIHBhdGNoIGJ5IFNhaW1hZGhhdgorICBIZWJsaWthci4KKworLSBJc3N1ZSAjMTg1OTI6IEFkZCB1bml0dGVzdCBmb3IgU2VhcmNoRGlhbG9nQmFzZS4gUGF0Y2ggYnkgUGhpbCBXZWJzdGVyLgorCistIElzc3VlICMyMTY5NDogQWRkIHVuaXR0ZXN0IGZvciBQYXJlbk1hdGNoLiBQYXRjaCBieSBTYWltYWRoYXYgSGVibGlrYXIuCisKKy0gSXNzdWUgIzIxNjg2OiBhZGQgdW5pdHRlc3QgZm9yIEh5cGVyUGFyc2VyLiBPcmlnaW5hbCBwYXRjaCBieSBTYWltYWRoYXYKKyAgSGVibGlrYXIuCisKKy0gSXNzdWUgIzEyMzg3OiBBZGQgbWlzc2luZyB1cHBlcihsb3dlciljYXNlIHZlcnNpb25zIG9mIGRlZmF1bHQgV2luZG93cyBrZXkKKyAgYmluZGluZ3MgZm9yIElkbGUgc28gQ2FwcyBMb2NrIGRvZXMgbm90IGRpc2FibGUgdGhlbS4gUGF0Y2ggYnkgUm9nZXIgU2Vyd3kuCisKKy0gSXNzdWUgIzIxNjk1OiBDbG9zaW5nIGEgRmluZC1pbi1maWxlcyBvdXRwdXQgd2luZG93IHdoaWxlIHRoZSBzZWFyY2ggaXMKKyAgc3RpbGwgaW4gcHJvZ3Jlc3Mgbm8gbG9uZ2VyIGNsb3NlcyBJZGxlLgorCistIElzc3VlICMxODkxMDogQWRkIHVuaXR0ZXN0IGZvciB0ZXh0Vmlldy4gUGF0Y2ggYnkgUGhpbCBXZWJzdGVyLgorCistIElzc3VlICMxODI5MjogQWRkIHVuaXR0ZXN0IGZvciBBdXRvRXhwYW5kLiBQYXRjaCBieSBTYWloYWRoYXYgSGVibGlrYXIuCisKKy0gSXNzdWUgIzE4NDA5OiBBZGQgdW5pdHRlc3QgZm9yIEF1dG9Db21wbGV0ZS4gUGF0Y2ggYnkgUGhpbCBXZWJzdGVyLgorCitUZXN0cworLS0tLS0KKworLSBJc3N1ZSAjMjIxNjY6IFdpdGggdGhlIGFzc2lzdGFuY2Ugb2YgYSBuZXcgaW50ZXJuYWwgX2NvZGVjcy5fZm9yZ2V0X2NvZGVjCisgIGhlbHBpbmcgZnVuY3Rpb24sIHRlc3RfY29kZWNzIG5vdyBjbGVhcnMgdGhlIGVuY29kaW5nIGNhY2hlcyB0byBhdm9pZCB0aGUKKyAgYXBwZWFyYW5jZSBvZiBhIHJlZmVyZW5jZSBsZWFrCisKKy0gSXNzdWUgIzIyMjM2OiBUa2ludGVyIHRlc3RzIG5vdyBkb24ndCByZXVzZSBkZWZhdWx0IHJvb3Qgd2luZG93LiAgTmV3IHJvb3QKKyAgd2luZG93IGlzIGNyZWF0ZWQgZm9yIGV2ZXJ5IHRlc3QgY2xhc3MuCisKKy0gSXNzdWUgIzIwNzQ2OiBGaXggdGVzdF9wZGIgdG8gcnVuIGluIHJlZmxlYWsgbW9kZSAoLVIpLiAgUGF0Y2ggYnkgWGF2aWVyCisgIGRlIEdheWUuCisKKy0gSXNzdWUgIzIyMDYwOiB0ZXN0X2N0eXBlcyBoYXMgYmVlbiBzb21ld2hhdCBjbGVhbmVkIHVwIGFuZCBzaW1wbGlmaWVkOyBpdAorICBub3cgdXNlcyB1bml0dGVzdCB0ZXN0IGRpc2NvdmVyeSB0byBmaW5kIGl0cyB0ZXN0cy4KKworLSBJc3N1ZSAjMjIxMDQ6IHJlZ3J0ZXN0LnB5IG5vIGxvbmdlciBob2xkcyBhIHJlZmVyZW5jZSB0byB0aGUgc3VpdGUgb2YgdGVzdHMKKyAgbG9hZGVkIGZyb20gdGVzdCBtb2R1bGVzIHRoYXQgZG9uJ3QgZGVmaW5lIHRlc3RfbWFpbigpLgorCistIElzc3VlICMyMjAwMjogQWRkZWQgYGBsb2FkX3BhY2thZ2VfdGVzdHNgYCBmdW5jdGlvbiB0byB0ZXN0LnN1cHBvcnQgYW5kIHVzZWQKKyAgaXQgdG8gaW1wbGVtZW50L2F1Z21lbnQgdGVzdCBkaXNjb3ZlcnkgaW4gdGVzdF9hc3luY2lvLCB0ZXN0X2VtYWlsLAorICB0ZXN0X2ltcG9ydGxpYiwgdGVzdF9qc29uLCBhbmQgdGVzdF90b29scy4KKworLSBJc3N1ZSAjMjE5NzY6IEZpeCB0ZXN0X3NzbCB0byBhY2NlcHQgTGlicmVTU0wgdmVyc2lvbiBzdHJpbmdzLiAgVGhhbmtzCisgIHRvIFdpbGxpYW0gT3JyLgorCistIElzc3VlICMyMTkxODogQ29udmVydGVkIHRlc3RfdG9vbHMgZnJvbSBhIG1vZHVsZSB0byBhIHBhY2thZ2UgY29udGFpbmluZworICBzZXBhcmF0ZSB0ZXN0IGZpbGVzIGZvciBlYWNoIHRlc3RlZCBzY3JpcHQuCisKKy0gSXNzdWUgIzIwMTU1OiBDaGFuZ2VkIEhUVFAgbWV0aG9kIG5hbWVzIGluIGZhaWxpbmcgdGVzdHMgaW4gdGVzdF9odHRwc2VydmVycworICBzbyB0aGF0IHBhY2tldCBmaWx0ZXJpbmcgc29mdHdhcmUgKHNwZWNpZmljYWxseSBXaW5kb3dzIEJhc2UgRmlsdGVyaW5nIEVuZ2luZSkKKyAgZG9lcyBub3QgaW50ZXJmZXJlIHdpdGggdGhlIHRyYW5zYWN0aW9uIHNlbWFudGljcyBleHBlY3RlZCBieSB0aGUgdGVzdHMuCisKKy0gSXNzdWUgIzE5NDkzOiBSZWZhY3RvcmVkIHRoZSBjdHlwZXMgdGVzdCBwYWNrYWdlIHRvIHNraXAgdGVzdHMgZXhwbGljaXRseQorICByYXRoZXIgdGhhbiBzaWxlbnRseS4KKworLSBJc3N1ZSAjMTg0OTI6IEFsbCByZXNvdXJjZXMgYXJlIG5vdyBhbGxvd2VkIHdoZW4gdGVzdHMgYXJlIG5vdCBydW4gYnkKKyAgcmVncnRlc3QucHkuCisKKy0gSXNzdWUgIzIxNjM0OiBGaXggcHlzdG9uZSBtaWNyby1iZW5jaG1hcms6IHVzZSBmbG9vciBkaXZpc2lvbiBpbnN0ZWFkIG9mIHRydWUKKyAgZGl2aXNpb24gdG8gYmVuY2htYXJrIGludGVnZXJzIGluc3RlYWQgb2YgZmxvYXRpbmcgcG9pbnQgbnVtYmVycy4gU2V0IHB5c3RvbmUKKyAgdmVyc2lvbiB0byAxLjIuIFBhdGNoIHdyaXR0ZW4gYnkgTGVubmFydCBSZWdlYnJvLgorCistIElzc3VlICMyMTYwNTogQWRkZWQgdGVzdHMgZm9yIFRraW50ZXIgaW1hZ2VzLgorCistIElzc3VlICMyMTQ5MzogQWRkZWQgdGVzdCBmb3IgbnRwYXRoLmV4cGFuZHVzZXIoKS4gIE9yaWdpbmFsIHBhdGNoIGJ5CisgIENsYXVkaXUgUG9wYS4KKworLSBJc3N1ZSAjMTk5MjU6IEFkZGVkIHRlc3RzIGZvciB0aGUgc3B3ZCBtb2R1bGUuIE9yaWdpbmFsIHBhdGNoIGJ5IFZhanJhc2t5IEtvay4KKworLSBJc3N1ZSAjMjE1MjI6IEFkZGVkIFRraW50ZXIgdGVzdHMgZm9yIExpc3Rib3guaXRlbWNvbmZpZ3VyZSgpLAorICBQYW5lZFdpbmRvdy5wYW5lY29uZmlndXJlKCksIGFuZCBNZW51LmVudHJ5Y29uZmlndXJlKCkuCisKK0RvY3VtZW50YXRpb24KKy0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMjE3Nzc6IFRoZSBiaW5hcnkgc2VxdWVuY2UgbWV0aG9kcyBvbiBieXRlcyBhbmQgYnl0ZWFycmF5IGFyZSBub3cKKyAgZG9jdW1lbnRlZCBleHBsaWNpdGx5LCByYXRoZXIgdGhhbiBhc3N1bWluZyB1c2VycyB3aWxsIGJlIGFibGUgdG8gZGVyaXZlCisgIHRoZSBleHBlY3RlZCBiZWhhdmlvdXIgZnJvbSB0aGUgYmVoYXZpb3VyIG9mIHRoZSBjb3JyZXNwb25kaW5nIHN0ciBtZXRob2RzLgorCitXaW5kb3dzCistLS0tLS0tCisKKy0gSXNzdWUgIzIxNjcxLCAjMjIxNjAsIENWRS0yMDE0LTAyMjQ6IFRoZSBidW5kbGVkIHZlcnNpb24gb2YgT3BlblNTTCBoYXMgYmVlbgorICB1cGRhdGVkIHRvIDEuMC4xaS4KKworLSBJc3N1ZSAjMTA3NDc6IFVzZSB2ZXJzaW9uZWQgbGFiZWxzIGluIHRoZSBXaW5kb3dzIHN0YXJ0IG1lbnUuCisgIFBhdGNoIGJ5IE9saXZlIEtpbGJ1cm4uCisKK1Rvb2xzL0RlbW9zCistLS0tLS0tLS0tLQorCistIElzc3VlICMyMjIwMTogQ29tbWFuZC1saW5lIGludGVyZmFjZSBvZiB0aGUgemlwZmlsZSBtb2R1bGUgbm93IGNvcnJlY3RseQorICBleHRyYWN0cyBaSVAgZmlsZXMgd2l0aCBkaXJlY3RvcnkgZW50cmllcy4gIFBhdGNoIGJ5IFJ5YW4gV2lsc29uLgorCistIElzc3VlICMyMTkwNjogTWFrZSBUb29scy9zY3JpcHRzL21kNXN1bS5weSB3b3JrIGluIFB5dGhvbiAzLgorICBQYXRjaCBieSBaYWNoYXJ5IFdhcmUuCisKKy0gSXNzdWUgIzIxNjI5OiBGaXggQXJndW1lbnQgQ2xpbmljJ3MgIi0tY29udmVydGVycyIgZmVhdHVyZS4KKworCitXaGF0J3MgTmV3IGluIFB5dGhvbiAzLjQuMT8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitSZWxlYXNlIGRhdGU6IDIwMTQtMDUtMTgKKworQ29yZSBhbmQgQnVpbHRpbnMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzIxNDE4OiBGaXggYSBjcmFzaCBpbiB0aGUgYnVpbHRpbiBmdW5jdGlvbiBzdXBlcigpIHdoZW4gY2FsbGVkIHdpdGhvdXQKKyAgYXJndW1lbnQgYW5kIHdpdGhvdXQgY3VycmVudCBmcmFtZSAoZXg6IGVtYmVkZGVkIFB5dGhvbikuCisKKy0gSXNzdWUgIzIxNDI1OiBGaXggZmx1c2hpbmcgb2Ygc3RhbmRhcmQgc3RyZWFtcyBpbiB0aGUgaW50ZXJhY3RpdmUKKyAgaW50ZXJwcmV0ZXIuCisKKy0gSXNzdWUgIzIxNDM1OiBJbiByYXJlIGNhc2VzLCB3aGVuIHJ1bm5pbmcgZmluYWxpemVycyBvbiBvYmplY3RzIGluIGN5Y2xpYworICB0cmFzaCBhIGJhZCBwb2ludGVyIGRlcmVmZXJlbmNlIGNvdWxkIG9jY3VyIGR1ZSB0byBhIHN1YnRsZSBmbGF3IGluCisgIGludGVybmFsIGl0ZXJhdGlvbiBsb2dpYy4KKworTGlicmFyeQorLS0tLS0tLQorCistIElzc3VlICMxMDc0NDogRml4IFBFUCAzMTE4IGZvcm1hdCBzdHJpbmdzIG9uIGN0eXBlcyBvYmplY3RzIHdpdGggYSBub250cml2aWFsCisgIHNoYXBlLgorCistIElzc3VlICMyMDk5ODogRml4ZWQgcmUuZnVsbG1hdGNoKCkgb2YgcmVwZWF0ZWQgc2luZ2xlIGNoYXJhY3RlciBwYXR0ZXJuCisgIHdpdGggaWdub3JlIGNhc2UuICBPcmlnaW5hbCBwYXRjaCBieSBNYXR0aGV3IEJhcm5ldHQuCisKKy0gSXNzdWUgIzIxMDc1OiBmaWxlaW5wdXQuRmlsZUlucHV0IG5vdyByZWFkcyBieXRlcyBmcm9tIHN0YW5kYXJkIHN0cmVhbSBpZgorICBiaW5hcnkgbW9kZSBpcyBzcGVjaWZpZWQuICBQYXRjaCBieSBTYW0gS2ltYnJlbC4KKworLSBJc3N1ZSAjMjEzOTY6IEZpeCBUZXh0SU9XcmFwcGVyKC4uLiwgd3JpdGVfdGhyb3VnaD1UcnVlKSB0byBub3QgZm9yY2UgYQorICBmbHVzaCgpIG9uIHRoZSB1bmRlcmx5aW5nIGJpbmFyeSBzdHJlYW0uICBQYXRjaCBieSBha2lyYS4KKworLSBJc3N1ZSAjMjE0NzA6IERvIGEgYmV0dGVyIGpvYiBzZWVkaW5nIHRoZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBieQorICB1c2luZyBlbm91Z2ggYnl0ZXMgdG8gc3BhbiB0aGUgZnVsbCBzdGF0ZSBzcGFjZSBvZiB0aGUgTWVyc2VubmUgVHdpc3Rlci4KKworLSBJc3N1ZSAjMjEzOTg6IEZpeCBhbiB1bmljb2RlIGVycm9yIGluIHRoZSBweWRvYyBwYWdlciB3aGVuIHRoZSBkb2N1bWVudGF0aW9uCisgIGNvbnRhaW5zIGNoYXJhY3RlcnMgbm90IGVuY29kYWJsZSB0byB0aGUgc3Rkb3V0IGVuY29kaW5nLgorCitUZXN0cworLS0tLS0KKworLSBJc3N1ZSAjMTc3NTY6IEZpeCB0ZXN0X2NvZGUgdGVzdCB3aGVuIHJ1biBmcm9tIHRoZSBpbnN0YWxsZWQgbG9jYXRpb24uCisKKy0gSXNzdWUgIzE3NzUyOiBGaXggZGlzdHV0aWxzIHRlc3RzIHdoZW4gcnVuIGZyb20gdGhlIGluc3RhbGxlZCBsb2NhdGlvbi4KKworSURMRQorLS0tLQorCistIElzc3VlICMxODEwNDogQWRkIGlkbGVsaWIvaWRsZV90ZXN0L2h0ZXN0LnB5IHdpdGggYSBmZXcgc2FtcGxlIHRlc3RzIHRvIGJlZ2luCisgIGNvbnNvbGlkYXRpbmcgYW5kIGltcHJvdmluZyBodW1hbi12YWxpZGF0ZWQgdGVzdHMgb2YgSWRsZS4gQ2hhbmdlIG90aGVyIGZpbGVzCisgIGFzIG5lZWRlZCB0byB3b3JrIHdpdGggaHRlc3QuICBSdW5uaW5nIHRoZSBtb2R1bGUgYXMgX19tYWluX18gcnVucyBhbGwgdGVzdHMuCisKKworV2hhdCdzIE5ldyBpbiBQeXRob24gMy40LjFyYzE/Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworUmVsZWFzZSBkYXRlOiAyMDE0LTA1LTA1CisKK0NvcmUgYW5kIEJ1aWx0aW5zCistLS0tLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMyMTI3NDogRGVmaW5lIFBBVEhfTUFYIGZvciBHTlUvSHVyZCBpbiBQeXRob24vcHl0aG9ucnVuLmMuCisKKy0gSXNzdWUgIzIxMjA5OiBGaXggc2VuZGluZyB0dXBsZXMgdG8gY3VzdG9tIGdlbmVyYXRvciBvYmplY3RzIHdpdGggdGhlIHlpZWxkCisgIGZyb20gc3ludGF4LgorCistIElzc3VlICMyMTEzNDogRml4IHNlZ2ZhdWx0IHdoZW4gc3RyIGlzIGNhbGxlZCBvbiBhbiB1bmluaXRpYWxpemVkCisgIFVuaWNvZGVFbmNvZGVFcnJvciwgVW5pY29kZURlY29kZUVycm9yLCBvciBVbmljb2RlVHJhbnNsYXRlRXJyb3Igb2JqZWN0LgorCistIElzc3VlICMxOTUzNzogRml4IFB5VW5pY29kZV9EQVRBKCkgYWxpZ25tZW50IHVuZGVyIG02OGsuICBQYXRjaCBieQorICBBbmRyZWFzIFNjaHdhYi4KKworLSBJc3N1ZSAjMjA5Mjk6IEFkZCBhIHR5cGUgY2FzdCB0byBhdm9pZCBzaGlmdGluZyBhIG5lZ2F0aXZlIG51bWJlci4KKworLSBJc3N1ZSAjMjA3MzE6IFByb3Blcmx5IHBvc2l0aW9uIGluIHNvdXJjZSBjb2RlIGZpbGVzIGV2ZW4gaWYgdGhleQorICBhcmUgb3BlbmVkIGluIHRleHQgbW9kZS4gUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMjA2Mzc6IEtleS1zaGFyaW5nIG5vdyBhbHNvIHdvcmtzIGZvciBpbnN0YW5jZSBkaWN0aW9uYXJpZXMgb2YKKyAgc3ViY2xhc3Nlcy4gIFBhdGNoIGJ5IFBldGVyIEluZ2VicmV0c29uLgorCistIElzc3VlICMxMjU0NjogQWxsb3cgYGBceDAwYGAgdG8gYmUgdXNlZCBhcyBhIGZpbGwgY2hhcmFjdGVyIHdoZW4gdXNpbmcgc3RyLCBpbnQsCisgIGZsb2F0LCBhbmQgY29tcGxleCBfX2Zvcm1hdF9fIG1ldGhvZHMuCisKKy0gSXNzdWUgIzEzNTk4OiBNb2RpZnkgc3RyaW5nLkZvcm1hdHRlciB0byBzdXBwb3J0IGF1dG8tbnVtYmVyaW5nIG9mCisgIHJlcGxhY2VtZW50IGZpZWxkcy4gSXQgbm93IG1hdGNoZXMgdGhlIGJlaGF2aW9yIG9mIHN0ci5mb3JtYXQoKSBpbgorICB0aGlzIHJlZ2FyZC4gUGF0Y2hlcyBieSBQaGlsIEVsc29uIGFuZCBSYW1jaGFuZHJhIEFwdGUuCisKK0xpYnJhcnkKKy0tLS0tLS0KKworLSBJc3N1ZSAjMjEwODg6IEJ1Z2ZpeCBmb3IgY3Vyc2VzLndpbmRvdy5hZGRjaCgpIHJlZ3Jlc3Npb24gaW4gMy40LjAuCisgIEluIHBvcnRpbmcgdG8gQXJndW1lbnQgQ2xpbmljLCB0aGUgZmlyc3QgdHdvIGFyZ3VtZW50cyB3ZXJlIHJldmVyc2VkLgorCistIElzc3VlICMyMTQ2OTogUmVkdWNlZCB0aGUgcmlzayBvZiBmYWxzZSBwb3NpdGl2ZXMgaW4gcm9ib3RwYXJzZXIgYnkKKyAgY2hlY2tpbmcgdG8gbWFrZSBzdXJlIHRoYXQgcm9ib3RzLnR4dCBoYXMgYmVlbiByZWFkIG9yIGRvZXMgbm90IGV4aXN0CisgIHByaW9yIHRvIHJldHVybmluZyBUcnVlIGluIGNhbl9mZXRjaCgpLgorCistIElzc3VlICMyMTMyMTogaXRlcnRvb2xzLmlzbGljZSgpIG5vdyByZWxlYXNlcyB0aGUgcmVmZXJlbmNlIHRvIHRoZSBzb3VyY2UKKyAgaXRlcmF0b3Igd2hlbiB0aGUgc2xpY2UgaXMgZXhoYXVzdGVkLiAgUGF0Y2ggYnkgQW50b24gQWZhbmFzeWV2LgorCistIElzc3VlICM5ODE1OiBhc3NlcnRSYWlzZXMgbm93IHRyaWVzIHRvIGNsZWFyIHJlZmVyZW5jZXMgdG8gbG9jYWwgdmFyaWFibGVzCisgIGluIHRoZSBleGNlcHRpb24ncyB0cmFjZWJhY2suCisKKy0gSXNzdWUgIzEzMjA0OiBDYWxsaW5nIHN5cy5mbGFncy5fX25ld19fIHdvdWxkIGNyYXNoIHRoZSBpbnRlcnByZXRlciwKKyAgbm93IGl0IHJhaXNlcyBhIFR5cGVFcnJvci4KKworLSBJc3N1ZSAjMTkzODU6IE1ha2Ugb3BlcmF0aW9ucyBvbiBhIGNsb3NlZCBkYm0uZHVtYiBkYXRhYmFzZSBhbHdheXMgcmFpc2UgdGhlCisgIHNhbWUgZXhjZXB0aW9uLgorCistIElzc3VlICMyMTIwNzogRGV0ZWN0IHdoZW4gdGhlIG9zLnVyYW5kb20gY2FjaGVkIGZkIGhhcyBiZWVuIGNsb3NlZCBvcgorICByZXBsYWNlZCwgYW5kIG9wZW4gaXQgYW5ldy4KKworLSBJc3N1ZSAjMjEyOTE6IHN1YnByb2Nlc3MncyBQb3Blbi53YWl0KCkgaXMgbm93IHRocmVhZCBzYWZlIHNvIHRoYXQKKyAgbXVsdGlwbGUgdGhyZWFkcyBtYXkgYmUgY2FsbGluZyB3YWl0KCkgb3IgcG9sbCgpIG9uIGEgUG9wZW4gaW5zdGFuY2UKKyAgYXQgdGhlIHNhbWUgdGltZSB3aXRob3V0IGxvc2luZyB0aGUgUG9wZW4ucmV0dXJuY29kZSB2YWx1ZS4KKworLSBJc3N1ZSAjMjExMjc6IFBhdGggb2JqZWN0cyBjYW4gbm93IGJlIGluc3RhbnRpYXRlZCBmcm9tIHN0ciBzdWJjbGFzcworICBpbnN0YW5jZXMgKHN1Y2ggYXMgYGBudW1weS5zdHJfYGApLgorCistIElzc3VlICMxNTAwMjogdXJsbGliLnJlc3BvbnNlIG9iamVjdCB0byB1c2UgX1RlbXBvcmFyeUZpbGVXcmFwcGVyIChhbmQKKyAgX1RlbXBvcmFyeUZpbGVDbG9zZXIpIGZhY2lsaXR5LiBQcm92aWRlcyBhIGJldHRlciB3YXkgdG8gaGFuZGxlIGZpbGUKKyAgZGVzY3JpcHRvciBjbG9zZS4gUGF0Y2ggY29udHJpYnV0ZWQgYnkgQ2hyaXN0aWFuIFRoZXVuZS4KKworLSBJc3N1ZSAjMTIyMjA6IG1pbmRvbSBub3cgcmFpc2VzIGEgY3VzdG9tIFZhbHVlRXJyb3IgaW5kaWNhdGluZyBpdCBkb2Vzbid0CisgIHN1cHBvcnQgc3BhY2VzIGluIFVSSXMgaW5zdGVhZCBvZiBsZXR0aW5nIGEgJ3NwbGl0JyBWYWx1ZUVycm9yIGJ1YmJsZSB1cC4KKworLSBJc3N1ZSAjMjEyMzk6IHBhdGNoLnN0b3BhbGwoKSBkaWRuJ3Qgd29yayBkZXRlcm1pbmlzdGljYWxseSB3aGVuIHRoZSBzYW1lCisgIG5hbWUgd2FzIHBhdGNoZWQgbW9yZSB0aGFuIG9uY2UuCisKKy0gSXNzdWUgIzIxMjIyOiBQYXNzaW5nIG5hbWUga2V5d29yZCBhcmd1bWVudCB0byBtb2NrLmNyZWF0ZV9hdXRvc3BlYyBub3cKKyAgd29ya3MuCisKKy0gSXNzdWUgIzIxMTk3OiBBZGQgbGliNjQgLT4gbGliIHN5bWxpbmsgaW4gdmVudnMgb24gNjQtYml0IG5vbi1PUyBYIFBPU0lYLgorCistIElzc3VlICMxNzQ5ODogU29tZSBTTVRQIHNlcnZlcnMgZGlzY29ubmVjdCBhZnRlciBjZXJ0YWluIGVycm9ycywgdmlvbGF0aW5nCisgIHN0cmljdCBSRkMgY29uZm9ybWFuY2UuICBJbnN0ZWFkIG9mIGxvc2luZyB0aGUgZXJyb3IgY29kZSB3aGVuIHdlIGlzc3VlIHRoZQorICBzdWJzZXF1ZW50IFJTRVQsIHNtdHBsaWIgbm93IHJldHVybnMgdGhlIGVycm9yIGNvZGUgYW5kIGRlZmVycyByYWlzaW5nIHRoZQorICBTTVRQU2VydmVyRGlzY29ubmVjdGVkIGVycm9yIHVudGlsIHRoZSBuZXh0IGNvbW1hbmQgaXMgaXNzdWVkLgorCistIElzc3VlICMxNzgyNjogc2V0dGluZyBhbiBpdGVyYWJsZSBzaWRlX2VmZmVjdCBvbiBhIG1vY2sgZnVuY3Rpb24gY3JlYXRlZCBieQorICBjcmVhdGVfYXV0b3NwZWMgbm93IHdvcmtzLiBQYXRjaCBieSBLdXNoYWwgRGFzLgorCistIElzc3VlICM3Nzc2OiBGaXggYGBIb3N0OmBgIGhlYWRlciBhbmQgcmVjb25uZWN0aW9uIHdoZW4gdXNpbmcKKyAgaHR0cC5jbGllbnQuSFRUUENvbm5lY3Rpb24uc2V0X3R1bm5lbCgpLiBQYXRjaCBieSBOaWtvbGF1cyBSYXRoLgorCistIElzc3VlICMyMDk2ODogdW5pdHRlc3QubW9jay5NYWdpY01vY2sgbm93IHN1cHBvcnRzIGRpdmlzaW9uLgorICBQYXRjaCBieSBKb2hhbm5lcyBCYWl0ZXIuCisKKy0gSXNzdWUgIzIxNTI5IChDVkUtMjAxNC00NjE2KTogRml4IGFyYml0cmFyeSBtZW1vcnkgYWNjZXNzIGluCisgIEpTT05EZWNvZGVyLnJhd19kZWNvZGUgd2l0aCBhIG5lZ2F0aXZlIHNlY29uZCBwYXJhbWV0ZXIuIEJ1ZyByZXBvcnRlZCBieSBHdWlkbworICBWcmFua2VuLgorCistIElzc3VlICMyMTE2OTogZ2V0cGFzcyBub3cgaGFuZGxlcyBub24tYXNjaWkgY2hhcmFjdGVycyB0aGF0IHRoZQorICBpbnB1dCBzdHJlYW0gZW5jb2RpbmcgY2Fubm90IGVuY29kZSBieSByZS1lbmNvZGluZyB1c2luZyB0aGUKKyAgcmVwbGFjZSBlcnJvciBoYW5kbGVyLgorCistIElzc3VlICMyMTE3MTogRml4ZWQgdW5kb2N1bWVudGVkIGZpbHRlciBBUEkgb2YgdGhlIHJvdDEzIGNvZGVjLgorICBQYXRjaCBieSBCZXJrZXIgUGVrc2FnLgorCistIElzc3VlICMyMTE3MjogaXNpbnN0YW5jZSBjaGVjayByZWxheGVkIGZyb20gZGljdCB0byBjb2xsZWN0aW9ucy5NYXBwaW5nLgorCistIElzc3VlICMyMTE1NTogYXN5bmNpby5FdmVudExvb3AuY3JlYXRlX3VuaXhfc2VydmVyKCkgbm93IHJhaXNlcyBhIFZhbHVlRXJyb3IKKyAgaWYgcGF0aCBhbmQgc29jayBhcmUgc3BlY2lmaWVkIGF0IHRoZSBzYW1lIHRpbWUuCisKKy0gSXNzdWUgIzIxMTQ5OiBJbXByb3ZlZCB0aHJlYWQtc2FmZXR5IGluIGxvZ2dpbmcgY2xlYW51cCBkdXJpbmcgaW50ZXJwcmV0ZXIKKyAgc2h1dGRvd24uIFRoYW5rcyB0byBEZXZpbiBKZWFucGllcnJlIGZvciB0aGUgcGF0Y2guCisKKy0gSXNzdWUgIzIwMTQ1OiBgYXNzZXJ0UmFpc2VzUmVnZXhgIGFuZCBgYXNzZXJ0V2FybnNSZWdleGAgbm93IHJhaXNlIGEKKyAgVHlwZUVycm9yIGlmIHRoZSBzZWNvbmQgYXJndW1lbnQgaXMgbm90IGEgc3RyaW5nIG9yIGNvbXBpbGVkIHJlZ2V4LgorCistIElzc3VlICMyMTA1ODogRml4IGEgbGVhayBvZiBmaWxlIGRlc2NyaXB0b3IgaW4KKyAgOmZ1bmM6YHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZWAsIGNsb3NlIHRoZSBmaWxlIGRlc2NyaXB0b3IgaWYKKyAgOmZ1bmM6YGlvLm9wZW5gIGZhaWxzCisKKy0gSXNzdWUgIzIxMjAwOiBSZXR1cm4gTm9uZSBmcm9tIHBrZ3V0aWwuZ2V0X2xvYWRlcigpIHdoZW4gX19zcGVjX18gaXMgbWlzc2luZy4KKworLSBJc3N1ZSAjMjEwMTM6IEVuaGFuY2Ugc3NsLmNyZWF0ZV9kZWZhdWx0X2NvbnRleHQoKSB3aGVuIHVzZWQgZm9yIHNlcnZlciBzaWRlCisgIHNvY2tldHMgdG8gcHJvdmlkZSBiZXR0ZXIgc2VjdXJpdHkgYnkgZGVmYXVsdC4KKwogLSBJc3N1ZSAjMjA2MzM6IFJlcGxhY2UgcmVsYXRpdmUgaW1wb3J0IGJ5IGFic29sdXRlIGltcG9ydC4KIAorLSBJc3N1ZSAjMjA5ODA6IFN0b3Agd3JhcHBpbmcgZXhjZXB0aW9uIHdoZW4gdXNpbmcgVGhyZWFkUG9vbC4KKwogLSBJc3N1ZSAjMjEwODI6IEluIG9zLm1ha2VkaXJzLCBkbyBub3Qgc2V0IHRoZSBwcm9jZXNzLXdpZGUgdW1hc2suIE5vdGUgdGhpcwogICBjaGFuZ2VzIGJlaGF2aW9yIG9mIG1ha2VkaXJzIHdoZW4gZXhpc3Rfb2s9VHJ1ZS4KIAotLSBJc3N1ZSAjMjA4NzU6IFByZXZlbnQgcG9zc2libGUgZ3ppcCAiJ3JlYWQnIGlzIG5vdCBkZWZpbmVkIiBOYW1lRXJyb3IuCi0gIFBhdGNoIGJ5IENsYXVkaXUgUG9wYS4KKy0gSXNzdWUgIzIwOTkwOiBGaXggaXNzdWVzIGZvdW5kIGJ5IHB5Zmxha2VzIGZvciBtdWx0aXByb2Nlc3NpbmcuCisKKy0gSXNzdWUgIzIxMDE1OiBTU0wgY29udGV4dHMgd2lsbCBub3cgYXV0b21hdGljYWxseSBzZWxlY3QgYW4gZWxsaXB0aWMKKyAgY3VydmUgZm9yIEVDREgga2V5IGV4Y2hhbmdlIG9uIE9wZW5TU0wgMS4wLjIgYW5kIGxhdGVyLCBhbmQgb3RoZXJ3aXNlCisgIGRlZmF1bHQgdG8gInByaW1lMjU2djEiLgorCistIElzc3VlICMyMDk5NTogRW5oYW5jZSBkZWZhdWx0IGNpcGhlcnMgdXNlZCBieSB0aGUgc3NsIG1vZHVsZSB0byBlbmFibGUKKyAgYmV0dGVyIHNlY3VyaXR5IGFuIHByaW9yaXRpemUgcGVyZmVjdCBmb3J3YXJkIHNlY3JlY3kuCisKKy0gSXNzdWUgIzIwODg0OiBEb24ndCBhc3N1bWUgdGhhdCBfX2ZpbGVfXyBpcyBkZWZpbmVkIG9uIGltcG9ydGxpYi5fX2luaXRfXy4KKworLSBJc3N1ZSAjMjE0OTk6IElnbm9yZSBfX2J1aWx0aW5zX18gaW4gc2V2ZXJhbCB0ZXN0X2ltcG9ydGxpYi50ZXN0X2FwaSB0ZXN0cy4KKworLSBJc3N1ZSAjMjA4Nzk6IERlbGF5IHRoZSBpbml0aWFsaXphdGlvbiBvZiBlbmNvZGluZyBhbmQgZGVjb2RpbmcgdGFibGVzIGZvcgorICBiYXNlMzIsIGFzY2lpODUgYW5kIGJhc2U4NSBjb2RlY3MgaW4gdGhlIGJhc2U2NCBtb2R1bGUsIGFuZCBkZWxheSB0aGUKKyAgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHVucXVvdGVfdG9fYnl0ZXMoKSB0YWJsZSBvZiB0aGUgdXJsbGliLnBhcnNlIG1vZHVsZSwgdG8KKyAgbm90IHdhc3RlIG1lbW9yeSBpZiB0aGVzZSBtb2R1bGVzIGFyZSBub3QgdXNlZC4KKworLSBJc3N1ZSAjMTkxNTc6IEluY2x1ZGUgdGhlIGJyb2FkY2FzdCBhZGRyZXNzIGluIHRoZSB1c3VhYmxlIGhvc3RzIGZvciBJUHY2CisgIGluIGlwYWRkcmVzcy4KIAogLSBJc3N1ZSAjMTE1OTk6IFdoZW4gYW4gZXh0ZXJuYWwgY29tbWFuZCAoZS5nLiBjb21waWxlcikgZmFpbHMsIGRpc3R1dGlscyBub3cKICAgcHJpbnRzIG91dCB0aGUgd2hvbGUgY29tbWFuZCBsaW5lIChpbnN0ZWFkIG9mIGp1c3QgdGhlIGNvbW1hbmQgbmFtZSkgaWYgdGhlCkBAIC0xMTIsNjQgKzE5MzEsMzEyIEBACiAtIElzc3VlICM0OTMxOiBkaXN0dXRpbHMgc2hvdWxkIG5vdCBwcm9kdWNlIHVuaGVscGZ1bCAiZXJyb3I6IE5vbmUiIG1lc3NhZ2VzCiAgIGFueW1vcmUuICBkaXN0dXRpbHMudXRpbC5ncm9rX2Vudmlyb25tZW50X2Vycm9yIGlzIGtlcHQgYnV0IGRvYy1kZXByZWNhdGVkLgogCistIElzc3VlICMyMDg3NTogUHJldmVudCBwb3NzaWJsZSBnemlwICIncmVhZCcgaXMgbm90IGRlZmluZWQiIE5hbWVFcnJvci4KKyAgUGF0Y2ggYnkgQ2xhdWRpdSBQb3BhLgorCistIElzc3VlICMxMTU1ODogYGBlbWFpbC5tZXNzYWdlLk1lc3NhZ2UuYXR0YWNoYGAgbm93IHJldHVybnMgYSBtb3JlCisgIHVzZWZ1bCBlcnJvciBtZXNzYWdlIGlmIGBgYXR0YWNoYGAgaXMgY2FsbGVkIG9uIGEgbWVzc2FnZSBmb3Igd2hpY2gKKyAgYGBpc19tdWx0aXBhcnRgYCBpcyBGYWxzZS4KKwogLSBJc3N1ZSAjMjAyODM6IFJFIHBhdHRlcm4gbWV0aG9kcyBub3cgYWNjZXB0IHRoZSBzdHJpbmcga2V5d29yZCBwYXJhbWV0ZXJzCiAgIGFzIGRvY3VtZW50ZWQuICBUaGUgcGF0dGVybiBhbmQgc291cmNlIGtleXdvcmQgcGFyYW1ldGVycyBhcmUgbGVmdCBhcwogICBkZXByZWNhdGVkIGFsaWFzZXMuCiAKLS0gSXNzdWUgIzIxMzIzOiBGaXggaHR0cC5zZXJ2ZXIgdG8gYWdhaW4gaGFuZGxlIHNjcmlwdHMgaW4gQ0dJIHN1YmRpcmVjdG9yaWVzLAotICBicm9rZW4gYnkgdGhlIGZpeCBmb3Igc2VjdXJpdHkgaXNzdWUgIzE5NDM1LiAgUGF0Y2ggYnkgWmFjaCBCeXJuZS4KLQotLSBJc3N1ZSAjMjE1MjkgKENWRS0yMDE0LTQ2MTYpOiBGaXggYXJiaXRyYXJ5IG1lbW9yeSBhY2Nlc3MgaW4KLSAgSlNPTkRlY29kZXIucmF3X2RlY29kZSB3aXRoIGEgbmVnYXRpdmUgc2Vjb25kIHBhcmFtZXRlci4gQnVnIHJlcG9ydGVkIGJ5IEd1aWRvCi0gIFZyYW5rZW4uCi0KLVRlc3RzCi0tLS0tLQotCi0tIElzc3VlICMxNzc1MjogRml4IGRpc3R1dGlscyB0ZXN0cyB3aGVuIHJ1biBmcm9tIHRoZSBpbnN0YWxsZWQgbG9jYXRpb24uCi0KLS0gSXNzdWUgIzIwOTQ2OiBDb3JyZWN0IGFsaWdubWVudCBhc3N1bXB0aW9ucyBvZiBzb21lIGN0eXBlcyB0ZXN0cy4KLQotLSBJc3N1ZSAjMjA5Mzk6IEZpeCB0ZXN0X2dldHVybCBmYWlsdXJlIGluIHRlc3RfdXJsbGlibmV0IGR1ZSB0bwotICBuZXcgcmVkaXJlY3Qgb2YgaHR0cDovL3d3dy5weXRob24ub3JnLyB0byBodHRwczovL3d3dy5weXRob24ub3JnLgotCi0KLVdoYXQncyBOZXcgaW4gUHl0aG9uIDMuMy41PwotPT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSpSZWxlYXNlIGRhdGU6IDA5LU1hci0yMDE0KgotCi1ObyBjaGFuZ2VzIGZyb20gcmVsZWFzZSBjYW5kaWRhdGUgMi4KLQotCi1XaGF0J3MgTmV3IGluIFB5dGhvbiAzLjMuNSByZWxlYXNlIGNhbmRpZGF0ZSAyPwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotKlJlbGVhc2UgZGF0ZTogMDItTWFyLTIwMTQqCi0KLUNvcmUgYW5kIEJ1aWx0aW5zCi0tLS0tLS0tLS0tLS0tLS0tLQotCi0tIElzc3VlICMyMDczMTogUHJvcGVybHkgcG9zaXRpb24gaW4gc291cmNlIGNvZGUgZmlsZXMgZXZlbiBpZiB0aGV5Ci0gIGFyZSBvcGVuZWQgaW4gdGV4dCBtb2RlLiBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgotCi0tIElzc3VlICMxOTYxOTogc3RyLmVuY29kZSwgYnl0ZXMuZGVjb2RlIGFuZCBieXRlYXJyYXkuZGVjb2RlIG5vdyB1c2UgYW4KLSAgaW50ZXJuYWwgQVBJIHRvIHRocm93IExvb2t1cEVycm9yIGZvciBrbm93biBub24tdGV4dCBlbmNvZGluZ3MsIHJhdGhlcgotICB0aGFuIGF0dGVtcHRpbmcgdGhlIGVuY29kaW5nIG9yIGRlY29kaW5nIG9wZXJhdGlvbiBhbmQgdGhlbiB0aHJvd2luZyBhCi0gIFR5cGVFcnJvciBmb3IgYW4gdW5leHBlY3RlZCBvdXRwdXQgdHlwZS4gKFRoZSBsYXR0ZXIgbWVjaGFuaXNtIHJlbWFpbnMKLSAgaW4gcGxhY2UgZm9yIHRoaXJkIHBhcnR5IG5vbi10ZXh0IGVuY29kaW5ncykKLQotTGlicmFyeQotLS0tLS0tLQotCiAtIElzc3VlICMyMDc3ODogRml4IG1vZHVsZWZpbmRlciB0byB3b3JrIHdpdGggYnl0ZWNvZGUtb25seSBtb2R1bGVzLgogCiAtIElzc3VlICMyMDc5MTogY29weS5jb3B5KCkgbm93IGRvZXNuJ3QgbWFrZSBhIGNvcHkgd2hlbiB0aGUgaW5wdXQgaXMKICAgYSBieXRlcyBvYmplY3QuICBJbml0aWFsIHBhdGNoIGJ5IFBldGVyIE90dGVuLgogCi0tIElzc3VlICMyMDYyMTogRml4ZXMgYSB6aXBpbXBvcnQgYnVnIGludHJvZHVjZWQgaW4gMy4zLjQgdGhhdCBjb3VsZCBjYXVzZQotICBzcHVyaW91cyBjcmFzaGVzIG9yIFN5c3RlbUVycm9ycyB3aGVuIGltcG9ydGluZyBtb2R1bGVzIG9yIHBhY2thZ2VzIGZyb20gYQotICB6aXAgZmlsZS4gIFRoZSBjaGFuZ2UgY2F1c2luZyB0aGUgcHJvYmxlbSB3YXMgcmV2ZXJ0ZWQuCistIElzc3VlICMxOTc0ODogT24gQUlYLCB0aW1lLm1rdGltZSgpIG5vdyByYWlzZXMgYW4gT3ZlcmZsb3dFcnJvciBmb3IgeWVhcgorICBvdXRzaXplIHJhbmdlIFsxOTAyOyAyMDM3XS4KKworLSBJc3N1ZSAjMjA4MTY6IEZpeCBpbnNwZWN0LmdldGNhbGxhcmdzKCkgdG8gcmFpc2UgY29ycmVjdCBUeXBlRXJyb3IgZm9yCisgIG1pc3Npbmcga2V5d29yZC1vbmx5IGFyZ3VtZW50cy4gUGF0Y2ggYnkgSmVyZW1pYWggTG93aW4uCisKKy0gSXNzdWUgIzIwODE3OiBGaXggaW5zcGVjdC5nZXRjYWxsYXJncygpIHRvIGZhaWwgY29ycmVjdGx5IGlmIG1vcmUKKyAgdGhhbiAzIGFyZ3VtZW50cyBhcmUgbWlzc2luZy4gUGF0Y2ggYnkgSmVyZW1pYWggTG93aW4uCisKKy0gSXNzdWUgIzY2NzY6IEVuc3VyZSBhIG1lYW5pbmdmdWwgZXhjZXB0aW9uIGlzIHJhaXNlZCB3aGVuIGF0dGVtcHRpbmcKKyAgdG8gcGFyc2UgbW9yZSB0aGFuIG9uZSBYTUwgZG9jdW1lbnQgcGVyIHB5ZXhwYXQgeG1scGFyc2VyIGluc3RhbmNlLgorICAoT3JpZ2luYWwgcGF0Y2hlcyBieSBIaXJva2F6dSBZYW1hbW90byBhbmQgQW1hdXJ5IEZvcmdlb3QgZCdBcmMsIHdpdGgKKyAgc3VnZ2VzdGVkIHdvcmRpbmcgYnkgRGF2aWQgR3V0dGVyaWRnZSkKKworLSBJc3N1ZSAjMjExMTc6IEZpeCBpbnNwZWN0LnNpZ25hdHVyZSB0byBiZXR0ZXIgc3VwcG9ydCBmdW5jdG9vbHMucGFydGlhbC4KKyAgRHVlIHRvIHRoZSBzcGVjaWZpY3Mgb2YgZnVuY3Rvb2xzLnBhcnRpYWwgaW1wbGVtZW50YXRpb24sCisgIHBvc2l0aW9uYWwtb3Ita2V5d29yZCBhcmd1bWVudHMgcGFzc2VkIGFzIGtleXdvcmQgYXJndW1lbnRzIGJlY29tZQorICBrZXl3b3JkLW9ubHkuCisKKy0gSXNzdWUgIzIxMjA5OiBGaXggYXN5bmNpby50YXNrcy5Db3JvV3JhcHBlciB0byB3b3JrYXJvdW5kIGEgYnVnCisgIGluIHlpZWxkLWZyb20gaW1wbGVtZW50YXRpb24gaW4gQ1B5dGhvbnMgcHJpb3IgdG8gMy40LjEuCisKKy0gYXN5bmNpbzogQWRkIGdpX3tmcmFtZSxydW5uaW5nLGNvZGV9IHByb3BlcnRpZXMgdG8gQ29yb1dyYXBwZXIKKyAgKHVwc3RyZWFtIGlzc3VlICMxNjMpLgorCistIElzc3VlICMyMTMxMTogQXZvaWQgZXhjZXB0aW9uIGluIF9vc3hfc3VwcG9ydCB3aXRoIG5vbi1zdGFuZGFyZCBjb21waWxlcgorICBjb25maWd1cmF0aW9ucy4gIFBhdGNoIGJ5IEpvaG4gU3pha21laXN0ZXIuCisKKy0gSXNzdWUgIzExNTcxOiBFbnN1cmUgdGhhdCB0aGUgdHVydGxlIHdpbmRvdyBiZWNvbWVzIHRoZSB0b3Btb3N0IHdpbmRvdworICB3aGVuIGxhdW5jaGVkIG9uIE9TIFguCisKK0V4dGVuc2lvbiBNb2R1bGVzCistLS0tLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMyMTI3NjogcG9zaXhtb2R1bGU6IERvbid0IGRlZmluZSBVU0VfWEFUVFJTIG9uIEtGcmVlQlNEIGFuZCB0aGUgSHVyZC4KKworLSBJc3N1ZSAjMjEyMjY6IFNldCB1cCBtb2R1bGVzIHByb3Blcmx5IGluIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlT2JqZWN0CisgIChhbmQgZnJpZW5kcykuCisKK0lETEUKKy0tLS0KKworLSBJc3N1ZSAjMjExMzk6IENoYW5nZSBkZWZhdWx0IHBhcmFncmFwaCB3aWR0aCB0byA3MiwgdGhlIFBFUCA4IHJlY29tbWVuZGF0aW9uLgorCistIElzc3VlICMyMTI4NDogUGFyYWdyYXBoIHJlZm9ybWF0IHRlc3QgcGFzc2VzIGFmdGVyIHVzZXIgY2hhbmdlcyByZWZvcm1hdCB3aWR0aC4KKworLSBJc3N1ZSAjMTc2NTQ6IEVuc3VyZSBJRExFIG1lbnVzIGFyZSBjdXN0b21pemVkIHByb3Blcmx5IG9uIE9TIFggZm9yCisgIG5vbi1mcmFtZXdvcmsgYnVpbGRzIGFuZCBmb3IgYWxsIHZhcmlhbnRzIG9mIFRrLgorCitCdWlsZAorLS0tLS0KKworLSBUaGUgV2luZG93cyBidWlsZCBub3cgaW5jbHVkZXMgT3BlblNTTCAxLjAuMWcKKworLSBJc3N1ZSAjMjEyODU6IFJlZmFjdG9yIGFuZCBmaXggY3Vyc2VzIGNvbmZpZ3VyZSBjaGVjayB0byBhbHdheXMgc2VhcmNoCisgIGluIGEgbmN1cnNlc3cgZGlyZWN0b3J5LgorCistIElzc3VlICMxNTIzNDogRm9yIEJlcmtlbHlEQiBhbmQgU3FsaXRlLCBvbmx5IGFkZCB0aGUgZm91bmQgbGlicmFyeSBhbmQKKyAgaW5jbHVkZSBkaXJlY3RvcmllcyBpZiB0aGV5IGFyZW4ndCBhbHJlYWR5IGJlaW5nIHNlYXJjaGVkLiBUaGlzIGF2b2lkcworICBhbiBleHBsaWNpdCBydW50aW1lIGxpYnJhcnkgZGVwZW5kZW5jeS4KKworLSBJc3N1ZSAjMjA2NDQ6IE9TIFggaW5zdGFsbGVyIGJ1aWxkIHN1cHBvcnQgZm9yIGRvY3VtZW50YXRpb24gYnVpbGQgY2hhbmdlcworICBpbiAzLjQuMTogYXNzdW1lIGV4dGVybmFsbHkgc3VwcGxpZWQgc3BoaW54LWJ1aWxkIGlzIGF2YWlsYWJsZSBpbiAvdXNyL2Jpbi4KKworQyBBUEkKKy0tLS0tCisKKy0gSXNzdWUgIzIwOTQyOiBQeUltcG9ydF9JbXBvcnRGcm96ZW5Nb2R1bGVPYmplY3QoKSBubyBsb25nZXIgc2V0cyBfX2ZpbGVfXyB0bworICBtYXRjaCB3aGF0IGltcG9ydGxpYiBkb2VzOyB0aGlzIGFmZmVjdHMgX2Zyb3plbl9pbXBvcnRsaWIgYXMgd2VsbCBhcyBhbnkKKyAgbW9kdWxlIGxvYWRlZCB1c2luZyBpbXAuaW5pdF9mcm96ZW4oKS4KKworRG9jdW1lbnRhdGlvbgorLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxNzM4NjogRXhwYW5kZWQgZnVuY3Rpb25hbGl0eSBvZiB0aGUgYGBEb2MvbWFrZS5iYXRgYCBzY3JpcHQgdG8gbWFrZQorICBpdCBtdWNoIG1vcmUgY29tcGFyYWJsZSB0byBgYERvYy9NYWtlZmlsZWBgLgorCistIElzc3VlICMyMTA0MzogUmVtb3ZlIHRoZSByZWNvbW1lbmRhdGlvbiBmb3Igc3BlY2lmaWMgQ0Egb3JnYW5pemF0aW9ucyBhbmQgdG8KKyAgbWVudGlvbiB0aGUgYWJpbGl0eSB0byBsb2FkIHRoZSBPUyBjZXJ0aWZpY2F0ZXMuCisKKy0gSXNzdWUgIzIwNzY1OiBBZGQgbWlzc2luZyBkb2N1bWVudGF0aW9uIGZvciBQdXJlUGF0aC53aXRoX25hbWUoKSBhbmQKKyAgUHVyZVBhdGgud2l0aF9zdWZmaXgoKS4KKworLSBJc3N1ZSAjMTk0MDc6IE5ldyBwYWNrYWdlIGluc3RhbGxhdGlvbiBhbmQgZGlzdHJpYnV0aW9uIGd1aWRlcyBiYXNlZCBvbgorICB0aGUgUHl0aG9uIFBhY2thZ2luZyBBdXRob3JpdHkgdG9vbHMuIEV4aXN0aW5nIGd1aWRlcyBoYXZlIGJlZW4gcmV0YWluZWQKKyAgYXMgbGVnYWN5IGxpbmtzIGZyb20gdGhlIGRpc3R1dGlscyBkb2NzLCBhcyB0aGV5IHN0aWxsIGNvbnRhaW4gc29tZQorICByZXF1aXJlZCByZWZlcmVuY2UgbWF0ZXJpYWwgZm9yIHRvb2wgZGV2ZWxvcGVycyB0aGF0IGlzbid0IHJlY29yZGVkCisgIGFueXdoZXJlIGVsc2UuCisKKy0gSXNzdWUgIzE5Njk3OiBEb2N1bWVudCBjYXNlcyB3aGVyZSBfX21haW5fXy5fX3NwZWNfXyBpcyBOb25lLgorCitUZXN0cworLS0tLS0KKworLSBJc3N1ZSAjMTg2MDQ6IENvbnNvbGlkYXRlZCBjaGVja3MgZm9yIEdVSSBhdmFpbGFiaWxpdHkuICBBbGwgcGxhdGZvcm1zIG5vdworICBhdCBsZWFzdCBjaGVjayB3aGV0aGVyIFRrIGNhbiBiZSBpbnN0YW50aWF0ZWQgd2hlbiB0aGUgR1VJIHJlc291cmNlIGlzCisgIHJlcXVlc3RlZC4KKworLSBJc3N1ZSAjMjEyNzU6IEZpeCBhIHNvY2tldCB0ZXN0IG9uIEtGcmVlQlNELgorCistIElzc3VlICMyMTIyMzogUGFzcyB0ZXN0X3NpdGUvdGVzdF9zdGFydHVwX2ltcG9ydHMgd2hlbiBzb21lIG9mIHRoZSBleHRlbnNpb25zCisgIGFyZSBidWlsdCBhcyBidWlsdGlucy4KKworLSBJc3N1ZSAjMjA2MzU6IEFkZGVkIHRlc3RzIGZvciBUayBnZW9tZXRyeSBtYW5hZ2Vycy4KKworLSBBZGQgdGVzdCBjYXNlIGZvciBmcmVlemUuCisKKy0gSXNzdWUgIzIwNzQzOiBGaXggYSByZWZlcmVuY2UgbGVhayBpbiB0ZXN0X3RjbC4KKworLSBJc3N1ZSAjMjEwOTc6IE1vdmUgdGVzdF9uYW1lc3BhY2VfcGtncyBpbnRvIHRlc3RfaW1wb3J0bGliLgorCistIElzc3VlICMyMDkzOTogQXZvaWQgdmFyaW91cyBuZXR3b3JrIHRlc3QgZmFpbHVyZXMgZHVlIHRvIG5ldworICByZWRpcmVjdCBvZiBodHRwOi8vd3d3LnB5dGhvbi5vcmcvIHRvIGh0dHBzOi8vd3d3LnB5dGhvbi5vcmc6CisgIHVzZSBodHRwOi8vd3d3LmV4YW1wbGUuY29tIGluc3RlYWQuCisKKy0gSXNzdWUgIzIwNjY4OiBhc3luY2lvIHRlc3RzIG5vIGxvbmdlciByZWx5IG9uIHRlc3RzLnR4dCBmaWxlLgorICAoUGF0Y2ggYnkgVmFqcmFza3kgS29rKQorCistIElzc3VlICMyMTA5MzogUHJldmVudCBmYWlsdXJlcyBvZiBjdHlwZXMgdGVzdF9tYWNob2xpYiBvbiBPUyBYIGlmIGEKKyAgY29weSBvZiBsaWJ6IGV4aXN0cyBpbiAkSE9NRS9saWIgb3IgL3Vzci9sb2NhbC9saWIuCisKK1Rvb2xzL0RlbW9zCistLS0tLS0tLS0tLQorCistIEFkZCBzdXBwb3J0IGZvciBgYHlpZWxkIGZyb21gYCB0byAydG8zLgorCistIEFkZCBzdXBwb3J0IGZvciB0aGUgUEVQIDQ2NSBtYXRyaXggbXVsdGlwbGljYXRpb24gb3BlcmF0b3IgdG8gMnRvMy4KKworLSBJc3N1ZSAjMTYwNDc6IEZpeCBtb2R1bGUgZXhjZXB0aW9uIGxpc3QgYW5kIF9fZmlsZV9fIGhhbmRsaW5nIGluIGZyZWV6ZS4KKyAgUGF0Y2ggYnkgTWVhZG9yIEluZ2UuCisKKy0gSXNzdWUgIzExODI0OiBDb25zaWRlciBBQkkgdGFncyBpbiBmcmVlemUuIFBhdGNoIGJ5IE1lYWRvciBJbmdlLgorCistIElzc3VlICMyMDUzNTogUFlUSE9OV0FSTklORyBubyBsb25nZXIgYWZmZWN0cyB0aGUgcnVuX3Rlc3RzLnB5IHNjcmlwdC4KKyAgUGF0Y2ggYnkgQXJmcmV2ZXIgRnJlaHRlcyBUYWlmZXJzYXIgQXJhaGVzaXMuCisKKworV2hhdCdzIE5ldyBpbiBQeXRob24gMy40LjA/Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworUmVsZWFzZSBkYXRlOiAyMDE0LTAzLTE2CisKK0xpYnJhcnkKKy0tLS0tLS0KKworLSBJc3N1ZSAjMjA5Mzk6IEZpeCB0ZXN0X2dldHVybCBmYWlsdXJlIGluIHRlc3RfdXJsbGlibmV0IGR1ZSB0bworICBuZXcgcmVkaXJlY3Qgb2YgaHR0cDovL3d3dy5weXRob24ub3JnLyB0byBodHRwczovL3d3dy5weXRob24ub3JnLgorCitEb2N1bWVudGF0aW9uCistLS0tLS0tLS0tLS0tCisKKy0gTWVyZ2UgaW4gYWxsIGRvY3VtZW50YXRpb24gY2hhbmdlcyBzaW5jZSBicmFuY2hpbmcgMy40LjByYzEuCisKKworV2hhdCdzIE5ldyBpbiBQeXRob24gMy40LjAgcmVsZWFzZSBjYW5kaWRhdGUgMz8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1JlbGVhc2UgZGF0ZTogMjAxNC0wMy0wOQorCitDb3JlIGFuZCBCdWlsdGlucworLS0tLS0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMjA3ODY6IEZpeCBzaWduYXR1cmVzIGZvciBkaWN0Ll9fZGVsaXRlbV9fIGFuZAorICBwcm9wZXJ0eS5fX2RlbGV0ZV9fIGJ1aWx0aW5zLgorCitMaWJyYXJ5CistLS0tLS0tCisKKy0gSXNzdWUgIzIwODM5OiBEb24ndCB0cmlnZ2VyIGEgRGVwcmVjYXRpb25XYXJuaW5nIGluIHRoZSBzdGlsbCBzdXBwb3J0ZWQKKyAgcGtndXRpbC5nZXRfbG9hZGVyKCkgQVBJIHdoZW4gX19sb2FkZXJfXyBpc24ndCBzZXQgb24gYSBtb2R1bGUgKG5vcgorICB3aGVuIHBrZ3V0aWwuZmluZF9sb2FkZXIoKSBpcyBjYWxsZWQgZGlyZWN0bHkpLgorCitCdWlsZAorLS0tLS0KKworLSBJc3N1ZSAjMTQ1MTI6IExhdW5jaCBweWRvYyAtYiBpbnN0ZWFkIG9mIHB5ZG9jZ3VpLnB5dyBvbiBXaW5kb3dzLgorCistIElzc3VlICMyMDc0ODogVW5pbnN0YWxsaW5nIHBpcCBkb2VzIG5vdCBsZWF2ZSBiZWhpbmQgdGhlIHB5YyBvZgorICB0aGUgdW5pbnN0YWxsZXIgYW55bW9yZS4KKworLSBJc3N1ZSAjMjA1Njg6IFRoZSBXaW5kb3dzIGluc3RhbGxlciBub3cgaW5zdGFsbHMgdGhlIHVudmVyc2lvbmVkIGBgcGlwYGAKKyAgY29tbWFuZCBpbiBhZGRpdGlvbiB0byB0aGUgdmVyc2lvbmVkIGBgcGlwM2BgIGFuZCBgYHBpcDMuNGBgIGNvbW1hbmRzLgorCistIElzc3VlICMyMDc1NzogVGhlIGVuc3VyZXBpcCBoZWxwZXIgZm9yIHRoZSBXaW5kb3dzIHVuaW5zdGFsbGVyIG5vdyBza2lwcworICB1bmluc3RhbGxpbmcgcGlwIChyYXRoZXIgdGhhbiBmYWlsaW5nKSBpZiB0aGUgdXNlciBoYXMgdXBkYXRlZCBwaXAgdG8gYQorICBkaWZmZXJlbnQgdmVyc2lvbiBmcm9tIHRoZSBvbmUgYnVuZGxlZCB3aXRoIGVuc3VyZXBpcC4KKworLSBJc3N1ZSAjMjA0NjU6IFVwZGF0ZSBPUyBYIGFuZCBXaW5kb3dzIGluc3RhbGxlciBidWlsZHMgdG8gdXNlCisgIFNRTGl0ZSAzLjguMy4xLgorCisKK1doYXQncyBOZXcgaW4gUHl0aG9uIDMuNC4wIHJlbGVhc2UgY2FuZGlkYXRlIDI/Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitSZWxlYXNlIGRhdGU6IDIwMTQtMDItMjMKKworQ29yZSBhbmQgQnVpbHRpbnMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzIwNjI1OiBQYXJhbWV0ZXIgbmFtZXMgaW4gX19hbm5vdGF0aW9uc19fIHdlcmUgbm90IG1hbmdsZWQgcHJvcGVybHkuCisgIERpc2NvdmVyZWQgYnkgSm9uYXMgV2llbGlja2ksIHBhdGNoIGJ5IFl1cnkgU2VsaXZhbm92LgorCistIElzc3VlICMyMDI2MTogSW4gcGlja2xlLCBsb29rdXAgX19nZXRuZXdhcmdzX18gYW5kIF9fZ2V0bmV3YXJnc19leF9fIG9uIHRoZQorICB0eXBlIG9mIHRoZSBvYmplY3QuCisKKy0gSXNzdWUgIzIwNjE5OiBHaXZlIHRoZSBBU1Qgbm9kZXMgb2Yga2V5d29yZC1vbmx5IGFyZ3VtZW50cyBhIGNvbHVtbiBhbmQgbGluZQorICBudW1iZXIuCisKKy0gSXNzdWUgIzIwNTI2OiBSZXZlcnQgY2hhbmdlcyBvZiBpc3N1ZSAjMTk0NjYgd2hpY2ggaW50cm9kdWNlcyBhIHJlZ3Jlc3Npb246CisgIGRvbid0IGNsZWFyIGFueW1vcmUgdGhlIHN0YXRlIG9mIFB5dGhvbiB0aHJlYWRzIGVhcmx5IGR1cmluZyB0aGUgUHl0aG9uCisgIHNodXRkb3duLgorCitMaWJyYXJ5CistLS0tLS0tCisKKy0gSXNzdWUgIzIwNzEwOiBUaGUgcHlkb2Mgc3VtbWFyeSBsaW5lIG5vIGxvbmdlciBkaXNwbGF5cyB0aGUgInNlbGYiIHBhcmFtZXRlcgorICBmb3IgYm91bmQgbWV0aG9kcy4KKworLSBJc3N1ZSAjMjA1NjY6IENoYW5nZSBhc3luY2lvLmFzX2NvbXBsZXRlZCgpIHRvIHVzZSBhIFF1ZXVlLCB0bworICBhdm9pZCBPKE4qKjIpIGJlaGF2aW9yLgorCistIElzc3VlICMyMDcwNDogSW1wbGVtZW50IG5ldyBkZWJ1ZyBBUEkgaW4gYXN5bmNpby4gQWRkIG5ldyBtZXRob2RzCisgIEJhc2VFdmVudExvb3Auc2V0X2RlYnVnKCkgYW5kIEJhc2VFdmVudExvb3AuZ2V0X2RlYnVnKCkuCisgIEFkZCBzdXBwb3J0IGZvciBzZXR0aW5nICdhc3luY2lvLnRhc2tzLl9ERUJVRycgdmFyaWFibGUgd2l0aAorICAnUFlUSE9OQVNZTkNJT0RFQlVHJyBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKworLSBhc3luY2lvOiBSZWZhY3RvcmluZyBhbmQgZml4ZXM6IEJhc2VFdmVudExvb3Auc29ja19jb25uZWN0KCkgcmFpc2VzIGFuCisgIGVycm9yIGlmIHRoZSBhZGRyZXNzIGlzIG5vdCByZXNvbHZlZDsgdXNlIF9fc2xvdHNfXyBpbiBIYW5kbGUgYW5kCisgIFRpbWVySGFuZGxlOyBhc19jb21wbGV0ZWQoKSBhbmQgd2FpdCgpIHJhaXNlIFR5cGVFcnJvciBpZiB0aGUgcGFzc2VkCisgIGxpc3Qgb2YgRnV0dXJlcyBpcyBhIHNpbmdsZSBGdXR1cmU7IGNhbGxfc29vbigpIGFuZCBvdGhlciAnY2FsbF8qKCknCisgIGZ1bmN0aW9ucyByYWlzZSBUeXBlRXJyb3IgaWYgdGhlIHBhc3NlZCBjYWxsYmFjayBpcyBhIGNvcm91dGluZQorICBmdW5jdGlvbjsgX1Byb2FjdG9yQmFzZVBpcGVUcmFuc3BvcnQgdXNlcyBfRmxvd0NvbnRyb2xNaXhpbjsKKyAgV3JpdGVUcmFuc3BvcnQuc2V0X3dyaXRlX2J1ZmZlcl9zaXplKCkgY2FsbHMgX21heWJlX3BhdXNlX3Byb3RvY29sKCkKKyAgdG8gY29uc2lkZXIgcGF1c2luZyByZWNlaXZpbmcgaWYgdGhlIHdhdGVybWFyayBsaW1pdHMgaGF2ZSBjaGFuZ2VkOworICBmaXggX2NoZWNrX3Jlc29sdmVkX2FkZHJlc3MoKSBmb3IgSVB2NiBhZGRyZXNzOyBhbmQgb3RoZXIgbWlub3IKKyAgaW1wcm92ZW1lbnRzLCBhbG9uZyB3aXRoIG11bHRpcGxlIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KKworLSBJc3N1ZSAjMjA2ODQ6IEZpeCBpbnNwZWN0LmdldGZ1bGxhcmdzcGVjKCkgdG8gbm90IHRvIGZvbGxvdyBfX3dyYXBwZWRfXworICBjaGFpbnMuIE1ha2UgaXRzIGJlaGF2aW91ciBjb25zaXN0ZW50IHdpdGggYm91bmQgbWV0aG9kcyBmaXJzdCBhcmd1bWVudC4KKyAgUGF0Y2ggYnkgTmljayBDb2dobGFuIGFuZCBZdXJ5IFNlbGl2YW5vdi4KKworLSBJc3N1ZSAjMjA2ODE6IEFkZCBuZXcgZXJyb3IgaGFuZGxpbmcgQVBJIGluIGFzeW5jaW8uIE5ldyBBUElzOgorICBsb29wLnNldF9leGNlcHRpb25faGFuZGxlcigpLCBsb29wLmRlZmF1bHRfZXhjZXB0aW9uX2hhbmRsZXIoKSwgYW5kCisgIGxvb3AuY2FsbF9leGNlcHRpb25faGFuZGxlcigpLgorCistIElzc3VlICMyMDY3MzogSW1wbGVtZW50IHN1cHBvcnQgZm9yIFVOSVggRG9tYWluIFNvY2tldHMgaW4gYXN5bmNpby4KKyAgTmV3IEFQSXM6IGxvb3AuY3JlYXRlX3VuaXhfY29ubmVjdGlvbigpLCBsb29wLmNyZWF0ZV91bml4X3NlcnZlcigpLAorICBzdHJlYW1zLm9wZW5fdW5peF9jb25uZWN0aW9uKCksIGFuZCBzdHJlYW1zLnN0YXJ0X3VuaXhfc2VydmVyKCkuCisKKy0gSXNzdWUgIzIwNjE2OiBBZGQgYSBmb3JtYXQoKSBtZXRob2QgdG8gdHJhY2VtYWxsb2MuVHJhY2ViYWNrLgorCistIElzc3VlICMxOTc0NDogdGhlIGVuc3VyZXBpcCBpbnN0YWxsYXRpb24gc3RlcCBub3cganVzdCBwcmludHMgYSB3YXJuaW5nIHRvCisgIHN0ZGVyciByYXRoZXIgdGhhbiBmYWlsaW5nIG91dHJpZ2h0IGlmIFNTTC9UTFMgaXMgdW5hdmFpbGFibGUuIFRoaXMgYWxsb3dzCisgIGxvY2FsIGluc3RhbGxhdGlvbiBvZiBQT1NJWCBidWlsZHMgd2l0aG91dCBTU0wvVExTIHN1cHBvcnQuCisKKy0gSXNzdWUgIzIwNTk0OiBBdm9pZCBuYW1lIGNsYXNoIHdpdGggdGhlIGxpYmMgZnVuY3Rpb24gcG9zaXhfY2xvc2UuCisKK0J1aWxkCistLS0tLQorCistIElzc3VlICMyMDY0MTogUnVuIE1TSSBjdXN0b20gYWN0aW9ucyAocGlwIGluc3RhbGxhdGlvbiwgcHljIGNvbXBpbGF0aW9uKQorICB3aXRoIHRoZSBOb0ltcGVyc29uYXRlIGZsYWcsIHRvIHN1cHBvcnQgZWxldmF0ZWQgZXhlY3V0aW9uIChVQUMpLgorCistIElzc3VlICMyMDIyMTogUmVtb3ZlZCBjb25mbGljdGluZyAob3IgY2lyY3VsYXIpIGh5cG90IGRlZmluaXRpb24gd2hlbgorICBjb21waWxlZCB3aXRoIFZTIDIwMTAgb3IgYWJvdmUuICBJbml0aWFsIHBhdGNoIGJ5IFRhYnJleiBNb2hhbW1lZC4KKworLSBJc3N1ZSAjMjA2MDk6IFJlc3RvcmVkIHRoZSBhYmlsaXR5IHRvIGJ1aWxkIDY0LWJpdCBXaW5kb3dzIGJpbmFyaWVzIG9uCisgIDMyLWJpdCBXaW5kb3dzLCB3aGljaCB3YXMgYnJva2VuIGJ5IHRoZSBjaGFuZ2UgaW4gaXNzdWUgIzE5Nzg4LgorCisKK1doYXQncyBOZXcgaW4gUHl0aG9uIDMuNC4wIHJlbGVhc2UgY2FuZGlkYXRlIDE/Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitSZWxlYXNlIGRhdGU6IDIwMTQtMDItMTAKKworQ29yZSBhbmQgQnVpbHRpbnMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzE5MjU1OiBUaGUgYnVpbHRpbnMgbW9kdWxlIGlzIHJlc3RvcmVkIHRvIGluaXRpYWwgdmFsdWUgYmVmb3JlCisgIGNsZWFuaW5nIG90aGVyIG1vZHVsZXMuICBUaGUgc3lzIGFuZCBidWlsdGlucyBtb2R1bGVzIGFyZSBjbGVhbmVkIGxhc3QuCisKKy0gSXNzdWUgIzIwNTg4OiBNYWtlIFB5dGhvbi1hc3QuYyBDODkgY29tcGxpYW50LgorCistIElzc3VlICMyMDQzNzogRml4ZWQgMjIgcG90ZW50aWFsIGJ1Z3Mgd2hlbiBkZWxldGluZyBvYmplY3RzIHJlZmVyZW5jZXMuCisKKy0gSXNzdWUgIzIwNTAwOiBEaXNwbGF5aW5nIGFuIGV4Y2VwdGlvbiBhdCBpbnRlcnByZXRlciBzaHV0ZG93biBubyBsb25nZXIKKyAgcmlza3MgdHJpZ2dlcmluZyBhbiBhc3NlcnRpb24gZmFpbHVyZSBpbiBQeU9iamVjdF9TdHIuCisKKy0gSXNzdWUgIzIwNTM4OiBVVEYtNyBpbmNyZW1lbnRhbCBkZWNvZGVyIHByb2R1Y2VkIGluY29uc2lzdGVudCBzdHJpbmcgd2hlbgorICBpbnB1dCB3YXMgdHJ1bmNhdGVkIGluIEJBU0U2NCBzZWN0aW9uLgogCiAtIElzc3VlICMyMDQwNDogaW8uVGV4dElPV3JhcHBlciAoYW5kIGhlbmNlIHRoZSBvcGVuKCkgYnVpbHRpbikgbm93IHVzZXMgdGhlCiAgIGludGVybmFsIGNvZGVjIG1hcmtpbmcgc3lzdGVtIGFkZGVkIGZvciBpc3N1ZSAjMTk2MTkgdG8gdGhyb3cgTG9va3VwRXJyb3IKQEAgLTE3Nyw1NiArMjI0NCwyMSBAQAogICBvdXRwdXQgdHlwZSBjaGVja3MgcmVtYWluIGluIHBsYWNlIHRvIGRlYWwgd2l0aCB1bm1hcmtlZCB0aGlyZCBwYXJ0eQogICBjb2RlY3MuCiAKLVRlc3RzCi0tLS0tLQorLSBJc3N1ZSAjMTcxNjI6IEFkZCBQeVR5cGVfR2V0U2xvdC4KIAotLSBJc3N1ZSAjMjA3NDM6IEZpeCBhIHJlZmVyZW5jZSBsZWFrIGluIHRlc3RfdGNsLgotCi1Ub29scy9EZW1vcwotLS0tLS0tLS0tLS0KLQotLSBJc3N1ZSAjMjA1MzU6IFBZVEhPTldBUk5JTkcgbm8gbG9uZ2VyIGFmZmVjdHMgdGhlIHJ1bl90ZXN0cy5weSBzY3JpcHQuCi0gIFBhdGNoIGJ5IEFyZnJldmVyIEZyZWh0ZXMgVGFpZmVyc2FyIEFyYWhlc2lzLgotCi0KLVdoYXQncyBOZXcgaW4gUHl0aG9uIDMuMy41IHJlbGVhc2UgY2FuZGlkYXRlIDE/Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0qUmVsZWFzZSBkYXRlOiAyMy1GZWItMjAxNCoKLQotQ29yZSBhbmQgQnVpbHRpbnMKLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS0gSXNzdWUgIzIwNTg4OiBNYWtlIFB5dGhvbi1hc3QuYyBDODkgY29tcGxpYW50LgotCi0tIElzc3VlICMyMDQzNzogRml4ZWQgMjEgcG90ZW50aWFsIGJ1Z3Mgd2hlbiBkZWxldGluZyBvYmplY3RzIHJlZmVyZW5jZXMuCi0KLS0gSXNzdWUgIzIwNTM4OiBVVEYtNyBpbmNyZW1lbnRhbCBkZWNvZGVyIHByb2R1Y2VkIGluY29uc2lzdGFudCBzdHJpbmcgd2hlbgotICBpbnB1dCB3YXMgdHJ1bmNhdGVkIGluIEJBU0U2NCBzZWN0aW9uLgorLSBJc3N1ZSAjMjAxNjI6IEZpeCBhbiBhbGlnbm1lbnQgaXNzdWUgaW4gdGhlIHNpcGhhc2gyNCgpIGhhc2ggZnVuY3Rpb24gd2hpY2gKKyAgY2F1c2VkIGEgY3Jhc2ggb24gUG93ZXJQQyA2NC1iaXQgKHBwYzY0KS4KIAogTGlicmFyeQogLS0tLS0tLQogCi0tIElzc3VlICMyMDYzNTogRml4ZWQgZ3JpZF9jb2x1bW5jb25maWd1cmUoKSBhbmQgZ3JpZF9yb3djb25maWd1cmUoKSBtZXRob2RzIG9mCi0gIFRraW50ZXIgd2lkZ2V0cyB0byB3b3JrIGluIHdhbnRvYmplY3RzPVRydWUgbW9kZS4KKy0gSXNzdWUgIzIwNTMwOiBUaGUgc2lnbmF0dXJlcyBmb3Igc2xvdCBidWlsdGlucyBoYXZlIGJlZW4gdXBkYXRlZAorICB0byByZWZsZWN0IHRoZSBmYWN0IHRoYXQgdGhleSBvbmx5IGFjY2VwdCBwb3NpdGlvbmFsLW9ubHkgYXJndW1lbnRzLgogCi0tIElzc3VlICMxOTYxMjogT24gV2luZG93cywgc3VicHJvY2Vzcy5Qb3Blbi5jb21tdW5pY2F0ZSgpIG5vdyBpZ25vcmVzCi0gIE9TRXJyb3IoMjIsICdJbnZhbGlkIGFyZ3VtZW50Jykgd2hlbiB3cml0aW5nIGlucHV0IGRhdGEgaW50byBzdGRpbiwgd2hlcmVhcwotICB0aGUgcHJvY2VzcyBhbHJlYWR5IGV4aXRlZC4KKy0gSXNzdWUgIzIwNTE3OiBGdW5jdGlvbnMgaW4gdGhlIG9zIG1vZHVsZSB0aGF0IGFjY2VwdCB0d28gZmlsZW5hbWVzCisgIG5vdyByZWdpc3RlciBib3RoIGZpbGVuYW1lcyBpbiB0aGUgZXhjZXB0aW9uIG9uIGZhaWx1cmUuCiAKLS0gSXNzdWUgIzY4MTU6IG9zLnBhdGguZXhwYW5kdmFycygpIG5vdyBzdXBwb3J0cyBub24tQVNDSUkgZW52aXJvbm1lbnQKLSAgdmFyaWFibGVzIG5hbWVzIGFuZCB2YWx1ZXMuCi0KLS0gSXNzdWUgIzE3NjcxOiBGaXhlZCBhIGNyYXNoIHdoZW4gdXNlIG5vbi1pbml0aWFsaXplZCBpby5CdWZmZXJlZFJXUGFpci4KLSAgQmFzZWQgb24gcGF0Y2ggYnkgU3RlcGhlbiBUdS4KLQotLSBJc3N1ZSAjODQ3ODogVW50b2tlbml6ZXIuY29tcGF0IHByb2Nlc3NlcyBmaXJzdCB0b2tlbiBmcm9tIGl0ZXJhdG9yIGlucHV0LgotICBQYXRjaCBiYXNlZCBvbiBsaW5lcyBmcm9tIEdlb3JnIEJyYW5kbCwgRXJpYyBTbm93LCBhbmQgR2FyZXRoIFJlZXMuCi0KLS0gSXNzdWUgIzIwNTk0OiBBdm9pZCBuYW1lIGNsYXNoIHdpdGggdGhlIGxpYmMgZnVuY3Rpb24gcG9zaXhfY2xvc2UuCi0KLS0gSXNzdWUgIzE5ODU2OiBzaHV0aWwubW92ZSgpIGZhaWxlZCB0byBtb3ZlIGEgZGlyZWN0b3J5IHRvIG90aGVyIGRpcmVjdG9yeQotICBvbiBXaW5kb3dzIGlmIHNvdXJjZSBuYW1lIGVuZHMgd2l0aCBvcy5hbHRzZXAuCistIElzc3VlICMyMDU2MzogVGhlIGlwYWRkcmVzcyBtb2R1bGUgQVBJIGlzIG5vdyBjb25zaWRlcmVkIHN0YWJsZS4KIAogLSBJc3N1ZSAjMTQ5ODM6IGVtYWlsLmdlbmVyYXRvciBub3cgYWx3YXlzIGFkZHMgYSBsaW5lIGVuZCBhZnRlciBlYWNoIE1JTUUKICAgYm91bmRhcnkgbWFya2VyLCBpbnN0ZWFkIG9mIGRvaW5nIHNvIG9ubHkgd2hlbiB0aGVyZSBpcyBhbiBlcGlsb2d1ZS4gIFRoaXMKQEAgLTI0Myw5ICsyMjc1LDIxIEBACiAtIElzc3VlICMxOTc3MjogZW1haWwuZ2VuZXJhdG9yIG5vIGxvbmdlciBtdXRhdGVzIHRoZSBtZXNzYWdlIG9iamVjdCB3aGVuCiAgIGRvaW5nIGEgZG93bi10cmFuc2Zvcm0gZnJvbSA4Yml0IHRvIDdiaXQgQ1RFcy4KIAorLSBJc3N1ZSAjMjA1MzY6IHRoZSBzdGF0aXN0aWNzIG1vZHVsZSBub3cgY29ycmVjdGx5IGhhbmRsZSBEZWNpbWFsIGluc3RhbmNlcworICB3aXRoIHBvc2l0aXZlIGV4cG9uZW50cworCiAtIElzc3VlICMxODgwNTogdGhlIG5ldG1hc2svaG9zdG1hc2sgcGFyc2luZyBpbiBpcGFkZHJlc3Mgbm93IG1vcmUgcmVsaWFibHkKICAgZmlsdGVycyBvdXQgaWxsZWdhbCB2YWx1ZXMgYW5kIGNvcnJlY3RseSBhbGxvd3MgYW55IHZhbGlkIHByZWZpeCBsZW5ndGguCiAKKy0gSXNzdWUgIzIwNDgxOiBGb3IgYXQgbGVhc3QgUHl0aG9uIDMuNCwgdGhlIHN0YXRpc3RpY3MgbW9kdWxlIHdpbGwgcmVxdWlyZQorICB0aGF0IGFsbCBpbnB1dHMgZm9yIGEgc2luZ2xlIG9wZXJhdGlvbiBiZSBvZiBhIHNpbmdsZSBjb25zaXN0ZW50IHR5cGUsIG9yCisgIGVsc2UgYSBtaXhlZCBvZiBpbnRzIGFuZCBhIHNpbmdsZSBvdGhlciBjb25zaXN0ZW50IHR5cGUuIFRoaXMgYXZvaWRzCisgIHNvbWUgaW50ZXJvcGVyYWJpbGl0eSBpc3N1ZXMgdGhhdCBhcm9zZSB3aXRoIHRoZSBwcmV2aW91cyBhcHByb2FjaCBvZgorICBjb2VyY2luZyB0byBhIHN1aXRhYmxlIGNvbW1vbiB0eXBlLgorCistIElzc3VlICMyMDQ3ODogdGhlIHN0YXRpc3RpY3MgbW9kdWxlIG5vdyB0cmVhdHMgY29sbGVjdGlvbnMuQ291bnRlciBpbnB1dHMKKyAgbGlrZSBhbnkgb3RoZXIgaXRlcmFibGUuCisKIC0gSXNzdWUgIzE3MzY5OiBnZXRfZmlsZW5hbWUgd2FzIHJhaXNpbmcgYW4gZXhjZXB0aW9uIGlmIHRoZSBmaWxlbmFtZQogICBwYXJhbWV0ZXIncyBSRkMyMjMxIGVuY29kaW5nIHdhcyBicm9rZW4gaW4gY2VydGFpbiB3YXlzLiAgVGhpcyB3YXMKICAgYSByZWdyZXNzaW9uIHJlbGF0aXZlIHRvIHB5dGhvbjIuCkBAIC0yNTQsNiArMjI5OCwxNCBAQAogICBkZWxldGVkLCBhbmQgaW1hcGxpYiBkaWQgbm90IGhhbmRsZSB0aGF0IGNhc2UgZ3JhY2VmdWxseS4gIE5vdyBpdAogICBoYW5kbGVzIHRoZSAnYnllJyBjb3JyZWN0bHkuCiAKKy0gSXNzdWUgIzIwNTMxOiBSZXZlcnQgMy40IHZlcnNpb24gb2YgZml4IGZvciAjMTkwNjMsIGFuZCBhcHBseSB0aGUgMy4zCisgIHZlcnNpb24uICBUaGF0IGlzLCBkbyAqbm90KiByYWlzZSBhbiBlcnJvciBpZiB1bmljb2RlIGlzIHBhc3NlZCB0bworICBlbWFpbC5tZXNzYWdlLk1lc3NhZ2Uuc2V0X3BheWxvYWQuCisKKy0gSXNzdWUgIzIwNDc2OiBJZiBhIG5vbi1jb21wYXQzMiBwb2xpY3kgaXMgdXNlZCB3aXRoIGFueSBvZiB0aGUgZW1haWwgcGFyc2VycywKKyAgRW1haWxNZXNzYWdlIGlzIG5vdyB1c2VkIGFzIHRoZSBmYWN0b3J5IGNsYXNzLiAgVGhlIGZhY3RvcnkgY2xhc3Mgc2hvdWxkCisgIHJlYWxseSBjb21lIGZyb20gdGhlIHBvbGljeTsgdGhhdCB3aWxsIGdldCBmaXhlZCBpbiAzLjUuCisKIC0gSXNzdWUgIzE5OTIwOiBUYXJGaWxlLmxpc3QoKSBubyBsb25nZXIgZmFpbHMgd2hlbiBvdXRwdXRzIGEgbGlzdGluZwogICBjb250YWluaW5nIG5vbi1lbmNvZGFibGUgY2hhcmFjdGVycy4gIEJhc2VkIG9uIHBhdGNoIGJ5IFZhanJhc2t5IEtvay4KIApAQCAtMjYxLDYgKzIzMTMsOSBAQAogCiAtIElzc3VlICMxOTE4NjogUmVzdG9yZSBuYW1lc3BhY2luZyBvZiBleHBhdCBzeW1ib2xzIGluc2lkZSB0aGUgcHlleHBhdCBtb2R1bGUuCiAKKy0gSXNzdWUgIzIwMDUzOiBlbnN1cmVwaXAgKGFuZCBoZW5jZSB2ZW52KSBhcmUgbm8gbG9uZ2VyIGFmZmVjdGVkIGJ5IHRoZQorICBzZXR0aW5ncyBpbiB0aGUgZGVmYXVsdCBwaXAgY29uZmlndXJhdGlvbiBmaWxlLgorCiAtIElzc3VlICMyMDQyNjogV2hlbiBwYXNzaW5nIHRoZSByZS5ERUJVRyBmbGFnLCByZS5jb21waWxlKCkgZGlzcGxheXMgdGhlCiAgIGRlYnVnIG91dHB1dCBldmVyeSB0aW1lIGl0IGlzIGNhbGxlZCwgcmVnYXJkbGVzcyBvZiB0aGUgY29tcGlsYXRpb24gY2FjaGUuCiAKQEAgLTI3MCwxNyArMjMyNSw2MiBAQAogLSBJc3N1ZSAjMjA0MzU6IEZpeCBfcHlpby5TdHJpbmdJTy5nZXR2YWx1ZSgpIHRvIHRha2UgaW50byBhY2NvdW50IG5ld2xpbmUKICAgdHJhbnNsYXRpb24gc2V0dGluZ3MuCiAKKy0gdHJhY2VtYWxsb2M6IEZpeCBzbGljaW5nIHRyYWNlcyBhbmQgZml4IHNsaWNpbmcgYSB0cmFjZWJhY2suCisKKy0gSXNzdWUgIzIwMzU0OiBGaXggYW4gYWxpZ25tZW50IGlzc3VlIGluIHRoZSB0cmFjZW1hbGxvYyBtb2R1bGUgb24gNjQtYml0CisgIHBsYXRmb3Jtcy4gQnVnIHNlZW4gb24gNjQtYml0IExpbnV4IHdoZW4gdXNpbmcgIm1ha2UgcHJvZmlsZS1vcHQiLgorCistIElzc3VlICMxNzE1OTogaW5zcGVjdC5zaWduYXR1cmUgbm93IGFjY2VwdHMgZHVjayB0eXBlcyBvZiBmdW5jdGlvbnMsCisgIHdoaWNoIGFkZHMgc3VwcG9ydCBmb3IgQ3l0aG9uIGZ1bmN0aW9ucy4gSW5pdGlhbCBwYXRjaCBieSBTdGVmYW4gQmVobmVsLgorCistIElzc3VlICMxODgwMTogRml4IGluc3BlY3QuY2xhc3NpZnlfY2xhc3NfYXR0cnMgdG8gY29ycmVjdGx5IGNsYXNzaWZ5CisgIG9iamVjdC5fX25ld19fIGFuZCBvYmplY3QuX19pbml0X18uCisKKy0gRml4ZWQgY21hdGguaXNpbmYncyBuYW1lIGluIGl0cyBhcmd1bWVudCBwYXJzaW5nIGNvZGUuCisKKy0gSXNzdWUgIzIwMzExLCAjMjA0NTI6IHBvbGwgYW5kIGVwb2xsIG5vdyByb3VuZCB0aGUgdGltZW91dCBhd2F5IGZyb20gemVybywKKyAgaW5zdGVhZCBvZiByb3VuZGluZyB0b3dhcmRzIHplcm8sIGluIHNlbGVjdCBhbmQgc2VsZWN0b3JzIG1vZHVsZXM6CisgIHNlbGVjdC5lcG9sbC5wb2xsKCksIHNlbGVjdG9ycy5Qb2xsU2VsZWN0b3IucG9sbCgpIGFuZAorICBzZWxlY3RvcnMuRXBvbGxTZWxlY3Rvci5wb2xsKCkuIEZvciBleGFtcGxlLCBhIHRpbWVvdXQgb2Ygb25lIG1pY3Jvc2Vjb25kCisgICgxZS02KSBpcyBub3cgcm91bmRlZCB0byBvbmUgbWlsbGlzZWNvbmRpICgxZS0zKSwgaW5zdGVhZCBvZiBiZWluZyByb3VuZGVkIHRvCisgIHplcm8uICBIb3dldmVyLCB0aGUgZ3JhbnVsYXJpdHkgcHJvcGVydHkgYW5kIGFzeW5jaW8ncyByZXNvbHV0aW9uIGZlYXR1cmUKKyAgd2VyZSByZW1vdmVkIGFnYWluLgorCistIGFzeW5jaW86IFNvbWUgcmVmYWN0b3Jpbmc7IHZhcmlvdXMgZml4ZXM7IGFkZCB3cml0ZSBmbG93IGNvbnRyb2wgdG8KKyAgdW5peCBwaXBlczsgRnV0dXJlLnNldF9leGNlcHRpb24oKSBpbnN0YW50aWF0ZXMgdGhlIGV4Y2VwdGlvbgorICBhcmd1bWVudCBpZiBpdCBpcyBhIGNsYXNzOyBpbXByb3ZlZCBwcm9hY3RvciBwaXBlIHRyYW5zcG9ydDsgc3VwcG9ydAorICB3YWl0X2ZvcihmLCBOb25lKTsgZG9uJ3QgbG9nIGJyb2tlbi9kaXNjb25uZWN0ZWQgcGlwZXM7IHVzZQorICBWYWx1ZUVycm9yIGluc3RlYWQgb2YgYXNzZXJ0IGZvciBmb3JiaWRkZW4gc3VicHJvY2Vzc197c2hlbGwsZXhlY30KKyAgYXJndW1lbnRzOyBhZGRlZCBhIGNvbnZlbmllbmNlIEFQSSBmb3Igc3VicHJvY2VzcyBtYW5hZ2VtZW50OyBhZGRlZAorICBTdHJlYW1SZWFkZXIuYXRfZW9mKCk7IHByb3Blcmx5IGhhbmRsZSBkdXBsaWNhdGUgY29yb3V0aW5lcy9mdXR1cmVzCisgIGluIGdhdGhlcigpLCB3YWl0KCksIGFzX2NvbXBsZXRlZCgpOyB1c2UgYSBieXRlYXJyYXkgZm9yIGJ1ZmZlcmluZworICBpbiBTdHJlYW1SZWFkZXI7IGFuZCBtb3JlLgorCiAtIElzc3VlICMyMDI4ODogZml4IGhhbmRsaW5nIG9mIGludmFsaWQgbnVtZXJpYyBjaGFycmVmcyBpbiBIVE1MUGFyc2VyLgogCiAtIElzc3VlICMyMDQyNDogUHl0aG9uIGltcGxlbWVudGF0aW9uIG9mIGlvLlN0cmluZ0lPIG5vdyBzdXBwb3J0cyBsb25lIHN1cnJvZ2F0ZXMuCiAKKy0gSXNzdWUgIzIwMzA4OiBpbnNwZWN0LnNpZ25hdHVyZSBub3cgd29ya3Mgb24gY2xhc3NlcyB3aXRob3V0IHVzZXItZGVmaW5lZAorICBfX2luaXRfXyBvciBfX25ld19fIG1ldGhvZHMuCisKKy0gSXNzdWUgIzIwMzcyOiBpbnNwZWN0LmdldGZpbGUgKGFuZCBhIGJ1bmNoIG9mIG90aGVyIGluc3BlY3QgZnVuY3Rpb25zIHRoYXQKKyAgdXNlIGl0KSBkb2Vzbid0IGNyYXNoIHdpdGggdW5leHBlY3RlZCBBdHRyaWJ1dGVFcnJvciBvbiBjbGFzc2VzIGRlZmluZWQgaW4gQworICB3aXRob3V0IF9fbW9kdWxlX18uCisKKy0gSXNzdWUgIzIwMzU2OiBpbnNwZWN0LnNpZ25hdHVyZSBmb3JtYXR0aW5nIHVzZXMgJy8nIHRvIHNlcGFyYXRlCisgIHBvc2l0aW9uYWwtb25seSBwYXJhbWV0ZXJzIGZyb20gb3RoZXJzLgorCistIElzc3VlICMyMDIyMzogaW5zcGVjdC5zaWduYXR1cmUgbm93IHN1cHBvcnRzIG1ldGhvZHMgZGVmaW5lZCB3aXRoCisgIGZ1bmN0b29scy5wYXJ0aWFsbWV0aG9kcy4KKwogLSBJc3N1ZSAjMTk0NTY6IG50cGF0aC5qb2luKCkgbm93IGpvaW5zIHJlbGF0aXZlIHBhdGhzIGNvcnJlY3RseSB3aGVuIGEgZHJpdmUKICAgaXMgcHJlc2VudC4KIAotLSBJc3N1ZSAjMTkwNzc6IHRlbXBmaWxlLlRlbXBvcmFyeURpcmVjdG9yeSBjbGVhbnVwIGlzIG5vdyBtb3N0IGxpa2VseQotICBzdWNjZXNzZnVsIHdoZW4gY2FsbGVkIGR1cmluZyBudWxsaW5nIG91dCBvZiBtb2R1bGVzIGR1cmluZyBzaHV0ZG93bi4KLSAgTWlzbGVhZGluZyBleGNlcHRpb24gbm8gbG9uZ2VyIHJhaXNlZCB3aGVuIHJlc291cmNlIHdhcm5pbmcgaXMgZW1pdHRlZAotICBkdXJpbmcgc2h1dGRvd24uCistIElzc3VlICMxOTA3NzogdGVtcGZpbGUuVGVtcG9yYXJ5RGlyZWN0b3J5IGNsZWFudXAgbm8gbG9uZ2VyIGZhaWxzIHdoZW4KKyAgY2FsbGVkIGR1cmluZyBzaHV0ZG93bi4gIEVtaXR0aW5nIHJlc291cmNlIHdhcm5pbmcgaW4gX19kZWxfXyBubyBsb25nZXIgZmFpbHMuCisgIE9yaWdpbmFsIHBhdGNoIGJ5IEFudG9pbmUgUGl0cm91LgorCistIElzc3VlICMyMDM5NDogU2lsZW5jZSBDb3Zlcml0eSB3YXJuaW5nIGluIGF1ZGlvb3AgbW9kdWxlLgogCiAtIElzc3VlICMyMDM2NzogRml4IGJlaGF2aW9yIG9mIGNvbmN1cnJlbnQuZnV0dXJlcy5hc19jb21wbGV0ZWQoKSBmb3IKICAgZHVwbGljYXRlIGFyZ3VtZW50cy4gIFBhdGNoIGJ5IEdsZW5uIExhbmdmb3JkLgpAQCAtMjg5LDYgKzIzODksMTggQEAKICAgY29kZWNzLlN0cmVhbVJlYWRlciByZXR1cm5lZCBpbmNvbXBsZXRlIGRhdGEgd2hlbiB3ZXJlIGNhbGxlZCBhZnRlcgogICByZWFkbGluZSgpIG9yIHJlYWQoc2l6ZSkuICBCYXNlZCBvbiBwYXRjaCBieSBBbWF1cnkgRm9yZ2VvdCBkJ0FyYy4KIAorLSBJc3N1ZSAjMjAxMDU6IHRoZSBjb2RlYyBleGNlcHRpb24gY2hhaW5pbmcgbm93IGNvcnJlY3RseSBzZXRzIHRoZQorICB0cmFjZWJhY2sgb2YgdGhlIG9yaWdpbmFsIGV4Y2VwdGlvbiBhcyBpdHMgX190cmFjZWJhY2tfXyBhdHRyaWJ1dGUuCisKKy0gSXNzdWUgIzE3NDgxOiBpbnNwZWN0LmdldGZ1bGxhcmdzcGVjKCkgbm93IHVzZXMgaW5zcGVjdC5zaWduYXR1cmUoKSBBUEkuCisKKy0gSXNzdWUgIzE1MzA0OiBjb25jdXJyZW50LmZ1dHVyZXMud2FpdCgpIGNhbiBibG9jayBmb3JldmVyIGV2ZW4gaWYKKyAgRnV0dXJlcyBoYXZlIGNvbXBsZXRlZC4gUGF0Y2ggYnkgR2xlbm4gTGFuZ2ZvcmQuCisKKy0gSXNzdWUgIzE0NDU1OiBwbGlzdGxpYjogZml4IHNlcmlhbGl6aW5nIGludGVnZXJzIGluIHRoZSByYW5nZQorICBvZiBhbiB1bnNpZ25lZCBsb25nIGxvbmcgYnV0IG91dHNpZGUgb2YgdGhlIHJhbmdlIG9mIHNpZ25lZCBsb25nIGxvbmcgZm9yCisgIGJpbmFyeSBwbGlzdCBmaWxlcy4KKwogSURMRQogLS0tLQogCkBAIC0yOTYsNyArMjQwOCw3IEBACiAgIFBhdGNoIG1vc3RseSBieSBTZXJoaXkgU3RvcmNoYWthLgogCiAtIFVwZGF0ZSB0aGUgcHl0aG9uLmdpZiBpY29uIGZvciB0aGUgSWRsZSBjbGFzc2Jyb3dzZXIgYW5kIHBhdGhib3dzZXIKLSAgZnJvbSB0aGUgb2xkIGdyZWVuIHNuYWtlIHRvIHRoZSBuZXcgbmV3IGJsdWUgYW5kIHllbGxvdyBzbmFrZXMuCisgIGZyb20gdGhlIG9sZCBncmVlbiBzbmFrZSB0byB0aGUgbmV3IGJsdWUgYW5kIHllbGxvdyBzbmFrZXMuCiAKIC0gSXNzdWUgIzE3NzIxOiBSZW1vdmUgbm9uLWZ1bmN0aW9uYWwgY29uZmlndXJhdGlvbiBkaWFsb2cgaGVscCBidXR0b24gdW50aWwgd2UKICAgbWFrZSBpdCBhY3R1YWxseSBnaXZlcyBzb21lIGhlbHAgd2hlbiBjbGlja2VkLiBQYXRjaCBieSBHdWlsaGVybWUgU2ltw7Vlcy4KQEAgLTMwNCwxMSArMjQxNiw3IEBACiBUZXN0cwogLS0tLS0KIAotLSBJc3N1ZSAjMjA1MTA6IFJld3JvdGUgdGVzdF9leGl0IGluIHRlc3Rfc3lzIHRvIG1hdGNoIGV4aXN0aW5nIGNvbW1lbnRzLAotICB1c2UgbW9kZXJuIHVuaXR0ZXN0IGZlYXR1cmVzLCBhbmQgdXNlIGhlbHBlcnMgZnJvbSB0ZXN0LnNjcmlwdF9oZWxwZXIKLSAgaW5zdGVhZCBvZiB1c2luZyBzdWJwcm9jZXNzIGRpcmVjdGx5LiAgUGF0Y2ggYnkgR2FyZXRoIFJlZXMuCi0KLS0gSXNzdWUgIzIwNTMyOiBUZXN0cyB3aGljaCB1c2UgX3Rlc3RjYXBpIGFyZSBub3cgbWFya2VkIGFzIENQeXRob24gb25seS4KKy0gSXNzdWUgIzIwNTMyOiBUZXN0cyB3aGljaCB1c2UgX3Rlc3RjYXBpIG5vdyBhcmUgbWFya2VkIGFzIENQeXRob24gb25seS4KIAogLSBJc3N1ZSAjMTk5MjA6IEFkZGVkIHRlc3RzIGZvciBUYXJGaWxlLmxpc3QoKS4gIEJhc2VkIG9uIHBhdGNoIGJ5IFZhanJhc2t5IEtvay4KIApAQCAtMzE3LDQzICsyNDI1LDczIEBACiAKIC0gSXNzdWUgIzIwNDc0OiBGaXggdGVzdF9zb2NrZXQgInVuZXhwZWN0ZWQgc3VjY2VzcyIgZmFpbHVyZXMgb24gT1MgWCAxMC43Ky4KIAotLSBJc3N1ZSAjMjA2MDU6IE1ha2UgdGVzdF9zb2NrZXQgZ2V0YWRkcmluZm8gT1MgWCBzZWdmYXVsdCB0ZXN0IG1vcmUgcm9idXN0LgorVG9vbHMvRGVtb3MKKy0tLS0tLS0tLS0tCiAKLURvY3VtZW50YXRpb24KLS0tLS0tLS0tLS0tLS0KKy0gSXNzdWUgIzIwNTMwOiBBcmd1bWVudCBDbGluaWMncyBzaWduYXR1cmUgZm9ybWF0IGhhcyBiZWVuIHJldmlzZWQgYWdhaW4uCisgIFRoZSBuZXcgc3ludGF4IGlzIGhpZ2hseSBodW1hbiByZWFkYWJsZSB3aGlsZSBzdGlsbCBwcmV2ZW50aW5nIGZhbHNlCisgIHBvc2l0aXZlcy4gIFRoZSBzeW50YXggYWxzbyBleHRlbmRzIFB5dGhvbiBzeW50YXggdG8gZGVub3RlICJzZWxmIiBhbmQKKyAgcG9zaXRpb25hbC1vbmx5IHBhcmFtZXRlcnMsIGFsbG93aW5nIGluc3BlY3QuU2lnbmF0dXJlIG9iamVjdHMgdG8gYmUKKyAgdG90YWxseSBhY2N1cmF0ZSBmb3IgYWxsIHN1cHBvcnRlZCBidWlsdGlucyBpbiBQeXRob24gMy40LgogCi0tIElzc3VlICMyMDQ4ODogSW1wb3J0bGliIGlzIG5vIGxvbmdlciAqYW4qIGltcGxlbWVudGF0aW9uIG9mIGltcG9ydCwgaXQncyAqdGhlKgotICBpbXBsZW1lbnRhdGlvbi4KKy0gSXNzdWUgIzIwNDU2OiBBcmd1bWVudCBDbGluaWMgbm93IG9ic2VydmVzIHRoZSBDIHByZXByb2Nlc3NvciBjb25kaXRpb25hbAorICBjb21waWxhdGlvbiBzdGF0ZW1lbnRzIG9mIHRoZSBDIGZpbGVzIGl0IHBhcnNlcy4gIFdoZW4gYSBDbGluaWMgYmxvY2sgaXMKKyAgaW5zaWRlIGEgY29uZGl0aW9uYWwgY29kZSwgaXQgYWRqdXN0cyBpdHMgb3V0cHV0IHRvIG1hdGNoLCBpbmNsdWRpbmcKKyAgYXV0b21hdGljYWxseSBnZW5lcmF0aW5nIGFuIGVtcHR5IG1ldGhvZGRlZiBtYWNyby4KKworLSBJc3N1ZSAjMjA0NTY6IENsb25lZCBmdW5jdGlvbnMgaW4gQXJndW1lbnQgQ2xpbmljIG5vdyB1c2UgdGhlIGNvcnJlY3QKKyAgbmFtZSwgbm90IHRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbiB0aGV5IHdlcmUgY2xvbmVkIGZyb20sIGZvciB0ZXh0CisgIHN0cmluZ3MgaW5zaWRlIGdlbmVyYXRlZCBjb2RlLgorCistIElzc3VlICMyMDQ1NjogRml4ZWQgQXJndW1lbnQgQ2xpbmljJ3MgdGVzdCBzdWl0ZSBhbmQgIi0tY29udmVydGVycyIgZmVhdHVyZS4KKworLSBJc3N1ZSAjMjA0NTY6IEFyZ3VtZW50IENsaW5pYyBub3cgYWxsb3dzIHNwZWNpZnlpbmcgZGlmZmVyZW50IG5hbWVzCisgIGZvciBhIHBhcmFtZXRlciBpbiBQeXRob24gYW5kIEMsIHVzaW5nICJhcyIgb24gdGhlIHBhcmFtZXRlciBsaW5lLgorCistIElzc3VlICMyMDMyNjogQXJndW1lbnQgQ2xpbmljIG5vdyB1c2VzIGEgc2ltcGxlLCB1bmlxdWUgc2lnbmF0dXJlIHRvCisgIGFubm90YXRlIHRleHQgc2lnbmF0dXJlcyBpbiBkb2NzdHJpbmdzLCByZXN1bHRpbmcgaW4gZmV3ZXIgZmFsc2UKKyAgcG9zaXRpdmVzLiAgInNlbGYiIHBhcmFtZXRlcnMgYXJlIGFsc28gZXhwbGljaXRseSBtYXJrZWQsIGFsbG93aW5nCisgIGluc3BlY3QuU2lnbmF0dXJlKCkgdG8gYXV0aG9yaXRhdGl2ZWx5IGRldGVjdCAoYW5kIHNraXApIHNhaWQgcGFyYW1ldGVycy4KKworLSBJc3N1ZSAjMjAzMjY6IEFyZ3VtZW50IENsaW5pYyBub3cgZ2VuZXJhdGVzIHNlcGFyYXRlIGNoZWNrc3VtcyBmb3IgdGhlCisgIGlucHV0IGFuZCBvdXRwdXQgc2VjdGlvbnMgb2YgdGhlIGJsb2NrLCBhbGxvd2luZyBleHRlcm5hbCB0b29scyB0byB2ZXJpZnkKKyAgdGhhdCB0aGUgaW5wdXQgaGFzIG5vdCBjaGFuZ2VkIChhbmQgdGh1cyB0aGUgb3V0cHV0IGlzIG5vdCBvdXQtb2YtZGF0ZSkuCiAKIEJ1aWxkCiAtLS0tLQogCi0tIElzc3VlICMyMDIyMTogUmVtb3ZlZCBjb25mbGljdGluZyAob3IgY2lyY3VsYXIpIGh5cG90IGRlZmluaXRpb24gd2hlbgotICBjb21waWxlZCB3aXRoIFZTIDIwMTAgb3IgYWJvdmUuICBJbml0aWFsIHBhdGNoIGJ5IFRhYnJleiBNb2hhbW1lZC4KKy0gSXNzdWUgIzIwNDY1OiBVcGRhdGUgU1FMaXRlIHNoaXBwZWQgd2l0aCBPUyBYIGluc3RhbGxlciB0byAzLjguMy4KIAotLSBJc3N1ZSAjMjA2MDk6IFJlc3RvcmVkIHRoZSBhYmlsaXR5IHRvIGJ1aWxkIDY0LWJpdCBXaW5kb3dzIGJpbmFyaWVzIG9uCi0gIDMyLWJpdCBXaW5kb3dzLCB3aGljaCB3YXMgYnJva2VuIGJ5IHRoZSBjaGFuZ2UgaW4gaXNzdWUgIzE5Nzg4LgorQy1BUEkKKy0tLS0tCisKKy0gSXNzdWUgIzIwNTE3OiBBZGRlZCBuZXcgZnVuY3Rpb25zIGFsbG93aW5nIE9TRXJyb3IgZXhjZXB0aW9ucyB0byByZWZlcmVuY2UKKyAgdHdvIGZpbGVuYW1lcyBpbnN0ZWFkIG9mIG9uZTogUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lT2JqZWN0cygpIGFuZAorICBQeUVycl9TZXRFeGNGcm9tV2luZG93c0VycldpdGhGaWxlbmFtZU9iamVjdHMoKS4KKworRG9jdW1lbnRhdGlvbgorLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMyMDQ4ODogQ2hhbmdlIHdvcmRpbmcgdG8gc2F5IGltcG9ydGxpYiBpcyAqdGhlKiBpbXBsZW1lbnRhdGlvbiBvZgorICBpbXBvcnQgaW5zdGVhZCBvZiBqdXN0ICphbiogaW1wbGVtZW50YXRpb24uCisKKy0gSXNzdWUgIzYzODY6IENsYXJpZnkgaW4gdGhlIHR1dG9yaWFsIHRoYXQgc3BlY2lmeWluZyBhIHN5bWxpbmsgdG8gZXhlY3V0ZQorICBtZWFucyB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIGV4ZWN1dGVkIHNjcmlwdCBhbmQgbm90IHRoZSBzeW1saW5rIGlzCisgIGFkZGVkIHRvIHN5cy5wYXRoLgogCiAKLVdoYXQncyBOZXcgaW4gUHl0aG9uIDMuMy40PwotPT09PT09PT09PT09PT09PT09PT09PT09PT09CitXaGF0J3MgTmV3IGluIFB5dGhvbiAzLjQuMCBCZXRhIDM/Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKLSpSZWxlYXNlIGRhdGU6IDA5LUZlYi0yMDE0KgotCi1MaWJyYXJ5Ci0tLS0tLS0tCi0KLS0gSXNzdWUgIzIwMzc0OiBGaXggYnVpbGQgd2FybmluZ3Mgb2YgdGhlIHJlYWRsaW5lIG1vZHVsZSB3aXRoIGxpYmVkaXQgb24gTWFjLgotCi0KLVdoYXQncyBOZXcgaW4gUHl0aG9uIDMuMy40IHJlbGVhc2UgY2FuZGlkYXRlIDE/Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0qUmVsZWFzZSBkYXRlOiAyNi1KYW4tMjAxNCoKK1JlbGVhc2UgZGF0ZTogMjAxNC0wMS0yNgogCiBDb3JlIGFuZCBCdWlsdGlucwogLS0tLS0tLS0tLS0tLS0tLS0KIAorLSBJc3N1ZSAjMjAxODk6IEZvdXIgYWRkaXRpb25hbCBidWlsdGluIHR5cGVzIChQeVR5cGVPYmplY3QsCisgIFB5TWV0aG9kRGVzY3JfVHlwZSwgX1B5TWV0aG9kV3JhcHBlcl9UeXBlLCBhbmQgUHlXcmFwcGVyRGVzY3JfVHlwZSkKKyAgaGF2ZSBiZWVuIG1vZGlmaWVkIHRvIHByb3ZpZGUgaW50cm9zcGVjdGlvbiBpbmZvcm1hdGlvbiBmb3IgYnVpbHRpbnMuCisKIC0gSXNzdWUgIzE3ODI1OiBDdXJzb3IgIl4iIGlzIGNvcnJlY3RseSBwb3NpdGlvbmVkIGZvciBTeW50YXhFcnJvciBhbmQKICAgSW5kZW50YXRpb25FcnJvci4KIApAQCAtMzY4LDI5ICsyNTA2LDI2IEBACiAgIHNvdXJjZSBlbmNvZGluZyBkZWNsYXJhdGlvbnMsIGFuZCBjYW4gYmUgdXNlZCB0byBtYWtlIFB5dGhvbiBiYXRjaCBmaWxlcwogICBvbiBXaW5kb3dzLgogCi0tIElzc3VlICMxNzQzMjogRHJvcCBVQ1MyIGZyb20gbmFtZXMgb2YgVW5pY29kZSBmdW5jdGlvbnMgaW4gcHl0aG9uMy5kZWYuCi0KLS0gSXNzdWUgIzE5OTY5OiBQeUJ5dGVzX0Zyb21Gb3JtYXRWKCkgbm93IHJhaXNlcyBhbiBPdmVyZmxvd0Vycm9yIGlmICIlYyIKLSAgYXJndW1lbnQgaXMgbm90IGluIHJhbmdlIFswOyAyNTVdLgotCi0tIElzc3VlICMxNDQzMjogR2VuZXJhdG9yIG5vdyBjbGVhcnMgdGhlIGJvcnJvd2VkIHJlZmVyZW5jZSB0byB0aGUgdGhyZWFkCi0gIHN0YXRlLiBGaXggYSBjcmFzaCB3aGVuIGEgZ2VuZXJhdG9yIGlzIGNyZWF0ZWQgaW4gYSBDIHRocmVhZCB0aGF0IGlzCi0gIGRlc3Ryb3llZCB3aGlsZSB0aGUgZ2VuZXJhdG9yIGlzIHN0aWxsIHVzZWQuIFRoZSBpc3N1ZSB3YXMgdGhhdCBhIGdlbmVyYXRvcgotICBjb250YWlucyBhIGZyYW1lLCBhbmQgdGhlIGZyYW1lIGtlcHQgYSByZWZlcmVuY2UgdG8gdGhlIFB5dGhvbiBzdGF0ZSBvZiB0aGUKLSAgZGVzdHJveWVkIEMgdGhyZWFkLiBUaGUgY3Jhc2ggb2NjdXJzIHdoZW4gYSB0cmFjZSBmdW5jdGlvbiBpcyBzZXR1cC4KLQotLSBJc3N1ZSAjMTk5MzI6IEZpeCB0eXBvIGluIGltcG9ydC5oLCBtaXNzaW5nIHdoaXRlc3BhY2VzIGluIGZ1bmN0aW9uIHByb3RvdHlwZXMuCi0KLS0gSXNzdWUgIzE5NzI5OiBJbiBzdHIuZm9ybWF0KCksIGZpeCByZWN1cnNpdmUgZXhwYW5zaW9uIGluIGZvcm1hdCBzcGVjLgotCi0tIElzc3VlICMxOTYzODogRml4IHBvc3NpYmxlIGNyYXNoIC8gdW5kZWZpbmVkIGJlaGF2aW91ciBmcm9tIGh1Z2UgKG1vcmUgdGhhbiAyCi0gIGJpbGxpb24gY2hhcmFjdGVycykgaW5wdXQgc3RyaW5ncyBpbiBfUHlfZGdfc3RydG9kLgotCiBMaWJyYXJ5CiAtLS0tLS0tCiAKLS0gSXNzdWUgIzE2MDQyOiBDVkUtMjAxMy0xNzUyOiBzbXRwbGliOiBMaW1pdCBhbW91bnQgb2YgZGF0YSByZWFkIGJ5Ci0gIGxpbWl0aW5nIHRoZSBjYWxsIHRvIHJlYWRsaW5lKCkuICBPcmlnaW5hbCBwYXRjaCBieSBDaHJpc3RpYW4gSGVpbWVzLgorLSBhc3luY2lvOiBWYXJpb3VzIGltcHJvdmVtZW50cyBhbmQgc21hbGwgY2hhbmdlcyBub3QgYWxsIGNvdmVyZWQgYnkKKyAgaXNzdWVzIGxpc3RlZCBiZWxvdy4gIEUuZy4gd2FpdF9mb3IoKSBub3cgY2FuY2VscyB0aGUgaW5uZXIgdGFzayBpZgorICB0aGUgdGltZW91dCBvY2NjdXJzOyB0d2Vha2VkIHRoZSBzZXQgb2YgZXhwb3J0ZWQgc3ltYm9sczsgcmVuYW1lZAorICBFbXB0eS9GdWxsIHRvIFF1ZXVlRW1wdHkvUXVldWVGdWxsOyAid2l0aCAoeWllbGQgZnJvbSBsb2NrKSIgbm93CisgIHVzZXMgYSBzZXBhcmF0ZSBjb250ZXh0IG1hbmFnZXI7IHJlYWRleGFjdGx5KCkgcmFpc2VzIGlmIG5vdCBlbm91Z2gKKyAgZGF0YSB3YXMgcmVhZDsgUFRZIHN1cHBvcnQgdHdlYWtzLgorCistIElzc3VlICMyMDMxMTogYXN5bmNpbzogQWRkIGEgZ3JhbnVsYXJpdHkgYXR0cmlidXRlIHRvIEJhc2VFdmVudExvb3A6IG1heGltdW0KKyAgYmV0d2VlbiB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgQmFzZUV2ZW50TG9vcC50aW1lKCkgbWV0aG9kIGFuZCB0aGUgcmVzb2x1dGlvbgorICBvZiB0aGUgc2VsZWN0b3IuIFRoZSBncmFudWFyaWxpdHkgaXMgdXNlZCBpbiB0aGUgc2NoZWR1bGVyIHRvIHJvdW5kIHRpbWUgYW5kCisgIGRlYWRsaW5lLgorCistIElzc3VlICMyMDMxMTogc2VsZWN0b3JzOiBBZGQgYSByZXNvbHV0aW9uIGF0dHJpYnV0ZSB0byBCYXNlU2VsZWN0b3IuCisKKy0gSXNzdWUgIzIwMTg5OiB1bml0dGVzdC5tb2NrIG5vdyBubyBsb25nZXIgYXNzdW1lcyB0aGF0IGFueSBvYmplY3QgZm9yCisgIHdoaWNoIGl0IGNvdWxkIGdldCBhbiBpbnNwZWN0LlNpZ25hdHVyZSBpcyBhIGNhbGxhYmxlIHdyaXR0ZW4gaW4gUHl0aG9uLgorICBGaXggY291cnRlc3kgb2YgTWljaGFlbCBGb29yZC4KIAogLSBJc3N1ZSAjMjAzMTc6IEV4aXRTdGFjay5fX2V4aXRfXyBjb3VsZCBjcmVhdGUgYSBzZWxmLXJlZmVyZW50aWFsIGxvb3AgaWYgYW4KICAgZXhjZXB0aW9uIHJhaXNlZCBieSBhIGNsZWFudXAgb3BlcmF0aW9uIGFscmVhZHkgaGFkIGl0cyBjb250ZXh0IHNldApAQCAtNDAzLDYgKzI1MzgsOSBAQAogLSBJc3N1ZSAjMjAyNjI6IFdhcm5pbmdzIGFyZSByYWlzZWQgbm93IHdoZW4gZHVwbGljYXRlIG5hbWVzIGFyZSBhZGRlZCBpbiB0aGUKICAgWklQIGZpbGUgb3IgdG9vIGxvbmcgWklQIGZpbGUgY29tbWVudCBpcyB0cnVuY2F0ZWQuCiAKKy0gSXNzdWUgIzIwMTY1OiBUaGUgdW5pdHRlc3QgbW9kdWxlIG5vIGxvbmdlciBjb25zaWRlcnMgdGVzdHMgbWFya2VkIHdpdGgKKyAgQGV4cGVjdGVkRmFpbHVyZSBzdWNjZXNzZnVsIGlmIHRoZXkgcGFzcy4KKwogLSBJc3N1ZSAjMTg1NzQ6IEFkZGVkIG1pc3NpbmcgbmV3bGluZSBpbiAxMDAtQ29udGludWUgcmVwbHkgZnJvbQogICBodHRwLnNlcnZlci5CYXNlSFRUUFJlcXVlc3RIYW5kbGVyLiBQYXRjaCBieSBOaWtvbGF1cyBSYXRoLgogCkBAIC00MzQsNyArMjU3Miw3IEBACiAtIElzc3VlICMxOTA5NzogUmFpc2UgdGhlIGNvcnJlY3QgRXhjZXB0aW9uIHdoZW4gY2dpLkZpZWxkU3RvcmFnZSBpcyBnaXZlbiBhbgogICBpbnZhbGlkIGZpbGVvYmouCiAKLS0gSXNzdWUgIzIwMjE3OiBGaXggYnVpbGQgaW4gU0NIRURfU1BPUkFESUMgaXMgZGVmaW5lZC4KKy0gSXNzdWUgIzIwMTUyOiBQb3J0ZWQgUHl0aG9uL2ltcG9ydC5jIG92ZXIgdG8gQXJndW1lbnQgQ2xpbmljLgogCiAtIElzc3VlICMxMzEwNzogYXJncGFyc2UgYW5kIG9wdHBhcnNlIG5vIGxvbmdlciByYWlzZXMgYW4gZXhjZXB0aW9uIHdoZW4gb3V0cHV0CiAgIGEgaGVscCBvbiBlbnZpcm9ubWVudCB3aXRoIHRvbyBzbWFsbCBDT0xVTU5TLiAgQmFzZWQgb24gcGF0Y2ggYnkKQEAgLTQ1MiwyMCArMjU5MCwyMDYgQEAKIC0gSXNzdWUgIzIwMTEzOiBvcy5yZWFkdigpIGFuZCBvcy53cml0ZXYoKSBub3cgcmFpc2UgYW4gT1NFcnJvciBleGNlcHRpb24gb24KICAgZXJyb3IgaW5zdGVhZCBvZiByZXR1cm5pbmcgLTEuCiAKKy0gSXNzdWUgIzE5NzE5OiBNYWtlIGltcG9ydGxpYi5hYmMuTWV0YVBhdGhGaW5kZXIuZmluZF9tb2R1bGUoKSwKKyAgUGF0aEVudHJ5RmluZGVyLmZpbmRfbG9hZGVyKCksIGFuZCBMb2FkZXIubG9hZF9tb2R1bGUoKSB1c2UgUEVQIDQ1MSBBUElzIHRvCisgIGhlbHAgd2l0aCBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eS4KKworLSBJc3N1ZSAjMjAxNDQ6IGluc3BlY3QuU2lnbmF0dXJlIG5vdyBzdXBwb3J0cyBwYXJzaW5nIHNpbXBsZSBzeW1ib2xpYworICBjb25zdGFudHMgYXMgcGFyYW1ldGVyIGRlZmF1bHQgdmFsdWVzIGluIF9fdGV4dF9zaWduYXR1cmVfXy4KKwogLSBJc3N1ZSAjMjAwNzI6IEZpeGVkIG11bHRpcGxlIGVycm9ycyBpbiB0a2ludGVyIHdpdGggd2FudG9iamVjdHMgaXMgRmFsc2UuCiAKKy0gSXNzdWUgIzIwMjI5OiBBdm9pZCBwbGlzdGxpYiBkZXByZWNhdGlvbiB3YXJuaW5nIGluIHBsYXRmb3JtLm1hY192ZXIoKS4KKworLSBJc3N1ZSAjMTQ0NTU6IEZpeCBzb21lIHByb2JsZW1zIHdpdGggdGhlIG5ldyBiaW5hcnkgcGxpc3Qgc3VwcG9ydCBpbiBwbGlzdGxpYi4KKworSURMRQorLS0tLQorCistIElzc3VlICMxNzM5MDogQWRkIFB5dGhvbiB2ZXJzaW9uIHRvIElkbGUgZWRpdG9yIHdpbmRvdyB0aXRsZSBiYXIuCisgIE9yaWdpbmFsIHBhdGNoZXMgYnkgRWRtb25kIEJ1cm5ldHQgYW5kIEtlbnQgSm9obnNvbi4KKworLSBJc3N1ZSAjMTg5NjA6IElETEUgbm93IGlnbm9yZXMgdGhlIHNvdXJjZSBlbmNvZGluZyBkZWNsYXJhdGlvbiBvbiB0aGUgc2Vjb25kCisgIGxpbmUgaWYgdGhlIGZpcnN0IGxpbmUgY29udGFpbnMgYW55dGhpbmcgZXhjZXB0IGEgY29tbWVudC4KKworVGVzdHMKKy0tLS0tCisKKy0gSXNzdWUgIzIwMzU4OiBUZXN0cyBmb3IgY3Vyc2VzLndpbmRvdy5vdmVybGF5IGFuZCBjdXJzZXMud2luZG93Lm92ZXJ3cml0ZQorICBubyBsb25nZXIgc3BlY2lmeSBtaW57cm93LGNvbH0gPiBtYXh7cm93LGNvbH0uCisKKy0gSXNzdWUgIzE5ODA0OiBUaGUgdGVzdF9maW5kX21hYyB0ZXN0IGluIHRlc3RfdXVpZCBpcyBub3cgc2tpcHBlZCBpZiB0aGUKKyAgaWZjb25maWcgZXhlY3V0YWJsZSBpcyBub3QgYXZhaWxhYmxlLgorCistIElzc3VlICMxOTg4NjogVXNlIGJldHRlciBlc3RpbWF0ZWQgbWVtb3J5IHJlcXVpcmVtZW50cyBmb3IgYmlnbWVtIHRlc3RzLgorCitUb29scy9EZW1vcworLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMjAzOTA6IEFyZ3VtZW50IENsaW5pYydzICJmaWxlIiBvdXRwdXQgcHJlc2V0IG5vdyBkZWZhdWx0cyB0bworICAie2Rpcm5hbWV9L2NsaW5pYy97YmFzZW5hbWV9LmgiLgorCistIElzc3VlICMyMDM5MDogQXJndW1lbnQgQ2xpbmljJ3MgImNsYXNzIiBkaXJlY3RpdmUgc3ludGF4IGhhcyBiZWVuIGV4dGVuZGVkCisgIHdpdGggdHdvIG5ldyByZXF1aXJlZCBhcmd1bWVudHM6ICJ0eXBlZGVmIiBhbmQgInR5cGVfb2JqZWN0Ii4KKworLSBJc3N1ZSAjMjAzOTA6IEFyZ3VtZW50IENsaW5pYzogSWYgX19uZXdfXyBvciBfX2luaXRfXyBmdW5jdGlvbnMgZGlkbid0IHVzZQorICBrd2FyZ3MgKG9yIGFyZ3MpLCB0aGUgUHlBcmdfTm9LZXl3b3JkcyAob3IgUHlBcmdfTm9Qb3NpdGlvbmFsKSBjYWxscworICBnZW5lcmF0ZWQgYXJlIG9ubHkgcnVuIHdoZW4gdGhlIHR5cGUgb2JqZWN0IGlzIGFuIGV4YWN0IG1hdGNoLgorCistIElzc3VlICMyMDM5MDogQXJndW1lbnQgQ2xpbmljIG5vdyBmYWlscyBpZiB5b3UgaGF2ZSByZXF1aXJlZCBwYXJhbWV0ZXJzIGFmdGVyCisgIG9wdGlvbmFsIHBhcmFtZXRlcnMuCisKKy0gSXNzdWUgIzIwMzkwOiBBcmd1bWVudCBDbGluaWMgY29udmVydGVycyBub3cgaGF2ZSBhIG5ldyB0ZW1wbGF0ZSB0aGV5IGNhbgorICBpbmplY3QgY29kZSBpbnRvOiAibW9kaWZpZXJzIi4gIENvZGUgcHV0IHRoZXJlIGlzIHJ1biBpbiB0aGUgcGFyc2luZworICBmdW5jdGlvbiBhZnRlciBhcmd1bWVudCBwYXJzaW5nIGJ1dCBiZWZvcmUgdGhlIGNhbGwgdG8gdGhlIGltcGwuCisKKy0gSXNzdWUgIzIwMzc2OiBBcmd1bWVudCBDbGluaWMgbm93IGVzY2FwZXMgYmFja3NsYXNoZXMgaW4gZG9jc3RyaW5ncy4KKworLSBJc3N1ZSAjMjAzODE6IEFyZ3VtZW50IENsaW5pYyBub3cgc2FuaXR5IGNoZWNrcyB0aGUgZGVmYXVsdCBhcmd1bWVudCB3aGVuCisgIGNfZGVmYXVsdCBpcyBhbHNvIHNwZWNpZmllZCwgcHJvdmlkaW5nIGEgbmljZSBmYWlsdXJlIG1lc3NhZ2UgZm9yCisgIGRpc2FsbG93ZWQgdmFsdWVzLgorCistIElzc3VlICMyMDE4OTogQXJndW1lbnQgQ2xpbmljIG5vdyBlbnN1cmVzIHRoYXQgcGFyc2VyIGZ1bmN0aW9ucyBmb3IKKyAgX19uZXdfXyBhcmUgYWx3YXlzIG9mIHR5cGUgbmV3ZnVuYywgdGhlIHR5cGUgb2YgdGhlIHRwX25ldyBzbG90LgorICBTaW1pbGFybHksIHBhcnNlciBmdW5jdGlvbnMgZm9yIF9faW5pdF9fIGFyZSBub3cgYWx3YXlzIG9mIHR5cGUgaW5pdHByb2MsCisgIHRoZSB0eXBlIG9mIHRwX2luaXQuCisKKy0gSXNzdWUgIzIwMTg5OiBBcmd1bWVudCBDbGluaWMgbm93IHN1cHByZXNzZXMgdGhlIGRvY3N0cmluZyBmb3IgX19uZXdfXworICBhbmQgX19pbml0X18gZnVuY3Rpb25zIGlmIG5vIGRvY3N0cmluZyBpcyBwcm92aWRlZCBpbiB0aGUgaW5wdXQuCisKKy0gSXNzdWUgIzIwMTg5OiBBcmd1bWVudCBDbGluaWMgbm93IHN1cHByZXNzZXMgdGhlICJzZWxmIiBwYXJhbWV0ZXIgaW4gdGhlCisgIGltcGwgZm9yIEBzdGF0aWNtZXRob2QgZnVuY3Rpb25zLgorCistIElzc3VlICMyMDI5NDogQXJndW1lbnQgQ2xpbmljIG5vdyBzdXBwb3J0cyBhcmd1bWVudCBwYXJzaW5nIGZvciBfX25ld19fIGFuZAorICBfX2luaXRfXyBmdW5jdGlvbnMuCisKKy0gSXNzdWUgIzIwMjk5OiBBcmd1bWVudCBDbGluaWMgY3VzdG9tIGNvbnZlcnRlcnMgbWF5IG5vdyBjaGFuZ2UgdGhlIGRlZmF1bHQKKyAgdmFsdWUgb2YgY19kZWZhdWx0IGFuZCBweV9kZWZhdWx0IHdpdGggYSBjbGFzcyBtZW1iZXIuCisKKy0gSXNzdWUgIzIwMjg3OiBBcmd1bWVudCBDbGluaWMncyBvdXRwdXQgaXMgbm93IGNvbmZpZ3VyYWJsZSwgYWxsb3dpbmcKKyAgZGVsYXlpbmcgaXRzIG91dHB1dCBvciBldmVuIHJlZGlyZWN0aW5nIGl0IHRvIGEgc2VwYXJhdGUgZmlsZS4KKworLSBJc3N1ZSAjMjAyMjY6IEFyZ3VtZW50IENsaW5pYyBub3cgcGVybWl0cyBzaW1wbGUgZXhwcmVzc2lvbnMKKyAgKGUuZy4gInN5cy5tYXhzaXplIC0gMSIpIGFzIGRlZmF1bHQgdmFsdWVzIGZvciBwYXJhbWV0ZXJzLgorCistIElzc3VlICMxOTkzNjogQWRkZWQgZXhlY3V0YWJsZSBiaXRzIG9yIHNoZWJhbmcgbGluZXMgdG8gUHl0aG9uIHNjcmlwdHMgd2hpY2gKKyAgcmVxdWlyZXMgdGhlbS4gIERpc2FibGUgZXhlY3V0YWJsZSBiaXRzIGFuZCBzaGViYW5nIGxpbmVzIGluIHRlc3QgYW5kCisgIGJlbmNobWFyayBmaWxlcyBpbiBvcmRlciB0byBwcmV2ZW50IHVzaW5nIGEgcmFuZG9tIHN5c3RlbSBweXRob24sIGFuZCBpbgorICBzb3VyY2UgZmlsZXMgb2YgbW9kdWxlcyB3aGljaCBkb24ndCBwcm92aWRlIGNvbW1hbmQgbGluZSBpbnRlcmZhY2UuICBGaXhlZAorICBzaGViYW5nIGxpbmVzIGluIHRoZSB1bml0dGVzdGd1aSBhbmQgY2hlY2twaXAgc2NyaXB0cy4KKworLSBJc3N1ZSAjMjAyNjg6IEFyZ3VtZW50IENsaW5pYyBub3cgc3VwcG9ydHMgY2xvbmluZyB0aGUgcGFyYW1ldGVycyBhbmQKKyAgcmV0dXJuIGNvbnZlcnRlciBvZiBleGlzdGluZyBmdW5jdGlvbnMuCisKKy0gSXNzdWUgIzIwMjI4OiBBcmd1bWVudCBDbGluaWMgbm93IGhhcyBzcGVjaWFsIHN1cHBvcnQgZm9yIGNsYXNzIHNwZWNpYWwKKyAgbWV0aG9kcy4KKworLSBJc3N1ZSAjMjAyMTQ6IEZpeGVkIGEgbnVtYmVyIG9mIHNtYWxsIGlzc3VlcyBhbmQgZG9jdW1lbnRhdGlvbiBlcnJvcnMgaW4KKyAgQXJndW1lbnQgQ2xpbmljIChzZWUgaXNzdWUgZm9yIGRldGFpbHMpLgorCistIElzc3VlICMyMDE5NjogRml4ZWQgYSBidWcgd2hlcmUgQXJndW1lbnQgQ2xpbmljIGRpZCBub3QgZ2VuZXJhdGUgY29ycmVjdAorICBwYXJzaW5nIGNvZGUgZm9yIGZ1bmN0aW9ucyB3aXRoIHBvc2l0aW9uYWwtb25seSBwYXJhbWV0ZXJzIHdoZXJlIGFsbCBhcmd1bWVudHMKKyAgYXJlIG9wdGlvbmFsLgorCistIElzc3VlICMxODk2MDogMnRvMyBhbmQgdGhlIGZpbmRub2NvZGluZy5weSBzY3JpcHQgbm93IGlnbm9yZSB0aGUgc291cmNlCisgIGVuY29kaW5nIGRlY2xhcmF0aW9uIG9uIHRoZSBzZWNvbmQgbGluZSBpZiB0aGUgZmlyc3QgbGluZSBjb250YWlucyBhbnl0aGluZworICBleGNlcHQgYSBjb21tZW50LgorCistIElzc3VlICMxOTcyMzogVGhlIG1hcmtlciBjb21tZW50cyBBcmd1bWVudCBDbGluaWMgdXNlcyBoYXZlIGJlZW4gY2hhbmdlZAorICB0byBpbXByb3ZlIHJlYWRhYmlsaXR5LgorCistIElzc3VlICMyMDE1NzogV2hlbiBBcmd1bWVudCBDbGluaWMgcmVuYW1lcyBhIHBhcmFtZXRlciBiZWNhdXNlIGl0cyBuYW1lCisgIGNvbGxpZGVzIHdpdGggYSBDIGtleXdvcmQsIGl0IG5vIGxvbmdlciBleHBvc2VzIHRoYXQgcmVuYW1lIHRvIFB5QXJnX1BhcnNlLgorCistIElzc3VlICMyMDE0MTogSW1wcm92ZWQgQXJndW1lbnQgQ2xpbmljJ3Mgc3VwcG9ydCBmb3IgdGhlIFB5QXJnX1BhcnNlICJPISIKKyAgZm9ybWF0IHVuaXQuCisKKy0gSXNzdWUgIzIwMTQ0OiBBcmd1bWVudCBDbGluaWMgbm93IHN1cHBvcnRzIHNpbXBsZSBzeW1ib2xpYyBjb25zdGFudHMKKyAgYXMgcGFyYW1ldGVyIGRlZmF1bHQgdmFsdWVzLgorCistIElzc3VlICMyMDE0MzogVGhlIGxpbmUgbnVtYmVycyByZXBvcnRlZCBpbiBBcmd1bWVudCBDbGluaWMgZXJyb3JzIGFyZQorICBub3cgbW9yZSBhY2N1cmF0ZS4KKworLSBJc3N1ZSAjMjAxNDI6IFB5X2J1ZmZlciB2YXJpYWJsZXMgZ2VuZXJhdGVkIGJ5IEFyZ3VtZW50IENsaW5pYyBhcmUgbm93CisgIGluaXRpYWxpemVkIHdpdGggYSBkZWZhdWx0IHZhbHVlLgorCitCdWlsZAorLS0tLS0KKworLSBJc3N1ZSAjMTI4Mzc6IFNpbGVuY2UgYSB0YXV0b2xvZ2ljYWwgY29tcGFyaXNvbiB3YXJuaW5nIG9uIE9TIFggdW5kZXIgQ2xhbmcgaW4KKyAgc29ja2V0bW9kdWxlLmMuCisKKworV2hhdCdzIE5ldyBpbiBQeXRob24gMy40LjAgQmV0YSAyPworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitSZWxlYXNlIGRhdGU6IDIwMTQtMDEtMDUKKworQ29yZSBhbmQgQnVpbHRpbnMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzE3NDMyOiBEcm9wIFVDUzIgZnJvbSBuYW1lcyBvZiBVbmljb2RlIGZ1bmN0aW9ucyBpbiBweXRob24zLmRlZi4KKworLSBJc3N1ZSAjMTk1MjY6IEV4Y2x1ZGUgYWxsIG5ldyBBUEkgZnJvbSB0aGUgc3RhYmxlIEFCSS4gRXhjZXB0aW9ucyBjYW4gYmUKKyAgbWFkZSBpZiBhIG5lZWQgaXMgZGVtb25zdHJhdGVkLgorCistIElzc3VlICMxOTk2OTogUHlCeXRlc19Gcm9tRm9ybWF0VigpIG5vdyByYWlzZXMgYW4gT3ZlcmZsb3dFcnJvciBpZiAiJWMiCisgIGFyZ3VtZW50IGlzIG5vdCBpbiByYW5nZSBbMDsgMjU1XS4KKworLSBJc3N1ZSAjMTk5OTU6ICVjLCAlbywgJXgsIGFuZCAlWCBub3cgaXNzdWUgYSBEZXByZWNhdGlvbldhcm5pbmcgb24gbm9uLWludGVnZXIKKyAgaW5wdXQ7IHJld29yZGVkIGRvY3MgdG8gY2xhcmlmeSB0aGF0IGFuIGludGVnZXIgdHlwZSBzaG91bGQgZGVmaW5lIGJvdGggX19pbnRfXworICBhbmQgX19pbmRleF9fLgorCistIElzc3VlICMxOTc4NzogUHlUaHJlYWRfc2V0X2tleV92YWx1ZSgpIG5vdyBhbHdheXMgc2V0IHRoZSB2YWx1ZS4gSW4gUHl0aG9uCisgIDMuMywgdGhlIGZ1bmN0aW9uIGRpZCBub3RoaW5nIGlmIHRoZSBrZXkgYWxyZWFkeSBleGlzdHMgKGlmIHRoZSBjdXJyZW50IHZhbHVlCisgIGlzIGEgbm9uLU5VTEwgcG9pbnRlcikuCisKKy0gSXNzdWUgIzE0NDMyOiBSZW1vdmUgdGhlIHRocmVhZCBzdGF0ZSBmaWVsZCBmcm9tIHRoZSBmcmFtZSBzdHJ1Y3R1cmUuIEZpeCBhCisgIGNyYXNoIHdoZW4gYSBnZW5lcmF0b3IgaXMgY3JlYXRlZCBpbiBhIEMgdGhyZWFkIHRoYXQgaXMgZGVzdHJveWVkIHdoaWxlIHRoZQorICBnZW5lcmF0b3IgaXMgc3RpbGwgdXNlZC4gVGhlIGlzc3VlIHdhcyB0aGF0IGEgZ2VuZXJhdG9yIGNvbnRhaW5zIGEgZnJhbWUsIGFuZAorICB0aGUgZnJhbWUga2VwdCBhIHJlZmVyZW5jZSB0byB0aGUgUHl0aG9uIHN0YXRlIG9mIHRoZSBkZXN0cm95ZWQgQyB0aHJlYWQuIFRoZQorICBjcmFzaCBvY2N1cnMgd2hlbiBhIHRyYWNlIGZ1bmN0aW9uIGlzIHNldHVwLgorCistIElzc3VlICMxOTU3NjogUHlHSUxTdGF0ZV9FbnN1cmUoKSBub3cgaW5pdGlhbGl6ZXMgdGhyZWFkcy4gQXQgc3RhcnR1cCwgUHl0aG9uCisgIGhhcyBubyBjb25jcmV0ZSBHSUwuIElmIFB5R0lMU3RhdGVfRW5zdXJlKCkgaXMgY2FsbGVkIGZyb20gYSBuZXcgdGhyZWFkIGZvcgorICB0aGUgZmlyc3QgdGltZSBhbmQgUHlFdmFsX0luaXRUaHJlYWRzKCkgd2FzIG5vdCBjYWxsZWQgeWV0LCBhIEdJTCBuZWVkcyB0byBiZQorICBjcmVhdGVkLgorCistIElzc3VlICMxNzU3NjogRGVwcmVjYXRpb24gd2FybmluZyBlbWl0dGVkIG5vdyB3aGVuIF9faW50X18oKSBvciBfX2luZGV4X18oKQorICByZXR1cm4gbm90IGludCBpbnN0YW5jZS4KKworLSBJc3N1ZSAjMTk5MzI6IEZpeCB0eXBvIGluIGltcG9ydC5oLCBtaXNzaW5nIHdoaXRlc3BhY2VzIGluIGZ1bmN0aW9uIHByb3RvdHlwZXMuCisKKy0gSXNzdWUgIzE5NzM2OiBBZGQgbW9kdWxlLWxldmVsIHN0YXR2ZnMgY29uc3RhbnRzIGRlZmluZWQgZm9yIEdOVS9nbGliYworICBiYXNlZCBzeXN0ZW1zLgorCistIElzc3VlICMyMDA5NzogRml4IGJhZCB1c2Ugb2YgInNlbGYiIGluIGltcG9ydGxpYidzIFdpbmRvd3NSZWdpc3RyeUZpbmRlci4KKworLSBJc3N1ZSAjMTk3Mjk6IEluIHN0ci5mb3JtYXQoKSwgZml4IHJlY3Vyc2l2ZSBleHBhbnNpb24gaW4gZm9ybWF0IHNwZWMuCisKKy0gSXNzdWUgIzE5NjM4OiBGaXggcG9zc2libGUgY3Jhc2ggLyB1bmRlZmluZWQgYmVoYXZpb3VyIGZyb20gaHVnZSAobW9yZSB0aGFuIDIKKyAgYmlsbGlvbiBjaGFyYWN0ZXJzKSBpbnB1dCBzdHJpbmdzIGluIF9QeV9kZ19zdHJ0b2QuCisKK0xpYnJhcnkKKy0tLS0tLS0KKworLSBJc3N1ZSAjMjAxNTQ6IERlYWRsb2NrIGluIGFzeW5jaW8uU3RyZWFtUmVhZGVyLnJlYWRleGFjdGx5KCkuCisKKy0gSXNzdWUgIzE2MTEzOiBSZW1vdmUgc2hhMyBtb2R1bGUgYWdhaW4uCisKKy0gSXNzdWUgIzIwMTExOiBwYXRobGliLlBhdGgud2l0aF9zdWZmaXgoKSBub3cgc2FuaXR5IGNoZWNrcyB0aGUgZ2l2ZW4gc3VmZml4LgorCistIEZpeCBicmVha2FnZSBpbiBUZXN0U3VpdGUuY291bnRUZXN0Q2FzZXMoKSBpbnRyb2R1Y2VkIGJ5IGlzc3VlICMxMTc5OC4KKwogLSBJc3N1ZSAjMjAxMDg6IEF2b2lkIHBhcmFtZXRlciBuYW1lIGNsYXNoIGluIGluc3BlY3QuZ2V0Y2FsbGFyZ3MoKS4KIAotLSBJc3N1ZSAjMTI2OTI6IEJhY2twb3J0IHRoZSBmaXggZm9yIFJlc291cmNlV2FybmluZyBpbiB0ZXN0X3VybGxpYjJuZXQuIFRoaXMKLSAgYWxzbyBoZWxwcyBpbiBjbG9zaW5nIHRoZSBzb2NrZXQgd2hlbiBDb25uZWN0aW9uIENsb3NlIGhlYWRlciBpcyBub3Qgc2VudC4KKy0gSXNzdWUgIzE5OTE4OiBGaXggUHVyZVBhdGgucmVsYXRpdmVfdG8oKSB1bmRlciBXaW5kb3dzLgogCiAtIElzc3VlICMxOTQyMjogRXhwbGljaXRseSBkaXNhbGxvdyBub24tU09DS19TVFJFQU0gc29ja2V0cyBpbiB0aGUgc3NsCiAgIG1vZHVsZSwgcmF0aGVyIHRoYW4gc2lsZW50bHkgbGV0IHRoZW0gZW1pdCBjbGVhciB0ZXh0IGRhdGEuCiAKLS0gSXNzdWUgIzE4MTE2OiBnZXRwYXNzIHdhcyBhbHdheXMgZ2V0dGluZyBhbiBlcnJvciB3aGVuIHRlc3RpbmcgL2Rldi90dHksCi0gIGFuZCB0aHVzIHdhcyBhbHdheXMgZmFsbGluZyBiYWNrIHRvIHN0ZGluLCBhbmQgd291bGQgdGhlbiByYWlzZSBhbiBleGNlcHRpb24KLSAgaWYgc3RkaW4gY291bGQgbm90IGJlIHVzZWQgKHN1Y2ggYXMgL2Rldi9udWxsKS4gIEl0IGFsc28gbGVha2VkIGFuIG9wZW4gZmlsZS4KLSAgQWxsIG9mIHRoZXNlIGlzc3VlcyBhcmUgbm93IGZpeGVkLgorLSBJc3N1ZSAjMjAwNDY6IExvY2FsZSBhbGlhcyB0YWJsZSBubyBsb25nZXIgY29udGFpbnMgZW50aXRpZXMgd2hpY2ggY2FuIGJlCisgIGNhbGN1bGF0ZWQuICBHZW5lcmFsaXplZCBzdXBwb3J0IG9mIHRoZSBldXJvIG1vZGlmaWVyLgogCiAtIElzc3VlICMyMDAyNzogRml4ZWQgbG9jYWxlIGFsaWFzZXMgZm9yIGRldmFuYWdhcmkgbG9jYWxlcy4KIApAQCAtNDc0LDE1ICsyNzk4LDM3IEBACiAtIElzc3VlICMxOTAyMDogVGtpbnRlciBub3cgdXNlcyBzcGxpdGxpc3QoKSBpbnN0ZWFkIG9mIHNwbGl0KCkgaW4gY29uZmlndXJlCiAgIG1ldGhvZHMuCiAKLS0gRml4IFR5cGVFcnJvciBvbiAic2V0dXAucHkgdXBsb2FkIC0tc2hvdy1yZXNwb25zZSIuCistIElzc3VlICMxOTc0NDogZW5zdXJlcGlwIG5vdyBwcm92aWRlcyBhIGJldHRlciBlcnJvciBtZXNzYWdlIHdoZW4gUHl0aG9uIGlzCisgIGJ1aWx0IHdpdGhvdXQgU1NML1RMUyBzdXBwb3J0IChwaXAgY3VycmVudGx5IHJlcXVpcmVzIHRoYXQgc3VwcG9ydCB0byBydW4sCisgIGV2ZW4gaWYgb25seSBvcGVyYXRpbmcgd2l0aCBsb2NhbCB3aGVlbCBmaWxlcykKIAotLSBJc3N1ZSAjMTIyMjY6IEhUVFBTIGlzIG5vdyB1c2VkIGJ5IGRlZmF1bHQgd2hlbiBjb25uZWN0aW5nIHRvIFB5UEkuCistIElzc3VlICMxOTczNDogZW5zdXJlcGlwIG5vdyBpZ25vcmVzIGFsbCBwaXAgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIGF2b2lkCisgIG9kZCBiZWhhdmlvdXIgYmFzZWQgb24gdXNlciBjb25maWd1cmF0aW9uIHNldHRpbmdzCisKKy0gRml4IFR5cGVFcnJvciBvbiAic2V0dXAucHkgdXBsb2FkIC0tc2hvdy1yZXNwb25zZSIuCiAKIC0gSXNzdWUgIzIwMDQ1OiBGaXggInNldHVwLnB5IHJlZ2lzdGVyIC0tbGlzdC1jbGFzc2lmaWVycyIuCiAKIC0gSXNzdWUgIzE4ODc5OiBXaGVuIGEgbWV0aG9kIGlzIGxvb2tlZCB1cCBvbiBhIHRlbXBvcmFyeSBmaWxlLCBhdm9pZCBjbG9zaW5nCiAgIHRoZSBmaWxlIGJlZm9yZSB0aGUgbWV0aG9kIGlzIHBvc3NpYmx5IGNhbGxlZC4KIAorLSBJc3N1ZSAjMjAwMzc6IEF2b2lkIGNyYXNoZXMgd2hlbiBvcGVuaW5nIGEgdGV4dCBmaWxlIGxhdGUgYXQgaW50ZXJwcmV0ZXIKKyAgc2h1dGRvd24uCisKKy0gSXNzdWUgIzE5OTY3OiBUaGFua3MgdG8gdGhlIFBFUCA0NDIsIGFzeW5jaW8uRnV0dXJlIG5vdyB1c2VzIGEKKyAgZGVzdHJ1Y3RvciB0byBsb2cgdW5jYXVnaHQgZXhjZXB0aW9ucywgaW5zdGVhZCBvZiB0aGUgZGVkaWNhdGVkCisgIF9UcmFjZWJhY2tMb2dnZXIgY2xhc3MuCisKKy0gQWRkZWQgYSBUYXNrLmN1cnJlbnRfdGFzaygpIGNsYXNzIG1ldGhvZCB0byBhc3luY2lvLgorCistIElzc3VlICMxOTg1MDogU2V0IFNBX1JFU1RBUlQgaW4gYXN5bmNpbyB3aGVuIHJlZ2lzdGVyaW5nIGEgc2lnbmFsCisgIGhhbmRsZXIgdG8gbGltaXQgRUlOVFIgb2NjdXJyZW5jZXMuCisKKy0gSW1wbGVtZW50ZWQgd3JpdGUgZmxvdyBjb250cm9sIGluIGFzeW5jaW8gZm9yIHByb2FjdG9yIGV2ZW50IGxvb3AgKFdpbmRvd3MpLgorCistIENoYW5nZSB3cml0ZSBidWZmZXIgaW4gYXN5bmNpbyB1c2UgdG8gYXZvaWQgTyhOKioyKSBiZWhhdmlvci4gIE1ha2UKKyAgd3JpdGUoKS9zZW5kdG8oKSBhY2NlcHQgYnl0ZWFycmF5L21lbW9yeXZpZXcuCisKIC0gSXNzdWUgIzIwMDM0OiBVcGRhdGVkIGFsaWFzIG1hcHBpbmcgdG8gbW9zdCByZWNlbnQgbG9jYWxlLmFsaWFzIGZpbGUKICAgZnJvbSBYLm9yZyBkaXN0cmlidXRpb24gdXNpbmcgbWFrZWxvY2FsZWFsaWFzLnB5LgogCkBAIC01MDIsNiArMjg0OCwxOSBAQAogLSBJc3N1ZSAjMjAwMDc6IEhUVFBSZXNwb25zZS5yZWFkKDApIG5vIG1vcmUgcHJlbWF0dXJlbHkgY2xvc2VzIGNvbm5lY3Rpb24uCiAgIE9yaWdpbmFsIHBhdGNoIGJ5IFNpbW9uIFNhcGluLgogCistIElzc3VlICMxOTk0NjogbXVsdGlwcm9jZXNzaW5nIG5vdyB1c2VzIHJ1bnB5IHRvIGluaXRpYWxpemUgX19tYWluX18gaW4KKyAgY2hpbGQgcHJvY2Vzc2VzIHdoZW4gbmVjZXNzYXJ5LCBhbGxvd2luZyBpdCB0byBjb3JyZWN0bHkgaGFuZGxlIHNjcmlwdHMKKyAgd2l0aG91dCBzdWZmaXhlcyBhbmQgc3VibW9kdWxlcyB0aGF0IHVzZSBleHBsaWNpdCByZWxhdGl2ZSBpbXBvcnRzIG9yCisgIG90aGVyd2lzZSByZWx5IG9uIHBhcmVudCBtb2R1bGVzIGJlaW5nIGNvcnJlY3RseSBpbXBvcnRlZCBwcmlvciB0bworICBleGVjdXRpb24uCisKKy0gSXNzdWUgIzE5OTIxOiBXaGVuIFBhdGgubWtkaXIoKSBpcyBjYWxsZWQgd2l0aCBwYXJlbnRzPVRydWUsIGFueSBtaXNzaW5nCisgIHBhcmVudCBpcyBjcmVhdGVkIHdpdGggdGhlIGRlZmF1bHQgcGVybWlzc2lvbnMsIGlnbm9yaW5nIHRoZSBtb2RlIGFyZ3VtZW50CisgIChtaW1pY2tpbmcgdGhlIFBPU0lYICJta2RpciAtcCIgY29tbWFuZCkuCisKKy0gSXNzdWUgIzE5ODg3OiBJbXByb3ZlIHRoZSBQYXRoLnJlc29sdmUoKSBhbGdvcml0aG0gdG8gc3VwcG9ydCBjZXJ0YWluCisgIHN5bWxpbmsgY2hhaW5zLgorCiAtIElzc3VlICMxOTkxMjogRml4ZWQgbnVtZXJvdXMgYnVncyBpbiBudHBhdGguc3BsaXR1bmMoKS4KIAogLSBJc3N1ZSAjMTk5MTE6IG50cGF0aC5zcGxpdGRyaXZlKCkgbm93IGNvcnJlY3RseSBwcm9jZXNzZXMgdGhlICfEsCcgY2hhcmFjdGVyCkBAIC01MTIsNiArMjg3MSw5IEBACiAKIC0gSXNzdWUgIzE5NjIzOiBGaXhlZCB3cml0aW5nIHRvIHVuc2Vla2FibGUgZmlsZXMgaW4gdGhlIGFpZmMgbW9kdWxlLgogCistIElzc3VlICMxOTk0NjogbXVsdGlwcm9jZXNzaW5nLnNwYXduIG5vdyByYWlzZXMgSW1wb3J0RXJyb3Igd2hlbiB0aGUgbW9kdWxlIHRvCisgIGJlIHVzZWQgYXMgdGhlIG1haW4gbW9kdWxlIGNhbm5vdCBiZSBpbXBvcnRlZC4KKwogLSBJc3N1ZSAjMTc5MTk6IHNlbGVjdC5wb2xsLnJlZ2lzdGVyKCkgYWdhaW4gd29ya3Mgd2l0aCBwb2xsLlBPTExOVkFMIG9uIEFJWC4KICAgRml4ZWQgaW50ZWdlciBvdmVyZmxvdyBpbiB0aGUgZXZlbnRtYXNrIHBhcmFtZXRlci4KIApAQCAtNTE5LDExICsyODgxLDE2IEBACiAgIHBhY2thZ2Ugd291bGQgZ2VuZXJhdGUgYSBtZXNzYWdlIGNsYWltaW5nIHRoZSBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nCiAgIHdhcyA3Yml0LCBhbmQgcHJvZHVjZSBnYXJiYWdlIG91dHB1dCBmb3IgdGhlIGNvbnRlbnQuICBUaGlzIG5vdyB3b3Jrcy4KICAgQSBjb3VwbGUgb2Ygb3RoZXIgc2V0X3BheWxvYWQgbWlzaGFuZGxpbmdzIG9mIG5vbi1BU0NJSSBhcmUgYWxzbyBmaXhlZC4KKyAgSW4gYWRkaXRpb24sIGNhbGxpbmcgc2V0X3BheWxvYWQgd2l0aCBhIHN0cmluZyBhcmd1bWVudCB3aXRob3V0CisgIHNwZWNpZnlpbmcgYSBjaGFyc2V0IG5vdyByYWlzZXMgYW4gZXJyb3IgKHRoaXMgaXMgYSBuZXcgZXJyb3IgaW4gMy40KS4KIAotLSBJc3N1ZSAjMTcyMDA6IHRlbG5ldGxpYidzIHJlYWRfdW50aWwgYW5kIGV4cGVjdCB0aW1lb3V0IHdhcyBicm9rZW4gYnkgdGhlCi0gIGZpeCB0byBJc3N1ZSAjMTQ2MzUgaW4gUHl0aG9uIDMuMy4wIHRvIGJlIGludGVycHJldGVkIGFzIG1pbGxpc2Vjb25kcwotICBpbnN0ZWFkIG9mIHNlY29uZHMgd2hlbiB0aGUgcGxhdGZvcm0gc3VwcG9ydHMgc2VsZWN0LnBvbGwgKGllOiBldmVyeXdoZXJlKS4KLSAgSXQgaXMgbm93IHRyZWF0ZWQgYXMgc2Vjb25kcyBvbmNlIGFnYWluLgorLSBJc3N1ZSAjMTU0NzU6IEFkZCBfX3NpemVvZl9fIGltcGxlbWVudGF0aW9ucyBmb3IgaXRlcnRvb2xzIG9iamVjdHMuCisKKy0gSXNzdWUgIzE5OTQ0OiBGaXggaW1wb3J0bGliLmZpbmRfc3BlYygpIHNvIGl0IGltcG9ydHMgcGFyZW50cyBhcyBuZWVkZWQKKyAgYW5kIG1vdmUgdGhlIGZ1bmN0aW9uIHRvIGltcG9ydGxpYi51dGlsLgorCistIElzc3VlICMxOTg4MDogRml4IGEgcmVmZXJlbmNlIGxlYWsgaW4gdW5pdHRlc3QuVGVzdENhc2UuIEV4cGxpY2l0bHkgYnJlYWsKKyAgcmVmZXJlbmNlIGN5Y2xlcyBiZXR3ZWVuIGZyYW1lcyBhbmQgdGhlIF9PdXRjb21lIGluc3RhbmNlLgogCiAtIElzc3VlICMxNzQyOTogcGxhdGZvcm0ubGludXhfZGlzdHJpYnV0aW9uKCkgbm93IGRlY29kZXMgZmlsZXMgZnJvbSB0aGUgVVRGLTgKICAgZW5jb2Rpbmcgd2l0aCB0aGUgc3Vycm9nYXRlZXNjYXBlIGVycm9yIGhhbmRsZXIsIGluc3RlYWQgb2YgZGVjb2RpbmcgZnJvbSB0aGUKQEAgLTUzMSw2ICsyODk4LDkgQEAKICAgcHJvYmFibHkgdGhlIGZpcnN0IG1ham9yIGRpc3RyaWJ1dGlvbiByZWxlYXNlIHdpdGggYSBub24tQVNDSUkgbmFtZS4gUGF0Y2gKICAgd3JpdHRlbiBieSBUb3NoaW8gS3VyYXRvbWkuCiAKKy0gSXNzdWUgIzE5MzQzOiBFeHBvc2UgRnJlZUJTRC1zcGVjaWZpYyBBUElzIGluIHJlc291cmNlIG1vZHVsZS4gIE9yaWdpbmFsCisgIHBhdGNoIGJ5IEtvb2JzLgorCiAtIElzc3VlICMxOTkyOTogQ2FsbCBvcy5yZWFkIHdpdGggMzI3Njggd2l0aGluIHN1YnByb2Nlc3MuUG9wZW4uY29tbXVuaWNhdGUKICAgcmF0aGVyIHRoYW4gNDA5NiBmb3IgZWZmaWNpZW5jeS4gIEEgbWljcm9iZW5jaG1hcmsgc2hvd3MgTGludXggYW5kIE9TIFgKICAgYm90aCB1c2luZyB+NTAlIGxlc3MgY3B1IHRpbWUgdGhpcyB3YXkuCkBAIC01MzgsMjEgKzI5MDgsNzMgQEAKIC0gSXNzdWUgIzE5NTA2OiBVc2UgYSBtZW1vcnl2aWV3IHRvIGF2b2lkIGEgZGF0YSBjb3B5IHdoZW4gcGlwaW5nIGRhdGEKICAgdG8gc3RkaW4gd2l0aGluIHN1YnByb2Nlc3MuUG9wZW4uY29tbXVuaWNhdGUuICA1LTEwJSBsZXNzIGNwdSB1c2FnZS4KIAorLSBJc3N1ZSAjMTk4NzY6IHNlbGVjdG9ycyB1bnJlZ2lzdGVyKCkgbm8gbG9uZ2VyIHJhaXNlcyBWYWx1ZUVycm9yIG9yIE9TRXJyb3IKKyAgaWYgdGhlIEZEIGlzIGNsb3NlZCAoYXMgbG9uZyBhcyBpdCB3YXMgcmVnaXN0ZXJlZCkuCisKKy0gSXNzdWUgIzE5OTA4OiBwYXRobGliIG5vdyBqb2lucyByZWxhdGl2ZSBXaW5kb3dzIHBhdGhzIGNvcnJlY3RseSB3aGVuIGEgZHJpdmUKKyAgaXMgcHJlc2VudC4gIE9yaWdpbmFsIHBhdGNoIGJ5IEFudG9pbmUgUGl0cm91LgorCistIElzc3VlICMxOTI5NjogU2lsZW5jZSBjb21waWxlciB3YXJuaW5nIGluIGRibV9vcGVuCisKKy0gSXNzdWUgIzY3ODQ6IFN0cmluZ3MgZnJvbSBQeXRob24gMiBjYW4gbm93IGJlIHVucGlja2xlZCBhcyBieXRlcworICBvYmplY3RzIGJ5IHNldHRpbmcgdGhlIGVuY29kaW5nIGFyZ3VtZW50IG9mIFVucGlja2xlciB0byBiZSAnYnl0ZXMnLgorICBJbml0aWFsIHBhdGNoIGJ5IE1lcmxpam4gdmFuIERlZW4uCisKIC0gSXNzdWUgIzE5ODM5OiBGaXggcmVncmVzc2lvbiBpbiBiejIgbW9kdWxlJ3MgaGFuZGxpbmcgb2Ygbm9uLWJ6aXAyIGRhdGEgYXQKICAgRU9GLCBhbmQgYW5hbG9nb3VzIGJ1ZyBpbiBsem1hIG1vZHVsZS4KIAorLSBJc3N1ZSAjMTk4ODE6IEZpeCBwaWNrbGluZyBidWcgd2hlcmUgY3BpY2tsZSB3b3VsZCBlbWl0IGJhZCBwaWNrbGUgZGF0YSBmb3IKKyAgbGFyZ2UgYnl0ZXMgc3RyaW5nIChpLmUuLCB3aXRoIHNpemUgZ3JlYXRlciB0aGFuIDIqKjMyLTEpLgorCiAtIElzc3VlICMxOTEzODogZG9jdGVzdCdzIElHTk9SRV9FWENFUFRJT05fREVUQUlMIG5vdyBhbGxvd3MgYSBtYXRjaCB3aGVuCiAgIG5vIGV4Y2VwdGlvbiBkZXRhaWwgZXhpc3RzIChubyBjb2xvbiBmb2xsb3dpbmcgdGhlIGV4Y2VwdGlvbidzIG5hbWUsIG9yCiAgIGEgY29sb24gZG9lcyBmb2xsb3cgYnV0IG5vIHRleHQgZm9sbG93cyB0aGUgY29sb24pLgogCistIElzc3VlICMxOTkyNzogQWRkIF9fZXFfXyB0byBwYXRoLWJhc2VkIGxvYWRlcnMgaW4gaW1wb3J0bGliLgorCistIElzc3VlICMxOTgyNzogT24gVU5JWCwgc2V0YmxvY2tpbmcoKSBhbmQgc2V0dGltZW91dCgpIG1ldGhvZHMgb2YKKyAgc29ja2V0LnNvY2tldCBjYW4gbm93IGF2b2lkIGEgc2Vjb25kIHN5c2NhbGwgaWYgdGhlIGlvY3RsKCkgZnVuY3Rpb24gY2FuIGJlCisgIHVzZWQsIG9yIGlmIHRoZSBub24tYmxvY2tpbmcgZmxhZyBvZiB0aGUgc29ja2V0IGlzIHVuY2hhbmdlZC4KKworLSBJc3N1ZSAjMTk3ODU6IHNtdHBsaWIgbm93IHN1cHBvcnRzIFNTTENvbnRleHQuY2hlY2tfaG9zdG5hbWUgYW5kIHNlcnZlciBuYW1lCisgIGluZGljYXRpb24gZm9yIFRMUy9TU0wgY29ubmVjdGlvbnMuCisKKy0gSXNzdWUgIzE5Nzg0OiBwb3BsaWIgbm93IHN1cHBvcnRzIFNTTENvbnRleHQuY2hlY2tfaG9zdG5hbWUgYW5kIHNlcnZlciBuYW1lCisgIGluZGljYXRpb24gZm9yIFRMUy9TU0wgY29ubmVjdGlvbnMuCisKKy0gSXNzdWUgIzE5NzgzOiBubnRwbGliIG5vdyBzdXBwb3J0cyBTU0xDb250ZXh0LmNoZWNrX2hvc3RuYW1lIGFuZCBzZXJ2ZXIgbmFtZQorICBpbmRpY2F0aW9uIGZvciBUTFMvU1NMIGNvbm5lY3Rpb25zLgorCistIElzc3VlICMxOTc4MjogaW1hcGxpYiBub3cgc3VwcG9ydHMgU1NMQ29udGV4dC5jaGVja19ob3N0bmFtZSBhbmQgc2VydmVyIG5hbWUKKyAgaW5kaWNhdGlvbiBmb3IgVExTL1NTTCBjb25uZWN0aW9ucy4KKworLSBJc3N1ZSAjMjAxMjM6IEZpeCBweWRvYy5zeW5vcHNpcygpIGZvciAiYmluYXJ5IiBtb2R1bGVzLgorCiAtIElzc3VlICMxOTgzNDogU3VwcG9ydCB1bnBpY2tsaW5nIG9mIGV4Y2VwdGlvbnMgcGlja2xlZCBieSBQeXRob24gMi4KIAorLSBJc3N1ZSAjMTk3ODE6IGZ0cGxpYiBub3cgc3VwcG9ydHMgU1NMQ29udGV4dC5jaGVja19ob3N0bmFtZSBhbmQgc2VydmVyIG5hbWUKKyAgaW5kaWNhdGlvbiBmb3IgVExTL1NTTCBjb25uZWN0aW9ucy4KKworLSBJc3N1ZSAjMTk1MDk6IEFkZCBTU0xDb250ZXh0LmNoZWNrX2hvc3RuYW1lIHRvIG1hdGNoIHRoZSBwZWVyJ3MgY2VydGlmaWNhdGUKKyAgd2l0aCBzZXJ2ZXJfaG9zdG5hbWUgb24gaGFuZHNoYWtlLgorCiAtIElzc3VlICMxNTc5ODogRml4ZWQgc3VicHJvY2Vzcy5Qb3BlbigpIHRvIG5vIGxvbmdlciBmYWlsIGlmIGZpbGUKICAgZGVzY3JpcHRvciAwLCAxIG9yIDIgaXMgY2xvc2VkLgogCistIElzc3VlICMxNzg5NzogT3B0aW1pemVkIHVucGlja2xlIHByZWZldGNoaW5nLgorCistIElzc3VlICMzNjkzOiBNYWtlIHRoZSBlcnJvciBtZXNzYWdlIG1vcmUgaGVscGZ1bCB3aGVuIHRoZSBhcnJheS5hcnJheSgpCisgIGNvbnN0cnVjdG9yIGlzIGdpdmVuIGEgc3RyLiBNb3ZlIHRoZSBhcnJheSBtb2R1bGUgdHlwZWNvZGUgZG9jdW1lbnRhdGlvbiB0bworICB0aGUgZG9jc3RyaW5nIG9mIHRoZSBjb25zdHJ1Y3Rvci4KKwogLSBJc3N1ZSAjMTkwODg6IEZpeGVkIGluY29ycmVjdCBjYWNoaW5nIG9mIHRoZSBjb3B5cmVnIG1vZHVsZSBpbgogICBvYmplY3QuX19yZWR1Y2VfXygpIGFuZCBvYmplY3QuX19yZWR1Y2VfZXhfXygpLgogCistIElzc3VlICMxOTY5ODogUmVtb3ZlZCBleGVjX21vZHVsZSgpIG1ldGhvZHMgZnJvbQorICBpbXBvcnRsaWIubWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlciBhbmQgRXh0ZW5zaW9uRmlsZUxvYWRlci4KKworLSBJc3N1ZSAjMTg4NjQ6IEFkZGVkIGEgc2V0dGVyIGZvciBNb2R1bGVTcGVjLmhhc19sb2NhdGlvbi4KKwogLSBGaXhlZCBfcGlja2xlLlVucGlja2xlciB0byBub3QgZmFpbCB3aGVuIGxvYWRpbmcgZW1wdHkgc3RyaW5ncyBhcwogICBwZXJzaXN0ZW50IElEcy4KIApAQCAtNTYyLDYgKzI5ODQsMTkgQEAKIC0gSXNzdWUgIzY0Nzc6IEFkZGVkIHN1cHBvcnQgZm9yIHBpY2tsaW5nIHRoZSB0eXBlcyBvZiBidWlsdC1pbiBzaW5nbGV0b25zCiAgIChpLmUuLCBFbGxpcHNpcywgTm90SW1wbGVtZW50ZWQsIE5vbmUpLgogCistIElzc3VlICMxOTcxMzogQWRkIHJlbWFpbmluZyBQRVAgNDUxLXJlbGF0ZWQgZGVwcmVjYXRpb25zIGFuZCBtb3ZlIGF3YXkKKyAgZnJvbSB1c2luZyBmaW5kX21vZHVsZS9maW5kX2xvYWVyL2xvYWRfbW9kdWxlLgorCistIElzc3VlICMxOTcwODogVXBkYXRlIHBrZ3V0aWwgdG8gdXNlIHRoZSBuZXcgaW1wb3J0ZXIgQVBJcy4KKworLSBJc3N1ZSAjMTk3MDM6IFVwZGF0ZSBweWRvYyB0byB1c2UgdGhlIG5ldyBpbXBvcnRlciBBUElzLgorCistIElzc3VlICMxOTg1MTogRml4ZWQgYSByZWdyZXNzaW9uIGluIHJlbG9hZGluZyBzdWItbW9kdWxlcy4KKworLSBzc2wuY3JlYXRlX2RlZmF1bHRfY29udGV4dCgpIHNldHMgT1BfTk9fQ09NUFJFU1NJT04gdG8gcHJldmVudCBDUklNRS4KKworLSBJc3N1ZSAjMTk4MDI6IEFkZCBzb2NrZXQuU09fUFJJT1JJVFkuCisKIC0gSXNzdWUgIzExNTA4OiBGaXhlZCB1dWlkLmdldG5vZGUoKSBhbmQgdXVpZC51dWlkMSgpIG9uIGVudmlyb25tZW50IHdpdGgKICAgdmlydHVhbCBpbnRlcmZhY2UuICBPcmlnaW5hbCBwYXRjaCBieSBLZW50IEZyYXppZXIuCiAKQEAgLTU3MCw1NiArMzAwNSw5IEBACiAtIElzc3VlICMxOTU0NTogQXZvaWQgY2hhaW5lZCBleGNlcHRpb25zIHdoaWxlIHBhc3Npbmcgc3RyYXkgJSB0bwogICB0aW1lLnN0cnB0aW1lKCkuICBJbml0aWFsIHBhdGNoIGJ5IENsYXVkaXUgUG9wYS4KIAotLSBJc3N1ZSAjMTk2MzM6IEZpeGVkIHdyaXRpbmcgbm90IGNvbXByZXNzZWQgMTYtIGFuZCAzMi1iaXQgd2F2ZSBmaWxlcyBvbgotICBiaWctZW5kaWFuIHBsYXRmb3Jtcy4KLQotLSBJc3N1ZSAjMTk0NDk6IGluIGNzdidzIHdyaXRlcm93LCBoYW5kbGUgbm9uLXN0cmluZyBrZXlzIHdoZW4gZ2VuZXJhdGluZyB0aGUKLSAgZXJyb3IgbWVzc2FnZSB0aGF0IGNlcnRhaW4ga2V5cyBhcmUgbm90IGluIHRoZSAnZmllbGRuYW1lcycgbGlzdC4KLQotLSBGaXggdGVzdC5zdXBwb3J0LmJpbmRfcG9ydCgpIHRvIG5vdCBjYXVzZSBhbiBlcnJvciB3aGVuIFB5dGhvbiB3YXMgY29tcGlsZWQKLSAgb24gYSBzeXN0ZW0gd2l0aCBTT19SRVVTRVBPUlQgZGVmaW5lZCBpbiB0aGUgaGVhZGVycyBidXQgcnVuIG9uIGEgc3lzdGVtCi0gIHdpdGggYW4gT1Mga2VybmVsIHRoYXQgZG9lcyBub3Qgc3VwcG9ydCB0aGF0IHJlYXNvbmFibHkgbmV3IHNvY2tldCBvcHRpb24uCi0KLS0gRml4IGNvbXBpbGF0aW9uIGVycm9yIHVuZGVyIGdjYyBvZiB0aGUgY3R5cGVzIG1vZHVsZSBidW5kbGVkIGxpYmZmaSBmb3IgYXJtLgotCi0tIElzc3VlICMxOTUyMzogQ2xvc2VkIEZpbGVIYW5kbGVyIGxlYWsgd2hpY2ggb2NjdXJyZWQgd2hlbiBkZWxheSB3YXMgc2V0LgotCi0tIElzc3VlICMxMzY3NDogUHJldmVudGVkIHRpbWUuc3RyZnRpbWUgZnJvbSBjcmFzaGluZyBvbiBXaW5kb3dzIHdoZW4gZ2l2ZW4KLSAgYSB5ZWFyIGJlZm9yZSAxOTAwIGFuZCBhIGZvcm1hdCBvZiAleS4KLQotLSBJc3N1ZSAjMTk1NDQgYW5kIElzc3VlICM2Mjg2OiBSZXN0b3JlIHVzZSBvZiB1cmxsaWIgb3ZlciBodHRwIGFsbG93aW5nIHVzZQotICBvZiBodHRwX3Byb3h5IGZvciBEaXN0dXRpbHMgdXBsb2FkIGNvbW1hbmQsIGEgZmVhdHVyZSBhY2NpZGVudGFsbHkgbG9zdAotICBpbiB0aGUgcm9sbGJhY2sgb2YgZGlzdHV0aWxzMi4KLQotLSBJc3N1ZSAjMTk1NDQgYW5kIElzc3VlICM3NDU3OiBSZXN0b3JlIHRoZSByZWFkX3BrZ19maWxlIG1ldGhvZCB0bwotICBkaXN0dXRpbHMuZGlzdC5EaXN0cmlidXRpb25NZXRhZGF0YSBhY2NpZGVudGFsbHkgcmVtb3ZlZCBpbiB0aGUgdW5kbyBvZgotICBkaXN0dXRpbHMyLgotCi0tIElzc3VlICMxNTc1MDIwOiBGaXhlZCBzdXBwb3J0IG9mIDI0LWJpdCB3YXZlIGZpbGVzIG9uIGJpZy1lbmRpYW4gcGxhdGZvcm1zLgotCi0tIElzc3VlICMxOTQ4MDogSFRNTFBhcnNlciBub3cgYWNjZXB0cyBhbGwgdmFsaWQgc3RhcnQtdGFnIG5hbWVzIGFzIGRlZmluZWQKLSAgYnkgdGhlIEhUTUw1IHN0YW5kYXJkLgotCi0tIElzc3VlICM2MTU3OiBGaXhlZCB0a2ludGVyLlRleHQuZGVidWcoKS4gIE9yaWdpbmFsIHBhdGNoIGJ5IEd1aWxoZXJtZSBQb2xvLgotCi0tIElzc3VlICM2MTYwOiBUaGUgYmJveCgpIG1ldGhvZCBvZiB0a2ludGVyLlNwaW5ib3ggbm93IHJldHVybnMgYSB0dXBsZSBvZgotICBpbnRlZ2VycyBpbnN0ZWFkIG9mIGEgc3RyaW5nLiAgQmFzZWQgb24gcGF0Y2ggYnkgR3VpbGhlcm1lIFBvbG8uCi0KLS0gSXNzdWUgIzEwMTk3OiBSZXdvcmsgc3VicHJvY2Vzcy5nZXRbc3RhdHVzXW91dHB1dCB0byB1c2Ugc3VicHJvY2VzcwotICBmdW5jdGlvbmFsaXR5IGFuZCB0aHVzIHRvIHdvcmsgb24gV2luZG93cy4gUGF0Y2ggYnkgTmljayBDb2dobGFuLgotCi0tIElzc3VlICMxOTI4NjogRGlyZWN0b3JpZXMgaW4gYGBwYWNrYWdlX2RhdGFgYCBhcmUgbm8gbG9uZ2VyIGFkZGVkIHRvCi0gIHRoZSBmaWxlbGlzdCwgcHJldmVudGluZyBmYWlsdXJlIG91dGxpbmVkIGluIHRoZSB0aWNrZXQuCi0KIElETEUKIC0tLS0KIAotLSBJc3N1ZSAjMTczOTA6IEFkZCBQeXRob24gdmVyc2lvbiB0byBJZGxlIGVkaXRvciB3aW5kb3cgdGl0bGUgYmFyLgotICBPcmlnaW5hbCBwYXRjaGVzIGJ5IEVkbW9uZCBCdXJuZXR0IGFuZCBLZW50IEpvaG5zb24uCi0KLS0gSXNzdWUgIzE4OTYwOiBJRExFIG5vdyBpZ25vcmVzIHRoZSBzb3VyY2UgZW5jb2RpbmcgZGVjbGFyYXRpb24gb24gdGhlIHNlY29uZAotICBsaW5lIGlmIHRoZSBmaXJzdCBsaW5lIGNvbnRhaW5zIGFueXRoaW5nIGV4Y2VwdCBhIGNvbW1lbnQuCi0KIC0gSXNzdWUgIzIwMDU4OiBzeXMuc3RkaW4ucmVhZGxpbmUoKSBpbiBJRExFIG5vdyBhbHdheXMgcmV0dXJucyBvbmx5IG9uZSBsaW5lLgogCiAtIElzc3VlICMxOTQ4MTogcHJpbnQoKSBvZiBzdHJpbmcgc3ViY2xhc3MgaW5zdGFuY2UgaW4gSURMRSBubyBsb25nZXIgaGFuZ3MuCkBAIC02MzAsMjEgKzMwMTgsMTcgQEAKIFRlc3RzCiAtLS0tLQogCi0tIElzc3VlICMxOTgwNDogVGhlIHRlc3RfZmluZF9tYWMgdGVzdCBpbiB0ZXN0X3V1aWQgaXMgbm93IHNraXBwZWQgaWYgdGhlCi0gIGlmY29uZmlnIGV4ZWN1dGFibGUgaXMgbm90IGF2YWlsYWJsZS4KLQotLSBJc3N1ZSAjMTk4ODY6IFVzZSBiZXR0ZXIgZXN0aW1hdGVkIG1lbW9yeSByZXF1aXJlbWVudHMgZm9yIGJpZ21lbSB0ZXN0cy4KLQogLSBJc3N1ZSAjMjAwNTU6IEZpeCB0ZXN0X3NodXRpbCB1bmRlciBXaW5kb3dzIHdpdGggc3ltbGluayBwcml2aWxlZ2VzIGhlbGQuCiAgIFBhdGNoIGJ5IFZhanJhc2t5IEtvay4KIAorLSBJc3N1ZSAjMjAwNzA6IERvbid0IHJ1biB0ZXN0X3VybGxpYjJuZXQgd2hlbiBuZXR3b3JrIHJlc291cmNlcyBhcmUgbm90CisgIGVuYWJsZWQuCisKIC0gSXNzdWUgIzE5OTM4OiBSZS1lbmFibGVkIHRlc3RfYnVnXzEzMzM5ODIgaW4gdGVzdF9kaXMsIHdoaWNoIGhhZCBiZWVuCiAgIGRpc2FibGVkIHNpbmNlIDMuMCBkdWUgdG8gdGhlIGNoYW5nZXMgaW4gbGlzdGNvbXAgaGFuZGxpbmcuCiAKIC0gSXNzdWUgIzE5MzIwOiB0ZXN0X3RjbCBubyBsb25nZXIgZmFpbHMgd2hlbiB3YW50b2JqZWN0cyBpcyBmYWxzZS4KIAotLSBJc3N1ZSAjMTk2ODM6IFJlbW92ZWQgZW1wdHkgdGVzdHMgZnJvbSB0ZXN0X21pbmlkb20uICBQYXRjaCBieSBBaml0ZXNoIEd1cHRhLgotCiAtIElzc3VlICMxOTkxOTogRml4IGZsYWt5IFNTTCB0ZXN0LiBjb25uZWN0X2V4KCkgc29tZXRpbWVzIHJldHVybnMKICAgRVdPVUxEQkxPQ0sgb24gV2luZG93cyBvciBWTXMgaG9zdGVkIG9uIFdpbmRvd3MuCiAKQEAgLTY1NCwyNiArMzAzOCwzNSBAQAogCiAtIElzc3VlICMxOTkyODogSW1wbGVtZW50ZWQgYSB0ZXN0IGZvciByZXByKCkgb2YgY2VsbCBvYmplY3RzLgogCi0tIElzc3VlICMxOTUzNTogRml4ZWQgdGVzdF9kb2N4bWxycGMgd2hlbiBweXRob24gaXMgcnVuIHdpdGggLU9PLgorLSBJc3N1ZSAjMTk1MzU6IEZpeGVkIHRlc3RfZG9jeG1scnBjLCB0ZXN0X2Z1bmN0b29scywgdGVzdF9pbnNwZWN0LCBhbmQKKyAgdGVzdF9zdGF0aXN0aWNzIHdoZW4gcHl0aG9uIGlzIHJ1biB3aXRoIC1PTy4KIAogLSBJc3N1ZSAjMTk5MjY6IFJlbW92ZWQgdW5uZWVkZWQgdGVzdF9tYWluIGZyb20gdGVzdF9hYnN0cmFjdF9udW1iZXJzLgogICBQYXRjaCBieSBWYWpyYXNreSBLb2suCiAKKy0gSXNzdWUgIzE5NTcyOiBNb3JlIHNraXBwZWQgdGVzdHMgZXhwbGljaXRseSBtYXJrZWQgYXMgc2tpcHBlZC4KKwogLSBJc3N1ZSAjMTk1OTUsICMxOTk4NzogUmUtZW5hYmxlZCBhIGxvbmctZGlzYWJsZWQgdGVzdCBpbiB0ZXN0X3dpbnNvdW5kLgogCiAtIElzc3VlICMxOTU4ODogRml4ZWQgdGVzdHMgaW4gdGVzdF9yYW5kb20gdGhhdCB3ZXJlIHNpbGVudGx5IHNraXBwZWQgbW9zdAogICBvZiB0aGUgdGltZS4gIFBhdGNoIGJ5IEp1bGlhbiBHaW5kaS4KIAotLSBJc3N1ZSAjMTk1OTY6IFNldCB1bnRlc3RhYmxlIHRlc3RzIGluIHRlc3RfaW1wb3J0bGliIHRvIE5vbmUgdG8gYXZvaWQKLSAgcmVwb3J0aW5nIHN1Y2Nlc3Mgb24gZW1wdHkgdGVzdHMuCitCdWlsZAorLS0tLS0KIAotLSBJc3N1ZSAjMTk0NDA6IENsZWFuIHVwIHRlc3RfY2FwaSBieSByZW1vdmluZyBhbiB1bm5lY2Vzc2FyeSBfX2Z1dHVyZV9fCi0gIGltcG9ydCwgY29udmVydGluZyBmcm9tIHRlc3RfbWFpbiB0byB1bml0dGVzdC5tYWluLCBhbmQgcnVubmluZyB0aGUKLSAgX3Rlc3RjYXBpIG1vZHVsZSB0ZXN0cyB3aXRoaW4gYSB1bml0dGVzdCBUZXN0Q2FzZS4KKy0gSXNzdWUgIzE5NzI4OiBFbmFibGUgcGlwIGluc3RhbGxhdGlvbiBieSBkZWZhdWx0IG9uIFdpbmRvd3MuCiAKLS0gSXNzdWUgIzE4NzAyLCAxOTU3MjogQWxsIHNraXBwZWQgdGVzdHMgbm93IHJlcG9ydGVkIGFzIHNraXBwZWQuCistIElzc3VlICMxNjEzNjogUmVtb3ZlIFZNUyBzdXBwb3J0CiAKLS0gSXNzdWUgIzE5MDg1OiBBZGRlZCBiYXNpYyB0ZXN0cyBmb3IgYWxsIHRraW50ZXIgd2lkZ2V0IG9wdGlvbnMuCistIElzc3VlICMxODIxNTogQWRkIHNjcmlwdCBUb29scy9zc2wvdGVzdF9tdWx0aXBsZV92ZXJzaW9ucy5weSB0byBjb21waWxlIGFuZAorICBydW4gUHl0aG9uJ3MgdW5pdCB0ZXN0cyB3aXRoIG11bHRpcGxlIHZlcnNpb25zIG9mIE9wZW5TU0wuCisKKy0gSXNzdWUgIzE5OTIyOiBkZWZpbmUgX0lOQ0xVREVfX1NURENfQTFfU09VUkNFIGluIEhQLVVYIHRvIGluY2x1ZGUgbWJzdGF0ZV90CisgIGZvciBtYnJ0b3djKCkuCisKKy0gSXNzdWUgIzE5Nzg4OiBraWxsX3B5dGhvbihfZCkuZXhlIGlzIG5vdyBydW4gYXMgYSBQcmVCdWlsZEV2ZW50IG9uIHRoZQorICBweXRob25jb3JlIHN1Yi1wcm9qZWN0LiAgVGhpcyBzaG91bGQgcHJldmVudCBidWlsZCBlcnJvcnMgZHVlIGEgcHJldmlvdXMKKyAgYnVpbGQncyBweXRob24oX2QpLmV4ZSBzdGlsbCBydW5uaW5nLgogCiBEb2N1bWVudGF0aW9uCiAtLS0tLS0tLS0tLS0tCkBAIC02ODcsOSArMzA4MCw2IEBACiAtIElzc3VlICMyMDI1MzogRml4ZWQgYSB0eXBvIGluIHRoZSBpcGFkZHJlc3MgZG9jcyB0aGF0IGFkdmVydGlzZWQgYW4KICAgaWxsZWdhbCBhdHRyaWJ1dGUgbmFtZS4gIEZvdW5kIGJ5IElOQURBIE5hb2tpLgogCi0tIElzc3VlICMxOTk2MzogRG9jdW1lbnQgdGhhdCBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZSgpIG5vIGxvbmdlciByZXF1aXJlcwotICBpbXBvcnRpbmcgcGFyZW50IHBhY2thZ2VzIHNlcGFyYXRlbHkuCi0KIC0gSXNzdWUgIzE4ODQwOiBJbnRyb2R1Y2UgdGhlIGpzb24gbW9kdWxlIGluIHRoZSB0dXRvcmlhbCwgYW5kIGRlLWVtcGhhc2l6ZQogICB0aGUgcGlja2xlIG1vZHVsZS4KIApAQCAtNjk3LDE0OSArMzA4NywyOTUgQEAKIAogLSBJc3N1ZSAjMTk3OTU6IEltcHJvdmVkIG1hcmt1cCBvZiBUcnVlL0ZhbHNlIGNvbnN0YW50cy4KIAotLSBJc3N1ZSAjMTgzMjY6IENsYXJpZnkgdGhhdCBsaXN0LnNvcnQncyBhcmd1bWVudHMgYXJlIGtleXdvcmQtb25seS4gIEFsc28sCi0gIGF0dGVtcHQgdG8gcmVkdWNlIGNvbmZ1c2lvbiBpbiB0aGUgZ2xvc3NhcnkgYnkgbm90IHNheWluZyB0aGVyZSBhcmUKLSAgZGlmZmVyZW50ICJ0eXBlcyIgb2YgYXJndW1lbnRzIGFuZCBwYXJhbWV0ZXJzLgotCi1CdWlsZAotLS0tLS0KLQotLSBJc3N1ZSAjMTk3ODg6IGtpbGxfcHl0aG9uKF9kKS5leGUgaXMgbm93IHJ1biBhcyBhIFByZUJ1aWxkRXZlbnQgb24gdGhlCi0gIHB5dGhvbmNvcmUgc3ViLXByb2plY3QuICBUaGlzIHNob3VsZCBwcmV2ZW50IGJ1aWxkIGVycm9ycyBkdWUgYSBwcmV2aW91cwotICBidWlsZCdzIHB5dGhvbihfZCkuZXhlIHN0aWxsIHJ1bm5pbmcuCi0KLS0gQWRkIHdvcmthcm91bmQgZm9yIFZTIDIwMTAgbm1ha2UgY2xlYW4gaXNzdWUuIFZTIDIwMTAgZG9lc24ndCBzZXQgdXAgUEFUSAotICBmb3Igbm1ha2UuZXhlIGNvcnJlY3RseS4KLQogVG9vbHMvRGVtb3MKIC0tLS0tLS0tLS0tCiAKLS0gSXNzdWUgIzE5OTM2OiBBZGRlZCBleGVjdXRhYmxlIGJpdHMgb3Igc2hlYmFuZyBsaW5lcyB0byBQeXRob24gc2NyaXB0cyB3aGljaAotICByZXF1aXJlcyB0aGVtLiAgRGlzYWJsZSBleGVjdXRhYmxlIGJpdHMgYW5kIHNoZWJhbmcgbGluZXMgaW4gdGVzdCBhbmQKLSAgYmVuY2htYXJrIGZpbGVzIGluIG9yZGVyIHRvIHByZXZlbnQgdXNpbmcgYSByYW5kb20gc3lzdGVtIHB5dGhvbiwgYW5kIGluCi0gIHNvdXJjZSBmaWxlcyBvZiBtb2R1bGVzIHdoaWNoIGRvbid0IHByb3ZpZGUgY29tbWFuZCBsaW5lIGludGVyZmFjZS4gIEZpeGVkCi0gIHNoZWJhbmcgbGluZSB0byB1c2UgcHl0aG9uMyBleGVjdXRhYmxlIGluIHRoZSB1bml0dGVzdGd1aSBzY3JpcHQuCistIElzc3VlICMxOTY1OTogQWRkZWQgZG9jdW1lbnRhdGlvbiBmb3IgQXJndW1lbnQgQ2xpbmljLgogCi0tIElzc3VlICMxODk2MDogMnRvMyBhbmQgdGhlIGZpbmRub2NvZGluZy5weSBzY3JpcHQgbm93IGlnbm9yZSB0aGUgc291cmNlCi0gIGVuY29kaW5nIGRlY2xhcmF0aW9uIG9uIHRoZSBzZWNvbmQgbGluZSBpZiB0aGUgZmlyc3QgbGluZSBjb250YWlucyBhbnl0aGluZwotICBleGNlcHQgYSBjb21tZW50LgorLSBJc3N1ZSAjMTk5NzY6IEFyZ3VtZW50IENsaW5pYyBNRVRIX05PQVJHUyBmdW5jdGlvbnMgbm93IGFsd2F5cworICB0YWtlIHR3byBwYXJhbWV0ZXJzLgogCiAKLVdoYXQncyBOZXcgaW4gUHl0aG9uIDMuMy4zPwotPT09PT09PT09PT09PT09PT09PT09PT09PT09CitXaGF0J3MgTmV3IGluIFB5dGhvbiAzLjQuMCBCZXRhIDE/Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKLSpSZWxlYXNlIGRhdGU6IDE3LU5vdi0yMDEzKgotCi1ObyBjaGFuZ2VzIGZyb20gcmVsZWFzZSBjYW5kaWRhdGUgMi4KLQotCi1XaGF0J3MgTmV3IGluIFB5dGhvbiAzLjMuMyByZWxlYXNlIGNhbmRpZGF0ZSAyPwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotKlJlbGVhc2UgZGF0ZTogMTEtTm92LTIwMTMqCi0KLUxpYnJhcnkKLS0tLS0tLS0KLQotLSBJc3N1ZSAjMTkyMjc6IEFueSByZS1zZWVkaW5nIG9mIHRoZSBPcGVuU1NMIFJORyBvbiBmb3JrIGhhcyBiZWVuIHJlbW92ZWQ7Ci0gIHRoaXMgc2hvdWxkIGJlIGhhbmRsZWQgYnkgT3BlblNTTCBpdHNlbGYgb3IgYnkgdGhlIGFwcGxpY2F0aW9uLgotCi0tIElzc3VlICMxOTQzNTogRml4IGRpcmVjdG9yeSB0cmF2ZXJzYWwgYXR0YWNrIG9uIENHSUh0dHBSZXF1ZXN0SGFuZGxlci4KLQotVGVzdHMKLS0tLS0tCi0KLS0gSXNzdWUgIzE4OTY0OiBGaXggdGVzdF90Y2wgd2hlbiBydW4gd2l0aCBUY2wvVGsgdmVyc2lvbnMgIDwgOC41LgotCi1CdWlsZAotLS0tLS0KLQotLSBJc3N1ZSAjMTU2NjM6IFJldmVydCBPUyBYIGluc3RhbGxlciBidWlsdC1pbiBUY2wvVGsgc3VwcG9ydCBmb3IgMy4zLjMuCi0gIFNvbWUgdGhpcmQtcGFydHkgcHJvamVjdHMsIHN1Y2ggYXMgTWF0cGxvdGxpYiBhbmQgUElML1BpbGxvdywKLSAgZGVwZW5kZWQgb24gYmVpbmcgYWJsZSB0byBidWlsZCB3aXRoIFRjbCBhbmQgVGsgZnJhbWV3b3JrcyBpbgotICAvTGlicmFyeS9GcmFtZXdvcmtzLgotCi0KLVdoYXQncyBOZXcgaW4gUHl0aG9uIDMuMy4zIHJlbGVhc2UgY2FuZGlkYXRlIDE/Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0qUmVsZWFzZSBkYXRlOiAyNy1PY3QtMjAxMyoKK1JlbGVhc2UgZGF0ZTogMjAxMy0xMS0yNAogCiBDb3JlIGFuZCBCdWlsdGlucwogLS0tLS0tLS0tLS0tLS0tLS0KIAorLSBVc2UgdGhlIHJlcHIgb2YgYSBtb2R1bGUgbmFtZSBpbiBtb3JlIHBsYWNlcyBpbiBpbXBvcnQsIGVzcGVjaWFsbHkKKyAgZXhjZXB0aW9ucy4KKworLSBJc3N1ZSAjMTk2MTk6IHN0ci5lbmNvZGUsIGJ5dGVzLmRlY29kZSBhbmQgYnl0ZWFycmF5LmRlY29kZSBub3cgdXNlIGFuCisgIGludGVybmFsIEFQSSB0byB0aHJvdyBMb29rdXBFcnJvciBmb3Iga25vd24gbm9uLXRleHQgZW5jb2RpbmdzLCByYXRoZXIKKyAgdGhhbiBhdHRlbXB0aW5nIHRoZSBlbmNvZGluZyBvciBkZWNvZGluZyBvcGVyYXRpb24gYW5kIHRoZW4gdGhyb3dpbmcgYQorICBUeXBlRXJyb3IgZm9yIGFuIHVuZXhwZWN0ZWQgb3V0cHV0IHR5cGUuIChUaGUgbGF0dGVyIG1lY2hhbmlzbSByZW1haW5zCisgIGluIHBsYWNlIGZvciB0aGlyZCBwYXJ0eSBub24tdGV4dCBlbmNvZGluZ3MpCisKKy0gSXNzdWUgIzE5MTgzOiBJbXBsZW1lbnQgUEVQIDQ1NiAnc2VjdXJlIGFuZCBpbnRlcmNoYW5nZWFibGUgaGFzaCBhbGdvcml0aG0nLgorICBQeXRob24gbm93IHVzZXMgU2lwSGFzaDI0IG9uIGFsbCBtYWpvciBwbGF0Zm9ybXMuCisKKy0gSXNzdWUgIzEyODkyOiBUaGUgdXRmLTE2KiBhbmQgdXRmLTMyKiBlbmNvZGVycyBubyBsb25nZXIgYWxsb3cgc3Vycm9nYXRlIGNvZGUKKyAgcG9pbnRzIChVK0Q4MDAtVStERkZGKSB0byBiZSBlbmNvZGVkLiAgVGhlIHV0Zi0zMiogZGVjb2RlcnMgbm8gbG9uZ2VyIGRlY29kZQorICBieXRlIHNlcXVlbmNlcyB0aGF0IGNvcnJlc3BvbmQgdG8gc3Vycm9nYXRlIGNvZGUgcG9pbnRzLiAgVGhlIHN1cnJvZ2F0ZXBhc3MKKyAgZXJyb3IgaGFuZGxlciBub3cgd29ya3Mgd2l0aCB0aGUgdXRmLTE2KiBhbmQgdXRmLTMyKiBjb2RlY3MuICBCYXNlZCBvbgorICBwYXRjaGVzIGJ5IFZpY3RvciBTdGlubmVyIGFuZCBLYW5nLUhhbyAoS2VubnkpIEx1LgorCistIElzc3VlICMxNzgwNjogQWRkZWQga2V5d29yZC1hcmd1bWVudCBzdXBwb3J0IGZvciAidGFic2l6ZSIgdG8KKyAgc3RyL2J5dGVzLmV4cGFuZHRhYnMoKS4KKworLSBJc3N1ZSAjMTc4Mjg6IE91dHB1dCB0eXBlIGVycm9ycyBpbiBzdHIuZW5jb2RlKCksIGJ5dGVzLmRlY29kZSgpIGFuZAorICBieXRlYXJyYXkuZGVjb2RlKCkgbm93IGRpcmVjdCB1c2VycyB0byBjb2RlY3MuZW5jb2RlKCkgb3IgY29kZWNzLmRlY29kZSgpCisgIGFzIGFwcHJvcHJpYXRlLgorCistIElzc3VlICMxNzgyODogVGhlIGludGVycHJldGVyIG5vdyBhdHRlbXB0cyB0byBjaGFpbiBlcnJvcnMgdGhhdCBvY2N1ciBpbgorICBjb2RlYyBwcm9jZXNzaW5nIHdpdGggYSByZXBsYWNlbWVudCBleGNlcHRpb24gb2YgdGhlIHNhbWUgdHlwZSB0aGF0CisgIGluY2x1ZGVzIHRoZSBjb2RlYyBuYW1lIGluIHRoZSBlcnJvciBtZXNzYWdlLiBJdCBlbnN1cmVzIGl0IG9ubHkgZG9lcyB0aGlzCisgIHdoZW4gdGhlIGNyZWF0aW9uIG9mIHRoZSByZXBsYWNlbWVudCBleGNlcHRpb24gd29uJ3QgbG9zZSBhbnkgaW5mb3JtYXRpb24uCisKKy0gSXNzdWUgIzE5NDY2OiBDbGVhciB0aGUgZnJhbWVzIG9mIGRhZW1vbiB0aHJlYWRzIGVhcmxpZXIgZHVyaW5nIHRoZQorICBQeXRob24gc2h1dGRvd24gdG8gY2FsbCBvYmplY3RzIGRlc3RydWN0b3JzLiBTbyAidW5jbG9zZWQgZmlsZSIgcmVzb3VyY2UKKyAgd2FybmluZ3MgYXJlIG5vdyBjb3JyZXRseSBlbWl0dGVkIGZvciBkYWVtb24gdGhyZWFkcy4KKworLSBJc3N1ZSAjMTk1MTQ6IERlZHVwbGljYXRlIHNvbWUgX1B5X0lERU5USUZJRVIgZGVjbGFyYXRpb25zLgorICBQYXRjaCBieSBBbmRyZWkgRG9yaWFuIER1bWEuCisKKy0gSXNzdWUgIzE3OTM2OiBGaXggTyhuKioyKSBiZWhhdmlvdXIgd2hlbiBhZGRpbmcgb3IgcmVtb3ZpbmcgbWFueSBzdWJjbGFzc2VzCisgIG9mIGEgZ2l2ZW4gdHlwZS4KKworLSBJc3N1ZSAjMTk0Mjg6IHppcGltcG9ydCBub3cgaGFuZGxlcyBlcnJvcnMgd2hlbiByZWFkaW5nIHRydW5jYXRlZCBvciBpbnZhbGlkCisgIFpJUCBhcmNoaXZlLgorCistIElzc3VlICMxODQwODogQWRkIGEgbmV3IFB5RnJhbWVfRmFzdFRvTG9jYWxzV2l0aEVycm9yKCkgZnVuY3Rpb24gdG8gaGFuZGxlCisgIGV4Y2VwdGlvbnMgd2hlbiBtZXJnaW5nIGZhc3QgbG9jYWxzIGludG8gZl9sb2NhbHMgb2YgYSBmcmFtZS4KKyAgUHlFdmFsX0dldExvY2FscygpIG5vdyByYWlzZXMgYW4gZXhjZXB0aW9uIGFuZCByZXR1cm4gTlVMTCBvbiBmYWlsdXJlLgorCistIElzc3VlICMxOTM2OTogT3B0aW1pemVkIHRoZSB1c2FnZSBvZiBfX2xlbmd0aF9oaW50X18oKS4KKwogLSBJc3N1ZSAjMTg2MDM6IEVuc3VyZSB0aGF0IFB5T1NfbXlzdHJpY21wIGFuZCBQeU9TX215c3RybmljbXAgYXJlIGluIHRoZQogICBQeXRob24gZXhlY3V0YWJsZSBhbmQgbm90IHJlbW92ZWQgYnkgdGhlIGxpbmtlcidzIG9wdGltaXplci4KIAotLSBJc3N1ZSAjMTkyNzk6IFVURi03IGRlY29kZXIgbm8gbW9yZSBwcm9kdWNlcyBpbGxlZ2FsIHN0cmluZ3MuCi0KLS0gRml4IG1hY3JvIGV4cGFuc2lvbiBvZiBfUHlFcnJfT0NDVVJSRUQoKSwgYW5kIG1ha2Ugc3VyZSB0byB1c2UgaXQgaW4gYXQKLSAgbGVhc3Qgb25lIHBsYWNlIHNvIGFzIHRvIGF2b2lkIHJlZ3Jlc3Npb25zLgotCi0tIElzc3VlICMxOTAxNDogbWVtb3J5dmlldy5jYXN0KCkgaXMgbm93IGFsbG93ZWQgb24gemVyby1sZW5ndGggdmlld3MuCi0KLS0gSXNzdWUgIzE5MDk4OiBQcmV2ZW50IG92ZXJmbG93IGluIHRoZSBjb21waWxlciB3aGVuIHRoZSByZWN1cnNpb24gbGltaXQgaXMgc2V0Ci0gIGFic3VyZGx5IGhpZ2guCi0KLS0gSXNzdWUgIzE4OTQyOiBzeXMuX2RlYnVnbWFsbG9jc3RhdHMoKSBvdXRwdXQgd2FzIGRhbWFnZWQgb24gV2luZG93cy4KLQotLSBJc3N1ZSAjMTg2Njc6IEFkZCBtaXNzaW5nICJIQVZFX0ZDSE9XTkFUIiBzeW1ib2wgdG8gcG9zaXguX2hhdmVfZnVuY3Rpb25zLgotCi0tIElzc3VlICMxODM2ODogUHlPU19TdGRpb1JlYWRsaW5lKCkgbm8gbG9uZ2VyIGxlYWtzIG1lbW9yeSB3aGVuIHJlYWxsb2MoKQotICBmYWlscy4KLQotLSBJc3N1ZSAjMTY3NDE6IEZpeCBhbiBlcnJvciByZXBvcnRpbmcgaW4gaW50KCkuCi0KLS0gSXNzdWUgIzE3ODk5OiBGaXggcmFyZSBmaWxlIGRlc2NyaXB0b3IgbGVhayBpbiBvcy5saXN0ZGlyKCkuCi0KLS0gSXNzdWUgIzE4NTUyOiBDaGVjayByZXR1cm4gdmFsdWUgb2YgUHlBcmVuYV9BZGRQeU9iamVjdCgpIGluCi0gIG9iajJhc3Rfb2JqZWN0KCkuCi0KLS0gSXNzdWUgIzE4NTYwOiBGaXggcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBzdW0oKS4KLQotLSBJc3N1ZSAjMTU5MDU6IEZpeCB0aGVvcmV0aWNhbCBidWZmZXIgb3ZlcmZsb3cgaW4gaGFuZGxpbmcgb2Ygc3lzLmFyZ3ZbMF0sCi0gIHByZWZpeCBhbmQgZXhlY19wcmVmaXggaWYgdGhlIG9wZXJhdGlvbiBzeXN0ZW0gZG9lcyBub3Qgb2JleSBNQVhQQVRITEVOLgotCi0tIElzc3VlICMxODM0NDogRml4IHBvdGVudGlhbCByZWYtbGVha3MgaW4gX2J1ZmZlcmVkcmVhZGVyX3JlYWRfYWxsKCkuCi0KLS0gSXNzdWUgIzE3ODcyOiBGaXggYSBzZWdmYXVsdCBpbiBtYXJzaGFsLmxvYWQoKSB3aGVuIGlucHV0IHN0cmVhbSByZXR1cm5zCi0gIG1vcmUgYnl0ZXMgdGhhbiByZXF1ZXN0ZWQuCi0KLS0gSXNzdWUgIzE4NDI2OiBGaXggTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIEMgZXh0ZW5zaW9uIGltcG9ydCB3aGVuCi0gIFB5TW9kdWxlX0dldERlZigpIHJldHVybnMgYW4gZXJyb3IuCi0KLS0gSXNzdWUgIzE4MzI4OiBSZW9yZGVyIG9wcyBpbiBQeVRocmVhZFN0YXRlX0RlbGV0ZSooKSBmdW5jdGlvbnMuIE5vdyB0aGUKLSAgdHN0YXRlIGlzIGZpcnN0IHJlbW92ZWQgZnJvbSBUTFMgYW5kIHRoZW4gZGVhbGxvY2F0ZWQuCi0KLS0gSXNzdWUgIzE4MTg0OiBQeVVuaWNvZGVfRnJvbUZvcm1hdCgpIGFuZCBQeVVuaWNvZGVfRnJvbUZvcm1hdFYoKSBub3cgcmFpc2UKLSAgT3ZlcmZsb3dFcnJvciB3aGVuIGFuIGFyZ3VtZW50IG9mICVjIGZvcm1hdCBpcyBvdXQgb2YgcmFuZ2UuCi0KLS0gSXNzdWUgIzE4MTM3OiBEZXRlY3QgaW50ZWdlciBvdmVyZmxvdyBvbiBwcmVjaXNpb24gaW4gZmxvYXQuX19mb3JtYXRfXygpCi0gIGFuZCBjb21wbGV4Ll9fZm9ybWF0X18oKS4KLQotLSBJc3N1ZSAjMTgxODM6IEZpeCB2YXJpb3VzIHVuaWNvZGUgb3BlcmF0aW9ucyBvbiBzdHJpbmdzIHdpdGggbGFyZ2UgdW5pY29kZQotICBjb2RlcG9pbnRzLgotCi0tIElzc3VlICMxODE4MDogRml4IHJlZiBsZWFrIGluIF9QeUltcG9ydF9HZXREeW5Mb2FkV2luZG93cygpLgotCi0tIElzc3VlICMxODAzODogU3ludGF4RXJyb3IgcmFpc2VkIGR1cmluZyBjb21waWxhdGlvbiBzb3VyY2VzIHdpdGggaWxsZWdhbAotICBlbmNvZGluZyBub3cgYWx3YXlzIGNvbnRhaW5zIGFuIGVuY29kaW5nIG5hbWUuCi0KLS0gSXNzdWUgIzE3NjQ0OiBGaXggYSBjcmFzaCBpbiBzdHIuZm9ybWF0IHdoZW4gY3VybHkgYnJhY2VzIGFyZSB1c2VkIGluIHNxdWFyZQotICBicmFja2V0cy4KLQotLSBJc3N1ZSAjMTc5ODM6IFJhaXNlIGEgU3ludGF4RXJyb3IgZm9yIGEgYGBnbG9iYWwgX19jbGFzc19fYGAgc3RhdGVtZW50IGluIGEKLSAgY2xhc3MgYm9keS4KLQotLSBJc3N1ZSAjMTc5Mjc6IEZyYW1lIG9iamVjdHMga2VwdCBhcmd1bWVudHMgYWxpdmUgaWYgdGhleSBoYWQgYmVlbiBjb3BpZWQgaW50bwotICBhIGNlbGwsIGV2ZW4gaWYgdGhlIGNlbGwgd2FzIGNsZWFyZWQuCistIElzc3VlICMxOTMwNjogQWRkIGV4dHJhIGhpbnRzIHRvIHRoZSBmYXVsdGhhbmRsZXIgbW9kdWxlJ3Mgc3RhY2sKKyAgZHVtcHMgdGhhdCB0aGVzZSBhcmUgInVwc2lkZSBkb3duIi4KIAogTGlicmFyeQogLS0tLS0tLQogCi0tIElzc3VlICMxOTM5NTogUmFpc2UgYW4gZXhjZXB0aW9uIHdoZW4gYXR0ZW1wdGluZyB0byBwaWNrbGUgYSBiejIgb3IgbHptYQotICBjb21wcmVzc29yL2RlY29tcHJlc3NvciBvYmplY3QsIHJhdGhlciB0aGFuIGNyZWF0aW5nIGEgcGlja2xlIHRoYXQgd291bGQKLSAgY2F1c2UgYSBzZWdmYXVsdCB3aGVuIGxvYWRlZCBhbmQgdXNlZC4KKy0gSXNzdWUgIzMxNTg6IGRvY3Rlc3QgY2FuIG5vdyBmaW5kIGRvY3Rlc3RzIGluIGZ1bmN0aW9ucyBhbmQgbWV0aG9kcworICB3cml0dGVuIGluIEMuCisKKy0gSXNzdWUgIzEzNDc3OiBBZGRlZCBjb21tYW5kIGxpbmUgaW50ZXJmYWNlIHRvIHRoZSB0YXJmaWxlIG1vZHVsZS4KKyAgT3JpZ2luYWwgcGF0Y2ggYnkgQmVya2VyIFBla3NhZy4KKworLSBJc3N1ZSAjMTk2NzQ6IGluc3BlY3Quc2lnbmF0dXJlKCkgbm93IHByb2R1Y2VzIGEgY29ycmVjdCBzaWduYXR1cmUKKyAgZm9yIHNvbWUgYnVpbHRpbnMuCisKKy0gSXNzdWUgIzE5NzIyOiBBZGRlZCBvcGNvZGUuc3RhY2tfZWZmZWN0KCksIHdoaWNoCisgIGNvbXB1dGVzIHRoZSBzdGFjayBlZmZlY3Qgb2YgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb25zLgorCistIElzc3VlICMxOTczNTogSW1wbGVtZW50IHByaXZhdGUgZnVuY3Rpb24gc3NsLl9jcmVhdGVfc3RkbGliX2NvbnRleHQoKSB0bworICBjcmVhdGUgU1NMQ29udGV4dCBvYmplY3RzIGluIFB5dGhvbidzIHN0ZGxpYiBtb2R1bGUuIEl0IHByb3ZpZGVzIGEgc2luZ2xlCisgIGNvbmZpZ3VyYXRpb24gcG9pbnQgYW5kIG1ha2VzIHVzZSBvZiBTU0xDb250ZXh0LmxvYWRfZGVmYXVsdF9jZXJ0cygpLgorCistIElzc3VlICMxNjIwMzogQWRkIHJlLmZ1bGxtYXRjaCgpIGZ1bmN0aW9uIGFuZCByZWdleC5mdWxsbWF0Y2goKSBtZXRob2QsCisgIHdoaWNoIGFuY2hvciB0aGUgcGF0dGVybiBhdCBib3RoIGVuZHMgb2YgdGhlIHN0cmluZyB0byBtYXRjaC4KKyAgT3JpZ2luYWwgcGF0Y2ggYnkgTWF0dGhldyBCYXJuZXR0LgorCistIElzc3VlICMxMzU5MjogSW1wcm92ZWQgdGhlIHJlcHIgZm9yIHJlZ3VsYXIgZXhwcmVzc2lvbiBwYXR0ZXJuIG9iamVjdHMuCisgIEJhc2VkIG9uIHBhdGNoIGJ5IEh1Z28gTG9wZXMgVGF2YXJlcy4KKworLSBJc3N1ZSAjMTk2NDE6IEFkZGVkIHRoZSBhdWRpb29wLmJ5dGVzd2FwKCkgZnVuY3Rpb24gdG8gY29udmVydCBiaWctZW5kaWFuCisgIHNhbXBsZXMgdG8gbGl0dGxlLWVuZGlhbiBhbmQgdmljZSB2ZXJzYS4KKworLSBJc3N1ZSAjMTUyMDQ6IERlcHJlY2F0ZWQgdGhlICdVJyBtb2RlIGluIGZpbGUtbGlrZSBvYmplY3RzLgorCistIElzc3VlICMxNzgxMDogSW1wbGVtZW50IFBFUCAzMTU0LCBwaWNrbGUgcHJvdG9jb2wgNC4KKworLSBJc3N1ZSAjMTk2Njg6IEFkZGVkIHN1cHBvcnQgZm9yIHRoZSBjcDExMjUgZW5jb2RpbmcuCisKKy0gSXNzdWUgIzE5Njg5OiBBZGQgc3NsLmNyZWF0ZV9kZWZhdWx0X2NvbnRleHQoKSBmYWN0b3J5IGZ1bmN0aW9uLiBJdCBjcmVhdGVzCisgIGEgbmV3IFNTTENvbnRleHQgb2JqZWN0IHdpdGggc2VjdXJlIGRlZmF1bHQgc2V0dGluZ3MuCisKKy0gSXNzdWUgIzE5NzI3OiBvcy51dGltZSguLi4sIE5vbmUpIGlzIG5vdyBwb3RlbnRpYWxseSBtb3JlIHByZWNpc2UKKyAgdW5kZXIgV2luZG93cy4KKworLSBJc3N1ZSAjMTcyMDE6IFpJUDY0IGV4dGVuc2lvbnMgbm93IGFyZSBlbmFibGVkIGJ5IGRlZmF1bHQuICBQYXRjaCBieQorICBXaWxsaWFtIE1hbGxhcmQuCisKKy0gSXNzdWUgIzE5MjkyOiBBZGQgU1NMQ29udGV4dC5sb2FkX2RlZmF1bHRfY2VydHMoKSB0byBsb2FkIGRlZmF1bHQgcm9vdCBDQQorICBjZXJ0aWZpY2F0ZXMgZnJvbSBkZWZhdWx0IHN0b3JlcyBvciBzeXN0ZW0gc3RvcmVzLiBCeSBkZWZhdWx0IHRoZSBtZXRob2QKKyAgbG9hZHMgQ0EgY2VydHMgZm9yIGF1dGhlbnRpY2F0aW9uIG9mIHNlcnZlciBjZXJ0cy4KKworLSBJc3N1ZSAjMTk2NzM6IEFkZCBwYXRobGliIHRvIHRoZSBzdGRsaWIgYXMgYSBwcm92aXNpb25hbCBtb2R1bGUgKFBFUCA0MjgpLgorCistIElzc3VlICMxNjU5NjogcGRiIGluIGEgZ2VuZXJhdG9yIG5vdyBwcm9wZXJseSBza2lwcyBvdmVyIHlpZWxkIGFuZAorICB5aWVsZCBmcm9tIHJhdGhlciB0aGFuIHN0ZXBwaW5nIG91dCBvZiB0aGUgZ2VuZXJhdG9yIGludG8gaXRzCisgIGNhbGxlci4gIChUaGlzIGlzIGVzc2VudGlhbCBmb3Igc3RlcHBpbmcgdGhyb3VnaCBhc3luY2lvIGNvcm91dGluZXMuKQorCistIElzc3VlICMxNzkxNjogQWRkZWQgZGlzLkJ5dGVjb2RlLmZyb21fdHJhY2ViYWNrKCkgYW5kCisgIGRpcy5CeXRlY29kZS5jdXJyZW50X29mZnNldCB0byBlYXNpbHkgZGlzcGxheSAiY3VycmVudCBpbnN0cnVjdGlvbiIKKyAgbWFya2VycyBpbiB0aGUgbmV3IGRpc2Fzc2VtYmx5IEFQSSAoUGF0Y2ggYnkgQ2xhdWRpdSBQb3BhKS4KKworLSBJc3N1ZSAjMTk1NTI6IHZlbnYgbm93IHN1cHBvcnRzIGJvb3RzdHJhcHBpbmcgcGlwIGludG8gdmlydHVhbCBlbnZpcm9ubWVudHMKKworLSBJc3N1ZSAjMTcxMzQ6IEZpbmFsaXplIGludGVyZmFjZSB0byBXaW5kb3dzJyBjZXJ0aWZpY2F0ZSBzdG9yZS4gQ2VydCBhbmQKKyAgQ1JMIGVudW1lcmF0aW9uIGFyZSBub3cgdHdvIGZ1bmN0aW9ucy4gZW51bV9jZXJ0aWZpY2F0ZXMoKSBhbHNvIHJldHVybnMKKyAgcHVycG9zZSBmbGFncyBhcyBzZXQgb2YgT0lEcy4KKworLSBJc3N1ZSAjMTk1NTU6IFJlc3RvcmUgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdTTycpLCAoYW5kIHRoZSBkaXN0dXRpbHMKKyAgZXF1aXZhbGVudCkgd2l0aCBhIERlcHJlY2F0aW9uV2FybmluZyBwb2ludGluZyBwZW9wbGUgYXQgJEVYVF9TVUZGSVguCisKKy0gSXNzdWUgIzg4MTM6IEFkZCBTU0xDb250ZXh0LnZlcmlmeV9mbGFncyB0byBjaGFuZ2UgdGhlIHZlcmlmaWNhdGlvbiBmbGFncworICBvZiB0aGUgY29udGV4dCBpbiBvcmRlciB0byBlbmFibGUgY2VydGlmaWNhdGlvbiByZXZvY2F0aW9uIGxpc3QgKENSTCkKKyAgY2hlY2tzIG9yIHN0cmljdCBYNTA5IHJ1bGVzLgorCistIElzc3VlICMxODI5NDogRml4IHRoZSB6bGliIG1vZHVsZSB0byBtYWtlIGl0IDY0LWJpdCBzYWZlLgorCistIElzc3VlICMxOTY4MjogRml4IGNvbXBhdGliaWxpdHkgaXNzdWUgd2l0aCBvbGQgdmVyc2lvbiBvZiBPcGVuU1NMIHRoYXQKKyAgd2FzIGludHJvZHVjZWQgYnkgSXNzdWUgIzE4Mzc5LgorCistIElzc3VlICMxNDQ1NTogcGxpc3RsaWIgbm93IHN1cHBvcnRzIGJpbmFyeSBwbGlzdHMgYW5kIGhhcyBhbiB1cGRhdGVkIEFQSS4KKworLSBJc3N1ZSAjMTk2MzM6IEZpeGVkIHdyaXRpbmcgbm90IGNvbXByZXNzZWQgMTYtIGFuZCAzMi1iaXQgd2F2ZSBmaWxlcyBvbgorICBiaWctZW5kaWFuIHBsYXRmb3Jtcy4KKworLSBJc3N1ZSAjMTgzNzk6IFNTTFNvY2tldC5nZXRwZWVyY2VydCgpIHJldHVybnMgQ0EgaXNzdWVyIEFJQSBmaWVsZHMsIE9DU1AKKyAgYW5kIENSTCBkaXN0cmlidXRpb24gcG9pbnRzLgorCistIElzc3VlICMxODEzODogSW1wbGVtZW50IGNhZGF0YSBhcmd1bWVudCBvZiBTU0xDb250ZXh0LmxvYWRfdmVyaWZ5X2xvY2F0aW9uKCkKKyAgdG8gbG9hZCBDQSBjZXJ0aWZpY2F0ZXMgYW5kIENSTCBmcm9tIG1lbW9yeS4gSXQgc3VwcG9ydHMgUEVNIGFuZCBERVIKKyAgZW5jb2RlZCBzdHJpbmdzLgorCistIElzc3VlICMxODc3NTogQWRkIG5hbWUgYW5kIGJsb2NrX3NpemUgYXR0cmlidXRlIHRvIEhNQUMgb2JqZWN0LiBUaGV5IG5vdworICBwcm92aWRlIHRoZSBzYW1lIEFQSSBlbGVtZW50cyBhcyBub24ta2V5ZWQgY3J5cHRvZ3JhcGhpYyBoYXNoIGZ1bmN0aW9ucy4KKworLSBJc3N1ZSAjMTcyNzY6IE1ENSBhcyBkZWZhdWx0IGRpZ2VzdG1vZCBmb3IgSE1BQyBpcyBkZXByZWNhdGVkLiBUaGUgSE1BQworICBtb2R1bGUgc3VwcG9ydHMgZGlnZXN0bW9kIG5hbWVzLCBlLmcuIGhtYWMuSE1BQygnc2hhMScpLgorCistIElzc3VlICMxOTQ0OTogaW4gY3N2J3Mgd3JpdGVyb3csIGhhbmRsZSBub24tc3RyaW5nIGtleXMgd2hlbiBnZW5lcmF0aW5nIHRoZQorICBlcnJvciBtZXNzYWdlIHRoYXQgY2VydGFpbiBrZXlzIGFyZSBub3QgaW4gdGhlICdmaWVsZG5hbWVzJyBsaXN0LgorCistIElzc3VlICMxMzYzMzogQWRkZWQgYSBuZXcgY29udmVydF9jaGFycmVmcyBrZXl3b3JkIGFyZyB0byBIVE1MUGFyc2VyIHRoYXQsCisgIHdoZW4gVHJ1ZSwgYXV0b21hdGljYWxseSBjb252ZXJ0cyBhbGwgY2hhcmFjdGVyIHJlZmVyZW5jZXMuCisKKy0gSXNzdWUgIzI5Mjc6IEFkZGVkIHRoZSB1bmVzY2FwZSgpIGZ1bmN0aW9uIHRvIHRoZSBodG1sIG1vZHVsZS4KKworLSBJc3N1ZSAjODQwMjogQWRkZWQgdGhlIGVzY2FwZSgpIGZ1bmN0aW9uIHRvIHRoZSBnbG9iIG1vZHVsZS4KKworLSBJc3N1ZSAjMTc2MTg6IEFkZCBCYXNlODUgYW5kIEFzY2lpODUgZW5jb2RpbmcvZGVjb2RpbmcgdG8gdGhlIGJhc2U2NCBtb2R1bGUuCisKKy0gSXNzdWUgIzE5NjM0OiB0aW1lLnN0cmZ0aW1lKCIleSIpIG5vdyByYWlzZXMgYSBWYWx1ZUVycm9yIG9uIEFJWCB3aGVuIGdpdmVuIGEKKyAgeWVhciBiZWZvcmUgMTkwMC4KKworLSBGaXggdGVzdC5zdXBwb3J0LmJpbmRfcG9ydCgpIHRvIG5vdCBjYXVzZSBhbiBlcnJvciB3aGVuIFB5dGhvbiB3YXMgY29tcGlsZWQKKyAgb24gYSBzeXN0ZW0gd2l0aCBTT19SRVVTRVBPUlQgZGVmaW5lZCBpbiB0aGUgaGVhZGVycyBidXQgcnVuIG9uIGEgc3lzdGVtCisgIHdpdGggYW4gT1Mga2VybmVsIHRoYXQgZG9lcyBub3Qgc3VwcG9ydCB0aGF0IHJlYXNvbmFibHkgbmV3IHNvY2tldCBvcHRpb24uCisKKy0gRml4IGNvbXBpbGF0aW9uIGVycm9yIHVuZGVyIGdjYyBvZiB0aGUgY3R5cGVzIG1vZHVsZSBidW5kbGVkIGxpYmZmaSBmb3IgYXJtLgorCistIElzc3VlICMxOTQ0ODogQWRkIHByaXZhdGUgQVBJIHRvIFNTTCBtb2R1bGUgdG8gbG9va3VwIEFTTi4xIG9iamVjdHMgYnkgT0lELAorICBOSUQsIHNob3J0IG5hbWUgYW5kIGxvbmcgbmFtZS4KKworLSBJc3N1ZSAjMTkyODI6IGRibS5vcGVuIG5vdyBzdXBwb3J0cyB0aGUgY29udGV4dCBtYW5hZ2VtZW50IHByb3RvY29sLiAoSW5pdGFsCisgIHBhdGNoIGJ5IENsYXVkaXUgUG9wYSkKKworLSBJc3N1ZSAjODMxMTogQWRkZWQgc3VwcG9ydCBmb3Igd3JpdGluZyBhbnkgYnl0ZXMtbGlrZSBvYmplY3RzIGluIHRoZSBhaWZjLAorICBzdW5hdSwgYW5kIHdhdmUgbW9kdWxlcy4KKworLSBJc3N1ZSAjNTIwMjogQWRkZWQgc3VwcG9ydCBmb3IgdW5zZWVrYWJsZSBmaWxlcyBpbiB0aGUgd2F2ZSBtb2R1bGUuCisKKy0gSXNzdWUgIzE5NTQ0IGFuZCBJc3N1ZSAjMTE4MDogUmVzdG9yZSBnbG9iYWwgb3B0aW9uIHRvIGlnbm9yZQorICB+Ly5weWRpc3R1dGlscy5jZmcgaW4gRGlzdHV0aWxzLCBhY2NpZGVudGFsbHkgcmVtb3ZlZCBpbiBiYWNrb3V0IG9mCisgIGRpc3R1dGlsczIgY2hhbmdlcy4KKworLSBJc3N1ZSAjMTk1MjM6IENsb3NlZCBGaWxlSGFuZGxlciBsZWFrIHdoaWNoIG9jY3VycmVkIHdoZW4gZGVsYXkgd2FzIHNldC4KKworLSBJc3N1ZSAjMTk1NDQgYW5kIElzc3VlICM2NTE2OiBSZXN0b3JlIHN1cHBvcnQgZm9yIC0tdXNlciBhbmQgLS1ncm91cAorICBwYXJhbWV0ZXJzIHRvIHNkaXN0IGNvbW1hbmQgYWNjaWRlbnRhbGx5IHJvbGxlZCBiYWNrIGFzIHBhcnQgb2YgdGhlCisgIGRpc3R1dGlsczIgcm9sbGJhY2suCisKKy0gSXNzdWUgIzEzNjc0OiBQcmV2ZW50ZWQgdGltZS5zdHJmdGltZSBmcm9tIGNyYXNoaW5nIG9uIFdpbmRvd3Mgd2hlbiBnaXZlbgorICBhIHllYXIgYmVmb3JlIDE5MDAgYW5kIGEgZm9ybWF0IG9mICV5LgorCistIElzc3VlICMxOTQwNjogaW1wbGVtZW50YXRpb24gb2YgdGhlIGVuc3VyZXBpcCBtb2R1bGUgKHBhcnQgb2YgUEVQIDQ1MykuCisgIFBhdGNoIGJ5IERvbmFsZCBTdHVmZnQgYW5kIE5pY2sgQ29naGxhbi4KKworLSBJc3N1ZSAjMTk1NDQgYW5kIElzc3VlICM2Mjg2OiBSZXN0b3JlIHVzZSBvZiB1cmxsaWIgb3ZlciBodHRwIGFsbG93aW5nIHVzZQorICBvZiBodHRwX3Byb3h5IGZvciBEaXN0dXRpbHMgdXBsb2FkIGNvbW1hbmQsIGEgZmVhdHVyZSBhY2NpZGVudGFsbHkgbG9zdAorICBpbiB0aGUgcm9sbGJhY2sgb2YgZGlzdHV0aWxzMi4KKworLSBJc3N1ZSAjMTk1NDQgYW5kIElzc3VlICM3NDU3OiBSZXN0b3JlIHRoZSByZWFkX3BrZ19maWxlIG1ldGhvZCB0bworICBkaXN0dXRpbHMuZGlzdC5EaXN0cmlidXRpb25NZXRhZGF0YSBhY2NpZGVudGFsbHkgcmVtb3ZlZCBpbiB0aGUgdW5kbyBvZgorICBkaXN0dXRpbHMyLgorCistIElzc3VlICMxNjY4NTogQWRkZWQgc3VwcG9ydCBmb3IgYW55IGJ5dGVzLWxpa2Ugb2JqZWN0cyBpbiB0aGUgYXVkaW9vcCBtb2R1bGUuCisgIFJlbW92ZWQgc3VwcG9ydCBmb3Igc3RyaW5ncy4KKworLSBJc3N1ZSAjNzE3MTogQWRkIFdpbmRvd3MgaW1wbGVtZW50YXRpb24gb2YgYGBpbmV0X250b3BgYCBhbmQgYGBpbmV0X3B0b25gYAorICB0byBzb2NrZXQgbW9kdWxlLiBQYXRjaCBieSBBdHN1byBJc2hpbW90by4KKworLSBJc3N1ZSAjMTkyNjE6IEFkZGVkIHN1cHBvcnQgZm9yIHdyaXRpbmcgMjQtYml0IHNhbXBsZXMgaW4gdGhlIHN1bmF1IG1vZHVsZS4KKworLSBJc3N1ZSAjMTA5Nzc5NzogQWRkZWQgQ1AyNzMgZW5jb2RpbmcsIHVzZWQgb24gSUJNIG1haW5mcmFtZXMgaW4KKyAgR2VybWFueSBhbmQgQXVzdHJpYS4gIE1hcHBpbmcgcHJvdmlkZWQgYnkgTWljaGFlbCBCaWVyZW5mZWxkLgorCistIElzc3VlICMxNTc1MDIwOiBGaXhlZCBzdXBwb3J0IG9mIDI0LWJpdCB3YXZlIGZpbGVzIG9uIGJpZy1lbmRpYW4gcGxhdGZvcm1zLgorCistIElzc3VlICMxOTM3ODogRml4ZWQgYSBudW1iZXIgb2YgY2FzZXMgaW4gdGhlIGRpcyBtb2R1bGUgd2hlcmUgdGhlIG5ldworICAiZmlsZSIgcGFyYW1ldGVyIHdhcyBub3QgYmVpbmcgaG9ub3VyZWQgY29ycmVjdGx5CisKKy0gSXNzdWUgIzE5Mzc4OiBSZW1vdmVkIHRoZSAiZGlzLkJ5dGVjb2RlLnNob3dfaW5mbyIgbWV0aG9kCisKKy0gSXNzdWUgIzE5Mzc4OiBSZW5hbWVkIHRoZSAiZGlzLkJ5dGVjb2RlLmRpc3BsYXlfY29kZSIgbWV0aG9kIHRvCisgICJkaXMuQnl0ZWNvZGUuZGlzIiBhbmQgY29udmVydGVkIGl0IHRvIHJldHVybmluZyBhIHN0cmluZyByYXRoZXIgdGhhbgorICBwcmludGluZyBvdXRwdXQuCisKKy0gSXNzdWUgIzE5Mzc4OiB0aGUgImxpbmVfb2Zmc2V0IiBwYXJhbWV0ZXIgaW4gdGhlIG5ldyAiZGlzLmdldF9pbnN0cnVjdGlvbnMiCisgIEFQSSBoYXMgYmVlbiByZW5hbWVkIHRvICJmaXJzdF9saW5lIiAoYW5kIHRoZSBkZWZhdWx0IHZhbHVlIGFuZCB1c2FnZQorICBjaGFuZ2VkIGFjY29yZGluZ2x5KS4gVGhpcyBzaG91bGQgcmVkdWNlIGNvbmZ1c2lvbiB3aXRoIHRoZSBtb3JlIGNvbW1vbiB1c2UKKyAgb2YgIm9mZnNldCIgaW4gdGhlIGRpcyBkb2NzIHRvIHJlZmVyIHRvIGJ5dGVjb2RlIG9mZnNldHMuCisKKy0gSXNzdWUgIzE4Njc4OiBDb3JyZWN0ZWQgc3B3ZCBzdHJ1Y3QgbWVtYmVyIG5hbWVzIGluIHNwd2QgbW9kdWxlOgorICBzcF9uYW0tPnNwX25hbXAsIGFuZCBzcF9wd2QtPnNwX3B3ZHAuICBUaGUgb2xkIG5hbWVzIGFyZSBrZXB0IGFzIGV4dHJhCisgIHN0cnVjdHNlcSBtZW1iZXJzLCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KKworLSBJc3N1ZSAjNjE1NzogRml4ZWQgdGtpbnRlci5UZXh0LmRlYnVnKCkuICB0a2ludGVyLlRleHQuYmJveCgpIG5vdyByYWlzZXMKKyAgVHlwZUVycm9yIGluc3RlYWQgb2YgVGNsRXJyb3Igb24gd3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cy4gIE9yaWdpbmFsIHBhdGNoCisgIGJ5IEd1aWxoZXJtZSBQb2xvLgorCistIElzc3VlICMxMDE5NzogUmV3b3JrIHN1YnByb2Nlc3MuZ2V0W3N0YXR1c11vdXRwdXQgdG8gdXNlIHN1YnByb2Nlc3MKKyAgZnVuY3Rpb25hbGl0eSBhbmQgdGh1cyB0byB3b3JrIG9uIFdpbmRvd3MuIFBhdGNoIGJ5IE5pY2sgQ29naGxhbgorCistIElzc3VlICM2MTYwOiBUaGUgYmJveCgpIG1ldGhvZCBvZiB0a2ludGVyLlNwaW5ib3ggbm93IHJldHVybnMgYSB0dXBsZSBvZgorICBpbnRlZ2VycyBpbnN0ZWFkIG9mIGEgc3RyaW5nLiAgQmFzZWQgb24gcGF0Y2ggYnkgR3VpbGhlcm1lIFBvbG8uCisKKy0gSXNzdWUgIzE5NDAzOiBjb250ZXh0bGliLnJlZGlyZWN0X3N0ZG91dCBpcyBub3cgcmVlbnRyYW50CisKKy0gSXNzdWUgIzE5Mjg2OiBEaXJlY3RvcmllcyBpbiBgYHBhY2thZ2VfZGF0YWBgIGFyZSBubyBsb25nZXIgYWRkZWQgdG8KKyAgdGhlIGZpbGVsaXN0LCBwcmV2ZW50aW5nIGZhaWx1cmUgb3V0bGluZWQgaW4gdGhlIHRpY2tldC4KKworLSBJc3N1ZSAjMTk0ODA6IEhUTUxQYXJzZXIgbm93IGFjY2VwdHMgYWxsIHZhbGlkIHN0YXJ0LXRhZyBuYW1lcyBhcyBkZWZpbmVkCisgIGJ5IHRoZSBIVE1MNSBzdGFuZGFyZC4KKworLSBJc3N1ZSAjMTUxMTQ6IFRoZSBodG1sLnBhcnNlciBtb2R1bGUgbm93IHJhaXNlcyBhIERlcHJlY2F0aW9uV2FybmluZyB3aGVuIHRoZQorICBzdHJpY3QgYXJndW1lbnQgb2YgSFRNTFBhcnNlciBvciB0aGUgSFRNTFBhcnNlci5lcnJvciBtZXRob2QgYXJlIHVzZWQuCisKKy0gSXNzdWUgIzE5NDEwOiBVbmRvIHRoZSBzcGVjaWFsLWNhc2luZyByZW1vdmFsIG9mICcnIGZvcgorICBpbXBvcnRsaWIubWFjaGluZXJ5LkZpbGVGaW5kZXIuCisKKy0gSXNzdWUgIzE5NDI0OiBGaXggdGhlIHdhcm5pbmdzIG1vZHVsZSB0byBhY2NlcHQgZmlsZW5hbWUgY29udGFpbmluZyBzdXJyb2dhdGUKKyAgY2hhcmFjdGVycy4KKworLSBJc3N1ZSAjMTk0MzU6IEZpeCBkaXJlY3RvcnkgdHJhdmVyc2FsIGF0dGFjayBvbiBDR0lIdHRwUmVxdWVzdEhhbmRsZXIuCisKKy0gSXNzdWUgIzE5MjI3OiBSZW1vdmUgcHRocmVhZF9hdGZvcmsoKSBoYW5kbGVyLiBUaGUgaGFuZGxlciB3YXMgYWRkZWQgdG8KKyAgc29sdmUgIzE4NzQ3IGJ1dCBoYXMgY2F1c2VkIGlzc3Vlcy4KKworLSBJc3N1ZSAjMTk0MjA6IEZpeCByZWZlcmVuY2UgbGVhayBpbiBtb2R1bGUgaW5pdGFsaXphdGlvbiBjb2RlIG9mCisgIF9oYXNob3BlbnNzbC5jCisKKy0gSXNzdWUgIzE5MzI5OiBPcHRpbWl6ZWQgY29tcGlsaW5nIGNoYXJzZXRzIGluIHJlZ3VsYXIgZXhwcmVzc2lvbnMuCiAKIC0gSXNzdWUgIzE5MjI3OiBUcnkgdG8gZml4IGRlYWRsb2NrcyBjYXVzZWQgYnkgcmUtc2VlZGluZyB0aGVuIE9wZW5TU0wKICAgcHNldWRvLXJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIG9uIGZvcmsoKS4KQEAgLTg2MiwxMiArMzM5OCwzMCBAQAogLSBJc3N1ZSAjMTYwMzk6IENWRS0yMDEzLTE3NTI6IENoYW5nZSB1c2Ugb2YgcmVhZGxpbmUgaW4gaW1hcGxpYiBtb2R1bGUgdG8gbGltaXQKICAgbGluZSBsZW5ndGguICBQYXRjaCBieSBFbWlsIExpbmQuCiAKKy0gSXNzdWUgIzE5MzMwOiB0aGUgdW5uZWNlc3Nhcnkgd3JhcHBlciBmdW5jdGlvbnMgaGF2ZSBiZWVuIHJlbW92ZWQgZnJvbSB0aGUKKyAgaW1wbGVtZW50YXRpb25zIG9mIHRoZSBuZXcgY29udGV4dGxpYi5yZWRpcmVjdF9zdGRvdXQgYW5kCisgIGNvbnRleHRsaWIuc3VwcHJlc3MgY29udGV4dCBtYW5hZ2Vycywgd2hpY2ggYWxzbyBlbnN1cmVzIHRoZXkgcHJvdmlkZQorICByZWFzb25hYmxlIGhlbHAoKSBvdXRwdXQgb24gaW5zdGFuY2VzCisKIC0gSXNzdWUgIzE5MzkzOiBGaXggc3ltdGFibGUuc3ltdGFibGUgZnVuY3Rpb24gdG8gbm90IGJlIGNvbmZ1c2VkIHdoZW4gdGhlcmUgYXJlCiAgIGZ1bmN0aW9ucyBvciBjbGFzc2VzIG5hbWVkICJ0b3AiLgogCistIElzc3VlICMxODY4NTogUmVzdG9yZSByZSBwZXJmb3JtYW5jZSB0byBwcmUtUEVQIDM5MyBsZXZlbHMuCisKIC0gSXNzdWUgIzE5MzM5OiB0ZWxuZXRsaWIgbW9kdWxlIGlzIG5vdyB1c2luZyB0aW1lLm1vbm90b25pYygpIHdoZW4gYXZhaWxhYmxlCiAgIHRvIGNvbXB1dGUgdGltZW91dC4KIAorLSBJc3N1ZSAjMTkzOTk6IGZpeCBzcG9yYWRpYyB0ZXN0X3N1YnByb2Nlc3MgZmFpbHVyZS4KKworLSBJc3N1ZSAjMTMyMzQ6IEZpeCBvcy5saXN0ZGlyIHRvIHdvcmsgd2l0aCBleHRlbmRlZCBwYXRocyBvbiBXaW5kb3dzLgorICBQYXRjaCBieSBTYW50b3NvIFdpamF5YS4KKworLSBJc3N1ZSAjMTkzNzU6IFRoZSBzaXRlIG1vZHVsZSBhZGRpbmcgYSAic2l0ZS1weXRob24iIGRpcmVjdG9yeSB0byBzeXMucGF0aCwKKyAgaWYgaXQgZXhpc3RzLCBpcyBub3cgZGVwcmVjYXRlZC4KKworLSBJc3N1ZSAjMTkzNzk6IExhemlseSBpbXBvcnQgbGluZWNhY2hlIGluIHRoZSB3YXJuaW5ncyBtb2R1bGUsIHRvIG1ha2UKKyAgc3RhcnR1cCB3aXRoIHdhcm5pbmdzIGZhc3RlciB1bnRpbCBhIHdhcm5pbmcgZ2V0cyBwcmludGVkLgorCiAtIElzc3VlICMxOTI4ODogRml4ZWQgdGhlICJpbiIgb3BlcmF0b3Igb2YgZGJtLmdudSBkYXRhYmFzZXMgZm9yIHN0cmluZwogICBhcmd1bWVudC4gIE9yaWdpbmFsIHBhdGNoIGJ5IEFyZnJldmVyIEZyZWh0ZXMgVGFpZmVyc2FyIEFyYWhlc2lzLgogCkBAIC04NzYsNTIgKzM0MzAsMzAxIEBACiAKIC0gSXNzdWUgIzE5MzI3OiBGaXhlZCB0aGUgd29ya2luZyBvZiByZWd1bGFyIGV4cHJlc3Npb25zIHdpdGggdG9vIGJpZyBjaGFyc2V0LgogCistIElzc3VlICMxNzQwMDogTmV3ICdpc19nbG9iYWwnIGF0dHJpYnV0ZSBmb3IgaXBhZGRyZXNzIHRvIHRlbGwgaWYgYW4gYWRkcmVzcworICBpcyBhbGxvY2F0ZWQgYnkgSUFOQSBmb3IgZ2xvYmFsIG9yIHByaXZhdGUgbmV0d29ya3MuCisKIC0gSXNzdWUgIzE5MzUwOiBJbmNyZWFzaW5nIHRoZSB0ZXN0IGNvdmVyYWdlIG9mIG1hY3VybDJwYXRoLiBQYXRjaCBieSBDb2xpbgogICBXaWxsaWFtcy4KIAorLSBJc3N1ZSAjMTkzNjU6IE9wdGltaXplZCB0aGUgcGFyc2luZyBvZiBsb25nIHJlcGxhY2VtZW50IHN0cmluZyBpbiByZS5zdWIqKCkKKyAgZnVuY3Rpb25zLgorCiAtIElzc3VlICMxOTM1MjogRml4IHVuaXR0ZXN0IGRpc2NvdmVyeSB3aGVuIGEgbW9kdWxlIGNhbiBiZSByZWFjaGVkCiAgIHRocm91Z2ggc2V2ZXJhbCBwYXRocyAoZS5nLiB1bmRlciBEZWJpYW4vVWJ1bnR1IHdpdGggdmlydHVhbGVudikuCiAKIC0gSXNzdWUgIzE1MjA3OiBGaXggbWltZXR5cGVzIHRvIHJlYWQgZnJvbSBjb3JyZWN0IHBhcnQgb2YgV2luZG93cyByZWdpc3RyeQogICBPcmlnaW5hbCBwYXRjaCBieSBEYXZlIENoYW1iZXJzCiAKKy0gSXNzdWUgIzE2NTk1OiBBZGQgcHJsaW1pdCgpIHRvIHJlc291cmNlIG1vZHVsZS4KKworLSBJc3N1ZSAjMTkzMjQ6IEV4cG9zZSBMaW51eC1zcGVjaWZpYyBjb25zdGFudHMgaW4gcmVzb3VyY2UgbW9kdWxlLgorCistIExvYWQgU1NMJ3MgZXJyb3Igc3RyaW5ncyBpbiBoYXNobGliLgorCistIElzc3VlICMxODUyNzogVXBncmFkZSBpbnRlcm5hbCBjb3B5IG9mIHpsaWIgdG8gMS4yLjguCisKKy0gSXNzdWUgIzE5Mjc0OiBBZGQgYSBmaWx0ZXJmdW5jIHBhcmFtZXRlciB0byBQeVppcEZpbGUud3JpdGVweS4KKwogLSBJc3N1ZSAjODk2NDogZml4IHBsYXRmb3JtLl9zeXNfdmVyc2lvbiB0byBoYW5kbGUgSXJvblB5dGhvbiAyLjYrLgogICBQYXRjaCBieSBNYXJ0aW4gTWF0dXNpYWsuCiAKKy0gSXNzdWUgIzE5NDEzOiBSZXN0b3JlIHByZS0zLjMgcmVsb2FkKCkgc2VtYW50aWNzIG9mIHJlLWZpbmRpbmcgbW9kdWxlcy4KKworLSBJc3N1ZSAjMTg5NTg6IEltcHJvdmUgZXJyb3IgbWVzc2FnZSBmb3IganNvbi5sb2FkKHMpIHdoaWxlIHBhc3NpbmcgYSBzdHJpbmcKKyAgdGhhdCBzdGFydHMgd2l0aCBhIFVURi04IEJPTS4KKworLSBJc3N1ZSAjMTkzMDc6IEltcHJvdmUgZXJyb3IgbWVzc2FnZSBmb3IganNvbi5sb2FkKHMpIHdoaWxlIHBhc3Npbmcgb2JqZWN0cworICBvZiB0aGUgd3JvbmcgdHlwZS4KKwogLSBJc3N1ZSAjMTYwMzg6IENWRS0yMDEzLTE3NTI6IGZ0cGxpYjogTGltaXQgYW1vdW50IG9mIGRhdGEgcmVhZCBieQogICBsaW1pdGluZyB0aGUgY2FsbCB0byByZWFkbGluZSgpLiAgT3JpZ2luYWwgcGF0Y2ggYnkgTWljaGHFggogICBKYXN0cnrEmWJza2kgYW5kIEdpYW1wYW9sbyBSb2RvbGEuCiAKKy0gSXNzdWUgIzE3MDg3OiBJbXByb3ZlZCB0aGUgcmVwciBmb3IgcmVndWxhciBleHByZXNzaW9uIG1hdGNoIG9iamVjdHMuCisKK1Rlc3RzCistLS0tLQorCistIElzc3VlICMxOTY2NDogdGVzdF91c2VyZGljdCdzIHJlcHIgdGVzdCBubyBsb25nZXIgZGVwZW5kcyBvbiB0aGUgb3JkZXIKKyAgb2YgZGljdCBlbGVtZW50cy4KKworLSBJc3N1ZSAjMTk0NDA6IENsZWFuIHVwIHRlc3RfY2FwaSBieSByZW1vdmluZyBhbiB1bm5lY2Vzc2FyeSBfX2Z1dHVyZV9fCisgIGltcG9ydCwgY29udmVydGluZyBmcm9tIHRlc3RfbWFpbiB0byB1bml0dGVzdC5tYWluLCBhbmQgcnVubmluZyB0aGUKKyAgX3Rlc3RjYXBpIG1vZHVsZSB0ZXN0cyBhcyBzdWJUZXN0cyBvZiBhIHVuaXR0ZXN0IFRlc3RDYXNlIG1ldGhvZC4KKworLSBJc3N1ZSAjMTkzNzg6IHRoZSBtYWluIGRpcyBtb2R1bGUgdGVzdHMgYXJlIG5vdyBydW4gd2l0aCBib3RoIHN0ZG91dAorICByZWRpcmVjdGlvbiAqYW5kKiBwYXNzaW5nIGFuIGV4cGxpY2l0IGZpbGUgcGFyYW1ldGVyCisKKy0gSXNzdWUgIzE5Mzc4OiByZW1vdmVkIHRoZSBub3QtYWN0dWFsbHktaGVscGZ1bCBhc3NlcnRJbnN0cnVjdGlvbk1hdGNoZXMKKyAgYW5kIGFzc2VydEJ5dGVjb2RlRXhhY3RseU1hdGNoZXMgaGVscGVycyBmcm9tIGJ5dGVjb2RlX2hlbHBlcgorCistIElzc3VlICMxODcwMjogQWxsIHNraXBwZWQgdGVzdHMgbm93IHJlcG9ydGVkIGFzIHNraXBwZWQuCisKKy0gSXNzdWUgIzE5NDM5OiBpbnRlcnByZXRlciBlbWJlZGRpbmcgdGVzdHMgYXJlIG5vdyBleGVjdXRlZCBvbiBXaW5kb3dzCisgIChQYXRjaCBieSBaYWNoYXJ5IFdhcmUpCisKKy0gSXNzdWUgIzE5MDg1OiBBZGRlZCBiYXNpYyB0ZXN0cyBmb3IgYWxsIHRraW50ZXIgd2lkZ2V0IG9wdGlvbnMuCisKKy0gSXNzdWUgIzE5Mzg0OiBGaXggdGVzdF9weV9jb21waWxlIGZvciByb290IHVzZXIsIHBhdGNoIGJ5IENsYXVkaXUgUG9wYS4KKworRG9jdW1lbnRhdGlvbgorLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxODMyNjogQ2xhcmlmeSB0aGF0IGxpc3Quc29ydCdzIGFyZ3VtZW50cyBhcmUga2V5d29yZC1vbmx5LiAgQWxzbywKKyAgYXR0ZW1wdCB0byByZWR1Y2UgY29uZnVzaW9uIGluIHRoZSBnbG9zc2FyeSBieSBub3Qgc2F5aW5nIHRoZXJlIGFyZQorICBkaWZmZXJlbnQgInR5cGVzIiBvZiBhcmd1bWVudHMgYW5kIHBhcmFtZXRlcnMuCisKK0J1aWxkCistLS0tLQorCistIElzc3VlICMxOTM1ODogIm1ha2UgY2xpbmljIiBub3cgcnVucyB0aGUgQXJndW1lbnQgQ2xpbmljIHByZXByb2Nlc3NvcgorICBvdmVyIGFsbCBDUHl0aG9uIHNvdXJjZSBmaWxlcy4KKworLSBVcGRhdGUgU1FMaXRlIHRvIDMuOC4xLCB4eiB0byA1LjAuNSwgYW5kIFRjbC9UayB0byA4LjYuMSBvbiBXaW5kb3dzLgorCistIElzc3VlICMxNjYzMjogRW5hYmxlIERFUCBhbmQgQVNMUiBvbiBXaW5kb3dzLgorCistIElzc3VlICMxNzc5MTogRHJvcCBQUkVGSVggYW5kIEVYRUNfUFJFRklYIGRlZmluaXRpb25zIGZyb20gUEMvcHljb25maWcuaAorCistIEFkZCB3b3JrYXJvdW5kIGZvciBWUyAyMDEwIG5tYWtlIGNsZWFuIGlzc3VlLiBWUyAyMDEwIGRvZXNuJ3Qgc2V0IHVwIFBBVEgKKyAgZm9yIG5tYWtlLmV4ZSBjb3JyZWN0bHkuCisKKy0gSXNzdWUgIzE5NTUwOiBJbXBsZW1lbnQgV2luZG93cyBpbnN0YWxsZXIgY2hhbmdlcyBvZiBQRVAgNDUzIChlbnN1cmVwaXApLgorCistIElzc3VlICMxOTUyMDogRml4IGNvbXBpbGVyIHdhcm5pbmcgaW4gdGhlIF9zaGEzIG1vZHVsZSBvbiAzMmJpdCBXaW5kb3dzLgorCistIElzc3VlICMxOTM1NjogQXZvaWQgdXNpbmcgYSBDIHZhcmlhYmxlZCBuYW1lZCAiX3NlbGYiLCBpdCdzIGEgcmVzZXJ2ZWQKKyAgd29yZCBpbiBzb21lIEMgY29tcGlsZXJzLgorCistIElzc3VlICMxNTc5MjogQ29ycmVjdCBidWlsZCBvcHRpb25zIG9uIFdpbjY0LiBQYXRjaCBieSBKZXJlbXkgS2xvdGguCisKKy0gSXNzdWUgIzE5MzczOiBBcHBseSB1cHN0cmVhbSBjaGFuZ2UgdG8gVGsgOC41LjE1IGZpeGluZyBPUyBYIDEwLjkKKyAgc2NyZWVuIHJlZnJlc2ggcHJvYmxlbSBmb3IgT1MgWCBpbnN0YWxsZXIgYnVpbGQuCisKKy0gSXNzdWUgIzE5NjQ5OiBPbiBPUyBYLCB0aGUgc2FtZSBzZXQgb2YgZmlsZSBuYW1lcyBhcmUgbm93IGluc3RhbGxlZAorICBpbiBiaW4gZGlyZWN0b3JpZXMgZm9yIGFsbCBjb25maWd1cmF0aW9uczogbm9uLWZyYW1ld29yayB2cyBmcmFtZXdvcmssCisgIGFuZCBzaW5nbGUgYXJjaCB2cyB1bml2ZXJzYWwgYnVpbGRzLiAgcHl0aG9ueC55LTMyIGlzIG5vdyBhbHdheXMKKyAgaW5zdGFsbGVkIGZvciA2NC1iaXQvMzItYml0IHVuaXZlcnNhbCBidWlsZHMuICBUaGUgb2Jzb2xldGUgYW5kCisgIHVuZG9jdW1lbnRlZCBweXRob253KiBzeW1saW5rcyBhcmUgbm8gbG9uZ2VyIGluc3RhbGxlZCBhbnl3aGVyZS4KKworLSBJc3N1ZSAjMTk1NTM6IFBFUCA0NTMgLSAibWFrZSBpbnN0YWxsIiBhbmQgIm1ha2UgYWx0aW5zdGFsbCIgbm93IGluc3RhbGwgb3IKKyAgdXBncmFkZSBwaXAgYnkgZGVmYXVsdCwgdXNpbmcgdGhlIGJ1bmRsZWQgcGlwIHByb3ZpZGVkIGJ5IHRoZSBuZXcgZW5zdXJlcGlwCisgIG1vZHVsZS4gIEEgbmV3IGNvbmZpZ3VyZSBvcHRpb24sIC0td2l0aC1lbnN1cmVwaXBbPXVwZ3JhZGV8aW5zdGFsbHxub10sIGlzCisgIGF2YWlsYWJsZSB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBlbnN1cmVwaXAgIi0tdXBncmFkZSIgb3B0aW9uLiAgVGhlIG9wdGlvbgorICBjYW4gYWxzbyBiZSBzZXQgd2l0aCAibWFrZSBbYWx0XWluc3RhbGwgRU5TVVJFUElQPVt1cGdyYWRlfGluc3RhbGx8bm9dIi4KKworLSBJc3N1ZSAjMTk1NTE6IFBFUCA0NTMgLSB0aGUgT1MgWCBpbnN0YWxsZXIgbm93IGluc3RhbGxzIHBpcCBieSBkZWZhdWx0LgorCistIFVwZGF0ZSB0aGlyZC1wYXJ0eSBsaWJyYXJpZXMgZm9yIE9TIFggaW5zdGFsbGVyczogeHogNS4wLjMgLT4gNS4wLjUsCisgIFNRTGl0ZSAzLjcuMTMgLT4gMy44LjEKKworLSBJc3N1ZSAjMTU2NjM6IFJldmVydCBPUyBYIGluc3RhbGxlciBidWlsdC1pbiBUY2wvVGsgc3VwcG9ydCBmb3IgMy40LjBiMS4KKyAgU29tZSB0aGlyZC1wYXJ0eSBwcm9qZWN0cywgc3VjaCBhcyBNYXRwbG90bGliIGFuZCBQSUwvUGlsbG93LAorICBkZXBlbmRlZCBvbiBiZWluZyBhYmxlIHRvIGJ1aWxkIHdpdGggVGNsIGFuZCBUayBmcmFtZXdvcmtzIGluCisgIC9MaWJyYXJ5L0ZyYW1ld29ya3MuCisKK1Rvb2xzL0RlbW9zCistLS0tLS0tLS0tLQorCistIElzc3VlICMxOTczMDogQXJndW1lbnQgQ2xpbmljIG5vdyBzdXBwb3J0cyBhbGwgdGhlIGV4aXN0aW5nIFB5QXJnCisgICJmb3JtYXQgdW5pdHMiIGFzIGxlZ2FjeSBjb252ZXJ0ZXJzLCBhcyB3ZWxsIGFzIHR3byBuZXcgZmVhdHVyZXM6CisgICJzZWxmIGNvbnZlcnRlcnMiIGFuZCB0aGUgInZlcnNpb24iIGRpcmVjdGl2ZS4KKworLSBJc3N1ZSAjMTk1NTI6IHB5dmVudiBub3cgYm9vdHN0cmFwcyBwaXAgaW50byB2aXJ0dWFsIGVudmlyb25tZW50cyBieQorICBkZWZhdWx0IChwYXNzIC0td2l0aG91dC1waXAgdG8gcmVxdWVzdCB0aGUgb2xkIGJlaGF2aW91cikKKworLSBJc3N1ZSAjMTkzOTA6IEFyZ3VtZW50IENsaW5pYyBubyBsb25nZXIgYWNjZXB0cyBtYWxmb3JtZWQgUHl0aG9uCisgIGFuZCBDIGlkcy4KKworCitXaGF0J3MgTmV3IGluIFB5dGhvbiAzLjQuMCBBbHBoYSA0PworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworUmVsZWFzZSBkYXRlOiAyMDEzLTEwLTIwCisKK0NvcmUgYW5kIEJ1aWx0aW5zCistLS0tLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxOTMwMTogR2l2ZSBjbGFzc2VzIGFuZCBmdW5jdGlvbnMgdGhhdCBhcmUgZXhwbGljaXRseSBtYXJrZWQgZ2xvYmFsIGEKKyAgZ2xvYmFsIHF1YWxuYW1lLgorCistIElzc3VlICMxOTI3OTogVVRGLTcgZGVjb2RlciBubyBsb25nZXIgcHJvZHVjZXMgaWxsZWdhbCBzdHJpbmdzLgorCistIElzc3VlICMxNjYxMjogQWRkICJBcmd1bWVudCBDbGluaWMiLCBhIGNvbXBpbGUtdGltZSBwcmVwcm9jZXNzb3IgZm9yCisgIEMgZmlsZXMgdG8gZ2VuZXJhdGUgYXJndW1lbnQgcGFyc2luZyBjb2RlLiAgKFNlZSBQRVAgNDM2LikKKworLSBJc3N1ZSAjMTg4MTA6IFNoaWZ0IHN0YXQgY2FsbHMgaW4gaW1wb3J0bGliLm1hY2hpbmVyeS5GaWxlRmluZGVyIHN1Y2ggdGhhdAorICB0aGUgY29kZSBpcyBvcHRpbWlzdGljIHRoYXQgaWYgc29tZXRoaW5nIGV4aXN0cyBpbiBhIGRpcmVjdG9yeSBuYW1lZCBleGFjdGx5CisgIGxpa2UgdGhlIHBvc3NpYmxlIHBhY2thZ2UgYmVpbmcgc2VhcmNoZWQgZm9yIHRoYXQgaXQncyBpbiBhY3R1YWxpdHkgYQorICBkaXJlY3RvcnkuCisKKy0gSXNzdWUgIzE4NDE2OiBpbXBvcnRsaWIubWFjaGluZXJ5LlBhdGhGaW5kZXIgbm93IHRyZWF0cyAnJyBhcyB0aGUgY3dkIGFuZAorICBpbXBvcnRsaWIubWFjaGluZXJ5LkZpbGVGaW5kZXIgbm8gbG9uZ2VyIHNwZWNpYWwtY2FzZXMgJycgdG8gJy4nLiBUaGlzIGxlYWRzCisgIHRvIG1vZHVsZXMgaW1wb3J0ZWQgZnJvbSBjd2QgdG8gbm93IHBvc3Nlc3MgYW4gYWJzb2x1dGUgZmlsZSBwYXRoIGZvcgorICBfX2ZpbGVfXyAodGhpcyBkb2VzIG5vdCBhZmZlY3QgbW9kdWxlcyBzcGVjaWZpZWQgYnkgcGF0aCBvbiB0aGUgQ0xJIGJ1dCBpdAorICBkb2VzIGFmZmVjdCAtbS9ydW5weSkuIEl0IGFsc28gYWxsb3dzIEZpbGVGaW5kZXIgdG8gYmUgbW9yZSBjb25zaXN0ZW50IGJ5IG5vdAorICBoYXZpbmcgYW4gZWRnZSBjYXNlLgorCistIElzc3VlICM0NTU1OiBBbGwgZXhwb3J0ZWQgQyBzeW1ib2xzIGFyZSBub3cgcHJlZml4ZWQgd2l0aCBlaXRoZXIKKyAgIlB5IiBvciAiX1B5Ii4KKworLSBJc3N1ZSAjMTkyMTk6IFNwZWVkIHVwIG1hcnNoYWwubG9hZHMoKSwgYW5kIG1ha2UgcHljIGZpbGVzIHNsaWdodGx5CisgICg1JSB0byAxMCUpIHNtYWxsZXIuCisKKy0gSXNzdWUgIzE5MjIxOiBVcGdyYWRlIFVuaWNvZGUgZGF0YWJhc2UgdG8gdmVyc2lvbiA2LjMuMC4KKworLSBJc3N1ZSAjMTY3NDI6IFRoZSByZXN1bHQgb2YgdGhlIEMgY2FsbGJhY2sgUHlPU19SZWFkbGluZUZ1bmN0aW9uUG9pbnRlciBtdXN0CisgIG5vdyBiZSBhIHN0cmluZyBhbGxvY2F0ZWQgYnkgUHlNZW1fUmF3TWFsbG9jKCkgb3IgUHlNZW1fUmF3UmVhbGxvYygpIChvciBOVUxMCisgIGlmIGFuIGVycm9yIG9jY3VycmVkKSwgaW5zdGVhZCBvZiBhIHN0cmluZyBhbGxvY2F0ZWQgYnkgUHlNZW1fTWFsbG9jKCkgb3IKKyAgUHlNZW1fUmVhbGxvYygpLgorCistIElzc3VlICMxOTE5OTogUmVtb3ZlIGBgUHlUaHJlYWRTdGF0ZS50aWNrX2NvdW50ZXJgYCBmaWVsZAorCistIEZpeCBtYWNybyBleHBhbnNpb24gb2YgX1B5RXJyX09DQ1VSUkVEKCksIGFuZCBtYWtlIHN1cmUgdG8gdXNlIGl0IGluIGF0CisgIGxlYXN0IG9uZSBwbGFjZSBzbyBhcyB0byBhdm9pZCByZWdyZXNzaW9ucy4KKworLSBJc3N1ZSAjMTkwODc6IEltcHJvdmUgYnl0ZWFycmF5IGFsbG9jYXRpb24gaW4gb3JkZXIgdG8gYWxsb3cgY2hlYXAgcG9wcGluZworICBvZiBkYXRhIGF0IHRoZSBmcm9udCAoc2xpY2UgZGVsZXRpb24pLgorCistIElzc3VlICMxOTAxNDogbWVtb3J5dmlldy5jYXN0KCkgaXMgbm93IGFsbG93ZWQgb24gemVyby1sZW5ndGggdmlld3MuCisKKy0gSXNzdWUgIzE4NjkwOiBtZW1vcnl2aWV3IGlzIG5vdyBhdXRvbWF0aWNhbGx5IHJlZ2lzdGVyZWQgd2l0aAorICBjb2xsZWN0aW9ucy5hYmMuU2VxdWVuY2UKKworLSBJc3N1ZSAjMTkwNzg6IG1lbW9yeXZpZXcgbm93IGNvcnJlY3RseSBzdXBwb3J0cyB0aGUgcmV2ZXJzZWQgYnVpbHRpbgorICAoUGF0Y2ggYnkgQ2xhdWRpdSBQb3BhKQorCitMaWJyYXJ5CistLS0tLS0tCisKKy0gSXNzdWUgIzE3NDU3OiB1bml0dGVzdCB0ZXN0IGRpc2NvdmVyeSBub3cgd29ya3Mgd2l0aCBuYW1lc3BhY2UgcGFja2FnZXMuCisgIFBhdGNoIGJ5IENsYXVkaXUgUG9wYS4KKwogLSBJc3N1ZSAjMTgyMzU6IEZpeCB0aGUgc3lzY29uZmlnIHZhcmlhYmxlcyBMRFNIQVJFRCBhbmQgQkxEU0hBUkVEIHVuZGVyIEFJWC4KICAgUGF0Y2ggYnkgRGF2aWQgRWRlbHNvaG4uCiAKKy0gSXNzdWUgIzE4NjA2OiBBZGQgdGhlIG5ldyAic3RhdGlzdGljcyIgbW9kdWxlIChQRVAgNDUwKS4gIENvbnRyaWJ1dGVkCisgIGJ5IFN0ZXZlbiBEJ0FwcmFuby4KKworLSBJc3N1ZSAjMTI4NjY6IFRoZSBhdWRpb29wIG1vZHVsZSBub3cgc3VwcG9ydHMgMjQtYml0IHNhbXBsZXMuCisKKy0gSXNzdWUgIzE5MjU0OiBQcm92aWRlIGFuIG9wdGltaXplZCBQeXRob24gaW1wbGVtZW50YXRpb24gb2YgcGJrZGYyX2htYWMuCisKKy0gSXNzdWVzICMxOTIwMSwgSXNzdWUgIzE5MjIyLCBJc3N1ZSAjMTkyMjM6IEFkZCAieCIgbW9kZSAoZXhjbHVzaXZlIGNyZWF0aW9uKQorICBpbiBvcGVuaW5nIGZpbGUgdG8gYnoyLCBnemlwIGFuZCBsem1hIG1vZHVsZXMuIFBhdGNoZXMgYnkgVGltIEhlYW5leSBhbmQKKyAgVmFqcmFza3kgS29rLgorCistIEZpeCBhIHJlZmVyZW5jZSBjb3VudCBsZWFrIGluIF9zcmUuCisKKy0gSXNzdWUgIzE5MjYyOiBJbml0aWFsIGNoZWNrIGluIG9mIHRoZSAnYXN5bmNpbycgcGFja2FnZSAoYS5rLmEuIFR1bGlwLAorICBhLmsuYS4gUEVQIDMxNTYpLiAgVGhlcmUgYXJlIG5vIGRvY3MgeWV0LCBhbmQgdGhlIFBFUCBpcyBzbGlnaHRseQorICBvdXQgb2YgZGF0ZSB3aXRoIHRoZSBjb2RlLiAgVGhpcyBtb2R1bGUgd2lsbCBoYXZlICpwcm92aXNpb25hbCogc3RhdHVzCisgIGluIFB5dGhvbiAzLjQuCisKIC0gSXNzdWUgIzE5Mjc2OiBGaXhlZCB0aGUgd2F2ZSBtb2R1bGUgb24gNjQtYml0IGJpZy1lbmRpYW4gcGxhdGZvcm1zLgogCistIElzc3VlICMxOTI2NjogUmVuYW1lIHRoZSBuZXctaW4tMy40IGBgY29udGV4dGxpYi5pZ25vcmVgYCBjb250ZXh0IG1hbmFnZXIKKyAgdG8gYGBjb250ZXh0bGliLnN1cHByZXNzYGAgaW4gb3JkZXIgdG8gYmUgbW9yZSBjb25zaXN0ZW50IHdpdGggZXhpc3RpbmcKKyAgZGVzY3JpcHRpb25zIG9mIHRoYXQgb3BlcmF0aW9uIGVsc2V3aGVyZSBpbiB0aGUgbGFuZ3VhZ2UgYW5kIHN0YW5kYXJkCisgIGxpYnJhcnkgZG9jdW1lbnRhdGlvbiAoUGF0Y2ggYnkgWmVybyBQaXJhZXVzKS4KKworLSBJc3N1ZSAjMTg4OTE6IENvbXBsZXRlZCB0aGUgbmV3IGVtYWlsIHBhY2thZ2UgKHByb3Zpc2lvbmFsKSBBUEkgYWRkaXRpb25zCisgIGJ5IGFkZGluZyBuZXcgY2xhc3NlcyBFbWFpbE1lc3NhZ2UsIE1JTUVQYXJ0LCBhbmQgQ29udGVudE1hbmFnZXIuCisKKy0gSXNzdWUgIzE4MjgxOiBVbnVzZWQgc3RhdCBjb25zdGFudHMgcmVtb3ZlZCBmcm9tIGB0YXJmaWxlYC4KKworLSBJc3N1ZSAjMTg5OTk6IE11bHRpcHJvY2Vzc2luZyBub3cgc3VwcG9ydHMgJ2NvbnRleHRzJyB3aXRoIHRoZSBzYW1lIEFQSQorICBhcyB0aGUgbW9kdWxlLCBidXQgYm91bmQgdG8gc3BlY2lmaWVkIHN0YXJ0IG1ldGhvZHMuCisKKy0gSXNzdWUgIzE4NDY4OiBUaGUgcmUuc3BsaXQsIHJlLmZpbmRhbGwsIGFuZCByZS5zdWIgZnVuY3Rpb25zIGFuZCB0aGUgZ3JvdXAoKQorICBhbmQgZ3JvdXBzKCkgbWV0aG9kcyBvZiBtYXRjaCBvYmplY3Qgbm93IGFsd2F5cyByZXR1cm4gYSBzdHJpbmcgb3IgYSBieXRlcworICBvYmplY3QuCisKKy0gSXNzdWUgIzE4NzI1OiBUaGUgdGV4dHdyYXAgbW9kdWxlIG5vdyBzdXBwb3J0cyB0cnVuY2F0aW5nIG11bHRpbGluZSB0ZXh0LgorCiAtIElzc3VlICMxODc3NjogYXRleGl0IGNhbGxiYWNrcyBub3cgZGlzcGxheSB0aGVpciBmdWxsIHRyYWNlYmFjayB3aGVuIHRoZXkKICAgcmFpc2UgYW4gZXhjZXB0aW9uLgogCiAtIElzc3VlICMxNzgyNzogQWRkIHRoZSBtaXNzaW5nIGRvY3VtZW50YXRpb24gZm9yIGBgY29kZWNzLmVuY29kZWBgIGFuZAogICBgYGNvZGVjcy5kZWNvZGVgYC4KIAotLSBJc3N1ZSAjMTg0NTg6IFByZXZlbnQgY3Jhc2hlcyB3aXRoIG5ld2VyIHZlcnNpb25zIG9mIGxpYmVkaXQuICBJdHMgcmVhZGxpbmUKLSAgZW11bGF0aW9uIGhhcyBjaGFuZ2VkIGZyb20gMC1iYXNlZCBpbmRleGluZyB0byAxLWJhc2VkIGxpa2UgZ251IHJlYWRsaW5lLgotICBPcmlnaW5hbCBwYXRjaCBieSBSb25hbGQgT3Vzc29yZW4uCistIElzc3VlICMxOTIxODogUmVuYW1lIGNvbGxlY3Rpb25zLmFiYyB0byBfY29sbGVjdGlvbnNfYWJjIGluIG9yZGVyIHRvCisgIHNwZWVkIHVwIGludGVycHJldGVyIHN0YXJ0LgogCi0tIElzc3VlICMxODkxOTogSWYgdGhlIGNsb3NlKCkgbWV0aG9kIG9mIGEgd3JpdGVyIGluIHRoZSBzdW5hdSBvciB3YXZlIG1vZHVsZQotICBmYWlsZWQsIHNlY29uZCBpbnZvY2F0aW9uIG9mIGNsb3NlKCkgYW5kIGRlc3RydWN0b3Igbm8gbW9yZSByYWlzZSBhbgotICBleGNlcHRpb24uCistIElzc3VlICMxODU4MjogQWRkICdwYmtkZjJfaG1hYycgdG8gdGhlIGhhc2hsaWIgbW9kdWxlLiBJdCBpbXBsZW1lbnRzIFBLQ1MjNQorICBwYXNzd29yZC1iYXNlZCBrZXkgZGVyaXZhdGlvbiBmdW5jdGlvbnMgd2l0aCBITUFDIGFzIHBzZXVkb3JhbmRvbSBmdW5jdGlvbi4KIAogLSBJc3N1ZSAjMTkxMzE6IFRoZSBhaWZjIG1vZHVsZSBub3cgY29ycmVjdGx5IHJlYWRzIGFuZCB3cml0ZXMgc2FtcHdpZHRoIG9mCiAgIGNvbXByZXNzZWQgc3RyZWFtcy4KIAotLSBJc3N1ZSAjMTkxNTg6ICBhIHJhcmUgcmFjZSBpbiBCb3VuZGVkU2VtYXBob3JlIGNvdWxkIGFsbG93IC5yZWxlYXNlKCkgdG9vCistIElzc3VlICMxOTIwOTogUmVtb3ZlIGltcG9ydCBvZiBjb3B5cmVnIGZyb20gdGhlIG9zIG1vZHVsZSB0byBzcGVlZCB1cAorICBpbnRlcnByZXRlciBzdGFydHVwLiBzdGF0X3Jlc3VsdCBhbmQgc3RhdHZmc19yZXN1bHQgYXJlIG5vdyBoYXJkLWNvZGVkIHRvCisgIHJlc2lkZSBpbiB0aGUgb3MgbW9kdWxlLgorCistIElzc3VlICMxOTIwNTogRG9uJ3QgaW1wb3J0IHRoZSAncmUnIG1vZHVsZSBpbiBzaXRlIGFuZCBzeXNjb25maWcgbW9kdWxlIHRvCisgIHNwZWVkIHVwIGludGVycHJldGVyIHN0YXJ0LgorCistIElzc3VlICM5NTQ4OiBBZGQgYSBtaW5pbWFsICJfYm9vdGxvY2FsZSIgbW9kdWxlIHRoYXQgaXMgaW1wb3J0ZWQgYnkgdGhlCisgIF9pbyBtb2R1bGUgaW5zdGVhZCBvZiB0aGUgZnVsbCBsb2NhbGUgbW9kdWxlLgorCistIElzc3VlICMxODc2NDogUmVtb3ZlIHRoZSAncHJpbnQnIGFsaWFzIGZvciB0aGUgUERCICdwJyBjb21tYW5kIHNvIHRoYXQgaXQgbm8KKyAgbG9uZ2VyIHNoYWRvd3MgdGhlIHByaW50IGZ1bmN0aW9uLgorCistIElzc3VlICMxOTE1ODogQSByYXJlIHJhY2UgaW4gQm91bmRlZFNlbWFwaG9yZSBjb3VsZCBhbGxvdyAucmVsZWFzZSgpIHRvbwogICBvZnRlbi4KIAotLSBJc3N1ZSAjMTgwMzc6IDJ0bzMgbm93IGVzY2FwZXMgJ1x1JyBhbmQgJ1xVJyBpbiBuYXRpdmUgc3RyaW5ncy4KKy0gSXNzdWUgIzE1ODA1OiBBZGQgY29udGV4dGxpYi5yZWRpcmVjdF9zdGRvdXQoKS4KKworLSBJc3N1ZSAjMTg3MTY6IERlcHJlY2F0ZSB0aGUgZm9ybWF0dGVyIG1vZHVsZS4KKworLSBJc3N1ZSAjMTA3MTI6IDJ0bzMgaGFzIGEgbmV3ICJhc3NlcnRzIiBmaXhlciB0aGF0IHJlcGxhY2VzIGRlcHJlY2F0ZWQgbmFtZXMKKyAgb2YgdW5pdHRlc3QgbWV0aG9kcyAoZS5nLiBmYWlsVW5sZXNzRXF1YWwgLT4gYXNzZXJ0RXF1YWwpLgorCistIElzc3VlICMxODAzNzogMnRvMyBub3cgZXNjYXBlcyBgYCdcdSdgYCBhbmQgYGAnXFUnYGAgaW4gbmF0aXZlIHN0cmluZ3MuCisKKy0gSXNzdWUgIzE3ODM5OiBiYXNlNjQuZGVjb2RlYnl0ZXMgYW5kIGJhc2U2NC5lbmNvZGVieXRlcyBub3cgYWNjZXB0IGFueQorICBvYmplY3QgdGhhdCBleHBvcnRzIGEgMSBkaW1lbnNpb25hbCBhcnJheSBvZiBieXRlcyAodGhpcyBtZWFucyB0aGUgc2FtZQorICBpcyBub3cgYWxzbyB0cnVlIGZvciBiYXNlNjRfY29kZWMpCisKKy0gSXNzdWUgIzE5MTMyOiBUaGUgcHByaW50IG1vZHVsZSBub3cgc3VwcG9ydHMgY29tcGFjdCBtb2RlLgogCiAtIElzc3VlICMxOTEzNzogVGhlIHBwcmludCBtb2R1bGUgbm93IGNvcnJlY3RseSBmb3JtYXRzIGluc3RhbmNlcyBvZiBzZXQgYW5kCiAgIGZyb3plbnNldCBzdWJjbGFzc2VzLgogCistIElzc3VlICMxMDA0MjogZnVuY3Rvb2xzLnRvdGFsX29yZGVyaW5nIG5vdyBjb3JyZWN0bHkgaGFuZGxlcworICBOb3RJbXBsZW1lbnRlZCBiZWluZyByZXR1cm5lZCBieSB0aGUgdW5kZXJseWluZyBjb21wYXJpc29uIGZ1bmN0aW9uIChQYXRjaAorICBieSBLYXRpZSBNaWxsZXIpCisKIC0gSXNzdWUgIzE5MDkyOiBjb250ZXh0bGliLkV4aXRTdGFjayBub3cgY29ycmVjdGx5IHJlcmFpc2VzIGV4Y2VwdGlvbnMKICAgZnJvbSB0aGUgX19leGl0X18gY2FsbGJhY2tzIG9mIGlubmVyIGNvbnRleHQgbWFuYWdlcnMgKFBhdGNoIGJ5IEhydm9qZQogICBOaWvFoWnEhykKQEAgLTkyOSwxNSArMzczMiw5MCBAQAogLSBJc3N1ZSAjMTI2NDE6IEF2b2lkIHBhc3NpbmcgIi1tbm8tY3lnd2luIiB0byB0aGUgbWluZ3czMiBjb21waWxlciwgZXhjZXB0CiAgIHdoZW4gbmVjZXNzYXJ5LiAgUGF0Y2ggYnkgT3NjYXIgQmVuamFtaW4uCiAKLS0gSXNzdWUgIzE4NTk0OiBUaGUgZmFzdCBwYXRoIGZvciBjb2xsZWN0aW9ucy5Db3VudGVyKCkgd2FzIG5ldmVyIHRha2VuCi0gIGR1ZSB0byBhbiBvdmVyLXJlc3RyaWN0aXZlIHR5cGUgY2hlY2suICBBbmQgdGhlIGZhbGxiYWNrIHBhdGggZGlkCi0gIG5vdCBpbXBsZW1lbnQgdGhlIHNhbWUgYWxnb3JpdGhtIGFzIHRoZSBwdXJlIHB5dGhvbiBjb2RlLgorLSBJc3N1ZSAjNTg0NTogSW4gc2l0ZS5weSwgb25seSBsb2FkIHJlYWRsaW5lIGhpc3RvcnkgZnJvbSB+Ly5weXRob25faGlzdG9yeQorICBpZiBubyBoaXN0b3J5IGhhcyBiZWVuIHJlYWQgYWxyZWFkeS4gIFRoaXMgYXZvaWRzIGRvdWJsZSB3cml0ZXMgdG8gdGhlCisgIGhpc3RvcnkgZmlsZSBhdCBzaHV0ZG93bi4KIAogLSBQcm9wZXJseSBpbml0aWFsaXplIGFsbCBmaWVsZHMgb2YgYSBTU0wgb2JqZWN0IGFmdGVyIGFsbG9jYXRpb24uCiAKKy0gSXNzdWUgIzE5MDk1OiBTU0xTb2NrZXQuZ2V0cGVlcmNlcnQoKSBub3cgcmFpc2VzIFZhbHVlRXJyb3Igd2hlbiB0aGUKKyAgU1NMIGhhbmRzaGFrZSBoYXNuJ3QgYmVlbiBkb25lLgorCiAtIElzc3VlICM0MzY2OiBGaXggYnVpbGRpbmcgZXh0ZW5zaW9ucyBvbiBhbGwgcGxhdGZvcm1zIHdoZW4gLS1lbmFibGUtc2hhcmVkCiAgIGlzIHVzZWQuCiAKKy0gSXNzdWUgIzE5MDMwOiBGaXhlZCBgaW5zcGVjdC5nZXRtZW1iZXJzYCBhbmQgYGluc3BlY3QuY2xhc3NpZnlfY2xhc3NfYXR0cnNgCisgIHRvIGF0dGVtcHQgYWN0aXZhdGluZyBkZXNjcmlwdG9ycyBiZWZvcmUgZmFsbGluZyBiYWNrIHRvIGEgX19kaWN0X18gc2VhcmNoCisgIGZvciBmYXVsdHkgZGVzY3JpcHRvcnMuICBgaW5zcGVjdC5jbGFzc2lmeV9jbGFzc19hdHRyc2Agbm8gbG9uZ2VyIHJldHVybnMKKyAgQXR0cmlidXRlcyB3aG9zZSBob21lIGNsYXNzIGlzIE5vbmUuCisKK0MgQVBJCistLS0tLQorCistIElzc3VlICMxNzcyNjczOiBUaGUgdHlwZSBvZiBgY2hhcipgIGFyZ3VtZW50cyBub3cgY2hhbmdlZCB0byBgY29uc3QgY2hhcipgLgorCistIElzc3VlICMxNjEyOTogQWRkZWQgYSBgUHlfU2V0U3RhbmRhcmRTdHJlYW1FbmNvZGluZ2AgcHJlLWluaXRpYWxpemF0aW9uIEFQSQorICB0byBhbGxvdyBlbWJlZGRpbmcgYXBwbGljYXRpb25zIGxpa2UgQmxlbmRlciB0byBmb3JjZSBhIHBhcnRpY3VsYXIKKyAgZW5jb2RpbmcgYW5kIGVycm9yIGhhbmRsZXIgZm9yIHRoZSBzdGFuZGFyZCBJTyBzdHJlYW1zIChpbml0aWFsIHBhdGNoIGJ5CisgIEJhc3RpZW4gTW9udGFnbmUpCisKK1Rlc3RzCistLS0tLQorCistIElzc3VlICMxOTI3NTogRml4IHRlc3Rfc2l0ZSBvbiBBTUQ2NCBTbm93IExlb3BhcmQKKworLSBJc3N1ZSAjMTQ0MDc6IEZpeCB1bml0dGVzdCB0ZXN0IGRpc2NvdmVyeSBpbiB0ZXN0X2NvbmN1cnJlbnRfZnV0dXJlcy4KKworLSBJc3N1ZSAjMTg5MTk6IFVuaWZpZWQgYW5kIGV4dGVuZGVkIHRlc3RzIGZvciBhdWRpbyBtb2R1bGVzOiBhaWZjLCBzdW5hdSBhbmQKKyAgd2F2ZS4KKworLSBJc3N1ZSAjMTg3MTQ6IEFkZGVkIHRlc3RzIGZvciBgYHBkYi5maW5kX2Z1bmN0aW9uKClgYC4KKworRG9jdW1lbnRhdGlvbgorLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxODc1ODogRml4ZWQgYW5kIGltcHJvdmVkIGNyb3NzLXJlZmVyZW5jZXMuCisKKy0gSXNzdWUgIzE4OTcyOiBNb2Rlcm5pemUgZW1haWwgZXhhbXBsZXMgYW5kIHVzZSB0aGUgYXJncGFyc2UgbW9kdWxlIGluIHRoZW0uCisKK0J1aWxkCistLS0tLQorCistIElzc3VlICMxOTEzMDogQ29ycmVjdCBQQ2J1aWxkL3JlYWRtZS50eHQsIFB5dGhvbiAzLjMgYW5kIDMuNCByZXF1aXJlIFZTIDIwMTAuCisKKy0gSXNzdWUgIzE1NjYzOiBVcGRhdGUgT1MgWCAxMC42KyBpbnN0YWxsZXIgdG8gdXNlIFRjbC9UayA4LjUuMTUuCisKKy0gSXNzdWUgIzE0NDk5OiBGaXggc2V2ZXJhbCBwcm9ibGVtcyB3aXRoIE9TIFggdW5pdmVyc2FsIGJ1aWxkIHN1cHBvcnQ6CisgICAgMS4gcHBjIGFyY2ggZGV0ZWN0aW9uIGZvciBleHRlbnNpb24gbW9kdWxlIGJ1aWxkcyBicm9rZSB3aXRoIFhjb2RlIDUKKyAgICAyLiBwcGMgYXJjaCBkZXRlY3Rpb24gaW4gY29uZmlndXJlIGRpZCBub3Qgd29yayBvbiBPUyBYIDEwLjQKKyAgICAzLiAtc3lzcm9vdCBhbmQgLWFyY2ggZmxhZ3Mgd2VyZSB1bm5lY2Vzc2FyaWx5IGR1cGxpY2F0ZWQKKyAgICA0LiB0aGVyZSB3YXMgbm8gb2J2aW91cyB3YXkgdG8gY29uZmlndXJlIGFuIGludGVsLTMyIG9ubHkgYnVpbGQuCisKKy0gSXNzdWUgIzE5MDE5OiBDaGFuZ2UgdGhlIE9TIFggaW5zdGFsbGVyIGJ1aWxkIHNjcmlwdCB0byB1c2UgQ0ZMQUdTIGluc3RlYWQKKyAgb2YgT1BUIGZvciBzcGVjaWFsIGJ1aWxkIG9wdGlvbnMuICBCeSBzZXR0aW5nIE9QVCwgc29tZSBjb21waWxlci1zcGVjaWZpYworICBvcHRpb25zIGxpa2UgLWZ3cmFwdiB3ZXJlIG92ZXJyaWRkZW4gYW5kIHRodXMgbm90IHVzZWQsIHdoaWNoIGNvdWxkIHJlc3VsdAorICBpbiBicm9rZW4gaW50ZXJwcmV0ZXJzIHdoZW4gYnVpbGRpbmcgd2l0aCBjbGFuZy4KKworCitXaGF0J3MgTmV3IGluIFB5dGhvbiAzLjQuMCBBbHBoYSAzPworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworUmVsZWFzZSBkYXRlOiAyMDEzLTA5LTI5CisKK0NvcmUgYW5kIEJ1aWx0aW5zCistLS0tLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxODgxODogVGhlICJlbmNvZGluZ25hbWUiIHBhcnQgb2YgUFlUSE9OSU9FTkNPRElORyBpcyBub3cgb3B0aW9uYWwuCisKKy0gSXNzdWUgIzE5MDk4OiBQcmV2ZW50IG92ZXJmbG93IGluIHRoZSBjb21waWxlciB3aGVuIHRoZSByZWN1cnNpb24gbGltaXQgaXMgc2V0CisgIGFic3VyZGx5IGhpZ2guCisKK0xpYnJhcnkKKy0tLS0tLS0KKworLSBJc3N1ZSAjMTg5Mjk6IGBpbnNwZWN0LmNsYXNzaWZ5X2NsYXNzX2F0dHJzKClgIG5vdyBjb3JyZWN0bHkgZmluZHMgY2xhc3MKKyAgYXR0cmlidXRlcyByZXR1cm5lZCBieSBgZGlyKClgIHRoYXQgYXJlIGxvY2F0ZWQgaW4gdGhlIG1ldGFjbGFzcy4KKwogLSBJc3N1ZSAjMTg5NTA6IEZpeCBtaXNjZWxsYW5lb3VzIGJ1Z3MgaW4gdGhlIHN1bmF1IG1vZHVsZS4KICAgQXVfcmVhZC5yZWFkZnJhbWVzKCkgbm93IHVwZGF0ZXMgY3VycmVudCBmaWxlIHBvc2l0aW9uIGFuZCByZWFkcyBjb3JyZWN0CiAgIG51bWJlciBvZiBmcmFtZXMgZnJvbSBtdWx0aWNoYW5uZWwgc3RyZWFtLiAgQXVfd3JpdGUud3JpdGVmcmFtZXNyYXcoKSBub3cKQEAgLTk0NSwxNyArMzgyMywyOSBAQAogICBpbnRlZ2VyIChhcyBpbiBQeXRob24gMikuICBBdV9yZWFkIGFuZCBBdV93cml0ZSBub3cgY29ycmVjdGx5IHdvcmtzIHdpdGggZmlsZQogICBvYmplY3QgaWYgc3RhcnQgZmlsZSBwb3NpdGlvbiBpcyBub3QgYSB6ZXJvLgogCistIElzc3VlICMxODU5NDogVGhlIGZhc3QgcGF0aCBmb3IgY29sbGVjdGlvbnMuQ291bnRlcigpIHdhcyBuZXZlciB0YWtlbgorICBkdWUgdG8gYW4gb3Zlci1yZXN0cmljdGl2ZSB0eXBlIGNoZWNrLgorCiAtIElzc3VlICMxOTA1MzogWmlwRXh0RmlsZS5yZWFkMSgpIHdpdGggbm9uLXplcm8gYXJndW1lbnQgbm8gbW9yZSByZXR1cm5zIGVtcHR5CiAgIGJ5dGVzIHVudGlsIGVuZCBvZiBkYXRhLgogCi0tIElzc3VlICMxOTAyODogRml4ZWQgdGtpbnRlci5Ua2FwcC5tZXJnZSgpIGZvciBub24tc3RyaW5nIGFyZ3VtZW50cy4KKy0gbG9nZ2luZzogYWRkZWQgc3VwcG9ydCBmb3IgVW5peCBkb21haW4gc29ja2V0cyB0byBTb2NrZXRIYW5kbGVyIGFuZAorICBEYXRhZ3JhbUhhbmRsZXIuCisKKy0gSXNzdWUgIzE4OTk2OiBUZXN0Q2FzZS5hc3NlcnRFcXVhbCgpIG5vdyBtb3JlIGNsZXZlcmx5IHNob3J0ZW4gZGlmZmVyaW5nCisgIHN0cmluZ3MgaW4gZXJyb3IgcmVwb3J0LgorCistIElzc3VlICMxOTAzNDogcmVwcigpIGZvciB0a2ludGVyLlRjbF9PYmogbm93IGV4cG9zZXMgc3RyaW5nIHJlcGVyZXNlbnRhdGlvbi4KKworLSBJc3N1ZSAjMTg5Nzg6IGBgdXJsbGliLnJlcXVlc3QuUmVxdWVzdGBgIG5vdyBhbGxvd3MgdGhlIG1ldGhvZCB0byBiZQorICBpbmRpY2F0ZWQgb24gdGhlIGNsYXNzIGFuZCBubyBsb25nZXIgc2V0cyBpdCB0byBOb25lIGluIGBgX19pbml0X19gYC4KKworLSBJc3N1ZSAjMTg2MjY6IHRoZSBpbnNwZWN0IG1vZHVsZSBub3cgb2ZmZXJzIGEgYmFzaWMgY29tbWFuZCBsaW5lCisgIGludHJvc3BlY3Rpb24gaW50ZXJmYWNlIChJbml0aWFsIHBhdGNoIGJ5IENsYXVkaXUgUG9wYSkKIAogLSBJc3N1ZSAjMzAxNTogRml4ZWQgdGtpbnRlciB3aXRoIHdhbnRvYmplY3Q9RmFsc2UuICBBbnkgVGNsIGNvbW1hbmQgY2FsbAogICByZXR1cm5lZCBlbXB0eSBzdHJpbmcuCiAKLS0gSXNzdWUgIzE4MDUwOiBGaXhlZCBhbiBpbmNvbXBhdGliaWxpdHkgb2YgdGhlIHJlIG1vZHVsZSB3aXRoIFB5dGhvbiAzLjMuMAotICBiaW5hcmllcy4KLQogLSBJc3N1ZSAjMTkwMzc6IFRoZSBtYWlsYm94IG1vZHVsZSBub3cgbWFrZXMgYWxsIGNoYW5nZXMgdG8gbWFpbGRpciBmaWxlcwogICBiZWZvcmUgbW92aW5nIHRoZW0gaW50byBwbGFjZSwgdG8gYXZvaWQgcmFjZSBjb25kaXRpb25zIHdpdGggb3RoZXIgcHJvZ3JhbXMKICAgdGhhdCBtYXkgYmUgYWNjZXNzaW5nIHRoZSBtYWlsZGlyIGRpcmVjdG9yeS4KQEAgLTk2OSw0MiArMzg1OSwxODEgQEAKIC0gSXNzdWUgIzE4ODczOiBUaGUgdG9rZW5pemUgbW9kdWxlIG5vdyBkZXRlY3RzIFB5dGhvbiBzb3VyY2UgY29kZSBlbmNvZGluZwogICBvbmx5IGluIGNvbW1lbnQgbGluZXMuCiAKKy0gSXNzdWUgIzE3NzY0OiBFbmFibGUgaHR0cC5zZXJ2ZXIgdG8gYmluZCB0byBhIHVzZXIgc3BlY2lmaWVkIG5ldHdvcmsKKyAgaW50ZXJmYWNlLiAgUGF0Y2ggY29udHJpYnV0ZWQgYnkgTWFsdGUgU3dhcnQuCisKKy0gSXNzdWUgIzE4OTM3OiBBZGQgYW4gYXNzZXJ0TG9ncygpIGNvbnRleHQgbWFuYWdlciB0byB1bml0dGVzdC5UZXN0Q2FzZQorICB0byBlbnN1cmUgdGhhdCBhIGJsb2NrIG9mIGNvZGUgZW1pdHMgYSBtZXNzYWdlIHVzaW5nIHRoZSBsb2dnaW5nIG1vZHVsZS4KKwogLSBJc3N1ZSAjMTczMjQ6IEZpeCBodHRwLnNlcnZlcidzIHJlcXVlc3QgaGFuZGxpbmcgY2FzZSBvbiB0cmFpbGluZyAnLycuIFBhdGNoCiAgIGNvbnRyaWJ1dGVkIGJ5IFZhanJhc2t5IEtvay4KIAogLSBJc3N1ZSAjMTkwMTg6IFRoZSBoZWFwcS5tZXJnZSgpIGZ1bmN0aW9uIG5vIGxvbmdlciBzdXBwcmVzc2VzIEluZGV4RXJyb3IKICAgaW4gdGhlIHVuZGVybHlpbmcgaXRlcmFibGVzLgogCi0tIElzc3VlICMxODc4NDogVGhlIHV1aWQgbW9kdWxlIG5vIG1vcmUgYXR0ZW1wdHMgdG8gbG9hZCBsaWJjIHZpYSBjdHlwZXMuQ0RMTCwKLSAgaWYgYWxsIG5lY2Vzc2FyeSBmdW5jdGlvbnMgYXJlIGFscmVhZHkgZm91bmQgaW4gbGlidXVpZC4KLSAgUGF0Y2ggYnkgRXZnZW55IFNvbG9ndWJvdi4KKy0gSXNzdWUgIzE4Nzg0OiBUaGUgdXVpZCBtb2R1bGUgbm8gbG9uZ2VyIGF0dGVtcHRzIHRvIGxvYWQgbGliYyB2aWEgY3R5cGVzLkNETEwKKyAgaWYgYWxsIHRoZSBuZWNlc3NhcnkgZnVuY3Rpb25zIGhhdmUgYWxyZWFkeSBiZWVuIGZvdW5kIGluIGxpYnV1aWQuICBQYXRjaCBieQorICBFdmdlbnkgU29sb2d1Ym92LgorCistIFRoZSA6ZW52dmFyOmBQWVRIT05GQVVMVEhBTkRMRVJgIGVudmlyb25tZW50IHZhcmlhYmxlIG5vdyBvbmx5IGVuYWJsZXMgdGhlCisgIGZhdWx0aGFuZGxlciBtb2R1bGUgaWYgdGhlIHZhcmlhYmxlIGlzIG5vbi1lbXB0eS4gU2FtZSBiZWhhdmlvdXIgdGhhbiBvdGhlcgorICB2YXJpYWJsZXMgbGlrZSA6ZW52dmFyOmBQWVRIT05ET05UV1JJVEVCWVRFQ09ERWAuCisKKy0gSXNzdWUgIzE1NjU1MjU6IE5ldyBmdW5jdGlvbiBgYHRyYWNlYmFjay5jbGVhcl9mcmFtZXNgYCB3aWxsIGNsZWFyCisgIHRoZSBsb2NhbCB2YXJpYWJsZXMgb2YgYWxsIHRoZSBzdGFjayBmcmFtZXMgcmVmZXJlbmNlZCBieSBhIHRyYWNlYmFjaworICBvYmplY3QuCisKK1Rlc3RzCistLS0tLQorCistIElzc3VlICMxODk1MjogRml4IHJlZ3Jlc3Npb24gaW4gc3VwcG9ydCBkYXRhIGRvd25sb2FkcyBpbnRyb2R1Y2VkIHdoZW4KKyAgdGVzdC5zdXBwb3J0IHdhcyBjb252ZXJ0ZWQgdG8gYSBwYWNrYWdlLiBSZWdyZXNzaW9uIG5vdGljZWQgYnkgWmFjaGFyeQorICBXYXJlLgorCitJRExFCistLS0tCisKKy0gSXNzdWUgIzE4ODczOiBJRExFIG5vdyBkZXRlY3RzIFB5dGhvbiBzb3VyY2UgY29kZSBlbmNvZGluZyBvbmx5IGluIGNvbW1lbnQKKyAgbGluZXMuCisKKy0gSXNzdWUgIzE4OTg4OiBUaGUgIlRhYiIga2V5IG5vdyB3b3JrcyB3aGVuIGEgd29yZCBpcyBhbHJlYWR5IGF1dG9jb21wbGV0ZWQuCisKK0RvY3VtZW50YXRpb24KKy0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTcwMDM6IFVuaWZpZWQgdGhlIHNpemUgYXJndW1lbnQgbmFtZXMgaW4gdGhlIGlvIG1vZHVsZSB3aXRoIGNvbW1vbgorICBwcmFjdGljZS4KKworQnVpbGQKKy0tLS0tCisKKy0gSXNzdWUgIzE4NTk2OiBTdXBwb3J0IHRoZSB1c2Ugb2YgYWRkcmVzcyBzYW5pdHkgY2hlY2tpbmcgaW4gcmVjZW50IHZlcnNpb25zCisgIG9mIGNsYW5nIGFuZCBHQ0MgYnkgYXBwcm9wcmlhdGVseSBtYXJraW5nIGtub3duIGZhbHNlIGFsYXJtcyBpbiB0aGUgc21hbGwKKyAgb2JqZWN0IGFsbG9jYXRvci4gUGF0Y2ggY29udHJpYnV0ZWQgYnkgRGhpcnUgS2hvbGlhLgorCitUb29scy9EZW1vcworLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTg4NzM6IDJ0bzMgYW5kIHRoZSBmaW5kbm9jb2RpbmcucHkgc2NyaXB0IG5vdyBkZXRlY3QgUHl0aG9uIHNvdXJjZQorICBjb2RlIGVuY29kaW5nIG9ubHkgaW4gY29tbWVudCBsaW5lcy4KKworCitXaGF0J3MgTmV3IGluIFB5dGhvbiAzLjQuMCBBbHBoYSAyPworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworUmVsZWFzZSBkYXRlOiAyMDEzLTA5LTA5CisKK0NvcmUgYW5kIEJ1aWx0aW5zCistLS0tLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxODk0Mjogc3lzLl9kZWJ1Z21hbGxvY3N0YXRzKCkgb3V0cHV0IHdhcyBkYW1hZ2VkIG9uIFdpbmRvd3MuCisKKy0gSXNzdWUgIzE4NTcxOiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgUEVQIDQ0NjogZmlsZSBkZXNjcmlwdG9ycyBhbmQgZmlsZQorICBoYW5kbGVzIGFyZSBub3cgY3JlYXRlZCBub24taW5oZXJpdGFibGU7IGFkZCBmdW5jdGlvbnMKKyAgb3MuZ2V0L3NldF9pbmhlcml0YWJsZSgpLCBvcy5nZXQvc2V0X2hhbmRsZV9pbmhlcml0YWJsZSgpIGFuZAorICBzb2NrZXQuc29ja2V0LmdldC9zZXRfaW5oZXJpdGFibGUoKS4KKworLSBJc3N1ZSAjMTE2MTk6IFRoZSBwYXJzZXIgYW5kIHRoZSBpbXBvcnQgbWFjaGluZXJ5IGRvIG5vdCBlbmNvZGUgVW5pY29kZQorICBmaWxlbmFtZXMgYW55bW9yZSBvbiBXaW5kb3dzLgorCistIElzc3VlICMxODgwODogTm9uLWRhZW1vbiB0aHJlYWRzIGFyZSBub3cgYXV0b21hdGljYWxseSBqb2luZWQgd2hlbgorICBhIHN1Yi1pbnRlcnByZXRlciBpcyBzaHV0ZG93biAoaXQgd291bGQgcHJldmlvdXNseSBkdW1wIGEgZmF0YWwgZXJyb3IpLgorCistIFJlbW92ZSBzdXBwb3J0IGZvciBjb21waWxpbmcgb24gc3lzdGVtcyB3aXRob3V0IGdldGN3ZCgpLgorCistIElzc3VlICMxODc3NDogUmVtb3ZlIGxhc3QgYml0cyBvZiBHTlUgUFRIIHRocmVhZCBjb2RlIGFuZCB0aHJlYWRfcHRoLmguCisKKy0gSXNzdWUgIzE4NzcxOiBBZGQgb3B0aW1pemF0aW9uIHRvIHNldCBvYmplY3QgbG9va3VwcyB0byByZWR1Y2UgdGhlIGNvc3QKKyAgb2YgaGFzaCBjb2xsaXNpb25zLiAgVGhlIGNvcmUgaWRlYSBpcyB0byBpbnNwZWN0IGEgc2Vjb25kIGtleS9oYXNoIHBhaXIKKyAgZm9yIGVhY2ggY2FjaGUgbGluZSByZXRyaWV2ZWQuCisKKy0gSXNzdWUgIzE2MTA1OiBXaGVuIGEgc2lnbmFsIGhhbmRsZXIgZmFpbHMgdG8gd3JpdGUgdG8gdGhlIGZpbGUgZGVzY3JpcHRvcgorICByZWdpc3RlcmVkIHdpdGggYGBzaWduYWwuc2V0X3dha2V1cF9mZCgpYGAsIHJlcG9ydCBhbiBleGNlcHRpb24gaW5zdGVhZAorICBvZiBpZ25vcmluZyB0aGUgZXJyb3IuCisKKy0gSXNzdWUgIzE4NzIyOiBSZW1vdmUgdXNlcyBvZiB0aGUgInJlZ2lzdGVyIiBrZXl3b3JkIGluIEMgY29kZS4KKworLSBJc3N1ZSAjMTg2Njc6IEFkZCBtaXNzaW5nICJIQVZFX0ZDSE9XTkFUIiBzeW1ib2wgdG8gcG9zaXguX2hhdmVfZnVuY3Rpb25zLgorCistIElzc3VlICMxNjQ5OTogQWRkIGNvbW1hbmQgbGluZSBvcHRpb24gZm9yIGlzb2xhdGVkIG1vZGUuCisKKy0gSXNzdWUgIzE1MzAxOiBQYXJzaW5nIGZkLCB1aWQsIGFuZCBnaWQgcGFyYW1ldGVycyBmb3IgYnVpbHRpbnMKKyAgaW4gTW9kdWxlcy9wb3NpeG1vZHVsZS5jIGlzIG5vdyBmYXIgbW9yZSByb2J1c3QuCisKKy0gSXNzdWUgIzE4MzY4OiBQeU9TX1N0ZGlvUmVhZGxpbmUoKSBubyBsb25nZXIgbGVha3MgbWVtb3J5IHdoZW4gcmVhbGxvYygpCisgIGZhaWwuCisKKy0gSXNzdWUgIzE3OTM0OiBBZGQgYSBjbGVhcigpIG1ldGhvZCB0byBmcmFtZSBvYmplY3RzLCB0byBoZWxwIGNsZWFuIHVwCisgIGV4cGVuc2l2ZSBkZXRhaWxzIChsb2NhbCB2YXJpYWJsZXMpIGFuZCBicmVhayByZWZlcmVuY2UgY3ljbGVzLgorCistIElzc3VlICMxODc4MDogJS1mb3JtYXR0aW5nIGNvZGVzICVkLCAlaSwgYW5kICV1IG5vdyB0cmVhdCBpbnQtc3ViY2xhc3NlcworICBhcyBpbnQgKGRpc3BsYXlzIHZhbHVlIG9mIGludC1zdWJjbGFzcyBpbnN0ZWFkIG9mIHN0cihpbnQtc3ViY2xhc3MpICkuCisKK0xpYnJhcnkKKy0tLS0tLS0KKworLSBJc3N1ZSAjMTg4MDg6IFRocmVhZC5qb2luKCkgbm93IHdhaXRzIGZvciB0aGUgdW5kZXJseWluZyB0aHJlYWQgc3RhdGUgdG8KKyAgYmUgZGVzdHJveWVkIGJlZm9yZSByZXR1cm5pbmcuICBUaGlzIHByZXZlbnRzIHVucHJlZGljdGFibGUgYWJvcnRzIGluCisgIFB5X0VuZEludGVycHJldGVyKCkgd2hlbiBzb21lIG5vbi1kYWVtb24gdGhyZWFkcyBhcmUgc3RpbGwgcnVubmluZy4KKworLSBJc3N1ZSAjMTg0NTg6IFByZXZlbnQgY3Jhc2hlcyB3aXRoIG5ld2VyIHZlcnNpb25zIG9mIGxpYmVkaXQuICBJdHMgcmVhZGxpbmUKKyAgZW11bGF0aW9uIGhhcyBjaGFuZ2VkIGZyb20gMC1iYXNlZCBpbmRleGluZyB0byAxLWJhc2VkIGxpa2UgZ251IHJlYWRsaW5lLgorCistIElzc3VlICMxODg1MjogSGFuZGxlIGNhc2Ugb2YgYGByZWFkbGluZS5fX2RvY19fYGAgYmVpbmcgYGBOb25lYGAgaW4gdGhlIG5ldworICByZWFkbGluZSBhY3RpdmF0aW9uIGNvZGUgaW4gYGBzaXRlLnB5YGAuCiAKIC0gSXNzdWUgIzE4NjcyOiBGaXhlZCBmb3JtYXQgc3BlY2lmaWVycyBmb3IgUHlfc3NpemVfdCBpbiBkZWJ1Z2dpbmcgb3V0cHV0IGluCiAgIHRoZSBfc3JlIG1vZHVsZS4KIAotLSBJc3N1ZSAjMTg4MzA6IGluc3BlY3QuZ2V0Y2xhc3N0cmVlKCkgbm8gbW9yZSBwcm9kdWNlcyBkdXBsaWNhdGVkIGVudHJpZXMgZXZlbgorLSBJc3N1ZSAjMTg4MzA6IGluc3BlY3QuZ2V0Y2xhc3N0cmVlKCkgbm8gbG9uZ2VyIHByb2R1Y2VzIGR1cGxpY2F0ZSBlbnRyaWVzIGV2ZW4KICAgd2hlbiBpbnB1dCBsaXN0IGNvbnRhaW5zIGR1cGxpY2F0ZXMuCiAKKy0gSXNzdWUgIzE4ODc4OiBzdW5hdS5vcGVuIG5vdyBzdXBwb3J0cyB0aGUgY29udGV4dCBtYW5hZ2VtZW50IHByb3RvY29sLiAgQmFzZWQgb24KKyAgcGF0Y2hlcyBieSBDbGF1ZGl1IFBvcGEgYW5kIFIuIERhdmlkIE11cnJheS4KKwogLSBJc3N1ZSAjMTg5MDk6IEZpeCBfdGtpbnRlci50a2FwcC5pbnRlcnBhZGRyKCkgb24gV2luZG93cyA2NC1iaXQsIGRvbid0IGNhc3QKICAgNjQtYml0IHBvaW50ZXIgdG8gbG9uZyAoMzIgYml0cykuCiAKIC0gSXNzdWUgIzE4ODc2OiBUaGUgRmlsZUlPLm1vZGUgYXR0cmlidXRlIG5vdyBiZXR0ZXIgcmVmbGVjdHMgdGhlIGFjdHVhbCBtb2RlCiAgIHVuZGVyIHdoaWNoIHRoZSBmaWxlIHdhcyBvcGVuZWQuICBQYXRjaCBieSBFcmlrIEJyYXkuCiAKKy0gSXNzdWUgIzE2ODUzOiBBZGQgbmV3IHNlbGVjdG9ycyBtb2R1bGUuCisKKy0gSXNzdWUgIzE4ODgyOiBBZGQgdGhyZWFkaW5nLm1haW5fdGhyZWFkKCkgZnVuY3Rpb24uCisKKy0gSXNzdWUgIzE4OTAxOiBUaGUgc3VuYXUgZ2V0cGFyYW1zIG1ldGhvZCBub3cgcmV0dXJucyBhIG5hbWVkdHVwbGUgcmF0aGVyIHRoYW4KKyAgYSBwbGFpbiB0dXBsZS4gIFBhdGNoIGJ5IENsYXVkaXUgUG9wYS4KKworLSBJc3N1ZSAjMTc0ODc6IFRoZSByZXN1bHQgb2YgdGhlIHdhdmUgZ2V0cGFyYW1zIG1ldGhvZCBub3cgaXMgcGlja2xlYWJsZSBhZ2Fpbi4KKyAgUGF0Y2ggYnkgQ2xhdWRpdSBQb3BhLgorCistIElzc3VlICMxODc1Njogb3MudXJhbmRvbSgpIG5vdyB1c2VzIGEgbGF6aWx5LW9wZW5lZCBwZXJzaXN0ZW50IGZpbGUKKyAgZGVzY3JpcHRvciwgc28gYXMgdG8gYXZvaWQgdXNpbmcgbWFueSBmaWxlIGRlc2NyaXB0b3JzIHdoZW4gcnVuIGluCisgIHBhcmFsbGVsIGZyb20gbXVsdGlwbGUgdGhyZWFkcy4KKwogLSBJc3N1ZSAjMTg0MTg6IEFmdGVyIGZvcmsoKSwgcmVpbml0IGFsbCB0aHJlYWRzIHN0YXRlcywgbm90IG9ubHkgYWN0aXZlIG9uZXMuCiAgIFBhdGNoIGJ5IEEuIEplc3NlIEppcnl1IERhdmlzLgogCistIElzc3VlICMxNzk3NDogU3dpdGNoIHVuaXR0ZXN0IGZyb20gdXNpbmcgZ2V0b3B0IHRvIHVzaW5nIGFyZ3BhcnNlLgorCistIElzc3VlICMxMTc5ODogVGVzdFN1aXRlIG5vdyBkcm9wcyByZWZlcmVuY2VzIHRvIG93biB0ZXN0cyBhZnRlciBleGVjdXRpb24uCisKIC0gSXNzdWUgIzE2NjExOiBodHRwLmNvb2tpZSBub3cgY29ycmVjdGx5IHBhcnNlcyB0aGUgJ3NlY3VyZScgYW5kICdodHRwb25seScKICAgY29va2llIGZsYWdzLgogCiAtIElzc3VlICMxMTk3MzogRml4IGEgcHJvYmxlbSBpbiBrZXZlbnQuIFRoZSBmbGFncyBhbmQgZmZsYWdzIGZpZWxkcyBhcmUgbm93CiAgIHByb3Blcmx5IGhhbmRsZWQgYXMgdW5zaWduZWQuCiAKLS0gSXNzdWUgIzE3NzAyOiBPbiBlcnJvciwgb3MuZW52aXJvbmIgbm93IHJlbW92ZXMgc3VwcHJlc3MgdGhlIGV4Y2VwdCBjb250ZXh0Ci0gIHdoZW4gcmFpc2luZyBhIG5ldyBLZXlFcnJvciB3aXRoIHRoZSBvcmlnaW5hbCBrZXkuCistIElzc3VlICMxODgwNzogYGBweXZlbnZgYCBub3cgdGFrZXMgYSAtLWNvcGllcyBhcmd1bWVudCBhbGxvd2luZyBjb3BpZXMKKyAgaW5zdGVhZCBvZiBzeW1saW5rcyBldmVuIHdoZXJlIHN5bWxpbmtzIGFyZSBhdmFpbGFibGUgYW5kIHRoZSBkZWZhdWx0LgogCi0tIElzc3VlICMxODc1NTogRml4ZWQgdGhlIGxvYWRlciB1c2VkIGluIGltcCB0byBhbGxvdyBnZXRfZGF0YSgpIHRvIGJlIGNhbGxlZAotICBtdWx0aXBsZSB0aW1lcy4KKy0gSXNzdWUgIzE4NTM4OiBgYHB5dGhvbiAtbSBkaXNgYCBub3cgdXNlcyBhcmdwYXJzZSBmb3IgYXJndW1lbnQgcHJvY2Vzc2luZy4KKyAgUGF0Y2ggYnkgTWljaGVsZSBPcnLDuS4KKworLSBJc3N1ZSAjMTgzOTQ6IENsb3NlIGNnaS5GaWVsZFN0b3JhZ2UncyBvcHRpb25hbCBmaWxlLgorCistIElzc3VlICMxNzcwMjogT24gZXJyb3IsIG9zLmVudmlyb25iIG5vdyBzdXBwcmVzc2VzIHRoZSBleGNlcHRpb24gY29udGV4dAorICB3aGVuIHJhaXNpbmcgYSBuZXcgS2V5RXJyb3Igd2l0aCB0aGUgb3JpZ2luYWwga2V5LgogCiAtIElzc3VlICMxNjgwOTogRml4ZWQgc29tZSB0a2ludGVyIGluY29tcGFiaWxpdGllcyB3aXRoIFRjbC9UayA4LjYuCiAKQEAgLTEwMTQsNiArNDA0Myw5IEBACiAtIElzc3VlICMxODMyNDogc2V0X3BheWxvYWQgbm93IGNvcnJlY3RseSBoYW5kbGVzIGJpbmFyeSBpbnB1dC4gIFRoaXMgYWxzbwogICBzdXBlcnNlZGVzIHRoZSBwcmV2aW91cyBmaXhlcyBmb3IgIzE0MzYwLCAjMTcxNywgYW5kICMxNjU2NC4KIAorLSBJc3N1ZSAjMTg3OTQ6IEFkZCBhIGZpbGVubygpIG1ldGhvZCBhbmQgYSBjbG9zZWQgYXR0cmlidXRlIHRvIHNlbGVjdC5kZXZwb2xsCisgIG9iamVjdHMuCisKIC0gSXNzdWUgIzE3MTE5OiBGaXhlZCBpbnRlZ2VyIG92ZXJmbG93cyB3aGVuIHByb2Nlc3NpbmcgbGFyZ2Ugc3RyaW5ncyBhbmQgdHVwbGVzCiAgIGluIHRoZSB0a2ludGVyIG1vZHVsZS4KIApAQCAtMTAyNCw5ICs0MDU2LDYgQEAKIC0gSXNzdWUgIzg4NjU6IENvbmN1cnJlbnQgaW52b2NhdGlvbiBvZiBzZWxlY3QucG9sbC5wb2xsKCkgbm93IHJhaXNlcyBhCiAgIFJ1bnRpbWVFcnJvciBleGNlcHRpb24uICBQYXRjaCBieSBDaHJpc3RpYW4gU2NodWJlcnQuCiAKLS0gSXNzdWUgIzEzNDYxOiBGaXggYSBjcmFzaCBpbiB0aGUgVGV4dElPV3JhcHBlci50ZWxsIG1ldGhvZCBvbiA2NC1iaXQKLSAgcGxhdGZvcm1zLiAgUGF0Y2ggYnkgWW9nZXNoIENoYXVkaGFyaS4KLQogLSBJc3N1ZSAjMTg3Nzc6IFRoZSBzc2wgbW9kdWxlIG5vdyB1c2VzIHRoZSBuZXcgQ1JZUFRPX1RIUkVBRElEIEFQSSBvZgogICBPcGVuU1NMIDEuMC4wKyBpbnN0ZWFkIG9mIHRoZSBkZXByZWNhdGVkIENSWVBUTyBpZCBjYWxsYmFjayBmdW5jdGlvbi4KIApAQCAtMTA0MSw1MCArNDA3MCw2MTIgQEAKICAgc3RyaW5ncyBmb3IgYGByZmM4MjJOYW1lYGAgKGVtYWlsKSwgYGBkTlNOYW1lYGAgKEROUykgYW5kCiAgIGBgdW5pZm9ybVJlc291cmNlSWRlbnRpZmllcmBgIChVUkkpLgogCistIElzc3VlICMxODcwMTogUmVtb3ZlIHN1cHBvcnQgb2Ygb2xkIENQeXRob24gdmVyc2lvbnMgKDwzLjApIGZyb20gQyBjb2RlLgorCiAtIElzc3VlICMxODc1NjogSW1wcm92ZSBlcnJvciByZXBvcnRpbmcgaW4gb3MudXJhbmRvbSgpIHdoZW4gdGhlIGZhaWx1cmUKICAgaXMgZHVlIHRvIHNvbWV0aGluZyBlbHNlIHRoYW4gL2Rldi91cmFuZG9tIG5vdCBleGlzdGluZyAoZm9yIGV4YW1wbGUsCiAgIGV4aGF1c3RpbmcgdGhlIGZpbGUgZGVzY3JpcHRvciBsaW1pdCkuCiAKKy0gSXNzdWUgIzE4NjczOiBBZGQgT19UTVBGSUxFIHRvIG9zIG1vZHVsZS4gT19UTVBGSUxFIHJlcXVpcmVzIExpbnV4IGtlcm5lbAorICAzLjExIG9yIG5ld2VyLiBJdCdzIG9ubHkgZGVmaW5lZCBvbiBzeXN0ZW0gd2l0aCAzLjExIHVhcGkgaGVhZGVycywgdG9vLgorCistIElzc3VlICMxODUzMjogQ2hhbmdlIHRoZSBidWlsdGluIGhhc2ggYWxnb3JpdGhtcycgbmFtZXMgdG8gbG93ZXIgY2FzZSBuYW1lcworICBhcyBwcm9taXNlZCBieSBoYXNobGliJ3MgZG9jdW1lbnRhdGlvbi4KKworLSBJc3N1ZSAjODcxMzogYWRkIG5ldyBzcHdhbiBhbmQgZm9ya3NlcnZlciBzdGFydCBtZXRob2RzLCBhbmQgbmV3IGZ1bmN0aW9ucworICBnZXRfYWxsX3N0YXJ0X21ldGhvZHMsIGdldF9zdGFydF9tZXRob2QsIGFuZCBzZXRfc3RhcnRfbWV0aG9kLCB0bworICBtdWx0aXByb2Nlc3NpbmcuCisKIC0gSXNzdWUgIzE4NDA1OiBJbXByb3ZlIHRoZSBlbnRyb3B5IG9mIGNyeXB0Lm1rc2FsdCgpLgogCistIElzc3VlICMxMjAxNTogVGhlIHRlbXBmaWxlIG1vZHVsZSBub3cgdXNlcyBhIHN1ZmZpeCBvZiA4IHJhbmRvbSBjaGFyYWN0ZXJzCisgIGluc3RlYWQgb2YgNiwgdG8gcmVkdWNlIHRoZSByaXNrIG9mIGZpbGVuYW1lIGNvbGxpc2lvbi4gVGhlIGVudHJvcHkgd2FzCisgIHJlZHVjZWQgd2hlbiB1cHBlcmNhc2UgbGV0dGVycyB3ZXJlIHJlbW92ZWQgZnJvbSB0aGUgY2hhcnNldCB1c2VkIHRvIGdlbmVyYXRlCisgIHJhbmRvbSBjaGFyYWN0ZXJzLgorCistIElzc3VlICMxODU4NTogQWRkIDpmdW5jOmB0ZXh0d3JhcC5zaG9ydGVuYCB0byBjb2xsYXBzZSBhbmQgdHJ1bmNhdGUgYQorICBwaWVjZSBvZiB0ZXh0IHRvIGEgZ2l2ZW4gbGVuZ3RoLgorCistIElzc3VlICMxODU5ODogVHdlYWsgZXhjZXB0aW9uIG1lc3NhZ2UgZm9yIGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKCkgdG8KKyAgaW5jbHVkZSB0aGUgbW9kdWxlIG5hbWUgd2hlbiBhIGtleSBhcmd1bWVudCBpcyBtaXNzaW5nLgorCiAtIElzc3VlICMxOTE1MTogRml4IGRvY3N0cmluZyBhbmQgdXNlIG9mIF9nZXRfc3VwcG9ydGVkX2ZpbGVfbG9hZGVycygpIHRvCiAgIHJlZmxlY3QgMi10dXBsZXMuCiAKKy0gSXNzdWUgIzE5MTUyOiBBZGQgRXh0ZW5zaW9uRmlsZUxvYWRlci5nZXRfZmlsZW5hbWUoKS4KKwogLSBJc3N1ZSAjMTg2NzY6IENoYW5nZSAncG9zaXRpdmUnIHRvICdub24tbmVnYXRpdmUnIGluIHF1ZXVlLnB5IHB1dCBhbmQgZ2V0CiAgIGRvY3N0cmluZ3MgYW5kIFZhbHVlRXJyb3IgbWVzc2FnZXMuIFBhdGNoIGJ5IFpob25neXVlIEx1bwogCi0tIElzc3VlICMxODY4MTogRml4IGEgTmFtZUVycm9yIGluIGltcC5yZWxvYWQoKSAobm90aWNlZCBieSBXZWl6aGFvIExpKS4KKy0gRml4IHJlZmNvdW50aW5nIGlzc3VlIHdpdGggZXh0ZW5zaW9uIHR5cGVzIGluIHRraW50ZXIuCiAKIC0gSXNzdWUgIzgxMTI6IHhsbXJwYy5zZXJ2ZXIncyBEb2NYTUxSUENTZXJ2ZXIgc2VydmVyIG5vIGxvbmdlciByYWlzZXMgYW4gZXJyb3IKICAgaWYgbWV0aG9kcyBoYXZlIGFubm90YXRpb25zOyBpdCBub3cgY29ycmVjdGx5IGRpc3BsYXlzIHRoZSBhbm5vdGF0aW9ucy4KIAorLSBJc3N1ZSAjMTg2MDA6IEFkZGVkIHBvbGljeSBhcmd1bWVudCB0byBlbWFpbC5tZXNzYWdlLk1lc3NhZ2UuYXNfc3RyaW5nLAorICBhbmQgYXNfYnl0ZXMgYW5kIF9fYnl0ZXNfXyBtZXRob2RzIHRvIE1lc3NhZ2UuCisKKy0gSXNzdWUgIzE4NjcxOiBPdXRwdXQgbW9yZSBpbmZvcm1hdGlvbiB3aGVuIGxvZ2dpbmcgZXhjZXB0aW9ucyBvY2N1ci4KKworLSBJc3N1ZSAjMTg2MjE6IFByZXZlbnQgdGhlIHNpdGUgbW9kdWxlJ3MgcGF0Y2hlZCBidWlsdGlucyBmcm9tIGtlZXBpbmcKKyAgdG9vIG1hbnkgcmVmZXJlbmNlcyBhbGl2ZSBmb3IgdG9vIGxvbmcuCisKKy0gSXNzdWUgIzQ4ODU6IEFkZCB3ZWFrcmVmIHN1cHBvcnQgdG8gbW1hcCBvYmplY3RzLiAgUGF0Y2ggYnkgVmFsZXJpZSBMYW1iZXJ0LgorCistIElzc3VlICM4ODYwOiBGaXhlZCByb3VuZGluZyBpbiB0aW1lZGVsdGEgY29uc3RydWN0b3IuCisKKy0gSXNzdWUgIzE4ODQ5OiBGaXhlZCBhIFdpbmRvd3Mtc3BlY2lmaWMgdGVtcGZpbGUgYnVnIHdoZXJlIGNvbGxpc2lvbiB3aXRoIGFuCisgIGV4aXN0aW5nIGRpcmVjdG9yeSBjYXVzZWQgbWtzdGVtcCBhbmQgcmVsYXRlZCBBUElzIHRvIGZhaWwgaW5zdGVhZCBvZgorICByZXRyeWluZy4gUmVwb3J0IGFuZCBmaXggYnkgVmxhZCBTaGNoZXJiaW5hLgorCistIElzc3VlICMxODkyMDogYXJncGFyc2UncyBkZWZhdWx0IGRlc3RpbmF0aW9uIGZvciB0aGUgdmVyc2lvbiBhY3Rpb24gKC12LAorICAtLXZlcnNpb24pIGhhcyBhbHNvIGJlZW4gY2hhbmdlZCB0byBzdGRvdXQsIHRvIG1hdGNoIHRoZSBQeXRob24gZXhlY3V0YWJsZS4KKworVGVzdHMKKy0tLS0tCisKKy0gSXNzdWUgIzE4NjIzOiBGYWN0b3Igb3V0IHRoZSBfU3VwcHJlc3NDb3JlRmlsZXMgY29udGV4dCBtYW5hZ2VyIGludG8KKyAgdGVzdC5zdXBwb3J0LiAgUGF0Y2ggYnkgVmFsZXJpZSBMYW1iZXJ0LgorCistIElzc3VlICMxMjAzNzogRml4IHRlc3RfZW1haWwgZm9yIGRlc2t0b3AgV2luZG93cy4KKworLSBJc3N1ZSAjMTU1MDc6IHRlc3Rfc3VicHJvY2VzcydzIHRlc3Rfc2VuZF9zaWduYWwgY291bGQgZmFpbCBpZiB0aGUgdGVzdAorICBydW5uZXIgd2VyZSBydW4gaW4gYW4gZW52aXJvbm1lbnQgd2hlcmUgdGhlIHByb2Nlc3MgaW5oZXJpdGVkIGFuIGlnbm9yZQorICBzZXR0aW5nIGZvciBTSUdJTlQuICBSZXN0b3JlIHRoZSBTSUdJTlQgaGFuZGxlciB0byB0aGUgZGVzaXJlZAorICBLZXlib2FyZEludGVycnVwdCByYWlzaW5nIG9uZSBkdXJpbmcgdGhhdCB0ZXN0LgorCistIElzc3VlICMxNjc5OTogU3dpdGNoZWQgZnJvbSBnZXRvcHQgdG8gYXJncGFyc2Ugc3R5bGUgaW4gcmVncnRlc3QncyBhcmd1bWVudAorICBwYXJzaW5nLiAgQWRkZWQgbW9yZSB0ZXN0cyBmb3IgcmVncnRlc3QncyBhcmd1bWVudCBwYXJzaW5nLgorCistIElzc3VlICMxODc5MjogVXNlICIxMjcuMC4wLjEiIG9yICI6OjEiIGluc3RlYWQgb2YgImxvY2FsaG9zdCIgYXMgbXVjaCBhcworICBwb3NzaWJsZSwgc2luY2UgImxvY2FsaG9zdCIgZ29lcyB0aHJvdWdoIGEgRE5TIGxvb2t1cCB1bmRlciByZWNlbnQgV2luZG93cworICB2ZXJzaW9ucy4KKworSURMRQorLS0tLQorCistIElzc3VlICMxODQ4OTogQWRkIHRlc3RzIGZvciBTZWFyY2hFbmdpbmUuIE9yaWdpbmFsIHBhdGNoIGJ5IFBoaWwgV2Vic3Rlci4KKworRG9jdW1lbnRhdGlvbgorLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxODc0MzogRml4IHJlZmVyZW5jZXMgdG8gbm9uLWV4aXN0YW50ICJTdHJpbmdJTyIgbW9kdWxlLgorCistIElzc3VlICMxODc4MzogUmVtb3ZlZCBleGlzdGluZyBtZW50aW9ucyBvZiBQeXRob24gbG9uZyB0eXBlIGluIGRvY3N0cmluZ3MsCisgIGVycm9yIG1lc3NhZ2VzIGFuZCBjb21tZW50cy4KKworQnVpbGQKKy0tLS0tCisKKy0gSXNzdWUgIzE1ODQ6IFByb3ZpZGUgY29uZmlndXJlIG9wdGlvbnMgdG8gb3ZlcnJpZGUgZGVmYXVsdCBzZWFyY2ggcGF0aHMgZm9yCisgIFRjbCBhbmQgVGsgd2hlbiBidWlsZGluZyBfdGtpbnRlci4KKworLSBJc3N1ZSAjMTU2NjM6IFRjbC9UayA4LjUuMTQgaXMgbm93IGluY2x1ZGVkIHdpdGggdGhlIE9TIFggMTAuNisgNjQtLzMyLWJpdAorICBpbnN0YWxsZXIuICBJdCBpcyBubyBsb25nZXIgbmVjZXNzYXJ5IHRvIGluc3RhbGwgYSB0aGlyZC1wYXJ0eSB2ZXJzaW9uIG9mCisgIFRjbC9UayA4LjUgdG8gd29yayBhcm91bmQgdGhlIHByb2JsZW1zIGluIHRoZSBBcHBsZS1zdXBwbGllZCBUY2wvVGsgOC41CisgIHNoaXBwZWQgaW4gT1MgWCAxMC42IGFuZCBsYXRlciByZWxlYXNlcy4KKworVG9vbHMvRGVtb3MKKy0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzE4OTIyOiBOb3cgVGhlIExpYi9zbXRwZC5weSBhbmQgVG9vbHMvaTE4bi9tc2dmbXQucHkgc2NyaXB0cyB3cml0ZQorICB0aGVpciB2ZXJzaW9uIHN0cmluZ3MgdG8gc3Rkb3V0LCBhbmQgbm90IHRvIHNkZXJyLgorCisKK1doYXQncyBOZXcgaW4gUHl0aG9uIDMuNC4wIEFscGhhIDE/Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitSZWxlYXNlIGRhdGU6IDIwMTMtMDgtMDMKKworQ29yZSBhbmQgQnVpbHRpbnMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzE2NzQxOiBGaXggYW4gZXJyb3IgcmVwb3J0aW5nIGluIGludCgpLgorCistIElzc3VlICMxNzg5OTogRml4IHJhcmUgZmlsZSBkZXNjcmlwdG9yIGxlYWsgaW4gb3MubGlzdGRpcigpLgorCistIElzc3VlICMxMDI0MTogQ2xlYXIgZXh0ZW5zaW9uIG1vZHVsZSBkaWN0IGNvcGllcyBhdCBpbnRlcnByZXRlciBzaHV0ZG93bi4KKyAgUGF0Y2ggYnkgTmVpbCBTY2hlbWVuYXVlciwgbWluaW1hbGx5IG1vZGlmaWVkLgorCistIElzc3VlICM5MDM1OiBpc21vdW50IG5vdyByZWNvZ25pc2VzIHZvbHVtZXMgbW91bnRlZCBiZWxvdyBhIGRyaXZlIHJvb3QKKyAgb24gV2luZG93cy4gT3JpZ2luYWwgcGF0Y2ggYnkgQXRzdW8gSXNoaW1vdG8uCisKKy0gSXNzdWUgIzE4MjE0OiBJbXByb3ZlIGZpbmFsaXphdGlvbiBvZiBQeXRob24gbW9kdWxlcyB0byBhdm9pZCBzZXR0aW5nCisgIHRoZWlyIGdsb2JhbHMgdG8gTm9uZSwgaW4gbW9zdCBjYXNlcy4KKworLSBJc3N1ZSAjMTgxMTI6IFBFUCA0NDIgaW1wbGVtZW50YXRpb24gKHNhZmUgb2JqZWN0IGZpbmFsaXphdGlvbikuCisKKy0gSXNzdWUgIzE4NTUyOiBDaGVjayByZXR1cm4gdmFsdWUgb2YgUHlBcmVuYV9BZGRQeU9iamVjdCgpIGluCisgIG9iajJhc3Rfb2JqZWN0KCkuCisKKy0gSXNzdWUgIzE4NTYwOiBGaXggcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBzdW0oKS4KKworLSBJc3N1ZSAjMTg1MjA6IEFkZCBhIG5ldyBQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlMigpIGZ1bmN0aW9uLCBzYW1lIHRoYW4KKyAgUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZSgpIGV4Y2VwdCB0aGF0IGl0IGhhcyBhIHJldHVybiB2YWx1ZSAoMCBvbiBzdWNjZXNzLAorICAtMSBvbiBlcnJvcikuCisKKy0gSXNzdWUgIzE1OTA1OiBGaXggdGhlb3JldGljYWwgYnVmZmVyIG92ZXJmbG93IGluIGhhbmRsaW5nIG9mIHN5cy5hcmd2WzBdLAorICBwcmVmaXggYW5kIGV4ZWNfcHJlZml4IGlmIHRoZSBvcGVyYXRpb24gc3lzdGVtIGRvZXMgbm90IG9iZXkgTUFYUEFUSExFTi4KKworLSBJc3N1ZSAjMTg0MDg6IEZpeCBtYW55IHZhcmlvdXMgYnVncyBpbiBjb2RlIGhhbmRsaW5nIGVycm9ycywgZXNwZWNpYWxseQorICBvbiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlIChNZW1vcnlFcnJvcikuCisKKy0gSXNzdWUgIzE4MzQ0OiBGaXggcG90ZW50aWFsIHJlZi1sZWFrcyBpbiBfYnVmZmVyZWRyZWFkZXJfcmVhZF9hbGwoKS4KKworLSBJc3N1ZSAjMTgzNDI6IFVzZSB0aGUgcmVwciBvZiBhIG1vZHVsZSBuYW1lIHdoZW4gYW4gaW1wb3J0IGZhaWxzIHdoZW4gdXNpbmcKKyAgYGBmcm9tIC4uLiBpbXBvcnQgLi4uYGAuCisKKy0gSXNzdWUgIzE3ODcyOiBGaXggYSBzZWdmYXVsdCBpbiBtYXJzaGFsLmxvYWQoKSB3aGVuIGlucHV0IHN0cmVhbSByZXR1cm5zCisgIG1vcmUgYnl0ZXMgdGhhbiByZXF1ZXN0ZWQuCisKKy0gSXNzdWUgIzE4MzM4OiBgcHl0aG9uIC0tdmVyc2lvbmAgbm93IHByaW50cyB2ZXJzaW9uIHN0cmluZyB0byBzdGRvdXQsIGFuZAorICBub3QgdG8gc3RkZXJyLiAgUGF0Y2ggYnkgQmVya2VyIFBla3NhZyBhbmQgTWljaGFlbCBEaWNrZW5zLgorCistIElzc3VlICMxODQyNjogRml4IE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBDIGV4dGVuc2lvbiBpbXBvcnQgd2hlbgorICBQeU1vZHVsZV9HZXREZWYoKSByZXR1cm5zIGFuIGVycm9yLgorCistIElzc3VlICMxNzIwNjogT24gV2luZG93cywgaW5jcmVhc2UgdGhlIHN0YWNrIHNpemUgZnJvbSAyIE1CIHRvIDQuMiBNQiB0byBmaXgKKyAgYSBzdGFjayBvdmVyZmxvdyBpbiB0aGUgbWFyc2hhbCBtb2R1bGUgKGZpeCBhIGNyYXNoIGluIHRlc3RfbWFyc2hhbCkuCisgIFBhdGNoIHdyaXR0ZW4gYnkgSmVyZW15IEtsb3RoLgorCistIElzc3VlICMzMzI5OiBJbXBsZW1lbnQgdGhlIFBFUCA0NDU6IEFkZCBuZXcgQVBJcyB0byBjdXN0b21pemUgUHl0aG9uIG1lbW9yeQorICBhbGxvY2F0b3JzLgorCistIElzc3VlICMxODMyODogUmVvcmRlciBvcHMgaW4gUHlUaHJlYWRTdGF0ZV9EZWxldGUqKCkgZnVuY3Rpb25zLiBOb3cgdGhlCisgIHRzdGF0ZSBpcyBmaXJzdCByZW1vdmVkIGZyb20gVExTIGFuZCB0aGVuIGRlYWxsb2NhdGVkLgorCistIElzc3VlICMxMzQ4MzogVXNlIFZpcnR1YWxBbGxvYyBpbiBvYm1hbGxvYyBvbiBXaW5kb3dzLgorCistIElzc3VlICMxODE4NDogUHlVbmljb2RlX0Zyb21Gb3JtYXQoKSBhbmQgUHlVbmljb2RlX0Zyb21Gb3JtYXRWKCkgbm93IHJhaXNlCisgIE92ZXJmbG93RXJyb3Igd2hlbiBhbiBhcmd1bWVudCBvZiAlYyBmb3JtYXQgaXMgb3V0IG9mIHJhbmdlLgorCistIElzc3VlICMxODExMTogVGhlIG1pbigpIGFuZCBtYXgoKSBmdW5jdGlvbnMgbm93IHN1cHBvcnQgYSBkZWZhdWx0IGFyZ3VtZW50CisgIHRvIGJlIHJldHVybmVkIGluc3RlYWQgb2YgcmFpc2luZyBhIFZhbHVlRXJyb3Igb24gYW4gZW1wdHkgc2VxdWVuY2UuCisgIChDb250cmlidXRlZCBieSBKdWxpYW4gQmVybWFuLikKKworLSBJc3N1ZSAjMTgxMzc6IERldGVjdCBpbnRlZ2VyIG92ZXJmbG93IG9uIHByZWNpc2lvbiBpbiBmbG9hdC5fX2Zvcm1hdF9fKCkKKyAgYW5kIGNvbXBsZXguX19mb3JtYXRfXygpLgorCistIElzc3VlICMxODE4MzogRml4IHZhcmlvdXMgdW5pY29kZSBvcGVyYXRpb25zIG9uIHN0cmluZ3Mgd2l0aCBsYXJnZSB1bmljb2RlCisgIGNvZGVwb2ludHMuCisKKy0gSXNzdWUgIzE4MTgwOiBGaXggcmVmIGxlYWsgaW4gX1B5SW1wb3J0X0dldER5bkxvYWRXaW5kb3dzKCkuCisKKy0gSXNzdWUgIzE4MDM4OiBTeW50YXhFcnJvciByYWlzZWQgZHVyaW5nIGNvbXBpbGF0aW9uIHNvdXJjZXMgd2l0aCBpbGxlZ2FsCisgIGVuY29kaW5nIG5vdyBhbHdheXMgY29udGFpbnMgYW4gZW5jb2RpbmcgbmFtZS4KKworLSBJc3N1ZSAjMTc5MzE6IFJlc29sdmUgY29uZnVzaW9uIG9uIFdpbmRvd3MgYmV0d2VlbiBwaWRzIGFuZCBwcm9jZXNzCisgIGhhbmRsZXMuCisKKy0gVHdlYWsgdGhlIGV4Y2VwdGlvbiBtZXNzYWdlIHdoZW4gdGhlIG1hZ2ljIG51bWJlciBvciBzaXplIHZhbHVlIGluIGEgYnl0ZWNvZGUKKyAgZmlsZSBpcyB0cnVuY2F0ZWQuCisKKy0gSXNzdWUgIzE3OTMyOiBGaXggYW4gaW50ZWdlciBvdmVyZmxvdyBpc3N1ZSBvbiBXaW5kb3dzIDY0LWJpdCBpbiBpdGVyYXRvcnM6CisgIGNoYW5nZSB0aGUgQyB0eXBlIG9mIHNlcWl0ZXJvYmplY3QuaXRfaW5kZXggZnJvbSBsb25nIHRvIFB5X3NzaXplX3QuCisKKy0gSXNzdWUgIzE4MDY1OiBEb24ndCBzZXQgX19wYXRoX18gdG8gdGhlIHBhY2thZ2UgbmFtZSBmb3IgZnJvemVuIHBhY2thZ2VzLgorCistIElzc3VlICMxODA4ODogV2hlbiByZWxvYWRpbmcgYSBtb2R1bGUsIHVuY29uZGl0aW9uYWxseSByZXNldCBhbGwgcmVsZXZhbnQKKyAgYXR0cmlidXRlcyBvbiB0aGUgbW9kdWxlIChlLmcuIF9fbmFtZV9fLCBfX2xvYWRlcl9fLCBfX3BhY2thZ2VfXywgX19maWxlX18sCisgIF9fY2FjaGVkX18pLgorCistIElzc3VlICMxNzkzNzogVHJ5IGhhcmRlciB0byBjb2xsZWN0IGN5Y2xpYyBnYXJiYWdlIGF0IHNodXRkb3duLgorCistIElzc3VlICMxMjM3MDogUHJldmVudCBjbGFzcyBib2RpZXMgZnJvbSBpbnRlcmZlcmluZyB3aXRoIHRoZSBfX2NsYXNzX18KKyAgY2xvc3VyZS4KKworLSBJc3N1ZSAjMTc2NDQ6IEZpeCBhIGNyYXNoIGluIHN0ci5mb3JtYXQgd2hlbiBjdXJseSBicmFjZXMgYXJlIHVzZWQgaW4gc3F1YXJlCisgIGJyYWNrZXRzLgorCistIElzc3VlICMxNzIzNzogRml4IGNyYXNoIGluIHRoZSBBU0NJSSBkZWNvZGVyIG9uIG02OGsuCisKKy0gSXNzdWUgIzE3OTI3OiBGcmFtZSBvYmplY3RzIGtlcHQgYXJndW1lbnRzIGFsaXZlIGlmIHRoZXkgaGFkIGJlZW4KKyAgY29waWVkIGludG8gYSBjZWxsLCBldmVuIGlmIHRoZSBjZWxsIHdhcyBjbGVhcmVkLgorCistIElzc3VlICMxNTQ1NDYzOiBBdCBzaHV0ZG93biwgZGVmZXIgZmluYWxpemF0aW9uIG9mIGNvZGVjIG1vZHVsZXMgc28KKyAgdGhhdCBzdGRlcnIgcmVtYWlucyB1c2FibGUuCisKKy0gSXNzdWUgIzczMzA6IEltcGxlbWVudCB3aWR0aCBhbmQgcHJlY2lzaW9uIChleDogIiU1LjNzIikgZm9yIHRoZSBmb3JtYXQKKyAgc3RyaW5nIG9mIFB5VW5pY29kZV9Gcm9tRm9ybWF0KCkgZnVuY3Rpb24sIG9yaWdpbmFsIHBhdGNoIHdyaXR0ZW4gYnkgWXNqIFJheS4KKworLSBJc3N1ZSAjMTU0NTQ2MzogR2xvYmFsIHZhcmlhYmxlcyBjYXVnaHQgaW4gcmVmZXJlbmNlIGN5Y2xlcyBhcmUgbm93CisgIGdhcmJhZ2UtY29sbGVjdGVkIGF0IHNodXRkb3duLgorCistIElzc3VlICMxNzA5NDogQ2xlYXIgc3RhbGUgdGhyZWFkIHN0YXRlcyBhZnRlciBmb3JrKCkuICBOb3RlIHRoYXQgdGhpcworICBpcyBhIHBvdGVudGlhbGx5IGRpc3J1cHRpdmUgY2hhbmdlIHNpbmNlIGl0IG1heSByZWxlYXNlIHNvbWUgc3lzdGVtCisgIHJlc291cmNlcyB3aGljaCB3b3VsZCBvdGhlcndpc2UgcmVtYWluIHBlcnBldHVhbGx5IGFsaXZlIChlLmcuIGRhdGFiYXNlCisgIGNvbm5lY3Rpb25zIGtlcHQgaW4gdGhyZWFkLWxvY2FsIHN0b3JhZ2UpLgorCistIElzc3VlICMxNzQwODogQXZvaWQgdXNpbmcgYW4gb2Jzb2xldGUgaW5zdGFuY2Ugb2YgdGhlIGNvcHlyZWcgbW9kdWxlIHdoZW4KKyAgdGhlIGludGVycHJldGVyIGlzIHNodXRkb3duIGFuZCB0aGVuIHN0YXJ0ZWQgYWdhaW4uCisKKy0gSXNzdWUgIzU4NDU6IEVuYWJsZSB0YWItY29tcGxldGlvbiBpbiB0aGUgaW50ZXJhY3RpdmUgaW50ZXJwcmV0ZXIgYnkKKyAgZGVmYXVsdCwgdGhhbmtzIHRvIGEgbmV3IHN5cy5fX2ludGVyYWN0aXZlaG9va19fLgorCistIElzc3VlICMxNzExNSwxNzExNjogTW9kdWxlIGluaXRpYWxpemF0aW9uIG5vdyBpbmNsdWRlcyBzZXR0aW5nIF9fcGFja2FnZV9fIGFuZAorICBfX2xvYWRlcl9fIGF0dHJpYnV0ZXMgdG8gTm9uZS4KKworLSBJc3N1ZSAjMTc4NTM6IEVuc3VyZSBsb2NhbHMgb2YgYSBjbGFzcyB0aGF0IHNoYWRvdyBmcmVlIHZhcmlhYmxlcyBhbHdheXMgd2luCisgIG92ZXIgdGhlIGNsb3N1cmVzLgorCistIElzc3VlICMxNzg2MzogSW4gdGhlIGludGVyYWN0aXZlIGNvbnNvbGUsIGRvbid0IGxvb3AgZm9yZXZlciBpZiB0aGUgZW5jb2RpbmcKKyAgY2FuJ3QgYmUgZmV0Y2hlZCBmcm9tIHN0ZGluLgorCistIElzc3VlICMxNzg2NzogUmFpc2UgYW4gSW1wb3J0RXJyb3IgaWYgX19pbXBvcnRfXyBpcyBub3QgZm91bmQgaW4gX19idWlsdGluc19fLgorCistIElzc3VlICMxODY5ODogRW5zdXJlIGltcG9ydGxpYi5yZWxvYWQoKSByZXR1cm5zIHRoZSBtb2R1bGUgb3V0IG9mIHN5cy5tb2R1bGVzLgorCistIElzc3VlICMxNzg1NzogUHJldmVudCBidWlsZCBmYWlsdXJlcyB3aXRoIHByZS0zLjUuMCB2ZXJzaW9ucyBvZiBzcWxpdGUzLAorICBzdWNoIGFzIHdhcyBzaGlwcGVkIHdpdGggQ2VudG9zIDUgYW5kIE1hYyBPUyBYIDEwLjQuCisKKy0gSXNzdWUgIzE3NDEzOiBzeXMuc2V0dHJhY2UgY2FsbGJhY2tzIHdlcmUgYmVpbmcgcGFzc2VkIGEgc3RyaW5nIGluc3RlYWQgb2YgYW4KKyAgZXhjZXB0aW9uIGluc3RhbmNlIGZvciB0aGUgJ3ZhbHVlJyBlbGVtZW50IG9mIHRoZSBhcmcgdHVwbGUgaWYgdGhlIGV4Y2VwdGlvbgorICBvcmlnaW5hdGVkIGZyb20gQyBjb2RlOyBub3cgYW4gZXhjZXB0aW9uIGluc3RhbmNlIGlzIGFsd2F5cyBwcm92aWRlZC4KKworLSBJc3N1ZSAjMTc3ODI6IEZpeCB1bmRlZmluZWQgYmVoYXZpb3VyIG9uIHBsYXRmb3JtcyB3aGVyZQorICBgYHN0cnVjdCB0aW1lc3BlY2BgJ3MgInR2X25zZWMiIG1lbWJlciBpcyBub3QgYSBDIGxvbmcuCisKKy0gSXNzdWUgIzE3NzIyOiBXaGVuIGxvb2tpbmcgdXAgX19yb3VuZF9fLCByZXNvbHZlIGRlc2NyaXB0b3JzLgorCistIElzc3VlICMxNjA2MTogU3BlZWQgdXAgc3RyLnJlcGxhY2UoKSBmb3IgcmVwbGFjaW5nIDEtY2hhcmFjdGVyIHN0cmluZ3MuCisKKy0gSXNzdWUgIzE3NzE1OiBGaXggc2VnbWVudGF0aW9uIGZhdWx0IGZyb20gcmFpc2luZyBhbiBleGNlcHRpb24gaW4gYSBfX3RydW5jX18KKyAgbWV0aG9kLgorCistIElzc3VlICMxNzY0MzogQWRkIF9fY2FsbGJhY2tfXyBhdHRyaWJ1dGUgdG8gd2Vha3JlZi5yZWYuCisKKy0gSXNzdWUgIzE2NDQ3OiBGaXhlZCBwb3RlbnRpYWwgc2VnbWVudGF0aW9uIGZhdWx0IHdoZW4gc2V0dGluZyBfX25hbWVfXyBvbiBhCisgIGNsYXNzLgorCistIElzc3VlICMxNzY2OTogRml4IGNyYXNoIGludm9sdmluZyBmaW5hbGl6YXRpb24gb2YgZ2VuZXJhdG9ycyB1c2luZyB5aWVsZCBmcm9tLgorCistIElzc3VlICMxNDQzOTogUHl0aG9uIG5vdyBwcmludHMgdGhlIHRyYWNlYmFjayBvbiBydW5weSBmYWlsdXJlIGF0IHN0YXJ0dXAuCisKKy0gSXNzdWUgIzE3NDY5OiBGaXggX1B5X0dldEFsbG9jYXRlZEJsb2NrcygpIGFuZCBzeXMuZ2V0YWxsb2NhdGVkYmxvY2tzKCkKKyAgd2hlbiBydW5uaW5nIG9uIHZhbGdyaW5kLgorCistIElzc3VlICMxNzYxOTogTWFrZSBpbnB1dCgpIGNoZWNrIGZvciBDdHJsLUMgY29ycmVjdGx5IG9uIFdpbmRvd3MuCisKKy0gSXNzdWUgIzE3MzU3OiBBZGQgbWlzc2luZyB2ZXJib3NpdHkgbWVzc2FnZXMgZm9yIC12Ly12diB0aGF0IHdlcmUgbG9zdCBkdXJpbmcKKyAgdGhlIGltcG9ydGxpYiB0cmFuc2l0aW9uLgorCistIElzc3VlICMxNzYxMDogRG9uJ3QgcmVseSBvbiBub24tc3RhbmRhcmQgYmVoYXZpb3Igb2YgdGhlIEMgcXNvcnQoKSBmdW5jdGlvbi4KKworLSBJc3N1ZSAjMTczMjM6IFRoZSAiW1ggcmVmcywgWSBibG9ja3NdIiBwcmludGVkIGJ5IGRlYnVnIGJ1aWxkcyBoYXMgYmVlbgorICBkaXNhYmxlZCBieSBkZWZhdWx0LiAgSXQgY2FuIGJlIHJlLWVuYWJsZWQgd2l0aCB0aGUgYC1YIHNob3dyZWZjb3VudGAgb3B0aW9uLgorCistIElzc3VlICMxNzMyODogRml4IHBvc3NpYmxlIHJlZmxlYWsgaW4gZGljdC5zZXRkZWZhdWx0LgorCistIElzc3VlICMxNzI3NTogQ29ycmVjdGVkIGNsYXNzIG5hbWUgaW4gaW5pdCBlcnJvciBtZXNzYWdlcyBvZiB0aGUgQyB2ZXJzaW9uIG9mCisgIEJ1ZmZlcmVkV3JpdGVyIGFuZCBCdWZmZXJlZFJhbmRvbS4KKworLSBJc3N1ZSAjNzk2MzogRml4ZWQgbWlzbGVhZGluZyBlcnJvciBtZXNzYWdlIHRoYXQgaXNzdWVkIHdoZW4gb2JqZWN0IGlzCisgIGNhbGxlZCB3aXRob3V0IGFyZ3VtZW50cy4KKworLSBJc3N1ZSAjODc0NTogU21hbGwgc3BlZWQgdXAgemlwaW1wb3J0IG9uIFdpbmRvd3MuIFBhdGNoIGJ5IENhdGFsaW4gSWFjb2IuCisKKy0gSXNzdWUgIzUzMDg6IFJhaXNlIFZhbHVlRXJyb3Igd2hlbiBtYXJzaGFsbGluZyB0b28gbGFyZ2Ugb2JqZWN0IChhIHNlcXVlbmNlCisgIHdpdGggc2l6ZSA+PSAyKiozMSksIGluc3RlYWQgb2YgcHJvZHVjaW5nIGlsbGVnYWwgbWFyc2hhbCBkYXRhLgorCistIElzc3VlICMxMjk4MzogQnl0ZXMgbGl0ZXJhbHMgd2l0aCBpbnZhbGlkIGBgXHhgYCBlc2NhcGUgbm93IHJhaXNlIGEgU3ludGF4RXJyb3IKKyAgYW5kIGEgZnVsbCB0cmFjZWJhY2sgaW5jbHVkaW5nIGxpbmUgbnVtYmVyLgorCistIElzc3VlICMxNjk2NzogSW4gZnVuY3Rpb24gZGVmaW5pdGlvbiwgZXZhbHVhdGUgcG9zaXRpb25hbCBkZWZhdWx0cyBiZWZvcmUKKyAga2V5d29yZC1vbmx5IGRlZmF1bHRzLgorCistIElzc3VlICMxNzE3MzogUmVtb3ZlIHVzZXMgb2YgbG9jYWxlLWRlcGVuZGVudCBDIGZ1bmN0aW9ucyAoaXNhbHBoYSgpIGV0Yy4pCisgIGluIHRoZSBpbnRlcnByZXRlci4KKworLSBJc3N1ZSAjMTcxMzc6IFdoZW4gYW4gVW5pY29kZSBzdHJpbmcgaXMgcmVzaXplZCwgdGhlIGludGVybmFsIHdpZGUgY2hhcmFjdGVyCisgIHN0cmluZyAod3N0cikgZm9ybWF0IGlzIG5vdyBjbGVhcmVkLgorCistIElzc3VlICMxNzA0MzogVGhlIHVuaWNvZGUtaW50ZXJuYWwgZGVjb2RlciBubyBsb25nZXIgcmVhZCBwYXN0IHRoZSBlbmQgb2YKKyAgaW5wdXQgYnVmZmVyLgorCistIElzc3VlICMxNzA5ODogQWxsIG1vZHVsZXMgbm93IGhhdmUgX19sb2FkZXJfXyBzZXQgZXZlbiBpZiB0aGV5IHByZS1leGlzdCB0aGUKKyAgYm9vdHN0cmFwcGluZyBvZiBpbXBvcnRsaWIuCisKKy0gSXNzdWUgIzE2OTc5OiBGaXggZXJyb3IgaGFuZGxpbmcgYnVncyBpbiB0aGUgdW5pY29kZS1lc2NhcGUtZGVjb2RlIGRlY29kZXIuCisKKy0gSXNzdWUgIzE2NzcyOiBUaGUgYmFzZSBhcmd1bWVudCB0byB0aGUgaW50IGNvbnN0cnVjdG9yIG5vIGxvbmdlciBhY2NlcHRzCisgIGZsb2F0cywgb3Igb3RoZXIgbm9uLWludGVnZXIgb2JqZWN0cyB3aXRoIGFuIF9faW50X18gbWV0aG9kLiAgT2JqZWN0cworICB3aXRoIGFuIF9faW5kZXhfXyBtZXRob2QgYXJlIG5vdyBhY2NlcHRlZC4KKworLSBJc3N1ZSAjMTAxNTY6IEluIHRoZSBpbnRlcnByZXRlcidzIGluaXRpYWxpemF0aW9uIHBoYXNlLCB1bmljb2RlIGdsb2JhbHMKKyAgYXJlIG5vdyBpbml0aWFsaXplZCBkeW5hbWljYWxseSBhcyBuZWVkZWQuCisKKy0gSXNzdWUgIzE2OTgwOiBGaXggcHJvY2Vzc2luZyBvZiBlc2NhcGVkIG5vbi1hc2NpaSBieXRlcyBpbiB0aGUKKyAgdW5pY29kZS1lc2NhcGUtZGVjb2RlIGRlY29kZXIuCisKKy0gSXNzdWUgIzE2OTc1OiBGaXggZXJyb3IgaGFuZGxpbmcgYnVnIGluIHRoZSBlc2NhcGUtZGVjb2RlIGJ5dGVzIGRlY29kZXIuCisKKy0gSXNzdWUgIzE0ODUwOiBOb3cgYSBjaGFybWFwIGRlY29kZXIgdHJlYXRzIFUrRkZGRSBhcyAidW5kZWZpbmVkIG1hcHBpbmciCisgIGluIGFueSBtYXBwaW5nLCBub3Qgb25seSBpbiBhIHN0cmluZy4KKworLSBJc3N1ZSAjMTY2MTM6IEFkZCAqbSogYXJndW1lbnQgdG8gYGBjb2xsZWN0aW9ucy5DaGFpbm1hcC5uZXdfY2hpbGRgYCB0bworICBhbGxvdyB0aGUgbmV3IGNoaWxkIG1hcCB0byBiZSBzcGVjaWZpZWQgZXhwbGljaXRseS4KKworLSBJc3N1ZSAjMTY3MzA6IGltcG9ydGxpYi5tYWNoaW5lcnkuRmlsZUZpbmRlciBub3cgbm8gbG9uZ2VycyByYWlzZXMgYW4KKyAgZXhjZXB0aW9uIHdoZW4gdHJ5aW5nIHRvIHBvcHVsYXRlIGl0cyBjYWNoZSBhbmQgaXQgZmluZHMgb3V0IHRoZSBkaXJlY3RvcnkgaXMKKyAgdW5yZWFkYWJsZSBvciBoYXMgdHVybmVkIGludG8gYSBmaWxlLiBSZXBvcnRlZCBhbmQgZGlhZ25vc2VkIGJ5CisgIERhdmlkIFByaXRjaGFyZC4KKworLSBJc3N1ZSAjMTY5MDY6IEZpeCBhIGxvZ2ljIGVycm9yIHRoYXQgcHJldmVudGVkIG1vc3Qgc3RhdGljIHN0cmluZ3MgZnJvbSBiZWluZworICBjbGVhcmVkLgorCistIElzc3VlICMxMTQ2MTogRml4IHRoZSBpbmNyZW1lbnRhbCBVVEYtMTYgZGVjb2Rlci4gT3JpZ2luYWwgcGF0Y2ggYnkKKyAgQW1hdXJ5IEZvcmdlb3QgZCdBcmMuCisKKy0gSXNzdWUgIzE2ODU2OiBGaXggYSBzZWdtZW50YXRpb24gZmF1bHQgZnJvbSBjYWxsaW5nIHJlcHIoKSBvbiBhIGRpY3Qgd2l0aAorICBhIGtleSB3aG9zZSByZXByIHJhaXNlIGFuIGV4Y2VwdGlvbi4KKworLSBJc3N1ZSAjMTYzNjc6IEZpeCBGaWxlSU8ucmVhZGFsbCgpIG9uIFdpbmRvd3MgZm9yIGZpbGVzIGxhcmdlciB0aGFuIDIgR0IuCisKKy0gSXNzdWUgIzE2NzYxOiBDYWxsaW5nIGludCgpIHdpdGggYmFzZSBhcmd1bWVudCBvbmx5IG5vdyByYWlzZXMgVHlwZUVycm9yLgorCistIElzc3VlICMxNjc1OTogU3VwcG9ydCB0aGUgZnVsbCBEV09SRCAodW5zaWduZWQgbG9uZykgcmFuZ2UgaW4gUmVnMlB5CisgIHdoZW4gcmV0cmlldmluZyBhIFJFR19EV09SRCB2YWx1ZS4gVGhpcyBjb3JyZWN0cyBmdW5jdGlvbnMgbGlrZQorICB3aW5yZWcuUXVlcnlWYWx1ZUV4IHRoYXQgbWF5IGhhdmUgYmVlbiByZXR1cm5pbmcgdHJ1bmNhdGVkIHZhbHVlcy4KKworLSBJc3N1ZSAjMTQ0MjA6IFN1cHBvcnQgdGhlIGZ1bGwgRFdPUkQgKHVuc2lnbmVkIGxvbmcpIHJhbmdlIGluIFB5MlJlZworICB3aGVuIHBhc3NlZCBhIFJFR19EV09SRCB2YWx1ZS4gRml4ZXMgT3ZlcmZsb3dFcnJvciBpbiB3aW5yZWcuU2V0VmFsdWVFeC4KKworLSBJc3N1ZSAjMTE5Mzk6IFNldCB0aGUgc3RfZGV2IGF0dHJpYnV0ZSBvZiBzdGF0X3Jlc3VsdCB0byBhbGxvdyBXaW5kb3dzIHRvCisgIHRha2UgYWR2YW50YWdlIG9mIHRoZSBvcy5wYXRoLnNhbWVmaWxlL3NhbWVvcGVuZmlsZS9zYW1lc3RhdCBpbXBsZW1lbnRhdGlvbnMKKyAgdXNlZCBieSBvdGhlciBwbGF0Zm9ybXMuCisKKy0gSXNzdWUgIzE2NzcyOiBUaGUgaW50KCkgY29uc3RydWN0b3IncyBzZWNvbmQgYXJndW1lbnQgKGJhc2UpIG5vIGxvbmdlcgorICBhY2NlcHRzIG5vbiBpbnRlZ2VyIHZhbHVlcy4gIENvbnNpc3RlbnQgd2l0aCB0aGUgYmVoYXZpb3IgaW4gUHl0aG9uIDIuCisKKy0gSXNzdWUgIzE0NDcwOiBSZW1vdmUgdzl4cG9wZW4gc3VwcG9ydCBwZXIgUEVQIDExLgorCistIElzc3VlICM5ODU2OiBSZXBsYWNlIGRlcHJlY2F0aW9uIHdhcm5pbmcgd2l0aCByYWlzaW5nIFR5cGVFcnJvcgorICBpbiBvYmplY3QuX19mb3JtYXRfXy4gUGF0Y2ggYnkgRmxvcmVudCBYaWNsdW5hLgorCistIElzc3VlICMxNjU5NzogSW4gYnVmZmVyZWQgYW5kIHRleHQgSU8sIGNhbGwgY2xvc2UoKSBvbiB0aGUgdW5kZXJseWluZyBzdHJlYW0KKyAgaWYgaW52b2tpbmcgZmx1c2goKSBmYWlscy4KKworLSBJc3N1ZSAjMTY3MjI6IEluIHRoZSBieXRlcygpIGNvbnN0cnVjdG9yLCB0cnkgdG8gY2FsbCBfX2J5dGVzX18gb24gdGhlCisgIGFyZ3VtZW50IGJlZm9yZSBfX2luZGV4X18uCisKKy0gSXNzdWUgIzE2NDIxOiBsb2FkaW5nIG11bHRpcGxlIG1vZHVsZXMgZnJvbSBvbmUgc2hhcmVkIG9iamVjdCBpcyBub3cKKyAgaGFuZGxlZCBjb3JyZWN0bHkgKHByZXZpb3VzbHksIHRoZSBmaXJzdCBtb2R1bGUgbG9hZGVkIGZyb20gdGhhdCBmaWxlCisgIHdhcyBzaWxlbnRseSByZXR1cm5lZCkuIFBhdGNoIGJ5IFbDoWNsYXYgxaBtaWxhdWVyLgorCistIElzc3VlICMxNjYwMjogV2hlbiBhIHdlYWtyZWYncyB0YXJnZXQgd2FzIHBhcnQgb2YgYSBsb25nIGRlYWxsb2NhdGlvbgorICBjaGFpbiwgdGhlIG9iamVjdCBjb3VsZCByZW1haW4gcmVhY2hhYmxlIHRocm91Z2ggaXRzIHdlYWtyZWYgZXZlbiB0aG91Z2gKKyAgaXRzIHJlZmNvdW50IGhhZCBkcm9wcGVkIHRvIHplcm8uCisKKy0gSXNzdWUgIzE2NDk1OiBSZW1vdmUgZXh0cmFuZW91cyBOVUxMIGVuY29kaW5nIGNoZWNrIGZyb20gYnl0ZXNfZGVjb2RlKCkuCisKKy0gSXNzdWUgIzE2NjE5OiBDcmVhdGUgTmFtZUNvbnN0YW50IEFTVCBjbGFzcyB0byByZXByZXNlbnQgTm9uZSwgVHJ1ZSwgYW5kIEZhbHNlCisgIGxpdGVyYWxzLiBBcyBhIHJlc3VsdCwgdGhlc2UgY29uc3RhbnRzIGFyZSBuZXZlciBsb2FkZWQgYXQgcnVudGltZSBmcm9tCisgIGJ1aWx0aW5zLgorCistIElzc3VlICMxNjQ1NTogT24gRnJlZUJTRCBhbmQgU29sYXJpcywgaWYgdGhlIGxvY2FsZSBpcyBDLCB0aGUKKyAgQVNDSUkvc3Vycm9nYXRlZXNjYXBlIGNvZGVjIGlzIG5vdyB1c2VkIChpbnN0ZWFkIG9mIHRoZSBsb2NhbGUgZW5jb2RpbmcpIHRvCisgIGRlY29kZSB0aGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4gVGhpcyBjaGFuZ2UgZml4ZXMgaW5jb25zaXN0ZW5jaWVzIHdpdGgKKyAgb3MuZnNlbmNvZGUoKSBhbmQgb3MuZnNkZWNvZGUoKSwgYmVjYXVzZSB0aGVzZSBvcGVyYXRpbmcgc3lzdGVtcyBhbm5vdW5jZSBhbgorICBBU0NJSSBsb2NhbGUgZW5jb2RpbmcsIGJ1dCBhY3R1YWxseSB1c2UgdGhlIElTTy04ODU5LTEgZW5jb2RpbmcgaW4gcHJhY3RpY2UuCisKKy0gSXNzdWUgIzE2NTYyOiBPcHRpbWl6ZSBkaWN0IGVxdWFsaXR5IHRlc3RpbmcuICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxNjU4ODogU2lsZW5jZSB1bnVzZWQtYnV0LXNldCB3YXJuaW5ncyBpbiBQeXRob24vdGhyZWFkX3B0aHJlYWQKKworLSBJc3N1ZSAjMTY1OTI6IHN0cmluZ2xpYl9ieXRlc19qb2luIGRvZXNuJ3QgcmFpc2UgTWVtb3J5RXJyb3Igb24gYWxsb2NhdGlvbgorICBmYWlsdXJlLgorCistIElzc3VlICMxNjU0NjogRml4OiBhc3QuWWllbGRGcm9tIGFyZ3VtZW50IGlzIG5vdyBtYW5kYXRvcnkuCisKKy0gSXNzdWUgIzE2NTE0OiBGaXggcmVncmVzc2lvbiBjYXVzaW5nIGEgdHJhY2ViYWNrIHdoZW4gc3lzLnBhdGhbMF0gaXMgTm9uZQorICAoYWN0dWFsbHksIGFueSBub24tc3RyaW5nIG9yIG5vbi1ieXRlcyB0eXBlKS4KKworLSBJc3N1ZSAjMTYzMDY6IEZpeCBtdWx0aXBsZSBlcnJvciBtZXNzYWdlcyB3aGVuIHVua25vd24gY29tbWFuZCBsaW5lCisgIHBhcmFtZXRlcnMgd2hlcmUgcGFzc2VkIHRvIHRoZSBpbnRlcnByZXRlci4gIFBhdGNoIGJ5IEhpZXUgTmd1eWVuLgorCistIElzc3VlICMxNjIxNTogRml4IHBvdGVudGlhbCBkb3VibGUgbWVtb3J5IGZyZWUgaW4gc3RyLnJlcGxhY2UoKS4gIFBhdGNoCisgIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE2MjkwOiBBIGZsb2F0IHJldHVybiB2YWx1ZSBmcm9tIHRoZSBfX2NvbXBsZXhfXyBzcGVjaWFsIG1ldGhvZCBpcyBubworICBsb25nZXIgYWNjZXB0ZWQgaW4gdGhlIGNvbXBsZXgoKSBjb25zdHJ1Y3Rvci4KKworLSBJc3N1ZSAjMTY0MTY6IE9uIE1hYyBPUyBYLCBvcGVyYXRpbmcgc3lzdGVtIGRhdGEgYXJlIG5vdyBhbHdheXMKKyAgZW5jb2RlZC9kZWNvZGVkIHRvL2Zyb20gVVRGLTgvc3Vycm9nYXRlZXNjYXBlLCBpbnN0ZWFkIG9mIHRoZSBsb2NhbGUgZW5jb2RpbmcKKyAgKHdoaWNoIG1heSBiZSBBU0NJSSBpZiBubyBsb2NhbGUgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgc2V0KSwgdG8gYXZvaWQKKyAgaW5jb25zaXN0ZW5jaWVzIHdpdGggb3MuZnNlbmNvZGUoKSBhbmQgb3MuZnNkZWNvZGUoKSBmdW5jdGlvbnMgd2hpY2ggYXJlCisgIGFscmVhZHkgdXNpbmcgVVRGLTgvc3Vycm9nYXRlZXNjYXBlLgorCistIElzc3VlICMxNjQ1MzogRml4IGVxdWFsaXR5IHRlc3Rpbmcgb2YgZGVhZCB3ZWFrcmVmIG9iamVjdHMuCisKKy0gSXNzdWUgIzk1MzU6IEZpeCBwZW5kaW5nIHNpZ25hbHMgdGhhdCBoYXZlIGJlZW4gcmVjZWl2ZWQgYnV0IG5vdCB5ZXQKKyAgaGFuZGxlZCBieSBQeXRob24gdG8gbm90IHBlcnNpc3QgYWZ0ZXIgb3MuZm9yaygpIGluIHRoZSBjaGlsZCBwcm9jZXNzLgorCistIElzc3VlICMxNDc5NDogRml4IHNsaWNlLmluZGljZXMgdG8gcmV0dXJuIGNvcnJlY3QgcmVzdWx0cyBmb3IgaHVnZSB2YWx1ZXMsCisgIHJhdGhlciB0aGFuIHJhaXNpbmcgT3ZlcmZsb3dFcnJvci4KKworLSBJc3N1ZSAjMTUwMDE6IGZpeCBzZWdmYXVsdCBvbiAiZGVsIHN5cy5tb2R1bGVzWydfX21haW5fXyddIi4gUGF0Y2ggYnkgVmljdG9yCisgIFN0aW5uZXIuCisKKy0gSXNzdWUgIzgyNzE6IHRoZSB1dGYtOCBkZWNvZGVyIG5vdyBvdXRwdXRzIHRoZSBjb3JyZWN0IG51bWJlciBvZiBVK0ZGRkQKKyAgY2hhcmFjdGVycyB3aGVuIHVzZWQgd2l0aCB0aGUgJ3JlcGxhY2UnIGVycm9yIGhhbmRsZXIgb24gaW52YWxpZCB1dGYtOAorICBzZXF1ZW5jZXMuICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLCB0ZXN0cyBieSBFemlvIE1lbG90dGkuCisKKy0gSXNzdWUgIzU3NjU6IEFwcGx5IGEgaGFyZCByZWN1cnNpb24gbGltaXQgaW4gdGhlIGNvbXBpbGVyIGluc3RlYWQgb2YKKyAgYmxvd2luZyB0aGUgc3RhY2sgYW5kIHNlZ2ZhdWx0aW5nLiBJbml0aWFsIHBhdGNoIGJ5IEFuZHJlYSBHcmlmZmluaS4KKworLSBJc3N1ZSAjMTY0MDI6IFdoZW4gc2xpY2luZyBhIHJhbmdlLCBmaXggc2hhZG93aW5nIG9mIGV4Y2VwdGlvbnMgZnJvbQorICBfX2luZGV4X18uCisKKy0gSXNzdWUgIzE2MzM2OiBmaXggaW5wdXQgY2hlY2tpbmcgaW4gdGhlIHN1cnJvZ2F0ZXBhc3MgZXJyb3IgaGFuZGxlci4KKyAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjODQwMTogYXNzaWduaW5nIGFuIGludCB0byBhIGJ5dGVhcnJheSBzbGljZSAoZS5nLiBiWzM6NF0gPSA1KSBub3cKKyAgcmFpc2VzIGFuIGVycm9yLgorCistIElzc3VlICM3MzE3OiBEaXNwbGF5IGZ1bGwgdHJhY2ViYWNrcyB3aGVuIGFuIGVycm9yIG9jY3VycyBhc3luY2hyb25vdXNseS4KKyAgUGF0Y2ggYnkgQWxvbiBIb3JldiB3aXRoIHVwZGF0ZSBieSBBbGV4ZXkgS2FjaGF5ZXYuCisKKy0gSXNzdWUgIzE2MzA5OiBNYWtlIFBZVEhPTlBBVEg9IiIgYmVoYXZpb3IgdGhlIHNhbWUgYXMgaWYgUFlUSE9OUEFUSAorICBub3Qgc2V0IGF0IGFsbC4KKworLSBJc3N1ZSAjMTAxODk6IEltcHJvdmUgdGhlIGVycm9yIHJlcG9ydGluZyBvZiBTeW50YXhFcnJvcnMgcmVsYXRlZCB0byBnbG9iYWwKKyAgYW5kIG5vbmxvY2FsIHN0YXRlbWVudHMuCisKKy0gRml4IHNlZ2ZhdWx0cyBvbiBzZXR0aW5nIF9fcXVhbG5hbWVfXyBvbiBidWlsdGluIHR5cGVzIGFuZCBhdHRlbXB0aW5nIHRvCisgIGRlbGV0ZSBpdCBvbiBhbnkgdHlwZS4KKworLSBJc3N1ZSAjMTQ2MjU6IFJld3JpdGUgdGhlIFVURi0zMiBkZWNvZGVyLiBJdCBpcyBub3cgM3ggdG8gNHggZmFzdGVyLiBQYXRjaAorICB3cml0dGVuIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE2MzQ1OiBGaXggYW4gaW5maW5pdGUgbG9vcCB3aGVuIGBgZnJvbWtleXNgYCBvbiBhIGRpY3Qgc3ViY2xhc3MKKyAgcmVjZWl2ZWQgYSBub25lbXB0eSBkaWN0IGZyb20gdGhlIGNvbnN0cnVjdG9yLgorCistIElzc3VlICMxNjI3MTogRml4IHN0cmFuZ2UgYnVncyB0aGF0IHJlc3VsdGVkIGZyb20gX19xdWFsbmFtZV9fIGFwcGVhcmluZyBpbiBhCisgIGNsYXNzJ3MgX19kaWN0X18gYW5kIG9uIHR5cGUuCisKKy0gSXNzdWUgIzEyODA1OiBNYWtlIGJ5dGVzLmpvaW4gYW5kIGJ5dGVhcnJheS5qb2luIGZhc3RlciB3aGVuIHRoZSBzZXBhcmF0b3IKKyAgaXMgZW1wdHkuICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICM2MDc0OiBFbnN1cmUgY2FjaGVkIGJ5dGVjb2RlIGZpbGVzIGNhbiBhbHdheXMgYmUgdXBkYXRlZCBieSB0aGUKKyAgdXNlciB0aGF0IGNyZWF0ZWQgdGhlbSwgZXZlbiB3aGVuIHRoZSBzb3VyY2UgZmlsZSBpcyByZWFkLW9ubHkuCisKKy0gSXNzdWUgIzE1OTU4OiBieXRlcy5qb2luIGFuZCBieXRlYXJyYXkuam9pbiBub3cgYWNjZXB0IGFyYml0cmFyeSBidWZmZXIKKyAgb2JqZWN0cy4KKworLSBJc3N1ZSAjMTQ3ODM6IEltcHJvdmUgaW50KCkgZG9jc3RyaW5nIGFuZCBzd2l0Y2ggZG9jc3RyaW5ncyBmb3Igc3RyKCksCisgIHJhbmdlKCksIGFuZCBzbGljZSgpIHRvIHVzZSBtdWx0aS1saW5lIHNpZ25hdHVyZXMuCisKKy0gSXNzdWUgIzE2MTYwOiBTdWJjbGFzcyBzdXBwb3J0IG5vdyB3b3JrcyBmb3IgdHlwZXMuU2ltcGxlTmFtZXNwYWNlLgorCistIElzc3VlICMxNjE0ODogSW1wbGVtZW50IFBFUCA0MjQsIGFkZGluZyBvcGVyYXRvci5sZW5ndGhfaGludCBhbmQKKyAgUHlPYmplY3RfTGVuZ3RoSGludC4KKworLSBVcGdyYWRlIFVuaWNvZGUgZGF0YSAoVUNEKSB0byB2ZXJzaW9uIDYuMi4KKworLSBJc3N1ZSAjMTUzNzk6IEZpeCBwYXNzaW5nIG9mIG5vbi1CTVAgY2hhcmFjdGVycyBhcyBpbnRlZ2VycyBmb3IgdGhlIGNoYXJtYXAKKyAgZGVjb2RlciAoYWxyZWFkeSB3b3JraW5nIGFzIHVuaWNvZGUgc3RyaW5ncykuICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxNTE0NDogRml4IHBvc3NpYmxlIGludGVnZXIgb3ZlcmZsb3cgd2hlbiBoYW5kbGluZyBwb2ludGVycyBhcyBpbnRlZ2VyCisgIHZhbHVlcywgYnkgdXNpbmcgYFB5X3VpbnRwdHJfdGAgaW5zdGVhZCBvZiBgc2l6ZV90YC4gIFBhdGNoIGJ5IFNlcmhpeQorICBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE1OTY1OiBFeHBsaWNpdGx5IGNhc3QgYEFUX0ZEQ1dEYCBhcyAoaW50KS4gIFJlcXVpcmVkIG9uIFNvbGFyaXMgMTAKKyAgKHdoaWNoIGRlZmluZXMgYEFUX0ZEQ1dEYCBhcyBgYDB4ZmZkMTk1NTNgYCksIGhhcm1sZXNzIG9uIG90aGVyIHBsYXRmb3Jtcy4KKworLSBJc3N1ZSAjMTU4Mzk6IENvbnZlcnQgU3lzdGVtRXJyb3JzIGluIGBzdXBlcigpYCB0byBSdW50aW1lRXJyb3JzLgorCistIElzc3VlICMxNTQ0ODogQnVmZmVyZWQgSU8gbm93IGZyZWVzIHRoZSBidWZmZXIgd2hlbiBjbG9zZWQsIGluc3RlYWQKKyAgb2Ygd2hlbiBkZWFsbG9jYXRpbmcuCisKKy0gSXNzdWUgIzE1ODQ2OiBGaXggU3lzdGVtRXJyb3Igd2hpY2ggaGFwcGVuZWQgd2hlbiB1c2luZyBgYXN0LnBhcnNlKClgIGluIGFuCisgIGV4Y2VwdGlvbiBoYW5kbGVyIG9uIGNvZGUgd2l0aCBzeW50YXggZXJyb3JzLgorCistIElzc3VlICMxNTg5NzogemlwaW1wb3J0LmMgZG9lc24ndCBjaGVjayByZXR1cm4gdmFsdWUgb2YgZnNlZWsoKS4KKyAgUGF0Y2ggYnkgRmVsaXBlIENydXouCisKKy0gSXNzdWUgIzE1ODAxOiBNYWtlIHN1cmUgbWFwcGluZ3MgcGFzc2VkIHRvICclJyBmb3JtYXR0aW5nIGFyZSBhY3R1YWxseQorICBzdWJzY3JpcHRhYmxlLgorCistIElzc3VlICMxNTExMTogX19pbXBvcnRfXyBzaG91bGQgcHJvcGFnYXRlIEltcG9ydEVycm9yIHdoZW4gcmFpc2VkIGFzIGEKKyAgc2lkZS1lZmZlY3Qgb2YgYSBtb2R1bGUgdHJpZ2dlcmVkIGZyb20gdXNpbmcgZnJvbWxpc3QuCisKKy0gSXNzdWUgIzE1MDIyOiBBZGQgcGlja2xlIGFuZCBjb21wYXJpc29uIHN1cHBvcnQgdG8gdHlwZXMuU2ltcGxlTmFtZXNwYWNlLgorCitMaWJyYXJ5CistLS0tLS0tCisKKy0gSXNzdWUgIzQzMzE6IEFkZGVkIGZ1bmN0b29scy5wYXJ0aWFsbWV0aG9kIChJbml0aWFsIHBhdGNoIGJ5IEFsb24gSG9yZXYpCisKKy0gSXNzdWUgIzEzNDYxOiBGaXggYSBjcmFzaCBpbiB0aGUgVGV4dElPV3JhcHBlci50ZWxsIG1ldGhvZCBvbiA2NC1iaXQKKyAgcGxhdGZvcm1zLiAgUGF0Y2ggYnkgWW9nZXNoIENoYXVkaGFyaS4KKworLSBJc3N1ZSAjMTg2ODE6IEZpeCBhIE5hbWVFcnJvciBpbiBpbXBvcnRsaWIucmVsb2FkKCkgKG5vdGljZWQgYnkgV2VpemhhbyBMaSkuCisKKy0gSXNzdWUgIzE0MzIzOiBFeHBhbmRlZCB0aGUgbnVtYmVyIG9mIGRpZ2l0cyBpbiB0aGUgY29lZmZpY2llbnRzIGZvciB0aGUKKyAgUkdCIC0tIFlJUSBjb252ZXJzaW9ucyBzbyB0aGF0IHRoZXkgbWF0Y2ggdGhlIEZDQyBOVFNDIHZlcnNpb25zLgorCiAtIElzc3VlICMxNzk5ODogRml4IGFuIGludGVybmFsIGVycm9yIGluIHJlZ3VsYXIgZXhwcmVzc2lvbiBlbmdpbmUuCiAKIC0gSXNzdWUgIzE3NTU3OiBGaXggb3MuZ2V0Z3JvdXBzKCkgdG8gd29yayB3aXRoIHRoZSBtb2RpZmllZCBiZWhhdmlvciBvZgogICBnZXRncm91cHMoMikgb24gT1MgWCAxMC44LiAgT3JpZ2luYWwgcGF0Y2ggYnkgTWF0ZXVzeiBMZW5pay4KIAorLSBJc3N1ZSAjMTg2MDg6IEF2b2lkIGtlZXBpbmcgYSBzdHJvbmcgcmVmZXJlbmNlIHRvIHRoZSBsb2NhbGUgbW9kdWxlCisgIGluc2lkZSB0aGUgX2lvIG1vZHVsZS4KKworLSBJc3N1ZSAjMTg2MTk6IEZpeCBhdGV4aXQgbGVha2luZyBjYWxsYmFja3MgcmVnaXN0ZXJlZCBmcm9tIHN1Yi1pbnRlcnByZXRlcnMsCisgIGFuZCBtYWtlIGl0IEdDLWF3YXJlLgorCistIElzc3VlICMxNTY5OTogVGhlIHJlYWRsaW5lIG1vZHVsZSBub3cgdXNlcyBQRVAgMzEyMS1zdHlsZSBtb2R1bGUKKyAgaW5pdGlhbGl6YXRpb24sIHNvIGFzIHRvIHJlY2xhaW0gYWxsb2NhdGVkIHJlc291cmNlcyAoUHl0aG9uIGNhbGxiYWNrcykKKyAgYXQgc2h1dGRvd24uICBPcmlnaW5hbCBwYXRjaCBieSBSb2JpbiBTY2hyZWliZXIuCisKKy0gSXNzdWUgIzE3NjE2OiB3YXZlLm9wZW4gbm93IHN1cHBvcnRzIHRoZSBjb250ZXh0IG1hbmFnZW1lbnQgcHJvdG9jb2wuCisKIC0gSXNzdWUgIzE4NTk5OiBGaXggbmFtZSBhdHRyaWJ1dGUgb2YgX3NoYTEuc2hhMSgpIG9iamVjdC4gSXQgbm93IHJldHVybnMKICAgJ1NIQTEnIGluc3RlYWQgb2YgJ1NIQScuCiAKKy0gSXNzdWUgIzEzMjY2OiBBZGRlZCBpbnNwZWN0LnVud3JhcCB0byBlYXNpbHkgdW5yYXZlbCBfX3dyYXBwZWRfXyBjaGFpbnMKKyAgKGluaXRpYWwgcGF0Y2ggYnkgRGFuaWVsIFVyYmFuIGFuZCBBYXJvbiBJbGVzKQorCiAtIElzc3VlICMxODU2MTogU2tpcCBuYW1lIGluIGN0eXBlcycgX2J1aWxkX2NhbGxhcmdzKCkgaWYgbmFtZSBpcyBOVUxMLgogCiAtIElzc3VlICMxODU1OTogRml4IE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBlcnJvciBpbiBfcGlja2xlIG1vZHVsZQogCi0tIElzc3VlICMxODU1NjogQ2hlY2sgdGhlIHJldHVybiB2YWx1ZSBvZiBhIFB5VW5pY29kZV9Bc1dpZGVDaGFyKCkgY2FsbCBpbgotICBjdHlwZXMnIFVfc2V0KCkuCistIElzc3VlICMxODU1NjogQ2hlY2sgdGhlIHJldHVybiB0eXBlIG9mIFB5VW5pY29kZV9Bc1dpZGVDaGFyKCkgaW4gY3R5cGUncworICBVX3NldCgpLgorCistIElzc3VlICMxNzgxODogYWlmYy5nZXRwYXJhbXMgbm93IHJldHVybnMgYSBuYW1lZHR1cGxlLgogCiAtIElzc3VlICMxODU0OTogRWxpbWluYXRlIGRlYWQgY29kZSBpbiBzb2NrZXRfbnRvaGwoKQogCistIElzc3VlICMxODUzMDogUmVtb3ZlIGFkZGl0aW9uYWwgc3RhdCBjYWxsIGZyb20gcG9zaXhwYXRoLmlzbW91bnQuCisgIFBhdGNoIGJ5IEFsZXggR2F5bm9yLgorCiAtIElzc3VlICMxODUxNDogRml4IHVucmVhY2hhYmxlIFB5X0RFQ1JFRigpIGNhbGwgaW4gUHlDRGF0YV9Gcm9tQmFzZU9iaigpCiAKKy0gSXNzdWUgIzkxNzc6IENhbGxpbmcgcmVhZCgpIG9yIHdyaXRlKCkgbm93IHJhaXNlcyBWYWx1ZUVycm9yLCBub3QKKyAgQXR0cmlidXRlRXJyb3IsIG9uIGEgY2xvc2VkIFNTTCBzb2NrZXQuICBQYXRjaCBieSBTZW5rbyBSYXNpYy4KKwogLSBJc3N1ZSAjMTg1MTM6IEZpeCBiZWhhdmlvdXIgb2YgY21hdGgucmVjdCB3LnIudC4gc2lnbmVkIHplcm9zIG9uIE9TIFggMTAuOCArCiAgIGdjYy4KIAorLSBJc3N1ZSAjMTg0Nzk6IENoYW5nZWQgdmVudiBBY3RpdmF0ZS5wczEgdG8gbWFrZSBkZWFjdGl2YXRlIGEgZnVuY3Rpb24sIGFuZAorICByZW1vdmVkIERlYWN0aXZhdGUucHMxLgorCiAtIElzc3VlICMxODQ4MDogQWRkIG1pc3NpbmcgY2FsbCB0byBQeVR5cGVfUmVhZHkgdG8gdGhlIF9lbGVtZW50dHJlZSBleHRlbnNpb24uCiAKIC0gSXNzdWUgIzE3Nzc4OiBGaXggdGVzdCBkaXNjb3ZlcnkgZm9yIHRlc3RfbXVsdGlwcm9jZXNzaW5nLiAoUGF0Y2ggYnkKICAgWmFjaGFyeSBXYXJlLikKIAorLSBJc3N1ZSAjMTgzOTM6IFRoZSBwcml2YXRlIG1vZHVsZSBfZ2VzdGFsdCBhbmQgcHJpdmF0ZSBmdW5jdGlvbnMKKyAgcGxhdGZvcm0uX21hY192ZXJfZ2VzdGFsdCwgcGxhdGZvcm0uX21hY192ZXJfbG9va3VwIGFuZAorICBwbGF0Zm9ybS5fYmNkMnN0ciBoYXZlIGJlZW4gcmVtb3ZlZC4gVGhpcyBkb2VzIG5vdCBhZmZlY3QgdGhlIHB1YmxpYworICBpbnRlcmZhY2Ugb2YgdGhlIHBsYXRmb3JtIG1vZHVsZS4KKworLSBJc3N1ZSAjMTc0ODI6IGZ1bmN0b29scy51cGRhdGVfd3JhcHBlciAoYW5kIGZ1bmN0b29scy53cmFwcykgbm93IHNldCB0aGUKKyAgX193cmFwcGVkX18gYXR0cmlidXRlIGNvcnJlY3RseSBldmVuIGlmIHRoZSB1bmRlcmx5aW5nIGZ1bmN0aW9uIGhhcyBhCisgIF9fd3JhcHBlZF9fIGF0dHJpYnV0ZSBzZXQuCisKIC0gSXNzdWUgIzE4NDMxOiBUaGUgbmV3IGVtYWlsIGhlYWRlciBwYXJzZXIgbm93IGRlY29kZXMgUkZDMjA0NyBlbmNvZGVkIHdvcmRzCiAgIGluIHN0cnVjdHVyZWQgaGVhZGVycy4KIApAQCAtMTA5OCwxMSArNDY4OSwxOSBAQAogLSBJc3N1ZSAjMTgxMDE6IFRjbC5zcGxpdCgpIG5vdyBwcm9jZXNzIHN0cmluZ3MgbmVzdGVkIGluIGEgdHVwbGUgYXMgaXQKICAgZG8gd2l0aCBieXRlIHN0cmluZ3MuCiAKKy0gSXNzdWUgIzE4MTE2OiBnZXRwYXNzIHdhcyBhbHdheXMgZ2V0dGluZyBhbiBlcnJvciB3aGVuIHRlc3RpbmcgL2Rldi90dHksCisgIGFuZCB0aHVzIHdhcyBhbHdheXMgZmFsbGluZyBiYWNrIHRvIHN0ZGluLCBhbmQgd291bGQgdGhlbiByYWlzZSBhbiBleGNlcHRpb24KKyAgaWYgc3RkaW4gY291bGQgbm90IGJlIHVzZWQgKHN1Y2ggYXMgL2Rldi9udWxsKS4gIEl0IGFsc28gbGVha2VkIGFuIG9wZW4gZmlsZS4KKyAgQWxsIG9mIHRoZXNlIGlzc3VlcyBhcmUgbm93IGZpeGVkLgorCiAtIElzc3VlICMxNzE5ODogRml4IGEgTmFtZUVycm9yIGluIHRoZSBkYm0gbW9kdWxlLiAgUGF0Y2ggYnkgVmFsZW50aW5hCiAgIE11a2hhbWVkemhhbm92YS4KIAogLSBJc3N1ZSAjMTgwMTM6IEZpeCBjZ2kuRmllbGRTdG9yYWdlIHRvIHBhcnNlIHRoZSBXM0Mgc2FtcGxlIGZvcm0uCiAKKy0gSXNzdWUgIzE4MDIwOiBpbXByb3ZlIGh0bWwuZXNjYXBlIHNwZWVkIGJ5IGFuIG9yZGVyIG9mIG1hZ25pdHVkZS4KKyAgUGF0Y2ggYnkgTWF0dCBCcnlhbnQuCisKIC0gSXNzdWUgIzE4MzQ3OiBFbGVtZW50VHJlZSdzIGh0bWwgc2VyaWFsaXplciBub3cgcHJlc2VydmVzIHRoZSBjYXNlIG9mCiAgIGNsb3NpbmcgdGFncy4KIApAQCAtMTExNyw2ICs0NzE2LDkgQEAKIC0gSXNzdWUgIzE4MzM5OiBOZWdhdGl2ZSBpbnRzIGtleXMgaW4gdW5waWNrbGVyLm1lbW8gZGljdCBubyBsb25nZXIgY2F1c2UgYQogICBzZWdmYXVsdCBpbnNpZGUgdGhlIF9waWNrbGUgQyBleHRlbnNpb24uCiAKKy0gSXNzdWUgIzE4MjQwOiBUaGUgSE1BQyBtb2R1bGUgaXMgbm8gbG9uZ2VyIHJlc3RyaWN0ZWQgdG8gYnl0ZXMgYW5kIGFjY2VwdHMKKyAgYW55IGJ5dGVzLWxpa2Ugb2JqZWN0LCBlLmcuIG1lbW9yeXZpZXcuIE9yaWdpbmFsIHBhdGNoIGJ5IEpvbmFzIEJvcmdzdHLDtm0uCisKIC0gSXNzdWUgIzE4MjI0OiBSZW1vdmVkIHB5ZG9jIHNjcmlwdCBmcm9tIGNyZWF0ZWQgdmVudiwgYXMgaXQgY2F1c2VzIHByb2JsZW1zCiAgIG9uIFdpbmRvd3MgYW5kIGFkZHMgbm8gdmFsdWUgb3ZlciBhbmQgYWJvdmUgcHl0aG9uIC1tIHB5ZG9jIC4uLgogCkBAIC0xMTI3LDMxICs0NzI5LDkzIEBACiAtIElzc3VlICMxNDM2MDogZW5jb2RlX3F1b3ByaSBjYW4gbm93IGJlIHN1Y2Nlc3NmdWxseSB1c2VkIGFzIGFuIGVuY29kZXIKICAgd2hlbiBjb25zdHJ1Y3RpbmcgYSBNSU1FQXBwbGljYXRpb24gb2JqZWN0LgogCistIElzc3VlICMxMTM5MDogQWRkIC1vIGFuZCAtZiBjb21tYW5kIGxpbmUgb3B0aW9ucyB0byB0aGUgZG9jdGVzdCBDTEkgdG8KKyAgc3BlY2lmeSBkb2N0ZXN0IG9wdGlvbnMgKGFuZCBjb252ZXJ0IGl0IHRvIHVzaW5nIGFyZ3BhcnNlKS4KKwogLSBJc3N1ZSAjMTgxMzU6IHNzbC5TU0xTb2NrZXQud3JpdGUoKSBub3cgcmFpc2VzIGFuIE92ZXJmbG93RXJyb3IgaWYgdGhlIGlucHV0CiAgIHN0cmluZyBpbiBsb25nZXIgdGhhbiAyIGdpZ2FieXRlcywgYW5kIHNzbC5TU0xDb250ZXh0LmxvYWRfY2VydF9jaGFpbigpCiAgIHJhaXNlcyBhIFZhbHVlRXJyb3IgaWYgdGhlIHBhc3N3b3JkIGlzIGxvbmdlciB0aGFuIDIgZ2lnYWJ5dGVzLiBUaGUgc3NsCiAgIG1vZHVsZSBkb2VzIG5vdCBzdXBwb3J0IHBhcnRpYWwgd3JpdGUuCiAKKy0gSXNzdWUgIzExMDE2OiBBZGQgQyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgc3RhdCBtb2R1bGUgYXMgX3N0YXQuCisKIC0gSXNzdWUgIzE4MjQ4OiBGaXggbGliZmZpIGJ1aWxkIG9uIEFJWC4KIAogLSBJc3N1ZSAjMTgyNTk6IERlY2xhcmUgc2V0aG9zdG5hbWUgaW4gc29ja2V0bW9kdWxlLmMgZm9yIEFJWAogCistIElzc3VlICMxODE0NzogQWRkIGRpYWdub3N0aWMgZnVuY3Rpb25zIHRvIHNzbC5TU0xDb250ZXh0KCkuIGdldF9jYV9saXN0KCkKKyAgbGlzdHMgYWxsIGxvYWRlZCBDQSBjZXJ0aWZpY2F0ZXMgYW5kIGNlcnRfc3RvcmVfc3RhdHMoKSByZXR1cm5zIGFtb3VudCBvZgorICBsb2FkZWQgWC41MDkgY2VydHMsIFguNTA5IENBIGNlcnRzIGFuZCBDUkxzLgorCiAtIElzc3VlICMxODE2NzogY2dpLkZpZWxkU3RvcmFnZSBubyBsb25nZXIgZmFpbHMgdG8gaGFuZGxlIG11bHRpcGFydC9mb3JtLWRhdGEKLSAgd2hlbiBcclxuIGFwcGVhcnMgYXQgZW5kIG9mIDY1NTM1IGJ5dGVzIHdpdGhvdXQgb3RoZXIgbmV3bGluZXMuCisgIHdoZW4gYGBcclxuYGAgYXBwZWFycyBhdCBlbmQgb2YgNjU1MzUgYnl0ZXMgd2l0aG91dCBvdGhlciBuZXdsaW5lcy4KKworLSBJc3N1ZSAjMTgwNzY6IEludHJvZHVjZSBpbXBvcnRsaWIudXRpbC5kZWNvZGVfc291cmNlKCkuCisKKy0gSXNzdWUgIzE4MzU3OiBhZGQgdGVzdHMgZm9yIGRpY3R2aWV3IHNldCBkaWZmZXJlbmNlLgorICBQYXRjaCBieSBGcmFzZXIgVHdlZWRhbGUuCisKKy0gaW1wb3J0bGliLmFiYy5Tb3VyY2VMb2FkZXIuZ2V0X3NvdXJjZSgpIG5vIGxvbmdlciBjaGFuZ2VzIFN5bnRheEVycm9yIG9yCisgIFVuaWNvZGVEZWNvZGVFcnJvciBpbnRvIEltcG9ydEVycm9yLgorCistIElzc3VlICMxODA1OCwgMTgwNTc6IE1ha2UgdGhlIG5hbWVzcGFjZSBwYWNrYWdlIGxvYWRlciBtZWV0IHRoZQorICBpbXBvcnRsaWIuYWJjLkluc3BlY3RMb2FkZXIgQUJDLCBhbGxvd2luZyBmb3IgbmFtZXNwYWNlIHBhY2thZ2VzIHRvIHdvcmsgd2l0aAorICBydW5weS4KKworLSBJc3N1ZSAjMTcxNzc6IFRoZSBpbXAgbW9kdWxlIGlzIHBlbmRpbmcgZGVwcmVjYXRpb24uCiAKIC0gc3VicHJvY2VzczogUHJldmVudCBhIHBvc3NpYmxlIGRvdWJsZSBjbG9zZSBvZiBwYXJlbnQgcGlwZSBmZHMgd2hlbiB0aGUKICAgc3VicHJvY2VzcyBleGVjIHJ1bnMgaW50byBhbiBlcnJvci4gIFByZXZlbnQgYSByZWd1bGFyIG11bHRpLWNsb3NlIG9mIHRoZQogICAvZGV2L251bGwgZmQgd2hlbiBhbnkgb2Ygc3RkaW4sIHN0ZG91dCBhbmQgc3RkZXJyIHdhcyBzZXQgdG8gREVWTlVMTC4KIAorLSBJc3N1ZSAjMTgxOTQ6IEludHJvZHVjZSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZSgpIGFuZAorICBzb3VyY2VfZnJvbV9jYWNoZSgpIHdoaWxlIGRvY3VtZW50aW5nIHRoZSBlcXVpdmFsZW50IGZ1bmN0aW9ucyBpbiBpbXAgYXMKKyAgZGVwcmVjYXRlZC4KKworLSBJc3N1ZSAjMTc5MDc6IERvY3VtZW50IGltcC5uZXdfbW9kdWxlKCkgYXMgZGVwcmVjYXRlZCBpbiBmYXZvdXIgb2YKKyAgdHlwZXMuTW9kdWxlVHlwZS4KKworLSBJc3N1ZSAjMTgxOTI6IEludHJvZHVjZSBpbXBvcnRsaWIudXRpbC5NQUdJQ19OVU1CRVIgYW5kIGRvY3VtZW50IGFzIGRlcHJlY2F0ZWQKKyAgaW1wLmdldF9tYWdpYygpLgorCistIElzc3VlICMxODE0OTogQWRkIGZpbGVjbXAuY2xlYXJfY2FjaGUoKSB0byBtYW51YWxseSBjbGVhciB0aGUgZmlsZWNtcCBjYWNoZS4KKyAgUGF0Y2ggYnkgTWFyayBMZXZpdHQKKworLSBJc3N1ZSAjMTgxOTM6IEFkZCBpbXBvcnRsaWIucmVsb2FkKCkuCisKKy0gSXNzdWUgIzE4MTU3OiBTdG9wIHVzaW5nIGltcC5sb2FkX21vZHVsZSgpIGluIHB5ZG9jLgorCiAtIElzc3VlICMxNjEwMjogTWFrZSB1dWlkLl9uZXRiaW9zX2dldG5vZGUoKSB3b3JrIGFnYWluIG9uIFB5dGhvbiAzLgogCistIElzc3VlICMxNzEzNDogQWRkIHNzbC5lbnVtX2NlcnRfc3RvcmUoKSBhcyBpbnRlcmZhY2UgdG8gV2luZG93cycgY2VydCBzdG9yZS4KKworLSBJc3N1ZSAjMTgxNDM6IEltcGxlbWVudCBzc2wuZ2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzKCkgaW4gb3JkZXIgdG8gZGVidWcKKyAgdGhlIGRlZmF1bHQgbG9jYXRpb25zIGZvciBjYWZpbGUgYW5kIGNhcGF0aC4KKworLSBJc3N1ZSAjMTczMTQ6IE1vdmUgbXVsdGlwcm9jZXNzaW5nLmZvcmtpbmcgb3ZlciB0byBpbXBvcnRsaWIuCisKKy0gSXNzdWUgIzExOTU5OiBTTVRQU2VydmVyIGFuZCBTTVRQQ2hhbm5lbCBub3cgdGFrZSBhbiBvcHRpb25hbCBtYXAsIHVzZSBvZgorICB3aGljaCBhdm9pZHMgYWZmZWN0aW5nIGdsb2JhbCBzdGF0ZS4KKwogLSBJc3N1ZSAjMTgxMDk6IG9zLnVuYW1lKCkgbm93IGRlY29kZXMgZmllbGRzIGZyb20gdGhlIGxvY2FsZSBlbmNvZGluZywgYW5kCiAgIHNvY2tldC5nZXRob3N0bmFtZSgpIG5vdyBkZWNvZGVzIHRoZSBob3N0bmFtZSBmcm9tIHRoZSBsb2NhbGUgZW5jb2RpbmcsCiAgIGluc3RlYWQgb2YgdXNpbmcgdGhlIFVURi04IGVuY29kaW5nIGluIHN0cmljdCBtb2RlLgogCistIElzc3VlICMxODA4OTogSW1wbGVtZW50IGltcG9ydGxpYi5hYmMuSW5zcGVjdExvYWRlci5sb2FkX21vZHVsZS4KKworLSBJc3N1ZSAjMTgwODg6IEludHJvZHVjZSBpbXBvcnRsaWIuYWJjLkxvYWRlci5pbml0X21vZHVsZV9hdHRycyBmb3Igc2V0dGluZworICBtb2R1bGUgYXR0cmlidXRlcy4gTGVhZHMgdG8gdGhlIHBlbmRpbmcgZGVwcmVjYXRpb24gb2YKKyAgaW1wb3J0bGliLnV0aWwubW9kdWxlX2Zvcl9sb2FkZXIuCisKIC0gSXNzdWUgIzE3NDAzOiB1cmxsaWIucGFyc2Uucm9ib3RwYXJzZXIgbm9ybWFsaXplcyB0aGUgdXJscyBiZWZvcmUgYWRkaW5nIHRvCiAgIHJ1bGVsaW5lLiBUaGlzIGhlbHBzIGluIGhhbmRsaW5nIGNlcnRhaW4gdHlwZXMgaW52YWxpZCB1cmxzIGluIGEgY29uc2VydmF0aXZlCi0gIG1hbm5lci4KKyAgbWFubmVyLiBQYXRjaCBjb250cmlidXRlZCBieSBNaGVyIE1vdnNpc3lhbi4KKworLSBJc3N1ZSAjMTgwNzA6IEhhdmUgaW1wb3J0bGliLnV0aWwubW9kdWxlX2Zvcl9sb2FkZXIoKSBzZXQgYXR0cmlidXRlcworICB1bmNvbmRpdGlvbmFsbHkgaW4gb3JkZXIgdG8gcHJvcGVybHkgc3VwcG9ydCByZWxvYWRpbmcuCisKKy0gQWRkZWQgaW1wb3J0bGliLnV0aWwubW9kdWxlX3RvX2xvYWQgdG8gcmV0dXJuIGEgY29udGV4dCBtYW5hZ2VyIHRvIHByb3ZpZGUgdGhlCisgIHByb3BlciBtb2R1bGUgb2JqZWN0IHRvIGxvYWQuCiAKIC0gSXNzdWUgIzE4MDI1OiBGaXhlZCBhIHNlZ2ZhdWx0IGluIGlvLkJ1ZmZlcmVkSU9CYXNlLnJlYWRpbnRvKCkgd2hlbiByYXcKICAgc3RyZWFtJ3MgcmVhZCgpIHJldHVybnMgbW9yZSBieXRlcyB0aGFuIHJlcXVlc3RlZC4KQEAgLTExNjAsMjAgKzQ4MjQsNDIgQEAKICAgYmluYXNjaWkuRXJyb3IgaWYgdGhlcmUgYXJlIG5vbi1iMzItYWxwaGFiZXQgY2hhcmFjdGVycyBwcmVzZW50IGluIHRoZSBpbnB1dAogICBzdHJpbmcsIGluc3RlYWQgb2YgYSBUeXBlRXJyb3IuCiAKLS0gSXNzdWUgIzEzNzcyOiBSZXN0b3JlZCBkaXJlY3RvcnkgZGV0ZWN0aW9uIG9mIHRhcmdldHMgaW4gYGBvcy5zeW1saW5rYGAgb24KLSAgV2luZG93cywgd2hpY2ggd2FzIHRlbXBvcmFyaWx5IHJlbW92ZWQgaW4gUHl0aG9uIDMuMi4zIGR1ZSB0byBhbiBpbmNvbXBsZXRlCi0gIGltcGxlbWVudGF0aW9uLiBUaGUgaW1wbGVtZW50YXRpb24gbm93IHdvcmtzIGV2ZW4gaWYgdGhlIHN5bWxpbmsgaXMgY3JlYXRlZAotICBpbiBhIGxvY2F0aW9uIG90aGVyIHRoYW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgorLSBJc3N1ZSAjMTgwNzI6IEltcGxlbWVudCBpbXBvcnRsaWIuYWJjLkluc3BlY3RMb2FkZXIuZ2V0X2NvZGUoKSBhbmQKKyAgaW1wb3J0bGliLmFiYy5FeGVjdXRpb25Mb2FkZXIuZ2V0X2NvZGUoKS4KIAotLSBJc3N1ZSAjMTY5ODY6IEVsZW1lbnRUcmVlIG5vdyBjb3JyZWN0bHkgcGFyc2VzIGEgc3RyaW5nIGlucHV0IG5vdCBvbmx5IHdoZW4KLSAgYW4gaW50ZXJuYWwgWE1MIGVuY29kaW5nIGlzIFVURi04IG9yIFVTLUFTQ0lJLgorLSBJc3N1ZSAjODI0MDogU2V0IHRoZSBTU0xfTU9ERV9BQ0NFUFRfTU9WSU5HX1dSSVRFX0JVRkZFUiBmbGFnIG9uIFNTTAorICBzb2NrZXRzLgorCistIElzc3VlICMxNzI2OTogV29ya2Fyb3VuZCBmb3Igc29ja2V0LmdldGFkZHJpbmZvIGNyYXNoIG9uIE1hY09TIFgKKyAgd2l0aCBwb3J0IE5vbmUgb3IgIjAiIGFuZCBmbGFncyBBSV9OVU1FUklDU0VSVi4KKworLSBJc3N1ZSAjMTY5ODY6IEVsZW1lbnRUcmVlIG5vdyBjb3JyZWN0bHkgd29ya3Mgd2l0aCBzdHJpbmcgaW5wdXQgd2hlbiB0aGUKKyAgaW50ZXJuYWwgWE1MIGVuY29kaW5nIGlzIG5vdCBVVEYtOCBvciBVUy1BU0NJSS4KKworLSBJc3N1ZSAjMTc5OTY6IHNvY2tldCBtb2R1bGUgbm93IGV4cG9zZXMgQUZfTElOSyBjb25zdGFudCBvbiBCU0QgYW5kIE9TWC4KKworLSBJc3N1ZSAjMTc5MDA6IEFsbG93ZWQgcGlja2xpbmcgb2YgcmVjdXJzaXZlIE9yZGVyZWREaWN0cy4gIERlY3JlYXNlZCBwaWNrbGVkCisgIHNpemUgYW5kIHBpY2tsaW5nIHRpbWUuCisKKy0gSXNzdWUgIzE3OTE0OiBBZGQgb3MuY3B1X2NvdW50KCkuIFBhdGNoIGJ5IFlvZ2VzaCBDaGF1ZGhhcmksIGJhc2VkIG9uIGFuCisgIGluaXRpYWwgcGF0Y2ggYnkgVHJlbnQgTmVsc29uLgogCiAtIElzc3VlICMxNzgxMjogRml4ZWQgcXVhZHJhdGljIGNvbXBsZXhpdHkgb2YgYmFzZTY0LmIzMmVuY29kZSgpLgorICBPcHRpbWl6ZSBiYXNlNjQuYjMyZW5jb2RlKCkgYW5kIGJhc2U2NC5iMzJkZWNvZGUoKSAoc3BlZWQgdXAgdG8gM3gpLgogCiAtIElzc3VlICMxNzk4MDogRml4IHBvc3NpYmxlIGFidXNlIG9mIHNzbC5tYXRjaF9ob3N0bmFtZSgpIGZvciBkZW5pYWwgb2YKICAgc2VydmljZSB1c2luZyBjZXJ0aWZpY2F0ZXMgd2l0aCBtYW55IHdpbGRjYXJkcyAoQ1ZFLTIwMTMtMjA5OSkuCiAKLS0gSXNzdWUgIzE3OTgxOiBDbG9zZWQgc29ja2V0IG9uIGVycm9yIGluIFN5c0xvZ0hhbmRsZXIuCistIElzc3VlICMxNTc1ODogRml4IEZpbGVJTy5yZWFkYWxsKCkgc28gaXQgbm8gbG9uZ2VyIGhhcyBPKG4qKjIpIGNvbXBsZXhpdHkuCisKKy0gSXNzdWUgIzE0NTk2OiBUaGUgc3RydWN0LlN0cnVjdCgpIG9iamVjdHMgbm93IHVzZSBhIG1vcmUgY29tcGFjdAorICBpbXBsZW1lbnRhdGlvbi4KKworLSBJc3N1ZSAjMTc5ODE6IGxvZ2dpbmcncyBTeXNMb2dIYW5kbGVyIG5vdyBjbG9zZXMgdGhlIHNvY2tldCB3aGVuIGl0IGNhdGNoZXMKKyAgc29ja2V0IE9TRXJyb3JzLgorCistIElzc3VlICMxNzk2NDogRml4IG9zLnN5c2NvbmYoKTogdGhlIHJldHVybiB0eXBlIG9mIHRoZSBDIHN5c2NvbmYoKSBmdW5jdGlvbgorICBpcyBsb25nLCBub3QgaW50LgogCiAtIEZpeCB0eXBvcyBpbiB0aGUgbXVsdGlwcm9jZXNzaW5nIG1vZHVsZS4KIApAQCAtMTE4MSwxMCArNDg2NywxNjMgQEAKIAogLSBJc3N1ZSAjMTc5Njg6IEZpeCBtZW1vcnkgbGVhayBpbiBvcy5saXN0eGF0dHIoKS4KIAotLSBJc3N1ZSAjMTcyNjk6IFdvcmthcm91bmQgZm9yIHNvY2tldC5nZXRhZGRyaW5mbyBjcmFzaCBvbiBNYWNPUyBYCi0gIHdpdGggcG9ydCBOb25lIG9yICIwIiBhbmQgZmxhZ3MgQUlfTlVNRVJJQ1NFUlYuCistIElzc3VlICMxNzYwNjogRml4ZWQgc3VwcG9ydCBvZiBlbmNvZGVkIGJ5dGUgc3RyaW5ncyBpbiB0aGUgWE1MR2VuZXJhdG9yCisgIGNoYXJhY3RlcnMoKSBhbmQgaWdub3JhYmxlV2hpdGVzcGFjZSgpIG1ldGhvZHMuICBPcmlnaW5hbCBwYXRjaCBieSBTZWJhc3RpYW4KKyAgT3J0aXogVmFzcXVlei4KIAotLSBJc3N1ZSAjMTg2OTg6IEVuc3VyZSBpbXAucmVsb2FkKCkgcmV0dXJucyB0aGUgbW9kdWxlIG91dCBvZiBzeXMubW9kdWxlcy4KKy0gSXNzdWUgIzE3NzMyOiBJZ25vcmUgZGlzdHV0aWxzLmNmZyBvcHRpb25zIHBlcnRhaW5pbmcgdG8gaW5zdGFsbCBwYXRocyBpZiBhCisgIHZpcnR1YWwgZW52aXJvbm1lbnQgaXMgYWN0aXZlLgorCistIElzc3VlICMxNzkxNTogRml4IGludGVyb3BlcmFiaWxpdHkgb2YgeG1sLnNheCB3aXRoIGZpbGUgb2JqZWN0cyByZXR1cm5lZCBieQorICBjb2RlY3Mub3BlbigpLgorCistIElzc3VlICMxNjYwMTogUmVzdGFydGluZyBpdGVyYXRpb24gb3ZlciB0YXJmaWxlIHJlYWxseSByZXN0YXJ0cyByYXRoZXIKKyAgdGhhbiBjb250aW51aW5nIGZyb20gd2hlcmUgaXQgbGVmdCBvZmYuICBQYXRjaCBieSBNaWNoYWVsIEJpcnR3ZWxsLgorCistIElzc3VlICMxNzI4OTogVGhlIHJlYWRsaW5lIG1vZHVsZSBub3cgcGxheXMgbmljZXIgd2l0aCBleHRlcm5hbCBtb2R1bGVzCisgIG9yIGFwcGxpY2F0aW9ucyBjaGFuZ2luZyB0aGUgcmxfY29tcGxldGVyX3dvcmRfYnJlYWtfY2hhcmFjdGVycyBnbG9iYWwKKyAgdmFyaWFibGUuICBJbml0aWFsIHBhdGNoIGJ5IEJyYWRsZXkgRnJvZWhsZS4KKworLSBJc3N1ZSAjMTIxODE6IHNlbGVjdCBtb2R1bGU6IEZpeCBzdHJ1Y3Qga2V2ZW50IGRlZmluaXRpb24gb24gT3BlbkJTRCA2NC1iaXQKKyAgcGxhdGZvcm1zLiBQYXRjaCBieSBGZWRlcmljbyBTY2h3aW5kdC4KKworLSBJc3N1ZSAjMTE4MTY6IG11bHRpcGxlIGltcHJvdmVtZW50cyB0byB0aGUgZGlzIG1vZHVsZTogZ2V0X2luc3RydWN0aW9ucworICBnZW5lcmF0b3IsIGFiaWxpdHkgdG8gcmVkaXJlY3Qgb3V0cHV0IHRvIGEgZmlsZSwgQnl0ZWNvZGUgYW5kIEluc3RydWN0aW9uCisgIGFic3RyYWN0aW9ucy4gUGF0Y2ggYnkgTmljayBDb2dobGFuLCBSeWFuIEtlbGx5IGFuZCBUaG9tYXMgS2x1eXZlci4KKworLSBJc3N1ZSAjMTM4MzE6IEVtYmVkIHN0cmluZ2lmaWNhdGlvbiBvZiByZW1vdGUgdHJhY2ViYWNrIGluIGxvY2FsCisgIHRyYWNlYmFjayByYWlzZWQgd2hlbiBwb29sIHRhc2sgcmFpc2VzIGFuIGV4Y2VwdGlvbi4KKworLSBJc3N1ZSAjMTU1Mjg6IEFkZCB3ZWFrcmVmLmZpbmFsaXplIHRvIHN1cHBvcnQgZmluYWxpemF0aW9uIHVzaW5nCisgIHdlYWtyZWYgY2FsbGJhY2tzLgorCistIElzc3VlICMxNDE3MzogQXZvaWQgY3Jhc2hpbmcgd2hlbiByZWFkaW5nIGEgc2lnbmFsIGhhbmRsZXIgZHVyaW5nCisgIGludGVycHJldGVyIHNodXRkb3duLgorCistIElzc3VlICMxNTkwMjogRml4IGltcC5sb2FkX21vZHVsZSgpIGFjY2VwdGluZyBOb25lIGFzIGEgZmlsZSB3aGVuIGxvYWRpbmcgYW4KKyAgZXh0ZW5zaW9uIG1vZHVsZS4KKworLSBJc3N1ZSAjMTM3MjE6IFNTTFNvY2tldC5nZXRwZWVyY2VydCgpIGFuZCBTU0xTb2NrZXQuZG9faGFuZHNoYWtlKCkgbm93CisgIHJhaXNlIGFuIE9TRXJyb3Igd2l0aCBFTk9UQ09OTiwgaW5zdGVhZCBvZiBhbiBBdHRyaWJ1dGVFcnJvciwgd2hlbiB0aGUKKyAgU1NMU29ja2V0IGlzIG5vdCBjb25uZWN0ZWQuCisKKy0gSXNzdWUgIzE0Njc5OiBhZGQgYW4gX19hbGxfXyAodGhhdCBjb250YWlucyBvbmx5IEhUTUxQYXJzZXIpIHRvIGh0bWwucGFyc2VyLgorCistIElzc3VlICMxNzgwMjogRml4IGFuIFVuYm91bmRMb2NhbEVycm9yIGluIGh0bWwucGFyc2VyLiAgSW5pdGlhbCB0ZXN0cyBieQorICBUaG9tYXMgQmFybG93LgorCistIElzc3VlICMxNzM1ODogTW9kdWxlcyBsb2FkZWQgYnkgaW1wLmxvYWRfc291cmNlKCkgYW5kIGxvYWRfY29tcGlsZWQoKSAoYW5kIGJ5CisgIGV4dGVudGlvbiBsb2FkX21vZHVsZSgpKSBub3cgaGF2ZSBhIGJldHRlciBjaGFuY2Ugb2Ygd29ya2luZyB3aGVuIHJlbG9hZGVkLgorCistIElzc3VlICMxNzgwNDogTmV3IGZ1bmN0aW9uIGBgc3RydWN0Lml0ZXJfdW5wYWNrYGAgYWxsb3dzIGZvciBzdHJlYW1pbmcKKyAgc3RydWN0IHVucGFja2luZy4KKworLSBJc3N1ZSAjMTc4MzA6IFdoZW4ga2V5d29yZC5weSBpcyB1c2VkIHRvIHVwZGF0ZSBhIGtleXdvcmQgZmlsZSwgaXQgbm93CisgIHByZXNlcnZlcyB0aGUgbGluZSBlbmRpbmdzIG9mIHRoZSBvcmlnaW5hbCBmaWxlLgorCistIElzc3VlICMxNzI3MjogTWFraW5nIHRoZSB1cmxsaWIucmVxdWVzdCdzIFJlcXVlc3QuZnVsbF91cmwgYSBkZXNjcmlwdG9yLgorICBGaXhlcyBidWdzIHdpdGggYXNzaWdubWVudCB0byBmdWxsX3VybC4gUGF0Y2ggYnkgRGVtaWFuIEJyZWNodC4KKworLSBJc3N1ZSAjMTczNTM6IFBsaXN0bGliIGVtaXR0ZWQgZW1wdHkgZGF0YSB0YWdzIHdpdGggZGVlcGx5IG5lc3RlZCBkYXRhc3RydWN0dXJlcworCistIElzc3VlICMxMTcxNDogVXNlICd3aXRoJyBzdGF0ZW1lbnRzIHRvIGFzc3VyZSBhIFNlbWFwaG9yZSByZWxlYXNlcyBhCisgIGNvbmRpdGlvbiB2YXJpYWJsZS4gIE9yaWdpbmFsIHBhdGNoIGJ5IFRob21hcyBSYWNoZWwuCisKKy0gSXNzdWUgIzE2NjI0OiBgc3VicHJvY2Vzcy5jaGVja19vdXRwdXRgIG5vdyBhY2NlcHRzIGFuIGBpbnB1dGAgYXJndW1lbnQsCisgIGFsbG93aW5nIHRoZSBzdWJwcm9jZXNzJ3Mgc3RkaW4gdG8gYmUgcHJvdmlkZWQgYXMgYSAoYnl0ZSkgc3RyaW5nLgorICBQYXRjaCBieSBaYWNrIFdlaW5iZXJnLgorCistIElzc3VlICMxNzc5NTogUmV2ZXJ0ZWQgYmFja3dhcmRzLWluY29tcGF0aWJsZSBjaGFuZ2UgaW4gU3lzTG9nSGFuZGxlciB3aXRoCisgIFVuaXggZG9tYWluIHNvY2tldHMuCisKKy0gSXNzdWUgIzE2Njk0OiBBZGQgYSBwdXJlIFB5dGhvbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgb3BlcmF0b3IgbW9kdWxlLgorICBQYXRjaCBieSBaYWNoYXJ5IFdhcmUuCisKKy0gSXNzdWUgIzExMTgyOiByZW1vdmUgdGhlIHVudXNlZCBhbmQgdW5kb2N1bWVudGVkIHB5ZG9jLlNjYW5uZXIgY2xhc3MuCisgIFBhdGNoIGJ5IE1hcnRpbiBNb3JyaXNvbi4KKworLSBJc3N1ZSAjMTc3NDE6IEFkZCBFbGVtZW50VHJlZS5YTUxQdWxsUGFyc2VyLCBhbiBldmVudC1kcml2ZW4gcGFyc2VyIGZvcgorICBub24tYmxvY2tpbmcgYXBwbGljYXRpb25zLgorCistIElzc3VlICMxNzU1NTogRml4IEZvcmtBd2FyZVRocmVhZExvY2sgc28gdGhhdCBzaXplIG9mIGFmdGVyIGZvcmsKKyAgcmVnaXN0cnkgZG9lcyBub3QgZ3JvdyBleHBvbmVudGlhbGx5IHdpdGggZ2VuZXJhdGlvbiBvZiBwcm9jZXNzLgorCistIElzc3VlICMxNzcwNzogZml4IHJlZ3Jlc3Npb24gaW4gbXVsdGlwcm9jZXNzaW5nLlF1ZXVlJ3MgZ2V0KCkgbWV0aG9kIHdoZXJlCisgIGl0IGRpZCBub3QgYmxvY2sgZm9yIHNob3J0IHRpbWVvdXRzLgorCistIElzc3VlICMxNzcyMDogRml4IHRoZSBQeXRob24gaW1wbGVtZW50YXRpb24gb2YgcGlja2xlLlVucGlja2xlciB0byBjb3JyZWN0bHkKKyAgcHJvY2VzcyB0aGUgQVBQRU5EUyBvcGNvZGUgd2hlbiBpdCBpcyB1c2VkIG9uIG5vbi1saXN0IG9iamVjdHMuCisKKy0gSXNzdWUgIzE3MDEyOiBzaHV0aWwud2hpY2goKSBubyBsb25nZXIgZmFsbHMgYmFjayB0byB0aGUgUEFUSCBlbnZpcm9ubWVudAorICB2YXJpYWJsZSBpZiBhbiBlbXB0eSBwYXRoIGFyZ3VtZW50IGlzIHNwZWNpZmllZC4gIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE3NzEwOiBGaXggcGlja2xlIHJhaXNpbmcgYSBTeXN0ZW1FcnJvciBvbiBib2d1cyBpbnB1dC4KKworLSBJc3N1ZSAjMTczNDE6IEluY2x1ZGUgdGhlIGludmFsaWQgbmFtZSBpbiB0aGUgZXJyb3IgbWVzc2FnZXMgZnJvbSByZSBhYm91dAorICBpbnZhbGlkIGdyb3VwIG5hbWVzLgorCistIElzc3VlICMxNzcwMjogb3MuZW52aXJvbiBub3cgcmFpc2VzIEtleUVycm9yIHdpdGggdGhlIG9yaWdpbmFsIGVudmlyb25tZW50CisgIHZhcmlhYmxlIG5hbWUgKHN0ciBvbiBVTklYKSwgaW5zdGVhZCBvZiB1c2luZyB0aGUgZW5jb2RlZCBuYW1lIChieXRlcyBvbgorICBVTklYKS4KKworLSBJc3N1ZSAjMTYxNjM6IE1ha2UgdGhlIGltcG9ydGxpYiBiYXNlZCB2ZXJzaW9uIG9mIHBrZ3V0aWwuaXRlcl9pbXBvcnRlcnMKKyAgd29yayBmb3Igc3VibW9kdWxlcy4gSW5pdGlhbCBwYXRjaCBieSBCZXJrZXIgUGVrc2FnLgorCistIElzc3VlICMxNjgwNDogRml4IGEgYnVnIGluIHRoZSAnc2l0ZScgbW9kdWxlIHRoYXQgY2F1c2VkIHJ1bm5pbmcKKyAgJ3B5dGhvbiAtUyAtbSBzaXRlJyB0byBpbmNvcnJlY3RseSB0aHJvdyBhbiBleGNlcHRpb24uCisKKy0gSXNzdWUgIzE1NDgwOiBSZW1vdmUgdGhlIGRlcHJlY2F0ZWQgYW5kIHVudXNlZCBUWVBFX0lOVDY0IGNvZGUgZnJvbSBtYXJzaGFsLgorICBJbml0aWFsIHBhdGNoIGJ5IERhbmllbCBSaXRpLgorCistIElzc3VlICMyMTE4OiBTTVRQRXhjZXB0aW9uIGlzIG5vdyBhIHN1YmNsYXNzIG9mIE9TRXJyb3IuCisKKy0gSXNzdWUgIzE3MDE2OiBHZXQgcmlkIG9mIHBvc3NpYmxlIHBvaW50ZXIgd3JhcGFyb3VuZHMgYW5kIGludGVnZXIgb3ZlcmZsb3dzCisgIGluIHRoZSByZSBtb2R1bGUuICBQYXRjaCBieSBOaWNrb2xhaSBaZWxkb3ZpY2guCisKKy0gSXNzdWUgIzE2NjU4OiBhZGQgbWlzc2luZyByZXR1cm4gdG8gSFRUUENvbm5lY3Rpb24uc2VuZCgpLgorICBQYXRjaCBieSBKZWZmIEtudXBwLgorCistIElzc3VlICM5NTU2OiB0aGUgbG9nZ2luZyBwYWNrYWdlIG5vdyBhbGxvd3Mgc3BlY2lmeWluZyBhIHRpbWUtb2YtZGF5IGZvciBhCisgIFRpbWVkUm90YXRpbmdGaWxlSGFuZGxlciB0byByb3RhdGUuCisKKy0gSXNzdWUgIzE0OTcxOiB1bml0dGVzdCB0ZXN0IGRpc2NvdmVyeSBubyBsb25nZXIgZ2V0cyBjb25mdXNlZCB3aGVuIGEgZnVuY3Rpb24KKyAgaGFzIGEgZGlmZmVyZW50IF9fbmFtZV9fIHRoYW4gaXRzIG5hbWUgaW4gdGhlIFRlc3RDYXNlIGNsYXNzIGRpY3Rpb25hcnkuCisKKy0gSXNzdWUgIzE3NDg3OiBUaGUgd2F2ZSBnZXRwYXJhbXMgbWV0aG9kIG5vdyByZXR1cm5zIGEgbmFtZWR0dXBsZSByYXRoZXIgdGhhbgorICBhIHBsYWluIHR1cGxlLgorCistIElzc3VlICMxNzY3NTogc29ja2V0IHJlcHIoKSBwcm92aWRlcyBsb2NhbCBhbmQgcmVtb3RlIGFkZHJlc3NlcyAoaWYgYW55KS4KKyAgUGF0Y2ggYnkgR2lhbXBhb2xvIFJvZG9sYScKKworLSBJc3N1ZSAjMTcwOTM6IE1ha2UgdGhlIEFCQ3MgaW4gaW1wb3J0bGliLmFiYyBwcm92aWRlIGRlZmF1bHQgdmFsdWVzIG9yIHJhaXNlCisgIHJlYXNvbmFibGUgZXhjZXB0aW9ucyBmb3IgdGhlaXIgbWV0aG9kcyB0byBtYWtlIHRoZW0gbW9yZSBhbWVuYWJsZSB0byBzdXBlcigpCisgIGNhbGxzLgorCistIElzc3VlICMxNzU2NjogTWFrZSBpbXBvcnRsaWIuYWJjLkxvYWRlci5tb2R1bGVfcmVwcigpIG9wdGlvbmFsIGluc3RlYWQgb2YgYW4KKyAgYWJzdHJhY3RtZXRob2Q7IG5vdyBpdCByYWlzZXMgTm90SW1wbGVtZW50ZWRFcnJvciBzbyBhcyB0byBiZSBpZ25vcmVkIGJ5IGRlZmF1bHQuCisKKy0gSXNzdWUgIzE3Njc4OiBSZW1vdmUgdGhlIHVzZSBvZiBkZXByZWNhdGVkIG1ldGhvZCBpbiBodHRwL2Nvb2tpZWphci5weSBieQorICBjaGFuZ2luZyB0aGUgY2FsbCB0byBnZXRfb3JpZ2luX3JlcV9ob3N0KCkgdG8gb3JpZ2luX3JlcV9ob3N0LgorCistIElzc3VlICMxNzY2NjogRml4IHJlYWRpbmcgZ3ppcCBmaWxlcyB3aXRoIGFuIGV4dHJhIGZpZWxkLgorCistIElzc3VlICMxNjQ3NTogU3VwcG9ydCBvYmplY3QgaW5zdGFuY2luZywgcmVjdXJzaW9uIGFuZCBpbnRlcm5lZCBzdHJpbmdzCisgIGluIG1hcnNoYWwKKworLSBJc3N1ZSAjMTc1MDI6IFByb2Nlc3MgREVGQVVMVCB2YWx1ZXMgaW4gbW9jayBzaWRlX2VmZmVjdCB0aGF0IHJldHVybnMgaXRlcmF0b3IuCisKKy0gSXNzdWUgIzE2Nzk1OiBPbiB0aGUgYXN0LmFyZ3VtZW50cyBvYmplY3QsIHVuaWZ5IHZhcmFyZyB3aXRoIHZhcmFyZ2Fubm90YXRpb24KKyAgYW5kIGt3YXJnIGFuZCBrd2FyZ2Fubm90YXRpb24uIENoYW5nZSB0aGUgY29sdW1uIG9mZnNldCBvZiBhc3QuQXR0cmlidXRlIHRvIGJlCisgIGF0IHRoZSBhdHRyaWJ1dGUgbmFtZS4KKworLSBJc3N1ZSAjMTc0MzQ6IFByb3Blcmx5IHJhaXNlIGEgU3ludGF4RXJyb3Igd2hlbiBhIHN0cmluZyBvY2N1cnMgYmV0d2VlbiBmdXR1cmUKKyAgaW1wb3J0cy4KKworLSBJc3N1ZSAjMTcxMTc6IEltcG9ydCBhbmQgQGltcG9ydGxpYi51dGlsLnNldF9sb2FkZXIgbm93IHNldCBfX2xvYWRlcl9fIHdoZW4KKyAgaXQgaGFzIGEgdmFsdWUgb2YgTm9uZSBvciB0aGUgYXR0cmlidXRlIGRvZXNuJ3QgZXhpc3QuCisKKy0gSXNzdWUgIzE3MDMyOiBUaGUgImdsb2JhbCIgaW4gdGhlICJOYW1lRXJyb3I6IGdsb2JhbCBuYW1lICd4JyBpcyBub3QgZGVmaW5lZCIKKyAgZXJyb3IgbWVzc2FnZSBoYXMgYmVlbiByZW1vdmVkLiAgUGF0Y2ggYnkgUmFtIFJhY2h1bS4KIAogLSBJc3N1ZSAjMTgwODA6IFdoZW4gYnVpbGRpbmcgYSBDIGV4dGVuc2lvbiBtb2R1bGUgb24gT1MgWCwgaWYgdGhlIGNvbXBpbGVyCiAgIGlzIG92ZXJyaWRlbiB3aXRoIHRoZSBDQyBlbnZpcm9ubWVudCB2YXJpYWJsZSwgdXNlIHRoZSBuZXcgY29tcGlsZXIgYXMKQEAgLTExOTQsMzEgKzUwMzMsNzM0IEBACiAtIElzc3VlICMxODExMzogRml4ZWQgYSByZWZjb3VudCBsZWFrIGluIHRoZSBjdXJzZXMucGFuZWwgbW9kdWxlJ3MKICAgc2V0X3VzZXJwdHIoKSBtZXRob2QuICBSZXBvcnRlZCBieSBBdHN1byBJc2hpbW90by4KIAotLSBJc3N1ZSAjMTg4NDk6IEZpeGVkIGEgV2luZG93cy1zcGVjaWZpYyB0ZW1wZmlsZSBidWcgd2hlcmUgY29sbGlzaW9uIHdpdGggYW4KLSAgZXhpc3RpbmcgZGlyZWN0b3J5IGNhdXNlZCBta3N0ZW1wIGFuZCByZWxhdGVkIEFQSXMgdG8gZmFpbCBpbnN0ZWFkIG9mCi0gIHJldHJ5aW5nLiBSZXBvcnQgYW5kIGZpeCBieSBWbGFkIFNoY2hlcmJpbmEuCistIEltcGxlbWVudCBQRVAgNDQzICJTaW5nbGUtZGlzcGF0Y2ggZ2VuZXJpYyBmdW5jdGlvbnMiLgogCi0tIElzc3VlICMxOTQwMDogUHJldmVudCBleHRlbnNpb24gbW9kdWxlIGJ1aWxkIGZhaWx1cmVzIHdpdGggWGNvZGUgNSBvbiBPUyBYCi0gIDEwLjgrIHdoZW4gdXNpbmcgYSB1bml2ZXJzYWwgUHl0aG9uIHRoYXQgaW5jbHVkZWQgYSBQUEMgYXJjaGl0ZWN0dXJlLAotICBzdWNoIGFzIHdpdGggYSBweXRob24ub3JnIDMyLWJpdC1vbmx5IGJpbmFyeSBpbnN0YWxsZXIuCistIEltcGxlbWVudCBQRVAgNDM1ICJBZGRpbmcgYW4gRW51bSB0eXBlIHRvIHRoZSBQeXRob24gc3RhbmRhcmQgbGlicmFyeSIuCiAKLUMgQVBJCi0tLS0tLQorLSBJc3N1ZSAjMTU1OTY6IEZhc3RlciBwaWNrbGluZyBvZiB1bmljb2RlIHN0cmluZ3MuCiAKLS0gSXNzdWUgIzE4MzUxOiBGaXggdmFyaW91cyBpc3N1ZXMgd2l0aCBhIGhlbHBlciBmdW5jdGlvbiBpbiBpbXBvcnRsaWIgdXNlZAotICBieSBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZVdpdGhQYXRobmFtZXMoKSAoYW5kIHRodXMgYnkgZXh0ZW5zaW9uCi0gIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlKCkgYW5kIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlRXgoKSkuCistIElzc3VlICMxNzU3MjogQXZvaWQgY2hhaW5lZCBleGNlcHRpb25zIHdoZW4gcGFzc2luZyBiYWQgZGlyZWN0aXZlcyB0bworICB0aW1lLnN0cnB0aW1lKCkuICBJbml0aWFsIHBhdGNoIGJ5IENsYXVkaXUgUG9wYS4KKworLSBJc3N1ZSAjMTc0MzU6IHRocmVhZGluZy5UaW1lcidzIF9faW5pdF9fIG1ldGhvZCBubyBsb25nZXIgdXNlcyBtdXRhYmxlCisgIGRlZmF1bHQgdmFsdWVzIGZvciB0aGUgYXJncyBhbmQga3dhcmdzIHBhcmFtZXRlcnMuCisKKy0gSXNzdWUgIzE3NTI2OiBmaXggYW4gSW5kZXhFcnJvciByYWlzZWQgd2hpbGUgcGFzc2luZyBjb2RlIHdpdGhvdXQgZmlsZW5hbWUgdG8KKyAgaW5zcGVjdC5maW5kc291cmNlKCkuICBJbml0aWFsIHBhdGNoIGJ5IFR5bGVyIERveWxlLgorCistIElzc3VlICMxNzU0MDogQWRkZWQgc3R5bGUgcGFyYW1ldGVyIHRvIGxvZ2dpbmcgZm9ybWF0dGVyIGNvbmZpZ3VyYXRpb24gYnkgZGljdC4KKworLSBJc3N1ZSAjMTY2OTI6IFRoZSBzc2wgbW9kdWxlIG5vdyBzdXBwb3J0cyBUTFMgMS4xIGFuZCBUTFMgMS4yLiAgSW5pdGlhbAorICBwYXRjaCBieSBNaWNoZWxlIE9ycsO5LgorCistIElzc3VlICMxNzAyNTogbXVsdGlwcm9jZXNzaW5nOiBSZWR1Y2UgUXVldWUgYW5kIFNpbXBsZVF1ZXVlIGNvbnRlbnRpb24uCisKKy0gSXNzdWUgIzE3NTM2OiBBZGQgdG8gd2ViYnJvd3NlcidzIGJyb3dzZXIgbGlzdDogd3d3LWJyb3dzZXIsIHgtd3d3LWJyb3dzZXIsCisgIGljZXdlYXNlbCwgaWNlYXBlLgorCistIElzc3VlICMxNzE1MDogcHByaW50IG5vdyB1c2VzIGxpbmUgY29udGludWF0aW9ucyB0byB3cmFwIGxvbmcgc3RyaW5nCisgIGxpdGVyYWxzLgorCistIElzc3VlICMxNzQ4ODogQ2hhbmdlIHRoZSBzdWJwcm9jZXNzLlBvcGVuIGJ1ZnNpemUgcGFyYW1ldGVyIGRlZmF1bHQgdmFsdWUKKyAgZnJvbSB1bmJ1ZmZlcmVkICgwKSB0byBidWZmZXJpbmcgKC0xKSB0byBtYXRjaCB0aGUgYmVoYXZpb3IgZXhpc3RpbmcgY29kZQorICBleHBlY3RzIGFuZCBtYXRjaCB0aGUgYmVoYXZpb3Igb2YgdGhlIHN1YnByb2Nlc3MgbW9kdWxlIGluIFB5dGhvbiAyIHRvIGF2b2lkCisgIGludHJvZHVjaW5nIGhhcmQgdG8gdHJhY2sgZG93biBidWdzLgorCistIElzc3VlICMxNzUyMTogQ29ycmVjdGVkIG5vbi1lbmFibGluZyBvZiBsb2dnZXIgZm9sbG93aW5nIHR3byBjYWxscyB0bworICBmaWxlQ29uZmlnKCkuCisKKy0gSXNzdWUgIzE3NTA4OiBDb3JyZWN0ZWQgbG9nZ2luZyBNZW1vcnlIYW5kbGVyIGNvbmZpZ3VyYXRpb24gaW4gZGljdENvbmZpZygpCisgIHdoZXJlIHRoZSB0YXJnZXQgaGFuZGxlciB3YXNuJ3QgY29uZmlndXJlZCBmaXJzdC4KKworLSBJc3N1ZSAjMTcyMDk6IGN1cnNlcy53aW5kb3cuZ2V0X3djaCgpIG5vdyBjb3JyZWN0bHkgaGFuZGxlcyBLZXlib2FyZEludGVycnVwdAorICAoQ1RSTCtjKS4KKworLSBJc3N1ZSAjNTcxMzogc210cGxpYiBub3cgaGFuZGxlcyA0MjEgKGNsb3NpbmcgY29ubmVjdGlvbikgZXJyb3IgY29kZXMgd2hlbgorICBzZW5kaW5nIG1haWwgYnkgY2xvc2luZyB0aGUgc29ja2V0IGFuZCByZXBvcnRpbmcgdGhlIDQyMSBlcnJvciBjb2RlIHZpYSB0aGUKKyAgZXhjZXB0aW9uIGFwcHJvcHJpYXRlIHRvIHRoZSBjb21tYW5kIHRoYXQgcmVjZWl2ZWQgdGhlIGVycm9yIHJlc3BvbnNlLgorCistIElzc3VlICMxNjk5NzogdW5pdHRlc3QuVGVzdENhc2Ugbm93IHByb3ZpZGVzIGEgc3ViVGVzdCgpIGNvbnRleHQgbWFuYWdlcgorICB0byBwcm9jZWR1cmFsbHkgZ2VuZXJhdGUsIGluIGFuIGVhc3kgd2F5LCBzbWFsbCB0ZXN0IGluc3RhbmNlcy4KKworLSBJc3N1ZSAjMTc0ODU6IEFsc28gZGVsZXRlIHRoZSBSZXF1ZXN0IENvbnRlbnQtTGVuZ3RoIGhlYWRlciBpZiB0aGUgZGF0YQorICBhdHRyaWJ1dGUgaXMgZGVsZXRlZC4gIChGb2xsb3cgb24gdG8gaXNzdWUgSXNzdWUgIzE2NDY0KS4KKworLSBJc3N1ZSAjMTU5Mjc6IENWUyBub3cgY29ycmVjdGx5IHBhcnNlcyBlc2NhcGVkIG5ld2xpbmVzIGFuZCBjYXJyaWFnZQorICB3aGVuIHBhcnNpbmcgd2l0aCBxdW90aW5nIHR1cm5lZCBvZmYuCisKKy0gSXNzdWUgIzE3NDY3OiBhZGQgcmVhZGxpbmUgYW5kIHJlYWRsaW5lcyBzdXBwb3J0IHRvIG1vY2tfb3BlbiBpbgorICB1bml0dGVzdC5tb2NrLgorCistIElzc3VlICMxMzI0ODogcmVtb3ZlZCBkZXByZWNhdGVkIGFuZCB1bmRvY3VtZW50ZWQgZGlmZmxpYi5pc2JqdW5rLAorICBpc2Jwb3B1bGFyLgorCistIElzc3VlICMxNzE5MjogVXBkYXRlIHRoZSBjdHlwZXMgbW9kdWxlJ3MgbGliZmZpIHRvIHYzLjAuMTMuICBUaGlzCisgIHNwZWNpZmljYWxseSBhZGRyZXNzZXMgYSBzdGFjayBtaXNhbGlnbm1lbnQgaXNzdWUgb24geDg2IGFuZCBpc3N1ZXMgb24KKyAgc29tZSBtb3JlIHJlY2VudCBwbGF0Zm9ybXMuCisKKy0gSXNzdWUgIzg4NjI6IEZpeGVkIGN1cnNlcyBjbGVhbnVwIHdoZW4gZ2V0a2V5IGlzIGludGVycnB1dGVkIGJ5IGEgc2lnbmFsLgorCistIElzc3VlICMxNzQ0MzogaW1hcGxpYi5JTUFQNF9zdHJlYW0gd2FzIHVzaW5nIHRoZSBkZWZhdWx0IHVuYnVmZmVyZWQgSU8KKyAgaW4gc3VicHJvY2VzcywgYnV0IHRoZSBpbWFwIGNvZGUgYXNzdW1lcyBidWZmZXJlZCBJTy4gIEluIFB5dGhvbjIgdGhpcworICB3b3JrZWQgYnkgYWNjaWRlbnQuICBJTUFQNF9zdHJlYW0gbm93IGV4cGxpY2l0bHkgdXNlcyBidWZmZXJlZCBJTy4KKworLSBJc3N1ZSAjMTc0NzY6IEZpeGVkIHJlZ3Jlc3Npb24gcmVsYXRpdmUgdG8gUHl0aG9uMiBpbiB1bmRvY3VtZW50ZWQgcHlkb2MKKyAgJ2FsbG1ldGhvZHMnOyBpdCB3YXMgbWlzc2luZyB1bmJvdW5kIG1ldGhvZHMgb24gdGhlIGNsYXNzLgorCistIElzc3VlICMxNzQ3NDogUmVtb3ZlIHRoZSBkZXByZWNhdGVkIG1ldGhvZHMgb2YgUmVxdWVzdCBjbGFzcy4KKworLSBJc3N1ZSAjMTY3MDk6IHVuaXR0ZXN0IGRpc2NvdmVyIG9yZGVyIGlzIG5vLWxvbmdlciBmaWxlc3lzdGVtIHNwZWNpZmljLiBQYXRjaAorICBieSBKZWZmIFJhbW5hbmkuCisKKy0gVXNlIHRoZSBIVFRQUyBQeVBJIHVybCBmb3IgdXBsb2FkLCBvdmVycmlkaW5nIGFueSBwbGFpbiBIVFRQIFVSTCBpbiBweXBpcmMuCisKKy0gSXNzdWUgIzUwMjQ6IHNuZGhkci53aGljaGhkciBub3cgcmV0dXJucyB0aGUgZnJhbWUgY291bnQgZm9yIFdBViBmaWxlcworICByYXRoZXIgdGhhbiAtMS4KKworLSBJc3N1ZSAjMTc0NjA6IFJlbW92ZSB0aGUgc3RyaWN0IGFyZ3VtZW50IG9mIEhUVFBDb25uZWN0aW9uIGFuZCByZW1vdmluZyB0aGUKKyAgRGVwcmVjYXRpb25XYXJuaW5nIGJlaW5nIGlzc3VlZCBmcm9tIDMuMiBvbndhcmRzLgorCistIElzc3VlICMxNjg4MDogRG8gbm90IGFzc3VtZSBfaW1wLmxvYWRfZHluYW1pYygpIGlzIGRlZmluZWQgaW4gdGhlIGltcCBtb2R1bGUuCisKKy0gSXNzdWUgIzE2Mzg5OiBGaXhlZCBhIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24gcmVsYXRpdmUgdG8gUHl0aG9uIDMuMSBpbiB0aGUKKyAgY2FjaGluZyBvZiBjb21waWxlZCByZWd1bGFyIGV4cHJlc3Npb25zLgorCistIEFkZGVkIG1pc3NpbmcgRmVlZFBhcnNlciBhbmQgQnl0ZXNGZWVkUGFyc2VyIHRvIGVtYWlsLnBhcnNlci5fX2FsbF9fLgorCistIElzc3VlICMxNzQzMTogRml4IG1pc3NpbmcgaW1wb3J0IG9mIEJ5dGVzRmVlZFBhcnNlciBpbiBlbWFpbC5wYXJzZXIuCisKKy0gSXNzdWUgIzEyOTIxOiBodHRwLnNlcnZlcidzIHNlbmRfZXJyb3IgdGFrZXMgYW4gZXhwbGFpbiBhcmd1bWVudCB0byBzZW5kIG1vcmUKKyAgaW5mb3JtYXRpb24gaW4gcmVzcG9uc2UuIFBhdGNoIGNvbnRyaWJ1dGVkIGJ5IEthcmwuCisKKy0gSXNzdWUgIzE3NDE0OiBBZGQgdGltZWl0LCByZXBlYXQsIGFuZCBkZWZhdWx0X3RpbWVyIHRvIHRpbWVpdC5fX2FsbF9fLgorCistIElzc3VlICMxMjg1MDg2OiBHZXQgcmlkIG9mIHRoZSByZWZjb3VudGluZyBoYWNrIGFuZCBzcGVlZCB1cAorICB1cmxsaWIucGFyc2UudW5xdW90ZSgpIGFuZCB1cmxsaWIucGFyc2UudW5xdW90ZV90b19ieXRlcygpLgorCistIElzc3VlICMxNzA5OTogSGF2ZSBpbXBvcnRsaWIuZmluZF9sb2FkZXIoKSByYWlzZSBWYWx1ZUVycm9yIHdoZW4gX19sb2FkZXJfXworICBpcyBub3Qgc2V0LCBoYXJtb25pemluZyB3aXRoIHdoYXQgaGFwcGVucyB3aGVuIHRoZSBhdHRyaWJ1dGUgaXMgc2V0IHRvIE5vbmUuCisKKy0gRXhwb3NlIHRoZSBPX1BBVEggY29uc3RhbnQgaW4gdGhlIG9zIG1vZHVsZSBpZiBpdCBpcyBhdmFpbGFibGUuCisKKy0gSXNzdWUgIzE3MzY4OiBGaXggYW4gb2ZmLWJ5LW9uZSBlcnJvciBpbiB0aGUgUHl0aG9uIEpTT04gZGVjb2RlciB0aGF0IGNhdXNlZAorICBhIGZhaWx1cmUgd2hpbGUgZGVjb2RpbmcgZW1wdHkgb2JqZWN0IGxpdGVyYWxzIHdoZW4gb2JqZWN0X3BhaXJzX2hvb2sgd2FzCisgIHNwZWNpZmllZC4KKworLSBJc3N1ZSAjMTczODU6IEZpeCBxdWFkcmF0aWMgYmVoYXZpb3IgaW4gdGhyZWFkaW5nLkNvbmRpdGlvbi4gIFRoZSBGSUZPCisgIHF1ZXVlIG5vdyB1c2VzIGEgZGVxdWUgaW5zdGVhZCBvZiBhIGxpc3QuCisKKy0gSXNzdWUgIzE1ODA2OiBBZGQgY29udGV4dGxpYi5pZ25vcmUoKS4gIFRoaXMgY3JlYXRlcyBhIGNvbnRleHQgbWFuYWdlciB0bworICBpZ25vcmUgc3BlY2lmaWVkIGV4Y2VwdGlvbnMsIHJlcGxhY2luZyB0aGUgImV4Y2VwdCBTb21lRXhjZXB0aW9uOiBwYXNzIiBpZGlvbS4KKworLSBJc3N1ZSAjMTQ2NDU6IFRoZSBlbWFpbCBnZW5lcmF0b3IgY2xhc3NlcyBub3cgcHJvZHVjZSBvdXRwdXQgdXNpbmcgdGhlCisgIHNwZWNpZmllZCBsaW5lc2VwIHRocm91Z2hvdXQuICBQcmV2aW91c2x5IGlmIHRoZSBwcm9sb2csIGVwaWxvZywgb3IKKyAgYm9keSB3ZXJlIHN0b3JlZCB3aXRoIGEgZGlmZmVyZW50IGxpbmVzZXAsIHRoYXQgbGluZXNlcCB3YXMgdXNlZC4gIFRoaXMKKyAgZml4IGNvcnJlY3RzIGFuIFJGQyBub24tY29tcGxpYW5jZSBpc3N1ZSB3aXRoIHNtdHBsaWIuc2VuZF9tZXNzYWdlLgorCistIElzc3VlICMxNzI3ODogRml4IGEgY3Jhc2ggaW4gaGVhcHEuaGVhcHB1c2goKSBhbmQgaGVhcHEuaGVhcHBvcCgpIHdoZW4KKyAgdGhlIGxpc3QgaXMgYmVpbmcgcmVzaXplZCBjb25jdXJyZW50bHkuCisKKy0gSXNzdWUgIzE2OTYyOiBVc2UgZ2V0ZGVudHM2NCBpbnN0ZWFkIG9mIHRoZSBvYnNvbGV0ZSBnZXRkZW50cyBzeXNjYWxsCisgIGluIHRoZSBzdWJwcm9jZXNzIG1vZHVsZSBvbiBMaW51eC4KKworLSBJc3N1ZSAjMTY5MzU6IHVuaXR0ZXN0IG5vdyBjb3VudHMgdGhlIG1vZHVsZSBhcyBza2lwcGVkIGlmIGl0IHJhaXNlcyBTa2lwVGVzdCwKKyAgaW5zdGVhZCBvZiBjb3VudGluZyBpdCBhcyBhbiBlcnJvci4gIFBhdGNoIGJ5IFphY2hhcnkgV2FyZS4KKworLSBJc3N1ZSAjMTcwMTg6IE1ha2UgUHJvY2Vzcy5qb2luKCkgcmV0cnkgaWYgb3Mud2FpdHBpZCgpIGZhaWxzIHdpdGggRUlOVFIuCisKKy0gSXNzdWUgIzE3MjIzOiBhcnJheSBtb2R1bGU6IEZpeCBhIGNyYXNoZXIgd2hlbiBjb252ZXJ0aW5nIGFuIGFycmF5IGNvbnRhaW5pbmcKKyAgaW52YWxpZCBjaGFyYWN0ZXJzIChvdXRzaWRlIHJhbmdlIFtVKzAwMDA7IFUrMTBmZmZmXSkgdG8gVW5pY29kZToKKyAgcmVwcihhcnJheSksIHN0cihhcnJheSkgYW5kIGFycmF5LnRvdW5pY29kZSgpLiBQYXRjaCB3cml0dGVuIGJ5IE1hbnVlbCBKYWNvYi4KKworLSBJc3N1ZSAjMTcxOTc6IHByb2ZpbGUvY1Byb2ZpbGUgbW9kdWxlcyByZWZhY3RvcmVkIHNvIHRoYXQgY29kZSBvZiBydW4oKSBhbmQKKyAgcnVuY3R4KCkgdXRpbGl0eSBmdW5jdGlvbnMgaXMgbm90IGR1cGxpY2F0ZWQgaW4gYm90aCBtb2R1bGVzLgorCistIElzc3VlICMxNDcyMDogc3FsaXRlMzogQ29udmVydCBkYXRldGltZSBtaWNyb3NlY29uZHMgY29ycmVjdGx5LgorICBQYXRjaCBieSBMb3dlIFRoaWRlcm1hbi4KKworLSBJc3N1ZSAjMTUxMzI6IEFsbG93IGEgbGlzdCBmb3IgdGhlIGRlZmF1bHRUZXN0IGFyZ3VtZW50IG9mCisgIHVuaXR0ZXN0LlRlc3RQcm9ncmFtLiBQYXRjaCBieSBKeXJraSBQdWxsaWFpbmVuLgorCistIElzc3VlICMxNzIyNTogSlNPTiBkZWNvZGVyIG5vdyBjb3VudHMgY29sdW1ucyBpbiB0aGUgZmlyc3QgbGluZSBzdGFydGluZworICB3aXRoIDEsIGFzIGluIG90aGVyIGxpbmVzLgorCistIElzc3VlICM2NjIzOiBBZGRlZCBleHBsaWNpdCBEZXByZWNhdGlvbldhcm5pbmcgZm9yIGZ0cGxpYi5uZXRyYywgd2hpY2ggaGFzCisgIGJlZW4gZGVwcmVjYXRlZCBhbmQgdW5kb2N1bWVudGVkIGZvciBhIGxvbmcgdGltZS4KKworLSBJc3N1ZSAjMTM3MDA6IEZpeCBieXRlL3N0cmluZyBoYW5kbGluZyBpbiBpbWFwbGliIGF1dGhlbnRpY2F0aW9uIHdoZW4gYW4KKyAgYXV0aG9iamVjdCBpcyBzcGVjaWZpZWQuCisKKy0gSXNzdWUgIzEzMTUzOiBUa2ludGVyIGZ1bmN0aW9ucyBub3cgcmFpc2UgVGNsRXJyb3IgaW5zdGVhZCBvZiBWYWx1ZUVycm9yIHdoZW4KKyAgYSBzdHJpbmcgYXJndW1lbnQgY29udGFpbnMgbm9uLUJNUCBjaGFyYWN0ZXIuCisKKy0gSXNzdWUgIzk2Njk6IFByb3RlY3QgcmUgYWdhaW5zdCBpbmZpbml0ZSBsb29wcyBvbiB6ZXJvLXdpZHRoIG1hdGNoaW5nIGluCisgIG5vbi1ncmVlZHkgcmVwZWF0LiAgUGF0Y2ggYnkgTWF0dGhldyBCYXJuZXR0LgorCistIElzc3VlICMxMzE2OTogVGhlIG1heGltYWwgcmVwZXRpdGlvbiBudW1iZXIgaW4gYSByZWd1bGFyIGV4cHJlc3Npb24gaGFzIGJlZW4KKyAgaW5jcmVhc2VkIGZyb20gNjU1MzQgdG8gMjE0NzQ4MzY0NyAob24gMzItYml0IHBsYXRmb3JtKSBvciA0Mjk0OTY3Mjk0IChvbgorICA2NC1iaXQpLgorCistIElzc3VlICMxNzE0MzogRml4IGEgbWlzc2luZyBpbXBvcnQgaW4gdGhlIHRyYWNlIG1vZHVsZS4gIEluaXRpYWwgcGF0Y2ggYnkKKyAgQmVya2VyIFBla3NhZy4KKworLSBJc3N1ZSAjMTUyMjA6IGVtYWlsLmZlZWRwYXJzZXIncyBsaW5lIHNwbGl0dGluZyBhbGdvcml0aG0gaXMgbm93IHNpbXBsZXIgYW5kCisgIGZhc3Rlci4KKworLSBJc3N1ZSAjMTY3NDM6IEZpeCBtbWFwIG92ZXJmbG93IGNoZWNrIG9uIDMyIGJpdCBXaW5kb3dzLgorCistIElzc3VlICMxNjk5Njogd2ViYnJvd3NlciBtb2R1bGUgbm93IHVzZXMgc2h1dGlsLndoaWNoKCkgdG8gZmluZCBhCisgIHdlYi1icm93c2VyIG9uIHRoZSBleGVjdXRhYmxlIHNlYXJjaCBwYXRoLgorCistIElzc3VlICMxNjgwMDogdGVtcGZpbGUuZ2V0dGVtcGRpcigpIG5vIGxvbmdlciBsZWZ0IHRlbXBvcmFyeSBmaWxlcyB3aGVuCisgIHRoZSBkaXNrIGlzIGZ1bGwuICBPcmlnaW5hbCBwYXRjaCBieSBBbWlyIFN6ZWtlbHkuCisKKy0gSXNzdWUgIzE3MTkyOiBJbXBvcnQgbGliZmZpLTMuMC4xMi4KKworLSBJc3N1ZSAjMTY1NjQ6IEZpeGVkIHJlZ3Jlc3Npb24gcmVsYXRpdmUgdG8gUHl0aG9uMiBpbiB0aGUgb3BlcmF0aW9uIG9mCisgIGVtYWlsLmVuY29kZXJzLmVuY29kZV83b3I4Yml0IHdoZW4gdXNlZCB3aXRoIGJpbmFyeSBkYXRhLgorCistIElzc3VlICMxNzA1MjogdW5pdHRlc3QgZGlzY292ZXJ5IHNob3VsZCB1c2Ugc2VsZi50ZXN0TG9hZGVyLgorCistIElzc3VlICM0NTkxOiBVaWQgYW5kIGdpZCB2YWx1ZXMgbGFyZ2VyIHRoYW4gMioqMzEgYXJlIHN1cHBvcnRlZCBub3cuCisKKy0gSXNzdWUgIzE3MTQxOiByYW5kb20udm9ubWlzZXN2YXJpYXRlKCkgbm8gbG9uZ2VyIGhhbmdzIGZvciBsYXJnZSBrYXBwYXMuCisKKy0gSXNzdWUgIzE3MTQ5OiBGaXggcmFuZG9tLnZvbm1pc2VzdmFyaWF0ZSB0byBhbHdheXMgcmV0dXJuIHJlc3VsdHMgaW4KKyAgWzAsIDIqbWF0aC5waV0uCisKKy0gSXNzdWUgIzE0NzA1NDg6IFhNTEdlbmVyYXRvciBub3cgd29ya3Mgd2l0aCBiaW5hcnkgb3V0cHV0IHN0cmVhbXMuCisKKy0gSXNzdWUgIzY5NzU6IG9zLnBhdGgucmVhbHBhdGgoKSBub3cgY29ycmVjdGx5IHJlc29sdmVzIG11bHRpcGxlIG5lc3RlZAorICBzeW1saW5rcyBvbiBQT1NJWCBwbGF0Zm9ybXMuCisKKy0gSXNzdWUgIzEzNzczOiBzcWxpdGUzLmNvbm5lY3QoKSBnZXRzIGEgbmV3IGB1cmlgIHBhcmFtZXRlciB0byBwYXNzIHRoZQorICBmaWxlbmFtZSBhcyBhIFVSSSwgYWxsb3dpbmcgdG8gcGFzcyBjdXN0b20gb3B0aW9ucy4KKworLSBJc3N1ZSAjMTY1NjQ6IEZpeGVkIHJlZ3Jlc3Npb24gcmVsYXRpdmUgdG8gUHl0aG9uMiBpbiB0aGUgb3BlcmF0aW9uIG9mCisgIGVtYWlsLmVuY29kZXJzLmVuY29kZV9ub29wIHdoZW4gdXNlZCB3aXRoIGJpbmFyeSBkYXRhLgorCistIElzc3VlICMxMDM1NTogVGhlIG1vZGUsIG5hbWUsIGVuY29kaW5nIGFuZCBuZXdsaW5lcyBwcm9wZXJ0aWVzIG5vdyB3b3JrIG9uCisgIFNwb29sZWRUZW1wb3JhcnlGaWxlIG9iamVjdHMgZXZlbiB3aGVuIHRoZXkgaGF2ZSBub3QgeWV0IHJvbGxlZCBvdmVyLgorICBPYnNvbGV0ZSBtZXRob2QgeHJlYWRsaW5lICh3aGljaCBoYXMgbmV2ZXIgd29ya2VkIGluIFB5dGhvbiAzKSBoYXMgYmVlbgorICByZW1vdmVkLgorCistIElzc3VlICMxNjY4NjogRml4ZWQgYSBsb3Qgb2YgYnVncyBpbiBhdWRpb29wIG1vZHVsZS4gIEZpeGVkIGNyYXNoZXMgaW4KKyAgYXZncHAoKSwgbWF4cHAoKSBhbmQgcmF0ZWN2KCkuICBGaXhlZCBhbiBpbnRlZ2VyIG92ZXJmbG93IGluIGFkZCgpLCBiaWFzKCksCisgIGFuZCByYXRlY3YoKS4gIHJldmVyc2UoKSwgbGluMmxpbigpIGFuZCByYXRlY3YoKSBubyBtb3JlIGxvc2UgcHJlY2lzaW9uIGZvcgorICAzMi1iaXQgc2FtcGxlcy4gIG1heCgpIGFuZCBybXMoKSBubyBtb3JlIHJldHVybnMgYSBuZWdhdGl2ZSByZXN1bHQgYW5kCisgIHZhcmlvdXMgb3RoZXIgZnVuY3Rpb25zIG5vdyB3b3JrIGNvcnJlY3RseSB3aXRoIDMyLWJpdCBzYW1wbGUgLTB4ODAwMDAwMDAuCisKKy0gSXNzdWUgIzE3MDczOiBGaXggc29tZSBpbnRlZ2VyIG92ZXJmbG93cyBpbiBzcWxpdGUzIG1vZHVsZS4KKworLSBJc3N1ZSAjMTY3MjM6IGh0dHBsaWIuSFRUUFJlc3BvbnNlIG5vIGxvbmdlciBtYXJrZWQgY2xvc2VkIHdoZW4gdGhlIGNvbm5lY3Rpb24KKyAgaXMgYXV0b21hdGljYWxseSBjbG9zZWQuCisKKy0gSXNzdWUgIzE1MzU5OiBBZGQgQ0FOX0JDTSBwcm90b2NvbCBzdXBwb3J0IHRvIHRoZSBzb2NrZXQgbW9kdWxlLiBQYXRjaCBieQorICBCcmlhbiBUaG9ybmUuCisKKy0gSXNzdWUgIzE2OTQ4OiBGaXggcXVvdGVkIHByaW50YWJsZSBib2R5IGVuY29kaW5nIGZvciBub24tbGF0aW4xIGNoYXJhY3RlcgorICBzZXRzIGluIHRoZSBlbWFpbCBwYWNrYWdlLgorCistIElzc3VlICMxNjgxMTogRml4IGZvbGRpbmcgb2YgaGVhZGVycyB3aXRoIG5vIHZhbHVlIGluIHRoZSBwcm92aXNpb25hbCBlbWFpbAorICBwb2xpY2llcy4KKworLSBJc3N1ZSAjMTcxMzI6IFVwZGF0ZSBzeW1ib2wgZm9yICJ5aWVsZCBmcm9tIiBncmFtbWFyIGNoYW5nZXMuCisKKy0gSXNzdWUgIzE3MDc2OiBNYWtlIGNvcHlpbmcgb2YgeGF0dHJzIG1vcmUgdG9sZXJhbnQgb2YgbWlzc2luZyBGUyBzdXBwb3J0LgorICBQYXRjaCBieSBUaG9tYXMgV291dGVycy4KKworLSBJc3N1ZSAjMTcwODk6IEV4cGF0IHBhcnNlciBub3cgY29ycmVjdGx5IHdvcmtzIHdpdGggc3RyaW5nIGlucHV0IHdoZW4gdGhlCisgIGludGVybmFsIFhNTCBlbmNvZGluZyBpcyBub3QgVVRGLTggb3IgVVMtQVNDSUkuICBJdCBhbHNvIG5vdyBhY2NlcHRzIGJ5dGVzCisgIGFuZCBzdHJpbmdzIGxhcmdlciB0aGFuIDIgR2lCLgorCistIElzc3VlICM2MDgzOiBGaXggbXVsdGlwbGUgc2VnbWVudGF0aW9uIGZhdWx0cyBvY2N1cmVkIHdoZW4gUHlBcmdfUGFyc2VUdXBsZQorICBwYXJzZXMgbmVzdGVkIG11dGF0aW5nIHNlcXVlbmNlLgorCistIElzc3VlICM1Mjg5OiBGaXggY3R5cGVzLnV0aWwuZmluZF9saWJyYXJ5IG9uIFNvbGFyaXMuCisKKy0gSXNzdWUgIzE3MTA2OiBGaXggYSBzZWdtZW50YXRpb24gZmF1bHQgaW4gaW8uVGV4dElPV3JhcHBlciB3aGVuIGFuIHVuZGVybHlpbmcKKyAgc3RyZWFtIG9yIGEgZGVjb2RlciBwcm9kdWNlcyBkYXRhIG9mIGFuIHVuZXhwZWN0ZWQgdHlwZSAoaS5lLiB3aGVuCisgIGlvLlRleHRJT1dyYXBwZXIgaW5pdGlhbGl6ZWQgd2l0aCB0ZXh0IHN0cmVhbSBvciB1c2UgYnl0ZXMtdG8tYnl0ZXMgY29kZWMpLgorCistIElzc3VlICMxNzAxNTogV2hlbiBpdCBoYXMgYSBzcGVjLCBhIE1vY2sgb2JqZWN0IG5vdyBpbnNwZWN0cyBpdHMgc2lnbmF0dXJlCisgIHdoZW4gbWF0Y2hpbmcgY2FsbHMsIHNvIHRoYXQgYXJndW1lbnRzIGNhbiBiZSBtYXRjaGVkIHBvc2l0aW9uYWxseSBvcgorICBieSBuYW1lLgorCistIElzc3VlICMxNTYzMzogaHR0cGxpYi5IVFRQUmVzcG9uc2UgaXMgbm93IG1hcmsgY2xvc2VkIHdoZW4gdGhlIHNlcnZlcgorICBzZW5kcyBsZXNzIHRoYW4gdGhlIGFkdmVydGlzZWQgQ29udGVudC1MZW5ndGguCisKKy0gSXNzdWUgIzEyMjY4OiBUaGUgaW8gbW9kdWxlIGZpbGUgb2JqZWN0IHdyaXRlIG1ldGhvZHMgbm8gbG9uZ2VyIGFib3J0IGVhcmx5CisgIHdoZW4gb25lIG9mIGl0cyB3cml0ZSBzeXN0ZW0gY2FsbHMgaXMgaW50ZXJydXB0ZWQgKEVJTlRSKS4KKworLSBJc3N1ZSAjNjk3MjogVGhlIHppcGZpbGUgbW9kdWxlIG5vIGxvbmdlciBvdmVyd3JpdGVzIGZpbGVzIG91dHNpZGUgb2YKKyAgaXRzIGRlc3RpbmF0aW9uIHBhdGggd2hlbiBleHRyYWN0aW5nIG1hbGljaW91cyB6aXAgZmlsZXMuCisKKy0gSXNzdWUgIzQ4NDQ6IFppcEZpbGUgbm93IHJhaXNlcyBCYWRaaXBGaWxlIHdoZW4gb3BlbnMgYSBaSVAgZmlsZSB3aXRoIGFuCisgIGluY29tcGxldGUgIkVuZCBvZiBDZW50cmFsIERpcmVjdG9yeSIgcmVjb3JkLiAgT3JpZ2luYWwgcGF0Y2ggYnkgR3VpbGhlcm1lCisgIFBvbG8gYW5kIEFsYW4gTWNJbnR5cmUuCisKKy0gSXNzdWUgIzE3MDcxOiBTaWduYXR1cmUuYmluZCgpIG5vdyB3b3JrcyB3aGVuIG9uZSBvZiB0aGUga2V5d29yZCBhcmd1bWVudHMKKyAgaXMgbmFtZWQgYGBzZWxmYGAuCisKKy0gSXNzdWUgIzEyMDA0OiBGaXggYW4gaW50ZXJuYWwgZXJyb3IgaW4gUHlaaXBGaWxlIHdoZW4gd3JpdGluZyBhbiBpbnZhbGlkCisgIFB5dGhvbiBmaWxlLiAgUGF0Y2ggYnkgQmVuIE1vcmdhbi4KKworLSBIYXZlIHB5X2NvbXBpbGUgdXNlIGltcG9ydGxpYiBhcyBtdWNoIGFzIHBvc3NpYmxlIHRvIGF2b2lkIGNvZGUgZHVwbGljYXRpb24uCisgIENvZGUgbm93IHJhaXNlcyBGaWxlRXhpc3RzRXJyb3IgaWYgdGhlIGZpbGUgcGF0aCB0byBiZSB1c2VkIGZvciB0aGUKKyAgYnl0ZS1jb21waWxlZCBmaWxlIGlzIGEgc3ltbGluayBvciBub24tcmVndWxhciBmaWxlIGFzIGEgd2FybmluZyB0aGF0IGltcG9ydAorICB3aWxsIG5vdCBrZWVwIHRoZSBmaWxlIHBhdGggdHlwZSBpZiBpdCB3cml0ZXMgdG8gdGhhdCBwYXRoLgorCistIElzc3VlICMxNjk3MjogSGF2ZSBzaXRlLmFkZHBhY2thZ2UoKSBjb25zaWRlciBhbHJlYWR5IGtub3duIHBhdGhzIGV2ZW4gd2hlbgorICBub25lIGFyZSBleHBsaWNpdGx5IHBhc3NlZCBpbi4gQnVnIHJlcG9ydCBhbmQgZml4IGJ5IEtpcmlsbC4KKworLSBJc3N1ZSAjMTYwMjEzMzogb24gTWFjIE9TIFggYSBzaGFyZWQgbGlicmFyeSBidWlsZCAoYGAtLWVuYWJsZS1zaGFyZWRgYCkKKyAgbm93IGZpbGxzIHRoZSBgYG9zLmVudmlyb25gYCB2YXJpYWJsZSBjb3JyZWN0bHkuCisKKy0gSXNzdWUgIzE1NTA1OiBgdW5pdHRlc3QuaW5zdGFsbEhhbmRsZXJgIG5vIGxvbmdlciBhc3N1bWVzIFNJR0lOVCBoYW5kbGVyIGlzCisgIHNldCB0byBhIGNhbGxhYmxlIG9iamVjdC4KKworLSBJc3N1ZSAjMTM0NTQ6IEZpeCBhIGNyYXNoIHdoZW4gZGVsZXRpbmcgYW4gaXRlcmF0b3IgY3JlYXRlZCBieSBpdGVydG9vbHMudGVlKCkKKyAgaWYgYWxsIG90aGVyIGl0ZXJhdG9ycyB3ZXJlIHZlcnkgYWR2YW5jZWQgYmVmb3JlLgorCistIElzc3VlICMxMjQxMTogRml4IHRvIGNnaS5wYXJzZV9tdWx0aXBhcnQgdG8gY29ycmVjdGx5IHVzZSBieXRlcyBib3VuZGFyaWVzCisgIGFuZCBieXRlcyBkYXRhLiBQYXRjaCBieSBKb25hcyBXYWduZXIuCisKKy0gSXNzdWUgIzE2OTU3OiBzaHV0aWwud2hpY2goKSBubyBsb25nZXIgc2VhcmNoZXMgYSBiYXJlIGZpbGUgbmFtZSBpbiB0aGUKKyAgY3VycmVudCBkaXJlY3Rvcnkgb24gVW5peCBhbmQgbm8gbG9uZ2VyIHNlYXJjaGVzIGEgcmVsYXRpdmUgZmlsZSBwYXRoIHdpdGgKKyAgYSBkaXJlY3RvcnkgcGFydCBpbiBQQVRIIGRpcmVjdG9yaWVzLiAgUGF0Y2ggYnkgVGhvbWFzIEtsdXl2ZXIuCisKKy0gSXNzdWUgIzExNTkwNTE6IEd6aXBGaWxlIG5vdyByYWlzZXMgRU9GRXJyb3Igd2hlbiByZWFkaW5nIGEgY29ycnVwdGVkIGZpbGUKKyAgd2l0aCB0cnVuY2F0ZWQgaGVhZGVyIG9yIGZvb3Rlci4KKworLSBJc3N1ZSAjMTY5OTM6IHNodXRpbC53aGljaCgpIG5vdyBwcmVzZXJ2ZXMgdGhlIGNhc2Ugb2YgdGhlIHBhdGggYW5kIGV4dGVuc2lvbgorICBvbiBXaW5kb3dzLgorCistIElzc3VlICMxNjk5MjogT24gV2luZG93cyBpbiBzaWduYWwuc2V0X3dha2V1cF9mZCwgdmFsaWRhdGUgdGhlIGZpbGUKKyAgZGVzY3JpcHRvciBhcmd1bWVudC4KKworLSBJc3N1ZSAjMTY0MjI6IEZvciBjb21wYXRpYmlsaXR5IHdpdGggdGhlIFB5dGhvbiB2ZXJzaW9uLCB0aGUgQyB2ZXJzaW9uIG9mCisgIGRlY2ltYWwgbm93IHVzZXMgc3RyaW5ncyBpbnN0ZWFkIG9mIGludGVnZXJzIGZvciByb3VuZGluZyBtb2RlIGNvbnN0YW50cy4KKworLSBJc3N1ZSAjMTU4NjE6IHRraW50ZXIgbm93IGNvcnJlY3RseSB3b3JrcyB3aXRoIGxpc3RzIGFuZCB0dXBsZXMgY29udGFpbmluZworICBzdHJpbmdzIHdpdGggd2hpdGVzcGFjZXMsIGJhY2tzbGFzaGVzIG9yIHVuYmFsYW5jZWQgYnJhY2VzLgorCistIElzc3VlICM5NzIwOiB6aXBmaWxlIG5vdyB3cml0ZXMgY29ycmVjdCBsb2NhbCBoZWFkZXJzIGZvciBmaWxlcyBsYXJnZXIgdGhhbgorICA0IEdpQi4KKworLSBJc3N1ZSAjMTY5NTU6IEZpeCB0aGUgcG9sbCgpIG1ldGhvZCBmb3IgbXVsdGlwcm9jZXNzaW5nJ3Mgc29ja2V0CisgIGNvbm5lY3Rpb25zIG9uIFdpbmRvd3MuCisKKy0gU1NMQ29udGV4dC5sb2FkX2RoX3BhcmFtcygpIG5vdyBwcm9wZXJseSBjbG9zZXMgdGhlIGlucHV0IGZpbGUuCisKKy0gSXNzdWUgIzE1MDMxOiBSZWZhY3RvciBzb21lIC5weWMgbWFuYWdlbWVudCBjb2RlIHRvIGN1dCBkb3duIG9uIGNvZGUKKyAgZHVwbGljYXRpb24uIFRoYW5rcyB0byBSb25hbiBMYW15IGZvciB0aGUgcmVwb3J0IGFuZCB0YWtpbmcgYW4gaW5pdGlhbCBzdGFiCisgIGF0IHRoZSBwcm9ibGVtLgorCistIElzc3VlICMxNjM5ODogT3B0aW1pemUgZGVxdWUucm90YXRlKCkgc28gdGhhdCBpdCBvbmx5IG1vdmVzIHBvaW50ZXJzCisgIGFuZCBkb2Vzbid0IHRvdWNoIHRoZSB1bmRlcmx5aW5nIGRhdGEgd2l0aCBpbmNyZWZzIGFuZCBkZWNyZWZzLgorCistIElzc3VlICMxNjkwMDogSXNzdWUgYSBSZXNvdXJjZVdhcm5pbmcgd2hlbiBhbiBzc2wgc29ja2V0IGlzIGxlZnQgdW5jbG9zZWQuCisKKy0gSXNzdWUgIzEzODk5OiBgYFxBYGAsIGBgXFpgYCwgYW5kIGBgXEJgYCBub3cgY29ycmVjdGx5IG1hdGNoIHRoZSBBLCBaLAorICBhbmQgQiBsaXRlcmFscyB3aGVuIHVzZWQgaW5zaWRlIGNoYXJhY3RlciBjbGFzc2VzIChlLmcuIGBgJ1tcQV0nYGApLgorICBQYXRjaCBieSBNYXR0aGV3IEJhcm5ldHQuCisKKy0gSXNzdWUgIzE1NTQ1OiBGaXggcmVncmVzc2lvbiBpbiBzcWxpdGUzJ3MgaXRlcmR1bXAgbWV0aG9kIHdoZXJlIGl0IHdhcworICBmYWlsaW5nIGlmIHRoZSBjb25uZWN0aW9uIHVzZWQgYSByb3cgZmFjdG9yeSAoc3VjaCBhcyBzcWxpdGUzLlJvdykgdGhhdAorICBwcm9kdWNlZCB1bnNvcnRhYmxlIG9iamVjdHMuIChSZWdyZXNzaW9uIHdhcyBpbnRyb2R1Y2VkIGJ5IGZpeCBmb3IgOTc1MCkuCisKKy0gZmNudGw6IGFkZCBGX0RVUEZEX0NMT0VYRUMgY29uc3RhbnQsIGF2YWlsYWJsZSBvbiBMaW51eCAyLjYuMjQrLgorCistIElzc3VlICMxNTk3MjogRml4IGVycm9yIG1lc3NhZ2VzIHdoZW4gb3MgZnVuY3Rpb25zIGV4cGVjdGluZyBhIGZpbGUgbmFtZSBvcgorICBmaWxlIGRlc2NyaXB0b3IgcmVjZWl2ZSB0aGUgaW5jb3JyZWN0IHR5cGUuCisKKy0gSXNzdWUgIzgxMDk6IFRoZSBzc2wgbW9kdWxlIG5vdyBoYXMgc3VwcG9ydCBmb3Igc2VydmVyLXNpZGUgU05JLCB0aGFua3MKKyAgdG8gYSA6bWV0aDpgU1NMQ29udGV4dC5zZXRfc2VydmVybmFtZV9jYWxsYmFja2AgbWV0aG9kLiAgUGF0Y2ggYnkgRGFuaWVsCisgIEJsYWNrLgorCistIElzc3VlICMxNjg2MDogSW4gdGVtcGZpbGUsIHVzZSBPX0NMT0VYRUMgd2hlbiBhdmFpbGFibGUgdG8gc2V0IHRoZQorICBjbG9zZS1vbi1leGVjIGZsYWcgYXRvbWljYWxseS4KKworLSBJc3N1ZSAjMTY2NzQ6IHJhbmRvbS5nZXRyYW5kYml0cygpIGlzIG5vdyAyMC00MCUgZmFzdGVyIGZvciBzbWFsbCBpbnRlZ2Vycy4KKworLSBJc3N1ZSAjMTYwMDk6IEpTT04gZXJyb3IgbWVzc2FnZXMgbm93IHByb3ZpZGUgbW9yZSBpbmZvcm1hdGlvbi4KKworLSBJc3N1ZSAjMTY4Mjg6IEZpeCBlcnJvciBpbmNvcnJlY3RseSByYWlzZWQgYnkgYnoyLmNvbXByZXNzKGInJykgYW5kCisgIGJ6Mi5CWjJDb21wcmVzc29yLmNvbXByZXNzKGInJykuIEluaXRpYWwgcGF0Y2ggYnkgTWFydGluIFBhY2ttYW4uCisKKy0gSXNzdWUgIzE2ODMzOiBJbiBodHRwLmNsaWVudC5IVFRQQ29ubmVjdGlvbiwgZG8gbm90IGNvbmNhdGVuYXRlIHRoZSByZXF1ZXN0CisgIGhlYWRlcnMgYW5kIGJvZHkgd2hlbiB0aGUgcGF5bG9hZCBleGNlZWRzIDE2IEtCLCBzaW5jZSBpdCBjYW4gY29uc3VtZSBtb3JlCisgIG1lbW9yeSBmb3Igbm8gYmVuZWZpdC4gIFBhdGNoIGJ5IEJlbm5vIExlc2xpZS4KKworLSBJc3N1ZSAjMTY1NDE6IHRrX3NldFBhbGV0dGUoKSBub3cgd29ya3Mgd2l0aCBrZXl3b3JkIGFyZ3VtZW50cy4KKworLSBJc3N1ZSAjMTY4MjA6IEluIGNvbmZpZ3BhcnNlciwgYHBhcnNlci5wb3BpdGVtKClgIG5vIGxvbmdlciByYWlzZXMgVmFsdWVFcnJvci4KKyAgVGhpcyBtYWtlcyBgcGFyc2VyLmNsZWFuKClgIHdvcmsgY29ycmVjdGx5LgorCistIElzc3VlICMxNjgyMDogSW4gY29uZmlncGFyc2VyLCBgYHBhcnNlclsnc2VjdGlvbiddID0ge31gYCBub3cgcHJlc2VydmVzCisgIHNlY3Rpb24gb3JkZXIgd2l0aGluIHRoZSBwYXJzZXIuIFRoaXMgbWFrZXMgYHBhcnNlci51cGRhdGUoKWAgcHJlc2VydmUgc2VjdGlvbgorICBvcmRlciBhcyB3ZWxsLgorCistIElzc3VlICMxNjgyMDogSW4gY29uZmlncGFyc2VyLCBgYHBhcnNlclsnREVGQVVMVCddID0ge31gYCBub3cgY29ycmVjdGx5CisgIGNsZWFycyBwcmV2aW91cyB2YWx1ZXMgc3RvcmVkIGluIHRoZSBkZWZhdWx0IHNlY3Rpb24uIFNhbWUgZ29lcyBmb3IKKyAgYGBwYXJzZXIudXBkYXRlKHsnREVGQVVMVCc6IHt9fSlgYC4KKworLSBJc3N1ZSAjOTU4NjogUmVkZWZpbmUgU0VNX0ZBSUxFRCBvbiBNYWNPU1ggdG8ga2VlcCBjb21waWxlciBoYXBweS4KKworLSBJc3N1ZSAjMTY3ODc6IEluY3JlYXNlIGFzeW5jb3JlIGFuZCBhc3luY2hhdCBkZWZhdWx0IG91dHB1dCBidWZmZXJzIHNpemUsIHRvCisgIGRlY3JlYXNlIENQVSB1c2FnZSBhbmQgaW5jcmVhc2UgdGhyb3VnaHB1dC4KKworLSBJc3N1ZSAjMTA1Mjc6IG1ha2UgbXVsdGlwcm9jZXNzaW5nIHVzZSBwb2xsKCkgaW5zdGVhZCBvZiBzZWxlY3QoKSBpZiBhdmFpbGFibGUuCisKKy0gSXNzdWUgIzE2Njg4OiBOb3cgcmVnZXhlcyBjb250YWluZWQgYmFja3JlZmVyZW5jZXMgY29ycmVjdGx5IHdvcmsgd2l0aAorICBub24tQVNDSUkgc3RyaW5ncy4gIFBhdGNoIGJ5IE1hdHRoZXcgQmFybmV0dC4KKworLSBJc3N1ZSAjMTY0ODY6IE1ha2UgYWlmYyBmaWxlcyBhY3QgYXMgY29udGV4dCBtYW5hZ2Vycy4KKworLSBJc3N1ZSAjMTY0ODU6IE5vdyBmaWxlIGRlc2NyaXB0b3JzIGFyZSBjbG9zZWQgaWYgZmlsZSBoZWFkZXIgcGF0Y2hpbmcgZmFpbGVkCisgIG9uIGNsb3NpbmcgYW4gYWlmYyBmaWxlLgorCistIElzc3VlICMxNjY0MDogUnVuIGxlc3MgY29kZSB1bmRlciBhIGxvY2sgaW4gc2NoZWQgbW9kdWxlLgorCistIElzc3VlICMxNjE2NTogc2NoZWQuc2NoZWR1bGVyLnJ1bigpIG5vIGxvbmdlciBibG9ja3MgYSBzY2hlZHVsZXIgZm9yIG90aGVyCisgIHRocmVhZHMuCisKKy0gSXNzdWUgIzE2NjQxOiBEZWZhdWx0IHZhbHVlcyBvZiBzY2hlZC5zY2hlZHVsZXIuZW50ZXIoKSBhcmUgbm8gbG9uZ2VyCisgIG1vZGlmaWFibGUuCisKKy0gSXNzdWUgIzE2NjE4OiBNYWtlIGdsb2IuZ2xvYiBtYXRjaCBjb25zaXN0ZW50bHkgYWNyb3NzIHN0cmluZ3MgYW5kIGJ5dGVzCisgIHJlZ2FyZGluZyBsZWFkaW5nIGRvdHMuICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxNjc4ODogQWRkIHNhbWVzdGF0IHRvIExpYi9udHBhdGgucHkKKworLSBJc3N1ZSAjMTY3MTM6IFBhcnNpbmcgb2YgJ3RlbCcgdXJscyB1c2luZyB1cmxwYXJzZSBzZXBhcmF0ZXMgcGFyYW1zIGZyb20KKyAgcGF0aC4KKworLSBJc3N1ZSAjMTY0NDM6IEFkZCBkb2NzdHJpbmdzIHRvIHJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRjaCBvYmplY3RzLgorICBQYXRjaCBieSBBbnRvbiBLYXN5YW5vdi4KKworLSBJc3N1ZSAjMTU3MDE6IEZpeCBIVFRQRXJyb3IgaW5mbyBtZXRob2QgY2FsbCB0byByZXR1cm4gdGhlIGhlYWRlcnMgaW5mb3JtYXRpb24uCisKKy0gSXNzdWUgIzE2NzUyOiBBZGQgYSBtaXNzaW5nIGltcG9ydCB0byBtb2R1bGVmaW5kZXIuIFBhdGNoIGJ5IEJlcmtlciBQZWtzYWcuCisKKy0gSXNzdWUgIzE2NjQ2OiBmdHBsaWIuRlRQLm1ha2Vwb3J0KCkgbWlnaHQgbG9zZSBzb2NrZXQgZXJyb3IgZGV0YWlscy4KKyAgKHBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EpCisKKy0gSXNzdWUgIzE2NjI2OiBGaXggaW5maW5pdGUgcmVjdXJzaW9uIGluIGdsb2IuZ2xvYigpIG9uIFdpbmRvd3Mgd2hlbiB0aGUKKyAgcGF0dGVybiBjb250YWlucyBhIHdpbGRjYXJkIGluIHRoZSBkcml2ZSBvciBVTkMgcGF0aC4gIFBhdGNoIGJ5IFNlcmhpeQorICBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE1NzgzOiBFeGNlcHQgZm9yIHRoZSBudW1iZXIgbWV0aG9kcywgdGhlIEMgdmVyc2lvbiBvZiBkZWNpbWFsIG5vdworICBzdXBwb3J0cyBhbGwgTm9uZSBkZWZhdWx0IHZhbHVlcyBwcmVzZW50IGluIGRlY2ltYWwucHkuIFRoZXNlIHZhbHVlcyB3ZXJlCisgIGxhcmdlbHkgdW5kb2N1bWVudGVkLgorCistIElzc3VlICMxMTE3NTogYXJncGFyc2UuRmlsZVR5cGUgbm93IGFjY2VwdHMgZW5jb2RpbmcgYW5kIGVycm9ycworICBhcmd1bWVudHMuIFBhdGNoIGJ5IEx1Y2FzIE1heXN0cmUuCisKKy0gSXNzdWUgIzE2NDg4OiBlcG9sbCgpIG9iamVjdHMgbm93IHN1cHBvcnQgdGhlIGB3aXRoYCBzdGF0ZW1lbnQuICBQYXRjaAorICBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxNjI5ODogSW4gSFRUUFJlc3BvbnNlLnJlYWQoKSwgY2xvc2UgdGhlIHNvY2tldCB3aGVuIHRoZXJlIGlzIG5vCisgIENvbnRlbnQtTGVuZ3RoIGFuZCB0aGUgaW5jb21pbmcgc3RyZWFtIGlzIGZpbmlzaGVkLiAgUGF0Y2ggYnkgRXJhbgorICBSdW5kc3RlaW4uCisKKy0gSXNzdWUgIzE2MDQ5OiBBZGQgYWJjLkFCQyBjbGFzcyB0byBlbmFibGUgdGhlIHVzZSBvZiBpbmhlcml0YW5jZSB0byBjcmVhdGUKKyAgQUJDcywgcmF0aGVyIHRoYW4gdGhlIG1vcmUgY3VtYmVyc29tZSBtZXRhY2xhc3M9QUJDTWV0YS4gUGF0Y2ggYnkgQnJ1bm8KKyAgRHVwdWlzLgorCistIEV4cG9zZSB0aGUgVENQX0ZBU1RPUEVOIGFuZCBNU0dfRkFTVE9QRU4gZmxhZ3MgaW4gc29ja2V0IHdoZW4gdGhleSdyZQorICBhdmFpbGFibGUuCisKKy0gSXNzdWUgIzE1NzAxOiBBZGQgYSAuaGVhZGVycyBhdHRyaWJ1dGUgdG8gdXJsbGliLmVycm9yLkhUVFBFcnJvci4gUGF0Y2gKKyAgY29udHJpYnV0ZWQgYnkgQmVya2VyIFBla3NhZy4KKworLSBJc3N1ZSAjMTU4NzI6IEZpeCAzLjMgcmVncmVzc2lvbiBpbnRyb2R1Y2VkIGJ5IHRoZSBuZXcgZmQtYmFzZWQgc2h1dGlsLnJtdHJlZQorICB0aGF0IGNhdXNlZCBpdCB0byBub3QgaWdub3JlIGNlcnRhaW4gZXJyb3JzIHdoZW4gaWdub3JlX2Vycm9ycyB3YXMgc2V0LgorICBQYXRjaCBieSBBbGVzc2FuZHJvIE1vdXJhIGFuZCBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxNjI0ODogRGlzYWJsZSBjb2RlIGV4ZWN1dGlvbiBmcm9tIHRoZSB1c2VyJ3MgaG9tZSBkaXJlY3RvcnkgYnkKKyAgdGtpbnRlciB3aGVuIHRoZSAtRSBmbGFnIGlzIHBhc3NlZCB0byBQeXRob24uICBQYXRjaCBieSBaYWNoYXJ5IFdhcmUuCisKKy0gSXNzdWUgIzEzMzkwOiBOZXcgZnVuY3Rpb24gOmZ1bmM6YHN5cy5nZXRhbGxvY2F0ZWRibG9ja3MoKWAgcmV0dXJucyB0aGUKKyAgbnVtYmVyIG9mIG1lbW9yeSBibG9ja3MgY3VycmVudGx5IGFsbG9jYXRlZC4KKworLSBJc3N1ZSAjMTY2Mjg6IEZpeCBhIG1lbW9yeSBsZWFrIGluIGN0eXBlcy5yZXNpemUoKS4KKworLSBJc3N1ZSAjMTM2MTQ6IEZpeCBzZXR1cC5weSByZWdpc3RlciBmYWlsdXJlIHdpdGggaW52YWxpZCByc3QgaW4gZGVzY3JpcHRpb24uCisgIFBhdGNoIGJ5IEp1bGllbiBDb3VydGVhdSBhbmQgUGllcnJlIFBhdWwgTGVmZWJ2cmUuCisKKy0gSXNzdWUgIzEzNTEyOiBDcmVhdGUgfi8ucHlwaXJjIHNlY3VyZWx5IChDVkUtMjAxMS00OTQ0KS4gIEluaXRpYWwgcGF0Y2ggYnkKKyAgUGhpbGlwIEplbnZleSwgdGVzdGVkIGJ5IE1hZ2VpYSBhbmQgRGViaWFuLgorCistIElzc3VlICM3NzE5OiBNYWtlIGRpc3R1dGlscyBpZ25vcmUgYGAubmZzKmBgIGZpbGVzIGluc3RlYWQgb2YgY2hva2luZyBsYXRlcgorICBvbi4gIEluaXRpYWwgcGF0Y2ggYnkgU2lsZW50R2hvc3QgYW5kIEplZmYgUmFtbmFuaS4KKworLSBJc3N1ZSAjMTMxMjA6IEFsbG93IHRvIGNhbGwgcGRiLnNldF90cmFjZSgpIGZyb20gdGhyZWFkLgorICBQYXRjaCBieSBJbHlhIFNhbmRsZXIuCisKKy0gSXNzdWUgIzE2NTg1OiBNYWtlIENKSyBlbmNvZGVycyBzdXBwb3J0IGVycm9yIGhhbmRsZXJzIHRoYXQgcmV0dXJuIGJ5dGVzIHBlcgorICBQRVAgMzgzLgorCistIElzc3VlICMxMDE4MjogVGhlIHJlIG1vZHVsZSBkb2Vzbid0IHRydW5jYXRlIGluZGljZXMgdG8gMzIgYml0cyBhbnltb3JlLgorICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxNjMzMzogdXNlICgiLCIsICI6ICIpIGFzIGRlZmF1bHQgc2VwYXJhdG9yIGluIGpzb24gd2hlbiBpbmRlbnQgaXMKKyAgc3BlY2lmaWVkLCB0byBhdm9pZCB0cmFpbGluZyB3aGl0ZXNwYWNlLiAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTY1NzM6IEluIDJ0bzMsIHRyZWF0IGVudW1lcmF0ZSgpIGxpa2UgYSBjb25zdW1pbmcgY2FsbCwgc28gc3VwZXJmbHVvdXMKKyAgbGlzdCgpIGNhbGxzIGFyZW4ndCBhZGRlZCB0byBmaWx0ZXIoKSwgbWFwKCksIGFuZCB6aXAoKSB3aGljaCBhcmUgZGlyZWN0bHkKKyAgcGFzc2VkIGVudW1lcmF0ZSgpLgorCistIElzc3VlICMxNjQ2NDogUmVzZXQgdGhlIENvbnRlbnQtTGVuZ3RoIGhlYWRlciB3aGVuIGEgdXJsbGliIFJlcXVlc3QgaXMgcmV1c2VkCisgIHdpdGggbmV3IGRhdGEuCisKKy0gSXNzdWUgIzEyODQ4OiBUaGUgcHVyZSBQeXRob24gcGlja2xlIGltcGxlbWVudGF0aW9uIG5vdyB0cmVhdHMgb2JqZWN0CisgIGxlbmd0aHMgYXMgdW5zaWduZWQgMzItYml0IGludGVnZXJzLCBsaWtlIHRoZSBDIGltcGxlbWVudGF0aW9uIGRvZXMuCisgIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE2NDIzOiB1cmxsaWIucmVxdWVzdCBub3cgaGFzIHN1cHBvcnQgZm9yIGBgZGF0YTpgYCBVUkxzLiAgUGF0Y2ggYnkKKyAgTWF0aGlhcyBQYW56ZW5iw7Zjay4KKworLSBJc3N1ZSAjNDQ3MzogQWRkIGEgUE9QMy5zdGxzKCkgdG8gc3dpdGNoIGEgY2xlYXItdGV4dCBQT1AzIHNlc3Npb24gaW50bworICBhbiBlbmNyeXB0ZWQgUE9QMyBzZXNzaW9uLCBvbiBzdXBwb3J0ZWQgc2VydmVycy4gIFBhdGNoIGJ5IExvcmVuem8gQ2F0dWNjaS4KKworLSBJc3N1ZSAjNDQ3MzogQWRkIGEgUE9QMy5jYXBhKCkgbWV0aG9kIHRvIHF1ZXJ5IHRoZSBjYXBhYmlsaXRpZXMgYWR2ZXJ0aXNlZAorICBieSB0aGUgUE9QMyBzZXJ2ZXIuICBQYXRjaCBieSBMb3JlbnpvIENhdHVjY2kuCisKKy0gSXNzdWUgIzQ0NzM6IEVuc3VyZSB0aGUgc29ja2V0IGlzIHNodXRkb3duIGNsZWFubHkgaW4gUE9QMy5jbG9zZSgpLgorICBQYXRjaCBieSBMb3JlbnpvIENhdHVjY2kuCisKKy0gSXNzdWUgIzE2NTIyOiBhZGRlZCBGQUlMX0ZBU1QgZmxhZyB0byBkb2N0ZXN0LgorCistIElzc3VlICMxNTYyNzogQWRkIHRoZSBpbXBvcnRsaWIuYWJjLkluc3BlY3RMb2FkZXIuc291cmNlX3RvX2NvZGUoKSBtZXRob2QuCisKKy0gSXNzdWUgIzE2NDA4OiBGaXggZmlsZSBkZXNjcmlwdG9ycyBub3QgYmVpbmcgY2xvc2VkIGluIGVycm9yIGNvbmRpdGlvbnMKKyAgaW4gdGhlIHppcGZpbGUgbW9kdWxlLiAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTQ2MzE6IEFkZCBhIG5ldyA6Y2xhc3M6YHdlYWtyZWYuV2Vha01ldGhvZGAgdG8gc2ltdWxhdGUgd2VhaworICByZWZlcmVuY2VzIHRvIGJvdW5kIG1ldGhvZHMuCisKKy0gSXNzdWUgIzE2NDY5OiBGaXggZXhjZXB0aW9ucyBmcm9tIGZsb2F0IC0+IEZyYWN0aW9uIGFuZCBEZWNpbWFsIC0+IEZyYWN0aW9uCisgIGNvbnZlcnNpb25zIGZvciBzcGVjaWFsIHZhbHVlcyB0byBiZSBjb25zaXN0ZW50IHdpdGggdGhvc2UgZm9yIGZsb2F0IC0+IGludAorICBhbmQgRGVjaW1hbCAtPiBpbnQuICBQYXRjaCBieSBBbGV4ZXkgS2FjaGF5ZXYuCisKKy0gSXNzdWUgIzE2NDgxOiBtdWx0aXByb2Nlc3Npbmcgbm8gbG9uZ2VyIGxlYWtzIHByb2Nlc3MgaGFuZGxlcyBvbiBXaW5kb3dzLgorCistIElzc3VlICMxMjQyODogQWRkIGEgcHVyZSBQeXRob24gaW1wbGVtZW50YXRpb24gb2YgZnVuY3Rvb2xzLnBhcnRpYWwoKS4KKyAgUGF0Y2ggYnkgQnJpYW4gVGhvcm5lLgorCistIElzc3VlICMxNjE0MDogVGhlIHN1YnByb2Nlc3MgbW9kdWxlIG5vIGxvbmdlciBkb3VibGUgY2xvc2VzIGl0cyBjaGlsZAorICBzdWJwcm9jZXNzLlBJUEUgcGFyZW50IGZpbGUgZGVzY3JpcHRvcnMgb24gY2hpbGQgZXJyb3IgcHJpb3IgdG8gZXhlYygpLgorCistIFJlbW92ZSBhIGJhcmUgcHJpbnQgdG8gc3Rkb3V0IGZyb20gdGhlIHN1YnByb2Nlc3MgbW9kdWxlIHRoYXQgY291bGQgaGF2ZQorICBoYXBwZW5lZCBpZiB0aGUgY2hpbGQgcHJvY2VzcyB3cm90ZSBnYXJiYWdlIHRvIGl0cyBwcmUtZXhlYyBlcnJvciBwaXBlLgorCistIFRoZSBzdWJwcm9jZXNzIG1vZHVsZSBub3cgcmFpc2VzIGl0cyBvd24gU3VicHJvY2Vzc0Vycm9yIGluc3RlYWQgb2YgYQorICBSdW50aW1lRXJyb3IgaW4gdmFyaW91cyBlcnJvciBzaXR1YXRpb25zIHdoaWNoIHNob3VsZCBub3Qgbm9ybWFsbHkgaGFwcGVuLgorCistIElzc3VlICMxNjMyNzogVGhlIHN1YnByb2Nlc3MgbW9kdWxlIG5vIGxvbmdlciBsZWFrcyBmaWxlIGRlc2NyaXB0b3JzCisgIHVzZWQgZm9yIHN0ZGluL3N0ZG91dC9zdGRlcnIgcGlwZXMgdG8gdGhlIGNoaWxkIHdoZW4gZm9yaygpIGZhaWxzLgorCistIElzc3VlICMxNDM5NjogSGFuZGxlIHRoZSBvZGQgcmFyZSBjYXNlIG9mIHdhaXRwaWQgcmV0dXJuaW5nIDAgd2hlbiBub3QKKyAgZXhwZWN0ZWQgaW4gc3VicHJvY2Vzcy5Qb3Blbi53YWl0KCkuCisKKy0gSXNzdWUgIzE2NDExOiBGaXggYSBidWcgd2hlcmUgemxpYi5kZWNvbXByZXNzb2JqKCkuZmx1c2goKSBtaWdodCB0cnkgdG8gYWNjZXNzCisgIHByZXZpb3VzbHktZnJlZWQgbWVtb3J5LiBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxNjM1NzogZml4IGNhbGxpbmcgYWNjZXB0KCkgb24gYSBTU0xTb2NrZXQgY3JlYXRlZCB0aHJvdWdoCisgIFNTTENvbnRleHQud3JhcF9zb2NrZXQoKS4gIE9yaWdpbmFsIHBhdGNoIGJ5IEplZmYgTWNOZWlsLgorCistIElzc3VlICMxNjQwOTogVGhlIHJlcG9ydGhvb2sgY2FsbGJhY2sgbWFkZSBieSB0aGUgbGVnYWN5CisgIHVybGxpYi5yZXF1ZXN0LnVybHJldHJpZXZlIEFQSSBub3cgcHJvcGVybHkgc3VwcGxpZXMgYSBjb25zdGFudCBub24temVybworICBibG9ja19zaXplIGFzIGl0IGRpZCBpbiBQeXRob24gMy4yIGFuZCAyLjcuICBUaGlzIG1hdGNoZXMgdGhlIGJlaGF2aW9yIG9mCisgIHVybGxpYi5yZXF1ZXN0LlVSTG9wZW5lci5yZXRyaWV2ZS4KKworLSBJc3N1ZSAjMTY0MzE6IFVzZSB0aGUgdHlwZSBpbmZvcm1hdGlvbiB3aGVuIGNvbnN0cnVjdGluZyBhIERlY2ltYWwgc3VidHlwZQorICBmcm9tIGEgRGVjaW1hbCBhcmd1bWVudC4KKworLSBJc3N1ZSAjMTU2NDE6IENsZWFuIHVwIGRlcHJlY2F0ZWQgY2xhc3NlcyBmcm9tIGltcG9ydGxpYi4KKyAgUGF0Y2ggYnkgVGFyYXMgTHlhcHVuLgorCistIElzc3VlICMxNjM1MDogemxpYi5kZWNvbXByZXNzb2JqKCkuZGVjb21wcmVzcygpIG5vdyBhY2N1bXVsYXRlcyBkYXRhIGZyb20KKyAgc3VjY2Vzc2l2ZSBjYWxscyBhZnRlciBFT0YgaW4gdW51c2VkX2RhdGEsIGluc3RlYWQgb2Ygb25seSBzYXZpbmcgdGhlIGFyZ3VtZW50CisgIHRvIHRoZSBsYXN0IGNhbGwuIGRlY29tcHJlc3NvYmooKS5mbHVzaCgpIG5vdyBjb3JyZWN0bHkgc2V0cyB1bnVzZWRfZGF0YSBhbmQKKyAgdW5jb25zdW1lZF90YWlsLiBBIGJ1ZyBpbiB0aGUgaGFuZGxpbmcgb2YgTWVtb3J5RXJyb3Igd2hlbiBzZXR0aW5nIHRoZQorICB1bmNvbnN1bWVkX3RhaWwgYXR0cmlidXRlIGhhcyBhbHNvIGJlZW4gZml4ZWQuIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzEyNzU5OiBzcmVfcGFyc2Ugbm93IHJhaXNlcyBhIHByb3BlciBlcnJvciB3aGVuIHRoZSBuYW1lIG9mIHRoZSBncm91cAorICBpcyBtaXNzaW5nLiAgSW5pdGlhbCBwYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxNjE1MjogZml4IHRva2VuaXplIHRvIGlnbm9yZSB3aGl0ZXNwYWNlIGF0IHRoZSBlbmQgb2YgdGhlIGNvZGUgd2hlbgorICBubyBuZXdsaW5lIGlzIGZvdW5kLiAgUGF0Y2ggYnkgTmVkIEJhdGNoZWxkZXIuCisKKy0gSXNzdWUgIzE2Mjg0OiBQcmV2ZW50IGtlZXBpbmcgdW5uZWNlc3NhcnkgcmVmZXJlbmNlcyB0byB3b3JrZXIgZnVuY3Rpb25zCisgIGluIGNvbmN1cnJlbnQuZnV0dXJlcyBUaHJlYWRQb29sRXhlY3V0b3IuCisKKy0gSXNzdWUgIzE2MjMwOiBGaXggYSBjcmFzaCBpbiBzZWxlY3Quc2VsZWN0KCkgd2hlbiBvbmUgdGhlIGxpc3RzIGNoYW5nZXMKKyAgc2l6ZSB3aGlsZSBpdGVyYXRlZCBvbi4gIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE2MjI4OiBGaXggYSBjcmFzaCBpbiB0aGUganNvbiBtb2R1bGUgd2hlcmUgYSBsaXN0IGNoYW5nZXMgc2l6ZQorICB3aGlsZSBpdCBpcyBiZWluZyBlbmNvZGVkLiAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTYzNTE6IE5ldyBmdW5jdGlvbiBnYy5nZXRfc3RhdHMoKSByZXR1cm5zIHBlci1nZW5lcmF0aW9uIGNvbGxlY3Rpb24KKyAgc3RhdGlzdGljcy4KKworLSBJc3N1ZSAjMTQ4OTc6IEVuaGFuY2UgZXJyb3IgbWVzc2FnZXMgb2Ygc3RydWN0LnBhY2sgYW5kCisgIHN0cnVjdC5wYWNrX2ludG8uIFBhdGNoIGJ5IE1hdHRpIE3DpGtpLgorCistIElzc3VlICMxNjMxNjogbWltZXR5cGVzIG5vdyByZWNvZ25pemVzIHRoZSAueHogYW5kIC50eHogKC50YXIueHopIGV4dGVuc2lvbnMuCisgIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzEyODkwOiBjZ2l0YiBubyBsb25nZXIgcHJpbnRzIHNwdXJpb3VzIDxwPiB0YWdzIGluIHRleHQKKyAgbW9kZSB3aGVuIHRoZSBsb2dkaXIgb3B0aW9uIGlzIHNwZWNpZmllZC4KKworLSBJc3N1ZSAjMTYzMDc6IEZpeCBtdWx0aXByb2Nlc3NpbmcuUG9vbC5tYXBfYXN5bmMgbm90IGNhbGxpbmcgaXRzIGNhbGxiYWNrcy4KKyAgUGF0Y2ggYnkgSmFubmUgS2FyaWxhLgorCistIElzc3VlICMxNjMwNTogRml4IGEgc2VnbWVudGF0aW9uIGZhdWx0IG9jY3VycmluZyB3aGVuIGludGVycnVwdGluZworICBtYXRoLmZhY3RvcmlhbC4KKworLSBJc3N1ZSAjMTYxMTY6IEZpeCBpbmNsdWRlIGFuZCBsaWJyYXJ5IHBhdGhzIHRvIGJlIGNvcnJlY3Qgd2hlbiBidWlsZGluZyBDCisgIGV4dGVuc2lvbnMgaW4gdmVudnMuCisKKy0gSXNzdWUgIzE2MjQ1OiBGaXggdGhlIHZhbHVlIG9mIGEgZmV3IGVudGl0aWVzIGluIGh0bWwuZW50aXRpZXMuaHRtbDUuCisKKy0gSXNzdWUgIzE2MzAxOiBGaXggdGhlIGxvY2FsaG9zdCB2ZXJpZmljYXRpb24gaW4gdXJsbGliL3JlcXVlc3QucHkgZm9yIGZpbGU6Ly8KKyAgdXJscy4KKworLSBJc3N1ZSAjMTYyNTA6IEZpeCB0aGUgaW52b2NhdGlvbnMgb2YgVVJMRXJyb3Igd2hpY2ggaGFkIG1pc3BsYWNlZCBmaWxlbmFtZQorICBhdHRyaWJ1dGUgZm9yIGV4Y2VwdGlvbi4KKworLSBJc3N1ZSAjMTA4MzY6IEZpeCBleGNlcHRpb24gcmFpc2VkIHdoZW4gZmlsZSBub3QgZm91bmQgaW4gdXJscmV0cmlldmUKKyAgSW5pdGlhbCBwYXRjaCBieSBFemlvIE1lbG90dGkuCisKKy0gSXNzdWUgIzE0Mzk4OiBGaXggc2l6ZSB0cnVuY2F0aW9uIGFuZCBvdmVyZmxvdyBidWdzIGluIHRoZSBiejIgbW9kdWxlLgorCistIElzc3VlICMxMjY5MjogRml4IHJlc291cmNlIGxlYWsgaW4gdXJsbGliLnJlcXVlc3Qgd2hlbiB0YWxraW5nIHRvIGFuIEhUVFAKKyAgc2VydmVyIHRoYXQgZG9lcyBub3QgaW5jbHVkZSBhIGBgQ29ubmVjdGlvbjogY2xvc2VgYCBoZWFkZXIgaW4gaXRzIHJlc3BvbnNlcy4KKworLSBJc3N1ZSAjMTIwMzQ6IEZpeCBib2d1cyBjYWNoaW5nIG9mIHJlc3VsdCBpbiBjaGVja19HZXRGaW5hbFBhdGhOYW1lQnlIYW5kbGUuCisgIFBhdGNoIGJ5IEF0c3VvIElzaGltb3RvLgorCistIEltcHJvdmUgcGVyZm9ybWFuY2Ugb2YgYGx6bWEuTFpNQUZpbGVgIChzZWUgYWxzbyBpc3N1ZSAjMTYwMzQpLgorCistIElzc3VlICMxNjIyMDogd3NnaXJlZiBub3cgYWx3YXlzIGNhbGxzIGNsb3NlKCkgb24gYW4gaXRlcmFibGUgcmVzcG9uc2UuCisgIFBhdGNoIGJ5IEJyZW50IFR1YmJzLgorCistIElzc3VlICMxNjI3MDogdXJsbGliIG1heSBoYW5nIHdoZW4gdXNlZCBmb3IgcmV0cmlldmluZyBmaWxlcyB2aWEgRlRQIGJ5IHVzaW5nCisgIGEgY29udGV4dCBtYW5hZ2VyLiAgUGF0Y2ggYnkgR2lhbXBhb2xvIFJvZG9sYScuCisKKy0gSXNzdWUgIzE2NDYxOiBXYXZlIGxpYnJhcnkgc2hvdWxkIGJlIGFibGUgdG8gZGVhbCB3aXRoIDRHQiB3YXYgZmlsZXMsCisgIGFuZCBzYW1wbGUgcmF0ZSBvZiA0NDEwMCBIei4KKworLSBJc3N1ZSAjMTYxNzY6IFByb3Blcmx5IGlkZW50aWZ5IFdpbmRvd3MgOCB2aWEgcGxhdGZvcm0ucGxhdGZvcm0oKQorCistIElzc3VlICMxNjA4ODogQmFzZUhUVFBSZXF1ZXN0SGFuZGxlcidzIHNlbmRfZXJyb3IgbWV0aG9kIGluY2x1ZGVzIGEKKyAgQ29udGVudC1MZW5ndGggaGVhZGVyIGluIGl0J3MgcmVzcG9uc2Ugbm93LiBQYXRjaCBieSBBbnRvaW5lIFBpdHJvdS4KKworLSBJc3N1ZSAjMTYxMTQ6IFRoZSBzdWJwcm9jZXNzIG1vZHVsZSBubyBsb25nZXIgcHJvdmlkZXMgYSBtaXNsZWFkaW5nIGVycm9yCisgIG1lc3NhZ2Ugc3RhdGluZyB0aGF0IGFyZ3NbMF0gZGlkIG5vdCBleGlzdCB3aGVuIGVpdGhlciB0aGUgY3dkIG9yIGV4ZWN1dGFibGUKKyAga2V5d29yZCBhcmd1bWVudHMgc3BlY2lmaWVkIGEgcGF0aCB0aGF0IGRpZCBub3QgZXhpc3QuCisKKy0gSXNzdWUgIzE2MTY5OiBGaXggY3R5cGVzLldpbkVycm9yKCkncyBjb25mdXNpb24gYmV0d2VlbiBlcnJubyBhbmQgd2luZXJyb3IuCisKKy0gSXNzdWUgIzE2MTEwOiBsb2dnaW5nLmZpbGVDb25maWcgbm93IGFjY2VwdHMgYSBwcmUtaW5pdGlhbGlzZWQgQ29uZmlnUGFyc2VyCisgIGluc3RhbmNlLgorCistIElzc3VlICMxNDkyNzA0OiBzaHV0aWwuY29weWZpbGUoKSByYWlzZXMgYSBkaXN0aW5jdCBTYW1lRmlsZUVycm9yIG5vdyBpZgorICBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFyZSB0aGUgc2FtZSBmaWxlLiBQYXRjaCBieSBBdHN1byBJc2hpbW90by4KKworLSBJc3N1ZSAjMTM4OTY6IE1ha2Ugc2hlbGYgaW5zdGFuY2VzIHdvcmsgd2l0aCAnd2l0aCcgYXMgY29udGV4dCBtYW5hZ2Vycy4KKyAgT3JpZ2luYWwgcGF0Y2ggYnkgRmlsaXAgR3J1c3pjennFhHNraS4KKworLSBJc3N1ZSAjMTU0MTc6IEFkZCBzdXBwb3J0IGZvciBjc2ggYW5kIGZpc2ggaW4gdmVudiBhY3RpdmF0aW9uIHNjcmlwdHMuCisKKy0gSXNzdWUgIzE0Mzc3OiBFbGVtZW50VHJlZS53cml0ZSBhbmQgc29tZSBvZiB0aGUgbW9kdWxlLWxldmVsIGZ1bmN0aW9ucyBoYXZlCisgIGEgbmV3IHBhcmFtZXRlciAtICpzaG9ydF9lbXB0eV9lbGVtZW50cyouIEl0IGNvbnRyb2xzIGhvdyBlbGVtZW50cyB3aXRoIG5vCisgIGNvbnRlbnRzIGFyZSBlbWl0dGVkLgorCistIElzc3VlICMxNjA4OTogQWxsb3cgRWxlbWVudFRyZWUuVHJlZUJ1aWxkZXIgdG8gd29yayBhZ2FpbiB3aXRoIGEgbm9uLUVsZW1lbnQKKyAgZWxlbWVudF9mYWN0b3J5IChmaXhlcyBhIHJlZ3Jlc3Npb24gaW4gU2ltcGxlVEFMKS4KKworLSBJc3N1ZSAjOTY1MDogTGlzdCBjb21tb25seSB1c2VkIGZvcm1hdCBjb2RlcyBpbiB0aW1lLnN0cmZ0aW1lIGFuZAorICB0aW1lLnN0cnB0aW1lIGRvY3N0dGluZ3MuICBPcmlnaW5hbCBwYXRjaCBieSBNaWtlIEhveS4KKworLSBJc3N1ZSAjMTU0NTI6IGxvZ2dpbmcgY29uZmlndXJhdGlvbiBzb2NrZXQgbGlzdGVuZXIgbm93IGhhcyBhIHZlcmlmeSBvcHRpb24KKyAgdGhhdCBhbGxvd3MgYW4gYXBwbGljYXRpb24gdG8gYXBwbHkgYSB2ZXJpZmljYXRpb24gZnVuY3Rpb24gdG8gdGhlCisgIHJlY2VpdmVkIGNvbmZpZ3VyYXRpb24gZGF0YSBiZWZvcmUgaXQgaXMgYWN0ZWQgdXBvbi4KKworLSBJc3N1ZSAjMTYwMzQ6IEZpeCBwZXJmb3JtYW5jZSByZWdyZXNzaW9ucyBpbiB0aGUgbmV3IGBiejIuQloyRmlsZWAKKyAgaW1wbGVtZW50YXRpb24uICBJbml0aWFsIHBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gYHB0eS5zcGF3bigpYCBub3cgcmV0dXJucyB0aGUgY2hpbGQgcHJvY2VzcyBzdGF0dXMgcmV0dXJuZWQgYnkgYG9zLndhaXRwaWQoKWAuCisKKy0gSXNzdWUgIzE1NzU2OiBgc3VicHJvY2Vzcy5wb2xsKClgIG5vdyBwcm9wZXJseSBoYW5kbGVzIGBlcnJuby5FQ0hJTERgIHRvCisgIHJldHVybiBhIHJldHVybmNvZGUgb2YgMCB3aGVuIHRoZSBjaGlsZCBoYXMgYWxyZWFkeSBleGl0ZWQgb3IgY2Fubm90IGJlIHdhaXRlZAorICBvbi4KKworLSBJc3N1ZSAjMTUzMjM6IEltcHJvdmUgZmFpbHVyZSBtZXNzYWdlIG9mIGBNb2NrLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKClgLgorCistIElzc3VlICMxNjA2NDogYGB1bml0dGVzdCAtbWBgIGNsYWltcyBleGVjdXRhYmxlIGlzICJweXRob24iLCBub3QgInB5dGhvbjMiLgorCistIElzc3VlICMxMjM3NjogUGFzcyBvbiBwYXJhbWV0ZXJzIGluIGBUZXh0VGVzdFJlc3VsdC5fX2luaXRfXygpYCBzdXBlciBjYWxsLgorCistIElzc3VlICMxNTIyMjogSW5zZXJ0IGJsYW5rIGxpbmUgYWZ0ZXIgZWFjaCBtZXNzYWdlIGluIG1ib3ggbWFpbGJveGVzLgorCistIElzc3VlICMxNjAxMzogRml4IGBjc3YuUmVhZGVyYCBwYXJzaW5nIGlzc3VlIHdpdGggZW5kaW5nIHF1b3RlIGNoYXJhY3RlcnMuCisgIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE1NDIxOiBGaXggYW4gT3ZlcmZsb3dFcnJvciBpbiBgQ2FsZW5kYXIuaXRlcm1vbnRoZGF0ZXMoKWAgYWZ0ZXIKKyAgYGRhdGV0aW1lLk1BWFlFQVJgLiAgUGF0Y2ggYnkgQ8OpZHJpYyBLcmllci4KKworLSBJc3N1ZSAjMTYxMTI6IHBsYXRmb3JtLmFyY2hpdGVjdHVyZSBkb2VzIG5vdCBjb3JyZWN0bHkgZXNjYXBlIGFyZ3VtZW50IHRvCisgIC91c3IvYmluL2ZpbGUuICBQYXRjaCBieSBEYXZpZCBCZW5qYW1pbi4KKworLSBJc3N1ZSAjMTU5NzA6IGB4bWwuZXRyZWUuRWxlbWVudFRyZWVgIG5vdyBzZXJpYWxpemVzIGNvcnJlY3RseSB0aGUgZW1wdHkgSFRNTAorICBlbGVtZW50cyAnbWV0YScgYW5kICdwYXJhbScuCisKKy0gSXNzdWUgIzE1ODQyOiBUaGUgYFNvY2tldElPLntyZWFkYWJsZSx3cml0YWJsZSxzZWVrYWJsZX1gIG1ldGhvZHMgbm93IHJhaXNlCisgIFZhbHVlRXJyb3Igd2hlbiB0aGUgZmlsZS1saWtlIG9iamVjdCBpcyBjbG9zZWQuICBQYXRjaCBieSBBbGVzc2FuZHJvIE1vdXJhLgorCistIElzc3VlICMxNTg3NjogRml4IGEgcmVmbGVhayBpbiB0aGUgYGN1cnNlc2AgbW9kdWxlOiB3aW5kb3cuZW5jb2RpbmcuCisKKy0gSXNzdWUgIzE1ODgxOiBGaXggYGF0ZXhpdGAgaG9vayBpbiBgbXVsdGlwcm9jZXNzaW5nYC4gIE9yaWdpbmFsIHBhdGNoIGJ5IENocmlzCisgIE1jRG9ub3VnaC4KKworLSBJc3N1ZSAjMTU4NDE6IFRoZSByZWFkYWJsZSgpLCB3cml0YWJsZSgpIGFuZCBzZWVrYWJsZSgpIG1ldGhvZHMgb2YKKyAgYGlvLkJ5dGVzSU9gIGFuZCBgaW8uU3RyaW5nSU9gIG9iamVjdHMgbm93IHJhaXNlIFZhbHVlRXJyb3Igd2hlbiB0aGUgb2JqZWN0CisgIGhhcyBiZWVuIGNsb3NlZC4gIFBhdGNoIGJ5IEFsZXNzYW5kcm8gTW91cmEuCisKKy0gSXNzdWUgIzE1NDQ3OiBVc2UgYHN1YnByb2Nlc3MuREVWTlVMTGAgaW4gd2ViYnJvd3NlciwgaW5zdGVhZCBvZiBvcGVuaW5nCisgIGBvcy5kZXZudWxsYCBleHBsaWNpdGx5IGFuZCBsZWF2aW5nIGl0IG9wZW4uCisKKy0gSXNzdWUgIzE1NTA5OiBgd2ViYnJvd3Nlci5Vbml4QnJvd3NlcmAgbm8gbG9uZ2VyIHBhc3NlcyBlbXB0eSBhcmd1bWVudHMgdG8KKyAgUG9wZW4gd2hlbiBgYCVhY3Rpb25gYCBzdWJzdGl0dXRpb25zIHByb2R1Y2UgZW1wdHkgc3RyaW5ncy4KKworLSBJc3N1ZSAjMTI3NzYsIGlzc3VlICMxMTgzOTogQ2FsbCBgYXJncGFyc2VgIHR5cGUgZnVuY3Rpb24gKHNwZWNpZmllZCBieQorICBhZGRfYXJndW1lbnQpIG9ubHkgb25jZS4gQmVmb3JlLCB0aGUgdHlwZSBmdW5jdGlvbiB3YXMgY2FsbGVkIHR3aWNlIGluIHRoZQorICBjYXNlIHdoZXJlIHRoZSBkZWZhdWx0IHdhcyBzcGVjaWZpZWQgYW5kIHRoZSBhcmd1bWVudCB3YXMgZ2l2ZW4gYXMgd2VsbC4gIFRoaXMKKyAgd2FzIGVzcGVjaWFsbHkgcHJvYmxlbWF0aWMgZm9yIHRoZSBGaWxlVHlwZSB0eXBlLCBhcyBhIGRlZmF1bHQgZmlsZSB3b3VsZAorICBhbHdheXMgYmUgb3BlbmVkLCBldmVuIGlmIGEgZmlsZSBhcmd1bWVudCB3YXMgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUuCisKKy0gSXNzdWUgIzE1OTA2OiBGaXggYSByZWdyZXNzaW9uIGluIGFyZ3BhcnNlIGNhdXNlZCBieSB0aGUgcHJlY2VkaW5nIGNoYW5nZSwKKyAgd2hlbiBgYGFjdGlvbj0nYXBwZW5kJ2BgLCBgYHR5cGU9J3N0cidgYCBhbmQgYGBkZWZhdWx0PVtdYGAuCisKKy0gSXNzdWUgIzE2MTEzOiBBZGRlZCBzaGEzIG1vZHVsZSBiYXNlZCBvbiB0aGUgS2VjY2FrIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbgorICAzLjIuIFRoZSBgaGFzaGxpYmAgbW9kdWxlIGhhcyBmb3VyIGFkZGl0aW9uYWwgaGFzaCBhbGdvcml0aG1zOiBgc2hhM18yMjRgLAorICBgc2hhM18yNTZgLCBgc2hhM18zODRgIGFuZCBgc2hhM181MTJgLiBBcyBwYXJ0IG9mIHRoZSBwYXRjaCBzb21lIGNvbW1vbgorICBjb2RlIHdhcyBtb3ZlZCBmcm9tIF9oYXNob3BlbnNzbC5jIHRvIGhhc2hsaWIuaC4KKworLSBjdHlwZXMuY2FsbF9jb21tZXRob2Qgd2FzIHJlbW92ZWQsIHNpbmNlIGl0cyBvbmx5IHVzYWdlIHdhcyBpbiB0aGUgZGVmdW5jdAorICBzYW1wbGVzIGRpcmVjdG9yeS4KKworLSBJc3N1ZSAjMTY2OTI6IEFkZGVkIFRMU3YxLjEgYW5kIFRMU3YxLjIgc3VwcG9ydCBmb3IgdGhlIHNzbCBtb2R1bGVzLgorCistIElzc3VlICMxNjgzMjogYWRkIGFiYy5nZXRfY2FjaGVfdG9rZW4oKSB0byBleHBvc2UgY2FjaGUgdmFsaWRpdHkgY2hlY2tpbmcKKyAgc3VwcG9ydCBpbiBBQkNNZXRhLgogCiBJRExFCiAtLS0tCiAKLS0gSXNzdWUgIzE4ODczOiBJRExFIG5vdyBkZXRlY3RzIFB5dGhvbiBzb3VyY2UgY29kZSBlbmNvZGluZyBvbmx5IGluIGNvbW1lbnQKLSAgbGluZXMuCi0KLS0gSXNzdWUgIzE4OTg4OiBUaGUgIlRhYiIga2V5IG5vdyB3b3JrcyB3aGVuIGEgd29yZCBpcyBhbHJlYWR5IGF1dG9jb21wbGV0ZWQuCi0KLS0gSXNzdWUgIzE4NDg5OiBBZGQgdGVzdHMgZm9yIFNlYXJjaEVuZ2luZS4gT3JpZ2luYWwgcGF0Y2ggYnkgUGhpbCBXZWJzdGVyLgotCiAtIElzc3VlICMxODQyOTogRm9ybWF0IC8gRm9ybWF0IFBhcmFncmFwaCwgbm93IHdvcmtzIHdoZW4gY29tbWVudCBibG9ja3MKICAgYXJlIHNlbGVjdGVkLiBBcyB3aXRoIHRleHQgYmxvY2tzLCB0aGlzIHdvcmtzIGJlc3Qgd2hlbiB0aGUgc2VsZWN0aW9uCiAgIG9ubHkgaW5jbHVkZXMgY29tcGxldGUgbGluZXMuCkBAIC0xMjUwLDM4ICs1NzkyLDczIEBACiAKIC0gSXNzdWUgIzE0MTQ2OiBIaWdobGlnaHQgc291cmNlIGxpbmUgd2hpbGUgZGVidWdnaW5nIG9uIFdpbmRvd3MuCiAKKy0gSXNzdWUgIzE3ODM4OiBBbGxvdyBzeXMuc3RkaW4gdG8gYmUgcmVhc3NpZ25lZC4KKworLSBJc3N1ZSAjMTM0OTU6IEF2b2lkIGxvYWRpbmcgdGhlIGNvbG9yIGRlbGVnYXRvciB0d2ljZSBpbiBJRExFLgorCistIElzc3VlICMxNzc5ODogQWxsb3cgSURMRSB0byBlZGl0IG5ldyBmaWxlcyB3aGVuIHNwZWNpZmllZCBvbiBjb21tYW5kIGxpbmUuCisKKy0gSXNzdWUgIzE0NzM1OiBVcGRhdGUgSURMRSBkb2NzIHRvIG9taXQgIkNvbnRyb2wteiBvbiBXaW5kb3dzIi4KKwogLSBJc3N1ZSAjMTc1MzI6IEFsd2F5cyBpbmNsdWRlIE9wdGlvbnMgbWVudSBmb3IgSURMRSBvbiBPUyBYLgogICBQYXRjaCBieSBHdWlsaGVybWUgU2ltw7Vlcy4KIAorLSBJc3N1ZSAjMTc1ODU6IEZpeGVkIElETEUgcmVncmVzc2lvbi4gTm93IGNsb3NlcyB3aGVuIHVzaW5nIGV4aXQoKSBvciBxdWl0KCkuCisKKy0gSXNzdWUgIzE3NjU3OiBTaG93IGZ1bGwgVGsgdmVyc2lvbiBpbiBJRExFJ3MgYWJvdXQgZGlhbG9nLgorICBQYXRjaCBieSBUb2RkIFJvdml0by4KKworLSBJc3N1ZSAjMTc2MTM6IFByZXZlbnQgdHJhY2ViYWNrIHdoZW4gcmVtb3Zpbmcgc3ludGF4IGNvbG9yaXplciBpbiBJRExFLgorCistIElzc3VlICMxMjA3NTg5OiBCYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBwYXRjaCBmb3IgcmlnaHQtY2xpY2sgbWVudSBpbiBJRExFLgorCistIElzc3VlICMxNjg4NzogSURMRSBub3cgYWNjZXB0cyBDYW5jZWwgaW4gdGFiaWZ5L3VudGFiaWZ5IGRpYWxvZyBib3guCisKKy0gSXNzdWUgIzE3NjI1OiBJbiBJRExFLCBjbG9zZSB0aGUgcmVwbGFjZSBkaWFsb2cgYWZ0ZXIgaXQgaXMgdXNlZC4KKworLSBJc3N1ZSAjMTQyNTQ6IElETEUgbm93IGhhbmRsZXMgcmVhZGxpbmUgY29ycmVjdGx5IGFjcm9zcyBzaGVsbCByZXN0YXJ0cy4KKworLSBJc3N1ZSAjMTc2MTQ6IElETEUgbm8gbG9uZ2VyIHJhaXNlcyBleGNlcHRpb24gd2hlbiBxdWlja2x5IGNsb3NpbmcgYSBmaWxlLgorCistIElzc3VlICM2Njk4OiBJRExFIG5vdyBvcGVucyBqdXN0IGFuIGVkaXRvciB3aW5kb3cgd2hlbiBjb25maWd1cmVkIHRvIGRvIHNvLgorCistIElzc3VlICM4OTAwOiBVc2luZyBrZXlib2FyZCBzaG9ydGN1dHMgaW4gSURMRSB0byBvcGVuIGEgZmlsZSBubyBsb25nZXIKKyAgcmFpc2VzIGFuIGV4Y2VwdGlvbi4KKworLSBJc3N1ZSAjNjY0OTogRml4ZWQgbWlzc2luZyBleGl0IHN0YXR1cyBpbiBJRExFLiBQYXRjaCBieSBHdWlsaGVybWUgUG9sby4KKworLSBJc3N1ZSAjMTcxMTQ6IElETEUgbm93IHVzZXMgbm9uLXN0cmljdCBjb25maWcgcGFyc2VyLgorCistIElzc3VlICM5MjkwOiBJbiBJRExFIHRoZSBzeXMuc3RkKiBzdHJlYW1zIG5vdyBpbXBsZW1lbnQgaW8uVGV4dElPQmFzZQorICBpbnRlcmZhY2UgYW5kIHN1cHBvcnQgYWxsIG1hbmRhdG9yeSBtZXRob2RzIGFuZCBwcm9wZXJ0aWVzLgorCistIElzc3VlICM1MDY2OiBVcGRhdGUgSURMRSBkb2NzLiBQYXRjaCBieSBUb2RkIFJvdml0by4KKworLSBJc3N1ZSAjMTY4Mjk6IElETEUgcHJpbnRpbmcgbm8gbG9uZ2VyIGZhaWxzIGlmIHRoZXJlIGFyZSBzcGFjZXMgb3Igb3RoZXIKKyAgc3BlY2lhbCBjaGFyYWN0ZXJzIGluIHRoZSBmaWxlIHBhdGguCisKKy0gSXNzdWUgIzE2NDkxOiBJRExFIG5vdyBwcmludHMgY2hhaW5lZCBleGNlcHRpb24gdHJhY2ViYWNrcy4KKworLSBJc3N1ZSAjMTY4MTk6IElETEUgbWV0aG9kIGNvbXBsZXRpb24gbm93IGNvcnJlY3RseSB3b3JrcyBmb3IgYnl0ZXMgbGl0ZXJhbHMuCisKKy0gSXNzdWUgIzE2NTA0OiBJRExFIG5vdyBjYXRjaGVzIFN5bnRheEVycm9ycyByYWlzZWQgYnkgdG9rZW5pemVyLiBQYXRjaCBieQorICBSb2dlciBTZXJ3eS4KKworLSBJc3N1ZSAjMTY1MTE6IFVzZSBkZWZhdWx0IElETEUgd2lkdGggYW5kIGhlaWdodCBpZiBjb25maWcgcGFyYW0gaXMgbm90IHZhbGlkLgorICBQYXRjaCBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxMjA3NTg5OiBBZGQgQ3V0L0NvcHkvUGFzdGUgaXRlbXMgdG8gSURMRSByaWdodCBjbGljayBDb250ZXh0IE1lbnUuCisgIFBhdGNoIGJ5IFRvZGQgUm92aXRvLgorCistIElzc3VlICMxNjEyMzogSURMRSAtIGRlcHJlY2F0ZSBydW5uaW5nIHdpdGhvdXQgYSBzdWJwcm9jZXNzLgorICBQYXRjaCBieSBSb2dlciBTZXJ3eS4KKwogVGVzdHMKIC0tLS0tCiAKLS0gSXNzdWUgIzE0NDA3OiBGaXggdW5pdHRlc3QgdGVzdCBkaXNjb3ZlcnkgaW4gdGVzdF9jb25jdXJyZW50X2Z1dHVyZXMuCi0KLS0gSXNzdWUgIzE4OTE5OiBVbmlmaWVkIGFuZCBleHRlbmRlZCB0ZXN0cyBmb3IgYXVkaW8gbW9kdWxlczogYWlmYywgc3VuYXUgYW5kCi0gIHdhdmUuCi0KLS0gSXNzdWUgIzE4OTUyOiBGaXggcmVncmVzc2lvbiBpbiBzdXBwb3J0IGRhdGEgZG93bmxvYWRzIGludHJvZHVjZWQgd2hlbgotICB0ZXN0LnN1cHBvcnQgd2FzIGNvbnZlcnRlZCB0byBhIHBhY2thZ2UuIFJlZ3Jlc3Npb24gbm90aWNlZCBieSBaYWNoYXJ5Ci0gIFdhcmUuCi0KLS0gSXNzdWUgIzEyMDM3OiBGaXggdGVzdF9lbWFpbCBmb3IgZGVza3RvcCBXaW5kb3dzLgotCi0tIElzc3VlICMxNTUwNzogdGVzdF9zdWJwcm9jZXNzJ3MgdGVzdF9zZW5kX3NpZ25hbCBjb3VsZCBmYWlsIGlmIHRoZSB0ZXN0Ci0gIHJ1bm5lciB3ZXJlIHJ1biBpbiBhbiBlbnZpcm9ubWVudCB3aGVyZSB0aGUgcHJvY2VzcyBpbmhlcml0ZWQgYW4gaWdub3JlCi0gIHNldHRpbmcgZm9yIFNJR0lOVC4gIFJlc3RvcmUgdGhlIFNJR0lOVCBoYW5kbGVyIHRvIHRoZSBkZXNpcmVkCi0gIEtleWJvYXJkSW50ZXJydXB0IHJhaXNpbmcgb25lIGR1cmluZyB0aGF0IHRlc3QuCi0KLS0gSXNzdWUgIzE4NzkyOiBVc2UgIjEyNy4wLjAuMSIgb3IgIjo6MSIgaW5zdGVhZCBvZiAibG9jYWxob3N0IiBhcyBtdWNoIGFzCi0gIHBvc3NpYmxlLCBzaW5jZSAibG9jYWxob3N0IiBnb2VzIHRocm91Z2ggYSBETlMgbG9va3VwIHVuZGVyIHJlY2VudCBXaW5kb3dzCi0gIHZlcnNpb25zLgotCiAtIElzc3VlICMxNjY2MzE4OiBBZGQgYSB0ZXN0IHRoYXQgc2h1dGlsLmNvcHl0cmVlKCkgcmV0YWlucyBkaXJlY3RvcnkKICAgcGVybWlzc2lvbnMuICBQYXRjaCBieSBDYXRoZXJpbmUgRGV2bGluLgogCi0tIElzc3VlICMxODM1NzogYWRkIHRlc3RzIGZvciBkaWN0dmlldyBzZXQgZGlmZmVyZW5jZS4KLSAgUGF0Y2ggYnkgRnJhc2VyIFR3ZWVkYWxlLgotCiAtIElzc3VlICMxODI3MzogbW92ZSB0aGUgdGVzdHMgaW4gTGliL3Rlc3QvanNvbl90ZXN0cyB0byBMaWIvdGVzdC90ZXN0X2pzb24KICAgYW5kIG1ha2UgdGhlbSBkaXNjb3ZlcmFibGUgYnkgdW5pdHRlc3QuICBQYXRjaCBieSBaYWNoYXJ5IFdhcmUuCiAKQEAgLTEzMTMsMjg1ICs1ODkwLDEzIEBACiAKIC0gSXNzdWUgIzExMTg1OiBGaXggdGVzdF93YWl0NCB1bmRlciBBSVguICBQYXRjaCBieSBTw6liYXN0aWVuIFNhYmzDqS4KIAotLSBJc3N1ZSAjMTc2OTE6IHRlc3RfdW5pdm5ld2xpbmVzIG5vdyB3b3JrcyB3aXRoIHVuaXR0ZXN0IHRlc3QgZGlzY292ZXJ5LgotICBQYXRjaCBieSBaYWNoYXJ5IFdhcmUuCistIElzc3VlICMxODIwNzogRml4IHRlc3Rfc3NsIGZvciBzb21lIHZlcnNpb25zIG9mIE9wZW5TU0wgdGhhdCBpZ25vcmUgc2Vjb25kcworICBpbiBBU04xX1RJTUUgZmllbGRzLgogCi0tIElzc3VlICMxODA5NDogdGVzdF91dWlkIG5vIG1vcmUgcmVwb3J0cyBza2lwcGVkIHRlc3RzIGFzIHBhc3NlZC4KKy0gSXNzdWUgIzE4MDk0OiB0ZXN0X3V1aWQgbm8gbG9uZ2VyIHJlcG9ydHMgc2tpcHBlZCB0ZXN0cyBhcyBwYXNzZWQuCiAKLS0gSXNzdWUgIzExOTk1OiB0ZXN0X3B5ZG9jIGRvZXNuJ3QgaW1wb3J0IGFsbCBzeXMucGF0aCBtb2R1bGVzIGFueW1vcmUuCi0KLURvY3VtZW50YXRpb24KLS0tLS0tLS0tLS0tLS0KLQotLSBJc3N1ZSAjMTkzOTI6IERvY3VtZW50IHRoYXQgYGltcC5yZWxvYWQoKWAgbm93IGFsc28gcmVxdWlyZXMgYF9fbG9hZGVyX19gIHRvCi0gIGJlIHNldCBvbiB0aGUgbW9kdWxlIGJlaW5nIHJlbG9hZGVkLgotCi0tIElzc3VlICMxODc1ODogRml4ZWQgYW5kIGltcHJvdmVkIGNyb3NzLXJlZmVyZW5jZXMuCi0KLS0gSXNzdWUgIzE4NzQzOiBGaXggcmVmZXJlbmNlcyB0byBub24tZXhpc3RhbnQgIlN0cmluZ0lPIiBtb2R1bGUuCi0KLS0gSXNzdWUgIzE4NzgzOiBSZW1vdmVkIGV4aXN0aW5nIG1lbnRpb25zIG9mIFB5dGhvbiBsb25nIHR5cGUgaW4gZG9jc3RyaW5ncywKLSAgZXJyb3IgbWVzc2FnZXMgYW5kIGNvbW1lbnRzLgotCi0tIElzc3VlICMxNzcwMTogSW1wcm92aW5nIHN0cmZ0aW1lIGRvY3VtZW50YXRpb24uCi0KLS0gSXNzdWUgIzE4NDQwOiBDbGFyaWZ5IHRoYXQgYGhhc2goKWAgY2FuIHRydW5jYXRlIHRoZSB2YWx1ZSByZXR1cm5lZCBmcm9tIGFuCi0gIG9iamVjdCdzIGN1c3RvbSBgX19oYXNoX18oKWAgbWV0aG9kLgotCi0tIElzc3VlICMxNzk1MzogTWVudGlvbiB0aGF0IHlvdSBzaG91bGRuJ3QgcmVwbGFjZSBzeXMubW9kdWxlcyBhbmQgZGVsZXRpbmcga2V5Ci0gIGl0ZW1zIHdpbGwgY2F1c2UgUHl0aG9uIHRvIG5vdCBiZSBoYXBweS4KLQotLSBJc3N1ZSAjMTc4NDQ6IEFkZCBsaW5rcyB0byBlbmNvZGVycyBhbmQgZGVjb2RlcnMgZm9yIGJ5dGVzLXRvLWJ5dGVzIGNvZGVjcy4KLQotLSBJc3N1ZSAjMTQwOTc6IGltcHJvdmUgdGhlICJpbnRyb2R1Y3Rpb24iIHBhZ2Ugb2YgdGhlIHR1dG9yaWFsLgotCi0tIElzc3VlICMxNzk3NzogVGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZSBjYWRlZmF1bHQgYXJndW1lbnQncyBkZWZhdWx0IHZhbHVlCi0gIGluIHVybGxpYi5yZXF1ZXN0LnVybG9wZW4oKSBpcyBmaXhlZCB0byBtYXRjaCB0aGUgY29kZS4KLQotVG9vbHMvRGVtb3MKLS0tLS0tLS0tLS0tCi0KLS0gSXNzdWUgIzE4ODczOiAydG8zIGFuZCB0aGUgZmluZG5vY29kaW5nLnB5IHNjcmlwdCBub3cgZGV0ZWN0IFB5dGhvbiBzb3VyY2UKLSAgY29kZSBlbmNvZGluZyBvbmx5IGluIGNvbW1lbnQgbGluZXMuCi0KLS0gSXNzdWUgIzE4ODE3OiBGaXggYSByZXNvdXJjZSB3YXJuaW5nIGluIExpYi9haWZjLnB5IGRlbW8uCi0KLS0gSXNzdWUgIzE4NDM5OiBNYWtlIHBhdGNoY2hlY2sgd29yayBvbiBXaW5kb3dzIGZvciBBQ0tTLCBORVdTLgotCi0tIElzc3VlICMxODQ0ODogRml4IGEgdHlwbyBpbiBUb29scy9kZW1vL2VpZmZlbC5weS4KLQotLSBJc3N1ZSAjMTg0NTc6IEZpeGVkIHNhdmluZyBvZiBmb3JtdWxhcyBhbmQgY29tcGxleCBudW1iZXJzIGluCi0gIFRvb2xzL2RlbW8vc3MxLnB5LgotCi0tIElzc3VlICMxODQ0OTogTWFrZSBUb29scy9kZW1vL3NzMS5weSB3b3JrIGFnYWluIG9uIFB5dGhvbiAzLiAgUGF0Y2ggYnkKLSAgRsOpdnJ5IFRoaWJhdWx0LgotCi0tIElzc3VlICMxNTIzOTogTWFrZSBta3N0cmluZ3ByZXAucHkgd29yayBhZ2FpbiBvbiBQeXRob24gMy4KLQotLSBJc3N1ZSAjMTI5OTA6IFRoZSAiUHl0aG9uIExhdW5jaGVyIiBvbiBPU1ggY291bGQgbm90IGxhdW5jaCBweXRob24gc2NyaXB0cwotICB0aGF0IGhhdmUgcGF0aHMgdGhhdCBpbmNsdWRlIHdpZGUgY2hhcmFjdGVycy4KLQotQnVpbGQKLS0tLS0tCi0KLS0gSXNzdWUgIzE5MzU2OiBBdm9pZCB1c2luZyBhIEMgdmFyaWFibGVkIG5hbWVkICJfc2VsZiIsIGl0J3MgYSByZXNlcnZlZAotICB3b3JkIGluIHNvbWUgQyBjb21waWxlcnMuCi0KLS0gSXNzdWUgIzE5MTMwOiBDb3JyZWN0IFBDYnVpbGQvcmVhZG1lLnR4dCwgUHl0aG9uIDMuMyBhbmQgMy40IHJlcXVpcmUgVlMgMjAxMC4KLQotLSBJc3N1ZSAjMTYwNjc6IEFkZCBkZXNjcmlwdGlvbiBpbnRvIE1TSSBmaWxlIHRvIHJlcGxhY2UgaW5zdGFsbGVyJ3MgdGVtcG9yYXJ5IG5hbWUuCi0KLS0gSXNzdWUgIzE4MjU2OiBDb21waWxhdGlvbiBmaXggZm9yIHJlY2VudCBBSVggcmVsZWFzZXMuICBQYXRjaCBieQotICBEYXZpZCBFZGVsc29obi4KLQotLSBJc3N1ZSAjMTUxNzI6IERvY3VtZW50IE5BU00gMi4xMCsgYXMgcmVxdWlyZW1lbnQgZm9yIGJ1aWxkaW5nIE9wZW5TU0wgMS4wLjEKLSAgb24gV2luZG93cy4KLQotLSBJc3N1ZSAjMTU4NDogUHJvdmlkZSBvcHRpb25zIHRvIG92ZXJyaWRlIGRlZmF1bHQgc2VhcmNoIHBhdGhzIGZvcgotICBUY2wgYW5kIFRrIHdoZW4gYnVpbGRpbmcgX3RraW50ZXIuCi0KLS0gSXNzdWUgIzE1NjYzOiBUY2wvVGsgOC41LjE1IGlzIG5vdyBpbmNsdWRlZCB3aXRoIHRoZSBPUyBYIDEwLjYrCi0gIDY0LWJpdC8zMi1iaXQgaW5zdGFsbGVyIGZvciAxMC42Ky4gIEl0IGlzIG5vIGxvbmdlciBuZWNlc3NhcnkKLSAgdG8gaW5zdGFsbCBhIHRoaXJkLXBhcnR5IHZlcnNpb24gb2YgVGNsL1RrIDguNSB0byB3b3JrIGFyb3VuZCB0aGUKLSAgcHJvYmxlbXMgaW4gdGhlIEFwcGxlLXN1cHBsaWVkIFRjbC9UayA4LjUgc2hpcHBlZCBpbiBPUyBYIDEwLjYKLSAgYW5kIGxhdGVyIHJlbGVhc2VzLgotCi0tIElzc3VlICMxOTAxOTogQ2hhbmdlIHRoZSBPUyBYIGluc3RhbGxlciBidWlsZCBzY3JpcHQgdG8gdXNlIENGTEFHUyBpbnN0ZWFkCi0gIG9mIE9QVCBmb3Igc3BlY2lhbCBidWlsZCBvcHRpb25zLiAgQnkgc2V0dGluZyBPUFQsIHNvbWUgY29tcGlsZXItc3BlY2lmaWMKLSAgb3B0aW9ucyBsaWtlIC1md3JhcHYgd2VyZSBvdmVycmlkZGVuIGFuZCB0aHVzIG5vdCB1c2VkLCB3aGljaCBjb3VsZCByZXN1bHQKLSAgaW4gYnJva2VuIGludGVycHJldGVycyB3aGVuIGJ1aWxkaW5nIHdpdGggY2xhbmcuCi0KLQotV2hhdCdzIE5ldyBpbiBQeXRob24gMy4zLjI/Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotKlJlbGVhc2UgZGF0ZTogMTMtTWF5LTIwMTMqCi0KLUNvcmUgYW5kIEJ1aWx0aW5zCi0tLS0tLS0tLS0tLS0tLS0tLQotCi0tIElzc3VlICMxNzIzNzogRml4IGNyYXNoIGluIHRoZSBBU0NJSSBkZWNvZGVyIG9uIG02OGsuCi0KLS0gSXNzdWUgIzE3NDA4OiBBdm9pZCB1c2luZyBhbiBvYnNvbGV0ZSBpbnN0YW5jZSBvZiB0aGUgY29weXJlZyBtb2R1bGUgd2hlbgotICB0aGUgaW50ZXJwcmV0ZXIgaXMgc2h1dGRvd24gYW5kIHRoZW4gc3RhcnRlZCBhZ2Fpbi4KLQotLSBJc3N1ZSAjMTc4NjM6IEluIHRoZSBpbnRlcmFjdGl2ZSBjb25zb2xlLCBkb24ndCBsb29wIGZvcmV2ZXIgaWYgdGhlIGVuY29kaW5nCi0gIGNhbid0IGJlIGZldGNoZWQgZnJvbSBzdGRpbi4KLQotLSBJc3N1ZSAjMTc4Njc6IFJhaXNlIGFuIEltcG9ydEVycm9yIGlmIF9faW1wb3J0X18gaXMgbm90IGZvdW5kIGluIF9fYnVpbHRpbnNfXy4KLQotLSBJc3N1ZSAjMTc4NTc6IFByZXZlbnQgYnVpbGQgZmFpbHVyZXMgd2l0aCBwcmUtMy41LjAgdmVyc2lvbnMgb2Ygc3FsaXRlMywKLSAgc3VjaCBhcyB3YXMgc2hpcHBlZCB3aXRoIENlbnRvcyA1IGFuZCBNYWMgT1MgWCAxMC40LgotCi0tIElzc3VlICMxNzQxMzogc3lzLnNldHRyYWNlIGNhbGxiYWNrcyB3ZXJlIGJlaW5nIHBhc3NlZCBhIHN0cmluZyBpbnN0ZWFkIG9mIGFuCi0gIGV4Y2VwdGlvbiBpbnN0YW5jZSBmb3IgdGhlICd2YWx1ZScgZWxlbWVudCBvZiB0aGUgYXJnIHR1cGxlIGlmIHRoZSBleGNlcHRpb24KLSAgb3JpZ2luYXRlZCBmcm9tIEMgY29kZTsgbm93IGFuIGV4Y2VwdGlvbiBpbnN0YW5jZSBpcyBhbHdheXMgcHJvdmlkZWQuCi0KLS0gSXNzdWUgIzE3NzgyOiBGaXggdW5kZWZpbmVkIGJlaGF2aW91ciBvbiBwbGF0Zm9ybXMgd2hlcmUKLSAgYGBzdHJ1Y3QgdGltZXNwZWNgYCdzICJ0dl9uc2VjIiBtZW1iZXIgaXMgbm90IGEgQyBsb25nLgotCi0tIElzc3VlICMxNzcxNTogRml4IHNlZ21lbnRhdGlvbiBmYXVsdCBmcm9tIHJhaXNpbmcgYW4gZXhjZXB0aW9uIGluIGEgX190cnVuY19fCi0gIG1ldGhvZC4KLQotLSBJc3N1ZSAjMTY0NDc6IEZpeGVkIHBvdGVudGlhbCBzZWdtZW50YXRpb24gZmF1bHQgd2hlbiBzZXR0aW5nIF9fbmFtZV9fIG9uIGEKLSAgY2xhc3MuCi0KLS0gSXNzdWUgIzE3NjY5OiBGaXggY3Jhc2ggaW52b2x2aW5nIGZpbmFsaXphdGlvbiBvZiBnZW5lcmF0b3JzIHVzaW5nIHlpZWxkIGZyb20uCi0KLS0gSXNzdWUgIzE3NjE5OiBNYWtlIGlucHV0KCkgY2hlY2sgZm9yIEN0cmwtQyBjb3JyZWN0bHkgb24gV2luZG93cy4KLQotLSBJc3N1ZSAjMTc2MTA6IERvbid0IHJlbHkgb24gbm9uLXN0YW5kYXJkIGJlaGF2aW9yIG9mIHRoZSBDIHFzb3J0KCkgZnVuY3Rpb24uCi0KLS0gSXNzdWUgIzE3MzU3OiBBZGQgbWlzc2luZyB2ZXJib3NpdHkgb3V0cHV0IHdoZW4gdXNpbmcgLXYvLXZ2LgotCi1MaWJyYXJ5Ci0tLS0tLS0tCi0KLS0gSXNzdWUgIzE3NjA2OiBGaXhlZCBzdXBwb3J0IG9mIGVuY29kZWQgYnl0ZSBzdHJpbmdzIGluIHRoZSBYTUxHZW5lcmF0b3IKLSAgY2hhcmFjdGVycygpIGFuZCBpZ25vcmFibGVXaGl0ZXNwYWNlKCkgbWV0aG9kcy4gIE9yaWdpbmFsIHBhdGNoIGJ5IFNlYmFzdGlhbgotICBPcnRpeiBWYXNxdWV6LgotCi0tIElzc3VlICMxNzczMjogSWdub3JlIGRpc3R1dGlscy5jZmcgb3B0aW9ucyBwZXJ0YWluaW5nIHRvIGluc3RhbGwgcGF0aHMgaWYgYQotICB2aXJ0dWFsIGVudmlyb25tZW50IGlzIGFjdGl2ZS4KLQotLSBJc3N1ZSAjMTE1OTA1MTogQmFjayBvdXQgYSBmaXggZm9yIGhhbmRsaW5nIGNvcnJ1cHRlZCBnemlwIGZpbGVzIHRoYXQKLSAgYnJva2UgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuCi0KLS0gSXNzdWUgIzE3OTE1OiBGaXggaW50ZXJvcGVyYWJpbGl0eSBvZiB4bWwuc2F4IHdpdGggZmlsZSBvYmplY3RzIHJldHVybmVkIGJ5Ci0gIGNvZGVjcy5vcGVuKCkuCi0KLS0gSXNzdWUgIzE2NjAxOiBSZXN0YXJ0aW5nIGl0ZXJhdGlvbiBvdmVyIHRhcmZpbGUgbm8gbW9yZSBjb250aW51ZXMgZnJvbSB3aGVyZQotICBpdCBsZWZ0IG9mZi4gIFBhdGNoIGJ5IE1pY2hhZWwgQmlydHdlbGwuCi0KLS0gSXNzdWUgIzE3Mjg5OiBUaGUgcmVhZGxpbmUgbW9kdWxlIG5vdyBwbGF5cyBuaWNlciB3aXRoIGV4dGVybmFsIG1vZHVsZXMKLSAgb3IgYXBwbGljYXRpb25zIGNoYW5naW5nIHRoZSBybF9jb21wbGV0ZXJfd29yZF9icmVha19jaGFyYWN0ZXJzIGdsb2JhbAotICB2YXJpYWJsZS4gIEluaXRpYWwgcGF0Y2ggYnkgQnJhZGxleSBGcm9laGxlLgotCi0tIElzc3VlICMxMjE4MTogc2VsZWN0IG1vZHVsZTogRml4IHN0cnVjdCBrZXZlbnQgZGVmaW5pdGlvbiBvbiBPcGVuQlNEIDY0LWJpdAotICBwbGF0Zm9ybXMuIFBhdGNoIGJ5IEZlZGVyaWNvIFNjaHdpbmR0LgotCi0tIElzc3VlICMxNDE3MzogQXZvaWQgY3Jhc2hpbmcgd2hlbiByZWFkaW5nIGEgc2lnbmFsIGhhbmRsZXIgZHVyaW5nCi0gIGludGVycHJldGVyIHNodXRkb3duLgotCi0tIElzc3VlICMxNjMxNjogbWltZXR5cGVzIG5vdyByZWNvZ25pemVzIHRoZSAueHogYW5kIC50eHogKC50YXIueHopIGV4dGVuc2lvbnMuCi0KLS0gSXNzdWUgIzE1OTAyOiBGaXggaW1wLmxvYWRfbW9kdWxlKCkgYWNjZXB0aW5nIE5vbmUgYXMgYSBmaWxlIHdoZW4gbG9hZGluZyBhbgotICBleHRlbnNpb24gbW9kdWxlLgotCi0tIElzc3VlICMxNzgwMjogRml4IGFuIFVuYm91bmRMb2NhbEVycm9yIGluIGh0bWwucGFyc2VyLiAgSW5pdGlhbCB0ZXN0cyBieQotICBUaG9tYXMgQmFybG93LgotCi0tIElzc3VlICMxNTUzNTogRml4IG5hbWVkdHVwbGUgcGlja2xlcyB3aGljaCB3ZXJlIHBpY2tpbmcgdXAgdGhlIE9yZGVyZWREaWN0Ci0gIGluc3RlYWQgb2YganVzdCB0aGUgdW5kZXJseWluZyB0dXBsZS4KLQotLSBJc3N1ZSAjMTcxOTI6IFJlc3RvcmUgdGhlIHBhdGNoIGZvciBJc3N1ZSAjMTE3Mjkgd2hpY2ggd2FzIG9tbWl0dGVkIGluCi0gIDMuMy4xIHdoZW4gdXBkYXRpbmcgdGhlIGJ1bmRsZWQgdmVyc2lvbiBvZiBsaWJmZmkgdXNlZCBieSBjdHlwZXMuICBVcGRhdGUKLSAgbWFueSBsaWJmZmkgZmlsZXMgdGhhdCB3ZXJlIG1pc3NlZCBpbiAzLjMuMSdzIHVwZGF0ZSB0byBsaWJmZmktMy4wLjEzLgotCi0tIElzc3VlICMxNzM1ODogTW9kdWxlcyBsb2FkZWQgYnkgaW1wLmxvYWRfc291cmNlKCkgYW5kIGxvYWRfY29tcGlsZWQoKSAoYW5kIGJ5Ci0gIGV4dGVudGlvbiBsb2FkX21vZHVsZSgpKSBub3cgaGF2ZSBhIGJldHRlciBjaGFuY2Ugb2Ygd29ya2luZyB3aGVuIHJlbG9hZGVkLgotCi0tIElzc3VlICMxNzM1MzogUGxpc3RsaWIgZW1pdHRlZCBlbXB0eSBkYXRhIHRhZ3Mgd2l0aCBkZWVwbHkgbmVzdGVkIGRhdGFzdHJ1Y3R1cmVzCi0KLS0gSXNzdWUgIzExNzE0OiBVc2UgJ3dpdGgnIHN0YXRlbWVudHMgdG8gYXNzdXJlIGEgU2VtYXBob3JlIHJlbGVhc2VzIGEKLSAgY29uZGl0aW9uIHZhcmlhYmxlLiAgT3JpZ2luYWwgcGF0Y2ggYnkgVGhvbWFzIFJhY2hlbC4KLQotLSBJc3N1ZSAjMTc3OTU6IFJldmVydGVkIGJhY2t3YXJkcy1pbmNvbXBhdGlibGUgY2hhbmdlIGluIFN5c0xvZ0hhbmRsZXIgd2l0aAotICBVbml4IGRvbWFpbiBzb2NrZXRzLgotCi0tIElzc3VlICMxNzU1NTogRml4IEZvcmtBd2FyZVRocmVhZExvY2sgc28gdGhhdCBzaXplIG9mIGFmdGVyIGZvcmsKLSAgcmVnaXN0cnkgZG9lcyBub3QgZ3JvdyBleHBvbmVudGlhbGx5IHdpdGggZ2VuZXJhdGlvbiBvZiBwcm9jZXNzLgotCi0tIElzc3VlICMxNzcwNzogbXVsdGlwcm9jZXNzaW5nLlF1ZXVlJ3MgZ2V0KCkgbWV0aG9kIGRvZXMgbm90IGJsb2NrIGZvciBzaG9ydAotICB0aW1lb3V0cy4KLQotLSBJc3VzZSAjMTc3MjA6IEZpeCB0aGUgUHl0aG9uIGltcGxlbWVudGF0aW9uIG9mIHBpY2tsZS5VbnBpY2tsZXIgdG8gY29ycmVjdGx5Ci0gIHByb2Nlc3MgdGhlIEFQUEVORFMgb3Bjb2RlIHdoZW4gaXQgaXMgdXNlZCBvbiBub24tbGlzdCBvYmplY3RzLgotCi0tIElzc3VlICMxNzAxMjogc2h1dGlsLndoaWNoKCkgbm8gbG9uZ2VyIGZhbGxiYWNrcyB0byB0aGUgUEFUSCBlbnZpcm9ubWVudAotICB2YXJpYWJsZSBpZiBlbXB0eSBwYXRoIGFyZ3VtZW50IGlzIHNwZWNpZmllZC4gIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCi0KLS0gSXNzdWUgIzE3NzEwOiBGaXggcGlja2xlIHJhaXNpbmcgYSBTeXN0ZW1FcnJvciBvbiBib2d1cyBpbnB1dC4KLQotLSBJc3N1ZSAjMTczNDE6IEluY2x1ZGUgdGhlIGludmFsaWQgbmFtZSBpbiB0aGUgZXJyb3IgbWVzc2FnZXMgZnJvbSByZSBhYm91dAotICBpbnZhbGlkIGdyb3VwIG5hbWVzLgotCi0tIElzc3VlICMxNzcwMjogb3MuZW52aXJvbiBub3cgcmFpc2VzIEtleUVycm9yIHdpdGggdGhlIG9yaWdpbmFsIGVudmlyb25tZW50Ci0gIHZhcmlhYmxlIG5hbWUgKHN0ciBvbiBVTklYKSwgaW5zdGVhZCBvZiB1c2luZyB0aGUgZW5jb2RlZCBuYW1lIChieXRlcyBvbgotICBVTklYKS4KLQotLSBJc3N1ZSAjMTYxNjM6IE1ha2UgdGhlIGltcG9ydGxpYiBiYXNlZCB2ZXJzaW9uIG9mIHBrZ3V0aWwuaXRlcl9pbXBvcnRlcnMKLSAgd29yayBmb3Igc3VibW9kdWxlcy4gSW5pdGlhbCBwYXRjaCBieSBCZXJrZXIgUGVrc2FnLgotCi0tIElzc3VlICMxNjgwNDogRml4IGEgYnVnIGluIHRoZSAnc2l0ZScgbW9kdWxlIHRoYXQgY2F1c2VkIHJ1bm5pbmcKLSAgJ3B5dGhvbiAtUyAtbSBzaXRlJyB0byBpbmNvcnJlY3RseSB0aHJvdyBhbiBleGNlcHRpb24uCi0KLS0gSXNzdWUgIzE3MDE2OiBHZXQgcmlkIG9mIHBvc3NpYmxlIHBvaW50ZXIgd3JhcGFyb3VuZHMgYW5kIGludGVnZXIgb3ZlcmZsb3dzCi0gIGluIHRoZSByZSBtb2R1bGUuICBQYXRjaCBieSBOaWNrb2xhaSBaZWxkb3ZpY2guCi0KLS0gSXNzdWUgIzE2NjU4OiBhZGQgbWlzc2luZyByZXR1cm4gdG8gSFRUUENvbm5lY3Rpb24uc2VuZCgpCi0gIFBhdGNoIGJ5IEplZmYgS251cHAuCi0KLS0gSXNzdWUgIzE0OTcxOiB1bml0dGVzdCB0ZXN0IGRpc2NvdmVyeSBubyBsb25nZXIgZ2V0cyBjb25mdXNlZCB3aGVuIGEgZnVuY3Rpb24KLSAgaGFzIGEgZGlmZmVyZW50IF9fbmFtZV9fIHRoYW4gaXRzIG5hbWUgaW4gdGhlIFRlc3RDYXNlIGNsYXNzIGRpY3Rpb25hcnkuCi0KLS0gSXNzdWUgIzE3Njc4OiBGaXggRGVwcmVjYXRpb25XYXJuaW5nIGluIHRoZSBodHRwL2Nvb2tpZWphci5weSBieSBjaGFuZ2luZyB0aGUKLSAgdXNhZ2Ugb2YgZ2V0X29yaWdpbl9yZXFfaG9zdCgpIHRvIG9yaWdpbl9yZXFfaG9zdC4KLQotLSBJc3N1ZSAjMTc2NjY6IEZpeCByZWFkaW5nIGd6aXAgZmlsZXMgd2l0aCBhbiBleHRyYSBmaWVsZC4KLQotLSBJc3N1ZSAjMTc1MDI6IFByb2Nlc3MgREVGQVVMVCB2YWx1ZXMgaW4gbW9jayBzaWRlX2VmZmVjdCB0aGF0IHJldHVybnMgaXRlcmF0b3IuCi0gIFBhdGNoIGJ5IE1pY2hhZWwgRm9vcmQuCi0KLS0gSXNzdWUgIzE3NTcyOiBBdm9pZCBjaGFpbmVkIGV4Y2VwdGlvbnMgd2hpbGUgcGFzc2luZyBiYWQgZGlyZWN0aXZlcyB0bwotICB0aW1lLnN0cnB0aW1lKCkuICBJbml0aWFsIHBhdGNoIGJ5IENsYXVkaXUgUG9wYS4KLQotLSBJc3N1ZSAjMTc0MzU6IHRocmVhZGluZy5UaW1lcidzIF9faW5pdF9fIG1ldGhvZCBubyBsb25nZXIgdXNlcyBtdXRhYmxlCi0gIGRlZmF1bHQgdmFsdWVzIGZvciB0aGUgYXJncyBhbmQga3dhcmdzIHBhcmFtZXRlcnMuCi0KLS0gSXNzdWUgIzE3NTI2OiBmaXggYW4gSW5kZXhFcnJvciByYWlzZWQgd2hpbGUgcGFzc2luZyBjb2RlIHdpdGhvdXQgZmlsZW5hbWUgdG8KLSAgaW5zcGVjdC5maW5kc291cmNlKCkuICBJbml0aWFsIHBhdGNoIGJ5IFR5bGVyIERveWxlLgotCi0tIElzc3VlICMxNjU1MDogVXBkYXRlIHRoZSBvcGNvZGUgZGVzY3JpcHRpb25zIG9mIHBpY2tsZXRvb2xzIHRvIHVzZSB1bnNpZ25lZAotICBpbnRlZ2VycyB3aGVyZSBhcHByb3ByaWF0ZS4gIEluaXRpYWwgcGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KLQotSURMRQotLS0tLQotCi0tIElzc3VlICMxNzgzODogQWxsb3cgc3lzLnN0ZGluIHRvIGJlIHJlYXNzaWduZWQuCi0KLS0gSXNzdWUgIzEzNDk1OiBBdm9pZCBsb2FkaW5nIHRoZSBjb2xvciBkZWxlZ2F0b3IgdHdpY2UgaW4gSURMRS4KLQotLSBJc3N1ZSAjMTc3OTg6IEFsbG93IElETEUgdG8gZWRpdCBuZXcgZmlsZXMgd2hlbiBzcGVjaWZpZWQgb24gY29tbWFuZCBsaW5lLgotCi0tIElzc3VlICMxNDczNTogVXBkYXRlIElETEUgZG9jcyB0byBvbWl0ICJDb250cm9sLXogb24gV2luZG93cyIuCi0KLS0gSXNzdWUgIzE3NTg1OiBGaXhlZCBJRExFIHJlZ3Jlc3Npb24uIE5vdyBjbG9zZXMgd2hlbiB1c2luZyBleGl0KCkgb3IgcXVpdCgpLgotCi0tIElzc3VlICMxNzY1NzogU2hvdyBmdWxsIFRrIHZlcnNpb24gaW4gSURMRSdzIGFib3V0IGRpYWxvZy4KLSAgUGF0Y2ggYnkgVG9kZCBSb3ZpdG8uCi0KLS0gSXNzdWUgIzE3NjEzOiBQcmV2ZW50IHRyYWNlYmFjayB3aGVuIHJlbW92aW5nIHN5bnRheCBjb2xvcml6ZXIgaW4gSURMRS4KLQotLSBJc3N1ZSAjMTIwNzU4OTogQmFja3dhcmRzLWNvbXBhdGliaWxpdHkgcGF0Y2ggZm9yIHJpZ2h0LWNsaWNrIG1lbnUgaW4gSURMRS4KLQotLSBJc3N1ZSAjMTY4ODc6IElETEUgbm93IGFjY2VwdHMgQ2FuY2VsIGluIHRhYmlmeS91bnRhYmlmeSBkaWFsb2cgYm94LgotCi0tIElzc3VlICMxNzYyNTogSW4gSURMRSwgY2xvc2UgdGhlIHJlcGxhY2UgZGlhbG9nIGFmdGVyIGl0IGlzIHVzZWQuCi0KLS0gSXNzdWUgIzE0MjU0OiBJRExFIG5vdyBoYW5kbGVzIHJlYWRsaW5lIGNvcnJlY3RseSBhY3Jvc3Mgc2hlbGwgcmVzdGFydHMuCi0KLS0gSXNzdWUgIzE3NjE0OiBJRExFIG5vIGxvbmdlciByYWlzZXMgZXhjZXB0aW9uIHdoZW4gcXVpY2tseSBjbG9zaW5nIGEgZmlsZS4KLQotLSBJc3N1ZSAjNjY5ODogSURMRSBub3cgb3BlbnMganVzdCBhbiBlZGl0b3Igd2luZG93IHdoZW4gY29uZmlndXJlZCB0byBkbyBzby4KLQotLSBJc3N1ZSAjODkwMDogVXNpbmcga2V5Ym9hcmQgc2hvcnRjdXRzIGluIElETEUgdG8gb3BlbiBhIGZpbGUgbm8gbG9uZ2VyCi0gIHJhaXNlcyBhbiBleGNlcHRpb24uCi0KLS0gSXNzdWUgIzY2NDk6IEZpeGVkIG1pc3NpbmcgZXhpdCBzdGF0dXMgaW4gSURMRS4gUGF0Y2ggYnkgR3VpbGhlcm1lIFBvbG8uCi0KLVRlc3RzCi0tLS0tLQorLSBJc3N1ZSAjMTc5OTI6IEFkZCB0aW1lb3V0cyB0byBhc3luY29yZSBhbmQgYXN5bmNoYXQgdGVzdHMgc28gdGhhdCB0aGV5IHdvbid0CisgIGFjY2lkZW50YWxseSBoYW5nLgogCiAtIElzc3VlICMxNzgzMzogRml4IHRlc3RfZ2RiIGZhaWx1cmVzIHNlZW4gb24gbWFjaGluZXMgd2hlcmUgZGVidWcgc3ltYm9scwogICBmb3IgZ2xpYmMgYXJlIGF2YWlsYWJsZSAoc2VlbiBvbiBQUEM2NCBMaW51eCkuCkBAIC0xNTk5LDYgKzU5MDQsOSBAQAogLSBJc3N1ZSAjNzg1NTogQWRkIHRlc3RzIGZvciBjdHlwZXMvd2lucmVnIGZvciBpc3N1ZXMgZm91bmQgaW4gSXJvblB5dGhvbi4KICAgSW5pdGlhbCBwYXRjaCBieSBEaW5vIFZpZWhsYW5kLgogCistIElzc3VlICMxMTA3ODogdGVzdF9fX2FsbF9fIG5vdyBjaGVja3MgZm9yIGR1cGxpY2F0ZXMgaW4gX19hbGxfXy4KKyAgSW5pdGlhbCBwYXRjaCBieSBSLiBEYXZpZCBNdXJyYXkuCisKIC0gSXNzdWUgIzE3NzEyOiBGaXggdGVzdF9nZGIgZmFpbHVyZXMgb24gVWJ1bnR1IDEzLjA0LgogCiAtIElzc3VlICMxNzgzNTogRml4IHRlc3RfaW8gd2hlbiB0aGUgZGVmYXVsdCBPUyBwaXBlIGJ1ZmZlciBzaXplIGlzIGxhcmdlcgpAQCAtMTYxMCw2ICs1OTE4LDkgQEAKIC0gSXNzdWUgIzEyODIwOiBhZGQgdGVzdHMgZm9yIHRoZSB4bWwuZG9tLm1pbmljb21wYXQgbW9kdWxlLgogICBQYXRjaCBieSBKb2huIENoYW5kbGVyIGFuZCBQaGlsIENvbm5lbGwuCiAKKy0gSXNzdWUgIzE3NjkxOiB0ZXN0X3VuaXZuZXdsaW5lcyBub3cgd29ya3Mgd2l0aCB1bml0dGVzdCB0ZXN0IGRpc2NvdmVyeS4KKyAgUGF0Y2ggYnkgWmFjaGFyeSBXYXJlLgorCiAtIElzc3VlICMxNzc5MDogdGVzdF9zZXQgbm93IHdvcmtzIHdpdGggdW5pdHRlc3QgdGVzdCBkaXNjb3ZlcnkuCiAgIFBhdGNoIGJ5IFphY2hhcnkgV2FyZS4KIApAQCAtMTYyOCw3MTYgKzU5MzksNyBAQAogLSBJc3N1ZSAjMTc2OTI6IHRlc3Rfc3FsaXRlIG5vdyB3b3JrcyB3aXRoIHVuaXR0ZXN0IHRlc3QgZGlzY292ZXJ5LgogICBQYXRjaCBieSBaYWNoYXJ5IFdhcmUuCiAKLS0gSXNzdWUgIzE3ODQzOiBSZW1vdmVkIGJ6MiB0ZXN0IGRhdGEgZmlsZSB0aGF0IHdhcyB0cmlnZ2VyaW5nIGZhbHNlLXBvc2l0aXZlCi0gIHZpcnVzIHdhcm5pbmdzIHdpdGggY2VydGFpbiBhbnRpdmlydXMgc29mdHdhcmUuCi0KLURvY3VtZW50YXRpb24KLS0tLS0tLS0tLS0tLS0KLQotLSBJc3N1ZSAjMTU5NDA6IFNwZWNpZnkgZWZmZWN0IG9mIGxvY2FsZSBvbiB0aW1lIGZ1bmN0aW9ucy4KLQotLSBJc3N1ZSAjNjY5NjogYWRkIGRvY3VtZW50YXRpb24gZm9yIHRoZSBQcm9maWxlIG9iamVjdHMsIGFuZCBpbXByb3ZlCi0gIHByb2ZpbGUvY1Byb2ZpbGUgZG9jcy4gIFBhdGNoIGJ5IFRvbSBQaW5ja25leS4KLQotLSBJc3N1ZSAjMTc5MTU6IEZpeCBpbnRlcm9wZXJhYmlsaXR5IG9mIHhtbC5zYXggd2l0aCBmaWxlIG9iamVjdHMgcmV0dXJuZWQgYnkKLSAgY29kZWNzLm9wZW4oKS4KLQotQnVpbGQKLS0tLS0tCi0KLS0gSXNzdWUgIzE3NTQ3OiBJbiBjb25maWd1cmUsIGV4cGxpY2l0bHkgcGFzcyAtV2Zvcm1hdCBmb3IgdGhlIGJlbmVmaXQgZm9yIEdDQwotICA0LjguCi0KLS0gSXNzdWUgIzE3OTYyOiBCdWlsZCB3aXRoIE9wZW5TU0wgMS4wLjFlIG9uIFdpbmRvd3MuCi0KLQotV2hhdCdzIE5ldyBpbiBQeXRob24gMy4zLjE/Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotKlJlbGVhc2UgZGF0ZTogMDctQXByLTIwMTMqCi0KLUJ1aWxkCi0tLS0tLQotCi0tIElzc3VlICMxNzU1MDogRml4IHRoZSAtLWVuYWJsZS1wcm9maWxpbmcgY29uZmlndXJlIHN3aXRjaC4KLQotSURMRQotLS0tLS0tLQotCi0tIElzc3VlICMxNzYyNTogSW4gSURMRSwgY2xvc2UgdGhlIHJlcGxhY2UgZGlhbG9nIGFmdGVyIGl0IGlzIHVzZWQuCi0KLQotV2hhdCdzIE5ldyBpbiBQeXRob24gMy4zLjEgcmVsZWFzZSBjYW5kaWRhdGUgMT8KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSpSZWxlYXNlIGRhdGU6IDI0LU1hci0yMDEzKgotCi1Db3JlIGFuZCBCdWlsdGlucwotLS0tLS0tLS0tLS0tLS0tLS0KLQotLSBJc3N1ZSAjMTczMjg6IEZpeCBwb3NzaWJsZSByZWZsZWFrIGluIGRpY3Quc2V0ZGVmYXVsdC4KLQotLSBJc3N1ZSAjMTcyMjM6IEZpeCBQeVVuaWNvZGVfRnJvbVVuaWNvZGUoKSBmb3Igc3RyaW5nIG9mIDEgY2hhcmFjdGVyIG91dHNpZGUKLSAgdGhlIHJhbmdlIFUrMDAwMC1VKzEwZmZmZi4KLQotLSBJc3N1ZSAjMTY5MjMzNTogTW92ZSBpbml0aWFsIGFyZ3MgYXNzaWdubWVudCB0bwotICBCYXNlRXhjZXB0aW9uLl9fbmV3X18gdG8gaGVscCBwaWNrbGluZyBvZiBuYWl2ZSBzdWJjbGFzc2VzLgotCi0tIElzc3VlICMxNzI3NTogQ29ycmVjdGVkIGNsYXNzIG5hbWUgaW4gaW5pdCBlcnJvciBtZXNzYWdlcyBvZiB0aGUgQyB2ZXJzaW9uIG9mCi0gIEJ1ZmZlcmVkV3JpdGVyIGFuZCBCdWZmZXJlZFJhbmRvbS4KLQotLSBJc3N1ZSAjNzk2MzogRml4ZWQgbWlzbGVhZGluZyBlcnJvciBtZXNzYWdlIHRoYXQgaXNzdWVkIHdoZW4gb2JqZWN0IGlzCi0gIGNhbGxlZCB3aXRob3V0IGFyZ3VtZW50cy4KLQotLSBJc3N1ZSAjNTMwODogUmFpc2UgVmFsdWVFcnJvciB3aGVuIG1hcnNoYWxsaW5nIHRvbyBsYXJnZSBvYmplY3QgKGEgc2VxdWVuY2UKLSAgd2l0aCBzaXplID49IDIqKjMxKSwgaW5zdGVhZCBvZiBwcm9kdWNpbmcgaWxsZWdhbCBtYXJzaGFsIGRhdGEuCi0KLS0gSXNzdWUgIzEyOTgzOiBCeXRlcyBsaXRlcmFscyB3aXRoIGludmFsaWQgXHggZXNjYXBlIG5vdyByYWlzZSBhIFN5bnRheEVycm9yCi0gIGFuZCBhIGZ1bGwgdHJhY2ViYWNrIGluY2x1ZGluZyBsaW5lIG51bWJlci4KLQotLSBJc3N1ZSAjMTcxNzM6IFJlbW92ZSB1c2VzIG9mIGxvY2FsZS1kZXBlbmRlbnQgQyBmdW5jdGlvbnMgKGlzYWxwaGEoKSBldGMuKQotICBpbiB0aGUgaW50ZXJwcmV0ZXIuCi0KLS0gSXNzdWUgIzE3MTM3OiBXaGVuIGFuIFVuaWNvZGUgc3RyaW5nIGlzIHJlc2l6ZWQsIHRoZSBpbnRlcm5hbCB3aWRlIGNoYXJhY3RlcgotICBzdHJpbmcgKHdzdHIpIGZvcm1hdCBpcyBub3cgY2xlYXJlZC4KLQotLSBJc3N1ZSAjMTcwNDM6IFRoZSB1bmljb2RlLWludGVybmFsIGRlY29kZXIgbm8gbG9uZ2VyIHJlYWQgcGFzdCB0aGUgZW5kIG9mCi0gIGlucHV0IGJ1ZmZlci4KLQotLSBJc3N1ZSAjMTcwOTg6IEFsbCBtb2R1bGVzIG5vdyBoYXZlIF9fbG9hZGVyX18gc2V0IGV2ZW4gaWYgdGhleSBwcmUtZXhpc3QgdGhlCi0gIGJvb3RzdHJhcHBpbmcgb2YgaW1wb3J0bGliLgotCi0tIElzc3VlICMxNjk3OTogRml4IGVycm9yIGhhbmRsaW5nIGJ1Z3MgaW4gdGhlIHVuaWNvZGUtZXNjYXBlLWRlY29kZSBkZWNvZGVyLgotCi0tIElzc3VlICMxMDE1NjogSW4gdGhlIGludGVycHJldGVyJ3MgaW5pdGlhbGl6YXRpb24gcGhhc2UsIHVuaWNvZGUgZ2xvYmFscwotICBhcmUgbm93IGluaXRpYWxpemVkIGR5bmFtaWNhbGx5IGFzIG5lZWRlZC4KLQotLSBJc3N1ZSAjMTY5ODA6IEZpeCBwcm9jZXNzaW5nIG9mIGVzY2FwZWQgbm9uLWFzY2lpIGJ5dGVzIGluIHRoZQotICB1bmljb2RlLWVzY2FwZS1kZWNvZGUgZGVjb2Rlci4KLQotLSBJc3N1ZSAjMTY5NzU6IEZpeCBlcnJvciBoYW5kbGluZyBidWcgaW4gdGhlIGVzY2FwZS1kZWNvZGUgYnl0ZXMgZGVjb2Rlci4KLQotLSBJc3N1ZSAjMTQ4NTA6IE5vdyBhIGNoYXJtYXAgZGVjb2RlciB0cmVhdHMgVStGRkZFIGFzICJ1bmRlZmluZWQgbWFwcGluZyIKLSAgaW4gYW55IG1hcHBpbmcsIG5vdCBvbmx5IGluIGEgc3RyaW5nLgotCi0tIElzc3VlICMxNjczMDogaW1wb3J0bGliLm1hY2hpbmVyeS5GaWxlRmluZGVyIG5vdyBubyBsb25nZXJzIHJhaXNlcyBhbgotICBleGNlcHRpb24gd2hlbiB0cnlpbmcgdG8gcG9wdWxhdGUgaXRzIGNhY2hlIGFuZCBpdCBmaW5kcyBvdXQgdGhlIGRpcmVjdG9yeSBpcwotICB1bnJlYWRhYmxlIG9yIGhhcyB0dXJuZWQgaW50byBhIGZpbGUuIFJlcG9ydGVkIGFuZCBkaWFnbm9zZWQgYnkKLSAgRGF2aWQgUHJpdGNoYXJkLgotCi0tIElzc3VlICMxNjkwNjogRml4IGEgbG9naWMgZXJyb3IgdGhhdCBwcmV2ZW50ZWQgbW9zdCBzdGF0aWMgc3RyaW5ncyBmcm9tIGJlaW5nCi0gIGNsZWFyZWQuCi0KLS0gSXNzdWUgIzExNDYxOiBGaXggdGhlIGluY3JlbWVudGFsIFVURi0xNiBkZWNvZGVyLiBPcmlnaW5hbCBwYXRjaCBieQotICBBbWF1cnkgRm9yZ2VvdCBkJ0FyYy4KLQotLSBJc3N1ZSAjMTY4NTY6IEZpeCBhIHNlZ21lbnRhdGlvbiBmYXVsdCBmcm9tIGNhbGxpbmcgcmVwcigpIG9uIGEgZGljdCB3aXRoCi0gIGEga2V5IHdob3NlIHJlcHIgcmFpc2UgYW4gZXhjZXB0aW9uLgotCi0tIElzc3VlICMxNjM2NzogRml4IEZpbGVJTy5yZWFkYWxsKCkgb24gV2luZG93cyBmb3IgZmlsZXMgbGFyZ2VyIHRoYW4gMiBHQi4KLQotLSBJc3N1ZSAjMTY0NTU6IE9uIEZyZWVCU0QgYW5kIFNvbGFyaXMsIGlmIHRoZSBsb2NhbGUgaXMgQywgdGhlCi0gIEFTQ0lJL3N1cnJvZ2F0ZWVzY2FwZSBjb2RlYyBpcyBub3cgdXNlZCwgaW5zdGVhZCBvZiB0aGUgbG9jYWxlIGVuY29kaW5nLCB0bwotICBkZWNvZGUgdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuIFRoaXMgY2hhbmdlIGZpeGVzIGluY29uc2lzdGVuY2llcyB3aXRoCi0gIG9zLmZzZW5jb2RlKCkgYW5kIG9zLmZzZGVjb2RlKCkgYmVjYXVzZSB0aGVzZSBvcGVyYXRpbmcgc3lzdGVtcyBhbm5vdW5jZXMgYW4KLSAgQVNDSUkgbG9jYWxlIGVuY29kaW5nLCB3aGVyZWFzIHRoZSBJU08tODg1OS0xIGVuY29kaW5nIGlzIHVzZWQgaW4gcHJhY3RpY2UuCi0KLS0gSXNzdWUgIzE2NzYxOiBDYWxsaW5nIGludCgpIHdpdGggYmFzZSBhcmd1bWVudCBvbmx5IG5vdyByYWlzZXMgVHlwZUVycm9yLgotCi0tIElzc3VlICMxNjc1OTogU3VwcG9ydCB0aGUgZnVsbCBEV09SRCAodW5zaWduZWQgbG9uZykgcmFuZ2UgaW4gUmVnMlB5Ci0gIHdoZW4gcmV0cmlldmluZyBhIFJFR19EV09SRCB2YWx1ZS4gVGhpcyBjb3JyZWN0cyBmdW5jdGlvbnMgbGlrZQotICB3aW5yZWcuUXVlcnlWYWx1ZUV4IHRoYXQgbWF5IGhhdmUgYmVlbiByZXR1cm5pbmcgdHJ1bmNhdGVkIHZhbHVlcy4KLQotLSBJc3N1ZSAjMTQ0MjA6IFN1cHBvcnQgdGhlIGZ1bGwgRFdPUkQgKHVuc2lnbmVkIGxvbmcpIHJhbmdlIGluIFB5MlJlZwotICB3aGVuIHBhc3NlZCBhIFJFR19EV09SRCB2YWx1ZS4gRml4ZXMgT3ZlcmZsb3dFcnJvciBpbiB3aW5yZWcuU2V0VmFsdWVFeC4KLQotLSBJc3N1ZSAjMTY1OTc6IEluIGJ1ZmZlcmVkIGFuZCB0ZXh0IElPLCBjYWxsIGNsb3NlKCkgb24gdGhlIHVuZGVybHlpbmcgc3RyZWFtCi0gIGlmIGludm9raW5nIGZsdXNoKCkgZmFpbHMuCi0KLS0gSXNzdWUgIzE2NzIyOiBJbiB0aGUgYnl0ZXMoKSBjb25zdHJ1Y3RvciwgdHJ5IHRvIGNhbGwgX19ieXRlc19fIG9uIHRoZQotICBhcmd1bWVudCBiZWZvcmUgX19pbmRleF9fLgotCi0tIElzc3VlICMxNjYwMjogV2hlbiBhIHdlYWtyZWYncyB0YXJnZXQgd2FzIHBhcnQgb2YgYSBsb25nIGRlYWxsb2NhdGlvbgotICBjaGFpbiwgdGhlIG9iamVjdCBjb3VsZCByZW1haW4gcmVhY2hhYmxlIHRocm91Z2ggaXRzIHdlYWtyZWYgZXZlbiB0aG91Z2gKLSAgaXRzIHJlZmNvdW50IGhhZCBkcm9wcGVkIHRvIHplcm8uCi0KLS0gSXNzdWUgIzE2NDE2OiBPbiBNYWMgT1MgWCwgb3BlcmF0aW5nIHN5c3RlbSBkYXRhIGFyZSBub3cgYWx3YXlzCi0gIGVuY29kZWQvZGVjb2RlZCB0by9mcm9tIFVURi04L3N1cnJvZ2F0ZWVzY2FwZSwgaW5zdGVhZCBvZiB0aGUgbG9jYWxlIGVuY29kaW5nCi0gICh3aGljaCBtYXkgYmUgQVNDSUkgaWYgbm8gbG9jYWxlIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHNldCksIHRvIGF2b2lkCi0gIGluY29uc2lzdGVuY2llcyB3aXRoIG9zLmZzZW5jb2RlKCkgYW5kIG9zLmZzZGVjb2RlKCkgZnVuY3Rpb25zIHdoaWNoIGFyZQotICBhbHJlYWR5IHVzaW5nIFVURi04L3N1cnJvZ2F0ZWVzY2FwZS4KLQotLSBJc3N1ZSAjMTY1ODg6IFNpbGVuY2UgdW51c2VkLWJ1dC1zZXQgd2FybmluZ3MgaW4gUHl0aG9uL3RocmVhZF9wdGhyZWFkCi0KLS0gSXNzdWUgIzE2NTQ2OiBGaXg6IGFzdC5ZaWVsZEZyb20gYXJndW1lbnQgaXMgbm93IG1hbmRhdG9yeS4KLQotLSBJc3N1ZSAjMTY1MTQ6IEZpeCByZWdyZXNzaW9uIGNhdXNpbmcgYSB0cmFjZWJhY2sgd2hlbiBzeXMucGF0aFswXSBpcyBOb25lCi0gIChhY3R1YWxseSwgYW55IG5vbi1zdHJpbmcgb3Igbm9uLWJ5dGVzIHR5cGUpLgotCi0tIElzc3VlICMxNjMwNjogRml4IG11bHRpcGxlIGVycm9yIG1lc3NhZ2VzIHdoZW4gdW5rbm93biBjb21tYW5kIGxpbmUKLSAgcGFyYW1ldGVycyB3aGVyZSBwYXNzZWQgdG8gdGhlIGludGVycHJldGVyLiAgUGF0Y2ggYnkgSGlldSBOZ3V5ZW4uCi0KLS0gSXNzdWUgIzE2MjE1OiBGaXggcG90ZW50aWFsIGRvdWJsZSBtZW1vcnkgZnJlZSBpbiBzdHIucmVwbGFjZSgpLiAgUGF0Y2gKLSAgYnkgU2VyaGl5IFN0b3JjaGFrYS4KLQotLSBJc3N1ZSAjMTY0NTM6IEZpeCBlcXVhbGl0eSB0ZXN0aW5nIG9mIGRlYWQgd2Vha3JlZiBvYmplY3RzLgotCi0tIElzc3VlICM5NTM1OiBGaXggcGVuZGluZyBzaWduYWxzIHRoYXQgaGF2ZSBiZWVuIHJlY2VpdmVkIGJ1dCBub3QgeWV0Ci0gIGhhbmRsZWQgYnkgUHl0aG9uIHRvIG5vdCBwZXJzaXN0IGFmdGVyIG9zLmZvcmsoKSBpbiB0aGUgY2hpbGQgcHJvY2Vzcy4KLQotLSBJc3N1ZSAjMTUwMDE6IGZpeCBzZWdmYXVsdCBvbiAiZGVsIHN5cy5tb2R1bGVzWydfX21haW5fXyddIi4gUGF0Y2ggYnkgVmljdG9yCi0gIFN0aW5uZXIuCi0KLS0gSXNzdWUgIzgyNzE6IHRoZSB1dGYtOCBkZWNvZGVyIG5vdyBvdXRwdXRzIHRoZSBjb3JyZWN0IG51bWJlciBvZiBVK0ZGRkQKLSAgY2hhcmFjdGVycyB3aGVuIHVzZWQgd2l0aCB0aGUgJ3JlcGxhY2UnIGVycm9yIGhhbmRsZXIgb24gaW52YWxpZCB1dGYtOAotICBzZXF1ZW5jZXMuICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLCB0ZXN0cyBieSBFemlvIE1lbG90dGkuCi0KLS0gSXNzdWUgIzU3NjU6IEFwcGx5IGEgaGFyZCByZWN1cnNpb24gbGltaXQgaW4gdGhlIGNvbXBpbGVyIGluc3RlYWQgb2YKLSAgYmxvd2luZyB0aGUgc3RhY2sgYW5kIHNlZ2ZhdWx0aW5nLiBJbml0aWFsIHBhdGNoIGJ5IEFuZHJlYSBHcmlmZmluaS4KLQotLSBJc3N1ZSAjMTY0MDI6IFdoZW4gc2xpY2luZyBhIHJhbmdlLCBmaXggc2hhZG93aW5nIG9mIGV4Y2VwdGlvbnMgZnJvbQotICBfX2luZGV4X18uCi0KLS0gSXNzdWUgIzE2MzM2OiBmaXggaW5wdXQgY2hlY2tpbmcgaW4gdGhlIHN1cnJvZ2F0ZXBhc3MgZXJyb3IgaGFuZGxlci4KLSAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KLQotLSBJc3N1ZSAjODQwMTogYXNzaWduaW5nIGFuIGludCB0byBhIGJ5dGVhcnJheSBzbGljZSAoZS5nLiBiWzM6NF0gPSA1KSBub3cKLSAgcmFpc2VzIGFuIGVycm9yLgotCi0tIEZpeCBzZWdmYXVsdHMgb24gc2V0dGluZyBfX3F1YWxuYW1lX18gb24gYnVpbHRpbiB0eXBlcyBhbmQgYXR0ZW1wdGluZyB0bwotICBkZWxldGUgaXQgb24gYW55IHR5cGUuCi0KLS0gSXNzdWUgIzE2MzQ1OiBGaXggYW4gaW5maW5pdGUgbG9vcCB3aGVuIGBgZnJvbWtleXNgYCBvbiBhIGRpY3Qgc3ViY2xhc3MKLSAgcmVjZWl2ZWQgYSBub25lbXB0eSBkaWN0IGZyb20gdGhlIGNvbnN0cnVjdG9yLgotCi0tIElzc3VlICMxNjI3MTogRml4IHN0cmFuZ2UgYnVncyB0aGF0IHJlc3VsdGVkIGZyb20gX19xdWFsbmFtZV9fIGFwcGVhcmluZyBpbiBhCi0gIGNsYXNzJ3MgX19kaWN0X18gYW5kIG9uIHR5cGUuCi0KLS0gSXNzdWUgIzYwNzQ6IEVuc3VyZSBjYWNoZWQgYnl0ZWNvZGUgZmlsZXMgY2FuIGFsd2F5cyBiZSB1cGRhdGVkIGJ5IHRoZQotICB1c2VyIHRoYXQgY3JlYXRlZCB0aGVtLCBldmVuIHdoZW4gdGhlIHNvdXJjZSBmaWxlIGlzIHJlYWQtb25seS4KLQotLSBJc3N1ZSAjMTQ3ODM6IEltcHJvdmUgaW50KCkgZG9jc3RyaW5nIGFuZCBzd2l0Y2ggZG9jc3RyaW5ncyBmb3Igc3RyKCksCi0gIHJhbmdlKCksIGFuZCBzbGljZSgpIHRvIHVzZSBtdWx0aS1saW5lIHNpZ25hdHVyZXMuCi0KLS0gSXNzdWUgIzE2MTYwOiBTdWJjbGFzcyBzdXBwb3J0IG5vdyB3b3JrcyBmb3IgdHlwZXMuU2ltcGxlTmFtZXNwYWNlLgotCi0tIElzc3VlICMxNTM3OTogRml4IHBhc3Npbmcgb2Ygbm9uLUJNUCBjaGFyYWN0ZXJzIGFzIGludGVnZXJzIGZvciB0aGUgY2hhcm1hcAotICBkZWNvZGVyIChhbHJlYWR5IHdvcmtpbmcgYXMgdW5pY29kZSBzdHJpbmdzKS4gIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCi0KLS0gSXNzdWUgIzE1MTQ0OiBGaXggcG9zc2libGUgaW50ZWdlciBvdmVyZmxvdyB3aGVuIGhhbmRsaW5nIHBvaW50ZXJzIGFzIGludGVnZXIKLSAgdmFsdWVzLCBieSB1c2luZyBgUHlfdWludHB0cl90YCBpbnN0ZWFkIG9mIGBzaXplX3RgLiAgUGF0Y2ggYnkgU2VyaGl5Ci0gIFN0b3JjaGFrYS4KLQotLSBJc3N1ZSAjMTU5NjU6IEV4cGxpY2l0bHkgY2FzdCBgQVRfRkRDV0RgIGFzIChpbnQpLiAgUmVxdWlyZWQgb24gU29sYXJpcyAxMAotICAod2hpY2ggZGVmaW5lcyBgQVRfRkRDV0RgIGFzIGBgMHhmZmQxOTU1M2BgKSwgaGFybWxlc3Mgb24gb3RoZXIgcGxhdGZvcm1zLgotCi0tIElzc3VlICMxNTgzOTogQ29udmVydCBTeXN0ZW1FcnJvcnMgaW4gYHN1cGVyKClgIHRvIFJ1bnRpbWVFcnJvcnMuCi0KLS0gSXNzdWUgIzE1ODQ2OiBGaXggU3lzdGVtRXJyb3Igd2hpY2ggaGFwcGVuZWQgd2hlbiB1c2luZyBgYXN0LnBhcnNlKClgIGluIGFuCi0gIGV4Y2VwdGlvbiBoYW5kbGVyIG9uIGNvZGUgd2l0aCBzeW50YXggZXJyb3JzLgotCi0tIElzc3VlICMxNTgwMTogTWFrZSBzdXJlIG1hcHBpbmdzIHBhc3NlZCB0byAnJScgZm9ybWF0dGluZyBhcmUgYWN0dWFsbHkKLSAgc3Vic2NyaXB0YWJsZS4KLQotLSBJc3N1ZSAjMTUxMTE6IF9faW1wb3J0X18gc2hvdWxkIGxldCBJbXBvcnRFcnJvciBwcm9wYWdhdGUgd2hlbiBhIG1vZHVsZSB0aGF0Ci0gIGlzIGltcG9ydGVkIGFzIGEgc2lkZS1lZmZlY3Qgb2YgdXNpbmcgZnJvbWxpc3QgdHJpZXMgdG8gaW1wb3J0IGEgbW9kdWxlCi0gIHRoYXQgY2Fubm90IGJlIGZvdW5kLgotCi1MaWJyYXJ5Ci0tLS0tLS0tCi0KLS0gSXNzdWUgIzE3NTQwOiBBZGRlZCBzdHlsZSB0byBmb3JtYXR0ZXIgY29uZmlndXJhdGlvbiBieSBkaWN0LgotCi0tIElzc3VlICMxNzUzNjogQWRkIHRvIHdlYmJyb3dzZXIncyBicm93c2VyIGxpc3Q6IHd3dy1icm93c2VyLCB4LXd3dy1icm93c2VyLAotICBpY2V3ZWFzZWwsIGljZWFwZS4KLQotLSBJc3N1ZSAjMTc0ODg6IENoYW5nZSB0aGUgc3VicHJvY2Vzcy5Qb3BlbiBidWZzaXplIHBhcmFtZXRlciBkZWZhdWx0IHZhbHVlCi0gIGZyb20gdW5idWZmZXJlZCAoMCkgdG8gYnVmZmVyaW5nICgtMSkgdG8gbWF0Y2ggdGhlIGJlaGF2aW9yIGV4aXN0aW5nIGNvZGUKLSAgZXhwZWN0cyBhbmQgbWF0Y2ggdGhlIGJlaGF2aW9yIG9mIHRoZSBzdWJwcm9jZXNzIG1vZHVsZSBpbiBQeXRob24gMiB0byBhdm9pZAotICBpbnRyb2R1Y2luZyBoYXJkIHRvIHRyYWNrIGRvd24gYnVncy4KLQotLSBJc3N1ZSAjMTc1MjE6IENvcnJlY3RlZCBub24tZW5hYmxpbmcgb2YgbG9nZ2VyIGZvbGxvd2luZyB0d28gY2FsbHMgdG8KLSAgZmlsZUNvbmZpZygpLgotCi0tIElzc3VlICMxNzUwODogQ29ycmVjdGVkIE1lbW9yeUhhbmRsZXIgY29uZmlndXJhdGlvbiBpbiBkaWN0Q29uZmlnKCkgd2hlcmUKLSAgdGhlIHRhcmdldCBoYW5kbGVyIHdhc24ndCBjb25maWd1cmVkIGZpcnN0LgotCi0tIElzc3VlICMxNzIwOTogY3Vyc2VzLndpbmRvdy5nZXRfd2NoKCkgbm93IGhhbmRsZXMgY29ycmVjdGx5IEtleWJvYXJkSW50ZXJydXB0Ci0gIChDVFJMK2MpLgotCi0tIElzc3VlICM1NzEzOiBzbXRwbGliIG5vdyBoYW5kbGVzIDQyMSAoY2xvc2luZyBjb25uZWN0aW9uKSBlcnJvciBjb2RlcyB3aGVuCi0gIHNlbmRpbmcgbWFpbCBieSBjbG9zaW5nIHRoZSBzb2NrZXQgYW5kIHJlcG9ydGluZyB0aGUgNDIxIGVycm9yIGNvZGUgdmlhIHRoZQotICBleGNlcHRpb24gYXBwcm9wcmlhdGUgdG8gdGhlIGNvbW1hbmQgdGhhdCByZWNlaXZlZCB0aGUgZXJyb3IgcmVzcG9uc2UuCi0KLS0gSXNzdWUgIzE3MTkyOiBVcGRhdGUgdGhlIGN0eXBlcyBtb2R1bGUncyBsaWJmZmkgdG8gdjMuMC4xMy4gIFRoaXMKLSAgc3BlY2lmaWNhbGx5IGFkZHJlc3NlcyBhIHN0YWNrIG1pc2FsaWdubWVudCBpc3N1ZSBvbiB4ODYgYW5kIGlzc3VlcyBvbgotICBzb21lIG1vcmUgcmVjZW50IHBsYXRmb3Jtcy4KLQotLSBJc3N1ZSAjODg2MjogRml4ZWQgY3Vyc2VzIGNsZWFudXAgd2hlbiBnZXRrZXkgaXMgaW50ZXJycHV0ZWQgYnkgYSBzaWduYWwuCi0KLS0gSXNzdWUgIzE3NDQzOiBpbWFwbGliLklNQVA0X3N0cmVhbSB3YXMgdXNpbmcgdGhlIGRlZmF1bHQgdW5idWZmZXJlZCBJTwotICBpbiBzdWJwcm9jZXNzLCBidXQgdGhlIGltYXAgY29kZSBhc3N1bWVzIGJ1ZmZlcmVkIElPLiAgSW4gUHl0aG9uMiB0aGlzCi0gIHdvcmtlZCBieSBhY2NpZGVudC4gIElNQVA0X3N0cmVhbSBub3cgZXhwbGljaXRseSB1c2VzIGJ1ZmZlcmVkIElPLgotCi0tIElzc3VlICMxNzQ3NjogRml4ZWQgcmVncmVzc2lvbiByZWxhdGl2ZSB0byBQeXRob24yIGluIHVuZG9jdW1lbnRlZCBweWRvYwotICAnYWxsbWV0aG9kcyc7IGl0IHdhcyBtaXNzaW5nIHVuYm91bmQgbWV0aG9kcyBvbiB0aGUgY2xhc3MuCi0KLS0gSXNzdWUgIzE2ODgwOiBEbyBub3QgYXNzdW1lIF9pbXAubG9hZF9keW5hbWljKCkgaXMgZGVmaW5lZCBpbiB0aGUgaW1wIG1vZHVsZS4KLQotLSBJc3N1ZSAjMTYzODk6IEZpeGVkIGEgcGVyZm9ybWFuY2UgcmVncmVzc2lvbiByZWxhdGl2ZSB0byBQeXRob24gMy4xIGluIHRoZQotICBjYWNoaW5nIG9mIGNvbXBpbGVkIHJlZ3VsYXIgZXhwcmVzc2lvbnMuCi0KLS0gSXNzdWUgIzE3NDMxOiBGaXggbWlzc2luZyBpbXBvcnQgb2YgQnl0ZXNGZWVkUGFyc2VyIGluIGVtYWlsLnBhcnNlci4KLQotLSBJc3N1ZSAjMTI4NTA4NjogR2V0IHJpZCBvZiB0aGUgcmVmY291bnRpbmcgaGFjayBhbmQgc3BlZWQgdXAKLSAgdXJsbGliLnBhcnNlLnVucXVvdGUoKSBhbmQgdXJsbGliLnBhcnNlLnVucXVvdGVfdG9fYnl0ZXMoKS4KLQotLSBJc3N1ZSAjMTczNjg6IEZpeCBhbiBvZmYtYnktb25lIGVycm9yIGluIHRoZSBQeXRob24gSlNPTiBkZWNvZGVyIHRoYXQgY2F1c2VkCi0gIGEgZmFpbHVyZSB3aGlsZSBkZWNvZGluZyBlbXB0eSBvYmplY3QgbGl0ZXJhbHMgd2hlbiBvYmplY3RfcGFpcnNfaG9vayB3YXMKLSAgc3BlY2lmaWVkLgotCi0tIElzc3VlICMxNDY0NTogVGhlIGVtYWlsIGdlbmVyYXRvciBjbGFzc2VzIG5vdyBwcm9kdWNlIG91dHB1dCB1c2luZyB0aGUKLSAgc3BlY2lmaWVkIGxpbmVzZXAgdGhyb3VnaG91dC4gIFByZXZpb3VzbHkgaWYgdGhlIHByb2xvZywgZXBpbG9nLCBvcgotICBib2R5IHdlcmUgc3RvcmVkIHdpdGggYSBkaWZmZXJlbnQgbGluZXNlcCwgdGhhdCBsaW5lc2VwIHdhcyB1c2VkLiAgVGhpcwotICBmaXggY29ycmVjdHMgYW4gUkZDIG5vbi1jb21wbGlhbmNlIGlzc3VlIHdpdGggc210cGxpYi5zZW5kX21lc3NhZ2UuCi0KLS0gSXNzdWUgIzE3Mjc4OiBGaXggYSBjcmFzaCBpbiBoZWFwcS5oZWFwcHVzaCgpIGFuZCBoZWFwcS5oZWFwcG9wKCkgd2hlbgotICB0aGUgbGlzdCBpcyBiZWluZyByZXNpemVkIGNvbmN1cnJlbnRseS4KLQotLSBJc3N1ZSAjMTY5NjI6IFVzZSBnZXRkZW50czY0IGluc3RlYWQgb2YgdGhlIG9ic29sZXRlIGdldGRlbnRzIHN5c2NhbGwKLSAgaW4gdGhlIHN1YnByb2Nlc3MgbW9kdWxlIG9uIExpbnV4LgotCi0tIElzc3VlICMxNzAxODogTWFrZSBQcm9jZXNzLmpvaW4oKSByZXRyeSBpZiBvcy53YWl0cGlkKCkgZmFpbHMgd2l0aCBFSU5UUi4KLQotLSBJc3N1ZSAjMTcyMjM6IGFycmF5IG1vZHVsZTogRml4IGEgY3Jhc2hlciB3aGVuIGNvbnZlcnRpbmcgYW4gYXJyYXkgY29udGFpbmluZwotICBpbnZhbGlkIGNoYXJhY3RlcnMgKG91dHNpZGUgcmFuZ2UgW1UrMDAwMDsgVSsxMGZmZmZdKSB0byBVbmljb2RlOgotICByZXByKGFycmF5KSwgc3RyKGFycmF5KSBhbmQgYXJyYXkudG91bmljb2RlKCkuIFBhdGNoIHdyaXR0ZW4gYnkgTWFudWVsIEphY29iLgotCi0tIElzc3VlICMxNDcyMDogc3FsaXRlMzogQ29udmVydCBkYXRldGltZSBtaWNyb3NlY29uZHMgY29ycmVjdGx5LgotICBQYXRjaCBieSBMb3dlIFRoaWRlcm1hbi4KLQotLSBJc3N1ZSAjMTcyMjU6IEpTT04gZGVjb2RlciBub3cgY291bnRzIGNvbHVtbnMgaW4gdGhlIGZpcnN0IGxpbmUgc3RhcnRpbmcKLSAgd2l0aCAxLCBhcyBpbiBvdGhlciBsaW5lcy4KLQotLSBJc3N1ZSAjMTM3MDA6IEZpeCBieXRlL3N0cmluZyBoYW5kbGluZyBpbiBpbWFwbGliIGF1dGhlbnRpY2F0aW9uIHdoZW4gYW4KLSAgYXV0aG9iamVjdCBpcyBzcGVjaWZpZWQuCi0KLS0gSXNzdWUgIzEzMTUzOiBUa2ludGVyIGZ1bmN0aW9ucyBub3cgcmFpc2UgVGNsRXJyb3IgaW5zdGVhZCBvZiBWYWx1ZUVycm9yIHdoZW4KLSAgYSBzdHJpbmcgYXJndW1lbnQgY29udGFpbnMgbm9uLUJNUCBjaGFyYWN0ZXIuCi0KLS0gSXNzdWUgIzk2Njk6IFByb3RlY3QgcmUgYWdhaW5zdCBpbmZpbml0ZSBsb29wcyBvbiB6ZXJvLXdpZHRoIG1hdGNoaW5nIGluCi0gIG5vbi1ncmVlZHkgcmVwZWF0LiAgUGF0Y2ggYnkgTWF0dGhldyBCYXJuZXR0LgotCi0tIElzc3VlICMxMzE2OTogVGhlIG1heGltYWwgcmVwZXRpdGlvbiBudW1iZXIgaW4gYSByZWd1bGFyIGV4cHJlc3Npb24gaGFzIGJlZW4KLSAgaW5jcmVhc2VkIGZyb20gNjU1MzQgdG8gMjE0NzQ4MzY0NyAob24gMzItYml0IHBsYXRmb3JtKSBvciA0Mjk0OTY3Mjk0IChvbgotICA2NC1iaXQpLgotCi0tIElzc3VlICMxNzE0MzogRml4IGEgbWlzc2luZyBpbXBvcnQgaW4gdGhlIHRyYWNlIG1vZHVsZS4gIEluaXRpYWwgcGF0Y2ggYnkKLSAgQmVya2VyIFBla3NhZy4KLQotLSBJc3N1ZSAjMTY3NDM6IEZpeCBtbWFwIG92ZXJmbG93IGNoZWNrIG9uIDMyIGJpdCBXaW5kb3dzLgotCi0tIElzc3VlICMxNjgwMDogdGVtcGZpbGUuZ2V0dGVtcGRpcigpIG5vIGxvbmdlciBsZWZ0IHRlbXBvcmFyeSBmaWxlcyB3aGVuCi0gIHRoZSBkaXNrIGlzIGZ1bGwuICBPcmlnaW5hbCBwYXRjaCBieSBBbWlyIFN6ZWtlbHkuCi0KLS0gSXNzdWUgIzE2NTY0OiBGaXhlZCByZWdyZXNzaW9uIHJlbGF0aXZlIHRvIFB5dGhvbjIgaW4gdGhlIG9wZXJhdGlvbiBvZgotICBlbWFpbC5lbmNvZGVycy5lbmNvZGVfN29yOGJpdCB3aGVuIHVzZWQgd2l0aCBiaW5hcnkgZGF0YS4KLQotLSBJc3N1ZSAjMTcwNTI6IHVuaXR0ZXN0IGRpc2NvdmVyeSBzaG91bGQgdXNlIHNlbGYudGVzdExvYWRlci4KLQotLSBJc3N1ZSAjNDU5MTogVWlkIGFuZCBnaWQgdmFsdWVzIGxhcmdlciB0aGFuIDIqKjMxIGFyZSBzdXBwb3J0ZWQgbm93LgotCi0tIElzc3VlICMxNzE0MTogcmFuZG9tLnZvbm1pc2VzdmFyaWF0ZSgpIG5vIG1vcmUgaGFuZ3MgZm9yIGxhcmdlIGthcHBhcy4KLQotLSBJc3N1ZSAjMTcxNDk6IEZpeCByYW5kb20udm9ubWlzZXN2YXJpYXRlIHRvIGFsd2F5cyByZXR1cm4gcmVzdWx0cyBpbgotICBbMCwgMiptYXRoLnBpXS4KLQotLSBJc3N1ZSAjMTQ3MDU0ODogWE1MR2VuZXJhdG9yIG5vdyB3b3JrcyB3aXRoIGJpbmFyeSBvdXRwdXQgc3RyZWFtcy4KLQotLSBJc3N1ZSAjNjk3NTogb3MucGF0aC5yZWFscGF0aCgpIG5vdyBjb3JyZWN0bHkgcmVzb2x2ZXMgbXVsdGlwbGUgbmVzdGVkCi0gIHN5bWxpbmtzIG9uIFBPU0lYIHBsYXRmb3Jtcy4KLQotLSBJc3N1ZSAjMTY1NjQ6IEZpeGVkIHJlZ3Jlc3Npb24gcmVsYXRpdmUgdG8gUHl0aG9uMiBpbiB0aGUgb3BlcmF0aW9uIG9mCi0gIGVtYWlsLmVuY29kZXJzLmVuY29kZV9ub29wIHdoZW4gdXNlZCB3aXRoIGJpbmFyeSBkYXRhLgotCi0tIElzc3VlICMxMDM1NTogVGhlIG1vZGUsIG5hbWUsIGVuY29kaW5nIGFuZCBuZXdsaW5lcyBwcm9wZXJ0aWVzIG5vdyB3b3JrIG9uCi0gIFNwb29sZWRUZW1wb3JhcnlGaWxlIG9iamVjdHMgZXZlbiB3aGVuIHRoZXkgaGF2ZSBub3QgeWV0IHJvbGxlZCBvdmVyLgotICBPYnNvbGV0ZSBtZXRob2QgeHJlYWRsaW5lICh3aGljaCBoYXMgbmV2ZXIgd29ya2VkIGluIFB5dGhvbiAzKSBoYXMgYmVlbgotICByZW1vdmVkLgotCi0tIElzc3VlICMxNjY4NjogRml4ZWQgYSBsb3Qgb2YgYnVncyBpbiBhdWRpb29wIG1vZHVsZS4gIEZpeGVkIGNyYXNoZXMgaW4KLSAgYXZncHAoKSwgbWF4cHAoKSBhbmQgcmF0ZWN2KCkuICBGaXhlZCBhbiBpbnRlZ2VyIG92ZXJmbG93IGluIGFkZCgpLCBiaWFzKCksCi0gIGFuZCByYXRlY3YoKS4gIHJldmVyc2UoKSwgbGluMmxpbigpIGFuZCByYXRlY3YoKSBubyBtb3JlIGxvc2UgcHJlY2lzaW9uIGZvcgotICAzMi1iaXQgc2FtcGxlcy4gIG1heCgpIGFuZCBybXMoKSBubyBtb3JlIHJldHVybnMgYSBuZWdhdGl2ZSByZXN1bHQgYW5kCi0gIHZhcmlvdXMgb3RoZXIgZnVuY3Rpb25zIG5vdyB3b3JrIGNvcnJlY3RseSB3aXRoIDMyLWJpdCBzYW1wbGUgLTB4ODAwMDAwMDAuCi0KLS0gSXNzdWUgIzE3MDczOiBGaXggc29tZSBpbnRlZ2VyIG92ZXJmbG93cyBpbiBzcWxpdGUzIG1vZHVsZS4KLQotLSBJc3N1ZSAjMTY3MjM6IGh0dHBsaWIuSFRUUFJlc3BvbnNlIG5vIGxvbmdlciBtYXJrZWQgY2xvc2VkIHdoZW4gdGhlIGNvbm5lY3Rpb24KLSAgaXMgYXV0b21hdGljYWxseSBjbG9zZWQuCi0KLS0gSXNzdWUgIzE2OTQ4OiBGaXggcXVvdGVkIHByaW50YWJsZSBib2R5IGVuY29kaW5nIGZvciBub24tbGF0aW4xIGNoYXJhY3RlcgotICBzZXRzIGluIHRoZSBlbWFpbCBwYWNrYWdlLgotCi0tIElzc3VlICMxNjgxMTogRml4IGZvbGRpbmcgb2YgaGVhZGVycyB3aXRoIG5vIHZhbHVlIGluIHRoZSBwcm92aXNpb25hbCBlbWFpbAotICBwb2xpY2llcy4KLQotLSBJc3N1ZSAjMTcxMzI6IFVwZGF0ZSBzeW1ib2wgZm9yICJ5aWVsZCBmcm9tIiBncmFtbWFyIGNoYW5nZXMuCi0KLS0gSXNzdWUgIzE3MDc2OiBNYWtlIGNvcHlpbmcgb2YgeGF0dHJzIG1vcmUgcGVybWlzc2l2ZSBvZiBtaXNzaW5nIEZTIHN1cHBvcnQuCi0gIFBhdGNoIGJ5IFRob21hcyBXb3V0ZXJzLgotCi0tIElzc3VlICMxNzA4OTogRXhwYXQgcGFyc2VyIG5vdyBjb3JyZWN0bHkgd29ya3Mgd2l0aCBzdHJpbmcgaW5wdXQgbm90IG9ubHkgd2hlbgotICBhbiBpbnRlcm5hbCBYTUwgZW5jb2RpbmcgaXMgVVRGLTggb3IgVVMtQVNDSUkuICBJdCBub3cgYWNjZXB0cyBieXRlcyBhbmQKLSAgc3RyaW5ncyBsYXJnZXIgdGhhbiAyIEdpQi4KLQotLSBJc3N1ZSAjNjA4MzogRml4IG11bHRpcGxlIHNlZ21lbnRhdGlvbiBmYXVsdHMgb2NjdXJlZCB3aGVuIFB5QXJnX1BhcnNlVHVwbGUKLSAgcGFyc2VzIG5lc3RlZCBtdXRhdGluZyBzZXF1ZW5jZS4KLQotLSBJc3N1ZSAjNTI4OTogRml4IGN0eXBlcy51dGlsLmZpbmRfbGlicmFyeSBvbiBTb2xhcmlzLgotCi0tIElzc3VlICMxNzEwNjogRml4IGEgc2VnbWVudGF0aW9uIGZhdWx0IGluIGlvLlRleHRJT1dyYXBwZXIgd2hlbiBhbiB1bmRlcmx5aW5nCi0gIHN0cmVhbSBvciBhIGRlY29kZXIgcHJvZHVjZXMgZGF0YSBvZiBhbiB1bmV4cGVjdGVkIHR5cGUgKGkuZS4gd2hlbgotICBpby5UZXh0SU9XcmFwcGVyIGluaXRpYWxpemVkIHdpdGggdGV4dCBzdHJlYW0gb3IgdXNlIGJ5dGVzLXRvLWJ5dGVzIGNvZGVjKS4KLQotLSBJc3N1ZSAjMTU2MzM6IGh0dHBsaWIuSFRUUFJlc3BvbnNlIGlzIG5vdyBtYXJrIGNsb3NlZCB3aGVuIHRoZSBzZXJ2ZXIKLSAgc2VuZHMgbGVzcyB0aGFuIHRoZSBhZHZlcnRpc2VkIENvbnRlbnQtTGVuZ3RoLgotCi0tIElzc3VlICMxMjI2ODogVGhlIGlvIG1vZHVsZSBmaWxlIG9iamVjdCB3cml0ZSBtZXRob2RzIG5vIGxvbmdlciBhYm9ydCBlYXJseQotICB3aGVuIG9uZSBvZiBpdHMgd3JpdGUgc3lzdGVtIGNhbGxzIGlzIGludGVycnVwdGVkIChFSU5UUikuCi0KLS0gSXNzdWUgIzY5NzI6IFRoZSB6aXBmaWxlIG1vZHVsZSBubyBsb25nZXIgb3ZlcndyaXRlcyBmaWxlcyBvdXRzaWRlIG9mCi0gIGl0cyBkZXN0aW5hdGlvbiBwYXRoIHdoZW4gZXh0cmFjdGluZyBtYWxpY2lvdXMgemlwIGZpbGVzLgotCi0tIElzc3VlICM0ODQ0OiBaaXBGaWxlIG5vdyByYWlzZXMgQmFkWmlwRmlsZSB3aGVuIG9wZW5zIGEgWklQIGZpbGUgd2l0aCBhbgotICBpbmNvbXBsZXRlICJFbmQgb2YgQ2VudHJhbCBEaXJlY3RvcnkiIHJlY29yZC4gIE9yaWdpbmFsIHBhdGNoIGJ5IEd1aWxoZXJtZQotICBQb2xvIGFuZCBBbGFuIE1jSW50eXJlLgotCi0tIElzc3VlICMxNzA3MTogU2lnbmF0dXJlLmJpbmQoKSBub3cgd29ya3Mgd2hlbiBvbmUgb2YgdGhlIGtleXdvcmQgYXJndW1lbnRzCi0gIGlzIG5hbWVkIGBgc2VsZmBgLgotCi0tIElzc3VlICMxMjAwNDogRml4IGFuIGludGVybmFsIGVycm9yIGluIFB5WmlwRmlsZSB3aGVuIHdyaXRpbmcgYW4gaW52YWxpZAotICBQeXRob24gZmlsZS4gIFBhdGNoIGJ5IEJlbiBNb3JnYW4uCi0KLS0gSXNzdWUgIzE2MDIxMzM6IG9uIE1hYyBPUyBYIGEgc2hhcmVkIGxpYnJhcnkgYnVpbGQgKGBgLS1lbmFibGUtc2hhcmVkYGApCi0gIG5vdyBmaWxscyB0aGUgYGBvcy5lbnZpcm9uYGAgdmFyaWFibGUgY29ycmVjdGx5LgotCi0tIElzc3VlICMxNTUwNTogYHVuaXR0ZXN0Lmluc3RhbGxIYW5kbGVyYCBubyBsb25nZXIgYXNzdW1lcyBTSUdJTlQgaGFuZGxlciBpcwotICBzZXQgdG8gYSBjYWxsYWJsZSBvYmplY3QuCi0KLS0gSXNzdWUgIzEzNDU0OiBGaXggYSBjcmFzaCB3aGVuIGRlbGV0aW5nIGFuIGl0ZXJhdG9yIGNyZWF0ZWQgYnkgaXRlcnRvb2xzLnRlZSgpCi0gIGlmIGFsbCBvdGhlciBpdGVyYXRvcnMgd2VyZSB2ZXJ5IGFkdmFuY2VkIGJlZm9yZS4KLQotLSBJc3N1ZSAjMTI0MTE6IEZpeCB0byBjZ2kucGFyc2VfbXVsdGlwYXJ0IHRvIGNvcnJlY3RseSB1c2UgYnl0ZXMgYm91bmRhcmllcwotICBhbmQgYnl0ZXMgZGF0YS4gUGF0Y2ggYnkgSm9uYXMgV2FnbmVyLgotCi0tIElzc3VlICMxNjk1Nzogc2h1dGlsLndoaWNoKCkgbm8gbG9uZ2VyIHNlYXJjaGVzIGEgYmFyZSBmaWxlIG5hbWUgaW4gdGhlCi0gIGN1cnJlbnQgZGlyZWN0b3J5IG9uIFVuaXggYW5kIG5vIGxvbmdlciBzZWFyY2hlcyBhIHJlbGF0aXZlIGZpbGUgcGF0aCB3aXRoCi0gIGEgZGlyZWN0b3J5IHBhcnQgaW4gUEFUSCBkaXJlY3Rvcmllcy4gIFBhdGNoIGJ5IFRob21hcyBLbHV5dmVyLgotCi0tIElzc3VlICMxNjk5Mzogc2h1dGlsLndoaWNoKCkgbm93IHByZXNlcnZlcyB0aGUgY2FzZSBvZiB0aGUgcGF0aCBhbmQgZXh0ZW5zaW9uCi0gIG9uIFdpbmRvd3MuCi0KLS0gSXNzdWUgIzE2OTkyOiBPbiBXaW5kb3dzIGluIHNpZ25hbC5zZXRfd2FrZXVwX2ZkLCB2YWxpZGF0ZSB0aGUgZmlsZQotICBkZXNjcmlwdG9yIGFyZ3VtZW50LgotCi0tIElzc3VlICMxNjQyMjogRm9yIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgUHl0aG9uIHZlcnNpb24sIHRoZSBDIHZlcnNpb24gb2YKLSAgZGVjaW1hbCBub3cgdXNlcyBzdHJpbmdzIGluc3RlYWQgb2YgaW50ZWdlcnMgZm9yIHJvdW5kaW5nIG1vZGUgY29uc3RhbnRzLgotCi0tIElzc3VlICMxNTg2MTogdGtpbnRlciBub3cgY29ycmVjdGx5IHdvcmtzIHdpdGggbGlzdHMgYW5kIHR1cGxlcyBjb250YWluaW5nCi0gIHN0cmluZ3Mgd2l0aCB3aGl0ZXNwYWNlcywgYmFja3NsYXNoZXMgb3IgdW5iYWxhbmNlZCBicmFjZXMuCi0KLS0gSXNzdWUgIzEwNTI3OiBVc2UgcG9sbCgpIGluc3RlYWQgb2Ygc2VsZWN0KCkgZm9yIG11bHRpcHJvY2Vzc2luZyBwaXBlcy4KLQotLSBJc3N1ZSAjOTcyMDogemlwZmlsZSBub3cgd3JpdGVzIGNvcnJlY3QgbG9jYWwgaGVhZGVycyBmb3IgZmlsZXMgbGFyZ2VyIHRoYW4KLSAgNCBHaUIuCi0KLS0gSXNzdWUgIzE2OTU1OiBGaXggdGhlIHBvbGwoKSBtZXRob2QgZm9yIG11bHRpcHJvY2Vzc2luZydzIHNvY2tldAotICBjb25uZWN0aW9ucyBvbiBXaW5kb3dzLgotCi0tIFNTTENvbnRleHQubG9hZF9kaF9wYXJhbXMoKSBub3cgcHJvcGVybHkgY2xvc2VzIHRoZSBpbnB1dCBmaWxlLgotCi0tIElzc3VlICMxNjkwMDogSXNzdWUgYSBSZXNvdXJjZVdhcm5pbmcgd2hlbiBhbiBzc2wgc29ja2V0IGlzIGxlZnQgdW5jbG9zZWQuCi0KLS0gSXNzdWUgIzEzODk5OiBcQSwgXFosIGFuZCBcQiBub3cgY29ycmVjdGx5IG1hdGNoIHRoZSBBLCBaLCBhbmQgQiBsaXRlcmFscwotICB3aGVuIHVzZWQgaW5zaWRlIGNoYXJhY3RlciBjbGFzc2VzIChlLmcuICdbXEFdJykuICBQYXRjaCBieSBNYXR0aGV3IEJhcm5ldHQuCi0KLS0gSXNzdWUgIzE1NTQ1OiBGaXggcmVncmVzc2lvbiBpbiBzcWxpdGUzJ3MgaXRlcmR1bXAgbWV0aG9kIHdoZXJlIGl0IHdhcwotICBmYWlsaW5nIGlmIHRoZSBjb25uZWN0aW9uIHVzZWQgYSByb3cgZmFjdG9yeSAoc3VjaCBhcyBzcWxpdGUzLlJvdykgdGhhdAotICBwcm9kdWNlZCB1bnNvcnRhYmxlIG9iamVjdHMuIChSZWdyZXNzaW9uIHdhcyBpbnRyb2R1Y2VkIGJ5IGZpeCBmb3IgOTc1MCkuCi0KLS0gSXNzdWUgIzE1OTcyOiBGaXggZXJyb3IgbWVzc2FnZXMgd2hlbiBvcyBmdW5jdGlvbnMgZXhwZWN0aW5nIGEgZmlsZSBuYW1lIG9yCi0gIGZpbGUgZGVzY3JpcHRvciByZWNlaXZlIHRoZSBpbmNvcnJlY3QgdHlwZS4KLQotLSBJc3N1ZSAjMTY4Mjg6IEZpeCBlcnJvciBpbmNvcnJlY3RseSByYWlzZWQgYnkgYnoyLmNvbXByZXNzKGInJykgYW5kCi0gIGJ6Mi5CWjJDb21wcmVzc29yLmNvbXByZXNzKGInJykuIEluaXRpYWwgcGF0Y2ggYnkgTWFydGluIFBhY2ttYW4uCi0KLS0gSXNzdWUgIzE2NTQxOiB0a19zZXRQYWxldHRlKCkgbm93IHdvcmtzIHdpdGgga2V5d29yZCBhcmd1bWVudHMuCi0KLS0gSXNzdWUgIzE2ODIwOiBJbiBjb25maWdwYXJzZXIsIGBwYXJzZXIucG9waXRlbSgpYCBubyBsb25nZXIgcmFpc2VzIFZhbHVlRXJyb3IuCi0gIFRoaXMgbWFrZXMgYHBhcnNlci5jbGVhbigpYCB3b3JrIGNvcnJlY3RseS4KLQotLSBJc3N1ZSAjMTY4MjA6IEluIGNvbmZpZ3BhcnNlciwgYGBwYXJzZXJbJ3NlY3Rpb24nXSA9IHt9YGAgbm93IHByZXNlcnZlcwotICBzZWN0aW9uIG9yZGVyIHdpdGhpbiB0aGUgcGFyc2VyLiBUaGlzIG1ha2VzIGBwYXJzZXIudXBkYXRlKClgIHByZXNlcnZlIHNlY3Rpb24KLSAgb3JkZXIgYXMgd2VsbC4KLQotLSBJc3N1ZSAjMTY4MjA6IEluIGNvbmZpZ3BhcnNlciwgYGBwYXJzZXJbJ0RFRkFVTFQnXSA9IHt9YGAgbm93IGNvcnJlY3RseQotICBjbGVhcnMgcHJldmlvdXMgdmFsdWVzIHN0b3JlZCBpbiB0aGUgZGVmYXVsdCBzZWN0aW9uLiBTYW1lIGdvZXMgZm9yCi0gIGBgcGFyc2VyLnVwZGF0ZSh7J0RFRkFVTFQnOiB7fX0pYGAuCi0KLS0gSXNzdWUgIzk1ODY6IFJlZGVmaW5lIFNFTV9GQUlMRUQgb24gTWFjT1NYIHRvIGtlZXAgY29tcGlsZXIgaGFwcHkuCi0KLS0gSXNzdWUgIzEwNTI3OiBtYWtlIG11bHRpcHJvY2Vzc2luZyB1c2UgcG9sbCgpIGluc3RlYWQgb2Ygc2VsZWN0KCkgaWYgYXZhaWxhYmxlLgotCi0tIElzc3VlICMxNjY4ODogTm93IHJlZ2V4ZXMgY29udGFpbmVkIGJhY2tyZWZlcmVuY2VzIGNvcnJlY3RseSB3b3JrIHdpdGgKLSAgbm9uLUFTQ0lJIHN0cmluZ3MuICBQYXRjaCBieSBNYXR0aGV3IEJhcm5ldHQuCi0KLS0gSXNzdWUgIzE2NDg1OiBOb3cgZmlsZSBkZXNjcmlwdG9ycyBhcmUgY2xvc2VkIGlmIGZpbGUgaGVhZGVyIHBhdGNoaW5nIGZhaWxlZAotICBvbiBjbG9zaW5nIGFuIGFpZmMgZmlsZS4KLQotLSBJc3N1ZSAjMTYxNjU6IHNjaGVkLnNjaGVkdWxlci5ydW4oKSBubyBsb25nZXIgYmxvY2tzIGEgc2NoZWR1bGVyIGZvciBvdGhlcgotICB0aHJlYWRzLgotCi0tIElzc3VlICMxNjY0MTogRGVmYXVsdCB2YWx1ZXMgb2Ygc2NoZWQuc2NoZWR1bGVyLmVudGVyKCkgYXJlIG5vIGxvbmdlcgotICBtb2RpZmlhYmxlLgotCi0tIElzc3VlICMxNjYxODogTWFrZSBnbG9iLmdsb2IgbWF0Y2ggY29uc2lzdGVudGx5IGFjcm9zcyBzdHJpbmdzIGFuZCBieXRlcwotICByZWdhcmRpbmcgbGVhZGluZyBkb3RzLiAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KLQotLSBJc3N1ZSAjMTY3MTM6IFBhcnNpbmcgb2YgJ3RlbCcgdXJscyB1c2luZyB1cmxwYXJzZSBzZXBhcmF0ZXMgcGFyYW1zIGZyb20KLSAgcGF0aC4KLQotLSBJc3N1ZSAjMTY0NDM6IEFkZCBkb2NzdHJpbmdzIHRvIHJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRjaCBvYmplY3RzLgotICBQYXRjaCBieSBBbnRvbiBLYXN5YW5vdi4KLQotLSBJc3N1ZSAjMTU3MDE6IEZpeCBIVFRQRXJyb3IgaW5mbyBtZXRob2QgY2FsbCB0byByZXR1cm4gdGhlIGhlYWRlcnMgaW5mb3JtYXRpb24uCi0KLS0gSXNzdWUgIzE2NzUyOiBBZGQgYSBtaXNzaW5nIGltcG9ydCB0byBtb2R1bGVmaW5kZXIuIFBhdGNoIGJ5IEJlcmtlciBQZWtzYWcuCi0KLS0gSXNzdWUgIzE2NjQ2OiBmdHBsaWIuRlRQLm1ha2Vwb3J0KCkgbWlnaHQgbG9zZSBzb2NrZXQgZXJyb3IgZGV0YWlscy4KLSAgKHBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EpCi0KLS0gSXNzdWUgIzE2NjI2OiBGaXggaW5maW5pdGUgcmVjdXJzaW9uIGluIGdsb2IuZ2xvYigpIG9uIFdpbmRvd3Mgd2hlbiB0aGUKLSAgcGF0dGVybiBjb250YWlucyBhIHdpbGRjYXJkIGluIHRoZSBkcml2ZSBvciBVTkMgcGF0aC4gIFBhdGNoIGJ5IFNlcmhpeQotICBTdG9yY2hha2EuCi0KLS0gSXNzdWUgIzE1NzgzOiBFeGNlcHQgZm9yIHRoZSBudW1iZXIgbWV0aG9kcywgdGhlIEMgdmVyc2lvbiBvZiBkZWNpbWFsIG5vdwotICBzdXBwb3J0cyBhbGwgTm9uZSBkZWZhdWx0IHZhbHVlcyBwcmVzZW50IGluIGRlY2ltYWwucHkuIFRoZXNlIHZhbHVlcyB3ZXJlCi0gIGxhcmdlbHkgdW5kb2N1bWVudGVkLgotCi0tIElzc3VlICMxNjI5ODogSW4gSFRUUFJlc3BvbnNlLnJlYWQoKSwgY2xvc2UgdGhlIHNvY2tldCB3aGVuIHRoZXJlIGlzIG5vCi0gIENvbnRlbnQtTGVuZ3RoIGFuZCB0aGUgaW5jb21pbmcgc3RyZWFtIGlzIGZpbmlzaGVkLiAgUGF0Y2ggYnkgRXJhbgotICBSdW5kc3RlaW4uCi0KLS0gSXNzdWUgIzE1ODcyOiBGaXggMy4zIHJlZ3Jlc3Npb24gaW50cm9kdWNlZCBieSB0aGUgbmV3IGZkLWJhc2VkIHNodXRpbC5ybXRyZWUKLSAgdGhhdCBjYXVzZWQgaXQgdG8gbm90IGlnbm9yZSBjZXJ0YWluIGVycm9ycyB3aGVuIGlnbm9yZV9lcnJvcnMgd2FzIHNldC4KLSAgUGF0Y2ggYnkgQWxlc3NhbmRybyBNb3VyYSBhbmQgU2VyaGl5IFN0b3JjaGFrYS4KLQotLSBJc3N1ZSAjMTYyNDg6IERpc2FibGUgY29kZSBleGVjdXRpb24gZnJvbSB0aGUgdXNlcidzIGhvbWUgZGlyZWN0b3J5IGJ5Ci0gIHRraW50ZXIgd2hlbiB0aGUgLUUgZmxhZyBpcyBwYXNzZWQgdG8gUHl0aG9uLiAgUGF0Y2ggYnkgWmFjaGFyeSBXYXJlLgotCi0tIElzc3VlICMxNjYyODogRml4IGEgbWVtb3J5IGxlYWsgaW4gY3R5cGVzLnJlc2l6ZSgpLgotCi0tIElzc3VlICMxMzYxNDogRml4IHNldHVwLnB5IHJlZ2lzdGVyIGZhaWx1cmUgd2l0aCBpbnZhbGlkIHJzdCBpbiBkZXNjcmlwdGlvbi4KLSAgUGF0Y2ggYnkgSnVsaWVuIENvdXJ0ZWF1IGFuZCBQaWVycmUgUGF1bCBMZWZlYnZyZS4KLQotLSBJc3N1ZSAjMTM1MTI6IENyZWF0ZSB+Ly5weXBpcmMgc2VjdXJlbHkgKENWRS0yMDExLTQ5NDQpLiAgSW5pdGlhbCBwYXRjaCBieQotICBQaGlsaXAgSmVudmV5LCB0ZXN0ZWQgYnkgTWFnZWlhIGFuZCBEZWJpYW4uCi0KLS0gSXNzdWUgIzc3MTk6IE1ha2UgZGlzdHV0aWxzIGlnbm9yZSBgYC5uZnMqYGAgZmlsZXMgaW5zdGVhZCBvZiBjaG9raW5nIGxhdGVyCi0gIG9uLiAgSW5pdGlhbCBwYXRjaCBieSBTaWxlbnRHaG9zdCBhbmQgSmVmZiBSYW1uYW5pLgotCi0tIElzc3VlICMxMzEyMDogQWxsb3cgdG8gY2FsbCBwZGIuc2V0X3RyYWNlKCkgZnJvbSB0aHJlYWQuCi0gIFBhdGNoIGJ5IElseWEgU2FuZGxlci4KLQotLSBJc3N1ZSAjMTY1ODU6IE1ha2UgQ0pLIGVuY29kZXJzIHN1cHBvcnQgZXJyb3IgaGFuZGxlcnMgdGhhdCByZXR1cm4gYnl0ZXMgcGVyCi0gIFBFUCAzODMuCi0KLS0gSXNzdWUgIzEwMTgyOiBUaGUgcmUgbW9kdWxlIGRvZXNuJ3QgdHJ1bmNhdGUgaW5kaWNlcyB0byAzMiBiaXRzIGFueW1vcmUuCi0gIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCi0KLS0gSXNzdWUgIzE2NTczOiBJbiAydG8zLCB0cmVhdCBlbnVtZXJhdGUoKSBsaWtlIGEgY29uc3VtaW5nIGNhbGwsIHNvIHN1cGVyZmx1b3VzCi0gIGxpc3QoKSBjYWxscyBhcmVuJ3QgYWRkZWQgdG8gZmlsdGVyKCksIG1hcCgpLCBhbmQgemlwKCkgd2hpY2ggYXJlIGRpcmVjdGx5Ci0gIHBhc3NlZCBlbnVtZXJhdGUoKS4KLQotLSBJc3N1ZSAjMTI4NDg6IFRoZSBwdXJlIFB5dGhvbiBwaWNrbGUgaW1wbGVtZW50YXRpb24gbm93IHRyZWF0cyBvYmplY3QKLSAgbGVuZ3RocyBhcyB1bnNpZ25lZCAzMi1iaXQgaW50ZWdlcnMsIGxpa2UgdGhlIEMgaW1wbGVtZW50YXRpb24gZG9lcy4KLSAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KLQotLSBJc3N1ZSAjMTY0MDg6IEZpeCBmaWxlIGRlc2NyaXB0b3JzIG5vdCBiZWluZyBjbG9zZWQgaW4gZXJyb3IgY29uZGl0aW9ucwotICBpbiB0aGUgemlwZmlsZSBtb2R1bGUuICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgotCi0tIElzc3VlICMxNjQ4MTogbXVsdGlwcm9jZXNzaW5nIG5vIGxvbmdlciBsZWFrcyBwcm9jZXNzIGhhbmRsZXMgb24gV2luZG93cy4KLQotLSBJc3N1ZSAjMTYxNDA6IFRoZSBzdWJwcm9jZXNzIG1vZHVsZSBubyBsb25nZXIgZG91YmxlIGNsb3NlcyBpdHMgY2hpbGQKLSAgc3VicHJvY2Vzcy5QSVBFIHBhcmVudCBmaWxlIGRlc2NyaXB0b3JzIG9uIGNoaWxkIGVycm9yIHByaW9yIHRvIGV4ZWMoKS4KLQotLSBSZW1vdmUgYSBiYXJlIHByaW50IHRvIHN0ZG91dCBmcm9tIHRoZSBzdWJwcm9jZXNzIG1vZHVsZSB0aGF0IGNvdWxkIGhhdmUKLSAgaGFwcGVuZWQgaWYgdGhlIGNoaWxkIHByb2Nlc3Mgd3JvdGUgZ2FyYmFnZSB0byBpdHMgcHJlLWV4ZWMgZXJyb3IgcGlwZS4KLQotLSBJc3N1ZSAjMTYzMjc6IFRoZSBzdWJwcm9jZXNzIG1vZHVsZSBubyBsb25nZXIgbGVha3MgZmlsZSBkZXNjcmlwdG9ycwotICB1c2VkIGZvciBzdGRpbi9zdGRvdXQvc3RkZXJyIHBpcGVzIHRvIHRoZSBjaGlsZCB3aGVuIGZvcmsoKSBmYWlscy4KLQotLSBJc3N1ZSAjMTQzOTY6IEhhbmRsZSB0aGUgb2RkIHJhcmUgY2FzZSBvZiB3YWl0cGlkIHJldHVybmluZyAwIHdoZW4gbm90Ci0gIGV4cGVjdGVkIGluIHN1YnByb2Nlc3MuUG9wZW4ud2FpdCgpLgotCi0tIElzc3VlICMxNjQxMTogRml4IGEgYnVnIHdoZXJlIHpsaWIuZGVjb21wcmVzc29iaigpLmZsdXNoKCkgbWlnaHQgdHJ5IHRvIGFjY2VzcwotICBwcmV2aW91c2x5LWZyZWVkIG1lbW9yeS4gUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KLQotLSBJc3N1ZSAjMTYzNTc6IGZpeCBjYWxsaW5nIGFjY2VwdCgpIG9uIGEgU1NMU29ja2V0IGNyZWF0ZWQgdGhyb3VnaAotICBTU0xDb250ZXh0LndyYXBfc29ja2V0KCkuICBPcmlnaW5hbCBwYXRjaCBieSBKZWZmIE1jTmVpbC4KLQotLSBJc3N1ZSAjMTY0MDk6IFRoZSByZXBvcnRob29rIGNhbGxiYWNrIG1hZGUgYnkgdGhlIGxlZ2FjeQotICB1cmxsaWIucmVxdWVzdC51cmxyZXRyaWV2ZSBBUEkgbm93IHByb3Blcmx5IHN1cHBsaWVzIGEgY29uc3RhbnQgbm9uLXplcm8KLSAgYmxvY2tfc2l6ZSBhcyBpdCBkaWQgaW4gUHl0aG9uIDMuMiBhbmQgMi43LiAgVGhpcyBtYXRjaGVzIHRoZSBiZWhhdmlvciBvZgotICB1cmxsaWIucmVxdWVzdC5VUkxvcGVuZXIucmV0cmlldmUuCi0KLS0gSXNzdWUgIzE2NDMxOiBVc2UgdGhlIHR5cGUgaW5mb3JtYXRpb24gd2hlbiBjb25zdHJ1Y3RpbmcgYSBEZWNpbWFsIHN1YnR5cGUKLSAgZnJvbSBhIERlY2ltYWwgYXJndW1lbnQuCi0KLS0gSXNzdWUgIzE2MzUwOiB6bGliLmRlY29tcHJlc3NvYmooKS5kZWNvbXByZXNzKCkgbm93IGFjY3VtdWxhdGVzIGRhdGEgZnJvbQotICBzdWNjZXNzaXZlIGNhbGxzIGFmdGVyIEVPRiBpbiB1bnVzZWRfZGF0YSwgaW5zdGVhZCBvZiBvbmx5IHNhdmluZyB0aGUgYXJndW1lbnQKLSAgdG8gdGhlIGxhc3QgY2FsbC4gZGVjb21wcmVzc29iaigpLmZsdXNoKCkgbm93IGNvcnJlY3RseSBzZXRzIHVudXNlZF9kYXRhIGFuZAotICB1bmNvbnN1bWVkX3RhaWwuIEEgYnVnIGluIHRoZSBoYW5kbGluZyBvZiBNZW1vcnlFcnJvciB3aGVuIHNldHRpbmcgdGhlCi0gIHVuY29uc3VtZWRfdGFpbCBhdHRyaWJ1dGUgaGFzIGFsc28gYmVlbiBmaXhlZC4gUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KLQotLSBJc3N1ZSAjMTI3NTk6IHNyZV9wYXJzZSBub3cgcmFpc2VzIGEgcHJvcGVyIGVycm9yIHdoZW4gdGhlIG5hbWUgb2YgdGhlIGdyb3VwCi0gIGlzIG1pc3NpbmcuICBJbml0aWFsIHBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCi0KLS0gSXNzdWUgIzE2MTUyOiBmaXggdG9rZW5pemUgdG8gaWdub3JlIHdoaXRlc3BhY2UgYXQgdGhlIGVuZCBvZiB0aGUgY29kZSB3aGVuCi0gIG5vIG5ld2xpbmUgaXMgZm91bmQuICBQYXRjaCBieSBOZWQgQmF0Y2hlbGRlci4KLQotLSBJc3N1ZSAjMTYyMzA6IEZpeCBhIGNyYXNoIGluIHNlbGVjdC5zZWxlY3QoKSB3aGVuIG9uZSB0aGUgbGlzdHMgY2hhbmdlcwotICBzaXplIHdoaWxlIGl0ZXJhdGVkIG9uLiAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KLQotLSBJc3N1ZSAjMTYyMjg6IEZpeCBhIGNyYXNoIGluIHRoZSBqc29uIG1vZHVsZSB3aGVyZSBhIGxpc3QgY2hhbmdlcyBzaXplCi0gIHdoaWxlIGl0IGlzIGJlaW5nIGVuY29kZWQuICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgotCi0tIElzc3VlICMxNDg5NzogRW5oYW5jZSBlcnJvciBtZXNzYWdlcyBvZiBzdHJ1Y3QucGFjayBhbmQKLSAgc3RydWN0LnBhY2tfaW50by4gUGF0Y2ggYnkgTWF0dGkgTcOka2kuCi0KLS0gSXNzdWUgIzEyODkwOiBjZ2l0YiBubyBsb25nZXIgcHJpbnRzIHNwdXJpb3VzIDxwPiB0YWdzIGluIHRleHQKLSAgbW9kZSB3aGVuIHRoZSBsb2dkaXIgb3B0aW9uIGlzIHNwZWNpZmllZC4KLQotLSBJc3N1ZSAjMTYzMDc6IEZpeCBtdWx0aXByb2Nlc3NpbmcuUG9vbC5tYXBfYXN5bmMgbm90IGNhbGxpbmcgaXRzIGNhbGxiYWNrcy4KLSAgUGF0Y2ggYnkgSmFubmUgS2FyaWxhLgotCi0tIElzc3VlICMxNjI1MDogRml4IFVSTEVycm9yIGludm9jYXRpb24gd2l0aCBwcm9wZXIgYXJncy4KLQotLSBJc3N1ZSAjMTYxMTY6IEZpeCBpbmNsdWRlIGFuZCBsaWJyYXJ5IHBhdGhzIHRvIGJlIGNvcnJlY3Qgd2hlbiBidWlsZGluZyBDCi0gIGV4dGVuc2lvbnMgaW4gdmVudnMuCi0KLS0gSXNzdWUgIzE2MjQ1OiBGaXggdGhlIHZhbHVlIG9mIGEgZmV3IGVudGl0aWVzIGluIGh0bWwuZW50aXRpZXMuaHRtbDUuCi0KLS0gSXNzdWUgIzE0Mzk4OiBGaXggc2l6ZSB0cnVuY2F0aW9uIGFuZCBvdmVyZmxvdyBidWdzIGluIHRoZSBiejIgbW9kdWxlLgotCi0tIElzc3VlICMxNjIyMDogd3NnaXJlZiBub3cgYWx3YXlzIGNhbGxzIGNsb3NlKCkgb24gYW4gaXRlcmFibGUgcmVzcG9uc2UuCi0gIFBhdGNoIGJ5IEJyZW50IFR1YmJzLgotCi0tIElzc3VlICMxNjI3MDogdXJsbGliIG1heSBoYW5nIHdoZW4gdXNlZCBmb3IgcmV0cmlldmluZyBmaWxlcyB2aWEgRlRQIGJ5IHVzaW5nCi0gIGEgY29udGV4dCBtYW5hZ2VyLiAgUGF0Y2ggYnkgR2lhbXBhb2xvIFJvZG9sYScuCi0KLS0gSXNzdWUgIzE2NDYxOiBXYXZlIGxpYnJhcnkgc2hvdWxkIGJlIGFibGUgdG8gZGVhbCB3aXRoIDRHQiB3YXYgZmlsZXMsCi0gIGFuZCBzYW1wbGUgcmF0ZSBvZiA0NDEwMCBIei4KLQotLSBJc3N1ZSAjMTYxNzY6IFByb3Blcmx5IGlkZW50aWZ5IFdpbmRvd3MgOCB2aWEgcGxhdGZvcm0ucGxhdGZvcm0oKQotCi0tIElzc3VlICMxNjExNDogVGhlIHN1YnByb2Nlc3MgbW9kdWxlIG5vIGxvbmdlciBwcm92aWRlcyBhIG1pc2xlYWRpbmcgZXJyb3IKLSAgbWVzc2FnZSBzdGF0aW5nIHRoYXQgYXJnc1swXSBkaWQgbm90IGV4aXN0IHdoZW4gZWl0aGVyIHRoZSBjd2Qgb3IgZXhlY3V0YWJsZQotICBrZXl3b3JkIGFyZ3VtZW50cyBzcGVjaWZpZWQgYSBwYXRoIHRoYXQgZGlkIG5vdCBleGlzdC4KLQotLSBJc3N1ZSAjMTYxNjk6IEZpeCBjdHlwZXMuV2luRXJyb3IoKSdzIGNvbmZ1c2lvbiBiZXR3ZWVuIGVycm5vIGFuZCB3aW5lcnJvci4KLQotLSBJc3N1ZSAjMTYwNzY6IE1hZGUgX2VsZW1lbnR0cmVlLkVsZW1lbnQgcGlja2xlYWJsZSBpbiBhIHdheSB0aGF0IGlzIGNvbXBhdGlibGUKLSAgd2l0aCB0aGUgUHl0aG9uIEVsZW1lbnQuIFBpY2tsaW5nL3VucGlja2xpbmcgb2YgeG1sLmV0cmVlLkVsZW1lbnRUcmVlLkVsZW1lbnQKLSAgd29ya3MgYWdhaW4gLSB0aGlzIHdhcyBhIHRlbXBvcmFyeSByZWdyZXNzaW9uIGZyb20gMy4yIHdoZXJlIHRoZSBieS1kZWZhdWx0Ci0gIGltcG9ydGVkIF9lbGVtZW50dHJlZSBoYWQgbm8gcGlja2xpbmcgY2FwYWJpbGl0eS4KLQotLSBJc3N1ZSAjMTYwODk6IEFsbG93IEVsZW1lbnRUcmVlLlRyZWVCdWlsZGVyIHRvIHdvcmsgYWdhaW4gd2l0aCBhIG5vbi1FbGVtZW50Ci0gIGVsZW1lbnRfZmFjdG9yeSAoZml4ZXMgYSByZWdyZXNzaW9uIGluIFNpbXBsZVRBTCkuCi0KLS0gSXNzdWUgIzE2OTEzOiBGaXggRWxlbWVudC5pdGVydGV4dCgpJ3MgaGFuZGxpbmcgb2YgdGV4dCB3aXRoIFhNTCBlbnRpdGllcy4sCi0KLS0gSXNzdWUgIzE2MDM0OiBGaXggcGVyZm9ybWFuY2UgcmVncmVzc2lvbnMgaW4gdGhlIG5ldyBgYnoyLkJaMkZpbGVgCi0gIGltcGxlbWVudGF0aW9uLiAgSW5pdGlhbCBwYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgotCi0tIElzc3VlICMxNjExMjogcGxhdGZvcm0uYXJjaGl0ZWN0dXJlIGRvZXMgbm90IGNvcnJlY3RseSBlc2NhcGUgYXJndW1lbnQgdG8KLSAgL3Vzci9iaW4vZmlsZS4gIFBhdGNoIGJ5IERhdmlkIEJlbmphbWluLgotCi0tIElzc3VlICMxNTc1NjogYHN1YnByb2Nlc3MucG9sbCgpYCBub3cgcHJvcGVybHkgaGFuZGxlcyBgZXJybm8uRUNISUxEYCB0bwotICByZXR1cm4gYSByZXR1cm5jb2RlIG9mIDAgd2hlbiB0aGUgY2hpbGQgaGFzIGFscmVhZHkgZXhpdGVkIG9yIGNhbm5vdCBiZSB3YWl0ZWQKLSAgb24uCi0KLS0gSXNzdWUgIzE1MzIzOiBJbXByb3ZlIGZhaWx1cmUgbWVzc2FnZSBvZiBgTW9jay5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgpYC4KLQotLSBJc3N1ZSAjMTYwNjQ6IGBgdW5pdHRlc3QgLW1gYCBjbGFpbXMgZXhlY3V0YWJsZSBpcyAicHl0aG9uIiwgbm90ICJweXRob24zIi4KLQotLSBJc3N1ZSAjMTIzNzY6IFBhc3Mgb24gcGFyYW1ldGVycyBpbiBgVGV4dFRlc3RSZXN1bHQuX19pbml0X18oKWAgc3VwZXIgY2FsbC4KLQotLSBJc3N1ZSAjMTUyMjI6IEluc2VydCBibGFuayBsaW5lIGFmdGVyIGVhY2ggbWVzc2FnZSBpbiBtYm94IG1haWxib3hlcy4KLQotLSBJc3N1ZSAjMTYwMTM6IEZpeCBgY3N2LlJlYWRlcmAgcGFyc2luZyBpc3N1ZSB3aXRoIGVuZGluZyBxdW90ZSBjaGFyYWN0ZXJzLgotICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgotCi0tIElzc3VlICMxNTQyMTogRml4IGFuIE92ZXJmbG93RXJyb3IgaW4gYENhbGVuZGFyLml0ZXJtb250aGRhdGVzKClgIGFmdGVyCi0gIGBkYXRldGltZS5NQVhZRUFSYC4gIFBhdGNoIGJ5IEPDqWRyaWMgS3JpZXIuCi0KLS0gSXNzdWUgIzE1OTcwOiBgeG1sLmV0cmVlLkVsZW1lbnRUcmVlYCBub3cgc2VyaWFsaXplcyBjb3JyZWN0bHkgdGhlIGVtcHR5IEhUTUwKLSAgZWxlbWVudHMgJ21ldGEnIGFuZCAncGFyYW0nLgotCi0tIElzc3VlICMxNTg0MjogVGhlIGBTb2NrZXRJTy57cmVhZGFibGUsd3JpdGFibGUsc2Vla2FibGV9YCBtZXRob2RzIG5vdyByYWlzZQotICBWYWx1ZUVycm9yIHdoZW4gdGhlIGZpbGUtbGlrZSBvYmplY3QgaXMgY2xvc2VkLiAgUGF0Y2ggYnkgQWxlc3NhbmRybyBNb3VyYS4KLQotLSBJc3N1ZSAjMTU4NzY6IEZpeCBhIHJlZmxlYWsgaW4gdGhlIGBjdXJzZXNgIG1vZHVsZTogd2luZG93LmVuY29kaW5nLgotCi0tIElzc3VlICMxNTg4MTogRml4IGBhdGV4aXRgIGhvb2sgaW4gYG11bHRpcHJvY2Vzc2luZ2AuICBPcmlnaW5hbCBwYXRjaCBieSBDaHJpcwotICBNY0Rvbm91Z2guCi0KLS0gSXNzdWUgIzE1ODQxOiBUaGUgcmVhZGFibGUoKSwgd3JpdGFibGUoKSBhbmQgc2Vla2FibGUoKSBtZXRob2RzIG9mCi0gIGBpby5CeXRlc0lPYCBhbmQgYGlvLlN0cmluZ0lPYCBvYmplY3RzIG5vdyByYWlzZSBWYWx1ZUVycm9yIHdoZW4gdGhlIG9iamVjdAotICBoYXMgYmVlbiBjbG9zZWQuICBQYXRjaCBieSBBbGVzc2FuZHJvIE1vdXJhLgotCi0tIElzc3VlICMxNTQ0NzogVXNlIGBzdWJwcm9jZXNzLkRFVk5VTExgIGluIHdlYmJyb3dzZXIsIGluc3RlYWQgb2Ygb3BlbmluZwotICBgb3MuZGV2bnVsbGAgZXhwbGljaXRseSBhbmQgbGVhdmluZyBpdCBvcGVuLgotCi0tIElzc3VlICMxNTUwOTogYHdlYmJyb3dzZXIuVW5peEJyb3dzZXJgIG5vIGxvbmdlciBwYXNzZXMgZW1wdHkgYXJndW1lbnRzIHRvCi0gIFBvcGVuIHdoZW4gYGAlYWN0aW9uYGAgc3Vic3RpdHV0aW9ucyBwcm9kdWNlIGVtcHR5IHN0cmluZ3MuCi0KLS0gSXNzdWUgIzEyNzc2LCBpc3N1ZSAjMTE4Mzk6IENhbGwgYGFyZ3BhcnNlYCB0eXBlIGZ1bmN0aW9uIChzcGVjaWZpZWQgYnkKLSAgYWRkX2FyZ3VtZW50KSBvbmx5IG9uY2UuICBCZWZvcmUsIHRoZSB0eXBlIGZ1bmN0aW9uIHdhcyBjYWxsZWQgdHdpY2UgaW4gdGhlCi0gIGNhc2Ugd2hlcmUgdGhlIGRlZmF1bHQgd2FzIHNwZWNpZmllZCBhbmQgdGhlIGFyZ3VtZW50IHdhcyBnaXZlbiBhcyB3ZWxsLiAgVGhpcwotICB3YXMgZXNwZWNpYWxseSBwcm9ibGVtYXRpYyBmb3IgdGhlIEZpbGVUeXBlIHR5cGUsIGFzIGEgZGVmYXVsdCBmaWxlIHdvdWxkCi0gIGFsd2F5cyBiZSBvcGVuZWQsIGV2ZW4gaWYgYSBmaWxlIGFyZ3VtZW50IHdhcyBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZS4KLQotLSBJc3N1ZSAjMTU5MDY6IEZpeCBhIHJlZ3Jlc3Npb24gaW4gYGFyZ3BhcnNlYCBjYXVzZWQgYnkgdGhlIHByZWNlZGluZyBjaGFuZ2UsCi0gIHdoZW4gYGBhY3Rpb249J2FwcGVuZCdgYCwgYGB0eXBlPSdzdHInYGAgYW5kIGBgZGVmYXVsdD1bXWBgLgotCi1JRExFCi0tLS0tCi0KLS0gSXNzdWUgIzE3MTE0OiBJRExFIG5vdyB1c2VzIG5vbi1zdHJpY3QgY29uZmlnIHBhcnNlci4KLQotLSBJc3N1ZSAjOTI5MDogSW4gSURMRSB0aGUgc3lzLnN0ZCogc3RyZWFtcyBub3cgaW1wbGVtZW50IGlvLlRleHRJT0Jhc2UKLSAgaW50ZXJmYWNlIGFuZCBzdXBwb3J0IGFsbCBtYW5kYXRvcnkgbWV0aG9kcyBhbmQgcHJvcGVydGllcy4KLQotLSBJc3N1ZSAjMTY4Mjk6IElETEUgcHJpbnRpbmcgbm8gbG9uZ2VyIGZhaWxzIGlmIHRoZXJlIGFyZSBzcGFjZXMgb3Igb3RoZXIKLSAgc3BlY2lhbCBjaGFyYWN0ZXJzIGluIHRoZSBmaWxlIHBhdGguCi0KLS0gSXNzdWUgIzE2NDkxOiBJRExFIG5vdyBwcmludHMgY2hhaW5lZCBleGNlcHRpb24gdHJhY2ViYWNrcy4KLQotLSBJc3N1ZSAjMTY4MTk6IElETEUgbWV0aG9kIGNvbXBsZXRpb24gbm93IGNvcnJlY3RseSB3b3JrcyBmb3IgYnl0ZXMgbGl0ZXJhbHMuCi0KLS0gSXNzdWUgIzE2NTA0OiBJRExFIG5vdyBjYXRjaGVzIFN5bnRheEVycm9ycyByYWlzZWQgYnkgdG9rZW5pemVyLiBQYXRjaCBieQotICBSb2dlciBTZXJ3eS4KLQotLSBJc3N1ZSAjMTY1MTE6IFVzZSBkZWZhdWx0IElETEUgd2lkdGggYW5kIGhlaWdodCBpZiBjb25maWcgcGFyYW0gaXMgbm90IHZhbGlkLgotICBQYXRjaCBTZXJoaXkgU3RvcmNoYWthLgotCi0tIElzc3VlICMxMjA3NTg5OiBBZGQgQ3V0L0NvcHkvUGFzdGUgaXRlbXMgdG8gSURMRSByaWdodCBjbGljayBDb250ZXh0IE1lbnUKLSAgUGF0Y2ggYnkgVG9kZCBSb3ZpdG8uCi0KLVRlc3RzCi0tLS0tLQorLSBJc3N1ZSAjMTE5OTU6IHRlc3RfcHlkb2MgZG9lc24ndCBpbXBvcnQgYWxsIHN5cy5wYXRoIG1vZHVsZXMgYW55bW9yZS4KIAogLSBJc3N1ZSAjMTc0NDg6IHRlc3Rfc2F4IG5vdyBza2lwcyBpZiB0aGVyZSBhcmUgbm8geG1sIHBhcnNlcnMgYXZhaWxhYmxlCiAgIGluc3RlYWQgb2YgcmFpc2luZyBhbiBJbXBvcnRFcnJvci4KQEAgLTIzNTYsOCArNTk1OCwxNSBAQAogCiAtIElzc3VlICMxMzg5ODogdGVzdF9zc2wgbm8gbG9uZ2VyIHByaW50cyBhIHNwdXJpb3VzIHN0YWNrIHRyYWNlIG9uIFVidW50dS4KIAorLSBJc3N1ZSAjMTcyODM6IFNoYXJlIGNvZGUgYmV0d2VlbiBgX19tYWluX18ucHlgIGFuZCBgcmVncnRlc3QucHlgIGluCisgIGBMaWIvdGVzdGAuCisKIC0gSXNzdWUgIzE3MjQ5OiBjb252ZXJ0IGEgdGVzdCBpbiB0ZXN0X2NhcGkgdG8gdXNlIHVuaXR0ZXN0IGFuZCByZWFwIHRocmVhZHMuCiAKKy0gSXNzdWUgIzE3MTA3OiBUZXN0IGNsaWVudC1zaWRlIFNOSSBzdXBwb3J0IGluIHVybGxpYi5yZXF1ZXN0IHRoYW5rcyB0bworICB0aGUgbmV3IHNlcnZlci1zaWRlIFNOSSBzdXBwb3J0IGluIHRoZSBzc2wgbW9kdWxlLiAgSW5pdGlhbCBwYXRjaCBieQorICBEYW5pZWwgQmxhY2suCisKIC0gSXNzdWUgIzE3MDQxOiBGaXggdGVzdGluZyB3aGVuIFB5dGhvbiBpcyBjb25maWd1cmVkIHdpdGggdGhlCiAgIC0td2l0aG91dC1kb2Mtc3RyaW5ncy4KIApAQCAtMjQyNCw2ICs2MDMzLDExIEBACiAKIC0gSXNzdWUgIzE2NzQ4OiB0ZXN0X2hlYXBxIG5vdyB3b3JrcyB3aXRoIHVuaXR0ZXN0IHRlc3QgZGlzY292ZXJ5LgogCistIElzc3VlICMxMDY0NjogVGVzdHMgcmVhcnJhbmdlZCBmb3Igb3Muc2FtZWZpbGUvc2FtZXN0YXQgdG8gY2hlY2sgZm9yIG5vdAorICBqdXN0IHN5bWxpbmtzIGJ1dCBhbHNvIGhhcmQgbGlua3MuCisKKy0gSXNzdWUgIzE1MzAyOiBTd2l0Y2ggcmVncnRlc3QgZnJvbSB1c2luZyBnZXRvcHQgdG8gdXNpbmcgYXJncGFyc2UuCisKIC0gSXNzdWUgIzE1MzI0OiBGaXggcmVncnRlc3QgcGFyc2luZyBvZiAtLWZyb21maWxlLCAtLW1hdGNoLCBhbmQgLS1yYW5kb21pemUKICAgb3B0aW9ucy4KIApAQCAtMjQzMyw2ICs2MDQ3LDkgQEAKIC0gSXNzdWUgIzE2NjY0OiBBZGQgcmVncmVzc2lvbiB0ZXN0cyBmb3IgZ2xvYidzIGJlaGF2aW91ciBjb25jZXJuaW5nIGVudHJpZXMKICAgc3RhcnRpbmcgd2l0aCBhICIuIi4gIFBhdGNoIGJ5IFNlYmFzdGlhbiBLcmVmdC4KIAorLSBJc3N1ZSAjMTMzOTA6IFRoZSBgYC1SYGAgb3B0aW9uIHRvIHJlZ3J0ZXN0IG5vdyBhbHNvIGNoZWNrcyBmb3IgbWVtb3J5CisgIGFsbG9jYXRpb24gbGVha3MsIHVzaW5nIDpmdW5jOmBzeXMuZ2V0YWxsb2NhdGVkYmxvY2tzKClgLgorCiAtIElzc3VlICMxNjU1OTogQWRkIG1vcmUgdGVzdHMgZm9yIHRoZSBqc29uIG1vZHVsZSwgaW5jbHVkaW5nIHNvbWUgZnJvbSB0aGUKICAgb2ZmaWNpYWwgdGVzdCBzdWl0ZSBhdCBqc29uLm9yZy4gIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCiAKQEAgLTI0NTEsNyArNjA2OCw3IEBACiAtIElzc3VlICMxNTgwMjogRml4IHRlc3QgbG9naWMgaW4gYFRlc3RNYWlsZGlyLnRlc3RfY3JlYXRlX3RtcCgpYC4gUGF0Y2ggYnkKICAgU2VyaGl5IFN0b3JjaGFrYS4KIAotLSBJc3N1ZSAjMTU1NTc6IEFkZCBhIHRlc3Qgc3VpdGUgZm9yIHRoZSBgd2ViYnJvd3NlcmAgbW9kdWxlLCB0aGFua3MgdG8gQW50b24KKy0gSXNzdWUgIzE1NTU3OiBBZGRlZCBhIHRlc3Qgc3VpdGUgZm9yIHRoZSB3ZWJicm93c2VyIG1vZHVsZSwgdGhhbmtzIHRvIEFudG9uCiAgIEJhcmtvdnNreS4KIAogLSBJc3N1ZSAjMTY2OTg6IFNraXAgcG9zaXggdGVzdF9nZXRncm91cHMgd2hlbiBidWlsdCB3aXRoIE9TIFgKQEAgLTI0NjAsNiArNjA3NywzMCBAQAogQnVpbGQKIC0tLS0tCiAKKy0gSXNzdWUgIzE2MDY3OiBBZGQgZGVzY3JpcHRpb24gaW50byBNU0kgZmlsZSB0byByZXBsYWNlIGluc3RhbGxlcidzCisgIHRlbXBvcmFyeSBuYW1lLgorCistIElzc3VlICMxODI1NzogRml4IHJlYWRsaW5rIHVzYWdlIGluIHB5dGhvbi1jb25maWcuICBJbnN0YWxsIHRoZSBweXRob24KKyAgdmVyc2lvbiBhZ2FpbiBvbiBEYXJ3aW4uCisKKy0gSXNzdWUgIzE4NDgxOiBBZGQgQyBjb3ZlcmFnZSByZXBvcnRpbmcgd2l0aCBnY292IGFuZCBsY292LiBBIG5ldyBtYWtlIHRhcmdldAorICAiY292ZXJhZ2UtcmVwb3J0IiBjcmVhdGVzIGFuIGluc3RydW1lbnRlZCBQeXRob24gYnVpbGQsIHJ1bnMgdW5pdCB0ZXN0cworICBhbmQgY3JlYXRlcyBhIEhUTUwuIFRoZSByZXBvcnQgY2FuIGJlIHVwZGF0ZWQgd2l0aCAibWFrZSBjb3ZlcmFnZS1sY292Ii4KKworLSBJc3N1ZSAjMTc4NDU6IENsYXJpZmllZCB0aGUgbWVzc2FnZSBwcmludGVkIHdoZW4gc29tZSBtb2R1bGUgYXJlIG5vdCBidWlsdC4KKworLSBJc3N1ZSAjMTgyNTY6IENvbXBpbGF0aW9uIGZpeCBmb3IgcmVjZW50IEFJWCByZWxlYXNlcy4gIFBhdGNoIGJ5CisgIERhdmlkIEVkZWxzb2huLgorCistIElzc3VlICMxNzU0NzogSW4gY29uZmlndXJlLCBleHBsaWNpdGx5IHBhc3MgLVdmb3JtYXQgZm9yIHRoZSBiZW5lZml0IGZvciBHQ0MKKyAgNC44LgorCistIElzc3VlICMxNTE3MjogRG9jdW1lbnQgTkFTTSAyLjEwKyBhcyByZXF1aXJlbWVudCBmb3IgYnVpbGRpbmcgT3BlblNTTCAxLjAuMQorICBvbiBXaW5kb3dzLgorCistIElzc3VlICMxNzU5MTogVXNlIGxvd2VyY2FzZSBmaWxlbmFtZXMgd2hlbiBpbmNsdWRpbmcgV2luZG93cyBoZWFkZXIgZmlsZXMuCisgIFBhdGNoIGJ5IFJvdW1lbiBQZXRyb3YuCisKIC0gSXNzdWUgIzE3NTUwOiBGaXggdGhlIC0tZW5hYmxlLXByb2ZpbGluZyBjb25maWd1cmUgc3dpdGNoLgogCiAtIElzc3VlICMxNzQyNTogQnVpbGQgd2l0aCBvcGVuc3NsIDEuMC4xZCBvbiBXaW5kb3dzLgpAQCAtMjQ3NSw2ICs2MTE2LDEwIEBACiAKIC0gSXNzdWUgIzM3MTg6IFVzZSBBQ19BUkdfVkFSIHRvIHNldCBNQUNIREVQIGluIGNvbmZpZ3VyZS5hYy4KIAorLSBJc3N1ZSAjMTYyMzU6IEltcGxlbWVudCBweXRob24tY29uZmlnIGFzIGEgc2hlbGwgc2NyaXB0LgorCistIElzc3VlICMxNjc2OTogUmVtb3ZlIG91dGRhdGVkIFZpc3VhbCBTdHVkaW8gcHJvamVjdHMuCisKIC0gSXNzdWUgIzE3MDMxOiBGaXggcnVubmluZyByZWdlbiBpbiBjcm9zcyBidWlsZHMuCiAKIC0gSXNzdWUgIzM3NTQ6IGZpeCB0eXBvIGluIHB0aHJlYWQgQUNfQ0FDSEVfVkFMLgpAQCAtMjQ4MiwxMiArNjEyNywxNCBAQAogLSBJc3N1ZSAjMTU0ODQ6IEZpeCBfUFlUSE9OX1BST0pFQ1RfQkFTRSBmb3Igc3JjZGlyICE9IGJ1aWxkZGlyIGJ1aWxkczsKICAgdXNlIF9QWVRIT05fUFJPSkVDVF9CQVNFIGluIGRpc3R1dGlscy9zeXNjb25maWcucHkuCiAKKy0gRHJvcCBzdXBwb3J0IGZvciBXaW5kb3dzIDIwMDAgKGNoYW5nZXNldCBlNTJkZjA1YjQ5NmEpLgorCiAtIElzc3VlICMxNzAyOTogTGV0IGgycHkgc2VhcmNoIHRoZSBtdWx0aWFyY2ggc3lzdGVtIGluY2x1ZGUgZGlyZWN0b3J5LgogCiAtIElzc3VlICMxNjk1MzogRml4IHNvY2tldCBtb2R1bGUgY29tcGlsYXRpb24gb24gcGxhdGZvcm1zIHdpdGgKICAgSEFWRV9CUk9LRU5fUE9MTC4gUGF0Y2ggYnkgSmVmZnJleSBBcm1zdHJvbmcuCiAKLS0gSXNzdWUgIzE2ODM2OiBFbmFibGUgSVB2NiBzdXBwb3J0IGV2ZW4gaWYgSVB2NiBpcyBkaXNhYmxlZCBvbiB0aGUgYnVpbGQgaG9zdC4KKy0gSXNzdWUgIzE2MzIwOiBSZW1vdmUgcmVkdW5kYW50IE1ha2VmaWxlIGRlcGVuZGVuY2llcyBmb3Igc3RyaW5ncyBhbmQgYnl0ZXMuCiAKIC0gQ3Jvc3MgY29tcGlsaW5nIG5lZWRzIGhvc3QgYW5kIGJ1aWxkIHNldHRpbmdzLiBjb25maWd1cmUgbm8gbG9uZ2VyCiAgIGNyZWF0ZXMgYSBicm9rZW4gUFlUSE9OX0ZPUl9CVUlMRCB2YXJpYWJsZSB3aGVuIC0tYnVpbGQgaXMgbWlzc2luZy4KQEAgLTI0OTUsNiArNjE0Miw4IEBACiAtIEZpeCBjcm9zcyBjb21waWxpbmcgaXNzdWUgaW4gc2V0dXAucHksIGVuc3VyZSB0aGF0IGxpYl9kaXJzIGFuZCBpbmNfZGlycyBhcmUKICAgZGVmaW5lZCBpbiBjcm9zcyBjb21waWxpbmcgbW9kZSwgdG9vLgogCistIElzc3VlICMxNjgzNjogRW5hYmxlIElQdjYgc3VwcG9ydCBldmVuIGlmIElQdjYgaXMgZGlzYWJsZWQgb24gdGhlIGJ1aWxkIGhvc3QuCisKIC0gSXNzdWUgIzE2NTkzOiBIYXZlIEJTRCAnbWFrZSAtcycgZG8gdGhlIHJpZ2h0IHRoaW5nLCB0aGFua3MgdG8gRGFuaWVsIFNoYWhhZgogCiAtIElzc3VlICMxNjI2MjogZml4IG91dC1vZi1zcmMtdHJlZSBidWlsZHMsIGlmIG1lcmN1cmlhbCBpcyBub3QgaW5zdGFsbGVkLgpAQCAtMjUwOSw2ICs2MTU4LDggQEAKIC0gSXNzdWUgIzE1OTIzOiBGaXggYSBtaXN0YWtlIGluIGBgYXNkbF9jLnB5YGAgdGhhdCByZXN1bHRlZCBpbiBhIFR5cGVFcnJvcgogICBhZnRlciAyODAxYmY4NzVhMjQgKHNlZSAjMTU4MDEpLgogCistIElzc3VlICMxNjEzNTogUmVtb3ZlIE9TLzIgc3VwcG9ydC4KKwogLSBJc3N1ZSAjMTU4MTk6IE1ha2Ugc3VyZSB3ZSBjYW4gYnVpbGQgUHl0aG9uIG91dC1vZi10cmVlIGZyb20gYSByZWFkLW9ubHkKICAgc291cmNlIGRpcmVjdG9yeS4gIChTb21ld2hhdCByZWxhdGVkIHRvIGlzc3VlICM5ODYwLikKIApAQCAtMjUyMSwxMiArNjE3Miw1NSBAQAogQy1BUEkKIC0tLS0tCiAKKy0gSXNzdWUgIzE4MzUxOiBGaXggdmFyaW91cyBpc3N1ZXMgaW4gYSBmdW5jdGlvbiBpbiBpbXBvcnRsaWIgcHJvdmlkZWQgdG8gaGVscAorICBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZVdpdGhQYXRobmFtZXMoKSAoYW5kIHRodXMgYnkgZXh0ZW5zaW9uCisgIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlKCkgYW5kIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlRXgoKSkuCisKKy0gSXNzdWUgIzkzNjk6IFRoZSB0eXBlcyBvZiBgY2hhcipgIGFyZ3VtZW50cyBvZiBQeU9iamVjdF9DYWxsRnVuY3Rpb24oKSBhbmQKKyAgUHlPYmplY3RfQ2FsbE1ldGhvZCgpIG5vdyBjaGFuZ2VkIHRvIGBjb25zdCBjaGFyKmAuICBCYXNlZCBvbiBwYXRjaGVzIGJ5CisgIErDtnJnIE3DvGxsZXIgYW5kIExhcnMgQnVpdGluY2suCisKKy0gSXNzdWUgIzE3MjA2OiBQeV9DTEVBUigpLCBQeV9ERUNSRUYoKSwgUHlfWElOQ1JFRigpIGFuZCBQeV9YREVDUkVGKCkgbm93CisgIGV4cGFuZCB0aGVpciBhcmd1bWVudHMgb25jZSBpbnN0ZWFkIG9mIG11bHRpcGxlIHRpbWVzLiAgUGF0Y2ggd3JpdHRlbiBieSBJbGxpYQorICBQb2xvc3VraGluLgorCistIElzc3VlICMxNzUyMjogQWRkIHRoZSBQeUdJTFN0YXRlX0NoZWNrKCkgQVBJLgorCistIElzc3VlICMxNzMyNzogQWRkIFB5RGljdF9TZXREZWZhdWx0LgorCiAtIElzc3VlICMxNjg4MTogRml4IFB5X0FSUkFZX0xFTkdUSCBtYWNybyBmb3IgR0NDIDwgMy4xLgogCistIElzc3VlICMxNjUwNTogUmVtb3ZlIHVudXNlZCBQeV9UUEZMQUdTX0lOVF9TVUJDTEFTUy4KKworLSBJc3N1ZSAjMTYwODY6IFB5VHlwZU9iamVjdC50cF9mbGFncyBhbmQgUHlUeXBlX1NwZWMuZmxhZ3MgYXJlIG5vdyB1bnNpZ25lZAorICAodW5zaWduZWQgbG9uZyBhbmQgdW5zaWduZWQgaW50KSB0byBhdm9pZCBhbiB1bmRlZmluZWQgYmVoYXZpb3VyIHdpdGgKKyAgUHlfVFBGTEFHU19UWVBFX1NVQkNMQVNTICgoMSA8PCAzMSkuIFB5VHlwZV9HZXRGbGFncygpIHJlc3VsdCB0eXBlIGlzCisgIG5vdyB1bnNpZ25lZCB0b28gKHVuc2lnbmVkIGxvbmcsIGluc3RlYWQgb2YgbG9uZykuCisKKy0gSXNzdWUgIzE2MTY2OiBBZGQgUFlfTElUVExFX0VORElBTiBhbmQgUFlfQklHX0VORElBTiBtYWNyb3MgYW5kIHVuaWZpZWQKKyAgZW5kaWFubmVzcyBkZXRlY3Rpb24gYW5kIGhhbmRsaW5nLgorCiBEb2N1bWVudGF0aW9uCiAtLS0tLS0tLS0tLS0tCiAKLS0gSXNzdWUgMTc1Mzg6IERvY3VtZW50IFhNTCB2dWxuZXJhYmlsdGllcworLSBJc3N1ZSAjMTc3MDE6IEltcHJvdmluZyBzdHJmdGltZSBkb2N1bWVudGF0aW9uLgorCistIElzc3VlICMxODQ0MDogQ2xhcmlmeSB0aGF0IGBoYXNoKClgIGNhbiB0cnVuY2F0ZSB0aGUgdmFsdWUgcmV0dXJuZWQgZnJvbSBhbgorICBvYmplY3QncyBjdXN0b20gYF9faGFzaF9fKClgIG1ldGhvZC4KKworLSBJc3N1ZSAjMTc4NDQ6IEFkZCBsaW5rcyB0byBlbmNvZGVycyBhbmQgZGVjb2RlcnMgZm9yIGJ5dGVzLXRvLWJ5dGVzIGNvZGVjcy4KKworLSBJc3N1ZSAjMTQwOTc6IGltcHJvdmUgdGhlICJpbnRyb2R1Y3Rpb24iIHBhZ2Ugb2YgdGhlIHR1dG9yaWFsLgorCistIElzc3VlICMxNzk3NzogVGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZSBjYWRlZmF1bHQgYXJndW1lbnQncyBkZWZhdWx0IHZhbHVlCisgIGluIHVybGxpYi5yZXF1ZXN0LnVybG9wZW4oKSBpcyBmaXhlZCB0byBtYXRjaCB0aGUgY29kZS4KKworLSBJc3N1ZSAjNjY5NjogYWRkIGRvY3VtZW50YXRpb24gZm9yIHRoZSBQcm9maWxlIG9iamVjdHMsIGFuZCBpbXByb3ZlCisgIHByb2ZpbGUvY1Byb2ZpbGUgZG9jcy4gIFBhdGNoIGJ5IFRvbSBQaW5ja25leS4KKworLSBJc3N1ZSAjMTU5NDA6IFNwZWNpZnkgZWZmZWN0IG9mIGxvY2FsZSBvbiB0aW1lIGZ1bmN0aW9ucy4KKworLSBJc3N1ZSAjMTc1Mzg6IERvY3VtZW50IFhNTCB2dWxuZXJhYmlsdGllcwogCiAtIElzc3VlICMxNjY0Mjogc2NoZWQuc2NoZWR1bGVyIHRpbWVmdW5jIGluaXRpYWwgZGVmYXVsdCBpcyB0aW1lLm1vbm90b25pYy4KICAgUGF0Y2ggYnkgUmFtY2hhbmRyYSBBcHRlCkBAIC0yNTcwLDggKzYyNjQsOCBAQAogCiAtIElzc3VlICMxMzUzODogSW1wcm92ZSBzdHIoKSBhbmQgb2JqZWN0Ll9fc3RyX18oKSBkb2N1bWVudGF0aW9uLgogCi0tIElzc3VlICMxNjQ4OTogTWFrZSBpdCBjbGVhcmVyIHRoYXQgaW1wb3J0bGliLmZpbmRfbG9hZGVyKCkgcmVxdWlyZXMgYW55IGFuZAotICBhbGwgcGFja2FnZXMgdG8gYmUgc2VwYXJhdGVseSBpbXBvcnRlZC4KKy0gSXNzdWUgIzE2NDg5OiBNYWtlIGl0IGNsZWFyZXIgdGhhdCBpbXBvcnRsaWIuZmluZF9sb2FkZXIoKSBuZWVkcyBwYXJlbnQKKyAgcGFja2FnZXMgdG8gYmUgZXhwbGljaXRseSBpbXBvcnRlZC4KIAogLSBJc3N1ZSAjMTY0MDA6IFVwZGF0ZSB0aGUgZGVzY3JpcHRpb24gb2Ygd2hpY2ggdmVyc2lvbnMgb2YgYSBnaXZlbiBwYWNrYWdlCiAgIFB5UEkgZGlzcGxheXMuCkBAIC0yNTk0LDYgKzYyODgsOSBAQAogLSBJc3N1ZSAjMTYxMTU6IEltcHJvdmUgc3VicHJvY2Vzcy5Qb3BlbigpIGRvY3VtZW50YXRpb24gYXJvdW5kIGFyZ3MsIHNoZWxsLAogICBhbmQgZXhlY3V0YWJsZSBhcmd1bWVudHMuCiAKKy0gSXNzdWUgIzEzNDk4OiBDbGFyaWZ5IGRvY3Mgb2Ygb3MubWFrZWRpcnMoKSdzIGV4aXN0X29rIGFyZ3VtZW50LiAgRG9uZSB3aXRoCisgIGdyZWF0IG5hdGl2ZS1zcGVha2VyIGhlbHAgZnJvbSBSLiBEYXZpZCBNdXJyYXkuCisKIC0gSXNzdWUgIzE1NTMzOiBDbGFyaWZ5IGRvY3MgYW5kIGFkZCB0ZXN0cyBmb3IgYHN1YnByb2Nlc3MuUG9wZW4oKWAncyBjd2QKICAgYXJndW1lbnQuCiAKQEAgLTI2MTQsMjQgKzYzMTEsNjAgQEAKIFRvb2xzL0RlbW9zCiAtLS0tLS0tLS0tLQogCi0tIElzc3VlICMxNzE1NjogcHlnZXR0ZXh0LnB5IG5vdyB1c2VzIGFuIGVuY29kaW5nIG9mIHNvdXJjZSBmaWxlIGFuZCBjb3JyZWN0bHkKLSAgd3JpdGVzIGFuZCBlc2NhcGVzIG5vbi1hc2NpaSBjaGFyYWN0ZXJzLgorLSBJc3N1ZSAjMTg4MTc6IEZpeCBhIHJlc291cmNlIHdhcm5pbmcgaW4gTGliL2FpZmMucHkgZGVtby4gIFBhdGNoIGJ5CisgIFZhanJhc2t5IEtvay4KKworLSBJc3N1ZSAjMTg0Mzk6IE1ha2UgcGF0Y2hjaGVjayB3b3JrIG9uIFdpbmRvd3MgZm9yIEFDS1MsIE5FV1MuCisKKy0gSXNzdWUgIzE4NDQ4OiBGaXggYSB0eXBvIGluIFRvb2xzL2RlbW8vZWlmZmVsLnB5LgorCistIElzc3VlICMxODQ1NzogRml4ZWQgc2F2aW5nIG9mIGZvcm11bGFzIGFuZCBjb21wbGV4IG51bWJlcnMgaW4KKyAgVG9vbHMvZGVtby9zczEucHkuCisKKy0gSXNzdWUgIzE4NDQ5OiBNYWtlIFRvb2xzL2RlbW8vc3MxLnB5IHdvcmsgYWdhaW4gb24gUHl0aG9uIDMuICBQYXRjaCBieQorICBGw6l2cnkgVGhpYmF1bHQuCisKKy0gSXNzdWUgIzEyOTkwOiBUaGUgIlB5dGhvbiBMYXVuY2hlciIgb24gT1NYIGNvdWxkIG5vdCBsYXVuY2ggcHl0aG9uIHNjcmlwdHMKKyAgdGhhdCBoYXZlIHBhdGhzIHRoYXQgaW5jbHVkZSB3aWRlIGNoYXJhY3RlcnMuCisKKy0gSXNzdWUgIzE1MjM5OiBNYWtlIG1rc3RyaW5ncHJlcC5weSB3b3JrIGFnYWluIG9uIFB5dGhvbiAzLgorCistIElzc3VlICMxNzAyODogQWxsb3dlZCBQeXRob24gYXJndW1lbnRzIHRvIGJlIHN1cHBsaWVkIHRvIHRoZSBXaW5kb3dzCisgIGxhdW5jaGVyLgorCistIElzc3VlICMxNzE1NjogcHlnZXR0ZXh0LnB5IG5vdyBkZXRlY3RzIHRoZSBlbmNvZGluZyBvZiBzb3VyY2UgZmlsZXMgYW5kCisgIGNvcnJlY3RseSB3cml0ZXMgYW5kIGVzY2FwZXMgbm9uLWFzY2lpIGNoYXJhY3RlcnMuCiAKIC0gSXNzdWUgIzE1NTM5OiBGaXggYSBudW1iZXIgb2YgYnVncyBpbiBUb29scy9zY3JpcHRzL3BpbmRlbnQucHkuICBOb3cKICAgcGluZGVudC5weSB3b3JrcyB3aXRoIGEgIndpdGgiIHN0YXRlbWVudC4gIHBpbmRlbnQucHkgbm8gbG9uZ2VyIHByb2R1Y2VzCiAgIGltcHJvcGVyIGluZGVudGF0aW9uLiAgcGluZGVudC5weSBub3cgd29ya3Mgd2l0aCBjb250aW51ZWQgbGluZXMgYnJva2VuIGFmdGVyCiAgICJjbGFzcyIgb3IgImRlZiIga2V5d29yZHMgYW5kIHdpdGggY29udGludWF0aW9ucyBhdCB0aGUgc3RhcnQgb2YgbGluZS4KIAotLSBJc3N1ZSAjMTUzNzg6IEZpeCBUb29scy91bmljb2RlL2NvbXBhcmVjb2RlY3MucHkuICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorLSBJc3N1ZSAjMTE3OTc6IEFkZCBhIDJ0bzMgZml4ZXIgdGhhdCBtYXBzIHJlbG9hZCgpIHRvIGltcC5yZWxvYWQoKS4KIAotLSBJc3N1ZSAjMTY0NzY6IEZpeCBqc29uLnRvb2wgdG8gYXZvaWQgaW5jbHVkaW5nIHRyYWlsaW5nIHdoaXRlc3BhY2UuCistIElzc3VlICMxMDk2NjogUmVtb3ZlIHRoZSBjb25jZXB0IG9mIHVuZXhwZWN0ZWQgc2tpcHBlZCB0ZXN0cy4KKworLSBJc3N1ZSAjOTg5MzogUmVtb3ZlZCB0aGUgTWlzYy9WaW0gZGlyZWN0b3J5LgorCistIFJlbW92ZWQgdGhlIE1pc2MvVGV4dE1hdGUgZGlyZWN0b3J5LgorCistIElzc3VlICMxNjI0NTogQWRkIHRoZSBUb29scy9zY3JpcHRzL3BhcnNlX2h0bWw1X2VudGl0aWVzLnB5IHNjcmlwdCB0byBwYXJzZQorICB0aGUgbGlzdCBvZiBIVE1MNSBlbnRpdGllcyBhbmQgdXBkYXRlIHRoZSBodG1sLmVudGl0aWVzLmh0bWw1IGRpY3Rpb25hcnkuCisKKy0gSXNzdWUgIzE1Mzc4OiBGaXggVG9vbHMvdW5pY29kZS9jb21wYXJlY29kZWNzLnB5LiAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KIAogLSBJc3N1ZSAjMTY1NDk6IE1ha2UganNvbi50b29sIHdvcmsgYWdhaW4gb24gUHl0aG9uIDMgYW5kIGFkZCB0ZXN0cy4KICAgSW5pdGlhbCBwYXRjaCBieSBCZXJrZXIgUGVrc2FnIGFuZCBTZXJoaXkgU3RvcmNoYWthLgogCi0tIElzc3VlICMxMzMwMTogdXNlIGFzdC5saXRlcmFsX2V2YWwoKSBpbnN0ZWFkIG9mIGV2YWwoKSBpbiBUb29scy9pMThuL21zZ2ZtdC5weQorLSBJc3N1ZSAjMTMzMDE6IHVzZSBhc3QubGl0ZXJhbF9ldmFsKCkgaW5zdGVhZCBvZiBldmFsKCkgaW4gVG9vbHMvaTE4bi9tc2dmbXQucHkuCiAgIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCiAKK1dpbmRvd3MKKy0tLS0tLS0KKworLSBJc3N1ZSAjMTg1Njk6IFRoZSBpbnN0YWxsZXIgbm93IGFkZHMgLnB5IHRvIHRoZSBQQVRIRVhUIHZhcmlhYmxlIHdoZW4gZXh0ZW5zaW9ucworICBhcmUgcmVnaXN0ZXJlZC4gUGF0Y2ggYnkgUGF1bCBNb29yZS4KKwogCiBXaGF0J3MgTmV3IGluIFB5dGhvbiAzLjMuMD8KID09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMjcxOSw2ICs2NDUyLDkgQEAKIExpYnJhcnkKIC0tLS0tLS0KIAorLSBJc3N1ZSAjMTcxNTg6IEFkZCAnc3ltYm9scycgdG8gaGVscCgpIHdlbGNvbWUgbWVzc2FnZTsgY2xhcmlmeQorICAnbW9kdWxlcyBzcGFtJyBtZXNzYWdlcy4KKwogLSBJc3N1ZSAjMTU4NDc6IEZpeCBhIHJlZ3Jlc3Npb24gaW4gYXJncGFyc2UsIHdoaWNoIGRpZCBub3QgYWNjZXB0IHR1cGxlcyBhcwogICBhcmd1bWVudCBsaXN0cyBhbnltb3JlLgogCkBAIC0zMjA5LDYgKzY5NDUsMTAgQEAKIC0gSXNzdWUgIzE1MjUwOiBEb2N1bWVudCB0aGF0IGBmaWxlY21wLmRpcmNtcCgpYCBjb21wYXJlcyBmaWxlcyBzaGFsbG93bHkuIFBhdGNoCiAgIGNvbnRyaWJ1dGVkIGJ5IENocmlzIEplcmRvbmVrLgogCistIElzc3VlICMxNTQ0MjogRXhwb3NlIHRoZSBkZWZhdWx0IGxpc3Qgb2YgZGlyZWN0b3JpZXMgaWdub3JlZCBieQorICBgZmlsZWNtcC5kaXJjbXAoKWAgYXMgYSBtb2R1bGUgYXR0cmlidXRlLCBhbmQgZXhwYW5kIHRoZSBsaXN0IHRvIG1vcmUgbW9kZXJuCisgIHZhbHVlcy4KKwogVGVzdHMKIC0tLS0tCiAKQEAgLTMzMjEsOSArNzA2MSw2IEBACiBMaWJyYXJ5CiAtLS0tLS0tCiAKLS0gSXNzdWUgIzE2MzA1OiBGaXggYSBzZWdtZW50YXRpb24gZmF1bHQgb2NjdXJyaW5nIHdoZW4gaW50ZXJydXB0aW5nCi0gIG1hdGguZmFjdG9yaWFsLgotCiAtIElzc3VlICMxMjI4ODogQ29uc2lkZXIgJzAnIGFuZCAnMC4wJyBhcyB2YWxpZCBpbml0aWFsdmFsdWUKICAgZm9yIHRraW50ZXIgU2ltcGxlRGlhbG9nLgogCkBAIC00NTg1LDcgKzgzMjIsNyBAQAogICBhbmQgYnl0ZWFycmF5LnNwbGl0IG1heSBub3cgYmUgcGFzc2VkIGFzIGtleXdvcmQgYXJndW1lbnRzLgogCiAtIElzc3VlICMxMzAxMjogVGhlICdrZWVwZW5kcycgcGFyYW1ldGVyIHRvIHN0ci5zcGxpdGxpbmVzIG1heSBub3cgYmUgcGFzc2VkCi0gIGFzIGEga2V5d29yZCBhcmd1bWVudDogICJteV9zdHJpbmcuc3BsaXRsaW5lcyhrZWVwZW5kcz1UcnVlKSIuICBUaGUgc2FtZQorICBhcyBhIGtleXdvcmQgYXJndW1lbnQ6ICJteV9zdHJpbmcuc3BsaXRsaW5lcyhrZWVwZW5kcz1UcnVlKSIuICBUaGUgc2FtZQogICBjaGFuZ2UgYWxzbyBhcHBsaWVzIHRvIGJ5dGVzLnNwbGl0bGluZXMgYW5kIGJ5dGVhcnJheS5zcGxpdGxpbmVzLgogCiAtIElzc3VlICM3NzMyOiBEb24ndCBvcGVuIGEgZGlyZWN0b3J5IGFzIGEgZmlsZSBhbnltb3JlIHdoaWxlIGltcG9ydGluZyBhCkBAIC00NjUxLDcgKzgzODgsNyBAQAogICBkZWFsbG9jYXRvciBjYWxscyBvbmUgb2YgdGhlIG1ldGhvZHMgb24gdGhlIHR5cGUgKGUuZy4gd2hlbiBzdWJjbGFzc2luZwogICBJT0Jhc2UpLiAgRGlhZ25vc2lzIGFuZCBwYXRjaCBieSBEYXZpZGUgUml6em8uCiAKLS0gSXNzdWUgIzk2MTEsICM5MDE1OiBGaWxlSU8ucmVhZCgpIGNsYW1wcyB0aGUgbGVuZ3RoIHRvIElOVF9NQVggb24gV2luZG93cy4KKy0gSXNzdWUgIzk2MTEsIElzc3VlICM5MDE1OiBGaWxlSU8ucmVhZCgpIGNsYW1wcyB0aGUgbGVuZ3RoIHRvIElOVF9NQVggb24gV2luZG93cy4KIAogLSBJc3N1ZSAjOTY0MjogVW5pZm9ybWl6ZSB0aGUgdGVzdHMgb24gdGhlIGF2YWlsYWJpbGl0eSBvZiB0aGUgbWJjcyBjb2RlYywgYWRkCiAgIGEgbmV3IEhBVkVfTUJDUyBkZWZpbmUuCkBAIC01MDE4LDcgKzg3NTUsNyBAQAogLSBJc3N1ZSAjMTM1ODk6IEZpeCBzb21lIHNlcmlhbGl6YXRpb24gcHJpbWl0aXZlcyBpbiB0aGUgYWlmYyBtb2R1bGUuCiAgIFBhdGNoIGJ5IE9sZWcgUGxha2hvdG55dWsuCiAKLS0gSXNzdWUgIzEzNjQyOiBVbnF1b3RlIGJlZm9yZSBiNjRlbmNvZGluZyBgYHVzZXI6cGFzc3dvcmRgYCBkdXJpbmcgQmFzaWMKKy0gSXNzdWUgIzEzNjQyOiBVbnF1b3RlIGJlZm9yZSBiNjRlbmNvZGluZyB1c2VyOnBhc3N3b3JkIGR1cmluZyBCYXNpYwogICBBdXRoZW50aWNhdGlvbi4gUGF0Y2ggY29udHJpYnV0ZWQgYnkgSm9vbmFzIEt1b3JpbGVodG8uCiAKIC0gSXNzdWUgIzEyMzY0OiBGaXggYSBoYW5nIGluIGNvbmN1cnJlbnQuZnV0dXJlcy5Qcm9jZXNzUG9vbEV4ZWN1dG9yLgpAQCAtNTExOSw3ICs4ODU2LDcgQEAKICAgJ2ltcG9ydGxpYi5hYmMuUHlQeWNMb2FkZXInLCAnbm50cGxpYi5OTlRQLnhndGl0bGUnLCAnbm50cGxpYi5OTlRQLnhwYXRoJywKICAgYW5kIHByaXZhdGUgYXR0cmlidXRlcyBvZiAnc210cGQuU01UUENoYW5uZWwnLgogCi0tIElzc3VlICM1OTA1LCAjMTM1NjA6IHRpbWUuc3RyZnRpbWUoKSBpcyBub3cgdXNpbmcgdGhlIGN1cnJlbnQgbG9jYWxlCistIElzc3VlICM1OTA1LCBJc3N1ZSAjMTM1NjA6IHRpbWUuc3RyZnRpbWUoKSBpcyBub3cgdXNpbmcgdGhlIGN1cnJlbnQgbG9jYWxlCiAgIGVuY29kaW5nLCBpbnN0ZWFkIG9mIFVURi04LCBpZiB0aGUgd2NzZnRpbWUoKSBmdW5jdGlvbiBpcyBub3QgYXZhaWxhYmxlLgogCiAtIElzc3VlICMxMzQ2NDogQWRkIGEgcmVhZGludG8oKSBtZXRob2QgdG8gaHR0cC5jbGllbnQuSFRUUFJlc3BvbnNlLiAgUGF0Y2gKQEAgLTU0NzcsOCArOTIxNCw4IEBACiAtIElzc3VlICMxMjYwNzogSW4gc3VicHJvY2VzcywgZml4IGlzc3VlIHdoZXJlIGlmIHN0ZGluLCBzdGRvdXQgb3Igc3RkZXJyIGlzCiAgIGdpdmVuIGFzIGEgbG93IGZkLCBpdCBnZXRzIG92ZXJ3cml0dGVuLgogCi0tIElzc3VlICMxMjU3NjogRml4IHVybG9wZW4gYmVoYXZpb3Igb24gc2l0ZXMgd2hpY2ggZG8gbm90IHNlbmQgKG9yIG9iZnVzY2F0ZSkKLSAgYSBgYENvbm5lY3Rpb246IGNsb3NlYGAgaGVhZGVyLgorLSBJc3N1ZSAjMTI1NzY6IEZpeCB1cmxvcGVuIGJlaGF2aW9yIG9uIHNpdGVzIHdoaWNoIGRvIG5vdCBzZW5kIChvciBvYmZ1c2NhdGVzKQorICBgYENvbm5lY3Rpb246IGNsb3NlYGAgaGVhZGVyLgogCiAtIElzc3VlICMxMjU2MDogQnVpbGQgbGlicHl0aG9uLnNvIG9uIE9wZW5CU0QuIFBhdGNoIGJ5IFN0ZWZhbiBTcGVybGluZy4KIApAQCAtNTU3Niw3ICs5MzEzLDcgQEAKICAgb2YgdGhlIHRleHQgbW9kZSAodXNpbmcgdGhlIGxvY2FsZSBlbmNvZGluZykgdG8gYXZvaWQgZW5jb2RpbmcgaXNzdWVzLgogCiAtIElzc3VlICMxMjE0NzogQWRqdXN0IHRoZSBuZXctaW4tMy4yIHNtdHBsaWIuc2VuZF9tZXNzYWdlIG1ldGhvZCBmb3IgYmV0dGVyCi0gIGNvbmZvcm1hbmNlIHRvIHRoZSBSRkNzOiAgY29ycmVjdGx5IGhhbmRsZSBTZW5kZXIgYW5kIFJlc2VudC0gaGVhZGVycy4KKyAgY29uZm9ybWFuY2UgdG8gdGhlIFJGQ3M6IGNvcnJlY3RseSBoYW5kbGUgU2VuZGVyIGFuZCBSZXNlbnQtIGhlYWRlcnMuCiAKIC0gSXNzdWUgIzEyMzUyOiBGaXggYSBkZWFkbG9jayBpbiBtdWx0aXByb2Nlc3NpbmcuSGVhcCB3aGVuIGEgYmxvY2sgaXMgZnJlZWQgYnkKICAgdGhlIGdhcmJhZ2UgY29sbGVjdG9yIHdoaWxlIHRoZSBIZWFwIGxvY2sgaXMgaGVsZC4KQEAgLTU5ODAsNyArOTcxNyw3IEBACiAgIG11bHRpcGFydCBzdWJwYXJ0cyB3aXRoIGFuIDgtYml0IENURSBpbnRvIHVuaWNvZGUgaW5zdGVhZCBvZiBwcmVzZXJ2aW5nIHRoZQogICBieXRlcy4KIAotLSBJc3N1ZSAjMTY5MDYwODogZW1haWwudXRpbC5mb3JtYXRhZGRyIGlzIG5vdyBSRkMgMjA0NyBhd2FyZTogIGl0IG5vdyBoYXMgYQorLSBJc3N1ZSAjMTY5MDYwODogZW1haWwudXRpbC5mb3JtYXRhZGRyIGlzIG5vdyBSRkMgMjA0NyBhd2FyZTogaXQgbm93IGhhcyBhCiAgIGNoYXJzZXQgcGFyYW1ldGVyIHRoYXQgZGVmYXVsdHMgdG8gdXRmLTggYW5kIGlzIHVzZWQgYXMgdGhlIGNoYXJzZXQgZm9yIFJGQwogICAyMDQ3IGVuY29kaW5nIHdoZW4gdGhlIHJlYWxuYW1lIGNvbnRhaW5zIG5vbi1BU0NJSSBjaGFyYWN0ZXJzLgogCkBAIC02MDM2LDYgKzk3NzMsOSBAQAogLSBJc3N1ZSAjMTE2MzU6IERvbid0IHVzZSBwb2xsaW5nIGluIHdvcmtlciB0aHJlYWRzIGFuZCBwcm9jZXNzZXMgbGF1bmNoZWQgYnkKICAgY29uY3VycmVudC5mdXR1cmVzLgogCistIElzc3VlICM1ODQ1OiBBdXRvbWF0aWNhbGx5IHJlYWQgcmVhZGxpbmUgY29uZmlndXJhdGlvbiB0byBlbmFibGUgY29tcGxldGlvbgorICBpbiBpbnRlcmFjdGl2ZSBtb2RlLgorCiAtIElzc3VlICM2ODExOiBBbGxvdyBpbXBvcnRsaWIgdG8gY2hhbmdlIGEgY29kZSBvYmplY3QncyBjb19maWxlbmFtZSBhdHRyaWJ1dGUKICAgdG8gbWF0Y2ggdGhlIHBhdGggdG8gd2hlcmUgdGhlIHNvdXJjZSBjb2RlIGN1cnJlbnRseSBpcywgbm90IHdoZXJlIHRoZSBjb2RlCiAgIG9iamVjdCBvcmlnaW5hbGx5IGNhbWUgZnJvbS4KQEAgLTY0ODQsNyArMTAyMjQsNyBAQAogLSBJc3N1ZSAjMTMyMTg6IEZpeCB0ZXN0X3NzbCBmYWlsdXJlcyBvbiBEZWJpYW4vVWJ1bnR1LgogCiAtIFJlLWVuYWJsZSBsaWIydG8zJ3MgdGVzdF9wYXJzZXIucHkgdGVzdHMsIHRob3VnaCB3aXRoIGFuIGV4cGVjdGVkIGZhaWx1cmUKLSAgKHNlZSBpc3N1ZSAxMzEyNSkuCisgIChzZWUgaXNzdWUgIzEzMTI1KS4KIAogLSBJc3N1ZSAjMTI2NTY6IEFkZCB0ZXN0cyBmb3IgSVB2NiBhbmQgVW5peCBzb2NrZXRzIHRvIHRlc3RfYXN5bmNvcmUuCiAKQEAgLTY1NzIsNyArMTAzMTIsNyBAQAogICBQYXRjaCBieSBHYXJyZXR0IENvb3Blci4KIAogLSBJc3N1ZSAjMTA3MzY6IEZpeCB0ZXN0X3R0ayB0ZXN0X3dpZGdldHMgZmFpbHVyZXMgd2l0aCBDb2NvYSBUayA4LjUuOQotICAyLjggKyAgb24gTWFjIE9TIFguICAoUGF0Y2ggYnkgUm9uYWxkIE91c3NvcmVuKQorICAyLjgrIG9uIE1hYyBPUyBYLiAgKFBhdGNoIGJ5IFJvbmFsZCBPdXNzb3JlbikKIAogLSBJc3N1ZSAjMTIwNTc6IEFkZCB0ZXN0cyBmb3IgSVNPIDIwMjIgY29kZWNzIChpc28yMDIyX2pwLCBpc28yMDIyX2pwXzIsCiAgIGlzbzIwMjJfa3IpLgpAQCAtNjcxMiw2ICsxMDQ1MiwxMCBAQAogRG9jdW1lbnRhdGlvbgogLS0tLS0tLS0tLS0tLQogCistIElzc3VlICMyMzAwNjogSW1wcm92ZSB0aGUgZG9jdW1lbnRhdGlvbiBhbmQgaW5kZXhpbmcgb2YgZGljdC5fX21pc3NpbmdfXy4KKyAgQWRkIGFuIGVudHJ5IGluIHRoZSBsYW5ndWFnZSBkYXRhbW9kZWwgc3BlY2lhbCBtZXRob2RzIHNlY3Rpb24uCisgIFJldmlzZSBhbmQgaW5kZXggaXRzIGRpc2N1c3Npb24gaW4gdGhlIHN0ZHR5cGVzIG1hcHBpbmcvZGljdCBzZWN0aW9uLgorCiAtIElzc3VlICMxMzk4OTogRG9jdW1lbnQgdGhhdCBHemlwRmlsZSBkb2VzIG5vdCBzdXBwb3J0IHRleHQgbW9kZSwgYW5kIGdpdmUgYQogICBtb3JlIGhlbHBmdWwgZXJyb3IgbWVzc2FnZSB3aGVuIG9wZW5lZCB3aXRoIGFuIGludmFsaWQgbW9kZSBzdHJpbmcuCiAKZGlmZiAtLWdpdCBhL01pc2MvUkVBRE1FIGIvTWlzYy9SRUFETUUKaW5kZXggYzFlODkwZi4uZGRiOGYzZiAxMDA2NDQKLS0tIGEvTWlzYy9SRUFETUUKKysrIGIvTWlzYy9SRUFETUUKQEAgLTIxLDkgKzIxLDcgQEAKIFJFQURNRS5BSVggICAgICAgICAgICAgIEluZm9ybWF0aW9uIGFib3V0IHVzaW5nIFB5dGhvbiBvbiBBSVgKIFJFQURNRS5jb3Zlcml0eSAgICAgICAgIEluZm9ybWF0aW9uIGFib3V0IHJ1bm5pbmcgQ292ZXJpdHkncyBQcmV2ZW50IG9uIFB5dGhvbgogUkVBRE1FLnZhbGdyaW5kICAgICAgICAgSW5mb3JtYXRpb24gZm9yIFZhbGdyaW5kIHVzZXJzLCBzZWUgdmFsZ3JpbmQtcHl0aG9uLnN1cHAKLXN2bm1hcC50eHQgICAgICAgICAgICAgIE1hcCBvZiBvbGQgU1ZOIHJldnMgYW5kIGJyYW5jaGVzIHRvIGhnIGNoYW5nZXNldCBpZHMKIFNwZWNpYWxCdWlsZHMudHh0ICAgICAgIERlc2NyaWJlcyBleHRyYSBzeW1ib2xzIHlvdSBjYW4gc2V0IGZvciBkZWJ1ZyBidWlsZHMKLVRleHRNYXRlICAgICAgICAgICAgICAgIEEgVGV4dE1hdGUgYnVuZGxlIGZvciBQeXRob24gZGV2ZWxvcG1lbnQKK3N2bm1hcC50eHQgICAgICAgICAgICAgIE1hcCBvZiBvbGQgU1ZOIHJldnMgYW5kIGJyYW5jaGVzIHRvIGhnIGNoYW5nZXNldCBpZHMKIHZhbGdyaW5kLXB5dGhvbi5zdXBwICAgIFZhbGdyaW5kIHN1cHByZXNzaW9uIGZpbGUsIHNlZSBSRUFETUUudmFsZ3JpbmQKIHZncmluZGVmcyAgICAgICAgICAgICAgIFB5dGhvbiBjb25maWd1cmF0aW9uIGZvciB2Z3JpbmQgKGEgZ2VuZXJpYyBwcmV0dHkgcHJpbnRlcikKLVZpbSAgICAgICAgICAgICAgICAgICAgIFB5dGhvbiBkZXZlbG9wbWVudCB1dGlsaXRpZXMgZm9yIHRoZSBWaW0gZWRpdG9yCmRpZmYgLS1naXQgYS9NaXNjL1NwZWNpYWxCdWlsZHMudHh0IGIvTWlzYy9TcGVjaWFsQnVpbGRzLnR4dAppbmRleCBmODY5ZTdjLi4zMDA0MTc0IDEwMDY0NAotLS0gYS9NaXNjL1NwZWNpYWxCdWlsZHMudHh0CisrKyBiL01pc2MvU3BlY2lhbEJ1aWxkcy50eHQKQEAgLTEzLDEyICsxMywxNCBAQAogLS0tLS0tLS0tLS0tCiAKIFR1cm4gb24gYWdncmVnYXRlIHJlZmVyZW5jZSBjb3VudGluZy4gIFRoaXMgYXJyYW5nZXMgdGhhdCBleHRlcm4gX1B5X1JlZlRvdGFsCi1ob2xkIGEgY291bnQgb2YgYWxsIHJlZmVyZW5jZXMsIHRoZSBzdW0gb2Ygb2JfcmVmY250IGFjcm9zcyBhbGwgb2JqZWN0cy4gIEluIGEKLWRlYnVnLW1vZGUgYnVpbGQsIHRoaXMgaXMgd2hlcmUgdGhlICI4Mjg4IiBjb21lcyBmcm9tIGluCitob2xkIGEgY291bnQgb2YgYWxsIHJlZmVyZW5jZXMsIHRoZSBzdW0gb2Ygb2JfcmVmY250IGFjcm9zcyBhbGwgb2JqZWN0cy4KK1Bhc3NpbmcgYGAtWCBzaG93cmVmY291bnRgYCBvbiB0aGUgY29tbWFuZCBsaW5lIGNhdXNlcyB0aGUgaW50ZXJhY3RpdmUKK2ludGVycHJldGVyIHRvIHByaW50IHRoZSByZWZlcmVuY2UgY291bnQgdG90YWwgYXMgd2VsbCB0aGUgbnVtYmVyIG9mIG1lbW9yeQorYmxvY2tzIGFsbG9jYXRlZCBhZnRlciBlYWNoIHN0YXRlbWVudDoKIAogICAgID4+PiAyMwogICAgIDIzCi0gICAgWzgyODggcmVmc10KKyAgICBbODI4OCByZWZzLCAxNDMzMiBibG9ja3NdCiAgICAgPj4+CiAKIE5vdGUgdGhhdCBpZiB0aGlzIGNvdW50IGluY3JlYXNlcyB3aGVuIHlvdSdyZSBub3Qgc3RvcmluZyBhd2F5IG5ldyBvYmplY3RzLApAQCAtMTA1LDcgKzEwNyw5IEBACiBwWy0yKlM6LVNdCiAgICAgTnVtYmVyIG9mIGJ5dGVzIG9yaWdpbmFsbHkgYXNrZWQgZm9yLiAgVGhpcyBpcyBhIHNpemVfdCwgYmlnLWVuZGlhbiAoZWFzaWVyCiAgICAgdG8gcmVhZCBpbiBhIG1lbW9yeSBkdW1wKS4KLXBbLVM6MF0KK3BbLVNdCisgICAgQVBJIElELiAgU2VlIFBFUCA0NDUuICBUaGlzIGlzIGEgY2hhcmFjdGVyLCBidXQgc2VlbXMgdW5kb2N1bWVudGVkLgorcFstUysxOjBdCiAgICAgQ29waWVzIG9mIEZPUkJJRERFTkJZVEUuICBVc2VkIHRvIGNhdGNoIHVuZGVyLSB3cml0ZXMgYW5kIHJlYWRzLgogcFswOk5dCiAgICAgVGhlIHJlcXVlc3RlZCBtZW1vcnksIGZpbGxlZCB3aXRoIGNvcGllcyBvZiBDTEVBTkJZVEUsIHVzZWQgdG8gY2F0Y2gKQEAgLTIxMiwxMiArMjE2LDExIEBACiAKIENvbXBpbGUgaW4gc3VwcG9ydCBmb3IgTG93IExldmVsIFRSQUNFLWluZyBvZiB0aGUgbWFpbiBpbnRlcnByZXRlciBsb29wLgogCi1XaGVuIHRoaXMgcHJlcHJvY2Vzc29yIHN5bWJvbCBpcyBkZWZpbmVkLCBiZWZvcmUgUHlFdmFsX0V2YWxGcmFtZSAoZXZhbF9mcmFtZSBpbgotMi4zIGFuZCAyLjIsIGV2YWxfY29kZTIgYmVmb3JlIHRoYXQpIGV4ZWN1dGVzIGEgZnJhbWUncyBjb2RlIGl0IGNoZWNrcyB0aGUKLWZyYW1lJ3MgZ2xvYmFsIG5hbWVzcGFjZSBmb3IgYSB2YXJpYWJsZSAiX19sbHRyYWNlX18iLiAgSWYgc3VjaCBhIHZhcmlhYmxlIGlzCi1mb3VuZCwgbW91bmRzIG9mIGluZm9ybWF0aW9uIGFib3V0IHdoYXQgdGhlIGludGVycHJldGVyIGlzIGRvaW5nIGFyZSBzcHJheWVkIHRvCi1zdGRvdXQsIHN1Y2ggYXMgZXZlcnkgb3Bjb2RlIGFuZCBvcGNvZGUgYXJndW1lbnQgYW5kIHZhbHVlcyBwdXNoZWQgb250byBhbmQKLXBvcHBlZCBvZmYgdGhlIHZhbHVlIHN0YWNrLgorV2hlbiB0aGlzIHByZXByb2Nlc3NvciBzeW1ib2wgaXMgZGVmaW5lZCwgYmVmb3JlIFB5RXZhbF9FdmFsRnJhbWUgZXhlY3V0ZXMgYQorZnJhbWUncyBjb2RlIGl0IGNoZWNrcyB0aGUgZnJhbWUncyBnbG9iYWwgbmFtZXNwYWNlIGZvciBhIHZhcmlhYmxlCisiX19sbHRyYWNlX18iLiAgSWYgc3VjaCBhIHZhcmlhYmxlIGlzIGZvdW5kLCBtb3VuZHMgb2YgaW5mb3JtYXRpb24gYWJvdXQgd2hhdAordGhlIGludGVycHJldGVyIGlzIGRvaW5nIGFyZSBzcHJheWVkIHRvIHN0ZG91dCwgc3VjaCBhcyBldmVyeSBvcGNvZGUgYW5kIG9wY29kZQorYXJndW1lbnQgYW5kIHZhbHVlcyBwdXNoZWQgb250byBhbmQgcG9wcGVkIG9mZiB0aGUgdmFsdWUgc3RhY2suCiAKIE5vdCB1c2VmdWwgdmVyeSBvZnRlbiwgYnV0IHZlcnkgdXNlZnVsIHdoZW4gbmVlZGVkLgogCmRpZmYgLS1naXQgYS9NaXNjL1RleHRNYXRlL1B5dGhvbi1EZXYudG1idW5kbGUvQ29tbWFuZHMvMiB0byAzIC0gTW9kdWxlIERlbGV0aW9uLnRtQ29tbWFuZCBiL01pc2MvVGV4dE1hdGUvUHl0aG9uLURldi50bWJ1bmRsZS9Db21tYW5kcy8yIHRvIDMgLSBNb2R1bGUgRGVsZXRpb24udG1Db21tYW5kCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzY2ZhZGE4Li4wMDAwMDAwCi0tLSBhL01pc2MvVGV4dE1hdGUvUHl0aG9uLURldi50bWJ1bmRsZS9Db21tYW5kcy8yIHRvIDMgLSBNb2R1bGUgRGVsZXRpb24udG1Db21tYW5kCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRE9DVFlQRSBwbGlzdCBQVUJMSUMgIi0vL0FwcGxlLy9EVEQgUExJU1QgMS4wLy9FTiIgImh0dHA6Ly93d3cuYXBwbGUuY29tL0RURHMvUHJvcGVydHlMaXN0LTEuMC5kdGQiPgotPHBsaXN0IHZlcnNpb249IjEuMCI+Ci08ZGljdD4KLQk8a2V5PmJlZm9yZVJ1bm5pbmdDb21tYW5kPC9rZXk+Ci0JPHN0cmluZz5ub3A8L3N0cmluZz4KLQk8a2V5PmNvbW1hbmQ8L2tleT4KLQk8c3RyaW5nPiMhL3Vzci9iaW4vcHl0aG9uCi0iIiJHZW5lcmF0ZSBjb2RlIHRvIHdhcm4gYWJvdXQgYSBtb2R1bGUncyByZW1vdmFsIGluIFB5dGhvbiAzLjAuCi0KLVhYWCBOb3Qgc3VwcG9ydGVkOgotLSBNb2R1bGUncyBpbiBhIHBhY2thZ2UgZG8gbm90IGhhdmUgdGhlaXIgZnVsbCBuYW1lIGdlbmVyYXRlZC4KLS0gUGFja2FnZSdzIF9faW5pdF9fIG1vZHVsZTsgc2hvdWxkIGRldGVjdCBhbmQgdXNlIHRoZSBwYWNrYWdlJ3MgbmFtZSBpbnN0ZWFkLgotCi0iIiIKLXB5X3RlbXBsYXRlID0gIiIiZnJvbSB3YXJuaW5ncyBpbXBvcnQgd2FybnB5M2sKLXdhcm5weTNrKCJ0aGUgJHsxOiVzfSBtb2R1bGUgaGFzIGJlZW4gcmVtb3ZlZCBpbiBQeXRob24gMy4wIiwgc3RhY2tsZXZlbD0yKQotZGVsIHdhcm5weTNrJDAiIiIKLQotY190ZW1wbGF0ZSA9ICIiIgotaWYgKFB5RXJyX1dhcm5QeTNrKCJ0aGUgJHsxOiVzfSBtb2R1bGUgaGFzIGJlZW4gcmVtb3ZlZCBpbiAiCi0gICAgICAgICAgICAgICAgICAgIlB5dGhvbiAzLjAiLCAyKSAmbHQ7IDApCi0gICAgcmV0dXJuOyQwIiIiCi0KLQotaW1wb3J0IGltcAotaW1wb3J0IG9zCi0KLWZpbGVfbmFtZSA9IG9zLnBhdGguc3BsaXQob3MuZW52aXJvblsnVE1fRklMRVBBVEgnXSlbMV0KLQotcHlfc3VmZml4ZXMgPSByZXZlcnNlZChzb3J0ZWQoKHN1ZmZpeFswXSBmb3Igc3VmZml4IGluIGltcC5nZXRfc3VmZml4ZXMoKSBpZiBzdWZmaXhbMl0gPT0gaW1wLlBZX1NPVVJDRSksIGtleT1sZW4pKQotY19zdWZmaXhlcyA9IHJldmVyc2VkKHNvcnRlZCgob3MucGF0aC5zcGxpdGV4dChzdWZmaXhbMF0pWzBdICsgJy5jJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Igc3VmZml4IGluIGltcC5nZXRfc3VmZml4ZXMoKSBpZiBzdWZmaXhbMl0gPT0gaW1wLkNfRVhURU5TSU9OKSwga2V5PWxlbikpCi0KLXBhaXJpbmdzID0gKChweV9zdWZmaXhlcywgcHlfdGVtcGxhdGUpLCAoY19zdWZmaXhlcywgY190ZW1wbGF0ZSkpCi0KLWRlZiBjcmVhdGVfdGVtcGxhdGUoc3VmZml4ZXMsIHRlbXBsYXRlKToKLSAgICBmb3Igc3VmZml4IGluIHN1ZmZpeGVzOgotICAgICAgICBpZiBub3QgZmlsZV9uYW1lLmVuZHN3aXRoKHN1ZmZpeCk6Ci0gICAgICAgICAgICBjb250aW51ZQotICAgICAgICBtb2R1bGVfbmFtZSA9IGZpbGVfbmFtZVs6LWxlbihzdWZmaXgpXQotICAgICAgICByZXR1cm4gdGVtcGxhdGUgJSBtb2R1bGVfbmFtZQotICAgIGVsc2U6Ci0gICAgICAgIHJldHVybiBOb25lCi0KLWZvciB0ZW1wbGF0ZSBpbiAoY3JlYXRlX3RlbXBsYXRlKCpwYWlyKSBmb3IgcGFpciBpbiBwYWlyaW5ncyk6Ci0gICAgaWYgbm90IHRlbXBsYXRlOgotICAgICAgICBjb250aW51ZQotICAgIHByaW50IHRlbXBsYXRlLAotICAgIGJyZWFrCi1lbHNlOgotICAgIHByaW50ICdYWFggQ291bGQgbm90IGdlbmVyYXRlIGNvZGUuJzwvc3RyaW5nPgotCTxrZXk+aW5wdXQ8L2tleT4KLQk8c3RyaW5nPm5vbmU8L3N0cmluZz4KLQk8a2V5Pm5hbWU8L2tleT4KLQk8c3RyaW5nPjIgdG8gMyAtIE1vZHVsZSBEZWxldGlvbjwvc3RyaW5nPgotCTxrZXk+b3V0cHV0PC9rZXk+Ci0JPHN0cmluZz5pbnNlcnRBc1NuaXBwZXQ8L3N0cmluZz4KLQk8a2V5PnRhYlRyaWdnZXI8L2tleT4KLQk8c3RyaW5nPjJ0bzNtb2RkZWw8L3N0cmluZz4KLQk8a2V5PnV1aWQ8L2tleT4KLQk8c3RyaW5nPjk1MTlDMjJCLTZBQjgtNDFBMS05NEY2LTA3OUUwQjQ1QzE0Nzwvc3RyaW5nPgotPC9kaWN0PgotPC9wbGlzdD4KZGlmZiAtLWdpdCBhL01pc2MvVGV4dE1hdGUvUHl0aG9uLURldi50bWJ1bmRsZS9Db21tYW5kcy9CdWlsZCBEb2NzLnRtQ29tbWFuZCBiL01pc2MvVGV4dE1hdGUvUHl0aG9uLURldi50bWJ1bmRsZS9Db21tYW5kcy9CdWlsZCBEb2NzLnRtQ29tbWFuZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2U0ZDUzYi4uMDAwMDAwMAotLS0gYS9NaXNjL1RleHRNYXRlL1B5dGhvbi1EZXYudG1idW5kbGUvQ29tbWFuZHMvQnVpbGQgRG9jcy50bUNvbW1hbmQKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCFET0NUWVBFIHBsaXN0IFBVQkxJQyAiLS8vQXBwbGUvL0RURCBQTElTVCAxLjAvL0VOIiAiaHR0cDovL3d3dy5hcHBsZS5jb20vRFREcy9Qcm9wZXJ0eUxpc3QtMS4wLmR0ZCI+Ci08cGxpc3QgdmVyc2lvbj0iMS4wIj4KLTxkaWN0PgotCTxrZXk+YmVmb3JlUnVubmluZ0NvbW1hbmQ8L2tleT4KLQk8c3RyaW5nPm5vcDwvc3RyaW5nPgotCTxrZXk+Y29tbWFuZDwva2V5PgotCTxzdHJpbmc+IyBYWFggTGVvcGFyZC1zcGVjaWZpYyB1bmxlc3MgaGF2ZSBlYXN5IHdheSB0byBzcGVjaWZpYyBhbHRlcm5hdGl2ZSBQeXRob24gZXhlY3V0YWJsZS4KLQotY2QgJFRNX1BST0pFQ1RfRElSRUNUT1JZL0RvYwotbWFrZSBodG1sIDImZ3Q7JmFtcDsxIHwgcHJlCi0KLXJlc2Nhbl9wcm9qZWN0PC9zdHJpbmc+Ci0JPGtleT5pbnB1dDwva2V5PgotCTxzdHJpbmc+bm9uZTwvc3RyaW5nPgotCTxrZXk+bmFtZTwva2V5PgotCTxzdHJpbmc+QnVpbGQgRG9jczwvc3RyaW5nPgotCTxrZXk+b3V0cHV0PC9rZXk+Ci0JPHN0cmluZz5zaG93QXNIVE1MPC9zdHJpbmc+Ci0JPGtleT51dWlkPC9rZXk+Ci0JPHN0cmluZz42RUYxNTFFNS03MTQ5LTRGODItODc5Ni0wQ0M0MEZFNTg5RkE8L3N0cmluZz4KLTwvZGljdD4KLTwvcGxpc3Q+CmRpZmYgLS1naXQgYS9NaXNjL1RleHRNYXRlL1B5dGhvbi1EZXYudG1idW5kbGUvQ29tbWFuZHMvQnVpbGQudG1Db21tYW5kIGIvTWlzYy9UZXh0TWF0ZS9QeXRob24tRGV2LnRtYnVuZGxlL0NvbW1hbmRzL0J1aWxkLnRtQ29tbWFuZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmZmZGE1Yy4uMDAwMDAwMAotLS0gYS9NaXNjL1RleHRNYXRlL1B5dGhvbi1EZXYudG1idW5kbGUvQ29tbWFuZHMvQnVpbGQudG1Db21tYW5kCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRE9DVFlQRSBwbGlzdCBQVUJMSUMgIi0vL0FwcGxlLy9EVEQgUExJU1QgMS4wLy9FTiIgImh0dHA6Ly93d3cuYXBwbGUuY29tL0RURHMvUHJvcGVydHlMaXN0LTEuMC5kdGQiPgotPHBsaXN0IHZlcnNpb249IjEuMCI+Ci08ZGljdD4KLQk8a2V5PmJlZm9yZVJ1bm5pbmdDb21tYW5kPC9rZXk+Ci0JPHN0cmluZz5ub3A8L3N0cmluZz4KLQk8a2V5PmNvbW1hbmQ8L2tleT4KLQk8c3RyaW5nPiMgWFhYIFRPRE8KLSMgLSBIaWdobGlnaHQgYW55IGNvbXBpbGVyIHdhcm5pbmdzIGZvciBQeXRob24gY29kZS4KLSMgLSBQb2ludCBvdXQgaWYgY29tcGlsZSBmYWlsZWQuCi0KLWNkICRUTV9QUk9KRUNUX0RJUkVDVE9SWQotbWFrZSAtcyAtajIgMiZndDsmYW1wOzEgfCBwcmUKLQotcmVzY2FuX3Byb2plY3Q8L3N0cmluZz4KLQk8a2V5PmlucHV0PC9rZXk+Ci0JPHN0cmluZz5ub25lPC9zdHJpbmc+Ci0JPGtleT5uYW1lPC9rZXk+Ci0JPHN0cmluZz5CdWlsZCBQeXRob248L3N0cmluZz4KLQk8a2V5Pm91dHB1dDwva2V5PgotCTxzdHJpbmc+c2hvd0FzSFRNTDwvc3RyaW5nPgotCTxrZXk+dXVpZDwva2V5PgotCTxzdHJpbmc+QjU0NUJCMUItQThFMS00MjZDLUI1MEEtNDI2RTc4Qjk2RDM4PC9zdHJpbmc+Ci08L2RpY3Q+Ci08L3BsaXN0PgpkaWZmIC0tZ2l0IGEvTWlzYy9UZXh0TWF0ZS9QeXRob24tRGV2LnRtYnVuZGxlL0NvbW1hbmRzL0dvIHRvIElzc3VlLnRtQ29tbWFuZCBiL01pc2MvVGV4dE1hdGUvUHl0aG9uLURldi50bWJ1bmRsZS9Db21tYW5kcy9HbyB0byBJc3N1ZS50bUNvbW1hbmQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1ZDMwYmMuLjAwMDAwMDAKLS0tIGEvTWlzYy9UZXh0TWF0ZS9QeXRob24tRGV2LnRtYnVuZGxlL0NvbW1hbmRzL0dvIHRvIElzc3VlLnRtQ29tbWFuZAorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IURPQ1RZUEUgcGxpc3QgUFVCTElDICItLy9BcHBsZS8vRFREIFBMSVNUIDEuMC8vRU4iICJodHRwOi8vd3d3LmFwcGxlLmNvbS9EVERzL1Byb3BlcnR5TGlzdC0xLjAuZHRkIj4KLTxwbGlzdCB2ZXJzaW9uPSIxLjAiPgotPGRpY3Q+Ci0JPGtleT5iZWZvcmVSdW5uaW5nQ29tbWFuZDwva2V5PgotCTxzdHJpbmc+bm9wPC9zdHJpbmc+Ci0JPGtleT5jb21tYW5kPC9rZXk+Ci0JPHN0cmluZz5vcGVuICJodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlJChjYXQpIjwvc3RyaW5nPgotCTxrZXk+ZmFsbGJhY2tJbnB1dDwva2V5PgotCTxzdHJpbmc+d29yZDwvc3RyaW5nPgotCTxrZXk+aW5wdXQ8L2tleT4KLQk8c3RyaW5nPnNlbGVjdGlvbjwvc3RyaW5nPgotCTxrZXk+bmFtZTwva2V5PgotCTxzdHJpbmc+R28gdG8gSXNzdWU8L3N0cmluZz4KLQk8a2V5Pm91dHB1dDwva2V5PgotCTxzdHJpbmc+ZGlzY2FyZDwvc3RyaW5nPgotCTxrZXk+dXVpZDwva2V5PgotCTxzdHJpbmc+RkQyNUE4REMtMjJEQy00RUQ0LUIyMjItQjk0M0M4QTkxMTdEPC9zdHJpbmc+Ci08L2RpY3Q+Ci08L3BsaXN0PgpkaWZmIC0tZ2l0IGEvTWlzYy9UZXh0TWF0ZS9QeXRob24tRGV2LnRtYnVuZGxlL0NvbW1hbmRzL09wZW4gRG9jcy50bUNvbW1hbmQgYi9NaXNjL1RleHRNYXRlL1B5dGhvbi1EZXYudG1idW5kbGUvQ29tbWFuZHMvT3BlbiBEb2NzLnRtQ29tbWFuZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTAxYmU0My4uMDAwMDAwMAotLS0gYS9NaXNjL1RleHRNYXRlL1B5dGhvbi1EZXYudG1idW5kbGUvQ29tbWFuZHMvT3BlbiBEb2NzLnRtQ29tbWFuZAorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IURPQ1RZUEUgcGxpc3QgUFVCTElDICItLy9BcHBsZS8vRFREIFBMSVNUIDEuMC8vRU4iICJodHRwOi8vd3d3LmFwcGxlLmNvbS9EVERzL1Byb3BlcnR5TGlzdC0xLjAuZHRkIj4KLTxwbGlzdCB2ZXJzaW9uPSIxLjAiPgotPGRpY3Q+Ci0JPGtleT5iZWZvcmVSdW5uaW5nQ29tbWFuZDwva2V5PgotCTxzdHJpbmc+bm9wPC9zdHJpbmc+Ci0JPGtleT5jb21tYW5kPC9rZXk+Ci0JPHN0cmluZz4jIFNlYXJjaCBvcmRlcjoKLSMgIC0gQ3VycmVudCBwcm9qZWN0LgotIyAgLSBUTV9QWVRIT05ERVZfRE9DUy4KLSMgIC0gT25saW5lIGRvY3MgaW4gZGV2ZWxvcG1lbnQuCi0KLWh0bWxfaW5kZXg9JFRNX1BST0pFQ1RfRElSRUNUT1JZL0RvYy9idWlsZC9odG1sL2luZGV4Lmh0bWwKLWlmIFtbIC1mICRodG1sX2luZGV4IF1dOyB0aGVuCi0Jb3BlbiAkaHRtbF9pbmRleAotZWxpZiBbWyAkVE1fUFlUSE9OREVWX0RPQ1MgXV07IHRoZW4KLQlvcGVuICRUTV9QWVRIT05ERVZfRE9DUwotZWxzZQotCW9wZW4gaHR0cDovL2RvY3MucHl0aG9uLm9yZy9kZXYvCi1maTwvc3RyaW5nPgotCTxrZXk+aW5wdXQ8L2tleT4KLQk8c3RyaW5nPm5vbmU8L3N0cmluZz4KLQk8a2V5PmtleUVxdWl2YWxlbnQ8L2tleT4KLQk8c3RyaW5nPkBIPC9zdHJpbmc+Ci0JPGtleT5uYW1lPC9rZXk+Ci0JPHN0cmluZz5PcGVuIERvY3M8L3N0cmluZz4KLQk8a2V5Pm91dHB1dDwva2V5PgotCTxzdHJpbmc+ZGlzY2FyZDwvc3RyaW5nPgotCTxrZXk+dXVpZDwva2V5PgotCTxzdHJpbmc+QkYzMzZGRkYtRTE0RC00QkYxLUExNTYtNzFDRjc2OEFDMDM0PC9zdHJpbmc+Ci08L2RpY3Q+Ci08L3BsaXN0PgpkaWZmIC0tZ2l0IGEvTWlzYy9UZXh0TWF0ZS9QeXRob24tRGV2LnRtYnVuZGxlL0NvbW1hbmRzL09wZW4gUEVQLnRtQ29tbWFuZCBiL01pc2MvVGV4dE1hdGUvUHl0aG9uLURldi50bWJ1bmRsZS9Db21tYW5kcy9PcGVuIFBFUC50bUNvbW1hbmQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmNTUzM2EuLjAwMDAwMDAKLS0tIGEvTWlzYy9UZXh0TWF0ZS9QeXRob24tRGV2LnRtYnVuZGxlL0NvbW1hbmRzL09wZW4gUEVQLnRtQ29tbWFuZAorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IURPQ1RZUEUgcGxpc3QgUFVCTElDICItLy9BcHBsZS8vRFREIFBMSVNUIDEuMC8vRU4iICJodHRwOi8vd3d3LmFwcGxlLmNvbS9EVERzL1Byb3BlcnR5TGlzdC0xLjAuZHRkIj4KLTxwbGlzdCB2ZXJzaW9uPSIxLjAiPgotPGRpY3Q+Ci0JPGtleT5iZWZvcmVSdW5uaW5nQ29tbWFuZDwva2V5PgotCTxzdHJpbmc+bm9wPC9zdHJpbmc+Ci0JPGtleT5jb21tYW5kPC9rZXk+Ci0JPHN0cmluZz4jIFhYWCBXb3J0aCBzdXBwb3J0aW5nIHVzaW5nIGEgbG9jYWwgY29weT8KLQotIyBEdW1iIGx1Y2sgdGhhdCBhbiB1bnJlY29nbml6ZWQgbnVtYmVyIGxlYWRzIHRvIGEgMCBiZWluZyB1c2VkLgotb3BlbiBgcHJpbnRmICJodHRwOi8vd3d3LnB5dGhvbi5vcmcvZGV2L3BlcHMvcGVwLSUwNGQiICQoY2F0KWA8L3N0cmluZz4KLQk8a2V5PmZhbGxiYWNrSW5wdXQ8L2tleT4KLQk8c3RyaW5nPndvcmQ8L3N0cmluZz4KLQk8a2V5PmlucHV0PC9rZXk+Ci0JPHN0cmluZz5zZWxlY3Rpb248L3N0cmluZz4KLQk8a2V5Pm5hbWU8L2tleT4KLQk8c3RyaW5nPk9wZW4gUEVQPC9zdHJpbmc+Ci0JPGtleT5vdXRwdXQ8L2tleT4KLQk8c3RyaW5nPmRpc2NhcmQ8L3N0cmluZz4KLQk8a2V5PnV1aWQ8L2tleT4KLQk8c3RyaW5nPkVEQkIwMzdGLUFBRTMtNDUxMi04NjNGLUQ5QUE4MkM5RTUxRTwvc3RyaW5nPgotPC9kaWN0PgotPC9wbGlzdD4KZGlmZiAtLWdpdCAiYS9NaXNjL1RleHRNYXRlL1B5dGhvbi1EZXYudG1idW5kbGUvU25pcHBldHMvMiB0byAzIC0gTW9kdWxlIERlbGV0aW9uIFwwNTBkb2NzXDA1MS50bVNuaXBwZXQiICJiL01pc2MvVGV4dE1hdGUvUHl0aG9uLURldi50bWJ1bmRsZS9TbmlwcGV0cy8yIHRvIDMgLSBNb2R1bGUgRGVsZXRpb24gXDA1MGRvY3NcMDUxLnRtU25pcHBldCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkZThiYWUuLjAwMDAwMDAKLS0tICJhL01pc2MvVGV4dE1hdGUvUHl0aG9uLURldi50bWJ1bmRsZS9TbmlwcGV0cy8yIHRvIDMgLSBNb2R1bGUgRGVsZXRpb24gXDA1MGRvY3NcMDUxLnRtU25pcHBldCIKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCFET0NUWVBFIHBsaXN0IFBVQkxJQyAiLS8vQXBwbGUvL0RURCBQTElTVCAxLjAvL0VOIiAiaHR0cDovL3d3dy5hcHBsZS5jb20vRFREcy9Qcm9wZXJ0eUxpc3QtMS4wLmR0ZCI+Ci08cGxpc3QgdmVyc2lvbj0iMS4wIj4KLTxkaWN0PgotCTxrZXk+Y29udGVudDwva2V5PgotCTxzdHJpbmc+Li4gZGVwcmVjYXRlZDo6IDIuNgotICAgVGhlIDptb2Q6XGAkezF9XGAgbW9kdWxlIGhhcyBiZWVuIGRlcHJlY2F0ZWQgZm9yIHJlbW92YWwgaW4gUHl0aG9uIDMuMC4KLSR7MH08L3N0cmluZz4KLQk8a2V5Pm5hbWU8L2tleT4KLQk8c3RyaW5nPjIgdG8gMyAtIE1vZHVsZSBEZWxldGlvbiAoZG9jcyk8L3N0cmluZz4KLQk8a2V5PnRhYlRyaWdnZXI8L2tleT4KLQk8c3RyaW5nPjJ0bzNkb2NkZWw8L3N0cmluZz4KLQk8a2V5PnV1aWQ8L2tleT4KLQk8c3RyaW5nPjA1Njg0MTBELUVBRjEtNEFGMy1CNkRFLThBRjEzM0E5MTgyMTwvc3RyaW5nPgotPC9kaWN0PgotPC9wbGlzdD4KZGlmZiAtLWdpdCBhL01pc2MvVGV4dE1hdGUvUHl0aG9uLURldi50bWJ1bmRsZS9pbmZvLnBsaXN0IGIvTWlzYy9UZXh0TWF0ZS9QeXRob24tRGV2LnRtYnVuZGxlL2luZm8ucGxpc3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1MTBkNWQuLjAwMDAwMDAKLS0tIGEvTWlzYy9UZXh0TWF0ZS9QeXRob24tRGV2LnRtYnVuZGxlL2luZm8ucGxpc3QKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCFET0NUWVBFIHBsaXN0IFBVQkxJQyAiLS8vQXBwbGUvL0RURCBQTElTVCAxLjAvL0VOIiAiaHR0cDovL3d3dy5hcHBsZS5jb20vRFREcy9Qcm9wZXJ0eUxpc3QtMS4wLmR0ZCI+Ci08cGxpc3QgdmVyc2lvbj0iMS4wIj4KLTxkaWN0PgotCTxrZXk+bWFpbk1lbnU8L2tleT4KLQk8ZGljdD4KLQkJPGtleT5pdGVtczwva2V5PgotCQk8YXJyYXk+Ci0JCQk8c3RyaW5nPjk1MTlDMjJCLTZBQjgtNDFBMS05NEY2LTA3OUUwQjQ1QzE0Nzwvc3RyaW5nPgotCQkJPHN0cmluZz4wNTY4NDEwRC1FQUYxLTRBRjMtQjZERS04QUYxMzNBOTE4MjE8L3N0cmluZz4KLQkJCTxzdHJpbmc+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9zdHJpbmc+Ci0JCQk8c3RyaW5nPkI1NDVCQjFCLUE4RTEtNDI2Qy1CNTBBLTQyNkU3OEI5NkQzODwvc3RyaW5nPgotCQkJPHN0cmluZz42RUYxNTFFNS03MTQ5LTRGODItODc5Ni0wQ0M0MEZFNTg5RkE8L3N0cmluZz4KLQkJCTxzdHJpbmc+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9zdHJpbmc+Ci0JCQk8c3RyaW5nPkJGMzM2RkZGLUUxNEQtNEJGMS1BMTU2LTcxQ0Y3NjhBQzAzNDwvc3RyaW5nPgotCQkJPHN0cmluZz5GRDI1QThEQy0yMkRDLTRFRDQtQjIyMi1COTQzQzhBOTExN0Q8L3N0cmluZz4KLQkJCTxzdHJpbmc+RURCQjAzN0YtQUFFMy00NTEyLTg2M0YtRDlBQTgyQzlFNTFFPC9zdHJpbmc+Ci0JCTwvYXJyYXk+Ci0JCTxrZXk+c3VibWVudXM8L2tleT4KLQkJPGRpY3QvPgotCTwvZGljdD4KLQk8a2V5Pm5hbWU8L2tleT4KLQk8c3RyaW5nPlB5dGhvbi1EZXY8L3N0cmluZz4KLQk8a2V5Pm9yZGVyaW5nPC9rZXk+Ci0JPGFycmF5PgotCQk8c3RyaW5nPjk1MTlDMjJCLTZBQjgtNDFBMS05NEY2LTA3OUUwQjQ1QzE0Nzwvc3RyaW5nPgotCQk8c3RyaW5nPjA1Njg0MTBELUVBRjEtNEFGMy1CNkRFLThBRjEzM0E5MTgyMTwvc3RyaW5nPgotCQk8c3RyaW5nPkI1NDVCQjFCLUE4RTEtNDI2Qy1CNTBBLTQyNkU3OEI5NkQzODwvc3RyaW5nPgotCQk8c3RyaW5nPjZFRjE1MUU1LTcxNDktNEY4Mi04Nzk2LTBDQzQwRkU1ODlGQTwvc3RyaW5nPgotCQk8c3RyaW5nPkZEMjVBOERDLTIyREMtNEVENC1CMjIyLUI5NDNDOEE5MTE3RDwvc3RyaW5nPgotCQk8c3RyaW5nPkJGMzM2RkZGLUUxNEQtNEJGMS1BMTU2LTcxQ0Y3NjhBQzAzNDwvc3RyaW5nPgotCQk8c3RyaW5nPkVEQkIwMzdGLUFBRTMtNDUxMi04NjNGLUQ5QUE4MkM5RTUxRTwvc3RyaW5nPgotCTwvYXJyYXk+Ci0JPGtleT51dWlkPC9rZXk+Ci0JPHN0cmluZz5BOTMyRUNEMS1ENDNBLTRGNTctQjdGQi1BMUNFQzNCNjVEMjA8L3N0cmluZz4KLTwvZGljdD4KLTwvcGxpc3Q+CmRpZmYgLS1naXQgYS9NaXNjL1ZpbS9weXRob24udmltIGIvTWlzYy9WaW0vcHl0aG9uLnZpbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTFlZTdlYi4uMDAwMDAwMAotLS0gYS9NaXNjL1ZpbS9weXRob24udmltCisrKyAvZGV2L251bGwKQEAgLTEsMTQ4ICswLDAgQEAKLSIgQXV0by1nZW5lcmF0ZWQgVmltIHN5bnRheCBmaWxlIGZvciBQeXRob24gKHRydW5rOiByNjAzNzZNKS4KLSIKLSIgVG8gdXNlOiBjb3B5IG9yIHN5bWxpbmsgdG8gfi8udmltL3N5bnRheC9weXRob24udmltCi0KLQotaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKLSAgZmluaXNoCi1lbmRpZgotCi1pZiBleGlzdHMoInB5dGhvbl9oaWdobGlnaHRfYWxsIikKLSAgbGV0IHB5dGhvbl9oaWdobGlnaHRfbnVtYmVycyA9IDEKLSAgbGV0IHB5dGhvbl9oaWdobGlnaHRfYnVpbHRpbnMgPSAxCi0gIGxldCBweXRob25faGlnaGxpZ2h0X2V4Y2VwdGlvbnMgPSAxCi0gIGxldCBweXRob25faGlnaGxpZ2h0X3NwYWNlX2Vycm9ycyA9IDEKLWVuZGlmCi0KLXN5biBrZXl3b3JkIHB5dGhvblN0YXRlbWVudCAgICBhcyBhc3NlcnQgYnJlYWsgY29udGludWUgZGVsIGV4Y2VwdCBleGVjIGZpbmFsbHkKLXN5biBrZXl3b3JkIHB5dGhvblN0YXRlbWVudCAgICBnbG9iYWwgbGFtYmRhIHBhc3MgcHJpbnQgcmFpc2UgcmV0dXJuIHRyeSB3aXRoCi1zeW4ga2V5d29yZCBweXRob25TdGF0ZW1lbnQgICAgeWllbGQKLQotc3luIGtleXdvcmQgcHl0aG9uU3RhdGVtZW50ICAgIGRlZiBjbGFzcyBuZXh0Z3JvdXA9cHl0aG9uRnVuY3Rpb24gc2tpcHdoaXRlCi0KLXN5biBtYXRjaCBweXRob25GdW5jdGlvbiAgICAiW2EtekEtWl9dW2EtekEtWjAtOV9dKiIgY29udGFpbmVkCi0KLXN5biBrZXl3b3JkIHB5dGhvblJlcGVhdCAgICBmb3Igd2hpbGUKLQotc3luIGtleXdvcmQgcHl0aG9uQ29uZGl0aW9uYWwgICAgaWYgZWxpZiBlbHNlCi0KLXN5biBrZXl3b3JkIHB5dGhvbk9wZXJhdG9yICAgIGFuZCBpbiBpcyBub3Qgb3IKLQotc3luIGtleXdvcmQgcHl0aG9uUHJlQ29uZGl0ICAgIGltcG9ydCBmcm9tCi0KLXN5biBtYXRjaCBweXRob25Db21tZW50ICAgICIjLiokIiBjb250YWlucz1weXRob25Ub2RvCi0KLXN5biBrZXl3b3JkIHB5dGhvblRvZG8gICAgVE9ETyBGSVhNRSBYWFggY29udGFpbmVkCi0KLXN5biByZWdpb24gcHl0aG9uU3RyaW5nICAgIG1hdGNoZ3JvdXA9Tm9ybWFsIHN0YXJ0PStbdVVdXD0nKyBlbmQ9KycrIHNraXA9K1xcXFxcfFxcJysgY29udGFpbnM9cHl0aG9uRXNjYXBlCi1zeW4gcmVnaW9uIHB5dGhvblN0cmluZyAgICBtYXRjaGdyb3VwPU5vcm1hbCBzdGFydD0rW3VVXVw9IisgZW5kPSsiKyBza2lwPStcXFxcXHxcXCIrIGNvbnRhaW5zPXB5dGhvbkVzY2FwZQotc3luIHJlZ2lvbiBweXRob25TdHJpbmcgICAgbWF0Y2hncm91cD1Ob3JtYWwgc3RhcnQ9K1t1VV1cPSIiIisgZW5kPSsiIiIrICBjb250YWlucz1weXRob25Fc2NhcGUKLXN5biByZWdpb24gcHl0aG9uU3RyaW5nICAgIG1hdGNoZ3JvdXA9Tm9ybWFsIHN0YXJ0PStbdVVdXD0nJycrIGVuZD0rJycnKyAgY29udGFpbnM9cHl0aG9uRXNjYXBlCi1zeW4gcmVnaW9uIHB5dGhvblN0cmluZyAgICBtYXRjaGdyb3VwPU5vcm1hbCBzdGFydD0rW3VVXVw9W3JSXScrIGVuZD0rJysgc2tpcD0rXFxcXFx8XFwnKyAKLXN5biByZWdpb24gcHl0aG9uU3RyaW5nICAgIG1hdGNoZ3JvdXA9Tm9ybWFsIHN0YXJ0PStbdVVdXD1bclJdIisgZW5kPSsiKyBza2lwPStcXFxcXHxcXCIrIAotc3luIHJlZ2lvbiBweXRob25TdHJpbmcgICAgbWF0Y2hncm91cD1Ob3JtYWwgc3RhcnQ9K1t1VV1cPVtyUl0iIiIrIGVuZD0rIiIiKyAgCi1zeW4gcmVnaW9uIHB5dGhvblN0cmluZyAgICBtYXRjaGdyb3VwPU5vcm1hbCBzdGFydD0rW3VVXVw9W3JSXScnJysgZW5kPSsnJycrICAKLQotc3luIG1hdGNoIHB5dGhvbkVzY2FwZSAgICArXFxbYWJmbnJ0dlwnIlxcXSsgY29udGFpbmVkCi1zeW4gbWF0Y2ggcHl0aG9uRXNjYXBlICAgICJcXFxvXHsxLDN9IiBjb250YWluZWQKLXN5biBtYXRjaCBweXRob25Fc2NhcGUgICAgIlxceFx4XHsyfSIgY29udGFpbmVkCi1zeW4gbWF0Y2ggcHl0aG9uRXNjYXBlICAgICJcKFxcdVx4XHs0fVx8XFxVXHhcezh9XCkiIGNvbnRhaW5lZAotCi1zeW4gbWF0Y2ggcHl0aG9uRXNjYXBlICAgICJcXCQiCi0KLQotaWYgZXhpc3RzKCJweXRob25faGlnaGxpZ2h0X251bWJlcnMiKQotICBzeW4gbWF0Y2ggcHl0aG9uTnVtYmVyICAgICJcPDB4XHhcK1tMbF1cPVw+IgotICBzeW4gbWF0Y2ggcHl0aG9uTnVtYmVyICAgICJcPFxkXCtbTGxqSl1cPVw+IgotICBzeW4gbWF0Y2ggcHl0aG9uTnVtYmVyICAgICJcLlxkXCtcKFtlRV1bKy1dXD1cZFwrXClcPVtqSl1cPVw+IgotICBzeW4gbWF0Y2ggcHl0aG9uTnVtYmVyICAgICJcPFxkXCtcLlwoW2VFXVsrLV1cPVxkXCtcKVw9W2pKXVw9XD4iCi0gIHN5biBtYXRjaCBweXRob25OdW1iZXIgICAgIlw8XGRcK1wuXGRcK1woW2VFXVsrLV1cPVxkXCtcKVw9W2pKXVw9XD4iCi0KLWVuZGlmCi0KLQotaWYgZXhpc3RzKCJweXRob25faGlnaGxpZ2h0X2J1aWx0aW5zIikKLSAgc3luIGtleXdvcmQgcHl0aG9uQnVpbHRpbiAgICBFbGxpcHNpcyBGYWxzZSBOb25lIE5vdEltcGxlbWVudGVkIFRydWUgX19kZWJ1Z19fCi0gIHN5biBrZXl3b3JkIHB5dGhvbkJ1aWx0aW4gICAgX19pbXBvcnRfXyBhYnMgYWxsIGFueSBib29sCi0gIHN5biBrZXl3b3JkIHB5dGhvbkJ1aWx0aW4gICAgYnVmZmVyIGNhbGxhYmxlIGNociBjbGFzc21ldGhvZCBjbXAKLSAgc3luIGtleXdvcmQgcHl0aG9uQnVpbHRpbiAgICBjb21wbGV4IGNvcHlyaWdodCBjcmVkaXRzIGRlbGF0dHIgZGljdAotICBzeW4ga2V5d29yZCBweXRob25CdWlsdGluICAgIGRpciBkaXZtb2QgZW51bWVyYXRlIGV2YWwgZXhlYyBleGl0Ci0gIHN5biBrZXl3b3JkIHB5dGhvbkJ1aWx0aW4gICAgZmlsdGVyIGZsb2F0IGZyb3plbnNldCBnZXRhdHRyIGdsb2JhbHMgaGFzYXR0cgotICBzeW4ga2V5d29yZCBweXRob25CdWlsdGluICAgIGhhc2ggaGVscCBoZXggaWQgaW50IGlzaW5zdGFuY2UKLSAgc3luIGtleXdvcmQgcHl0aG9uQnVpbHRpbiAgICBpc3N1YmNsYXNzIGl0ZXIgbGVuIGxpY2Vuc2UgbGlzdCBsb2NhbHMgbWFwCi0gIHN5biBrZXl3b3JkIHB5dGhvbkJ1aWx0aW4gICAgbWF4IG1pbiBvYmplY3Qgb2N0IG9wZW4gb3JkIHBvdyBwcm9wZXJ0eSBxdWl0Ci0gIHN5biBrZXl3b3JkIHB5dGhvbkJ1aWx0aW4gICAgcmFuZ2UgcmVsb2FkIHJlcHIgcmV2ZXJzZWQgcm91bmQKLSAgc3luIGtleXdvcmQgcHl0aG9uQnVpbHRpbiAgICBzZXQgc2V0YXR0ciBzbGljZSBzb3J0ZWQgc3RhdGljbWV0aG9kIHN0ciBzdW0KLSAgc3luIGtleXdvcmQgcHl0aG9uQnVpbHRpbiAgICBzdXBlciB0cnVuYyB0dXBsZSB0eXBlIHVuaWNvZGUgdmFycyAKLSAgc3luIGtleXdvcmQgcHl0aG9uQnVpbHRpbiAgICB6aXAKLQotZW5kaWYKLQotCi1pZiBleGlzdHMoInB5dGhvbl9oaWdobGlnaHRfZXhjZXB0aW9ucyIpCi0gIHN5biBrZXl3b3JkIHB5dGhvbkV4Y2VwdGlvbiAgICBBcml0aG1ldGljRXJyb3IgQXNzZXJ0aW9uRXJyb3IgQXR0cmlidXRlRXJyb3IKLSAgc3luIGtleXdvcmQgcHl0aG9uRXhjZXB0aW9uICAgIEJhc2VFeGNlcHRpb24gRGVwcmVjYXRpb25XYXJuaW5nIEVPRkVycm9yCi0gIHN5biBrZXl3b3JkIHB5dGhvbkV4Y2VwdGlvbiAgICBFbnZpcm9ubWVudEVycm9yIEV4Y2VwdGlvbiBGbG9hdGluZ1BvaW50RXJyb3IKLSAgc3luIGtleXdvcmQgcHl0aG9uRXhjZXB0aW9uICAgIEZ1dHVyZVdhcm5pbmcgR2VuZXJhdG9yRXhpdCBJT0Vycm9yIEltcG9ydEVycm9yCi0gIHN5biBrZXl3b3JkIHB5dGhvbkV4Y2VwdGlvbiAgICBJbXBvcnRXYXJuaW5nIEluZGVudGF0aW9uRXJyb3IgSW5kZXhFcnJvcgotICBzeW4ga2V5d29yZCBweXRob25FeGNlcHRpb24gICAgS2V5RXJyb3IgS2V5Ym9hcmRJbnRlcnJ1cHQgTG9va3VwRXJyb3IKLSAgc3luIGtleXdvcmQgcHl0aG9uRXhjZXB0aW9uICAgIE1lbW9yeUVycm9yIE5hbWVFcnJvciBOb3RJbXBsZW1lbnRlZEVycm9yCi0gIHN5biBrZXl3b3JkIHB5dGhvbkV4Y2VwdGlvbiAgICBPU0Vycm9yIE92ZXJmbG93RXJyb3IgUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZwotICBzeW4ga2V5d29yZCBweXRob25FeGNlcHRpb24gICAgUmVmZXJlbmNlRXJyb3IgUnVudGltZUVycm9yIFJ1bnRpbWVXYXJuaW5nCi0gIHN5biBrZXl3b3JkIHB5dGhvbkV4Y2VwdGlvbiAgICBTdG9wSXRlcmF0aW9uIFN5bnRheEVycm9yCi0gIHN5biBrZXl3b3JkIHB5dGhvbkV4Y2VwdGlvbiAgICBTeW50YXhXYXJuaW5nIFN5c3RlbUVycm9yIFN5c3RlbUV4aXQgVGFiRXJyb3IKLSAgc3luIGtleXdvcmQgcHl0aG9uRXhjZXB0aW9uICAgIFR5cGVFcnJvciBVbmJvdW5kTG9jYWxFcnJvciBVbmljb2RlRGVjb2RlRXJyb3IKLSAgc3luIGtleXdvcmQgcHl0aG9uRXhjZXB0aW9uICAgIFVuaWNvZGVFbmNvZGVFcnJvciBVbmljb2RlRXJyb3IKLSAgc3luIGtleXdvcmQgcHl0aG9uRXhjZXB0aW9uICAgIFVuaWNvZGVUcmFuc2xhdGVFcnJvciBVbmljb2RlV2FybmluZwotICBzeW4ga2V5d29yZCBweXRob25FeGNlcHRpb24gICAgVXNlcldhcm5pbmcgVmFsdWVFcnJvciBXYXJuaW5nCi0gIHN5biBrZXl3b3JkIHB5dGhvbkV4Y2VwdGlvbiAgICBaZXJvRGl2aXNpb25FcnJvcgotCi1lbmRpZgotCi0KLWlmIGV4aXN0cygicHl0aG9uX2hpZ2hsaWdodF9zcGFjZV9lcnJvcnMiKQotICBzeW4gbWF0Y2ggcHl0aG9uU3BhY2VFcnJvciAgICBkaXNwbGF5IGV4Y2x1ZGVubCAiXFNcc1wrJCJtcz1zKzEKLSAgc3luIG1hdGNoIHB5dGhvblNwYWNlRXJyb3IgICAgZGlzcGxheSAiIFwrXHQiCi0gIHN5biBtYXRjaCBweXRob25TcGFjZUVycm9yICAgIGRpc3BsYXkgIlx0XCsgIgotCi1lbmRpZgotCi0KLSAgaGkgZGVmIGxpbmsgcHl0aG9uU3RhdGVtZW50IFN0YXRlbWVudAotICBoaSBkZWYgbGluayBweXRob25TdGF0ZW1lbnQgU3RhdGVtZW50Ci0gIGhpIGRlZiBsaW5rIHB5dGhvbkZ1bmN0aW9uIEZ1bmN0aW9uCi0gIGhpIGRlZiBsaW5rIHB5dGhvblJlcGVhdCBSZXBlYXQKLSAgaGkgZGVmIGxpbmsgcHl0aG9uQ29uZGl0aW9uYWwgQ29uZGl0aW9uYWwKLSAgaGkgZGVmIGxpbmsgcHl0aG9uT3BlcmF0b3IgT3BlcmF0b3IKLSAgaGkgZGVmIGxpbmsgcHl0aG9uUHJlQ29uZGl0IFByZUNvbmRpdAotICBoaSBkZWYgbGluayBweXRob25Db21tZW50IENvbW1lbnQKLSAgaGkgZGVmIGxpbmsgcHl0aG9uVG9kbyBUb2RvCi0gIGhpIGRlZiBsaW5rIHB5dGhvblN0cmluZyBTdHJpbmcKLSAgaGkgZGVmIGxpbmsgcHl0aG9uRXNjYXBlIFNwZWNpYWwKLSAgaGkgZGVmIGxpbmsgcHl0aG9uRXNjYXBlIFNwZWNpYWwKLQotICBpZiBleGlzdHMoInB5dGhvbl9oaWdobGlnaHRfbnVtYmVycyIpCi0gICAgaGkgZGVmIGxpbmsgcHl0aG9uTnVtYmVyIE51bWJlcgotICBlbmRpZgotCi0gIGlmIGV4aXN0cygicHl0aG9uX2hpZ2hsaWdodF9idWlsdGlucyIpCi0gICAgaGkgZGVmIGxpbmsgcHl0aG9uQnVpbHRpbiBGdW5jdGlvbgotICBlbmRpZgotCi0gIGlmIGV4aXN0cygicHl0aG9uX2hpZ2hsaWdodF9leGNlcHRpb25zIikKLSAgICBoaSBkZWYgbGluayBweXRob25FeGNlcHRpb24gRXhjZXB0aW9uCi0gIGVuZGlmCi0KLSAgaWYgZXhpc3RzKCJweXRob25faGlnaGxpZ2h0X3NwYWNlX2Vycm9ycyIpCi0gICAgaGkgZGVmIGxpbmsgcHl0aG9uU3BhY2VFcnJvciBFcnJvcgotICBlbmRpZgotCi0KLSIgVW5jb21tZW50IHRoZSAnbWlubGluZXMnIHN0YXRlbWVudCBsaW5lIGFuZCBjb21tZW50IG91dCB0aGUgJ21heGxpbmVzJwotIiBzdGF0ZW1lbnQgbGluZTsgY2hhbmdlcyBiZWhhdmlvdXIgdG8gbG9vayBhdCBsZWFzdCAyMDAwIGxpbmVzIHByZXZpb3VzbHkgZm9yCi0iIHN5bnRheCBtYXRjaGVzIGluc3RlYWQgb2YgYXQgbW9zdCAyMDAgbGluZXMKLXN5biBzeW5jIG1hdGNoIHB5dGhvblN5bmMgZ3JvdXBoZXJlIE5PTkUgIik6JCIKLXN5biBzeW5jIG1heGxpbmVzPTIwMAotInN5biBzeW5jIG1pbmxpbmVzPTIwMDAKLQotbGV0IGI6Y3VycmVudF9zeW50YXggPSAicHl0aG9uIgpkaWZmIC0tZ2l0IGEvTWlzYy9WaW0vc3ludGF4X3Rlc3QucHkgYi9NaXNjL1ZpbS9zeW50YXhfdGVzdC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWQyMDg2Ni4uMDAwMDAwMAotLS0gYS9NaXNjL1ZpbS9zeW50YXhfdGVzdC5weQorKysgL2Rldi9udWxsCkBAIC0xLDYyICswLDAgQEAKLSIiIlRlc3QgZmlsZSBmb3Igc3ludGF4IGhpZ2hsaWdodGluZyBvZiBlZGl0b3JzLgotCi1NZWFudCB0byBjb3ZlciBhIHdpZGUgcmFuZ2Ugb2YgZGlmZmVyZW50IHR5cGVzIG9mIHN0YXRlbWVudHMgYW5kIGV4cHJlc3Npb25zLgotTm90IG5lY2Vzc2FyaWx5IHNlbnNpY2FsIG9yIGNvbXByZWhlbnNpdmUgKGFzc3VtZSB0aGF0IGlmIG9uZSBleGNlcHRpb24gaXMKLWhpZ2hsaWdodGVkIHRoYXQgYWxsIGFyZSwgZm9yIGluc3RhbmNlKS4KLQotRXh0cmFuZW91cyB0cmFpbGluZyB3aGl0ZXNwYWNlIGNhbid0IGJlIHRlc3RlZCBiZWNhdXNlIG9mIHN2biBwcmUtY29tbWl0IGhvb2sKLWNoZWNrcyBmb3Igc3VjaCB0aGluZ3MuCi0KLSIiIgotIyBDb21tZW50Ci0jIE9QVElPTkFMOiBYWFggY2F0Y2ggeW91ciBhdHRlbnRpb24KLQotIyBTdGF0ZW1lbnRzCi1mcm9tIF9fZnV0dXJlX18gaW1wb3J0IHdpdGhfc3RhdGVtZW50ICAjIEltcG9ydAotZnJvbSBzeXMgaW1wb3J0IHBhdGggYXMgdGhpbmcKLWFzc2VydCBUcnVlICMga2V5d29yZAotZGVmIGZvbygpOiAgIyBmdW5jdGlvbiBkZWZpbml0aW9uCi0gICAgcmV0dXJuIFtdCi1jbGFzcyBCYXIob2JqZWN0KTogICMgQ2xhc3MgZGVmaW5pdGlvbgotICAgIGRlZiBfX2VudGVyX18oc2VsZik6Ci0gICAgICAgIHBhc3MKLSAgICBkZWYgX19leGl0X18oc2VsZiwgKmFyZ3MpOgotICAgICAgICBwYXNzCi1mb28oKSAgIyBVTkNPTE9VUkVEOiBmdW5jdGlvbiBjYWxsCi13aGlsZSBGYWxzZTogICMgJ3doaWxlJwotICAgIGNvbnRpbnVlCi1mb3IgeCBpbiBmb28oKTogICMgJ2ZvcicKLSAgICBicmVhawotd2l0aCBCYXIoKSBhcyBzdHVmZjoKLSAgICBwYXNzCi1pZiBGYWxzZTogcGFzcyAgIyAnaWYnCi1lbGlmIEZhbHNlOiBwYXNzCi1lbHNlOiBwYXNzCi0KLSMgQ29uc3RhbnRzCi0nc2luZ2xlLXF1b3RlJywgdSd1bmljb2RlJyAjIFN0cmluZ3Mgb2YgYWxsIGtpbmRzOyBwcmVmaXhlcyBub3QgaGlnaGxpZ2h0ZWQKLSJkb3VibGUtcXVvdGUiCi0iIiJ0cmlwbGUgZG91YmxlLXF1b3RlIiIiCi0nJyd0cmlwbGUgc2luZ2xlLXF1b3RlJycnCi1yJ3JhdycKLXVyJ3VuaWNvZGUgcmF3JwotJ2VzY2FwZVxuJwotJ1wwNCcgICMgb2N0YWwKLSdceEZGJyAjIGhleAotJ1x1MTExMScgIyB1bmljb2RlIGNoYXJhY3RlcgotMSAgIyBJbnRlZ3JhbAotMUwKLTEuMCAgIyBGbG9hdAotLjEKLTErMmogICMgQ29tcGxleAotCi0jIEV4cHJlc3Npb25zCi0xIGFuZCAyIG9yIDMgICMgQm9vbGVhbiBvcGVyYXRvcnMKLTIgPCAzICAjIFVOQ09MT1VSRUQ6IGNvbXBhcmlzb24gb3BlcmF0b3JzCi1zcGFtID0gNDIgICMgVU5DT0xPVVJFRDogYXNzaWdubWVudAotMiArIDMgICMgVU5DT0xPVVJFRDogbnVtYmVyIG9wZXJhdG9ycwotW10gICMgVU5DT0xPVVJFRDogbGlzdAote30gICMgVU5DT0xPVVJFRDogZGljdAotKDEsKSAgIyBVTkNPTE9VUkVEOiB0dXBsZQotYWxsICAjIEJ1aWx0LWluIGZ1bmN0aW9ucwotR2VuZXJhdG9yRXhpdCAgIyBFeGNlcHRpb25zCmRpZmYgLS1naXQgYS9NaXNjL1ZpbS92aW1fc3ludGF4LnB5IGIvTWlzYy9WaW0vdmltX3N5bnRheC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTcyYjM1MC4uMDAwMDAwMAotLS0gYS9NaXNjL1ZpbS92aW1fc3ludGF4LnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjI5ICswLDAgQEAKLWZyb20gX19mdXR1cmVfXyBpbXBvcnQgd2l0aF9zdGF0ZW1lbnQKLSMgWFhYKG5ub3J3aXR6KTogd2hhdCB2ZXJzaW9ucyBvZiBweXRob24gaXMgdGhpcyBmaWxlIHN1cHBvc2VkIHRvIHdvcmsgd2l0aD8KLSMgSXQgdXNlcyB0aGUgb2xkIHByaW50IHN0YXRlbWVudCBub3QgaW4gcHkzay4KLQotaW1wb3J0IGtleXdvcmQKLWltcG9ydCBleGNlcHRpb25zCi1pbXBvcnQgYnVpbHRpbnMKLWZyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQotZnJvbSBzeXMgaW1wb3J0IHN1YnZlcnNpb24KLQotY29tbWVudF9oZWFkZXIgPSAnJyciIEF1dG8tZ2VuZXJhdGVkIFZpbSBzeW50YXggZmlsZSBmb3IgUHl0aG9uICglczogciVzKS4KLSIKLSIgVG8gdXNlOiBjb3B5IG9yIHN5bWxpbmsgdG8gfi8udmltL3N5bnRheC9weXRob24udmltJycnCi0KLXN0YXRlbWVudF9oZWFkZXIgPSAiIiIKLWlmIGV4aXN0cygiYjpjdXJyZW50X3N5bnRheCIpCi0gIGZpbmlzaAotZW5kaWYiIiIKLQotc3RhdGVtZW50X2Zvb3RlciA9ICcnJwotIiBVbmNvbW1lbnQgdGhlICdtaW5saW5lcycgc3RhdGVtZW50IGxpbmUgYW5kIGNvbW1lbnQgb3V0IHRoZSAnbWF4bGluZXMnCi0iIHN0YXRlbWVudCBsaW5lOyBjaGFuZ2VzIGJlaGF2aW91ciB0byBsb29rIGF0IGxlYXN0IDIwMDAgbGluZXMgcHJldmlvdXNseSBmb3IKLSIgc3ludGF4IG1hdGNoZXMgaW5zdGVhZCBvZiBhdCBtb3N0IDIwMCBsaW5lcwotc3luIHN5bmMgbWF0Y2ggcHl0aG9uU3luYyBncm91cGhlcmUgTk9ORSAiKTokIgotc3luIHN5bmMgbWF4bGluZXM9MjAwCi0ic3luIHN5bmMgbWlubGluZXM9MjAwMAotCi1sZXQgYjpjdXJyZW50X3N5bnRheCA9ICJweXRob24iJycnCi0KLWxvb3BpbmcgPSAoJ2ZvcicsICd3aGlsZScpCi1jb25kaXRpb25hbHMgPSAoJ2lmJywgJ2VsaWYnLCAnZWxzZScpCi1ib29sZWFuX29wcyA9ICgnYW5kJywgJ2luJywgJ2lzJywgJ25vdCcsICdvcicpCi1pbXBvcnRfc3RtdHMgPSAoJ2ltcG9ydCcsICdmcm9tJykKLW9iamVjdF9kZWZzID0gKCdkZWYnLCAnY2xhc3MnKQotCi1leGNlcHRpb25fbmFtZXMgPSBzb3J0ZWQoZXhjIGZvciBleGMgaW4gZGlyKGV4Y2VwdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBleGMuc3RhcnRzd2l0aCgnX18nKSkKLQotIyBOZWVkIHRvIGluY2x1ZGUgZnVuY3Rpb25zIHRoYXQgc3RhcnQgd2l0aCAnX18nIChlLmcuLCBfX2ltcG9ydF9fKSwgYnV0Ci0jIG5vdGhpbmcgdGhhdCBjb21lcyB3aXRoIG1vZHVsZXMgKGUuZy4sIF9fbmFtZV9fKSwgc28ganVzdCBleGNsdWRlIGFueXRoaW5nIGluCi0jIHRoZSAnZXhjZXB0aW9ucycgbW9kdWxlIHNpbmNlIHdlIHdhbnQgdG8gaWdub3JlIGV4Y2VwdGlvbnMgKmFuZCogd2hhdCBhbnkKLSMgbW9kdWxlIHdvdWxkIGhhdmUKLWJ1aWx0aW5fbmFtZXMgPSBzb3J0ZWQoYnVpbHRpbiBmb3IgYnVpbHRpbiBpbiBkaXIoYnVpbHRpbnMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgYnVpbHRpbiBub3QgaW4gZGlyKGV4Y2VwdGlvbnMpKQotCi1lc2NhcGVzID0gKHInK1xcW2FiZm5ydHZcJyJcXF0rJywgciciXFxcb1x7MSwzfSInLCByJyJcXHhceFx7Mn0iJywKLSAgICAgICAgICAgIHInIlwoXFx1XHhcezR9XHxcXFVceFx7OH1cKSInLCByJyJcXCQiJykKLQotdG9kb3MgPSAoIlRPRE8iLCAiRklYTUUiLCAiWFhYIikKLQotIyBYWFggY29kaWZ5PwotbnVtYmVycyA9IChyJyJcPDB4XHhcK1tMbF1cPVw+IicsIHInIlw8XGRcK1tMbGpKXVw9XD4iJywKLSAgICAgICAgICAgICciXC5cZFwrXChbZUVdWystXVw9XGRcK1wpXD1bakpdXD1cPiInLAotICAgICAgICAgICAgJyJcPFxkXCtcLlwoW2VFXVsrLV1cPVxkXCtcKVw9W2pKXVw9XD4iJywKLSAgICAgICAgICAgICciXDxcZFwrXC5cZFwrXChbZUVdWystXVw9XGRcK1wpXD1bakpdXD1cPiInKQotCi1jb250YWluZWQgPSBsYW1iZGEgeDogIiVzIGNvbnRhaW5lZCIgJSB4Ci0KLWRlZiBzdHJfcmVnZXhlcygpOgotICAgICIiIkdlbmVyYXRvciB0byB5aWVsZCB2YXJpb3VzIGNvbWJpbmF0aW9ucyBvZiBzdHJpbmdzIHJlZ2V4ZXMiIiIKLSAgICByZWdleF90ZW1wbGF0ZSA9IFRlbXBsYXRlKCdtYXRjaGdyb3VwPU5vcm1hbCAnICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N0YXJ0PStbdVVdXD0ke3Jhd30ke3NlcH0rICcgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZW5kPSske3NlcH0rICcgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJHtza2lwfSAnICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyR7Y29udGFpbnN9JykKLSAgICBza2lwX3JlZ2V4ID0gVGVtcGxhdGUocidza2lwPStcXFxcXHxcXCR7c2VwfSsnKQotICAgIGZvciByYXcgaW4gKCcnLCAnW3JSXScpOgotICAgICAgICBmb3Igc2VwYXJhdG9yIGluICgiJyIsICciJywgJyIiIicsICInJyciKToKLSAgICAgICAgICAgIGlmIGxlbihzZXBhcmF0b3IpID09IDE6Ci0gICAgICAgICAgICAgICAgc2tpcCA9IHNraXBfcmVnZXguc3Vic3RpdHV0ZShzZXA9c2VwYXJhdG9yKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBza2lwID0gJycKLSAgICAgICAgICAgIGNvbnRhaW5zID0gJ2NvbnRhaW5zPXB5dGhvbkVzY2FwZScgaWYgbm90IHJhdyBlbHNlICcnCi0gICAgICAgICAgICB5aWVsZCByZWdleF90ZW1wbGF0ZS5zdWJzdGl0dXRlKHJhdz1yYXcsIHNlcD1zZXBhcmF0b3IsIHNraXA9c2tpcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbnMgPSBjb250YWlucykKLQotc3BhY2VfZXJyb3JzID0gKHInZXhjbHVkZW5sICJcU1xzXCskIm1zPXMrMScsIHInIiBcK1x0IicsIHInIlx0XCsgIicpCi0KLXN0YXRlbWVudHMgPSAoCi0gICAgICAgICAgICAgICAgKCcnLAotICAgICAgICAgICAgICAgICAgICAjIFhYWCBNaWdodCBuZWVkIHRvIGNoYW5nZSBweXRob25TdGF0ZW1lbnQgc2luY2UgaGF2ZQotICAgICAgICAgICAgICAgICAgICAjIHNwZWNpZmljIFJlcGVhdCwgQ29uZGl0aW9uYWwsIE9wZXJhdG9yLCBldGMuIGZvciAnd2hpbGUnLAotICAgICAgICAgICAgICAgICAgICAjIGV0Yy4KLSAgICAgICAgICAgICAgICAgICAgWygiU3RhdGVtZW50IiwgInB5dGhvblN0YXRlbWVudCIsICJrZXl3b3JkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIChrdyBmb3Iga3cgaW4ga2V5d29yZC5rd2xpc3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBrdyBub3QgaW4gKGxvb3BpbmcgKyBjb25kaXRpb25hbHMgKyBib29sZWFuX29wcyArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wb3J0X3N0bXRzICsgb2JqZWN0X2RlZnMpKQotICAgICAgICAgICAgICAgICAgICAgICksCi0gICAgICAgICAgICAgICAgICAgICAoIlN0YXRlbWVudCIsICJweXRob25TdGF0ZW1lbnQiLCAia2V5d29yZCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgKCcgJy5qb2luKG9iamVjdF9kZWZzKSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgbmV4dGdyb3VwPXB5dGhvbkZ1bmN0aW9uIHNraXB3aGl0ZScpKSwKLSAgICAgICAgICAgICAgICAgICAgICgiRnVuY3Rpb24iLCJweXRob25GdW5jdGlvbiIsICJtYXRjaCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVkKCciW2EtekEtWl9dW2EtekEtWjAtOV9dKiInKSksCi0gICAgICAgICAgICAgICAgICAgICAoIlJlcGVhdCIsICJweXRob25SZXBlYXQiLCAia2V5d29yZCIsIGxvb3BpbmcpLAotICAgICAgICAgICAgICAgICAgICAgKCJDb25kaXRpb25hbCIsICJweXRob25Db25kaXRpb25hbCIsICJrZXl3b3JkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25hbHMpLAotICAgICAgICAgICAgICAgICAgICAgKCJPcGVyYXRvciIsICJweXRob25PcGVyYXRvciIsICJrZXl3b3JkIiwgYm9vbGVhbl9vcHMpLAotICAgICAgICAgICAgICAgICAgICAgKCJQcmVDb25kaXQiLCAicHl0aG9uUHJlQ29uZGl0IiwgImtleXdvcmQiLCBpbXBvcnRfc3RtdHMpLAotICAgICAgICAgICAgICAgICAgICAgKCJDb21tZW50IiwgInB5dGhvbkNvbW1lbnQiLCAibWF0Y2giLAotICAgICAgICAgICAgICAgICAgICAgICAgICciIy4qJCIgY29udGFpbnM9cHl0aG9uVG9kbycpLAotICAgICAgICAgICAgICAgICAgICAgKCJUb2RvIiwgInB5dGhvblRvZG8iLCAia2V5d29yZCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVkKCcgJy5qb2luKHRvZG9zKSkpLAotICAgICAgICAgICAgICAgICAgICAgKCJTdHJpbmciLCAicHl0aG9uU3RyaW5nIiwgInJlZ2lvbiIsIHN0cl9yZWdleGVzKCkpLAotICAgICAgICAgICAgICAgICAgICAgKCJTcGVjaWFsIiwgInB5dGhvbkVzY2FwZSIsICJtYXRjaCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnRhaW5lZChlc2MpIGZvciBlc2MgaW4gZXNjYXBlcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgJyQnIGluIGVzYykpLAotICAgICAgICAgICAgICAgICAgICAgKCJTcGVjaWFsIiwgInB5dGhvbkVzY2FwZSIsICJtYXRjaCIsIHInIlxcJCInKSwKLSAgICAgICAgICAgICAgICAgICAgXQotICAgICAgICAgICAgICAgICksCi0gICAgICAgICAgICAgICAgKCJweXRob25faGlnaGxpZ2h0X251bWJlcnMiLAotICAgICAgICAgICAgICAgICAgICBbKCJOdW1iZXIiLCAicHl0aG9uTnVtYmVyIiwgIm1hdGNoIiwgbnVtYmVycyldCi0gICAgICAgICAgICAgICAgKSwKLSAgICAgICAgICAgICAgICAoInB5dGhvbl9oaWdobGlnaHRfYnVpbHRpbnMiLAotICAgICAgICAgICAgICAgICAgICBbKCJGdW5jdGlvbiIsICJweXRob25CdWlsdGluIiwgImtleXdvcmQiLCBidWlsdGluX25hbWVzKV0KLSAgICAgICAgICAgICAgICApLAotICAgICAgICAgICAgICAgICgicHl0aG9uX2hpZ2hsaWdodF9leGNlcHRpb25zIiwKLSAgICAgICAgICAgICAgICAgICAgWygiRXhjZXB0aW9uIiwgInB5dGhvbkV4Y2VwdGlvbiIsICJrZXl3b3JkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbl9uYW1lcyldCi0gICAgICAgICAgICAgICAgKSwKLSAgICAgICAgICAgICAgICAoInB5dGhvbl9oaWdobGlnaHRfc3BhY2VfZXJyb3JzIiwKLSAgICAgICAgICAgICAgICAgICAgWygiRXJyb3IiLCAicHl0aG9uU3BhY2VFcnJvciIsICJtYXRjaCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAoImRpc3BsYXkgIiArIGVyciBmb3IgZXJyIGluIHNwYWNlX2Vycm9ycykpXQotICAgICAgICAgICAgICAgICkKLSAgICAgICAgICAgICApCi0KLWRlZiBzeW5fcHJlZml4KHR5cGVfLCBraW5kKToKLSAgICByZXR1cm4gJ3N5biAlcyAlcyAgICAnICUgKHR5cGVfLCBraW5kKQotCi1kZWYgZmlsbF9zdG10KGl0ZXJhYmxlLCBmaWxsX2xlbik6Ci0gICAgIiIiWWllbGQgYSBzdHJpbmcgdGhhdCBmaWxscyBhdCBtb3N0IGZpbGxfbGVuIGNoYXJhY3RlcnMgd2l0aCBzdHJpbmdzCi0gICAgcmV0dXJuZWQgYnkgJ2l0ZXJhYmxlJyBhbmQgc2VwYXJhdGVkIGJ5IGEgc3BhY2UiIiIKLSAgICAjIERlYWwgd2l0aCB0cmFpbGluZyBjaGFyIHRvIGhhbmRsZSAnICcuam9pbigpIGNhbGN1bGF0aW9uCi0gICAgZmlsbF9sZW4gKz0gMQotICAgIG92ZXJmbG93ID0gTm9uZQotICAgIGl0ID0gaXRlcihpdGVyYWJsZSkKLSAgICB3aGlsZSBUcnVlOgotICAgICAgICBidWZmZXJfID0gW10KLSAgICAgICAgdG90YWxfbGVuID0gMAotICAgICAgICBpZiBvdmVyZmxvdzoKLSAgICAgICAgICAgIGJ1ZmZlcl8uYXBwZW5kKG92ZXJmbG93KQotICAgICAgICAgICAgdG90YWxfbGVuICs9IGxlbihvdmVyZmxvdykgKyAxCi0gICAgICAgICAgICBvdmVyZmxvdyA9IE5vbmUKLSAgICAgICAgd2hpbGUgdG90YWxfbGVuIDwgZmlsbF9sZW46Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgbmV3X2l0ZW0gPSBuZXh0KGl0KQotICAgICAgICAgICAgICAgIGJ1ZmZlcl8uYXBwZW5kKG5ld19pdGVtKQotICAgICAgICAgICAgICAgIHRvdGFsX2xlbiArPSBsZW4obmV3X2l0ZW0pICsgMQotICAgICAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246Ci0gICAgICAgICAgICAgICAgaWYgYnVmZmVyXzoKLSAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICBpZiBvdmVyZmxvdzoKLSAgICAgICAgICAgICAgICAgICAgeWllbGQgb3ZlcmZsb3cKLSAgICAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgaWYgdG90YWxfbGVuID4gZmlsbF9sZW46Ci0gICAgICAgICAgICBvdmVyZmxvdyA9IGJ1ZmZlcl8ucG9wKCkKLSAgICAgICAgICAgIHRvdGFsX2xlbiAtPSBsZW4ob3ZlcmZsb3cpIC0gMQotICAgICAgICByZXQgPSAnICcuam9pbihidWZmZXJfKQotICAgICAgICBhc3NlcnQgbGVuKHJldCkgPD0gZmlsbF9sZW4KLSAgICAgICAgeWllbGQgcmV0Ci0KLUZJTEwgPSA4MAotCi1kZWYgbWFpbihmaWxlX3BhdGgpOgotICAgIHdpdGggb3BlbihmaWxlX3BhdGgsICd3JykgYXMgRklMRToKLSAgICAgICAgIyBDb21tZW50IGZvciBmaWxlCi0gICAgICAgIHByaW50Pj5GSUxFLCBjb21tZW50X2hlYWRlciAlIHN1YnZlcnNpb25bMTpdCi0gICAgICAgIHByaW50Pj5GSUxFLCAnJwotICAgICAgICAjIFN0YXRlbWVudHMgYXQgc3RhcnQgb2YgZmlsZQotICAgICAgICBwcmludD4+RklMRSwgc3RhdGVtZW50X2hlYWRlcgotICAgICAgICBwcmludD4+RklMRSwgJycKLSAgICAgICAgIyBHZW5lcmF0ZSBjYXNlIGZvciBweXRob25faGlnaGxpZ2h0X2FsbAotICAgICAgICBwcmludD4+RklMRSwgJ2lmIGV4aXN0cygicHl0aG9uX2hpZ2hsaWdodF9hbGwiKScKLSAgICAgICAgZm9yIHN0YXRlbWVudF92YXIsIHN0YXRlbWVudF9wYXJ0cyBpbiBzdGF0ZW1lbnRzOgotICAgICAgICAgICAgaWYgc3RhdGVtZW50X3ZhcjoKLSAgICAgICAgICAgICAgICBwcmludD4+RklMRSwgJyAgbGV0ICVzID0gMScgJSBzdGF0ZW1lbnRfdmFyCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBwcmludD4+RklMRSwgJ2VuZGlmJwotICAgICAgICAgICAgcHJpbnQ+PkZJTEUsICcnCi0gICAgICAgICMgR2VuZXJhdGUgUHl0aG9uIGdyb3VwcwotICAgICAgICBmb3Igc3RhdGVtZW50X3Zhciwgc3RhdGVtZW50X3BhcnRzIGluIHN0YXRlbWVudHM6Ci0gICAgICAgICAgICBpZiBzdGF0ZW1lbnRfdmFyOgotICAgICAgICAgICAgICAgIHByaW50Pj5GSUxFLCAnaWYgZXhpc3RzKCIlcyIpJyAlIHN0YXRlbWVudF92YXIKLSAgICAgICAgICAgICAgICBpbmRlbnQgPSAnICAnCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGluZGVudCA9ICcnCi0gICAgICAgICAgICBmb3IgY29sb3VyX2dyb3VwLCBncm91cCwgdHlwZV8sIGFyZ3VtZW50cyBpbiBzdGF0ZW1lbnRfcGFydHM6Ci0gICAgICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoYXJndW1lbnRzLCBiYXNlc3RyaW5nKToKLSAgICAgICAgICAgICAgICAgICAgcHJlZml4ID0gc3luX3ByZWZpeCh0eXBlXywgZ3JvdXApCi0gICAgICAgICAgICAgICAgICAgIGlmIHR5cGVfID09ICdrZXl3b3JkJzoKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0bXRfaXRlciA9IGZpbGxfc3RtdChhcmd1bWVudHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEwgLSBsZW4ocHJlZml4KSAtIGxlbihpbmRlbnQpKQotICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIFRydWU6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50Pj5GSUxFLCBpbmRlbnQgKyBwcmVmaXggKyBuZXh0KHN0bXRfaXRlcikKLSAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50Pj5GSUxFLCAnJwotICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGFyZ3VtZW50IGluIGFyZ3VtZW50czoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludD4+RklMRSwgaW5kZW50ICsgcHJlZml4ICsgYXJndW1lbnQKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQ+PkZJTEUsICcnCi0KLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBwcmludD4+RklMRSwgaW5kZW50ICsgc3luX3ByZWZpeCh0eXBlXywgZ3JvdXApICsgYXJndW1lbnRzCi0gICAgICAgICAgICAgICAgICAgIHByaW50Pj5GSUxFLCAnJwotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBpZiBzdGF0ZW1lbnRfdmFyOgotICAgICAgICAgICAgICAgICAgICBwcmludD4+RklMRSwgJ2VuZGlmJwotICAgICAgICAgICAgICAgICAgICBwcmludD4+RklMRSwgJycKLSAgICAgICAgICAgIHByaW50Pj5GSUxFLCAnJwotICAgICAgICAjIEFzc29jaWF0aW5nIFB5dGhvbiBncm91cCB3aXRoIFZpbSBjb2xvdXIgZ3JvdXAKLSAgICAgICAgZm9yIHN0YXRlbWVudF92YXIsIHN0YXRlbWVudF9wYXJ0cyBpbiBzdGF0ZW1lbnRzOgotICAgICAgICAgICAgaWYgc3RhdGVtZW50X3ZhcjoKLSAgICAgICAgICAgICAgICBwcmludD4+RklMRSwgJyAgaWYgZXhpc3RzKCIlcyIpJyAlIHN0YXRlbWVudF92YXIKLSAgICAgICAgICAgICAgICBpbmRlbnQgPSAnICAgICcKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgaW5kZW50ID0gJyAgJwotICAgICAgICAgICAgZm9yIGNvbG91cl9ncm91cCwgZ3JvdXAsIHR5cGVfLCBhcmd1bWVudHMgaW4gc3RhdGVtZW50X3BhcnRzOgotICAgICAgICAgICAgICAgIHByaW50Pj5GSUxFLCAoaW5kZW50ICsgImhpIGRlZiBsaW5rICVzICVzIiAlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChncm91cCwgY29sb3VyX2dyb3VwKSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgaWYgc3RhdGVtZW50X3ZhcjoKLSAgICAgICAgICAgICAgICAgICAgcHJpbnQ+PkZJTEUsICcgIGVuZGlmJwotICAgICAgICAgICAgICAgIHByaW50Pj5GSUxFLCAnJwotICAgICAgICAjIFN0YXRlbWVudHMgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZQotICAgICAgICBwcmludD4+RklMRSwgc3RhdGVtZW50X2Zvb3RlcgotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIG1haW4oInB5dGhvbi52aW0iKQpkaWZmIC0tZ2l0IGEvTWlzYy9WaW0vdmltcmMgYi9NaXNjL1ZpbS92aW1yYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzM5OGNjYS4uMDAwMDAwMAotLS0gYS9NaXNjL1ZpbS92aW1yYworKysgL2Rldi9udWxsCkBAIC0xLDg3ICswLDAgQEAKLSIgdmltcmMgZmlsZSBmb3IgZm9sbG93aW5nIHRoZSBjb2Rpbmcgc3RhbmRhcmRzIHNwZWNpZmllZCBpbiBQRVAgNyAmIDguCi0iCi0iIFRvIHVzZSB0aGlzIGZpbGUsIHNvdXJjZSBpdCBpbiB5b3VyIG93biBwZXJzb25hbCAudmltcmMgZmlsZSAoYGBzb3VyY2UKLSIgPGZpbGVuYW1lPmBgKSBvciwgaWYgeW91IGRvbid0IGhhdmUgYSAudmltcmMgZmlsZSwgeW91IGNhbiBqdXN0IHN5bWxpbmsgdG8gaXQKLSIgKGBgbG4gLXMgPHRoaXMgZmlsZT4gfi8udmltcmNgYCkuICBBbGwgb3B0aW9ucyBhcmUgcHJvdGVjdGVkIGJ5IGF1dG9jbWRzCi0iIChyZWFkIGJlbG93IGZvciBhbiBleHBsYW5hdGlvbiBvZiB0aGUgY29tbWFuZCkgc28gYmxpbmQgc291cmNpbmcgb2YgdGhpcyBmaWxlCi0iIGlzIHNhZmUgYW5kIHdpbGwgbm90IGFmZmVjdCB5b3VyIHNldHRpbmdzIGZvciBub24tUHl0aG9uIG9yIG5vbi1DIGZpbGVzLgotIgotIgotIiBBbGwgc2V0dGluZyBhcmUgcHJvdGVjdGVkIGJ5ICdhdScgKCdhdXRvY21kJykgc3RhdGVtZW50cy4gIE9ubHkgZmlsZXMgZW5kaW5nCi0iIGluIC5weSBvciAucHl3IHdpbGwgdHJpZ2dlciB0aGUgUHl0aG9uIHNldHRpbmdzIHdoaWxlIGZpbGVzIGVuZGluZyBpbiAqLmMgb3IKLSIgKi5oIHdpbGwgdHJpZ2dlciB0aGUgQyBzZXR0aW5ncy4gIFRoaXMgbWFrZXMgdGhlIGZpbGUgInNhZmUiIGluIHRlcm1zIG9mIG9ubHkKLSIgYWRqdXN0aW5nIHNldHRpbmdzIGZvciBQeXRob24gYW5kIEMgZmlsZXMuCi0iCi0iIE9ubHkgYmFzaWMgc2V0dGluZ3MgbmVlZGVkIHRvIGVuZm9yY2UgdGhlIHN0eWxlIGd1aWRlbGluZXMgYXJlIHNldC4KLSIgU29tZSBzdWdnZXN0ZWQgb3B0aW9ucyBhcmUgbGlzdGVkIGJ1dCBjb21tZW50ZWQgb3V0IGF0IHRoZSBlbmQgb2YgdGhpcyBmaWxlLgotCi0iIE51bWJlciBvZiBzcGFjZXMgdGhhdCBhIHByZS1leGlzdGluZyB0YWIgaXMgZXF1YWwgdG8uCi0iIEZvciB0aGUgYW1vdW50IG9mIHNwYWNlIHVzZWQgZm9yIGEgbmV3IHRhYiB1c2Ugc2hpZnR3aWR0aC4KLWF1IEJ1ZlJlYWQsQnVmTmV3RmlsZSAqcHksKnB5dywqLmMsKi5oIHNldCB0YWJzdG9wPTgKLQotIiBXaGF0IHRvIHVzZSBmb3IgYW4gaW5kZW50LgotIiBUaGlzIHdpbGwgYWZmZWN0IEN0cmwtVCBhbmQgJ2F1dG9pbmRlbnQnLgotIiBQeXRob246IDQgc3BhY2VzCi0iIEM6IHRhYnMgKHByZS1leGlzdGluZyBmaWxlcykgb3IgNCBzcGFjZXMgKG5ldyBmaWxlcykKLWF1IEJ1ZlJlYWQsQnVmTmV3RmlsZSAqLnB5LCpweXcgc2V0IHNoaWZ0d2lkdGg9NAotYXUgQnVmUmVhZCxCdWZOZXdGaWxlICoucHksKi5weXcgc2V0IGV4cGFuZHRhYgotZnUgU2VsZWN0X2Nfc3R5bGUoKQotICAgIGlmIHNlYXJjaCgnXlx0JywgJ24nLCAxNTApCi0gICAgICAgIHNldCBzaGlmdHdpZHRoPTgKLSAgICAgICAgc2V0IG5vZXhwYW5kdGFiCi0gICAgZWwgCi0gICAgICAgIHNldCBzaGlmdHdpZHRoPTQKLSAgICAgICAgc2V0IGV4cGFuZHRhYgotICAgIGVuCi1lbmRmCi1hdSBCdWZSZWFkLEJ1Zk5ld0ZpbGUgKi5jLCouaCBjYWxsIFNlbGVjdF9jX3N0eWxlKCkKLWF1IEJ1ZlJlYWQsQnVmTmV3RmlsZSBNYWtlZmlsZSogc2V0IG5vZXhwYW5kdGFiCi0KLSIgVXNlIHRoZSBiZWxvdyBoaWdobGlnaHQgZ3JvdXAgd2hlbiBkaXNwbGF5aW5nIGJhZCB3aGl0ZXNwYWNlIGlzIGRlc2lyZWQuCi1oaWdobGlnaHQgQmFkV2hpdGVzcGFjZSBjdGVybWJnPXJlZCBndWliZz1yZWQKLQotIiBEaXNwbGF5IHRhYnMgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGxpbmUgaW4gUHl0aG9uIG1vZGUgYXMgYmFkLgotYXUgQnVmUmVhZCxCdWZOZXdGaWxlICoucHksKi5weXcgbWF0Y2ggQmFkV2hpdGVzcGFjZSAvXlx0XCsvCi0iIE1ha2UgdHJhaWxpbmcgd2hpdGVzcGFjZSBiZSBmbGFnZ2VkIGFzIGJhZC4KLWF1IEJ1ZlJlYWQsQnVmTmV3RmlsZSAqLnB5LCoucHl3LCouYywqLmgsKi5yc3QgbWF0Y2ggQmFkV2hpdGVzcGFjZSAvXHNcKyQvCi0KLSIgV3JhcCB0ZXh0IGFmdGVyIGEgY2VydGFpbiBudW1iZXIgb2YgY2hhcmFjdGVycwotIiBQeXRob246IDc5IAotIiBDOiA3OQotYXUgQnVmUmVhZCxCdWZOZXdGaWxlICoucHksKi5weXcsKi5jLCouaCBzZXQgdGV4dHdpZHRoPTc5Ci0KLSIgVHVybiBvZmYgc2V0dGluZ3MgaW4gJ2Zvcm1hdG9wdGlvbnMnIHJlbGF0aW5nIHRvIGNvbW1lbnQgZm9ybWF0dGluZy4KLSIgLSBjIDogZG8gbm90IGF1dG9tYXRpY2FsbHkgaW5zZXJ0IHRoZSBjb21tZW50IGxlYWRlciB3aGVuIHdyYXBwaW5nIGJhc2VkIG9uCi0iICAgICd0ZXh0d2lkdGgnCi0iIC0gbyA6IGRvIG5vdCBpbnNlcnQgdGhlIGNvbW1lbnQgbGVhZGVyIHdoZW4gdXNpbmcgJ28nIG9yICdPJyBmcm9tIGNvbW1hbmQgbW9kZQotIiAtIHIgOiBkbyBub3QgaW5zZXJ0IHRoZSBjb21tZW50IGxlYWRlciB3aGVuIGhpdHRpbmcgPEVudGVyPiBpbiBpbnNlcnQgbW9kZQotIiBQeXRob246IG5vdCBuZWVkZWQKLSIgQzogcHJldmVudHMgaW5zZXJ0aW9uIG9mICcqJyBhdCB0aGUgYmVnaW5uaW5nIG9mIGV2ZXJ5IGxpbmUgaW4gYSBjb21tZW50Ci1hdSBCdWZSZWFkLEJ1Zk5ld0ZpbGUgKi5jLCouaCBzZXQgZm9ybWF0b3B0aW9ucy09YyBmb3JtYXRvcHRpb25zLT1vIGZvcm1hdG9wdGlvbnMtPXIKLQotIiBVc2UgVU5JWCAoXG4pIGxpbmUgZW5kaW5ncy4KLSIgT25seSB1c2VkIGZvciBuZXcgZmlsZXMgc28gYXMgdG8gbm90IGZvcmNlIGV4aXN0aW5nIGZpbGVzIHRvIGNoYW5nZSB0aGVpcgotIiBsaW5lIGVuZGluZ3MuCi0iIFB5dGhvbjogeWVzCi0iIEM6IHllcwotYXUgQnVmTmV3RmlsZSAqLnB5LCoucHl3LCouYywqLmggc2V0IGZpbGVmb3JtYXQ9dW5peAotCi0KLSIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIiBUaGUgZm9sbG93aW5nIHNlY3Rpb24gY29udGFpbnMgc3VnZ2VzdGVkIHNldHRpbmdzLiAgV2hpbGUgaW4gbm8gd2F5IHJlcXVpcmVkCi0iIHRvIG1lZXQgY29kaW5nIHN0YW5kYXJkcywgdGhleSBhcmUgaGVscGZ1bC4KLQotIiBTZXQgdGhlIGRlZmF1bHQgZmlsZSBlbmNvZGluZyB0byBVVEYtODogYGBzZXQgZW5jb2Rpbmc9dXRmLThgYAotCi0iIFB1dHMgYSBtYXJrZXIgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZSB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gVVRGIGFuZAotIiBVQ1MgZW5jb2RpbmcgKFdBUk5JTkc6IGNhbiB0cmljayBzaGVsbHMgaW50byB0aGlua2luZyBhIHRleHQgZmlsZSBpcyBhY3R1YWxseQotIiBhIGJpbmFyeSBmaWxlIHdoZW4gZXhlY3V0aW5nIHRoZSB0ZXh0IGZpbGUpOiBgYHNldCBib21iYGAKLQotIiBGb3IgZnVsbCBzeW50YXggaGlnaGxpZ2h0aW5nOgotImBgbGV0IHB5dGhvbl9oaWdobGlnaHRfYWxsPTFgYAotImBgc3ludGF4IG9uYGAKLQotIiBBdXRvbWF0aWNhbGx5IGluZGVudCBiYXNlZCBvbiBmaWxlIHR5cGU6IGBgZmlsZXR5cGUgaW5kZW50IG9uYGAKLSIgS2VlcCBpbmRlbnRhdGlvbiBsZXZlbCBmcm9tIHByZXZpb3VzIGxpbmU6IGBgc2V0IGF1dG9pbmRlbnRgYAotCi0iIEZvbGRpbmcgYmFzZWQgb24gaW5kZW50YXRpb246IGBgc2V0IGZvbGRtZXRob2Q9aW5kZW50YGAKZGlmZiAtLWdpdCBhL01pc2MvY292ZXJpdHlfbW9kZWwuYyBiL01pc2MvY292ZXJpdHlfbW9kZWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41N2YzYWViCi0tLSAvZGV2L251bGwKKysrIGIvTWlzYy9jb3Zlcml0eV9tb2RlbC5jCkBAIC0wLDAgKzEsMTMyIEBACisvKiBDb3Zlcml0eSBTY2FuIG1vZGVsCisgKgorICogVGhpcyBpcyBhIG1vZGVsaW5nIGZpbGUgZm9yIENvdmVyaXR5IFNjYW4uIE1vZGVsaW5nIGhlbHBzIHRvIGF2b2lkIGZhbHNlCisgKiBwb3NpdGl2ZXMuCisgKgorICogLSBBIG1vZGVsIGZpbGUgY2FuJ3QgaW1wb3J0IGFueSBoZWFkZXIgZmlsZXMuCisgKiAtIFRoZXJlZm9yZSBvbmx5IHNvbWUgYnVpbHQtaW4gcHJpbWl0aXZlcyBsaWtlIGludCwgY2hhciBhbmQgdm9pZCBhcmUKKyAqICAgYXZhaWxhYmxlIGJ1dCBub3Qgd2NoYXJfdCwgTlVMTCBldGMuCisgKiAtIE1vZGVsaW5nIGRvZXNuJ3QgbmVlZCBmdWxsIHN0cnVjdHMgYW5kIHR5cGVkZWZzLiBSdWRpbWVudGFyeSBzdHJ1Y3RzCisgKiAgIGFuZCBzaW1pbGFyIHR5cGVzIGFyZSBzdWZmaWNpZW50LgorICogLSBBbiB1bmluaXRpYWxpemVkIGxvY2FsIHBvaW50ZXIgaXMgbm90IGFuIGVycm9yLiBJdCBzaWduaWZpZXMgdGhhdCB0aGUKKyAqICAgdmFyaWFibGUgY291bGQgYmUgZWl0aGVyIE5VTEwgb3IgaGF2ZSBzb21lIGRhdGEuCisgKgorICogQ292ZXJpdHkgU2NhbiBkb2Vzbid0IHBpY2sgdXAgbW9kaWZpY2F0aW9ucyBhdXRvbWF0aWNhbGx5LiBUaGUgbW9kZWwgZmlsZQorICogbXVzdCBiZSB1cGxvYWRlZCBieSBhbiBhZG1pbiBpbiB0aGUgYW5hbHlzaXMgc2V0dGluZ3Mgb2YKKyAqIGh0dHA6Ly9zY2FuLmNvdmVyaXR5LmNvbS9wcm9qZWN0cy8yMDAKKyAqLworCisvKiBkdW1teSBkZWZpbml0aW9ucywgaW4gbW9zdCBjYXNlcyBzdHJ1Y3QgZmllbGRzIGFyZW4ndCByZXF1aXJlZC4gKi8KKworI2RlZmluZSBOVUxMICh2b2lkICopMAorI2RlZmluZSBhc3NlcnQob3ApIC8qIGVtcHR5ICovCit0eXBlZGVmIGludCBzZGlnaXQ7Cit0eXBlZGVmIGxvbmcgUHlfc3NpemVfdDsKK3R5cGVkZWYgbG9uZyBsb25nIFBZX0xPTkdfTE9ORzsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgd2NoYXJfdDsKK3R5cGVkZWYgc3RydWN0IHt9IFB5T2JqZWN0OwordHlwZWRlZiBzdHJ1Y3Qge30gZ3JhbW1hcjsKK3R5cGVkZWYgc3RydWN0IHt9IERJUjsKK3R5cGVkZWYgc3RydWN0IHt9IFJGSUxFOworCisvKiBQeXRob24vcHl0aG9ucnVuLmMKKyAqIHJlc291cmVjZSBsZWFrIGZhbHNlIHBvc2l0aXZlICovCisKK3ZvaWQgUHlfRmF0YWxFcnJvcihjb25zdCBjaGFyICptc2cpIHsKKyAgICBfX2NvdmVyaXR5X3BhbmljX18oKTsKK30KKworLyogT2JqZWN0cy9sb25nb2JqZWN0LmMKKyAqIE5FR0FUSVZFX1JFVFVSTlMgZmFsc2UgcG9zaXRpdmUgKi8KKworc3RhdGljIFB5T2JqZWN0ICpnZXRfc21hbGxfaW50KHNkaWdpdCBpdmFsKQoreworICAgIC8qIE5ldmVyIHJldHVybnMgTlVMTCAqLworICAgIFB5T2JqZWN0ICpwOworICAgIGFzc2VydChwICE9IE5VTEwpOworICAgIHJldHVybiBwOworfQorCitQeU9iamVjdCAqUHlMb25nX0Zyb21Mb25nKGxvbmcgaXZhbCkKK3sKKyAgICBQeU9iamVjdCAqcDsKKyAgICBpbnQgbWF5YmU7CisKKyAgICBpZiAoKGl2YWwgPj0gLTUpICYmIChpdmFsIDwgMjU3ICsgNSkpIHsKKyAgICAgICAgcCA9IGdldF9zbWFsbF9pbnQoaXZhbCk7CisgICAgICAgIGFzc2VydChwICE9IE5VTEwpOworICAgICAgICByZXR1cm4gcDsKKyAgICB9CisgICAgaWYgKG1heWJlKQorICAgICAgICByZXR1cm4gcDsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBOVUxMOworfQorCitQeU9iamVjdCAqUHlMb25nX0Zyb21Mb25nTG9uZyhQWV9MT05HX0xPTkcgaXZhbCkKK3sKKyAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKChsb25nKWl2YWwpOworfQorCitQeU9iamVjdCAqUHlMb25nX0Zyb21Tc2l6ZV90KFB5X3NzaXplX3QgaXZhbCkKK3sKKyAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKChsb25nKWl2YWwpOworfQorCisvKiB0YWludGVkIHNpbmtzCisgKgorICogQ292ZXJpdHkgY29uc2lkZXJzIGFyZ3YsIGVudmlyb24sIHJlYWQoKSBkYXRhIGV0YyBhcyB0YWluZWQuCisgKi8KKworUHlPYmplY3QgKlB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZShQeU9iamVjdCAqZXhjLCBjb25zdCBjaGFyICpmaWxlbmFtZSkKK3sKKyAgICBfX2NvdmVyaXR5X3RhaW50ZWRfZGF0YV9zaW5rX18oZmlsZW5hbWUpOworICAgIHJldHVybiBOVUxMOworfQorCisvKiBQeXRob24vZmlsZXV0aWxzLmMgKi8KK3djaGFyX3QgKl9QeV9jaGFyMndjaGFyKGNvbnN0IGNoYXIqIGFyZywgc2l6ZV90ICpzaXplKQoreworICAgd2NoYXJfdCAqdzsKKyAgICBfX2NvdmVyaXR5X3RhaW50ZWRfZGF0YV9zaW5rX18oYXJnKTsKKyAgICBfX2NvdmVyaXR5X3RhaW50ZWRfZGF0YV9zaW5rX18oc2l6ZSk7CisgICByZXR1cm4gdzsKK30KKworLyogUGFyc2VyL3BnZW5tYWluLmMgKi8KK2dyYW1tYXIgKmdldGdyYW1tYXIoY2hhciAqZmlsZW5hbWUpCit7CisgICAgZ3JhbW1hciAqZzsKKyAgICBfX2NvdmVyaXR5X3RhaW50ZWRfZGF0YV9zaW5rX18oZmlsZW5hbWUpOworICAgIHJldHVybiBnOworfQorCisvKiBQeXRob24vbWFyc2hhbC5jICovCisKK3N0YXRpYyBQeV9zc2l6ZV90IHJfc3RyaW5nKGNoYXIgKnMsIFB5X3NzaXplX3QgbiwgUkZJTEUgKnApCit7CisgICAgX19jb3Zlcml0eV90YWludGVkX3N0cmluZ19hcmd1bWVudF9fKHMpOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgbG9uZyByX2xvbmcoUkZJTEUgKnApCit7CisgICAgbG9uZyBsOworICAgIHVuc2lnbmVkIGNoYXIgYnVmZmVyWzRdOworCisgICAgcl9zdHJpbmcoKGNoYXIgKilidWZmZXIsIDQsIHApOworICAgIF9fY292ZXJpdHlfdGFpbnRlZF9zdHJpbmdfc2FuaXRpemVfY29udGVudF9fKGJ1ZmZlcik7CisgICAgbCA9IChsb25nKWJ1ZmZlcjsKKyAgICByZXR1cm4gbDsKK30KKworLyogQ292ZXJpdHkgZG9lc24ndCB1bmRlcnN0YW5kIHRoYXQgZmRvcGVuZGlyKCkgbWF5IHRha2Ugb3duZXJzaGlwIG9mIGZkLiAqLworCitESVIgKmZkb3BlbmRpcihpbnQgZmQpIHsKKyAgICBESVIgKmQ7CisgICAgaWYgKGQpIHsKKyAgICAgICAgX19jb3Zlcml0eV9jbG9zZV9fKGZkKTsKKyAgICB9CisgICAgcmV0dXJuIGQ7Cit9CisKZGlmZiAtLWdpdCBhL01pc2MvcHl0aG9uLWNvbmZpZy5pbiBiL01pc2MvcHl0aG9uLWNvbmZpZy5pbgppbmRleCBhYzNhMmM3Li5lMTNkYTc1IDEwMDY0NAotLS0gYS9NaXNjL3B5dGhvbi1jb25maWcuaW4KKysrIGIvTWlzYy9weXRob24tY29uZmlnLmluCkBAIC0xLDYgKzEsOCBAQAogIyFARVhFTkFNRUAKICMgLSotIHB5dGhvbiAtKi0KIAorIyBLZWVwIHRoaXMgc2NyaXB0IGluIHN5bmMgd2l0aCBweXRob24tY29uZmlnLnNoLmluCisKIGltcG9ydCBnZXRvcHQKIGltcG9ydCBvcwogaW1wb3J0IHN5cwpAQCAtNDUsOCArNDcsOSBAQAogICAgICAgICBwcmludCgnICcuam9pbihmbGFncykpCiAKICAgICBlbGlmIG9wdCBpbiAoJy0tbGlicycsICctLWxkZmxhZ3MnKToKLSAgICAgICAgbGlicyA9IGdldHZhcignTElCUycpLnNwbGl0KCkgKyBnZXR2YXIoJ1NZU0xJQlMnKS5zcGxpdCgpCi0gICAgICAgIGxpYnMuYXBwZW5kKCctbHB5dGhvbicgKyBweXZlciArIHN5cy5hYmlmbGFncykKKyAgICAgICAgbGlicyA9IFsnLWxweXRob24nICsgcHl2ZXIgKyBzeXMuYWJpZmxhZ3NdCisgICAgICAgIGxpYnMgKz0gZ2V0dmFyKCdMSUJTJykuc3BsaXQoKQorICAgICAgICBsaWJzICs9IGdldHZhcignU1lTTElCUycpLnNwbGl0KCkKICAgICAgICAgIyBhZGQgdGhlIHByZWZpeC9saWIvcHl0aG9uWC5ZL2NvbmZpZyBkaXIsIGJ1dCBvbmx5IGlmIHRoZXJlIGlzIG5vCiAgICAgICAgICMgc2hhcmVkIGxpYnJhcnkgaW4gcHJlZml4L2xpYi8uCiAgICAgICAgIGlmIG9wdCA9PSAnLS1sZGZsYWdzJzoKZGlmZiAtLWdpdCBhL01pc2MvcHl0aG9uLWNvbmZpZy5zaC5pbiBiL01pc2MvcHl0aG9uLWNvbmZpZy5zaC5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMGM2OTI3Ci0tLSAvZGV2L251bGwKKysrIGIvTWlzYy9weXRob24tY29uZmlnLnNoLmluCkBAIC0wLDAgKzEsMTExIEBACisjIS9iaW4vc2gKKworIyBLZWVwIHRoaXMgc2NyaXB0IGluIHN5bmMgd2l0aCBweXRob24tY29uZmlnLmluCisKK2V4aXRfd2l0aF91c2FnZSAoKQoreworICAgIGVjaG8gIlVzYWdlOiAkMCAtLXByZWZpeHwtLWV4ZWMtcHJlZml4fC0taW5jbHVkZXN8LS1saWJzfC0tY2ZsYWdzfC0tbGRmbGFnc3wtLWV4dGVuc2lvbi1zdWZmaXh8LS1oZWxwfC0tYWJpZmxhZ3N8LS1jb25maWdkaXIiCisgICAgZXhpdCAkMQorfQorCitpZiBbICIkMSIgPSAiIiBdIDsgdGhlbgorICAgIGV4aXRfd2l0aF91c2FnZSAxCitmaQorCisjIFJldHVybnMgdGhlIGFjdHVhbCBwcmVmaXggd2hlcmUgdGhpcyBzY3JpcHQgd2FzIGluc3RhbGxlZCB0by4KK2luc3RhbGxlZF9wcmVmaXggKCkKK3sKKyAgICBSRVNVTFQ9JChkaXJuYW1lICQoY2QgJChkaXJuYW1lICIkMSIpICYmIHB3ZCAtUCkpCisgICAgaWYgd2hpY2ggcmVhZGxpbmsgPi9kZXYvbnVsbCAyPiYxIDsgdGhlbgorICAgICAgICBpZiByZWFkbGluayAtZiAiJFJFU1VMVCIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgICAgICAgUkVTVUxUPSQocmVhZGxpbmsgLWYgIiRSRVNVTFQiKQorICAgICAgICBmaQorICAgIGZpCisgICAgZWNobyAkUkVTVUxUCit9CisKK3ByZWZpeF9idWlsZD0iQHByZWZpeEAiCitwcmVmaXhfcmVhbD0kKGluc3RhbGxlZF9wcmVmaXggIiQwIikKKworIyBVc2Ugc2VkIHRvIGZpeCBwYXRocyBmcm9tIHRoZWlyIGJ1aWx0LXRvIGxvY2F0aW9ucyB0byB0aGVpciBpbnN0YWxsZWQtdG8KKyMgbG9jYXRpb25zLgorcHJlZml4PSQoZWNobyAiJHByZWZpeF9idWlsZCIgfCBzZWQgInMjJHByZWZpeF9idWlsZCMkcHJlZml4X3JlYWwjIikKK2V4ZWNfcHJlZml4X2J1aWxkPSJAZXhlY19wcmVmaXhAIgorZXhlY19wcmVmaXg9JChlY2hvICIkZXhlY19wcmVmaXhfYnVpbGQiIHwgc2VkICJzIyRleGVjX3ByZWZpeF9idWlsZCMkcHJlZml4X3JlYWwjIikKK2luY2x1ZGVkaXI9JChlY2hvICJAaW5jbHVkZWRpckAiIHwgc2VkICJzIyRwcmVmaXhfYnVpbGQjJHByZWZpeF9yZWFsIyIpCitsaWJkaXI9JChlY2hvICJAbGliZGlyQCIgfCBzZWQgInMjJHByZWZpeF9idWlsZCMkcHJlZml4X3JlYWwjIikKK0NGTEFHUz0kKGVjaG8gIkBDRkxBR1NAIiB8IHNlZCAicyMkcHJlZml4X2J1aWxkIyRwcmVmaXhfcmVhbCMiKQorVkVSU0lPTj0iQFZFUlNJT05AIgorTElCTT0iQExJQk1AIgorTElCQz0iQExJQkNAIgorU1lTTElCUz0iJExJQk0gJExJQkMiCitBQklGTEFHUz0iQEFCSUZMQUdTQCIKK0xJQlM9Ii1scHl0aG9uJHtWRVJTSU9OfSR7QUJJRkxBR1N9IEBMSUJTQCAkU1lTTElCUyIKK0JBU0VDRkxBR1M9IkBCQVNFQ0ZMQUdTQCIKK0xETElCUkFSWT0iQExETElCUkFSWUAiCitMSU5LRk9SU0hBUkVEPSJATElOS0ZPUlNIQVJFREAiCitPUFQ9IkBPUFRAIgorUFlfRU5BQkxFX1NIQVJFRD0iQFBZX0VOQUJMRV9TSEFSRURAIgorTERWRVJTSU9OPSJATERWRVJTSU9OQCIKK0xJQkRFU1Q9JHtwcmVmaXh9L2xpYi9weXRob24ke1ZFUlNJT059CitMSUJQTD0kKGVjaG8gIkBMSUJQTEAiIHwgc2VkICJzIyRwcmVmaXhfYnVpbGQjJHByZWZpeF9yZWFsIyIpCitTTz0iQEVYVF9TVUZGSVhAIgorUFlUSE9ORlJBTUVXT1JLPSJAUFlUSE9ORlJBTUVXT1JLQCIKK0lOQ0RJUj0iLUkkaW5jbHVkZWRpci9weXRob24ke1ZFUlNJT059JHtBQklGTEFHU30iCitQTEFUSU5DRElSPSItSSRpbmNsdWRlZGlyL3B5dGhvbiR7VkVSU0lPTn0ke0FCSUZMQUdTfSIKKworIyBTY2FuIGZvciAtLWhlbHAgb3IgdW5rbm93biBhcmd1bWVudC4KK2ZvciBBUkcgaW4gJCoKK2RvCisgICAgY2FzZSAkQVJHIGluCisgICAgICAgIC0taGVscCkKKyAgICAgICAgICAgIGV4aXRfd2l0aF91c2FnZSAwCisgICAgICAgIDs7CisgICAgICAgIC0tcHJlZml4fC0tZXhlYy1wcmVmaXh8LS1pbmNsdWRlc3wtLWxpYnN8LS1jZmxhZ3N8LS1sZGZsYWdzfC0tZXh0ZW5zaW9uLXN1ZmZpeHwtLWFiaWZsYWdzfC0tY29uZmlnZGlyKQorICAgICAgICA7OworICAgICAgICAqKQorICAgICAgICAgICAgZXhpdF93aXRoX3VzYWdlIDEKKyAgICAgICAgOzsKKyAgICBlc2FjCitkb25lCisKK2ZvciBBUkcgaW4gIiRAIgorZG8KKyAgICBjYXNlICIkQVJHIiBpbgorICAgICAgICAtLXByZWZpeCkKKyAgICAgICAgICAgIGVjaG8gIiRwcmVmaXgiCisgICAgICAgIDs7CisgICAgICAgIC0tZXhlYy1wcmVmaXgpCisgICAgICAgICAgICBlY2hvICIkZXhlY19wcmVmaXgiCisgICAgICAgIDs7CisgICAgICAgIC0taW5jbHVkZXMpCisgICAgICAgICAgICBlY2hvICIkSU5DRElSICRQTEFUSU5DRElSIgorICAgICAgICA7OworICAgICAgICAtLWNmbGFncykKKyAgICAgICAgICAgIGVjaG8gIiRJTkNESVIgJFBMQVRJTkNESVIgJEJBU0VDRkxBR1MgJENGTEFHUyAkT1BUIgorICAgICAgICA7OworICAgICAgICAtLWxpYnMpCisgICAgICAgICAgICBlY2hvICIkTElCUyIKKyAgICAgICAgOzsKKyAgICAgICAgLS1sZGZsYWdzKQorICAgICAgICAgICAgTElOS0ZPUlNIQVJFRFVTRUQ9CisgICAgICAgICAgICBpZiBbIC16ICIkUFlUSE9ORlJBTUVXT1JLIiBdIDsgdGhlbgorICAgICAgICAgICAgICAgIExJTktGT1JTSEFSRURVU0VEPSRMSU5LRk9SU0hBUkVECisgICAgICAgICAgICBmaQorICAgICAgICAgICAgTElCUExVU0VEPQorICAgICAgICAgICAgaWYgWyAiJFBZX0VOQUJMRV9TSEFSRUQiID0gIjAiIF0gOyB0aGVuCisgICAgICAgICAgICAgICAgTElCUExVU0VEPSItTCRMSUJQTCIKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICBlY2hvICIkTElCUExVU0VEIC1MJGxpYmRpciAkTElCUyAkTElOS0ZPUlNIQVJFRFVTRUQiCisgICAgICAgIDs7CisgICAgICAgIC0tZXh0ZW5zaW9uLXN1ZmZpeCkKKyAgICAgICAgICAgIGVjaG8gIiRTTyIKKyAgICAgICAgOzsKKyAgICAgICAgLS1hYmlmbGFncykKKyAgICAgICAgICAgIGVjaG8gIiRBQklGTEFHUyIKKyAgICAgICAgOzsKKyAgICAgICAgLS1jb25maWdkaXIpCisgICAgICAgICAgICBlY2hvICIkTElCUEwiCisgICAgICAgIDs7Citlc2FjCitkb25lCmRpZmYgLS1naXQgYS9NaXNjL3B5dGhvbi13aW5nNS53cHIgYi9NaXNjL3B5dGhvbi13aW5nNS53cHIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGUxYWU2MwotLS0gL2Rldi9udWxsCisrKyBiL01pc2MvcHl0aG9uLXdpbmc1LndwcgpAQCAtMCwwICsxLDE4IEBACisjIXdpbmcKKyMhdmVyc2lvbj01LjAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBXaW5nIElERSBwcm9qZWN0IGZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK1twcm9qZWN0IGF0dHJpYnV0ZXNdCitwcm9qLmRpcmVjdG9yeS1saXN0ID0gW3snZGlybG9jJzogbG9jKCcuLicpLAorICAgICAgICAgICAgICAgICAgICAgICAgJ2V4Y2x1ZGVzJzogW3UnLmhnJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1J0xpYi91bml0dGVzdC9fX3B5Y2FjaGVfXycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdSdMaWIvdW5pdHRlc3QvdGVzdC9fX3B5Y2FjaGVfXycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdSdMaWIvX19weWNhY2hlX18nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUnYnVpbGQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUnRG9jL2J1aWxkJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAnZmlsdGVyJzogJyonLAorICAgICAgICAgICAgICAgICAgICAgICAgJ2luY2x1ZGVfaGlkZGVuJzogRmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAncmVjdXJzaXZlJzogVHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICd3YXRjaF9mb3JfY2hhbmdlcyc6IFRydWV9XQorcHJvai5maWxlLXR5cGUgPSAnc2hhcmVkJwpkaWZmIC0tZ2l0IGEvTWlzYy9weXRob24ubWFuIGIvTWlzYy9weXRob24ubWFuCmluZGV4IGJjYjNlYzguLmVhOTU0MGMgMTAwNjQ0Ci0tLSBhL01pc2MvcHl0aG9uLm1hbgorKysgYi9NaXNjL3B5dGhvbi5tYW4KQEAgLTI2LDExICsyNiwxNCBAQAogLkIgXC1pCiBdCiBbCi0uQiBcLW0KLS5JIG1vZHVsZS1uYW1lCisuQiBcLUkKIF0KIC5icgogICAgICAgIFsKKy5CIFwtbQorLkkgbW9kdWxlLW5hbWUKK10KK1sKIC5CIFwtcQogXQogWwpAQCAtODQsOCArODcsNyBAQAogLlNIIERFU0NSSVBUSU9OCiBQeXRob24gaXMgYW4gaW50ZXJwcmV0ZWQsIGludGVyYWN0aXZlLCBvYmplY3Qtb3JpZW50ZWQgcHJvZ3JhbW1pbmcKIGxhbmd1YWdlIHRoYXQgY29tYmluZXMgcmVtYXJrYWJsZSBwb3dlciB3aXRoIHZlcnkgY2xlYXIgc3ludGF4LgotRm9yIGFuIGludHJvZHVjdGlvbiB0byBwcm9ncmFtbWluZyBpbiBQeXRob24geW91IGFyZSByZWZlcnJlZCB0byB0aGUKLVB5dGhvbiBUdXRvcmlhbC4KK0ZvciBhbiBpbnRyb2R1Y3Rpb24gdG8gcHJvZ3JhbW1pbmcgaW4gUHl0aG9uLCBzZWUgdGhlIFB5dGhvbiBUdXRvcmlhbC4KIFRoZSBQeXRob24gTGlicmFyeSBSZWZlcmVuY2UgZG9jdW1lbnRzIGJ1aWx0LWluIGFuZCBzdGFuZGFyZCB0eXBlcywKIGNvbnN0YW50cywgZnVuY3Rpb25zIGFuZCBtb2R1bGVzLgogRmluYWxseSwgdGhlIFB5dGhvbiBSZWZlcmVuY2UgTWFudWFsIGRlc2NyaWJlcyB0aGUgc3ludGF4IGFuZApAQCAtMTM5LDYgKzE0MSwxMyBAQAogdXNlZnVsIHRvIGluc3BlY3QgZ2xvYmFsIHZhcmlhYmxlcyBvciBhIHN0YWNrIHRyYWNlIHdoZW4gYSBzY3JpcHQKIHJhaXNlcyBhbiBleGNlcHRpb24uCiAuVFAKKy5CIFwtSQorUnVuIFB5dGhvbiBpbiBpc29sYXRlZCBtb2RlLiBUaGlzIGFsc28gaW1wbGllcyBcZkJcLUVcZlAgYW5kIFxmQlwtc1xmUC4gSW4KK2lzb2xhdGVkIG1vZGUgc3lzLnBhdGggY29udGFpbnMgbmVpdGhlciB0aGUgc2NyaXB04oCZcyBkaXJlY3Rvcnkgbm9yIHRoZSB1c2Vy4oCZcworc2l0ZS1wYWNrYWdlcyBkaXJlY3RvcnkuIEFsbCBQWVRIT04qIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgaWdub3JlZCwgdG9vLgorRnVydGhlciByZXN0cmljdGlvbnMgbWF5IGJlIGltcG9zZWQgdG8gcHJldmVudCB0aGUgdXNlciBmcm9tIGluamVjdGluZworbWFsaWNpb3VzIGNvZGUuCisuVFAKIC5CSSAiXC1tICIgbW9kdWxlLW5hbWUKIFNlYXJjaGVzIAogLkkgc3lzLnBhdGggCkBAIC0zNzQsMTEgKzM4Myw2IEBACiBhbmQKIC5JIHN5cy5wczIKIGluIHRoaXMgZmlsZS4KLS5JUCBQWVRIT05ZMksKLVNldCB0aGlzIHRvIGEgbm9uLWVtcHR5IHN0cmluZyB0byBjYXVzZSB0aGUgXGZJdGltZVxmUCBtb2R1bGUgdG8KLXJlcXVpcmUgZGF0ZXMgc3BlY2lmaWVkIGFzIHN0cmluZ3MgdG8gaW5jbHVkZSA0LWRpZ2l0IHllYXJzLCBvdGhlcndpc2UKLTItZGlnaXQgeWVhcnMgYXJlIGNvbnZlcnRlZCBiYXNlZCBvbiBydWxlcyBkZXNjcmliZWQgaW4gdGhlIFxmSXRpbWVcZlAKLW1vZHVsZSBkb2N1bWVudGF0aW9uLgogLklQIFBZVEhPTk9QVElNSVpFCiBJZiB0aGlzIGlzIHNldCB0byBhIG5vbi1lbXB0eSBzdHJpbmcgaXQgaXMgZXF1aXZhbGVudCB0byBzcGVjaWZ5aW5nCiB0aGUgXGZCXC1PXGZQIG9wdGlvbi4gSWYgc2V0IHRvIGFuIGludGVnZXIsIGl0IGlzIGVxdWl2YWxlbnQgdG8KQEAgLTQzMCwxNyArNDM0LDE3IEBACiBUaGUgaW50ZWdlciBtdXN0IGJlIGEgZGVjaW1hbCBudW1iZXIgaW4gdGhlIHJhbmdlIFswLDQyOTQ5NjcyOTVdLiAgU3BlY2lmeWluZwogdGhlIHZhbHVlIDAgd2lsbCBkaXNhYmxlIGhhc2ggcmFuZG9taXphdGlvbi4KIC5TSCBBVVRIT1IKLVRoZSBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbjogaHR0cDovL3d3dy5weXRob24ub3JnL3BzZgorVGhlIFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uOiBodHRwczovL3d3dy5weXRob24ub3JnL3BzZi8KIC5TSCBJTlRFUk5FVCBSRVNPVVJDRVMKLU1haW4gd2Vic2l0ZTogIGh0dHA6Ly93d3cucHl0aG9uLm9yZy8KK01haW4gd2Vic2l0ZTogIGh0dHBzOi8vd3d3LnB5dGhvbi5vcmcvCiAuYnIKLURvY3VtZW50YXRpb246ICBodHRwOi8vZG9jcy5weXRob24ub3JnL3B5M2svCitEb2N1bWVudGF0aW9uOiAgaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvCiAuYnIKLURldmVsb3BlciByZXNvdXJjZXM6ICBodHRwOi8vZG9jcy5weXRob24ub3JnL2Rldmd1aWRlLworRGV2ZWxvcGVyIHJlc291cmNlczogIGh0dHBzOi8vZG9jcy5weXRob24ub3JnL2Rldmd1aWRlLwogLmJyCi1Eb3dubG9hZHM6ICBodHRwOi8vcHl0aG9uLm9yZy9kb3dubG9hZC8KK0Rvd25sb2FkczogIGh0dHBzOi8vd3d3LnB5dGhvbi5vcmcvZG93bmxvYWRzLwogLmJyCi1Nb2R1bGUgcmVwb3NpdG9yeTogIGh0dHA6Ly9weXBpLnB5dGhvbi5vcmcvCitNb2R1bGUgcmVwb3NpdG9yeTogIGh0dHBzOi8vcHlwaS5weXRob24ub3JnLwogLmJyCiBOZXdzZ3JvdXBzOiAgY29tcC5sYW5nLnB5dGhvbiwgY29tcC5sYW5nLnB5dGhvbi5hbm5vdW5jZQogLlNIIExJQ0VOU0lORwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9TZXR1cC5kaXN0IGIvTW9kdWxlcy9TZXR1cC5kaXN0CmluZGV4IGY0NWRlNWMuLmI2MGI1OTQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvU2V0dXAuZGlzdAorKysgYi9Nb2R1bGVzL1NldHVwLmRpc3QKQEAgLTkxLDcgKzkxLDcgQEAKIFRFU1RQQVRIPQogCiAjIFBhdGggY29tcG9uZW50cyBmb3IgbWFjaGluZS0gb3Igc3lzdGVtLWRlcGVuZGVudCBtb2R1bGVzIGFuZCBzaGFyZWQgbGlicmFyaWVzCi1NQUNIREVQUEFUSD06cGxhdC0kKE1BQ0hERVApCitNQUNIREVQUEFUSD06JChQTEFURElSKQogRVhUUkFNQUNIREVQUEFUSD0KIAogQ09SRVBZVEhPTlBBVEg9JChERVNUUEFUSCkkKFNJVEVQQVRIKSQoVEVTVFBBVEgpJChNQUNIREVQUEFUSCkkKEVYVFJBTUFDSERFUFBBVEgpCkBAIC0xMDIsNyArMTAyLDcgQEAKICMgdmFyaW91cyByZWFzb25zOyB0aGVyZWZvcmUgdGhleSBhcmUgbGlzdGVkIGhlcmUgaW5zdGVhZCBvZiBpbiB0aGUKICMgbm9ybWFsIG9yZGVyLgogCi0jIFRoaXMgb25seSBjb250YWlucyB0aGUgbWluaW1hbCBzZXQgb2YgbW9kdWxlcyByZXF1aXJlZCB0byBydW4gdGhlIAorIyBUaGlzIG9ubHkgY29udGFpbnMgdGhlIG1pbmltYWwgc2V0IG9mIG1vZHVsZXMgcmVxdWlyZWQgdG8gcnVuIHRoZQogIyBzZXR1cC5weSBzY3JpcHQgaW4gdGhlIHJvb3Qgb2YgdGhlIFB5dGhvbiBzb3VyY2UgdHJlZS4KIAogcG9zaXggcG9zaXhtb2R1bGUuYwkJIyBwb3NpeCAoVU5JWCkgc3lzdGVtIGNhbGxzCkBAIC0xMTMsOSArMTEzLDExIEBACiBfY29kZWNzIF9jb2RlY3Ntb2R1bGUuYwkJIyBhY2Nlc3MgdG8gdGhlIGJ1aWx0aW4gY29kZWNzIGFuZCBjb2RlYyByZWdpc3RyeQogX3dlYWtyZWYgX3dlYWtyZWYuYwkJIyB3ZWFrIHJlZmVyZW5jZXMKIF9mdW5jdG9vbHMgX2Z1bmN0b29sc21vZHVsZS5jICAgIyBUb29scyBmb3Igd29ya2luZyB3aXRoIGZ1bmN0aW9ucyBhbmQgY2FsbGFibGUgb2JqZWN0cwotb3BlcmF0b3Igb3BlcmF0b3IuYwkgICAgICAgICMgb3BlcmF0b3IuYWRkKCkgYW5kIHNpbWlsYXIgZ29vZGllcworX29wZXJhdG9yIF9vcGVyYXRvci5jCSAgICAgICAgIyBvcGVyYXRvci5hZGQoKSBhbmQgc2ltaWxhciBnb29kaWVzCiBfY29sbGVjdGlvbnMgX2NvbGxlY3Rpb25zbW9kdWxlLmMgIyBDb250YWluZXIgdHlwZXMKLWl0ZXJ0b29scyBpdGVydG9vbHNtb2R1bGUuYyAgICAjIEZ1bmN0aW9ucyBjcmVhdGluZyBpdGVyYXRvcnMgZm9yIGVmZmljaWVudCBsb29waW5nIAoraXRlcnRvb2xzIGl0ZXJ0b29sc21vZHVsZS5jICAgICMgRnVuY3Rpb25zIGNyZWF0aW5nIGl0ZXJhdG9ycyBmb3IgZWZmaWNpZW50IGxvb3BpbmcKK2F0ZXhpdCBhdGV4aXRtb2R1bGUuYyAgICAgICMgUmVnaXN0ZXIgZnVuY3Rpb25zIHRvIGJlIHJ1biBhdCBpbnRlcnByZXRlci1zaHV0ZG93bgorX3N0YXQgX3N0YXQuYwkJCSMgc3RhdC5oIGludGVyZmFjZQogCiAjIGFjY2VzcyB0byBJU08gQyBsb2NhbGUgc3VwcG9ydAogX2xvY2FsZSBfbG9jYWxlbW9kdWxlLmMgICMgLWxpbnRsCkBAIC0xMzAsMTIgKzEzMiwxNSBAQAogIyBmYXVsdGhhbmRsZXIgbW9kdWxlCiBmYXVsdGhhbmRsZXIgZmF1bHRoYW5kbGVyLmMKIAorIyBkZWJ1ZyB0b29sIHRvIHRyYWNlIG1lbW9yeSBibG9ja3MgYWxsb2NhdGVkIGJ5IFB5dGhvbgorX3RyYWNlbWFsbG9jIF90cmFjZW1hbGxvYy5jIGhhc2h0YWJsZS5jCisKICMgVGhlIHJlc3Qgb2YgdGhlIG1vZHVsZXMgbGlzdGVkIGluIHRoaXMgZmlsZSBhcmUgYWxsIGNvbW1lbnRlZCBvdXQgYnkKICMgZGVmYXVsdC4gIFVzdWFsbHkgdGhleSBjYW4gYmUgZGV0ZWN0ZWQgYW5kIGJ1aWx0IGFzIGR5bmFtaWNhbGx5CiAjIGxvYWRlZCBtb2R1bGVzIGJ5IHRoZSBuZXcgc2V0dXAucHkgc2NyaXB0IGFkZGVkIGluIFB5dGhvbiAyLjEuICBJZgotIyB5b3UncmUgb24gYSBwbGF0Zm9ybSB0aGF0IGRvZXNuJ3Qgc3VwcG9ydCBkeW5hbWljIGxvYWRpbmcsIHdhbnQgdG8gCi0jIGNvbXBpbGUgbW9kdWxlcyBzdGF0aWNhbGx5IGludG8gdGhlIFB5dGhvbiBiaW5hcnksIG9yIG5lZWQgdG8gCi0jIHNwZWNpZnkgc29tZSBvZGQgc2V0IG9mIGNvbXBpbGVyIHN3aXRjaGVzLCB5b3UgY2FuIHVuY29tbWVudCB0aGUgCisjIHlvdSdyZSBvbiBhIHBsYXRmb3JtIHRoYXQgZG9lc24ndCBzdXBwb3J0IGR5bmFtaWMgbG9hZGluZywgd2FudCB0bworIyBjb21waWxlIG1vZHVsZXMgc3RhdGljYWxseSBpbnRvIHRoZSBQeXRob24gYmluYXJ5LCBvciBuZWVkIHRvCisjIHNwZWNpZnkgc29tZSBvZGQgc2V0IG9mIGNvbXBpbGVyIHN3aXRjaGVzLCB5b3UgY2FuIHVuY29tbWVudCB0aGUKICMgYXBwcm9wcmlhdGUgbGluZXMgYmVsb3cuCiAKICMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMTcwLDcgKzE3NSw2IEBACiAjX3dlYWtyZWYgX3dlYWtyZWYuYwkjIGJhc2ljIHdlYWsgcmVmZXJlbmNlIHN1cHBvcnQKICNfdGVzdGNhcGkgX3Rlc3RjYXBpbW9kdWxlLmMgICAgIyBQeXRob24gQyBBUEkgdGVzdCBtb2R1bGUKICNfcmFuZG9tIF9yYW5kb21tb2R1bGUuYwkjIFJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yCi0jYXRleGl0IGF0ZXhpdG1vZHVsZS5jICAgICAgIyBSZWdpc3RlciBmdW5jdGlvbnMgdG8gYmUgcnVuIGF0IGludGVycHJldGVyLXNodXRkb3duCiAjX2VsZW1lbnR0cmVlIC1JJChzcmNkaXIpL01vZHVsZXMvZXhwYXQgLURIQVZFX0VYUEFUX0NPTkZJR19IIC1EVVNFX1BZRVhQQVRfQ0FQSSBfZWxlbWVudHRyZWUuYwkjIGVsZW1lbnR0cmVlIGFjY2VsZXJhdG9yCiAjX3BpY2tsZSBfcGlja2xlLmMJIyBwaWNrbGUgYWNjZWxlcmF0b3IKICNfZGF0ZXRpbWUgX2RhdGV0aW1lbW9kdWxlLmMJIyBkYXRldGltZSBhY2NlbGVyYXRvcgpAQCAtMTg1LDcgKzE4OSw3IEBACiAjIHN1cHBvcnRlZC4uLikKIAogI2ZjbnRsIGZjbnRsbW9kdWxlLmMJIyBmY250bCgyKSBhbmQgaW9jdGwoMikKLSNzcHdkIHNwd2Rtb2R1bGUuYwkJIyBzcHdkKDMpIAorI3Nwd2Qgc3B3ZG1vZHVsZS5jCQkjIHNwd2QoMykKICNncnAgZ3JwbW9kdWxlLmMJCSMgZ3JwKDMpCiAjc2VsZWN0IHNlbGVjdG1vZHVsZS5jCSMgc2VsZWN0KDIpOyBub3Qgb24gYW5jaWVudCBTeXN0ZW0gVgogCkBAIC0zMDEsNyArMzA1LDcgQEAKIAogI19jdXJzZXMgX2N1cnNlc21vZHVsZS5jIC1sY3Vyc2VzIC1sdGVybWNhcAogIyBXcmFwcGVyIGZvciB0aGUgcGFuZWwgbGlicmFyeSB0aGF0J3MgcGFydCBvZiBuY3Vyc2VzIGFuZCBTWVNWIGN1cnNlcy4KLSNfY3Vyc2VzX3BhbmVsIF9jdXJzZXNfcGFuZWwuYyAtbHBhbmVsIC1sbmN1cnNlcyAKKyNfY3Vyc2VzX3BhbmVsIF9jdXJzZXNfcGFuZWwuYyAtbHBhbmVsIC1sbmN1cnNlcwogCiAKICMgTW9kdWxlcyB0aGF0IHByb3ZpZGUgcGVyc2lzdGVudCBkaWN0aW9uYXJ5LWxpa2Ugc2VtYW50aWNzLiAgWW91IHdpbGwKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2Jpc2VjdG1vZHVsZS5jIGIvTW9kdWxlcy9fYmlzZWN0bW9kdWxlLmMKaW5kZXggZmFjYThjZi4uMDJiNTVkMSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fYmlzZWN0bW9kdWxlLmMKKysrIGIvTW9kdWxlcy9fYmlzZWN0bW9kdWxlLmMKQEAgLTYsNiArNiw4IEBACiAjZGVmaW5lIFBZX1NTSVpFX1RfQ0xFQU4KICNpbmNsdWRlICJQeXRob24uaCIKIAorX1B5X0lERU5USUZJRVIoaW5zZXJ0KTsKKwogc3RhdGljIFB5X3NzaXplX3QKIGludGVybmFsX2Jpc2VjdF9yaWdodChQeU9iamVjdCAqbGlzdCwgUHlPYmplY3QgKml0ZW0sIFB5X3NzaXplX3QgbG8sIFB5X3NzaXplX3QgaGkpCiB7CkBAIC05MCw4ICs5Miw2IEBACiAgICAgICAgIGlmIChQeUxpc3RfSW5zZXJ0KGxpc3QsIGluZGV4LCBpdGVtKSA8IDApCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9IGVsc2UgewotICAgICAgICBfUHlfSURFTlRJRklFUihpbnNlcnQpOwotCiAgICAgICAgIHJlc3VsdCA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWQobGlzdCwgJlB5SWRfaW5zZXJ0LCAibk8iLCBpbmRleCwgaXRlbSk7CiAgICAgICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMTk1LDcgKzE5NSw2IEBACiAgICAgICAgIGlmIChQeUxpc3RfSW5zZXJ0KGxpc3QsIGluZGV4LCBpdGVtKSA8IDApCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9IGVsc2UgewotICAgICAgICBfUHlfSURFTlRJRklFUihpbnNlcnQpOwogICAgICAgICByZXN1bHQgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKGxpc3QsICZQeUlkX2luc2VydCwgIm5PIiwgaW5kZXgsIGl0ZW0pOwogICAgICAgICBpZiAocmVzdWx0ID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2J6Mm1vZHVsZS5jIGIvTW9kdWxlcy9fYnoybW9kdWxlLmMKaW5kZXggM2Y3YTZjZi4uZTY1MmY0ZCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fYnoybW9kdWxlLmMKKysrIGIvTW9kdWxlcy9fYnoybW9kdWxlLmMKQEAgLTM2LDggKzM2LDYgQEAKICNkZWZpbmUgUkVMRUFTRV9MT0NLKG9iaikKICNlbmRpZgogCi0jZGVmaW5lIE1JTihYLCBZKSAoKChYKSA8IChZKSkgPyAoWCkgOiAoWSkpCi0KIAogdHlwZWRlZiBzdHJ1Y3QgewogICAgIFB5T2JqZWN0X0hFQUQKQEAgLTU4LDYgKzU2LDggQEAKICNlbmRpZgogfSBCWjJEZWNvbXByZXNzb3I7CiAKK3N0YXRpYyBQeVR5cGVPYmplY3QgQloyQ29tcHJlc3Nvcl9UeXBlOworc3RhdGljIFB5VHlwZU9iamVjdCBCWjJEZWNvbXByZXNzb3JfVHlwZTsKIAogLyogSGVscGVyIGZ1bmN0aW9ucy4gKi8KIApAQCAtMTQ5LDcgKzE0OSw3IEBACiAgICAgYy0+YnpzLm5leHRfaW4gPSBkYXRhOwogICAgIGMtPmJ6cy5hdmFpbF9pbiA9IDA7CiAgICAgYy0+YnpzLm5leHRfb3V0ID0gUHlCeXRlc19BU19TVFJJTkcocmVzdWx0KTsKLSAgICBjLT5ienMuYXZhaWxfb3V0ID0gUHlCeXRlc19HRVRfU0laRShyZXN1bHQpOworICAgIGMtPmJ6cy5hdmFpbF9vdXQgPSBTTUFMTENIVU5LOwogICAgIGZvciAoOzspIHsKICAgICAgICAgY2hhciAqdGhpc19vdXQ7CiAgICAgICAgIGludCBiemVycm9yOwpAQCAtMTU3LDcgKzE1Nyw3IEBACiAgICAgICAgIC8qIE9uIGEgNjQtYml0IHN5c3RlbSwgbGVuIG1pZ2h0IG5vdCBmaXQgaW4gYXZhaWxfaW4gKGFuIHVuc2lnbmVkIGludCkuCiAgICAgICAgICAgIERvIGNvbXByZXNzaW9uIGluIGNodW5rcyBvZiBubyBtb3JlIHRoYW4gVUlOVF9NQVggYnl0ZXMgZWFjaC4gKi8KICAgICAgICAgaWYgKGMtPmJ6cy5hdmFpbF9pbiA9PSAwICYmIGxlbiA+IDApIHsKLSAgICAgICAgICAgIGMtPmJ6cy5hdmFpbF9pbiA9IE1JTihsZW4sIFVJTlRfTUFYKTsKKyAgICAgICAgICAgIGMtPmJ6cy5hdmFpbF9pbiA9ICh1bnNpZ25lZCBpbnQpUHlfTUlOKGxlbiwgVUlOVF9NQVgpOwogICAgICAgICAgICAgbGVuIC09IGMtPmJ6cy5hdmFpbF9pbjsKICAgICAgICAgfQogCkBAIC0xNzMsNyArMTczLDcgQEAKICAgICAgICAgICAgICAgICBjLT5ienMubmV4dF9vdXQgPSBQeUJ5dGVzX0FTX1NUUklORyhyZXN1bHQpICsgZGF0YV9zaXplOwogICAgICAgICAgICAgICAgIGJ1ZmZlcl9sZWZ0ID0gUHlCeXRlc19HRVRfU0laRShyZXN1bHQpIC0gZGF0YV9zaXplOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgYy0+YnpzLmF2YWlsX291dCA9IE1JTihidWZmZXJfbGVmdCwgVUlOVF9NQVgpOworICAgICAgICAgICAgYy0+YnpzLmF2YWlsX291dCA9ICh1bnNpZ25lZCBpbnQpUHlfTUlOKGJ1ZmZlcl9sZWZ0LCBVSU5UX01BWCk7CiAgICAgICAgIH0KIAogICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCkBAIC0xOTgsNDQgKzE5OCw1OCBAQAogICAgIHJldHVybiBOVUxMOwogfQogCi1QeURvY19TVFJWQVIoQloyQ29tcHJlc3Nvcl9jb21wcmVzc19fZG9jX18sCi0iY29tcHJlc3MoZGF0YSkgLT4gYnl0ZXNcbiIKLSJcbiIKLSJQcm92aWRlIGRhdGEgdG8gdGhlIGNvbXByZXNzb3Igb2JqZWN0LiBSZXR1cm5zIGEgY2h1bmsgb2ZcbiIKLSJjb21wcmVzc2VkIGRhdGEgaWYgcG9zc2libGUsIG9yIGInJyBvdGhlcndpc2UuXG4iCi0iXG4iCi0iV2hlbiB5b3UgaGF2ZSBmaW5pc2hlZCBwcm92aWRpbmcgZGF0YSB0byB0aGUgY29tcHJlc3NvciwgY2FsbCB0aGVcbiIKLSJmbHVzaCgpIG1ldGhvZCB0byBmaW5pc2ggdGhlIGNvbXByZXNzaW9uIHByb2Nlc3MuXG4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK291dHB1dCBwcmVzZXQgZmlsZQorbW9kdWxlIF9iejIKK2NsYXNzIF9iejIuQloyQ29tcHJlc3NvciAiQloyQ29tcHJlc3NvciAqIiAiJkJaMkNvbXByZXNzb3JfVHlwZSIKK2NsYXNzIF9iejIuQloyRGVjb21wcmVzc29yICJCWjJEZWNvbXByZXNzb3IgKiIgIiZCWjJEZWNvbXByZXNzb3JfVHlwZSIKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kYTM5YTNlZTVlNmI0YjBkIGlucHV0PWUzYjEzOTkyNGY1ZTE4Y2NdKi8KKworI2luY2x1ZGUgImNsaW5pYy9fYnoybW9kdWxlLmMuaCIKKworLypbY2xpbmljIGlucHV0XQorX2J6Mi5CWjJDb21wcmVzc29yLmNvbXByZXNzCisKKyAgICBkYXRhOiBQeV9idWZmZXIKKyAgICAvCisKK1Byb3ZpZGUgZGF0YSB0byB0aGUgY29tcHJlc3NvciBvYmplY3QuCisKK1JldHVybnMgYSBjaHVuayBvZiBjb21wcmVzc2VkIGRhdGEgaWYgcG9zc2libGUsIG9yIGInJyBvdGhlcndpc2UuCisKK1doZW4geW91IGhhdmUgZmluaXNoZWQgcHJvdmlkaW5nIGRhdGEgdG8gdGhlIGNvbXByZXNzb3IsIGNhbGwgdGhlCitmbHVzaCgpIG1ldGhvZCB0byBmaW5pc2ggdGhlIGNvbXByZXNzaW9uIHByb2Nlc3MuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1CWjJDb21wcmVzc29yX2NvbXByZXNzKEJaMkNvbXByZXNzb3IgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorX2J6Ml9CWjJDb21wcmVzc29yX2NvbXByZXNzX2ltcGwoQloyQ29tcHJlc3NvciAqc2VsZiwgUHlfYnVmZmVyICpkYXRhKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTU5MzY1NDI2ZTk0MWZiY2MgaW5wdXQ9ODVjOTYzMjE4MDcwZmM0Y10qLwogewotICAgIFB5X2J1ZmZlciBidWZmZXI7CiAgICAgUHlPYmplY3QgKnJlc3VsdCA9IE5VTEw7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqOmNvbXByZXNzIiwgJmJ1ZmZlcikpCi0gICAgICAgIHJldHVybiBOVUxMOwotCiAgICAgQUNRVUlSRV9MT0NLKHNlbGYpOwogICAgIGlmIChzZWxmLT5mbHVzaGVkKQogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIkNvbXByZXNzb3IgaGFzIGJlZW4gZmx1c2hlZCIpOwogICAgIGVsc2UKLSAgICAgICAgcmVzdWx0ID0gY29tcHJlc3Moc2VsZiwgYnVmZmVyLmJ1ZiwgYnVmZmVyLmxlbiwgQlpfUlVOKTsKKyAgICAgICAgcmVzdWx0ID0gY29tcHJlc3Moc2VsZiwgZGF0YS0+YnVmLCBkYXRhLT5sZW4sIEJaX1JVTik7CiAgICAgUkVMRUFTRV9MT0NLKHNlbGYpOwotICAgIFB5QnVmZmVyX1JlbGVhc2UoJmJ1ZmZlcik7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotUHlEb2NfU1RSVkFSKEJaMkNvbXByZXNzb3JfZmx1c2hfX2RvY19fLAotImZsdXNoKCkgLT4gYnl0ZXNcbiIKLSJcbiIKLSJGaW5pc2ggdGhlIGNvbXByZXNzaW9uIHByb2Nlc3MuIFJldHVybnMgdGhlIGNvbXByZXNzZWQgZGF0YSBsZWZ0XG4iCi0iaW4gaW50ZXJuYWwgYnVmZmVycy5cbiIKLSJcbiIKLSJUaGUgY29tcHJlc3NvciBvYmplY3QgbWF5IG5vdCBiZSB1c2VkIGFmdGVyIHRoaXMgbWV0aG9kIGlzIGNhbGxlZC5cbiIpOworLypbY2xpbmljIGlucHV0XQorX2J6Mi5CWjJDb21wcmVzc29yLmZsdXNoCisKK0ZpbmlzaCB0aGUgY29tcHJlc3Npb24gcHJvY2Vzcy4KKworUmV0dXJucyB0aGUgY29tcHJlc3NlZCBkYXRhIGxlZnQgaW4gaW50ZXJuYWwgYnVmZmVycy4KKworVGhlIGNvbXByZXNzb3Igb2JqZWN0IG1heSBub3QgYmUgdXNlZCBhZnRlciB0aGlzIG1ldGhvZCBpcyBjYWxsZWQuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1CWjJDb21wcmVzc29yX2ZsdXNoKEJaMkNvbXByZXNzb3IgKnNlbGYsIFB5T2JqZWN0ICpub2FyZ3MpCitfYnoyX0JaMkNvbXByZXNzb3JfZmx1c2hfaW1wbChCWjJDb21wcmVzc29yICpzZWxmKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTNlZjAzZmMxYjA5MmE3MDEgaW5wdXQ9ZDY0NDA1ZDNjNmY3NjY5MV0qLwogewogICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBOVUxMOwogCkBAIC0yNTgsMTQgKzI3Miw0MiBAQAogICAgIHJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgaW50Ci1CWjJDb21wcmVzc29yX2luaXQoQloyQ29tcHJlc3NvciAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCitzdGF0aWMgdm9pZCoKK0JaMl9NYWxsb2Modm9pZCogY3R4LCBpbnQgaXRlbXMsIGludCBzaXplKQogewotICAgIGludCBjb21wcmVzc2xldmVsID0gOTsKKyAgICBpZiAoaXRlbXMgPCAwIHx8IHNpemUgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoKHNpemVfdClpdGVtcyA+IChzaXplX3QpUFlfU1NJWkVfVF9NQVggLyAoc2l6ZV90KXNpemUpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIC8qIFB5TWVtX01hbGxvYygpIGNhbm5vdCBiZSB1c2VkOiBjb21wcmVzcygpIGFuZCBkZWNvbXByZXNzKCkKKyAgICAgICByZWxlYXNlIHRoZSBHSUwgKi8KKyAgICByZXR1cm4gUHlNZW1fUmF3TWFsbG9jKGl0ZW1zICogc2l6ZSk7Cit9CisKK3N0YXRpYyB2b2lkCitCWjJfRnJlZSh2b2lkKiBjdHgsIHZvaWQgKnB0cikKK3sKKyAgICBQeU1lbV9SYXdGcmVlKHB0cik7Cit9CisKKy8qW2NsaW5pYyBpbnB1dF0KK19iejIuQloyQ29tcHJlc3Nvci5fX2luaXRfXworCisgICAgY29tcHJlc3NsZXZlbDogaW50ID0gOQorICAgICAgICBDb21wcmVzc2lvbiBsZXZlbCwgYXMgYSBudW1iZXIgYmV0d2VlbiAxIGFuZCA5LgorICAgIC8KKworQ3JlYXRlIGEgY29tcHJlc3NvciBvYmplY3QgZm9yIGNvbXByZXNzaW5nIGRhdGEgaW5jcmVtZW50YWxseS4KKworRm9yIG9uZS1zaG90IGNvbXByZXNzaW9uLCB1c2UgdGhlIGNvbXByZXNzKCkgZnVuY3Rpb24gaW5zdGVhZC4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworc3RhdGljIGludAorX2J6Ml9CWjJDb21wcmVzc29yX19faW5pdF9fX2ltcGwoQloyQ29tcHJlc3NvciAqc2VsZiwgaW50IGNvbXByZXNzbGV2ZWwpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YzRlNmFkZmQwMjk2MzgyNyBpbnB1dD00ZTFmZjdiODM5NGI2ZTlhXSovCit7CiAgICAgaW50IGJ6ZXJyb3I7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxpOkJaMkNvbXByZXNzb3IiLCAmY29tcHJlc3NsZXZlbCkpCi0gICAgICAgIHJldHVybiAtMTsKICAgICBpZiAoISgxIDw9IGNvbXByZXNzbGV2ZWwgJiYgY29tcHJlc3NsZXZlbCA8PSA5KSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJjb21wcmVzc2xldmVsIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA5Iik7CkBAIC0yODAsNiArMzIyLDkgQEAKICAgICB9CiAjZW5kaWYKIAorICAgIHNlbGYtPmJ6cy5vcGFxdWUgPSBOVUxMOworICAgIHNlbGYtPmJ6cy5iemFsbG9jID0gQloyX01hbGxvYzsKKyAgICBzZWxmLT5ienMuYnpmcmVlID0gQloyX0ZyZWU7CiAgICAgYnplcnJvciA9IEJaMl9iekNvbXByZXNzSW5pdCgmc2VsZi0+YnpzLCBjb21wcmVzc2xldmVsLCAwLCAwKTsKICAgICBpZiAoY2F0Y2hfYnoyX2Vycm9yKGJ6ZXJyb3IpKQogICAgICAgICBnb3RvIGVycm9yOwpAQCAtMzA2LDIyICszNTEsMTIgQEAKIH0KIAogc3RhdGljIFB5TWV0aG9kRGVmIEJaMkNvbXByZXNzb3JfbWV0aG9kc1tdID0gewotICAgIHsiY29tcHJlc3MiLCAgICAgKFB5Q0Z1bmN0aW9uKUJaMkNvbXByZXNzb3JfY29tcHJlc3MsIE1FVEhfVkFSQVJHUywKLSAgICAgQloyQ29tcHJlc3Nvcl9jb21wcmVzc19fZG9jX199LAotICAgIHsiZmx1c2giLCAgICAgICAgKFB5Q0Z1bmN0aW9uKUJaMkNvbXByZXNzb3JfZmx1c2gsICAgIE1FVEhfTk9BUkdTLAotICAgICBCWjJDb21wcmVzc29yX2ZsdXNoX19kb2NfX30sCisgICAgX0JaMl9CWjJDT01QUkVTU09SX0NPTVBSRVNTX01FVEhPRERFRgorICAgIF9CWjJfQloyQ09NUFJFU1NPUl9GTFVTSF9NRVRIT0RERUYKICAgICB7Il9fZ2V0c3RhdGVfXyIsIChQeUNGdW5jdGlvbilCWjJDb21wcmVzc29yX2dldHN0YXRlLCBNRVRIX05PQVJHU30sCiAgICAge05VTEx9CiB9OwogCi1QeURvY19TVFJWQVIoQloyQ29tcHJlc3Nvcl9fZG9jX18sCi0iQloyQ29tcHJlc3Nvcihjb21wcmVzc2xldmVsPTkpXG4iCi0iXG4iCi0iQ3JlYXRlIGEgY29tcHJlc3NvciBvYmplY3QgZm9yIGNvbXByZXNzaW5nIGRhdGEgaW5jcmVtZW50YWxseS5cbiIKLSJcbiIKLSJjb21wcmVzc2xldmVsLCBpZiBnaXZlbiwgbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuIDEgYW5kIDkuXG4iCi0iXG4iCi0iRm9yIG9uZS1zaG90IGNvbXByZXNzaW9uLCB1c2UgdGhlIGNvbXByZXNzKCkgZnVuY3Rpb24gaW5zdGVhZC5cbiIpOwogCiBzdGF0aWMgUHlUeXBlT2JqZWN0IEJaMkNvbXByZXNzb3JfVHlwZSA9IHsKICAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoTlVMTCwgMCkKQEAgLTM0NCw3ICszNzksNyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3NldGF0dHJvICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfYnVmZmVyICovCiAgICAgUHlfVFBGTEFHU19ERUZBVUxULCAgICAgICAgICAgICAgICAgLyogdHBfZmxhZ3MgKi8KLSAgICBCWjJDb21wcmVzc29yX19kb2NfXywgICAgICAgICAgICAgICAvKiB0cF9kb2MgKi8KKyAgICBfYnoyX0JaMkNvbXByZXNzb3JfX19pbml0X19fX2RvY19fLCAgLyogdHBfZG9jICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfdHJhdmVyc2UgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jbGVhciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JpY2hjb21wYXJlICovCkBAIC0zNTksNyArMzk0LDcgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZXNjcl9nZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZXNjcl9zZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kaWN0b2Zmc2V0ICovCi0gICAgKGluaXRwcm9jKUJaMkNvbXByZXNzb3JfaW5pdCwgICAgICAgLyogdHBfaW5pdCAqLworICAgIF9iejJfQloyQ29tcHJlc3Nvcl9fX2luaXRfXywgICAgICAgIC8qIHRwX2luaXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hbGxvYyAqLwogICAgIFB5VHlwZV9HZW5lcmljTmV3LCAgICAgICAgICAgICAgICAgIC8qIHRwX25ldyAqLwogfTsKQEAgLTM3OSwxMCArNDE0LDEwIEBACiAgICAgZC0+YnpzLm5leHRfaW4gPSBkYXRhOwogICAgIC8qIE9uIGEgNjQtYml0IHN5c3RlbSwgbGVuIG1pZ2h0IG5vdCBmaXQgaW4gYXZhaWxfaW4gKGFuIHVuc2lnbmVkIGludCkuCiAgICAgICAgRG8gZGVjb21wcmVzc2lvbiBpbiBjaHVua3Mgb2Ygbm8gbW9yZSB0aGFuIFVJTlRfTUFYIGJ5dGVzIGVhY2guICovCi0gICAgZC0+YnpzLmF2YWlsX2luID0gTUlOKGxlbiwgVUlOVF9NQVgpOworICAgIGQtPmJ6cy5hdmFpbF9pbiA9ICh1bnNpZ25lZCBpbnQpUHlfTUlOKGxlbiwgVUlOVF9NQVgpOwogICAgIGxlbiAtPSBkLT5ienMuYXZhaWxfaW47CiAgICAgZC0+YnpzLm5leHRfb3V0ID0gUHlCeXRlc19BU19TVFJJTkcocmVzdWx0KTsKLSAgICBkLT5ienMuYXZhaWxfb3V0ID0gUHlCeXRlc19HRVRfU0laRShyZXN1bHQpOworICAgIGQtPmJ6cy5hdmFpbF9vdXQgPSBTTUFMTENIVU5LOwogICAgIGZvciAoOzspIHsKICAgICAgICAgY2hhciAqdGhpc19vdXQ7CiAgICAgICAgIGludCBiemVycm9yOwpAQCAtNDA4LDcgKzQ0Myw3IEBACiAgICAgICAgIGlmIChkLT5ienMuYXZhaWxfaW4gPT0gMCkgewogICAgICAgICAgICAgaWYgKGxlbiA9PSAwKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZC0+YnpzLmF2YWlsX2luID0gTUlOKGxlbiwgVUlOVF9NQVgpOworICAgICAgICAgICAgZC0+YnpzLmF2YWlsX2luID0gKHVuc2lnbmVkIGludClQeV9NSU4obGVuLCBVSU5UX01BWCk7CiAgICAgICAgICAgICBsZW4gLT0gZC0+YnpzLmF2YWlsX2luOwogICAgICAgICB9CiAgICAgICAgIGlmIChkLT5ienMuYXZhaWxfb3V0ID09IDApIHsKQEAgLTQxOSw3ICs0NTQsNyBAQAogICAgICAgICAgICAgICAgIGQtPmJ6cy5uZXh0X291dCA9IFB5Qnl0ZXNfQVNfU1RSSU5HKHJlc3VsdCkgKyBkYXRhX3NpemU7CiAgICAgICAgICAgICAgICAgYnVmZmVyX2xlZnQgPSBQeUJ5dGVzX0dFVF9TSVpFKHJlc3VsdCkgLSBkYXRhX3NpemU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBkLT5ienMuYXZhaWxfb3V0ID0gTUlOKGJ1ZmZlcl9sZWZ0LCBVSU5UX01BWCk7CisgICAgICAgICAgICBkLT5ienMuYXZhaWxfb3V0ID0gKHVuc2lnbmVkIGludClQeV9NSU4oYnVmZmVyX2xlZnQsIFVJTlRfTUFYKTsKICAgICAgICAgfQogICAgIH0KICAgICBpZiAoZGF0YV9zaXplICE9IFB5Qnl0ZXNfR0VUX1NJWkUocmVzdWx0KSkKQEAgLTQzMiwzMiArNDY3LDMzIEBACiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKLVB5RG9jX1NUUlZBUihCWjJEZWNvbXByZXNzb3JfZGVjb21wcmVzc19fZG9jX18sCi0iZGVjb21wcmVzcyhkYXRhKSAtPiBieXRlc1xuIgotIlxuIgotIlByb3ZpZGUgZGF0YSB0byB0aGUgZGVjb21wcmVzc29yIG9iamVjdC4gUmV0dXJucyBhIGNodW5rIG9mXG4iCi0iZGVjb21wcmVzc2VkIGRhdGEgaWYgcG9zc2libGUsIG9yIGInJyBvdGhlcndpc2UuXG4iCi0iXG4iCi0iQXR0ZW1wdGluZyB0byBkZWNvbXByZXNzIGRhdGEgYWZ0ZXIgdGhlIGVuZCBvZiBzdHJlYW0gaXMgcmVhY2hlZFxuIgotInJhaXNlcyBhbiBFT0ZFcnJvci4gQW55IGRhdGEgZm91bmQgYWZ0ZXIgdGhlIGVuZCBvZiB0aGUgc3RyZWFtXG4iCi0iaXMgaWdub3JlZCBhbmQgc2F2ZWQgaW4gdGhlIHVudXNlZF9kYXRhIGF0dHJpYnV0ZS5cbiIpOworLypbY2xpbmljIGlucHV0XQorX2J6Mi5CWjJEZWNvbXByZXNzb3IuZGVjb21wcmVzcworCisgICAgZGF0YTogUHlfYnVmZmVyCisgICAgLworCitQcm92aWRlIGRhdGEgdG8gdGhlIGRlY29tcHJlc3NvciBvYmplY3QuCisKK1JldHVybnMgYSBjaHVuayBvZiBkZWNvbXByZXNzZWQgZGF0YSBpZiBwb3NzaWJsZSwgb3IgYicnIG90aGVyd2lzZS4KKworQXR0ZW1wdGluZyB0byBkZWNvbXByZXNzIGRhdGEgYWZ0ZXIgdGhlIGVuZCBvZiBzdHJlYW0gaXMgcmVhY2hlZAorcmFpc2VzIGFuIEVPRkVycm9yLiAgQW55IGRhdGEgZm91bmQgYWZ0ZXIgdGhlIGVuZCBvZiB0aGUgc3RyZWFtCitpcyBpZ25vcmVkIGFuZCBzYXZlZCBpbiB0aGUgdW51c2VkX2RhdGEgYXR0cmlidXRlLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotQloyRGVjb21wcmVzc29yX2RlY29tcHJlc3MoQloyRGVjb21wcmVzc29yICpzZWxmLCBQeU9iamVjdCAqYXJncykKK19iejJfQloyRGVjb21wcmVzc29yX2RlY29tcHJlc3NfaW1wbChCWjJEZWNvbXByZXNzb3IgKnNlbGYsIFB5X2J1ZmZlciAqZGF0YSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0wODZlNGI5OWU2MGNiM2Y2IGlucHV0PTYxNmMyYTZkYjUyNjk5NjFdKi8KIHsKLSAgICBQeV9idWZmZXIgYnVmZmVyOwogICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBOVUxMOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ5KjpkZWNvbXByZXNzIiwgJmJ1ZmZlcikpCi0gICAgICAgIHJldHVybiBOVUxMOwotCiAgICAgQUNRVUlSRV9MT0NLKHNlbGYpOwogICAgIGlmIChzZWxmLT5lb2YpCiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19FT0ZFcnJvciwgIkVuZCBvZiBzdHJlYW0gYWxyZWFkeSByZWFjaGVkIik7CiAgICAgZWxzZQotICAgICAgICByZXN1bHQgPSBkZWNvbXByZXNzKHNlbGYsIGJ1ZmZlci5idWYsIGJ1ZmZlci5sZW4pOworICAgICAgICByZXN1bHQgPSBkZWNvbXByZXNzKHNlbGYsIGRhdGEtPmJ1ZiwgZGF0YS0+bGVuKTsKICAgICBSRUxFQVNFX0xPQ0soc2VsZik7Ci0gICAgUHlCdWZmZXJfUmVsZWFzZSgmYnVmZmVyKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC00NjksMTQgKzUwNSwyMCBAQAogICAgIHJldHVybiBOVUxMOwogfQogCisvKltjbGluaWMgaW5wdXRdCitfYnoyLkJaMkRlY29tcHJlc3Nvci5fX2luaXRfXworCitDcmVhdGUgYSBkZWNvbXByZXNzb3Igb2JqZWN0IGZvciBkZWNvbXByZXNzaW5nIGRhdGEgaW5jcmVtZW50YWxseS4KKworRm9yIG9uZS1zaG90IGRlY29tcHJlc3Npb24sIHVzZSB0aGUgZGVjb21wcmVzcygpIGZ1bmN0aW9uIGluc3RlYWQuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBpbnQKLUJaMkRlY29tcHJlc3Nvcl9pbml0KEJaMkRlY29tcHJlc3NvciAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCitfYnoyX0JaMkRlY29tcHJlc3Nvcl9fX2luaXRfX19pbXBsKEJaMkRlY29tcHJlc3NvciAqc2VsZikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1lNGQyYjliYjg2NmFiOGYxIGlucHV0PTk1ZjY1MDBkY2RhNjAwODhdKi8KIHsKICAgICBpbnQgYnplcnJvcjsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiOkJaMkRlY29tcHJlc3NvciIpKQotICAgICAgICByZXR1cm4gLTE7Ci0KICNpZmRlZiBXSVRIX1RIUkVBRAogICAgIHNlbGYtPmxvY2sgPSBQeVRocmVhZF9hbGxvY2F0ZV9sb2NrKCk7CiAgICAgaWYgKHNlbGYtPmxvY2sgPT0gTlVMTCkgewpAQCAtNTE3LDggKzU1OSw3IEBACiB9CiAKIHN0YXRpYyBQeU1ldGhvZERlZiBCWjJEZWNvbXByZXNzb3JfbWV0aG9kc1tdID0gewotICAgIHsiZGVjb21wcmVzcyIsIChQeUNGdW5jdGlvbilCWjJEZWNvbXByZXNzb3JfZGVjb21wcmVzcywgTUVUSF9WQVJBUkdTLAotICAgICBCWjJEZWNvbXByZXNzb3JfZGVjb21wcmVzc19fZG9jX199LAorICAgIF9CWjJfQloyREVDT01QUkVTU09SX0RFQ09NUFJFU1NfTUVUSE9EREVGCiAgICAgeyJfX2dldHN0YXRlX18iLCAoUHlDRnVuY3Rpb24pQloyRGVjb21wcmVzc29yX2dldHN0YXRlLCBNRVRIX05PQVJHU30sCiAgICAge05VTEx9CiB9OwpAQCAtNTM3LDEzICs1NzgsNiBAQAogICAgIHtOVUxMfQogfTsKIAotUHlEb2NfU1RSVkFSKEJaMkRlY29tcHJlc3Nvcl9fZG9jX18sCi0iQloyRGVjb21wcmVzc29yKClcbiIKLSJcbiIKLSJDcmVhdGUgYSBkZWNvbXByZXNzb3Igb2JqZWN0IGZvciBkZWNvbXByZXNzaW5nIGRhdGEgaW5jcmVtZW50YWxseS5cbiIKLSJcbiIKLSJGb3Igb25lLXNob3QgZGVjb21wcmVzc2lvbiwgdXNlIHRoZSBkZWNvbXByZXNzKCkgZnVuY3Rpb24gaW5zdGVhZC5cbiIpOwotCiBzdGF0aWMgUHlUeXBlT2JqZWN0IEJaMkRlY29tcHJlc3Nvcl9UeXBlID0gewogICAgIFB5VmFyT2JqZWN0X0hFQURfSU5JVChOVUxMLCAwKQogICAgICJfYnoyLkJaMkRlY29tcHJlc3NvciIsICAgICAgICAgICAgIC8qIHRwX25hbWUgKi8KQEAgLTU2NSw3ICs1OTksNyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3NldGF0dHJvICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfYnVmZmVyICovCiAgICAgUHlfVFBGTEFHU19ERUZBVUxULCAgICAgICAgICAgICAgICAgLyogdHBfZmxhZ3MgKi8KLSAgICBCWjJEZWNvbXByZXNzb3JfX2RvY19fLCAgICAgICAgICAgICAvKiB0cF9kb2MgKi8KKyAgICBfYnoyX0JaMkRlY29tcHJlc3Nvcl9fX2luaXRfX19fZG9jX18sICAvKiB0cF9kb2MgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF90cmF2ZXJzZSAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NsZWFyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmljaGNvbXBhcmUgKi8KQEAgLTU4MCw3ICs2MTQsNyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Rlc2NyX2dldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Rlc2NyX3NldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RpY3RvZmZzZXQgKi8KLSAgICAoaW5pdHByb2MpQloyRGVjb21wcmVzc29yX2luaXQsICAgICAvKiB0cF9pbml0ICovCisgICAgX2J6Ml9CWjJEZWNvbXByZXNzb3JfX19pbml0X18sICAgICAgLyogdHBfaW5pdCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FsbG9jICovCiAgICAgUHlUeXBlX0dlbmVyaWNOZXcsICAgICAgICAgICAgICAgICAgLyogdHBfbmV3ICovCiB9OwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY29kZWNzbW9kdWxlLmMgYi9Nb2R1bGVzL19jb2RlY3Ntb2R1bGUuYwppbmRleCA0MDAzN2IxLi41MmYzNDc5IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jb2RlY3Ntb2R1bGUuYworKysgYi9Nb2R1bGVzL19jb2RlY3Ntb2R1bGUuYwpAQCAtNDIsMTUgKzQyLDIxIEBACiAjaW5jbHVkZSA8d2luZG93cy5oPgogI2VuZGlmCiAKKy8qW2NsaW5pYyBpbnB1dF0KK21vZHVsZSBfY29kZWNzCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZGEzOWEzZWU1ZTZiNGIwZCBpbnB1dD1lMTM5MGUzZGEzY2I5ZGViXSovCisKKwogLyogLS0tIFJlZ2lzdHJ5IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIFB5RG9jX1NUUlZBUihyZWdpc3Rlcl9fZG9jX18sCiAicmVnaXN0ZXIoc2VhcmNoX2Z1bmN0aW9uKVxuXAogXG5cCiBSZWdpc3RlciBhIGNvZGVjIHNlYXJjaCBmdW5jdGlvbi4gU2VhcmNoIGZ1bmN0aW9ucyBhcmUgZXhwZWN0ZWQgdG8gdGFrZVxuXAotb25lIGFyZ3VtZW50LCB0aGUgZW5jb2RpbmcgbmFtZSBpbiBhbGwgbG93ZXIgY2FzZSBsZXR0ZXJzLCBhbmQgcmV0dXJuXG5cCi1hIHR1cGxlIG9mIGZ1bmN0aW9ucyAoZW5jb2RlciwgZGVjb2Rlciwgc3RyZWFtX3JlYWRlciwgc3RyZWFtX3dyaXRlcilcblwKLShvciBhIENvZGVjSW5mbyBvYmplY3QpLiIpOworb25lIGFyZ3VtZW50LCB0aGUgZW5jb2RpbmcgbmFtZSBpbiBhbGwgbG93ZXIgY2FzZSBsZXR0ZXJzLCBhbmQgZWl0aGVyXG5cCityZXR1cm4gTm9uZSwgb3IgYSB0dXBsZSBvZiBmdW5jdGlvbnMgKGVuY29kZXIsIGRlY29kZXIsIHN0cmVhbV9yZWFkZXIsXG5cCitzdHJlYW1fd3JpdGVyKSAob3IgYSBDb2RlY0luZm8gb2JqZWN0KS4iKTsKIAogc3RhdGljCiBQeU9iamVjdCAqY29kZWNfcmVnaXN0ZXIoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpzZWFyY2hfZnVuY3Rpb24pCkBAIC0xMzQsNiArMTQwLDUzIEBACiAKIC8qIC0tLSBIZWxwZXJzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCisvKltjbGluaWMgaW5wdXRdCitfY29kZWNzLl9mb3JnZXRfY29kZWMKKworICAgIGVuY29kaW5nOiBzdHIKKyAgICAvCisKK1B1cmdlIHRoZSBuYW1lZCBjb2RlYyBmcm9tIHRoZSBpbnRlcm5hbCBjb2RlYyBsb29rdXAgY2FjaGUKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworUHlEb2NfU1RSVkFSKF9jb2RlY3NfX2ZvcmdldF9jb2RlY19fZG9jX18sCisiX2ZvcmdldF9jb2RlYygkbW9kdWxlLCBlbmNvZGluZywgLylcbiIKKyItLVxuIgorIlxuIgorIlB1cmdlIHRoZSBuYW1lZCBjb2RlYyBmcm9tIHRoZSBpbnRlcm5hbCBjb2RlYyBsb29rdXAgY2FjaGUiKTsKKworI2RlZmluZSBfQ09ERUNTX19GT1JHRVRfQ09ERUNfTUVUSE9EREVGICAgIFwKKyAgICB7Il9mb3JnZXRfY29kZWMiLCAoUHlDRnVuY3Rpb24pX2NvZGVjc19fZm9yZ2V0X2NvZGVjLCBNRVRIX1ZBUkFSR1MsIF9jb2RlY3NfX2ZvcmdldF9jb2RlY19fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX2NvZGVjc19fZm9yZ2V0X2NvZGVjX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgY29uc3QgY2hhciAqZW5jb2RpbmcpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2NvZGVjc19fZm9yZ2V0X2NvZGVjKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIGNvbnN0IGNoYXIgKmVuY29kaW5nOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJzOl9mb3JnZXRfY29kZWMiLAorICAgICAgICAmZW5jb2RpbmcpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX2NvZGVjc19fZm9yZ2V0X2NvZGVjX2ltcGwobW9kdWxlLCBlbmNvZGluZyk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK19jb2RlY3NfX2ZvcmdldF9jb2RlY19pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIGNvbnN0IGNoYXIgKmVuY29kaW5nKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWE3NWU2MzE1OTE3MDJhNWMgaW5wdXQ9MThkNWQ5MmQwZTM4NmMzOF0qLworeworICAgIGlmIChfUHlDb2RlY19Gb3JnZXQoZW5jb2RpbmcpIDwgMCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9OworICAgIFB5X1JFVFVSTl9OT05FOworfQorCiBzdGF0aWMKIFB5T2JqZWN0ICpjb2RlY190dXBsZShQeU9iamVjdCAqdW5pY29kZSwKICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IGxlbikKQEAgLTE4OSw5ICsyNDIsOSBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgaTsKLSAgICAgICAgcmVnaXN0ZXIgY2hhciBjOwotICAgICAgICByZWdpc3RlciBjaGFyICpwID0gUHlCeXRlc19BU19TVFJJTkcodik7CisgICAgICAgIFB5X3NzaXplX3QgaTsKKyAgICAgICAgY2hhciBjOworICAgICAgICBjaGFyICpwID0gUHlCeXRlc19BU19TVFJJTkcodik7CiAKICAgICAgICAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgewogICAgICAgICAgICAgLyogVGhlcmUncyBhdCBsZWFzdCBlbm91Z2ggcm9vbSBmb3IgYSBoZXggZXNjYXBlICovCkBAIC0yMzEsOCArMjg0LDYgQEAKIHsKICAgICBQeU9iamVjdCAqb2JqOwogICAgIGNvbnN0IGNoYXIgKmVycm9ycyA9IE5VTEw7Ci0gICAgY29uc3QgY2hhciAqZGF0YTsKLSAgICBQeV9zc2l6ZV90IHNpemU7CiAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk98ejp1bmljb2RlX2ludGVybmFsX2RlY29kZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICZvYmosICZlcnJvcnMpKQpAQCAtMjQ1LDExICsyOTYsMTYgQEAKICAgICAgICAgcmV0dXJuIGNvZGVjX3R1cGxlKG9iaiwgUHlVbmljb2RlX0dFVF9MRU5HVEgob2JqKSk7CiAgICAgfQogICAgIGVsc2UgewotICAgICAgICBpZiAoUHlPYmplY3RfQXNSZWFkQnVmZmVyKG9iaiwgKGNvbnN0IHZvaWQgKiopJmRhdGEsICZzaXplKSkKKyAgICAgICAgUHlfYnVmZmVyIHZpZXc7CisgICAgICAgIFB5T2JqZWN0ICpyZXN1bHQ7CisgICAgICAgIGlmIChQeU9iamVjdF9HZXRCdWZmZXIob2JqLCAmdmlldywgUHlCVUZfU0lNUExFKSAhPSAwKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICAgICAgcmV0dXJuIGNvZGVjX3R1cGxlKF9QeVVuaWNvZGVfRGVjb2RlVW5pY29kZUludGVybmFsKGRhdGEsIHNpemUsIGVycm9ycyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplKTsKKyAgICAgICAgcmVzdWx0ID0gY29kZWNfdHVwbGUoCisgICAgICAgICAgICAgICAgX1B5VW5pY29kZV9EZWNvZGVVbmljb2RlSW50ZXJuYWwodmlldy5idWYsIHZpZXcubGVuLCBlcnJvcnMpLAorICAgICAgICAgICAgICAgIHZpZXcubGVuKTsKKyAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmlldyk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogfQogCkBAIC02NzQsOCArNzMwLDYgQEAKIHsKICAgICBQeU9iamVjdCAqb2JqOwogICAgIGNvbnN0IGNoYXIgKmVycm9ycyA9IE5VTEw7Ci0gICAgY29uc3QgY2hhciAqZGF0YTsKLSAgICBQeV9zc2l6ZV90IGxlbiwgc2l6ZTsKIAogICAgIGlmIChQeUVycl9XYXJuRXgoUHlFeGNfRGVwcmVjYXRpb25XYXJuaW5nLAogICAgICAgICAgICAgICAgICAgICAgInVuaWNvZGVfaW50ZXJuYWwgY29kZWMgaGFzIGJlZW4gZGVwcmVjYXRlZCIsCkBAIC02ODgsNiArNzQyLDcgQEAKIAogICAgIGlmIChQeVVuaWNvZGVfQ2hlY2sob2JqKSkgewogICAgICAgICBQeV9VTklDT0RFICp1OworICAgICAgICBQeV9zc2l6ZV90IGxlbiwgc2l6ZTsKIAogICAgICAgICBpZiAoUHlVbmljb2RlX1JFQURZKG9iaikgPCAwKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC03MDIsOSArNzU3LDEzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfR0VUX0xFTkdUSChvYmopKTsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIGlmIChQeU9iamVjdF9Bc1JlYWRCdWZmZXIob2JqLCAoY29uc3Qgdm9pZCAqKikmZGF0YSwgJnNpemUpKQorICAgICAgICBQeV9idWZmZXIgdmlldzsKKyAgICAgICAgUHlPYmplY3QgKnJlc3VsdDsKKyAgICAgICAgaWYgKFB5T2JqZWN0X0dldEJ1ZmZlcihvYmosICZ2aWV3LCBQeUJVRl9TSU1QTEUpICE9IDApCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgcmV0dXJuIGNvZGVjX3R1cGxlKFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoZGF0YSwgc2l6ZSksIHNpemUpOworICAgICAgICByZXN1bHQgPSBjb2RlY190dXBsZShQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKHZpZXcuYnVmLCB2aWV3LmxlbiksIHZpZXcubGVuKTsKKyAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmlldyk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogfQogCkBAIC0xMTY4LDYgKzEyMjcsNyBAQAogICAgICAgICByZWdpc3Rlcl9lcnJvcl9fZG9jX199LAogICAgIHsibG9va3VwX2Vycm9yIiwgICAgICAgICAgICBsb29rdXBfZXJyb3IsICAgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHUywKICAgICAgICAgbG9va3VwX2Vycm9yX19kb2NfX30sCisgICAgX0NPREVDU19fRk9SR0VUX0NPREVDX01FVEhPRERFRgogICAgIHtOVUxMLCBOVUxMfSAgICAgICAgICAgICAgICAvKiBzZW50aW5lbCAqLwogfTsKIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY29sbGVjdGlvbnNtb2R1bGUuYyBiL01vZHVsZXMvX2NvbGxlY3Rpb25zbW9kdWxlLmMKaW5kZXggM2NmNDc2NC4uNjU4MDNhNCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY29sbGVjdGlvbnNtb2R1bGUuYworKysgYi9Nb2R1bGVzL19jb2xsZWN0aW9uc21vZHVsZS5jCkBAIC0zLDMwICszLDMyIEBACiAKIC8qIGNvbGxlY3Rpb25zIG1vZHVsZSBpbXBsZW1lbnRhdGlvbiBvZiBhIGRlcXVlKCkgZGF0YXR5cGUKICAgIFdyaXR0ZW4gYW5kIG1haW50YWluZWQgYnkgUmF5bW9uZCBELiBIZXR0aW5nZXIgPHB5dGhvbkByY24uY29tPgotICAgQ29weXJpZ2h0IChjKSAyMDA0IFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICAgQ29weXJpZ2h0IChjKSAyMDA0LTIwMTMgUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgICBBbGwgcmlnaHRzIHJlc2VydmVkLgogKi8KIAogLyogVGhlIGJsb2NrIGxlbmd0aCBtYXkgYmUgc2V0IHRvIGFueSBudW1iZXIgb3ZlciAxLiAgTGFyZ2VyIG51bWJlcnMKLSAqIHJlZHVjZSB0aGUgbnVtYmVyIG9mIGNhbGxzIHRvIHRoZSBtZW1vcnkgYWxsb2NhdG9yIGJ1dCB0YWtlIG1vcmUKLSAqIG1lbW9yeS4gIElkZWFsbHksIEJMT0NLTEVOIHNob3VsZCBiZSBzZXQgd2l0aCBhbiBleWUgdG8gdGhlCi0gKiBsZW5ndGggb2YgYSBjYWNoZSBsaW5lLgorICogcmVkdWNlIHRoZSBudW1iZXIgb2YgY2FsbHMgdG8gdGhlIG1lbW9yeSBhbGxvY2F0b3IsIGdpdmUgZmFzdGVyCisgKiBpbmRleGluZyBhbmQgcm90YXRpb24sIGFuZCByZWR1Y2UgdGhlIGxpbms6OmRhdGEgb3ZlcmhlYWQgcmF0aW8uCisgKgorICogSWRlYWxseSwgdGhlIGJsb2NrIGxlbmd0aCB3aWxsIGJlIHNldCB0byB0d28gbGVzcyB0aGFuIHNvbWUKKyAqIG11bHRpcGxlIG9mIHRoZSBjYWNoZS1saW5lIGxlbmd0aCAoc28gdGhhdCB0aGUgZnVsbCBibG9jaworICogaW5jbHVkaW5nIHRoZSBsZWZ0bGluayBhbmQgcmlnaHRsaW5rIHdpbGwgZml0IG5lYXRseSBpbnRvCisgKiBjYWNoZSBsaW5lcykuCiAgKi8KIAogI2RlZmluZSBCTE9DS0xFTiA2MgogI2RlZmluZSBDRU5URVIgKChCTE9DS0xFTiAtIDEpIC8gMikKIAogLyogQSBgZGVxdWVvYmplY3RgIGlzIGNvbXBvc2VkIG9mIGEgZG91Ymx5LWxpbmtlZCBsaXN0IG9mIGBibG9ja2Agbm9kZXMuCi0gKiBUaGlzIGxpc3QgaXMgbm90IGNpcmN1bGFyICh0aGUgbGVmdG1vc3QgYmxvY2sgaGFzIGxlZnRsaW5rPT1OVUxMLAotICogYW5kIHRoZSByaWdodG1vc3QgYmxvY2sgaGFzIHJpZ2h0bGluaz09TlVMTCkuICBBIGRlcXVlIGQncyBmaXJzdAotICogZWxlbWVudCBpcyBhdCBkLmxlZnRibG9ja1tsZWZ0aW5kZXhdIGFuZCBpdHMgbGFzdCBlbGVtZW50IGlzIGF0Ci0gKiBkLnJpZ2h0YmxvY2tbcmlnaHRpbmRleF07IG5vdGUgdGhhdCwgdW5saWtlIGFzIGZvciBQeXRob24gc2xpY2UKLSAqIGluZGljZXMsIHRoZXNlIGluZGljZXMgYXJlIGluY2x1c2l2ZSBvbiBib3RoIGVuZHMuICBCeSBiZWluZyBpbmNsdXNpdmUKLSAqIG9uIGJvdGggZW5kcywgYWxnb3JpdGhtcyBmb3IgbGVmdCBhbmQgcmlnaHQgb3BlcmF0aW9ucyBiZWNvbWUKLSAqIHN5bW1ldHJpY2FsIHdoaWNoIHNpbXBsaWZpZXMgdGhlIGRlc2lnbi4KLSAqCiAgKiBUaGUgbGlzdCBvZiBibG9ja3MgaXMgbmV2ZXIgZW1wdHksIHNvIGQubGVmdGJsb2NrIGFuZCBkLnJpZ2h0YmxvY2sKLSAqIGFyZSBuZXZlciBlcXVhbCB0byBOVUxMLgorICogYXJlIG5ldmVyIGVxdWFsIHRvIE5VTEwuICBUaGUgbGlzdCBpcyBub3QgY2lyY3VsYXIuCisgKgorICogQSBkZXF1ZSBkJ3MgZmlyc3QgZWxlbWVudCBpcyBhdCBkLmxlZnRibG9ja1tsZWZ0aW5kZXhdCisgKiBhbmQgaXRzIGxhc3QgZWxlbWVudCBpcyBhdCBkLnJpZ2h0YmxvY2tbcmlnaHRpbmRleF0uCisgKiBVbmxpa2UgUHl0aG9uIHNsaWNlIGluZGljZXMsIHRoZXNlIGluZGljZXMgYXJlIGluY2x1c2l2ZQorICogb24gYm90aCBlbmRzLiAgVGhpcyBtYWtlcyB0aGUgYWxnb3JpdGhtcyBmb3IgbGVmdCBhbmQKKyAqIHJpZ2h0IG9wZXJhdGlvbnMgbW9yZSBzeW1tZXRyaWNhbCBhbmQgc2ltcGxpZmllcyB0aGUgZGVzaWduLgogICoKICAqIFRoZSBpbmRpY2VzLCBkLmxlZnRpbmRleCBhbmQgZC5yaWdodGluZGV4IGFyZSBhbHdheXMgaW4gdGhlIHJhbmdlCiAgKiAgICAgMCA8PSBpbmRleCA8IEJMT0NLTEVOLgpAQCAtNDcsNDIgKzQ5LDYwIEBACiAKIHR5cGVkZWYgc3RydWN0IEJMT0NLIHsKICAgICBzdHJ1Y3QgQkxPQ0sgKmxlZnRsaW5rOwotICAgIHN0cnVjdCBCTE9DSyAqcmlnaHRsaW5rOwogICAgIFB5T2JqZWN0ICpkYXRhW0JMT0NLTEVOXTsKKyAgICBzdHJ1Y3QgQkxPQ0sgKnJpZ2h0bGluazsKIH0gYmxvY2s7CiAKKy8qIEZvciBkZWJ1ZyBidWlsZHMsIGFkZCBlcnJvciBjaGVja2luZyB0byB0cmFjayB0aGUgZW5kcG9pbnRzCisgKiBpbiB0aGUgY2hhaW4gb2YgbGlua3MuICBUaGUgZ29hbCBpcyB0byBtYWtlIHN1cmUgdGhhdCBsaW5rCisgKiBhc3NpZ25tZW50cyBvbmx5IHRha2UgcGxhY2UgYXQgZW5kcG9pbnRzIHNvIHRoYXQgbGlua3MgYWxyZWFkeQorICogaW4gdXNlIGRvIG5vdCBnZXQgb3ZlcndyaXR0ZW4uCisgKgorICogQ0hFQ0tfRU5EIHNob3VsZCBoYXBwZW4gYmVmb3JlIGVhY2ggYXNzaWdubWVudCB0byBhIGJsb2NrJ3MgbGluayBmaWVsZC4KKyAqIE1BUktfRU5EIHNob3VsZCBoYXBwZW4gd2hlbmV2ZXIgYSBsaW5rIGZpZWxkIGJlY29tZXMgYSBuZXcgZW5kcG9pbnQuCisgKiBUaGlzIGhhcHBlbnMgd2hlbiBuZXcgYmxvY2tzIGFyZSBhZGRlZCBvciB3aGVuZXZlciBhbiBleGlzdGluZworICogYmxvY2sgaXMgZnJlZWQgbGVhdmluZyBhbm90aGVyIGV4aXN0aW5nIGJsb2NrIGFzIHRoZSBuZXcgZW5kcG9pbnQuCisgKi8KKworI2lmbmRlZiBOREVCVUcKKyNkZWZpbmUgTUFSS19FTkQobGluaykgIGxpbmsgPSBOVUxMOworI2RlZmluZSBDSEVDS19FTkQobGluaykgYXNzZXJ0KGxpbmsgPT0gTlVMTCk7CisjZGVmaW5lIENIRUNLX05PVF9FTkQobGluaykgYXNzZXJ0KGxpbmsgIT0gTlVMTCk7CisjZWxzZQorI2RlZmluZSBNQVJLX0VORChsaW5rKQorI2RlZmluZSBDSEVDS19FTkQobGluaykKKyNkZWZpbmUgQ0hFQ0tfTk9UX0VORChsaW5rKQorI2VuZGlmCisKKy8qIEEgc2ltcGxlIGZyZWVsaXN0aW5nIHNjaGVtZSBpcyB1c2VkIHRvIG1pbmltaXplIGNhbGxzIHRvIHRoZSBtZW1vcnkKKyAgIGFsbG9jYXRvci4gIEl0IGFjY29tb2RhdGVzIGNvbW1vbiB1c2UgY2FzZXMgd2hlcmUgbmV3IGJsb2NrcyBhcmUgYmVpbmcKKyAgIGFkZGVkIGF0IGFib3V0IHRoZSBzYW1lIHJhdGUgYXMgb2xkIGJsb2NrcyBhcmUgYmVpbmcgZnJlZWQuCisgKi8KKwogI2RlZmluZSBNQVhGUkVFQkxPQ0tTIDEwCiBzdGF0aWMgUHlfc3NpemVfdCBudW1mcmVlYmxvY2tzID0gMDsKIHN0YXRpYyBibG9jayAqZnJlZWJsb2Nrc1tNQVhGUkVFQkxPQ0tTXTsKIAogc3RhdGljIGJsb2NrICoKLW5ld2Jsb2NrKGJsb2NrICpsZWZ0bGluaywgYmxvY2sgKnJpZ2h0bGluaywgUHlfc3NpemVfdCBsZW4pIHsKK25ld2Jsb2NrKFB5X3NzaXplX3QgbGVuKSB7CiAgICAgYmxvY2sgKmI7Ci0gICAgLyogVG8gcHJldmVudCBsZW4gZnJvbSBvdmVyZmxvd2luZyBQWV9TU0laRV9UX01BWCBvbiA2NC1iaXQgbWFjaGluZXMsIHdlCi0gICAgICogcmVmdXNlIHRvIGFsbG9jYXRlIG5ldyBibG9ja3MgaWYgdGhlIGN1cnJlbnQgbGVuIGlzIGRhbmdlcm91c2x5Ci0gICAgICogY2xvc2UuICBUaGVyZSBpcyBzb21lIGV4dHJhIG1hcmdpbiB0byBwcmV2ZW50IHNwdXJpb3VzIGFyaXRobWV0aWMKLSAgICAgKiBvdmVyZmxvd3MgYXQgdmFyaW91cyBwbGFjZXMuICBUaGUgZm9sbG93aW5nIGNoZWNrIGVuc3VyZXMgdGhhdAotICAgICAqIHRoZSBibG9ja3MgYWxsb2NhdGVkIHRvIHRoZSBkZXF1ZSwgaW4gdGhlIHdvcnN0IGNhc2UsIGNhbiBvbmx5Ci0gICAgICogaGF2ZSBQWV9TU0laRV9UX01BWC0yIGVudHJpZXMgaW4gdG90YWwuCi0gICAgICovCisgICAgLyogVG8gcHJldmVudCBsZW4gZnJvbSBvdmVyZmxvd2luZyBQWV9TU0laRV9UX01BWCwgd2UgcmVmdXNlIHRvCisgICAgICogYWxsb2NhdGUgbmV3IGJsb2NrcyBpZiB0aGUgY3VycmVudCBsZW4gaXMgbmVhcmluZyBvdmVyZmxvdy4gKi8KICAgICBpZiAobGVuID49IFBZX1NTSVpFX1RfTUFYIC0gMipCTE9DS0xFTikgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJjYW5ub3QgYWRkIG1vcmUgYmxvY2tzIHRvIHRoZSBkZXF1ZSIpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgaWYgKG51bWZyZWVibG9ja3MpIHsKLSAgICAgICAgbnVtZnJlZWJsb2NrcyAtPSAxOwotICAgICAgICBiID0gZnJlZWJsb2Nrc1tudW1mcmVlYmxvY2tzXTsKLSAgICB9IGVsc2UgewotICAgICAgICBiID0gUHlNZW1fTWFsbG9jKHNpemVvZihibG9jaykpOwotICAgICAgICBpZiAoYiA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KKyAgICAgICAgbnVtZnJlZWJsb2Nrcy0tOworICAgICAgICByZXR1cm4gZnJlZWJsb2Nrc1tudW1mcmVlYmxvY2tzXTsKICAgICB9Ci0gICAgYi0+bGVmdGxpbmsgPSBsZWZ0bGluazsKLSAgICBiLT5yaWdodGxpbmsgPSByaWdodGxpbms7Ci0gICAgcmV0dXJuIGI7CisgICAgYiA9IFB5TWVtX01hbGxvYyhzaXplb2YoYmxvY2spKTsKKyAgICBpZiAoYiAhPSBOVUxMKSB7CisgICAgICAgIHJldHVybiBiOworICAgIH0KKyAgICBQeUVycl9Ob01lbW9yeSgpOworICAgIHJldHVybiBOVUxMOwogfQogCiBzdGF0aWMgdm9pZApAQCAtOTcsMTQgKzExNywxMyBAQAogfQogCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgUHlPYmplY3RfSEVBRAorICAgIFB5T2JqZWN0X1ZBUl9IRUFECiAgICAgYmxvY2sgKmxlZnRibG9jazsKICAgICBibG9jayAqcmlnaHRibG9jazsKICAgICBQeV9zc2l6ZV90IGxlZnRpbmRleDsgICAgICAgLyogaW4gcmFuZ2UoQkxPQ0tMRU4pICovCiAgICAgUHlfc3NpemVfdCByaWdodGluZGV4OyAgICAgIC8qIGluIHJhbmdlKEJMT0NLTEVOKSAqLwotICAgIFB5X3NzaXplX3QgbGVuOworICAgIGxvbmcgc3RhdGU7ICAgICAgICAgICAgICAgICAvKiBpbmNyZW1lbnRlZCB3aGVuZXZlciB0aGUgaW5kaWNlcyBtb3ZlICovCiAgICAgUHlfc3NpemVfdCBtYXhsZW47Ci0gICAgbG9uZyBzdGF0ZTsgICAgICAgICAvKiBpbmNyZW1lbnRlZCB3aGVuZXZlciB0aGUgaW5kaWNlcyBtb3ZlICovCiAgICAgUHlPYmplY3QgKndlYWtyZWZsaXN0OyAvKiBMaXN0IG9mIHdlYWsgcmVmZXJlbmNlcyAqLwogfSBkZXF1ZW9iamVjdDsKIApAQCAtMTE4LDkgKzEzNyw5IEBACiAgKi8KIAogI2RlZmluZSBUUklNKGQsIHBvcGZ1bmN0aW9uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoZC0+bWF4bGVuICE9IC0xICYmIGQtPmxlbiA+IGQtPm1heGxlbikgeyAgICAgICAgICAgICAgICBcCisgICAgaWYgKGQtPm1heGxlbiAhPSAtMSAmJiBQeV9TSVpFKGQpID4gZC0+bWF4bGVuKSB7ICAgICAgIFwKICAgICAgICAgUHlPYmplY3QgKnJ2ID0gcG9wZnVuY3Rpb24oZCwgTlVMTCk7ICAgICAgICAgICAgICAgIFwKLSAgICAgICAgYXNzZXJ0KHJ2ICE9IE5VTEwgICYmICBkLT5sZW4gPD0gZC0+bWF4bGVuKTsgICAgICAgIFwKKyAgICAgICAgYXNzZXJ0KHJ2ICE9IE5VTEwgICYmICBQeV9TSVpFKGQpIDw9IGQtPm1heGxlbik7ICAgIFwKICAgICAgICAgUHlfREVDUkVGKHJ2KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICB9CiAKQEAgLTEzNywxOCArMTU2LDIwIEBACiAgICAgaWYgKGRlcXVlID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgYiA9IG5ld2Jsb2NrKE5VTEwsIE5VTEwsIDApOworICAgIGIgPSBuZXdibG9jaygwKTsKICAgICBpZiAoYiA9PSBOVUxMKSB7CiAgICAgICAgIFB5X0RFQ1JFRihkZXF1ZSk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KKyAgICBNQVJLX0VORChiLT5sZWZ0bGluayk7CisgICAgTUFSS19FTkQoYi0+cmlnaHRsaW5rKTsKIAogICAgIGFzc2VydChCTE9DS0xFTiA+PSAyKTsKICAgICBkZXF1ZS0+bGVmdGJsb2NrID0gYjsKICAgICBkZXF1ZS0+cmlnaHRibG9jayA9IGI7CiAgICAgZGVxdWUtPmxlZnRpbmRleCA9IENFTlRFUiArIDE7CiAgICAgZGVxdWUtPnJpZ2h0aW5kZXggPSBDRU5URVI7Ci0gICAgZGVxdWUtPmxlbiA9IDA7CisgICAgUHlfU0laRShkZXF1ZSkgPSAwOwogICAgIGRlcXVlLT5zdGF0ZSA9IDA7CiAgICAgZGVxdWUtPndlYWtyZWZsaXN0ID0gTlVMTDsKICAgICBkZXF1ZS0+bWF4bGVuID0gLTE7CkBAIC0xNjIsMTcgKzE4MywxNyBAQAogICAgIFB5T2JqZWN0ICppdGVtOwogICAgIGJsb2NrICpwcmV2YmxvY2s7CiAKLSAgICBpZiAoZGVxdWUtPmxlbiA9PSAwKSB7CisgICAgaWYgKFB5X1NJWkUoZGVxdWUpID09IDApIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0luZGV4RXJyb3IsICJwb3AgZnJvbSBhbiBlbXB0eSBkZXF1ZSIpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgaXRlbSA9IGRlcXVlLT5yaWdodGJsb2NrLT5kYXRhW2RlcXVlLT5yaWdodGluZGV4XTsKICAgICBkZXF1ZS0+cmlnaHRpbmRleC0tOwotICAgIGRlcXVlLT5sZW4tLTsKKyAgICBQeV9TSVpFKGRlcXVlKS0tOwogICAgIGRlcXVlLT5zdGF0ZSsrOwogCiAgICAgaWYgKGRlcXVlLT5yaWdodGluZGV4ID09IC0xKSB7Ci0gICAgICAgIGlmIChkZXF1ZS0+bGVuID09IDApIHsKKyAgICAgICAgaWYgKFB5X1NJWkUoZGVxdWUpID09IDApIHsKICAgICAgICAgICAgIGFzc2VydChkZXF1ZS0+bGVmdGJsb2NrID09IGRlcXVlLT5yaWdodGJsb2NrKTsKICAgICAgICAgICAgIGFzc2VydChkZXF1ZS0+bGVmdGluZGV4ID09IGRlcXVlLT5yaWdodGluZGV4KzEpOwogICAgICAgICAgICAgLyogcmUtY2VudGVyIGluc3RlYWQgb2YgZnJlZWluZyBhIGJsb2NrICovCkBAIC0xODIsNyArMjAzLDggQEAKICAgICAgICAgICAgIHByZXZibG9jayA9IGRlcXVlLT5yaWdodGJsb2NrLT5sZWZ0bGluazsKICAgICAgICAgICAgIGFzc2VydChkZXF1ZS0+bGVmdGJsb2NrICE9IGRlcXVlLT5yaWdodGJsb2NrKTsKICAgICAgICAgICAgIGZyZWVibG9jayhkZXF1ZS0+cmlnaHRibG9jayk7Ci0gICAgICAgICAgICBwcmV2YmxvY2stPnJpZ2h0bGluayA9IE5VTEw7CisgICAgICAgICAgICBDSEVDS19OT1RfRU5EKHByZXZibG9jayk7CisgICAgICAgICAgICBNQVJLX0VORChwcmV2YmxvY2stPnJpZ2h0bGluayk7CiAgICAgICAgICAgICBkZXF1ZS0+cmlnaHRibG9jayA9IHByZXZibG9jazsKICAgICAgICAgICAgIGRlcXVlLT5yaWdodGluZGV4ID0gQkxPQ0tMRU4gLSAxOwogICAgICAgICB9CkBAIC0xOTgsMTggKzIyMCwxOCBAQAogICAgIFB5T2JqZWN0ICppdGVtOwogICAgIGJsb2NrICpwcmV2YmxvY2s7CiAKLSAgICBpZiAoZGVxdWUtPmxlbiA9PSAwKSB7CisgICAgaWYgKFB5X1NJWkUoZGVxdWUpID09IDApIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0luZGV4RXJyb3IsICJwb3AgZnJvbSBhbiBlbXB0eSBkZXF1ZSIpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgYXNzZXJ0KGRlcXVlLT5sZWZ0YmxvY2sgIT0gTlVMTCk7CiAgICAgaXRlbSA9IGRlcXVlLT5sZWZ0YmxvY2stPmRhdGFbZGVxdWUtPmxlZnRpbmRleF07CiAgICAgZGVxdWUtPmxlZnRpbmRleCsrOwotICAgIGRlcXVlLT5sZW4tLTsKKyAgICBQeV9TSVpFKGRlcXVlKS0tOwogICAgIGRlcXVlLT5zdGF0ZSsrOwogCiAgICAgaWYgKGRlcXVlLT5sZWZ0aW5kZXggPT0gQkxPQ0tMRU4pIHsKLSAgICAgICAgaWYgKGRlcXVlLT5sZW4gPT0gMCkgeworICAgICAgICBpZiAoUHlfU0laRShkZXF1ZSkgPT0gMCkgewogICAgICAgICAgICAgYXNzZXJ0KGRlcXVlLT5sZWZ0YmxvY2sgPT0gZGVxdWUtPnJpZ2h0YmxvY2spOwogICAgICAgICAgICAgYXNzZXJ0KGRlcXVlLT5sZWZ0aW5kZXggPT0gZGVxdWUtPnJpZ2h0aW5kZXgrMSk7CiAgICAgICAgICAgICAvKiByZS1jZW50ZXIgaW5zdGVhZCBvZiBmcmVlaW5nIGEgYmxvY2sgKi8KQEAgLTIxOSw4ICsyNDEsOCBAQAogICAgICAgICAgICAgYXNzZXJ0KGRlcXVlLT5sZWZ0YmxvY2sgIT0gZGVxdWUtPnJpZ2h0YmxvY2spOwogICAgICAgICAgICAgcHJldmJsb2NrID0gZGVxdWUtPmxlZnRibG9jay0+cmlnaHRsaW5rOwogICAgICAgICAgICAgZnJlZWJsb2NrKGRlcXVlLT5sZWZ0YmxvY2spOwotICAgICAgICAgICAgYXNzZXJ0KHByZXZibG9jayAhPSBOVUxMKTsKLSAgICAgICAgICAgIHByZXZibG9jay0+bGVmdGxpbmsgPSBOVUxMOworICAgICAgICAgICAgQ0hFQ0tfTk9UX0VORChwcmV2YmxvY2spOworICAgICAgICAgICAgTUFSS19FTkQocHJldmJsb2NrLT5sZWZ0bGluayk7CiAgICAgICAgICAgICBkZXF1ZS0+bGVmdGJsb2NrID0gcHJldmJsb2NrOwogICAgICAgICAgICAgZGVxdWUtPmxlZnRpbmRleCA9IDA7CiAgICAgICAgIH0KQEAgLTIzNSwxNiArMjU3LDE4IEBACiB7CiAgICAgZGVxdWUtPnN0YXRlKys7CiAgICAgaWYgKGRlcXVlLT5yaWdodGluZGV4ID09IEJMT0NLTEVOLTEpIHsKLSAgICAgICAgYmxvY2sgKmIgPSBuZXdibG9jayhkZXF1ZS0+cmlnaHRibG9jaywgTlVMTCwgZGVxdWUtPmxlbik7CisgICAgICAgIGJsb2NrICpiID0gbmV3YmxvY2soUHlfU0laRShkZXF1ZSkpOwogICAgICAgICBpZiAoYiA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIGFzc2VydChkZXF1ZS0+cmlnaHRibG9jay0+cmlnaHRsaW5rID09IE5VTEwpOworICAgICAgICBiLT5sZWZ0bGluayA9IGRlcXVlLT5yaWdodGJsb2NrOworICAgICAgICBDSEVDS19FTkQoZGVxdWUtPnJpZ2h0YmxvY2stPnJpZ2h0bGluayk7CiAgICAgICAgIGRlcXVlLT5yaWdodGJsb2NrLT5yaWdodGxpbmsgPSBiOwogICAgICAgICBkZXF1ZS0+cmlnaHRibG9jayA9IGI7CisgICAgICAgIE1BUktfRU5EKGItPnJpZ2h0bGluayk7CiAgICAgICAgIGRlcXVlLT5yaWdodGluZGV4ID0gLTE7CiAgICAgfQogICAgIFB5X0lOQ1JFRihpdGVtKTsKLSAgICBkZXF1ZS0+bGVuKys7CisgICAgUHlfU0laRShkZXF1ZSkrKzsKICAgICBkZXF1ZS0+cmlnaHRpbmRleCsrOwogICAgIGRlcXVlLT5yaWdodGJsb2NrLT5kYXRhW2RlcXVlLT5yaWdodGluZGV4XSA9IGl0ZW07CiAgICAgVFJJTShkZXF1ZSwgZGVxdWVfcG9wbGVmdCk7CkBAIC0yNTgsMTYgKzI4MiwxOCBAQAogewogICAgIGRlcXVlLT5zdGF0ZSsrOwogICAgIGlmIChkZXF1ZS0+bGVmdGluZGV4ID09IDApIHsKLSAgICAgICAgYmxvY2sgKmIgPSBuZXdibG9jayhOVUxMLCBkZXF1ZS0+bGVmdGJsb2NrLCBkZXF1ZS0+bGVuKTsKKyAgICAgICAgYmxvY2sgKmIgPSBuZXdibG9jayhQeV9TSVpFKGRlcXVlKSk7CiAgICAgICAgIGlmIChiID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgYXNzZXJ0KGRlcXVlLT5sZWZ0YmxvY2stPmxlZnRsaW5rID09IE5VTEwpOworICAgICAgICBiLT5yaWdodGxpbmsgPSBkZXF1ZS0+bGVmdGJsb2NrOworICAgICAgICBDSEVDS19FTkQoZGVxdWUtPmxlZnRibG9jay0+bGVmdGxpbmspOwogICAgICAgICBkZXF1ZS0+bGVmdGJsb2NrLT5sZWZ0bGluayA9IGI7CiAgICAgICAgIGRlcXVlLT5sZWZ0YmxvY2sgPSBiOworICAgICAgICBNQVJLX0VORChiLT5sZWZ0bGluayk7CiAgICAgICAgIGRlcXVlLT5sZWZ0aW5kZXggPSBCTE9DS0xFTjsKICAgICB9CiAgICAgUHlfSU5DUkVGKGl0ZW0pOwotICAgIGRlcXVlLT5sZW4rKzsKKyAgICBQeV9TSVpFKGRlcXVlKSsrOwogICAgIGRlcXVlLT5sZWZ0aW5kZXgtLTsKICAgICBkZXF1ZS0+bGVmdGJsb2NrLT5kYXRhW2RlcXVlLT5sZWZ0aW5kZXhdID0gaXRlbTsKICAgICBUUklNKGRlcXVlLCBkZXF1ZV9wb3ApOwpAQCAtMzA5LDYgKzMzNSwxNCBAQAogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAorICAgIC8qIFNwYWNlIHNhdmluZyBoZXVyaXN0aWMuICBTdGFydCBmaWxsaW5nIGZyb20gdGhlIGxlZnQgKi8KKyAgICBpZiAoUHlfU0laRShkZXF1ZSkgPT0gMCkgeworICAgICAgICBhc3NlcnQoZGVxdWUtPmxlZnRibG9jayA9PSBkZXF1ZS0+cmlnaHRibG9jayk7CisgICAgICAgIGFzc2VydChkZXF1ZS0+bGVmdGluZGV4ID09IGRlcXVlLT5yaWdodGluZGV4KzEpOworICAgICAgICBkZXF1ZS0+bGVmdGluZGV4ID0gMTsKKyAgICAgICAgZGVxdWUtPnJpZ2h0aW5kZXggPSAwOworICAgIH0KKwogICAgIGl0ID0gUHlPYmplY3RfR2V0SXRlcihpdGVyYWJsZSk7CiAgICAgaWYgKGl0ID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMzE5LDE5ICszNTMsMjAgQEAKICAgICB3aGlsZSAoKGl0ZW0gPSBQeUl0ZXJfTmV4dChpdCkpICE9IE5VTEwpIHsKICAgICAgICAgZGVxdWUtPnN0YXRlKys7CiAgICAgICAgIGlmIChkZXF1ZS0+cmlnaHRpbmRleCA9PSBCTE9DS0xFTi0xKSB7Ci0gICAgICAgICAgICBibG9jayAqYiA9IG5ld2Jsb2NrKGRlcXVlLT5yaWdodGJsb2NrLCBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXF1ZS0+bGVuKTsKKyAgICAgICAgICAgIGJsb2NrICpiID0gbmV3YmxvY2soUHlfU0laRShkZXF1ZSkpOwogICAgICAgICAgICAgaWYgKGIgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihpdGVtKTsKICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoaXQpOwogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgYXNzZXJ0KGRlcXVlLT5yaWdodGJsb2NrLT5yaWdodGxpbmsgPT0gTlVMTCk7CisgICAgICAgICAgICBiLT5sZWZ0bGluayA9IGRlcXVlLT5yaWdodGJsb2NrOworICAgICAgICAgICAgQ0hFQ0tfRU5EKGRlcXVlLT5yaWdodGJsb2NrLT5yaWdodGxpbmspOwogICAgICAgICAgICAgZGVxdWUtPnJpZ2h0YmxvY2stPnJpZ2h0bGluayA9IGI7CiAgICAgICAgICAgICBkZXF1ZS0+cmlnaHRibG9jayA9IGI7CisgICAgICAgICAgICBNQVJLX0VORChiLT5yaWdodGxpbmspOwogICAgICAgICAgICAgZGVxdWUtPnJpZ2h0aW5kZXggPSAtMTsKICAgICAgICAgfQotICAgICAgICBkZXF1ZS0+bGVuKys7CisgICAgICAgIFB5X1NJWkUoZGVxdWUpKys7CiAgICAgICAgIGRlcXVlLT5yaWdodGluZGV4Kys7CiAgICAgICAgIGRlcXVlLT5yaWdodGJsb2NrLT5kYXRhW2RlcXVlLT5yaWdodGluZGV4XSA9IGl0ZW07CiAgICAgICAgIFRSSU0oZGVxdWUsIGRlcXVlX3BvcGxlZnQpOwpAQCAtMzYxLDYgKzM5NiwxNCBAQAogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAorICAgIC8qIFNwYWNlIHNhdmluZyBoZXVyaXN0aWMuICBTdGFydCBmaWxsaW5nIGZyb20gdGhlIHJpZ2h0ICovCisgICAgaWYgKFB5X1NJWkUoZGVxdWUpID09IDApIHsKKyAgICAgICAgYXNzZXJ0KGRlcXVlLT5sZWZ0YmxvY2sgPT0gZGVxdWUtPnJpZ2h0YmxvY2spOworICAgICAgICBhc3NlcnQoZGVxdWUtPmxlZnRpbmRleCA9PSBkZXF1ZS0+cmlnaHRpbmRleCsxKTsKKyAgICAgICAgZGVxdWUtPmxlZnRpbmRleCA9IEJMT0NLTEVOIC0gMTsKKyAgICAgICAgZGVxdWUtPnJpZ2h0aW5kZXggPSBCTE9DS0xFTiAtIDI7CisgICAgfQorCiAgICAgaXQgPSBQeU9iamVjdF9HZXRJdGVyKGl0ZXJhYmxlKTsKICAgICBpZiAoaXQgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0zNzEsMTkgKzQxNCwyMCBAQAogICAgIHdoaWxlICgoaXRlbSA9IFB5SXRlcl9OZXh0KGl0KSkgIT0gTlVMTCkgewogICAgICAgICBkZXF1ZS0+c3RhdGUrKzsKICAgICAgICAgaWYgKGRlcXVlLT5sZWZ0aW5kZXggPT0gMCkgewotICAgICAgICAgICAgYmxvY2sgKmIgPSBuZXdibG9jayhOVUxMLCBkZXF1ZS0+bGVmdGJsb2NrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXF1ZS0+bGVuKTsKKyAgICAgICAgICAgIGJsb2NrICpiID0gbmV3YmxvY2soUHlfU0laRShkZXF1ZSkpOwogICAgICAgICAgICAgaWYgKGIgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihpdGVtKTsKICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoaXQpOwogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgYXNzZXJ0KGRlcXVlLT5sZWZ0YmxvY2stPmxlZnRsaW5rID09IE5VTEwpOworICAgICAgICAgICAgYi0+cmlnaHRsaW5rID0gZGVxdWUtPmxlZnRibG9jazsKKyAgICAgICAgICAgIENIRUNLX0VORChkZXF1ZS0+bGVmdGJsb2NrLT5sZWZ0bGluayk7CiAgICAgICAgICAgICBkZXF1ZS0+bGVmdGJsb2NrLT5sZWZ0bGluayA9IGI7CiAgICAgICAgICAgICBkZXF1ZS0+bGVmdGJsb2NrID0gYjsKKyAgICAgICAgICAgIE1BUktfRU5EKGItPmxlZnRsaW5rKTsKICAgICAgICAgICAgIGRlcXVlLT5sZWZ0aW5kZXggPSBCTE9DS0xFTjsKICAgICAgICAgfQotICAgICAgICBkZXF1ZS0+bGVuKys7CisgICAgICAgIFB5X1NJWkUoZGVxdWUpKys7CiAgICAgICAgIGRlcXVlLT5sZWZ0aW5kZXgtLTsKICAgICAgICAgZGVxdWUtPmxlZnRibG9jay0+ZGF0YVtkZXF1ZS0+bGVmdGluZGV4XSA9IGl0ZW07CiAgICAgICAgIFRSSU0oZGVxdWUsIGRlcXVlX3BvcCk7CkBAIC00MTMsNyArNDU3LDEzIEBACiBzdGF0aWMgaW50CiBfZGVxdWVfcm90YXRlKGRlcXVlb2JqZWN0ICpkZXF1ZSwgUHlfc3NpemVfdCBuKQogewotICAgIFB5X3NzaXplX3QgbSwgbGVuPWRlcXVlLT5sZW4sIGhhbGZsZW49bGVuPj4xOworICAgIGJsb2NrICpiID0gTlVMTDsKKyAgICBibG9jayAqbGVmdGJsb2NrID0gZGVxdWUtPmxlZnRibG9jazsKKyAgICBibG9jayAqcmlnaHRibG9jayA9IGRlcXVlLT5yaWdodGJsb2NrOworICAgIFB5X3NzaXplX3QgbGVmdGluZGV4ID0gZGVxdWUtPmxlZnRpbmRleDsKKyAgICBQeV9zc2l6ZV90IHJpZ2h0aW5kZXggPSBkZXF1ZS0+cmlnaHRpbmRleDsKKyAgICBQeV9zc2l6ZV90IGxlbj1QeV9TSVpFKGRlcXVlKSwgaGFsZmxlbj1sZW4+PjE7CisgICAgaW50IHJ2ID0gLTE7CiAKICAgICBpZiAobGVuIDw9IDEpCiAgICAgICAgIHJldHVybiAwOwpAQCAtNDI5LDc2ICs0NzksMTAzIEBACiAKICAgICBkZXF1ZS0+c3RhdGUrKzsKICAgICB3aGlsZSAobiA+IDApIHsKLSAgICAgICAgaWYgKGRlcXVlLT5sZWZ0aW5kZXggPT0gMCkgewotICAgICAgICAgICAgYmxvY2sgKmIgPSBuZXdibG9jayhOVUxMLCBkZXF1ZS0+bGVmdGJsb2NrLCBsZW4pOwotICAgICAgICAgICAgaWYgKGIgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICBhc3NlcnQoZGVxdWUtPmxlZnRibG9jay0+bGVmdGxpbmsgPT0gTlVMTCk7Ci0gICAgICAgICAgICBkZXF1ZS0+bGVmdGJsb2NrLT5sZWZ0bGluayA9IGI7Ci0gICAgICAgICAgICBkZXF1ZS0+bGVmdGJsb2NrID0gYjsKLSAgICAgICAgICAgIGRlcXVlLT5sZWZ0aW5kZXggPSBCTE9DS0xFTjsKKyAgICAgICAgaWYgKGxlZnRpbmRleCA9PSAwKSB7CisgICAgICAgICAgICBpZiAoYiA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgYiA9IG5ld2Jsb2NrKGxlbik7CisgICAgICAgICAgICAgICAgaWYgKGIgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgZ290byBkb25lOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYi0+cmlnaHRsaW5rID0gbGVmdGJsb2NrOworICAgICAgICAgICAgQ0hFQ0tfRU5EKGxlZnRibG9jay0+bGVmdGxpbmspOworICAgICAgICAgICAgbGVmdGJsb2NrLT5sZWZ0bGluayA9IGI7CisgICAgICAgICAgICBsZWZ0YmxvY2sgPSBiOworICAgICAgICAgICAgTUFSS19FTkQoYi0+bGVmdGxpbmspOworICAgICAgICAgICAgbGVmdGluZGV4ID0gQkxPQ0tMRU47CisgICAgICAgICAgICBiID0gTlVMTDsKICAgICAgICAgfQotICAgICAgICBhc3NlcnQoZGVxdWUtPmxlZnRpbmRleCA+IDApOworICAgICAgICBhc3NlcnQobGVmdGluZGV4ID4gMCk7CisgICAgICAgIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICoqc3JjLCAqKmRlc3Q7CisgICAgICAgICAgICBQeV9zc2l6ZV90IG0gPSBuOwogCi0gICAgICAgIG0gPSBuOwotICAgICAgICBpZiAobSA+IGRlcXVlLT5yaWdodGluZGV4ICsgMSkKLSAgICAgICAgICAgIG0gPSBkZXF1ZS0+cmlnaHRpbmRleCArIDE7Ci0gICAgICAgIGlmIChtID4gZGVxdWUtPmxlZnRpbmRleCkKLSAgICAgICAgICAgIG0gPSBkZXF1ZS0+bGVmdGluZGV4OwotICAgICAgICBhc3NlcnQgKG0gPiAwICYmIG0gPD0gbGVuKTsKLSAgICAgICAgbWVtY3B5KCZkZXF1ZS0+bGVmdGJsb2NrLT5kYXRhW2RlcXVlLT5sZWZ0aW5kZXggLSBtXSwKLSAgICAgICAgICAgICAgICZkZXF1ZS0+cmlnaHRibG9jay0+ZGF0YVtkZXF1ZS0+cmlnaHRpbmRleCArIDEgLSBtXSwKLSAgICAgICAgICAgICAgIG0gKiBzaXplb2YoUHlPYmplY3QgKikpOwotICAgICAgICBkZXF1ZS0+cmlnaHRpbmRleCAtPSBtOwotICAgICAgICBkZXF1ZS0+bGVmdGluZGV4IC09IG07Ci0gICAgICAgIG4gLT0gbTsKLQotICAgICAgICBpZiAoZGVxdWUtPnJpZ2h0aW5kZXggPT0gLTEpIHsKLSAgICAgICAgICAgIGJsb2NrICpwcmV2YmxvY2sgPSBkZXF1ZS0+cmlnaHRibG9jay0+bGVmdGxpbms7Ci0gICAgICAgICAgICBhc3NlcnQoZGVxdWUtPnJpZ2h0YmxvY2sgIT0gTlVMTCk7Ci0gICAgICAgICAgICBhc3NlcnQoZGVxdWUtPmxlZnRibG9jayAhPSBkZXF1ZS0+cmlnaHRibG9jayk7Ci0gICAgICAgICAgICBmcmVlYmxvY2soZGVxdWUtPnJpZ2h0YmxvY2spOwotICAgICAgICAgICAgcHJldmJsb2NrLT5yaWdodGxpbmsgPSBOVUxMOwotICAgICAgICAgICAgZGVxdWUtPnJpZ2h0YmxvY2sgPSBwcmV2YmxvY2s7Ci0gICAgICAgICAgICBkZXF1ZS0+cmlnaHRpbmRleCA9IEJMT0NLTEVOIC0gMTsKKyAgICAgICAgICAgIGlmIChtID4gcmlnaHRpbmRleCArIDEpCisgICAgICAgICAgICAgICAgbSA9IHJpZ2h0aW5kZXggKyAxOworICAgICAgICAgICAgaWYgKG0gPiBsZWZ0aW5kZXgpCisgICAgICAgICAgICAgICAgbSA9IGxlZnRpbmRleDsKKyAgICAgICAgICAgIGFzc2VydCAobSA+IDAgJiYgbSA8PSBsZW4pOworICAgICAgICAgICAgc3JjID0gJnJpZ2h0YmxvY2stPmRhdGFbcmlnaHRpbmRleF07CisgICAgICAgICAgICBkZXN0ID0gJmxlZnRibG9jay0+ZGF0YVtsZWZ0aW5kZXggLSAxXTsKKyAgICAgICAgICAgIHJpZ2h0aW5kZXggLT0gbTsKKyAgICAgICAgICAgIGxlZnRpbmRleCAtPSBtOworICAgICAgICAgICAgbiAtPSBtOworICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgICooZGVzdC0tKSA9ICooc3JjLS0pOworICAgICAgICAgICAgfSB3aGlsZSAoLS1tKTsKKyAgICAgICAgfQorICAgICAgICBpZiAocmlnaHRpbmRleCA9PSAtMSkgeworICAgICAgICAgICAgYXNzZXJ0KGxlZnRibG9jayAhPSByaWdodGJsb2NrKTsKKyAgICAgICAgICAgIGFzc2VydChiID09IE5VTEwpOworICAgICAgICAgICAgYiA9IHJpZ2h0YmxvY2s7CisgICAgICAgICAgICBDSEVDS19OT1RfRU5EKHJpZ2h0YmxvY2stPmxlZnRsaW5rKTsKKyAgICAgICAgICAgIHJpZ2h0YmxvY2sgPSByaWdodGJsb2NrLT5sZWZ0bGluazsKKyAgICAgICAgICAgIE1BUktfRU5EKHJpZ2h0YmxvY2stPnJpZ2h0bGluayk7CisgICAgICAgICAgICByaWdodGluZGV4ID0gQkxPQ0tMRU4gLSAxOwogICAgICAgICB9CiAgICAgfQogICAgIHdoaWxlIChuIDwgMCkgewotICAgICAgICBpZiAoZGVxdWUtPnJpZ2h0aW5kZXggPT0gQkxPQ0tMRU4gLSAxKSB7Ci0gICAgICAgICAgICBibG9jayAqYiA9IG5ld2Jsb2NrKGRlcXVlLT5yaWdodGJsb2NrLCBOVUxMLCBsZW4pOwotICAgICAgICAgICAgaWYgKGIgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICBhc3NlcnQoZGVxdWUtPnJpZ2h0YmxvY2stPnJpZ2h0bGluayA9PSBOVUxMKTsKLSAgICAgICAgICAgIGRlcXVlLT5yaWdodGJsb2NrLT5yaWdodGxpbmsgPSBiOwotICAgICAgICAgICAgZGVxdWUtPnJpZ2h0YmxvY2sgPSBiOwotICAgICAgICAgICAgZGVxdWUtPnJpZ2h0aW5kZXggPSAtMTsKKyAgICAgICAgaWYgKHJpZ2h0aW5kZXggPT0gQkxPQ0tMRU4gLSAxKSB7CisgICAgICAgICAgICBpZiAoYiA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgYiA9IG5ld2Jsb2NrKGxlbik7CisgICAgICAgICAgICAgICAgaWYgKGIgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgZ290byBkb25lOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYi0+bGVmdGxpbmsgPSByaWdodGJsb2NrOworICAgICAgICAgICAgQ0hFQ0tfRU5EKHJpZ2h0YmxvY2stPnJpZ2h0bGluayk7CisgICAgICAgICAgICByaWdodGJsb2NrLT5yaWdodGxpbmsgPSBiOworICAgICAgICAgICAgcmlnaHRibG9jayA9IGI7CisgICAgICAgICAgICBNQVJLX0VORChiLT5yaWdodGxpbmspOworICAgICAgICAgICAgcmlnaHRpbmRleCA9IC0xOworICAgICAgICAgICAgYiA9IE5VTEw7CiAgICAgICAgIH0KLSAgICAgICAgYXNzZXJ0IChkZXF1ZS0+cmlnaHRpbmRleCA8IEJMT0NLTEVOIC0gMSk7CisgICAgICAgIGFzc2VydCAocmlnaHRpbmRleCA8IEJMT0NLTEVOIC0gMSk7CisgICAgICAgIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICoqc3JjLCAqKmRlc3Q7CisgICAgICAgICAgICBQeV9zc2l6ZV90IG0gPSAtbjsKIAotICAgICAgICBtID0gLW47Ci0gICAgICAgIGlmIChtID4gQkxPQ0tMRU4gLSBkZXF1ZS0+bGVmdGluZGV4KQotICAgICAgICAgICAgbSA9IEJMT0NLTEVOIC0gZGVxdWUtPmxlZnRpbmRleDsKLSAgICAgICAgaWYgKG0gPiBCTE9DS0xFTiAtIDEgLSBkZXF1ZS0+cmlnaHRpbmRleCkKLSAgICAgICAgICAgIG0gPSBCTE9DS0xFTiAtIDEgLSBkZXF1ZS0+cmlnaHRpbmRleDsKLSAgICAgICAgYXNzZXJ0IChtID4gMCAmJiBtIDw9IGxlbik7Ci0gICAgICAgIG1lbWNweSgmZGVxdWUtPnJpZ2h0YmxvY2stPmRhdGFbZGVxdWUtPnJpZ2h0aW5kZXggKyAxXSwKLSAgICAgICAgICAgICAgICZkZXF1ZS0+bGVmdGJsb2NrLT5kYXRhW2RlcXVlLT5sZWZ0aW5kZXhdLAotICAgICAgICAgICAgICAgbSAqIHNpemVvZihQeU9iamVjdCAqKSk7Ci0gICAgICAgIGRlcXVlLT5sZWZ0aW5kZXggKz0gbTsKLSAgICAgICAgZGVxdWUtPnJpZ2h0aW5kZXggKz0gbTsKLSAgICAgICAgbiArPSBtOwotCi0gICAgICAgIGlmIChkZXF1ZS0+bGVmdGluZGV4ID09IEJMT0NLTEVOKSB7Ci0gICAgICAgICAgICBibG9jayAqbmV4dGJsb2NrID0gZGVxdWUtPmxlZnRibG9jay0+cmlnaHRsaW5rOwotICAgICAgICAgICAgYXNzZXJ0KGRlcXVlLT5sZWZ0YmxvY2sgIT0gZGVxdWUtPnJpZ2h0YmxvY2spOwotICAgICAgICAgICAgZnJlZWJsb2NrKGRlcXVlLT5sZWZ0YmxvY2spOwotICAgICAgICAgICAgYXNzZXJ0KG5leHRibG9jayAhPSBOVUxMKTsKLSAgICAgICAgICAgIG5leHRibG9jay0+bGVmdGxpbmsgPSBOVUxMOwotICAgICAgICAgICAgZGVxdWUtPmxlZnRibG9jayA9IG5leHRibG9jazsKLSAgICAgICAgICAgIGRlcXVlLT5sZWZ0aW5kZXggPSAwOworICAgICAgICAgICAgaWYgKG0gPiBCTE9DS0xFTiAtIGxlZnRpbmRleCkKKyAgICAgICAgICAgICAgICBtID0gQkxPQ0tMRU4gLSBsZWZ0aW5kZXg7CisgICAgICAgICAgICBpZiAobSA+IEJMT0NLTEVOIC0gMSAtIHJpZ2h0aW5kZXgpCisgICAgICAgICAgICAgICAgbSA9IEJMT0NLTEVOIC0gMSAtIHJpZ2h0aW5kZXg7CisgICAgICAgICAgICBhc3NlcnQgKG0gPiAwICYmIG0gPD0gbGVuKTsKKyAgICAgICAgICAgIHNyYyA9ICZsZWZ0YmxvY2stPmRhdGFbbGVmdGluZGV4XTsKKyAgICAgICAgICAgIGRlc3QgPSAmcmlnaHRibG9jay0+ZGF0YVtyaWdodGluZGV4ICsgMV07CisgICAgICAgICAgICBsZWZ0aW5kZXggKz0gbTsKKyAgICAgICAgICAgIHJpZ2h0aW5kZXggKz0gbTsKKyAgICAgICAgICAgIG4gKz0gbTsKKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICAqKGRlc3QrKykgPSAqKHNyYysrKTsKKyAgICAgICAgICAgIH0gd2hpbGUgKC0tbSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGxlZnRpbmRleCA9PSBCTE9DS0xFTikgeworICAgICAgICAgICAgYXNzZXJ0KGxlZnRibG9jayAhPSByaWdodGJsb2NrKTsKKyAgICAgICAgICAgIGFzc2VydChiID09IE5VTEwpOworICAgICAgICAgICAgYiA9IGxlZnRibG9jazsKKyAgICAgICAgICAgIENIRUNLX05PVF9FTkQobGVmdGJsb2NrLT5yaWdodGxpbmspOworICAgICAgICAgICAgbGVmdGJsb2NrID0gbGVmdGJsb2NrLT5yaWdodGxpbms7CisgICAgICAgICAgICBNQVJLX0VORChsZWZ0YmxvY2stPmxlZnRsaW5rKTsKKyAgICAgICAgICAgIGxlZnRpbmRleCA9IDA7CiAgICAgICAgIH0KICAgICB9Ci0gICAgcmV0dXJuIDA7CisgICAgcnYgPSAwOworZG9uZToKKyAgICBpZiAoYiAhPSBOVUxMKQorICAgICAgICBmcmVlYmxvY2soYik7CisgICAgZGVxdWUtPmxlZnRibG9jayA9IGxlZnRibG9jazsKKyAgICBkZXF1ZS0+cmlnaHRibG9jayA9IHJpZ2h0YmxvY2s7CisgICAgZGVxdWUtPmxlZnRpbmRleCA9IGxlZnRpbmRleDsKKyAgICBkZXF1ZS0+cmlnaHRpbmRleCA9IHJpZ2h0aW5kZXg7CisKKyAgICByZXR1cm4gcnY7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC01MjMsMTMgKzYwMCwxNSBAQAogICAgIGJsb2NrICpyaWdodGJsb2NrID0gZGVxdWUtPnJpZ2h0YmxvY2s7CiAgICAgUHlfc3NpemVfdCBsZWZ0aW5kZXggPSBkZXF1ZS0+bGVmdGluZGV4OwogICAgIFB5X3NzaXplX3QgcmlnaHRpbmRleCA9IGRlcXVlLT5yaWdodGluZGV4OwotICAgIFB5X3NzaXplX3QgbiA9IChkZXF1ZS0+bGVuKS8yOworICAgIFB5X3NzaXplX3QgbiA9IChQeV9TSVpFKGRlcXVlKSkvMjsKICAgICBQeV9zc2l6ZV90IGk7CiAgICAgUHlPYmplY3QgKnRtcDsKIAogICAgIGZvciAoaT0wIDsgaTxuIDsgaSsrKSB7CiAgICAgICAgIC8qIFZhbGlkYXRlIHRoYXQgcG9pbnRlcnMgaGF2ZW4ndCBtZXQgaW4gdGhlIG1pZGRsZSAqLwogICAgICAgICBhc3NlcnQobGVmdGJsb2NrICE9IHJpZ2h0YmxvY2sgfHwgbGVmdGluZGV4IDwgcmlnaHRpbmRleCk7CisgICAgICAgIENIRUNLX05PVF9FTkQobGVmdGJsb2NrKTsKKyAgICAgICAgQ0hFQ0tfTk9UX0VORChyaWdodGJsb2NrKTsKIAogICAgICAgICAvKiBTd2FwICovCiAgICAgICAgIHRtcCA9IGxlZnRibG9jay0+ZGF0YVtsZWZ0aW5kZXhdOwpAQCAtNTM5LDggKzYxOCw2IEBACiAgICAgICAgIC8qIEFkdmFuY2UgbGVmdCBibG9jay9pbmRleCBwYWlyICovCiAgICAgICAgIGxlZnRpbmRleCsrOwogICAgICAgICBpZiAobGVmdGluZGV4ID09IEJMT0NLTEVOKSB7Ci0gICAgICAgICAgICBpZiAobGVmdGJsb2NrLT5yaWdodGxpbmsgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGxlZnRibG9jayA9IGxlZnRibG9jay0+cmlnaHRsaW5rOwogICAgICAgICAgICAgbGVmdGluZGV4ID0gMDsKICAgICAgICAgfQpAQCAtNTQ4LDggKzYyNSw2IEBACiAgICAgICAgIC8qIFN0ZXAgYmFja3dhcmRzIHdpdGggdGhlIHJpZ2h0IGJsb2NrL2luZGV4IHBhaXIgKi8KICAgICAgICAgcmlnaHRpbmRleC0tOwogICAgICAgICBpZiAocmlnaHRpbmRleCA9PSAtMSkgewotICAgICAgICAgICAgaWYgKHJpZ2h0YmxvY2stPmxlZnRsaW5rID09IE5VTEwpCi0gICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICByaWdodGJsb2NrID0gcmlnaHRibG9jay0+bGVmdGxpbms7CiAgICAgICAgICAgICByaWdodGluZGV4ID0gQkxPQ0tMRU4gLSAxOwogICAgICAgICB9CkBAIC01NjMsOSArNjM4LDkgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBkZXF1ZV9jb3VudChkZXF1ZW9iamVjdCAqZGVxdWUsIFB5T2JqZWN0ICp2KQogewotICAgIGJsb2NrICpsZWZ0YmxvY2sgPSBkZXF1ZS0+bGVmdGJsb2NrOwotICAgIFB5X3NzaXplX3QgbGVmdGluZGV4ID0gZGVxdWUtPmxlZnRpbmRleDsKLSAgICBQeV9zc2l6ZV90IG4gPSBkZXF1ZS0+bGVuOworICAgIGJsb2NrICpiID0gZGVxdWUtPmxlZnRibG9jazsKKyAgICBQeV9zc2l6ZV90IGluZGV4ID0gZGVxdWUtPmxlZnRpbmRleDsKKyAgICBQeV9zc2l6ZV90IG4gPSBQeV9TSVpFKGRlcXVlKTsKICAgICBQeV9zc2l6ZV90IGk7CiAgICAgUHlfc3NpemVfdCBjb3VudCA9IDA7CiAgICAgUHlPYmplY3QgKml0ZW07CkBAIC01NzMsNyArNjQ4LDggQEAKICAgICBpbnQgY21wOwogCiAgICAgZm9yIChpPTAgOyBpPG4gOyBpKyspIHsKLSAgICAgICAgaXRlbSA9IGxlZnRibG9jay0+ZGF0YVtsZWZ0aW5kZXhdOworICAgICAgICBDSEVDS19OT1RfRU5EKGIpOworICAgICAgICBpdGVtID0gYi0+ZGF0YVtpbmRleF07CiAgICAgICAgIGNtcCA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbChpdGVtLCB2LCBQeV9FUSk7CiAgICAgICAgIGlmIChjbXAgPiAwKQogICAgICAgICAgICAgY291bnQrKzsKQEAgLTU4NywxMiArNjYzLDEwIEBACiAgICAgICAgIH0KIAogICAgICAgICAvKiBBZHZhbmNlIGxlZnQgYmxvY2svaW5kZXggcGFpciAqLwotICAgICAgICBsZWZ0aW5kZXgrKzsKLSAgICAgICAgaWYgKGxlZnRpbmRleCA9PSBCTE9DS0xFTikgewotICAgICAgICAgICAgaWYgKGxlZnRibG9jay0+cmlnaHRsaW5rID09IE5VTEwpICAvKiBjYW4gb2NjdXIgd2hlbiBpPT1uLTEgKi8KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGxlZnRibG9jayA9IGxlZnRibG9jay0+cmlnaHRsaW5rOwotICAgICAgICAgICAgbGVmdGluZGV4ID0gMDsKKyAgICAgICAgaW5kZXgrKzsKKyAgICAgICAgaWYgKGluZGV4ID09IEJMT0NLTEVOKSB7CisgICAgICAgICAgICBiID0gYi0+cmlnaHRsaW5rOworICAgICAgICAgICAgaW5kZXggPSAwOwogICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiBQeUxvbmdfRnJvbVNzaXplX3QoY291bnQpOwpAQCAtNjA0LDE5ICs2NzgsMTkgQEAKIHN0YXRpYyBQeV9zc2l6ZV90CiBkZXF1ZV9sZW4oZGVxdWVvYmplY3QgKmRlcXVlKQogewotICAgIHJldHVybiBkZXF1ZS0+bGVuOworICAgIHJldHVybiBQeV9TSVpFKGRlcXVlKTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKIGRlcXVlX3JlbW92ZShkZXF1ZW9iamVjdCAqZGVxdWUsIFB5T2JqZWN0ICp2YWx1ZSkKIHsKLSAgICBQeV9zc2l6ZV90IGksIG49ZGVxdWUtPmxlbjsKKyAgICBQeV9zc2l6ZV90IGksIG49UHlfU0laRShkZXF1ZSk7CiAKICAgICBmb3IgKGk9MCA7IGk8biA7IGkrKykgewogICAgICAgICBQeU9iamVjdCAqaXRlbSA9IGRlcXVlLT5sZWZ0YmxvY2stPmRhdGFbZGVxdWUtPmxlZnRpbmRleF07CiAgICAgICAgIGludCBjbXAgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2woaXRlbSwgdmFsdWUsIFB5X0VRKTsKIAotICAgICAgICBpZiAoZGVxdWUtPmxlbiAhPSBuKSB7CisgICAgICAgIGlmIChQeV9TSVpFKGRlcXVlKSAhPSBuKSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfSW5kZXhFcnJvciwKICAgICAgICAgICAgICAgICAiZGVxdWUgbXV0YXRlZCBkdXJpbmcgcmVtb3ZlKCkuIik7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTYyNCw5ICs2OTgsOSBAQAogICAgICAgICBpZiAoY21wID4gMCkgewogICAgICAgICAgICAgUHlPYmplY3QgKnRndCA9IGRlcXVlX3BvcGxlZnQoZGVxdWUsIE5VTEwpOwogICAgICAgICAgICAgYXNzZXJ0ICh0Z3QgIT0gTlVMTCk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodGd0KTsKLSAgICAgICAgICAgIGlmIChfZGVxdWVfcm90YXRlKGRlcXVlLCBpKSA9PSAtMSkKKyAgICAgICAgICAgIGlmIChfZGVxdWVfcm90YXRlKGRlcXVlLCBpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIFB5X0RFQ1JFRih0Z3QpOwogICAgICAgICAgICAgUHlfUkVUVVJOX05PTkU7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoY21wIDwgMCkgewpAQCAtNjQ3LDE0ICs3MjEsMTQgQEAKIHsKICAgICBQeU9iamVjdCAqaXRlbTsKIAotICAgIHdoaWxlIChkZXF1ZS0+bGVuKSB7CisgICAgd2hpbGUgKFB5X1NJWkUoZGVxdWUpKSB7CiAgICAgICAgIGl0ZW0gPSBkZXF1ZV9wb3AoZGVxdWUsIE5VTEwpOwogICAgICAgICBhc3NlcnQgKGl0ZW0gIT0gTlVMTCk7CiAgICAgICAgIFB5X0RFQ1JFRihpdGVtKTsKICAgICB9CiAgICAgYXNzZXJ0KGRlcXVlLT5sZWZ0YmxvY2sgPT0gZGVxdWUtPnJpZ2h0YmxvY2sgJiYKICAgICAgICAgICAgZGVxdWUtPmxlZnRpbmRleCAtIDEgPT0gZGVxdWUtPnJpZ2h0aW5kZXggJiYKLSAgICAgICAgICAgZGVxdWUtPmxlbiA9PSAwKTsKKyAgICAgICAgICAgUHlfU0laRShkZXF1ZSkgPT0gMCk7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC02NjQsNyArNzM4LDcgQEAKICAgICBQeU9iamVjdCAqaXRlbTsKICAgICBQeV9zc2l6ZV90IG4sIGluZGV4PWk7CiAKLSAgICBpZiAoaSA8IDAgfHwgaSA+PSBkZXF1ZS0+bGVuKSB7CisgICAgaWYgKGkgPCAwIHx8IGkgPj0gUHlfU0laRShkZXF1ZSkpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0luZGV4RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiZGVxdWUgaW5kZXggb3V0IG9mIHJhbmdlIik7CiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtNjczLDE5ICs3NDcsMTkgQEAKICAgICBpZiAoaSA9PSAwKSB7CiAgICAgICAgIGkgPSBkZXF1ZS0+bGVmdGluZGV4OwogICAgICAgICBiID0gZGVxdWUtPmxlZnRibG9jazsKLSAgICB9IGVsc2UgaWYgKGkgPT0gZGVxdWUtPmxlbiAtIDEpIHsKKyAgICB9IGVsc2UgaWYgKGkgPT0gUHlfU0laRShkZXF1ZSkgLSAxKSB7CiAgICAgICAgIGkgPSBkZXF1ZS0+cmlnaHRpbmRleDsKICAgICAgICAgYiA9IGRlcXVlLT5yaWdodGJsb2NrOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGkgKz0gZGVxdWUtPmxlZnRpbmRleDsKICAgICAgICAgbiA9IGkgLyBCTE9DS0xFTjsKICAgICAgICAgaSAlPSBCTE9DS0xFTjsKLSAgICAgICAgaWYgKGluZGV4IDwgKGRlcXVlLT5sZW4gPj4gMSkpIHsKKyAgICAgICAgaWYgKGluZGV4IDwgKFB5X1NJWkUoZGVxdWUpID4+IDEpKSB7CiAgICAgICAgICAgICBiID0gZGVxdWUtPmxlZnRibG9jazsKICAgICAgICAgICAgIHdoaWxlIChuLS0pCiAgICAgICAgICAgICAgICAgYiA9IGItPnJpZ2h0bGluazsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG4gPSAoZGVxdWUtPmxlZnRpbmRleCArIGRlcXVlLT5sZW4gLSAxKSAvIEJMT0NLTEVOIC0gbjsKKyAgICAgICAgICAgIG4gPSAoZGVxdWUtPmxlZnRpbmRleCArIFB5X1NJWkUoZGVxdWUpIC0gMSkgLyBCTE9DS0xFTiAtIG47CiAgICAgICAgICAgICBiID0gZGVxdWUtPnJpZ2h0YmxvY2s7CiAgICAgICAgICAgICB3aGlsZSAobi0tKQogICAgICAgICAgICAgICAgIGIgPSBiLT5sZWZ0bGluazsKQEAgLTcwNywxNiArNzgxLDE2IEBACiBkZXF1ZV9kZWxfaXRlbShkZXF1ZW9iamVjdCAqZGVxdWUsIFB5X3NzaXplX3QgaSkKIHsKICAgICBQeU9iamVjdCAqaXRlbTsKKyAgICBpbnQgcnY7CiAKLSAgICBhc3NlcnQgKGkgPj0gMCAmJiBpIDwgZGVxdWUtPmxlbik7Ci0gICAgaWYgKF9kZXF1ZV9yb3RhdGUoZGVxdWUsIC1pKSA9PSAtMSkKKyAgICBhc3NlcnQgKGkgPj0gMCAmJiBpIDwgUHlfU0laRShkZXF1ZSkpOworICAgIGlmIChfZGVxdWVfcm90YXRlKGRlcXVlLCAtaSkpCiAgICAgICAgIHJldHVybiAtMTsKLQogICAgIGl0ZW0gPSBkZXF1ZV9wb3BsZWZ0KGRlcXVlLCBOVUxMKTsKKyAgICBydiA9IF9kZXF1ZV9yb3RhdGUoZGVxdWUsIGkpOwogICAgIGFzc2VydCAoaXRlbSAhPSBOVUxMKTsKICAgICBQeV9ERUNSRUYoaXRlbSk7Ci0KLSAgICByZXR1cm4gX2RlcXVlX3JvdGF0ZShkZXF1ZSwgaSk7CisgICAgcmV0dXJuIHJ2OwogfQogCiBzdGF0aWMgaW50CkBAIC03MjQsNyArNzk4LDcgQEAKIHsKICAgICBQeU9iamVjdCAqb2xkX3ZhbHVlOwogICAgIGJsb2NrICpiOwotICAgIFB5X3NzaXplX3QgbiwgbGVuPWRlcXVlLT5sZW4sIGhhbGZsZW49KGxlbisxKT4+MSwgaW5kZXg9aTsKKyAgICBQeV9zc2l6ZV90IG4sIGxlbj1QeV9TSVpFKGRlcXVlKSwgaGFsZmxlbj0obGVuKzEpPj4xLCBpbmRleD1pOwogCiAgICAgaWYgKGkgPCAwIHx8IGkgPj0gbGVuKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19JbmRleEVycm9yLApAQCAtNzg3LDE3ICs4NjEsMTcgQEAKICAgICBQeV9zc2l6ZV90IGluZGV4OwogICAgIFB5X3NzaXplX3QgaW5kZXhsbyA9IGRlcXVlLT5sZWZ0aW5kZXg7CiAKLSAgICBmb3IgKGIgPSBkZXF1ZS0+bGVmdGJsb2NrOyBiICE9IE5VTEw7IGIgPSBiLT5yaWdodGxpbmspIHsKLSAgICAgICAgY29uc3QgUHlfc3NpemVfdCBpbmRleGhpID0gYiA9PSBkZXF1ZS0+cmlnaHRibG9jayA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXF1ZS0+cmlnaHRpbmRleCA6Ci0gICAgICAgICAgICAgICAgICAgICBCTE9DS0xFTiAtIDE7Ci0KLSAgICAgICAgZm9yIChpbmRleCA9IGluZGV4bG87IGluZGV4IDw9IGluZGV4aGk7ICsraW5kZXgpIHsKKyAgICBmb3IgKGIgPSBkZXF1ZS0+bGVmdGJsb2NrOyBiICE9IGRlcXVlLT5yaWdodGJsb2NrOyBiID0gYi0+cmlnaHRsaW5rKSB7CisgICAgICAgIGZvciAoaW5kZXggPSBpbmRleGxvOyBpbmRleCA8IEJMT0NLTEVOIDsgaW5kZXgrKykgewogICAgICAgICAgICAgaXRlbSA9IGItPmRhdGFbaW5kZXhdOwogICAgICAgICAgICAgUHlfVklTSVQoaXRlbSk7CiAgICAgICAgIH0KICAgICAgICAgaW5kZXhsbyA9IDA7CiAgICAgfQorICAgIGZvciAoaW5kZXggPSBpbmRleGxvOyBpbmRleCA8PSBkZXF1ZS0+cmlnaHRpbmRleDsgaW5kZXgrKykgeworICAgICAgICBpdGVtID0gYi0+ZGF0YVtpbmRleF07CisgICAgICAgIFB5X1ZJU0lUKGl0ZW0pOworICAgIH0KICAgICByZXR1cm4gMDsKIH0KIApAQCAtODg3LDggKzk2MSw4IEBACiAgICAgfQogCiAgICAgLyogU2hvcnRjdXRzICovCi0gICAgdnMgPSAoKGRlcXVlb2JqZWN0ICopdiktPmxlbjsKLSAgICB3cyA9ICgoZGVxdWVvYmplY3QgKil3KS0+bGVuOworICAgIHZzID0gUHlfU0laRSgoZGVxdWVvYmplY3QgKil2KTsKKyAgICB3cyA9IFB5X1NJWkUoKGRlcXVlb2JqZWN0ICopdyk7CiAgICAgaWYgKG9wID09IFB5X0VRKSB7CiAgICAgICAgIGlmICh2ID09IHcpCiAgICAgICAgICAgICBQeV9SRVRVUk5fVFJVRTsKQEAgLTk4OSw4ICsxMDYzLDggQEAKICAgICBQeV9zc2l6ZV90IGJsb2NrczsKIAogICAgIHJlcyA9IHNpemVvZihkZXF1ZW9iamVjdCk7Ci0gICAgYmxvY2tzID0gKGRlcXVlLT5sZWZ0aW5kZXggKyBkZXF1ZS0+bGVuICsgQkxPQ0tMRU4gLSAxKSAvIEJMT0NLTEVOOwotICAgIGFzc2VydChkZXF1ZS0+bGVmdGluZGV4ICsgZGVxdWUtPmxlbiAtIDEgPT0KKyAgICBibG9ja3MgPSAoZGVxdWUtPmxlZnRpbmRleCArIFB5X1NJWkUoZGVxdWUpICsgQkxPQ0tMRU4gLSAxKSAvIEJMT0NLTEVOOworICAgIGFzc2VydChkZXF1ZS0+bGVmdGluZGV4ICsgUHlfU0laRShkZXF1ZSkgLSAxID09CiAgICAgICAgICAgIChibG9ja3MgLSAxKSAqIEJMT0NLTEVOICsgZGVxdWUtPnJpZ2h0aW5kZXgpOwogICAgIHJlcyArPSBibG9ja3MgKiBzaXplb2YoYmxvY2spOwogICAgIHJldHVybiBQeUxvbmdfRnJvbVNzaXplX3QocmVzKTsKQEAgLTExNDMsNyArMTIxNyw3IEBACiAgICAgUHlfSU5DUkVGKGRlcXVlKTsKICAgICBpdC0+ZGVxdWUgPSBkZXF1ZTsKICAgICBpdC0+c3RhdGUgPSBkZXF1ZS0+c3RhdGU7Ci0gICAgaXQtPmNvdW50ZXIgPSBkZXF1ZS0+bGVuOworICAgIGl0LT5jb3VudGVyID0gUHlfU0laRShkZXF1ZSk7CiAgICAgUHlPYmplY3RfR0NfVHJhY2soaXQpOwogICAgIHJldHVybiAoUHlPYmplY3QgKilpdDsKIH0KQEAgLTExODIsNyArMTI1Niw3IEBACiAgICAgaXQtPmluZGV4Kys7CiAgICAgaXQtPmNvdW50ZXItLTsKICAgICBpZiAoaXQtPmluZGV4ID09IEJMT0NLTEVOICYmIGl0LT5jb3VudGVyID4gMCkgewotICAgICAgICBhc3NlcnQgKGl0LT5iLT5yaWdodGxpbmsgIT0gTlVMTCk7CisgICAgICAgIENIRUNLX05PVF9FTkQoaXQtPmItPnJpZ2h0bGluayk7CiAgICAgICAgIGl0LT5iID0gaXQtPmItPnJpZ2h0bGluazsKICAgICAgICAgaXQtPmluZGV4ID0gMDsKICAgICB9CkBAIC0xMjMwLDcgKzEzMDQsNyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGRlcXVlaXRlcl9yZWR1Y2UoZGVxdWVpdGVyb2JqZWN0ICppdCkKIHsKLSAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiTyhPbikiLCBQeV9UWVBFKGl0KSwgaXQtPmRlcXVlLCBpdC0+ZGVxdWUtPmxlbiAtIGl0LT5jb3VudGVyKTsKKyAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiTyhPbikiLCBQeV9UWVBFKGl0KSwgaXQtPmRlcXVlLCBQeV9TSVpFKGl0LT5kZXF1ZSkgLSBpdC0+Y291bnRlcik7CiB9CiAKIHN0YXRpYyBQeU1ldGhvZERlZiBkZXF1ZWl0ZXJfbWV0aG9kc1tdID0gewpAQCAtMTI5OSw3ICsxMzczLDcgQEAKICAgICBQeV9JTkNSRUYoZGVxdWUpOwogICAgIGl0LT5kZXF1ZSA9IGRlcXVlOwogICAgIGl0LT5zdGF0ZSA9IGRlcXVlLT5zdGF0ZTsKLSAgICBpdC0+Y291bnRlciA9IGRlcXVlLT5sZW47CisgICAgaXQtPmNvdW50ZXIgPSBQeV9TSVpFKGRlcXVlKTsKICAgICBQeU9iamVjdF9HQ19UcmFjayhpdCk7CiAgICAgcmV0dXJuIChQeU9iamVjdCAqKWl0OwogfQpAQCAtMTMyNCw3ICsxMzk4LDcgQEAKICAgICBpdC0+aW5kZXgtLTsKICAgICBpdC0+Y291bnRlci0tOwogICAgIGlmIChpdC0+aW5kZXggPT0gLTEgJiYgaXQtPmNvdW50ZXIgPiAwKSB7Ci0gICAgICAgIGFzc2VydCAoaXQtPmItPmxlZnRsaW5rICE9IE5VTEwpOworICAgICAgICBDSEVDS19OT1RfRU5EKGl0LT5iLT5sZWZ0bGluayk7CiAgICAgICAgIGl0LT5iID0gaXQtPmItPmxlZnRsaW5rOwogICAgICAgICBpdC0+aW5kZXggPSBCTE9DS0xFTiAtIDE7CiAgICAgfQpAQCAtMTYwOCw3ICsxNjgyLDcgQEAKICAgICAgICAgICAgIG5ld2RlZmF1bHQgPSBQeVR1cGxlX0dFVF9JVEVNKGFyZ3MsIDApOwogICAgICAgICAgICAgaWYgKCFQeUNhbGxhYmxlX0NoZWNrKG5ld2RlZmF1bHQpICYmIG5ld2RlZmF1bHQgIT0gUHlfTm9uZSkgewogICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICJmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGNhbGxhYmxlIik7CisgICAgICAgICAgICAgICAgICAgICJmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGNhbGxhYmxlIG9yIE5vbmUiKTsKICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTE3NDQsNyArMTgxOCw3IEBACiAgICAgICAgICAgICBQeV9ERUNSRUYoa2V5KTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7Ci0gICAgICAgIGJvdW5kX2dldCA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcobWFwcGluZywgImdldCIpOworICAgICAgICBib3VuZF9nZXQgPSBfUHlPYmplY3RfR2V0QXR0cklkKG1hcHBpbmcsICZQeUlkX2dldCk7CiAgICAgICAgIGlmIChib3VuZF9nZXQgPT0gTlVMTCkKICAgICAgICAgICAgIGdvdG8gZG9uZTsKIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3J5cHRtb2R1bGUuYyBiL01vZHVsZXMvX2NyeXB0bW9kdWxlLmMKaW5kZXggNTEwMDc4OC4uZGE0NGVmMyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3J5cHRtb2R1bGUuYworKysgYi9Nb2R1bGVzL19jcnlwdG1vZHVsZS5jCkBAIC01LDQwICs1LDc2IEBACiAKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KIAotI2lmZGVmIF9fVk1TCi0jaW5jbHVkZSA8b3BlbnNzbC9kZXMuaD4KLSNlbmRpZgotCiAvKiBNb2R1bGUgY3J5cHQgKi8KIAorLypbY2xpbmljIGlucHV0XQorbW9kdWxlIGNyeXB0CitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZGEzOWEzZWU1ZTZiNGIwZCBpbnB1dD1jNjI1MmNmNGYyZjJhZTgxXSovCiAKLXN0YXRpYyBQeU9iamVjdCAqY3J5cHRfY3J5cHQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorCisvKltjbGluaWMgaW5wdXRdCitjcnlwdC5jcnlwdAorCisgICAgd29yZDogJ3MnCisgICAgc2FsdDogJ3MnCisgICAgLworCitIYXNoIGEgKndvcmQqIHdpdGggdGhlIGdpdmVuICpzYWx0KiBhbmQgcmV0dXJuIHRoZSBoYXNoZWQgcGFzc3dvcmQuCisKKyp3b3JkKiB3aWxsIHVzdWFsbHkgYmUgYSB1c2VyJ3MgcGFzc3dvcmQuICAqc2FsdCogKGVpdGhlciBhIHJhbmRvbSAyIG9yIDE2CitjaGFyYWN0ZXIgc3RyaW5nLCBwb3NzaWJseSBwcmVmaXhlZCB3aXRoICRkaWdpdCQgdG8gaW5kaWNhdGUgdGhlIG1ldGhvZCkKK3dpbGwgYmUgdXNlZCB0byBwZXJ0dXJiIHRoZSBlbmNyeXB0aW9uIGFsZ29yaXRobSBhbmQgcHJvZHVjZSBkaXN0aW5jdAorcmVzdWx0cyBmb3IgYSBnaXZlbiAqd29yZCouCisKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworUHlEb2NfU1RSVkFSKGNyeXB0X2NyeXB0X19kb2NfXywKKyJjcnlwdCgkbW9kdWxlLCB3b3JkLCBzYWx0LCAvKVxuIgorIi0tXG4iCisiXG4iCisiSGFzaCBhICp3b3JkKiB3aXRoIHRoZSBnaXZlbiAqc2FsdCogYW5kIHJldHVybiB0aGUgaGFzaGVkIHBhc3N3b3JkLlxuIgorIlxuIgorIip3b3JkKiB3aWxsIHVzdWFsbHkgYmUgYSB1c2VyXCdzIHBhc3N3b3JkLiAgKnNhbHQqIChlaXRoZXIgYSByYW5kb20gMiBvciAxNlxuIgorImNoYXJhY3RlciBzdHJpbmcsIHBvc3NpYmx5IHByZWZpeGVkIHdpdGggJGRpZ2l0JCB0byBpbmRpY2F0ZSB0aGUgbWV0aG9kKVxuIgorIndpbGwgYmUgdXNlZCB0byBwZXJ0dXJiIHRoZSBlbmNyeXB0aW9uIGFsZ29yaXRobSBhbmQgcHJvZHVjZSBkaXN0aW5jdFxuIgorInJlc3VsdHMgZm9yIGEgZ2l2ZW4gKndvcmQqLiIpOworCisjZGVmaW5lIENSWVBUX0NSWVBUX01FVEhPRERFRiAgICBcCisgICAgeyJjcnlwdCIsIChQeUNGdW5jdGlvbiljcnlwdF9jcnlwdCwgTUVUSF9WQVJBUkdTLCBjcnlwdF9jcnlwdF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorY3J5cHRfY3J5cHRfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBjb25zdCBjaGFyICp3b3JkLCBjb25zdCBjaGFyICpzYWx0KTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2NyeXB0X2NyeXB0KFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQogewotICAgIGNoYXIgKndvcmQsICpzYWx0OwotI2lmbmRlZiBfX1ZNUwotICAgIGV4dGVybiBjaGFyICogY3J5cHQoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwotI2VuZGlmCisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgY29uc3QgY2hhciAqd29yZDsKKyAgICBjb25zdCBjaGFyICpzYWx0OwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzczpjcnlwdCIsICZ3b3JkLCAmc2FsdCkpIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAic3M6Y3J5cHQiLAorICAgICAgICAmd29yZCwgJnNhbHQpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gY3J5cHRfY3J5cHRfaW1wbChtb2R1bGUsIHdvcmQsIHNhbHQpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitjcnlwdF9jcnlwdF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIGNvbnN0IGNoYXIgKndvcmQsIGNvbnN0IGNoYXIgKnNhbHQpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9M2VhYWNkZjk5NGE2ZmYyMyBpbnB1dD00ZDkzYjZkMGY0MWZiZjU4XSovCit7CiAgICAgLyogT24gc29tZSBwbGF0Zm9ybXMgKEF0aGVPUykgY3J5cHQgcmV0dXJucyBOVUxMIGZvciBhbiBpbnZhbGlkCiAgICAgICAgc2FsdC4gUmV0dXJuIE5vbmUgaW4gdGhhdCBjYXNlLiBYWFggTWF5YmUgcmFpc2UgYW4gZXhjZXB0aW9uPyAgKi8KICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgicyIsIGNyeXB0KHdvcmQsIHNhbHQpKTsKLQogfQogCi1QeURvY19TVFJWQVIoY3J5cHRfY3J5cHRfX2RvY19fLAotImNyeXB0KHdvcmQsIHNhbHQpIC0+IHN0cmluZ1xuXAotd29yZCB3aWxsIHVzdWFsbHkgYmUgYSB1c2VyJ3MgcGFzc3dvcmQuIHNhbHQgaXMgYSAyLWNoYXJhY3RlciBzdHJpbmdcblwKLXdoaWNoIHdpbGwgYmUgdXNlZCB0byBzZWxlY3Qgb25lIG9mIDQwOTYgdmFyaWF0aW9ucyBvZiBERVMuIFRoZSBjaGFyYWN0ZXJzXG5cCi1pbiBzYWx0IG11c3QgYmUgZWl0aGVyIFwiLlwiLCBcIi9cIiwgb3IgYW4gYWxwaGFudW1lcmljIGNoYXJhY3Rlci4gUmV0dXJuc1xuXAotdGhlIGhhc2hlZCBwYXNzd29yZCBhcyBhIHN0cmluZywgd2hpY2ggd2lsbCBiZSBjb21wb3NlZCBvZiBjaGFyYWN0ZXJzIGZyb21cblwKLXRoZSBzYW1lIGFscGhhYmV0IGFzIHRoZSBzYWx0LiIpOwotCiAKIHN0YXRpYyBQeU1ldGhvZERlZiBjcnlwdF9tZXRob2RzW10gPSB7Ci0gICAgeyJjcnlwdCIsICAgICAgICAgICBjcnlwdF9jcnlwdCwgTUVUSF9WQVJBUkdTLCBjcnlwdF9jcnlwdF9fZG9jX199LAorICAgIENSWVBUX0NSWVBUX01FVEhPRERFRgogICAgIHtOVUxMLCAgICAgICAgICAgICAgTlVMTH0gICAgICAgICAgIC8qIHNlbnRpbmVsICovCiB9OwogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jc3YuYyBiL01vZHVsZXMvX2Nzdi5jCmluZGV4IGY1ZjZlNzEuLjFhMzYzZmEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2Nzdi5jCisrKyBiL01vZHVsZXMvX2Nzdi5jCkBAIC01MSw3ICs1MSw3IEBACiB0eXBlZGVmIGVudW0gewogICAgIFNUQVJUX1JFQ09SRCwgU1RBUlRfRklFTEQsIEVTQ0FQRURfQ0hBUiwgSU5fRklFTEQsCiAgICAgSU5fUVVPVEVEX0ZJRUxELCBFU0NBUEVfSU5fUVVPVEVEX0ZJRUxELCBRVU9URV9JTl9RVU9URURfRklFTEQsCi0gICAgRUFUX0NSTkwKKyAgICBFQVRfQ1JOTCxBRlRFUl9FU0NBUEVEX0NSTkwKIH0gUGFyc2VyU3RhdGU7CiAKIHR5cGVkZWYgZW51bSB7CkBAIC01NTMsNyArNTUzLDEwIEBACiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIGZpZWxkID0gdG1wOwogICAgIH0KLSAgICBQeUxpc3RfQXBwZW5kKHNlbGYtPmZpZWxkcywgZmllbGQpOworICAgIGlmIChQeUxpc3RfQXBwZW5kKHNlbGYtPmZpZWxkcywgZmllbGQpIDwgMCkgeworICAgICAgICBQeV9ERUNSRUYoZmllbGQpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQogICAgIFB5X0RFQ1JFRihmaWVsZCk7CiAgICAgcmV0dXJuIDA7CiB9CkBAIC02NTEsNiArNjU0LDEyIEBACiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBFU0NBUEVEX0NIQVI6CisgICAgICAgIGlmIChjID09ICdcbicgfHwgYz09J1xyJykgeworICAgICAgICAgICAgaWYgKHBhcnNlX2FkZF9jaGFyKHNlbGYsIGMpIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICBzZWxmLT5zdGF0ZSA9IEFGVEVSX0VTQ0FQRURfQ1JOTDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGlmIChjID09ICdcMCcpCiAgICAgICAgICAgICBjID0gJ1xuJzsKICAgICAgICAgaWYgKHBhcnNlX2FkZF9jaGFyKHNlbGYsIGMpIDwgMCkKQEAgLTY1OCw2ICs2NjcsMTEgQEAKICAgICAgICAgc2VsZi0+c3RhdGUgPSBJTl9GSUVMRDsKICAgICAgICAgYnJlYWs7CiAKKyAgICBjYXNlIEFGVEVSX0VTQ0FQRURfQ1JOTDoKKyAgICAgICAgaWYgKGMgPT0gJ1wwJykKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAvKmZhbGx0aHJ1Ki8KKwogICAgIGNhc2UgSU5fRklFTEQ6CiAgICAgICAgIC8qIGluIHVucXVvdGVkIGZpZWxkICovCiAgICAgICAgIGlmIChjID09ICdcbicgfHwgYyA9PSAnXHInIHx8IGMgPT0gJ1wwJykgewpAQCAtMTU0OSw3ICsxNTYzLDcgQEAKICJwcm92aWRlZCBieSB0aGUgZGlhbGVjdC5cbiIKICJcbiIKICJUaGUgcmV0dXJuZWQgb2JqZWN0IGlzIGFuIGl0ZXJhdG9yLiAgRWFjaCBpdGVyYXRpb24gcmV0dXJucyBhIHJvd1xuIgotIm9mIHRoZSBDU1YgZmlsZSAod2hpY2ggY2FuIHNwYW4gbXVsdGlwbGUgaW5wdXQgbGluZXMpOlxuIik7Cisib2YgdGhlIENTViBmaWxlICh3aGljaCBjYW4gc3BhbiBtdWx0aXBsZSBpbnB1dCBsaW5lcykuXG4iKTsKIAogUHlEb2NfU1RSVkFSKGNzdl93cml0ZXJfZG9jLAogIiAgICBjc3Zfd3JpdGVyID0gY3N2LndyaXRlcihmaWxlb2JqIFssIGRpYWxlY3Q9J2V4Y2VsJ11cbiIKQEAgLTE1NzUsNyArMTU4OSw3IEBACiAKIFB5RG9jX1NUUlZBUihjc3ZfcmVnaXN0ZXJfZGlhbGVjdF9kb2MsCiAiQ3JlYXRlIGEgbWFwcGluZyBmcm9tIGEgc3RyaW5nIG5hbWUgdG8gYSBkaWFsZWN0IGNsYXNzLlxuIgotIiAgICBkaWFsZWN0ID0gY3N2LnJlZ2lzdGVyX2RpYWxlY3QobmFtZSwgZGlhbGVjdCkiKTsKKyIgICAgZGlhbGVjdCA9IGNzdi5yZWdpc3Rlcl9kaWFsZWN0KG5hbWVbLCBkaWFsZWN0WywgKipmbXRwYXJhbXNdXSkiKTsKIAogUHlEb2NfU1RSVkFSKGNzdl91bnJlZ2lzdGVyX2RpYWxlY3RfZG9jLAogIkRlbGV0ZSB0aGUgbmFtZS9kaWFsZWN0IG1hcHBpbmcgYXNzb2NpYXRlZCB3aXRoIGEgc3RyaW5nIG5hbWUuXG4iCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvX2N0eXBlcy5jIGIvTW9kdWxlcy9fY3R5cGVzL19jdHlwZXMuYwppbmRleCA0ODM1MWJlLi4yYjI3ZWQzIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvX2N0eXBlcy5jCisrKyBiL01vZHVsZXMvX2N0eXBlcy9fY3R5cGVzLmMKQEAgLTI3Niw4ICsyNzYsMTAgQEAKICAgICBpZiAocHJlZml4KQogICAgICAgICBsZW4gKz0gc3RybGVuKHByZWZpeCk7CiAgICAgcmVzdWx0ID0gUHlNZW1fTWFsbG9jKGxlbiArIDEpOwotICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKKyAgICBpZiAocmVzdWx0ID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogICAgIGlmIChwcmVmaXgpCiAgICAgICAgIHN0cmNweShyZXN1bHQsIHByZWZpeCk7CiAgICAgZWxzZQpAQCAtMjg3LDYgKzI4OSw0OCBAQAogfQogCiAvKgorICBBbGxvY2F0ZSBhIG1lbW9yeSBibG9jayBmb3IgYSBwZXAzMTE4IGZvcm1hdCBzdHJpbmcsIGFkZGluZworICB0aGUgZ2l2ZW4gcHJlZml4IChpZiBub24tbnVsbCksIGFuIGFkZGl0aW9uYWwgc2hhcGUgcHJlZml4LCBhbmQgYSBzdWZmaXguCisgIFJldHVybnMgTlVMTCBvbiBmYWlsdXJlLCB3aXRoIHRoZSBlcnJvciBpbmRpY2F0b3Igc2V0LiAgSWYgY2FsbGVkIHdpdGgKKyAgYSBzdWZmaXggb2YgTlVMTCB0aGUgZXJyb3IgaW5kaWNhdG9yIG11c3QgYWxyZWFkeSBiZSBzZXQuCisgKi8KK2NoYXIgKgorX2N0eXBlc19hbGxvY19mb3JtYXRfc3RyaW5nX3dpdGhfc2hhcGUoaW50IG5kaW0sIGNvbnN0IFB5X3NzaXplX3QgKnNoYXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcHJlZml4LCBjb25zdCBjaGFyICpzdWZmaXgpCit7CisgICAgY2hhciAqbmV3X3ByZWZpeDsKKyAgICBjaGFyICpyZXN1bHQ7CisgICAgY2hhciBidWZbMzJdOworICAgIGludCBwcmVmaXhfbGVuOworICAgIGludCBrOworCisgICAgcHJlZml4X2xlbiA9IDMyICogbmRpbSArIDM7CisgICAgaWYgKHByZWZpeCkKKyAgICAgICAgcHJlZml4X2xlbiArPSBzdHJsZW4ocHJlZml4KTsKKyAgICBuZXdfcHJlZml4ID0gUHlNZW1fTWFsbG9jKHByZWZpeF9sZW4pOworICAgIGlmIChuZXdfcHJlZml4ID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIG5ld19wcmVmaXhbMF0gPSAnXDAnOworICAgIGlmIChwcmVmaXgpCisgICAgICAgIHN0cmNweShuZXdfcHJlZml4LCBwcmVmaXgpOworICAgIGlmIChuZGltID4gMCkgeworICAgICAgICAvKiBBZGQgdGhlIHByZWZpeCAiKHNoYXBlWzBdLHNoYXBlWzFdLC4uLixzaGFwZVtuZGltLTFdKSIgKi8KKyAgICAgICAgc3RyY2F0KG5ld19wcmVmaXgsICIoIik7CisgICAgICAgIGZvciAoayA9IDA7IGsgPCBuZGltOyArK2spIHsKKyAgICAgICAgICAgIGlmIChrIDwgbmRpbS0xKSB7CisgICAgICAgICAgICAgICAgc3ByaW50ZihidWYsICIlIlBZX0ZPUk1BVF9TSVpFX1QiZCwiLCBzaGFwZVtrXSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNwcmludGYoYnVmLCAiJSJQWV9GT1JNQVRfU0laRV9UImQpIiwgc2hhcGVba10pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3RyY2F0KG5ld19wcmVmaXgsIGJ1Zik7CisgICAgICAgIH0KKyAgICB9CisgICAgcmVzdWx0ID0gX2N0eXBlc19hbGxvY19mb3JtYXRfc3RyaW5nKG5ld19wcmVmaXgsIHN1ZmZpeCk7CisgICAgUHlNZW1fRnJlZShuZXdfcHJlZml4KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisvKgogICBQeUNTdHJ1Y3RUeXBlX1R5cGUgLSBhIG1ldGEgdHlwZS9jbGFzcy4gIENyZWF0aW5nIGEgbmV3IGNsYXNzIHVzaW5nIHRoaXMgb25lIGFzCiAgIF9fbWV0YWNsYXNzX18gd2lsbCBjYWxsIHRoZSBjb250cnVjdG9yIFN0cnVjdFVuaW9uVHlwZV9uZXcuICBJdCByZXBsYWNlcyB0aGUKICAgdHBfZGljdCBtZW1iZXIgd2l0aCBhIG5ldyBpbnN0YW5jZSBvZiBTdGdEaWN0LCBhbmQgaW5pdGlhbGl6ZXMgdGhlIEMKQEAgLTQxOSw1MCArNDYzLDY1IEBACiBzdGF0aWMgUHlPYmplY3QgKgogQ0RhdGFUeXBlX2Zyb21fYnVmZmVyKFB5T2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICB2b2lkICpidWZmZXI7Ci0gICAgUHlfc3NpemVfdCBidWZmZXJfbGVuOworICAgIFB5T2JqZWN0ICpvYmo7CisgICAgUHlPYmplY3QgKm12OworICAgIFB5T2JqZWN0ICpyZXN1bHQ7CisgICAgUHlfYnVmZmVyICpidWZmZXI7CiAgICAgUHlfc3NpemVfdCBvZmZzZXQgPSAwOwotICAgIFB5T2JqZWN0ICpvYmosICpyZXN1bHQ7CisKICAgICBTdGdEaWN0T2JqZWN0ICpkaWN0ID0gUHlUeXBlX3N0Z2RpY3QodHlwZSk7CiAgICAgYXNzZXJ0IChkaWN0KTsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAotI2lmIChQWV9WRVJTSU9OX0hFWCA8IDB4MDIwNTAwMDApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJPfGk6ZnJvbV9idWZmZXIiLAotI2Vsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIk98bjpmcm9tX2J1ZmZlciIsCi0jZW5kaWYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJm9iaiwgJm9mZnNldCkpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPfG46ZnJvbV9idWZmZXIiLCAmb2JqLCAmb2Zmc2V0KSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBpZiAoLTEgPT0gUHlPYmplY3RfQXNXcml0ZUJ1ZmZlcihvYmosICZidWZmZXIsICZidWZmZXJfbGVuKSkKKyAgICBtdiA9IFB5TWVtb3J5Vmlld19Gcm9tT2JqZWN0KG9iaik7CisgICAgaWYgKG12ID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCisgICAgYnVmZmVyID0gUHlNZW1vcnlWaWV3X0dFVF9CVUZGRVIobXYpOworCisgICAgaWYgKGJ1ZmZlci0+cmVhZG9ubHkpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICJ1bmRlcmx5aW5nIGJ1ZmZlciBpcyBub3Qgd3JpdGFibGUiKTsKKyAgICAgICAgUHlfREVDUkVGKG12KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgaWYgKCFQeUJ1ZmZlcl9Jc0NvbnRpZ3VvdXMoYnVmZmVyLCAnQycpKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAidW5kZXJseWluZyBidWZmZXIgaXMgbm90IEMgY29udGlndW91cyIpOworICAgICAgICBQeV9ERUNSRUYobXYpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKICAgICBpZiAob2Zmc2V0IDwgMCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJvZmZzZXQgY2Fubm90IGJlIG5lZ2F0aXZlIik7CisgICAgICAgIFB5X0RFQ1JFRihtdik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBpZiAoZGljdC0+c2l6ZSA+IGJ1ZmZlcl9sZW4gLSBvZmZzZXQpIHsKKworICAgIGlmIChkaWN0LT5zaXplID4gYnVmZmVyLT5sZW4gLSBvZmZzZXQpIHsKICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsCi0jaWYgKFBZX1ZFUlNJT05fSEVYIDwgMHgwMjA1MDAwMCkKLSAgICAgICAgICAgICAgICAgICAgICJCdWZmZXIgc2l6ZSB0b28gc21hbGwgKCVkIGluc3RlYWQgb2YgYXQgbGVhc3QgJWQgYnl0ZXMpIiwKLSNlbHNlCi0gICAgICAgICAgICAgICAgICAgICAiQnVmZmVyIHNpemUgdG9vIHNtYWxsICglemQgaW5zdGVhZCBvZiBhdCBsZWFzdCAlemQgYnl0ZXMpIiwKLSNlbmRpZgotICAgICAgICAgICAgICAgICAgICAgYnVmZmVyX2xlbiwgZGljdC0+c2l6ZSArIG9mZnNldCk7CisgICAgICAgICAgICAgICAgICAgICAiQnVmZmVyIHNpemUgdG9vIHNtYWxsICIKKyAgICAgICAgICAgICAgICAgICAgICIoJXpkIGluc3RlYWQgb2YgYXQgbGVhc3QgJXpkIGJ5dGVzKSIsCisgICAgICAgICAgICAgICAgICAgICBidWZmZXItPmxlbiwgZGljdC0+c2l6ZSArIG9mZnNldCk7CisgICAgICAgIFB5X0RFQ1JFRihtdik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIHJlc3VsdCA9IFB5Q0RhdGFfQXRBZGRyZXNzKHR5cGUsIChjaGFyICopYnVmZmVyICsgb2Zmc2V0KTsKLSAgICBpZiAocmVzdWx0ID09IE5VTEwpCisgICAgcmVzdWx0ID0gUHlDRGF0YV9BdEFkZHJlc3ModHlwZSwgKGNoYXIgKilidWZmZXItPmJ1ZiArIG9mZnNldCk7CisgICAgaWYgKHJlc3VsdCA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRihtdik7CiAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAotICAgIFB5X0lOQ1JFRihvYmopOwotICAgIGlmICgtMSA9PSBLZWVwUmVmKChDRGF0YU9iamVjdCAqKXJlc3VsdCwgLTEsIG9iaikpIHsKKyAgICBpZiAoLTEgPT0gS2VlcFJlZigoQ0RhdGFPYmplY3QgKilyZXN1bHQsIC0xLCBtdikpIHsKICAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KKwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTQ3NSw0NyArNTM0LDM2IEBACiBzdGF0aWMgUHlPYmplY3QgKgogQ0RhdGFUeXBlX2Zyb21fYnVmZmVyX2NvcHkoUHlPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICphcmdzKQogewotICAgIGNvbnN0IHZvaWQgKmJ1ZmZlcjsKLSAgICBQeV9zc2l6ZV90IGJ1ZmZlcl9sZW47CisgICAgUHlfYnVmZmVyIGJ1ZmZlcjsKICAgICBQeV9zc2l6ZV90IG9mZnNldCA9IDA7Ci0gICAgUHlPYmplY3QgKm9iaiwgKnJlc3VsdDsKKyAgICBQeU9iamVjdCAqcmVzdWx0OwogICAgIFN0Z0RpY3RPYmplY3QgKmRpY3QgPSBQeVR5cGVfc3RnZGljdCh0eXBlKTsKICAgICBhc3NlcnQgKGRpY3QpOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCi0jaWYgKFBZX1ZFUlNJT05fSEVYIDwgMHgwMjA1MDAwMCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIk98aTpmcm9tX2J1ZmZlciIsCi0jZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAiT3xuOmZyb21fYnVmZmVyIiwKLSNlbmRpZgotICAgICAgICAgICAgICAgICAgICAgICAgICAmb2JqLCAmb2Zmc2V0KSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBpZiAoLTEgPT0gUHlPYmplY3RfQXNSZWFkQnVmZmVyKG9iaiwgKGNvbnN0IHZvaWQqKikmYnVmZmVyLCAmYnVmZmVyX2xlbikpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ5KnxuOmZyb21fYnVmZmVyIiwgJmJ1ZmZlciwgJm9mZnNldCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgaWYgKG9mZnNldCA8IDApIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAib2Zmc2V0IGNhbm5vdCBiZSBuZWdhdGl2ZSIpOworICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZidWZmZXIpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBpZiAoZGljdC0+c2l6ZSA+IGJ1ZmZlcl9sZW4gLSBvZmZzZXQpIHsKKyAgICBpZiAoZGljdC0+c2l6ZSA+IGJ1ZmZlci5sZW4gLSBvZmZzZXQpIHsKICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsCi0jaWYgKFBZX1ZFUlNJT05fSEVYIDwgMHgwMjA1MDAwMCkKLSAgICAgICAgICAgICAgICAgICAgICJCdWZmZXIgc2l6ZSB0b28gc21hbGwgKCVkIGluc3RlYWQgb2YgYXQgbGVhc3QgJWQgYnl0ZXMpIiwKLSNlbHNlCiAgICAgICAgICAgICAgICAgICAgICAiQnVmZmVyIHNpemUgdG9vIHNtYWxsICglemQgaW5zdGVhZCBvZiBhdCBsZWFzdCAlemQgYnl0ZXMpIiwKLSNlbmRpZgotICAgICAgICAgICAgICAgICAgICAgYnVmZmVyX2xlbiwgZGljdC0+c2l6ZSArIG9mZnNldCk7CisgICAgICAgICAgICAgICAgICAgICBidWZmZXIubGVuLCBkaWN0LT5zaXplICsgb2Zmc2V0KTsKKyAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmYnVmZmVyKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCiAgICAgcmVzdWx0ID0gR2VuZXJpY1B5Q0RhdGFfbmV3KChQeVR5cGVPYmplY3QgKil0eXBlLCBOVUxMLCBOVUxMKTsKLSAgICBpZiAocmVzdWx0ID09IE5VTEwpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIG1lbWNweSgoKENEYXRhT2JqZWN0ICopcmVzdWx0KS0+Yl9wdHIsCi0gICAgICAgICAgIChjaGFyICopYnVmZmVyK29mZnNldCwgZGljdC0+c2l6ZSk7CisgICAgaWYgKHJlc3VsdCAhPSBOVUxMKSB7CisgICAgICAgIG1lbWNweSgoKENEYXRhT2JqZWN0ICopcmVzdWx0KS0+Yl9wdHIsCisgICAgICAgICAgICAgICAoY2hhciAqKWJ1ZmZlci5idWYgKyBvZmZzZXQsIGRpY3QtPnNpemUpOworICAgIH0KKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZidWZmZXIpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTU2NSw3ICs2MTMsNyBAQAogI2lmZGVmIF9fQ1lHV0lOX18KIC8qIGRsZXJyb3IoKSBpc24ndCB2ZXJ5IGhlbHBmdWwgb24gY3lnd2luICovCiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgInN5bWJvbCAnJXMnIG5vdCBmb3VuZCAoJXMpICIsCisgICAgICAgICAgICAgICAgICAgICAic3ltYm9sICclcycgbm90IGZvdW5kIiwKICAgICAgICAgICAgICAgICAgICAgIG5hbWUpOwogI2Vsc2UKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsIGN0eXBlc19kbGVycm9yKCkpOwpAQCAtODc5LDE0ICs5MjcsMjEgQEAKIAogICAgIGlmIChwcm90bykgewogICAgICAgICBTdGdEaWN0T2JqZWN0ICppdGVtZGljdCA9IFB5VHlwZV9zdGdkaWN0KHByb3RvKTsKKyAgICAgICAgY29uc3QgY2hhciAqY3VycmVudF9mb3JtYXQ7CiAgICAgICAgIGFzc2VydChpdGVtZGljdCk7CiAgICAgICAgIC8qIElmIGl0ZW1kaWN0LT5mb3JtYXQgaXMgTlVMTCwgdGhlbiB0aGlzIGlzIGEgcG9pbnRlciB0byBhbgogICAgICAgICAgICBpbmNvbXBsZXRlIHR5cGUuICBXZSBjcmVhdGUgYSBnZW5lcmljIGZvcm1hdCBzdHJpbmcKICAgICAgICAgICAgJ3BvaW50ZXIgdG8gYnl0ZXMnIGluIHRoaXMgY2FzZS4gIFhYWCBCZXR0ZXIgd291bGQgYmUgdG8KICAgICAgICAgICAgZml4IHRoZSBmb3JtYXQgc3RyaW5nIGxhdGVyLi4uCiAgICAgICAgICovCi0gICAgICAgIHN0Z2RpY3QtPmZvcm1hdCA9IF9jdHlwZXNfYWxsb2NfZm9ybWF0X3N0cmluZygiJiIsCi0gICAgICAgICAgICAgICAgICAgICAgaXRlbWRpY3QtPmZvcm1hdCA/IGl0ZW1kaWN0LT5mb3JtYXQgOiAiQiIpOworICAgICAgICBjdXJyZW50X2Zvcm1hdCA9IGl0ZW1kaWN0LT5mb3JtYXQgPyBpdGVtZGljdC0+Zm9ybWF0IDogIkIiOworICAgICAgICBpZiAoaXRlbWRpY3QtPnNoYXBlICE9IE5VTEwpIHsKKyAgICAgICAgICAgIC8qIHBvaW50ZXIgdG8gYW4gYXJyYXk6IHRoZSBzaGFwZSBuZWVkcyB0byBiZSBwcmVmaXhlZCAqLworICAgICAgICAgICAgc3RnZGljdC0+Zm9ybWF0ID0gX2N0eXBlc19hbGxvY19mb3JtYXRfc3RyaW5nX3dpdGhfc2hhcGUoCisgICAgICAgICAgICAgICAgaXRlbWRpY3QtPm5kaW0sIGl0ZW1kaWN0LT5zaGFwZSwgIiYiLCBjdXJyZW50X2Zvcm1hdCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzdGdkaWN0LT5mb3JtYXQgPSBfY3R5cGVzX2FsbG9jX2Zvcm1hdF9zdHJpbmcoIiYiLCBjdXJyZW50X2Zvcm1hdCk7CisgICAgICAgIH0KICAgICAgICAgaWYgKHN0Z2RpY3QtPmZvcm1hdCA9PSBOVUxMKSB7CiAgICAgICAgICAgICBQeV9ERUNSRUYoKFB5T2JqZWN0ICopc3RnZGljdCk7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTEwNTAsNyArMTEwNSw3IEBACiAgICAgcHRyID0gdmlldy5idWY7CiAgICAgaWYgKHNpemUgPiBzZWxmLT5iX3NpemUpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAic3RyaW5nIHRvbyBsb25nIik7CisgICAgICAgICAgICAgICAgICAgICAgICAiYnl0ZSBzdHJpbmcgdG9vIGxvbmciKTsKICAgICAgICAgZ290byBmYWlsOwogICAgIH0KIApAQCAtMTEwMiw3ICsxMTU3LDcgQEAKICAgICBzaXplID0gUHlCeXRlc19HRVRfU0laRSh2YWx1ZSk7CiAgICAgaWYgKHNpemUgPiBzZWxmLT5iX3NpemUpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAic3RyaW5nIHRvbyBsb25nIik7CisgICAgICAgICAgICAgICAgICAgICAgICAiYnl0ZSBzdHJpbmcgdG9vIGxvbmciKTsKICAgICAgICAgUHlfREVDUkVGKHZhbHVlKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KQEAgLTEyNjQsNyArMTMxOSw2IEBACiAgICAgbG9uZyBsZW5ndGg7CiAgICAgaW50IG92ZXJmbG93OwogICAgIFB5X3NzaXplX3QgaXRlbXNpemUsIGl0ZW1hbGlnbjsKLSAgICBjaGFyIGJ1ZlszMl07CiAKICAgICAvKiBjcmVhdGUgdGhlIG5ldyBpbnN0YW5jZSAod2hpY2ggaXMgYSBjbGFzcywKICAgICAgICBzaW5jZSB3ZSBhcmUgYSBtZXRhdHlwZSEpICovCkBAIC0xMzE0LDE5ICsxMzY4LDE1IEBACiAgICAgfQogCiAgICAgYXNzZXJ0KGl0ZW1kaWN0LT5mb3JtYXQpOwotICAgIGlmIChpdGVtZGljdC0+Zm9ybWF0WzBdID09ICcoJykgewotICAgICAgICBzcHJpbnRmKGJ1ZiwgIiglbGQsIiwgbGVuZ3RoKTsKLSAgICAgICAgc3RnZGljdC0+Zm9ybWF0ID0gX2N0eXBlc19hbGxvY19mb3JtYXRfc3RyaW5nKGJ1ZiwgaXRlbWRpY3QtPmZvcm1hdCsxKTsKLSAgICB9IGVsc2UgewotICAgICAgICBzcHJpbnRmKGJ1ZiwgIiglbGQpIiwgbGVuZ3RoKTsKLSAgICAgICAgc3RnZGljdC0+Zm9ybWF0ID0gX2N0eXBlc19hbGxvY19mb3JtYXRfc3RyaW5nKGJ1ZiwgaXRlbWRpY3QtPmZvcm1hdCk7Ci0gICAgfQorICAgIHN0Z2RpY3QtPmZvcm1hdCA9IF9jdHlwZXNfYWxsb2NfZm9ybWF0X3N0cmluZyhOVUxMLCBpdGVtZGljdC0+Zm9ybWF0KTsKICAgICBpZiAoc3RnZGljdC0+Zm9ybWF0ID09IE5VTEwpCiAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgc3RnZGljdC0+bmRpbSA9IGl0ZW1kaWN0LT5uZGltICsgMTsKLSAgICBzdGdkaWN0LT5zaGFwZSA9IFB5TWVtX01hbGxvYyhzaXplb2YoUHlfc3NpemVfdCAqKSAqIHN0Z2RpY3QtPm5kaW0pOwotICAgIGlmIChzdGdkaWN0LT5zaGFwZSA9PSBOVUxMKQorICAgIHN0Z2RpY3QtPnNoYXBlID0gUHlNZW1fTWFsbG9jKHNpemVvZihQeV9zc2l6ZV90KSAqIHN0Z2RpY3QtPm5kaW0pOworICAgIGlmIChzdGdkaWN0LT5zaGFwZSA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQogICAgIHN0Z2RpY3QtPnNoYXBlWzBdID0gbGVuZ3RoOwogICAgIG1lbW1vdmUoJnN0Z2RpY3QtPnNoYXBlWzFdLCBpdGVtZGljdC0+c2hhcGUsCiAgICAgICAgIHNpemVvZihQeV9zc2l6ZV90KSAqIChzdGdkaWN0LT5uZGltIC0gMSkpOwpAQCAtMTM1Nyw3ICsxNDA3LDggQEAKICAgICBpZiAoLTEgPT0gUHlEaWN0X1VwZGF0ZSgoUHlPYmplY3QgKilzdGdkaWN0LCByZXN1bHQtPnRwX2RpY3QpKQogICAgICAgICBnb3RvIGVycm9yOwogICAgIFB5X0RFQ1JFRihyZXN1bHQtPnRwX2RpY3QpOwotICAgIHJlc3VsdC0+dHBfZGljdCA9IChQeU9iamVjdCAqKXN0Z2RpY3Q7CisgICAgcmVzdWx0LT50cF9kaWN0ID0gKFB5T2JqZWN0ICopc3RnZGljdDsgIC8qIHN0ZWFsIHRoZSByZWZlcmVuY2UgKi8KKyAgICBzdGdkaWN0ID0gTlVMTDsKIAogICAgIC8qIFNwZWNpYWwgY2FzZSBmb3IgY2hhcmFjdGVyIGFycmF5cy4KICAgICAgICBBIHBlcm1hbmVudCBhbm5veWFuY2U6IGNoYXIgYXJyYXlzIGFyZSBhbHNvIHN0cmluZ3MhCkBAIC0xNDQ1LDcgKzE0OTYsNyBAQAogICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CiAgICAgICAgIHJldHVybiBQeV9Ob25lOwogICAgIH0KLSAgICBpZiAoUHlVbmljb2RlX0NoZWNrKHZhbHVlKSB8fCBQeUJ5dGVzX0NoZWNrKHZhbHVlKSkgeworICAgIGlmIChQeVVuaWNvZGVfQ2hlY2sodmFsdWUpKSB7CiAgICAgICAgIFB5Q0FyZ09iamVjdCAqcGFyZzsKICAgICAgICAgc3RydWN0IGZpZWxkZGVzYyAqZmQgPSBfY3R5cGVzX2dldF9maWVsZGRlc2MoIloiKTsKIApAQCAtMTU5NywyNSArMTY0OCw4IEBACiAgICAgICAgIHJldHVybiAoUHlPYmplY3QgKilwYXJnOwogICAgIH0KICAgICAvKiBYWFggc3RydW5pOiByZW1vdmUgbGF0ZXIgKi8KLS8qIHN0cmluZyAqLwotICAgIGlmIChQeUJ5dGVzX0NoZWNrKHZhbHVlKSkgewotICAgICAgICBQeUNBcmdPYmplY3QgKnBhcmc7Ci0gICAgICAgIHN0cnVjdCBmaWVsZGRlc2MgKmZkID0gX2N0eXBlc19nZXRfZmllbGRkZXNjKCJ6Iik7Ci0KLSAgICAgICAgcGFyZyA9IFB5Q0FyZ09iamVjdF9uZXcoKTsKLSAgICAgICAgaWYgKHBhcmcgPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICBwYXJnLT5wZmZpX3R5cGUgPSAmZmZpX3R5cGVfcG9pbnRlcjsKLSAgICAgICAgcGFyZy0+dGFnID0gJ3onOwotICAgICAgICBwYXJnLT5vYmogPSBmZC0+c2V0ZnVuYygmcGFyZy0+dmFsdWUsIHZhbHVlLCAwKTsKLSAgICAgICAgaWYgKHBhcmctPm9iaiA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBQeV9ERUNSRUYocGFyZyk7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gKFB5T2JqZWN0ICopcGFyZzsKLSAgICB9CiAvKiBieXRlcyAqLwotICAgIGlmIChQeUJ5dGVBcnJheV9DaGVjayh2YWx1ZSkpIHsKKyAgICBpZiAoUHlCeXRlc19DaGVjayh2YWx1ZSkpIHsKICAgICAgICAgUHlDQXJnT2JqZWN0ICpwYXJnOwogICAgICAgICBzdHJ1Y3QgZmllbGRkZXNjICpmZCA9IF9jdHlwZXNfZ2V0X2ZpZWxkZGVzYygieiIpOwogCkBAIC0yMjU5LDYgKzIyOTMsMTAgQEAKICAgICAgICBhcmd0eXBlcyB3b3VsZCBiZSBhIGN0eXBlcyB0eXBlKS4KICAgICAqLwogICAgIHN0Z2RpY3QtPmZvcm1hdCA9IF9jdHlwZXNfYWxsb2NfZm9ybWF0X3N0cmluZyhOVUxMLCAiWHt9Iik7CisgICAgaWYgKHN0Z2RpY3QtPmZvcm1hdCA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRigoUHlPYmplY3QgKilzdGdkaWN0KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogICAgIHN0Z2RpY3QtPmZsYWdzIHw9IFRZUEVGTEFHX0lTUE9JTlRFUjsKIAogICAgIC8qIGNyZWF0ZSB0aGUgbmV3IGluc3RhbmNlICh3aGljaCBpcyBhIGNsYXNzLApAQCAtMjM0MSw2ICsyMzc5LDggQEAKICAgICBpZiAoc2VsZi0+Yl9vYmplY3RzID09IE5VTEwpIHsKICAgICAgICAgaWYgKHNlbGYtPmJfbGVuZ3RoKSB7CiAgICAgICAgICAgICBzZWxmLT5iX29iamVjdHMgPSBQeURpY3RfTmV3KCk7CisgICAgICAgICAgICBpZiAoc2VsZi0+Yl9vYmplY3RzID09IE5VTEwpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CiAgICAgICAgICAgICBzZWxmLT5iX29iamVjdHMgPSBQeV9Ob25lOwpAQCAtMjM1Miw3ICsyMzkyLDExIEBACiBzdGF0aWMgUHlPYmplY3QgKgogR2V0S2VlcGVkT2JqZWN0cyhDRGF0YU9iamVjdCAqdGFyZ2V0KQogewotICAgIHJldHVybiBQeUNEYXRhX0dldENvbnRhaW5lcih0YXJnZXQpLT5iX29iamVjdHM7CisgICAgQ0RhdGFPYmplY3QgKmNvbnRhaW5lcjsKKyAgICBjb250YWluZXIgPSBQeUNEYXRhX0dldENvbnRhaW5lcih0YXJnZXQpOworICAgIGlmIChjb250YWluZXIgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmV0dXJuIGNvbnRhaW5lci0+Yl9vYmplY3RzOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtMjQwOSw2ICsyNDUzLDEwIEBACiAgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICBvYiA9IFB5Q0RhdGFfR2V0Q29udGFpbmVyKHRhcmdldCk7CisgICAgaWYgKG9iID09IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKGtlZXApOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQogICAgIGlmIChvYi0+Yl9vYmplY3RzID09IE5VTEwgfHwgIVB5RGljdF9DaGVja0V4YWN0KG9iLT5iX29iamVjdHMpKSB7CiAgICAgICAgIFB5X1hERUNSRUYob2ItPmJfb2JqZWN0cyk7CiAgICAgICAgIG9iLT5iX29iamVjdHMgPSBrZWVwOyAvKiByZWZjb3VudCBjb25zdW1lZCAqLwpAQCAtMjc5NSw2ICsyODQzLDkgQEAKICAgICAgICAgICAgIC8qIFhYWCAqLzsKIAogICAgICAgICB2YWx1ZSA9IEdldEtlZXBlZE9iamVjdHMoc3JjKTsKKyAgICAgICAgaWYgKHZhbHVlID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKwogICAgICAgICBQeV9JTkNSRUYodmFsdWUpOwogICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgfQpAQCAtMjgxOCw2ICsyODY5LDkgQEAKICAgICAgICAgKih2b2lkICoqKXB0ciA9IHNyYy0+Yl9wdHI7CiAKICAgICAgICAga2VlcCA9IEdldEtlZXBlZE9iamVjdHMoc3JjKTsKKyAgICAgICAgaWYgKGtlZXAgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworCiAgICAgICAgIC8qCiAgICAgICAgICAgV2UgYXJlIGFzc2lnbmluZyBhbiBhcnJheSBvYmplY3QgdG8gYSBmaWVsZCB3aGljaCByZXByZXNlbnRzCiAgICAgICAgICAgYSBwb2ludGVyLiBUaGlzIGhhcyB0aGUgc2FtZSBlZmZlY3QgYXMgY29udmVydGluZyBhbiBhcnJheQpAQCAtMzE3Miw3ICszMjI2LDcgQEAKICAgICAgICAgcmV0dXJuICpwbmFtZSA/IDEgOiAwOwogICAgIH0KICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAiZnVuY3Rpb24gbmFtZSBtdXN0IGJlIHN0cmluZyBvciBpbnRlZ2VyIik7CisgICAgICAgICAgICAgICAgICAgICJmdW5jdGlvbiBuYW1lIG11c3QgYmUgc3RyaW5nLCBieXRlcyBvYmplY3Qgb3IgaW50ZWdlciIpOwogICAgIHJldHVybiAwOwogfQogCkBAIC0zMjQ1LDcgKzMyOTksNyBAQAogI2lmZGVmIF9fQ1lHV0lOX18KIC8qIGRsZXJyb3IoKSBpc24ndCB2ZXJ5IGhlbHBmdWwgb24gY3lnd2luICovCiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19BdHRyaWJ1dGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICJmdW5jdGlvbiAnJXMnIG5vdCBmb3VuZCAoJXMpICIsCisgICAgICAgICAgICAgICAgICAgICAiZnVuY3Rpb24gJyVzJyBub3QgZm91bmQiLAogICAgICAgICAgICAgICAgICAgICAgbmFtZSk7CiAjZWxzZQogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfQXR0cmlidXRlRXJyb3IsIGN0eXBlc19kbGVycm9yKCkpOwpAQCAtMzgyOCw3ICszODgyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYXJncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwotICAgICAgICAvKiBJZiB0aGUgZXJyY2hlY2sgZnVudGlvbiBmYWlsZWQsIHJldHVybiBOVUxMLgorICAgICAgICAvKiBJZiB0aGUgZXJyY2hlY2sgZnVuY3Rpb24gZmFpbGVkLCByZXR1cm4gTlVMTC4KICAgICAgICAgICAgSWYgdGhlIGVycmNoZWNrIGZ1bmN0aW9uIHJldHVybmVkIGNhbGxhcmdzIHVuY2hhbmdlZCwKICAgICAgICAgICAgY29udGludWUgbm9ybWFsIHByb2Nlc3NpbmcuCiAgICAgICAgICAgIElmIHRoZSBlcnJjaGVjayBmdW5jdGlvbiByZXR1cm5lZCBzb21ldGhpbmcgZWxzZSwKQEAgLTQwNDQsOCArNDA5OCw4IEBACiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAgICAgaWYgKFB5VHVwbGVfR0VUX1NJWkUoYXJncykpIHsKLSAgICAgICAgaW50IHJlcyA9IF9pbml0X3Bvc19hcmdzKHNlbGYsIFB5X1RZUEUoc2VsZiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLCBrd2RzLCAwKTsKKyAgICAgICAgUHlfc3NpemVfdCByZXMgPSBfaW5pdF9wb3NfYXJncyhzZWxmLCBQeV9UWVBFKHNlbGYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MsIGt3ZHMsIDApOwogICAgICAgICBpZiAocmVzID09IC0xKQogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICBpZiAocmVzIDwgUHlUdXBsZV9HRVRfU0laRShhcmdzKSkgewpAQCAtNDIxNiw3ICs0MjcwLDcgQEAKICAgICAgICAgICAgIGkgKz0gc2VsZi0+Yl9sZW5ndGg7CiAgICAgICAgIHJldHVybiBBcnJheV9pdGVtKG15c2VsZiwgaSk7CiAgICAgfQotICAgIGVsc2UgaWYgUHlTbGljZV9DaGVjayhpdGVtKSB7CisgICAgZWxzZSBpZiAoUHlTbGljZV9DaGVjayhpdGVtKSkgewogICAgICAgICBTdGdEaWN0T2JqZWN0ICpzdGdkaWN0LCAqaXRlbWRpY3Q7CiAgICAgICAgIFB5T2JqZWN0ICpwcm90bzsKICAgICAgICAgUHlPYmplY3QgKm5wOwpAQCAtNDI3MSw4ICs0MzI1LDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xpY2VsZW4pOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBkZXN0ID0gKHdjaGFyX3QgKilQeU1lbV9NYWxsb2MoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGljZWxlbiAqIHNpemVvZih3Y2hhcl90KSk7CisgICAgICAgICAgICBkZXN0ID0gUHlNZW1fTmV3KHdjaGFyX3QsIHNsaWNlbGVuKTsKKyAgICAgICAgICAgIGlmIChkZXN0ID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBmb3IgKGN1ciA9IHN0YXJ0LCBpID0gMDsgaSA8IHNsaWNlbGVuOwogICAgICAgICAgICAgICAgICBjdXIgKz0gc3RlcCwgaSsrKSB7CkBAIC00MjkyLDYgKzQzNDksMTAgQEAKICAgICAgICAgZm9yIChjdXIgPSBzdGFydCwgaSA9IDA7IGkgPCBzbGljZWxlbjsKICAgICAgICAgICAgICBjdXIgKz0gc3RlcCwgaSsrKSB7CiAgICAgICAgICAgICBQeU9iamVjdCAqdiA9IEFycmF5X2l0ZW0obXlzZWxmLCBjdXIpOworICAgICAgICAgICAgaWYgKHYgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihucCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBQeUxpc3RfU0VUX0lURU0obnAsIGksIHYpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBucDsKQEAgLTQ3OTcsNyArNDg1OCw3IEBACiAgICAgKih2b2lkICoqKXNlbGYtPmJfcHRyID0gZHN0LT5iX3B0cjsKIAogICAgIC8qCi0gICAgICAgQSBQb2ludGVyIGluc3RhbmNlIG11c3Qga2VlcCBhIHRoZSB2YWx1ZSBpdCBwb2ludHMgdG8gYWxpdmUuICBTbywgYQorICAgICAgIEEgUG9pbnRlciBpbnN0YW5jZSBtdXN0IGtlZXAgdGhlIHZhbHVlIGl0IHBvaW50cyB0byBhbGl2ZS4gIFNvLCBhCiAgICAgICAgcG9pbnRlciBpbnN0YW5jZSBoYXMgYl9sZW5ndGggc2V0IHRvIDIgaW5zdGVhZCBvZiAxLCBhbmQgd2Ugc2V0CiAgICAgICAgJ3ZhbHVlJyBpdHNlbGYgYXMgdGhlIHNlY29uZCBpdGVtIG9mIHRoZSBiX29iamVjdHMgbGlzdCwgYWRkaXRpb25hbGx5LgogICAgICovCkBAIC00ODA2LDYgKzQ4NjcsOSBAQAogICAgICAgICByZXR1cm4gLTE7CiAKICAgICBrZWVwID0gR2V0S2VlcGVkT2JqZWN0cyhkc3QpOworICAgIGlmIChrZWVwID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKwogICAgIFB5X0lOQ1JFRihrZWVwKTsKICAgICByZXR1cm4gS2VlcFJlZihzZWxmLCAwLCBrZWVwKTsKIH0KQEAgLTQ5NDUsNyArNTAwOSw3IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tV2lkZUNoYXIocHRyICsgc3RhcnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRlc3QgPSAod2NoYXJfdCAqKVB5TWVtX01hbGxvYyhsZW4gKiBzaXplb2Yod2NoYXJfdCkpOworICAgICAgICAgICAgZGVzdCA9IFB5TWVtX05ldyh3Y2hhcl90LCBsZW4pOwogICAgICAgICAgICAgaWYgKGRlc3QgPT0gTlVMTCkKICAgICAgICAgICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgICAgIGZvciAoY3VyID0gc3RhcnQsIGkgPSAwOyBpIDwgbGVuOyBjdXIgKz0gc3RlcCwgaSsrKSB7CkBAIC01MjEyLDkgKzUyNzYsMTQgQEAKICAgICAgKi8KICAgICBpZiAoQ0RhdGFPYmplY3RfQ2hlY2soc3JjKSkgewogICAgICAgICBDRGF0YU9iamVjdCAqb2JqID0gKENEYXRhT2JqZWN0ICopc3JjOworICAgICAgICBDRGF0YU9iamVjdCAqY29udGFpbmVyOworCiAgICAgICAgIC8qIFB5Q0RhdGFfR2V0Q29udGFpbmVyIHdpbGwgaW5pdGlhbGl6ZSBzcmMuYl9vYmplY3RzLCB3ZSBuZWVkCiAgICAgICAgICAgIHRoaXMgc28gaXQgY2FuIGJlIHNoYXJlZCAqLwotICAgICAgICBQeUNEYXRhX0dldENvbnRhaW5lcihvYmopOworICAgICAgICBjb250YWluZXIgPSBQeUNEYXRhX0dldENvbnRhaW5lcihvYmopOworICAgICAgICBpZiAoY29udGFpbmVyID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGZhaWxlZDsKKwogICAgICAgICAvKiBCdXQgd2UgbmVlZCBhIGRpY3Rpb25hcnkhICovCiAgICAgICAgIGlmIChvYmotPmJfb2JqZWN0cyA9PSBQeV9Ob25lKSB7CiAgICAgICAgICAgICBQeV9ERUNSRUYoUHlfTm9uZSk7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvX2N0eXBlc190ZXN0LmMgYi9Nb2R1bGVzL19jdHlwZXMvX2N0eXBlc190ZXN0LmMKaW5kZXggM2E2ODQ1Zi4uZjk1N2UwMiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL19jdHlwZXNfdGVzdC5jCisrKyBiL01vZHVsZXMvX2N0eXBlcy9fY3R5cGVzX3Rlc3QuYwpAQCAtNTI3LDYgKzUyNyw0OSBAQAogICAgIHJldHVybiAxOwogfQogCitFWFBPUlQobG9uZyBsZWZ0ID0gMTApOworRVhQT1JUKGxvbmcgdG9wID0gMjApOworRVhQT1JUKGxvbmcgcmlnaHQgPSAzMCk7CitFWFBPUlQobG9uZyBib3R0b20gPSA0MCk7CisKK0VYUE9SVChSRUNUKSBSZXR1cm5SZWN0KGludCBpLCBSRUNUIGFyLCBSRUNUKiBiciwgUE9JTlQgY3AsIFJFQ1QgZHIsCisgICAgICAgICAgICAgICAgICAgICAgICBSRUNUICplciwgUE9JTlQgZnAsIFJFQ1QgZ3IpCit7CisgICAgLypDaGVjayBpbnB1dCAqLworICAgIGlmIChhci5sZWZ0ICsgYnItPmxlZnQgKyBkci5sZWZ0ICsgZXItPmxlZnQgKyBnci5sZWZ0ICE9IGxlZnQgKiA1KQorICAgIHsKKyAgICAgICAgYXIubGVmdCA9IDEwMDsKKyAgICAgICAgcmV0dXJuIGFyOworICAgIH0KKyAgICBpZiAoYXIucmlnaHQgKyBici0+cmlnaHQgKyBkci5yaWdodCArIGVyLT5yaWdodCArIGdyLnJpZ2h0ICE9IHJpZ2h0ICogNSkKKyAgICB7CisgICAgICAgIGFyLnJpZ2h0ID0gMTAwOworICAgICAgICByZXR1cm4gYXI7CisgICAgfQorICAgIGlmIChjcC54ICE9IGZwLngpCisgICAgeworICAgICAgICBhci5sZWZ0ID0gLTEwMDsKKyAgICB9CisgICAgaWYgKGNwLnkgIT0gZnAueSkKKyAgICB7CisgICAgICAgIGFyLmxlZnQgPSAtMjAwOworICAgIH0KKyAgICBzd2l0Y2goaSkKKyAgICB7CisgICAgY2FzZSAwOgorICAgICAgICByZXR1cm4gYXI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMToKKyAgICAgICAgcmV0dXJuIGRyOworICAgICAgICBicmVhazsKKyAgICBjYXNlIDI6CisgICAgICAgIHJldHVybiBncjsKKyAgICAgICAgYnJlYWs7CisKKyAgICB9CisgICAgcmV0dXJuIGFyOworfQorCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgc2hvcnQgeDsKICAgICBzaG9ydCB5OwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2NhbGxiYWNrcy5jIGIvTW9kdWxlcy9fY3R5cGVzL2NhbGxiYWNrcy5jCmluZGV4IGEzZDIzMjEuLjdjZDYxNjQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9jYWxsYmFja3MuYworKysgYi9Nb2R1bGVzL19jdHlwZXMvY2FsbGJhY2tzLmMKQEAgLTkyLDMyICs5Miw2IEBACiB9CiAKIAotLyogYWZ0ZXIgY29kZSB0aGF0IHB5cmV4IGdlbmVyYXRlcyAqLwotdm9pZCBfY3R5cGVzX2FkZF90cmFjZWJhY2soY2hhciAqZnVuY25hbWUsIGNoYXIgKmZpbGVuYW1lLCBpbnQgbGluZW5vKQotewotICAgIFB5T2JqZWN0ICpweV9nbG9iYWxzID0gMDsKLSAgICBQeUNvZGVPYmplY3QgKnB5X2NvZGUgPSAwOwotICAgIFB5RnJhbWVPYmplY3QgKnB5X2ZyYW1lID0gMDsKLQotICAgIHB5X2dsb2JhbHMgPSBQeURpY3RfTmV3KCk7Ci0gICAgaWYgKCFweV9nbG9iYWxzKSBnb3RvIGJhZDsKLSAgICBweV9jb2RlID0gUHlDb2RlX05ld0VtcHR5KGZpbGVuYW1lLCBmdW5jbmFtZSwgbGluZW5vKTsKLSAgICBpZiAoIXB5X2NvZGUpIGdvdG8gYmFkOwotICAgIHB5X2ZyYW1lID0gUHlGcmFtZV9OZXcoCi0gICAgICAgIFB5VGhyZWFkU3RhdGVfR2V0KCksIC8qUHlUaHJlYWRTdGF0ZSAqdHN0YXRlLCovCi0gICAgICAgIHB5X2NvZGUsICAgICAgICAgICAgIC8qUHlDb2RlT2JqZWN0ICpjb2RlLCovCi0gICAgICAgIHB5X2dsb2JhbHMsICAgICAgICAgIC8qUHlPYmplY3QgKmdsb2JhbHMsKi8KLSAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgLypQeU9iamVjdCAqbG9jYWxzKi8KLSAgICAgICAgKTsKLSAgICBpZiAoIXB5X2ZyYW1lKSBnb3RvIGJhZDsKLSAgICBweV9mcmFtZS0+Zl9saW5lbm8gPSBsaW5lbm87Ci0gICAgUHlUcmFjZUJhY2tfSGVyZShweV9mcmFtZSk7Ci0gIGJhZDoKLSAgICBQeV9YREVDUkVGKHB5X2dsb2JhbHMpOwotICAgIFB5X1hERUNSRUYocHlfY29kZSk7Ci0gICAgUHlfWERFQ1JFRihweV9mcmFtZSk7Ci19Ci0KICNpZmRlZiBNU19XSU4zMgogLyoKICAqIFdlIG11c3QgY2FsbCBBZGRSZWYoKSBvbiBub24tTlVMTCBDT00gcG9pbnRlcnMgd2UgcmVjZWl2ZSBhcyBhcmd1bWVudHMKQEAgLTIzNyw3ICsyMTEsNyBAQAogICAgIH0KIAogI2RlZmluZSBDSEVDSyh3aGF0LCB4KSBcCi1pZiAoeCA9PSBOVUxMKSBfY3R5cGVzX2FkZF90cmFjZWJhY2sod2hhdCwgIl9jdHlwZXMvY2FsbGJhY2tzLmMiLCBfX0xJTkVfXyAtIDEpLCBQeUVycl9QcmludCgpCitpZiAoeCA9PSBOVUxMKSBfUHlUcmFjZWJhY2tfQWRkKHdoYXQsICJfY3R5cGVzL2NhbGxiYWNrcy5jIiwgX19MSU5FX18gLSAxKSwgUHlFcnJfUHJpbnQoKQogCiAgICAgaWYgKGZsYWdzICYgKEZVTkNGTEFHX1VTRV9FUlJOTyB8IEZVTkNGTEFHX1VTRV9MQVNURVJST1IpKSB7CiAgICAgICAgIGVycm9yX29iamVjdCA9IF9jdHlwZXNfZ2V0X2Vycm9iaigmc3BhY2UpOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2NhbGxwcm9jLmMgYi9Nb2R1bGVzL19jdHlwZXMvY2FsbHByb2MuYwppbmRleCAwOWViNjUzLi44ZGFlZmZjIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvY2FsbHByb2MuYworKysgYi9Nb2R1bGVzL19jdHlwZXMvY2FsbHByb2MuYwpAQCAtMjYxLDE4ICsyNjEsMTggQEAKICAgICAgICAgICAgdG8gYSB2aXJ0dWFsIGFkZHJlc3MgZm9yIHdoaWNoIGl0IGRvZXMgbm90CiAgICAgICAgICAgIGhhdmUgdGhlIGFwcHJvcHJpYXRlIGFjY2Vzcy4gKi8KICAgICAgICAgaWYgKHByLT5FeGNlcHRpb25JbmZvcm1hdGlvblswXSA9PSAwKQotICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1dpbmRvd3NFcnJvciwKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19PU0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICJleGNlcHRpb246IGFjY2VzcyB2aW9sYXRpb24gcmVhZGluZyAlcCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgcHItPkV4Y2VwdGlvbkluZm9ybWF0aW9uWzFdKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1dpbmRvd3NFcnJvciwKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19PU0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICJleGNlcHRpb246IGFjY2VzcyB2aW9sYXRpb24gd3JpdGluZyAlcCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgcHItPkV4Y2VwdGlvbkluZm9ybWF0aW9uWzFdKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEVYQ0VQVElPTl9CUkVBS1BPSU5UOgogICAgICAgICAvKiBBIGJyZWFrcG9pbnQgd2FzIGVuY291bnRlcmVkLiAqLwotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfV2luZG93c0Vycm9yLAorICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT1NFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJleGNlcHRpb246IGJyZWFrcG9pbnQgZW5jb3VudGVyZWQiKTsKICAgICAgICAgYnJlYWs7CiAKQEAgLTI4MiwxNCArMjgyLDE0IEBACiAgICAgICAgICAgIGFsaWdubWVudC4gRm9yIGV4YW1wbGUsIDE2LWJpdCB2YWx1ZXMgbXVzdCBiZQogICAgICAgICAgICBhbGlnbmVkIG9uIDItYnl0ZSBib3VuZGFyaWVzLCAzMi1iaXQgdmFsdWVzIG9uCiAgICAgICAgICAgIDQtYnl0ZSBib3VuZGFyaWVzLCBhbmQgc28gb24uICovCi0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19XaW5kb3dzRXJyb3IsCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PU0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGlvbjogZGF0YXR5cGUgbWlzYWxpZ25tZW50Iik7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBFWENFUFRJT05fU0lOR0xFX1NURVA6CiAgICAgICAgIC8qIEEgdHJhY2UgdHJhcCBvciBvdGhlciBzaW5nbGUtaW5zdHJ1Y3Rpb24gbWVjaGFuaXNtCiAgICAgICAgICAgIHNpZ25hbGVkIHRoYXQgb25lIGluc3RydWN0aW9uIGhhcyBiZWVuIGV4ZWN1dGVkLiAqLwotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfV2luZG93c0Vycm9yLAorICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT1NFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJleGNlcHRpb246IHNpbmdsZSBzdGVwIik7CiAgICAgICAgIGJyZWFrOwogCkBAIC0yOTcsNyArMjk3LDcgQEAKICAgICAgICAgLyogVGhlIHRocmVhZCBhdHRlbXB0ZWQgdG8gYWNjZXNzIGFuIGFycmF5IGVsZW1lbnQKICAgICAgICAgICAgdGhhdCBpcyBvdXQgb2YgYm91bmRzLCBhbmQgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUKICAgICAgICAgICAgc3VwcG9ydHMgYm91bmRzIGNoZWNraW5nLiAqLwotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfV2luZG93c0Vycm9yLAorICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT1NFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJleGNlcHRpb246IGFycmF5IGJvdW5kcyBleGNlZWRlZCIpOwogICAgICAgICBicmVhazsKIApAQCAtMzA2LDI4ICszMDYsMjggQEAKICAgICAgICAgICAgaXMgZGVub3JtYWwuIEEgZGVub3JtYWwgdmFsdWUgaXMgb25lIHRoYXQgaXMgdG9vCiAgICAgICAgICAgIHNtYWxsIHRvIHJlcHJlc2VudCBhcyBhIHN0YW5kYXJkIGZsb2F0aW5nLXBvaW50CiAgICAgICAgICAgIHZhbHVlLiAqLwotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfV2luZG93c0Vycm9yLAorICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT1NFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJleGNlcHRpb246IGZsb2F0aW5nLXBvaW50IG9wZXJhbmQgZGVub3JtYWwiKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEVYQ0VQVElPTl9GTFRfRElWSURFX0JZX1pFUk86CiAgICAgICAgIC8qIFRoZSB0aHJlYWQgYXR0ZW1wdGVkIHRvIGRpdmlkZSBhIGZsb2F0aW5nLXBvaW50CiAgICAgICAgICAgIHZhbHVlIGJ5IGEgZmxvYXRpbmctcG9pbnQgZGl2aXNvciBvZiB6ZXJvLiAqLwotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfV2luZG93c0Vycm9yLAorICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT1NFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJleGNlcHRpb246IGZsb2F0IGRpdmlkZSBieSB6ZXJvIik7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBFWENFUFRJT05fRkxUX0lORVhBQ1RfUkVTVUxUOgogICAgICAgICAvKiBUaGUgcmVzdWx0IG9mIGEgZmxvYXRpbmctcG9pbnQgb3BlcmF0aW9uIGNhbm5vdCBiZQogICAgICAgICAgICByZXByZXNlbnRlZCBleGFjdGx5IGFzIGEgZGVjaW1hbCBmcmFjdGlvbi4gKi8KLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1dpbmRvd3NFcnJvciwKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX09TRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjZXB0aW9uOiBmbG9hdCBpbmV4YWN0Iik7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBFWENFUFRJT05fRkxUX0lOVkFMSURfT1BFUkFUSU9OOgogICAgICAgICAvKiBUaGlzIGV4Y2VwdGlvbiByZXByZXNlbnRzIGFueSBmbG9hdGluZy1wb2ludAogICAgICAgICAgICBleGNlcHRpb24gbm90IGluY2x1ZGVkIGluIHRoaXMgbGlzdC4gKi8KLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1dpbmRvd3NFcnJvciwKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX09TRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjZXB0aW9uOiBmbG9hdCBpbnZhbGlkIG9wZXJhdGlvbiIpOwogICAgICAgICBicmVhazsKIApAQCAtMzM1LDIxICszMzUsMjEgQEAKICAgICAgICAgLyogVGhlIGV4cG9uZW50IG9mIGEgZmxvYXRpbmctcG9pbnQgb3BlcmF0aW9uIGlzCiAgICAgICAgICAgIGdyZWF0ZXIgdGhhbiB0aGUgbWFnbml0dWRlIGFsbG93ZWQgYnkgdGhlCiAgICAgICAgICAgIGNvcnJlc3BvbmRpbmcgdHlwZS4gKi8KLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1dpbmRvd3NFcnJvciwKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX09TRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjZXB0aW9uOiBmbG9hdCBvdmVyZmxvdyIpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgRVhDRVBUSU9OX0ZMVF9TVEFDS19DSEVDSzoKICAgICAgICAgLyogVGhlIHN0YWNrIG92ZXJmbG93ZWQgb3IgdW5kZXJmbG93ZWQgYXMgdGhlIHJlc3VsdAogICAgICAgICAgICBvZiBhIGZsb2F0aW5nLXBvaW50IG9wZXJhdGlvbi4gKi8KLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1dpbmRvd3NFcnJvciwKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX09TRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjZXB0aW9uOiBzdGFjayBvdmVyL3VuZGVyZmxvdyIpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgRVhDRVBUSU9OX1NUQUNLX09WRVJGTE9XOgogICAgICAgICAvKiBUaGUgc3RhY2sgb3ZlcmZsb3dlZCBvciB1bmRlcmZsb3dlZCBhcyB0aGUgcmVzdWx0CiAgICAgICAgICAgIG9mIGEgZmxvYXRpbmctcG9pbnQgb3BlcmF0aW9uLiAqLwotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfV2luZG93c0Vycm9yLAorICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT1NFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJleGNlcHRpb246IHN0YWNrIG92ZXJmbG93Iik7CiAgICAgICAgIGJyZWFrOwogCkBAIC0zNTcsMjEgKzM1NywyMSBAQAogICAgICAgICAvKiBUaGUgZXhwb25lbnQgb2YgYSBmbG9hdGluZy1wb2ludCBvcGVyYXRpb24gaXMgbGVzcwogICAgICAgICAgICB0aGFuIHRoZSBtYWduaXR1ZGUgYWxsb3dlZCBieSB0aGUgY29ycmVzcG9uZGluZwogICAgICAgICAgICB0eXBlLiAqLwotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfV2luZG93c0Vycm9yLAorICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT1NFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJleGNlcHRpb246IGZsb2F0IHVuZGVyZmxvdyIpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgRVhDRVBUSU9OX0lOVF9ESVZJREVfQllfWkVSTzoKICAgICAgICAgLyogVGhlIHRocmVhZCBhdHRlbXB0ZWQgdG8gZGl2aWRlIGFuIGludGVnZXIgdmFsdWUgYnkKICAgICAgICAgICAgYW4gaW50ZWdlciBkaXZpc29yIG9mIHplcm8uICovCi0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19XaW5kb3dzRXJyb3IsCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PU0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGlvbjogaW50ZWdlciBkaXZpZGUgYnkgemVybyIpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgRVhDRVBUSU9OX0lOVF9PVkVSRkxPVzoKICAgICAgICAgLyogVGhlIHJlc3VsdCBvZiBhbiBpbnRlZ2VyIG9wZXJhdGlvbiBjYXVzZWQgYSBjYXJyeQogICAgICAgICAgICBvdXQgb2YgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYml0IG9mIHRoZSByZXN1bHQuICovCi0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19XaW5kb3dzRXJyb3IsCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PU0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGlvbjogaW50ZWdlciBvdmVyZmxvdyIpOwogICAgICAgICBicmVhazsKIApAQCAtMzc5LDE0ICszNzksMTQgQEAKICAgICAgICAgLyogVGhlIHRocmVhZCBhdHRlbXB0ZWQgdG8gZXhlY3V0ZSBhbiBpbnN0cnVjdGlvbgogICAgICAgICAgICB3aG9zZSBvcGVyYXRpb24gaXMgbm90IGFsbG93ZWQgaW4gdGhlIGN1cnJlbnQKICAgICAgICAgICAgbWFjaGluZSBtb2RlLiAqLwotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfV2luZG93c0Vycm9yLAorICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT1NFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJleGNlcHRpb246IHByaXZpbGVkZ2VkIGluc3RydWN0aW9uIik7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBFWENFUFRJT05fTk9OQ09OVElOVUFCTEVfRVhDRVBUSU9OOgogICAgICAgICAvKiBUaGUgdGhyZWFkIGF0dGVtcHRlZCB0byBjb250aW51ZSBleGVjdXRpb24gYWZ0ZXIgYQogICAgICAgICAgICBub25jb250aW51YWJsZSBleGNlcHRpb24gb2NjdXJyZWQuICovCi0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19XaW5kb3dzRXJyb3IsCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PU0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGlvbjogbm9jb250aW51YWJsZSIpOwogICAgICAgICBicmVhazsKIApAQCAtNjIwLDYgKzYyMCw4IEBACiAgICAgICAgIGFzc2VydChkaWN0LT5wYXJhbWZ1bmMpOwogICAgICAgICAvKiBJZiBpdCBoYXMgYW4gc3RnZGljdCwgaXQgaXMgYSBDRGF0YU9iamVjdCAqLwogICAgICAgICBjYXJnID0gZGljdC0+cGFyYW1mdW5jKChDRGF0YU9iamVjdCAqKW9iaik7CisgICAgICAgIGlmIChjYXJnID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIHBhLT5mZmlfdHlwZSA9IGNhcmctPnBmZmlfdHlwZTsKICAgICAgICAgbWVtY3B5KCZwYS0+dmFsdWUsICZjYXJnLT52YWx1ZSwgc2l6ZW9mKHBhLT52YWx1ZSkpOwogICAgICAgICBwYS0+a2VlcCA9IChQeU9iamVjdCAqKWNhcmc7CkBAIC05MTcsNyArOTE5LDcgQEAKIAogICAgIHYgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKGNoZWNrZXIsIHJldHZhbCwgTlVMTCk7CiAgICAgaWYgKHYgPT0gTlVMTCkKLSAgICAgICAgX2N0eXBlc19hZGRfdHJhY2ViYWNrKCJHZXRSZXN1bHQiLCAiX2N0eXBlcy9jYWxscHJvYy5jIiwgX19MSU5FX18tMik7CisgICAgICAgIF9QeVRyYWNlYmFja19BZGQoIkdldFJlc3VsdCIsICJfY3R5cGVzL2NhbGxwcm9jLmMiLCBfX0xJTkVfXy0yKTsKICAgICBQeV9ERUNSRUYocmV0dmFsKTsKICAgICByZXR1cm4gdjsKIH0KQEAgLTExMDUsOSArMTEwNyw3IEBACiAgICAgICAgIGlmIChhcmd0eXBlcyAmJiBhcmd0eXBlX2NvdW50ID4gaSkgewogICAgICAgICAgICAgUHlPYmplY3QgKnY7CiAgICAgICAgICAgICBjb252ZXJ0ZXIgPSBQeVR1cGxlX0dFVF9JVEVNKGFyZ3R5cGVzLCBpKTsKLSAgICAgICAgICAgIHYgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKGNvbnZlcnRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKyAgICAgICAgICAgIHYgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKGNvbnZlcnRlciwgYXJnLCBOVUxMKTsKICAgICAgICAgICAgIGlmICh2ID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICBfY3R5cGVzX2V4dGVuZF9lcnJvcihQeUV4Y19BcmdFcnJvciwgImFyZ3VtZW50ICVkOiAiLCBpKzEpOwogICAgICAgICAgICAgICAgIGdvdG8gY2xlYW51cDsKQEAgLTExNDAsOSArMTE0MCw2IEBACiAgICAgZm9yIChpID0gMDsgaSA8IGFyZ2NvdW50OyArK2kpIHsKICAgICAgICAgYXR5cGVzW2ldID0gYXJnc1tpXS5mZmlfdHlwZTsKICAgICAgICAgaWYgKGF0eXBlc1tpXS0+dHlwZSA9PSBGRklfVFlQRV9TVFJVQ1QKLSNpZmRlZiBfV0lONjQKLSAgICAgICAgICAgICYmIGF0eXBlc1tpXS0+c2l6ZSA8PSBzaXplb2Yodm9pZCAqKQotI2VuZGlmCiAgICAgICAgICAgICApCiAgICAgICAgICAgICBhdmFsdWVzW2ldID0gKHZvaWQgKilhcmdzW2ldLnZhbHVlLnA7CiAgICAgICAgIGVsc2UKQEAgLTEyNzIsNjIgKzEyNjksNiBAQAogICAgIHJldHVybiBQeV9Ob25lOwogfQogCi0vKiBvYnNvbGV0ZSwgc2hvdWxkIGJlIHJlbW92ZWQgKi8KLS8qIE9ubHkgdXNlZCBieSBzYW1wbGUgY29kZSAoaW4gc2FtcGxlc1xXaW5kb3dzXENPTS5weSkgKi8KLXN0YXRpYyBQeU9iamVjdCAqCi1jYWxsX2NvbW1ldGhvZChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi17Ci0gICAgSVVua25vd24gKnBJdW5rOwotICAgIGludCBpbmRleDsKLSAgICBQeU9iamVjdCAqYXJndW1lbnRzOwotICAgIFBQUk9DICpscFZ0Ymw7Ci0gICAgUHlPYmplY3QgKnJlc3VsdDsKLSAgICBDRGF0YU9iamVjdCAqcGNvbTsKLSAgICBQeU9iamVjdCAqYXJndHlwZXMgPSBOVUxMOwotCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJPaU8hfE8hIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJnBjb20sICZpbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJlB5VHVwbGVfVHlwZSwgJmFyZ3VtZW50cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJlB5VHVwbGVfVHlwZSwgJmFyZ3R5cGVzKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBpZiAoYXJndHlwZXMgJiYgKFB5VHVwbGVfR0VUX1NJWkUoYXJndW1lbnRzKSAhPSBQeVR1cGxlX0dFVF9TSVpFKGFyZ3R5cGVzKSkpIHsKLSAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICJNZXRob2QgdGFrZXMgJWQgYXJndW1lbnRzICglZCBnaXZlbikiLAotICAgICAgICAgICAgICAgICAgICAgUHlUdXBsZV9HRVRfU0laRShhcmd0eXBlcyksIFB5VHVwbGVfR0VUX1NJWkUoYXJndW1lbnRzKSk7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIGlmICghQ0RhdGFPYmplY3RfQ2hlY2socGNvbSkgfHwgKHBjb20tPmJfc2l6ZSAhPSBzaXplb2Yodm9pZCAqKSkpIHsKLSAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICJDT00gUG9pbnRlciBleHBlY3RlZCBpbnN0ZWFkIG9mICVzIGluc3RhbmNlIiwKLSAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUocGNvbSktPnRwX25hbWUpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAoKCoodm9pZCAqKikocGNvbS0+Yl9wdHIpKSA9PSBOVUxMKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgIlRoZSBDT00gJ3RoaXMnIHBvaW50ZXIgaXMgTlVMTCIpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBwSXVuayA9IChJVW5rbm93biAqKSgqKHZvaWQgKiopKHBjb20tPmJfcHRyKSk7Ci0gICAgbHBWdGJsID0gKFBQUk9DICopKHBJdW5rLT5scFZ0YmwpOwotCi0gICAgcmVzdWx0ID0gIF9jdHlwZXNfY2FsbHByb2MobHBWdGJsW2luZGV4XSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50cywKLSNpZmRlZiBNU19XSU4zMgotICAgICAgICAgICAgICAgICAgICAgICAgcEl1bmssCi0gICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAotI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICAgICBGVU5DRkxBR19IUkVTVUxULCAvKiBmbGFncyAqLwotICAgICAgICAgICAgICAgIGFyZ3R5cGVzLCAvKiBzZWxmLT5hcmd0eXBlcyAqLwotICAgICAgICAgICAgICAgIE5VTEwsIC8qIHNlbGYtPnJlc3R5cGUgKi8KLSAgICAgICAgICAgICAgICBOVUxMKTsgLyogY2hlY2tlciAqLwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KIHN0YXRpYyBjaGFyIGNvcHlfY29tX3BvaW50ZXJfZG9jW10gPQogIkNvcHlDb21Qb2ludGVyKHNyYywgZHN0KSAtPiBIUkVTVUxUIHZhbHVlXG4iOwogCkBAIC0xNDg5LDkgKzE0MzAsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKICNlbmRpZgogICAgICAgICAgICAgICAgICAgICAgICAgRlVOQ0ZMQUdfQ0RFQ0wsIC8qIGZsYWdzICovCi0gICAgICAgICAgICAgICAgTlVMTCwgLyogc2VsZi0+YXJndHlwZXMgKi8KLSAgICAgICAgICAgICAgICBOVUxMLCAvKiBzZWxmLT5yZXN0eXBlICovCi0gICAgICAgICAgICAgICAgTlVMTCk7IC8qIGNoZWNrZXIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIC8qIHNlbGYtPmFyZ3R5cGVzICovCisgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAvKiBzZWxmLT5yZXN0eXBlICovCisgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsgLyogY2hlY2tlciAqLwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTE3MjgsMjQgKzE2NjksMzAgQEAKICAgICB9CiAgICAgaWYgKFB5VW5pY29kZV9DaGVja0V4YWN0KGNscykpIHsKICAgICAgICAgY2hhciAqbmFtZSA9IF9QeVVuaWNvZGVfQXNTdHJpbmcoY2xzKTsKLSAgICAgICAgYnVmID0gYWxsb2NhKHN0cmxlbihuYW1lKSArIDMgKyAxKTsKKyAgICAgICAgYnVmID0gUHlNZW1fTWFsbG9jKHN0cmxlbihuYW1lKSArIDMgKyAxKTsKKyAgICAgICAgaWYgKGJ1ZiA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgIHNwcmludGYoYnVmLCAiTFBfJXMiLCBuYW1lKTsKICAgICAgICAgcmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKChQeU9iamVjdCAqKVB5X1RZUEUoJlB5Q1BvaW50ZXJfVHlwZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicyhPKXt9IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZQeUNQb2ludGVyX1R5cGUpOworICAgICAgICBQeU1lbV9GcmVlKGJ1Zik7CiAgICAgICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIGtleSA9IFB5TG9uZ19Gcm9tVm9pZFB0cihyZXN1bHQpOwogICAgIH0gZWxzZSBpZiAoUHlUeXBlX0NoZWNrKGNscykpIHsKICAgICAgICAgdHlwID0gKFB5VHlwZU9iamVjdCAqKWNsczsKLSAgICAgICAgYnVmID0gYWxsb2NhKHN0cmxlbih0eXAtPnRwX25hbWUpICsgMyArIDEpOworICAgICAgICBidWYgPSBQeU1lbV9NYWxsb2Moc3RybGVuKHR5cC0+dHBfbmFtZSkgKyAzICsgMSk7CisgICAgICAgIGlmIChidWYgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICBzcHJpbnRmKGJ1ZiwgIkxQXyVzIiwgdHlwLT50cF9uYW1lKTsKICAgICAgICAgcmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKChQeU9iamVjdCAqKVB5X1RZUEUoJlB5Q1BvaW50ZXJfVHlwZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicyhPKXtzT30iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlB5Q1BvaW50ZXJfVHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJfdHlwZV8iLCBjbHMpOworICAgICAgICBQeU1lbV9GcmVlKGJ1Zik7CiAgICAgICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIFB5X0lOQ1JFRihjbHMpOwpAQCAtMTgyMiw3ICsxNzY5LDYgQEAKICAgICB7IkZvcm1hdEVycm9yIiwgZm9ybWF0X2Vycm9yLCBNRVRIX1ZBUkFSR1MsIGZvcm1hdF9lcnJvcl9kb2N9LAogICAgIHsiTG9hZExpYnJhcnkiLCBsb2FkX2xpYnJhcnksIE1FVEhfVkFSQVJHUywgbG9hZF9saWJyYXJ5X2RvY30sCiAgICAgeyJGcmVlTGlicmFyeSIsIGZyZWVfbGlicmFyeSwgTUVUSF9WQVJBUkdTLCBmcmVlX2xpYnJhcnlfZG9jfSwKLSAgICB7ImNhbGxfY29tbWV0aG9kIiwgY2FsbF9jb21tZXRob2QsIE1FVEhfVkFSQVJHUyB9LAogICAgIHsiX2NoZWNrX0hSRVNVTFQiLCBjaGVja19ocmVzdWx0LCBNRVRIX1ZBUkFSR1N9LAogI2Vsc2UKICAgICB7ImRsb3BlbiIsIHB5X2RsX29wZW4sIE1FVEhfVkFSQVJHUywKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9jZmllbGQuYyBiL01vZHVsZXMvX2N0eXBlcy9jZmllbGQuYwppbmRleCA3OWQ2MGYzLi5jODlkOTE5IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvY2ZpZWxkLmMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2NmaWVsZC5jCkBAIC03NjUsNiArNzY1LDcgQEAKICAgICBpZiAoZ2V0X3Vsb25nKHZhbHVlLCAmdmFsKSA8IDApCiAgICAgICAgIHJldHVybiAgTlVMTDsKICAgICBtZW1jcHkoJmZpZWxkLCBwdHIsIHNpemVvZihmaWVsZCkpOworICAgIGZpZWxkID0gU1dBUF9JTlQoZmllbGQpOwogICAgIGZpZWxkID0gU0VUKHVuc2lnbmVkIGludCwgZmllbGQsICh1bnNpZ25lZCBpbnQpdmFsLCBzaXplKTsKICAgICBmaWVsZCA9IFNXQVBfSU5UKGZpZWxkKTsKICAgICBtZW1jcHkocHRyLCAmZmllbGQsIHNpemVvZihmaWVsZCkpOwpAQCAtMTE2MCw3ICsxMTYxLDcgQEAKICAgICB9CiAgIGVycm9yOgogICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICJvbmUgY2hhcmFjdGVyIHN0cmluZyBleHBlY3RlZCIpOworICAgICAgICAgICAgICAgICAib25lIGNoYXJhY3RlciBieXRlcywgYnl0ZWFycmF5IG9yIGludGVnZXIgZXhwZWN0ZWQiKTsKICAgICByZXR1cm4gTlVMTDsKIH0KIApAQCAtMTI5NSw3ICsxMjk2LDcgQEAKICAgICAgICAgUHlfSU5DUkVGKHZhbHVlKTsKICAgICB9IGVsc2UgewogICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkIHN0cmluZywgJXMgZm91bmQiLAorICAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkIGJ5dGVzLCAlcyBmb3VuZCIsCiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS0+b2JfdHlwZS0+dHBfbmFtZSk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KQEAgLTEzMTEsNyArMTMxMiw3IEBACiAgICAgICAgICsrc2l6ZTsKICAgICB9IGVsc2UgaWYgKHNpemUgPiBsZW5ndGgpIHsKICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAic3RyaW5nIHRvbyBsb25nICglemQsIG1heGltdW0gbGVuZ3RoICV6ZCkiLAorICAgICAgICAgICAgICAgICAgICAgImJ5dGVzIHRvbyBsb25nICglemQsIG1heGltdW0gbGVuZ3RoICV6ZCkiLAogICAgICAgICAgICAgICAgICAgICAgc2l6ZSwgbGVuZ3RoKTsKICAgICAgICAgUHlfREVDUkVGKHZhbHVlKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvY3R5cGVzLmggYi9Nb2R1bGVzL19jdHlwZXMvY3R5cGVzLmgKaW5kZXggNTIzN2FjMi4uMGQzZjcyNCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2N0eXBlcy5oCisrKyBiL01vZHVsZXMvX2N0eXBlcy9jdHlwZXMuaApAQCAtMTkxLDcgKzE5MSw3IEBACiAgICByZW1lbWJlciBpcyB0aGF0IGluIFB5Q0FycmF5VHlwZV9uZXcgdGhlIGZmaV90eXBlIGZpZWxkcyBtdXN0IGJlIGZpbGxlZCBpbiAtCiAgICBzbyBmYXIgaXQgd2FzIHVubmVlZGVkIGJlY2F1c2UgbGliZmZpIGRvZXNuJ3Qgc3VwcG9ydCBhcnJheXMgYXQgYWxsCiAgICAoYmVjYXVzZSB0aGV5IGFyZSBwYXNzZWQgYXMgcG9pbnRlcnMgdG8gZnVuY3Rpb24gY2FsbHMgYW55d2F5KS4gIEJ1dCBpdCdzCi0gICB0b28gbXVjaCByaXNrIHRvIGNoYW5nZSB0aGF0IG5vdywgYW5kIHRoZXJlIGFyZSBvdGhlciBmaWVsZHMgd2hpY2ggZG9lbid0CisgICB0b28gbXVjaCByaXNrIHRvIGNoYW5nZSB0aGF0IG5vdywgYW5kIHRoZXJlIGFyZSBvdGhlciBmaWVsZHMgd2hpY2ggZG9lc24ndAogICAgYmVsb25nIGludG8gdGhpcyBzdHJ1Y3R1cmUgYW55d2F5LiAgTWF5YmUgaW4gY3R5cGVzIDIuMC4uLiAoY3R5cGVzIDIwMDA/KQogKi8KICAgICBQeV9zc2l6ZV90IHNpemU7ICAgICAgICAgICAgLyogbnVtYmVyIG9mIGJ5dGVzICovCkBAIC0zNTMsMTAgKzM1MywxMSBAQAogZXh0ZXJuIHZvaWQgX2N0eXBlc19mcmVlX2Nsb3N1cmUodm9pZCAqKTsKIGV4dGVybiB2b2lkICpfY3R5cGVzX2FsbG9jX2Nsb3N1cmUodm9pZCk7CiAKLWV4dGVybiB2b2lkIF9jdHlwZXNfYWRkX3RyYWNlYmFjayhjaGFyICosIGNoYXIgKiwgaW50KTsKLQogZXh0ZXJuIFB5T2JqZWN0ICpQeUNEYXRhX0Zyb21CYXNlT2JqKFB5T2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqYmFzZSwgUHlfc3NpemVfdCBpbmRleCwgY2hhciAqYWRyKTsKIGV4dGVybiBjaGFyICpfY3R5cGVzX2FsbG9jX2Zvcm1hdF9zdHJpbmcoY29uc3QgY2hhciAqcHJlZml4LCBjb25zdCBjaGFyICpzdWZmaXgpOworZXh0ZXJuIGNoYXIgKl9jdHlwZXNfYWxsb2NfZm9ybWF0X3N0cmluZ193aXRoX3NoYXBlKGludCBuZGltLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUHlfc3NpemVfdCAqc2hhcGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwcmVmaXgsIGNvbnN0IGNoYXIgKnN1ZmZpeCk7CiAKIGV4dGVybiBpbnQgX2N0eXBlc19zaW1wbGVfaW5zdGFuY2UoUHlPYmplY3QgKm9iaik7CiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkuZGlmZiBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkuZGlmZgppbmRleCBhZGUyOGU1Li5mZmE3YmFmIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpLmRpZmYKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS5kaWZmCkBAIC0xLDggKzEsNyBAQAotZGlmZiAtciAtTiAtdSBsaWJmZmkub3JpZy9hdXRvbTR0ZS5jYWNoZS9vdXRwdXQuMCBsaWJmZmkvYXV0b200dGUuY2FjaGUvb3V0cHV0LjAKLWRpZmYgLXIgLU4gLXUgbGliZmZpLm9yaWcvY29uZmlndXJlIGxpYmZmaS9jb25maWd1cmUKLS0tLSBsaWJmZmkub3JpZy9jb25maWd1cmUJMjAxMy0wMy0xNyAxNTozNzo1MC4wMDAwMDAwMDAgLTA3MDAKLSsrKyBsaWJmZmkvY29uZmlndXJlCTIwMTMtMDMtMTggMTU6MTE6MzkuNjExNTc1MTYzIC0wNzAwCi1AQCAtMTMzNjgsNiArMTMzNjgsMTAgQEAKK2RpZmYgLXVyTiBsaWJmZmktMy4xL2NvbmZpZ3VyZSBsaWJmZmkvY29uZmlndXJlCistLS0gbGliZmZpLTMuMS9jb25maWd1cmUJMjAxNC0wNS0xOSAxNTo0NDowMy4wMDAwMDAwMDAgKzAyMDAKKysrKyBsaWJmZmkvY29uZmlndXJlCTIwMTQtMDgtMDkgMjE6NTE6MDcuODc3ODcxNDQzICswMjAwCitAQCAtMTcyMzYsNiArMTcyMzYsMTAgQEAKICAJZmkKICAJOzsKICAKQEAgLTEzLDIyICsxMiwyMiBAQAogICAgeDg2XzY0LSotZGFyd2luKikKICAJVEFSR0VUPVg4Nl9EQVJXSU47IFRBUkdFVERJUj14ODYKICAJOzsKLUBAIC0xMzQyNiwxMiArMTM0MzAsMTIgQEAKK0BAIC0xNzI5OCwxMiArMTczMDIsMTIgQEAKICAJOzsKICAKICAgIG1pcHMtc2dpLWlyaXg1LiogfCBtaXBzLXNnaS1pcml4Ni4qIHwgbWlwcyotKi1ydGVtcyopCiAtCVRBUkdFVD1NSVBTOyBUQVJHRVRESVI9bWlwcwogKwlUQVJHRVQ9TUlQU19JUklYOyBUQVJHRVRESVI9bWlwcwogIAk7OwotICAgbWlwcyotKi1saW51eCogfCBtaXBzKi0qLW9wZW5ic2QqKQorICAgbWlwcyotKmxpbnV4KiB8IG1pcHMqLSotb3BlbmJzZCopCiAgCSMgU3VwcG9ydCAxMjgtYml0IGxvbmcgZG91YmxlIGZvciBOZXdBQkkuCiAgCUhBVkVfTE9OR19ET1VCTEU9J2RlZmluZWQoX19taXBzNjQpJwogLQlUQVJHRVQ9TUlQUzsgVEFSR0VURElSPW1pcHMKLSsJVEFSR0VUPU1JUFNfSVJJWDsgVEFSR0VURElSPW1pcHMKKysJVEFSR0VUPU1JUFNfTElOVVg7IFRBUkdFVERJUj1taXBzCiAgCTs7CiAgCi0gICBwb3dlcnBjKi0qLWxpbnV4KiB8IHBvd2VycGMtKi1zeXN2KikKLUBAIC0xMzQ5MSw3ICsxMzQ5NSw3IEBACisgICBuaW9zMiotbGludXgqKQorQEAgLTE3MzczLDcgKzE3Mzc3LDcgQEAKICAgIGFzX2ZuX2Vycm9yICQ/ICJcImxpYmZmaSBoYXMgbm90IGJlZW4gcG9ydGVkIHRvICRob3N0LlwiIiAiJExJTkVOTyIgNQogIGZpCiAgCkBAIC0zNyw3ICszNiw3IEBACiAgICBNSVBTX1RSVUU9CiAgICBNSVBTX0ZBTFNFPScjJwogIGVsc2UKLUBAIC0xNDg2Miw2ICsxNDg2NiwxMiBAQAorQEAgLTE4ODE0LDYgKzE4ODE4LDEyIEBACiAgYWNfY29uZmlnX2ZpbGVzPSIkYWNfY29uZmlnX2ZpbGVzIGluY2x1ZGUvTWFrZWZpbGUgaW5jbHVkZS9mZmkuaCBNYWtlZmlsZSB0ZXN0c3VpdGUvTWFrZWZpbGUgbWFuL01ha2VmaWxlIGxpYmZmaS5wYyIKICAKICAKQEAgLTUwLDcgKzQ5LDcgQEAKICBjYXQgPmNvbmZjYWNoZSA8PFxfQUNFT0YKICAjIFRoaXMgZmlsZSBpcyBhIHNoZWxsIHNjcmlwdCB0aGF0IGNhY2hlcyB0aGUgcmVzdWx0cyBvZiBjb25maWd1cmUKICAjIHRlc3RzIHJ1biBvbiB0aGlzIHN5c3RlbSBzbyB0aGV5IGNhbiBiZSBzaGFyZWQgYmV0d2VlbiBjb25maWd1cmUKLUBAIC0xNjA0Nyw2ICsxNjA1Nyw4IEBACitAQCAtMjAxMjYsNiArMjAxMzYsOCBAQAogICAgICAidGVzdHN1aXRlL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHRlc3RzdWl0ZS9NYWtlZmlsZSIgOzsKICAgICAgIm1hbi9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBtYW4vTWFrZWZpbGUiIDs7CiAgICAgICJsaWJmZmkucGMiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgbGliZmZpLnBjIiA7OwpAQCAtNTksOSArNTgsOSBAQAogIAogICAgKikgYXNfZm5fZXJyb3IgJD8gImludmFsaWQgYXJndW1lbnQ6IFxgJGFjX2NvbmZpZ190YXJnZXQnIiAiJExJTkVOTyIgNTs7CiAgICBlc2FjCi1kaWZmIC1yIC1OIC11IGxpYmZmaS5vcmlnL2NvbmZpZ3VyZS5hYyBsaWJmZmkvY29uZmlndXJlLmFjCi0tLS0gbGliZmZpLm9yaWcvY29uZmlndXJlLmFjCTIwMTMtMDMtMTcgMTU6Mzc6NTAuMDAwMDAwMDAwIC0wNzAwCi0rKysgbGliZmZpL2NvbmZpZ3VyZS5hYwkyMDEzLTAzLTE4IDE1OjExOjExLjM5Mjk4OTEzNiAtMDcwMAorZGlmZiAtdXJOIGxpYmZmaS0zLjEvY29uZmlndXJlLmFjIGxpYmZmaS9jb25maWd1cmUuYWMKKy0tLSBsaWJmZmktMy4xL2NvbmZpZ3VyZS5hYwkyMDE0LTA1LTExIDE1OjU3OjQ5LjAwMDAwMDAwMCArMDIwMAorKysrIGxpYmZmaS9jb25maWd1cmUuYWMJMjAxNC0wOC0wOSAyMTo1MTowNy44Nzc4NzE0NDMgKzAyMDAKIEBAIC0xLDQgKzEsNyBAQAogIGRubCBQcm9jZXNzIHRoaXMgd2l0aCBhdXRvY29uZiB0byBjcmVhdGUgY29uZmlndXJlCiArIwpAQCAtNzAsMzMgKzY5LDMyIEBACiAgCiAgQUNfUFJFUkVRKDIuNjgpCiAgCi1AQCAtMTQ2LDYgKzE0OSwxMCBAQAotIAlmaQkgIAorQEAgLTE0NCw2ICsxNDcsOSBAQAorIAkgIEFNX0xUTERGTEFHUz0nLW5vLXVuZGVmaW5lZCAtYmluZGlyICIkKGJpbmRpcikiJzsKKyAJZmkKICAJOzsKLSAKICsgIGkqODYtKi1udG8tcW54KikgCiArICAgICAgICBUQVJHRVQ9WDg2OyBUQVJHRVRESVI9eDg2CiArICAgICAgICA7OwotKwotICAgeDg2XzY0LSotZGFyd2luKikKKyAgIGk/ODYtKi1kYXJ3aW4qKQogIAlUQVJHRVQ9WDg2X0RBUldJTjsgVEFSR0VURElSPXg4NgogIAk7OwotQEAgLTIwNCwxMiArMjExLDEyIEBACitAQCAtMjE4LDEyICsyMjQsMTIgQEAKICAJOzsKICAKICAgIG1pcHMtc2dpLWlyaXg1LiogfCBtaXBzLXNnaS1pcml4Ni4qIHwgbWlwcyotKi1ydGVtcyopCiAtCVRBUkdFVD1NSVBTOyBUQVJHRVRESVI9bWlwcwogKwlUQVJHRVQ9TUlQU19JUklYOyBUQVJHRVRESVI9bWlwcwogIAk7OwotICAgbWlwcyotKi1saW51eCogfCBtaXBzKi0qLW9wZW5ic2QqKQorICAgbWlwcyotKmxpbnV4KiB8IG1pcHMqLSotb3BlbmJzZCopCiAgCSMgU3VwcG9ydCAxMjgtYml0IGxvbmcgZG91YmxlIGZvciBOZXdBQkkuCiAgCUhBVkVfTE9OR19ET1VCTEU9J2RlZmluZWQoX19taXBzNjQpJwogLQlUQVJHRVQ9TUlQUzsgVEFSR0VURElSPW1pcHMKLSsJVEFSR0VUPU1JUFNfSVJJWDsgVEFSR0VURElSPW1pcHMKKysJVEFSR0VUPU1JUFNfTElOVVg7IFRBUkdFVERJUj1taXBzCiAgCTs7CiAgCi0gICBwb3dlcnBjKi0qLWxpbnV4KiB8IHBvd2VycGMtKi1zeXN2KikKLUBAIC0yNjksNyArMjc2LDcgQEAKKyAgIG5pb3MyKi1saW51eCopCitAQCAtMjkzLDcgKzI5OSw3IEBACiAgICBBQ19NU0dfRVJST1IoWyJsaWJmZmkgaGFzIG5vdCBiZWVuIHBvcnRlZCB0byAkaG9zdC4iXSkKICBmaQogIApAQCAtMTA1LDcgKzEwMyw3IEBACiAgQU1fQ09ORElUSU9OQUwoQkZJTiwgdGVzdCB4JFRBUkdFVCA9IHhCRklOKQogIEFNX0NPTkRJVElPTkFMKFNQQVJDLCB0ZXN0IHgkVEFSR0VUID0geFNQQVJDKQogIEFNX0NPTkRJVElPTkFMKFg4NiwgdGVzdCB4JFRBUkdFVCA9IHhYODYpCi1AQCAtNTY3LDQgKzU3NCw4IEBACitAQCAtNjE3LDQgKzYyMyw4IEBACiAgCiAgQUNfQ09ORklHX0ZJTEVTKGluY2x1ZGUvTWFrZWZpbGUgaW5jbHVkZS9mZmkuaCBNYWtlZmlsZSB0ZXN0c3VpdGUvTWFrZWZpbGUgbWFuL01ha2VmaWxlIGxpYmZmaS5wYykKICAKQEAgLTExNCwxOSArMTEyLDE5IEBACiArQUNfQ09ORklHX0ZJTEVTKGZmaWNvbmZpZy5weSkKICsKICBBQ19PVVRQVVQKLS0tLSBsaWJmZmktMy4wLjExL2ZmaWNvbmZpZy5weS5pbgkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAotKysrIGxpYmZmaS9mZmljb25maWcucHkuaW4JMjAxMi0wMy0xNSAwMTowNDoyNy4wMDAwMDAwMDAgKzAxMDAKK2RpZmYgLXVyTiBsaWJmZmktMy4xL2ZmaWNvbmZpZy5weS5pbiBsaWJmZmkvZmZpY29uZmlnLnB5LmluCistLS0gbGliZmZpLTMuMS9mZmljb25maWcucHkuaW4JMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBsaWJmZmkvZmZpY29uZmlnLnB5LmluCTIwMTQtMDgtMDkgMjE6NDM6MjUuMjI5ODcxODI3ICswMjAwCiBAQCAtMCwwICsxLDM1IEBACiArZmZpX3NvdXJjZXMgPSAiIiIKICtzcmMvcHJlcF9jaWYuYwogK3NyYy9jbG9zdXJlcy5jCi0rc3JjL2RsbWFsbG9jLmMKICsiIiIuc3BsaXQoKQogKwogK2ZmaV9wbGF0Zm9ybXMgPSB7CiArICAgICdNSVBTX0lSSVgnOiBbJ3NyYy9taXBzL2ZmaS5jJywgJ3NyYy9taXBzL28zMi5TJywgJ3NyYy9taXBzL24zMi5TJ10sCiArICAgICdNSVBTX0xJTlVYJzogWydzcmMvbWlwcy9mZmkuYycsICdzcmMvbWlwcy9vMzIuUyddLAotKyAgICAnWDg2JzogWydzcmMveDg2L2ZmaS5jJywgJ3NyYy94ODYvc3lzdi5TJ10sCisrICAgICdYODYnOiBbJ3NyYy94ODYvZmZpLmMnLCAnc3JjL3g4Ni9zeXN2LlMnLCAnc3JjL3g4Ni93aW4zMi5TJ10sCiArICAgICdYODZfRlJFRUJTRCc6IFsnc3JjL3g4Ni9mZmkuYycsICdzcmMveDg2L2ZyZWVic2QuUyddLAogKyAgICAnWDg2X1dJTjMyJzogWydzcmMveDg2L2ZmaS5jJywgJ3NyYy94ODYvd2luMzIuUyddLAogKyAgICAnU1BBUkMnOiBbJ3NyYy9zcGFyYy9mZmkuYycsICdzcmMvc3BhcmMvdjguUycsICdzcmMvc3BhcmMvdjkuUyddLApAQCAtMTM0LDkgKzEzMiwxMCBAQAogKyAgICAnSUE2NCc6IFsnc3JjL2lhNjQvZmZpLmMnLCAnc3JjL2lhNjQvdW5peC5TJ10sCiArICAgICdNMzJSJzogWydzcmMvbTMyci9zeXN2LlMnLCAnc3JjL20zMnIvZmZpLmMnXSwKICsgICAgJ002OEsnOiBbJ3NyYy9tNjhrL2ZmaS5jJywgJ3NyYy9tNjhrL3N5c3YuUyddLAotKyAgICAnUE9XRVJQQyc6IFsnc3JjL3Bvd2VycGMvZmZpLmMnLCAnc3JjL3Bvd2VycGMvc3lzdi5TJywgJ3NyYy9wb3dlcnBjL3BwY19jbG9zdXJlLlMnLCAnc3JjL3Bvd2VycGMvbGludXg2NC5TJywgJ3NyYy9wb3dlcnBjL2xpbnV4NjRfY2xvc3VyZS5TJ10sCisrICAgICdQT1dFUlBDJzogWydzcmMvcG93ZXJwYy9mZmkuYycsICdzcmMvcG93ZXJwYy9mZmlfc3lzdi5jJywgJ3NyYy9wb3dlcnBjL2ZmaV9saW51eDY0LmMnLCAnc3JjL3Bvd2VycGMvc3lzdi5TJywgJ3NyYy9wb3dlcnBjL3BwY19jbG9zdXJlLlMnLCAnc3JjL3Bvd2VycGMvbGludXg2NC5TJywgJ3NyYy9wb3dlcnBjL2xpbnV4NjRfY2xvc3VyZS5TJ10sCiArICAgICdQT1dFUlBDX0FJWCc6IFsnc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jJywgJ3NyYy9wb3dlcnBjL2FpeC5TJywgJ3NyYy9wb3dlcnBjL2FpeF9jbG9zdXJlLlMnXSwKICsgICAgJ1BPV0VSUENfRlJFRUJTRCc6IFsnc3JjL3Bvd2VycGMvZmZpLmMnLCAnc3JjL3Bvd2VycGMvc3lzdi5TJywgJ3NyYy9wb3dlcnBjL3BwY19jbG9zdXJlLlMnXSwKKysgICAgJ0FBUkNINjQnOiBbJ3NyYy9hYXJjaDY0L3N5c3YuUycsICdzcmMvYWFyY2g2NC9mZmkuYyddLAogKyAgICAnQVJNJzogWydzcmMvYXJtL3N5c3YuUycsICdzcmMvYXJtL2ZmaS5jJ10sCiArICAgICdMSUJGRklfQ1JJUyc6IFsnc3JjL2NyaXMvc3lzdi5TJywgJ3NyYy9jcmlzL2ZmaS5jJ10sCiArICAgICdGUlYnOiBbJ3NyYy9mcnYvZWFiaS5TJywgJ3NyYy9mcnYvZmZpLmMnXSwKQEAgLTE1Miw5ICsxNTEsOSBAQAogK2ZmaV9zb3VyY2VzICs9IGZmaV9wbGF0Zm9ybXNbJ0BUQVJHRVRAJ10KICsKICtmZmlfY2ZsYWdzID0gJ0BDRkxBR1NAJwotZGlmZiAtdXJOIGxpYmZmaS0zLjAuMTEvc3JjL2RsbWFsbG9jLmMgbGliZmZpL3NyYy9kbG1hbGxvYy5jCi0tLS0gbGliZmZpLTMuMC4xMS9zcmMvZGxtYWxsb2MuYwkyMDEyLTA0LTEyIDA0OjQ2OjA2LjAwMDAwMDAwMCArMDIwMAotKysrIGxpYmZmaS9zcmMvZGxtYWxsb2MuYwkyMDEyLTA2LTI2IDE1OjE1OjU4Ljk0OTU0NzQ2MSArMDIwMAorZGlmZiAtdXJOIGxpYmZmaS0zLjEvc3JjL2RsbWFsbG9jLmMgbGliZmZpL3NyYy9kbG1hbGxvYy5jCistLS0gbGliZmZpLTMuMS9zcmMvZGxtYWxsb2MuYwkyMDE0LTA0LTI1IDE5OjQ1OjEzLjAwMDAwMDAwMCArMDIwMAorKysrIGxpYmZmaS9zcmMvZGxtYWxsb2MuYwkyMDE0LTA4LTA5IDIxOjUxOjA3Ljg4MTg3MTQ0MyArMDIwMAogQEAgLTQ1Nyw2ICs0NTcsMTEgQEAKICAjZGVmaW5lIExBQ0tTX0VSUk5PX0gKICAjZGVmaW5lIE1BTExPQ19GQUlMVVJFX0FDVElPTgpAQCAtMTY3LDMgKzE2Niw0NCBAQAogICNlbmRpZiAgLyogV0lOMzIgKi8KICAKICAjaWZkZWYgX19PUzJfXworQEAgLTQ0OTcsNyArNDUwMiw3IEBACisgICAgIGNoYXIqIHRiYXNlID0gKGNoYXIqKShDQUxMX01NQVAodHNpemUpKTsKKyAgICAgaWYgKHRiYXNlICE9IENNRkFJTCkgeworICAgICAgIG0gPSBpbml0X3VzZXJfbXN0YXRlKHRiYXNlLCB0c2l6ZSk7CistICAgICAgc2V0X3NlZ21lbnRfZmxhZ3MoJm0tPnNlZywgSVNfTU1BUFBFRF9CSVQpOworKyAgICAgICh2b2lkKXNldF9zZWdtZW50X2ZsYWdzKCZtLT5zZWcsIElTX01NQVBQRURfQklUKTsKKyAgICAgICBzZXRfbG9jayhtLCBsb2NrZWQpOworICAgICB9CisgICB9CitAQCAtNDUxMiw3ICs0NTE3LDcgQEAKKyAgIGlmIChjYXBhY2l0eSA+IG1zaXplICsgVE9QX0ZPT1RfU0laRSAmJgorICAgICAgIGNhcGFjaXR5IDwgKHNpemVfdCkgLShtc2l6ZSArIFRPUF9GT09UX1NJWkUgKyBtcGFyYW1zLnBhZ2Vfc2l6ZSkpIHsKKyAgICAgbSA9IGluaXRfdXNlcl9tc3RhdGUoKGNoYXIqKWJhc2UsIGNhcGFjaXR5KTsKKy0gICAgc2V0X3NlZ21lbnRfZmxhZ3MoJm0tPnNlZywgRVhURVJOX0JJVCk7CisrICAgICh2b2lkKXNldF9zZWdtZW50X2ZsYWdzKCZtLT5zZWcsIEVYVEVSTl9CSVQpOworICAgICBzZXRfbG9jayhtLCBsb2NrZWQpOworICAgfQorICAgcmV0dXJuIChtc3BhY2UpbTsKK2RpZmYgLXVyTiBsaWJmZmktMy4xL3NyYy9hcm0vZmZpLmMgbGliZmZpL3NyYy9hcm0vZmZpLmMKKy0tLSBsaWJmZmktMy4xL3NyYy9hcm0vZmZpLmMJU2F0IEF1ZyAwOSAyMzo1MjozNCAyMDE0ICswMjAwCisrKysgbGliZmZpL3NyYy9hcm0vZmZpLmMJU2F0IEF1ZyAwOSAyMzo1ODozOCAyMDE0ICswMjAwCitAQCAtMTU0LDkgKzE1NCw2IEBACisgCisgaW50IGZmaV9wcmVwX2FyZ3NfVkZQKGNoYXIgKnN0YWNrLCBleHRlbmRlZF9jaWYgKmVjaWYsIGZsb2F0ICp2ZnBfc3BhY2UpCisgeworLSAgLy8gbWFrZSBzdXJlIHdlIGFyZSB1c2luZyBGRklfVkZQCistICBGRklfQVNTRVJUKGVjaWYtPmNpZi0+YWJpID09IEZGSV9WRlApOworLQorICAgcmVnaXN0ZXIgdW5zaWduZWQgaW50IGksIHZpID0gMDsKKyAgIHJlZ2lzdGVyIHZvaWQgKipwX2FyZ3Y7CisgICByZWdpc3RlciBjaGFyICphcmdwLCAqcmVncCwgKmVvX3JlZ3A7CitAQCAtMTY1LDYgKzE2Miw5IEBACisgICBjaGFyIGRvbmVfd2l0aF9yZWdzID0gMDsKKyAgIGNoYXIgaXNfdmZwX3R5cGU7CisgCisrICAvLyBtYWtlIHN1cmUgd2UgYXJlIHVzaW5nIEZGSV9WRlAKKysgIEZGSV9BU1NFUlQoZWNpZi0+Y2lmLT5hYmkgPT0gRkZJX1ZGUCk7CisrCisgICAvKiB0aGUgZmlyc3QgNCB3b3JkcyBvbiB0aGUgc3RhY2sgYXJlIHVzZWQgZm9yIHZhbHVlcyBwYXNzZWQgaW4gY29yZQorICAgICogcmVnaXN0ZXJzLiAqLworICAgcmVncCA9IHN0YWNrOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS8uZ2l0aWdub3JlIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS8uZ2l0aWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YWY3NmFjLi4wMDAwMDAwCi0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvLmdpdGlnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLS5saWJzCi0uZGVwcwotKi5vCi0qLmxvCi0uZGlyc3RhbXAKLSoubGEKLU1ha2VmaWxlCi1jb25maWcubG9nCi1jb25maWcuc3RhdHVzCi0qfgotZmZpY29uZmlnLmgKLWluY2x1ZGUvZmZpLmgKLWluY2x1ZGUvZmZpdGFyZ2V0LmgKLWxpYmZmaS5wYwotbGlidG9vbAotc3RhbXAtaDEKLWxpYmZmaSpnegotYXV0b200dGUuY2FjaGUKLWxpYmZmaS54Y29kZXByb2oveGN1c2VyZGF0YQotbGliZmZpLnhjb2RlcHJvai9wcm9qZWN0Lnhjd29ya3NwYWNlCi1pb3MvCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpLy50cmF2aXMueW1sIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS8udHJhdmlzLnltbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWE2YTQyNS4uMDAwMDAwMAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpLy50cmF2aXMueW1sCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1sYW5ndWFnZTogYwotY29tcGlsZXI6Ci0gIC0gZ2NjCi0gIC0gY2xhbmcKLQotYmVmb3JlX3NjcmlwdDogc3VkbyBhcHQtZ2V0IGluc3RhbGwgZGVqYWdudQotCi1zY3JpcHQ6IC4vY29uZmlndXJlICYmIG1ha2UgJiYgbWFrZSBjaGVjawpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9DaGFuZ2VMb2cgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL0NoYW5nZUxvZwppbmRleCBlMGIwNTdjLi5jODVjYmU2IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL0NoYW5nZUxvZworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL0NoYW5nZUxvZwpAQCAtMSw1NTA5ICsxLDUxMDUgQEAKLTIwMTMtMDMtMTcgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK2NvbW1pdCAwNDAzZjMzMmIxZjQ3ODY5NmMzMGQzZDhhMGUyZjZlZWYyNGFhZjg4CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBNb24gTWF5IDE5IDA5OjQxOjMyIDIwMTQgLTA0MDAKIAotCSogUkVBRE1FOiBVcGRhdGUgZm9yIDMuMC4xMy4KLQkqIGNvbmZpZ3VyZS5hYzogRGl0dG8uCi0JKiBjb25maWd1cmU6IFJlYnVpbHQuCi0JKiBkb2MvKjogVXBkYXRlIHZlcnNpb24uCisgICAgVXBkYXRlIGRhdGUuIEFubm91Y2luZyAzLjEgdG9kYXkuCiAKLTIwMTMtMDMtMTcgIERhdmUgS29ybiAgPGRhdmUua29ybi5jeWd3aW5AZ21haWwuY29tPgorY29tbWl0IDk0YWMwYzE2OGVlN2IxMTU0MDkxMjFkODhiMjVhNDk3OTQ0NmM4ZGEKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIE1vbiBNYXkgMTkgMDk6Mzc6MjEgMjAxNCAtMDQwMAogCi0JKiBzcmMvY2xvc3VyZXMuYyAoaXNfZW11dHJhbXBfZW5hYmxlZAotCVshRkZJX01NQVBfRVhFQ19FTVVUUkFNUF9QQVhdKTogTW92ZSBkZWZhdWx0IGRlZmluaXRpb24gb3V0c2lkZQotCWVuY2xvc2luZyAjaWYgc2NvcGUuCisgICAgSW5jcmVtZW50IGxpYnRvb2wgbGlicmFyeSByZXZpc2lvbiBudW1iZXIKIAotMjAxMy0wMy0xNyAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQG1veGllbG9naWMuY29tPgorY29tbWl0IDU3NDY1NzQ0YjZlMTI5NWQ3MjAyZGU1YTc3MzRkZjU4OTUxOGYxYzgKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFN1biBNYXkgMTEgMTA6MzA6MjIgMjAxNCAtMDQwMAogCi0JKiBjb25maWd1cmUuYWM6IE9ubHkgbW9kaWZ5IHRvb2xleGVjZGlyIGluIGNlcnRhaW4gY2FzZXMuCi0JKiBjb25maWd1cmU6IFJlYnVpbHQuCisgICAgVXBkYXRlIHRvIHZlcnNpb24gMy4xCiAKLTIwMTMtMDMtMTYgIEdpbGxlcyBUYWxpcyAgPGdpbGxlcy50YWxpc0BnbWFpbC5jb20+Citjb21taXQgMGMyMjUxYTQyZGY1MTA4YjZkOWViZTVmZTFjZjgzZDBiY2RmNjYwZQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU3VuIE1heSAxMSAxMDoyMjozMCAyMDE0IC0wNDAwCiAKLQkqIHNyYy9wb3dlcnBjL2ZmaS5jIChmZmlfcHJlcF9hcmdzX1NZU1YpOiBEb24ndCB1c2UKLQlmcGFyZ19jb3VudCxldGMgb24gX19OT19GUFJTX18gdGFyZ2V0cy4KKyAgICBTdXBwb3J0IHZlcnNpb25zIG9mIGdpdCBvbGRlciB0aGFuIDEuOC41CiAKLTIwMTMtMDMtMTYgIEFsYW4gSG91cmloYW5lICA8YWxhbmhAZmFpcmxpdGUuY28udWs+Citjb21taXQgNzBjMzAzY2I4OGUyM2FhZWU5MWM4N2M1NmIxMDhjNTBhYjRmM2MyZgorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU3VuIE1heSAxMSAwOTo1Njo0MCAyMDE0IC0wNDAwCiAKLQkqIHNyYy9tNjhrL3N5c3YuUyAoZXBpbG9ndWUpOiBEb24ndCB1c2UgZXh0YiBpbnN0cnVjdGlvbiBvbgotCW02ODAwMDAgbWFjaGluZXMuCisgICAgRml4IHRlc3RzdWl0ZSBmb3IgR0NDIDQuOS4wCiAKLTIwMTMtMDMtMTYgIEFsZXggR2F5bm9yIDxhbGV4LmdheW5vckBnbWFpbC5jb20+Citjb21taXQgNTJiMzQ1NzA5M2VkMTliMmE3YzVmY2YyNDNjNDAxNGM5MGNlNjIyNQorQXV0aG9yOiBNYWdudXMgR3JhbmJlcmcgPHpvcnJ5QGdlbnRvby5vcmc+CitEYXRlOiAgIFN1biBNYXkgMTEgMDk6NTU6MjggMjAxNCAtMDQwMAogCi0JKiBzcmMveDg2L2ZmaS5jIChmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IEFsd2F5cyBhbGlnbiBzdGFjay4KKyAgICBDaGVjayAvcHJvYy9zZWxmL3N0YXR1cyBmb3IgUGFYIHN0YXR1cy4KIAotMjAxMy0wMy0xMyAgTWFya29zIENoYW5kcmFzIDxtYXJrb3MuY2hhbmRyYXNAaW1ndGVjLmNvbT4KK2NvbW1pdCA3YmE0YzVkNzJhYTQ0MGE0YjIxZmI1N2U5OTllNjdjNTk1Nzc2MWRhCitBdXRob3I6IERvbWluaWsgVm9ndCA8ZG9taW5pay52b2d0QGdteC5kZT4KK0RhdGU6ICAgU3VuIE1heSAxMSAwOTo1Mjo0NyAyMDE0IC0wNDAwCiAKLQkqIGNvbmZpZ3VyZS5hYzogQWRkIHN1cHBvcnQgZm9yIEltYWdpbmF0aW9uIFRlY2hub2xvZ2llcyBNZXRhLgotCSogTWFrZWZpbGUuYW06IExpa2V3aXNlLgotCSogUkVBRE1FOiBBZGQgSW1hZ2luYXRpb24gVGVjaG5vbG9naWVzIE1ldGEgZGV0YWlscy4KLQkqIHNyYy9tZXRhZy9mZmkuYzogTmV3LgotCSogc3JjL21ldGFnL2ZmaXRhcmdldC5oOiBMaWtld2lzZS4KLQkqIHNyYy9tZXRhZy9zeXN2LlM6IExpa2V3aXNlLgorICAgIFVzZSB0byBnZXQgY29ycmVjdCBkaXIKIAotMjAxMy0wMi0yNCAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAbGludXgtbTY4ay5vcmc+Citjb21taXQgMzFlMGQ0ZWNmZjZkYzJhNmM3NWEwNjZlZTA5OWI1MmE0M2Y2YmEyNworTWVyZ2U6IDFjMGU5YTcgOTk5MDllYgorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgV2VkIEFwciAyMyAxOToyNDo0NyAyMDE0IC0wNDAwCiAKLQkqIGRvYy9saWJmZmkudGV4aSAoU3RydWN0dXJlcyk6IEZpeCBtaXNzaW5nIGNhdGVnb3J5IGFyZ3VtZW50IG9mCi0JQGRlZnRwLgorICAgIE1lcmdlIHB1bGwgcmVxdWVzdCAjMTE5IGZyb20gam9zaHRyaXBsZXR0L2Zhc3RjYWxsLWZhc3RiYWxsCisgICAgCisgICAgc3JjL3g4Ni93aW4zMi5TOiBEZWZpbmUgZmZpX2Nsb3N1cmVfRkFTVENBTEwgaW4gdGhlIE1BU00gc2VjdGlvbiwgdG9vCiAKLTIwMTMtMDItMTEgIEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorY29tbWl0IDk5OTA5ZWI2MTg0YjYyNDA4ZDg4YjZiNGU3YWIzOGU4NGU2ZDBiZjMKK0F1dGhvcjogSm9zaCBUcmlwbGV0dCA8am9zaEBqb3NodHJpcGxldHQub3JnPgorRGF0ZTogICBUdWUgQXByIDIyIDIxOjE3OjUyIDIwMTQgLTA3MDAKIAotCSogY29uZmlndXJlLmFjOiBVcGRhdGUgcmVsZWFzZSBudW1iZXIgdG8gMy4wLjEyLgotCSogY29uZmlndXJlOiBSZWJ1aWx0LgotCSogUkVBRE1FOiBVcGRhdGUgcmVsZWFzZSBpbmZvLgorICAgIHNyYy94ODYvd2luMzIuUzogRGVmaW5lIGZmaV9jbG9zdXJlX0ZBU1RDQUxMIGluIHRoZSBNQVNNIHNlY3Rpb24sIHRvbwogCi0yMDEzLTAyLTEwICBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK2NvbW1pdCAxYzBlOWE3Mjk3Y2VkMTU0MTNjMmQyZDVkMzVmNmM2NTBjNGI0NmM5CitNZXJnZTogOTNhMjRmMiBkMzY5NTIyCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBNb24gQXByIDIxIDEyOjQxOjU2IDIwMTQgLTA0MDAKIAotCSogUkVBRE1FOiBBZGQgTW94aWUuCi0JKiBzcmMvbW94aWUvZmZpLmM6IENyZWF0ZWQuCi0JKiBzcmMvbW94aWUvZWFiaS5TOiBDcmVhdGVkLgotCSogc3JjL21veGllL2ZmaXRhcmdldC5oOiBDcmVhdGVkLgotCSogTWFrZWZpbGUuYW0gKG5vZGlzdF9saWJmZmlfbGFfU09VUkNFUyk6IEFkZCBNb3hpZS4KLQkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgotCSogY29uZmlndXJlLmFjOiBBZGQgTW94aWUuCi0JKiBjb25maWd1cmU6IFJlYnVpbHQuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvaHVnZV9zdHJ1Y3QuYzogRGlzYWJsZSBmb3JtYXQgc3RyaW5nCi0Jd2FybmluZ3MgZm9yIG1veGllKi0qLWVsZiB0ZXN0cy4KKyAgICBNZXJnZSBwdWxsIHJlcXVlc3QgIzEwMSBmcm9tIGpvc2h0cmlwbGV0dC9mYXN0Y2FsbC1jbG9zdXJlcworICAgIAorICAgIFN1cHBvcnQgY2xvc3VyZXMgZm9yIGZhc3RjYWxsCiAKLTIwMTMtMDItMTAgIEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorY29tbWl0IGQzNjk1MjI3M2Q0ZmFmYmRhOTFlY2MyMDVmYzA4MjRmN2NjNjVlNzAKK0F1dGhvcjogSm9zaCBUcmlwbGV0dCA8am9zaEBqb3NodHJpcGxldHQub3JnPgorRGF0ZTogICBTdW4gQXByIDIwIDEyOjAzOjI1IDIwMTQgLTA3MDAKIAotCSogTWFrZWZpbGUuYW0gKExUTERGTEFHUyk6IEZpeCByZWZlcmVuY2UuCi0JKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KKyAgICBTdXBwb3J0IGZhc3RjYWxsIGNsb3N1cmVzCisgICAgCisgICAgbGliZmZpIG9uIDMyLWJpdCB4ODYgbm93IHN1cHBvcnRzIGNsb3N1cmVzIGZvciBhbGwgc3VwcG9ydGVkIEFCSXMuCisgICAgVGh1cywgcmV3cml0ZSB0aGUgbGFzdCByZW1haW5pbmcgZHVwbGljYXRlZC1ieS1BQkkgdGVzdCAoY2xvc3VyZV9zdGRjYWxsCisgICAgYW5kIGNsb3N1cmVfdGhpc2NhbGwpIHRvIHVzZSB0aGUgZ2VuZXJpYyBBQklfTlVNL0FCSV9BVFRSIG1lY2hhbmlzbS4KIAotMjAxMy0wMi0xMCAgQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+Citjb21taXQgOTNhMjRmMjE2YmNkZDEwMThiOTc2ZDY5NzE3OWM2ZDQ5MDA0MDE1YQorTWVyZ2U6IGRkMTFhMDQgMjM0OWZlYworQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU2F0IEFwciAxMiAxOTozODowNyAyMDE0IC0wNDAwCiAKLQkqIFJFQURNRTogVXBkYXRlIHN1cHBvcnRlZCBwbGF0Zm9ybXMuICBVcGRhdGUgdGVzdCByZXN1bHRzIGxpbmsuCisgICAgTWVyZ2UgcHVsbCByZXF1ZXN0ICM4MCBmcm9tIHVlbm8vZGV2ZWwKKyAgICAKKyAgICBGaXggdHlwbyBpbiBkb2MKIAotMjAxMy0wMi0wOSAgQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+Citjb21taXQgZGQxMWEwNDA2MWNiNDljZTFkNzAyNTQ1NjkzYzI0ZWIxMjY3ZDY0OAorTWVyZ2U6IDhmYTI4MTIgMDNjYTg4MAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU2F0IEFwciAxMiAxOTozNzoyMSAyMDE0IC0wNDAwCiAKLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZWdpbnQuYzogUmVtb3ZlIGZvcmNlZCAtTzIuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbWFueTIuYyAoZm9vKTogUmVtb3ZlIEdDQ2lzbS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mZml0ZXN0Lmg6IEFkZCBkZWZhdWx0IFBSSXVQVFIgZGVmaW5pdGlvbi4KKyAgICBNZXJnZSBwdWxsIHJlcXVlc3QgIzg2IGZyb20gam9zaHRyaXBsZXR0L3Rlc3RzdWl0ZS1DQy1DWFgKKyAgICAKKyAgICB0ZXN0c3VpdGUgaWdub3JlcyBDQyBwYXJhbWV0ZXIgc3VwcGxpZWQgdG8gY29uZmlndXJlIG9yIG1ha2UKIAotCSogc3JjL3NwYXJjL3Y4LlMgKGZmaV9jbG9zdXJlX3Y4KTogSW1wb3J0IGFuY2llbnQgdWxvbmdsb25nCi0JY2xvc3VyZSByZXR1cm4gdHlwZSBmaXggZGV2ZWxvcGVkIGJ5IE1hcnRpbiB2LiBMw7Z3aXMgZm9yIGNweXRob24KLQlmb3JrLgorY29tbWl0IDhmYTI4MTIzNTVlNjg1YTQyYWJmOWE2MmZiYzY3NGQ2MTZiMmVkZWUKK01lcmdlOiA4YTU4ZTZiIDQxOTUwM2YKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFNhdCBBcHIgMTIgMTk6MzI6MDggMjAxNCAtMDQwMAogCi0yMDEzLTAyLTA4ICBBbmRyZWFzIFRvYmxlciAgPGFuZHJlYXN0QGZnem5ldC5jaD4KKyAgICBNZXJnZSBwdWxsIHJlcXVlc3QgIzExNiBmcm9tIGZyaWRhL2ZpeC9kYXJ3aW4tYWFyY2g2NC12YXJpYWRpYworICAgIAorICAgIEZpeCBoYW5kbGluZyBvZiB2YXJpYWRpYyBjYWxscyBvbiBEYXJ3aW4vQUFyY2g2NAogCi0JKiBzcmMvcG93ZXJwYy9mZmkuYyAoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBGaXggc21hbGwgc3RydWN0Ci0Jc3VwcG9ydC4KLQkqIHNyYy9wb3dlcnBjL3N5c3YuUzogRGl0dG8uCitjb21taXQgOGE1OGU2Yjc4MDViNzM2ZGVmMTk3YjhiYWY4ZTQ2NWEyYTNmNjkxMworTWVyZ2U6IDMwYjc3YzUgYTUzOWY3ZgorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU2F0IEFwciAxMiAxOTozMDoxOCAyMDE0IC0wNDAwCiAKLTIwMTMtMDItMDggIEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorICAgIE1lcmdlIHB1bGwgcmVxdWVzdCAjMTE1IGZyb20gZnJpZGEvZml4L2Rhcndpbi1hYXJjaDY0LWFsaWdubWVudAorICAgIAorICAgIEZpeCBhbGlnbm1lbnQgb2YgQUFyY2g2NCBhc3NlbWJsZXIgZnVuY3Rpb25zCiAKLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbG9uZ2RvdWJsZS5jOiBSZW1vdmUgeGZhaWwgZm9yCi0JYXJtKi0qLSouCitjb21taXQgMzBiNzdjNTZmOTVjNjNlY2Q4MzM5OWFhZmRiYWQ3YjA3MzMwZjJmZAorTWVyZ2U6IGRjMzNjYjMgM2UyYjg0ZAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU2F0IEFwciAxMiAxOToyOToxMyAyMDE0IC0wNDAwCiAKLTIwMTMtMDItMDggIEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorICAgIE1lcmdlIHB1bGwgcmVxdWVzdCAjMTE3IGZyb20gZnJpZGEvZml4L3dpbmRvd3MtcmVncmVzc2lvbgorICAgIAorICAgIEZpeCBXaW5kb3dzIHJlZ3Jlc3Npb24KIAotCSogc3JjL3NwYXJjL2ZmaS5jIChmZmlfcHJlcF9jbG9zdXJlX2xvYyk6IEZpeCBjYWNoZSBmbHVzaGluZyBmb3IgR0NDLgorY29tbWl0IDNlMmI4NGQyOTU1MzE3MjA5MTdiZjQ2YWZjNTMyZmM2ZDg3N2UzZWMKK0F1dGhvcjogT2xlIEFuZHLDqSBWYWRsYSBSYXZuw6VzIDxvbGUuYW5kcmUucmF2bmFzQHRpbGxpdGVjaC5jb20+CitEYXRlOiAgIFNhdCBBcHIgMTIgMDE6MDQ6MDQgMjAxNCArMDIwMAogCi0yMDEzLTAyLTA4ICBNYXR0aGlhcyBLbG9zZSAgPGRva29AdWJ1bnR1LmNvbT4KKyAgICBGaXggV2luZG93cyByZWdyZXNzaW9uCisgICAgCisgICAgSW50cm9kdWNlZCBieSBiNWZlZDYwMTk0ODIzNzAzNzUxM2E5YjdmOTY3YzhmYzZjOWZmMWY2LgogCi0JKiBtYW4vZmZpX3ByZXBfY2lmLjM6IENsZWFuIHVwIGZvciBkZWJpYW4gbGludGVyLgorY29tbWl0IDQxOTUwM2Y0MDljMzIxZmUzMWZmNTlkOTYzZWYzNGJiOTEzNDIwZDAKK0F1dGhvcjogT2xlIEFuZHLDqSBWYWRsYSBSYXZuw6VzIDxvbGUuYW5kcmUucmF2bmFzQHRpbGxpdGVjaC5jb20+CitEYXRlOiAgIFN1biBBcHIgNiAyMDo1NDoxMyAyMDE0ICswMjAwCiAKLTIwMTMtMDItMDggIFBldGVyIEJlcmduZXIgIDxiZXJnbmVyQHZuZXQuaWJtLmNvbT4KKyAgICBGaXggaGFuZGxpbmcgb2YgdmFyaWFkaWMgY2FsbHMgb24gRGFyd2luL0FBcmNoNjQKIAotCSogc3JjL3Bvd2VycGMvZmZpLmMgKGZmaV9wcmVwX2FyZ3NfU1lTVik6IEFjY291bnQgZm9yIEZQIGFyZ3MgcHVzaGVkCi0Jb24gdGhlIHN0YWNrLgorY29tbWl0IGE1MzlmN2ZmZDY3ODNhYTExMzUzZDEzMjY1NTIwZTQ1M2M1NjVmYjQKK0F1dGhvcjogT2xlIEFuZHLDqSBWYWRsYSBSYXZuw6VzIDxvbGUuYW5kcmUucmF2bmFzQHRpbGxpdGVjaC5jb20+CitEYXRlOiAgIFN1biBBcHIgNiAyMDo1MzowMiAyMDE0ICswMjAwCiAKLTIwMTMtMDItMDggIEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorICAgIEZpeCBhbGlnbm1lbnQgb2YgQUFyY2g2NCBhc3NlbWJsZXIgZnVuY3Rpb25zCiAKLQkqIE1ha2VmaWxlLmFtIChFWFRSQV9ESVNUKTogQWRkIG1pc3NpbmcgZmlsZXMuCi0JKiB0ZXN0c3VpdGUvTWFrZWZpbGUuYW0gKEVYVFJBX0RJU1QpOiBEaXR0by4KLQkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgorY29tbWl0IGRjMzNjYjNjOTk4ZGE1MjFhOTYwMzg1YzEyNjljM2FlZjU1MmY2OWYKK01lcmdlOiBjODYwYTk5IGI1ZmVkNjAKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFNhdCBBcHIgNSAyMzo0MToyMiAyMDE0IC0wNDAwCiAKLTIwMTMtMDItMDggIEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorICAgIE1lcmdlIHB1bGwgcmVxdWVzdCAjMTE0IGZyb20gam9zaHRyaXBsZXR0L2JvdW5jZS1vbi1hLXRpbnktdHJhbXBvbGluZQorICAgIAorICAgIEZpeCBBQkkgb24gMzItYml0IG5vbi1XaW5kb3dzIHg4NjogZ28gYmFjayB0byB0cmFtcG9saW5lIHNpemUgMTAKIAotCSogY29uZmlndXJlLmFjOiBNb3ZlIHNwYXJjIGFzbSBjb25maWcgY2hlY2tzIHRvIHdpdGhpbiBmdW5jdGlvbnMKLQlmb3IgY29tcGF0aWJpbGl0eSB3aXRoIHN1biB0b29scy4KLQkqIGNvbmZpZ3VyZTogUmVidWlsdC4KLQkqIHNyYy9zcGFyYy9mZmkuYyAoZmZpX3ByZXBfY2xvc3VyZV9sb2MpOiBGbHVzaCBjYWNoZSBvbiB2OQotCXN5c3RlbXMuCi0JKiBzcmMvc3BhcmMvdjguUyAoZmZpX2ZsdXNoX2ljYWNoZSk6IEltcGxlbWVudCBhIHNwYXJjIHY5IGNhY2hlCi0JZmx1c2hlci4KK2NvbW1pdCBiNWZlZDYwMTk0ODIzNzAzNzUxM2E5YjdmOTY3YzhmYzZjOWZmMWY2CitBdXRob3I6IEpvc2ggVHJpcGxldHQgPGpvc2hAam9zaHRyaXBsZXR0Lm9yZz4KK0RhdGU6ICAgU2F0IEFwciA1IDE3OjMzOjQyIDIwMTQgLTA3MDAKIAotMjAxMy0wMi0wOCAgTmF0aGFuIFJvc3NpIDxuYXRoYW4ucm9zc2lAeGlsaW54LmNvbT4KKyAgICBGaXggQUJJIG9uIDMyLWJpdCBub24tV2luZG93cyB4ODY6IGdvIGJhY2sgdG8gdHJhbXBvbGluZSBzaXplIDEwCisgICAgCisgICAgVGhlIHRyYW1wb2xpbmUgc2l6ZSBpcyBwYXJ0IG9mIHRoZSBBQkksIHNvIGl0IGNhbm5vdCBjaGFuZ2UuICBNb3ZlIHRoZQorICAgIGxvZ2ljIGZyb20gdGhlIHN0ZGNhbGwgYW5kIHRoaXNjYWxsIHRyYW1wb2xpbmVzIHRvIHRoZSBmdW5jdGlvbnMgdGhleQorICAgIGNhbGwsIHRvIHJlZHVjZSB0aGVtIGJvdGggdG8gMTAgYnl0ZXMuCisgICAgCisgICAgVGhpcyBkcm9wcyB0aGUgcHJldmlvdXNseSBhZGRlZCBzdXBwb3J0IGZvciByYXcgVEhJU0NBTEwgY2xvc3VyZXMgb24KKyAgICBub24tV2luZG93cy4gIChOb24tcmF3IFRISVNDQUxMIGNsb3N1cmVzIHN0aWxsIHdvcmsuKQogCi0JKiBzcmMvbWljcm9ibGF6ZS9mZmkuYyAoZmZpX2Nsb3N1cmVfY2FsbF9TWVNWKTogRml4IGhhbmRsaW5nIG9mCi0Jc21hbGwgYmlnLWVuZGlhbiBzdHJ1Y3R1cmVzLgotCShmZmlfcHJlcF9hcmdzKTogRGl0dG8uCitjb21taXQgMDNjYTg4MDA4MWIyMmVmYWIwOWJhNzIyNjgyNzBmODMwMTdkM2Q3YgorQXV0aG9yOiBKb3NoIFRyaXBsZXR0IDxqb3NoQGpvc2h0cmlwbGV0dC5vcmc+CitEYXRlOiAgIFRodSBNYXIgMjcgMDg6NDQ6MzQgMjAxNCAtMDcwMAogCi0yMDEzLTAyLTA3ICBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KKyAgICBSRUFETUU6IE5vdGUgdGhlIHRlc3RzdWl0ZSBjaGFuZ2VzIHRvIHJlc3BlY3QgJENDIGFuZCAkQ1hYCiAKLQkqIHNyYy9zcGFyYy92OC5TIChmZmlfY2FsbF92OCk6IEZpeCB0eXBvIGZyb20gbGFzdCBwYXRjaAotCShlZmZlY3RpdmVseSBoaWRpbmcgZmZpX2NhbGxfdjgpLgorY29tbWl0IGQ3NGRmOGM1ZDhjNjcyMmVjYjkwOGRhOThjODZjYzhlMmM3NTViODQKK0F1dGhvcjogSm9zaCBUcmlwbGV0dCA8am9zaEBqb3NodHJpcGxldHQub3JnPgorRGF0ZTogICBUaHUgTWFyIDI3IDAwOjQ0OjEyIDIwMTQgLTA3MDAKIAotMjAxMy0wMi0wNyAgQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CisgICAgUkVBRE1FOiBVcGRhdGUgV2luZG93cyBleGFtcGxlIHRvIHNldCBib3RoIENDIGFuZCBDWFgKIAotCSogY29uZmlndXJlLmFjOiBVcGRhdGUgYnVnIHJlcG9ydGluZyBhZGRyZXNzLgotCSogY29uZmlndXJlLmluOiBSZWJ1aWxkLgorY29tbWl0IDdkNjk4MTI1YjFmMDUxNzNmMzY1NmE4OTc1NWEyZWI1ODgxM2IwMDIKK0F1dGhvcjogSm9zaCBUcmlwbGV0dCA8am9zaEBqb3NodHJpcGxldHQub3JnPgorRGF0ZTogICBXZWQgTWFyIDI2IDIzOjE3OjU2IDIwMTQgLTA3MDAKIAotCSogc3JjL3NwYXJjL3Y4LlMgKGZmaV9mbHVzaF9pY2FjaGUpOiBPdXQtb2YtbGluZSBjYWNoZSBmbHVzaGVyIGZvcgotCVN1biBjb21waWxlci4KLQkqIHNyYy9zcGFyYy9mZmkuYyAoZmZpX2NhbGwpOiBSZW1vdmUgd2FybmluZy4KLQlDYWxsIGZmaV9mbHVzaF9pY2FjaGUgZm9yIG5vbi1HQ0MgYnVpbGRzLgotCShmZmlfcHJlcF9jbG9zdXJlX2xvYyk6IFVzZSBmZmlfZmx1c2hfaWNhY2hlLgorICAgIFVzZSB0aGUgcHJvcGVyIEMrKyBjb21waWxlciB0byBydW4gQysrIHRlc3RzCisgICAgCisgICAgUnVubmluZyB0aGUgQyBjb21waWxlciB3aXRoIC1zaGFyZWQtbGliZ2NjIC1sc3RkYysrIGRvZXMgbm90IHdvcmsgb24KKyAgICBub24tR0NDIGNvbXBpbGVycy4KIAotCSogTWFrZWZpbGUuYW0gKEVYVFJBX0RJU1QpOiBBZGQgbGlidG9vbC1sZGZsYWdzLgotCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCi0JKiBsaWJ0b29sLWxkZmxhZ3M6IE5ldyBmaWxlLgorY29tbWl0IGZhNWU4OGYxNzBjYjM3YzdiMmI5YmIwMTVjOGM1Yjg1NGZmZDhhM2UKK0F1dGhvcjogSm9zaCBUcmlwbGV0dCA8am9zaEBqb3NodHJpcGxldHQub3JnPgorRGF0ZTogICBXZWQgTWFyIDI2IDIzOjUzOjU3IDIwMTQgLTA3MDAKIAotMjAxMy0wMi0wNyAgRGFuaWVsIFNjaGVwbGVyIDxkc2NoZXBsZXJAZ21haWwuY29tPgorICAgIC50cmF2aXMueW1sOiBNYWtlIHRoZSBidWlsZCBjb21tYW5kIG1vcmUgcmVhZGFibGUgYnkgc3BsaXR0aW5nIGF0ICYmCisgICAgCisgICAgInNjcmlwdCIgY2FuIGNvbnRhaW4gbXVsdGlwbGUgY29tbWFuZHMgdG8gcnVuIGluIHNlcXVlbmNlLgogCi0JKiBjb25maWd1cmUuYWM6IENvcnJlY3RseSBpZGVudGlmeSB4MzIgc3lzdGVtcyBhcyA2NC1iaXQuCi0JKiBtNC9saWJ0b29sLm00OiBSZW1vdmUgbGlidG9vbCBleHByIGVycm9yLgotCSogYWNsb2NhbC5tNCwgY29uZmlndXJlOiBSZWJ1aWx0LgorY29tbWl0IDBjMzgyNDcwMmQzZDU5ZDM3ZjhjMTc3ZDY0NjMwM2Y1NDYxODc2ODMKK0F1dGhvcjogSm9zaCBUcmlwbGV0dCA8am9zaEBqb3NodHJpcGxldHQub3JnPgorRGF0ZTogICBXZWQgTWFyIDI2IDE0OjUxOjMyIDIwMTQgLTA3MDAKIAotMjAxMy0wMi0wNyAgQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CisgICAgQWx3YXlzIHNldCBDQ19GT1JfVEFSR0VUIGZvciBkZWphZ251LCB0byBtYWtlIHRoZSB0ZXN0c3VpdGUgcmVzcGVjdCAkQ0MKKyAgICAKKyAgICBUaGlzIGZpeGVzIGNyb3NzLWNvbXBpbGF0aW9uIGFuZCBjb21waWxhdGlvbiB3aXRoIENDPSJnY2MgLW0zMiIuCiAKLQkqIGNvbmZpZ3VyZS5hYzogRml4IEdDQyB1c2FnZSB0ZXN0LgotCSogY29uZmlndXJlOiBSZWJ1aWx0LgotCSogUkVBRE1FOiBNZW50aW9uIExMVk0vR0NDIHg4Nl82NCBpc3N1ZS4KLQkqIHRlc3RzdWl0ZS9NYWtlZmlsZS5pbjogUmVidWlsdC4KK2NvbW1pdCA5OTQ2YTkyYWYzMWIzMGNiNzc2MDE1MGQxZjhjYTZjMTFiMDFhZWVhCitBdXRob3I6IEpvc2ggVHJpcGxldHQgPGpvc2hAam9zaHRyaXBsZXR0Lm9yZz4KK0RhdGU6ICAgV2VkIE1hciAyNiAyMDoxODo1OCAyMDE0IC0wNzAwCiAKLTIwMTMtMDItMDcgIEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorICAgIFN0b3AgbG9va2luZyBmb3IgZXhwZWN0IGFuZCBydW50ZXN0IGFib3ZlIHRvcF9idWlsZGRpcgorICAgIAorICAgIFVzZXJzIHdpc2hpbmcgdG8gdGVzdCBoYW5kLWNvbXBpbGVkIHZlcnNpb25zIG9mIGV4cGVjdCBhbmQgcnVudGVzdCBjYW4KKyAgICBlYXNpbHkgZW5vdWdoIHB1dCB0aGVtIGluIHRoZWlyIHBhdGggb3Igc2V0IEVYUEVDVCBhbmQgUlVOVEVTVAorICAgIHRoZW1zZWx2ZXMuCiAKLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZG91YmxlX3ZhLmMgKG1haW4pOiBSZXBsYWNlIC8vIHN0eWxlCi0JY29tbWVudHMgd2l0aCAvKiAqLyBmb3IgeGxjIGNvbXBpbGVyLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X2xhcmdlLmMgKG1haW4pOiBEaXR0by4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9sYXJnZTIuYyAobWFpbik6IERpdHRvLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QxLmMgKG1haW4pOiBEaXR0by4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9odWdlX3N0cnVjdC5jIChtYWluKTogRGl0dG8uCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmxvYXRfdmEuYyAobWFpbik6IERpdHRvLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zdHJ1Y3RfdmExLmMgKG1haW4pOiBEaXR0by4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfcG9pbnRlcl9zdGFjay5jIChtYWluKTogRGl0dG8uCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3BvaW50ZXIuYyAobWFpbik6IERpdHRvLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19sb25nZG91YmxlX3ZhLmMgKG1haW4pOiBEaXR0by4KK2NvbW1pdCBhY2IyMDIzMjUyMTUwNTg2MzkyMzRlZmI3YWYxZjA0YzFjOGExZjQ0CitBdXRob3I6IEpvc2ggVHJpcGxldHQgPGpvc2hAam9zaHRyaXBsZXR0Lm9yZz4KK0RhdGU6ICAgV2VkIE1hciAyNiAyMDoxODo0MSAyMDE0IC0wNzAwCiAKLTIwMTMtMDItMDYgIEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorICAgIFN0b3Agc2V0dGluZyBhbiBlbXB0eSBBTV9SVU5URVNURkxBR1MKIAotCSogbWFuL2ZmaV9wcmVwX2NpZi4zOiBDbGVhbiB1cCBmb3IgZGViaWFuIGxpbnRpYW4gY2hlY2tlci4KK2NvbW1pdCBjODYwYTk5MmZlZjVkN2NkN2JiMDk3NWIxNjMyZDE3YTlmYWZlMDA3CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBUdWUgTWFyIDI1IDE3OjAyOjUxIDIwMTQgLTA0MDAKIAotMjAxMy0wMi0wNiAgQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CisgICAgVXBncmFkZSB2ZXJzaW9uIHRvIDMuMS1yYzEKIAotCSogTWFrZWZpbGUuYW0gKHBrZ2NvbmZpZ2Rpcik6IEFkZCBtaXNzaW5nIHBrZ2NvbmZpZyBpbnN0YWxsIGJpdHMuCi0JKiBNYWtlZmlsZS5pbjogUmVidWlsZC4KK2NvbW1pdCA5ODM3MDczZTYyMDMwNDhhMTYyYTIyNjc5OGM1ZDI1MjYwMDIxOWVkCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBUdWUgTWFyIDI1IDE2OjI0OjE0IDIwMTQgLTA0MDAKIAotMjAxMy0wMi0wMiAgTWFyayBIIFdlYXZlciA8bWh3QG5ldHJpcy5vcmc+CisgICAgVXBkYXRlIGNvcHlyaWdodCBkYXRlIGFuZCBjbGVhbiB1cCBSRUFETUUgbm90ZXMuCiAKLQkqIHNyYy94ODYvZmZpNjQuYyAoZmZpX2NhbGwpOiBTaWduLWV4dGVuZCBpbnRlZ2VyIGFyZ3VtZW50cyBwYXNzZWQKLQl2aWEgZ2VuZXJhbCBwdXJwb3NlIHJlZ2lzdGVycy4KK2NvbW1pdCAxOGQzYmFhOWY1OTdiMDI2Njc1YmFhMWI0ZTVhNWVlZWY3NTc3YTA4CitNZXJnZTogYWZlZTUzNyBmMGM4YTMxCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBUdWUgTWFyIDI1IDE2OjEyOjUzIDIwMTQgLTA0MDAKIAotMjAxMy0wMS0yMSAgTmF0aGFuIFJvc3NpIDxuYXRoYW4ucm9zc2lAeGlsaW54LmNvbT4KKyAgICBNZXJnZSBwdWxsIHJlcXVlc3QgIzEwOCBmcm9tIGpvc2h0cmlwbGV0dC9mcmVlYnNkCisgICAgCisgICAgWzMuMSBibG9ja2VyXSBGaXggRnJlZUJTRCBzdXBwb3J0CiAKLQkqIFJFQURNRTogQWRkIE1pY3JvQmxhemUgZGV0YWlscy4KLQkqIE1ha2VmaWxlLmFtOiBBZGQgTWljcm9CbGF6ZSBzdXBwb3J0LgotCSogY29uZmlndXJlLmFjOiBMaWtld2lzZS4KLQkqIHNyYy9taWNyb2JsYXplL2ZmaS5jOiBOZXcuCi0JKiBzcmMvbWljcm9ibGF6ZS9mZml0YXJnZXQuaDogTGlrZXdpc2UuCi0JKiBzcmMvbWljcm9ibGF6ZS9zeXN2LlM6IExpa2V3aXNlLgorY29tbWl0IGFmZWU1MzczOGE5OTVlMjNiZDJmODlmZDBmN2IzMGIzODA1NjYxMDYKK01lcmdlOiA3ZDI0Nzg1IGIyZDYxMGUKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFR1ZSBNYXIgMjUgMTY6MTI6MzUgMjAxNCAtMDQwMAogCi0yMDEzLTAxLTIxICBOYXRoYW4gUm9zc2kgPG5hdGhhbi5yb3NzaUB4aWxpbnguY29tPgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl91Yy5jOiBGaXhlZCBpc3N1ZS4KKyAgICBNZXJnZSBwdWxsIHJlcXVlc3QgIzEwNiBmcm9tIGpvc2h0cmlwbGV0dC9kYXJ3aW4tYXdhcmQKKyAgICAKKyAgICBbMy4xIGJsb2NrZXJdIFVwZGF0ZSBPUyBYIGJ1aWxkIHN5c3RlbSB0byBpbmNsdWRlIHdpbjMyLlMgb24gMzItYml0CiAKLTIwMTMtMDEtMjEgIENocmlzIFphbmtlbCAgIDxjaHJpc0B6YW5rZWwubmV0PgorY29tbWl0IDdkMjQ3ODU2OGVkOWYwM2NiZjU3NjI3ZjQ0OWEyZDJjZjRkMTU3MWMKK01lcmdlOiBiZWFiNWYzIDU2YmU0N2YKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFR1ZSBNYXIgMjUgMTY6MTI6MTcgMjAxNCAtMDQwMAogCi0JKiBSRUFETUU6IEFkZCBYdGVuc2Egc3VwcG9ydC4KLQkqIE1ha2VmaWxlLmFtOiBMaWtld2lzZS4KLQkqIGNvbmZpZ3VyZS5hYzogTGlrZXdpc2UuCi0JKiBNYWtlZmlsZS5pbiBSZWdlbmVyYXRlLgotCSogY29uZmlndXJlOiBMaWtld2lzZS4KLQkqIHNyYy9wcmVwX2NpZi5jOiBIYW5kbGUgWHRlbnNhLgotCSogc3JjL3h0ZW5zYTogTmV3IGRpcmVjdG9yeS4KLQkqIHNyYy94dGVuc2EvZmZpLmM6IE5ldyBmaWxlLgotCSogc3JjL3h0ZW5zYS9mZml0YXJnZXQuaDogRGl0dG8uCi0JKiBzcmMveHRlbnNhL3N5c3YuUzogRGl0dG8uCisgICAgTWVyZ2UgcHVsbCByZXF1ZXN0ICMxMTAgZnJvbSBqb3NodHJpcGxldHQvdzY0CisgICAgCisgICAgRml4IDY0LWJpdCBXaW5kb3dzIHN1cHBvcnQKIAotMjAxMy0wMS0xMSAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQG1veGllbG9naWMuY29tPgorY29tbWl0IGJlYWI1ZjMzNGQ5ZWM1YjhiOTFkMWNjNzI3ZDEwMjliNDAzNThlN2UKK01lcmdlOiAyOGZiMTk3IGVmNTg5MGUKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFR1ZSBNYXIgMjUgMTY6MDc6NDcgMjAxNCAtMDQwMAogCi0JKiBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmMgKGZmaV9wcmVwX2FyZ3MpOiBSZXBsYWNlIC8vIHN0eWxlCi0JY29tbWVudHMgd2l0aCAvKiAqLyBmb3IgeGxjIGNvbXBpbGVyLgotCSogc3JjL3Bvd2VycGMvYWl4LlMgKGZmaV9jYWxsX0FJWCk6IERpdHRvLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2ZmaXRlc3QuaCAoYWxsb2NhdGVfbW1hcCk6IERlbGV0ZQotCWRlcHJlY2F0ZWQgaW5saW5lIGZ1bmN0aW9uLgotCSogdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL2ZmaXRlc3RjeHguaDogRGl0dG8uCi0JKiBSRUFETUU6IEFkZCB1cGRhdGUgZm9yIEFJWCBzdXBwb3J0LgorICAgIE1lcmdlIHB1bGwgcmVxdWVzdCAjMTA1IGZyb20gam9zaHRyaXBsZXR0L3dpbjMyLXJlbG9jYXRpb25zCisgICAgCisgICAgWzMuMSBibG9ja2VyXSB3aW4zMi5TIG5lZWRzIHRvIGhhbmRsZSByZWxvY2F0aW9ucy9HT1QKIAotMjAxMy0wMS0xMSAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQG1veGllbG9naWMuY29tPgorY29tbWl0IGYwYzhhMzE1NzcxNzIxMDQwNDkyODNmMGE4MGM3MjMwODRhNWJkNzcKK0F1dGhvcjogSm9zaCBUcmlwbGV0dCA8am9zaEBqb3NodHJpcGxldHQub3JnPgorRGF0ZTogICBNb24gTWFyIDI0IDIyOjE0OjI2IDIwMTQgLTA3MDAKIAotCSogY29uZmlndXJlLmFjOiBSb2J1c3RpZnkgcGMgcmVsYXRpdmUgcmVsb2MgY2hlY2suCi0JKiBtNC9heF9jY19tYXhvcHQubTQ6IERvbid0IC1tYWxpZ24tZG91YmxlLiAgVGhpcyBpcyBhbiBBQkkKLQljaGFuZ2luZyBvcHRpb24gZm9yIDMyLWJpdCB4ODYuCi0JKiBhY2xvY2FsLm00LCBjb25maWd1cmU6IFJlYnVpbHQuCi0JKiBSRUFETUU6IFVwZGF0ZSBzdXBwb3J0ZWQgdGFyZ2V0IGxpc3QuCisgICAgQ29tcGlsZSB3aW4zMi5TIG9uIEZyZWVCU0QKIAotMjAxMy0wMS0xMCAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQG1veGllbG9naWMuY29tPgorY29tbWl0IGIyZDYxMGUwMjhiNWNlNDhkMWFkN2U1ZDBkZWJjOWMzMjFkODkxYjIKK0F1dGhvcjogSm9zaCBUcmlwbGV0dCA8am9zaEBqb3NodHJpcGxldHQub3JnPgorRGF0ZTogICBGcmkgTWFyIDIxIDExOjEwOjEzIDIwMTQgLTA3MDAKIAotCSogUkVBRE1FICh0ZXN0ZWQpOiBBZGQgQ29tcGlsZXIgY29sdW1uIHRvIHRhYmxlLgorICAgIENvbXBpbGUgd2luMzIuUyBvbiAzMi1iaXQgRGFyd2luIGFzIHdlbGwKIAotMjAxMy0wMS0xMCAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQG1veGllbG9naWMuY29tPgorY29tbWl0IGJlNTBiODdhNDkwZTc5NDM2MmNiNGEyN2FkYTJmYmFhYjIwMmFkYjgKK0F1dGhvcjogSm9zaCBUcmlwbGV0dCA8am9zaEBqb3NodHJpcGxldHQub3JnPgorRGF0ZTogICBNb24gTWFyIDI0IDIxOjQ0OjEzIDIwMTQgLTA3MDAKIAotCSogc3JjL3g4Ni9mZmk2NC5jIChzdHJ1Y3QgcmVnaXN0ZXJfYXJncyk6IE1ha2Ugc3NlIGFycmF5IGFuZCBhcnJheQotCW9mIHVuaW9ucyBmb3Igc3VucHJvIGNvbXBpbGVyIGNvbXBhdGliaWxpdHkuCisgICAgQWx3YXlzIHVzZSBjb25maWd1cmUgdG8gZGV0ZWN0IHdoZXRoZXIgZ2xvYmFsIHN5bWJvbHMgbmVlZCB1bmRlcnNjb3JlcworICAgIAorICAgIDY0LWJpdCBXaW5kb3dzIGFscmVhZHkgdXNlZCB0aGlzIGNoZWNrOyBtYWtlIGl0IHVuaXZlcnNhbCwgYW5kIHVzZSBpdCBpbgorICAgIHBsYWNlIG9mIGFuIGlmZGVmIG9uIFg4Nl9XSU4zMiwgdG8gaGFuZGxlIG5vbi1XaW5kb3dzIHBsYXRmb3JtcyB0aGF0IHVzZQorICAgIHRoZSB1bmRlcnNjb3JlLCBzdWNoIGFzIERhcndpbi4KIAotMjAxMy0wMS0xMCAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQG1veGllbG9naWMuY29tPgorY29tbWl0IDU2YmU0N2Y4NzYyOWUzMWFmYmNiMDc3NGFhNjU3MzVmNTM5ZWU5NzIKK0F1dGhvcjogSm9zaCBUcmlwbGV0dCA8am9zaEBqb3NodHJpcGxldHQub3JnPgorRGF0ZTogICBNb24gTWFyIDI0IDIxOjI0OjUzIDIwMTQgLTA3MDAKIAotCSogY29uZmlndXJlLmFjOiBUZXN0IHRhcmdldCBwbGF0Zm9ybSBzaXplX3Qgc2l6ZS4gIEhhbmRsZSBib3RoIDMyCi0JYW5kIDY0LWJpdCBidWlsZHMgZm9yIHg4Nl82NC0qIGFuZCBpPzg2LSogdGFyZ2V0cyAoYWxsb3dpbmcgZm9yCi0JQ0ZMQUcgb3B0aW9uIHRvIGNoYW5nZSBkZWZhdWx0IHNldHRpbmdzKS4KLQkqIGNvbmZpZ3VyZSwgYWNsb2NhbC5tNDogUmVidWlsdC4KKyAgICBGaXggYSB3YXJuaW5nIG9uIDY0LWJpdCBXaW5kb3dzCisgICAgCisgICAgV2hlbiBzaXplb2Yoc2l6ZV90KSAhPSBzaXplb2YodW5zaWduZWQpLCBhZGRpbmcgYSBzaXplX3QgdG8gY2lmLT5ieXRlcworICAgIHByb2R1Y2VzIGEgInBvc3NpYmxlIGxvc3Mgb2YgZGF0YSIgd2FybmluZy4gIEhvd2V2ZXIsIHRoZSBzaXplX3QgaW4KKyAgICBxdWVzdGlvbiByZWZlcnMgdG8gdGhlIHNpemUgb2YgYSBzaW5nbGUgcGFyYW1ldGVyLiAgVXNlIGEgY2FzdCB0byBhdm9pZAorICAgIHRoZSB3YXJuaW5nLgogCi0yMDEzLTAxLTEwICBBbnRob255IEdyZWVuICA8Z3JlZW5AbW94aWVsb2dpYy5jb20+Citjb21taXQgNDhhOGVkYTc0YWFkOGEyMWI2ZjI2ZGY1ZGYwOGZlNjRjMDQzZDIwOAorQXV0aG9yOiBKb3NoIFRyaXBsZXR0IDxqb3NoQGpvc2h0cmlwbGV0dC5vcmc+CitEYXRlOiAgIE1vbiBNYXIgMjQgMjE6MjE6MTIgMjAxNCAtMDcwMAogCi0JKiB0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvc3BlY2lhbC5leHA6IE9ubHkgcnVuIGV4Y2VwdGlvbgotCWhhbmRsaW5nIHRlc3RzIHdoZW4gdXNpbmcgR05VIGNvbXBpbGVyLgorICAgIEF2b2lkIHJlZmVyZW5jaW5nIHVuZGVmaW5lZCBBQklzIG9uIDY0LWJpdCBXaW5kb3dzIGJ1aWxkcworICAgIAorICAgIDY0LWJpdCBXaW5kb3dzIGRvZXMgbm90IGhhdmUgRkZJX1NURENBTEwsIEZGSV9USElTQ0FMTCwgb3IgRkZJX0ZBU1RDQUxMLgogCi0JKiBtNC9heF9jb21waWxlcl92ZW5kb3IubTQ6IE5ldyBmaWxlLgotCSogY29uZmlndXJlLmFjOiBUZXN0IGZvciBjb21waWxlciB2ZW5kb3IgYW5kIGRvbid0IHVzZQotCUFYX0NGTEFHU19XQVJOX0FMTCB3aXRoIHRoZSBzdW4gY29tcGlsZXIuCi0JKiBhY2xvY2FsLm00LCBjb25maWd1cmU6IFJlYnVpbHQuCitjb21taXQgZjBmNDEzOGY5MDM0NWQ3ZDY3ZGZhNjc4M2E3ZTFjN2NjMzBkM2M2ZgorQXV0aG9yOiBKb3NoIFRyaXBsZXR0IDxqb3NoQGpvc2h0cmlwbGV0dC5vcmc+CitEYXRlOiAgIFNhdCBNYXIgMjIgMTA6MDA6NTMgMjAxNCAtMDcwMAogCi0yMDEzLTAxLTEwICBBbnRob255IEdyZWVuICA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CisgICAgd2luMzIuUzogQWRkIGhhbmRsaW5nIGZvciBwb3NpdGlvbi1pbmRlcGVuZGVudCBjb2RlIG9uIERhcndpbgorICAgIAorICAgIE5ld2VyIHZlcnNpb25zIG9mIERhcndpbiBnZW5lcmF0ZSB0aGUgbmVjZXNzYXJ5IHN0dWIgZnVuY3Rpb25zCisgICAgYXV0b21hdGljYWxseSBhbmQganVzdCBuZWVkIGEgY2FsbCBpbnN0cnVjdGlvbiwgYnV0IGFjY29tb2RhdGluZyBvbGRlcgorICAgIHZlcnNpb25zIGFzIHdlbGwgcmVxdWlyZXMgYWRkaW5nIHRoZSBzdHViLgogCi0JKiBpbmNsdWRlL2ZmaV9jb21tb24uaDogRG9uJ3QgdXNlIEdDQ2lzbXMgdG8gZGVmaW5lIHR5cGVzIHdoZW4KLQlidWlsZGluZyB3aXRoIHRoZSBTVU5QUk8gY29tcGlsZXIuCitjb21taXQgZWY1ODkwZWJhZmI3Y2QyZmJmOWFjZjE2MWVkYjU1ZmUxMzgyODcxYworQXV0aG9yOiBKb3NoIFRyaXBsZXR0IDxqb3NoQGpvc2h0cmlwbGV0dC5vcmc+CitEYXRlOiAgIEZyaSBNYXIgMjEgMTE6MDE6MzkgMjAxNCAtMDcwMAogCi0yMDEzLTAxLTEwICBBbnRob255IEdyZWVuICA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CisgICAgd2luMzIuUzogVXNlIHNoaWZ0aW5nIGZvciBtdWx0aXBsaWNhdGlvbiByYXRoZXIgdGhhbiByZXBlYXRlZCBhZGRpdGlvbgorICAgIAorICAgIFRoZSBqdW1wIHRhYmxlIGNvZGUgYWRkZWQgYSByZWdpc3RlciB0byBpdHNlbGYgdHdpY2UgdG8gbXVsdGlwbHkgYnkgNDsKKyAgICBzaGlmdCB0aGUgcmVnaXN0ZXIgbGVmdCBieSAyIGluc3RlYWQuCiAKLQkqIGNvbmZpZ3VyZS5hYzogUHV0IGxvY2FsLmV4cCBpbiB0aGUgcmlnaHQgcGxhY2UuCi0JKiBjb25maWd1cmU6IFJlYnVpbHQuCitjb21taXQgNGZjYTQ4OTAxZTdlNGY1M2JmNDkwZWQyMjYwN2IyZDJkOGY0YmZjYworQXV0aG9yOiBKb3NoIFRyaXBsZXR0IDxqb3NoQGpvc2h0cmlwbGV0dC5vcmc+CitEYXRlOiAgIEZyaSBNYXIgMjEgMTE6MDA6NDEgMjAxNCAtMDcwMAogCi0JKiBzcmMveDg2L2ZmaS5jOiBVcGRhdGUgY29tbWVudCBhYm91dCByZWdwYXJtIGZ1bmN0aW9uIGF0dHJpYnV0ZXMuCi0JKiBzcmMveDg2L3N5c3YuUyAoZmZpX2Nsb3N1cmVfU1lTVik6IFRoZSBTVU5QUk8gY29tcGlsZXIgcmVxdWlyZXMKLQl0aGF0IGFsbCBmdW5jdGlvbiBhcmd1bWVudHMgYmUgcGFzc2VkIG9uIHRoZSBzdGFjayAobm8gcmVncGFybQotCXN1cHBvcnQpLgorICAgIHdpbjMyLlM6IE1ha2UgdGhlIGp1bXAgdGFibGVzIHBvc2l0aW9uLWluZGVwZW5kZW50CisgICAgCisgICAgTm93IHRoYXQgbm9uLVdpbmRvd3MgcGxhdGZvcm1zIGluY2x1ZGUgd2luMzIuUywgaXQgbmVlZHMgdG8gc3VwcG9ydAorICAgIGJ1aWxkaW5nIGFzIHBvc2l0aW9uLWluZGVwZW5kZW50IGNvZGUuICBUaGlzIGZpeGVzIGJ1aWxkIGZhaWx1cmVzIG9uCisgICAgdGFyZ2V0IHBsYXRmb3JtcyB0aGF0IGRvIG5vdCBhbGxvdyB0ZXh0IHJlbG9jYXRpb25zLgogCi0yMDEzLTAxLTA4ICBBbnRob255IEdyZWVuICA8Z3JlZW5AbW94aWVsb2dpYy5jb20+Citjb21taXQgMjA4N2RjZjczNjI3NDI4NmY3NmM2OWQzOTg4ZmI2ZDdjYzRmZDBmNQorQXV0aG9yOiBKb3NoIFRyaXBsZXR0IDxqb3NoQGpvc2h0cmlwbGV0dC5vcmc+CitEYXRlOiAgIEZyaSBNYXIgMjEgMTA6NTc6MDYgMjAxNCAtMDcwMAogCi0JKiBjb25maWd1cmUuYWM6IEdlbmVyYXRlIGxvY2FsLmV4cC4gIFRoaXMgc2V0cyBDQ19GT1JfVEFSR0VUCi0Jd2hlbiB3ZSBhcmUgdXNpbmcgdGhlIHZlbmRvciBjb21waWxlci4KLQkqIHRlc3RzdWl0ZS9NYWtlZmlsZS5hbSAoRVhUUkFfREVKQUdOVV9TSVRFX0NPTkZJRyk6IFBvaW50IHRvCi0JLi4vbG9jYWwuZXhwLgotCSogY29uZmlndXJlLCB0ZXN0c3VpdGUvTWFrZWZpbGUuaW46IFJlYnVpbHQuCisgICAgd2luMzIuUzogTWFrZSBjYWxscyB0byBmZmlfY2xvc3VyZV9TWVNWX2lubmVyIHBvc2l0aW9uLWluZGVwZW5kZW50CisgICAgCisgICAgTm93IHRoYXQgbm9uLVdpbmRvd3MgcGxhdGZvcm1zIGluY2x1ZGUgd2luMzIuUywgaXQgbmVlZHMgdG8gc3VwcG9ydAorICAgIGJ1aWxkaW5nIGFzIHBvc2l0aW9uLWluZGVwZW5kZW50IGNvZGUuICBUaGlzIGZpeGVzIG9uZSBzb3VyY2Ugb2YgYnVpbGQKKyAgICBmYWlsdXJlcyBvbiB0YXJnZXQgcGxhdGZvcm1zIHRoYXQgZG8gbm90IGFsbG93IHRleHQgcmVsb2NhdGlvbnMuCiAKLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jYWxsLmV4cDogUnVuIHRlc3RzIHdpdGggZGlmZmVyZW50Ci0Jb3B0aW9ucywgZGVwZW5kaW5nIG9uIHdoZXRoZXIgb3Igbm90IHdlIGFyZSB1c2luZyBnY2Mgb3IgdGhlCi0JdmVuZG9yIGNvbXBpbGVyLgotCSogdGVzdHN1aXRlL2xpYi9saWJmZmkuZXhwIChsaWJmZmktaW5pdCk6IFNldCB1c2luZ19nY2MgYmFzZWQgb24KLQl3aGV0aGVyIG9yIG5vdCB3ZSBhcmUgYnVpbGRpbmcvdGVzdGluZyB3aXRoIGdjYy4KK2NvbW1pdCAyOGZiMTk3MDc5Y2YxZDExZGE0ZWVmN2M4YzI0M2FiMDU1OTBjNTI4CitNZXJnZTogYzY5NzQ3MiBjM2RkMGExCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBUdWUgTWFyIDE4IDEyOjE5OjM2IDIwMTQgLTA0MDAKIAotMjAxMy0wMS0wOCAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQG1veGllbG9naWMuY29tPgorICAgIE1lcmdlIHB1bGwgcmVxdWVzdCAjMTA3IGZyb20gcnZhbmRlcm1ldWxlbi9tc3ZjYworICAgIAorICAgIFZhcmlvdXMgY29tcGF0aWJpbGl0eSBmaXhlcyBhbmQgaW1wcm92ZW1lbnRzIHRvIG1zdmNjLnNoLgogCi0JKiBjb25maWd1cmUuYWM6IFN3aXRjaCB4ODYgc29sYXJpcyB0YXJnZXQgdG8gWDg2IGJ5IGRlZmF1bHQuCi0JKiBjb25maWd1cmU6IFJlYnVpbHQuCitjb21taXQgYzNkZDBhMWEwMjQ1ZmMxNzQzNjFhNzA4NzZlODhhZTI0Mjg1Zjg2MQorQXV0aG9yOiBSeWFuIFZhbmRlck1ldWxlbiA8cnlhbnZtQGdtYWlsLmNvbT4KK0RhdGU6ICAgVHVlIE1hciAxOCAxMjowOTo0NSAyMDE0IC0wNDAwCiAKLTIwMTMtMDEtMDggIEFudGhvbnkgR3JlZW4gIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KKyAgICBWYXJpb3VzIGNvbXBhdGliaWxpdHkgZml4ZXMgYW5kIGltcHJvdmVtZW50cyB0byBtc3ZjYy5zaC4KKyAgICAKKyAgICAqIERvbid0IHRyeSB0byBtaXggaW5jb21wYXRpYmxlIG9wdGltaXphdGlvbiBmbGFncyBpbiBkZWJ1ZyBidWlsZHMuCisgICAgKiBXb3JrYXJvdW5kIGF4X2NjX21heG9wdC5tNCBub3Qgc3VwcG9ydGluZyBNU1ZDIGFuZCBjaGFuZ2UgLU8zIHRvIC1PMi4KKyAgICAqIEZpeCBNU1ZDIHdhcm5pbmcgYnkgcHJvcGVybHkgcGFzc2luZyBsaW5rZXIgZmxhZ3MgdG8gY29tcGlsZXIuCisgICAgKiBNYWtlIG1zdmNjLnNoIHJldHVybiAxIGlmIGludmFsaWQgY29tbWFuZCBsaW5lIG9wdGlvbnMgYXJlIHVzZWQgcmF0aGVyIHRoYW4gc2lsZW50bHkgZWF0aW5nIHRoZW0uCisgICAgKiBBZGQgbW9yZSBjb21tZW50cy4KIAotCSogY29uZmlndXJlLmFjOiBGaXggdGVzdCBmb3IgcmVhZC1vbmx5IGVoX2ZyYW1lLgotCSogY29uZmlndXJlOiBSZWJ1aWx0LgorY29tbWl0IGM2OTc0NzJmY2NmYmI1Yjg3YjAwN2MwNTNjZGE5ZWYwMTRiMzQ2YjkKK01lcmdlOiA4M2ZkMmJjIGU0ODkxOGUKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIE1vbiBNYXIgMTcgMDA6MzI6NDIgMjAxNCAtMDQwMAogCi0yMDEzLTAxLTA4ICBBbnRob255IEdyZWVuICA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CisgICAgTWVyZ2UgcHVsbCByZXF1ZXN0ICMxMDIgZnJvbSBqb3NodHJpcGxldHQvdGVzdC1nZW5lcmljCisgICAgCisgICAgQWRkIEFCSXMgdG8gdGhlIHRlc3QgbWF0cml4OyB1bmlmeSBtYW55IGJpdHMgb2YgdGhlIHRlc3RzdWl0ZQogCi0JKiBzcmMveDg2L3N5c3YuUywgc3JjL3g4Ni91bml4NjQuUzogT25seSBlbWl0IERXQVJGIHVud2luZCBpbmZvCi0Jd2hlbiBidWlsZGluZyB3aXRoIHRoZSBHTlUgdG9vbGNoYWluLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2ZmaXRlc3QuaCAoQ0hFQ0spOiBGaXggZm9yIFNvbGFyaXMgdmVuZG9yCi0JY29tcGlsZXIuCitjb21taXQgZTQ4OTE4ZWNmODc2YmM4NWQwNDBmYzUwYTIzMjA1OWM1NjY1NTNhOAorQXV0aG9yOiBKb3NoIFRyaXBsZXR0IDxqb3NoQGpvc2h0cmlwbGV0dC5vcmc+CitEYXRlOiAgIFN1biBNYXIgMTYgMjA6Mjk6MjcgMjAxNCAtMDcwMAogCi0yMDEzLTAxLTA3ICBUaG9yc3RlbiBHbGFzZXIgPHRnQG1pcmJzZC5vcmc+CisgICAgdGVzdHN1aXRlOiBBZGQgQUJJcyB0byB0aGUgdGVzdCBtYXRyaXg7IHVuaWZ5IHRlc3RzIGFjcm9zcyBBQklzCisgICAgCisgICAgVGhpcyBlbGltaW5hdGVzIGFsbCB0aGUgKl93aW4zMi5jIHRlc3RzIGluIGZhdm9yIG9mIHRoZSB0ZXN0cyB0aGV5IHdlcmUKKyAgICBicmFuY2hlZCBmcm9tLCBhbmQgZXhwYW5kcyB0ZXN0IGNvdmVyYWdlIHRvIHJ1biBtYW55IG1vcmUgdGVzdHMgb24KKyAgICBzdGRjYWxsLCB0aGlzY2FsbCwgYW5kIGZhc3RjYWxsLgorICAgIAorICAgIFRoaXMgc2FtZSBtZWNoYW5pc20gYWxzbyBzdXBwb3J0cyB0ZXN0aW5nIGFueSBvdGhlciB0YXJnZXQgdGhhdCBoYXMKKyAgICBtdWx0aXBsZSBBQklzLgogCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VjaGFyX3ZhLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191c2hvcnRfdmEuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvdmFfMS5jOiBUZXN0c3VpdGUgZml4ZXMuCitjb21taXQgNGQ0ZDM2OGU1YTU1ZDk0NDNjNGM1M2IxYjcwZDU4YWI2ZDhjOTQxYworQXV0aG9yOiBKb3NoIFRyaXBsZXR0IDxqb3NoQGpvc2h0cmlwbGV0dC5vcmc+CitEYXRlOiAgIFN1biBNYXIgMTYgMTc6MDI6MDUgMjAxNCAtMDcwMAogCi0yMDEzLTAxLTA3ICBUaG9yc3RlbiBHbGFzZXIgPHRnQG1pcmJzZC5vcmc+CisgICAgdGVzdHN1aXRlOiBSZXBsYWNlIGZmaXRlc3RjeHguaCB3aXRoIGZmaXRlc3QuaAorICAgIAorICAgIGZmaXRlc3QuaCBjb250YWlucyBhIHN1cGVyc2V0IG9mIHRoZSBmdW5jdGlvbmFsaXR5IG9mIGZmaXRlc3RjeHguaDsKKyAgICBtYWtlIHRoZSBDKysgdGVzdHMgaW5jbHVkZSBmZml0ZXN0LmggaW5zdGVhZCwgYW5kIHJlbW92ZSBmZml0ZXN0Y3h4LmguCiAKLQkqIHNyYy9tNjhrL2ZmaS5jIChDSUZfRkxBR1NfU0lOVDgsIENJRl9GTEFHU19TSU5UMTYpOiBEZWZpbmUuCi0JKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogRml4IDgtYml0IGFuZCAxNi1iaXQgc2lnbmVkIGNhbGxzLgotCSogc3JjL202OGsvc3lzdi5TIChmZmlfY2FsbF9TWVNWLCBmZmlfY2xvc3VyZV9TWVNWKTogRGl0dG8uCitjb21taXQgM2Y5N2NmMzQxM2M0NmNhZjJhNzlmMzJhYzljZGE0NjIwOTcyYzJkNworQXV0aG9yOiBKb3NoIFRyaXBsZXR0IDxqb3NoQGpvc2h0cmlwbGV0dC5vcmc+CitEYXRlOiAgIFN1biBNYXIgMTYgMTY6NTM6NDIgMjAxNCAtMDcwMAogCi0yMDEzLTAxLTA0ICBBbnRob255IEdyZWVuICA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CisgICAgdGVzdHN1aXRlOiBVbmlmeSB0aGUgQyBhbmQgQysrIHRlc3RzdWl0ZXMKKyAgICAKKyAgICBUaGVzZSB0d28gdGVzdHN1aXRlcyBkaWZmZXIgb25seSBpbiB0aGUgc291cmNlIGZpbGUgZ2xvYiBhbmQgYSBjb3VwbGUgb2YKKyAgICBhZGRpdGlvbmFsIGNvbXBpbGVyIG9wdGlvbnM7IHVuaWZ5IHRoZSByZW1haW5pbmcgYml0cy4KIAotCSogTWFrZWZpbGUuYW0gKEFNX0NGTEFHUyk6IERvbid0IGF1dG9tYXRpY2FsbHkgYWRkIC1mZXhjZXB0aW9ucwotCWFuZCAtV2FsbC4gIFRoaXMgaXMgc2V0IGluIHRoZSBjb25maWd1cmUgc2NyaXB0IGFmdGVyIHRlc3RpbmcgZm9yCi0JR0NDLgotCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCitjb21taXQgMGQ5Y2NlOGVkYjkzN2JiZTc3MWE2Y2RkMjVmNjcxZWRmMDZkMjEyOAorQXV0aG9yOiBKb3NoIFRyaXBsZXR0IDxqb3NoQGpvc2h0cmlwbGV0dC5vcmc+CitEYXRlOiAgIFN1biBNYXIgMTYgMTY6MjI6NTggMjAxNCAtMDcwMAogCi0yMDEzLTAxLTAyICByb2ZsMHIgPGh0dHBzOi8vZ2l0aHViLmNvbS9yb2ZsMHI+CisgICAgdGVzdHN1aXRlOiBmZml0ZXN0Lmg6IFBhcmVudGhlc2l6ZSB0aGUgQ0hFQ0sgbWFjcm8KIAotCSogc3JjL3Bvd2VycGMvZmZpLmMgKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogRml4IGJ1aWxkIGVycm9yIG9uIHBwYwotCXdoZW4gbG9uZyBkb3VibGUgPT0gZG91YmxlLgorY29tbWl0IDU2OTVlYzE0NDRjNTMyM2U0OGZlNDMxNGY4YzhmMDI3NjI1ZTY3ZGYKK0F1dGhvcjogSm9zaCBUcmlwbGV0dCA8am9zaEBqb3NodHJpcGxldHQub3JnPgorRGF0ZTogICBTdW4gTWFyIDE2IDE2OjA0OjU4IDIwMTQgLTA3MDAKIAotMjAxMy0wMS0wMiAgUmVpbmkgVXJiYW4gIDxydXJiYW5AeC1yYXkuYXQ+CisgICAgdGVzdHN1aXRlOiBGYWN0b3Igb3V0IGEgZnVuY3Rpb24gdG8gcnVuIGEgbWF0cml4IG9mIHRlc3RzCisgICAgCisgICAgVGhpcyBjb21tb25zIHVwIGNvZGUgZnJvbSBsaWJmZmkuY2FsbC9jYWxsLmV4cCBhbmQKKyAgICBsaWJmZmkuc3BlY2lhbC9zcGVjaWFsLmV4cCwgdW5pZmllcyB0aGUgb3B0aW1pemF0aW9uIG9wdGlvbiBtYXRyaXgKKyAgICBiZXR3ZWVuIHRoZSB0d28sIGFuZCBtYWtlcyBpdCBlYXNpZXIgdG8gYWRkIG1vcmUgYXhlcyB0byB0aGUgbWF0cml4CisgICAgaW4gdGhlIGZ1dHVyZS4KIAotCSogTWFrZWZpbGUuYW0gKGxpYmZmaV9sYV9MREZMQUdTKTogQWRkIC1uby11bmRlZmluZWQgdG8gTERGTEFHUwotCShyZXF1aXJlZCBmb3Igc2hhcmVkIGxpYnMgb24gY3lnd2luL21pbmd3KS4KLQkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgorY29tbWl0IGRmZGIwMmNjODY5ODU1ZDNiNjg1NzFlNWY3YWE3N2FlOGM5ZDI1NGEKK0F1dGhvcjogSm9zaCBUcmlwbGV0dCA8am9zaEBqb3NodHJpcGxldHQub3JnPgorRGF0ZTogICBTdW4gTWFyIDE2IDE1OjI2OjI2IDIwMTQgLTA3MDAKIAotMjAxMi0xMC0zMSAgQWxhbiBNb2RyYSAgPGFtb2RyYUBnbWFpbC5jb20+CisgICAgdGVzdHN1aXRlOiBJbnRyb2R1Y2UgYSBfX1RISVNDQUxMX18gY29tcGlsZXItc3BlY2lmaWMgbWFjcm8KIAotCSogc3JjL3Bvd2VycGMvbGludXg2NF9jbG9zdXJlLlM6IEFkZCBuZXcgQUJJIHN1cHBvcnQuCi0JKiBzcmMvcG93ZXJwYy9saW51eDY0LlM6IExpa2V3aXNlLgorY29tbWl0IDgzZmQyYmNlMDQ1NjIyNDQ4MzQzNWQ0Yjc2NDA2M2Y0NTEzZmQ0NjQKK01lcmdlOiAzNjU4YTA3IDA2ZmY5MjQKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFN1biBNYXIgMTYgMjI6MDM6MjkgMjAxNCAtMDQwMAogCi0yMDEyLTEwLTMwICBNYWdudXMgR3JhbmJlcmcgIDx6b3JyeUBnZW50b28ub3JnPgotCSAgICBQYXZlbCBMYWJ1c2hldiAgPHBhdmVsLmxhYnVzaGV2QHJ1bmJveC5ydT4KKyAgICBNZXJnZSBwdWxsIHJlcXVlc3QgIzk5IGZyb20gam9zaHRyaXBsZXR0L2dpdGlnbm9yZQorICAgIAorICAgIC5naXRpZ25vcmU6IElnbm9yZSBtb3JlIGdlbmVyYXRlZCBmaWxlcwogCi0JKiBjb25maWd1cmUuYWM6IE5ldyBvcHRpb25zIHBheF9lbXV0cmFtcAotCSogY29uZmlndXJlLCBmZmljb25maWcuaC5pbjogUmVnZW5lcmF0ZWQKLQkqIHNyYy9jbG9zdXJlcy5jOiBOZXcgZnVuY3Rpb24gZW11dHJhbXBfZW5hYmxlZF9jaGVjaygpIGFuZAotCWNoZWNrcy4KK2NvbW1pdCAzNjU4YTA3MDBhNTBkMzdhMmZkYmEwNGZkOWQ3OWFkMmY3MDZkOWY1CitNZXJnZTogZDk0OGQwYSA0NmM1ZDNjCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTdW4gTWFyIDE2IDIxOjM3OjQyIDIwMTQgLTA0MDAKIAotMjAxMi0xMC0zMCAgRnJlZGVyaWNrIENoZXVuZyAgPGZyZWRlcmljay5jaGV1bmdAZ21haWwuY29tPgorICAgIE1lcmdlIHB1bGwgcmVxdWVzdCAjMTAwIGZyb20gcnZhbmRlcm1ldWxlbi9idWctNzU2NzQwCisgICAgCisgICAgQ2hhbmdlIGRvdWJsZSBxdW90ZXMgaW4gTWFrZWZpbGUuYW0gdG8gc2luZ2xlIHF1b3Rlcy4KIAotCSogY29uZmlndXJlLmFjOiBFbmFibGUgRkZJX01BUF9FWEVDX1dSSVQgZm9yIERhcndpbiAxMiAobW91bnRhaW4KLQlsaW9uKSBhbmQgZnV0dXJlIHZlcnNpb24uCi0JKiBjb25maWd1cmU6IFJlYnVpbGQuCitjb21taXQgNDZjNWQzYzMwZmRjMmI0M2MwNzZhZDk1NTA3OGQ3YzVmMWU3NWIzNworQXV0aG9yOiBSeWFuIFZhbmRlck1ldWxlbiA8cnlhbnZtQGdtYWlsLmNvbT4KK0RhdGU6ICAgU3VuIE1hciAxNiAyMToxNjowOCAyMDE0IC0wNDAwCiAKLTIwMTItMTAtMzAgIEphbWVzIEdyZWVuaGFsZ2ggIDxqYW1lcy5ncmVlbmhhbGdoIGF0IGFybS5jb20+Ci0gICAgICAgICAgICBNYXJjdXMgU2hhd2Nyb2Z0ICA8bWFyY3VzLnNoYXdjcm9mdCBhdCBhcm0uY29tPgorICAgIENoYW5nZSBkb3VibGUgcXVvdGVzIGluIE1ha2VmaWxlLmFtIHRvIHNpbmdsZSBxdW90ZXMuCisgICAgCisgICAgVGhpcyB3YXMgb3JpZ2luYWxseSBkb25lIGluIFBSICM4NCwgZXhjZXB0IHRoZSBjaGFuZ2Ugd2FzIG1hZGUgdG8gTWFrZWZpbGUuaW4gaW5zdGVhZCBvZiBNYWtlZmlsZS5hbSBhbmQgd2FzIHRoZXJlZm9yZSByZXZlcnRlZCB0aGUgbmV4dCB0aW1lIHRoZSBmaWxlcyB3ZXJlIHJlZ2VuZXJhdGVkLgogCi0gICAgICAgICogUkVBRE1FOiBBZGQgZGV0YWlscyBvZiBhYXJjaDY0IHBvcnQuCi0gICAgICAgICogc3JjL2FhcmNoNjQvZmZpLmM6IE5ldy4KLSAgICAgICAgKiBzcmMvYWFyY2g2NC9mZml0YXJnZXQuaDogTGlrZXdpc2UuCi0gICAgICAgICogc3JjL2FhcmNoNjQvc3lzdi5TOiBMaWtld2lzZS4KLQkqIE1ha2VmaWxlLmFtOiBTdXBwb3J0IGFhcmNoNjQuCi0JKiBjb25maWd1cmUuYWM6IFN1cHBvcnQgYWFyY2g2NC4KLQkqIE1ha2VmaWxlLmluLCBjb25maWd1cmU6IFJlYnVpbHQuCitjb21taXQgMDZmZjkyNDIxNWEyZjk3MzllZmEyYzA1OWRjNTk1YmM0ZWMxYzg1MQorQXV0aG9yOiBKb3NoIFRyaXBsZXR0IDxqb3NoQGpvc2h0cmlwbGV0dC5vcmc+CitEYXRlOiAgIFN1biBNYXIgMTYgMTY6MTk6NDYgMjAxNCAtMDcwMAogCi0yMDEyLTEwLTMwICBKYW1lcyBHcmVlbmhhbGdoICA8amFtZXMuZ3JlZW5oYWxnaCBhdCBhcm0uY29tPgotICAgICAgICAgICAgTWFyY3VzIFNoYXdjcm9mdCAgPG1hcmN1cy5zaGF3Y3JvZnQgYXQgYXJtLmNvbT4KKyAgICAuZ2l0aWdub3JlOiBJZ25vcmUgbW9yZSBnZW5lcmF0ZWQgZmlsZXMKKyAgICAKKyAgICBUaGUgYnVpbGQgcHJvY2VzcyBnZW5lcmF0ZXMgZG9jL2xpYmZmaS5pbmZvIGFuZCBmZmljb25maWcuaC5pbiwgc28gYWRkCisgICAgdGhlbSB0byAuZ2l0aWdub3JlLgogCi0gICAgICAgICogdGVzdHN1aXRlL2xpYi9saWJmZmkuZXhwOiBBZGQgc3VwcG9ydCBmb3IgYWFyY2g2NC4KLSAgICAgICAgKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3N0cnVjdF92YTEuYzogTmV3LgotICAgICAgICAqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWNoYXJfdmEuYzogTGlrZXdpc2UuCi0gICAgICAgICogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191aW50X3ZhLmM6IExpa2V3aXNlLgotICAgICAgICAqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWxvbmdfdmEuYzogTGlrZXdpc2UuCi0gICAgICAgICogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191c2hvcnRfdmEuYzogTGlrZXdpc2UuCi0gICAgICAgICogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QxMS5jOiBMaWtld2lzZS4KLSAgICAgICAgKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvdW5pbml0aWFsaXplZC5jOiBMaWtld2lzZS4KLSAgICAgICAgKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvdmFfMS5jOiBMaWtld2lzZS4KLSAgICAgICAgKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvdmFfc3RydWN0MS5jOiBMaWtld2lzZS4KLSAgICAgICAgKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvdmFfc3RydWN0Mi5jOiBMaWtld2lzZS4KLSAgICAgICAgKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvdmFfc3RydWN0My5jOiBMaWtld2lzZS4KK2NvbW1pdCBiYWQ4OTQ4MzQ2ZTliODgxMzAyM2EwY2M3OGEzYjZlYjhkOWMxNGM2CitBdXRob3I6IEpvc2ggVHJpcGxldHQgPGpvc2hAam9zaHRyaXBsZXR0Lm9yZz4KK0RhdGU6ICAgU3VuIE1hciAxNiAxNToxNjoxOCAyMDE0IC0wNzAwCiAKLTIwMTItMTAtMTIgIFdhbHRlciBMZWUgIDx3YWx0QHRpbGVyYS5jb20+CisgICAgdGVzdHN1aXRlOiBJbnRyb2R1Y2UgYSBfX1NURENBTExfXyBjb21waWxlci1zcGVjaWZpYyBtYWNybworICAgIAorICAgIFNldmVyYWwgdGVzdHMgd2FudCB0byB1c2Ugc3RkY2FsbCwgd2hpY2ggZGlmZmVycyBpbiBzeW50YXggYnkgY29tcGlsZXIsCisgICAgc28gaW50cm9kdWNlIGEgbWFjcm8gZm9yIGl0IGluIGZmaXRlc3QuaC4KIAotICAgICAgICAqIE1ha2VmaWxlLmFtOiBBZGQgVElMRS1HeC9USUxFUHJvIHN1cHBvcnQuCi0gICAgICAgICogY29uZmlndXJlLmFjOiBMaWtld2lzZS4KLSAgICAgICAgKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KLSAgICAgICAgKiBjb25maWd1cmU6IExpa2V3aXNlLgotICAgICAgICAqIHNyYy9wcmVwX2NpZi5jIChmZmlfcHJlcF9jaWZfY29yZSk6IEhhbmRsZSBUSUxFLUd4L1RJTEVQcm8uCi0gICAgICAgICogc3JjL3RpbGU6IE5ldyBkaXJlY3RvcnkuCi0gICAgICAgICogc3JjL3RpbGUvZmZpLmM6IE5ldyBmaWxlLgotICAgICAgICAqIHNyYy90aWxlL2ZmaXRhcmdldC5oOiBEaXR0by4KLSAgICAgICAgKiBzcmMvdGlsZS90aWxlLlM6IERpdHRvLgorY29tbWl0IDk4YTc5M2ZhMzZhNGFiM2JhMjRkMDU5Y2I4MGEyODkxY2RiOTQwZTEKK0F1dGhvcjogSm9zaCBUcmlwbGV0dCA8am9zaEBqb3NodHJpcGxldHQub3JnPgorRGF0ZTogICBTdW4gTWFyIDE2IDE1OjIwOjM2IDIwMTQgLTA3MDAKIAotMjAxMi0xMC0xMiAgTWF0dGhpYXMgS2xvc2UgIDxkb2tvQHVidW50dS5jb20+CisgICAgdGVzdHN1aXRlOiBDb21tb24gdXAgdGhlIGlmZGVmIGJsb2NrcyBmb3IgY29tcGlsZXItc3BlY2lmaWMgbWFjcm9zCiAKLQkqIGdlbmVyYXRlLW9zeC1zb3VyY2UtYW5kLWhlYWRlcnMucHk6IE5vcm1hbGl6ZSB3aGl0ZXNwYWNlLgorY29tbWl0IGQ5NDhkMGE3MjljOTM0YjAyMjQ3NDkzMzhhM2JhMGEyYzhmNTFjNDUKK01lcmdlOiBiNjFiNDcyIGE4NmJkMzEKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFN1biBNYXIgMTYgMTA6NTM6NDggMjAxNCAtMDQwMAogCi0yMDEyLTA5LTE0ICBEYXZpZCBFZGVsc29obiAgPGRqZS5nY2NAZ21haWwuY29tPgorICAgIE1lcmdlIHB1bGwgcmVxdWVzdCAjOTggZnJvbSBqb3NodHJpcGxldHQvdW5jb25maWd1cmUuaG9zdAorICAgIAorICAgIE1lcmdlIGNvbmZpZ3VyZS5ob3N0IGludG8gY29uZmlndXJlLmFjCiAKLQkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZWQuCitjb21taXQgYTg2YmQzMThlMjQyNGQ4NzlkNzg0ZWU3YjI5ZDY1MzZkN2ExN2MxOAorQXV0aG9yOiBKb3NoIFRyaXBsZXR0IDxqb3NoQGpvc2h0cmlwbGV0dC5vcmc+CitEYXRlOiAgIFN1biBNYXIgMTYgMDY6NTg6NTkgMjAxNCAtMDcwMAogCi0yMDEyLTA4LTI2ICBBbmRyZXcgUGluc2tpICA8YXBpbnNraUBjYXZpdW0uY29tPgorICAgIE1lcmdlIGNvbmZpZ3VyZS5ob3N0IGludG8gY29uZmlndXJlLmFjCisgICAgCisgICAgY29uZmlndXJlLmhvc3Qgb25seSBoYXMgYSBzaW5nbGUgZW50cnksIGFuZCBzaG93cyBubyBzaWducyBvZiBuZWVkaW5nCisgICAgbW9yZSBhZGRlZC4KIAotCVBSIGxpYmZmaS81MzAxNAotCSogc3JjL21pcHMvZmZpLmMgKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKTogQWxsb3cgbjMyIHdpdGggc29mdC1mbG9hdCBhbmQgbjY0IHdpdGgKLQlzb2Z0LWZsb2F0LgorY29tbWl0IGI2MWI0NzJiZDA2NDcwMDZkNjY4NTIzODcyMTAwMjAxN2YxZDExOWMKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFN1biBNYXIgMTYgMDk6NDU6NTUgMjAxNCAtMDQwMAogCi0yMDEyLTA4LTA4ICBVcm9zIEJpemphayAgPHViaXpqYWtAZ21haWwuY29tPgorICAgIFVwZGF0ZSB2ZXJzaW9uIHRvIDMuMS1yYzAuICBDbGVhbiB1cCBSRUFETUUuCiAKLQkqIHNyYy9zMzkwL2ZmaS5jIChmZmlfcHJlcF9jbG9zdXJlX2xvYyk6IERvbid0IEFTU0VSVCBBQkkgdGVzdCwKLQlqdXN0IHJldHVybiBGRklfQkFEX0FCSSB3aGVuIHRoaW5ncyBhcmUgd3JvbmcuCitjb21taXQgN2E2NGU3ZGJiYTU0ZTZlOWY2OTk1NGFkZmI5NDNiZTE4NTZmZjkyOAorTWVyZ2U6IDExYTVjNWMgZWVmMmUwMgorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU3VuIE1hciAxNiAwOTozOTowOCAyMDE0IC0wNDAwCiAKLTIwMTItMDctMTggIEguSi4gTHUgIDxob25naml1Lmx1QGludGVsLmNvbT4KKyAgICBNZXJnZSBwdWxsIHJlcXVlc3QgIzk3IGZyb20gam9zaHRyaXBsZXR0L3JlbW92ZS1tb3JlLWdlbmVyYXRlZC1maWxlcworICAgIAorICAgIFJlbW92ZSBtb3JlIGdlbmVyYXRlZCBmaWxlcwogCi0JUFIgbGliZmZpLzUzOTgyCi0JUFIgbGliZmZpLzUzOTczCi0JKiBzcmMveDg2L2ZmaXRhcmdldC5oOiBDaGVjayBfX0lMUDMyX18gaW5zdGVhZCBvZiBfX0xQNjRfXyBmb3IgeDMyLgotCShGRklfU0laRU9GX0pBVkFfUkFXKTogRGVmaW5lZCB0byA0IGZvciB4MzIuCitjb21taXQgMTFhNWM1YzM5ZjU4NjEwMTFmNmM1ZGRmNzk1ZGEzYTMyYjVmMDA4MgorTWVyZ2U6IDlhNjJhMjEgMWM2OGMwNworQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU3VuIE1hciAxNiAwOTozODo0NyAyMDE0IC0wNDAwCiAKLTIwMTItMDUtMTYgIEguSi4gTHUgIDxob25naml1Lmx1QGludGVsLmNvbT4KKyAgICBNZXJnZSBwdWxsIHJlcXVlc3QgIzk2IGZyb20gam9zaHRyaXBsZXR0L3Nhd2luZy1jaGFuZ2Vsb2dzCisgICAgCisgICAgR2VuZXJhdGUgQ2hhbmdlTG9nIGZyb20gZ2l0IGluIG1ha2UgZGlzdDsgcmVtb3ZlIGl0IGZyb20gdmVyc2lvbiBjb250cm9sCiAKLQkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZWQuCitjb21taXQgZWVmMmUwMmExM2Q3ZDFjODE0NWQ0N2E2NDQ2N2Y2NTQ0MDZhMzU0OAorQXV0aG9yOiBKb3NoIFRyaXBsZXR0IDxqb3NoQGpvc2h0cmlwbGV0dC5vcmc+CitEYXRlOiAgIFN1biBNYXIgMTYgMDY6MjY6MDMgMjAxNCAtMDcwMAogCi0yMDEyLTA1LTA1ICBOaWNvbGFzIExlbG9uZworICAgIGRvYzogUmVtb3ZlIGF1dG9nZW5lcmF0ZWQgaW5mbyBmaWxlIGFuZCBzdGFtcAogCi0JKiBsaWJmZmkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogRml4ZXMuCi0JKiBSRUFETUU6IFVwZGF0ZSBmb3IgaU9TIGJ1aWxkcy4KK2NvbW1pdCA5ZmI0MDNkM2M1ZDk2NDNlMGY1NjFjYWI2ZDRhMDdiMWU1NDkwN2ZmCitBdXRob3I6IEpvc2ggVHJpcGxldHQgPGpvc2hAam9zaHRyaXBsZXR0Lm9yZz4KK0RhdGU6ICAgU3VuIE1hciAxNiAwNjoyNTo1MiAyMDE0IC0wNzAwCiAKLTIwMTItMDQtMjMgIEFsZXhhbmRyZSBLZXVuZWNrZSBJLiBkZSBNZW5kb25jYSA8YWxleGFuZHJlLmtldW5lY2tlQGdtYWlsLmNvbT4KKyAgICBmZmljb25maWcuaC5pbjogUmVtb3ZlLCBjb25maWd1cmUgZ2VuZXJhdGVzIGl0CiAKLQkqIGNvbmZpZ3VyZS5hYzogQWRkIEJsYWNrZmluL3N5c3Ygc3VwcG9ydAotCSogTWFrZWZpbGUuYW06IEFkZCBCbGFja2Zpbi9zeXN2IHN1cHBvcnQKLQkqIHNyYy9iZmluL2ZmaS5jOiAgQWRkIEJsYWNrZmluL3N5c3Ygc3VwcG9ydAotCSogc3JjL2JmaW4vZmZpdGFyZ2V0Lmg6IEFkZCBCbGFja2Zpbi9zeXN2IHN1cHBvcnQKK2NvbW1pdCAxYzY4YzA3MjE3ZmRhNzhhNzc5Nzc4YzE0ODBmZWRlZjdhNThkNWI0CitBdXRob3I6IEpvc2ggVHJpcGxldHQgPGpvc2hAam9zaHRyaXBsZXR0Lm9yZz4KK0RhdGU6ICAgU3VuIE1hciAxNiAwNjoxMTo1OCAyMDE0IC0wNzAwCiAKLTIwMTItMDQtMTEgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KKyAgICBHZW5lcmF0ZSBDaGFuZ2VMb2cgZnJvbSBnaXQgaW4gbWFrZSBkaXN0CisgICAgCisgICAgQXJjaGl2ZSB0aGUgZXhpc3RpbmcgQ2hhbmdlTG9nIHRvIENoYW5nZUxvZy5saWJmZmktMy4xCiAKLQkqIE1ha2VmaWxlLmFtIChFWFRSQV9ESVNUKTogQWRkIG5ldyBzY3JpcHQuCi0JKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KK2NvbW1pdCBjNjVlZDU1ZTY1NTcxMWUwMDgyODJlZGJkZDgyY2U5NWQwMDhiNGY2CitBdXRob3I6IEpvc2ggVHJpcGxldHQgPGpvc2hAam9zaHRyaXBsZXR0Lm9yZz4KK0RhdGU6ICAgU3VuIE1hciAxNiAwNTo1MjowMCAyMDE0IC0wNzAwCiAKLTIwMTItMDQtMTEgIFphY2hhcnkgV2FsZG93c2tpICA8endhbGRvd3NraUBnbWFpbC5jb20+CisgICAgQ2hhbmdlTG9nLnYxOiBGaXggdHlwbyBpbiBleHBsYW5hdG9yeSBoZWFkZXIuCiAKLQkqIGdlbmVyYXRlLWlvcy1zb3VyY2UtYW5kLWhlYWRlcnMucHksCi0JbGliZmZpLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IFN1cHBvcnQgYSBNYWMgc3RhdGljIGxpYnJhcnkgdmlhCi0JWGNvZGUuIFNldCBpT1MgY29tcGF0aWJpbGl0eSB0byA0LjAuICBNb3ZlIGlPUyB0cmFtcG9saW5lCi0JZ2VuZXJhdGlvbiBpbnRvIGFuIFhjb2RlICJydW4gc2NyaXB0IiBwaGFzZS4gIEluY2x1ZGUgYm90aCBhcwotCVhjb2RlIGJ1aWxkIHNjcmlwdHMuIERvbid0IGFsd2F5cyByZWdlbmVyYXRlIGNvbmZpZyBmaWxlcy4KK2NvbW1pdCA5YTYyYTIxZjVjM2E4ZTFkYTQ2MzIyOWYzMTcwYzhhYjMwMzFkOTIwCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTdW4gTWFyIDE2IDA5OjAzOjU3IDIwMTQgLTA0MDAKIAotMjAxMi0wNC0xMCAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQG1veGllbG9naWMuY29tPgorICAgIEFkZCBtaXNzaW5nIENoYW5nZUxvZyBlbnRyeS4gIENsZWFuIHVwIHNvbWUgZW50cmllcy4KIAotCSogc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jIChmZmlfcHJlcF9hcmdzKTogQWRkIG1pc3Npbmcgc2VtaWNvbG9uLgorY29tbWl0IDliYzcwNGM1OGNiN2EwNDlkODY3ODM3ZTNhMTFlMmUzMTg4NmVjNjYKK01lcmdlOiA2OTQ0NDdhIGU4OTJlNTgKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFN1biBNYXIgMTYgMDg6NDE6MDAgMjAxNCAtMDQwMAogCi0yMDEyLTA0LTA2ICBBbnRob255IEdyZWVuICA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CisgICAgTWVyZ2UgcHVsbCByZXF1ZXN0ICM5NSBmcm9tIGpvc2h0cmlwbGV0dC9uZXdzCisgICAgCisgICAgUkVBRE1FOiBVcGRhdGUgbmV3cyBmb3IgMy4wLjE0CiAKLQkqIE1ha2VmaWxlLmFtIChFWFRSQV9ESVNUKTogQWRkIG5ldyBpT1MveGNvZGUgZmlsZXMuCi0JKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KK2NvbW1pdCBlODkyZTU4MWQxODM4YTA2YzE4YzdlY2Q1MGViZDc5OTE1Y2ZmOTJiCitBdXRob3I6IEpvc2ggVHJpcGxldHQgPGpvc2hAam9zaHRyaXBsZXR0Lm9yZz4KK0RhdGU6ICAgU3VuIE1hciAxNiAwNTozODoyNCAyMDE0IC0wNzAwCiAKLTIwMTItMDQtMDYgIE1pa2UgTGV3aXMgIDxtaWtlbGlrZXNwaWVAZ21haWwuY29tPgorICAgIFJFQURNRTogVXBkYXRlIG5ld3MgZm9yIDMuMC4xNAogCi0JKiBnZW5lcmF0ZS1pb3Mtc291cmNlLWFuZC1oZWFkZXJzLnB5OiBOZXcgZmlsZS4KLQkqIGxpYmZmaS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBOZXcgZmlsZS4KLQkqIFJFQURNRTogVXBkYXRlIGluc3RydWN0aW9ucyBvbiBidWlsZGluZyBpT1MgYmluYXJ5LgotCSogYnVpbGQtaW9zLnNoOiBEZWxldGUuCitjb21taXQgNjk0NDQ3YWEyOWRlYWRkNTcxZWZiNGU5YTI2ZWUzZjY4ZWRlMTQ5MworTWVyZ2U6IGZkYzg3ZjMgNDVhNmMyMQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU3VuIE1hciAxNiAwODozMjowNSAyMDE0IC0wNDAwCiAKLTIwMTItMDQtMDYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KKyAgICBNZXJnZSBwdWxsIHJlcXVlc3QgIzkzIGZyb20gam9zaHRyaXBsZXR0L3RyYXZpcy1kaXN0CisgICAgCisgICAgTWFrZSBUcmF2aXMgY2hlY2sgIm1ha2UgZGlzdCIKIAotCSogc3JjL3g4Ni9mZmk2NC5jIChVSU5UMTI4KTogRGVmaW5lIGRpZmZlcmVudGx5IGZvciBJbnRlbCBhbmQgR05VCi0JY29tcGlsZXJzLCB0aGVuIHVzZSBpdC4KK2NvbW1pdCA0NWE2YzIxZWZhOTQ0YjUyMDg0MmU2MzFkYzU0OTE5YjA0ODg0NzQ0CitBdXRob3I6IEpvc2ggVHJpcGxldHQgPGpvc2hAam9zaHRyaXBsZXR0Lm9yZz4KK0RhdGU6ICAgU3VuIE1hciAxNiAwNToyOTowOCAyMDE0IC0wNzAwCiAKLTIwMTItMDQtMDYgIEguSi4gTHUgIDxob25naml1Lmx1QGludGVsLmNvbT4KKyAgICAudHJhdmlzLnltbDogVGVzdCAibWFrZSBkaXN0IiB0b28uCiAKLQkqIG00L2xpYnRvb2wubTQgKF9MVF9FTkFCTEVfTE9DSyk6IFN1cHBvcnQgeDMyLgorY29tbWl0IGZkYzg3ZjNiMmVhMzdiNThhNGE5YWU2YzM1MDgzZjU0NDkwOWZlM2MKK01lcmdlOiA3NDEyYjgzIGUxOTExZjcKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFN1biBNYXIgMTYgMDg6MDU6NTEgMjAxNCAtMDQwMAogCi0yMDEyLTA0LTA2ICBBbnRob255IEdyZWVuICA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CisgICAgTWVyZ2UgcHVsbCByZXF1ZXN0ICM4NSBmcm9tIGpvc2h0cmlwbGV0dC9zdGRjYWxsCisgICAgCisgICAgc3RkY2FsbCBzdXBwb3J0IG9uIExpbnV4CiAKLQkqIHRlc3RzdWl0ZS9NYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IEFkZCBtaXNzaW5nIHRlc3QgY2FzZXMuCi0JKiB0ZXN0c3VpdGUvTWFrZWZpbGUuaW46IFJlYnVpbHQuCitjb21taXQgZTE5MTFmNzhkZjExM2NhNTg3MzhiNjYwODlhMDcwZDRjZjc0N2RlNworQXV0aG9yOiBKb3NoIFRyaXBsZXR0IDxqb3NoQGpvc2h0cmlwbGV0dC5vcmc+CitEYXRlOiAgIFN1biBNYXIgMTYgMDM6MjU6NTMgMjAxNCAtMDcwMAogCi0yMDEyLTA0LTA1ICBaYWNoYXJ5IFdhbGRvd3NraSAgPHp3YWxkb3dza2lAZ21haWwuY29tPgorICAgIEFkZCBzdXBwb3J0IGZvciBzdGRjYWxsLCB0aGlzY2FsbCwgYW5kIGZhc3RjYWxsIG9uIG5vbi1XaW5kb3dzIHg4Ni0zMgorICAgIAorICAgIExpbnV4IHN1cHBvcnRzIHRoZSBzdGRjYWxsIGNhbGxpbmcgY29udmVudGlvbiwgZWl0aGVyIHZpYSBmdW5jdGlvbnMKKyAgICBleHBsaWNpdGx5IGRlY2xhcmVkIHdpdGggdGhlIHN0ZGNhbGwgYXR0cmlidXRlLCBvciB2aWEgY29kZSBjb21waWxlZAorICAgIHdpdGggLW1ydGQgd2hpY2ggZWZmZWN0aXZlbHkgbWFrZXMgc3RkY2FsbCB0aGUgZGVmYXVsdC4KKyAgICAKKyAgICBUaGlzIGludHJvZHVjZXMgRkZJX1NURENBTEwsIEZGSV9USElTQ0FMTCwgYW5kIEZGSV9GQVNUQ0FMTCBvbgorICAgIG5vbi1XaW5kb3dzIHg4Ni0zMiBwbGF0Zm9ybXMsIGFzIG5vbi1kZWZhdWx0IGNhbGxpbmcgY29udmVudGlvbnMuCiAKLQkqIGluY2x1ZGUvZmZpLmguaW46IEFkZCBtaXNzaW5nIHRyYW1wb2xpbmUgdGFibGUgZmllbGRzLgotCSogc3JjL2FybS9zeXN2LlM6IEZpeCBFTlRSWSBkZWZpbml0aW9uLCBhbmQgd3JhcCBzeW1ib2wgcmVmZXJlbmNlcwotCWluIENOQU1FLgotCSogc3JjL3g4Ni9mZmkuYzogV3JhcCBXaW5kb3dzIHNwZWNpZmljIGNvZGUgaW4gaWZkZWZzLgorY29tbWl0IDc0MTJiODM4ZDU0M2FhZTRmYTkyNTg2MmJkNTcwMmQzZGFjYmMyOWEKK01lcmdlOiBjMGNjNWZkIDk1MzFkMDUKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFN1biBNYXIgMTYgMDc6NTg6MTYgMjAxNCAtMDQwMAogCi0yMDEyLTA0LTAyICBQZXRlciBCZXJnbmVyICA8YmVyZ25lckB2bmV0LmlibS5jb20+CisgICAgTWVyZ2UgcHVsbCByZXF1ZXN0ICM5MCBmcm9tIGpvc2h0cmlwbGV0dC93aW4zMi11bmlmZGVmCisgICAgCisgICAgcHJlcF9jaWYuYzogUmVtb3ZlIHVubmVjZXNzYXJ5IGlmZGVmIGZvciBYODZfV0lOMzIKIAotCSogc3JjL3Bvd2VycGMvZmZpLmMgKGZmaV9wcmVwX2FyZ3NfU1lTVik6IERlY2xhcmUgZG91YmxlX3RtcC4KLQlTaWxlbmNlIGNhc3RpbmcgcG9pbnRlciB0byBpbnRlZ2VyIG9mIGRpZmZlcmVudCBzaXplIHdhcm5pbmcuCi0JRGVsZXRlIGdvdG8gdG8gcHJldmlvdXNseSBkZWxldGVkIGxhYmVsLgotCShmZmlfY2FsbCk6IFNpbGVuY2UgcG9zc2libHkgdW5kZWZpbmVkIHdhcm5pbmcuCi0JKGZmaV9jbG9zdXJlX2hlbHBlcl9TWVNWKTogRGVjbGFyZSB2YXJpYWJsZSB0eXBlLgorY29tbWl0IGMwY2M1ZmRhYTIzN2I2N2U4NmYyMmQyZjZlMTNmM2I0MmQ5YWFlMzMKK01lcmdlOiA5OGI1Mjk2IGIzYTVkYTAKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFN1biBNYXIgMTYgMDc6NTc6NTkgMjAxNCAtMDQwMAogCi0yMDEyLTA0LTAyICBQZXRlciBSb3NpbiAgPHBlZGFAbHlzYXRvci5saXUuc2U+CisgICAgTWVyZ2UgcHVsbCByZXF1ZXN0ICM4OSBmcm9tIGpvc2h0cmlwbGV0dC90cmF2aXMzMgorICAgIAorICAgIC50cmF2aXMueW1sOiBUZXN0IG9uIGJvdGggMzItYml0IGFuZCA2NC1iaXQKIAotCSogc3JjL3g4Ni93aW4zMi5TIChmZmlfY2FsbF93aW4zMik6IFNpZ24vemVybyBleHRlbmQgdGhlIHJldHVybgotCXZhbHVlIGluIHRoZSBJbnRlbCB2ZXJzaW9uIGFzIGlzIGFscmVhZHkgZG9uZSBmb3IgdGhlIEFUJlQgdmVyc2lvbi4KLQkoZmZpX2Nsb3N1cmVfU1lTVik6IExpa2V3aXNlLgotCShmZmlfY2xvc3VyZV9yYXdfU1lTVik6IExpa2V3aXNlLgotCShmZmlfY2xvc3VyZV9TVERDQUxMKTogTGlrZXdpc2UuCitjb21taXQgOTUzMWQwNWY2NGMyYTY3NGUwMTk3MTU4ZmZhZDY4ZDY5ZjE3N2JkMAorQXV0aG9yOiBKb3NoIFRyaXBsZXR0IDxqb3NoQGpvc2h0cmlwbGV0dC5vcmc+CitEYXRlOiAgIFN1biBNYXIgMTYgMDE6NTA6MDIgMjAxNCAtMDcwMAogCi0yMDEyLTAzLTI5ICBQZXRlciBSb3NpbiAgPHBlZGFAbHlzYXRvci5saXUuc2U+CisgICAgcHJlcF9jaWYuYzogUmVtb3ZlIHVubmVjZXNzYXJ5IGlmZGVmIGZvciBYODZfV0lOMzIKKyAgICAKKyAgICBmZmlfcHJlcF9jaWZfY29yZSBoYWQgYSBzcGVjaWFsIGNhc2UgZm9yIFg4Nl9XSU4zMiwgY2hlY2tpbmcgZm9yCisgICAgRkZJX1RISVNDQUxMIGluIGFkZGl0aW9uIHRvIHRoZSBGRklfRklSU1RfQUJJLXRvLUZGSV9MQVNUX0FCSSByYW5nZQorICAgIGJlZm9yZSByZXR1cm5pbmcgRkZJX0JBRF9BQkkuICBIb3dldmVyLCBvbiBYODZfV0lOMzIsIEZGSV9USElTQ0FMTAorICAgIGFscmVhZHkgZmFsbHMgaW4gdGhhdCByYW5nZSwgbWFraW5nIHRoZSBzcGVjaWFsIGNhc2UgdW5uZWNlc3NhcnkuCisgICAgUmVtb3ZlIGl0LgogCi0JKiBzcmMveDg2L3dpbjMyLlMgKGZmaV9jbG9zdXJlX3Jhd19USElTQ0FMTCk6IFVuaWZ5IHRoZSBmcmFtZQotCWdlbmVyYXRpb24sIGZpeCB0aGUgRU5EUCBsYWJlbCBhbmQgcmVtb3ZlIHRoZSBzdXJwbHVzIHRoaXJkIGFyZwotCWZyb20gdGhlICdsZWEnIGluc24uCitjb21taXQgYjNhNWRhMDY4YWJkMmYyOTgzZDllNjdhZGJmNDFiMGUwZjM0ZTM3ZgorQXV0aG9yOiBKb3NoIFRyaXBsZXR0IDxqb3NoQGpvc2h0cmlwbGV0dC5vcmc+CitEYXRlOiAgIFNhdCBNYXIgMTUgMjM6Mjc6NTYgMjAxNCAtMDcwMAogCi0yMDEyLTAzLTI5ICBQZXRlciBSb3NpbiAgPHBlZGFAbHlzYXRvci5saXUuc2U+CisgICAgLnRyYXZpcy55bWw6IFRlc3Qgb24gYm90aCAzMi1iaXQgYW5kIDY0LWJpdAogCi0JKiBzcmMveDg2L3dpbjMyLlMgKGZmaV9jbG9zdXJlX3Jhd19TWVNWKTogTWFrZSB0aGUgJ3N0dWJyYXcnIGxhYmVsCi0JdmlzaWJsZSBvdXRzaWRlIHRoZSBQUk9DLCBzbyB0aGF0IGZmaV9jbG9zdXJlX3Jhd19USElTQ0FMTCBjYW4gc2VlCi0JaXQuICBBbHNvIGluc3RydWN0IHRoZSBhc3NlbWJsZXIgdG8gYWRkIGEgZnJhbWUgdG8gdGhlIGZ1bmN0aW9uLgorY29tbWl0IDk4YjUyOTYwNDg1YTI2MTM5OWYwODE5MTVmMzYwNjNkZTM4NTRhNWYKK01lcmdlOiAxMzRjZTRjIGY2ZGQxODQKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFN1biBNYXIgMTYgMDc6NTE6MzMgMjAxNCAtMDQwMAogCi0yMDEyLTAzLTIzICBQZXRlciBSb3NpbiAgPHBlZGFAbHlzYXRvci5saXUuc2U+CisgICAgTWVyZ2UgcHVsbCByZXF1ZXN0ICM5NCBmcm9tIGpvc2h0cmlwbGV0dC9lc3AtZXh0cmEtc3RhY2tlcnktcGVyY2VwdGlvbgorICAgIAorICAgIENoYW5nZUxvZzogRG9jdW1lbnQgdGVzdHN1aXRlIGNoYW5nZXMgdG8gcmVtb3ZlIGZyYWdpbGUgc3RhY2sgcG9pbnRlciBjaGVja3MKIAotCSogTWFrZWZpbGUuYW0gKEFNX0NQUEZMQUdTKTogQWRkIC1ERkZJX0JVSUxESU5HLgotCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCi0JKiBpbmNsdWRlL2ZmaS5oLmluIFtNU1ZDXTogQWRkIF9fZGVjbHNwZWMoZGxsaW1wb3J0KSBkZWNvcmF0aW9ucwotCXRvIGFsbCBkYXRhIGV4cG9ydHMsIHdoZW4gY29tcGlsaW5nIGxpYmZmaSBjbGllbnRzIHVzaW5nIE1TVkMuCitjb21taXQgZjZkZDE4NDU0MzRkZDUzZTIyMTI5YmVjZGZhMDkyYzA4MmRmMzA3YworQXV0aG9yOiBKb3NoIFRyaXBsZXR0IDxqb3NoQGpvc2h0cmlwbGV0dC5vcmc+CitEYXRlOiAgIFN1biBNYXIgMTYgMDQ6NDk6MzYgMjAxNCAtMDcwMAogCi0yMDEyLTAzLTI5ICBQZXRlciBSb3NpbiAgPHBlZGFAbHlzYXRvci5saXUuc2U+CisgICAgQ2hhbmdlTG9nOiBEb2N1bWVudCB0ZXN0c3VpdGUgY2hhbmdlcyB0byByZW1vdmUgZnJhZ2lsZSBzdGFjayBwb2ludGVyIGNoZWNrcwogCi0JKiBzcmMveDg2L2ZmaXRhcmdldC5oIChmZmlfYWJpKTogQWRkIG5ldyBBQkkgRkZJX01TX0NERUNMIGFuZAotCW1ha2UgaXQgdGhlIGRlZmF1bHQgZm9yIE1TVkMuCi0JKEZGSV9UWVBFX01TX1NUUlVDVCk6IE5ldyBzdHJ1Y3R1cmUgcmV0dXJuIGNvbnZlbnRpb24uCi0JKiBzcmMveDg2L2ZmaS5jIChmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IFR3ZWFrIHRoZSBzdHJ1Y3R1cmUKLQlyZXR1cm4gY29udmVudGlvbiBmb3IgRkZJX01TX0NERUNMIHRvIGJlIEZGSV9UWVBFX01TX1NUUlVDVAotCWluc3RlYWQgb2YgYW4gb3JkaW5hcnkgRkZJX1RZUEVfU1RSVUNULgotCShmZmlfcHJlcF9hcmdzKTogVHJlYXQgRkZJX1RZUEVfTVNfU1RSVUNUIGFzIEZGSV9UWVBFX1NUUlVDVC4KLQkoZmZpX2NhbGwpOiBMaWtld2lzZS4KLQkoZmZpX3ByZXBfaW5jb21pbmdfYXJnc19TWVNWKTogTGlrZXdpc2UuCi0JKGZmaV9yYXdfY2FsbCk6IExpa2V3aXNlLgotCShmZmlfcHJlcF9jbG9zdXJlX2xvYyk6IFRyZWF0IEZGSV9NU19DREVDTCBhcyBGRklfU1lTVi4KLQkqIHNyYy94ODYvd2luMzIuUyAoZmZpX2Nsb3N1cmVfU1lTVik6IEZvciBGRklfVFlQRV9NU19TVFJVQ1QsCi0JcmV0dXJuIGEgcG9pbnRlciB0byB0aGUgcmVzdWx0IHN0cnVjdHVyZSBpbiBlYXggYW5kIGRvbid0IHBvcAotCXRoYXQgcG9pbnRlciBmcm9tIHRoZSBzdGFjaywgdGhlIGNhbGxlciB0YWtlcyBjYXJlIG9mIGl0LgotCShmZmlfY2FsbF93aW4zMik6IFRyZWF0IEZGSV9UWVBFX01TX1NUUlVDVCBhcyBGRklfVFlQRV9TVFJVQ1QuCi0JKGZmaV9jbG9zdXJlX3Jhd19TWVNWKTogTGlrZXdpc2UuCitjb21taXQgMTM0Y2U0YzAyNjZiZjk5NGYwNzUxOGZjNTM0ZGU1M2YxZDNjOGRlOAorTWVyZ2U6IDI2ODBlOWUgOWMyNzkzMgorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU3VuIE1hciAxNiAwNzo0NzoxNyAyMDE0IC0wNDAwCiAKLTIwMTItMDMtMjIgIFBldGVyIFJvc2luICA8cGVkYUBseXNhdG9yLmxpdS5zZT4KKyAgICBNZXJnZSBwdWxsIHJlcXVlc3QgIzkxIGZyb20gam9zaHRyaXBsZXR0L2VzcC1leHRyYS1zdGFja2VyeS1wZXJjZXB0aW9uCisgICAgCisgICAgdGVzdHN1aXRlOiBSZW1vdmUgZnJhZ2lsZSBzdGFjayBwb2ludGVyIGNoZWNrcwogCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9zdGRjYWxsLmMgW01TVkNdOiBBZGQgaW5saW5lCi0JYXNzZW1ibHkgdmVyc2lvbiB3aXRoIEludGVsIHN5bnRheC4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX3RoaXNjYWxsLmMgW01TVkNdOiBMaWtld2lzZS4KK2NvbW1pdCA5YzI3OTMyOGVlMTJmYzg2OWFkZmY2M2NhODFmMTIzMDk3N2JkNDJiCitBdXRob3I6IEpvc2ggVHJpcGxldHQgPGpvc2hAam9zaHRyaXBsZXR0Lm9yZz4KK0RhdGU6ICAgU3VuIE1hciAxNiAwMjozMToxOSAyMDE0IC0wNzAwCiAKLTIwMTItMDMtMjMgIFBldGVyIFJvc2luICA8cGVkYUBseXNhdG9yLmxpdS5zZT4KKyAgICB0ZXN0c3VpdGU6IFJlbW92ZSBmcmFnaWxlIHN0YWNrIHBvaW50ZXIgY2hlY2tzCisgICAgCisgICAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfc3RkY2FsbC5jIGFuZAorICAgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX3RoaXNjYWxsLmMgaW5jbHVkZSBpbmxpbmUgYXNzZW1ibHkgdG8gc2F2ZQorICAgIHRoZSBzdGFjayBwb2ludGVyIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIGNhbGwsIGFuZCBjb21wYXJlIHRoZSB2YWx1ZXMuCisgICAgSG93ZXZlciwgY29tcGlsZXJzIGNhbiBhbmQgZG8gbGVhdmUgdGhlIHN0YWNrIGluIGRpZmZlcmVudCBzdGF0ZXMgZm9yCisgICAgdGhlc2UgdHdvIHBpZWNlcyBvZiBpbmxpbmUgYXNzZW1ibHksIHN1Y2ggYXMgYnkgc2F2aW5nIGEgdGVtcG9yYXJ5IHZhbHVlCisgICAgb24gdGhlIHN0YWNrIGFjcm9zcyB0aGUgY2FsbDsgb2JzZXJ2ZWQgd2l0aCBnY2MgLU9zLCBhbmQgdmVyaWZpZWQgYXMKKyAgICBzcHVyaW91cyB0aHJvdWdoIGNhcmVmdWwgaW5zcGVjdGlvbiBvZiBkaXNhc3NlbWJseS4KIAotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2ZmaXRlc3QuaDogUHJvdmlkZSBhYnN0cmF0aW9uIG9mCi0JX19hdHRyaWJ1dGVfXygoZmFzdGNhbGwpKSBpbiB0aGUgZm9ybSBvZiBhIF9fRkFTVENBTExfXwotCWRlZmluZS4gIERlZmluZSBpdCB0byBfX2Zhc3RjYWxsIGZvciBNU1ZDLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zhc3R0aGlzMV93aW4zMi5jOiBVc2UgdGhlIGFib3ZlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zhc3R0aGlzMl93aW4zMi5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mYXN0dGhpczNfd2luMzIuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RybGVuMl93aW4zMi5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3QxX3dpbjMyLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDJfd2luMzIuYzogTGlrZXdpc2UuCitjb21taXQgMjY4MGU5ZWE5YjRjODdlYTgwNDJhNjFlNTUxYmQ2Njc0OTNkNGJkMworTWVyZ2U6IDA3MWVhYjMgODJmOGNiMgorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU3VuIE1hciAxNiAwNzo0NDowOCAyMDE0IC0wNDAwCiAKLTIwMTItMDMtMjIgIFBldGVyIFJvc2luICA8cGVkYUBseXNhdG9yLmxpdS5zZT4KKyAgICBNZXJnZSBwdWxsIHJlcXVlc3QgIzg4IGZyb20gam9zaHRyaXBsZXR0L3N1Y2gtcHJlY2lzaW9uLW1hbnktZmFpbC13b3cKKyAgICAKKyAgICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbWFueS5jOiBBdm9pZCBzcHVyaW91cyBmYWlsdXJlIGR1ZSB0byBleGNlc3MgcHJlY2lzaW9uCiAKLQkqIHNyYy94ODYvd2luMzIuUyBbTVNWQ10gKGZmaV9jbG9zdXJlX1RISVNDQUxMKTogUmVtb3ZlIHRoZSBtYW51YWwKLQlmcmFtZSBvbiBmdW5jdGlvbiBlbnRyeSwgTUFTTSBhZGRzIG9uZSBhdXRvbWF0aWNhbGx5LgorY29tbWl0IDgyZjhjYjI0YTFkOTc2ZGIzNWFlMzFhNGI4NmNlYzg5MjZkYTMyN2QKK0F1dGhvcjogSm9zaCBUcmlwbGV0dCA8am9zaEBqb3NodHJpcGxldHQub3JnPgorRGF0ZTogICBTdW4gTWFyIDE2IDA0OjI3OjMyIDIwMTQgLTA3MDAKIAotMjAxMi0wMy0yMiAgUGV0ZXIgUm9zaW4gIDxwZWRhQGx5c2F0b3IubGl1LnNlPgorICAgIENoYW5nZUxvZzogRG9jdW1lbnQgbWFueS5jIGFuZCBtYW55X3dpbjMyLmMgY2hhbmdlcyB0byBhdm9pZCBzcHVyaW91cyBmYWlsdXJlcwogCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmZpdGVzdC5oIFtNU1ZDXTogQWRkIGtsdWRnZSBmb3IgbWlzc2luZwotCWJpdHMgaW4gdGhlIE1TVkMgaGVhZGVycy4KK2NvbW1pdCA4OGQ1NjJhOGI1OTEyZTk5MzA2MDYzZmUzYmMyODliYWI2Y2E2ZWJlCitBdXRob3I6IEpvc2ggVHJpcGxldHQgPGpvc2hAam9zaHRyaXBsZXR0Lm9yZz4KK0RhdGU6ICAgU2F0IE1hciAxNSAyMjowODoxOSAyMDE0IC0wNzAwCiAKLTIwMTItMDMtMjIgIFBldGVyIFJvc2luICA8cGVkYUBseXNhdG9yLmxpdS5zZT4KKyAgICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbWFueV93aW4zMi5jOiBBdm9pZCBzcHVyaW91cyBmYWlsdXJlIGR1ZSB0byBleGNlc3MgcHJlY2lzaW9uCisgICAgCisgICAgVGhlIHRlc3QgY2FzZSB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbWFueV93aW4zMi5jIGNhbiBzcHVyaW91c2x5IGZhaWwgZHVlCisgICAgdG8gZXhjZXNzIGZsb2F0aW5nLXBvaW50IHByZWNpc2lvbi4gIEluc3RydW1lbnRpbmcgaXQgd2l0aCBzb21lIHByaW50ZgorICAgIGNhbGxzIHNob3dzIGRpZmZlcmVuY2VzIHdlbGwgYWJvdmUgRkxUX0VQU0lMT04uICAoTm90ZSB3aGVuCisgICAgaW5zdHJ1bWVudGluZyBpdCB0aGF0IG11bHRpcGxlIGNvbXB1dGF0aW9ucyBvZiB0aGUgZGlmZmVyZW5jZSwgc3VjaCBhcworICAgIG9uZSBpbiBhIHByaW50IGFuZCBhbm90aGVyIGluIHRoZSBjb25kaXRpb25hbCwgbWF5IHByb2R1Y2UgZGlmZmVyZW50CisgICAgcmVzdWx0cy4pCisgICAgCisgICAgUmF0aGVyIHRoYW4gY29tcGxpY2F0aW5nIHRoZSB0ZXN0IHN1aXRlIHdpdGggYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGZsYWdzCisgICAgdG8gYXZvaWQgZXhjZXNzIHByZWNpc2lvbiwganVzdCBzaW1wbGlmeSB0aGUgZmxvYXRpbmctcG9pbnQgY29tcHV0YXRpb24KKyAgICB0byBhdm9pZCBhIGRlcGVuZGVuY3kgb24gcG90ZW50aWFsIGV4Y2VzcyBwcmVjaXNpb24uCiAKLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTJieXRlLmM6IEFkanVzdCB0byB0aGUgQzg5IHN0eWxlCi0Jd2l0aCBubyBkZWNsYXJhdGlvbnMgYWZ0ZXIgc3RhdGVtZW50cy4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTZieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xOGJ5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE5Ynl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMV8xYnl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjBieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yMGJ5dGUxLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yNGJ5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzJieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zXzFieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zYnl0ZTEuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzNieXRlMi5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNF8xYnl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNGJ5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzVfMV9ieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc181Ynl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNjRieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc182XzFfYnl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNmJ5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzdfMV9ieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc183Ynl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOGJ5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzlieXRlMS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOWJ5dGUyLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9kb3VibGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2Zsb2F0LmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlX3NwbGl0LmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlX3NwbGl0Mi5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fcG9pbnRlci5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDE2LmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50MzIuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQ2NC5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDE2LmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50MzIuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3VpbnQ2NC5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZGJsc19zdHJ1Y3QuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3BvaW50ZXJfc3RhY2suYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZXJyX2JhZF90eXBlZGVmLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2h1Z2Vfc3RydWN0LmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDEuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDEwLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QyLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QzLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q0LmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q1LmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q2LmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q3LmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q4LmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q5LmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X2xhcmdlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X2xhcmdlMi5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9tZWRpdW0uYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbWVkaXVtMi5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3QxLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDFfd2luMzIuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0Mi5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3QyX3dpbjMyLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDMuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0NC5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3Q1LmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDYuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0Ny5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3Q4LmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDkuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvdGVzdGNsb3N1cmUuYzogTGlrZXdpc2UuCitjb21taXQgYzAwYTQ5ZWNkMTY1YjJkMDZjMWM5YjI0OWQyMTJkYzg0M2ZhMTE2ZgorQXV0aG9yOiBKb3NoIFRyaXBsZXR0IDxqb3NoQGpvc2h0cmlwbGV0dC5vcmc+CitEYXRlOiAgIFNhdCBNYXIgMTUgMjI6MDg6MTkgMjAxNCAtMDcwMAogCi0yMDEyLTAzLTIxICBQZXRlciBSb3NpbgkgPHBlZGFAbHlzYXRvci5saXUuc2U+CisgICAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL21hbnkuYzogQXZvaWQgc3B1cmlvdXMgZmFpbHVyZSBkdWUgdG8gZXhjZXNzIHByZWNpc2lvbgorICAgIAorICAgIFRoZSB0ZXN0IGNhc2UgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL21hbnkuYyBjYW4gc3B1cmlvdXNseSBmYWlsIGR1ZSB0bworICAgIGV4Y2VzcyBmbG9hdGluZy1wb2ludCBwcmVjaXNpb24uICBJbnN0cnVtZW50aW5nIGl0IHdpdGggc29tZSBwcmludGYKKyAgICBjYWxscyBzaG93cyBkaWZmZXJlbmNlcyB3ZWxsIGFib3ZlIEZMVF9FUFNJTE9OLiAgKE5vdGUgd2hlbgorICAgIGluc3RydW1lbnRpbmcgaXQgdGhhdCBtdWx0aXBsZSBjb21wdXRhdGlvbnMgb2YgdGhlIGRpZmZlcmVuY2UsIHN1Y2ggYXMKKyAgICBvbmUgaW4gYSBwcmludCBhbmQgYW5vdGhlciBpbiB0aGUgY29uZGl0aW9uYWwsIG1heSBwcm9kdWNlIGRpZmZlcmVudAorICAgIHJlc3VsdHMuKQorICAgIAorICAgIFJhdGhlciB0aGFuIGNvbXBsaWNhdGluZyB0aGUgdGVzdCBzdWl0ZSB3aXRoIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBmbGFncworICAgIHRvIGF2b2lkIGV4Y2VzcyBwcmVjaXNpb24sIGp1c3Qgc2ltcGxpZnkgdGhlIGZsb2F0aW5nLXBvaW50IGNvbXB1dGF0aW9uCisgICAgdG8gYXZvaWQgYSBkZXBlbmRlbmN5IG9uIHBvdGVudGlhbCBleGNlc3MgcHJlY2lzaW9uLgogCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmxvYXRfdmEuYyAoZmxvYXRfdmFfZm4pOiBVc2UgJWYgd2hlbgotCXByaW50aW5nIGRvdWJsZXMgKCVsZiBpcyBmb3IgbG9uZyBkb3VibGVzKS4KLQkobWFpbik6IExpa2V3aXNlLgorY29tbWl0IDA3MWVhYjMyYTdmOWZiYmVmNDZjMGQ4ZjM3ZDk5ODViYzljY2ViMzcKK01lcmdlOiAyMjI4YzdhIDJmNDQ5NTIKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFN1biBNYXIgMTYgMDc6MzY6NTIgMjAxNCAtMDQwMAogCi0yMDEyLTAzLTIxICBQZXRlciBSb3NpbiAgPHBlZGFAbHlzYXRvci5saXUuc2U+CisgICAgTWVyZ2UgcHVsbCByZXF1ZXN0ICM5MiBmcm9tIGpvc2h0cmlwbGV0dC9hdXRvZ2VuCisgICAgCisgICAgUmUtYWRkIGxpYnRvb2wtbGRmbGFncwogCi0JKiB0ZXN0c3VpdGUvbGliL3RhcmdldC1saWJwYXRoLmV4cCBbKi0qLWN5Z3dpbiosICotKi1taW5ndypdCi0JKHNldF9sZF9saWJyYXJ5X3BhdGhfZW52X3ZhcnMpOiBBZGQgdGhlIGxpYnJhcnkgc2VhcmNoIGRpciB0byBQQVRICi0JKGFuZCBzYXZlIFBBVEggZm9yIGxhdGVyKS4KLQkocmVzdG9yZV9sZF9saWJyYXJ5X3BhdGhfZW52X3ZhcnMpOiBSZXN0b3JlIFBBVEguCitjb21taXQgMmY0NDk1MmM5NTc2NWMxNDg2ZmFkNjZmNTcyMzVmOGQ0NTlhOTc0OAorQXV0aG9yOiBKb3NoIFRyaXBsZXR0IDxqb3NoQGpvc2h0cmlwbGV0dC5vcmc+CitEYXRlOiAgIFN1biBNYXIgMTYgMDQ6MzU6MTIgMjAxNCAtMDcwMAogCi0yMDEyLTAzLTIxICBQZXRlciBSb3NpbiAgPHBlZGFAbHlzYXRvci5saXUuc2U+CisgICAgUmUtYWRkIGxpYnRvb2wtbGRmbGFncwogCi0JKiB0ZXN0c3VpdGUvbGliL3RhcmdldC1saWJwYXRoLmV4cCBbKi0qLWN5Z3dpbiosICotKi1taW5ndypdCi0JKHNldF9sZF9saWJyYXJ5X3BhdGhfZW52X3ZhcnMpOiBBZGQgdGhlIGxpYnJhcnkgc2VhcmNoIGRpciB0byBQQVRICi0JKGFuZCBzYXZlIFBBVEggZm9yIGxhdGVyKS4KLQkocmVzdG9yZV9sZF9saWJyYXJ5X3BhdGhfZW52X3ZhcnMpOiBSZXN0b3JlIFBBVEguCitjb21taXQgMjIyOGM3YWIxOTBmM2M1MjliOTAxODQ5NTQ2N2I4NDFmYTIxY2JhMgorTWVyZ2U6IDc2ZDE5ZDAgMzU2MzRkYgorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU3VuIE1hciAxNiAwNzoyNToxOCAyMDE0IC0wNDAwCiAKLTIwMTItMDMtMjAgIFBldGVyIFJvc2luICA8cGVkYUBseXNhdG9yLmxpdS5zZT4KKyAgICBNZXJnZSBwdWxsIHJlcXVlc3QgIzg3IGZyb20gam9zaHRyaXBsZXR0L2F1dG9nZW4KKyAgICAKKyAgICBSZW1vdmUgYXV0b2dlbmVyYXRlZCBmaWxlcyBmcm9tIHRoZSByZXBvc2l0b3J5CiAKLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJsZW4yX3dpbjMyLmMgKG1haW4pOiBSZW1vdmUgYnVnLgotCSogc3JjL3g4Ni93aW4zMi5TIFtNU1ZDXSAoZmZpX2Nsb3N1cmVfU1lTVik6IE1ha2UgdGhlICdzdHViJyBsYWJlbAotCXZpc2libGUgb3V0c2lkZSB0aGUgUFJPQywgc28gdGhhdCBmZmlfY2xvc3VyZV9USElTQ0FMTCBjYW4gc2VlIGl0LgorY29tbWl0IDM1NjM0ZGJjZWFhYzBhMTU0NGY3Mzg1YWRkYzAxZDIxZWYxZWY2YTgKK0F1dGhvcjogSm9zaCBUcmlwbGV0dCA8am9zaEBqb3NodHJpcGxldHQub3JnPgorRGF0ZTogICBTYXQgTWFyIDE1IDE4OjExOjE2IDIwMTQgLTA3MDAKIAotMjAxMi0wMy0yMCAgUGV0ZXIgUm9zaW4gIDxwZWRhQGx5c2F0b3IubGl1LnNlPgorICAgIFJlbW92ZSBhdXRvZ2VuZXJhdGVkIGZpbGVzIGZyb20gdGhlIHJlcG9zaXRvcnkKKyAgICAKKyAgICBBZGQgYW4gYXV0b2dlbi5zaCB0byByZWdlbmVyYXRlIHRoZW0uCiAKLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJsZW4yX3dpbjMyLmMgKG1haW4pOiBSZW1vdmUgYnVnLgotCSogc3JjL3g4Ni93aW4zMi5TIFtNU1ZDXSAoZmZpX2Nsb3N1cmVfU1lTVik6IE1ha2UgdGhlICdzdHViJyBsYWJlbAotCXZpc2libGUgb3V0c2lkZSB0aGUgUFJPQywgc28gdGhhdCBmZmlfY2xvc3VyZV9USElTQ0FMTCBjYW4gc2VlIGl0LgorY29tbWl0IDc2ZDE5ZDAwNGUzNmU5OWQyNjFlZTc4MjYxZTJmNTJjZWE1ZTRhYjEKK01lcmdlOiBjODZkOWI2IGExYTZmNzEKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIEZyaSBNYXIgMTQgMTY6NTQ6MzEgMjAxNCAtMDQwMAogCi0yMDEyLTAzLTE5ICBBbGFuIEhvdXJpaGFuZSAgPGFsYW5oQGZhaXJsaXRlLmNvLnVrPgorICAgIEVuc3VyZSB0aGUgbGlua2VyIHN1cHBvcnRzIEB1bndpbmQgc2VjdGlvbnMgaW4gbGliZmZpLgogCi0JKiBzcmMvbTY4ay9mZmkuYzogQWRkIE1JTlQgc3VwcG9ydC4KLQkqIHNyYy9tNjhrL3N5c3YuUzogRGl0dG8uCitjb21taXQgYzg2ZDliNmNjNmUxNmVlMjYyODQ0YTMzYjQwNDQxMzc0NDAwNzU4YworTWVyZ2U6IDRlZmI3ZGIgZjhjZGYxMQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgRnJpIE1hciAxNCAxNjo1MToyMCAyMDE0IC0wNDAwCiAKLTIwMTItMDMtMDYgIENodW5nLUxpbiBUYW5nICA8Y2x0YW5nQGNvZGVzb3VyY2VyeS5jb20+CisgICAgRml4IG1lcmdlCiAKLQkqIHNyYy9hcm0vZmZpLmMgKGZmaV9jYWxsKTogQWRkIF9fQVJNX0VBQklfXyBndWFyZCBhcm91bmQgY2FsbCB0bwotCWZmaV9jYWxsX1ZGUCgpLgotCShmZmlfcHJlcF9jbG9zdXJlX2xvYyk6IEFkZCBfX0FSTV9FQUJJX18gZ3VhcmQgYXJvdW5kIHVzZSBvZgotCWZmaV9jbG9zdXJlX1ZGUC4KLQkqIHNyYy9hcm0vc3lzdi5TOiBBZGQgX19BUk1fRUFCSV9fIGd1YXJkIGFyb3VuZCBWRlAgY29kZS4KK2NvbW1pdCA0ZWZiN2RiZmQ5NDI3YzQ3OGE5NDhjZDBkNDY0MjEwMTIzZGI4ZGU4CitNZXJnZTogNjM0YTQ3NSAxOGViODFkCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBGcmkgTWFyIDE0IDE2OjQ3OjU3IDIwMTQgLTA0MDAKIAotMjAxMi0wMy0xOSAgY2hlbm5hbSAgPGNzaXRAYXh3YXkuY29tPgorICAgIE1lcmdlIHB1bGwgcmVxdWVzdCAjODEgZnJvbSBydmFuZGVybWV1bGVuL2J1Zy03NTY3NDAKKyAgICAKKyAgICBBbGxvdyBidWlsZGluZyBmb3IgbWlwc2VsIHdpdGggQW5kcm9pZCBOREsgcjguCiAKLQkqIHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYyAoZmZpX3ByZXBfY2xvc3VyZV9sb2MpOiBGaXggQUlYIGNsb3N1cmUKLQlzdXBwb3J0LgorY29tbWl0IGExYTZmNzFiZmU0MTk5MjkzMDQzYjJlNGNmYjRjOGQzY2IxMTEyZjkKK0F1dGhvcjogUnlhbiBWYW5kZXJNZXVsZW4gPHJ5YW52bUBnbWFpbC5jb20+CitEYXRlOiAgIE1vbiBNYXIgMTAgMTU6MTI6NDcgMjAxNCAtMDQwMAogCi0yMDEyLTAzLTEzICBLYXogS29qaW1hICA8a2tvamltYUBnY2MuZ251Lm9yZz4KKyAgICBSZW1vdmUgc3RyYXkgaHVuayB0aGF0IHNob3VsZG4ndCBoYXZlIGJlZW4gaW5jbHVkZWQgaW4gdGhpcyBwYXRjaC4KIAotCSogc3JjL3NoL2ZmaS5jIChmZmlfcHJlcF9jbG9zdXJlX2xvYyk6IERvbid0IEFTU0VSVCBBQkkgdGVzdCwKLQlqdXN0IHJldHVybiBGRklfQkFEX0FCSSB3aGVuIHRoaW5ncyBhcmUgd3JvbmcuCi0JKiBzcmMvc2g2NC9mZmkuYyAoZmZpX3ByZXBfY2xvc3VyZV9sb2MpOiBEaXR0by4KK2NvbW1pdCBmOGNkZjExNDY3MTgxZjJhOWE2YjdlNzQ4MTY3NTY5YWE1OGUzYTgxCitBdXRob3I6IFJ5YW4gVmFuZGVyTWV1bGVuIDxyeWFudm1AZ21haWwuY29tPgorRGF0ZTogICBNb24gTWFyIDEwIDE1OjA0OjU4IDIwMTQgLTA0MDAKIAotMjAxMi0wMy0wOSAgRGF2aWQgRWRlbHNvaG4gIDxkamUuZ2NjQGdtYWlsLmNvbT4KKyAgICBSZXBsYWNlIGRvdWJsZSBxdW90ZXMgd2l0aCBzaW5nbGUgcXVvdGVzIGluIE1ha2VmaWxlLmluIHRvIGltcHJvdmUgY29tcGF0aWJpbGl0eSBiZXR3ZWVuIHNvbWUgdmVyc2lvbnMgb2YgTVNZUyBhbmQgZ21ha2UuIEZyb20gTW96aWxsYSBidWcgOTQzNzI4LgorICAgIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTk0MzcyOAogCi0JKiBzcmMvcG93ZXJwYy9haXhfY2xvc3VyZS5TIChmZmlfY2xvc3VyZV9BU00pOiBBZGp1c3QgZm9yIERhcndpbjY0Ci0JY2hhbmdlIHRvIHJldHVybiB2YWx1ZSBvZiBmZmlfY2xvc3VyZV9oZWxwZXJfREFSV0lOIGFuZCBsb2FkIHR5cGUKLQlmcm9tIHJldHVybiB0eXBlLgorY29tbWl0IGRmYTM3Mzg3MzJlMWJjM2E3ZjQxMzAzOTVhZTRiYWI1NWZjZWJiOTkKK0F1dGhvcjogUnlhbiBWYW5kZXJNZXVsZW4gPHJ5YW52bUBnbWFpbC5jb20+CitEYXRlOiAgIE1vbiBNYXIgMTAgMTQ6NTM6NDggMjAxNCAtMDQwMAogCi0yMDEyLTAzLTAzICBILkouIEx1ICA8aG9uZ2ppdS5sdUBpbnRlbC5jb20+CisgICAgRW5zdXJlIHRoZSBsaW5rZXIgc3VwcG9ydHMgQHVud2luZCBzZWN0aW9ucyBpbiBsaWJmZmkuIEZyb20gTW96aWxsYSBidWcgNzU2NzQwLgorICAgIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTc3ODQxNAorICAgIAorICAgIEFsc28gdHJhY2tlZCBhcyBpc3N1ZSAjNDIuCisgICAgaHR0cHM6Ly9naXRodWIuY29tL2F0Z3JlZW4vbGliZmZpL2lzc3Vlcy80MgogCi0JKiBzcmMveDg2L2ZmaTY0LmMgKGZmaV9jYWxsKTogQ2FzdCB0aGUgcmV0dXJuIHZhbHVlIHRvIHVuc2lnbmVkCi0JbG9uZy4KLQkoZmZpX3ByZXBfY2xvc3VyZV9sb2MpOiBDYXN0IHRvIDY0Yml0IGFkZHJlc3MgaW4gdHJhbXBvbGluZS4KLQkoZmZpX2Nsb3N1cmVfdW5peDY0X2lubmVyKTogQ2FzdCByZXR1cm4gcG9pbnRlciB0byB1bnNpZ25lZCBsb25nCi0JZmlyc3QuCitjb21taXQgMThlYjgxZDAzMmYyOWQ2NDVkMDQ5OGJhOTJiZGRmZDY1MWYwMDlhZQorQXV0aG9yOiBSeWFuIFZhbmRlck1ldWxlbiA8cnlhbnZtQGdtYWlsLmNvbT4KK0RhdGU6ICAgTW9uIE1hciAxMCAxNDo0MzozNyAyMDE0IC0wNDAwCiAKLQkqIHNyYy94ODYvZmZpdGFyZ2V0LmggKEZGSV9TSVpFT0ZfQVJHKTogRGVmaW5lZCB0byA4IGZvciB4MzIuCi0JKGZmaV9hcmcpOiBTZXQgdG8gdW5zaWduZWQgbG9uZyBsb25nIGZvciB4MzIuCi0JKGZmaV9zYXJnKTogU2V0IHRvIGxvbmcgbG9uZyBmb3IgeDMyLgorICAgIEFsbG93IGJ1aWxkaW5nIGZvciBtaXBzZWwgd2l0aCBBbmRyb2lkIE5ESyByOC4gRnJvbSBNb3ppbGxhIGJ1ZyA3NTY3NDAuCisgICAgaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzU2NzQwCiAKLTIwMTItMDMtMDMgIEguSi4gTHUgIDxob25naml1Lmx1QGludGVsLmNvbT4KK2NvbW1pdCAyMzQ5ZmVjOWE4MThmYjUyZmQyZjI5NGJjYmM3YjMxNTZjZDExM2RlCitBdXRob3I6IERhaWtpIFVlbm8gPHVlbm9AZ251Lm9yZz4KK0RhdGU6ICAgV2VkIE1hciA1IDE3OjUzOjAyIDIwMTQgKzA5MDAKIAotCSogc3JjL3ByZXBfY2lmLmMgKGZmaV9wcmVwX2NpZl9jb3JlKTogUHJvcGVybHkgY2hlY2sgYmFkIEFCSS4KKyAgICBGaXggdHlwbyBpbiBkb2MKIAotMjAxMi0wMy0wMyAgQW5kb25pIE1vcmFsZXMgQWxhc3RydWV5ICA8eWxhdHV5YUBnbWFpbC5jb20+Citjb21taXQgNjM0YTQ3NWVhZjFiZWUzMWMwOWY3ZDUxOWUzMWMxM2I2NGNkMjRkZgorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU2F0IE1hciAxIDE4OjM3OjI5IDIwMTQgLTA1MDAKIAotCSogY29uZmlndXJlLmFjOiBBZGQgLW5vLXVuZGVmaW5lZCBmb3IgYm90aCAzMi0gYW5kIDY0LWJpdCB4ODYKLQl3aW5kb3dzLWxpa2UgaG9zdHMuCi0JKiBjb25maWd1cmU6IFJlYnVpbHQuCisgICAgVXBkYXRlIE1ha2VmaWxlIGZvciBuZXcgZGFyd2luIHNjcmlwdHMKIAotMjAxMi0wMi0yNyAgTWlrYWVsIFBldHRlcnNzb24gIDxtaWtwZUBpdC51dS5zZT4KK2NvbW1pdCBjN2I2N2U4NzRiYjg5ODU5ZjlhMDdkMWNmOTYwNjA1MmI2YzBkY2MxCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTYXQgTWFyIDEgMTg6MzQ6MTggMjAxNCAtMDUwMAogCi0JUFIgbGliZmZpLzUyMjIzCi0JKiBNYWtlZmlsZS5hbSAoRkxBR1NfVE9fUEFTUyk6IERlZmluZS4KLQkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorICAgIEFkZCBSRUFETUUgbm90ZQogCi0yMDEyLTAyLTIzICBBbnRob255IEdyZWVuICA8Z3JlZW5AbW94aWVsb2dpYy5jb20+Citjb21taXQgYTA0ZTMwYmEzZGMzMDMxMzNkNDU5YzFhYzI3M2NlZWZlNGQ0OWIzMgorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgRnJpIEZlYiAyOCAxNzoyMDo1OSAyMDE0IC0wNTAwCiAKLQkqIHNyYy8qL2ZmaXRhcmdldC5oOiBFbnN1cmUgdGhhdCB1c2VycyBuZXZlciBpbmNsdWRlIGZmaXRhcmdldC5oCi0JZGlyZWN0bHkuCisgICAgQWRkIG1pc3NpbmcgLURGRklfREVCVUcgZmxhZwogCi0yMDEyLTAyLTIzICBLYWkgVGlldHogIDxrdGlldHpAcmVkaGF0LmNvbT4KK2NvbW1pdCA5MzRkYzFiNWM4ZDZhOWU3MjdiZWRjNzIzNDI4MzFlYjdkNjJjMzVmCitNZXJnZTogMTFkN2FhOSA2N2ZiZWYzCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBGcmkgRmViIDI4IDAxOjEwOjE3IDIwMTQgLTA1MDAKIAotCVBSIGxpYmZmaS81MjIyMQotCSogc3JjL3g4Ni9mZmkuYyAoZmZpX2Nsb3N1cmVfcmF3X1RISVNDQUxMKTogTmV3Ci0JcHJvdG90eXBlLgotCShmZmlfcHJlcF9yYXdfY2xvc3VyZV9sb2MpOiBVc2UgZmZpX2Nsb3N1cmVfcmF3X1RISVNDQUxMIGZvcgotCXRoaXNjYWxsLWNvbnZlbnRpb24uCi0JKGZmaV9yYXdfY2FsbCk6IFVzZSBmZmlfcHJlcF9hcmdzX3Jhdy4KLQkqIHNyYy94ODYvd2luMzIuUyAoZmZpX2Nsb3N1cmVfcmF3X1RISVNDQUxMKTogQWRkCi0JaW1wbGVtZW50YXRpb24gZm9yIHN0dWIuCisgICAgTWVyZ2UgYnJhbmNoICdtYXN0ZXInIG9mIGdpdGh1Yi5jb206L2F0Z3JlZW4vbGliZmZpCiAKLTIwMTItMDItMTAgIEthaSBUaWV0eiAgPGt0aWV0ekByZWRoYXQuY29tPgorY29tbWl0IDExZDdhYTlkN2E0YmJlNjQyOTQ0ZWRjMGYwN2NmOTZkYjliMjcwYjYKK01lcmdlOiBiNDBhZWRhIDNiNDRkNDEKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIEZyaSBGZWIgMjggMDE6MDY6NDggMjAxNCAtMDUwMAogCi0JKiBjb25maWd1cmUuYWMgKEFNX0xUTERGTEFHUyk6IEFkZCAtbm8tdW5kZWZpbmUgZm9yIHg2NAotCXdpbmRvd3MgdGFyZ2V0LgotCSogY29uZmlndXJlOiBSZWdlbmVyYXRlZC4KKyAgICBNZXJnZSBwdWxsIHJlcXVlc3QgIzQ2IGZyb20gbWFrb3Rva2F0by9hbmRyb2lkLWNsYW5nCisgICAgCisgICAgRml4IGJ1aWxkIGZhaWx1cmUgd2hlbiB1c2luZyBjbGFuZyBmb3IgQW5kcm9pZAogCi0yMDEyLTAyLTA4ICBLYWkgVGlldHogIDxrdGlldHpAcmVkaGF0LmNvbT4KK2NvbW1pdCA2N2ZiZWYzYjU2ZmYwZWY4OGY5YjFhN2ZlNDhjYjc3MjIyZmE2Y2VjCitNZXJnZTogYjQwYWVkYSAzYjQ0ZDQxCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBGcmkgRmViIDI4IDAxOjA2OjQ4IDIwMTQgLTA1MDAKIAotCSogc3JjL3ByZXBfY2lmLmMgKGZmaV9wcmVwX2NpZik6IEFsbG93IGZvciBYODZfV0lOMzIKLQlhbHNvIEZGSV9USElTQ0FMTC4KLQkqIHNyYy94ODYvZmZpLmMgKGZmaV9jbG9zdXJlX1RISVNDQUxMKTogQWRkIHByb3RvdHlwZS4KLQkoRkZJX0lOSVRfVFJBTVBPTElORV9USElTQ0FMTCk6IE5ldyB0cmFtcG9saW5lIGNvZGUuCi0JKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKTogQWRkIEZGSV9USElTQ0FMTCBzdXBwb3J0LgotCSogc3JjL3g4Ni9mZml0YXJnZXQuaCAoRkZJX1RSQU1QT0xJTkVfU0laRSk6IEFkanVzdCBzaXplLgotCSogc3JjL3g4Ni93aW4zMi5TIChmZmlfY2xvc3VyZV9USElTQ0FMTCk6IE5ldyBjbG9zdXJlIGNvZGUKLQlmb3IgdGhpc2NhbGwtY2FsbGluZyBjb252ZW50aW9uLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfdGhpc2NhbGwuYzogTmV3IHRlc3QuCisgICAgTWVyZ2UgcHVsbCByZXF1ZXN0ICM0NiBmcm9tIG1ha290b2thdG8vYW5kcm9pZC1jbGFuZworICAgIAorICAgIEZpeCBidWlsZCBmYWlsdXJlIHdoZW4gdXNpbmcgY2xhbmcgZm9yIEFuZHJvaWQKIAotMjAxMi0wMS0yOCAgS2FpIFRpZXR6ICA8a3RpZXR6QHJlZGhhdC5jb20+Citjb21taXQgYjQwYWVkYTMxYTc0ZDk1YTM3YzcyM2I2MjQzYWFiYWM0NjZlNjdjNAorTWVyZ2U6IDIwNjk4YWIgNTNjZWFmMQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgRnJpIEZlYiAyOCAwMTowMToyOSAyMDE0IC0wNTAwCiAKLQkqIHNyYy9saWJmZmkvc3JjL3g4Ni9mZmkuYyAoZmZpX2NhbGxfd2luMzIpOiBBZGQgbmV3Ci0JYXJndW1lbnQgdG8gcHJvdG90eXBlIGZvciBzcGVjaWZ5IGNhbGxpbmctY29udmVudGlvbi4KLQkoZmZpX2NhbGwpOiBBZGQgc3VwcG9ydCBmb3Igc3RkY2FsbC90aGlzY2FsbCBjb252ZW50aW9uLgotCShmZmlfcHJlcF9hcmdzKTogTGlrZXdpc2UuCi0JKGZmaV9yYXdfY2FsbCk6IExpa2V3aXNlLgotCSogc3JjL3g4Ni9mZml0YXJnZXQuaCAoZmZpX2FiaSk6IEFkZCBGRklfVEhJU0NBTEwgYW5kCi0JRkZJX0ZBU1RDQUxMLgotCSogc3JjL3g4Ni93aW4zMi5TIChfZmZpX2NhbGxfd2luMzIpOiBBZGQgc3VwcG9ydCBmb3IKLQlmYXN0Y2FsbC90aGlzY2FsbCBjYWxsaW5nLWNvbnZlbnRpb24gY2FsbHMuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmFzdHRoaXMxX3dpbjMyLmM6IE5ldyB0ZXN0LgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zhc3R0aGlzMl93aW4zMi5jOiBOZXcgdGVzdC4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mYXN0dGhpczNfd2luMzIuYzogTmV3IHRlc3QuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RybGVuMl93aW4zMi5jOiBOZXcgdGVzdC4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9tYW55Ml93aW4zMi5jOiBOZXcgdGVzdC4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3QxX3dpbjMyLmM6IE5ldyB0ZXN0LgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDJfd2luMzIuYzogTmV3IHRlc3QuCisgICAgTWVyZ2UgYnJhbmNoICdtYXN0ZXInIG9mIGdpdGh1Yi5jb206L2F0Z3JlZW4vbGliZmZpCiAKLTIwMTItMDEtMjMgIFVyb3MgQml6amFrICA8dWJpempha0BnbWFpbC5jb20+Citjb21taXQgNTNjZWFmMTRjNWVlYjE2YmEwOTc0NWYwY2E4N2NjYTM2N2Q0MWE5MAorTWVyZ2U6IDg2MGZlNjYgY2M5YjUxOAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgRnJpIEZlYiAyOCAwMTowMTowMiAyMDE0IC0wNTAwCiAKLQkqIHNyYy9hbHBoYS9mZmkuYyAoZmZpX3ByZXBfY2xvc3VyZV9sb2MpOiBDaGVjayBmb3IgYmFkIEFCSS4KKyAgICBNZXJnZSBwdWxsIHJlcXVlc3QgIzQwIGZyb20gd29qZHlyL21hc3RlcgorICAgIAorICAgIENvcnJlY3QgdGhlIC1MIGZsYWcgaW4gbGliZmZpLnBjLmluCiAKLTIwMTItMDEtMjMgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KLQkgICAgQ2hyaXMgWW91bmcgIDxjZHlvdW5nQG50bHdvcmxkLmNvbT4KK2NvbW1pdCAyMDY5OGFiYzZhMDAwOTJmZDdmZDNlNDM0YTNhMjlkYzBmMDQ4ZjFlCitNZXJnZTogNjRiZDA2OSAxYTBiMDFlCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBGcmkgRmViIDI4IDAwOjU2OjI3IDIwMTQgLTA1MDAKIAotCSogY29uZmlndXJlLmFjOiBBZGQgQW1pZ2Egc3VwcG9ydC4KLQkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKyAgICBNZXJnZSBwdWxsIHJlcXVlc3QgIzY2IGZyb20gcHBpemFycm8vbWFzdGVyCisgICAgCisgICAgQmxhY2tGaW4gZml4ZXMgLSBGYXRhbCBlcnJvciB3aGVuIGNhbGxpbmcgYSBmdW5jdGlvbiBkZWZpbmVkIGluIGEgc2hhcmVkIGxpYnJhcnkgZnJvbSB3aXRoaW4gdGhlIGZ1bmN0aW9uIGNhbGxlZCBieSBGRkkKIAotMjAxMi0wMS0yMyAgRG1pdHJ5IE5hZGV6aGluICA8ZG1pdHJ5Lm5hZGV6aGluQGdtYWlsLmNvbT4KK2NvbW1pdCA4NjBmZTY2NDZmNWFlNjAzZTk5YThkMWQ3MjJkZGRkYmE4Yjc1NzY5CitNZXJnZTogNjRiZDA2OSAxYTBiMDFlCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBGcmkgRmViIDI4IDAwOjU2OjI3IDIwMTQgLTA1MDAKIAotCSogaW5jbHVkZS9mZmlfY29tbW9uLmggKExJS0VMWSwgVU5MSUtFTFkpOiBGaXggZGVmaW5pdGlvbnMuCisgICAgTWVyZ2UgcHVsbCByZXF1ZXN0ICM2NiBmcm9tIHBwaXphcnJvL21hc3RlcgorICAgIAorICAgIEJsYWNrRmluIGZpeGVzIC0gRmF0YWwgZXJyb3Igd2hlbiBjYWxsaW5nIGEgZnVuY3Rpb24gZGVmaW5lZCBpbiBhIHNoYXJlZCBsaWJyYXJ5IGZyb20gd2l0aGluIHRoZSBmdW5jdGlvbiBjYWxsZWQgYnkgRkZJCiAKLTIwMTItMDEtMjMgIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQGxpbnV4LW02OGsub3JnPgorY29tbWl0IDY0YmQwNjk5MGE3YWNjZjcyMjcxNTE2YTIxMTBiODZjZGNjZDhkZjQKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIEZyaSBGZWIgMjggMDA6NTI6NTYgMjAxNCAtMDUwMAogCi0JKiBzcmMvbTY4ay9zeXN2LlMgKGZmaV9jYWxsX1NZU1YpOiBQcm9wZXJseSB0ZXN0IGZvciBwbGFpbgotCW1jNjgwMDAuICBUZXN0IGZvciBfX0hBVkVfNjg4ODFfXyBpbiBhZGRpdGlvbiB0byBfX01DNjg4ODFfXy4KKyAgICBBZGQgQ2hhbmdlTG9nIGVudHJ5IGZvciBKb3NoJ3MgY2hhbmdlCiAKLTIwMTItMDEtMTkgIEpha3ViIEplbGluZWsgIDxqYWt1YkByZWRoYXQuY29tPgorY29tbWl0IGVkZjI5YzUxNjliMDZmY2ZjMjQxNDQ1ZTE1MmUzMjViYzNjNTBlMGUKK01lcmdlOiAzM2M5OTU0IDM5OThkMjYKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIEZyaSBGZWIgMjggMDA6NTA6MjUgMjAxNCAtMDUwMAogCi0JUFIgcnRsLW9wdGltaXphdGlvbi80ODQ5NgotCSogc3JjL2lhNjQvZmZpLmMgKGZmaV9jYWxsKTogRml4IHVwIGFsaWFzaW5nIHZpb2xhdGlvbnMuCisgICAgTWVyZ2UgcHVsbCByZXF1ZXN0ICM3NSBmcm9tIGpvc2h0cmlwbGV0dC9sb25nZG91YmxlCisgICAgCisgICAgRml4IGJ1aWxkIGVycm9yIG9uIHg4NiB3aXRob3V0IGRpc3RpbmN0IGxvbmcgZG91YmxlCiAKLTIwMTItMDEtMDkgIFJhaW5lciBPcnRoICA8cm9AQ2VCaVRlYy5VbmktQmllbGVmZWxkLkRFPgorY29tbWl0IDMzYzk5NTRmMmVlYzUzOTAxMWEwZjkzMjcwYWFmMDEzMzE4ODM3YWUKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIEZyaSBGZWIgMjggMDA6Mzg6NDEgMjAxNCAtMDUwMAogCi0JKiBjb25maWd1cmUuYWMgKGk/ODYtKi0qKTogU2V0IFRBUkdFVCB0byBYODZfNjQuCi0JKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisgICAgUmVidWlsdCB3aXRoIG5ldyBsaWJ0b29sCiAKLTIwMTEtMTItMDcgIEFuZHJldyBQaW5za2kgIDxhcGluc2tpQGNhdml1bS5jb20+Citjb21taXQgOTI2YjY5ODlmYmQwODQ4OGI5MTA1OTQzMjkzMzUzZDQ1YWM1MjdlMAorTWVyZ2U6IDVhODhjODUgY2M4MjA1MQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgRnJpIEZlYiAyOCAwMDoyNjo1NyAyMDE0IC0wNTAwCiAKLQlQUiBsaWJmZmkvNTAwNTEKLQkqIHNyYy9taXBzL24zMi5TOiBBZGQgIi5zZXQgbWlwczQiLgorICAgIE1lcmdlIGJyYW5jaCAnbWFzdGVyJyBvZiBnaXRodWIuY29tOi9hdGdyZWVuL2xpYmZmaQorICAgIAorICAgIENvbmZsaWN0czoKKyAgICAJQ2hhbmdlTG9nCiAKLTIwMTEtMTEtMjEgIEFuZHJlYXMgVG9ibGVyICA8YW5kcmVhc3RAZmd6bmV0LmNoPgorY29tbWl0IDVhODhjODVmZGUzMDQwNTJiZWQxNTgxZWQwYjY0NTJhYzJjNjg4MzgKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIEZyaSBGZWIgMjggMDA6MjM6MDQgMjAxNCAtMDUwMAogCi0JKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisgICAgRml4IHNwZWxsaW5nIGVycm9ycwogCi0yMDExLTExLTEyICBEYXZpZCBHaWxiZXJ0IDxkYXZpZC5naWxiZXJ0QGxpbmFyby5vcmc+Citjb21taXQgY2M4MjA1MWM3ZTgwY2VhNzcyYzRiNzJkYTAyNmViN2U2OGQ1OThmYworQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgRnJpIEZlYiAyOCAwMDoyMzowNCAyMDE0IC0wNTAwCiAKLQkqIGRvYy9saWJmZmkudGV4aSwgaW5jbHVkZS9mZmkuaC5pbiwgaW5jbHVkZS9mZmlfY29tbW9uLmgsCi0JbWFuL01ha2VmaWxlLmFtLCBtYW4vZmZpLjMsIG1hbi9mZmlfcHJlcF9jaWYuMywKLQltYW4vZmZpX3ByZXBfY2lmX3Zhci4zLCBzcmMvYXJtL2ZmaS5jLCBzcmMvYXJtL2ZmaXRhcmdldC5oLAotCXNyYy9jcmlzL2ZmaS5jLCBzcmMvcHJlcF9jaWYuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2RvdWJsZV92YS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbG9uZ2RvdWJsZV92YS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mbG9hdF92YS5jOiBNYW55IGNoYW5nZXMgdG8gc3VwcG9ydCB2YXJpYWRpYwotCWZ1bmN0aW9uIGNhbGxzLgorICAgIEZpeCBzcGVsbGluZyBlcnJvcnMKIAotMjAxMS0xMS0xMiAgS3lsZSBNb2ZmZXR0IDxLeWxlLkQuTW9mZmV0dEBib2VpbmcuY29tPgorY29tbWl0IDAwMWFhZjRiMWI1NjM0OTU5NmJiNmY2YjVjMTYxM2RjYmJkODRlYTgKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIEZyaSBGZWIgMjggMDA6MjA6MTcgMjAxNCAtMDUwMAogCi0JKiBzcmMvcG93ZXJwYy9mZmkuYywgc3JjL3Bvd2VycGMvZmZpdGFyZ2V0LmgsCi0Jc3JjL3Bvd2VycGMvcHBjX2Nsb3N1cmUuUywgc3JjL3Bvd2VycGMvc3lzdi5TOiBNYW55IGNoYW5nZXMgZm9yCi0Jc29mdGZsb2F0IHBvd2VycGMgdmFyaWFudHMuCisgICAgV2hlbiBubyBWRlAgYXJndW1lbnRzIGFyZSBwcmVzZW50IHRoZSBJUCByZWdpc3RlciBpcyB1c2VkCisgICAgdW5pbml0aWFsaXplZC4gSW5pdGlhbGl6ZSBpdCB0byB0aGUgdmFsdWUgb2YgRlAuCisgICAgCisgICAgVGhpcyBmaXhlcyBhIG51bWJlciBvZiB0ZXN0c3VpdGUgZmFpbHVyZXMgd2hlbiBjb25maWd1cmVkIGZvcgorICAgIGFybXY3bC11bmtub3duLWxpbnV4LWdudWVhYmloZgogCi0yMDExLTExLTEyICBQZXRyIFNhbGluZ2VyIDxQZXRyLlNhbGluZ2VyQHNlem5hbS5jej4KK2NvbW1pdCA0OWY3NzI5YzNjZTY5N2MxMjQwOGM0MmNjYjI5Y2RmNGViNjZiYjg1CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBGcmkgRmViIDI4IDAwOjE3OjE2IDIwMTQgLTA1MDAKIAotCSogY29uZmlndXJlLmFjIChGRklfRVhFQ19UUkFNUE9MSU5FX1RBQkxFKTogRml4IGtmcmVlYnNkIHN1cHBvcnQuCi0JKiBjb25maWd1cmU6IFJlYnVpbHQuCisgICAgYWFyY2g2NCBmaXgKIAotMjAxMS0xMS0xMiAgVGltb3RoeSBXYWxsICA8dHdhbGxAdXNlcnMuc2YubmV0PgorY29tbWl0IDQ0NzQ4M2Q1MWM2YWE5ZGY3MTE2ZjM0NmE3M2ZjMWNmNzk1ZjRjMmIKK01lcmdlOiA1MTM3N2JkIGI0ZGY5Y2YKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFRodSBGZWIgMjcgMTU6NDI6NDEgMjAxNCAtMDUwMAogCi0JKiBzcmMvYXJtL2ZmaS5jIChmZmlfcHJlcF9hcmdzLCBmZmlfcHJlcF9pbmNvbWluZ19hcmdzX1NZU1YpOiBNYXgKLQlhbGlnbm1lbnQgb2YgNCBmb3Igd2luY2Ugb24gQVJNLgorICAgIEZpeCBDaGFuZ2VMb2cgbWVyZ2UKIAotMjAxMS0xMS0xMiAgS3lsZSBNb2ZmZXR0IDxLeWxlLkQuTW9mZmV0dEBib2VpbmcuY29tPgotCSAgICBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK2NvbW1pdCAzOTk4ZDI2MDRiNWMwZDQ1YTA5OGZmMzExOWE5ZmQ5NzEwZWY0MjlkCitBdXRob3I6IEpvc2ggVHJpcGxldHQgPGpvc2hAam9zaHRyaXBsZXR0Lm9yZz4KK0RhdGU6ICAgTW9uIEZlYiAxNyAxMToyMDozMyAyMDE0IC0wODAwCiAKLQkqIHNyYy9wcGMvc3lzdi5TLCBzcmMvcHBjL2ZmaS5jOiBSZW1vdmUgdXNlIG9mIHBwYyBzdHJpbmcKLQlpbnN0cnVjdGlvbnMgKG5vdCBhdmFpbGFibGUgb24gc29tZSBjb3JlcywgbGlrZSB0aGUgUFBDNDQwKS4KKyAgICBGaXggYnVpbGQgZXJyb3Igb24geDg2IHdpdGhvdXQgZGlzdGluY3QgbG9uZyBkb3VibGUKKyAgICAKKyAgICBzcmMveDg2L2ZmaTY0LmM6IEluIGZ1bmN0aW9uICdjbGFzc2lmeV9hcmd1bWVudCc6CisgICAgc3JjL3g4Ni9mZmk2NC5jOjIwNTo1OiBlcnJvcjogZHVwbGljYXRlIGNhc2UgdmFsdWUKKyAgICAgICAgIGNhc2UgRkZJX1RZUEVfTE9OR0RPVUJMRToKKyAgICAgICAgIF4KKyAgICBzcmMveDg2L2ZmaTY0LmM6MjAyOjU6IGVycm9yOiBwcmV2aW91c2x5IHVzZWQgaGVyZQorICAgICAgICAgY2FzZSBGRklfVFlQRV9ET1VCTEU6CisgICAgICAgICBeCiAKLTIwMTEtMTEtMTIgIEtpbXVyYSBXYXRhcnUgIDxraW11cmF3QGkubmlmdHkuanA+Citjb21taXQgNTEzNzdiZGE5YWVkMGIyYzEzMDljODE4NDYwY2FiOWQ5YWIzZDQ2ZQorTWVyZ2U6IGYwOGRhNTQgNDA5MjdiZAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU2F0IEZlYiAxNSAwODowNjoyOSAyMDE0IC0wNTAwCiAKLQkqIG00L2F4X2VuYWJsZV9idWlsZGRpcjogQ2hhbmdlIGZyb20gc3RyaW5nIGNvbXBhcmlzb24gdG8gbnVtZXJpYwotCWNvbXBhcmlzb24gZm9yIHdjIG91dHB1dC4KLQkqIGNvbmZpZ3VyZS5hYzogRW5hYmxlIEZGSV9NTUFQX0VYRUNfV1JJVCBmb3IgZGFyd2luMTEgYWthIE1hYyBPUwotCVggMTAuNy4KLQkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKyAgICBNZXJnZSBwdWxsIHJlcXVlc3QgIzcyIGZyb20gaGVpaGVyL2RldmVsCisgICAgCisgICAgTUlQUyBOMzI6IEZpeCBjYWxsIGZsb2F0aW5nIHBvaW50IHZhIGZ1bmN0aW9uCiAKLTIwMTEtMTEtMTIgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK2NvbW1pdCBmMDhkYTU0NjU0NjNlNjBhMjhmNWU5MjFmMjNlYmYyYmE5ODRjMTQ4CitNZXJnZTogM2RjM2YzMiBmYTVmMjVjCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTYXQgRmViIDE1IDA4OjA2OjExIDIwMTQgLTA1MDAKIAotCSogTWFrZWZpbGUuYW0gKEFNX0NDQVNGTEFHUyk6IEFkZCAtZyBvcHRpb24gdG8gYnVpbGQgYXNzZW1ibHkKLQlmaWxlcyB3aXRoIGRlYnVnIGluZm8uCi0JKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KKyAgICBNZXJnZSBwdWxsIHJlcXVlc3QgIzY4IGZyb20gemVsZGluL21hc3RlcgorICAgIAorICAgIExpbnV4L3BwYzY0OiBSZW1vdmUgYXNzdW1wdGlvbiBvbiBjb250ZW50cyBvZiByMTEgaW4gY2xvc3VyZQogCi0yMDExLTExLTEyICBKYXNwZXIgTGlldmlzc2UgQWRyaWFhbnNlIDxqYXNwZXJAb3BlbmJzZC5vcmc+Citjb21taXQgNDA5MjdiZDNlMWU3YzYwMDcwMjViYTEwODU0ZmQ4YTA2NjRlNDdkZgorQXV0aG9yOiBIZWloZXIgPHJAaGV2LmNjPgorRGF0ZTogICBUdWUgSmFuIDIxIDIzOjE4OjI3IDIwMTQgKzA4MDAKIAotCSogUkVBRE1FOiBVcGRhdGUgbGlzdCBvZiBzdXBwb3J0ZWQgT3BlbkJTRCBzeXN0ZW1zLgorICAgIEZpeCBjYWxsIGZsb2F0aW5nIHBvaW50IHZhIGZ1bmN0aW9uCisgICAgCisgICAgSSdtIG5vdCBzdXJlIGZsb2F0aW5nLXBvaW50IGFyZ3VtZW50cyBpbiBHUFIgb3IgRlBSIGJlZm9yZSBjYWxsaW5nCisgICAgdmFyaWFibGUgbnVtYmVyIGFyZ3VtZW50cyBmdW5jdGlvbi4gc28sIGxvYWQgYWxsIGFyZ3VtZW50cyB0byBHUFIgYW5kCisgICAgRlBSLgogCi0yMDExLTExLTEyICBBbnRob255IEdyZWVuICA8Z3JlZW5AbW94aWVsb2dpYy5jb20+Citjb21taXQgYjRkZjljZjljYzRhOWE5NDAxYTUzZmQ2YmVhMWYzYzJjMjgzYjk3YgorQXV0aG9yOiBaYWNoYXJ5IFdhbGRvd3NraSA8emFjaEB3YWxkb3dza2kubWU+CitEYXRlOiAgIFdlZCBGZWIgNSAxNDoyMjo1MiAyMDE0IC0wNTAwCiAKLQkqIGxpYnRvb2wtdmVyc2lvbjogVXBkYXRlLgotCSogTWFrZWZpbGUuYW0gKG5vZGlzdF9saWJmZmlfbGFfU09VUkNFUyk6IEFkZCBzcmMvZGVidWcuYyBpZgotCUZGSV9ERUJVRy4KLQkobGliZmZpX2xhX1NPVVJDRVMpOiBSZW1vdmUgc3JjL2RlYnVnLmMKLQkoRVhUUkFfRElTVCk6IEFkZCBzcmMvZGVidWcuYwotCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCi0JKiBSRUFETUU6IFVwZGF0ZSBmb3IgMy4wLjExLgorICAgIEFBcmNoNjQ6IEZpeCB2b2lkIGZhbGwtdGhyb3VnaCBjYXNlIHdoZW4gYXNzZXJ0aW9ucyBhcmUgZW5hYmxlZAogCi0yMDExLTExLTEwICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEByZWRoYXQuY29tPgorY29tbWl0IGY0NjZhYWQwZDkxYTExN2U0MjU3MWQxZDZmYjQzNGZhMDQzM2M5MzAKK0F1dGhvcjogWmFjaGFyeSBXYWxkb3dza2kgPHphY2hAd2FsZG93c2tpLm1lPgorRGF0ZTogICBUdWUgSmFuIDIxIDE2OjM4OjMxIDIwMTQgLTA1MDAKIAotCSogY29uZmlndXJlLmFjIChHQ0NfQVNfQ0ZJX1BTRVVET19PUCk6IFVzZSBpdCBpbnN0ZWFkIG9mIGlubGluZSBjaGVjay4KLQkqIGNvbmZpZ3VyZSwgYWNsb2NhbC5tNDogUmVidWlsZC4KKyAgICBBQXJjaDY0OiBGaXggbWlzc2luZyBzZW1pY29sb25zIHdoZW4gYXNzZXJ0aW9ucyBhcmUgZW5hYmxlZAogCi0yMDExLTA5LTA0ICBJYWluIFNhbmRvZSAgPGlhaW5zQGdjYy5nbnUub3JnPgorY29tbWl0IDdlYTY3NzczM2JkOTg5MTcyNDE4NTJiODkwMWE2Yjc1ODA3Mjg4OTUKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFNhdCBOb3YgMzAgMjA6NTg6MzEgMjAxMyAtMDUwMAogCi0JUFIgbGliZmZpLzQ5NTk0Ci0JKiBzcmMvcG93ZXJwYy9kYXJ3aW5fY2xvc3VyZS5TIChzdHVicyk6IE1ha2UgdGhlIHN0dWIgYmluZGluZwotCWhlbHBlciByZWZlcmVuY2UgdHJhY2sgdGhlIGFyY2hpdGVjdHVyZSBwb2ludGVyIHNpemUuCisgICAgUmVtb3ZlIGJ1aWxkLWlvcyBmcm9tIE1ha2VmaWxlCisgICAgCisgICAgQ29uZmxpY3RzOgorICAgIAlDaGFuZ2VMb2cKIAotMjAxMS0wOC0yNSAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+Citjb21taXQgNmFlMDQ2Y2M1OWMxMmIyY2Q0MDE1OGQ2YmNiOTZmNGE1OTg4NjE1OQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU2F0IE5vdiAzMCAyMTowNjo1MSAyMDEzIC0wNTAwCiAKLQkqIHNyYy9hcm0vZmZpLmMgKEZGSV9JTklUX1RSQU1QT0xJTkUpOiBSZW1vdmUgaGFyZC1jb2RlZCBhc3NlbWJseQotCWluc3RydWN0aW9ucy4KLQkqIHNyYy9hcm0vc3lzdi5TIChmZmlfYXJtX3RyYW1wb2xpbmUpOiBQdXQgdGhlbSBoZXJlIGluc3RlYWQuCisgICAgTWVudGlvbiBBYXJjaDY0IG9uIGlPUwogCi0yMDExLTA3LTExICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KK2NvbW1pdCBiZmMwNmIzZmRiMzJhYmU5MGNlMDc0OWFlZGZlYzY0OWRmODVhN2VmCitBdXRob3I6IFphY2hhcnkgV2FsZG93c2tpIDx6YWNoQHdhbGRvd3NraS5tZT4KK0RhdGU6ICAgTW9uIERlYyAzMCAxNzozNjozOSAyMDEzIC0wNTAwCiAKLSAgICAgICAgKiBzcmMvYXJtL2ZmaS5jIChGRklfSU5JVF9UUkFNUE9MSU5FKTogQ2xlYXIgaWNhY2hlLgorICAgIFVwZGF0ZSBDaGFuZ2VMb2cKIAotMjAxMS0wNi0yOSAgUmFpbmVyIE9ydGggIDxyb0BDZUJpVGVjLlVuaS1CaWVsZWZlbGQuREU+Citjb21taXQgMGEwZjEyY2UxZjdiZTgxMDA2YjA4YTNjODFhNjM2OTI2ZDI4M2E5YgorQXV0aG9yOiBaYWNoYXJ5IFdhbGRvd3NraSA8emFjaEB3YWxkb3dza2kubWU+CitEYXRlOiAgIFRodSBKYW4gOSAxMzo1MDoxNyAyMDE0IC0wNTAwCiAKLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZG91YmxlX3ZhLmM6IE1vdmUgUFIgbnVtYmVyIHRvIGNvbW1lbnQuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGVfdmEuYzogTGlrZXdpc2UuCisgICAgQUFyY2g2NDogUmVtb3ZlIGR1cGxpY2l0b3VzIGVsZW1lbnRfY291bnQgY2FsbC4KKyAgICAKKyAgICBUaGlzIGluaGliaXRzIGFuIGFuYWx5emVyIHdhcm5pbmcgYnkgQ2xhbmcuCiAKLTIwMTEtMDYtMjkgIFJhaW5lciBPcnRoICA8cm9AQ2VCaVRlYy5VbmktQmllbGVmZWxkLkRFPgorY29tbWl0IDQzMzBmZGNkOTJlNjdjODE2Mjg4ZDY0YWIyMzAyMzcwNjU3NjgyMDYKK0F1dGhvcjogWmFjaGFyeSBXYWxkb3dza2kgPHphY2hAd2FsZG93c2tpLm1lPgorRGF0ZTogICBUaHUgSmFuIDkgMTM6NTM6MzAgMjAxNCAtMDUwMAogCi0JUFIgbGliZmZpLzQ2NjYwCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2RvdWJsZV92YS5jOiB4ZmFpbCBkZy1vdXRwdXQgb24KLQltaXBzLXNnaS1pcml4NiouCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGVfdmEuYzogTGlrZXdpc2UuCisgICAgRGFyd2luL2FhcmNoNjQ6IFJlc3BlY3QgaU9TIEFCSSByZTogc3RhY2sgYXJndW1lbnQgYWxpZ25tZW50CiAKLTIwMTEtMDYtMTQgIFJhaW5lciBPcnRoICA8cm9AQ2VCaVRlYy5VbmktQmllbGVmZWxkLkRFPgorY29tbWl0IDBhMzMzZDZjMzk3MzkzNWQ0ZmUwMmFhZTc2YjEwZTM5ZDNjODhlMDcKK0F1dGhvcjogWmFjaGFyeSBXYWxkb3dza2kgPHphY2hAd2FsZG93c2tpLm1lPgorRGF0ZTogICBUaHUgSmFuIDkgMTQ6MDM6MjkgMjAxNCAtMDUwMAogCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvaHVnZV9zdHJ1Y3QuYyAodGVzdF9sYXJnZV9mbik6IFVzZSBQUkl1OCwKLQlQUklkOCBpbnN0ZWFkIG9mICVoaHUsICVoaGQuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmZpdGVzdC5oIFtfX2FscGhhX18gJiYgX19vc2ZfX10gKFBSSWQ4LAotCVBSSXU4KTogRGVmaW5lLgotCVtfX3NnaV9fXSAoUFJJZDgsIFBSSXU4KTogRGVmaW5lLgorICAgIERhcndpbi9hYXJjaDY0OiBGaXggc2l6ZV90IGFzc3VtcHRpb25zCiAKLTIwMTEtMDQtMjkgIFJhaW5lciBPcnRoICA8cm9AQ2VCaVRlYy5VbmktQmllbGVmZWxkLkRFPgorY29tbWl0IDJjMThlM2M3NmFhZDFiNDI2NjE3ZGIwNWE0Mzg0ZTdjM2E5MjAxNzYKK0F1dGhvcjogWmFjaGFyeSBXYWxkb3dza2kgPHphY2hAd2FsZG93c2tpLm1lPgorRGF0ZTogICBNb24gRGVjIDMwIDE2OjE0OjAyIDIwMTMgLTA1MDAKIAotCSogc3JjL2FscGhhL29zZi5TIChVQV9TSSwgRkRFX0VOQ09ESU5HLCBGREVfRU5DT0RFLCBGREVfQVJBTkdFKToKLQlEZWZpbmUuCi0JVXNlIHRoZW0gdG8gaGFuZGxlIEVMRiB2cy4gRUNPRkYgZGlmZmVyZW5jZXMuCi0JW19fb3NmX19dIChfR0xPQkFMX19GX2ZmaV9jYWxsX29zZik6IERlZmluZS4KKyAgICBEYXJ3aW4vYWFyY2g2NDogRml4ICJzaGFkb3dzIGRlY2xhcmF0aW9uIiB3YXJuaW5ncwogCi0yMDExLTAzLTMwICBUaW1vdGh5IFdhbGwgIDx0d2FsbEB1c2Vycy5zZi5uZXQ+Citjb21taXQgMWI4YThlMjBlMzQ0ZjNjNTU0OTVhYjZlYjQ2YmQxNGU4NDNkNGIzZQorQXV0aG9yOiBaYWNoYXJ5IFdhbGRvd3NraSA8emFjaEB3YWxkb3dza2kubWU+CitEYXRlOiAgIFRodSBKYW4gOSAxMzo1NToyMSAyMDE0IC0wNTAwCiAKLQkqIHNyYy9wb3dlcnBjL2Rhcndpbi5TOiBGaXggdW5rbm93biBGREUgZW5jb2RpbmcuCi0JKiBzcmMvcG93ZXJwYy9kYXJ3aW5fY2xvc3VyZS5TOiBkaXR0by4KKyAgICBEYXJ3aW4vYWFyY2g2NDogVXNlIENsYW5nIGNhY2hlIGludmFsaWRhdGlvbiBidWlsdGluCiAKLTIwMTEtMDItMjUgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK2NvbW1pdCA2MDMwY2RjYWU3NzZmOGZiNTg3NmE1MzE2OGY3ZDFlNzVkMjhhMjQyCitBdXRob3I6IFphY2hhcnkgV2FsZG93c2tpIDx6YWNoQHdhbGRvd3NraS5tZT4KK0RhdGU6ICAgTW9uIERlYyAzMCAxNTo0NTo1MSAyMDEzIC0wNTAwCiAKLQkqIHNyYy9wb3dlcnBjL2ZmaS5jIChmZmlfcHJlcF9jbG9zdXJlX2xvYyk6IEFsbG93IGZvciBtb3JlCi0JMzItYml0IEFCSXMuCisgICAgRGFyd2luL2FhcmNoNjQ6IEFjY291bnQgZm9yIGxvbmcgZG91YmxlIGJlaW5nIGVxdWFsIHRvIGRvdWJsZQogCi0yMDExLTAyLTE1ICBBbnRob255IEdyZWVuICA8Z3JlZW5AbW94aWVsb2dpYy5jb20+Citjb21taXQgNTY1OGIwODkyNjgzZDJlMjRlNGQ1ODQyOTc4YzE4NGE3YWQzMzg1OAorQXV0aG9yOiBaYWNoYXJ5IFdhbGRvd3NraSA8emFjaEB3YWxkb3dza2kubWU+CitEYXRlOiAgIE1vbiBEZWMgMzAgMTY6MzM6NDcgMjAxMyAtMDUwMAogCi0JKiBtNC9heF9jY19tYXhvcHQubTQ6IERvbid0IC1tYWxpZ24tZG91YmxlIG9yIHVzZSAtZmZhc3QtbWF0aC4KLQkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKyAgICBEYXJ3aW4vYWFyY2g2NDogVXNlIENOQU1FLCByZXN0cmljdCAuc2l6ZSBsaWtlIEFSTQogCi0yMDExLTAyLTEzICBSYWxmIFdpbGRlbmh1ZXMgIDxSYWxmLldpbGRlbmh1ZXNAZ214LmRlPgorY29tbWl0IDA3MTc1NzgwODAyYWNlYzVkYzQ5ZmRlZGQ2ZDIwYTYyNDA5YTY3MDcKK0F1dGhvcjogWmFjaGFyeSBXYWxkb3dza2kgPHphY2hAd2FsZG93c2tpLm1lPgorRGF0ZTogICBNb24gRGVjIDMwIDE3OjQ4OjIyIDIwMTMgLTA1MDAKIAotCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorICAgIERhcndpbi9hYXJjaDY0OiBGaXggaW52YWxpZCByZWZlcmVuY2UgaW4gYXNzZW1ibHkKIAotMjAxMS0wMi0xMyAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQG1veGllbG9naWMuY29tPgorY29tbWl0IDlkYTI4YjQ0Mjc3ZmVhM2FlYjgyN2MzNWRkNjNkNjA5ZDI1MjRhOGIKK0F1dGhvcjogWmFjaGFyeSBXYWxkb3dza2kgPHphY2hAd2FsZG93c2tpLm1lPgorRGF0ZTogICBNb24gRGVjIDMwIDE2OjIzOjIxIDIwMTMgLTA1MDAKIAotCSogaW5jbHVkZS9mZmlfY29tbW9uLmggKFVOTElLRUxZLCBMSUtFTFkpOiBEZWZpbmUuCi0JKiBzcmMveDg2L2ZmaTY0LmMgKFVOTElLRUxZLCBMSUtFTFkpOiBSZW1vdmUgZGVmaW5pdGlvbi4KLQkqIHNyYy9wcmVwX2NpZi5jIChVTkxJS0VMWSwgTElLRUxZKTogUmVtb3ZlIGRlZmluaXRpb24uCisgICAgRGFyd2luL3g4Nl82NDogRml4IDY0LWJpdCB0eXBlIHNob3J0ZW5pbmcgd2FybmluZ3MKIAotCSogc3JjL3ByZXBfY2lmLmMgKGluaXRpYWxpemVfYWdncmVnYXRlKTogQ29udmVydCBhc3NlcnRpb24gaW50bwotCUZGSV9CQURfVFlQRURFRiByZXR1cm4uICBJbml0aWFsaXplIGFyZyBzaXplIGFuZCBhbGlnbm1lbnQgdG8gMC4KK2NvbW1pdCA4MjFkMzk4ZjA4YmQxZDU0MGE1YjIzNTUwNzgxMmZmZWVlNDliNTgwCitBdXRob3I6IFphY2hhcnkgV2FsZG93c2tpIDx6YWNoQHdhbGRvd3NraS5tZT4KK0RhdGU6ICAgVGh1IEphbiA5IDEzOjE1OjA2IDIwMTQgLTA1MDAKIAotCSogc3JjL3BhL2ZmaS5jIChmZmlfcHJlcF9jbG9zdXJlX2xvYyk6IERvbid0IEFTU0VSVCBBQkkgdGVzdCwKLQlqdXN0IHJldHVybiBGRklfQkFEX0FCSSB3aGVuIHRoaW5ncyBhcmUgd3JvbmcuCi0JKiBzcmMvYXJtL2ZmaS5jIChmZmlfcHJlcF9jbG9zdXJlX2xvYyk6IERpdHRvLgotCSogc3JjL3Bvd2VycGMvZmZpLmMgKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKTogRGl0dG8uCi0JKiBzcmMvbWlwcy9mZmkuYyAoZmZpX3ByZXBfY2xvc3VyZV9sb2MpOiBEaXR0by4KLQkqIHNyYy9pYTY0L2ZmaS5jIChmZmlfcHJlcF9jbG9zdXJlX2xvYyk6IERpdHRvLgotCSogc3JjL2F2cjMyL2ZmaS5jIChmZmlfcHJlcF9jbG9zdXJlX2xvYyk6IERpdHRvLgorICAgIERhcndpbjogTWVyZ2UgYnVpbGQgc2NyaXB0cywgcmVkbyBwcm9qZWN0LCBpbmNsLiBhcm02NAogCi0yMDExLTAyLTExICBBbnRob255IEdyZWVuICA8Z3JlZW5AbW94aWVsb2dpYy5jb20+Citjb21taXQgNmVmZjlmZjllNzI0NjNiOTc4M2JlMjUxNGY5NDRiNmYwNTY5MjA1NAorQXV0aG9yOiBaYWNoYXJ5IFdhbGRvd3NraSA8emFjaEB3YWxkb3dza2kubWU+CitEYXRlOiAgIE1vbiBEZWMgMzAgMTc6NDg6MTAgMjAxMyAtMDUwMAogCi0JKiBzcmMvc3BhcmMvZmZpLmMgKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKTogRG9uJ3QgQVNTRVJUIEFCSSB0ZXN0LAotCWp1c3QgcmV0dXJuIEZGSV9CQURfQUJJIHdoZW4gdGhpbmdzIGFyZSB3cm9uZy4KKyAgICBEYXJ3aW4vaU9TOiBJbXByb3ZlIHVuaWZpZWQgc3ludGF4IHVzZSBmb3IgTExWTQogCi0yMDEyLTAyLTExICBFcmljIEJvdGNhem91ICA8ZWJvdGNhem91QGFkYWNvcmUuY29tPgorY29tbWl0IGJhMGVhOTljODJhYWRkNTk1NzM4NmEwMzFlMzEyMjAxMWJkMzZkNTIKK0F1dGhvcjogWmFjaGFyeSBXYWxkb3dza2kgPHphY2hAd2FsZG93c2tpLm1lPgorRGF0ZTogICBNb24gRGVjIDMwIDE1OjI3OjQ0IDIwMTMgLTA1MDAKIAotCSogc3JjL3NwYXJjL3Y5LlMgKFNUQUNLRlJBTUUpOiBCdW1wIHRvIDE3Ni4KKyAgICBGaXggZGxtYWxsb2Mgd2FybmluZ3MgZHVlIHRvIHNldF9zZWdtZW50X2ZsYWdzLCBzaXplb2Yoc2l6ZV90KQogCi0yMDExLTAyLTA5ICBTdHVhcnQgU2hlbHRvbiAgPHNyY3NoZWx0b25AZ21haWwuY29tPgorY29tbWl0IDk5NGJlM2E1YzFkMGQxN2IxOTEwMzM5NjEwM2UxMjg1MTdmZDYyZjkKK0F1dGhvcjogWmFjaGFyeSBXYWxkb3dza2kgPHphY2hAd2FsZG93c2tpLm1lPgorRGF0ZTogICBNb24gRGVjIDMwIDE1OjI3OjE0IDIwMTMgLTA1MDAKIAotCWh0dHA6Ly9idWdzLmdlbnRvby5vcmcvc2hvd19idWcuY2dpP2lkPTI4NjkxMQotCSogc3JjL21pcHMvZmZpdGFyZ2V0Lmg6IENsZWFuIHVwIGVycm9yIG1lc3NhZ2VzLgotCSogc3JjL2phdmFfcmF3X2FwaS5jIChmZmlfamF2YV90cmFuc2xhdGVfYXJncyk6IENhc3QgcmF3IGFyZyB0bwotCWZmaV9yYXcqLgotCSogaW5jbHVkZS9mZmkuaC5pbjogQWRkIHByYWdtYSBmb3IgU0dJIGNvbXBpbGVyLgorICAgIERhcndpbi9pT1M6IEZpeCBtaXMtdHlwaW5nIG9mIHZmcF9yZWdfZnJlZQogCi0yMDExLTAyLTA5ICBBbnRob255IEdyZWVuICA8Z3JlZW5AbW94aWVsb2dpYy5jb20+Citjb21taXQgYThlMGE4MzVhYjFmNjJkMDNhZDYzOTE3NjBlM2U4Yjc3MzJkMjRmOAorQXV0aG9yOiBaYWNoYXJ5IFdhbGRvd3NraSA8emFjaEB3YWxkb3dza2kubWU+CitEYXRlOiAgIE1vbiBEZWMgMzAgMTU6MjY6MjAgMjAxMyAtMDUwMAogCi0JKiBjb25maWd1cmUuYWM6IEFkZCBwb3dlcnBjNjQtKi1kYXJ3aW4qIHN1cHBvcnQuCisgICAgRGFyd2luL0FSTTogQXNzZXJ0IG9uIE5VTEwgZGVyZWZlcmVuY2UKKyAgICAKKyAgICBUaGlzIGluaGliaXRzIGFuIGFuYWx5emVyIHdhcm5pbmcgYnkgQ2xhbmcgb24gYWxsIHBsYXRmb3Jtcy4KIAotMjAxMS0wMi0wOSAgQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+Citjb21taXQgMTM2NzUzNDE1ODFjNDg5ZWQ5ZGY4YmEzOTBjOGUwOGE3MzJkZWNiMgorQXV0aG9yOiBaYWNoYXJ5IFdhbGRvd3NraSA8emFjaEB3YWxkb3dza2kubWU+CitEYXRlOiAgIFRodSBKYW4gOSAxMzo0MjowOCAyMDE0IC0wNTAwCiAKLQkqIFJFQURNRTogTWVudGlvbiBJbnRlcml4LgorICAgIERhcndpbi9pMzg2OiBJbmhpYml0IENsYW5nIHByZXZpb3VzIHByb3RvdHlwZSB3YXJuaW5ncwogCi0yMDExLTAyLTA5ICBKb25hdGhhbiBDYWxsZW4gIDxhYmNkQGdlbnRvby5vcmc+Citjb21taXQgNjY0NjljMzgxZTJlMmNjOTZlN2Q0MDkyNjZkZWEwZmZlMTc3ZWVjYQorQXV0aG9yOiBaYWNoYXJ5IFdhbGRvd3NraSA8emFjaEB3YWxkb3dza2kubWU+CitEYXRlOiAgIFRodSBKYW4gOSAxMzo0MTo0NSAyMDE0IC0wNTAwCiAKLQkqIGNvbmZpZ3VyZS5hYzogQWRkIEludGVyaXggdG8gd2luMzIvY3lnd2luL21pbmd3IGNhc2UuCi0JKiBjb25maWd1cmU6IERpdHRvLgotCSogc3JjL2Nsb3N1cmVzLmM6IFRyZWF0IEludGVyaXggbGlrZSBDeWd3aW4sIGluc3RlYWQgb2YgYXMgYQotCWdlbmVyaWMgd2luMzIuCisgICAgRGFyd2luL0FSTTogSW5oaWJpdCBDbGFuZyBwcmV2aW91cyBwcm90b3R5cGUgd2FybmluZ3MKIAotMjAxMS0wMi0wOSAgQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+Citjb21taXQgNWJmZTYyYTAwZDJkNjU5ZWVjOWYxOWIzOTgwMmI2ZTY5ODQ0ZmMyNworQXV0aG9yOiBaYWNoYXJ5IFdhbGRvd3NraSA8emFjaEB3YWxkb3dza2kubWU+CitEYXRlOiAgIFRodSBKYW4gOSAxMzo0MToyNyAyMDE0IC0wNTAwCiAKLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9lcnJfYmFkX3R5cGVkZWYuYzogUmVtb3ZlIHhmYWlsLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Vycl9iYWRfYWJpLmM6IFJlbW92ZSB4ZmFpbC4KLQkqIHNyYy94ODYvZmZpNjQuYyAoVU5MSUtFTFksIExJS0VMWSk6IERlZmluZS4KLQkoZmZpX3ByZXBfY2xvc3VyZV9sb2MpOiBDaGVjayBmb3IgYmFkIEFCSS4KLQkqIHNyYy9wcmVwX2NpZi5jIChVTkxJS0VMWSwgTElLRUxZKTogRGVmaW5lLgotCShpbml0aWFsaXplX2FnZ3JlZ2F0ZSk6IENoZWNrIGZvciBiYWQgdHlwZXMuCisgICAgRGFyd2luL0FBcmNoNjQ6IEluaGliaXQgQ2xhbmcgcHJldmlvdXMgcHJvdG90eXBlIHdhcm5pbmdzCiAKLTIwMTEtMDItMDkgIExhbmRvbiBGdWxsZXIgPGxhbmRvbmZAcGxhdXNpYmxlLmNvb3A+Citjb21taXQgZmE1ZjI1YzIwZjc2YTZlZjVlOTUwYTdjY2JjZTgyNjY3MmM4YTYyMAorQXV0aG9yOiBNYXJjdXMgQ29tc3RlZHQgPG1hcmN1c0BtYy5wcC5zZT4KK0RhdGU6ICAgU2F0IEphbiA0IDE5OjAwOjA4IDIwMTQgKzAxMDAKIAotCSogTWFrZWZpbGUuYW0gKEVYVFJBX0RJU1QpOiBBZGQgYnVpbGQtaW9zLnNoLCBzcmMvYXJtL2dlbnRyYW1wLnNoLAotCXNyYy9hcm0vdHJhbXBvbGluZS5TLgotCShub2Rpc3RfbGliZmZpX2xhX1NPVVJDRVMpOiBBZGQgc3JjL2FyYy90cmFtcG9saW5lLlMuCi0JKiBjb25maWd1cmUuYWMgKEZGSV9FWEVDX1RSQU1QT0xJTkVfVEFCTEUpOiBEZWZpbmUuCi0JKiBzcmMvYXJtL2ZmaS5jIChmZmlfdHJhbXBvbGluZV90YWJsZSkKLQkoZmZpX2Nsb3N1cmVfdHJhbXBvbGluZV90YWJsZV9wYWdlLCBmZmlfdHJhbXBvbGluZV90YWJsZV9lbnRyeSkKLQkoRkZJX1RSQU1QT0xJTkVfQ09ERUxPQ19DT05GSUcsIEZGSV9UUkFNUE9MSU5FX0NPTkZJR19QQUdFX09GRlNFVCkKLQkoRkZJX1RSQU1QT0xJTkVfQ09VTlQsIGZmaV90cmFtcG9saW5lX2xvY2ssIGZmaV90cmFtcG9saW5lX3RhYmxlcykKLQkoZmZpX3RyYW1wb2xpbmVfdGFibGVfYWxsb2MsIGZmaV9jbG9zdXJlX2FsbG9jLCBmZmlfY2xvc3VyZV9mcmVlKToKLQlEZWZpbmUgZm9yIEZGSV9FWEVDX1RSQU1QT0xJTkVfVEFCTEUgY2FzZSAoaU9TKS4KLQkoZmZpX3ByZXBfY2xvc3VyZV9sb2MpOiBIYW5kbCBGRklfRVhFQ19UUkFNUE9MSU5FX1RBQkxFIGNhc2UKLQlzZXBhcmF0ZWx5LgotCSogc3JjL2FybS9zeXN2LlM6IEhhbmRsZSBBcHBsZSBpT1MgaG9zdC4KLQkqIHNyYy9jbG9zdXJlcy5jOiBIYW5kbGUgRkZJX0VYRUNfVFJBTVBPTElORV9UQUJMRSBjYXNlLgotCSogYnVpbGQtaW9zLnNoOiBOZXcgZmlsZS4KLQkqIGZmaWNvbmZpZy5oLmluLCBjb25maWd1cmUsIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgotCSogUkVBRE1FOiBNZW50aW9uIEFSTSBpT1MuCisgICAgTGludXgvcHBjNjQ6IFJlbW92ZSBhc3N1bXB0aW9uIG9uIGNvbnRlbnRzIG9mIHIxMSBpbiBjbG9zdXJlCiAKLTIwMTEtMDItMDggIE9yZW4gSGVsZCAgPG9yZW5oZUBpbC5pYm0uY29tPgorY29tbWl0IDFhMGIwMWUxNzFlOWM3NTA0MzdjZWYyZjE4OTE3ZjVhNmUzMmM0OTgKK0F1dGhvcjogUGF1bG8gUGl6YXJybyA8cGF1bG8ucGl6YXJyb0BnbWFpbC5jb20+CitEYXRlOiAgIFRodSBKYW4gMiAxNjoxNzo1OSAyMDE0IC0wMjAwCiAKLQkqIHNyYy9kbG1hbGxvYy5jIChfU1RSVUNUX01BTExJTkZPKTogRGVmaW5lIGluIG9yZGVyIHRvIGF2b2lkCi0JcmVkZWZpbml0aW9uIG9mIG1hbGxpbmZvIG9uIEhQLVVYLgorICAgIFdoZW4gdGhlIGZ1bmN0aW9uIGNhbGxlZCBieSB0aGUgZmZpIGNhbGxlZCBhIGZ1bmN0aW9uIGRlZmluZWQgaW4gYSBzaGFyZWQgbGlicmFyeSBnZW5lcmF0ZSBhIGZhdGFsIGVycm9yCisgICAgVGhlIGNvcnJlY3Rpb24gd2FzIHRvIHRha2UgaW50byBjb25zaWRlcmF0aW9uIHRoZSBHT1QuCiAKLTIwMTEtMDItMDggIEdpbm4gQ2hlbiAgPGdpbm4uY2hlbkBvcmFjbGUuY29tPgorY29tbWl0IDNkYzNmMzJjMzVkYjVhYjk5NWE4MzUyMjVmNjgxNTM2OTczNWNlYjcKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFRodSBEZWMgNSAxNjoyMzoyNSAyMDEzIC0wNTAwCiAKLQkqIHNyYy9zcGFyYy9mZmkuYyAoZmZpX2NhbGwpOiBNYWtlIGNvbXBhdGlibGUgd2l0aCBTb2xhcmlzIFN0dWRpbwotCWFnZ3JlZ2F0ZSByZXR1cm4gQUJJLiAgRmx1c2ggY2FjaGUuCi0JKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKTogRmx1c2ggY2FjaGUuCisgICAgVW5kbyBpT1MgQVJNNjQgY2hhbmdlcy4KIAotMjAxMS0wMi0xMSAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQG1veGllbG9naWMuY29tPgorY29tbWl0IDM1NmIyY2JjMzA0YmZlNWJkYzI4YjhkMWM2OGQxZmYwODRlOWVjMzcKK01lcmdlOiA0ODRhNzU4IDA3MzQ1YTMKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFNhdCBOb3YgMzAgMjI6Mzg6MTMgMjAxMyAtMDUwMAogCi0JRnJvbSBUb20gSG9uZXJtYW5uIDx0b20uaG9uZXJtYW5uQG9yYWNsZS5jb20+OgotCSogc3JjL3Bvd2VycGMvYWl4LlMgKGZmaV9jYWxsX0FJWCk6IFN1cHBvcnQgZm9yIHhsYyB0b29sY2hhaW4gb24KLQlBSVguICBEZWNsYXJlIC5mZmlfcHJlcF9hcmdzLiAgSW5zZXJ0IG5vcHMgYWZ0ZXIgYnJhbmNoCi0JaW5zdHJ1Y3Rpb25zIHNvIHRoYXQgdGhlIEFJWCBsaW5rZXIgY2FuIGluc2VydCBUT0MgcmVsb2FkCi0JaW5zdHJ1Y3Rpb25zLgotCSogc3JjL3Bvd2VycGMvYWl4X2Nsb3N1cmUuUzogRGVjbGFyZSAuZmZpX2Nsb3N1cmVfaGVscGVyX0RBUldJTi4KKyAgICBNZXJnZSBicmFuY2ggJ21hc3Rlcicgb2YgZ2l0aHViLmNvbTovYXRncmVlbi9saWJmZmkKIAotMjAxMS0wMi0wOCAgRWQgIDxlZEBrZHRjLm5ldD4KK2NvbW1pdCA0ODRhNzU4NDI2MGUyZmJiMzk5Y2U5MDA4MzA0NjgzNDI3MWJmOWZmCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTYXQgTm92IDMwIDIxOjA2OjUxIDIwMTMgLTA1MDAKIAotCSogc3JjL3Bvd2VycGMvYXNtLmg6IEZpeCBncmFtbWFyIG5pdCBpbiBjb21tZW50LgorICAgIE1lbnRpb24gQWFyY2g2NCBvbiBpT1MKIAotMjAxMS0wMi0wOCAgVWxpIExpbmsgIDx1bC5tY2FtYWZpYUBsaW5raXR1cC5kZT4KK2NvbW1pdCAwNzM0NWEzMGVjMGEyZmE0NWE3YzM2M2QzMDFmNTc3MjM2OTBjZmEwCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTYXQgTm92IDMwIDIxOjA2OjUxIDIwMTMgLTA1MDAKIAotCSogaW5jbHVkZS9mZmkuaC5pbiAoRkZJXzY0X0JJVF9NQVgpOiBEZWZpbmUgYW5kIHVzZS4KKyAgICBNZW50aW9uIEFhcmNoNjQgb24gaU9TCiAKLTIwMTEtMDItMDkgIFJhaW5lciBPcnRoICA8cm9AQ2VCaVRlYy5VbmktQmllbGVmZWxkLkRFPgorY29tbWl0IGQ0YjkzMWMxYjg3MjM3OGMzNWYxMmRkYmI5YTZkNTVlN2YxN2M2NWUKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFNhdCBOb3YgMzAgMjA6NTg6MzEgMjAxMyAtMDUwMAogCi0JUFIgbGliZmZpLzQ2NjYxCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3BvaW50ZXIuYyAobWFpbik6IENhc3Qgdm9pZCAqIHRvCi0JdWludHB0cl90IGZpcnN0LgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19wb2ludGVyX3N0YWNrLmMgKG1haW4pOiBMaWtld2lzZS4KKyAgICBSZW1vdmUgYnVpbGQtaW9zIGZyb20gTWFrZWZpbGUKIAotMjAxMS0wMi0wOCAgUmFmYWVsIEF2aWxhIGRlIEVzcGluZG9sYSAgPHJlc3BpbmRvbGFAbW96aWxsYS5jb20+Citjb21taXQgZGZiZjIzNmQ3MGZjMWVjNjhlNmZmMTkzNTg0YTE1NDM1MzUwOGUyZgorTWVyZ2U6IDg1MmFjM2IgYmI5NzQwZQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU2F0IE5vdiAzMCAyMDo1NDo1NCAyMDEzIC0wNTAwCiAKLQkqIGNvbmZpZ3VyZS5hYzogRml4IHg4NiB0ZXN0IGZvciBwYyByZWxhdGVkIHJlbG9jcy4KLQkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKyAgICBNZXJnZSBicmFuY2ggJ21hc3Rlcicgb2YgZ2l0aHViLmNvbTovYXRncmVlbi9saWJmZmkKKyAgICBBZGQgQ2hhbmdlTG9nIGVudHJ5LgogCi0yMDExLTAyLTA3ICBKb2VsIFNoZXJyaWxsIDxqb2VsLnNoZXJyaWxsQG9hcmNvcnAuY29tPgorY29tbWl0IGJiOTc0MGU1NDUyMDVmOTNhNTI1Yzc3YWE2ZDFjYmY0Y2E5MzcxZjMKK01lcmdlOiBhYzc1MzY4IDRkNzAxZTAKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFNhdCBOb3YgMzAgMTc6NTQ6MzkgMjAxMyAtMDgwMAogCi0JKiBsaWJmZmkvc3JjL202OGsvZmZpLmM6IEFkZCBSVEVNUyBzdXBwb3J0IGZvciBjYWNoZSBmbHVzaGluZy4KLQlIYW5kbGUgY2FzZSB3aGVuIENQVSB2YXJpYW50IGRvZXMgbm90IGhhdmUgbG9uZyBkb3VibGUgc3VwcG9ydC4KLQkqIGxpYmZmaS9zcmMvbTY4ay9zeXN2LlM6IEFkZCBzdXBwb3J0IGZvciBtYzY4MDAwLCBDb2xkZmlyZSwKLQlhbmQgY29yZXMgd2l0aCBzb2Z0IGZsb2F0aW5nIHBvaW50LgorICAgIE1lcmdlIHB1bGwgcmVxdWVzdCAjNjAgZnJvbSB6d2FsZG93c2tpL2lvcy1yZWRvCisgICAgCisgICAgTWFjL2lPUyBzdXBwb3J0LCBpbmNsdWRpbmcgYWFyY2g2NCBwb3J0CiAKLTIwMTEtMDItMDcgIEpvZWwgU2hlcnJpbGwgPGpvZWwuc2hlcnJpbGxAb2FyY29ycC5jb20+Citjb21taXQgNGQ3MDFlMDNmYWE0NzVhNWViM2I1NGI5MDA0NjExNGExZTI3YjgxMworQXV0aG9yOiBaYWNoYXJ5IFdhbGRvd3NraSA8endhbGRvd3NraUBnbWFpbC5jb20+CitEYXRlOiAgIFNhdCBOb3YgMzAgMTM6MjU6MjcgMjAxMyAtMDUwMAogCi0JKiBjb25maWd1cmUuYWM6IEFkZCBtaXBzKi0qLXJ0ZW1zKiBzdXBwb3J0LgotCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgotCSogc3JjL21pcHMvZmZpdGFyZ2V0Lmg6IEVuc3VyZSBuZWVkZWQgY29uc3RhbnRzIGFyZSBhdmFpbGFibGUKLQlmb3IgdGFyZ2V0cyB3aGljaCBkbyBub3QgaGF2ZSBzZ2lkZWZzLmguCisgICAgRGFyd2luOiBQcm9wZXJseSBleHBvcnQgaGVhZGVycyBmcm9tIFhjb2RlIHByb2plY3QKIAotMjAxMS0wMS0yNiAgRGF2ZSBLb3JuICA8ZGF2ZS5rb3JuLmN5Z3dpbkBnbWFpbC5jb20+Citjb21taXQgMDIyZjEyZWI5YWQyMjY0ZTgzOGZhNWZiNDUzNzMzZjUxNzc4ODhmNAorQXV0aG9yOiBaYWNoYXJ5IFdhbGRvd3NraSA8endhbGRvd3NraUBnbWFpbC5jb20+CitEYXRlOiAgIFNhdCBOb3YgMzAgMTI6MjE6MzggMjAxMyAtMDUwMAogCi0JUFIgdGFyZ2V0LzQwMTI1Ci0JKiBjb25maWd1cmUuYWMgKEFNX0xUTERGTEFHUyk6IEFkZCAtYmluZGlyIG9wdGlvbiBmb3Igd2luZG93cyBETExzLgotCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorICAgIERhcndpbjogRnJlc2hlbiBnZW4gc2NyaXB0cywgcmVtb3ZlIG9sZCBidWlsZC1pb3Muc2gKIAotMjAxMC0xMi0xOCAgSWFpbiBTYW5kb2UgIDxpYWluc0BnY2MuZ251Lm9yZz4KK2NvbW1pdCBlODIwZmUyMDI1ZDdhZDNkZjc1ODQ0MDc5NDZkZmFhZDJhZjY5NTk5CitBdXRob3I6IFphY2hhcnkgV2FsZG93c2tpIDx6d2FsZG93c2tpQGdtYWlsLmNvbT4KK0RhdGU6ICAgU2F0IE5vdiAzMCAxMjowMzo1MSAyMDEzIC0wNTAwCiAKLQlQUiBsaWJmZmkvMjkxNTIKLQlQUiBsaWJmZmkvNDIzNzgKLQkqIHNyYy9wb3dlcnBjL2Rhcndpbl9jbG9zdXJlLlM6IFByb3ZpZGUgRGFyd2luNjQgaW1wbGVtZW50YXRpb24sCi0JdXBkYXRlIGNvbW1lbnRzLgotCSogc3JjL3Bvd2VycGMvZmZpdGFyZ2V0LmggKFBPV0VSUENfREFSV0lONjQpOiBOZXcsCi0JKEZGSV9UUkFNUE9MSU5FX1NJWkUpOiBVcGRhdGUgZm9yIERhcndpbjY0LgotCSogc3JjL3Bvd2VycGMvZGFyd2luLlM6IFByb3ZpZGUgRGFyd2luNjQgaW1wbGVtZW50YXRpb24sCi0JdXBkYXRlIGNvbW1lbnRzLgotCSogc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jOiBMaWtld2lzZS4KKyAgICBEYXJ3aW4vaU9TOiBJbmNsdWRlIHg4Nl82NCthYXJjaDY0IHBpZWNlcyBpbiBsaWJyYXJ5CiAKLTIwMTAtMTItMDYgIFJhaW5lciBPcnRoICA8cm9AQ2VCaVRlYy5VbmktQmllbGVmZWxkLkRFPgorY29tbWl0IDAyNzgyODRlNDcwZWM5MWRiN2NkYzE1YWMzZGNkNjQ2ODMzMDU4NDgKK0F1dGhvcjogWmFjaGFyeSBXYWxkb3dza2kgPHp3YWxkb3dza2lAZ21haWwuY29tPgorRGF0ZTogICBTYXQgTm92IDMwIDAzOjAzOjM3IDIwMTMgLTA1MDAKIAotCSogY29uZmlndXJlLmFjIChsaWJmZmlfY3ZfYXNfYXNjaWlfcHNldWRvX29wKTogVXNlIGRvdWJsZQotCWJhY2tzbGFzaGVzLgotCShsaWJmZmlfY3ZfYXNfc3RyaW5nX3BzZXVkb19vcCk6IExpa2V3aXNlLgotCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorICAgIERhcndpbi9hYXJjaDY0OiBzaXplX3QgYXNzdW1wdGlvbnMKIAotMjAxMC0xMi0wMyAgQ2h1bmctTGluIFRhbmcgIDxjbHRhbmdAY29kZXNvdXJjZXJ5LmNvbT4KK2NvbW1pdCA5Nzc1NDQ2YjY0NDFjOTFjZDkwNTkyMTVjMTA2YWEzYmNmOTQ5NzY3CitBdXRob3I6IFphY2hhcnkgV2FsZG93c2tpIDx6d2FsZG93c2tpQGdtYWlsLmNvbT4KK0RhdGU6ICAgU2F0IE5vdiAzMCAwMjozOTozNCAyMDEzIC0wNTAwCiAKLQkqIHNyYy9hcm0vc3lzdi5TIChmZmlfY2xvc3VyZV9TWVNWKTogQWRkIFVOV0lORCB0byAucGFkIGRpcmVjdGl2ZS4KLQkoZmZpX2Nsb3N1cmVfVkZQKTogU2FtZS4KLQkoZmZpX2NhbGxfVkZQKTogTW92ZSBkb3duIHRvIGJlZm9yZSBmZmlfY2xvc3VyZV9WRlAuIEFkZCAnLmZwdSB2ZnAnCi0JZGlyZWN0aXZlLgorICAgIERhcndpbi9hYXJjaDY0OiBGaXgg4oCcc2hhZG93cyBkZWNsYXJhdGlvbuKAnSB3YXJuaW5ncwogCi0yMDEwLTEyLTAxICBSYWluZXIgT3J0aCAgPHJvQENlQmlUZWMuVW5pLUJpZWxlZmVsZC5ERT4KK2NvbW1pdCA0MjYwYmFkYzM3NzA1ZDM2MThlNzc0ZGZlNjExODRhYzcwOTg4MWMxCitBdXRob3I6IFphY2hhcnkgV2FsZG93c2tpIDx6d2FsZG93c2tpQGdtYWlsLmNvbT4KK0RhdGU6ICAgU2F0IE5vdiAzMCAwMjowODoxNCAyMDEzIC0wNTAwCiAKLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mZml0ZXN0LmggW19fc2dpXSAoUFJJZDY0LCBQUkl1NjQpOiBEZWZpbmUuCi0JKFBSSXVQVFIpOiBEZWZpbmUuCisgICAgRGFyd2luL2FhcmNoNjQ6IFVzZSBDbGFuZyBjYWNoZSBpbnZhbGlkYXRpb24gYnVpbHRpbgogCi0yMDEwLTExLTI5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEByZWRoYXQuY29tPgotCSAgICBSYWluZXIgT3J0aCAgPHJvQENlQmlUZWMuVW5pLUJpZWxlZmVsZC5ERT4KK2NvbW1pdCA5ZmE3OTk4ZDVmOTI1MDkwOGNiZjEyYTY3MTQ3OTg1MmViYWRmOWQxCitBdXRob3I6IFphY2hhcnkgV2FsZG93c2tpIDx6d2FsZG93c2tpQGdtYWlsLmNvbT4KK0RhdGU6ICAgU2F0IE5vdiAzMCAwMjowNzo0OCAyMDEzIC0wNTAwCiAKLQkqIHNyYy94ODYvc3lzdi5TIChGREVfRU5DT0RJTkcsIEZERV9FTkNPREUpOiBEZWZpbmUuCi0JKC5laF9mcmFtZSk6IFVzZSBGREVfRU5DT0RJTkcuCi0JKC5MQVNGREUxLCAuTEFTRkRFMiwgTEFTRkRFMyk6IFNpbXBsaWZ5IHdpdGggRkRFX0VOQ09ERS4KKyAgICBEYXJ3aW4vYWFyY2g2NDogSW5oaWJpdCBYY29kZSB3YXJuaW5nCiAKLTIwMTAtMTEtMjIgIEphY2VrIENhYmFuIDxqYWNla0Bjb2Rld2VhdmVycy5jb20+Citjb21taXQgMGU4MzIwNDhhOTM4MzA1NzViMDk3NjQwNjQ0NGUxMzRlNjQ5YTRmNworQXV0aG9yOiBaYWNoYXJ5IFdhbGRvd3NraSA8endhbGRvd3NraUBnbWFpbC5jb20+CitEYXRlOiAgIFNhdCBOb3YgMzAgMDI6MDc6MzQgMjAxMyAtMDUwMAogCi0JKiBjb25maWd1cmUuYWM6IENoZWNrIGZvciBzeW1ib2wgdW5kZXJzY29yZXMgb24gbWluZ3ctdzY0LgotCSogY29uZmlndXJlOiBSZWJ1aWx0LgotCSogc3JjL3g4Ni93aW42NC5TOiBDb3JyZWN0bHkgYWNjZXNzIGV4dGVybiBzeW1ib2xzIGluIHJlc3BlY3QgdG8KLQl1bmRlcnNjb3Jlcy4KKyAgICBEYXJ3aW4vYWFyY2g2NDogZG91YmxlID09IGxvbmcgZG91YmxlCiAKLTIwMTAtMTEtMTUgIFJhaW5lciBPcnRoICA8cm9AQ2VCaVRlYy5VbmktQmllbGVmZWxkLkRFPgorY29tbWl0IDYwMmRjMjJkNzY5MzEwOTI2MTAyMzRjZjA2M2Y5ZjFiOGRiYzFhNTEKK0F1dGhvcjogWmFjaGFyeSBXYWxkb3dza2kgPHp3YWxkb3dza2lAZ21haWwuY29tPgorRGF0ZTogICBTYXQgTm92IDMwIDAyOjA2OjAwIDIwMTMgLTA1MDAKIAotCSogdGVzdHN1aXRlL2xpYi9saWJmZmktZGcuZXhwOiBSZW5hbWUgLi4uCi0JKiB0ZXN0c3VpdGUvbGliL2xpYmZmaS5leHA6IC4uLiB0byB0aGlzLgotCSogbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jYWxsLmV4cDogRG9uJ3QgbG9hZCBsaWJmZmktZGcuZXhwLgotCSogbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC9zcGVjaWFsLmV4cDogTGlrZXdpc2UuCisgICAgRGFyd2luL2lPUyBwcmVwIHNjcmlwdDogdHJ5IGFuZCBjb21waWxlIGZvciBhcm02NAogCi0yMDEwLTEwLTI4ICBDaHVuZy1MaW4gVGFuZyAgPGNsdGFuZ0Bjb2Rlc291cmNlcnkuY29tPgorY29tbWl0IGI1MTNkZmU3OWRlNDcyNWU4YTcxNzMyNWE5ZTNiNWI5ZjY5ZjYzZGMKK0F1dGhvcjogWmFjaGFyeSBXYWxkb3dza2kgPHp3YWxkb3dza2lAZ21haWwuY29tPgorRGF0ZTogICBTYXQgTm92IDMwIDAyOjA1OjIyIDIwMTMgLTA1MDAKIAotCSogc3JjL2FybS9mZmkuYyAoZmZpX3ByZXBfYXJncyk6IEFkZCBWRlAgcmVnaXN0ZXIgYXJndW1lbnQgaGFuZGxpbmcKLQljb2RlLCBuZXcgcGFyYW1ldGVyLCBhbmQgcmV0dXJuIHZhbHVlLiBVcGRhdGUgY29tbWVudHMuCi0JKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogQWRkIGNhc2UgZm9yIFZGUCBzdHJ1Y3QgcmV0dXJuIHZhbHVlcy4gQWRkCi0JY2FsbCB0byBsYXlvdXRfdmZwX2FyZ3MoKS4KLQkoZmZpX2NhbGxfU1lTVik6IFVwZGF0ZSBkZWNsYXJhdGlvbi4KLQkoZmZpX2NhbGxfVkZQKTogTmV3IGRlY2xhcmF0aW9uLgotCShmZmlfY2FsbCk6IEFkZCBWRlAgc3RydWN0IHJldHVybiBjb25kaXRpb25zLiBDYWxsIGZmaV9jYWxsX1ZGUCgpCi0Jd2hlbiBBQkkgaXMgRkZJX1ZGUC4KLQkoZmZpX2Nsb3N1cmVfVkZQKTogTmV3IGRlY2xhcmF0aW9uLgotCShmZmlfY2xvc3VyZV9TWVNWX2lubmVyKTogQWRkIG5ldyB2ZnBfYXJncyBwYXJhbWV0ZXIsIHVwZGF0ZSBjYWxsIHRvCi0JZmZpX3ByZXBfaW5jb21pbmdfYXJnc19TWVNWKCkuCi0JKGZmaV9wcmVwX2luY29taW5nX2FyZ3NfU1lTVik6IFVwZGF0ZSBwYXJhbWV0ZXJzLiBBZGQgVkZQIGFyZ3VtZW50Ci0JY2FzZSBoYW5kbGluZy4KLQkoZmZpX3ByZXBfY2xvc3VyZV9sb2MpOiBQYXNzIGZmaV9jbG9zdXJlX1ZGUCB0byB0cmFtcG9saW5lCi0JY29uc3RydWN0aW9uIHVuZGVyIFZGUCBoYXJkLWZsb2F0LgotCShyZWNfdmZwX3R5cGVfcCk6IE5ldyBmdW5jdGlvbi4KLQkodmZwX3R5cGVfcCk6IFNhbWUuCi0JKHBsYWNlX3ZmcF9hcmcpOiBTYW1lLgotCShsYXlvdXRfdmZwX2FyZ3MpOiBTYW1lLgotCSogc3JjL2FybS9mZml0YXJnZXQuaCAoZmZpX2FiaSk6IEFkZCBGRklfVkZQLiBEZWZpbmUgRkZJX0RFRkFVTFRfQUJJCi0JYmFzZWQgb24gX19BUk1fUENTX1ZGUC4KLQkoRkZJX0VYVFJBX0NJRl9GSUVMRFMpOiBEZWZpbmUgZm9yIGFkZGluZyBWRlAgaGFyZC1mbG9hdCBzcGVjaWZpYwotCWZpZWxkcy4KLQkoRkZJX1RZUEVfU1RSVUNUX1ZGUF9GTE9BVCk6IERlZmluZSBpbnRlcm5hbGx5IHVzZWQgdHlwZSBjb2RlLgotCShGRklfVFlQRV9TVFJVQ1RfVkZQX0RPVUJMRSk6IFNhbWUuCi0JKiBzcmMvYXJtL3N5c3YuUyAoZmZpX2NhbGxfU1lTVik6IENoYW5nZSBjYWxsIG9mIGZmaV9wcmVwX2FyZ3MoKSB0bwotCWRpcmVjdCBjYWxsLiBNb3ZlIGZ1bmN0aW9uIHBvaW50ZXIgbG9hZCB1cHdhcmRzLgotCShmZmlfY2FsbF9WRlApOiBOZXcgZnVuY3Rpb24uCi0JKGZmaV9jbG9zdXJlX1ZGUCk6IFNhbWUuCisgICAgRGFyd2luL2FhcmNoNjQ6IFJlc3RyaWN0IC5zaXplIHRvIEVMRiBsaWtlIGFybTMyLgogCi0JKiB0ZXN0c3VpdGUvbGliL2xpYmZmaS1kZy5leHAgKGNoZWNrLWZsYWdzKTogTmV3IGZ1bmN0aW9uLgotCShkZy1za2lwLWlmKTogTmV3IGZ1bmN0aW9uLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kb3VibGVfdmEuYzogU2tpcCBpZiB0YXJnZXQgaXMgYXJtKi0qLSoKLQlhbmQgY29tcGlsZXIgb3B0aW9ucyBpbmNsdWRlIC1tZmxvYXQtYWJpPWhhcmQuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGVfdmEuYzogU2FtZS4KK2NvbW1pdCBiYzk3ODA5OWJmMjgxMmRlNzU1YzA3NmI2N2VmOWMyNTQ3NjA3NTcyCitBdXRob3I6IFphY2hhcnkgV2FsZG93c2tpIDx6d2FsZG93c2tpQGdtYWlsLmNvbT4KK0RhdGU6ICAgU2F0IE5vdiAzMCAwMjowNDo1NyAyMDEzIC0wNTAwCiAKLTIwMTAtMTAtMDEgIEpha3ViIEplbGluZWsgIDxqYWt1YkByZWRoYXQuY29tPgorICAgIERhcndpbi9hYXJjaDY0OiBQb3RlbnRpYWxseSg/KSBmaXggY29tcGlsZSBlcnJvcgogCi0JUFIgbGliZmZpLzQ1Njc3Ci0JKiBzcmMveDg2L2ZmaTY0LmMgKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogRW5zdXJlIGNpZi0+Ynl0ZXMgaXMKLQlhIG11bHRpcGxlIG9mIDguCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbWFueTIuYzogTmV3IHRlc3QuCitjb21taXQgZDZiYjkzMTQ0NjdjNmUwNjgzMTU2NTU5ZDIzY2EzNDFjNDNmYTNjOAorQXV0aG9yOiBaYWNoYXJ5IFdhbGRvd3NraSA8endhbGRvd3NraUBnbWFpbC5jb20+CitEYXRlOiAgIFNhdCBOb3YgMzAgMDI6MDQ6MjIgMjAxMyAtMDUwMAogCi0yMDEwLTA4LTIwICBNYXJrIFdpZWxhYXJkICA8bWp3QHJlZGhhdC5jb20+CisgICAgRGFyd2luL2FhcmNoNjQ6IFVzZSBDTkFNRSByZWZzCiAKLQkqIHNyYy9jbG9zdXJlcy5jIChvcGVuX3RlbXBfZXhlY19maWxlX21udCk6IENoZWNrIGlmIGdldG1udGVudF9yCi0JcmV0dXJucyBOVUxMLgorY29tbWl0IDMzYzQ2Y2U1NjgwZWVhMjhkMzQzN2M4NzcxZWMxZDEzN2UyMjZiNDUKK0F1dGhvcjogWmFjaGFyeSBXYWxkb3dza2kgPHp3YWxkb3dza2lAZ21haWwuY29tPgorRGF0ZTogICBTYXQgTm92IDMwIDA0OjEzOjQyIDIwMTMgLTA1MDAKIAotMjAxMC0wOC0wOSAgQW5kcmVhcyBUb2JsZXIgIDxhbmRyZWFzdEBmZ3puZXQuY2g+CisgICAgRGFyd2luL01hYzogRml4IDY0LzMyIHNob3J0ZW5pbmcgd2FybmluZ3MKIAotCSogY29uZmlndXJlLmFjOiBBZGQgdGFyZ2V0IHBvd2VycGM2NC0qLWZyZWVic2QqLgotCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlX3NwbGl0LmM6IFBhc3MKLQktbWxvbmctZG91YmxlLTEyOCBvbmx5IHRvIGxpbnV4IHRhcmdldHMuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGVfc3BsaXQyLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19sb25nZG91YmxlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2h1Z2Vfc3RydWN0LmM6IExpa2V3aXNlLgorY29tbWl0IDA2MTIwODFlNmMxNjFkOWQ4MjA3NDJmOTk1OTc1ZDM1ZGEyYWRiYzIKK0F1dGhvcjogWmFjaGFyeSBXYWxkb3dza2kgPHp3YWxkb3dza2lAZ21haWwuY29tPgorRGF0ZTogICBTYXQgTm92IDMwIDAzOjAzOjAwIDIwMTMgLTA1MDAKIAotMjAxMC0wOC0wNSAgRGFuIFdpdHRlICA8ZHdpdHRlQG1vemlsbGEuY29tPgorICAgIERhcndpbjogTWlzYyBzaXplX3Qgd2FybmluZ3MKIAotICAgICAgICAqIE1ha2VmaWxlLmFtOiBQYXNzIEZGSV9ERUJVRyBkZWZpbmUgdG8gbXN2Y2Muc2ggZm9yIGxpbmtpbmcgdG8gdGhlCi0gICAgICAgIGRlYnVnIENSVCB3aGVuIC0tZW5hYmxlLWRlYnVnIGlzIGdpdmVuLgotICAgICAgICAqIGNvbmZpZ3VyZS5hYzogRGVmaW5lIGl0LgotICAgICAgICAqIG1zdmNjLnNoOiBUcmFuc2xhdGUgLWcgYW5kIC1ERkZJX0RFQlVHIGFwcHJvcHJpYXRlbHkuCitjb21taXQgNmE2MjQ3ZDE3OWVjMzg1OTMxMWMyZDg3NzU4NDFiODg0ZjMwOWY2NgorQXV0aG9yOiBaYWNoYXJ5IFdhbGRvd3NraSA8endhbGRvd3NraUBnbWFpbC5jb20+CitEYXRlOiAgIFNhdCBOb3YgMzAgMDI6NTU6NDggMjAxMyAtMDUwMAogCi0yMDEwLTA4LTA0ICBEYW4gV2l0dGUgIDxkd2l0dGVAbW96aWxsYS5jb20+CisgICAgRGFyd2luOiBGaXggZGxtYWxsb2Mgd2FybmluZ3MgZHVlIHRvIHNpemVvZihzaXplX3QpCiAKLQkqIHNyYy94ODYvZmZpdGFyZ2V0Lmg6IEFkZCBYODZfQU5ZIGRlZmluZSBmb3IgYWxsIHg4Ni94ODZfNjQKLQlwbGF0Zm9ybXMuCi0JKiBzcmMveDg2L2ZmaS5jOiBSZW1vdmUgcmVkdW5kYW50IGlmZGVmIGNoZWNrcy4KLQkqIHNyYy9wcmVwX2NpZi5jOiBQdXNoIHN0YWNrIHNwYWNlIGNvbXB1dGF0aW9uIGludG8gc3JjL3g4Ni9mZmkuYwotCWZvciBYODZfQU5ZIHNvIHJldHVybiB2YWx1ZSBzcGFjZSBkb2Vzbid0IGdldCBhZGRlZCB0d2ljZS4KK2NvbW1pdCA0ZDYwZDllMWUzMmRlNjE2NmZmZDYzYmJlOWNlNTRjZjk2MWM3OGZjCitBdXRob3I6IFphY2hhcnkgV2FsZG93c2tpIDx6d2FsZG93c2tpQGdtYWlsLmNvbT4KK0RhdGU6ICAgU2F0IE5vdiAzMCAwNDowOTozMCAyMDEzIC0wNTAwCiAKLTIwMTAtMDgtMDMgIE5laWwgUmFzaGJyb29rZSA8bmVpbEBwYXJrd2F5Y2MuY28udWs+CisgICAgRGFyd2luOiBSZWJ1aWxkIFhjb2RlIHByb2plY3QKIAotCSogbXN2Y2Muc2g6IERvbid0IHBhc3MgLXNhZmVzZWggdG8gbWw2NCBiZWNhdXNlIGJlaGF2aW9yIGlzIGJ1Z2d5LgorY29tbWl0IGNiNzE5YTVjMWMyZWIzOTFkNmE1ZjVlMDI0ODRiYTRhYTk5MGE1MWIKK0F1dGhvcjogWmFjaGFyeSBXYWxkb3dza2kgPHp3YWxkb3dza2lAZ21haWwuY29tPgorRGF0ZTogICBTYXQgTm92IDMwIDA0OjA5OjE4IDIwMTMgLTA1MDAKIAotMjAxMC0wNy0yMiAgRGFuIFdpdHRlICA8ZHdpdHRlQG1vemlsbGEuY29tPgorICAgIERhcndpbi9pT1M6IEZpeCBMTFZNIDMuMyB3YXJuaW5nIHJlOiBtZW1jcHkuCiAKLQkqIHNyYy8qL2ZmaXRhcmdldC5oOiBNYWtlIEZGSV9MQVNUX0FCSSBvbmUgcGFzdCB0aGUgbGFzdCB2YWxpZCBBQkkuCi0JKiBzcmMvcHJlcF9jaWYuYzogRml4IEFCSSBhc3NlcnRpb24uCi0gICAgICAgICogc3JjL2NyaXMvZmZpLmM6IERpdHRvLgorY29tbWl0IDIxYmRlOTJjOWFiYjM3OGY5YzQ1NmE5ZDk1ZTZmOWI5OWVmOGM5MjAKK0F1dGhvcjogWmFjaGFyeSBXYWxkb3dza2kgPHp3YWxkb3dza2lAZ21haWwuY29tPgorRGF0ZTogICBTYXQgTm92IDMwIDAzOjQzOjQyIDIwMTMgLTA1MDAKIAotMjAxMC0wNy0xMCAgRXZhbiBQaG9lbml4ICA8ZXZhbkBmYWxsaW5nc25vdy5uZXQ+CisgICAgRGFyd2luOiBDbGVhbiB1cCwgbW9kZXJuaXplIGdlbmVyYXRvciBzY3JpcHRzCiAKLQkqIHNyYy9jbG9zdXJlcy5jIChzZWxpbnV4X2VuYWJsZWRfY2hlY2spOiBGaXggc3RybmNtcCB1c2FnZSBidWcuCitjb21taXQgZmQ1NGVhYjc0Y2VmNzg5MWU0YWNhYWFmYjcxZTc4MzE0MmVjYjY5ZQorQXV0aG9yOiBaYWNoYXJ5IFdhbGRvd3NraSA8endhbGRvd3NraUBnbWFpbC5jb20+CitEYXRlOiAgIFNhdCBOb3YgMzAgMDM6Mzg6MDIgMjAxMyAtMDUwMAogCi0yMDEwLTA3LTA3ICBEYW4gSG9yw6FrIDxkYW5AZGFubnkuY3o+CisgICAgRGFyd2luL01hYzogQWxzbyBleGNsdWRlIE9TIFggZ2VuZXJhdGVkIHNvdXJjZQogCi0JKiBpbmNsdWRlL2ZmaS5oLmluOiBQcm90ZWN0ICNkZWZpbmUgd2l0aCAjaWZuZGVmLgotCSogc3JjL3Bvd2VycGMvZmZpdGFyZ2V0Lmg6IERpdHRvLgotCSogc3JjL3MzOTAvZmZpdGFyZ2V0Lmg6IERpdHRvLgotCSogc3JjL3NwYXJjL2ZmaXRhcmdldC5oOiBEaXR0by4KK2NvbW1pdCA5NTNiNmYxNGM2NTUxNDFmOWU3ZDgyNTUwYTMxMmMzZWViOTYxMDkxCitBdXRob3I6IFphY2hhcnkgV2FsZG93c2tpIDx6d2FsZG93c2tpQGdtYWlsLmNvbT4KK0RhdGU6ICAgVHVlIEFwciAyNCAxMToxNjoyMCAyMDEyIC0wNDAwCiAKLTIwMTAtMDctMDcgICBOZWlsIFJvYmVydHMgPG5laWxAbGludXguaW50ZWwuY29tPgorICAgIERhcndpbi9pT1M6IE1vcmUgdW5pZmllZCBzeW50YXggc3VwcG9ydCB3LyBDbGFuZy4KKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBaYWNoYXJ5IFdhbGRvd3NraSA8endhbGRvd3NraUBnbWFpbC5jb20+CiAKLQkqIHNyYy94ODYvc3lzdi5TIChmZmlfY2FsbF9TWVNWKTogQWxpZ24gdGhlIHN0YWNrIHBvaW50ZXIgdG8KLQkxNi1ieXRlcy4KK2NvbW1pdCBjNzEzYTU1Mzc5NDgxYzMzOTg3N2YyZTAwMDNkOTdjYjhkOWVkODBlCitBdXRob3I6IFphY2hhcnkgV2FsZG93c2tpIDx6d2FsZG93c2tpQGdtYWlsLmNvbT4KK0RhdGU6ICAgVHVlIEFwciAyNCAxMDoyNToyOSAyMDEyIC0wNDAwCiAKLTIwMTAtMDctMDIgIEpha3ViIEplbGluZWsgIDxqYWt1YkByZWRoYXQuY29tPgorICAgIERhcndpbi9pT1M6IFNpbXBsaWZ5IFJFVExETSBhcmd1bWVudHMgZm9yIExMVk0gMy4xCisgICAgCisgICAgU2lnbmVkLW9mZi1ieTogWmFjaGFyeSBXYWxkb3dza2kgPHp3YWxkb3dza2lAZ21haWwuY29tPgogCi0JKiBNYWtlZmlsZS5hbSAoQU1fTUFLRUZMQUdTKTogUGFzcyBhbHNvIG1hbmRpciB0byBzdWJtYWtlcy4KLQkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlZC4KK2NvbW1pdCAxNmJhMWI4MDAyOGRiNWNiNzFjZjg2ZTVmNzlmNWU0ODMxN2Y4M2M4CitBdXRob3I6IFphY2hhcnkgV2FsZG93c2tpIDx6d2FsZG93c2tpQGdtYWlsLmNvbT4KK0RhdGU6ICAgV2VkIEFwciAxMSAyMzoyNjowNCAyMDEyIC0wNDAwCiAKLTIwMTAtMDUtMTkgIFJhaW5lciBPcnRoICA8cm9AQ2VCaVRlYy5VbmktQmllbGVmZWxkLkRFPgorICAgIERhcndpbjogU2lsZW5jZSBDbGFuZyB3YXJuaW5ncy4KIAotCSogY29uZmlndXJlLmFjIChsaWJmZmlfY3ZfYXNfeDg2X3BjcmVsKTogQ2hlY2sgZm9yIGlsbGVnYWwgaW4gYXMKLQlvdXRwdXQsIHRvby4KLQkobGliZmZpX2N2X2FzX2FzY2lpX3BzZXVkb19vcCk6IENoZWNrIGZvciAuYXNjaWkuCi0JKGxpYmZmaV9jdl9hc19zdHJpbmdfcHNldWRvX29wKTogQ2hlY2sgZm9yIC5zdHJpbmcuCi0JKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCi0JKiBmZmljb25maWcuaC5pbjogUmVnZW5lcmF0ZS4KLQkqIHNyYy94ODYvc3lzdi5TICguZWhfZnJhbWUpOiBVc2UgLmFzY2lpLCAuc3RyaW5nIG9yIGVycm9yLgorY29tbWl0IDg1MmFjM2JkMzAyZDZlZDk3YjFlZjY1ZjRjYmVkNjljMjU4YTQ4ZGYKK01lcmdlOiBhYjc5ZDZlIGFjNzUzNjgKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFRodSBOb3YgMjEgMjE6MjU6NDQgMjAxMyAtMDUwMAogCi0yMDEwLTA1LTExICBEYW4gV2l0dGUgIDxkd2l0dGVAbW96aWxsYS5jb20+CisgICAgTWVyZ2UgYnJhbmNoICdtYXN0ZXInIG9mIGdpdGh1Yi5jb206L2F0Z3JlZW4vbGliZmZpCisgICAgCisgICAgQ29uZmxpY3RzOgorICAgIAlDaGFuZ2VMb2cKIAotCSogZG9jL2xpYmZmaS50ZXg6IERvY3VtZW50IHByZXZpb3VzIGNoYW5nZS4KK2NvbW1pdCBhYjc5ZDZlMjE5OTJkZDg2MTM5YmEwNzUzMGZmODg4ODMzYjc4YTA0CitBdXRob3I6IEFsYW4gTW9kcmEgPGFtb2RyYUBnbWFpbC5jb20+CitEYXRlOiAgIFRodSBOb3YgMjEgMDY6MTI6MzUgMjAxMyAtMDUwMAogCi0yMDEwLTA1LTExICBNYWtvdG8gS2F0byA8bV9rYXRvQGdhMi5zby1uZXQubmUuanA+CisgICAgVGhpcyBzZXBhcmF0ZXMgdGhlIDMyLWJpdCBzeXN2L2xpbnV4L2JzZCBjb2RlIGZyb20gdGhlIDY0LWJpdCBsaW51eAorICAgIGNvZGUsIGFuZCBtYWtlcyBpdCBwb3NzaWJsZSB0byBsaW5rIGNvZGUgY29tcGlsZWQgd2l0aCBkaWZmZXJlbnQKKyAgICBvcHRpb25zIHRvIHRob3NlIHVzZWQgdG8gY29tcGlsZSBsaWJmZmkuICBGb3IgZXhhbXBsZSwgYQorICAgIC1tbG9uZy1kb3VibGUtMTI4IGxpYmZmaSBjYW4gYmUgdXNlZCB3aXRoIC1tbG9uZy1kb3VibGUtNjQgY29kZS4KKyAgICAKKyAgICBVc2luZyB0aGUgcmV0dXJuIHZhbHVlIGFyZWEgYXMgYSBwbGFjZSB0byBwYXNzIHBhcmFtZXRlcnMgd2Fzbid0IHN1Y2gKKyAgICBhIGdvb2QgaWRlYSwgY2F1c2luZyBhIGZhaWx1cmUgb2YgY2xzX3Vsb25nbG9uZy5jLiAgSSBkaWRuJ3Qgc2VlIHRoaXMKKyAgICB3aGVuIHJ1bm5pbmcgdGhlIG1haW5saW5lIGdjYyBsaWJmZmkgdGVzdHN1aXRlIGJlY2F1c2UgdGhhdCB2ZXJzaW9uIG9mCisgICAgdGhlIHRlc3QgaXMgaW5mZXJpb3IgdG8gdGhlIHVwc3RyZWFtbSBsaWJmZmkgdGVzdC4KKyAgICAKKyAgICBVc2luZyBOVU1fRlBSX0FSR19SRUdJU1RFUlMgcmF0aGVyIHRoYW4gTlVNX0ZQUl9BUkdfUkVHSVNURVJTNjQgbWVhbnQKKyAgICB0aGF0IGEgcGFyYW1ldGVyIHNhdmUgYXJlYSBjb3VsZCBiZSBhbGxvY2F0ZWQgYmVmb3JlIGl0IHdhcyBzdHJpY3RseQorICAgIG5lY2Vzc2FyeS4gIFdyb25nIGJ1dCBoYXJtbGVzcy4gIEZvdW5kIHdoZW4gc3BsaXR0aW5nIGFwYXJ0IGZmaS5jCisgICAgaW50byAzMi1iaXQgYW5kIDY0LWJpdCBzdXBwb3J0LgogCi0JKiBzcmMveDg2L2ZmaS5jIChmZmlfY2FsbCk6IERvbid0IGNvcHkgc3RydWN0cyBwYXNzZWQgYnkgdmFsdWUuCitjb21taXQgYWM3NTM2ODg5MzM0ZDRiZTUwNzA5MDA2ZDdlMjM1MzYzNjRkNzg5MQorQXV0aG9yOiBBbGFuIE1vZHJhIDxhbW9kcmFAZ21haWwuY29tPgorRGF0ZTogICBUaHUgTm92IDIxIDA2OjEyOjM1IDIwMTMgLTA1MDAKIAotMjAxMC0wNS0wNSAgTWljaGFlbCBLb2hsZXIgPG1pY2hhZWxrb2hsZXJAbGl2ZS5jb20+CisgICAgVGhpcyBzZXBhcmF0ZXMgdGhlIDMyLWJpdCBzeXN2L2xpbnV4L2JzZCBjb2RlIGZyb20gdGhlIDY0LWJpdCBsaW51eAorICAgIGNvZGUsIGFuZCBtYWtlcyBpdCBwb3NzaWJsZSB0byBsaW5rIGNvZGUgY29tcGlsZWQgd2l0aCBkaWZmZXJlbnQKKyAgICBvcHRpb25zIHRvIHRob3NlIHVzZWQgdG8gY29tcGlsZSBsaWJmZmkuICBGb3IgZXhhbXBsZSwgYQorICAgIC1tbG9uZy1kb3VibGUtMTI4IGxpYmZmaSBjYW4gYmUgdXNlZCB3aXRoIC1tbG9uZy1kb3VibGUtNjQgY29kZS4KKyAgICAKKyAgICBVc2luZyB0aGUgcmV0dXJuIHZhbHVlIGFyZWEgYXMgYSBwbGFjZSB0byBwYXNzIHBhcmFtZXRlcnMgd2Fzbid0IHN1Y2gKKyAgICBhIGdvb2QgaWRlYSwgY2F1c2luZyBhIGZhaWx1cmUgb2YgY2xzX3Vsb25nbG9uZy5jLiAgSSBkaWRuJ3Qgc2VlIHRoaXMKKyAgICB3aGVuIHJ1bm5pbmcgdGhlIG1haW5saW5lIGdjYyBsaWJmZmkgdGVzdHN1aXRlIGJlY2F1c2UgdGhhdCB2ZXJzaW9uIG9mCisgICAgdGhlIHRlc3QgaXMgaW5mZXJpb3IgdG8gdGhlIHVwc3RyZWFtbSBsaWJmZmkgdGVzdC4KKyAgICAKKyAgICBVc2luZyBOVU1fRlBSX0FSR19SRUdJU1RFUlMgcmF0aGVyIHRoYW4gTlVNX0ZQUl9BUkdfUkVHSVNURVJTNjQgbWVhbnQKKyAgICB0aGF0IGEgcGFyYW1ldGVyIHNhdmUgYXJlYSBjb3VsZCBiZSBhbGxvY2F0ZWQgYmVmb3JlIGl0IHdhcyBzdHJpY3RseQorICAgIG5lY2Vzc2FyeS4gIFdyb25nIGJ1dCBoYXJtbGVzcy4gIEZvdW5kIHdoZW4gc3BsaXR0aW5nIGFwYXJ0IGZmaS5jCisgICAgaW50byAzMi1iaXQgYW5kIDY0LWJpdCBzdXBwb3J0LgogCi0JKiBzcmMvZGxtYWxsb2MuYyAoZGxmcmVlKTogRml4IHNwZWxsaW5nLgotCSogc3JjL2lhNjQvZmZpLmMgKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogRGl0dG8uCi0JKiBjb25maWd1cmUuYWM6IERpdHRvLgotCSogY29uZmlndXJlOiBSZWJ1aWx0LgorY29tbWl0IDY5ZGY5MWNmYjRmYTZiY2I2NDQzNTBhODBiZmY5NzBmMjc0NzhhNmEKK01lcmdlOiAyZjQ1MDgyIGFhMWY2MmMKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIE1vbiBOb3YgMTggMDY6MzQ6MDQgMjAxMyAtMDgwMAogCi0yMDEwLTA0LTEzICBEYW4gV2l0dGUgIDxkd2l0dGVAbW96aWxsYS5jb20+CisgICAgTWVyZ2UgcHVsbCByZXF1ZXN0ICM1OSBmcm9tIGlhaW5zL3Bvd2VycGMtZGFyd2luLXVud2luZC1maXgKKyAgICAKKyAgICBGaXggUG93ZXJQQyBEYXJ3aW4gRkRFIGVuY29kaW5ncyB0byB1c2UgcGNyZWwgY29ycmVjdGx5LiAgTW9kZXJuaXNlIHRoZSBwaWNiYXNlIGxhYmVscy4KIAotCSogbXN2Y2Muc2g6IEJ1aWxkIHdpdGggLVczIGluc3RlYWQgb2YgLVdhbGwuCi0JKiBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmM6IFJlbW92ZSBidWlsZCB3YXJuaW5ncy4KLQkqIHNyYy94ODYvZmZpLmM6IERpdHRvLgotCSogc3JjL3g4Ni9mZml0YXJnZXQuaDogRGl0dG8uCitjb21taXQgYWExZjYyYzBhMDkzYzMwMzI1ZGZmMWQ0ZDJiNmI0YjIyZWI5NjkyOQorQXV0aG9yOiBJYWluIFNhbmRvZSA8aWFpbkBjb2Rlc291cmNlcnkuY29tPgorRGF0ZTogICBNb24gTm92IDE4IDEzOjExOjU2IDIwMTMgKzAwMDAKIAotMjAxMC0wNC0xMiAgRGFuIFdpdHRlICA8ZHdpdHRlQG1vemlsbGEuY29tPgotCSAgICBXYWx0ZXIgTWVpbmwgPHd1bm9AbHN2dy5kZT4KKyAgICBGaXggUG93ZXJQQyBEYXJ3aW4gRkRFIGVuY29kaW5ncyB0byB1c2UgcGNyZWwgY29ycmVjdGx5LiAgTW9kZXJuaXNlIHRoZSBwaWNiYXNlIGxhYmVscy4KIAotCSogY29uZmlndXJlLmFjOiBBZGQgT1MvMiBzdXBwb3J0LgotCSogY29uZmlndXJlOiBSZWJ1aWx0LgotCSogc3JjL2Nsb3N1cmVzLmM6IERpdHRvLgotCSogc3JjL2RsbWFsbG9jLmM6IERpdHRvLgotCSogc3JjL3g4Ni93aW4zMi5TOiBEaXR0by4KK2NvbW1pdCAyZjQ1MDgyMmE4Njk4YmE4ODQ0MWM1NmQxNTJjN2RjODkyNGIxMjdmCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBNb24gTm92IDE4IDA2OjUyOjI5IDIwMTMgLTA1MDAKIAotMjAxMC0wNC0wNyAgSmFrdWIgSmVsaW5layAgPGpha3ViQHJlZGhhdC5jb20+CisgICAgQ2xlYW4gdXAgY29kZSB0byBhcHBlYXNlIG1vZGVybiBHQ0MgY29tcGlsZXIuCiAKLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9lcnJfYmFkX2FiaS5jOiBSZW1vdmUgdW51c2VkIGFyZ3MgdmFyaWFibGUuCitjb21taXQgMTZkNTZjNTFhZGVkMzc0NzMwOTIwYTRhY2RlNzZmZjNkMjg2MGFlMQorQXV0aG9yOiBBbGFuIE1vZHJhIDxhbW9kcmFAZ21haWwuY29tPgorRGF0ZTogICBNb24gTm92IDE4IDA2OjM2OjAzIDIwMTMgLTA1MDAKIAotMjAxMC0wNC0wMiAgUmFsZiBXaWxkZW5odWVzICA8UmFsZi5XaWxkZW5odWVzQGdteC5kZT4KKyAgICBBbiAjZW5kaWYgaW4gdGhlIHdyb25nIHBsYWNlIHdvdWxkIGNhdXNlIGNvbXBpbGUgZmFpbHVyZSBvbiBwb3dlcnBjbGUuCisgICAgVXNpbmcgYmwgaW5zdGVhZCBvZiBiIGRvZXNuJ3QgY2F1c2UgcnVudGltZSBmYWlsdXJlcyBhcyB5b3UgbWlnaHQgdGhpbmssCisgICAgYnV0IGRvZXMgbWVzcyB0aGUgcHJvY2Vzc29yIGJyYW5jaCBwcmVkaWN0aW9uLgogCi0JKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KLQkqIGFjbG9jYWwubTQ6IFJlZ2VuZXJhdGUuCi0JKiBpbmNsdWRlL01ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgotCSogbWFuL01ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgotCSogdGVzdHN1aXRlL01ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorY29tbWl0IDM0Zjg3OGE1ZWYyODY2M2Y2YjFkN2ZkMjZmYjA5OTQyOWVhMTU3OWUKK01lcmdlOiA4M2Y2NWI2IDFmZDA0NTcKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFNhdCBOb3YgMTYgMDY6NTc6NTQgMjAxMyAtMDUwMAogCi0yMDEwLTAzLTMwICBEYW4gV2l0dGUgIDxkd2l0dGVAbW96aWxsYS5jb20+CisgICAgTWVyZ2UgYnJhbmNoICdtYXN0ZXInIG9mIGdpdGh1Yi5jb206L2F0Z3JlZW4vbGliZmZpCisgICAgCisgICAgQ29uZmxpY3RzOgorICAgIAlDaGFuZ2VMb2cKKyAgICAJc3JjL3Bvd2VycGMvZmZpLmMKIAotCSogbXN2Y2Muc2g6IERpc2FibGUgYnVpbGQgd2FybmluZ3MuCi0JKiBSRUFETUUgKHRlc3RlZCk6IENsYXJpZnkgd2luZG93cyBidWlsZCBwcm9jZWR1cmUuCitjb21taXQgODNmNjViNjNkOTc2NGE5Y2M3Njg4ZmM1Y2RhNWVlMmJkMjNmYWY1NAorQXV0aG9yOiBBbGFuIE1vZHJhIDxhbW9kcmFAZ21haWwuY29tPgorRGF0ZTogICBTYXQgTm92IDE2IDA2OjUzOjUwIDIwMTMgLTA1MDAKIAotMjAxMC0wMy0xNSAgUmFpbmVyIE9ydGggIDxyb0BDZUJpVGVjLlVuaS1CaWVsZWZlbGQuREU+CisgICAgRmluYWxseSwgdGhpcyBhZGRzIF9DQUxMX0VMRiA9PSAyIHN1cHBvcnQuICBFTEZ2MSBvYmplY3RzIGNhbid0IGJlCisgICAgbGlua2VkIHdpdGggRUxGdjIgb2JqZWN0cywgc28gdGhpcyBpcyBvbmUgY2FzZSB3aGVyZSBwcmVwcm9jZXNzb3IKKyAgICB0ZXN0cyBpbiBmZmkuYyBhcmUgZmluZS4gIEFsc28sIHRoZXJlIGlzIG5vIG5lZWQgdG8gZGVmaW5lIGEgbmV3CisgICAgRkZJX0VMRnYyIG9yIHNvbWVzdWNoIHZhbHVlIGluIGVudW0gZmZpX2FiaS4gIEZGSV9MSU5VWDY0IHdpbGwgaGFwcGlseQorICAgIHNlcnZlIGJvdGggQUJJcy4KIAotCSogY29uZmlndXJlLmFjIChsaWJmZmlfY3ZfYXNfeDg2XzY0X3Vud2luZF9zZWN0aW9uX3R5cGUpOiBOZXcgdGVzdC4KLQkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KLQkqIGZmaWNvbmZpZy5oLmluOiBSZWdlbmVyYXRlLgotCSogbGliZmZpL3NyYy94ODYvdW5peDY0LlMgKC5laF9mcmFtZSkKLQlbSEFWRV9BU19YODZfNjRfVU5XSU5EX1NFQ1RJT05fVFlQRV06IFVzZSBAdW53aW5kIHNlY3Rpb24gdHlwZS4KK2NvbW1pdCAxZmQwNDU3ODRjYWM4NzRiNWQ3NmI3ZmE5MzFmNjcyMDlhODI4MGQzCitBdXRob3I6IEFsYW4gTW9kcmEgPGFtb2RyYUBnbWFpbC5jb20+CitEYXRlOiAgIFNhdCBOb3YgMTYgMDY6NTM6NTAgMjAxMyAtMDUwMAogCi0yMDEwLTAzLTE0ICBNYXR0aGlhcyBLbG9zZSAgPGRva29AdWJ1bnR1LmNvbT4KKyAgICBGaW5hbGx5LCB0aGlzIGFkZHMgX0NBTExfRUxGID09IDIgc3VwcG9ydC4gIEVMRnYxIG9iamVjdHMgY2FuJ3QgYmUKKyAgICBsaW5rZWQgd2l0aCBFTEZ2MiBvYmplY3RzLCBzbyB0aGlzIGlzIG9uZSBjYXNlIHdoZXJlIHByZXByb2Nlc3NvcgorICAgIHRlc3RzIGluIGZmaS5jIGFyZSBmaW5lLiAgQWxzbywgdGhlcmUgaXMgbm8gbmVlZCB0byBkZWZpbmUgYSBuZXcKKyAgICBGRklfRUxGdjIgb3Igc29tZXN1Y2ggdmFsdWUgaW4gZW51bSBmZmlfYWJpLiAgRkZJX0xJTlVYNjQgd2lsbCBoYXBwaWx5CisgICAgc2VydmUgYm90aCBBQklzLgogCi0JKiBzcmMveDg2L2ZmaTY0LmM6IEZpeCB0eXBvIGluIGNvbW1lbnQuCi0JKiBzcmMveDg2L2ZmaS5jOiBVc2UgLyogLi4uICovIGNvbW1lbnQgc3R5bGUuCitjb21taXQgMzYyODUxMzc5YTQ5Y2UwN2QzZTM2ZTgyYzRlNWM3YjZjYzE2YTM1MgorQXV0aG9yOiBBbGFuIE1vZHJhIDxhbW9kcmFAZ21haWwuY29tPgorRGF0ZTogICBTYXQgTm92IDE2IDA2OjUyOjQzIDIwMTMgLTA1MDAKIAotMjAxMC0wMi0yNCAgUmFpbmVyIE9ydGggIDxyb0BDZUJpVGVjLlVuaS1CaWVsZWZlbGQuREU+CisgICAgQW5kcmVhcycgMjAxMy0wMi0wOCBjaGFuZ2UgcmV2ZXJ0ZWQgc29tZSBicmVha2FnZSBmb3Igc3RydWN0IHJldHVybgorICAgIHZhbHVlcyBmcm9tIDIwMTEtMTEtMTIsIGJ1dCBpbiBzbyBkb2luZyByZWludHJvZHVjZWQgc3RyaW5nCisgICAgaW5zdHJ1Y3Rpb25zIHRvIHN5c3YuUyB0aGF0IGFyZSBub3Qgc3VwcG9ydGVkIG9uIGFsbCBwb3dlcnBjIHZhcmlhbnRzLgorICAgIFRoaXMgcGF0Y2ggcHJvcGVybHkgY29waWVzIHRoZSBib3VuY2UgYnVmZmVyIHRvIGRlc3RpbmF0aW9uIGluIEMgY29kZQorICAgIHJhdGhlciB0aGFuIGluIGFzbS4KKyAgICAKKyAgICBJIGhhdmUgdGVzdGVkIHRoaXMgb24gcG93ZXJwYzY0LWxpbnV4LCBwb3dlcnBjLWxpbnV4IGFuZAorICAgIHBvd2VycGMtZnJlZWJzZC4gIFdlbGwsIHRoZSBsYXN0IG9uIHBvd2VycGMtbGludXggYnkgbHlpbmcgdG8KKyAgICBjb25maWd1cmUgd2l0aAorICAgIAorICAgIENDPSJnY2MgLW0zMiAtbXN2cjQtc3RydWN0LXJldHVybiAtbWxvbmctZG91YmxlLTY0IiBcCisgICAgQ1hYPSJnKysgLW0zMiAtbXN2cjQtc3RydWN0LXJldHVybiAtbWxvbmctZG91YmxlLTY0IiBcCisgICAgL3NyYy9saWJmZmktY3VycmVudC9jb25maWd1cmUgLS1idWlsZD1wb3dlcnBjLWZyZWVic2QKKyAgICAKKyAgICBhbmQgdGhlbgorICAgIAorICAgIG1ha2UgJiYgbWFrZSBDQz0iZ2NjIC1tMzIiIENYWD0iZysrIC1tMzIiIFwKKyAgICBSVU5URVNURkxBR1M9LS10YXJnZXRfYm9hcmQ9dW5peC8tbTMyLy1tc3ZyNC1zdHJ1Y3QtcmV0dXJuLy1tbG9uZy1kb3VibGUtNjRcCisgICAgIGNoZWNrCiAKLQkqIGRvYy9saWJmZmkudGV4aSAoVGhlIENsb3N1cmUgQVBJKTogRml4IHR5cG8uCi0JKiBkb2MvbGliZmZpLmluZm86IFJlbW92ZS4KK2NvbW1pdCAxYzA2NTE1ZDkyN2Q5ZGUxNTgyNDM4ZDRlYjU5NTM4OTBlNzljNWM3CitBdXRob3I6IEFsYW4gTW9kcmEgPGFtb2RyYUBnbWFpbC5jb20+CitEYXRlOiAgIFNhdCBOb3YgMTYgMDY6NDE6MzYgMjAxMyAtMDUwMAogCi0yMDEwLTAyLTE1ICBNYXR0aGlhcyBLbG9zZSAgPGRva29AdWJ1bnR1LmNvbT4KKyAgICBUaGUgcG93ZXJwYzY0IEFCSXMgYWxpZ24gc3RydWN0cyBwYXNzZWQgYnkgdmFsdWUsIGEgZmFjdCBpZ25vcmVkIGJ5CisgICAgZ2NjIGZvciBxdWl0ZSBzb21lIHRpbWUuICBTaW5jZSBnY2Mgbm93IGRvZXMgdGhlIGNvcnJlY3QgYWxpZ25tZW50LAorICAgIGxpYmZmaSBuZWVkcyB0byBmb2xsb3cgc3VpdC4gIFRoaXMgb3VnaHQgdG8gYmUgbWFkZSBzZWxlY3RhYmxlIHZpYQorICAgIGEgbmV3IGFiaSB2YWx1ZSwgYW5kIHRoZSAjaWZkZWZzIHJlbW92ZWQgZnJvbSBmZmkuYyBhbG9uZyB3aXRoIG1hbnkKKyAgICBvdGhlciAjaWZkZWZzIHByZXNlbnQgdGhlcmUgYW5kIGluIGFzc2VtYmx5LiAgSSdsbCBkbyB0aGF0IHdpdGggYQorICAgIGZvbGxvd3VwIHBhdGNoIHNvbWV0aW1lLgorICAgIAorICAgIFRoaXMgaXMgYSByZXZpc2VkIHZlcnNpb24gb2YKKyAgICBodHRwczovL3NvdXJjZXdhcmUub3JnL21sL2xpYmZmaS1kaXNjdXNzLzIwMTMvbXNnMDAxNjIuaHRtbAogCi0JKiBzcmMvYXJtL3N5c3YuUyAoX19BUk1fQVJDSF9fKTogRGVmaW5lIGZvciBwcm9jZXNzb3IKLQlfX0FSTV9BUkNIXzdFTV9fLgorY29tbWl0IGE5N2NmMWZhZTU3NWQ4YmZkNTI1OWM1YzQyMjAyNWFkNDM5MTEzMjYKK0F1dGhvcjogQWxhbiBNb2RyYSA8YW1vZHJhQGdtYWlsLmNvbT4KK0RhdGU6ICAgU2F0IE5vdiAxNiAwNjo0MDoxMyAyMDEzIC0wNTAwCiAKLTIwMTAtMDEtMTUgIEFudGhvbnkgR3JlZW4gIDxncmVlbkByZWRoYXQuY29tPgorICAgIFRoaXMgcGF0Y2ggcHJlcGFyZXMgZm9yIEVMRnYyLCB3aGVyZSBzaXplcyBvZiB0aGVzZSBhcmVhcyBjaGFuZ2UuICBJdAorICAgIGFsc28gbWFrZXMgc29tZSBtaW5vciBjaGFuZ2VzIHRvIGltcHJvdmUgY29kZSBlZmZpY2llbmN5LgogCi0JKiBSRUFETUU6IEFkZCBub3RlcyBvbiBidWlsZGluZyB3aXRoIE1pY3Jvc29mdCBWaXN1YWwgQysrLgorY29tbWl0IDE2NDI4M2Y0YWM1OTcyY2UyYWI1ZTAxNWNjMmFiMTAxNGMyMzI3NmMKK0F1dGhvcjogQWxhbiBNb2RyYSA8YW1vZHJhQGdtYWlsLmNvbT4KK0RhdGU6ICAgU2F0IE5vdiAxNiAwNjozODo1NSAyMDEzIC0wNTAwCiAKLTIwMTAtMDEtMTUgIERhbmllbCBXaXR0ZSAgPGR3aXR0ZUBtb3ppbGxhLmNvbT4KKyAgICBUaGUgcG93ZXJwYzY0IHN1cHBvcnQgb3B0ZWQgdG8gcGFzcyBmbG9hdGluZyBwb2ludCB2YWx1ZXMgYm90aCBpbiB0aGUKKyAgICBmcHIgYXJlYSBhbmQgdGhlIHBhcmFtZXRlciBzYXZlIGFyZWEsIG5lY2Vzc2FyeSB3aGVuIHRoZSBiYWNrZW5kCisgICAgZG9lc24ndCBrbm93IGlmIGEgZnVuY3Rpb24gYXJndW1lbnQgY29ycmVzcG9uZHMgdG8gdGhlIGVsbGlwc2lzCisgICAgYXJndW1lbnRzIG9mIGEgdmFyaWFkaWMgZnVuY3Rpb24uICBUaGlzIHBhdGNoIGFkZHMgcG93ZXJwYyBzdXBwb3J0IGZvcgorICAgIHZhcmlhZGljIGZ1bmN0aW9ucywgYW5kIGNoYW5nZXMgdGhlIGNvZGUgdG8gb25seSBwYXNzIGZwIGluIHRoZSBBQkkKKyAgICBtYW5kYXRlZCBhcmVhLiAgRUxGdjIgbmVlZHMgdGhpcyBjaGFuZ2Ugc2luY2UgdGhlIHBhcmFtZXRlciBzYXZlIGFyZWEKKyAgICBtYXkgbm90IGV4aXN0IHRoZXJlLgorICAgIAorICAgIFRoaXMgYWxzbyBmaXhlcyB0d28gZmF1bHR5IHRlc3RzIHRoYXQgdXNlZCBhIG5vbi12YXJpYWRpYyBmdW5jdGlvbgorICAgIGNhc3QgdG8gY2FsbCBhIHZhcmlhZGljIGZ1bmN0aW9uLCBhbmQgc3B1cmlvdXNseSByZWFzb25lZCB0aGF0IHRoaXMgaXMKKyAgICBzb21laG93IG5lY2Vzc2FyeSBmb3Igc3RhdGljIGZ1bmN0aW9ucy4uCiAKLQkqIG1zdmNjLnNoOiBOZXcgZmlsZS4KK2NvbW1pdCAzMTI1N2IzMTg5ZjgxYTE5OWJjMjkwMmMyMmJjNWYyZDdjNTRjY2RlCitBdXRob3I6IEFuZHJldyBIYWxleSA8YXBoQHJlZGhhdC5jb20+CitEYXRlOiAgIFNhdCBOb3YgMTYgMDY6MzU6NTEgMjAxMyAtMDUwMAogCi0JKiBzcmMveDg2L3dpbjMyLlM6IFBvcnQgYXNzZW1ibHkgcm91dGluZXMgdG8gTVNWQyBhbmQgI2lmZGVmLgotCSogc3JjL3g4Ni9mZmkuYzogVHdlYWsgZnVuY3Rpb24gZGVjbGFyYXRpb24gYW5kIHJlbW92ZSBleGNlc3MKLQlwYXJlbnMuCi0JKiBpbmNsdWRlL2ZmaS5oLmluOiBBZGQgX19kZWNsc3BlYyhhbGlnbig4KSkgdG8gdHlwZWRlZiBzdHJ1Y3QKLQlmZmlfY2xvc3VyZS4KKyAgICBGaXggc2FtcGxlIGNsb3N1cmUgY29kZQogCi0JKiBzcmMveDg2L2ZmaS5jOiBNZXJnZSBmZmlfY2FsbF9TWVNWIGFuZCBmZmlfY2FsbF9TVERDQUxMIGludG8gbmV3Ci0JZnVuY3Rpb24gZmZpX2NhbGxfd2luMzIgb24gWDg2X1dJTjMyLgotCSogc3JjL3g4Ni93aW4zMi5TIChmZmlfY2FsbF9TWVNWKTogUmVuYW1lIHRvIGZmaV9jYWxsX3dpbjMyLgotCShmZmlfY2FsbF9TVERDQUxMKTogUmVtb3ZlLgorY29tbWl0IGRiMGFjZTNhMzg0OTZhZjczZWFlM2RmMDJlZjM1MzczNmQxNjkwOWYKK0F1dGhvcjogQW5kcmV3IEhhbGV5IDxhcGhAcmVkaGF0LmNvbT4KK0RhdGU6ICAgU2F0IE5vdiAxNiAwNjoyOToyNSAyMDEzIC0wNTAwCiAKLQkqIHNyYy9wcmVwX2NpZi5jIChmZmlfcHJlcF9jaWYpOiBNb3ZlIHN0YWNrIHNwYWNlIGFsbG9jYXRpb24gY29kZQotCXRvIGZmaV9wcmVwX2NpZl9tYWNoZGVwIGZvciB4ODYuCi0JKiBzcmMveDg2L2ZmaS5jIChmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IFRvIGhlcmUuCisgICAgRml4IGJyb2tlbiB0ZXN0IGNhc2VzCiAKLTIwMTAtMDEtMTUgIE9saXZlciBLaWRkbGUgIDxva2lkZGxlQHlhaG9vLmNvLnVrPgorY29tbWl0IGRlMTBmNTAzOWVkN2E1MzM4MmRkY2M5NWMzNjhkMDNlNTM1ZWRiOTgKK01lcmdlOiA1OGMyNTc3IGYzNjU3ZGEKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFRodSBOb3YgMTQgMTA6NTY6MjkgMjAxMyAtMDUwMAogCi0JKiBzcmMveDg2L2ZmaXRhcmdldC5oIChmZmlfYWJpKTogQ2hlY2sgZm9yIF9faTM4NiBhbmQgX19hbWQ2NCBmb3IKLQlTdW4gU3R1ZGlvIGNvbXBpbGVyIGNvbXBhdGliaWxpdHkuCisgICAgTWVyZ2UgYnJhbmNoICdtYXN0ZXInIG9mIGh0dHBzOi8vZ2l0aHViLmNvbS9iaXZhYi9saWJmZmkKKyAgICAKKyAgICBDb25mbGljdHM6CisgICAgCUNoYW5nZUxvZwogCi0yMDEwLTAxLTEyICBDb25yYWQgSXJ3aW4gPGNvbnJhZC5pcndpbkBnbWFpbC5jb20+Citjb21taXQgZjM2NTdkYTI3OGRkNjNhZmNkZDg3NjI4OTRhOWJkYWVhOGVmMDI4YQorQXV0aG9yOiBEYXZpZCBTY2huZWlkZXIgPGRhdmlkLnNjaG5laWRlckBiaXZhYi5kZT4KK0RhdGU6ICAgVGh1IE5vdiAxNCAxMzowMjoxNiAyMDEzICswMTAwCiAKLQkqIGRvYy9saWJmZmkudGV4aTogQWRkIGNsb3N1cmUgZXhhbXBsZS4KKyAgICB1cGRhdGUgQ2hhbmdlbG9nCiAKLTIwMTAtMDEtMDcgIFJhaW5lciBPcnRoICA8cm9AQ2VCaVRlYy5VbmktQmllbGVmZWxkLkRFPgorY29tbWl0IDU4YzI1NzdhM2ZmODBlNzQxNmVmMDQzNDc2OWUyYWYyMzM2NTcxOWMKK0F1dGhvcjogQWxhbiBNb2RyYSA8YW1vZHJhQGdtYWlsLmNvbT4KK0RhdGU6ICAgV2VkIE5vdiAxMyAxNjo1NTozNiAyMDEzIC0wNTAwCiAKLQlQUiBsaWJmZmkvNDA3MDEKLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mZml0ZXN0LmggW19fYWxwaGFfXyAmJiBfX29zZl9fXSAoUFJJZExMLAotCVBSSXVMTCwgUFJJZDY0LCBQUkl1NjQsIFBSSXVQVFIpOiBEZWZpbmUuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQ2NC5jOiBBZGQgLVduby1mb3JtYXQgb24KLQlhbHBoYSotZGVjLW9zZiouCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3VpbnQ2NC5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWxvbmdsb25nLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9sbDEuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbWVkaXVtMi5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC9mZml0ZXN0Y3h4LmggKGFsbG9jYXRlX21tYXApOiBDYXN0Ci0JTUFQX0ZBSUxFRCB0byBjaGFyICouCisgICAgVGhpcyBlbnNocmluZXMgdGhlIGN1cnJlbnQgdGVzdHN1aXRlIHByYWN0aWNlIG9mIHVzaW5nIGZmaV9hcmcgZm9yCisgICAgcmV0dXJuZWQgdmFsdWVzLiAgSXQgd291bGQgYmUgcmVhc29uYWJsZSBhbmQgbG9naWNhbCB0byB1c2UgdGhlIGFjdHVhbAorICAgIHJldHVybiBhcmd1bWVudCB0eXBlIGFzIHBhc3NlZCB0byBmZmlfcHJlcF9jaWYsIGJ1dCB0aGlzIHdvdWxkIG1lYW4KKyAgICBjaGFuZ2luZyBhIGxhcmdlIG51bWJlciBvZiB0ZXN0cyB0aGF0IHVzZSBmZmlfYXJnIGFuZCBhbGwgYmFja2VuZHMKKyAgICB0aGF0IHdyaXRlIHJlc3VsdHMgdG8gYW4gZmZpX2FyZy4KIAotMjAxMC0wMS0wNiAgUmFpbmVyIE9ydGggIDxyb0BDZUJpVGVjLlVuaS1CaWVsZWZlbGQuREU+Citjb21taXQgOGFmNDJmOTk0NGY3ZWQ3MmM4MWFlMzYwYWFjNmE4NGRjMTFmODlkYworQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgV2VkIE5vdiAxMyAxNjo0MDoyOCAyMDEzIC0wNTAwCiAKLQkqIHNyYy9taXBzL24zMi5TOiBVc2UgLmFiaWNhbGxzIGFuZCAuZWhfZnJhbWUgd2l0aCBfX0dOVUNfXy4KKyAgICBSZXNwZWN0IEhBVkVfQUxMT0NBX0gKIAotMjAwOS0xMi0zMSAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJlZGhhdC5jb20+Citjb21taXQgY2RmNDA1ZDU3NGY0NzliNzgyNDU0NTE2MzY2YmQ0ZjRiOWIzNDE1ZQorQXV0aG9yOiBEYXZpZCBTY2huZWlkZXIgPGRhdmlkLnNjaG5laWRlckBiaXZhYi5kZT4KK0RhdGU6ICAgV2VkIE5vdiAxMyAxNTo1MDoyMSAyMDEzICswMTAwCiAKLQkqIFJFQURNRTogVXBkYXRlIGZvciBsaWJmZmkgMy4wLjkuCisgICAgYWRkIGEgdGVzdGNhc2UgZm9yIHRoZSBkb3VibGUvZmxvYXQgaXNzdWUgb24gQVJNSEYKIAotMjAwOS0xMi0yNyAgTWF0dGhpYXMgS2xvc2UgIDxkb2tvQHVidW50dS5jb20+Citjb21taXQgNzdmODIzZTMxZmZiNTU3YTQ2NmIyNGY3ZmJhODQ1ZmJmNzgzMTc5OAorQXV0aG9yOiBEYXZpZCBTY2huZWlkZXIgPGRhdmlkLnNjaG5laWRlckBiaXZhYi5kZT4KK0RhdGU6ICAgV2VkIE5vdiAxMyAxNDoyNjo1NyAyMDEzICswMTAwCiAKLQkqIGNvbmZpZ3VyZS5hYyAoSEFWRV9MT05HX0RPVUJMRSk6IERlZmluZSBmb3IgbWlwcyB3aGVuCi0JYXBwcm9wcmlhdGUuCi0JKiBjb25maWd1cmU6IFJlYnVpbHQuCisgICAgc3RvcCB0cnlpbmcgdG8gYXNzaW5nIHZmcCByZWdzIG9uY2Ugd2UgYXJlIGRvbmUgd2l0aCB0aGUgcmVnaXN0ZXJzCiAKLTIwMDktMTItMjYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkByZWRoYXQuY29tPgorY29tbWl0IDM3MDY3ZWM1MDM2ZjJhNmVkN2E0Nzk5ZjgzZjhmNTMxNjA0NjAzNDQKK0F1dGhvcjogRGF2aWQgU2NobmVpZGVyIDxkYXZpZC5zY2huZWlkZXJAYml2YWIuZGU+CitEYXRlOiAgIFR1ZSBOb3YgMTIgMTk6NDk6MDEgMjAxMyArMDEwMAogCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGVfdmEuYzogTWFyayBhcyB4ZmFpbCBmb3IKLQlhdnIzMiotKi0qLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kb3VibGVfdmEuYzogRGl0dG8uCisgICAgbWFyayBhbGwgdmZwIHJlZ2lzdGVycyBhcyB1c2VkIHdoZW4gZG9uZS4KKyAgICAKKyAgICBUbyBhdm9pZCBhc3NpZ25pbmcgcmVnaXN0ZXJzIHRoZSB3b3VsZCBmaXQsIG9uY2UgYXJndW1lbnRzIGhhdmUgYmVlbiBvbgorICAgIHRoZSBzdGFjaywgd2UgbWFyayBhbGwgcmVnaXN0ZXJzIGFzIHVzZWQgb25jZSB3ZSBkbyBub3QgZmluZCBhIGZyZWUKKyAgICByZWdpc3RlciBmb3IgdGhlIGZpcnN0IHRpbWUuCiAKLTIwMDktMTItMjYgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5vcmc+Citjb21taXQgMmY1YjdjZTU0NTQ3M2E3ZjZlNDExOTNlZGMyOTQwN2NiZWJlODJkNQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU2F0IE5vdiA5IDA2OjE2OjMyIDIwMTMgLTA1MDAKIAotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2ZmaXRlc3QuaDogQ29uZGl0aW9uYWxseSBpbmNsdWRlIHN0ZGludC5oCi0JYW5kIGludHR5cGVzLmguCi0JKiB0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvdW53aW5kdGVzdC5jYzogRGl0dG8uCisgICAgVWx0cmFTUEFSQyBJSWkgZml4LiAgVXBkYXRlIFJFQURNRSBhbmQgYnVpbGQgY29uZmlndXJ5LgogCi0yMDA5LTEyLTI2ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXoub3JnPgorY29tbWl0IGJlY2Q3NTQ0MzQxNzMwMzJmNDI2ZDIyZmZjYmZlMjRmNTViM2MxMzcKK0F1dGhvcjogTWFyayBLZXR0ZW5pcyA8a2V0dGVuaXNAZ251Lm9yZz4KK0RhdGU6ICAgV2VkIE5vdiA2IDA2OjQzOjQ5IDIwMTMgLTA1MDAKIAotCSogY29uZmlndXJlLmFjOiBBZGQgYW1kNjQtKi1vcGVuYnNkKi4KLQkqIGNvbmZpZ3VyZTogUmVidWlsdC4KLQkqIHRlc3RzdWl0ZS9saWIvbGliZmZpLWRnLmV4cCAobGliZmZpX3RhcmdldF9jb21waWxlKTogTGluawotCW9wZW5ic2QgcHJvZ3JhbXMgd2l0aCAtbHB0aHJlYWQuCisgICAgQWxpZ24gdGhlIHN0YWNrIHBvaW50ZXIgdG8gMTYtYnl0ZXMuCiAKLTIwMDktMTItMjYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkByZWRoYXQuY29tPgorY29tbWl0IDA1YzMxMDkzNDA5ZjdiM2U2ZDc5NWZhYzIxZDJjOTU0MzEzZDgxNjIKK0F1dGhvcjogS29uc3RhbnRpbiBCZWxvdXNvdiA8a2liQGZyZWVic2Qub3JnPgorRGF0ZTogICBXZWQgTm92IDYgMDY6NDA6NTggMjAxMyAtMDUwMAogCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2RvdWJsZV92YS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbG9uZ2RvdWJsZS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbG9uZ2RvdWJsZV92YS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfcG9pbnRlci5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfcG9pbnRlcl9zdGFjay5jOiBSZW1vdmUgeGZhaWwgZm9yCi0JbWlwcyotKi0qIGFuZCBhcm0qLSotKi4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fbG9uZ2RvdWJsZV9zcGxpdC5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fbG9uZ2RvdWJsZV9zcGxpdDIuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbWVkaXVtMi5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9tZWRpdW0uYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbGFyZ2UuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbGFyZ2UyLmM6IFJlbW92ZSB4ZmFpbCBmb3IgYXJtKi0qLSouCisgICAgTWFyayBleGVjdXRhYmxlIGFzIG5vdCByZXF1aXJpbmcgZXhlY3V0YWJsZSBzdGFjay4KIAotMjAwOS0xMi0zMSAgS2F5IFRpZXR6ICA8a3RpZXR6NzBAZ29vZ2xlbWFpbC5jb20+Citjb21taXQgY2Y2YmY5ODE4ZTgzOTRjZmNkYjA3YTQwYzZhNWUyZWU2YjAxZDMzMworQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU2F0IE5vdiAyIDE3OjIzOjU5IDIwMTMgLTA0MDAKIAotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2ZmaXRlc3QuaCwKLQl0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvZmZpdGVzdGN4eC5oIChQUklkTEwsIFBSdUxMKTogRml4Ci0JZGVmaW5pdGlvbnMuCisgICAgRml4IHVwIGRvY3MKIAotMjAwOS0xMi0zMSAgQ2FybG8gQnJhbWluaSAgPGNhcmxvLmJyYW1peEBsaWJlcm8uaXQ+Citjb21taXQgMDIxNzcxNzY4NTRkMTZmYzBmMWE1OTU4YWEzNGRhMmYzMDY2MzBlZQorTWVyZ2U6IGMyNDIyMTcgYzI2NWI0YworQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU2F0IE5vdiAyIDE3OjExOjIyIDIwMTMgLTA0MDAKIAotCSogY29uZmlndXJlLmFjIChBTV9MVExERkxBR1MpOiBEZWZpbmUgZm9yIHdpbmRvd3MgaG9zdHMuCi0JKiBNYWtlZmlsZS5hbSAobGliZmZpX2xhX0xERkxBR1MpOiBBZGQgQU1fTFRMREZMQUdTLgotCSogY29uZmlndXJlOiBSZWJ1aWx0LgotCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCisgICAgTWVyZ2UgYnJhbmNoICdtYXN0ZXInIG9mIGdpdGh1Yi5jb206L2F0Z3JlZW4vbGliZmZpCiAKLTIwMDktMTItMzEgIEFudGhvbnkgR3JlZW4gIDxncmVlbkByZWRoYXQuY29tPgotCSAgICBCbGFrZSBDaGFmZmluLgorY29tbWl0IGMyNDIyMTc0YjNlZGMwZGUwYjE0OGRmZDZiNjcwODdiYjg4MWM0YTYKK01lcmdlOiBmNGI4NDNmIGQ5MThkNDcKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFNhdCBOb3YgMiAxNDowODoyMyAyMDEzIC0wNzAwCiAKLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9odWdlX3N0cnVjdC5jOiBOZXcgdGVzdCBjYXNlIGZyb20gQmxha2UKLQlDaGFmZmluIEAgQXBwbGUuCisgICAgTWVyZ2UgcHVsbCByZXF1ZXN0ICM0NSBmcm9tIGZvc3MtZm9yLXN5bm9wc3lzLWR3Yy1hcmMtcHJvY2Vzc29ycy9hcmNfc3VwcG9ydAorICAgIAorICAgIGFyYzogRml4IGJ1aWxkIGVycm9yCiAKLTIwMDktMTItMjggIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KK2NvbW1pdCBjMjY1YjRjYWNiOTEzMGYwNDI2OTlhODVkZTljNzI0MmIzZjQ5Y2MzCitNZXJnZTogZjRiODQzZiBkOTE4ZDQ3CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTYXQgTm92IDIgMTQ6MDg6MjMgMjAxMyAtMDcwMAogCi0JKiBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmMgKGZmaV9wcmVwX2FyZ3MpOiBDb3B5IGFiaSBhbmQgbmFyZ3MgdG8KLQlsb2NhbCB2YXJpYWJsZXMuCi0JKGFpeF9hZGp1c3RfYWdncmVnYXRlX3NpemVzKTogTmV3IGZ1bmN0aW9uLgotCShmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IENhbGwgaXQuCisgICAgTWVyZ2UgcHVsbCByZXF1ZXN0ICM0NSBmcm9tIGZvc3MtZm9yLXN5bm9wc3lzLWR3Yy1hcmMtcHJvY2Vzc29ycy9hcmNfc3VwcG9ydAorICAgIAorICAgIGFyYzogRml4IGJ1aWxkIGVycm9yCiAKLTIwMDktMTItMjYgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5vcmc+Citjb21taXQgZjRiODQzZjgzNzEwYWMzNzhjNDhhYmQ4N2ZlNjZiYjUxOWQzMGQyZQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU2F0IE5vdiAyIDE3OjAxOjE1IDIwMTMgLTA0MDAKIAotCSogY29uZmlndXJlLmFjOiBEZWZpbmUgRkZJX01NQVBfRVhFQ19XUklUIGZvciB0aGUgZ2l2ZW4gdGFyZ2V0cy4KLQkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KLQkqIGZmaWNvbmZpZy5oLmluOiBMaWtld2lzZS4KLQkqIHNyYy9jbG9zdXJlcy5jOiBSZW1vdmUgdGhlIEZGSV9NTUFQX0VYRUNfV1JJVCBkZWZpbml0aW9uIGZvcgotCVNvbGFyaXMveDg2LgorICAgIERvbid0IGFsaWduIHN0YWNrIGZvciB3aW4zMgogCi0yMDA5LTEyLTI2ICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBsaW51eC1tNjhrLm9yZz4KK2NvbW1pdCBmM2NkMzkzNDU3MTNkYjhlNDE0Y2Y2NDJiNmNiNjVhNGNmZTYwMThjCitNZXJnZTogNjY2ZjNlNyA2YWExNTkwCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTYXQgTm92IDIgMTM6MTc6NTcgMjAxMyAtMDcwMAogCi0JKiBzcmMvcG93ZXJwYy9mZmkuYyAoZmZpX3ByZXBfYXJnc19TWVNWKTogQWR2YW5jZSBpbnRhcmdfY291bnQKLQl3aGVuIGEgZmxvYXQgYXJndW1lbnRzIGlzIHBhc3NlZCBpbiBtZW1vcnkuCi0JKGZmaV9jbG9zdXJlX2hlbHBlcl9TWVNWKTogTWFyayBnZW5lcmFsIHJlZ2lzdGVycyBhcyB1c2VkIHVwIHdoZW4KLQlhIDY0Yml0IG9yIHNvZnQtZmxvYXQgbG9uZyBkb3VibGUgYXJndW1lbnQgaXMgcGFzc2VkIGluIG1lbW9yeS4KKyAgICBNZXJnZSBwdWxsIHJlcXVlc3QgIzUxIGZyb20gdmJ1ZG92c2tpL2Zvcl91cHN0cmVhbQorICAgIAorICAgIERvbid0IHVzZSAxNiBieXRlIGFsaWduZWQgc3RhY2sgZm9yIFdJTjMyCiAKLTIwMDktMTItMjUgIE1hdHRoaWFzIEtsb3NlICA8ZG9rb0B1YnVudHUuY29tPgorY29tbWl0IDY2NmYzZTcxYjU2ZDkyYzQ5ZmNkMmQ3ZjM0OWI4ZjhlYmNhMGY4YTMKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFNhdCBPY3QgMjYgMDk6MTI6NDIgMjAxMyAtMDQwMAogCi0JKiBtYW4vZmZpX2NhbGwuMzogRml4ICNpbmNsdWRlIGluIGV4YW1wbGVzLgotCSogZG9jL2xpYmZmaS50ZXhpOiBBZGQgZGlyY2F0ZWdvcnkuCisgICAgQWRkIG1vcmUgY3JlZGl0cyB0byBSRUFETUUuICBUaWR5IHVwLgogCi0yMDA5LTEyLTI1ICBGcmFuayBFdmVyZGlqIDxmLnAueC5ldmVyZGlqQHR1ZGVsZnQubmw+Citjb21taXQgNzNhZGExNGU3NTZiYWQ5N2ZhZDBlNjkxNWE4MjFhM2M3ZTA3OWY4MQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU2F0IE9jdCAyNiAwOTowOTo0NSAyMDEzIC0wNDAwCiAKLQkqIGluY2x1ZGUvZmZpLmguaW46IFBsYWNlZCAnX19HTlVDX18nIGlmZGVmIGFyb3VuZAotCSdfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSknIGluIGZmaV9jbG9zdXJlLCBmaXhlcyBjb21waWxlIGZvcgotCUlSSVggTUlQU1BybyBjOTkuCi0JKiBpbmNsdWRlL2ZmaV9jb21tb24uaDogQWRkZWQgJ19fc2dpJyBkZWZpbmUgdG8gbm9uCi0JJ19fYXR0cmlidXRlX18oKF9fbW9kZV9fKCkpKScgaW50ZWdlciB0eXBlZGVmcy4KLQkqIHNyYy9taXBzL2ZmaS5jIChmZmlfY2FsbCwgZmZpX2Nsb3N1cmVfbWlwc19pbm5lcl9PMzIsCi0JZmZpX2Nsb3N1cmVfbWlwc19pbm5lcl9OMzIpOiBBZGRlZCAnZGVmaW5lZChfTUlQU0VCKScgdG8gQkUgY2hlY2suCi0JKGZmaV9jbG9zdXJlX21pcHNfaW5uZXJfTzMyLCBmZmlfY2xvc3VyZV9taXBzX2lubmVyX04zMik6IEFkZGVkCi0JRkZJX0xPTkdET1VCTEUgc3VwcG9ydCBhbmQgYWxpZ25tZW50KE4zMiBvbmx5KS4KLQkqIHNyYy9taXBzL2ZmaXRhcmdldC5oOiBDb3JyZWN0ZWQgJyNpbmNsdWRlIDxzZ2lkZWZzLmg+JyBmb3IgSVJJWCBhbmQKLQlmaXhlZCBub24gJ19fYXR0cmlidXRlX18oKF9fbW9kZV9fKCkpKScgaW50ZWdlciB0eXBlZGVmcy4KLQkqIHNyYy9taXBzL24zMi5TOiBQdXQgJyNpZmRlZiBsaW51eCcgYXJvdW5kICcuYWJpY2FsbHMnIGFuZCAnLmVoX2ZyYW1lJwotCXNpbmNlIHRoZXkgYXJlIExpbnV4L0dOVSBBc3NlbWJsZXIgc3BlY2lmaWMuCisgICAgVXBkYXRlIFJFQURNRQogCi0yMDA5LTEyLTI1ICBCcmFkbGV5IFNtaXRoICA8YnJhZEBicmFkLXNtaXRoLmNvLnVrPgorY29tbWl0IGQzMzcyYzU0Y2U3MTE3ZTgwZDM4OWJhODc1ZGM1YjZiMjIxM2M3MWUKK0F1dGhvcjogTWFyayBIIFdlYXZlciA8bWh3QG5ldHJpcy5vcmc+CitEYXRlOiAgIFNhdCBPY3QgMjYgMDg6MzA6MDYgMjAxMyAtMDQwMAogCi0JKiBjb25maWd1cmUuYWMsIE1ha2VmaWxlLmFtLCBzcmMvYXZyMzIvZmZpLmMsCi0Jc3JjL2F2cjMyL2ZmaXRhcmdldC5oLAotCXNyYy9hdnIzMi9zeXN2LlM6IEFkZCBBVlIzMiBwb3J0LgotCSogY29uZmlndXJlLCBNYWtlZmlsZS5pbjogUmVidWlsdC4KKyAgICBGaXggTjMyIEFCSSBpc3N1ZSBmb3IgTUlQUy4KIAotMjAwOS0xMi0yMSAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6Lm9yZz4KK2NvbW1pdCBkNjcxNmFiYTgxMThlYjA1MTM4ODVjZmU1NTdiZWRlYmI3MDE2ZThiCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBUdWUgT2N0IDE1IDE1OjQyOjQ5IDIwMTMgLTA0MDAKIAotCSogY29uZmlndXJlLmFjOiBNYWtlIGk/ODYgYnVpbGQgb24gRnJlZUJTRCBhbmQgT3BlbkJTRC4KLQkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKyAgICBVcGRhdGUgdHJhdmlzLWNpIGJ1aWxkIGRlcGVuZGVuY2llcyB0byBpbmNsdWRlIHRleGluZm8KIAotMjAwOS0xMi0xNSAgSm9obiBEYXZpZCBBbmdsaW4gIDxkYXZlLmFuZ2xpbkBucmMtY25yYy5nYy5jYT4KK2NvbW1pdCAxNmI5M2EyMTFiY2ZiZTRiZDBlZmRjZjk0ZGUyMjVhNzFhYTBlZTAyCitBdXRob3I6IFNhbmRyYSBMb29zZW1vcmUgPHNhbmRyYUBjb2Rlc291cmNlcnkuY29tPgorRGF0ZTogICBUdWUgT2N0IDE1IDE1OjMzOjU5IDIwMTMgLTA0MDAKIAotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2ZmaXRlc3QuaDogRGVmaW5lIFBSSXVQVFIgb24gUEEgSFAtVVguCisgICAgQWRkIG5pb3MyIHBvcnQuCiAKLTIwMDktMTItMTMgIEpvaG4gRGF2aWQgQW5nbGluICA8ZGF2ZS5hbmdsaW5AbnJjLWNucmMuZ2MuY2E+Citjb21taXQgMmY1NjI2Y2UwMmZjZTgyNjdhYjQ4Y2ViNmQ3ZDBlZDdkNjcyYTc1ZQorQXV0aG9yOiBTYW5kcmEgTG9vc2Vtb3JlIDxzYW5kcmFAY29kZXNvdXJjZXJ5LmNvbT4KK0RhdGU6ICAgVHVlIE9jdCAxNSAxNTozMjoxNiAyMDEzIC0wNDAwCiAKLQkqIHNyYy9wYS9mZmkuYyAoZmZpX2Nsb3N1cmVfaW5uZXJfcGEzMik6IEhhbmRsZSBGRklfVFlQRV9MT05HRE9VQkxFCi0JdHlwZSBvbiBIUC1VWC4KKyAgICBGaXggdGVzdHN1aXRlIGJ1ZwogCi0yMDEyLTAyLTEzICBLYWkgVGlldHogIDxrdGlldHpAcmVkaGF0LmNvbT4KK2NvbW1pdCBmNjRlNGE4NjU1NTdlNDQwNzc0NDM2YjRjMmIyZmQ3Mzc0MjkwZTk3CitBdXRob3I6IE1hcmN1cyBTaGF3Y3JvZnQgPG1hcmN1cy5zaGF3Y3JvZnRAYXJtLmNvbT4KK0RhdGU6ICAgVHVlIE9jdCAxNSAxNToyMDoxNCAyMDEzIC0wNDAwCiAKLQlQUiBsaWJmZmkvNTIyMjEKLQkqIHNyYy94ODYvZmZpLmMgKGZmaV9wcmVwX3Jhd19jbG9zdXJlX2xvYyk6IEFkZCB0aGlzY2FsbAotCXN1cHBvcnQgZm9yIFg4Nl9XSU4zMi4KLQkoRkZJX0lOSVRfVFJBTVBPTElORV9USElTQ0FMTCk6IEZpeCBkaXNwbGFjZW1lbnQuCisgICAgRml4IG1hbnkuYyB0ZXN0Y2FzZSBmb3IgQWFyY2g2NAogCi0yMDA5LTEyLTExICBFcmljIEJvdGNhem91ICA8ZWJvdGNhem91QGFkYWNvcmUuY29tPgorY29tbWl0IDEyOGNkMWQyZjM1OGYyNmQ5ZmE3NWEyN2NmMmIzMDM1NmY1ZGQ5MDMKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFR1ZSBPY3QgOCAwNjo0NTo1MSAyMDEzIC0wNDAwCiAKLQkqIHNyYy9zcGFyYy9mZmkuYyAoZmZpX2Nsb3N1cmVfc3BhcmNfaW5uZXJfdjkpOiBQcm9wZXJseSBhbGlnbiAnbG9uZwotCWRvdWJsZScgYXJndW1lbnRzLgorICAgIEZpeCBzcGVsbGluZyBlcnJvcnMKIAotMjAwOS0xMi0xMSAgRXJpYyBCb3RjYXpvdSAgPGVib3RjYXpvdUBhZGFjb3JlLmNvbT4KK2NvbW1pdCBmZjA2MjY5ZDcwN2NhZmJmZWYyYTg4YWZiMDdhNzljOWQxNDgwYzVmCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBUdWUgT2N0IDggMDY6MzI6MTggMjAxMyAtMDQwMAogCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmZpdGVzdC5oOiBEZWZpbmUgUFJJdVBUUiBvbiBTb2xhcmlzIDwgMTAuCisgICAgVXBkYXRlIFJFQURNRSBmb3IgTTg4SyBhbmQgVkFYCiAKLTIwMDktMTItMTAgIFJhaW5lciBPcnRoICA8cm9AQ2VCaVRlYy5VbmktQmllbGVmZWxkLkRFPgorY29tbWl0IGQyZmNiY2RmYmVhNzUwZDFmNmE5ZjQ5M2UyZTZjNGQ1ZmZhNzFiMzQKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFR1ZSBPY3QgOCAwNjoyNzo0NiAyMDEzIC0wNDAwCiAKLQlQUiBsaWJmZmkvNDA3MDAKLQkqIHNyYy9jbG9zdXJlcy5jIFtYODZfNjQgJiYgX19zdW5fXyAmJiBfX3N2cjRfX10KLQkoRkZJX01NQVBfRVhFQ19XUklUKTogRGVmaW5lLgorICAgIEFkZCBtODhrIGFuZCBWQVggc3VwcG9ydC4gVXBkYXRlIHNvbWUgY29uZmlndXJ5IGJpdHMuCiAKLTIwMDktMTItMDggIERhdmlkIERhbmV5ICA8ZGRhbmV5QGNhdml1bW5ldHdvcmtzLmNvbT4KK2NvbW1pdCA2YWExNTkwMGFjY2MwYTY0OGNkZWJmMTFlYzExZDExNjk3ZWJmZmZkCitBdXRob3I6IFZpdGFseSBCdWRvdnNraSA8dmJ1ZG92c2tpQGdtYWlsLmNvbT4KK0RhdGU6ICAgVGh1IFNlcCA1IDEyOjA1OjA2IDIwMTMgKzEwMDAKIAotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X21lZGl1bS5jOiBSZW1vdmUgeGZhaWwgZm9yIG1pcHMqLSotKgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlX3NwbGl0Mi5jOiBTYW1lLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X2xhcmdlLmM6IFNhbWUuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGVfc3BsaXQuYzogU2FtZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9sYXJnZTIuYzogU2FtZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9tZWRpdW0yLmM6IFNhbWUuCisgICAgRG9uJ3QgdXNlIDE2IGJ5dGUgYWxpZ25lZCBzdGFjayBmb3IgV0lOMzIKKyAgICAKKyAgICBUaGlzIGZpeGVzIGEgY3Jhc2ggd2hlbiBhY2Nlc3NpbmcgX19zdGRjYWxsIGZ1bmN0aW9ucyBpbiBQeXRob24gY3R5cGVzLgogCi0yMDA5LTEyLTA3ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+Citjb21taXQgM2I0NGQ0MTE1NjE0OWFmOGRhMmE1ODgyNWZlZmRmYTIzMjc0YWU3YQorQXV0aG9yOiBNYWtvdG8gS2F0byA8bV9rYXRvQGdhMi5zby1uZXQubmUuanA+CitEYXRlOiAgIFdlZCBKdWwgMTAgMTU6MzQ6NTMgMjAxMyArMDkwMAogCi0JKiBzcmMvcG93ZXJwYy9haXhfY2xvc3VyZS5TIChsaWJmZmlfY2xvc3VyZV9BU00pOiBGaXggdGFibGVqdW1wCi0JdHlwby4KKyAgICBGaXggYnVpbGQgZmFpbHVyZSB3aGVuIHVzaW5nIGNsYW5nIGZvciBBbmRyb2lkCisgICAgCisgICAgY2xhbmcgZm9yIEFuZHJvaWQgZ2VuZXJhdGVzIF9fZ251X2xpbnV4X18gZGVmaW5lLCBidXQgZ2NjIGZvciBBbmRyb2lkIGRvZXNuJ3QuICBTbyB3ZSBzaG91bGQgYWRkIGNoZWNrIGl0IGZvciBBbmRyb2lkCiAKLTIwMDktMTItMDUgIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KK2NvbW1pdCBkOTE4ZDQ3ODA5YzE3NGQ2MjI4MzMwNmIyODI3NDlmOGRiOTM2NjFmCitBdXRob3I6IE1pc2NoYSBKb25rZXIgPG1qb25rZXJAc3lub3BzeXMuY29tPgorRGF0ZTogICBNb24gSnVsIDggMTU6NTE6MzYgMjAxMyArMDIwMAogCi0JKiBzcmMvcG93ZXJwYy9haXguUzogVXBkYXRlIEFJWDMyIGNvZGUgdG8gYmUgY29uc2lzdGVudCB3aXRoIEFJWDY0Ci0JY29kZS4KLQkqIHNyYy9wb3dlcnBjL2FpeF9jbG9zdXJlLlM6IFNhbWUuCisgICAgYXJjOiBGaXggYnVpbGQgZXJyb3IKKyAgICAKKyAgICBPbmUgcGFydCBvZiB0aGUgcGF0Y2ggZm9yIEFSQyBzdXBwb3J0IHdhcyBtaXNzaW5nIGluIHRoZSB1cHN0cmVhbWVkCisgICAgdmVyc2lvbi4KKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBNaXNjaGEgSm9ua2VyIDxtam9ua2VyQHN5bm9wc3lzLmNvbT4KIAotMjAwOS0xMi0wNSAgUmFsZiBXaWxkZW5odWVzICA8UmFsZi5XaWxkZW5odWVzQGdteC5kZT4KK2NvbW1pdCBkM2QwOTliNDBjMTIyNTUwMjc5Nzg5MjAwMjYzMzQ2ZjEyMGY2OTA5CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBUdWUgSnVsIDIgMTY6MTE6MzggMjAxMyAtMDQwMAogCi0JKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KLQkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KLQkqIGluY2x1ZGUvTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCi0JKiBtYW4vTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCi0JKiB0ZXN0c3VpdGUvTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisgICAgbGl0dGxlLWVuZGlhbiBwcGM2NCBzdXBwb3J0CiAKLTIwMDktMTItMDQgIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KK2NvbW1pdCAwZjg2OTBhODRjODc0ZWMwOWEwOTBjOGM2YWRmYjkzYzU5NGFjYWM2CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBUdWUgSnVsIDIgMTU6NTQ6NDAgMjAxMyAtMDQwMAogCi0JKiBzcmMvcG93ZXJwYy9haXhfY2xvc3VyZS5TOiBSZW9yZ2FuaXplIDY0LWJpdCBjb2RlIHRvIG1hdGNoCi0JbGludXg2NF9jbG9zdXJlLlMuCisgICAgUmVidWlsZCBmb3IgQVJDIGFkZGl0aW9ucwogCi0yMDA5LTEyLTA0ICBVcm9zIEJpemphayAgPHViaXpqYWtAZ21haWwuY29tPgorY29tbWl0IGY4ODExOGIzNDVmMjdjNDZmNTQ0NWQ2ZTQ4MzJjNDk4ZmY5YTZkODUKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFR1ZSBKdWwgMiAxNTo1MToyNyAyMDEzIC0wNDAwCiAKLQlQUiBsaWJmZmkvNDE5MDgKLQkqIHNyYy94ODYvZmZpNjQuYyAoY2xhc3NpZnlfYXJndW1lbnQpOiBVcGRhdGUgZnJvbQotCWdjYy9jb25maWcvaTM4Ni9pMzg2LmMuCi0JKGZmaV9jbG9zdXJlX3VuaXg2NF9pbm5lcik6IERvIG5vdCB1c2UgdGhlIGFkZHJlc3Mgb2YgdHdvIGNvbnNlY3V0aXZlCi0JU1NFIHJlZ2lzdGVycyBkaXJlY3RseS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZGJsc19zdHJ1Y3QuYyAobWFpbik6IFJlbW92ZSB4ZmFpbAotCWZvciB4ODZfNjQgbGludXggdGFyZ2V0cy4KKyAgICBSZXZlcnQgIk1lcmdlIHB1bGwgcmVxdWVzdCAjMzYgZnJvbSBhYmVyZ21laWVyL2Vtc2NyaXB0ZW5fZml4IgorICAgIAorICAgIFRoaXMgcmV2ZXJ0cyBjb21taXQgNmE0ZDkwMWRkZTdiM2Y4Nzk4NGM1NjM1MDU3MTdjZGUzMTEzZDE2ZSwgcmV2ZXJzaW5nCisgICAgY2hhbmdlcyBtYWRlIHRvIGI1MGExM2I5YzA3ZWMwOWFmNGI5Njk3ZTQ4MmFjZGFkNTcxZTY5NjEuCiAKLTIwMDktMTItMDQgIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KK2NvbW1pdCA2YTRkOTAxZGRlN2IzZjg3OTg0YzU2MzUwNTcxN2NkZTMxMTNkMTZlCitNZXJnZTogYjUwYTEzYiA1ODcwMDJjCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBUdWUgSnVsIDIgMTI6MTI6MzQgMjAxMyAtMDcwMAogCi0JKiBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmMgKGZmaV9jbG9zdXJlX2hlbHBlcl9EQVJXSU4pOiBJbmNyZW1lbnQKLQlwZnIgZm9yIGxvbmcgZG91YmxlIHNwbGl0IGJldHdlZW4gZnByMTMgYW5kIHN0YWNrLgorICAgIE1lcmdlIHB1bGwgcmVxdWVzdCAjMzYgZnJvbSBhYmVyZ21laWVyL2Vtc2NyaXB0ZW5fZml4CisgICAgCisgICAgRml4ZXMgZm9yIGJ1aWxkaW5nIHdpdGggRW1zY3JpcHRlbgogCi0yMDA5LTEyLTAzICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+Citjb21taXQgYjUwYTEzYjljMDdlYzA5YWY0Yjk2OTdlNDgyYWNkYWQ1NzFlNjk2MQorTWVyZ2U6IDc2N2YxZjkgYjA4MmUxNQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgVHVlIEp1bCAyIDEyOjEwOjI2IDIwMTMgLTA3MDAKIAotCSogc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jIChmZmlfcHJlcF9hcmdzKTogSW5jcmVtZW50IG5leHRfYXJnIGFuZAotCWZwYXJnX2NvdW50IHR3aWNlIGZvciBsb25nIGRvdWJsZS4KKyAgICBNZXJnZSBwdWxsIHJlcXVlc3QgIzQ0IGZyb20gZm9zcy1mb3Itc3lub3BzeXMtZHdjLWFyYy1wcm9jZXNzb3JzL2FyY19zdXBwb3J0CisgICAgCisgICAgQWRkIEFSQyBzdXBwb3J0CiAKLTIwMDktMTItMDMgIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KK2NvbW1pdCA3NjdmMWY5NmU1MjgyZGE0NGQ3MzQwZTY4MTVlOTgyMGEzZjc4ZTM5CitNZXJnZTogYzNjNDBlMCBiOGE5MWQ4CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBUdWUgSnVsIDIgMTI6MDg6MDQgMjAxMyAtMDcwMAogCi0JUFIgbGliZmZpLzQyMjQzCi0JKiBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmMgKGZmaV9wcmVwX2FyZ3MpOiBSZW1vdmUgZXh0cmEgcGFyZW50aGVzZXMuCisgICAgTWVyZ2UgcHVsbCByZXF1ZXN0ICM0MyBmcm9tIEplbnNUaW1tZXJtYW4vX19tMTI4CisgICAgCisgICAgYWRkZWQgaW5jbHVkZSBmb3IgeG1taW50cmluLmgKIAotMjAwOS0xMi0wMyAgVXJvcyBCaXpqYWsgIDx1Yml6amFrQGdtYWlsLmNvbT4KK2NvbW1pdCBiOGE5MWQ4MWJlNzdkNDc5MzI3ZmRiNmJkZDlmZGFlNmQxOGU2ZTYzCitBdXRob3I6IEplbnMgVGltbWVybWFuIDxqZW5zLnRpbW1lcm1hbkB1Z2VudC5iZT4KK0RhdGU6ICAgVHVlIEp1bCAyIDEwOjU3OjM3IDIwMTMgKzAyMDAKIAotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19sb25nZG91YmxlX3ZhLmMgKG1haW4pOiBGaXggZm9ybWF0IHN0cmluZy4KLQlSZW1vdmUgeGZhaWxzIGZvciB4ODYgbGludXggdGFyZ2V0cy4KKyAgICBhZGRlZCBpbmNsdWRlIGZvciB4bW1pbnRyaW4uaAogCi0yMDA5LTEyLTAyICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+Citjb21taXQgYjA4MmUxNTA5MTk2MTM3M2MwM2QxMGVkMDI1MWY2MTllYmI2ZWQ3NgorQXV0aG9yOiBNaXNjaGEgSm9ua2VyIDxtam9ua2VyQHN5bm9wc3lzLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAxMCAxNjoxOTozMyAyMDEzICswMjAwCiAKLQkqIHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYyAoZmZpX3ByZXBfYXJncyk6IEZpeCB0eXBvIGluIElOVDY0Ci0JY2FzZS4KKyAgICBBZGQgQVJDIHN1cHBvcnQKKyAgICAKKyAgICBUaGlzIGFkZHMgc3VwcG9ydCBmb3IgdGhlIEFSQyBhcmNoaXRlY3R1cmUgdG8gbGliZmZpLiBEZXNpZ25XYXJlIEFSQworICAgIGlzIGEgZmFtaWx5IG9mIHByb2Nlc3NvcnMgZnJvbSBTeW5vcHN5cywgSW5jLgorICAgIAorICAgIFRoaXMgcGF0Y2ggaGFzIGJlZW4gdGVzdGVkIG9uIGEgbGl0dGxlLWVuZGlhbiBzeXN0ZW0gYW5kIHBhc3NlcworICAgIHRoZSB0ZXN0c3VpdGUuCisgICAgCisgICAgU2lnbmVkLW9mZi1ieTogTWlzY2hhIEpvbmtlciA8bWpvbmtlckBzeW5vcHN5cy5jb20+CiAKLTIwMDktMTItMDEgIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KK2NvbW1pdCBjYzliNTE4Njg3ZTQ2YjBkMWFjYWZkZDRiYzNmM2IyODFjMjVhM2Q5CitBdXRob3I6IE1hcmNpbiBXb2pkeXIgPHdvamR5ckBnbWFpbC5jb20+CitEYXRlOiAgIFR1ZSBNYXkgMTQgMTU6MDE6MjMgMjAxMyArMDIwMAogCi0JKiBzcmMvcG93ZXJwYy9haXguUyAoZmZpX2NhbGxfQUlYKTogQ29udmVydCB0byBtb3JlIHN0YW5kYXJkCi0JcmVnaXN0ZXIgdXNhZ2UuICBDYWxsIGZmaV9wcmVwX2FyZ3MgZGlyZWN0bHkuICBBZGQgbG9uZyBkb3VibGUKLQlyZXR1cm4gdmFsdWUgc3VwcG9ydC4KLQkqIHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYyAoZmZpX3ByZXBfYXJncyk6IERvdWJsZSBhcmcgaW5jcmVtZW50Ci0JYXBwbGllcyB0byBGRklfVFlQRV9ET1VCTEUuICBDb3JyZWN0IGZwcl9iYXNlIGluY3JlbWVudCB0eXBvLgotCVNlcGFyYXRlIEZGSV9UWVBFX1NJTlQzMiBhbmQgRkZJX1RZUEVfVUlOVDMyIGNhc2VzLgotCShmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IE9ubHkgMTYgYnl0ZSBzdGFjayBhbGlnbm1lbnQgaW4gNjQgYml0Ci0JbW9kZS4KLQkoZmZpX2Nsb3N1cmVfaGVscGVyX0RBUldJTik6IFJlbW92ZSBuZiBhbmQgbmcgY291bnRlcnMuICBNb3ZlIHRlbXAKLQlpbnRvIGNhc2UuCi0JKiBzcmMvcG93ZXJwYy9haXhfY2xvc3VyZS5TOiBNYWludGFpbiAxNiBieXRlIHN0YWNrIGFsaWdubWVudC4KLQlBbGxvY2F0ZSByZXN1bHQgYXJlYSBiZXR3ZWVuIHBhcmFtcyBhbmQgRlBScy4KKyAgICBVcGRhdGUgbGliZmZpLnBjLmluCisgICAgCisgICAgdXNlIC1MJHt0b29sZXhlY2xpYmRpcn0gaW5zdGVhZCBvZiAtTCR7bGliZGlyfQorICAgIHRvIGJlIGNvbnNpc3RlbnQgd2l0aCBNYWtlZmlsZS5hbQogCi0yMDA5LTExLTMwICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+Citjb21taXQgNTg3MDAyYzA5MmNmZmU2ZTdhOGQ3MDI4ZjI0NmMyNDFkMDNiNzM4YworQXV0aG9yOiBBbmRyZWFzIEJlcmdtZWllciA8YW5kcmVhcy5iZXJnbWVpZXJAZ214Lm5ldD4KK0RhdGU6ICAgRnJpIEFwciAxOSAxNzoxMjoyNCAyMDEzICswMjAwCiAKLQlQUiB0YXJnZXQvMzU0ODQKLQkqIHNyYy9wb3dlcnBjL2ZmaXRhcmdldC5oIChQT1dFUlBDNjQpOiBEZWZpbmUgZm9yIFBQQzY0IExpbnV4IGFuZAotCUFJWDY0LgotCSogc3JjL3Bvd2VycGMvYWl4LlM6IEltcGxlbWVudCBBSVg2NCB2ZXJzaW9uLgotCSogc3JjL3Bvd2VycGMvYWl4X2Nsb3N1cmUuUzogSW1wbGVtZW50IEFJWDY0IHZlcnNpb24uCi0JKGZmaV9jbG9zdXJlX0FTTSk6IFVzZSBleHRzYiwgbGhhIGFuZCBkaXNwbGFtZW50IGFkZHJlc3Nlcy4KLQkqIHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYyAoZmZpX3ByZXBfYXJncyk6IEltcGxlbWVudCBBSVg2NAotCXN1cHBvcnQuCi0JKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogU2FtZS4KLQkoZmZpX2NhbGwpOiBTYW1lLgotCShmZmlfY2xvc3VyZV9oZWxwZXJfREFSV0lOKTogU2FtZS4KKyAgICBFbmFibGUgZGlzYWJsaW5nIG9mIGxpYnRvb2wgb24gcGxhdGZvcm1zIHdoZXJlIGl0IGRvZXMgbm90IHdvcmsgKGUuZy4gTExWTSkuCisgICAgQnVpbGQgbGlicmFyaWVzIG5vcm1hbGx5IHRoZW4uCiAKLTIwMDktMTEtMDIgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5vcmc+Citjb21taXQgYzNjNDBlMDI5MDM3N2Q3Y2Y5NDhiMDcyZWVkZDgzMTdjNGJmMjE1ZQorTWVyZ2U6IGVkZTk2ZTQgNDc1MGUzYworQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU2F0IE1hciAzMCAwNToyNDoxNCAyMDEzIC0wNzAwCiAKLQlQUiBsaWJmZmkvNDE5MDgKLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC90ZXN0Y2xvc3VyZS5jOiBOZXcgdGVzdC4KKyAgICBNZXJnZSBwdWxsIHJlcXVlc3QgIzM0IGZyb20gZGF2aWRzY2gvYXJtaGYKKyAgICAKKyAgICBGaXggQVJNIGhhcmQtZmxvYXQgc3VwcG9ydCBmb3IgbGFyZ2UgbnVtYmVycyBvZiBWRlAgYXJndW1lbnRzCiAKLTIwMDktMDktMjggIEthaSBUaWV0eiAgPGthaS50aWV0ekBvbmV2aXNpb24uY29tPgorY29tbWl0IDQ3NTBlM2M2NjJmZDk1NjljYjNlMmQyOGY1Mzk2ODVmZDFjYThjYWYKK0F1dGhvcjogRGF2aWQgU2NobmVpZGVyIDxkYXZpZC5zY2huZWlkZXJAYml2YWIuZGU+CitEYXRlOiAgIFRodSBNYXIgMjggMTY6NTY6MzYgMjAxMyArMDEwMAogCi0JKiBzcmMveDg2L3dpbjY0LlMgKF9mZmlfY2FsbF93aW42NCBzdGFjayk6IFJlbW92ZSBmb3IgZ251Ci0JYXNzZW1ibHkgdmVyc2lvbiB1c2Ugb2YgX19fY2hrc3RrLgorICAgIHVwZGF0ZSBjaGFuZ2Vsb2cKIAotMjAwOS0wOS0yMyAgTWF0dGhpYXMgS2xvc2UgIDxkb2tvQHVidW50dS5jb20+Citjb21taXQgOTcwOGU3Y2YwOWYxYmY4MTVmNGQ2NDg1ZWIxZjE4MGZhYmIzNTgwNAorQXV0aG9yOiBEYXZpZCBTY2huZWlkZXIgPGRhdmlkLnNjaG5laWRlckBiaXZhYi5kZT4KK0RhdGU6ICAgV2VkIE1hciAyNyAxOTozMTowNCAyMDEzICswMTAwCiAKLQlQUiBsaWJmZmkvNDAyNDIsIFBSIGxpYmZmaS80MTQ0MwotCSogc3JjL2FybS9zeXN2LlMgKF9fQVJNX0FSQ0hfXyk6IERlZmluZSBmb3IgcHJvY2Vzc29ycwotCV9fQVJNX0FSQ0hfNlQyX18sIF9fQVJNX0FSQ0hfNk1fXywgX19BUk1fQVJDSF83X18sCi0JX19BUk1fQVJDSF83QV9fLCBfX0FSTV9BUkNIXzdSX18sIF9fQVJNX0FSQ0hfN01fXy4KLQlDaGFuZ2UgdGhlIGNvbmRpdGlvbmFscyB0byBfX1NPRlRGUF9fIHx8IF9fQVJNX0VBQklfXwotCWZvciAtbWZsb2F0LWFiaT1zb2Z0ZnAgdG8gd29yay4KKyAgICBmb2xvdyB0aGUgQVJNIGhhcmQtZmxvYXQgQUJJIGluIGZmaV9wcmVwX2luY29taW5nX2FyZ3NfVkZQCiAKLTIwMDktMDktMTcgIExvcmVuIEouIFJpdHRsZSAgPGxqcml0dGxlQGFjbS5vcmc+Citjb21taXQgYjQxMTIwOTgxZTVlNDljYTJkYTEwYjk0YjE1NDc3NWY1MGRhNWYzNgorQXV0aG9yOiBEYXZpZCBTY2huZWlkZXIgPGRhdmlkLnNjaG5laWRlckBiaXZhYi5kZT4KK0RhdGU6ICAgV2VkIE1hciAyNyAxNjozODozNSAyMDEzICswMTAwCiAKLQlQUiB0ZXN0c3VpdGUvMzI4NDMgKHN0cmlrZXMgYWdhaW4pCi0JKiBzcmMveDg2L2ZmaS5jIChmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IEFkZCBYODZfRlJFRUJTRCB0bwotCWVuYWJsZSBwcm9wZXIgZXh0ZW5zaW9uIG9uIGNoYXIgYW5kIHNob3J0LgorICAgIGNyZWF0ZSBzZXBhcmF0ZWQgdmVyc2lvbnMgb2YgZmZpX3ByZXBfaW5jb21pbmdfYXJnc18qIGZvciBTWVNWIGFuZCBWRlAgQUJJcy4KKyAgICAKKyAgICBUaGUgZGlmZmVyZW50IHZlcnNpb25zIHdpbGwgYmUgY2FsbGVkIGRlcGVuZGluZyBvbiB0aGUgdmFsdWUgb2YgY2lmLT5hYmkKIAotMjAwOS0wOS0xNSAgRGF2aWQgRGFuZXkgIDxkZGFuZXlAY2F2aXVtbmV0d29ya3MuY29tPgorY29tbWl0IGRkMjZmMWYzOWM1NDg2MWM1YjkxOTMxZjBmMzdhNzI5NDJjMmEwNzIKK0F1dGhvcjogRGF2aWQgU2NobmVpZGVyIDxkYXZpZC5zY2huZWlkZXJAYml2YWIuZGU+CitEYXRlOiAgIFRodSBNYXIgMjggMTU6Mzk6MDEgMjAxMyArMDEwMAogCi0JKiBzcmMvamF2YV9yYXdfYXBpLmMgKGZmaV9qYXZhX3Jhd190b19ydmFsdWUpOiBSZW1vdmUgc3BlY2lhbAotCWhhbmRsaW5nIGZvciBGRklfVFlQRV9QT0lOVEVSLgotCSogc3JjL21pcHMvZmZpdGFyZ2V0LmggKEZGSV9UWVBFX1NUUlVDVF9EX1NPRlQsCi0JRkZJX1RZUEVfU1RSVUNUX0ZfU09GVCwgRkZJX1RZUEVfU1RSVUNUX0REX1NPRlQsCi0JRkZJX1RZUEVfU1RSVUNUX0ZGX1NPRlQsIEZGSV9UWVBFX1NUUlVDVF9GRF9TT0ZULAotCUZGSV9UWVBFX1NUUlVDVF9ERl9TT0ZULCBGRklfVFlQRV9TVFJVQ1RfU09GVCk6IE5ldyBkZWZpbmVzLgotCShGRklfTjMyX1NPRlRfRkxPQVQsIEZGSV9ONjRfU09GVF9GTE9BVCk6IE5ldyBmZmlfYWJpIGVudW1lcmF0aW9ucy4KLQkoZW51bSBmZmlfYWJpKTogU2V0IEZGSV9ERUZBVUxUX0FCSSBmb3Igc29mdC1mbG9hdC4KLQkqIHNyYy9taXBzL24zMi5TIChmZmlfY2FsbF9OMzIpOiBBZGQgaGFuZGxpbmcgZm9yIHNvZnQtZmxvYXQKLQlzdHJ1Y3R1cmUgYW5kIHBvaW50ZXIgcmV0dXJucy4KLQkoZmZpX2Nsb3N1cmVfTjMyKTogQWRkIGhhbmRsaW5nIGZvciBwb2ludGVyIHJldHVybnMuCi0JKiBzcmMvbWlwcy9mZmkuYyAoZmZpX3ByZXBfYXJncywgY2FsY19uMzJfc3RydWN0X2ZsYWdzLAotCWNhbGNfbjMyX3JldHVybl9zdHJ1Y3RfZmxhZ3MpOiBIYW5kbGUgc29mdC1mbG9hdC4KLQkoZmZpX3ByZXBfY2lmX21hY2hkZXApOiAgSGFuZGxlIHNvZnQtZmxvYXQsIGZpeCBwb2ludGVyIGhhbmRsaW5nLgotCShmZmlfY2FsbF9OMzIpOiBEZWNsYXJlIHByb3BlciBhcmd1bWVudCB0eXBlcy4KLQkoZmZpX2NhbGwsIGNvcHlfc3RydWN0X04zMiwgZmZpX2Nsb3N1cmVfbWlwc19pbm5lcl9OMzIpOiBIYW5kbGUKLQlzb2Z0LWZsb2F0LgorICAgIGFkZCBhIGZhaWxpbmcgdGVzdCBmb3IgY2xvc3VyZXMgb24gQVJNIGhhcmRmbG9hdAogCi0yMDA5LTA4LTI0ICBSYWxmIFdpbGRlbmh1ZXMgIDxSYWxmLldpbGRlbmh1ZXNAZ214LmRlPgorY29tbWl0IDNjMTYwODYxM2FiM2MyMTg0MjIyYjk4YzU0ODJjZGRlZGQ2YjU1OWIKK0F1dGhvcjogRGF2aWQgU2NobmVpZGVyIDxkYXZpZC5zY2huZWlkZXJAYml2YWIuZGU+CitEYXRlOiAgIFR1ZSBNYXIgMjYgMTk6MjQ6NDcgMjAxMyArMDEwMAogCi0JKiBjb25maWd1cmUuYWMgKEFDX1BSRVJFUSk6IEJ1bXAgdG8gMi42NC4KKyAgICBleHRlbmQgZmZpX3ByZXBhcmVfYXJncyBmb3IgRkZJX1ZGUCAoaGFyZC1mbG9hdCBBQkkpLCBmaXhpbmcgYW4gaXNzdWUgd2l0aCBwYXNzaW5nIFZGUCBhcmd1bWVudHMgaW4gVkZQIHJlZ2lzdGVycyBhbmQgdGhlIHN0YWNrLCB3aGlsZSBhdCB0aGUgc2FtZSB0aW1lIG5vdCB1c2luZyBhbGwgY29yZSByZWdpc3RlcnMuCiAKLTIwMDktMDgtMjIgIFJhbGYgV2lsZGVuaHVlcyAgPFJhbGYuV2lsZGVuaHVlc0BnbXguZGU+Citjb21taXQgMGYyZmYyZDRjOTI3MTliZTg5MzYxNzlmOWFiNjc0ZjRkMWEzZmQxNAorQXV0aG9yOiBEYXZpZCBTY2huZWlkZXIgPGRhdmlkLnNjaG5laWRlckBiaXZhYi5kZT4KK0RhdGU6ICAgVHVlIE1hciAyNiAxOToyMjowMiAyMDEzICswMTAwCiAKLQkqIE1ha2VmaWxlLmFtIChpbnN0YWxsLWh0bWwsIGluc3RhbGwtcGRmKTogUmVtb3ZlLgotCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisgICAgc2VwYXJhdGUgQVJNIGZmaV9wcmVwYXJlX2FyZ3MgaW4gYSB2ZXJzaW9uIGltcGxlbWVudGluZyB0aGUgc2ltcGxlIFNZU1YgY2FsbGluZyBjb252ZW50aW9uIGFuZCBvbmUgZm9yIHRoZSBoYXJkLWZsb2F0IGNhbGxpbmcgY29udmVudGlvbgogCi0JKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KLQkqIGFjbG9jYWwubTQ6IFJlZ2VuZXJhdGUuCi0JKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCi0JKiBmZmljb25maWcuaC5pbjogUmVnZW5lcmF0ZS4KLQkqIGluY2x1ZGUvTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCi0JKiBtYW4vTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCi0JKiB0ZXN0c3VpdGUvTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCitjb21taXQgM2EzNTJiOGE4MjUyNDAwYTgzZGUyMmM3YzQyNGJmMTg4N2I0YTJlZgorQXV0aG9yOiBEYXZpZCBTY2huZWlkZXIgPGRhdmlkLnNjaG5laWRlckBiaXZhYi5kZT4KK0RhdGU6ICAgVHVlIE1hciAyNiAxNDoyNDowNCAyMDEzICswMTAwCiAKLTIwMTEtMDgtMjIgIEphc3BlciBMaWV2aXNzZSBBZHJpYWFuc2UgPGphc3BlckBvcGVuYnNkLm9yZz4KKyAgICBtb3ZlIHRoZSBoYXJkZmxvYXQgc3BlY2lmaWMgYXJndW1lbnQgY29weWluZyBjb2RlIHRvIHRoZSBoZWxwZXIgZnVuY3Rpb24KIAotCSogY29uZmlndXJlLmFjOiBBZGQgT3BlbkJTRC9ocHBhIGFuZCBPcGVuQlNEL3Bvd2VycGMgc3VwcG9ydC4KLQkqIGNvbmZpZ3VyZTogUmVidWlsdC4KK2NvbW1pdCA1ZGY2Yjc5NDRhNDIyNWI2ZWIzMjlmMzg4NmJlNjRlMDRlOTY2ZjI5CitBdXRob3I6IERhdmlkIFNjaG5laWRlciA8ZGF2aWQuc2NobmVpZGVyQGJpdmFiLmRlPgorRGF0ZTogICBUdWUgTWFyIDI2IDE0OjAyOjIxIDIwMTMgKzAxMDAKIAotMjAwOS0wNy0zMCAgUmFsZiBXaWxkZW5odWVzICA8UmFsZi5XaWxkZW5odWVzQGdteC5kZT4KKyAgICBleHRyYWN0IHNldHRpbmcgb2YgYXJndW1lbnRzIHRvIGJlIHBhc3NlZCB0byBhIGhlbHBlciBmdW5jdGlvbgogCi0JKiBjb25maWd1cmUuYWMgKF9BQ19BUkdfVkFSX1BSRUNJT1VTKTogVXNlIG00X3JlbmFtZV9mb3JjZS4KK2NvbW1pdCA3ZDEwNDhjNDcxYmI0YjFmOWQ2N2E5ZTlmOGU5NWY5YTFkMmU2ZDQ1CitBdXRob3I6IERhdmlkIFNjaG5laWRlciA8ZGF2aWQuc2NobmVpZGVyQGJpdmFiLmRlPgorRGF0ZTogICBUdWUgTWFyIDI2IDExOjMzOjMzIDIwMTMgKzAxMDAKIAotMjAwOS0wNy0yNCAgRGF2ZSBLb3JuICA8ZGF2ZS5rb3JuLmN5Z3dpbkBnbWFpbC5jb20+CisgICAgZXh0cmFjdCBjb2RlIHRvIGFsaWduIHRoZSBhcmd1bWVudCBzdG9yYWdlIHBvaW50ZXIgdG8gYSBoZWxwZXIgZnVuY3Rpb24KIAotCVBSIGxpYmZmaS80MDgwNwotCSogc3JjL3g4Ni9mZmkuYyAoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBBbHNvIHVzZSBzaWduL3plcm8tZXh0ZW5kaW5nCi0JcmV0dXJuIHR5cGVzIGZvciBYODZfV0lOMzIuCi0JKiBzcmMveDg2L3dpbjMyLlMgKF9mZmlfY2FsbF9TWVNWKTogSGFuZGxlIG9taXR0ZWQgcmV0dXJuIHR5cGVzLgotCShfZmZpX2NhbGxfU1REQ0FMTCwgX2ZmaV9jbG9zdXJlX1NZU1YsIF9mZmlfY2xvc3VyZV9yYXdfU1lTViwKLQlfZmZpX2Nsb3N1cmVfU1REQ0FMTCk6IExpa2V3aXNlLgorY29tbWl0IGI5ZjAxMzc4OGYwZjM4NGM0MjNhZDk2MzQ3NWFhYWNiNTU1OTgxMzUKK0F1dGhvcjogRGF2aWQgU2NobmVpZGVyIDxkYXZpZC5zY2huZWlkZXJAYml2YWIuZGU+CitEYXRlOiAgIE1vbiBNYXIgMjUgMTM6Mjc6MzYgMjAxMyArMDEwMAogCi0JKiBzcmMvY2xvc3VyZXMuYyAoaXNfc2VsaW51eF9lbmFibGVkKTogRGVmaW5lIHRvIGNvbnN0IDAgZm9yIEN5Z3dpbi4KLQkoZGxtbWFwLCBkbG11bm1hcCk6IEFsc28gdXNlIHRoZXNlIGZ1bmN0aW9ucyBvbiBDeWd3aW4uCisgICAgYWRkIGEgdGVzdGNhc2UsIHRoYXQgb24gQVJNIGhhcmRmbG9hdCBuZWVkcyBtb3JlIHRoYW4gdGhlIDggIFZGUCBhcmd1bWVudCByZWdpc3RlcnMgdG8gcGFzcyBhcmd1bWVudHMgdG8gYSBjYWxsCiAKLTIwMDktMDctMTEgIFJpY2hhcmQgU2FuZGlmb3JkICA8cmRzYW5kaWZvcmRAZ29vZ2xlbWFpbC5jb20+Citjb21taXQgMmZiZGIwZjIzMWNhZmRiNzdiMDI1ZDNjZDhhZmU5MGNkYTk5YjNiYQorQXV0aG9yOiBEYXZpZCBTY2huZWlkZXIgPGRhdmlkLnNjaG5laWRlckBiaXZhYi5kZT4KK0RhdGU6ICAgTW9uIE1hciAyNSAxMzoyNjowMiAyMDEzICswMTAwCiAKLQlQUiB0ZXN0c3VpdGUvNDA2OTkKLQlQUiB0ZXN0c3VpdGUvNDA3MDcKLQlQUiB0ZXN0c3VpdGUvNDA3MDkKLQkqIHRlc3RzdWl0ZS9saWIvbGliZmZpLWRnLmV4cDogUmV2ZXJ0IDIwMDktMDctMDIsIDIwMDktMDctMDEgYW5kCi0JMjAwOS0wNi0zMCBjb21taXRzLgorICAgIHVzZSB0aGUgYWJzb2x1dGUgdmFsdWUgdG8gY2hlY2sgdGhlIHRlc3QgcmVzdWx0IGFnYWluc3QgYW4gZXBzaWxvbgogCi0yMDA5LTA3LTAxICBSaWNoYXJkIFNhbmRpZm9yZCAgPHIuc2FuZGlmb3JkQHVrLmlibS5jb20+Citjb21taXQgZWRlOTZlNGViNjYwYmJmM2UwZmUwNDgxMzVlZmE4MTA2ZjQ4YWY1ZAorTWVyZ2U6IGYyMmFiM2MgOWUzNDk5MgorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU3VuIE1hciAxNyAxODozODoyMSAyMDEzIC0wNDAwCiAKLQkqIHRlc3RzdWl0ZS9saWIvbGliZmZpLWRnLmV4cCAobGliZmZpLWluaXQpOiBTZXQgbGRfbGlicmFyeV9wYXRoCi0JdG8gIiIgYmVmb3JlIGFkZGluZyBwYXRocy4gIChUaGlzIHJlaW5zdGF0ZXMgYW4gYXNzaWdubWVudCB0aGF0Ci0Jd2FzIHJlbW92ZWQgYnkgbXkgMjAwOS0wNi0zMCBjb21taXQsIGJ1dCBjaGFuZ2VzIHRoZSBpbml0aWFsCi0JdmFsdWUgZnJvbSAiLiIgdG8gIiIuKQorICAgIE1lcmdlIGJyYW5jaCAnbWFzdGVyJyBvZiBnaXRodWIuY29tOi9hdGdyZWVuL2xpYmZmaQogCi0yMDA5LTA3LTAxICBILkouIEx1ICA8aG9uZ2ppdS5sdUBpbnRlbC5jb20+Citjb21taXQgZjIyYWIzYzY4NzdjYmRkMDdmMDU4YjY4ODE2YjAwODZiMWNiMGUxZQorTWVyZ2U6IDEyYjE4ODYgZDA4MTI0YgorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU3VuIE1hciAxNyAxODozNDo1NCAyMDEzIC0wNDAwCiAKLQlQUiB0ZXN0c3VpdGUvNDA2MDEKLQkqIHRlc3RzdWl0ZS9saWIvbGliZmZpLWRnLmV4cCAobGliZmZpLWluaXQpOiBQcm9wZXJseSBzZXQKLQlnY2NkaXIuICBBZGp1c3QgbGRfbGlicmFyeV9wYXRoIGZvciBnY2Mgb25seSBpZiBnY2NkaXIgaXNuJ3QKLQllbXB0eS4KKyAgICBNZXJnZSBicmFuY2ggJ21hc3Rlcicgb2YgZ2l0aHViLmNvbTovYXRncmVlbi9saWJmZmkKIAotMjAwOS0wNi0zMCAgUmljaGFyZCBTYW5kaWZvcmQgIDxyLnNhbmRpZm9yZEB1ay5pYm0uY29tPgorY29tbWl0IDllMzQ5OTJhNWVhMmZkYTFkYmE1ODc1YmY5NmRjOTFhNzIzMGY1MWYKK01lcmdlOiAxMmIxODg2IGQwODEyNGIKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFN1biBNYXIgMTcgMTg6MzQ6NTQgMjAxMyAtMDQwMAogCi0JKiB0ZXN0c3VpdGUvbGliL2xpYmZmaS1kZy5leHAgKGxpYmZmaS1pbml0KTogRG9uJ3QgYWRkICIuIgotCXRvIGxkX2xpYnJhcnlfcGF0aC4gIFVzZSBhZGRfcGF0aC4gIEFkZCBqdXN0IGZpbmRfbGliZ2NjX3MKLQl0byBsZF9saWJyYXJ5X3BhdGgsIG5vdCBldmVyeSBsaWJnY2MgbXVsdGlsaWIgZGlyZWN0b3J5LgorICAgIE1lcmdlIGJyYW5jaCAnbWFzdGVyJyBvZiBnaXRodWIuY29tOi9hdGdyZWVuL2xpYmZmaQogCi0yMDA5LTA2LTE2ICBXaW0gTGV3aXMgIDx3aW1sQGhoaGgub3JnPgorY29tbWl0IDEyYjE4ODZkN2IxZjhhYTI2NGIxZDM0OGJmYTQ3YTBlMTQ3MTJkZjQKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFN1biBNYXIgMTcgMTg6MzI6MTIgMjAxMyAtMDQwMAogCi0JKiBzcmMvcG93ZXJwYy9mZmkuYzogQXZvaWQgY2xvYmJlcmluZyBjcjMgYW5kIGNyNCwgd2hpY2ggYXJlCi0Jc3VwcG9zZWQgdG8gYmUgY2FsbGVlLXNhdmVkLgotCSogc3JjL3Bvd2VycGMvc3lzdi5TIChzbWFsbF9zdHJ1Y3RfcmV0dXJuX3ZhbHVlKTogRml4IG92ZXJydW4gb2YKLQlyZXR1cm4gYnVmZmVyIGZvciBvZGQtc2l6ZSBzdHJ1Y3RzLgorICAgIGN5Z3dpbiBmaXggJiB1cGRhdGVzIGZvciAzLjAuMTMKIAotMjAwOS0wNi0xNiAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6Lm9yZz4KK2NvbW1pdCBkMDgxMjRiZWRmMmM2ZDYxODc0ZmUyMTU0MDQ3ODNhZWI5ZjZmMWFjCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTdW4gTWFyIDE3IDE4OjMyOjEyIDIwMTMgLTA0MDAKIAotCVBSIGxpYmZmaS80MDQ0NAotCSogdGVzdHN1aXRlL2xpYi9saWJmZmktZGcuZXhwIChsaWJmZmlfdGFyZ2V0X2NvbXBpbGUpOiBBZGQKLQlhbGxvd19zdGFja19leGVjdXRlIGZvciBEYXJ3aW4uCisgICAgY3lnd2luIGZpeCAmIHVwZGF0ZXMgZm9yIDMuMC4xMwogCi0yMDA5LTA2LTE2ICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KK2NvbW1pdCBjYjMyYzgxMmQwNGQxZGZhNzIwMDJjYzA0OTI0ZTdlNGZlZjg5ZTAyCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTdW4gTWFyIDE3IDA5OjI3OjU1IDIwMTMgLTA0MDAKIAotCSogY29uZmlndXJlLmFjIChUQVJHRVRESVIpOiBBZGQgbWlzc2luZyBibGFuayBsaW5lcy4KLQkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKyAgICBGaXggbGliIGluc3RhbGwgZGlyCiAKLTIwMDktMDYtMTYgIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorY29tbWl0IGVmZDc4NjZhMzYxYTZmNjM2YmFlODQwMGQyNmM2ODExZTU2Y2EyMDcKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFNhdCBNYXIgMTYgMDg6MzU6NTcgMjAxMyAtMDQwMAogCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQ2NC5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDY0LmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19sb25nZG91YmxlX3ZhLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191bG9uZ2xvbmcuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2xsMS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9tZWRpdW0yLmM6IEZpeCBwcmludGYgZm9ybWF0Ci0Jc3BlY2lmaWVycy4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mZml0ZXN0LmgsCi0JdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL2ZmaXRlc3RjeHguaCAoUFJJZExMLCBQUkl1TEwpOiBEZWZpbmUuCisgICAgMi4wLjEzcmMxCiAKLTIwMDktMDYtMTUgIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorY29tbWl0IGZmNjQ3YWQ0ZGZmMmYwN2RkMTUzZjI5NWExZjcwYjFkOTA2Y2Q2Y2EKK01lcmdlOiA0YWNmMDA1IGQ5ZGQ0MTcKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFNhdCBNYXIgMTYgMDg6MjA6NDAgMjAxMyAtMDQwMAogCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZXJyX2JhZF90eXBlZGVmLmM6IHhmYWlsIGV2ZXJ5d2hlcmUuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZXJyX2JhZF9hYmkuYzogTGlrZXdpc2UuCisgICAgTWVyZ2UgYnJhbmNoICdtYXN0ZXInIG9mIGdpdGh1Yi5jb206L2F0Z3JlZW4vbGliZmZpCisgICAgCisgICAgQ29uZmxpY3RzOgorICAgIAlDaGFuZ2VMb2cKIAotMjAwOS0wNi0xMiAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+Citjb21taXQgNGFjZjAwNTZmNTVjNzU3NDkwZGFlNmMyOWE2NWIwMzIxMzI3ZWE4YQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU2F0IE1hciAxNiAwODoxODo0NSAyMDEzIC0wNDAwCiAKLQkqIE1ha2VmaWxlLmFtOiBSZW1vdmUgaW5mb19URVhJTkZPUy4KKyAgICBCdWlsZCBmaXggZm9yIHNvZnQtZmxvYXQgcG93ZXIgdGFyZ2V0cwogCi0yMDA5LTA2LTEyICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KK2NvbW1pdCA2NzVjOTgzOTIyNGU0MjY4MTg3ZjFlYzZmNTEyMTI3ZjlkYjU1NWQwCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTYXQgTWFyIDE2IDA4OjEyOjM4IDIwMTMgLTA0MDAKIAotCSogQ2hhbmdlTG9nLmxpYmZmaTogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50NjQuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3VpbnQ2NC5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWxvbmdsb25nLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9sbDEuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbWVkaXVtMi5jOiBGaXggcHJpbnRmIGZvcm1hdAotCXNwZWNpZmllcnMuCi0JdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL3Vud2luZHRlc3QuY2M6IGluY2x1ZGUgc3RkaW50LmguCisgICAgRG9jdW1lbnRhdGlvbiBmaXgKIAotMjAwOS0wNi0xMSAgVGltb3RoeSBXYWxsICA8dHdhbGxAdXNlcnMuc2YubmV0PgorY29tbWl0IDhhMjg2ZjU3MGNjZDQxZGI4MWY3NGVhN2YyNDhkYTYyMjQxZDg5OGEKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFNhdCBNYXIgMTYgMDg6MDE6MTkgMjAxMyAtMDQwMAogCi0JKiBNYWtlZmlsZS5hbSwKLQljb25maWd1cmUuYWMsCi0JaW5jbHVkZS9mZmkuaC5pbiwKLQlpbmNsdWRlL2ZmaV9jb21tb24uaCwKLQlzcmMvY2xvc3VyZXMuYywKLQlzcmMvZGxtYWxsb2MuYywKLQlzcmMveDg2L2ZmaS5jLAotCXNyYy94ODYvZmZpdGFyZ2V0LmgsCi0Jc3JjL3g4Ni93aW42NC5TIChuZXcpLAotCVJFQURNRTogQWRkZWQgd2luNjQgc3VwcG9ydCAobWluZ3cgb3IgTVNWQykKLQkqIE1ha2VmaWxlLmluLAotCWluY2x1ZGUvTWFrZWZpbGUuaW4sCi0JbWFuL01ha2VmaWxlLmluLAotCXRlc3RzdWl0ZS9NYWtlZmlsZS5pbiwKLQljb25maWd1cmUsCi0JYWNsb2NhbC5tNDogUmVnZW5lcmF0ZWQKLQkqIGx0Y2YtYy5zaDogcHJvcGVybHkgZXNjYXBlIGN5Z3dpbi93MzIgcGF0aAotCSogbWFuL2ZmaV9jYWxsLjM6IENsYXJpZnkgc2l6ZSByZXF1aXJlbWVudHMgZm9yIHJldHVybiB2YWx1ZS4KLQkqIHNyYy94ODYvZmZpNjQuYzogRml4IGZpbGVuYW1lIGluIGNvbW1lbnQuCi0JKiBzcmMveDg2L3dpbjMyLlM6IFJlbW92ZSB1bnVzZWQgZXh0ZXJuLgorICAgIEZpeCBmb3IgbTY4MDAwIHN5c3RlbXMKIAotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4wLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4xLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4yLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4zLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm40LmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm41LmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm42LmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfc3RkY2FsbC5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTJieXRlLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xNmJ5dGUuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE4Ynl0ZS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTlieXRlLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xXzFieXRlLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yMGJ5dGUuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzIwYnl0ZTEuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzI0Ynl0ZS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMmJ5dGUuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzNfMWJ5dGUuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzNieXRlMS5jLAotIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzNieXRlMi5jLAotIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzRfMWJ5dGUuYywKLSAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc180Ynl0ZS5jLAotIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzVfMV9ieXRlLmMsCi0gCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNWJ5dGUuYywKLSAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc182NGJ5dGUuYywKLSAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc182XzFfYnl0ZS5jLAotIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzZieXRlLmMsCi0gCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfN18xX2J5dGUuYywKLSAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc183Ynl0ZS5jLAotIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzhieXRlLmMsCi0gCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOWJ5dGUxLmMsCi0gCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOWJ5dGUyLmMsCi0gCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fZG91YmxlLmMsCi0gCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fZmxvYXQuYywKLSAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlLmMsCi0gCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fbG9uZ2RvdWJsZV9zcGxpdC5jLAotIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGVfc3BsaXQyLmMsCi0gCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fcG9pbnRlci5jLAotIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQxNi5jLAotIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQzMi5jLAotIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQ2NC5jLAotIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3VpbnQxNi5jLAotIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3VpbnQzMi5jLAotIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3VpbnQ2NC5jLAotIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2RibHNfc3RydWN0LmMsCi0gCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZG91YmxlLmMsCi0gCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZG91YmxlX3ZhLmMsCi0gCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZmxvYXQuYywKLSAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19sb25nZG91YmxlLmMsCi0gCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbG9uZ2RvdWJsZV92YS5jLAotIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3NjaGFyLmMsCi0gCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfc3Nob3J0LmMsCi0gCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfc3Nob3J0Y2hhci5jLAotIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3VjaGFyLmMsCi0gCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfdXNob3J0LmMsCi0gCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfdXNob3J0Y2hhci5jLAotIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3BvaW50ZXIuYywKLSAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19wb2ludGVyX3N0YWNrLmMsCi0gCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc2NoYXIuYywKLSAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zaW50LmMsCi0gCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc3Nob3J0LmMsCi0gCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWNoYXIuYywKLSAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191aW50LmMsCi0gCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWxvbmdsb25nLmMsCi0gCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdXNob3J0LmMsCi0gCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9lcnJfYmFkX2FiaS5jLAotIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZXJyX2JhZF90eXBlZGVmLmMsCi0gCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mbG9hdDIuYywKLSAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2h1Z2Vfc3RydWN0LmMsCi0gCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0LmMsCi0gCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0MS5jLAotIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDEwLmMsCi0gCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Mi5jLAotIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDMuYywKLSAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q0LmMsCi0gCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0NS5jLAotIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDYuYywKLSAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q3LmMsCi0gCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0OC5jLAotIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDkuYywKLSAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3Byb2JsZW0xLmMsCi0gCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fbGRsLmMsCi0gCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fbGwxLmMsCi0gCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9sYXJnZS5jLAotIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbGFyZ2UyLmMsCi0gCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9tZWRpdW0uYywKLSAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X21lZGl1bTIuYywKLQl0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvdW53aW5kdGVzdC5jYzogdXNlIGZmaV9jbG9zdXJlX2FsbG9jIGluc3RlYWQKLQlvZiBjaGVja2luZyBmb3IgTU1BUC4gIFVzZSBpbnRwdHJfdCBpbnN0ZWFkIG9mIGxvbmcgY2FzdHMuCitjb21taXQgZDlkZDQxN2IwOTU2NmFmNTViN2IzMDAwYmI1M2NjYWYyZTFkNmM5MgorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU2F0IE1hciAxNiAwODowMToxOSAyMDEzIC0wNDAwCiAKLTIwMDktMDYtMTEgIEtheiBLb2ppbWEgIDxra29qaW1hQGdjYy5nbnUub3JnPgorICAgIEZpeCBmb3IgbTY4MDAwIHN5c3RlbXMKIAotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19sb25nZG91YmxlX3ZhLmM6IEFkZCB4ZmFpbCBzaCotKi1saW51eC0qLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Vycl9iYWRfYWJpLmM6IEFkZCB4ZmFpbCBzaCotKi0qLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Vycl9iYWRfdHlwZWRlZi5jOiBMaWtld2lzZS4KK2NvbW1pdCAyMTU3NjNkMDEyYTk0NGQ5NTQwNmIzOTRkNjAxM2I4MGQyMjBlODcwCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTYXQgTWFyIDE2IDA3OjU3OjM1IDIwMTMgLTA0MDAKIAotMjAwOS0wNi0wOSAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+CisgICAgVXBkYXRlIGNvbmZpZ3VyeS4KIAotCSogc3JjL3g4Ni9mcmVlYnNkLlM6IEFkZCBtaXNzaW5nIGZpbGUuCitjb21taXQgOTE4MGQ4ZjM5YzliNmFmZTE3Yjc4Mjc3YzI3MTFhNWQ5OTQ4ZTgyNAorTWVyZ2U6IDJmYjUyN2EgN2UxYjMyNgorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU2F0IE1hciAxNiAwNzo0Njo1NSAyMDEzIC0wNDAwCiAKLTIwMDktMDYtMDggIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorICAgIE1lcmdlIGJyYW5jaCAnbWFzdGVyJyBvZiBnaXRodWIuY29tOi9hdGdyZWVuL2xpYmZmaQogCi0JSW1wb3J0IGZyb20gbGliZmZpIDMuMC44OgorY29tbWl0IDJmYjUyN2EwMTdhNDk0M2UxNzZhNDg5ZmYxMDMyMzFiODY0NjRiNTkKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFNhdCBNYXIgMTYgMDc6NDY6MzggMjAxMyAtMDQwMAogCi0JKiBkb2MvbGliZmZpLnRleGk6IE5ldyBmaWxlLgotCSogZG9jL2xpYmZmaS5pbmZvOiBMaWtld2lzZS4KLQkqIGRvYy9zdGFtcC12dGk6IExpa2V3aXNlLgotCSogbWFuL01ha2VmaWxlLmFtOiBOZXcgZmlsZS4KLQkqIG1hbi9mZmlfY2FsbC4zOiBOZXcgZmlsZS4KKyAgICBBZGQgTWV0YSBwcm9jZXNzb3Igc3VwcG9ydAogCi0JKiBNYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IEFkZCBzcmMveDg2L2RhcndpbjY0LlMsCi0Jc3JjL2RsbWFsbG9jLmMuCi0JKG5vZGlzdF9saWJmZmlfbGFfU09VUkNFUyk6IEFkZCBYODZfRlJFRUJTRC4KK2NvbW1pdCAyMTFhOWViZjRkMWE5ODAxZTE1ZTEwMzU2NmFlZDJiOGM0Mjc5MGJlCitNZXJnZTogZjMwOGZhZiBlZTE4NzY2CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTYXQgTWFyIDE2IDA0OjI0OjQwIDIwMTMgLTA3MDAKIAotCSogY29uZmlndXJlLmFjOiBCdW1wIHZlcnNpb24gdG8gMy4wLjguCi0JcGFyaXNjKi0qLWxpbnV4KjogQWRkLgotCWkzODYtKi1mcmVlYnNkKiB8IGkzODYtKi1vcGVuYnNkKjogQWRkLgotCXBvd2VycGMtKi1iZW9zKjogQWRkLgotCUFNX0NPTkRJVElPTkFMIFg4Nl9GUkVFQlNEOiBBZGQuCi0JQUNfQ09ORklHX0ZJTEVTOiBBZGQgbWFuL01ha2VmaWxlLgorICAgIE1lcmdlIHB1bGwgcmVxdWVzdCAjMzIgZnJvbSBhbGV4L3BhdGNoLTEKKyAgICAKKyAgICBGaXggZm9yIGEgY3Jhc2hlciBkdWUgdG8gbWlzYWxpZ25lZCBzdGFjayBvbiB4ODYtMzIuCiAKLQkqIGluY2x1ZGUvZmZpLmguaW4gKEZGSV9GTik6IENoYW5nZSB2b2lkICgqKSgpIHRvIHZvaWQgKCopKHZvaWQpLgorY29tbWl0IDdlMWIzMjY0OWVmZDI0ODE0ZTg2MTcyZTE5NmYzOTA1NjZmOWU5NzAKK01lcmdlOiBmMzA4ZmFmIGVlMTg3NjYKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFNhdCBNYXIgMTYgMDQ6MjQ6NDAgMjAxMyAtMDcwMAogCi0yMDA5LTA2LTA4ICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KKyAgICBNZXJnZSBwdWxsIHJlcXVlc3QgIzMyIGZyb20gYWxleC9wYXRjaC0xCisgICAgCisgICAgRml4IGZvciBhIGNyYXNoZXIgZHVlIHRvIG1pc2FsaWduZWQgc3RhY2sgb24geDg2LTMyLgogCi0JKiBSRUFETUU6IEltcG9ydCBmcm9tIGxpYmZmaSAzLjAuOC4KK2NvbW1pdCBlZTE4NzY2YjE2OTgxMTQyNmMxNGIwMTFmYmI0NmQ4MWUzNDRmOTI2CitBdXRob3I6IEFsZXggR2F5bm9yIDxhbGV4LmdheW5vckBnbWFpbC5jb20+CitEYXRlOiAgIFRodSBNYXIgMTQgMTU6MDA6MzMgMjAxMyAtMDcwMAogCi0yMDA5LTA2LTA4ICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KKyAgICBGaXggZm9yIGEgY3Jhc2hlciBkdWUgdG8gbWlzYWxpZ25lZCBzdGFjayBvbiB4ODYtMzIuCisgICAgCisgICAgRnVsbCBpbmZvcm1hdGlvbiBvbiByZXByb2R1Y3Rpb24gKHVzaW5nIFB5dGhvbidzIGN0eXBlcyBhdmFpbGFibGUgaGVyZTrCoGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxNzQyMykKIAotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Vycl9iYWRfYWJpLmM6IEFkZCB4ZmFpbHMuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGVfdmEuYzogQWRkIHhmYWlscy4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZGJsc19zdHJ1Y3QuYzogQWRkIHhmYWlsIHg4Nl82NC0qLWxpbnV4LSouCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZXJyX2JhZF90eXBlZGVmLmM6IEFkZCB4ZmFpbHMuCitjb21taXQgZjMwOGZhZjFlYWJhZjhkYzI0OTY2YWIxN2ZiZjk0MzY4ZjQ2YjljNworQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgTW9uIEZlYiAxMSAxNDoyNToxMyAyMDEzIC0wNTAwCiAKLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9tZWRpdW0yLmM6IEFkZCBfX1VOVVNFRF9fIHRvIGFyZ3MuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbWVkaXVtLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X2xhcmdlMi5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9sYXJnZS5jOiAgTGlrZXdpc2UuCisgICAgQWRkIG1veGllIHN1cHBvcnQuICBSZWxlYXNlIDMuMC4xMi4KIAotMjAwOC0xMi0yNiAgVGltb3RoeSBXYWxsICA8dHdhbGxAdXNlcnMuc2YubmV0PgorY29tbWl0IDRlYTIyZTU0ZTNiMTQzZmUwNWM0MTNmNmRkZGQyMzZhZjZiY2JmYjIKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFN1biBGZWIgMTAgMDg6NDg6MzggMjAxMyAtMDUwMAogCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGUuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGVfdmEuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGUuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGVfc3BsaXQuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGVfc3BsaXQyLmM6IG1hcmsgZXhwZWN0ZWQKLQlmYWlsdXJlcyBvbiB4ODZfNjQgY3lnd2luL21pbmd3LgorICAgIFVwZGF0ZSBSRUFETUUKIAotMjAwOC0xMi0yMiAgVGltb3RoeSBXYWxsICA8dHdhbGxAdXNlcnMuc2YubmV0PgorY29tbWl0IDEwZTc3MjI3YjZhZTg1ZjQ2ZjI4NTkwYmZiMDljYTM2MDg1NTQzNTgKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFN1biBGZWIgMTAgMDg6NDc6MjYgMjAxMyAtMDUwMAogCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjAuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjEuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjIuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjMuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjQuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjUuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjYuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9sb2NfZm4wLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfc3RkY2FsbC5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fcG9pbnRlci5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfcG9pbnRlci5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfcG9pbnRlcl9zdGFjay5jOiB1c2UgcG9ydGFibGUgY2FzdCBmcm9tCi0JcG9pbnRlciB0byBpbnRlZ2VyIChpbnRwdHJfdCkuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGUuYzogZGlzYWJsZSBmb3Igd2luNjQuCisgICAgbWVuZAogCi0yMDA4LTA3LTI0ICBBbnRob255IEdyZWVuICA8Z3JlZW5AcmVkaGF0LmNvbT4KK2NvbW1pdCBhOTUyMTQxMWE1M2Q1OGYyYmY4ODE5OTI0MjIwMGNlYjBkNGRhZTNhCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTYXQgRmViIDkgMDY6NTQ6NDAgMjAxMyAtMDUwMAogCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2RibHNfc3RydWN0LmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kb3VibGVfdmEuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGUuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGVfdmEuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3BvaW50ZXIuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3BvaW50ZXJfc3RhY2suYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZXJyX2JhZF9hYmkuYzogQ2xlYW4gdXAgZmFpbHVyZXMgZnJvbQotCWNvbXBpbGVyIHdhcm5pbmdzLgorICAgIHNwYXJjIHY4IGFuZCB0ZXN0c3VpdGUgZml4ZXMKIAotMjAwOC0wMy0wNCAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJlZGhhdC5jb20+Ci0JICAgIEJsYWtlIENoYWZmaW4KLQkgICAgaG9zQHRhbWFuZWdpLm9yZworY29tbWl0IDcwYjExYjQ3ZWVhOTNiZjQzNjI3NTg4ZDQ5NGQwYjNiMGQwNjI0ODEKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIEZyaSBGZWIgOCAxNjoxMjoxOSAyMDEzIC0wNTAwCiAKLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fbG9uZ2RvdWJsZV9zcGxpdDIuYwotCSAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlX3NwbGl0LmMKLQkgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZGJsc19zdHJ1Y3QuYwotCSAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kb3VibGVfdmEuYwotCSAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19sb25nZG91YmxlLmMKLQkgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbG9uZ2RvdWJsZV92YS5jCi0JICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3BvaW50ZXIuYwotCSAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19wb2ludGVyX3N0YWNrLmMKLQkgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9lcnJfYmFkX2FiaS5jCi0JICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZXJyX2JhZF90eXBlZGVmLmMKLQkgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9sYXJnZTIuYwotCSAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X2xhcmdlLmMKLQkgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9tZWRpdW0yLmMKLQkgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9tZWRpdW0uYzogTmV3IHRlc3RzIGZyb20gQXBwbGUuCisgICAgRml4IHNtYWxsIHN0cnVjdCBwYXNzaW5nIG9uIHBwYwogCi0yMDA5LTA2LTA1ICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KK2NvbW1pdCA2M2JhMWZhNzlmN2M0Y2U0MmRlODQ4ZGViZTIzM2FhYjMxYWVjYjUxCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBGcmkgRmViIDggMTU6MTg6MTkgMjAxMyAtMDUwMAogCi0JKiBzcmMveDg2L2ZmaXRhcmdldC5oLCBzcmMveDg2L2ZmaS5jOiBNZXJnZSBzdGRjYWxsIGNoYW5nZXMgZnJvbQotCWxpYmZmaS4KKyAgICBSZW1vdmUgeGZhaWwgZm9yIGFybSotKi0qLgogCi0yMDA5LTA2LTA0ICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KK2NvbW1pdCAyNGZiY2E0YzFkNTdkNGVhNjI4YzBhOGJhNjQzNjg0ZGFmNTRhMzdlCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBGcmkgRmViIDggMTQ6MTk6NTYgMjAxMyAtMDUwMAogCi0JKiBzcmMveDg2L2ZmaXRhcmdldC5oLCBzcmMveDg2L3dpbjMyLlMsIHNyYy94ODYvZmZpLmM6IEJhY2sgb3V0Ci0Jc3RkY2FsbCBjaGFuZ2VzLgorICAgIEZpeCB0eXBvCiAKLTIwMDgtMDItMjYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkByZWRoYXQuY29tPgotCSAgICBUaG9tYXMgSGVsbGVyICA8dGhlbGxlckBjdHlwZXMub3JnPgorY29tbWl0IGIwZmExMWNiMGE5NGNlNmJhY2EwNThlYWI5YjEwZTQwNDc1ZTcxZDYKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIEZyaSBGZWIgOCAxNDoxNzoxMyAyMDEzIC0wNTAwCiAKLQkqIHNyYy94ODYvZmZpLmMgKGZmaV9jbG9zdXJlX1NZU1ZfaW5uZXIpOiBDaGFuZ2UgQysrIGNvbW1lbnQgdG8gQwotCWNvbW1lbnQuCisgICAgTW9yZSBtYW4gcGFnZSBjbGVhbnVwCiAKLTIwMDgtMDItMDMgIFRpbW90aHkgV2FsbCAgPHR3YWxsQHVzZXJzLnNmLm5ldD4KK2NvbW1pdCA4YmQxNWQxMzlhNThhNmU0NmRjOTBhMWNiMmQ4OWY1OWYzMmYwNmM3CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBGcmkgRmViIDggMTM6NTY6MzcgMjAxMyAtMDUwMAogCi0JKiBzcmMveDg2L2ZmaS5jIChGRklfSU5JVF9UUkFNUE9MSU5FX1NURENBTEwpOiBDYWxjdWxhdGUganVtcCByZXR1cm4KLQkgIG9mZnNldCBiYXNlZCBvbiBjb2RlIHBvaW50ZXIsIG5vdCBkYXRhIHBvaW50ZXIuCisgICAgRml4IG1hbnkuYyB0ZXN0Y2FzZSBmb3IgcHBjCiAKLTIwMDgtMDEtMzEgIFRpbW90aHkgV2FsbCA8dHdhbGxAdXNlcnMuc2YubmV0PgorY29tbWl0IDdhYWI4MjVjZjE5OGJlODU0OTBkM2NkODBlNzc4ZDQxNWQ4NWFkOWIKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIEZyaSBGZWIgOCAxMzoyNjoyMSAyMDEzIC0wNTAwCiAKLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX3N0ZGNhbGwuYzogQWRkIHRlc3QgZm9yIHN0ZGNhbGwKLQljbG9zdXJlcy4KLQkqIHNyYy94ODYvZmZpdGFyZ2V0Lmg6IEluY3JlYXNlIHNpemUgb2YgdHJhbXBvbGluZSBmb3Igc3RkY2FsbAotCWNsb3N1cmVzLgotCSogc3JjL3g4Ni93aW4zMi5TOiBBZGQgYXNzZW1ibHkgZm9yIHN0ZGNhbGwgY2xvc3VyZS4KLQkqIHNyYy94ODYvZmZpLmM6IEluaXRpYWxpemUgc3RkY2FsbCBjbG9zdXJlIHRyYW1wb2xpbmUuCisgICAgQWRkIG1pc3NpbmcgZmlsZXMgdG8gZGlzdAogCi0yMDA5LTA2LTA0ICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KK2NvbW1pdCBjYjAzZWE4ZjRlYjA4MDI0ZTQ0YWJlNDM5MmVkYzc3Yjg5ZmJmYmFkCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBGcmkgRmViIDggMTI6MjU6MTggMjAxMyAtMDUwMAogCi0JKiBpbmNsdWRlL2ZmaS5oLmluOiBDaGFuZ2Ugdm9pZCAoKikoKSB0byB2b2lkICgqKSh2b2lkKS4KLQkqIHNyYy94ODYvZmZpLmM6IExpa2V3aXNlLgorICAgIHNwYXJjIHY5IGZpeGVzIGZvciBzdW4gdG9vbHMKIAotMjAwOS0wNi0wNCAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+Citjb21taXQgMzVlZThkNDRmMzFkZDNkM2I4ODA4M2M4MzdkYzM1MTU5M2UxM2NjMgorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgRnJpIEZlYiA4IDA3OjEyOjQxIDIwMTMgLTA1MDAKIAotCSogc3JjL3Bvd2VycGMvcHBjX2Nsb3N1cmUuUzogSW5zZXJ0IGxpY2VuY2UgaGVhZGVyLgotCSogc3JjL3Bvd2VycGMvbGludXg2NF9jbG9zdXJlLlM6IExpa2V3aXNlLgotCSogc3JjL202OGsvc3lzdi5TOiBMaWtld2lzZS4KKyAgICBGaXggbWljcm9ibGF6ZSBiaWctZW5kaWFuIHN0cnVjdCBpc3N1ZQogCi0JKiBzcmMvc2g2NC9mZmkuYzogQ2hhbmdlIHZvaWQgKCopKCkgdG8gdm9pZCAoKikodm9pZCkuCi0JKiBzcmMvcG93ZXJwYy9mZmkuYzogTGlrZXdpc2UuCi0JKiBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmM6IExpa2V3aXNlLgotCSogc3JjL20zMnIvZmZpLmM6IExpa2V3aXNlLgotCSogc3JjL3NoNjQvZmZpLmM6IExpa2V3aXNlLgotCSogc3JjL3g4Ni9mZmk2NC5jOiBMaWtld2lzZS4KLQkqIHNyYy9hbHBoYS9mZmkuYzogTGlrZXdpc2UuCi0JKiBzcmMvYWxwaGEvb3NmLlM6IExpa2V3aXNlLgotCSogc3JjL2Zydi9mZmkuYzogTGlrZXdpc2UuCi0JKiBzcmMvczM5MC9mZmkuYzogTGlrZXdpc2UuCi0JKiBzcmMvcGEvZmZpLmM6IExpa2V3aXNlLgotCSogc3JjL3BhL2hwdXgzMi5TOiBMaWtld2lzZS4KLQkqIHNyYy9pYTY0L3VuaXguUzogTGlrZXdpc2UuCi0JKiBzcmMvaWE2NC9mZmkuYzogTGlrZXdpc2UuCi0JKiBzcmMvc3BhcmMvZmZpLmM6IExpa2V3aXNlLgotCSogc3JjL21pcHMvZmZpLmM6IExpa2V3aXNlLgotCSogc3JjL3NoL2ZmaS5jOiBMaWtld2lzZS4KK2NvbW1pdCA5ZGI3ZTFhOTU4ZmM0ODRiYTE0OWVmZTAyNzAwOGI5YTE3MDM5NWZiCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBUaHUgRmViIDcgMjE6MDY6MDggMjAxMyAtMDUwMAogCi0yMDA4LTAyLTE1ICBEYXZpZCBEYW5leSAgPGRkYW5leUBhdnRyZXguY29tPgorICAgIEZpeCBib3RjaGVkIHNwYXJjIHBhdGNoLiBVcGRhdGUgdmVyc2lvbi4KIAotCSogc3JjL21pcHMvZmZpLmMgKFVTRV9fQlVJTFRJTl9fX0NMRUFSX0NBQ0hFKToKLQlEZWZpbmUgKGNvbmRpdGlvbmFsbHkpLCBhbmQgdXNlIGl0IHRvIGluY2x1ZGUgY2FjaGVjdGwuaC4KLQkoZmZpX3ByZXBfY2xvc3VyZV9sb2MpOiBGaXggY2FjaGUgZmx1c2hpbmcuCi0JKiBzcmMvbWlwcy9mZml0YXJnZXQuaCAoX0FCSU4zMiwgX0FCSTY0LCBfQUJJTzMyKTogRGVmaW5lLgorY29tbWl0IGNlMDEzOGU2MTQ1NWYyNjhhZjMyNmUyNjkwOGI5NjgwZWMyYzRiZWEKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFRodSBGZWIgNyAxODowNDowMSAyMDEzIC0wNTAwCiAKLTIwMDktMDYtMDQgIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorICAgIFVwZGF0ZSBidWcgcmVwb3J0IGFkZHJlc3MuIHJjMi4KIAotCWluY2x1ZGUvZmZpLmguaW4sCi0Jc3JjL2FybS9mZml0YXJnZXQuaCwKLQlzcmMvYXJtL2ZmaS5jLAotCXNyYy9hcm0vc3lzdi5TLAotCXNyYy9wb3dlcnBjL2ZmaXRhcmdldC5oLAotCXNyYy9jbG9zdXJlcy5jLAotCXNyYy9zaDY0L2ZmaXRhcmdldC5oLAotCXNyYy9zaDY0L2ZmaS5jLAotCXNyYy9zaDY0L3N5c3YuUywKLQlzcmMvdHlwZXMuYywKLQlzcmMveDg2L2ZmaTY0LmMsCi0Jc3JjL3g4Ni9mZml0YXJnZXQuaCwKLQlzcmMveDg2L3dpbjMyLlMsCi0Jc3JjL3g4Ni9kYXJ3aW4uUywKLQlzcmMveDg2L2ZmaS5jLAotCXNyYy94ODYvc3lzdi5TLAotCXNyYy94ODYvdW5peDY0LlMsCi0Jc3JjL2FscGhhL2ZmaXRhcmdldC5oLAotCXNyYy9hbHBoYS9mZmkuYywKLQlzcmMvYWxwaGEvb3NmLlMsCi0Jc3JjL202OGsvZmZpdGFyZ2V0LmgsCi0Jc3JjL2Zydi9mZml0YXJnZXQuaCwKLQlzcmMvZnJ2L2ZmaS5jLAotCXNyYy9zMzkwL2ZmaXRhcmdldC5oLAotCXNyYy9zMzkwL3N5c3YuUywKLQlzcmMvY3Jpcy9mZml0YXJnZXQuaCwKLQlzcmMvcGEvbGludXguUywKLQlzcmMvcGEvZmZpdGFyZ2V0LmgsCi0Jc3JjL3BhL2ZmaS5jLAotCXNyYy9yYXdfYXBpLmMsCi0Jc3JjL2lhNjQvZmZpdGFyZ2V0LmgsCi0Jc3JjL2lhNjQvdW5peC5TLAotCXNyYy9pYTY0L2ZmaS5jLAotCXNyYy9pYTY0L2lhNjRfZmxhZ3MuaCwKLQlzcmMvamF2YV9yYXdfYXBpLmMsCi0Jc3JjL2RlYnVnLmMsCi0Jc3JjL3NwYXJjL3Y5LlMsCi0Jc3JjL3NwYXJjL2ZmaXRhcmdldC5oLAotCXNyYy9zcGFyYy9mZmkuYywKLQlzcmMvc3BhcmMvdjguUywKLQlzcmMvbWlwcy9mZml0YXJnZXQuaCwKLQlzcmMvbWlwcy9uMzIuUywKLQlzcmMvbWlwcy9vMzIuUywKLQlzcmMvbWlwcy9mZmkuYywKLQlzcmMvcHJlcF9jaWYuYywKLQlzcmMvc2gvZmZpdGFyZ2V0LmgsCi0Jc3JjL3NoL2ZmaS5jLAotCXNyYy9zaC9zeXN2LlM6IFVwZGF0ZSBsaWNlbnNlIHRleHQuCitjb21taXQgZmQwN2M5ZTQwNDUxZTBlYzFkMDQ3NWNkNTRhODNkNDVjY2FlYTJjMAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgVGh1IEZlYiA3IDE4OjAwOjM2IDIwMTMgLTA1MDAKIAotMjAwOS0wNS0yMiAgRGF2ZSBLb3JuICA8ZGF2ZS5rb3JuLmN5Z3dpbkBnbWFpbC5jb20+CisgICAgQWRkIGNhY2hlIGZsdXNoaW5nIHJvdXRpbmUgZm9yIHN1biBjb21waWxlciBvbiBzcGFyYyBzb2xhcmlzIDIuOAogCi0JKiBzcmMveDg2L3dpbjMyLlMgKF9mZmlfY2xvc3VyZV9TVERDQUxMKTogIE5ldyBmdW5jdGlvbi4KLQkoLmVoX2ZyYW1lKTogIEFkZCBGREUgZm9yIGl0LgorY29tbWl0IGVkNmFlOTUwMWIyYmFiNDVkYWY5M2I0OTM1ZWIwYzk3NzYzNWI3NjMKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFRodSBGZWIgNyAxNjo0MzozNiAyMDEzIC0wNTAwCiAKLTIwMDktMDUtMjIgIERhdmUgS29ybiAgPGRhdmUua29ybi5jeWd3aW5AZ21haWwuY29tPgorICAgIEFkZCBsaWJ0b29sLWxkZmxhZ3MuIERlZmluZSB0b29sZXhlY2xpYmRpciBmb3Igbm9uLUdDQyBidWlsZHMuCiAKLQkqIGNvbmZpZ3VyZS5hYzogIEFsc28gY2hlY2sgaWYgYXNzZW1ibGVyIHN1cHBvcnRzIHBjLXJlbGF0aXZlCi0JcmVsb2NzIG9uIFg4Nl9XSU4zMiB0YXJnZXRzLgotCSogY29uZmlndXJlOiAgUmVnZW5lcmF0ZS4KLQkqIHNyYy94ODYvd2luMzIuUyAoZmZpX3ByZXBfYXJncyk6ICBEZWNsYXJlIGV4dGVybiwgbm90IGdsb2JhbC4KLQkoX2ZmaV9jYWxsX1NZU1YpOiAgQWRkIG1pc3NpbmcgZnVuY3Rpb24gdHlwZSBzeW1ib2wgLmRlZiBhbmQKLQlhZGQgRUggbWFya3VwIGxhYmVscy4KLQkoX2ZmaV9jYWxsX1NURENBTEwpOiAgTGlrZXdpc2UuCi0JKF9mZmlfY2xvc3VyZV9TWVNWKTogIExpa2V3aXNlLgotCShfZmZpX2Nsb3N1cmVfcmF3X1NZU1YpOiAgTGlrZXdpc2UuCi0JKC5laF9mcmFtZSk6ICBBZGQgaGFuZC1jcmFmdGVkIEVIIGRhdGEuCitjb21taXQgZmZlZjJlMDQ2YWFlYzg1M2JlMzU2ZjBiODc3MGEzMzUxODVlYTljZgorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgVGh1IEZlYiA3IDE1OjQ3OjAxIDIwMTMgLTA1MDAKIAotMjAwOS0wNC0wOSAgSmFrdWIgSmVsaW5layAgPGpha3ViQHJlZGhhdC5jb20+CisgICAgeDMyIGFuZCBsaWJ0b29sIGZpeGVzCiAKLQkqIHRlc3RzdWl0ZS9saWIvbGliZmZpLWRnLmV4cDogQ2hhbmdlIGNvcHlyaWdodCBoZWFkZXIgdG8gcmVmZXIgdG8KLQl2ZXJzaW9uIDMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0byBwb2ludCByZWFkZXJzCi0JYXQgdGhlIENPUFlJTkczIGZpbGUgYW5kIHRoZSBGU0YncyBsaWNlbnNlIHdlYiBwYWdlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2NhbGwuZXhwOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC9zcGVjaWFsLmV4cDogTGlrZXdpc2UuCitjb21taXQgOTVlZWNlYmIyODU4ZGM2ZjE0OTVhNjEwNzJmZjM2ZDBhODEyNzE0NAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgVGh1IEZlYiA3IDE1OjMyOjQ2IDIwMTMgLTA1MDAKIAotMjAwOS0wMy0wMSAgUmFsZiBXaWxkZW5odWVzICA8UmFsZi5XaWxkZW5odWVzQGdteC5kZT4KKyAgICBSZW1vdmUgYS5vdXQgY3J1ZnQgZnJvbSBkaXN0CiAKLQkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KK2NvbW1pdCAxNzZhYTlkMmUyM2Q5Y2Q1N2Q2ZjI1MDY5MmQ5MTBiNDA4ZjlhNjUxCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBUaHUgRmViIDcgMTU6Mjk6MjIgMjAxMyAtMDUwMAogCi0yMDA4LTEyLTE4ICBSYWluZXIgT3J0aCAgPHJvQFRlY2hGYWsuVW5pLUJpZWxlZmVsZC5ERT4KKyAgICBGaXggR0NDIHVzYWdlIHRlc3QgYW5kIHVwZGF0ZSBSRUFETUUKIAotCVBSIGxpYmZmaS8yNjA0OAotCSogY29uZmlndXJlLmFjIChIQVZFX0FTX1g4Nl9QQ1JFTCk6IE5ldyB0ZXN0LgotCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgotCSogZmZpY29uZmlnLmguaW46IFJlZ2VuZXJhdGUuCi0JKiBzcmMveDg2L3N5c3YuUyBbIUZGSV9OT19SQVdfQVBJXTogUHJlY2FsY3VsYXRlCi0JUkFXX0NMT1NVUkVfQ0lGX09GRlNFVCwgUkFXX0NMT1NVUkVfRlVOX09GRlNFVCwKLQlSQVdfQ0xPU1VSRV9VU0VSX0RBVEFfT0ZGU0VUIGZvciB0aGUgU29sYXJpcyAxMC94ODYgYXNzZW1ibGVyLgotCSguZWhfZnJhbWUpOiBPbmx5IHVzZSBTWU1CT0wtLiBpZmYgSEFWRV9BU19YODZfUENSRUwuCi0JKiBzcmMveDg2L3VuaXg2NC5TICguTHN0b3JlX3RhYmxlKTogTW92ZSB0byAudGV4dCBzZWN0aW9uLgotCSguTGxvYWRfdGFibGUpOiBMaWtld2lzZS4KLQkoLmVoX2ZyYW1lKTogT25seSB1c2UgU1lNQk9MLS4gaWZmIEhBVkVfQVNfWDg2X1BDUkVMLgorY29tbWl0IGYzYTRmM2ZkZGU4OWIwNGQ2Njk4M2E0MmEyNWQwOTE2MWM1ZDRkNTQKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFRodSBGZWIgNyAwOTo1NzoyMCAyMDEzIC0wNTAwCiAKLTIwMDgtMTItMTggIFJhbGYgV2lsZGVuaHVlcyAgPFJhbGYuV2lsZGVuaHVlc0BnbXguZGU+CisgICAgRml4ZXMgZm9yIEFJWCB4bGMgY29tcGlsZXIuCiAKLQkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KK2NvbW1pdCA1MjJmOGZlZjQ5ODQ4OTI3NDgyYmM2M2M5NGFmYWVhNWI4NGU1ZWMxCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBXZWQgRmViIDYgMjA6MzE6MzEgMjAxMyAtMDUwMAogCi0yMDA4LTExLTIxICBFcmljIEJvdGNhem91ICA8ZWJvdGNhem91QGFkYWNvcmUuY29tPgorICAgIEZpeCBtYW4gcGFnZS4gQ2xlYW4gb3V0IGp1bmsuCiAKLQkqIHNyYy9zcGFyYy9mZmkuYyAoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBBZGQgc3VwcG9ydCBmb3IKLQlzaWduZWQvdW5zaWduZWQgaW50OC8xNiByZXR1cm4gdmFsdWVzLgotCSogc3JjL3NwYXJjL3Y4LlMgKGZmaV9jYWxsX3Y4KTogTGlrZXdpc2UuCi0JKGZmaV9jbG9zdXJlX3Y4KTogTGlrZXdpc2UuCitjb21taXQgYzRkZmEyNTllYjRlOGU2ZjRjMzk3ODY4ZDdmZWU4MGFhMGJiNmExMgorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgV2VkIEZlYiA2IDE3OjQzOjI0IDIwMTMgLTA1MDAKIAotMjAwOC0wOS0yNiAgUGV0ZXIgTydHb3JtYW4gIDxwb2dtYUB0aGV3cml0dGVud29yZC5jb20+Ci0JICAgIFN0ZXZlIEVsbGNleSAgPHNqZUBjdXAuaHAuY29tPgorICAgIEJ1bXAgc292ZXJzaW9uCiAKLQkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZSBmb3IgbmV3IGxpYnRvb2wuCi0JKiBNYWtlZmlsZS5pbjogRGl0dG8uCi0JKiBpbmNsdWRlL01ha2VmaWxlLmluOiBEaXR0by4KLQkqIGFjbG9jYWwubTQ6IERpdHRvLgorY29tbWl0IGY2MmJkNjNmZTYxMjNjYWRlZGI4YjJiMmM3MmViNTQ5YzQwZmJjZTkKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFdlZCBGZWIgNiAxNzozODozMiAyMDEzIC0wNTAwCiAKLTIwMDgtMDgtMjUgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5vcmc+CisgICAgUmVsZWFzZSBjYW5kaWRhdGUgMQogCi0JKiBzcmMvcG93ZXJwYy9mZml0YXJnZXQuaCAoZmZpX2FiaSk6IEFkZCBGRklfTElOVVggYW5kCi0JRkZJX0xJTlVYX1NPRlRfRkxPQVQgdG8gdGhlIFBPV0VSUENfRlJFRUJTRCBlbnVtLgotCUFkZCBub3RlIGFib3V0IGZsYWcgYml0cyB1c2VkIGZvciBGRklfU1lTVl9UWVBFX1NNQUxMX1NUUlVDVC4KLQlBZGp1c3QgY29weXJpZ2h0IG5vdGljZS4KLQkqIHNyYy9wb3dlcnBjL2ZmaS5jOiBBZGQgdHdvIG5ldyBmbGFncyB0byBpbmRpY2F0ZSBpZiB3ZSBoYXZlIG9uZQotCXJlZ2lzdGVyIG9yIHR3byByZWdpc3RlciB0byB1c2UgZm9yIEZGSV9TWVNWIHN0cnVjdHMuCi0JKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogUGFzcyB0aGUgcmlnaHQgcmVnaXN0ZXIgZmxhZyBpbnRyb2R1Y2VkIGFib3ZlLgotCShmZmlfY2xvc3VyZV9oZWxwZXJfU1lTVik6IEZpeCB0aGUgcmV0dXJuIHR5cGUgZm9yCi0JRkZJX1NZU1ZfVFlQRV9TTUFMTF9TVFJVQ1QuIENvbW1lbnQuCi0JQWRqdXN0IGNvcHlyaWdodCBub3RpY2UuCitjb21taXQgZjdjZDYxZTllNjhhNGE1MTE0N2RmMDRkNzViZmU1YjkxYjlkOTI4NgorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgV2VkIEZlYiA2IDE3OjM4OjA0IDIwMTMgLTA1MDAKIAotMjAwOC0wNy0xNiAgS2F6IEtvamltYSAgPGtrb2ppbWFAZ2NjLmdudS5vcmc+CisgICAgRml4IHBrZ2NvbmZpZyBpbnN0YWxsIGJpdHMKIAotCSogc3JjL3NoL2ZmaS5jIChmZmlfcHJlcF9jbG9zdXJlX2xvYyk6IFR1cm4gSU5TTiBpbnRvIGFuIHVuc2lnbmVkCi0JaW50LgorY29tbWl0IDZhNzkwMTI5NDI3MTIxZjdkYjJkODc2ZTcyMThhMzEwNGU2ZDI3NDEKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFdlZCBGZWIgNiAxNzozNzoxNSAyMDEzIC0wNTAwCiAKLTIwMDgtMDYtMTcgIFJhbGYgV2lsZGVuaHVlcyAgPFJhbGYuV2lsZGVuaHVlc0BnbXguZGU+CisgICAgV29yayBhcm91bmQgTExWTSBBQkkgcHJvYmxlbSBvbiB4ODYtNjQKIAotCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgotCSogaW5jbHVkZS9NYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KLQkqIHRlc3RzdWl0ZS9NYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KK2NvbW1pdCAzNzAxMTI5MzhlNzA1MTI4ZmQ1ZGQ0MDE3ZmMxYTEyMTBiZDAyNzFhCitNZXJnZTogYmFkYTJlMyBiY2MwYzI4CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTdW4gSmFuIDI3IDA1OjA5OjA0IDIwMTMgLTA4MDAKIAotMjAwOC0wNi0wNyAgSm9zZXBoIE15ZXJzICA8am9zZXBoQGNvZGVzb3VyY2VyeS5jb20+CisgICAgTWVyZ2UgcHVsbCByZXF1ZXN0ICMyOCBmcm9tIGpyYWxscy9tYXN0ZXIKKyAgICAKKyAgICBSZW9yZGVyIHg4Nl82NCBjaGVja3MKIAotCSogY29uZmlndXJlLmFjIChwYXJpc2MqLSotbGludXgqLCBwb3dlcnBjLSotc3lzdiosCi0JcG93ZXJwYy0qLWJlb3MqKTogUmVtb3ZlLgotCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorY29tbWl0IGJjYzBjMjgwMDFiNmQ0MjdkNWNkODAzN2QyZTNjODkyYmFiYzZiNGMKK0F1dGhvcjogSm9obiBSYWxscyA8anJhbGxzQGNlcmlkd2VuLnVzPgorRGF0ZTogICBTYXQgSmFuIDI2IDE1OjIxOjE0IDIwMTMgLTA4MDAKIAotMjAwOC0wNS0wOSAgSnVsaWFuIEJyb3duICA8anVsaWFuQGNvZGVzb3VyY2VyeS5jb20+CisgICAgUmVvcmRlciB4ODZfNjQgdGVzdHMKKyAgICAKKyAgICBTbyB0aGF0IGRhcndpbiBhbmQgY3lnd2luL21pbmd3IGFyZSB0ZXN0ZWQgYmVmb3JlIHRoZSBnZW5lcmljIGNoZWNrIC0tCisgICAgd2hpY2ggYWxsb3dzIHRoZW0gdG8gYWN0dWFsbHkgYmUgc2V0LgogCi0JKiBNYWtlZmlsZS5hbSAoTFRMREZMQUdTKTogTmV3LgotCShsaWJmZmlfbGFfTERGTEFHUyk6IFVzZSBhYm92ZS4KLQkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorY29tbWl0IGJhZGEyZTMyNmQ5YTlhY2YzYWU0MGNmYTRmNWQ3YTliYTk3YjJlYTgKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIE1vbiBKYW4gMjEgMDg6MDI6MDcgMjAxMyAtMDUwMAogCi0yMDA4LTA0LTE4ICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgorICAgIFVwZGF0ZSBSRUFETUUKIAotCVBSIGJvb3RzdHJhcC8zNTQ1NwotCSogYWNsb2NhbC5tNDogUmVnZW5lcmF0ZS4KLQkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KK2NvbW1pdCA2NTViYjhmMzY5MGZlYmE4ZTg0MGE1ZjE4NTRiMWQ3OGVkMDhmNjkyCitNZXJnZTogMTAzNWZmYiA4NDBmOTc1CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBNb24gSmFuIDIxIDA4OjAxOjI0IDIwMTMgLTA1MDAKIAotMjAwOC0wMy0yNiAgS2F6IEtvamltYSAgPGtrb2ppbWFAZ2NjLmdudS5vcmc+CisgICAgTWVyZ2UgYnJhbmNoICdtYXN0ZXInIG9mIGdpdGh1Yi5jb206L2F0Z3JlZW4vbGliZmZpCiAKLQkqIHNyYy9zaC9zeXN2LlM6IEFkZCAubm90ZS5HTlUtc3RhY2sgb24gTGludXguCi0JKiBzcmMvc2g2NC9zeXN2LlM6IExpa2V3aXNlLgorY29tbWl0IDEwMzVmZmIyZjQ2OGUxYTFjNDAxZDU4Y2ZmN2U3YWJiNjk4MzhlNjgKK01lcmdlOiBhZWI4NzE5IDQwODYwMjQKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIE1vbiBKYW4gMjEgMDc6NTU6NTMgMjAxMyAtMDUwMAogCi0yMDA4LTAzLTI2ICBEYW5pZWwgSmFjb2Jvd2l0eiAgPGRhbkBkZWJpYW4ub3JnPgorICAgIFVwZGF0ZSBSRUFETUUKIAotCSogc3JjL2FybS9zeXN2LlM6IEZpeCBBUk0gY29tbWVudCBtYXJrZXIuCitjb21taXQgODQwZjk3NTg2NjA1MmZkZDkxYjJjMjI0ZDU2ZTAxYWU1OTAwYjYwZAorTWVyZ2U6IGFlYjg3MTkgNDA4NjAyNAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgTW9uIEphbiAyMSAwNzo1NTo1MyAyMDEzIC0wNTAwCiAKLTIwMDgtMDMtMjYgIEpha3ViIEplbGluZWsgIDxqYWt1YkByZWRoYXQuY29tPgorICAgIE1lcmdlIGJyYW5jaCAnbWFzdGVyJyBvZiBnaXRodWIuY29tOi9hdGdyZWVuL2xpYmZmaQogCi0JKiBzcmMvYWxwaGEvb3NmLlM6IEFkZCAubm90ZS5HTlUtc3RhY2sgb24gTGludXguCi0JKiBzcmMvczM5MC9zeXN2LlM6IExpa2V3aXNlLgotCSogc3JjL3Bvd2VycGMvcHBjX2Nsb3N1cmUuUzogTGlrZXdpc2UuCi0JKiBzcmMvcG93ZXJwYy9zeXN2LlM6IExpa2V3aXNlLgotCSogc3JjL3g4Ni91bml4NjQuUzogTGlrZXdpc2UuCi0JKiBzcmMveDg2L3N5c3YuUzogTGlrZXdpc2UuCi0JKiBzcmMvc3BhcmMvdjguUzogTGlrZXdpc2UuCi0JKiBzcmMvc3BhcmMvdjkuUzogTGlrZXdpc2UuCi0JKiBzcmMvbTY4ay9zeXN2LlM6IExpa2V3aXNlLgotCSogc3JjL2FybS9zeXN2LlM6IExpa2V3aXNlLgorY29tbWl0IGFlYjg3MTlhMzQ3NTY5Njk5NzA2MDNmY2E0NTY4NTMwZDU2NzA4YWYKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIE1vbiBKYW4gMjEgMDc6Mzc6MzAgMjAxMyAtMDUwMAogCi0yMDA4LTAzLTE2ICBSYWxmIFdpbGRlbmh1ZXMgIDxSYWxmLldpbGRlbmh1ZXNAZ214LmRlPgorICAgIE5ldyBtaWNyb2JsYXplIHN1cHBvcnQKIAotCSogYWNsb2NhbC5tNDogUmVnZW5lcmF0ZS4KLQkqIGNvbmZpZ3VyZTogTGlrZXdpc2UuCi0JKiBNYWtlZmlsZS5pbjogTGlrZXdpc2UuCi0JKiBpbmNsdWRlL01ha2VmaWxlLmluOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9NYWtlZmlsZS5pbjogTGlrZXdpc2UuCitjb21taXQgNDA4NjAyNDVhNGZkOTFhMWI4OGFkYzkxNzFlYzk5M2M1NDllNDVkNQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgTW9uIEphbiAyMSAwNzozNzozMCAyMDEzIC0wNTAwCiAKLTIwMDgtMDItMTIgIEJqb2VybiBLb2VuaWcgIDxia29lbmlnQGFscGhhLXRpZXJjaGVuLmRlPgotCSAgICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXoub3JnPgorICAgIE5ldyBtaWNyb2JsYXplIHN1cHBvcnQKIAotCSogY29uZmlndXJlLmFjOiBBZGQgYW1kNjQtKi1mcmVlYnNkKiB0YXJnZXQuCi0JKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCitjb21taXQgMjBjYWUzMmIxNTJiNDM2NzlhZTY1YTg1ZGI5YTFjNmJiOGExNDNkZAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgTW9uIEphbiAyMSAwNzowNzozOCAyMDEzIC0wNTAwCiAKLTIwMDgtMDEtMzAgIEguSi4gTHUgIDxob25naml1Lmx1QGludGVsLmNvbT4KKyAgICBYdGVuc2Egc3VwcG9ydAogCi0JUFIgbGliZmZpLzM0NjEyCi0JKiBzcmMveDg2L3N5c3YuUyAoZmZpX2Nsb3N1cmVfU1lTVik6IFBvcCA0IGJ5dGUgZnJvbSBzdGFjayB3aGVuCi0JcmV0dXJuaW5nIHN0cnVjdC4KK2NvbW1pdCA5NzQyZjkxNzgyZmFlZjRhMTU5NDE1MDhhMjJjNDA4ZmI3ZDFkMjI3CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBNb24gSmFuIDIxIDA3OjAzOjQxIDIwMTMgLTA1MDAKIAotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2NhbGwuZXhwOiBBZGQgIi1PMiAtZm9taXQtZnJhbWUtcG9pbnRlciIKLQl0ZXN0cy4KKyAgICBNZW50aW9uIElCTSBYTCBjb21waWxlciBzdXBwb3J0IG9uIEFJWC4KIAotMjAwOC0wMS0yNCAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgorY29tbWl0IGYwM2VhYjA4MjQ4ZjEyMmNlM2I2MjNhMThkZjllMTlmYWUxYjZlOTgKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIEZyaSBKYW4gMTEgMTc6MTQ6MTEgMjAxMyAtMDUwMAogCi0JKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisgICAgUmVtb3ZlIG9ic29sZXRlIGlubGluZSB0ZXN0IGZ1bmN0aW9ucwogCi0yMDA4LTAxLTA2ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXoub3JnPgorY29tbWl0IDA1ZmJlMWZhZWRjN2IyNTgwZDVmMTQwMTBkMDBlOWUzY2VlNzM5NTEKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIEZyaSBKYW4gMTEgMTY6NTQ6NDAgMjAxMyAtMDUwMAogCi0JKiBzcmMveDg2L2ZmaS5jIChmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IEZpeCB0aGlua28uCisgICAgeGxjIGNvbXBpbGVyIHN1cHBvcnQKIAotMjAwOC0wMS0wNSAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6Lm9yZz4KK2NvbW1pdCAwYjQ5ODZhNzg4OWVkMTg2NDY3NDE5MjIyOGYxMTYyYzFiNTc3MGE4CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBGcmkgSmFuIDExIDExOjE5OjUyIDIwMTMgLTA1MDAKIAotCVBSIHRlc3RzdWl0ZS8zMjg0MwotCSogc3JjL3g4Ni9mZmkuYyAoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBBZGQgY29kZSBmb3IKLQlzaWduZWQvdW5zaWduZWQgaW50OC8xNiBmb3IgWDg2X0RBUldJTi4KLQlVcGRhdGVkIGNvcHlyaWdodCBpbmZvLgotCUhhbmRsZSBvbmUgYW5kIHR3byBieXRlIHN0cnVjdHMgd2l0aCBzcGVjaWFsIGNpZi0+ZmxhZ3MuCi0JKiBzcmMveDg2L2ZmaXRhcmdldC5oOiBBZGQgc3BlY2lhbCB0eXBlcyBmb3Igb25lIGFuZCB0d28gYnl0ZSBzdHJ1Y3RzLgotCVVwZGF0ZWQgY29weXJpZ2h0IGluZm8uCi0JKiBzcmMveDg2L2Rhcndpbi5TIChmZmlfY2FsbF9TWVNWKTogUmV3cml0ZSB0byB1c2UgYSBqdW1wIHRhYmxlIGxpa2UKLQlzeXN2LlMKLQlSZW1vdmUgY29kZSB0byBwb3AgYXJncyBmcm9tIHRoZSBzdGFjayBhZnRlciBjYWxsLgotCVNwZWNpYWwtY2FzZSBzaWduZWQvdW5zaWduZWQgZm9yIGludDgvMTYsIG9uZSBhbmQgdHdvIGJ5dGUgc3RydWN0cy4KLQkoZmZpX2Nsb3N1cmVfcmF3X1NZU1YpOiBIYW5kbGUgRkZJX1RZUEVfVUlOVDgsCi0JRkZJX1RZUEVfU0lOVDgsIEZGSV9UWVBFX1VJTlQxNiwgRkZJX1RZUEVfU0lOVDE2LCBGRklfVFlQRV9VSU5UMzIsCi0JRkZJX1RZUEVfU0lOVDMyLgotCVVwZGF0ZWQgY29weXJpZ2h0IGluZm8uCisgICAgW3RyYXZpc10gaW5zdGFsbCBkZWphZ251IHdpdGggc3VkbwogCi0yMDA3LTEyLTA4ICBEYXZpZCBEYW5leSAgPGRkYW5leUBhdnRyZXguY29tPgorY29tbWl0IDNjMzM3ZWVmNTFhYjlhNDk5M2ZjODc1YmZhMjYyODlkZDZhMDg4ODEKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIEZyaSBKYW4gMTEgMTE6MTg6MTQgMjAxMyAtMDUwMAogCi0JKiBzcmMvbWlwcy9uMzIuUyAoZmZpX2NhbGxfTjMyKTogIFJlcGxhY2UgZGFkZCB3aXRoIEFERFUsIGRzdWIgd2l0aAotCVNVQlUsIGFkZCB3aXRoIEFERFUgYW5kIHVzZSBzbWFsbGVyIGNvZGUgc2VxdWVuY2VzLgorICAgIFt0cmF2aXNdIGluc3RhbGwgZGVqYWdudQogCi0yMDA3LTEyLTA3ICBEYXZpZCBEYW5leSAgPGRkYW5leUBhdnRyZXguY29tPgorY29tbWl0IDkwNzIwOTYyY2UxYmFmOWZjMzVkMWJkZTE3MzgxMDJiY2Q1YmQ1ZWQKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIEZyaSBKYW4gMTEgMTA6NTc6MzAgMjAxMyAtMDUwMAogCi0JKiBzcmMvbWlwcy9mZmkuYyAoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBIYW5kbGUgbG9uZyBkb3VibGUgcmV0dXJuCi0JdHlwZS4KKyAgICBBZGQgZmlyc3QgdHJhdmlzIGNvbmZpZyBmaWxlCiAKLTIwMDctMTItMDYgIERhdmlkIERhbmV5ICA8ZGRhbmV5QGF2dHJleC5jb20+Citjb21taXQgYmZmMDUyZDljZDViZTQxYmE5ZTQ3Yzc2MTE0MDU0YWY0ODdkM2MzMAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgRnJpIEphbiAxMSAxMDoyNDozMiAyMDEzIC0wNTAwCiAKLQkqIGluY2x1ZGUvZmZpLmguaW4gKEZGSV9TSVpFT0ZfSkFWQV9SQVcpOiBEZWZpbmUgaWYgbm90CWFscmVhZHkKLQlkZWZpbmVkLgotCShmZmlfamF2YV9yYXcpOiBOZXcgdHlwZWRlZi4KLQkoZmZpX2phdmFfcmF3X2NhbGwsIGZmaV9qYXZhX3B0cmFycmF5X3RvX3JhdywKLQlmZmlfamF2YV9yYXdfdG9fcHRyYXJyYXkpOiBDaGFuZ2UgcGFyYW1ldGVyIHR5cGVzIGZyb20gZmZpX3JhdyB0bwotCWZmaV9qYXZhX3Jhdy4KLQkoZmZpX2phdmFfcmF3X2Nsb3N1cmUpIDogU2FtZS4KLQkoZmZpX3ByZXBfamF2YV9yYXdfY2xvc3VyZSwgZmZpX3ByZXBfamF2YV9yYXdfY2xvc3VyZV9sb2MpOiBDaGFuZ2UKLQlwYXJhbWV0ZXIgdHlwZXMuCi0JKiBzcmMvamF2YV9yYXdfYXBpLmMgKGZmaV9qYXZhX3Jhd19zaXplKTogIFJlcGxhY2UgRkZJX1NJWkVPRl9BUkcgd2l0aAotCUZGSV9TSVpFT0ZfSkFWQV9SQVcuCi0JKGZmaV9qYXZhX3Jhd190b19wdHJhcnJheSk6IENoYW5nZSB0eXBlIG9mIHJhdyB0byBmZmlfamF2YV9yYXcuCi0JUmVwbGFjZSBGRklfU0laRU9GX0FSRyB3aXRoIEZGSV9TSVpFT0ZfSkFWQV9SQVcuIFVzZQotCXNpemVvZihmZmlfamF2YV9yYXcpIGZvciBhbGlnbm1lbnQgY2FsY3VsYXRpb25zLgotCShmZmlfamF2YV9wdHJhcnJheV90b19yYXcpOiBTYW1lLgotCShmZmlfamF2YV9ydmFsdWVfdG9fcmF3KTogQWRkIHNwZWNpYWwgaGFuZGxpbmcgZm9yIEZGSV9UWVBFX1BPSU5URVIKLQlpZiBGRklfU0laRU9GX0pBVkFfUkFXID09IDQuCi0JKGZmaV9qYXZhX3Jhd190b19ydmFsdWUpOiBTYW1lLgotCShmZmlfamF2YV9yYXdfY2FsbCk6IENoYW5nZSB0eXBlIG9mIHJhdyB0byBmZmlfamF2YV9yYXcuCi0JKGZmaV9qYXZhX3RyYW5zbGF0ZV9hcmdzKTogU2FtZS4KLQkoZmZpX3ByZXBfamF2YV9yYXdfY2xvc3VyZV9sb2MsIGZmaV9wcmVwX2phdmFfcmF3X2Nsb3N1cmUpOiBDaGFuZ2UKLQlwYXJhbWV0ZXIgdHlwZXMuCi0JKiBzcmMvbWlwcy9mZml0YXJnZXQuaCAoRkZJX1NJWkVPRl9KQVZBX1JBVyk6IERlZmluZSBmb3IgTjMyIEFCSS4KKyAgICAzMi1iaXQgeDg2IGZpeCBhbmQgbW9yZQogCi0yMDA3LTEyLTA2ICBEYXZpZCBEYW5leSAgPGRkYW5leUBhdnRyZXguY29tPgorY29tbWl0IGNkNDFhZWFiNjE3NmY4MzkxNjc5NTVjMDE2ZWNjMTlmNjVmNzVkZjMKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFRodSBKYW4gMTAgMTc6MjU6NDUgMjAxMyAtMDUwMAogCi0JKiBzcmMvbWlwcy9uMzIuUyAoZmZpX2Nsb3N1cmVfTjMyKTogVXNlIDY0LWJpdCBhZGQgaW5zdHJ1Y3Rpb24gb24KLQlwb2ludGVyIHZhbHVlcy4KKyAgICBBZGQgY29tcGlsZXIgY29sdW1uIHRvIHRhYmxlCiAKLTIwMDctMTItMDEgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5vcmc+Citjb21taXQgOGJmOTg3ZDRkZjdjNGQyMTQzNWI5MjExZjZjYzg2YWJmNTkwNGI0MgorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgVGh1IEphbiAxMCAxNzoyNDo1MSAyMDEzIC0wNTAwCiAKLQlQUiBsaWJmZmkvMzE5MzcKLQkqIHNyYy9wb3dlcnBjL2ZmaXRhcmdldC5oOiBJbnRyb2R1Y2UgbmV3IEFCSSBGRklfTElOVVhfU09GVF9GTE9BVC4KLQlBZGQgbG9jYWwgRkZJX1RZUEVfVUlOVDEyOCB0byBoYW5kbGUgc29mdC1mbG9hdCBsb25nLWRvdWJsZS0xMjguCi0JKiBzcmMvcG93ZXJwYy9mZmkuYzogRGlzdGluZ3Vpc2ggYmV0d2VlbiBfX05PX0ZQUlNfXyBhbmQgbm90IGFuZAotCXNldCB0aGUgTlVNX0ZQUl9BUkdfUkVHSVNURVJTIGFjY29yZGluZyB0by4KLQlBZGQgc3VwcG9ydCBmb3IgcG90ZW50aWFsIHNvZnQtZmxvYXQgc3VwcG9ydCB1bmRlciBoYXJkLWZsb2F0Ci0JYXJjaGl0ZWN0dXJlLgotCShmZmlfcHJlcF9hcmdzX1NZU1YpOiBTZXQgTlVNX0ZQUl9BUkdfUkVHSVNURVJTIHRvIDAgaW4gY2FzZSBvZgotCUZGSV9MSU5VWF9TT0ZUX0ZMT0FULCBoYW5kbGUgZmxvYXQsIGRvdWJsZXMgYW5kIGxvbmctZG91YmxlcyBhY2NvcmRpbmcKLQl0byB0aGUgRkZJX0xJTlVYX1NPRlRfRkxPQVQgQUJJLgotCShmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IExpa2V3aXNlLgotCShmZmlfY2xvc3VyZV9oZWxwZXJfU1lTVik6IExpa2V3aXNlLgotCSogc3JjL3Bvd2VycGMvcHBjX2Nsb3N1cmUuUzogTWFrZSBzdXJlIG5vdCB0byBzdG9yZSBmbG9hdC9kb3VibGUKLQlvbiBhcmNocyB3aGVyZSBfX05PX0ZQUlNfXyBpcyB0cnVlLgotCUFkZCBGRklfVFlQRV9VSU5UMTI4IHN1cHBvcnQuCi0JKiBzcmMvcG93ZXJwYy9zeXN2LlM6IEFkZCBzdXBwb3J0IGZvciBzb2Z0LWZsb2F0IGxvbmctZG91YmxlLTEyOC4KLQlBZGp1c3QgY29weXJpZ2h0IG5vdGljZS4KKyAgICBGaXggZm9yIHN1bnBybyBjb21waWxlciBvbiBTb2xhcmlzCiAKLTIwMDctMTEtMjUgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5vcmc+Citjb21taXQgM2VlNzRmZDZkYzhjY2QzMmI2MDhiYmZmNzM1MjY4MzhmYzM0ZjcwYgorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgVGh1IEphbiAxMCAxNzoxNTowMyAyMDEzIC0wNTAwCiAKLQkqIHNyYy9jbG9zdXJlcy5jOiBNb3ZlIGRlZmludGlvbiBvZiBNQVlCRV9VTlVTRUQgZnJvbSBoZXJlIHRvIC4uLgotCSogaW5jbHVkZS9mZmlfY29tbW9uLmg6IC4uLiBoZXJlLgotCVVwZGF0ZSBjb3B5cmlnaHQuCisgICAgVXBkYXRlIGRvY3VtZW50YXRpb24gdmVyc2lvbi4KIAotMjAwNy0xMS0xNyAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6Lm9yZz4KK2NvbW1pdCAxM2UyZDdiOTI1NTdhOTUxMWEwNDE0ZGY4MmJmMmRmM2VkYzU1Y2JhCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBUaHUgSmFuIDEwIDEwOjUyOjAyIDIwMTMgLTA1MDAKIAotCSogc3JjL3Bvd2VycGMvc3lzdi5TOiBMb2FkIGNvcnJlY3QgY3IgdG8gY29tcGFyZSBpZiB3ZSBoYXZlIGxvbmcgZG91YmxlLgotCSogc3JjL3Bvd2VycGMvbGludXg2NC5TOiBMaWtld2lzZS4KLQkqIHNyYy9wb3dlcnBjL2ZmaS5jOiBBZGQgYSBjb21tZW50IHRvIHNob3cgd2hpY2ggcGFydCBnb2VzIGludG8gY3I2LgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9sZGwuYzogTmV3IHRlc3QuCisgICAgSGFuZGxlIGJvdGggMzIgYW5kIDY0LWJpdCB4ODYgYnVpbGRzIHJlZ2FyZGxlc3Mgb2YgdGFyZ2V0IHRyaXBsZQogCi0yMDA3LTA5LTA0ICAgIDxhcGhAcmVkaGF0LmNvbT4KK2NvbW1pdCA1MTQxNTQzMDAwZmM4NmEzZDQ5YTkwN2EyMzEzNzEzZWU3OWU1MDRkCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBUaHUgSmFuIDEwIDA3OjM1OjUzIDIwMTMgLTA1MDAKIAotCSogc3JjL2FybS9zeXN2LlMgKFVOV0lORCk6IE5ldy4KLQkoV2hvbGUgZmlsZSk6IENvbmRpdGlvbmFsbHkgY29tcGlsZSB1bndpbmRlciBkaXJlY3RpdmVzLgotCSogc3JjL2FybS9zeXN2LlM6IEFkZCB1bndpbmRlciBkaXJlY3RpdmVzLgorICAgIERvbid0IHJ1biBFSCB0ZXN0cyB3aXRoIG5vbi1HTlUgY29tcGlsZXIKIAotCSogc3JjL2FybS9mZmkuYyAoZmZpX3ByZXBfYXJncyk6IEFsaWduIHN0cnVjdHMgYnkgYXQgbGVhc3QgNCBieXRlcy4KLQlPbmx5IHRyZWF0IHIwIGFzIGEgc3RydWN0IGFkZHJlc3MgaWYgd2UncmUgYWN0dWFsbHkgcmV0dXJuaW5nIGEKLQlzdHJ1Y3QgYnkgYWRkcmVzcy4KLQlPbmx5IGNvcHkgdGhlIGJ5dGVzIHRoYXQgYXJlIGFjdHVhbGx5IHdpdGhpbiBhIHN0cnVjdC4KLQkoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBBIENvbXBvc2l0ZSBUeXBlIG5vdCBsYXJnZXIgdGhhbiA0IGJ5dGVzCi0JaXMgcmV0dXJuZWQgaW4gcjAsIG5vdCBwYXNzZWQgYnkgYWRkcmVzcy4KLQkoZmZpX2NhbGwpOiBBbGxvY2F0ZSBhIHdvcmQtc2l6ZWQgdGVtcG9yYXJ5IGZvciB0aGUgY2FzZSB3aGVyZQotCWEgY29tcG9zaXRlIGlzIHJldHVybmVkIGluIHIwLgotCShmZmlfcHJlcF9pbmNvbWluZ19hcmdzX1NZU1YpOiBBbGlnbiBhcyBuZWNlc3NhcnkuCitjb21taXQgNTZiYThkODZmNDc5MzdhMGFmYjgxYTJiOWU3N2M5ZDIzNWQ5ZGI0NQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgVGh1IEphbiAxMCAwNzoyNToxMCAyMDEzIC0wNTAwCiAKLTIwMDctMDgtMDUgIFN0ZXZlbiBOZXdidXJ5ICA8c19qX25ld2J1cnlAeWFob28uY28udWs+CisgICAgRG9uJ3QgdXNlIHdhcm5pbmcgY2hlY2tpbmcgbWFjcm8gd2l0aCBzdW4gY29tcGlsZXIKIAotCSogc3JjL2FybS9mZmkuYyAoRkZJX0lOSVRfVFJBTVBPTElORSk6IFVzZSBfX2NsZWFyX2NhY2hlIGluc3RlYWQgb2YKLQlkaXJlY3RseSB1c2luZyB0aGUgc3lzX2NhY2hlZmx1c2ggc3lzY2FsbC4KK2NvbW1pdCA2YTAyOGNhZWMxYjJjNzkwNGZlYjRjNGY5Y2I3ZTExMjVlMWQxYjYwCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBUaHUgSmFuIDEwIDAxOjE5OjQzIDIwMTMgLTA1MDAKIAotMjAwNy0wNy0yNyAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+CisgICAgRG9uJ3QgdXNlIEdDQ2lzbXMgdG8gZGVmaW5lIHR5cGVzIHdoZW4KKyAgICArICAgICAgIGJ1aWxkaW5nIHdpdGggdGhlIFNVTlBSTyBjb21waWxlci4KIAotCSogc3JjL2FybS9zeXN2LlMgKGZmaV9jbG9zdXJlX1NZU1YpOiBBZGQgc29mdC1mbG9hdC4KK2NvbW1pdCAyZDliMzkzOTc1MWIzZWY5NzM5MDQ5NTA5ZDM1M2FkZTEwYjMyYThmCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBXZWQgSmFuIDkgMjE6MTQ6NTQgMjAxMyAtMDUwMAogCi0yMDA3LTA5LTAzICBNYWNpZWogVy4gUm96eWNraSAgPG1hY3JvQGxpbnV4LW1pcHMub3JnPgorICAgIEZpeCBmb3IgY2xvc3VyZXMgd2l0aCBzdW5wcm8gY29tcGlsZXIKIAotCSogTWFrZWZpbGUuYW06IFVuaWZ5IE1JUFNfSVJJWCBhbmQgTUlQU19MSU5VWCBpbnRvIE1JUFMuCi0JKiBjb25maWd1cmUuYWM6IExpa2V3aXNlLgotCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCi0JKiBpbmNsdWRlL01ha2VmaWxlLmluOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9NYWtlZmlsZS5pbjogTGlrZXdpc2UuCi0JKiBjb25maWd1cmU6IExpa2V3aXNlLgorY29tbWl0IDgzMDg5ODRlNDc5ZTMyNzRhMzZlOThlODI3MmI1YWRiYjZiNzc0YzIKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFR1ZSBKYW4gOCAxNToxNDoyMSAyMDEzIC0wNTAwCiAKLTIwMDctMDgtMjQgIERhdmlkIERhbmV5ICA8ZGRhbmV5QGF2dHJleC5jb20+CisgICAgTWFrZSBzdXJlIHdlJ3JlIHJ1bm5pbmcgZGVqYWdudSB0ZXN0cyB3aXRoIHRoZSByaWdodCBjb21waWxlci4KIAotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9zbC5jOiBOZXcgdGVzdC4KK2NvbW1pdCBmMjZjN2NhNjcxNDc0NTBkYjJmZTI1ZWE5MzI5NDRlNmNmMTQ1ZDVjCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBUdWUgSmFuIDggMTQ6NDc6MDUgMjAxMyAtMDUwMAogCi0yMDA3LTA4LTEwICBEYXZpZCBEYW5leSAgPGRkYW5leUBhdnRyZXguY29tPgorICAgIE1ha2UgY29tcGlsZXIgb3B0aW9ucyBpbiBkZWphZ251IHJ1bnMgY29tcGlsZXIgc3BlY2lmaWMKIAotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV91c2hvcnQuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3VpbnQxNi5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0MS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0My5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfN18xX2J5dGUuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDUuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2RvdWJsZS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Ny5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc2ludC5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0OS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjBieXRlMS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfc3Nob3J0Y2hhci5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDY0LmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zYnl0ZTIuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3NjaGFyLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV91Y2hhci5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTlieXRlLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc185Ynl0ZTEuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2Zsb2F0LmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4xLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3Byb2JsZW0xLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4zLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zc2hvcnQuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjUuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2RvdWJsZS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0LmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yYnl0ZS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0MTAuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzRieXRlLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc182Ynl0ZS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOGJ5dGUuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3NzaG9ydC5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDE2LmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50MzIuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzIwYnl0ZS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZmxvYXQuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDIuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzVfMV9ieXRlLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q0LmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yNGJ5dGUuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDYuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzY0Ynl0ZS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0OC5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWludC5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfdXNob3J0Y2hhci5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc2NoYXIuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VjaGFyLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50NjQuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3Vsb25nbG9uZy5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fbG9uZ2RvdWJsZS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMV8xYnl0ZS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTJieXRlLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zXzFieXRlLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zYnl0ZTEuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzRfMWJ5dGUuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzZfMV9ieXRlLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xNmJ5dGUuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE4Ynl0ZS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMC5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOWJ5dGUyLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4yLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm40LmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191c2hvcnQuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjYuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzVieXRlLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9wb2ludGVyLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc183Ynl0ZS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDMyLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL3Vud2luZHRlc3RfZmZpX2NhbGwuY2MsCi0JdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL3Vud2luZHRlc3QuY2M6IFJlbW92ZSB4ZmFpbCBmb3IgbWlwczY0Ki0qLSouCitjb21taXQgNzRjNzc2ZTIxOTA3ZmMyZTU5MjU3YzAyMWYyMzA3N2Y4Yjc5NjZjYgorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgVHVlIEphbiA4IDEyOjI1OjU0IDIwMTMgLTA1MDAKIAotMjAwNy0wOC0xMCAgRGF2aWQgRGFuZXkgIDxkZGFuZXlAYXZ0cmV4LmNvbT4KKyAgICBTd2l0Y2ggeDg2IFNvbGFyaXMgdG8gWDg2IGZyb20gWDg2XzY0CiAKLQlQUiBsaWJmZmkvMjgzMTMKLQkqIGNvbmZpZ3VyZS5hYzogRG9uJ3QgdHJlYXQgbWlwczY0IGFzIGEgc3BlY2lhbCBjYXNlLgotCSogTWFrZWZpbGUuYW0gKG5vZGlzdF9saWJmZmlfbGFfU09VUkNFUyk6IEFkZCBuMzIuUy4KLQkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZQotCSogTWFrZWZpbGUuaW46IERpdHRvLgotCSogZmZpY29uZmlnLmguaW46IERpdHRvLgotCSogc3JjL21pcHMvZmZpdGFyZ2V0LmggKFJFR19MLCBSRUdfUywgU1VCVSwgQUREVSwgU1JMLCBMSSk6IEluZGVudC4KLQkoTEEsIEVIX0ZSQU1FX0FMSUdOLCBGREVfQUREUl9CWVRFUyk6IE5ldyBwcmVwcm9jZXNzb3IgbWFjcm9zLgotCShGRklfREVGQVVMVF9BQkkpOiBTZXQgZm9yIG42NCBjYXNlLgotCShGRklfQ0xPU1VSRVMsIEZGSV9UUkFNUE9MSU5FX1NJWkUpOiBEZWZpbmUgZm9yIG4zMiBhbmQgbjY0IGNhc2VzLgotCSogc3JjL21pcHMvbjMyLlMgKGZmaV9jYWxsX04zMik6IEFkZCBkZWJ1ZyBtYWNyb3MgYW5kIGxhYmVscyBmb3IgRkRFLgotCShmZmlfY2xvc3VyZV9OMzIpOiBOZXcgZnVuY3Rpb24uCi0JKC5laF9mcmFtZSk6IE5ldyBzZWN0aW9uCi0JKiBzcmMvbWlwcy9vMzIuUzogQ2xlYW4gdXAgY29tbWVudHMuCi0JKGZmaV9jbG9zdXJlX08zMik6IFBhc3MgZmZpX2Nsb3N1cmUgcGFyYW1ldGVyIGluICQxMi4KLQkqIHNyYy9taXBzL2ZmaS5jOiBVc2UgRkZJX01JUFNfTjMyIGluc3RlYWQgb2YKLQlfTUlQU19TSU0gPT0gX0FCSU4zMiB0aHJvdWdob3V0LgotCShGRklfTUlQU19TVE9QX0hFUkUpOiBOZXcsIHVzZSBpbiBwbGFjZSBvZgotCWZmaV9zdG9wX2hlcmUuCi0JKGZmaV9wcmVwX2FyZ3MpOiBVc2UgdW5zaWduZWQgbG9uZyB0byBob2xkIHBvaW50ZXIgdmFsdWVzLiAgUmV3cml0ZQotCXRvIHN1cHBvcnQgbjMyL242NCBBQklzLgotCShjYWxjX24zMl9zdHJ1Y3RfZmxhZ3MpOiBSZXdyaXRlLgotCShjYWxjX24zMl9yZXR1cm5fc3RydWN0X2ZsYWdzKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZS4gIFJldmVyc2UKLQlwb3NpdGlvbiBvZiBmbGFnIGJpdHMuCi0JKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogUmV3cml0ZSBuMzIgcG9ydGlvbi4KLQkoZmZpX2NhbGwpOiBFbmFibGUgZm9yIG42NC4gIEFkZCBzcGVjaWFsIGhhbmRsaW5nIGZvciBzbWFsbCBzdHJ1Y3R1cmUKLQlyZXR1cm4gdmFsdWVzLgotCShmZmlfcHJlcF9jbG9zdXJlX2xvYyk6IEFkZCBuMzIgYW5kIG42NCBzdXBwb3J0LgotCShmZmlfY2xvc3VyZV9taXBzX2lubmVyX08zMik6IEFkZCBjYXN0IHRvIHNpbGVuY2Ugd2FybmluZy4KLQkoY29weV9zdHJ1Y3RfTjMyLCBmZmlfY2xvc3VyZV9taXBzX2lubmVyX04zMik6IE5ldyBmdW5jdGlvbnMuCitjb21taXQgODk2MmM4YzhkMDY4MDNlMzEwYmFjMGZmYzhlODRlYTE1ZGFlZmYzZgorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgVHVlIEphbiA4IDEyOjIyOjI0IDIwMTMgLTA1MDAKKworICAgIEZpeCByZWFkLW9ubHkgZWhfZnJhbWUgdGVzdAorCitjb21taXQgMzVkZGI2OWMyYjQ5NzQ2ZDk0MGU5MTljYTIyNmVjYzFiZTk0ZjE0YQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgVHVlIEphbiA4IDA3OjUzOjM3IDIwMTMgLTA1MDAKKworICAgIE9ubHkgZW1pdCBEV0FSRiB1bndpbmQgaW5mbyB3aGVuIGJ1aWxkaW5nIHdpdGggR0NDCisKK2NvbW1pdCBmNzg3OWJjM2YzYThkMGJiZmNjMzg3NzE3MzJjMTYwYTU4YmE5Y2Q4CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBUdWUgSmFuIDggMDc6MzA6MjggMjAxMyAtMDUwMAorCisgICAgVGVzdHN1aXRlIGZpeCBmb3IgU29sYXJpcyB2ZW5kb3IgY29tcGlsZXIKKworY29tbWl0IDY3Y2VhOTBmYzA4OTcwMjE0NjZmZDEwMjY3MTAxOWQzMGRiNDc0Y2QKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIE1vbiBKYW4gNyAwNjozMDoyNCAyMDEzIC0wNTAwCisKKyAgICBtZW5kCisKK2NvbW1pdCAwZGUzMjc3YjE4Y2Y1NGJlM2I4MWQ1MDliOWJlOWI0N2Q5YmMxZTgyCitBdXRob3I6IFRob3JzdGVuIEdsYXNlciA8dGdAbWlyYnNkLmRlPgorRGF0ZTogICBNb24gRGVjIDMgMDA6MDI6MzEgMjAxMiArMDAwMAorCisgICAgVGVzdHN1aXRlIGZpeGVzICh3YXMgUmU6IFtQQVRDSF0gRml4IGxpYmZmaSBvbiBtNjhrLWxpbnV4LWdudSwgY29tcGxldGVseSkKKyAgICAKKyAgICBEaXhpIHF1b2TigKYKKyAgICAKKyAgICA+YWx0aG91Z2ggSSBiZWxpZXZlIHNvbWUgMy4wLjExIGNoZWNrcyB0byBiZSBicm9rZW46CisgICAgCisgICAgQW5kIGluZGVlZCwgd2l0aCBhIGZldyBtaW5vciBjaGFuZ2VzIG9uIHRvcCBvZiBnaXQgbWFzdGVyLAorICAgIEkgc3RpbGwgZ2V0IGEgZnVsbCBydW4gb2YgUEFTUyBwbHVzIG9uZSBYUEFTUyBvbiBhbWQ2NC1saW51eCEKKyAgICAKKyAgICBXaXRoIHRoZSBvdGhlciBwYXRjaGVzIChmcm9tIHRoaXMgbWVzc2FnZeKAmXMgcGFyZW50KSBhbmQKKyAgICB0aGVzZSBhcHBsaWVkLCBJIGdldCBhIGZ1bGwgUEFTUyBvbiBtNjhrLWxpbnV4IGFzIHdlbGwuCisgICAgCisgICAgU28sIHBsZWFzZSBnaXQgYW0gdGhlc2UgdGhyZWUgZGlmZnMg4pi6CisgICAgCisgICAgYnllLAorICAgIC8vbWlyYWJpbG9zCisgICAgLS0KKyAgICBGV0lXLCBJJ20gcXVpdGUgaW1wcmVzc2VkIHdpdGggbWtzaCBpbnRlcmFjdGl2ZWx5LiBJIHRob3VnaHQgaXQgd2FzIG11Y2gKKyAgICAqbXVjaCogbW9yZSBiYXJlIGJvbmVzLiBCdXQgaXQgdHVybnMgb3V0IGl0IGJlYXRzIHRoZSBsaXZpbmcgaGVsbCBvdXQgb2YKKyAgICBrc2g5MyBpbiB0aGF0IHJlc3BlY3QuIEknZCBldmVuIGNvbnNpZGVyIGl0IGZvciBteSBkYWlseSB1c2UgaWYgSSBoYWRuJ3QKKyAgICB3YXN0ZWQgaGFsZiBteSBsaWZlIG9uIG15IHpzaCBzZXR1cC4gOi0pIC0tIEZyYW5rIFRlcmJlY2sgaW4gIyEvYmluL21rc2gKKyAgICBGcm9tIDVjYjE1YTNiYWQxZjBmYjM2MDUyMGRkNDhiZmM5MzhjODIxY2RjY2EgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCisgICAgRnJvbTogVGhvcnN0ZW4gR2xhc2VyIDx0Z0BtaXJic2Qub3JnPgorICAgIERhdGU6IFN1biwgMiBEZWMgMjAxMiAyMzoyMDo1NiArMDAwMAorICAgIFN1YmplY3Q6IFtQQVRDSCAxLzJdIEZpeCB0ZXN0cyB3cml0aW5nIHRvIGEgY2xvc3VyZSByZXR2YWwgdmlhIHBvaW50ZXIgY2FzdHMKKyAgICAKKyAgICBBcyBleHBsYWluZWQgaW4gPFBpbmUuQlNNLjQuNjRMLjEyMTIwMjIwMTQ0OTAuMjM0NDJAaGVyYy5taXJic2Qub3JnPgorICAgIGFsbCBvdGhlciB0ZXN0cyB0aGF0IGRvIHRoZSBzYW1lIGNhc3QgdG8gYW4gZmZpX2FyZyBwb2ludGVyIGluc3RlYWQuCisgICAgCisgICAgUEFTUyBvbiBhbWQ2NC1saW51eCAoWGVuIGRvbVUpIGFuZCBtNjhrLWxpbnV4IChBUkFueU0pCisgICAgCisgICAgU2lnbmVkLW9mZi1ieTogVGhvcnN0ZW4gR2xhc2VyIDx0Z0BtaXJic2Qub3JnPgorCitjb21taXQgOGY0NzcyZjM4M2FiZDcxY2ZhMTQxYzhhNzBiYTExYzFhYTRlYmUyYworQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgTW9uIEphbiA3IDA2OjE0OjUzIDIwMTMgLTA1MDAKKworICAgIG02OGsgZml4ZXMgZm9yIHNpZ25lZCA4IGFuZCAxNi1iaXQgY2FsbHMuCisKK2NvbW1pdCBlYTdmODQ0MGQ1OGFmYmViYjE4MWUyOTVmZjU2NGZkZjNkNjU5MGEwCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBGcmkgSmFuIDQgMDk6MDk6MzIgMjAxMyAtMDUwMAorCisgICAgcmVtb3ZlIGdjYy1pc20KKworY29tbWl0IGYwNmMwZjEwMzc3YWMwNGVlYmE1ZTYzMmRiZTVjNjJjNjI5ZGY0ZTYKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFdlZCBKYW4gMiAwOTozOToxNyAyMDEzIC0wNTAwCisKKyAgICBBZGQgbWlzc2luZyBDaGFuZ2VMb2cgZW50cnkgYW5kIGdlbmVyYXRlZCBmaWxlcy4KKworY29tbWl0IDFmODY3NWQ0YzEwMWQxOWQ2N2NhMGE1NWZmMmJhOTczMzQ5NTU4YWQKK01lcmdlOiAzMzVmNDE5IGY2YjU4ZDIKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFdlZCBKYW4gMiAwNjozNDozOCAyMDEzIC0wODAwCisKKyAgICBNZXJnZSBwdWxsIHJlcXVlc3QgIzI2IGZyb20gcm9mbDByL21hc3RlcgorICAgIAorICAgIGZpeCBidWlsZCBlcnJvciBvbiBwcGMgd2hlbiBsb25nIGRvdWJsZSA9PSBkb3VibGUKKworY29tbWl0IDMzNWY0MTlhODYwOTBjZGE5ZjIxNWQxNDk1NzJmOTQ4MWMzYWQwMzQKK01lcmdlOiA1MzIzNmQ1IDZkNmY3MTEKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFdlZCBKYW4gMiAwNjozMDowMyAyMDEzIC0wODAwCisKKyAgICBNZXJnZSBwdWxsIHJlcXVlc3QgIzIzIGZyb20gcnVyYmFuL21hc3RlcgorICAgIAorICAgIGN5Z3dpbi9taW5ndyBzaGFyZWQgbGlicyBuZWVkIGxpYnRvb2wgTERGTEFHUyA9IC1uby11bmRlZmluZWQKKworY29tbWl0IDUzMjM2ZDUwNjEwMzRjYzBhN2Y0NjQ3ZmMxYmQwNWJhMWFlYjNkMmEKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFdlZCBKYW4gMiAwOToyNDo1NSAyMDEzIC0wNTAwCisKKyAgICBSZWdlbmVyYXRlIGZpbGVzCisKK2NvbW1pdCA3MjIyMmNhM2ZiZTU2MGUxM2M4ZGM4OWNhNDQxYjI4YjdjYzc0ZGFmCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBXZWQgSmFuIDIgMDk6MDY6MzggMjAxMyAtMDUwMAorCisgICAgVXBkYXRlIHRleGluZm8udGV4CisKK2NvbW1pdCAxZTMyNmM5NTQzMWZjOTg5NjQyMmZhMzY2NTlmM2U4MzM4NTI1NzljCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBXZWQgSmFuIDIgMDk6MDU6MDIgMjAxMyAtMDUwMAorCisgICAgVXBkYXRlIGNvbmZpZy5ndWVzcyBhbmQgY29uZmlnLnN1YgorCitjb21taXQgY2I2NjcxZjViOGE5NTk2ZmY5NjhjNmI2YzMwNGY3MGFkZjcxYjM2OAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgV2VkIEphbiAyIDA4OjU2OjA3IDIwMTMgLTA1MDAKKworICAgIE1pc3NpbmcgLmdpdGlnbm9yZSBjaGFuZ2VzIGZvciB4Y29kZSBzdXBwb3J0CisKK2NvbW1pdCBlYmJlNzc5NjY4NTUzOTVhMmE0N2VkMmMwOWEzOGY5M2ViMDQ4MWNmCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBXZWQgSmFuIDIgMDg6NTQ6MDUgMjAxMyAtMDUwMAorCisgICAgbWlzc2VkIHgzMiBsaWJ0b29sIHBhdGNoLgorCitjb21taXQgNDM5NDA5NmRhMGFjYTBkZDQyMmI0NzlhMDQzYzE4YjRmMDVjNTc3MAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgV2VkIEphbiAyIDA4OjUxOjM1IDIwMTMgLTA1MDAKKworICAgIG1pc3NlZCB0cmFtcG9saW5lX3RhYmxlIHBhdGNoLiBNb3ZlIHRvIEdDQy4KKworY29tbWl0IGVkN2E1OWMzZmY3Yzg0YmQ5NWMzNzRhNWFmZjIxNTk5ZjcwNWU2ZGMKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFdlZCBKYW4gMiAwODo0ODowMSAyMDEzIC0wNTAwCisKKyAgICBXaW5kb3dzIHN5bWJvbCBleHBvcnQgZml4LiAgTW92ZSB0byBHQ0MuCisKK2NvbW1pdCBjY2VlMDlhNGZmODQzYjExYzdkOGI2ODE5Nzc2ZjU3ZDE4NzMwNWM3CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBXZWQgSmFuIDIgMDg6NDE6NTUgMjAxMyAtMDUwMAorCisgICAgKzIwMTItMDMtMjEgIFBldGVyIFJvc2luICA8cGVkYUBseXNhdG9yLmxpdS5zZT4KKyAgICArCisgICAgKyAgICAgICAqIHRlc3RzdWl0ZS9saWIvdGFyZ2V0LWxpYnBhdGguZXhwIFsqLSotY3lnd2luKiwgKi0qLW1pbmd3Kl0KKyAgICArICAgICAgIChzZXRfbGRfbGlicmFyeV9wYXRoX2Vudl92YXJzKTogQWRkIHRoZSBsaWJyYXJ5IHNlYXJjaCBkaXIgdG8gUEFUSAorICAgICsgICAgICAgKGFuZCBzYXZlIFBBVEggZm9yIGxhdGVyKS4KKyAgICArICAgICAgIChyZXN0b3JlX2xkX2xpYnJhcnlfcGF0aF9lbnZfdmFycyk6IFJlc3RvcmUgUEFUSC4KKworY29tbWl0IDA4OWRiY2U3Y2MwODg5ZWIyNjQ0NGQ4OWFlMDYyYzczYzY5ZjI2ZjAKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFdlZCBKYW4gMiAwODozNzozNSAyMDEzIC0wNTAwCisKKyAgICBtZWQKKworY29tbWl0IDk4MGEzMzRjNDJiNGIwZWZmMzJlNTU5MjllYzY3MjdkMTMyNmIwNWQKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFdlZCBKYW4gMiAwNzozNjo0MiAyMDEzIC0wNTAwCisKKyAgICBUZXN0IEdDQyB1cGRhdGUKKworY29tbWl0IDhiYWQ2NzlhZGU1MDAwZTU3Y2RjOWNhY2RlMjJlOGI5OTg0MDkzMGYKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFdlZCBKYW4gMiAwODoyODozNSAyMDEzIC0wNTAwCisKKyAgICBOZXcgc3RhbmQtYWxvbmUgcGF0Y2gKKworY29tbWl0IDk4MWMzMmVlMTE1ZTlmMGQ2NTQ2YTc0NTkyODc1ZTEzODIyMmE5ZDEKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFdlZCBKYW4gMiAwNzozNDowMyAyMDEzIC0wNTAwCisKKyAgICBNZXJnZSB3aXRoIEdDQy4gIEVsaW1pbmF0ZSBxdWlsdCBiaXRzLgorCitjb21taXQgNjFhMDU0OTI5NTE3ZmI4MGM0MzdiYTcxYzkxZjNlMjBjZmZmNTgxYQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgV2VkIE5vdiAyOCAwNjowNzo0MSAyMDEyIC0wNTAwCisKKyAgICBSZWZyZXNoIGNvbmZpZy5ndWVzcyBhbmQgY29uZmlnLnN1YgorCitjb21taXQgZjZiNThkMmJkYzBhMjRjZTk0ZGVkY2U1OTgwMmYwOTE5NzlkZjI2NQorQXV0aG9yOiByb2ZsMHIgPHJldG55Z0BnbXgubmV0PgorRGF0ZTogICBUaHUgTm92IDIyIDE2OjI2OjIxIDIwMTIgKzAxMDAKKworICAgIGZpeCBidWlsZCBvbiBwcGMgd2hlbiBsb25nIGRvdWJsZSA9PSBkb3VibGUKKworY29tbWl0IDY5ZGEzM2EwNzYxYWVhYzczZjllOTY0NjI2OWRhNjFjOTA2ZDYwMjAKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIE1vbiBOb3YgMTIgMTU6MjU6NDcgMjAxMiAtMDUwMAorCisgICAgUHVsbCBpbiBjb25maWcuc3ViIGZvciBhYXJjaDY0IHN1cHBvcnQgYW5kIG1vcmUKKworY29tbWl0IGY2ODBiNTk4YjdiZGRlMzI1YWM5MzQ5ZThjMzUxNTFjMjI4YmYyZGYKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFR1ZSBOb3YgNiAxNjowMDo0MCAyMDEyIC0wNTAwCisKKyAgICBBZGQgbWlzc2luZyBhYXJjaDY0IGNvbmZpZ3VyeSBiaXRzCisKK2NvbW1pdCBkZmFkZmIxOTg1M2M1N2M4NjIzYzQzNmQwZWYyYmRhZmFiMjRiNDMzCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBXZWQgT2N0IDMxIDA2OjQ2OjQxIDIwMTIgLTA0MDAKKworICAgIFJlYmFzZSBmb3IgcHBjNjQgZml4CisKK2NvbW1pdCBlOTQ0YjhjN2ViMWUyZWViOWMwZjNiOTc0MmI0ZDdmNDc2ODYwY2UxCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBUdWUgT2N0IDMwIDE0OjA2OjA5IDIwMTIgLTA0MDAKKworICAgIEFkZCBQYVggd29yay1hcm91bmQKKworY29tbWl0IDljY2Q1MWJlMWZkZWI5OWY4YjRmNDJmOTA1MTY2YzJhYmJiYThhYzAKK01lcmdlOiBmMzQyOTk2IGZhNWQ3NDcKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFR1ZSBPY3QgMzAgMTM6Mzc6MzcgMjAxMiAtMDQwMAorCisgICAgRml4IGNvbW1pdCBjb25mbGljdHMKKworY29tbWl0IGYzNDI5OTZjYjUwZWIyM2I4NjhhZmNmZjVhYzBjZGJiNmI1MDVkNjMKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFR1ZSBPY3QgMzAgMDc6NDI6MjcgMjAxMiAtMDQwMAorCisgICAgRGFyd2luMTIgZml4CisKK2NvbW1pdCA1OGU4YjY2ZjcwY2VmMmUzYzliMGU1YTcwN2I0NWQ2MzRjYmJmNWQ5CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBUdWUgT2N0IDMwIDA3OjA3OjE5IDIwMTIgLTA0MDAKKworICAgIEFBcmNoNjQgcG9ydAorCitjb21taXQgZmE1ZDc0NzkwNTQ3MjU3MWZkNDcyYzA3ZDQ3MjYwMTc2MjRmNjZiMworQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgVHVlIE9jdCAzMCAwNzowNzoxOSAyMDEyIC0wNDAwCisKKyAgICBBQXJjaDY0IHBvcnQKKworY29tbWl0IDY5OTNhNjY4NmY0M2YyMzEzYjE4MTQyYzFlOTYxODlhMjdkYjJhYTMKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFR1ZSBPY3QgMzAgMDY6NTk6MzIgMjAxMiAtMDQwMAorCisgICAgRml4IGF1dG9jb25mIG1hY3JvcworCitjb21taXQgNzAwODRlNzBkZGIxM2IyOWRkMDVjNzUxYjE5MDRkZTIwNmJiZTc5MAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgRnJpIE9jdCAxMiAyMzo1NTowNiAyMDEyIC0wNDAwCisKKyAgICBVcGRhdGUgVGlsZSogcG9ydCBpbmZvCisKK2NvbW1pdCA5YzAwYTNmNjc0MmQ2MTQwNGIzMTI2OGNjNzczZTcxMzBmZjQzMzMxCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBGcmkgT2N0IDEyIDE2OjQ2OjA2IDIwMTIgLTA0MDAKKworICAgIFRJTEUtR3gvVElMRVBybyBzdXBwb3J0CisKK2NvbW1pdCAwNDhkMmY0MWMzYTY2NjRiNGI2NGJmMjFlODA0Njg2NjYyZGE0MTYwCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBUaHUgT2N0IDExIDEwOjU1OjI1IDIwMTIgLTA0MDAKKworICAgIFJlYmFzZQorCitjb21taXQgNmQ2ZjcxMTA4MDY0ZjUwNjllZGQ3YmY3NzEwNTlkM2I4MjY0MDEzNQorQXV0aG9yOiBSZWluaSBVcmJhbiA8cnVyYmFuQGNwYW5lbC5uZXQ+CitEYXRlOiAgIFNhdCBKdWwgNyAxMjo0MjowMCAyMDEyIC0wNTAwCisKKyAgICBjeWd3aW4vbWluZ3cgc2hhcmVkIGxpYnMgbmVlZCBsaWJ0b29sIExERkxBR1MgPSAtbm8tdW5kZWZpbmVkCisgICAgCisgICAgb3RoZXJ3aXNlIG9ubHkgc3RhdGljIGxpYnMgYXJlIGNyZWF0ZWQuCisKK2NvbW1pdCBkMzMwZjE5MjkyZGE4ZjM5YTc4YTllMmIwYmEwOGRmODA5NGUzYmM1CitBdXRob3I6IE5pY29sYXMgTGVsb25nIDxyb3RvZ2x1cD4KK0RhdGU6ICAgU2F0IE1heSA1IDA5OjM3OjAyIDIwMTIgLTA0MDAKKworICAgIGlPUyBidWlsZCBmaXhlcy4KKworY29tbWl0IDA5YjIzY2ZjMWQ2ZDE1MzYxZWVlMTg4MTg4NTFmZDNjYWNiMjY1NTkKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIEZyaSBBcHIgMjcgMDg6Mjk6NDggMjAxMiAtMDQwMAorCisgICAgVXBkYXRlIFJFQURNRSB3aXRoIEJsYWNrZmluL3VDbGludXggc3VwcG9ydAorCitjb21taXQgMjEzZWQxNWM3MGU3MmQ2NjYxNTRjMDhlMmI0MWRhZTNmNjFmMjBkMworQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgRnJpIEFwciAyNyAwMTozNDoxNSAyMDEyIC0wNDAwCisKKyAgICBBZGQgYmxhY2tmaW4gc3VwcHJ0IGZyb20gQWxleGFuZHJlIEtldW5lY2tlLgorCitjb21taXQgZmYzZDc2ZmQ0MjczODJjZTdkMmIyZWQ1NGFjZGQwYmNlNDcwY2E0ZgorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgV2VkIEFwciAxMSAyMzoxNjo0OCAyMDEyIC0wNDAwCisKKyAgICAzLjAuMTEKKworY29tbWl0IDdlMGE0MTJjNGZkOWNiZTc3YjQ2N2E5YmY4NmY1NmFlYTYyNjMyYzMKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFdlZCBBcHIgMTEgMjI6NDc6NDQgMjAxMiAtMDQwMAorCisgICAgVXBkYXRlIGZpbGVzIHRvIHNoaXAKKworY29tbWl0IDM5ZTZhNTg2MDQxNmY3YmFkOTkyMTQ5ODE3ZTFkYTFiYTdjNDYwZDQKK0F1dGhvcjogWmFjaGFyeSBXYWxkb3dza2kgPHp3YWxkb3dza2lAZ21haWwuY29tPgorRGF0ZTogICBXZWQgQXByIDExIDIyOjM5OjQ2IDIwMTIgLTA0MDAKKworICAgIE1vcmUgbWFjL2lvcyBidWlsZCBpbXByb3ZlbWVudHMKKworY29tbWl0IDg1M2NjNzIyYTE2ZjhkMTI1NDU3M2VmM2JiNzNjN2I4ZjNkOGExMTAKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFR1ZSBBcHIgMTAgMDY6MzM6MzMgMjAxMiAtMDQwMAorCisgICAgRml4IHR5cG8gZm9yIGRhcndpbiB0YXJnZXRzCisKK2NvbW1pdCAzZjUwMjMwNjhjZGEwN2EzZGQ2ZGFjYmFhODc1YTViNWZjOTZkNGJiCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBGcmkgQXByIDYgMjA6MzQ6NTEgMjAxMiAtMDQwMAorCisgICAgbWVuZAorCitjb21taXQgZWJiOGU4OTQ1NjgxY2UwYWY3YTVjNDdhOTgwMjg3ZThlY2U4NGI4NAorQXV0aG9yOiBNaWtlIExld2lzIDxtaWtlbGlrZXNwaWVAZ21haWwuY29tPgorRGF0ZTogICBGcmkgQXByIDYgMjA6MDI6MDggMjAxMiAtMDQwMAorCisgICAgQnVpbGQgaU9TIGxpYnJhcnkgd2l0aCB4Y29kZQorCitjb21taXQgYTA5OGI0NGY0YzU5MmMyMTkyZmNkZWY0ZmFkNjEwOGViM2Y0MzAxYworQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgRnJpIEFwciA2IDE3OjA0OjM1IDIwMTIgLTA0MDAKKworICAgIFJlYXBwbHkgbWlzc2luZyB0ZXN0c3VpdGUgY2hhbmdlcyBmb3IgYXJtCisKK2NvbW1pdCAxMGQxZTUxMzkzZjA4YzE0MDQ1ZGI4NTg0MzIwOGY0NGY5ZjFlOWJhCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBGcmkgQXByIDYgMTE6NTc6MTQgMjAxMiAtMDQwMAorCisgICAgVXBkYXRlIHRvIHJjNC4gIFVwZ3JhZGUgYXV0b2NvbmYgdmVyc2lvbi4KKworY29tbWl0IDliY2M4ODQyNzZkYzBhODA3YjI2MDVlNTEwYjExYjE3NDBkZDlhYTIKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIEZyaSBBcHIgNiAxMTo1MzowNyAyMDEyIC0wNDAwCisKKyAgICBGaXggTGludXgveDMyIHJlZmVyZW5jZSBpbiBSRUFETUUKKworY29tbWl0IGEwNDRhNTZiMWNkMmEwOTI0ZjVlYzBkNmI1YTUwODlkMTRmY2QxYTEKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIEZyaSBBcHIgNiAxMDozOToxMCAyMDEyIC0wNDAwCisKKyAgICBMaW51eC94MzIgbGlidG9vbCBmaXgKKworY29tbWl0IDU5YmI2MWEzNjY2MWI5NzJlODQ0MzUzMWQzYjdiYzczNmUxMzFhNGIKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIEZyaSBBcHIgNiAwODoyNjoxNCAyMDEyIC0wNDAwCisKKyAgICBVcGRhdGUgbGlidG9vbCB2ZXJzaW9uLCBSRUFETUUsIHRlc3RzIGRpc3RzCisKK2NvbW1pdCBmMjk4MTQ1NGNiZTI1Y2Y5NDExYjcxMGY0NmM1ZjU1NTIwMDNhMTIzCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBUaHUgQXByIDUgMTU6NDU6MTkgMjAxMiAtMDQwMAorCisgICAgUmV2ZXJ0IGRlYnVnIGNvZGUgY2hhbmdlcworCitjb21taXQgMzlkY2NkZGI2MDZmNmZkYjhkY2IxNzdkNDE2ZTg4NDA0MWRhNmUzMAorQXV0aG9yOiBaYWNoYXJ5IFdhbGRvd3NraSA8endhbGRvd3NraUBnbWFpbC5jb20+CitEYXRlOiAgIFRodSBBcHIgNSAxMjozMjo0MSAyMDEyIC0wNDAwCisKKyAgICBGaXggYnVpbGRpbmcgd2l0aCBDbGFuZyBmb3IgRGFyd2luIChPUyBYIDEwLjYrIGFuZCBpT1MKKyAgICAgNC4wKykKKworY29tbWl0IDNhZmFhOWEzNGE4MWEzMDUyMjdhZThjZjRmMTJiOWQwNDg0ZDA1NWUKK0F1dGhvcjogUGV0ZXIgUm9zaW4gPHBlZGFAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFR1ZSBBcHIgMyAwNzo0MDozMSAyMDEyIC0wNDAwCisKKyAgICBGaXggcmV0dXJuX3VjLmMgdGVzdCBjYXNlIG9uIHdpbmRvd3MuCisKK2NvbW1pdCA2NWY0MGMzNWEyODczZDgzMjgzNTllYzQ1MTJiZDA3MzZkYmUzMmM3CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBUdWUgQXByIDMgMDc6MzU6NTkgMjAxMiAtMDQwMAorCisgICAgUmVwYWlyIHBwYyBidWlsZCByZWdyZXNzaW9uLgorCitjb21taXQgMGExYWIxMmE4ZDE1Y2FhODk0MTE2YTgyMjQ5NTUxZjIzZWY2NTYxMgorQXV0aG9yOiBQZXRlciBSb3NpbiA8cGVkYUBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgRnJpIE1hciAzMCAwODoxNDowOCAyMDEyIC0wNDAwCisKKyAgICBWYXJpb3VzIE1TVkMtcmVsYXRlZCBjaGFuZ2VzLgorCitjb21taXQgZTE1MzkyNjZlNmM2ZGRlM2M5OTgzMjMyMzU4NmYzM2Y5NzdkMWRjMAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgRnJpIE1hciAzMCAwMDo0MDoxOCAyMDEyIC0wNDAwCisKKyAgICBBUk0gVkZQIGZpeCBmb3Igb2xkIHRvb2xjaGFpbnMKKworY29tbWl0IDdjNWU2MGI1ZjQ3ZDcyNTAzNmE3MjE2MmYxMzYyNzJiYzQwN2UzYTEKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFRodSBNYXIgMjkgMDg6NDg6MjIgMjAxMiAtMDQwMAorCisgICAgUmViYXNlIG9uIGZpeGVkIEdDQyBzb3VyY2VzCisKK2NvbW1pdCBlNzJlZDVlZWFhOWNmYjBmZGM4NmY2YjM0MjI3MzQxNzdiNjU5Zjk2CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBXZWQgTWFyIDIxIDA5OjUyOjI4IDIwMTIgLTA0MDAKKworICAgIEZpeCB2YXJhcmcgZmxvYXQgdGVzdAorCitjb21taXQgYmQ3OGM5YzMzMTEyNDRkZDVmODc3YzkxNWIwZGZmOTE2MjFkZDI1MworQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgV2VkIE1hciAyMSAwODowOTozMCAyMDEyIC0wNDAwCisKKyAgICBNb3JlIGN5Z3dpbiBmaXhlcworCitjb21taXQgODRkMzI1M2Y4NmRhZDZiNGYyNjEyMzE5MzU2NzVkMzVmZDk2NGIwNQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgTW9uIE1hciAxOSAyMzowNzozNSAyMDEyIC0wNDAwCisKKyAgICBSZWJhc2UgcG9zdCBHQ0MgbWVyZ2UKKworY29tbWl0IDk2NGM1YjkzZjgwZGNhYWNmNzMwNTZiN2QxNWE0ZDJiNGI3YTIxN2MKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFNhdCBNYXIgMyAxNDo0NjoyMCAyMDEyIC0wNTAwCisKKyAgICBhYmkgY2hlY2sgZml4ZXMgYW5kIExpbnV4L3gzMiBzdXBwb3J0CisKK2NvbW1pdCA2YzE5NDIzM2E1ZjZmMWQyNzQ2NjlhZmM1OTI0YTllMWY2OWQ0ODc2CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTYXQgTWFyIDMgMTQ6MTc6NTQgMjAxMiAtMDUwMAorCisgICAgQWRkIC1uby11bmRlZmluZWQgZm9yIGJvdGggMzItIGFuZCA2NC1iaXQgeDg2CisgICAgd2luZG93cy1saWtlIGhvc3RzLgorCitjb21taXQgODM2MGJmMWNkMGFiYThkYjU1ODIyNjZkYTcwNDY3ZGU3ZTg5YTU3YQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgVGh1IEZlYiAyMyAwNzowMToxMyAyMDEyIC0wNTAwCisKKyAgICBFbnN1cmUgdGhhdCB1c2VycyBkb24ndCBpbmNsdWRlIGZmaXRhcmdldC5oIGRpcmVjdGx5CisKK2NvbW1pdCBkNTc4Yjg5NjE5Y2YzZDJiYWZmMDI3YjIwMzYxOWRjMzA3ZmMxMmUzCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBXZWQgRmViIDE1IDAwOjE4OjE4IDIwMTIgLTA1MDAKKworICAgIEZpeCBBQkkgY2hlY2sgcmVncmVzc2lvbgorCitjb21taXQgZGVlMjBmOGU0NWM0ODZmNTAxOGYzMWUwOWJiMzYyOTkyYWE0OThjMworQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgRnJpIEZlYiAxMCAxMzowNjo0NiAyMDEyIC0wNTAwCisKKyAgICBSZWJhc2VkIGZyb20gZ2NjCiAKLTIwMDctMDgtMDggIERhdmlkIERhbmV5ICA8ZGRhbmV5QGF2dHJleC5jb20+Citjb21taXQgNDEzMGUxOTcyZDAwMTE0M2U1ZTlmM2M2YjY1ZjJhNmY5NTI0MTY5ZQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgRnJpIEZlYiAzIDEzOjE4OjI3IDIwMTIgLTA2MDAKIAotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2ZmaXRlc3QuaCAoZmZpX3R5cGVfbXlsb25nKTogUmVtb3ZlIGRlZmluaXRpb24uCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3VpbnQxNi5jIChtYWluKTogVXNlIGNvcnJlY3QgdHlwZQotCXNwZWNpZmllcnMuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDEuYyAobWFpbik6IERpdHRvLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zaW50LmMgKG1haW4pOiBEaXR0by4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0OS5jIChtYWluKTogRGl0dG8uCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzIwYnl0ZTEuYyAobWFpbik6IERpdHRvLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc185Ynl0ZTEuYyAobWFpbik6IERpdHRvLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4xLmMgKG1haW4pOiBEaXR0by4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMy5jIChtYWluKTogRGl0dG8uCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2RibDIuYyAobWFpbik6IERpdHRvLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zc2hvcnQuYyAobWFpbik6IERpdHRvLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9mbDMuYyAobWFpbik6IERpdHRvLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm41LmMgKG1haW4pOiBEaXR0by4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0LmMgKG1haW4pOiBEaXR0by4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0MTAuYyAobWFpbik6IERpdHRvLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9sbDEuYyAobWFpbik6IERpdHRvLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc184Ynl0ZS5jIChtYWluKTogRGl0dG8uCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3VpbnQzMi5jIChtYWluKTogRGl0dG8uCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQxNi5jIChtYWluKTogRGl0dG8uCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzIwYnl0ZS5jIChtYWluKTogRGl0dG8uCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDIuYyAobWFpbik6IERpdHRvLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yNGJ5dGUuYyAobWFpbik6IERpdHRvLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q2LmMgKG1haW4pOiBEaXR0by4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWludC5jIChtYWluKTogRGl0dG8uCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzEyYnl0ZS5jIChtYWluKTogRGl0dG8uCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE2Ynl0ZS5jIChtYWluKTogRGl0dG8uCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjAuYyAobWFpbik6IERpdHRvLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc185Ynl0ZTIuYyAobWFpbik6IERpdHRvLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4yLmMgKG1haW4pOiBEaXR0by4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fZGJsMS5jIChtYWluKTogRGl0dG8uCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjQuYyAobWFpbik6IERpdHRvLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm42LmMgKG1haW4pOiBEaXR0by4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDMyLmMgKG1haW4pOiBEaXR0by4KKyAgICBSZWZyZXNoIGF1dG9jb25mLWFyY2hpdmUgbTQgc2NyaXB0cwogCi0yMDA3LTA4LTA3ICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KK2NvbW1pdCAxZmY5YzYwNGJiMjE0YjVhMzA1MDY0YWYxMDQ5NTc3ZWY3ODM3MzBhCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBXZWQgRmViIDEgMTY6MzQ6MzAgMjAxMiAtMDYwMAogCi0JKiBzcmMveDg2L3N5c3YuUyAoZmZpX2Nsb3N1cmVfcmF3X1NZU1YpOiBGaXggdHlwbyBpbiBwcmV2aW91cwotCWNoZWNraW4uCisgICAgUmViYXNlIGZyb20gR0NDCiAKLTIwMDctMDgtMDYgIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorY29tbWl0IDIxMTA2MGViOGY3MTRhZjBlOTM1NDMwZWZhNmJiNDVlOGUzZmZjNWQKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIE1vbiBKYW4gMjMgMTQ6MjQ6MDEgMjAxMiAtMDUwMAogCi0JUFIgdGVzdHN1aXRlLzMyODQzCi0JKiBzcmMveDg2L3N5c3YuUyAoZmZpX2Nsb3N1cmVfcmF3X1NZU1YpOiBIYW5kbGUgRkZJX1RZUEVfVUlOVDgsCi0JRkZJX1RZUEVfU0lOVDgsIEZGSV9UWVBFX1VJTlQxNiwgRkZJX1RZUEVfU0lOVDE2LCBGRklfVFlQRV9VSU5UMzIsCi0JRkZJX1RZUEVfU0lOVDMyLgorICAgIEFscGhhIGZpeAogCi0yMDA3LTA4LTAyICBEYXZpZCBEYW5leSAgPGRkYW5leUBhdnRyZXguY29tPgorY29tbWl0IDc4ZDljNjM4YmEwZGU2ZWRmYmM2MDNmZDY1ZDE5YzY1NjI2NjMyNDgKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIE1vbiBKYW4gMjMgMTQ6MTc6MjQgMjAxMiAtMDUwMAogCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX3VsLmMgKG1haW4pOiBEZWZpbmUgcmV0dXJuIHR5cGUgYXMKLQlmZmlfYXJnLiAgVXNlIHByb3BlciBwcmludGYgY29udmVyc2lvbiBzcGVjaWZpZXIuCisgICAgbWVuZAogCi0yMDA3LTA3LTMwICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KK2NvbW1pdCBhZmFmMzM4MTYwNGJkODE4MDNkOGE1ZjNiZjRkNDYyMjk5ZjFhYWMzCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBNb24gSmFuIDIzIDE0OjE3OjEzIDIwMTIgLTA1MDAKIAotCVBSIHRlc3RzdWl0ZS8zMjg0MwotCSogc3JjL3g4Ni9mZmkuYyAoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBpbiB4ODYgY2FzZSwgYWRkIGNvZGUgZm9yCi0Jc2lnbmVkL3Vuc2lnbmVkIGludDgvMTYuCi0JKiBzcmMveDg2L3N5c3YuUyAoZmZpX2NhbGxfU1lTVik6IFJld3JpdGUgdG86Ci0JVXNlIGEganVtcCB0YWJsZS4KLQlSZW1vdmUgY29kZSB0byBwb3AgYXJncyBmcm9tIHRoZSBzdGFjayBhZnRlciBjYWxsLgotCVNwZWNpYWwtY2FzZSBzaWduZWQvdW5zaWduZWQgaW50OC8xNi4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fc2MuYyAobWFpbik6IFJldmVydC4KKyAgICBtZW5kCiAKLTIwMDctMDctMjYgIFJpY2hhcmQgR3VlbnRoZXIgIDxyZ3VlbnRoZXJAc3VzZS5kZT4KK2NvbW1pdCA5ZTljNGFlYjc3ZGU1NjA4ZDYwMjEwOWYyMjEwMGMxYzBjNzlmYWFkCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBNb24gSmFuIDIzIDE0OjExOjIzIDIwMTIgLTA1MDAKIAotCVBSIHRlc3RzdWl0ZS8zMjg0MwotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9zYy5jIChtYWluKTogVmVyaWZ5IGNhbGwKLQlyZXN1bHQgYXMgc2lnbmVkIGNoYXIsIG5vdCBmZmlfYXJnLgorICAgIEFkZCBBbWlnYSBzdXBwb3J0CiAKLTIwMDctMDctMTYgIFJhaW5lciBPcnRoICA8cm9AVGVjaEZhay5VbmktQmllbGVmZWxkLkRFPgorY29tbWl0IDhlZmMwYjFmNDAyN2Q1YTNjYmYyMDVlNTVkNDIyZDk0ZTYwZjMyMjYKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIE1vbiBKYW4gMjMgMTM6NDc6MzggMjAxMiAtMDUwMAogCi0JKiBjb25maWd1cmUuYWMgKGk/ODYtKi1zb2xhcmlzMi4xWzAtOV0pOiBTZXQgVEFSR0VUIHRvIFg4Nl82NC4KLQkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKyAgICBVbmxpa2VseSBmaXhlcwogCi0yMDA3LTA3LTExICBEYXZpZCBEYW5leSAgPGRkYW5leUBhdnRyZXguY29tPgorY29tbWl0IDFkZjUxMzk4YWUxODNkYzIwOGJhNDU5OWVlODY3Mjc4YjA0ZDEzZDMKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIE1vbiBKYW4gMjMgMTM6NDM6NTkgMjAxMiAtMDUwMAogCi0JKiBzcmMvbWlwcy9mZmkuYzogRG9uJ3QgaW5jbHVkZSBzeXMvY2FjaGVjdGwuaC4KLQkoZmZpX3ByZXBfY2xvc3VyZV9sb2MpOiBVc2UgX19idWlsdGluX19fY2xlYXJfY2FjaGUoKSBpbnN0ZWFkIG9mCi0JY2FjaGVmbHVzaCgpLgorICAgIG1lbmQKIAotMjAwNy0wNS0xOCAgQXVyZWxpZW4gSmFybm8gIDxhdXJlbGllbkBhdXJlbDMyLm5ldD4KK2NvbW1pdCBjZDIyNzdjYzc5NmI5NmIxNDljZDI4NGFlODUzMjY1MjlmZTdmYjljCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBNb24gSmFuIDIzIDEzOjQzOjM4IDIwMTIgLTA1MDAKIAotCSogc3JjL2FybS9mZmkuYyAoZmZpX3ByZXBfY2xvc3VyZV9sb2MpOiBSZW5hbWVkIGFuZCBhanVzdGVkCi0JZnJvbSAoZmZpX3ByZXBfY2xvc3VyZSk6IC4uLiB0aGlzLgotCShGRklfSU5JVF9UUkFNUE9MSU5FKTogQWRqdXN0LgorICAgIG1lbmQKIAotMjAwNS0xMi0zMSAgUGhpbCBCbHVuZGVsbCAgPHBiQHJlY2l2YS5jb20+Citjb21taXQgMTY0ZTZmZTA0YjE4OTc0NmM4YmQ1ODEwYzZlM2U5MTk3NzBiYjlkNAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgTW9uIEphbiAyMyAxMjo0MTowNiAyMDEyIC0wNTAwCiAKLQkqIHNyYy9hcm0vZmZpLmMgKGZmaV9wcmVwX2luY29taW5nX2FyZ3NfU1lTViwKLQlmZmlfY2xvc3VyZV9TWVNWX2lubmVyLCBmZmlfcHJlcF9jbG9zdXJlKTogTmV3LCBhZGQgY2xvc3VyZSBzdXBwb3J0LgotCSogc3JjL2FybS9zeXN2LlMoZmZpX2Nsb3N1cmVfU1lTVik6IExpa2V3aXNlLgotCSogc3JjL2FybS9mZml0YXJnZXQuaCAoRkZJX1RSQU1QT0xJTkVfU0laRSk6IExpa2V3aXNlLgotCShGRklfQ0xPU1VSRVMpOiBFbmFibGUgY2xvc3VyZSBzdXBwb3J0LgorICAgIG02OGsgZml4ZXMKIAotMjAwNy0wNy0wMyAgQW5kcmV3IEhhbGV5ICA8YXBoQGhlZGdlcy5iaWxsZ2F0bGlmZi5jb20+Citjb21taXQgYzM2NWVlNzU3N2JlZjAwY2IzYzJjMGI1MjI0MTQ3YWVhMDQxMzhkOAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgTW9uIEphbiAyMyAxMToxMzoxOCAyMDEyIC0wNTAwCiAKLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfdXNob3J0LmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50MTYuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDEuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDMuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzdfMV9ieXRlLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kb3VibGUuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDUuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDcuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NpbnQuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDkuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzIwYnl0ZTEuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3NzaG9ydGNoYXIuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQ2NC5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM2J5dGUyLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV9zY2hhci5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfdWNoYXIuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE5Ynl0ZS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOWJ5dGUxLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9mbG9hdC5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9wcm9ibGVtMS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMy5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc3Nob3J0LmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm41LmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9kb3VibGUuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzJieXRlLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDEwLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc180Ynl0ZS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNmJ5dGUuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzhieXRlLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV9zc2hvcnQuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3VpbnQzMi5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDE2LmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19mbG9hdC5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjBieXRlLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc181XzFfYnl0ZS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Mi5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjRieXRlLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q0LmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q2LmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc182NGJ5dGUuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDguYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VpbnQuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3VzaG9ydGNoYXIuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NjaGFyLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191Y2hhci5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDY0LmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191bG9uZ2xvbmcuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGUuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzFfMWJ5dGUuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzEyYnl0ZS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM18xYnl0ZS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM2J5dGUxLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc180XzFieXRlLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc182XzFfYnl0ZS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTZieXRlLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xOGJ5dGUuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjAuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzlieXRlMi5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMi5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNC5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdXNob3J0LmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm42LmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc181Ynl0ZS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fcG9pbnRlci5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfN2J5dGUuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQzMi5jLAotCXRlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC91bndpbmR0ZXN0X2ZmaV9jYWxsLmNjLAotCXRlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC91bndpbmR0ZXN0LmNjOiBFbmFibGUgZm9yIEFSTS4KKyAgICBSZWZyZXNoCiAKLTIwMDctMDctMDUgIEguSi4gTHUgIDxob25naml1Lmx1QGludGVsLmNvbT4KK2NvbW1pdCBmMjJjMzhiYmQ5M2JjYzBjMDRiZjI2YzNlNDE0NTU2YjMxNzdjMzg1CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBGcmkgTm92IDE4IDE1OjEzOjQxIDIwMTEgLTA1MDAKIAotCSogYWNsb2NhbC5tNDogUmVnZW5lcmF0ZWQuCisgICAgVXBkYXRlIHZhcmlhZGljIHBhdGNoCiAKLTIwMDctMDYtMDIgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+Citjb21taXQgMDNlOWVlMzIxYTNjMjA4Zjg4ZDI0MzI1ODdjZTQwYjJiYjI0MzBiYQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgRnJpIE5vdiAxOCAxNToxMzowMCAyMDExIC0wNTAwCiAKLQkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKyAgICBGaXggY2xzX2RvdWJsZV92YS5jIGFuZCB1cGRhdGUgZG9jcwogCi0yMDA3LTA1LTIzICBTdGV2ZSBFbGxjZXkgIDxzamVAY3VwLmhwLmNvbT4KK2NvbW1pdCA5NWYzMTE1MWVjNzkyODA5Y2ZiODBkMzg1MzUwZjlmNTZkOTVhYTI1CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTYXQgTm92IDEyIDIzOjQ2OjA1IDIwMTEgLTA1MDAKIAotCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCi0JKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCi0JKiBhY2xvY2FsLm00OiBSZWdlbmVyYXRlLgotCSogaW5jbHVkZS9NYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KLQkqIHRlc3RzdWl0ZS9NYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKyAgICBSZXJ1biBhdXRvbWFrZQogCi0yMDA3LTA1LTEwICBSb21hbiBaaXBwZWwgPHppcHBlbEBsaW51eC1tNjhrLm9yZz4KK2NvbW1pdCAxOThlZDFlZjg1Y2YxODM0MjYyN2Y4ZDQ0YmMzZjEyYzk5NzVhNDlkCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTYXQgTm92IDEyIDIzOjQ1OjIwIDIwMTEgLTA1MDAKIAotCSogc3JjL202OGsvZmZpLmMgKGZmaV9wcmVwX2luY29taW5nX2FyZ3NfU1lTViwKLQlmZmlfY2xvc3VyZV9TWVNWX2lubmVyLGZmaV9wcmVwX2Nsb3N1cmUpOiBOZXcsIGFkZCBjbG9zdXJlIHN1cHBvcnQuCi0JKiBzcmMvbTY4ay9zeXN2LlMoZmZpX2Nsb3N1cmVfU1lTVixmZmlfY2xvc3VyZV9zdHJ1Y3RfU1lTVik6IExpa2V3aXNlLgotCSogc3JjL202OGsvZmZpdGFyZ2V0LmggKEZGSV9UUkFNUE9MSU5FX1NJWkUpOiBMaWtld2lzZS4KLQkoRkZJX0NMT1NVUkVTKTogRW5hYmxlIGNsb3N1cmUgc3VwcG9ydC4KKyAgICBVcGRhdGUgdmVyc2lvbiBudW1iZXIKIAotMjAwNy0wNS0xMCAgUm9tYW4gWmlwcGVsIDx6aXBwZWxAbGludXgtbTY4ay5vcmc+Citjb21taXQgNGYxN2UxZjE0MmU4MDViMTM5NTliYTI1OTRlZTczNWVhZTQzOWY0ZQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU2F0IE5vdiAxMiAxNzoyMjoyNCAyMDExIC0wNTAwCiAKLQkqIGNvbmZpZ3VyZS5hYyAoSEFWRV9BU19DRklfUFNFVURPX09QKTogTmV3IHRlc3QuCi0JKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCi0JKiBmZmljb25maWcuaC5pbjogUmVnZW5lcmF0ZS4KLQkqIHNyYy9tNjhrL3N5c3YuUyAoQ0ZJX1NUQVJUUFJPQyxDRklfRU5EUFJPQywKLQlDRklfT0ZGU0VULENGSV9ERUZfQ0ZBKTogTmV3IG1hY3Jvcy4KLQkoZmZpX2NhbGxfU1lTVik6IEFkZCBjYWxsZnJhbWUgYW5ub3RhdGlvbi4KKyAgICBGaXggbGFzdCBwYXRjaAogCi0yMDA3LTA1LTEwICBSb21hbiBaaXBwZWwgPHppcHBlbEBsaW51eC1tNjhrLm9yZz4KK2NvbW1pdCBmZjk0NTRkYTQ0ODU5NzE2YTViZDRlYWEzNDQ0OTkyODhjNzk2OTRmCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTYXQgTm92IDEyIDE3OjE4OjUxIDIwMTEgLTA1MDAKIAotCSogc3JjL202OGsvZmZpLmMgKGZmaV9wcmVwX2FyZ3MsZmZpX3ByZXBfY2lmX21hY2hkZXApOiBGaXgKLQludW1lcm91cyB0ZXN0IHN1aXRlIGZhaWx1cmVzLgotCSogc3JjL202OGsvc3lzdi5TIChmZmlfY2FsbF9TWVNWKTogTGlrZXdpc2UuCisgICAgQWRkIERhdmlkIEdpbGJlcnQncyB2YXJpYWRpYyBmdW5jdGlvbiBjYWxsIHN1cHBvcnQKIAotMjAwNy0wNC0xMSAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KK2NvbW1pdCBlYTE0YWU4NWU4ZjU0ZmYwNDZiN2ZiOGE5Y2ZlMzQ5NDc1MjcyMDQ0CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTYXQgTm92IDEyIDE2OjM2OjU5IDIwMTEgLTA1MDAKIAotCSogTWFrZWZpbGUuYW0gKEVYVFJBX0RJU1QpOiBCcmluZyB1cCB0byBkYXRlLgotCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCi0JKiBzcmMvZnJ2L2VhYmkuUzogUmVtb3ZlIFJDUyBrZXl3b3JkLgorICAgIGNsZWFuIHVwCiAKLTIwMDctMDQtMDYgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQHJlZGhhdC5jb20+Citjb21taXQgNTI4OTFmOGE5M2Y5YjhkZTgwMWNjYTRjZjA1NjM5NDIyZGM5NzczZQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU2F0IE5vdiAxMiAxNjozNTo1NSAyMDExIC0wNTAwCiAKLQkqIGNvbmZpZ3VyZS5hYzogVGlkeSB0YXJnZXQgY2FzZS4KLQkoSEFWRV9MT05HX0RPVUJMRSk6IEFsbG93IHRoZSB0YXJnZXQgdG8gb3ZlcnJpZGUuCi0JKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCi0JKiBpbmNsdWRlL2ZmaS5oLmluOiBEb24ndCBkZWZpbmUgZmZpX3R5cGVfZm9vIGlmCi0JTElCRkZJX0hJREVfQkFTSUNfVFlQRVMgaXMgZGVmaW5lZC4KLQkoZmZpX3R5cGVfbG9uZ2RvdWJsZSk6IElmIG5vdCBIQVZFX0xPTkdfRE9VQkxFLCBkZWZpbmUKLQl0byBmZmlfdHlwZV9kb3VibGUuCi0JKiB0eXBlcy5jIChMSUJGRklfSElERV9CQVNJQ19UWVBFUyk6IERlZmluZS4KLQkoRkZJX1RZUEVERUYsIGZmaV90eXBlX3ZvaWQpOiBNYXJrIHRoZSBkYXRhIGNvbnN0LgotCShmZmlfdHlwZV9sb25nZG91YmxlKTogU3BlY2lhbCBjYXNlIGZvciBBbHBoYS4gIERvbid0IGRlZmluZQotCWlmIGxvbmcgZG91YmxlID09IGRvdWJsZS4KKyAgICBBZGQgcG93ZXJwYyBzb2Z0IGZsb2F0IHN1cHBvcnQKIAotCSogc3JjL2FscGhhL2ZmaS5jIChGRklfVFlQRV9MT05HRE9VQkxFKTogQXNzZXJ0IHVuaXF1ZSB2YWx1ZS4KLQkoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBIYW5kbGUgaXQgYXMgdGhlIDEyOC1iaXQgdHlwZS4KLQkoZmZpX2NhbGwsIGZmaV9jbG9zdXJlX29zZl9pbm5lcik6IExpa2V3aXNlLgotCShmZmlfY2xvc3VyZV9vc2ZfaW5uZXIpOiBMaWtld2lzZS4gIE1hcmsgaGlkZGVuLgotCShmZmlfY2FsbF9vc2YsIGZmaV9jbG9zdXJlX29zZik6IE1hcmsgaGlkZGVuLgotCSogc3JjL2FscGhhL2ZmaXRhcmdldC5oIChGRklfTEFTVF9BQkkpOiBUaWR5IGRlZmluaXRpb24uCi0JKiBzcmMvYWxwaGEvb3NmLlMgKGZmaV9jYWxsX29zZiwgZmZpX2Nsb3N1cmVfb3NmKTogTWFyayBoaWRkZW4uCi0JKGxvYWRfdGFibGUpOiBIYW5kbGUgMTI4LWJpdCBsb25nIGRvdWJsZS4KK2NvbW1pdCBjOGYxYmRlOGUyNTY2YzVhODc0NzRiNGQwOGFhOTM0ZDZkMjhlZTc1CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTYXQgTm92IDEyIDE2OjIxOjAyIDIwMTEgLTA1MDAKIAotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zsb2F0NC5jOiBBZGQgLW1pZWVlIGZvciBhbHBoYS4KKyAgICBSZW1vdmUganVuayBmaWxlCiAKLTIwMDctMDQtMDYgIFRvbSBUcm9tZXkgIDx0cm9tZXlAcmVkaGF0LmNvbT4KK2NvbW1pdCA2YTZlN2Y4NjJmM2NjNjc3ZTE5MTMxNTg3Y2FhNjE5ZTdmOWM3ZmZkCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTYXQgTm92IDEyIDE2OjIwOjQyIDIwMTEgLTA1MDAKIAotCVBSIGxpYmZmaS8zMTQ5MToKLQkqIFJFQURNRTogRml4ZWQgYnVnIGluIGV4YW1wbGUuCisgICAgRml4IGtmcmVlYnNkCiAKLTIwMDctMDQtMDMgIEpha3ViIEplbGluZWsgIDxqYWt1YkByZWRoYXQuY29tPgorY29tbWl0IGQ1MmZiZWQwNWNjYmRlZTllZDhiOWM5MTFjYmI0Zjg1YjBmZjBmMmEKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFNhdCBOb3YgMTIgMTY6MTM6NDEgMjAxMSAtMDUwMAogCi0JKiBzcmMvY2xvc3VyZXMuYzogSW5jbHVkZSBzeXMvc3RhdGZzLmguCi0JKF9HTlVfU09VUkNFKTogRGVmaW5lIG9uIExpbnV4LgotCShGRklfTU1BUF9FWEVDX1NFTElOVVgpOiBEZWZpbmUuCi0JKHNlbGludXhfZW5hYmxlZCk6IE5ldyB2YXJpYWJsZS4KLQkoc2VsaW51eF9lbmFibGVkX2NoZWNrKTogTmV3IGZ1bmN0aW9uLgotCShpc19zZWxpbnV4X2VuYWJsZWQpOiBEZWZpbmUuCi0JKGRsbW1hcCk6IFVzZSBpdC4KKyAgICBBZGQgbWlzc2luZyBDaGFuZ2VMb2cgZW50cnkKIAotMjAwNy0wMy0yNCAgVXJvcyBCaXpqYWsgIDx1Yml6amFrQGdtYWlsLmNvbT4KK2NvbW1pdCAzMjIwNTJjZTY1YzRmZGFjODViZWRjMjQ3MjZmZDBlMDA5NGJhNTIxCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTYXQgTm92IDEyIDE2OjExOjQ5IDIwMTEgLTA1MDAKIAotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9mbDIuYyAocmV0dXJuX2ZsKTogTWFyayBhcyBzdGF0aWMuCi0JVXNlICd2b2xhdGlsZSBmbG9hdCBzdW0nIHRvIGNyZWF0ZSBzdW0gb2YgZmxvYXRzIHRvIGF2b2lkIGZhbHNlCi0JbmVnYXRpdmUgZHVlIHRvIGV4Y2VzcyBwcmVjaXNpb24gb24gaXg4NiB0YXJnZXRzLgotCShtYWluKTogRGl0dG8uCisgICAgRml4IGFybSB3aW5jZSBhbGlnbm1lbnQgaXNzdWUKIAotMjAwNy0wMy0wOCAgQWxleGFuZHJlIE9saXZhICA8YW9saXZhQHJlZGhhdC5jb20+Citjb21taXQgYWYxOGRmMmJjMmY1MmRmODFlN2I1YzYxOWJkODZkYjg0ODlkYzg3MworQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU2F0IE5vdiAxMiAxNTo1MjowOCAyMDExIC0wNTAwCiAKLQkqIHNyYy9wb3dlcnBjL2ZmaS5jIChmbHVzaF9pY2FjaGUpOiBGaXggbGVmdC1vdmVyIGZyb20gcHJldmlvdXMKLQlwYXRjaC4KLQkoZmZpX3ByZXBfY2xvc3VyZV9sb2MpOiBSZW1vdmUgdW5uZWVkZWQgY2FzdHMuICBBZGQgbmVlZGVkIG9uZXMuCisgICAgUmVtb3ZlIHVzZSBvZiBwcGMgc3RyaW5nIGluc3RydWN0aW9ucwogCi0yMDA3LTAzLTA3ICBBbGV4YW5kcmUgT2xpdmEgIDxhb2xpdmFAcmVkaGF0LmNvbT4KK2NvbW1pdCAyMzZjOTM5MTMyMWY4M2FkNDBkYWYwM2Y0MGMzNWM5ZWJjMWRhNmIzCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTYXQgTm92IDEyIDA3OjM3OjQwIDIwMTEgLTA1MDAKIAotCSogaW5jbHVkZS9mZmkuaC5pbiAoZmZpX2Nsb3N1cmVfYWxsb2MsIGZmaV9jbG9zdXJlX2ZyZWUpOiBOZXcuCi0JKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKTogTmV3LgotCShmZmlfcHJlcF9yYXdfY2xvc3VyZV9sb2MpOiBOZXcuCi0JKGZmaV9wcmVwX2phdmFfcmF3X2Nsb3N1cmVfbG9jKTogTmV3LgotCSogc3JjL2Nsb3N1cmVzLmM6IE5ldyBmaWxlLgotCSogc3JjL2RsbWFsbG9jLmMgW0ZGSV9NTUFQX0VYRUNfV1JJVF0gKHN0cnVjdCBtYWxsb2Nfc2VnbWVudCk6Ci0JUmVwbGFjZSBzZmxhZ3Mgd2l0aCBleGVjX29mZnNldC4KLQlbRkZJX01NQVBfRVhFQ19XUklUXSAobW1hcF9leGVjX29mZnNldCwgYWRkX3NlZ21lbnRfZXhlY19vZmZzZXQsCi0Jc3ViX3NlZ21lbnRfZXhlY19vZmZzZXQpOiBOZXcgbWFjcm9zLgotCShnZXRfc2VnbWVudF9mbGFncywgc2V0X3NlZ21lbnRfZmxhZ3MsIGNoZWNrX3NlZ21lbnRfbWVyZ2UpOiBOZXcKLQltYWNyb3MuCi0JKGlzX21tYXBwZWRfc2VnbWVudCwgaXNfZXh0ZXJuX3NlZ21lbnQpOiBVc2UgZ2V0X3NlZ21lbnRfZmxhZ3MuCi0JKGFkZF9zZWdtZW50LCBzeXNfYWxsb2MsIGNyZWF0ZV9tc3BhY2UsIGNyZWF0ZV9tc3BhY2Vfd2l0aF9iYXNlLAotCWRlc3Ryb3lfbXNwYWNlKTogVXNlIG5ldyBtYWNyb3MuCi0JKHN5c19hbGxvYyk6IFNpbGVuY2Ugd2FybmluZy4KLQkqIE1ha2VmaWxlLmFtIChsaWJmZmlfbGFfU09VUkNFUyk6IEFkZCBzcmMvY2xvc3VyZXMuYy4KLQkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgotCSogc3JjL3ByZXBfY2lmIFtGRklfQ0xPU1VSRVNdIChmZmlfcHJlcF9jbG9zdXJlKTogSW1wbGVtZW50IGluCi0JdGVybXMgb2YgZmZpX3ByZXBfY2xvc3VyZV9sb2MuCi0JKiBzcmMvcmF3X2FwaS5jIChmZmlfcHJlcF9yYXdfY2xvc3VyZV9sb2MpOiBSZW5hbWVkIGFuZCBhZGp1c3RlZAotCWZyb20uLi4KLQkoZmZpX3ByZXBfcmF3X2Nsb3N1cmUpOiAuLi4gdGhpcy4gIFJlLWltcGxlbWVudCBpbiB0ZXJtcyBvZiB0aGUKLQlyZW5hbWVkIHZlcnNpb24uCi0JKiBzcmMvamF2YV9yYXdfYXBpIChmZmlfcHJlcF9qYXZhX3Jhd19jbG9zdXJlX2xvYyk6IFJlbmFtZWQgYW5kCi0JYWRqdXN0ZWQgZnJvbS4uLgotCShmZmlfcHJlcF9qYXZhX3Jhd19jbG9zdXJlKTogLi4uIHRoaXMuICBSZS1pbXBsZW1lbnQgaW4gdGVybXMgb2YKLQl0aGUgcmVuYW1lZCB2ZXJzaW9uLgotCSogc3JjL2FscGhhL2ZmaS5jIChmZmlfcHJlcF9jbG9zdXJlX2xvYyk6IFJlbmFtZWQgZnJvbQotCShmZmlfcHJlcF9jbG9zdXJlKTogLi4uIHRoaXMuCi0JKiBzcmMvcGEvZmZpLmM6IExpa2V3aXNlLgotCSogc3JjL2NyaXMvZmZpLmM6IExpa2V3aXNlLiAgQWRqdXN0LgotCSogc3JjL2Zydi9mZmkuYzogTGlrZXdpc2UuCi0JKiBzcmMvaWE2NC9mZmkuYzogTGlrZXdpc2UuCi0JKiBzcmMvbWlwcy9mZmkuYzogTGlrZXdpc2UuCi0JKiBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmM6IExpa2V3aXNlLgotCSogc3JjL3MzOTAvZmZpLmM6IExpa2V3aXNlLgotCSogc3JjL3NoL2ZmaS5jOiBMaWtld2lzZS4KLQkqIHNyYy9zaDY0L2ZmaS5jOiBMaWtld2lzZS4KLQkqIHNyYy9zcGFyYy9mZmkuYzogTGlrZXdpc2UuCi0JKiBzcmMveDg2L2ZmaTY0LmM6IExpa2V3aXNlLgotCSogc3JjL3g4Ni9mZmkuYzogTGlrZXdpc2UuCi0JKEZGSV9JTklUX1RSQU1QT0xJTkUpOiBBZGp1c3QuCi0JKGZmaV9wcmVwX3Jhd19jbG9zdXJlX2xvYyk6IFJlbmFtZWQgYW5kIGFkanVzdGVkIGZyb20uLi4KLQkoZmZpX3ByZXBfcmF3X2Nsb3N1cmUpOiAuLi4gdGhpcy4KLQkqIHNyYy9wb3dlcnBjL2ZmaS5jIChmZmlfcHJlcF9jbG9zdXJlX2xvYyk6IFJlbmFtZWQgZnJvbQotCShmZmlfcHJlcF9jbG9zdXJlKTogLi4uIHRoaXMuCi0JKGZsdXNoX2ljYWNoZSk6IEFkanVzdC4KKyAgICBGaXggZGFyd2luMTEgYnVpbGQgcHJvYmxlbQogCi0yMDA3LTAzLTA3ICBBbGV4YW5kcmUgT2xpdmEgIDxhb2xpdmFAcmVkaGF0LmNvbT4KK2NvbW1pdCBjNDExZjE0MGYzMDVlYmIwMGQzM2M5MmI3Y2IyNzQyYmNkMjQxYjZhCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTYXQgTm92IDEyIDA3OjMyOjM2IDIwMTEgLTA1MDAKIAotCSogc3JjL2RsbWFsbG9jLmM6IE5ldyBmaWxlLCBpbXBvcnRlZCB2ZXJzaW9uIDIuOC4zIG9mIERvdWcKLQlMZWEncyBtYWxsb2MuCisgICAgRml4IGF4X2VuYWJsZV9idWlsZGRpciBtYWNybyBvbiBCU0Qgc3lzdGVtcwogCi0yMDA3LTAzLTAxICBCcm9va3MgTW9zZXMgIDxicm9va3MubW9zZXNAY29kZXNvdXJjZXJ5LmNvbT4KK2NvbW1pdCAzZDU2MTA2YjA3NzM1YWJlZjZhZTlmMDMyZTk0ZjU2MGEwZWQyZjMwCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTYXQgTm92IDEyIDA3OjIwOjI0IDIwMTEgLTA1MDAKIAotCSogTWFrZWZpbGUuYW06IEFkZCBkdW1teSBpbnN0YWxsLXBkZiB0YXJnZXQuCi0JKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZQorICAgIFJlYmFzZQogCi0yMDA3LTAyLTEzICBBbmRyZWFzIEtyZWJiZWwgIDxrcmViYmVsMUBkZS5pYm0uY29tPgorY29tbWl0IDhjMDE5NTRjNTBiZjhlZjJlMDBhM2RiMTY2MDYwYTFiOGY4M2EyMGQKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFR1ZSBTZXAgNiAxNDoyNjozMiAyMDExIC0wNDAwCiAKLQkqIHNyYy9zMzkwL2ZmaS5jIChmZmlfcHJlcF9hcmdzLCBmZmlfcHJlcF9jaWZfbWFjaGRlcCwKLQlmZmlfY2xvc3VyZV9oZWxwZXJfU1lTVik6IEFkZCBsb25nIGRvdWJsZSBoYW5kbGluZy4KKyAgICBCdWlsZCBhc3NlbWJseSBmaWxlcyB3aXRoIGRlYnVnIGluZm8KIAotMjAwNy0wMi0wMiAgSmFrdWIgSmVsaW5layAgPGpha3ViQHJlZGhhdC5jb20+Citjb21taXQgZmVkNjQ2YTIwNzg5NjlmNGNlODljMjkxMDdmMWU3MmUwM2Y0YTk3NworQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgVHVlIFNlcCA2IDA5OjUwOjIwIDIwMTEgLTA0MDAKIAotCSogc3JjL3Bvd2VycGMvbGludXg2NC5TIChmZmlfY2FsbF9MSU5VWDY0KTogTW92ZSByZXN0b3JlIG9mIHIyCi0JaW1tZWRpYXRlbHkgYWZ0ZXIgYmN0cmwgaW5zdHJ1Y3Rpb24uCisgICAgUmVnZW5lcmF0ZSBjb25maWd1cnkgd2l0aCBtaXNzaW5nIG00IG1hY3JvcwogCi0yMDA3LTAxLTE4ICBBbGV4YW5kcmUgT2xpdmEgIDxhb2xpdmFAcmVkaGF0LmNvbT4KK2NvbW1pdCBkNzY0NDFjZjcxMjE2ZjhmMWU2MmU3ZWM4NTJhN2Y0ZTIxMzcxZWM4CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBXZWQgQXVnIDI0IDEwOjE0OjIzIDIwMTEgLTA0MDAKIAotCSogTWFrZWZpbGUuYW0gKGFsbC1yZWN1cnNpdmUsIGluc3RhbGwtcmVjdXJzaXZlLAotCW1vc3RseWNsZWFuLXJlY3Vyc2l2ZSwgY2xlYW4tcmVjdXJzaXZlLCBkaXN0Y2xlYW4tcmVjdXJzaXZlLAotCW1haW50YWluZXItY2xlYW4tcmVjdXJzaXZlKTogQWRkIG1pc3NpbmcgdGFyZ2V0cy4KLQkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgorICAgIFVwZGF0ZSBsaXN0IG9mIHN1cHBvcnRlZCBPcGVuQlNEIHN5c3RlbXMKIAotMjAwNi0xMi0xNCAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6Lm9yZz4KK2NvbW1pdCBlZTY2OTZmZGY0NzY4YmE2ZGQwMzdmYjZkZDk5NDM1YWZhMTM4MTZlCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBUdWUgQXVnIDIzIDEyOjMwOjI5IDIwMTEgLTA0MDAKIAotCSogY29uZmlndXJlLmFjOiBBZGQgVEFSR0VUIGZvciB4ODZfNjQtKi1kYXJ3aW4qLgotCSogTWFrZWZpbGUuYW0gKG5vZGlzdF9saWJmZmlfbGFfU09VUkNFUyk6IEFkZCBydWxlcyBmb3IgNjQtYml0IHNvdXJjZXMKLQlmb3IgWDg2X0RBUldJTi4KLQkqIHNyYy94ODYvZmZpdGFyZ2V0Lmg6IFNldCB0cmFtcG9saW5lIHNpemUgZm9yIHg4Nl82NC0qLWRhcndpbiouCi0JKiBzcmMveDg2L2RhcndpbjY0LlM6IE5ldyBmaWxlIGZvciB4ODZfNjQtKi1kYXJ3aW4qIHN1cHBvcnQuCi0JKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCi0JKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KLQkqIGluY2x1ZGUvTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCi0JKiB0ZXN0c3VpdGUvTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvdW53aW5kdGVzdF9mZmlfY2FsbC5jYzogTmV3IHRlc3QgY2FzZSBmb3IKLQlmZmlfY2FsbCBvbmx5LgorICAgIDMuMC4xMS1yYzEuIHNvbmFtZSBidW1wLgogCi0yMDA2LTEyLTEzICBBbmRyZWFzIFRvYmxlciA8YS50b2JsZXJAc2Nod2Vpei5vcmc+Citjb21taXQgYzYyNjVjMzZhOTFlYWI4MTc1ZDBlNzJkYjg0ZDgyMjU0MThmMjM3OQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgVHVlIEF1ZyAyMyAxMDozMTozMyAyMDExIC0wNDAwCiAKLQkqIGFjbG9jYWwubTQ6IFJlZ2VuZXJhdGUgd2l0aCBhY2xvY2FsIC1JIC4uIGFzIHdyaXR0ZW4gaW4gdGhlCi0JTWFrZWZpbGUuYW0uCisgICAgVmVyc2lvbiAzLjAuMTAKIAotMjAwNi0xMC0zMSAgR2VvZmZyZXkgS2VhdGluZyAgPGdlb2Zma0BhcHBsZS5jb20+Citjb21taXQgY2M1ZTQxYmYzMmQxOGExNGRiZGQ2NTNkNTJlYWNkYmRjOTM0YzM5MgorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgTW9uIEF1ZyAyMiAxNjozNDoyNCAyMDExIC0wNDAwCiAKLQkqIHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYyAoZGFyd2luX2FkanVzdF9hZ2dyZWdhdGVfc2l6ZXMpOiBOZXcuCi0JKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogQ2FsbCBkYXJ3aW5fYWRqdXN0X2FnZ3JlZ2F0ZV9zaXplcyBmb3IKLQlEYXJ3aW4uCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDQuYzogUmVtb3ZlIERhcndpbiBYRkFJTC4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Ni5jOiBSZW1vdmUgRGFyd2luIFhGQUlMLgorICAgIEZpeCB1c2Ugb2YgYXV0b2NvbmYgbWFjcm9zCiAKLTIwMDYtMTAtMTAgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+Ci0JICAgIFNhbmRybyBUb2xhaW5pICA8dG9sYWluaUBsaWJlcm8uaXQ+Citjb21taXQgMDQ5ZDgzODZmZjUyMzk5ZTY5YTUzMGI1NWI5ZmVlZGM4YTI1ODlkMgorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgTW9uIEF1ZyAyMiAxNDo1MDoxMCAyMDExIC0wNDAwCiAKLQkqIGNvbmZpZ3VyZS5hYyBbaSo4Ni0qLWRhcndpbipdOiBTZXQgWDg2X0RBUldJTiBzeW1ib2wgYW5kCi0JY29uZGl0aW9uYWwuCi0JKiBjb25maWd1cmU6IFJlZ2VuZXJhdGVkLgotCSogTWFrZWZpbGUuYW0gKG5vZGlzdF9saWJmZmlfbGFfU09VUkNFUykgW1g4Nl9EQVJXSU5dOiBOZXcgY2FzZS4KLQkoRVhUUkFfRElTVCk6IEFkZCBzcmMveDg2L2Rhcndpbi5TLgotCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGVkLgotCSogaW5jbHVkZS9NYWtlZmlsZS5pbjogUmVnZW5lcmF0ZWQuCi0JKiB0ZXN0c3VpdGUvTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGVkLgorICAgIE1hbnkgbmV3IHBhdGNoZXMKIAotCSogc3JjL3g4Ni9mZmkuYyAoZmZpX3ByZXBfY2lmX21hY2hkZXApIFtYODZfREFSV0lOXTogVHJlYXQgbGlrZQotCVg4Nl9XSU4zMiwgYW5kIGFkZGl0aW9uYWxseSBhbGlnbiBzdGFjayB0byAxNiBieXRlcy4KLQkqIHNyYy94ODYvZGFyd2luLlM6IE5ldywgYmFzZWQgb24gc3lzdi5TLgotCSogc3JjL3ByZXBfY2lmLmMgKGZmaV9wcmVwX2NpZikgW1g4Nl9EQVJXSU5dOiBBbGlnbiA+IDgtYnl0ZSBzdHJ1Y3RzLgorY29tbWl0IDNiN2VmYTRlNzRmMGRjZWJmNzBiNDQ3MzkxOTg3YWVkZDM0NzMzMDYKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIE1vbiBBdWcgMTUgMTM6MjU6MTMgMjAxMSAtMDQwMAogCi0yMDA2LTA5LTEyICBEYXZpZCBEYW5leSAgPGRkYW5leUBhdnRyZXguY29tPgorICAgIFJldmVydCByZW1vdmUtZGVidWctY29kZSBwYXRjaCB0ZW1wb3JhcmlseSAoZm9yIEFSTSBGZWRvcmEgcmVsZWFzZSkKIAotCVBSIGxpYmZmaS8yMzkzNQotCSogaW5jbHVkZS9NYWtlZmlsZS5hbTogSW5zdGFsbCBib3RoIGZmaS5oIGFuZCBmZml0YXJnZXQuaCBpbgotCSQobGliZGlyKS9nY2MvJCh0YXJnZXRfYWxpYXMpLyQoZ2NjX3ZlcnNpb24pL2luY2x1ZGUuCi0JKiBhY2xvY2FsLm00OiBSZWdlbmVyYXRlZCBmb3IgYXV0b21ha2UgMS45LjYuCi0JKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZWQuCi0JKiBpbmNsdWRlL01ha2VmaWxlLmluOiBSZWdlbmVyYXRlZC4KLQkqIHRlc3RzdWl0ZS9NYWtlZmlsZS5pbjogUmVnZW5lcmF0ZWQuCitjb21taXQgZDk5MmFjNTRhMmE5ZTdlMDY0ZmZlYmNiOTFlMDVlN2NiODYxODVjNworQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBnbWFjaGluZS4obm9uZSk+CitEYXRlOiAgIEZyaSBKdWwgMjkgMTc6MzI6NTMgMjAxMSAtMDQwMAogCi0yMDA2LTA4LTE3ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisgICAgUmVmcmVzaCBmcm9tIEdDQwogCi0JKiBpbmNsdWRlL2ZmaV9jb21tb24uaCAoc3RydWN0KTogUmV2ZXJ0IGFjY2lkZW50YWwgY29tbWl0LgorY29tbWl0IDJkM2ZiMzY0MjBlMDkzMDQyMjBlZTZjMDY1MmJhZTVlY2NkYjk2NWQKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFdlZCBNYXIgMzAgMTY6NTQ6NDIgMjAxMSAtMDQwMAogCi0yMDA2LTA4LTE1ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisgICAgRml4IGRhcndpbiBFSAogCi0JKiBpbmNsdWRlL2ZmaV9jb21tb24uaDogUmVtb3ZlIGxpbnQgZGlyZWN0aXZlcy4KLQkqIGluY2x1ZGUvZmZpLmguaW46IExpa2V3aXNlLgorY29tbWl0IDMwZmYyOGUxZDhjZDllZDUzMTlmMWZiZTljN2NjY2FjYzgxNjFmYjMKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIE1vbiBGZWIgMjggMTU6MzY6MjMgMjAxMSAtMDUwMAogCi0yMDA2LTA3LTI1ICBUb3JzdGVuIFNjaG9lbmZlbGQgIDxrYWZmZWV0aXNjaEBnbXguZGU+CisgICAgRml4IHBlcm1pc3Npb25zCiAKLQkqIGluY2x1ZGUvZmZpLmguaW4gKGZmaV90eXBlX3Vsb25nLCBmZmlfdHlwZV9zbG9uZyk6IERlZmluZSBjb3JyZWN0bHkKLQlmb3IgMzItYml0IGFyY2hpdGVjdHVyZXMuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX3VsLmM6IE5ldyB0ZXN0IGNhc2UuCitjb21taXQgMDlmOGYzMTBmNGY1M2EyNDI4OTY4MmQzZDI4ZjQzOTlkN2JhZmMzYgorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgTW9uIEZlYiAyOCAxNTozNjowNyAyMDExIC0wNTAwCiAKLTIwMDYtMDctMTkgIERhdmlkIERhbmV5ICA8ZGRhbmV5QGF2dHJleC5jb20+CisgICAgTW9yZSBBSVggZml4ZXMuIHJjOS4KIAotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm42LmM6IFJlbW92ZSB4ZmFpbCBmb3IgbWlwcywKLQl4ZmFpbCByZW1haW5zIGZvciBtaXBzNjQuCitjb21taXQgNTNkN2IxNjU2NDJjMjIwYWE1MTY2YmEzNTBiNDkwODAyZjM1OWI1NAorTWVyZ2U6IDE4ZGQ4NWQgMzAwMGRjMgorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgTW9uIEZlYiAyOCAxNToyMzozMSAyMDExIC0wNTAwCiAKLTIwMDYtMDUtMjMgIENhcmxvcyBPJ0RvbmVsbCAgPGNhcmxvc0Bjb2Rlc291cmNlcnkuY29tPgorICAgIE1lcmdlIGJyYW5jaCAnbWFzdGVyJyBvZiBodHRwczovL2dpdGh1Yi5jb20vbGFuZG9uZi9saWJmZmktaW9zCiAKLQkqIE1ha2VmaWxlLmFtOiBBZGQgaW5zdGFsbC1odG1sIHRhcmdldC4gQWRkIGluc3RhbGwtaHRtbCB0byAuUEhPTlkKLQkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgotCSogYWNsb2NhbC5tNDogUmVnZW5lcmF0ZS4KLQkqIGluY2x1ZGUvTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCi0JKiB0ZXN0c3VpdGUvTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCitjb21taXQgMThkZDg1ZDZjYjlmM2YzZWVhMmEzYjcwZWI0ZTE1MDA0NTkwNWM1NQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgRnJpIEZlYiAyNSAxNjoyMzowNCAyMDExIC0wNTAwCiAKLTIwMDYtMDUtMTggIEpvaG4gRGF2aWQgQW5nbGluICA8ZGF2ZS5hbmdsaW5AbnJjLWNucmMuZ2MuY2E+CisgICAgcmM4LiBmaXggbGFzdCBwYXRjaC4KIAotCSogcGEvZmZpLmMgKGZmaV9wcmVwX2FyZ3NfcGEzMik6IExvYWQgZmxvYXRpbmcgcG9pbnQgYXJndW1lbnRzIGZyb20KLQlzdGFjayBzbG90LgorY29tbWl0IDc0ZWU2ZWE4YjQyZTYwZDQ0YTNhZTg5MzhiMWU0MmEzOGMxZTY2YjQKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIEZyaSBGZWIgMjUgMTU6NTI6MTQgMjAxMSAtMDUwMAogCi0yMDA2LTA0LTIyICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisgICAgcmM3LiAgTW9yZSBBSVggZml4ZXMuCiAKLQkqIFJFQURNRTogUmVtb3ZlIG5vdGljZSBhYm91dCAnQ3JhenkgQ29tbWVudHMnLgotCSogc3JjL2RlYnVnLmM6IFJlbW92ZSBsaW50IGRpcmVjdGl2ZXMuIENsZWFudXAgd2hpdGUgc3BhY2VzLgotCSogc3JjL2phdmFfcmF3X2FwaS5jOiBMaWtld2lzZS4KLQkqIHNyYy9wcmVwX2NpZi5jOiBMaWtld2lzZS4KLQkqIHNyYy9yYXdfYXBpLmM6IExpa2V3aXNlLgotCSogc3JjL2ZmaXRlc3QuYzogRGVsZXRlLiBObyBsb25nZXIgbmVlZGVkLCBhbGwgdGVzdCBjYXNlcyBtaWdyYXRlZAotCXRvIHRoZSB0ZXN0c3VpdGUuCi0JKiBzcmMvYXJtL2ZmaS5jOiBSZW1vdmUgbGludCBkaXJlY3RpdmVzLgotCSogc3JjL20zMnIvZmZpLmM6IExpa2V3aXNlLgotCSogc3JjL3BhL2ZmaS5jOiBMaWtld2lzZS4KLQkqIHNyYy9wb3dlcnBjL2ZmaS5jOiBMaWtld2lzZS4KLQkqIHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYzogTGlrZXdpc2UuCi0JKiBzcmMvc2gvZmZpLmM6IExpa2V3aXNlLgotCSogc3JjL3NoNjQvZmZpLmM6IExpa2V3aXNlLgotCSogc3JjL3g4Ni9mZmkuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmxvYXQyLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3Byb21vdGlvbi5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3QxLmM6IExpa2V3aXNlLgorY29tbWl0IDI1NDE2NzlkYmQzZGIwMDE0ODkwZjQyMTkyZGJmODAwOGFiOTIzZmEKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIEZyaSBGZWIgMjUgMTU6MDk6MTMgMjAxMSAtMDUwMAogCi0yMDA2LTA0LTEzICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisgICAgRml4IHBwYzMyIGJ1ZwogCi0JKiBzcmMvcGEvaHB1eDMyLlM6IENvcnJlY3QgdW53aW5kIG9mZnNldCBjYWxjdWxhdGlvbiBmb3IKLQlmZmlfY2xvc3VyZV9wYTMyLgotCSogc3JjL3BhL2xpbnV4LlM6IExpa2V3aXNlLgorY29tbWl0IGNiYjA2MmNjMzVjNTE4MDA0ZjFhYjQ1Yzg0N2Y4ZWM0ZjY2MDY5YWQKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFRodSBGZWIgMTcgMjA6Mzk6MjEgMjAxMSAtMDUwMAogCi0yMDA2LTA0LTEyICBKYW1lcyBFIFdpbHNvbiAgPHdpbHNvbkBzcGVjaWZpeC5jb20+CisgICAgQW5vdGhlciBub24tR0NDIGNvbmZpZ3VyeSBmaXgKIAotCVBSIGxpYmdjai8yNjQ4MwotCSogc3JjL2lhNjQvZmZpLmMgKHN0Zl9zcGlsbCwgbGRmX2ZpbGwpOiBSZXdyaXRlIGFzIG1hY3Jvcy4KLQkoaGZhX3R5cGVfbG9hZCk6IENhbGwgc3RmX3NwaWxsLgotCShoZmFfdHlwZV9zdG9yZSk6IENhbGwgbGRmX2ZpbGwuCi0JKGZmaV9jYWxsKTogQWRqdXN0IGNhbGxzIHRvIGFib3ZlIHJvdXRpbmVzLiAgQWRkIGxvY2FsIHRlbXBzIGZvcgotCW1hY3JvIHJlc3VsdC4KK2NvbW1pdCA4Y2Y4ODc4NDI1ZTk5NzE4NjZmYTZiMjdhM2U0OTE0NzI5YWQzOTYwCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBUdWUgRmViIDE1IDE1OjE5OjQ5IDIwMTEgLTA1MDAKIAotMjAwNi0wNC0xMCAgTWF0dGhpYXMgS2xvc2UgIDxkb2tvQGRlYmlhbi5vcmc+CisgICAgRml4IGF4X2NjX21heG9wdC5tNAogCi0JKiB0ZXN0c3VpdGUvbGliL2xpYmZmaS1kZy5leHAgKGxpYmZmaS1pbml0KTogUmVjb2duaXplIG11bHRpbGliCi0JZGlyZWN0b3J5IG5hbWVzIGNvbnRhaW5pbmcgdW5kZXJzY29yZXMuCitjb21taXQgMjRiNzIwNzBjMDkzN2Y5MDAwNzQ0Yzc3YTYzNmYwN2UwNDc4NmI2YQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgTW9uIEZlYiAxNCAxNTozMDo1NyAyMDExIC0wNTAwCiAKLTIwMDYtMDQtMDcgIEphbWVzIEUgV2lsc29uICA8d2lsc29uQHNwZWNpZml4LmNvbT4KKyAgICBGaXggd2FybmluZyBhbmQgbXN2Y2MgcGF0Y2hlcwogCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmxvYXQ0LmM6IE5ldyB0ZXN0Y2FzZS4KK2NvbW1pdCBkNzJjNDllNTU2YThjNTE2ZTk3ZjY3MjJkMWJlMmYxMjA5YzIxMjA3CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTdW4gRmViIDEzIDExOjQxOjA1IDIwMTEgLTA1MDAKIAotMjAwNi0wNC0wNSAgSm9obiBEYXZpZCBBbmdsaW4gIDxkYXZlLmFuZ2xpbkBucmMtY25yYy5nYy5jYT4KLQkgICAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorICAgIEFkZCBtaXNzaW5nIG1zdmNjLnNoCiAKLQkqIE1ha2VmaWxlLmFtOiBBZGQgUEFfSFBVWCBwb3J0LgotCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCi0JKiBpbmNsdWRlL01ha2VmaWxlLmluOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9NYWtlZmlsZS5pbjogTGlrZXdpc2UuCi0JKiBjb25maWd1cmUuYWM6IEFkZCBQQV9IUFVYIHJ1bGVzLgotCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgotCSogc3JjL3BhL2ZmaXRhcmdldC5oOiBSZW5hbWUgbGludXggdGFyZ2V0IHRvIFBBX0xJTlVYLgotCUFkZCBQQV9IUFVYIGFuZCBQQTY0X0hQVVguCi0JUmVuYW1lIEZGSV9MSU5VWCBBQkkgdG8gRkZJX1BBMzIgQUJJLgotCShGRklfVFJBTVBPTElORV9TSVpFKTogRGVmaW5lIGZvciAzMi1iaXQgSFAtVVggdGFyZ2V0cy4KLQkoRkZJX1RZUEVfU01BTExfU1RSVUNUMik6IERlZmluZS4KLQkoRkZJX1RZUEVfU01BTExfU1RSVUNUNCk6IExpa2V3aXNlLgotCShGRklfVFlQRV9TTUFMTF9TVFJVQ1Q4KTogTGlrZXdpc2UuCi0JKEZGSV9UWVBFX1NNQUxMX1NUUlVDVDMpOiBSZWRlZmluZS4KLQkoRkZJX1RZUEVfU01BTExfU1RSVUNUNSk6IExpa2V3aXNlLgotCShGRklfVFlQRV9TTUFMTF9TVFJVQ1Q2KTogTGlrZXdpc2UuCi0JKEZGSV9UWVBFX1NNQUxMX1NUUlVDVDcpOiBMaWtld2lzZS4KLQkqIHNyYy9wYS9mZmkuYyAoUk9VTkRfRE9XTik6IERlbGV0ZS4KLQkoZmxkdywgZnN0dywgZmxkZCwgZnN0ZCk6IFVzZSAnX19hc21fXycuCi0JKGZmaV9zdHJ1Y3RfdHlwZSk6IEFkZCBzdXBwb3J0IGZvciBGRklfVFlQRV9TTUFMTF9TVFJVQ1QyLAotCUZGSV9UWVBFX1NNQUxMX1NUUlVDVDQgYW5kIEZGSV9UWVBFX1NNQUxMX1NUUlVDVDguCi0JKGZmaV9wcmVwX2FyZ3NfTElOVVgpOiBSZW5hbWUgdG8gZmZpX3ByZXBfYXJnc19wYTMyLiBVcGRhdGUgY29tbWVudC4KLQlTaW1wbGlmeSBpbmNyZW1lbnRpbmcgb2Ygc3RhY2sgc2xvdCB2YXJpYWJsZS4gQ2hhbmdlIHR5cGUgb2YgbG9jYWwKLQknbicgdG8gdW5zaWduZWQgaW50LgotCShmZmlfc2l6ZV9zdGFja19MSU5VWCk6IFJlbmFtZSB0byBmZmlfc2l6ZV9zdGFja19wYTMyLiBIYW5kbGUgbG9uZwotCWRvdWJsZSBvbiBQQV9IUFVYLgotCShmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IExpa2V3aXNlLgotCShmZmlfY2FsbCk6IExpa2V3aXNlLgotCShmZmlfY2xvc3VyZV9pbm5lcl9MSU5VWCk6IFJlbmFtZSB0byBmZmlfY2xvc3VyZV9pbm5lcl9wYTMyLiBDaGFuZ2UKLQlyZXR1cm4gdHlwZSB0byBmZmlfc3RhdHVzLiBTaW1wbGlmeSBpbmNyZW1lbnRpbmcgb2Ygc3RhY2sgc2xvdAotCXZhcmlhYmxlLiBPbmx5IGNvcHkgZmxvYXRpbmcgcG9pbnQgYXJndW1lbnQgcmVnaXN0ZXJzIHdoZW4gUEFfTElOVVgKLQlpcyB0cnVlLiBSZWZvcm1hdCBkZWJ1ZyBzdGF0ZW1lbnQuCi0JQWRkIHN1cHBvcnQgZm9yIEZGSV9UWVBFX1NNQUxMX1NUUlVDVDIsIEZGSV9UWVBFX1NNQUxMX1NUUlVDVDQgYW5kCi0JRkZJX1RZUEVfU01BTExfU1RSVUNUOC4KLQkoZmZpX2Nsb3N1cmVfTElOVVgpOiBSZW5hbWUgdG8gZmZpX2Nsb3N1cmVfcGEzMi4gQWRkICdleHRlcm4nIHRvCi0JZGVjbGFyYXRpb24uCi0JKGZmaV9wcmVwX2Nsb3N1cmUpOiBNYWtlIGxpbnV4IHRyYW1wb2xpbmUgY29uZGl0aW9uYWwgb24gUEFfTElOVVguCi0JQWRkIG5vcHMgdG8gY2FjaGUgZmx1c2guICBBZGQgdHJhbXBvbGluZSBmb3IgUEFfSFBVWC4KLQkqIHNyYy9wYS9ocHV4MzIuUzogTmV3IGZpbGUuCi0JKiBzcmMvcGEvbGludXguUyAoZmZpX2NhbGxfTElOVVgpOiBSZW5hbWUgdG8gZmZpX2NhbGxfcGEzMi4gUmVuYW1lCi0JZmZpX3ByZXBfYXJnc19MSU5VWCB0byBmZmlfcHJlcF9hcmdzX3BhMzIuCi0JTG9jYWxpemUgbGFiZWxzLiBBZGQgc3VwcG9ydCBmb3IgMiwgNCBhbmQgOC1ieXRlIHNtYWxsIHN0cnVjdHMuIEhhbmRsZQotCXVuYWxpZ25lZCBkZXN0aW5hdGlvbnMgaW4gMywgNSwgNiBhbmQgNy1ieXRlIHNtYWxsIHN0cnVjdHMuIE9yZGVyCi0JYXJndW1lbnQgdHlwZSBjaGVja3Mgc28gdGhhdCBjb21tb24gYXJndW1lbnQgdHlwZXMgYXBwZWFyIGZpcnN0LgotCShmZmlfY2xvc3VyZV9MSU5VWCk6IFJlbmFtZSB0byBmZmlfY2xvc3VyZV9wYTMyLiBSZW5hbWUKLQlmZmlfY2xvc3VyZV9pbm5lcl9MSU5VWCB0byBmZmlfY2xvc3VyZV9pbm5lcl9wYTMyLgorY29tbWl0IDMwMDBkYzIzN2Y2MDE3YTc0NDVkODQwNDA5N2E0ZjQ2YjczZmRkMjkKK01lcmdlOiA1NWU0YTVhIDFmYmY5ZGMKK0F1dGhvcjogTGFuZG9uIEZ1bGxlciA8bGFuZG9uZkBiaWtlbW9ua2V5Lm9yZz4KK0RhdGU6ICAgU3VuIEZlYiAxMyAwODo1NTo1MyAyMDExIC0wNTAwCiAKLTIwMDYtMDMtMjQgIEFsYW4gTW9kcmEgIDxhbW9kcmFAYmlncG9uZC5uZXQuYXU+CisgICAgTWVyZ2UgcmVtb3RlIGJyYW5jaCAndXBzdHJlYW0vbWFzdGVyJwogCi0JKiBzcmMvcG93ZXJwYy9mZml0YXJnZXQuaCAoZW51bSBmZmlfYWJpKTogQWRkIEZGSV9MSU5VWC4gIERlZmF1bHQKLQlmb3IgMzItYml0IHVzaW5nIElCTSBleHRlbmRlZCBkb3VibGUgZm9ybWF0LiAgRml4IEZGSV9MQVNUX0FCSS4KLQkqIHNyYy9wb3dlcnBjL2ZmaS5jIChmZmlfcHJlcF9hcmdzX1NZU1YpOiBIYW5kbGUgbGludXggdmFyaWFudCBvZgotCUZGSV9UWVBFX0xPTkdET1VCTEUuCi0JKGZmaV9wcmVwX2FyZ3M2NCk6IEFzc2VydCB1c2luZyBJQk0gZXh0ZW5kZWQgZG91YmxlLgotCShmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IERvbid0IG11bmdlIEZGSV9UWVBFX0xPTkdET1VCTEUgdHlwZS4KLQlIYW5kbGUgRkZJX0xJTlVYIEZGSV9UWVBFX0xPTkdET1VCTEUgcmV0dXJuIGFuZCBhcmdzLgotCShmZmlfY2FsbCk6IEhhbmRsZSBGRklfTElOVVguCi0JKGZmaV9jbG9zdXJlX2hlbHBlcl9TWVNWKTogTm9uIEZGSV9MSU5VWCBsb25nIGRvdWJsZSByZXR1cm4gbmVlZHMKLQlncHIzIHJldHVybiBwb2ludGVyIGFzIGZvciBzdHJ1Y3QgcmV0dXJuLiAgSGFuZGxlIEZGSV9MSU5VWAotCUZGSV9UWVBFX0xPTkdET1VCTEUgcmV0dXJuIGFuZCBhcmdzLiAgRG9uJ3QgaW5jcmVtZW50ICJuZiIKLQl1bm5lY2Vzc2FyaWx5LgotCSogc3JjL3Bvd2VycGMvcHBjX2Nsb3N1cmUuUyAoZmZpX2Nsb3N1cmVfU1lTVik6IExvYWQgYm90aCBmMSBhbmQgZjIKLQlmb3IgRkZJX1RZUEVfTE9OR0RPVUJMRS4gIE1vdmUgZXBpbG9ndWUgaW5zbnMgaW50byBjYXNlIHRhYmxlLgotCURvbid0IHVzZSByNiBhcyBwb2ludGVyIHRvIHJlc3VsdHMsIGluc3RlYWQgdXNlIHNwIG9mZnNldC4gIERvbid0Ci0JbWFrZSBhIHNwZWNpYWwgY2FsbCB0byBsb2FkIGxyIHdpdGggY2FzZSB0YWJsZSBhZGRyZXNzLCBpbnN0ZWFkCi0JdXNlIG9mZnNldCBmcm9tIHByZXZpb3VzIGNhbGwuCi0JKiBzcmMvcG93ZXJwYy9zeXN2LlMgKGZmaV9jYWxsX1NZU1YpOiBTYXZlIGxvbmcgZG91YmxlIHJldHVybi4KLQkqIHNyYy9wb3dlcnBjL2xpbnV4NjQuUyAoZmZpX2NhbGxfTElOVVg2NCk6IFNpbXBsaWZ5IGxvbmcgZG91YmxlCi0JcmV0dXJuLgorY29tbWl0IDFmYmY5ZGM0NGZlZWE1NjRlODRhZDc0MDZkMTdjNWQ1OTA2Y2UwZTAKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFN1biBGZWIgMTMgMDg6MDY6MzkgMjAxMSAtMDUwMAogCi0yMDA2LTAzLTE1ICBLYXogS29qaW1hICA8a2tvamltYUBnY2MuZ251Lm9yZz4KKyAgICBGaXggYmFkX2FiaSB0ZXN0LiByYzUuCiAKLQkqIHNyYy9zaDY0L2ZmaS5jIChmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IEhhbmRsZSBmbG9hdCBhcmd1bWVudHMKLQlwYXNzZWQgd2l0aCBGUCByZWdpc3RlcnMgY29ycmVjdGx5LgotCShmZmlfY2xvc3VyZV9oZWxwZXJfU1lTVik6IExpa2V3aXNlLgotCSogc3JjL3NoNjQvc3lzdi5TOiBMaWtld2lzZS4KK2NvbW1pdCA5MGFmMTVlZjVjMTYxNGI3NjM3MGM0ZDEzOTU0NTg2ZmFiZjllOGUzCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTYXQgRmViIDEyIDEyOjI5OjM2IDIwMTEgLTA1MDAKIAotMjAwNi0wMy0wMSAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorICAgIGlPUyBmaXhlcwogCi0JKiB0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvdW53aW5kdGVzdC5jYyAoY2xvc3VyZV90ZXN0X2ZuKTogTWFyayBjaWYsCi0JYXJncyBhbmQgdXNlcmRhdGEgdW51c2VkLgotCShjbG9zdXJlX3Rlc3RfZm4xKTogTWFyayBjaWYgYW5kIHVzZXJkYXRhIHVudXNlZC4KLQkobWFpbik6IFJlbW92ZSB1bnVzZWQgcmVzLgorY29tbWl0IDU1ZTRhNWFhMTU2ODU1OGEwNGFhNDBmMTZmYzAyMmU0NTlhZjUzZTMKK0F1dGhvcjogTGFuZG9uIEZ1bGxlciA8bGFuZG9uZkBiaWtlbW9ua2V5Lm9yZz4KK0RhdGU6ICAgU2F0IEZlYiAxMiAxMjoxMzo0NiAyMDExIC0wNTAwCiAKLTIwMDYtMDItMjggIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKyAgICBBZGQgc3VwcG9ydCBmb3IgYnVpbGRpbmcgYSBmdWxsIGFybXY2L2FybXY3L2kzODYgdW5pdmVyc2FsIGlPUyBsaWJyYXJ5CiAKLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jYWxsLmV4cDogQWRqdXN0IEZTRiBhZGRyZXNzLiBBZGQgdGVzdCBydW5zIGZvcgotCS1PMiwgLU8zLCAtT3MgYW5kIHRoZSB3YXJuaW5nIGZsYWdzIC1XIC1XYWxsLgotCSogdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL3NwZWNpYWwuZXhwOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mZml0ZXN0Lmg6IEFkZCBhbiBfX1VOVVNFRF9fIG1hY3JvIHRvIG1hcmsKLQl1bnVzZWQgcGFyYW1ldGVyIHVudXNlZCBmb3IgZ2NjIG9yIGVsc2UgZG8gbm90aGluZy4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC9mZml0ZXN0Y3h4Lmg6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xMmJ5dGUuYyAoY2xzX3N0cnVjdF8xMmJ5dGVfZ24pOiBNYXJrIGNpZgotCWFuZCB1c2VyZGF0YSB1bnVzZWQuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE2Ynl0ZS5jIChjbHNfc3RydWN0XzE2Ynl0ZV9nbik6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xOGJ5dGUuYyAoY2xzX3N0cnVjdF8xOGJ5dGVfZ24pOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTlieXRlLmMgKGNsc19zdHJ1Y3RfMTlieXRlX2duKTogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzFfMWJ5dGUuYyAoY2xzX3N0cnVjdF8xXzFieXRlX2duKTogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzIwYnl0ZS5jIChjbHNfc3RydWN0XzIwYnl0ZV9nbik6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yMGJ5dGUxLmMgKGNsc19zdHJ1Y3RfMjBieXRlX2duKTogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzI0Ynl0ZS5jIChjbHNfc3RydWN0XzI0Ynl0ZV9nbik6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yYnl0ZS5jIChjbHNfc3RydWN0XzJieXRlX2duKTogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzNfMWJ5dGUuYyAoY2xzX3N0cnVjdF8zXzFieXRlX2duKTogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzNieXRlMS5jIChjbHNfc3RydWN0XzNieXRlX2duKTogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzNieXRlMi5jIChjbHNfc3RydWN0XzNieXRlX2duMSk6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc180XzFieXRlLmMgKGNsc19zdHJ1Y3RfNF8xYnl0ZV9nbik6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc180Ynl0ZS5jIChjbHNfc3RydWN0XzRieXRlX2duKTogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzVfMV9ieXRlLmMgKGNsc19zdHJ1Y3RfNWJ5dGVfZ24pOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNWJ5dGUuYyAoY2xzX3N0cnVjdF81Ynl0ZV9nbik6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc182NGJ5dGUuYyAoY2xzX3N0cnVjdF82NGJ5dGVfZ24pOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNl8xX2J5dGUuYyAoY2xzX3N0cnVjdF82Ynl0ZV9nbik6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc182Ynl0ZS5jIChjbHNfc3RydWN0XzZieXRlX2duKTogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzdfMV9ieXRlLmMgKGNsc19zdHJ1Y3RfN2J5dGVfZ24pOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfN2J5dGUuYyAoY2xzX3N0cnVjdF83Ynl0ZV9nbik6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc184Ynl0ZS5jIChjbHNfc3RydWN0XzhieXRlX2duKTogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzlieXRlMS5jIChjbHNfc3RydWN0XzlieXRlX2duKTogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzlieXRlMi5jIChjbHNfc3RydWN0XzlieXRlX2duKTogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2RvdWJsZS5jIChjbHNfc3RydWN0X2FsaWduX2duKToKLQlMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fZmxvYXQuYyAoY2xzX3N0cnVjdF9hbGlnbl9nbik6Ci0JTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGUuYyAoY2xzX3N0cnVjdF9hbGlnbl9nbik6Ci0JTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3BvaW50ZXIuYyAoY2xzX3N0cnVjdF9hbGlnbl9mbik6IENhc3QKLQl2b2lkKiB0byBhdm9pZCBjb21waWxlciB3YXJuaW5nLgotCShtYWluKTogTGlrZXdpc2UuCi0JKGNsc19zdHJ1Y3RfYWxpZ25fZ24pOiBNYXJrIGNpZiBhbmQgdXNlcmRhdGEgdW51c2VkLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50MTYuYyAoY2xzX3N0cnVjdF9hbGlnbl9nbik6Ci0JTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQzMi5jIChjbHNfc3RydWN0X2FsaWduX2duKToKLQlMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDY0LmMgKGNsc19zdHJ1Y3RfYWxpZ25fZ24pOgotCUxpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50MTYuYyAoY2xzX3N0cnVjdF9hbGlnbl9nbik6Ci0JTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3VpbnQzMi5jIChjbHNfc3RydWN0X2FsaWduX2duKToKLQlMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZG91YmxlLmMgKGNsc19yZXRfZG91YmxlX2ZuKTogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2Zsb2F0LmMgKGNsc19yZXRfZmxvYXRfZm4pOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfc2NoYXIuYyAodGVzdF9mdW5jX2duKTogTWFyayBjaWYgYW5kCi0JZGF0YSB1bnVzZWQuCi0JKG1haW4pOiBDYXN0IHJlc19jYWxsIHRvIHNpbGVuY2UgZ2NjLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV9zc2hvcnQuYyAodGVzdF9mdW5jX2duKTogTWFyayBjaWYgYW5kCi0JZGF0YSB1bnVzZWQuCi0JKG1haW4pOiBDYXN0IHJlc19jYWxsIHRvIHNpbGVuY2UgZ2NjLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV9zc2hvcnRjaGFyLmMgKHRlc3RfZnVuY19nbik6IE1hcmsgY2lmCi0JYW5kIGRhdGEgdW51c2VkLgotCShtYWluKTogQ2FzdCByZXNfY2FsbCB0byBzaWxlbmNlIGdjYy4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfdWNoYXIuYyAodGVzdF9mdW5jX2duKTogTWFyayBjaWYgYW5kCi0JZGF0YSB1bnVzZWQuCi0JKG1haW4pOiBDYXN0IHJlc19jYWxsIHRvIHNpbGVuY2UgZ2NjLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV91c2hvcnQuYyAodGVzdF9mdW5jX2duKTogTWFyayBjaWYgYW5kCi0JZGF0YSB1bnVzZWQuCi0JKG1haW4pOiBDYXN0IHJlc19jYWxsIHRvIHNpbGVuY2UgZ2NjLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV91c2hvcnRjaGFyLmMgKHRlc3RfZnVuY19nbik6IE1hcmsgY2lmCi0JYW5kIGRhdGEgdW51c2VkLgotCShtYWluKTogQ2FzdCByZXNfY2FsbCB0byBzaWxlbmNlIGdjYy4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc2NoYXIuYyAoY2xzX3JldF9zY2hhcl9mbik6IE1hcmsgY2lmIGFuZAotCXVzZXJkYXRhIHVudXNlZC4KLQkoY2xzX3JldF9zY2hhcl9mbik6IENhc3QgcHJpbnRmIHBhcmFtZXRlciB0byBzaWxlbmNlIGdjYy4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc2ludC5jIChjbHNfcmV0X3NpbnRfZm4pOiBNYXJrIGNpZiBhbmQKLQl1c2VyZGF0YSB1bnVzZWQuCi0JKGNsc19yZXRfc2ludF9mbik6IENhc3QgcHJpbnRmIHBhcmFtZXRlciB0byBzaWxlbmNlIGdjYy4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc3Nob3J0LmMgKGNsc19yZXRfc3Nob3J0X2ZuKTogTWFyayBjaWYgYW5kCi0JdXNlcmRhdGEgdW51c2VkLgotCShjbHNfcmV0X3NzaG9ydF9mbik6IENhc3QgcHJpbnRmIHBhcmFtZXRlciB0byBzaWxlbmNlIGdjYy4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWNoYXIuYyAoY2xzX3JldF91Y2hhcl9mbik6ICBNYXJrIGNpZiBhbmQKLQl1c2VyZGF0YSB1bnVzZWQuCi0JKGNsc19yZXRfdWNoYXJfZm4pOiBDYXN0IHByaW50ZiBwYXJhbWV0ZXIgdG8gc2lsZW5jZSBnY2MuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VpbnQuYyAoY2xzX3JldF91aW50X2ZuKTogTWFyayBjaWYgYW5kCi0JdXNlcmRhdGEgdW51c2VkLgotCShjbHNfcmV0X3VpbnRfZm4pOiBDYXN0IHByaW50ZiBwYXJhbWV0ZXIgdG8gc2lsZW5jZSBnY2MuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3Vsb25nbG9uZy5jIChjbHNfcmV0X3Vsb25nbG9uZ19mbik6IE1hcmsgY2lmCi0JYW5kIHVzZXJkYXRhIHVudXNlZC4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdXNob3J0LmMgKGNsc19yZXRfdXNob3J0X2ZuKTogTWFyayBjaWYgYW5kCi0JdXNlcmRhdGEgdW51c2VkLgotCShjbHNfcmV0X3VzaG9ydF9mbik6IENhc3QgcHJpbnRmIHBhcmFtZXRlciB0byBzaWxlbmNlIGdjYy4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mbG9hdC5jIChmbG9hdGluZyk6IFJlbW92ZSB1bnVzZWQgcGFyYW1ldGVyIGUuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmxvYXQxLmMgKG1haW4pOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlIGkuCi0JQ2xlYW51cCB3aGl0ZSBzcGFjZXMuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVnaW50LmMgKGNoZWNraW5nKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZSBpLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QuYyAoY2xzX3N0cnVjdF9jb21iaW5lZF9nbik6IE1hcmsKLQljaWYgYW5kIHVzZXJkYXRhIHVudXNlZC4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0MS5jIChjbHNfc3RydWN0X2NvbWJpbmVkX2duKToKLQlMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0MTAuYyAoQl9nbik6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QyLmMgKEJfZm4pOiBBZGp1c3QgcHJpbnRmCi0JZm9ybWF0dGVycyB0byBzaWxlbmNlIGdjYy4KLQkoQl9nbik6IE1hcmsgY2lmIGFuZCB1c2VyZGF0YSB1bnVzZWQuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDMuYyAoQl9nbik6IE1hcmsgY2lmIGFuZCB1c2VyZGF0YQotCXVudXNlZC4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0NC5jOiBNZW50aW9uIHJlbGF0ZWQgUFIuCi0JKEJfZ24pOiBNYXJrIGNpZiBhbmQgdXNlcmRhdGEgdW51c2VkLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q1LmMgKEJfZ24pOiBNYXJrIGNpZiBhbmQgdXNlcmRhdGEKLQl1bnVzZWQuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDYuYzogTWVudGlvbiByZWxhdGVkIFBSLgotCShCX2duKTogTWFyayBjaWYgYW5kIHVzZXJkYXRhIHVudXNlZC4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Ny5jIChCX2duKTogTWFyayBjaWYgYW5kIHVzZXJkYXRhCi0JdW51c2VkLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q4LmMgKEJfZ24pOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0OS5jIChCX2duKTogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcHJvYmxlbTEuYyAoc3R1Yik6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3B5b2JqYy10Yy5jIChtYWluKTogQ2FzdCB0aGUgcmVzdWx0IHRvIHNpbGVuY2UKLQlnY2MuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2ZsMi5jIChyZXR1cm5fZmwpOiBBZGQgdGhlIG5vdGUgbWVudGlvbmVkCi0JaW4gdGhlIGxhc3QgY29tbWl0IGZvciB0aGlzIHRlc3QgY2FzZSBpbiB0aGUgdGVzdCBjYXNlIGl0c2VsZi4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMC5jIChjbG9zdXJlX3Rlc3RfZm4wKTogTWFyayBjaWYgYXMKLQl1bnVzZWQuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjEuYyAoY2xvc3VyZV90ZXN0X2ZuMSk6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4yLmMgKGNsb3N1cmVfdGVzdF9mbjIpOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMy5jIChjbG9zdXJlX3Rlc3RfZm4zKTogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjQuYyAoY2xvc3VyZV90ZXN0X2ZuMCk6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm41LmMgKGNsb3N1cmVfdGVzdF9mbjUpOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNi5jIChjbG9zdXJlX3Rlc3RfZm4wKTogTGlrZXdpc2UuCitjb21taXQgYTBjODBmMjc5Yjg3MzNkMDAxY2I1ZTVjNWEzMjg5ZWNiN2E2ZTU2YQorQXV0aG9yOiBMYW5kb24gRnVsbGVyIDxsYW5kb25mQGJpa2Vtb25rZXkub3JnPgorRGF0ZTogICBTYXQgRmViIDEyIDExOjQzOjQ5IDIwMTEgLTA1MDAKIAotMjAwNi0wMi0yMiAgS2F6IEtvamltYSAgPGtrb2ppbWFAZ2NjLmdudS5vcmc+CisgICAgVXBkYXRlIG15IGUtbWFpbCBhZGRyZXNzLgogCi0JKiBzcmMvc2gvc3lzdi5TOiBGaXggcmVnaXN0ZXIgbnVtYmVycyBpbiB0aGUgRkRFIGZvcgotCWZmaV9jbG9zdXJlX1NZU1YuCitjb21taXQgODE5NWUwZTExZGY3YTUzZmE0NzRjYWE5Mzc1ZjczY2ExMTM2ZWQ2NgorQXV0aG9yOiBMYW5kb24gRnVsbGVyIDxsYW5kb25mQGJpa2Vtb25rZXkub3JnPgorRGF0ZTogICBTYXQgRmViIDEyIDExOjI3OjAwIDIwMTEgLTA1MDAKIAotMjAwNi0wMi0yMCAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorICAgIEZpeCBzeW1ib2wgcHJlZml4ZXMgb24gRGFyd2luLgogCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2ZsMi5jIChyZXR1cm5fZmwpOiBSZW1vdmUgc3RhdGljCi0JZGVjbGFyYXRpb24gdG8gYXZvaWQgYSBmYWxzZSBuZWdhdGl2ZSBvbiBpeDg2LiBTZWUgUFIzMjMuCitjb21taXQgNTZiM2Y4Y2VmMGYyOGNlZmFhMGY0MGZlMGNmN2M1MjRhZGVmMTMxZAorQXV0aG9yOiBMYW5kb24gRnVsbGVyIDxsYW5kb25mQGJpa2Vtb25rZXkub3JnPgorRGF0ZTogICBTYXQgRmViIDEyIDExOjE0OjU0IDIwMTEgLTA1MDAKIAotMjAwNi0wMi0xOCAgS2F6IEtvamltYSAgPGtrb2ppbWFAZ2NjLmdudS5vcmc+CisgICAgTW9kaWZ5IHRoZSBmZmlfY2xvc3VyZSBzdHJ1Y3R1cmVzIHRvIGhvbGQgdGFibGUvdGFibGUgZW50cnkgcG9pbnRlcnMgaW5zdGVhZCBvZiBhIGNvZGUgYnVmZmVyLgorICAgIAorICAgIFRoaXMgcmUtaW50ZWdyYXRlcyBjb21taXQgZGEyNzczZTAyYWIyNmNjMTFhN2YuCiAKLQkqIHNyYy9zaC9mZmkuYyAoZmZpX2Nsb3N1cmVfaGVscGVyX1NZU1YpOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlCi0JYW5kIGNhc3QgaW50ZWdlciB0byB2b2lkICogaWYgbmVlZGVkLiAgVXBkYXRlIHRoZSBwb2ludGVyIHRvCi0JdGhlIEZQIHJlZ2lzdGVyIHNhdmVkIGFyZWEgY29ycmVjdGx5LgorY29tbWl0IDI4YTAwZjYxZmYzZjY0YzRlYjIyNjljZTJhZWEzZDQ5MzI3NDQ2OWUKK0F1dGhvcjogTGFuZG9uIEZ1bGxlciA8bGFuZG9uZkBiaWtlbW9ua2V5Lm9yZz4KK0RhdGU6ICAgU2F0IEZlYiAxMiAxMTowMTo0OCAyMDExIC0wNTAwCiAKLTIwMDYtMDItMTcgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKyAgICBBcHBsZSBhc3NlbWJsZXIgc3VwcG9ydDsgZml4ZWQgbW9zdCBnYXMvRUxGLWlzbXMuCiAKLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Ni5jOiBYRkFJTCB0aGlzIHRlc3QgdW50aWwgUFIyNTYzMAotCWlzIGZpeGVkLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q0LmM6IExpa2V3aXNlLgorY29tbWl0IDdmMmVhMzNhODBiZmNlZDVlNDhlZDcyOTJmM2I4ZjA1N2Q1NGZmOGYKK0F1dGhvcjogTGFuZG9uIEZ1bGxlciA8bGFuZG9uZkBiaWtlbW9ua2V5Lm9yZz4KK0RhdGU6ICAgU2F0IEZlYiAxMiAxMDozOToxOCAyMDExIC0wNTAwCiAKLTIwMDYtMDItMTYgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKyAgICBSZXBsYWNlIFJFVExETSBtYWNyby4KKyAgICAKKyAgICBUaGUgbWFjcm8gaXMgaW5jb21wYXRpYmxlIHdpdGggQXBwbGUncyBhc3NlbWJsZXI7IHN3aXRjaCB0bworICAgIGEgc2ltcGxlIGlubGluZSB2ZXJzaW9uLgogCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2RibC5jOiBOZXcgdGVzdCBjYXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9kYmwxLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9kYmwyLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9mbC5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fZmwxLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9mbDIuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2ZsMy5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNi5jOiBMaWtld2lzZS4KK2NvbW1pdCA5MmZmMjNlNzdmYTU4NjQ1NWI0MjdiNzFmNDllMWQ5NTAyNDcwZTZlCitBdXRob3I6IExhbmRvbiBGdWxsZXIgPGxhbmRvbmZAYmlrZW1vbmtleS5vcmc+CitEYXRlOiAgIFNhdCBGZWIgMTIgMTA6MjQ6NDkgMjAxMSAtMDUwMAogCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDIuYzogUmVtb3ZlIGZmaV90eXBlX215bG9uZwotCWRlZmluaXRpb24uCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmZpdGVzdC5oOiBBZGQgZmZpX3R5cGVfbXlsb25nIGRlZmluaXRpb24KLQloZXJlIHRvIGJlIHVzZWQgYnkgb3RoZXIgdGVzdCBjYXNlcyB0b28uCisgICAgU3dpdGNoIHRvIHRoZSBjdXJyZW50IGlPUyA0LjIgU0RLLgogCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDEwLmM6IE5ldyB0ZXN0IGNhc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDkuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDguYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDcuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDYuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDQuYzogTGlrZXdpc2UuCitjb21taXQgNThmYjhjYTJkZmI4OWFkNzAyODRiYjk2NzhkM2Q0ZGJiNjU4YzhhNworTWVyZ2U6IGNjM2ZiZDkgNzFjNzkyZgorQXV0aG9yOiBMYW5kb24gRnVsbGVyIDxsYW5kb25mQGJpa2Vtb25rZXkub3JnPgorRGF0ZTogICBTYXQgRmViIDEyIDEwOjIzOjE5IDIwMTEgLTA1MDAKIAotMjAwNi0wMS0yMSAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorICAgIE1lcmdlIHJlbW90ZSBicmFuY2ggJ3Vwc3RyZWFtL21hc3RlcicKIAotCSogY29uZmlndXJlLmFjOiBFbmFibGUgbGliZmZpIGZvciBzcGFyYzY0LSotZnJlZWJzZCouCi0JKiBjb25maWd1cmU6IFJlYnVpbHQuCitjb21taXQgY2MzZmJkOTc1Y2U5MzY2ZDRjNDBhNmZmNmMxMDhmNjY0ODY3YmQ3YworTWVyZ2U6IGU0NDlhNDMgZjZhYjNlZAorQXV0aG9yOiBMYW5kb24gRnVsbGVyIDxsYW5kb25mQGJpa2Vtb25rZXkub3JnPgorRGF0ZTogICBTYXQgRmViIDEyIDEwOjIxOjAyIDIwMTEgLTA1MDAKIAotMjAwNi0wMS0xOCAgSmFrdWIgSmVsaW5layAgPGpha3ViQHJlZGhhdC5jb20+CisgICAgTWVyZ2UgYnJhbmNoICdtYXN0ZXInIG9mIGdpdGh1Yi5jb206bGFuZG9uZi9saWJmZmktaW9zCiAKLQkqIHNyYy9wb3dlcnBjL3N5c3YuUyAoc21zdF90d29fcmVnaXN0ZXIpOiBEb24ndCBjYWxsIF9fYXNobGRpMywKLQlpbnN0ZWFkIGRvIHRoZSBzaGlmdGluZyBpbmxpbmUuCi0JKiBzcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TIChmZmlfY2xvc3VyZV9TWVNWKTogRG9uJ3QgY29tcHV0ZSAlcjUKLQlzaGlmdCBjb3VudCB1bmNvbmRpdGlvbmFsbHkuICBTaW1wbGlmeSBsb2FkIHNlcXVlbmNlcyBmb3IgMSwgMiwgMywgNAotCWFuZCA4IGJ5dGUgc3RydWN0cywgZm9yIHRoZSByZW1haW5pbmcgc3RydWN0IHNpemVzIGRvbid0IGNhbGwKLQlfX2xzaHJkaTMsIGluc3RlYWQgZG8gdGhlIHNoaWZ0aW5nIGlubGluZS4KK2NvbW1pdCBlNDQ5YTQzYmJlMTJmODExOTM5OTkyOGRiMWFlMjZhZGM3MWRkZTE0CitBdXRob3I6IExhbmRvbiBGdWxsZXIgPGxhbmRvbmZAYmlrZW1vbmtleS5vcmc+CitEYXRlOiAgIFNhdCBGZWIgMTIgMTA6MjA6NDIgMjAxMSAtMDUwMAogCi0yMDA1LTEyLTA3ICBUaGllbW8gU2V1ZmVyICA8dGhzQG5ldHdvcmtuby5kZT4KKyAgICBBbGxvdyBzcGVjaWZpY2F0aW9uIG9mIHRoZSBtaW5pbXVtIHN1cHBvcnRlZCBpT1MgdmVyc2lvbi4KIAotCSogc3JjL21pcHMvZmZpdGFyZ2V0Lmg6IFJlbW92ZSBvYnNvbGV0ZSBzZ2lkZWZzLmggaW5jbHVkZS4gQWRkCi0JbWlzc2luZyBwYXJlbnRoZXNlcy4KLQkqIHNyYy9taXBzL28zMi5TIChmZmlfY2FsbF9PMzIpOiBDb2RlIGZvcm1hdHRpbmcuIERlZmluZQotCWFuZCB1c2UgQTNfT0ZGLCBGUF9PRkYsIFJBX09GRi4gTWljcm8tb3B0aW1pemF0aW9ucy4KLQkoZmZpX2Nsb3N1cmVfTzMyKTogTGlrZXdpc2UsIGJ1dCB3aXRoIG5ld2x5IGRlZmluZWQgQTNfT0ZGMiwKLQlBMl9PRkYyLCBBMV9PRkYyLCBBMF9PRkYyLCBSQV9PRkYyLCBGUF9PRkYyLCBTMF9PRkYyLCBHUF9PRkYyLAotCVYxX09GRjIsIFYwX09GRjIsIEZBXzFfMV9PRkYyLCBGQV8xXzBfT0ZGMiwgRkFfMF8xX09GRjIsCi0JRkFfMF8wX09GRjIuCi0JKiBzcmMvbWlwcy9mZmkuYyAoZmZpX3ByZXBfYXJncyk6IENvZGUgZm9ybWF0dGluZy4gRml4Ci0JZW5kaWFubmVzcyBidWdzLgotCShmZmlfcHJlcF9jbG9zdXJlKTogSW1wcm92ZSB0cmFtcG9saW5lIGluc3RydWN0aW9uIHNjaGVkdWxpbmcuCi0JKGZmaV9jbG9zdXJlX21pcHNfaW5uZXJfTzMyKTogRml4IGVuZGlhbm5lc3MgYnVncy4KK2NvbW1pdCA3MWM3OTJmNTFiY2YzZTJmMzM0ZTVlYTFmYjFhOGI2NjdjYjNhZWRiCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTYXQgRmViIDEyIDA5OjMzOjExIDIwMTEgLTA1MDAKIAotMjAwNS0xMi0wMyAgQWxhbiBNb2RyYSAgPGFtb2RyYUBiaWdwb25kLm5ldC5hdT4KKyAgICByYzQKIAotCSogc3JjL3Bvd2VycGMvZmZpLmM6IEZvcm1hdHRpbmcuCi0JKGZmaV9wcmVwX2FyZ3NfU1lTVik6IEF2b2lkIHBvc3NpYmxlIGFsaWFzaW5nIHByb2JsZW1zIGJ5IHVzaW5nIHVuaW9ucy4KLQkoZmZpX3ByZXBfYXJnczY0KTogTGlrZXdpc2UuCitjb21taXQgN2M3YzlmMzI3Mjk5MzMxMDIyZjYwMDA2MDNhMzVmMjMxMGRmZTMwOAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU2F0IEZlYiAxMiAwOToyOToyOSAyMDExIC0wNTAwCiAKLTIwMDUtMDktMzAgIEdlb2ZmcmV5IEtlYXRpbmcgIDxnZW9mZmtAYXBwbGUuY29tPgorICAgIHVuZ2NjaWZ5IHBhcnRzIG9mIHRoZSBidWlsZAogCi0JKiB0ZXN0c3VpdGUvbGliL2xpYmZmaS1kZy5leHAgKGxpYmZmaV90YXJnZXRfY29tcGlsZSk6IEZvcgotCWRhcndpbiwgdXNlIC1zaGFyZWQtbGliZ2NjIG5vdCAtbGdjY19zLCBhbmQgZXhwbGFpbiB3aHkuCitjb21taXQgZWQ2MmU0OGI5NWEwZmE2MGI2ODVmNjQ3Y2I3M2M5ZTE5MGVlYzM1YworQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgRnJpIEZlYiAxMSAxMjoyMzo1OCAyMDExIC0wNTAwCiAKLTIwMDUtMDktMjYgIFRvbSBUcm9tZXkgIDx0cm9tZXlAcmVkaGF0LmNvbT4KKyAgICBGaXggcGVybWlzc2lvbnMKIAotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zsb2F0MS5jICh2YWx1ZV90eXBlKTogTmV3IHR5cGVkZWYuCi0JKENBTkFSWSk6IE5ldyBkZWZpbmUuCi0JKG1haW4pOiBDaGVjayBmb3IgcmVzdWx0IGJ1ZmZlciBvdmVyZmxvdy4KLQkqIHNyYy9wb3dlcnBjL2xpbnV4NjQuUzogSGFuZGxlIGxpbnV4NjQgbG9uZyBkb3VibGUgcmV0dXJucy4KLQkqIHNyYy9wb3dlcnBjL2ZmaS5jIChGTEFHX1JFVFVSTlNfMTI4QklUUyk6IE5ldyBjb25zdGFudC4KLQkoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBIYW5kbGUgbGludXg2NCBsb25nIGRvdWJsZSByZXR1cm5zLgorY29tbWl0IDE3ZDllOWU2OGRkYjFiOTE1YTBiOTc1MTcxMzAzMzg2MWI1OTg1NzUKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIEZyaSBGZWIgMTEgMTI6MjM6MjAgMjAxMSAtMDUwMAogCi0yMDA1LTA4LTI1ICBBbGFuIE1vZHJhICA8YW1vZHJhQGJpZ3BvbmQubmV0LmF1PgorICAgIFVzZSBuZXdlciBhdXRvdG9vbHMuICBPbmx5IGJ1aWxkIGRlYnVnLmMgd2hlbiAtLWVuYWJsZS1kZWJ1Zy4KIAotCVBSIHRhcmdldC8yMzQwNAotCSogc3JjL3Bvd2VycGMvZmZpLmMgKGZmaV9wcmVwX2FyZ3NfU1lTVik6IENvcnJlY3QgcGxhY2VtZW50IG9mIHN0YWNrCi0JaG9tZWQgZnAgYXJncy4KLQkoZmZpX3N0YXR1cyBmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IENvcnJlY3Qgc3RhY2sgc2l6aW5nIGZvciBzYW1lLgorY29tbWl0IDY5NzJhNGZmZGE3NTc2MWVhYWI3ZGZiZTBmYjE1MTZiMjU1ZThlMGMKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIEZyaSBGZWIgMTEgMDc6MzI6NTEgMjAxMSAtMDUwMAogCi0yMDA1LTA4LTExICBKYWt1YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNvbT4KKyAgICBGaXggeGxjIGJ1aWxkIG9uIEFJWAogCi0JKiBjb25maWd1cmUuYWMgKEhBVkVfSElEREVOX1ZJU0lCSUxJVFlfQVRUUklCVVRFKTogTmV3IHRlc3QuCi0JKEFIX0JPVFRPTSk6IEFkZCBGRklfSElEREVOIGRlZmluaXRpb24uCi0JKiBjb25maWd1cmU6IFJlYnVpbHQuCi0JKiBmZmljb25maWcuaC5pbjogUmVidWlsdC4KLQkqIHNyYy9wb3dlcnBjL2ZmaS5jIChoaWRkZW4pOiBSZW1vdmUuCi0JKGZmaV9jbG9zdXJlX0xJTlVYNjQsIGZmaV9wcmVwX2FyZ3M2NCwgZmZpX2NhbGxfTElOVVg2NCwKLQlmZmlfY2xvc3VyZV9oZWxwZXJfTElOVVg2NCk6IFVzZSBGRklfSElEREVOIGluc3RlYWQgb2YgaGlkZGVuLgotCSogc3JjL3Bvd2VycGMvbGludXg2NF9jbG9zdXJlLlMgKGZmaV9jbG9zdXJlX0xJTlVYNjQsCi0JLmZmaV9jbG9zdXJlX0xJTlVYNjQpOiBVc2UgRkZJX0hJRERFTiBpbnN0ZWFkIG9mIC5oaWRkZW4uCi0JKiBzcmMveDg2L2ZmaS5jIChmZmlfY2xvc3VyZV9TWVNWLCBmZmlfY2xvc3VyZV9yYXdfU1lTVik6IFJlbW92ZSwKLQlhZGQgRkZJX0hJRERFTiB0byBpdHMgcHJvdG90eXBlLgotCShmZmlfY2xvc3VyZV9TWVNWX2lubmVyKTogTmV3LgotCSogc3JjL3g4Ni9zeXN2LlMgKGZmaV9jbG9zdXJlX1NZU1YsIGZmaV9jbG9zdXJlX3Jhd19TWVNWKTogTmV3LgotCSogc3JjL3g4Ni93aW4zMi5TIChmZmlfY2xvc3VyZV9TWVNWLCBmZmlfY2xvc3VyZV9yYXdfU1lTVik6IE5ldy4KK2NvbW1pdCAxODMzYWEwZmI5ODMxZWIwNzI1YjYzZTM1ODg2YzBmNmQzNWRmNDgwCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBGcmkgRmViIDExIDA3OjExOjA0IDIwMTEgLTA1MDAKIAotMjAwNS0wOC0xMCAgQWxmcmVkIE0uIFN6bWlkdCAgPGFtc0BnbnUub3JnPgorICAgIHNwYXJjIEFCSSB0ZXN0IGZpeC4KIAotCVBSIGxpYmZmaS8yMTgxOToKLQkqIGNvbmZpZ3VyZTogUmVidWlsdC4KLQkqIGNvbmZpZ3VyZS5hYzogSGFuZGxlIGkqODYtKi1nbnUqLgorY29tbWl0IGYxZmIxMzliNGUyODNmZmZkY2YyMDVhOTAzOTQzZDVlOWQyYmIyYTIKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFdlZCBGZWIgOSAxODozMDowMiAyMDExIC0wNTAwCiAKLTIwMDUtMDgtMDkgIEpha3ViIEplbGluZWsgIDxqYWt1YkByZWRoYXQuY29tPgorICAgIEZpeCB0ZXN0cwogCi0JKiBzcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TIChmZmlfY2xvc3VyZV9TWVNWKTogVXNlCi0JRFdfQ0ZBX29mZnNldF9leHRlbmRlZF9zZiByYXRoZXIgdGhhbgotCURXX0NGQV9HTlVfbmVnYXRpdmVfb2Zmc2V0X2V4dGVuZGVkLgotCSogc3JjL3Bvd2VycGMvc3lzdi5TIChmZmlfY2FsbF9TWVNWKTogTGlrZXdpc2UuCitjb21taXQgNWNiNDcwMzMxZDE4MWM4NGQ1ZDYyMWU4ODg2ODMyN2EzMjRhNTg5OAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgV2VkIEZlYiA5IDE1OjIzOjA2IDIwMTEgLTA1MDAKIAotMjAwNS0wNy0yMiAgU1VHSU9LQSBUb3NoaW5vYnUgIDxzdWdpb2thQGl0b25ldC5jby5qcD4KKyAgICBGaXggcGVybWlzc2lvbnMKIAotCSogc3JjL3NoL3N5c3YuUyAoZmZpX2NhbGxfU1lTVik6IFN0b3AgYXJndW1lbnQgcG9wcGluZyBjb3JyZWN0bHkKLQlvbiBzaDMuCi0JKGZmaV9jbG9zdXJlX1NZU1YpOiBDaGFuZ2UgdGhlIHN0YWNrIGxheW91dCBmb3Igc2gzIHN0cnVjdCBhcmd1bWVudC4KLQkqIHNyYy9zaC9mZmkuYyAoZmZpX3ByZXBfYXJncyk6IEZpeCBzaDMgYXJndW1lbnQgY29weSwgd2hlbiBpdCBpcwotCXBhcnRpYWxseSBvbiByZWdpc3Rlci4KLQkoZmZpX2Nsb3N1cmVfaGVscGVyX1NZU1YpOiBMaWtld2lzZS4KLQkoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBEb24ndCBzZXQgdG9vIG1hbnkgY2lmLT5mbGFncy4KK2NvbW1pdCAyNjlkZWVmNmRiYmI0MjY2OTU5MTlkMzM5ODM1N2ZhZGEzYmIyODhjCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBXZWQgRmViIDkgMTU6MjI6MjMgMjAxMSAtMDUwMAogCi0yMDA1LTA3LTIwICBLYXogS29qaW1hICA8a2tvamltYUBnY2MuZ251Lm9yZz4KKyAgICByYzMKIAotCSogc3JjL3NoL2ZmaS5jIChmZmlfY2FsbCk6IEhhbmRsZSBzbWFsbCBzdHJ1Y3R1cmVzIGNvcnJlY3RseS4KLQlSZW1vdmUgZW1wdHkgbGluZS4KLQkqIHNyYy9zaDY0L2ZmaS5jIChzaW1wbGVfdHlwZSk6IFJlbW92ZS4KLQkocmV0dXJuX3R5cGUpOiBIYW5kbGUgc21hbGwgc3RydWN0dXJlcyBjb3JyZWN0bHkuCi0JKGZmaV9wcmVwX2FyZ3MpOiBMaWtld2lzZS4KLQkoZmZpX2NhbGwpOiBMaWtld2lzZS4KLQkoZmZpX2Nsb3N1cmVfaGVscGVyX1NZU1YpOiBMaWtld2lzZS4KLQkqIHNyYy9zaDY0L3N5c3YuUyAoZmZpX2NhbGxfU1lTVik6IEhhbmRsZSAxLCAyIGFuZCA0LWJ5dGUgcmV0dXJuLgotCUVtaXQgcG9zaXRpb24gaW5kZXBlbmRlbnQgY29kZSBpZiBQSUMgYW5kIHJlbW92ZSB3cm9uZyBkYXRhbGFiZWwKLQlwcmVmaXhlcyBmcm9tIEVIIGRhdGEuCitjb21taXQgNDI2OTVlNzI1MDRmNjQ3NDQ0YjhlOGU5YjkwYmQyNGYxZTMyMjBlMQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgV2VkIEZlYiA5IDE1OjEyOjM1IDIwMTEgLTA1MDAKIAotMjAwNS0wNy0xOSAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorICAgIEZpeCBJUklYIHN1cHBvcnQKIAotCSogTWFrZWZpbGUuYW0gKG5vZGlzdF9saWJmZmlfbGFfU09VUkNFUyk6IEFkZCBQT1dFUlBDX0ZSRUVCU0QuCi0JKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KLQkqIGluY2x1ZGUvTWFrZWZpbGUuaW46IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL01ha2VmaWxlLmluOiBMaWtld2lzZS4KLQkqIGNvbmZpZ3VyZS5hYzogQWRkIFBPV0VSUENfRlJFRUJTRCBydWxlcy4KLQkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KLQkqIHNyYy9wb3dlcnBjL2ZmaXRhcmdldC5oOiBBZGQgUE9XRVJQQ19GUkVFQlNEIHJ1bGVzLgotCShGRklfU1lTVl9UWVBFX1NNQUxMX1NUUlVDVCk6IERlZmluZS4KLQkqIHNyYy9wb3dlcnBjL2ZmaS5jOiBBZGQgZmxhZ3MgdG8gaGFuZGxlIHNtYWxsIHN0cnVjdHVyZSByZXR1cm5zCi0JaW4gZmZpX2NhbGxfU1lTVi4KLQkoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBIYW5kbGUgc21hbGwgc3RydWN0dXJlcyBmb3IgU1lTViA0IEFCSS4KLQlBa2EgRkZJX1NZU1YuCi0JKGZmaV9jbG9zdXJlX2hlbHBlcl9TWVNWKTogTGlrZXdpc2UuCi0JKiBzcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TOiBBZGQgcmV0dXJuIHR5cGVzIGZvciBzbWFsbCBzdHJ1Y3R1cmVzLgotCSogc3JjL3Bvd2VycGMvc3lzdi5TOiBBZGQgYml0cyB0byBoYW5kbGUgc21hbGwgc3RydWN0dXJlcyBmb3IKLQlmaW5hbCBTWVNWIDQgQUJJLgorY29tbWl0IGE2ZTU2Yjk3ZjYyYTNmZWViMzMwMWMyNGEyZTRjYWU1NWU1NDYwMjEKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFdlZCBGZWIgOSAxNTowMDo0MiAyMDExIC0wNTAwCiAKLTIwMDUtMDctMTAgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKyAgICBBZGQgcG93ZXJwYzY0LSotZGFyd2luKiBzdXBwb3J0CiAKLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNV8xX2J5dGUuYzogTmV3IHRlc3QgZmlsZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNl8xX2J5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzdfMV9ieXRlLmM6IExpa2V3aXNlLgorY29tbWl0IDc0N2Q2YzMyZDRhYmIwN2MxMGMzYTFmOTM1NzljMzkyOWFhYTI0ODcKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFdlZCBGZWIgOSAxNDo1NjoyMyAyMDExIC0wNTAwCiAKLTIwMDUtMDctMDUgIFJhbmRvbHBoIENodW5nICA8dGF1c3FAZGViaWFuLm9yZz4KKyAgICBBZGQgSW50ZXJpeCBzdXBwb3J0CiAKLQkqIHNyYy9wYS9mZmkuYyAoZmZpX3N0cnVjdF90eXBlKTogUmVuYW1lIEZGSV9UWVBFX1NNQUxMX1NUUlVDVDEKLQlhcyBGRklfVFlQRV9TTUFMTF9TVFJVQ1QzLiAgQnJlYWsgb3V0IGhhbmRsaW5nIGZvciA1LTcgYnl0ZQotCXN0cnVjdHVyZXMuICBLaWxsIGNvbXBpbGF0aW9uIHdhcm5pbmdzLgotCShmZmlfY2xvc3VyZV9pbm5lcl9MSU5VWCk6IFByaW50IHJldHVybiB2YWx1ZXMgYXMgaGV4IGluIGRlYnVnCi0JbWVzc2FnZS4gIFJlbmFtZSBGRklfVFlQRV9TTUFMTF9TVFJVQ1QxIGFzIEZGSV9UWVBFX1NNQUxMX1NUUlVDVDMuCi0JUHJvcGVybHkgaGFuZGxlIDUtNyBieXRlIHN0cnVjdHVyZSByZXR1cm5zLgotCSogc3JjL3BhL2ZmaXRhcmdldC5oIChGRklfVFlQRV9TTUFMTF9TVFJVQ1QxKQotCShGRklfVFlQRV9TTUFMTF9TVFJVQ1QyKTogUmVtb3ZlLgotCShGRklfVFlQRV9TTUFMTF9TVFJVQ1QzLCBGRklfVFlQRV9TTUFMTF9TVFJVQ1Q1KQotCShGRklfVFlQRV9TTUFMTF9TVFJVQ1Q2LCBGRklfVFlQRV9TTUFMTF9TVFJVQ1Q3KTogRGVmaW5lLgotCSogc3JjL3BhL2xpbnV4LlM6IE1hcmsgc291cmNlIGZpbGUgYXMgdXNpbmcgUEExLjEgYXNzZW1ibHkuCi0JKGNoZWNrc21zdDEsIGNoZWNrc21zdDIpOiBSZW1vdmUuCi0JKGNoZWNrc21zdDMpOiBPcHRpbWl6ZSBoYW5kbGluZyBvZiAzLWJ5dGUgc3RydWN0IHJldHVybnMuCi0JKGNoZWNrc21zdDU2Nyk6IFByb3Blcmx5IGhhbmRsZSA1LTcgYnl0ZSBzdHJ1Y3QgcmV0dXJucy4KK2NvbW1pdCBlYWI2ZTQxY2RlMzgyYWEwN2RlNmMwMTFkNTE0YTE0YzBkNjJlYjQ3CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBXZWQgRmViIDkgMTA6MTU6MDIgMjAxMSAtMDUwMAogCi0yMDA1LTA2LTE1ICBSYWluZXIgT3J0aCAgPHJvQFRlY2hGYWsuVW5pLUJpZWxlZmVsZC5ERT4KKyAgICBSZW1vdmUgUkVBRE1FLm1hcmtkb3duIGZvcm0gbGliZmZpLWlvcwogCi0JUFIgbGliZ2NqLzIxOTQzCi0JKiBzcmMvbWlwcy9uMzIuUzogRW5mb3JjZSBQSUMgY29kZS4KLQkqIHNyYy9taXBzL28zMi5TOiBMaWtld2lzZS4KK2NvbW1pdCA2OWRiZTg0NWY0ZWUzZTZjZTg5OTlmMTdhMWU0ZjIxNzllZjdkYTg5CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBXZWQgRmViIDkgMDc6Mzg6NDMgMjAxMSAtMDUwMAogCi0yMDA1LTA2LTE1ICBSYWluZXIgT3J0aCAgPHJvQFRlY2hGYWsuVW5pLUJpZWxlZmVsZC5ERT4KKyAgICBGaXggeGZhaWxzCiAKLQkqIGNvbmZpZ3VyZS5hYzogVHJlYXQgaSo4Ni0qLXNvbGFyaXMyLjEwIGFuZCB1cCBhcyBYODZfNjQuCi0JKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCitjb21taXQgZjQ5ODMxOGMwN2I5NTEzN2ZlMjU5ZDg2YmRiZTE1MzQ3NTg4Yjg0YQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgV2VkIEZlYiA5IDA2OjI2OjQ2IDIwMTEgLTA1MDAKIAotMjAwNS0wNi0wMSAgQWxhbiBNb2RyYSAgPGFtb2RyYUBiaWdwb25kLm5ldC5hdT4KKyAgICBVcGRhdGUgUkVBRE1FIGZvciBpT1MgYWdhaW4KIAotCSogc3JjL3Bvd2VycGMvcHBjX2Nsb3N1cmUuUyAoZmZpX2Nsb3N1cmVfU1lTVik6IERvbid0IHVzZSBKVU1QVEFSR0VUCi0JdG8gY2FsbCBmZmlfY2xvc3VyZV9oZWxwZXJfU1lTVi4gIEFwcGVuZCBAbG9jYWwgaW5zdGVhZC4KLQkqIHNyYy9wb3dlcnBjL3N5c3YuUyAoZmZpX2NhbGxfU1lTVik6IExpa2V3aXNlIGZvciBmZmlfcHJlcF9hcmdzX1NZU1YuCitjb21taXQgNjMwYjljMGFjNDNjN2VkY2JmZDg5MmUyM2MwOWZiMjY3MjRmNGFjMAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgV2VkIEZlYiA5IDA2OjI0OjIzIDIwMTEgLTA1MDAKIAotMjAwNS0wNS0xNyAgS2VsbGV5IENvb2sgIDxrY29va0BnY2MuZ251Lm9yZz4KKyAgICBVcGRhdGUgdG8gcmMyCiAKLQkqIGNvbmZpZ3VyZS5hYzogVXNlIEFDX0NfQklHRU5ESUFOIGluc3RlYWQgb2YgQUNfQ19CSUdFTkRJQU5fQ1JPU1MuCi0JVXNlIEFDX0NIRUNLX1NJWkVPRiBpbnN0ZWFkIG9mIEFDX0NPTVBJTEVfQ0hFQ0tfU0laRU9GLgotCSogTWFrZWZpbGUuYW0gKEFDTE9DQUxfQU1GTEFHUyk6IFJlbW92ZSAtSSAuLi9jb25maWcuCi0JKiBhY2xvY2FsLm00LCBjb25maWd1cmUsIGZmaWNvbmZpZy5oLmluLCBNYWtlZmlsZS5pbiwKLQlpbmNsdWRlL01ha2VmaWxlLmluLCB0ZXN0c3VpdGUvTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCitjb21taXQgMGNhZDQzODZmYTRjOWVhNWY4Y2E4OGIxNjI0N2RiNGU1YzhmZWE5MAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgV2VkIEZlYiA5IDA2OjExOjQ2IDIwMTEgLTA1MDAKIAotMjAwNS0wNS0wOSAgTWlrZSBTdHVtcCAgPG1yc0BhcHBsZS5jb20+CisgICAgQWRkIENoYW5nZUxvZyBlbnRyeS4gIEZpeCBjb3B5cmlnaHQgaGVhZGVycy4KIAotCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorY29tbWl0IDA5Y2I3NmYyNjQ1YmQyYzE1MTg0NmU5MjQ5ZDhlYTcwN2JhMDFlOGMKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFR1ZSBGZWIgOCAyMDozOTo1MSAyMDExIC0wNTAwCiAKLTIwMDUtMDUtMDggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQHJlZGhhdC5jb20+CisgICAgQWRkIG1pc3NpbmcgY2hhbmdlCiAKLQlQUiBsaWJmZmkvMjEyODUKLQkqIHNyYy9hbHBoYS9vc2YuUzogVXBkYXRlIHVud2luZCBpbnRvIHRvIG1hdGNoIGNvZGUuCitjb21taXQgMmUzYTQ4Y2NkZDU0MzQwOTgzYzQ2YTI5YTBiNDE5ODVlM2U3ODlhYworQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgVHVlIEZlYiA4IDIwOjM3OjI2IDIwMTEgLTA1MDAKIAotMjAwNS0wNS0wNCAgQW5kcmVhcyBEZWdlcnQgPGFkQHBhcHlydXMtZ21iaC5kZT4KLQkgICAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAcmVkaGF0LmNvbT4KKyAgICBGaXggbWFrZSBkaXN0CiAKLQkqIHNyYy94ODYvZmZpNjQuYyAoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBTYXZlIHNzZS11c2VkIGZsYWcgaW4KLQliaXQgMTEgb2YgZmxhZ3MuCi0JKGZmaV9jYWxsKTogTWFzayByZXR1cm4gdHlwZSBmaWVsZC4gIFBhc3Mgc3NlY291bnQgdG8gZmZpX2NhbGxfdW5peDY0LgotCShmZmlfcHJlcF9jbG9zdXJlKTogU2V0IGNhcnJ5IGJpdCBpZiBzc2UtdXNlZCBmbGFnIHNldC4KLQkqIHNyYy94ODYvdW5peDY0LlMgKGZmaV9jYWxsX3VuaXg2NCk6IEFkZCBzc2Vjb3VudCBhcmd1bWVudC4KLQlPbmx5IGxvYWQgc3NlIHJlZ2lzdGVycyBpZiBzc2Vjb3VudCBub24temVyby4KLQkoZmZpX2Nsb3N1cmVfdW5peDY0KTogT25seSBzYXZlIHNzZSByZWdpc3RlcnMgaWYgY2Fycnkgc2V0IG9uIGVudHJ5LgorY29tbWl0IDVlNDgxNGQ5OTI4ZTIzNmEyYTRhZmU4NGQ2ZTFkNGZkYWE0NzMyMDYKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFR1ZSBGZWIgOCAxOTo0NjoyOCAyMDExIC0wNTAwCiAKLTIwMDUtMDQtMjkgIFJhbGYgQ29yc2VwaXVzICA8cmFsZi5jb3JzZXBpdXNAcnRlbXMub3JnPgorICAgIGZpeCBwZXJtaXNzaW9ucwogCi0JKiBjb25maWd1cmUuYWM6IEFkZCBpKjg2LSotcnRlbXMqLCBzcGFyYyotKi1ydGVtcyosCi0JcG93ZXJwYy0qcnRlbXMqLCBhcm0qLSotcnRlbXMqLCBzaC0qLXJ0ZW1zKi4KLQkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KK2NvbW1pdCA1YzBjYzZmMTUzNmFhMTczODc5NWE5NzMwMzgxMGE4MjNjN2ZhMmNiCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBUdWUgRmViIDggMTk6NDU6NTkgMjAxMSAtMDUwMAogCi0yMDA1LTA0LTIwICBIYW5zLVBldGVyIE5pbHNzb24gIDxocEBheGlzLmNvbT4KKyAgICAzLjAuMTByYzEKIAotCSogdGVzdHN1aXRlL2xpYi9saWJmZmktZGcuZXhwIChsaWJmZmktZGctdGVzdC0xKTogSW4gcmVnc3ViIHVzZSwKLQloYXZlIFRjbDguMy1jb21wYXRpYmxlIGludGVybWVkaWF0ZSB2YXJpYWJsZS4KK2NvbW1pdCA4NTdmZTNkZTQ2ZDIyODZhZmEyZmU3NzI5MjBlY2Y0YWVmYTE2ODhmCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBUdWUgRmViIDggMTk6Mzk6MjAgMjAxMSAtMDUwMAogCi0yMDA1LTA0LTE4ICBTaW1vbiBQb3NuamFrIDxzaW1vbi5wb3NuamFrQHNpb2wubmV0PgotCSAgICBIYW5zLVBldGVyIE5pbHNzb24gIDxocEBheGlzLmNvbT4KKyAgICBDbGVhbiB1cHMKIAotCSogTWFrZWZpbGUuYW06IEFkZCBDUklTIHN1cHBvcnQuCi0JKiBjb25maWd1cmUuYWM6IExpa2V3aXNlLgotCSogTWFrZWZpbGUuaW4sIGNvbmZpZ3VyZSwgdGVzdHN1aXRlL01ha2VmaWxlLmluLAotCWluY2x1ZGUvTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCi0JKiBzcmMvY3JpczogTmV3IGRpcmVjdG9yeS4KLQkqIHNyYy9jcmlzL2ZmaS5jLCBzcmMvY3Jpcy9zeXN2LlMsIHNyYy9jcmlzL2ZmaXRhcmdldC5oOiBOZXcgZmlsZXMuCi0JKiBzcmMvcHJlcF9jaWYuYyAoZmZpX3ByZXBfY2lmKTogV3JhcCBpbiAjaWZuZGVmIF9fQ1JJU19fLgorY29tbWl0IGUyMjE0ZjhhZGI1NTc3YzI0NzQ1MmUyY2M5ZjRjYmUzMDRkN2NhOWYKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFR1ZSBGZWIgOCAxOToyMjo1NiAyMDExIC0wNTAwCiAKLQkqIHRlc3RzdWl0ZS9saWIvbGliZmZpLWRnLmV4cCAobGliZmZpLWRnLXRlc3QtMSk6IFJlcGxhY2UgXG4gd2l0aAotCVxyP1xuIGluIG91dHB1dCB0ZXN0cy4KKyAgICBVcGRhdGUgUkVBRE1FCiAKLTIwMDUtMDQtMTIgIE1pa2UgU3R1bXAgIDxtcnNAYXBwbGUuY29tPgorY29tbWl0IDExMDYyMjlhNTcyMWE2NTlkYTVjMjMxZWMwZTgyMTExMTk2MTUzOTQKK01lcmdlOiBiYzlkMGJlIGY2YWIzZWQKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFR1ZSBGZWIgOCAxOToyMDowOSAyMDExIC0wNTAwCiAKLQkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKyAgICBBZGQgaU9TIHN1cHBvcnQKIAotMjAwNS0wMy0zMCAgSGFucyBCb2VobSAgPEhhbnMuQm9laG1AaHAuY29tPgorY29tbWl0IGJjOWQwYmUyOTU4Y2U0NzU3NTdmMzRkZDJjODc4OTQ4YWE3N2EzOWYKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFR1ZSBGZWIgOCAxNzowNDoyNiAyMDExIC0wNTAwCiAKLQkqIHNyYy9pYTY0L2ZmaXRhcmdldC5oIChmZmlfYXJnKTogVXNlIGxvbmcgbG9uZyBpbnN0ZWFkIG9mIERJLgorICAgIDMuMC4xMHJjMCBjaGFuZ2VzCiAKLTIwMDUtMDMtMzAgIFN0ZXZlIEVsbGNleSAgPHNqZUBjdXAuaHAuY29tPgorY29tbWl0IDNiODM2MjQ5ZmVhZTZkMDhkM2U2ODg3NDg2ZTRiOTk2MWRkYWZhMDkKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFR1ZSBGZWIgOCAxNDoyODo1OSAyMDExIC0wNTAwCiAKLQkqIHNyYy9pYTY0L2ZmaXRhcmdldC5oIChmZmlfYXJnKSBBREQgREkgYXR0cmlidXRlLgotCShmZmlfc2FyZykgRGl0dG8uCi0JKiBzcmMvaWE2NC91bml4LlMgKGZmaV9jbG9zdXJlX3VuaXgpOiBFeHRlbmQgZ3AKLQl0byA2NCBiaXRzIGluIElMUDMyIG1vZGUuCi0JTG9hZCA2NCBiaXRzIGV2ZW4gZm9yIHNob3J0IGRhdGEuCisgICAgUmViYXNlIGZyb20gR0NDCiAKLTIwMDUtMDMtMjMgIE1pa2UgU3R1bXAgIDxtcnNAYXBwbGUuY29tPgorY29tbWl0IGEyNmUzOTQwNjE5ZmFlYmE2ZGU1NDgyNGM5NTQwYzkwYjFhYWI1MTMKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFR1ZSBGZWIgOCAxMzo1NjoxMiAyMDExIC0wNTAwCiAKLQkqIHNyYy9wb3dlcnBjL2Rhcndpbi5TOiBVcGRhdGUgZm9yIC1tNjQgbXVsdGlsaWIuCi0JKiBzcmMvcG93ZXJwYy9kYXJ3aW5fY2xvc3VyZS5TOiBMaWtld2lzZS4KKyAgICBjb3B5cmlnaHQgdXBkYXRlcyBwYXRjaAogCi0yMDA1LTAzLTIxICBaYWNrIFdlaW5iZXJnICA8emFja0Bjb2Rlc291cmNlcnkuY29tPgorY29tbWl0IGI4MDk5NTM5ZjAwZTIyNDEwNzU5NDEwMWU5NzYwYjZkYzA4MWEwNTYKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFR1ZSBGZWIgOCAxMzo1MDo0MyAyMDExIC0wNTAwCiAKLQkqIGNvbmZpZ3VyZS5hYzogRG8gbm90IGludm9rZSBUTF9BQ19HQ0NfVkVSU0lPTi4KLQlEbyBub3Qgc2V0IHRvb2xfaW5jbHVkZV9kaXIuCi0JKiBhY2xvY2FsLm00LCBjb25maWd1cmUsIE1ha2VmaWxlLmluLCB0ZXN0c3VpdGUvTWFrZWZpbGUuaW46Ci0JUmVnZW5lcmF0ZS4KLQkqIGluY2x1ZGUvTWFrZWZpbGUuYW06IFNldCBnY2NfdmVyc2lvbiBhbmQgdG9vbGxpYmZmaWRpci4KLQkqIGluY2x1ZGUvTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisgICAgRml4IG1zdmNjLnNoIGJvdGNoCiAKLTIwMDUtMDItMjIgIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorY29tbWl0IGRjNDExZThmOTkxMTNhMzQ2NTZiZmQyZDNhZTUxMjU5OTcyNDg4Y2MKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFR1ZSBGZWIgOCAxMDo0OToyOSAyMDExIC0wNTAwCiAKLQkqIHNyYy9wb3dlcnBjL2ZmaS5jIChmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IEJ1bXAgYWxpZ25tZW50IHRvCi0Jb2RkLW51bWJlcmVkIHJlZ2lzdGVyIHBhaXJzIGZvciA2NC1iaXQgaW50ZWdlciB0eXBlcy4KKyAgICBGaXggSFAtVVggYnVpbGQKIAotMjAwNS0wMi0yMyAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorY29tbWl0IDQwNDU4NWQxMzQ4ZTMwYWM1ODIwM2JiZDg3NmQ5MTMxZTVhZWQ4NzQKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFR1ZSBGZWIgOCAxMDo0NDozNiAyMDExIC0wNTAwCiAKLQlQUiBsaWJmZmkvMjAxMDQKLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fbGwxLmM6IE5ldyB0ZXN0IGNhc2UuCisgICAgRml4IHNwYXJjIHY4IGFnZ3JlZ2F0ZSB0eXBlIHJldHVybnMgZm9yIHN1bidzIGNvbXBpbGVyCiAKLTIwMDUtMDItMTEgIEphbmlzIEpvaG5zb24gIDxqYW5pczE4N0B1cy5pYm0uY29tPgorY29tbWl0IDE5Y2U3MTMxODhlMTkzZTQ1MjI3NDBkMjRjMjAxNzA0MTE4ODNkMmQKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFR1ZSBGZWIgOCAxMDozNDoyMyAyMDExIC0wNTAwCiAKLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fbG9uZ2RvdWJsZS5jOiBSZW1vdmUgZGctb3B0aW9ucy4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mbG9hdC5jOiBEaXR0by4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mbG9hdDIuYzogRGl0dG8uCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmxvYXQzLmM6IERpdHRvLgorICAgIGdyYW1tYXIgZml4CiAKLTIwMDUtMDItMDggIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KK2NvbW1pdCA4OTI4NGZlNTVmMWE4YWQzYmRkYmVhNzk2ZWUwMGQwZTNiYTQxMWNlCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBUdWUgRmViIDggMTA6MTk6MTkgMjAxMSAtMDUwMAogCi0JKiBzcmMvZnJ2L2ZmaXRhcmdldC5oOiBSZW1vdmUgUFBDIHN0dWZmIHdoaWNoIGRvZXMgbm90IGJlbG9uZyB0byBmcnYuCisgICAgRml4IEFJWCBidWlsZCB3aXRoIElCTSBYTEMKIAotMjAwNS0wMS0xMiAgRXJpYyBCb3RjYXpvdSAgPGVib3RjYXpvdUBsaWJlcnR5c3VyZi5mcj4KK2NvbW1pdCBiYTAyMmMzMzhhZjk3Y2IxOGQ5ZjhlZDVhNjA3ZmQ0ODNhNjFjMDljCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBUdWUgRmViIDggMTA6MTI6NDggMjAxMSAtMDUwMAogCi0JKiB0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvc3BlY2lhbC5leHAgKGN4eF9vcHRpb25zKTogQWRkCi0JLXNoYXJlZC1saWJnY2MuCisgICAgZml4IHdpbjY0LXVuZGVyc2NvcmUgcGF0Y2gKIAotMjAwNC0xMi0zMSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAcmVkaGF0LmNvbT4KK2NvbW1pdCAwOTdlNWYzOTI0ZWU5MmEzYmE2Y2Q3MmY3ODdkYThhM2ViMTRmZWEzCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBUdWUgRmViIDggMTA6MTE6MDAgMjAxMSAtMDUwMAogCi0JKiBzcmMvdHlwZXMuYyAoRkZJX0FHR1JFR0FURV9UWVBFREVGKTogUmVtb3ZlLgotCShGRklfVFlQRURFRik6IFJlbmFtZSBmcm9tIEZGSV9JTlRFR1JBTF9UWVBFREVGLiAgUmVwbGFjZSBzaXplIGFuZAotCW9mZnNldCBwYXJhbWV0ZXJzIHdpdGggYSB0eXBlIHBhcmFtZXRlcjsgZGVkdWNlIHNpemUgYW5kIHN0cnVjdHVyZQotCWFsaWdubWVudC4gIFVwZGF0ZSBhbGwgdXNlcnMuCisgICAgeDg2IHBjcmVsIHRlc3QgcGFydCAyCiAKLTIwMDQtMTItMzEgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQHJlZGhhdC5jb20+Citjb21taXQgZWQyYzUxOGQ5NjBiOTFkNDQ0YmU3NGU1YTU1Nzc5YTljNDYwMmYzYgorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgVHVlIEZlYiA4IDEwOjEwOjA3IDIwMTEgLTA1MDAKIAotCSogc3JjL3R5cGVzLmMgKEZGSV9UWVBFX1BPSU5URVIpOiBEZWZpbmUgd2l0aCBzaXplb2YuCi0JKEZGSV9UWVBFX0xPTkdET1VCTEUpOiBGaXggZm9yIGlhNjQuCi0JKiBzcmMvaWE2NC9mZml0YXJnZXQuaCAoc3RydWN0IGZmaV9pYTY0X3RyYW1wb2xpbmVfc3RydWN0KTogTW92ZQotCWludG8gZmZpX3ByZXBfY2xvc3VyZS4KLQkqIHNyYy9pYTY0L2lhNjRfZmxhZ3MuaCwgc3JjL2lhNjQvZmZpLmMsIHNyYy9pYTY0L3VuaXguUzogUmV3cml0ZQotCWZyb20gc2NyYXRjaC4KKyAgICB4ODYgcGNyZWwgdGVzdAogCi0yMDA0LTEyLTI3ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEByZWRoYXQuY29tPgorY29tbWl0IDBlNTg0Mzk5NWY0NjkwMGVmMjEyNTMxMjgxZTA4YjIyNDQ2NGY0MTMKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFR1ZSBGZWIgOCAwNzo1Mjo0MCAyMDExIC0wNTAwCiAKLQkqIHNyYy94ODYvdW5peDY0LlM6IEZpeCB0eXBvIGluIHVud2luZCBpbmZvLgorICAgIFJlZnJlc2ggZnJvbSBHQ0MKIAotMjAwNC0xMi0yNSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAcmVkaGF0LmNvbT4KK2NvbW1pdCA1YjljZDUyNzg0MzM5YTQyZTQxNzE3NGE1NWUzMTBlMjE0ZDQzNWY5CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBNb24gTm92IDIyIDE1OjE5OjU3IDIwMTAgLTA1MDAKIAotCSogc3JjL3g4Ni9mZmk2NC5jIChzdHJ1Y3QgcmVnaXN0ZXJfYXJncyk6IFJlbmFtZSBmcm9tIHN0YWNrTGF5b3V0LgotCShlbnVtIHg4Nl82NF9yZWdfY2xhc3MpOiBBZGQgWDg2XzY0X0NPTVBMRVhfWDg3X0NMQVNTLgotCShtZXJnZV9jbGFzc2VzKTogQ2hlY2sgZm9yIGl0LgotCShTU0VfQ0xBU1NfUCk6IE5ldy4KLQkoY2xhc3NpZnlfYXJndW1lbnQpOiBQYXNzIGJ5dGVfb2Zmc2V0IGJ5IHZhbHVlOyBwZXJmb3JtIGFsbCB1cGRhdGVzCi0JaW5zaWRlIHN0cnVjdCBjYXNlLgotCShleGFtaW5lX2FyZ3VtZW50KTogQWRkIGNsYXNzZXMgYXJndW1lbnQ7IGhhbmRsZQotCVg4Nl82NF9DT01QTEVYX1g4N19DTEFTUy4KLQkoZmZpX3ByZXBfYXJncyk6IE1lcmdlIGludG8gLi4uCi0JKGZmaV9jYWxsKTogLi4uIGhlcmUuICBTaGFyZSBzdGFjayBmcmFtZSB3aXRoIGZmaV9jYWxsX3VuaXg2NC4KLQkoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBTZXR1cCBjaWYtPmZsYWdzIGZvciBwcm9wZXIgc3RydWN0dXJlIHJldHVybi4KLQkoZmZpX2ZpbGxfcmV0dXJuX3ZhbHVlKTogUmVtb3ZlLgotCShmZmlfcHJlcF9jbG9zdXJlKTogUmVtb3ZlIGRlYWQgYXNzZXJ0LgotCShmZmlfY2xvc3VyZV91bml4NjRfaW5uZXIpOiBSZW5hbWUgZnJvbSBmZmlfY2xvc3VyZV9VTklYNjRfaW5uZXIuCi0JUmV3cml0ZSB0byB1c2Ugc3RydWN0IHJlZ2lzdGVyX2FyZ3MgaW5zdGVhZCBvZiB2YV9saXN0LiAgQ3JlYXRlCi0JZmxhZ3MgZm9yIGhhbmRsaW5nIHN0cnVjdHVyZSByZXR1cm5zLgotCSogc3JjL3g4Ni91bml4NjQuUzogUmVtb3ZlIGRlYWQgc3RyaW5ncy4KLQkoZmZpX2NhbGxfdW5peDY0KTogUmVuYW1lIGZyb20gZmZpX2NhbGxfVU5JWDY0LiAgUmV3cml0ZSB0byBzaGFyZQotCXN0YWNrIGZyYW1lIHdpdGggZmZpX2NhbGwuICBIYW5kbGUgc3RydWN0dXJlIHJldHVybnMgcHJvcGVybHkuCi0JKGZsb2F0MnNzZSwgZmxvYXRmbG9hdDJzc2UsIGRvdWJsZTJzc2UpOiBSZW1vdmUuCi0JKHNzZTJmbG9hdCwgc3NlMmRvdWJsZSwgc3NlMmZsb2F0ZmxvYXQpOiBSZW1vdmUuCi0JKGZmaV9jbG9zdXJlX3VuaXg2NCk6IFJlbmFtZSBmcm9tIGZmaV9jbG9zdXJlX1VOSVg2NC4gIFJld3JpdGUKLQl0byBoYW5kbGUgc3RydWN0dXJlIHJldHVybnMgcHJvcGVybHkuCisgICAgd2luNjQtdW5kZXJzY29yZSBwYXRjaAogCi0yMDA0LTEyLTA4ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+Citjb21taXQgMmRiNzI2MTViNTBlYjVjMGYyOTcyNWMwMmM3NDBhMmYwZDdmYzdkOQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU3VuIE5vdiAyMSAxMDo1MDo1NiAyMDEwIC0wNTAwCiAKLQkqIE1ha2VmaWxlLmFtIChBTV9NQUtFRkxBR1MpOiBSZW1vdmUgZHVwbGljYXRlIExJQkNGTEFHUyBhbmQKLQlQSUNGTEFHLgotCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGVkLgorICAgIFJlYmFzZQogCi0yMDA0LTEyLTAyICBSaWNoYXJkIFNhbmRpZm9yZCAgPHJzYW5kaWZvQHJlZGhhdC5jb20+Citjb21taXQgZjZhYjNlZGMyM2RjOGZjN2M0N2EzMWM4OTYwNDQxNTBjMjNmMDRiNQorQXV0aG9yOiBMYW5kb24gRnVsbGVyIDxsYW5kb25mQHBsYXVzaWJsZS5jb29wPgorRGF0ZTogICBXZWQgT2N0IDI3IDE5OjM0OjUxIDIwMTAgLTA0MDAKIAotCSogY29uZmlndXJlLmFjOiBVc2UgVExfQUNfR0NDX1ZFUlNJT04gdG8gc2V0IGdjY192ZXJzaW9uLgotCSogY29uZmlndXJlLCBhY2xvY2FsLm00LCBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KLQkqIGluY2x1ZGUvTWFrZWZpbGUuaW4sIHRlc3RzdWl0ZS9NYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKyAgICBJbmNsdWRlIHRoZSBsaWNlbnNlIGhlYWRlciBpbiB0aGUgZ2VuZXJhdGVkIG91dHB1dC4KIAotMjAwNC0xMS0yOSAgS2VsbGV5IENvb2sgIDxrY29va0BnY2MuZ251Lm9yZz4KK2NvbW1pdCBjZWY2MTk0NjI4ODdmYTBmMzYwZTNlZTcwMmQxZTA0ZjExMmI1YjM4CitBdXRob3I6IExhbmRvbiBGdWxsZXIgPGxhbmRvbmZAYmlrZW1vbmtleS5vcmc+CitEYXRlOiAgIFdlZCBPY3QgMjcgMTM6NTk6MzAgMjAxMCAtMDQwMAogCi0JKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUgZm9yIGxpYnRvb2wgY2hhbmdlLgorICAgIEFkZCBtaXNzaW5nIGNvcHlyaWdodC9saWNlbnNlIGhlYWRlci4KIAotMjAwNC0xMS0yNSAgS2VsbGV5IENvb2sgIDxrY29va0BnY2MuZ251Lm9yZz4KK2NvbW1pdCA1M2YzODdiMjAzNDEzYzlhYTZlMzFmNDlkYmI3MGQzN2Q4MTYzMzBiCitBdXRob3I6IExhbmRvbiBGdWxsZXIgPGxhbmRvbmZAYmlrZW1vbmtleS5vcmc+CitEYXRlOiAgIFN1biBTZXAgMTkgMTk6NTc6MTcgMjAxMCAtMDcwMAogCi0JKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUgZm9yIGxpYnRvb2wgcmV2ZXJzaW9uLgorICAgIE1pbm9yIFJFQURNRSBmaXguCiAKLTIwMDQtMTEtMjQgIEtlbGxleSBDb29rICA8a2Nvb2tAZ2NjLmdudS5vcmc+Citjb21taXQgNGZiY2I1YjVmYmNlMTFmNGIxNjgwNjBlMDA2MzlkYjMzYzg1Yjc1YgorQXV0aG9yOiBMYW5kb24gRnVsbGVyIDxsYW5kb25mQGJpa2Vtb25rZXkub3JnPgorRGF0ZTogICBTdW4gU2VwIDE5IDE5OjUwOjM3IDIwMTAgLTA3MDAKIAotCSogY29uZmlndXJlOiBSZWdlbmVyYXRlIGZvciBsaWJ0b29sIGNoYW5nZS4KKyAgICBNaW5vciBSRUFETUUgZml4LgogCi0yMDA0LTExLTIzICBKb2huIERhdmlkIEFuZ2xpbiAgPGRhdmUuYW5nbGluQG5yYy1jbnJjLmdjLmNhPgorY29tbWl0IDhlNzY1MmVmNmFjYWI1ZGI3YTI5Zjc4NjY4NmE1NGYwNWNkYmRjN2QKK0F1dGhvcjogTGFuZG9uIEZ1bGxlciA8bGFuZG9uZkBiaWtlbW9ua2V5Lm9yZz4KK0RhdGU6ICAgU3VuIFNlcCAxOSAxOTo0OTozOSAyMDEwIC0wNzAwCiAKLQkqIHRlc3RzdWl0ZS9saWIvbGliZmZpLWRnLmV4cDogVXNlIG5ldyBwcm9jcyBpbiB0YXJnZXQtbGlicGF0aC5leHAuCisgICAgQWRkIGEgbGliZmZpLWlvcy1zcGVjaWZpYyBnaXRodWIgUkVBRE1FLgogCi0yMDA0LTExLTIzICBSaWNoYXJkIFNhbmRpZm9yZCAgPHJzYW5kaWZvQHJlZGhhdC5jb20+Citjb21taXQgODMwMzhjZjI0YWExYTkyYjYyYjkxZmZlZTFkY2MyNWQ3OTI0MzQ4NAorQXV0aG9yOiBMYW5kb24gRnVsbGVyIDxsYW5kb25mQGJpa2Vtb25rZXkub3JnPgorRGF0ZTogICBTdW4gU2VwIDE5IDE0OjM2OjQ1IDIwMTAgLTA3MDAKIAotCSogc3JjL21pcHMvbzMyLlMgKGZmaV9jYWxsX08zMiwgZmZpX2Nsb3N1cmVfTzMyKTogVXNlIGphbHIgaW5zdGVhZAotCW9mIGphbC4gIFVzZSBhbiBhYnNvbHV0ZSBlbmNvZGluZyBmb3IgdGhlIGZyYW1lIGluZm9ybWF0aW9uLgorICAgIEltcGxlbWVudCBGRklfRVhFQ19UUkFNUE9MSU5FX1RBQkxFIGFsbG9jYXRvciBmb3IgaU9TL0FSTS4KKyAgICAKKyAgICBUaGlzIHByb3ZpZGVzIHdvcmtpbmcgY2xvc3VyZSBzdXBwb3J0IG9uIGlPUy9BUk0gZGV2aWNlcyB3aGVyZQorICAgIFBST1RfV1JJVEV8UFJPVF9FWEVDIGlzIG5vdCBwZXJtaXR0ZWQuIFRoZSBjb2RlIHBhc3NlcyBiYXNpYworICAgIHNtb2tlIHRlc3RzLCBidXQgcmVxdWlyZXMgZnVydGhlciByZXZpZXcuCiAKLTIwMDQtMTEtMjMgIEtlbGxleSBDb29rICA8a2Nvb2tAZ2NjLmdudS5vcmc+Citjb21taXQgYjAwZmYzZTk4ZmRkZTYyMmNlZjYxNzAzMGUxNGQ1MzU2ZGZmOTg4ZgorQXV0aG9yOiBMYW5kb24gRnVsbGVyIDxsYW5kb25mQGJpa2Vtb25rZXkub3JnPgorRGF0ZTogICBTdW4gU2VwIDE5IDE0OjIyOjI2IDIwMTAgLTA3MDAKIAotCSogTWFrZWZpbGUuYW06IFJlbW92ZSBuby1kZXBlbmRlbmNpZXMuICBBZGQgQUNMT0NBTF9BTUZMQUdTLgotCSogYWNpbmNsdWRlLm00OiBEZWxldGUgbG9naWMgZm9yIHNpbmNsdWRlcy4KLQkqIGFjbG9jYWwubTQsIE1ha2VmaWxlLmluLCBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCi0JKiBpbmNsdWRlL01ha2VmaWxlOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9NYWtlZmlsZTogTGlrZXdpc2UuCisgICAgUmVuYW1lIHRoZSBnZW5lcmF0ZWQgc3ltYm9sCiAKLTIwMDQtMTEtMjIgIEVyaWMgQm90Y2F6b3UgIDxlYm90Y2F6b3VAbGliZXJ0eXN1cmYuZnI+Citjb21taXQgZGEyNzczZTAyYWIyNmNjMTFhN2ZlODdlOTg1NTk5ZjM1Y2RmMDY0OQorQXV0aG9yOiBMYW5kb24gRnVsbGVyIDxsYW5kb25mQGJpa2Vtb25rZXkub3JnPgorRGF0ZTogICBTdW4gU2VwIDE5IDE0OjIxOjM3IDIwMTAgLTA3MDAKIAotCSogc3JjL3NwYXJjL2ZmaS5jIChmZmlfcHJlcF9jbG9zdXJlKTogQWxpZ24gZG91YmxlcyBhbmQgNjQtYml0IGludGVnZXJzCi0Jb24gYSA4LWJ5dGUgYm91bmRhcnkuCi0JKiBzcmMvc3BhcmMvdjguUyAoZmZpX2Nsb3N1cmVfdjgpOiBSZXNlcnZlIGZyYW1lIHNwYWNlIGZvciBhcmd1bWVudHMuCisgICAgTW9kaWZ5IHRoZSBmZmlfY2xvc3VyZSBzdHJ1Y3R1cmVzIHRvIGhvbGQgdGFibGUvdGFibGUgZW50cnkgcG9pbnRlcnMgaW5zdGVhZCBvZiBhIGNvZGUgYnVmZmVyLgogCi0yMDA0LTEwLTI3ICBSaWNoYXJkIEVhcm5zaGF3ICA8cmVhcm5zaGFAYXJtLmNvbT4KK2NvbW1pdCAwMWQ3MWI3YmVkNDE4NDRmODBjYjlmZWVmMjBkY2M1ZWNlNWJhMmQwCitBdXRob3I6IExhbmRvbiBGdWxsZXIgPGxhbmRvbmZAYmlrZW1vbmtleS5vcmc+CitEYXRlOiAgIFN1biBTZXAgMTkgMTQ6MjE6MTQgMjAxMCAtMDcwMAogCi0JKiBzcmMvYXJtL2ZmaS5jIChmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IEhhbmRsZSBmdW5jdGlvbnMgdGhhdCByZXR1cm4KLQlsb25nIGxvbmcgdmFsdWVzLiAgUm91bmQgc3RhY2sgYWxsb2NhdGlvbiB0byBhIG11bHRpcGxlIG9mIDggYnl0ZXMKLQlmb3IgQVRQQ1MgY29tcGF0aWJpbGl0eS4KLQkqIHNyYy9hcm0vc3lzdi5TIChmZmlfY2FsbF9TWVNWKTogUmV3b3JrIHRvIGF2b2lkIHVzZSBvZiBBUENTIHJlZ2lzdGVyCi0JbmFtZXMuICBIYW5kbGUgcmV0dXJuaW5nIGxvbmcgbG9uZyB0eXBlcy4gIEFkZCBUaHVtYiBhbmQgaW50ZXJ3b3JraW5nCi0Jc3VwcG9ydC4gIEltcHJvdmUgc29mdC1mbG9hdCBjb2RlLgorICAgIFJlZ2VuZXJhdGVkIHRoZSBhdXRvY29uZiBzY3JpcHQKIAotMjAwNC0xMC0yNyAgUmljaGFyZCBFYXJuc2hhdyAgPHJlYXJuc2hhQGFybS5jb20+Citjb21taXQgMTlhZmRhMDA2OWM0MmU1MWM4MWRjYTdiMTBhNWNmODg0YjRjZGNlMAorQXV0aG9yOiBMYW5kb24gRnVsbGVyIDxsYW5kb25mQGJpa2Vtb25rZXkub3JnPgorRGF0ZTogICBTdW4gU2VwIDE5IDE0OjIwOjUyIDIwMTAgLTA3MDAKIAotCSogdGVzdHN1aXRlL2xpYi9saWJmZmktZGIuZXhwIChsb2FkX2djY19saWIpOiBOZXcgZnVuY3Rpb24uCi0JKGxpYmZmaV9leGl0KTogTmV3IGZ1bmN0aW9uLgotCShsaWJmZmlfaW5pdCk6IEJ1aWxkIHRoZSB0ZXN0Z2x1ZSB3cmFwcGVyIGlmIG5lZWRlZC4KKyAgICBFbmFibGUgQUNfU1VCU1QgZm9yIEZGSV9FWEVDX1RSQU1QT0xJTkVfVEFCTEUKIAotMjAwNC0xMC0yNSAgRXJpYyBCb3RjYXpvdSAgPGVib3RjYXpvdUBsaWJlcnR5c3VyZi5mcj4KK2NvbW1pdCA5ZTExOTY0NDRlNzhhZWYyMDAyOGMxODg5MWY0NGViZTM5YTgxNWZkCitBdXRob3I6IExhbmRvbiBGdWxsZXIgPGxhbmRvbmZAYmlrZW1vbmtleS5vcmc+CitEYXRlOiAgIFN1biBTZXAgMTkgMTA6NDM6MDYgMjAxMCAtMDcwMAogCi0JUFIgb3RoZXIvMTgxMzgKLQkqIHRlc3RzdWl0ZS9saWIvbGliZmZpLWRnLmV4cDogQWNjZXB0IG1vcmUgdGhhbiBvbmUgbXVsdGlsaWIgbGliZ2NjLgorICAgIEFkZCBhIGhhcmQtY29kZWQgRkZJX0VYRUNfVFJBTVBPTElORV9UQUJMRSBhcm0gaW1wbGVtZW50YXRpb24uCisgICAgCisgICAgVGhpcyBpbXBsZW1lbnRzIHN1cHBvcnQgZm9yIHJlLW1hcHBpbmcgYSBzaGFyZWQgdGFibGUgb2YgZXhlY3V0YWJsZQorICAgIHRyYW1wb2xpbmVzIGRpcmVjdGx5IGluIGZyb250IG9mIGEgd3JpdGFibGUgY29uZmlndXJhdGlvbiBwYWdlLCB3b3JraW5nCisgICAgYXJvdW5kIFBST1RfV1JJVEUgcmVzdHJpY3Rpb25zIGZvciBzYW5kYm94ZWQgYXBwbGljYXRpb25zIG9uIEFwcGxlJ3MKKyAgICBpT1MuCisgICAgCisgICAgVGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBmb3IgdGVzdGluZyBwdXJwb3NlczsgYSBwcm9wZXIgYWxsb2NhdG9yIGlzIHN0aWxsCisgICAgbmVjZXNzYXJ5LCBhbmQgQVJNLXNwZWNpZmljIGNvZGUgbmVlZHMgdG8gYmUgbW92ZWQgb3V0IG9mCisgICAgc3JjL2Nsb3N1cmVzLmMuCiAKLTIwMDQtMTAtMjUgIEthenVoaXJvIEluYW9rYSA8aW5hb2thLmthenVoaXJvQHJlbmVzYXMuY29tPgorY29tbWl0IGYzODM2NGIzOTkxODRlNjgyZmMzZTc4NTA4NGJkNDk3ODI3YmM1YWYKK0F1dGhvcjogTGFuZG9uIEZ1bGxlciA8bGFuZG9uZkBiaWtlbW9ua2V5Lm9yZz4KK0RhdGU6ICAgU3VuIFNlcCAxOSAxMDo0MjozNiAyMDEwIC0wNzAwCiAKLQkqIHNyYy9tMzJyL2xpYmZmaXRhcmdldC5oIChGRklfQ0xPU1VSRVMpOiBTZXQgdG8gMC4KKyAgICBGaXggc3ltYm9sIHByZWZpeCBmb3IgZmZpX2Nsb3N1cmVfU1lTVl9pbm5lciBvbiBEYXJ3aW4uCiAKLTIwMDQtMTAtMjAgIEtheiBLb2ppbWEgIDxra29qaW1hQGdjYy5nbnUub3JnPgorY29tbWl0IDM2ODQ5ZTc3MTZiNzdhYTI1ZTQxNzVkMWY0YmUxYjkzZGJmNDdhYWMKK0F1dGhvcjogTGFuZG9uIEZ1bGxlciA8bGFuZG9uZkBiaWtlbW9ua2V5Lm9yZz4KK0RhdGU6ICAgU3VuIFNlcCAxOSAwOTozNTowNCAyMDEwIC0wNzAwCiAKLQkqIHNyYy9zaC9zeXN2LlMgKGZmaV9jYWxsX1NZU1YpOiBEb24ndCBhbGlnbiBmb3IgZG91YmxlIGRhdGEuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmxvYXQzLmM6IE5ldyB0ZXN0IGNhc2UuCisgICAgV2hpdGVzcGFjZS9jb21tZW50IGZpeGVzLgogCi0yMDA0LTEwLTE4ICBLYXogS29qaW1hICA8a2tvamltYUBnY2MuZ251Lm9yZz4KK2NvbW1pdCBiNzY0MTYyNTI2ODU0Njg2ZTU3OWE0OGI2YWM1OTgxZjRlYjg4NmEzCitBdXRob3I6IExhbmRvbiBGdWxsZXIgPGxhbmRvbmZAYmlrZW1vbmtleS5vcmc+CitEYXRlOiAgIFN1biBTZXAgMTkgMDk6MDQ6MzQgMjAxMCAtMDcwMAogCi0JKiBzcmMvc2gvZmZpLmMgKGZmaV9wcmVwX2Nsb3N1cmUpOiBTZXQgVCBiaXQgaW4gdHJhbXBvbGluZSBmb3IKLQl0aGUgZnVuY3Rpb24gcmV0dXJuaW5nIGEgc3RydWN0dXJlIHBvaW50ZWQgd2l0aCBSMi4KLQkqIHNyYy9zaC9zeXN2LlMgKGZmaV9jbG9zdXJlX1NZU1YpOiBVc2UgUjIgYXMgdGhlIHBvaW50ZXIgdG8KLQl0aGUgc3RydWN0dXJlIHJldHVybiB2YWx1ZSBpZiBUIGJpdCBzZXQuICBFbWl0IHBvc2l0aW9uCi0JaW5kZXBlbmRlbnQgY29kZSBhbmQgRUggZGF0YSBpZiBQSUMuCisgICAgRml4IHRoZSBzY3JpcHQgbmFtZSAoYnVpbGQtaXBob25lLnNoIC0+IGJ1aWxkLWlvcy5zaCkKIAotMjAwNC0xMC0xMyAgS2F6dWhpcm8gSW5hb2thICA8aW5hb2thLmthenVoaXJvQHJlbmVzYXMuY29tPgorY29tbWl0IGEzZDlhYTg1MDEzMzQxNDUxZWE5Nzc2NjQ4NWI3YTExODUyZDMyYjIKK0F1dGhvcjogTGFuZG9uIEZ1bGxlciA8bGFuZG9uZkBiaWtlbW9ua2V5Lm9yZz4KK0RhdGU6ICAgU3VuIFNlcCAxOSAwOTowMzo1MiAyMDEwIC0wNzAwCiAKLQkqIE1ha2VmaWxlLmFtOiBBZGQgbTMyciBzdXBwb3J0LgotCSogY29uZmlndXJlLmFjOiBMaWtld2lzZS4KLQkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgotCSogY29uZml1Z3JlOiBSZWdlbmVyYXRlLgotCSogc3JjL3R5cGVzLmM6IEFkZCBtMzJyIHBvcnQgdG8gRkZJX0lOVEVSTkFMX1RZUEVERUYKLQkodWludDY0LCBzaW50NjQsIGRvdWJsZSwgbG9uZ2RvdWJsZSkKLQkqIHNyYy9tMzJyOiBOZXcgZGlyZWN0b3J5LgotCSogc3JjL20zMnIvZmZpLmM6IE5ldyBmaWxlLgotCSogc3JjL20zMnIvc3lzdi5TOiBMaWtld2lzZS4KLQkqIHNyYy9tMzJyL2ZmaXRhcmdldC5oOiBMaWtld2lzZS4KKyAgICBVcGRhdGUgdGhlIGF1dG9nZW5lcmF0ZWQgYXV0b2NvbmYvYXV0b21ha2UgZmlsZXMuCiAKLTIwMDQtMTAtMDIgIEtheiBLb2ppbWEgIDxra29qaW1hQGdjYy5nbnUub3JnPgorY29tbWl0IGM3MTQ4MGVhZjgzOWYyNmJiZGZjZDg5NjVmNjVhYzRkOGRlZmRkYzAKK0F1dGhvcjogTGFuZG9uIEZ1bGxlciA8bGFuZG9uZkBiaWtlbW9ua2V5Lm9yZz4KK0RhdGU6ICAgU3VuIFNlcCAxOSAwOTowMjowNSAyMDEwIC0wNzAwCiAKLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZWdpbnQuYzogTmV3IHRlc3QgY2FzZS4KKyAgICBVcGRhdGUgYXV0b21ha2UvYXV0b2NvbmYgdG8gY29uZGl0aW9uYWxseSBidWlsZCBzcmMvYXJtL3RyYW1wb2xpbmUuUyBpZiBGRklfRVhFQ19UUkFNUE9MSU5FX1RBQkxFIGlzIGVuYWJsZWQuCiAKLTIwMDQtMDktMTQgIEguSi4gTHUgIDxob25naml1Lmx1QGludGVsLmNvbT4KK2NvbW1pdCA5YWY5MjkxYjczYmM1ZTI3ZWNkOTQ5YmVjODE1N2YyMDQyNmQ2NWI4CitBdXRob3I6IExhbmRvbiBGdWxsZXIgPGxhbmRvbmZAYmlrZW1vbmtleS5vcmc+CitEYXRlOiAgIFN1biBTZXAgMTkgMDg6NTI6MzMgMjAxMCAtMDcwMAogCi0JUFIgbGliZ2NqLzE3NDY1Ci0JKiB0ZXN0c3VpdGUvbGliL2xpYmZmaS1kZy5leHA6IERvbid0IHVzZSBnbG9iYWwgbGRfbGlicmFyeV9wYXRoLgotCVNldCB1cCBMRF9MSUJSQVJZX1BBVEgsIFNITElCX1BBVEgsIExEX0xJQlJBUllOMzJfUEFUSCwKLQlMRF9MSUJSQVJZNjRfUEFUSCwgTERfTElCUkFSWV9QQVRIXzMyLCBMRF9MSUJSQVJZX1BBVEhfNjQgYW5kCi0JRFlMRF9MSUJSQVJZX1BBVEguCisgICAgQWRkIHRoZSB0cmFtcG9saW5lIHRhYmxlIGdlbmVyYXRlZCBieSBnZW50cmFtcC5zaAogCi0yMDA0LTA5LTA1ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+Citjb21taXQgNjhjZTBjMzgzZWNlODRmNjk5NDVkMWM4YzNmZWQwM2Y3ZjljYjVkNgorQXV0aG9yOiBMYW5kb24gRnVsbGVyIDxsYW5kb25mQGJpa2Vtb25rZXkub3JnPgorRGF0ZTogICBTdW4gU2VwIDE5IDA4OjM4OjE5IDIwMTAgLTA3MDAKIAotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL21hbnlfd2luMzIuYzogUmVtb3ZlIHdoaXRlc3BhY2VzLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3Byb21vdGlvbi5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fbGwuYzogUmVtb3ZlIHVudXNlZCB2YXIuIENsZWFudXAKLQl3aGl0ZXNwYWNlcy4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fc2MuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX3VjLmM6IExpa2V3aXNlLgorICAgIEFkZCBhIHNoZWxsIHNjcmlwdCB0aGF0IGdlbmVyYXRlcyB0aGUgQVJNIHRyYW1wb2xpbmUgcGFnZS4KKyAgICAKKyAgICBUaGlzIGdlbmVyYXRlcyBhIHBhZ2Ugb2YgMzQwIHRyYW1wb2xpbmVzLCBhbGlnbmVkIHdpdGhpbiBvbmUgcGFnZS4gVGhlCisgICAgdHJhbXBvbGluZXMgdXNlIHBjLXJlbGF0aXZlIGFkZHJlc3NpbmcgdG8gcmVmZXJlbmNlIGNvbmZpZyBkYXRhCisgICAgKGNvbnRleHQsIGp1bXAgYWRkcmVzcykgZnJvbSBhIHBhZ2UgcGxhY2VkIGRpcmVjdGx5IHByaW9yIHRvIHRoZQorICAgIHRyYW1wb2xpbmUgcGFnZS4gVGhpcyBjYW4gYmUgdXNlZCBvbiBzeXN0ZW1zIC0tIHN1Y2ggYXMgaU9TIC0tIHRoYXQgZG8gbm90CisgICAgc3VwcG9ydCB3cml0YWJsZSwgZXhlY3V0YWJsZSBtZW1vcnkgYnkgcmVtYXBwaW5nIHRoZSBleGVjdXRhYmxlIHBhZ2UKKyAgICBjb250YWluaW5nIHRoZSB0cmFtcG9saW5lcyBkaXJlY3RseSBhYm92ZSBhIG5ld2x5IGFsbG9jYXRlZCB3cml0YWJsZQorICAgIGNvbmZpZyBwYWdlLgogCi0yMDA0LTA5LTA1ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+Citjb21taXQgNzVhZjA4NmJlODgzMGE4ZWFmZTliMWViZGExOTlkNzg4YmNiMGM2MgorQXV0aG9yOiBMYW5kb24gRnVsbGVyIDxsYW5kb25mQGJpa2Vtb25rZXkub3JnPgorRGF0ZTogICBTYXQgU2VwIDE4IDE4OjEyOjE5IDIwMTAgLTA3MDAKIAotCSogc3JjL3Bvd2VycGMvZGFyd2luLlM6IEZpeCBjb21tZW50cyBhbmQgaWRlbnRhdGlvbi4KLQkqIHNyYy9wb3dlcnBjL2Rhcndpbl9jbG9zdXJlLlM6IExpa2V3aXNlLgorICAgIFVwZGF0ZSBhdXRvY29uZiBmaWxlcwogCi0yMDA0LTA5LTAyICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+Citjb21taXQgMWFjOTJjY2E5YjAyZWY4ZDZhNzY5ZjBkZTFhZGNjZDVjOTYzMDM1NQorQXV0aG9yOiBMYW5kb24gRnVsbGVyIDxsYW5kb25mQGJpa2Vtb25rZXkub3JnPgorRGF0ZTogICBTYXQgU2VwIDE4IDE4OjA4OjE0IDIwMTAgLTA3MDAKIAotCSogc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jOiBBZGQgZmxhZyBmb3IgbG9uZ2RvdWJsZSByZXR1cm4gdmFsdWVzLgotCShmZmlfcHJlcF9hcmdzKTogSGFuZGxlIGxvbmdkb3VibGUgYXJndW1lbnRzLgotCShmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IFNldCBmbGFncyBmb3IgbG9uZ2RvdWJsZS4gQ2FsY3VsYXRlIHNwYWNlIGZvcgotCWxvbmdkb3VibGUuCi0JKGZmaV9jbG9zdXJlX2hlbHBlcl9EQVJXSU4pOiBBZGQgY2xvc3VyZSBoYW5kbGluZyBmb3IgbG9uZ2RvdWJsZS4KLQkqIHNyYy9wb3dlcnBjL2Rhcndpbi5TIChfZmZpX2NhbGxfREFSV0lOKTogQWRkIGhhbmRsaW5nIG9mIGxvbmdkb3VibGUKLQl2YWx1ZXMuCi0JKiBzcmMvcG93ZXJwYy9kYXJ3aW5fY2xvc3VyZS5TIChfZmZpX2Nsb3N1cmVfQVNNKTogTGlrZXdpc2UuCi0JKiBzcmMvdHlwZXMuYzogRGVmaW5lZCBsb25nZG91YmxlIHNpemUgYW5kIGFsaWdubWVudCBmb3IgZGFyd2luLgorICAgIEFkZCBhdXRvY29uZiBjaGVjayBmb3IgV15YIHBsYXRmb3JtcyB0aGF0IHJlcXVpcmUgYSB0cmFtcG9saW5lIHRhYmxlLgorICAgIAorICAgIFRoaXMgYWRkcyB0aGUgRkZJX0VYRUNfVFJBTVBPTElORV9UQUJMRS4gVGhlIGZsYWcgaXMgZW5hYmxlZCBmb3IKKyAgICBhcm0tYXBwbGUtZGFyd2luLCB3aGVyZSBQUk9UX0VYRUMgb24gd3JpdGFibGUgKG9yIGZvcm1lcmx5IHdyaXRhYmxlKSBwYWdlcyBpcworICAgIG5vdCBwZXJtaXR0ZWQgZm9yIHNhbmRib3hlZCBiaW5hcmllcy4KIAotMjAwNC0wOS0wMiAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorY29tbWl0IGJlNzJmYmFiMjliNzE5MGM3MDJkOGUxYWMzZDE0OTg1NWU5NTg3OWQKK0F1dGhvcjogTGFuZG9uIEZ1bGxlciA8bGFuZG9uZkBiaWtlbW9ua2V5Lm9yZz4KK0RhdGU6ICAgU2F0IFNlcCAxOCAxODowMjoyNSAyMDEwIC0wNzAwCiAKLQkqIHNyYy9wb3dlcnBjL2FpeC5TOiBSZW1vdmUgd2hpdGVzcGFjZXMuCi0JKiBzcmMvcG93ZXJwYy9haXhfY2xvc3VyZS5TOiBMaWtld2lzZS4KLQkqIHNyYy9wb3dlcnBjL2FzbS5oOiBMaWtld2lzZS4KLQkqIHNyYy9wb3dlcnBjL2ZmaS5jOiBMaWtld2lzZS4KLQkqIHNyYy9wb3dlcnBjL2ZmaXRhcmdldC5oOiBMaWtld2lzZS4KLQkqIHNyYy9wb3dlcnBjL2xpbnV4NjQuUzogTGlrZXdpc2UuCi0JKiBzcmMvcG93ZXJwYy9saW51eDY0X2Nsb3N1cmUuUzogTGlrZXdpc2UuCi0JKiBzcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TOiBMaWtld2lzZS4KLQkqIHNyYy9wb3dlcnBjL3N5c3YuUzogTGlrZXdpc2UuCisgICAgVXNlIHRoZSBjb3JyZWN0IGhvc3QgdHJpcGxlIGZvciBhcm0vZGFyd2luCiAKLTIwMDQtMDgtMzAgIEFudGhvbnkgR3JlZW4gIDxncmVlbkByZWRoYXQuY29tPgorY29tbWl0IDcwMTUwYmRmNDUwOTI2OTk2NWM3MmYyMDMyYmY3NGYyODU3NjdhZmUKK0F1dGhvcjogTGFuZG9uIEZ1bGxlciA8bGFuZG9uZkBiaWtlbW9ua2V5Lm9yZz4KK0RhdGU6ICAgU2F0IFNlcCAxOCAxNjozODowMyAyMDEwIC0wNzAwCiAKLQkqIE1ha2VmaWxlLmFtOiBBZGQgZnJ2IHN1cHBvcnQuCi0JKiBNYWtlZmlsZS5pbiwgdGVzdHN1aXRlL01ha2VmaWxlLmluOiBSZWJ1aWx0LgotCSogY29uZmlndXJlLmFjOiBSZWFkIGNvbmZpZ3VyZS5ob3N0LgotCSogY29uZmlndXJlLmluOiBSZWFkIGNvbmZpZ3VyZS5ob3N0LgotCSogY29uZmlndXJlLmhvc3Q6IE5ldyBmaWxlLiAgZnJ2LWVsZiBuZWVkcyBsaWJnbG9zcy4KLQkqIGluY2x1ZGUvZmZpLmguaW46IEZvcmNlIGZmaV9jbG9zdXJlIHRvIGhhdmUgYSBuaWNlIGJpZyAoOCkKLQlhbGlnbm1lbnQuICBUaGlzIGlzIG5lZWRlZCB0byBmcnYgYW5kIHNob3VsZG4ndCBoYXJtIHRoZSBvdGhlcnMuCi0JKiBpbmNsdWRlL2ZmaV9jb21tb24uaCAoQUxJR05fRE9XTik6IE5ldyBtYWNyby4KLQkqIHNyYy9mcnYvZmZpLmMsIHNyYy9mcnYvZmZpdGFyZ2V0LmgsIHNyYy9mcnYvZWFiaS5TOiBOZXcgZmlsZXMuCisgICAgQWRkIG1pc3NpbmcgVU5XSU5EIGVudHJ5OyBkaXNhYmxlcyAucGFkIG9uIG5vbi1FQUJJIHRhcmdldHMuCiAKLTIwMDQtMDgtMjQgIERhdmlkIERhbmV5ICA8ZGFuZXlAYXZ0cmV4LmNvbT4KK2NvbW1pdCA2YjQ1MmJhZmFlYzQ5OGRmOTc1YmE4YWM0Yzk5ZGUxNzRlNWY3NGY3CitBdXRob3I6IExhbmRvbiBGdWxsZXIgPGxhbmRvbmZAYmlrZW1vbmtleS5vcmc+CitEYXRlOiAgIFNhdCBTZXAgMTggMTY6MjE6MzIgMjAxMCAtMDcwMAogCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjAuYzogWGZhaWwgbWlwczY0KiBpbnN0ZWFkIG9mIG1pcHMqLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4xLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4yLmMgIExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4zLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm40LmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm41LmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xOGJ5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE5Ynl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMV8xYnl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjBieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yMGJ5dGUxLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yNGJ5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzJieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zXzFieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zYnl0ZTEuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzNieXRlMi5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNF8xYnl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNGJ5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzY0Ynl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNmJ5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzdieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc184Ynl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOWJ5dGUxLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc185Ynl0ZTIuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2RvdWJsZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fZmxvYXQuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3BvaW50ZXIuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQxNi5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDMyLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50NjQuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3VpbnQxNi5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDMyLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50NjQuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2RvdWJsZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZmxvYXQuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3NjaGFyLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV9zc2hvcnQuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3NzaG9ydGNoYXIuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3VjaGFyLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV91c2hvcnQuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3VzaG9ydGNoYXIuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NjaGFyLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zaW50LmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zc2hvcnQuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VjaGFyLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191aW50LmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191bG9uZ2xvbmcuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VzaG9ydC5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0LmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QxLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QyLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QzLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3Byb2JsZW0xLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL3Vud2luZHRlc3QuY2M6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xMmJ5dGUuYzogTGlrZXdpc2UgYW5kIHNldCByZXR1cm4gdmFsdWUKLQl0byB6ZXJvLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xNmJ5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzVieXRlLmM6IExpa2V3aXNlLgorICAgIEFwcGxlIGFzc2VtYmxlciBzdXBwb3J0OyBmaXhlZCBtb3N0IGdhcy9FTEYtaXNtcy4KIAotMjAwNC0wOC0yMyAgRGF2aWQgRGFuZXkgPGRhbmV5QGF2dHJleC5jb20+Citjb21taXQgOGRkYWM4MzViNmY4YjU0ZWRlNzY0ZDBlYTk3N2RlZTRjODJlMmQ2NworQXV0aG9yOiBMYW5kb24gRnVsbGVyIDxsYW5kb25mQGJpa2Vtb25rZXkub3JnPgorRGF0ZTogICBTYXQgU2VwIDE4IDE1OjM4OjA2IDIwMTAgLTA3MDAKIAotCVBSIGxpYmdjai8xMzE0MQotCSogc3JjL21pcHMvZmZpdGFyZ2V0LmggKEZGSV9PMzJfU09GVF9GTE9BVCk6IE5ldyBBQkkuCi0JKiBzcmMvbWlwcy9mZmkuYyAoZmZpX3ByZXBfYXJncyk6IEZpeCBhbGlnbm1lbnQgY2FsY3VsYXRpb24uCi0JKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogSGFuZGxlIEZGSV9PMzJfU09GVF9GTE9BVCBmbG9hdGluZyBwb2ludAotCXBhcmFtZXRlcnMgYW5kIHJldHVybiB0eXBlcy4KLQkoZmZpX2NhbGwpOiBIYW5kbGUgRkZJX08zMl9TT0ZUX0ZMT0FUIEFCSS4KLQkoZmZpX3ByZXBfY2xvc3VyZSk6IERpdHRvLgotCShmZmlfY2xvc3VyZV9taXBzX2lubmVyX08zMik6IEhhbmRsZSBGRklfTzMyX1NPRlRfRkxPQVQgQUJJLCBmaXgKLQlhbGlnbm1lbnQgY2FsY3VsYXRpb25zLgotCSogc3JjL21pcHMvbzMyLlMgKGZmaV9jbG9zdXJlX08zMik6IERvbid0IHVzZSBmbG9hdGluZyBwb2ludAotCWluc3RydWN0aW9ucyBpZiBGRklfTzMyX1NPRlRfRkxPQVQsIG1ha2Ugc3RhY2sgZnJhbWUgQUJJIGNvbXBsaWFudC4KKyAgICBGaXggcGxhY2VtZW50IG9mIHRoZSBfX0FQUExFX18gbWFjcm8uCiAKLTIwMDQtMDgtMTQgIENhc2V5IE1hcnNoYWxsIDxjc21AZ251Lm9yZz4KK2NvbW1pdCA2OTA0M2QwMjkzNmJiMDU3OWFjNTliNGVlMWVkOGRlYzM4YzM4ZGI3CitBdXRob3I6IExhbmRvbiBGdWxsZXIgPGxhbmRvbmZAYmlrZW1vbmtleS5vcmc+CitEYXRlOiAgIFNhdCBTZXAgMTggMTU6MzI6MDggMjAxMCAtMDcwMAogCi0JKiBzcmMvbWlwcy9mZmkuYyAoZmZpX3ByZWZfY2lmX21hY2hkZXApOiBzZXQgYGNpZi0+ZmxhZ3MnIHRvCi0JY29udGFpbiBgRkZJX1RZUEVfVUlOVDY0JyBhcyByZXR1cm4gdHlwZSBmb3IgYW55IDY0LWJpdAotCWludGVnZXIgKE8zMiBBQkkgb25seSkuCi0JKGZmaV9wcmVwX2Nsb3N1cmUpOiBuZXcgZnVuY3Rpb24uCi0JKGZmaV9jbG9zdXJlX21pcHNfaW5uZXJfTzMyKTogbmV3IGZ1bmN0aW9uLgotCSogc3JjL21pcHMvZmZpdGFyZ2V0Lmg6IERlZmluZSBgRkZJX0NMT1NVUkVTJyBhbmQKLQlgRkZJX1RSQU1QT0xJTkVfU0laRScgYXBwcm9wcmlhdGVseSBpZiB0aGUgQUJJIGlzIG8zMi4KLQkqIHNyYy9taXBzL28zMi5TIChmZmlfY2FsbF9PMzIpOiBhZGQgbGFiZWxzIGZvciAuZWhfZnJhbWUuIFJldHVybgotCTY0IGJpdCBpbnRlZ2VycyBjb3JyZWN0bHkuCi0JKGZmaV9jbG9zdXJlX08zMik6IG5ldyBmdW5jdGlvbi4KLQlBZGRlZCBEV0FSRi0yIHVud2luZCBpbmZvIGZvciBib3RoIGZ1bmN0aW9ucy4KKyAgICBXb3JrLWFyb3VuZCBsaWJmZmkncyBGUCBBQkkgZGV0ZWN0aW9uLgorICAgIAorICAgIE9uIGlPUywgd2UgbXVzdCB1c2UgdGhlIEFBUENTIGZsb2F0aW5nIHBvaW50IHJldHVybiB2YWx1ZSBjYWxsaW5nCisgICAgY29udmVudGlvbnMuIGxpYmZmaSdzIEFSTSBpbXBsZW1lbnRhdGlvbiB3aWxsIG9ubHkgdXNlIHRoZXNlIGNvbnZlbnRpb25zCisgICAgaWYgX19TT0ZURlBfXyBpcyBkZWZpbmVkLCB3aGljaCBpcyBub3QgdGhlIGNhc2Ugd2hlbiBHQ0MncworICAgIC1tZmxvYXQtYWJpIGRlZmF1bHRzIHRvICdzb2Z0ZnAnIGluc3RlYWQgb2YgJ3NvZnQnLiBUbyB3b3JrIGFyb3VuZCB0aGlzCisgICAgd2UgbWFudWFsbHkgZGVmaW5lIF9fU09GVEZQX18gZm9yIEFwcGxlIHBsYXRmb3JtcyBpbiB0aGUgQVJNLXNwZWNpZmljCisgICAgc3lzdi5TLgorICAgIAorICAgIFNlZSBhbHNvOgorICAgICAgaHR0cDovL2RldmVsb3Blci5hcHBsZS5jb20vbGlicmFyeS9pb3MvI2RvY3VtZW50YXRpb24vWGNvZGUvQ29uY2VwdHVhbC9pUGhvbmVPU0FCSVJlZmVyZW5jZS9JbnRyb2R1Y3Rpb24vSW50cm9kdWN0aW9uLmh0bWwKKyAgICAgIGh0dHA6Ly9pbmZvY2VudGVyLmFybS5jb20vaGVscC90b3BpYy9jb20uYXJtLmRvYy5paGkwMDQyZC9JSEkwMDQyRF9hYXBjcy5wZGYKIAotMjAwNC0wOC0xMCAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+Citjb21taXQgYTgyZTZjMzU0ZWE4MDUxMTQ2NDJhNmU0NDBhYmQwODMyY2IxZDIzZgorQXV0aG9yOiBMYW5kb24gRnVsbGVyIDxsYW5kb25mQGJpa2Vtb25rZXkub3JnPgorRGF0ZTogICBTYXQgU2VwIDE4IDE0OjQ0OjI0IDIwMTAgLTA3MDAKIAotCSogc3JjL3g4Ni9mZmk2NC5jIChmZmlfcHJlcF9hcmdzICk6IDgtYWxpZ24gYWxsIHN0YWNrIGFyZ3VtZW50cy4KKyAgICBBZGQgYSBzdHViIGlPUyBidWlsZCBzY3JpcHQgdG8gZHJpdmUgYXV0b2NvbmYKIAotMjAwNC0wOC0wMSAgUm9iZXJ0IE1pbGxhbiAgPHJvYmVydG1oQGdudS5vcmc+Citjb21taXQgODRlOGRlNmU5ZmMxOTM4OGY2ZjExMDJjMDEzYjdkMGQ1Mjk0MGVjYworQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgRnJpIEF1ZyA2IDAxOjM1OjEyIDIwMTAgLTA0MDAKIAotCSogY29uZmlndXJlLmFjOiBEZXRlY3Qga25ldGJzZC1nbnUgYW5kIGtmcmVlYnNkLWdudS4KLQkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKyAgICBSZXN0b3JlIGV4ZWN1dGUgcGVybWlzc2lvbnMKIAotMjAwNC0wNy0zMCAgTWFjaWVqIFcuIFJvenlja2kgIDxtYWNyb0BsaW51eC1taXBzLm9yZz4KK2NvbW1pdCAzYWVlY2M5ZWIxYTZmZWJhNjU0OTg0OWNkZDMzNWM5MjY0MTVhNGZjCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBUaHUgQXVnIDUgMTU6MTk6MDAgMjAxMCAtMDQwMAogCi0JKiBhY2luY2x1ZGUubTQgKEFDX0ZVTkNfTU1BUF9CTEFDS0xJU1QpOiBDaGVjayBmb3IgPHN5cy9tbWFuLmg+Ci0JYW5kIG1tYXAoKSBleHBsaWNpdGx5IGluc3RlYWQgb2YgcmVseWluZyBvbiBwcmVzZXQgYXV0b2NvbmYgY2FjaGUKLQl2YXJpYWJsZXMuCi0JKiBhY2xvY2FsLm00OiBSZWdlbmVyYXRlLgotCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorICAgIEZpeCB3aW42NC1zdHJ1Y3QtYXJncyBwYXRjaAogCi0yMDA0LTA3LTExICBVbHJpY2ggV2VpZ2FuZCAgPHV3ZWlnYW5kQGRlLmlibS5jb20+Citjb21taXQgMDBkMGI1OWNkMTNmODlhYjhiNDRiZDg5NGViN2YwYTEzMWZjYjQ3MgorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgVGh1IEF1ZyA1IDE0OjU2OjUzIDIwMTAgLTA0MDAKIAotCSogc3JjL3MzOTAvZmZpLmMgKGZmaV9wcmVwX2FyZ3MpOiBGaXggQyBhbGlhc2luZyB2aW9sYXRpb24uCi0JKGZmaV9jaGVja19mbG9hdF9zdHJ1Y3QpOiBSZW1vdmUgdW51c2VkIHByb3RvdHlwZS4KKyAgICBGaXggZGVidWcgYnVpbGQgZm9yIHdpbmRvd3MKIAotMjAwNC0wNi0zMCAgR2VvZmZyZXkgS2VhdGluZyAgPGdlb2Zma0BhcHBsZS5jb20+Citjb21taXQgYmRhNDg3ZTg3MDY0ZjI3OTY1MTU1NDU5YTYyZGM1MmE3NDQ3NzhkMAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgVGh1IEF1ZyA1IDA5OjAyOjQxIDIwMTAgLTA0MDAKIAotCSogc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jIChmbHVzaF9pY2FjaGUpOiAnOycgaXMgYSBjb21tZW50Ci0JY2hhcmFjdGVyIG9uIERhcndpbiwgdXNlICdcblx0JyBpbnN0ZWFkLgorICAgIERvbid0IHVzZSAtc2FmZXNlaCB3aXRoIG1sNjQKIAotMjAwNC0wNi0yNiAgTWF0dGhpYXMgS2xvc2UgIDxkb2tvQGRlYmlhbi5vcmc+Citjb21taXQgYzFkMjhiYThkNTAyOTc5NWFmMzEzZmZlYjgxYzk3ZWZjNmQ0Yzg0NworQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgVGh1IEF1ZyA1IDA4OjQ4OjE2IDIwMTAgLTA0MDAKIAotCSogbGlidG9vbC12ZXJzaW9uOiBGaXggdHlwbyBpbiByZXZpc2lvbi9hZ2UuCisgICAgc3RkY2FsbC14ODYtY2xvc3VyZS1maXgKIAotMjAwNC0wNi0xNyAgTWF0dGhpYXMgS2xvc2UgIDxkb2tvQGRlYmlhbi5vcmc+Citjb21taXQgNWZlYWNhZDRhNTZjODViM2YyM2EyNjdhMzBiMmNmNDI0Y2Q1OTU0OAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgVGh1IEF1ZyA1IDA4OjMwOjA0IDIwMTAgLTA0MDAKIAotCSogbGlidG9vbC12ZXJzaW9uOiBOZXcuCi0JKiBNYWtlZmlsZS5hbSAobGliZmZpX2xhX0xERkxBR1MpOiBVc2UgLXZlcnNpb24taW5mbyBmb3Igc29uYW1lLgotCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisgICAgZGVmaW5lIGdlbmVyaWMgc3ltYm9scyBjYXJlZnVsbHkKIAotMjAwNC0wNi0xNSAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KK2NvbW1pdCAxMGVhODQ4OTAwYmMzMDE4YWMyMTNjZWY1MmI0NGNhY2JlNWNiZWJjCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBUaHUgQXVnIDUgMDg6MjQ6MjcgMjAxMCAtMDQwMAogCi0JKiBNYWtlZmlsZS5hbTogUmVtb3ZlIHVzZWxlc3MgbXVsdGlsaWIgcnVsZXMuCi0JKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KLQkqIGFjbG9jYWwubTQ6IFJlZ2VuZXJhdGUgd2l0aCBhdXRvbWFrZSAxLjguNS4KLQkqIGNvbmZpZ3VyZS5hYzogUmVtb3ZlIHVzZWxlc3MgbXVsdGlsaWIgY29uZmlndXJ5LgotCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorICAgIGRvbid0IGNvcHkgd2luNjQgc3RydWN0IGFyZ3MKIAotMjAwNC0wNi0xNSAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KK2NvbW1pdCBkMTQxNzhiZTRjNDljM2FkYTQ0YTlmZTllZmUxMWQ0NDQzNzJkZGFiCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBGcmkgSnVsIDIzIDA5OjE0OjAwIDIwMTAgLTA0MDAKIAotCSogLmN2c2lnbm9yZTogTmV3IGZpbGUuCisgICAgRkZJX0xBU1RfQUJJIGZpeAogCi0yMDA0LTA2LTEwICBKYWt1YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNvbT4KK2NvbW1pdCAzZjViMTM3NWFiMWUyYjhlM2Q1OTNlMjFiMjcwOTdhNGE1MGY5YjgzCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBNb24gSnVsIDEyIDE0OjM5OjE4IDIwMTAgLTA0MDAKIAotCSogc3JjL2lhNjQvdW5peC5TIChmZmlfY2FsbF91bml4KTogSW5zZXJ0IGdyb3VwIGJhcnJpZXIgYnJlYWsKLQlmcF9kb25lLgotCShmZmlfY2xvc3VyZV9VTklYKTogRml4IGYxNC9mMTUgYWRqdXN0bWVudCBpZiBGTE9BVF9TWiBpcyBldmVyCi0JY2hhbmdlZCBmcm9tIDguCisgICAgcmViYXNlCiAKLTIwMDQtMDYtMDYgIFNlYW4gTWNOZWlsICA8c2VhbkBtY25laWwuY29tPgorY29tbWl0IGVhZjQ0NGVhYmM0Yzc4NzAzYzBmOThhYzAxOTdiMTYxOWMxYjFiZWYKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFNhdCBKdWwgMTAgMDg6NTk6MDkgMjAxMCAtMDQwMAogCi0JKiBjb25maWd1cmUuYWM6IEFkZCB4ODZfNjQtKi1mcmVlYnNkKiBzdXBwb3J0LgotCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorICAgIEZpeCBzZWxpbnV4IHRlc3QKIAotMjAwNC0wNC0yNiAgSm9lIEJ1Y2sgPGpidWNrQHdlbHNoLWJ1Y2sub3JnPgorY29tbWl0IDYzMDk3NDE1MjI0N2YxMDBlY2U0ZDQ0ZjEwYzM3MjFiYjQ1OTlmYmYKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AZ21hY2hpbmUuKG5vbmUpPgorRGF0ZTogICBXZWQgTWF5IDUgMjA6MTQ6NTYgMjAxMCAtMDQwMAogCi0JQnVnIDE1MDkzCi0JKiBjb25maWd1cmUuYWM6IFRlc3QgZm9yIGV4aXN0ZW5jZSBvZiBtbWFwIGFuZCBzeXMvbW1hbi5oIGJlZm9yZQotCWNoZWNraW5nIGJsYWNrbGlzdC4gIEZpeCBzdWdnZXN0ZWQgYnkgSmltIFdpbHNvbi4KLQkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKyAgICBNaWNoYXJsIEtvaGxlcidzIHNwZWxsaW5nIGZpeGVzCiAKLTIwMDQtMDQtMjYgIE1hdHQgQXVzdGVybiAgPGF1c3Rlcm5AYXBwbGUuY29tPgorY29tbWl0IDlkYzlhMjkzZjNkNDU4OWZjYWYwMmRkNDI4OGM4Y2ViYWVmYTUwOGUKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AZ21hY2hpbmUuKG5vbmUpPgorRGF0ZTogICBUdWUgQXByIDEzIDEwOjMzOjUyIDIwMTAgLTA0MDAKIAotCSogc3JjL3Bvd2VycGMvZGFyd2luLlM6IEdvIHRocm91Z2ggYSBub24tbGF6eSBwb2ludGVyIGZvciBpbml0aWFsCi0JRkRFIGxvY2F0aW9uLgotCSogc3JjL3Bvd2VycGMvZGFyd2luX2Nsb3N1cmUuUzogTGlrZXdpc2UuCisgICAgUmViYXNlIHRvIGxhdGVzdCBHQ0Mgc291cmNlcwogCi0yMDA0LTA0LTI0ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+Citjb21taXQgZjJjMmE0ZmNlOWIzZWNhOWYzOWI0ZjM1NDUxMThiYzI1NmRhNGE3MworQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBnbWFjaGluZS4obm9uZSk+CitEYXRlOiAgIFR1ZSBBcHIgMTMgMTA6MTk6MjggMjAxMCAtMDQwMAogCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3NjaGFyLmMgKG1haW4pOiBGaXggaW5pdGlhbGl6YXRpb24KLQllcnJvci4gUmVwb3J0ZWQgYnkgVGhvbWFzIEhlbGxlciA8dGhlbGxlckBweXRob24ubmV0Pi4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfc3Nob3J0LmMgKG1haW4pOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfdXNob3J0LmMgKG1haW4pOiBMaWtld2lzZS4KKyAgICBSZW1vdmUgd2FybmluZ3MgYW5kIGFkZCBPUy8yIHN1cHBvcnQKIAotMjAwNC0wMy0yMCAgTWF0dGhpYXMgS2xvc2UgIDxkb2tvQGRlYmlhbi5vcmc+Citjb21taXQgYzBiNjllNTdkNTI5ZTMzZDE4YjY1OGNjNTU3MmEyMWUzNjYzMjQ3YworQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBnbWFjaGluZS4obm9uZSk+CitEYXRlOiAgIFR1ZSBNYXIgMzAgMDg6MzA6MjIgMjAxMCAtMDQwMAogCi0JKiBzcmMvcGEvbGludXguUzogRml4IHR5cG8uCisgICAgRGFuIFdpdHRlJ3Mgd2luZG93cyBidWlsZCBmaXhlcy4KIAotMjAwNC0wMy0xOSAgTWF0dGhpYXMgS2xvc2UgIDxkb2tvQGRlYmlhbi5vcmc+Citjb21taXQgNTlhMjU5ZjRkMzQ4ZjU5M2I0NWY0NTIzMDlmNGQwMjBhMjgwNTFjNAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBnbWFjaGluZS4obm9uZSk+CitEYXRlOiAgIE1vbiBNYXIgMTUgMDU6NTc6NTEgMjAxMCAtMDQwMAogCi0JKiBNYWtlZmlsZS5hbTogVXBkYXRlLgotCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCi0JKiBzcmMvcGEvZmZpLmguaW46IFJlbW92ZS4KLQkqIHNyYy9wYS9mZml0YXJnZXQuaDogTmV3IGZpbGUuCisgICAgUmVtb3ZlIGp1bmsgZmlsZQogCi0yMDA0LTAyLTEwICBSYW5kb2xwaCBDaHVuZyAgPHRhdXNxQGRlYmlhbi5vcmc+Citjb21taXQgM2RlMWViMzZkMzdhNjY4MjllNjA2NDIxOTM5ODc0ZDBkNjBkODE2ZAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBnbWFjaGluZS4obm9uZSk+CitEYXRlOiAgIE1vbiBNYXIgMTUgMDU6NTc6MjQgMjAxMCAtMDQwMAogCi0JKiBNYWtlZmlsZS5hbTogQWRkIFBBIHN1cHBvcnQuCi0JKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KLQkqIGluY2x1ZGUvTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCi0JKiBjb25maWd1cmUuYWM6IEFkZCBQQSB0YXJnZXQuCi0JKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCi0JKiBzcmMvcGEvZmZpLmM6IE5ldyBmaWxlLgotCSogc3JjL3BhL2ZmaS5oLmluOiBBZGQgUEEgc3VwcG9ydC4KLQkqIHNyYy9wYS9saW51eC5TOiBOZXcgZmlsZS4KLQkqIHByZXBfY2lmLmM6IEFkZCBQQSBzdXBwb3J0LgorICAgIGZpeC1jb21tZW50cyBwYXRjaAogCi0yMDA0LTAzLTE2ICBIb3Nha2EgWXVqaSAgPGhvc0B0YW1hbmVnaS5vcmc+Citjb21taXQgYzM4MTNiNmQ3ZjhhNzc3NzAwZjRjNTg2MjE5MGMwZGIxNDhkNGRlOAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBnbWFjaGluZS4obm9uZSk+CitEYXRlOiAgIFR1ZSBKYW4gMjYgMTY6NDg6NTYgMjAxMCAtMDUwMAogCi0JKiBzcmMvdHlwZXMuYzogRml4IGFsaWdubWVudCBzaXplIG9mIFg4Nl9XSU4zMiBjYXNlIGludDY0IGFuZAotCWRvdWJsZS4KLQkqIHNyYy94ODYvZmZpLmMgKGZmaV9wcmVwX2FyZ3MpOiBSZXBsYWNlIGVjaWYtPmNpZi0+cnR5cGUtPnR5cGUKLQl3aXRoIGVjaWYtPmNpZi0+ZmxhZ3MuCi0JKGZmaV9jYWxsLCBmZmlfcHJlcF9pbmNvbWluZ19hcmdzX1NZU1YpOiBSZXBsYWNlIGNpZi0+cnR5cGUtPnR5cGUKLQl3aXRoIGNpZi0+ZmxhZ3MuCi0JKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogQWRkIFg4Nl9XSU4zMiBzdHJ1Y3QgY2FzZS4KLQkoZmZpX2Nsb3N1cmVfU1lTVik6IEFkZCAxIG9yIDItYnl0ZXMgc3RydWN0IGNhc2UgZm9yIFg4Nl9XSU4zMi4KLQkqIHNyYy94ODYvd2luMzIuUyAocmV0c3RydWN0MWIsIHJldHN0cnVjdDJiLCBzY19yZXRzdHJ1Y3QxYiwKLQlzY19yZXRzdHJ1Y3QyYik6IEFkZCBmb3IgMSBvciAyLWJ5dGVzIHN0cnVjdCBjYXNlLgorICAgIFJlYnVpbGQgTWFrZWZpbGVzIHdpdGggYXV0b21ha2UgMS4xMS4xIGZvciBDVkUtMjAwOS00MDI5LgogCi0yMDA0LTAzLTE1IEtlbGxleSBDb29rIDxrY29va0BnY2MuZ251Lm9yZz4KK2NvbW1pdCA4ZDI3ZjY4YmFhMzY1YmY4ODNiNjA1M2M1ZjZiYzgxOTY0NmQ1NDM0CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQGdtYWNoaW5lLihub25lKT4KK0RhdGU6ICAgRnJpIEphbiAxNSAxMTozNTozNyAyMDEwIC0wNTAwCiAKLQkqIGNvbmZpZ3VyZS5pbjogUmVuYW1lIGZpbGUgdG8gLi4uCi0JKiBjb25maWd1cmUuYWM6IC4uLiB0aGlzLgotCSogZmZpY29uZmlnLmguaW46IFJlZ2VuZXJhdGUuCi0JKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KLQkqIGluY2x1ZGUvTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCi0JKiB0ZXN0c3VpdGUvTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisgICAgTWVudGlvbiByZWNlbnQgY2hhbmdlcyBpbiBSRUFETUUKIAotMjAwNC0wMy0xMiAgTWF0dCBBdXN0ZXJuICA8YXVzdGVybkBhcHBsZS5jb20+Citjb21taXQgZmYzY2Q2OGI4Y2YyZDlhMjhjYWQ3YWE5YmVmZjQ2MjM2ZWFjZWM4YworQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBnbWFjaGluZS4obm9uZSk+CitEYXRlOiAgIEZyaSBKYW4gMTUgMTE6Mjc6MjQgMjAxMCAtMDUwMAogCi0JKiBzcmMvcG93ZXJwYy9kYXJ3aW4uUzogRml4IEVIIGluZm9ybWF0aW9uIHNvIGl0IGNvcnJlc3BvbmRzIHRvCi0JY2hhbmdlcyBpbiBFSCBmb3JtYXQgcmVzdWx0aW5nIGZyb20gYWRkaXRpb24gb2YgbGlua29uY2Ugc3VwcG9ydC4KLQkqIHNyYy9wb3dlcnBjL2Rhcndpbl9jbG9zdXJlLlM6IExpa2V3aXNlLgorICAgIEFkZCBtc3ZjLnNoIHdyYXBwZXIKIAotMjAwNC0wMy0xMSAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgotCSAgICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgorY29tbWl0IGNhZGViYTZjYjUzNDE0YTEyNTM1ODJmMTcxOWMyODY2NjVkZTdiNmMKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AZ21hY2hpbmUuKG5vbmUpPgorRGF0ZTogICBGcmkgSmFuIDE1IDEwOjQ2OjUxIDIwMTAgLTA1MDAKIAotCSogTWFrZWZpbGUuYW0gKEFVVE9NQUtFX09QVElPTlMpOiBTZXQgdGhlbS4KLQlSZW1vdmUgVlBBVEguIFJlbW92ZSBydWxlcyBmb3Igb2JqZWN0IGZpbGVzLiBSZW1vdmUgbXVsdGlsaWIgc3VwcG9ydC4KLQkoQU1fQ0NBU0ZMQUdTKTogQWRkLgotCSogY29uZmlndXJlLmluIChBQ19DT05GSUdfSEVBREVSUyk6IFJlbGFjZSBBTV9DT05GSUdfSEVBREVSLgotCShBQ19QUkVSRVEpOiBCdW1wIHZlcnNpb24gdG8gMi41OS4KLQkoQUNfSU5JVCk6IEZpbGwgd2l0aCB2ZXJzaW9uIGluZm8gYW5kIGJ1ZyBhZGRyZXNzLgotCShPUklHSU5BTF9MRF9GT1JfTVVMVElMSUJTKTogUmVtb3ZlLgotCShBTV9FTkFCTEVfTVVMVElMSUIpOiBVc2UgdGhpcyBpbnN0ZWFkIG9mIEFDX0FSR19FTkFCTEUuCi0JRGUtcHJlY2lvdXMgQ0Mgc28gdGhhdCB0aGUgcmlnaHQgZmxhZ3MgYXJlIHBhc3NlZCBkb3duIHRvIG11bHRpbGlicy4KLQkoQUNfTVNHX0VSUk9SKTogUmVwbGFjZSBvYnNvbGV0ZSBtYWNybyBBQ19FUlJPUi4KLQkoQUNfQ09ORklHX0ZJTEVTKTogUmVwbGFjZSBvYnNvbGV0ZSBtYWNybyBBQ19MSU5LX0ZJTEVTLgotCShBQ19PVVRQVVQpOiBSZW9yZ2FuaXplIHRoZSBvdXRwdXQgd2l0aCBBQ19DT05GSUdfQ09NTUFORFMuCi0JKiBjb25maWd1cmU6IFJlYnVpbHQuCi0JKiBhY2xvY2FsLm00OiBMaWtld2lzZS4KLQkqIE1ha2VmaWxlLmluLCBpbmNsdWRlL01ha2VmaWxlLmluLCB0ZXN0c3VpdGUvTWFrZWZpbGUuaW46IExpa2V3aXNlLgotCSogZmZpY29uZmlnLmguaW46IExpa2V3aXNlLgorICAgIE1pY3Jvc29mdCBWaXN1YWwgQyBwb3J0CiAKLTIwMDQtMDMtMTEgIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQHN1c2UuZGU+Citjb21taXQgMDczOWU3ZGMwMGRiNzY2ZWI2NGY1MDJlYzQxMzdiODE3NjM4YzlhMQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBnbWFjaGluZS4obm9uZSk+CitEYXRlOiAgIEZyaSBKYW4gMTUgMDk6NDg6MzMgMjAxMCAtMDUwMAogCi0JKiBzcmMvaWE2NC9mZmkuYyAoZmZpX3ByZXBfaW5jb21pbmdfYXJnc19VTklYKTogR2V0IGZsb2F0aW5nIHBvaW50Ci0JYXJndW1lbnRzIGZyb20gZnAgcmVnaXN0ZXJzIG9ubHkgZm9yIHRoZSBmaXJzdCA4IHBhcmFtZXRlciBzbG90cy4KLQlEb24ndCBjb252ZXJ0IGEgZmxvYXQgcGFyYW1ldGVyIHdoZW4gcGFzc2VkIGluIG1lbW9yeS4KKyAgICBBZGQgeDg2IFN1biBTdHVkaW8gY29tcGlsZXIgc3VwcG9ydAogCi0yMDA0LTAzLTA5ICBIYW5zLVBldGVyIE5pbHNzb24gIDxocEBheGlzLmNvbT4KK2NvbW1pdCBlZGZkZmQyZTg1YjhkMDFkMjQ1NTkzNGYxZDdmNGQ3ZWIyZjNjZjFjCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQGdtYWNoaW5lLihub25lKT4KK0RhdGU6ICAgV2VkIEphbiAxMyAwMjo1NjoxOSAyMDEwIC0wNTAwCiAKLQkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZSBmb3IgY29uZmlnL2FjY3Jvc3MubTQgY29ycmVjdGlvbi4KKyAgICBBZGQgY2xvc3VyZSBleGFtcGxlIGRvYwogCi0yMDA0LTAyLTI1ICBNYXR0IEtyYWFpICA8a3JhYWlAYWx1bW5pLmNtdS5lZHU+Citjb21taXQgN2I3YTQyZjIyMWNmMTcxZThkMDlkZjM0Y2FjNmRjMWZkODQ1OGNjMworQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBnbWFjaGluZS4obm9uZSk+CitEYXRlOiAgIFR1ZSBKYW4gMTIgMDk6MTQ6MTQgMjAxMCAtMDUwMAogCi0JKiBzcmMvcG93ZXJwYy9mZmkuYyAoZmZpX3ByZXBfYXJnc19TWVNWKTogQ2hhbmdlCi0JZWNpZi0+Y2lmLT5ieXRlcyB0byBieXRlcy4KLQkoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBBZGQgYnJhY2VzIGFyb3VuZCBuZXN0ZWQgaWYgc3RhdGVtZW50LgorICAgIFJlYmFzZSBmcm9tIEdDQwogCi0yMDA0LTAyLTA5ICBBbGFuIE1vZHJhICA8YW1vZHJhQGJpZ3BvbmQubmV0LmF1PgorY29tbWl0IDRiMThkMWY3M2RjNzczMzEzNzg2OWU0YWI1NzI1Y2I5MGMxYzhmZGUKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AZ21hY2hpbmUuKG5vbmUpPgorRGF0ZTogICBGcmkgSmFuIDEgMTA6MjQ6MjcgMjAxMCAtMDUwMAogCi0JKiBzcmMvdHlwZXMuYyAocG9pbnRlcik6IFBPV0VSUEM2NCBoYXMgOCBieXRlIHBvaW50ZXJzLgorICAgIEFkZCB4ODYtNjQgTWluZ1cgdG8gUkVBRE1FCiAKLQkqIHNyYy9wb3dlcnBjL2ZmaS5jIChmZmlfcHJlcF9hcmdzNjQpOiBDb3JyZWN0IGxvbmcgZG91YmxlIGhhbmRsaW5nLgotCShmZmlfY2xvc3VyZV9oZWxwZXJfTElOVVg2NCk6IEZpeCB0eXBvLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlLmM6IFBhc3MgLW1sb25nLWRvdWJsZS0xMjgKLQlmb3IgcG93ZXJwYzY0LSotKi4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mbG9hdC5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mbG9hdDIuYzogTGlrZXdpc2UuCitjb21taXQgYzMwNDJhZmFmM2Y4NGFiYmJlOWM5MWJmOWJjOTg5NmIwZDllYjAwMworQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBnbWFjaGluZS4obm9uZSk+CitEYXRlOiAgIEZyaSBKYW4gMSAwODowODowMiAyMDEwIC0wNTAwCiAKLTIwMDQtMDItMDggIEFsYW4gTW9kcmEgIDxhbW9kcmFAYmlncG9uZC5uZXQuYXU+CisgICAgUmVzZXQgcXVpbHQgcGF0Y2hlcyBwb3N0IDMuMC45IG1lcmdlIHdpdGggR0NDCiAKLQkqIHNyYy9wb3dlcnBjL2ZmaS5jIChmZmlfcHJlcF9jaWZfbWFjaGRlcCA8RkZJX0xJTlVYNjQ+KTogQ29ycmVjdAotCWxvbmcgZG91YmxlIGZ1bmN0aW9uIHJldHVybiBhbmQgbG9uZyBkb3VibGUgYXJnIGhhbmRsaW5nLgotCShmZmlfY2xvc3VyZV9oZWxwZXJfTElOVVg2NCk6IEZvcm1hdHRpbmcuICBEZWxldGUgdW51c2VkICJuZyIgdmFyLgotCVVzZSAiZW5kX3BmciIgaW5zdGVhZCBvZiAibmYiLiAgQ29ycmVjdCBsb25nIGRvdWJsZSBoYW5kbGluZy4KLQlMb2NhbGlzZSAidGVtcCIuCi0JKiBzcmMvcG93ZXJwYy9saW51eDY0LlMgKGZmaV9jYWxsX0xJTlVYNjQpOiBTYXZlIGYyIGxvbmcgZG91YmxlCi0JcmV0dXJuIHZhbHVlLgotCSogc3JjL3Bvd2VycGMvbGludXg2NF9jbG9zdXJlLlMgKGZmaV9jbG9zdXJlX0xJTlVYNjQpOiBBbGxvY2F0ZQotCXNwYWNlIGZvciBsb25nIGRvdWJsZSByZXR1cm4gdmFsdWUuICBBZGp1c3Qgc3RhY2sgZnJhbWUgYW5kIG9mZnNldHMuCi0JTG9hZCBmMiBsb25nIGRvdWJsZSByZXR1cm4uCitjb21taXQgYjAzMDRlOTY3OWJkZmVjNmFjNDVhNTdiNWM5NjU0MjY5NzI0OTQxOAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBnbWFjaGluZS4obm9uZSk+CitEYXRlOiAgIFRodSBEZWMgMzEgMTE6MzI6NDAgMjAwOSAtMDUwMAogCi0yMDA0LTAyLTA3ICBBbGFuIE1vZHJhICA8YW1vZHJhQGJpZ3BvbmQubmV0LmF1PgorICAgIFVwZGF0ZSB2ZXJzaW9uCiAKLQkqIHNyYy90eXBlcy5jOiBVc2UgMTYgYnl0ZSBsb25nIGRvdWJsZSBmb3IgUE9XRVJQQzY0LgorY29tbWl0IDJlN2UwM2QwMTRkOWM5YmY0MGU5N2NlNzVjYmEwODlhZDA1MmZhNmIKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AZ21hY2hpbmUuKG5vbmUpPgorRGF0ZTogICBUaHUgRGVjIDMxIDA3OjQzOjIyIDIwMDkgLTA1MDAKIAotMjAwNC0wMS0yNSAgRXJpYyBCb3RjYXpvdSAgPGVib3RjYXpvdUBsaWJlcnR5c3VyZi5mcj4KKyAgICBGaW5hbCB1cGRhdGVzIGJlZm9yZSAzLjAuOQogCi0JKiBzcmMvc3BhcmMvZmZpLmMgKGZmaV9wcmVwX2FyZ3NfdjkpOiBTaGlmdCB0aGUgcGFyYW1ldGVyIGFycmF5Ci0Jd2hlbiB0aGUgc3RydWN0dXJlIHJldHVybiBhZGRyZXNzIGlzIHBhc3NlZCBpbiAlbzAuCi0JKGZmaV9WOV9yZXR1cm5fc3RydWN0KTogUmVuYW1lIGludG8gZmZpX3Y5X2xheW91dF9zdHJ1Y3QuCi0JKGZmaV92OV9sYXlvdXRfc3RydWN0KTogQWxpZ24gdGhlIGZpZWxkIGZvbGxvd2luZyBhIG5lc3RlZCBzdHJ1Y3R1cmUKLQlvbiBhIHdvcmQgYm91bmRhcnkuICBVc2UgbWVtbW92ZSBpbnN0ZWFkIG9mIG1lbWNweS4KLQkoZmZpX2NhbGwpOiBVcGRhdGUgY2FsbCB0byBmZmlfVjlfcmV0dXJuX3N0cnVjdC4KLQkoZmZpX3ByZXBfY2xvc3VyZSk6IERlZmluZSAnY3R4JyBvbmx5IGZvciBWOC4KLQkoZmZpX2Nsb3N1cmVfc3BhcmNfaW5uZXIpOiBDbG9uZSBpbnRvIGZmaV9jbG9zdXJlX3NwYXJjX2lubmVyX3Y4Ci0JYW5kIGZmaV9jbG9zdXJlX3NwYXJjX2lubmVyX3Y5LgotCShmZmlfY2xvc3VyZV9zcGFyY19pbm5lcl92OCk6IFJldHVybiBsb25nIGRvdWJsZXMgYnkgcmVmZXJlbmNlLgotCUFsd2F5cyBza2lwIHRoZSBzdHJ1Y3R1cmUgcmV0dXJuIGFkZHJlc3MuICBGb3Igc3RydWN0dXJlcyBhbmQgbG9uZwotCWRvdWJsZXMsIGNvcHkgdGhlIGFyZ3VtZW50IGRpcmVjdGx5LgotCShmZmlfY2xvc3VyZV9zcGFyY19pbm5lcl92OSk6IFNraXAgdGhlIHN0cnVjdHVyZSByZXR1cm4gYWRkcmVzcyBvbmx5Ci0JaWYgcmVxdWlyZWQuICBTaGlmdCB0aGUgbWF4aW11bSBmbG9hdGluZy1wb2ludCBzbG90IGFjY29yZGluZ2x5LiAgRm9yCi0JYmlnIHN0cnVjdHVyZXMsIGNvcHkgdGhlIGFyZ3VtZW50IGRpcmVjdGx5OyBvdGhlcndpc2UsIGxlZnQtanVzdGlmeSB0aGUKLQlhcmd1bWVudCBhbmQgY2FsbCBmZmlfdjlfbGF5b3V0X3N0cnVjdCB0byBsYXkgb3V0IHRoZSBzdHJ1Y3R1cmUgb24KLQl0aGUgc3RhY2suCi0JKiBzcmMvc3BhcmMvdjguUzogVW5kZWYgU1RBQ0tGUkFNRSBiZWZvcmUgZGVmaW5pbmcgaXQuCi0JKGZmaV9jbG9zdXJlX3Y4KTogUGFzcyB0aGUgc3RydWN0dXJlIHJldHVybiBhZGRyZXNzLiAgVXBkYXRlIGNhbGwgdG8KLQlmZmlfY2xvc3VyZV9zcGFyY19pbm5lcl92OC4gIFNob3J0LWNpcmN1aXQgRkZJX1RZUEVfSU5UIGhhbmRsaW5nLgotCVNraXAgdGhlICd1bmltcCcgaW5zbiB3aGVuIHJldHVybmluZyBsb25nIGRvdWJsZXMgYW5kIHN0cnVjdHVyZXMuCi0JKiBzcmMvc3BhcmMvdjkuUzogVW5kZWYgU1RBQ0tGUkFNRSBiZWZvcmUgZGVmaW5pbmcgaXQuCi0JKGZmaV9jbG9zdXJlX3Y5KTogSW5jcmVhc2UgdGhlIGZyYW1lIHNpemUgYnkgMiB3b3Jkcy4gIFNob3J0LWNpcmN1aXQKLQlGRklfVFlQRV9JTlQgaGFuZGxpbmcuICBMb2FkIHN0cnVjdHVyZXMgYm90aCBpbiBpbnRlZ2VycyBhbmQKLQlmbG9hdGluZy1wb2ludCByZWdpc3RlcnMgb24gcmV0dXJuLgotCSogUkVBRE1FOiBVcGRhdGUgc3RhdHVzIG9mIHRoZSBTUEFSQyBwb3J0LgorY29tbWl0IGFlYTcwNmM1MjgyNWM4ZWVlNjc3ZmZhN2ZkYmRkM2FlZDE3MjU0OTIKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AZ21hY2hpbmUuKG5vbmUpPgorRGF0ZTogICBUdWUgRGVjIDI5IDEwOjA5OjMxIDIwMDkgLTA1MDAKIAotMjAwNC0wMS0yNCAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorICAgIHJlYWxseSAzLjAuOXJjMTIKIAotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3B5b2JqYy10Yy5jIChtYWluKTogVHJlYXQgcmVzdWx0IHZhbHVlCi0JYXMgb2YgdHlwZSBmZmlfYXJnLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDMuYyAobWFpbik6IEZpeCBDSEVDSy4KK2NvbW1pdCAwY2ZlNjBlOWQxM2YxMzJiODg5OTVjZmVlNDFmMjE1NjM0NGY2ZmEyCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQGdtYWNoaW5lLihub25lKT4KK0RhdGU6ICAgVHVlIERlYyAyOSAxMDowNjowNCAyMDA5IC0wNTAwCiAKLTIwMDQtMDEtMjIgIFVscmljaCBXZWlnYW5kICA8dXdlaWdhbmRAZGUuaWJtLmNvbT4KKyAgICAzLjAuOXJjMTIKIAotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191aW50LmMgKGNsc19yZXRfdWludF9mbik6IFRyZWF0IHJlc3VsdAotCXZhbHVlIGFzIG9mIHR5cGUgZmZpX2FyZywgbm90IHVuc2lnbmVkIGludC4KK2NvbW1pdCAxNGUyZTkyZTg2NDU4MDRiNjk0MGIzZTk2Yzk4ZTlmN2YzODRhNmIyCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQGdtYWNoaW5lLihub25lKT4KK0RhdGU6ICAgU3VuIERlYyAyNyAyMTowMzozMyAyMDA5IC0wNTAwCiAKLTIwMDQtMDEtMjEgIE1pY2hhZWwgUml0emVydCAgPHJpdHplcnRAdC1vbmxpbmUuZGU+CisgICAgMy4wLjlyYzExCiAKLQkqIGZmaTY0LmMgKGZmaV9wcmVwX2FyZ3MpOiBDYXN0IHRoZSBSSFMgb2YgYW4gYXNzaWdubWVudCBpbnN0ZWFkCi0Jb2YgdGhlIExIUy4KK2NvbW1pdCA4ODQ0MDI3ODdiZjhlYWY3ZWMyMDcwODUwMzdjZjhhY2UyZjY2MGVjCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQGdtYWNoaW5lLihub25lKT4KK0RhdGU6ICAgU2F0IERlYyAyNiAxMjo1NzoyMyAyMDA5IC0wNTAwCiAKLTIwMDQtMDEtMTIgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKyAgICBIUFVYIHN1cHBvcnQgYW5kIGF2cjMyIHRlc3QgZml4ZXMuCiAKLQkqIHRlc3RzdWl0ZS9saWIvbGliZmZpLWRnLmV4cDogU2V0IExEX0xJQlJBUllfUEFUSF8zMiBmb3IKLQlTb2xhcmlzLgorY29tbWl0IDAxYzc4NzU2YWZmMjJlZmIxZjEyMmY4ZTkzZTA2OGQ3YmYyMTg1YzcKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AZ21hY2hpbmUuKG5vbmUpPgorRGF0ZTogICBTYXQgRGVjIDI2IDEwOjA1OjE4IDIwMDkgLTA1MDAKIAotMjAwNC0wMS0wOCAgUmFpbmVyIE9ydGggIDxyb0BUZWNoRmFrLlVuaS1CaWVsZWZlbGQuREU+CisgICAgMy4wLjlyYzkKIAotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2ZmaXRlc3QuaCAoYWxsb2NhdGVfbW1hcCk6IENhc3QgTUFQX0ZBSUxFRAotCXRvIHZvaWQgKi4KK2NvbW1pdCA3MDg2ODQ2NDY1MTMyMDI2OGQ3OWM2ODk0ZGI1YTUwZmRjMTEwMzJhCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQGdtYWNoaW5lLihub25lKT4KK0RhdGU6ICAgU2F0IERlYyAyNiAwOTo1ODowMyAyMDA5IC0wNTAwCiAKLTIwMDMtMTItMTAgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQHJlZGhhdC5jb20+CisgICAgUmVtb3ZlIHhmYWlscyBmb3IgbWlwcyBhbmQgYXJtCiAKLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fcG9pbnRlci5jOiBDYXN0IHBvaW50ZXJzIHRvCi0Jc2l6ZV90IGluc3RlYWQgb2YgaW50LgorY29tbWl0IDgzOGQ0YWQ5MjBlYzg1Y2Y1Y2EzYjUxMTIyMWQ2N2Y2ZDlhOTkwMjQKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AZ21hY2hpbmUuKG5vbmUpPgorRGF0ZTogICBTYXQgRGVjIDI2IDA5OjU3OjI3IDIwMDkgLTA1MDAKIAotMjAwMy0xMi0wNCAgSG9zYWthIFl1amkgIDxob3NAdGFtYW5lZ2kub3JnPgorICAgIFJlbW92ZSBhIGJ1bmNoIG9mIHhmYWlscy4KIAotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL21hbnlfd2luMzIuYzogSW5jbHVkZSA8ZmxvYXQuaD4uCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbWFueV93aW4zMi5jIChtYWluKTogUmVwbGFjZSB2YXJpYWJsZQotCWludCBpIHdpdGggdW5zaWduZWQgbG9uZyB1bC4KK2NvbW1pdCA3ZTM3ZWFhZjc3MmY0ODkwNmU2OTYxOGM3NzNiMGEzNmMzOTI3ZGU5CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQGdtYWNoaW5lLihub25lKT4KK0RhdGU6ICAgU2F0IERlYyAyNiAwNzo0Njo1MCAyMDA5IC0wNTAwCiAKLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDY0LmM6IE5ldyB0ZXN0IGNhc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQ2NC5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDMyLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50MzIuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3VpbnQxNi5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDE2LmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9mbG9hdC5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fZG91YmxlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9wb2ludGVyLmM6IExpa2V3aXNlLgorICAgIEZpeCBodWdlX3N0cnVjdCBmb3Igc29sYXJpcwogCi0yMDAzLTEyLTAyICBIb3Nha2EgWXVqaSAgPGhvc0B0YW1hbmVnaS5vcmc+Citjb21taXQgMDdjYzdhMzcxOTRiYzM0MDY0ZWJlZDdmMjcyNDMzM2E3OTg0MTFjOAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBnbWFjaGluZS4obm9uZSk+CitEYXRlOiAgIFNhdCBEZWMgMjYgMDc6MjM6MDQgMjAwOSAtMDUwMAogCi0JUFIgb3RoZXIvMTMyMjEKLQkqIHNyYy94ODYvZmZpLmMgKGZmaV9wcmVwX2FyZ3MsIGZmaV9wcmVwX2luY29taW5nX2FyZ3NfU1lTVik6Ci0JQWxpZ24gYXJndW1lbnRzIHRvIDMyIGJpdHMuCisgICAgMy4wLjlyYzgKIAotMjAwMy0xMi0wMSAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorY29tbWl0IDJiOWJlMTZmZmFiYzgxMzI2MTI4YmMxYmJkZGRmZjhkZGM1ZDEzZDMKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AZ21hY2hpbmUuKG5vbmUpPgorRGF0ZTogICBTYXQgRGVjIDI2IDA3OjA0OjQ1IDIwMDkgLTA1MDAKIAotCVBSIG90aGVyLzEzMjIxCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3NzaG9ydC5jOiBOZXcgdGVzdCBjYXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV9zc2hvcnRjaGFyLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV91Y2hhci5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfc2NoYXIuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3VzaG9ydGNoYXIuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3VzaG9ydC5jOiBMaWtld2lzZS4KKyAgICAzLjAuOXJjOAogCi0JKiB0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvdW53aW5kdGVzdC5jYzogQ29zbWV0aWNzLgorY29tbWl0IDk0NThkODhmNjc2ZTlhMjFhYjg5OTNhNTRlMTY3NTRiMTE2ODc0MTkKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AZ21hY2hpbmUuKG5vbmUpPgorRGF0ZTogICBTYXQgRGVjIDI2IDA3OjAyOjI3IDIwMDkgLTA1MDAKIAotMjAwMy0xMS0yNiAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgorICAgIFJlYmFzZSBmcm9tIEdDQwogCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmZpdGVzdC5oOiBJbmNsdWRlIDxmY250bC5oPi4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC9mZml0ZXN0Y3h4Lmg6IExpa2V3aXNlLgorY29tbWl0IDZhMzQxMjQxNzU5M2YwNjhhMDRkYzYxNjNmNDI2OWNiMjk1YWQ1Y2EKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AZ21hY2hpbmUuKG5vbmUpPgorRGF0ZTogICBTYXQgRGVjIDI2IDA2OjUxOjMzIDIwMDkgLTA1MDAKIAotMjAwMy0xMS0yMiAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorICAgIEFkZCBBbmRyZWFzIFNjaHdhYidzIHBvd2VycGMgZml4CiAKLQkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgotCSogY29uZmlndXJlOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC91bndpbmR0ZXN0LmNjOiBDb252ZXJ0IHRoZSBtbWFwIHRvCi0JdGhlIHJpZ2h0IHR5cGUuCitjb21taXQgMzljODc5MmVjZTEwNDNmNDFmNGMzOTVhMmNlNzFmNGNmMGZmNDY3NAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBnbWFjaGluZS4obm9uZSk+CitEYXRlOiAgIEZyaSBEZWMgMjUgMjE6NTI6MjggMjAwOSAtMDUwMAogCi0yMDAzLTExLTIxICBBbmRyZWFzIEphZWdlciAgPGFqQHN1c2UuZGU+Ci0JICAgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKyAgICAzLjAuOXJjNwogCi0JKiBhY2luY2x1ZGUubTQ6IEFkZCBBQ19GVU5DX01NQVBfQkxBQ0tMSVNULgotCSogY29uZmlndXJlLmluOiBDYWxsIEFDX0ZVTkNfTU1BUF9CTEFDS0xJU1QuCi0JKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KLQkqIGFjbG9jYWwubTQ6IExpa2V3aXNlLgotCSogY29uZmlndXJlOiBMaWtld2lzZS4KLQkqIGZmaWNvbmZpZy5oLmluOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWIvbGliZmZpLWRnLmV4cDogQWRkIGluY2x1ZGUgZGlyLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2ZmaXRlc3QuaDogQWRkIE1NQVAgZGVmaW5pdGlvbnMuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvZmZpdGVzdGN4eC5oOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMC5jOiBVc2UgTU1BUCBmdW5jdGlvbmFsaXR5Ci0JZm9yIGZmaV9jbG9zdXJlIGlmIGF2YWlsYWJsZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMi5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMy5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNC5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTJieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xNmJ5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE4Ynl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTlieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xXzFieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yMGJ5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzIwYnl0ZTEuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzI0Ynl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMmJ5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzNfMWJ5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzNieXRlMS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM2J5dGUyLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc180XzFieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc180Ynl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNWJ5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzY0Ynl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNmJ5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzdieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc184Ynl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOWJ5dGUxLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc185Ynl0ZTIuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2RvdWJsZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZmxvYXQuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NjaGFyLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zaW50LmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zc2hvcnQuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VjaGFyLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191aW50LmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191bG9uZ2xvbmcuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VzaG9ydC5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0LmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QxLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QyLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QzLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3Byb2JsZW0xLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL3Vud2luZHRlc3QuY2M6IExpa2V3aXNlLgorY29tbWl0IDFkMDRhZjUyZTNlMjRkYjY5Zjc0MjA2NDY5NGMyMmY4ZGY1Y2M3MGUKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AZ21hY2hpbmUuKG5vbmUpPgorRGF0ZTogICBGcmkgRGVjIDI1IDA5OjUwOjM2IDIwMDkgLTA1MDAKIAotMjAwMy0xMS0yMCAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorICAgIFVwZGF0ZWQgc29tZSBtaXBzIFhGQUlMcwogCi0JKiB0ZXN0c3VpdGUvbGliL2xpYmZmaS1kZy5leHA6IE1ha2UgdGhlIC1sZ2NjX3MgY29uZGl0aW9uYWwuCitjb21taXQgMjZlOTUwOWM5Yjc5MjliYzRmY2Y2OTcwNzE2OTkwNTFhNjUyYjFmZAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBnbWFjaGluZS4obm9uZSk+CitEYXRlOiAgIEZyaSBEZWMgMjUgMDI6MTk6MjMgMjAwOSAtMDUwMAogCi0yMDAzLTExLTE5ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisgICAgQ2xlYW4gdXAgQ2hhbmdlTG9nLmxpYmZmaSBmb3Igb2xkZXIgcGF0Y2hlcy4KIAotCSogdGVzdHN1aXRlL2xpYi9saWJmZmktZGcuZXhwOiBBZGQgRFlMRF9MSUJSQVJZX1BBVEggZm9yIGRhcndpbi4KLQlBZGQgLWxnY2NfcyB0byBhZGRpdGlvbmFsIGZsYWdzLgorY29tbWl0IDljMTU3ZDMyMTVlNDM5Mzc3N2Y4M2ViNmZhODAxZGY2NTI4ZjQwZDcKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AZ21hY2hpbmUuKG5vbmUpPgorRGF0ZTogICBGcmkgRGVjIDI1IDAyOjE1OjQwIDIwMDkgLTA1MDAKIAotMjAwMy0xMS0xMiAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorICAgIENsZWFuIHVwIHVuZGVmaW5lX0FDX0FSR19WQVJfUFJFQ0lPVVMgcGF0Y2guCiAKLQkqIGNvbmZpZ3VyZS5pbiwgaW5jbHVkZS9NYWtlZmlsZS5hbTogUFIgbGliZ2NqLzExMTQ3LCBpbnN0YWxsCi0JdGhlIGZmaXRhcmdldC5oIGhlYWRlciBmaWxlIGluIGEgZ2NjIHZlcnNpb25lZCBhbmQgdGFyZ2V0Ci0JZGVwZW5kZW50IHBsYWNlLgotCSogY29uZmlndXJlOiBSZWdlbmVyYXRlZC4KLQkqIE1ha2VmaWxlLmluLCBpbmNsdWRlL01ha2VmaWxlLmluOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9NYWtlZmlsZS5pbjogTGlrZXdpc2UuCitjb21taXQgZDIyZGUwNWIwYmZjNDgwNzY2YmMxMjQwNjE1Y2UyODMwZWVlNzFiOAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBnbWFjaGluZS4obm9uZSk+CitEYXRlOiAgIEZyaSBEZWMgMjUgMDI6MDQ6MjMgMjAwOSAtMDUwMAogCi0yMDAzLTExLTA5ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisgICAgRml4IHBhdGNoZXMKIAotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4wLmM6IFByaW50IHJlc3VsdCBhbmQgY2hlY2sKLQl3aXRoIGRnLW91dHB1dCB0byBtYWtlIGRlYnVnZ2luZyBlYXNpZXIuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjEuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjIuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjMuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjQuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzEyYnl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTZieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xOGJ5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE5Ynl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMV8xYnl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjBieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yMGJ5dGUxLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yNGJ5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzJieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zXzFieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zYnl0ZTEuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzNieXRlMi5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNF8xYnl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNGJ5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzVieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc182NGJ5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzZieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc183Ynl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOGJ5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzlieXRlMS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOWJ5dGUyLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kb3VibGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2Zsb2F0LmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zY2hhci5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc2ludC5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc3Nob3J0LmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191Y2hhci5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWludC5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWxvbmdsb25nLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191c2hvcnQuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcHJvYmxlbTEuYzogTGlrZXdpc2UuCitjb21taXQgMWZlM2RjN2MyMGRjNGRiZDhmZWQwZDE5Yzg2MTgwMjdkNDRlZDk3MQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBnbWFjaGluZS4obm9uZSk+CitEYXRlOiAgIEZyaSBEZWMgMjUgMDE6Mzk6MDAgMjAwOSAtMDUwMAogCi0JKiB0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvdW53aW5kdGVzdC5jYzogTWFrZSBmZmlfY2xvc3VyZQotCXN0YXRpYy4KKyAgICBBZGQgd2luZG93cyBzdXBwb3J0IHBhdGNoLgogCi0yMDAzLTExLTA4ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+Citjb21taXQgZjdjMGJjNjEzYTg4ZjdkYmMyZDE4YjM0NWMxMGZhNDM4ODMzYzE3MAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBnbWFjaGluZS4obm9uZSk+CitEYXRlOiAgIEZyaSBEZWMgMjUgMDE6MjI6MTEgMjAwOSAtMDUwMAogCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzlieXRlMi5jOiBOZXcgdGVzdCBjYXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc185Ynl0ZTEuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzY0Ynl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjBieXRlMS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTlieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xOGJ5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjQuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NjaGFyLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zaW50LmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zc2hvcnQuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDIuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDMuYzogTGlrZXdpc2UuCisgICAgMy4wLjlyYzYKIAotMjAwMy0xMS0wOCAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorY29tbWl0IGM3ZmEyZGE4MjYwMjU4YzExYWIxZGM3YWMwNmZiNjExYTJjMWI1MGYKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AZ21hY2hpbmUuKG5vbmUpPgorRGF0ZTogICBUaHUgRGVjIDI0IDA3OjIyOjQ0IDIwMDkgLTA1MDAKIAotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kb3VibGUuYzogRG8gYSBjaGVjayBvbiB0aGUgcmVzdWx0LgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191Y2hhci5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWludC5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWxvbmdsb25nLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191c2hvcnQuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX3NjLmM6IENsZWFudXAgd2hpdGVzcGFjZXMuCisgICAgMy4wLjlyYzYKIAotMjAwMy0xMS0wNiAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorY29tbWl0IGRhMTFiZWNlMGZkZTY2ZmMwMjY4ZGIzYTAxMjA3ZGRhODU3ZTI1ZDIKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AZ21hY2hpbmUuKG5vbmUpPgorRGF0ZTogICBUaHUgRGVjIDI0IDA1OjM0OjQ2IDIwMDkgLTA1MDAKIAotCSogc3JjL3ByZXBfY2lmLmMgKGZmaV9wcmVwX2NpZik6IE1vdmUgdGhlIHZhbGlkaXR5IGNoZWNrIGFmdGVyCi0JdGhlIGluaXRpYWxpemF0aW9uLgorICAgIFJlbGVhc2UgMy4wLjlyYzUKIAotMjAwMy0xMC0yMyAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorY29tbWl0IGUzMzk5YjExZWRlYWI1NDZiMDY2YmZjMTg1NzRmM2VkYjkwNWQwZGMKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AZ21hY2hpbmUuKG5vbmUpPgorRGF0ZTogICBUaHUgRGVjIDI0IDAxOjA5OjMyIDIwMDkgLTA1MDAKIAotCSogc3JjL2phdmFfcmF3X2FwaS5jIChmZmlfamF2YV9wdHJhcnJheV90b19yYXcpOiBSZXBsYWNlCi0JRkZJX0FTU0VSVChGQUxTRSkgd2l0aCBGRklfQVNTRVJUKDApLgorICAgIFVwZGF0ZSBSRUFETUUKIAotMjAwMy0xMC0yMiAgRGF2aWQgRGFuZXkgIDxkZGFuZXlAYXZ0cmV4LmNvbT4KK2NvbW1pdCAxMTVhYjM2ZmNlZWU2OTc0MGEwMWNlNDliYzI3ZTE5MDhjYzIzN2IxCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQGdtYWNoaW5lLihub25lKT4KK0RhdGU6ICAgVGh1IERlYyAyNCAwMDoyMjowMCAyMDA5IC0wNTAwCiAKLQkqIHNyYy9taXBzL2ZmaXRhcmdldC5oOiBSZXBsYWNlIHVuZGVmaW5lZCBVSU5UMzIgYW5kIGZyaWVuZHMgd2l0aAotCV9fYXR0cmlidXRlX18oKF9fbW9kZV9fKF9fU0lfXykpKSBhbmQgZnJpZW5kcy4KKyAgICBVcGRhdGUgbWlzc2luZyBjaGFuZ2VzIGZvciAzLjAuOXI0LgogCi0yMDAzLTEwLTIyICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBzdXNlLmRlPgorY29tbWl0IGY4YzdhMjQ1YmY1YTgwYmQ3ZTczMGVjMDNmY2FkMTdjOGRjZmNiMDcKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AZ21hY2hpbmUuKG5vbmUpPgorRGF0ZTogICBXZWQgRGVjIDIzIDIzOjQ2OjIyIDIwMDkgLTA1MDAKIAotCSogc3JjL2lhNjQvZmZpLmM6IFJlcGxhY2UgRkFMU0UvVFJVRSB3aXRoIGZhbHNlL3RydWUuCisgICAgU3dpdGNoIHRvIHF1aWx0LiBSZWJhc2UgdG8gbGF0ZXN0IEdDQy4KIAotMjAwMy0xMC0yMSAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorY29tbWl0IGNlODA2NzcyZjAyMzg3YjlhNzRmNjQ5NmEyNjNhMzY4YmNjZDVkNTkKK01lcmdlOiBjZDk4ODEzIGRjYzFmNmIKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIE1vbiBPY3QgNSAwMDo0MTozNSAyMDA5IC0wNDAwCiAKLQkqIGNvbmZpZ3VyZS5pbjogQUNfTElOS19GSUxFUyhmZml0YXJnZXQuaCkuCi0JKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCi0JKiBNYWtlZmlsZS5pbjogTGlrZXdpc2UuCi0JKiBpbmNsdWRlL01ha2VmaWxlLmluOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9NYWtlZmlsZS5pbjogTGlrZXdpc2UuCi0JKiBmZmljb25maWcuaC5pbjogTGlrZXdpc2UuCisgICAgTWVyZ2UgYnJhbmNoICdtYXN0ZXInIG9mIGdpdEBnaXRodWIuY29tOmF0Z3JlZW4vbGliZmZpCiAKLTIwMDMtMTAtMjEgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+Ci0JICAgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQHJlZGhhdC5jb20+Citjb21taXQgZGNjMWY2YjRmMWZmZDI3MTNiZjY4Yjc5MWExM2Y4NWQ0NTVjOGIxYgorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgTW9uIE9jdCA1IDAwOjI5OjMzIDIwMDkgLTA0MDAKIAotCUF2b2lkIHRoYXQgZmZpLmggaW5jbHVkZXMgZmZpY29uZmlnLmguCisgICAgTW9yZSBjbGVhbiB1cC4KIAotCSogTWFrZWZpbGUuYW0gKEVYVFJBX0RJU1QpOiBJbmNsdWRlIGZmaXRhcmdldC5oIGZpbGVzCi0JKFRBUkdFVF9TUkNfTUlQU19HQ0MpOiBSZW5hbWVkIHRvIFRBUkdFVF9TUkNfTUlQU19JUklYLgotCShUQVJHRVRfU1JDX01JUFNfU0dJKTogUmVtb3ZlZC4KLQkoTUlQU19HQ0MpOiBSZW5hbWVkIHRvIFRBUkdFVF9TUkNfTUlQU19JUklYLgotCShNSVBTX1NHSSk6IFJlbW92ZWQuCi0JKENMRUFORklMRVMpOiBSZW1vdmVkLgotCShtb3N0bHljbGVhbi1hbSwgY2xlYW4tYW0sIG1vc3RseWNsZWFuLXN1YiwgY2xlYW4tc3ViKTogTmV3Ci0JdGFyZ2V0cy4KLQkqIGFjY29uZmlnLmg6IFJlbW92ZWQuCi0JKiBjb25maWd1cmUuaW46IENvbXB1dGUgc2l6ZW9mcyBvbmx5IGZvciBkb3VibGUgYW5kIGxvbmcgZG91YmxlLgotCVVzZSB0aGVtIHRvIGRlZmluZSBhbmQgc3Vic3QgSEFWRV9MT05HX0RPVUJMRS4gIEluY2x1ZGUgY29tbWVudHMKLQlpbnRvIEFDX0RFRklORSBpbnN0ZWFkIG9mIHVzaW5nIGFjY29uZmlnLmguICBDcmVhdGUKLQlpbmNsdWRlL2ZmaXRhcmdldC5oIGluc3RlYWQgb2YgaW5jbHVkZS9mZmljb25maWcuaC4gIFJlbmFtZQotCU1JUFNfR0NDIHRvIE1JUFNfSVJJWCwgZHJvcCBNSVBTX1NHSSBzaW5jZSB3ZSBhcmUgaW4gZ2NjJ3MgdHJlZS4KLQlBQ19ERUZJTkUgRUhfRlJBTUVfRkxBR1MuCi0JKiBpbmNsdWRlL01ha2VmaWxlLmFtIChESVNUQ0xFQU5GSUxFUyk6IE5ldyBhdXRvbWFrZSBtYWNyby4KLQkoaGFja19EQVRBKTogQWRkIGZmaXRhcmdldC5oLgotCSogaW5jbHVkZS9mZmkuaC5pbjogUmVtb3ZlIGFsbCBzeXN0ZW0gc3BlY2lmaWMgZGVmaW5pdGlvbnMuCi0JRGVjbGFyZSByYXcgQVBJIGV2ZW4gaWYgaXQgaXMgbm90IGluc3RhbGxlZCwgd2h5IGJvdGhlcj8KLQlVc2UgbGltaXRzLmggaW5zdGVhZCBvZiBTSVpFT0ZfKiB0byBkZWZpbmUgZmZpX3R5cGVfKi4gIERvCi0Jbm90IGRlZmluZSBFSF9GUkFNRV9GTEFHUywgaXQgaXMgaW4gZmZpY29uZmlnLmggbm93LiAgSW5jbHVkZQotCWZmaXRhcmdldC5oIGluc3RlYWQgb2YgZmZpY29uZmlnLmguICBSZW1vdmUgQUxJR04gbWFjcm8uCi0JKFVJTlRfQVJHLCBJTlRfQVJHKTogUmVtb3ZlZCwgdXNlIGZmaV9hcmcgYW5kIGZmaV9zYXJnIGluc3RlYWQuCi0JKiBpbmNsdWRlL2ZmaV9jb21tb24uaCAoYm9vbCk6IERvIG5vdCBkZWZpbmUuCi0JKGZmaV9hc3NlcnQpOiBBY2NlcHQgZmFpbGVkIGFzc2VydGlvbi4KLQkoZmZpX3R5cGVfdGVzdCk6IFJldHVybiB2b2lkIGFuZCBhY2NlcHQgZmlsZS9saW5lLgotCShGRklfQVNTRVJUKTogUGFzcyBzdHJpbmdpemVkIGZhaWxlZCBhc3NlcnRpb24uCi0JKEZGSV9BU1NFUlRfQVQpOiBOZXcgbWFjcm8uCi0JKEZGSV9BU1NFUlRfVkFMSURfVFlQRSk6IE5ldyBtYWNyby4KLQkoVUlOVDgsIFNJTlQ4LCBVSU5UMTYsIFNJTlQxNiwgVUlOVDMyLCBTSU5UMzIsCi0JVUlOVDY0LCBTSU5UNjQpOiBEZWZpbmUgaGVyZSB3aXRoIGdjYydzIF9fYXR0cmlidXRlX18gbWFjcm8KLQlpbnN0ZWFkIG9mIGluIGZmaS5oCi0JKEZMT0FUMzIsIEFMSUdOKTogRGVmaW5lIGhlcmUgaW5zdGVhZCBvZiBpbiBmZmkuaAotCSogaW5jbHVkZS9mZmktbWlwcy5oOiBSZW1vdmVkLiAgSXRzIGNvbnRlbnQgbW92ZWQgdG8KLQlzcmMvbWlwcy9mZml0YXJnZXQuaCBhZnRlciBzZXBhcmF0aW5nIGFzc2VtYmx5IGFuZCBDIHNlY3Rpb25zLgotCSogc3JjL2FscGhhL2ZmaS5jLCBzcmMvYWxwaGEvZmZpLmMsIHNyYy9qYXZhX3Jhd19hcGkuYwotCXNyYy9wcmVwX2NpZi5jLCBzcmMvcmF3X2FwaS5jLCBzcmMvaWE2NC9mZmkuYywKLQlzcmMvbWlwcy9mZmkuYywgc3JjL21pcHMvbjMyLlMsIHNyYy9taXBzL28zMi5TLAotCXNyYy9taXBzL2ZmaXRhcmdldC5oLCBzcmMvc3BhcmMvZmZpLmMsIHNyYy94ODYvZmZpNjQuYzoKLQlTSVpFT0ZfQVJHIC0+IEZGSV9TSVpFT0ZfQVJHLgotCSogc3JjL2lhNjQvZmZpLmM6IEluY2x1ZGUgc3RkYm9vbC5oIChwcm92aWRlZCBieSBHQ0MgMi45NSspLgotCSogc3JjL2RlYnVnLmMgKGZmaV9hc3NlcnQpOiBBY2NlcHQgc3RyaW5naXplZCBmYWlsZWQgYXNzZXJ0aW9uLgotCShmZmlfdHlwZV90ZXN0KTogUmV3cml0dGVuLgotCSogc3JjL3ByZXAtY2lmLmMgKGluaXRpYWxpemVfYWdncmVnYXRlLCBmZmlfcHJlcF9jaWYpOiBDYWxsCi0JRkZJX0FTU0VSVF9WQUxJRF9UWVBFLgotCSogc3JjL2FscGhhL2ZmaXRhcmdldC5oLCBzcmMvYXJtL2ZmaXRhcmdldC5oLAotCXNyYy9pYTY0L2ZmaXRhcmdldC5oLCBzcmMvbTY4ay9mZml0YXJnZXQuaCwKLQlzcmMvbWlwcy9mZml0YXJnZXQuaCwgc3JjL3Bvd2VycGMvZmZpdGFyZ2V0LmgsCi0Jc3JjL3MzOTAvZmZpdGFyZ2V0LmgsIHNyYy9zaC9mZml0YXJnZXQuaCwKLQlzcmMvc2g2NC9mZml0YXJnZXQuaCwgc3JjL3NwYXJjL2ZmaXRhcmdldC5oLAotCXNyYy94ODYvZmZpdGFyZ2V0Lmg6IE5ldyBmaWxlcy4KLQkqIHNyYy9hbHBoYS9vc2YuUywgc3JjL2FybS9zeXN2LlMsIHNyYy9pYTY0L3VuaXguUywKLQlzcmMvbTY4ay9zeXN2LlMsIHNyYy9taXBzL24zMi5TLCBzcmMvbWlwcy9vMzIuUywKLQlzcmMvcG93ZXJwYy9haXguUywgc3JjL3Bvd2VycGMvZGFyd2luLlMsCi0Jc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jLCBzcmMvcG93ZXJwYy9saW51eDY0LlMsCi0Jc3JjL3Bvd2VycGMvbGludXg2NF9jbG9zdXJlLlMsIHNyYy9wb3dlcnBjL3BwY19jbG9zdXJlLlMsCi0Jc3JjL3Bvd2VycGMvc3lzdi5TLCBzcmMvczM5MC9zeXN2LlMsIHNyYy9zaC9zeXN2LlMsCi0Jc3JjL3NoNjQvc3lzdi5TLCBzcmMvc3BhcmMvdjguUywgc3JjL3NwYXJjL3Y5LlMsCi0Jc3JjL3g4Ni9zeXN2LlMsIHNyYy94ODYvdW5peDY0LlMsIHNyYy94ODYvd2luMzIuUzoKLQlpbmNsdWRlIGZmaWNvbmZpZy5oCitjb21taXQgMjgyOWY1OTQxYTIyM2I5ZDg1MWQ4YWI2MzE4MzE4ZTYxOTdkN2UwMQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgTW9uIE9jdCA1IDAwOjI4OjAzIDIwMDkgLTA0MDAKIAotMjAwMy0xMC0yMCAgUmFpbmVyIE9ydGggIDxyb0BUZWNoRmFrLlVuaS1CaWVsZWZlbGQuREU+CisgICAgQ2xlYW4gdXAKIAotCSogc3JjL21pcHMvZmZpLmM6IFVzZSBfQUJJTjMyLCBfQUJJTzMyIGluc3RlYWQgb2YgZXh0ZXJuYWwKLQlfTUlQU19TSU1fTkFCSTMyLCBfTUlQU19TSU1fQUJJMzIuCitjb21taXQgY2Q5ODgxM2RlNTE3ZWE2NDA0MTYzN2UzZTc4ZDI3YTAwMWQ2ZDNiNAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgTW9uIE9jdCA1IDAwOjI1OjI5IDIwMDkgLTA0MDAKIAotMjAwMy0xMC0xOSAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorICAgIEZyb20gSmVucyBSZWhzYWNrLiAgRml4IGZvciA2NC1iaXQgQUlYLgogCi0JKiBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmMgKGZmaV9wcmVwX2FyZ3MpOiBEZWNsYXJlIGJ5dGVzIGFnYWluLgotCVVzZWQgd2hlbiBGRklfREVCVUcgPSAxLgorY29tbWl0IGU0YTkxZGU3NjZhY2M0N2Y2YzUwZjEzY2MxMTcxOWE2NWUyM2VjYmEKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIE1vbiBPY3QgNSAwMDoxNjoxNyAyMDA5IC0wNDAwCiAKLTIwMDMtMTAtMTQgIEFsYW4gTW9kcmEgIDxhbW9kcmFAYmlncG9uZC5uZXQuYXU+CisgICAgRnJvbSBBYmR1bGF6aXogR2h1bG91bS4gIEFkZHMgc3BlY2lhbCBjYXNlIGZvciBTbm93IExlb3BhcmQuCiAKLQkqIHNyYy90eXBlcy5jIChkb3VibGUsIGxvbmdkb3VibGUpOiBEZWZhdWx0IFBPV0VSUEM2NCB0byA4IGJ5dGUgc2l6ZQotCWFuZCBhbGlnbi4KK2NvbW1pdCAzNDI1YTc2M2JjZGFhZGI4YjQzMDIyNmY0MjdlYzgzM2FmZGNjOTZhCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTdW4gT2N0IDQgMjM6NTc6MjkgMjAwOSAtMDQwMAogCi0yMDAzLTEwLTA2ICBSYWluZXIgT3J0aCAgPHJvQFRlY2hGYWsuVW5pLUJpZWxlZmVsZC5ERT4KKyAgICBGaXggZGV0ZWN0aW9uIG9mIGZyZWUvb3BlbmJzZC4gIEZyb20gQWxleGlzIEJhbGxpZXIuCiAKLQkqIGluY2x1ZGUvZmZpX21pcHMuaDogRGVmaW5lIEZGSV9NSVBTX04zMiBmb3IgTjMyL042NCBBQklzLAotCUZGSV9NSVBTX08zMiBmb3IgTzMyIEFCSS4KK2NvbW1pdCAyMzQwZTdhNzc3OTAyZGU2MTQ5OWQ0NzgyM2FkOGQ1ZTBlZWI2MjAzCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTdW4gT2N0IDQgMjM6NTM6MTcgMjAwOSAtMDQwMAogCi0yMDAzLTEwLTAxICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisgICAgQVZSIHN1cHBvcnQKIAotCSogdGVzdHN1aXRlL2xpYi9saWJmZmktZGcuZXhwOiBTZXQgTERfTElCUkFSWV9QQVRIXzY0IGZvcgotCVNQQVJDNjQuIENsZWFudXAgd2hpdGVzcGFjZXMuCitjb21taXQgNWNiZTIwNThjMTI4ZTg0ODQ0NmFlNzlmZTE1ZWU1NDI2MGE5MDU1OQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU3VuIE9jdCA0IDIzOjUzOjExIDIwMDkgLTA0MDAKIAotMjAwMy0wOS0xOSAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorICAgIEluaXRpYWwgc3RhbmQtYWxvbmUgcGF0Y2guCiAKLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMC5jOiBYZmFpbCBtaXBzLCBhcm0sCi0Jc3Ryb25nYXJtLCB4c2NhbGUuIENsZWFudXAgd2hpdGVzcGFjZXMuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjEuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjIuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjMuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzEyYnl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTZieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xXzFieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yMGJ5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzI0Ynl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMmJ5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzNfMWJ5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzNieXRlMS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM2J5dGUyLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc180XzFieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc180Ynl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNWJ5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzZieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc183Ynl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOGJ5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2RvdWJsZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZmxvYXQuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VjaGFyLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191aW50LmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191bG9uZ2xvbmcuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VzaG9ydC5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0LmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QxLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3Byb2JsZW0xLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL3Vud2luZHRlc3QuY2M6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3B5b2JqYy10Yy5jOiBDbGVhbnVwIHdoaXRlc3BhY2VzLgorY29tbWl0IGM2ZGRkYmQwMmJhZDk2NTRlZDU4Y2RiMGZlYjM2MDkzNGQxMDVkZWMKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFN1biBPY3QgNCAwODoxMTozMyAyMDA5IC0wNDAwCiAKLTIwMDMtMDktMTggIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KKyAgICBJbml0aWFsIGNvbW1pdAogCi0JKiBzcmMvcG93ZXJwYy9haXguUzogQ2xlYW51cCB3aGl0ZXNwYWNlcy4KLQkqIHNyYy9wb3dlcnBjL2FpeF9jbG9zdXJlLlM6IExpa2V3aXNlLgorY29tbWl0IDVmZmMwYzM3NDg2ZmIxNTM4YmNjYzBjYTdhY2M4MDdkNGYxYWY5MzIKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFN1biBPY3QgNCAwNzo1ODoyMiAyMDA5IC0wNDAwCiAKLTIwMDMtMDktMTggIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKyAgICBVcGRhdGUgdmVyc2lvbiB0byAzLjAuOXJjMS4gIEFkZCBtb3JlIHVzZWZ1bCB0aGluZ3MgdG8gLmdpdGlnbm9yZS4KIAotCSogc3JjL3Bvd2VycGMvZGFyd2luLlM6IENsZWFudXAgd2hpdGVzcGFjZXMsIGNvbW1lbnQgZm9ybWF0dGluZy4KLQkqIHNyYy9wb3dlcnBjL2Rhcndpbl9jbG9zdXJlLlM6IExpa2V3aXNlLgotCSogc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jOiBMaWtld2lzZS4KK2NvbW1pdCBiZDI5ZjgzZWU5ZjZmYTZiNjVhZGVlOWQzZjU3ODM0ZjM2NGQ5ODg3CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBUdWUgU2VwIDI5IDEyOjA3OjI2IDIwMDkgLTA0MDAKIAotMjAwMy0wOS0xOCAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgotCSAgICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CisgICAgQWRkIC5naXRpZ25vcmUKIAotCSogc3JjL3R5cGVzLmMgKGRvdWJsZSk6IEFkZCBBSVggYW5kIERhcndpbiB0byB0aGUgcmlnaHQgVFlQRURFRi4KLQkqIHNyYy9wb3dlcnBjL2FpeF9jbG9zdXJlLlM6IFJlbW92ZSB0aGUgcG9pbnRlciB0byB0aGUgb3V0Z29pbmcKLQlwYXJhbWV0ZXIgc3RhY2suCi0JKiBzcmMvcG93ZXJwYy9kYXJ3aW5fY2xvc3VyZS5TOiBMaWtld2lzZS4KLQkqIHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYyAoZmZpX3ByZXBfYXJncyk6IEhhbmRsZSBzdHJ1Y3R1cmVzCi0JYWNjb3JkaW5nIHRvIHRoZSBEYXJ3aW4vQUlYIEFCSS4KLQkoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBMaWtld2lzZS4KLQkoZmZpX2Nsb3N1cmVfaGVscGVyX0RBUldJTik6IExpa2V3aXNlLgotCVJlbW92ZSB0aGUgb3V0Z29pbmcgcGFyYW1ldGVyIHN0YWNrIGxvZ2ljLiBTaW1wbGlmeSB0aGUgZXZhbHVhdGlvbgotCW9mIHRoZSBkaWZmZXJlbnQgQ0FTRSB0eXBlcy4KLQkoZmZpX3ByZXBfY2xvdXN1cmUpOiBBdm9pZCB0aGUgY2FzdHMgb24gbHZhbHVlcy4gQ2hhbmdlIHRoZSBicmFuY2gKLQlzdGF0ZW1lbnQgaW4gdGhlIHRyYW1wb2xpbmUgY29kZS4KK2NvbW1pdCA5NDc0Zjg1M2Y4M2UzZjAxNjdjMWIzMDYxNzczMjFiZmNjOTNlNTZkCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBUdWUgU2VwIDI5IDExOjEzOjAyIDIwMDkgLTA0MDAKIAotMjAwMy0wOS0xOCAgS2F6IEtvamltYSAgPGtrb2ppbWFAZ2NjLmdudS5vcmc+CisgICAgUmVtb3ZlIG9sZCBDVlNST09UIGZpbGVzLgogCi0JKiBzcmMvc2gvZmZpLmMgKGZmaV9wcmVwX2FyZ3MpOiBUYWtlIGFjY291bnQgaW50byB0aGUgYWxpZ25lbWVudAotCWZvciB0aGUgcmVnaXN0ZXIgc2l6ZS4KLQkoZmZpX2Nsb3N1cmVfaGVscGVyX1NZU1YpOiBIYW5kbGUgdGhlIHN0cnVjdHVyZSByZXR1cm4gdmFsdWUKLQlhZGRyZXNzIGNvcnJlY3RseS4KLQkoZmZpX2Nsb3N1cmVfaGVscGVyX1NZU1YpOiBSZXR1cm4gdGhlIGFwcHJvcHJpYXRlIHR5cGUgd2hlbgotCXRoZSByZWdpc3RlcnMgYXJlIHVzZWQgZm9yIHRoZSBzdHJ1Y3R1cmUgcmV0dXJuIHZhbHVlLgotCSogc3JjL3NoL3N5c3YuUyAoZmZpX2Nsb3N1cmVfU1lTVik6IEZpeCB0aGUgc3RhY2sgbGF5b3V0IGZvcgotCXRoZSA2NC1iaXQgcmV0dXJuIHZhbHVlLiAgVXBkYXRlIGNvcHlyaWdodCB5ZWFycy4KK2NvbW1pdCAwYzI1Mjc1ZWMyNGJmZTJjMmMyNWEwMDA0NjVmMDk1MGVmOWRkNTFiCitBdXRob3I6IHR3YWxsIDx0d2FsbD4KK0RhdGU6ICAgV2VkIEF1ZyAxOSAxMjo1NzozNCAyMDA5ICswMDAwCiAKLTIwMDMtMDktMTcgIFJhaW5lciBPcnRoICA8cm9AVGVjaEZhay5VbmktQmllbGVmZWxkLkRFPgorICAgIEFwcGx5IERhdmUgS29ybidzIGN5Z3dpbi9HQ0MgY2hhbmdlcwogCi0JKiB0ZXN0c3VpdGUvbGliL2xpYmZmaS1kZy5leHAgKGxpYmZmaV90YXJnZXRfY29tcGlsZSk6IFNlYXJjaCBpbgotCXNyY2RpciBmb3IgZmZpX21pcHMuaC4KK2NvbW1pdCAzOTIyOGMyN2VkM2Y2NzdhOTViNDYzODBhOGQzMTYwMmI1Nzc3ZTFhCitBdXRob3I6IGFwaCA8YXBoPgorRGF0ZTogICBUdWUgSnVuIDE2IDE4OjAwOjQ3IDIwMDkgKzAwMDAKIAotMjAwMy0wOS0xMiAgQWxhbiBNb2RyYSAgPGFtb2RyYUBiaWdwb25kLm5ldC5hdT4KKyAgICAyMDA5LTA2LTE2ICBXaW0gTGV3aXMgIDx3aW1sQGhoaGgub3JnPgorICAgIAorICAgIAkqIHNyYy9wb3dlcnBjL2ZmaS5jOiBBdm9pZCBjbG9iYmVyaW5nIGNyMyBhbmQgY3I0LCB3aGljaCBhcmUKKyAgICAJc3VwcG9zZWQgdG8gYmUgY2FsbGVlLXNhdmVkLgorICAgIAkqIHNyYy9wb3dlcnBjL3N5c3YuUyAoc21hbGxfc3RydWN0X3JldHVybl92YWx1ZSk6IEZpeCBvdmVycnVuIG9mCisgICAgCXJldHVybiBidWZmZXIgZm9yIG9kZC1zaXplIHN0cnVjdHMuCiAKLQkqIHNyYy9wcmVwX2NpZi5jIChpbml0aWFsaXplX2FnZ3JlZ2F0ZSk6IEluY2x1ZGUgdGFpbCBwYWRkaW5nIGluCi0Jc3RydWN0dXJlIHNpemUuCi0JKiBzcmMvcG93ZXJwYy9saW51eDY0X2Nsb3N1cmUuUyAoZmZpX2Nsb3N1cmVfTElOVVg2NCk6IENvcnJlY3QKLQlwbGFjZW1lbnQgb2YgZmxvYXQgcmVzdWx0LgotCSogdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL3Vud2luZHRlc3QuY2MgKGNsb3N1cmVfdGVzdF9mbjEpOiBDb3JyZWN0Ci0JY2FzdCBvZiAicmVzcCIgZm9yIGJpZy1lbmRpYW4gNjQgYml0IG1hY2hpbmVzLgorY29tbWl0IDVlOTNjYzcwNGQxMjdjMmM4YWU3ZjVkMmNlZjYyMTE0NWQ0M2U3NzcKK0F1dGhvcjogYXBoIDxhcGg+CitEYXRlOiAgIFR1ZSBKdW4gMTYgMTc6NDE6NDcgMjAwOSArMDAwMAogCi0yMDAzLTA5LTExICBBbGFuIE1vZHJhICA8YW1vZHJhQGJpZ3BvbmQubmV0LmF1PgorICAgIDIwMDktMDYtMTYgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5vcmc+CisgICAgCisgICAgCVBSIGxpYmZmaS80MDQ0NAorICAgIAkqIHRlc3RzdWl0ZS9saWIvbGliZmZpLWRnLmV4cCAobGliZmZpX3RhcmdldF9jb21waWxlKTogQWRkCisgICAgCWFsbG93X3N0YWNrX2V4ZWN1dGUgZm9yIERhcndpbi4KIAotCSogc3JjL3R5cGVzLmMgKGRvdWJsZSwgbG9uZ2RvdWJsZSk6IE1lcmdlIGlkZW50aWNhbCBTSCBhbmQgQVJNCi0JdHlwZWRlZnMsIGFuZCBhZGQgUE9XRVJQQzY0LgotCSogc3JjL3Bvd2VycGMvZmZpLmMgKGZmaV9wcmVwX2FyZ3M2NCk6IENvcnJlY3QgbmV4dF9hcmcgY2FsYyBmb3IKLQlzdHJ1Y3Qgc3BsaXQgb3ZlciBncHIgYW5kIHJlc3QuCi0JKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogQ29ycmVjdCBpbnRhcmdfY291bnQgZm9yIHN0cnVjdHVyZXMuCi0JKiBzcmMvcG93ZXJwYy9saW51eDY0LlMgKGZmaV9jYWxsX0xJTlVYNjQpOiBGaXggZ3ByIG9mZnNldHMuCitjb21taXQgYjUwOWFmODk1OWRjMzcxYjkyMzkyYzYyMzUyMmVhNmY0OTQ2YTcxZAorQXV0aG9yOiBhcGggPGFwaD4KK0RhdGU6ICAgVHVlIEp1biAxNiAxNjoxNzo1MiAyMDA5ICswMDAwCiAKLTIwMDMtMDktMDkgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKyAgICAyMDA5LTA2LTE2ICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KKyAgICAKKyAgICAJKiBjb25maWd1cmUuYWMgKFRBUkdFVERJUik6IEFkZCBtaXNzaW5nIGJsYW5rIGxpbmVzLgorICAgIAkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KIAotCSogc3JjL3Bvd2VycGMvZmZpLmMgKGZmaV9jbG9zdXJlX2hlbHBlcl9TWVNWKSBIYW5kbGUgc3RydWN0Ci0JcGFzc2luZyBjb3JyZWN0bHkuCitjb21taXQgZDU3ZTk2ZGM1NmVlNzZmYmJiOWI1OWQ3M2FlYWE5MjM1NGRiNWVjYgorQXV0aG9yOiBhcGggPGFwaD4KK0RhdGU6ICAgVHVlIEp1biAxNiAwOTo1OTowMiAyMDA5ICswMDAwCiAKLTIwMDMtMDktMDkgIEFsYW4gTW9kcmEgIDxhbW9kcmFAYmlncG9uZC5uZXQuYXU+CisgICAgMjAwOS0wNi0xNiAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+CisgICAgCisgICAgICAgICAgICAqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDY0LmMsCisgICAgICAgICAgICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3VpbnQ2NC5jLAorICAgICAgICAgICAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19sb25nZG91YmxlX3ZhLmMsCisgICAgICAgICAgICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3Vsb25nbG9uZy5jLAorICAgICAgICAgICAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9sbDEuYywKKyAgICAgICAgICAgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9tZWRpdW0yLmM6IEZpeCBwcmludGYgZm9ybWF0CisgICAgICAgICAgICBzcGVjaWZpZXJzLgorICAgICAgICAgICAgKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvaHVnZV9zdHJ1Y3QuYzogQWQgeDg2IFhGQUlMcy4KKyAgICAgICAgICAgICogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zsb2F0Mi5jOiBGaXggZGctZXhjZXNzLWVycm9ycy4KKyAgICAgICAgICAgICogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2ZmaXRlc3QuaCwKKyAgICAgICAgICAgIHRlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC9mZml0ZXN0Y3h4LmggKFBSSWRMTCwgUFJJdUxMKTogRGVmaW5lLgogCi0JKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCitjb21taXQgYjAxZDZkMTk4MmM5ZTAyMDUwNzAyOWJmZDVhNThhOGM2MGQxMTFmYQorQXV0aG9yOiBhcGggPGFwaD4KK0RhdGU6ICAgVHVlIEp1biAxNiAwOTo0NDo1NCAyMDA5ICswMDAwCiAKLTIwMDMtMDktMDQgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKyAgICAyMDA5LTA2LTE2ICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KKyAgICAKKyAgICAJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZXJyX2JhZF90eXBlZGVmLmM6IHhmYWlsIGV2ZXJ5d2hlcmUuCisgICAgCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Vycl9iYWRfYWJpLmM6IExpa2V3aXNlLgogCi0JKiBNYWtlZmlsZS5hbTogUmVtb3ZlIGJ1aWxkIHJ1bGVzIGZvciBmZml0ZXN0LgotCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCitjb21taXQgMzViNmRlZDEzODU5MTkwMGE4ODA1NWE4YThhYzFmYWRjMjlhNzZkNgorQXV0aG9yOiBhcGggPGFwaD4KK0RhdGU6ICAgRnJpIEp1biAxMiAxNToyOToyMCAyMDA5ICswMDAwCiAKLTIwMDMtMDktMDQgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKyAgICAyMDA5LTA2LTExICBLYXogS29qaW1hICA8a2tvamltYUBnY2MuZ251Lm9yZz4KKyAgICAKKyAgICAgICAgICAgICogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19sb25nZG91YmxlX3ZhLmM6IEFkZCB4ZmFpbCBzaCotKi1saW51eC0qLgorICAgICAgICAgICAgKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZXJyX2JhZF9hYmkuYzogQWRkIHhmYWlsIHNoKi0qLSouCisgICAgICAgICAgICAqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9lcnJfYmFkX3R5cGVkZWYuYzogTGlrZXdpc2UuCiAKLQkqIHNyYy9qYXZhX3Jhd19hcGkuYzogSW5jbHVkZSA8c3RkbGliLmg+IHRvIGZpeCBjb21waWxlciB3YXJuaW5nCi0JYWJvdXQgaW1wbGljaXQgZGVjbGFyYXRpb24gb2YgYWJvcnQoKS4KK2NvbW1pdCBhY2M0NjYwNWYyZDk1ZDY3ZDY5Mzk4ZTc2NDQ2MTBmMTBhMTU3Y2UzCitBdXRob3I6IGFwaCA8YXBoPgorRGF0ZTogICBGcmkgSnVuIDEyIDE0OjIxOjI4IDIwMDkgKzAwMDAKIAotMjAwMy0wOS0wNCAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorICAgIDIwMDktMDYtMTIgIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorICAgIAorICAgICAgICAgICAgKiBDaGFuZ2VMb2cubGliZmZpOiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQ2NC5jLAorICAgICAgICAgICAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50NjQuYywKKyAgICAgICAgICAgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWxvbmdsb25nLmMsCisgICAgICAgICAgICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2xsMS5jLAorICAgICAgICAgICAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X21lZGl1bTIuYzogRml4IHByaW50ZiBmb3JtYXQKKyAgICAgICAgICAgIHNwZWNpZmllcnMuCisgICAgICAgICAgICB0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvdW53aW5kdGVzdC5jYzogaW5jbHVkZSBzdGRpbnQuaC4KIAotCSogTWFrZWZpbGUuYW06IEFkZCBkZWphZ251IHRlc3QgZnJhbWV3b3JrLiBGaXhlcyBQUiBvdGhlci8xMTQxMS4KLQkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgotCSogY29uZmlndXJlLmluOiBBZGQgZGVqYWdudSB0ZXN0IGZyYW1ld29yay4KLQkqIGNvbmZpZ3VyZTogUmVidWlsdC4KK2NvbW1pdCAxNmQxOTk2ZWQwNzk3YmQ3YzExYWNhMmIwZmU3ZTc3NDg3NTFhYWY2CitBdXRob3I6IHR3YWxsIDx0d2FsbD4KK0RhdGU6ICAgVGh1IEp1biAxMSAxNDoyNzo0MiAyMDA5ICswMDAwCiAKLQkqIHRlc3RzdWl0ZS9NYWtlZmlsZS5hbTogTmV3IGZpbGUuCi0JKiB0ZXN0c3VpdGUvTWFrZWZpbGUuaW46IEJ1aWx0Ci0JKiB0ZXN0c3VpdGUvbGliL2xpYmZmaS1kZy5leHA6IE5ldyBmaWxlLgotCSogdGVzdHN1aXRlL2NvbmZpZy9kZWZhdWx0LmV4cDogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2FsbC5leHA6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2ZmaXRlc3QuaDogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjAuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjEuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjIuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjMuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzFfMWJ5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzNfMWJ5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzRfMWJ5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzJieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zYnl0ZTEuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzNieXRlMi5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNGJ5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzVieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc182Ynl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfN2J5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzhieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xMmJ5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE2Ynl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjBieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yNGJ5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2RvdWJsZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZmxvYXQuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VjaGFyLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191aW50LmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191bG9uZ2xvbmcuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VzaG9ydC5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mbG9hdC5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mbG9hdDEuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmxvYXQyLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL21hbnkuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbWFueV93aW4zMi5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0LmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QxLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3B5b2JqYy10Yy5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9wcm9ibGVtMS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9wcm9tb3Rpb24uYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2xsLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9zYy5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fdWMuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RybGVuLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmxlbl93aW4zMi5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3QxLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDIuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0My5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3Q0LmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0Ni5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3Q3LmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDguYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0OS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC9zcGVjaWFsLmV4cDogTmV3IGZpbGUuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvZmZpdGVzdGN4eC5oOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC91bndpbmR0ZXN0LmNjOiBMaWtld2lzZS4KKyAgICB1cGRhdGUgY2hhbmdlbG9nCiAKK2NvbW1pdCA5MmE1MTVjMzNlZmU5MWJlM2NiMDI1OGYwMWM2M2FmZjIwODQ4OWM3CitBdXRob3I6IHR3YWxsIDx0d2FsbD4KK0RhdGU6ICAgVGh1IEp1biAxMSAxNDoyNzoyOCAyMDA5ICswMDAwCiAKLTIwMDMtMDgtMTMgIEtheiBLb2ppbWEgIDxra29qaW1hQGdjYy5nbnUub3JnPgorICAgIHVzZSBmZmlfY2xvc3VyZV9hbGxvYyBpbnN0ZWFkIG9mIHN0YWNrLWJhc2VkIGNsb3N1cmUKIAotCSogc3JjL3NoL2ZmaS5jIChPRlNfSU5UMTYpOiBTZXQgMCBmb3IgbGl0dGxlIGVuZGlhbiBjYXNlLiAgVXBkYXRlCi0JY29weXJpZ2h0IHllYXJzLgorY29tbWl0IGU0MzYzMTYwYmE5ZTUwMTY3ZjljYTBhNzM5OWQ1MzdhMWQyY2QwY2UKK0F1dGhvcjogdHdhbGwgPHR3YWxsPgorRGF0ZTogICBUaHUgSnVuIDExIDE0OjI2OjIzIDIwMDkgKzAwMDAKIAotMjAwMy0wOC0wMiAgQWxhbiBNb2RyYSAgPGFtb2RyYUBiaWdwb25kLm5ldC5hdT4KKyAgICByZW1vdmUgdW51c2VkIGV4dGVybgogCi0JKiBzcmMvcG93ZXJwYy9mZmkuYyAoZmZpX3ByZXBfYXJnczY0KTogTW9kaWZ5IGZvciBjaGFuZ2VkIGdjYwotCXN0cnVjdHVyZSBwYXNzaW5nLgotCShmZmlfY2xvc3VyZV9oZWxwZXJfTElOVVg2NCk6IExpa2V3aXNlLgotCSogc3JjL3Bvd2VycGMvbGludXg2NC5TOiBSZW1vdmUgY29kZSB3cml0aW5nIHRvIHBhcm0gc2F2ZSBhcmVhLgotCSogc3JjL3Bvd2VycGMvbGludXg2NF9jbG9zdXJlLlMgKGZmaV9jbG9zdXJlX0xJTlVYNjQpOiBVc2UgcmV0dXJuCi0JYWRkcmVzcyBpbiBsciBmcm9tIGZmaV9jbG9zdXJlX2hlbHBlcl9MSU5VWDY0IGNhbGwgdG8gY2FsY3VsYXRlCi0JdGFibGUgYWRkcmVzcy4gIE9wdGltaXplIGZ1bmN0aW9uIHRhaWwuCitjb21taXQgMWRjMjc4MWQyYmEzOGY1ZjAwMGZmNzAwNjlkNjE3ZmIyMWUxZDJhZgorQXV0aG9yOiB0d2FsbCA8dHdhbGw+CitEYXRlOiAgIFRodSBKdW4gMTEgMTE6MzY6MTYgMjAwOSArMDAwMAogCi0yMDAzLTA3LTI4ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisgICAgcmVtb3ZlIG5vdC15ZXQtYXBwbGllZCBjaGFuZ2Vsb2cgZW50cmllcwogCi0JKiBzcmMvc3BhcmMvZmZpLmM6IEhhbmRsZSBhbGwgZmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXJzLgotCSogc3JjL3NwYXJjL3Y5LlM6IExpa2V3aXNlLiBGaXhlcyBzZWNvbmQgcGFydCBvZiBQUiB0YXJnZXQvMTE0MTAuCitjb21taXQgYmIyNzczNWZlNjg5ZGFjOTdlYzBkYzg0N2VkOGQzZDUxOTYyMDEwOQorQXV0aG9yOiB0d2FsbCA8dHdhbGw+CitEYXRlOiAgIFdlZCBKdW4gMTAgMTA6NDI6MzYgMjAwOSArMDAwMAogCi0yMDAzLTA3LTExICBHZXJhbGQgUGZlaWZlciAgPHBmZWlmZXJAZGJhaS50dXdpZW4uYWMuYXQ+CisgICAgYWRkIHdpbjY0IHN1cHBvcnQKIAotCSogUkVBRE1FOiBOb3RlIHRoYXQgbGliZmZpIGlzIG5vdCBwYXJ0IG9mIEdDQy4gIFVwZGF0ZSB0aGUgcHJvamVjdAotCVVSTCBhbmQgc3RhdHVzLgorY29tbWl0IGIyYTU0YzEwMGM3NDg1NGE0MDk4MjA4MTdkNTQ2MTdmZGRhMzllYjgKK0F1dGhvcjogYXBoIDxhcGg+CitEYXRlOiAgIE1vbiBKdW4gOCAxNjo1MDo0OSAyMDA5ICswMDAwCiAKLTIwMDMtMDYtMTkgIEZyYW56IFNpcmwgIDxGcmFuei5TaXJsLWtlcm5lbEBsYXV0ZXJiYWNoLmNvbT4KKyAgICAyMDA5LTA2LTA4ICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KKyAgICAKKyAgICAJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZXJyX2JhZF9hYmkuYzogQWRkIHhmYWlscy4KKyAgICAJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGVfdmEuYzogQWRkIHhmYWlscy4KKyAgICAJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2RibHNfc3RydWN0LmM6IEFkZCB4ZmFpbCB4ODZfNjQtKi1saW51eC0qLgorICAgIAkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9lcnJfYmFkX3R5cGVkZWYuYzogQWRkIHhmYWlscy4KKyAgICAKKyAgICAJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbWVkaXVtMi5jOiBBZGQgX19VTlVTRURfXyB0byBhcmdzLgorICAgIAkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9tZWRpdW0uYzogTGlrZXdpc2UuCisgICAgCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X2xhcmdlMi5jOiBMaWtld2lzZS4KKyAgICAJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbGFyZ2UuYzogIExpa2V3aXNlLgogCi0JKiBzcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TOiBJbmNsdWRlIGZmaS5oLgorY29tbWl0IDI1NzIzZTcxNDFmNzNkMzczNmQ3MjQ0Yjk4MGM4OWQ5N2RiODUyYjYKK0F1dGhvcjogYXBoIDxhcGg+CitEYXRlOiAgIEZyaSBKdW4gNSAxMzowMzo0MCAyMDA5ICswMDAwCiAKLTIwMDMtMDYtMTMgIFJhaW5lciBPcnRoICA8cm9AVGVjaEZhay5VbmktQmllbGVmZWxkLkRFPgorICAgIDIwMDktMDYtMDUgIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorICAgIAorICAgICAgICAgICAgKiBzcmMveDg2L3dpbjMyLlMgKF9mZmlfY2xvc3VyZV9TVERDQUxMKTogSW1wb3J0IGZyb20gZ2NjLgogCi0JKiBzcmMveDg2L3N5c3YuUzogQXZvaWQgZ2FzLW9ubHkgLnVsZWIxMjgvLnNsZWIxMjggZGlyZWN0aXZlcy4KLQlVc2UgQyBzdHlsZSBjb21tZW50cy4KK2NvbW1pdCA3MDc1ODE5OWM3Y2Q0MWY0MTE5ODczNjBjY2IzMDJiNDk3YTU2ZGM5CitBdXRob3I6IGFwaCA8YXBoPgorRGF0ZTogICBUaHUgSnVuIDQgMTY6Mjk6NTggMjAwOSArMDAwMAogCi0yMDAzLTA2LTEzICBLYXogS29qaW1hICA8a2tvamltYUByci5paWo0dS5vci5qcD4KKyAgICAgMjAwOS0wNi0wNCAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+CisgICAgCisgICAgICAgICAgICAqIHNyYy9wb3dlcnBjL2ZmaXRhcmdldC5oOiBGaXggbWlzYXBwbGllZCBtZXJnZSBmcm9tIGdjYy4KIAotCSogTWFrZWZpbGUuYW06IEFkZCBTSG1lZGlhIHN1cHBvcnQuICBGaXggYSB0eXBvIG9mIFNIIHN1cHBvcnQuCi0JKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KLQkqIGNvbmZpZ3VyZS5pbiAoc2g2NC0qLWxpbnV4Kiwgc2g1Ki0qLWxpbnV4Kik6IEFkZCB0YXJnZXQuCi0JKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCi0JKiBpbmNsdWRlL2ZmaS5oLmluOiBBZGQgU0htZWRpYSBzdXBwb3J0LgotCSogc3JjL3NoNjQvZmZpLmM6IE5ldyBmaWxlLgotCSogc3JjL3NoNjQvc3lzdi5TOiBOZXcgZmlsZS4KK2NvbW1pdCBlOGJiMTI1NjNmOWFhMjNkZGYzNmZhNmE1YjkyYjE2YjVjM2UxYTdmCitBdXRob3I6IGFwaCA8YXBoPgorRGF0ZTogICBUaHUgSnVuIDQgMTQ6NTk6MTggMjAwOSArMDAwMAogCi0yMDAzLTA1LTE2ICBKYWt1YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNvbT4KKyAgICAyMDA5LTA2LTA0ICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KKyAgICAKKyAgICAJKiBzcmMvbWlwcy9vMzIuUywKKyAgICAJc3JjL21pcHMvbjMyLlM6IEZpeCBsaWNlbmNlIGZvcm1hdHRpbmcuCiAKLQkqIGNvbmZpZ3VyZS5pbiAoSEFWRV9ST19FSF9GUkFNRSk6IENoZWNrIHdoZXRoZXIgLmVoX2ZyYW1lIHNlY3Rpb24KLQlzaG91bGQgYmUgcmVhZC1vbmx5LgotCSogY29uZmlndXJlOiBSZWJ1aWx0LgotCSogZmZpY29uZmlnLmguaW46IFJlYnVpbHQuCi0JKiBpbmNsdWRlL2ZmaS5oLmluIChFSF9GUkFNRV9GTEFHUyk6IERlZmluZS4KLQkqIHNyYy9hbHBoYS9vc2YuUzogVXNlIEVIX0ZSQU1FX0ZMQUdTLgotCSogc3JjL3Bvd2VycGMvbGludXg2NC5TOiBMaWtld2lzZS4KLQkqIHNyYy9wb3dlcnBjL2xpbnV4NjRfY2xvc3VyZS5TOiBMaWtld2lzZS4gIEluY2x1ZGUgZmZpLmguCi0JKiBzcmMvcG93ZXJwYy9zeXN2LlM6IFVzZSBFSF9GUkFNRV9GTEFHUy4gIFVzZSBwY3JlbCBlbmNvZGluZwotCWlmIC1mcGljLy1mUElDLy1tcmVsb2NhdGFibGUuCi0JKiBzcmMvcG93ZXJwYy9wb3dlcnBjX2Nsb3N1cmUuUzogTGlrZXdpc2UuCi0JKiBzcmMvc3BhcmMvdjguUzogSWYgSEFWRV9ST19FSF9GUkFNRSBpcyBkZWZpbmVkLCBkb24ndCBpbmNsdWRlCi0JI3dyaXRlIGluIC5laF9mcmFtZSBmbGFncy4KLQkqIHNyYy9zcGFyYy92OS5TOiBMaWtld2lzZS4KLQkqIHNyYy94ODYvdW5peDY0LlM6IFVzZSBFSF9GUkFNRV9GTEFHUy4KLQkqIHNyYy94ODYvc3lzdi5TOiBMaWtld2lzZS4gIFVzZSBwY3JlbCBlbmNvZGluZyBpZiAtZnBpYy8tZlBJQy4KLQkqIHNyYy9zMzkwL3N5c3YuUzogVXNlIEVIX0ZSQU1FX0ZMQUdTLiAgSW5jbHVkZSBmZmkuaC4KK2NvbW1pdCBkNjZhOGUzMmMzNjcxNDc5ZTNjZTBmNjgxOTY3M2U1OTMyYmE2YjdmCitBdXRob3I6IGFwaCA8YXBoPgorRGF0ZTogICBUaHUgSnVuIDQgMTQ6NDM6NDAgMjAwOSArMDAwMAogCi0yMDAzLTA1LTA3ICBKZWZmIFN0dXJtICA8anN0dXJtQG9uZS1wb2ludC5jb20+CisgICAgMjAwOS0wNi0wNCAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+CisgICAgCisgICAgCSogc3JjL3g4Ni9kYXJ3aW4uUzogRml4IGxpY2VuY2UgZm9ybWF0dGluZy4KKyAgICAJc3JjL3g4Ni93aW4zMi5TOiBMaWtld2lzZS4KKyAgICAJc3JjL3NoNjQvc3lzdi5TOiBMaWtld2lzZS4KKyAgICAJc3JjL3NoL3N5c3YuUzogTGlrZXdpc2UuCiAKLQlGaXhlcyBQUiBib290c3RyYXAvMTA2NTYKLQkqIGNvbmZpZ3VyZS5pbiAoSEFWRV9BU19SRUdJU1RFUl9QU0VVRE9fT1ApOiBUZXN0IGFzc2VtYmxlcgotCXN1cHBvcnQgZm9yIC5yZWdpc3RlciBwc2V1ZG8tb3AuCi0JKiBzcmMvc3BhcmMvdjguUzogVXNlIGl0LgotCSogZmZpY29uZmlnLmguaW46IFJlYnVpbHQuCi0JKiBjb25maWd1cmU6IFJlYnVpbHQuCitjb21taXQgN2MzYjdmZDZiNWRiNzQ2YjViMDlhNzE4ZjMwNDRmODExMzcyZjk0MQorQXV0aG9yOiBhcGggPGFwaD4KK0RhdGU6ICAgVGh1IEp1biA0IDE0OjM5OjIwIDIwMDkgKzAwMDAKIAotMjAwMy0wNC0xOCAgSmFrdWIgSmVsaW5layAgPGpha3ViQHJlZGhhdC5jb20+CisgICAgMjAwOS0wNi0wNCAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+CisgICAgCisgICAgCSogc3JjL3NoNjQvZmZpLmM6IFJlbW92ZSBsaW50IGRpcmVjdGl2ZXMuICBXYXMgbWlzc2luZyBmcm9tIG1lcmdlCisgICAgCW9mIEFuZHJlYXMgVG9ibGVyJ3MgcGF0Y2ggZnJvbSAyMDA2LTA0LTIyLgogCi0JKiBpbmNsdWRlL2ZmaS5oLmluIChQT1dFUlBDNjQpOiBEZWZpbmUgaWYgNjQtYml0LgotCShlbnVtIGZmaV9hYmkpOiBBZGQgRkZJX0xJTlVYNjQgb24gUE9XRVJQQy4KLQlNYWtlIGl0IHRoZSBkZWZhdWx0IG9uIFBPV0VSUEM2NC4KLQkoRkZJX1RSQU1QT0xJTkVfU0laRSk6IERlZmluZSB0byAyNCBvbiBQT1dFUlBDNjQuCi0JKiBjb25maWd1cmUuaW46IENoYW5nZSBwb3dlcnBjLSotbGludXgqIGludG8gcG93ZXJwYyotKi1saW51eCouCi0JKiBjb25maWd1cmU6IFJlYnVpbHQuCi0JKiBzcmMvcG93ZXJwYy9mZmkuYyAoaGlkZGVuKTogRGVmaW5lLgotCShmZmlfcHJlcF9hcmdzX1NZU1YpOiBSZW5hbWVkIGZyb20KLQlmZmlfcHJlcF9hcmdzLiAgQ2FzdCBwb2ludGVycyB0byB1bnNpZ25lZCBsb25nIHRvIHNodXQgdXAgd2FybmluZ3MuCi0JKE5VTV9HUFJfQVJHX1JFR0lTVEVSUzY0LCBOVU1fRlBSX0FSR19SRUdJU1RFUlM2NCwKLQlBU01fTkVFRFNfUkVHSVNURVJTNjQpOiBOZXcuCi0JKGZmaV9wcmVwX2FyZ3M2NCk6IE5ldyBmdW5jdGlvbi4KLQkoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBIYW5kbGUgRkZJX0xJTlVYNjQgQUJJLgotCShmZmlfY2FsbCk6IExpa2V3aXNlLgotCShmZmlfcHJlcF9jbG9zdXJlKTogTGlrZXdpc2UuCi0JKGZsdXNoX2ljYWNoZSk6IFN1cnJvdW5kIGJ5ICNpZm5kZWYgUE9XRVJQQzY0LgotCShmZmlfZGJsZmwpOiBOZXcgdW5pb24gdHlwZS4KLQkoZmZpX2Nsb3N1cmVfaGVscGVyX1NZU1YpOiBVc2UgaXQgdG8gYXZvaWQgYWxpYXNpbmcgcHJvYmxlbXMuCi0JKGZmaV9jbG9zdXJlX2hlbHBlcl9MSU5VWDY0KTogTmV3IGZ1bmN0aW9uLgotCSogc3JjL3Bvd2VycGMvcHBjX2Nsb3N1cmUuUzogU3Vycm91bmQgd2hvbGUgZmlsZSBieSAjaWZuZGVmCi0JX19wb3dlcnBjNjRfXy4KLQkqIHNyYy9wb3dlcnBjL3N5c3YuUzogTGlrZXdpc2UuCi0JKGZmaV9jYWxsX1NZU1YpOiBSZW5hbWUgZmZpX3ByZXBfYXJncyB0byBmZmlfcHJlcF9hcmdzX1NZU1YuCi0JKiBzcmMvcG93ZXJwYy9saW51eDY0LlM6IE5ldyBmaWxlLgotCSogc3JjL3Bvd2VycGMvbGludXg2NF9jbG9zdXJlLlM6IE5ldyBmaWxlLgotCSogTWFrZWZpbGUuYW0gKEVYVFJBX0RJU1QpOiBBZGQgc3JjL3Bvd2VycGMvbGludXg2NC5TIGFuZAotCXNyYy9wb3dlcnBjL2xpbnV4NjRfY2xvc3VyZS5TLgotCShUQVJHRVRfU1JDX1BPV0VSUEMpOiBMaWtld2lzZS4KK2NvbW1pdCAxYTJmOTNhOGIzNjJkYjEzNjM4YWZkOWZjYjNmMjY1MDE4MGJmYTE3CitBdXRob3I6IGFwaCA8YXBoPgorRGF0ZTogICBUaHUgSnVuIDQgMTA6NDU6NTEgMjAwOSArMDAwMAogCi0JKiBzcmMvZmZpdGVzdC5jIChjbG9zdXJlX3Rlc3RfZm4sIGNsb3N1cmVfdGVzdF9mbjEsIGNsb3N1cmVfdGVzdF9mbjIsCi0JY2xvc3VyZV90ZXN0X2ZuMyk6IEZpeCByZXN1bHQgcHJpbnRpbmcgb24gYmlnLWVuZGlhbiA2NC1iaXQKLQltYWNoaW5lcy4KLQkobWFpbik6IFByaW50IHRzdDJfYXJnIGluc3RlYWQgb2YgdW5pbml0aWFsaXplZCB0c3QyX3Jlc3VsdC4KKyAgICAyMDA5LTA2LTA0ICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KKyAgICAKKyAgICAgICAgICAgICogc3JjL3NoL2ZmaS5jOiBBcHBseSBtaXNzaW5nIGh1bmsgZnJvbSBBbGV4YW5kcmUgT2xpdmEncyBwYXRjaCBvZgorICAgICAgICAgICAgMjAwNy0wMy0wNy4KIAotCSogc3JjL2ZmaXRlc3QuYyAobWFpbik6IEhpZGUgd2hhdCBjbG9zdXJlIHBvaW50ZXIgcmVhbGx5IHBvaW50cyB0bwotCWZyb20gdGhlIGNvbXBpbGVyLgorY29tbWl0IDk0NGM5NWNmN2FhYWFmN2M1ZmEzNjhjZGE0NjczZGQzOGY0NTAyMGUKK0F1dGhvcjogYXBoIDxhcGg+CitEYXRlOiAgIFdlZCBKdW4gMyAxNzo0Mjo1NiAyMDA5ICswMDAwCiAKLTIwMDMtMDQtMTYgIFJpY2hhcmQgRWFybnNoYXcgIDxyZWFybnNoYUBhcm0uY29tPgorICAgIDIwMDktMDUtMjIgIERhdmUgS29ybiAgPGRhdmUua29ybi5jeWd3aW5AZ21haWwuY29tPgorICAgIAorICAgICAgICAgICAqIHNyYy94ODYvd2luMzIuUyAoX2ZmaV9jbG9zdXJlX1NURENBTEwpOiAgTmV3IGZ1bmN0aW9uLgorICAgICAgICAgICAoLmVoX2ZyYW1lKTogIEFkZCBGREUgZm9yIGl0LgorICAgIAorICAgIDIwMDktMDUtMjIgIERhdmUgS29ybiAgPGRhdmUua29ybi5jeWd3aW5AZ21haWwuY29tPgorICAgIAorICAgICAgICAgICAqIGNvbmZpZ3VyZS5hYzogIEFsc28gY2hlY2sgaWYgYXNzZW1ibGVyIHN1cHBvcnRzIHBjLXJlbGF0aXZlCisgICAgICAgICAgIHJlbG9jcyBvbiBYODZfV0lOMzIgdGFyZ2V0cy4KKyAgICAgICAgICAgKiBjb25maWd1cmU6ICBSZWdlbmVyYXRlLgorICAgICAgICAgICAqIHNyYy94ODYvd2luMzIuUyAoZmZpX3ByZXBfYXJncyk6ICBEZWNsYXJlIGV4dGVybiwgbm90IGdsb2JhbC4KKyAgICAgICAgICAgKF9mZmlfY2FsbF9TWVNWKTogIEFkZCBtaXNzaW5nIGZ1bmN0aW9uIHR5cGUgc3ltYm9sIC5kZWYgYW5kCisgICAgICAgICAgIGFkZCBFSCBtYXJrdXAgbGFiZWxzLgorICAgICAgICAgICAoX2ZmaV9jYWxsX1NURENBTEwpOiAgTGlrZXdpc2UuCisgICAgICAgICAgIChfZmZpX2Nsb3N1cmVfU1lTVik6ICBMaWtld2lzZS4KKyAgICAgICAgICAgKF9mZmlfY2xvc3VyZV9yYXdfU1lTVik6ICBMaWtld2lzZS4KKyAgICAgICAgICAgKC5laF9mcmFtZSk6ICBBZGQgaGFuZC1jcmFmdGVkIEVIIGRhdGEuCisgICAgCisgICAgMjAwOC0xMS0yMSAgRXJpYyBCb3RjYXpvdSAgPGVib3RjYXpvdUBhZGFjb3JlLmNvbT4KKyAgICAKKyAgICAgICAgICAgKiBzcmMvc3BhcmMvZmZpLmMgKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogQWRkIHN1cHBvcnQgZm9yCisgICAgICAgICAgIHNpZ25lZC91bnNpZ25lZCBpbnQ4LzE2IHJldHVybiB2YWx1ZXMuCisgICAgICAgICAgICogc3JjL3NwYXJjL3Y4LlMgKGZmaV9jYWxsX3Y4KTogTGlrZXdpc2UuCisgICAgICAgICAgIChmZmlfY2xvc3VyZV92OCk6IExpa2V3aXNlLgorICAgIAorICAgIDIwMDgtMDMtMjYgIEtheiBLb2ppbWEgIDxra29qaW1hQGdjYy5nbnUub3JnPgorICAgIAorICAgICAgICAgICAqIHNyYy9zaC9zeXN2LlM6IEFkZCAubm90ZS5HTlUtc3RhY2sgb24gTGludXguCisgICAgICAgICAgICogc3JjL3NoNjQvc3lzdi5TOiBMaWtld2lzZS4KKyAgICAKKyAgICAyMDA4LTAzLTI2ICBEYW5pZWwgSmFjb2Jvd2l0eiAgPGRhbkBkZWJpYW4ub3JnPgorICAgIAorICAgICAgICAgICAqIHNyYy9hcm0vc3lzdi5TOiBGaXggQVJNIGNvbW1lbnQgbWFya2VyLgogCi0JKiBjb25maWd1cmUuaW4gKGFybS0qLW5ldGJzZGVsZiopOiBBZGQgY29uZmlndXJhdGlvbi4KLQkoY29uZmlndXJlKTogUmVnZW5lcmF0ZWQuCitjb21taXQgMDBmYTk3MjQzMGJiMTUzNWE0YjM0YmYwMjllYmNhZDUwMDAyN2IwYworQXV0aG9yOiB0d2FsbCA8dHdhbGw+CitEYXRlOiAgIFNhdCBEZWMgMjcgMTY6NTk6MDUgMjAwOCArMDAwMAogCi0yMDAzLTA0LTA0ICBMb3JlbiBKLiBSaXR0bGUgIDxsanJpdHRsZUBhY20ub3JnPgorICAgIHByb3Blcmx5IGdsb2ItbWF0Y2gKIAotCSogaW5jbHVkZS9NYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KK2NvbW1pdCBmNTE3OWU2Nzk0YWMzNWFmMjZmZTg2ZTQ2OGI4NTA4YTdhNTcwYzU1CitBdXRob3I6IHR3YWxsIDx0d2FsbD4KK0RhdGU6ICAgRnJpIERlYyAyNiAxOTowNjoyOCAyMDA4ICswMDAwCiAKLTIwMDMtMDMtMjEgIFpkZW5layBEdm9yYWsgIDxyYWtkdmVyQGF0cmV5Lmthcmxpbi5tZmYuY3VuaS5jej4KKyAgICBNYXJrIFhGQUlMIG9uIGxvbmdkb3VibGUgdGVzdHMgZm9yIHg4Nl82NC9taW5ndwogCi0JKiBsaWJmZmkvaW5jbHVkZS9mZmkuaC5pbjogRGVmaW5lIFg4NiBpbnN0ZWFkIG9mIFg4Nl82NCBpbiAzMgotCWJpdCBtb2RlLgotCSogbGliZmZpL3NyYy94ODYvZmZpLmMgKGZmaV9jbG9zdXJlX1NZU1YsIGZmaV9jbG9zdXJlX3Jhd19TWVNWKToKLQlSZWNlaXZlIGNsb3N1cmUgcG9pbnRlciB0aHJvdWdoIHBhcmFtZXRlciwgcmVhZCBhcmdzIHVzaW5nCi0JX19idWlsdGluX2R3YXJmX2NmYS4KLQkoRkZJX0lOSVRfVFJBTVBPTElORSk6IFNlbmQgY2xvc3VyZSByZWZlcmVuY2UgdGhyb3VnaCBlYXguCitjb21taXQgODBlMmI1YTc0OTIwOGM4YTE4Zjk5NGVjNWJlZTg0NTk0ZDA1MWNjOAorQXV0aG9yOiB0d2FsbCA8dHdhbGw+CitEYXRlOiAgIE1vbiBEZWMgMjIgMTU6MjE6MTUgMjAwOCArMDAwMAogCi0yMDAzLTAzLTEyICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBzdXNlLmRlPgorICAgIGNsZWFuIHVwIHRlc3RzIGZvciB3aW42NCB1c2UKIAotCSogY29uZmlndXJlLmluOiBBdm9pZCB0cmFpbGluZyAvLiBpbiB0b29sZXhlY2xpYmRpci4KLQkqIGNvbmZpZ3VyZTogUmVidWlsdC4KK2NvbW1pdCA3MDYzZDk5OTZmNzQyNTc2MDk1YzdiMGViNTAxNmMwZjlhNjcwYWVjCitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgRnJpIERlYyAxOSAxNjoxMzo0NiAyMDA4ICswMDAwCiAKLTIwMDMtMDMtMDMgIEFuZHJlYXMgVG9ibGVyIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorICAgIFZlcnNpb24gMy4wLjggd2l0aCB4ODYtc29sYXJpcyBzdXBwb3J0CiAKLQkqIHNyYy9wb3dlcnBjL2Rhcndpbl9jbG9zdXJlLlM6IFJlY29kZSB0byBmaXQgZHluYW1pYyBsaWJyYXJpZXMuCitjb21taXQgYmRmZWIxM2YwZGYwYTYzYjE5ZDYyNTk3NTE3MjM3YjU0ZDkyMjI4YgorQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIEZyaSBEZWMgMTkgMTU6NDc6NDQgMjAwOCArMDAwMAogCi0yMDAzLTAyLTA2ICBBbmRyZWFzIFRvYmxlciA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKyAgICBCdW1wIHRvIDMuMC43CiAKLQkqIGxpYmZmaS9zcmMvcG93ZXJwYy9kYXJ3aW5fY2xvc3VyZS5TOgotCUZpeCBhbGlnbmVtZW50IGJ1ZywgYWxsb2NhdGUgOCBieXRlcyBmb3IgdGhlIHJlc3VsdC4KLQkqIGxpYmZmaS9zcmMvcG93ZXJwYy9haXhfY2xvc3VyZS5TOgotCUxpa2V3aXNlLgotCSogbGliZmZpL3NyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYzoKLQlVcGRhdGUgc3RhY2tmcmFtZSBkZXNjcmlwdGlvbiBmb3IgYWl4L2Rhcndpbl9jbG9zdXJlLlMuCitjb21taXQgNjkyMDVkZTE3ZDZhYzRjMTFkNGJhOTJkNmE1YjQwYTBjNWYyNDZiMgorQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIFRodSBKdWwgMjQgMTg6MDM6NDggMjAwOCArMDAwMAogCi0yMDAzLTAyLTA2ICBKYWt1YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNvbT4KKyAgICBNYW55IHRlc3QgZml4ZXMgKGZhaWx1cmVzIGR1ZSB0byBleGNlc3NpdmUgY29tcGlsZXIgd2FybmluZ3MpLgogCi0JKiBzcmMvczM5MC9mZmkuYyAoZmZpX2Nsb3N1cmVfaGVscGVyX1NZU1YpOiBBZGQgaGlkZGVuIHZpc2liaWxpdHkKLQlhdHRyaWJ1dGUuCitjb21taXQgMjYwZDUxM2ZlYTAwYjM2MTNmZTk1N2E0NGExNTdmZTcyYzRjYTI5ZQorQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIFRodSBKdWwgMTcgMTM6MTM6NTIgMjAwOCArMDAwMAogCi0yMDAzLTAxLTMxICBDaHJpc3RpYW4gQ29ybmVsc3NlbiAgPGNjb3JuQGNzLnR1LWJlcmxpbi5kZT4sCi0JICAgIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQHN1c2UuZGU+CisgICAgVmVyc2lvbiAzLjAuNi4gIHNoL3NoNjQgZml4ZXMuCiAKLQkqIGNvbmZpZ3VyZS5pbjogQWRqdXN0IGNvbW1hbmQgdG8gc291cmNlIGNvbmZpZy1tbC5pbiB0byBhY2NvdW50Ci0JZm9yIGNoYW5nZXMgdG8gdGhlIGxpYmZmaV9iYXNlZGlyIGRlZmluaXRpb24uCi0JKGxpYmZmaV9iYXNlZGlyKTogUmVtb3ZlICR7c3JjZGlyfSBmcm9tIHZhbHVlIGFuZCBpbmNsdWRlIHRyYWlsaW5nCi0Jc2xhc2ggaWYgbm9uZW1wdHkuCitjb21taXQgMzcwNDAzMTg3NWZlYWJiNzRlMzY1NWVkMDNjZmY0YzJiM2M3NmFjNgorQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIFRodSBBcHIgMyAxODo1Nzo1NyAyMDA4ICswMDAwCiAKLQkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKyAgICBSZXYgMy4wLjUuCiAKLTIwMDMtMDEtMjkgIEZyYW56IFNpcmwgIDxGcmFuei5TaXJsLWtlcm5lbEBsYXV0ZXJiYWNoLmNvbT4KK2NvbW1pdCA4NDA2ZjVmNDhmN2Y1OGExYzk4MmE5M2E5NWQ1MjFjZjgyYjMyNDFmCitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgVGh1IEFwciAzIDE4OjU3OjM0IDIwMDggKzAwMDAKIAotCSogc3JjL3Bvd2VycGMvcHBjX2Nsb3N1cmUuUzogUmVjb2RlIHRvIGZpdCBzaGFyZWQgbGlicy4KKyAgICAzLjAuNQogCi0yMDAzLTAxLTI4ICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KK2NvbW1pdCAyM2E5ZTczMjEyYjYyZjk2ODRjZWRiMGNlNzBlOTJjNTljZmRhZmZhCitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgV2VkIE1hciA1IDAwOjA3OjAyIDIwMDggKzAwMDAKIAotCSogaW5jbHVkZS9mZmkuaC5pbjogRW5hYmxlIEZGSV9DTE9TVVJFUyBmb3IgeDg2XzY0LgotCSogc3JjL3g4Ni9mZmk2NC5jIChmZmlfcHJlcF9jbG9zdXJlKTogTmV3LgotCShmZmlfY2xvc3VyZV9VTklYNjRfaW5uZXIpOiBOZXcuCi0JKiBzcmMveDg2L3VuaXg2NC5TIChmZmlfY2xvc3VyZV9VTklYNjQpOiBOZXcuCisgICAgMjAwOC0wMy0wNCAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJlZGhhdC5jb20+CisgICAgICAgICAgICAgICAgQmxha2UgQ2hhZmZpbgorICAgICAgICAgICAgICAgIGhvc0B0YW1hbmVnaS5vcmcKKyAgICAKKyAgICAgICAgICAgICogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlX3NwbGl0Mi5jCisgICAgICAgICAgICAgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fbG9uZ2RvdWJsZV9zcGxpdC5jCisgICAgICAgICAgICAgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZGJsc19zdHJ1Y3QuYworICAgICAgICAgICAgICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2RvdWJsZV92YS5jCisgICAgICAgICAgICAgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbG9uZ2RvdWJsZS5jCisgICAgICAgICAgICAgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbG9uZ2RvdWJsZV92YS5jCisgICAgICAgICAgICAgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfcG9pbnRlci5jCisgICAgICAgICAgICAgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfcG9pbnRlcl9zdGFjay5jCisgICAgICAgICAgICAgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9lcnJfYmFkX2FiaS5jCisgICAgICAgICAgICAgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9lcnJfYmFkX3R5cGVkZWYuYworICAgICAgICAgICAgICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvaHVnZV9zdHJ1Y3QuYworICAgICAgICAgICAgICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbGFyZ2UyLmMKKyAgICAgICAgICAgICAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X2xhcmdlLmMKKyAgICAgICAgICAgICAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X21lZGl1bTIuYworICAgICAgICAgICAgICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbWVkaXVtLmM6IE5ldyB0ZXN0cyBmcm9tIEFwcGxlLgogCi0yMDAzLTAxLTI3ICBBbGV4YW5kcmUgT2xpdmEgIDxhb2xpdmFAcmVkaGF0LmNvbT4KK2NvbW1pdCA0MjllMzdkM2FkNjUzZTUyZTc1YmY3MjVjODgzYWI3OWU4NTlmODlhCitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgVGh1IEZlYiAyOCAwNDo1MDoxOSAyMDA4ICswMDAwCiAKLQkqIGNvbmZpZ3VyZS5pbiAodG9vbGV4ZWNkaXIsIHRvb2xleGVjbGliZGlyKTogU2V0IGFuZCBBQ19TVUJTVC4KLQlSZW1vdmUgVVNFX0xJQkRJUiBjb25kaXRpb25hbC4KLQkqIE1ha2VmaWxlLmFtICh0b29sZXhlY2RpciwgdG9vbGV4ZWNsaWJkaXIpOiBEb24ndCBvdmVycmlkZS4KLQkqIE1ha2VmaWxlLmluLCBjb25maWd1cmU6IFJlYnVpbHQuCisgICAgY2xpY2t5CiAKLTIwMDMtMDEwMjcgIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KK2NvbW1pdCA1MWU3OWM0MjgzNDhjMDMzMzE0ZjU0YmNiMzBmN2UzODhjNTllMzQ3CitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgVGh1IEZlYiAyOCAwNDo0NzozNSAyMDA4ICswMDAwCiAKLQkqIE1ha2VmaWxlLmFtIChUQVJHRVRfU1JDX1BPV0VSUENfQUlYKTogRml4IHR5cG8uCi0JKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKyAgICBnZXRjbGlja3kKIAotMjAwMy0wMS0yMiAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+Citjb21taXQgYWZmY2FiMDRlMjgwZWZlYWNlNDVhNzJjNGRjNjE1MmMwZTRmMWI3ZgorQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIFR1ZSBGZWIgMjYgMTk6MDE6NTMgMjAwOCArMDAwMAogCi0JKiBzcmMvcG93ZXJwYy9kYXJ3aW4uUyAoX2ZmaV9jYWxsX0FJWCk6IEFkZCBBdWdtZW50YXRpb24gc2l6ZSB0bwotCXVud2luZCBpbmZvLgorICAgIDIwMDgtMDItMjYgIEpha3ViIEplbGluZWsgIDxqYWt1YkByZWRoYXQuY29tPgorICAgICAgICAgICAgICAgIEFudGhvbnkgR3JlZW4gIDxncmVlbkByZWRoYXQuY29tPgorICAgIAorICAgICAgICAgICAgKiBzcmMvYWxwaGEvb3NmLlM6IEFkZCAubm90ZS5HTlUtc3RhY2sgb24gTGludXguCisgICAgICAgICAgICAqIHNyYy9zMzkwL3N5c3YuUzogTGlrZXdpc2UuCisgICAgICAgICAgICAqIHNyYy9wb3dlcnBjL2xpbnV4NjQuUzogTGlrZXdpc2UuCisgICAgICAgICAgICAqIHNyYy9wb3dlcnBjL2xpbnV4NjRfY2xvc3VyZS5TOiBMaWtld2lzZS4KKyAgICAgICAgICAgICogc3JjL3Bvd2VycGMvcHBjX2Nsb3N1cmUuUzogTGlrZXdpc2UuCisgICAgICAgICAgICAqIHNyYy9wb3dlcnBjL3N5c3YuUzogTGlrZXdpc2UuCisgICAgICAgICAgICAqIHNyYy94ODYvdW5peDY0LlM6IExpa2V3aXNlLgorICAgICAgICAgICAgKiBzcmMveDg2L3N5c3YuUzogTGlrZXdpc2UuCisgICAgICAgICAgICAqIHNyYy9zcGFyYy92OC5TOiBMaWtld2lzZS4KKyAgICAgICAgICAgICogc3JjL3NwYXJjL3Y5LlM6IExpa2V3aXNlLgorICAgICAgICAgICAgKiBzcmMvbTY4ay9zeXN2LlM6IExpa2V3aXNlLgorICAgICAgICAgICAgKiBzcmMvaWE2NC91bml4LlM6IExpa2V3aXNlLgorICAgICAgICAgICAgKiBzcmMvYXJtL3N5c3YuUzogTGlrZXdpc2UuCiAKLTIwMDMtMDEtMjEgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KK2NvbW1pdCA1OTY4OWQ1NTIyYzE1OWEzYWM5NjdhZGI2Yjg5MWNmNWYyMmM4OTBmCitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgVHVlIEZlYiAyNiAxNzo0MDo1MSAyMDA4ICswMDAwCiAKLQkqIHNyYy9wb3dlcnBjL2Rhcndpbi5TOiBBZGQgdW53aW5kIGluZm8uCi0JKiBzcmMvcG93ZXJwYy9kYXJ3aW5fY2xvc3VyZS5TOiBMaWtld2lzZS4KKyAgICAyMDA4LTAyLTI2ICBBbnRob255IEdyZWVuICA8Z3JlZW5AcmVkaGF0LmNvbT4KKyAgICAgICAgICAgICAgICBUaG9tYXMgSGVsbGVyICA8dGhlbGxlckBjdHlwZXMub3JnPgorICAgIAorICAgICAgICAgICAgKiBzcmMveDg2L2ZmaS5jIChmZmlfY2xvc3VyZV9TWVNWX2lubmVyKTogQ2hhbmdlIEMrKyBjb21tZW50IHRvIEMKKyAgICAgICAgICAgIGNvbW1lbnQuCiAKLTIwMDMtMDEtMTQgIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorY29tbWl0IGIxM2M4NGNmNDY2ODgyOGZmODQyOWJhNGEyZjk0Y2QxZWI1NzRhZTAKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBUdWUgRmViIDI2IDE3OjM4OjE1IDIwMDggKzAwMDAKIAotCSogc3JjL3g4Ni9mZmk2NC5jIChmZmlfcHJlcF9hcmdzKTogQ2hlY2sgZm9yIHZvaWQgcmV0dmFsLgotCShmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IExpa2V3aXNlLgotCSogc3JjL3g4Ni91bml4NjQuUzogQWRkIHVud2luZCBpbmZvLgorICAgIDIwMDgtMDItMjYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkByZWRoYXQub3JnPgorICAgICAgICAgICAgICAgIFRob21hcyBIZWxsZXIgPHRoZWxsZXJAY3R5cGVzLm9yZz4KKyAgICAKKyAgICAgICAgICAgICogaW5jbHVkZS9mZmkuaC5pbjogQ2hhbmdlIHZvaWQgKCopKCkgdG8gdm9pZCAoKikodm9pZCkuCiAKLTIwMDMtMDEtMTQgIEFuZHJlYXMgSmFlZ2VyICA8YWpAc3VzZS5kZT4KK2NvbW1pdCAyNjUyODlmNjc5ZmZkMjRhODhhZTFhYTJjZWYwZTRhYTE0NzAzY2Q4CitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgVHVlIEZlYiAyNiAxNzozNDozNiAyMDA4ICswMDAwCiAKLQkqIHNyYy9mZml0ZXN0LmMgKG1haW4pOiBPbmx5IHVzZSBmZmlfY2xvc3VyZXMgaWYgdGhvc2UgYXJlCi0Jc3VwcG9ydGVkLgorICAgIDIwMDgtMDItMjYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBzcGluZGF6emxlLm9yZz4KKyAgICAKKyAgICAgICAgICAgICogc3JjL2FscGhhL2ZmaS5jOiBDaGFuZ2Ugdm9pZCAoKikoKSB0byB2b2lkICgqKSh2b2lkKS4KKyAgICAgICAgICAgIHNyYy9hbHBoYS9vc2YuUywgc3JjL2FybS9mZmkuYywgc3JjL2Zydi9mZmkuYywgc3JjL2lhNjQvZmZpLmMsCisgICAgICAgICAgICBzcmMvaWE2NC91bml4LlMsIHNyYy9qYXZhX3Jhd19hcGkuYywgc3JjL20zMnIvZmZpLmMsCisgICAgICAgICAgICBzcmMvbWlwcy9mZmkuYywgc3JjL3BhL2ZmaS5jLCBzcmMvcGEvaHB1eDMyLlMsIHNyYy9wYS9saW51eC5TLAorICAgICAgICAgICAgc3JjL3Bvd2VycGMvZmZpLmMsIHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYywgc3JjL3Jhd19hcGkuYywKKyAgICAgICAgICAgIHNyYy9zMzkwL2ZmaS5jLCBzcmMvc2gvZmZpLmMsIHNyYy9zaDY0L2ZmaS5jLCBzcmMvc3BhcmMvZmZpLmMsCisgICAgICAgICAgICBzcmMveDg2L2ZmaS5jLCBzcmMveDg2L3VuaXg2NC5TLCBzcmMveDg2L2RhcndpbjY0LlMsPiAgICAgICAgIHNyYy94ODYvZmZpNjQuYzogRGl0dG8uCiAKLTIwMDMtMDEtMTMgQW5kcmVhcyBUb2JsZXIgPGEudG9ibGVyQHNjaHdlaXouY2g+Citjb21taXQgZmI1MDM2Y2Q2ZDBmOTA5OTE4ZTkwZjdkMmQ5ZmQ4MGQ0NjY4MmQ1ZAorQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIFN1biBGZWIgMjQgMTc6MjU6MjUgMjAwOCArMDAwMAogCi0JKiBsaWJmZmkvc3JjL2ZmaXRlc3QuYwotCSBhZGQgY2xvc3VyZSB0ZXN0Y2FzZXMKKyAgICBmaXggZGF0ZQogCi0yMDAzLTAxLTEzIEtldmluIEIuIEhlbmRyaWNrcyA8a2hlbmRyaWNrc0BpdmV5LnV3by5jYT4KK2NvbW1pdCA0MGJlYzEwOGU3ZDAxODFlNmM5OTI4YWE3YTMzMTg3YmNjMGYzZDZmCitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgU3VuIEZlYiAyNCAxNzoyNTowMiAyMDA4ICswMDAwCiAKLQkqIGxpYmZmaS9zcmMvcG93ZXJwYy9mZmkuYwotCSBmaXggYWxpZ25tZW50IGJ1ZyBmb3IgZmxvYXQgKDQgYnl0ZSBhbGlnbmVkIGlzbyA4IGJ5dGUpCisgICAgTmV3IHJlbGVhc2UKIAotMjAwMy0wMS0wOSAgR2VvZmZyZXkgS2VhdGluZyAgPGdlb2Zma0BhcHBsZS5jb20+Citjb21taXQgYjkyMjA0OGZhODJlYTEwOWE0YWYyNjllZTQ3YmJjMmE1ODZiYmFjMgorQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIFN1biBGZWIgMjQgMTc6MjQ6MDAgMjAwOCArMDAwMAogCi0JKiBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmM6IFJlbW92ZSBSQ1MgdmVyc2lvbiBzdHJpbmcuCi0JKiBzcmMvcG93ZXJwYy9kYXJ3aW4uUzogUmVtb3ZlIFJDUyB2ZXJzaW9uIHN0cmluZy4KKyAgICAyMDA4LTAyLTI0ICBBbnRob255IEdyZWVuICA8Z3JlZW5Ac3BpbmRhenpsZS5vcmc+CisgICAgCisgICAgICAgICAgICAqIGNvbmZpZ3VyZS5hYzogQWNjZXB0IG9wZW5ic2QqLCBub3QganVzdCBvcGVuYnNkLgorICAgICAgICAgICAgQnVtcCB2ZXJzaW9uIHRvIDMuMC40LgorICAgICAgICAgICAgKiBjb25maWd1cmUsIGRvYy9zdGFtcC12dGksIGRvYy92ZXJzaW9uLnRleGk6IFJlYnVpbHQuCisgICAgICAgICAgICAqIGxpYnRvb2wtdmVyc2lvbjogSW5jcmVtZW50IHJldmlzaW9uLgorICAgICAgICAgICAgKiBSRUFETUU6IFVwZGF0ZSBmb3IgbmV3IHJlbGVhc2UuCiAKLTIwMDMtMDEtMDMgIEplZmYgU3R1cm0gIDxqc3R1cm1Ab25lLXBvaW50LmNvbT4KK2NvbW1pdCBhZmZjYTRiOTJkMDZlNTU1NDc4NGM3ZTliMjMzMDI5ZWY4M2Y3ZDhhCitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgRnJpIEZlYiAyMiAyMTo1MzoyOSAyMDA4ICswMDAwCiAKLQkqIGluY2x1ZGUvZmZpLmguaW46IEFkZCBjbG9zdXJlIGRlZmluZXMgZm9yIFNQQVJDLCBTUEFSQzY0LgotCSogc3JjL2ZmaXRlc3QuYyAobWFpbik6IFVzZSBzdGF0aWMgc3RvcmFnZSBmb3IgY2xvc3VyZS4KLQkqIHNyYy9zcGFyYy9mZmkuYyAoZmZpX3ByZXBfY2xvc3VyZSwgZmZpX2Nsb3N1cmVfc3BhcmNfaW5uZXIpOiBOZXcuCi0JKiBzcmMvc3BhcmMvdjguUyAoZmZpX2Nsb3N1cmVfdjgpOiBOZXcuCi0JKiBzcmMvc3BhcmMvdjkuUyAoZmZpX2Nsb3N1cmVfdjkpOiBOZXcuCisgICAgc3luYyByZWFkbWUgd2l0aCB3ZWIgcGFnZS4KIAotMjAwMi0xMS0xMCAgUmFuaml0IE1hdGhldyA8cm1hdGhld0Bob3RtYWlsLmNvbT4KK2NvbW1pdCAzZTUzZDg3NTJlYTc0ODU5YjRjNjRmYmJmOTM1ZTYyYTkzN2M0ZDc4CitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgRnJpIEZlYiAyMiAyMTo1MjozOCAyMDA4ICswMDAwCiAKLQkqIGluY2x1ZGUvZmZpLmguaW46IEFkZGVkIEZGSV9TVERDQUxMIGZmaV90eXBlCi0JICBlbnVtZXJhdGlvbiBmb3IgWDg2X1dJTjMyLgotCSogc3JjL3g4Ni93aW4zMi5TOiBBZGRlZCBmZmlfY2FsbF9TVERDQUxMIGZ1bmN0aW9uCi0JICBkZWZpbml0aW9uLgotCSogc3JjL3g4Ni9mZmkuYyAoZmZpX2NhbGwvZmZpX3Jhd19jYWxsKTogQWRkZWQKLQkgIHN3aXRjaCBjYXNlcyBmb3IgcmVjb2duaXNpbmcgRkZJX1NURENBTEwgYW5kCi0JICBjYWxsaW5nIGZmaV9jYWxsX1NURENBTEwgaWYgdGFyZ2V0IGlzIFg4Nl9XSU4zMi4KLQkqIHNyYy9mZml0ZXN0LmMgKG15X3N0ZGNhbGxfc3RybGVuL3N0ZGNhbGxfbWFueSk6Ci0JICBzdGRjYWxsIHZlcnNpb25zIG9mIHRoZSAibXlfc3RybGVuIiBhbmQgIm1hbnkiCi0JICB0ZXN0IGZ1bmN0aW9ucyAoZm9yIFg4Nl9XSU4zMikuCi0JICBBZGRlZCB0ZXN0IGNhc2VzIHRvIHRlc3Qgc3RkY2FsbCBpbnZvY2F0aW9uIHVzaW5nCi0JICB0aGVzZSBmdW5jdGlvbnMuCisgICAgTmV3IHJlbGVhc2UKIAotMjAwMi0xMi0wMiAgS2F6IEtvamltYSAgPGtrb2ppbWFAZ2NjLmdudS5vcmc+Citjb21taXQgNGQ5MmY2YzhlNzhmZTA4NGJlNjVmM2U4YjU4Yjg1OTkwMWJhNzk2ZAorQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIEZyaSBGZWIgMjIgMjE6NDk6NDYgMjAwOCArMDAwMAogCi0JKiBzcmMvc2gvc3lzdi5TOiBBZGQgRFdBUkYyIHVud2luZCBpbmZvLgorICAgIDIwMDgtMDItMjIgIEFudGhvbnkgR3JlZW4gIDxncmVlbkByZWRoYXQuY29tPgorICAgIAorICAgICAgICAgICAgKiBjb25maWd1cmUuYWM6IEJ1bXAgdmVyc2lvbiB0byAzLjAuMy4KKyAgICAgICAgICAgICogY29uZmlndXJlLCBkb2Mvc3RhbXAtdnRpLCBkb2MvdmVyc2lvbi50ZXhpOiBSZWJ1aWx0LgorICAgICAgICAgICAgKiBsaWJ0b29sLXZlcnNpb246IEluY3JlbWVudCByZXZpc2lvbi4KKyAgICAgICAgICAgICogUkVBRE1FOiBVcGRhdGUgZm9yIG5ldyByZWxlYXNlLiAgQ2xlYW4gdXAgdGVzdCBkb2NzLgogCi0yMDAyLTExLTI3ICBVbHJpY2ggV2VpZ2FuZCAgPHV3ZWlnYW5kQGRlLmlibS5jb20+Citjb21taXQgMGUxODVmYTExYTAxZjgxNjgyNGJhMjY4N2VkMzcxNWFiNjIxOWJlZgorQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIEZyaSBGZWIgMjIgMjE6NDM6MTggMjAwOCArMDAwMAogCi0JKiBzcmMvczM5MC9zeXN2LlMgKC5laF9mcmFtZSBzZWN0aW9uKTogTWFrZSBzZWN0aW9uIHJlYWQtb25seS4KKyAgICBVcGRhdGUgY29uZmlndXJlIHNjcmlwdC4KIAotMjAwMi0xMS0yNiAgSmltIFdpbHNvbiAgPHdpbHNvbkByZWRoYXQuY29tPgorY29tbWl0IGY3Mzk4NmJkMjExY2ZiYmFhNTkzZDEzMDk1MDRkMGRjNjg2MjYxOTEKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBGcmkgRmViIDIyIDIxOjQwOjUzIDIwMDggKzAwMDAKIAotCSogc3JjL3R5cGVzLmMgKEZGSV9UWVBFX1BPSU5URVIpOiBIYXMgc2l6ZSA4IG9uIElBNjQuCisgICAgMjAwOC0wMi0yMiAgQmpvZXJuIEtvZW5pZyAgPGJrb2VuaWdAYWxwaGEtdGllcmNoZW4uZGU+CisgICAgICAgICAgICAgICAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6Lm9yZz4KKyAgICAKKyAgICAgICAgICAgICogY29uZmlndXJlLmFjOiBBZGQgYW1kNjQtKi1mcmVlYnNkKiB0YXJnZXQuCisgICAgICAgICAgICAqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KIAotMjAwMi0xMS0yMyAgSC5KLiBMdSA8aGpsQGdudS5vcmc+Citjb21taXQgMDIwOGY2OGZlNWRlMzBjMzNlN2Y3MGViYzI4MTYzNTkxNzAxM2Y1YQorQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIEZyaSBGZWIgMjIgMjE6MTU6NDQgMjAwOCArMDAwMAogCi0JKiBhY2luY2x1ZGUubTQ6IEFkZCBkdW1teSBBTV9QUk9HX0xJQlRPT0wuCi0JSW5jbHVkZSAuLi9jb25maWcvYWNjcm9zcy5tNC4KLQkqIGFjbG9jYWwubTQ7IFJlYnVpbGQuCi0JKiBjb25maWd1cmU6IExpa2V3aXNlLgorICAgIDIwMDgtMDItMjIgIFRob21hcyBIZWxsZXIgPHRoZWxsZXJAY3R5cGVzLm9yZz4KKyAgICAKKyAgICAgICAgICAgICogY29uZmlndXJlLmFjOiBBZGQgeDg2IE9wZW5CU0Qgc3VwcG9ydC4KKyAgICAgICAgICAgICogY29uZmlndXJlOiBSZWJ1aWx0LgogCi0yMDAyLTExLTE1ICBVbHJpY2ggV2VpZ2FuZCAgPHV3ZWlnYW5kQGRlLmlibS5jb20+Citjb21taXQgMDFhZGIwZTYzOGE4NmNmMGQ1ZTY2OGVkOGUwOGJlOWIwY2QyNTA1ZgorQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIFRodSBGZWIgMjEgMTY6MTc6MjYgMjAwOCArMDAwMAogCi0JKiBzcmMvczM5MC9zeXN2LlMgKC5laF9mcmFtZSBzZWN0aW9uKTogQWRhcHQgdG8gcGNyZWwgRkRFIGVuY29kaW5nLgorICAgIEZpeCBSRUFETUUuCiAKLTIwMDItMTEtMTEgIERKIERlbG9yaWUgIDxkakByZWRoYXQuY29tPgorY29tbWl0IDFlZGQ0NTYzMjI1OTgxYTE0ZjdkNGZiOTkxOWIxZWQ4OGUzODA4MmYKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBUaHUgRmViIDIxIDEzOjM5OjAxIDIwMDggKzAwMDAKIAotCSogY29uZmlndXJlLmluOiBMb29rIGZvciBjb21tb24gZmlsZXMgaW4gdGhlIHJpZ2h0IHBsYWNlLgorICAgIDMuMC4yCiAKLTIwMDItMTAtMDggIFVscmljaCBXZWlnYW5kICA8dXdlaWdhbmRAZGUuaWJtLmNvbT4KK2NvbW1pdCBjOWI1NDI4MDA4NjRlMjIwNGRiNmU4M2YzODQzYTE3ODEzYmE2MTY1CitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgVGh1IEZlYiAyMSAxMzozNjo0MyAyMDA4ICswMDAwCiAKLQkqIHNyYy9qYXZhX3Jhd19hcGkuYyAoZmZpX2phdmFfcmF3X3RvX3B0cmFycmF5KTogSW50ZXJwcmV0Ci0JcmF3IGRhdGEgYXMgX0p2X3dvcmQgdmFsdWVzLCBub3QgZmZpX3Jhdy4KLQkoZmZpX2phdmFfcHRyYXJyYXlfdG9fcmF3KTogTGlrZXdpc2UuCi0JKGZmaV9qYXZhX3J2YWx1ZV90b19yYXcpOiBOZXcgZnVuY3Rpb24uCi0JKGZmaV9qYXZhX3Jhd19jYWxsKTogQ2FsbCBpdC4KLQkoZmZpX2phdmFfcmF3X3RvX3J2YWx1ZSk6IE5ldyBmdW5jdGlvbi4KLQkoZmZpX2phdmFfdHJhbnNsYXRlX2FyZ3MpOiBDYWxsIGl0LgotCSogc3JjL2ZmaXRlc3QuYyAoY2xvc3VyZV90ZXN0X2ZuKTogSW50ZXJwcmV0IHJldHVybiB2YWx1ZQotCWFzIGZmaV9hcmcsIG5vdCBpbnQuCi0JKiBzcmMvczM5MC9mZmkuYyAoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBBZGQgbWlzc2luZwotCUZGSV9UWVBFX1BPSU5URVIgY2FzZS4KLQkoZmZpX2Nsb3N1cmVfaGVscGVyX1NZU1YpOiBMaWtld2lzZS4gIEFsc28sIGFzc3VtZSByZXR1cm4KLQl2YWx1ZXMgZXh0ZW5kZWQgdG8gd29yZCBzaXplLgorICAgIGFkZCBtaXNzaW5nIGZpbGUKIAotMjAwMi0xMC0wMiAgQW5kcmVhcyBKYWVnZXIgIDxhakBzdXNlLmRlPgorY29tbWl0IGQ1ZmE1NjMzZDVjOGQzYzIxMmEyMjY3Y2ZhMzhmYmE0MDkxYmFhMmMKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBUaHUgRmViIDIxIDEzOjM2OjE5IDIwMDggKzAwMDAKIAotCSogc3JjL3g4Ni9mZmk2NC5jIChmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IFJlbW92ZSBkZWJ1ZyBvdXRwdXQuCisgICAgMjAwOC0wMi0yMSAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJlZGhhdC5jb20+CisgICAgCisgICAgICAgICAgICAqIGNvbmZpZ3VyZS5hYzogQnVtcCB2ZXJzaW9uIHRvIDMuMC4yLgorICAgICAgICAgICAgKiBjb25maWd1cmUsIGRvYy9zdGFtcC12dGksIGRvYy92ZXJzaW9uLnRleGk6IFJlYnVpbHQuCisgICAgICAgICAgICAqIGxpYnRvb2wtdmVyc2lvbjogSW5jcmVtZW50IHJldmlzaW9uLgorICAgICAgICAgICAgKiBSRUFETUU6IFVwZGF0ZSBmb3IgbmV3IHJlbGVhc2UuCisgICAgCisgICAgMjAwOC0wMi0yMSAgQmrDtnJuIEvDtm5pZyA8YmtvZW5pZ0BhbHBoYS10aWVyY2hlbi5kZT4KKyAgICAKKyAgICAgICAgICAgICogc3JjL3g4Ni9mcmVlYnNkLlM6IE5ldyBmaWxlLgorICAgICAgICAgICAgKiBjb25maWd1cmUuYWM6IEFkZCB4ODYgRnJlZUJTRCBzdXBwb3J0LgorICAgICAgICAgICAgKiBNYWtlZmlsZS5hbTogRGl0dG8uCiAKLTIwMDItMTAtMDEgIEJvIFRob3JzZW4gIDxib0BzbWV0YW5hLnN1c2UuZGU+Citjb21taXQgYWMzNWJmYzZmY2FkZDg4ODBjMWVmY2UzNjcyNDgyMGY5MDc0YjMxOAorQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIFNhdCBGZWIgMTYgMDE6MDM6NTYgMjAwOCArMDAwMAogCi0JKiBpbmNsdWRlL2ZmaS5oLmluOiBGaXggaTM4NiB3aW4zMiBjb21waWxhdGlvbi4KKyAgICBVcGRhdGVkCiAKLTIwMDItMDktMzAgIFVscmljaCBXZWlnYW5kICA8dXdlaWdhbmRAZGUuaWJtLmNvbT4KK2NvbW1pdCBmNzk0Mjk3NWZlZTdiMDE2MjY0N2RkNzllMjY1MjYxNWI3MzdlOThlCitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgU2F0IEZlYiAxNiAwMTowMjowMCAyMDA4ICswMDAwCiAKLQkqIGNvbmZpZ3VyZS5pbjogQWRkIHMzOTB4LSotbGludXgtKiB0YXJnZXQuCi0JKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCi0JKiBpbmNsdWRlL2ZmaS5oLmluOiBEZWZpbmUgUzM5MFggZm9yIHMzOTB4IHRhcmdldHMuCi0JKEZGSV9DTE9TVVJFUyk6IERlZmluZSBmb3IgczM5MC9zMzkweC4KLQkoRkZJX1RSQU1QT0xJTkVfU0laRSk6IExpa2V3aXNlLgotCShGRklfTkFUSVZFX1JBV19BUEkpOiBMaWtld2lzZS4KLQkqIHNyYy9wcmVwX2NpZi5jIChmZmlfcHJlcF9jaWYpOiBEbyBub3QgY29tcHV0ZSBzdGFjayBzcGFjZSBmb3IgczM5MC4KLQkqIHNyYy90eXBlcy5jIChGRklfVFlQRV9QT0lOVEVSKTogVXNlIDgtYnl0ZSBwb2ludGVycyBvbiBzMzkweC4KLQkqIHNyYy9zMzkwL2ZmaS5jOiBNYWpvciByZXdvcmsgb2YgZXhpc3RpbmcgY29kZS4gIEFkZCBzdXBwb3J0IGZvcgotCXMzOTB4IHRhcmdldHMuICBBZGQgY2xvc3VyZSBzdXBwb3J0LgotCSogc3JjL3MzOTAvc3lzdi5TOiBMaWtld2lzZS4KKyAgICAyMDA4LTAyLTE1ICBBbnRob255IEdyZWVuICA8Z3JlZW5AcmVkaGF0LmNvbT4KKyAgICAKKyAgICAgICAgICAgICogY29uZmlndXJlLmFjOiBCdW1wIHZlcnNpb24gdG8gMy4wLjEuCisgICAgICAgICAgICAqIGNvbmZpZ3VyZSwgZG9jL3N0YW1wLXZ0aSwgZG9jL3ZlcnNpb24udGV4aTogUmVidWlsdC4KKyAgICAgICAgICAgICogbGlidG9vbC12ZXJzaW9uOiBJbmNyZW1lbnQgcmV2aXNpb24uCisgICAgICAgICAgICAqIFJFQURNRTogVXBkYXRlIGZvciBuZXcgcmVsZWFzZS4KKyAgICAKKyAgICAyMDA4LTAyLTE1ICBEYXZpZCBEYW5leSAgPGRkYW5leUBhdnRyZXguY29tPgorICAgIAorICAgICAgICAgICAgKiBzcmMvbWlwcy9mZmkuYzogUmVtb3ZlIGV4dHJhICc+JyBmcm9tIGluY2x1ZGUgZGlyZWN0aXZlLgorICAgICAgICAgICAgKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKTogVXNlIGNsZWFyX2xvY2F0aW9uIGluc3RlYWQgb2YgdHJhbXAuCiAKLTIwMDItMDktMjkgIFJpY2hhcmQgRWFybnNoYXcgIDxyZWFybnNoYUBhcm0uY29tPgorY29tbWl0IDU5YWE2YmIxYmZjODZhNjEwYWMxYThiMTIzNDQzZWZkNzU4NTRkZDEKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBGcmkgRmViIDE1IDIwOjUyOjI2IDIwMDggKzAwMDAKIAotCSogc3JjL2FybS9zeXN2LlM6IEZpeCB0eXBvLgorICAgIEFkZCBtb3JlIHBsYXRmb3Jtcy4KIAotMjAwMi0wOS0yOCAgUmljaGFyZCBFYXJuc2hhdyAgPHJlYXJuc2hhQGFybS5jb20+Citjb21taXQgNDVhNDVhYjk5MDc0NDQ4YmUwYWUxYThkMmFkZTUwZDI4YjYwZjhkZQorQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIEZyaSBGZWIgMTUgMTk6MTY6MzYgMjAwOCArMDAwMAogCi0JKiBzcmMvYXJtL3N5c3YuUzogSWYgd2UgZG9uJ3QgaGF2ZSBtYWNoaW5lL2FzbS5oIGFuZCB0aGUgcHJlLXByb2Nlc3NvcgotCWhhcyBkZWZpbmVkIF9fVVNFUl9MQUJFTF9QUkVGSVhfXywgdGhlbiB1c2UgaXQgaW4gQ05BTUUuCi0JKGZmaV9jYWxsX1NZU1YpOiBIYW5kbGUgc29mdC1mbG9hdC4KKyAgICAzLjAgbm90ZXMKIAotMjAwMi0wOS0yNyAgQm8gVGhvcnNlbiAgPGJvQHN1c2UuZGU+Citjb21taXQgNGRiNzRjYmVhODg4YzlmMTI1MWI4NWJhZjAwZDk5YjgzZDNiOTk0ZAorQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIEZyaSBGZWIgMTUgMTk6MTA6MjYgMjAwOCArMDAwMAogCi0JKiBpbmNsdWRlL2ZmaS5oLmluOiBGaXggbXVsdGlsaWIgeDg2LTY0IHN1cHBvcnQuCisgICAgVXBkYXRlCiAKLTIwMDItMDktMjIgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KK2NvbW1pdCBjM2UxMTAxZmZhYmY0NGQ4YTJlZTQ2ZTAzYmE5YWI1ODIwNTBhODI1CitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgRnJpIEZlYiAxNSAxODo0Mzo0MCAyMDA4ICswMDAwCiAKLQkqIE1ha2VmaWxlLmFtIChhbGwtbXVsdGkpOiBGaXggbXVsdGlsaWIgcGFyYWxsZWwgYnVpbGQuCisgICAgMjAwOC0wMi0xNSAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJlZGhhdC5jb20+CisgICAgCisgICAgICAgICAgICAqIGNvbmZpZ3VyZS5hYzogQnVtcCB2ZXJzaW9uIHRvIDMuMC4wLAorICAgICAgICAgICAgKiBjb25maWd1cmUsIGRvYy9zdGFtcC12dGksIGRvYy92ZXJzaW9uLnRleGk6IFJlYnVpbHQuCisgICAgCisgICAgMjAwOC0wMi0xNSAgRGF2aWQgRGFuZXkgIDxkZGFuZXlAYXZ0cmV4LmNvbT4KKyAgICAKKyAgICAgICAgICAgICogc3JjL21pcHMvZmZpLmMgKFVTRV9fQlVJTFRJTl9fX0NMRUFSX0NBQ0hFKToKKyAgICAgICAgICAgIERlZmluZSAoY29uZGl0aW9uYWxseSksIGFuZCB1c2UgaXQgdG8gaW5jbHVkZSBjYWNoZWN0bC5oLgorICAgICAgICAgICAgKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKTogRml4IGNhY2hlIGZsdXNoaW5nLgorICAgICAgICAgICAgKiBzcmMvbWlwcy9mZml0YXJnZXQuaCAoX0FCSU4zMiwgX0FCSTY0LCBfQUJJTzMyKTogRGVmaW5lLgogCi0yMDAyLTA3LTE5ICBLYXogS29qaW1hICA8a2tvamltYUBnY2MuZ251Lm9yZz4KK2NvbW1pdCA3ZTBjYzEyZTkyMzNhZDI4NWRiNDFjZThkYmRkYTYxZWQyYTdmYjA2CitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgRnJpIEZlYiAxNSAxNTo1MTowMyAyMDA4ICswMDAwCiAKLQkqIGNvbmZpZ3VyZS5pbiAoc2hbMzRdKi0qLWxpbnV4Kik6IEFkZCBicmFja2V0cy4KLQkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKyAgICBOZXcgcmVsZWFzZQogCi0yMDAyLTA3LTE4ICBLYXogS29qaW1hICA8a2tvamltYUBnY2MuZ251Lm9yZz4KK2NvbW1pdCAyZDdkYzg4NWVjNDBkNTM4NjZmMjk5ODRkNTk1NTExOTQyYzhiNjg2CitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgRnJpIEZlYiAxNSAxNTozMDoyNiAyMDA4ICswMDAwCiAKLQkqIE1ha2VmaWxlLmFtOiBBZGQgU0ggc3VwcG9ydC4KLQkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgotCSogY29uZmlndXJlLmluIChzaC0qLWxpbnV4Kiwgc2hbMzRdKi0qLWxpbnV4Kik6IEFkZCB0YXJnZXQuCi0JKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCi0JKiBpbmNsdWRlL2ZmaS5oLmluOiBBZGQgU0ggc3VwcG9ydC4KLQkqIHNyYy9zaC9mZmkuYzogTmV3IGZpbGUuCi0JKiBzcmMvc2gvc3lzdi5TOiBOZXcgZmlsZS4KLQkqIHNyYy90eXBlcy5jOiBBZGQgU0ggc3VwcG9ydC4KKyAgICAgICAgICAgICogbWFuL2ZmaV9jYWxsLjMsIG1hbi9mZmlfcHJlcF9jaWYuMywgbWFuL2ZmaS4zOgorICAgICAgICAgICAgVXBkYXRlIGRhdGVzIGFuZCByZW1vdmUgYWxsIHJlZmVyZW5jZXMgdG8gZmZpX3ByZXBfY2xvc3VyZS4KKyAgICAgICAgICAgICogY29uZmlndXJlLmFjOiBCdW1wIHZlcnNpb24gdG8gMi45OS45LgorICAgICAgICAgICAgKiBjb25maWd1cmUsIGRvYy9zdGFtcC12dGksIGRvYy92ZXJzaW9uLnRleGk6IFJlYnVpbHQuCiAKLTIwMDItMDctMTYgIEJvIFRob3JzZW4gIDxib0BzdXNlLmRlPgorY29tbWl0IGEwNTI1ZjAzZWVhYWVkMzNiMWVhYzgwZTBjMDE2NDU1Y2VlMzYxNWQKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBGcmkgRmViIDE1IDE1OjE0OjMwIDIwMDggKzAwMDAKIAotCSogc3JjL3g4Ni9mZmk2NC5jOiBOZXcgZmlsZSB0aGF0IGFkZHMgeDg2LTY0IHN1cHBvcnQuCi0JKiBzcmMveDg2L3VuaXg2NC5TOiBOZXcgZmlsZSB0aGF0IGhhbmRsZXMgYXJndW1lbnQgc2V0dXAgZm9yCi0JeDg2LTY0LgotCSogc3JjL3g4Ni9zeXN2LlM6IERvbid0IHVzZSB0aGlzIG9uIHg4Ni02NC4KLQkqIHNyYy94ODYvZmZpLmM6IERvbid0IHVzZSB0aGlzIG9uIHg4Ni02NC4KLQlSZW1vdmUgdW51c2VkIHZhcnMuCi0JKiBzcmMvcHJlcF9jaWYuYyAoZmZpX3ByZXBfY2lmKTogRG9uJ3QgZG8gc3RhY2sgc2l6ZSBjYWxjdWxhdGlvbgotCWZvciB4ODYtNjQuCi0JKiBzcmMvZmZpdGVzdC5jIChzdHJ1Y3Q2KTogTmV3IHRlc3QgdGhhdCB0ZXN0cyBhIHNwZWNpYWwgY2FzZSBpbgotCXRoZSB4ODYtNjQgQUJJLgotCShzdHJ1Y3Q3KTogTGlrZXdpc2UuCi0JKHN0cnVjdDgpOiBMaWtld2lzZS4KLQkoc3RydWN0OSk6IExpa2V3aXNlLgotCShjbG9zdXJlX3Rlc3RfZm4pOiBTaWxlbmNlIHdhcm5pbmcgYWJvdXQgdGhpcyB3aGVuIGl0J3Mgbm90IHVzZWQuCi0JKG1haW4pOiBBZGQgdGhlIG5ldyB0ZXN0cy4KLQkobWFpbik6IEZpeCBhIGNvdXBsZSBvZiB3cm9uZyBjYXN0cyBhbmQgc2lsZW5jZSBzb21lIGNvbXBpbGVyIHdhcm5pbmdzLgotCSogaW5jbHVkZS9mZmkuaC5pbjogQWRkIHg4Ni02NCBBQkkgZGVmaW5pdGlvbi4KLQkqIGZmaWNvbmZpZy5oLmluOiBSZWdlbmVyYXRlLgotCSogTWFrZWZpbGUuYW06IEFkZCB4ODYtNjQgc3VwcG9ydC4KLQkqIGNvbmZpZ3VyZS5pbjogTGlrZXdpc2UuCi0JKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KLQkqIGNvbmZpZ3VyZTogTGlrZXdpc2UuCisgICAgTmV3IHJlbGVhc2UuCiAKLTIwMDItMDYtMjQgIEJvIFRob3JzZW4gIDxib0BzdXNlLmRlPgorY29tbWl0IDJiMzBkZmIzMTQ2ZWUyNmFkOTU2ZDAwZWUwNWViODM1Y2ExYTk1YjQKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBGcmkgRmViIDE1IDE1OjEyOjQzIDIwMDggKzAwMDAKIAotCSogc3JjL3R5cGVzLmM6IE1lcmdlIHNldHRpbmdzIGZvciBzaW1pbGFyIGFyY2hpdGVjdHVyZXMuCi0JQWRkIHg4Ni02NCBzaXplcyBhbmQgYWxpZ25tZW50cy4KKyAgICAgICAgICAgICogbWFuL2ZmaV9wcmVwX2Nsb3N1cmUuMzogRGVsZXRlLgorICAgICAgICAgICAgKiBtYW4vTWFrZWZpbGUuYW0gKEVYVFJBX0RJU1QpOiBSZW1vdmUgZmZpX3ByZXBfY2xvc3VyZS4zLgorICAgICAgICAgICAgKG1hbl9NQU5TKTogRGl0dG8uCisgICAgICAgICAgICAqIG1hbi9NYWtlZmlsZS5pbjogUmVidWlsdC4KKyAgICAgICAgICAgICogY29uZmlndXJlLmFjOiBCdW1wIHZlcnNpb24gdG8gMi45OS44LgorICAgICAgICAgICAgKiBjb25maWd1cmUsIGRvYy9zdGFtcC12dGksIGRvYy92ZXJzaW9uLnRleGk6IFJlYnVpbHQuCiAKLTIwMDItMDYtMjMgIEJvIFRob3JzZW4gIDxib0BzdXNlLmRlPgorY29tbWl0IGJmNDFlNjQ4NDBlYmNiNmNjMzFhNmYwMjgyNTNjMWZkZTgyNzA1ZDgKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBGcmkgRmViIDE1IDAxOjU2OjUwIDIwMDggKzAwMDAKIAotCSogc3JjL2FybS9mZmkuYyAoZmZpX3ByZXBfYXJncyk6IFJlbW92ZSB1bnVzZWQgdmFycy4KLQkqIHNyYy9zcGFyYy9mZmkuYyAoZmZpX3ByZXBfYXJnc192OCk6IExpa2V3aXNlLgotCSogc3JjL21pcHMvZmZpLmMgKGZmaV9wcmVwX2FyZ3MpOiBMaWtld2lzZS4KLQkqIHNyYy9tNjhrL2ZmaS5jIChmZmlfcHJlcF9hcmdzKTogTGlrZXdpc2UuCisgICAgVXBkYXRlLgogCi0yMDAyLTA3LTE4ICBILkouIEx1ICAoaGpsQGdudS5vcmcpCitjb21taXQgNGQzOWRkZWU2NzdiYmI2MWQ2MjE4OTNiOTFlMTFlYWM1ZTdjNGFmNworQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIEZyaSBGZWIgMTUgMDE6MjQ6MDYgMjAwOCArMDAwMAogCi0JKiBNYWtlZmlsZS5hbSAoVEFSR0VUX1NSQ19NSVBTX0xJTlVYKTogTmV3LgotCShsaWJmZmlfbGFfU09VUkNFUyk6IFN1cHBvcnQgTUlQU19MSU5VWC4KLQkobGliZmZpX2NvbnZlbmllbmNlX2xhX1NPVVJDRVMpOiBMaWtld2lzZS4KLQkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlZC4KKyAgICAqIGNvbmZpZ3VyZS5hYzogQnVtcCB2ZXJzaW9uIHRvIDIuOTkuNy4KKyAgICAgICAgICAgICogY29uZmlndXJlLCBkb2Mvc3RhbXAtdnRpLCBkb2MvdmVyc2lvbi50ZXhpOiBSZWJ1aWx0LgorICAgICAgICAgICAgKiBpbmNsdWRlL2ZmaS5oLmluIExJQ0VOU0Ugc3JjL2RlYnVnLmMgc3JjL2Nsb3N1cmVzLmMKKyAgICAgICAgICAgICAgc3JjL2ZmaXRlc3QuYyBzcmMvczM5MC9zeXN2LlMgc3JjL3MzOTAvZmZpdGFyZ2V0LmgKKyAgICAgICAgICAgICAgc3JjL3R5cGVzLmMgc3JjL202OGsvZmZpdGFyZ2V0Lmggc3JjL3Jhd19hcGkuYyBzcmMvZnJ2L2ZmaS5jCisgICAgICAgICAgICAgIHNyYy9mcnYvZmZpdGFyZ2V0Lmggc3JjL3NoL2ZmaS5jIHNyYy9zaC9zeXN2LlMKKyAgICAgICAgICAgICAgc3JjL3NoL2ZmaXRhcmdldC5oIHNyYy9wb3dlcnBjL2ZmaXRhcmdldC5oIHNyYy9wYS9mZmkuYworICAgICAgICAgICAgICBzcmMvcGEvZmZpdGFyZ2V0Lmggc3JjL3BhL2xpbnV4LlMgc3JjL2phdmFfcmF3X2FwaS5jCisgICAgICAgICAgICAgIHNyYy9jcmlzL2ZmaXRhcmdldC5oIHNyYy94ODYvZmZpLmMgc3JjL3g4Ni9zeXN2LlMKKyAgICAgICAgICAgICAgc3JjL3g4Ni91bml4NjQuUyBzcmMveDg2L3dpbjMyLlMgc3JjL3g4Ni9mZml0YXJnZXQuaAorICAgICAgICAgICAgICBzcmMveDg2L2ZmaTY0LmMgc3JjL3g4Ni9kYXJ3aW4uUyBzcmMvaWE2NC9mZmkuYworICAgICAgICAgICAgICBzcmMvaWE2NC9mZml0YXJnZXQuaCBzcmMvaWE2NC9pYTY0X2ZsYWdzLmggc3JjL2lhNjQvdW5peC5TCisgICAgICAgICAgICAgIHNyYy9zcGFyYy9mZmkuYyBzcmMvc3BhcmMvdjkuUyBzcmMvc3BhcmMvZmZpdGFyZ2V0LmgKKyAgICAgICAgICAgICAgc3JjL3NwYXJjL3Y4LlMgc3JjL2FscGhhL2ZmaS5jIHNyYy9hbHBoYS9mZml0YXJnZXQuaAorICAgICAgICAgICAgICBzcmMvYWxwaGEvb3NmLlMgc3JjL3NoNjQvZmZpLmMgc3JjL3NoNjQvc3lzdi5TCisgICAgICAgICAgICAgIHNyYy9zaDY0L2ZmaXRhcmdldC5oIHNyYy9taXBzL2ZmaS5jIHNyYy9taXBzL2ZmaXRhcmdldC5oCisgICAgICAgICAgICAgIHNyYy9taXBzL24zMi5TIHNyYy9taXBzL28zMi5TIHNyYy9hcm0vZmZpLmMgc3JjL2FybS9zeXN2LlMKKyAgICAgICAgICAgICAgc3JjL2FybS9mZml0YXJnZXQuaCBzcmMvcHJlcF9jaWYuYzogVXBkYXRlIGxpY2Vuc2UgdGV4dC4KIAotCSogY29uZmlndXJlLmluIChtaXBzNjQqLSopOiBTa2lwLgotCShtaXBzKi0qLWxpbnV4Kik6IE5ldy4KLQkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZWQuCitjb21taXQgZDU4YjAzMmI0MWExMmJkM2Q3MjE0OGRhNjgyMmFiNTlkZDY5OGZmOQorQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIEZyaSBGZWIgMTUgMDA6NTk6MjUgMjAwOCArMDAwMAogCi0JKiBzcmMvbWlwcy9mZmkuYzogSW5jbHVkZSA8c2dpZGVmcy5oPi4KKyAgICBOZXcgcmVsZWFzZQogCi0yMDAyLTA2LTA2ICBVbHJpY2ggV2VpZ2FuZCAgPHV3ZWlnYW5kQGRlLmlibS5jb20+Citjb21taXQgOTFlNTQ3OGRmNmQ1YWM2M2VmYmIxMGYwMjU4MDdiNDYwNmFmYWI1NgorQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIEZyaSBGZWIgMTUgMDA6NTA6MzAgMjAwOCArMDAwMAogCi0JKiBzcmMvczM5MC9zeXN2LlM6IFNhdmUvcmVzdG9yZSAlcjYuICBBZGQgRFdBUkYtMiB1bndpbmQgaW5mby4KKyAgICBVcGRhdGUgc3VwcG9ydGVkIHBsYXRmb3Jtcy4gIEJ1bXAgdmVyc2lvbi4KIAotMjAwMi0wNS0yNyAgUm9nZXIgU2F5bGUgIDxyb2dlckBleWVzb3Blbi5jb20+Citjb21taXQgYmQwNzY4Zjg3N2M4ZjdmZDBkMzZhZjIxOTFiMjAzZDRkMDU3YjFjZQorQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIEZyaSBGZWIgMTUgMDA6NDU6MzMgMjAwOCArMDAwMAogCi0JKiBzcmMveDg2L2ZmaS5jIChmZmlfcHJlcF9hcmdzKTogUmVtb3ZlIHJlZmVyZW5jZSB0byBhdm4uCisgICAgKiBjb25maWd1cmUuYWM6IEJ1bXAgdmVyc2lvbiB0byAyLjk5LjUuCisgICAgICAgICAgICAqIGNvbmZpZ3VyZTogUmVidWlsdC4KKyAgICAgICAgICAgICogTWFrZWZpbGUuYW0gKEVYVFJBX0RJU1QpOiBBZGQgZGFyd2luNjQuUworICAgICAgICAgICAgKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KKyAgICAgICAgICAgICogdGVzdHN1aXRlL2xpYi9saWJmZmktZGcuZXhwOiBSZW1vdmUgbGlic3RkYysrIGJpdHMgZnJvbSBHQ0MgdHJlZS4KKyAgICAgICAgICAgICogTElDRU5TRTogVXBkYXRlIFdBUlJBTlRZLgogCi0yMDAyLTA1LTI3ICBCbyBUaG9yc2VuICA8Ym9Ac3VzZS5kZT4KK2NvbW1pdCA0OWQzNDVmNzY3YmQyY2ZlZTk1MWJjZWFhYjZhMWEwNzk4NmNmMjkzCitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgVGh1IEZlYiAxNCAyMzo0MzoyNyAyMDA4ICswMDAwCiAKLQkqIHNyYy94ODYvZmZpLmMgKGZmaV9wcmVwX2FyZ3MpOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlIGFuZAotCWZpeCBmb3JtYXR0aW5nLgorICAgIHVwZGF0ZSBsaWNlbnNlIHJlZmVyZW5jZQogCi0yMDAyLTA1LTEzICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+Citjb21taXQgMTJhYzQ4ZmM3OWI1MTVkYjdjOWFjY2Q5ZmNhYTg3YjBkY2VmY2NkYgorQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIFRodSBGZWIgMTQgMjM6NDI6MDggMjAwOCArMDAwMAogCi0JKiBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmMgKGZmaV9wcmVwX2Nsb3N1cmUpOiBEZWNsYXJlIGZkIGF0Ci0JYmVnaW5uaW5nIG9mIGZ1bmN0aW9uIChmb3Igb2xkZXIgYXBwbGUgY2MpLgorICAgIFVwZGF0ZSBXQVJSQU5UWQogCi0yMDAyLTA1LTA4ICBBbGV4YW5kcmUgT2xpdmEgIDxhb2xpdmFAcmVkaGF0LmNvbT4KK2NvbW1pdCA2YjkxYzQxZGE4N2U3ODU1MmYyOTkwZGZjNTA0YTBhMzM0OWYzNDBiCitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgVGh1IEZlYiAxNCAyMzozODoyNyAyMDA4ICswMDAwCiAKLQkqIGNvbmZpZ3VyZS5pbiAoT1JJR0lOQUxfTERfRk9SX01VTFRJTElCUyk6IFByZXNlcnZlIExEIGF0Ci0Jc2NyaXB0IGVudHJ5LCBhbmQgc2V0IExEIHRvIGl0IHdoZW4gY29uZmlndXJpbmcgbXVsdGlsaWJzLgotCSogY29uZmlndXJlOiBSZWJ1aWx0LgorICAgIGZpeCB0YXJiYWxsIHJlZmVyZW5jZQogCi0yMDAyLTA1LTA1ICBKYXNvbiBUaG9ycGUgIDx0aG9ycGVqQHdhc2FiaXN5c3RlbXMuY29tPgorY29tbWl0IDJiNTk1NzllMzUzMzMzNGJlZTQ3ODhlMDc2YjRlNTIwYzJhYjUxOGMKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBUaHUgRmViIDE0IDIzOjM1OjU4IDIwMDggKzAwMDAKIAotCSogY29uZmlndXJlLmluIChzcGFyYzY0LSotbmV0YnNkKik6IEFkZCB0YXJnZXQuCi0JKHNwYXJjLSotbmV0YnNkZWxmKik6IExpa2V3aXNlLgotCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorICAgIEZpcnN0IHVwZGF0ZSBpbiA1IHllYXJzIQogCi0yMDAyLTA0LTI4ICBEYXZpZCBTLiBNaWxsZXIgIDxkYXZlbUByZWRoYXQuY29tPgorY29tbWl0IDZjYmRmM2YzYTM3NzdhOTMzODJhMmQ1MDhkZGVmMWMzNTNmZjA5NTUKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBUaHUgRmViIDE0IDIyOjQ0OjA2IDIwMDggKzAwMDAKIAotCSogY29uZmlndXJlLmluLCBjb25maWd1cmU6IEZpeCBTUEFSQyB0ZXN0IGluIHByZXZpb3VzIGNoYW5nZS4KKyAgICBGaXggLnBjIGZpbGUgYnVnIGFuZCBidW1wIHZlcnNpb24KIAotMjAwMi0wNC0yOSAgR2VyaGFyZCBUb25uICA8R2VyaGFyZFRvbm5Ac3dvbC5kZT4KK2NvbW1pdCAxZDFkYzgxMTA0YjIwOWRmM2NmZWYwODQwNzM1YzU5ZWZhZTJmNjU1CitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgVGh1IEZlYiAxNCAyMjowMzozNyAyMDA4ICswMDAwCiAKLQkqIE1ha2VmaWxlLmFtOiBBZGQgTGludXggZm9yIFMvMzkwIHN1cHBvcnQuCi0JKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KLQkqIGNvbmZpZ3VyZS5pbjogQWRkIExpbnV4IGZvciBTLzM5MCBzdXBwb3J0LgotCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgotCSogaW5jbHVkZS9mZmkuaC5pbjogQWRkIExpbnV4IGZvciBTLzM5MCBzdXBwb3J0LgotCSogc3JjL3MzOTAvZmZpLmM6IE5ldyBmaWxlIGZyb20gbGliZmZpIENWUyB0cmVlLgotCSogc3JjL3MzOTAvc3lzdi5TOiBOZXcgZmlsZSBmcm9tIGxpYmZmaSBDVlMgdHJlZS4KKyAgICBBZGQgbWFuIGZpbGVzIGFuZCBpbmZvIGZpbGUuIFVwZGF0ZSBSRUFETUUuICBUYWcgYXMgMi45OS4zLgogCi0yMDAyLTA0LTI4ICBKYWt1YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNvbT4KK2NvbW1pdCBmMDQ1YTIzNjdmNzkzZmE4YjAxNTM0Y2YyZTI1YmNjNDZhZmM4ZmExCitBdXRob3I6IHRyb21leSA8dHJvbWV5PgorRGF0ZTogICBUaHUgRmViIDE0IDIwOjQ2OjU3IDIwMDggKzAwMDAKIAotCSogY29uZmlndXJlLmluIChIQVZFX0FTX1NQQVJDX1VBX1BDUkVMKTogQ2hlY2sgZm9yIHdvcmtpbmcKLQklcl9kaXNwMzIoKS4KLQkqIHNyYy9zcGFyYy92OC5TOiBVc2UgaXQuCi0JKiBzcmMvc3BhcmMvdjkuUzogTGlrZXdpc2UuCi0JKiBmZmljb25maWcuaC5pbjogUmVidWlsdC4KLQkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKyAgICBNb3ZlIGVudHJ5IGZyb20gQ2hhbmdlTG9nIHRvIENoYW5nZUxvZy5saWJmZmkKIAotMjAwMi0wNC0wOCAgSGFucyBCb2VobSAgPEhhbnNfQm9laG1AaHAuY29tPgorY29tbWl0IDYyNTdmMDdkMWE5ZWZkMjdmYTgzNjM5Y2ZiYTI4MWY1ZDMxODg3MzEKK0F1dGhvcjogdHJvbWV5IDx0cm9tZXk+CitEYXRlOiAgIFRodSBGZWIgMTQgMjA6MzM6MTcgMjAwOCArMDAwMAogCi0JKiBzcmMvamF2YV9yYXdfYXBpLmMgKGZmaV9qYXZhX3Jhd19zaXplKTogSGFuZGxlIEZGSV9UWVBFX0RPVUJMRQotCWNvcnJlY3RseS4KLQkqIHNyYy9pYTY0L3VuaXguUzogQWRkIHVud2luZCBpbmZvcm1hdGlvbi4gRml4IGNvbW1lbnRzLgotCVNhdmUgc3AgaW4gYSB3YXkgdGhhdCdzIGNvbXBhdGlibGUgd2l0aCB1bndpbmQgaW5mby4KLQkoZmZpX2NhbGxfdW5peCk6IENvcnJlY3RseSByZXN0b3JlIHNwIGluIGFsbCBjYXNlcy4KLQkqIHNyYy9pYTY0L2ZmaS5jOiBBZGQsIGZpeCBjb21tZW50cy4KKyAgICAJKiBhY2xvY2FsLm00LCBNYWtlZmlsZS5pbiwgY29uZmlndXJlLCBmZmljb25maWcuaC5pbjogUmVidWlsdC4KKyAgICAJKiBtZGF0ZS1zaCwgdGV4aW5mby50ZXg6IE5ldyBmaWxlcy4KKyAgICAJKiBNYWtlZmlsZS5hbSAoaW5mb19URVhJTkZPUyk6IE5ldyB2YXJpYWJsZS4KKyAgICAJKiBkb2MvbGliZmZpLnRleGk6IE5ldyBmaWxlLgorICAgIAkqIGRvYy92ZXJzaW9uLnRleGk6IExpa2V3aXNlLgogCi0yMDAyLTA0LTA4ICBKYWt1YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNvbT4KK2NvbW1pdCA0MjMyYWY1NjNjNTUwOWMzNzYwYTMzZTM2ODRhMmI5NThiZTc1NWUxCitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgVGh1IEZlYiAxNCAxNjoxOToyMSAyMDA4ICswMDAwCiAKLQkqIHNyYy9zcGFyYy92OC5TOiBNYWtlIC5laF9mcmFtZSBkZXBlbmRlbnQgb24gdGFyZ2V0IHdvcmQgc2l6ZS4KKyAgICAgICAgICAgICogTWFrZWZpbGUuYW0gKEFNX0NGTEFHUyk6IERvbid0IGNvbXBpbGUgd2l0aCAtRC4KKyAgICAgICAgICAgIChsaWJfTFRMSUJSQVJJRVMpOiBEZWZpbmUuCisgICAgICAgICAgICAodG9vbGV4ZWNsaWJfTElCUkFSSUVTKTogVW5kZWZpbmUuCisgICAgICAgICAgICAqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgorICAgICAgICAgICAgKiBjb25maWd1cmUuYWM6IFJlc2V0IHZlcnNpb24gdG8gMi45OS4xLgorICAgICAgICAgICAgKiBjb25maWd1cmUuaW46IFJlYnVpbHQuCiAKLTIwMDItMDQtMDYgIEphc29uIFRob3JwZSAgPHRob3JwZWpAd2FzYWJpc3lzdGVtcy5jb20+Citjb21taXQgOTYxNTQzNjE1YzMxZjA5MmI1NzhhNGI0Y2RhOTE0ZGI2NGY5ZDBmYQorQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIFRodSBGZWIgMTQgMTU6NTc6NDAgMjAwOCArMDAwMAogCi0JKiBjb25maWd1cmUuaW4gKGFscGhhKi0qLW5ldGJzZCopOiBBZGQgdGFyZ2V0LgotCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorICAgIEZpeCB0eXBvLgogCi0yMDAyLTA0LTA0ICBKZWZmIFN0dXJtICA8anN0dXJtQG9uZS1wb2ludC5jb20+Citjb21taXQgYWViMGFiYWI4NzIyMmY2MzdmYmYzNTJkNGVmZmQzYjc2YjUyZWQyNgorQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIFRodSBGZWIgMTQgMTU6NTQ6MjcgMjAwOCArMDAwMAogCi0JKiBzcmMvc3BhcmMvdjguUzogQWRkIHVud2luZCBpbmZvLgotCSogc3JjL3NwYXJjL3Y5LlM6IExpa2V3aXNlLgorICAgICAgICAgICogbGliZmZpLnBjLmluOiBVc3NlIEBQQUNLQUdFX05BTUVAIGFuZCBAUEFDS0FHRV9WRVJTSU9OQC4KKyAgICAgICAgICAgICogY29uZmlndXJlLmFjOiBSZXNldCB2ZXJzaW9uIHRvIDIuOTkuMS4KKyAgICAgICAgICAgICogY29uZmlndXJlLmluOiBSZWJ1aWx0LgorICAgICAgICAgICAgKiBNYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IEFkZCBDaGFuZ2VMb2cubGliZmZpLgorICAgICAgICAgICAgKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KKyAgICAgICAgICAgICogTElDRU5TRTogVXBkYXRlIGNvcHlyaWdodCBub3RpY2UuCiAKLTIwMDItMDMtMzAgIEtyaXN0ZXIgV2FsZnJpZHNzb24gIDxjYXRvQGRmLmx0aC5zZT4KK2NvbW1pdCA3N2ZlMjQzNTU2NDMzZWFlMTE5ZDhiZDc0NjliZmNjZGQ1YmQ4YTFhCitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgVGh1IEZlYiAxNCAxNTozNzowMCAyMDA4ICswMDAwCiAKLQkqIGNvbmZpZ3VyZS5pbjogRW5hYmxlIGkqODYtKi1uZXRic2RlbGYqLgotCSogY29uZmlndXJlOiBSZWJ1aWx0LgorICAgIEZpeCBtYWtlIGRpc3QgYWdhaW4KIAotMjAwMi0wMy0yOSAgRGF2aWQgQmlsbGluZ2h1cnN0IDxEYXZpZC5CaWxsaW5naHVyc3RAcmlvdGludG8uY29tPgorY29tbWl0IGQ0OTcwY2Y0NTI5NDU5YmYwZjBlNDNjNjAyY2FjMzk2Nzg2YzY4MDIKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBUaHUgRmViIDE0IDE1OjE4OjU2IDIwMDggKzAwMDAKIAotCVBSIG90aGVyLzI2MjAKLQkqIHNyYy9taXBzL24zMi5zOiBEZWxldGUKLQkqIHNyYy9taXBzL28zMi5zOiBEZWxldGUKKyAgICBGaXggbWFrZSBkaXN0CiAKLTIwMDItMDMtMjEgIExvcmVuIEouIFJpdHRsZSAgPGxqcml0dGxlQGFjbS5vcmc+Citjb21taXQgZjBiMTQ2MmYyZDMwMjQ5MjJhZDcxNDIxYmQ1YzQzMTFmY2IxNmRhNQorQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIFRodSBGZWIgMTQgMTU6MDE6NDEgMjAwOCArMDAwMAogCi0JKiBjb25maWd1cmUuaW46IEVuYWJsZSBhbHBoYSotKi1mcmVlYnNkKi4KLQkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKyAgICBVc2UgcGtnY29uZmlnLiAgSW5jcmVtZW50IGxpYnRvb2wgQ1VSUkVOVCB2ZXJzaW9uLgogCi0yMDAyLTAzLTE3ICBCcnljZSBNY0tpbmxheSAgPGJyeWNlQHdhaXRha2kub3RhZ28uYWMubno+Citjb21taXQgMjdlNTJmMzNiYWEwNjkwMTJhNWFkYjJhMzgwN2Y5Y2ExZjIxNjVhYgorQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIFN1biBGZWIgMyAxMzo1OTo0OCAyMDA4ICswMDAwCiAKLQkqIE1ha2VmaWxlLmFtOiBsaWJmZmljb252ZW5pZW5jZSAtPiBsaWJmZmlfY29udmVuaWVuY2UuCi0JKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KKyAgICBGaXggaGVhZGVyIGluc3RhbGxzIHdoZW4gdXNpbmcgREVTVERJUi4KIAotCSogTWFrZWZpbGUuYW06IERlZmluZSBmZml0ZXN0X09CSkVDVFMuCi0JKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KK2NvbW1pdCBmYWRhYjI4ZWI2ZTMzZmI2ZGNkZDdiOTMyM2UxNDcxNDIyMTZkNTQ4CitBdXRob3I6IHR3YWxsIDx0d2FsbD4KK0RhdGU6ICAgU3VuIEZlYiAzIDEyOjMyOjIyIDIwMDggKzAwMDAKIAotMjAwMi0wMy0wNyAgQW5kcmVhcyBUb2JsZXIgIDx0b2FAcG9wLmFncmkuY2g+Ci0JICAgIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KKyAgICB1cGRhdGUgY2hhbmdlbG9nCiAKLQkqIE1ha2VmaWxlLmFtIChFWFRSQV9ESVNUKTogQWRkIERhcndpbiBhbmQgQUlYIGNsb3N1cmUgZmlsZXMuCi0JKFRBUkdFVF9TUkNfUE9XRVJQQ19BSVgpOiBBZGQgYWl4X2Nsb3N1cmUuUy4KLQkoVEFSR0VUX1NSQ19QT1dFUlBDX0RBUldJTik6IEFkZCBkYXJ3aW5fY2xvc3VyZS5TLgotCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCi0JKiBpbmNsdWRlL2ZmaS5oLmluOiBBZGQgQUlYIGFuZCBEYXJ3aW4gY2xvc3VyZSBkZWZpbml0aW9ucy4KLQkqIHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYyAoZmZpX3ByZXBfY2xvc3VyZSk6IE5ldyBmdW5jdGlvbi4KLQkoZmx1c2hfaWNhY2hlLCBmbHVzaF9yYW5nZSk6IE5ldyBmdW5jdGlvbnMuCi0JKGZmaV9jbG9zdXJlX2hlbHBlcl9EQVJXSU4pOiBOZXcgZnVuY3Rpb24uCi0JKiBzcmMvcG93ZXJwYy9haXhfY2xvc3VyZS5TOiBOZXcgZmlsZS4KLQkqIHNyYy9wb3dlcnBjL2Rhcndpbl9jbG9zdXJlLlM6IE5ldyBmaWxlLgorY29tbWl0IGI1ZTQ0YzhkZmE5MmM4N2I5OTc2MmMzMDNjZjU1NzRhMTZkYjhmMjcKK0F1dGhvcjogdHdhbGwgPHR3YWxsPgorRGF0ZTogICBTdW4gRmViIDMgMDE6MTI6MzIgMjAwOCArMDAwMAogCi0yMDAyLTAyLTI0ICBKZWZmIFN0dXJtICA8anN0dXJtQG9uZS1wb2ludC5jb20+CisgICAgb2Zmc2V0IGZyb20gY29kZSBiYXNlIGFkZHJlc3MsIG5vdCBkYXRhIGJhc2UgYWRkcmVzcwogCi0JKiBpbmNsdWRlL2ZmaS5oLmluOiBBZGQgdHlwZWRlZiBmb3IgZmZpX2FyZy4KLQkqIHNyYy9mZml0ZXN0LmMgKG1haW4pOiBEZWNsYXJlIHJpbnQgd2l0aCBmZmlfYXJnLgorY29tbWl0IGYzNTk4NDhkMWE5OTVjMGU0NDU2NmQ4MTVmMjE4NzI5ZGM5OTZlMjIKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBGcmkgRmViIDEgMjE6Mjk6NDMgMjAwOCArMDAwMAogCi0yMDAyLTAyLTIxICBBbmRyZWFzIFRvYmxlciAgPHRvYUBwb3AuYWdyaS5jaD4KKyAgICBGaXggaGVhZGVyIGluc3RhbGxzLgogCi0JKiBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmMgKGZmaV9wcmVwX2FyZ3MpOiBTa2lwIGFwcHJvcHJpYXRlCi0JbnVtYmVyIG9mIEdQUnMgZm9yIGZsb2F0aW5nLXBvaW50IGFyZ3VtZW50cy4KK2NvbW1pdCBjMzBkZjQ5ZTE1N2M3YmZjOGUxOWUzZjhhNzJiOTQ2NGZlMjI1ZTU0CitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgRnJpIEZlYiAxIDIxOjEzOjU1IDIwMDggKzAwMDAKIAotMjAwMi0wMS0zMSAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJlZGhhdC5jb20+CisgICAgUmV2ZXJ0IG15IGJyb2tlbiBjaGFuZ2VzIHRvIHR3YWxsJ3MgcGF0Y2guCiAKLQkqIGNvbmZpZ3VyZTogUmVidWlsdC4KLQkqIGNvbmZpZ3VyZS5pbjogUmVwbGFjZSBDSEVDS19TSVpFT0YgYW5kIGVuZGlhbiB0ZXN0cyB3aXRoCi0JY3Jvc3MtY29tcGlsZXIgZnJpZW5kbHkgbWFjcm9zLgotCSogYWNsb2NhbC5tNCAoQUNfQ09NUElMRV9DSEVDS19TSVpFT0YsIEFDX0NfQklHRU5ESUFOX0NST1NTKTogTmV3Ci0JbWFjcm9zLgorY29tbWl0IDY3NTU2MWJiOWFhMDczMmM3NjY5OGRmMTBkZDMwMDdiNWQwZWM3NTkKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBUaHUgSmFuIDMxIDEzOjQ0OjI1IDIwMDggKzAwMDAKIAotMjAwMi0wMS0xOCAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgorICAgIEZpeCBtYWtlIGRpc3QgLgogCi0JKiBzcmMvcG93ZXJwYy9kYXJ3aW4uUyAoX2ZmaV9jYWxsX0FJWCk6IE5ldy4KLQkqIHNyYy9wb3dlcnBjL2FpeC5TIChmZmlfY2FsbF9EQVJXSU4pOiBOZXcuCitjb21taXQgYWJjMGJiZjM4MTNkYzQzZTIzZDRjMjNlNmZlNzk0ZGJmMjg3NjM5YgorQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIFRodSBKYW4gMzEgMTE6NTg6NTcgMjAwOCArMDAwMAogCi0yMDAyLTAxLTE3ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CisgICAgQWRkIFRpbSBXYWxsJ3MgeDg2IHdpbmRvd3MgcGF0Y2guCiAKLQkqIE1ha2VmaWxlLmFtIChFWFRSQV9ESVNUKTogQWRkIERhcndpbiBhbmQgQUlYIGZpbGVzLgotCShUQVJHRVRfU1JDX1BPV0VSUENfQUlYKTogTmV3LgotCShQT1dFUlBDX0FJWCk6IE5ldyBzdGFuemEuCi0JKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KLQkqIGNvbmZpZ3VyZS5pbjogQWRkIEFJWCBjYXNlLgotCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgotCSogaW5jbHVkZS9mZmkuaC5pbiAoZmZpX2FiaSk6IEFkZCBGRklfQUlYLgotCSogc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jIChmZmlfc3RhdHVzKTogVXNlICJsb25nIiB0byBzY2FsZSBmcmFtZQotCXNpemUuICBGaXggImxvbmcgZG91YmxlIiBzdXBwb3J0LgotCShmZmlfY2FsbCk6IEFkZCBGRklfQUlYIGNhc2UuCi0JKiBzcmMvcG93ZXJwYy9haXguUzogTmV3LgorY29tbWl0IGUzMzIzNjZkMTVhMzExOTg3MzViNTkzZWM4ZjdmYzA1NThkNzgzYjgKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBXZWQgSmFuIDMwIDEzOjIxOjAyIDIwMDggKzAwMDAKIAotMjAwMS0xMC0wOSAgSm9obiBIb3Jua3Zpc3QgIDxqb2huQHRvYXN0ZWRtYXJzaG1hbGxvdy5jb20+CisgICAgQWRkIEhKJ3MgLWZvbWl0LWZyYW1lLXBvaW50ZXIgc3RydWN0IHJldHVybiBmaXgKIAotCUltcGxlbWVudCBEYXJ3aW4gUG93ZXJQQyBBQkkuCi0JKiBjb25maWd1cmUuaW46IEhhbmRsZSBwb3dlcnBjLSotZGFyd2luKi4KLQkqIE1ha2VmaWxlLmFtOiBTZXQgc291cmNlIGZpbGVzIGZvciBQT1dFUlBDX0RBUldJTi4KLQkqIGNvbmZpZ3VyZTogUmVidWlsdC4KLQkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgotCSogaW5jbHVkZS9mZmkuaC5pbjogRGVmaW5lIEZGSV9EQVJXSU4gYW5kIEZGSV9ERUZBVUxUX0FCSSBmb3IKLQlQT1dFUlBDX0RBUldJTi4KLQkqIHNyYy9wb3dlcnBjL2Rhcndpbi5TOiBOZXcgZmlsZS4KLQkqIHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYzogTmV3IGZpbGUuCitjb21taXQgZDQyMDQyNDAzOTJhZjViNzc1MGEwODY3MWIwOGU5YzIyZGZmNWU5MworQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIFdlZCBKYW4gMzAgMTI6NDI6MzQgMjAwOCArMDAwMAogCi0yMDAxLTEwLTA3ICBKb3NlcGggUy4gTXllcnMgIDxqc20yOEBjYW0uYWMudWs+CisgICAgQ2xlYW4gdXAgZm9yIG5ldyBhdXRvbWFrZS4KIAotCSogc3JjL3g4Ni9mZmkuYzogRml4IHNwZWxsaW5nIGVycm9yIG9mICJzZXBhcmF0ZSIgYXMgInNlcGVyYXRlIi4KK2NvbW1pdCBmNDkzMmRkMDIwZGY1NzQ2MzdjOWZiM2ZjMWJiMThlNWE4ZjMwNGNjCitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgV2VkIEphbiAzMCAxMjo0MDoyNSAyMDA4ICswMDAwCiAKLTIwMDEtMDctMTYgIFJhaW5lciBPcnRoICA8cm9AVGVjaEZhay5VbmktQmllbGVmZWxkLkRFPgorICAgIEZpeGVzIHRvIHJ1biB0ZXN0c3VpdGUKIAotCSogc3JjL3g4Ni9zeXN2LlM6IEF2b2lkIGdhcy1vbmx5IC5iYWxpZ24gZGlyZWN0aXZlLgotCVVzZSBDIHN0eWxlIGNvbW1lbnRzLgorY29tbWl0IDA4NTUyMGRkYzhkYjZhOTE2YmZjNDE2Yjg3MWZjYjJkMDAwNzRkNDAKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBUdWUgSmFuIDI5IDE1OjE2OjQzIDIwMDggKzAwMDAKIAotMjAwMS0wNy0xNiAgUmFpbmVyIE9ydGggIDxyb0BUZWNoRmFrLlVuaS1CaWVsZWZlbGQuREU+CisgICAgTmV3IGZpbGVzIGZyb20gZ2NjIHRyZWUuCiAKLQkqIHNyYy9hbHBoYS9mZmkuYyAoZmZpX3ByZXBfY2xvc3VyZSk6IEF2b2lkIGdhcy1vbmx5IG1uZW1vbmljLgotCUZpeGVzIFBSIGJvb3RzdHJhcC8zNTYzLgorY29tbWl0IDc3MTc1YjNmNzIzNGU0ODc1YTRlZjU1NGVkMWZlOWZkYzQxMzM3OTQKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBUdWUgSmFuIDI5IDE1OjE1OjIwIDIwMDggKzAwMDAKIAotMjAwMS0wNi0yNiAgUmFpbmVyIE9ydGggIDxyb0BUZWNoRmFrLlVuaS1CaWVsZWZlbGQuREU+CisgICAgTGF0ZXN0IGdjYyBzdm4gc291cmNlcwogCi0JKiBzcmMvYWxwaGEvb3NmLlMgKGZmaV9jbG9zdXJlX29zZik6IFVzZSAucmRhdGEgZm9yIEVDT0ZGLgorY29tbWl0IDI1NDRlNDVhMGIyYjYzNDA1M2RmMDJkYTNhMmVkOTY4MGVlZWQyYTEKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBUdWUgSmFuIDI5IDE0OjI4OjEzIDIwMDggKzAwMDAKIAotMjAwMS0wNi0yNSAgUmFpbmVyIE9ydGggIDxyb0BUZWNoRmFrLlVuaS1CaWVsZWZlbGQuREU+CisgICAgSW5zdGFsbCBmZml0YXJnZXQuaCBpbiAkcHJlZml4L2luY2x1ZGUuCiAKLQkqIGNvbmZpZ3VyZS5pbjogUmVjb2duaXplIHNwYXJjKi1zdW4tKiBob3N0LgotCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorY29tbWl0IDYwMDIyMTFiMWNjNGRhZWI1ODdkMDU0YjRmODM5NjhiZGEyYzk4MWUKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBUdWUgSmFuIDI5IDEyOjMwOjEwIDIwMDggKzAwMDAKIAotMjAwMS0wNi0wNiAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+CisgICAgQWRkIG5ldyBmaWxlcy4KIAotCSogc3JjL2FscGhhL29zZi5TIChfX0ZSQU1FX0JFR0lOX18pOiBDb25kaXRpb25hbGl6ZSBmb3IgRUxGLgorY29tbWl0IGNjYWJkMmIxNmJlODgzY2QwM2U1ZjBjZDg4Y2NmZGQ2Y2EzOTIzOWQKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBUdWUgSmFuIDI5IDEyOjI4OjE1IDIwMDggKzAwMDAKIAotMjAwMS0wNi0wMyAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+CisgICAgTWVyZ2UgZnJvbSBnY2MKIAotCSogc3JjL2FscGhhL29zZi5TOiBBZGQgdW53aW5kIGluZm8uCi0JKiBzcmMvcG93ZXJwYy9zeXN2LlM6IEFkZCB1bndpbmQgaW5mby4KLQkqIHNyYy9wb3dlcnBjL3BwY19jbG9zdXJlLlM6IExpa2V3aXNlLgorY29tbWl0IGU2ODBlY2ZiZmNhMWRhOGQxODIzZTQ4YmM4OWI4Mzc1ZTY2ZTEyOGIKK0F1dGhvcjogdHJvbWV5IDx0cm9tZXk+CitEYXRlOiAgIFN1biBEZWMgMjQgMjM6MTI6MTUgMjAwNiArMDAwMAogCi0yMDAwLTA1LTMxICBKZWZmIFN0dXJtICA8anN0dXJtQG9uZS1wb2ludC5jb20+CisgICAgUHVsbGVkIGluIGxpYmZmaSBmcm9tIGdjYyB0cnVuay4KKyAgICBGaXhlZCBidWlsZCBhbmQgaW5zdGFsbCBmb3Igc3RhbmRhbG9uZSB1c2UuCiAKLQkqIGNvbmZpZ3VyZS5pbjogRml4IEFDX0FSR19FTkFCTEUgdXNhZ2UuCi0JKiBjb25maWd1cmU6IFJlYnVpbHQuCitjb21taXQgZTdiYTA4OTY1OTQyY2U4NzJmZGJjNjlmNzBmOTg0OGNjM2QwYmFkNgorQXV0aG9yOiByb290IDxyb290PgorRGF0ZTogICBTdW4gSnVuIDQgMjM6MjI6MjQgMjAwNiArMDAwMAogCi0yMDAxLTA1LTA2ICBCcnljZSBNY0tpbmxheSAgPGJyeWNlQHdhaXRha2kub3RhZ28uYWMubno+CisgICAgc291cmN3YXJlLm9yZwogCi0JKiBjb25maWd1cmUuaW46IFJlbW92ZSB3YXJuaW5nIGFib3V0IGJldGEgY29kZS4KLQkqIGNvbmZpZ3VyZTogUmVidWlsdC4KK2NvbW1pdCAwY2Q0YWEyNGUyMWFhYTk2NGRmYmRlYmMyNWVjNWM4MTg4MDQ5Mzc1CitBdXRob3I6IHJvb3QgPHJvb3Q+CitEYXRlOiAgIFN1biBNYXkgMzAgMDE6NTE6NTcgMjAwNCArMDAwMAogCi0yMDAxLTA0LTI1ICBIYW5zIEJvZWhtIDxIYW5zX0JvZWhtQGhwLmNvbT4KKyAgICBBZGQgTG9ja0RpcgogCi0JKiBzcmMvaWE2NC91bml4LlM6IFJlc3RvcmUgc3RhY2sgcG9pbnRlciB3aGVuIHJldHVybmluZyBmcm9tCi0JZmZpX2Nsb3N1cmVfVU5JWC4KLQkqIHNyYy9pYTY0L2ZmaS5jOiBGaXggdHlwbyBpbiBjb21tZW50LgorY29tbWl0IDU4MjYxMjBmYmQ5NDBkMjZjY2E3NmVkMjUyMjE4NzUwNTU4MWUxZWQKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBUdWUgTm92IDQgMDY6MDk6MDggMjAwMyArMDAwMAogCi0yMDAxLTA0LTE4ICBKaW0gV2lsc29uICA8d2lsc29uQHJlZGhhdC5jb20+CisgICAgQWRkIGxpbmsgdG8gR2lhbm5pJ3Mgd2ViIHNpdGUuCiAKLQkqIHNyYy9pYTY0L3VuaXguUzogRGVsZXRlIHVubmVjZXNzYXJ5IGluY3JlbWVudCBhbmQgZGVjcmVtZW50IG9mIGxvYzIKLQl0byBlbGltaW5hdGUgUkFXIERWLgorY29tbWl0IDIyMGFhNGIyN2RiNDJkN2ZmYWFjNTA1NjAwMGQ1MTc5ZjAwZDVlYTMKK0F1dGhvcjoganNtIDxqc20+CitEYXRlOiAgIFR1ZSBKYW4gMjEgMDg6MDc6NDIgMjAwMyArMDAwMAogCi0yMDAxLTA0LTEyICBCcnljZSBNY0tpbmxheSAgPGJyeWNlQGFsYmF0cm9zcy5jby5uej4KKyAgICBOZXdlciwgYmV0dGVyLCBpbmNyZWFzZWQgZnJvbSBiZWZvcmUhICAobGlzdCBvZiBhY2NlcHRhYmxlIGFub24gdXNlcm5hbWVzKQogCi0JKiBNYWtlZmlsZS5hbTogTWFrZSBhIGxpYnRvb2wgY29udmVuaWVuY2UgbGlicmFyeS4KLQkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgorY29tbWl0IDFjM2FkYzg5MmNjMTQwM2RjNGQzZDcwMDNhMjM4NTg5OTgzNjYxMmUKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBGcmkgRGVjIDYgMDE6Mjg6MDMgMjAwMiArMDAwMAogCi0yMDAxLTAzLTI5ICBCcnljZSBNY0tpbmxheSAgPGJyeWNlQGFsYmF0cm9zcy5jby5uej4KKyAgICBGaXhlZCBDeWdudXMgcmVmZXJlbmNlcy4KIAotCSogY29uZmlndXJlLmluOiBVc2UgZGlmZmVyZW50IHN5bnRheCBmb3Igc3ViZGlyZWN0b3J5IGNyZWF0aW9uLgotCSogY29uZmlndXJlOiBSZWJ1aWx0LgorY29tbWl0IDRhZjY2YmI2MmZhYjlhOGUzMThhZjNiZjAxZTU0ODY1OTZhMGM4ZDQKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBTdW4gT2N0IDIxIDE5OjE4OjQyIDIwMDEgKzAwMDAKIAotMjAwMS0wMy0yNyAgSm9uIEJlbmlzdG9uICA8am9uQGJlbmlzdG9uLmNvbT4KKyAgICBUZXN0c3VpdGUgZml4ZXMuCiAKLQkqIGNvbmZpZ3VyZS5pbjogQWRkZWQgWDg2X1dJTjMyIHRhcmdldCAoV2luMzIsIEN5Z1dpbiwgTWluZ1cpLgotCSogY29uZmlndXJlOiBSZWJ1aWx0LgotCSogTWFrZWZpbGUuYW06IEFkZGVkIFg4Nl9XSU4zMiB0YXJnZXQgc3VwcG9ydC4KLQkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgorY29tbWl0IDU0MzU5NjVmOTAxNWNlNDA1ODRjOThkMzgxNmMzZDA1ZTdkZTFkMjEKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBNb24gQXByIDIzIDAwOjMyOjAzIDIwMDEgKzAwMDAKIAotCSogaW5jbHVkZS9mZmkuaC5pbjogQWRkZWQgWDg2X1dJTjMyIHRhcmdldCBzdXBwb3J0LgorICAgICAgICAgICAgKiBpbmNsdWRlL2ZmaV9jb21tb24uaDogRGVsZXRlLCBhZnRlciBtb3ZpbmcgY29udGVudHMgdG8uLi4KKyAgICAgICAgICAgICogaW5jbHVkZS9mZmlfcHJpdmF0ZS5oOiBTdWJzdW1lIGNvbnRlbnRzIG9mIGZmaV9jb21tb24uaC4KKyAgICAgICAgICAgICogaW5jbHVkZS9NYWtlZmlsZS5hbSAobm9pbnN0X0hFQURFUlMpOiBSZW1vdmUgZmZpX2NvbW1vbi5oLgorICAgICAgICAgICAgKiBpbmNsdWRlL01ha2VmaWxlLmluOiBSZWJ1aWx0LgorICAgICAgICAgICAgKiBhcm0vZmZpLmMsIG02OGsvZmZpLmMsIG1pcHMvZmZpLmMsIHBvd2VycGMvZmZpLmMsIHMzOTAvZmZpLmMsCisgICAgICAgICAgICBpYTY0L2ZmaS5jOiBJbmNsdWRlIGZmaV9wcml2YXRlLmgsIG5vdCBmZmlfY29tbW9uLmguCisgICAgICAgICAgICAqIGFscGhhL2ZmaS5jLCBzcGFyYy9mZmkuYywgeDg2L2ZmaS5jOiBEb24ndCBpbmNsdWRlIGZmaV9jb21tb24uaC4KKyAgICAgICAgICAgICogdHlwZXMuYywgcmF3X2FwaS5jLCBqYXZhX3Jhd19hcGkuYywgcHJlcF9jaWYuYzogRG9uJ3QgaW5jbHVkZQorICAgICAgICAgICAgZmZpX2NvbW1vbi5oLgorICAgICAgICAgICAgKiBkZWJ1Zy5jOiBJbmNsdWRlIGZmaV9wcml2YXRlLmggaW5zdGVhZCBvZiBmZmlfY29tbW9uLmguCisgICAgCisgICAgICAgICAgICAqIG1pcHMvZmZpLmMgKGNhbGNfbjMyX3N0cnVjdF9mbGFncyk6IE1ha2Ugc3RhdGljLgorICAgICAgICAgICAgKEZJWF9BUkdQKTogUmVtb3ZlIGNhbGwgdG8gZGVidWdnaW5nIHJvdXRpbmUgZmZpX3N0b3BfaGVyZS4KKyAgICAKKyAgICAgICAgICAgICogbWlwcy9uMzIuUzogSW5jbHVkZSBmZmlfcHJpdmF0ZS5oLgorICAgICAgICAgICAgKiBtaXBzL28zMi5TOiBJbmNsdWRlIGZmaV9wcml2YXRlLmguCiAKLQkqIHNyYy9mZml0ZXN0LmM6IERvZXNuJ3QgcnVuIHN0cnVjdHVyZSB0ZXN0cyBmb3IgWDg2X1dJTjMyIHRhcmdldHMuCi0JKiBzcmMvdHlwZXMuYzogQWRkZWQgWDg2X1dJTjMyIHRhcmdldCBzdXBwb3J0LgorY29tbWl0IDZmZGI3ZGUwZmUzYjczODVlMWZkNzg4MTJhZTY5ZDliMzA2OWQ5OTQKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBTdW4gQXByIDIyIDE5OjM4OjM0IDIwMDEgKzAwMDAKIAotCSogc3JjL3g4Ni93aW4zMi5TOiBOZXcgZmlsZS4gQmFzZWQgb24gc3lzdi5TLCBidXQgd2l0aCBFSAotCXN0dWZmIHJlbW92ZWQgYW5kIG1hZGUgdG8gd29yayB3aXRoIEN5Z1dpbidzIGdhcy4KKyAgICAgICAgICAgICogUkVBRE1FOiBVcGRhdGUgc29tZSBjb21tZW50cy4KKyAgICAKKyAgICAgICAgICAgICogTWFrZWZpbGUuYW0gKFNVQkRJUlMpOiBBZGQgaW5jbHVkZSBzbyBmZmkuaCBnZXRzIGluc3RhbGxlZC4KKyAgICAgICAgICAgICogTWFrZWZpbGUuaW46IFJlYnVpbHQuCisgICAgCisgICAgICAgICAgICAqIGluY2x1ZGUvZmZpLmg6IENoYW5nZSBBTFBIQSB0byBfX2FscGhhX18gYW5kIFNQQVJDIHRvIF9fc3BhcmNfXy4KKyAgICAgICAgICAgICogdHlwZXMuYzogRGl0dG8uCisgICAgICAgICAgICAqIHByZXBfY2lmLmMgKGZmaV9wcmVwX2NpZik6IERpdHRvLgorICAgIAorICAgICAgICAgICAgKiBhbHBoYS9mZmkuYywgYWxwaGEvb3NmLlMsIHNwYXJjL2ZmaS5jLCBzcGFyYy92OC5TLCBzcGFyYy92OS5TOgorICAgICAgICAgICAgSW5jbHVkZSBmZmlfcHJpdmF0ZS5oLgorICAgIAorICAgICAgICAgICAgKiBpbmNsdWRlL2ZmaV9wcml2YXRlLmggKEZGSV9UWVBFX0xBU1QpOiBEZWZpbmUuCiAKLTIwMDEtMDMtMjYgIEJyeWNlIE1jS2lubGF5ICA8YnJ5Y2VAYWxiYXRyb3NzLmNvLm56PgorY29tbWl0IGJjNzE0NGIwMWI5NzA3ZWYzNWYxYTJlM2U2OTk2ZTAwNWU4Mjk1M2EKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBTdW4gQXByIDIyIDE4OjI4OjM2IDIwMDEgKzAwMDAKIAotCSogY29uZmlndXJlLmluOiBNYWtlIHRhcmdldCBzdWJkaXJlY3RvcnkgaW4gYnVpbGQgZGlyLgotCSogTWFrZWZpbGUuYW06IE92ZXJyaWRlIHN1ZmZpeCBiYXNlZCBydWxlcyB0byBzcGVjaWZ5IGNvcnJlY3Qgb3V0cHV0Ci0Jc3ViZGlyZWN0b3J5LgotCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCi0JKiBjb25maWd1cmU6IFJlYnVpbHQuCisgICAgTW92ZWQgZmlsZXMgZnJvbSBvbGQgaG9tZQogCi0yMDAxLTAzLTIzICBLZXZpbiBCIEhlbmRyaWNrcyAgPGtoZW5kcmlja3NAaXZleS51d28uY2E+Citjb21taXQgZTU3Mjc5ODMxZTIwMzY4YzFhYTFkMmIzNTQ2MmI4NjI5YmU3Mzk1OQorQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIFN1biBBcHIgMjIgMTg6MjM6NDcgMjAwMSArMDAwMAogCi0JKiBzcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TOiBOZXcgZmlsZS4KLQkqIHNyYy9wb3dlcnBjL2ZmaS5jIChmZmlfcHJlcF9hcmdzKTogRml4ZWQgQUJJIGNvbXBhdGliaWxpdHkgYnVnCi0JaW52b2x2aW5nIGxvbmcgbG9uZyBhbmQgcmVnaXN0ZXIgcGFpcnMuCi0JKGZmaV9wcmVwX2Nsb3N1cmUpOiBOZXcgZnVuY3Rpb24uCi0JKGZsdXNoX2ljYWNoZSk6IExpa2V3aXNlLgotCShmZmlfY2xvc3VyZV9oZWxwZXJfU1lTVik6IExpa2V3aXNlLgotCSogaW5jbHVkZS9mZmkuaC5pbiAoRkZJX0NMT1NVUkVTKTogRGVmaW5lIG9uIFBQQy4KLQkoRkZJX1RSQU1QT0xJTkVfU0laRSk6IExpa2V3aXNlLgotCShGRklfTkFUSVZFX1JBV19BUEkpOiBMaWtld2lzZS4KLQkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgotCSogTWFrZWZpbGUuYW0gKEVYVFJBX0RJU1QpOiBBZGRlZCBzcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TLgotCShUQVJHRVRfU1JDX1BPV0VSUEMpOiBMaWtld2lzZS4KKyAgICBUaGVzZSBhcmUgZGVhZC4KIAotMjAwMS0wMy0xOSAgVG9tIFRyb21leSAgPHRyb21leUByZWRoYXQuY29tPgorY29tbWl0IDcyNDc0MzZiNWZlNzE3NjdiMjlkYzAyYjRkYTBmZTE4YjA4MDgyZTYKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBTdW4gQXByIDIyIDE4OjIyOjQzIDIwMDEgKzAwMDAKIAotCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCi0JKiBNYWtlZmlsZS5hbSAoZmZpdGVzdF9MREZMQUdTKTogTmV3IG1hY3JvLgorICAgIEFsbCB0aGVzZSBmaWxlcyBsaXZlIHNvbWV3aGVyZSBlbHNlIG5vdy4KIAotMjAwMS0wMy0wMiAgTmljayBDbGlmdG9uICA8bmlja2NAcmVkaGF0LmNvbT4KK2NvbW1pdCBhOGIwZDQwZmY5MDhlMjc1MDI4ZjY3Njg3MGMzMWQwZDcwMjc0YTk4CitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgU3VuIEFwciAyMiAxODoxNzoxNCAyMDAxICswMDAwCiAKLQkqIGluY2x1ZGUvZmZpLmguaW46IFJlbW92ZSBSQ1MgaWRlbnQgc3RyaW5nLgotCSogaW5jbHVkZS9mZmlfbWlwcy5oOiBSZW1vdmUgUkNTIGlkZW50IHN0cmluZy4KLQkqIHNyYy9kZWJ1Zy5jOiBSZW1vdmUgUkNTIGlkZW50IHN0cmluZy4KLQkqIHNyYy9mZml0ZXN0LmM6IFJlbW92ZSBSQ1MgaWRlbnQgc3RyaW5nLgotCSogc3JjL3ByZXBfY2lmLmM6IFJlbW92ZSBSQ1MgaWRlbnQgc3RyaW5nLgotCSogc3JjL3R5cGVzLmM6IFJlbW92ZSBSQ1MgaWRlbnQgc3RyaW5nLgotCSogc3JjL2FscGhhL2ZmaS5jOiBSZW1vdmUgUkNTIGlkZW50IHN0cmluZy4KLQkqIHNyYy9hbHBoYS9vc2YuUzogUmVtb3ZlIFJDUyBpZGVudCBzdHJpbmcuCi0JKiBzcmMvYXJtL2ZmaS5jOiBSZW1vdmUgUkNTIGlkZW50IHN0cmluZy4KLQkqIHNyYy9hcm0vc3lzdi5TOiBSZW1vdmUgUkNTIGlkZW50IHN0cmluZy4KLQkqIHNyYy9taXBzL2ZmaS5jOiBSZW1vdmUgUkNTIGlkZW50IHN0cmluZy4KLQkqIHNyYy9taXBzL24zMi5TOiBSZW1vdmUgUkNTIGlkZW50IHN0cmluZy4KLQkqIHNyYy9taXBzL28zMi5TOiBSZW1vdmUgUkNTIGlkZW50IHN0cmluZy4KLQkqIHNyYy9zcGFyYy9mZmkuYzogUmVtb3ZlIFJDUyBpZGVudCBzdHJpbmcuCi0JKiBzcmMvc3BhcmMvdjguUzogUmVtb3ZlIFJDUyBpZGVudCBzdHJpbmcuCi0JKiBzcmMvc3BhcmMvdjkuUzogUmVtb3ZlIFJDUyBpZGVudCBzdHJpbmcuCi0JKiBzcmMveDg2L2ZmaS5jOiBSZW1vdmUgUkNTIGlkZW50IHN0cmluZy4KLQkqIHNyYy94ODYvc3lzdi5TOiBSZW1vdmUgUkNTIGlkZW50IHN0cmluZy4KKyAgICBNYW55IGNoYW5nZXMuICBOb3QgcXVpdGUgdGhlcmUgeWV0LgogCi0yMDAxLTAyLTA4ICBKb3NlcGggUy4gTXllcnMgIDxqc20yOEBjYW0uYWMudWs+Citjb21taXQgZjg5M2QyMjczMzU1NzEwYTI5MGEyNmZhZWJmNWYxMmMzYTM0ZDBlMworQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIFN1biBBcHIgMjIgMTg6MTM6MjIgMjAwMSArMDAwMAogCi0JKiBpbmNsdWRlL2ZmaS5oLmluOiBDaGFuZ2Ugc291cmNld2FyZS5jeWdudXMuY29tIHJlZmVyZW5jZXMgdG8KLQlnY2MuZ251Lm9yZy4KKyAgICBNb3ZlZCBtNjhrIGZpbGVzCiAKLTIwMDAtMTItMDkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQHJlZGhhdC5jb20+Citjb21taXQgNjg4ZGRmZWNlZDg5Y2JiOWQzN2I1MzAwNWUxZjdmMmI5Yzc4YThkNworQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIFN1biBBcHIgMjIgMTg6MTI6MzMgMjAwMSArMDAwMAogCi0JKiBzcmMvYWxwaGEvZmZpLmMgKGZmaV9jYWxsKTogU2ltcGxpZnkgc3RydWN0IHJldHVybiB0ZXN0LgotCShmZmlfY2xvc3VyZV9vc2ZfaW5uZXIpOiBJbmRleCByYXRoZXIgdGhhbiBpbmNyZW1lbnQgYXZhbHVlCi0JYW5kIGFyZ190eXBlcy4gIEdpdmUgZmZpX2Nsb3N1cmVfb3NmIHRoZSByYXcgcmV0dXJuIHZhbHVlIHR5cGUuCi0JKiBzcmMvYWxwaGEvb3NmLlMgKGZmaV9jbG9zdXJlX29zZik6IEhhbmRsZSByZXR1cm4gdmFsdWUgdHlwZQotCXByb21vdGlvbi4KKyAgICBOZXcsIHRhcmdldCBpbmRlcGVudGVudCwgaGVhZGVyCiAKLTIwMDAtMTItMDcgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQHJlZGhhdC5jb20+Citjb21taXQgZjllNDA3NzZkNDg4ZDVlY2Y0M2IzYWUyMTQ0NGExYTJmNmVjYTUyOAorQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIFN1biBBcHIgMjIgMTg6MTE6NTcgMjAwMSArMDAwMAogCi0JKiBzcmMvcmF3X2FwaS5jIChmZmlfdHJhbnNsYXRlX2FyZ3MpOiBGaXggdHlwby4KLQkoZmZpX3ByZXBfY2xvc3VyZSk6IExpa2V3aXNlLgorICAgIE1hbnkgY2hhbmdlcy4KIAotCSogaW5jbHVkZS9mZmkuaC5pbiBbQUxQSEFdOiBEZWZpbmUgRkZJX0NMT1NVUkVTIGFuZAotCUZGSV9UUkFNUE9MSU5FX1NJWkUuCi0JKiBzcmMvYWxwaGEvZmZpLmMgKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogQWRqdXN0IG1pbmltYWwKLQljaWYtPmJ5dGVzIGZvciBuZXcgZmZpX2NhbGxfb3NmIGltcGxlbWVudGF0aW9uLgotCShmZmlfcHJlcF9hcmdzKTogQWJzb3JiIGludG8gLi4uCi0JKGZmaV9jYWxsKTogLi4uIGhlcmUuICBEbyBhbGwgc3RhY2sgYWxsb2NhdGlvbiBoZXJlIGFuZAotCWF2b2lkIGEgY2FsbGJhY2sgZnVuY3Rpb24uCi0JKGZmaV9wcmVwX2Nsb3N1cmUsIGZmaV9jbG9zdXJlX29zZl9pbm5lcik6IE5ldy4KLQkqIHNyYy9hbHBoYS9vc2YuUyAoZmZpX2NhbGxfb3NmKTogUmVpbXBsZW1lbnQgd2l0aCBubyBjYWxsYmFjay4KLQkoZmZpX2Nsb3N1cmVfb3NmKTogTmV3LgorY29tbWl0IDhjMWQyZWI0N2Y2YmMzMTRjNDMxYjc1Yzg1YzEwN2U4ZTQzYzRhNzYKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBTdW4gQXByIDIyIDE4OjEwOjQ3IDIwMDEgKzAwMDAKIAotMjAwMC0wOS0xMCAgQWxleGFuZHJlIE9saXZhICA8YW9saXZhQHJlZGhhdC5jb20+CisgICAgTWFueSBjaGFuZ2VzCiAKLQkqIGNvbmZpZy5ndWVzcywgY29uZmlnLnN1YiwgaW5zdGFsbC1zaDogUmVtb3ZlZC4KLQkqIGx0Y29uZmlnLCBsdG1haW4uc2gsIG1pc3NpbmcsIG1raW5zdGFsbGRpcnM6IExpa2V3aXNlLgotCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCitjb21taXQgMTM1OWRmYzY1ODI2ODBhMTU4YjNjYWEzZWZiN2EzNjhkYTRhYTEyZAorQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIFN1biBBcHIgMjIgMTg6MTA6MjAgMjAwMSArMDAwMAogCi0JKiBhY2luY2x1ZGUubTQ6IEluY2x1ZGUgbGlidG9vbCBtYWNyb3MgZnJvbSB0aGUgdG9wIGxldmVsLgotCSogYWNsb2NhbC5tNCwgY29uZmlndXJlOiBSZWJ1aWx0LgorICAgIE1vdmVkIGlhNjQgZmlsZXMKIAotMjAwMC0wOC0yMiAgQWxleGFuZHJlIE9saXZhICA8YW9saXZhQHJlZGhhdC5jb20+Citjb21taXQgNmUyZGU1ZWVlMzE2YTQ1Nzk4NjlhZmY1MGM3YzVmNmY0Nzg1ODJkOAorQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIFN1biBBcHIgMjIgMTg6MDg6MTEgMjAwMSArMDAwMAogCi0JKiBjb25maWd1cmUuaW4gW2kqODYtKi1mcmVlYnNkKl0gKFRBUkdFVCwgVEFSR0VURElSKTogU2V0LgotCSogY29uZmlndXJlOiBSZWJ1aWx0LgorICAgIE1vdmVkIGFybSBmaWxlcwogCi0yMDAwLTA1LTExICBTY290dCBCYW1icm91Z2ggIDxzY290dGJAbmV0d2luZGVyLm9yZz4KK2NvbW1pdCA4ODA3MzU1YWYzNGNiYThmZmU4N2FlZTUxMTUyZGZjY2VjMjc3MWZhCitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgTW9uIEFwciA5IDAwOjU4OjM4IDIwMDEgKzAwMDAKIAotCSogbGliZmZpL3NyYy9hcm0vc3lzdi5TIChmZmlfY2FsbF9TWVNWKTogRG91YmxlcyBhcmUgbm90IHNhdmVkIHRvCi0JbWVtb3J5IGNvcnJlY3RseS4gIFVzZSBjb25kaXRpb25hbCBpbnN0cnVjdGlvbnMsIG5vdCBicmFuY2hlcyB3aGVyZQotCXBvc3NpYmxlLgorICAgIE1hbnkgbWFueSB1cGRhdGVzLiAgTWVyZ2UgZnJvbSBnY2MgYW5kIHRoZW4gc29tZS4KIAotMjAwMC0wNS0wNCAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgorY29tbWl0IGY3ZTlmOTFhZGVjNGZmMWMyZTdhMTNiM2RlODFkMmM1YTNmNTVlN2UKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBNb24gQXByIDE3IDAzOjMyOjM3IDIwMDAgKzAwMDAKIAotCSogY29uZmlndXJlOiBSZWJ1aWx0LgotCSogY29uZmlndXJlLmluOiBNYXRjaCBgYXJtKi0qLWxpbnV4LSonLgotCUZyb20gQ2hyaXMgRG9ybmFuIDxjZG9ybmFuQGFybS5jb20+LgorICAgIE1uYXkgZml4ZXMuCiAKLTIwMDAtMDQtMjggIEpha3ViIEplbGluZWsgIDxqYWt1YkByZWRoYXQuY29tPgorY29tbWl0IGM0ODYwZGU2MThmNDk1NjI4M2Y1YzgyMzBhMjU0NGU0MDNkZmUzOTAKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBNb24gQXByIDE3IDAzOjE4OjQ2IDIwMDAgKzAwMDAKIAotCSogTWFrZWZpbGUuYW0gKFNVQkRJUlMpOiBEZWZpbmUuCi0JKEFNX01BS0VGTEFHUyk6IExpa2V3aXNlLgotCShNdWx0aWxpYiBzdXBwb3J0Lik6IEFkZCBzZWN0aW9uLgotCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCi0JKiBsdGNvbmZpZyAoZXh0cmFfY29tcGlsZXJfZmxhZ3MsIGV4dHJhX2NvbXBpbGVyX2ZsYWdzX3ZhbHVlKToKLQlOZXcgdmFyaWFibGVzLiBTZXQgZm9yIGdjYyB1c2luZyAtcHJpbnQtbXVsdGktbGliLiBFeHBvcnQgdGhlbQotCXRvIGxpYnRvb2wuCi0JKHNwYXJjNjQtKi1saW51eC1nbnUqKTogVXNlIGxpYnN1ZmYgNjQgZm9yIHNlYXJjaCBwYXRocy4KLQkqIGx0bWFpbi5zaCAoQnxifFYpOiBEb24ndCB0aHJvdyBhd2F5IGdjYydzIC1CLCAtYiBhbmQgLVYgb3B0aW9ucwotCWZvciAtc2hhcmVkIGxpbmtzLgotCShleHRyYV9jb21waWxlcl9mbGFnc192YWx1ZSwgZXh0cmFfY29tcGlsZXJfZmxhZ3MpOiBDaGVjayB0aGVzZQotCWZvciBleHRyYSBjb21waWxlciBvcHRpb25zIHdoaWNoIG5lZWQgdG8gYmUgcGFzc2VkIGRvd24gaW4KLQljb21waWxlcl9mbGFncy4KKyAgICBNZXJnZSBmcm9tIGxpYmdjai4gIE1lcmdlZCBwYXRjaGVzIGZyb20gbmV0LiAgU2VlIENoYW5nZUxvZyBmb3IgZGV0YWlscy4KIAotMjAwMC0wNC0xNiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJlZGhhdC5jb20+Citjb21taXQgYzU3OGI1ODMxNDk5MGMzODUzNDI5Mjk3YzM4YmExNDAxNWZlYzVmYQorQXV0aG9yOiBqc20gPGpzbT4KK0RhdGU6ICAgU2F0IE9jdCA5IDIwOjE4OjE2IDE5OTkgKzAwMDAKIAotCSogY29uZmlndXJlOiBSZWJ1aWx0LgotCSogY29uZmlndXJlLmluOiBDaGFuZ2UgaSo4Ni1wYy1saW51eCogdG8gaSo4Ni0qLWxpbnV4Ki4KKyAgICAxOTk5LTEwLTA5ICBKYXNvbiBNb2xlbmRhICAoanNtQGJ1Z3NoYWNrLmN5Z251cy5jb20pCisgICAgCisgICAgCSogQ1ZTUk9PVC9hdXRvX2NoZWNrb3V0LCBDVlNST09UL2NvbW1pdF9wcmVwLCBDVlNST09UL2xvZ19hY2N1bToKKyAgICAJRGVsZXRlZDsgZ2VuZXJpYyB2ZXJzaW9ucyBub3cgdXNlZCBmb3IgYWxsIHJlcG9zaXRvcmllcy4KKyAgICAKKyAgICAJKiBDVlNST09UL2NvbW1pdGluZm8sIENWU1JPT1QvbG9naW5mbzogIENoYW5nZSBwYXRobmFtZXMgdG8KKyAgICAJZ2VuZXJpYyB2ZXJzaW9ucy4KKyAgICAKKyAgICAgICAgICAgICogQ1ZTUk9PVC9jaGVja291dGxpc3Q6ICBEb24ndCB0cnkgdG8gY2hlY2sgb3V0IHRoZSByZW1vdmVkCisgICAgICAgICAgICBmaWxlcyBhbnkgbG9uZ2VyLgogCi0yMDAwLTA0LTE0ICBKYWt1YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNvbT4KK2NvbW1pdCBhY2RiMjAwNTEyMDdmZWQ3NjUyZGQ5ZjEyMmY2NWRlNTQ1OGM0NzRjCitBdXRob3I6IGpzbSA8anNtPgorRGF0ZTogICBTYXQgT2N0IDkgMjA6MTg6MTUgMTk5OSArMDAwMAogCi0JKiBpbmNsdWRlL2ZmaS5oLmluIChTUEFSQzY0KTogRGVmaW5lIGZvciA2NGJpdCBTUEFSQyBidWlsZHMuCi0JU2V0IFNQQVJDIEZGSV9ERUZBVUxUX0FCSSBiYXNlZCBvbiBTUEFSQzY0IGRlZmluZS4KLQkqIHNyYy9zcGFyYy9mZmkuYyAoZmZpX3ByZXBfYXJnc192OCk6IFJlbmFtZWQgZnJvbSBmZmlfcHJlcF9hcmdzLgotCVJlcGxhY2UgYWxsIHZvaWQgKiBzaXplb2ZzIHdpdGggc2l6ZW9mKGludCkuCi0JT25seSBjb21wYXJlIHR5cGUgd2l0aCBGRklfVFlQRV9MT05HRE9VQkxFIGlmIExPTkdET1VCTEUgaXMKLQlkaWZmZXJlbnQgdGhhbiBET1VCTEUuCi0JUmVtb3ZlIEZGSV9UWVBFX1NJTlQzMiBhbmQgRkZJX1RZUEVfVUlOVDMyIGNhc2VzIChoYW5kbGVkIGVsc2V3aGVyZSkuCi0JKGZmaV9wcmVwX2FyZ3NfdjkpOiBOZXcgZnVuY3Rpb24uCi0JKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogSGFuZGxlIFY5IEFCSSBhbmQgbG9uZyBsb25nIG9uIFY4LgotCShmZmlfVjlfcmV0dXJuX3N0cnVjdCk6IE5ldyBmdW5jdGlvbi4KLQkoZmZpX2NhbGwpOiBIYW5kbGUgRkZJX1Y5IEFCSSBmcm9tIDY0Yml0IGNvZGUgYW5kIEZGSV9WOCBBQkkgZnJvbQotCTMyYml0IGNvZGUgKG5vdCB5ZXQgY3Jvc3MtYXJjaCBjYWxscykuCi0JKiBzcmMvc3BhcmMvdjguUzogQWRkIHN0cnVjdCByZXR1cm4gZGVsYXkgbm9wLgotCUhhbmRsZSBsb25nIGxvbmcuCi0JKiBzcmMvc3BhcmMvdjkuUzogTmV3IGZpbGUuCi0JKiBzcmMvcHJlcF9jaWYuYyAoZmZpX3ByZXBfY2lmKTogUmV0dXJuIHN0cnVjdHVyZSBwb2ludGVyCi0JaXMgdXNlZCBvbiBzcGFyYzY0IG9ubHkgZm9yIHN0cnVjdHVyZXMgbGFyZ2VyIHRoYW4gMzIgYnl0ZXMuCi0JUGFzcyBieSByZWZlcmVuY2UgZm9yIHN0cnVjdHVyZXMgaXMgZG9uZSBmb3Igc3RydWN0dXJlIGFyZ3VtZW50cwotCWxhcmdlciB0aGFuIDE2IGJ5dGVzLgotCSogc3JjL2ZmaXRlc3QuYyAobWFpbik6IFVzZSA2NGJpdCByaW50IG9uIHNwYXJjNjQuCi0JUnVuIGxvbmcgbG9uZyB0ZXN0cyBvbiBzcGFyYy4KLQkqIHNyYy90eXBlcy5jIChGRklfVFlQRV9QT0lOVEVSKTogUG9pbnRlciBpcyA2NGJpdCBvbiBhbHBoYSBhbmQKLQlzcGFyYzY0LgotCShGRklfVFlQRV9MT05HRE9VQkxFKTogbG9uZyBkb3VibGUgaXMgMTI4IGJpdCBhbGlnbmVkIHRvIDEyOCBiaXRzCi0Jb24gc3BhcmM2NC4KLQkqIGNvbmZpZ3VyZS5pbiAoc3BhcmMtKi1saW51eCopOiBOZXcgc3VwcG9ydGVkIHRhcmdldC4KLQkoc3BhcmM2NC0qLWxpbnV4Kik6IExpa2V3aXNlLgotCSogY29uZmlndXJlOiBSZWJ1aWx0LgotCSogTWFrZWZpbGUuYW06IEFkZCB2OS5TIHRvIFNQQVJDIGZpbGVzLgotCSogTWFrZWZpbGUuaW46IExpa2V3aXNlLgotCShMSU5LKTogU3Vycm91bmQgJChDQ0xEKSBpbnRvIGRvdWJsZSBxdW90ZXMsIHNvIHRoYXQgbXVsdGlsaWIKLQljb21waWxlcyB3b3JrIGNvcnJlY3RseS4KKyAgICAxOTk5LTEwLTA5ICBKYXNvbiBNb2xlbmRhICAoanNtQGJ1Z3NoYWNrLmN5Z251cy5jb20pCisgICAgCisgICAgCSogQ1ZTUk9PVC9hdXRvX2NoZWNrb3V0LCBDVlNST09UL2NvbW1pdF9wcmVwLCBDVlNST09UL2xvZ19hY2N1bToKKyAgICAJRGVsZXRlZDsgZ2VuZXJpYyB2ZXJzaW9ucyBub3cgdXNlZCBmb3IgYWxsIHJlcG9zaXRvcmllcy4KKyAgICAKKyAgICAJKiBDVlNST09UL2NvbW1pdGluZm8sIENWU1JPT1QvbG9naW5mbzogIENoYW5nZSBwYXRobmFtZXMgdG8KKyAgICAJZ2VuZXJpYyB2ZXJzaW9ucy4KKyAgICAKKyAgICAgICAgICAgICogQ1ZTUk9PVC9jaGVja291dGxpc3Q6ICBEb24ndCB0cnkgdG8gY2hlY2sgb3V0IHRoZSByZW1vdmVkCisgICAgICAgICAgICBmaWxlcyBhbnkgbG9uZ2VyLgogCi0yMDAwLTA0LTA0ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KK2NvbW1pdCBlNzViZTY1NWNlZWRmN2FiMjRjNGU5OWQ3NWVlYzllZmViOTc5YmM3CitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgU3VuIEF1ZyA4IDEzOjE2OjQxIDE5OTkgKzAwMDAKIAotCSogY29uZmlndXJlOiBSZWJ1aWx0LgotCSogY29uZmlndXJlLmluOiAoaSo4Ni0qLXNvbGFyaXMqKTogTmV3IGxpYmZmaSB0YXJnZXQuIFBhdGNoCi0JcHJvcG9zZWQgYnkgQnJ5Y2UgTWNLaW5sYXkuCisgICAgTmV3IGNvbmZpZ3VyeQogCi0yMDAwLTAzLTIwICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+Citjb21taXQgZDY2NjlhMGRkNWIyNjYwMDUzMjViYmY2ZDVhOGZmMzQ1NzRkODA5ZQorQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIFN1biBBdWcgOCAxMzowNToxMiAxOTk5ICswMDAwCiAKLQkqIE1ha2VmaWxlLmluOiBIYW5kIGVkaXQgZm9yIGphdmFfcmF3X2FwaS5sby4KKyAgICAJKiBpbmNsdWRlL2ZmaS5oLmluOiBUcnkgdG8gd29yayBhcm91bmQgbWVzc3kgaGVhZGVyIHByb2JsZW0KKyAgICAJd2l0aCBQQUNLQUdFIGFuZCBWRVJTSU9OLgorICAgIAorICAgIAkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKyAgICAJKiBjb25maWd1cmUuaW46IENoYW5nZSB2ZXJzaW9uIHRvIDIuMDAtYmV0YS4KKyAgICAKKyAgICAgICAgICAgICogZmZpY29uZmlnLmguaW46IFJlYnVpbHQuCisgICAgCSogYWNjb25maWcuaCAoRkZJX05PX1NUUlVDVFMsIEZGSV9OT19SQVdfQVBJKTogRGVmaW5lLgorICAgIAorICAgIAkqIHNyYy94ODYvZmZpLmMgKGZmaV9yYXdfY2FsbCk6IFJlbmFtZS4KIAotMjAwMC0wMy0wOCAgQnJ5Y2UgTWNLaW5sYXkgIDxicnljZUBhbGJhdHJvc3MuY28ubno+Citjb21taXQgNDgxOWQ1MmIwMDc5MzRhNDBkNmQyOWE3NWVlMzBlODU3YzRhOTNhZQorQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIFdlZCBBdWcgNCAxODowMjozNCAxOTk5ICswMDAwCiAKLQkqIGNvbmZpZy5ndWVzcywgY29uZmlnLnN1YjogVXBkYXRlIGZyb20gdGhlIGdjYyB0cmVlLgotCUZpeCBmb3IgUFIgbGliZ2NqLzE2OC4KKyAgICBOZXcgZmlsZSBmb3IgS3Jlc3RlbidzIGNsb3N1cmUgd29yawogCi0yMDAwLTAzLTAzICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+Citjb21taXQgMmRiZjgwMWViNDI3Y2JmNTAyMWE5ZTFlNTEyYjVmYzUyMzUyNDcwMAorQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIFdlZCBBdWcgNCAxODowMDowNSAxOTk5ICswMDAwCiAKLQkqIE1ha2VmaWxlLmluOiBGaXhlZCBpYTY0IGJ5IGhhbmQuCisgICAgS3Jlc3RlbidzIGNsb3N1cmUgd29yay4gSW5pdGlhbCBjaGVja2luLgogCi0JKiBjb25maWd1cmU6IFJlYnVpbHQuCi0JKiBjb25maWd1cmUuaW4gKC0tZW5hYmxlLW11bHRpbGliKTogTmV3IG9wdGlvbi4KLQkobGliZmZpX2Jhc2VkaXIpOiBOZXcgc3Vic3QuCi0JKEFDX09VVFBVVCk6IEFkZGVkIG11bHRpbGliIGNvZGUuCitjb21taXQgZDE3MDk2MTcwMWIwZjJiZjdlODI0ZDdjYWJhMmViZTEwMDAyZWQ4NAorQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIFRodSBKdWwgOCAxNDozNjo1MiAxOTk5ICswMDAwCiAKLTIwMDAtMDMtMDIgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KKyAgICAJKiBjb25maWd1cmUuaW46IEFkZCB4ODYgYW5kIHBvd2VycGMgQmVPUyBjb25maWd1cmF0aW9ucy4KKyAgICAJRnJvbSBNYWtvdG8gS2F0byA8bV9rYXRvQGdhMi5zby1uZXQubmUuanA+LgogCi0JKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KLQkqIE1ha2VmaWxlLmFtIChUQVJHRVRfU1JDX0lBNjQpOiBVc2UgYGlhNjQnLCBub3QgYGFscGhhJywgYXMKLQlkaXJlY3RvcnkgbmFtZS4KK2NvbW1pdCBjNzc0N2Q5NzY5MjRlYzZmMjIyOWNiY2ZiYmRiOThkMzY0ZTEwZGU5CitBdXRob3I6IGpzbSA8anNtPgorRGF0ZTogICBXZWQgTWF5IDEyIDIzOjMyOjE2IDE5OTkgKzAwMDAKIAotMjAwMC0wMi0yNSAgSGFucyBCb2VobSA8Ym9laG1AYWNtLm9yZz4KKyAgICAxOTk5LTA1LTEyICBKYXNvbiBNb2xlbmRhICAoanNtQGJ1Z3NoYWNrLmN5Z251cy5jb20pCisgICAgICAgICAgICAqIGluZGV4Lmh0bWw6IEFkZCBsaW5rcyB0byBsaWJmZmkqIG1haWwgbGlzdCBhcmNoaXZlcy4KIAotCSogc3JjL2lhNjQvZmZpLmMsIHNyYy9pYTY0L2lhNjRfZmxhZ3MuaCwgc3JjL2lhNjQvdW5peC5TOiBOZXcKLQlmaWxlcy4KLQkqIHNyYy9yYXdfYXBpLmMgKGZmaV90cmFuc2xhdGVfYXJncyk6IEZpeGVkIHR5cG8gaW4gYXJndW1lbnQKLQlsaXN0LgotCShmZmlfcHJlcF9yYXdfY2xvc3VyZSk6IFVzZSBmZmlfdHJhbnNsYXRlX2FyZ3MsIG5vdAotCWZmaV9jbG9zdXJlX3RyYW5zbGF0ZS4KLQkqIHNyYy9qYXZhX3Jhd19hcGkuYzogTmV3IGZpbGUuCi0JKiBzcmMvZmZpdGVzdC5jIChjbG9zdXJlX3Rlc3RfZm4pOiBOZXcgZnVuY3Rpb24uCi0JKG1haW4pOiBEZWZpbmUgYHJpbnQnIGFzIGxvbmcgbG9uZyBvbiBJQTY0LiAgQWRkZWQgbmV3IHRlc3Qgd2hlbgotCUZGSV9DTE9TVVJFUyBpcyBkZWZpbmVkLgotCSogaW5jbHVkZS9mZmkuaC5pbiAoQUxJR04pOiBVc2Ugc2l6ZV90LCBub3QgdW5zaWduZWQuCi0JKGZmaV9hYmkpOiBSZWNvZ25pemUgSUE2NC4KLQkoZmZpX3Jhdyk6IEFkZGVkIGBmbHQnIGZpZWxkLgotCUFkZGVkICJKYXZhIHJhdyBBUEkiIGNvZGUuCi0JKiBjb25maWd1cmUuaW46IFJlY29nbml6ZSBpYTY0LgotCSogTWFrZWZpbGUuYW0gKFRBUkdFVF9TUkNfSUE2NCk6IE5ldyBtYWNyby4KLQkobGliZmZpX2xhX2NvbW1vbl9TT1VSQ0VTKTogQWRkZWQgamF2YV9yYXdfYXBpLmMuCi0JKGxpYmZmaV9sYV9TT1VSQ0VTKTogRGVmaW5lIGluIElBNjQgY2FzZS4KK2NvbW1pdCBkZDJhYTlhOGRlMjJlMjZkZjNiYmM4NWQwNjgzNTg2NDFmNjIwMmY3CitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgVGh1IE1heSA2IDA1OjM0OjM2IDE5OTkgKzAwMDAKIAotMjAwMC0wMS0wNCAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgorICAgIAkqIGNvbmZpZ3VyZS5pbjogQWRkIHdhcm5pbmcgYWJvdXQgdGhpcyBiZWluZyBiZXRhIGNvZGUuCisgICAgCVJlbW92ZSBzcmMvTWFrZWZpbGUuYW0gZnJvbSB0aGUgcGljdHVyZS4KKyAgICAJKiBjb25maWd1cmU6IFJlYnVpbHQuCisgICAgCSogTWFrZWZpbGUuYW06IE1vdmUgbG9naWMgZnJvbSBzcmMvTWFrZWZpbGUuYW0uICBBZGQgY2hhbmdlcworICAgIAl0byBzdXBwb3J0IGxpYmZmaSBhcyBhIHRhcmdldCBsaWJyYXJ5LgorICAgIAkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgorICAgIAkqIGFjbG9jYWwubTQsIGNvbmZpZy5ndWVzcywgY29uZmlnLnN1YiwgbHRjb25maWcsIGx0bWFpbi5zaDoKKyAgICAJVXBncmFkZWQgdG8gbmV3IGF1dG9jb25mLCBhdXRvbWFrZSwgbGlidG9vbC4KKyAgICAJKiBSRUFETUU6IFR3ZWFrcy4KKyAgICAJKiBMSUNFTlNFOiBVcGRhdGUgY29weXJpZ2h0IGRhdGUuCisgICAgCSogc3JjL01ha2VmaWxlLmFtLCBzcmMvTWFrZWZpbGUuaW46IFJlbW92ZWQuCiAKLQkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0IHdpdGggbmV3ZXIgYXV0b21ha2UuCitjb21taXQgNGU5NDUyYWJlZDU4YTMwNThjY2RiNDQ2Zjk2YTI5ZDUwZGRhMWYzNAorQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIFdlZCBNYXkgNSAyMjowNjoxMyAxOTk5ICswMDAwCiAKLTE5OTktMTItMzEgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KKyAgICBVcGRhdGVkIHRvIG5ldyBhdXRvbWFrZSwgbGlidG9vbCwgYXV0b2NvbmYgLSBub3RoaW5nIHdvcmtzIDotKQogCi0JKiBNYWtlZmlsZS5hbSAoSU5DTFVERVMpOiBBZGRlZCAtSSQodG9wX3NyY2Rpcikvc3JjLgorY29tbWl0IDZkM2IyYmRkYWY0OTY3ZmJhOGI4NjU2YzAxYmZjNzdlYzBmMjgwMGMKK0F1dGhvcjoganNtIDxqc20+CitEYXRlOiAgIE1vbiBBcHIgMjYgMTU6NTU6MjggMTk5OSArMDAwMAogCi0xOTk5LTA5LTAxICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CisgICAgMTk5OS0wNC0yNiAgSmFzb24gTW9sZW5kYSAgKGpzbUBidWdzaGFjay5jeWdudXMuY29tKQorICAgICAgICAgICAgKiBpbmRleC5odG1sOiBNaXNzZWQgYSByZWZlcmVuY2UgdG8gbGliZmZpLWRpc2N1c3NAY3lnbnVzLmNvbS4gIEZpeGVkLgogCi0JKiBpbmNsdWRlL2ZmaS5oLmluOiBSZW1vdmVkIFBBQ0tBR0UgYW5kIFZFUlNJT04gZGVmaW5lcyBhbmQKLQl1bmRlZnMuCi0JKiBmZmljb25maWcuaC5pbjogUmVidWlsdC4KLQkqIGNvbmZpZ3VyZTogUmVidWlsdC4KLQkqIGNvbmZpZ3VyZS5pbjogUGFzcyAzcmQgYXJndW1lbnQgdG8gQU1fSU5JVF9BVVRPTUFLRS4KLQlVc2UgQU1fUFJPR19MSUJUT09MIChhdXRvbWFrZSAxLjQgY29tcGF0aWJpbGl0eSkuCi0JKiBhY2NvbmZpZy5oOiBEb24ndCAjdW5kZWYgUEFDS0FHRSBvciBWRVJTSU9OLgorY29tbWl0IGViYzZhOWMyOGFmODMxZDNkMTg3YWY4ZmYxNzMxOWYwZjMwOWJkOTgKK0F1dGhvcjoganNtIDxqc20+CitEYXRlOiAgIE1vbiBBcHIgMjYgMTU6NTM6MjkgMTk5OSArMDAwMAogCi0xOTk5LTA4LTA5ICBBbnRob255IEdyZWVuICA8Z3JlZW5AY3lnbnVzLmNvbT4KKyAgICAxOTk5LTA0LTI2ICBKYXNvbiBNb2xlbmRhICAoanNtQGJ1Z3NoYWNrLmN5Z251cy5jb20pCisgICAgICAgICAgICAqIGluZGV4Lmh0bWw6IENoYW5nZSBsaW5rcyB0byBmdHAgZGlyZWN0b3J5IHRvIHBvaW50IHRvIHNvdXJjZXdhcmUKKyAgICAgICAgICAgIGRpcmVjdG9yeS4KKyAgICAgICAgICAgIENoYW5nZSBtYWlsaW5nIGxpc3Qgc3Vic2NyaXB0aW9uIGZvcm1zIHRvIHBvaW50IHRvIHNvdXJjZXdhcmUgbGlzdHMuCiAKLQkqIGluY2x1ZGUvZmZpLmguaW46IFRyeSB0byB3b3JrIGFyb3VuZCBtZXNzeSBoZWFkZXIgcHJvYmxlbQotCXdpdGggUEFDS0FHRSBhbmQgVkVSU0lPTi4KK2NvbW1pdCA3OGZmYzUyYThiMjU3MDYxMzQ4YzU3NmNjYjZmYmJmOGI0OGIwZmZmCitBdXRob3I6IGpzbSA8anNtPgorRGF0ZTogICBTdW4gQXByIDE4IDAxOjMzOjIxIDE5OTkgKzAwMDAKIAotCSogY29uZmlndXJlOiBSZWJ1aWx0LgotCSogY29uZmlndXJlLmluOiBDaGFuZ2UgdmVyc2lvbiB0byAyLjAwLWJldGEuCisgICAgU3RhbmRhcmQgc291cmNld2FyZSBzZXR1cC4KIAotCSogZmZpY29uZmlnLmguaW46IFJlYnVpbHQuCi0JKiBhY2NvbmZpZy5oIChGRklfTk9fU1RSVUNUUywgRkZJX05PX1JBV19BUEkpOiBEZWZpbmUuCitjb21taXQgYjRkNzdlODI3ZDdlYmVmN2U1N2ViY2Q3MWU3MWMxNWM2MmYxZTBhOAorQXV0aG9yOiBqc20gPGpzbT4KK0RhdGU6ICAgTW9uIE5vdiAzMCAxMToxMToyNSAxOTk4ICswMDAwCiAKLQkqIHNyYy94ODYvZmZpLmMgKGZmaV9yYXdfY2FsbCk6IFJlbmFtZS4KKyAgICBTbWFsbCB0eXBlby4gIChJIHdvdWxkbid0IGJvdGhlciBleGNlcHQgdGhhdCBpdCBtYWRlIHRoZSBzZW50ZW5jZSBoYXJkCisgICAgZm9yIG1lIHRvIHBhcnNlIG9uIGEgY2FzdWFsIHJlYWQuKQogCi0xOTk5LTA4LTAyICBLcmVzdGVuIEtyYWIgVGhvcnVwICA8a3JhYkBkb21pbmlxLmlzLnMudS10b2t5by5hYy5qcD4KK2NvbW1pdCBiZmI3M2YwOGZkYzk4N2UzNzA3MGM1ZmIwYjE5NmZiZDI4ODcyODg4CitBdXRob3I6IGpzbSA8anNtPgorRGF0ZTogICBNb24gTm92IDMwIDEwOjQ0OjU1IDE5OTggKzAwMDAKIAotCSogc3JjL3g4Ni9mZmkuYyAoZmZpX2Nsb3N1cmVfU1lTVik6IE5ldyBmdW5jdGlvbi4KLQkoZmZpX3ByZXBfaW5jb21pbmdfYXJnc19TWVNWKTogRGl0dG8uCi0JKGZmaV9wcmVwX2Nsb3N1cmUpOiBEaXR0by4KLQkoZmZpX2Nsb3N1cmVfcmF3X1NZU1YpOiBEaXR0by4KLQkoZmZpX3ByZXBfcmF3X2Nsb3N1cmUpOiBNb3JlIGRpdHRvLgotCShmZmlfY2FsbF9yYXcpOiBGaW5hbCBkaXR0by4KKyAgICBBIGZldyBjbGVhbnVwcy4gIE1vc3Qgbm90YWJseSwgcG9pbnQgdG8gdGhlIGNvcnJlY3Qgc3Vic2NyaWJlIGNnaS1iaW4KKyAgICBzY3JpcHQuCiAKLQkqIGluY2x1ZGUvZmZpLmguaW46IEFkZCBkZWZpbml0aW9ucyBmb3IgY2xvc3VyZSBhbmQgcmF3IEFQSS4KK2NvbW1pdCBhZjhiN2YwMzdjY2VlM2I3OTM5ZWUyMjZhMWEyYmJjMmYwNTdiMzVjCitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgTW9uIE5vdiAzMCAwNjoyMDowNSAxOTk4ICswMDAwCiAKLQkqIHNyYy94ODYvZmZpLmMgKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogQWRkZWQgY2FzZSBmb3IKLQlGRklfVFlQRV9VSU5UNjQuCisgICAgCSogaW5kZXguaHRtbDogUmVmb3JtYXR0ZWQgYW5kIHVwZGF0ZWQgdG8gcmVmbGVjdCBob3N0aW5nIG9uCisgICAgCXNvdXJjZXdhcmUuY3lnbnVzLmNvbSAobmV3IG1haWxpbmcgbGlzdHMsIGV0YykuCiAKLQkqIE1ha2VmaWxlLmFtIChsaWJmZmlfbGFfY29tbW9uX1NPVVJDRVMpOiBBZGRlZCByYXdfYXBpLmMKK2NvbW1pdCAzMzRmMGIwNjA5NDJhZmY4ZDI2YmFkYWY3ZGRlNzgzMDQ1MGRjNWRhCitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgU3VuIE5vdiAyOSAxNjo1NjoxMiAxOTk4ICswMDAwCiAKLQkqIHNyYy9yYXdfYXBpLmM6IE5ldyBmaWxlLgorICAgIGluaXRpYWwgc25hcHNob3Qgb2YgZG9jdW1lbnRhdGlvbgogCi0JKiBpbmNsdWRlL2ZmaS5oLmluIChmZmlfcmF3KTogTmV3IHR5cGUuCi0JKFVJTlRfQVJHLCBTSU5UX0FSRyk6IE5ldyBkZWZpbmVzLgotCShmZmlfY2xvc3VyZSwgZmZpX3Jhd19jbG9zdXJlKTogTmV3IHR5cGVzLgotCShmZmlfcHJlcF9jbG9zdXJlLCBmZmlfcHJlcF9yYXdfY2xvc3VyZSk6IE5ldyBkZWNsYXJhdGlvbnMuCitjb21taXQgM2FiNWNiNGExZGNjN2VjZDdlNzczYzk3NTgyYjAwOTk5NzZjNDc1MworQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIFN1biBOb3YgMjkgMTY6NTY6MTAgMTk5OCArMDAwMAogCi0JKiBjb25maWd1cmUuaW46IEFkZCBjaGVjayBmb3IgZW5kaWFubmVzcyBhbmQgc2l6ZW9mIHZvaWQqLgorICAgIEluaXRpYWwgcmV2aXNpb24KIAotCSogc3JjL3g4Ni9zeXN2LlMgKGZmaV9jYWxsX1NZU1YpOiBDYWxsIGZpeHVwIHJvdXRpbmUgdmlhIGFyZ3VtZW50LAotCWluc3RlYWQgb2YgZGlyZWN0bHkuCitjb21taXQgZDJhOWViNWE4YjdjYmM4Yjc2OTgwOWNhZDU5YzgyYjk3NWMxNzhlMgorTWVyZ2U6IGQzNzgyZWMgYmM3NWM1NAorQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIFN1biBOb3YgMjkgMTY6NDg6MTYgMTk5OCArMDAwMAogCi0JKiBjb25maWd1cmU6IFJlYnVpbHQuCisgICAgVGhpcyBjb21taXQgd2FzIGdlbmVyYXRlZCBieSBjdnMyc3ZuIHRvIGNvbXBlbnNhdGUgZm9yIGNoYW5nZXMgaW4gcjcsIHdoaWNoCisgICAgaW5jbHVkZWQgY29tbWl0cyB0byBSQ1MgZmlsZXMgd2l0aCBub24tdHJ1bmsgZGVmYXVsdCBicmFuY2hlcy4KIAotVGh1IEp1bCAgOCAxNDoyODo0MiAxOTk5ICBBbnRob255IEdyZWVuICA8Z3JlZW5AY3lnbnVzLmNvbT4KK2NvbW1pdCBiYzc1YzU0YmQzMTE2NTgwMDViMDY1ZjFiZjIwMWIyMDRjODFjYmNhCitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgU3VuIE5vdiAyOSAxNjo0ODoxNiAxOTk4ICswMDAwCiAKLQkqIGNvbmZpZ3VyZS5pbjogQWRkIHg4NiBhbmQgcG93ZXJwYyBCZU9TIGNvbmZpZ3VyYXRpb25zLgotCUZyb20gTWFrb3RvIEthdG8gPG1fa2F0b0BnYTIuc28tbmV0Lm5lLmpwPi4KKyAgICBJbXBvcnQgb2YgdjEgY29kZS4KIAotMTk5OS0wNS0wOSAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQGN5Z251cy5jb20+Citjb21taXQgZDM3ODJlYzgxNjBjNjQ0NDIxZGNlYTE3YjYwNWZlYzZlMzI4ZjE0ZQorQXV0aG9yOiBqc20gPGpzbT4KK0RhdGU6ICAgRnJpIE5vdiAyMCAyMDoxODowMCAxOTk4ICswMDAwCiAKLQkqIGNvbmZpZ3VyZS5pbjogQWRkIHdhcm5pbmcgYWJvdXQgdGhpcyBiZWluZyBiZXRhIGNvZGUuCi0JUmVtb3ZlIHNyYy9NYWtlZmlsZS5hbSBmcm9tIHRoZSBwaWN0dXJlLgotCSogY29uZmlndXJlOiBSZWJ1aWx0LgorICAgIFNlbmQgY29tbWl0IG1lc3NhZ2VzIHRvIG1haWxpbmcgbGlzdHMuCiAKLQkqIE1ha2VmaWxlLmFtOiBNb3ZlIGxvZ2ljIGZyb20gc3JjL01ha2VmaWxlLmFtLiAgQWRkIGNoYW5nZXMKLQl0byBzdXBwb3J0IGxpYmZmaSBhcyBhIHRhcmdldCBsaWJyYXJ5LgotCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCitjb21taXQgOGQ4ZDM4NDNjNDg0YzJiYjcwZDgzNzViMmI3OTlmNzVlYjAzZjcwOQorQXV0aG9yOiBqc20gPGpzbT4KK0RhdGU6ICAgVGh1IE9jdCAxIDIyOjA4OjM2IDE5OTggKzAwMDAKIAotCSogYWNsb2NhbC5tNCwgY29uZmlnLmd1ZXNzLCBjb25maWcuc3ViLCBsdGNvbmZpZywgbHRtYWluLnNoOgotCVVwZ3JhZGVkIHRvIG5ldyBhdXRvY29uZiwgYXV0b21ha2UsIGxpYnRvb2wuCisgICAgaW5pdGlhbCBjaGVja2luCiAKLQkqIFJFQURNRTogVHdlYWtzLgorY29tbWl0IDQ5NjM0ZjNiZjIyMWNjMTkzOWFiYWZjNzg4ZjdlNGUzMTI5M2ZlNzMKK0F1dGhvcjoganNtIDxqc20+CitEYXRlOiAgIFRodSBPY3QgMSAyMjowODozNSAxOTk4ICswMDAwCiAKLQkqIExJQ0VOU0U6IFVwZGF0ZSBjb3B5cmlnaHQgZGF0ZS4KKyAgICBBZGQgc3RhbmRhcmQgc2V0dXAuCiAKLQkqIHNyYy9NYWtlZmlsZS5hbSwgc3JjL01ha2VmaWxlLmluOiBSZW1vdmVkLgorY29tbWl0IGM2NGE4NGM3NjkzZjhjZDQwMGZiOTRiYmEzYzliY2ZkOWFkMWZjMzYKK0F1dGhvcjoganNtIDxqc20+CitEYXRlOiAgIFRodSBPY3QgMSAyMjowODozNCAxOTk4ICswMDAwCiAKLTE5OTgtMTEtMjkgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBjeWdudXMuY29tPgorICAgIEFkZCByZWFkZXJzIGFuZCBzdGFuZGFyZCBtb2R1bGVzIGZpbGUuCiAKLQkqIGluY2x1ZGUvQ2hhbmdlTG9nOiBSZW1vdmVkLgotCSogc3JjL0NoYW5nZUxvZzogUmVtb3ZlZC4KLQkqIHNyYy9taXBzL0NoYW5nZUxvZzogUmVtb3ZlZC4KLQkqIHNyYy9zcGFyYy9DaGFuZ2VMb2c6IFJlbWJvdmVkLgotCSogc3JjL3g4Ni9DaGFuZ2VMb2c6IFJlbW92ZWQuCitjb21taXQgOTgxMzI3M2IwN2ZkMDgyZGE1NzNiM2I2YmZiOGQyMzgwOWI1OWVlYQorQXV0aG9yOiBqc20gPGpzbT4KK0RhdGU6ICAgVGh1IE9jdCAxIDIyOjA4OjMzIDE5OTggKzAwMDAKIAotCSogQ2hhbmdlTG9nLnYxOiBDcmVhdGVkLgorICAgIGluaXRpYWwgY2hlY2tpbgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9DaGFuZ2VMb2cubGliZmZpLTMuMSBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvQ2hhbmdlTG9nLmxpYmZmaS0zLjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGY3ZjUwZAotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvQ2hhbmdlTG9nLmxpYmZmaS0zLjEKQEAgLTAsMCArMSw2MDAwIEBACisyMDE0LTAzLTE2ICBKb3NoIFRyaXBsZXR0ICA8am9zaEBqb3NodHJpcGxldHQub3JnPgorCisJKiBDaGFuZ2VMb2c6IEFyY2hpdmUgdG8gQ2hhbmdlTG9nLmxpYmZmaS0zLjEgYW5kIGRlbGV0ZS4gIEZ1dHVyZQorCWNoYW5nZWxvZ3Mgd2lsbCBjb21lIGZyb20gZ2l0LCB3aXRoIGF1dG9nZW5lcmF0ZWQgc25hcHNob3RzIHNoaXBwZWQgaW4KKwlkaXN0cmlidXRlZCB0YXJiYWxscy4KKworMjAxNC0wMy0xNiAgSm9zaCBUcmlwbGV0dCAgPGpvc2hAam9zaHRyaXBsZXR0Lm9yZz4KKworCUFkZCBzdXBwb3J0IGZvciBzdGRjYWxsLCB0aGlzY2FsbCwgYW5kIGZhc3RjYWxsIG9uIG5vbi1XaW5kb3dzCisJeDg2LTMyLgorCisJTGludXggc3VwcG9ydHMgdGhlIHN0ZGNhbGwgY2FsbGluZyBjb252ZW50aW9uLCBlaXRoZXIgdmlhCisJZnVuY3Rpb25zIGV4cGxpY2l0bHkgZGVjbGFyZWQgd2l0aCB0aGUgc3RkY2FsbCBhdHRyaWJ1dGUsIG9yIHZpYQorCWNvZGUgY29tcGlsZWQgd2l0aCAtbXJ0ZCB3aGljaCBlZmZlY3RpdmVseSBtYWtlcyBzdGRjYWxsIHRoZQorCWRlZmF1bHQuCisKKwlUaGlzIGludHJvZHVjZXMgRkZJX1NURENBTEwsIEZGSV9USElTQ0FMTCwgYW5kIEZGSV9GQVNUQ0FMTCBvbgorCW5vbi1XaW5kb3dzIHg4Ni0zMiBwbGF0Zm9ybXMsIGFzIG5vbi1kZWZhdWx0IGNhbGxpbmcgY29udmVudGlvbnMuCisKKwkqIE1ha2VmaWxlLmFtOiBDb21waWxlIGluIHNyYy94ODYvd2luMzIuUyBvbiBub24tV2luZG93cyB4ODYtMzIuCisJKiBzcmMveDg2L2ZmaXRhcmdldC5oOiBBZGQgRkZJX1NURENBTEwsIEZGSV9USElTQ0FMTCwgYW5kCisJRkZJX0ZBU1RDQUxMIG9uIG5vbi1XaW5kb3dzIHg4Ni0zMi4gIEluY3JlYXNlIHRyYW1wb2xpbmUgc2l6ZSB0bworCWFjY29tb2RhdGUgdGhlc2UgY2FsbGluZyBjb252ZW50aW9ucywgYW5kIHVuaWZ5IHNvbWUgaWZkZWZmZXJ5LgorCSogc3JjL3g4Ni9mZmkuYzogQWRkIHN1cHBvcnQgZm9yIEZGSV9TVERDQUxMLCBGRklfVEhJU0NBTEwsIGFuZAorCUZGSV9GQVNUQ0FMTCBvbiBub24tV2luZG93cyB4ODYtMzIgcGxhdGZvcm1zOyB1cGRhdGUgaWZkZWZmZXJ5LgorCSogc3JjL3g4Ni93aW4zMi5TOiBTdXBwb3J0IGNvbXBpbGluZyBvbiBub24tV2luZG93cyB4ODYtMzIKKwlwbGF0Zm9ybXMuICBPbiB0aG9zZSBwbGF0Zm9ybXMsIGF2b2lkIHJlZGVmaW5pbmcgdGhlIFNZU1Ygc3ltYm9scworCWFscmVhZHkgcHJvdmlkZWQgYnkgc3JjL3g4Ni9zeXN2LlMuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9zdGRjYWxsLmM6IFJ1biBvbiBub24tV2luZG93cy4KKwkjZGVmaW5lIF9fc3RkY2FsbCBpZiBuZWVkZWQuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV90aGlzY2FsbC5jOiBSdW4gb24gbm9uLVdpbmRvd3MuCisJI2RlZmluZSBfX2Zhc3RjYWxsIGlmIG5lZWRlZC4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mYXN0dGhpczFfd2luMzIuYzogUnVuIG9uIG5vbi1XaW5kb3dzLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zhc3R0aGlzMl93aW4zMi5jOiBEaXR0by4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mYXN0dGhpczNfd2luMzIuYzogRGl0dG8uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbWFueTJfd2luMzIuYzogRGl0dG8uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbWFueV93aW4zMi5jOiBEaXR0by4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJsZW4yX3dpbjMyLmM6IERpdHRvLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmxlbl93aW4zMi5jOiBEaXR0by4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3QxX3dpbjMyLmM6IERpdHRvLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDJfd2luMzIuYzogRGl0dG8uCisKKzIwMTQtMDMtMTYgIEpvc2ggVHJpcGxldHQgIDxqb3NoQGpvc2h0cmlwbGV0dC5vcmc+CisKKwkqIHByZXBfY2lmLmM6IFJlbW92ZSB1bm5lY2Vzc2FyeSBpZmRlZiBmb3IgWDg2X1dJTjMyLgorCWZmaV9wcmVwX2NpZl9jb3JlIGhhZCBhIHNwZWNpYWwgY2FzZSBmb3IgWDg2X1dJTjMyLCBjaGVja2luZyBmb3IKKwlGRklfVEhJU0NBTEwgaW4gYWRkaXRpb24gdG8gdGhlIEZGSV9GSVJTVF9BQkktdG8tRkZJX0xBU1RfQUJJCisJcmFuZ2UgYmVmb3JlIHJldHVybmluZyBGRklfQkFEX0FCSS4gIEhvd2V2ZXIsIG9uIFg4Nl9XSU4zMiwKKwlGRklfVEhJU0NBTEwgYWxyZWFkeSBmYWxscyBpbiB0aGF0IHJhbmdlLCBtYWtpbmcgdGhlIHNwZWNpYWwgY2FzZQorCXVubmVjZXNzYXJ5LiAgUmVtb3ZlIGl0LgorCisyMDE0LTAzLTE2ICBKb3NoIFRyaXBsZXR0ICA8am9zaEBqb3NodHJpcGxldHQub3JnPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9zdGRjYWxsLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfdGhpc2NhbGwuYzogUmVtb3ZlIGZyYWdpbGUgc3RhY2sKKwlwb2ludGVyIGNoZWNrcy4gIFRoZXNlIGZpbGVzIGluY2x1ZGVkIGlubGluZSBhc3NlbWJseSB0byBzYXZlIHRoZQorCXN0YWNrIHBvaW50ZXIgYmVmb3JlIGFuZCBhZnRlciB0aGUgY2FsbCwgYW5kIGNvbXBhcmUgdGhlIHZhbHVlcy4KKwlIb3dldmVyLCBjb21waWxlcnMgY2FuIGFuZCBkbyBsZWF2ZSB0aGUgc3RhY2sgaW4gZGlmZmVyZW50IHN0YXRlcworCWZvciB0aGVzZSB0d28gcGllY2VzIG9mIGlubGluZSBhc3NlbWJseSwgc3VjaCBhcyBieSBzYXZpbmcgYQorCXRlbXBvcmFyeSB2YWx1ZSBvbiB0aGUgc3RhY2sgYWNyb3NzIHRoZSBjYWxsOyBvYnNlcnZlZCB3aXRoIGdjYworCS1PcywgYW5kIHZlcmlmaWVkIGFzIHNwdXJpb3VzIHRocm91Z2ggY2FyZWZ1bCBpbnNwZWN0aW9uIG9mCisJZGlzYXNzZW1ibHkuCisKKzIwMTQtMDMtMTYgIEpvc2ggVHJpcGxldHQgIDxqb3NoQGpvc2h0cmlwbGV0dC5vcmc+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9tYW55LmM6IEF2b2lkIHNwdXJpb3VzIGZhaWx1cmUgZHVlIHRvCisJZXhjZXNzIGZsb2F0aW5nLXBvaW50IHByZWNpc2lvbi4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9tYW55X3dpbjMyLmM6IERpdHRvLgorCisyMDE0LTAzLTE2ICBKb3NoIFRyaXBsZXR0IDxqb3NoQGpvc2h0cmlwbGV0dC5vcmc+CisKKwkqIGxpYnRvb2wtbGRmbGFnczogUmUtYWRkLgorCisyMDE0LTAzLTE2ICBKb3NoIFRyaXBsZXR0IDxqb3NoQGpvc2h0cmlwbGV0dC5vcmc+CisKKwkqIE1ha2VmaWxlLmluLCBhY2xvY2FsLm00LCBjb21waWxlLCBjb25maWcuZ3Vlc3MsIGNvbmZpZy5zdWIsCisJY29uZmlndXJlLCBkZXBjb21wLCBpbmNsdWRlL01ha2VmaWxlLmluLCBpbnN0YWxsLXNoLAorCWxpYnRvb2wtbGRmbGFncywgbHRtYWluLnNoLCBtNC9saWJ0b29sLm00LCBtNC9sdG9wdGlvbnMubTQsCisJbTQvbHRzdWdhci5tNCwgbTQvbHR2ZXJzaW9uLm00LCBtNC9sdH5vYnNvbGV0ZS5tNCwKKwltYW4vTWFrZWZpbGUuaW4sIG1kYXRlLXNoLCBtaXNzaW5nLCB0ZXN0c3VpdGUvTWFrZWZpbGUuaW46IERlbGV0ZQorCWF1dG9nZW5lcmF0ZWQgZmlsZXMgZnJvbSB2ZXJzaW9uIGNvbnRyb2wuCisJKiAuZ2l0aWdub3JlOiBBZGQgYXV0b2dlbmVyYXRlZCBmaWxlcy4KKwkqIGF1dG9nZW4uc2g6IE5ldyBzY3JpcHQgdG8gZ2VuZXJhdGUgdGhlIGF1dG9nZW5lcmF0ZWQgZmlsZXMuCisJKiBSRUFETUU6IERvY3VtZW50IHJlcXVpcmVtZW50IHRvIHJ1biBhdXRvZ2VuLnNoIHdoZW4gYnVpbGRpbmcKKwlkaXJlY3RseSBmcm9tIHZlcnNpb24gY29udHJvbC4KKwkqIC50cmF2aXMueW1sOiBSdW4gYXV0b2dlbi5zaAorCisyMDE0LTAzLTE0ICBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KKworCSogY29uZmlndXJlLCBNYWtlZmlsZS5pbjogUmVidWlsdC4KKworMjAxNC0wMy0xMCAgTWlrZSBIb21tZXkgPG1oK21vemlsbGFAZ2xhbmRpdW0ub3JnPgorCisJKiBjb25maWd1cmUuYWM6IEFsbG93IGJ1aWxkaW5nIGZvciBtaXBzZWwgd2l0aCBBbmRyb2lkIE5ESyByOC4KKwkqIE1ha2VmaWxlLmFtIChBTV9NQUtFRkxBR1MpOiBSZXBsYWNlIGRvdWJsZSBxdW90ZXMgd2l0aCBzaW5nbGUKKwlxdW90ZXMuCisKKzIwMTQtMDMtMTAgIExhbmRyeSBCcmV1aWwgPGxhbmRyeUBvcGVuYnNkLm9yZz4KKworCSogY29uZmlndXJlLmFjOiBFbnN1cmUgdGhlIGxpbmtlciBzdXBwb3J0cyBAdW53aW5kIHNlY3Rpb25zIGluIGxpYmZmaS4KKworMjAxNC0wMy0wMSAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQG1veGllbG9naWMuY29tPgorCisJKiBNYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IFJlcGxhY2Ugb2xkIHNjcmlwdHMgd2l0aAorCWdlbmVyYXRlLWRhcndpbi1zb3VyY2UtYW5kLWhlYWRlcnMucHkuCisJKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KKworMjAxNC0wMi0yOCAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQG1veGllbG9naWMuY29tPgorCisJKiBNYWtlZmlsZS5hbSAoQU1fQ0ZMQUdTKTogUmVpbnRyb2R1Y2UgbWlzc2luZyAtREZGSV9ERUJVRyBmb3IKKwktLWVuYWJsZS1kZWJ1ZyBidWlsZHMuCisJKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KKworMjAxNC0wMi0yOCAgTWFrb3RvIEthdG8gIDxtX2thdG9AZ2EyLnNvLW5ldC5uZS5qcD4KKworCSogc3JjL2Nsb3N1cmVzLmM6IEZpeCBidWlsZCBmYWlsdXJlIHdoZW4gdXNpbmcgY2xhbmcgZm9yIEFuZHJvaWQuCisKKzIwMTQtMDItMjggIE1hcmNpbiBXb2pkeXIgIDx3b2pkeXJAZ21haWwuY29tPgorCisJKiBsaWJmZmkucGMuaW4gKHRvb2xleGVjbGliZGlyKTogdXNlIC1MJHt0b29sZXhlY2xpYmRpcn0gaW5zdGVhZAorCW9mIC1MJHtsaWJkaXJ9LgorCisyMDE0LTAyLTI4ICBQYXVsbyBQaXphcnJvICA8cGF1bG8ucGl6YXJyb0BnbWFpbC5jb20+CisKKwkqIHNyYy9iZmluL3N5c3YuUzogQ2FsbGluZyBmdW5jdGlvbnMgaW4gc2hhcmVkIGxpYnJhcmllcyByZXF1aXJlcworCWNvbnNpZGVyaW5nIHRoZSBHT1QuCisKKzIwMTQtMDItMjggIEpvc2ggVHJpcGxldHQgIDxqb3NoQGpvc2h0cmlwbGV0dC5vcmc+CisKKwkqIHNyYy94ODYvZmZpNjQuYyAoY2xhc3NpZnlfYXJndW1lbnQpOiBIYW5kbGUgY2FzZSB3aGVyZQorCUZGSV9UWVBFX0xPTkdET1VCTEUgPT0gRkZJX1RZUEVfRE9VQkxFLgorCisyMDE0LTAyLTI4ICBBbnRob255IEdyZWVuICA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CisKKwkqIGx0bWFpbi5zaDogR2VuZXJhdGUgd2l0aCBsaWJ0b29sLTIuNC4yLjQxOC4KKwkqIG00L2xpYnRvb2wubTQsIG00L2x0b3B0aW9ucy5tNCwgbTQvbHR2ZXJzaW9uLm00OiBEaXR0by4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKworMjAxNC0wMi0yOCAgRG9taW5payBWb2d0ICA8dm9ndEBsaW51eC52bmV0LmlibS5jb20+CisKKwkqIGNvbmZpZ3VyZS5hYyAoQUNfQVJHX0VOQUJMRSBzdHJ1Y3QpOiBGaXggdHlwbyBpbiBoZWxwCisJbWVzc2FnZS4KKwkoQUNfQVJHX0VOQUJMRSByYXdfYXBpKTogRGl0dG8uCisJKiBjb25maWd1cmUsIGZmaWNvbmZpZy5oLmluOiBSZWJ1aWx0LgorCisyMDE0LTAyLTI4ICBXaWxsIE5ld3RvbiAgPHdpbGwubmV3dG9uQGxpbmFyby5vcmc+CisKKwkqIHNyYy9hcm0vc3lzdi5TOiBJbml0aWFsaXplIElQIHJlZ2lzdGVyIHdpdGggRlAuCisKKzIwMTQtMDItMjggIFl1ZmVuZyBaaGFuZyAgPHl1ZmVuZy56aGFuZ0Bhcm0uY29tPgorCisJKiBzcmMvYWFyY2g2NC9zeXN2LlMgKGZmaV9jbG9zdXJlX1NZU1YpOiBVc2UgeDI5IGFzIHRoZQorCW1haW4gQ0ZBIHJlZzsgdXBkYXRlIGNmaV9yZWxfb2Zmc2V0LgorCisyMDE0LTAyLTE1ICBNYXJjdXMgQ29tc3RlZHQgIDxtYXJjdXNAbWMucHAuc2U+CisKKwkqIHNyYy9wb3dlcnBjL2ZmaV9saW51eDY0LmMsIHNyYy9wb3dlcnBjL2xpbnV4NjRfY2xvc3VyZS5TOiBSZW1vdmUKKwlhc3N1bXB0aW9uIG9uIGNvbnRlbnRzIG9mIHIxMSBpbiBjbG9zdXJlLgorCisyMDE0LTAyLTA5ICBIZWloZXIgIDxyQGhldi5jYz4KKworCSogc3JjL21pcHMvbjMyLlM6IEZpeCBjYWxsIGZsb2F0aW5nIHBvaW50IHZhIGZ1bmN0aW9uLgorCisyMDE0LTAxLTIxICBaYWNoYXJ5IFdhbGRvd3NraSAgPHphY2hAd2FsZG93c2tpLm1lPgorCisJKiBzcmMvYWFyY2g2NC9mZmkuYzogRml4IG1pc3Npbmcgc2VtaWNvbG9ucyBvbiBhc3NlcnRpb25zIHVuZGVyCisJZGVidWcgbW9kZS4KKworMjAxMy0xMi0zMCAgWmFjaGFyeSBXYWxkb3dza2kgIDx6YWNoQHdhbGRvd3NraS5tZT4KKworCSogLmdpdGlnbm9yZTogRXhjbHVkZSBkYXJ3aW5fKiBnZW5lcmF0ZWQgc291cmNlIGFuZCBidWlsZF8qIHRyZWVzLgorCSogc3JjL2FhcmNoNjQvZmZpLmMsIHNyYy9hcm0vZmZpLmMsIHNyYy94ODYvZmZpLmM6IEluaGliaXQgQ2xhbmcKKwlwcmV2aW91cyBwcm90b3R5cGUgd2FybmluZ3MuCisJKiBzcmMvYXJtL2ZmaS5jOiBQcmV2ZW50IE5VTEwgZGVyZWZlcmVuY2UsIGZpeCBzaG9ydCB0eXBlIHdhcm5pbmcKKwkqIHNyYy9kbG1hbGxvYy5jOiBGaXggd2FybmluZ3MgZnJvbSBzZXRfc2VnbWVudF9mbGFncyByZXR1cm4gdHlwZSwKKwlhbmQgdGhlIG5hdGl2ZSB1c2Ugb2Ygc2l6ZV90IGZvciBtYWxsb2Mgb24gcGxhdGZvcm1zCisJKiBzcmMvYXJtL3N5c3YuUzogVXNlIHVuaWZpZWQgc3ludGF4LiBDbGFuZyBjbGVhbi11cHMgZm9yCisJQVJNX0ZVTkNfU1RBUlQuCisJKiBnZW5lcmF0ZS1vc3gtc291cmNlLWFuZC1oZWFkZXJzLnB5OiBSZW1vdmUuCisJKiBidWlsZC1pb3Muc2g6IFJlbW92ZS4KKwkqIGxpYmZmaS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBSZWJ1aWxkIHRhcmdldHMuIEluY2x1ZGUKKwl4ODZfNjQrYWFyY2g2NCBwaWVjZXMgaW4gbGlicmFyeS4gIEV4cG9ydCBoZWFkZXJzIHByb3Blcmx5LgorCSogc3JjL3g4Ni9mZmk2NC5jOiBNb3JlIENsYW5nIHdhcm5pbmcgY2xlYW4tdXBzLgorCSogc3JjL2Nsb3N1cmVzLmMgKG9wZW5fdGVtcF9leGVjX2ZpbGVfZGlyKTogVXNlIHNpemVfdC4KKwkqIHNyYy9wcmVwX2NpZi5jIChmZmlfcHJlcF9jaWZfY29yZSk6IENhc3QgQUxJR04gcmVzdWx0LgorCSogc3JjL2FhcmNoNjQvc3lzdi5TOiBVc2UgQ05BTUUgZm9yIGdsb2JhbCBzeW1ib2xzLiAgT25seSB1c2UKKwkuc2l6ZSBmb3IgRUxGIHRhcmdldHMuCisJKiBzcmMvYWFyY2g2NC9mZmkuYzogQ2xlYW4gdXAgZm9yIGRvdWJsZSA9PSBsb25nIGRvdWJsZS4gIENsZWFuIHVwCisJZnJvbSBDbGFuZyB3YXJuaW5ncy4gIFVzZSBDbGFuZyBjYWNoZSBpbnZhbGlkYXRpb24gYnVpbHRpbi4gIFVzZQorCXNpemVfdCBpbiBwbGFjZSBvZiB1bnNpZ25lZCBpbiBtYW55IHBsYWNlcy4gIEFjY29tbW9kYXRlIGZvcgorCWRpZmZlcmVuY2VzIGluIEFwcGxlIEFBcmNoNjQgQUJJLgorCisyMDEzLTEyLTAyICBEYW5pZWwgUm9kcsOtZ3VleiBUcm9pdGnDsW8gIDxkcm9kcmlndWV6dHJvaXRpbm9AeWFob28uZXM+CisKKwkqIGdlbmVyYXRlLWRhcndpbi1zb3VyY2UtYW5kLWhlYWRlcnMucHk6IENsZWFuIHVwLCBtb2Rlcm5pemUsCisJbWVyZ2VkIHZlcnNpb24gb2YgcHJldmlvdXMgc2NyaXB0cy4KKworMjAxMy0xMS0yMSAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQG1veGllbG9naWMuY29tPgorCisJKiBjb25maWd1cmUsIE1ha2VmaWxlLmluLCBpbmNsdWRlL01ha2VmaWxlLmluLCBpbmNsdWRlL2ZmaS5oLmluLAorCW1hbi9NYWtlZmlsZS5pbiwgdGVzdHN1aXRlL01ha2VmaWxlLmluLCBmZmljb25maWcuaC5pbjogUmVidWlsdC4KKworMjAxMy0xMS0yMSAgQWxhbiBNb2RyYSAgPGFtb2RyYUBnbWFpbC5jb20+CisKKwkqIE1ha2VmaWxlLmFtIChFWFRSQV9ESVNUKTogQWRkIG5ldyBzcmMvcG93ZXJwYyBmaWxlcy4KKwkobm9kaXN0X2xpYmZmaV9sYV9TT1VSQ0VTIDxQT1dFUlBDLCBQT1dFUlBDX0ZSRUVCU0Q+KTogTGlrZXdpc2UuCisJKiBjb25maWd1cmUuYWMgKEhBVkVfTE9OR19ET1VCTEVfVkFSSUFOVCk6IERlZmluZSBmb3IgcG93ZXJwYy4KKwkqIGluY2x1ZGUvZmZpLmguaW4gKGZmaV9wcmVwX3R5cGVzKTogRGVjbGFyZS4KKwkqIHNyYy9wcmVwX2NpZi5jIChmZmlfcHJlcF9jaWZfY29yZSk6IENhbGwgZmZpX3ByZXBfdHlwZXMuCisJKiBzcmMvdHlwZXMuYyAoRkZJX05PTkNPTlNUX1RZUEVERUYpOiBEZWZpbmUgYW5kIHVzZSBmb3IKKwlIQVZFX0xPTkdfRE9VQkxFX1ZBUklBTlQuCisJKiBzcmMvcG93ZXJwYy9mZmlfcG93ZXJwYy5oOiBOZXcgZmlsZS4KKwkqIHNyYy9wb3dlcnBjL2ZmaS5jOiBTcGxpdCBpbnRvLi4KKwkqIHNyYy9wb3dlcnBjL2ZmaV9zeXN2LmM6IC4ubmV3IGZpbGUsIGFuZC4uCisJKiBzcmMvcG93ZXJwYy9mZmlfbGludXg2NC5jOiAuLm5ldyBmaWxlLCByZXdyaXRpbmcgcGFydHMuCisJKiBzcmMvcG93ZXJwYy9mZml0YXJnZXQuaCAoZW51bSBmZmlfYWJpKTogUmV3cml0ZSBwb3dlcnBjIEFCSQorCXNlbGVjdGlvbiBhcyBiaXRzIGNvbnRyb2xsaW5nIGZlYXR1cmVzLgorCSogc3JjL3Bvd2VycGMvbGludXg2NC5TOiBGb3IgY29uc2lzdGVuY3ksIHVzZSBQT1dFUlBDNjQgcmF0aGVyCisJdGhhbiBfX3Bvd2VycGM2NF9fLgorCSogc3JjL3Bvd2VycGMvbGludXg2NF9jbG9zdXJlLlM6IExpa2V3aXNlLgorCSogc3JjL3Bvd2VycGMvcHBjX2Nsb3N1cmUuUzogTGlrZXdpc2UuICBNb3ZlIC5ub3RlLkZOVS1zdGFjaworCWluc2lkZSBndWFyZC4KKwkqIHNyYy9wb3dlcnBjL3N5c3YuUzogTGlrZXdpc2UuCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisJKiBmZmljb25maWcuaC5pbjogUmVnZW5lcmF0ZS4KKwkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCisyMDEzLTExLTIwICBBbGFuIE1vZHJhICA8YW1vZHJhQGdtYWlsLmNvbT4KKworCSogc3JjL3Bvd2VycGMvZmZpLmMgKGZmaV9wcmVwX2NpZl9tYWNoZGVwX2NvcmUpOiBVc2UKKwlOVU1fRlBSX0FSR19SRUdJU1RFUlM2NCBhbmQgTlVNX0dQUl9BUkdfUkVHSVNURVJTNjQgbm90IHRoZWlyCisJMzItYml0IHZlcnNpb25zIGZvciA2NC1iaXQgY29kZS4KKwkqIHNyYy9wb3dlcnBjL2xpbnV4NjRfY2xvc3VyZS5TOiBEb24ndCB1c2UgdGhlIHJldHVybiB2YWx1ZSBhcmVhCisJYXMgYSBwYXJhbWV0ZXIgc2F2ZSBhcmVhIG9uIEVMRnYyLgorCisyMDEzLTExLTE4ICBJYWluIFNhbmRvZSAgPGlhaW5AY29kZXNvdXJjZXJ5LmNvbT4KKworCSogc3JjL3Bvd2VycGMvZGFyd2luLlMgKEVIKTogQ29ycmVjdCB1c2Ugb2YgcGNyZWwgRkRFIGVuY29kaW5nLgorCSogc3JjL3Bvd2VycGMvZGFyd2luX2Nsb3N1cmUuUyAoRUgpOiBMaWtld2lzZS4gTW9kZXJuaXNlIHBpY2Jhc2UKKwlsYWJlbHMuCisKKzIwMTMtMTEtMTggIEFudGhvbnkgR3JlZW4gIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KKworCSogc3JjL2FybS9mZmkuYyAoZmZpX2NhbGwpOiBIb2lzdCBkZWNsYXJhdGlvbiBvZiB0ZW1wIHRvIHRvcCBvZgorCWZ1bmN0aW9uLgorCSogc3JjL2FybS9mZmkuYyAoZmZpX2Nsb3N1cmVfaW5uZXIpOiBNb2Rlcml6ZSBmdW5jdGlvbiBkZWNsYXJhdGlvbgorCXRvIGFwcGVhc2UgY29tcGlsZXIuCisJVGhhbmtzIGZvciBHcmVnb3J5IFAuIFNtaXRoIDxncmVnQGtyeXB0by5vcmc+LgorCisyMDEzLTExLTE4ICBBbnRob255IEdyZWVuICA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CisKKwkqIFJFQURNRSAodGVzdGVkKTogTWVudGlvbiBQb3dlclBDIEVMRnYyLgorCisyMDEzLTExLTE2ICBBbGFuIE1vZHJhICA8YW1vZHJhQGdtYWlsLmNvbT4KKworCSogc3JjL3Bvd2VycGMvcHBjX2Nsb3N1cmUuUzogTW92ZSBlcnJhbnQgI2VuZGlmIHRvIHdoZXJlIGl0IGJlbG9uZ3MuCisJRG9uJ3QgYmwgLkx1aW50MTI4LgorCisyMDEzLTExLTE2ICBBbGFuIE1vZHJhICA8YW1vZHJhQGdtYWlsLmNvbT4KKworCSogc3JjL3Bvd2VycGMvZmZpLmMgKGZmaV9wcmVwX2NpZl9tYWNoZGVwX2NvcmUpOiBVc2UgI2lmIF9DQUxMX0VMRgorCXRlc3QgdG8gc2VsZWN0IHBhcmFtZXRlciBzYXZlIHNpemluZyBmb3IgRUxGdjIgdnMuIEVMRnYxLgorCSogc3JjL3Bvd2VycGMvZmZpdGFyZ2V0LmggKEZGSV9WMl9UWVBFX0ZMT0FUX0hPTU9HLAorCUZGSV9WMl9UWVBFX0RPVUJMRV9IT01PRywgRkZJX1YyX1RZUEVfU01BTExfU1RSVUNUKTogRGVmaW5lLgorCShGRklfVFJBTVBPTElORV9TSVpFKTogRGVmaW5lIHZhcmlhbnQgZm9yIEVMRnYyLgorCSogc3JjL3Bvd2VycGMvZmZpLmMgKEZMQUdfQVJHX05FRURTX1BTQVZFKTogRGVmaW5lLgorCShkaXNjb3Zlcl9ob21vZ2VuZW91c19hZ2dyZWdhdGUpOiBOZXcgZnVuY3Rpb24uCisJKGZmaV9wcmVwX2FyZ3M2NCk6IEFkanVzdCBzdGFydCBvZiBwYXJhbSBzYXZlIGFyZWEgZm9yIEVMRnYyLgorCUhhbmRsZSBob21vZ2Vub3VzIGZsb2F0aW5nIHBvaW50IHN0cnVjdCBwYXJtcy4KKwkoZmZpX3ByZXBfY2lmX21hY2hkZXBfY29yZSk6IEFkanVzdCBzcGFjZSBjYWxjdWxhdGlvbiBmb3IgRUxGdjIuCisJSGFuZGxlIEVMRnYyIHJldHVybiB2YWx1ZXMuICBTZXQgRkxBR19BUkdfTkVFRFNfUFNBVkUuICBIYW5kbGUKKwlob21vZ2Vub3VzIGZsb2F0aW5nIHBvaW50IHN0cnVjdHMuCisJKGZmaV9jYWxsKTogSW5jcmVhc2Ugc2l6ZSBvZiBzbXN0X2J1ZmZlciBmb3IgRUxGdjIuICBIYW5kbGUgRUxGdjIuCisJKGZsdXNoX2ljYWNoZSk6IENvbXBpbGUgZm9yIEVMRnYyLgorCShmZmlfcHJlcF9jbG9zdXJlX2xvYyk6IFNldCB1cCBFTEZ2MiB0cmFtcG9saW5lLgorCShmZmlfY2xvc3VyZV9oZWxwZXJfTElOVVg2NCk6IERvbid0IHJldHVybiBhbGwgc3RydWN0cyBkaXJlY3RseQorCXRvIGNhbGxlci4gIEhhbmRsZSBob21vZ2Vub3VzIGZsb2F0aW5nIHBvaW50IHN0cnVjdHMuICBIYW5kbGUKKwlFTEZ2MiBzdHJ1Y3QgcmV0dXJuIHZhbHVlcy4KKwkqIHNyYy9wb3dlcnBjL2xpbnV4NjQuUyAoZmZpX2NhbGxfTElOVVg2NCk6IFNldCB1cCByMiBmb3IKKwlFTEZ2Mi4gIEFkanVzdCB0b2Mgc2F2ZSBsb2NhdGlvbi4gIENhbGwgZnVuY3Rpb24gcG9pbnRlciB1c2luZworCXIxMi4gIEhhbmRsZSBGTEFHX1JFVFVSTlNfU01TVC4gIERvbid0IHByZWRpY3QgYnJhbmNoZXMuCisJKiBzcmMvcG93ZXJwYy9saW51eDY0X2Nsb3N1cmUuUyAoZmZpX2Nsb3N1cmVfTElOVVg2NCk6IFNldCB1cCByMgorCWZvciBFTEZ2Mi4gIERlZmluZSBFTEZ2MiB2ZXJzaW9ucyBvZiBTVEFDS0ZSQU1FLCBQQVJNU0FWRSwgYW5kCisJUkVUVkFMLiAgSGFuZGxlIHBvc3NpYmx5IG1pc3NpbmcgcGFyYW1ldGVyIHNhdmUgYXJlYS4gIEhhbmRsZQorCUVMRnYyIHJldHVybiB2YWx1ZXMuCisJKC5ub3RlLkdOVS1zdGFjayk6IE1vdmUgaW5zaWRlIG91dGVyICNpZmRlZi4KKworMjAxMy0xMS0xNiAgQWxhbiBNb2RyYSAgPGFtb2RyYUBnbWFpbC5jb20+CisKKwkqIHNyYy9wb3dlcnBjL2ZmaS5jIChmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IFJldmVydCAyMDEzLTAyLTA4CisJY2hhbmdlLiAgRG8gbm90IGNvbnN1bWUgYW4gaW50IGFyZyB3aGVuIHJldHVybmluZyBhIHNtYWxsIHN0cnVjdAorCWZvciBGRklfU1lTViBBQkkuCisJKGZmaV9jYWxsKTogT25seSB1c2UgYm91bmNlIGJ1ZmZlciB3aGVuIEZMQUdfUkVUVVJOU19TTVNULgorCVByb3Blcmx5IGNvcHkgYm91bmNlIGJ1ZmZlciB0byBkZXN0aW5hdGlvbi4KKwkqIHNyYy9wb3dlcnBjL3N5c3YuUzogUmV2ZXJ0IDIwMTMtMDItMDggY2hhbmdlLgorCSogc3JjL3Bvd2VycGMvcHBjX2Nsb3N1cmUuUzogUmVtb3ZlIHN0cmF5ICcrJy4KKworMjAxMy0xMS0xNiAgQWxhbiBNb2RyYSAgPGFtb2RyYUBnbWFpbC5jb20+CisKKwkqIHNyYy9wb3dlcnBjL2ZmaS5jIChmZmlfcHJlcF9hcmdzNjQpOiBBbGlnbiBzdHJ1Y3QgcGFyYW1ldGVycworCWFjY29yZGluZyB0byBfX1NUUlVDVF9QQVJNX0FMSUdOX18uCisJKGZmaV9wcmVwX2NpZl9tYWNoZGVwX2NvcmUpOiBMaWtld2lzZS4KKwkoZmZpX2Nsb3N1cmVfaGVscGVyX0xJTlVYNjQpOiBMaWtld2lzZS4KKworMjAxMy0xMS0xNiAgQWxhbiBNb2RyYSAgPGFtb2RyYUBnbWFpbC5jb20+CisKKwkqIHNyYy9wb3dlcnBjL2xpbnV4NjQuUyAoZmZpX2NhbGxfTElOVVg2NCk6IFR3ZWFrIHJlc3RvcmUgb2YgcjI4LgorCSgubm90ZS5HTlUtc3RhY2spOiBNb3ZlIGluc2lkZSBvdXRlciAjaWZkZWYuCisJKiBzcmMvcG93ZXJwYy9saW51eDY0X2Nsb3N1cmUuUyAoU1RBQ0tGUkFNRSwgUEFSTVNBVkUsCisJUkVUVkFMKTogRGVmaW5lIGFuZCB1c2UgdGhyb3VnaG91dC4KKwkoZmZpX2Nsb3N1cmVfTElOVVg2NCk6IFNhdmUgZnBycyBiZWZvcmUgYnV5aW5nIHN0YWNrLgorCSgubm90ZS5HTlUtc3RhY2spOiBNb3ZlIGluc2lkZSBvdXRlciAjaWZkZWYuCisKKzIwMTMtMTEtMTYgIEFsYW4gTW9kcmEgIDxhbW9kcmFAZ21haWwuY29tPgorCisJKiBzcmMvcG93ZXJwYy9mZml0YXJnZXQuaCAoRkZJX1RBUkdFVF9TUEVDSUZJQ19WQVJJQURJQyk6IERlZmluZS4KKwkoRkZJX0VYVFJBX0NJRl9GSUVMRFMpOiBEZWZpbmUuCisJKiBzcmMvcG93ZXJwYy9mZmkuYyAoZmZpX3ByZXBfYXJnczY0KTogU2F2ZSBmcHJzIGFzIHBlciB0aGUKKwlBQkksIG5vdCB0byBib3RoIGZwciBhbmQgcGFyYW0gc2F2ZSBhcmVhLgorCShmZmlfcHJlcF9jaWZfbWFjaGRlcF9jb3JlKTogUmVuYW1lZCBmcm9tIGZmaV9wcmVwX2NpZl9tYWNoZGVwLgorCUtlZXAgaW5pdGlhbCBmbGFncy4gIEZvcm1hdHRpbmcuICBSZW1vdmUgZGVhZCBGRklfTElOVVhfU09GVF9GTE9BVAorCWNvZGUuCisJKGZmaV9wcmVwX2NpZl9tYWNoZGVwLCBmZmlfcHJlcF9jaWZfbWFjaGRlcF92YXIpOiBOZXcgZnVuY3Rpb25zLgorCShmZmlfY2xvc3VyZV9oZWxwZXJfTElOVVg2NCk6IFBhc3MgZmxvYXRpbmcgcG9pbnQgYXMgcGVyIEFCSSwKKwlub3QgdG8gYm90aCBmcHIgYW5kIHBhcmFtZXRlciBzYXZlIGFyZWFzLgorCisJKiBsaWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kb3VibGVfdmEuYyAobWFpbik6IENvcnJlY3QKKwlmdW5jdGlvbiBjYXN0IGFuZCBkb24ndCBjYWxsIGZmaV9wcmVwX2NpZi4KKwkqIGxpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGVfdmEuYyAobWFpbik6IExpa2V3aXNlLgorCisyMDEzLTExLTE1ICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KKworCSogZG9jL2xpYmZmaS50ZXhpIChDbG9zdXJlIEV4YW1wbGUpOiBGaXggdGhlIHNhbXBsZSBjb2RlLgorCSogZG9jL2xpYmZmaS5pbmZvLCBkb2Mvc3RhbXAtdnRpLCBkb2MvdmVyc2lvbi50ZXhpOiBSZWJ1aWx0LgorCisyMDEzLTExLTE1ICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3ZhX3N0cnVjdDEuYyAobWFpbik6IEZpeCBicm9rZW4gdGVzdC4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWludF92YS5jIChjbHNfcmV0X1RfZm4pOiBMaWtld2lzZQorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zdHJ1Y3RfdmExLmMgKHRlc3RfZm4pOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC92YV8xLmMgKG1haW4pOiBMaWtld2lzZS4KKworMjAxMy0xMS0xNCAgRGF2aWQgU2NobmVpZGVyICA8ZGF2aWQuc2NobmVpZGVyQGJpdmFiLmRlPgorCisJKiBzcmMvYXJtL2ZmaS5jOiBGaXggcmVnaXN0ZXIgYWxsb2NhdGlvbiBmb3IgbWl4ZWQgZmxvYXQgYW5kCisJZG91Ymxlcy4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbWFueV9taXhlZF9mbG9hdF9kb3VibGUuYzogVGVzdGNhc2UKKwlmb3IgbWFueSBtaXhlZCBmbG9hdCBhbmQgZG91YmxlIGFyZ3VtZW50cy4KKworMjAxMy0xMS0xMyAgQWxhbiBNb2RyYSAgPGFtb2RyYUBnbWFpbC5jb20+CisKKwkqIGRvYy9saWJmZmkudGV4aSAoU2ltcGxlIEV4YW1wbGUpOiBDb3JyZWN0IGV4YW1wbGUgY29kZS4KKwkqIGRvYy9saWJmZmkuaW5mbywgZG9jL3N0YW1wLXZ0aSwgZG9jL3ZlcnNpb24udGV4aTogUmVidWlsdC4KKworMjAxMy0xMS0xMyAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQG1veGllbG9naWMuY29tPgorCisJKiBpbmNsdWRlL2ZmaV9jb21tb24uaDogUmVzcGVjdCBIQVZFX0FMTE9DQV9IIGZvciBHTlUgY29tcGlsZXIKKwliYXNlZCBidWlsZC4gKFRoYW5rcyB0byB0bXIxMTExMTYgb24gZ2l0aHViKQorCisyMDEzLTExLTA5ICBBbnRob255IEdyZWVuICA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CisKKwkqIG00L2xpYnRvb2wubTQ6IFJlZnJlc2guCisJKiBjb25maWd1cmUsIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgorCSogUkVBRE1FOiBBZGQgbW9yZSBub3RlcyBhYm91dCBuZXh0IHJlbGVhc2UuCisKKzIwMTMtMTEtMDkgIFNoaWdlaGFydSBUQUtFTk8gIDxzaGlnZUBpZWUubmlpdC5hYy5qcD4KKworCSogbTQvYXhfZ2NjX2FyY2hmbGFnLm00IChheF9nY2NfYXJjaCk6IERvbid0IHJlY29nbml6ZQorCVVsdHJhU1BBUkMtSUlpIGFzIHVsdHJhc3BhcmMzLgorCisyMDEzLTExLTA2ICBNYXJrIEtldHRlbmlzICA8a2V0dGVuaXNAZ251Lm9yZz4KKworCSogc3JjL3g4Ni9mcmVlYnNkLlMgKGZmaV9jYWxsX1NZU1YpOiBBbGlnbiB0aGUgc3RhY2sgcG9pbnRlciB0bworICAgICAgICAxNi1ieXRlcy4KKworMjAxMy0xMS0wNiAgS29uc3RhbnRpbiBCZWxvdXNvdiA8a2liQGZyZWVic2Qub3JnPgorCisJKiBzcmMveDg2L2ZyZWVic2QuUyAoZmZpX2Nsb3N1cmVfcmF3X1NZU1YpOiBNYXJrIHRoZSBhc3NlbWJsZXIKKwlzb3VyY2UgYXMgbm90IHJlcXVpcmluZyBleGVjdXRhYmxlIHN0YWNrLgorCisyMDEzLTExLTAyICBBbnRob255IEdyZWVuICA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CisKKwkqIGRvYy9saWJmZmkudGV4aSAoVGhlIEJhc2ljcyk6IENsYXJpZnkgcmV0dXJuIHZhbHVlIGJ1ZmZlciBzaXplCisJcmVxdWlyZW1lbnRzLiAgQWxzbywgTlVMTCByZXN1bHQgYnVmZmVyIHBvaW50ZXJzIGFyZSBubyBsb25nZXIKKwlzdXBwb3J0ZWQuCisJKiBkb2MvbGliZmZpLmluZm86IFJlYnVpbHQuCisKKzIwMTMtMTEtMDIgIE1pc2NoYSBKb25rZXIgIDxtam9ua2VyQHN5bm9wc3lzLmNvbT4KKworCSogTWFrZWZpbGUuYW0gKG5vZGlzdF9saWJmZmlfbGFfU09VUkNFUyk6IEZpeCBidWlsZCBlcnJvci4KKwkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgorCisyMDEzLTExLTAyICBEYXZpZCBTY2huZWlkZXIgIDxkYXZpZC5zY2huZWlkZXJAYml2YWIuZGU+CisKKwkqIHNyYy9hcm0vZmZpLmM6IG1vcmUgcm9idXN0IGFyZ3VtZW50IGhhbmRsaW5nIGZvciBjbG9zdXJlcyBvbiBhcm0gaGFyZGZsb2F0CisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbWFueV9taXhlZC5jOiBOZXcgZmlsZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbWFueV9taXhlZF9hcmdzLmM6IE1vcmUgdGVzdHMuCisKKzIwMTMtMTEtMDIgIFZpdGFseSBCdWRvdnNraQorCisJKiBzcmMveDg2L2ZmaS5jIChmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IERvbid0IGFsaWduIHN0YWNrIGZvciB3aW4zMi4KKworMjAxMy0xMC0yMyAgTWFyayBIIFdlYXZlciAgPG1od0BuZXRyaXMub3JnPgorCisJKiBzcmMvbWlwcy9mZmkuYzogRml4IGhhbmRsaW5nIG9mIHVpbnQzMl90IGFyZ3VtZW50cyBvbiB0aGUKKwlNSVBTIE4zMiBBQkkuCisKKzIwMTMtMTAtMTMgIFNhbmRyYSBMb29zZW1vcmUgIDxzYW5kcmFAY29kZXNvdXJjZXJ5LmNvbT4KKworCSogUkVBRE1FOiBBZGQgTmlvcyBJSSB0byB0YWJsZSBvZiBzdXBwb3J0ZWQgcGxhdGZvcm1zLgorCSogTWFrZWZpbGUuYW0gKEVYVFJBX0RJU1QpOiBBZGQgbmlvczIgZmlsZXMuCisJKG5vZGlzdF9saWJmZmlfbGFfU09VUkNFUyk6IExpa2V3aXNlLgorCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGVkLgorCSogY29uZmlndXJlLmFjIChuaW9zMiotbGludXgqKTogTmV3IGhvc3QuCisJKE5JT1MyKTogQWRkIEFNX0NPTkRJVElPTkFMLgorCSogY29uZmlndXJlOiBSZWdlbmVyYXRlZC4KKwkqIHNyYy9uaW9zMi9mZmkuYzogTmV3LgorCSogc3JjL25pb3MyL2ZmaXRhcmdldC5oOiBOZXcuCisJKiBzcmMvbmlvczIvc3lzdi5TOiBOZXcuCisJKiBzcmMvcHJlcF9jaWYuYyAoaW5pdGlhbGl6ZV9hZ2dyZWdhdGUpOiBIYW5kbGUgZXh0cmEgc3RydWN0dXJlCisJYWxpZ25tZW50IHZpYSBGRklfQUdHUkVHQVRFX0FMSUdOTUVOVC4KKwkoZmZpX3ByZXBfY2lmX2NvcmUpOiBDb25kaXRpb25hbGl6ZSBzdHJ1Y3R1cmUgcmV0dXJuIGZvciBOSU9TMi4KKworMjAxMy0xMC0xMCAgU2FuZHJhIExvb3NlbW9yZSAgPHNhbmRyYUBjb2Rlc291cmNlcnkuY29tPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX21hbnlfbWl4ZWRfYXJncy5jIChjbHNfcmV0X2RvdWJsZV9mbik6CisJRml4IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUuCisKKzIwMTMtMTAtMTEgIE1hcmN1cyBTaGF3Y3JvZnQgIDxtYXJjdXMuc2hhd2Nyb2Z0QGFybS5jb20+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9tYW55LmMgKG1hbnkpOiBSZXBsYWNlICogd2l0aCArLgorCisyMDEzLTEwLTA4ICBPbmTFmWVqIELDrWxrYSAgPG5lbGVhaUBzZXpuYW0uY3o+CisKKwkqIHNyYy9hYXJjaDY0L2ZmaS5jLCBzcmMvYWFyY2g2NC9zeXN2LlMsIHNyYy9hcm0vZmZpLmMsCisJc3JjL2FybS9nZW50cmFtcC5zaCwgc3JjL2JmaW4vc3lzdi5TLCBzcmMvY2xvc3VyZXMuYywKKwlzcmMvZGxtYWxsb2MuYywgc3JjL2lhNjQvZmZpLmMsIHNyYy9taWNyb2JsYXplL2ZmaS5jLAorCXNyYy9taWNyb2JsYXplL3N5c3YuUywgc3JjL3Bvd2VycGMvZGFyd2luX2Nsb3N1cmUuUywKKwlzcmMvcG93ZXJwYy9mZmkuYywgc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jLCBzcmMvc2gvZmZpLmMsCisJc3JjL3RpbGUvdGlsZS5TLCB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDExLmM6IEZpeAorCXNwZWxsaW5nIGVycm9ycy4KKworMjAxMy0xMC0wOCAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQG1veGllbG9naWMuY29tPgorCisJKiBhY2xvY2FsLm00LCBjb21waWxlLCBjb25maWcuZ3Vlc3MsIGNvbmZpZy5zdWIsIGRlcGNvbXAsCisJaW5zdGFsbC1zaCwgbWRhdGUtc2gsIG1pc3NpbmcsIHRleGluZm8udGV4OiBVcGRhdGUgZnJvbSB1cHN0cmVhbS4KKwkqIGNvbmZpZ3VyZS5hYzogVXBkYXRlIHZlcnNpb24gdG8gMy4wLjE0LXJjMC4KKwkqIE1ha2VmaWxlLmluLCBjb25maWd1cmUsIE1ha2VmaWxlLmluLCBpbmNsdWRlL01ha2VmaWxlLmluLAorCW1hbi9NYWtlZmlsZS5pbiwgdGVzdHN1aXRlL01ha2VmaWxlLmluOiBSZWJ1aWx0LgorCSogUkVBRE1FOiBNZW50aW9uIE04OEsgYW5kIFZBWC4KKworMjAxMy0wNy0xNSAgTWlvZCBWYWxsYXQgIDxtaW9kQG9wZW5ic2Qub3JnPgorCisJKiBNYWtlZmlsZS5hbSwKKwljb25maWd1cmUuYWMsCisJc3JjL204OGsvZmZpLmMsCisJc3JjL204OGsvZmZpdGFyZ2V0LmgsCisJc3JjL204OGsvb2JzZC5TLAorCXNyYy92YXgvZWxmYnNkLlMsCisJc3JjL3ZheC9mZmkuYywKKwlzcmMvdmF4L2ZmaXRhcmdldC5oOiBBZGQgbTg4ayBhbmQgdmF4IHN1cHBvcnQuCisKKzIwMTMtMDYtMjQgQWxhbiBNb2RyYSAgPGFtb2RyYUBnbWFpbC5jb20+CisKKwkqIHNyYy9wb3dlcnBjL2ZmaS5jIChmZmlfcHJlcF9hcmdzX1NZU1YpOiBNb3ZlIHZhciBkZWNsYXJhdGlvbgorCWJlZm9yZSBzdGF0ZW1lbnRzLgorCShmZmlfcHJlcF9hcmdzNjQpOiBTdXBwb3J0IGxpdHRsZS1lbmRpYW4uCisJKGZmaV9jbG9zdXJlX2hlbHBlcl9TWVNWLCBmZmlfY2xvc3VyZV9oZWxwZXJfTElOVVg2NCk6IExpa2V3aXNlLgorCSogc3JjL3Bvd2VycGMvbGludXg2NF9jbG9zdXJlLlMgKGZmaV9jbG9zdXJlX0xJTlVYNjQpOiBMaWtld2lzZS4KKwkqIHNyYy9wb3dlcnBjL3BwY19jbG9zdXJlLlMgKGZmaV9jbG9zdXJlX1NZU1YpOiBMaWtld2lzZS4KKworMjAxMy0wNi0xMiAgTWlzY2hhIEpvbmtlciAgPG1qb25rZXJAc3lub3BzeXMuY29tPgorCisJICogY29uZmlndXJlLmFjOiBBZGQgc3VwcG9ydCBmb3IgQVJDLgorCSAqIE1ha2VmaWxlLmFtOiBMaWtld2lzZS4KKwkgKiBSRUFETUU6IEFkZCBBUkMgZGV0YWlscy4KKwkgKiBzcmMvYXJjL2FyY29tcGFjdC5TOiBOZXcuCisJICogc3JjL2FyYy9mZmkuYzogTGlrZXdpc2UuCisJICogc3JjL2FyYy9mZml0YXJnZXQuaDogTGlrZXdpc2UuCisKKzIwMTMtMDMtMjggIERhdmlkIFNjaG5laWRlciAgPGRhdmlkLnNjaG5laWRlckBiaXZhYi5kZT4KKworCSAqIHNyYy9hcm0vZmZpLmM6IEZpeCBzdXBwb3J0IGZvciBBUk0gaGFyZC1mbG9hdCBjYWxsaW5nIGNvbnZlbnRpb24uCisJICogc3JjL2FybS9zeXN2LlM6IGNhbGwgZGlmZmVyZW50IG1ldGhvZHMgZm9yIFNZU1YgYW5kIFZGUCBBQklzLgorCSAqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbWFueV9taXhlZF9hcmdzLmM6IHRlc3RjYXNlIGZvciBhIGNsb3N1cmUgd2l0aAorCSBtaXhlZCBhcmd1bWVudHMsIG1hbnkgZG91Ymxlcy4KKwkgKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbWFueV9kb3VibGUuYzogdGVzdGNhc2UgZm9yIGNhbGxpbmcgYSBmdW5jdGlvbiB1c2luZworCSBtb3JlIHRoYW4gOCBkb3VibGVzLgorCSAqIHRlc3RjYXNlL2xpYmZmaS5jYWxsL21hbnkuYzogdXNlIGFic29sdXRlIHZhbHVlIHRvIGNoZWNrIHJlc3VsdCBhZ2FpbnN0IGFuCisJIGVwc2lsb24KKworMjAxMy0wMy0xNyAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQG1veGllbG9naWMuY29tPgorCisJKiBSRUFETUU6IFVwZGF0ZSBmb3IgMy4wLjEzLgorCSogY29uZmlndXJlLmFjOiBEaXR0by4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKwkqIGRvYy8qOiBVcGRhdGUgdmVyc2lvbi4KKworMjAxMy0wMy0xNyAgRGF2ZSBLb3JuICA8ZGF2ZS5rb3JuLmN5Z3dpbkBnbWFpbC5jb20+CisKKwkqIHNyYy9jbG9zdXJlcy5jIChpc19lbXV0cmFtcF9lbmFibGVkCisJWyFGRklfTU1BUF9FWEVDX0VNVVRSQU1QX1BBWF0pOiBNb3ZlIGRlZmF1bHQgZGVmaW5pdGlvbiBvdXRzaWRlCisJZW5jbG9zaW5nICNpZiBzY29wZS4KKworMjAxMy0wMy0xNyAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQG1veGllbG9naWMuY29tPgorCisJKiBjb25maWd1cmUuYWM6IE9ubHkgbW9kaWZ5IHRvb2xleGVjZGlyIGluIGNlcnRhaW4gY2FzZXMuCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisKKzIwMTMtMDMtMTYgIEdpbGxlcyBUYWxpcyAgPGdpbGxlcy50YWxpc0BnbWFpbC5jb20+CisKKwkqIHNyYy9wb3dlcnBjL2ZmaS5jIChmZmlfcHJlcF9hcmdzX1NZU1YpOiBEb24ndCB1c2UKKwlmcGFyZ19jb3VudCxldGMgb24gX19OT19GUFJTX18gdGFyZ2V0cy4KKworMjAxMy0wMy0xNiAgQWxhbiBIb3VyaWhhbmUgIDxhbGFuaEBmYWlybGl0ZS5jby51az4KKworCSogc3JjL202OGsvc3lzdi5TIChlcGlsb2d1ZSk6IERvbid0IHVzZSBleHRiIGluc3RydWN0aW9uIG9uCisJbTY4MDAwMCBtYWNoaW5lcy4KKworMjAxMy0wMy0xNiAgQWxleCBHYXlub3IgPGFsZXguZ2F5bm9yQGdtYWlsLmNvbT4KKworCSogc3JjL3g4Ni9mZmkuYyAoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBBbHdheXMgYWxpZ24gc3RhY2suCisKKzIwMTMtMDMtMTMgIE1hcmtvcyBDaGFuZHJhcyA8bWFya29zLmNoYW5kcmFzQGltZ3RlYy5jb20+CisKKwkqIGNvbmZpZ3VyZS5hYzogQWRkIHN1cHBvcnQgZm9yIEltYWdpbmF0aW9uIFRlY2hub2xvZ2llcyBNZXRhLgorCSogTWFrZWZpbGUuYW06IExpa2V3aXNlLgorCSogUkVBRE1FOiBBZGQgSW1hZ2luYXRpb24gVGVjaG5vbG9naWVzIE1ldGEgZGV0YWlscy4KKwkqIHNyYy9tZXRhZy9mZmkuYzogTmV3LgorCSogc3JjL21ldGFnL2ZmaXRhcmdldC5oOiBMaWtld2lzZS4KKwkqIHNyYy9tZXRhZy9zeXN2LlM6IExpa2V3aXNlLgorCisyMDEzLTAyLTI0ICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBsaW51eC1tNjhrLm9yZz4KKworCSogZG9jL2xpYmZmaS50ZXhpIChTdHJ1Y3R1cmVzKTogRml4IG1pc3NpbmcgY2F0ZWdvcnkgYXJndW1lbnQgb2YKKwlAZGVmdHAuCisKKzIwMTMtMDItMTEgIEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorCisJKiBjb25maWd1cmUuYWM6IFVwZGF0ZSByZWxlYXNlIG51bWJlciB0byAzLjAuMTIuCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisJKiBSRUFETUU6IFVwZGF0ZSByZWxlYXNlIGluZm8uCisKKzIwMTMtMDItMTAgIEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorCisJKiBSRUFETUU6IEFkZCBNb3hpZS4KKwkqIHNyYy9tb3hpZS9mZmkuYzogQ3JlYXRlZC4KKwkqIHNyYy9tb3hpZS9lYWJpLlM6IENyZWF0ZWQuCisJKiBzcmMvbW94aWUvZmZpdGFyZ2V0Lmg6IENyZWF0ZWQuCisJKiBNYWtlZmlsZS5hbSAobm9kaXN0X2xpYmZmaV9sYV9TT1VSQ0VTKTogQWRkIE1veGllLgorCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCisJKiBjb25maWd1cmUuYWM6IEFkZCBNb3hpZS4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9odWdlX3N0cnVjdC5jOiBEaXNhYmxlIGZvcm1hdCBzdHJpbmcKKwl3YXJuaW5ncyBmb3IgbW94aWUqLSotZWxmIHRlc3RzLgorCisyMDEzLTAyLTEwICBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KKworCSogTWFrZWZpbGUuYW0gKExUTERGTEFHUyk6IEZpeCByZWZlcmVuY2UuCisJKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KKworMjAxMy0wMi0xMCAgQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CisKKwkqIFJFQURNRTogVXBkYXRlIHN1cHBvcnRlZCBwbGF0Zm9ybXMuICBVcGRhdGUgdGVzdCByZXN1bHRzIGxpbmsuCisKKzIwMTMtMDItMDkgIEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVnaW50LmM6IFJlbW92ZSBmb3JjZWQgLU8yLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL21hbnkyLmMgKGZvbyk6IFJlbW92ZSBHQ0Npc20uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmZpdGVzdC5oOiBBZGQgZGVmYXVsdCBQUkl1UFRSIGRlZmluaXRpb24uCisKKwkqIHNyYy9zcGFyYy92OC5TIChmZmlfY2xvc3VyZV92OCk6IEltcG9ydCBhbmNpZW50IHVsb25nbG9uZworCWNsb3N1cmUgcmV0dXJuIHR5cGUgZml4IGRldmVsb3BlZCBieSBNYXJ0aW4gdi4gTMO2d2lzIGZvciBjcHl0aG9uCisJZm9yay4KKworMjAxMy0wMi0wOCAgQW5kcmVhcyBUb2JsZXIgIDxhbmRyZWFzdEBmZ3puZXQuY2g+CisKKwkqIHNyYy9wb3dlcnBjL2ZmaS5jIChmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IEZpeCBzbWFsbCBzdHJ1Y3QKKwlzdXBwb3J0LgorCSogc3JjL3Bvd2VycGMvc3lzdi5TOiBEaXR0by4KKworMjAxMy0wMi0wOCAgQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbG9uZ2RvdWJsZS5jOiBSZW1vdmUgeGZhaWwgZm9yCisJYXJtKi0qLSouCisKKzIwMTMtMDItMDggIEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorCisJKiBzcmMvc3BhcmMvZmZpLmMgKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKTogRml4IGNhY2hlIGZsdXNoaW5nIGZvciBHQ0MuCisKKzIwMTMtMDItMDggIE1hdHRoaWFzIEtsb3NlICA8ZG9rb0B1YnVudHUuY29tPgorCisJKiBtYW4vZmZpX3ByZXBfY2lmLjM6IENsZWFuIHVwIGZvciBkZWJpYW4gbGludGVyLgorCisyMDEzLTAyLTA4ICBQZXRlciBCZXJnbmVyICA8YmVyZ25lckB2bmV0LmlibS5jb20+CisKKwkqIHNyYy9wb3dlcnBjL2ZmaS5jIChmZmlfcHJlcF9hcmdzX1NZU1YpOiBBY2NvdW50IGZvciBGUCBhcmdzIHB1c2hlZAorCW9uIHRoZSBzdGFjay4KKworMjAxMy0wMi0wOCAgQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CisKKwkqIE1ha2VmaWxlLmFtIChFWFRSQV9ESVNUKTogQWRkIG1pc3NpbmcgZmlsZXMuCisJKiB0ZXN0c3VpdGUvTWFrZWZpbGUuYW0gKEVYVFJBX0RJU1QpOiBEaXR0by4KKwkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgorCisyMDEzLTAyLTA4ICBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KKworCSogY29uZmlndXJlLmFjOiBNb3ZlIHNwYXJjIGFzbSBjb25maWcgY2hlY2tzIHRvIHdpdGhpbiBmdW5jdGlvbnMKKwlmb3IgY29tcGF0aWJpbGl0eSB3aXRoIHN1biB0b29scy4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKwkqIHNyYy9zcGFyYy9mZmkuYyAoZmZpX3ByZXBfY2xvc3VyZV9sb2MpOiBGbHVzaCBjYWNoZSBvbiB2OQorCXN5c3RlbXMuCisJKiBzcmMvc3BhcmMvdjguUyAoZmZpX2ZsdXNoX2ljYWNoZSk6IEltcGxlbWVudCBhIHNwYXJjIHY5IGNhY2hlCisJZmx1c2hlci4KKworMjAxMy0wMi0wOCAgTmF0aGFuIFJvc3NpIDxuYXRoYW4ucm9zc2lAeGlsaW54LmNvbT4KKworCSogc3JjL21pY3JvYmxhemUvZmZpLmMgKGZmaV9jbG9zdXJlX2NhbGxfU1lTVik6IEZpeCBoYW5kbGluZyBvZgorCXNtYWxsIGJpZy1lbmRpYW4gc3RydWN0dXJlcy4KKwkoZmZpX3ByZXBfYXJncyk6IERpdHRvLgorCisyMDEzLTAyLTA3ICBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KKworCSogc3JjL3NwYXJjL3Y4LlMgKGZmaV9jYWxsX3Y4KTogRml4IHR5cG8gZnJvbSBsYXN0IHBhdGNoCisJKGVmZmVjdGl2ZWx5IGhpZGluZyBmZmlfY2FsbF92OCkuCisKKzIwMTMtMDItMDcgIEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorCisJKiBjb25maWd1cmUuYWM6IFVwZGF0ZSBidWcgcmVwb3J0aW5nIGFkZHJlc3MuCisJKiBjb25maWd1cmUuaW46IFJlYnVpbGQuCisKKwkqIHNyYy9zcGFyYy92OC5TIChmZmlfZmx1c2hfaWNhY2hlKTogT3V0LW9mLWxpbmUgY2FjaGUgZmx1c2hlciBmb3IKKwlTdW4gY29tcGlsZXIuCisJKiBzcmMvc3BhcmMvZmZpLmMgKGZmaV9jYWxsKTogUmVtb3ZlIHdhcm5pbmcuCisJQ2FsbCBmZmlfZmx1c2hfaWNhY2hlIGZvciBub24tR0NDIGJ1aWxkcy4KKwkoZmZpX3ByZXBfY2xvc3VyZV9sb2MpOiBVc2UgZmZpX2ZsdXNoX2ljYWNoZS4KKworCSogTWFrZWZpbGUuYW0gKEVYVFJBX0RJU1QpOiBBZGQgbGlidG9vbC1sZGZsYWdzLgorCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCisJKiBsaWJ0b29sLWxkZmxhZ3M6IE5ldyBmaWxlLgorCisyMDEzLTAyLTA3ICBEYW5pZWwgU2NoZXBsZXIgPGRzY2hlcGxlckBnbWFpbC5jb20+CisKKwkqIGNvbmZpZ3VyZS5hYzogQ29ycmVjdGx5IGlkZW50aWZ5IHgzMiBzeXN0ZW1zIGFzIDY0LWJpdC4KKwkqIG00L2xpYnRvb2wubTQ6IFJlbW92ZSBsaWJ0b29sIGV4cHIgZXJyb3IuCisJKiBhY2xvY2FsLm00LCBjb25maWd1cmU6IFJlYnVpbHQuCisKKzIwMTMtMDItMDcgIEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorCisJKiBjb25maWd1cmUuYWM6IEZpeCBHQ0MgdXNhZ2UgdGVzdC4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKwkqIFJFQURNRTogTWVudGlvbiBMTFZNL0dDQyB4ODZfNjQgaXNzdWUuCisJKiB0ZXN0c3VpdGUvTWFrZWZpbGUuaW46IFJlYnVpbHQuCisKKzIwMTMtMDItMDcgIEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2RvdWJsZV92YS5jIChtYWluKTogUmVwbGFjZSAvLyBzdHlsZQorCWNvbW1lbnRzIHdpdGggLyogKi8gZm9yIHhsYyBjb21waWxlci4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9sYXJnZS5jIChtYWluKTogRGl0dG8uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbGFyZ2UyLmMgKG1haW4pOiBEaXR0by4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0MS5jIChtYWluKTogRGl0dG8uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvaHVnZV9zdHJ1Y3QuYyAobWFpbik6IERpdHRvLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zsb2F0X3ZhLmMgKG1haW4pOiBEaXR0by4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc3RydWN0X3ZhMS5jIChtYWluKTogRGl0dG8uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3BvaW50ZXJfc3RhY2suYyAobWFpbik6IERpdHRvLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19wb2ludGVyLmMgKG1haW4pOiBEaXR0by4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbG9uZ2RvdWJsZV92YS5jIChtYWluKTogRGl0dG8uCisKKzIwMTMtMDItMDYgIEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorCisJKiBtYW4vZmZpX3ByZXBfY2lmLjM6IENsZWFuIHVwIGZvciBkZWJpYW4gbGludGlhbiBjaGVja2VyLgorCisyMDEzLTAyLTA2ICBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KKworCSogTWFrZWZpbGUuYW0gKHBrZ2NvbmZpZ2Rpcik6IEFkZCBtaXNzaW5nIHBrZ2NvbmZpZyBpbnN0YWxsIGJpdHMuCisJKiBNYWtlZmlsZS5pbjogUmVidWlsZC4KKworMjAxMy0wMi0wMiAgTWFyayBIIFdlYXZlciA8bWh3QG5ldHJpcy5vcmc+CisKKwkqIHNyYy94ODYvZmZpNjQuYyAoZmZpX2NhbGwpOiBTaWduLWV4dGVuZCBpbnRlZ2VyIGFyZ3VtZW50cyBwYXNzZWQKKwl2aWEgZ2VuZXJhbCBwdXJwb3NlIHJlZ2lzdGVycy4KKworMjAxMy0wMS0yMSAgTmF0aGFuIFJvc3NpIDxuYXRoYW4ucm9zc2lAeGlsaW54LmNvbT4KKworCSogUkVBRE1FOiBBZGQgTWljcm9CbGF6ZSBkZXRhaWxzLgorCSogTWFrZWZpbGUuYW06IEFkZCBNaWNyb0JsYXplIHN1cHBvcnQuCisJKiBjb25maWd1cmUuYWM6IExpa2V3aXNlLgorCSogc3JjL21pY3JvYmxhemUvZmZpLmM6IE5ldy4KKwkqIHNyYy9taWNyb2JsYXplL2ZmaXRhcmdldC5oOiBMaWtld2lzZS4KKwkqIHNyYy9taWNyb2JsYXplL3N5c3YuUzogTGlrZXdpc2UuCisKKzIwMTMtMDEtMjEgIE5hdGhhbiBSb3NzaSA8bmF0aGFuLnJvc3NpQHhpbGlueC5jb20+CisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX3VjLmM6IEZpeGVkIGlzc3VlLgorCisyMDEzLTAxLTIxICBDaHJpcyBaYW5rZWwgICA8Y2hyaXNAemFua2VsLm5ldD4KKworCSogUkVBRE1FOiBBZGQgWHRlbnNhIHN1cHBvcnQuCisJKiBNYWtlZmlsZS5hbTogTGlrZXdpc2UuCisJKiBjb25maWd1cmUuYWM6IExpa2V3aXNlLgorCSogTWFrZWZpbGUuaW4gUmVnZW5lcmF0ZS4KKwkqIGNvbmZpZ3VyZTogTGlrZXdpc2UuCisJKiBzcmMvcHJlcF9jaWYuYzogSGFuZGxlIFh0ZW5zYS4KKwkqIHNyYy94dGVuc2E6IE5ldyBkaXJlY3RvcnkuCisJKiBzcmMveHRlbnNhL2ZmaS5jOiBOZXcgZmlsZS4KKwkqIHNyYy94dGVuc2EvZmZpdGFyZ2V0Lmg6IERpdHRvLgorCSogc3JjL3h0ZW5zYS9zeXN2LlM6IERpdHRvLgorCisyMDEzLTAxLTExICBBbnRob255IEdyZWVuICA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CisKKwkqIHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYyAoZmZpX3ByZXBfYXJncyk6IFJlcGxhY2UgLy8gc3R5bGUKKwljb21tZW50cyB3aXRoIC8qICovIGZvciB4bGMgY29tcGlsZXIuCisJKiBzcmMvcG93ZXJwYy9haXguUyAoZmZpX2NhbGxfQUlYKTogRGl0dG8uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmZpdGVzdC5oIChhbGxvY2F0ZV9tbWFwKTogRGVsZXRlCisJZGVwcmVjYXRlZCBpbmxpbmUgZnVuY3Rpb24uCisJKiB0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvZmZpdGVzdGN4eC5oOiBEaXR0by4KKwkqIFJFQURNRTogQWRkIHVwZGF0ZSBmb3IgQUlYIHN1cHBvcnQuCisKKzIwMTMtMDEtMTEgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KKworCSogY29uZmlndXJlLmFjOiBSb2J1c3RpZnkgcGMgcmVsYXRpdmUgcmVsb2MgY2hlY2suCisJKiBtNC9heF9jY19tYXhvcHQubTQ6IERvbid0IC1tYWxpZ24tZG91YmxlLiAgVGhpcyBpcyBhbiBBQkkKKwljaGFuZ2luZyBvcHRpb24gZm9yIDMyLWJpdCB4ODYuCisJKiBhY2xvY2FsLm00LCBjb25maWd1cmU6IFJlYnVpbHQuCisJKiBSRUFETUU6IFVwZGF0ZSBzdXBwb3J0ZWQgdGFyZ2V0IGxpc3QuCisKKzIwMTMtMDEtMTAgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KKworCSogUkVBRE1FICh0ZXN0ZWQpOiBBZGQgQ29tcGlsZXIgY29sdW1uIHRvIHRhYmxlLgorCisyMDEzLTAxLTEwICBBbnRob255IEdyZWVuICA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CisKKwkqIHNyYy94ODYvZmZpNjQuYyAoc3RydWN0IHJlZ2lzdGVyX2FyZ3MpOiBNYWtlIHNzZSBhcnJheSBhbmQgYXJyYXkKKwlvZiB1bmlvbnMgZm9yIHN1bnBybyBjb21waWxlciBjb21wYXRpYmlsaXR5LgorCisyMDEzLTAxLTEwICBBbnRob255IEdyZWVuICA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CisKKwkqIGNvbmZpZ3VyZS5hYzogVGVzdCB0YXJnZXQgcGxhdGZvcm0gc2l6ZV90IHNpemUuICBIYW5kbGUgYm90aCAzMgorCWFuZCA2NC1iaXQgYnVpbGRzIGZvciB4ODZfNjQtKiBhbmQgaT84Ni0qIHRhcmdldHMgKGFsbG93aW5nIGZvcgorCUNGTEFHIG9wdGlvbiB0byBjaGFuZ2UgZGVmYXVsdCBzZXR0aW5ncykuCisJKiBjb25maWd1cmUsIGFjbG9jYWwubTQ6IFJlYnVpbHQuCisKKzIwMTMtMDEtMTAgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL3NwZWNpYWwuZXhwOiBPbmx5IHJ1biBleGNlcHRpb24KKwloYW5kbGluZyB0ZXN0cyB3aGVuIHVzaW5nIEdOVSBjb21waWxlci4KKworCSogbTQvYXhfY29tcGlsZXJfdmVuZG9yLm00OiBOZXcgZmlsZS4KKwkqIGNvbmZpZ3VyZS5hYzogVGVzdCBmb3IgY29tcGlsZXIgdmVuZG9yIGFuZCBkb24ndCB1c2UKKwlBWF9DRkxBR1NfV0FSTl9BTEwgd2l0aCB0aGUgc3VuIGNvbXBpbGVyLgorCSogYWNsb2NhbC5tNCwgY29uZmlndXJlOiBSZWJ1aWx0LgorCisyMDEzLTAxLTEwICBBbnRob255IEdyZWVuICA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CisKKwkqIGluY2x1ZGUvZmZpX2NvbW1vbi5oOiBEb24ndCB1c2UgR0NDaXNtcyB0byBkZWZpbmUgdHlwZXMgd2hlbgorCWJ1aWxkaW5nIHdpdGggdGhlIFNVTlBSTyBjb21waWxlci4KKworMjAxMy0wMS0xMCAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQG1veGllbG9naWMuY29tPgorCisJKiBjb25maWd1cmUuYWM6IFB1dCBsb2NhbC5leHAgaW4gdGhlIHJpZ2h0IHBsYWNlLgorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCisJKiBzcmMveDg2L2ZmaS5jOiBVcGRhdGUgY29tbWVudCBhYm91dCByZWdwYXJtIGZ1bmN0aW9uIGF0dHJpYnV0ZXMuCisJKiBzcmMveDg2L3N5c3YuUyAoZmZpX2Nsb3N1cmVfU1lTVik6IFRoZSBTVU5QUk8gY29tcGlsZXIgcmVxdWlyZXMKKwl0aGF0IGFsbCBmdW5jdGlvbiBhcmd1bWVudHMgYmUgcGFzc2VkIG9uIHRoZSBzdGFjayAobm8gcmVncGFybQorCXN1cHBvcnQpLgorCisyMDEzLTAxLTA4ICBBbnRob255IEdyZWVuICA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CisKKwkqIGNvbmZpZ3VyZS5hYzogR2VuZXJhdGUgbG9jYWwuZXhwLiAgVGhpcyBzZXRzIENDX0ZPUl9UQVJHRVQKKwl3aGVuIHdlIGFyZSB1c2luZyB0aGUgdmVuZG9yIGNvbXBpbGVyLgorCSogdGVzdHN1aXRlL01ha2VmaWxlLmFtIChFWFRSQV9ERUpBR05VX1NJVEVfQ09ORklHKTogUG9pbnQgdG8KKwkuLi9sb2NhbC5leHAuCisJKiBjb25maWd1cmUsIHRlc3RzdWl0ZS9NYWtlZmlsZS5pbjogUmVidWlsdC4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2NhbGwuZXhwOiBSdW4gdGVzdHMgd2l0aCBkaWZmZXJlbnQKKwlvcHRpb25zLCBkZXBlbmRpbmcgb24gd2hldGhlciBvciBub3Qgd2UgYXJlIHVzaW5nIGdjYyBvciB0aGUKKwl2ZW5kb3IgY29tcGlsZXIuCisJKiB0ZXN0c3VpdGUvbGliL2xpYmZmaS5leHAgKGxpYmZmaS1pbml0KTogU2V0IHVzaW5nX2djYyBiYXNlZCBvbgorCXdoZXRoZXIgb3Igbm90IHdlIGFyZSBidWlsZGluZy90ZXN0aW5nIHdpdGggZ2NjLgorCisyMDEzLTAxLTA4ICBBbnRob255IEdyZWVuICA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CisKKwkqIGNvbmZpZ3VyZS5hYzogU3dpdGNoIHg4NiBzb2xhcmlzIHRhcmdldCB0byBYODYgYnkgZGVmYXVsdC4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKworMjAxMy0wMS0wOCAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQG1veGllbG9naWMuY29tPgorCisJKiBjb25maWd1cmUuYWM6IEZpeCB0ZXN0IGZvciByZWFkLW9ubHkgZWhfZnJhbWUuCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisKKzIwMTMtMDEtMDggIEFudGhvbnkgR3JlZW4gIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KKworCSogc3JjL3g4Ni9zeXN2LlMsIHNyYy94ODYvdW5peDY0LlM6IE9ubHkgZW1pdCBEV0FSRiB1bndpbmQgaW5mbworCXdoZW4gYnVpbGRpbmcgd2l0aCB0aGUgR05VIHRvb2xjaGFpbi4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mZml0ZXN0LmggKENIRUNLKTogRml4IGZvciBTb2xhcmlzIHZlbmRvcgorCWNvbXBpbGVyLgorCisyMDEzLTAxLTA3ICBUaG9yc3RlbiBHbGFzZXIgPHRnQG1pcmJzZC5vcmc+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWNoYXJfdmEuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VzaG9ydF92YS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC92YV8xLmM6IFRlc3RzdWl0ZSBmaXhlcy4KKworMjAxMy0wMS0wNyAgVGhvcnN0ZW4gR2xhc2VyIDx0Z0BtaXJic2Qub3JnPgorCisJKiBzcmMvbTY4ay9mZmkuYyAoQ0lGX0ZMQUdTX1NJTlQ4LCBDSUZfRkxBR1NfU0lOVDE2KTogRGVmaW5lLgorCShmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IEZpeCA4LWJpdCBhbmQgMTYtYml0IHNpZ25lZCBjYWxscy4KKwkqIHNyYy9tNjhrL3N5c3YuUyAoZmZpX2NhbGxfU1lTViwgZmZpX2Nsb3N1cmVfU1lTVik6IERpdHRvLgorCisyMDEzLTAxLTA0ICBBbnRob255IEdyZWVuICA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CisKKwkqIE1ha2VmaWxlLmFtIChBTV9DRkxBR1MpOiBEb24ndCBhdXRvbWF0aWNhbGx5IGFkZCAtZmV4Y2VwdGlvbnMKKwlhbmQgLVdhbGwuICBUaGlzIGlzIHNldCBpbiB0aGUgY29uZmlndXJlIHNjcmlwdCBhZnRlciB0ZXN0aW5nIGZvcgorCUdDQy4KKwkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgorCisyMDEzLTAxLTAyICByb2ZsMHIgPGh0dHBzOi8vZ2l0aHViLmNvbS9yb2ZsMHI+CisKKwkqIHNyYy9wb3dlcnBjL2ZmaS5jIChmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IEZpeCBidWlsZCBlcnJvciBvbiBwcGMKKwl3aGVuIGxvbmcgZG91YmxlID09IGRvdWJsZS4KKworMjAxMy0wMS0wMiAgUmVpbmkgVXJiYW4gIDxydXJiYW5AeC1yYXkuYXQ+CisKKwkqIE1ha2VmaWxlLmFtIChsaWJmZmlfbGFfTERGTEFHUyk6IEFkZCAtbm8tdW5kZWZpbmVkIHRvIExERkxBR1MKKwkocmVxdWlyZWQgZm9yIHNoYXJlZCBsaWJzIG9uIGN5Z3dpbi9taW5ndykuCisJKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KKworMjAxMi0xMC0zMSAgQWxhbiBNb2RyYSAgPGFtb2RyYUBnbWFpbC5jbz4KKworCSogc3JjL3Bvd2VycGMvbGludXg2NF9jbG9zdXJlLlM6IEFkZCBuZXcgQUJJIHN1cHBvcnQuCisJKiBzcmMvcG93ZXJwYy9saW51eDY0LlM6IExpa2V3aXNlLgorCisyMDEyLTEwLTMwICBNYWdudXMgR3JhbmJlcmcgIDx6b3JyeUBnZW50b28ub3JnPgorCSAgICBQYXZlbCBMYWJ1c2hldiAgPHBhdmVsLmxhYnVzaGV2QHJ1bmJveC5ydT4KKworCSogY29uZmlndXJlLmFjOiBOZXcgb3B0aW9ucyBwYXhfZW11dHJhbXAKKwkqIGNvbmZpZ3VyZSwgZmZpY29uZmlnLmguaW46IFJlZ2VuZXJhdGVkCisJKiBzcmMvY2xvc3VyZXMuYzogTmV3IGZ1bmN0aW9uIGVtdXRyYW1wX2VuYWJsZWRfY2hlY2soKSBhbmQKKwljaGVja3MuCisKKzIwMTItMTAtMzAgIEZyZWRlcmljayBDaGV1bmcgIDxmcmVkZXJpY2suY2hldW5nQGdtYWlsLmNvbT4KKworCSogY29uZmlndXJlLmFjOiBFbmFibGUgRkZJX01BUF9FWEVDX1dSSVQgZm9yIERhcndpbiAxMiAobW91bnRhaW4KKwlsaW9uKSBhbmQgZnV0dXJlIHZlcnNpb24uCisJKiBjb25maWd1cmU6IFJlYnVpbGQuCisKKzIwMTItMTAtMzAgIEphbWVzIEdyZWVuaGFsZ2ggIDxqYW1lcy5ncmVlbmhhbGdoIGF0IGFybS5jb20+CisgICAgICAgICAgICBNYXJjdXMgU2hhd2Nyb2Z0ICA8bWFyY3VzLnNoYXdjcm9mdCBhdCBhcm0uY29tPgorCisgICAgICAgICogUkVBRE1FOiBBZGQgZGV0YWlscyBvZiBhYXJjaDY0IHBvcnQuCisgICAgICAgICogc3JjL2FhcmNoNjQvZmZpLmM6IE5ldy4KKyAgICAgICAgKiBzcmMvYWFyY2g2NC9mZml0YXJnZXQuaDogTGlrZXdpc2UuCisgICAgICAgICogc3JjL2FhcmNoNjQvc3lzdi5TOiBMaWtld2lzZS4KKwkqIE1ha2VmaWxlLmFtOiBTdXBwb3J0IGFhcmNoNjQuCisJKiBjb25maWd1cmUuYWM6IFN1cHBvcnQgYWFyY2g2NC4KKwkqIE1ha2VmaWxlLmluLCBjb25maWd1cmU6IFJlYnVpbHQuCisKKzIwMTItMTAtMzAgIEphbWVzIEdyZWVuaGFsZ2ggIDxqYW1lcy5ncmVlbmhhbGdoIGF0IGFybS5jb20+CisgICAgICAgICAgICBNYXJjdXMgU2hhd2Nyb2Z0ICA8bWFyY3VzLnNoYXdjcm9mdCBhdCBhcm0uY29tPgorCisgICAgICAgICogdGVzdHN1aXRlL2xpYi9saWJmZmkuZXhwOiBBZGQgc3VwcG9ydCBmb3IgYWFyY2g2NC4KKyAgICAgICAgKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3N0cnVjdF92YTEuYzogTmV3LgorICAgICAgICAqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWNoYXJfdmEuYzogTGlrZXdpc2UuCisgICAgICAgICogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191aW50X3ZhLmM6IExpa2V3aXNlLgorICAgICAgICAqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWxvbmdfdmEuYzogTGlrZXdpc2UuCisgICAgICAgICogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191c2hvcnRfdmEuYzogTGlrZXdpc2UuCisgICAgICAgICogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QxMS5jOiBMaWtld2lzZS4KKyAgICAgICAgKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvdW5pbml0aWFsaXplZC5jOiBMaWtld2lzZS4KKyAgICAgICAgKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvdmFfMS5jOiBMaWtld2lzZS4KKyAgICAgICAgKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvdmFfc3RydWN0MS5jOiBMaWtld2lzZS4KKyAgICAgICAgKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvdmFfc3RydWN0Mi5jOiBMaWtld2lzZS4KKyAgICAgICAgKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvdmFfc3RydWN0My5jOiBMaWtld2lzZS4KKworMjAxMi0xMC0xMiAgV2FsdGVyIExlZSAgPHdhbHRAdGlsZXJhLmNvbT4KKworICAgICAgICAqIE1ha2VmaWxlLmFtOiBBZGQgVElMRS1HeC9USUxFUHJvIHN1cHBvcnQuCisgICAgICAgICogY29uZmlndXJlLmFjOiBMaWtld2lzZS4KKyAgICAgICAgKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKyAgICAgICAgKiBjb25maWd1cmU6IExpa2V3aXNlLgorICAgICAgICAqIHNyYy9wcmVwX2NpZi5jIChmZmlfcHJlcF9jaWZfY29yZSk6IEhhbmRsZSBUSUxFLUd4L1RJTEVQcm8uCisgICAgICAgICogc3JjL3RpbGU6IE5ldyBkaXJlY3RvcnkuCisgICAgICAgICogc3JjL3RpbGUvZmZpLmM6IE5ldyBmaWxlLgorICAgICAgICAqIHNyYy90aWxlL2ZmaXRhcmdldC5oOiBEaXR0by4KKyAgICAgICAgKiBzcmMvdGlsZS90aWxlLlM6IERpdHRvLgorCisyMDEyLTEwLTEyICBNYXR0aGlhcyBLbG9zZSAgPGRva29AdWJ1bnR1LmNvbT4KKworCSogZ2VuZXJhdGUtb3N4LXNvdXJjZS1hbmQtaGVhZGVycy5weTogTm9ybWFsaXplIHdoaXRlc3BhY2UuCisKKzIwMTItMDktMTQgIERhdmlkIEVkZWxzb2huICA8ZGplLmdjY0BnbWFpbC5jb20+CisKKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZWQuCisKKzIwMTItMDgtMjYgIEFuZHJldyBQaW5za2kgIDxhcGluc2tpQGNhdml1bS5jb20+CisKKwlQUiBsaWJmZmkvNTMwMTQKKwkqIHNyYy9taXBzL2ZmaS5jIChmZmlfcHJlcF9jbG9zdXJlX2xvYyk6IEFsbG93IG4zMiB3aXRoIHNvZnQtZmxvYXQgYW5kIG42NCB3aXRoCisJc29mdC1mbG9hdC4KKworMjAxMi0wOC0wOCAgVXJvcyBCaXpqYWsgIDx1Yml6amFrQGdtYWlsLmNvbT4KKworCSogc3JjL3MzOTAvZmZpLmMgKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKTogRG9uJ3QgQVNTRVJUIEFCSSB0ZXN0LAorCWp1c3QgcmV0dXJuIEZGSV9CQURfQUJJIHdoZW4gdGhpbmdzIGFyZSB3cm9uZy4KKworMjAxMi0wNy0xOCAgSC5KLiBMdSAgPGhvbmdqaXUubHVAaW50ZWwuY29tPgorCisJUFIgbGliZmZpLzUzOTgyCisJUFIgbGliZmZpLzUzOTczCisJKiBzcmMveDg2L2ZmaXRhcmdldC5oOiBDaGVjayBfX0lMUDMyX18gaW5zdGVhZCBvZiBfX0xQNjRfXyBmb3IgeDMyLgorCShGRklfU0laRU9GX0pBVkFfUkFXKTogRGVmaW5lZCB0byA0IGZvciB4MzIuCisKKzIwMTItMDUtMTYgIEguSi4gTHUgIDxob25naml1Lmx1QGludGVsLmNvbT4KKworCSogY29uZmlndXJlOiBSZWdlbmVyYXRlZC4KKworMjAxMi0wNS0wNSAgTmljb2xhcyBMZWxvbmcKKworCSogbGliZmZpLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IEZpeGVzLgorCSogUkVBRE1FOiBVcGRhdGUgZm9yIGlPUyBidWlsZHMuCisKKzIwMTItMDQtMjMgIEFsZXhhbmRyZSBLZXVuZWNrZSBJLiBkZSBNZW5kb25jYSA8YWxleGFuZHJlLmtldW5lY2tlQGdtYWlsLmNvbT4KKworCSogY29uZmlndXJlLmFjOiBBZGQgQmxhY2tmaW4vc3lzdiBzdXBwb3J0CisJKiBNYWtlZmlsZS5hbTogQWRkIEJsYWNrZmluL3N5c3Ygc3VwcG9ydAorCSogc3JjL2JmaW4vZmZpLmM6ICBBZGQgQmxhY2tmaW4vc3lzdiBzdXBwb3J0CisJKiBzcmMvYmZpbi9mZml0YXJnZXQuaDogQWRkIEJsYWNrZmluL3N5c3Ygc3VwcG9ydAorCisyMDEyLTA0LTExICBBbnRob255IEdyZWVuICA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CisKKwkqIE1ha2VmaWxlLmFtIChFWFRSQV9ESVNUKTogQWRkIG5ldyBzY3JpcHQuCisJKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KKworMjAxMi0wNC0xMSAgWmFjaGFyeSBXYWxkb3dza2kgIDx6d2FsZG93c2tpQGdtYWlsLmNvbT4KKworCSogZ2VuZXJhdGUtaW9zLXNvdXJjZS1hbmQtaGVhZGVycy5weSwKKwlsaWJmZmkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogU3VwcG9ydCBhIE1hYyBzdGF0aWMgbGlicmFyeSB2aWEKKwlYY29kZS4gU2V0IGlPUyBjb21wYXRpYmlsaXR5IHRvIDQuMC4gIE1vdmUgaU9TIHRyYW1wb2xpbmUKKwlnZW5lcmF0aW9uIGludG8gYW4gWGNvZGUgInJ1biBzY3JpcHQiIHBoYXNlLiAgSW5jbHVkZSBib3RoIGFzCisJWGNvZGUgYnVpbGQgc2NyaXB0cy4gRG9uJ3QgYWx3YXlzIHJlZ2VuZXJhdGUgY29uZmlnIGZpbGVzLgorCisyMDEyLTA0LTEwICBBbnRob255IEdyZWVuICA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CisKKwkqIHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYyAoZmZpX3ByZXBfYXJncyk6IEFkZCBtaXNzaW5nIHNlbWljb2xvbi4KKworMjAxMi0wNC0wNiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQG1veGllbG9naWMuY29tPgorCisJKiBNYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IEFkZCBuZXcgaU9TL3hjb2RlIGZpbGVzLgorCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCisKKzIwMTItMDQtMDYgIE1pa2UgTGV3aXMgIDxtaWtlbGlrZXNwaWVAZ21haWwuY29tPgorCisJKiBnZW5lcmF0ZS1pb3Mtc291cmNlLWFuZC1oZWFkZXJzLnB5OiBOZXcgZmlsZS4KKwkqIGxpYmZmaS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBOZXcgZmlsZS4KKwkqIFJFQURNRTogVXBkYXRlIGluc3RydWN0aW9ucyBvbiBidWlsZGluZyBpT1MgYmluYXJ5LgorCSogYnVpbGQtaW9zLnNoOiBEZWxldGUuCisKKzIwMTItMDQtMDYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KKworCSogc3JjL3g4Ni9mZmk2NC5jIChVSU5UMTI4KTogRGVmaW5lIGRpZmZlcmVudGx5IGZvciBJbnRlbCBhbmQgR05VCisJY29tcGlsZXJzLCB0aGVuIHVzZSBpdC4KKworMjAxMi0wNC0wNiAgSC5KLiBMdSAgPGhvbmdqaXUubHVAaW50ZWwuY29tPgorCisJKiBtNC9saWJ0b29sLm00IChfTFRfRU5BQkxFX0xPQ0spOiBTdXBwb3J0IHgzMi4KKworMjAxMi0wNC0wNiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQG1veGllbG9naWMuY29tPgorCisJKiB0ZXN0c3VpdGUvTWFrZWZpbGUuYW0gKEVYVFJBX0RJU1QpOiBBZGQgbWlzc2luZyB0ZXN0IGNhc2VzLgorCSogdGVzdHN1aXRlL01ha2VmaWxlLmluOiBSZWJ1aWx0LgorCisyMDEyLTA0LTA1ICBaYWNoYXJ5IFdhbGRvd3NraSAgPHp3YWxkb3dza2lAZ21haWwuY29tPgorCisJKiBpbmNsdWRlL2ZmaS5oLmluOiBBZGQgbWlzc2luZyB0cmFtcG9saW5lIHRhYmxlIGZpZWxkcy4KKwkqIHNyYy9hcm0vc3lzdi5TOiBGaXggRU5UUlkgZGVmaW5pdGlvbiwgYW5kIHdyYXAgc3ltYm9sIHJlZmVyZW5jZXMKKwlpbiBDTkFNRS4KKwkqIHNyYy94ODYvZmZpLmM6IFdyYXAgV2luZG93cyBzcGVjaWZpYyBjb2RlIGluIGlmZGVmcy4KKworMjAxMi0wNC0wMiAgUGV0ZXIgQmVyZ25lciAgPGJlcmduZXJAdm5ldC5pYm0uY29tPgorCisJKiBzcmMvcG93ZXJwYy9mZmkuYyAoZmZpX3ByZXBfYXJnc19TWVNWKTogRGVjbGFyZSBkb3VibGVfdG1wLgorCVNpbGVuY2UgY2FzdGluZyBwb2ludGVyIHRvIGludGVnZXIgb2YgZGlmZmVyZW50IHNpemUgd2FybmluZy4KKwlEZWxldGUgZ290byB0byBwcmV2aW91c2x5IGRlbGV0ZWQgbGFiZWwuCisJKGZmaV9jYWxsKTogU2lsZW5jZSBwb3NzaWJseSB1bmRlZmluZWQgd2FybmluZy4KKwkoZmZpX2Nsb3N1cmVfaGVscGVyX1NZU1YpOiBEZWNsYXJlIHZhcmlhYmxlIHR5cGUuCisKKzIwMTItMDQtMDIgIFBldGVyIFJvc2luICA8cGVkYUBseXNhdG9yLmxpdS5zZT4KKworCSogc3JjL3g4Ni93aW4zMi5TIChmZmlfY2FsbF93aW4zMik6IFNpZ24vemVybyBleHRlbmQgdGhlIHJldHVybgorCXZhbHVlIGluIHRoZSBJbnRlbCB2ZXJzaW9uIGFzIGlzIGFscmVhZHkgZG9uZSBmb3IgdGhlIEFUJlQgdmVyc2lvbi4KKwkoZmZpX2Nsb3N1cmVfU1lTVik6IExpa2V3aXNlLgorCShmZmlfY2xvc3VyZV9yYXdfU1lTVik6IExpa2V3aXNlLgorCShmZmlfY2xvc3VyZV9TVERDQUxMKTogTGlrZXdpc2UuCisKKzIwMTItMDMtMjkgIFBldGVyIFJvc2luICA8cGVkYUBseXNhdG9yLmxpdS5zZT4KKworCSogc3JjL3g4Ni93aW4zMi5TIChmZmlfY2xvc3VyZV9yYXdfVEhJU0NBTEwpOiBVbmlmeSB0aGUgZnJhbWUKKwlnZW5lcmF0aW9uLCBmaXggdGhlIEVORFAgbGFiZWwgYW5kIHJlbW92ZSB0aGUgc3VycGx1cyB0aGlyZCBhcmcKKwlmcm9tIHRoZSAnbGVhJyBpbnNuLgorCisyMDEyLTAzLTI5ICBQZXRlciBSb3NpbiAgPHBlZGFAbHlzYXRvci5saXUuc2U+CisKKwkqIHNyYy94ODYvd2luMzIuUyAoZmZpX2Nsb3N1cmVfcmF3X1NZU1YpOiBNYWtlIHRoZSAnc3R1YnJhdycgbGFiZWwKKwl2aXNpYmxlIG91dHNpZGUgdGhlIFBST0MsIHNvIHRoYXQgZmZpX2Nsb3N1cmVfcmF3X1RISVNDQUxMIGNhbiBzZWUKKwlpdC4gIEFsc28gaW5zdHJ1Y3QgdGhlIGFzc2VtYmxlciB0byBhZGQgYSBmcmFtZSB0byB0aGUgZnVuY3Rpb24uCisKKzIwMTItMDMtMjMgIFBldGVyIFJvc2luICA8cGVkYUBseXNhdG9yLmxpdS5zZT4KKworCSogTWFrZWZpbGUuYW0gKEFNX0NQUEZMQUdTKTogQWRkIC1ERkZJX0JVSUxESU5HLgorCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCisJKiBpbmNsdWRlL2ZmaS5oLmluIFtNU1ZDXTogQWRkIF9fZGVjbHNwZWMoZGxsaW1wb3J0KSBkZWNvcmF0aW9ucworCXRvIGFsbCBkYXRhIGV4cG9ydHMsIHdoZW4gY29tcGlsaW5nIGxpYmZmaSBjbGllbnRzIHVzaW5nIE1TVkMuCisKKzIwMTItMDMtMjkgIFBldGVyIFJvc2luICA8cGVkYUBseXNhdG9yLmxpdS5zZT4KKworCSogc3JjL3g4Ni9mZml0YXJnZXQuaCAoZmZpX2FiaSk6IEFkZCBuZXcgQUJJIEZGSV9NU19DREVDTCBhbmQKKwltYWtlIGl0IHRoZSBkZWZhdWx0IGZvciBNU1ZDLgorCShGRklfVFlQRV9NU19TVFJVQ1QpOiBOZXcgc3RydWN0dXJlIHJldHVybiBjb252ZW50aW9uLgorCSogc3JjL3g4Ni9mZmkuYyAoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBUd2VhayB0aGUgc3RydWN0dXJlCisJcmV0dXJuIGNvbnZlbnRpb24gZm9yIEZGSV9NU19DREVDTCB0byBiZSBGRklfVFlQRV9NU19TVFJVQ1QKKwlpbnN0ZWFkIG9mIGFuIG9yZGluYXJ5IEZGSV9UWVBFX1NUUlVDVC4KKwkoZmZpX3ByZXBfYXJncyk6IFRyZWF0IEZGSV9UWVBFX01TX1NUUlVDVCBhcyBGRklfVFlQRV9TVFJVQ1QuCisJKGZmaV9jYWxsKTogTGlrZXdpc2UuCisJKGZmaV9wcmVwX2luY29taW5nX2FyZ3NfU1lTVik6IExpa2V3aXNlLgorCShmZmlfcmF3X2NhbGwpOiBMaWtld2lzZS4KKwkoZmZpX3ByZXBfY2xvc3VyZV9sb2MpOiBUcmVhdCBGRklfTVNfQ0RFQ0wgYXMgRkZJX1NZU1YuCisJKiBzcmMveDg2L3dpbjMyLlMgKGZmaV9jbG9zdXJlX1NZU1YpOiBGb3IgRkZJX1RZUEVfTVNfU1RSVUNULAorCXJldHVybiBhIHBvaW50ZXIgdG8gdGhlIHJlc3VsdCBzdHJ1Y3R1cmUgaW4gZWF4IGFuZCBkb24ndCBwb3AKKwl0aGF0IHBvaW50ZXIgZnJvbSB0aGUgc3RhY2ssIHRoZSBjYWxsZXIgdGFrZXMgY2FyZSBvZiBpdC4KKwkoZmZpX2NhbGxfd2luMzIpOiBUcmVhdCBGRklfVFlQRV9NU19TVFJVQ1QgYXMgRkZJX1RZUEVfU1RSVUNULgorCShmZmlfY2xvc3VyZV9yYXdfU1lTVik6IExpa2V3aXNlLgorCisyMDEyLTAzLTIyICBQZXRlciBSb3NpbiAgPHBlZGFAbHlzYXRvci5saXUuc2U+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX3N0ZGNhbGwuYyBbTVNWQ106IEFkZCBpbmxpbmUKKwlhc3NlbWJseSB2ZXJzaW9uIHdpdGggSW50ZWwgc3ludGF4LgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfdGhpc2NhbGwuYyBbTVNWQ106IExpa2V3aXNlLgorCisyMDEyLTAzLTIzICBQZXRlciBSb3NpbiAgPHBlZGFAbHlzYXRvci5saXUuc2U+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mZml0ZXN0Lmg6IFByb3ZpZGUgYWJzdHJhdGlvbiBvZgorCV9fYXR0cmlidXRlX18oKGZhc3RjYWxsKSkgaW4gdGhlIGZvcm0gb2YgYSBfX0ZBU1RDQUxMX18KKwlkZWZpbmUuICBEZWZpbmUgaXQgdG8gX19mYXN0Y2FsbCBmb3IgTVNWQy4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mYXN0dGhpczFfd2luMzIuYzogVXNlIHRoZSBhYm92ZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mYXN0dGhpczJfd2luMzIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmFzdHRoaXMzX3dpbjMyLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmxlbjJfd2luMzIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0MV93aW4zMi5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3QyX3dpbjMyLmM6IExpa2V3aXNlLgorCisyMDEyLTAzLTIyICBQZXRlciBSb3NpbiAgPHBlZGFAbHlzYXRvci5saXUuc2U+CisKKwkqIHNyYy94ODYvd2luMzIuUyBbTVNWQ10gKGZmaV9jbG9zdXJlX1RISVNDQUxMKTogUmVtb3ZlIHRoZSBtYW51YWwKKwlmcmFtZSBvbiBmdW5jdGlvbiBlbnRyeSwgTUFTTSBhZGRzIG9uZSBhdXRvbWF0aWNhbGx5LgorCisyMDEyLTAzLTIyICBQZXRlciBSb3NpbiAgPHBlZGFAbHlzYXRvci5saXUuc2U+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mZml0ZXN0LmggW01TVkNdOiBBZGQga2x1ZGdlIGZvciBtaXNzaW5nCisJYml0cyBpbiB0aGUgTVNWQyBoZWFkZXJzLgorCisyMDEyLTAzLTIyICBQZXRlciBSb3NpbiAgPHBlZGFAbHlzYXRvci5saXUuc2U+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTJieXRlLmM6IEFkanVzdCB0byB0aGUgQzg5IHN0eWxlCisJd2l0aCBubyBkZWNsYXJhdGlvbnMgYWZ0ZXIgc3RhdGVtZW50cy4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTZieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xOGJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE5Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMV8xYnl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjBieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yMGJ5dGUxLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yNGJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzJieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zXzFieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zYnl0ZTEuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzNieXRlMi5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNF8xYnl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNGJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzVfMV9ieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc181Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNjRieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc182XzFfYnl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNmJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzdfMV9ieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc183Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOGJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzlieXRlMS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOWJ5dGUyLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9kb3VibGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2Zsb2F0LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlX3NwbGl0LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlX3NwbGl0Mi5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fcG9pbnRlci5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDE2LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50MzIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQ2NC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDE2LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50MzIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3VpbnQ2NC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZGJsc19zdHJ1Y3QuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3BvaW50ZXJfc3RhY2suYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZXJyX2JhZF90eXBlZGVmLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2h1Z2Vfc3RydWN0LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDEuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDEwLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QyLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QzLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q0LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q1LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q2LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q3LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q4LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q5LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X2xhcmdlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X2xhcmdlMi5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9tZWRpdW0uYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbWVkaXVtMi5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3QxLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDFfd2luMzIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0Mi5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3QyX3dpbjMyLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDMuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0NC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3Q1LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDYuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0Ny5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3Q4LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDkuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvdGVzdGNsb3N1cmUuYzogTGlrZXdpc2UuCisKKzIwMTItMDMtMjEgIFBldGVyIFJvc2luCSA8cGVkYUBseXNhdG9yLmxpdS5zZT4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zsb2F0X3ZhLmMgKGZsb2F0X3ZhX2ZuKTogVXNlICVmIHdoZW4KKwlwcmludGluZyBkb3VibGVzICglbGYgaXMgZm9yIGxvbmcgZG91YmxlcykuCisJKG1haW4pOiBMaWtld2lzZS4KKworMjAxMi0wMy0yMSAgUGV0ZXIgUm9zaW4gIDxwZWRhQGx5c2F0b3IubGl1LnNlPgorCisJKiB0ZXN0c3VpdGUvbGliL3RhcmdldC1saWJwYXRoLmV4cCBbKi0qLWN5Z3dpbiosICotKi1taW5ndypdCisJKHNldF9sZF9saWJyYXJ5X3BhdGhfZW52X3ZhcnMpOiBBZGQgdGhlIGxpYnJhcnkgc2VhcmNoIGRpciB0byBQQVRICisJKGFuZCBzYXZlIFBBVEggZm9yIGxhdGVyKS4KKwkocmVzdG9yZV9sZF9saWJyYXJ5X3BhdGhfZW52X3ZhcnMpOiBSZXN0b3JlIFBBVEguCisKKzIwMTItMDMtMjEgIFBldGVyIFJvc2luICA8cGVkYUBseXNhdG9yLmxpdS5zZT4KKworCSogdGVzdHN1aXRlL2xpYi90YXJnZXQtbGlicGF0aC5leHAgWyotKi1jeWd3aW4qLCAqLSotbWluZ3cqXQorCShzZXRfbGRfbGlicmFyeV9wYXRoX2Vudl92YXJzKTogQWRkIHRoZSBsaWJyYXJ5IHNlYXJjaCBkaXIgdG8gUEFUSAorCShhbmQgc2F2ZSBQQVRIIGZvciBsYXRlcikuCisJKHJlc3RvcmVfbGRfbGlicmFyeV9wYXRoX2Vudl92YXJzKTogUmVzdG9yZSBQQVRILgorCisyMDEyLTAzLTIwICBQZXRlciBSb3NpbiAgPHBlZGFAbHlzYXRvci5saXUuc2U+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJsZW4yX3dpbjMyLmMgKG1haW4pOiBSZW1vdmUgYnVnLgorCSogc3JjL3g4Ni93aW4zMi5TIFtNU1ZDXSAoZmZpX2Nsb3N1cmVfU1lTVik6IE1ha2UgdGhlICdzdHViJyBsYWJlbAorCXZpc2libGUgb3V0c2lkZSB0aGUgUFJPQywgc28gdGhhdCBmZmlfY2xvc3VyZV9USElTQ0FMTCBjYW4gc2VlIGl0LgorCisyMDEyLTAzLTIwICBQZXRlciBSb3NpbiAgPHBlZGFAbHlzYXRvci5saXUuc2U+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJsZW4yX3dpbjMyLmMgKG1haW4pOiBSZW1vdmUgYnVnLgorCSogc3JjL3g4Ni93aW4zMi5TIFtNU1ZDXSAoZmZpX2Nsb3N1cmVfU1lTVik6IE1ha2UgdGhlICdzdHViJyBsYWJlbAorCXZpc2libGUgb3V0c2lkZSB0aGUgUFJPQywgc28gdGhhdCBmZmlfY2xvc3VyZV9USElTQ0FMTCBjYW4gc2VlIGl0LgorCisyMDEyLTAzLTE5ICBBbGFuIEhvdXJpaGFuZSAgPGFsYW5oQGZhaXJsaXRlLmNvLnVrPgorCisJKiBzcmMvbTY4ay9mZmkuYzogQWRkIE1JTlQgc3VwcG9ydC4KKwkqIHNyYy9tNjhrL3N5c3YuUzogRGl0dG8uCisKKzIwMTItMDMtMDYgIENodW5nLUxpbiBUYW5nICA8Y2x0YW5nQGNvZGVzb3VyY2VyeS5jb20+CisKKwkqIHNyYy9hcm0vZmZpLmMgKGZmaV9jYWxsKTogQWRkIF9fQVJNX0VBQklfXyBndWFyZCBhcm91bmQgY2FsbCB0bworCWZmaV9jYWxsX1ZGUCgpLgorCShmZmlfcHJlcF9jbG9zdXJlX2xvYyk6IEFkZCBfX0FSTV9FQUJJX18gZ3VhcmQgYXJvdW5kIHVzZSBvZgorCWZmaV9jbG9zdXJlX1ZGUC4KKwkqIHNyYy9hcm0vc3lzdi5TOiBBZGQgX19BUk1fRUFCSV9fIGd1YXJkIGFyb3VuZCBWRlAgY29kZS4KKworMjAxMi0wMy0xOSAgY2hlbm5hbSAgPGNzaXRAYXh3YXkuY29tPgorCisJKiBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmMgKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKTogRml4IEFJWCBjbG9zdXJlCisJc3VwcG9ydC4KKworMjAxMi0wMy0xMyAgS2F6IEtvamltYSAgPGtrb2ppbWFAZ2NjLmdudS5vcmc+CisKKwkqIHNyYy9zaC9mZmkuYyAoZmZpX3ByZXBfY2xvc3VyZV9sb2MpOiBEb24ndCBBU1NFUlQgQUJJIHRlc3QsCisJanVzdCByZXR1cm4gRkZJX0JBRF9BQkkgd2hlbiB0aGluZ3MgYXJlIHdyb25nLgorCSogc3JjL3NoNjQvZmZpLmMgKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKTogRGl0dG8uCisKKzIwMTItMDMtMDkgIERhdmlkIEVkZWxzb2huICA8ZGplLmdjY0BnbWFpbC5jb20+CisKKwkqIHNyYy9wb3dlcnBjL2FpeF9jbG9zdXJlLlMgKGZmaV9jbG9zdXJlX0FTTSk6IEFkanVzdCBmb3IgRGFyd2luNjQKKwljaGFuZ2UgdG8gcmV0dXJuIHZhbHVlIG9mIGZmaV9jbG9zdXJlX2hlbHBlcl9EQVJXSU4gYW5kIGxvYWQgdHlwZQorCWZyb20gcmV0dXJuIHR5cGUuCisKKzIwMTItMDMtMDMgIEguSi4gTHUgIDxob25naml1Lmx1QGludGVsLmNvbT4KKworCSogc3JjL3g4Ni9mZmk2NC5jIChmZmlfY2FsbCk6IENhc3QgdGhlIHJldHVybiB2YWx1ZSB0byB1bnNpZ25lZAorCWxvbmcuCisJKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKTogQ2FzdCB0byA2NGJpdCBhZGRyZXNzIGluIHRyYW1wb2xpbmUuCisJKGZmaV9jbG9zdXJlX3VuaXg2NF9pbm5lcik6IENhc3QgcmV0dXJuIHBvaW50ZXIgdG8gdW5zaWduZWQgbG9uZworCWZpcnN0LgorCisJKiBzcmMveDg2L2ZmaXRhcmdldC5oIChGRklfU0laRU9GX0FSRyk6IERlZmluZWQgdG8gOCBmb3IgeDMyLgorCShmZmlfYXJnKTogU2V0IHRvIHVuc2lnbmVkIGxvbmcgbG9uZyBmb3IgeDMyLgorCShmZmlfc2FyZyk6IFNldCB0byBsb25nIGxvbmcgZm9yIHgzMi4KKworMjAxMi0wMy0wMyAgSC5KLiBMdSAgPGhvbmdqaXUubHVAaW50ZWwuY29tPgorCisJKiBzcmMvcHJlcF9jaWYuYyAoZmZpX3ByZXBfY2lmX2NvcmUpOiBQcm9wZXJseSBjaGVjayBiYWQgQUJJLgorCisyMDEyLTAzLTAzICBBbmRvbmkgTW9yYWxlcyBBbGFzdHJ1ZXkgIDx5bGF0dXlhQGdtYWlsLmNvbT4KKworCSogY29uZmlndXJlLmFjOiBBZGQgLW5vLXVuZGVmaW5lZCBmb3IgYm90aCAzMi0gYW5kIDY0LWJpdCB4ODYKKwl3aW5kb3dzLWxpa2UgaG9zdHMuCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisKKzIwMTItMDItMjcgIE1pa2FlbCBQZXR0ZXJzc29uICA8bWlrcGVAaXQudXUuc2U+CisKKwlQUiBsaWJmZmkvNTIyMjMKKwkqIE1ha2VmaWxlLmFtIChGTEFHU19UT19QQVNTKTogRGVmaW5lLgorCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisKKzIwMTItMDItMjMgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KKworCSogc3JjLyovZmZpdGFyZ2V0Lmg6IEVuc3VyZSB0aGF0IHVzZXJzIG5ldmVyIGluY2x1ZGUgZmZpdGFyZ2V0LmgKKwlkaXJlY3RseS4KKworMjAxMi0wMi0yMyAgS2FpIFRpZXR6ICA8a3RpZXR6QHJlZGhhdC5jb20+CisKKwlQUiBsaWJmZmkvNTIyMjEKKwkqIHNyYy94ODYvZmZpLmMgKGZmaV9jbG9zdXJlX3Jhd19USElTQ0FMTCk6IE5ldworCXByb3RvdHlwZS4KKwkoZmZpX3ByZXBfcmF3X2Nsb3N1cmVfbG9jKTogVXNlIGZmaV9jbG9zdXJlX3Jhd19USElTQ0FMTCBmb3IKKwl0aGlzY2FsbC1jb252ZW50aW9uLgorCShmZmlfcmF3X2NhbGwpOiBVc2UgZmZpX3ByZXBfYXJnc19yYXcuCisJKiBzcmMveDg2L3dpbjMyLlMgKGZmaV9jbG9zdXJlX3Jhd19USElTQ0FMTCk6IEFkZAorCWltcGxlbWVudGF0aW9uIGZvciBzdHViLgorCisyMDEyLTAyLTEwICBLYWkgVGlldHogIDxrdGlldHpAcmVkaGF0LmNvbT4KKworCSogY29uZmlndXJlLmFjIChBTV9MVExERkxBR1MpOiBBZGQgLW5vLXVuZGVmaW5lIGZvciB4NjQKKwl3aW5kb3dzIHRhcmdldC4KKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZWQuCisKKzIwMTItMDItMDggIEthaSBUaWV0eiAgPGt0aWV0ekByZWRoYXQuY29tPgorCisJKiBzcmMvcHJlcF9jaWYuYyAoZmZpX3ByZXBfY2lmKTogQWxsb3cgZm9yIFg4Nl9XSU4zMgorCWFsc28gRkZJX1RISVNDQUxMLgorCSogc3JjL3g4Ni9mZmkuYyAoZmZpX2Nsb3N1cmVfVEhJU0NBTEwpOiBBZGQgcHJvdG90eXBlLgorCShGRklfSU5JVF9UUkFNUE9MSU5FX1RISVNDQUxMKTogTmV3IHRyYW1wb2xpbmUgY29kZS4KKwkoZmZpX3ByZXBfY2xvc3VyZV9sb2MpOiBBZGQgRkZJX1RISVNDQUxMIHN1cHBvcnQuCisJKiBzcmMveDg2L2ZmaXRhcmdldC5oIChGRklfVFJBTVBPTElORV9TSVpFKTogQWRqdXN0IHNpemUuCisJKiBzcmMveDg2L3dpbjMyLlMgKGZmaV9jbG9zdXJlX1RISVNDQUxMKTogTmV3IGNsb3N1cmUgY29kZQorCWZvciB0aGlzY2FsbC1jYWxsaW5nIGNvbnZlbnRpb24uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV90aGlzY2FsbC5jOiBOZXcgdGVzdC4KKworMjAxMi0wMS0yOCAgS2FpIFRpZXR6ICA8a3RpZXR6QHJlZGhhdC5jb20+CisKKwkqIHNyYy9saWJmZmkvc3JjL3g4Ni9mZmkuYyAoZmZpX2NhbGxfd2luMzIpOiBBZGQgbmV3CisJYXJndW1lbnQgdG8gcHJvdG90eXBlIGZvciBzcGVjaWZ5IGNhbGxpbmctY29udmVudGlvbi4KKwkoZmZpX2NhbGwpOiBBZGQgc3VwcG9ydCBmb3Igc3RkY2FsbC90aGlzY2FsbCBjb252ZW50aW9uLgorCShmZmlfcHJlcF9hcmdzKTogTGlrZXdpc2UuCisJKGZmaV9yYXdfY2FsbCk6IExpa2V3aXNlLgorCSogc3JjL3g4Ni9mZml0YXJnZXQuaCAoZmZpX2FiaSk6IEFkZCBGRklfVEhJU0NBTEwgYW5kCisJRkZJX0ZBU1RDQUxMLgorCSogc3JjL3g4Ni93aW4zMi5TIChfZmZpX2NhbGxfd2luMzIpOiBBZGQgc3VwcG9ydCBmb3IKKwlmYXN0Y2FsbC90aGlzY2FsbCBjYWxsaW5nLWNvbnZlbnRpb24gY2FsbHMuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmFzdHRoaXMxX3dpbjMyLmM6IE5ldyB0ZXN0LgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zhc3R0aGlzMl93aW4zMi5jOiBOZXcgdGVzdC4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mYXN0dGhpczNfd2luMzIuYzogTmV3IHRlc3QuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RybGVuMl93aW4zMi5jOiBOZXcgdGVzdC4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9tYW55Ml93aW4zMi5jOiBOZXcgdGVzdC4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3QxX3dpbjMyLmM6IE5ldyB0ZXN0LgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDJfd2luMzIuYzogTmV3IHRlc3QuCisKKzIwMTItMDEtMjMgIFVyb3MgQml6amFrICA8dWJpempha0BnbWFpbC5jb20+CisKKwkqIHNyYy9hbHBoYS9mZmkuYyAoZmZpX3ByZXBfY2xvc3VyZV9sb2MpOiBDaGVjayBmb3IgYmFkIEFCSS4KKworMjAxMi0wMS0yMyAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQG1veGllbG9naWMuY29tPgorCSAgICBDaHJpcyBZb3VuZyAgPGNkeW91bmdAbnRsd29ybGQuY29tPgorCisJKiBjb25maWd1cmUuYWM6IEFkZCBBbWlnYSBzdXBwb3J0LgorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCisyMDEyLTAxLTIzICBEbWl0cnkgTmFkZXpoaW4gIDxkbWl0cnkubmFkZXpoaW5AZ21haWwuY29tPgorCisJKiBpbmNsdWRlL2ZmaV9jb21tb24uaCAoTElLRUxZLCBVTkxJS0VMWSk6IEZpeCBkZWZpbml0aW9ucy4KKworMjAxMi0wMS0yMyAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAbGludXgtbTY4ay5vcmc+CisKKwkqIHNyYy9tNjhrL3N5c3YuUyAoZmZpX2NhbGxfU1lTVik6IFByb3Blcmx5IHRlc3QgZm9yIHBsYWluCisJbWM2ODAwMC4gIFRlc3QgZm9yIF9fSEFWRV82ODg4MV9fIGluIGFkZGl0aW9uIHRvIF9fTUM2ODg4MV9fLgorCisyMDEyLTAxLTE5ICBKYWt1YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNvbT4KKworCVBSIHJ0bC1vcHRpbWl6YXRpb24vNDg0OTYKKwkqIHNyYy9pYTY0L2ZmaS5jIChmZmlfY2FsbCk6IEZpeCB1cCBhbGlhc2luZyB2aW9sYXRpb25zLgorCisyMDEyLTAxLTA5ICBSYWluZXIgT3J0aCAgPHJvQENlQmlUZWMuVW5pLUJpZWxlZmVsZC5ERT4KKworCSogY29uZmlndXJlLmFjIChpPzg2LSotKik6IFNldCBUQVJHRVQgdG8gWDg2XzY0LgorCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCisyMDExLTEyLTA3ICBBbmRyZXcgUGluc2tpICA8YXBpbnNraUBjYXZpdW0uY29tPgorCisJUFIgbGliZmZpLzUwMDUxCisJKiBzcmMvbWlwcy9uMzIuUzogQWRkICIuc2V0IG1pcHM0Ii4KKworMjAxMS0xMS0yMSAgQW5kcmVhcyBUb2JsZXIgIDxhbmRyZWFzdEBmZ3puZXQuY2g+CisKKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKworMjAxMS0xMS0xMiAgRGF2aWQgR2lsYmVydCA8ZGF2aWQuZ2lsYmVydEBsaW5hcm8ub3JnPgorCisJKiBkb2MvbGliZmZpLnRleGksIGluY2x1ZGUvZmZpLmguaW4sIGluY2x1ZGUvZmZpX2NvbW1vbi5oLAorCW1hbi9NYWtlZmlsZS5hbSwgbWFuL2ZmaS4zLCBtYW4vZmZpX3ByZXBfY2lmLjMsCisJbWFuL2ZmaV9wcmVwX2NpZl92YXIuMywgc3JjL2FybS9mZmkuYywgc3JjL2FybS9mZml0YXJnZXQuaCwKKwlzcmMvY3Jpcy9mZmkuYywgc3JjL3ByZXBfY2lmLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kb3VibGVfdmEuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGVfdmEuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmxvYXRfdmEuYzogTWFueSBjaGFuZ2VzIHRvIHN1cHBvcnQgdmFyaWFkaWMKKwlmdW5jdGlvbiBjYWxscy4KKworMjAxMS0xMS0xMiAgS3lsZSBNb2ZmZXR0IDxLeWxlLkQuTW9mZmV0dEBib2VpbmcuY29tPgorCisJKiBzcmMvcG93ZXJwYy9mZmkuYywgc3JjL3Bvd2VycGMvZmZpdGFyZ2V0LmgsCisJc3JjL3Bvd2VycGMvcHBjX2Nsb3N1cmUuUywgc3JjL3Bvd2VycGMvc3lzdi5TOiBNYW55IGNoYW5nZXMgZm9yCisJc29mdGZsb2F0IHBvd2VycGMgdmFyaWFudHMuCisKKzIwMTEtMTEtMTIgIFBldHIgU2FsaW5nZXIgPFBldHIuU2FsaW5nZXJAc2V6bmFtLmN6PgorCisJKiBjb25maWd1cmUuYWMgKEZGSV9FWEVDX1RSQU1QT0xJTkVfVEFCTEUpOiBGaXgga2ZyZWVic2Qgc3VwcG9ydC4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKworMjAxMS0xMS0xMiAgVGltb3RoeSBXYWxsICA8dHdhbGxAdXNlcnMuc2YubmV0PgorCisJKiBzcmMvYXJtL2ZmaS5jIChmZmlfcHJlcF9hcmdzLCBmZmlfcHJlcF9pbmNvbWluZ19hcmdzX1NZU1YpOiBNYXgKKwlhbGlnbm1lbnQgb2YgNCBmb3Igd2luY2Ugb24gQVJNLgorCisyMDExLTExLTEyICBLeWxlIE1vZmZldHQgPEt5bGUuRC5Nb2ZmZXR0QGJvZWluZy5jb20+CisJICAgIEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorCisJKiBzcmMvcHBjL3N5c3YuUywgc3JjL3BwYy9mZmkuYzogUmVtb3ZlIHVzZSBvZiBwcGMgc3RyaW5nCisJaW5zdHJ1Y3Rpb25zIChub3QgYXZhaWxhYmxlIG9uIHNvbWUgY29yZXMsIGxpa2UgdGhlIFBQQzQ0MCkuCisKKzIwMTEtMTEtMTIgIEtpbXVyYSBXYXRhcnUgIDxraW11cmF3QGkubmlmdHkuanA+CisKKwkqIG00L2F4X2VuYWJsZV9idWlsZGRpcjogQ2hhbmdlIGZyb20gc3RyaW5nIGNvbXBhcmlzb24gdG8gbnVtZXJpYworCWNvbXBhcmlzb24gZm9yIHdjIG91dHB1dC4KKwkqIGNvbmZpZ3VyZS5hYzogRW5hYmxlIEZGSV9NTUFQX0VYRUNfV1JJVCBmb3IgZGFyd2luMTEgYWthIE1hYyBPUworCVggMTAuNy4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKworMjAxMS0xMS0xMiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQG1veGllbG9naWMuY29tPgorCisJKiBNYWtlZmlsZS5hbSAoQU1fQ0NBU0ZMQUdTKTogQWRkIC1nIG9wdGlvbiB0byBidWlsZCBhc3NlbWJseQorCWZpbGVzIHdpdGggZGVidWcgaW5mby4KKwkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgorCisyMDExLTExLTEyICBKYXNwZXIgTGlldmlzc2UgQWRyaWFhbnNlIDxqYXNwZXJAb3BlbmJzZC5vcmc+CisKKwkqIFJFQURNRTogVXBkYXRlIGxpc3Qgb2Ygc3VwcG9ydGVkIE9wZW5CU0Qgc3lzdGVtcy4KKworMjAxMS0xMS0xMiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQG1veGllbG9naWMuY29tPgorCisJKiBsaWJ0b29sLXZlcnNpb246IFVwZGF0ZS4KKwkqIE1ha2VmaWxlLmFtIChub2Rpc3RfbGliZmZpX2xhX1NPVVJDRVMpOiBBZGQgc3JjL2RlYnVnLmMgaWYKKwlGRklfREVCVUcuCisJKGxpYmZmaV9sYV9TT1VSQ0VTKTogUmVtb3ZlIHNyYy9kZWJ1Zy5jCisJKEVYVFJBX0RJU1QpOiBBZGQgc3JjL2RlYnVnLmMKKwkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgorCSogUkVBRE1FOiBVcGRhdGUgZm9yIDMuMC4xMS4KKworMjAxMS0xMS0xMCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAcmVkaGF0LmNvbT4KKworCSogY29uZmlndXJlLmFjIChHQ0NfQVNfQ0ZJX1BTRVVET19PUCk6IFVzZSBpdCBpbnN0ZWFkIG9mIGlubGluZSBjaGVjay4KKwkqIGNvbmZpZ3VyZSwgYWNsb2NhbC5tNDogUmVidWlsZC4KKworMjAxMS0wOS0wNCAgSWFpbiBTYW5kb2UgIDxpYWluc0BnY2MuZ251Lm9yZz4KKworCVBSIGxpYmZmaS80OTU5NAorCSogc3JjL3Bvd2VycGMvZGFyd2luX2Nsb3N1cmUuUyAoc3R1YnMpOiBNYWtlIHRoZSBzdHViIGJpbmRpbmcKKwloZWxwZXIgcmVmZXJlbmNlIHRyYWNrIHRoZSBhcmNoaXRlY3R1cmUgcG9pbnRlciBzaXplLgorCisyMDExLTA4LTI1ICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KKworCSogc3JjL2FybS9mZmkuYyAoRkZJX0lOSVRfVFJBTVBPTElORSk6IFJlbW92ZSBoYXJkLWNvZGVkIGFzc2VtYmx5CisJaW5zdHJ1Y3Rpb25zLgorCSogc3JjL2FybS9zeXN2LlMgKGZmaV9hcm1fdHJhbXBvbGluZSk6IFB1dCB0aGVtIGhlcmUgaW5zdGVhZC4KKworMjAxMS0wNy0xMSAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+CisKKyAgICAgICAgKiBzcmMvYXJtL2ZmaS5jIChGRklfSU5JVF9UUkFNUE9MSU5FKTogQ2xlYXIgaWNhY2hlLgorCisyMDExLTA2LTI5ICBSYWluZXIgT3J0aCAgPHJvQENlQmlUZWMuVW5pLUJpZWxlZmVsZC5ERT4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kb3VibGVfdmEuYzogTW92ZSBQUiBudW1iZXIgdG8gY29tbWVudC4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbG9uZ2RvdWJsZV92YS5jOiBMaWtld2lzZS4KKworMjAxMS0wNi0yOSAgUmFpbmVyIE9ydGggIDxyb0BDZUJpVGVjLlVuaS1CaWVsZWZlbGQuREU+CisKKwlQUiBsaWJmZmkvNDY2NjAKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZG91YmxlX3ZhLmM6IHhmYWlsIGRnLW91dHB1dCBvbgorCW1pcHMtc2dpLWlyaXg2Ki4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbG9uZ2RvdWJsZV92YS5jOiBMaWtld2lzZS4KKworMjAxMS0wNi0xNCAgUmFpbmVyIE9ydGggIDxyb0BDZUJpVGVjLlVuaS1CaWVsZWZlbGQuREU+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9odWdlX3N0cnVjdC5jICh0ZXN0X2xhcmdlX2ZuKTogVXNlIFBSSXU4LAorCVBSSWQ4IGluc3RlYWQgb2YgJWhodSwgJWhoZC4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mZml0ZXN0LmggW19fYWxwaGFfXyAmJiBfX29zZl9fXSAoUFJJZDgsCisJUFJJdTgpOiBEZWZpbmUuCisJW19fc2dpX19dIChQUklkOCwgUFJJdTgpOiBEZWZpbmUuCisKKzIwMTEtMDQtMjkgIFJhaW5lciBPcnRoICA8cm9AQ2VCaVRlYy5VbmktQmllbGVmZWxkLkRFPgorCisJKiBzcmMvYWxwaGEvb3NmLlMgKFVBX1NJLCBGREVfRU5DT0RJTkcsIEZERV9FTkNPREUsIEZERV9BUkFOR0UpOgorCURlZmluZS4KKwlVc2UgdGhlbSB0byBoYW5kbGUgRUxGIHZzLiBFQ09GRiBkaWZmZXJlbmNlcy4KKwlbX19vc2ZfX10gKF9HTE9CQUxfX0ZfZmZpX2NhbGxfb3NmKTogRGVmaW5lLgorCisyMDExLTAzLTMwICBUaW1vdGh5IFdhbGwgIDx0d2FsbEB1c2Vycy5zZi5uZXQ+CisKKwkqIHNyYy9wb3dlcnBjL2Rhcndpbi5TOiBGaXggdW5rbm93biBGREUgZW5jb2RpbmcuCisJKiBzcmMvcG93ZXJwYy9kYXJ3aW5fY2xvc3VyZS5TOiBkaXR0by4KKworMjAxMS0wMi0yNSAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQG1veGllbG9naWMuY29tPgorCisJKiBzcmMvcG93ZXJwYy9mZmkuYyAoZmZpX3ByZXBfY2xvc3VyZV9sb2MpOiBBbGxvdyBmb3IgbW9yZQorCTMyLWJpdCBBQklzLgorCisyMDExLTAyLTE1ICBBbnRob255IEdyZWVuICA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CisKKwkqIG00L2F4X2NjX21heG9wdC5tNDogRG9uJ3QgLW1hbGlnbi1kb3VibGUgb3IgdXNlIC1mZmFzdC1tYXRoLgorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCisyMDExLTAyLTEzICBSYWxmIFdpbGRlbmh1ZXMgIDxSYWxmLldpbGRlbmh1ZXNAZ214LmRlPgorCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisKKzIwMTEtMDItMTMgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KKworCSogaW5jbHVkZS9mZmlfY29tbW9uLmggKFVOTElLRUxZLCBMSUtFTFkpOiBEZWZpbmUuCisJKiBzcmMveDg2L2ZmaTY0LmMgKFVOTElLRUxZLCBMSUtFTFkpOiBSZW1vdmUgZGVmaW5pdGlvbi4KKwkqIHNyYy9wcmVwX2NpZi5jIChVTkxJS0VMWSwgTElLRUxZKTogUmVtb3ZlIGRlZmluaXRpb24uCisKKwkqIHNyYy9wcmVwX2NpZi5jIChpbml0aWFsaXplX2FnZ3JlZ2F0ZSk6IENvbnZlcnQgYXNzZXJ0aW9uIGludG8KKwlGRklfQkFEX1RZUEVERUYgcmV0dXJuLiAgSW5pdGlhbGl6ZSBhcmcgc2l6ZSBhbmQgYWxpZ25tZW50IHRvIDAuCisKKwkqIHNyYy9wYS9mZmkuYyAoZmZpX3ByZXBfY2xvc3VyZV9sb2MpOiBEb24ndCBBU1NFUlQgQUJJIHRlc3QsCisJanVzdCByZXR1cm4gRkZJX0JBRF9BQkkgd2hlbiB0aGluZ3MgYXJlIHdyb25nLgorCSogc3JjL2FybS9mZmkuYyAoZmZpX3ByZXBfY2xvc3VyZV9sb2MpOiBEaXR0by4KKwkqIHNyYy9wb3dlcnBjL2ZmaS5jIChmZmlfcHJlcF9jbG9zdXJlX2xvYyk6IERpdHRvLgorCSogc3JjL21pcHMvZmZpLmMgKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKTogRGl0dG8uCisJKiBzcmMvaWE2NC9mZmkuYyAoZmZpX3ByZXBfY2xvc3VyZV9sb2MpOiBEaXR0by4KKwkqIHNyYy9hdnIzMi9mZmkuYyAoZmZpX3ByZXBfY2xvc3VyZV9sb2MpOiBEaXR0by4KKworMjAxMS0wMi0xMSAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQG1veGllbG9naWMuY29tPgorCisJKiBzcmMvc3BhcmMvZmZpLmMgKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKTogRG9uJ3QgQVNTRVJUIEFCSSB0ZXN0LAorCWp1c3QgcmV0dXJuIEZGSV9CQURfQUJJIHdoZW4gdGhpbmdzIGFyZSB3cm9uZy4KKworMjAxMi0wMi0xMSAgRXJpYyBCb3RjYXpvdSAgPGVib3RjYXpvdUBhZGFjb3JlLmNvbT4KKworCSogc3JjL3NwYXJjL3Y5LlMgKFNUQUNLRlJBTUUpOiBCdW1wIHRvIDE3Ni4KKworMjAxMS0wMi0wOSAgU3R1YXJ0IFNoZWx0b24gIDxzcmNzaGVsdG9uQGdtYWlsLmNvbT4KKworCWh0dHA6Ly9idWdzLmdlbnRvby5vcmcvc2hvd19idWcuY2dpP2lkPTI4NjkxMQorCSogc3JjL21pcHMvZmZpdGFyZ2V0Lmg6IENsZWFuIHVwIGVycm9yIG1lc3NhZ2VzLgorCSogc3JjL2phdmFfcmF3X2FwaS5jIChmZmlfamF2YV90cmFuc2xhdGVfYXJncyk6IENhc3QgcmF3IGFyZyB0bworCWZmaV9yYXcqLgorCSogaW5jbHVkZS9mZmkuaC5pbjogQWRkIHByYWdtYSBmb3IgU0dJIGNvbXBpbGVyLgorCisyMDExLTAyLTA5ICBBbnRob255IEdyZWVuICA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CisKKwkqIGNvbmZpZ3VyZS5hYzogQWRkIHBvd2VycGM2NC0qLWRhcndpbiogc3VwcG9ydC4KKworMjAxMS0wMi0wOSAgQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CisKKwkqIFJFQURNRTogTWVudGlvbiBJbnRlcml4LgorCisyMDExLTAyLTA5ICBKb25hdGhhbiBDYWxsZW4gIDxhYmNkQGdlbnRvby5vcmc+CisKKwkqIGNvbmZpZ3VyZS5hYzogQWRkIEludGVyaXggdG8gd2luMzIvY3lnd2luL21pbmd3IGNhc2UuCisJKiBjb25maWd1cmU6IERpdHRvLgorCSogc3JjL2Nsb3N1cmVzLmM6IFRyZWF0IEludGVyaXggbGlrZSBDeWd3aW4sIGluc3RlYWQgb2YgYXMgYQorCWdlbmVyaWMgd2luMzIuCisKKzIwMTEtMDItMDkgIEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZXJyX2JhZF90eXBlZGVmLmM6IFJlbW92ZSB4ZmFpbC4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9lcnJfYmFkX2FiaS5jOiBSZW1vdmUgeGZhaWwuCisJKiBzcmMveDg2L2ZmaTY0LmMgKFVOTElLRUxZLCBMSUtFTFkpOiBEZWZpbmUuCisJKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKTogQ2hlY2sgZm9yIGJhZCBBQkkuCisJKiBzcmMvcHJlcF9jaWYuYyAoVU5MSUtFTFksIExJS0VMWSk6IERlZmluZS4KKwkoaW5pdGlhbGl6ZV9hZ2dyZWdhdGUpOiBDaGVjayBmb3IgYmFkIHR5cGVzLgorCisyMDExLTAyLTA5ICBMYW5kb24gRnVsbGVyIDxsYW5kb25mQHBsYXVzaWJsZS5jb29wPgorCisJKiBNYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IEFkZCBidWlsZC1pb3Muc2gsIHNyYy9hcm0vZ2VudHJhbXAuc2gsCisJc3JjL2FybS90cmFtcG9saW5lLlMuCisJKG5vZGlzdF9saWJmZmlfbGFfU09VUkNFUyk6IEFkZCBzcmMvYXJjL3RyYW1wb2xpbmUuUy4KKwkqIGNvbmZpZ3VyZS5hYyAoRkZJX0VYRUNfVFJBTVBPTElORV9UQUJMRSk6IERlZmluZS4KKwkqIHNyYy9hcm0vZmZpLmMgKGZmaV90cmFtcG9saW5lX3RhYmxlKQorCShmZmlfY2xvc3VyZV90cmFtcG9saW5lX3RhYmxlX3BhZ2UsIGZmaV90cmFtcG9saW5lX3RhYmxlX2VudHJ5KQorCShGRklfVFJBTVBPTElORV9DT0RFTE9DX0NPTkZJRywgRkZJX1RSQU1QT0xJTkVfQ09ORklHX1BBR0VfT0ZGU0VUKQorCShGRklfVFJBTVBPTElORV9DT1VOVCwgZmZpX3RyYW1wb2xpbmVfbG9jaywgZmZpX3RyYW1wb2xpbmVfdGFibGVzKQorCShmZmlfdHJhbXBvbGluZV90YWJsZV9hbGxvYywgZmZpX2Nsb3N1cmVfYWxsb2MsIGZmaV9jbG9zdXJlX2ZyZWUpOgorCURlZmluZSBmb3IgRkZJX0VYRUNfVFJBTVBPTElORV9UQUJMRSBjYXNlIChpT1MpLgorCShmZmlfcHJlcF9jbG9zdXJlX2xvYyk6IEhhbmRsIEZGSV9FWEVDX1RSQU1QT0xJTkVfVEFCTEUgY2FzZQorCXNlcGFyYXRlbHkuCisJKiBzcmMvYXJtL3N5c3YuUzogSGFuZGxlIEFwcGxlIGlPUyBob3N0LgorCSogc3JjL2Nsb3N1cmVzLmM6IEhhbmRsZSBGRklfRVhFQ19UUkFNUE9MSU5FX1RBQkxFIGNhc2UuCisJKiBidWlsZC1pb3Muc2g6IE5ldyBmaWxlLgorCSogZmZpY29uZmlnLmguaW4sIGNvbmZpZ3VyZSwgTWFrZWZpbGUuaW46IFJlYnVpbHQuCisJKiBSRUFETUU6IE1lbnRpb24gQVJNIGlPUy4KKworMjAxMS0wMi0wOCAgT3JlbiBIZWxkICA8b3JlbmhlQGlsLmlibS5jb20+CisKKwkqIHNyYy9kbG1hbGxvYy5jIChfU1RSVUNUX01BTExJTkZPKTogRGVmaW5lIGluIG9yZGVyIHRvIGF2b2lkCisJcmVkZWZpbml0aW9uIG9mIG1hbGxpbmZvIG9uIEhQLVVYLgorCisyMDExLTAyLTA4ICBHaW5uIENoZW4gIDxnaW5uLmNoZW5Ab3JhY2xlLmNvbT4KKworCSogc3JjL3NwYXJjL2ZmaS5jIChmZmlfY2FsbCk6IE1ha2UgY29tcGF0aWJsZSB3aXRoIFNvbGFyaXMgU3R1ZGlvCisJYWdncmVnYXRlIHJldHVybiBBQkkuICBGbHVzaCBjYWNoZS4KKwkoZmZpX3ByZXBfY2xvc3VyZV9sb2MpOiBGbHVzaCBjYWNoZS4KKworMjAxMS0wMi0xMSAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQG1veGllbG9naWMuY29tPgorCisJRnJvbSBUb20gSG9uZXJtYW5uIDx0b20uaG9uZXJtYW5uQG9yYWNsZS5jb20+OgorCSogc3JjL3Bvd2VycGMvYWl4LlMgKGZmaV9jYWxsX0FJWCk6IFN1cHBvcnQgZm9yIHhsYyB0b29sY2hhaW4gb24KKwlBSVguICBEZWNsYXJlIC5mZmlfcHJlcF9hcmdzLiAgSW5zZXJ0IG5vcHMgYWZ0ZXIgYnJhbmNoCisJaW5zdHJ1Y3Rpb25zIHNvIHRoYXQgdGhlIEFJWCBsaW5rZXIgY2FuIGluc2VydCBUT0MgcmVsb2FkCisJaW5zdHJ1Y3Rpb25zLgorCSogc3JjL3Bvd2VycGMvYWl4X2Nsb3N1cmUuUzogRGVjbGFyZSAuZmZpX2Nsb3N1cmVfaGVscGVyX0RBUldJTi4KKworMjAxMS0wMi0wOCAgRWQgIDxlZEBrZHRjLm5ldD4KKworCSogc3JjL3Bvd2VycGMvYXNtLmg6IEZpeCBncmFtbWFyIG5pdCBpbiBjb21tZW50LgorCisyMDExLTAyLTA4ICBVbGkgTGluayAgPHVsLm1jYW1hZmlhQGxpbmtpdHVwLmRlPgorCisJKiBpbmNsdWRlL2ZmaS5oLmluIChGRklfNjRfQklUX01BWCk6IERlZmluZSBhbmQgdXNlLgorCisyMDExLTAyLTA5ICBSYWluZXIgT3J0aCAgPHJvQENlQmlUZWMuVW5pLUJpZWxlZmVsZC5ERT4KKworCVBSIGxpYmZmaS80NjY2MQorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19wb2ludGVyLmMgKG1haW4pOiBDYXN0IHZvaWQgKiB0bworCXVpbnRwdHJfdCBmaXJzdC4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfcG9pbnRlcl9zdGFjay5jIChtYWluKTogTGlrZXdpc2UuCisKKzIwMTEtMDItMDggIFJhZmFlbCBBdmlsYSBkZSBFc3BpbmRvbGEgIDxyZXNwaW5kb2xhQG1vemlsbGEuY29tPgorCisJKiBjb25maWd1cmUuYWM6IEZpeCB4ODYgdGVzdCBmb3IgcGMgcmVsYXRlZCByZWxvY3MuCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisKKzIwMTEtMDItMDcgIEpvZWwgU2hlcnJpbGwgPGpvZWwuc2hlcnJpbGxAb2FyY29ycC5jb20+CisKKwkqIGxpYmZmaS9zcmMvbTY4ay9mZmkuYzogQWRkIFJURU1TIHN1cHBvcnQgZm9yIGNhY2hlIGZsdXNoaW5nLgorCUhhbmRsZSBjYXNlIHdoZW4gQ1BVIHZhcmlhbnQgZG9lcyBub3QgaGF2ZSBsb25nIGRvdWJsZSBzdXBwb3J0LgorCSogbGliZmZpL3NyYy9tNjhrL3N5c3YuUzogQWRkIHN1cHBvcnQgZm9yIG1jNjgwMDAsIENvbGRmaXJlLAorCWFuZCBjb3JlcyB3aXRoIHNvZnQgZmxvYXRpbmcgcG9pbnQuCisKKzIwMTEtMDItMDcgIEpvZWwgU2hlcnJpbGwgPGpvZWwuc2hlcnJpbGxAb2FyY29ycC5jb20+CisKKwkqIGNvbmZpZ3VyZS5hYzogQWRkIG1pcHMqLSotcnRlbXMqIHN1cHBvcnQuCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisJKiBzcmMvbWlwcy9mZml0YXJnZXQuaDogRW5zdXJlIG5lZWRlZCBjb25zdGFudHMgYXJlIGF2YWlsYWJsZQorCWZvciB0YXJnZXRzIHdoaWNoIGRvIG5vdCBoYXZlIHNnaWRlZnMuaC4KKworMjAxMS0wMS0yNiAgRGF2ZSBLb3JuICA8ZGF2ZS5rb3JuLmN5Z3dpbkBnbWFpbC5jb20+CisKKwlQUiB0YXJnZXQvNDAxMjUKKwkqIGNvbmZpZ3VyZS5hYyAoQU1fTFRMREZMQUdTKTogQWRkIC1iaW5kaXIgb3B0aW9uIGZvciB3aW5kb3dzIERMTHMuCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisKKzIwMTAtMTItMTggIElhaW4gU2FuZG9lICA8aWFpbnNAZ2NjLmdudS5vcmc+CisKKwlQUiBsaWJmZmkvMjkxNTIKKwlQUiBsaWJmZmkvNDIzNzgKKwkqIHNyYy9wb3dlcnBjL2Rhcndpbl9jbG9zdXJlLlM6IFByb3ZpZGUgRGFyd2luNjQgaW1wbGVtZW50YXRpb24sCisJdXBkYXRlIGNvbW1lbnRzLgorCSogc3JjL3Bvd2VycGMvZmZpdGFyZ2V0LmggKFBPV0VSUENfREFSV0lONjQpOiBOZXcsCisJKEZGSV9UUkFNUE9MSU5FX1NJWkUpOiBVcGRhdGUgZm9yIERhcndpbjY0LgorCSogc3JjL3Bvd2VycGMvZGFyd2luLlM6IFByb3ZpZGUgRGFyd2luNjQgaW1wbGVtZW50YXRpb24sCisJdXBkYXRlIGNvbW1lbnRzLgorCSogc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jOiBMaWtld2lzZS4KKworMjAxMC0xMi0wNiAgUmFpbmVyIE9ydGggIDxyb0BDZUJpVGVjLlVuaS1CaWVsZWZlbGQuREU+CisKKwkqIGNvbmZpZ3VyZS5hYyAobGliZmZpX2N2X2FzX2FzY2lpX3BzZXVkb19vcCk6IFVzZSBkb3VibGUKKwliYWNrc2xhc2hlcy4KKwkobGliZmZpX2N2X2FzX3N0cmluZ19wc2V1ZG9fb3ApOiBMaWtld2lzZS4KKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKworMjAxMC0xMi0wMyAgQ2h1bmctTGluIFRhbmcgIDxjbHRhbmdAY29kZXNvdXJjZXJ5LmNvbT4KKworCSogc3JjL2FybS9zeXN2LlMgKGZmaV9jbG9zdXJlX1NZU1YpOiBBZGQgVU5XSU5EIHRvIC5wYWQgZGlyZWN0aXZlLgorCShmZmlfY2xvc3VyZV9WRlApOiBTYW1lLgorCShmZmlfY2FsbF9WRlApOiBNb3ZlIGRvd24gdG8gYmVmb3JlIGZmaV9jbG9zdXJlX1ZGUC4gQWRkICcuZnB1IHZmcCcKKwlkaXJlY3RpdmUuCisKKzIwMTAtMTItMDEgIFJhaW5lciBPcnRoICA8cm9AQ2VCaVRlYy5VbmktQmllbGVmZWxkLkRFPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmZpdGVzdC5oIFtfX3NnaV0gKFBSSWQ2NCwgUFJJdTY0KTogRGVmaW5lLgorCShQUkl1UFRSKTogRGVmaW5lLgorCisyMDEwLTExLTI5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEByZWRoYXQuY29tPgorCSAgICBSYWluZXIgT3J0aCAgPHJvQENlQmlUZWMuVW5pLUJpZWxlZmVsZC5ERT4KKworCSogc3JjL3g4Ni9zeXN2LlMgKEZERV9FTkNPRElORywgRkRFX0VOQ09ERSk6IERlZmluZS4KKwkoLmVoX2ZyYW1lKTogVXNlIEZERV9FTkNPRElORy4KKwkoLkxBU0ZERTEsIC5MQVNGREUyLCBMQVNGREUzKTogU2ltcGxpZnkgd2l0aCBGREVfRU5DT0RFLgorCisyMDEwLTExLTIyICBKYWNlayBDYWJhbiA8amFjZWtAY29kZXdlYXZlcnMuY29tPgorCisJKiBjb25maWd1cmUuYWM6IENoZWNrIGZvciBzeW1ib2wgdW5kZXJzY29yZXMgb24gbWluZ3ctdzY0LgorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCSogc3JjL3g4Ni93aW42NC5TOiBDb3JyZWN0bHkgYWNjZXNzIGV4dGVybiBzeW1ib2xzIGluIHJlc3BlY3QgdG8KKwl1bmRlcnNjb3Jlcy4KKworMjAxMC0xMS0xNSAgUmFpbmVyIE9ydGggIDxyb0BDZUJpVGVjLlVuaS1CaWVsZWZlbGQuREU+CisKKwkqIHRlc3RzdWl0ZS9saWIvbGliZmZpLWRnLmV4cDogUmVuYW1lIC4uLgorCSogdGVzdHN1aXRlL2xpYi9saWJmZmkuZXhwOiAuLi4gdG8gdGhpcy4KKwkqIGxpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2FsbC5leHA6IERvbid0IGxvYWQgbGliZmZpLWRnLmV4cC4KKwkqIGxpYmZmaS90ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvc3BlY2lhbC5leHA6IExpa2V3aXNlLgorCisyMDEwLTEwLTI4ICBDaHVuZy1MaW4gVGFuZyAgPGNsdGFuZ0Bjb2Rlc291cmNlcnkuY29tPgorCisJKiBzcmMvYXJtL2ZmaS5jIChmZmlfcHJlcF9hcmdzKTogQWRkIFZGUCByZWdpc3RlciBhcmd1bWVudCBoYW5kbGluZworCWNvZGUsIG5ldyBwYXJhbWV0ZXIsIGFuZCByZXR1cm4gdmFsdWUuIFVwZGF0ZSBjb21tZW50cy4KKwkoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBBZGQgY2FzZSBmb3IgVkZQIHN0cnVjdCByZXR1cm4gdmFsdWVzLiBBZGQKKwljYWxsIHRvIGxheW91dF92ZnBfYXJncygpLgorCShmZmlfY2FsbF9TWVNWKTogVXBkYXRlIGRlY2xhcmF0aW9uLgorCShmZmlfY2FsbF9WRlApOiBOZXcgZGVjbGFyYXRpb24uCisJKGZmaV9jYWxsKTogQWRkIFZGUCBzdHJ1Y3QgcmV0dXJuIGNvbmRpdGlvbnMuIENhbGwgZmZpX2NhbGxfVkZQKCkKKwl3aGVuIEFCSSBpcyBGRklfVkZQLgorCShmZmlfY2xvc3VyZV9WRlApOiBOZXcgZGVjbGFyYXRpb24uCisJKGZmaV9jbG9zdXJlX1NZU1ZfaW5uZXIpOiBBZGQgbmV3IHZmcF9hcmdzIHBhcmFtZXRlciwgdXBkYXRlIGNhbGwgdG8KKwlmZmlfcHJlcF9pbmNvbWluZ19hcmdzX1NZU1YoKS4KKwkoZmZpX3ByZXBfaW5jb21pbmdfYXJnc19TWVNWKTogVXBkYXRlIHBhcmFtZXRlcnMuIEFkZCBWRlAgYXJndW1lbnQKKwljYXNlIGhhbmRsaW5nLgorCShmZmlfcHJlcF9jbG9zdXJlX2xvYyk6IFBhc3MgZmZpX2Nsb3N1cmVfVkZQIHRvIHRyYW1wb2xpbmUKKwljb25zdHJ1Y3Rpb24gdW5kZXIgVkZQIGhhcmQtZmxvYXQuCisJKHJlY192ZnBfdHlwZV9wKTogTmV3IGZ1bmN0aW9uLgorCSh2ZnBfdHlwZV9wKTogU2FtZS4KKwkocGxhY2VfdmZwX2FyZyk6IFNhbWUuCisJKGxheW91dF92ZnBfYXJncyk6IFNhbWUuCisJKiBzcmMvYXJtL2ZmaXRhcmdldC5oIChmZmlfYWJpKTogQWRkIEZGSV9WRlAuIERlZmluZSBGRklfREVGQVVMVF9BQkkKKwliYXNlZCBvbiBfX0FSTV9QQ1NfVkZQLgorCShGRklfRVhUUkFfQ0lGX0ZJRUxEUyk6IERlZmluZSBmb3IgYWRkaW5nIFZGUCBoYXJkLWZsb2F0IHNwZWNpZmljCisJZmllbGRzLgorCShGRklfVFlQRV9TVFJVQ1RfVkZQX0ZMT0FUKTogRGVmaW5lIGludGVybmFsbHkgdXNlZCB0eXBlIGNvZGUuCisJKEZGSV9UWVBFX1NUUlVDVF9WRlBfRE9VQkxFKTogU2FtZS4KKwkqIHNyYy9hcm0vc3lzdi5TIChmZmlfY2FsbF9TWVNWKTogQ2hhbmdlIGNhbGwgb2YgZmZpX3ByZXBfYXJncygpIHRvCisJZGlyZWN0IGNhbGwuIE1vdmUgZnVuY3Rpb24gcG9pbnRlciBsb2FkIHVwd2FyZHMuCisJKGZmaV9jYWxsX1ZGUCk6IE5ldyBmdW5jdGlvbi4KKwkoZmZpX2Nsb3N1cmVfVkZQKTogU2FtZS4KKworCSogdGVzdHN1aXRlL2xpYi9saWJmZmktZGcuZXhwIChjaGVjay1mbGFncyk6IE5ldyBmdW5jdGlvbi4KKwkoZGctc2tpcC1pZik6IE5ldyBmdW5jdGlvbi4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZG91YmxlX3ZhLmM6IFNraXAgaWYgdGFyZ2V0IGlzIGFybSotKi0qCisJYW5kIGNvbXBpbGVyIG9wdGlvbnMgaW5jbHVkZSAtbWZsb2F0LWFiaT1oYXJkLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19sb25nZG91YmxlX3ZhLmM6IFNhbWUuCisKKzIwMTAtMTAtMDEgIEpha3ViIEplbGluZWsgIDxqYWt1YkByZWRoYXQuY29tPgorCisJUFIgbGliZmZpLzQ1Njc3CisJKiBzcmMveDg2L2ZmaTY0LmMgKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogRW5zdXJlIGNpZi0+Ynl0ZXMgaXMKKwlhIG11bHRpcGxlIG9mIDguCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbWFueTIuYzogTmV3IHRlc3QuCisKKzIwMTAtMDgtMjAgIE1hcmsgV2llbGFhcmQgIDxtandAcmVkaGF0LmNvbT4KKworCSogc3JjL2Nsb3N1cmVzLmMgKG9wZW5fdGVtcF9leGVjX2ZpbGVfbW50KTogQ2hlY2sgaWYgZ2V0bW50ZW50X3IKKwlyZXR1cm5zIE5VTEwuCisKKzIwMTAtMDgtMDkgIEFuZHJlYXMgVG9ibGVyICA8YW5kcmVhc3RAZmd6bmV0LmNoPgorCisJKiBjb25maWd1cmUuYWM6IEFkZCB0YXJnZXQgcG93ZXJwYzY0LSotZnJlZWJzZCouCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGVfc3BsaXQuYzogUGFzcworCS1tbG9uZy1kb3VibGUtMTI4IG9ubHkgdG8gbGludXggdGFyZ2V0cy4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fbG9uZ2RvdWJsZV9zcGxpdDIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvaHVnZV9zdHJ1Y3QuYzogTGlrZXdpc2UuCisKKzIwMTAtMDgtMDUgIERhbiBXaXR0ZSAgPGR3aXR0ZUBtb3ppbGxhLmNvbT4KKworICAgICAgICAqIE1ha2VmaWxlLmFtOiBQYXNzIEZGSV9ERUJVRyBkZWZpbmUgdG8gbXN2Y2Muc2ggZm9yIGxpbmtpbmcgdG8gdGhlCisgICAgICAgIGRlYnVnIENSVCB3aGVuIC0tZW5hYmxlLWRlYnVnIGlzIGdpdmVuLgorICAgICAgICAqIGNvbmZpZ3VyZS5hYzogRGVmaW5lIGl0LgorICAgICAgICAqIG1zdmNjLnNoOiBUcmFuc2xhdGUgLWcgYW5kIC1ERkZJX0RFQlVHIGFwcHJvcHJpYXRlbHkuCisKKzIwMTAtMDgtMDQgIERhbiBXaXR0ZSAgPGR3aXR0ZUBtb3ppbGxhLmNvbT4KKworCSogc3JjL3g4Ni9mZml0YXJnZXQuaDogQWRkIFg4Nl9BTlkgZGVmaW5lIGZvciBhbGwgeDg2L3g4Nl82NAorCXBsYXRmb3Jtcy4KKwkqIHNyYy94ODYvZmZpLmM6IFJlbW92ZSByZWR1bmRhbnQgaWZkZWYgY2hlY2tzLgorCSogc3JjL3ByZXBfY2lmLmM6IFB1c2ggc3RhY2sgc3BhY2UgY29tcHV0YXRpb24gaW50byBzcmMveDg2L2ZmaS5jCisJZm9yIFg4Nl9BTlkgc28gcmV0dXJuIHZhbHVlIHNwYWNlIGRvZXNuJ3QgZ2V0IGFkZGVkIHR3aWNlLgorCisyMDEwLTA4LTAzICBOZWlsIFJhc2hicm9va2UgPG5laWxAcGFya3dheWNjLmNvLnVrPgorCisJKiBtc3ZjYy5zaDogRG9uJ3QgcGFzcyAtc2FmZXNlaCB0byBtbDY0IGJlY2F1c2UgYmVoYXZpb3IgaXMgYnVnZ3kuCisKKzIwMTAtMDctMjIgIERhbiBXaXR0ZSAgPGR3aXR0ZUBtb3ppbGxhLmNvbT4KKworCSogc3JjLyovZmZpdGFyZ2V0Lmg6IE1ha2UgRkZJX0xBU1RfQUJJIG9uZSBwYXN0IHRoZSBsYXN0IHZhbGlkIEFCSS4KKwkqIHNyYy9wcmVwX2NpZi5jOiBGaXggQUJJIGFzc2VydGlvbi4KKyAgICAgICAgKiBzcmMvY3Jpcy9mZmkuYzogRGl0dG8uCisKKzIwMTAtMDctMTAgIEV2YW4gUGhvZW5peCAgPGV2YW5AZmFsbGluZ3Nub3cubmV0PgorCisJKiBzcmMvY2xvc3VyZXMuYyAoc2VsaW51eF9lbmFibGVkX2NoZWNrKTogRml4IHN0cm5jbXAgdXNhZ2UgYnVnLgorCisyMDEwLTA3LTA3ICBEYW4gSG9yw6FrIDxkYW5AZGFubnkuY3o+CisKKwkqIGluY2x1ZGUvZmZpLmguaW46IFByb3RlY3QgI2RlZmluZSB3aXRoICNpZm5kZWYuCisJKiBzcmMvcG93ZXJwYy9mZml0YXJnZXQuaDogRGl0dG8uCisJKiBzcmMvczM5MC9mZml0YXJnZXQuaDogRGl0dG8uCisJKiBzcmMvc3BhcmMvZmZpdGFyZ2V0Lmg6IERpdHRvLgorCisyMDEwLTA3LTA3ICAgTmVpbCBSb2JlcnRzIDxuZWlsQGxpbnV4LmludGVsLmNvbT4KKworCSogc3JjL3g4Ni9zeXN2LlMgKGZmaV9jYWxsX1NZU1YpOiBBbGlnbiB0aGUgc3RhY2sgcG9pbnRlciB0bworCTE2LWJ5dGVzLgorCisyMDEwLTA3LTAyICBKYWt1YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNvbT4KKworCSogTWFrZWZpbGUuYW0gKEFNX01BS0VGTEFHUyk6IFBhc3MgYWxzbyBtYW5kaXIgdG8gc3VibWFrZXMuCisJKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZWQuCisKKzIwMTAtMDUtMTkgIFJhaW5lciBPcnRoICA8cm9AQ2VCaVRlYy5VbmktQmllbGVmZWxkLkRFPgorCisJKiBjb25maWd1cmUuYWMgKGxpYmZmaV9jdl9hc194ODZfcGNyZWwpOiBDaGVjayBmb3IgaWxsZWdhbCBpbiBhcworCW91dHB1dCwgdG9vLgorCShsaWJmZmlfY3ZfYXNfYXNjaWlfcHNldWRvX29wKTogQ2hlY2sgZm9yIC5hc2NpaS4KKwkobGliZmZpX2N2X2FzX3N0cmluZ19wc2V1ZG9fb3ApOiBDaGVjayBmb3IgLnN0cmluZy4KKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKwkqIGZmaWNvbmZpZy5oLmluOiBSZWdlbmVyYXRlLgorCSogc3JjL3g4Ni9zeXN2LlMgKC5laF9mcmFtZSk6IFVzZSAuYXNjaWksIC5zdHJpbmcgb3IgZXJyb3IuCisKKzIwMTAtMDUtMTEgIERhbiBXaXR0ZSAgPGR3aXR0ZUBtb3ppbGxhLmNvbT4KKworCSogZG9jL2xpYmZmaS50ZXg6IERvY3VtZW50IHByZXZpb3VzIGNoYW5nZS4KKworMjAxMC0wNS0xMSAgTWFrb3RvIEthdG8gPG1fa2F0b0BnYTIuc28tbmV0Lm5lLmpwPgorCisJKiBzcmMveDg2L2ZmaS5jIChmZmlfY2FsbCk6IERvbid0IGNvcHkgc3RydWN0cyBwYXNzZWQgYnkgdmFsdWUuCisKKzIwMTAtMDUtMDUgIE1pY2hhZWwgS29obGVyIDxtaWNoYWVsa29obGVyQGxpdmUuY29tPgorCisJKiBzcmMvZGxtYWxsb2MuYyAoZGxmcmVlKTogRml4IHNwZWxsaW5nLgorCSogc3JjL2lhNjQvZmZpLmMgKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogRGl0dG8uCisJKiBjb25maWd1cmUuYWM6IERpdHRvLgorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCisyMDEwLTA0LTEzICBEYW4gV2l0dGUgIDxkd2l0dGVAbW96aWxsYS5jb20+CisKKwkqIG1zdmNjLnNoOiBCdWlsZCB3aXRoIC1XMyBpbnN0ZWFkIG9mIC1XYWxsLgorCSogc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jOiBSZW1vdmUgYnVpbGQgd2FybmluZ3MuCisJKiBzcmMveDg2L2ZmaS5jOiBEaXR0by4KKwkqIHNyYy94ODYvZmZpdGFyZ2V0Lmg6IERpdHRvLgorCisyMDEwLTA0LTEyICBEYW4gV2l0dGUgIDxkd2l0dGVAbW96aWxsYS5jb20+CisJICAgIFdhbHRlciBNZWlubCA8d3Vub0Bsc3Z3LmRlPgorCisJKiBjb25maWd1cmUuYWM6IEFkZCBPUy8yIHN1cHBvcnQuCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisJKiBzcmMvY2xvc3VyZXMuYzogRGl0dG8uCisJKiBzcmMvZGxtYWxsb2MuYzogRGl0dG8uCisJKiBzcmMveDg2L3dpbjMyLlM6IERpdHRvLgorCisyMDEwLTA0LTA3ICBKYWt1YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNvbT4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Vycl9iYWRfYWJpLmM6IFJlbW92ZSB1bnVzZWQgYXJncyB2YXJpYWJsZS4KKworMjAxMC0wNC0wMiAgUmFsZiBXaWxkZW5odWVzICA8UmFsZi5XaWxkZW5odWVzQGdteC5kZT4KKworCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisJKiBhY2xvY2FsLm00OiBSZWdlbmVyYXRlLgorCSogaW5jbHVkZS9NYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKwkqIG1hbi9NYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKwkqIHRlc3RzdWl0ZS9NYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKworMjAxMC0wMy0zMCAgRGFuIFdpdHRlICA8ZHdpdHRlQG1vemlsbGEuY29tPgorCisJKiBtc3ZjYy5zaDogRGlzYWJsZSBidWlsZCB3YXJuaW5ncy4KKwkqIFJFQURNRSAodGVzdGVkKTogQ2xhcmlmeSB3aW5kb3dzIGJ1aWxkIHByb2NlZHVyZS4KKworMjAxMC0wMy0xNSAgUmFpbmVyIE9ydGggIDxyb0BDZUJpVGVjLlVuaS1CaWVsZWZlbGQuREU+CisKKwkqIGNvbmZpZ3VyZS5hYyAobGliZmZpX2N2X2FzX3g4Nl82NF91bndpbmRfc2VjdGlvbl90eXBlKTogTmV3IHRlc3QuCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisJKiBmZmljb25maWcuaC5pbjogUmVnZW5lcmF0ZS4KKwkqIGxpYmZmaS9zcmMveDg2L3VuaXg2NC5TICguZWhfZnJhbWUpCisJW0hBVkVfQVNfWDg2XzY0X1VOV0lORF9TRUNUSU9OX1RZUEVdOiBVc2UgQHVud2luZCBzZWN0aW9uIHR5cGUuCisKKzIwMTAtMDMtMTQgIE1hdHRoaWFzIEtsb3NlICA8ZG9rb0B1YnVudHUuY29tPgorCisJKiBzcmMveDg2L2ZmaTY0LmM6IEZpeCB0eXBvIGluIGNvbW1lbnQuCisJKiBzcmMveDg2L2ZmaS5jOiBVc2UgLyogLi4uICovIGNvbW1lbnQgc3R5bGUuCisKKzIwMTAtMDItMjQgIFJhaW5lciBPcnRoICA8cm9AQ2VCaVRlYy5VbmktQmllbGVmZWxkLkRFPgorCisJKiBkb2MvbGliZmZpLnRleGkgKFRoZSBDbG9zdXJlIEFQSSk6IEZpeCB0eXBvLgorCSogZG9jL2xpYmZmaS5pbmZvOiBSZW1vdmUuCisKKzIwMTAtMDItMTUgIE1hdHRoaWFzIEtsb3NlICA8ZG9rb0B1YnVudHUuY29tPgorCisJKiBzcmMvYXJtL3N5c3YuUyAoX19BUk1fQVJDSF9fKTogRGVmaW5lIGZvciBwcm9jZXNzb3IKKwlfX0FSTV9BUkNIXzdFTV9fLgorCisyMDEwLTAxLTE1ICBBbnRob255IEdyZWVuICA8Z3JlZW5AcmVkaGF0LmNvbT4KKworCSogUkVBRE1FOiBBZGQgbm90ZXMgb24gYnVpbGRpbmcgd2l0aCBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KKworMjAxMC0wMS0xNSAgRGFuaWVsIFdpdHRlICA8ZHdpdHRlQG1vemlsbGEuY29tPgorCisJKiBtc3ZjYy5zaDogTmV3IGZpbGUuCisKKwkqIHNyYy94ODYvd2luMzIuUzogUG9ydCBhc3NlbWJseSByb3V0aW5lcyB0byBNU1ZDIGFuZCAjaWZkZWYuCisJKiBzcmMveDg2L2ZmaS5jOiBUd2VhayBmdW5jdGlvbiBkZWNsYXJhdGlvbiBhbmQgcmVtb3ZlIGV4Y2VzcworCXBhcmVucy4KKwkqIGluY2x1ZGUvZmZpLmguaW46IEFkZCBfX2RlY2xzcGVjKGFsaWduKDgpKSB0byB0eXBlZGVmIHN0cnVjdAorCWZmaV9jbG9zdXJlLgorCisJKiBzcmMveDg2L2ZmaS5jOiBNZXJnZSBmZmlfY2FsbF9TWVNWIGFuZCBmZmlfY2FsbF9TVERDQUxMIGludG8gbmV3CisJZnVuY3Rpb24gZmZpX2NhbGxfd2luMzIgb24gWDg2X1dJTjMyLgorCSogc3JjL3g4Ni93aW4zMi5TIChmZmlfY2FsbF9TWVNWKTogUmVuYW1lIHRvIGZmaV9jYWxsX3dpbjMyLgorCShmZmlfY2FsbF9TVERDQUxMKTogUmVtb3ZlLgorCisJKiBzcmMvcHJlcF9jaWYuYyAoZmZpX3ByZXBfY2lmKTogTW92ZSBzdGFjayBzcGFjZSBhbGxvY2F0aW9uIGNvZGUKKwl0byBmZmlfcHJlcF9jaWZfbWFjaGRlcCBmb3IgeDg2LgorCSogc3JjL3g4Ni9mZmkuYyAoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBUbyBoZXJlLgorCisyMDEwLTAxLTE1ICBPbGl2ZXIgS2lkZGxlICA8b2tpZGRsZUB5YWhvby5jby51az4KKworCSogc3JjL3g4Ni9mZml0YXJnZXQuaCAoZmZpX2FiaSk6IENoZWNrIGZvciBfX2kzODYgYW5kIF9fYW1kNjQgZm9yCisJU3VuIFN0dWRpbyBjb21waWxlciBjb21wYXRpYmlsaXR5LgorCisyMDEwLTAxLTEyICBDb25yYWQgSXJ3aW4gPGNvbnJhZC5pcndpbkBnbWFpbC5jb20+CisKKwkqIGRvYy9saWJmZmkudGV4aTogQWRkIGNsb3N1cmUgZXhhbXBsZS4KKworMjAxMC0wMS0wNyAgUmFpbmVyIE9ydGggIDxyb0BDZUJpVGVjLlVuaS1CaWVsZWZlbGQuREU+CisKKwlQUiBsaWJmZmkvNDA3MDEKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mZml0ZXN0LmggW19fYWxwaGFfXyAmJiBfX29zZl9fXSAoUFJJZExMLAorCVBSSXVMTCwgUFJJZDY0LCBQUkl1NjQsIFBSSXVQVFIpOiBEZWZpbmUuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQ2NC5jOiBBZGQgLVduby1mb3JtYXQgb24KKwlhbHBoYSotZGVjLW9zZiouCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3VpbnQ2NC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWxvbmdsb25nLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9sbDEuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbWVkaXVtMi5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC9mZml0ZXN0Y3h4LmggKGFsbG9jYXRlX21tYXApOiBDYXN0CisJTUFQX0ZBSUxFRCB0byBjaGFyICouCisKKzIwMTAtMDEtMDYgIFJhaW5lciBPcnRoICA8cm9AQ2VCaVRlYy5VbmktQmllbGVmZWxkLkRFPgorCisJKiBzcmMvbWlwcy9uMzIuUzogVXNlIC5hYmljYWxscyBhbmQgLmVoX2ZyYW1lIHdpdGggX19HTlVDX18uCisKKzIwMDktMTItMzEgIEFudGhvbnkgR3JlZW4gIDxncmVlbkByZWRoYXQuY29tPgorCisJKiBSRUFETUU6IFVwZGF0ZSBmb3IgbGliZmZpIDMuMC45LgorCisyMDA5LTEyLTI3ICBNYXR0aGlhcyBLbG9zZSAgPGRva29AdWJ1bnR1LmNvbT4KKworCSogY29uZmlndXJlLmFjIChIQVZFX0xPTkdfRE9VQkxFKTogRGVmaW5lIGZvciBtaXBzIHdoZW4KKwlhcHByb3ByaWF0ZS4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKworMjAwOS0xMi0yNiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJlZGhhdC5jb20+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbG9uZ2RvdWJsZV92YS5jOiBNYXJrIGFzIHhmYWlsIGZvcgorCWF2cjMyKi0qLSouCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2RvdWJsZV92YS5jOiBEaXR0by4KKworMjAwOS0xMi0yNiAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6Lm9yZz4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2ZmaXRlc3QuaDogQ29uZGl0aW9uYWxseSBpbmNsdWRlIHN0ZGludC5oCisJYW5kIGludHR5cGVzLmguCisJKiB0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvdW53aW5kdGVzdC5jYzogRGl0dG8uCisKKzIwMDktMTItMjYgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5vcmc+CisKKwkqIGNvbmZpZ3VyZS5hYzogQWRkIGFtZDY0LSotb3BlbmJzZCouCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisJKiB0ZXN0c3VpdGUvbGliL2xpYmZmaS1kZy5leHAgKGxpYmZmaV90YXJnZXRfY29tcGlsZSk6IExpbmsKKwlvcGVuYnNkIHByb2dyYW1zIHdpdGggLWxwdGhyZWFkLgorCisyMDA5LTEyLTI2ICBBbnRob255IEdyZWVuICA8Z3JlZW5AcmVkaGF0LmNvbT4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kb3VibGVfdmEuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGVfdmEuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3BvaW50ZXIuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3BvaW50ZXJfc3RhY2suYzogUmVtb3ZlIHhmYWlsIGZvcgorCW1pcHMqLSotKiBhbmQgYXJtKi0qLSouCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGVfc3BsaXQuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGVfc3BsaXQyLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X21lZGl1bTIuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbWVkaXVtLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X2xhcmdlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X2xhcmdlMi5jOiBSZW1vdmUgeGZhaWwgZm9yIGFybSotKi0qLgorCisyMDA5LTEyLTMxICBLYXkgVGlldHogIDxrdGlldHo3MEBnb29nbGVtYWlsLmNvbT4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2ZmaXRlc3QuaCwKKwl0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvZmZpdGVzdGN4eC5oIChQUklkTEwsIFBSdUxMKTogRml4CisJZGVmaW5pdGlvbnMuCisKKzIwMDktMTItMzEgIENhcmxvIEJyYW1pbmkgIDxjYXJsby5icmFtaXhAbGliZXJvLml0PgorCisJKiBjb25maWd1cmUuYWMgKEFNX0xUTERGTEFHUyk6IERlZmluZSBmb3Igd2luZG93cyBob3N0cy4KKwkqIE1ha2VmaWxlLmFtIChsaWJmZmlfbGFfTERGTEFHUyk6IEFkZCBBTV9MVExERkxBR1MuCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisJKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KKworMjAwOS0xMi0zMSAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJlZGhhdC5jb20+CisJICAgIEJsYWtlIENoYWZmaW4uCisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9odWdlX3N0cnVjdC5jOiBOZXcgdGVzdCBjYXNlIGZyb20gQmxha2UKKwlDaGFmZmluIEAgQXBwbGUuCisKKzIwMDktMTItMjggIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KKworCSogc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jIChmZmlfcHJlcF9hcmdzKTogQ29weSBhYmkgYW5kIG5hcmdzIHRvCisJbG9jYWwgdmFyaWFibGVzLgorCShhaXhfYWRqdXN0X2FnZ3JlZ2F0ZV9zaXplcyk6IE5ldyBmdW5jdGlvbi4KKwkoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBDYWxsIGl0LgorCisyMDA5LTEyLTI2ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXoub3JnPgorCisJKiBjb25maWd1cmUuYWM6IERlZmluZSBGRklfTU1BUF9FWEVDX1dSSVQgZm9yIHRoZSBnaXZlbiB0YXJnZXRzLgorCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCSogZmZpY29uZmlnLmguaW46IExpa2V3aXNlLgorCSogc3JjL2Nsb3N1cmVzLmM6IFJlbW92ZSB0aGUgRkZJX01NQVBfRVhFQ19XUklUIGRlZmluaXRpb24gZm9yCisJU29sYXJpcy94ODYuCisKKzIwMDktMTItMjYgIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQGxpbnV4LW02OGsub3JnPgorCisJKiBzcmMvcG93ZXJwYy9mZmkuYyAoZmZpX3ByZXBfYXJnc19TWVNWKTogQWR2YW5jZSBpbnRhcmdfY291bnQKKwl3aGVuIGEgZmxvYXQgYXJndW1lbnRzIGlzIHBhc3NlZCBpbiBtZW1vcnkuCisJKGZmaV9jbG9zdXJlX2hlbHBlcl9TWVNWKTogTWFyayBnZW5lcmFsIHJlZ2lzdGVycyBhcyB1c2VkIHVwIHdoZW4KKwlhIDY0Yml0IG9yIHNvZnQtZmxvYXQgbG9uZyBkb3VibGUgYXJndW1lbnQgaXMgcGFzc2VkIGluIG1lbW9yeS4KKworMjAwOS0xMi0yNSAgTWF0dGhpYXMgS2xvc2UgIDxkb2tvQHVidW50dS5jb20+CisKKwkqIG1hbi9mZmlfY2FsbC4zOiBGaXggI2luY2x1ZGUgaW4gZXhhbXBsZXMuCisJKiBkb2MvbGliZmZpLnRleGk6IEFkZCBkaXJjYXRlZ29yeS4KKworMjAwOS0xMi0yNSAgRnJhbmsgRXZlcmRpaiA8Zi5wLnguZXZlcmRpakB0dWRlbGZ0Lm5sPgorCisJKiBpbmNsdWRlL2ZmaS5oLmluOiBQbGFjZWQgJ19fR05VQ19fJyBpZmRlZiBhcm91bmQKKwknX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg4KSkpJyBpbiBmZmlfY2xvc3VyZSwgZml4ZXMgY29tcGlsZSBmb3IKKwlJUklYIE1JUFNQcm8gYzk5LgorCSogaW5jbHVkZS9mZmlfY29tbW9uLmg6IEFkZGVkICdfX3NnaScgZGVmaW5lIHRvIG5vbgorCSdfX2F0dHJpYnV0ZV9fKChfX21vZGVfXygpKSknIGludGVnZXIgdHlwZWRlZnMuCisJKiBzcmMvbWlwcy9mZmkuYyAoZmZpX2NhbGwsIGZmaV9jbG9zdXJlX21pcHNfaW5uZXJfTzMyLAorCWZmaV9jbG9zdXJlX21pcHNfaW5uZXJfTjMyKTogQWRkZWQgJ2RlZmluZWQoX01JUFNFQiknIHRvIEJFIGNoZWNrLgorCShmZmlfY2xvc3VyZV9taXBzX2lubmVyX08zMiwgZmZpX2Nsb3N1cmVfbWlwc19pbm5lcl9OMzIpOiBBZGRlZAorCUZGSV9MT05HRE9VQkxFIHN1cHBvcnQgYW5kIGFsaWdubWVudChOMzIgb25seSkuCisJKiBzcmMvbWlwcy9mZml0YXJnZXQuaDogQ29ycmVjdGVkICcjaW5jbHVkZSA8c2dpZGVmcy5oPicgZm9yIElSSVggYW5kCisJZml4ZWQgbm9uICdfX2F0dHJpYnV0ZV9fKChfX21vZGVfXygpKSknIGludGVnZXIgdHlwZWRlZnMuCisJKiBzcmMvbWlwcy9uMzIuUzogUHV0ICcjaWZkZWYgbGludXgnIGFyb3VuZCAnLmFiaWNhbGxzJyBhbmQgJy5laF9mcmFtZScKKwlzaW5jZSB0aGV5IGFyZSBMaW51eC9HTlUgQXNzZW1ibGVyIHNwZWNpZmljLgorCisyMDA5LTEyLTI1ICBCcmFkbGV5IFNtaXRoICA8YnJhZEBicmFkLXNtaXRoLmNvLnVrPgorCisJKiBjb25maWd1cmUuYWMsIE1ha2VmaWxlLmFtLCBzcmMvYXZyMzIvZmZpLmMsCisJc3JjL2F2cjMyL2ZmaXRhcmdldC5oLAorCXNyYy9hdnIzMi9zeXN2LlM6IEFkZCBBVlIzMiBwb3J0LgorCSogY29uZmlndXJlLCBNYWtlZmlsZS5pbjogUmVidWlsdC4KKworMjAwOS0xMi0yMSAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6Lm9yZz4KKworCSogY29uZmlndXJlLmFjOiBNYWtlIGk/ODYgYnVpbGQgb24gRnJlZUJTRCBhbmQgT3BlbkJTRC4KKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKworMjAwOS0xMi0xNSAgSm9obiBEYXZpZCBBbmdsaW4gIDxkYXZlLmFuZ2xpbkBucmMtY25yYy5nYy5jYT4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2ZmaXRlc3QuaDogRGVmaW5lIFBSSXVQVFIgb24gUEEgSFAtVVguCisKKzIwMDktMTItMTMgIEpvaG4gRGF2aWQgQW5nbGluICA8ZGF2ZS5hbmdsaW5AbnJjLWNucmMuZ2MuY2E+CisKKwkqIHNyYy9wYS9mZmkuYyAoZmZpX2Nsb3N1cmVfaW5uZXJfcGEzMik6IEhhbmRsZSBGRklfVFlQRV9MT05HRE9VQkxFCisJdHlwZSBvbiBIUC1VWC4KKworMjAxMi0wMi0xMyAgS2FpIFRpZXR6ICA8a3RpZXR6QHJlZGhhdC5jb20+CisKKwlQUiBsaWJmZmkvNTIyMjEKKwkqIHNyYy94ODYvZmZpLmMgKGZmaV9wcmVwX3Jhd19jbG9zdXJlX2xvYyk6IEFkZCB0aGlzY2FsbAorCXN1cHBvcnQgZm9yIFg4Nl9XSU4zMi4KKwkoRkZJX0lOSVRfVFJBTVBPTElORV9USElTQ0FMTCk6IEZpeCBkaXNwbGFjZW1lbnQuCisKKzIwMDktMTItMTEgIEVyaWMgQm90Y2F6b3UgIDxlYm90Y2F6b3VAYWRhY29yZS5jb20+CisKKwkqIHNyYy9zcGFyYy9mZmkuYyAoZmZpX2Nsb3N1cmVfc3BhcmNfaW5uZXJfdjkpOiBQcm9wZXJseSBhbGlnbiAnbG9uZworCWRvdWJsZScgYXJndW1lbnRzLgorCisyMDA5LTEyLTExICBFcmljIEJvdGNhem91ICA8ZWJvdGNhem91QGFkYWNvcmUuY29tPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmZpdGVzdC5oOiBEZWZpbmUgUFJJdVBUUiBvbiBTb2xhcmlzIDwgMTAuCisKKzIwMDktMTItMTAgIFJhaW5lciBPcnRoICA8cm9AQ2VCaVRlYy5VbmktQmllbGVmZWxkLkRFPgorCisJUFIgbGliZmZpLzQwNzAwCisJKiBzcmMvY2xvc3VyZXMuYyBbWDg2XzY0ICYmIF9fc3VuX18gJiYgX19zdnI0X19dCisJKEZGSV9NTUFQX0VYRUNfV1JJVCk6IERlZmluZS4KKworMjAwOS0xMi0wOCAgRGF2aWQgRGFuZXkgIDxkZGFuZXlAY2F2aXVtbmV0d29ya3MuY29tPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbWVkaXVtLmM6IFJlbW92ZSB4ZmFpbCBmb3IgbWlwcyotKi0qCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGVfc3BsaXQyLmM6IFNhbWUuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbGFyZ2UuYzogU2FtZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fbG9uZ2RvdWJsZV9zcGxpdC5jOiBTYW1lLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X2xhcmdlMi5jOiBTYW1lLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X21lZGl1bTIuYzogU2FtZS4KKworMjAwOS0xMi0wNyAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgorCisJKiBzcmMvcG93ZXJwYy9haXhfY2xvc3VyZS5TIChsaWJmZmlfY2xvc3VyZV9BU00pOiBGaXggdGFibGVqdW1wCisJdHlwby4KKworMjAwOS0xMi0wNSAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgorCisJKiBzcmMvcG93ZXJwYy9haXguUzogVXBkYXRlIEFJWDMyIGNvZGUgdG8gYmUgY29uc2lzdGVudCB3aXRoIEFJWDY0CisJY29kZS4KKwkqIHNyYy9wb3dlcnBjL2FpeF9jbG9zdXJlLlM6IFNhbWUuCisKKzIwMDktMTItMDUgIFJhbGYgV2lsZGVuaHVlcyAgPFJhbGYuV2lsZGVuaHVlc0BnbXguZGU+CisKKwkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCSogaW5jbHVkZS9NYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKwkqIG1hbi9NYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKwkqIHRlc3RzdWl0ZS9NYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKworMjAwOS0xMi0wNCAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgorCisJKiBzcmMvcG93ZXJwYy9haXhfY2xvc3VyZS5TOiBSZW9yZ2FuaXplIDY0LWJpdCBjb2RlIHRvIG1hdGNoCisJbGludXg2NF9jbG9zdXJlLlMuCisKKzIwMDktMTItMDQgIFVyb3MgQml6amFrICA8dWJpempha0BnbWFpbC5jb20+CisKKwlQUiBsaWJmZmkvNDE5MDgKKwkqIHNyYy94ODYvZmZpNjQuYyAoY2xhc3NpZnlfYXJndW1lbnQpOiBVcGRhdGUgZnJvbQorCWdjYy9jb25maWcvaTM4Ni9pMzg2LmMuCisJKGZmaV9jbG9zdXJlX3VuaXg2NF9pbm5lcik6IERvIG5vdCB1c2UgdGhlIGFkZHJlc3Mgb2YgdHdvIGNvbnNlY3V0aXZlCisJU1NFIHJlZ2lzdGVycyBkaXJlY3RseS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZGJsc19zdHJ1Y3QuYyAobWFpbik6IFJlbW92ZSB4ZmFpbAorCWZvciB4ODZfNjQgbGludXggdGFyZ2V0cy4KKworMjAwOS0xMi0wNCAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgorCisJKiBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmMgKGZmaV9jbG9zdXJlX2hlbHBlcl9EQVJXSU4pOiBJbmNyZW1lbnQKKwlwZnIgZm9yIGxvbmcgZG91YmxlIHNwbGl0IGJldHdlZW4gZnByMTMgYW5kIHN0YWNrLgorCisyMDA5LTEyLTAzICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CisKKwkqIHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYyAoZmZpX3ByZXBfYXJncyk6IEluY3JlbWVudCBuZXh0X2FyZyBhbmQKKwlmcGFyZ19jb3VudCB0d2ljZSBmb3IgbG9uZyBkb3VibGUuCisKKzIwMDktMTItMDMgIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KKworCVBSIGxpYmZmaS80MjI0MworCSogc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jIChmZmlfcHJlcF9hcmdzKTogUmVtb3ZlIGV4dHJhIHBhcmVudGhlc2VzLgorCisyMDA5LTEyLTAzICBVcm9zIEJpemphayAgPHViaXpqYWtAZ21haWwuY29tPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGVfdmEuYyAobWFpbik6IEZpeCBmb3JtYXQgc3RyaW5nLgorCVJlbW92ZSB4ZmFpbHMgZm9yIHg4NiBsaW51eCB0YXJnZXRzLgorCisyMDA5LTEyLTAyICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CisKKwkqIHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYyAoZmZpX3ByZXBfYXJncyk6IEZpeCB0eXBvIGluIElOVDY0CisJY2FzZS4KKworMjAwOS0xMi0wMSAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgorCisJKiBzcmMvcG93ZXJwYy9haXguUyAoZmZpX2NhbGxfQUlYKTogQ29udmVydCB0byBtb3JlIHN0YW5kYXJkCisJcmVnaXN0ZXIgdXNhZ2UuICBDYWxsIGZmaV9wcmVwX2FyZ3MgZGlyZWN0bHkuICBBZGQgbG9uZyBkb3VibGUKKwlyZXR1cm4gdmFsdWUgc3VwcG9ydC4KKwkqIHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYyAoZmZpX3ByZXBfYXJncyk6IERvdWJsZSBhcmcgaW5jcmVtZW50CisJYXBwbGllcyB0byBGRklfVFlQRV9ET1VCTEUuICBDb3JyZWN0IGZwcl9iYXNlIGluY3JlbWVudCB0eXBvLgorCVNlcGFyYXRlIEZGSV9UWVBFX1NJTlQzMiBhbmQgRkZJX1RZUEVfVUlOVDMyIGNhc2VzLgorCShmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IE9ubHkgMTYgYnl0ZSBzdGFjayBhbGlnbm1lbnQgaW4gNjQgYml0CisJbW9kZS4KKwkoZmZpX2Nsb3N1cmVfaGVscGVyX0RBUldJTik6IFJlbW92ZSBuZiBhbmQgbmcgY291bnRlcnMuICBNb3ZlIHRlbXAKKwlpbnRvIGNhc2UuCisJKiBzcmMvcG93ZXJwYy9haXhfY2xvc3VyZS5TOiBNYWludGFpbiAxNiBieXRlIHN0YWNrIGFsaWdubWVudC4KKwlBbGxvY2F0ZSByZXN1bHQgYXJlYSBiZXR3ZWVuIHBhcmFtcyBhbmQgRlBScy4KKworMjAwOS0xMS0zMCAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgorCisJUFIgdGFyZ2V0LzM1NDg0CisJKiBzcmMvcG93ZXJwYy9mZml0YXJnZXQuaCAoUE9XRVJQQzY0KTogRGVmaW5lIGZvciBQUEM2NCBMaW51eCBhbmQKKwlBSVg2NC4KKwkqIHNyYy9wb3dlcnBjL2FpeC5TOiBJbXBsZW1lbnQgQUlYNjQgdmVyc2lvbi4KKwkqIHNyYy9wb3dlcnBjL2FpeF9jbG9zdXJlLlM6IEltcGxlbWVudCBBSVg2NCB2ZXJzaW9uLgorCShmZmlfY2xvc3VyZV9BU00pOiBVc2UgZXh0c2IsIGxoYSBhbmQgZGlzcGxhbWVudCBhZGRyZXNzZXMuCisJKiBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmMgKGZmaV9wcmVwX2FyZ3MpOiBJbXBsZW1lbnQgQUlYNjQKKwlzdXBwb3J0LgorCShmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IFNhbWUuCisJKGZmaV9jYWxsKTogU2FtZS4KKwkoZmZpX2Nsb3N1cmVfaGVscGVyX0RBUldJTik6IFNhbWUuCisKKzIwMDktMTEtMDIgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5vcmc+CisKKwlQUiBsaWJmZmkvNDE5MDgKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC90ZXN0Y2xvc3VyZS5jOiBOZXcgdGVzdC4KKworMjAwOS0wOS0yOCAgS2FpIFRpZXR6ICA8a2FpLnRpZXR6QG9uZXZpc2lvbi5jb20+CisKKwkqIHNyYy94ODYvd2luNjQuUyAoX2ZmaV9jYWxsX3dpbjY0IHN0YWNrKTogUmVtb3ZlIGZvciBnbnUKKwlhc3NlbWJseSB2ZXJzaW9uIHVzZSBvZiBfX19jaGtzdGsuCisKKzIwMDktMDktMjMgIE1hdHRoaWFzIEtsb3NlICA8ZG9rb0B1YnVudHUuY29tPgorCisJUFIgbGliZmZpLzQwMjQyLCBQUiBsaWJmZmkvNDE0NDMKKwkqIHNyYy9hcm0vc3lzdi5TIChfX0FSTV9BUkNIX18pOiBEZWZpbmUgZm9yIHByb2Nlc3NvcnMKKwlfX0FSTV9BUkNIXzZUMl9fLCBfX0FSTV9BUkNIXzZNX18sIF9fQVJNX0FSQ0hfN19fLAorCV9fQVJNX0FSQ0hfN0FfXywgX19BUk1fQVJDSF83Ul9fLCBfX0FSTV9BUkNIXzdNX18uCisJQ2hhbmdlIHRoZSBjb25kaXRpb25hbHMgdG8gX19TT0ZURlBfXyB8fCBfX0FSTV9FQUJJX18KKwlmb3IgLW1mbG9hdC1hYmk9c29mdGZwIHRvIHdvcmsuCisKKzIwMDktMDktMTcgIExvcmVuIEouIFJpdHRsZSAgPGxqcml0dGxlQGFjbS5vcmc+CisKKwlQUiB0ZXN0c3VpdGUvMzI4NDMgKHN0cmlrZXMgYWdhaW4pCisJKiBzcmMveDg2L2ZmaS5jIChmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IEFkZCBYODZfRlJFRUJTRCB0bworCWVuYWJsZSBwcm9wZXIgZXh0ZW5zaW9uIG9uIGNoYXIgYW5kIHNob3J0LgorCisyMDA5LTA5LTE1ICBEYXZpZCBEYW5leSAgPGRkYW5leUBjYXZpdW1uZXR3b3Jrcy5jb20+CisKKwkqIHNyYy9qYXZhX3Jhd19hcGkuYyAoZmZpX2phdmFfcmF3X3RvX3J2YWx1ZSk6IFJlbW92ZSBzcGVjaWFsCisJaGFuZGxpbmcgZm9yIEZGSV9UWVBFX1BPSU5URVIuCisJKiBzcmMvbWlwcy9mZml0YXJnZXQuaCAoRkZJX1RZUEVfU1RSVUNUX0RfU09GVCwKKwlGRklfVFlQRV9TVFJVQ1RfRl9TT0ZULCBGRklfVFlQRV9TVFJVQ1RfRERfU09GVCwKKwlGRklfVFlQRV9TVFJVQ1RfRkZfU09GVCwgRkZJX1RZUEVfU1RSVUNUX0ZEX1NPRlQsCisJRkZJX1RZUEVfU1RSVUNUX0RGX1NPRlQsIEZGSV9UWVBFX1NUUlVDVF9TT0ZUKTogTmV3IGRlZmluZXMuCisJKEZGSV9OMzJfU09GVF9GTE9BVCwgRkZJX042NF9TT0ZUX0ZMT0FUKTogTmV3IGZmaV9hYmkgZW51bWVyYXRpb25zLgorCShlbnVtIGZmaV9hYmkpOiBTZXQgRkZJX0RFRkFVTFRfQUJJIGZvciBzb2Z0LWZsb2F0LgorCSogc3JjL21pcHMvbjMyLlMgKGZmaV9jYWxsX04zMik6IEFkZCBoYW5kbGluZyBmb3Igc29mdC1mbG9hdAorCXN0cnVjdHVyZSBhbmQgcG9pbnRlciByZXR1cm5zLgorCShmZmlfY2xvc3VyZV9OMzIpOiBBZGQgaGFuZGxpbmcgZm9yIHBvaW50ZXIgcmV0dXJucy4KKwkqIHNyYy9taXBzL2ZmaS5jIChmZmlfcHJlcF9hcmdzLCBjYWxjX24zMl9zdHJ1Y3RfZmxhZ3MsCisJY2FsY19uMzJfcmV0dXJuX3N0cnVjdF9mbGFncyk6IEhhbmRsZSBzb2Z0LWZsb2F0LgorCShmZmlfcHJlcF9jaWZfbWFjaGRlcCk6ICBIYW5kbGUgc29mdC1mbG9hdCwgZml4IHBvaW50ZXIgaGFuZGxpbmcuCisJKGZmaV9jYWxsX04zMik6IERlY2xhcmUgcHJvcGVyIGFyZ3VtZW50IHR5cGVzLgorCShmZmlfY2FsbCwgY29weV9zdHJ1Y3RfTjMyLCBmZmlfY2xvc3VyZV9taXBzX2lubmVyX04zMik6IEhhbmRsZQorCXNvZnQtZmxvYXQuCisKKzIwMDktMDgtMjQgIFJhbGYgV2lsZGVuaHVlcyAgPFJhbGYuV2lsZGVuaHVlc0BnbXguZGU+CisKKwkqIGNvbmZpZ3VyZS5hYyAoQUNfUFJFUkVRKTogQnVtcCB0byAyLjY0LgorCisyMDA5LTA4LTIyICBSYWxmIFdpbGRlbmh1ZXMgIDxSYWxmLldpbGRlbmh1ZXNAZ214LmRlPgorCisJKiBNYWtlZmlsZS5hbSAoaW5zdGFsbC1odG1sLCBpbnN0YWxsLXBkZik6IFJlbW92ZS4KKwkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCisJKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKwkqIGFjbG9jYWwubTQ6IFJlZ2VuZXJhdGUuCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisJKiBmZmljb25maWcuaC5pbjogUmVnZW5lcmF0ZS4KKwkqIGluY2x1ZGUvTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisJKiBtYW4vTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisJKiB0ZXN0c3VpdGUvTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisKKzIwMTEtMDgtMjIgIEphc3BlciBMaWV2aXNzZSBBZHJpYWFuc2UgPGphc3BlckBvcGVuYnNkLm9yZz4KKworCSogY29uZmlndXJlLmFjOiBBZGQgT3BlbkJTRC9ocHBhIGFuZCBPcGVuQlNEL3Bvd2VycGMgc3VwcG9ydC4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKworMjAwOS0wNy0zMCAgUmFsZiBXaWxkZW5odWVzICA8UmFsZi5XaWxkZW5odWVzQGdteC5kZT4KKworCSogY29uZmlndXJlLmFjIChfQUNfQVJHX1ZBUl9QUkVDSU9VUyk6IFVzZSBtNF9yZW5hbWVfZm9yY2UuCisKKzIwMDktMDctMjQgIERhdmUgS29ybiAgPGRhdmUua29ybi5jeWd3aW5AZ21haWwuY29tPgorCisJUFIgbGliZmZpLzQwODA3CisJKiBzcmMveDg2L2ZmaS5jIChmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IEFsc28gdXNlIHNpZ24vemVyby1leHRlbmRpbmcKKwlyZXR1cm4gdHlwZXMgZm9yIFg4Nl9XSU4zMi4KKwkqIHNyYy94ODYvd2luMzIuUyAoX2ZmaV9jYWxsX1NZU1YpOiBIYW5kbGUgb21pdHRlZCByZXR1cm4gdHlwZXMuCisJKF9mZmlfY2FsbF9TVERDQUxMLCBfZmZpX2Nsb3N1cmVfU1lTViwgX2ZmaV9jbG9zdXJlX3Jhd19TWVNWLAorCV9mZmlfY2xvc3VyZV9TVERDQUxMKTogTGlrZXdpc2UuCisKKwkqIHNyYy9jbG9zdXJlcy5jIChpc19zZWxpbnV4X2VuYWJsZWQpOiBEZWZpbmUgdG8gY29uc3QgMCBmb3IgQ3lnd2luLgorCShkbG1tYXAsIGRsbXVubWFwKTogQWxzbyB1c2UgdGhlc2UgZnVuY3Rpb25zIG9uIEN5Z3dpbi4KKworMjAwOS0wNy0xMSAgUmljaGFyZCBTYW5kaWZvcmQgIDxyZHNhbmRpZm9yZEBnb29nbGVtYWlsLmNvbT4KKworCVBSIHRlc3RzdWl0ZS80MDY5OQorCVBSIHRlc3RzdWl0ZS80MDcwNworCVBSIHRlc3RzdWl0ZS80MDcwOQorCSogdGVzdHN1aXRlL2xpYi9saWJmZmktZGcuZXhwOiBSZXZlcnQgMjAwOS0wNy0wMiwgMjAwOS0wNy0wMSBhbmQKKwkyMDA5LTA2LTMwIGNvbW1pdHMuCisKKzIwMDktMDctMDEgIFJpY2hhcmQgU2FuZGlmb3JkICA8ci5zYW5kaWZvcmRAdWsuaWJtLmNvbT4KKworCSogdGVzdHN1aXRlL2xpYi9saWJmZmktZGcuZXhwIChsaWJmZmktaW5pdCk6IFNldCBsZF9saWJyYXJ5X3BhdGgKKwl0byAiIiBiZWZvcmUgYWRkaW5nIHBhdGhzLiAgKFRoaXMgcmVpbnN0YXRlcyBhbiBhc3NpZ25tZW50IHRoYXQKKwl3YXMgcmVtb3ZlZCBieSBteSAyMDA5LTA2LTMwIGNvbW1pdCwgYnV0IGNoYW5nZXMgdGhlIGluaXRpYWwKKwl2YWx1ZSBmcm9tICIuIiB0byAiIi4pCisKKzIwMDktMDctMDEgIEguSi4gTHUgIDxob25naml1Lmx1QGludGVsLmNvbT4KKworCVBSIHRlc3RzdWl0ZS80MDYwMQorCSogdGVzdHN1aXRlL2xpYi9saWJmZmktZGcuZXhwIChsaWJmZmktaW5pdCk6IFByb3Blcmx5IHNldAorCWdjY2Rpci4gIEFkanVzdCBsZF9saWJyYXJ5X3BhdGggZm9yIGdjYyBvbmx5IGlmIGdjY2RpciBpc24ndAorCWVtcHR5LgorCisyMDA5LTA2LTMwICBSaWNoYXJkIFNhbmRpZm9yZCAgPHIuc2FuZGlmb3JkQHVrLmlibS5jb20+CisKKwkqIHRlc3RzdWl0ZS9saWIvbGliZmZpLWRnLmV4cCAobGliZmZpLWluaXQpOiBEb24ndCBhZGQgIi4iCisJdG8gbGRfbGlicmFyeV9wYXRoLiAgVXNlIGFkZF9wYXRoLiAgQWRkIGp1c3QgZmluZF9saWJnY2NfcworCXRvIGxkX2xpYnJhcnlfcGF0aCwgbm90IGV2ZXJ5IGxpYmdjYyBtdWx0aWxpYiBkaXJlY3RvcnkuCisKKzIwMDktMDYtMTYgIFdpbSBMZXdpcyAgPHdpbWxAaGhoaC5vcmc+CisKKwkqIHNyYy9wb3dlcnBjL2ZmaS5jOiBBdm9pZCBjbG9iYmVyaW5nIGNyMyBhbmQgY3I0LCB3aGljaCBhcmUKKwlzdXBwb3NlZCB0byBiZSBjYWxsZWUtc2F2ZWQuCisJKiBzcmMvcG93ZXJwYy9zeXN2LlMgKHNtYWxsX3N0cnVjdF9yZXR1cm5fdmFsdWUpOiBGaXggb3ZlcnJ1biBvZgorCXJldHVybiBidWZmZXIgZm9yIG9kZC1zaXplIHN0cnVjdHMuCisKKzIwMDktMDYtMTYgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5vcmc+CisKKwlQUiBsaWJmZmkvNDA0NDQKKwkqIHRlc3RzdWl0ZS9saWIvbGliZmZpLWRnLmV4cCAobGliZmZpX3RhcmdldF9jb21waWxlKTogQWRkCisJYWxsb3dfc3RhY2tfZXhlY3V0ZSBmb3IgRGFyd2luLgorCisyMDA5LTA2LTE2ICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KKworCSogY29uZmlndXJlLmFjIChUQVJHRVRESVIpOiBBZGQgbWlzc2luZyBibGFuayBsaW5lcy4KKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKworMjAwOS0wNi0xNiAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDY0LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50NjQuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGVfdmEuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3Vsb25nbG9uZy5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fbGwxLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X21lZGl1bTIuYzogRml4IHByaW50ZiBmb3JtYXQKKwlzcGVjaWZpZXJzLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2ZmaXRlc3QuaCwKKwl0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvZmZpdGVzdGN4eC5oIChQUklkTEwsIFBSSXVMTCk6IERlZmluZS4KKworMjAwOS0wNi0xNSAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9lcnJfYmFkX3R5cGVkZWYuYzogeGZhaWwgZXZlcnl3aGVyZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9lcnJfYmFkX2FiaS5jOiBMaWtld2lzZS4KKworMjAwOS0wNi0xMiAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+CisKKwkqIE1ha2VmaWxlLmFtOiBSZW1vdmUgaW5mb19URVhJTkZPUy4KKworMjAwOS0wNi0xMiAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+CisKKwkqIENoYW5nZUxvZy5saWJmZmk6IHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDY0LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50NjQuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3Vsb25nbG9uZy5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fbGwxLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X21lZGl1bTIuYzogRml4IHByaW50ZiBmb3JtYXQKKwlzcGVjaWZpZXJzLgorCXRlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC91bndpbmR0ZXN0LmNjOiBpbmNsdWRlIHN0ZGludC5oLgorCisyMDA5LTA2LTExICBUaW1vdGh5IFdhbGwgIDx0d2FsbEB1c2Vycy5zZi5uZXQ+CisKKwkqIE1ha2VmaWxlLmFtLAorCWNvbmZpZ3VyZS5hYywKKwlpbmNsdWRlL2ZmaS5oLmluLAorCWluY2x1ZGUvZmZpX2NvbW1vbi5oLAorCXNyYy9jbG9zdXJlcy5jLAorCXNyYy9kbG1hbGxvYy5jLAorCXNyYy94ODYvZmZpLmMsCisJc3JjL3g4Ni9mZml0YXJnZXQuaCwKKwlzcmMveDg2L3dpbjY0LlMgKG5ldyksCisJUkVBRE1FOiBBZGRlZCB3aW42NCBzdXBwb3J0IChtaW5ndyBvciBNU1ZDKQorCSogTWFrZWZpbGUuaW4sCisJaW5jbHVkZS9NYWtlZmlsZS5pbiwKKwltYW4vTWFrZWZpbGUuaW4sCisJdGVzdHN1aXRlL01ha2VmaWxlLmluLAorCWNvbmZpZ3VyZSwKKwlhY2xvY2FsLm00OiBSZWdlbmVyYXRlZAorCSogbHRjZi1jLnNoOiBwcm9wZXJseSBlc2NhcGUgY3lnd2luL3czMiBwYXRoCisJKiBtYW4vZmZpX2NhbGwuMzogQ2xhcmlmeSBzaXplIHJlcXVpcmVtZW50cyBmb3IgcmV0dXJuIHZhbHVlLgorCSogc3JjL3g4Ni9mZmk2NC5jOiBGaXggZmlsZW5hbWUgaW4gY29tbWVudC4KKwkqIHNyYy94ODYvd2luMzIuUzogUmVtb3ZlIHVudXNlZCBleHRlcm4uCisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMC5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMi5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMy5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNC5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNi5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX3N0ZGNhbGwuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzEyYnl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTZieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xOGJ5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE5Ynl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMV8xYnl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjBieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yMGJ5dGUxLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yNGJ5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzJieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zXzFieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zYnl0ZTEuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zYnl0ZTIuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc180XzFieXRlLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNGJ5dGUuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc181XzFfYnl0ZS5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzVieXRlLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNjRieXRlLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNl8xX2J5dGUuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc182Ynl0ZS5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzdfMV9ieXRlLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfN2J5dGUuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc184Ynl0ZS5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzlieXRlMS5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzlieXRlMi5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2RvdWJsZS5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2Zsb2F0LmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fbG9uZ2RvdWJsZS5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGVfc3BsaXQuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlX3NwbGl0Mi5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3BvaW50ZXIuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50MTYuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50MzIuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50NjQuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50MTYuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50MzIuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50NjQuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kYmxzX3N0cnVjdC5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2RvdWJsZS5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2RvdWJsZV92YS5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2Zsb2F0LmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbG9uZ2RvdWJsZS5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGVfdmEuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV9zY2hhci5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3NzaG9ydC5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3NzaG9ydGNoYXIuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV91Y2hhci5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3VzaG9ydC5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3VzaG9ydGNoYXIuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19wb2ludGVyLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfcG9pbnRlcl9zdGFjay5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NjaGFyLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc2ludC5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NzaG9ydC5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VjaGFyLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWludC5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3Vsb25nbG9uZy5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VzaG9ydC5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZXJyX2JhZF9hYmkuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Vycl9iYWRfdHlwZWRlZi5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmxvYXQyLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9odWdlX3N0cnVjdC5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdC5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDEuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QxMC5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDIuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QzLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0NC5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDUuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q2LmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Ny5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDguYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q5LmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9wcm9ibGVtMS5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2xkbC5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2xsMS5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbGFyZ2UuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X2xhcmdlMi5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbWVkaXVtLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9tZWRpdW0yLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL3Vud2luZHRlc3QuY2M6IHVzZSBmZmlfY2xvc3VyZV9hbGxvYyBpbnN0ZWFkCisJb2YgY2hlY2tpbmcgZm9yIE1NQVAuICBVc2UgaW50cHRyX3QgaW5zdGVhZCBvZiBsb25nIGNhc3RzLgorCisyMDA5LTA2LTExICBLYXogS29qaW1hICA8a2tvamltYUBnY2MuZ251Lm9yZz4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19sb25nZG91YmxlX3ZhLmM6IEFkZCB4ZmFpbCBzaCotKi1saW51eC0qLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Vycl9iYWRfYWJpLmM6IEFkZCB4ZmFpbCBzaCotKi0qLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Vycl9iYWRfdHlwZWRlZi5jOiBMaWtld2lzZS4KKworMjAwOS0wNi0wOSAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+CisKKwkqIHNyYy94ODYvZnJlZWJzZC5TOiBBZGQgbWlzc2luZyBmaWxlLgorCisyMDA5LTA2LTA4ICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KKworCUltcG9ydCBmcm9tIGxpYmZmaSAzLjAuODoKKworCSogZG9jL2xpYmZmaS50ZXhpOiBOZXcgZmlsZS4KKwkqIGRvYy9saWJmZmkuaW5mbzogTGlrZXdpc2UuCisJKiBkb2Mvc3RhbXAtdnRpOiBMaWtld2lzZS4KKwkqIG1hbi9NYWtlZmlsZS5hbTogTmV3IGZpbGUuCisJKiBtYW4vZmZpX2NhbGwuMzogTmV3IGZpbGUuCisKKwkqIE1ha2VmaWxlLmFtIChFWFRSQV9ESVNUKTogQWRkIHNyYy94ODYvZGFyd2luNjQuUywKKwlzcmMvZGxtYWxsb2MuYy4KKwkobm9kaXN0X2xpYmZmaV9sYV9TT1VSQ0VTKTogQWRkIFg4Nl9GUkVFQlNELgorCisJKiBjb25maWd1cmUuYWM6IEJ1bXAgdmVyc2lvbiB0byAzLjAuOC4KKwlwYXJpc2MqLSotbGludXgqOiBBZGQuCisJaTM4Ni0qLWZyZWVic2QqIHwgaTM4Ni0qLW9wZW5ic2QqOiBBZGQuCisJcG93ZXJwYy0qLWJlb3MqOiBBZGQuCisJQU1fQ09ORElUSU9OQUwgWDg2X0ZSRUVCU0Q6IEFkZC4KKwlBQ19DT05GSUdfRklMRVM6IEFkZCBtYW4vTWFrZWZpbGUuCisKKwkqIGluY2x1ZGUvZmZpLmguaW4gKEZGSV9GTik6IENoYW5nZSB2b2lkICgqKSgpIHRvIHZvaWQgKCopKHZvaWQpLgorCisyMDA5LTA2LTA4ICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KKworCSogUkVBRE1FOiBJbXBvcnQgZnJvbSBsaWJmZmkgMy4wLjguCisKKzIwMDktMDYtMDggIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZXJyX2JhZF9hYmkuYzogQWRkIHhmYWlscy4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbG9uZ2RvdWJsZV92YS5jOiBBZGQgeGZhaWxzLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kYmxzX3N0cnVjdC5jOiBBZGQgeGZhaWwgeDg2XzY0LSotbGludXgtKi4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9lcnJfYmFkX3R5cGVkZWYuYzogQWRkIHhmYWlscy4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X21lZGl1bTIuYzogQWRkIF9fVU5VU0VEX18gdG8gYXJncy4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9tZWRpdW0uYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbGFyZ2UyLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X2xhcmdlLmM6ICBMaWtld2lzZS4KKworMjAwOC0xMi0yNiAgVGltb3RoeSBXYWxsICA8dHdhbGxAdXNlcnMuc2YubmV0PgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGVfdmEuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGVfc3BsaXQuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGVfc3BsaXQyLmM6IG1hcmsgZXhwZWN0ZWQKKwlmYWlsdXJlcyBvbiB4ODZfNjQgY3lnd2luL21pbmd3LgorCisyMDA4LTEyLTIyICBUaW1vdGh5IFdhbGwgIDx0d2FsbEB1c2Vycy5zZi5uZXQ+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMC5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMi5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMy5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNC5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNi5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2xvY19mbjAuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9zdGRjYWxsLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9wb2ludGVyLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19wb2ludGVyLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19wb2ludGVyX3N0YWNrLmM6IHVzZSBwb3J0YWJsZSBjYXN0IGZyb20KKwlwb2ludGVyIHRvIGludGVnZXIgKGludHB0cl90KS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbG9uZ2RvdWJsZS5jOiBkaXNhYmxlIGZvciB3aW42NC4KKworMjAwOC0wNy0yNCAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJlZGhhdC5jb20+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZGJsc19zdHJ1Y3QuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2RvdWJsZV92YS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbG9uZ2RvdWJsZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbG9uZ2RvdWJsZV92YS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfcG9pbnRlci5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfcG9pbnRlcl9zdGFjay5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9lcnJfYmFkX2FiaS5jOiBDbGVhbiB1cCBmYWlsdXJlcyBmcm9tCisJY29tcGlsZXIgd2FybmluZ3MuCisKKzIwMDgtMDMtMDQgIEFudGhvbnkgR3JlZW4gIDxncmVlbkByZWRoYXQuY29tPgorCSAgICBCbGFrZSBDaGFmZmluCisJICAgIGhvc0B0YW1hbmVnaS5vcmcKKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlX3NwbGl0Mi5jCisJICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGVfc3BsaXQuYworCSAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kYmxzX3N0cnVjdC5jCisJICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2RvdWJsZV92YS5jCisJICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGUuYworCSAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19sb25nZG91YmxlX3ZhLmMKKwkgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfcG9pbnRlci5jCisJICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3BvaW50ZXJfc3RhY2suYworCSAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Vycl9iYWRfYWJpLmMKKwkgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9lcnJfYmFkX3R5cGVkZWYuYworCSAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X2xhcmdlMi5jCisJICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbGFyZ2UuYworCSAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X21lZGl1bTIuYworCSAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X21lZGl1bS5jOiBOZXcgdGVzdHMgZnJvbSBBcHBsZS4KKworMjAwOS0wNi0wNSAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+CisKKwkqIHNyYy94ODYvZmZpdGFyZ2V0LmgsIHNyYy94ODYvZmZpLmM6IE1lcmdlIHN0ZGNhbGwgY2hhbmdlcyBmcm9tCisJbGliZmZpLgorCisyMDA5LTA2LTA0ICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KKworCSogc3JjL3g4Ni9mZml0YXJnZXQuaCwgc3JjL3g4Ni93aW4zMi5TLCBzcmMveDg2L2ZmaS5jOiBCYWNrIG91dAorCXN0ZGNhbGwgY2hhbmdlcy4KKworMjAwOC0wMi0yNiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJlZGhhdC5jb20+CisJICAgIFRob21hcyBIZWxsZXIgIDx0aGVsbGVyQGN0eXBlcy5vcmc+CisKKwkqIHNyYy94ODYvZmZpLmMgKGZmaV9jbG9zdXJlX1NZU1ZfaW5uZXIpOiBDaGFuZ2UgQysrIGNvbW1lbnQgdG8gQworCWNvbW1lbnQuCisKKzIwMDgtMDItMDMgIFRpbW90aHkgV2FsbCAgPHR3YWxsQHVzZXJzLnNmLm5ldD4KKworCSogc3JjL3g4Ni9mZmkuYyAoRkZJX0lOSVRfVFJBTVBPTElORV9TVERDQUxMKTogQ2FsY3VsYXRlIGp1bXAgcmV0dXJuCisJICBvZmZzZXQgYmFzZWQgb24gY29kZSBwb2ludGVyLCBub3QgZGF0YSBwb2ludGVyLgorCisyMDA4LTAxLTMxICBUaW1vdGh5IFdhbGwgPHR3YWxsQHVzZXJzLnNmLm5ldD4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfc3RkY2FsbC5jOiBBZGQgdGVzdCBmb3Igc3RkY2FsbAorCWNsb3N1cmVzLgorCSogc3JjL3g4Ni9mZml0YXJnZXQuaDogSW5jcmVhc2Ugc2l6ZSBvZiB0cmFtcG9saW5lIGZvciBzdGRjYWxsCisJY2xvc3VyZXMuCisJKiBzcmMveDg2L3dpbjMyLlM6IEFkZCBhc3NlbWJseSBmb3Igc3RkY2FsbCBjbG9zdXJlLgorCSogc3JjL3g4Ni9mZmkuYzogSW5pdGlhbGl6ZSBzdGRjYWxsIGNsb3N1cmUgdHJhbXBvbGluZS4KKworMjAwOS0wNi0wNCAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+CisKKwkqIGluY2x1ZGUvZmZpLmguaW46IENoYW5nZSB2b2lkICgqKSgpIHRvIHZvaWQgKCopKHZvaWQpLgorCSogc3JjL3g4Ni9mZmkuYzogTGlrZXdpc2UuCisKKzIwMDktMDYtMDQgIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorCisJKiBzcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TOiBJbnNlcnQgbGljZW5jZSBoZWFkZXIuCisJKiBzcmMvcG93ZXJwYy9saW51eDY0X2Nsb3N1cmUuUzogTGlrZXdpc2UuCisJKiBzcmMvbTY4ay9zeXN2LlM6IExpa2V3aXNlLgorCisJKiBzcmMvc2g2NC9mZmkuYzogQ2hhbmdlIHZvaWQgKCopKCkgdG8gdm9pZCAoKikodm9pZCkuCisJKiBzcmMvcG93ZXJwYy9mZmkuYzogTGlrZXdpc2UuCisJKiBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmM6IExpa2V3aXNlLgorCSogc3JjL20zMnIvZmZpLmM6IExpa2V3aXNlLgorCSogc3JjL3NoNjQvZmZpLmM6IExpa2V3aXNlLgorCSogc3JjL3g4Ni9mZmk2NC5jOiBMaWtld2lzZS4KKwkqIHNyYy9hbHBoYS9mZmkuYzogTGlrZXdpc2UuCisJKiBzcmMvYWxwaGEvb3NmLlM6IExpa2V3aXNlLgorCSogc3JjL2Zydi9mZmkuYzogTGlrZXdpc2UuCisJKiBzcmMvczM5MC9mZmkuYzogTGlrZXdpc2UuCisJKiBzcmMvcGEvZmZpLmM6IExpa2V3aXNlLgorCSogc3JjL3BhL2hwdXgzMi5TOiBMaWtld2lzZS4KKwkqIHNyYy9pYTY0L3VuaXguUzogTGlrZXdpc2UuCisJKiBzcmMvaWE2NC9mZmkuYzogTGlrZXdpc2UuCisJKiBzcmMvc3BhcmMvZmZpLmM6IExpa2V3aXNlLgorCSogc3JjL21pcHMvZmZpLmM6IExpa2V3aXNlLgorCSogc3JjL3NoL2ZmaS5jOiBMaWtld2lzZS4KKworMjAwOC0wMi0xNSAgRGF2aWQgRGFuZXkgIDxkZGFuZXlAYXZ0cmV4LmNvbT4KKworCSogc3JjL21pcHMvZmZpLmMgKFVTRV9fQlVJTFRJTl9fX0NMRUFSX0NBQ0hFKToKKwlEZWZpbmUgKGNvbmRpdGlvbmFsbHkpLCBhbmQgdXNlIGl0IHRvIGluY2x1ZGUgY2FjaGVjdGwuaC4KKwkoZmZpX3ByZXBfY2xvc3VyZV9sb2MpOiBGaXggY2FjaGUgZmx1c2hpbmcuCisJKiBzcmMvbWlwcy9mZml0YXJnZXQuaCAoX0FCSU4zMiwgX0FCSTY0LCBfQUJJTzMyKTogRGVmaW5lLgorCisyMDA5LTA2LTA0ICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KKworCWluY2x1ZGUvZmZpLmguaW4sCisJc3JjL2FybS9mZml0YXJnZXQuaCwKKwlzcmMvYXJtL2ZmaS5jLAorCXNyYy9hcm0vc3lzdi5TLAorCXNyYy9wb3dlcnBjL2ZmaXRhcmdldC5oLAorCXNyYy9jbG9zdXJlcy5jLAorCXNyYy9zaDY0L2ZmaXRhcmdldC5oLAorCXNyYy9zaDY0L2ZmaS5jLAorCXNyYy9zaDY0L3N5c3YuUywKKwlzcmMvdHlwZXMuYywKKwlzcmMveDg2L2ZmaTY0LmMsCisJc3JjL3g4Ni9mZml0YXJnZXQuaCwKKwlzcmMveDg2L3dpbjMyLlMsCisJc3JjL3g4Ni9kYXJ3aW4uUywKKwlzcmMveDg2L2ZmaS5jLAorCXNyYy94ODYvc3lzdi5TLAorCXNyYy94ODYvdW5peDY0LlMsCisJc3JjL2FscGhhL2ZmaXRhcmdldC5oLAorCXNyYy9hbHBoYS9mZmkuYywKKwlzcmMvYWxwaGEvb3NmLlMsCisJc3JjL202OGsvZmZpdGFyZ2V0LmgsCisJc3JjL2Zydi9mZml0YXJnZXQuaCwKKwlzcmMvZnJ2L2ZmaS5jLAorCXNyYy9zMzkwL2ZmaXRhcmdldC5oLAorCXNyYy9zMzkwL3N5c3YuUywKKwlzcmMvY3Jpcy9mZml0YXJnZXQuaCwKKwlzcmMvcGEvbGludXguUywKKwlzcmMvcGEvZmZpdGFyZ2V0LmgsCisJc3JjL3BhL2ZmaS5jLAorCXNyYy9yYXdfYXBpLmMsCisJc3JjL2lhNjQvZmZpdGFyZ2V0LmgsCisJc3JjL2lhNjQvdW5peC5TLAorCXNyYy9pYTY0L2ZmaS5jLAorCXNyYy9pYTY0L2lhNjRfZmxhZ3MuaCwKKwlzcmMvamF2YV9yYXdfYXBpLmMsCisJc3JjL2RlYnVnLmMsCisJc3JjL3NwYXJjL3Y5LlMsCisJc3JjL3NwYXJjL2ZmaXRhcmdldC5oLAorCXNyYy9zcGFyYy9mZmkuYywKKwlzcmMvc3BhcmMvdjguUywKKwlzcmMvbWlwcy9mZml0YXJnZXQuaCwKKwlzcmMvbWlwcy9uMzIuUywKKwlzcmMvbWlwcy9vMzIuUywKKwlzcmMvbWlwcy9mZmkuYywKKwlzcmMvcHJlcF9jaWYuYywKKwlzcmMvc2gvZmZpdGFyZ2V0LmgsCisJc3JjL3NoL2ZmaS5jLAorCXNyYy9zaC9zeXN2LlM6IFVwZGF0ZSBsaWNlbnNlIHRleHQuCisKKzIwMDktMDUtMjIgIERhdmUgS29ybiAgPGRhdmUua29ybi5jeWd3aW5AZ21haWwuY29tPgorCisJKiBzcmMveDg2L3dpbjMyLlMgKF9mZmlfY2xvc3VyZV9TVERDQUxMKTogIE5ldyBmdW5jdGlvbi4KKwkoLmVoX2ZyYW1lKTogIEFkZCBGREUgZm9yIGl0LgorCisyMDA5LTA1LTIyICBEYXZlIEtvcm4gIDxkYXZlLmtvcm4uY3lnd2luQGdtYWlsLmNvbT4KKworCSogY29uZmlndXJlLmFjOiAgQWxzbyBjaGVjayBpZiBhc3NlbWJsZXIgc3VwcG9ydHMgcGMtcmVsYXRpdmUKKwlyZWxvY3Mgb24gWDg2X1dJTjMyIHRhcmdldHMuCisJKiBjb25maWd1cmU6ICBSZWdlbmVyYXRlLgorCSogc3JjL3g4Ni93aW4zMi5TIChmZmlfcHJlcF9hcmdzKTogIERlY2xhcmUgZXh0ZXJuLCBub3QgZ2xvYmFsLgorCShfZmZpX2NhbGxfU1lTVik6ICBBZGQgbWlzc2luZyBmdW5jdGlvbiB0eXBlIHN5bWJvbCAuZGVmIGFuZAorCWFkZCBFSCBtYXJrdXAgbGFiZWxzLgorCShfZmZpX2NhbGxfU1REQ0FMTCk6ICBMaWtld2lzZS4KKwkoX2ZmaV9jbG9zdXJlX1NZU1YpOiAgTGlrZXdpc2UuCisJKF9mZmlfY2xvc3VyZV9yYXdfU1lTVik6ICBMaWtld2lzZS4KKwkoLmVoX2ZyYW1lKTogIEFkZCBoYW5kLWNyYWZ0ZWQgRUggZGF0YS4KKworMjAwOS0wNC0wOSAgSmFrdWIgSmVsaW5layAgPGpha3ViQHJlZGhhdC5jb20+CisKKwkqIHRlc3RzdWl0ZS9saWIvbGliZmZpLWRnLmV4cDogQ2hhbmdlIGNvcHlyaWdodCBoZWFkZXIgdG8gcmVmZXIgdG8KKwl2ZXJzaW9uIDMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0byBwb2ludCByZWFkZXJzCisJYXQgdGhlIENPUFlJTkczIGZpbGUgYW5kIHRoZSBGU0YncyBsaWNlbnNlIHdlYiBwYWdlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2NhbGwuZXhwOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC9zcGVjaWFsLmV4cDogTGlrZXdpc2UuCisKKzIwMDktMDMtMDEgIFJhbGYgV2lsZGVuaHVlcyAgPFJhbGYuV2lsZGVuaHVlc0BnbXguZGU+CisKKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKworMjAwOC0xMi0xOCAgUmFpbmVyIE9ydGggIDxyb0BUZWNoRmFrLlVuaS1CaWVsZWZlbGQuREU+CisKKwlQUiBsaWJmZmkvMjYwNDgKKwkqIGNvbmZpZ3VyZS5hYyAoSEFWRV9BU19YODZfUENSRUwpOiBOZXcgdGVzdC4KKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKwkqIGZmaWNvbmZpZy5oLmluOiBSZWdlbmVyYXRlLgorCSogc3JjL3g4Ni9zeXN2LlMgWyFGRklfTk9fUkFXX0FQSV06IFByZWNhbGN1bGF0ZQorCVJBV19DTE9TVVJFX0NJRl9PRkZTRVQsIFJBV19DTE9TVVJFX0ZVTl9PRkZTRVQsCisJUkFXX0NMT1NVUkVfVVNFUl9EQVRBX09GRlNFVCBmb3IgdGhlIFNvbGFyaXMgMTAveDg2IGFzc2VtYmxlci4KKwkoLmVoX2ZyYW1lKTogT25seSB1c2UgU1lNQk9MLS4gaWZmIEhBVkVfQVNfWDg2X1BDUkVMLgorCSogc3JjL3g4Ni91bml4NjQuUyAoLkxzdG9yZV90YWJsZSk6IE1vdmUgdG8gLnRleHQgc2VjdGlvbi4KKwkoLkxsb2FkX3RhYmxlKTogTGlrZXdpc2UuCisJKC5laF9mcmFtZSk6IE9ubHkgdXNlIFNZTUJPTC0uIGlmZiBIQVZFX0FTX1g4Nl9QQ1JFTC4KKworMjAwOC0xMi0xOCAgUmFsZiBXaWxkZW5odWVzICA8UmFsZi5XaWxkZW5odWVzQGdteC5kZT4KKworCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCisyMDA4LTExLTIxICBFcmljIEJvdGNhem91ICA8ZWJvdGNhem91QGFkYWNvcmUuY29tPgorCisJKiBzcmMvc3BhcmMvZmZpLmMgKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogQWRkIHN1cHBvcnQgZm9yCisJc2lnbmVkL3Vuc2lnbmVkIGludDgvMTYgcmV0dXJuIHZhbHVlcy4KKwkqIHNyYy9zcGFyYy92OC5TIChmZmlfY2FsbF92OCk6IExpa2V3aXNlLgorCShmZmlfY2xvc3VyZV92OCk6IExpa2V3aXNlLgorCisyMDA4LTA5LTI2ICBQZXRlciBPJ0dvcm1hbiAgPHBvZ21hQHRoZXdyaXR0ZW53b3JkLmNvbT4KKwkgICAgU3RldmUgRWxsY2V5ICA8c2plQGN1cC5ocC5jb20+CisKKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZSBmb3IgbmV3IGxpYnRvb2wuCisJKiBNYWtlZmlsZS5pbjogRGl0dG8uCisJKiBpbmNsdWRlL01ha2VmaWxlLmluOiBEaXR0by4KKwkqIGFjbG9jYWwubTQ6IERpdHRvLgorCisyMDA4LTA4LTI1ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXoub3JnPgorCisJKiBzcmMvcG93ZXJwYy9mZml0YXJnZXQuaCAoZmZpX2FiaSk6IEFkZCBGRklfTElOVVggYW5kCisJRkZJX0xJTlVYX1NPRlRfRkxPQVQgdG8gdGhlIFBPV0VSUENfRlJFRUJTRCBlbnVtLgorCUFkZCBub3RlIGFib3V0IGZsYWcgYml0cyB1c2VkIGZvciBGRklfU1lTVl9UWVBFX1NNQUxMX1NUUlVDVC4KKwlBZGp1c3QgY29weXJpZ2h0IG5vdGljZS4KKwkqIHNyYy9wb3dlcnBjL2ZmaS5jOiBBZGQgdHdvIG5ldyBmbGFncyB0byBpbmRpY2F0ZSBpZiB3ZSBoYXZlIG9uZQorCXJlZ2lzdGVyIG9yIHR3byByZWdpc3RlciB0byB1c2UgZm9yIEZGSV9TWVNWIHN0cnVjdHMuCisJKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogUGFzcyB0aGUgcmlnaHQgcmVnaXN0ZXIgZmxhZyBpbnRyb2R1Y2VkIGFib3ZlLgorCShmZmlfY2xvc3VyZV9oZWxwZXJfU1lTVik6IEZpeCB0aGUgcmV0dXJuIHR5cGUgZm9yCisJRkZJX1NZU1ZfVFlQRV9TTUFMTF9TVFJVQ1QuIENvbW1lbnQuCisJQWRqdXN0IGNvcHlyaWdodCBub3RpY2UuCisKKzIwMDgtMDctMTYgIEtheiBLb2ppbWEgIDxra29qaW1hQGdjYy5nbnUub3JnPgorCisJKiBzcmMvc2gvZmZpLmMgKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKTogVHVybiBJTlNOIGludG8gYW4gdW5zaWduZWQKKwlpbnQuCisKKzIwMDgtMDYtMTcgIFJhbGYgV2lsZGVuaHVlcyAgPFJhbGYuV2lsZGVuaHVlc0BnbXguZGU+CisKKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKwkqIGluY2x1ZGUvTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisJKiB0ZXN0c3VpdGUvTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisKKzIwMDgtMDYtMDcgIEpvc2VwaCBNeWVycyAgPGpvc2VwaEBjb2Rlc291cmNlcnkuY29tPgorCisJKiBjb25maWd1cmUuYWMgKHBhcmlzYyotKi1saW51eCosIHBvd2VycGMtKi1zeXN2KiwKKwlwb3dlcnBjLSotYmVvcyopOiBSZW1vdmUuCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisKKzIwMDgtMDUtMDkgIEp1bGlhbiBCcm93biAgPGp1bGlhbkBjb2Rlc291cmNlcnkuY29tPgorCisJKiBNYWtlZmlsZS5hbSAoTFRMREZMQUdTKTogTmV3LgorCShsaWJmZmlfbGFfTERGTEFHUyk6IFVzZSBhYm92ZS4KKwkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCisyMDA4LTA0LTE4ICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgorCisJUFIgYm9vdHN0cmFwLzM1NDU3CisJKiBhY2xvY2FsLm00OiBSZWdlbmVyYXRlLgorCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCisyMDA4LTAzLTI2ICBLYXogS29qaW1hICA8a2tvamltYUBnY2MuZ251Lm9yZz4KKworCSogc3JjL3NoL3N5c3YuUzogQWRkIC5ub3RlLkdOVS1zdGFjayBvbiBMaW51eC4KKwkqIHNyYy9zaDY0L3N5c3YuUzogTGlrZXdpc2UuCisKKzIwMDgtMDMtMjYgIERhbmllbCBKYWNvYm93aXR6ICA8ZGFuQGRlYmlhbi5vcmc+CisKKwkqIHNyYy9hcm0vc3lzdi5TOiBGaXggQVJNIGNvbW1lbnQgbWFya2VyLgorCisyMDA4LTAzLTI2ICBKYWt1YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNvbT4KKworCSogc3JjL2FscGhhL29zZi5TOiBBZGQgLm5vdGUuR05VLXN0YWNrIG9uIExpbnV4LgorCSogc3JjL3MzOTAvc3lzdi5TOiBMaWtld2lzZS4KKwkqIHNyYy9wb3dlcnBjL3BwY19jbG9zdXJlLlM6IExpa2V3aXNlLgorCSogc3JjL3Bvd2VycGMvc3lzdi5TOiBMaWtld2lzZS4KKwkqIHNyYy94ODYvdW5peDY0LlM6IExpa2V3aXNlLgorCSogc3JjL3g4Ni9zeXN2LlM6IExpa2V3aXNlLgorCSogc3JjL3NwYXJjL3Y4LlM6IExpa2V3aXNlLgorCSogc3JjL3NwYXJjL3Y5LlM6IExpa2V3aXNlLgorCSogc3JjL202OGsvc3lzdi5TOiBMaWtld2lzZS4KKwkqIHNyYy9hcm0vc3lzdi5TOiBMaWtld2lzZS4KKworMjAwOC0wMy0xNiAgUmFsZiBXaWxkZW5odWVzICA8UmFsZi5XaWxkZW5odWVzQGdteC5kZT4KKworCSogYWNsb2NhbC5tNDogUmVnZW5lcmF0ZS4KKwkqIGNvbmZpZ3VyZTogTGlrZXdpc2UuCisJKiBNYWtlZmlsZS5pbjogTGlrZXdpc2UuCisJKiBpbmNsdWRlL01ha2VmaWxlLmluOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9NYWtlZmlsZS5pbjogTGlrZXdpc2UuCisKKzIwMDgtMDItMTIgIEJqb2VybiBLb2VuaWcgIDxia29lbmlnQGFscGhhLXRpZXJjaGVuLmRlPgorCSAgICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXoub3JnPgorCisJKiBjb25maWd1cmUuYWM6IEFkZCBhbWQ2NC0qLWZyZWVic2QqIHRhcmdldC4KKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKworMjAwOC0wMS0zMCAgSC5KLiBMdSAgPGhvbmdqaXUubHVAaW50ZWwuY29tPgorCisJUFIgbGliZmZpLzM0NjEyCisJKiBzcmMveDg2L3N5c3YuUyAoZmZpX2Nsb3N1cmVfU1lTVik6IFBvcCA0IGJ5dGUgZnJvbSBzdGFjayB3aGVuCisJcmV0dXJuaW5nIHN0cnVjdC4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2NhbGwuZXhwOiBBZGQgIi1PMiAtZm9taXQtZnJhbWUtcG9pbnRlciIKKwl0ZXN0cy4KKworMjAwOC0wMS0yNCAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgorCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisKKzIwMDgtMDEtMDYgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5vcmc+CisKKwkqIHNyYy94ODYvZmZpLmMgKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogRml4IHRoaW5rby4KKworMjAwOC0wMS0wNSAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6Lm9yZz4KKworCVBSIHRlc3RzdWl0ZS8zMjg0MworCSogc3JjL3g4Ni9mZmkuYyAoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBBZGQgY29kZSBmb3IKKwlzaWduZWQvdW5zaWduZWQgaW50OC8xNiBmb3IgWDg2X0RBUldJTi4KKwlVcGRhdGVkIGNvcHlyaWdodCBpbmZvLgorCUhhbmRsZSBvbmUgYW5kIHR3byBieXRlIHN0cnVjdHMgd2l0aCBzcGVjaWFsIGNpZi0+ZmxhZ3MuCisJKiBzcmMveDg2L2ZmaXRhcmdldC5oOiBBZGQgc3BlY2lhbCB0eXBlcyBmb3Igb25lIGFuZCB0d28gYnl0ZSBzdHJ1Y3RzLgorCVVwZGF0ZWQgY29weXJpZ2h0IGluZm8uCisJKiBzcmMveDg2L2Rhcndpbi5TIChmZmlfY2FsbF9TWVNWKTogUmV3cml0ZSB0byB1c2UgYSBqdW1wIHRhYmxlIGxpa2UKKwlzeXN2LlMKKwlSZW1vdmUgY29kZSB0byBwb3AgYXJncyBmcm9tIHRoZSBzdGFjayBhZnRlciBjYWxsLgorCVNwZWNpYWwtY2FzZSBzaWduZWQvdW5zaWduZWQgZm9yIGludDgvMTYsIG9uZSBhbmQgdHdvIGJ5dGUgc3RydWN0cy4KKwkoZmZpX2Nsb3N1cmVfcmF3X1NZU1YpOiBIYW5kbGUgRkZJX1RZUEVfVUlOVDgsCisJRkZJX1RZUEVfU0lOVDgsIEZGSV9UWVBFX1VJTlQxNiwgRkZJX1RZUEVfU0lOVDE2LCBGRklfVFlQRV9VSU5UMzIsCisJRkZJX1RZUEVfU0lOVDMyLgorCVVwZGF0ZWQgY29weXJpZ2h0IGluZm8uCisKKzIwMDctMTItMDggIERhdmlkIERhbmV5ICA8ZGRhbmV5QGF2dHJleC5jb20+CisKKwkqIHNyYy9taXBzL24zMi5TIChmZmlfY2FsbF9OMzIpOiAgUmVwbGFjZSBkYWRkIHdpdGggQUREVSwgZHN1YiB3aXRoCisJU1VCVSwgYWRkIHdpdGggQUREVSBhbmQgdXNlIHNtYWxsZXIgY29kZSBzZXF1ZW5jZXMuCisKKzIwMDctMTItMDcgIERhdmlkIERhbmV5ICA8ZGRhbmV5QGF2dHJleC5jb20+CisKKwkqIHNyYy9taXBzL2ZmaS5jIChmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IEhhbmRsZSBsb25nIGRvdWJsZSByZXR1cm4KKwl0eXBlLgorCisyMDA3LTEyLTA2ICBEYXZpZCBEYW5leSAgPGRkYW5leUBhdnRyZXguY29tPgorCisJKiBpbmNsdWRlL2ZmaS5oLmluIChGRklfU0laRU9GX0pBVkFfUkFXKTogRGVmaW5lIGlmIG5vdAlhbHJlYWR5CisJZGVmaW5lZC4KKwkoZmZpX2phdmFfcmF3KTogTmV3IHR5cGVkZWYuCisJKGZmaV9qYXZhX3Jhd19jYWxsLCBmZmlfamF2YV9wdHJhcnJheV90b19yYXcsCisJZmZpX2phdmFfcmF3X3RvX3B0cmFycmF5KTogQ2hhbmdlIHBhcmFtZXRlciB0eXBlcyBmcm9tIGZmaV9yYXcgdG8KKwlmZmlfamF2YV9yYXcuCisJKGZmaV9qYXZhX3Jhd19jbG9zdXJlKSA6IFNhbWUuCisJKGZmaV9wcmVwX2phdmFfcmF3X2Nsb3N1cmUsIGZmaV9wcmVwX2phdmFfcmF3X2Nsb3N1cmVfbG9jKTogQ2hhbmdlCisJcGFyYW1ldGVyIHR5cGVzLgorCSogc3JjL2phdmFfcmF3X2FwaS5jIChmZmlfamF2YV9yYXdfc2l6ZSk6ICBSZXBsYWNlIEZGSV9TSVpFT0ZfQVJHIHdpdGgKKwlGRklfU0laRU9GX0pBVkFfUkFXLgorCShmZmlfamF2YV9yYXdfdG9fcHRyYXJyYXkpOiBDaGFuZ2UgdHlwZSBvZiByYXcgdG8gZmZpX2phdmFfcmF3LgorCVJlcGxhY2UgRkZJX1NJWkVPRl9BUkcgd2l0aCBGRklfU0laRU9GX0pBVkFfUkFXLiBVc2UKKwlzaXplb2YoZmZpX2phdmFfcmF3KSBmb3IgYWxpZ25tZW50IGNhbGN1bGF0aW9ucy4KKwkoZmZpX2phdmFfcHRyYXJyYXlfdG9fcmF3KTogU2FtZS4KKwkoZmZpX2phdmFfcnZhbHVlX3RvX3Jhdyk6IEFkZCBzcGVjaWFsIGhhbmRsaW5nIGZvciBGRklfVFlQRV9QT0lOVEVSCisJaWYgRkZJX1NJWkVPRl9KQVZBX1JBVyA9PSA0LgorCShmZmlfamF2YV9yYXdfdG9fcnZhbHVlKTogU2FtZS4KKwkoZmZpX2phdmFfcmF3X2NhbGwpOiBDaGFuZ2UgdHlwZSBvZiByYXcgdG8gZmZpX2phdmFfcmF3LgorCShmZmlfamF2YV90cmFuc2xhdGVfYXJncyk6IFNhbWUuCisJKGZmaV9wcmVwX2phdmFfcmF3X2Nsb3N1cmVfbG9jLCBmZmlfcHJlcF9qYXZhX3Jhd19jbG9zdXJlKTogQ2hhbmdlCisJcGFyYW1ldGVyIHR5cGVzLgorCSogc3JjL21pcHMvZmZpdGFyZ2V0LmggKEZGSV9TSVpFT0ZfSkFWQV9SQVcpOiBEZWZpbmUgZm9yIE4zMiBBQkkuCisKKzIwMDctMTItMDYgIERhdmlkIERhbmV5ICA8ZGRhbmV5QGF2dHJleC5jb20+CisKKwkqIHNyYy9taXBzL24zMi5TIChmZmlfY2xvc3VyZV9OMzIpOiBVc2UgNjQtYml0IGFkZCBpbnN0cnVjdGlvbiBvbgorCXBvaW50ZXIgdmFsdWVzLgorCisyMDA3LTEyLTAxICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXoub3JnPgorCisJUFIgbGliZmZpLzMxOTM3CisJKiBzcmMvcG93ZXJwYy9mZml0YXJnZXQuaDogSW50cm9kdWNlIG5ldyBBQkkgRkZJX0xJTlVYX1NPRlRfRkxPQVQuCisJQWRkIGxvY2FsIEZGSV9UWVBFX1VJTlQxMjggdG8gaGFuZGxlIHNvZnQtZmxvYXQgbG9uZy1kb3VibGUtMTI4LgorCSogc3JjL3Bvd2VycGMvZmZpLmM6IERpc3Rpbmd1aXNoIGJldHdlZW4gX19OT19GUFJTX18gYW5kIG5vdCBhbmQKKwlzZXQgdGhlIE5VTV9GUFJfQVJHX1JFR0lTVEVSUyBhY2NvcmRpbmcgdG8uCisJQWRkIHN1cHBvcnQgZm9yIHBvdGVudGlhbCBzb2Z0LWZsb2F0IHN1cHBvcnQgdW5kZXIgaGFyZC1mbG9hdAorCWFyY2hpdGVjdHVyZS4KKwkoZmZpX3ByZXBfYXJnc19TWVNWKTogU2V0IE5VTV9GUFJfQVJHX1JFR0lTVEVSUyB0byAwIGluIGNhc2Ugb2YKKwlGRklfTElOVVhfU09GVF9GTE9BVCwgaGFuZGxlIGZsb2F0LCBkb3VibGVzIGFuZCBsb25nLWRvdWJsZXMgYWNjb3JkaW5nCisJdG8gdGhlIEZGSV9MSU5VWF9TT0ZUX0ZMT0FUIEFCSS4KKwkoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBMaWtld2lzZS4KKwkoZmZpX2Nsb3N1cmVfaGVscGVyX1NZU1YpOiBMaWtld2lzZS4KKwkqIHNyYy9wb3dlcnBjL3BwY19jbG9zdXJlLlM6IE1ha2Ugc3VyZSBub3QgdG8gc3RvcmUgZmxvYXQvZG91YmxlCisJb24gYXJjaHMgd2hlcmUgX19OT19GUFJTX18gaXMgdHJ1ZS4KKwlBZGQgRkZJX1RZUEVfVUlOVDEyOCBzdXBwb3J0LgorCSogc3JjL3Bvd2VycGMvc3lzdi5TOiBBZGQgc3VwcG9ydCBmb3Igc29mdC1mbG9hdCBsb25nLWRvdWJsZS0xMjguCisJQWRqdXN0IGNvcHlyaWdodCBub3RpY2UuCisKKzIwMDctMTEtMjUgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5vcmc+CisKKwkqIHNyYy9jbG9zdXJlcy5jOiBNb3ZlIGRlZmludGlvbiBvZiBNQVlCRV9VTlVTRUQgZnJvbSBoZXJlIHRvIC4uLgorCSogaW5jbHVkZS9mZmlfY29tbW9uLmg6IC4uLiBoZXJlLgorCVVwZGF0ZSBjb3B5cmlnaHQuCisKKzIwMDctMTEtMTcgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5vcmc+CisKKwkqIHNyYy9wb3dlcnBjL3N5c3YuUzogTG9hZCBjb3JyZWN0IGNyIHRvIGNvbXBhcmUgaWYgd2UgaGF2ZSBsb25nIGRvdWJsZS4KKwkqIHNyYy9wb3dlcnBjL2xpbnV4NjQuUzogTGlrZXdpc2UuCisJKiBzcmMvcG93ZXJwYy9mZmkuYzogQWRkIGEgY29tbWVudCB0byBzaG93IHdoaWNoIHBhcnQgZ29lcyBpbnRvIGNyNi4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fbGRsLmM6IE5ldyB0ZXN0LgorCisyMDA3LTA5LTA0ICAgIDxhcGhAcmVkaGF0LmNvbT4KKworCSogc3JjL2FybS9zeXN2LlMgKFVOV0lORCk6IE5ldy4KKwkoV2hvbGUgZmlsZSk6IENvbmRpdGlvbmFsbHkgY29tcGlsZSB1bndpbmRlciBkaXJlY3RpdmVzLgorCSogc3JjL2FybS9zeXN2LlM6IEFkZCB1bndpbmRlciBkaXJlY3RpdmVzLgorCisJKiBzcmMvYXJtL2ZmaS5jIChmZmlfcHJlcF9hcmdzKTogQWxpZ24gc3RydWN0cyBieSBhdCBsZWFzdCA0IGJ5dGVzLgorCU9ubHkgdHJlYXQgcjAgYXMgYSBzdHJ1Y3QgYWRkcmVzcyBpZiB3ZSdyZSBhY3R1YWxseSByZXR1cm5pbmcgYQorCXN0cnVjdCBieSBhZGRyZXNzLgorCU9ubHkgY29weSB0aGUgYnl0ZXMgdGhhdCBhcmUgYWN0dWFsbHkgd2l0aGluIGEgc3RydWN0LgorCShmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IEEgQ29tcG9zaXRlIFR5cGUgbm90IGxhcmdlciB0aGFuIDQgYnl0ZXMKKwlpcyByZXR1cm5lZCBpbiByMCwgbm90IHBhc3NlZCBieSBhZGRyZXNzLgorCShmZmlfY2FsbCk6IEFsbG9jYXRlIGEgd29yZC1zaXplZCB0ZW1wb3JhcnkgZm9yIHRoZSBjYXNlIHdoZXJlCisJYSBjb21wb3NpdGUgaXMgcmV0dXJuZWQgaW4gcjAuCisJKGZmaV9wcmVwX2luY29taW5nX2FyZ3NfU1lTVik6IEFsaWduIGFzIG5lY2Vzc2FyeS4KKworMjAwNy0wOC0wNSAgU3RldmVuIE5ld2J1cnkgIDxzX2pfbmV3YnVyeUB5YWhvby5jby51az4KKworCSogc3JjL2FybS9mZmkuYyAoRkZJX0lOSVRfVFJBTVBPTElORSk6IFVzZSBfX2NsZWFyX2NhY2hlIGluc3RlYWQgb2YKKwlkaXJlY3RseSB1c2luZyB0aGUgc3lzX2NhY2hlZmx1c2ggc3lzY2FsbC4KKworMjAwNy0wNy0yNyAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+CisKKwkqIHNyYy9hcm0vc3lzdi5TIChmZmlfY2xvc3VyZV9TWVNWKTogQWRkIHNvZnQtZmxvYXQuCisKKzIwMDctMDktMDMgIE1hY2llaiBXLiBSb3p5Y2tpICA8bWFjcm9AbGludXgtbWlwcy5vcmc+CisKKwkqIE1ha2VmaWxlLmFtOiBVbmlmeSBNSVBTX0lSSVggYW5kIE1JUFNfTElOVVggaW50byBNSVBTLgorCSogY29uZmlndXJlLmFjOiBMaWtld2lzZS4KKwkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCSogaW5jbHVkZS9NYWtlZmlsZS5pbjogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvTWFrZWZpbGUuaW46IExpa2V3aXNlLgorCSogY29uZmlndXJlOiBMaWtld2lzZS4KKworMjAwNy0wOC0yNCAgRGF2aWQgRGFuZXkgIDxkZGFuZXlAYXZ0cmV4LmNvbT4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9zbC5jOiBOZXcgdGVzdC4KKworMjAwNy0wOC0xMCAgRGF2aWQgRGFuZXkgIDxkZGFuZXlAYXZ0cmV4LmNvbT4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV91c2hvcnQuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3VpbnQxNi5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0MS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0My5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfN18xX2J5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2RvdWJsZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Ny5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc2ludC5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0OS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjBieXRlMS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfc3Nob3J0Y2hhci5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDY0LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zYnl0ZTIuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3NjaGFyLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV91Y2hhci5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTlieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc185Ynl0ZTEuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2Zsb2F0LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4xLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3Byb2JsZW0xLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4zLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zc2hvcnQuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2RvdWJsZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yYnl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0MTAuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzRieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc182Ynl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOGJ5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3NzaG9ydC5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDE2LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50MzIuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzIwYnl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZmxvYXQuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDIuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzVfMV9ieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q0LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yNGJ5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDYuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzY0Ynl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0OC5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWludC5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfdXNob3J0Y2hhci5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc2NoYXIuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VjaGFyLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50NjQuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3Vsb25nbG9uZy5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fbG9uZ2RvdWJsZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMV8xYnl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTJieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zXzFieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zYnl0ZTEuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzRfMWJ5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzZfMV9ieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xNmJ5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE4Ynl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMC5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOWJ5dGUyLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4yLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm40LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191c2hvcnQuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjYuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzVieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9wb2ludGVyLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc183Ynl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDMyLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL3Vud2luZHRlc3RfZmZpX2NhbGwuY2MsCisJdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL3Vud2luZHRlc3QuY2M6IFJlbW92ZSB4ZmFpbCBmb3IgbWlwczY0Ki0qLSouCisKKzIwMDctMDgtMTAgIERhdmlkIERhbmV5ICA8ZGRhbmV5QGF2dHJleC5jb20+CisKKwlQUiBsaWJmZmkvMjgzMTMKKwkqIGNvbmZpZ3VyZS5hYzogRG9uJ3QgdHJlYXQgbWlwczY0IGFzIGEgc3BlY2lhbCBjYXNlLgorCSogTWFrZWZpbGUuYW0gKG5vZGlzdF9saWJmZmlfbGFfU09VUkNFUyk6IEFkZCBuMzIuUy4KKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZQorCSogTWFrZWZpbGUuaW46IERpdHRvLgorCSogZmZpY29uZmlnLmguaW46IERpdHRvLgorCSogc3JjL21pcHMvZmZpdGFyZ2V0LmggKFJFR19MLCBSRUdfUywgU1VCVSwgQUREVSwgU1JMLCBMSSk6IEluZGVudC4KKwkoTEEsIEVIX0ZSQU1FX0FMSUdOLCBGREVfQUREUl9CWVRFUyk6IE5ldyBwcmVwcm9jZXNzb3IgbWFjcm9zLgorCShGRklfREVGQVVMVF9BQkkpOiBTZXQgZm9yIG42NCBjYXNlLgorCShGRklfQ0xPU1VSRVMsIEZGSV9UUkFNUE9MSU5FX1NJWkUpOiBEZWZpbmUgZm9yIG4zMiBhbmQgbjY0IGNhc2VzLgorCSogc3JjL21pcHMvbjMyLlMgKGZmaV9jYWxsX04zMik6IEFkZCBkZWJ1ZyBtYWNyb3MgYW5kIGxhYmVscyBmb3IgRkRFLgorCShmZmlfY2xvc3VyZV9OMzIpOiBOZXcgZnVuY3Rpb24uCisJKC5laF9mcmFtZSk6IE5ldyBzZWN0aW9uCisJKiBzcmMvbWlwcy9vMzIuUzogQ2xlYW4gdXAgY29tbWVudHMuCisJKGZmaV9jbG9zdXJlX08zMik6IFBhc3MgZmZpX2Nsb3N1cmUgcGFyYW1ldGVyIGluICQxMi4KKwkqIHNyYy9taXBzL2ZmaS5jOiBVc2UgRkZJX01JUFNfTjMyIGluc3RlYWQgb2YKKwlfTUlQU19TSU0gPT0gX0FCSU4zMiB0aHJvdWdob3V0LgorCShGRklfTUlQU19TVE9QX0hFUkUpOiBOZXcsIHVzZSBpbiBwbGFjZSBvZgorCWZmaV9zdG9wX2hlcmUuCisJKGZmaV9wcmVwX2FyZ3MpOiBVc2UgdW5zaWduZWQgbG9uZyB0byBob2xkIHBvaW50ZXIgdmFsdWVzLiAgUmV3cml0ZQorCXRvIHN1cHBvcnQgbjMyL242NCBBQklzLgorCShjYWxjX24zMl9zdHJ1Y3RfZmxhZ3MpOiBSZXdyaXRlLgorCShjYWxjX24zMl9yZXR1cm5fc3RydWN0X2ZsYWdzKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZS4gIFJldmVyc2UKKwlwb3NpdGlvbiBvZiBmbGFnIGJpdHMuCisJKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogUmV3cml0ZSBuMzIgcG9ydGlvbi4KKwkoZmZpX2NhbGwpOiBFbmFibGUgZm9yIG42NC4gIEFkZCBzcGVjaWFsIGhhbmRsaW5nIGZvciBzbWFsbCBzdHJ1Y3R1cmUKKwlyZXR1cm4gdmFsdWVzLgorCShmZmlfcHJlcF9jbG9zdXJlX2xvYyk6IEFkZCBuMzIgYW5kIG42NCBzdXBwb3J0LgorCShmZmlfY2xvc3VyZV9taXBzX2lubmVyX08zMik6IEFkZCBjYXN0IHRvIHNpbGVuY2Ugd2FybmluZy4KKwkoY29weV9zdHJ1Y3RfTjMyLCBmZmlfY2xvc3VyZV9taXBzX2lubmVyX04zMik6IE5ldyBmdW5jdGlvbnMuCisKKzIwMDctMDgtMDggIERhdmlkIERhbmV5ICA8ZGRhbmV5QGF2dHJleC5jb20+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mZml0ZXN0LmggKGZmaV90eXBlX215bG9uZyk6IFJlbW92ZSBkZWZpbml0aW9uLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50MTYuYyAobWFpbik6IFVzZSBjb3JyZWN0IHR5cGUKKwlzcGVjaWZpZXJzLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QxLmMgKG1haW4pOiBEaXR0by4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc2ludC5jIChtYWluKTogRGl0dG8uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDkuYyAobWFpbik6IERpdHRvLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yMGJ5dGUxLmMgKG1haW4pOiBEaXR0by4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOWJ5dGUxLmMgKG1haW4pOiBEaXR0by4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMS5jIChtYWluKTogRGl0dG8uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjMuYyAobWFpbik6IERpdHRvLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9kYmwyLmMgKG1haW4pOiBEaXR0by4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc3Nob3J0LmMgKG1haW4pOiBEaXR0by4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fZmwzLmMgKG1haW4pOiBEaXR0by4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNS5jIChtYWluKTogRGl0dG8uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdC5jIChtYWluKTogRGl0dG8uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDEwLmMgKG1haW4pOiBEaXR0by4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fbGwxLmMgKG1haW4pOiBEaXR0by4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOGJ5dGUuYyAobWFpbik6IERpdHRvLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50MzIuYyAobWFpbik6IERpdHRvLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50MTYuYyAobWFpbik6IERpdHRvLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yMGJ5dGUuYyAobWFpbik6IERpdHRvLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QyLmMgKG1haW4pOiBEaXR0by4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjRieXRlLmMgKG1haW4pOiBEaXR0by4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Ni5jIChtYWluKTogRGl0dG8uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VpbnQuYyAobWFpbik6IERpdHRvLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xMmJ5dGUuYyAobWFpbik6IERpdHRvLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xNmJ5dGUuYyAobWFpbik6IERpdHRvLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4wLmMgKG1haW4pOiBEaXR0by4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOWJ5dGUyLmMgKG1haW4pOiBEaXR0by4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMi5jIChtYWluKTogRGl0dG8uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2RibDEuYyAobWFpbik6IERpdHRvLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm40LmMgKG1haW4pOiBEaXR0by4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNi5jIChtYWluKTogRGl0dG8uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQzMi5jIChtYWluKTogRGl0dG8uCisKKzIwMDctMDgtMDcgIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorCisJKiBzcmMveDg2L3N5c3YuUyAoZmZpX2Nsb3N1cmVfcmF3X1NZU1YpOiBGaXggdHlwbyBpbiBwcmV2aW91cworCWNoZWNraW4uCisKKzIwMDctMDgtMDYgIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorCisJUFIgdGVzdHN1aXRlLzMyODQzCisJKiBzcmMveDg2L3N5c3YuUyAoZmZpX2Nsb3N1cmVfcmF3X1NZU1YpOiBIYW5kbGUgRkZJX1RZUEVfVUlOVDgsCisJRkZJX1RZUEVfU0lOVDgsIEZGSV9UWVBFX1VJTlQxNiwgRkZJX1RZUEVfU0lOVDE2LCBGRklfVFlQRV9VSU5UMzIsCisJRkZJX1RZUEVfU0lOVDMyLgorCisyMDA3LTA4LTAyICBEYXZpZCBEYW5leSAgPGRkYW5leUBhdnRyZXguY29tPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX3VsLmMgKG1haW4pOiBEZWZpbmUgcmV0dXJuIHR5cGUgYXMKKwlmZmlfYXJnLiAgVXNlIHByb3BlciBwcmludGYgY29udmVyc2lvbiBzcGVjaWZpZXIuCisKKzIwMDctMDctMzAgIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorCisJUFIgdGVzdHN1aXRlLzMyODQzCisJKiBzcmMveDg2L2ZmaS5jIChmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IGluIHg4NiBjYXNlLCBhZGQgY29kZSBmb3IKKwlzaWduZWQvdW5zaWduZWQgaW50OC8xNi4KKwkqIHNyYy94ODYvc3lzdi5TIChmZmlfY2FsbF9TWVNWKTogUmV3cml0ZSB0bzoKKwlVc2UgYSBqdW1wIHRhYmxlLgorCVJlbW92ZSBjb2RlIHRvIHBvcCBhcmdzIGZyb20gdGhlIHN0YWNrIGFmdGVyIGNhbGwuCisJU3BlY2lhbC1jYXNlIHNpZ25lZC91bnNpZ25lZCBpbnQ4LzE2LgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9zYy5jIChtYWluKTogUmV2ZXJ0LgorCisyMDA3LTA3LTI2ICBSaWNoYXJkIEd1ZW50aGVyICA8cmd1ZW50aGVyQHN1c2UuZGU+CisKKwlQUiB0ZXN0c3VpdGUvMzI4NDMKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fc2MuYyAobWFpbik6IFZlcmlmeSBjYWxsCisJcmVzdWx0IGFzIHNpZ25lZCBjaGFyLCBub3QgZmZpX2FyZy4KKworMjAwNy0wNy0xNiAgUmFpbmVyIE9ydGggIDxyb0BUZWNoRmFrLlVuaS1CaWVsZWZlbGQuREU+CisKKwkqIGNvbmZpZ3VyZS5hYyAoaT84Ni0qLXNvbGFyaXMyLjFbMC05XSk6IFNldCBUQVJHRVQgdG8gWDg2XzY0LgorCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCisyMDA3LTA3LTExICBEYXZpZCBEYW5leSAgPGRkYW5leUBhdnRyZXguY29tPgorCisJKiBzcmMvbWlwcy9mZmkuYzogRG9uJ3QgaW5jbHVkZSBzeXMvY2FjaGVjdGwuaC4KKwkoZmZpX3ByZXBfY2xvc3VyZV9sb2MpOiBVc2UgX19idWlsdGluX19fY2xlYXJfY2FjaGUoKSBpbnN0ZWFkIG9mCisJY2FjaGVmbHVzaCgpLgorCisyMDA3LTA1LTE4ICBBdXJlbGllbiBKYXJubyAgPGF1cmVsaWVuQGF1cmVsMzIubmV0PgorCisJKiBzcmMvYXJtL2ZmaS5jIChmZmlfcHJlcF9jbG9zdXJlX2xvYyk6IFJlbmFtZWQgYW5kIGFqdXN0ZWQKKwlmcm9tIChmZmlfcHJlcF9jbG9zdXJlKTogLi4uIHRoaXMuCisJKEZGSV9JTklUX1RSQU1QT0xJTkUpOiBBZGp1c3QuCisKKzIwMDUtMTItMzEgIFBoaWwgQmx1bmRlbGwgIDxwYkByZWNpdmEuY29tPgorCisJKiBzcmMvYXJtL2ZmaS5jIChmZmlfcHJlcF9pbmNvbWluZ19hcmdzX1NZU1YsCisJZmZpX2Nsb3N1cmVfU1lTVl9pbm5lciwgZmZpX3ByZXBfY2xvc3VyZSk6IE5ldywgYWRkIGNsb3N1cmUgc3VwcG9ydC4KKwkqIHNyYy9hcm0vc3lzdi5TKGZmaV9jbG9zdXJlX1NZU1YpOiBMaWtld2lzZS4KKwkqIHNyYy9hcm0vZmZpdGFyZ2V0LmggKEZGSV9UUkFNUE9MSU5FX1NJWkUpOiBMaWtld2lzZS4KKwkoRkZJX0NMT1NVUkVTKTogRW5hYmxlIGNsb3N1cmUgc3VwcG9ydC4KKworMjAwNy0wNy0wMyAgQW5kcmV3IEhhbGV5ICA8YXBoQGhlZGdlcy5iaWxsZ2F0bGlmZi5jb20+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfdXNob3J0LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50MTYuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDEuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDMuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzdfMV9ieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kb3VibGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDcuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NpbnQuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDkuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzIwYnl0ZTEuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3NzaG9ydGNoYXIuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQ2NC5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM2J5dGUyLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV9zY2hhci5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfdWNoYXIuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE5Ynl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOWJ5dGUxLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9mbG9hdC5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9wcm9ibGVtMS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMy5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc3Nob3J0LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm41LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9kb3VibGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzJieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDEwLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc180Ynl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNmJ5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzhieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV9zc2hvcnQuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3VpbnQzMi5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDE2LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19mbG9hdC5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjBieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc181XzFfYnl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Mi5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjRieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q0LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q2LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc182NGJ5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDguYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VpbnQuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3VzaG9ydGNoYXIuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NjaGFyLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191Y2hhci5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDY0LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191bG9uZ2xvbmcuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzFfMWJ5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzEyYnl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM18xYnl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM2J5dGUxLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc180XzFieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc182XzFfYnl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTZieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xOGJ5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjAuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzlieXRlMi5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMi5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNC5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdXNob3J0LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm42LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc181Ynl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fcG9pbnRlci5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfN2J5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQzMi5jLAorCXRlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC91bndpbmR0ZXN0X2ZmaV9jYWxsLmNjLAorCXRlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC91bndpbmR0ZXN0LmNjOiBFbmFibGUgZm9yIEFSTS4KKworMjAwNy0wNy0wNSAgSC5KLiBMdSAgPGhvbmdqaXUubHVAaW50ZWwuY29tPgorCisJKiBhY2xvY2FsLm00OiBSZWdlbmVyYXRlZC4KKworMjAwNy0wNi0wMiAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KKworCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCisyMDA3LTA1LTIzICBTdGV2ZSBFbGxjZXkgIDxzamVAY3VwLmhwLmNvbT4KKworCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisJKiBhY2xvY2FsLm00OiBSZWdlbmVyYXRlLgorCSogaW5jbHVkZS9NYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKwkqIHRlc3RzdWl0ZS9NYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKworMjAwNy0wNS0xMCAgUm9tYW4gWmlwcGVsIDx6aXBwZWxAbGludXgtbTY4ay5vcmc+CisKKwkqIHNyYy9tNjhrL2ZmaS5jIChmZmlfcHJlcF9pbmNvbWluZ19hcmdzX1NZU1YsCisJZmZpX2Nsb3N1cmVfU1lTVl9pbm5lcixmZmlfcHJlcF9jbG9zdXJlKTogTmV3LCBhZGQgY2xvc3VyZSBzdXBwb3J0LgorCSogc3JjL202OGsvc3lzdi5TKGZmaV9jbG9zdXJlX1NZU1YsZmZpX2Nsb3N1cmVfc3RydWN0X1NZU1YpOiBMaWtld2lzZS4KKwkqIHNyYy9tNjhrL2ZmaXRhcmdldC5oIChGRklfVFJBTVBPTElORV9TSVpFKTogTGlrZXdpc2UuCisJKEZGSV9DTE9TVVJFUyk6IEVuYWJsZSBjbG9zdXJlIHN1cHBvcnQuCisKKzIwMDctMDUtMTAgIFJvbWFuIFppcHBlbCA8emlwcGVsQGxpbnV4LW02OGsub3JnPgorCisJKiBjb25maWd1cmUuYWMgKEhBVkVfQVNfQ0ZJX1BTRVVET19PUCk6IE5ldyB0ZXN0LgorCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCSogZmZpY29uZmlnLmguaW46IFJlZ2VuZXJhdGUuCisJKiBzcmMvbTY4ay9zeXN2LlMgKENGSV9TVEFSVFBST0MsQ0ZJX0VORFBST0MsCisJQ0ZJX09GRlNFVCxDRklfREVGX0NGQSk6IE5ldyBtYWNyb3MuCisJKGZmaV9jYWxsX1NZU1YpOiBBZGQgY2FsbGZyYW1lIGFubm90YXRpb24uCisKKzIwMDctMDUtMTAgIFJvbWFuIFppcHBlbCA8emlwcGVsQGxpbnV4LW02OGsub3JnPgorCisJKiBzcmMvbTY4ay9mZmkuYyAoZmZpX3ByZXBfYXJncyxmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IEZpeAorCW51bWVyb3VzIHRlc3Qgc3VpdGUgZmFpbHVyZXMuCisJKiBzcmMvbTY4ay9zeXN2LlMgKGZmaV9jYWxsX1NZU1YpOiBMaWtld2lzZS4KKworMjAwNy0wNC0xMSAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KKworCSogTWFrZWZpbGUuYW0gKEVYVFJBX0RJU1QpOiBCcmluZyB1cCB0byBkYXRlLgorCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisJKiBzcmMvZnJ2L2VhYmkuUzogUmVtb3ZlIFJDUyBrZXl3b3JkLgorCisyMDA3LTA0LTA2ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEByZWRoYXQuY29tPgorCisJKiBjb25maWd1cmUuYWM6IFRpZHkgdGFyZ2V0IGNhc2UuCisJKEhBVkVfTE9OR19ET1VCTEUpOiBBbGxvdyB0aGUgdGFyZ2V0IHRvIG92ZXJyaWRlLgorCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCSogaW5jbHVkZS9mZmkuaC5pbjogRG9uJ3QgZGVmaW5lIGZmaV90eXBlX2ZvbyBpZgorCUxJQkZGSV9ISURFX0JBU0lDX1RZUEVTIGlzIGRlZmluZWQuCisJKGZmaV90eXBlX2xvbmdkb3VibGUpOiBJZiBub3QgSEFWRV9MT05HX0RPVUJMRSwgZGVmaW5lCisJdG8gZmZpX3R5cGVfZG91YmxlLgorCSogdHlwZXMuYyAoTElCRkZJX0hJREVfQkFTSUNfVFlQRVMpOiBEZWZpbmUuCisJKEZGSV9UWVBFREVGLCBmZmlfdHlwZV92b2lkKTogTWFyayB0aGUgZGF0YSBjb25zdC4KKwkoZmZpX3R5cGVfbG9uZ2RvdWJsZSk6IFNwZWNpYWwgY2FzZSBmb3IgQWxwaGEuICBEb24ndCBkZWZpbmUKKwlpZiBsb25nIGRvdWJsZSA9PSBkb3VibGUuCisKKwkqIHNyYy9hbHBoYS9mZmkuYyAoRkZJX1RZUEVfTE9OR0RPVUJMRSk6IEFzc2VydCB1bmlxdWUgdmFsdWUuCisJKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogSGFuZGxlIGl0IGFzIHRoZSAxMjgtYml0IHR5cGUuCisJKGZmaV9jYWxsLCBmZmlfY2xvc3VyZV9vc2ZfaW5uZXIpOiBMaWtld2lzZS4KKwkoZmZpX2Nsb3N1cmVfb3NmX2lubmVyKTogTGlrZXdpc2UuICBNYXJrIGhpZGRlbi4KKwkoZmZpX2NhbGxfb3NmLCBmZmlfY2xvc3VyZV9vc2YpOiBNYXJrIGhpZGRlbi4KKwkqIHNyYy9hbHBoYS9mZml0YXJnZXQuaCAoRkZJX0xBU1RfQUJJKTogVGlkeSBkZWZpbml0aW9uLgorCSogc3JjL2FscGhhL29zZi5TIChmZmlfY2FsbF9vc2YsIGZmaV9jbG9zdXJlX29zZik6IE1hcmsgaGlkZGVuLgorCShsb2FkX3RhYmxlKTogSGFuZGxlIDEyOC1iaXQgbG9uZyBkb3VibGUuCisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mbG9hdDQuYzogQWRkIC1taWVlZSBmb3IgYWxwaGEuCisKKzIwMDctMDQtMDYgIFRvbSBUcm9tZXkgIDx0cm9tZXlAcmVkaGF0LmNvbT4KKworCVBSIGxpYmZmaS8zMTQ5MToKKwkqIFJFQURNRTogRml4ZWQgYnVnIGluIGV4YW1wbGUuCisKKzIwMDctMDQtMDMgIEpha3ViIEplbGluZWsgIDxqYWt1YkByZWRoYXQuY29tPgorCisJKiBzcmMvY2xvc3VyZXMuYzogSW5jbHVkZSBzeXMvc3RhdGZzLmguCisJKF9HTlVfU09VUkNFKTogRGVmaW5lIG9uIExpbnV4LgorCShGRklfTU1BUF9FWEVDX1NFTElOVVgpOiBEZWZpbmUuCisJKHNlbGludXhfZW5hYmxlZCk6IE5ldyB2YXJpYWJsZS4KKwkoc2VsaW51eF9lbmFibGVkX2NoZWNrKTogTmV3IGZ1bmN0aW9uLgorCShpc19zZWxpbnV4X2VuYWJsZWQpOiBEZWZpbmUuCisJKGRsbW1hcCk6IFVzZSBpdC4KKworMjAwNy0wMy0yNCAgVXJvcyBCaXpqYWsgIDx1Yml6amFrQGdtYWlsLmNvbT4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9mbDIuYyAocmV0dXJuX2ZsKTogTWFyayBhcyBzdGF0aWMuCisJVXNlICd2b2xhdGlsZSBmbG9hdCBzdW0nIHRvIGNyZWF0ZSBzdW0gb2YgZmxvYXRzIHRvIGF2b2lkIGZhbHNlCisJbmVnYXRpdmUgZHVlIHRvIGV4Y2VzcyBwcmVjaXNpb24gb24gaXg4NiB0YXJnZXRzLgorCShtYWluKTogRGl0dG8uCisKKzIwMDctMDMtMDggIEFsZXhhbmRyZSBPbGl2YSAgPGFvbGl2YUByZWRoYXQuY29tPgorCisJKiBzcmMvcG93ZXJwYy9mZmkuYyAoZmx1c2hfaWNhY2hlKTogRml4IGxlZnQtb3ZlciBmcm9tIHByZXZpb3VzCisJcGF0Y2guCisJKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKTogUmVtb3ZlIHVubmVlZGVkIGNhc3RzLiAgQWRkIG5lZWRlZCBvbmVzLgorCisyMDA3LTAzLTA3ICBBbGV4YW5kcmUgT2xpdmEgIDxhb2xpdmFAcmVkaGF0LmNvbT4KKworCSogaW5jbHVkZS9mZmkuaC5pbiAoZmZpX2Nsb3N1cmVfYWxsb2MsIGZmaV9jbG9zdXJlX2ZyZWUpOiBOZXcuCisJKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKTogTmV3LgorCShmZmlfcHJlcF9yYXdfY2xvc3VyZV9sb2MpOiBOZXcuCisJKGZmaV9wcmVwX2phdmFfcmF3X2Nsb3N1cmVfbG9jKTogTmV3LgorCSogc3JjL2Nsb3N1cmVzLmM6IE5ldyBmaWxlLgorCSogc3JjL2RsbWFsbG9jLmMgW0ZGSV9NTUFQX0VYRUNfV1JJVF0gKHN0cnVjdCBtYWxsb2Nfc2VnbWVudCk6CisJUmVwbGFjZSBzZmxhZ3Mgd2l0aCBleGVjX29mZnNldC4KKwlbRkZJX01NQVBfRVhFQ19XUklUXSAobW1hcF9leGVjX29mZnNldCwgYWRkX3NlZ21lbnRfZXhlY19vZmZzZXQsCisJc3ViX3NlZ21lbnRfZXhlY19vZmZzZXQpOiBOZXcgbWFjcm9zLgorCShnZXRfc2VnbWVudF9mbGFncywgc2V0X3NlZ21lbnRfZmxhZ3MsIGNoZWNrX3NlZ21lbnRfbWVyZ2UpOiBOZXcKKwltYWNyb3MuCisJKGlzX21tYXBwZWRfc2VnbWVudCwgaXNfZXh0ZXJuX3NlZ21lbnQpOiBVc2UgZ2V0X3NlZ21lbnRfZmxhZ3MuCisJKGFkZF9zZWdtZW50LCBzeXNfYWxsb2MsIGNyZWF0ZV9tc3BhY2UsIGNyZWF0ZV9tc3BhY2Vfd2l0aF9iYXNlLAorCWRlc3Ryb3lfbXNwYWNlKTogVXNlIG5ldyBtYWNyb3MuCisJKHN5c19hbGxvYyk6IFNpbGVuY2Ugd2FybmluZy4KKwkqIE1ha2VmaWxlLmFtIChsaWJmZmlfbGFfU09VUkNFUyk6IEFkZCBzcmMvY2xvc3VyZXMuYy4KKwkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgorCSogc3JjL3ByZXBfY2lmIFtGRklfQ0xPU1VSRVNdIChmZmlfcHJlcF9jbG9zdXJlKTogSW1wbGVtZW50IGluCisJdGVybXMgb2YgZmZpX3ByZXBfY2xvc3VyZV9sb2MuCisJKiBzcmMvcmF3X2FwaS5jIChmZmlfcHJlcF9yYXdfY2xvc3VyZV9sb2MpOiBSZW5hbWVkIGFuZCBhZGp1c3RlZAorCWZyb20uLi4KKwkoZmZpX3ByZXBfcmF3X2Nsb3N1cmUpOiAuLi4gdGhpcy4gIFJlLWltcGxlbWVudCBpbiB0ZXJtcyBvZiB0aGUKKwlyZW5hbWVkIHZlcnNpb24uCisJKiBzcmMvamF2YV9yYXdfYXBpIChmZmlfcHJlcF9qYXZhX3Jhd19jbG9zdXJlX2xvYyk6IFJlbmFtZWQgYW5kCisJYWRqdXN0ZWQgZnJvbS4uLgorCShmZmlfcHJlcF9qYXZhX3Jhd19jbG9zdXJlKTogLi4uIHRoaXMuICBSZS1pbXBsZW1lbnQgaW4gdGVybXMgb2YKKwl0aGUgcmVuYW1lZCB2ZXJzaW9uLgorCSogc3JjL2FscGhhL2ZmaS5jIChmZmlfcHJlcF9jbG9zdXJlX2xvYyk6IFJlbmFtZWQgZnJvbQorCShmZmlfcHJlcF9jbG9zdXJlKTogLi4uIHRoaXMuCisJKiBzcmMvcGEvZmZpLmM6IExpa2V3aXNlLgorCSogc3JjL2NyaXMvZmZpLmM6IExpa2V3aXNlLiAgQWRqdXN0LgorCSogc3JjL2Zydi9mZmkuYzogTGlrZXdpc2UuCisJKiBzcmMvaWE2NC9mZmkuYzogTGlrZXdpc2UuCisJKiBzcmMvbWlwcy9mZmkuYzogTGlrZXdpc2UuCisJKiBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmM6IExpa2V3aXNlLgorCSogc3JjL3MzOTAvZmZpLmM6IExpa2V3aXNlLgorCSogc3JjL3NoL2ZmaS5jOiBMaWtld2lzZS4KKwkqIHNyYy9zaDY0L2ZmaS5jOiBMaWtld2lzZS4KKwkqIHNyYy9zcGFyYy9mZmkuYzogTGlrZXdpc2UuCisJKiBzcmMveDg2L2ZmaTY0LmM6IExpa2V3aXNlLgorCSogc3JjL3g4Ni9mZmkuYzogTGlrZXdpc2UuCisJKEZGSV9JTklUX1RSQU1QT0xJTkUpOiBBZGp1c3QuCisJKGZmaV9wcmVwX3Jhd19jbG9zdXJlX2xvYyk6IFJlbmFtZWQgYW5kIGFkanVzdGVkIGZyb20uLi4KKwkoZmZpX3ByZXBfcmF3X2Nsb3N1cmUpOiAuLi4gdGhpcy4KKwkqIHNyYy9wb3dlcnBjL2ZmaS5jIChmZmlfcHJlcF9jbG9zdXJlX2xvYyk6IFJlbmFtZWQgZnJvbQorCShmZmlfcHJlcF9jbG9zdXJlKTogLi4uIHRoaXMuCisJKGZsdXNoX2ljYWNoZSk6IEFkanVzdC4KKworMjAwNy0wMy0wNyAgQWxleGFuZHJlIE9saXZhICA8YW9saXZhQHJlZGhhdC5jb20+CisKKwkqIHNyYy9kbG1hbGxvYy5jOiBOZXcgZmlsZSwgaW1wb3J0ZWQgdmVyc2lvbiAyLjguMyBvZiBEb3VnCisJTGVhJ3MgbWFsbG9jLgorCisyMDA3LTAzLTAxICBCcm9va3MgTW9zZXMgIDxicm9va3MubW9zZXNAY29kZXNvdXJjZXJ5LmNvbT4KKworCSogTWFrZWZpbGUuYW06IEFkZCBkdW1teSBpbnN0YWxsLXBkZiB0YXJnZXQuCisJKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZQorCisyMDA3LTAyLTEzICBBbmRyZWFzIEtyZWJiZWwgIDxrcmViYmVsMUBkZS5pYm0uY29tPgorCisJKiBzcmMvczM5MC9mZmkuYyAoZmZpX3ByZXBfYXJncywgZmZpX3ByZXBfY2lmX21hY2hkZXAsCisJZmZpX2Nsb3N1cmVfaGVscGVyX1NZU1YpOiBBZGQgbG9uZyBkb3VibGUgaGFuZGxpbmcuCisKKzIwMDctMDItMDIgIEpha3ViIEplbGluZWsgIDxqYWt1YkByZWRoYXQuY29tPgorCisJKiBzcmMvcG93ZXJwYy9saW51eDY0LlMgKGZmaV9jYWxsX0xJTlVYNjQpOiBNb3ZlIHJlc3RvcmUgb2YgcjIKKwlpbW1lZGlhdGVseSBhZnRlciBiY3RybCBpbnN0cnVjdGlvbi4KKworMjAwNy0wMS0xOCAgQWxleGFuZHJlIE9saXZhICA8YW9saXZhQHJlZGhhdC5jb20+CisKKwkqIE1ha2VmaWxlLmFtIChhbGwtcmVjdXJzaXZlLCBpbnN0YWxsLXJlY3Vyc2l2ZSwKKwltb3N0bHljbGVhbi1yZWN1cnNpdmUsIGNsZWFuLXJlY3Vyc2l2ZSwgZGlzdGNsZWFuLXJlY3Vyc2l2ZSwKKwltYWludGFpbmVyLWNsZWFuLXJlY3Vyc2l2ZSk6IEFkZCBtaXNzaW5nIHRhcmdldHMuCisJKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KKworMjAwNi0xMi0xNCAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6Lm9yZz4KKworCSogY29uZmlndXJlLmFjOiBBZGQgVEFSR0VUIGZvciB4ODZfNjQtKi1kYXJ3aW4qLgorCSogTWFrZWZpbGUuYW0gKG5vZGlzdF9saWJmZmlfbGFfU09VUkNFUyk6IEFkZCBydWxlcyBmb3IgNjQtYml0IHNvdXJjZXMKKwlmb3IgWDg2X0RBUldJTi4KKwkqIHNyYy94ODYvZmZpdGFyZ2V0Lmg6IFNldCB0cmFtcG9saW5lIHNpemUgZm9yIHg4Nl82NC0qLWRhcndpbiouCisJKiBzcmMveDg2L2RhcndpbjY0LlM6IE5ldyBmaWxlIGZvciB4ODZfNjQtKi1kYXJ3aW4qIHN1cHBvcnQuCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisJKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKwkqIGluY2x1ZGUvTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisJKiB0ZXN0c3VpdGUvTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisJKiB0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvdW53aW5kdGVzdF9mZmlfY2FsbC5jYzogTmV3IHRlc3QgY2FzZSBmb3IKKwlmZmlfY2FsbCBvbmx5LgorCisyMDA2LTEyLTEzICBBbmRyZWFzIFRvYmxlciA8YS50b2JsZXJAc2Nod2Vpei5vcmc+CisKKwkqIGFjbG9jYWwubTQ6IFJlZ2VuZXJhdGUgd2l0aCBhY2xvY2FsIC1JIC4uIGFzIHdyaXR0ZW4gaW4gdGhlCisJTWFrZWZpbGUuYW0uCisKKzIwMDYtMTAtMzEgIEdlb2ZmcmV5IEtlYXRpbmcgIDxnZW9mZmtAYXBwbGUuY29tPgorCisJKiBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmMgKGRhcndpbl9hZGp1c3RfYWdncmVnYXRlX3NpemVzKTogTmV3LgorCShmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IENhbGwgZGFyd2luX2FkanVzdF9hZ2dyZWdhdGVfc2l6ZXMgZm9yCisJRGFyd2luLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q0LmM6IFJlbW92ZSBEYXJ3aW4gWEZBSUwuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDYuYzogUmVtb3ZlIERhcndpbiBYRkFJTC4KKworMjAwNi0xMC0xMCAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KKwkgICAgU2FuZHJvIFRvbGFpbmkgIDx0b2xhaW5pQGxpYmVyby5pdD4KKworCSogY29uZmlndXJlLmFjIFtpKjg2LSotZGFyd2luKl06IFNldCBYODZfREFSV0lOIHN5bWJvbCBhbmQKKwljb25kaXRpb25hbC4KKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZWQuCisJKiBNYWtlZmlsZS5hbSAobm9kaXN0X2xpYmZmaV9sYV9TT1VSQ0VTKSBbWDg2X0RBUldJTl06IE5ldyBjYXNlLgorCShFWFRSQV9ESVNUKTogQWRkIHNyYy94ODYvZGFyd2luLlMuCisJKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZWQuCisJKiBpbmNsdWRlL01ha2VmaWxlLmluOiBSZWdlbmVyYXRlZC4KKwkqIHRlc3RzdWl0ZS9NYWtlZmlsZS5pbjogUmVnZW5lcmF0ZWQuCisKKwkqIHNyYy94ODYvZmZpLmMgKGZmaV9wcmVwX2NpZl9tYWNoZGVwKSBbWDg2X0RBUldJTl06IFRyZWF0IGxpa2UKKwlYODZfV0lOMzIsIGFuZCBhZGRpdGlvbmFsbHkgYWxpZ24gc3RhY2sgdG8gMTYgYnl0ZXMuCisJKiBzcmMveDg2L2Rhcndpbi5TOiBOZXcsIGJhc2VkIG9uIHN5c3YuUy4KKwkqIHNyYy9wcmVwX2NpZi5jIChmZmlfcHJlcF9jaWYpIFtYODZfREFSV0lOXTogQWxpZ24gPiA4LWJ5dGUgc3RydWN0cy4KKworMjAwNi0wOS0xMiAgRGF2aWQgRGFuZXkgIDxkZGFuZXlAYXZ0cmV4LmNvbT4KKworCVBSIGxpYmZmaS8yMzkzNQorCSogaW5jbHVkZS9NYWtlZmlsZS5hbTogSW5zdGFsbCBib3RoIGZmaS5oIGFuZCBmZml0YXJnZXQuaCBpbgorCSQobGliZGlyKS9nY2MvJCh0YXJnZXRfYWxpYXMpLyQoZ2NjX3ZlcnNpb24pL2luY2x1ZGUuCisJKiBhY2xvY2FsLm00OiBSZWdlbmVyYXRlZCBmb3IgYXV0b21ha2UgMS45LjYuCisJKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZWQuCisJKiBpbmNsdWRlL01ha2VmaWxlLmluOiBSZWdlbmVyYXRlZC4KKwkqIHRlc3RzdWl0ZS9NYWtlZmlsZS5pbjogUmVnZW5lcmF0ZWQuCisKKzIwMDYtMDgtMTcgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKworCSogaW5jbHVkZS9mZmlfY29tbW9uLmggKHN0cnVjdCk6IFJldmVydCBhY2NpZGVudGFsIGNvbW1pdC4KKworMjAwNi0wOC0xNSAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiBpbmNsdWRlL2ZmaV9jb21tb24uaDogUmVtb3ZlIGxpbnQgZGlyZWN0aXZlcy4KKwkqIGluY2x1ZGUvZmZpLmguaW46IExpa2V3aXNlLgorCisyMDA2LTA3LTI1ICBUb3JzdGVuIFNjaG9lbmZlbGQgIDxrYWZmZWV0aXNjaEBnbXguZGU+CisKKwkqIGluY2x1ZGUvZmZpLmguaW4gKGZmaV90eXBlX3Vsb25nLCBmZmlfdHlwZV9zbG9uZyk6IERlZmluZSBjb3JyZWN0bHkKKwlmb3IgMzItYml0IGFyY2hpdGVjdHVyZXMuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX3VsLmM6IE5ldyB0ZXN0IGNhc2UuCisKKzIwMDYtMDctMTkgIERhdmlkIERhbmV5ICA8ZGRhbmV5QGF2dHJleC5jb20+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNi5jOiBSZW1vdmUgeGZhaWwgZm9yIG1pcHMsCisJeGZhaWwgcmVtYWlucyBmb3IgbWlwczY0LgorCisyMDA2LTA1LTIzICBDYXJsb3MgTydEb25lbGwgIDxjYXJsb3NAY29kZXNvdXJjZXJ5LmNvbT4KKworCSogTWFrZWZpbGUuYW06IEFkZCBpbnN0YWxsLWh0bWwgdGFyZ2V0LiBBZGQgaW5zdGFsbC1odG1sIHRvIC5QSE9OWQorCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisJKiBhY2xvY2FsLm00OiBSZWdlbmVyYXRlLgorCSogaW5jbHVkZS9NYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKwkqIHRlc3RzdWl0ZS9NYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKworMjAwNi0wNS0xOCAgSm9obiBEYXZpZCBBbmdsaW4gIDxkYXZlLmFuZ2xpbkBucmMtY25yYy5nYy5jYT4KKworCSogcGEvZmZpLmMgKGZmaV9wcmVwX2FyZ3NfcGEzMik6IExvYWQgZmxvYXRpbmcgcG9pbnQgYXJndW1lbnRzIGZyb20KKwlzdGFjayBzbG90LgorCisyMDA2LTA0LTIyICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwkqIFJFQURNRTogUmVtb3ZlIG5vdGljZSBhYm91dCAnQ3JhenkgQ29tbWVudHMnLgorCSogc3JjL2RlYnVnLmM6IFJlbW92ZSBsaW50IGRpcmVjdGl2ZXMuIENsZWFudXAgd2hpdGUgc3BhY2VzLgorCSogc3JjL2phdmFfcmF3X2FwaS5jOiBMaWtld2lzZS4KKwkqIHNyYy9wcmVwX2NpZi5jOiBMaWtld2lzZS4KKwkqIHNyYy9yYXdfYXBpLmM6IExpa2V3aXNlLgorCSogc3JjL2ZmaXRlc3QuYzogRGVsZXRlLiBObyBsb25nZXIgbmVlZGVkLCBhbGwgdGVzdCBjYXNlcyBtaWdyYXRlZAorCXRvIHRoZSB0ZXN0c3VpdGUuCisJKiBzcmMvYXJtL2ZmaS5jOiBSZW1vdmUgbGludCBkaXJlY3RpdmVzLgorCSogc3JjL20zMnIvZmZpLmM6IExpa2V3aXNlLgorCSogc3JjL3BhL2ZmaS5jOiBMaWtld2lzZS4KKwkqIHNyYy9wb3dlcnBjL2ZmaS5jOiBMaWtld2lzZS4KKwkqIHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYzogTGlrZXdpc2UuCisJKiBzcmMvc2gvZmZpLmM6IExpa2V3aXNlLgorCSogc3JjL3NoNjQvZmZpLmM6IExpa2V3aXNlLgorCSogc3JjL3g4Ni9mZmkuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmxvYXQyLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3Byb21vdGlvbi5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3QxLmM6IExpa2V3aXNlLgorCisyMDA2LTA0LTEzICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwkqIHNyYy9wYS9ocHV4MzIuUzogQ29ycmVjdCB1bndpbmQgb2Zmc2V0IGNhbGN1bGF0aW9uIGZvcgorCWZmaV9jbG9zdXJlX3BhMzIuCisJKiBzcmMvcGEvbGludXguUzogTGlrZXdpc2UuCisKKzIwMDYtMDQtMTIgIEphbWVzIEUgV2lsc29uICA8d2lsc29uQHNwZWNpZml4LmNvbT4KKworCVBSIGxpYmdjai8yNjQ4MworCSogc3JjL2lhNjQvZmZpLmMgKHN0Zl9zcGlsbCwgbGRmX2ZpbGwpOiBSZXdyaXRlIGFzIG1hY3Jvcy4KKwkoaGZhX3R5cGVfbG9hZCk6IENhbGwgc3RmX3NwaWxsLgorCShoZmFfdHlwZV9zdG9yZSk6IENhbGwgbGRmX2ZpbGwuCisJKGZmaV9jYWxsKTogQWRqdXN0IGNhbGxzIHRvIGFib3ZlIHJvdXRpbmVzLiAgQWRkIGxvY2FsIHRlbXBzIGZvcgorCW1hY3JvIHJlc3VsdC4KKworMjAwNi0wNC0xMCAgTWF0dGhpYXMgS2xvc2UgIDxkb2tvQGRlYmlhbi5vcmc+CisKKwkqIHRlc3RzdWl0ZS9saWIvbGliZmZpLWRnLmV4cCAobGliZmZpLWluaXQpOiBSZWNvZ25pemUgbXVsdGlsaWIKKwlkaXJlY3RvcnkgbmFtZXMgY29udGFpbmluZyB1bmRlcnNjb3Jlcy4KKworMjAwNi0wNC0wNyAgSmFtZXMgRSBXaWxzb24gIDx3aWxzb25Ac3BlY2lmaXguY29tPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmxvYXQ0LmM6IE5ldyB0ZXN0Y2FzZS4KKworMjAwNi0wNC0wNSAgSm9obiBEYXZpZCBBbmdsaW4gIDxkYXZlLmFuZ2xpbkBucmMtY25yYy5nYy5jYT4KKwkgICAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiBNYWtlZmlsZS5hbTogQWRkIFBBX0hQVVggcG9ydC4KKwkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCSogaW5jbHVkZS9NYWtlZmlsZS5pbjogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvTWFrZWZpbGUuaW46IExpa2V3aXNlLgorCSogY29uZmlndXJlLmFjOiBBZGQgUEFfSFBVWCBydWxlcy4KKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKwkqIHNyYy9wYS9mZml0YXJnZXQuaDogUmVuYW1lIGxpbnV4IHRhcmdldCB0byBQQV9MSU5VWC4KKwlBZGQgUEFfSFBVWCBhbmQgUEE2NF9IUFVYLgorCVJlbmFtZSBGRklfTElOVVggQUJJIHRvIEZGSV9QQTMyIEFCSS4KKwkoRkZJX1RSQU1QT0xJTkVfU0laRSk6IERlZmluZSBmb3IgMzItYml0IEhQLVVYIHRhcmdldHMuCisJKEZGSV9UWVBFX1NNQUxMX1NUUlVDVDIpOiBEZWZpbmUuCisJKEZGSV9UWVBFX1NNQUxMX1NUUlVDVDQpOiBMaWtld2lzZS4KKwkoRkZJX1RZUEVfU01BTExfU1RSVUNUOCk6IExpa2V3aXNlLgorCShGRklfVFlQRV9TTUFMTF9TVFJVQ1QzKTogUmVkZWZpbmUuCisJKEZGSV9UWVBFX1NNQUxMX1NUUlVDVDUpOiBMaWtld2lzZS4KKwkoRkZJX1RZUEVfU01BTExfU1RSVUNUNik6IExpa2V3aXNlLgorCShGRklfVFlQRV9TTUFMTF9TVFJVQ1Q3KTogTGlrZXdpc2UuCisJKiBzcmMvcGEvZmZpLmMgKFJPVU5EX0RPV04pOiBEZWxldGUuCisJKGZsZHcsIGZzdHcsIGZsZGQsIGZzdGQpOiBVc2UgJ19fYXNtX18nLgorCShmZmlfc3RydWN0X3R5cGUpOiBBZGQgc3VwcG9ydCBmb3IgRkZJX1RZUEVfU01BTExfU1RSVUNUMiwKKwlGRklfVFlQRV9TTUFMTF9TVFJVQ1Q0IGFuZCBGRklfVFlQRV9TTUFMTF9TVFJVQ1Q4LgorCShmZmlfcHJlcF9hcmdzX0xJTlVYKTogUmVuYW1lIHRvIGZmaV9wcmVwX2FyZ3NfcGEzMi4gVXBkYXRlIGNvbW1lbnQuCisJU2ltcGxpZnkgaW5jcmVtZW50aW5nIG9mIHN0YWNrIHNsb3QgdmFyaWFibGUuIENoYW5nZSB0eXBlIG9mIGxvY2FsCisJJ24nIHRvIHVuc2lnbmVkIGludC4KKwkoZmZpX3NpemVfc3RhY2tfTElOVVgpOiBSZW5hbWUgdG8gZmZpX3NpemVfc3RhY2tfcGEzMi4gSGFuZGxlIGxvbmcKKwlkb3VibGUgb24gUEFfSFBVWC4KKwkoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBMaWtld2lzZS4KKwkoZmZpX2NhbGwpOiBMaWtld2lzZS4KKwkoZmZpX2Nsb3N1cmVfaW5uZXJfTElOVVgpOiBSZW5hbWUgdG8gZmZpX2Nsb3N1cmVfaW5uZXJfcGEzMi4gQ2hhbmdlCisJcmV0dXJuIHR5cGUgdG8gZmZpX3N0YXR1cy4gU2ltcGxpZnkgaW5jcmVtZW50aW5nIG9mIHN0YWNrIHNsb3QKKwl2YXJpYWJsZS4gT25seSBjb3B5IGZsb2F0aW5nIHBvaW50IGFyZ3VtZW50IHJlZ2lzdGVycyB3aGVuIFBBX0xJTlVYCisJaXMgdHJ1ZS4gUmVmb3JtYXQgZGVidWcgc3RhdGVtZW50LgorCUFkZCBzdXBwb3J0IGZvciBGRklfVFlQRV9TTUFMTF9TVFJVQ1QyLCBGRklfVFlQRV9TTUFMTF9TVFJVQ1Q0IGFuZAorCUZGSV9UWVBFX1NNQUxMX1NUUlVDVDguCisJKGZmaV9jbG9zdXJlX0xJTlVYKTogUmVuYW1lIHRvIGZmaV9jbG9zdXJlX3BhMzIuIEFkZCAnZXh0ZXJuJyB0bworCWRlY2xhcmF0aW9uLgorCShmZmlfcHJlcF9jbG9zdXJlKTogTWFrZSBsaW51eCB0cmFtcG9saW5lIGNvbmRpdGlvbmFsIG9uIFBBX0xJTlVYLgorCUFkZCBub3BzIHRvIGNhY2hlIGZsdXNoLiAgQWRkIHRyYW1wb2xpbmUgZm9yIFBBX0hQVVguCisJKiBzcmMvcGEvaHB1eDMyLlM6IE5ldyBmaWxlLgorCSogc3JjL3BhL2xpbnV4LlMgKGZmaV9jYWxsX0xJTlVYKTogUmVuYW1lIHRvIGZmaV9jYWxsX3BhMzIuIFJlbmFtZQorCWZmaV9wcmVwX2FyZ3NfTElOVVggdG8gZmZpX3ByZXBfYXJnc19wYTMyLgorCUxvY2FsaXplIGxhYmVscy4gQWRkIHN1cHBvcnQgZm9yIDIsIDQgYW5kIDgtYnl0ZSBzbWFsbCBzdHJ1Y3RzLiBIYW5kbGUKKwl1bmFsaWduZWQgZGVzdGluYXRpb25zIGluIDMsIDUsIDYgYW5kIDctYnl0ZSBzbWFsbCBzdHJ1Y3RzLiBPcmRlcgorCWFyZ3VtZW50IHR5cGUgY2hlY2tzIHNvIHRoYXQgY29tbW9uIGFyZ3VtZW50IHR5cGVzIGFwcGVhciBmaXJzdC4KKwkoZmZpX2Nsb3N1cmVfTElOVVgpOiBSZW5hbWUgdG8gZmZpX2Nsb3N1cmVfcGEzMi4gUmVuYW1lCisJZmZpX2Nsb3N1cmVfaW5uZXJfTElOVVggdG8gZmZpX2Nsb3N1cmVfaW5uZXJfcGEzMi4KKworMjAwNi0wMy0yNCAgQWxhbiBNb2RyYSAgPGFtb2RyYUBiaWdwb25kLm5ldC5hdT4KKworCSogc3JjL3Bvd2VycGMvZmZpdGFyZ2V0LmggKGVudW0gZmZpX2FiaSk6IEFkZCBGRklfTElOVVguICBEZWZhdWx0CisJZm9yIDMyLWJpdCB1c2luZyBJQk0gZXh0ZW5kZWQgZG91YmxlIGZvcm1hdC4gIEZpeCBGRklfTEFTVF9BQkkuCisJKiBzcmMvcG93ZXJwYy9mZmkuYyAoZmZpX3ByZXBfYXJnc19TWVNWKTogSGFuZGxlIGxpbnV4IHZhcmlhbnQgb2YKKwlGRklfVFlQRV9MT05HRE9VQkxFLgorCShmZmlfcHJlcF9hcmdzNjQpOiBBc3NlcnQgdXNpbmcgSUJNIGV4dGVuZGVkIGRvdWJsZS4KKwkoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBEb24ndCBtdW5nZSBGRklfVFlQRV9MT05HRE9VQkxFIHR5cGUuCisJSGFuZGxlIEZGSV9MSU5VWCBGRklfVFlQRV9MT05HRE9VQkxFIHJldHVybiBhbmQgYXJncy4KKwkoZmZpX2NhbGwpOiBIYW5kbGUgRkZJX0xJTlVYLgorCShmZmlfY2xvc3VyZV9oZWxwZXJfU1lTVik6IE5vbiBGRklfTElOVVggbG9uZyBkb3VibGUgcmV0dXJuIG5lZWRzCisJZ3ByMyByZXR1cm4gcG9pbnRlciBhcyBmb3Igc3RydWN0IHJldHVybi4gIEhhbmRsZSBGRklfTElOVVgKKwlGRklfVFlQRV9MT05HRE9VQkxFIHJldHVybiBhbmQgYXJncy4gIERvbid0IGluY3JlbWVudCAibmYiCisJdW5uZWNlc3NhcmlseS4KKwkqIHNyYy9wb3dlcnBjL3BwY19jbG9zdXJlLlMgKGZmaV9jbG9zdXJlX1NZU1YpOiBMb2FkIGJvdGggZjEgYW5kIGYyCisJZm9yIEZGSV9UWVBFX0xPTkdET1VCTEUuICBNb3ZlIGVwaWxvZ3VlIGluc25zIGludG8gY2FzZSB0YWJsZS4KKwlEb24ndCB1c2UgcjYgYXMgcG9pbnRlciB0byByZXN1bHRzLCBpbnN0ZWFkIHVzZSBzcCBvZmZzZXQuICBEb24ndAorCW1ha2UgYSBzcGVjaWFsIGNhbGwgdG8gbG9hZCBsciB3aXRoIGNhc2UgdGFibGUgYWRkcmVzcywgaW5zdGVhZAorCXVzZSBvZmZzZXQgZnJvbSBwcmV2aW91cyBjYWxsLgorCSogc3JjL3Bvd2VycGMvc3lzdi5TIChmZmlfY2FsbF9TWVNWKTogU2F2ZSBsb25nIGRvdWJsZSByZXR1cm4uCisJKiBzcmMvcG93ZXJwYy9saW51eDY0LlMgKGZmaV9jYWxsX0xJTlVYNjQpOiBTaW1wbGlmeSBsb25nIGRvdWJsZQorCXJldHVybi4KKworMjAwNi0wMy0xNSAgS2F6IEtvamltYSAgPGtrb2ppbWFAZ2NjLmdudS5vcmc+CisKKwkqIHNyYy9zaDY0L2ZmaS5jIChmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IEhhbmRsZSBmbG9hdCBhcmd1bWVudHMKKwlwYXNzZWQgd2l0aCBGUCByZWdpc3RlcnMgY29ycmVjdGx5LgorCShmZmlfY2xvc3VyZV9oZWxwZXJfU1lTVik6IExpa2V3aXNlLgorCSogc3JjL3NoNjQvc3lzdi5TOiBMaWtld2lzZS4KKworMjAwNi0wMy0wMSAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvdW53aW5kdGVzdC5jYyAoY2xvc3VyZV90ZXN0X2ZuKTogTWFyayBjaWYsCisJYXJncyBhbmQgdXNlcmRhdGEgdW51c2VkLgorCShjbG9zdXJlX3Rlc3RfZm4xKTogTWFyayBjaWYgYW5kIHVzZXJkYXRhIHVudXNlZC4KKwkobWFpbik6IFJlbW92ZSB1bnVzZWQgcmVzLgorCisyMDA2LTAyLTI4ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jYWxsLmV4cDogQWRqdXN0IEZTRiBhZGRyZXNzLiBBZGQgdGVzdCBydW5zIGZvcgorCS1PMiwgLU8zLCAtT3MgYW5kIHRoZSB3YXJuaW5nIGZsYWdzIC1XIC1XYWxsLgorCSogdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL3NwZWNpYWwuZXhwOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mZml0ZXN0Lmg6IEFkZCBhbiBfX1VOVVNFRF9fIG1hY3JvIHRvIG1hcmsKKwl1bnVzZWQgcGFyYW1ldGVyIHVudXNlZCBmb3IgZ2NjIG9yIGVsc2UgZG8gbm90aGluZy4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC9mZml0ZXN0Y3h4Lmg6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xMmJ5dGUuYyAoY2xzX3N0cnVjdF8xMmJ5dGVfZ24pOiBNYXJrIGNpZgorCWFuZCB1c2VyZGF0YSB1bnVzZWQuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE2Ynl0ZS5jIChjbHNfc3RydWN0XzE2Ynl0ZV9nbik6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xOGJ5dGUuYyAoY2xzX3N0cnVjdF8xOGJ5dGVfZ24pOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTlieXRlLmMgKGNsc19zdHJ1Y3RfMTlieXRlX2duKTogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzFfMWJ5dGUuYyAoY2xzX3N0cnVjdF8xXzFieXRlX2duKTogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzIwYnl0ZS5jIChjbHNfc3RydWN0XzIwYnl0ZV9nbik6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yMGJ5dGUxLmMgKGNsc19zdHJ1Y3RfMjBieXRlX2duKTogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzI0Ynl0ZS5jIChjbHNfc3RydWN0XzI0Ynl0ZV9nbik6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yYnl0ZS5jIChjbHNfc3RydWN0XzJieXRlX2duKTogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzNfMWJ5dGUuYyAoY2xzX3N0cnVjdF8zXzFieXRlX2duKTogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzNieXRlMS5jIChjbHNfc3RydWN0XzNieXRlX2duKTogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzNieXRlMi5jIChjbHNfc3RydWN0XzNieXRlX2duMSk6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc180XzFieXRlLmMgKGNsc19zdHJ1Y3RfNF8xYnl0ZV9nbik6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc180Ynl0ZS5jIChjbHNfc3RydWN0XzRieXRlX2duKTogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzVfMV9ieXRlLmMgKGNsc19zdHJ1Y3RfNWJ5dGVfZ24pOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNWJ5dGUuYyAoY2xzX3N0cnVjdF81Ynl0ZV9nbik6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc182NGJ5dGUuYyAoY2xzX3N0cnVjdF82NGJ5dGVfZ24pOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNl8xX2J5dGUuYyAoY2xzX3N0cnVjdF82Ynl0ZV9nbik6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc182Ynl0ZS5jIChjbHNfc3RydWN0XzZieXRlX2duKTogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzdfMV9ieXRlLmMgKGNsc19zdHJ1Y3RfN2J5dGVfZ24pOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfN2J5dGUuYyAoY2xzX3N0cnVjdF83Ynl0ZV9nbik6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc184Ynl0ZS5jIChjbHNfc3RydWN0XzhieXRlX2duKTogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzlieXRlMS5jIChjbHNfc3RydWN0XzlieXRlX2duKTogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzlieXRlMi5jIChjbHNfc3RydWN0XzlieXRlX2duKTogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2RvdWJsZS5jIChjbHNfc3RydWN0X2FsaWduX2duKToKKwlMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fZmxvYXQuYyAoY2xzX3N0cnVjdF9hbGlnbl9nbik6CisJTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGUuYyAoY2xzX3N0cnVjdF9hbGlnbl9nbik6CisJTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3BvaW50ZXIuYyAoY2xzX3N0cnVjdF9hbGlnbl9mbik6IENhc3QKKwl2b2lkKiB0byBhdm9pZCBjb21waWxlciB3YXJuaW5nLgorCShtYWluKTogTGlrZXdpc2UuCisJKGNsc19zdHJ1Y3RfYWxpZ25fZ24pOiBNYXJrIGNpZiBhbmQgdXNlcmRhdGEgdW51c2VkLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50MTYuYyAoY2xzX3N0cnVjdF9hbGlnbl9nbik6CisJTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQzMi5jIChjbHNfc3RydWN0X2FsaWduX2duKToKKwlMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDY0LmMgKGNsc19zdHJ1Y3RfYWxpZ25fZ24pOgorCUxpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50MTYuYyAoY2xzX3N0cnVjdF9hbGlnbl9nbik6CisJTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3VpbnQzMi5jIChjbHNfc3RydWN0X2FsaWduX2duKToKKwlMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZG91YmxlLmMgKGNsc19yZXRfZG91YmxlX2ZuKTogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2Zsb2F0LmMgKGNsc19yZXRfZmxvYXRfZm4pOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfc2NoYXIuYyAodGVzdF9mdW5jX2duKTogTWFyayBjaWYgYW5kCisJZGF0YSB1bnVzZWQuCisJKG1haW4pOiBDYXN0IHJlc19jYWxsIHRvIHNpbGVuY2UgZ2NjLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV9zc2hvcnQuYyAodGVzdF9mdW5jX2duKTogTWFyayBjaWYgYW5kCisJZGF0YSB1bnVzZWQuCisJKG1haW4pOiBDYXN0IHJlc19jYWxsIHRvIHNpbGVuY2UgZ2NjLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV9zc2hvcnRjaGFyLmMgKHRlc3RfZnVuY19nbik6IE1hcmsgY2lmCisJYW5kIGRhdGEgdW51c2VkLgorCShtYWluKTogQ2FzdCByZXNfY2FsbCB0byBzaWxlbmNlIGdjYy4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfdWNoYXIuYyAodGVzdF9mdW5jX2duKTogTWFyayBjaWYgYW5kCisJZGF0YSB1bnVzZWQuCisJKG1haW4pOiBDYXN0IHJlc19jYWxsIHRvIHNpbGVuY2UgZ2NjLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV91c2hvcnQuYyAodGVzdF9mdW5jX2duKTogTWFyayBjaWYgYW5kCisJZGF0YSB1bnVzZWQuCisJKG1haW4pOiBDYXN0IHJlc19jYWxsIHRvIHNpbGVuY2UgZ2NjLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV91c2hvcnRjaGFyLmMgKHRlc3RfZnVuY19nbik6IE1hcmsgY2lmCisJYW5kIGRhdGEgdW51c2VkLgorCShtYWluKTogQ2FzdCByZXNfY2FsbCB0byBzaWxlbmNlIGdjYy4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc2NoYXIuYyAoY2xzX3JldF9zY2hhcl9mbik6IE1hcmsgY2lmIGFuZAorCXVzZXJkYXRhIHVudXNlZC4KKwkoY2xzX3JldF9zY2hhcl9mbik6IENhc3QgcHJpbnRmIHBhcmFtZXRlciB0byBzaWxlbmNlIGdjYy4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc2ludC5jIChjbHNfcmV0X3NpbnRfZm4pOiBNYXJrIGNpZiBhbmQKKwl1c2VyZGF0YSB1bnVzZWQuCisJKGNsc19yZXRfc2ludF9mbik6IENhc3QgcHJpbnRmIHBhcmFtZXRlciB0byBzaWxlbmNlIGdjYy4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc3Nob3J0LmMgKGNsc19yZXRfc3Nob3J0X2ZuKTogTWFyayBjaWYgYW5kCisJdXNlcmRhdGEgdW51c2VkLgorCShjbHNfcmV0X3NzaG9ydF9mbik6IENhc3QgcHJpbnRmIHBhcmFtZXRlciB0byBzaWxlbmNlIGdjYy4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWNoYXIuYyAoY2xzX3JldF91Y2hhcl9mbik6ICBNYXJrIGNpZiBhbmQKKwl1c2VyZGF0YSB1bnVzZWQuCisJKGNsc19yZXRfdWNoYXJfZm4pOiBDYXN0IHByaW50ZiBwYXJhbWV0ZXIgdG8gc2lsZW5jZSBnY2MuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VpbnQuYyAoY2xzX3JldF91aW50X2ZuKTogTWFyayBjaWYgYW5kCisJdXNlcmRhdGEgdW51c2VkLgorCShjbHNfcmV0X3VpbnRfZm4pOiBDYXN0IHByaW50ZiBwYXJhbWV0ZXIgdG8gc2lsZW5jZSBnY2MuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3Vsb25nbG9uZy5jIChjbHNfcmV0X3Vsb25nbG9uZ19mbik6IE1hcmsgY2lmCisJYW5kIHVzZXJkYXRhIHVudXNlZC4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdXNob3J0LmMgKGNsc19yZXRfdXNob3J0X2ZuKTogTWFyayBjaWYgYW5kCisJdXNlcmRhdGEgdW51c2VkLgorCShjbHNfcmV0X3VzaG9ydF9mbik6IENhc3QgcHJpbnRmIHBhcmFtZXRlciB0byBzaWxlbmNlIGdjYy4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mbG9hdC5jIChmbG9hdGluZyk6IFJlbW92ZSB1bnVzZWQgcGFyYW1ldGVyIGUuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmxvYXQxLmMgKG1haW4pOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlIGkuCisJQ2xlYW51cCB3aGl0ZSBzcGFjZXMuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVnaW50LmMgKGNoZWNraW5nKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZSBpLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QuYyAoY2xzX3N0cnVjdF9jb21iaW5lZF9nbik6IE1hcmsKKwljaWYgYW5kIHVzZXJkYXRhIHVudXNlZC4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0MS5jIChjbHNfc3RydWN0X2NvbWJpbmVkX2duKToKKwlMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0MTAuYyAoQl9nbik6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QyLmMgKEJfZm4pOiBBZGp1c3QgcHJpbnRmCisJZm9ybWF0dGVycyB0byBzaWxlbmNlIGdjYy4KKwkoQl9nbik6IE1hcmsgY2lmIGFuZCB1c2VyZGF0YSB1bnVzZWQuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDMuYyAoQl9nbik6IE1hcmsgY2lmIGFuZCB1c2VyZGF0YQorCXVudXNlZC4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0NC5jOiBNZW50aW9uIHJlbGF0ZWQgUFIuCisJKEJfZ24pOiBNYXJrIGNpZiBhbmQgdXNlcmRhdGEgdW51c2VkLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q1LmMgKEJfZ24pOiBNYXJrIGNpZiBhbmQgdXNlcmRhdGEKKwl1bnVzZWQuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDYuYzogTWVudGlvbiByZWxhdGVkIFBSLgorCShCX2duKTogTWFyayBjaWYgYW5kIHVzZXJkYXRhIHVudXNlZC4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Ny5jIChCX2duKTogTWFyayBjaWYgYW5kIHVzZXJkYXRhCisJdW51c2VkLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q4LmMgKEJfZ24pOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0OS5jIChCX2duKTogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcHJvYmxlbTEuYyAoc3R1Yik6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3B5b2JqYy10Yy5jIChtYWluKTogQ2FzdCB0aGUgcmVzdWx0IHRvIHNpbGVuY2UKKwlnY2MuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2ZsMi5jIChyZXR1cm5fZmwpOiBBZGQgdGhlIG5vdGUgbWVudGlvbmVkCisJaW4gdGhlIGxhc3QgY29tbWl0IGZvciB0aGlzIHRlc3QgY2FzZSBpbiB0aGUgdGVzdCBjYXNlIGl0c2VsZi4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMC5jIChjbG9zdXJlX3Rlc3RfZm4wKTogTWFyayBjaWYgYXMKKwl1bnVzZWQuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjEuYyAoY2xvc3VyZV90ZXN0X2ZuMSk6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4yLmMgKGNsb3N1cmVfdGVzdF9mbjIpOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMy5jIChjbG9zdXJlX3Rlc3RfZm4zKTogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjQuYyAoY2xvc3VyZV90ZXN0X2ZuMCk6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm41LmMgKGNsb3N1cmVfdGVzdF9mbjUpOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNi5jIChjbG9zdXJlX3Rlc3RfZm4wKTogTGlrZXdpc2UuCisKKzIwMDYtMDItMjIgIEtheiBLb2ppbWEgIDxra29qaW1hQGdjYy5nbnUub3JnPgorCisJKiBzcmMvc2gvc3lzdi5TOiBGaXggcmVnaXN0ZXIgbnVtYmVycyBpbiB0aGUgRkRFIGZvcgorCWZmaV9jbG9zdXJlX1NZU1YuCisKKzIwMDYtMDItMjAgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9mbDIuYyAocmV0dXJuX2ZsKTogUmVtb3ZlIHN0YXRpYworCWRlY2xhcmF0aW9uIHRvIGF2b2lkIGEgZmFsc2UgbmVnYXRpdmUgb24gaXg4Ni4gU2VlIFBSMzIzLgorCisyMDA2LTAyLTE4ICBLYXogS29qaW1hICA8a2tvamltYUBnY2MuZ251Lm9yZz4KKworCSogc3JjL3NoL2ZmaS5jIChmZmlfY2xvc3VyZV9oZWxwZXJfU1lTVik6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUKKwlhbmQgY2FzdCBpbnRlZ2VyIHRvIHZvaWQgKiBpZiBuZWVkZWQuICBVcGRhdGUgdGhlIHBvaW50ZXIgdG8KKwl0aGUgRlAgcmVnaXN0ZXIgc2F2ZWQgYXJlYSBjb3JyZWN0bHkuCisKKzIwMDYtMDItMTcgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q2LmM6IFhGQUlMIHRoaXMgdGVzdCB1bnRpbCBQUjI1NjMwCisJaXMgZml4ZWQuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDQuYzogTGlrZXdpc2UuCisKKzIwMDYtMDItMTYgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9kYmwuYzogTmV3IHRlc3QgY2FzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fZGJsMS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fZGJsMi5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fZmwuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2ZsMS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fZmwyLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9mbDMuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjYuYzogTGlrZXdpc2UuCisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Mi5jOiBSZW1vdmUgZmZpX3R5cGVfbXlsb25nCisJZGVmaW5pdGlvbi4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mZml0ZXN0Lmg6IEFkZCBmZmlfdHlwZV9teWxvbmcgZGVmaW5pdGlvbgorCWhlcmUgdG8gYmUgdXNlZCBieSBvdGhlciB0ZXN0IGNhc2VzIHRvby4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QxMC5jOiBOZXcgdGVzdCBjYXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q5LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q4LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q3LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q2LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q1LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q0LmM6IExpa2V3aXNlLgorCisyMDA2LTAxLTIxICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwkqIGNvbmZpZ3VyZS5hYzogRW5hYmxlIGxpYmZmaSBmb3Igc3BhcmM2NC0qLWZyZWVic2QqLgorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCisyMDA2LTAxLTE4ICBKYWt1YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNvbT4KKworCSogc3JjL3Bvd2VycGMvc3lzdi5TIChzbXN0X3R3b19yZWdpc3Rlcik6IERvbid0IGNhbGwgX19hc2hsZGkzLAorCWluc3RlYWQgZG8gdGhlIHNoaWZ0aW5nIGlubGluZS4KKwkqIHNyYy9wb3dlcnBjL3BwY19jbG9zdXJlLlMgKGZmaV9jbG9zdXJlX1NZU1YpOiBEb24ndCBjb21wdXRlICVyNQorCXNoaWZ0IGNvdW50IHVuY29uZGl0aW9uYWxseS4gIFNpbXBsaWZ5IGxvYWQgc2VxdWVuY2VzIGZvciAxLCAyLCAzLCA0CisJYW5kIDggYnl0ZSBzdHJ1Y3RzLCBmb3IgdGhlIHJlbWFpbmluZyBzdHJ1Y3Qgc2l6ZXMgZG9uJ3QgY2FsbAorCV9fbHNocmRpMywgaW5zdGVhZCBkbyB0aGUgc2hpZnRpbmcgaW5saW5lLgorCisyMDA1LTEyLTA3ICBUaGllbW8gU2V1ZmVyICA8dGhzQG5ldHdvcmtuby5kZT4KKworCSogc3JjL21pcHMvZmZpdGFyZ2V0Lmg6IFJlbW92ZSBvYnNvbGV0ZSBzZ2lkZWZzLmggaW5jbHVkZS4gQWRkCisJbWlzc2luZyBwYXJlbnRoZXNlcy4KKwkqIHNyYy9taXBzL28zMi5TIChmZmlfY2FsbF9PMzIpOiBDb2RlIGZvcm1hdHRpbmcuIERlZmluZQorCWFuZCB1c2UgQTNfT0ZGLCBGUF9PRkYsIFJBX09GRi4gTWljcm8tb3B0aW1pemF0aW9ucy4KKwkoZmZpX2Nsb3N1cmVfTzMyKTogTGlrZXdpc2UsIGJ1dCB3aXRoIG5ld2x5IGRlZmluZWQgQTNfT0ZGMiwKKwlBMl9PRkYyLCBBMV9PRkYyLCBBMF9PRkYyLCBSQV9PRkYyLCBGUF9PRkYyLCBTMF9PRkYyLCBHUF9PRkYyLAorCVYxX09GRjIsIFYwX09GRjIsIEZBXzFfMV9PRkYyLCBGQV8xXzBfT0ZGMiwgRkFfMF8xX09GRjIsCisJRkFfMF8wX09GRjIuCisJKiBzcmMvbWlwcy9mZmkuYyAoZmZpX3ByZXBfYXJncyk6IENvZGUgZm9ybWF0dGluZy4gRml4CisJZW5kaWFubmVzcyBidWdzLgorCShmZmlfcHJlcF9jbG9zdXJlKTogSW1wcm92ZSB0cmFtcG9saW5lIGluc3RydWN0aW9uIHNjaGVkdWxpbmcuCisJKGZmaV9jbG9zdXJlX21pcHNfaW5uZXJfTzMyKTogRml4IGVuZGlhbm5lc3MgYnVncy4KKworMjAwNS0xMi0wMyAgQWxhbiBNb2RyYSAgPGFtb2RyYUBiaWdwb25kLm5ldC5hdT4KKworCSogc3JjL3Bvd2VycGMvZmZpLmM6IEZvcm1hdHRpbmcuCisJKGZmaV9wcmVwX2FyZ3NfU1lTVik6IEF2b2lkIHBvc3NpYmxlIGFsaWFzaW5nIHByb2JsZW1zIGJ5IHVzaW5nIHVuaW9ucy4KKwkoZmZpX3ByZXBfYXJnczY0KTogTGlrZXdpc2UuCisKKzIwMDUtMDktMzAgIEdlb2ZmcmV5IEtlYXRpbmcgIDxnZW9mZmtAYXBwbGUuY29tPgorCisJKiB0ZXN0c3VpdGUvbGliL2xpYmZmaS1kZy5leHAgKGxpYmZmaV90YXJnZXRfY29tcGlsZSk6IEZvcgorCWRhcndpbiwgdXNlIC1zaGFyZWQtbGliZ2NjIG5vdCAtbGdjY19zLCBhbmQgZXhwbGFpbiB3aHkuCisKKzIwMDUtMDktMjYgIFRvbSBUcm9tZXkgIDx0cm9tZXlAcmVkaGF0LmNvbT4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zsb2F0MS5jICh2YWx1ZV90eXBlKTogTmV3IHR5cGVkZWYuCisJKENBTkFSWSk6IE5ldyBkZWZpbmUuCisJKG1haW4pOiBDaGVjayBmb3IgcmVzdWx0IGJ1ZmZlciBvdmVyZmxvdy4KKwkqIHNyYy9wb3dlcnBjL2xpbnV4NjQuUzogSGFuZGxlIGxpbnV4NjQgbG9uZyBkb3VibGUgcmV0dXJucy4KKwkqIHNyYy9wb3dlcnBjL2ZmaS5jIChGTEFHX1JFVFVSTlNfMTI4QklUUyk6IE5ldyBjb25zdGFudC4KKwkoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBIYW5kbGUgbGludXg2NCBsb25nIGRvdWJsZSByZXR1cm5zLgorCisyMDA1LTA4LTI1ICBBbGFuIE1vZHJhICA8YW1vZHJhQGJpZ3BvbmQubmV0LmF1PgorCisJUFIgdGFyZ2V0LzIzNDA0CisJKiBzcmMvcG93ZXJwYy9mZmkuYyAoZmZpX3ByZXBfYXJnc19TWVNWKTogQ29ycmVjdCBwbGFjZW1lbnQgb2Ygc3RhY2sKKwlob21lZCBmcCBhcmdzLgorCShmZmlfc3RhdHVzIGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogQ29ycmVjdCBzdGFjayBzaXppbmcgZm9yIHNhbWUuCisKKzIwMDUtMDgtMTEgIEpha3ViIEplbGluZWsgIDxqYWt1YkByZWRoYXQuY29tPgorCisJKiBjb25maWd1cmUuYWMgKEhBVkVfSElEREVOX1ZJU0lCSUxJVFlfQVRUUklCVVRFKTogTmV3IHRlc3QuCisJKEFIX0JPVFRPTSk6IEFkZCBGRklfSElEREVOIGRlZmluaXRpb24uCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisJKiBmZmljb25maWcuaC5pbjogUmVidWlsdC4KKwkqIHNyYy9wb3dlcnBjL2ZmaS5jIChoaWRkZW4pOiBSZW1vdmUuCisJKGZmaV9jbG9zdXJlX0xJTlVYNjQsIGZmaV9wcmVwX2FyZ3M2NCwgZmZpX2NhbGxfTElOVVg2NCwKKwlmZmlfY2xvc3VyZV9oZWxwZXJfTElOVVg2NCk6IFVzZSBGRklfSElEREVOIGluc3RlYWQgb2YgaGlkZGVuLgorCSogc3JjL3Bvd2VycGMvbGludXg2NF9jbG9zdXJlLlMgKGZmaV9jbG9zdXJlX0xJTlVYNjQsCisJLmZmaV9jbG9zdXJlX0xJTlVYNjQpOiBVc2UgRkZJX0hJRERFTiBpbnN0ZWFkIG9mIC5oaWRkZW4uCisJKiBzcmMveDg2L2ZmaS5jIChmZmlfY2xvc3VyZV9TWVNWLCBmZmlfY2xvc3VyZV9yYXdfU1lTVik6IFJlbW92ZSwKKwlhZGQgRkZJX0hJRERFTiB0byBpdHMgcHJvdG90eXBlLgorCShmZmlfY2xvc3VyZV9TWVNWX2lubmVyKTogTmV3LgorCSogc3JjL3g4Ni9zeXN2LlMgKGZmaV9jbG9zdXJlX1NZU1YsIGZmaV9jbG9zdXJlX3Jhd19TWVNWKTogTmV3LgorCSogc3JjL3g4Ni93aW4zMi5TIChmZmlfY2xvc3VyZV9TWVNWLCBmZmlfY2xvc3VyZV9yYXdfU1lTVik6IE5ldy4KKworMjAwNS0wOC0xMCAgQWxmcmVkIE0uIFN6bWlkdCAgPGFtc0BnbnUub3JnPgorCisJUFIgbGliZmZpLzIxODE5OgorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCSogY29uZmlndXJlLmFjOiBIYW5kbGUgaSo4Ni0qLWdudSouCisKKzIwMDUtMDgtMDkgIEpha3ViIEplbGluZWsgIDxqYWt1YkByZWRoYXQuY29tPgorCisJKiBzcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TIChmZmlfY2xvc3VyZV9TWVNWKTogVXNlCisJRFdfQ0ZBX29mZnNldF9leHRlbmRlZF9zZiByYXRoZXIgdGhhbgorCURXX0NGQV9HTlVfbmVnYXRpdmVfb2Zmc2V0X2V4dGVuZGVkLgorCSogc3JjL3Bvd2VycGMvc3lzdi5TIChmZmlfY2FsbF9TWVNWKTogTGlrZXdpc2UuCisKKzIwMDUtMDctMjIgIFNVR0lPS0EgVG9zaGlub2J1ICA8c3VnaW9rYUBpdG9uZXQuY28uanA+CisKKwkqIHNyYy9zaC9zeXN2LlMgKGZmaV9jYWxsX1NZU1YpOiBTdG9wIGFyZ3VtZW50IHBvcHBpbmcgY29ycmVjdGx5CisJb24gc2gzLgorCShmZmlfY2xvc3VyZV9TWVNWKTogQ2hhbmdlIHRoZSBzdGFjayBsYXlvdXQgZm9yIHNoMyBzdHJ1Y3QgYXJndW1lbnQuCisJKiBzcmMvc2gvZmZpLmMgKGZmaV9wcmVwX2FyZ3MpOiBGaXggc2gzIGFyZ3VtZW50IGNvcHksIHdoZW4gaXQgaXMKKwlwYXJ0aWFsbHkgb24gcmVnaXN0ZXIuCisJKGZmaV9jbG9zdXJlX2hlbHBlcl9TWVNWKTogTGlrZXdpc2UuCisJKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogRG9uJ3Qgc2V0IHRvbyBtYW55IGNpZi0+ZmxhZ3MuCisKKzIwMDUtMDctMjAgIEtheiBLb2ppbWEgIDxra29qaW1hQGdjYy5nbnUub3JnPgorCisJKiBzcmMvc2gvZmZpLmMgKGZmaV9jYWxsKTogSGFuZGxlIHNtYWxsIHN0cnVjdHVyZXMgY29ycmVjdGx5LgorCVJlbW92ZSBlbXB0eSBsaW5lLgorCSogc3JjL3NoNjQvZmZpLmMgKHNpbXBsZV90eXBlKTogUmVtb3ZlLgorCShyZXR1cm5fdHlwZSk6IEhhbmRsZSBzbWFsbCBzdHJ1Y3R1cmVzIGNvcnJlY3RseS4KKwkoZmZpX3ByZXBfYXJncyk6IExpa2V3aXNlLgorCShmZmlfY2FsbCk6IExpa2V3aXNlLgorCShmZmlfY2xvc3VyZV9oZWxwZXJfU1lTVik6IExpa2V3aXNlLgorCSogc3JjL3NoNjQvc3lzdi5TIChmZmlfY2FsbF9TWVNWKTogSGFuZGxlIDEsIDIgYW5kIDQtYnl0ZSByZXR1cm4uCisJRW1pdCBwb3NpdGlvbiBpbmRlcGVuZGVudCBjb2RlIGlmIFBJQyBhbmQgcmVtb3ZlIHdyb25nIGRhdGFsYWJlbAorCXByZWZpeGVzIGZyb20gRUggZGF0YS4KKworMjAwNS0wNy0xOSAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiBNYWtlZmlsZS5hbSAobm9kaXN0X2xpYmZmaV9sYV9TT1VSQ0VTKTogQWRkIFBPV0VSUENfRlJFRUJTRC4KKwkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCSogaW5jbHVkZS9NYWtlZmlsZS5pbjogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvTWFrZWZpbGUuaW46IExpa2V3aXNlLgorCSogY29uZmlndXJlLmFjOiBBZGQgUE9XRVJQQ19GUkVFQlNEIHJ1bGVzLgorCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCSogc3JjL3Bvd2VycGMvZmZpdGFyZ2V0Lmg6IEFkZCBQT1dFUlBDX0ZSRUVCU0QgcnVsZXMuCisJKEZGSV9TWVNWX1RZUEVfU01BTExfU1RSVUNUKTogRGVmaW5lLgorCSogc3JjL3Bvd2VycGMvZmZpLmM6IEFkZCBmbGFncyB0byBoYW5kbGUgc21hbGwgc3RydWN0dXJlIHJldHVybnMKKwlpbiBmZmlfY2FsbF9TWVNWLgorCShmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IEhhbmRsZSBzbWFsbCBzdHJ1Y3R1cmVzIGZvciBTWVNWIDQgQUJJLgorCUFrYSBGRklfU1lTVi4KKwkoZmZpX2Nsb3N1cmVfaGVscGVyX1NZU1YpOiBMaWtld2lzZS4KKwkqIHNyYy9wb3dlcnBjL3BwY19jbG9zdXJlLlM6IEFkZCByZXR1cm4gdHlwZXMgZm9yIHNtYWxsIHN0cnVjdHVyZXMuCisJKiBzcmMvcG93ZXJwYy9zeXN2LlM6IEFkZCBiaXRzIHRvIGhhbmRsZSBzbWFsbCBzdHJ1Y3R1cmVzIGZvcgorCWZpbmFsIFNZU1YgNCBBQkkuCisKKzIwMDUtMDctMTAgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc181XzFfYnl0ZS5jOiBOZXcgdGVzdCBmaWxlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc182XzFfYnl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfN18xX2J5dGUuYzogTGlrZXdpc2UuCisKKzIwMDUtMDctMDUgIFJhbmRvbHBoIENodW5nICA8dGF1c3FAZGViaWFuLm9yZz4KKworCSogc3JjL3BhL2ZmaS5jIChmZmlfc3RydWN0X3R5cGUpOiBSZW5hbWUgRkZJX1RZUEVfU01BTExfU1RSVUNUMQorCWFzIEZGSV9UWVBFX1NNQUxMX1NUUlVDVDMuICBCcmVhayBvdXQgaGFuZGxpbmcgZm9yIDUtNyBieXRlCisJc3RydWN0dXJlcy4gIEtpbGwgY29tcGlsYXRpb24gd2FybmluZ3MuCisJKGZmaV9jbG9zdXJlX2lubmVyX0xJTlVYKTogUHJpbnQgcmV0dXJuIHZhbHVlcyBhcyBoZXggaW4gZGVidWcKKwltZXNzYWdlLiAgUmVuYW1lIEZGSV9UWVBFX1NNQUxMX1NUUlVDVDEgYXMgRkZJX1RZUEVfU01BTExfU1RSVUNUMy4KKwlQcm9wZXJseSBoYW5kbGUgNS03IGJ5dGUgc3RydWN0dXJlIHJldHVybnMuCisJKiBzcmMvcGEvZmZpdGFyZ2V0LmggKEZGSV9UWVBFX1NNQUxMX1NUUlVDVDEpCisJKEZGSV9UWVBFX1NNQUxMX1NUUlVDVDIpOiBSZW1vdmUuCisJKEZGSV9UWVBFX1NNQUxMX1NUUlVDVDMsIEZGSV9UWVBFX1NNQUxMX1NUUlVDVDUpCisJKEZGSV9UWVBFX1NNQUxMX1NUUlVDVDYsIEZGSV9UWVBFX1NNQUxMX1NUUlVDVDcpOiBEZWZpbmUuCisJKiBzcmMvcGEvbGludXguUzogTWFyayBzb3VyY2UgZmlsZSBhcyB1c2luZyBQQTEuMSBhc3NlbWJseS4KKwkoY2hlY2tzbXN0MSwgY2hlY2tzbXN0Mik6IFJlbW92ZS4KKwkoY2hlY2tzbXN0Myk6IE9wdGltaXplIGhhbmRsaW5nIG9mIDMtYnl0ZSBzdHJ1Y3QgcmV0dXJucy4KKwkoY2hlY2tzbXN0NTY3KTogUHJvcGVybHkgaGFuZGxlIDUtNyBieXRlIHN0cnVjdCByZXR1cm5zLgorCisyMDA1LTA2LTE1ICBSYWluZXIgT3J0aCAgPHJvQFRlY2hGYWsuVW5pLUJpZWxlZmVsZC5ERT4KKworCVBSIGxpYmdjai8yMTk0MworCSogc3JjL21pcHMvbjMyLlM6IEVuZm9yY2UgUElDIGNvZGUuCisJKiBzcmMvbWlwcy9vMzIuUzogTGlrZXdpc2UuCisKKzIwMDUtMDYtMTUgIFJhaW5lciBPcnRoICA8cm9AVGVjaEZhay5VbmktQmllbGVmZWxkLkRFPgorCisJKiBjb25maWd1cmUuYWM6IFRyZWF0IGkqODYtKi1zb2xhcmlzMi4xMCBhbmQgdXAgYXMgWDg2XzY0LgorCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCisyMDA1LTA2LTAxICBBbGFuIE1vZHJhICA8YW1vZHJhQGJpZ3BvbmQubmV0LmF1PgorCisJKiBzcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TIChmZmlfY2xvc3VyZV9TWVNWKTogRG9uJ3QgdXNlIEpVTVBUQVJHRVQKKwl0byBjYWxsIGZmaV9jbG9zdXJlX2hlbHBlcl9TWVNWLiAgQXBwZW5kIEBsb2NhbCBpbnN0ZWFkLgorCSogc3JjL3Bvd2VycGMvc3lzdi5TIChmZmlfY2FsbF9TWVNWKTogTGlrZXdpc2UgZm9yIGZmaV9wcmVwX2FyZ3NfU1lTVi4KKworMjAwNS0wNS0xNyAgS2VsbGV5IENvb2sgIDxrY29va0BnY2MuZ251Lm9yZz4KKworCSogY29uZmlndXJlLmFjOiBVc2UgQUNfQ19CSUdFTkRJQU4gaW5zdGVhZCBvZiBBQ19DX0JJR0VORElBTl9DUk9TUy4KKwlVc2UgQUNfQ0hFQ0tfU0laRU9GIGluc3RlYWQgb2YgQUNfQ09NUElMRV9DSEVDS19TSVpFT0YuCisJKiBNYWtlZmlsZS5hbSAoQUNMT0NBTF9BTUZMQUdTKTogUmVtb3ZlIC1JIC4uL2NvbmZpZy4KKwkqIGFjbG9jYWwubTQsIGNvbmZpZ3VyZSwgZmZpY29uZmlnLmguaW4sIE1ha2VmaWxlLmluLAorCWluY2x1ZGUvTWFrZWZpbGUuaW4sIHRlc3RzdWl0ZS9NYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKworMjAwNS0wNS0wOSAgTWlrZSBTdHVtcCAgPG1yc0BhcHBsZS5jb20+CisKKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKworMjAwNS0wNS0wOCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAcmVkaGF0LmNvbT4KKworCVBSIGxpYmZmaS8yMTI4NQorCSogc3JjL2FscGhhL29zZi5TOiBVcGRhdGUgdW53aW5kIGludG8gdG8gbWF0Y2ggY29kZS4KKworMjAwNS0wNS0wNCAgQW5kcmVhcyBEZWdlcnQgPGFkQHBhcHlydXMtZ21iaC5kZT4KKwkgICAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAcmVkaGF0LmNvbT4KKworCSogc3JjL3g4Ni9mZmk2NC5jIChmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IFNhdmUgc3NlLXVzZWQgZmxhZyBpbgorCWJpdCAxMSBvZiBmbGFncy4KKwkoZmZpX2NhbGwpOiBNYXNrIHJldHVybiB0eXBlIGZpZWxkLiAgUGFzcyBzc2Vjb3VudCB0byBmZmlfY2FsbF91bml4NjQuCisJKGZmaV9wcmVwX2Nsb3N1cmUpOiBTZXQgY2FycnkgYml0IGlmIHNzZS11c2VkIGZsYWcgc2V0LgorCSogc3JjL3g4Ni91bml4NjQuUyAoZmZpX2NhbGxfdW5peDY0KTogQWRkIHNzZWNvdW50IGFyZ3VtZW50LgorCU9ubHkgbG9hZCBzc2UgcmVnaXN0ZXJzIGlmIHNzZWNvdW50IG5vbi16ZXJvLgorCShmZmlfY2xvc3VyZV91bml4NjQpOiBPbmx5IHNhdmUgc3NlIHJlZ2lzdGVycyBpZiBjYXJyeSBzZXQgb24gZW50cnkuCisKKzIwMDUtMDQtMjkgIFJhbGYgQ29yc2VwaXVzICA8cmFsZi5jb3JzZXBpdXNAcnRlbXMub3JnPgorCisJKiBjb25maWd1cmUuYWM6IEFkZCBpKjg2LSotcnRlbXMqLCBzcGFyYyotKi1ydGVtcyosCisJcG93ZXJwYy0qcnRlbXMqLCBhcm0qLSotcnRlbXMqLCBzaC0qLXJ0ZW1zKi4KKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKworMjAwNS0wNC0yMCAgSGFucy1QZXRlciBOaWxzc29uICA8aHBAYXhpcy5jb20+CisKKwkqIHRlc3RzdWl0ZS9saWIvbGliZmZpLWRnLmV4cCAobGliZmZpLWRnLXRlc3QtMSk6IEluIHJlZ3N1YiB1c2UsCisJaGF2ZSBUY2w4LjMtY29tcGF0aWJsZSBpbnRlcm1lZGlhdGUgdmFyaWFibGUuCisKKzIwMDUtMDQtMTggIFNpbW9uIFBvc25qYWsgPHNpbW9uLnBvc25qYWtAc2lvbC5uZXQ+CisJICAgIEhhbnMtUGV0ZXIgTmlsc3NvbiAgPGhwQGF4aXMuY29tPgorCisJKiBNYWtlZmlsZS5hbTogQWRkIENSSVMgc3VwcG9ydC4KKwkqIGNvbmZpZ3VyZS5hYzogTGlrZXdpc2UuCisJKiBNYWtlZmlsZS5pbiwgY29uZmlndXJlLCB0ZXN0c3VpdGUvTWFrZWZpbGUuaW4sCisJaW5jbHVkZS9NYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKwkqIHNyYy9jcmlzOiBOZXcgZGlyZWN0b3J5LgorCSogc3JjL2NyaXMvZmZpLmMsIHNyYy9jcmlzL3N5c3YuUywgc3JjL2NyaXMvZmZpdGFyZ2V0Lmg6IE5ldyBmaWxlcy4KKwkqIHNyYy9wcmVwX2NpZi5jIChmZmlfcHJlcF9jaWYpOiBXcmFwIGluICNpZm5kZWYgX19DUklTX18uCisKKwkqIHRlc3RzdWl0ZS9saWIvbGliZmZpLWRnLmV4cCAobGliZmZpLWRnLXRlc3QtMSk6IFJlcGxhY2UgXG4gd2l0aAorCVxyP1xuIGluIG91dHB1dCB0ZXN0cy4KKworMjAwNS0wNC0xMiAgTWlrZSBTdHVtcCAgPG1yc0BhcHBsZS5jb20+CisKKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKworMjAwNS0wMy0zMCAgSGFucyBCb2VobSAgPEhhbnMuQm9laG1AaHAuY29tPgorCisJKiBzcmMvaWE2NC9mZml0YXJnZXQuaCAoZmZpX2FyZyk6IFVzZSBsb25nIGxvbmcgaW5zdGVhZCBvZiBESS4KKworMjAwNS0wMy0zMCAgU3RldmUgRWxsY2V5ICA8c2plQGN1cC5ocC5jb20+CisKKwkqIHNyYy9pYTY0L2ZmaXRhcmdldC5oIChmZmlfYXJnKSBBREQgREkgYXR0cmlidXRlLgorCShmZmlfc2FyZykgRGl0dG8uCisJKiBzcmMvaWE2NC91bml4LlMgKGZmaV9jbG9zdXJlX3VuaXgpOiBFeHRlbmQgZ3AKKwl0byA2NCBiaXRzIGluIElMUDMyIG1vZGUuCisJTG9hZCA2NCBiaXRzIGV2ZW4gZm9yIHNob3J0IGRhdGEuCisKKzIwMDUtMDMtMjMgIE1pa2UgU3R1bXAgIDxtcnNAYXBwbGUuY29tPgorCisJKiBzcmMvcG93ZXJwYy9kYXJ3aW4uUzogVXBkYXRlIGZvciAtbTY0IG11bHRpbGliLgorCSogc3JjL3Bvd2VycGMvZGFyd2luX2Nsb3N1cmUuUzogTGlrZXdpc2UuCisKKzIwMDUtMDMtMjEgIFphY2sgV2VpbmJlcmcgIDx6YWNrQGNvZGVzb3VyY2VyeS5jb20+CisKKwkqIGNvbmZpZ3VyZS5hYzogRG8gbm90IGludm9rZSBUTF9BQ19HQ0NfVkVSU0lPTi4KKwlEbyBub3Qgc2V0IHRvb2xfaW5jbHVkZV9kaXIuCisJKiBhY2xvY2FsLm00LCBjb25maWd1cmUsIE1ha2VmaWxlLmluLCB0ZXN0c3VpdGUvTWFrZWZpbGUuaW46CisJUmVnZW5lcmF0ZS4KKwkqIGluY2x1ZGUvTWFrZWZpbGUuYW06IFNldCBnY2NfdmVyc2lvbiBhbmQgdG9vbGxpYmZmaWRpci4KKwkqIGluY2x1ZGUvTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisKKzIwMDUtMDItMjIgIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorCisJKiBzcmMvcG93ZXJwYy9mZmkuYyAoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBCdW1wIGFsaWdubWVudCB0bworCW9kZC1udW1iZXJlZCByZWdpc3RlciBwYWlycyBmb3IgNjQtYml0IGludGVnZXIgdHlwZXMuCisKKzIwMDUtMDItMjMgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKworCVBSIGxpYmZmaS8yMDEwNAorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9sbDEuYzogTmV3IHRlc3QgY2FzZS4KKworMjAwNS0wMi0xMSAgSmFuaXMgSm9obnNvbiAgPGphbmlzMTg3QHVzLmlibS5jb20+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fbG9uZ2RvdWJsZS5jOiBSZW1vdmUgZGctb3B0aW9ucy4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mbG9hdC5jOiBEaXR0by4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mbG9hdDIuYzogRGl0dG8uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmxvYXQzLmM6IERpdHRvLgorCisyMDA1LTAyLTA4ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwkqIHNyYy9mcnYvZmZpdGFyZ2V0Lmg6IFJlbW92ZSBQUEMgc3R1ZmYgd2hpY2ggZG9lcyBub3QgYmVsb25nIHRvIGZydi4KKworMjAwNS0wMS0xMiAgRXJpYyBCb3RjYXpvdSAgPGVib3RjYXpvdUBsaWJlcnR5c3VyZi5mcj4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL3NwZWNpYWwuZXhwIChjeHhfb3B0aW9ucyk6IEFkZAorCS1zaGFyZWQtbGliZ2NjLgorCisyMDA0LTEyLTMxICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEByZWRoYXQuY29tPgorCisJKiBzcmMvdHlwZXMuYyAoRkZJX0FHR1JFR0FURV9UWVBFREVGKTogUmVtb3ZlLgorCShGRklfVFlQRURFRik6IFJlbmFtZSBmcm9tIEZGSV9JTlRFR1JBTF9UWVBFREVGLiAgUmVwbGFjZSBzaXplIGFuZAorCW9mZnNldCBwYXJhbWV0ZXJzIHdpdGggYSB0eXBlIHBhcmFtZXRlcjsgZGVkdWNlIHNpemUgYW5kIHN0cnVjdHVyZQorCWFsaWdubWVudC4gIFVwZGF0ZSBhbGwgdXNlcnMuCisKKzIwMDQtMTItMzEgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQHJlZGhhdC5jb20+CisKKwkqIHNyYy90eXBlcy5jIChGRklfVFlQRV9QT0lOVEVSKTogRGVmaW5lIHdpdGggc2l6ZW9mLgorCShGRklfVFlQRV9MT05HRE9VQkxFKTogRml4IGZvciBpYTY0LgorCSogc3JjL2lhNjQvZmZpdGFyZ2V0LmggKHN0cnVjdCBmZmlfaWE2NF90cmFtcG9saW5lX3N0cnVjdCk6IE1vdmUKKwlpbnRvIGZmaV9wcmVwX2Nsb3N1cmUuCisJKiBzcmMvaWE2NC9pYTY0X2ZsYWdzLmgsIHNyYy9pYTY0L2ZmaS5jLCBzcmMvaWE2NC91bml4LlM6IFJld3JpdGUKKwlmcm9tIHNjcmF0Y2guCisKKzIwMDQtMTItMjcgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQHJlZGhhdC5jb20+CisKKwkqIHNyYy94ODYvdW5peDY0LlM6IEZpeCB0eXBvIGluIHVud2luZCBpbmZvLgorCisyMDA0LTEyLTI1ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEByZWRoYXQuY29tPgorCisJKiBzcmMveDg2L2ZmaTY0LmMgKHN0cnVjdCByZWdpc3Rlcl9hcmdzKTogUmVuYW1lIGZyb20gc3RhY2tMYXlvdXQuCisJKGVudW0geDg2XzY0X3JlZ19jbGFzcyk6IEFkZCBYODZfNjRfQ09NUExFWF9YODdfQ0xBU1MuCisJKG1lcmdlX2NsYXNzZXMpOiBDaGVjayBmb3IgaXQuCisJKFNTRV9DTEFTU19QKTogTmV3LgorCShjbGFzc2lmeV9hcmd1bWVudCk6IFBhc3MgYnl0ZV9vZmZzZXQgYnkgdmFsdWU7IHBlcmZvcm0gYWxsIHVwZGF0ZXMKKwlpbnNpZGUgc3RydWN0IGNhc2UuCisJKGV4YW1pbmVfYXJndW1lbnQpOiBBZGQgY2xhc3NlcyBhcmd1bWVudDsgaGFuZGxlCisJWDg2XzY0X0NPTVBMRVhfWDg3X0NMQVNTLgorCShmZmlfcHJlcF9hcmdzKTogTWVyZ2UgaW50byAuLi4KKwkoZmZpX2NhbGwpOiAuLi4gaGVyZS4gIFNoYXJlIHN0YWNrIGZyYW1lIHdpdGggZmZpX2NhbGxfdW5peDY0LgorCShmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IFNldHVwIGNpZi0+ZmxhZ3MgZm9yIHByb3BlciBzdHJ1Y3R1cmUgcmV0dXJuLgorCShmZmlfZmlsbF9yZXR1cm5fdmFsdWUpOiBSZW1vdmUuCisJKGZmaV9wcmVwX2Nsb3N1cmUpOiBSZW1vdmUgZGVhZCBhc3NlcnQuCisJKGZmaV9jbG9zdXJlX3VuaXg2NF9pbm5lcik6IFJlbmFtZSBmcm9tIGZmaV9jbG9zdXJlX1VOSVg2NF9pbm5lci4KKwlSZXdyaXRlIHRvIHVzZSBzdHJ1Y3QgcmVnaXN0ZXJfYXJncyBpbnN0ZWFkIG9mIHZhX2xpc3QuICBDcmVhdGUKKwlmbGFncyBmb3IgaGFuZGxpbmcgc3RydWN0dXJlIHJldHVybnMuCisJKiBzcmMveDg2L3VuaXg2NC5TOiBSZW1vdmUgZGVhZCBzdHJpbmdzLgorCShmZmlfY2FsbF91bml4NjQpOiBSZW5hbWUgZnJvbSBmZmlfY2FsbF9VTklYNjQuICBSZXdyaXRlIHRvIHNoYXJlCisJc3RhY2sgZnJhbWUgd2l0aCBmZmlfY2FsbC4gIEhhbmRsZSBzdHJ1Y3R1cmUgcmV0dXJucyBwcm9wZXJseS4KKwkoZmxvYXQyc3NlLCBmbG9hdGZsb2F0MnNzZSwgZG91YmxlMnNzZSk6IFJlbW92ZS4KKwkoc3NlMmZsb2F0LCBzc2UyZG91YmxlLCBzc2UyZmxvYXRmbG9hdCk6IFJlbW92ZS4KKwkoZmZpX2Nsb3N1cmVfdW5peDY0KTogUmVuYW1lIGZyb20gZmZpX2Nsb3N1cmVfVU5JWDY0LiAgUmV3cml0ZQorCXRvIGhhbmRsZSBzdHJ1Y3R1cmUgcmV0dXJucyBwcm9wZXJseS4KKworMjAwNC0xMi0wOCAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgorCisJKiBNYWtlZmlsZS5hbSAoQU1fTUFLRUZMQUdTKTogUmVtb3ZlIGR1cGxpY2F0ZSBMSUJDRkxBR1MgYW5kCisJUElDRkxBRy4KKwkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlZC4KKworMjAwNC0xMi0wMiAgUmljaGFyZCBTYW5kaWZvcmQgIDxyc2FuZGlmb0ByZWRoYXQuY29tPgorCisJKiBjb25maWd1cmUuYWM6IFVzZSBUTF9BQ19HQ0NfVkVSU0lPTiB0byBzZXQgZ2NjX3ZlcnNpb24uCisJKiBjb25maWd1cmUsIGFjbG9jYWwubTQsIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCSogaW5jbHVkZS9NYWtlZmlsZS5pbiwgdGVzdHN1aXRlL01ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCisyMDA0LTExLTI5ICBLZWxsZXkgQ29vayAgPGtjb29rQGdjYy5nbnUub3JnPgorCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUgZm9yIGxpYnRvb2wgY2hhbmdlLgorCisyMDA0LTExLTI1ICBLZWxsZXkgQ29vayAgPGtjb29rQGdjYy5nbnUub3JnPgorCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUgZm9yIGxpYnRvb2wgcmV2ZXJzaW9uLgorCisyMDA0LTExLTI0ICBLZWxsZXkgQ29vayAgPGtjb29rQGdjYy5nbnUub3JnPgorCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUgZm9yIGxpYnRvb2wgY2hhbmdlLgorCisyMDA0LTExLTIzICBKb2huIERhdmlkIEFuZ2xpbiAgPGRhdmUuYW5nbGluQG5yYy1jbnJjLmdjLmNhPgorCisJKiB0ZXN0c3VpdGUvbGliL2xpYmZmaS1kZy5leHA6IFVzZSBuZXcgcHJvY3MgaW4gdGFyZ2V0LWxpYnBhdGguZXhwLgorCisyMDA0LTExLTIzICBSaWNoYXJkIFNhbmRpZm9yZCAgPHJzYW5kaWZvQHJlZGhhdC5jb20+CisKKwkqIHNyYy9taXBzL28zMi5TIChmZmlfY2FsbF9PMzIsIGZmaV9jbG9zdXJlX08zMik6IFVzZSBqYWxyIGluc3RlYWQKKwlvZiBqYWwuICBVc2UgYW4gYWJzb2x1dGUgZW5jb2RpbmcgZm9yIHRoZSBmcmFtZSBpbmZvcm1hdGlvbi4KKworMjAwNC0xMS0yMyAgS2VsbGV5IENvb2sgIDxrY29va0BnY2MuZ251Lm9yZz4KKworCSogTWFrZWZpbGUuYW06IFJlbW92ZSBuby1kZXBlbmRlbmNpZXMuICBBZGQgQUNMT0NBTF9BTUZMQUdTLgorCSogYWNpbmNsdWRlLm00OiBEZWxldGUgbG9naWMgZm9yIHNpbmNsdWRlcy4KKwkqIGFjbG9jYWwubTQsIE1ha2VmaWxlLmluLCBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisJKiBpbmNsdWRlL01ha2VmaWxlOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9NYWtlZmlsZTogTGlrZXdpc2UuCisKKzIwMDQtMTEtMjIgIEVyaWMgQm90Y2F6b3UgIDxlYm90Y2F6b3VAbGliZXJ0eXN1cmYuZnI+CisKKwkqIHNyYy9zcGFyYy9mZmkuYyAoZmZpX3ByZXBfY2xvc3VyZSk6IEFsaWduIGRvdWJsZXMgYW5kIDY0LWJpdCBpbnRlZ2VycworCW9uIGEgOC1ieXRlIGJvdW5kYXJ5LgorCSogc3JjL3NwYXJjL3Y4LlMgKGZmaV9jbG9zdXJlX3Y4KTogUmVzZXJ2ZSBmcmFtZSBzcGFjZSBmb3IgYXJndW1lbnRzLgorCisyMDA0LTEwLTI3ICBSaWNoYXJkIEVhcm5zaGF3ICA8cmVhcm5zaGFAYXJtLmNvbT4KKworCSogc3JjL2FybS9mZmkuYyAoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBIYW5kbGUgZnVuY3Rpb25zIHRoYXQgcmV0dXJuCisJbG9uZyBsb25nIHZhbHVlcy4gIFJvdW5kIHN0YWNrIGFsbG9jYXRpb24gdG8gYSBtdWx0aXBsZSBvZiA4IGJ5dGVzCisJZm9yIEFUUENTIGNvbXBhdGliaWxpdHkuCisJKiBzcmMvYXJtL3N5c3YuUyAoZmZpX2NhbGxfU1lTVik6IFJld29yayB0byBhdm9pZCB1c2Ugb2YgQVBDUyByZWdpc3RlcgorCW5hbWVzLiAgSGFuZGxlIHJldHVybmluZyBsb25nIGxvbmcgdHlwZXMuICBBZGQgVGh1bWIgYW5kIGludGVyd29ya2luZworCXN1cHBvcnQuICBJbXByb3ZlIHNvZnQtZmxvYXQgY29kZS4KKworMjAwNC0xMC0yNyAgUmljaGFyZCBFYXJuc2hhdyAgPHJlYXJuc2hhQGFybS5jb20+CisKKwkqIHRlc3RzdWl0ZS9saWIvbGliZmZpLWRiLmV4cCAobG9hZF9nY2NfbGliKTogTmV3IGZ1bmN0aW9uLgorCShsaWJmZmlfZXhpdCk6IE5ldyBmdW5jdGlvbi4KKwkobGliZmZpX2luaXQpOiBCdWlsZCB0aGUgdGVzdGdsdWUgd3JhcHBlciBpZiBuZWVkZWQuCisKKzIwMDQtMTAtMjUgIEVyaWMgQm90Y2F6b3UgIDxlYm90Y2F6b3VAbGliZXJ0eXN1cmYuZnI+CisKKwlQUiBvdGhlci8xODEzOAorCSogdGVzdHN1aXRlL2xpYi9saWJmZmktZGcuZXhwOiBBY2NlcHQgbW9yZSB0aGFuIG9uZSBtdWx0aWxpYiBsaWJnY2MuCisKKzIwMDQtMTAtMjUgIEthenVoaXJvIEluYW9rYSA8aW5hb2thLmthenVoaXJvQHJlbmVzYXMuY29tPgorCisJKiBzcmMvbTMyci9saWJmZml0YXJnZXQuaCAoRkZJX0NMT1NVUkVTKTogU2V0IHRvIDAuCisKKzIwMDQtMTAtMjAgIEtheiBLb2ppbWEgIDxra29qaW1hQGdjYy5nbnUub3JnPgorCisJKiBzcmMvc2gvc3lzdi5TIChmZmlfY2FsbF9TWVNWKTogRG9uJ3QgYWxpZ24gZm9yIGRvdWJsZSBkYXRhLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zsb2F0My5jOiBOZXcgdGVzdCBjYXNlLgorCisyMDA0LTEwLTE4ICBLYXogS29qaW1hICA8a2tvamltYUBnY2MuZ251Lm9yZz4KKworCSogc3JjL3NoL2ZmaS5jIChmZmlfcHJlcF9jbG9zdXJlKTogU2V0IFQgYml0IGluIHRyYW1wb2xpbmUgZm9yCisJdGhlIGZ1bmN0aW9uIHJldHVybmluZyBhIHN0cnVjdHVyZSBwb2ludGVkIHdpdGggUjIuCisJKiBzcmMvc2gvc3lzdi5TIChmZmlfY2xvc3VyZV9TWVNWKTogVXNlIFIyIGFzIHRoZSBwb2ludGVyIHRvCisJdGhlIHN0cnVjdHVyZSByZXR1cm4gdmFsdWUgaWYgVCBiaXQgc2V0LiAgRW1pdCBwb3NpdGlvbgorCWluZGVwZW5kZW50IGNvZGUgYW5kIEVIIGRhdGEgaWYgUElDLgorCisyMDA0LTEwLTEzICBLYXp1aGlybyBJbmFva2EgIDxpbmFva2Eua2F6dWhpcm9AcmVuZXNhcy5jb20+CisKKwkqIE1ha2VmaWxlLmFtOiBBZGQgbTMyciBzdXBwb3J0LgorCSogY29uZmlndXJlLmFjOiBMaWtld2lzZS4KKwkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCSogY29uZml1Z3JlOiBSZWdlbmVyYXRlLgorCSogc3JjL3R5cGVzLmM6IEFkZCBtMzJyIHBvcnQgdG8gRkZJX0lOVEVSTkFMX1RZUEVERUYKKwkodWludDY0LCBzaW50NjQsIGRvdWJsZSwgbG9uZ2RvdWJsZSkKKwkqIHNyYy9tMzJyOiBOZXcgZGlyZWN0b3J5LgorCSogc3JjL20zMnIvZmZpLmM6IE5ldyBmaWxlLgorCSogc3JjL20zMnIvc3lzdi5TOiBMaWtld2lzZS4KKwkqIHNyYy9tMzJyL2ZmaXRhcmdldC5oOiBMaWtld2lzZS4KKworMjAwNC0xMC0wMiAgS2F6IEtvamltYSAgPGtrb2ppbWFAZ2NjLmdudS5vcmc+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZWdpbnQuYzogTmV3IHRlc3QgY2FzZS4KKworMjAwNC0wOS0xNCAgSC5KLiBMdSAgPGhvbmdqaXUubHVAaW50ZWwuY29tPgorCisJUFIgbGliZ2NqLzE3NDY1CisJKiB0ZXN0c3VpdGUvbGliL2xpYmZmaS1kZy5leHA6IERvbid0IHVzZSBnbG9iYWwgbGRfbGlicmFyeV9wYXRoLgorCVNldCB1cCBMRF9MSUJSQVJZX1BBVEgsIFNITElCX1BBVEgsIExEX0xJQlJBUllOMzJfUEFUSCwKKwlMRF9MSUJSQVJZNjRfUEFUSCwgTERfTElCUkFSWV9QQVRIXzMyLCBMRF9MSUJSQVJZX1BBVEhfNjQgYW5kCisJRFlMRF9MSUJSQVJZX1BBVEguCisKKzIwMDQtMDktMDUgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL21hbnlfd2luMzIuYzogUmVtb3ZlIHdoaXRlc3BhY2VzLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3Byb21vdGlvbi5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fbGwuYzogUmVtb3ZlIHVudXNlZCB2YXIuIENsZWFudXAKKwl3aGl0ZXNwYWNlcy4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fc2MuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX3VjLmM6IExpa2V3aXNlLgorCisyMDA0LTA5LTA1ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwkqIHNyYy9wb3dlcnBjL2Rhcndpbi5TOiBGaXggY29tbWVudHMgYW5kIGlkZW50YXRpb24uCisJKiBzcmMvcG93ZXJwYy9kYXJ3aW5fY2xvc3VyZS5TOiBMaWtld2lzZS4KKworMjAwNC0wOS0wMiAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmM6IEFkZCBmbGFnIGZvciBsb25nZG91YmxlIHJldHVybiB2YWx1ZXMuCisJKGZmaV9wcmVwX2FyZ3MpOiBIYW5kbGUgbG9uZ2RvdWJsZSBhcmd1bWVudHMuCisJKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogU2V0IGZsYWdzIGZvciBsb25nZG91YmxlLiBDYWxjdWxhdGUgc3BhY2UgZm9yCisJbG9uZ2RvdWJsZS4KKwkoZmZpX2Nsb3N1cmVfaGVscGVyX0RBUldJTik6IEFkZCBjbG9zdXJlIGhhbmRsaW5nIGZvciBsb25nZG91YmxlLgorCSogc3JjL3Bvd2VycGMvZGFyd2luLlMgKF9mZmlfY2FsbF9EQVJXSU4pOiBBZGQgaGFuZGxpbmcgb2YgbG9uZ2RvdWJsZQorCXZhbHVlcy4KKwkqIHNyYy9wb3dlcnBjL2Rhcndpbl9jbG9zdXJlLlMgKF9mZmlfY2xvc3VyZV9BU00pOiBMaWtld2lzZS4KKwkqIHNyYy90eXBlcy5jOiBEZWZpbmVkIGxvbmdkb3VibGUgc2l6ZSBhbmQgYWxpZ25tZW50IGZvciBkYXJ3aW4uCisKKzIwMDQtMDktMDIgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKworCSogc3JjL3Bvd2VycGMvYWl4LlM6IFJlbW92ZSB3aGl0ZXNwYWNlcy4KKwkqIHNyYy9wb3dlcnBjL2FpeF9jbG9zdXJlLlM6IExpa2V3aXNlLgorCSogc3JjL3Bvd2VycGMvYXNtLmg6IExpa2V3aXNlLgorCSogc3JjL3Bvd2VycGMvZmZpLmM6IExpa2V3aXNlLgorCSogc3JjL3Bvd2VycGMvZmZpdGFyZ2V0Lmg6IExpa2V3aXNlLgorCSogc3JjL3Bvd2VycGMvbGludXg2NC5TOiBMaWtld2lzZS4KKwkqIHNyYy9wb3dlcnBjL2xpbnV4NjRfY2xvc3VyZS5TOiBMaWtld2lzZS4KKwkqIHNyYy9wb3dlcnBjL3BwY19jbG9zdXJlLlM6IExpa2V3aXNlLgorCSogc3JjL3Bvd2VycGMvc3lzdi5TOiBMaWtld2lzZS4KKworMjAwNC0wOC0zMCAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJlZGhhdC5jb20+CisKKwkqIE1ha2VmaWxlLmFtOiBBZGQgZnJ2IHN1cHBvcnQuCisJKiBNYWtlZmlsZS5pbiwgdGVzdHN1aXRlL01ha2VmaWxlLmluOiBSZWJ1aWx0LgorCSogY29uZmlndXJlLmFjOiBSZWFkIGNvbmZpZ3VyZS5ob3N0LgorCSogY29uZmlndXJlLmluOiBSZWFkIGNvbmZpZ3VyZS5ob3N0LgorCSogY29uZmlndXJlLmhvc3Q6IE5ldyBmaWxlLiAgZnJ2LWVsZiBuZWVkcyBsaWJnbG9zcy4KKwkqIGluY2x1ZGUvZmZpLmguaW46IEZvcmNlIGZmaV9jbG9zdXJlIHRvIGhhdmUgYSBuaWNlIGJpZyAoOCkKKwlhbGlnbm1lbnQuICBUaGlzIGlzIG5lZWRlZCB0byBmcnYgYW5kIHNob3VsZG4ndCBoYXJtIHRoZSBvdGhlcnMuCisJKiBpbmNsdWRlL2ZmaV9jb21tb24uaCAoQUxJR05fRE9XTik6IE5ldyBtYWNyby4KKwkqIHNyYy9mcnYvZmZpLmMsIHNyYy9mcnYvZmZpdGFyZ2V0LmgsIHNyYy9mcnYvZWFiaS5TOiBOZXcgZmlsZXMuCisKKzIwMDQtMDgtMjQgIERhdmlkIERhbmV5ICA8ZGFuZXlAYXZ0cmV4LmNvbT4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4wLmM6IFhmYWlsIG1pcHM2NCogaW5zdGVhZCBvZiBtaXBzKi4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMi5jICBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMy5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMThieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xOWJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzFfMWJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzIwYnl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjBieXRlMS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjRieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yYnl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM18xYnl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM2J5dGUxLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zYnl0ZTIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzRfMWJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzRieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc182NGJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzZieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc183Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOGJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzlieXRlMS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOWJ5dGUyLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9kb3VibGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2Zsb2F0LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9wb2ludGVyLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50MTYuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQzMi5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDY0LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50MTYuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3VpbnQzMi5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDY0LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kb3VibGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2Zsb2F0LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV9zY2hhci5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfc3Nob3J0LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV9zc2hvcnRjaGFyLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV91Y2hhci5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfdXNob3J0LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV91c2hvcnRjaGFyLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zY2hhci5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc2ludC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc3Nob3J0LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191Y2hhci5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWludC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWxvbmdsb25nLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191c2hvcnQuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0MS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Mi5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0My5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9wcm9ibGVtMS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC91bndpbmR0ZXN0LmNjOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTJieXRlLmM6IExpa2V3aXNlIGFuZCBzZXQgcmV0dXJuIHZhbHVlCisJdG8gemVyby4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTZieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc181Ynl0ZS5jOiBMaWtld2lzZS4KKworMjAwNC0wOC0yMyAgRGF2aWQgRGFuZXkgPGRhbmV5QGF2dHJleC5jb20+CisKKwlQUiBsaWJnY2ovMTMxNDEKKwkqIHNyYy9taXBzL2ZmaXRhcmdldC5oIChGRklfTzMyX1NPRlRfRkxPQVQpOiBOZXcgQUJJLgorCSogc3JjL21pcHMvZmZpLmMgKGZmaV9wcmVwX2FyZ3MpOiBGaXggYWxpZ25tZW50IGNhbGN1bGF0aW9uLgorCShmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IEhhbmRsZSBGRklfTzMyX1NPRlRfRkxPQVQgZmxvYXRpbmcgcG9pbnQKKwlwYXJhbWV0ZXJzIGFuZCByZXR1cm4gdHlwZXMuCisJKGZmaV9jYWxsKTogSGFuZGxlIEZGSV9PMzJfU09GVF9GTE9BVCBBQkkuCisJKGZmaV9wcmVwX2Nsb3N1cmUpOiBEaXR0by4KKwkoZmZpX2Nsb3N1cmVfbWlwc19pbm5lcl9PMzIpOiBIYW5kbGUgRkZJX08zMl9TT0ZUX0ZMT0FUIEFCSSwgZml4CisJYWxpZ25tZW50IGNhbGN1bGF0aW9ucy4KKwkqIHNyYy9taXBzL28zMi5TIChmZmlfY2xvc3VyZV9PMzIpOiBEb24ndCB1c2UgZmxvYXRpbmcgcG9pbnQKKwlpbnN0cnVjdGlvbnMgaWYgRkZJX08zMl9TT0ZUX0ZMT0FULCBtYWtlIHN0YWNrIGZyYW1lIEFCSSBjb21wbGlhbnQuCisKKzIwMDQtMDgtMTQgIENhc2V5IE1hcnNoYWxsIDxjc21AZ251Lm9yZz4KKworCSogc3JjL21pcHMvZmZpLmMgKGZmaV9wcmVmX2NpZl9tYWNoZGVwKTogc2V0IGBjaWYtPmZsYWdzJyB0bworCWNvbnRhaW4gYEZGSV9UWVBFX1VJTlQ2NCcgYXMgcmV0dXJuIHR5cGUgZm9yIGFueSA2NC1iaXQKKwlpbnRlZ2VyIChPMzIgQUJJIG9ubHkpLgorCShmZmlfcHJlcF9jbG9zdXJlKTogbmV3IGZ1bmN0aW9uLgorCShmZmlfY2xvc3VyZV9taXBzX2lubmVyX08zMik6IG5ldyBmdW5jdGlvbi4KKwkqIHNyYy9taXBzL2ZmaXRhcmdldC5oOiBEZWZpbmUgYEZGSV9DTE9TVVJFUycgYW5kCisJYEZGSV9UUkFNUE9MSU5FX1NJWkUnIGFwcHJvcHJpYXRlbHkgaWYgdGhlIEFCSSBpcyBvMzIuCisJKiBzcmMvbWlwcy9vMzIuUyAoZmZpX2NhbGxfTzMyKTogYWRkIGxhYmVscyBmb3IgLmVoX2ZyYW1lLiBSZXR1cm4KKwk2NCBiaXQgaW50ZWdlcnMgY29ycmVjdGx5LgorCShmZmlfY2xvc3VyZV9PMzIpOiBuZXcgZnVuY3Rpb24uCisJQWRkZWQgRFdBUkYtMiB1bndpbmQgaW5mbyBmb3IgYm90aCBmdW5jdGlvbnMuCisKKzIwMDQtMDgtMTAgIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorCisJKiBzcmMveDg2L2ZmaTY0LmMgKGZmaV9wcmVwX2FyZ3MgKTogOC1hbGlnbiBhbGwgc3RhY2sgYXJndW1lbnRzLgorCisyMDA0LTA4LTAxICBSb2JlcnQgTWlsbGFuICA8cm9iZXJ0bWhAZ251Lm9yZz4KKworCSogY29uZmlndXJlLmFjOiBEZXRlY3Qga25ldGJzZC1nbnUgYW5kIGtmcmVlYnNkLWdudS4KKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKworMjAwNC0wNy0zMCAgTWFjaWVqIFcuIFJvenlja2kgIDxtYWNyb0BsaW51eC1taXBzLm9yZz4KKworCSogYWNpbmNsdWRlLm00IChBQ19GVU5DX01NQVBfQkxBQ0tMSVNUKTogQ2hlY2sgZm9yIDxzeXMvbW1hbi5oPgorCWFuZCBtbWFwKCkgZXhwbGljaXRseSBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gcHJlc2V0IGF1dG9jb25mIGNhY2hlCisJdmFyaWFibGVzLgorCSogYWNsb2NhbC5tNDogUmVnZW5lcmF0ZS4KKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKworMjAwNC0wNy0xMSAgVWxyaWNoIFdlaWdhbmQgIDx1d2VpZ2FuZEBkZS5pYm0uY29tPgorCisJKiBzcmMvczM5MC9mZmkuYyAoZmZpX3ByZXBfYXJncyk6IEZpeCBDIGFsaWFzaW5nIHZpb2xhdGlvbi4KKwkoZmZpX2NoZWNrX2Zsb2F0X3N0cnVjdCk6IFJlbW92ZSB1bnVzZWQgcHJvdG90eXBlLgorCisyMDA0LTA2LTMwICBHZW9mZnJleSBLZWF0aW5nICA8Z2VvZmZrQGFwcGxlLmNvbT4KKworCSogc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jIChmbHVzaF9pY2FjaGUpOiAnOycgaXMgYSBjb21tZW50CisJY2hhcmFjdGVyIG9uIERhcndpbiwgdXNlICdcblx0JyBpbnN0ZWFkLgorCisyMDA0LTA2LTI2ICBNYXR0aGlhcyBLbG9zZSAgPGRva29AZGViaWFuLm9yZz4KKworCSogbGlidG9vbC12ZXJzaW9uOiBGaXggdHlwbyBpbiByZXZpc2lvbi9hZ2UuCisKKzIwMDQtMDYtMTcgIE1hdHRoaWFzIEtsb3NlICA8ZG9rb0BkZWJpYW4ub3JnPgorCisJKiBsaWJ0b29sLXZlcnNpb246IE5ldy4KKwkqIE1ha2VmaWxlLmFtIChsaWJmZmlfbGFfTERGTEFHUyk6IFVzZSAtdmVyc2lvbi1pbmZvIGZvciBzb25hbWUuCisJKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKworMjAwNC0wNi0xNSAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KKworCSogTWFrZWZpbGUuYW06IFJlbW92ZSB1c2VsZXNzIG11bHRpbGliIHJ1bGVzLgorCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisJKiBhY2xvY2FsLm00OiBSZWdlbmVyYXRlIHdpdGggYXV0b21ha2UgMS44LjUuCisJKiBjb25maWd1cmUuYWM6IFJlbW92ZSB1c2VsZXNzIG11bHRpbGliIGNvbmZpZ3VyeS4KKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKworMjAwNC0wNi0xNSAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KKworCSogLmN2c2lnbm9yZTogTmV3IGZpbGUuCisKKzIwMDQtMDYtMTAgIEpha3ViIEplbGluZWsgIDxqYWt1YkByZWRoYXQuY29tPgorCisJKiBzcmMvaWE2NC91bml4LlMgKGZmaV9jYWxsX3VuaXgpOiBJbnNlcnQgZ3JvdXAgYmFycmllciBicmVhaworCWZwX2RvbmUuCisJKGZmaV9jbG9zdXJlX1VOSVgpOiBGaXggZjE0L2YxNSBhZGp1c3RtZW50IGlmIEZMT0FUX1NaIGlzIGV2ZXIKKwljaGFuZ2VkIGZyb20gOC4KKworMjAwNC0wNi0wNiAgU2VhbiBNY05laWwgIDxzZWFuQG1jbmVpbC5jb20+CisKKwkqIGNvbmZpZ3VyZS5hYzogQWRkIHg4Nl82NC0qLWZyZWVic2QqIHN1cHBvcnQuCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisKKzIwMDQtMDQtMjYgIEpvZSBCdWNrIDxqYnVja0B3ZWxzaC1idWNrLm9yZz4KKworCUJ1ZyAxNTA5MworCSogY29uZmlndXJlLmFjOiBUZXN0IGZvciBleGlzdGVuY2Ugb2YgbW1hcCBhbmQgc3lzL21tYW4uaCBiZWZvcmUKKwljaGVja2luZyBibGFja2xpc3QuICBGaXggc3VnZ2VzdGVkIGJ5IEppbSBXaWxzb24uCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisKKzIwMDQtMDQtMjYgIE1hdHQgQXVzdGVybiAgPGF1c3Rlcm5AYXBwbGUuY29tPgorCisJKiBzcmMvcG93ZXJwYy9kYXJ3aW4uUzogR28gdGhyb3VnaCBhIG5vbi1sYXp5IHBvaW50ZXIgZm9yIGluaXRpYWwKKwlGREUgbG9jYXRpb24uCisJKiBzcmMvcG93ZXJwYy9kYXJ3aW5fY2xvc3VyZS5TOiBMaWtld2lzZS4KKworMjAwNC0wNC0yNCAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3NjaGFyLmMgKG1haW4pOiBGaXggaW5pdGlhbGl6YXRpb24KKwllcnJvci4gUmVwb3J0ZWQgYnkgVGhvbWFzIEhlbGxlciA8dGhlbGxlckBweXRob24ubmV0Pi4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfc3Nob3J0LmMgKG1haW4pOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfdXNob3J0LmMgKG1haW4pOiBMaWtld2lzZS4KKworMjAwNC0wMy0yMCAgTWF0dGhpYXMgS2xvc2UgIDxkb2tvQGRlYmlhbi5vcmc+CisKKwkqIHNyYy9wYS9saW51eC5TOiBGaXggdHlwby4KKworMjAwNC0wMy0xOSAgTWF0dGhpYXMgS2xvc2UgIDxkb2tvQGRlYmlhbi5vcmc+CisKKwkqIE1ha2VmaWxlLmFtOiBVcGRhdGUuCisJKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKwkqIHNyYy9wYS9mZmkuaC5pbjogUmVtb3ZlLgorCSogc3JjL3BhL2ZmaXRhcmdldC5oOiBOZXcgZmlsZS4KKworMjAwNC0wMi0xMCAgUmFuZG9scGggQ2h1bmcgIDx0YXVzcUBkZWJpYW4ub3JnPgorCisJKiBNYWtlZmlsZS5hbTogQWRkIFBBIHN1cHBvcnQuCisJKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKwkqIGluY2x1ZGUvTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisJKiBjb25maWd1cmUuYWM6IEFkZCBQQSB0YXJnZXQuCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisJKiBzcmMvcGEvZmZpLmM6IE5ldyBmaWxlLgorCSogc3JjL3BhL2ZmaS5oLmluOiBBZGQgUEEgc3VwcG9ydC4KKwkqIHNyYy9wYS9saW51eC5TOiBOZXcgZmlsZS4KKwkqIHByZXBfY2lmLmM6IEFkZCBQQSBzdXBwb3J0LgorCisyMDA0LTAzLTE2ICBIb3Nha2EgWXVqaSAgPGhvc0B0YW1hbmVnaS5vcmc+CisKKwkqIHNyYy90eXBlcy5jOiBGaXggYWxpZ25tZW50IHNpemUgb2YgWDg2X1dJTjMyIGNhc2UgaW50NjQgYW5kCisJZG91YmxlLgorCSogc3JjL3g4Ni9mZmkuYyAoZmZpX3ByZXBfYXJncyk6IFJlcGxhY2UgZWNpZi0+Y2lmLT5ydHlwZS0+dHlwZQorCXdpdGggZWNpZi0+Y2lmLT5mbGFncy4KKwkoZmZpX2NhbGwsIGZmaV9wcmVwX2luY29taW5nX2FyZ3NfU1lTVik6IFJlcGxhY2UgY2lmLT5ydHlwZS0+dHlwZQorCXdpdGggY2lmLT5mbGFncy4KKwkoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBBZGQgWDg2X1dJTjMyIHN0cnVjdCBjYXNlLgorCShmZmlfY2xvc3VyZV9TWVNWKTogQWRkIDEgb3IgMi1ieXRlcyBzdHJ1Y3QgY2FzZSBmb3IgWDg2X1dJTjMyLgorCSogc3JjL3g4Ni93aW4zMi5TIChyZXRzdHJ1Y3QxYiwgcmV0c3RydWN0MmIsIHNjX3JldHN0cnVjdDFiLAorCXNjX3JldHN0cnVjdDJiKTogQWRkIGZvciAxIG9yIDItYnl0ZXMgc3RydWN0IGNhc2UuCisKKzIwMDQtMDMtMTUgS2VsbGV5IENvb2sgPGtjb29rQGdjYy5nbnUub3JnPgorCisJKiBjb25maWd1cmUuaW46IFJlbmFtZSBmaWxlIHRvIC4uLgorCSogY29uZmlndXJlLmFjOiAuLi4gdGhpcy4KKwkqIGZmaWNvbmZpZy5oLmluOiBSZWdlbmVyYXRlLgorCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisJKiBpbmNsdWRlL01ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCSogdGVzdHN1aXRlL01ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCisyMDA0LTAzLTEyICBNYXR0IEF1c3Rlcm4gIDxhdXN0ZXJuQGFwcGxlLmNvbT4KKworCSogc3JjL3Bvd2VycGMvZGFyd2luLlM6IEZpeCBFSCBpbmZvcm1hdGlvbiBzbyBpdCBjb3JyZXNwb25kcyB0bworCWNoYW5nZXMgaW4gRUggZm9ybWF0IHJlc3VsdGluZyBmcm9tIGFkZGl0aW9uIG9mIGxpbmtvbmNlIHN1cHBvcnQuCisJKiBzcmMvcG93ZXJwYy9kYXJ3aW5fY2xvc3VyZS5TOiBMaWtld2lzZS4KKworMjAwNC0wMy0xMSAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCSAgICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgorCisJKiBNYWtlZmlsZS5hbSAoQVVUT01BS0VfT1BUSU9OUyk6IFNldCB0aGVtLgorCVJlbW92ZSBWUEFUSC4gUmVtb3ZlIHJ1bGVzIGZvciBvYmplY3QgZmlsZXMuIFJlbW92ZSBtdWx0aWxpYiBzdXBwb3J0LgorCShBTV9DQ0FTRkxBR1MpOiBBZGQuCisJKiBjb25maWd1cmUuaW4gKEFDX0NPTkZJR19IRUFERVJTKTogUmVsYWNlIEFNX0NPTkZJR19IRUFERVIuCisJKEFDX1BSRVJFUSk6IEJ1bXAgdmVyc2lvbiB0byAyLjU5LgorCShBQ19JTklUKTogRmlsbCB3aXRoIHZlcnNpb24gaW5mbyBhbmQgYnVnIGFkZHJlc3MuCisJKE9SSUdJTkFMX0xEX0ZPUl9NVUxUSUxJQlMpOiBSZW1vdmUuCisJKEFNX0VOQUJMRV9NVUxUSUxJQik6IFVzZSB0aGlzIGluc3RlYWQgb2YgQUNfQVJHX0VOQUJMRS4KKwlEZS1wcmVjaW91cyBDQyBzbyB0aGF0IHRoZSByaWdodCBmbGFncyBhcmUgcGFzc2VkIGRvd24gdG8gbXVsdGlsaWJzLgorCShBQ19NU0dfRVJST1IpOiBSZXBsYWNlIG9ic29sZXRlIG1hY3JvIEFDX0VSUk9SLgorCShBQ19DT05GSUdfRklMRVMpOiBSZXBsYWNlIG9ic29sZXRlIG1hY3JvIEFDX0xJTktfRklMRVMuCisJKEFDX09VVFBVVCk6IFJlb3JnYW5pemUgdGhlIG91dHB1dCB3aXRoIEFDX0NPTkZJR19DT01NQU5EUy4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKwkqIGFjbG9jYWwubTQ6IExpa2V3aXNlLgorCSogTWFrZWZpbGUuaW4sIGluY2x1ZGUvTWFrZWZpbGUuaW4sIHRlc3RzdWl0ZS9NYWtlZmlsZS5pbjogTGlrZXdpc2UuCisJKiBmZmljb25maWcuaC5pbjogTGlrZXdpc2UuCisKKzIwMDQtMDMtMTEgIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQHN1c2UuZGU+CisKKwkqIHNyYy9pYTY0L2ZmaS5jIChmZmlfcHJlcF9pbmNvbWluZ19hcmdzX1VOSVgpOiBHZXQgZmxvYXRpbmcgcG9pbnQKKwlhcmd1bWVudHMgZnJvbSBmcCByZWdpc3RlcnMgb25seSBmb3IgdGhlIGZpcnN0IDggcGFyYW1ldGVyIHNsb3RzLgorCURvbid0IGNvbnZlcnQgYSBmbG9hdCBwYXJhbWV0ZXIgd2hlbiBwYXNzZWQgaW4gbWVtb3J5LgorCisyMDA0LTAzLTA5ICBIYW5zLVBldGVyIE5pbHNzb24gIDxocEBheGlzLmNvbT4KKworCSogY29uZmlndXJlOiBSZWdlbmVyYXRlIGZvciBjb25maWcvYWNjcm9zcy5tNCBjb3JyZWN0aW9uLgorCisyMDA0LTAyLTI1ICBNYXR0IEtyYWFpICA8a3JhYWlAYWx1bW5pLmNtdS5lZHU+CisKKwkqIHNyYy9wb3dlcnBjL2ZmaS5jIChmZmlfcHJlcF9hcmdzX1NZU1YpOiBDaGFuZ2UKKwllY2lmLT5jaWYtPmJ5dGVzIHRvIGJ5dGVzLgorCShmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IEFkZCBicmFjZXMgYXJvdW5kIG5lc3RlZCBpZiBzdGF0ZW1lbnQuCisKKzIwMDQtMDItMDkgIEFsYW4gTW9kcmEgIDxhbW9kcmFAYmlncG9uZC5uZXQuYXU+CisKKwkqIHNyYy90eXBlcy5jIChwb2ludGVyKTogUE9XRVJQQzY0IGhhcyA4IGJ5dGUgcG9pbnRlcnMuCisKKwkqIHNyYy9wb3dlcnBjL2ZmaS5jIChmZmlfcHJlcF9hcmdzNjQpOiBDb3JyZWN0IGxvbmcgZG91YmxlIGhhbmRsaW5nLgorCShmZmlfY2xvc3VyZV9oZWxwZXJfTElOVVg2NCk6IEZpeCB0eXBvLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlLmM6IFBhc3MgLW1sb25nLWRvdWJsZS0xMjgKKwlmb3IgcG93ZXJwYzY0LSotKi4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mbG9hdC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mbG9hdDIuYzogTGlrZXdpc2UuCisKKzIwMDQtMDItMDggIEFsYW4gTW9kcmEgIDxhbW9kcmFAYmlncG9uZC5uZXQuYXU+CisKKwkqIHNyYy9wb3dlcnBjL2ZmaS5jIChmZmlfcHJlcF9jaWZfbWFjaGRlcCA8RkZJX0xJTlVYNjQ+KTogQ29ycmVjdAorCWxvbmcgZG91YmxlIGZ1bmN0aW9uIHJldHVybiBhbmQgbG9uZyBkb3VibGUgYXJnIGhhbmRsaW5nLgorCShmZmlfY2xvc3VyZV9oZWxwZXJfTElOVVg2NCk6IEZvcm1hdHRpbmcuICBEZWxldGUgdW51c2VkICJuZyIgdmFyLgorCVVzZSAiZW5kX3BmciIgaW5zdGVhZCBvZiAibmYiLiAgQ29ycmVjdCBsb25nIGRvdWJsZSBoYW5kbGluZy4KKwlMb2NhbGlzZSAidGVtcCIuCisJKiBzcmMvcG93ZXJwYy9saW51eDY0LlMgKGZmaV9jYWxsX0xJTlVYNjQpOiBTYXZlIGYyIGxvbmcgZG91YmxlCisJcmV0dXJuIHZhbHVlLgorCSogc3JjL3Bvd2VycGMvbGludXg2NF9jbG9zdXJlLlMgKGZmaV9jbG9zdXJlX0xJTlVYNjQpOiBBbGxvY2F0ZQorCXNwYWNlIGZvciBsb25nIGRvdWJsZSByZXR1cm4gdmFsdWUuICBBZGp1c3Qgc3RhY2sgZnJhbWUgYW5kIG9mZnNldHMuCisJTG9hZCBmMiBsb25nIGRvdWJsZSByZXR1cm4uCisKKzIwMDQtMDItMDcgIEFsYW4gTW9kcmEgIDxhbW9kcmFAYmlncG9uZC5uZXQuYXU+CisKKwkqIHNyYy90eXBlcy5jOiBVc2UgMTYgYnl0ZSBsb25nIGRvdWJsZSBmb3IgUE9XRVJQQzY0LgorCisyMDA0LTAxLTI1ICBFcmljIEJvdGNhem91ICA8ZWJvdGNhem91QGxpYmVydHlzdXJmLmZyPgorCisJKiBzcmMvc3BhcmMvZmZpLmMgKGZmaV9wcmVwX2FyZ3NfdjkpOiBTaGlmdCB0aGUgcGFyYW1ldGVyIGFycmF5CisJd2hlbiB0aGUgc3RydWN0dXJlIHJldHVybiBhZGRyZXNzIGlzIHBhc3NlZCBpbiAlbzAuCisJKGZmaV9WOV9yZXR1cm5fc3RydWN0KTogUmVuYW1lIGludG8gZmZpX3Y5X2xheW91dF9zdHJ1Y3QuCisJKGZmaV92OV9sYXlvdXRfc3RydWN0KTogQWxpZ24gdGhlIGZpZWxkIGZvbGxvd2luZyBhIG5lc3RlZCBzdHJ1Y3R1cmUKKwlvbiBhIHdvcmQgYm91bmRhcnkuICBVc2UgbWVtbW92ZSBpbnN0ZWFkIG9mIG1lbWNweS4KKwkoZmZpX2NhbGwpOiBVcGRhdGUgY2FsbCB0byBmZmlfVjlfcmV0dXJuX3N0cnVjdC4KKwkoZmZpX3ByZXBfY2xvc3VyZSk6IERlZmluZSAnY3R4JyBvbmx5IGZvciBWOC4KKwkoZmZpX2Nsb3N1cmVfc3BhcmNfaW5uZXIpOiBDbG9uZSBpbnRvIGZmaV9jbG9zdXJlX3NwYXJjX2lubmVyX3Y4CisJYW5kIGZmaV9jbG9zdXJlX3NwYXJjX2lubmVyX3Y5LgorCShmZmlfY2xvc3VyZV9zcGFyY19pbm5lcl92OCk6IFJldHVybiBsb25nIGRvdWJsZXMgYnkgcmVmZXJlbmNlLgorCUFsd2F5cyBza2lwIHRoZSBzdHJ1Y3R1cmUgcmV0dXJuIGFkZHJlc3MuICBGb3Igc3RydWN0dXJlcyBhbmQgbG9uZworCWRvdWJsZXMsIGNvcHkgdGhlIGFyZ3VtZW50IGRpcmVjdGx5LgorCShmZmlfY2xvc3VyZV9zcGFyY19pbm5lcl92OSk6IFNraXAgdGhlIHN0cnVjdHVyZSByZXR1cm4gYWRkcmVzcyBvbmx5CisJaWYgcmVxdWlyZWQuICBTaGlmdCB0aGUgbWF4aW11bSBmbG9hdGluZy1wb2ludCBzbG90IGFjY29yZGluZ2x5LiAgRm9yCisJYmlnIHN0cnVjdHVyZXMsIGNvcHkgdGhlIGFyZ3VtZW50IGRpcmVjdGx5OyBvdGhlcndpc2UsIGxlZnQtanVzdGlmeSB0aGUKKwlhcmd1bWVudCBhbmQgY2FsbCBmZmlfdjlfbGF5b3V0X3N0cnVjdCB0byBsYXkgb3V0IHRoZSBzdHJ1Y3R1cmUgb24KKwl0aGUgc3RhY2suCisJKiBzcmMvc3BhcmMvdjguUzogVW5kZWYgU1RBQ0tGUkFNRSBiZWZvcmUgZGVmaW5pbmcgaXQuCisJKGZmaV9jbG9zdXJlX3Y4KTogUGFzcyB0aGUgc3RydWN0dXJlIHJldHVybiBhZGRyZXNzLiAgVXBkYXRlIGNhbGwgdG8KKwlmZmlfY2xvc3VyZV9zcGFyY19pbm5lcl92OC4gIFNob3J0LWNpcmN1aXQgRkZJX1RZUEVfSU5UIGhhbmRsaW5nLgorCVNraXAgdGhlICd1bmltcCcgaW5zbiB3aGVuIHJldHVybmluZyBsb25nIGRvdWJsZXMgYW5kIHN0cnVjdHVyZXMuCisJKiBzcmMvc3BhcmMvdjkuUzogVW5kZWYgU1RBQ0tGUkFNRSBiZWZvcmUgZGVmaW5pbmcgaXQuCisJKGZmaV9jbG9zdXJlX3Y5KTogSW5jcmVhc2UgdGhlIGZyYW1lIHNpemUgYnkgMiB3b3Jkcy4gIFNob3J0LWNpcmN1aXQKKwlGRklfVFlQRV9JTlQgaGFuZGxpbmcuICBMb2FkIHN0cnVjdHVyZXMgYm90aCBpbiBpbnRlZ2VycyBhbmQKKwlmbG9hdGluZy1wb2ludCByZWdpc3RlcnMgb24gcmV0dXJuLgorCSogUkVBRE1FOiBVcGRhdGUgc3RhdHVzIG9mIHRoZSBTUEFSQyBwb3J0LgorCisyMDA0LTAxLTI0ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9weW9iamMtdGMuYyAobWFpbik6IFRyZWF0IHJlc3VsdCB2YWx1ZQorCWFzIG9mIHR5cGUgZmZpX2FyZy4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3QzLmMgKG1haW4pOiBGaXggQ0hFQ0suCisKKzIwMDQtMDEtMjIgIFVscmljaCBXZWlnYW5kICA8dXdlaWdhbmRAZGUuaWJtLmNvbT4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191aW50LmMgKGNsc19yZXRfdWludF9mbik6IFRyZWF0IHJlc3VsdAorCXZhbHVlIGFzIG9mIHR5cGUgZmZpX2FyZywgbm90IHVuc2lnbmVkIGludC4KKworMjAwNC0wMS0yMSAgTWljaGFlbCBSaXR6ZXJ0ICA8cml0emVydEB0LW9ubGluZS5kZT4KKworCSogZmZpNjQuYyAoZmZpX3ByZXBfYXJncyk6IENhc3QgdGhlIFJIUyBvZiBhbiBhc3NpZ25tZW50IGluc3RlYWQKKwlvZiB0aGUgTEhTLgorCisyMDA0LTAxLTEyICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwkqIHRlc3RzdWl0ZS9saWIvbGliZmZpLWRnLmV4cDogU2V0IExEX0xJQlJBUllfUEFUSF8zMiBmb3IKKwlTb2xhcmlzLgorCisyMDA0LTAxLTA4ICBSYWluZXIgT3J0aCAgPHJvQFRlY2hGYWsuVW5pLUJpZWxlZmVsZC5ERT4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2ZmaXRlc3QuaCAoYWxsb2NhdGVfbW1hcCk6IENhc3QgTUFQX0ZBSUxFRAorCXRvIHZvaWQgKi4KKworMjAwMy0xMi0xMCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAcmVkaGF0LmNvbT4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9wb2ludGVyLmM6IENhc3QgcG9pbnRlcnMgdG8KKwlzaXplX3QgaW5zdGVhZCBvZiBpbnQuCisKKzIwMDMtMTItMDQgIEhvc2FrYSBZdWppICA8aG9zQHRhbWFuZWdpLm9yZz4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL21hbnlfd2luMzIuYzogSW5jbHVkZSA8ZmxvYXQuaD4uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbWFueV93aW4zMi5jIChtYWluKTogUmVwbGFjZSB2YXJpYWJsZQorCWludCBpIHdpdGggdW5zaWduZWQgbG9uZyB1bC4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50NjQuYzogTmV3IHRlc3QgY2FzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDY0LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50MzIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQzMi5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDE2LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50MTYuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2Zsb2F0LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9kb3VibGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3BvaW50ZXIuYzogTGlrZXdpc2UuCisKKzIwMDMtMTItMDIgIEhvc2FrYSBZdWppICA8aG9zQHRhbWFuZWdpLm9yZz4KKworCVBSIG90aGVyLzEzMjIxCisJKiBzcmMveDg2L2ZmaS5jIChmZmlfcHJlcF9hcmdzLCBmZmlfcHJlcF9pbmNvbWluZ19hcmdzX1NZU1YpOgorCUFsaWduIGFyZ3VtZW50cyB0byAzMiBiaXRzLgorCisyMDAzLTEyLTAxICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwlQUiBvdGhlci8xMzIyMQorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV9zc2hvcnQuYzogTmV3IHRlc3QgY2FzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfc3Nob3J0Y2hhci5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfdWNoYXIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3NjaGFyLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV91c2hvcnRjaGFyLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV91c2hvcnQuYzogTGlrZXdpc2UuCisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC91bndpbmR0ZXN0LmNjOiBDb3NtZXRpY3MuCisKKzIwMDMtMTEtMjYgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2ZmaXRlc3QuaDogSW5jbHVkZSA8ZmNudGwuaD4uCisJKiB0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvZmZpdGVzdGN4eC5oOiBMaWtld2lzZS4KKworMjAwMy0xMS0yMiAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KKwkqIGNvbmZpZ3VyZTogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvdW53aW5kdGVzdC5jYzogQ29udmVydCB0aGUgbW1hcCB0bworCXRoZSByaWdodCB0eXBlLgorCisyMDAzLTExLTIxICBBbmRyZWFzIEphZWdlciAgPGFqQHN1c2UuZGU+CisJICAgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKworCSogYWNpbmNsdWRlLm00OiBBZGQgQUNfRlVOQ19NTUFQX0JMQUNLTElTVC4KKwkqIGNvbmZpZ3VyZS5pbjogQ2FsbCBBQ19GVU5DX01NQVBfQkxBQ0tMSVNULgorCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCisJKiBhY2xvY2FsLm00OiBMaWtld2lzZS4KKwkqIGNvbmZpZ3VyZTogTGlrZXdpc2UuCisJKiBmZmljb25maWcuaC5pbjogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliL2xpYmZmaS1kZy5leHA6IEFkZCBpbmNsdWRlIGRpci4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mZml0ZXN0Lmg6IEFkZCBNTUFQIGRlZmluaXRpb25zLgorCSogdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL2ZmaXRlc3RjeHguaDogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjAuYzogVXNlIE1NQVAgZnVuY3Rpb25hbGl0eQorCWZvciBmZmlfY2xvc3VyZSBpZiBhdmFpbGFibGUuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjEuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjMuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjQuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzEyYnl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTZieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xOGJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE5Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMV8xYnl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjBieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yMGJ5dGUxLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yNGJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzJieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zXzFieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zYnl0ZTEuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzNieXRlMi5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNF8xYnl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNGJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzVieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc182NGJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzZieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc183Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOGJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzlieXRlMS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOWJ5dGUyLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kb3VibGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2Zsb2F0LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zY2hhci5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc2ludC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc3Nob3J0LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191Y2hhci5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWludC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWxvbmdsb25nLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191c2hvcnQuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0MS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Mi5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0My5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9wcm9ibGVtMS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC91bndpbmR0ZXN0LmNjOiBMaWtld2lzZS4KKworMjAwMy0xMS0yMCAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiB0ZXN0c3VpdGUvbGliL2xpYmZmaS1kZy5leHA6IE1ha2UgdGhlIC1sZ2NjX3MgY29uZGl0aW9uYWwuCisKKzIwMDMtMTEtMTkgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKworCSogdGVzdHN1aXRlL2xpYi9saWJmZmktZGcuZXhwOiBBZGQgRFlMRF9MSUJSQVJZX1BBVEggZm9yIGRhcndpbi4KKwlBZGQgLWxnY2NfcyB0byBhZGRpdGlvbmFsIGZsYWdzLgorCisyMDAzLTExLTEyICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwkqIGNvbmZpZ3VyZS5pbiwgaW5jbHVkZS9NYWtlZmlsZS5hbTogUFIgbGliZ2NqLzExMTQ3LCBpbnN0YWxsCisJdGhlIGZmaXRhcmdldC5oIGhlYWRlciBmaWxlIGluIGEgZ2NjIHZlcnNpb25lZCBhbmQgdGFyZ2V0CisJZGVwZW5kZW50IHBsYWNlLgorCSogY29uZmlndXJlOiBSZWdlbmVyYXRlZC4KKwkqIE1ha2VmaWxlLmluLCBpbmNsdWRlL01ha2VmaWxlLmluOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9NYWtlZmlsZS5pbjogTGlrZXdpc2UuCisKKzIwMDMtMTEtMDkgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4wLmM6IFByaW50IHJlc3VsdCBhbmQgY2hlY2sKKwl3aXRoIGRnLW91dHB1dCB0byBtYWtlIGRlYnVnZ2luZyBlYXNpZXIuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjEuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjMuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjQuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzEyYnl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTZieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xOGJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE5Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMV8xYnl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjBieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yMGJ5dGUxLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yNGJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzJieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zXzFieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zYnl0ZTEuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzNieXRlMi5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNF8xYnl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNGJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzVieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc182NGJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzZieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc183Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOGJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzlieXRlMS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOWJ5dGUyLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kb3VibGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2Zsb2F0LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zY2hhci5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc2ludC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc3Nob3J0LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191Y2hhci5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWludC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWxvbmdsb25nLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191c2hvcnQuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcHJvYmxlbTEuYzogTGlrZXdpc2UuCisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC91bndpbmR0ZXN0LmNjOiBNYWtlIGZmaV9jbG9zdXJlCisJc3RhdGljLgorCisyMDAzLTExLTA4ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOWJ5dGUyLmM6IE5ldyB0ZXN0IGNhc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzlieXRlMS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNjRieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yMGJ5dGUxLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xOWJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE4Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc2NoYXIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NpbnQuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NzaG9ydC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Mi5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0My5jOiBMaWtld2lzZS4KKworMjAwMy0xMS0wOCAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2RvdWJsZS5jOiBEbyBhIGNoZWNrIG9uIHRoZSByZXN1bHQuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VjaGFyLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191aW50LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191bG9uZ2xvbmcuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VzaG9ydC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fc2MuYzogQ2xlYW51cCB3aGl0ZXNwYWNlcy4KKworMjAwMy0xMS0wNiAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiBzcmMvcHJlcF9jaWYuYyAoZmZpX3ByZXBfY2lmKTogTW92ZSB0aGUgdmFsaWRpdHkgY2hlY2sgYWZ0ZXIKKwl0aGUgaW5pdGlhbGl6YXRpb24uCisKKzIwMDMtMTAtMjMgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKworCSogc3JjL2phdmFfcmF3X2FwaS5jIChmZmlfamF2YV9wdHJhcnJheV90b19yYXcpOiBSZXBsYWNlCisJRkZJX0FTU0VSVChGQUxTRSkgd2l0aCBGRklfQVNTRVJUKDApLgorCisyMDAzLTEwLTIyICBEYXZpZCBEYW5leSAgPGRkYW5leUBhdnRyZXguY29tPgorCisJKiBzcmMvbWlwcy9mZml0YXJnZXQuaDogUmVwbGFjZSB1bmRlZmluZWQgVUlOVDMyIGFuZCBmcmllbmRzIHdpdGgKKwlfX2F0dHJpYnV0ZV9fKChfX21vZGVfXyhfX1NJX18pKSkgYW5kIGZyaWVuZHMuCisKKzIwMDMtMTAtMjIgIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQHN1c2UuZGU+CisKKwkqIHNyYy9pYTY0L2ZmaS5jOiBSZXBsYWNlIEZBTFNFL1RSVUUgd2l0aCBmYWxzZS90cnVlLgorCisyMDAzLTEwLTIxICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwkqIGNvbmZpZ3VyZS5pbjogQUNfTElOS19GSUxFUyhmZml0YXJnZXQuaCkuCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisJKiBNYWtlZmlsZS5pbjogTGlrZXdpc2UuCisJKiBpbmNsdWRlL01ha2VmaWxlLmluOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9NYWtlZmlsZS5pbjogTGlrZXdpc2UuCisJKiBmZmljb25maWcuaC5pbjogTGlrZXdpc2UuCisKKzIwMDMtMTAtMjEgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CisJICAgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQHJlZGhhdC5jb20+CisKKwlBdm9pZCB0aGF0IGZmaS5oIGluY2x1ZGVzIGZmaWNvbmZpZy5oLgorCisJKiBNYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IEluY2x1ZGUgZmZpdGFyZ2V0LmggZmlsZXMKKwkoVEFSR0VUX1NSQ19NSVBTX0dDQyk6IFJlbmFtZWQgdG8gVEFSR0VUX1NSQ19NSVBTX0lSSVguCisJKFRBUkdFVF9TUkNfTUlQU19TR0kpOiBSZW1vdmVkLgorCShNSVBTX0dDQyk6IFJlbmFtZWQgdG8gVEFSR0VUX1NSQ19NSVBTX0lSSVguCisJKE1JUFNfU0dJKTogUmVtb3ZlZC4KKwkoQ0xFQU5GSUxFUyk6IFJlbW92ZWQuCisJKG1vc3RseWNsZWFuLWFtLCBjbGVhbi1hbSwgbW9zdGx5Y2xlYW4tc3ViLCBjbGVhbi1zdWIpOiBOZXcKKwl0YXJnZXRzLgorCSogYWNjb25maWcuaDogUmVtb3ZlZC4KKwkqIGNvbmZpZ3VyZS5pbjogQ29tcHV0ZSBzaXplb2ZzIG9ubHkgZm9yIGRvdWJsZSBhbmQgbG9uZyBkb3VibGUuCisJVXNlIHRoZW0gdG8gZGVmaW5lIGFuZCBzdWJzdCBIQVZFX0xPTkdfRE9VQkxFLiAgSW5jbHVkZSBjb21tZW50cworCWludG8gQUNfREVGSU5FIGluc3RlYWQgb2YgdXNpbmcgYWNjb25maWcuaC4gIENyZWF0ZQorCWluY2x1ZGUvZmZpdGFyZ2V0LmggaW5zdGVhZCBvZiBpbmNsdWRlL2ZmaWNvbmZpZy5oLiAgUmVuYW1lCisJTUlQU19HQ0MgdG8gTUlQU19JUklYLCBkcm9wIE1JUFNfU0dJIHNpbmNlIHdlIGFyZSBpbiBnY2MncyB0cmVlLgorCUFDX0RFRklORSBFSF9GUkFNRV9GTEFHUy4KKwkqIGluY2x1ZGUvTWFrZWZpbGUuYW0gKERJU1RDTEVBTkZJTEVTKTogTmV3IGF1dG9tYWtlIG1hY3JvLgorCShoYWNrX0RBVEEpOiBBZGQgZmZpdGFyZ2V0LmguCisJKiBpbmNsdWRlL2ZmaS5oLmluOiBSZW1vdmUgYWxsIHN5c3RlbSBzcGVjaWZpYyBkZWZpbml0aW9ucy4KKwlEZWNsYXJlIHJhdyBBUEkgZXZlbiBpZiBpdCBpcyBub3QgaW5zdGFsbGVkLCB3aHkgYm90aGVyPworCVVzZSBsaW1pdHMuaCBpbnN0ZWFkIG9mIFNJWkVPRl8qIHRvIGRlZmluZSBmZmlfdHlwZV8qLiAgRG8KKwlub3QgZGVmaW5lIEVIX0ZSQU1FX0ZMQUdTLCBpdCBpcyBpbiBmZmljb25maWcuaCBub3cuICBJbmNsdWRlCisJZmZpdGFyZ2V0LmggaW5zdGVhZCBvZiBmZmljb25maWcuaC4gIFJlbW92ZSBBTElHTiBtYWNyby4KKwkoVUlOVF9BUkcsIElOVF9BUkcpOiBSZW1vdmVkLCB1c2UgZmZpX2FyZyBhbmQgZmZpX3NhcmcgaW5zdGVhZC4KKwkqIGluY2x1ZGUvZmZpX2NvbW1vbi5oIChib29sKTogRG8gbm90IGRlZmluZS4KKwkoZmZpX2Fzc2VydCk6IEFjY2VwdCBmYWlsZWQgYXNzZXJ0aW9uLgorCShmZmlfdHlwZV90ZXN0KTogUmV0dXJuIHZvaWQgYW5kIGFjY2VwdCBmaWxlL2xpbmUuCisJKEZGSV9BU1NFUlQpOiBQYXNzIHN0cmluZ2l6ZWQgZmFpbGVkIGFzc2VydGlvbi4KKwkoRkZJX0FTU0VSVF9BVCk6IE5ldyBtYWNyby4KKwkoRkZJX0FTU0VSVF9WQUxJRF9UWVBFKTogTmV3IG1hY3JvLgorCShVSU5UOCwgU0lOVDgsIFVJTlQxNiwgU0lOVDE2LCBVSU5UMzIsIFNJTlQzMiwKKwlVSU5UNjQsIFNJTlQ2NCk6IERlZmluZSBoZXJlIHdpdGggZ2NjJ3MgX19hdHRyaWJ1dGVfXyBtYWNybworCWluc3RlYWQgb2YgaW4gZmZpLmgKKwkoRkxPQVQzMiwgQUxJR04pOiBEZWZpbmUgaGVyZSBpbnN0ZWFkIG9mIGluIGZmaS5oCisJKiBpbmNsdWRlL2ZmaS1taXBzLmg6IFJlbW92ZWQuICBJdHMgY29udGVudCBtb3ZlZCB0bworCXNyYy9taXBzL2ZmaXRhcmdldC5oIGFmdGVyIHNlcGFyYXRpbmcgYXNzZW1ibHkgYW5kIEMgc2VjdGlvbnMuCisJKiBzcmMvYWxwaGEvZmZpLmMsIHNyYy9hbHBoYS9mZmkuYywgc3JjL2phdmFfcmF3X2FwaS5jCisJc3JjL3ByZXBfY2lmLmMsIHNyYy9yYXdfYXBpLmMsIHNyYy9pYTY0L2ZmaS5jLAorCXNyYy9taXBzL2ZmaS5jLCBzcmMvbWlwcy9uMzIuUywgc3JjL21pcHMvbzMyLlMsCisJc3JjL21pcHMvZmZpdGFyZ2V0LmgsIHNyYy9zcGFyYy9mZmkuYywgc3JjL3g4Ni9mZmk2NC5jOgorCVNJWkVPRl9BUkcgLT4gRkZJX1NJWkVPRl9BUkcuCisJKiBzcmMvaWE2NC9mZmkuYzogSW5jbHVkZSBzdGRib29sLmggKHByb3ZpZGVkIGJ5IEdDQyAyLjk1KykuCisJKiBzcmMvZGVidWcuYyAoZmZpX2Fzc2VydCk6IEFjY2VwdCBzdHJpbmdpemVkIGZhaWxlZCBhc3NlcnRpb24uCisJKGZmaV90eXBlX3Rlc3QpOiBSZXdyaXR0ZW4uCisJKiBzcmMvcHJlcC1jaWYuYyAoaW5pdGlhbGl6ZV9hZ2dyZWdhdGUsIGZmaV9wcmVwX2NpZik6IENhbGwKKwlGRklfQVNTRVJUX1ZBTElEX1RZUEUuCisJKiBzcmMvYWxwaGEvZmZpdGFyZ2V0LmgsIHNyYy9hcm0vZmZpdGFyZ2V0LmgsCisJc3JjL2lhNjQvZmZpdGFyZ2V0LmgsIHNyYy9tNjhrL2ZmaXRhcmdldC5oLAorCXNyYy9taXBzL2ZmaXRhcmdldC5oLCBzcmMvcG93ZXJwYy9mZml0YXJnZXQuaCwKKwlzcmMvczM5MC9mZml0YXJnZXQuaCwgc3JjL3NoL2ZmaXRhcmdldC5oLAorCXNyYy9zaDY0L2ZmaXRhcmdldC5oLCBzcmMvc3BhcmMvZmZpdGFyZ2V0LmgsCisJc3JjL3g4Ni9mZml0YXJnZXQuaDogTmV3IGZpbGVzLgorCSogc3JjL2FscGhhL29zZi5TLCBzcmMvYXJtL3N5c3YuUywgc3JjL2lhNjQvdW5peC5TLAorCXNyYy9tNjhrL3N5c3YuUywgc3JjL21pcHMvbjMyLlMsIHNyYy9taXBzL28zMi5TLAorCXNyYy9wb3dlcnBjL2FpeC5TLCBzcmMvcG93ZXJwYy9kYXJ3aW4uUywKKwlzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmMsIHNyYy9wb3dlcnBjL2xpbnV4NjQuUywKKwlzcmMvcG93ZXJwYy9saW51eDY0X2Nsb3N1cmUuUywgc3JjL3Bvd2VycGMvcHBjX2Nsb3N1cmUuUywKKwlzcmMvcG93ZXJwYy9zeXN2LlMsIHNyYy9zMzkwL3N5c3YuUywgc3JjL3NoL3N5c3YuUywKKwlzcmMvc2g2NC9zeXN2LlMsIHNyYy9zcGFyYy92OC5TLCBzcmMvc3BhcmMvdjkuUywKKwlzcmMveDg2L3N5c3YuUywgc3JjL3g4Ni91bml4NjQuUywgc3JjL3g4Ni93aW4zMi5TOgorCWluY2x1ZGUgZmZpY29uZmlnLmgKKworMjAwMy0xMC0yMCAgUmFpbmVyIE9ydGggIDxyb0BUZWNoRmFrLlVuaS1CaWVsZWZlbGQuREU+CisKKwkqIHNyYy9taXBzL2ZmaS5jOiBVc2UgX0FCSU4zMiwgX0FCSU8zMiBpbnN0ZWFkIG9mIGV4dGVybmFsCisJX01JUFNfU0lNX05BQkkzMiwgX01JUFNfU0lNX0FCSTMyLgorCisyMDAzLTEwLTE5ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwkqIHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYyAoZmZpX3ByZXBfYXJncyk6IERlY2xhcmUgYnl0ZXMgYWdhaW4uCisJVXNlZCB3aGVuIEZGSV9ERUJVRyA9IDEuCisKKzIwMDMtMTAtMTQgIEFsYW4gTW9kcmEgIDxhbW9kcmFAYmlncG9uZC5uZXQuYXU+CisKKwkqIHNyYy90eXBlcy5jIChkb3VibGUsIGxvbmdkb3VibGUpOiBEZWZhdWx0IFBPV0VSUEM2NCB0byA4IGJ5dGUgc2l6ZQorCWFuZCBhbGlnbi4KKworMjAwMy0xMC0wNiAgUmFpbmVyIE9ydGggIDxyb0BUZWNoRmFrLlVuaS1CaWVsZWZlbGQuREU+CisKKwkqIGluY2x1ZGUvZmZpX21pcHMuaDogRGVmaW5lIEZGSV9NSVBTX04zMiBmb3IgTjMyL042NCBBQklzLAorCUZGSV9NSVBTX08zMiBmb3IgTzMyIEFCSS4KKworMjAwMy0xMC0wMSAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiB0ZXN0c3VpdGUvbGliL2xpYmZmaS1kZy5leHA6IFNldCBMRF9MSUJSQVJZX1BBVEhfNjQgZm9yCisJU1BBUkM2NC4gQ2xlYW51cCB3aGl0ZXNwYWNlcy4KKworMjAwMy0wOS0xOSAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjAuYzogWGZhaWwgbWlwcywgYXJtLAorCXN0cm9uZ2FybSwgeHNjYWxlLiBDbGVhbnVwIHdoaXRlc3BhY2VzLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4xLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4yLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4zLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xMmJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE2Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMV8xYnl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjBieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yNGJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzJieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zXzFieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zYnl0ZTEuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzNieXRlMi5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNF8xYnl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNGJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzVieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc182Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfN2J5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzhieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kb3VibGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2Zsb2F0LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191Y2hhci5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWludC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWxvbmdsb25nLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191c2hvcnQuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0MS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9wcm9ibGVtMS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC91bndpbmR0ZXN0LmNjOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9weW9iamMtdGMuYzogQ2xlYW51cCB3aGl0ZXNwYWNlcy4KKworMjAwMy0wOS0xOCAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgorCisJKiBzcmMvcG93ZXJwYy9haXguUzogQ2xlYW51cCB3aGl0ZXNwYWNlcy4KKwkqIHNyYy9wb3dlcnBjL2FpeF9jbG9zdXJlLlM6IExpa2V3aXNlLgorCisyMDAzLTA5LTE4ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwkqIHNyYy9wb3dlcnBjL2Rhcndpbi5TOiBDbGVhbnVwIHdoaXRlc3BhY2VzLCBjb21tZW50IGZvcm1hdHRpbmcuCisJKiBzcmMvcG93ZXJwYy9kYXJ3aW5fY2xvc3VyZS5TOiBMaWtld2lzZS4KKwkqIHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYzogTGlrZXdpc2UuCisKKzIwMDMtMDktMTggIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKwkgICAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgorCisJKiBzcmMvdHlwZXMuYyAoZG91YmxlKTogQWRkIEFJWCBhbmQgRGFyd2luIHRvIHRoZSByaWdodCBUWVBFREVGLgorCSogc3JjL3Bvd2VycGMvYWl4X2Nsb3N1cmUuUzogUmVtb3ZlIHRoZSBwb2ludGVyIHRvIHRoZSBvdXRnb2luZworCXBhcmFtZXRlciBzdGFjay4KKwkqIHNyYy9wb3dlcnBjL2Rhcndpbl9jbG9zdXJlLlM6IExpa2V3aXNlLgorCSogc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jIChmZmlfcHJlcF9hcmdzKTogSGFuZGxlIHN0cnVjdHVyZXMKKwlhY2NvcmRpbmcgdG8gdGhlIERhcndpbi9BSVggQUJJLgorCShmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IExpa2V3aXNlLgorCShmZmlfY2xvc3VyZV9oZWxwZXJfREFSV0lOKTogTGlrZXdpc2UuCisJUmVtb3ZlIHRoZSBvdXRnb2luZyBwYXJhbWV0ZXIgc3RhY2sgbG9naWMuIFNpbXBsaWZ5IHRoZSBldmFsdWF0aW9uCisJb2YgdGhlIGRpZmZlcmVudCBDQVNFIHR5cGVzLgorCShmZmlfcHJlcF9jbG91c3VyZSk6IEF2b2lkIHRoZSBjYXN0cyBvbiBsdmFsdWVzLiBDaGFuZ2UgdGhlIGJyYW5jaAorCXN0YXRlbWVudCBpbiB0aGUgdHJhbXBvbGluZSBjb2RlLgorCisyMDAzLTA5LTE4ICBLYXogS29qaW1hICA8a2tvamltYUBnY2MuZ251Lm9yZz4KKworCSogc3JjL3NoL2ZmaS5jIChmZmlfcHJlcF9hcmdzKTogVGFrZSBhY2NvdW50IGludG8gdGhlIGFsaWduZW1lbnQKKwlmb3IgdGhlIHJlZ2lzdGVyIHNpemUuCisJKGZmaV9jbG9zdXJlX2hlbHBlcl9TWVNWKTogSGFuZGxlIHRoZSBzdHJ1Y3R1cmUgcmV0dXJuIHZhbHVlCisJYWRkcmVzcyBjb3JyZWN0bHkuCisJKGZmaV9jbG9zdXJlX2hlbHBlcl9TWVNWKTogUmV0dXJuIHRoZSBhcHByb3ByaWF0ZSB0eXBlIHdoZW4KKwl0aGUgcmVnaXN0ZXJzIGFyZSB1c2VkIGZvciB0aGUgc3RydWN0dXJlIHJldHVybiB2YWx1ZS4KKwkqIHNyYy9zaC9zeXN2LlMgKGZmaV9jbG9zdXJlX1NZU1YpOiBGaXggdGhlIHN0YWNrIGxheW91dCBmb3IKKwl0aGUgNjQtYml0IHJldHVybiB2YWx1ZS4gIFVwZGF0ZSBjb3B5cmlnaHQgeWVhcnMuCisKKzIwMDMtMDktMTcgIFJhaW5lciBPcnRoICA8cm9AVGVjaEZhay5VbmktQmllbGVmZWxkLkRFPgorCisJKiB0ZXN0c3VpdGUvbGliL2xpYmZmaS1kZy5leHAgKGxpYmZmaV90YXJnZXRfY29tcGlsZSk6IFNlYXJjaCBpbgorCXNyY2RpciBmb3IgZmZpX21pcHMuaC4KKworMjAwMy0wOS0xMiAgQWxhbiBNb2RyYSAgPGFtb2RyYUBiaWdwb25kLm5ldC5hdT4KKworCSogc3JjL3ByZXBfY2lmLmMgKGluaXRpYWxpemVfYWdncmVnYXRlKTogSW5jbHVkZSB0YWlsIHBhZGRpbmcgaW4KKwlzdHJ1Y3R1cmUgc2l6ZS4KKwkqIHNyYy9wb3dlcnBjL2xpbnV4NjRfY2xvc3VyZS5TIChmZmlfY2xvc3VyZV9MSU5VWDY0KTogQ29ycmVjdAorCXBsYWNlbWVudCBvZiBmbG9hdCByZXN1bHQuCisJKiB0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvdW53aW5kdGVzdC5jYyAoY2xvc3VyZV90ZXN0X2ZuMSk6IENvcnJlY3QKKwljYXN0IG9mICJyZXNwIiBmb3IgYmlnLWVuZGlhbiA2NCBiaXQgbWFjaGluZXMuCisKKzIwMDMtMDktMTEgIEFsYW4gTW9kcmEgIDxhbW9kcmFAYmlncG9uZC5uZXQuYXU+CisKKwkqIHNyYy90eXBlcy5jIChkb3VibGUsIGxvbmdkb3VibGUpOiBNZXJnZSBpZGVudGljYWwgU0ggYW5kIEFSTQorCXR5cGVkZWZzLCBhbmQgYWRkIFBPV0VSUEM2NC4KKwkqIHNyYy9wb3dlcnBjL2ZmaS5jIChmZmlfcHJlcF9hcmdzNjQpOiBDb3JyZWN0IG5leHRfYXJnIGNhbGMgZm9yCisJc3RydWN0IHNwbGl0IG92ZXIgZ3ByIGFuZCByZXN0LgorCShmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IENvcnJlY3QgaW50YXJnX2NvdW50IGZvciBzdHJ1Y3R1cmVzLgorCSogc3JjL3Bvd2VycGMvbGludXg2NC5TIChmZmlfY2FsbF9MSU5VWDY0KTogRml4IGdwciBvZmZzZXRzLgorCisyMDAzLTA5LTA5ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwkqIHNyYy9wb3dlcnBjL2ZmaS5jIChmZmlfY2xvc3VyZV9oZWxwZXJfU1lTVikgSGFuZGxlIHN0cnVjdAorCXBhc3NpbmcgY29ycmVjdGx5LgorCisyMDAzLTA5LTA5ICBBbGFuIE1vZHJhICA8YW1vZHJhQGJpZ3BvbmQubmV0LmF1PgorCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisKKzIwMDMtMDktMDQgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKworCSogTWFrZWZpbGUuYW06IFJlbW92ZSBidWlsZCBydWxlcyBmb3IgZmZpdGVzdC4KKwkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgorCisyMDAzLTA5LTA0ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwkqIHNyYy9qYXZhX3Jhd19hcGkuYzogSW5jbHVkZSA8c3RkbGliLmg+IHRvIGZpeCBjb21waWxlciB3YXJuaW5nCisJYWJvdXQgaW1wbGljaXQgZGVjbGFyYXRpb24gb2YgYWJvcnQoKS4KKworMjAwMy0wOS0wNCAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiBNYWtlZmlsZS5hbTogQWRkIGRlamFnbnUgdGVzdCBmcmFtZXdvcmsuIEZpeGVzIFBSIG90aGVyLzExNDExLgorCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCisJKiBjb25maWd1cmUuaW46IEFkZCBkZWphZ251IHRlc3QgZnJhbWV3b3JrLgorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCisJKiB0ZXN0c3VpdGUvTWFrZWZpbGUuYW06IE5ldyBmaWxlLgorCSogdGVzdHN1aXRlL01ha2VmaWxlLmluOiBCdWlsdAorCSogdGVzdHN1aXRlL2xpYi9saWJmZmktZGcuZXhwOiBOZXcgZmlsZS4KKwkqIHRlc3RzdWl0ZS9jb25maWcvZGVmYXVsdC5leHA6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2NhbGwuZXhwOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mZml0ZXN0Lmg6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4wLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4xLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4yLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4zLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xXzFieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zXzFieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc180XzFieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yYnl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM2J5dGUxLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zYnl0ZTIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzRieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc181Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNmJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzdieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc184Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTJieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xNmJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzIwYnl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjRieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kb3VibGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2Zsb2F0LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191Y2hhci5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWludC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWxvbmdsb25nLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191c2hvcnQuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmxvYXQuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmxvYXQxLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zsb2F0Mi5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9tYW55LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL21hbnlfd2luMzIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0MS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9weW9iamMtdGMuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcHJvYmxlbTEuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcHJvbW90aW9uLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9sbC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fc2MuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX3VjLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmxlbi5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJsZW5fd2luMzIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0MS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3QyLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDMuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0NC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3Q1LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDYuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0Ny5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3Q4LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDkuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvc3BlY2lhbC5leHA6IE5ldyBmaWxlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL2ZmaXRlc3RjeHguaDogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvdW53aW5kdGVzdC5jYzogTGlrZXdpc2UuCisKKworMjAwMy0wOC0xMyAgS2F6IEtvamltYSAgPGtrb2ppbWFAZ2NjLmdudS5vcmc+CisKKwkqIHNyYy9zaC9mZmkuYyAoT0ZTX0lOVDE2KTogU2V0IDAgZm9yIGxpdHRsZSBlbmRpYW4gY2FzZS4gIFVwZGF0ZQorCWNvcHlyaWdodCB5ZWFycy4KKworMjAwMy0wOC0wMiAgQWxhbiBNb2RyYSAgPGFtb2RyYUBiaWdwb25kLm5ldC5hdT4KKworCSogc3JjL3Bvd2VycGMvZmZpLmMgKGZmaV9wcmVwX2FyZ3M2NCk6IE1vZGlmeSBmb3IgY2hhbmdlZCBnY2MKKwlzdHJ1Y3R1cmUgcGFzc2luZy4KKwkoZmZpX2Nsb3N1cmVfaGVscGVyX0xJTlVYNjQpOiBMaWtld2lzZS4KKwkqIHNyYy9wb3dlcnBjL2xpbnV4NjQuUzogUmVtb3ZlIGNvZGUgd3JpdGluZyB0byBwYXJtIHNhdmUgYXJlYS4KKwkqIHNyYy9wb3dlcnBjL2xpbnV4NjRfY2xvc3VyZS5TIChmZmlfY2xvc3VyZV9MSU5VWDY0KTogVXNlIHJldHVybgorCWFkZHJlc3MgaW4gbHIgZnJvbSBmZmlfY2xvc3VyZV9oZWxwZXJfTElOVVg2NCBjYWxsIHRvIGNhbGN1bGF0ZQorCXRhYmxlIGFkZHJlc3MuICBPcHRpbWl6ZSBmdW5jdGlvbiB0YWlsLgorCisyMDAzLTA3LTI4ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwkqIHNyYy9zcGFyYy9mZmkuYzogSGFuZGxlIGFsbCBmbG9hdGluZyBwb2ludCByZWdpc3RlcnMuCisJKiBzcmMvc3BhcmMvdjkuUzogTGlrZXdpc2UuIEZpeGVzIHNlY29uZCBwYXJ0IG9mIFBSIHRhcmdldC8xMTQxMC4KKworMjAwMy0wNy0xMSAgR2VyYWxkIFBmZWlmZXIgIDxwZmVpZmVyQGRiYWkudHV3aWVuLmFjLmF0PgorCisJKiBSRUFETUU6IE5vdGUgdGhhdCBsaWJmZmkgaXMgbm90IHBhcnQgb2YgR0NDLiAgVXBkYXRlIHRoZSBwcm9qZWN0CisJVVJMIGFuZCBzdGF0dXMuCisKKzIwMDMtMDYtMTkgIEZyYW56IFNpcmwgIDxGcmFuei5TaXJsLWtlcm5lbEBsYXV0ZXJiYWNoLmNvbT4KKworCSogc3JjL3Bvd2VycGMvcHBjX2Nsb3N1cmUuUzogSW5jbHVkZSBmZmkuaC4KKworMjAwMy0wNi0xMyAgUmFpbmVyIE9ydGggIDxyb0BUZWNoRmFrLlVuaS1CaWVsZWZlbGQuREU+CisKKwkqIHNyYy94ODYvc3lzdi5TOiBBdm9pZCBnYXMtb25seSAudWxlYjEyOC8uc2xlYjEyOCBkaXJlY3RpdmVzLgorCVVzZSBDIHN0eWxlIGNvbW1lbnRzLgorCisyMDAzLTA2LTEzICBLYXogS29qaW1hICA8a2tvamltYUByci5paWo0dS5vci5qcD4KKworCSogTWFrZWZpbGUuYW06IEFkZCBTSG1lZGlhIHN1cHBvcnQuICBGaXggYSB0eXBvIG9mIFNIIHN1cHBvcnQuCisJKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKwkqIGNvbmZpZ3VyZS5pbiAoc2g2NC0qLWxpbnV4Kiwgc2g1Ki0qLWxpbnV4Kik6IEFkZCB0YXJnZXQuCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisJKiBpbmNsdWRlL2ZmaS5oLmluOiBBZGQgU0htZWRpYSBzdXBwb3J0LgorCSogc3JjL3NoNjQvZmZpLmM6IE5ldyBmaWxlLgorCSogc3JjL3NoNjQvc3lzdi5TOiBOZXcgZmlsZS4KKworMjAwMy0wNS0xNiAgSmFrdWIgSmVsaW5layAgPGpha3ViQHJlZGhhdC5jb20+CisKKwkqIGNvbmZpZ3VyZS5pbiAoSEFWRV9ST19FSF9GUkFNRSk6IENoZWNrIHdoZXRoZXIgLmVoX2ZyYW1lIHNlY3Rpb24KKwlzaG91bGQgYmUgcmVhZC1vbmx5LgorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCSogZmZpY29uZmlnLmguaW46IFJlYnVpbHQuCisJKiBpbmNsdWRlL2ZmaS5oLmluIChFSF9GUkFNRV9GTEFHUyk6IERlZmluZS4KKwkqIHNyYy9hbHBoYS9vc2YuUzogVXNlIEVIX0ZSQU1FX0ZMQUdTLgorCSogc3JjL3Bvd2VycGMvbGludXg2NC5TOiBMaWtld2lzZS4KKwkqIHNyYy9wb3dlcnBjL2xpbnV4NjRfY2xvc3VyZS5TOiBMaWtld2lzZS4gIEluY2x1ZGUgZmZpLmguCisJKiBzcmMvcG93ZXJwYy9zeXN2LlM6IFVzZSBFSF9GUkFNRV9GTEFHUy4gIFVzZSBwY3JlbCBlbmNvZGluZworCWlmIC1mcGljLy1mUElDLy1tcmVsb2NhdGFibGUuCisJKiBzcmMvcG93ZXJwYy9wb3dlcnBjX2Nsb3N1cmUuUzogTGlrZXdpc2UuCisJKiBzcmMvc3BhcmMvdjguUzogSWYgSEFWRV9ST19FSF9GUkFNRSBpcyBkZWZpbmVkLCBkb24ndCBpbmNsdWRlCisJI3dyaXRlIGluIC5laF9mcmFtZSBmbGFncy4KKwkqIHNyYy9zcGFyYy92OS5TOiBMaWtld2lzZS4KKwkqIHNyYy94ODYvdW5peDY0LlM6IFVzZSBFSF9GUkFNRV9GTEFHUy4KKwkqIHNyYy94ODYvc3lzdi5TOiBMaWtld2lzZS4gIFVzZSBwY3JlbCBlbmNvZGluZyBpZiAtZnBpYy8tZlBJQy4KKwkqIHNyYy9zMzkwL3N5c3YuUzogVXNlIEVIX0ZSQU1FX0ZMQUdTLiAgSW5jbHVkZSBmZmkuaC4KKworMjAwMy0wNS0wNyAgSmVmZiBTdHVybSAgPGpzdHVybUBvbmUtcG9pbnQuY29tPgorCisJRml4ZXMgUFIgYm9vdHN0cmFwLzEwNjU2CisJKiBjb25maWd1cmUuaW4gKEhBVkVfQVNfUkVHSVNURVJfUFNFVURPX09QKTogVGVzdCBhc3NlbWJsZXIKKwlzdXBwb3J0IGZvciAucmVnaXN0ZXIgcHNldWRvLW9wLgorCSogc3JjL3NwYXJjL3Y4LlM6IFVzZSBpdC4KKwkqIGZmaWNvbmZpZy5oLmluOiBSZWJ1aWx0LgorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCisyMDAzLTA0LTE4ICBKYWt1YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNvbT4KKworCSogaW5jbHVkZS9mZmkuaC5pbiAoUE9XRVJQQzY0KTogRGVmaW5lIGlmIDY0LWJpdC4KKwkoZW51bSBmZmlfYWJpKTogQWRkIEZGSV9MSU5VWDY0IG9uIFBPV0VSUEMuCisJTWFrZSBpdCB0aGUgZGVmYXVsdCBvbiBQT1dFUlBDNjQuCisJKEZGSV9UUkFNUE9MSU5FX1NJWkUpOiBEZWZpbmUgdG8gMjQgb24gUE9XRVJQQzY0LgorCSogY29uZmlndXJlLmluOiBDaGFuZ2UgcG93ZXJwYy0qLWxpbnV4KiBpbnRvIHBvd2VycGMqLSotbGludXgqLgorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCSogc3JjL3Bvd2VycGMvZmZpLmMgKGhpZGRlbik6IERlZmluZS4KKwkoZmZpX3ByZXBfYXJnc19TWVNWKTogUmVuYW1lZCBmcm9tCisJZmZpX3ByZXBfYXJncy4gIENhc3QgcG9pbnRlcnMgdG8gdW5zaWduZWQgbG9uZyB0byBzaHV0IHVwIHdhcm5pbmdzLgorCShOVU1fR1BSX0FSR19SRUdJU1RFUlM2NCwgTlVNX0ZQUl9BUkdfUkVHSVNURVJTNjQsCisJQVNNX05FRURTX1JFR0lTVEVSUzY0KTogTmV3LgorCShmZmlfcHJlcF9hcmdzNjQpOiBOZXcgZnVuY3Rpb24uCisJKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogSGFuZGxlIEZGSV9MSU5VWDY0IEFCSS4KKwkoZmZpX2NhbGwpOiBMaWtld2lzZS4KKwkoZmZpX3ByZXBfY2xvc3VyZSk6IExpa2V3aXNlLgorCShmbHVzaF9pY2FjaGUpOiBTdXJyb3VuZCBieSAjaWZuZGVmIFBPV0VSUEM2NC4KKwkoZmZpX2RibGZsKTogTmV3IHVuaW9uIHR5cGUuCisJKGZmaV9jbG9zdXJlX2hlbHBlcl9TWVNWKTogVXNlIGl0IHRvIGF2b2lkIGFsaWFzaW5nIHByb2JsZW1zLgorCShmZmlfY2xvc3VyZV9oZWxwZXJfTElOVVg2NCk6IE5ldyBmdW5jdGlvbi4KKwkqIHNyYy9wb3dlcnBjL3BwY19jbG9zdXJlLlM6IFN1cnJvdW5kIHdob2xlIGZpbGUgYnkgI2lmbmRlZgorCV9fcG93ZXJwYzY0X18uCisJKiBzcmMvcG93ZXJwYy9zeXN2LlM6IExpa2V3aXNlLgorCShmZmlfY2FsbF9TWVNWKTogUmVuYW1lIGZmaV9wcmVwX2FyZ3MgdG8gZmZpX3ByZXBfYXJnc19TWVNWLgorCSogc3JjL3Bvd2VycGMvbGludXg2NC5TOiBOZXcgZmlsZS4KKwkqIHNyYy9wb3dlcnBjL2xpbnV4NjRfY2xvc3VyZS5TOiBOZXcgZmlsZS4KKwkqIE1ha2VmaWxlLmFtIChFWFRSQV9ESVNUKTogQWRkIHNyYy9wb3dlcnBjL2xpbnV4NjQuUyBhbmQKKwlzcmMvcG93ZXJwYy9saW51eDY0X2Nsb3N1cmUuUy4KKwkoVEFSR0VUX1NSQ19QT1dFUlBDKTogTGlrZXdpc2UuCisKKwkqIHNyYy9mZml0ZXN0LmMgKGNsb3N1cmVfdGVzdF9mbiwgY2xvc3VyZV90ZXN0X2ZuMSwgY2xvc3VyZV90ZXN0X2ZuMiwKKwljbG9zdXJlX3Rlc3RfZm4zKTogRml4IHJlc3VsdCBwcmludGluZyBvbiBiaWctZW5kaWFuIDY0LWJpdAorCW1hY2hpbmVzLgorCShtYWluKTogUHJpbnQgdHN0Ml9hcmcgaW5zdGVhZCBvZiB1bmluaXRpYWxpemVkIHRzdDJfcmVzdWx0LgorCisJKiBzcmMvZmZpdGVzdC5jIChtYWluKTogSGlkZSB3aGF0IGNsb3N1cmUgcG9pbnRlciByZWFsbHkgcG9pbnRzIHRvCisJZnJvbSB0aGUgY29tcGlsZXIuCisKKzIwMDMtMDQtMTYgIFJpY2hhcmQgRWFybnNoYXcgIDxyZWFybnNoYUBhcm0uY29tPgorCisJKiBjb25maWd1cmUuaW4gKGFybS0qLW5ldGJzZGVsZiopOiBBZGQgY29uZmlndXJhdGlvbi4KKwkoY29uZmlndXJlKTogUmVnZW5lcmF0ZWQuCisKKzIwMDMtMDQtMDQgIExvcmVuIEouIFJpdHRsZSAgPGxqcml0dGxlQGFjbS5vcmc+CisKKwkqIGluY2x1ZGUvTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisKKzIwMDMtMDMtMjEgIFpkZW5layBEdm9yYWsgIDxyYWtkdmVyQGF0cmV5Lmthcmxpbi5tZmYuY3VuaS5jej4KKworCSogbGliZmZpL2luY2x1ZGUvZmZpLmguaW46IERlZmluZSBYODYgaW5zdGVhZCBvZiBYODZfNjQgaW4gMzIKKwliaXQgbW9kZS4KKwkqIGxpYmZmaS9zcmMveDg2L2ZmaS5jIChmZmlfY2xvc3VyZV9TWVNWLCBmZmlfY2xvc3VyZV9yYXdfU1lTVik6CisJUmVjZWl2ZSBjbG9zdXJlIHBvaW50ZXIgdGhyb3VnaCBwYXJhbWV0ZXIsIHJlYWQgYXJncyB1c2luZworCV9fYnVpbHRpbl9kd2FyZl9jZmEuCisJKEZGSV9JTklUX1RSQU1QT0xJTkUpOiBTZW5kIGNsb3N1cmUgcmVmZXJlbmNlIHRocm91Z2ggZWF4LgorCisyMDAzLTAzLTEyICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBzdXNlLmRlPgorCisJKiBjb25maWd1cmUuaW46IEF2b2lkIHRyYWlsaW5nIC8uIGluIHRvb2xleGVjbGliZGlyLgorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCisyMDAzLTAzLTAzICBBbmRyZWFzIFRvYmxlciA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKworCSogc3JjL3Bvd2VycGMvZGFyd2luX2Nsb3N1cmUuUzogUmVjb2RlIHRvIGZpdCBkeW5hbWljIGxpYnJhcmllcy4KKworMjAwMy0wMi0wNiAgQW5kcmVhcyBUb2JsZXIgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwkqIGxpYmZmaS9zcmMvcG93ZXJwYy9kYXJ3aW5fY2xvc3VyZS5TOgorCUZpeCBhbGlnbmVtZW50IGJ1ZywgYWxsb2NhdGUgOCBieXRlcyBmb3IgdGhlIHJlc3VsdC4KKwkqIGxpYmZmaS9zcmMvcG93ZXJwYy9haXhfY2xvc3VyZS5TOgorCUxpa2V3aXNlLgorCSogbGliZmZpL3NyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYzoKKwlVcGRhdGUgc3RhY2tmcmFtZSBkZXNjcmlwdGlvbiBmb3IgYWl4L2Rhcndpbl9jbG9zdXJlLlMuCisKKzIwMDMtMDItMDYgIEpha3ViIEplbGluZWsgIDxqYWt1YkByZWRoYXQuY29tPgorCisJKiBzcmMvczM5MC9mZmkuYyAoZmZpX2Nsb3N1cmVfaGVscGVyX1NZU1YpOiBBZGQgaGlkZGVuIHZpc2liaWxpdHkKKwlhdHRyaWJ1dGUuCisKKzIwMDMtMDEtMzEgIENocmlzdGlhbiBDb3JuZWxzc2VuICA8Y2Nvcm5AY3MudHUtYmVybGluLmRlPiwKKwkgICAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAc3VzZS5kZT4KKworCSogY29uZmlndXJlLmluOiBBZGp1c3QgY29tbWFuZCB0byBzb3VyY2UgY29uZmlnLW1sLmluIHRvIGFjY291bnQKKwlmb3IgY2hhbmdlcyB0byB0aGUgbGliZmZpX2Jhc2VkaXIgZGVmaW5pdGlvbi4KKwkobGliZmZpX2Jhc2VkaXIpOiBSZW1vdmUgJHtzcmNkaXJ9IGZyb20gdmFsdWUgYW5kIGluY2x1ZGUgdHJhaWxpbmcKKwlzbGFzaCBpZiBub25lbXB0eS4KKworCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCisyMDAzLTAxLTI5ICBGcmFueiBTaXJsICA8RnJhbnouU2lybC1rZXJuZWxAbGF1dGVyYmFjaC5jb20+CisKKwkqIHNyYy9wb3dlcnBjL3BwY19jbG9zdXJlLlM6IFJlY29kZSB0byBmaXQgc2hhcmVkIGxpYnMuCisKKzIwMDMtMDEtMjggIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorCisJKiBpbmNsdWRlL2ZmaS5oLmluOiBFbmFibGUgRkZJX0NMT1NVUkVTIGZvciB4ODZfNjQuCisJKiBzcmMveDg2L2ZmaTY0LmMgKGZmaV9wcmVwX2Nsb3N1cmUpOiBOZXcuCisJKGZmaV9jbG9zdXJlX1VOSVg2NF9pbm5lcik6IE5ldy4KKwkqIHNyYy94ODYvdW5peDY0LlMgKGZmaV9jbG9zdXJlX1VOSVg2NCk6IE5ldy4KKworMjAwMy0wMS0yNyAgQWxleGFuZHJlIE9saXZhICA8YW9saXZhQHJlZGhhdC5jb20+CisKKwkqIGNvbmZpZ3VyZS5pbiAodG9vbGV4ZWNkaXIsIHRvb2xleGVjbGliZGlyKTogU2V0IGFuZCBBQ19TVUJTVC4KKwlSZW1vdmUgVVNFX0xJQkRJUiBjb25kaXRpb25hbC4KKwkqIE1ha2VmaWxlLmFtICh0b29sZXhlY2RpciwgdG9vbGV4ZWNsaWJkaXIpOiBEb24ndCBvdmVycmlkZS4KKwkqIE1ha2VmaWxlLmluLCBjb25maWd1cmU6IFJlYnVpbHQuCisKKzIwMDMtMDEwMjcgIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KKworCSogTWFrZWZpbGUuYW0gKFRBUkdFVF9TUkNfUE9XRVJQQ19BSVgpOiBGaXggdHlwby4KKwkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCisyMDAzLTAxLTIyICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KKworCSogc3JjL3Bvd2VycGMvZGFyd2luLlMgKF9mZmlfY2FsbF9BSVgpOiBBZGQgQXVnbWVudGF0aW9uIHNpemUgdG8KKwl1bndpbmQgaW5mby4KKworMjAwMy0wMS0yMSAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiBzcmMvcG93ZXJwYy9kYXJ3aW4uUzogQWRkIHVud2luZCBpbmZvLgorCSogc3JjL3Bvd2VycGMvZGFyd2luX2Nsb3N1cmUuUzogTGlrZXdpc2UuCisKKzIwMDMtMDEtMTQgIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorCisJKiBzcmMveDg2L2ZmaTY0LmMgKGZmaV9wcmVwX2FyZ3MpOiBDaGVjayBmb3Igdm9pZCByZXR2YWwuCisJKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogTGlrZXdpc2UuCisJKiBzcmMveDg2L3VuaXg2NC5TOiBBZGQgdW53aW5kIGluZm8uCisKKzIwMDMtMDEtMTQgIEFuZHJlYXMgSmFlZ2VyICA8YWpAc3VzZS5kZT4KKworCSogc3JjL2ZmaXRlc3QuYyAobWFpbik6IE9ubHkgdXNlIGZmaV9jbG9zdXJlcyBpZiB0aG9zZSBhcmUKKwlzdXBwb3J0ZWQuCisKKzIwMDMtMDEtMTMgQW5kcmVhcyBUb2JsZXIgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwkqIGxpYmZmaS9zcmMvZmZpdGVzdC5jCisJIGFkZCBjbG9zdXJlIHRlc3RjYXNlcworCisyMDAzLTAxLTEzIEtldmluIEIuIEhlbmRyaWNrcyA8a2hlbmRyaWNrc0BpdmV5LnV3by5jYT4KKworCSogbGliZmZpL3NyYy9wb3dlcnBjL2ZmaS5jCisJIGZpeCBhbGlnbm1lbnQgYnVnIGZvciBmbG9hdCAoNCBieXRlIGFsaWduZWQgaXNvIDggYnl0ZSkKKworMjAwMy0wMS0wOSAgR2VvZmZyZXkgS2VhdGluZyAgPGdlb2Zma0BhcHBsZS5jb20+CisKKwkqIHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYzogUmVtb3ZlIFJDUyB2ZXJzaW9uIHN0cmluZy4KKwkqIHNyYy9wb3dlcnBjL2Rhcndpbi5TOiBSZW1vdmUgUkNTIHZlcnNpb24gc3RyaW5nLgorCisyMDAzLTAxLTAzICBKZWZmIFN0dXJtICA8anN0dXJtQG9uZS1wb2ludC5jb20+CisKKwkqIGluY2x1ZGUvZmZpLmguaW46IEFkZCBjbG9zdXJlIGRlZmluZXMgZm9yIFNQQVJDLCBTUEFSQzY0LgorCSogc3JjL2ZmaXRlc3QuYyAobWFpbik6IFVzZSBzdGF0aWMgc3RvcmFnZSBmb3IgY2xvc3VyZS4KKwkqIHNyYy9zcGFyYy9mZmkuYyAoZmZpX3ByZXBfY2xvc3VyZSwgZmZpX2Nsb3N1cmVfc3BhcmNfaW5uZXIpOiBOZXcuCisJKiBzcmMvc3BhcmMvdjguUyAoZmZpX2Nsb3N1cmVfdjgpOiBOZXcuCisJKiBzcmMvc3BhcmMvdjkuUyAoZmZpX2Nsb3N1cmVfdjkpOiBOZXcuCisKKzIwMDItMTEtMTAgIFJhbmppdCBNYXRoZXcgPHJtYXRoZXdAaG90bWFpbC5jb20+CisKKwkqIGluY2x1ZGUvZmZpLmguaW46IEFkZGVkIEZGSV9TVERDQUxMIGZmaV90eXBlCisJICBlbnVtZXJhdGlvbiBmb3IgWDg2X1dJTjMyLgorCSogc3JjL3g4Ni93aW4zMi5TOiBBZGRlZCBmZmlfY2FsbF9TVERDQUxMIGZ1bmN0aW9uCisJICBkZWZpbml0aW9uLgorCSogc3JjL3g4Ni9mZmkuYyAoZmZpX2NhbGwvZmZpX3Jhd19jYWxsKTogQWRkZWQKKwkgIHN3aXRjaCBjYXNlcyBmb3IgcmVjb2duaXNpbmcgRkZJX1NURENBTEwgYW5kCisJICBjYWxsaW5nIGZmaV9jYWxsX1NURENBTEwgaWYgdGFyZ2V0IGlzIFg4Nl9XSU4zMi4KKwkqIHNyYy9mZml0ZXN0LmMgKG15X3N0ZGNhbGxfc3RybGVuL3N0ZGNhbGxfbWFueSk6CisJICBzdGRjYWxsIHZlcnNpb25zIG9mIHRoZSAibXlfc3RybGVuIiBhbmQgIm1hbnkiCisJICB0ZXN0IGZ1bmN0aW9ucyAoZm9yIFg4Nl9XSU4zMikuCisJICBBZGRlZCB0ZXN0IGNhc2VzIHRvIHRlc3Qgc3RkY2FsbCBpbnZvY2F0aW9uIHVzaW5nCisJICB0aGVzZSBmdW5jdGlvbnMuCisKKzIwMDItMTItMDIgIEtheiBLb2ppbWEgIDxra29qaW1hQGdjYy5nbnUub3JnPgorCisJKiBzcmMvc2gvc3lzdi5TOiBBZGQgRFdBUkYyIHVud2luZCBpbmZvLgorCisyMDAyLTExLTI3ICBVbHJpY2ggV2VpZ2FuZCAgPHV3ZWlnYW5kQGRlLmlibS5jb20+CisKKwkqIHNyYy9zMzkwL3N5c3YuUyAoLmVoX2ZyYW1lIHNlY3Rpb24pOiBNYWtlIHNlY3Rpb24gcmVhZC1vbmx5LgorCisyMDAyLTExLTI2ICBKaW0gV2lsc29uICA8d2lsc29uQHJlZGhhdC5jb20+CisKKwkqIHNyYy90eXBlcy5jIChGRklfVFlQRV9QT0lOVEVSKTogSGFzIHNpemUgOCBvbiBJQTY0LgorCisyMDAyLTExLTIzICBILkouIEx1IDxoamxAZ251Lm9yZz4KKworCSogYWNpbmNsdWRlLm00OiBBZGQgZHVtbXkgQU1fUFJPR19MSUJUT09MLgorCUluY2x1ZGUgLi4vY29uZmlnL2FjY3Jvc3MubTQuCisJKiBhY2xvY2FsLm00OyBSZWJ1aWxkLgorCSogY29uZmlndXJlOiBMaWtld2lzZS4KKworMjAwMi0xMS0xNSAgVWxyaWNoIFdlaWdhbmQgIDx1d2VpZ2FuZEBkZS5pYm0uY29tPgorCisJKiBzcmMvczM5MC9zeXN2LlMgKC5laF9mcmFtZSBzZWN0aW9uKTogQWRhcHQgdG8gcGNyZWwgRkRFIGVuY29kaW5nLgorCisyMDAyLTExLTExICBESiBEZWxvcmllICA8ZGpAcmVkaGF0LmNvbT4KKworCSogY29uZmlndXJlLmluOiBMb29rIGZvciBjb21tb24gZmlsZXMgaW4gdGhlIHJpZ2h0IHBsYWNlLgorCisyMDAyLTEwLTA4ICBVbHJpY2ggV2VpZ2FuZCAgPHV3ZWlnYW5kQGRlLmlibS5jb20+CisKKwkqIHNyYy9qYXZhX3Jhd19hcGkuYyAoZmZpX2phdmFfcmF3X3RvX3B0cmFycmF5KTogSW50ZXJwcmV0CisJcmF3IGRhdGEgYXMgX0p2X3dvcmQgdmFsdWVzLCBub3QgZmZpX3Jhdy4KKwkoZmZpX2phdmFfcHRyYXJyYXlfdG9fcmF3KTogTGlrZXdpc2UuCisJKGZmaV9qYXZhX3J2YWx1ZV90b19yYXcpOiBOZXcgZnVuY3Rpb24uCisJKGZmaV9qYXZhX3Jhd19jYWxsKTogQ2FsbCBpdC4KKwkoZmZpX2phdmFfcmF3X3RvX3J2YWx1ZSk6IE5ldyBmdW5jdGlvbi4KKwkoZmZpX2phdmFfdHJhbnNsYXRlX2FyZ3MpOiBDYWxsIGl0LgorCSogc3JjL2ZmaXRlc3QuYyAoY2xvc3VyZV90ZXN0X2ZuKTogSW50ZXJwcmV0IHJldHVybiB2YWx1ZQorCWFzIGZmaV9hcmcsIG5vdCBpbnQuCisJKiBzcmMvczM5MC9mZmkuYyAoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBBZGQgbWlzc2luZworCUZGSV9UWVBFX1BPSU5URVIgY2FzZS4KKwkoZmZpX2Nsb3N1cmVfaGVscGVyX1NZU1YpOiBMaWtld2lzZS4gIEFsc28sIGFzc3VtZSByZXR1cm4KKwl2YWx1ZXMgZXh0ZW5kZWQgdG8gd29yZCBzaXplLgorCisyMDAyLTEwLTAyICBBbmRyZWFzIEphZWdlciAgPGFqQHN1c2UuZGU+CisKKwkqIHNyYy94ODYvZmZpNjQuYyAoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBSZW1vdmUgZGVidWcgb3V0cHV0LgorCisyMDAyLTEwLTAxICBCbyBUaG9yc2VuICA8Ym9Ac21ldGFuYS5zdXNlLmRlPgorCisJKiBpbmNsdWRlL2ZmaS5oLmluOiBGaXggaTM4NiB3aW4zMiBjb21waWxhdGlvbi4KKworMjAwMi0wOS0zMCAgVWxyaWNoIFdlaWdhbmQgIDx1d2VpZ2FuZEBkZS5pYm0uY29tPgorCisJKiBjb25maWd1cmUuaW46IEFkZCBzMzkweC0qLWxpbnV4LSogdGFyZ2V0LgorCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCSogaW5jbHVkZS9mZmkuaC5pbjogRGVmaW5lIFMzOTBYIGZvciBzMzkweCB0YXJnZXRzLgorCShGRklfQ0xPU1VSRVMpOiBEZWZpbmUgZm9yIHMzOTAvczM5MHguCisJKEZGSV9UUkFNUE9MSU5FX1NJWkUpOiBMaWtld2lzZS4KKwkoRkZJX05BVElWRV9SQVdfQVBJKTogTGlrZXdpc2UuCisJKiBzcmMvcHJlcF9jaWYuYyAoZmZpX3ByZXBfY2lmKTogRG8gbm90IGNvbXB1dGUgc3RhY2sgc3BhY2UgZm9yIHMzOTAuCisJKiBzcmMvdHlwZXMuYyAoRkZJX1RZUEVfUE9JTlRFUik6IFVzZSA4LWJ5dGUgcG9pbnRlcnMgb24gczM5MHguCisJKiBzcmMvczM5MC9mZmkuYzogTWFqb3IgcmV3b3JrIG9mIGV4aXN0aW5nIGNvZGUuICBBZGQgc3VwcG9ydCBmb3IKKwlzMzkweCB0YXJnZXRzLiAgQWRkIGNsb3N1cmUgc3VwcG9ydC4KKwkqIHNyYy9zMzkwL3N5c3YuUzogTGlrZXdpc2UuCisKKzIwMDItMDktMjkgIFJpY2hhcmQgRWFybnNoYXcgIDxyZWFybnNoYUBhcm0uY29tPgorCisJKiBzcmMvYXJtL3N5c3YuUzogRml4IHR5cG8uCisKKzIwMDItMDktMjggIFJpY2hhcmQgRWFybnNoYXcgIDxyZWFybnNoYUBhcm0uY29tPgorCisJKiBzcmMvYXJtL3N5c3YuUzogSWYgd2UgZG9uJ3QgaGF2ZSBtYWNoaW5lL2FzbS5oIGFuZCB0aGUgcHJlLXByb2Nlc3NvcgorCWhhcyBkZWZpbmVkIF9fVVNFUl9MQUJFTF9QUkVGSVhfXywgdGhlbiB1c2UgaXQgaW4gQ05BTUUuCisJKGZmaV9jYWxsX1NZU1YpOiBIYW5kbGUgc29mdC1mbG9hdC4KKworMjAwMi0wOS0yNyAgQm8gVGhvcnNlbiAgPGJvQHN1c2UuZGU+CisKKwkqIGluY2x1ZGUvZmZpLmguaW46IEZpeCBtdWx0aWxpYiB4ODYtNjQgc3VwcG9ydC4KKworMjAwMi0wOS0yMiAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgorCisJKiBNYWtlZmlsZS5hbSAoYWxsLW11bHRpKTogRml4IG11bHRpbGliIHBhcmFsbGVsIGJ1aWxkLgorCisyMDAyLTA3LTE5ICBLYXogS29qaW1hICA8a2tvamltYUBnY2MuZ251Lm9yZz4KKworCSogY29uZmlndXJlLmluIChzaFszNF0qLSotbGludXgqKTogQWRkIGJyYWNrZXRzLgorCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCisyMDAyLTA3LTE4ICBLYXogS29qaW1hICA8a2tvamltYUBnY2MuZ251Lm9yZz4KKworCSogTWFrZWZpbGUuYW06IEFkZCBTSCBzdXBwb3J0LgorCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisJKiBjb25maWd1cmUuaW4gKHNoLSotbGludXgqLCBzaFszNF0qLSotbGludXgqKTogQWRkIHRhcmdldC4KKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKwkqIGluY2x1ZGUvZmZpLmguaW46IEFkZCBTSCBzdXBwb3J0LgorCSogc3JjL3NoL2ZmaS5jOiBOZXcgZmlsZS4KKwkqIHNyYy9zaC9zeXN2LlM6IE5ldyBmaWxlLgorCSogc3JjL3R5cGVzLmM6IEFkZCBTSCBzdXBwb3J0LgorCisyMDAyLTA3LTE2ICBCbyBUaG9yc2VuICA8Ym9Ac3VzZS5kZT4KKworCSogc3JjL3g4Ni9mZmk2NC5jOiBOZXcgZmlsZSB0aGF0IGFkZHMgeDg2LTY0IHN1cHBvcnQuCisJKiBzcmMveDg2L3VuaXg2NC5TOiBOZXcgZmlsZSB0aGF0IGhhbmRsZXMgYXJndW1lbnQgc2V0dXAgZm9yCisJeDg2LTY0LgorCSogc3JjL3g4Ni9zeXN2LlM6IERvbid0IHVzZSB0aGlzIG9uIHg4Ni02NC4KKwkqIHNyYy94ODYvZmZpLmM6IERvbid0IHVzZSB0aGlzIG9uIHg4Ni02NC4KKwlSZW1vdmUgdW51c2VkIHZhcnMuCisJKiBzcmMvcHJlcF9jaWYuYyAoZmZpX3ByZXBfY2lmKTogRG9uJ3QgZG8gc3RhY2sgc2l6ZSBjYWxjdWxhdGlvbgorCWZvciB4ODYtNjQuCisJKiBzcmMvZmZpdGVzdC5jIChzdHJ1Y3Q2KTogTmV3IHRlc3QgdGhhdCB0ZXN0cyBhIHNwZWNpYWwgY2FzZSBpbgorCXRoZSB4ODYtNjQgQUJJLgorCShzdHJ1Y3Q3KTogTGlrZXdpc2UuCisJKHN0cnVjdDgpOiBMaWtld2lzZS4KKwkoc3RydWN0OSk6IExpa2V3aXNlLgorCShjbG9zdXJlX3Rlc3RfZm4pOiBTaWxlbmNlIHdhcm5pbmcgYWJvdXQgdGhpcyB3aGVuIGl0J3Mgbm90IHVzZWQuCisJKG1haW4pOiBBZGQgdGhlIG5ldyB0ZXN0cy4KKwkobWFpbik6IEZpeCBhIGNvdXBsZSBvZiB3cm9uZyBjYXN0cyBhbmQgc2lsZW5jZSBzb21lIGNvbXBpbGVyIHdhcm5pbmdzLgorCSogaW5jbHVkZS9mZmkuaC5pbjogQWRkIHg4Ni02NCBBQkkgZGVmaW5pdGlvbi4KKwkqIGZmaWNvbmZpZy5oLmluOiBSZWdlbmVyYXRlLgorCSogTWFrZWZpbGUuYW06IEFkZCB4ODYtNjQgc3VwcG9ydC4KKwkqIGNvbmZpZ3VyZS5pbjogTGlrZXdpc2UuCisJKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKwkqIGNvbmZpZ3VyZTogTGlrZXdpc2UuCisKKzIwMDItMDYtMjQgIEJvIFRob3JzZW4gIDxib0BzdXNlLmRlPgorCisJKiBzcmMvdHlwZXMuYzogTWVyZ2Ugc2V0dGluZ3MgZm9yIHNpbWlsYXIgYXJjaGl0ZWN0dXJlcy4KKwlBZGQgeDg2LTY0IHNpemVzIGFuZCBhbGlnbm1lbnRzLgorCisyMDAyLTA2LTIzICBCbyBUaG9yc2VuICA8Ym9Ac3VzZS5kZT4KKworCSogc3JjL2FybS9mZmkuYyAoZmZpX3ByZXBfYXJncyk6IFJlbW92ZSB1bnVzZWQgdmFycy4KKwkqIHNyYy9zcGFyYy9mZmkuYyAoZmZpX3ByZXBfYXJnc192OCk6IExpa2V3aXNlLgorCSogc3JjL21pcHMvZmZpLmMgKGZmaV9wcmVwX2FyZ3MpOiBMaWtld2lzZS4KKwkqIHNyYy9tNjhrL2ZmaS5jIChmZmlfcHJlcF9hcmdzKTogTGlrZXdpc2UuCisKKzIwMDItMDctMTggIEguSi4gTHUgIChoamxAZ251Lm9yZykKKworCSogTWFrZWZpbGUuYW0gKFRBUkdFVF9TUkNfTUlQU19MSU5VWCk6IE5ldy4KKwkobGliZmZpX2xhX1NPVVJDRVMpOiBTdXBwb3J0IE1JUFNfTElOVVguCisJKGxpYmZmaV9jb252ZW5pZW5jZV9sYV9TT1VSQ0VTKTogTGlrZXdpc2UuCisJKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZWQuCisKKwkqIGNvbmZpZ3VyZS5pbiAobWlwczY0Ki0qKTogU2tpcC4KKwkobWlwcyotKi1saW51eCopOiBOZXcuCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGVkLgorCisJKiBzcmMvbWlwcy9mZmkuYzogSW5jbHVkZSA8c2dpZGVmcy5oPi4KKworMjAwMi0wNi0wNiAgVWxyaWNoIFdlaWdhbmQgIDx1d2VpZ2FuZEBkZS5pYm0uY29tPgorCisJKiBzcmMvczM5MC9zeXN2LlM6IFNhdmUvcmVzdG9yZSAlcjYuICBBZGQgRFdBUkYtMiB1bndpbmQgaW5mby4KKworMjAwMi0wNS0yNyAgUm9nZXIgU2F5bGUgIDxyb2dlckBleWVzb3Blbi5jb20+CisKKwkqIHNyYy94ODYvZmZpLmMgKGZmaV9wcmVwX2FyZ3MpOiBSZW1vdmUgcmVmZXJlbmNlIHRvIGF2bi4KKworMjAwMi0wNS0yNyAgQm8gVGhvcnNlbiAgPGJvQHN1c2UuZGU+CisKKwkqIHNyYy94ODYvZmZpLmMgKGZmaV9wcmVwX2FyZ3MpOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlIGFuZAorCWZpeCBmb3JtYXR0aW5nLgorCisyMDAyLTA1LTEzICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwkqIHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYyAoZmZpX3ByZXBfY2xvc3VyZSk6IERlY2xhcmUgZmQgYXQKKwliZWdpbm5pbmcgb2YgZnVuY3Rpb24gKGZvciBvbGRlciBhcHBsZSBjYykuCisKKzIwMDItMDUtMDggIEFsZXhhbmRyZSBPbGl2YSAgPGFvbGl2YUByZWRoYXQuY29tPgorCisJKiBjb25maWd1cmUuaW4gKE9SSUdJTkFMX0xEX0ZPUl9NVUxUSUxJQlMpOiBQcmVzZXJ2ZSBMRCBhdAorCXNjcmlwdCBlbnRyeSwgYW5kIHNldCBMRCB0byBpdCB3aGVuIGNvbmZpZ3VyaW5nIG11bHRpbGlicy4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKworMjAwMi0wNS0wNSAgSmFzb24gVGhvcnBlICA8dGhvcnBlakB3YXNhYmlzeXN0ZW1zLmNvbT4KKworCSogY29uZmlndXJlLmluIChzcGFyYzY0LSotbmV0YnNkKik6IEFkZCB0YXJnZXQuCisJKHNwYXJjLSotbmV0YnNkZWxmKik6IExpa2V3aXNlLgorCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCisyMDAyLTA0LTI4ICBEYXZpZCBTLiBNaWxsZXIgIDxkYXZlbUByZWRoYXQuY29tPgorCisJKiBjb25maWd1cmUuaW4sIGNvbmZpZ3VyZTogRml4IFNQQVJDIHRlc3QgaW4gcHJldmlvdXMgY2hhbmdlLgorCisyMDAyLTA0LTI5ICBHZXJoYXJkIFRvbm4gIDxHZXJoYXJkVG9ubkBzd29sLmRlPgorCisJKiBNYWtlZmlsZS5hbTogQWRkIExpbnV4IGZvciBTLzM5MCBzdXBwb3J0LgorCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisJKiBjb25maWd1cmUuaW46IEFkZCBMaW51eCBmb3IgUy8zOTAgc3VwcG9ydC4KKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKwkqIGluY2x1ZGUvZmZpLmguaW46IEFkZCBMaW51eCBmb3IgUy8zOTAgc3VwcG9ydC4KKwkqIHNyYy9zMzkwL2ZmaS5jOiBOZXcgZmlsZSBmcm9tIGxpYmZmaSBDVlMgdHJlZS4KKwkqIHNyYy9zMzkwL3N5c3YuUzogTmV3IGZpbGUgZnJvbSBsaWJmZmkgQ1ZTIHRyZWUuCisKKzIwMDItMDQtMjggIEpha3ViIEplbGluZWsgIDxqYWt1YkByZWRoYXQuY29tPgorCisJKiBjb25maWd1cmUuaW4gKEhBVkVfQVNfU1BBUkNfVUFfUENSRUwpOiBDaGVjayBmb3Igd29ya2luZworCSVyX2Rpc3AzMigpLgorCSogc3JjL3NwYXJjL3Y4LlM6IFVzZSBpdC4KKwkqIHNyYy9zcGFyYy92OS5TOiBMaWtld2lzZS4KKwkqIGZmaWNvbmZpZy5oLmluOiBSZWJ1aWx0LgorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCisyMDAyLTA0LTA4ICBIYW5zIEJvZWhtICA8SGFuc19Cb2VobUBocC5jb20+CisKKwkqIHNyYy9qYXZhX3Jhd19hcGkuYyAoZmZpX2phdmFfcmF3X3NpemUpOiBIYW5kbGUgRkZJX1RZUEVfRE9VQkxFCisJY29ycmVjdGx5LgorCSogc3JjL2lhNjQvdW5peC5TOiBBZGQgdW53aW5kIGluZm9ybWF0aW9uLiBGaXggY29tbWVudHMuCisJU2F2ZSBzcCBpbiBhIHdheSB0aGF0J3MgY29tcGF0aWJsZSB3aXRoIHVud2luZCBpbmZvLgorCShmZmlfY2FsbF91bml4KTogQ29ycmVjdGx5IHJlc3RvcmUgc3AgaW4gYWxsIGNhc2VzLgorCSogc3JjL2lhNjQvZmZpLmM6IEFkZCwgZml4IGNvbW1lbnRzLgorCisyMDAyLTA0LTA4ICBKYWt1YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNvbT4KKworCSogc3JjL3NwYXJjL3Y4LlM6IE1ha2UgLmVoX2ZyYW1lIGRlcGVuZGVudCBvbiB0YXJnZXQgd29yZCBzaXplLgorCisyMDAyLTA0LTA2ICBKYXNvbiBUaG9ycGUgIDx0aG9ycGVqQHdhc2FiaXN5c3RlbXMuY29tPgorCisJKiBjb25maWd1cmUuaW4gKGFscGhhKi0qLW5ldGJzZCopOiBBZGQgdGFyZ2V0LgorCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCisyMDAyLTA0LTA0ICBKZWZmIFN0dXJtICA8anN0dXJtQG9uZS1wb2ludC5jb20+CisKKwkqIHNyYy9zcGFyYy92OC5TOiBBZGQgdW53aW5kIGluZm8uCisJKiBzcmMvc3BhcmMvdjkuUzogTGlrZXdpc2UuCisKKzIwMDItMDMtMzAgIEtyaXN0ZXIgV2FsZnJpZHNzb24gIDxjYXRvQGRmLmx0aC5zZT4KKworCSogY29uZmlndXJlLmluOiBFbmFibGUgaSo4Ni0qLW5ldGJzZGVsZiouCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisKKzIwMDItMDMtMjkgIERhdmlkIEJpbGxpbmdodXJzdCA8RGF2aWQuQmlsbGluZ2h1cnN0QHJpb3RpbnRvLmNvbT4KKworCVBSIG90aGVyLzI2MjAKKwkqIHNyYy9taXBzL24zMi5zOiBEZWxldGUKKwkqIHNyYy9taXBzL28zMi5zOiBEZWxldGUKKworMjAwMi0wMy0yMSAgTG9yZW4gSi4gUml0dGxlICA8bGpyaXR0bGVAYWNtLm9yZz4KKworCSogY29uZmlndXJlLmluOiBFbmFibGUgYWxwaGEqLSotZnJlZWJzZCouCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisKKzIwMDItMDMtMTcgIEJyeWNlIE1jS2lubGF5ICA8YnJ5Y2VAd2FpdGFraS5vdGFnby5hYy5uej4KKworCSogTWFrZWZpbGUuYW06IGxpYmZmaWNvbnZlbmllbmNlIC0+IGxpYmZmaV9jb252ZW5pZW5jZS4KKwkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgorCisJKiBNYWtlZmlsZS5hbTogRGVmaW5lIGZmaXRlc3RfT0JKRUNUUy4KKwkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgorCisyMDAyLTAzLTA3ICBBbmRyZWFzIFRvYmxlciAgPHRvYUBwb3AuYWdyaS5jaD4KKwkgICAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgorCisJKiBNYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IEFkZCBEYXJ3aW4gYW5kIEFJWCBjbG9zdXJlIGZpbGVzLgorCShUQVJHRVRfU1JDX1BPV0VSUENfQUlYKTogQWRkIGFpeF9jbG9zdXJlLlMuCisJKFRBUkdFVF9TUkNfUE9XRVJQQ19EQVJXSU4pOiBBZGQgZGFyd2luX2Nsb3N1cmUuUy4KKwkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCSogaW5jbHVkZS9mZmkuaC5pbjogQWRkIEFJWCBhbmQgRGFyd2luIGNsb3N1cmUgZGVmaW5pdGlvbnMuCisJKiBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmMgKGZmaV9wcmVwX2Nsb3N1cmUpOiBOZXcgZnVuY3Rpb24uCisJKGZsdXNoX2ljYWNoZSwgZmx1c2hfcmFuZ2UpOiBOZXcgZnVuY3Rpb25zLgorCShmZmlfY2xvc3VyZV9oZWxwZXJfREFSV0lOKTogTmV3IGZ1bmN0aW9uLgorCSogc3JjL3Bvd2VycGMvYWl4X2Nsb3N1cmUuUzogTmV3IGZpbGUuCisJKiBzcmMvcG93ZXJwYy9kYXJ3aW5fY2xvc3VyZS5TOiBOZXcgZmlsZS4KKworMjAwMi0wMi0yNCAgSmVmZiBTdHVybSAgPGpzdHVybUBvbmUtcG9pbnQuY29tPgorCisJKiBpbmNsdWRlL2ZmaS5oLmluOiBBZGQgdHlwZWRlZiBmb3IgZmZpX2FyZy4KKwkqIHNyYy9mZml0ZXN0LmMgKG1haW4pOiBEZWNsYXJlIHJpbnQgd2l0aCBmZmlfYXJnLgorCisyMDAyLTAyLTIxICBBbmRyZWFzIFRvYmxlciAgPHRvYUBwb3AuYWdyaS5jaD4KKworCSogc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jIChmZmlfcHJlcF9hcmdzKTogU2tpcCBhcHByb3ByaWF0ZQorCW51bWJlciBvZiBHUFJzIGZvciBmbG9hdGluZy1wb2ludCBhcmd1bWVudHMuCisKKzIwMDItMDEtMzEgIEFudGhvbnkgR3JlZW4gIDxncmVlbkByZWRoYXQuY29tPgorCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisJKiBjb25maWd1cmUuaW46IFJlcGxhY2UgQ0hFQ0tfU0laRU9GIGFuZCBlbmRpYW4gdGVzdHMgd2l0aAorCWNyb3NzLWNvbXBpbGVyIGZyaWVuZGx5IG1hY3Jvcy4KKwkqIGFjbG9jYWwubTQgKEFDX0NPTVBJTEVfQ0hFQ0tfU0laRU9GLCBBQ19DX0JJR0VORElBTl9DUk9TUyk6IE5ldworCW1hY3Jvcy4KKworMjAwMi0wMS0xOCAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgorCisJKiBzcmMvcG93ZXJwYy9kYXJ3aW4uUyAoX2ZmaV9jYWxsX0FJWCk6IE5ldy4KKwkqIHNyYy9wb3dlcnBjL2FpeC5TIChmZmlfY2FsbF9EQVJXSU4pOiBOZXcuCisKKzIwMDItMDEtMTcgIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KKworCSogTWFrZWZpbGUuYW0gKEVYVFJBX0RJU1QpOiBBZGQgRGFyd2luIGFuZCBBSVggZmlsZXMuCisJKFRBUkdFVF9TUkNfUE9XRVJQQ19BSVgpOiBOZXcuCisJKFBPV0VSUENfQUlYKTogTmV3IHN0YW56YS4KKwkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCSogY29uZmlndXJlLmluOiBBZGQgQUlYIGNhc2UuCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisJKiBpbmNsdWRlL2ZmaS5oLmluIChmZmlfYWJpKTogQWRkIEZGSV9BSVguCisJKiBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmMgKGZmaV9zdGF0dXMpOiBVc2UgImxvbmciIHRvIHNjYWxlIGZyYW1lCisJc2l6ZS4gIEZpeCAibG9uZyBkb3VibGUiIHN1cHBvcnQuCisJKGZmaV9jYWxsKTogQWRkIEZGSV9BSVggY2FzZS4KKwkqIHNyYy9wb3dlcnBjL2FpeC5TOiBOZXcuCisKKzIwMDEtMTAtMDkgIEpvaG4gSG9ybmt2aXN0ICA8am9obkB0b2FzdGVkbWFyc2htYWxsb3cuY29tPgorCisJSW1wbGVtZW50IERhcndpbiBQb3dlclBDIEFCSS4KKwkqIGNvbmZpZ3VyZS5pbjogSGFuZGxlIHBvd2VycGMtKi1kYXJ3aW4qLgorCSogTWFrZWZpbGUuYW06IFNldCBzb3VyY2UgZmlsZXMgZm9yIFBPV0VSUENfREFSV0lOLgorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCisJKiBpbmNsdWRlL2ZmaS5oLmluOiBEZWZpbmUgRkZJX0RBUldJTiBhbmQgRkZJX0RFRkFVTFRfQUJJIGZvcgorCVBPV0VSUENfREFSV0lOLgorCSogc3JjL3Bvd2VycGMvZGFyd2luLlM6IE5ldyBmaWxlLgorCSogc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jOiBOZXcgZmlsZS4KKworMjAwMS0xMC0wNyAgSm9zZXBoIFMuIE15ZXJzICA8anNtMjhAY2FtLmFjLnVrPgorCisJKiBzcmMveDg2L2ZmaS5jOiBGaXggc3BlbGxpbmcgZXJyb3Igb2YgInNlcGFyYXRlIiBhcyAic2VwZXJhdGUiLgorCisyMDAxLTA3LTE2ICBSYWluZXIgT3J0aCAgPHJvQFRlY2hGYWsuVW5pLUJpZWxlZmVsZC5ERT4KKworCSogc3JjL3g4Ni9zeXN2LlM6IEF2b2lkIGdhcy1vbmx5IC5iYWxpZ24gZGlyZWN0aXZlLgorCVVzZSBDIHN0eWxlIGNvbW1lbnRzLgorCisyMDAxLTA3LTE2ICBSYWluZXIgT3J0aCAgPHJvQFRlY2hGYWsuVW5pLUJpZWxlZmVsZC5ERT4KKworCSogc3JjL2FscGhhL2ZmaS5jIChmZmlfcHJlcF9jbG9zdXJlKTogQXZvaWQgZ2FzLW9ubHkgbW5lbW9uaWMuCisJRml4ZXMgUFIgYm9vdHN0cmFwLzM1NjMuCisKKzIwMDEtMDYtMjYgIFJhaW5lciBPcnRoICA8cm9AVGVjaEZhay5VbmktQmllbGVmZWxkLkRFPgorCisJKiBzcmMvYWxwaGEvb3NmLlMgKGZmaV9jbG9zdXJlX29zZik6IFVzZSAucmRhdGEgZm9yIEVDT0ZGLgorCisyMDAxLTA2LTI1ICBSYWluZXIgT3J0aCAgPHJvQFRlY2hGYWsuVW5pLUJpZWxlZmVsZC5ERT4KKworCSogY29uZmlndXJlLmluOiBSZWNvZ25pemUgc3BhcmMqLXN1bi0qIGhvc3QuCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisKKzIwMDEtMDYtMDYgIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorCisJKiBzcmMvYWxwaGEvb3NmLlMgKF9fRlJBTUVfQkVHSU5fXyk6IENvbmRpdGlvbmFsaXplIGZvciBFTEYuCisKKzIwMDEtMDYtMDMgIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorCisJKiBzcmMvYWxwaGEvb3NmLlM6IEFkZCB1bndpbmQgaW5mby4KKwkqIHNyYy9wb3dlcnBjL3N5c3YuUzogQWRkIHVud2luZCBpbmZvLgorCSogc3JjL3Bvd2VycGMvcHBjX2Nsb3N1cmUuUzogTGlrZXdpc2UuCisKKzIwMDAtMDUtMzEgIEplZmYgU3R1cm0gIDxqc3R1cm1Ab25lLXBvaW50LmNvbT4KKworCSogY29uZmlndXJlLmluOiBGaXggQUNfQVJHX0VOQUJMRSB1c2FnZS4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKworMjAwMS0wNS0wNiAgQnJ5Y2UgTWNLaW5sYXkgIDxicnljZUB3YWl0YWtpLm90YWdvLmFjLm56PgorCisJKiBjb25maWd1cmUuaW46IFJlbW92ZSB3YXJuaW5nIGFib3V0IGJldGEgY29kZS4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKworMjAwMS0wNC0yNSAgSGFucyBCb2VobSA8SGFuc19Cb2VobUBocC5jb20+CisKKwkqIHNyYy9pYTY0L3VuaXguUzogUmVzdG9yZSBzdGFjayBwb2ludGVyIHdoZW4gcmV0dXJuaW5nIGZyb20KKwlmZmlfY2xvc3VyZV9VTklYLgorCSogc3JjL2lhNjQvZmZpLmM6IEZpeCB0eXBvIGluIGNvbW1lbnQuCisKKzIwMDEtMDQtMTggIEppbSBXaWxzb24gIDx3aWxzb25AcmVkaGF0LmNvbT4KKworCSogc3JjL2lhNjQvdW5peC5TOiBEZWxldGUgdW5uZWNlc3NhcnkgaW5jcmVtZW50IGFuZCBkZWNyZW1lbnQgb2YgbG9jMgorCXRvIGVsaW1pbmF0ZSBSQVcgRFYuCisKKzIwMDEtMDQtMTIgIEJyeWNlIE1jS2lubGF5ICA8YnJ5Y2VAYWxiYXRyb3NzLmNvLm56PgorCisJKiBNYWtlZmlsZS5hbTogTWFrZSBhIGxpYnRvb2wgY29udmVuaWVuY2UgbGlicmFyeS4KKwkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgorCisyMDAxLTAzLTI5ICBCcnljZSBNY0tpbmxheSAgPGJyeWNlQGFsYmF0cm9zcy5jby5uej4KKworCSogY29uZmlndXJlLmluOiBVc2UgZGlmZmVyZW50IHN5bnRheCBmb3Igc3ViZGlyZWN0b3J5IGNyZWF0aW9uLgorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCisyMDAxLTAzLTI3ICBKb24gQmVuaXN0b24gIDxqb25AYmVuaXN0b24uY29tPgorCisJKiBjb25maWd1cmUuaW46IEFkZGVkIFg4Nl9XSU4zMiB0YXJnZXQgKFdpbjMyLCBDeWdXaW4sIE1pbmdXKS4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKwkqIE1ha2VmaWxlLmFtOiBBZGRlZCBYODZfV0lOMzIgdGFyZ2V0IHN1cHBvcnQuCisJKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KKworCSogaW5jbHVkZS9mZmkuaC5pbjogQWRkZWQgWDg2X1dJTjMyIHRhcmdldCBzdXBwb3J0LgorCisJKiBzcmMvZmZpdGVzdC5jOiBEb2Vzbid0IHJ1biBzdHJ1Y3R1cmUgdGVzdHMgZm9yIFg4Nl9XSU4zMiB0YXJnZXRzLgorCSogc3JjL3R5cGVzLmM6IEFkZGVkIFg4Nl9XSU4zMiB0YXJnZXQgc3VwcG9ydC4KKworCSogc3JjL3g4Ni93aW4zMi5TOiBOZXcgZmlsZS4gQmFzZWQgb24gc3lzdi5TLCBidXQgd2l0aCBFSAorCXN0dWZmIHJlbW92ZWQgYW5kIG1hZGUgdG8gd29yayB3aXRoIEN5Z1dpbidzIGdhcy4KKworMjAwMS0wMy0yNiAgQnJ5Y2UgTWNLaW5sYXkgIDxicnljZUBhbGJhdHJvc3MuY28ubno+CisKKwkqIGNvbmZpZ3VyZS5pbjogTWFrZSB0YXJnZXQgc3ViZGlyZWN0b3J5IGluIGJ1aWxkIGRpci4KKwkqIE1ha2VmaWxlLmFtOiBPdmVycmlkZSBzdWZmaXggYmFzZWQgcnVsZXMgdG8gc3BlY2lmeSBjb3JyZWN0IG91dHB1dAorCXN1YmRpcmVjdG9yeS4KKwkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCisyMDAxLTAzLTIzICBLZXZpbiBCIEhlbmRyaWNrcyAgPGtoZW5kcmlja3NAaXZleS51d28uY2E+CisKKwkqIHNyYy9wb3dlcnBjL3BwY19jbG9zdXJlLlM6IE5ldyBmaWxlLgorCSogc3JjL3Bvd2VycGMvZmZpLmMgKGZmaV9wcmVwX2FyZ3MpOiBGaXhlZCBBQkkgY29tcGF0aWJpbGl0eSBidWcKKwlpbnZvbHZpbmcgbG9uZyBsb25nIGFuZCByZWdpc3RlciBwYWlycy4KKwkoZmZpX3ByZXBfY2xvc3VyZSk6IE5ldyBmdW5jdGlvbi4KKwkoZmx1c2hfaWNhY2hlKTogTGlrZXdpc2UuCisJKGZmaV9jbG9zdXJlX2hlbHBlcl9TWVNWKTogTGlrZXdpc2UuCisJKiBpbmNsdWRlL2ZmaS5oLmluIChGRklfQ0xPU1VSRVMpOiBEZWZpbmUgb24gUFBDLgorCShGRklfVFJBTVBPTElORV9TSVpFKTogTGlrZXdpc2UuCisJKEZGSV9OQVRJVkVfUkFXX0FQSSk6IExpa2V3aXNlLgorCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCisJKiBNYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IEFkZGVkIHNyYy9wb3dlcnBjL3BwY19jbG9zdXJlLlMuCisJKFRBUkdFVF9TUkNfUE9XRVJQQyk6IExpa2V3aXNlLgorCisyMDAxLTAzLTE5ICBUb20gVHJvbWV5ICA8dHJvbWV5QHJlZGhhdC5jb20+CisKKwkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgorCSogTWFrZWZpbGUuYW0gKGZmaXRlc3RfTERGTEFHUyk6IE5ldyBtYWNyby4KKworMjAwMS0wMy0wMiAgTmljayBDbGlmdG9uICA8bmlja2NAcmVkaGF0LmNvbT4KKworCSogaW5jbHVkZS9mZmkuaC5pbjogUmVtb3ZlIFJDUyBpZGVudCBzdHJpbmcuCisJKiBpbmNsdWRlL2ZmaV9taXBzLmg6IFJlbW92ZSBSQ1MgaWRlbnQgc3RyaW5nLgorCSogc3JjL2RlYnVnLmM6IFJlbW92ZSBSQ1MgaWRlbnQgc3RyaW5nLgorCSogc3JjL2ZmaXRlc3QuYzogUmVtb3ZlIFJDUyBpZGVudCBzdHJpbmcuCisJKiBzcmMvcHJlcF9jaWYuYzogUmVtb3ZlIFJDUyBpZGVudCBzdHJpbmcuCisJKiBzcmMvdHlwZXMuYzogUmVtb3ZlIFJDUyBpZGVudCBzdHJpbmcuCisJKiBzcmMvYWxwaGEvZmZpLmM6IFJlbW92ZSBSQ1MgaWRlbnQgc3RyaW5nLgorCSogc3JjL2FscGhhL29zZi5TOiBSZW1vdmUgUkNTIGlkZW50IHN0cmluZy4KKwkqIHNyYy9hcm0vZmZpLmM6IFJlbW92ZSBSQ1MgaWRlbnQgc3RyaW5nLgorCSogc3JjL2FybS9zeXN2LlM6IFJlbW92ZSBSQ1MgaWRlbnQgc3RyaW5nLgorCSogc3JjL21pcHMvZmZpLmM6IFJlbW92ZSBSQ1MgaWRlbnQgc3RyaW5nLgorCSogc3JjL21pcHMvbjMyLlM6IFJlbW92ZSBSQ1MgaWRlbnQgc3RyaW5nLgorCSogc3JjL21pcHMvbzMyLlM6IFJlbW92ZSBSQ1MgaWRlbnQgc3RyaW5nLgorCSogc3JjL3NwYXJjL2ZmaS5jOiBSZW1vdmUgUkNTIGlkZW50IHN0cmluZy4KKwkqIHNyYy9zcGFyYy92OC5TOiBSZW1vdmUgUkNTIGlkZW50IHN0cmluZy4KKwkqIHNyYy9zcGFyYy92OS5TOiBSZW1vdmUgUkNTIGlkZW50IHN0cmluZy4KKwkqIHNyYy94ODYvZmZpLmM6IFJlbW92ZSBSQ1MgaWRlbnQgc3RyaW5nLgorCSogc3JjL3g4Ni9zeXN2LlM6IFJlbW92ZSBSQ1MgaWRlbnQgc3RyaW5nLgorCisyMDAxLTAyLTA4ICBKb3NlcGggUy4gTXllcnMgIDxqc20yOEBjYW0uYWMudWs+CisKKwkqIGluY2x1ZGUvZmZpLmguaW46IENoYW5nZSBzb3VyY2V3YXJlLmN5Z251cy5jb20gcmVmZXJlbmNlcyB0bworCWdjYy5nbnUub3JnLgorCisyMDAwLTEyLTA5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEByZWRoYXQuY29tPgorCisJKiBzcmMvYWxwaGEvZmZpLmMgKGZmaV9jYWxsKTogU2ltcGxpZnkgc3RydWN0IHJldHVybiB0ZXN0LgorCShmZmlfY2xvc3VyZV9vc2ZfaW5uZXIpOiBJbmRleCByYXRoZXIgdGhhbiBpbmNyZW1lbnQgYXZhbHVlCisJYW5kIGFyZ190eXBlcy4gIEdpdmUgZmZpX2Nsb3N1cmVfb3NmIHRoZSByYXcgcmV0dXJuIHZhbHVlIHR5cGUuCisJKiBzcmMvYWxwaGEvb3NmLlMgKGZmaV9jbG9zdXJlX29zZik6IEhhbmRsZSByZXR1cm4gdmFsdWUgdHlwZQorCXByb21vdGlvbi4KKworMjAwMC0xMi0wNyAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAcmVkaGF0LmNvbT4KKworCSogc3JjL3Jhd19hcGkuYyAoZmZpX3RyYW5zbGF0ZV9hcmdzKTogRml4IHR5cG8uCisJKGZmaV9wcmVwX2Nsb3N1cmUpOiBMaWtld2lzZS4KKworCSogaW5jbHVkZS9mZmkuaC5pbiBbQUxQSEFdOiBEZWZpbmUgRkZJX0NMT1NVUkVTIGFuZAorCUZGSV9UUkFNUE9MSU5FX1NJWkUuCisJKiBzcmMvYWxwaGEvZmZpLmMgKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogQWRqdXN0IG1pbmltYWwKKwljaWYtPmJ5dGVzIGZvciBuZXcgZmZpX2NhbGxfb3NmIGltcGxlbWVudGF0aW9uLgorCShmZmlfcHJlcF9hcmdzKTogQWJzb3JiIGludG8gLi4uCisJKGZmaV9jYWxsKTogLi4uIGhlcmUuICBEbyBhbGwgc3RhY2sgYWxsb2NhdGlvbiBoZXJlIGFuZAorCWF2b2lkIGEgY2FsbGJhY2sgZnVuY3Rpb24uCisJKGZmaV9wcmVwX2Nsb3N1cmUsIGZmaV9jbG9zdXJlX29zZl9pbm5lcik6IE5ldy4KKwkqIHNyYy9hbHBoYS9vc2YuUyAoZmZpX2NhbGxfb3NmKTogUmVpbXBsZW1lbnQgd2l0aCBubyBjYWxsYmFjay4KKwkoZmZpX2Nsb3N1cmVfb3NmKTogTmV3LgorCisyMDAwLTA5LTEwICBBbGV4YW5kcmUgT2xpdmEgIDxhb2xpdmFAcmVkaGF0LmNvbT4KKworCSogY29uZmlnLmd1ZXNzLCBjb25maWcuc3ViLCBpbnN0YWxsLXNoOiBSZW1vdmVkLgorCSogbHRjb25maWcsIGx0bWFpbi5zaCwgbWlzc2luZywgbWtpbnN0YWxsZGlyczogTGlrZXdpc2UuCisJKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KKworCSogYWNpbmNsdWRlLm00OiBJbmNsdWRlIGxpYnRvb2wgbWFjcm9zIGZyb20gdGhlIHRvcCBsZXZlbC4KKwkqIGFjbG9jYWwubTQsIGNvbmZpZ3VyZTogUmVidWlsdC4KKworMjAwMC0wOC0yMiAgQWxleGFuZHJlIE9saXZhICA8YW9saXZhQHJlZGhhdC5jb20+CisKKwkqIGNvbmZpZ3VyZS5pbiBbaSo4Ni0qLWZyZWVic2QqXSAoVEFSR0VULCBUQVJHRVRESVIpOiBTZXQuCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisKKzIwMDAtMDUtMTEgIFNjb3R0IEJhbWJyb3VnaCAgPHNjb3R0YkBuZXR3aW5kZXIub3JnPgorCisJKiBsaWJmZmkvc3JjL2FybS9zeXN2LlMgKGZmaV9jYWxsX1NZU1YpOiBEb3VibGVzIGFyZSBub3Qgc2F2ZWQgdG8KKwltZW1vcnkgY29ycmVjdGx5LiAgVXNlIGNvbmRpdGlvbmFsIGluc3RydWN0aW9ucywgbm90IGJyYW5jaGVzIHdoZXJlCisJcG9zc2libGUuCisKKzIwMDAtMDUtMDQgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KKworCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCSogY29uZmlndXJlLmluOiBNYXRjaCBgYXJtKi0qLWxpbnV4LSonLgorCUZyb20gQ2hyaXMgRG9ybmFuIDxjZG9ybmFuQGFybS5jb20+LgorCisyMDAwLTA0LTI4ICBKYWt1YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNvbT4KKworCSogTWFrZWZpbGUuYW0gKFNVQkRJUlMpOiBEZWZpbmUuCisJKEFNX01BS0VGTEFHUyk6IExpa2V3aXNlLgorCShNdWx0aWxpYiBzdXBwb3J0Lik6IEFkZCBzZWN0aW9uLgorCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCisJKiBsdGNvbmZpZyAoZXh0cmFfY29tcGlsZXJfZmxhZ3MsIGV4dHJhX2NvbXBpbGVyX2ZsYWdzX3ZhbHVlKToKKwlOZXcgdmFyaWFibGVzLiBTZXQgZm9yIGdjYyB1c2luZyAtcHJpbnQtbXVsdGktbGliLiBFeHBvcnQgdGhlbQorCXRvIGxpYnRvb2wuCisJKHNwYXJjNjQtKi1saW51eC1nbnUqKTogVXNlIGxpYnN1ZmYgNjQgZm9yIHNlYXJjaCBwYXRocy4KKwkqIGx0bWFpbi5zaCAoQnxifFYpOiBEb24ndCB0aHJvdyBhd2F5IGdjYydzIC1CLCAtYiBhbmQgLVYgb3B0aW9ucworCWZvciAtc2hhcmVkIGxpbmtzLgorCShleHRyYV9jb21waWxlcl9mbGFnc192YWx1ZSwgZXh0cmFfY29tcGlsZXJfZmxhZ3MpOiBDaGVjayB0aGVzZQorCWZvciBleHRyYSBjb21waWxlciBvcHRpb25zIHdoaWNoIG5lZWQgdG8gYmUgcGFzc2VkIGRvd24gaW4KKwljb21waWxlcl9mbGFncy4KKworMjAwMC0wNC0xNiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJlZGhhdC5jb20+CisKKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKwkqIGNvbmZpZ3VyZS5pbjogQ2hhbmdlIGkqODYtcGMtbGludXgqIHRvIGkqODYtKi1saW51eCouCisKKzIwMDAtMDQtMTQgIEpha3ViIEplbGluZWsgIDxqYWt1YkByZWRoYXQuY29tPgorCisJKiBpbmNsdWRlL2ZmaS5oLmluIChTUEFSQzY0KTogRGVmaW5lIGZvciA2NGJpdCBTUEFSQyBidWlsZHMuCisJU2V0IFNQQVJDIEZGSV9ERUZBVUxUX0FCSSBiYXNlZCBvbiBTUEFSQzY0IGRlZmluZS4KKwkqIHNyYy9zcGFyYy9mZmkuYyAoZmZpX3ByZXBfYXJnc192OCk6IFJlbmFtZWQgZnJvbSBmZmlfcHJlcF9hcmdzLgorCVJlcGxhY2UgYWxsIHZvaWQgKiBzaXplb2ZzIHdpdGggc2l6ZW9mKGludCkuCisJT25seSBjb21wYXJlIHR5cGUgd2l0aCBGRklfVFlQRV9MT05HRE9VQkxFIGlmIExPTkdET1VCTEUgaXMKKwlkaWZmZXJlbnQgdGhhbiBET1VCTEUuCisJUmVtb3ZlIEZGSV9UWVBFX1NJTlQzMiBhbmQgRkZJX1RZUEVfVUlOVDMyIGNhc2VzIChoYW5kbGVkIGVsc2V3aGVyZSkuCisJKGZmaV9wcmVwX2FyZ3NfdjkpOiBOZXcgZnVuY3Rpb24uCisJKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogSGFuZGxlIFY5IEFCSSBhbmQgbG9uZyBsb25nIG9uIFY4LgorCShmZmlfVjlfcmV0dXJuX3N0cnVjdCk6IE5ldyBmdW5jdGlvbi4KKwkoZmZpX2NhbGwpOiBIYW5kbGUgRkZJX1Y5IEFCSSBmcm9tIDY0Yml0IGNvZGUgYW5kIEZGSV9WOCBBQkkgZnJvbQorCTMyYml0IGNvZGUgKG5vdCB5ZXQgY3Jvc3MtYXJjaCBjYWxscykuCisJKiBzcmMvc3BhcmMvdjguUzogQWRkIHN0cnVjdCByZXR1cm4gZGVsYXkgbm9wLgorCUhhbmRsZSBsb25nIGxvbmcuCisJKiBzcmMvc3BhcmMvdjkuUzogTmV3IGZpbGUuCisJKiBzcmMvcHJlcF9jaWYuYyAoZmZpX3ByZXBfY2lmKTogUmV0dXJuIHN0cnVjdHVyZSBwb2ludGVyCisJaXMgdXNlZCBvbiBzcGFyYzY0IG9ubHkgZm9yIHN0cnVjdHVyZXMgbGFyZ2VyIHRoYW4gMzIgYnl0ZXMuCisJUGFzcyBieSByZWZlcmVuY2UgZm9yIHN0cnVjdHVyZXMgaXMgZG9uZSBmb3Igc3RydWN0dXJlIGFyZ3VtZW50cworCWxhcmdlciB0aGFuIDE2IGJ5dGVzLgorCSogc3JjL2ZmaXRlc3QuYyAobWFpbik6IFVzZSA2NGJpdCByaW50IG9uIHNwYXJjNjQuCisJUnVuIGxvbmcgbG9uZyB0ZXN0cyBvbiBzcGFyYy4KKwkqIHNyYy90eXBlcy5jIChGRklfVFlQRV9QT0lOVEVSKTogUG9pbnRlciBpcyA2NGJpdCBvbiBhbHBoYSBhbmQKKwlzcGFyYzY0LgorCShGRklfVFlQRV9MT05HRE9VQkxFKTogbG9uZyBkb3VibGUgaXMgMTI4IGJpdCBhbGlnbmVkIHRvIDEyOCBiaXRzCisJb24gc3BhcmM2NC4KKwkqIGNvbmZpZ3VyZS5pbiAoc3BhcmMtKi1saW51eCopOiBOZXcgc3VwcG9ydGVkIHRhcmdldC4KKwkoc3BhcmM2NC0qLWxpbnV4Kik6IExpa2V3aXNlLgorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCSogTWFrZWZpbGUuYW06IEFkZCB2OS5TIHRvIFNQQVJDIGZpbGVzLgorCSogTWFrZWZpbGUuaW46IExpa2V3aXNlLgorCShMSU5LKTogU3Vycm91bmQgJChDQ0xEKSBpbnRvIGRvdWJsZSBxdW90ZXMsIHNvIHRoYXQgbXVsdGlsaWIKKwljb21waWxlcyB3b3JrIGNvcnJlY3RseS4KKworMjAwMC0wNC0wNCAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CisKKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKwkqIGNvbmZpZ3VyZS5pbjogKGkqODYtKi1zb2xhcmlzKik6IE5ldyBsaWJmZmkgdGFyZ2V0LiBQYXRjaAorCXByb3Bvc2VkIGJ5IEJyeWNlIE1jS2lubGF5LgorCisyMDAwLTAzLTIwICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CisKKwkqIE1ha2VmaWxlLmluOiBIYW5kIGVkaXQgZm9yIGphdmFfcmF3X2FwaS5sby4KKworMjAwMC0wMy0wOCAgQnJ5Y2UgTWNLaW5sYXkgIDxicnljZUBhbGJhdHJvc3MuY28ubno+CisKKwkqIGNvbmZpZy5ndWVzcywgY29uZmlnLnN1YjogVXBkYXRlIGZyb20gdGhlIGdjYyB0cmVlLgorCUZpeCBmb3IgUFIgbGliZ2NqLzE2OC4KKworMjAwMC0wMy0wMyAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgorCisJKiBNYWtlZmlsZS5pbjogRml4ZWQgaWE2NCBieSBoYW5kLgorCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisJKiBjb25maWd1cmUuaW4gKC0tZW5hYmxlLW11bHRpbGliKTogTmV3IG9wdGlvbi4KKwkobGliZmZpX2Jhc2VkaXIpOiBOZXcgc3Vic3QuCisJKEFDX09VVFBVVCk6IEFkZGVkIG11bHRpbGliIGNvZGUuCisKKzIwMDAtMDMtMDIgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KKworCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCisJKiBNYWtlZmlsZS5hbSAoVEFSR0VUX1NSQ19JQTY0KTogVXNlIGBpYTY0Jywgbm90IGBhbHBoYScsIGFzCisJZGlyZWN0b3J5IG5hbWUuCisKKzIwMDAtMDItMjUgIEhhbnMgQm9laG0gPGJvZWhtQGFjbS5vcmc+CisKKwkqIHNyYy9pYTY0L2ZmaS5jLCBzcmMvaWE2NC9pYTY0X2ZsYWdzLmgsIHNyYy9pYTY0L3VuaXguUzogTmV3CisJZmlsZXMuCisJKiBzcmMvcmF3X2FwaS5jIChmZmlfdHJhbnNsYXRlX2FyZ3MpOiBGaXhlZCB0eXBvIGluIGFyZ3VtZW50CisJbGlzdC4KKwkoZmZpX3ByZXBfcmF3X2Nsb3N1cmUpOiBVc2UgZmZpX3RyYW5zbGF0ZV9hcmdzLCBub3QKKwlmZmlfY2xvc3VyZV90cmFuc2xhdGUuCisJKiBzcmMvamF2YV9yYXdfYXBpLmM6IE5ldyBmaWxlLgorCSogc3JjL2ZmaXRlc3QuYyAoY2xvc3VyZV90ZXN0X2ZuKTogTmV3IGZ1bmN0aW9uLgorCShtYWluKTogRGVmaW5lIGByaW50JyBhcyBsb25nIGxvbmcgb24gSUE2NC4gIEFkZGVkIG5ldyB0ZXN0IHdoZW4KKwlGRklfQ0xPU1VSRVMgaXMgZGVmaW5lZC4KKwkqIGluY2x1ZGUvZmZpLmguaW4gKEFMSUdOKTogVXNlIHNpemVfdCwgbm90IHVuc2lnbmVkLgorCShmZmlfYWJpKTogUmVjb2duaXplIElBNjQuCisJKGZmaV9yYXcpOiBBZGRlZCBgZmx0JyBmaWVsZC4KKwlBZGRlZCAiSmF2YSByYXcgQVBJIiBjb2RlLgorCSogY29uZmlndXJlLmluOiBSZWNvZ25pemUgaWE2NC4KKwkqIE1ha2VmaWxlLmFtIChUQVJHRVRfU1JDX0lBNjQpOiBOZXcgbWFjcm8uCisJKGxpYmZmaV9sYV9jb21tb25fU09VUkNFUyk6IEFkZGVkIGphdmFfcmF3X2FwaS5jLgorCShsaWJmZmlfbGFfU09VUkNFUyk6IERlZmluZSBpbiBJQTY0IGNhc2UuCisKKzIwMDAtMDEtMDQgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KKworCSogTWFrZWZpbGUuaW46IFJlYnVpbHQgd2l0aCBuZXdlciBhdXRvbWFrZS4KKworMTk5OS0xMi0zMSAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgorCisJKiBNYWtlZmlsZS5hbSAoSU5DTFVERVMpOiBBZGRlZCAtSSQodG9wX3NyY2Rpcikvc3JjLgorCisxOTk5LTA5LTAxICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CisKKwkqIGluY2x1ZGUvZmZpLmguaW46IFJlbW92ZWQgUEFDS0FHRSBhbmQgVkVSU0lPTiBkZWZpbmVzIGFuZAorCXVuZGVmcy4KKwkqIGZmaWNvbmZpZy5oLmluOiBSZWJ1aWx0LgorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCSogY29uZmlndXJlLmluOiBQYXNzIDNyZCBhcmd1bWVudCB0byBBTV9JTklUX0FVVE9NQUtFLgorCVVzZSBBTV9QUk9HX0xJQlRPT0wgKGF1dG9tYWtlIDEuNCBjb21wYXRpYmlsaXR5KS4KKwkqIGFjY29uZmlnLmg6IERvbid0ICN1bmRlZiBQQUNLQUdFIG9yIFZFUlNJT04uCisKKzE5OTktMDgtMDkgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBjeWdudXMuY29tPgorCisJKiBpbmNsdWRlL2ZmaS5oLmluOiBUcnkgdG8gd29yayBhcm91bmQgbWVzc3kgaGVhZGVyIHByb2JsZW0KKwl3aXRoIFBBQ0tBR0UgYW5kIFZFUlNJT04uCisKKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKwkqIGNvbmZpZ3VyZS5pbjogQ2hhbmdlIHZlcnNpb24gdG8gMi4wMC1iZXRhLgorCisJKiBmZmljb25maWcuaC5pbjogUmVidWlsdC4KKwkqIGFjY29uZmlnLmggKEZGSV9OT19TVFJVQ1RTLCBGRklfTk9fUkFXX0FQSSk6IERlZmluZS4KKworCSogc3JjL3g4Ni9mZmkuYyAoZmZpX3Jhd19jYWxsKTogUmVuYW1lLgorCisxOTk5LTA4LTAyICBLcmVzdGVuIEtyYWIgVGhvcnVwICA8a3JhYkBkb21pbmlxLmlzLnMudS10b2t5by5hYy5qcD4KKworCSogc3JjL3g4Ni9mZmkuYyAoZmZpX2Nsb3N1cmVfU1lTVik6IE5ldyBmdW5jdGlvbi4KKwkoZmZpX3ByZXBfaW5jb21pbmdfYXJnc19TWVNWKTogRGl0dG8uCisJKGZmaV9wcmVwX2Nsb3N1cmUpOiBEaXR0by4KKwkoZmZpX2Nsb3N1cmVfcmF3X1NZU1YpOiBEaXR0by4KKwkoZmZpX3ByZXBfcmF3X2Nsb3N1cmUpOiBNb3JlIGRpdHRvLgorCShmZmlfY2FsbF9yYXcpOiBGaW5hbCBkaXR0by4KKworCSogaW5jbHVkZS9mZmkuaC5pbjogQWRkIGRlZmluaXRpb25zIGZvciBjbG9zdXJlIGFuZCByYXcgQVBJLgorCisJKiBzcmMveDg2L2ZmaS5jIChmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IEFkZGVkIGNhc2UgZm9yCisJRkZJX1RZUEVfVUlOVDY0LgorCisJKiBNYWtlZmlsZS5hbSAobGliZmZpX2xhX2NvbW1vbl9TT1VSQ0VTKTogQWRkZWQgcmF3X2FwaS5jCisKKwkqIHNyYy9yYXdfYXBpLmM6IE5ldyBmaWxlLgorCisJKiBpbmNsdWRlL2ZmaS5oLmluIChmZmlfcmF3KTogTmV3IHR5cGUuCisJKFVJTlRfQVJHLCBTSU5UX0FSRyk6IE5ldyBkZWZpbmVzLgorCShmZmlfY2xvc3VyZSwgZmZpX3Jhd19jbG9zdXJlKTogTmV3IHR5cGVzLgorCShmZmlfcHJlcF9jbG9zdXJlLCBmZmlfcHJlcF9yYXdfY2xvc3VyZSk6IE5ldyBkZWNsYXJhdGlvbnMuCisKKwkqIGNvbmZpZ3VyZS5pbjogQWRkIGNoZWNrIGZvciBlbmRpYW5uZXNzIGFuZCBzaXplb2Ygdm9pZCouCisKKwkqIHNyYy94ODYvc3lzdi5TIChmZmlfY2FsbF9TWVNWKTogQ2FsbCBmaXh1cCByb3V0aW5lIHZpYSBhcmd1bWVudCwKKwlpbnN0ZWFkIG9mIGRpcmVjdGx5LgorCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisKK1RodSBKdWwgIDggMTQ6Mjg6NDIgMTk5OSAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQGN5Z251cy5jb20+CisKKwkqIGNvbmZpZ3VyZS5pbjogQWRkIHg4NiBhbmQgcG93ZXJwYyBCZU9TIGNvbmZpZ3VyYXRpb25zLgorCUZyb20gTWFrb3RvIEthdG8gPG1fa2F0b0BnYTIuc28tbmV0Lm5lLmpwPi4KKworMTk5OS0wNS0wOSAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQGN5Z251cy5jb20+CisKKwkqIGNvbmZpZ3VyZS5pbjogQWRkIHdhcm5pbmcgYWJvdXQgdGhpcyBiZWluZyBiZXRhIGNvZGUuCisJUmVtb3ZlIHNyYy9NYWtlZmlsZS5hbSBmcm9tIHRoZSBwaWN0dXJlLgorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCisJKiBNYWtlZmlsZS5hbTogTW92ZSBsb2dpYyBmcm9tIHNyYy9NYWtlZmlsZS5hbS4gIEFkZCBjaGFuZ2VzCisJdG8gc3VwcG9ydCBsaWJmZmkgYXMgYSB0YXJnZXQgbGlicmFyeS4KKwkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgorCisJKiBhY2xvY2FsLm00LCBjb25maWcuZ3Vlc3MsIGNvbmZpZy5zdWIsIGx0Y29uZmlnLCBsdG1haW4uc2g6CisJVXBncmFkZWQgdG8gbmV3IGF1dG9jb25mLCBhdXRvbWFrZSwgbGlidG9vbC4KKworCSogUkVBRE1FOiBUd2Vha3MuCisKKwkqIExJQ0VOU0U6IFVwZGF0ZSBjb3B5cmlnaHQgZGF0ZS4KKworCSogc3JjL01ha2VmaWxlLmFtLCBzcmMvTWFrZWZpbGUuaW46IFJlbW92ZWQuCisKKzE5OTgtMTEtMjkgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBjeWdudXMuY29tPgorCisJKiBpbmNsdWRlL0NoYW5nZUxvZzogUmVtb3ZlZC4KKwkqIHNyYy9DaGFuZ2VMb2c6IFJlbW92ZWQuCisJKiBzcmMvbWlwcy9DaGFuZ2VMb2c6IFJlbW92ZWQuCisJKiBzcmMvc3BhcmMvQ2hhbmdlTG9nOiBSZW1ib3ZlZC4KKwkqIHNyYy94ODYvQ2hhbmdlTG9nOiBSZW1vdmVkLgorCisJKiBDaGFuZ2VMb2cudjE6IENyZWF0ZWQuCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL0NoYW5nZUxvZy52MSBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvQ2hhbmdlTG9nLnYxCmluZGV4IDM2OTgyMGMuLmFmM2EzNzcgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvQ2hhbmdlTG9nLnYxCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvQ2hhbmdlTG9nLnYxCkBAIC0yLDcgKzIsNyBAQAogCiBWZXJzaW9uIDEgb2YgbGliZmZpIGhhZCBwZXItZGlyZWN0b3J5IENoYW5nZUxvZ3MuICBDdXJyZW50IGFuZCBmdXR1cmUKIHZlcnNpb25zIGhhdmUgYSBzaW5nbGUgQ2hhbmdlTG9nIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5LiAgVGhlCi12ZXJzaW9uIDEgQ2hhbmdlTG9ncyBoYXZlIGFsbCBiZWVuIGNvbmNhdG9uYXRlZCBpbnRvIHRoaXMgZmlsZSBmb3IKK3ZlcnNpb24gMSBDaGFuZ2VMb2dzIGhhdmUgYWxsIGJlZW4gY29uY2F0ZW5hdGVkIGludG8gdGhpcyBmaWxlIGZvcgogZnV0dXJlIHJlZmVyZW5jZSBvbmx5LgogCiAtLS0gbGliZmZpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvTElDRU5TRSBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvTElDRU5TRQppbmRleCBhYTYwMzQyLi5hNjZmYWI0IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL0xJQ0VOU0UKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9MSUNFTlNFCkBAIC0xLDQgKzEsNCBAQAotbGliZmZpIC0gQ29weXJpZ2h0IChjKSAxOTk2LTIwMTIgIEFudGhvbnkgR3JlZW4sIFJlZCBIYXQsIEluYyBhbmQgb3RoZXJzLgorbGliZmZpIC0gQ29weXJpZ2h0IChjKSAxOTk2LTIwMTQgIEFudGhvbnkgR3JlZW4sIFJlZCBIYXQsIEluYyBhbmQgb3RoZXJzLgogU2VlIHNvdXJjZSBmaWxlcyBmb3IgZGV0YWlscy4KIAogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL01ha2VmaWxlLmFtIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9NYWtlZmlsZS5hbQppbmRleCBiZjAxNTZmLi4xZGNkYzgxIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL01ha2VmaWxlLmFtCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvTWFrZWZpbGUuYW0KQEAgLTYsMTAgKzYsMTEgQEAKIAogU1VCRElSUyA9IGluY2x1ZGUgdGVzdHN1aXRlIG1hbgogCi1FWFRSQV9ESVNUID0gTElDRU5TRSBDaGFuZ2VMb2cudjEgQ2hhbmdlTG9nLmxpYmdjaiBjb25maWd1cmUuaG9zdAlcCitFWFRSQV9ESVNUID0gTElDRU5TRSBDaGFuZ2VMb2cudjEgQ2hhbmdlTG9nLmxpYmdjagkJCVwKIAkgc3JjL2FhcmNoNjQvZmZpLmMgc3JjL2FhcmNoNjQvZmZpdGFyZ2V0Lmggc3JjL2FhcmNoNjQvc3lzdi5TCVwKLQkgYnVpbGQtaW9zLnNoIHNyYy9hbHBoYS9mZmkuYyBzcmMvYWxwaGEvb3NmLlMJCQlcCi0JIHNyYy9hbHBoYS9mZml0YXJnZXQuaCBzcmMvYXJtL2ZmaS5jIHNyYy9hcm0vc3lzdi5TCQlcCisJIHNyYy9hbHBoYS9mZmkuYyBzcmMvYWxwaGEvb3NmLlMJCQlcCisJIHNyYy9hbHBoYS9mZml0YXJnZXQuaCBzcmMvYXJjL2ZmaS5jIHNyYy9hcmMvYXJjb21wYWN0LlMJXAorCSBzcmMvYXJjL2ZmaXRhcmdldC5oIHNyYy9hcm0vZmZpLmMgc3JjL2FybS9zeXN2LlMJCVwKIAkgc3JjL2FybS9mZml0YXJnZXQuaCBzcmMvYXZyMzIvZmZpLmMgc3JjL2F2cjMyL3N5c3YuUwkJXAogCSBzcmMvYXZyMzIvZmZpdGFyZ2V0Lmggc3JjL2NyaXMvZmZpLmMgc3JjL2NyaXMvc3lzdi5TCQlcCiAJIHNyYy9jcmlzL2ZmaXRhcmdldC5oIHNyYy9pYTY0L2ZmaS5jIHNyYy9pYTY0L2ZmaXRhcmdldC5oCVwKQEAgLTE5LDggKzIwLDEyIEBACiAJIHNyYy9tb3hpZS9mZml0YXJnZXQuaCBzcmMvbW94aWUvZWFiaS5TIHNyYy9taXBzL2ZmaXRhcmdldC5oCVwKIAkgc3JjL20zMnIvZmZpLmMgc3JjL20zMnIvc3lzdi5TIHNyYy9tMzJyL2ZmaXRhcmdldC5oCQlcCiAJIHNyYy9tNjhrL2ZmaS5jIHNyYy9tNjhrL3N5c3YuUyBzcmMvbTY4ay9mZml0YXJnZXQuaAkJXAorCSBzcmMvbTg4ay9mZmkuYyBzcmMvbTg4ay9vYnNkLlMgc3JjL204OGsvZmZpdGFyZ2V0LmgJCVwKIAkgc3JjL21pY3JvYmxhemUvZmZpLmMgc3JjL21pY3JvYmxhemUvc3lzdi5TCQkJXAotCSBzcmMvbWljcm9ibGF6ZS9mZml0YXJnZXQuaCBzcmMvcG93ZXJwYy9mZmkuYwkJCVwKKwkgc3JjL21pY3JvYmxhemUvZmZpdGFyZ2V0LmgJCQkJCVwKKwkgc3JjL25pb3MyL2ZmaS5jIHNyYy9uaW9zMi9mZml0YXJnZXQuaCBzcmMvbmlvczIvc3lzdi5TCQlcCisJIHNyYy9wb3dlcnBjL2ZmaS5jIHNyYy9wb3dlcnBjL2ZmaV9wb3dlcnBjLmgJCQlcCisJIHNyYy9wb3dlcnBjL2ZmaV9zeXN2LmMgc3JjL3Bvd2VycGMvZmZpX2xpbnV4NjQuYwkJXAogCSBzcmMvcG93ZXJwYy9zeXN2LlMgc3JjL3Bvd2VycGMvbGludXg2NC5TCQkJXAogCSBzcmMvcG93ZXJwYy9saW51eDY0X2Nsb3N1cmUuUyBzcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TCVwKIAkgc3JjL3Bvd2VycGMvYXNtLmggc3JjL3Bvd2VycGMvYWl4LlMgc3JjL3Bvd2VycGMvZGFyd2luLlMJXApAQCAtMzgsMTQgKzQzLDE0IEBACiAJIHNyYy9iZmluL2ZmaXRhcmdldC5oIHNyYy9iZmluL3N5c3YuUyBzcmMvZnJ2L2VhYmkuUwkJXAogCSBzcmMvZnJ2L2ZmaXRhcmdldC5oIHNyYy9kbG1hbGxvYy5jIHNyYy90aWxlL2ZmaS5jCQlcCiAJIHNyYy90aWxlL2ZmaXRhcmdldC5oIHNyYy90aWxlL3RpbGUuUyBsaWJ0b29sLXZlcnNpb24JCVwKKwkgc3JjL3ZheC9mZmkuYyBzcmMvdmF4L2ZmaXRhcmdldC5oIHNyYy92YXgvZWxmYnNkLlMJCVwKIAkgc3JjL3h0ZW5zYS9mZml0YXJnZXQuaCBzcmMveHRlbnNhL2ZmaS5jIHNyYy94dGVuc2Evc3lzdi5TCVwKIAkgQ2hhbmdlTG9nLmxpYmZmaSBtNC9saWJ0b29sLm00IG00L2x0fm9ic29sZXRlLm00CQlcCiAJIG00L2x0b3B0aW9ucy5tNCBtNC9sdHN1Z2FyLm00IG00L2x0dmVyc2lvbi5tNAkJCVwKIAkgbTQvbHR2ZXJzaW9uLm00IHNyYy9hcm0vZ2VudHJhbXAuc2ggc3JjL2RlYnVnLmMgbXN2Y2Muc2gJXAotCSBnZW5lcmF0ZS1pb3Mtc291cmNlLWFuZC1oZWFkZXJzLnB5CQkJCVwKLQkgZ2VuZXJhdGUtb3N4LXNvdXJjZS1hbmQtaGVhZGVycy5weQkJCQlcCisJIGdlbmVyYXRlLWRhcndpbi1zb3VyY2UtYW5kLWhlYWRlcnMucHkJCQkJXAogCSBsaWJmZmkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBzcmMvYXJtL3RyYW1wb2xpbmUuUwkJXAotCSBsaWJ0b29sLWxkZmxhZ3MKKwkgbGlidG9vbC1sZGZsYWdzIENoYW5nZUxvZy5saWJmZmktMy4xCiAKIGluZm9fVEVYSU5GT1MgPSBkb2MvbGliZmZpLnRleGkKIApAQCAtNTksMzkgKzY0LDM5IEBACiAjIHZhbHVlcyBkZWZpbmVkIGluIHRlcm1zIG9mIG1ha2UgdmFyaWFibGVzLCBhcyBpcyB0aGUgY2FzZSBmb3IgQ0MgYW5kCiAjIGZyaWVuZHMgd2hlbiB3ZSBhcmUgY2FsbGVkIGZyb20gdGhlIHRvcCBsZXZlbCBNYWtlZmlsZS4KIEFNX01BS0VGTEFHUyA9IFwKLQkiQVJfRkxBR1M9JChBUl9GTEFHUykiIFwKLQkiQ0NfRk9SX0JVSUxEPSQoQ0NfRk9SX0JVSUxEKSIgXAotCSJDRkxBR1M9JChDRkxBR1MpIiBcCi0JIkNYWEZMQUdTPSQoQ1hYRkxBR1MpIiBcCi0JIkNGTEFHU19GT1JfQlVJTEQ9JChDRkxBR1NfRk9SX0JVSUxEKSIgXAotCSJDRkxBR1NfRk9SX1RBUkdFVD0kKENGTEFHU19GT1JfVEFSR0VUKSIgXAotCSJJTlNUQUxMPSQoSU5TVEFMTCkiIFwKLQkiSU5TVEFMTF9EQVRBPSQoSU5TVEFMTF9EQVRBKSIgXAotCSJJTlNUQUxMX1BST0dSQU09JChJTlNUQUxMX1BST0dSQU0pIiBcCi0JIklOU1RBTExfU0NSSVBUPSQoSU5TVEFMTF9TQ1JJUFQpIiBcCi0JIkpDMUZMQUdTPSQoSkMxRkxBR1MpIiBcCi0JIkxERkxBR1M9JChMREZMQUdTKSIgXAotCSJMSUJDRkxBR1M9JChMSUJDRkxBR1MpIiBcCi0JIkxJQkNGTEFHU19GT1JfVEFSR0VUPSQoTElCQ0ZMQUdTX0ZPUl9UQVJHRVQpIiBcCi0JIk1BS0U9JChNQUtFKSIgXAotCSJNQUtFSU5GTz0kKE1BS0VJTkZPKSAkKE1BS0VJTkZPRkxBR1MpIiBcCi0JIlBJQ0ZMQUc9JChQSUNGTEFHKSIgXAotCSJQSUNGTEFHX0ZPUl9UQVJHRVQ9JChQSUNGTEFHX0ZPUl9UQVJHRVQpIiBcCi0JIlJVTlRFU1RGTEFHUz0kKFJVTlRFU1RGTEFHUykiIFwKLQkiU0hFTEw9JChTSEVMTCkiIFwKLQkiZXhlY19wcmVmaXg9JChleGVjX3ByZWZpeCkiIFwKLQkiaW5mb2Rpcj0kKGluZm9kaXIpIiBcCi0JImxpYmRpcj0kKGxpYmRpcikiIFwKLQkibWFuZGlyPSQobWFuZGlyKSIgXAotCSJwcmVmaXg9JChwcmVmaXgpIiBcCi0JIkFSPSQoQVIpIiBcCi0JIkFTPSQoQVMpIiBcCi0JIkNDPSQoQ0MpIiBcCi0JIkNYWD0kKENYWCkiIFwKLQkiTEQ9JChMRCkiIFwKLQkiTk09JChOTSkiIFwKLQkiUkFOTElCPSQoUkFOTElCKSIgXAotCSJERVNURElSPSQoREVTVERJUikiCisJJ0FSX0ZMQUdTPSQoQVJfRkxBR1MpJyBcCisJJ0NDX0ZPUl9CVUlMRD0kKENDX0ZPUl9CVUlMRCknIFwKKwknQ0ZMQUdTPSQoQ0ZMQUdTKScgXAorCSdDWFhGTEFHUz0kKENYWEZMQUdTKScgXAorCSdDRkxBR1NfRk9SX0JVSUxEPSQoQ0ZMQUdTX0ZPUl9CVUlMRCknIFwKKwknQ0ZMQUdTX0ZPUl9UQVJHRVQ9JChDRkxBR1NfRk9SX1RBUkdFVCknIFwKKwknSU5TVEFMTD0kKElOU1RBTEwpJyBcCisJJ0lOU1RBTExfREFUQT0kKElOU1RBTExfREFUQSknIFwKKwknSU5TVEFMTF9QUk9HUkFNPSQoSU5TVEFMTF9QUk9HUkFNKScgXAorCSdJTlNUQUxMX1NDUklQVD0kKElOU1RBTExfU0NSSVBUKScgXAorCSdKQzFGTEFHUz0kKEpDMUZMQUdTKScgXAorCSdMREZMQUdTPSQoTERGTEFHUyknIFwKKwknTElCQ0ZMQUdTPSQoTElCQ0ZMQUdTKScgXAorCSdMSUJDRkxBR1NfRk9SX1RBUkdFVD0kKExJQkNGTEFHU19GT1JfVEFSR0VUKScgXAorCSdNQUtFPSQoTUFLRSknIFwKKwknTUFLRUlORk89JChNQUtFSU5GTykgJChNQUtFSU5GT0ZMQUdTKScgXAorCSdQSUNGTEFHPSQoUElDRkxBRyknIFwKKwknUElDRkxBR19GT1JfVEFSR0VUPSQoUElDRkxBR19GT1JfVEFSR0VUKScgXAorCSdSVU5URVNURkxBR1M9JChSVU5URVNURkxBR1MpJyBcCisJJ1NIRUxMPSQoU0hFTEwpJyBcCisJJ2V4ZWNfcHJlZml4PSQoZXhlY19wcmVmaXgpJyBcCisJJ2luZm9kaXI9JChpbmZvZGlyKScgXAorCSdsaWJkaXI9JChsaWJkaXIpJyBcCisJJ21hbmRpcj0kKG1hbmRpciknIFwKKwkncHJlZml4PSQocHJlZml4KScgXAorCSdBUj0kKEFSKScgXAorCSdBUz0kKEFTKScgXAorCSdDQz0kKENDKScgXAorCSdDWFg9JChDWFgpJyBcCisJJ0xEPSQoTEQpJyBcCisJJ05NPSQoTk0pJyBcCisJJ1JBTkxJQj0kKFJBTkxJQiknIFwKKwknREVTVERJUj0kKERFU1RESVIpJwogCiAjIFN1YmRpciBydWxlcyByZWx5IG9uICQoRkxBR1NfVE9fUEFTUykKIEZMQUdTX1RPX1BBU1MgPSAkKEFNX01BS0VGTEFHUykKQEAgLTEyMCwxMCArMTI1LDEwIEBACiBub2Rpc3RfbGliZmZpX2xhX1NPVVJDRVMgKz0gc3JjL2JmaW4vZmZpLmMgc3JjL2JmaW4vc3lzdi5TCiBlbmRpZgogaWYgWDg2Ci1ub2Rpc3RfbGliZmZpX2xhX1NPVVJDRVMgKz0gc3JjL3g4Ni9mZmkuYyBzcmMveDg2L3N5c3YuUworbm9kaXN0X2xpYmZmaV9sYV9TT1VSQ0VTICs9IHNyYy94ODYvZmZpLmMgc3JjL3g4Ni9zeXN2LlMgc3JjL3g4Ni93aW4zMi5TCiBlbmRpZgogaWYgWDg2X0ZSRUVCU0QKLW5vZGlzdF9saWJmZmlfbGFfU09VUkNFUyArPSBzcmMveDg2L2ZmaS5jIHNyYy94ODYvZnJlZWJzZC5TCitub2Rpc3RfbGliZmZpX2xhX1NPVVJDRVMgKz0gc3JjL3g4Ni9mZmkuYyBzcmMveDg2L2ZyZWVic2QuUyBzcmMveDg2L3dpbjMyLlMKIGVuZGlmCiBpZiBYODZfV0lOMzIKIG5vZGlzdF9saWJmZmlfbGFfU09VUkNFUyArPSBzcmMveDg2L2ZmaS5jIHNyYy94ODYvd2luMzIuUwpAQCAtMTMzLDYgKzEzOCw5IEBACiBlbmRpZgogaWYgWDg2X0RBUldJTgogbm9kaXN0X2xpYmZmaV9sYV9TT1VSQ0VTICs9IHNyYy94ODYvZmZpLmMgc3JjL3g4Ni9kYXJ3aW4uUyBzcmMveDg2L2ZmaTY0LmMgc3JjL3g4Ni9kYXJ3aW42NC5TCitpZiBYODZfREFSV0lOMzIKK25vZGlzdF9saWJmZmlfbGFfU09VUkNFUyArPSBzcmMveDg2L3dpbjMyLlMKK2VuZGlmCiBlbmRpZgogaWYgU1BBUkMKIG5vZGlzdF9saWJmZmlfbGFfU09VUkNFUyArPSBzcmMvc3BhcmMvZmZpLmMgc3JjL3NwYXJjL3Y4LlMgc3JjL3NwYXJjL3Y5LlMKQEAgLTE0OSwxNCArMTU3LDIwIEBACiBpZiBNNjhLCiBub2Rpc3RfbGliZmZpX2xhX1NPVVJDRVMgKz0gc3JjL202OGsvZmZpLmMgc3JjL202OGsvc3lzdi5TCiBlbmRpZgoraWYgTTg4Sworbm9kaXN0X2xpYmZmaV9sYV9TT1VSQ0VTICs9IHNyYy9tODhrL2ZmaS5jIHNyYy9tODhrL29ic2QuUworZW5kaWYKIGlmIE1PWElFCiBub2Rpc3RfbGliZmZpX2xhX1NPVVJDRVMgKz0gc3JjL21veGllL2ZmaS5jIHNyYy9tb3hpZS9lYWJpLlMKIGVuZGlmCiBpZiBNSUNST0JMQVpFCiBub2Rpc3RfbGliZmZpX2xhX1NPVVJDRVMgKz0gc3JjL21pY3JvYmxhemUvZmZpLmMgc3JjL21pY3JvYmxhemUvc3lzdi5TCiBlbmRpZgoraWYgTklPUzIKK25vZGlzdF9saWJmZmlfbGFfU09VUkNFUyArPSBzcmMvbmlvczIvc3lzdi5TIHNyYy9uaW9zMi9mZmkuYworZW5kaWYKIGlmIFBPV0VSUEMKLW5vZGlzdF9saWJmZmlfbGFfU09VUkNFUyArPSBzcmMvcG93ZXJwYy9mZmkuYyBzcmMvcG93ZXJwYy9zeXN2LlMgc3JjL3Bvd2VycGMvcHBjX2Nsb3N1cmUuUyBzcmMvcG93ZXJwYy9saW51eDY0LlMgc3JjL3Bvd2VycGMvbGludXg2NF9jbG9zdXJlLlMKK25vZGlzdF9saWJmZmlfbGFfU09VUkNFUyArPSBzcmMvcG93ZXJwYy9mZmkuYyBzcmMvcG93ZXJwYy9mZmlfc3lzdi5jIHNyYy9wb3dlcnBjL2ZmaV9saW51eDY0LmMgc3JjL3Bvd2VycGMvc3lzdi5TIHNyYy9wb3dlcnBjL3BwY19jbG9zdXJlLlMgc3JjL3Bvd2VycGMvbGludXg2NC5TIHNyYy9wb3dlcnBjL2xpbnV4NjRfY2xvc3VyZS5TCiBlbmRpZgogaWYgUE9XRVJQQ19BSVgKIG5vZGlzdF9saWJmZmlfbGFfU09VUkNFUyArPSBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmMgc3JjL3Bvd2VycGMvYWl4LlMgc3JjL3Bvd2VycGMvYWl4X2Nsb3N1cmUuUwpAQCAtMTY1LDExICsxNzksMTQgQEAKIG5vZGlzdF9saWJmZmlfbGFfU09VUkNFUyArPSBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmMgc3JjL3Bvd2VycGMvZGFyd2luLlMgc3JjL3Bvd2VycGMvZGFyd2luX2Nsb3N1cmUuUwogZW5kaWYKIGlmIFBPV0VSUENfRlJFRUJTRAotbm9kaXN0X2xpYmZmaV9sYV9TT1VSQ0VTICs9IHNyYy9wb3dlcnBjL2ZmaS5jIHNyYy9wb3dlcnBjL3N5c3YuUyBzcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TCitub2Rpc3RfbGliZmZpX2xhX1NPVVJDRVMgKz0gc3JjL3Bvd2VycGMvZmZpLmMgc3JjL3Bvd2VycGMvZmZpX3N5c3YuYyBzcmMvcG93ZXJwYy9zeXN2LlMgc3JjL3Bvd2VycGMvcHBjX2Nsb3N1cmUuUwogZW5kaWYKIGlmIEFBUkNINjQKIG5vZGlzdF9saWJmZmlfbGFfU09VUkNFUyArPSBzcmMvYWFyY2g2NC9zeXN2LlMgc3JjL2FhcmNoNjQvZmZpLmMKIGVuZGlmCitpZiBBUkMKK25vZGlzdF9saWJmZmlfbGFfU09VUkNFUyArPSBzcmMvYXJjL2FyY29tcGFjdC5TIHNyYy9hcmMvZmZpLmMKK2VuZGlmCiBpZiBBUk0KIG5vZGlzdF9saWJmZmlfbGFfU09VUkNFUyArPSBzcmMvYXJtL3N5c3YuUyBzcmMvYXJtL2ZmaS5jCiBpZiBGRklfRVhFQ19UUkFNUE9MSU5FX1RBQkxFCkBAIC0yMTIsMTQgKzIyOSwyNiBAQAogaWYgTUVUQUcKIG5vZGlzdF9saWJmZmlfbGFfU09VUkNFUyArPSBzcmMvbWV0YWcvc3lzdi5TIHNyYy9tZXRhZy9mZmkuYwogZW5kaWYKK2lmIFZBWAorbm9kaXN0X2xpYmZmaV9sYV9TT1VSQ0VTICs9IHNyYy92YXgvZWxmYnNkLlMgc3JjL3ZheC9mZmkuYworZW5kaWYKIAogbGliZmZpX2NvbnZlbmllbmNlX2xhX1NPVVJDRVMgPSAkKGxpYmZmaV9sYV9TT1VSQ0VTKQogbm9kaXN0X2xpYmZmaV9jb252ZW5pZW5jZV9sYV9TT1VSQ0VTID0gJChub2Rpc3RfbGliZmZpX2xhX1NPVVJDRVMpCiAKIExUTERGTEFHUyA9ICQoc2hlbGwgJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9saWJ0b29sLWxkZmxhZ3MgJChMREZMQUdTKSkKIAorQU1fQ0ZMQUdTID0KK2lmIEZGSV9ERUJVRworIyBCdWlsZCBkZWJ1Zy4gRGVmaW5lIEZGSV9ERUJVRyBvbiB0aGUgY29tbWFuZGxpbmUgc28gdGhhdCwgd2hlbiBidWlsZGluZyB3aXRoCisjIE1TVkMsIGl0IGNhbiBsaW5rIGFnYWluc3QgdGhlIGRlYnVnIENSVC4KK0FNX0NGTEFHUyArPSAtREZGSV9ERUJVRworZW5kaWYKKwogbGliZmZpX2xhX0xERkxBR1MgPSAtbm8tdW5kZWZpbmVkIC12ZXJzaW9uLWluZm8gYGdyZXAgLXYgJ15cIycgJChzcmNkaXIpL2xpYnRvb2wtdmVyc2lvbmAgJChMVExERkxBR1MpICQoQU1fTFRMREZMQUdTKQogCiBBTV9DUFBGTEFHUyA9IC1JLiAtSSQodG9wX3NyY2RpcikvaW5jbHVkZSAtSWluY2x1ZGUgLUkkKHRvcF9zcmNkaXIpL3NyYwogQU1fQ0NBU0ZMQUdTID0gJChBTV9DUFBGTEFHUykKIAorZGlzdC1ob29rOgorCWlmIFsgLWQgJCh0b3Bfc3JjZGlyKS8uZ2l0IF0gOyB0aGVuIChjZCAkKHRvcF9zcmNkaXIpOyBnaXQgbG9nIC0tbm8tZGVjb3JhdGUpIDsgZWxzZSBlY2hvICdTZWUgZ2l0IGxvZyBmb3IgaGlzdG9yeS4nIDsgZmkgPiAkKGRpc3RkaXIpL0NoYW5nZUxvZwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9NYWtlZmlsZS5pbiBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvTWFrZWZpbGUuaW4KaW5kZXggNGI2YWJlNS4uNGE1N2FiZCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9NYWtlZmlsZS5pbgorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL01ha2VmaWxlLmluCkBAIC0xLDcgKzEsNyBAQAotIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xMi4yIGZyb20gTWFrZWZpbGUuYW0uCisjIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjEzLjQgZnJvbSBNYWtlZmlsZS5hbS4KICMgQGNvbmZpZ3VyZV9pbnB1dEAKIAotIyBDb3B5cmlnaHQgKEMpIDE5OTQtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgQ29weXJpZ2h0IChDKSAxOTk0LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAKICMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCiAjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCkBAIC0xNiwyMyArMTYsNTEgQEAKIAogCiBWUEFUSCA9IEBzcmNkaXJACi1hbV9fbWFrZV9kcnlydW4gPSBcCi0gIHsgXAotICAgIGFtX19kcnk9bm87IFwKK2FtX19pc19nbnVfbWFrZSA9IHRlc3QgLW4gJyQoTUFLRUZJTEVfTElTVCknICYmIHRlc3QgLW4gJyQoTUFLRUxFVkVMKScKK2FtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24gPSBcCisgIGNhc2UgJCR7dGFyZ2V0X29wdGlvbi19IGluIFwKKyAgICAgID8pIDs7IFwKKyAgICAgICopIGVjaG8gImFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb246IGludGVybmFsIGVycm9yOiBpbnZhbGlkIiBcCisgICAgICAgICAgICAgICJ0YXJnZXQgb3B0aW9uICckJHt0YXJnZXRfb3B0aW9uLX0nIHNwZWNpZmllZCIgPiYyOyBcCisgICAgICAgICBleGl0IDE7OyBcCisgIGVzYWM7IFwKKyAgaGFzX29wdD1ubzsgXAorICBzYW5lX21ha2VmbGFncz0kJE1BS0VGTEFHUzsgXAorICBpZiAkKGFtX19pc19nbnVfbWFrZSk7IHRoZW4gXAorICAgIHNhbmVfbWFrZWZsYWdzPSQkTUZMQUdTOyBcCisgIGVsc2UgXAogICAgIGNhc2UgJCRNQUtFRkxBR1MgaW4gXAogICAgICAgKlxcW1wgXAldKikgXAotICAgICAgICBlY2hvICdhbS0tZWNobzogOyBAZWNobyAiQU0iICBPSycgfCAkKE1BS0UpIC1mIC0gMj4vZGV2L251bGwgXAotICAgICAgICAgIHwgZ3JlcCAnXkFNIE9LJCQnID4vZGV2L251bGwgfHwgYW1fX2RyeT15ZXM7OyBcCi0gICAgICAqKSBcCi0gICAgICAgIGZvciBhbV9fZmxnIGluICQkTUFLRUZMQUdTOyBkbyBcCi0gICAgICAgICAgY2FzZSAkJGFtX19mbGcgaW4gXAotICAgICAgICAgICAgKj0qfC0tKikgOzsgXAotICAgICAgICAgICAgKm4qKSBhbV9fZHJ5PXllczsgYnJlYWs7OyBcCi0gICAgICAgICAgZXNhYzsgXAotICAgICAgICBkb25lOzsgXAorICAgICAgICBicz1cXDsgXAorICAgICAgICBzYW5lX21ha2VmbGFncz1gcHJpbnRmICclc1xuJyAiJCRNQUtFRkxBR1MiIFwKKyAgICAgICAgICB8IHNlZCAicy8kJGJzJCRic1skJGJzICQkYnMJXSovL2ciYDs7IFwKICAgICBlc2FjOyBcCi0gICAgdGVzdCAkJGFtX19kcnkgPSB5ZXM7IFwKLSAgfQorICBmaTsgXAorICBza2lwX25leHQ9bm87IFwKKyAgc3RyaXBfdHJhaWxvcHQgKCkgXAorICB7IFwKKyAgICBmbGc9YHByaW50ZiAnJXNcbicgIiQkZmxnIiB8IHNlZCAicy8kJDEuKiQkLy8iYDsgXAorICB9OyBcCisgIGZvciBmbGcgaW4gJCRzYW5lX21ha2VmbGFnczsgZG8gXAorICAgIHRlc3QgJCRza2lwX25leHQgPSB5ZXMgJiYgeyBza2lwX25leHQ9bm87IGNvbnRpbnVlOyB9OyBcCisgICAgY2FzZSAkJGZsZyBpbiBcCisgICAgICAqPSp8LS0qKSBjb250aW51ZTs7IFwKKyAgICAgICAgLSpJKSBzdHJpcF90cmFpbG9wdCAnSSc7IHNraXBfbmV4dD15ZXM7OyBcCisgICAgICAtKkk/Kikgc3RyaXBfdHJhaWxvcHQgJ0knOzsgXAorICAgICAgICAtKk8pIHN0cmlwX3RyYWlsb3B0ICdPJzsgc2tpcF9uZXh0PXllczs7IFwKKyAgICAgIC0qTz8qKSBzdHJpcF90cmFpbG9wdCAnTyc7OyBcCisgICAgICAgIC0qbCkgc3RyaXBfdHJhaWxvcHQgJ2wnOyBza2lwX25leHQ9eWVzOzsgXAorICAgICAgLSpsPyopIHN0cmlwX3RyYWlsb3B0ICdsJzs7IFwKKyAgICAgIC1bZEVEbV0pIHNraXBfbmV4dD15ZXM7OyBcCisgICAgICAtW0pUXSkgc2tpcF9uZXh0PXllczs7IFwKKyAgICBlc2FjOyBcCisgICAgY2FzZSAkJGZsZyBpbiBcCisgICAgICAqJCR0YXJnZXRfb3B0aW9uKikgaGFzX29wdD15ZXM7IGJyZWFrOzsgXAorICAgIGVzYWM7IFwKKyAgZG9uZTsgXAorICB0ZXN0ICQkaGFzX29wdCA9IHllcworYW1fX21ha2VfZHJ5cnVuID0gKHRhcmdldF9vcHRpb249bjsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKK2FtX19tYWtlX2tlZXBnb2luZyA9ICh0YXJnZXRfb3B0aW9uPWs7ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCiBwa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKIHBrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAogcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQApAQCAtNTUsNDQgKzgzLDUyIEBACiBARkZJX0RFQlVHX1RSVUVAYW1fX2FwcGVuZF8xID0gc3JjL2RlYnVnLmMKIEBNSVBTX1RSVUVAYW1fX2FwcGVuZF8yID0gc3JjL21pcHMvZmZpLmMgc3JjL21pcHMvbzMyLlMgc3JjL21pcHMvbjMyLlMKIEBCRklOX1RSVUVAYW1fX2FwcGVuZF8zID0gc3JjL2JmaW4vZmZpLmMgc3JjL2JmaW4vc3lzdi5TCi1AWDg2X1RSVUVAYW1fX2FwcGVuZF80ID0gc3JjL3g4Ni9mZmkuYyBzcmMveDg2L3N5c3YuUwotQFg4Nl9GUkVFQlNEX1RSVUVAYW1fX2FwcGVuZF81ID0gc3JjL3g4Ni9mZmkuYyBzcmMveDg2L2ZyZWVic2QuUworQFg4Nl9UUlVFQGFtX19hcHBlbmRfNCA9IHNyYy94ODYvZmZpLmMgc3JjL3g4Ni9zeXN2LlMgc3JjL3g4Ni93aW4zMi5TCitAWDg2X0ZSRUVCU0RfVFJVRUBhbV9fYXBwZW5kXzUgPSBzcmMveDg2L2ZmaS5jIHNyYy94ODYvZnJlZWJzZC5TIHNyYy94ODYvd2luMzIuUwogQFg4Nl9XSU4zMl9UUlVFQGFtX19hcHBlbmRfNiA9IHNyYy94ODYvZmZpLmMgc3JjL3g4Ni93aW4zMi5TCiBAWDg2X1dJTjY0X1RSVUVAYW1fX2FwcGVuZF83ID0gc3JjL3g4Ni9mZmkuYyBzcmMveDg2L3dpbjY0LlMKIEBYODZfREFSV0lOX1RSVUVAYW1fX2FwcGVuZF84ID0gc3JjL3g4Ni9mZmkuYyBzcmMveDg2L2Rhcndpbi5TIHNyYy94ODYvZmZpNjQuYyBzcmMveDg2L2RhcndpbjY0LlMKLUBTUEFSQ19UUlVFQGFtX19hcHBlbmRfOSA9IHNyYy9zcGFyYy9mZmkuYyBzcmMvc3BhcmMvdjguUyBzcmMvc3BhcmMvdjkuUwotQEFMUEhBX1RSVUVAYW1fX2FwcGVuZF8xMCA9IHNyYy9hbHBoYS9mZmkuYyBzcmMvYWxwaGEvb3NmLlMKLUBJQTY0X1RSVUVAYW1fX2FwcGVuZF8xMSA9IHNyYy9pYTY0L2ZmaS5jIHNyYy9pYTY0L3VuaXguUwotQE0zMlJfVFJVRUBhbV9fYXBwZW5kXzEyID0gc3JjL20zMnIvc3lzdi5TIHNyYy9tMzJyL2ZmaS5jCi1ATTY4S19UUlVFQGFtX19hcHBlbmRfMTMgPSBzcmMvbTY4ay9mZmkuYyBzcmMvbTY4ay9zeXN2LlMKLUBNT1hJRV9UUlVFQGFtX19hcHBlbmRfMTQgPSBzcmMvbW94aWUvZmZpLmMgc3JjL21veGllL2VhYmkuUwotQE1JQ1JPQkxBWkVfVFJVRUBhbV9fYXBwZW5kXzE1ID0gc3JjL21pY3JvYmxhemUvZmZpLmMgc3JjL21pY3JvYmxhemUvc3lzdi5TCi1AUE9XRVJQQ19UUlVFQGFtX19hcHBlbmRfMTYgPSBzcmMvcG93ZXJwYy9mZmkuYyBzcmMvcG93ZXJwYy9zeXN2LlMgc3JjL3Bvd2VycGMvcHBjX2Nsb3N1cmUuUyBzcmMvcG93ZXJwYy9saW51eDY0LlMgc3JjL3Bvd2VycGMvbGludXg2NF9jbG9zdXJlLlMKLUBQT1dFUlBDX0FJWF9UUlVFQGFtX19hcHBlbmRfMTcgPSBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmMgc3JjL3Bvd2VycGMvYWl4LlMgc3JjL3Bvd2VycGMvYWl4X2Nsb3N1cmUuUwotQFBPV0VSUENfREFSV0lOX1RSVUVAYW1fX2FwcGVuZF8xOCA9IHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYyBzcmMvcG93ZXJwYy9kYXJ3aW4uUyBzcmMvcG93ZXJwYy9kYXJ3aW5fY2xvc3VyZS5TCi1AUE9XRVJQQ19GUkVFQlNEX1RSVUVAYW1fX2FwcGVuZF8xOSA9IHNyYy9wb3dlcnBjL2ZmaS5jIHNyYy9wb3dlcnBjL3N5c3YuUyBzcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TCi1AQUFSQ0g2NF9UUlVFQGFtX19hcHBlbmRfMjAgPSBzcmMvYWFyY2g2NC9zeXN2LlMgc3JjL2FhcmNoNjQvZmZpLmMKLUBBUk1fVFJVRUBhbV9fYXBwZW5kXzIxID0gc3JjL2FybS9zeXN2LlMgc3JjL2FybS9mZmkuYwotQEFSTV9UUlVFQEBGRklfRVhFQ19UUkFNUE9MSU5FX1RBQkxFX1RSVUVAYW1fX2FwcGVuZF8yMiA9IHNyYy9hcm0vdHJhbXBvbGluZS5TCi1AQVZSMzJfVFJVRUBhbV9fYXBwZW5kXzIzID0gc3JjL2F2cjMyL3N5c3YuUyBzcmMvYXZyMzIvZmZpLmMKLUBMSUJGRklfQ1JJU19UUlVFQGFtX19hcHBlbmRfMjQgPSBzcmMvY3Jpcy9zeXN2LlMgc3JjL2NyaXMvZmZpLmMKLUBGUlZfVFJVRUBhbV9fYXBwZW5kXzI1ID0gc3JjL2Zydi9lYWJpLlMgc3JjL2Zydi9mZmkuYwotQFMzOTBfVFJVRUBhbV9fYXBwZW5kXzI2ID0gc3JjL3MzOTAvc3lzdi5TIHNyYy9zMzkwL2ZmaS5jCi1AWDg2XzY0X1RSVUVAYW1fX2FwcGVuZF8yNyA9IHNyYy94ODYvZmZpNjQuYyBzcmMveDg2L3VuaXg2NC5TIHNyYy94ODYvZmZpLmMgc3JjL3g4Ni9zeXN2LlMKLUBTSF9UUlVFQGFtX19hcHBlbmRfMjggPSBzcmMvc2gvc3lzdi5TIHNyYy9zaC9mZmkuYwotQFNINjRfVFJVRUBhbV9fYXBwZW5kXzI5ID0gc3JjL3NoNjQvc3lzdi5TIHNyYy9zaDY0L2ZmaS5jCi1AUEFfTElOVVhfVFJVRUBhbV9fYXBwZW5kXzMwID0gc3JjL3BhL2xpbnV4LlMgc3JjL3BhL2ZmaS5jCi1AUEFfSFBVWF9UUlVFQGFtX19hcHBlbmRfMzEgPSBzcmMvcGEvaHB1eDMyLlMgc3JjL3BhL2ZmaS5jCi1AVElMRV9UUlVFQGFtX19hcHBlbmRfMzIgPSBzcmMvdGlsZS90aWxlLlMgc3JjL3RpbGUvZmZpLmMKLUBYVEVOU0FfVFJVRUBhbV9fYXBwZW5kXzMzID0gc3JjL3h0ZW5zYS9zeXN2LlMgc3JjL3h0ZW5zYS9mZmkuYwotQE1FVEFHX1RSVUVAYW1fX2FwcGVuZF8zNCA9IHNyYy9tZXRhZy9zeXN2LlMgc3JjL21ldGFnL2ZmaS5jCitAWDg2X0RBUldJTjMyX1RSVUVAQFg4Nl9EQVJXSU5fVFJVRUBhbV9fYXBwZW5kXzkgPSBzcmMveDg2L3dpbjMyLlMKK0BTUEFSQ19UUlVFQGFtX19hcHBlbmRfMTAgPSBzcmMvc3BhcmMvZmZpLmMgc3JjL3NwYXJjL3Y4LlMgc3JjL3NwYXJjL3Y5LlMKK0BBTFBIQV9UUlVFQGFtX19hcHBlbmRfMTEgPSBzcmMvYWxwaGEvZmZpLmMgc3JjL2FscGhhL29zZi5TCitASUE2NF9UUlVFQGFtX19hcHBlbmRfMTIgPSBzcmMvaWE2NC9mZmkuYyBzcmMvaWE2NC91bml4LlMKK0BNMzJSX1RSVUVAYW1fX2FwcGVuZF8xMyA9IHNyYy9tMzJyL3N5c3YuUyBzcmMvbTMyci9mZmkuYworQE02OEtfVFJVRUBhbV9fYXBwZW5kXzE0ID0gc3JjL202OGsvZmZpLmMgc3JjL202OGsvc3lzdi5TCitATTg4S19UUlVFQGFtX19hcHBlbmRfMTUgPSBzcmMvbTg4ay9mZmkuYyBzcmMvbTg4ay9vYnNkLlMKK0BNT1hJRV9UUlVFQGFtX19hcHBlbmRfMTYgPSBzcmMvbW94aWUvZmZpLmMgc3JjL21veGllL2VhYmkuUworQE1JQ1JPQkxBWkVfVFJVRUBhbV9fYXBwZW5kXzE3ID0gc3JjL21pY3JvYmxhemUvZmZpLmMgc3JjL21pY3JvYmxhemUvc3lzdi5TCitATklPUzJfVFJVRUBhbV9fYXBwZW5kXzE4ID0gc3JjL25pb3MyL3N5c3YuUyBzcmMvbmlvczIvZmZpLmMKK0BQT1dFUlBDX1RSVUVAYW1fX2FwcGVuZF8xOSA9IHNyYy9wb3dlcnBjL2ZmaS5jIHNyYy9wb3dlcnBjL2ZmaV9zeXN2LmMgc3JjL3Bvd2VycGMvZmZpX2xpbnV4NjQuYyBzcmMvcG93ZXJwYy9zeXN2LlMgc3JjL3Bvd2VycGMvcHBjX2Nsb3N1cmUuUyBzcmMvcG93ZXJwYy9saW51eDY0LlMgc3JjL3Bvd2VycGMvbGludXg2NF9jbG9zdXJlLlMKK0BQT1dFUlBDX0FJWF9UUlVFQGFtX19hcHBlbmRfMjAgPSBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmMgc3JjL3Bvd2VycGMvYWl4LlMgc3JjL3Bvd2VycGMvYWl4X2Nsb3N1cmUuUworQFBPV0VSUENfREFSV0lOX1RSVUVAYW1fX2FwcGVuZF8yMSA9IHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYyBzcmMvcG93ZXJwYy9kYXJ3aW4uUyBzcmMvcG93ZXJwYy9kYXJ3aW5fY2xvc3VyZS5TCitAUE9XRVJQQ19GUkVFQlNEX1RSVUVAYW1fX2FwcGVuZF8yMiA9IHNyYy9wb3dlcnBjL2ZmaS5jIHNyYy9wb3dlcnBjL2ZmaV9zeXN2LmMgc3JjL3Bvd2VycGMvc3lzdi5TIHNyYy9wb3dlcnBjL3BwY19jbG9zdXJlLlMKK0BBQVJDSDY0X1RSVUVAYW1fX2FwcGVuZF8yMyA9IHNyYy9hYXJjaDY0L3N5c3YuUyBzcmMvYWFyY2g2NC9mZmkuYworQEFSQ19UUlVFQGFtX19hcHBlbmRfMjQgPSBzcmMvYXJjL2FyY29tcGFjdC5TIHNyYy9hcmMvZmZpLmMKK0BBUk1fVFJVRUBhbV9fYXBwZW5kXzI1ID0gc3JjL2FybS9zeXN2LlMgc3JjL2FybS9mZmkuYworQEFSTV9UUlVFQEBGRklfRVhFQ19UUkFNUE9MSU5FX1RBQkxFX1RSVUVAYW1fX2FwcGVuZF8yNiA9IHNyYy9hcm0vdHJhbXBvbGluZS5TCitAQVZSMzJfVFJVRUBhbV9fYXBwZW5kXzI3ID0gc3JjL2F2cjMyL3N5c3YuUyBzcmMvYXZyMzIvZmZpLmMKK0BMSUJGRklfQ1JJU19UUlVFQGFtX19hcHBlbmRfMjggPSBzcmMvY3Jpcy9zeXN2LlMgc3JjL2NyaXMvZmZpLmMKK0BGUlZfVFJVRUBhbV9fYXBwZW5kXzI5ID0gc3JjL2Zydi9lYWJpLlMgc3JjL2Zydi9mZmkuYworQFMzOTBfVFJVRUBhbV9fYXBwZW5kXzMwID0gc3JjL3MzOTAvc3lzdi5TIHNyYy9zMzkwL2ZmaS5jCitAWDg2XzY0X1RSVUVAYW1fX2FwcGVuZF8zMSA9IHNyYy94ODYvZmZpNjQuYyBzcmMveDg2L3VuaXg2NC5TIHNyYy94ODYvZmZpLmMgc3JjL3g4Ni9zeXN2LlMKK0BTSF9UUlVFQGFtX19hcHBlbmRfMzIgPSBzcmMvc2gvc3lzdi5TIHNyYy9zaC9mZmkuYworQFNINjRfVFJVRUBhbV9fYXBwZW5kXzMzID0gc3JjL3NoNjQvc3lzdi5TIHNyYy9zaDY0L2ZmaS5jCitAUEFfTElOVVhfVFJVRUBhbV9fYXBwZW5kXzM0ID0gc3JjL3BhL2xpbnV4LlMgc3JjL3BhL2ZmaS5jCitAUEFfSFBVWF9UUlVFQGFtX19hcHBlbmRfMzUgPSBzcmMvcGEvaHB1eDMyLlMgc3JjL3BhL2ZmaS5jCitAVElMRV9UUlVFQGFtX19hcHBlbmRfMzYgPSBzcmMvdGlsZS90aWxlLlMgc3JjL3RpbGUvZmZpLmMKK0BYVEVOU0FfVFJVRUBhbV9fYXBwZW5kXzM3ID0gc3JjL3h0ZW5zYS9zeXN2LlMgc3JjL3h0ZW5zYS9mZmkuYworQE1FVEFHX1RSVUVAYW1fX2FwcGVuZF8zOCA9IHNyYy9tZXRhZy9zeXN2LlMgc3JjL21ldGFnL2ZmaS5jCitAVkFYX1RSVUVAYW1fX2FwcGVuZF8zOSA9IHNyYy92YXgvZWxmYnNkLlMgc3JjL3ZheC9mZmkuYworIyBCdWlsZCBkZWJ1Zy4gRGVmaW5lIEZGSV9ERUJVRyBvbiB0aGUgY29tbWFuZGxpbmUgc28gdGhhdCwgd2hlbiBidWlsZGluZyB3aXRoCisjIE1TVkMsIGl0IGNhbiBsaW5rIGFnYWluc3QgdGhlIGRlYnVnIENSVC4KK0BGRklfREVCVUdfVFJVRUBhbV9fYXBwZW5kXzQwID0gLURGRklfREVCVUcKIHN1YmRpciA9IC4KLURJU1RfQ09NTU9OID0gUkVBRE1FICQoYW1fX2NvbmZpZ3VyZV9kZXBzKSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gXAotCSQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHNyY2RpcikvZG9jL3N0YW1wLXZ0aSBcCi0JJChzcmNkaXIpL2RvYy92ZXJzaW9uLnRleGkgJChzcmNkaXIpL2ZmaWNvbmZpZy5oLmluIFwKLQkkKHNyY2RpcikvbGliZmZpLnBjLmluICQodG9wX3NyY2RpcikvY29uZmlndXJlIENoYW5nZUxvZyBcCi0JY29tcGlsZSBjb25maWcuZ3Vlc3MgY29uZmlnLnN1YiBkZXBjb21wIGluc3RhbGwtc2ggbHRtYWluLnNoIFwKLQltZGF0ZS1zaCBtaXNzaW5nIHRleGluZm8udGV4CitESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHNyY2RpcikvTWFrZWZpbGUuYW0gXAorCSQodG9wX3NyY2RpcikvY29uZmlndXJlICQoYW1fX2NvbmZpZ3VyZV9kZXBzKSBcCisJJChzcmNkaXIpL2ZmaWNvbmZpZy5oLmluICQoc3JjZGlyKS9saWJmZmkucGMuaW4gZGVwY29tcCBcCisJbWRhdGUtc2ggJChzcmNkaXIpL2RvYy92ZXJzaW9uLnRleGkgJChzcmNkaXIpL2RvYy9zdGFtcC12dGkgXAorCXRleGluZm8udGV4IFJFQURNRSBjb21waWxlIGNvbmZpZy5ndWVzcyBjb25maWcuc3ViIGluc3RhbGwtc2ggXAorCW1pc3NpbmcgbHRtYWluLnNoCiBBQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00CiBhbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9tNC9hc21jZmkubTQgXAogCSQodG9wX3NyY2RpcikvbTQvYXhfYXBwZW5kX2ZsYWcubTQgXApAQCAtMTU0LDUwICsxOTAsNjAgQEAKIEBNSVBTX1RSVUVAYW1fX29iamVjdHNfMiA9IHNyYy9taXBzL2ZmaS5sbyBzcmMvbWlwcy9vMzIubG8gXAogQE1JUFNfVFJVRUAJc3JjL21pcHMvbjMyLmxvCiBAQkZJTl9UUlVFQGFtX19vYmplY3RzXzMgPSBzcmMvYmZpbi9mZmkubG8gc3JjL2JmaW4vc3lzdi5sbwotQFg4Nl9UUlVFQGFtX19vYmplY3RzXzQgPSBzcmMveDg2L2ZmaS5sbyBzcmMveDg2L3N5c3YubG8KLUBYODZfRlJFRUJTRF9UUlVFQGFtX19vYmplY3RzXzUgPSBzcmMveDg2L2ZmaS5sbyBzcmMveDg2L2ZyZWVic2QubG8KK0BYODZfVFJVRUBhbV9fb2JqZWN0c180ID0gc3JjL3g4Ni9mZmkubG8gc3JjL3g4Ni9zeXN2LmxvIFwKK0BYODZfVFJVRUAJc3JjL3g4Ni93aW4zMi5sbworQFg4Nl9GUkVFQlNEX1RSVUVAYW1fX29iamVjdHNfNSA9IHNyYy94ODYvZmZpLmxvIHNyYy94ODYvZnJlZWJzZC5sbyBcCitAWDg2X0ZSRUVCU0RfVFJVRUAJc3JjL3g4Ni93aW4zMi5sbwogQFg4Nl9XSU4zMl9UUlVFQGFtX19vYmplY3RzXzYgPSBzcmMveDg2L2ZmaS5sbyBzcmMveDg2L3dpbjMyLmxvCiBAWDg2X1dJTjY0X1RSVUVAYW1fX29iamVjdHNfNyA9IHNyYy94ODYvZmZpLmxvIHNyYy94ODYvd2luNjQubG8KIEBYODZfREFSV0lOX1RSVUVAYW1fX29iamVjdHNfOCA9IHNyYy94ODYvZmZpLmxvIHNyYy94ODYvZGFyd2luLmxvIFwKIEBYODZfREFSV0lOX1RSVUVACXNyYy94ODYvZmZpNjQubG8gc3JjL3g4Ni9kYXJ3aW42NC5sbwotQFNQQVJDX1RSVUVAYW1fX29iamVjdHNfOSA9IHNyYy9zcGFyYy9mZmkubG8gc3JjL3NwYXJjL3Y4LmxvIFwKK0BYODZfREFSV0lOMzJfVFJVRUBAWDg2X0RBUldJTl9UUlVFQGFtX19vYmplY3RzXzkgPSBzcmMveDg2L3dpbjMyLmxvCitAU1BBUkNfVFJVRUBhbV9fb2JqZWN0c18xMCA9IHNyYy9zcGFyYy9mZmkubG8gc3JjL3NwYXJjL3Y4LmxvIFwKIEBTUEFSQ19UUlVFQAlzcmMvc3BhcmMvdjkubG8KLUBBTFBIQV9UUlVFQGFtX19vYmplY3RzXzEwID0gc3JjL2FscGhhL2ZmaS5sbyBzcmMvYWxwaGEvb3NmLmxvCi1ASUE2NF9UUlVFQGFtX19vYmplY3RzXzExID0gc3JjL2lhNjQvZmZpLmxvIHNyYy9pYTY0L3VuaXgubG8KLUBNMzJSX1RSVUVAYW1fX29iamVjdHNfMTIgPSBzcmMvbTMyci9zeXN2LmxvIHNyYy9tMzJyL2ZmaS5sbwotQE02OEtfVFJVRUBhbV9fb2JqZWN0c18xMyA9IHNyYy9tNjhrL2ZmaS5sbyBzcmMvbTY4ay9zeXN2LmxvCi1ATU9YSUVfVFJVRUBhbV9fb2JqZWN0c18xNCA9IHNyYy9tb3hpZS9mZmkubG8gc3JjL21veGllL2VhYmkubG8KLUBNSUNST0JMQVpFX1RSVUVAYW1fX29iamVjdHNfMTUgPSBzcmMvbWljcm9ibGF6ZS9mZmkubG8gXAorQEFMUEhBX1RSVUVAYW1fX29iamVjdHNfMTEgPSBzcmMvYWxwaGEvZmZpLmxvIHNyYy9hbHBoYS9vc2YubG8KK0BJQTY0X1RSVUVAYW1fX29iamVjdHNfMTIgPSBzcmMvaWE2NC9mZmkubG8gc3JjL2lhNjQvdW5peC5sbworQE0zMlJfVFJVRUBhbV9fb2JqZWN0c18xMyA9IHNyYy9tMzJyL3N5c3YubG8gc3JjL20zMnIvZmZpLmxvCitATTY4S19UUlVFQGFtX19vYmplY3RzXzE0ID0gc3JjL202OGsvZmZpLmxvIHNyYy9tNjhrL3N5c3YubG8KK0BNODhLX1RSVUVAYW1fX29iamVjdHNfMTUgPSBzcmMvbTg4ay9mZmkubG8gc3JjL204OGsvb2JzZC5sbworQE1PWElFX1RSVUVAYW1fX29iamVjdHNfMTYgPSBzcmMvbW94aWUvZmZpLmxvIHNyYy9tb3hpZS9lYWJpLmxvCitATUlDUk9CTEFaRV9UUlVFQGFtX19vYmplY3RzXzE3ID0gc3JjL21pY3JvYmxhemUvZmZpLmxvIFwKIEBNSUNST0JMQVpFX1RSVUVACXNyYy9taWNyb2JsYXplL3N5c3YubG8KLUBQT1dFUlBDX1RSVUVAYW1fX29iamVjdHNfMTYgPSBzcmMvcG93ZXJwYy9mZmkubG8gc3JjL3Bvd2VycGMvc3lzdi5sbyBcCitATklPUzJfVFJVRUBhbV9fb2JqZWN0c18xOCA9IHNyYy9uaW9zMi9zeXN2LmxvIHNyYy9uaW9zMi9mZmkubG8KK0BQT1dFUlBDX1RSVUVAYW1fX29iamVjdHNfMTkgPSBzcmMvcG93ZXJwYy9mZmkubG8gXAorQFBPV0VSUENfVFJVRUAJc3JjL3Bvd2VycGMvZmZpX3N5c3YubG8gXAorQFBPV0VSUENfVFJVRUAJc3JjL3Bvd2VycGMvZmZpX2xpbnV4NjQubG8gc3JjL3Bvd2VycGMvc3lzdi5sbyBcCiBAUE9XRVJQQ19UUlVFQAlzcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5sbyBcCiBAUE9XRVJQQ19UUlVFQAlzcmMvcG93ZXJwYy9saW51eDY0LmxvIFwKIEBQT1dFUlBDX1RSVUVACXNyYy9wb3dlcnBjL2xpbnV4NjRfY2xvc3VyZS5sbwotQFBPV0VSUENfQUlYX1RSVUVAYW1fX29iamVjdHNfMTcgPSBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmxvIFwKK0BQT1dFUlBDX0FJWF9UUlVFQGFtX19vYmplY3RzXzIwID0gc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5sbyBcCiBAUE9XRVJQQ19BSVhfVFJVRUAJc3JjL3Bvd2VycGMvYWl4LmxvIFwKIEBQT1dFUlBDX0FJWF9UUlVFQAlzcmMvcG93ZXJwYy9haXhfY2xvc3VyZS5sbwotQFBPV0VSUENfREFSV0lOX1RSVUVAYW1fX29iamVjdHNfMTggPSBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmxvIFwKK0BQT1dFUlBDX0RBUldJTl9UUlVFQGFtX19vYmplY3RzXzIxID0gc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5sbyBcCiBAUE9XRVJQQ19EQVJXSU5fVFJVRUAJc3JjL3Bvd2VycGMvZGFyd2luLmxvIFwKIEBQT1dFUlBDX0RBUldJTl9UUlVFQAlzcmMvcG93ZXJwYy9kYXJ3aW5fY2xvc3VyZS5sbwotQFBPV0VSUENfRlJFRUJTRF9UUlVFQGFtX19vYmplY3RzXzE5ID0gc3JjL3Bvd2VycGMvZmZpLmxvIFwKK0BQT1dFUlBDX0ZSRUVCU0RfVFJVRUBhbV9fb2JqZWN0c18yMiA9IHNyYy9wb3dlcnBjL2ZmaS5sbyBcCitAUE9XRVJQQ19GUkVFQlNEX1RSVUVACXNyYy9wb3dlcnBjL2ZmaV9zeXN2LmxvIFwKIEBQT1dFUlBDX0ZSRUVCU0RfVFJVRUAJc3JjL3Bvd2VycGMvc3lzdi5sbyBcCiBAUE9XRVJQQ19GUkVFQlNEX1RSVUVACXNyYy9wb3dlcnBjL3BwY19jbG9zdXJlLmxvCi1AQUFSQ0g2NF9UUlVFQGFtX19vYmplY3RzXzIwID0gc3JjL2FhcmNoNjQvc3lzdi5sbyBzcmMvYWFyY2g2NC9mZmkubG8KLUBBUk1fVFJVRUBhbV9fb2JqZWN0c18yMSA9IHNyYy9hcm0vc3lzdi5sbyBzcmMvYXJtL2ZmaS5sbwotQEFSTV9UUlVFQEBGRklfRVhFQ19UUkFNUE9MSU5FX1RBQkxFX1RSVUVAYW1fX29iamVjdHNfMjIgPSBzcmMvYXJtL3RyYW1wb2xpbmUubG8KLUBBVlIzMl9UUlVFQGFtX19vYmplY3RzXzIzID0gc3JjL2F2cjMyL3N5c3YubG8gc3JjL2F2cjMyL2ZmaS5sbwotQExJQkZGSV9DUklTX1RSVUVAYW1fX29iamVjdHNfMjQgPSBzcmMvY3Jpcy9zeXN2LmxvIHNyYy9jcmlzL2ZmaS5sbwotQEZSVl9UUlVFQGFtX19vYmplY3RzXzI1ID0gc3JjL2Zydi9lYWJpLmxvIHNyYy9mcnYvZmZpLmxvCi1AUzM5MF9UUlVFQGFtX19vYmplY3RzXzI2ID0gc3JjL3MzOTAvc3lzdi5sbyBzcmMvczM5MC9mZmkubG8KLUBYODZfNjRfVFJVRUBhbV9fb2JqZWN0c18yNyA9IHNyYy94ODYvZmZpNjQubG8gc3JjL3g4Ni91bml4NjQubG8gXAorQEFBUkNINjRfVFJVRUBhbV9fb2JqZWN0c18yMyA9IHNyYy9hYXJjaDY0L3N5c3YubG8gc3JjL2FhcmNoNjQvZmZpLmxvCitAQVJDX1RSVUVAYW1fX29iamVjdHNfMjQgPSBzcmMvYXJjL2FyY29tcGFjdC5sbyBzcmMvYXJjL2ZmaS5sbworQEFSTV9UUlVFQGFtX19vYmplY3RzXzI1ID0gc3JjL2FybS9zeXN2LmxvIHNyYy9hcm0vZmZpLmxvCitAQVJNX1RSVUVAQEZGSV9FWEVDX1RSQU1QT0xJTkVfVEFCTEVfVFJVRUBhbV9fb2JqZWN0c18yNiA9IHNyYy9hcm0vdHJhbXBvbGluZS5sbworQEFWUjMyX1RSVUVAYW1fX29iamVjdHNfMjcgPSBzcmMvYXZyMzIvc3lzdi5sbyBzcmMvYXZyMzIvZmZpLmxvCitATElCRkZJX0NSSVNfVFJVRUBhbV9fb2JqZWN0c18yOCA9IHNyYy9jcmlzL3N5c3YubG8gc3JjL2NyaXMvZmZpLmxvCitARlJWX1RSVUVAYW1fX29iamVjdHNfMjkgPSBzcmMvZnJ2L2VhYmkubG8gc3JjL2Zydi9mZmkubG8KK0BTMzkwX1RSVUVAYW1fX29iamVjdHNfMzAgPSBzcmMvczM5MC9zeXN2LmxvIHNyYy9zMzkwL2ZmaS5sbworQFg4Nl82NF9UUlVFQGFtX19vYmplY3RzXzMxID0gc3JjL3g4Ni9mZmk2NC5sbyBzcmMveDg2L3VuaXg2NC5sbyBcCiBAWDg2XzY0X1RSVUVACXNyYy94ODYvZmZpLmxvIHNyYy94ODYvc3lzdi5sbwotQFNIX1RSVUVAYW1fX29iamVjdHNfMjggPSBzcmMvc2gvc3lzdi5sbyBzcmMvc2gvZmZpLmxvCi1AU0g2NF9UUlVFQGFtX19vYmplY3RzXzI5ID0gc3JjL3NoNjQvc3lzdi5sbyBzcmMvc2g2NC9mZmkubG8KLUBQQV9MSU5VWF9UUlVFQGFtX19vYmplY3RzXzMwID0gc3JjL3BhL2xpbnV4LmxvIHNyYy9wYS9mZmkubG8KLUBQQV9IUFVYX1RSVUVAYW1fX29iamVjdHNfMzEgPSBzcmMvcGEvaHB1eDMyLmxvIHNyYy9wYS9mZmkubG8KLUBUSUxFX1RSVUVAYW1fX29iamVjdHNfMzIgPSBzcmMvdGlsZS90aWxlLmxvIHNyYy90aWxlL2ZmaS5sbwotQFhURU5TQV9UUlVFQGFtX19vYmplY3RzXzMzID0gc3JjL3h0ZW5zYS9zeXN2LmxvIHNyYy94dGVuc2EvZmZpLmxvCi1ATUVUQUdfVFJVRUBhbV9fb2JqZWN0c18zNCA9IHNyYy9tZXRhZy9zeXN2LmxvIHNyYy9tZXRhZy9mZmkubG8KK0BTSF9UUlVFQGFtX19vYmplY3RzXzMyID0gc3JjL3NoL3N5c3YubG8gc3JjL3NoL2ZmaS5sbworQFNINjRfVFJVRUBhbV9fb2JqZWN0c18zMyA9IHNyYy9zaDY0L3N5c3YubG8gc3JjL3NoNjQvZmZpLmxvCitAUEFfTElOVVhfVFJVRUBhbV9fb2JqZWN0c18zNCA9IHNyYy9wYS9saW51eC5sbyBzcmMvcGEvZmZpLmxvCitAUEFfSFBVWF9UUlVFQGFtX19vYmplY3RzXzM1ID0gc3JjL3BhL2hwdXgzMi5sbyBzcmMvcGEvZmZpLmxvCitAVElMRV9UUlVFQGFtX19vYmplY3RzXzM2ID0gc3JjL3RpbGUvdGlsZS5sbyBzcmMvdGlsZS9mZmkubG8KK0BYVEVOU0FfVFJVRUBhbV9fb2JqZWN0c18zNyA9IHNyYy94dGVuc2Evc3lzdi5sbyBzcmMveHRlbnNhL2ZmaS5sbworQE1FVEFHX1RSVUVAYW1fX29iamVjdHNfMzggPSBzcmMvbWV0YWcvc3lzdi5sbyBzcmMvbWV0YWcvZmZpLmxvCitAVkFYX1RSVUVAYW1fX29iamVjdHNfMzkgPSBzcmMvdmF4L2VsZmJzZC5sbyBzcmMvdmF4L2ZmaS5sbwogbm9kaXN0X2xpYmZmaV9sYV9PQkpFQ1RTID0gJChhbV9fb2JqZWN0c18xKSAkKGFtX19vYmplY3RzXzIpIFwKIAkkKGFtX19vYmplY3RzXzMpICQoYW1fX29iamVjdHNfNCkgJChhbV9fb2JqZWN0c181KSBcCiAJJChhbV9fb2JqZWN0c182KSAkKGFtX19vYmplY3RzXzcpICQoYW1fX29iamVjdHNfOCkgXApAQCAtMjA5LDE3ICsyNTUsMjMgQEAKIAkkKGFtX19vYmplY3RzXzI0KSAkKGFtX19vYmplY3RzXzI1KSAkKGFtX19vYmplY3RzXzI2KSBcCiAJJChhbV9fb2JqZWN0c18yNykgJChhbV9fb2JqZWN0c18yOCkgJChhbV9fb2JqZWN0c18yOSkgXAogCSQoYW1fX29iamVjdHNfMzApICQoYW1fX29iamVjdHNfMzEpICQoYW1fX29iamVjdHNfMzIpIFwKLQkkKGFtX19vYmplY3RzXzMzKSAkKGFtX19vYmplY3RzXzM0KQorCSQoYW1fX29iamVjdHNfMzMpICQoYW1fX29iamVjdHNfMzQpICQoYW1fX29iamVjdHNfMzUpIFwKKwkkKGFtX19vYmplY3RzXzM2KSAkKGFtX19vYmplY3RzXzM3KSAkKGFtX19vYmplY3RzXzM4KSBcCisJJChhbV9fb2JqZWN0c18zOSkKIGxpYmZmaV9sYV9PQkpFQ1RTID0gJChhbV9saWJmZmlfbGFfT0JKRUNUUykgXAogCSQobm9kaXN0X2xpYmZmaV9sYV9PQkpFQ1RTKQotbGliZmZpX2xhX0xJTksgPSAkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCitBTV9WX2x0ID0gJChhbV9fdl9sdF9AQU1fVkApCithbV9fdl9sdF8gPSAkKGFtX192X2x0X0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfbHRfMCA9IC0tc2lsZW50CithbV9fdl9sdF8xID0gCitsaWJmZmlfbGFfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAogCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgXAogCSQobGliZmZpX2xhX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKIGxpYmZmaV9jb252ZW5pZW5jZV9sYV9MSUJBREQgPQotYW1fX29iamVjdHNfMzUgPSBzcmMvcHJlcF9jaWYubG8gc3JjL3R5cGVzLmxvIHNyYy9yYXdfYXBpLmxvIFwKK2FtX19vYmplY3RzXzQwID0gc3JjL3ByZXBfY2lmLmxvIHNyYy90eXBlcy5sbyBzcmMvcmF3X2FwaS5sbyBcCiAJc3JjL2phdmFfcmF3X2FwaS5sbyBzcmMvY2xvc3VyZXMubG8KLWFtX2xpYmZmaV9jb252ZW5pZW5jZV9sYV9PQkpFQ1RTID0gJChhbV9fb2JqZWN0c18zNSkKLWFtX19vYmplY3RzXzM2ID0gJChhbV9fb2JqZWN0c18xKSAkKGFtX19vYmplY3RzXzIpICQoYW1fX29iamVjdHNfMykgXAorYW1fbGliZmZpX2NvbnZlbmllbmNlX2xhX09CSkVDVFMgPSAkKGFtX19vYmplY3RzXzQwKQorYW1fX29iamVjdHNfNDEgPSAkKGFtX19vYmplY3RzXzEpICQoYW1fX29iamVjdHNfMikgJChhbV9fb2JqZWN0c18zKSBcCiAJJChhbV9fb2JqZWN0c180KSAkKGFtX19vYmplY3RzXzUpICQoYW1fX29iamVjdHNfNikgXAogCSQoYW1fX29iamVjdHNfNykgJChhbV9fb2JqZWN0c184KSAkKGFtX19vYmplY3RzXzkpIFwKIAkkKGFtX19vYmplY3RzXzEwKSAkKGFtX19vYmplY3RzXzExKSAkKGFtX19vYmplY3RzXzEyKSBcCkBAIC0yMzAsMzIgKzI4Miw4NyBAQAogCSQoYW1fX29iamVjdHNfMjUpICQoYW1fX29iamVjdHNfMjYpICQoYW1fX29iamVjdHNfMjcpIFwKIAkkKGFtX19vYmplY3RzXzI4KSAkKGFtX19vYmplY3RzXzI5KSAkKGFtX19vYmplY3RzXzMwKSBcCiAJJChhbV9fb2JqZWN0c18zMSkgJChhbV9fb2JqZWN0c18zMikgJChhbV9fb2JqZWN0c18zMykgXAotCSQoYW1fX29iamVjdHNfMzQpCi1ub2Rpc3RfbGliZmZpX2NvbnZlbmllbmNlX2xhX09CSkVDVFMgPSAkKGFtX19vYmplY3RzXzM2KQorCSQoYW1fX29iamVjdHNfMzQpICQoYW1fX29iamVjdHNfMzUpICQoYW1fX29iamVjdHNfMzYpIFwKKwkkKGFtX19vYmplY3RzXzM3KSAkKGFtX19vYmplY3RzXzM4KSAkKGFtX19vYmplY3RzXzM5KQorbm9kaXN0X2xpYmZmaV9jb252ZW5pZW5jZV9sYV9PQkpFQ1RTID0gJChhbV9fb2JqZWN0c180MSkKIGxpYmZmaV9jb252ZW5pZW5jZV9sYV9PQkpFQ1RTID0gJChhbV9saWJmZmlfY29udmVuaWVuY2VfbGFfT0JKRUNUUykgXAogCSQobm9kaXN0X2xpYmZmaV9jb252ZW5pZW5jZV9sYV9PQkpFQ1RTKQorQU1fVl9QID0gJChhbV9fdl9QX0BBTV9WQCkKK2FtX192X1BfID0gJChhbV9fdl9QX0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfUF8wID0gZmFsc2UKK2FtX192X1BfMSA9IDoKK0FNX1ZfR0VOID0gJChhbV9fdl9HRU5fQEFNX1ZAKQorYW1fX3ZfR0VOXyA9ICQoYW1fX3ZfR0VOX0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAgICIgJEA7CithbV9fdl9HRU5fMSA9IAorQU1fVl9hdCA9ICQoYW1fX3ZfYXRfQEFNX1ZAKQorYW1fX3ZfYXRfID0gJChhbV9fdl9hdF9AQU1fREVGQVVMVF9WQCkKK2FtX192X2F0XzAgPSBACithbV9fdl9hdF8xID0gCiBERUZBVUxUX0lOQ0xVREVTID0gLUkuQGFtX19pc3JjQAogZGVwY29tcCA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvZGVwY29tcAogYW1fX2RlcGZpbGVzX21heWJlID0gZGVwZmlsZXMKIGFtX19tdiA9IG12IC1mCiBDUFBBU0NPTVBJTEUgPSAkKENDQVMpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSBcCiAJJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DQ0FTRkxBR1MpICQoQ0NBU0ZMQUdTKQotTFRDUFBBU0NPTVBJTEUgPSAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgXAotCS0tbW9kZT1jb21waWxlICQoQ0NBUykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpIFwKLQkkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NDQVNGTEFHUykgJChDQ0FTRkxBR1MpCitMVENQUEFTQ09NUElMRSA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAkKEFNX0xJQlRPT0xGTEFHUykgXAorCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDQVMpICQoREVGUykgXAorCSQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgXAorCSQoQU1fQ0NBU0ZMQUdTKSAkKENDQVNGTEFHUykKK0FNX1ZfQ1BQQVMgPSAkKGFtX192X0NQUEFTX0BBTV9WQCkKK2FtX192X0NQUEFTXyA9ICQoYW1fX3ZfQ1BQQVNfQEFNX0RFRkFVTFRfVkApCithbV9fdl9DUFBBU18wID0gQGVjaG8gIiAgQ1BQQVMgICAiICRAOworYW1fX3ZfQ1BQQVNfMSA9IAogQ09NUElMRSA9ICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSBcCiAJJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQotTFRDT01QSUxFID0gJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIFwKLQktLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgXAotCSQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKK0xUQ09NUElMRSA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAorCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpIFwKKwkkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpIFwKKwkkKEFNX0NGTEFHUykgJChDRkxBR1MpCitBTV9WX0NDID0gJChhbV9fdl9DQ19AQU1fVkApCithbV9fdl9DQ18gPSAkKGFtX192X0NDX0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfQ0NfMCA9IEBlY2hvICIgIENDICAgICAgIiAkQDsKK2FtX192X0NDXzEgPSAKIENDTEQgPSAkKENDKQotTElOSyA9ICQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSBcCi0JLS1tb2RlPWxpbmsgJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpICQoQU1fTERGTEFHUykgXAotCSQoTERGTEFHUykgLW8gJEAKK0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKKwkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIFwKKwkkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKK0FNX1ZfQ0NMRCA9ICQoYW1fX3ZfQ0NMRF9AQU1fVkApCithbV9fdl9DQ0xEXyA9ICQoYW1fX3ZfQ0NMRF9AQU1fREVGQVVMVF9WQCkKK2FtX192X0NDTERfMCA9IEBlY2hvICIgIENDTEQgICAgIiAkQDsKK2FtX192X0NDTERfMSA9IAogU09VUkNFUyA9ICQobGliZmZpX2xhX1NPVVJDRVMpICQobm9kaXN0X2xpYmZmaV9sYV9TT1VSQ0VTKSBcCiAJJChsaWJmZmlfY29udmVuaWVuY2VfbGFfU09VUkNFUykgXAogCSQobm9kaXN0X2xpYmZmaV9jb252ZW5pZW5jZV9sYV9TT1VSQ0VTKQogRElTVF9TT1VSQ0VTID0gJChsaWJmZmlfbGFfU09VUkNFUykgJChsaWJmZmlfY29udmVuaWVuY2VfbGFfU09VUkNFUykKK0FNX1ZfRFZJUFMgPSAkKGFtX192X0RWSVBTX0BBTV9WQCkKK2FtX192X0RWSVBTXyA9ICQoYW1fX3ZfRFZJUFNfQEFNX0RFRkFVTFRfVkApCithbV9fdl9EVklQU18wID0gQGVjaG8gIiAgRFZJUFMgICAiICRAOworYW1fX3ZfRFZJUFNfMSA9IAorQU1fVl9NQUtFSU5GTyA9ICQoYW1fX3ZfTUFLRUlORk9fQEFNX1ZAKQorYW1fX3ZfTUFLRUlORk9fID0gJChhbV9fdl9NQUtFSU5GT19AQU1fREVGQVVMVF9WQCkKK2FtX192X01BS0VJTkZPXzAgPSBAZWNobyAiICBNQUtFSU5GTyIgJEA7CithbV9fdl9NQUtFSU5GT18xID0gCitBTV9WX0lORk9IVE1MID0gJChhbV9fdl9JTkZPSFRNTF9AQU1fVkApCithbV9fdl9JTkZPSFRNTF8gPSAkKGFtX192X0lORk9IVE1MX0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfSU5GT0hUTUxfMCA9IEBlY2hvICIgIElORk9IVE1MIiAkQDsKK2FtX192X0lORk9IVE1MXzEgPSAKK0FNX1ZfVEVYSTJEVkkgPSAkKGFtX192X1RFWEkyRFZJX0BBTV9WQCkKK2FtX192X1RFWEkyRFZJXyA9ICQoYW1fX3ZfVEVYSTJEVklfQEFNX0RFRkFVTFRfVkApCithbV9fdl9URVhJMkRWSV8wID0gQGVjaG8gIiAgVEVYSTJEVkkiICRAOworYW1fX3ZfVEVYSTJEVklfMSA9IAorQU1fVl9URVhJMlBERiA9ICQoYW1fX3ZfVEVYSTJQREZfQEFNX1ZAKQorYW1fX3ZfVEVYSTJQREZfID0gJChhbV9fdl9URVhJMlBERl9AQU1fREVGQVVMVF9WQCkKK2FtX192X1RFWEkyUERGXzAgPSBAZWNobyAiICBURVhJMlBERiIgJEA7CithbV9fdl9URVhJMlBERl8xID0gCitBTV9WX3RleGluZm8gPSAkKGFtX192X3RleGluZm9fQEFNX1ZAKQorYW1fX3ZfdGV4aW5mb18gPSAkKGFtX192X3RleGluZm9fQEFNX0RFRkFVTFRfVkApCithbV9fdl90ZXhpbmZvXzAgPSAtcQorYW1fX3ZfdGV4aW5mb18xID0gCitBTV9WX3RleGlkZXZudWxsID0gJChhbV9fdl90ZXhpZGV2bnVsbF9AQU1fVkApCithbV9fdl90ZXhpZGV2bnVsbF8gPSAkKGFtX192X3RleGlkZXZudWxsX0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfdGV4aWRldm51bGxfMCA9ID4gL2Rldi9udWxsCithbV9fdl90ZXhpZGV2bnVsbF8xID0gCiBJTkZPX0RFUFMgPSAkKHNyY2RpcikvZG9jL2xpYmZmaS5pbmZvCiBhbV9fVEVYSU5GT19URVhfRElSID0gJChzcmNkaXIpCiBEVklTID0gZG9jL2xpYmZmaS5kdmkKQEAgLTI2OCwxMyArMzc1LDE0IEBACiBNQUtFSU5GT0hUTUwgPSAkKE1BS0VJTkZPKSAtLWh0bWwKIEFNX01BS0VJTkZPSFRNTEZMQUdTID0gJChBTV9NQUtFSU5GT0ZMQUdTKQogRFZJUFMgPSBkdmlwcwotUkVDVVJTSVZFX1RBUkdFVFMgPSBhbGwtcmVjdXJzaXZlIGNoZWNrLXJlY3Vyc2l2ZSBkdmktcmVjdXJzaXZlIFwKLQlodG1sLXJlY3Vyc2l2ZSBpbmZvLXJlY3Vyc2l2ZSBpbnN0YWxsLWRhdGEtcmVjdXJzaXZlIFwKLQlpbnN0YWxsLWR2aS1yZWN1cnNpdmUgaW5zdGFsbC1leGVjLXJlY3Vyc2l2ZSBcCi0JaW5zdGFsbC1odG1sLXJlY3Vyc2l2ZSBpbnN0YWxsLWluZm8tcmVjdXJzaXZlIFwKLQlpbnN0YWxsLXBkZi1yZWN1cnNpdmUgaW5zdGFsbC1wcy1yZWN1cnNpdmUgaW5zdGFsbC1yZWN1cnNpdmUgXAotCWluc3RhbGxjaGVjay1yZWN1cnNpdmUgaW5zdGFsbGRpcnMtcmVjdXJzaXZlIHBkZi1yZWN1cnNpdmUgXAotCXBzLXJlY3Vyc2l2ZSB1bmluc3RhbGwtcmVjdXJzaXZlCitSRUNVUlNJVkVfVEFSR0VUUyA9IGFsbC1yZWN1cnNpdmUgY2hlY2stcmVjdXJzaXZlIGNzY29wZWxpc3QtcmVjdXJzaXZlIFwKKwljdGFncy1yZWN1cnNpdmUgZHZpLXJlY3Vyc2l2ZSBodG1sLXJlY3Vyc2l2ZSBpbmZvLXJlY3Vyc2l2ZSBcCisJaW5zdGFsbC1kYXRhLXJlY3Vyc2l2ZSBpbnN0YWxsLWR2aS1yZWN1cnNpdmUgXAorCWluc3RhbGwtZXhlYy1yZWN1cnNpdmUgaW5zdGFsbC1odG1sLXJlY3Vyc2l2ZSBcCisJaW5zdGFsbC1pbmZvLXJlY3Vyc2l2ZSBpbnN0YWxsLXBkZi1yZWN1cnNpdmUgXAorCWluc3RhbGwtcHMtcmVjdXJzaXZlIGluc3RhbGwtcmVjdXJzaXZlIGluc3RhbGxjaGVjay1yZWN1cnNpdmUgXAorCWluc3RhbGxkaXJzLXJlY3Vyc2l2ZSBwZGYtcmVjdXJzaXZlIHBzLXJlY3Vyc2l2ZSBcCisJdGFncy1yZWN1cnNpdmUgdW5pbnN0YWxsLXJlY3Vyc2l2ZQogYW1fX2Nhbl9ydW5faW5zdGFsbGluZm8gPSBcCiAgIGNhc2UgJCRBTV9VUERBVEVfSU5GT19ESVIgaW4gXAogICAgIG58bm98Tk8pIGZhbHNlOzsgXApAQCAtMjgzLDkgKzM5MSwzMCBAQAogREFUQSA9ICQocGtnY29uZmlnX0RBVEEpCiBSRUNVUlNJVkVfQ0xFQU5fVEFSR0VUUyA9IG1vc3RseWNsZWFuLXJlY3Vyc2l2ZSBjbGVhbi1yZWN1cnNpdmUJXAogICBkaXN0Y2xlYW4tcmVjdXJzaXZlIG1haW50YWluZXItY2xlYW4tcmVjdXJzaXZlCi1BTV9SRUNVUlNJVkVfVEFSR0VUUyA9ICQoUkVDVVJTSVZFX1RBUkdFVFM6LXJlY3Vyc2l2ZT0pIFwKLQkkKFJFQ1VSU0lWRV9DTEVBTl9UQVJHRVRTOi1yZWN1cnNpdmU9KSB0YWdzIFRBR1MgY3RhZ3MgQ1RBR1MgXAorYW1fX3JlY3Vyc2l2ZV90YXJnZXRzID0gXAorICAkKFJFQ1VSU0lWRV9UQVJHRVRTKSBcCisgICQoUkVDVVJTSVZFX0NMRUFOX1RBUkdFVFMpIFwKKyAgJChhbV9fZXh0cmFfcmVjdXJzaXZlX3RhcmdldHMpCitBTV9SRUNVUlNJVkVfVEFSR0VUUyA9ICQoYW1fX3JlY3Vyc2l2ZV90YXJnZXRzOi1yZWN1cnNpdmU9KSBUQUdTIENUQUdTIFwKIAljc2NvcGUgZGlzdGRpciBkaXN0IGRpc3QtYWxsIGRpc3RjaGVjaworYW1fX3RhZ2dlZF9maWxlcyA9ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKFRBR1NfRklMRVMpIFwKKwkkKExJU1ApZmZpY29uZmlnLmguaW4KKyMgUmVhZCBhIGxpc3Qgb2YgbmV3bGluZS1zZXBhcmF0ZWQgc3RyaW5ncyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCwKKyMgYW5kIHByaW50IGVhY2ggb2YgdGhlbSBvbmNlLCB3aXRob3V0IGR1cGxpY2F0ZXMuICBJbnB1dCBvcmRlciBpcworIyAqbm90KiBwcmVzZXJ2ZWQuCithbV9fdW5pcXVpZnlfaW5wdXQgPSAkKEFXSykgJ1wKKyAgQkVHSU4geyBub25lbXB0eSA9IDA7IH0gXAorICB7IGl0ZW1zWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGl0ZW1zKSBwcmludCBpOyB9OyB9IFwKKycKKyMgTWFrZSBzdXJlIHRoZSBsaXN0IG9mIHNvdXJjZXMgaXMgdW5pcXVlLiAgVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSwKKyMgZS5nLiwgdGhlIHNhbWUgc291cmNlIGZpbGUgbWlnaHQgYmUgc2hhcmVkIGFtb25nIF9TT1VSQ0VTIHZhcmlhYmxlcworIyBmb3IgZGlmZmVyZW50IHByb2dyYW1zL2xpYnJhcmllcy4KK2FtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMgPSBcCisgIGxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCisgIHVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisgIGRvbmUgfCAkKGFtX191bmlxdWlmeV9pbnB1dClgCiBFVEFHUyA9IGV0YWdzCiBDVEFHUyA9IGN0YWdzCiBDU0NPUEUgPSBjc2NvcGUKQEAgLTMzNSw2ICs0NjQsNyBAQAogQUNMT0NBTCA9IEBBQ0xPQ0FMQAogQUxMT0NBID0gQEFMTE9DQUAKIEFNVEFSID0gQEFNVEFSQAorQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACiBBTV9MVExERkxBR1MgPSBAQU1fTFRMREZMQUdTQAogQU1fUlVOVEVTVEZMQUdTID0gQEFNX1JVTlRFU1RGTEFHU0AKIEFSID0gQEFSQApAQCAtMzUwLDYgKzQ4MCwxMCBAQAogQ0ZMQUdTID0gQENGTEFHU0AKIENQUCA9IEBDUFBACiBDUFBGTEFHUyA9IEBDUFBGTEFHU0AKK0NYWCA9IEBDWFhACitDWFhDUFAgPSBAQ1hYQ1BQQAorQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAorQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACiBDWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAogREVGUyA9IEBERUZTQAogREVQRElSID0gQERFUERJUkAKQEAgLTM2NSw2ICs0OTksNyBAQAogRkdSRVAgPSBARkdSRVBACiBHUkVQID0gQEdSRVBACiBIQVZFX0xPTkdfRE9VQkxFID0gQEhBVkVfTE9OR19ET1VCTEVACitIQVZFX0xPTkdfRE9VQkxFX1ZBUklBTlQgPSBASEFWRV9MT05HX0RPVUJMRV9WQVJJQU5UQAogSU5TVEFMTCA9IEBJTlNUQUxMQAogSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKIElOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACkBAIC00MTEsNiArNTQ2LDcgQEAKIGFic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAogYWNfY3RfQVIgPSBAYWNfY3RfQVJACiBhY19jdF9DQyA9IEBhY19jdF9DQ0AKK2FjX2N0X0NYWCA9IEBhY19jdF9DWFhACiBhY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACiBhbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKIGFtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACkBAIC00NjgsMTAgKzYwNCwxMSBAQAogQVVUT01BS0VfT1BUSU9OUyA9IGZvcmVpZ24gc3ViZGlyLW9iamVjdHMKIEFDTE9DQUxfQU1GTEFHUyA9IC1JIG00CiBTVUJESVJTID0gaW5jbHVkZSB0ZXN0c3VpdGUgbWFuCi1FWFRSQV9ESVNUID0gTElDRU5TRSBDaGFuZ2VMb2cudjEgQ2hhbmdlTG9nLmxpYmdjaiBjb25maWd1cmUuaG9zdAlcCitFWFRSQV9ESVNUID0gTElDRU5TRSBDaGFuZ2VMb2cudjEgQ2hhbmdlTG9nLmxpYmdjagkJCVwKIAkgc3JjL2FhcmNoNjQvZmZpLmMgc3JjL2FhcmNoNjQvZmZpdGFyZ2V0Lmggc3JjL2FhcmNoNjQvc3lzdi5TCVwKLQkgYnVpbGQtaW9zLnNoIHNyYy9hbHBoYS9mZmkuYyBzcmMvYWxwaGEvb3NmLlMJCQlcCi0JIHNyYy9hbHBoYS9mZml0YXJnZXQuaCBzcmMvYXJtL2ZmaS5jIHNyYy9hcm0vc3lzdi5TCQlcCisJIHNyYy9hbHBoYS9mZmkuYyBzcmMvYWxwaGEvb3NmLlMJCQlcCisJIHNyYy9hbHBoYS9mZml0YXJnZXQuaCBzcmMvYXJjL2ZmaS5jIHNyYy9hcmMvYXJjb21wYWN0LlMJXAorCSBzcmMvYXJjL2ZmaXRhcmdldC5oIHNyYy9hcm0vZmZpLmMgc3JjL2FybS9zeXN2LlMJCVwKIAkgc3JjL2FybS9mZml0YXJnZXQuaCBzcmMvYXZyMzIvZmZpLmMgc3JjL2F2cjMyL3N5c3YuUwkJXAogCSBzcmMvYXZyMzIvZmZpdGFyZ2V0Lmggc3JjL2NyaXMvZmZpLmMgc3JjL2NyaXMvc3lzdi5TCQlcCiAJIHNyYy9jcmlzL2ZmaXRhcmdldC5oIHNyYy9pYTY0L2ZmaS5jIHNyYy9pYTY0L2ZmaXRhcmdldC5oCVwKQEAgLTQ4MSw4ICs2MTgsMTIgQEAKIAkgc3JjL21veGllL2ZmaXRhcmdldC5oIHNyYy9tb3hpZS9lYWJpLlMgc3JjL21pcHMvZmZpdGFyZ2V0LmgJXAogCSBzcmMvbTMyci9mZmkuYyBzcmMvbTMyci9zeXN2LlMgc3JjL20zMnIvZmZpdGFyZ2V0LmgJCVwKIAkgc3JjL202OGsvZmZpLmMgc3JjL202OGsvc3lzdi5TIHNyYy9tNjhrL2ZmaXRhcmdldC5oCQlcCisJIHNyYy9tODhrL2ZmaS5jIHNyYy9tODhrL29ic2QuUyBzcmMvbTg4ay9mZml0YXJnZXQuaAkJXAogCSBzcmMvbWljcm9ibGF6ZS9mZmkuYyBzcmMvbWljcm9ibGF6ZS9zeXN2LlMJCQlcCi0JIHNyYy9taWNyb2JsYXplL2ZmaXRhcmdldC5oIHNyYy9wb3dlcnBjL2ZmaS5jCQkJXAorCSBzcmMvbWljcm9ibGF6ZS9mZml0YXJnZXQuaAkJCQkJXAorCSBzcmMvbmlvczIvZmZpLmMgc3JjL25pb3MyL2ZmaXRhcmdldC5oIHNyYy9uaW9zMi9zeXN2LlMJCVwKKwkgc3JjL3Bvd2VycGMvZmZpLmMgc3JjL3Bvd2VycGMvZmZpX3Bvd2VycGMuaAkJCVwKKwkgc3JjL3Bvd2VycGMvZmZpX3N5c3YuYyBzcmMvcG93ZXJwYy9mZmlfbGludXg2NC5jCQlcCiAJIHNyYy9wb3dlcnBjL3N5c3YuUyBzcmMvcG93ZXJwYy9saW51eDY0LlMJCQlcCiAJIHNyYy9wb3dlcnBjL2xpbnV4NjRfY2xvc3VyZS5TIHNyYy9wb3dlcnBjL3BwY19jbG9zdXJlLlMJXAogCSBzcmMvcG93ZXJwYy9hc20uaCBzcmMvcG93ZXJwYy9haXguUyBzcmMvcG93ZXJwYy9kYXJ3aW4uUwlcCkBAIC01MDAsMTQgKzY0MSwxNCBAQAogCSBzcmMvYmZpbi9mZml0YXJnZXQuaCBzcmMvYmZpbi9zeXN2LlMgc3JjL2Zydi9lYWJpLlMJCVwKIAkgc3JjL2Zydi9mZml0YXJnZXQuaCBzcmMvZGxtYWxsb2MuYyBzcmMvdGlsZS9mZmkuYwkJXAogCSBzcmMvdGlsZS9mZml0YXJnZXQuaCBzcmMvdGlsZS90aWxlLlMgbGlidG9vbC12ZXJzaW9uCQlcCisJIHNyYy92YXgvZmZpLmMgc3JjL3ZheC9mZml0YXJnZXQuaCBzcmMvdmF4L2VsZmJzZC5TCQlcCiAJIHNyYy94dGVuc2EvZmZpdGFyZ2V0Lmggc3JjL3h0ZW5zYS9mZmkuYyBzcmMveHRlbnNhL3N5c3YuUwlcCiAJIENoYW5nZUxvZy5saWJmZmkgbTQvbGlidG9vbC5tNCBtNC9sdH5vYnNvbGV0ZS5tNAkJXAogCSBtNC9sdG9wdGlvbnMubTQgbTQvbHRzdWdhci5tNCBtNC9sdHZlcnNpb24ubTQJCQlcCiAJIG00L2x0dmVyc2lvbi5tNCBzcmMvYXJtL2dlbnRyYW1wLnNoIHNyYy9kZWJ1Zy5jIG1zdmNjLnNoCVwKLQkgZ2VuZXJhdGUtaW9zLXNvdXJjZS1hbmQtaGVhZGVycy5weQkJCQlcCi0JIGdlbmVyYXRlLW9zeC1zb3VyY2UtYW5kLWhlYWRlcnMucHkJCQkJXAorCSBnZW5lcmF0ZS1kYXJ3aW4tc291cmNlLWFuZC1oZWFkZXJzLnB5CQkJCVwKIAkgbGliZmZpLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogc3JjL2FybS90cmFtcG9saW5lLlMJCVwKLQkgbGlidG9vbC1sZGZsYWdzCisJIGxpYnRvb2wtbGRmbGFncyBDaGFuZ2VMb2cubGliZmZpLTMuMQogCiBpbmZvX1RFWElORk9TID0gZG9jL2xpYmZmaS50ZXhpCiAKQEAgLTUxNSwzOSArNjU2LDM5IEBACiAjIHZhbHVlcyBkZWZpbmVkIGluIHRlcm1zIG9mIG1ha2UgdmFyaWFibGVzLCBhcyBpcyB0aGUgY2FzZSBmb3IgQ0MgYW5kCiAjIGZyaWVuZHMgd2hlbiB3ZSBhcmUgY2FsbGVkIGZyb20gdGhlIHRvcCBsZXZlbCBNYWtlZmlsZS4KIEFNX01BS0VGTEFHUyA9IFwKLQkiQVJfRkxBR1M9JChBUl9GTEFHUykiIFwKLQkiQ0NfRk9SX0JVSUxEPSQoQ0NfRk9SX0JVSUxEKSIgXAotCSJDRkxBR1M9JChDRkxBR1MpIiBcCi0JIkNYWEZMQUdTPSQoQ1hYRkxBR1MpIiBcCi0JIkNGTEFHU19GT1JfQlVJTEQ9JChDRkxBR1NfRk9SX0JVSUxEKSIgXAotCSJDRkxBR1NfRk9SX1RBUkdFVD0kKENGTEFHU19GT1JfVEFSR0VUKSIgXAotCSJJTlNUQUxMPSQoSU5TVEFMTCkiIFwKLQkiSU5TVEFMTF9EQVRBPSQoSU5TVEFMTF9EQVRBKSIgXAotCSJJTlNUQUxMX1BST0dSQU09JChJTlNUQUxMX1BST0dSQU0pIiBcCi0JIklOU1RBTExfU0NSSVBUPSQoSU5TVEFMTF9TQ1JJUFQpIiBcCi0JIkpDMUZMQUdTPSQoSkMxRkxBR1MpIiBcCi0JIkxERkxBR1M9JChMREZMQUdTKSIgXAotCSJMSUJDRkxBR1M9JChMSUJDRkxBR1MpIiBcCi0JIkxJQkNGTEFHU19GT1JfVEFSR0VUPSQoTElCQ0ZMQUdTX0ZPUl9UQVJHRVQpIiBcCi0JIk1BS0U9JChNQUtFKSIgXAotCSJNQUtFSU5GTz0kKE1BS0VJTkZPKSAkKE1BS0VJTkZPRkxBR1MpIiBcCi0JIlBJQ0ZMQUc9JChQSUNGTEFHKSIgXAotCSJQSUNGTEFHX0ZPUl9UQVJHRVQ9JChQSUNGTEFHX0ZPUl9UQVJHRVQpIiBcCi0JIlJVTlRFU1RGTEFHUz0kKFJVTlRFU1RGTEFHUykiIFwKLQkiU0hFTEw9JChTSEVMTCkiIFwKLQkiZXhlY19wcmVmaXg9JChleGVjX3ByZWZpeCkiIFwKLQkiaW5mb2Rpcj0kKGluZm9kaXIpIiBcCi0JImxpYmRpcj0kKGxpYmRpcikiIFwKLQkibWFuZGlyPSQobWFuZGlyKSIgXAotCSJwcmVmaXg9JChwcmVmaXgpIiBcCi0JIkFSPSQoQVIpIiBcCi0JIkFTPSQoQVMpIiBcCi0JIkNDPSQoQ0MpIiBcCi0JIkNYWD0kKENYWCkiIFwKLQkiTEQ9JChMRCkiIFwKLQkiTk09JChOTSkiIFwKLQkiUkFOTElCPSQoUkFOTElCKSIgXAotCSJERVNURElSPSQoREVTVERJUikiCisJJ0FSX0ZMQUdTPSQoQVJfRkxBR1MpJyBcCisJJ0NDX0ZPUl9CVUlMRD0kKENDX0ZPUl9CVUlMRCknIFwKKwknQ0ZMQUdTPSQoQ0ZMQUdTKScgXAorCSdDWFhGTEFHUz0kKENYWEZMQUdTKScgXAorCSdDRkxBR1NfRk9SX0JVSUxEPSQoQ0ZMQUdTX0ZPUl9CVUlMRCknIFwKKwknQ0ZMQUdTX0ZPUl9UQVJHRVQ9JChDRkxBR1NfRk9SX1RBUkdFVCknIFwKKwknSU5TVEFMTD0kKElOU1RBTEwpJyBcCisJJ0lOU1RBTExfREFUQT0kKElOU1RBTExfREFUQSknIFwKKwknSU5TVEFMTF9QUk9HUkFNPSQoSU5TVEFMTF9QUk9HUkFNKScgXAorCSdJTlNUQUxMX1NDUklQVD0kKElOU1RBTExfU0NSSVBUKScgXAorCSdKQzFGTEFHUz0kKEpDMUZMQUdTKScgXAorCSdMREZMQUdTPSQoTERGTEFHUyknIFwKKwknTElCQ0ZMQUdTPSQoTElCQ0ZMQUdTKScgXAorCSdMSUJDRkxBR1NfRk9SX1RBUkdFVD0kKExJQkNGTEFHU19GT1JfVEFSR0VUKScgXAorCSdNQUtFPSQoTUFLRSknIFwKKwknTUFLRUlORk89JChNQUtFSU5GTykgJChNQUtFSU5GT0ZMQUdTKScgXAorCSdQSUNGTEFHPSQoUElDRkxBRyknIFwKKwknUElDRkxBR19GT1JfVEFSR0VUPSQoUElDRkxBR19GT1JfVEFSR0VUKScgXAorCSdSVU5URVNURkxBR1M9JChSVU5URVNURkxBR1MpJyBcCisJJ1NIRUxMPSQoU0hFTEwpJyBcCisJJ2V4ZWNfcHJlZml4PSQoZXhlY19wcmVmaXgpJyBcCisJJ2luZm9kaXI9JChpbmZvZGlyKScgXAorCSdsaWJkaXI9JChsaWJkaXIpJyBcCisJJ21hbmRpcj0kKG1hbmRpciknIFwKKwkncHJlZml4PSQocHJlZml4KScgXAorCSdBUj0kKEFSKScgXAorCSdBUz0kKEFTKScgXAorCSdDQz0kKENDKScgXAorCSdDWFg9JChDWFgpJyBcCisJJ0xEPSQoTEQpJyBcCisJJ05NPSQoTk0pJyBcCisJJ1JBTkxJQj0kKFJBTkxJQiknIFwKKwknREVTVERJUj0kKERFU1RESVIpJwogCiAKICMgU3ViZGlyIHJ1bGVzIHJlbHkgb24gJChGTEFHU19UT19QQVNTKQpAQCAtNTcxLDEwICs3MTIsMTMgQEAKIAkkKGFtX19hcHBlbmRfMjQpICQoYW1fX2FwcGVuZF8yNSkgJChhbV9fYXBwZW5kXzI2KSBcCiAJJChhbV9fYXBwZW5kXzI3KSAkKGFtX19hcHBlbmRfMjgpICQoYW1fX2FwcGVuZF8yOSkgXAogCSQoYW1fX2FwcGVuZF8zMCkgJChhbV9fYXBwZW5kXzMxKSAkKGFtX19hcHBlbmRfMzIpIFwKLQkkKGFtX19hcHBlbmRfMzMpICQoYW1fX2FwcGVuZF8zNCkKKwkkKGFtX19hcHBlbmRfMzMpICQoYW1fX2FwcGVuZF8zNCkgJChhbV9fYXBwZW5kXzM1KSBcCisJJChhbV9fYXBwZW5kXzM2KSAkKGFtX19hcHBlbmRfMzcpICQoYW1fX2FwcGVuZF8zOCkgXAorCSQoYW1fX2FwcGVuZF8zOSkKIGxpYmZmaV9jb252ZW5pZW5jZV9sYV9TT1VSQ0VTID0gJChsaWJmZmlfbGFfU09VUkNFUykKIG5vZGlzdF9saWJmZmlfY29udmVuaWVuY2VfbGFfU09VUkNFUyA9ICQobm9kaXN0X2xpYmZmaV9sYV9TT1VSQ0VTKQogTFRMREZMQUdTID0gJChzaGVsbCAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2xpYnRvb2wtbGRmbGFncyAkKExERkxBR1MpKQorQU1fQ0ZMQUdTID0gJChhbV9fYXBwZW5kXzQwKQogbGliZmZpX2xhX0xERkxBR1MgPSAtbm8tdW5kZWZpbmVkIC12ZXJzaW9uLWluZm8gYGdyZXAgLXYgJ15cIycgJChzcmNkaXIpL2xpYnRvb2wtdmVyc2lvbmAgJChMVExERkxBR1MpICQoQU1fTFRMREZMQUdTKQogQU1fQ1BQRkxBR1MgPSAtSS4gLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGUgLUlpbmNsdWRlIC1JJCh0b3Bfc3JjZGlyKS9zcmMKIEFNX0NDQVNGTEFHUyA9ICQoQU1fQ1BQRkxBR1MpCkBAIC02NDUsNiArNzg5LDcgQEAKIAkgIGVjaG8gcm0gLWYgJCR7bG9jc307IFwKIAkgIHJtIC1mICQke2xvY3N9OyBcCiAJfQorCiBpbnN0YWxsLXRvb2xleGVjbGliTFRMSUJSQVJJRVM6ICQodG9vbGV4ZWNsaWJfTFRMSUJSQVJJRVMpCiAJQCQoTk9STUFMX0lOU1RBTEwpCiAJQGxpc3Q9JyQodG9vbGV4ZWNsaWJfTFRMSUJSQVJJRVMpJzsgdGVzdCAtbiAiJCh0b29sZXhlY2xpYmRpcikiIHx8IGxpc3Q9OyBcCkBAIC03MjMsMTAgKzg2OCwxMCBAQAogCXNyYy94ODYvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQogc3JjL3g4Ni9zeXN2LmxvOiBzcmMveDg2LyQoYW1fX2RpcnN0YW1wKSBcCiAJc3JjL3g4Ni8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCi1zcmMveDg2L2ZyZWVic2QubG86IHNyYy94ODYvJChhbV9fZGlyc3RhbXApIFwKLQlzcmMveDg2LyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKIHNyYy94ODYvd2luMzIubG86IHNyYy94ODYvJChhbV9fZGlyc3RhbXApIFwKIAlzcmMveDg2LyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKK3NyYy94ODYvZnJlZWJzZC5sbzogc3JjL3g4Ni8kKGFtX19kaXJzdGFtcCkgXAorCXNyYy94ODYvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQogc3JjL3g4Ni93aW42NC5sbzogc3JjL3g4Ni8kKGFtX19kaXJzdGFtcCkgXAogCXNyYy94ODYvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQogc3JjL3g4Ni9kYXJ3aW4ubG86IHNyYy94ODYvJChhbV9fZGlyc3RhbXApIFwKQEAgLTc4Nyw2ICs5MzIsMTYgQEAKIAlzcmMvbTY4ay8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCiBzcmMvbTY4ay9zeXN2LmxvOiBzcmMvbTY4ay8kKGFtX19kaXJzdGFtcCkgXAogCXNyYy9tNjhrLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKK3NyYy9tODhrLyQoYW1fX2RpcnN0YW1wKToKKwlAJChNS0RJUl9QKSBzcmMvbTg4aworCUA6ID4gc3JjL204OGsvJChhbV9fZGlyc3RhbXApCitzcmMvbTg4ay8kKERFUERJUikvJChhbV9fZGlyc3RhbXApOgorCUAkKE1LRElSX1ApIHNyYy9tODhrLyQoREVQRElSKQorCUA6ID4gc3JjL204OGsvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQorc3JjL204OGsvZmZpLmxvOiBzcmMvbTg4ay8kKGFtX19kaXJzdGFtcCkgXAorCXNyYy9tODhrLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKK3NyYy9tODhrL29ic2QubG86IHNyYy9tODhrLyQoYW1fX2RpcnN0YW1wKSBcCisJc3JjL204OGsvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQogc3JjL21veGllLyQoYW1fX2RpcnN0YW1wKToKIAlAJChNS0RJUl9QKSBzcmMvbW94aWUKIAlAOiA+IHNyYy9tb3hpZS8kKGFtX19kaXJzdGFtcCkKQEAgLTgwNyw2ICs5NjIsMTYgQEAKIAlzcmMvbWljcm9ibGF6ZS8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCiBzcmMvbWljcm9ibGF6ZS9zeXN2LmxvOiBzcmMvbWljcm9ibGF6ZS8kKGFtX19kaXJzdGFtcCkgXAogCXNyYy9taWNyb2JsYXplLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKK3NyYy9uaW9zMi8kKGFtX19kaXJzdGFtcCk6CisJQCQoTUtESVJfUCkgc3JjL25pb3MyCisJQDogPiBzcmMvbmlvczIvJChhbV9fZGlyc3RhbXApCitzcmMvbmlvczIvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKToKKwlAJChNS0RJUl9QKSBzcmMvbmlvczIvJChERVBESVIpCisJQDogPiBzcmMvbmlvczIvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQorc3JjL25pb3MyL3N5c3YubG86IHNyYy9uaW9zMi8kKGFtX19kaXJzdGFtcCkgXAorCXNyYy9uaW9zMi8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCitzcmMvbmlvczIvZmZpLmxvOiBzcmMvbmlvczIvJChhbV9fZGlyc3RhbXApIFwKKwlzcmMvbmlvczIvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQogc3JjL3Bvd2VycGMvJChhbV9fZGlyc3RhbXApOgogCUAkKE1LRElSX1ApIHNyYy9wb3dlcnBjCiAJQDogPiBzcmMvcG93ZXJwYy8kKGFtX19kaXJzdGFtcCkKQEAgLTgxNSw2ICs5ODAsMTAgQEAKIAlAOiA+IHNyYy9wb3dlcnBjLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKIHNyYy9wb3dlcnBjL2ZmaS5sbzogc3JjL3Bvd2VycGMvJChhbV9fZGlyc3RhbXApIFwKIAlzcmMvcG93ZXJwYy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCitzcmMvcG93ZXJwYy9mZmlfc3lzdi5sbzogc3JjL3Bvd2VycGMvJChhbV9fZGlyc3RhbXApIFwKKwlzcmMvcG93ZXJwYy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCitzcmMvcG93ZXJwYy9mZmlfbGludXg2NC5sbzogc3JjL3Bvd2VycGMvJChhbV9fZGlyc3RhbXApIFwKKwlzcmMvcG93ZXJwYy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCiBzcmMvcG93ZXJwYy9zeXN2LmxvOiBzcmMvcG93ZXJwYy8kKGFtX19kaXJzdGFtcCkgXAogCXNyYy9wb3dlcnBjLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKIHNyYy9wb3dlcnBjL3BwY19jbG9zdXJlLmxvOiBzcmMvcG93ZXJwYy8kKGFtX19kaXJzdGFtcCkgXApAQCAtODQzLDYgKzEwMTIsMTYgQEAKIAlzcmMvYWFyY2g2NC8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCiBzcmMvYWFyY2g2NC9mZmkubG86IHNyYy9hYXJjaDY0LyQoYW1fX2RpcnN0YW1wKSBcCiAJc3JjL2FhcmNoNjQvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQorc3JjL2FyYy8kKGFtX19kaXJzdGFtcCk6CisJQCQoTUtESVJfUCkgc3JjL2FyYworCUA6ID4gc3JjL2FyYy8kKGFtX19kaXJzdGFtcCkKK3NyYy9hcmMvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKToKKwlAJChNS0RJUl9QKSBzcmMvYXJjLyQoREVQRElSKQorCUA6ID4gc3JjL2FyYy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCitzcmMvYXJjL2FyY29tcGFjdC5sbzogc3JjL2FyYy8kKGFtX19kaXJzdGFtcCkgXAorCXNyYy9hcmMvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQorc3JjL2FyYy9mZmkubG86IHNyYy9hcmMvJChhbV9fZGlyc3RhbXApIFwKKwlzcmMvYXJjLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKIHNyYy9hcm0vJChhbV9fZGlyc3RhbXApOgogCUAkKE1LRElSX1ApIHNyYy9hcm0KIAlAOiA+IHNyYy9hcm0vJChhbV9fZGlyc3RhbXApCkBAIC05NTcsMTAgKzExMzYsMjIgQEAKIAlzcmMvbWV0YWcvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQogc3JjL21ldGFnL2ZmaS5sbzogc3JjL21ldGFnLyQoYW1fX2RpcnN0YW1wKSBcCiAJc3JjL21ldGFnLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKK3NyYy92YXgvJChhbV9fZGlyc3RhbXApOgorCUAkKE1LRElSX1ApIHNyYy92YXgKKwlAOiA+IHNyYy92YXgvJChhbV9fZGlyc3RhbXApCitzcmMvdmF4LyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCk6CisJQCQoTUtESVJfUCkgc3JjL3ZheC8kKERFUERJUikKKwlAOiA+IHNyYy92YXgvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQorc3JjL3ZheC9lbGZic2QubG86IHNyYy92YXgvJChhbV9fZGlyc3RhbXApIFwKKwlzcmMvdmF4LyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKK3NyYy92YXgvZmZpLmxvOiBzcmMvdmF4LyQoYW1fX2RpcnN0YW1wKSBcCisJc3JjL3ZheC8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCisKIGxpYmZmaS5sYTogJChsaWJmZmlfbGFfT0JKRUNUUykgJChsaWJmZmlfbGFfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2xpYmZmaV9sYV9ERVBFTkRFTkNJRVMpIAotCSQobGliZmZpX2xhX0xJTkspIC1ycGF0aCAkKHRvb2xleGVjbGliZGlyKSAkKGxpYmZmaV9sYV9PQkpFQ1RTKSAkKGxpYmZmaV9sYV9MSUJBREQpICQoTElCUykKKwkkKEFNX1ZfQ0NMRCkkKGxpYmZmaV9sYV9MSU5LKSAtcnBhdGggJCh0b29sZXhlY2xpYmRpcikgJChsaWJmZmlfbGFfT0JKRUNUUykgJChsaWJmZmlfbGFfTElCQUREKSAkKExJQlMpCisKIGxpYmZmaV9jb252ZW5pZW5jZS5sYTogJChsaWJmZmlfY29udmVuaWVuY2VfbGFfT0JKRUNUUykgJChsaWJmZmlfY29udmVuaWVuY2VfbGFfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2xpYmZmaV9jb252ZW5pZW5jZV9sYV9ERVBFTkRFTkNJRVMpIAotCSQoTElOSykgICQobGliZmZpX2NvbnZlbmllbmNlX2xhX09CSkVDVFMpICQobGliZmZpX2NvbnZlbmllbmNlX2xhX0xJQkFERCkgJChMSUJTKQorCSQoQU1fVl9DQ0xEKSQoTElOSykgICQobGliZmZpX2NvbnZlbmllbmNlX2xhX09CSkVDVFMpICQobGliZmZpX2NvbnZlbmllbmNlX2xhX0xJQkFERCkgJChMSUJTKQogCiBtb3N0bHljbGVhbi1jb21waWxlOgogCS1ybSAtZiAqLiQoT0JKRVhUKQpAQCAtOTcwLDYgKzExNjEsOCBAQAogCS1ybSAtZiBzcmMvYWFyY2g2NC8qLmxvCiAJLXJtIC1mIHNyYy9hbHBoYS8qLiQoT0JKRVhUKQogCS1ybSAtZiBzcmMvYWxwaGEvKi5sbworCS1ybSAtZiBzcmMvYXJjLyouJChPQkpFWFQpCisJLXJtIC1mIHNyYy9hcmMvKi5sbwogCS1ybSAtZiBzcmMvYXJtLyouJChPQkpFWFQpCiAJLXJtIC1mIHNyYy9hcm0vKi5sbwogCS1ybSAtZiBzcmMvYXZyMzIvKi4kKE9CSkVYVCkKQEAgLTk4Niw2ICsxMTc5LDggQEAKIAktcm0gLWYgc3JjL20zMnIvKi5sbwogCS1ybSAtZiBzcmMvbTY4ay8qLiQoT0JKRVhUKQogCS1ybSAtZiBzcmMvbTY4ay8qLmxvCisJLXJtIC1mIHNyYy9tODhrLyouJChPQkpFWFQpCisJLXJtIC1mIHNyYy9tODhrLyoubG8KIAktcm0gLWYgc3JjL21ldGFnLyouJChPQkpFWFQpCiAJLXJtIC1mIHNyYy9tZXRhZy8qLmxvCiAJLXJtIC1mIHNyYy9taWNyb2JsYXplLyouJChPQkpFWFQpCkBAIC05OTQsNiArMTE4OSw4IEBACiAJLXJtIC1mIHNyYy9taXBzLyoubG8KIAktcm0gLWYgc3JjL21veGllLyouJChPQkpFWFQpCiAJLXJtIC1mIHNyYy9tb3hpZS8qLmxvCisJLXJtIC1mIHNyYy9uaW9zMi8qLiQoT0JKRVhUKQorCS1ybSAtZiBzcmMvbmlvczIvKi5sbwogCS1ybSAtZiBzcmMvcGEvKi4kKE9CSkVYVCkKIAktcm0gLWYgc3JjL3BhLyoubG8KIAktcm0gLWYgc3JjL3Bvd2VycGMvKi4kKE9CSkVYVCkKQEAgLTEwMDgsNiArMTIwNSw4IEBACiAJLXJtIC1mIHNyYy9zcGFyYy8qLmxvCiAJLXJtIC1mIHNyYy90aWxlLyouJChPQkpFWFQpCiAJLXJtIC1mIHNyYy90aWxlLyoubG8KKwktcm0gLWYgc3JjL3ZheC8qLiQoT0JKRVhUKQorCS1ybSAtZiBzcmMvdmF4LyoubG8KIAktcm0gLWYgc3JjL3g4Ni8qLiQoT0JKRVhUKQogCS1ybSAtZiBzcmMveDg2LyoubG8KIAktcm0gLWYgc3JjL3h0ZW5zYS8qLiQoT0JKRVhUKQpAQCAtMTAyNiw2ICsxMjI1LDggQEAKIEBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBzcmMvYWFyY2g2NC8kKERFUERJUikvc3lzdi5QbG9AYW1fX3F1b3RlQAogQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQHNyYy9hbHBoYS8kKERFUERJUikvZmZpLlBsb0BhbV9fcXVvdGVACiBAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAc3JjL2FscGhhLyQoREVQRElSKS9vc2YuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBzcmMvYXJjLyQoREVQRElSKS9hcmNvbXBhY3QuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBzcmMvYXJjLyQoREVQRElSKS9mZmkuUGxvQGFtX19xdW90ZUAKIEBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBzcmMvYXJtLyQoREVQRElSKS9mZmkuUGxvQGFtX19xdW90ZUAKIEBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBzcmMvYXJtLyQoREVQRElSKS9zeXN2LlBsb0BhbV9fcXVvdGVACiBAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAc3JjL2FybS8kKERFUERJUikvdHJhbXBvbGluZS5QbG9AYW1fX3F1b3RlQApAQCAtMTA0Myw2ICsxMjQ0LDggQEAKIEBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBzcmMvbTMyci8kKERFUERJUikvc3lzdi5QbG9AYW1fX3F1b3RlQAogQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQHNyYy9tNjhrLyQoREVQRElSKS9mZmkuUGxvQGFtX19xdW90ZUAKIEBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBzcmMvbTY4ay8kKERFUERJUikvc3lzdi5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQHNyYy9tODhrLyQoREVQRElSKS9mZmkuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBzcmMvbTg4ay8kKERFUERJUikvb2JzZC5QbG9AYW1fX3F1b3RlQAogQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQHNyYy9tZXRhZy8kKERFUERJUikvZmZpLlBsb0BhbV9fcXVvdGVACiBAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAc3JjL21ldGFnLyQoREVQRElSKS9zeXN2LlBsb0BhbV9fcXVvdGVACiBAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAc3JjL21pY3JvYmxhemUvJChERVBESVIpL2ZmaS5QbG9AYW1fX3F1b3RlQApAQCAtMTA1Miw2ICsxMjU1LDggQEAKIEBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBzcmMvbWlwcy8kKERFUERJUikvbzMyLlBsb0BhbV9fcXVvdGVACiBAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAc3JjL21veGllLyQoREVQRElSKS9lYWJpLlBsb0BhbV9fcXVvdGVACiBAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAc3JjL21veGllLyQoREVQRElSKS9mZmkuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBzcmMvbmlvczIvJChERVBESVIpL2ZmaS5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQHNyYy9uaW9zMi8kKERFUERJUikvc3lzdi5QbG9AYW1fX3F1b3RlQAogQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQHNyYy9wYS8kKERFUERJUikvZmZpLlBsb0BhbV9fcXVvdGVACiBAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAc3JjL3BhLyQoREVQRElSKS9ocHV4MzIuUGxvQGFtX19xdW90ZUAKIEBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBzcmMvcGEvJChERVBESVIpL2xpbnV4LlBsb0BhbV9fcXVvdGVACkBAIC0xMDYxLDYgKzEyNjYsOCBAQAogQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQHNyYy9wb3dlcnBjLyQoREVQRElSKS9kYXJ3aW5fY2xvc3VyZS5QbG9AYW1fX3F1b3RlQAogQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQHNyYy9wb3dlcnBjLyQoREVQRElSKS9mZmkuUGxvQGFtX19xdW90ZUAKIEBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBzcmMvcG93ZXJwYy8kKERFUERJUikvZmZpX2Rhcndpbi5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQHNyYy9wb3dlcnBjLyQoREVQRElSKS9mZmlfbGludXg2NC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQHNyYy9wb3dlcnBjLyQoREVQRElSKS9mZmlfc3lzdi5QbG9AYW1fX3F1b3RlQAogQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQHNyYy9wb3dlcnBjLyQoREVQRElSKS9saW51eDY0LlBsb0BhbV9fcXVvdGVACiBAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAc3JjL3Bvd2VycGMvJChERVBESVIpL2xpbnV4NjRfY2xvc3VyZS5QbG9AYW1fX3F1b3RlQAogQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQHNyYy9wb3dlcnBjLyQoREVQRElSKS9wcGNfY2xvc3VyZS5QbG9AYW1fX3F1b3RlQApAQCAtMTA3Niw2ICsxMjgzLDggQEAKIEBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBzcmMvc3BhcmMvJChERVBESVIpL3Y5LlBsb0BhbV9fcXVvdGVACiBAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAc3JjL3RpbGUvJChERVBESVIpL2ZmaS5QbG9AYW1fX3F1b3RlQAogQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQHNyYy90aWxlLyQoREVQRElSKS90aWxlLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAc3JjL3ZheC8kKERFUERJUikvZWxmYnNkLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAc3JjL3ZheC8kKERFUERJUikvZmZpLlBsb0BhbV9fcXVvdGVACiBAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAc3JjL3g4Ni8kKERFUERJUikvZGFyd2luLlBsb0BhbV9fcXVvdGVACiBAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAc3JjL3g4Ni8kKERFUERJUikvZGFyd2luNjQuUGxvQGFtX19xdW90ZUAKIEBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBzcmMveDg2LyQoREVQRElSKS9mZmkuUGxvQGFtX19xdW90ZUAKQEAgLTEwODksNTIgKzEyOTgsNTIgQEAKIEBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBzcmMveHRlbnNhLyQoREVQRElSKS9zeXN2LlBsb0BhbV9fcXVvdGVACiAKIC5TLm86Ci1AYW1fX2Zhc3RkZXBDQ0FTX1RSVUVACWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLm8kJHx8J2A7XAorQGFtX19mYXN0ZGVwQ0NBU19UUlVFQAkkKEFNX1ZfQ1BQQVMpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwubyQkfHwnYDtcCiBAYW1fX2Zhc3RkZXBDQ0FTX1RSVUVACSQoQ1BQQVNDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCAkPCAmJlwKIEBhbV9fZmFzdGRlcENDQVNfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ0FTX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDQVNfRkFMU0VACSQoQU1fVl9DUFBBUylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDQVNfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0FTREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ0FTX0ZBTFNFQAkkKENQUEFTQ09NUElMRSkgLWMgLW8gJEAgJDwKK0BhbV9fZmFzdGRlcENDQVNfRkFMU0VACSQoQU1fVl9DUFBBU0BhbV9fbm9kZXBAKSQoQ1BQQVNDT01QSUxFKSAtYyAtbyAkQCAkPAogCiAuUy5vYmo6Ci1AYW1fX2Zhc3RkZXBDQ0FTX1RSVUVACWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLm9iaiQkfHwnYDtcCitAYW1fX2Zhc3RkZXBDQ0FTX1RSVUVACSQoQU1fVl9DUFBBUylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5vYmokJHx8J2A7XAogQGFtX19mYXN0ZGVwQ0NBU19UUlVFQAkkKENQUEFTQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYCAmJlwKIEBhbV9fZmFzdGRlcENDQVNfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ0FTX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDQVNfRkFMU0VACSQoQU1fVl9DUFBBUylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDQVNfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0FTREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ0FTX0ZBTFNFQAkkKENQUEFTQ09NUElMRSkgLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAorQGFtX19mYXN0ZGVwQ0NBU19GQUxTRUAJJChBTV9WX0NQUEFTQGFtX19ub2RlcEApJChDUFBBU0NPTVBJTEUpIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKIAogLlMubG86Ci1AYW1fX2Zhc3RkZXBDQ0FTX1RSVUVACWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLmxvJCR8fCdgO1wKK0BhbV9fZmFzdGRlcENDQVNfVFJVRUAJJChBTV9WX0NQUEFTKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLmxvJCR8fCdgO1wKIEBhbV9fZmFzdGRlcENDQVNfVFJVRUAJJChMVENQUEFTQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgJDwgJiZcCiBAYW1fX2Zhc3RkZXBDQ0FTX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDQVNfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDQVNfRkFMU0VACSQoQU1fVl9DUFBBUylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACiBAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ0FTX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NBU0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NBU19GQUxTRUAJJChMVENQUEFTQ09NUElMRSkgLWMgLW8gJEAgJDwKK0BhbV9fZmFzdGRlcENDQVNfRkFMU0VACSQoQU1fVl9DUFBBU0BhbV9fbm9kZXBAKSQoTFRDUFBBU0NPTVBJTEUpIC1jIC1vICRAICQ8CiAKIC5jLm86Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAlkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5vJCR8fCdgO1wKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5vJCR8fCdgO1wKIEBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgJDwgJiZcCiBAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACiBAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDT01QSUxFKSAtYyAtbyAkQCAkPAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgLW8gJEAgJDwKIAogLmMub2JqOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwub2JqJCR8fCdgO1wKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5vYmokJHx8J2A7XAogQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgICYmXAogQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAogQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ09NUElMRSkgLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ09NUElMRSkgLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAogCiAuYy5sbzoKLUBhbV9fZmFzdGRlcENDX1RSVUVACWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLmxvJCR8fCdgO1wKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5sbyQkfHwnYDtcCiBAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKExUQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgJDwgJiZcCiBAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUGxvCi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACiBAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMVENPTVBJTEUpIC1jIC1vICRAICQ8CitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMVENPTVBJTEUpIC1jIC1vICRAICQ8CiAKIG1vc3RseWNsZWFuLWxpYnRvb2w6CiAJLXJtIC1mICoubG8KQEAgLTExNDQsNiArMTM1Myw3IEBACiAJLXJtIC1yZiBzcmMvLmxpYnMgc3JjL19saWJzCiAJLXJtIC1yZiBzcmMvYWFyY2g2NC8ubGlicyBzcmMvYWFyY2g2NC9fbGlicwogCS1ybSAtcmYgc3JjL2FscGhhLy5saWJzIHNyYy9hbHBoYS9fbGlicworCS1ybSAtcmYgc3JjL2FyYy8ubGlicyBzcmMvYXJjL19saWJzCiAJLXJtIC1yZiBzcmMvYXJtLy5saWJzIHNyYy9hcm0vX2xpYnMKIAktcm0gLXJmIHNyYy9hdnIzMi8ubGlicyBzcmMvYXZyMzIvX2xpYnMKIAktcm0gLXJmIHNyYy9iZmluLy5saWJzIHNyYy9iZmluL19saWJzCkBAIC0xMTUyLDEwICsxMzYyLDEyIEBACiAJLXJtIC1yZiBzcmMvaWE2NC8ubGlicyBzcmMvaWE2NC9fbGlicwogCS1ybSAtcmYgc3JjL20zMnIvLmxpYnMgc3JjL20zMnIvX2xpYnMKIAktcm0gLXJmIHNyYy9tNjhrLy5saWJzIHNyYy9tNjhrL19saWJzCisJLXJtIC1yZiBzcmMvbTg4ay8ubGlicyBzcmMvbTg4ay9fbGlicwogCS1ybSAtcmYgc3JjL21ldGFnLy5saWJzIHNyYy9tZXRhZy9fbGlicwogCS1ybSAtcmYgc3JjL21pY3JvYmxhemUvLmxpYnMgc3JjL21pY3JvYmxhemUvX2xpYnMKIAktcm0gLXJmIHNyYy9taXBzLy5saWJzIHNyYy9taXBzL19saWJzCiAJLXJtIC1yZiBzcmMvbW94aWUvLmxpYnMgc3JjL21veGllL19saWJzCisJLXJtIC1yZiBzcmMvbmlvczIvLmxpYnMgc3JjL25pb3MyL19saWJzCiAJLXJtIC1yZiBzcmMvcGEvLmxpYnMgc3JjL3BhL19saWJzCiAJLXJtIC1yZiBzcmMvcG93ZXJwYy8ubGlicyBzcmMvcG93ZXJwYy9fbGlicwogCS1ybSAtcmYgc3JjL3MzOTAvLmxpYnMgc3JjL3MzOTAvX2xpYnMKQEAgLTExNjMsNiArMTM3NSw3IEBACiAJLXJtIC1yZiBzcmMvc2g2NC8ubGlicyBzcmMvc2g2NC9fbGlicwogCS1ybSAtcmYgc3JjL3NwYXJjLy5saWJzIHNyYy9zcGFyYy9fbGlicwogCS1ybSAtcmYgc3JjL3RpbGUvLmxpYnMgc3JjL3RpbGUvX2xpYnMKKwktcm0gLXJmIHNyYy92YXgvLmxpYnMgc3JjL3ZheC9fbGlicwogCS1ybSAtcmYgc3JjL3g4Ni8ubGlicyBzcmMveDg2L19saWJzCiAJLXJtIC1yZiBzcmMveHRlbnNhLy5saWJzIHNyYy94dGVuc2EvX2xpYnMKIApAQCAtMTE3Myw3ICsxMzg2LDcgQEAKIAlAOiA+IGRvYy8kKGFtX19kaXJzdGFtcCkKIAogJChzcmNkaXIpL2RvYy9saWJmZmkuaW5mbzogZG9jL2xpYmZmaS50ZXhpICQoc3JjZGlyKS9kb2MvdmVyc2lvbi50ZXhpCi0JcmVzdG9yZT06ICYmIGJhY2t1cGRpcj0iJChhbV9fbGVhZGluZ19kb3QpYW0kJCQkIiAmJiBcCisJJChBTV9WX01BS0VJTkZPKXJlc3RvcmU9OiAmJiBiYWNrdXBkaXI9IiQoYW1fX2xlYWRpbmdfZG90KWFtJCQkJCIgJiYgXAogCWFtX19jd2Q9YHB3ZGAgJiYgJChhbV9fY2QpICQoc3JjZGlyKSAmJiBcCiAJcm0gLXJmICQkYmFja3VwZGlyICYmIG1rZGlyICQkYmFja3VwZGlyICYmIFwKIAlpZiAoJChNQUtFSU5GTykgLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gXApAQCAtMTE5NSwxOCArMTQwOCwyMCBAQAogCXJtIC1yZiAkJGJhY2t1cGRpcjsgZXhpdCAkJHJjCiAKIGRvYy9saWJmZmkuZHZpOiBkb2MvbGliZmZpLnRleGkgJChzcmNkaXIpL2RvYy92ZXJzaW9uLnRleGkgZG9jLyQoYW1fX2RpcnN0YW1wKQotCVRFWElOUFVUUz0iJChhbV9fVEVYSU5GT19URVhfRElSKSQoUEFUSF9TRVBBUkFUT1IpJCRURVhJTlBVVFMiIFwKKwkkKEFNX1ZfVEVYSTJEVkkpVEVYSU5QVVRTPSIkKGFtX19URVhJTkZPX1RFWF9ESVIpJChQQVRIX1NFUEFSQVRPUikkJFRFWElOUFVUUyIgXAogCU1BS0VJTkZPPSckKE1BS0VJTkZPKSAkKEFNX01BS0VJTkZPRkxBR1MpICQoTUFLRUlORk9GTEFHUykgLUkgZG9jIC1JICQoc3JjZGlyKS9kb2MnIFwKLQkkKFRFWEkyRFZJKSAgLS1jbGVhbiAtbyAkQCBgdGVzdCAtZiAnZG9jL2xpYmZmaS50ZXhpJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bkb2MvbGliZmZpLnRleGkgCisJJChURVhJMkRWSSkgJChBTV9WX3RleGluZm8pIC0tYnVpbGQtZGlyPSQoQDouZHZpPS50MmQpIC1vICRAICQoQU1fVl90ZXhpZGV2bnVsbCkgXAorCWB0ZXN0IC1mICdkb2MvbGliZmZpLnRleGknIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGRvYy9saWJmZmkudGV4aQogCiBkb2MvbGliZmZpLnBkZjogZG9jL2xpYmZmaS50ZXhpICQoc3JjZGlyKS9kb2MvdmVyc2lvbi50ZXhpIGRvYy8kKGFtX19kaXJzdGFtcCkKLQlURVhJTlBVVFM9IiQoYW1fX1RFWElORk9fVEVYX0RJUikkKFBBVEhfU0VQQVJBVE9SKSQkVEVYSU5QVVRTIiBcCisJJChBTV9WX1RFWEkyUERGKVRFWElOUFVUUz0iJChhbV9fVEVYSU5GT19URVhfRElSKSQoUEFUSF9TRVBBUkFUT1IpJCRURVhJTlBVVFMiIFwKIAlNQUtFSU5GTz0nJChNQUtFSU5GTykgJChBTV9NQUtFSU5GT0ZMQUdTKSAkKE1BS0VJTkZPRkxBR1MpIC1JIGRvYyAtSSAkKHNyY2RpcikvZG9jJyBcCi0JJChURVhJMlBERikgIC0tY2xlYW4gLW8gJEAgYHRlc3QgLWYgJ2RvYy9saWJmZmkudGV4aScgfHwgZWNobyAnJChzcmNkaXIpLydgZG9jL2xpYmZmaS50ZXhpIAorCSQoVEVYSTJQREYpICQoQU1fVl90ZXhpbmZvKSAtLWJ1aWxkLWRpcj0kKEA6LnBkZj0udDJwKSAtbyAkQCAkKEFNX1ZfdGV4aWRldm51bGwpIFwKKwlgdGVzdCAtZiAnZG9jL2xpYmZmaS50ZXhpJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bkb2MvbGliZmZpLnRleGkKIAogZG9jL2xpYmZmaS5odG1sOiBkb2MvbGliZmZpLnRleGkgJChzcmNkaXIpL2RvYy92ZXJzaW9uLnRleGkgZG9jLyQoYW1fX2RpcnN0YW1wKQotCXJtIC1yZiAkKEA6Lmh0bWw9Lmh0cCkKLQlpZiAkKE1BS0VJTkZPSFRNTCkgJChBTV9NQUtFSU5GT0hUTUxGTEFHUykgJChNQUtFSU5GT0ZMQUdTKSAtSSBkb2MgLUkgJChzcmNkaXIpL2RvYyBcCisJJChBTV9WX01BS0VJTkZPKXJtIC1yZiAkKEA6Lmh0bWw9Lmh0cCkKKwkkKEFNX1ZfYXQpaWYgJChNQUtFSU5GT0hUTUwpICQoQU1fTUFLRUlORk9IVE1MRkxBR1MpICQoTUFLRUlORk9GTEFHUykgLUkgZG9jIC1JICQoc3JjZGlyKS9kb2MgXAogCSAtbyAkKEA6Lmh0bWw9Lmh0cCkgYHRlc3QgLWYgJ2RvYy9saWJmZmkudGV4aScgfHwgZWNobyAnJChzcmNkaXIpLydgZG9jL2xpYmZmaS50ZXhpOyBcCiAJdGhlbiBcCiAJICBybSAtcmYgJEA7IFwKQEAgLTEyMzgsOCArMTQ1Myw4IEBACiBtYWludGFpbmVyLWNsZWFuLXZ0aToKIEBNQUlOVEFJTkVSX01PREVfVFJVRUAJLXJtIC1mICQoc3JjZGlyKS9kb2Mvc3RhbXAtdnRpICQoc3JjZGlyKS9kb2MvdmVyc2lvbi50ZXhpCiAuZHZpLnBzOgotCVRFWElOUFVUUz0iJChhbV9fVEVYSU5GT19URVhfRElSKSQoUEFUSF9TRVBBUkFUT1IpJCRURVhJTlBVVFMiIFwKLQkkKERWSVBTKSAgLW8gJEAgJDwKKwkkKEFNX1ZfRFZJUFMpVEVYSU5QVVRTPSIkKGFtX19URVhJTkZPX1RFWF9ESVIpJChQQVRIX1NFUEFSQVRPUikkJFRFWElOUFVUUyIgXAorCSQoRFZJUFMpICQoQU1fVl90ZXhpbmZvKSAtbyAkQCAkPAogCiB1bmluc3RhbGwtZHZpLWFtOgogCUAkKE5PUk1BTF9VTklOU1RBTEwpCkBAIC0xMzE4LDggKzE1MzMsNyBAQAogCWRvbmUKIAogbW9zdGx5Y2xlYW4tYW1pbmZvOgotCS1ybSAtcmYgbGliZmZpLmF1eCBsaWJmZmkuY3AgbGliZmZpLmNwcyBsaWJmZmkuZm4gbGliZmZpLmt5IGxpYmZmaS5sb2cgXAotCSAgbGliZmZpLnBnIGxpYmZmaS50bXAgbGliZmZpLnRvYyBsaWJmZmkudHAgbGliZmZpLnZyCisJLXJtIC1yZiBkb2MvbGliZmZpLnQyZCBkb2MvbGliZmZpLnQycAogCiBjbGVhbi1hbWluZm86CiAJLXRlc3QgLXogImRvYy9saWJmZmkuZHZpIGRvYy9saWJmZmkucGRmIGRvYy9saWJmZmkucHMgZG9jL2xpYmZmaS5odG1sIiBcCkBAIC0xMzU5LDE0ICsxNTczLDEzIEBACiAjICgxKSBpZiB0aGUgdmFyaWFibGUgaXMgc2V0IGluICdjb25maWcuc3RhdHVzJywgZWRpdCAnY29uZmlnLnN0YXR1cycKICMgICAgICh3aGljaCB3aWxsIGNhdXNlIHRoZSBNYWtlZmlsZXMgdG8gYmUgcmVnZW5lcmF0ZWQgd2hlbiB5b3UgcnVuICdtYWtlJyk7CiAjICgyKSBvdGhlcndpc2UsIHBhc3MgdGhlIGRlc2lyZWQgdmFsdWVzIG9uIHRoZSAnbWFrZScgY29tbWFuZCBsaW5lLgotJChSRUNVUlNJVkVfVEFSR0VUUykgJChSRUNVUlNJVkVfQ0xFQU5fVEFSR0VUUyk6Ci0JQGZhaWw9IGZhaWxjb209J2V4aXQgMSc7IFwKLQlmb3IgZiBpbiB4ICQkTUFLRUZMQUdTOyBkbyBcCi0JICBjYXNlICQkZiBpbiBcCi0JICAgICo9KiB8IC0tWyFrXSopOzsgXAotCSAgICAqayopIGZhaWxjb209J2ZhaWw9eWVzJzs7IFwKLQkgIGVzYWM7IFwKLQlkb25lOyBcCiskKGFtX19yZWN1cnNpdmVfdGFyZ2V0cyk6CisJQGZhaWw9OyBcCisJaWYgJChhbV9fbWFrZV9rZWVwZ29pbmcpOyB0aGVuIFwKKwkgIGZhaWxjb209J2ZhaWw9eWVzJzsgXAorCWVsc2UgXAorCSAgZmFpbGNvbT0nZXhpdCAxJzsgXAorCWZpOyBcCiAJZG90X3NlZW49bm87IFwKIAl0YXJnZXQ9YGVjaG8gJEAgfCBzZWQgcy8tcmVjdXJzaXZlLy9gOyBcCiAJY2FzZSAiJEAiIGluIFwKQEAgLTEzODcsMzEgKzE2MDAsMTMgQEAKIAlpZiB0ZXN0ICIkJGRvdF9zZWVuIiA9ICJubyI7IHRoZW4gXAogCSAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgIiQkdGFyZ2V0LWFtIiB8fCBleGl0IDE7IFwKIAlmaTsgdGVzdCAteiAiJCRmYWlsIgotdGFncy1yZWN1cnNpdmU6Ci0JbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCi0JICB0ZXN0ICIkJHN1YmRpciIgPSAuIHx8ICgkKGFtX19jZCkgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgdGFncyk7IFwKLQlkb25lCi1jdGFncy1yZWN1cnNpdmU6Ci0JbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCi0JICB0ZXN0ICIkJHN1YmRpciIgPSAuIHx8ICgkKGFtX19jZCkgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgY3RhZ3MpOyBcCi0JZG9uZQotY3Njb3BlbGlzdC1yZWN1cnNpdmU6Ci0JbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCi0JICB0ZXN0ICIkJHN1YmRpciIgPSAuIHx8ICgkKGFtX19jZCkgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgY3Njb3BlbGlzdCk7IFwKLQlkb25lCiAKLUlEOiAkKEhFQURFUlMpICQoU09VUkNFUykgJChMSVNQKSAkKFRBR1NfRklMRVMpCi0JbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKLQl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAotCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKLQkgIGRvbmUgfCBcCi0JICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCi0JICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCi0JbWtpZCAtZklEICQkdW5pcXVlCi10YWdzOiBUQUdTCitJRDogJChhbV9fdGFnZ2VkX2ZpbGVzKQorCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IG1raWQgLWZJRCAkJHVuaXF1ZQordGFnczogdGFncy1yZWN1cnNpdmUKK1RBR1M6IHRhZ3MKIAotVEFHUzogdGFncy1yZWN1cnNpdmUgJChIRUFERVJTKSAkKFNPVVJDRVMpIGZmaWNvbmZpZy5oLmluICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKLQkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCit0YWdzLWFtOiAkKFRBR1NfREVQRU5ERU5DSUVTKSAkKGFtX190YWdnZWRfZmlsZXMpCiAJc2V0IHg7IFwKIAloZXJlPWBwd2RgOyBcCiAJaWYgKCQoRVRBR1MpIC0tZXRhZ3MtaW5jbHVkZSAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTsgdGhlbiBcCkBAIC0xNDI3LDEyICsxNjIyLDcgQEAKIAkgICAgICBzZXQgIiQkQCIgIiQkaW5jbHVkZV9vcHRpb249JCRoZXJlLyQkc3ViZGlyL1RBR1MiOyBcCiAJICBmaTsgXAogCWRvbmU7IFwKLQlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgZmZpY29uZmlnLmguaW4gJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAotCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0JICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAotCSAgZG9uZSB8IFwKLQkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKLQkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCiAJc2hpZnQ7IFwKIAlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCQqJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAogCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXApAQCAtMTQ0NCwxNSArMTYzNCwxMSBAQAogCSAgICAgICQkdW5pcXVlOyBcCiAJICBmaTsgXAogCWZpCi1jdGFnczogQ1RBR1MKLUNUQUdTOiBjdGFncy1yZWN1cnNpdmUgJChIRUFERVJTKSAkKFNPVVJDRVMpIGZmaWNvbmZpZy5oLmluICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKLQkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCi0JbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpIGZmaWNvbmZpZy5oLmluICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKLQl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAotCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKLQkgIGRvbmUgfCBcCi0JICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCi0JICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCitjdGFnczogY3RhZ3MtcmVjdXJzaXZlCisKK0NUQUdTOiBjdGFncworY3RhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKKwkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCiAJdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdW5pcXVlIiBcCiAJICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCiAJICAgICAkJHVuaXF1ZQpAQCAtMTQ2MSwxOCArMTY0NywxNiBAQAogCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCiAJICAmJiAkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSBcCiAJICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICIkJGhlcmUiCi0KIGNzY29wZTogY3Njb3BlLmZpbGVzCiAJdGVzdCAhIC1zIGNzY29wZS5maWxlcyBcCiAJICB8fCAkKENTQ09QRSkgLWIgLXEgJChBTV9DU0NPUEVGTEFHUykgJChDU0NPUEVGTEFHUykgLWkgY3Njb3BlLmZpbGVzICQoQ1NDT1BFX0FSR1MpCi0KIGNsZWFuLWNzY29wZToKIAktcm0gLWYgY3Njb3BlLmZpbGVzCitjc2NvcGUuZmlsZXM6IGNsZWFuLWNzY29wZSBjc2NvcGVsaXN0Citjc2NvcGVsaXN0OiBjc2NvcGVsaXN0LXJlY3Vyc2l2ZQogCi1jc2NvcGUuZmlsZXM6IGNsZWFuLWNzY29wZSBjc2NvcGVsaXN0LXJlY3Vyc2l2ZSBjc2NvcGVsaXN0Ci0KLWNzY29wZWxpc3Q6IGNzY29wZWxpc3QtcmVjdXJzaXZlICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKExJU1ApCi0JbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICQoTElTUCknOyBcCitjc2NvcGVsaXN0LWFtOiAkKGFtX190YWdnZWRfZmlsZXMpCisJbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKIAljYXNlICIkKHNyY2RpcikiIGluIFwKIAkgIFtcXC9dKiB8ID86W1xcL10qKSBzZGlyPSIkKHNyY2RpcikiIDs7IFwKIAkgICopIHNkaXI9JChzdWJkaXIpLyQoc3JjZGlyKSA7OyBcCkBAIC0xNTQ4LDcgKzE3MzIsNyBAQAogCWRvbmUKIAkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBcCiAJICB0b3BfZGlzdGRpcj0iJCh0b3BfZGlzdGRpcikiIGRpc3RkaXI9IiQoZGlzdGRpcikiIFwKLQkgIGRpc3QtaW5mbworCSAgZGlzdC1pbmZvIGRpc3QtaG9vawogCS10ZXN0IC1uICIkKGFtX19za2lwX21vZGVfZml4KSIgXAogCXx8IGZpbmQgIiQoZGlzdGRpcikiIC10eXBlIGQgISAtcGVybSAtNzU1IFwKIAkJLWV4ZWMgY2htb2QgdStyd3gsZ28rcngge30gXDsgLW8gXApAQCAtMTYwOSw5ICsxNzkzLDkgQEAKIAkqLnppcCopIFwKIAkgIHVuemlwICQoZGlzdGRpcikuemlwIDs7XAogCWVzYWMKLQljaG1vZCAtUiBhLXcgJChkaXN0ZGlyKTsgY2htb2QgdSt3ICQoZGlzdGRpcikKLQlta2RpciAkKGRpc3RkaXIpL19idWlsZAotCW1rZGlyICQoZGlzdGRpcikvX2luc3QKKwljaG1vZCAtUiBhLXcgJChkaXN0ZGlyKQorCWNobW9kIHUrdyAkKGRpc3RkaXIpCisJbWtkaXIgJChkaXN0ZGlyKS9fYnVpbGQgJChkaXN0ZGlyKS9faW5zdAogCWNobW9kIGEtdyAkKGRpc3RkaXIpCiAJdGVzdCAtZCAkKGRpc3RkaXIpL19idWlsZCB8fCBleGl0IDA7IFwKIAlkY19pbnN0YWxsX2Jhc2U9YCQoYW1fX2NkKSAkKGRpc3RkaXIpL19pbnN0ICYmIHB3ZCB8IHNlZCAtZSAncyxeW146XFwvXTpbXFwvXSwvLCdgIFwKQEAgLTE3MTQsNiArMTg5OCw4IEBACiAJLXJtIC1mIHNyYy9hYXJjaDY0LyQoYW1fX2RpcnN0YW1wKQogCS1ybSAtZiBzcmMvYWxwaGEvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQogCS1ybSAtZiBzcmMvYWxwaGEvJChhbV9fZGlyc3RhbXApCisJLXJtIC1mIHNyYy9hcmMvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQorCS1ybSAtZiBzcmMvYXJjLyQoYW1fX2RpcnN0YW1wKQogCS1ybSAtZiBzcmMvYXJtLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKIAktcm0gLWYgc3JjL2FybS8kKGFtX19kaXJzdGFtcCkKIAktcm0gLWYgc3JjL2F2cjMyLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKQEAgLTE3MzAsNiArMTkxNiw4IEBACiAJLXJtIC1mIHNyYy9tMzJyLyQoYW1fX2RpcnN0YW1wKQogCS1ybSAtZiBzcmMvbTY4ay8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCiAJLXJtIC1mIHNyYy9tNjhrLyQoYW1fX2RpcnN0YW1wKQorCS1ybSAtZiBzcmMvbTg4ay8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCisJLXJtIC1mIHNyYy9tODhrLyQoYW1fX2RpcnN0YW1wKQogCS1ybSAtZiBzcmMvbWV0YWcvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQogCS1ybSAtZiBzcmMvbWV0YWcvJChhbV9fZGlyc3RhbXApCiAJLXJtIC1mIHNyYy9taWNyb2JsYXplLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKQEAgLTE3MzgsNiArMTkyNiw4IEBACiAJLXJtIC1mIHNyYy9taXBzLyQoYW1fX2RpcnN0YW1wKQogCS1ybSAtZiBzcmMvbW94aWUvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQogCS1ybSAtZiBzcmMvbW94aWUvJChhbV9fZGlyc3RhbXApCisJLXJtIC1mIHNyYy9uaW9zMi8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCisJLXJtIC1mIHNyYy9uaW9zMi8kKGFtX19kaXJzdGFtcCkKIAktcm0gLWYgc3JjL3BhLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKIAktcm0gLWYgc3JjL3BhLyQoYW1fX2RpcnN0YW1wKQogCS1ybSAtZiBzcmMvcG93ZXJwYy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCkBAIC0xNzUyLDYgKzE5NDIsOCBAQAogCS1ybSAtZiBzcmMvc3BhcmMvJChhbV9fZGlyc3RhbXApCiAJLXJtIC1mIHNyYy90aWxlLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKIAktcm0gLWYgc3JjL3RpbGUvJChhbV9fZGlyc3RhbXApCisJLXJtIC1mIHNyYy92YXgvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQorCS1ybSAtZiBzcmMvdmF4LyQoYW1fX2RpcnN0YW1wKQogCS1ybSAtZiBzcmMveDg2LyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKIAktcm0gLWYgc3JjL3g4Ni8kKGFtX19kaXJzdGFtcCkKIAktcm0gLWYgc3JjL3h0ZW5zYS8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCkBAIC0xNzY4LDcgKzE5NjAsNyBAQAogCiBkaXN0Y2xlYW46IGRpc3RjbGVhbi1yZWN1cnNpdmUKIAktcm0gLWYgJChhbV9fQ09ORklHX0RJU1RDTEVBTl9GSUxFUykKLQktcm0gLXJmIHNyYy8kKERFUERJUikgc3JjL2FhcmNoNjQvJChERVBESVIpIHNyYy9hbHBoYS8kKERFUERJUikgc3JjL2FybS8kKERFUERJUikgc3JjL2F2cjMyLyQoREVQRElSKSBzcmMvYmZpbi8kKERFUERJUikgc3JjL2NyaXMvJChERVBESVIpIHNyYy9mcnYvJChERVBESVIpIHNyYy9pYTY0LyQoREVQRElSKSBzcmMvbTMyci8kKERFUERJUikgc3JjL202OGsvJChERVBESVIpIHNyYy9tZXRhZy8kKERFUERJUikgc3JjL21pY3JvYmxhemUvJChERVBESVIpIHNyYy9taXBzLyQoREVQRElSKSBzcmMvbW94aWUvJChERVBESVIpIHNyYy9wYS8kKERFUERJUikgc3JjL3Bvd2VycGMvJChERVBESVIpIHNyYy9zMzkwLyQoREVQRElSKSBzcmMvc2gvJChERVBESVIpIHNyYy9zaDY0LyQoREVQRElSKSBzcmMvc3BhcmMvJChERVBESVIpIHNyYy90aWxlLyQoREVQRElSKSBzcmMveDg2LyQoREVQRElSKSBzcmMveHRlbnNhLyQoREVQRElSKQorCS1ybSAtcmYgc3JjLyQoREVQRElSKSBzcmMvYWFyY2g2NC8kKERFUERJUikgc3JjL2FscGhhLyQoREVQRElSKSBzcmMvYXJjLyQoREVQRElSKSBzcmMvYXJtLyQoREVQRElSKSBzcmMvYXZyMzIvJChERVBESVIpIHNyYy9iZmluLyQoREVQRElSKSBzcmMvY3Jpcy8kKERFUERJUikgc3JjL2Zydi8kKERFUERJUikgc3JjL2lhNjQvJChERVBESVIpIHNyYy9tMzJyLyQoREVQRElSKSBzcmMvbTY4ay8kKERFUERJUikgc3JjL204OGsvJChERVBESVIpIHNyYy9tZXRhZy8kKERFUERJUikgc3JjL21pY3JvYmxhemUvJChERVBESVIpIHNyYy9taXBzLyQoREVQRElSKSBzcmMvbW94aWUvJChERVBESVIpIHNyYy9uaW9zMi8kKERFUERJUikgc3JjL3BhLyQoREVQRElSKSBzcmMvcG93ZXJwYy8kKERFUERJUikgc3JjL3MzOTAvJChERVBESVIpIHNyYy9zaC8kKERFUERJUikgc3JjL3NoNjQvJChERVBESVIpIHNyYy9zcGFyYy8kKERFUERJUikgc3JjL3RpbGUvJChERVBESVIpIHNyYy92YXgvJChERVBESVIpIHNyYy94ODYvJChERVBESVIpIHNyYy94dGVuc2EvJChERVBESVIpCiAJLXJtIC1mIE1ha2VmaWxlCiBkaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKIAlkaXN0Y2xlYW4taGRyIGRpc3RjbGVhbi1saWJ0b29sIGRpc3RjbGVhbi10YWdzCkBAIC0xOTA3LDcgKzIwOTksNyBAQAogbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1yZWN1cnNpdmUKIAktcm0gLWYgJChhbV9fQ09ORklHX0RJU1RDTEVBTl9GSUxFUykKIAktcm0gLXJmICQodG9wX3NyY2RpcikvYXV0b200dGUuY2FjaGUKLQktcm0gLXJmIHNyYy8kKERFUERJUikgc3JjL2FhcmNoNjQvJChERVBESVIpIHNyYy9hbHBoYS8kKERFUERJUikgc3JjL2FybS8kKERFUERJUikgc3JjL2F2cjMyLyQoREVQRElSKSBzcmMvYmZpbi8kKERFUERJUikgc3JjL2NyaXMvJChERVBESVIpIHNyYy9mcnYvJChERVBESVIpIHNyYy9pYTY0LyQoREVQRElSKSBzcmMvbTMyci8kKERFUERJUikgc3JjL202OGsvJChERVBESVIpIHNyYy9tZXRhZy8kKERFUERJUikgc3JjL21pY3JvYmxhemUvJChERVBESVIpIHNyYy9taXBzLyQoREVQRElSKSBzcmMvbW94aWUvJChERVBESVIpIHNyYy9wYS8kKERFUERJUikgc3JjL3Bvd2VycGMvJChERVBESVIpIHNyYy9zMzkwLyQoREVQRElSKSBzcmMvc2gvJChERVBESVIpIHNyYy9zaDY0LyQoREVQRElSKSBzcmMvc3BhcmMvJChERVBESVIpIHNyYy90aWxlLyQoREVQRElSKSBzcmMveDg2LyQoREVQRElSKSBzcmMveHRlbnNhLyQoREVQRElSKQorCS1ybSAtcmYgc3JjLyQoREVQRElSKSBzcmMvYWFyY2g2NC8kKERFUERJUikgc3JjL2FscGhhLyQoREVQRElSKSBzcmMvYXJjLyQoREVQRElSKSBzcmMvYXJtLyQoREVQRElSKSBzcmMvYXZyMzIvJChERVBESVIpIHNyYy9iZmluLyQoREVQRElSKSBzcmMvY3Jpcy8kKERFUERJUikgc3JjL2Zydi8kKERFUERJUikgc3JjL2lhNjQvJChERVBESVIpIHNyYy9tMzJyLyQoREVQRElSKSBzcmMvbTY4ay8kKERFUERJUikgc3JjL204OGsvJChERVBESVIpIHNyYy9tZXRhZy8kKERFUERJUikgc3JjL21pY3JvYmxhemUvJChERVBESVIpIHNyYy9taXBzLyQoREVQRElSKSBzcmMvbW94aWUvJChERVBESVIpIHNyYy9uaW9zMi8kKERFUERJUikgc3JjL3BhLyQoREVQRElSKSBzcmMvcG93ZXJwYy8kKERFUERJUikgc3JjL3MzOTAvJChERVBESVIpIHNyYy9zaC8kKERFUERJUikgc3JjL3NoNjQvJChERVBESVIpIHNyYy9zcGFyYy8kKERFUERJUikgc3JjL3RpbGUvJChERVBESVIpIHNyYy92YXgvJChERVBESVIpIHNyYy94ODYvJChERVBESVIpIHNyYy94dGVuc2EvJChERVBESVIpCiAJLXJtIC1mIE1ha2VmaWxlCiBtYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1hbWluZm8gXAogCW1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtYWludGFpbmVyLWNsZWFuLXZ0aQpAQCAtMTkyOSwzNiArMjEyMSwzNiBAQAogCXVuaW5zdGFsbC1wZGYtYW0gdW5pbnN0YWxsLXBrZ2NvbmZpZ0RBVEEgdW5pbnN0YWxsLXBzLWFtIFwKIAl1bmluc3RhbGwtdG9vbGV4ZWNsaWJMVExJQlJBUklFUwogCi0uTUFLRTogJChSRUNVUlNJVkVfQ0xFQU5fVEFSR0VUUykgJChSRUNVUlNJVkVfVEFSR0VUUykgYWxsIFwKLQljc2NvcGVsaXN0LXJlY3Vyc2l2ZSBjdGFncy1yZWN1cnNpdmUgaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwIFwKLQl0YWdzLXJlY3Vyc2l2ZQorLk1BS0U6ICQoYW1fX3JlY3Vyc2l2ZV90YXJnZXRzKSBhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCiAKLS5QSE9OWTogJChSRUNVUlNJVkVfQ0xFQU5fVEFSR0VUUykgJChSRUNVUlNJVkVfVEFSR0VUUykgQ1RBR1MgR1RBR1MgXAotCWFsbCBhbGwtYW0gYW0tLXJlZnJlc2ggY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tYW1pbmZvIFwKLQljbGVhbi1jc2NvcGUgY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIFwKLQljbGVhbi1ub2luc3RMVExJQlJBUklFUyBjbGVhbi10b29sZXhlY2xpYkxUTElCUkFSSUVTIGNzY29wZSBcCi0JY3Njb3BlbGlzdCBjc2NvcGVsaXN0LXJlY3Vyc2l2ZSBjdGFncyBjdGFncy1yZWN1cnNpdmUgZGlzdCBcCi0JZGlzdC1hbGwgZGlzdC1iemlwMiBkaXN0LWd6aXAgZGlzdC1pbmZvIGRpc3QtbHppcCBkaXN0LXNoYXIgXAotCWRpc3QtdGFyWiBkaXN0LXh6IGRpc3QtemlwIGRpc3RjaGVjayBkaXN0Y2xlYW4gXAotCWRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi1oZHIgXAotCWRpc3RjbGVhbi1saWJ0b29sIGRpc3RjbGVhbi10YWdzIGRpc3RjbGVhbmNoZWNrIGRpc3RkaXIgXAotCWRpc3R1bmluc3RhbGxjaGVjayBkdmkgZHZpLWFtIGh0bWwgaHRtbC1hbSBpbmZvIGluZm8tYW0gXAotCWluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIFwKLQlpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBcCi0JaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gXAotCWluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIGluc3RhbGwtcGtnY29uZmlnREFUQSBpbnN0YWxsLXBzIFwKLQlpbnN0YWxsLXBzLWFtIGluc3RhbGwtc3RyaXAgaW5zdGFsbC10b29sZXhlY2xpYkxUTElCUkFSSUVTIFwKLQlpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIGluc3RhbGxkaXJzLWFtIFwKLQltYWludGFpbmVyLWNsZWFuIG1haW50YWluZXItY2xlYW4tYW1pbmZvIFwKLQltYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbWFpbnRhaW5lci1jbGVhbi12dGkgbW9zdGx5Y2xlYW4gXAotCW1vc3RseWNsZWFuLWFtaW5mbyBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgXAotCW1vc3RseWNsZWFuLWxpYnRvb2wgbW9zdGx5Y2xlYW4tdnRpIHBkZiBwZGYtYW0gcHMgcHMtYW0gdGFncyBcCi0JdGFncy1yZWN1cnNpdmUgdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSB1bmluc3RhbGwtZHZpLWFtIFwKLQl1bmluc3RhbGwtaHRtbC1hbSB1bmluc3RhbGwtaW5mby1hbSB1bmluc3RhbGwtcGRmLWFtIFwKLQl1bmluc3RhbGwtcGtnY29uZmlnREFUQSB1bmluc3RhbGwtcHMtYW0gXAotCXVuaW5zdGFsbC10b29sZXhlY2xpYkxUTElCUkFSSUVTCisuUEhPTlk6ICQoYW1fX3JlY3Vyc2l2ZV90YXJnZXRzKSBDVEFHUyBHVEFHUyBUQUdTIGFsbCBhbGwtYW0gXAorCWFtLS1yZWZyZXNoIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWFtaW5mbyBjbGVhbi1jc2NvcGUgXAorCWNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBjbGVhbi1ub2luc3RMVExJQlJBUklFUyBcCisJY2xlYW4tdG9vbGV4ZWNsaWJMVExJQlJBUklFUyBjc2NvcGUgY3Njb3BlbGlzdC1hbSBjdGFncyBcCisJY3RhZ3MtYW0gZGlzdCBkaXN0LWFsbCBkaXN0LWJ6aXAyIGRpc3QtZ3ppcCBkaXN0LWhvb2sgXAorCWRpc3QtaW5mbyBkaXN0LWx6aXAgZGlzdC1zaGFyIGRpc3QtdGFyWiBkaXN0LXh6IGRpc3QtemlwIFwKKwlkaXN0Y2hlY2sgZGlzdGNsZWFuIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKKwlkaXN0Y2xlYW4taGRyIGRpc3RjbGVhbi1saWJ0b29sIGRpc3RjbGVhbi10YWdzIGRpc3RjbGVhbmNoZWNrIFwKKwlkaXN0ZGlyIGRpc3R1bmluc3RhbGxjaGVjayBkdmkgZHZpLWFtIGh0bWwgaHRtbC1hbSBpbmZvIFwKKwlpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgaW5zdGFsbC1kYXRhLWFtIFwKKwlpbnN0YWxsLWR2aSBpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgaW5zdGFsbC1leGVjLWFtIFwKKwlpbnN0YWxsLWh0bWwgaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBpbnN0YWxsLWluZm8tYW0gXAorCWluc3RhbGwtbWFuIGluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIGluc3RhbGwtcGtnY29uZmlnREFUQSBcCisJaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIGluc3RhbGwtc3RyaXAgXAorCWluc3RhbGwtdG9vbGV4ZWNsaWJMVExJQlJBUklFUyBpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIFwKKwlpbnN0YWxsZGlycyBpbnN0YWxsZGlycy1hbSBtYWludGFpbmVyLWNsZWFuIFwKKwltYWludGFpbmVyLWNsZWFuLWFtaW5mbyBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgXAorCW1haW50YWluZXItY2xlYW4tdnRpIG1vc3RseWNsZWFuIG1vc3RseWNsZWFuLWFtaW5mbyBcCisJbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgXAorCW1vc3RseWNsZWFuLXZ0aSBwZGYgcGRmLWFtIHBzIHBzLWFtIHRhZ3MgdGFncy1hbSB1bmluc3RhbGwgXAorCXVuaW5zdGFsbC1hbSB1bmluc3RhbGwtZHZpLWFtIHVuaW5zdGFsbC1odG1sLWFtIFwKKwl1bmluc3RhbGwtaW5mby1hbSB1bmluc3RhbGwtcGRmLWFtIHVuaW5zdGFsbC1wa2djb25maWdEQVRBIFwKKwl1bmluc3RhbGwtcHMtYW0gdW5pbnN0YWxsLXRvb2xleGVjbGliTFRMSUJSQVJJRVMKIAogCitkaXN0LWhvb2s6CisJaWYgWyAtZCAkKHRvcF9zcmNkaXIpLy5naXQgXSA7IHRoZW4gKGNkICQodG9wX3NyY2Rpcik7IGdpdCBsb2cgLS1uby1kZWNvcmF0ZSkgOyBlbHNlIGVjaG8gJ1NlZSBnaXQgbG9nIGZvciBoaXN0b3J5LicgOyBmaSA+ICQoZGlzdGRpcikvQ2hhbmdlTG9nCisKICMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCiAjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KIC5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvUkVBRE1FIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9SRUFETUUKaW5kZXggMTkxNTZmZS4uODRiOTQyNiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9SRUFETUUKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9SRUFETUUKQEAgLTEsOCArMSw4IEBACiBTdGF0dXMKID09PT09PQogCi1saWJmZmktMy4wLjEzIHdhcyByZWxlYXNlZCBvbiBNYXJjaCAxNywgMjAxMy4gIENoZWNrIHRoZSBsaWJmZmkgd2ViCi1wYWdlIGZvciB1cGRhdGVzOiA8VVJMOmh0dHA6Ly9zb3VyY2V3YXJlLm9yZy9saWJmZmkvPi4KK2xpYmZmaS0zLjEgd2FzIHJlbGVhc2VkIG9uIE1heSAxOSwgMjAxNC4gIENoZWNrIHRoZSBsaWJmZmkgd2ViIHBhZ2UKK2ZvciB1cGRhdGVzOiA8VVJMOmh0dHA6Ly9zb3VyY2V3YXJlLm9yZy9saWJmZmkvPi4KIAogCiBXaGF0IGlzIGxpYmZmaT8KQEAgLTQzLDcgKzQzLDcgQEAKIEZvciBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGRldGFpbHMgYW5kIHRlc3Rpbmcgc3RhdHVzLCBwbGVhc2UKIHJlZmVyIHRvIHRoZSB3aWtpIHBhZ2UgaGVyZToKIAotIGh0dHA6Ly93d3cubW94aWVsb2dpYy5vcmcvd2lraS9pbmRleC5waHA/dGl0bGU9TGliZmZpXzMuMC4xMworIGh0dHA6Ly93d3cubW94aWVsb2dpYy5vcmcvd2lraS9pbmRleC5waHA/dGl0bGU9TGliZmZpXzMuMQogCiBBdCB0aGUgdGltZSBvZiByZWxlYXNlLCB0aGUgZm9sbG93aW5nIGJhc2ljIGNvbmZpZ3VyYXRpb25zIGhhdmUgYmVlbgogdGVzdGVkOgpAQCAtNTEsOSArNTEsMTEgQEAKIHwtLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKIHwgQXJjaGl0ZWN0dXJlICAgIHwgT3BlcmF0aW5nIFN5c3RlbSB8IENvbXBpbGVyICAgICAgICAgICAgICAgIHwKIHwtLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKK3wgQUFyY2g2NCAoQVJNNjQpIHwgaU9TICAgICAgICAgICAgICB8IENsYW5nICAgICAgICAgICAgICAgICAgIHwKIHwgQUFyY2g2NCAgICAgICAgIHwgTGludXggICAgICAgICAgICB8IEdDQyAgICAgICAgICAgICAgICAgICAgIHwKIHwgQWxwaGEgICAgICAgICAgIHwgTGludXggICAgICAgICAgICB8IEdDQyAgICAgICAgICAgICAgICAgICAgIHwKIHwgQWxwaGEgICAgICAgICAgIHwgVHJ1NjQgICAgICAgICAgICB8IEdDQyAgICAgICAgICAgICAgICAgICAgIHwKK3wgQVJDICAgICAgICAgICAgIHwgTGludXggICAgICAgICAgICB8IEdDQyAgICAgICAgICAgICAgICAgICAgIHwKIHwgQVJNICAgICAgICAgICAgIHwgTGludXggICAgICAgICAgICB8IEdDQyAgICAgICAgICAgICAgICAgICAgIHwKIHwgQVJNICAgICAgICAgICAgIHwgaU9TICAgICAgICAgICAgICB8IEdDQyAgICAgICAgICAgICAgICAgICAgIHwKIHwgQVZSMzIgICAgICAgICAgIHwgTGludXggICAgICAgICAgICB8IEdDQyAgICAgICAgICAgICAgICAgICAgIHwKQEAgLTYxLDE1ICs2MywxNyBAQAogfCBIUFBBICAgICAgICAgICAgfCBIUFVYICAgICAgICAgICAgIHwgR0NDICAgICAgICAgICAgICAgICAgICAgfAogfCBJQS02NCAgICAgICAgICAgfCBMaW51eCAgICAgICAgICAgIHwgR0NDICAgICAgICAgICAgICAgICAgICAgfAogfCBNNjhLICAgICAgICAgICAgfCBGcmVlTWlOVCAgICAgICAgIHwgR0NDICAgICAgICAgICAgICAgICAgICAgfAotfCBNNjhLICAgICAgICAgICAgfCBMaW51eAkgICAgIHwgR0NDICAgICAgICAgICAgICAgICAgICAgfAorfCBNNjhLICAgICAgICAgICAgfCBMaW51eCAgICAgICAgICAgIHwgR0NDICAgICAgICAgICAgICAgICAgICAgfAogfCBNNjhLICAgICAgICAgICAgfCBSVEVNUyAgICAgICAgICAgIHwgR0NDICAgICAgICAgICAgICAgICAgICAgfAorfCBNODhLICAgICAgICAgICAgfCBPcGVuQlNEL212bWU4OGsgIHwgR0NDICAgICAgICAgICAgICAgICAgICAgfAogfCBNZXRhICAgICAgICAgICAgfCBMaW51eCAgICAgICAgICAgIHwgR0NDICAgICAgICAgICAgICAgICAgICAgfAogfCBNaWNyb0JsYXplICAgICAgfCBMaW51eCAgICAgICAgICAgIHwgR0NDICAgICAgICAgICAgICAgICAgICAgfAogfCBNSVBTICAgICAgICAgICAgfCBJUklYICAgICAgICAgICAgIHwgR0NDICAgICAgICAgICAgICAgICAgICAgfAogfCBNSVBTICAgICAgICAgICAgfCBMaW51eCAgICAgICAgICAgIHwgR0NDICAgICAgICAgICAgICAgICAgICAgfAogfCBNSVBTICAgICAgICAgICAgfCBSVEVNUyAgICAgICAgICAgIHwgR0NDICAgICAgICAgICAgICAgICAgICAgfAogfCBNSVBTNjQgICAgICAgICAgfCBMaW51eCAgICAgICAgICAgIHwgR0NDICAgICAgICAgICAgICAgICAgICAgfAotfCBNb3hpZQkJICB8IEJhcmUgbWV0YWwJICAgICB8IEdDQworfCBNb3hpZSAgICAgICAgICAgfCBCYXJlIG1ldGFsICAgICAgIHwgR0NDICAgICAgICAgICAgICAgICAgICAgfAorfCBOaW9zIElJICAgICAgICAgfCBMaW51eCAgICAgICAgICAgIHwgR0NDICAgICAgICAgICAgICAgICAgICAgfAogfCBQb3dlclBDIDMyLWJpdCAgfCBBSVggICAgICAgICAgICAgIHwgSUJNIFhMIEMgICAgICAgICAgICAgICAgfAogfCBQb3dlclBDIDY0LWJpdCAgfCBBSVggICAgICAgICAgICAgIHwgSUJNIFhMIEMgICAgICAgICAgICAgICAgfAogfCBQb3dlclBDICAgICAgICAgfCBBTUlHQSAgICAgICAgICAgIHwgR0NDICAgICAgICAgICAgICAgICAgICAgfApAQCAtNzcsNyArODEsOCBAQAogfCBQb3dlclBDICAgICAgICAgfCBNYWMgT1NYICAgICAgICAgIHwgR0NDICAgICAgICAgICAgICAgICAgICAgfAogfCBQb3dlclBDICAgICAgICAgfCBGcmVlQlNEICAgICAgICAgIHwgR0NDICAgICAgICAgICAgICAgICAgICAgfAogfCBQb3dlclBDIDY0LWJpdCAgfCBGcmVlQlNEICAgICAgICAgIHwgR0NDICAgICAgICAgICAgICAgICAgICAgfAotfCBQb3dlclBDIDY0LWJpdCAgfCBMaW51eCAgICAgICAgICAgIHwgR0NDICAgICAgICAgICAgICAgICAgICAgfAorfCBQb3dlclBDIDY0LWJpdCAgfCBMaW51eCBFTEZ2MSAgICAgIHwgR0NDICAgICAgICAgICAgICAgICAgICAgfAorfCBQb3dlclBDIDY0LWJpdCAgfCBMaW51eCBFTEZ2MiAgICAgIHwgR0NDICAgICAgICAgICAgICAgICAgICAgfAogfCBTMzkwICAgICAgICAgICAgfCBMaW51eCAgICAgICAgICAgIHwgR0NDICAgICAgICAgICAgICAgICAgICAgfAogfCBTMzkwWCAgICAgICAgICAgfCBMaW51eCAgICAgICAgICAgIHwgR0NDICAgICAgICAgICAgICAgICAgICAgfAogfCBTUEFSQyAgICAgICAgICAgfCBMaW51eCAgICAgICAgICAgIHwgR0NDICAgICAgICAgICAgICAgICAgICAgfApAQCAtODcsNiArOTIsNyBAQAogfCBTUEFSQzY0ICAgICAgICAgfCBGcmVlQlNEICAgICAgICAgIHwgR0NDICAgICAgICAgICAgICAgICAgICAgfAogfCBTUEFSQzY0ICAgICAgICAgfCBTb2xhcmlzICAgICAgICAgIHwgT3JhY2xlIFNvbGFyaXMgU3R1ZGlvIEMgfAogfCBUSUxFLUd4L1RJTEVQcm8gfCBMaW51eCAgICAgICAgICAgIHwgR0NDICAgICAgICAgICAgICAgICAgICAgfAorfCBWQVggICAgICAgICAgICAgfCBPcGVuQlNEL3ZheCAgICAgIHwgR0NDICAgICAgICAgICAgICAgICAgICAgfAogfCBYODYgICAgICAgICAgICAgfCBGcmVlQlNEICAgICAgICAgIHwgR0NDICAgICAgICAgICAgICAgICAgICAgfAogfCBYODYgICAgICAgICAgICAgfCBHTlUgSFVSRCAgICAgICAgIHwgR0NDICAgICAgICAgICAgICAgICAgICAgfAogfCBYODYgICAgICAgICAgICAgfCBJbnRlcml4ICAgICAgICAgIHwgR0NDICAgICAgICAgICAgICAgICAgICAgfApAQCAtMTIwLDYgKzEyNiw5IEBACiAiY29uZmlndXJlIiBwcm9ncmFtIGZvdW5kIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGUgbGliZmZpIHNvdXJjZQogZGlzdHJpYnV0aW9uLgogCitJZiB5b3UncmUgYnVpbGRpbmcgbGliZmZpIGRpcmVjdGx5IGZyb20gdmVyc2lvbiBjb250cm9sLCBjb25maWd1cmUgd29uJ3QKK2V4aXN0IHlldDsgcnVuIC4vYXV0b2dlbi5zaCBmaXJzdC4KKwogWW91IG1heSB3YW50IHRvIHRlbGwgY29uZmlndXJlIHdoZXJlIHRvIGluc3RhbGwgdGhlIGxpYmZmaSBsaWJyYXJ5IGFuZAogaGVhZGVyIGZpbGVzLiBUbyBkbyB0aGF0LCB1c2UgdGhlIC0tcHJlZml4IGNvbmZpZ3VyZSBzd2l0Y2guICBMaWJmZmkKIHdpbGwgaW5zdGFsbCB1bmRlciAvdXNyL2xvY2FsIGJ5IGRlZmF1bHQuIApAQCAtMTM3LDEzICsxNDYsMTYgQEAKIE1pY3Jvc29mdCdzIFZpc3VhbCBDKysgY29tcGlsZXIuICBJbiB0aGlzIGNhc2UsIHVzZSB0aGUgbXN2Y2Muc2gKIHdyYXBwZXIgc2NyaXB0IGR1cmluZyBjb25maWd1cmF0aW9uIGxpa2Ugc286CiAKLXBhdGgvdG8vY29uZmlndXJlIENDPXBhdGgvdG8vbXN2Y2Muc2ggTEQ9bGluayBDUFA9XCJjbCAtbm9sb2dvIC1FUFwiCitwYXRoL3RvL2NvbmZpZ3VyZSBDQz1wYXRoL3RvL21zdmNjLnNoIENYWD1wYXRoL3RvL21zdmNjLnNoIExEPWxpbmsgQ1BQPVwiY2wgLW5vbG9nbyAtRVBcIgogCi1Gb3IgNjQtYml0IFdpbmRvd3MgYnVpbGRzLCB1c2UgQ0M9InBhdGgvdG8vbXN2Y2Muc2ggLW02NCIuCi1Zb3UgbWF5IGFsc28gbmVlZCB0byBzcGVjaWZ5IC0tYnVpbGQgYXBwcm9wcmlhdGVseS4gV2hlbiBidWlsZGluZyB3aXRoIE1TVkMKLXVuZGVyIGEgTWluZ1cgZW52aXJvbm1lbnQsIHlvdSBtYXkgbmVlZCB0byByZW1vdmUgdGhlIGxpbmUgaW4gY29uZmlndXJlCi10aGF0IHNldHMgJ2ZpeF9zcmNmaWxlX3BhdGgnIHRvIGEgJ2N5Z3BhdGgnIGNvbW1hbmQuICgnY3lncGF0aCcgaXMgbm90Ci1wcmVzZW50IGluIE1pbmdXLCBhbmQgaXMgbm90IHJlcXVpcmVkIHdoZW4gdXNpbmcgTWluZ1ctc3R5bGUgcGF0aHMuKQorRm9yIDY0LWJpdCBXaW5kb3dzIGJ1aWxkcywgdXNlIENDPSJwYXRoL3RvL21zdmNjLnNoIC1tNjQiIGFuZAorQ1hYPSJwYXRoL3RvL21zdmNjLnNoIC1tNjQiLiAgWW91IG1heSBhbHNvIG5lZWQgdG8gc3BlY2lmeSAtLWJ1aWxkCithcHByb3ByaWF0ZWx5LgorCitXaGVuIGJ1aWxkaW5nIHdpdGggTVNWQyB1bmRlciBhIE1pbmdXIGVudmlyb25tZW50LCB5b3UgbWF5IG5lZWQgdG8KK3JlbW92ZSB0aGUgbGluZSBpbiBjb25maWd1cmUgdGhhdCBzZXRzICdmaXhfc3JjZmlsZV9wYXRoJyB0byBhICdjeWdwYXRoJworY29tbWFuZC4gICgnY3lncGF0aCcgaXMgbm90IHByZXNlbnQgaW4gTWluZ1csIGFuZCBpcyBub3QgcmVxdWlyZWQgd2hlbgordXNpbmcgTWluZ1ctc3R5bGUgcGF0aHMuKQogCiBGb3IgaU9TIGJ1aWxkcywgdGhlICdsaWJmZmkueGNvZGVwcm9qJyBYY29kZSBwcm9qZWN0IGlzIGF2YWlsYWJsZS4KIApAQCAtMTYxLDcgKzE3MywyMCBAQAogSGlzdG9yeQogPT09PT09PQogCi1TZWUgdGhlIENoYW5nZUxvZyBmaWxlcyBmb3IgZGV0YWlscy4KK1NlZSB0aGUgZ2l0IGxvZyBmb3IgZGV0YWlscyBhdCBodHRwOi8vZ2l0aHViLmNvbS9hdGdyZWVuL2xpYmZmaS4KKworMy4xIE1heS0xOS0xNAorICAgICAgICBBZGQgQUFyY2g2NCAoQVJNNjQpIGlPUyBzdXBwb3J0LgorICAgICAgICBBZGQgTmlvcyBJSSBzdXBwb3J0LgorICAgICAgICBBZGQgbTg4ayBhbmQgREVDIFZBWCBzdXBwb3J0LgorCUFkZCBzdXBwb3J0IGZvciBzdGRjYWxsLCB0aGlzY2FsbCwgYW5kIGZhc3RjYWxsIG9uIG5vbi1XaW5kb3dzCisJICAzMi1iaXQgeDg2IHRhcmdldHMgc3VjaCBhcyBMaW51eC4KKwlWYXJpb3VzIEFuZHJvaWQsIE1JUFMgTjMyLCB4ODYsIEZyZWVCU0QgYW5kIFVsdHJhU1BBUkMgSUlpCisJICBmaXhlcy4KKwlNYWtlIHRoZSB0ZXN0c3VpdGUgbW9yZSByb2J1c3Q6IGVsaW1pbmF0ZSBzZXZlcmFsIHNwdXJpb3VzCisJICBmYWlsdXJlcywgYW5kIHJlc3BlY3QgdGhlICRDQyBhbmQgJENYWCBlbnZpcm9ubWVudCB2YXJpYWJsZXMuCisJQXJjaGl2ZSBvZmYgdGhlIG1hbnVhbGx5IG1haW50YWluZWQgQ2hhbmdlTG9nIGluIGZhdm9yIG9mIGdpdAorCSAgbG9nLgogCiAzLjAuMTMgTWFyLTE3LTEzCiAJQWRkIE1ldGEgc3VwcG9ydC4KQEAgLTE4Nyw3ICsyMTIsNiBAQAogCiAzLjAuMTEgQXByLTExLTEyCiAgICAgICAgIExvdHMgb2YgYnVpbGQgZml4ZXMuCi0JQWRkIEFtaWdhIG5ld2VyIE1hY09TIHN1cHBvcnQuCiAJQWRkIHN1cHBvcnQgZm9yIHZhcmlhZGljIGZ1bmN0aW9ucyAoZmZpX3ByZXBfY2lmX3ZhcikuCiAJQWRkIExpbnV4L3gzMiBzdXBwb3J0LgogCUFkZCB0aGlzY2FsbCwgZmFzdGNhbGwgYW5kIE1TVkMgY2RlY2wgc3VwcG9ydCBvbiBXaW5kb3dzLgpAQCAtMzM5LDcgKzM2Myw3IEBACiBBdXRob3JzICYgQ3JlZGl0cwogPT09PT09PT09PT09PT09PT0KIAotbGliZmZpIHdhcyBvcmlnaW5hbGx5IHdyaXR0ZW4gYnkgQW50aG9ueSBHcmVlbiA8Z3JlZW5AcmVkaGF0LmNvbT4uCitsaWJmZmkgd2FzIG9yaWdpbmFsbHkgd3JpdHRlbiBieSBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4uCiAKIFRoZSBkZXZlbG9wZXJzIG9mIHRoZSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiBwcm9qZWN0IGhhdmUgbWFkZQogaW5udW1lcmFibGUgdmFsdWFibGUgY29udHJpYnV0aW9ucy4gIFNlZSB0aGUgQ2hhbmdlTG9nIGZpbGUgZm9yCkBAIC0zNjMsMTAgKzM4NywxMiBAQAogaWE2NAkJSGFucyBCb2VobQogbTMycgkJS2F6dWhpcm8gSW5hb2thCiBtNjhrCQlBbmRyZWFzIFNjaHdhYgorbTg4awkJTWlvZCBWYWxsYXQKIG1pY3JvYmxhemUJTmF0aGFuIFJvc3NpCiBtaXBzCQlBbnRob255IEdyZWVuLCBDYXNleSBNYXJzaGFsbAogbWlwczY0CQlEYXZpZCBEYW5leQogbW94aWUJCUFudGhvbnkgR3JlZW4KK25pb3MgaWkJCVNhbmRyYSBMb29zZW1vcmUKIHBhCQlSYW5kb2xwaCBDaHVuZywgRGF2ZSBBbmdsaW4sIEFuZHJlYXMgVG9ibGVyCiBwb3dlcnBjCQlHZW9mZnJleSBLZWF0aW5nLCBBbmRyZWFzIFRvYmxlciwgCiAJCQkgRGF2aWQgRWRlbHNvaG4sIEpvaG4gSG9ybmt2aXN0CkBAIC0zNzYsNiArNDAyLDcgQEAKIHNoNjQJCUtheiBLb2ppbWEKIHNwYXJjCQlBbnRob255IEdyZWVuLCBHb3Jkb24gSXJsYW0KIHRpbGUtZ3gvdGlsZXBybyBXYWx0ZXIgTGVlCit2YXgJCU1pb2QgVmFsbGF0CiB4ODYJCUFudGhvbnkgR3JlZW4sIEpvbiBCZW5pc3RvbgogeDg2LTY0CQlCbyBUaG9yc2VuCiB4dGVuc2EJCUNocmlzIFphbmtlbApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9hY2xvY2FsLm00IGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9hY2xvY2FsLm00CmluZGV4IGMzYWIyNzIuLjYyOTJmYmEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvYWNsb2NhbC5tNAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2FjbG9jYWwubTQKQEAgLTEsNiArMSw2IEBACi0jIGdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IGFjbG9jYWwgMS4xMi4yIC0qLSBBdXRvY29uZiAtKi0KKyMgZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgYWNsb2NhbCAxLjEzLjQgLSotIEF1dG9jb25mIC0qLQogCi0jIENvcHlyaWdodCAoQykgMTk5Ni0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIAogIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgogIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LApAQCAtMTEsNiArMTEsNyBAQAogIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCiAjIFBBUlRJQ1VMQVIgUFVSUE9TRS4KIAorbTRfaWZuZGVmKFtBQ19DT05GSUdfTUFDUk9fRElSU10sIFttNF9kZWZ1bihbX0FNX0NPTkZJR19NQUNST19ESVJTXSwgW10pbTRfZGVmdW4oW0FDX0NPTkZJR19NQUNST19ESVJTXSwgW19BTV9DT05GSUdfTUFDUk9fRElSUygkQCldKV0pCiBtNF9pZm5kZWYoW0FDX0FVVE9DT05GX1ZFUlNJT05dLAogICBbbTRfY29weShbbTRfUEFDS0FHRV9WRVJTSU9OXSwgW0FDX0FVVE9DT05GX1ZFUlNJT05dKV0pZG5sCiBtNF9pZihtNF9kZWZuKFtBQ19BVVRPQ09ORl9WRVJTSU9OXSksIFsyLjY5XSwsCkBAIC04MzcsMjQgKzgzOCwyMiBAQAogZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgogZG5sIEFDX0RFRlVOKFtBQ19MVERMX0RMU1lNX1VTQ09SRV0sIFtdKQogCi0jIENvcHlyaWdodCAoQykgMjAwMi0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBDb3B5cmlnaHQgKEMpIDIwMDItMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KICMKICMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KICMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKICMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgogCi0jIHNlcmlhbCA4Ci0KICMgQU1fQVVUT01BS0VfVkVSU0lPTihWRVJTSU9OKQogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIEF1dG9tYWtlIFguWSB0cmFjZXMgdGhpcyBtYWNybyB0byBlbnN1cmUgYWNsb2NhbC5tNCBoYXMgYmVlbgogIyBnZW5lcmF0ZWQgZnJvbSB0aGUgbTQgZmlsZXMgYWNjb21wYW55aW5nIEF1dG9tYWtlIFguWS4KICMgKFRoaXMgcHJpdmF0ZSBtYWNybyBzaG91bGQgbm90IGJlIGNhbGxlZCBvdXRzaWRlIHRoaXMgZmlsZS4pCiBBQ19ERUZVTihbQU1fQVVUT01BS0VfVkVSU0lPTl0sCi1bYW1fX2FwaV92ZXJzaW9uPScxLjEyJworW2FtX19hcGlfdmVyc2lvbj0nMS4xMycKIGRubCBTb21lIHVzZXJzIGZpbmQgQU1fQVVUT01BS0VfVkVSU0lPTiBhbmQgbWlzdGFrZSBpdCBmb3IgYSB3YXkgdG8KIGRubCByZXF1aXJlIHNvbWUgbWluaW11bSB2ZXJzaW9uLiAgUG9pbnQgdGhlbSB0byB0aGUgcmlnaHQgbWFjcm8uCi1tNF9pZihbJDFdLCBbMS4xMi4yXSwgW10sCittNF9pZihbJDFdLCBbMS4xMy40XSwgW10sCiAgICAgICBbQUNfRkFUQUwoW0RvIG5vdCBjYWxsICQwLCB1c2UgQU1fSU5JVF9BVVRPTUFLRShbJDFdKS5dKV0pZG5sCiBdKQogCkBAIC04NzAsMjEgKzg2OSwxOSBAQAogIyBDYWxsIEFNX0FVVE9NQUtFX1ZFUlNJT04gYW5kIEFNX0FVVE9NQUtFX1ZFUlNJT04gc28gdGhleSBjYW4gYmUgdHJhY2VkLgogIyBUaGlzIGZ1bmN0aW9uIGlzIEFDX1JFUVVJUkVkIGJ5IEFNX0lOSVRfQVVUT01BS0UuCiBBQ19ERUZVTihbQU1fU0VUX0NVUlJFTlRfQVVUT01BS0VfVkVSU0lPTl0sCi1bQU1fQVVUT01BS0VfVkVSU0lPTihbMS4xMi4yXSlkbmwKK1tBTV9BVVRPTUFLRV9WRVJTSU9OKFsxLjEzLjRdKWRubAogbTRfaWZuZGVmKFtBQ19BVVRPQ09ORl9WRVJTSU9OXSwKICAgW200X2NvcHkoW200X1BBQ0tBR0VfVkVSU0lPTl0sIFtBQ19BVVRPQ09ORl9WRVJTSU9OXSldKWRubAogX0FNX0FVVE9DT05GX1ZFUlNJT04obTRfZGVmbihbQUNfQVVUT0NPTkZfVkVSU0lPTl0pKV0pCiAKICMgRmlndXJlIG91dCBob3cgdG8gcnVuIHRoZSBhc3NlbWJsZXIuICAgICAgICAgICAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KIAotIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAjCiAjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCiAjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCiAjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KIAotIyBzZXJpYWwgNQotCiAjIEFNX1BST0dfQVMKICMgLS0tLS0tLS0tLQogQUNfREVGVU4oW0FNX1BST0dfQVNdLApAQCAtODk5LDE0ICs4OTYsMTIgQEAKIAogIyBBTV9BVVhfRElSX0VYUEFORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQogCi0jIENvcHlyaWdodCAoQykgMjAwMS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KICMKICMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KICMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKICMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgogCi0jIHNlcmlhbCAyCi0KICMgRm9yIHByb2plY3RzIHVzaW5nIEFDX0NPTkZJR19BVVhfRElSKFtmb29dKSwgQXV0b2NvbmYgc2V0cwogIyAkYWNfYXV4X2RpciB0byAnJHNyY2Rpci9mb28nLiAgSW4gb3RoZXIgcHJvamVjdHMsIGl0IGlzIHNldCB0bwogIyAnJHNyY2RpcicsICckc3JjZGlyLy4uJywgb3IgJyRzcmNkaXIvLi4vLi4nLgpAQCAtOTU0LDE0ICs5NDksMTIgQEAKIAogIyBBTV9DT05ESVRJT05BTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQogCi0jIENvcHlyaWdodCAoQykgMTk5Ny0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBDb3B5cmlnaHQgKEMpIDE5OTctMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KICMKICMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KICMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKICMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgogCi0jIHNlcmlhbCAxMAotCiAjIEFNX0NPTkRJVElPTkFMKE5BTUUsIFNIRUxMLUNPTkRJVElPTikKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBEZWZpbmUgYSBjb25kaXRpb25hbC4KQEAgLTk4NywxMyArOTgwLDEyIEBACiBVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS5dXSkKIGZpXSldKQogCi0jIENvcHlyaWdodCAoQykgMTk5OS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KICMKICMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KICMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKICMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgogCi0jIHNlcmlhbCAxNwogCiAjIFRoZXJlIGFyZSBhIGZldyBkaXJ0eSBoYWNrcyBiZWxvdyB0byBhdm9pZCBsZXR0aW5nICdBQ19QUk9HX0NDJyBiZQogIyB3cml0dGVuIGluIGNsZWFyLCBpbiB3aGljaCBjYXNlIGF1dG9tYWtlLCB3aGVuIHJlYWRpbmcgYWNsb2NhbC5tNCwKQEAgLTExNzksMTkgKzExNzEsMTggQEAKIAogIyBHZW5lcmF0ZSBjb2RlIHRvIHNldCB1cCBkZXBlbmRlbmN5IHRyYWNraW5nLiAgICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQogCi0jIENvcHlyaWdodCAoQykgMTk5OS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KICMKICMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KICMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKICMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgogCi0jIHNlcmlhbCA2CiAKICMgX0FNX09VVFBVVF9ERVBFTkRFTkNZX0NPTU1BTkRTCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogQUNfREVGVU4oW19BTV9PVVRQVVRfREVQRU5ERU5DWV9DT01NQU5EU10sCiBbewotICAjIEF1dG9jb25mIDIuNjIgcXVvdGVzIC0tZmlsZSBhcmd1bWVudHMgZm9yIGV2YWwsIGJ1dCBub3Qgd2hlbiBmaWxlcworICAjIE9sZGVyIEF1dG9jb25mIHF1b3RlcyAtLWZpbGUgYXJndW1lbnRzIGZvciBldmFsLCBidXQgbm90IHdoZW4gZmlsZXMKICAgIyBhcmUgbGlzdGVkIHdpdGhvdXQgLS1maWxlLiAgTGV0J3MgcGxheSBzYWZlIGFuZCBvbmx5IGVuYWJsZSB0aGUgZXZhbAogICAjIGlmIHdlIGRldGVjdCB0aGUgcXVvdGluZy4KICAgY2FzZSAkQ09ORklHX0ZJTEVTIGluCkBAIC0xMjIwLDcgKzEyMTEsNyBAQAogICAgIERFUERJUj1gc2VkIC1uICdzL15ERVBESVIgPSAvL3AnIDwgIiRtZiJgCiAgICAgdGVzdCAteiAiJERFUERJUiIgJiYgY29udGludWUKICAgICBhbV9faW5jbHVkZT1gc2VkIC1uICdzL15hbV9faW5jbHVkZSA9IC8vcCcgPCAiJG1mImAKLSAgICB0ZXN0IC16ICJhbV9faW5jbHVkZSIgJiYgY29udGludWUKKyAgICB0ZXN0IC16ICIkYW1fX2luY2x1ZGUiICYmIGNvbnRpbnVlCiAgICAgYW1fX3F1b3RlPWBzZWQgLW4gJ3MvXmFtX19xdW90ZSA9IC8vcCcgPCAiJG1mImAKICAgICAjIEZpbmQgYWxsIGRlcGVuZGVuY3kgb3V0cHV0IGZpbGVzLCB0aGV5IGFyZSBpbmNsdWRlZCBmaWxlcyB3aXRoCiAgICAgIyAkKERFUERJUikgaW4gdGhlaXIgbmFtZXMuICBXZSBpbnZva2Ugc2VkIHR3aWNlIGJlY2F1c2UgaXQgaXMgdGhlCkBAIC0xMjU2LDE0ICsxMjQ3LDEyIEBACiAKICMgRG8gYWxsIHRoZSB3b3JrIGZvciBBdXRvbWFrZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KIAotIyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAjCiAjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCiAjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCiAjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KIAotIyBzZXJpYWwgMTkKLQogIyBUaGlzIG1hY3JvIGFjdHVhbGx5IGRvZXMgdG9vIG11Y2guICBTb21lIGNoZWNrcyBhcmUgb25seSBuZWVkZWQgaWYKICMgeW91ciBwYWNrYWdlIGRvZXMgY2VydGFpbiB0aGluZ3MuICBCdXQgdGhpcyBpc24ndCByZWFsbHkgYSBiaWcgZGVhbC4KIApAQCAtMTI3OSw3ICsxMjY4LDcgQEAKICMgYXJndW1lbnRzIG1hbmRhdG9yeSwgYW5kIHRoZW4gd2UgY2FuIGRlcGVuZCBvbiBhIG5ldyBBdXRvY29uZgogIyByZWxlYXNlIGFuZCBkcm9wIHRoZSBvbGQgY2FsbCBzdXBwb3J0LgogQUNfREVGVU4oW0FNX0lOSVRfQVVUT01BS0VdLAotW0FDX1BSRVJFUShbMi42Ml0pZG5sCitbQUNfUFJFUkVRKFsyLjY1XSlkbmwKIGRubCBBdXRvY29uZiB3YW50cyB0byBkaXNhbGxvdyBBTV8gbmFtZXMuICBXZSBleHBsaWNpdGx5IGFsbG93CiBkbmwgdGhlIG9uZXMgd2UgY2FyZSBhYm91dC4KIG00X3BhdHRlcm5fYWxsb3coW15BTV9bQS1aXStGTEFHUyRdKWRubApAQCAtMTMwOSw4ICsxMjk4LDcgQEAKIGRubCBEaXN0aW5ndWlzaCBiZXR3ZWVuIG9sZC1zdHlsZSBhbmQgbmV3LXN0eWxlIGNhbGxzLgogbTRfaWZ2YWwoWyQyXSwKIFtBQ19ESUFHTk9TRShbb2Jzb2xldGVdLAotWyQwOiB0d28tIGFuZCB0aHJlZS1hcmd1bWVudHMgZm9ybXMgYXJlIGRlcHJlY2F0ZWQuICBGb3IgbW9yZSBpbmZvLCBzZWU6Ci1odHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvYXV0b21ha2UvbWFudWFsL2F1dG9tYWtlLmh0bWwjTW9kZXJuaXplLUFNX0lOSVRfQVVUT01BS0UtaW52b2NhdGlvbl0pCisgICAgICAgICAgICAgWyQwOiB0d28tIGFuZCB0aHJlZS1hcmd1bWVudHMgZm9ybXMgYXJlIGRlcHJlY2F0ZWQuXSkKIG00X2lmdmFsKFskM10sIFtfQU1fU0VUX09QVElPTihbbm8tZGVmaW5lXSldKWRubAogIEFDX1NVQlNUKFtQQUNLQUdFXSwgWyQxXSlkbmwKICBBQ19TVUJTVChbVkVSU0lPTl0sIFskMl0pXSwKQEAgLTEzNjQsMTggKzEzNTIsMTUgQEAKIAkJICBbX0FNX0RFUEVOREVOQ0lFUyhbT0JKQ10pXSwKIAkJICBbbTRfZGVmaW5lKFtBQ19QUk9HX09CSkNdLAogCQkJICAgICBtNF9kZWZuKFtBQ19QUk9HX09CSkNdKVtfQU1fREVQRU5ERU5DSUVTKFtPQkpDXSldKV0pZG5sCi1kbmwgU3VwcG9ydCBmb3IgT2JqZWN0aXZlIEMrKyB3YXMgb25seSBpbnRyb2R1Y2VkIGluIEF1dG9jb25mIDIuNjUsCi1kbmwgYnV0IHdlIHN0aWxsIGNhdGVyIHRvIEF1dG9jb25mIDIuNjIuCi1tNF9pZmRlZihbQUNfUFJPR19PQkpDWFhdLAotW0FDX1BST1ZJREVfSUZFTFNFKFtBQ19QUk9HX09CSkNYWF0sCitBQ19QUk9WSURFX0lGRUxTRShbQUNfUFJPR19PQkpDWFhdLAogCQkgIFtfQU1fREVQRU5ERU5DSUVTKFtPQkpDWFhdKV0sCiAJCSAgW200X2RlZmluZShbQUNfUFJPR19PQkpDWFhdLAotCQkJICAgICBtNF9kZWZuKFtBQ19QUk9HX09CSkNYWF0pW19BTV9ERVBFTkRFTkNJRVMoW09CSkNYWF0pXSldKV0pZG5sCisJCQkgICAgIG00X2RlZm4oW0FDX1BST0dfT0JKQ1hYXSlbX0FNX0RFUEVOREVOQ0lFUyhbT0JKQ1hYXSldKV0pZG5sCiBdKQotX0FNX0lGX09QVElPTihbc2lsZW50LXJ1bGVzXSwgW0FDX1JFUVVJUkUoW0FNX1NJTEVOVF9SVUxFU10pXSlkbmwKLWRubCBUaGUgJ3BhcmFsbGVsLXRlc3RzJyBkcml2ZXIgbWF5IG5lZWQgdG8ga25vdyBhYm91dCBFWEVFWFQsIHNvIGFkZCB0aGUKLWRubCAnYW1fX0VYRUVYVCcgY29uZGl0aW9uYWwgaWYgX0FNX0NPTVBJTEVSX0VYRUVYVCB3YXMgc2Vlbi4gIFRoaXMgbWFjcm8KLWRubCBpcyBob29rZWQgb250byBfQUNfQ09NUElMRVJfRVhFRVhUIGVhcmx5LCBzZWUgYmVsb3cuCitBQ19SRVFVSVJFKFtBTV9TSUxFTlRfUlVMRVNdKWRubAorZG5sIFRoZSB0ZXN0c3VpdGUgZHJpdmVyIG1heSBuZWVkIHRvIGtub3cgYWJvdXQgRVhFRVhULCBzbyBhZGQgdGhlCitkbmwgJ2FtX19FWEVFWFQnIGNvbmRpdGlvbmFsIGlmIF9BTV9DT01QSUxFUl9FWEVFWFQgd2FzIHNlZW4uICBUaGlzCitkbmwgbWFjcm8gaXMgaG9va2VkIG9udG8gX0FDX0NPTVBJTEVSX0VYRUVYVCBlYXJseSwgc2VlIGJlbG93LgogQUNfQ09ORklHX0NPTU1BTkRTX1BSRShkbmwKIFttNF9wcm92aWRlX2lmKFtfQU1fQ09NUElMRVJfRVhFRVhUXSwKICAgW0FNX0NPTkRJVElPTkFMKFthbV9fRVhFRVhUXSwgW3Rlc3QgLW4gIiRFWEVFWFQiXSldKV0pZG5sCkBAIC0xNDA5LDE0ICsxMzk0LDEyIEBACiBkb25lCiBlY2hvICJ0aW1lc3RhbXAgZm9yICRfYW1fYXJnIiA+YEFTX0RJUk5BTUUoWyIkX2FtX2FyZyJdKWAvc3RhbXAtaFtdJF9hbV9zdGFtcF9jb3VudF0pCiAKLSMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIENvcHlyaWdodCAoQykgMjAwMS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogIwogIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgogIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAogIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCiAKLSMgc2VyaWFsIDgKLQogIyBBTV9QUk9HX0lOU1RBTExfU0gKICMgLS0tLS0tLS0tLS0tLS0tLS0tCiAjIERlZmluZSAkaW5zdGFsbF9zaC4KQEAgLTE0MzIsMTQgKzE0MTUsMTIgQEAKIGZpCiBBQ19TVUJTVChbaW5zdGFsbF9zaF0pXSkKIAotIyBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAjCiAjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCiAjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCiAjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KIAotIyBzZXJpYWwgMgotCiAjIENoZWNrIHdoZXRoZXIgdGhlIHVuZGVybHlpbmcgZmlsZS1zeXN0ZW0gc3VwcG9ydHMgZmlsZW5hbWVzCiAjIHdpdGggYSBsZWFkaW5nIGRvdC4gIEZvciBpbnN0YW5jZSBNUy1ET1MgZG9lc24ndC4KIEFDX0RFRlVOKFtBTV9TRVRfTEVBRElOR19ET1RdLApAQCAtMTQ1NiwxNCArMTQzNywxMiBAQAogIyBBZGQgLS1lbmFibGUtbWFpbnRhaW5lci1tb2RlIG9wdGlvbiB0byBjb25maWd1cmUuICAgICAgICAgLSotIEF1dG9jb25mIC0qLQogIyBGcm9tIEppbSBNZXllcmluZwogCi0jIENvcHlyaWdodCAoQykgMTk5Ni0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KICMKICMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KICMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKICMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgogCi0jIHNlcmlhbCA3Ci0KICMgQU1fTUFJTlRBSU5FUl9NT0RFKFtERUZBVUxULU1PREVdKQogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIENvbnRyb2wgbWFpbnRhaW5lci1zcGVjaWZpYyBwb3J0aW9ucyBvZiBNYWtlZmlsZXMuCkBAIC0xNDkxLDE4ICsxNDcwLDE0IEBACiBdCiApCiAKLUFVX0RFRlVOKFtqbV9NQUlOVEFJTkVSX01PREVdLCBbQU1fTUFJTlRBSU5FUl9NT0RFXSkKLQogIyBDaGVjayB0byBzZWUgaG93ICdtYWtlJyB0cmVhdHMgaW5jbHVkZXMuCSAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KIAotIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAjCiAjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCiAjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCiAjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KIAotIyBzZXJpYWwgNQotCiAjIEFNX01BS0VfSU5DTFVERSgpCiAjIC0tLS0tLS0tLS0tLS0tLS0tCiAjIENoZWNrIHRvIHNlZSBob3cgbWFrZSB0cmVhdHMgaW5jbHVkZXMuCkBAIC0xNTQ1LDE0ICsxNTIwLDEyIEBACiBybSAtZiBjb25maW5jIGNvbmZtZgogXSkKIAotIyBDb3B5cmlnaHQgKEMpIDE5OTktMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAjCiAjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCiAjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCiAjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KIAotIyBzZXJpYWwgNgotCiAjIEFNX1BST0dfQ0NfQ19PCiAjIC0tLS0tLS0tLS0tLS0tCiAjIExpa2UgQUNfUFJPR19DQ19DX08sIGJ1dCBjaGFuZ2VkIGZvciBhdXRvbWFrZS4KQEAgLTE1ODEsMTQgKzE1NTQsMTIgQEAKIAogIyBGYWtlIHRoZSBleGlzdGVuY2Ugb2YgcHJvZ3JhbXMgdGhhdCBHTlUgbWFpbnRhaW5lcnMgdXNlLiAgLSotIEF1dG9jb25mIC0qLQogCi0jIENvcHlyaWdodCAoQykgMTk5Ny0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBDb3B5cmlnaHQgKEMpIDE5OTctMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KICMKICMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KICMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKICMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgogCi0jIHNlcmlhbCA3Ci0KICMgQU1fTUlTU0lOR19QUk9HKE5BTUUsIFBST0dSQU0pCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogQUNfREVGVU4oW0FNX01JU1NJTkdfUFJPR10sCkBAIC0xNTk2LDExICsxNTY3LDEwIEBACiAkMT0keyQxLSIke2FtX21pc3NpbmdfcnVufSQyIn0KIEFDX1NVQlNUKCQxKV0pCiAKLQogIyBBTV9NSVNTSU5HX0hBU19SVU4KICMgLS0tLS0tLS0tLS0tLS0tLS0tCi0jIERlZmluZSBNSVNTSU5HIGlmIG5vdCBkZWZpbmVkIHNvIGZhciBhbmQgdGVzdCBpZiBpdCBzdXBwb3J0cyAtLXJ1bi4KLSMgSWYgaXQgZG9lcywgc2V0IGFtX21pc3NpbmdfcnVuIHRvIHVzZSBpdCwgb3RoZXJ3aXNlLCB0byBub3RoaW5nLgorIyBEZWZpbmUgTUlTU0lORyBpZiBub3QgZGVmaW5lZCBzbyBmYXIgYW5kIHRlc3QgaWYgaXQgaXMgbW9kZXJuIGVub3VnaC4KKyMgSWYgaXQgaXMsIHNldCBhbV9taXNzaW5nX3J1biB0byB1c2UgaXQsIG90aGVyd2lzZSwgdG8gbm90aGluZy4KIEFDX0RFRlVOKFtBTV9NSVNTSU5HX0hBU19SVU5dLAogW0FDX1JFUVVJUkUoW0FNX0FVWF9ESVJfRVhQQU5EXSlkbmwKIEFDX1JFUVVJUkVfQVVYX0ZJTEUoW21pc3NpbmddKWRubApAQCAtMTYxMyw4ICsxNTgzLDggQEAKICAgZXNhYwogZmkKICMgVXNlIGV2YWwgdG8gZXhwYW5kICRTSEVMTAotaWYgZXZhbCAiJE1JU1NJTkcgLS1ydW4gdHJ1ZSI7IHRoZW4KLSAgYW1fbWlzc2luZ19ydW49IiRNSVNTSU5HIC0tcnVuICIKK2lmIGV2YWwgIiRNSVNTSU5HIC0taXMtbGlnaHR3ZWlnaHQiOyB0aGVuCisgIGFtX21pc3NpbmdfcnVuPSIkTUlTU0lORyAiCiBlbHNlCiAgIGFtX21pc3NpbmdfcnVuPQogICBBQ19NU0dfV0FSTihbJ21pc3NpbmcnIHNjcmlwdCBpcyB0b28gb2xkIG9yIG1pc3NpbmddKQpAQCAtMTYyMywxNCArMTU5MywxMiBAQAogCiAjIEhlbHBlciBmdW5jdGlvbnMgZm9yIG9wdGlvbiBoYW5kbGluZy4gICAgICAgICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCiAKLSMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIENvcHlyaWdodCAoQykgMjAwMS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogIwogIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgogIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAogIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCiAKLSMgc2VyaWFsIDYKLQogIyBfQU1fTUFOR0xFX09QVElPTihOQU1FKQogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogQUNfREVGVU4oW19BTV9NQU5HTEVfT1BUSU9OXSwKQEAgLTE2NTYsMTQgKzE2MjQsMTIgQEAKIAogIyBDaGVjayB0byBtYWtlIHN1cmUgdGhhdCB0aGUgYnVpbGQgZW52aXJvbm1lbnQgaXMgc2FuZS4gICAgLSotIEF1dG9jb25mIC0qLQogCi0jIENvcHlyaWdodCAoQykgMTk5Ni0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KICMKICMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KICMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKICMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgogCi0jIHNlcmlhbCA5Ci0KICMgQU1fU0FOSVRZX0NIRUNLCiAjIC0tLS0tLS0tLS0tLS0tLQogQUNfREVGVU4oW0FNX1NBTklUWV9DSEVDS10sCkBAIC0xNzM5LDEzICsxNzA1LDcxIEBACiBybSAtZiBjb25mdGVzdC5maWxlCiBdKQogCi0jIENvcHlyaWdodCAoQykgMjAwMS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KICMKICMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KICMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKICMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgogCi0jIHNlcmlhbCAyCisjIEFNX1NJTEVOVF9SVUxFUyhbREVGQVVMVF0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEVuYWJsZSBsZXNzIHZlcmJvc2UgYnVpbGQgcnVsZXM7IHdpdGggdGhlIGRlZmF1bHQgc2V0IHRvIERFRkFVTFQKKyMgKCJ5ZXMiIGJlaW5nIGxlc3MgdmVyYm9zZSwgIm5vIiBvciBlbXB0eSBiZWluZyB2ZXJib3NlKS4KK0FDX0RFRlVOKFtBTV9TSUxFTlRfUlVMRVNdLAorW0FDX0FSR19FTkFCTEUoW3NpbGVudC1ydWxlc10sIFtkbmwKK0FTX0hFTFBfU1RSSU5HKAorICBbLS1lbmFibGUtc2lsZW50LXJ1bGVzXSwKKyAgW2xlc3MgdmVyYm9zZSBidWlsZCBvdXRwdXQgKHVuZG86ICJtYWtlIFY9MSIpXSkKK0FTX0hFTFBfU1RSSU5HKAorICBbLS1kaXNhYmxlLXNpbGVudC1ydWxlc10sCisgIFt2ZXJib3NlIGJ1aWxkIG91dHB1dCAodW5kbzogIm1ha2UgVj0wIildKWRubAorXSkKK2Nhc2UgJGVuYWJsZV9zaWxlbnRfcnVsZXMgaW4gQCU6QCAoKCgKKyAgeWVzKSBBTV9ERUZBVUxUX1ZFUkJPU0lUWT0wOzsKKyAgIG5vKSBBTV9ERUZBVUxUX1ZFUkJPU0lUWT0xOzsKKyAgICAqKSBBTV9ERUZBVUxUX1ZFUkJPU0lUWT1tNF9pZihbJDFdLCBbeWVzXSwgWzBdLCBbMV0pOzsKK2VzYWMKK2RubAorZG5sIEEgZmV3ICdtYWtlJyBpbXBsZW1lbnRhdGlvbnMgKGUuZy4sIE5vblN0b3AgT1MgYW5kIE5leHRTdGVwKQorZG5sIGRvIG5vdCBzdXBwb3J0IG5lc3RlZCB2YXJpYWJsZSBleHBhbnNpb25zLgorZG5sIFNlZSBhdXRvbWFrZSBidWcjOTkyOCBhbmQgYnVnIzEwMjM3LgorYW1fbWFrZT0ke01BS0UtbWFrZX0KK0FDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyICRhbV9tYWtlIHN1cHBvcnRzIG5lc3RlZCB2YXJpYWJsZXNdLAorICAgW2FtX2N2X21ha2Vfc3VwcG9ydF9uZXN0ZWRfdmFyaWFibGVzXSwKKyAgIFtpZiBBU19FQ0hPKFtbJ1RSVUU9JChCQVIkKFYpKQorQkFSMD1mYWxzZQorQkFSMT10cnVlCitWPTEKK2FtX19kb2l0OgorCUAkKFRSVUUpCisuUEhPTlk6IGFtX19kb2l0J11dKSB8ICRhbV9tYWtlIC1mIC0gPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIGFtX2N2X21ha2Vfc3VwcG9ydF9uZXN0ZWRfdmFyaWFibGVzPXllcworZWxzZQorICBhbV9jdl9tYWtlX3N1cHBvcnRfbmVzdGVkX3ZhcmlhYmxlcz1ubworZmldKQoraWYgdGVzdCAkYW1fY3ZfbWFrZV9zdXBwb3J0X25lc3RlZF92YXJpYWJsZXMgPSB5ZXM7IHRoZW4KKyAgZG5sIFVzaW5nICckVicgaW5zdGVhZCBvZiAnJChWKScgYnJlYWtzIElSSVggbWFrZS4KKyAgQU1fVj0nJChWKScKKyAgQU1fREVGQVVMVF9WPSckKEFNX0RFRkFVTFRfVkVSQk9TSVRZKScKK2Vsc2UKKyAgQU1fVj0kQU1fREVGQVVMVF9WRVJCT1NJVFkKKyAgQU1fREVGQVVMVF9WPSRBTV9ERUZBVUxUX1ZFUkJPU0lUWQorZmkKK0FDX1NVQlNUKFtBTV9WXSlkbmwKK0FNX1NVQlNUX05PVE1BS0UoW0FNX1ZdKWRubAorQUNfU1VCU1QoW0FNX0RFRkFVTFRfVl0pZG5sCitBTV9TVUJTVF9OT1RNQUtFKFtBTV9ERUZBVUxUX1ZdKWRubAorQUNfU1VCU1QoW0FNX0RFRkFVTFRfVkVSQk9TSVRZXSlkbmwKK0FNX0JBQ0tTTEFTSD0nXCcKK0FDX1NVQlNUKFtBTV9CQUNLU0xBU0hdKWRubAorX0FNX1NVQlNUX05PVE1BS0UoW0FNX0JBQ0tTTEFTSF0pZG5sCitdKQorCisjIENvcHlyaWdodCAoQykgMjAwMS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCiAKICMgQU1fUFJPR19JTlNUQUxMX1NUUklQCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTc2OSwxNCArMTc5MywxMiBAQAogSU5TVEFMTF9TVFJJUF9QUk9HUkFNPSJcJChpbnN0YWxsX3NoKSAtYyAtcyIKIEFDX1NVQlNUKFtJTlNUQUxMX1NUUklQX1BST0dSQU1dKV0pCiAKLSMgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIENvcHlyaWdodCAoQykgMjAwNi0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogIwogIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgogIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAogIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCiAKLSMgc2VyaWFsIDMKLQogIyBfQU1fU1VCU1RfTk9UTUFLRShWQVJJQUJMRSkKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIFByZXZlbnQgQXV0b21ha2UgZnJvbSBvdXRwdXR0aW5nIFZBUklBQkxFID0gQFZBUklBQkxFQCBpbiBNYWtlZmlsZS5pbi4KQEAgLTE3OTAsMTQgKzE4MTIsMTIgQEAKIAogIyBDaGVjayBob3cgdG8gY3JlYXRlIGEgdGFyYmFsbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQogCi0jIENvcHlyaWdodCAoQykgMjAwNC0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KICMKICMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KICMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKICMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgogCi0jIHNlcmlhbCAzCi0KICMgX0FNX1BST0dfVEFSKEZPUk1BVCkKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgQ2hlY2sgaG93IHRvIGNyZWF0ZSBhIHRhcmJhbGwgaW4gZm9ybWF0IEZPUk1BVC4KQEAgLTE4MTEsNzYgKzE4MzEsMTE0IEBACiAjIFN1YnN0aXR1dGUgYSB2YXJpYWJsZSAkKGFtX191bnRhcikgdGhhdCBleHRyYWN0IHN1Y2gKICMgYSB0YXJiYWxsIHJlYWQgZnJvbSBzdGRpbi4KICMgICAgICQoYW1fX3VudGFyKSA8IHJlc3VsdC50YXIKKyMKIEFDX0RFRlVOKFtfQU1fUFJPR19UQVJdLAogWyMgQWx3YXlzIGRlZmluZSBBTVRBUiBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gIFllcywgaXQncyBzdGlsbCB1c2VkCiAjIGluIHRoZSB3aWxkIDotKCAgV2Ugc2hvdWxkIGZpbmQgYSBwcm9wZXIgd2F5IHRvIGRlcHJlY2F0ZSBpdCAuLi4KIEFDX1NVQlNUKFtBTVRBUl0sIFsnJCR7VEFSLXRhcn0nXSkKLW00X2lmKFskMV0sIFt2N10sCi0gICAgIFthbV9fdGFyPSckJHtUQVItdGFyfSBjaG9mIC0gIiQkdGFyZGlyIicgYW1fX3VudGFyPSckJHtUQVItdGFyfSB4ZiAtJ10sCi0gICAgIFttNF9jYXNlKFskMV0sIFt1c3Rhcl0sLCBbcGF4XSwsCi0gICAgICAgICAgICAgIFttNF9mYXRhbChbVW5rbm93biB0YXIgZm9ybWF0XSldKQotQUNfTVNHX0NIRUNLSU5HKFtob3cgdG8gY3JlYXRlIGEgJDEgdGFyIGFyY2hpdmVdKQotIyBMb29wIG92ZXIgYWxsIGtub3duIG1ldGhvZHMgdG8gY3JlYXRlIGEgdGFyIGFyY2hpdmUgdW50aWwgb25lIHdvcmtzLgorCisjIFdlJ2xsIGxvb3Agb3ZlciBhbGwga25vd24gbWV0aG9kcyB0byBjcmVhdGUgYSB0YXIgYXJjaGl2ZSB1bnRpbCBvbmUgd29ya3MuCiBfYW1fdG9vbHM9J2dudXRhciBtNF9pZihbJDFdLCBbdXN0YXJdLCBbcGxhaW50YXJdKSBwYXggY3BpbyBub25lJwotX2FtX3Rvb2xzPSR7YW1fY3ZfcHJvZ190YXJfJDEtJF9hbV90b29sc30KLSMgRG8gbm90IGZvbGQgdGhlIGFib3ZlIHR3byBsaW5lIGludG8gb25lLCBiZWNhdXNlIFRydTY0IHNoIGFuZAotIyBTb2xhcmlzIHNoIHdpbGwgbm90IGdyb2sgc3BhY2VzIGluIHRoZSByaHMgb2YgJy0nLgotZm9yIF9hbV90b29sIGluICRfYW1fdG9vbHMKLWRvCi0gIGNhc2UgJF9hbV90b29sIGluCi0gIGdudXRhcikKLSAgICBmb3IgX2FtX3RhciBpbiB0YXIgZ251dGFyIGd0YXI7Ci0gICAgZG8KLSAgICAgIEFNX1JVTl9MT0coWyRfYW1fdGFyIC0tdmVyc2lvbl0pICYmIGJyZWFrCi0gICAgZG9uZQotICAgIGFtX190YXI9IiRfYW1fdGFyIC0tZm9ybWF0PW00X2lmKFskMV0sIFtwYXhdLCBbcG9zaXhdLCBbJDFdKSAtY2hmIC0gIiciJCR0YXJkaXIiJwotICAgIGFtX190YXJfPSIkX2FtX3RhciAtLWZvcm1hdD1tNF9pZihbJDFdLCBbcGF4XSwgW3Bvc2l4XSwgWyQxXSkgLWNoZiAtICInIiR0YXJkaXIiJwotICAgIGFtX191bnRhcj0iJF9hbV90YXIgLXhmIC0iCi0gICAgOzsKLSAgcGxhaW50YXIpCi0gICAgIyBNdXN0IHNraXAgR05VIHRhcjogaWYgaXQgZG9lcyBub3Qgc3VwcG9ydCAtLWZvcm1hdD0gaXQgZG9lc24ndCBjcmVhdGUKLSAgICAjIHVzdGFyIHRhcmJhbGwgZWl0aGVyLgotICAgICh0YXIgLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+JjEgJiYgY29udGludWUKLSAgICBhbV9fdGFyPSd0YXIgY2hmIC0gIiQkdGFyZGlyIicKLSAgICBhbV9fdGFyXz0ndGFyIGNoZiAtICIkdGFyZGlyIicKLSAgICBhbV9fdW50YXI9J3RhciB4ZiAtJwotICAgIDs7Ci0gIHBheCkKLSAgICBhbV9fdGFyPSdwYXggLUwgLXggJDEgLXcgIiQkdGFyZGlyIicKLSAgICBhbV9fdGFyXz0ncGF4IC1MIC14ICQxIC13ICIkdGFyZGlyIicKLSAgICBhbV9fdW50YXI9J3BheCAtcicKLSAgICA7OwotICBjcGlvKQotICAgIGFtX190YXI9J2ZpbmQgIiQkdGFyZGlyIiAtcHJpbnQgfCBjcGlvIC1vIC1IICQxIC1MJwotICAgIGFtX190YXJfPSdmaW5kICIkdGFyZGlyIiAtcHJpbnQgfCBjcGlvIC1vIC1IICQxIC1MJwotICAgIGFtX191bnRhcj0nY3BpbyAtaSAtSCAkMSAtZCcKLSAgICA7OwotICBub25lKQotICAgIGFtX190YXI9ZmFsc2UKLSAgICBhbV9fdGFyXz1mYWxzZQotICAgIGFtX191bnRhcj1mYWxzZQotICAgIDs7Ci0gIGVzYWMKIAotICAjIElmIHRoZSB2YWx1ZSB3YXMgY2FjaGVkLCBzdG9wIG5vdy4gIFdlIGp1c3Qgd2FudGVkIHRvIGhhdmUgYW1fX3RhcgotICAjIGFuZCBhbV9fdW50YXIgc2V0LgotICB0ZXN0IC1uICIke2FtX2N2X3Byb2dfdGFyXyQxfSIgJiYgYnJlYWsKK200X2lmKFskMV0sIFt2N10sCisgIFthbV9fdGFyPSckJHtUQVItdGFyfSBjaG9mIC0gIiQkdGFyZGlyIicgYW1fX3VudGFyPSckJHtUQVItdGFyfSB4ZiAtJ10sCiAKLSAgIyB0YXIvdW50YXIgYSBkdW1teSBkaXJlY3RvcnksIGFuZCBzdG9wIGlmIHRoZSBjb21tYW5kIHdvcmtzCisgIFttNF9jYXNlKFskMV0sCisgICAgW3VzdGFyXSwKKyAgICAgWyMgVGhlIFBPU0lYIDE5ODggJ3VzdGFyJyBmb3JtYXQgaXMgZGVmaW5lZCB3aXRoIGZpeGVkLXNpemUgZmllbGRzLgorICAgICAgIyBUaGVyZSBpcyBub3RhYmx5IGEgMjEgYml0cyBsaW1pdCBmb3IgdGhlIFVJRCBhbmQgdGhlIEdJRC4gIEluIGZhY3QsCisgICAgICAjIHRoZSAncGF4JyB1dGlsaXR5IGNhbiBoYW5nIG9uIGJpZ2dlciBVSUQvR0lEIChzZWUgYXV0b21ha2UgYnVnIzgzNDMKKyAgICAgICMgYW5kIGJ1ZyMxMzU4OCkuCisgICAgICBhbV9tYXhfdWlkPTIwOTcxNTEgIyAyXjIxIC0gMQorICAgICAgYW1fbWF4X2dpZD0kYW1fbWF4X3VpZAorICAgICAgIyBUaGUgJFVJRCBhbmQgJEdJRCB2YXJpYWJsZXMgYXJlIG5vdCBwb3J0YWJsZSwgc28gd2UgbmVlZCB0byByZXNvcnQKKyAgICAgICMgdG8gdGhlIFBPU0lYLW1hbmRhdGVkIGlkKDEpIHV0aWxpdHkuICBFcnJvcnMgaW4gdGhlICdpZCcgY2FsbHMKKyAgICAgICMgYmVsb3cgYXJlIGRlZmluaXRlbHkgdW5leHBlY3RlZCwgc28gYWxsb3cgdGhlIHVzZXJzIHRvIHNlZSB0aGVtCisgICAgICAjICh0aGF0IGlzLCBhdm9pZCBzdGRlcnIgcmVkaXJlY3Rpb24pLgorICAgICAgYW1fdWlkPWBpZCAtdSB8fCBlY2hvIHVua25vd25gCisgICAgICBhbV9naWQ9YGlkIC1nIHx8IGVjaG8gdW5rbm93bmAKKyAgICAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciBVSUQgJyRhbV91aWQnIGlzIHN1cHBvcnRlZCBieSB1c3RhciBmb3JtYXRdKQorICAgICAgaWYgdGVzdCAkYW1fdWlkIC1sZSAkYW1fbWF4X3VpZDsgdGhlbgorICAgICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIGVsc2UKKyAgICAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgICAgIF9hbV90b29scz1ub25lCisgICAgICBmaQorICAgICAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIEdJRCAnJGFtX2dpZCcgaXMgc3VwcG9ydGVkIGJ5IHVzdGFyIGZvcm1hdF0pCisgICAgICBpZiB0ZXN0ICRhbV9naWQgLWxlICRhbV9tYXhfZ2lkOyB0aGVuCisgICAgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgZWxzZQorICAgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICAgIF9hbV90b29scz1ub25lCisgICAgICBmaV0sCisKKyAgW3BheF0sCisgICAgW10sCisKKyAgW200X2ZhdGFsKFtVbmtub3duIHRhciBmb3JtYXRdKV0pCisKKyAgQUNfTVNHX0NIRUNLSU5HKFtob3cgdG8gY3JlYXRlIGEgJDEgdGFyIGFyY2hpdmVdKQorCisgICMgR28gYWhlYWQgZXZlbiBpZiB3ZSBoYXZlIHRoZSB2YWx1ZSBhbHJlYWR5IGNhY2hlZC4gIFdlIGRvIHNvIGJlY2F1c2Ugd2UKKyAgIyBuZWVkIHRvIHNldCB0aGUgdmFsdWVzIGZvciB0aGUgJ2FtX190YXInIGFuZCAnYW1fX3VudGFyJyB2YXJpYWJsZXMuCisgIF9hbV90b29scz0ke2FtX2N2X3Byb2dfdGFyXyQxLSRfYW1fdG9vbHN9CisKKyAgZm9yIF9hbV90b29sIGluICRfYW1fdG9vbHM7IGRvCisgICAgY2FzZSAkX2FtX3Rvb2wgaW4KKyAgICBnbnV0YXIpCisgICAgICBmb3IgX2FtX3RhciBpbiB0YXIgZ251dGFyIGd0YXI7IGRvCisgICAgICAgIEFNX1JVTl9MT0coWyRfYW1fdGFyIC0tdmVyc2lvbl0pICYmIGJyZWFrCisgICAgICBkb25lCisgICAgICBhbV9fdGFyPSIkX2FtX3RhciAtLWZvcm1hdD1tNF9pZihbJDFdLCBbcGF4XSwgW3Bvc2l4XSwgWyQxXSkgLWNoZiAtICInIiQkdGFyZGlyIicKKyAgICAgIGFtX190YXJfPSIkX2FtX3RhciAtLWZvcm1hdD1tNF9pZihbJDFdLCBbcGF4XSwgW3Bvc2l4XSwgWyQxXSkgLWNoZiAtICInIiR0YXJkaXIiJworICAgICAgYW1fX3VudGFyPSIkX2FtX3RhciAteGYgLSIKKyAgICAgIDs7CisgICAgcGxhaW50YXIpCisgICAgICAjIE11c3Qgc2tpcCBHTlUgdGFyOiBpZiBpdCBkb2VzIG5vdCBzdXBwb3J0IC0tZm9ybWF0PSBpdCBkb2Vzbid0IGNyZWF0ZQorICAgICAgIyB1c3RhciB0YXJiYWxsIGVpdGhlci4KKyAgICAgICh0YXIgLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+JjEgJiYgY29udGludWUKKyAgICAgIGFtX190YXI9J3RhciBjaGYgLSAiJCR0YXJkaXIiJworICAgICAgYW1fX3Rhcl89J3RhciBjaGYgLSAiJHRhcmRpciInCisgICAgICBhbV9fdW50YXI9J3RhciB4ZiAtJworICAgICAgOzsKKyAgICBwYXgpCisgICAgICBhbV9fdGFyPSdwYXggLUwgLXggJDEgLXcgIiQkdGFyZGlyIicKKyAgICAgIGFtX190YXJfPSdwYXggLUwgLXggJDEgLXcgIiR0YXJkaXIiJworICAgICAgYW1fX3VudGFyPSdwYXggLXInCisgICAgICA7OworICAgIGNwaW8pCisgICAgICBhbV9fdGFyPSdmaW5kICIkJHRhcmRpciIgLXByaW50IHwgY3BpbyAtbyAtSCAkMSAtTCcKKyAgICAgIGFtX190YXJfPSdmaW5kICIkdGFyZGlyIiAtcHJpbnQgfCBjcGlvIC1vIC1IICQxIC1MJworICAgICAgYW1fX3VudGFyPSdjcGlvIC1pIC1IICQxIC1kJworICAgICAgOzsKKyAgICBub25lKQorICAgICAgYW1fX3Rhcj1mYWxzZQorICAgICAgYW1fX3Rhcl89ZmFsc2UKKyAgICAgIGFtX191bnRhcj1mYWxzZQorICAgICAgOzsKKyAgICBlc2FjCisKKyAgICAjIElmIHRoZSB2YWx1ZSB3YXMgY2FjaGVkLCBzdG9wIG5vdy4gIFdlIGp1c3Qgd2FudGVkIHRvIGhhdmUgYW1fX3RhcgorICAgICMgYW5kIGFtX191bnRhciBzZXQuCisgICAgdGVzdCAtbiAiJHthbV9jdl9wcm9nX3Rhcl8kMX0iICYmIGJyZWFrCisKKyAgICAjIHRhci91bnRhciBhIGR1bW15IGRpcmVjdG9yeSwgYW5kIHN0b3AgaWYgdGhlIGNvbW1hbmQgd29ya3MuCisgICAgcm0gLXJmIGNvbmZ0ZXN0LmRpcgorICAgIG1rZGlyIGNvbmZ0ZXN0LmRpcgorICAgIGVjaG8gR3JlcE1lID4gY29uZnRlc3QuZGlyL2ZpbGUKKyAgICBBTV9SVU5fTE9HKFt0YXJkaXI9Y29uZnRlc3QuZGlyICYmIGV2YWwgJGFtX190YXJfID5jb25mdGVzdC50YXJdKQorICAgIHJtIC1yZiBjb25mdGVzdC5kaXIKKyAgICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LnRhcjsgdGhlbgorICAgICAgQU1fUlVOX0xPRyhbJGFtX191bnRhciA8Y29uZnRlc3QudGFyXSkKKyAgICAgIEFNX1JVTl9MT0coW2NhdCBjb25mdGVzdC5kaXIvZmlsZV0pCisgICAgICBncmVwIEdyZXBNZSBjb25mdGVzdC5kaXIvZmlsZSA+L2Rldi9udWxsIDI+JjEgJiYgYnJlYWsKKyAgICBmaQorICBkb25lCiAgIHJtIC1yZiBjb25mdGVzdC5kaXIKLSAgbWtkaXIgY29uZnRlc3QuZGlyCi0gIGVjaG8gR3JlcE1lID4gY29uZnRlc3QuZGlyL2ZpbGUKLSAgQU1fUlVOX0xPRyhbdGFyZGlyPWNvbmZ0ZXN0LmRpciAmJiBldmFsICRhbV9fdGFyXyA+Y29uZnRlc3QudGFyXSkKLSAgcm0gLXJmIGNvbmZ0ZXN0LmRpcgotICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LnRhcjsgdGhlbgotICAgIEFNX1JVTl9MT0coWyRhbV9fdW50YXIgPGNvbmZ0ZXN0LnRhcl0pCi0gICAgZ3JlcCBHcmVwTWUgY29uZnRlc3QuZGlyL2ZpbGUgPi9kZXYvbnVsbCAyPiYxICYmIGJyZWFrCi0gIGZpCi1kb25lCi1ybSAtcmYgY29uZnRlc3QuZGlyCiAKLUFDX0NBQ0hFX1ZBTChbYW1fY3ZfcHJvZ190YXJfJDFdLCBbYW1fY3ZfcHJvZ190YXJfJDE9JF9hbV90b29sXSkKLUFDX01TR19SRVNVTFQoWyRhbV9jdl9wcm9nX3Rhcl8kMV0pXSkKKyAgQUNfQ0FDSEVfVkFMKFthbV9jdl9wcm9nX3Rhcl8kMV0sIFthbV9jdl9wcm9nX3Rhcl8kMT0kX2FtX3Rvb2xdKQorICBBQ19NU0dfUkVTVUxUKFskYW1fY3ZfcHJvZ190YXJfJDFdKV0pCisKIEFDX1NVQlNUKFthbV9fdGFyXSkKIEFDX1NVQlNUKFthbV9fdW50YXJdKQogXSkgIyBfQU1fUFJPR19UQVIKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvYnVpbGQtaW9zLnNoIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9idWlsZC1pb3Muc2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDNkZWEyNDIuLjAwMDAwMDAKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9idWlsZC1pb3Muc2gKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi0jIS9iaW4vc2gKLQotUExBVEZPUk1fSU9TPS9EZXZlbG9wZXIvUGxhdGZvcm1zL2lQaG9uZU9TLnBsYXRmb3JtLwotUExBVEZPUk1fSU9TX1NJTT0vRGV2ZWxvcGVyL1BsYXRmb3Jtcy9pUGhvbmVTaW11bGF0b3IucGxhdGZvcm0vCi1TREtfSU9TX1ZFUlNJT049IjQuMiIKLU1JTl9JT1NfVkVSU0lPTj0iMy4wIgotT1VUUFVUX0RJUj0idW5pdmVyc2FsLWlvcyIKLQotYnVpbGRfdGFyZ2V0ICgpIHsKLSAgICBsb2NhbCBwbGF0Zm9ybT0kMQotICAgIGxvY2FsIHNkaz0kMgotICAgIGxvY2FsIGFyY2g9JDMKLSAgICBsb2NhbCB0cmlwbGU9JDQKLSAgICBsb2NhbCBidWlsZGRpcj0kNQotCi0gICAgbWtkaXIgLXAgIiR7YnVpbGRkaXJ9IgotICAgIHB1c2hkICIke2J1aWxkZGlyfSIKLSAgICBleHBvcnQgQ0M9IiR7cGxhdGZvcm19Ii9EZXZlbG9wZXIvdXNyL2Jpbi9nY2MtNC4yCi0gICAgZXhwb3J0IENGTEFHUz0iLWFyY2ggJHthcmNofSAtaXN5c3Jvb3QgJHtzZGt9IC1taXBob25lb3MtdmVyc2lvbi1taW49JHtNSU5fSU9TX1ZFUlNJT059IgotICAgIC4uL2NvbmZpZ3VyZSAtLWhvc3Q9JHt0cmlwbGV9ICYmIG1ha2UKLSAgICBwb3BkCi19Ci0KLSMgQnVpbGQgYWxsIHRhcmdldHMKLWJ1aWxkX3RhcmdldCAiJHtQTEFURk9STV9JT1N9IiAiJHtQTEFURk9STV9JT1N9L0RldmVsb3Blci9TREtzL2lQaG9uZU9TJHtTREtfSU9TX1ZFUlNJT059LnNkay8iIGFybXY2IGFybS1hcHBsZS1kYXJ3aW4xMCBhcm12Ni1pb3MKLWJ1aWxkX3RhcmdldCAiJHtQTEFURk9STV9JT1N9IiAiJHtQTEFURk9STV9JT1N9L0RldmVsb3Blci9TREtzL2lQaG9uZU9TJHtTREtfSU9TX1ZFUlNJT059LnNkay8iIGFybXY3IGFybS1hcHBsZS1kYXJ3aW4xMCBhcm12Ny1pb3MKLWJ1aWxkX3RhcmdldCAiJHtQTEFURk9STV9JT1NfU0lNfSIgIiR7UExBVEZPUk1fSU9TX1NJTX0vRGV2ZWxvcGVyL1NES3MvaVBob25lU2ltdWxhdG9yJHtTREtfSU9TX1ZFUlNJT059LnNkay8iIGkzODYgaTM4Ni1hcHBsZS1kYXJ3aW4xMCBpMzg2LWlvcy1zaW0KLQotIyBDcmVhdGUgdW5pdmVyc2FsIG91dHB1dCBkaXJlY3RvcmllcwotbWtkaXIgLXAgIiR7T1VUUFVUX0RJUn0iCi1ta2RpciAtcCAiJHtPVVRQVVRfRElSfS9pbmNsdWRlIgotbWtkaXIgLXAgIiR7T1VUUFVUX0RJUn0vaW5jbHVkZS9hcm12NiIKLW1rZGlyIC1wICIke09VVFBVVF9ESVJ9L2luY2x1ZGUvYXJtdjciCi1ta2RpciAtcCAiJHtPVVRQVVRfRElSfS9pbmNsdWRlL2kzODYiCi0KLSMgQ3JlYXRlIHRoZSB1bml2ZXJzYWwgYmluYXJ5Ci1saXBvIC1jcmVhdGUgYXJtdjYtaW9zLy5saWJzL2xpYmZmaS5hIGFybXY3LWlvcy8ubGlicy9saWJmZmkuYSBpMzg2LWlvcy1zaW0vLmxpYnMvbGliZmZpLmEgLW91dHB1dCAiJHtPVVRQVVRfRElSfS9saWJmZmkuYSIKLQotIyBDb3B5IGluIHRoZSBoZWFkZXJzCi1jb3B5X2hlYWRlcnMgKCkgewotICAgIGxvY2FsIHNyYz0kMQotICAgIGxvY2FsIGRlc3Q9JDIKLQotICAgICMgRml4IG5vbi1yZWxhdGl2ZSBoZWFkZXIgcmVmZXJlbmNlCi0gICAgc2VkICdzLzxmZml0YXJnZXQuaD4vImZmaXRhcmdldC5oIi8nIDwgIiR7c3JjfS9pbmNsdWRlL2ZmaS5oIiA+ICIke2Rlc3R9L2ZmaS5oIgotICAgIGNwICIke3NyY30vaW5jbHVkZS9mZml0YXJnZXQuaCIgIiR7ZGVzdH0iCi19Ci0KLWNvcHlfaGVhZGVycyBhcm12Ni1pb3MgIiR7T1VUUFVUX0RJUn0vaW5jbHVkZS9hcm12NiIKLWNvcHlfaGVhZGVycyBhcm12Ny1pb3MgIiR7T1VUUFVUX0RJUn0vaW5jbHVkZS9hcm12NyIKLWNvcHlfaGVhZGVycyBpMzg2LWlvcy1zaW0gIiR7T1VUUFVUX0RJUn0vaW5jbHVkZS9pMzg2IgotCi0jIENyZWF0ZSB0b3AtbGV2ZWwgaGVhZGVyCi0oCi1jYXQgPDwgRU9GCi0jaWZkZWYgX19hcm1fXwotICAjaW5jbHVkZSA8YXJtL2FyY2guaD4KLSAgI2lmZGVmIF9BUk1fQVJDSF82Ci0gICAgI2luY2x1ZGUgImluY2x1ZGUvYXJtdjYvZmZpLmgiCi0gICNlbGlmIF9BUk1fQVJDSF83Ci0gICAgI2luY2x1ZGUgImluY2x1ZGUvYXJtdjcvZmZpLmgiCi0gICNlbmRpZgotI2VsaWYgZGVmaW5lZChfX2kzODZfXykKLSAgI2luY2x1ZGUgImluY2x1ZGUvaTM4Ni9mZmkuaCIKLSNlbmRpZgotRU9GCi0pID4gIiR7T1VUUFVUX0RJUn0vZmZpLmgiCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2NvbXBpbGUgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2NvbXBpbGUKaW5kZXggYzAwOTZhNy4uNTMxMTM2YiAxMDA3NTUKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9jb21waWxlCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvY29tcGlsZQpAQCAtMSwxMCArMSw5IEBACiAjISAvYmluL3NoCi0jIFdyYXBwZXIgZm9yIGNvbXBpbGVycyB3aGljaCBkbyBub3QgdW5kZXJzdGFuZCBgLWMgLW8nLgorIyBXcmFwcGVyIGZvciBjb21waWxlcnMgd2hpY2ggZG8gbm90IHVuZGVyc3RhbmQgJy1jIC1vJy4KIAotc2NyaXB0dmVyc2lvbj0yMDA5LTEwLTA2LjIwOyAjIFVUQworc2NyaXB0dmVyc2lvbj0yMDEyLTEwLTE0LjExOyAjIFVUQwogCi0jIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCwgMjAwMywgMjAwNCwgMjAwNSwgMjAwOSAgRnJlZSBTb2Z0d2FyZQotIyBGb3VuZGF0aW9uLCBJbmMuCisjIENvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogIyBXcml0dGVuIGJ5IFRvbSBUcm9tZXkgPHRyb21leUBjeWdudXMuY29tPi4KICMKICMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTI5LDIxICsyOCwyMjQgQEAKICMgYnVncyB0byA8YnVnLWF1dG9tYWtlQGdudS5vcmc+IG9yIHNlbmQgcGF0Y2hlcyB0bwogIyA8YXV0b21ha2UtcGF0Y2hlc0BnbnUub3JnPi4KIAorbmw9JworJworCisjIFdlIG5lZWQgc3BhY2UsIHRhYiBhbmQgbmV3IGxpbmUsIGluIHByZWNpc2VseSB0aGF0IG9yZGVyLiAgUXVvdGluZyBpcworIyB0aGVyZSB0byBwcmV2ZW50IHRvb2xzIGZyb20gY29tcGxhaW5pbmcgYWJvdXQgd2hpdGVzcGFjZSB1c2FnZS4KK0lGUz0iICIiCSRubCIKKworZmlsZV9jb252PQorCisjIGZ1bmNfZmlsZV9jb252IGJ1aWxkX2ZpbGUgbGF6eQorIyBDb252ZXJ0IGEgJGJ1aWxkIGZpbGUgdG8gJGhvc3QgZm9ybSBhbmQgc3RvcmUgaXQgaW4gJGZpbGUKKyMgQ3VycmVudGx5IG9ubHkgc3VwcG9ydHMgV2luZG93cyBob3N0cy4gSWYgdGhlIGRldGVybWluZWQgY29udmVyc2lvbgorIyB0eXBlIGlzIGxpc3RlZCBpbiAodGhlIGNvbW1hIHNlcGFyYXRlZCkgTEFaWSwgbm8gY29udmVyc2lvbiB3aWxsCisjIHRha2UgcGxhY2UuCitmdW5jX2ZpbGVfY29udiAoKQoreworICBmaWxlPSQxCisgIGNhc2UgJGZpbGUgaW4KKyAgICAvIHwgL1shL10qKSAjIGFic29sdXRlIGZpbGUsIGFuZCBub3QgYSBVTkMgZmlsZQorICAgICAgaWYgdGVzdCAteiAiJGZpbGVfY29udiI7IHRoZW4KKwkjIGxhemlseSBkZXRlcm1pbmUgaG93IHRvIGNvbnZlcnQgYWJzIGZpbGVzCisJY2FzZSBgdW5hbWUgLXNgIGluCisJICBNSU5HVyopCisJICAgIGZpbGVfY29udj1taW5ndworCSAgICA7OworCSAgQ1lHV0lOKikKKwkgICAgZmlsZV9jb252PWN5Z3dpbgorCSAgICA7OworCSAgKikKKwkgICAgZmlsZV9jb252PXdpbmUKKwkgICAgOzsKKwllc2FjCisgICAgICBmaQorICAgICAgY2FzZSAkZmlsZV9jb252LywkMiwgaW4KKwkqLCRmaWxlX2NvbnYsKikKKwkgIDs7CisJbWluZ3cvKikKKwkgIGZpbGU9YGNtZCAvL0MgZWNobyAiJGZpbGUgIiB8IHNlZCAtZSAncy8iXCguKlwpICIgKiQvXDEvJ2AKKwkgIDs7CisJY3lnd2luLyopCisJICBmaWxlPWBjeWdwYXRoIC1tICIkZmlsZSIgfHwgZWNobyAiJGZpbGUiYAorCSAgOzsKKwl3aW5lLyopCisJICBmaWxlPWB3aW5lcGF0aCAtdyAiJGZpbGUiIHx8IGVjaG8gIiRmaWxlImAKKwkgIDs7CisgICAgICBlc2FjCisgICAgICA7OworICBlc2FjCit9CisKKyMgZnVuY19jbF9kYXNoTCBsaW5rZGlyCisjIE1ha2UgY2wgbG9vayBmb3IgbGlicmFyaWVzIGluIExJTktESVIKK2Z1bmNfY2xfZGFzaEwgKCkKK3sKKyAgZnVuY19maWxlX2NvbnYgIiQxIgorICBpZiB0ZXN0IC16ICIkbGliX3BhdGgiOyB0aGVuCisgICAgbGliX3BhdGg9JGZpbGUKKyAgZWxzZQorICAgIGxpYl9wYXRoPSIkbGliX3BhdGg7JGZpbGUiCisgIGZpCisgIGxpbmtlcl9vcHRzPSIkbGlua2VyX29wdHMgLUxJQlBBVEg6JGZpbGUiCit9CisKKyMgZnVuY19jbF9kYXNobCBsaWJyYXJ5CisjIERvIGEgbGlicmFyeSBzZWFyY2gtcGF0aCBsb29rdXAgZm9yIGNsCitmdW5jX2NsX2Rhc2hsICgpCit7CisgIGxpYj0kMQorICBmb3VuZD1ubworICBzYXZlX0lGUz0kSUZTCisgIElGUz0nOycKKyAgZm9yIGRpciBpbiAkbGliX3BhdGggJExJQgorICBkbworICAgIElGUz0kc2F2ZV9JRlMKKyAgICBpZiAkc2hhcmVkICYmIHRlc3QgLWYgIiRkaXIvJGxpYi5kbGwubGliIjsgdGhlbgorICAgICAgZm91bmQ9eWVzCisgICAgICBsaWI9JGRpci8kbGliLmRsbC5saWIKKyAgICAgIGJyZWFrCisgICAgZmkKKyAgICBpZiB0ZXN0IC1mICIkZGlyLyRsaWIubGliIjsgdGhlbgorICAgICAgZm91bmQ9eWVzCisgICAgICBsaWI9JGRpci8kbGliLmxpYgorICAgICAgYnJlYWsKKyAgICBmaQorICAgIGlmIHRlc3QgLWYgIiRkaXIvbGliJGxpYi5hIjsgdGhlbgorICAgICAgZm91bmQ9eWVzCisgICAgICBsaWI9JGRpci9saWIkbGliLmEKKyAgICAgIGJyZWFrCisgICAgZmkKKyAgZG9uZQorICBJRlM9JHNhdmVfSUZTCisKKyAgaWYgdGVzdCAiJGZvdW5kIiAhPSB5ZXM7IHRoZW4KKyAgICBsaWI9JGxpYi5saWIKKyAgZmkKK30KKworIyBmdW5jX2NsX3dyYXBwZXIgY2wgYXJnLi4uCisjIEFkanVzdCBjb21waWxlIGNvbW1hbmQgdG8gc3VpdCBjbAorZnVuY19jbF93cmFwcGVyICgpCit7CisgICMgQXNzdW1lIGEgY2FwYWJsZSBzaGVsbAorICBsaWJfcGF0aD0KKyAgc2hhcmVkPToKKyAgbGlua2VyX29wdHM9CisgIGZvciBhcmcKKyAgZG8KKyAgICBpZiB0ZXN0IC1uICIkZWF0IjsgdGhlbgorICAgICAgZWF0PQorICAgIGVsc2UKKyAgICAgIGNhc2UgJDEgaW4KKwktbykKKwkgICMgY29uZmlndXJlIG1pZ2h0IGNob29zZSB0byBydW4gY29tcGlsZSBhcyAnY29tcGlsZSBjYyAtbyBmb28gZm9vLmMnLgorCSAgZWF0PTEKKwkgIGNhc2UgJDIgaW4KKwkgICAgKi5vIHwgKi5bb09dW2JCXVtqSl0pCisJICAgICAgZnVuY19maWxlX2NvbnYgIiQyIgorCSAgICAgIHNldCB4ICIkQCIgLUZvIiRmaWxlIgorCSAgICAgIHNoaWZ0CisJICAgICAgOzsKKwkgICAgKikKKwkgICAgICBmdW5jX2ZpbGVfY29udiAiJDIiCisJICAgICAgc2V0IHggIiRAIiAtRmUiJGZpbGUiCisJICAgICAgc2hpZnQKKwkgICAgICA7OworCSAgZXNhYworCSAgOzsKKwktSSkKKwkgIGVhdD0xCisJICBmdW5jX2ZpbGVfY29udiAiJDIiIG1pbmd3CisJICBzZXQgeCAiJEAiIC1JIiRmaWxlIgorCSAgc2hpZnQKKwkgIDs7CisJLUkqKQorCSAgZnVuY19maWxlX2NvbnYgIiR7MSMtSX0iIG1pbmd3CisJICBzZXQgeCAiJEAiIC1JIiRmaWxlIgorCSAgc2hpZnQKKwkgIDs7CisJLWwpCisJICBlYXQ9MQorCSAgZnVuY19jbF9kYXNobCAiJDIiCisJICBzZXQgeCAiJEAiICIkbGliIgorCSAgc2hpZnQKKwkgIDs7CisJLWwqKQorCSAgZnVuY19jbF9kYXNobCAiJHsxIy1sfSIKKwkgIHNldCB4ICIkQCIgIiRsaWIiCisJICBzaGlmdAorCSAgOzsKKwktTCkKKwkgIGVhdD0xCisJICBmdW5jX2NsX2Rhc2hMICIkMiIKKwkgIDs7CisJLUwqKQorCSAgZnVuY19jbF9kYXNoTCAiJHsxIy1MfSIKKwkgIDs7CisJLXN0YXRpYykKKwkgIHNoYXJlZD1mYWxzZQorCSAgOzsKKwktV2wsKikKKwkgIGFyZz0kezEjLVdsLH0KKwkgIHNhdmVfaWZzPSIkSUZTIjsgSUZTPScsJworCSAgZm9yIGZsYWcgaW4gJGFyZzsgZG8KKwkgICAgSUZTPSIkc2F2ZV9pZnMiCisJICAgIGxpbmtlcl9vcHRzPSIkbGlua2VyX29wdHMgJGZsYWciCisJICBkb25lCisJICBJRlM9IiRzYXZlX2lmcyIKKwkgIDs7CisJLVhsaW5rZXIpCisJICBlYXQ9MQorCSAgbGlua2VyX29wdHM9IiRsaW5rZXJfb3B0cyAkMiIKKwkgIDs7CisJLSopCisJICBzZXQgeCAiJEAiICIkMSIKKwkgIHNoaWZ0CisJICA7OworCSouY2MgfCAqLkNDIHwgKi5jeHggfCAqLkNYWCB8ICouW2NDXSsrKQorCSAgZnVuY19maWxlX2NvbnYgIiQxIgorCSAgc2V0IHggIiRAIiAtVHAiJGZpbGUiCisJICBzaGlmdAorCSAgOzsKKwkqLmMgfCAqLmNwcCB8ICouQ1BQIHwgKi5saWIgfCAqLkxJQiB8ICouTGliIHwgKi5PQkogfCAqLm9iaiB8ICouW29PXSkKKwkgIGZ1bmNfZmlsZV9jb252ICIkMSIgbWluZ3cKKwkgIHNldCB4ICIkQCIgIiRmaWxlIgorCSAgc2hpZnQKKwkgIDs7CisJKikKKwkgIHNldCB4ICIkQCIgIiQxIgorCSAgc2hpZnQKKwkgIDs7CisgICAgICBlc2FjCisgICAgZmkKKyAgICBzaGlmdAorICBkb25lCisgIGlmIHRlc3QgLW4gIiRsaW5rZXJfb3B0cyI7IHRoZW4KKyAgICBsaW5rZXJfb3B0cz0iLWxpbmskbGlua2VyX29wdHMiCisgIGZpCisgIGV4ZWMgIiRAIiAkbGlua2VyX29wdHMKKyAgZXhpdCAxCit9CisKK2VhdD0KKwogY2FzZSAkMSBpbgogICAnJykKLSAgICAgZWNobyAiJDA6IE5vIGNvbW1hbmQuICBUcnkgXGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgMT4mMgorICAgICBlY2hvICIkMDogTm8gY29tbWFuZC4gIFRyeSAnJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iIDE+JjIKICAgICAgZXhpdCAxOwogICAgICA7OwogICAtaCB8IC0taCopCiAgICAgY2F0IDw8XEVPRgogVXNhZ2U6IGNvbXBpbGUgWy0taGVscF0gWy0tdmVyc2lvbl0gUFJPR1JBTSBbQVJHU10KIAotV3JhcHBlciBmb3IgY29tcGlsZXJzIHdoaWNoIGRvIG5vdCB1bmRlcnN0YW5kIGAtYyAtbycuCi1SZW1vdmUgYC1vIGRlc3QubycgZnJvbSBBUkdTLCBydW4gUFJPR1JBTSB3aXRoIHRoZSByZW1haW5pbmcKK1dyYXBwZXIgZm9yIGNvbXBpbGVycyB3aGljaCBkbyBub3QgdW5kZXJzdGFuZCAnLWMgLW8nLgorUmVtb3ZlICctbyBkZXN0Lm8nIGZyb20gQVJHUywgcnVuIFBST0dSQU0gd2l0aCB0aGUgcmVtYWluaW5nCiBhcmd1bWVudHMsIGFuZCByZW5hbWUgdGhlIG91dHB1dCBhcyBleHBlY3RlZC4KIAogSWYgeW91IGFyZSB0cnlpbmcgdG8gYnVpbGQgYSB3aG9sZSBwYWNrYWdlIHRoaXMgaXMgbm90IHRoZQotcmlnaHQgc2NyaXB0IHRvIHJ1bjogcGxlYXNlIHN0YXJ0IGJ5IHJlYWRpbmcgdGhlIGZpbGUgYElOU1RBTEwnLgorcmlnaHQgc2NyaXB0IHRvIHJ1bjogcGxlYXNlIHN0YXJ0IGJ5IHJlYWRpbmcgdGhlIGZpbGUgJ0lOU1RBTEwnLgogCiBSZXBvcnQgYnVncyB0byA8YnVnLWF1dG9tYWtlQGdudS5vcmc+LgogRU9GCkBAIC01MywxMSArMjU1LDEzIEBACiAgICAgZWNobyAiY29tcGlsZSAkc2NyaXB0dmVyc2lvbiIKICAgICBleGl0ICQ/CiAgICAgOzsKKyAgY2wgfCAqWy9cXF1jbCB8IGNsLmV4ZSB8ICpbL1xcXWNsLmV4ZSApCisgICAgZnVuY19jbF93cmFwcGVyICIkQCIgICAgICAjIERvZXNuJ3QgcmV0dXJuLi4uCisgICAgOzsKIGVzYWMKIAogb2ZpbGU9CiBjZmlsZT0KLWVhdD0KIAogZm9yIGFyZwogZG8KQEAgLTY2LDggKzI3MCw4IEBACiAgIGVsc2UKICAgICBjYXNlICQxIGluCiAgICAgICAtbykKLQkjIGNvbmZpZ3VyZSBtaWdodCBjaG9vc2UgdG8gcnVuIGNvbXBpbGUgYXMgYGNvbXBpbGUgY2MgLW8gZm9vIGZvby5jJy4KLQkjIFNvIHdlIHN0cmlwIGAtbyBhcmcnIG9ubHkgaWYgYXJnIGlzIGFuIG9iamVjdC4KKwkjIGNvbmZpZ3VyZSBtaWdodCBjaG9vc2UgdG8gcnVuIGNvbXBpbGUgYXMgJ2NvbXBpbGUgY2MgLW8gZm9vIGZvby5jJy4KKwkjIFNvIHdlIHN0cmlwICctbyBhcmcnIG9ubHkgaWYgYXJnIGlzIGFuIG9iamVjdC4KIAllYXQ9MQogCWNhc2UgJDIgaW4KIAkgICoubyB8ICoub2JqKQpAQCAtOTQsMTAgKzI5OCwxMCBAQAogZG9uZQogCiBpZiB0ZXN0IC16ICIkb2ZpbGUiIHx8IHRlc3QgLXogIiRjZmlsZSI7IHRoZW4KLSAgIyBJZiBubyBgLW8nIG9wdGlvbiB3YXMgc2VlbiB0aGVuIHdlIG1pZ2h0IGhhdmUgYmVlbiBpbnZva2VkIGZyb20gYQorICAjIElmIG5vICctbycgb3B0aW9uIHdhcyBzZWVuIHRoZW4gd2UgbWlnaHQgaGF2ZSBiZWVuIGludm9rZWQgZnJvbSBhCiAgICMgcGF0dGVybiBydWxlIHdoZXJlIHdlIGRvbid0IG5lZWQgb25lLiAgVGhhdCBpcyBvayAtLSB0aGlzIGlzIGEKICAgIyBub3JtYWwgY29tcGlsYXRpb24gdGhhdCB0aGUgbG9zaW5nIGNvbXBpbGVyIGNhbiBoYW5kbGUuICBJZiBubwotICAjIGAuYycgZmlsZSB3YXMgc2VlbiB0aGVuIHdlIGFyZSBwcm9iYWJseSBsaW5raW5nLiAgVGhhdCBpcyBhbHNvCisgICMgJy5jJyBmaWxlIHdhcyBzZWVuIHRoZW4gd2UgYXJlIHByb2JhYmx5IGxpbmtpbmcuICBUaGF0IGlzIGFsc28KICAgIyBvay4KICAgZXhlYyAiJEAiCiBmaQpAQCAtMTA2LDcgKzMxMCw3IEBACiBjb2ZpbGU9YGVjaG8gIiRjZmlsZSIgfCBzZWQgJ3N8Xi4qW1xcL118fDsgc3xeW2EtekEtWl06fHw7IHMvXC5jJC8uby8nYAogCiAjIENyZWF0ZSB0aGUgbG9jayBkaXJlY3RvcnkuCi0jIE5vdGU6IHVzZSBgWy9cXDouLV0nIGhlcmUgdG8gZW5zdXJlIHRoYXQgd2UgZG9uJ3QgdXNlIHRoZSBzYW1lIG5hbWUKKyMgTm90ZTogdXNlICdbL1xcOi4tXScgaGVyZSB0byBlbnN1cmUgdGhhdCB3ZSBkb24ndCB1c2UgdGhlIHNhbWUgbmFtZQogIyB0aGF0IHdlIGFyZSB1c2luZyBmb3IgdGhlIC5vIGZpbGUuICBBbHNvLCBiYXNlIHRoZSBuYW1lIG9uIHRoZSBleHBlY3RlZAogIyBvYmplY3QgZmlsZSBuYW1lLCBzaW5jZSB0aGF0IGlzIHdoYXQgbWF0dGVycyB3aXRoIGEgcGFyYWxsZWwgYnVpbGQuCiBsb2NrZGlyPWBlY2hvICIkY29maWxlIiB8IHNlZCAtZSAnc3xbL1xcOi4tXXxffGcnYC5kCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2NvbmZpZy5ndWVzcyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvY29uZmlnLmd1ZXNzCmluZGV4IDE4MDRlOWYuLmI3OTI1MmQgMTAwNzU1Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvY29uZmlnLmd1ZXNzCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvY29uZmlnLmd1ZXNzCkBAIC0xLDEwICsxLDggQEAKICMhIC9iaW4vc2gKICMgQXR0ZW1wdCB0byBndWVzcyBhIGNhbm9uaWNhbCBzeXN0ZW0gbmFtZS4KLSMgICBDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCi0jICAgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwKLSMgICAyMDExLCAyMDEyLCAyMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyAgIENvcHlyaWdodCAxOTkyLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAKLXRpbWVzdGFtcD0nMjAxMi0xMi0yOScKK3RpbWVzdGFtcD0nMjAxMy0wNi0xMCcKIAogIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogIyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMjYsNyArMjQsNyBAQAogIyBwcm9ncmFtLiAgVGhpcyBFeGNlcHRpb24gaXMgYW4gYWRkaXRpb25hbCBwZXJtaXNzaW9uIHVuZGVyIHNlY3Rpb24gNwogIyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMyAoIkdQTHYzIikuCiAjCi0jIE9yaWdpbmFsbHkgd3JpdHRlbiBieSBQZXIgQm90aG5lci4gCisjIE9yaWdpbmFsbHkgd3JpdHRlbiBieSBQZXIgQm90aG5lci4KICMKICMgWW91IGNhbiBnZXQgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoaXMgc2NyaXB0IGZyb206CiAjIGh0dHA6Ly9naXQuc2F2YW5uYWguZ251Lm9yZy9naXR3ZWIvP3A9Y29uZmlnLmdpdDthPWJsb2JfcGxhaW47Zj1jb25maWcuZ3Vlc3M7aGI9SEVBRApAQCAtNTIsOSArNTAsNyBAQAogR05VIGNvbmZpZy5ndWVzcyAoJHRpbWVzdGFtcCkKIAogT3JpZ2luYWxseSB3cml0dGVuIGJ5IFBlciBCb3RobmVyLgotQ29weXJpZ2h0IChDKSAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLAotMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSwKLTIwMTIsIDIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitDb3B5cmlnaHQgMTk5Mi0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogCiBUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHNlZSB0aGUgc291cmNlIGZvciBjb3B5aW5nIGNvbmRpdGlvbnMuICBUaGVyZSBpcyBOTwogd2FycmFudHk7IG5vdCBldmVuIGZvciBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIgpAQCAtMTM2LDYgKzEzMiwyNyBAQAogVU5BTUVfU1lTVEVNPWAodW5hbWUgLXMpIDI+L2Rldi9udWxsYCAgfHwgVU5BTUVfU1lTVEVNPXVua25vd24KIFVOQU1FX1ZFUlNJT049YCh1bmFtZSAtdikgMj4vZGV2L251bGxgIHx8IFVOQU1FX1ZFUlNJT049dW5rbm93bgogCitjYXNlICIke1VOQU1FX1NZU1RFTX0iIGluCitMaW51eHxHTlV8R05VLyopCisJIyBJZiB0aGUgc3lzdGVtIGxhY2tzIGEgY29tcGlsZXIsIHRoZW4ganVzdCBwaWNrIGdsaWJjLgorCSMgV2UgY291bGQgcHJvYmFibHkgdHJ5IGhhcmRlci4KKwlMSUJDPWdudQorCisJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCWNhdCA8PC1FT0YgPiAkZHVtbXkuYworCSNpbmNsdWRlIDxmZWF0dXJlcy5oPgorCSNpZiBkZWZpbmVkKF9fVUNMSUJDX18pCisJTElCQz11Y2xpYmMKKwkjZWxpZiBkZWZpbmVkKF9fZGlldGxpYmNfXykKKwlMSUJDPWRpZXRsaWJjCisJI2Vsc2UKKwlMSUJDPWdudQorCSNlbmRpZgorCUVPRgorCWV2YWwgYCRDQ19GT1JfQlVJTEQgLUUgJGR1bW15LmMgMj4vZGV2L251bGwgfCBncmVwICdeTElCQydgCisJOzsKK2VzYWMKKwogIyBOb3RlOiBvcmRlciBpcyBzaWduaWZpY2FudCAtIHRoZSBjYXNlIGJyYW5jaGVzIGFyZSBub3QgZXhjbHVzaXZlLgogCiBjYXNlICIke1VOQU1FX01BQ0hJTkV9OiR7VU5BTUVfU1lTVEVNfToke1VOQU1FX1JFTEVBU0V9OiR7VU5BTUVfVkVSU0lPTn0iIGluCkBAIC04NTcsMjEgKzg3NCwyMSBAQAogCWV4aXQgOzsKICAgICAqOkdOVToqOiopCiAJIyB0aGUgR05VIHN5c3RlbQotCWVjaG8gYGVjaG8gJHtVTkFNRV9NQUNISU5FfXxzZWQgLWUgJ3MsWy0vXS4qJCwsJ2AtdW5rbm93bi1nbnVgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncywvLiokLCwnYAorCWVjaG8gYGVjaG8gJHtVTkFNRV9NQUNISU5FfXxzZWQgLWUgJ3MsWy0vXS4qJCwsJ2AtdW5rbm93bi0ke0xJQkN9YGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MsLy4qJCwsJ2AKIAlleGl0IDs7CiAgICAgKjpHTlUvKjoqOiopCiAJIyBvdGhlciBzeXN0ZW1zIHdpdGggR05VIGxpYmMgYW5kIHVzZXJsYW5kCi0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tYGVjaG8gJHtVTkFNRV9TWVNURU19IHwgc2VkICdzLF5bXi9dKi8sLCcgfCB0ciAnW0EtWl0nICdbYS16XSdgYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvWy0oXS4qLy8nYC1nbnUKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1gZWNobyAke1VOQU1FX1NZU1RFTX0gfCBzZWQgJ3MsXlteL10qLywsJyB8IHRyICdbQS1aXScgJ1thLXpdJ2BgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bLShdLiovLydgLSR7TElCQ30KIAlleGl0IDs7CiAgICAgaSo4NjpNaW5peDoqOiopCiAJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLW1pbml4CiAJZXhpdCA7OwogICAgIGFhcmNoNjQ6TGludXg6KjoqKQotCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KIAlleGl0IDs7CiAgICAgYWFyY2g2NF9iZTpMaW51eDoqOiopCiAJVU5BTUVfTUFDSElORT1hYXJjaDY0X2JlCi0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQogCWV4aXQgOzsKICAgICBhbHBoYTpMaW51eDoqOiopCiAJY2FzZSBgc2VkIC1uICcvXmNwdSBtb2RlbC9zL14uKjogXCguKlwpL1wxL3AnIDwgL3Byb2MvY3B1aW5mb2AgaW4KQEAgLTg4NCw1OSArOTAxLDU0IEBACiAJICBFVjY4KikgVU5BTUVfTUFDSElORT1hbHBoYWV2NjggOzsKIAllc2FjCiAJb2JqZHVtcCAtLXByaXZhdGUtaGVhZGVycyAvYmluL3NoIHwgZ3JlcCAtcSBsZC5zby4xCi0JaWYgdGVzdCAiJD8iID0gMCA7IHRoZW4gTElCQz0ibGliYzEiIDsgZWxzZSBMSUJDPSIiIDsgZmkKLQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUke0xJQkN9CisJaWYgdGVzdCAiJD8iID0gMCA7IHRoZW4gTElCQz0iZ251bGliYzEiIDsgZmkKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CisJZXhpdCA7OworICAgIGFyYzpMaW51eDoqOiogfCBhcmNlYjpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQogCWV4aXQgOzsKICAgICBhcm0qOkxpbnV4Oio6KikKIAlldmFsICRzZXRfY2NfZm9yX2J1aWxkCiAJaWYgZWNobyBfX0FSTV9FQUJJX18gfCAkQ0NfRk9SX0JVSUxEIC1FIC0gMj4vZGV2L251bGwgXAogCSAgICB8IGdyZXAgLXEgX19BUk1fRUFCSV9fCiAJdGhlbgotCSAgICBlY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKwkgICAgZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQogCWVsc2UKIAkgICAgaWYgZWNobyBfX0FSTV9QQ1NfVkZQIHwgJENDX0ZPUl9CVUlMRCAtRSAtIDI+L2Rldi9udWxsIFwKIAkJfCBncmVwIC1xIF9fQVJNX1BDU19WRlAKIAkgICAgdGhlbgotCQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnVlYWJpCisJCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ31lYWJpCiAJICAgIGVsc2UKLQkJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251ZWFiaWhmCisJCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ31lYWJpaGYKIAkgICAgZmkKIAlmaQogCWV4aXQgOzsKICAgICBhdnIzMio6TGludXg6KjoqKQotCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KIAlleGl0IDs7CiAgICAgY3JpczpMaW51eDoqOiopCi0JZWNobyAke1VOQU1FX01BQ0hJTkV9LWF4aXMtbGludXgtZ251CisJZWNobyAke1VOQU1FX01BQ0hJTkV9LWF4aXMtbGludXgtJHtMSUJDfQogCWV4aXQgOzsKICAgICBjcmlzdjMyOkxpbnV4Oio6KikKLQllY2hvICR7VU5BTUVfTUFDSElORX0tYXhpcy1saW51eC1nbnUKKwllY2hvICR7VU5BTUVfTUFDSElORX0tYXhpcy1saW51eC0ke0xJQkN9CiAJZXhpdCA7OwogICAgIGZydjpMaW51eDoqOiopCi0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQogCWV4aXQgOzsKICAgICBoZXhhZ29uOkxpbnV4Oio6KikKLQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CiAJZXhpdCA7OwogICAgIGkqODY6TGludXg6KjoqKQotCUxJQkM9Z251Ci0JZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAotCXNlZCAncy9eCS8vJyA8PCBFT0YgPiRkdW1teS5jCi0JI2lmZGVmIF9fZGlldGxpYmNfXwotCUxJQkM9ZGlldGxpYmMKLQkjZW5kaWYKLUVPRgotCWV2YWwgYCRDQ19GT1JfQlVJTEQgLUUgJGR1bW15LmMgMj4vZGV2L251bGwgfCBncmVwICdeTElCQydgCi0JZWNobyAiJHtVTkFNRV9NQUNISU5FfS1wYy1saW51eC0ke0xJQkN9IgorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1saW51eC0ke0xJQkN9CiAJZXhpdCA7OwogICAgIGlhNjQ6TGludXg6KjoqKQotCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KIAlleGl0IDs7CiAgICAgbTMycio6TGludXg6KjoqKQotCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KIAlleGl0IDs7CiAgICAgbTY4KjpMaW51eDoqOiopCi0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQogCWV4aXQgOzsKICAgICBtaXBzOkxpbnV4Oio6KiB8IG1pcHM2NDpMaW51eDoqOiopCiAJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZApAQCAtOTU1LDU0ICs5NjcsNjMgQEAKIAkjZW5kaWYKIEVPRgogCWV2YWwgYCRDQ19GT1JfQlVJTEQgLUUgJGR1bW15LmMgMj4vZGV2L251bGwgfCBncmVwICdeQ1BVJ2AKLQl0ZXN0IHgiJHtDUFV9IiAhPSB4ICYmIHsgZWNobyAiJHtDUFV9LXVua25vd24tbGludXgtZ251IjsgZXhpdDsgfQorCXRlc3QgeCIke0NQVX0iICE9IHggJiYgeyBlY2hvICIke0NQVX0tdW5rbm93bi1saW51eC0ke0xJQkN9IjsgZXhpdDsgfQogCTs7CisgICAgb3IxazpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorCWV4aXQgOzsKICAgICBvcjMyOkxpbnV4Oio6KikKLQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CiAJZXhpdCA7OwogICAgIHBhZHJlOkxpbnV4Oio6KikKLQllY2hvIHNwYXJjLXVua25vd24tbGludXgtZ251CisJZWNobyBzcGFyYy11bmtub3duLWxpbnV4LSR7TElCQ30KIAlleGl0IDs7CiAgICAgcGFyaXNjNjQ6TGludXg6KjoqIHwgaHBwYTY0OkxpbnV4Oio6KikKLQllY2hvIGhwcGE2NC11bmtub3duLWxpbnV4LWdudQorCWVjaG8gaHBwYTY0LXVua25vd24tbGludXgtJHtMSUJDfQogCWV4aXQgOzsKICAgICBwYXJpc2M6TGludXg6KjoqIHwgaHBwYTpMaW51eDoqOiopCiAJIyBMb29rIGZvciBDUFUgbGV2ZWwKIAljYXNlIGBncmVwICdeY3B1W15hLXpdKjonIC9wcm9jL2NwdWluZm8gMj4vZGV2L251bGwgfCBjdXQgLWQnICcgLWYyYCBpbgotCSAgUEE3KikgZWNobyBocHBhMS4xLXVua25vd24tbGludXgtZ251IDs7Ci0JICBQQTgqKSBlY2hvIGhwcGEyLjAtdW5rbm93bi1saW51eC1nbnUgOzsKLQkgICopICAgIGVjaG8gaHBwYS11bmtub3duLWxpbnV4LWdudSA7OworCSAgUEE3KikgZWNobyBocHBhMS4xLXVua25vd24tbGludXgtJHtMSUJDfSA7OworCSAgUEE4KikgZWNobyBocHBhMi4wLXVua25vd24tbGludXgtJHtMSUJDfSA7OworCSAgKikgICAgZWNobyBocHBhLXVua25vd24tbGludXgtJHtMSUJDfSA7OwogCWVzYWMKIAlleGl0IDs7CiAgICAgcHBjNjQ6TGludXg6KjoqKQotCWVjaG8gcG93ZXJwYzY0LXVua25vd24tbGludXgtZ251CisJZWNobyBwb3dlcnBjNjQtdW5rbm93bi1saW51eC0ke0xJQkN9CiAJZXhpdCA7OwogICAgIHBwYzpMaW51eDoqOiopCi0JZWNobyBwb3dlcnBjLXVua25vd24tbGludXgtZ251CisJZWNobyBwb3dlcnBjLXVua25vd24tbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICBwcGM2NGxlOkxpbnV4Oio6KikKKwllY2hvIHBvd2VycGM2NGxlLXVua25vd24tbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICBwcGNsZTpMaW51eDoqOiopCisJZWNobyBwb3dlcnBjbGUtdW5rbm93bi1saW51eC0ke0xJQkN9CiAJZXhpdCA7OwogICAgIHMzOTA6TGludXg6KjoqIHwgczM5MHg6TGludXg6KjoqKQotCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1pYm0tbGludXgKKwllY2hvICR7VU5BTUVfTUFDSElORX0taWJtLWxpbnV4LSR7TElCQ30KIAlleGl0IDs7CiAgICAgc2g2NCo6TGludXg6KjoqKQotCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KIAlleGl0IDs7CiAgICAgc2gqOkxpbnV4Oio6KikKLQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CiAJZXhpdCA7OwogICAgIHNwYXJjOkxpbnV4Oio6KiB8IHNwYXJjNjQ6TGludXg6KjoqKQotCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KIAlleGl0IDs7CiAgICAgdGlsZSo6TGludXg6KjoqKQotCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KIAlleGl0IDs7CiAgICAgdmF4OkxpbnV4Oio6KikKLQllY2hvICR7VU5BTUVfTUFDSElORX0tZGVjLWxpbnV4LWdudQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1kZWMtbGludXgtJHtMSUJDfQogCWV4aXQgOzsKICAgICB4ODZfNjQ6TGludXg6KjoqKQotCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KIAlleGl0IDs7CiAgICAgeHRlbnNhKjpMaW51eDoqOiopCi0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQogCWV4aXQgOzsKICAgICBpKjg2OkRZTklYL3B0eDo0KjoqKQogCSMgcHR4IDQuMCBkb2VzIHVuYW1lIC1zIGNvcnJlY3RseSwgd2l0aCBEWU5JWC9wdHggaW4gdGhlcmUuCkBAIC0xMjM1LDE5ICsxMjU2LDIxIEBACiAJZXhpdCA7OwogICAgICo6RGFyd2luOio6KikKIAlVTkFNRV9QUk9DRVNTT1I9YHVuYW1lIC1wYCB8fCBVTkFNRV9QUk9DRVNTT1I9dW5rbm93bgotCWNhc2UgJFVOQU1FX1BST0NFU1NPUiBpbgotCSAgICBpMzg2KQotCQlldmFsICRzZXRfY2NfZm9yX2J1aWxkCi0JCWlmIFsgIiRDQ19GT1JfQlVJTEQiICE9ICdub19jb21waWxlcl9mb3VuZCcgXTsgdGhlbgotCQkgIGlmIChlY2hvICcjaWZkZWYgX19MUDY0X18nOyBlY2hvIElTXzY0QklUX0FSQ0g7IGVjaG8gJyNlbmRpZicpIHwgXAotCQkgICAgICAoQ0NPUFRTPSAkQ0NfRk9SX0JVSUxEIC1FIC0gMj4vZGV2L251bGwpIHwgXAotCQkgICAgICBncmVwIElTXzY0QklUX0FSQ0ggPi9kZXYvbnVsbAotCQkgIHRoZW4KLQkJICAgICAgVU5BTUVfUFJPQ0VTU09SPSJ4ODZfNjQiCi0JCSAgZmkKLQkJZmkgOzsKLQkgICAgdW5rbm93bikgVU5BTUVfUFJPQ0VTU09SPXBvd2VycGMgOzsKLQllc2FjCisJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCWlmIHRlc3QgIiRVTkFNRV9QUk9DRVNTT1IiID0gdW5rbm93biA7IHRoZW4KKwkgICAgVU5BTUVfUFJPQ0VTU09SPXBvd2VycGMKKwlmaQorCWlmIFsgIiRDQ19GT1JfQlVJTEQiICE9ICdub19jb21waWxlcl9mb3VuZCcgXTsgdGhlbgorCSAgICBpZiAoZWNobyAnI2lmZGVmIF9fTFA2NF9fJzsgZWNobyBJU182NEJJVF9BUkNIOyBlY2hvICcjZW5kaWYnKSB8IFwKKwkJKENDT1BUUz0gJENDX0ZPUl9CVUlMRCAtRSAtIDI+L2Rldi9udWxsKSB8IFwKKwkJZ3JlcCBJU182NEJJVF9BUkNIID4vZGV2L251bGwKKwkgICAgdGhlbgorCQljYXNlICRVTkFNRV9QUk9DRVNTT1IgaW4KKwkJICAgIGkzODYpIFVOQU1FX1BST0NFU1NPUj14ODZfNjQgOzsKKwkJICAgIHBvd2VycGMpIFVOQU1FX1BST0NFU1NPUj1wb3dlcnBjNjQgOzsKKwkJZXNhYworCSAgICBmaQorCWZpCiAJZWNobyAke1VOQU1FX1BST0NFU1NPUn0tYXBwbGUtZGFyd2luJHtVTkFNRV9SRUxFQVNFfQogCWV4aXQgOzsKICAgICAqOnByb2NudG8qOio6KiB8ICo6UU5YOlswMTIzNDU2Nzg5XSo6KikKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvY29uZmlnLnN1YiBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvY29uZmlnLnN1YgppbmRleCA4MDJhMjI0Li5jNzY1YjM0IDEwMDc1NQotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2NvbmZpZy5zdWIKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9jb25maWcuc3ViCkBAIC0xLDEwICsxLDggQEAKICMhIC9iaW4vc2gKICMgQ29uZmlndXJhdGlvbiB2YWxpZGF0aW9uIHN1YnJvdXRpbmUgc2NyaXB0LgotIyAgIENvcHlyaWdodCAoQykgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKLSMgICAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLAotIyAgIDIwMTEsIDIwMTIsIDIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjICAgQ29weXJpZ2h0IDE5OTItMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIAotdGltZXN0YW1wPScyMDEyLTEyLTI5JwordGltZXN0YW1wPScyMDEzLTA0LTI0JwogCiAjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAjIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC03MCw5ICs2OCw3IEBACiB2ZXJzaW9uPSJcCiBHTlUgY29uZmlnLnN1YiAoJHRpbWVzdGFtcCkKIAotQ29weXJpZ2h0IChDKSAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLAotMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSwKLTIwMTIsIDIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitDb3B5cmlnaHQgMTk5Mi0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogCiBUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHNlZSB0aGUgc291cmNlIGZvciBjb3B5aW5nIGNvbmRpdGlvbnMuICBUaGVyZSBpcyBOTwogd2FycmFudHk7IG5vdCBldmVuIGZvciBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIgpAQCAtMjU2LDcgKzI1Miw3IEBACiAJfCBhbHBoYSB8IGFscGhhZXZbNC04XSB8IGFscGhhZXY1NiB8IGFscGhhZXY2Wzc4XSB8IGFscGhhcGNhNVs2N10gXAogCXwgYWxwaGE2NCB8IGFscGhhNjRldls0LThdIHwgYWxwaGE2NGV2NTYgfCBhbHBoYTY0ZXY2Wzc4XSB8IGFscGhhNjRwY2E1WzY3XSBcCiAJfCBhbTMzXzIuMCBcCi0JfCBhcmMgXAorCXwgYXJjIHwgYXJjZWIgXAogCXwgYXJtIHwgYXJtW2JsXWUgfCBhcm1lW2xiXSB8IGFybXZbMi04XSB8IGFybXZbMy04XVtsYl0gfCBhcm12N1thcm1dIFwKIAl8IGF2ciB8IGF2cjMyIFwKIAl8IGJlMzIgfCBiZTY0IFwKQEAgLTI5MCwxNiArMjg2LDE3IEBACiAJfCBtaXBzaXNhNjRyMiB8IG1pcHNpc2E2NHIyZWwgXAogCXwgbWlwc2lzYTY0c2IxIHwgbWlwc2lzYTY0c2IxZWwgXAogCXwgbWlwc2lzYTY0c3I3MWsgfCBtaXBzaXNhNjRzcjcxa2VsIFwKKwl8IG1pcHNyNTkwMCB8IG1pcHNyNTkwMGVsIFwKIAl8IG1pcHN0eDM5IHwgbWlwc3R4MzllbCBcCiAJfCBtbjEwMjAwIHwgbW4xMDMwMCBcCiAJfCBtb3hpZSBcCiAJfCBtdCBcCiAJfCBtc3A0MzAgXAogCXwgbmRzMzIgfCBuZHMzMmxlIHwgbmRzMzJiZSBcCi0JfCBuaW9zIHwgbmlvczIgXAorCXwgbmlvcyB8IG5pb3MyIHwgbmlvczJlYiB8IG5pb3MyZWwgXAogCXwgbnMxNmsgfCBuczMyayBcCiAJfCBvcGVuOCBcCi0JfCBvcjMyIFwKKwl8IG9yMWsgfCBvcjMyIFwKIAl8IHBkcDEwIHwgcGRwMTEgfCBwaiB8IHBqbCBcCiAJfCBwb3dlcnBjIHwgcG93ZXJwYzY0IHwgcG93ZXJwYzY0bGUgfCBwb3dlcnBjbGUgXAogCXwgcHlyYW1pZCBcCkBAIC0zNjksNyArMzY2LDcgQEAKIAl8IGFhcmNoNjQtKiB8IGFhcmNoNjRfYmUtKiBcCiAJfCBhbHBoYS0qIHwgYWxwaGFldls0LThdLSogfCBhbHBoYWV2NTYtKiB8IGFscGhhZXY2Wzc4XS0qIFwKIAl8IGFscGhhNjQtKiB8IGFscGhhNjRldls0LThdLSogfCBhbHBoYTY0ZXY1Ni0qIHwgYWxwaGE2NGV2Nls3OF0tKiBcCi0JfCBhbHBoYXBjYTVbNjddLSogfCBhbHBoYTY0cGNhNVs2N10tKiB8IGFyYy0qIFwKKwl8IGFscGhhcGNhNVs2N10tKiB8IGFscGhhNjRwY2E1WzY3XS0qIHwgYXJjLSogfCBhcmNlYi0qIFwKIAl8IGFybS0qICB8IGFybWJlLSogfCBhcm1sZS0qIHwgYXJtZWItKiB8IGFybXYqLSogXAogCXwgYXZyLSogfCBhdnIzMi0qIFwKIAl8IGJlMzItKiB8IGJlNjQtKiBcCkBAIC00MDcsMTIgKzQwNCwxMyBAQAogCXwgbWlwc2lzYTY0cjItKiB8IG1pcHNpc2E2NHIyZWwtKiBcCiAJfCBtaXBzaXNhNjRzYjEtKiB8IG1pcHNpc2E2NHNiMWVsLSogXAogCXwgbWlwc2lzYTY0c3I3MWstKiB8IG1pcHNpc2E2NHNyNzFrZWwtKiBcCisJfCBtaXBzcjU5MDAtKiB8IG1pcHNyNTkwMGVsLSogXAogCXwgbWlwc3R4MzktKiB8IG1pcHN0eDM5ZWwtKiBcCiAJfCBtbWl4LSogXAogCXwgbXQtKiBcCiAJfCBtc3A0MzAtKiBcCiAJfCBuZHMzMi0qIHwgbmRzMzJsZS0qIHwgbmRzMzJiZS0qIFwKLQl8IG5pb3MtKiB8IG5pb3MyLSogXAorCXwgbmlvcy0qIHwgbmlvczItKiB8IG5pb3MyZWItKiB8IG5pb3MyZWwtKiBcCiAJfCBub25lLSogfCBucDEtKiB8IG5zMTZrLSogfCBuczMyay0qIFwKIAl8IG9wZW44LSogXAogCXwgb3Jpb24tKiBcCkBAIC0xMDA4LDcgKzEwMDYsNyBAQAogCQk7OwogCXBwYzY0KQliYXNpY19tYWNoaW5lPXBvd2VycGM2NC11bmtub3duCiAJCTs7Ci0JcHBjNjQtKikgYmFzaWNfbWFjaGluZT1wb3dlcnBjNjQtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwlwcGM2NC0qIHwgcHBjNjRwNy0qKSBiYXNpY19tYWNoaW5lPXBvd2VycGM2NC1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAogCQk7OwogCXBwYzY0bGUgfCBwb3dlcnBjNjRsaXR0bGUgfCBwcGM2NC1sZSB8IHBvd2VycGM2NC1saXR0bGUpCiAJCWJhc2ljX21hY2hpbmU9cG93ZXJwYzY0bGUtdW5rbm93bgpAQCAtMTM1NCw3ICsxMzUyLDcgQEAKIAktZ251KiB8IC1ic2QqIHwgLW1hY2gqIHwgLW1pbml4KiB8IC1nZW5peCogfCAtdWx0cml4KiB8IC1pcml4KiBcCiAJICAgICAgfCAtKnZtcyogfCAtc2NvKiB8IC1lc2l4KiB8IC1pc2MqIHwgLWFpeCogfCAtY25rKiB8IC1zdW5vcyB8IC1zdW5vc1szNF0qXAogCSAgICAgIHwgLWhwdXgqIHwgLXVub3MqIHwgLW9zZiogfCAtbHVuYSogfCAtZGd1eCogfCAtYXVyb3JhdXgqIHwgLXNvbGFyaXMqIFwKLQkgICAgICB8IC1zeW0qIHwgLWtvcGVuc29sYXJpcyogXAorCSAgICAgIHwgLXN5bSogfCAta29wZW5zb2xhcmlzKiB8IC1wbGFuOSogXAogCSAgICAgIHwgLWFtaWdhb3MqIHwgLWFtaWdhZG9zKiB8IC1tc2RvcyogfCAtbmV3c29zKiB8IC11bmljb3MqIHwgLWFvZiogXAogCSAgICAgIHwgLWFvcyogfCAtYXJvcyogXAogCSAgICAgIHwgLW5pbmR5KiB8IC12eHNpbSogfCAtdnh3b3JrcyogfCAtZWJtb24qIHwgLWhtcyogfCAtbXZzKiBcCkBAIC0xNTAwLDkgKzE0OTgsNiBAQAogCS1hcm9zKikKIAkJb3M9LWFyb3MKIAkJOzsKLQkta2FvcyopCi0JCW9zPS1rYW9zCi0JCTs7CiAJLXp2bW9lKQogCQlvcz0tenZtb2UKIAkJOzsKQEAgLTE1OTQsNiArMTU4OSw5IEBACiAJbWlwcyotKikKIAkJb3M9LWVsZgogCQk7OworCW9yMWstKikKKwkJb3M9LWVsZgorCQk7OwogCW9yMzItKikKIAkJb3M9LWNvZmYKIAkJOzsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvY29uZmlndXJlIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9jb25maWd1cmUKaW5kZXggODIzMDgzMC4uNzVmNjJhNyAxMDA3NTUKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9jb25maWd1cmUKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9jb25maWd1cmUKQEAgLTEsNiArMSw2IEBACiAjISAvYmluL3NoCiAjIEd1ZXNzIHZhbHVlcyBmb3Igc3lzdGVtLWRlcGVuZGVudCB2YXJpYWJsZXMgYW5kIGNyZWF0ZSBNYWtlZmlsZXMuCi0jIEdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42OSBmb3IgbGliZmZpIDMuMC4xMy4KKyMgR2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjY5IGZvciBsaWJmZmkgMy4xLgogIwogIyBSZXBvcnQgYnVncyB0byA8aHR0cDovL2dpdGh1Yi5jb20vYXRncmVlbi9saWJmZmkvaXNzdWVzPi4KICMKQEAgLTU5MCw4ICs1OTAsOCBAQAogIyBJZGVudGl0eSBvZiB0aGlzIHBhY2thZ2UuCiBQQUNLQUdFX05BTUU9J2xpYmZmaScKIFBBQ0tBR0VfVEFSTkFNRT0nbGliZmZpJwotUEFDS0FHRV9WRVJTSU9OPSczLjAuMTMnCi1QQUNLQUdFX1NUUklORz0nbGliZmZpIDMuMC4xMycKK1BBQ0tBR0VfVkVSU0lPTj0nMy4xJworUEFDS0FHRV9TVFJJTkc9J2xpYmZmaSAzLjEnCiBQQUNLQUdFX0JVR1JFUE9SVD0naHR0cDovL2dpdGh1Yi5jb20vYXRncmVlbi9saWJmZmkvaXNzdWVzJwogUEFDS0FHRV9VUkw9JycKIApAQCAtNjQ1LDEwICs2NDUsMTMgQEAKIEZGSV9FWEVDX1RSQU1QT0xJTkVfVEFCTEVfRkFMU0UKIEZGSV9FWEVDX1RSQU1QT0xJTkVfVEFCTEVfVFJVRQogc3lzX3N5bWJvbF91bmRlcnNjb3JlCitIQVZFX0xPTkdfRE9VQkxFX1ZBUklBTlQKIEhBVkVfTE9OR19ET1VCTEUKIEFMTE9DQQogWFRFTlNBX0ZBTFNFCiBYVEVOU0FfVFJVRQorVkFYX0ZBTFNFCitWQVhfVFJVRQogVElMRV9GQUxTRQogVElMRV9UUlVFCiBQQTY0X0hQVVhfRkFMU0UKQEAgLTY3Myw2ICs2NzYsOCBAQAogQVZSMzJfVFJVRQogQVJNX0ZBTFNFCiBBUk1fVFJVRQorQVJDX0ZBTFNFCitBUkNfVFJVRQogQUFSQ0g2NF9GQUxTRQogQUFSQ0g2NF9UUlVFCiBQT1dFUlBDX0ZSRUVCU0RfRkFMU0UKQEAgLTY4MywxMiArNjg4LDE2IEBACiBQT1dFUlBDX0FJWF9UUlVFCiBQT1dFUlBDX0ZBTFNFCiBQT1dFUlBDX1RSVUUKK05JT1MyX0ZBTFNFCitOSU9TMl9UUlVFCiBNT1hJRV9GQUxTRQogTU9YSUVfVFJVRQogTUVUQUdfRkFMU0UKIE1FVEFHX1RSVUUKIE1JQ1JPQkxBWkVfRkFMU0UKIE1JQ1JPQkxBWkVfVFJVRQorTTg4S19GQUxTRQorTTg4S19UUlVFCiBNNjhLX0ZBTFNFCiBNNjhLX1RSVUUKIE0zMlJfRkFMU0UKQEAgLTY5Nyw2ICs3MDYsMTAgQEAKIElBNjRfVFJVRQogQUxQSEFfRkFMU0UKIEFMUEhBX1RSVUUKK1g4Nl9EQVJXSU42NF9GQUxTRQorWDg2X0RBUldJTjY0X1RSVUUKK1g4Nl9EQVJXSU4zMl9GQUxTRQorWDg2X0RBUldJTjMyX1RSVUUKIFg4Nl9EQVJXSU5fRkFMU0UKIFg4Nl9EQVJXSU5fVFJVRQogWDg2X1dJTjY0X0ZBTFNFCkBAIC03MjEsNiArNzM0LDcgQEAKIE1BSU5UQUlORVJfTU9ERV9GQUxTRQogTUFJTlRBSU5FUl9NT0RFX1RSVUUKIFBSVERJQUcKK0NYWENQUAogQ1BQCiBPVE9PTDY0CiBPVE9PTApAQCAtNzQ4LDYgKzc2MiwxMiBAQAogQ0NBU0RFUE1PREUKIENDQVNGTEFHUwogQ0NBUworYW1fX2Zhc3RkZXBDWFhfRkFMU0UKK2FtX19mYXN0ZGVwQ1hYX1RSVUUKK0NYWERFUE1PREUKK2FjX2N0X0NYWAorQ1hYRkxBR1MKK0NYWAogYW1fX2Zhc3RkZXBDQ19GQUxTRQogYW1fX2Zhc3RkZXBDQ19UUlVFCiBDQ0RFUE1PREUKQEAgLTc2NSw2ICs3ODUsMTAgQEAKIExERkxBR1MKIENGTEFHUwogQ0MKK0FNX0JBQ0tTTEFTSAorQU1fREVGQVVMVF9WRVJCT1NJVFkKK0FNX0RFRkFVTFRfVgorQU1fVgogYW1fX3VudGFyCiBhbV9fdGFyCiBBTVRBUgpAQCAtODQzLDYgKzg2Nyw3IEBACiBhY191c2VyX29wdHM9JwogZW5hYmxlX29wdGlvbl9jaGVja2luZwogZW5hYmxlX2J1aWxkZGlyCitlbmFibGVfc2lsZW50X3J1bGVzCiBlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZwogZW5hYmxlX3NoYXJlZAogZW5hYmxlX3N0YXRpYwpAQCAtODY2LDcgKzg5MSw4IEBACiBDQ0FTCiBDQ0FTRkxBR1MKIENQUAotQ1BQRkxBR1MnCitDUFBGTEFHUworQ1hYQ1BQJwogCiAKICMgSW5pdGlhbGl6ZSBzb21lIHZhcmlhYmxlcyBzZXQgYnkgb3B0aW9ucy4KQEAgLTE0MDcsNyArMTQzMyw3IEBACiAgICMgT21pdCBzb21lIGludGVybmFsIG9yIG9ic29sZXRlIG9wdGlvbnMgdG8gbWFrZSB0aGUgbGlzdCBsZXNzIGltcG9zaW5nLgogICAjIFRoaXMgbWVzc2FnZSBpcyB0b28gbG9uZyB0byBiZSBhIHN0cmluZyBpbiB0aGUgQS9VWCAzLjEgc2guCiAgIGNhdCA8PF9BQ0VPRgotXGBjb25maWd1cmUnIGNvbmZpZ3VyZXMgbGliZmZpIDMuMC4xMyB0byBhZGFwdCB0byBtYW55IGtpbmRzIG9mIHN5c3RlbXMuCitcYGNvbmZpZ3VyZScgY29uZmlndXJlcyBsaWJmZmkgMy4xIHRvIGFkYXB0IHRvIG1hbnkga2luZHMgb2Ygc3lzdGVtcy4KIAogVXNhZ2U6ICQwIFtPUFRJT05dLi4uIFtWQVI9VkFMVUVdLi4uCiAKQEAgLTE0NzgsNyArMTUwNCw3IEBACiAKIGlmIHRlc3QgLW4gIiRhY19pbml0X2hlbHAiOyB0aGVuCiAgIGNhc2UgJGFjX2luaXRfaGVscCBpbgotICAgICBzaG9ydCB8IHJlY3Vyc2l2ZSApIGVjaG8gIkNvbmZpZ3VyYXRpb24gb2YgbGliZmZpIDMuMC4xMzoiOzsKKyAgICAgc2hvcnQgfCByZWN1cnNpdmUgKSBlY2hvICJDb25maWd1cmF0aW9uIG9mIGxpYmZmaSAzLjE6Ijs7CiAgICBlc2FjCiAgIGNhdCA8PFxfQUNFT0YKIApAQCAtMTQ4OCw2ICsxNTE0LDggQEAKICAgLS1lbmFibGUtRkVBVFVSRVs9QVJHXSAgaW5jbHVkZSBGRUFUVVJFIFtBUkc9eWVzXQogICAtLWRpc2FibGUtYnVpbGRkaXIgICAgICBkaXNhYmxlIGF1dG9tYXRpYyBidWlsZCBpbiBzdWJkaXIgb2Ygc291cmNlcwogCisgIC0tZW5hYmxlLXNpbGVudC1ydWxlcyAgIGxlc3MgdmVyYm9zZSBidWlsZCBvdXRwdXQgKHVuZG86ICJtYWtlIFY9MSIpCisgIC0tZGlzYWJsZS1zaWxlbnQtcnVsZXMgIHZlcmJvc2UgYnVpbGQgb3V0cHV0ICh1bmRvOiAibWFrZSBWPTAiKQogICAtLWVuYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvIG5vdCByZWplY3Qgc2xvdyBkZXBlbmRlbmN5IGV4dHJhY3RvcnMKICAgLS1kaXNhYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcKQEAgLTE1MTUsOCArMTU0Myw4IEBACiAgIC0td2l0aC1waWNbPVBLR1NdICAgICAgIHRyeSB0byB1c2Ugb25seSBQSUMvbm9uLVBJQyBvYmplY3RzIFtkZWZhdWx0PXVzZQogICAgICAgICAgICAgICAgICAgICAgICAgICBib3RoXQogICAtLXdpdGgtZ251LWxkICAgICAgICAgICBhc3N1bWUgdGhlIEMgY29tcGlsZXIgdXNlcyBHTlUgbGQgW2RlZmF1bHQ9bm9dCi0gIC0td2l0aC1zeXNyb290PURJUiBTZWFyY2ggZm9yIGRlcGVuZGVudCBsaWJyYXJpZXMgd2l0aGluIERJUgotICAgICAgICAgICAgICAgICAgICAgICAgKG9yIHRoZSBjb21waWxlcidzIHN5c3Jvb3QgaWYgbm90IHNwZWNpZmllZCkuCisgIC0td2l0aC1zeXNyb290Wz1ESVJdICAgIFNlYXJjaCBmb3IgZGVwZW5kZW50IGxpYnJhcmllcyB3aXRoaW4gRElSIChvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZXIncyBzeXNyb290IGlmIG5vdCBzcGVjaWZpZWQpLgogICAtLXdpdGgtZ2NjLWFyY2g9PGFyY2g+ICB1c2UgYXJjaGl0ZWN0dXJlIDxhcmNoPiBmb3IgZ2NjIC1tYXJjaC8tbXR1bmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RlYWQgb2YgZ3Vlc3NpbmcKIApAQCAtMTUyOCw5ICsxNTU2LDEyIEBACiAgIExJQlMgICAgICAgIGxpYnJhcmllcyB0byBwYXNzIHRvIHRoZSBsaW5rZXIsIGUuZy4gLWw8bGlicmFyeT4KICAgQ1BQRkxBR1MgICAgKE9iamVjdGl2ZSkgQy9DKysgcHJlcHJvY2Vzc29yIGZsYWdzLCBlLmcuIC1JPGluY2x1ZGUgZGlyPiBpZgogICAgICAgICAgICAgICB5b3UgaGF2ZSBoZWFkZXJzIGluIGEgbm9uc3RhbmRhcmQgZGlyZWN0b3J5IDxpbmNsdWRlIGRpcj4KKyAgQ1hYICAgICAgICAgQysrIGNvbXBpbGVyIGNvbW1hbmQKKyAgQ1hYRkxBR1MgICAgQysrIGNvbXBpbGVyIGZsYWdzCiAgIENDQVMgICAgICAgIGFzc2VtYmxlciBjb21waWxlciBjb21tYW5kIChkZWZhdWx0cyB0byBDQykKICAgQ0NBU0ZMQUdTICAgYXNzZW1ibGVyIGNvbXBpbGVyIGZsYWdzIChkZWZhdWx0cyB0byBDRkxBR1MpCiAgIENQUCAgICAgICAgIEMgcHJlcHJvY2Vzc29yCisgIENYWENQUCAgICAgIEMrKyBwcmVwcm9jZXNzb3IKIAogVXNlIHRoZXNlIHZhcmlhYmxlcyB0byBvdmVycmlkZSB0aGUgY2hvaWNlcyBtYWRlIGJ5IGBjb25maWd1cmUnIG9yIHRvIGhlbHAKIGl0IHRvIGZpbmQgbGlicmFyaWVzIGFuZCBwcm9ncmFtcyB3aXRoIG5vbnN0YW5kYXJkIG5hbWVzL2xvY2F0aW9ucy4KQEAgLTE1OTgsNyArMTYyOSw3IEBACiB0ZXN0IC1uICIkYWNfaW5pdF9oZWxwIiAmJiBleGl0ICRhY19zdGF0dXMKIGlmICRhY19pbml0X3ZlcnNpb247IHRoZW4KICAgY2F0IDw8XF9BQ0VPRgotbGliZmZpIGNvbmZpZ3VyZSAzLjAuMTMKK2xpYmZmaSBjb25maWd1cmUgMy4xCiBnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjkKIAogQ29weXJpZ2h0IChDKSAyMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgpAQCAtMTY1MCw2ICsxNjgxLDQ0IEBACiAKIH0gIyBhY19mbl9jX3RyeV9jb21waWxlCiAKKyMgYWNfZm5fY3h4X3RyeV9jb21waWxlIExJTkVOTworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRyeSB0byBjb21waWxlIGNvbmZ0ZXN0LiRhY19leHQsIGFuZCByZXR1cm4gd2hldGhlciB0aGlzIHN1Y2NlZWRlZC4KK2FjX2ZuX2N4eF90cnlfY29tcGlsZSAoKQoreworICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyAgaWYgeyB7IGFjX3RyeT0iJGFjX2NvbXBpbGUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcnIKKyAgYWNfc3RhdHVzPSQ/CisgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjEKKyAgICBjYXQgY29uZnRlc3QuZXIxID4mNQorICAgIG12IC1mIGNvbmZ0ZXN0LmVyMSBjb25mdGVzdC5lcnIKKyAgZmkKKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY3h4X3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4gOgorICBhY19yZXR2YWw9MAorZWxzZQorICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCWFjX3JldHZhbD0xCitmaQorICBldmFsICRhc19saW5lbm9fc3RhY2s7ICR7YXNfbGluZW5vX3N0YWNrOis6fSB1bnNldCBhc19saW5lbm8KKyAgYXNfZm5fc2V0X3N0YXR1cyAkYWNfcmV0dmFsCisKK30gIyBhY19mbl9jeHhfdHJ5X2NvbXBpbGUKKwogIyBhY19mbl9jX3RyeV9saW5rIExJTkVOTwogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBUcnkgdG8gbGluayBjb25mdGVzdC4kYWNfZXh0LCBhbmQgcmV0dXJuIHdoZXRoZXIgdGhpcyBzdWNjZWVkZWQuCkBAIC0xODczLDYgKzE5NDIsODkgQEAKIAogfSAjIGFjX2ZuX2NfY2hlY2tfZnVuYwogCisjIGFjX2ZuX2N4eF90cnlfY3BwIExJTkVOTworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVHJ5IHRvIHByZXByb2Nlc3MgY29uZnRlc3QuJGFjX2V4dCwgYW5kIHJldHVybiB3aGV0aGVyIHRoaXMgc3VjY2VlZGVkLgorYWNfZm5fY3h4X3RyeV9jcHAgKCkKK3sKKyAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICBpZiB7IHsgYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+Y29uZnRlc3QuZXJyCisgIGFjX3N0YXR1cz0kPworICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIxCisgICAgY2F0IGNvbmZ0ZXN0LmVyMSA+JjUKKyAgICBtdiAtZiBjb25mdGVzdC5lcjEgY29uZnRlc3QuZXJyCisgIGZpCisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ID4gY29uZnRlc3QuaSAmJiB7CisJIHRlc3QgLXogIiRhY19jeHhfcHJlcHJvY193YXJuX2ZsYWckYWNfY3h4X3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfTsgdGhlbiA6CisgIGFjX3JldHZhbD0wCitlbHNlCisgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisgICAgYWNfcmV0dmFsPTEKK2ZpCisgIGV2YWwgJGFzX2xpbmVub19zdGFjazsgJHthc19saW5lbm9fc3RhY2s6Kzp9IHVuc2V0IGFzX2xpbmVubworICBhc19mbl9zZXRfc3RhdHVzICRhY19yZXR2YWwKKworfSAjIGFjX2ZuX2N4eF90cnlfY3BwCisKKyMgYWNfZm5fY3h4X3RyeV9saW5rIExJTkVOTworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRyeSB0byBsaW5rIGNvbmZ0ZXN0LiRhY19leHQsIGFuZCByZXR1cm4gd2hldGhlciB0aGlzIHN1Y2NlZWRlZC4KK2FjX2ZuX2N4eF90cnlfbGluayAoKQoreworICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CisgIGlmIHsgeyBhY190cnk9IiRhY19saW5rIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXJyCisgIGFjX3N0YXR1cz0kPworICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIxCisgICAgY2F0IGNvbmZ0ZXN0LmVyMSA+JjUKKyAgICBtdiAtZiBjb25mdGVzdC5lcjEgY29uZnRlc3QuZXJyCisgIGZpCisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2N4eF93ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYgeworCSB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllcyB8fAorCSB0ZXN0IC14IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorICAgICAgIH07IHRoZW4gOgorICBhY19yZXR2YWw9MAorZWxzZQorICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCWFjX3JldHZhbD0xCitmaQorICAjIERlbGV0ZSB0aGUgSVBBL0lQTyAoSW50ZXIgUHJvY2VkdXJhbCBBbmFseXNpcy9PcHRpbWl6YXRpb24pIGluZm9ybWF0aW9uCisgICMgY3JlYXRlZCBieSB0aGUgUEdJIGNvbXBpbGVyIChjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vKSwgYXMgaXQgd291bGQKKyAgIyBpbnRlcmZlcmUgd2l0aCB0aGUgbmV4dCBsaW5rIGNvbW1hbmQ7IGFsc28gZGVsZXRlIGEgZGlyZWN0b3J5IHRoYXQgaXMKKyAgIyBsZWZ0IGJlaGluZCBieSBBcHBsZSdzIGNvbXBpbGVyLiAgV2UgZG8gdGhpcyBiZWZvcmUgZXhlY3V0aW5nIHRoZSBhY3Rpb25zLgorICBybSAtcmYgY29uZnRlc3QuZFNZTSBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vCisgIGV2YWwgJGFzX2xpbmVub19zdGFjazsgJHthc19saW5lbm9fc3RhY2s6Kzp9IHVuc2V0IGFzX2xpbmVubworICBhc19mbl9zZXRfc3RhdHVzICRhY19yZXR2YWwKKworfSAjIGFjX2ZuX2N4eF90cnlfbGluaworCiAjIGFjX2ZuX2NfY29tcHV0ZV9pbnQgTElORU5PIEVYUFIgVkFSIElOQ0xVREVTCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIFRyaWVzIHRvIGZpbmQgdGhlIGNvbXBpbGUtdGltZSB2YWx1ZSBvZiBFWFBSIGluIGEgcHJvZ3JhbSB0aGF0IGluY2x1ZGVzCkBAIC0yMjA0LDcgKzIzNTYsNyBAQAogVGhpcyBmaWxlIGNvbnRhaW5zIGFueSBtZXNzYWdlcyBwcm9kdWNlZCBieSBjb21waWxlcnMgd2hpbGUKIHJ1bm5pbmcgY29uZmlndXJlLCB0byBhaWQgZGVidWdnaW5nIGlmIGNvbmZpZ3VyZSBtYWtlcyBhIG1pc3Rha2UuCiAKLUl0IHdhcyBjcmVhdGVkIGJ5IGxpYmZmaSAkYXNfbWUgMy4wLjEzLCB3aGljaCB3YXMKK0l0IHdhcyBjcmVhdGVkIGJ5IGxpYmZmaSAkYXNfbWUgMy4xLCB3aGljaCB3YXMKIGdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42OS4gIEludm9jYXRpb24gY29tbWFuZCBsaW5lIHdhcwogCiAgICQgJDAgJEAKQEAgLTI2OTcsNyArMjg0OSwxMSBAQAogCiB0YXJnZXRfYWxpYXM9JHt0YXJnZXRfYWxpYXMtJGhvc3RfYWxpYXN9CiAKLS4gJHtzcmNkaXJ9L2NvbmZpZ3VyZS5ob3N0CitjYXNlICIke2hvc3R9IiBpbgorICBmcnYqLWVsZikKKyAgICBMREZMQUdTPWBlY2hvICRMREZMQUdTIHwgc2VkICJzL1wtQl4gKmxpYmdsb3NzXC9mcnZcLy8vImBcIC1CYHB3ZGAvLi4vbGliZ2xvc3MvZnJ2LworICAgIDs7Citlc2FjCiAKIAogICAgIyBbJF1AIGlzIHVuc2FibGUgaW4gMi42MCsgYnV0IGVhcmxpZXIgYXV0b2NvbmYgaGFkIG5vIGFjX2NvbmZpZ3VyZV9hcmdzCkBAIC0yODAzLDcgKzI5NTksNyBAQAogYWNfY29uZmlnX2NvbW1hbmRzPSIkYWNfY29uZmlnX2NvbW1hbmRzIGJ1aWxkaXIiCiAKIAotYW1fX2FwaV92ZXJzaW9uPScxLjEyJworYW1fX2FwaV92ZXJzaW9uPScxLjEzJwogCiAjIEZpbmQgYSBnb29kIGluc3RhbGwgcHJvZ3JhbS4gIFdlIHByZWZlciBhIEMgcHJvZ3JhbSAoZmFzdGVyKSwKICMgc28gb25lIHNjcmlwdCBpcyBhcyBnb29kIGFzIGFub3RoZXIuICBCdXQgYXZvaWQgdGhlIGJyb2tlbiBvcgpAQCAtMjk4NCw4ICszMTQwLDggQEAKICAgZXNhYwogZmkKICMgVXNlIGV2YWwgdG8gZXhwYW5kICRTSEVMTAotaWYgZXZhbCAiJE1JU1NJTkcgLS1ydW4gdHJ1ZSI7IHRoZW4KLSAgYW1fbWlzc2luZ19ydW49IiRNSVNTSU5HIC0tcnVuICIKK2lmIGV2YWwgIiRNSVNTSU5HIC0taXMtbGlnaHR3ZWlnaHQiOyB0aGVuCisgIGFtX21pc3NpbmdfcnVuPSIkTUlTU0lORyAiCiBlbHNlCiAgIGFtX21pc3NpbmdfcnVuPQogICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICdtaXNzaW5nJyBzY3JpcHQgaXMgdG9vIG9sZCBvciBtaXNzaW5nIiA+JjUKQEAgLTMyMjUsNiArMzM4MSw0NSBAQAogZmkKIHJtZGlyIC50c3QgMj4vZGV2L251bGwKIAorIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXNpbGVudC1ydWxlcyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9zaWxlbnRfcnVsZXMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9zaWxlbnRfcnVsZXM7CitmaQorCitjYXNlICRlbmFibGVfc2lsZW50X3J1bGVzIGluICMgKCgoCisgIHllcykgQU1fREVGQVVMVF9WRVJCT1NJVFk9MDs7CisgICBubykgQU1fREVGQVVMVF9WRVJCT1NJVFk9MTs7CisgICAgKikgQU1fREVGQVVMVF9WRVJCT1NJVFk9MTs7Citlc2FjCithbV9tYWtlPSR7TUFLRS1tYWtlfQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyICRhbV9tYWtlIHN1cHBvcnRzIG5lc3RlZCB2YXJpYWJsZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAkYW1fbWFrZSBzdXBwb3J0cyBuZXN0ZWQgdmFyaWFibGVzLi4uICIgPiY2OyB9CitpZiAke2FtX2N2X21ha2Vfc3VwcG9ydF9uZXN0ZWRfdmFyaWFibGVzKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgJGFzX2VjaG8gJ1RSVUU9JChCQVIkKFYpKQorQkFSMD1mYWxzZQorQkFSMT10cnVlCitWPTEKK2FtX19kb2l0OgorCUAkKFRSVUUpCisuUEhPTlk6IGFtX19kb2l0JyB8ICRhbV9tYWtlIC1mIC0gPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIGFtX2N2X21ha2Vfc3VwcG9ydF9uZXN0ZWRfdmFyaWFibGVzPXllcworZWxzZQorICBhbV9jdl9tYWtlX3N1cHBvcnRfbmVzdGVkX3ZhcmlhYmxlcz1ubworZmkKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFtX2N2X21ha2Vfc3VwcG9ydF9uZXN0ZWRfdmFyaWFibGVzIiA+JjUKKyRhc19lY2hvICIkYW1fY3ZfbWFrZV9zdXBwb3J0X25lc3RlZF92YXJpYWJsZXMiID4mNjsgfQoraWYgdGVzdCAkYW1fY3ZfbWFrZV9zdXBwb3J0X25lc3RlZF92YXJpYWJsZXMgPSB5ZXM7IHRoZW4KKyAgICBBTV9WPSckKFYpJworICBBTV9ERUZBVUxUX1Y9JyQoQU1fREVGQVVMVF9WRVJCT1NJVFkpJworZWxzZQorICBBTV9WPSRBTV9ERUZBVUxUX1ZFUkJPU0lUWQorICBBTV9ERUZBVUxUX1Y9JEFNX0RFRkFVTFRfVkVSQk9TSVRZCitmaQorQU1fQkFDS1NMQVNIPSdcJworCiBpZiB0ZXN0ICJgY2QgJHNyY2RpciAmJiBwd2RgIiAhPSAiYHB3ZGAiOyB0aGVuCiAgICMgVXNlIC1JJChzcmNkaXIpIG9ubHkgd2hlbiAkKHNyY2RpcikgIT0gLiwgc28gdGhhdCBtYWtlJ3Mgb3V0cHV0CiAgICMgaXMgbm90IHBvbGx1dGVkIHdpdGggcmVwZWF0ZWQgIi1JLiIKQEAgLTMyNDcsNyArMzQ0Miw3IEBACiAKICMgRGVmaW5lIHRoZSBpZGVudGl0eSBvZiB0aGUgcGFja2FnZS4KICBQQUNLQUdFPSdsaWJmZmknCi0gVkVSU0lPTj0nMy4wLjEzJworIFZFUlNJT049JzMuMScKIAogCiBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCkBAIC0zMjg3LDYgKzM0ODIsMTAgQEAKICMgaW4gdGhlIHdpbGQgOi0oICBXZSBzaG91bGQgZmluZCBhIHByb3BlciB3YXkgdG8gZGVwcmVjYXRlIGl0IC4uLgogQU1UQVI9JyQke1RBUi10YXJ9JwogCisKKyMgV2UnbGwgbG9vcCBvdmVyIGFsbCBrbm93biBtZXRob2RzIHRvIGNyZWF0ZSBhIHRhciBhcmNoaXZlIHVudGlsIG9uZSB3b3Jrcy4KK19hbV90b29scz0nZ251dGFyICBwYXggY3BpbyBub25lJworCiBhbV9fdGFyPSckJHtUQVItdGFyfSBjaG9mIC0gIiQkdGFyZGlyIicgYW1fX3VudGFyPSckJHtUQVItdGFyfSB4ZiAtJwogCiAKQEAgLTMyOTQsNiArMzQ5Myw3IEBACiAKIAogCisKICMgVGhlIHNhbWUgYXMgaW4gYm9laG0tZ2MgYW5kIGxpYnN0ZGMrKy4gSGF2ZSB0byBib3Jyb3cgaXQgZnJvbSB0aGVyZS4KICMgV2UgbXVzdCBmb3JjZSBDQyB0byAvbm90LyBiZSBwcmVjaW91cyB2YXJpYWJsZXM7IG90aGVyd2lzZQogIyB0aGUgd3JvbmcsIG5vbi1tdWx0aWxpYi1hZGp1c3RlZCB2YWx1ZSB3aWxsIGJlIHVzZWQgaW4gbXVsdGlsaWJzLgpAQCAtNDI4NCw2ICs0NDg0LDM5MSBAQAogZmkKIAogCithY19leHQ9Y3BwCithY19jcHA9JyRDWFhDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENYWCAtYyAkQ1hYRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENYWCAtbyBjb25mdGVzdCRhY19leGVleHQgJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY3h4X2NvbXBpbGVyX2dudQoraWYgdGVzdCAteiAiJENYWCI7IHRoZW4KKyAgaWYgdGVzdCAtbiAiJENDQyI7IHRoZW4KKyAgICBDWFg9JENDQworICBlbHNlCisgICAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICBmb3IgYWNfcHJvZyBpbiBnKysgYysrIGdwcCBhQ0MgQ0MgY3h4IGNjKysgY2wuZXhlIEZDQyBLQ0MgUkNDIHhsQ19yIHhsQworICBkbworICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICRhY190b29sX3ByZWZpeCRhY19wcm9nOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19DWFgrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkQ1hYIjsgdGhlbgorICBhY19jdl9wcm9nX0NYWD0iJENYWCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX0NYWD0iJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorQ1hYPSRhY19jdl9wcm9nX0NYWAoraWYgdGVzdCAtbiAiJENYWCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRDWFgiID4mNQorJGFzX2VjaG8gIiRDWFgiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworICAgIHRlc3QgLW4gIiRDWFgiICYmIGJyZWFrCisgIGRvbmUKK2ZpCitpZiB0ZXN0IC16ICIkQ1hYIjsgdGhlbgorICBhY19jdF9DWFg9JENYWAorICBmb3IgYWNfcHJvZyBpbiBnKysgYysrIGdwcCBhQ0MgQ0MgY3h4IGNjKysgY2wuZXhlIEZDQyBLQ0MgUkNDIHhsQ19yIHhsQworZG8KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2FjX2N0X0NYWCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9DWFgiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfQ1hYPSIkYWNfY3RfQ1hYIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfQ1hYPSIkYWNfcHJvZyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9DWFg9JGFjX2N2X3Byb2dfYWNfY3RfQ1hYCitpZiB0ZXN0IC1uICIkYWNfY3RfQ1hYIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X0NYWCIgPiY1CiskYXNfZWNobyAiJGFjX2N0X0NYWCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisgIHRlc3QgLW4gIiRhY19jdF9DWFgiICYmIGJyZWFrCitkb25lCisKKyAgaWYgdGVzdCAieCRhY19jdF9DWFgiID0geDsgdGhlbgorICAgIENYWD0iZysrIgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIENYWD0kYWNfY3RfQ1hYCisgIGZpCitmaQorCisgIGZpCitmaQorIyBQcm92aWRlIHNvbWUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNvbXBpbGVyLgorJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIEMrKyBjb21waWxlciB2ZXJzaW9uIiA+JjUKK3NldCBYICRhY19jb21waWxlCithY19jb21waWxlcj0kMgorZm9yIGFjX29wdGlvbiBpbiAtLXZlcnNpb24gLXYgLVYgLXF2ZXJzaW9uOyBkbworICB7IHsgYWNfdHJ5PSIkYWNfY29tcGlsZXIgJGFjX29wdGlvbiA+JjUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY19jb21waWxlciAkYWNfb3B0aW9uID4mNSIpIDI+Y29uZnRlc3QuZXJyCisgIGFjX3N0YXR1cz0kPworICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgIHNlZCAnMTBhXAorLi4uIHJlc3Qgb2Ygc3RkZXJyIG91dHB1dCBkZWxldGVkIC4uLgorICAgICAgICAgMTBxJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMQorICAgIGNhdCBjb25mdGVzdC5lcjEgPiY1CisgIGZpCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMSBjb25mdGVzdC5lcnIKKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0KK2RvbmUKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgR05VIEMrKyBjb21waWxlciIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgR05VIEMrKyBjb21waWxlci4uLiAiID4mNjsgfQoraWYgJHthY19jdl9jeHhfY29tcGlsZXJfZ251Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKyNpZm5kZWYgX19HTlVDX18KKyAgICAgICBjaG9rZSBtZQorI2VuZGlmCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY3h4X3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2NvbXBpbGVyX2dudT15ZXMKK2Vsc2UKKyAgYWNfY29tcGlsZXJfZ251PW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CithY19jdl9jeHhfY29tcGlsZXJfZ251PSRhY19jb21waWxlcl9nbnUKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfY3h4X2NvbXBpbGVyX2dudSIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2N4eF9jb21waWxlcl9nbnUiID4mNjsgfQoraWYgdGVzdCAkYWNfY29tcGlsZXJfZ251ID0geWVzOyB0aGVuCisgIEdYWD15ZXMKK2Vsc2UKKyAgR1hYPQorZmkKK2FjX3Rlc3RfQ1hYRkxBR1M9JHtDWFhGTEFHUytzZXR9CithY19zYXZlX0NYWEZMQUdTPSRDWFhGTEFHUworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyICRDWFggYWNjZXB0cyAtZyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyICRDWFggYWNjZXB0cyAtZy4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2N4eF9nKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfc2F2ZV9jeHhfd2Vycm9yX2ZsYWc9JGFjX2N4eF93ZXJyb3JfZmxhZworICAgYWNfY3h4X3dlcnJvcl9mbGFnPXllcworICAgYWNfY3ZfcHJvZ19jeHhfZz1ubworICAgQ1hYRkxBR1M9Ii1nIgorICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jeHhfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfcHJvZ19jeHhfZz15ZXMKK2Vsc2UKKyAgQ1hYRkxBR1M9IiIKKyAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY3h4X3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKK2Vsc2UKKyAgYWNfY3h4X3dlcnJvcl9mbGFnPSRhY19zYXZlX2N4eF93ZXJyb3JfZmxhZworCSBDWFhGTEFHUz0iLWciCisJIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY3h4X3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X3Byb2dfY3h4X2c9eWVzCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICBhY19jeHhfd2Vycm9yX2ZsYWc9JGFjX3NhdmVfY3h4X3dlcnJvcl9mbGFnCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9wcm9nX2N4eF9nIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfcHJvZ19jeHhfZyIgPiY2OyB9CitpZiB0ZXN0ICIkYWNfdGVzdF9DWFhGTEFHUyIgPSBzZXQ7IHRoZW4KKyAgQ1hYRkxBR1M9JGFjX3NhdmVfQ1hYRkxBR1MKK2VsaWYgdGVzdCAkYWNfY3ZfcHJvZ19jeHhfZyA9IHllczsgdGhlbgorICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorICAgIENYWEZMQUdTPSItZyAtTzIiCisgIGVsc2UKKyAgICBDWFhGTEFHUz0iLWciCisgIGZpCitlbHNlCisgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCisgICAgQ1hYRkxBR1M9Ii1PMiIKKyAgZWxzZQorICAgIENYWEZMQUdTPQorICBmaQorZmkKK2FjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKworZGVwY2M9IiRDWFgiICBhbV9jb21waWxlcl9saXN0PQorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGRlcGVuZGVuY3kgc3R5bGUgb2YgJGRlcGNjIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGRlcGVuZGVuY3kgc3R5bGUgb2YgJGRlcGNjLi4uICIgPiY2OyB9CitpZiAke2FtX2N2X0NYWF9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLXogIiRBTURFUF9UUlVFIiAmJiB0ZXN0IC1mICIkYW1fZGVwY29tcCI7IHRoZW4KKyAgIyBXZSBtYWtlIGEgc3ViZGlyIGFuZCBkbyB0aGUgdGVzdHMgdGhlcmUuICBPdGhlcndpc2Ugd2UgY2FuIGVuZCB1cAorICAjIG1ha2luZyBib2d1cyBmaWxlcyB0aGF0IHdlIGRvbid0IGtub3cgYWJvdXQgYW5kIG5ldmVyIHJlbW92ZS4gIEZvcgorICAjIGluc3RhbmNlIGl0IHdhcyByZXBvcnRlZCB0aGF0IG9uIEhQLVVYIHRoZSBnY2MgdGVzdCB3aWxsIGVuZCB1cAorICAjIG1ha2luZyBhIGR1bW15IGZpbGUgbmFtZWQgJ0QnIC0tIGJlY2F1c2UgJy1NRCcgbWVhbnMgInB1dCB0aGUgb3V0cHV0CisgICMgaW4gRCIuCisgIHJtIC1yZiBjb25mdGVzdC5kaXIKKyAgbWtkaXIgY29uZnRlc3QuZGlyCisgICMgQ29weSBkZXBjb21wIHRvIHN1YmRpciBiZWNhdXNlIG90aGVyd2lzZSB3ZSB3b24ndCBmaW5kIGl0IGlmIHdlJ3JlCisgICMgdXNpbmcgYSByZWxhdGl2ZSBkaXJlY3RvcnkuCisgIGNwICIkYW1fZGVwY29tcCIgY29uZnRlc3QuZGlyCisgIGNkIGNvbmZ0ZXN0LmRpcgorICAjIFdlIHdpbGwgYnVpbGQgb2JqZWN0cyBhbmQgZGVwZW5kZW5jaWVzIGluIGEgc3ViZGlyZWN0b3J5IGJlY2F1c2UKKyAgIyBpdCBoZWxwcyB0byBkZXRlY3QgaW5hcHBsaWNhYmxlIGRlcGVuZGVuY3kgbW9kZXMuICBGb3IgaW5zdGFuY2UKKyAgIyBib3RoIFRydTY0J3MgY2MgYW5kIElDQyBzdXBwb3J0IC1NRCB0byBvdXRwdXQgZGVwZW5kZW5jaWVzIGFzIGEKKyAgIyBzaWRlIGVmZmVjdCBvZiBjb21waWxhdGlvbiwgYnV0IElDQyB3aWxsIHB1dCB0aGUgZGVwZW5kZW5jaWVzIGluCisgICMgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IHdoaWxlIFRydTY0IHdpbGwgcHV0IHRoZW0gaW4gdGhlIG9iamVjdAorICAjIGRpcmVjdG9yeS4KKyAgbWtkaXIgc3ViCisKKyAgYW1fY3ZfQ1hYX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlPW5vbmUKKyAgaWYgdGVzdCAiJGFtX2NvbXBpbGVyX2xpc3QiID0gIiI7IHRoZW4KKyAgICAgYW1fY29tcGlsZXJfbGlzdD1gc2VkIC1uICdzL14jKlwoW2EtekEtWjAtOV0qXCkpJC9cMS9wJyA8IC4vZGVwY29tcGAKKyAgZmkKKyAgYW1fX3VuaXZlcnNhbD1mYWxzZQorICBjYXNlICIgJGRlcGNjICIgaW4gIygKKyAgICAgKlwgLWFyY2hcICpcIC1hcmNoXCAqKSBhbV9fdW5pdmVyc2FsPXRydWUgOzsKKyAgICAgZXNhYworCisgIGZvciBkZXBtb2RlIGluICRhbV9jb21waWxlcl9saXN0OyBkbworICAgICMgU2V0dXAgYSBzb3VyY2Ugd2l0aCBtYW55IGRlcGVuZGVuY2llcywgYmVjYXVzZSBzb21lIGNvbXBpbGVycworICAgICMgbGlrZSB0byB3cmFwIGxhcmdlIGRlcGVuZGVuY3kgbGlzdHMgb24gY29sdW1uIDgwICh3aXRoIFwpLCBhbmQKKyAgICAjIHdlIHNob3VsZCBub3QgY2hvb3NlIGEgZGVwY29tcCBtb2RlIHdoaWNoIGlzIGNvbmZ1c2VkIGJ5IHRoaXMuCisgICAgIworICAgICMgV2UgbmVlZCB0byByZWNyZWF0ZSB0aGVzZSBmaWxlcyBmb3IgZWFjaCB0ZXN0LCBhcyB0aGUgY29tcGlsZXIgbWF5CisgICAgIyBvdmVyd3JpdGUgc29tZSBvZiB0aGVtIHdoZW4gdGVzdGluZyB3aXRoIG9ic2N1cmUgY29tbWFuZCBsaW5lcy4KKyAgICAjIFRoaXMgaGFwcGVucyBhdCBsZWFzdCB3aXRoIHRoZSBBSVggQyBjb21waWxlci4KKyAgICA6ID4gc3ViL2NvbmZ0ZXN0LmMKKyAgICBmb3IgaSBpbiAxIDIgMyA0IDUgNjsgZG8KKyAgICAgIGVjaG8gJyNpbmNsdWRlICJjb25mdHN0JyRpJy5oIicgPj4gc3ViL2NvbmZ0ZXN0LmMKKyAgICAgICMgVXNpbmcgIjogPiBzdWIvY29uZnRzdCRpLmgiIGNyZWF0ZXMgb25seSBzdWIvY29uZnRzdDEuaCB3aXRoCisgICAgICAjIFNvbGFyaXMgMTAgL2Jpbi9zaC4KKyAgICAgIGVjaG8gJy8qIGR1bW15ICovJyA+IHN1Yi9jb25mdHN0JGkuaAorICAgIGRvbmUKKyAgICBlY2hvICIke2FtX19pbmNsdWRlfSAke2FtX19xdW90ZX1zdWIvY29uZnRlc3QuUG8ke2FtX19xdW90ZX0iID4gY29uZm1mCisKKyAgICAjIFdlIGNoZWNrIHdpdGggJy1jJyBhbmQgJy1vJyBmb3IgdGhlIHNha2Ugb2YgdGhlICJkYXNobXN0ZG91dCIKKyAgICAjIG1vZGUuICBJdCB0dXJucyBvdXQgdGhhdCB0aGUgU3VuUHJvIEMrKyBjb21waWxlciBkb2VzIG5vdCBwcm9wZXJseQorICAgICMgaGFuZGxlICctTSAtbycsIGFuZCB3ZSBuZWVkIHRvIGRldGVjdCB0aGlzLiAgQWxzbywgc29tZSBJbnRlbAorICAgICMgdmVyc2lvbnMgaGFkIHRyb3VibGUgd2l0aCBvdXRwdXQgaW4gc3ViZGlycy4KKyAgICBhbV9fb2JqPXN1Yi9jb25mdGVzdC4ke09CSkVYVC1vfQorICAgIGFtX19taW51c19vYmo9Ii1vICRhbV9fb2JqIgorICAgIGNhc2UgJGRlcG1vZGUgaW4KKyAgICBnY2MpCisgICAgICAjIFRoaXMgZGVwbW9kZSBjYXVzZXMgYSBjb21waWxlciByYWNlIGluIHVuaXZlcnNhbCBtb2RlLgorICAgICAgdGVzdCAiJGFtX191bml2ZXJzYWwiID0gZmFsc2UgfHwgY29udGludWUKKyAgICAgIDs7CisgICAgbm9zaWRlZWZmZWN0KQorICAgICAgIyBBZnRlciB0aGlzIHRhZywgbWVjaGFuaXNtcyBhcmUgbm90IGJ5IHNpZGUtZWZmZWN0LCBzbyB0aGV5J2xsCisgICAgICAjIG9ubHkgYmUgdXNlZCB3aGVuIGV4cGxpY2l0bHkgcmVxdWVzdGVkLgorICAgICAgaWYgdGVzdCAieCRlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZyIgPSB4eWVzOyB0aGVuCisJY29udGludWUKKyAgICAgIGVsc2UKKwlicmVhaworICAgICAgZmkKKyAgICAgIDs7CisgICAgbXN2YzcgfCBtc3ZjN21zeXMgfCBtc3Zpc3VhbGNwcCB8IG1zdmNtc3lzKQorICAgICAgIyBUaGlzIGNvbXBpbGVyIHdvbid0IGdyb2sgJy1jIC1vJywgYnV0IGFsc28sIHRoZSBtaW51c28gdGVzdCBoYXMKKyAgICAgICMgbm90IHJ1biB5ZXQuICBUaGVzZSBkZXBtb2RlcyBhcmUgbGF0ZSBlbm91Z2ggaW4gdGhlIGdhbWUsIGFuZAorICAgICAgIyBzbyB3ZWFrIHRoYXQgdGhlaXIgZnVuY3Rpb25pbmcgc2hvdWxkIG5vdCBiZSBpbXBhY3RlZC4KKyAgICAgIGFtX19vYmo9Y29uZnRlc3QuJHtPQkpFWFQtb30KKyAgICAgIGFtX19taW51c19vYmo9CisgICAgICA7OworICAgIG5vbmUpIGJyZWFrIDs7CisgICAgZXNhYworICAgIGlmIGRlcG1vZGU9JGRlcG1vZGUgXAorICAgICAgIHNvdXJjZT1zdWIvY29uZnRlc3QuYyBvYmplY3Q9JGFtX19vYmogXAorICAgICAgIGRlcGZpbGU9c3ViL2NvbmZ0ZXN0LlBvIHRtcGRlcGZpbGU9c3ViL2NvbmZ0ZXN0LlRQbyBcCisgICAgICAgJFNIRUxMIC4vZGVwY29tcCAkZGVwY2MgLWMgJGFtX19taW51c19vYmogc3ViL2NvbmZ0ZXN0LmMgXAorICAgICAgICAgPi9kZXYvbnVsbCAyPmNvbmZ0ZXN0LmVyciAmJgorICAgICAgIGdyZXAgc3ViL2NvbmZ0c3QxLmggc3ViL2NvbmZ0ZXN0LlBvID4gL2Rldi9udWxsIDI+JjEgJiYKKyAgICAgICBncmVwIHN1Yi9jb25mdHN0Ni5oIHN1Yi9jb25mdGVzdC5QbyA+IC9kZXYvbnVsbCAyPiYxICYmCisgICAgICAgZ3JlcCAkYW1fX29iaiBzdWIvY29uZnRlc3QuUG8gPiAvZGV2L251bGwgMj4mMSAmJgorICAgICAgICR7TUFLRS1tYWtlfSAtcyAtZiBjb25mbWYgPiAvZGV2L251bGwgMj4mMTsgdGhlbgorICAgICAgIyBpY2MgZG9lc24ndCBjaG9rZSBvbiB1bmtub3duIG9wdGlvbnMsIGl0IHdpbGwganVzdCBpc3N1ZSB3YXJuaW5ncworICAgICAgIyBvciByZW1hcmtzIChldmVuIHdpdGggLVdlcnJvcikuICBTbyB3ZSBncmVwIHN0ZGVyciBmb3IgYW55IG1lc3NhZ2UKKyAgICAgICMgdGhhdCBzYXlzIGFuIG9wdGlvbiB3YXMgaWdub3JlZCBvciBub3Qgc3VwcG9ydGVkLgorICAgICAgIyBXaGVuIGdpdmVuIC1NUCwgaWNjIDcuMCBhbmQgNy4xIGNvbXBsYWluIHRodXNseToKKyAgICAgICMgICBpY2M6IENvbW1hbmQgbGluZSB3YXJuaW5nOiBpZ25vcmluZyBvcHRpb24gJy1NJzsgbm8gYXJndW1lbnQgcmVxdWlyZWQKKyAgICAgICMgVGhlIGRpYWdub3NpcyBjaGFuZ2VkIGluIGljYyA4LjA6CisgICAgICAjICAgaWNjOiBDb21tYW5kIGxpbmUgcmVtYXJrOiBvcHRpb24gJy1NUCcgbm90IHN1cHBvcnRlZAorICAgICAgaWYgKGdyZXAgJ2lnbm9yaW5nIG9wdGlvbicgY29uZnRlc3QuZXJyIHx8CisgICAgICAgICAgZ3JlcCAnbm90IHN1cHBvcnRlZCcgY29uZnRlc3QuZXJyKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOjsgZWxzZQorICAgICAgICBhbV9jdl9DWFhfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGU9JGRlcG1vZGUKKyAgICAgICAgYnJlYWsKKyAgICAgIGZpCisgICAgZmkKKyAgZG9uZQorCisgIGNkIC4uCisgIHJtIC1yZiBjb25mdGVzdC5kaXIKK2Vsc2UKKyAgYW1fY3ZfQ1hYX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlPW5vbmUKK2ZpCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFtX2N2X0NYWF9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSIgPiY1CiskYXNfZWNobyAiJGFtX2N2X0NYWF9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSIgPiY2OyB9CitDWFhERVBNT0RFPWRlcG1vZGU9JGFtX2N2X0NYWF9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZQorCisgaWYKKyAgdGVzdCAieCRlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZyIgIT0geG5vIFwKKyAgJiYgdGVzdCAiJGFtX2N2X0NYWF9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSIgPSBnY2MzOyB0aGVuCisgIGFtX19mYXN0ZGVwQ1hYX1RSVUU9CisgIGFtX19mYXN0ZGVwQ1hYX0ZBTFNFPScjJworZWxzZQorICBhbV9fZmFzdGRlcENYWF9UUlVFPScjJworICBhbV9fZmFzdGRlcENYWF9GQUxTRT0KK2ZpCisKKwogQ0ZMQUdTPSRzYXZlX0NGTEFHUwogCiAKQEAgLTQ1NTcsOCArNTE0Miw4IEBACiAKIAogCi1tYWNyb192ZXJzaW9uPScyLjQuMicKLW1hY3JvX3JldmlzaW9uPScxLjMzMzcnCittYWNyb192ZXJzaW9uPScyLjQuMi40MTgnCittYWNyb19yZXZpc2lvbj0nMi40LjIuNDE4JwogCiAKIApAQCAtNDU3Miw3ICs1MTU3LDcgQEAKIAogCiAKLWx0bWFpbj0iJGFjX2F1eF9kaXIvbHRtYWluLnNoIgorbHRtYWluPSRhY19hdXhfZGlyL2x0bWFpbi5zaAogCiAjIEJhY2tzbGFzaGlmeSBtZXRhY2hhcmFjdGVycyB0aGF0IGFyZSBzdGlsbCBhY3RpdmUgd2l0aGluCiAjIGRvdWJsZS1xdW90ZWQgc3RyaW5ncy4KQEAgLTQ2MjEsNyArNTIwNiw3IEBACiAgICAgJEVDSE8gIiIKIH0KIAotY2FzZSAiJEVDSE8iIGluCitjYXNlICRFQ0hPIGluCiAgIHByaW50ZiopIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBwcmludGYiID4mNQogJGFzX2VjaG8gInByaW50ZiIgPiY2OyB9IDs7CiAgIHByaW50KikgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHByaW50IC1yIiA+JjUKQEAgLTQ5NDQsMTkgKzU1MjksMTkgQEAKIAogIyBDaGVjayB3aGV0aGVyIC0td2l0aC1nbnUtbGQgd2FzIGdpdmVuLgogaWYgdGVzdCAiJHt3aXRoX2dudV9sZCtzZXR9IiA9IHNldDsgdGhlbiA6Ci0gIHdpdGh2YWw9JHdpdGhfZ251X2xkOyB0ZXN0ICIkd2l0aHZhbCIgPSBubyB8fCB3aXRoX2dudV9sZD15ZXMKKyAgd2l0aHZhbD0kd2l0aF9nbnVfbGQ7IHRlc3Qgbm8gPSAiJHdpdGh2YWwiIHx8IHdpdGhfZ251X2xkPXllcwogZWxzZQogICB3aXRoX2dudV9sZD1ubwogZmkKIAogYWNfcHJvZz1sZAotaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KK2lmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCiAgICMgQ2hlY2sgaWYgZ2NjIC1wcmludC1wcm9nLW5hbWU9bGQgZ2l2ZXMgYSBwYXRoLgogICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBsZCB1c2VkIGJ5ICRDQyIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgbGQgdXNlZCBieSAkQ0MuLi4gIiA+JjY7IH0KICAgY2FzZSAkaG9zdCBpbgogICAqLSotbWluZ3cqKQotICAgICMgZ2NjIGxlYXZlcyBhIHRyYWlsaW5nIGNhcnJpYWdlIHJldHVybiB3aGljaCB1cHNldHMgbWluZ3cKKyAgICAjIGdjYyBsZWF2ZXMgYSB0cmFpbGluZyBjYXJyaWFnZSByZXR1cm4sIHdoaWNoIHVwc2V0cyBtaW5ndwogICAgIGFjX3Byb2c9YCgkQ0MgLXByaW50LXByb2ctbmFtZT1sZCkgMj4mNSB8IHRyIC1kICdcMDE1J2AgOzsKICAgKikKICAgICBhY19wcm9nPWAoJENDIC1wcmludC1wcm9nLW5hbWU9bGQpIDI+JjVgIDs7CkBAIC00OTcwLDcgKzU1NTUsNyBAQAogICAgICAgd2hpbGUgJEVDSE8gIiRhY19wcm9nIiB8ICRHUkVQICIkcmVfZGlyZWx0IiA+IC9kZXYvbnVsbCAyPiYxOyBkbwogCWFjX3Byb2c9YCRFQ0hPICRhY19wcm9nfCAkU0VEICJzJSRyZV9kaXJlbHQlLyUiYAogICAgICAgZG9uZQotICAgICAgdGVzdCAteiAiJExEIiAmJiBMRD0iJGFjX3Byb2ciCisgICAgICB0ZXN0IC16ICIkTEQiICYmIExEPSRhY19wcm9nCiAgICAgICA7OwogICAiIikKICAgICAjIElmIGl0IGZhaWxzLCB0aGVuIHByZXRlbmQgd2UgYXJlbid0IHVzaW5nIEdDQy4KQEAgLTQ5ODEsNyArNTU2Niw3IEBACiAgICAgd2l0aF9nbnVfbGQ9dW5rbm93bgogICAgIDs7CiAgIGVzYWMKLWVsaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorZWxpZiB0ZXN0IHllcyA9ICIkd2l0aF9nbnVfbGQiOyB0aGVuCiAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIEdOVSBsZCIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgR05VIGxkLi4uICIgPiY2OyB9CiBlbHNlCkBAIC00OTkyLDMyICs1NTc3LDMyIEBACiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGlmIHRlc3QgLXogIiRMRCI7IHRoZW4KLSAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisgIGx0X3NhdmVfaWZzPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKICAgZm9yIGFjX2RpciBpbiAkUEFUSDsgZG8KLSAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgICBJRlM9JGx0X3NhdmVfaWZzCiAgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KICAgICBpZiB0ZXN0IC1mICIkYWNfZGlyLyRhY19wcm9nIiB8fCB0ZXN0IC1mICIkYWNfZGlyLyRhY19wcm9nJGFjX2V4ZWV4dCI7IHRoZW4KLSAgICAgIGx0X2N2X3BhdGhfTEQ9IiRhY19kaXIvJGFjX3Byb2ciCisgICAgICBsdF9jdl9wYXRoX0xEPSRhY19kaXIvJGFjX3Byb2cKICAgICAgICMgQ2hlY2sgdG8gc2VlIGlmIHRoZSBwcm9ncmFtIGlzIEdOVSBsZC4gIEknZCByYXRoZXIgdXNlIC0tdmVyc2lvbiwKICAgICAgICMgYnV0IGFwcGFyZW50bHkgc29tZSB2YXJpYW50cyBvZiBHTlUgbGQgb25seSBhY2NlcHQgLXYuCiAgICAgICAjIEJyZWFrIG9ubHkgaWYgaXQgd2FzIHRoZSBHTlUvbm9uLUdOVSBsZCB0aGF0IHdlIHByZWZlci4KICAgICAgIGNhc2UgYCIkbHRfY3ZfcGF0aF9MRCIgLXYgMj4mMSA8L2Rldi9udWxsYCBpbgogICAgICAgKkdOVSogfCAqJ3dpdGggQkZEJyopCi0JdGVzdCAiJHdpdGhfZ251X2xkIiAhPSBubyAmJiBicmVhaworCXRlc3Qgbm8gIT0gIiR3aXRoX2dudV9sZCIgJiYgYnJlYWsKIAk7OwogICAgICAgKikKLQl0ZXN0ICIkd2l0aF9nbnVfbGQiICE9IHllcyAmJiBicmVhaworCXRlc3QgeWVzICE9ICIkd2l0aF9nbnVfbGQiICYmIGJyZWFrCiAJOzsKICAgICAgIGVzYWMKICAgICBmaQogICBkb25lCi0gIElGUz0iJGx0X3NhdmVfaWZzIgorICBJRlM9JGx0X3NhdmVfaWZzCiBlbHNlCi0gIGx0X2N2X3BhdGhfTEQ9IiRMRCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIGx0X2N2X3BhdGhfTEQ9JExEICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgogZmkKIGZpCiAKLUxEPSIkbHRfY3ZfcGF0aF9MRCIKK0xEPSRsdF9jdl9wYXRoX0xECiBpZiB0ZXN0IC1uICIkTEQiOyB0aGVuCiAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTEQiID4mNQogJGFzX2VjaG8gIiRMRCIgPiY2OyB9CkBAIC01MDYwLDMzICs1NjQ1LDMzIEBACiBlbHNlCiAgIGlmIHRlc3QgLW4gIiROTSI7IHRoZW4KICAgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi0gIGx0X2N2X3BhdGhfTk09IiROTSIKKyAgbHRfY3ZfcGF0aF9OTT0kTk0KIGVsc2UKLSAgbHRfbm1fdG9fY2hlY2s9IiR7YWNfdG9vbF9wcmVmaXh9bm0iCisgIGx0X25tX3RvX2NoZWNrPSR7YWNfdG9vbF9wcmVmaXh9bm0KICAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IiAmJiB0ZXN0ICIkYnVpbGQiID0gIiRob3N0IjsgdGhlbgogICAgIGx0X25tX3RvX2NoZWNrPSIkbHRfbm1fdG9fY2hlY2sgbm0iCiAgIGZpCiAgIGZvciBsdF90bXBfbm0gaW4gJGx0X25tX3RvX2NoZWNrOyBkbwotICAgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSRQQVRIX1NFUEFSQVRPUgorICAgIGx0X3NhdmVfaWZzPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKICAgICBmb3IgYWNfZGlyIGluICRQQVRIIC91c3IvY2NzL2Jpbi9lbGYgL3Vzci9jY3MvYmluIC91c3IvdWNiIC9iaW47IGRvCi0gICAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgICAgIElGUz0kbHRfc2F2ZV9pZnMKICAgICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCi0gICAgICB0bXBfbm09IiRhY19kaXIvJGx0X3RtcF9ubSIKLSAgICAgIGlmIHRlc3QgLWYgIiR0bXBfbm0iIHx8IHRlc3QgLWYgIiR0bXBfbm0kYWNfZXhlZXh0IiA7IHRoZW4KKyAgICAgIHRtcF9ubT0kYWNfZGlyLyRsdF90bXBfbm0KKyAgICAgIGlmIHRlc3QgLWYgIiR0bXBfbm0iIHx8IHRlc3QgLWYgIiR0bXBfbm0kYWNfZXhlZXh0IjsgdGhlbgogCSMgQ2hlY2sgdG8gc2VlIGlmIHRoZSBubSBhY2NlcHRzIGEgQlNELWNvbXBhdCBmbGFnLgotCSMgQWRkaW5nIHRoZSBgc2VkIDFxJyBwcmV2ZW50cyBmYWxzZSBwb3NpdGl2ZXMgb24gSFAtVVgsIHdoaWNoIHNheXM6CisJIyBBZGRpbmcgdGhlICdzZWQgMXEnIHByZXZlbnRzIGZhbHNlIHBvc2l0aXZlcyBvbiBIUC1VWCwgd2hpY2ggc2F5czoKIAkjICAgbm06IHVua25vd24gb3B0aW9uICJCIiBpZ25vcmVkCiAJIyBUcnU2NCdzIG5tIGNvbXBsYWlucyB0aGF0IC9kZXYvbnVsbCBpcyBhbiBpbnZhbGlkIG9iamVjdCBmaWxlCiAJY2FzZSBgIiR0bXBfbm0iIC1CIC9kZXYvbnVsbCAyPiYxIHwgc2VkICcxcSdgIGluCiAJKi9kZXYvbnVsbCogfCAqJ0ludmFsaWQgZmlsZSBvciBvYmplY3QgdHlwZScqKQogCSAgbHRfY3ZfcGF0aF9OTT0iJHRtcF9ubSAtQiIKLQkgIGJyZWFrCisJICBicmVhayAyCiAJICA7OwogCSopCiAJICBjYXNlIGAiJHRtcF9ubSIgLXAgL2Rldi9udWxsIDI+JjEgfCBzZWQgJzFxJ2AgaW4KIAkgICovZGV2L251bGwqKQogCSAgICBsdF9jdl9wYXRoX05NPSIkdG1wX25tIC1wIgotCSAgICBicmVhaworCSAgICBicmVhayAyCiAJICAgIDs7CiAJICAqKQogCSAgICBsdF9jdl9wYXRoX05NPSR7bHRfY3ZfcGF0aF9OTT0iJHRtcF9ubSJ9ICMga2VlcCB0aGUgZmlyc3QgbWF0Y2gsIGJ1dApAQCAtNTA5NywxNSArNTY4MiwxNSBAQAogCWVzYWMKICAgICAgIGZpCiAgICAgZG9uZQotICAgIElGUz0iJGx0X3NhdmVfaWZzIgorICAgIElGUz0kbHRfc2F2ZV9pZnMKICAgZG9uZQogICA6ICR7bHRfY3ZfcGF0aF9OTT1ub30KIGZpCiBmaQogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wYXRoX05NIiA+JjUKICRhc19lY2hvICIkbHRfY3ZfcGF0aF9OTSIgPiY2OyB9Ci1pZiB0ZXN0ICIkbHRfY3ZfcGF0aF9OTSIgIT0gIm5vIjsgdGhlbgotICBOTT0iJGx0X2N2X3BhdGhfTk0iCitpZiB0ZXN0IG5vICE9ICIkbHRfY3ZfcGF0aF9OTSI7IHRoZW4KKyAgTk09JGx0X2N2X3BhdGhfTk0KIGVsc2UKICAgIyBEaWRuJ3QgZmluZCBhbnkgQlNEIGNvbXBhdGlibGUgbmFtZSBsaXN0ZXIsIGxvb2sgZm9yIGR1bXBiaW4uCiAgIGlmIHRlc3QgLW4gIiREVU1QQklOIjsgdGhlbiA6CkBAIC01MjExLDkgKzU3OTYsOSBAQAogICBmaQogZmkKIAotICAgIGNhc2UgYCREVU1QQklOIC1zeW1ib2xzIC9kZXYvbnVsbCAyPiYxIHwgc2VkICcxcSdgIGluCisgICAgY2FzZSBgJERVTVBCSU4gLXN5bWJvbHMgLWhlYWRlcnMgL2Rldi9udWxsIDI+JjEgfCBzZWQgJzFxJ2AgaW4KICAgICAqQ09GRiopCi0gICAgICBEVU1QQklOPSIkRFVNUEJJTiAtc3ltYm9scyIKKyAgICAgIERVTVBCSU49IiREVU1QQklOIC1zeW1ib2xzIC1oZWFkZXJzIgogICAgICAgOzsKICAgICAqKQogICAgICAgRFVNUEJJTj06CkBAIC01MjIxLDggKzU4MDYsOCBAQAogICAgIGVzYWMKICAgZmkKIAotICBpZiB0ZXN0ICIkRFVNUEJJTiIgIT0gIjoiOyB0aGVuCi0gICAgTk09IiREVU1QQklOIgorICBpZiB0ZXN0IDogIT0gIiREVU1QQklOIjsgdGhlbgorICAgIE5NPSREVU1QQklOCiAgIGZpCiBmaQogdGVzdCAteiAiJE5NIiAmJiBOTT1ubQpAQCAtNTI3Myw3ICs1ODU4LDcgQEAKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgICBpPTAKLSAgdGVzdHN0cmluZz0iQUJDRCIKKyAgdGVzdHN0cmluZz1BQkNECiAKICAgY2FzZSAkYnVpbGRfb3MgaW4KICAgbXNkb3NkamdwcCopCkBAIC01MzEzLDcgKzU4OTgsNyBAQAogICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj04MTkyOwogICAgIDs7CiAKLSAgbmV0YnNkKiB8IGZyZWVic2QqIHwgb3BlbmJzZCogfCBkYXJ3aW4qIHwgZHJhZ29uZmx5KikKKyAgYml0cmlnKiB8IGRhcndpbiogfCBkcmFnb25mbHkqIHwgZnJlZWJzZCogfCBuZXRic2QqIHwgb3BlbmJzZCopCiAgICAgIyBUaGlzIGhhcyBiZWVuIGFyb3VuZCBzaW5jZSAzODZCU0QsIGF0IGxlYXN0LiAgTGlrZWx5IGZ1cnRoZXIuCiAgICAgaWYgdGVzdCAteCAvc2Jpbi9zeXNjdGw7IHRoZW4KICAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gL3NiaW4vc3lzY3RsIC1uIGtlcm4uYXJnbWF4YApAQCAtNTM2NCwyMiArNTk0OSwyMiBAQAogICAqKQogICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gKGdldGNvbmYgQVJHX01BWCkgMj4gL2Rldi9udWxsYAogICAgIGlmIHRlc3QgLW4gIiRsdF9jdl9zeXNfbWF4X2NtZF9sZW4iICYmIFwKLSAgICAgIHRlc3QgdW5kZWZpbmVkICE9ICIkbHRfY3Zfc3lzX21heF9jbWRfbGVuIjsgdGhlbgorICAgICAgIHRlc3QgdW5kZWZpbmVkICE9ICIkbHRfY3Zfc3lzX21heF9jbWRfbGVuIjsgdGhlbgogICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXC8gNGAKICAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwqIDNgCiAgICAgZWxzZQogICAgICAgIyBNYWtlIHRlc3RzdHJpbmcgYSBsaXR0bGUgYmlnZ2VyIGJlZm9yZSB3ZSBkbyBhbnl0aGluZyB3aXRoIGl0LgogICAgICAgIyBhIDFLIHN0cmluZyBzaG91bGQgYmUgYSByZWFzb25hYmxlIHN0YXJ0LgotICAgICAgZm9yIGkgaW4gMSAyIDMgNCA1IDYgNyA4IDsgZG8KKyAgICAgIGZvciBpIGluIDEgMiAzIDQgNSA2IDcgODsgZG8KICAgICAgICAgdGVzdHN0cmluZz0kdGVzdHN0cmluZyR0ZXN0c3RyaW5nCiAgICAgICBkb25lCiAgICAgICBTSEVMTD0ke1NIRUxMLSR7Q09ORklHX1NIRUxMLS9iaW4vc2h9fQogICAgICAgIyBJZiB0ZXN0IGlzIG5vdCBhIHNoZWxsIGJ1aWx0LWluLCB3ZSdsbCBwcm9iYWJseSBlbmQgdXAgY29tcHV0aW5nIGEKICAgICAgICMgbWF4aW11bSBsZW5ndGggdGhhdCBpcyBvbmx5IGhhbGYgb2YgdGhlIGFjdHVhbCBtYXhpbXVtIGxlbmd0aCwgYnV0CiAgICAgICAjIHdlIGNhbid0IHRlbGwuCi0gICAgICB3aGlsZSB7IHRlc3QgIlgiYGVudiBlY2hvICIkdGVzdHN0cmluZyR0ZXN0c3RyaW5nIiAyPi9kZXYvbnVsbGAgXAorICAgICAgd2hpbGUgeyB0ZXN0IFhgZW52IGVjaG8gIiR0ZXN0c3RyaW5nJHRlc3RzdHJpbmciIDI+L2Rldi9udWxsYCBcCiAJICAgICAgICAgPSAiWCR0ZXN0c3RyaW5nJHRlc3RzdHJpbmciOyB9ID4vZGV2L251bGwgMj4mMSAmJgotCSAgICAgIHRlc3QgJGkgIT0gMTcgIyAxLzIgTUIgc2hvdWxkIGJlIGVub3VnaAorCSAgICAgIHRlc3QgMTcgIT0gIiRpIiAjIDEvMiBNQiBzaG91bGQgYmUgZW5vdWdoCiAgICAgICBkbwogICAgICAgICBpPWBleHByICRpICsgMWAKICAgICAgICAgdGVzdHN0cmluZz0kdGVzdHN0cmluZyR0ZXN0c3RyaW5nCkBAIC01Mzk3LDcgKzU5ODIsNyBAQAogCiBmaQogCi1pZiB0ZXN0IC1uICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gOyB0aGVuCitpZiB0ZXN0IC1uICIkbHRfY3Zfc3lzX21heF9jbWRfbGVuIjsgdGhlbgogICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3N5c19tYXhfY21kX2xlbiIgPiY1CiAkYXNfZWNobyAiJGx0X2N2X3N5c19tYXhfY21kX2xlbiIgPiY2OyB9CiBlbHNlCkBAIC01NDE1LDMwICs2MDAwLDYgQEAKIDogJHtNVj0ibXYgLWYifQogOiAke1JNPSJybSAtZiJ9CiAKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgc2hlbGwgdW5kZXJzdGFuZHMgc29tZSBYU0kgY29uc3RydWN0cyIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSBzaGVsbCB1bmRlcnN0YW5kcyBzb21lIFhTSSBjb25zdHJ1Y3RzLi4uICIgPiY2OyB9Ci0jIFRyeSBzb21lIFhTSSBmZWF0dXJlcwoteHNpX3NoZWxsPW5vCi0oIF9sdF9kdW1teT0iYS9iL2MiCi0gIHRlc3QgIiR7X2x0X2R1bW15IyMqL30sJHtfbHRfZHVtbXklLyp9LCR7X2x0X2R1bW15Iz8/fSIke19sdF9kdW1teSUiJF9sdF9kdW1teSJ9LCBcCi0gICAgICA9IGMsYS9iLGIvYywgXAotICAgICYmIGV2YWwgJ3Rlc3QgJCgoIDEgKyAxICkpIC1lcSAyIFwKLSAgICAmJiB0ZXN0ICIkeyNfbHRfZHVtbXl9IiAtZXEgNScgKSA+L2Rldi9udWxsIDI+JjEgXAotICAmJiB4c2lfc2hlbGw9eWVzCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHhzaV9zaGVsbCIgPiY1Ci0kYXNfZWNobyAiJHhzaV9zaGVsbCIgPiY2OyB9Ci0KLQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRoZSBzaGVsbCB1bmRlcnN0YW5kcyBcIis9XCIiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgc2hlbGwgdW5kZXJzdGFuZHMgXCIrPVwiLi4uICIgPiY2OyB9Ci1sdF9zaGVsbF9hcHBlbmQ9bm8KLSggZm9vPWJhcjsgc2V0IGZvbyBiYXo7IGV2YWwgIiQxKz1cJDIiICYmIHRlc3QgIiRmb28iID0gYmFyYmF6ICkgXAotICAgID4vZGV2L251bGwgMj4mMSBcCi0gICYmIGx0X3NoZWxsX2FwcGVuZD15ZXMKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfc2hlbGxfYXBwZW5kIiA+JjUKLSRhc19lY2hvICIkbHRfc2hlbGxfYXBwZW5kIiA+JjY7IH0KLQotCiBpZiAoIChNQUlMPTYwOyB1bnNldCBNQUlMKSB8fCBleGl0KSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KICAgbHRfdW5zZXQ9dW5zZXQKIGVsc2UKQEAgLTU1NjEsMTMgKzYxMjIsMTMgQEAKIHJlbG9hZF9jbWRzPSckTEQkcmVsb2FkX2ZsYWcgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKIGNhc2UgJGhvc3Rfb3MgaW4KICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQotICAgIGlmIHRlc3QgIiRHQ0MiICE9IHllczsgdGhlbgorICAgIGlmIHRlc3QgeWVzICE9ICIkR0NDIjsgdGhlbgogICAgICAgcmVsb2FkX2NtZHM9ZmFsc2UKICAgICBmaQogICAgIDs7CiAgIGRhcndpbiopCi0gICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLSAgICAgIHJlbG9hZF9jbWRzPSckTFRDQyAkTFRDRkxBR1MgLW5vc3RkbGliICR7d2x9LXIgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKKyAgICBpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgorICAgICAgcmVsb2FkX2NtZHM9JyRMVENDICRMVENGTEFHUyAtbm9zdGRsaWIgJHdsLXIgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKICAgICBlbHNlCiAgICAgICByZWxvYWRfY21kcz0nJExEJHJlbG9hZF9mbGFnIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCiAgICAgZmkKQEAgLTU2OTUsMTMgKzYyNTYsMTMgQEAKICMgTmVlZCB0byBzZXQgdGhlIHByZWNlZGluZyB2YXJpYWJsZSBvbiBhbGwgcGxhdGZvcm1zIHRoYXQgc3VwcG9ydAogIyBpbnRlcmxpYnJhcnkgZGVwZW5kZW5jaWVzLgogIyAnbm9uZScgLS0gZGVwZW5kZW5jaWVzIG5vdCBzdXBwb3J0ZWQuCi0jIGB1bmtub3duJyAtLSBzYW1lIGFzIG5vbmUsIGJ1dCBkb2N1bWVudHMgdGhhdCB3ZSByZWFsbHkgZG9uJ3Qga25vdy4KKyMgJ3Vua25vd24nIC0tIHNhbWUgYXMgbm9uZSwgYnV0IGRvY3VtZW50cyB0aGF0IHdlIHJlYWxseSBkb24ndCBrbm93LgogIyAncGFzc19hbGwnIC0tIGFsbCBkZXBlbmRlbmNpZXMgcGFzc2VkIHdpdGggbm8gY2hlY2tzLgogIyAndGVzdF9jb21waWxlJyAtLSBjaGVjayBieSBtYWtpbmcgdGVzdCBwcm9ncmFtLgogIyAnZmlsZV9tYWdpYyBbW3JlZ2V4XV0nIC0tIGNoZWNrIGJ5IGxvb2tpbmcgZm9yIGZpbGVzIGluIGxpYnJhcnkgcGF0aAotIyB3aGljaCByZXNwb25kcyB0byB0aGUgJGZpbGVfbWFnaWNfY21kIHdpdGggYSBnaXZlbiBleHRlbmRlZCByZWdleC4KLSMgSWYgeW91IGhhdmUgYGZpbGUnIG9yIGVxdWl2YWxlbnQgb24geW91ciBzeXN0ZW0gYW5kIHlvdSdyZSBub3Qgc3VyZQotIyB3aGV0aGVyIGBwYXNzX2FsbCcgd2lsbCAqYWx3YXlzKiB3b3JrLCB5b3UgcHJvYmFibHkgd2FudCB0aGlzIG9uZS4KKyMgdGhhdCByZXNwb25kcyB0byB0aGUgJGZpbGVfbWFnaWNfY21kIHdpdGggYSBnaXZlbiBleHRlbmRlZCByZWdleC4KKyMgSWYgeW91IGhhdmUgJ2ZpbGUnIG9yIGVxdWl2YWxlbnQgb24geW91ciBzeXN0ZW0gYW5kIHlvdSdyZSBub3Qgc3VyZQorIyB3aGV0aGVyICdwYXNzX2FsbCcgd2lsbCAqYWx3YXlzKiB3b3JrLCB5b3UgcHJvYmFibHkgd2FudCB0aGlzIG9uZS4KIAogY2FzZSAkaG9zdF9vcyBpbgogYWl4WzQtOV0qKQpAQCAtNTcyOCw4ICs2Mjg5LDcgQEAKICAgIyBCYXNlIE1TWVMvTWluR1cgZG8gbm90IHByb3ZpZGUgdGhlICdmaWxlJyBjb21tYW5kIG5lZWRlZCBieQogICAjIGZ1bmNfd2luMzJfbGliaWQgc2hlbGwgZnVuY3Rpb24sIHNvIHVzZSBhIHdlYWtlciB0ZXN0IGJhc2VkIG9uICdvYmpkdW1wJywKICAgIyB1bmxlc3Mgd2UgZmluZCAnZmlsZScsIGZvciBleGFtcGxlIGJlY2F1c2Ugd2UgYXJlIGNyb3NzLWNvbXBpbGluZy4KLSAgIyBmdW5jX3dpbjMyX2xpYmlkIGFzc3VtZXMgQlNEIG5tLCBzbyBkaXNhbGxvdyBpdCBpZiB1c2luZyBNUyBkdW1wYmluLgotICBpZiAoIHRlc3QgIiRsdF9jdl9ubV9pbnRlcmZhY2UiID0gIkJTRCBubSIgJiYgZmlsZSAvICkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIGlmICggZmlsZSAvICkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCiAgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgXng4NiBhcmNoaXZlIGltcG9ydHxeeDg2IERMTCcKICAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nZnVuY193aW4zMl9saWJpZCcKICAgZWxzZQpAQCAtNTc2NSwxMCArNjMyNSw2IEBACiAgIGZpCiAgIDs7CiAKLWdudSopCi0gIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCi0gIDs7Ci0KIGhhaWt1KikKICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKICAgOzsKQEAgLTU4MDcsNyArNjM2Myw3IEBACiAgIDs7CiAKICMgVGhpcyBtdXN0IGJlIGdsaWJjL0VMRi4KLWxpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSkKK2xpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSB8IGdudSopCiAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCiAgIDs7CiAKQEAgLTU4MjksOCArNjM4NSw4IEBACiAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCiAgIDs7CiAKLW9wZW5ic2QqKQotICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCitvcGVuYnNkKiB8IGJpdHJpZyopCisgIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX19gIjsgdGhlbgogICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbXi9dKyhcLnNvXC5bMC05XStcLlswLTldK3xcLnNvfF9waWNcLmEpJCcKICAgZWxzZQogICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbXi9dKyhcLnNvXC5bMC05XStcLlswLTldK3xfcGljXC5hKSQnCkBAIC02MDQwLDggKzY1OTYsOCBAQAogCiBjYXNlICRob3N0X29zIGluCiBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCi0gICMgdHdvIGRpZmZlcmVudCBzaGVsbCBmdW5jdGlvbnMgZGVmaW5lZCBpbiBsdG1haW4uc2gKLSAgIyBkZWNpZGUgd2hpY2ggdG8gdXNlIGJhc2VkIG9uIGNhcGFiaWxpdGllcyBvZiAkRExMVE9PTAorICAjIHR3byBkaWZmZXJlbnQgc2hlbGwgZnVuY3Rpb25zIGRlZmluZWQgaW4gbHRtYWluLnNoOworICAjIGRlY2lkZSB3aGljaCBvbmUgdG8gdXNlIGJhc2VkIG9uIGNhcGFiaWxpdGllcyBvZiAkRExMVE9PTAogICBjYXNlIGAkRExMVE9PTCAtLWhlbHAgMj4mMWAgaW4KICAgKi0taWRlbnRpZnktc3RyaWN0KikKICAgICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD1mdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWIKQEAgLTYwNTMsNyArNjYwOSw3IEBACiAgIDs7CiAqKQogICAjIGZhbGxiYWNrOiBhc3N1bWUgbGlua2xpYiBJUyBzaGFyZWRsaWIKLSAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9IiRFQ0hPIgorICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0kRUNITwogICA7OwogZXNhYwogCkBAIC02MjA4LDcgKzY3NjQsNyBAQAogICBhY19zdGF0dXM9JD8KICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CiAgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0KLSAgICAgIGlmIHRlc3QgIiRhY19zdGF0dXMiIC1lcSAwOyB0aGVuCisgICAgICBpZiB0ZXN0IDAgLWVxICIkYWNfc3RhdHVzIjsgdGhlbgogCSMgRW5zdXJlIHRoZSBhcmNoaXZlciBmYWlscyB1cG9uIGJvZ3VzIGZpbGUgbmFtZXMuCiAJcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBsaWJjb25mdGVzdC5hCiAJeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGx0X2FyX3RyeVwiIjsgfSA+JjUKQEAgLTYyMTYsNyArNjc3Miw3IEBACiAgIGFjX3N0YXR1cz0kPwogICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKICAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfQotCWlmIHRlc3QgIiRhY19zdGF0dXMiIC1uZSAwOyB0aGVuCisJaWYgdGVzdCAwIC1uZSAiJGFjX3N0YXR1cyI7IHRoZW4KICAgICAgICAgICBsdF9jdl9hcl9hdF9maWxlPUAKICAgICAgICAgZmkKICAgICAgIGZpCkBAIC02MjI5LDcgKzY3ODUsNyBAQAogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9hcl9hdF9maWxlIiA+JjUKICRhc19lY2hvICIkbHRfY3ZfYXJfYXRfZmlsZSIgPiY2OyB9CiAKLWlmIHRlc3QgIngkbHRfY3ZfYXJfYXRfZmlsZSIgPSB4bm87IHRoZW4KK2lmIHRlc3Qgbm8gPSAiJGx0X2N2X2FyX2F0X2ZpbGUiOyB0aGVuCiAgIGFyY2hpdmVyX2xpc3Rfc3BlYz0KIGVsc2UKICAgYXJjaGl2ZXJfbGlzdF9zcGVjPSRsdF9jdl9hcl9hdF9maWxlCkBAIC02NDQ2LDcgKzcwMDIsNyBAQAogCiBpZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgogICBjYXNlICRob3N0X29zIGluCi0gIG9wZW5ic2QqKQorICBiaXRyaWcqIHwgb3BlbmJzZCopCiAgICAgb2xkX3Bvc3RpbnN0YWxsX2NtZHM9IiRvbGRfcG9zdGluc3RhbGxfY21kc35cJFJBTkxJQiAtdCBcJHRvb2xfb2xkbGliIgogICAgIDs7CiAgICopCkBAIC02NTM2LDcgKzcwOTIsNyBAQAogICBzeW1jb2RlPSdbQUJDREdJU1RXXScKICAgOzsKIGhwdXgqKQotICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorICBpZiB0ZXN0IGlhNjQgPSAiJGhvc3RfY3B1IjsgdGhlbgogICAgIHN5bWNvZGU9J1tBQkNERUdSU1RdJwogICBmaQogICA7OwpAQCAtNjU2OSwxNCArNzEyNSw0NCBAQAogICBzeW1jb2RlPSdbQUJDREdJUlNUV10nIDs7CiBlc2FjCiAKK2lmIHRlc3QgIiRsdF9jdl9ubV9pbnRlcmZhY2UiID0gIk1TIGR1bXBiaW4iOyB0aGVuCisgICMgR2V0cyBsaXN0IG9mIGRhdGEgc3ltYm9scyB0byBpbXBvcnQuCisgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2ltcG9ydD0ic2VkIC1uIC1lICdzL15JIC4qIFwoLipcKSQvXDEvcCciCisgICMgQWRqdXN0IHRoZSBiZWxvdyBnbG9iYWwgc3ltYm9sIHRyYW5zZm9ybXMgdG8gZml4dXAgaW1wb3J0ZWQgdmFyaWFibGVzLgorICBsdF9jZGVjbF9ob29rPSIgLWUgJ3MvXkkgLiogXCguKlwpJC9leHRlcm4gX19kZWNsc3BlYyhkbGxpbXBvcnQpIGNoYXIgXDE7L3AnIgorICBsdF9jX25hbWVfaG9vaz0iIC1lICdzL15JIC4qIFwoLipcKSQvICB7XCJcMVwiLCAodm9pZCAqKSAwfSwvcCciCisgIGx0X2NfbmFtZV9saWJfaG9vaz0iXAorICAtZSAncy9eSSAuKiBcKGxpYi4qXCkkLyAge1wiXDFcIiwgKHZvaWQgKikgMH0sL3AnXAorICAtZSAncy9eSSAuKiBcKC4qXCkkLyAge1wibGliXDFcIiwgKHZvaWQgKikgMH0sL3AnIgorZWxzZQorICAjIERpc2FibGUgaG9va3MgYnkgZGVmYXVsdC4KKyAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9faW1wb3J0PQorICBsdF9jZGVjbF9ob29rPQorICBsdF9jX25hbWVfaG9vaz0KKyAgbHRfY19uYW1lX2xpYl9ob29rPQorZmkKKwogIyBUcmFuc2Zvcm0gYW4gZXh0cmFjdGVkIHN5bWJvbCBsaW5lIGludG8gYSBwcm9wZXIgQyBkZWNsYXJhdGlvbi4KICMgU29tZSBzeXN0ZW1zIChlc3AuIG9uIGlhNjQpIGxpbmsgZGF0YSBhbmQgY29kZSBzeW1ib2xzIGRpZmZlcmVudGx5LAogIyBzbyB1c2UgdGhpcyBnZW5lcmFsIGFwcHJvYWNoLgotbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9InNlZCAtbiAtZSAncy9eVCAuKiBcKC4qXCkkL2V4dGVybiBpbnQgXDEoKTsvcCcgLWUgJ3MvXiRzeW1jb2RlKiAuKiBcKC4qXCkkL2V4dGVybiBjaGFyIFwxOy9wJyIKK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSJzZWQgLW4iXAorJGx0X2NkZWNsX2hvb2tcCisiIC1lICdzL15UIC4qIFwoLipcKSQvZXh0ZXJuIGludCBcMSgpOy9wJyJcCisiIC1lICdzL14kc3ltY29kZSRzeW1jb2RlKiAuKiBcKC4qXCkkL2V4dGVybiBjaGFyIFwxOy9wJyIKIAogIyBUcmFuc2Zvcm0gYW4gZXh0cmFjdGVkIHN5bWJvbCBsaW5lIGludG8gc3ltYm9sIG5hbWUgYW5kIHN5bWJvbCBhZGRyZXNzCi1sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0ic2VkIC1uIC1lICdzL146IFwoW14gXSpcKVsgXSokLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKFteIF0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgotbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0ic2VkIC1uIC1lICdzL146IFwoW14gXSpcKVsgXSokLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKGxpYlteIF0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwoW14gXSpcKSQvICB7XCJsaWJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0ic2VkIC1uIlwKKyRsdF9jX25hbWVfaG9va1wKKyIgLWUgJ3MvXjogXCguKlwpIC4qJC8gIHtcIlwxXCIsICh2b2lkICopIDB9LC9wJyJcCisiIC1lICdzL14kc3ltY29kZSRzeW1jb2RlKiAuKiBcKC4qXCkkLyAge1wiXDFcIiwgKHZvaWQgKikgXCZcMX0sL3AnIgorCisjIFRyYW5zZm9ybSBhbiBleHRyYWN0ZWQgc3ltYm9sIGxpbmUgaW50byBzeW1ib2wgbmFtZSB3aXRoIGxpYiBwcmVmaXggYW5kCisjIHN5bWJvbCBhZGRyZXNzLgorbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0ic2VkIC1uIlwKKyRsdF9jX25hbWVfbGliX2hvb2tcCisiIC1lICdzL146IFwoLipcKSAuKiQvICB7XCJcMVwiLCAodm9pZCAqKSAwfSwvcCciXAorIiAtZSAncy9eJHN5bWNvZGUkc3ltY29kZSogLiogXChsaWIuKlwpJC8gIHtcIlwxXCIsICh2b2lkICopIFwmXDF9LC9wJyJcCisiIC1lICdzL14kc3ltY29kZSRzeW1jb2RlKiAuKiBcKC4qXCkkLyAge1wibGliXDFcIiwgKHZvaWQgKikgXCZcMX0sL3AnIgogCiAjIEhhbmRsZSBDUkxGIGluIG1pbmd3IHRvb2wgY2hhaW4KIG9wdF9jcj0KQEAgLTY1OTQsMjEgKzcxODAsMjQgQEAKIAogICAjIFdyaXRlIHRoZSByYXcgYW5kIEMgaWRlbnRpZmllcnMuCiAgIGlmIHRlc3QgIiRsdF9jdl9ubV9pbnRlcmZhY2UiID0gIk1TIGR1bXBiaW4iOyB0aGVuCi0gICAgIyBGYWtlIGl0IGZvciBkdW1wYmluIGFuZCBzYXkgVCBmb3IgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb24KLSAgICAjIGFuZCBEIGZvciBhbnkgZ2xvYmFsIHZhcmlhYmxlLgorICAgICMgRmFrZSBpdCBmb3IgZHVtcGJpbiBhbmQgc2F5IFQgZm9yIGFueSBub24tc3RhdGljIGZ1bmN0aW9uLAorICAgICMgRCBmb3IgYW55IGdsb2JhbCB2YXJpYWJsZSBhbmQgSSBmb3IgYW55IGltcG9ydGVkIHZhcmlhYmxlLgogICAgICMgQWxzbyBmaW5kIEMrKyBhbmQgX19mYXN0Y2FsbCBzeW1ib2xzIGZyb20gTVNWQysrLAogICAgICMgd2hpY2ggc3RhcnQgd2l0aCBAIG9yID8uCiAgICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0iJEFXSyAnIlwKICIgICAgIHtsYXN0X3NlY3Rpb249c2VjdGlvbjsgc2VjdGlvbj1cJCAzfTsiXAogIiAgICAgL15DT0ZGIFNZTUJPTCBUQUJMRS97Zm9yKGkgaW4gaGlkZSkgZGVsZXRlIGhpZGVbaV19OyJcCiAiICAgICAvU2VjdGlvbiBsZW5ndGggLiojcmVsb2NzLioocGljayBhbnkpL3toaWRlW2xhc3Rfc2VjdGlvbl09MX07IlwKKyIgICAgIC9eICpTeW1ib2wgbmFtZSAqOiAve3NwbGl0KFwkIDAsc24sXCI6XCIpOyBzaT1zdWJzdHIoc25bMl0sMil9OyJcCisiICAgICAvXiAqVHlwZSAqOiBjb2RlL3twcmludCBcIlRcIixzaSxzdWJzdHIoc2ksbGVuZ3RoKHByZngpKX07IlwKKyIgICAgIC9eICpUeXBlICo6IGRhdGEve3ByaW50IFwiSVwiLHNpLHN1YnN0cihzaSxsZW5ndGgocHJmeCkpfTsiXAogIiAgICAgXCQgMCF+L0V4dGVybmFsICpcfC97bmV4dH07IlwKICIgICAgIC8gMCsgVU5ERUYgL3tuZXh0fTsgLyBVTkRFRiBcKFtefF1cKSooKS97bmV4dH07IlwKICIgICAgIHtpZihoaWRlW3NlY3Rpb25dKSBuZXh0fTsiXAotIiAgICAge2Y9MH07IFwkIDB+L1woXCkuKlx8L3tmPTF9OyB7cHJpbnRmIGYgPyBcIlQgXCIgOiBcIkQgXCJ9OyJcCi0iICAgICB7c3BsaXQoXCQgMCwgYSwgL1x8fFxyLyk7IHNwbGl0KGFbMl0sIHMpfTsiXAotIiAgICAgc1sxXX4vXltAP10ve3ByaW50IHNbMV0sIHNbMV07IG5leHR9OyJcCi0iICAgICBzWzFdfnByZngge3NwbGl0KHNbMV0sdCxcIkBcIik7IHByaW50IHRbMV0sIHN1YnN0cih0WzFdLGxlbmd0aChwcmZ4KSl9IlwKKyIgICAgIHtmPVwiRFwifTsgXCQgMH4vXChcKS4qXHwve2Y9XCJUXCJ9OyJcCisiICAgICB7c3BsaXQoXCQgMCxhLC9cfHxcci8pOyBzcGxpdChhWzJdLHMpfTsiXAorIiAgICAgc1sxXX4vXltAP10ve3ByaW50IGYsc1sxXSxzWzFdOyBuZXh0fTsiXAorIiAgICAgc1sxXX5wcmZ4IHtzcGxpdChzWzFdLHQsXCJAXCIpOyBwcmludCBmLHRbMV0sc3Vic3RyKHRbMV0sbGVuZ3RoKHByZngpKX0iXAogIiAgICAgJyBwcmZ4PV4kYWNfc3ltcHJmeCIKICAgZWxzZQogICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9InNlZCAtbiAtZSAncy9eLipbCSBdXCgkc3ltY29kZSRzeW1jb2RlKlwpWwkgXVsJIF0qJGFjX3N5bXByZngkc3ltcGF0JG9wdF9jciQvJHN5bXhmcm0vcCciCkBAIC02NjU2LDExICs3MjQ1LDExIEBACiAJaWYgJEdSRVAgJyBubV90ZXN0X2Z1bmMkJyAiJG5saXN0IiA+L2Rldi9udWxsOyB0aGVuCiAJICBjYXQgPDxfTFRfRU9GID4gY29uZnRlc3QuJGFjX2V4dAogLyogS2VlcCB0aGlzIGNvZGUgaW4gc3luYyBiZXR3ZWVuIGxpYnRvb2wubTQsIGx0bWFpbiwgbHRfc3lzdGVtLmgsIGFuZCB0ZXN0cy4gICovCi0jaWYgZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX19DWUdXSU5fXykgfHwgZGVmaW5lZChfV0lOMzJfV0NFKQotLyogREFUQSBpbXBvcnRzIGZyb20gRExMcyBvbiBXSU4zMiBjb24ndCBiZSBjb25zdCwgYmVjYXVzZSBydW50aW1lCisjaWYgZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX0NZR1dJTl9fIHx8IGRlZmluZWQgX1dJTjMyX1dDRQorLyogREFUQSBpbXBvcnRzIGZyb20gRExMcyBvbiBXSU4zMiBjYW4ndCBiZSBjb25zdCwgYmVjYXVzZSBydW50aW1lCiAgICByZWxvY2F0aW9ucyBhcmUgcGVyZm9ybWVkIC0tIHNlZSBsZCdzIGRvY3VtZW50YXRpb24gb24gcHNldWRvLXJlbG9jcy4gICovCiAjIGRlZmluZSBMVF9ETFNZTV9DT05TVAotI2VsaWYgZGVmaW5lZChfX29zZl9fKQorI2VsaWYgZGVmaW5lZCBfX29zZl9fCiAvKiBUaGlzIHN5c3RlbSBkb2VzIG5vdCBjb3BlIHdlbGwgd2l0aCByZWxvY2F0aW9ucyBpbiBjb25zdCBkYXRhLiAgKi8KICMgZGVmaW5lIExUX0RMU1lNX0NPTlNUCiAjZWxzZQpAQCAtNjY4Niw3ICs3Mjc1LDcgQEAKIHsKICAgeyAiQFBST0dSQU1AIiwgKHZvaWQgKikgMCB9LAogX0xUX0VPRgotCSAgJFNFRCAicy9eJHN5bWNvZGUkc3ltY29kZSogXCguKlwpIFwoLipcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvIiA8ICIkbmxpc3QiIHwgJEdSRVAgLXYgbWFpbiA+PiBjb25mdGVzdC4kYWNfZXh0CisJICAkU0VEICJzL14kc3ltY29kZSRzeW1jb2RlKiAuKiBcKC4qXCkkLyAge1wiXDFcIiwgKHZvaWQgKikgXCZcMX0sLyIgPCAiJG5saXN0IiB8ICRHUkVQIC12IG1haW4gPj4gY29uZnRlc3QuJGFjX2V4dAogCSAgY2F0IDw8XF9MVF9FT0YgPj4gY29uZnRlc3QuJGFjX2V4dAogICB7MCwgKHZvaWQgKikgMH0KIH07CkBAIC02NzA2LDEzICs3Mjk1LDEzIEBACiAJICBtdiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0c3RtLiRhY19vYmpleHQKIAkgIGx0X2dsb2JzeW1fc2F2ZV9MSUJTPSRMSUJTCiAJICBsdF9nbG9ic3ltX3NhdmVfQ0ZMQUdTPSRDRkxBR1MKLQkgIExJQlM9ImNvbmZ0c3RtLiRhY19vYmpleHQiCisJICBMSUJTPWNvbmZ0c3RtLiRhY19vYmpleHQKIAkgIENGTEFHUz0iJENGTEFHUyRsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZyIKIAkgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19saW5rXCIiOyB9ID4mNQogICAoZXZhbCAkYWNfbGluaykgMj4mNQogICBhY19zdGF0dXM9JD8KICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCiAJICAgIHBpcGVfd29ya3M9eWVzCiAJICBmaQogCSAgTElCUz0kbHRfZ2xvYnN5bV9zYXZlX0xJQlMKQEAgLTY3MzMsNyArNzMyMiw3IEBACiAgIHJtIC1yZiBjb25mdGVzdCogY29uZnRzdCoKIAogICAjIERvIG5vdCB1c2UgdGhlIGdsb2JhbF9zeW1ib2xfcGlwZSB1bmxlc3MgaXQgd29ya3MuCi0gIGlmIHRlc3QgIiRwaXBlX3dvcmtzIiA9IHllczsgdGhlbgorICBpZiB0ZXN0IHllcyA9ICIkcGlwZV93b3JrcyI7IHRoZW4KICAgICBicmVhawogICBlbHNlCiAgICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0KQEAgLTY3ODYsNiArNzM3NSwxNiBAQAogCiAKIAorCisKKworCisKKworCisKKworCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzeXNyb290IiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIGZvciBzeXNyb290Li4uICIgPiY2OyB9CiAKQEAgLTY3OTgsOSArNzM5Nyw5IEBACiAKIAogbHRfc3lzcm9vdD0KLWNhc2UgJHt3aXRoX3N5c3Jvb3R9IGluICMoCitjYXNlICR3aXRoX3N5c3Jvb3QgaW4gIygKICB5ZXMpCi0gICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgaWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KICAgICAgbHRfc3lzcm9vdD1gJENDIC0tcHJpbnQtc3lzcm9vdCAyPi9kZXYvbnVsbGAKICAgIGZpCiAgICA7OyAjKApAQCAtNjgxMCw4ICs3NDA5LDggQEAKICBub3wnJykKICAgIDs7ICMoCiAgKikKLSAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAke3dpdGhfc3lzcm9vdH0iID4mNQotJGFzX2VjaG8gIiR7d2l0aF9zeXNyb290fSIgPiY2OyB9CisgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHdpdGhfc3lzcm9vdCIgPiY1CiskYXNfZWNobyAiJHdpdGhfc3lzcm9vdCIgPiY2OyB9CiAgICBhc19mbl9lcnJvciAkPyAiVGhlIHN5c3Jvb3QgbXVzdCBiZSBhbiBhYnNvbHV0ZSBwYXRoLiIgIiRMSU5FTk8iIDUKICAgIDs7CiBlc2FjCkBAIC02ODI4LDEzICs3NDI3LDE0IEBACiAgIGVuYWJsZXZhbD0kZW5hYmxlX2xpYnRvb2xfbG9jazsKIGZpCiAKLXRlc3QgIngkZW5hYmxlX2xpYnRvb2xfbG9jayIgIT0geG5vICYmIGVuYWJsZV9saWJ0b29sX2xvY2s9eWVzCit0ZXN0IG5vID0gIiRlbmFibGVfbGlidG9vbF9sb2NrIiB8fCBlbmFibGVfbGlidG9vbF9sb2NrPXllcwogCiAjIFNvbWUgZmxhZ3MgbmVlZCB0byBiZSBwcm9wYWdhdGVkIHRvIHRoZSBjb21waWxlciBvciBsaW5rZXIgZm9yIGdvb2QKICMgbGlidG9vbCBzdXBwb3J0LgogY2FzZSAkaG9zdCBpbgogaWE2NC0qLWhwdXgqKQotICAjIEZpbmQgb3V0IHdoaWNoIEFCSSB3ZSBhcmUgdXNpbmcuCisgICMgRmluZCBvdXQgd2hhdCBBQkkgaXMgYmVpbmcgcHJvZHVjZWQgYnkgYWNfY29tcGlsZSwgYW5kIHNldCBtb2RlCisgICMgb3B0aW9ucyBhY2NvcmRpbmdseS4KICAgZWNobyAnaW50IGk7JyA+IGNvbmZ0ZXN0LiRhY19leHQKICAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2NvbXBpbGVcIiI7IH0gPiY1CiAgIChldmFsICRhY19jb21waWxlKSAyPiY1CkBAIC02ODQzLDI0ICs3NDQzLDI1IEBACiAgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KICAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0LiRhY19vYmpleHRgIGluCiAgICAgICAqRUxGLTMyKikKLQlIUFVYX0lBNjRfTU9ERT0iMzIiCisJSFBVWF9JQTY0X01PREU9MzIKIAk7OwogICAgICAgKkVMRi02NCopCi0JSFBVWF9JQTY0X01PREU9IjY0IgorCUhQVVhfSUE2NF9NT0RFPTY0CiAJOzsKICAgICBlc2FjCiAgIGZpCiAgIHJtIC1yZiBjb25mdGVzdCoKICAgOzsKICotKi1pcml4NiopCi0gICMgRmluZCBvdXQgd2hpY2ggQUJJIHdlIGFyZSB1c2luZy4KKyAgIyBGaW5kIG91dCB3aGF0IEFCSSBpcyBiZWluZyBwcm9kdWNlZCBieSBhY19jb21waWxlLCBhbmQgc2V0IGxpbmtlcgorICAjIG9wdGlvbnMgYWNjb3JkaW5nbHkuCiAgIGVjaG8gJyNsaW5lICckTElORU5PJyAiY29uZmlndXJlIicgPiBjb25mdGVzdC4kYWNfZXh0CiAgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19jb21waWxlXCIiOyB9ID4mNQogICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQogICBhY19zdGF0dXM9JD8KICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CiAgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KLSAgICBpZiB0ZXN0ICIkbHRfY3ZfcHJvZ19nbnVfbGQiID0geWVzOyB0aGVuCisgICAgaWYgdGVzdCB5ZXMgPSAiJGx0X2N2X3Byb2dfZ251X2xkIjsgdGhlbgogICAgICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC4kYWNfb2JqZXh0YCBpbgogCSozMi1iaXQqKQogCSAgTEQ9IiR7TEQtbGR9IC1tZWxmMzJic21pcCIKQEAgLTY4ODksOSArNzQ5MCw1MCBAQAogICBybSAtcmYgY29uZnRlc3QqCiAgIDs7CiAKLXg4Nl82NC0qa2ZyZWVic2QqLWdudXx4ODZfNjQtKmxpbnV4KnxwcGMqLSpsaW51eCp8cG93ZXJwYyotKmxpbnV4KnwgXAorbWlwczY0Ki0qbGludXgqKQorICAjIEZpbmQgb3V0IHdoYXQgQUJJIGlzIGJlaW5nIHByb2R1Y2VkIGJ5IGFjX2NvbXBpbGUsIGFuZCBzZXQgbGlua2VyCisgICMgb3B0aW9ucyBhY2NvcmRpbmdseS4KKyAgZWNobyAnI2xpbmUgJyRMSU5FTk8nICJjb25maWd1cmUiJyA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2NvbXBpbGVcIiI7IH0gPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgorICAgIGVtdWw9ZWxmCisgICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC4kYWNfb2JqZXh0YCBpbgorICAgICAgKjMyLWJpdCopCisJZW11bD0iJHtlbXVsfTMyIgorCTs7CisgICAgICAqNjQtYml0KikKKwllbXVsPSIke2VtdWx9NjQiCisJOzsKKyAgICBlc2FjCisgICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC4kYWNfb2JqZXh0YCBpbgorICAgICAgKk1TQiopCisJZW11bD0iJHtlbXVsfWJ0c21pcCIKKwk7OworICAgICAgKkxTQiopCisJZW11bD0iJHtlbXVsfWx0c21pcCIKKwk7OworICAgIGVzYWMKKyAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0LiRhY19vYmpleHRgIGluCisgICAgICAqTjMyKikKKwllbXVsPSIke2VtdWx9bjMyIgorCTs7CisgICAgZXNhYworICAgIExEPSIke0xELWxkfSAtbSAkZW11bCIKKyAgZmkKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICA7OworCit4ODZfNjQtKmtmcmVlYnNkKi1nbnV8eDg2XzY0LSpsaW51eCp8cG93ZXJwYyotKmxpbnV4KnwgXAogczM5MCotKmxpbnV4KnxzMzkwKi0qdHBmKnxzcGFyYyotKmxpbnV4KikKLSAgIyBGaW5kIG91dCB3aGljaCBBQkkgd2UgYXJlIHVzaW5nLgorICAjIEZpbmQgb3V0IHdoYXQgQUJJIGlzIGJlaW5nIHByb2R1Y2VkIGJ5IGFjX2NvbXBpbGUsIGFuZCBzZXQgbGlua2VyCisgICMgb3B0aW9ucyBhY2NvcmRpbmdseS4gIE5vdGUgdGhhdCB0aGUgbGlzdGVkIGNhc2VzIG9ubHkgY292ZXIgdGhlCisgICMgc2l0dWF0aW9ucyB3aGVyZSBhZGRpdGlvbmFsIGxpbmtlciBvcHRpb25zIGFyZSBuZWVkZWQgKHN1Y2ggYXMgd2hlbgorICAjIGRvaW5nIDMyLWJpdCBjb21waWxhdGlvbiBmb3IgYSBob3N0IHdoZXJlIGxkIGRlZmF1bHRzIHRvIDY0LWJpdCwgb3IKKyAgIyB2aWNlIHZlcnNhKTsgdGhlIGNvbW1vbiBjYXNlcyB3aGVyZSBubyBsaW5rZXIgb3B0aW9ucyBhcmUgbmVlZGVkIGRvCisgICMgbm90IGFwcGVhciBpbiB0aGUgbGlzdC4KICAgZWNobyAnaW50IGk7JyA+IGNvbmZ0ZXN0LiRhY19leHQKICAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2NvbXBpbGVcIiI7IH0gPiY1CiAgIChldmFsICRhY19jb21waWxlKSAyPiY1CkBAIC02OTA3LDE0ICs3NTQ5LDE3IEBACiAJICB4ODZfNjQtKmxpbnV4KikKIAkgICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC5vYCBpbgogCSAgICAgICp4ODYtNjQqKQotCSAgICAgICAgIExEPSIke0xELWxkfSAtbSBlbGYzMl94ODZfNjQiCi0JICAgICAgICAgOzsKKwkJTEQ9IiR7TEQtbGR9IC1tIGVsZjMyX3g4Nl82NCIKKwkJOzsKIAkgICAgICAqKQotCSAgICAgICAgIExEPSIke0xELWxkfSAtbSBlbGZfaTM4NiIKLQkgICAgICAgICA7OworCQlMRD0iJHtMRC1sZH0gLW0gZWxmX2kzODYiCisJCTs7CiAJICAgIGVzYWMKIAkgICAgOzsKLQkgIHBwYzY0LSpsaW51eCp8cG93ZXJwYzY0LSpsaW51eCopCisJICBwb3dlcnBjNjRsZS0qbGludXgqKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmMzJscHBjbGludXgiCisJICAgIDs7CisJICBwb3dlcnBjNjQtKmxpbnV4KikKIAkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjMycHBjbGludXgiCiAJICAgIDs7CiAJICBzMzkweC0qbGludXgqKQpAQCAtNjkzMyw3ICs3NTc4LDEwIEBACiAJICB4ODZfNjQtKmxpbnV4KikKIAkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl94ODZfNjQiCiAJICAgIDs7Ci0JICBwcGMqLSpsaW51eCp8cG93ZXJwYyotKmxpbnV4KikKKwkgIHBvd2VycGNsZS0qbGludXgqKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmNjRscHBjIgorCSAgICA7OworCSAgcG93ZXJwYy0qbGludXgqKQogCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmNjRwcGMiCiAJICAgIDs7CiAJICBzMzkwKi0qbGludXgqfHMzOTAqLSp0cGYqKQpAQCAtNjk1MSw3ICs3NTk5LDcgQEAKIAogKi0qLXNjbzMuMnY1KikKICAgIyBPbiBTQ08gT3BlblNlcnZlciA1LCB3ZSBuZWVkIC1iZWxmIHRvIGdldCBmdWxsLWZlYXR1cmVkIGJpbmFyaWVzLgotICBTQVZFX0NGTEFHUz0iJENGTEFHUyIKKyAgU0FWRV9DRkxBR1M9JENGTEFHUwogICBDRkxBR1M9IiRDRkxBR1MgLWJlbGYiCiAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgQyBjb21waWxlciBuZWVkcyAtYmVsZiIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSBDIGNvbXBpbGVyIG5lZWRzIC1iZWxmLi4uICIgPiY2OyB9CkBAIC02OTkxLDEzICs3NjM5LDE0IEBACiBmaQogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9jY19uZWVkc19iZWxmIiA+JjUKICRhc19lY2hvICIkbHRfY3ZfY2NfbmVlZHNfYmVsZiIgPiY2OyB9Ci0gIGlmIHRlc3QgeCIkbHRfY3ZfY2NfbmVlZHNfYmVsZiIgIT0geCJ5ZXMiOyB0aGVuCisgIGlmIHRlc3QgeWVzICE9ICIkbHRfY3ZfY2NfbmVlZHNfYmVsZiI7IHRoZW4KICAgICAjIHRoaXMgaXMgcHJvYmFibHkgZ2NjIDIuOC4wLCBlZ2NzIDEuMCBvciBuZXdlcjsgbm8gbmVlZCBmb3IgLWJlbGYKLSAgICBDRkxBR1M9IiRTQVZFX0NGTEFHUyIKKyAgICBDRkxBR1M9JFNBVkVfQ0ZMQUdTCiAgIGZpCiAgIDs7CiAqLSpzb2xhcmlzKikKLSAgIyBGaW5kIG91dCB3aGljaCBBQkkgd2UgYXJlIHVzaW5nLgorICAjIEZpbmQgb3V0IHdoYXQgQUJJIGlzIGJlaW5nIHByb2R1Y2VkIGJ5IGFjX2NvbXBpbGUsIGFuZCBzZXQgbGlua2VyCisgICMgb3B0aW9ucyBhY2NvcmRpbmdseS4KICAgZWNobyAnaW50IGk7JyA+IGNvbmZ0ZXN0LiRhY19leHQKICAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2NvbXBpbGVcIiI7IH0gPiY1CiAgIChldmFsICRhY19jb21waWxlKSAyPiY1CkBAIC03MDA5LDcgKzc2NTgsNyBAQAogICAgICAgY2FzZSAkbHRfY3ZfcHJvZ19nbnVfbGQgaW4KICAgICAgIHllcyopCiAgICAgICAgIGNhc2UgJGhvc3QgaW4KLSAgICAgICAgaT84Ni0qLXNvbGFyaXMqKQorICAgICAgICBpPzg2LSotc29sYXJpcyp8eDg2XzY0LSotc29sYXJpcyopCiAgICAgICAgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl94ODZfNjQiCiAgICAgICAgICAgOzsKICAgICAgICAgc3BhcmMqLSotc29sYXJpcyopCkBAIC03MDE4LDcgKzc2NjcsNyBAQAogICAgICAgICBlc2FjCiAgICAgICAgICMgR05VIGxkIDIuMjEgaW50cm9kdWNlZCBfc29sMiBlbXVsYXRpb25zLiAgVXNlIHRoZW0gaWYgYXZhaWxhYmxlLgogICAgICAgICBpZiAke0xELWxkfSAtViB8IGdyZXAgX3NvbDIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gICAgICAgICAgTEQ9IiR7TEQtbGR9X3NvbDIiCisgICAgICAgICAgTEQ9JHtMRC1sZH1fc29sMgogICAgICAgICBmaQogICAgICAgICA7OwogICAgICAgKikKQEAgLTcwMzQsNyArNzY4Myw3IEBACiAgIDs7CiBlc2FjCiAKLW5lZWRfbG9ja3M9IiRlbmFibGVfbGlidG9vbF9sb2NrIgorbmVlZF9sb2Nrcz0kZW5hYmxlX2xpYnRvb2xfbG9jawogCiBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCiAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1tdCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCkBAIC03MTQ1LDcgKzc3OTQsNyBAQAogZmkKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sIiA+JjUKICRhc19lY2hvICIkbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sIiA+JjY7IH0KLWlmIHRlc3QgIngkbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sIiAhPSB4eWVzOyB0aGVuCitpZiB0ZXN0IHllcyAhPSAiJGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCI7IHRoZW4KICAgTUFOSUZFU1RfVE9PTD06CiBmaQogCkBAIC03NjQ4LDcgKzgyOTcsNyBAQAogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kPW5vCi0gICAgICBpZiB0ZXN0IC16ICIke0xUX01VTFRJX01PRFVMRX0iOyB0aGVuCisgICAgICBpZiB0ZXN0IC16ICIkTFRfTVVMVElfTU9EVUxFIjsgdGhlbgogCSMgQnkgZGVmYXVsdCB3ZSB3aWxsIGFkZCB0aGUgLXNpbmdsZV9tb2R1bGUgZmxhZy4gWW91IGNhbiBvdmVycmlkZQogCSMgYnkgZWl0aGVyIHNldHRpbmcgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIExUX01VTFRJX01PRFVMRQogCSMgbm9uLWVtcHR5IGF0IGNvbmZpZ3VyZSB0aW1lLCBvciBieSBhZGRpbmcgLW11bHRpX21vZHVsZSB0byB0aGUKQEAgLTc2NjYsNyArODMxNSw3IEBACiAJICBjYXQgY29uZnRlc3QuZXJyID4mNQogCSMgT3RoZXJ3aXNlLCBpZiB0aGUgb3V0cHV0IHdhcyBjcmVhdGVkIHdpdGggYSAwIGV4aXQgY29kZSBmcm9tCiAJIyB0aGUgY29tcGlsZXIsIGl0IHdvcmtlZC4KLQllbGlmIHRlc3QgLWYgbGliY29uZnRlc3QuZHlsaWIgJiYgdGVzdCAkX2x0X3Jlc3VsdCAtZXEgMDsgdGhlbgorCWVsaWYgdGVzdCAtZiBsaWJjb25mdGVzdC5keWxpYiAmJiB0ZXN0IDAgPSAiJF9sdF9yZXN1bHQiOyB0aGVuCiAJICBsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kPXllcwogCWVsc2UKIAkgIGNhdCBjb25mdGVzdC5lcnIgPiY1CkBAIC03NzA1LDcgKzgzNTQsNyBAQAogZmkKIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAogICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci0JTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKKwlMREZMQUdTPSRzYXZlX0xERkxBR1MKIAogZmkKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0IiA+JjUKQEAgLTc3MzQsNyArODM4Myw3IEBACiAgICAgICBfbHRfcmVzdWx0PSQ/CiAgICAgICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVyciAmJiAkR1JFUCBmb3JjZV9sb2FkIGNvbmZ0ZXN0LmVycjsgdGhlbgogCWNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gICAgICBlbGlmIHRlc3QgLWYgY29uZnRlc3QgJiYgdGVzdCAkX2x0X3Jlc3VsdCAtZXEgMCAmJiAkR1JFUCBmb3JjZWRfbG9hZCBjb25mdGVzdCA+L2Rldi9udWxsIDI+JjEgOyB0aGVuCisgICAgICBlbGlmIHRlc3QgLWYgY29uZnRlc3QgJiYgdGVzdCAwID0gIiRfbHRfcmVzdWx0IiAmJiAkR1JFUCBmb3JjZWRfbG9hZCBjb25mdGVzdCA+L2Rldi9udWxsIDI+JjE7IHRoZW4KIAlsdF9jdl9sZF9mb3JjZV9sb2FkPXllcwogICAgICAgZWxzZQogCWNhdCBjb25mdGVzdC5lcnIgPiY1CkBAIC03NzQ3LDMyICs4Mzk2LDMyIEBACiAkYXNfZWNobyAiJGx0X2N2X2xkX2ZvcmNlX2xvYWQiID4mNjsgfQogICAgIGNhc2UgJGhvc3Rfb3MgaW4KICAgICByaGFwc29keSogfCBkYXJ3aW4xLlswMTJdKQotICAgICAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR7d2x9LXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJyA7OworICAgICAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR3bC11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycgOzsKICAgICBkYXJ3aW4xLiopCi0gICAgICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHt3bH0tZmxhdF9uYW1lc3BhY2UgJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnIDs7CisgICAgICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHdsLWZsYXRfbmFtZXNwYWNlICR3bC11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycgOzsKICAgICBkYXJ3aW4qKSAjIGRhcndpbiA1Lnggb24KICAgICAgICMgaWYgcnVubmluZyBvbiAxMC41IG9yIGxhdGVyLCB0aGUgZGVwbG95bWVudCB0YXJnZXQgZGVmYXVsdHMKICAgICAgICMgdG8gdGhlIE9TIHZlcnNpb24sIGlmIG9uIHg4NiwgYW5kIDEwLjQsIHRoZSBkZXBsb3ltZW50CiAgICAgICAjIHRhcmdldCBkZWZhdWx0cyB0byAxMC40LiBEb24ndCB5b3UgbG92ZSBpdD8KICAgICAgIGNhc2UgJHtNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQtMTAuMH0sJGhvc3QgaW4KIAkxMC4wLCo4NiotZGFyd2luOCp8MTAuMCwqLWRhcndpbls5MV0qKQotCSAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR7d2x9LXVuZGVmaW5lZCAke3dsfWR5bmFtaWNfbG9va3VwJyA7OworCSAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR3bC11bmRlZmluZWQgJHt3bH1keW5hbWljX2xvb2t1cCcgOzsKIAkxMC5bMDEyXSopCi0JICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHt3bH0tZmxhdF9uYW1lc3BhY2UgJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnIDs7CisJICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHdsLWZsYXRfbmFtZXNwYWNlICR3bC11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycgOzsKIAkxMC4qKQotCSAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR7d2x9LXVuZGVmaW5lZCAke3dsfWR5bmFtaWNfbG9va3VwJyA7OworCSAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR3bC11bmRlZmluZWQgJHt3bH1keW5hbWljX2xvb2t1cCcgOzsKICAgICAgIGVzYWMKICAgICA7OwogICBlc2FjCi0gICAgaWYgdGVzdCAiJGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2QiID0gInllcyI7IHRoZW4KKyAgICBpZiB0ZXN0IHllcyA9ICIkbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZCI7IHRoZW4KICAgICAgIF9sdF9kYXJfc2luZ2xlX21vZD0nJHNpbmdsZV9tb2R1bGUnCiAgICAgZmkKLSAgICBpZiB0ZXN0ICIkbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0IiA9ICJ5ZXMiOyB0aGVuCi0gICAgICBfbHRfZGFyX2V4cG9ydF9zeW1zPScgJHt3bH0tZXhwb3J0ZWRfc3ltYm9sc19saXN0LCRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW0nCisgICAgaWYgdGVzdCB5ZXMgPSAiJGx0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdCI7IHRoZW4KKyAgICAgIF9sdF9kYXJfZXhwb3J0X3N5bXM9JyAkd2wtZXhwb3J0ZWRfc3ltYm9sc19saXN0LCRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLXN5bWJvbHMuZXhwc3ltJwogICAgIGVsc2UKLSAgICAgIF9sdF9kYXJfZXhwb3J0X3N5bXM9J34kTk1FRElUIC1zICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW0gJHtsaWJ9JworICAgICAgX2x0X2Rhcl9leHBvcnRfc3ltcz0nfiROTUVESVQgLXMgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUtc3ltYm9scy5leHBzeW0gJGxpYicKICAgICBmaQotICAgIGlmIHRlc3QgIiREU1lNVVRJTCIgIT0gIjoiICYmIHRlc3QgIiRsdF9jdl9sZF9mb3JjZV9sb2FkIiA9ICJubyI7IHRoZW4KKyAgICBpZiB0ZXN0IDogIT0gIiREU1lNVVRJTCIgJiYgdGVzdCBubyA9ICIkbHRfY3ZfbGRfZm9yY2VfbG9hZCI7IHRoZW4KICAgICAgIF9sdF9kc3ltdXRpbD0nfiREU1lNVVRJTCAkbGliIHx8IDonCiAgICAgZWxzZQogICAgICAgX2x0X2RzeW11dGlsPQpAQCAtODA2Myw2ICs4NzEyLDE3IEBACiAKIAogCitmdW5jX3N0cmlwbmFtZV9jbmYgKCkKK3sKKyAgY2FzZSAkMiBpbgorICAuKikgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiJDMiIHwgJFNFRCAicyVeJDElJTsgcyVcXFxcJDJcJCUlImA7OworICAqKSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiJDMiIHwgJFNFRCAicyVeJDElJTsgcyUkMlwkJSUiYDs7CisgIGVzYWMKK30gIyBmdW5jX3N0cmlwbmFtZV9jbmYKKworCisKKwogCiAjIFNldCBvcHRpb25zCiAKQEAgLTgwODMsMTQgKzg3NDMsMTQgQEAKICAgICAqKQogICAgICAgZW5hYmxlX3NoYXJlZD1ubwogICAgICAgIyBMb29rIGF0IHRoZSBhcmd1bWVudCB3ZSBnb3QuICBXZSB1c2UgYWxsIHRoZSBjb21tb24gbGlzdCBzZXBhcmF0b3JzLgotICAgICAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IiR7SUZTfSRQQVRIX1NFUEFSQVRPUiwiCisgICAgICBsdF9zYXZlX2lmcz0kSUZTOyBJRlM9JElGUyRQQVRIX1NFUEFSQVRPUiwKICAgICAgIGZvciBwa2cgaW4gJGVuYWJsZXZhbDsgZG8KLQlJRlM9IiRsdF9zYXZlX2lmcyIKKwlJRlM9JGx0X3NhdmVfaWZzCiAJaWYgdGVzdCAiWCRwa2ciID0gIlgkcCI7IHRoZW4KIAkgIGVuYWJsZV9zaGFyZWQ9eWVzCiAJZmkKICAgICAgIGRvbmUKLSAgICAgIElGUz0iJGx0X3NhdmVfaWZzIgorICAgICAgSUZTPSRsdF9zYXZlX2lmcwogICAgICAgOzsKICAgICBlc2FjCiBlbHNlCkBAIC04MTE0LDE0ICs4Nzc0LDE0IEBACiAgICAgKikKICAgICAgZW5hYmxlX3N0YXRpYz1ubwogICAgICAgIyBMb29rIGF0IHRoZSBhcmd1bWVudCB3ZSBnb3QuICBXZSB1c2UgYWxsIHRoZSBjb21tb24gbGlzdCBzZXBhcmF0b3JzLgotICAgICAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IiR7SUZTfSRQQVRIX1NFUEFSQVRPUiwiCisgICAgICBsdF9zYXZlX2lmcz0kSUZTOyBJRlM9JElGUyRQQVRIX1NFUEFSQVRPUiwKICAgICAgIGZvciBwa2cgaW4gJGVuYWJsZXZhbDsgZG8KLQlJRlM9IiRsdF9zYXZlX2lmcyIKKwlJRlM9JGx0X3NhdmVfaWZzCiAJaWYgdGVzdCAiWCRwa2ciID0gIlgkcCI7IHRoZW4KIAkgIGVuYWJsZV9zdGF0aWM9eWVzCiAJZmkKICAgICAgIGRvbmUKLSAgICAgIElGUz0iJGx0X3NhdmVfaWZzIgorICAgICAgSUZTPSRsdF9zYXZlX2lmcwogICAgICAgOzsKICAgICBlc2FjCiBlbHNlCkBAIC04MTQ1LDE0ICs4ODA1LDE0IEBACiAgICAgKikKICAgICAgIHBpY19tb2RlPWRlZmF1bHQKICAgICAgICMgTG9vayBhdCB0aGUgYXJndW1lbnQgd2UgZ290LiAgV2UgdXNlIGFsbCB0aGUgY29tbW9uIGxpc3Qgc2VwYXJhdG9ycy4KLSAgICAgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU30kUEFUSF9TRVBBUkFUT1IsIgorICAgICAgbHRfc2F2ZV9pZnM9JElGUzsgSUZTPSRJRlMkUEFUSF9TRVBBUkFUT1IsCiAgICAgICBmb3IgbHRfcGtnIGluICR3aXRodmFsOyBkbwotCUlGUz0iJGx0X3NhdmVfaWZzIgorCUlGUz0kbHRfc2F2ZV9pZnMKIAlpZiB0ZXN0ICJYJGx0X3BrZyIgPSAiWCRsdF9wIjsgdGhlbgogCSAgcGljX21vZGU9eWVzCiAJZmkKICAgICAgIGRvbmUKLSAgICAgIElGUz0iJGx0X3NhdmVfaWZzIgorICAgICAgSUZTPSRsdF9zYXZlX2lmcwogICAgICAgOzsKICAgICBlc2FjCiBlbHNlCkBAIC04MTYwLDggKzg4MjAsNiBAQAogZmkKIAogCi10ZXN0IC16ICIkcGljX21vZGUiICYmIHBpY19tb2RlPWRlZmF1bHQKLQogCiAKIApAQCAtODE3NywxNCArODgzNSwxNCBAQAogICAgICopCiAgICAgICBlbmFibGVfZmFzdF9pbnN0YWxsPW5vCiAgICAgICAjIExvb2sgYXQgdGhlIGFyZ3VtZW50IHdlIGdvdC4gIFdlIHVzZSBhbGwgdGhlIGNvbW1vbiBsaXN0IHNlcGFyYXRvcnMuCi0gICAgICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0iJHtJRlN9JFBBVEhfU0VQQVJBVE9SLCIKKyAgICAgIGx0X3NhdmVfaWZzPSRJRlM7IElGUz0kSUZTJFBBVEhfU0VQQVJBVE9SLAogICAgICAgZm9yIHBrZyBpbiAkZW5hYmxldmFsOyBkbwotCUlGUz0iJGx0X3NhdmVfaWZzIgorCUlGUz0kbHRfc2F2ZV9pZnMKIAlpZiB0ZXN0ICJYJHBrZyIgPSAiWCRwIjsgdGhlbgogCSAgZW5hYmxlX2Zhc3RfaW5zdGFsbD15ZXMKIAlmaQogICAgICAgZG9uZQotICAgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgICBJRlM9JGx0X3NhdmVfaWZzCiAgICAgICA7OwogICAgIGVzYWMKIGVsc2UKQEAgLTgyMDIsNyArODg2MCw3IEBACiAKIAogIyBUaGlzIGNhbiBiZSB1c2VkIHRvIHJlYnVpbGQgbGlidG9vbCB3aGVuIG5lZWRlZAotTElCVE9PTF9ERVBTPSIkbHRtYWluIgorTElCVE9PTF9ERVBTPSRsdG1haW4KIAogIyBBbHdheXMgdXNlIG91ciBvd24gbGlidG9vbC4KIExJQlRPT0w9JyQoU0hFTEwpICQodG9wX2J1aWxkZGlyKS9saWJ0b29sJwpAQCAtODI1MSw3ICs4OTA5LDcgQEAKIAogCiAKLWlmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgOyB0aGVuCitpZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iOyB0aGVuCiAgICBzZXRvcHQgTk9fR0xPQl9TVUJTVAogZmkKIApAQCAtODI5MCw3ICs4OTQ4LDcgQEAKICAgIyBBSVggc29tZXRpbWVzIGhhcyBwcm9ibGVtcyB3aXRoIHRoZSBHQ0MgY29sbGVjdDIgcHJvZ3JhbS4gIEZvciBzb21lCiAgICMgcmVhc29uLCBpZiB3ZSBzZXQgdGhlIENPTExFQ1RfTkFNRVMgZW52aXJvbm1lbnQgdmFyaWFibGUsIHRoZSBwcm9ibGVtcwogICAjIHZhbmlzaCBpbiBhIHB1ZmYgb2Ygc21va2UuCi0gIGlmIHRlc3QgIlgke0NPTExFQ1RfTkFNRVMrc2V0fSIgIT0gWHNldDsgdGhlbgorICBpZiB0ZXN0IHNldCAhPSAiJHtDT0xMRUNUX05BTUVTK3NldH0iOyB0aGVuCiAgICAgQ09MTEVDVF9OQU1FUz0KICAgICBleHBvcnQgQ09MTEVDVF9OQU1FUwogICBmaQpAQCAtODMwMSwxNCArODk1OSwxNCBAQAogb2ZpbGU9bGlidG9vbAogY2FuX2J1aWxkX3NoYXJlZD15ZXMKIAotIyBBbGwga25vd24gbGlua2VycyByZXF1aXJlIGEgYC5hJyBhcmNoaXZlIGZvciBzdGF0aWMgbGlua2luZyAoZXhjZXB0IE1TVkMsCisjIEFsbCBrbm93biBsaW5rZXJzIHJlcXVpcmUgYSAnLmEnIGFyY2hpdmUgZm9yIHN0YXRpYyBsaW5raW5nIChleGNlcHQgTVNWQywKICMgd2hpY2ggbmVlZHMgJy5saWInKS4KIGxpYmV4dD1hCiAKLXdpdGhfZ251X2xkPSIkbHRfY3ZfcHJvZ19nbnVfbGQiCit3aXRoX2dudV9sZD0kbHRfY3ZfcHJvZ19nbnVfbGQKIAotb2xkX0NDPSIkQ0MiCi1vbGRfQ0ZMQUdTPSIkQ0ZMQUdTIgorb2xkX0NDPSRDQworb2xkX0NGTEFHUz0kQ0ZMQUdTCiAKICMgU2V0IHNhbmUgZGVmYXVsdHMgZm9yIHZhcmlvdXMgdmFyaWFibGVzCiB0ZXN0IC16ICIkQ0MiICYmIENDPWNjCkBAIC04MzQwLDIyICs4OTk4LDIyIEBACiBlbHNlCiAgIGNhc2UgJE1BR0lDX0NNRCBpbgogW1xcLypdIHwgID86W1xcL10qKQotICBsdF9jdl9wYXRoX01BR0lDX0NNRD0iJE1BR0lDX0NNRCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIGx0X2N2X3BhdGhfTUFHSUNfQ01EPSRNQUdJQ19DTUQgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCiAgIDs7CiAqKQotICBsdF9zYXZlX01BR0lDX0NNRD0iJE1BR0lDX0NNRCIKLSAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisgIGx0X3NhdmVfTUFHSUNfQ01EPSRNQUdJQ19DTUQKKyAgbHRfc2F2ZV9pZnM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgogICBhY19kdW1teT0iL3Vzci9iaW4kUEFUSF9TRVBBUkFUT1IkUEFUSCIKICAgZm9yIGFjX2RpciBpbiAkYWNfZHVtbXk7IGRvCi0gICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgSUZTPSRsdF9zYXZlX2lmcwogICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCi0gICAgaWYgdGVzdCAtZiAkYWNfZGlyLyR7YWNfdG9vbF9wcmVmaXh9ZmlsZTsgdGhlbgotICAgICAgbHRfY3ZfcGF0aF9NQUdJQ19DTUQ9IiRhY19kaXIvJHthY190b29sX3ByZWZpeH1maWxlIgorICAgIGlmIHRlc3QgLWYgIiRhY19kaXIvJHthY190b29sX3ByZWZpeH1maWxlIjsgdGhlbgorICAgICAgbHRfY3ZfcGF0aF9NQUdJQ19DTUQ9JGFjX2Rpci8iJHthY190b29sX3ByZWZpeH1maWxlIgogICAgICAgaWYgdGVzdCAtbiAiJGZpbGVfbWFnaWNfdGVzdF9maWxlIjsgdGhlbgogCWNhc2UgJGRlcGxpYnNfY2hlY2tfbWV0aG9kIGluCiAJImZpbGVfbWFnaWMgIiopCiAJICBmaWxlX21hZ2ljX3JlZ2V4PWBleHByICIkZGVwbGlic19jaGVja19tZXRob2QiIDogImZpbGVfbWFnaWMgXCguKlwpImAKLQkgIE1BR0lDX0NNRD0iJGx0X2N2X3BhdGhfTUFHSUNfQ01EIgorCSAgTUFHSUNfQ01EPSRsdF9jdl9wYXRoX01BR0lDX0NNRAogCSAgaWYgZXZhbCAkZmlsZV9tYWdpY19jbWQgXCRmaWxlX21hZ2ljX3Rlc3RfZmlsZSAyPiAvZGV2L251bGwgfAogCSAgICAkRUdSRVAgIiRmaWxlX21hZ2ljX3JlZ2V4IiA+IC9kZXYvbnVsbDsgdGhlbgogCSAgICA6CkBAIC04Mzc4LDEzICs5MDM2LDEzIEBACiAgICAgICBicmVhawogICAgIGZpCiAgIGRvbmUKLSAgSUZTPSIkbHRfc2F2ZV9pZnMiCi0gIE1BR0lDX0NNRD0iJGx0X3NhdmVfTUFHSUNfQ01EIgorICBJRlM9JGx0X3NhdmVfaWZzCisgIE1BR0lDX0NNRD0kbHRfc2F2ZV9NQUdJQ19DTUQKICAgOzsKIGVzYWMKIGZpCiAKLU1BR0lDX0NNRD0iJGx0X2N2X3BhdGhfTUFHSUNfQ01EIgorTUFHSUNfQ01EPSRsdF9jdl9wYXRoX01BR0lDX0NNRAogaWYgdGVzdCAtbiAiJE1BR0lDX0NNRCI7IHRoZW4KICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRNQUdJQ19DTUQiID4mNQogJGFzX2VjaG8gIiRNQUdJQ19DTUQiID4mNjsgfQpAQCAtODQwNiwyMiArOTA2NCwyMiBAQAogZWxzZQogICBjYXNlICRNQUdJQ19DTUQgaW4KIFtcXC8qXSB8ICA/OltcXC9dKikKLSAgbHRfY3ZfcGF0aF9NQUdJQ19DTUQ9IiRNQUdJQ19DTUQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICBsdF9jdl9wYXRoX01BR0lDX0NNRD0kTUFHSUNfQ01EICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgogICA7OwogKikKLSAgbHRfc2F2ZV9NQUdJQ19DTUQ9IiRNQUdJQ19DTUQiCi0gIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSRQQVRIX1NFUEFSQVRPUgorICBsdF9zYXZlX01BR0lDX0NNRD0kTUFHSUNfQ01ECisgIGx0X3NhdmVfaWZzPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKICAgYWNfZHVtbXk9Ii91c3IvYmluJFBBVEhfU0VQQVJBVE9SJFBBVEgiCiAgIGZvciBhY19kaXIgaW4gJGFjX2R1bW15OyBkbwotICAgIElGUz0iJGx0X3NhdmVfaWZzIgorICAgIElGUz0kbHRfc2F2ZV9pZnMKICAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgotICAgIGlmIHRlc3QgLWYgJGFjX2Rpci9maWxlOyB0aGVuCi0gICAgICBsdF9jdl9wYXRoX01BR0lDX0NNRD0iJGFjX2Rpci9maWxlIgorICAgIGlmIHRlc3QgLWYgIiRhY19kaXIvZmlsZSI7IHRoZW4KKyAgICAgIGx0X2N2X3BhdGhfTUFHSUNfQ01EPSRhY19kaXIvImZpbGUiCiAgICAgICBpZiB0ZXN0IC1uICIkZmlsZV9tYWdpY190ZXN0X2ZpbGUiOyB0aGVuCiAJY2FzZSAkZGVwbGlic19jaGVja19tZXRob2QgaW4KIAkiZmlsZV9tYWdpYyAiKikKIAkgIGZpbGVfbWFnaWNfcmVnZXg9YGV4cHIgIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgOiAiZmlsZV9tYWdpYyBcKC4qXCkiYAotCSAgTUFHSUNfQ01EPSIkbHRfY3ZfcGF0aF9NQUdJQ19DTUQiCisJICBNQUdJQ19DTUQ9JGx0X2N2X3BhdGhfTUFHSUNfQ01ECiAJICBpZiBldmFsICRmaWxlX21hZ2ljX2NtZCBcJGZpbGVfbWFnaWNfdGVzdF9maWxlIDI+IC9kZXYvbnVsbCB8CiAJICAgICRFR1JFUCAiJGZpbGVfbWFnaWNfcmVnZXgiID4gL2Rldi9udWxsOyB0aGVuCiAJICAgIDoKQEAgLTg0NDQsMTMgKzkxMDIsMTMgQEAKICAgICAgIGJyZWFrCiAgICAgZmkKICAgZG9uZQotICBJRlM9IiRsdF9zYXZlX2lmcyIKLSAgTUFHSUNfQ01EPSIkbHRfc2F2ZV9NQUdJQ19DTUQiCisgIElGUz0kbHRfc2F2ZV9pZnMKKyAgTUFHSUNfQ01EPSRsdF9zYXZlX01BR0lDX0NNRAogICA7OwogZXNhYwogZmkKIAotTUFHSUNfQ01EPSIkbHRfY3ZfcGF0aF9NQUdJQ19DTUQiCitNQUdJQ19DTUQ9JGx0X2N2X3BhdGhfTUFHSUNfQ01ECiBpZiB0ZXN0IC1uICIkTUFHSUNfQ01EIjsgdGhlbgogICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE1BR0lDX0NNRCIgPiY1CiAkYXNfZWNobyAiJE1BR0lDX0NNRCIgPiY2OyB9CkBAIC04NDcxLDcgKzkxMjksNyBAQAogCiAjIFVzZSBDIGZvciB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGluIHRoZSBsaWJ0b29sIHNjcmlwdAogCi1sdF9zYXZlX0NDPSIkQ0MiCitsdF9zYXZlX0NDPSRDQwogYWNfZXh0PWMKIGFjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCiBhY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCkBAIC04NTMzLDcgKzkxOTEsNyBAQAogCiBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZz0KIAotaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KK2lmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCiAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCiAgIG52Y2MqKQogICAgIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnPScgLVhjb21waWxlciAtZm5vLWJ1aWx0aW4nIDs7CkBAIC04NTQ5LDcgKzkyMDcsNyBAQAogICBsdF9jdl9wcm9nX2NvbXBpbGVyX3J0dGlfZXhjZXB0aW9ucz1ubwogICAgYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0CiAgICBlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKLSAgIGx0X2NvbXBpbGVyX2ZsYWc9Ii1mbm8tcnR0aSAtZm5vLWV4Y2VwdGlvbnMiCisgICBsdF9jb21waWxlcl9mbGFnPSItZm5vLXJ0dGkgLWZuby1leGNlcHRpb25zIiAgIyMgZXhjbHVkZSBmcm9tIHNjX3VzZWxlc3NfcXVvdGVzX2luX2Fzc2lnbm1lbnQKICAgICMgSW5zZXJ0IHRoZSBvcHRpb24gZWl0aGVyICgxKSBhZnRlciB0aGUgbGFzdCAqRkxBR1MgdmFyaWFibGUsIG9yCiAgICAjICgyKSBiZWZvcmUgYSB3b3JkIGNvbnRhaW5pbmcgImNvbmZ0ZXN0LiIsIG9yICgzKSBhdCB0aGUgZW5kLgogICAgIyBOb3RlIHRoYXQgJGFjX2NvbXBpbGUgaXRzZWxmIGRvZXMgbm90IGNvbnRhaW4gYmFja3NsYXNoZXMgYW5kIGJlZ2lucwpAQCAtODU3OSw3ICs5MjM3LDcgQEAKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnMiID4mNQogJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX3J0dGlfZXhjZXB0aW9ucyIgPiY2OyB9CiAKLWlmIHRlc3QgeCIkbHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnMiID0geHllczsgdGhlbgoraWYgdGVzdCB5ZXMgPSAiJGx0X2N2X3Byb2dfY29tcGlsZXJfcnR0aV9leGNlcHRpb25zIjsgdGhlbgogICAgIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnPSIkbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcgLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9ucyIKIGVsc2UKICAgICA6CkBAIC04NTk3LDE3ICs5MjU1LDE4IEBACiBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0KIAogCi0gIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgIGlmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCiAgICAgbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLXN0YXRpYycKIAogICAgIGNhc2UgJGhvc3Rfb3MgaW4KICAgICAgIGFpeCopCiAgICAgICAjIEFsbCBBSVggY29kZSBpcyBQSUMuCi0gICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorICAgICAgaWYgdGVzdCBpYTY0ID0gIiRob3N0X2NwdSI7IHRoZW4KIAkjIEFJWCA1IG5vdyBzdXBwb3J0cyBJQTY0IHByb2Nlc3NvcgogCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKICAgICAgIGZpCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLWZQSUMnCiAgICAgICA7OwogCiAgICAgYW1pZ2FvcyopCkBAIC04NjE4LDggKzkyNzcsOCBAQAogICAgICAgICA7OwogICAgICAgbTY4aykKICAgICAgICAgICAgICMgRklYTUU6IHdlIG5lZWQgYXQgbGVhc3QgNjgwMjAgY29kZSB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzLCBidXQKLSAgICAgICAgICAgICMgYWRkaW5nIHRoZSBgLW02ODAyMCcgZmxhZyB0byBHQ0MgcHJldmVudHMgYnVpbGRpbmcgYW55dGhpbmcgYmV0dGVyLAotICAgICAgICAgICAgIyBsaWtlIGAtbTY4MDQwJy4KKyAgICAgICAgICAgICMgYWRkaW5nIHRoZSAnLW02ODAyMCcgZmxhZyB0byBHQ0MgcHJldmVudHMgYnVpbGRpbmcgYW55dGhpbmcgYmV0dGVyLAorICAgICAgICAgICAgIyBsaWtlICctbTY4MDQwJy4KICAgICAgICAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctbTY4MDIwIC1yZXNpZGVudDMyIC1tYWx3YXlzLXJlc3RvcmUtYTQnCiAgICAgICAgIDs7CiAgICAgICBlc2FjCkBAIC04NzA1LDcgKzkzNjQsNyBAQAogICAgIGNhc2UgJGhvc3Rfb3MgaW4KICAgICBhaXgqKQogICAgICAgbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKLSAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisgICAgICBpZiB0ZXN0IGlhNjQgPSAiJGhvc3RfY3B1IjsgdGhlbgogCSMgQUlYIDUgbm93IHN1cHBvcnRzIElBNjQgcHJvY2Vzc29yCiAJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJwogICAgICAgZWxzZQpAQCAtODcxMyw2ICs5MzcyLDIwIEBACiAgICAgICBmaQogICAgICAgOzsKIAorICAgIGRhcndpbiogfCByaGFwc29keSopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBvbiB0aGlzIHBsYXRmb3JtCisgICAgICAjIENvbW1vbiBzeW1ib2xzIG5vdCBhbGxvd2VkIGluIE1IX0RZTElCIGZpbGVzCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLWZuby1jb21tb24nCisgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgbmFnZm9yKikKKyAgICAgICAgIyBOQUcgRm9ydHJhbiBjb21waWxlcgorICAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsLVdsLCwnCisgICAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctUElDJworICAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCisgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICA7OworCiAgICAgbWluZ3cqIHwgY3lnd2luKiB8IHB3MzIqIHwgb3MyKiB8IGNlZ2NjKikKICAgICAgICMgVGhpcyBoYWNrIGlzIHNvIHRoYXQgdGhlIHNvdXJjZSBmaWxlIGNhbiB0ZWxsIHdoZXRoZXIgaXQgaXMgYmVpbmcKICAgICAgICMgYnVpbHQgZm9yIGluY2x1c2lvbiBpbiBhIGRsbCAoYW5kIHNob3VsZCBleHBvcnQgc3ltYm9scyBmb3IgZXhhbXBsZSkuCkBAIC04NzMyLDcgKzk0MDUsNyBAQAogCTs7CiAgICAgICBlc2FjCiAgICAgICAjIElzIHRoZXJlIGEgYmV0dGVyIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljIHRoYXQgd29ya3Mgd2l0aCB0aGUgYnVuZGxlZCBDQz8KLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPScke3dsfS1hICR7d2x9YXJjaGl2ZScKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSckd2wtYSAke3dsfWFyY2hpdmUnCiAgICAgICA7OwogCiAgICAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKQEAgLTg3NDEsOSArOTQxNCw5IEBACiAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLW5vbl9zaGFyZWQnCiAgICAgICA7OwogCi0gICAgbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251KQorICAgIGxpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSB8IGdudSopCiAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgIyBvbGQgSW50ZWwgZm9yIHg4Nl82NCB3aGljaCBzdGlsbCBzdXBwb3J0ZWQgLUtQSUMuCisgICAgICAjIG9sZCBJbnRlbCBmb3IgeDg2XzY0LCB3aGljaCBzdGlsbCBzdXBwb3J0ZWQgLUtQSUMuCiAgICAgICBlY2MqKQogCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCiAJbHRfcHJvZ19jb21waWxlcl9waWM9Jy1LUElDJwpAQCAtODc2OCw2ICs5NDQxLDEyIEBACiAJbHRfcHJvZ19jb21waWxlcl9waWM9Jy1QSUMnCiAJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJwogCTs7CisgICAgICB0Y2MqKQorCSMgRmFicmljZSBCZWxsYXJkIGV0IGFsJ3MgVGlueSBDIENvbXBpbGVyCisJbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKKwlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLWZQSUMnCisJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1zdGF0aWMnCisJOzsKICAgICAgIHBnY2MqIHwgcGdmNzcqIHwgcGdmOTAqIHwgcGdmOTUqIHwgcGdmb3J0cmFuKikKICAgICAgICAgIyBQb3J0bGFuZCBHcm91cCBjb21waWxlcnMgKCpub3QqIHRoZSBQZW50aXVtIGdjYyBjb21waWxlciwKIAkjIHdoaWNoIGxvb2tzIHRvIGJlIGEgZGVhZCBwcm9qZWN0KQpAQCAtODg2NSw3ICs5NTQ0LDcgQEAKICAgICAgIDs7CiAKICAgICBzeXN2NCpNUCopCi0gICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjIDt0aGVuCisgICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjOyB0aGVuCiAJbHRfcHJvZ19jb21waWxlcl9waWM9Jy1LY29uZm9ybV9waWMnCiAJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJwogICAgICAgZmkKQEAgLTg4OTQsNyArOTU3Myw3IEBACiAgIGZpCiAKIGNhc2UgJGhvc3Rfb3MgaW4KLSAgIyBGb3IgcGxhdGZvcm1zIHdoaWNoIGRvIG5vdCBzdXBwb3J0IFBJQywgLURQSUMgaXMgbWVhbmluZ2xlc3M6CisgICMgRm9yIHBsYXRmb3JtcyB0aGF0IGRvIG5vdCBzdXBwb3J0IFBJQywgLURQSUMgaXMgbWVhbmluZ2xlc3M6CiAgICpkamdwcCopCiAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9CiAgICAgOzsKQEAgLTg5MjYsNyArOTYwNSw3IEBACiAgIGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzPW5vCiAgICBhY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKICAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAotICAgbHRfY29tcGlsZXJfZmxhZz0iJGx0X3Byb2dfY29tcGlsZXJfcGljIC1EUElDIgorICAgbHRfY29tcGlsZXJfZmxhZz0iJGx0X3Byb2dfY29tcGlsZXJfcGljIC1EUElDIiAgIyMgZXhjbHVkZSBmcm9tIHNjX3VzZWxlc3NfcXVvdGVzX2luX2Fzc2lnbm1lbnQKICAgICMgSW5zZXJ0IHRoZSBvcHRpb24gZWl0aGVyICgxKSBhZnRlciB0aGUgbGFzdCAqRkxBR1MgdmFyaWFibGUsIG9yCiAgICAjICgyKSBiZWZvcmUgYSB3b3JkIGNvbnRhaW5pbmcgImNvbmZ0ZXN0LiIsIG9yICgzKSBhdCB0aGUgZW5kLgogICAgIyBOb3RlIHRoYXQgJGFjX2NvbXBpbGUgaXRzZWxmIGRvZXMgbm90IGNvbnRhaW4gYmFja3NsYXNoZXMgYW5kIGJlZ2lucwpAQCAtODk1Niw3ICs5NjM1LDcgQEAKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3MiID4mNQogJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3JrcyIgPiY2OyB9CiAKLWlmIHRlc3QgeCIkbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3MiID0geHllczsgdGhlbgoraWYgdGVzdCB5ZXMgPSAiJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzIjsgdGhlbgogICAgIGNhc2UgJGx0X3Byb2dfY29tcGlsZXJfcGljIGluCiAgICAgICIiIHwgIiAiKikgOzsKICAgICAgKikgbHRfcHJvZ19jb21waWxlcl9waWM9IiAkbHRfcHJvZ19jb21waWxlcl9waWMiIDs7CkBAIC04OTg4LDcgKzk2NjcsNyBAQAogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrcz1ubwotICAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKKyAgIHNhdmVfTERGTEFHUz0kTERGTEFHUwogICAgTERGTEFHUz0iJExERkxBR1MgJGx0X3RtcF9zdGF0aWNfZmxhZyIKICAgIGVjaG8gIiRsdF9zaW1wbGVfbGlua190ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAogICAgaWYgKGV2YWwgJGFjX2xpbmsgMj5jb25mdGVzdC5lcnIpICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCkBAIC05MDA3LDEzICs5Njg2LDEzIEBACiAgICAgIGZpCiAgICBmaQogICAgJFJNIC1yIGNvbmZ0ZXN0KgotICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKKyAgIExERkxBR1M9JHNhdmVfTERGTEFHUwogCiBmaQogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3JrcyIgPiY1CiAkYXNfZWNobyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzIiA+JjY7IH0KIAotaWYgdGVzdCB4IiRsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3JrcyIgPSB4eWVzOyB0aGVuCitpZiB0ZXN0IHllcyA9ICIkbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3MiOyB0aGVuCiAgICAgOgogZWxzZQogICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPQpAQCAtOTEzMyw4ICs5ODEyLDggQEAKIAogCiAKLWhhcmRfbGlua3M9Im5vdHRlc3RlZCIKLWlmIHRlc3QgIiRsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyIgPSBubyAmJiB0ZXN0ICIkbmVlZF9sb2NrcyIgIT0gbm87IHRoZW4KK2hhcmRfbGlua3M9bm90dGVzdGVkCitpZiB0ZXN0IG5vID0gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyIgJiYgdGVzdCBubyAhPSAiJG5lZWRfbG9ja3MiOyB0aGVuCiAgICMgZG8gbm90IG92ZXJ3cml0ZSB0aGUgdmFsdWUgb2YgbmVlZF9sb2NrcyBwcm92aWRlZCBieSB0aGUgdXNlcgogICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIHdlIGNhbiBsb2NrIHdpdGggaGFyZCBsaW5rcyIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBpZiB3ZSBjYW4gbG9jayB3aXRoIGhhcmQgbGlua3MuLi4gIiA+JjY7IH0KQEAgLTkxNDYsOSArOTgyNSw5IEBACiAgIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPi9kZXYvbnVsbCAmJiBoYXJkX2xpbmtzPW5vCiAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkaGFyZF9saW5rcyIgPiY1CiAkYXNfZWNobyAiJGhhcmRfbGlua3MiID4mNjsgfQotICBpZiB0ZXN0ICIkaGFyZF9saW5rcyIgPSBubzsgdGhlbgotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogXGAkQ0MnIGRvZXMgbm90IHN1cHBvcnQgXGAtYyAtbycsIHNvIFxgbWFrZSAtaicgbWF5IGJlIHVuc2FmZSIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBcYCRDQycgZG9lcyBub3Qgc3VwcG9ydCBcYC1jIC1vJywgc28gXGBtYWtlIC1qJyBtYXkgYmUgdW5zYWZlIiA+JjI7fQorICBpZiB0ZXN0IG5vID0gIiRoYXJkX2xpbmtzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogJyRDQycgZG9lcyBub3Qgc3VwcG9ydCAnLWMgLW8nLCBzbyAnbWFrZSAtaicgbWF5IGJlIHVuc2FmZSIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAnJENDJyBkb2VzIG5vdCBzdXBwb3J0ICctYyAtbycsIHNvICdtYWtlIC1qJyBtYXkgYmUgdW5zYWZlIiA+JjI7fQogICAgIG5lZWRfbG9ja3M9d2FybgogICBmaQogZWxzZQpAQCAtOTE5MSw5ICs5ODcwLDkgQEAKICAgIyBpbmNsdWRlZCBpbiB0aGUgc3ltYm9sIGxpc3QKICAgaW5jbHVkZV9leHBzeW1zPQogICAjIGV4Y2x1ZGVfZXhwc3ltcyBjYW4gYmUgYW4gZXh0ZW5kZWQgcmVnZXhwIG9mIHN5bWJvbHMgdG8gZXhjbHVkZQotICAjIGl0IHdpbGwgYmUgd3JhcHBlZCBieSBgICgnIGFuZCBgKSQnLCBzbyBvbmUgbXVzdCBub3QgbWF0Y2ggYmVnaW5uaW5nIG9yCi0gICMgZW5kIG9mIGxpbmUuICBFeGFtcGxlOiBgYXxiY3wuKmQuKicgd2lsbCBleGNsdWRlIHRoZSBzeW1ib2xzIGBhJyBhbmQgYGJjJywKLSAgIyBhcyB3ZWxsIGFzIGFueSBzeW1ib2wgdGhhdCBjb250YWlucyBgZCcuCisgICMgaXQgd2lsbCBiZSB3cmFwcGVkIGJ5ICcgKCcgYW5kICcpJCcsIHNvIG9uZSBtdXN0IG5vdCBtYXRjaCBiZWdpbm5pbmcgb3IKKyAgIyBlbmQgb2YgbGluZS4gIEV4YW1wbGU6ICdhfGJjfC4qZC4qJyB3aWxsIGV4Y2x1ZGUgdGhlIHN5bWJvbHMgJ2EnIGFuZCAnYmMnLAorICAjIGFzIHdlbGwgYXMgYW55IHN5bWJvbCB0aGF0IGNvbnRhaW5zICdkJy4KICAgZXhjbHVkZV9leHBzeW1zPSdfR0xPQkFMX09GRlNFVF9UQUJMRV98X0dMT0JBTF9fRltJRF1fLionCiAgICMgQWx0aG91Z2ggX0dMT0JBTF9PRkZTRVRfVEFCTEVfIGlzIGEgdmFsaWQgc3ltYm9sIEMgbmFtZSwgbW9zdCBhLm91dAogICAjIHBsYXRmb3JtcyAoYWIpdXNlIGl0IGluIFBJQyBjb2RlLCBidXQgdGhlaXIgbGlua2VycyBnZXQgY29uZnVzZWQgaWYKQEAgLTkyMDgsNyArOTg4Nyw3IEBACiAgICAgIyBGSVhNRTogdGhlIE1TVkMrKyBwb3J0IGhhc24ndCBiZWVuIHRlc3RlZCBpbiBhIGxvb29vbmcgdGltZQogICAgICMgV2hlbiBub3QgdXNpbmcgZ2NjLCB3ZSBjdXJyZW50bHkgYXNzdW1lIHRoYXQgd2UgYXJlIHVzaW5nCiAgICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KLSAgICBpZiB0ZXN0ICIkR0NDIiAhPSB5ZXM7IHRoZW4KKyAgICBpZiB0ZXN0IHllcyAhPSAiJEdDQyI7IHRoZW4KICAgICAgIHdpdGhfZ251X2xkPW5vCiAgICAgZmkKICAgICA7OwpAQCAtOTIxNiw3ICs5ODk1LDcgQEAKICAgICAjIHdlIGp1c3QgaG9wZS9hc3N1bWUgdGhpcyBpcyBnY2MgYW5kIG5vdCBjODkgKD0gTVNWQysrKQogICAgIHdpdGhfZ251X2xkPXllcwogICAgIDs7Ci0gIG9wZW5ic2QqKQorICBvcGVuYnNkKiB8IGJpdHJpZyopCiAgICAgd2l0aF9nbnVfbGQ9bm8KICAgICA7OwogICBlc2FjCkBAIC05MjI2LDcgKzk5MDUsNyBAQAogICAjIE9uIHNvbWUgdGFyZ2V0cywgR05VIGxkIGlzIGNvbXBhdGlibGUgZW5vdWdoIHdpdGggdGhlIG5hdGl2ZSBsaW5rZXIKICAgIyB0aGF0IHdlJ3JlIGJldHRlciBvZmYgdXNpbmcgdGhlIG5hdGl2ZSBpbnRlcmZhY2UgZm9yIGJvdGguCiAgIGx0X3VzZV9nbnVfbGRfaW50ZXJmYWNlPW5vCi0gIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKyAgaWYgdGVzdCB5ZXMgPSAiJHdpdGhfZ251X2xkIjsgdGhlbgogICAgIGNhc2UgJGhvc3Rfb3MgaW4KICAgICAgIGFpeCopCiAJIyBUaGUgQUlYIHBvcnQgb2YgR05VIGxkIGhhcyBhbHdheXMgYXNwaXJlZCB0byBjb21wYXRpYmlsaXR5CkBAIC05MjQ4LDI0ICs5OTI3LDI0IEBACiAgICAgZXNhYwogICBmaQogCi0gIGlmIHRlc3QgIiRsdF91c2VfZ251X2xkX2ludGVyZmFjZSIgPSB5ZXM7IHRoZW4KKyAgaWYgdGVzdCB5ZXMgPSAiJGx0X3VzZV9nbnVfbGRfaW50ZXJmYWNlIjsgdGhlbgogICAgICMgSWYgYXJjaGl2ZV9jbWRzIHJ1bnMgTEQsIG5vdCBDQywgd2xhcmMgc2hvdWxkIGJlIGVtcHR5Ci0gICAgd2xhcmM9JyR7d2x9JworICAgIHdsYXJjPSckd2wnCiAKICAgICAjIFNldCBzb21lIGRlZmF1bHRzIGZvciBHTlUgbGQgd2l0aCBzaGFyZWQgbGlicmFyeSBzdXBwb3J0LiBUaGVzZQogICAgICMgYXJlIHJlc2V0IGxhdGVyIGlmIHNoYXJlZCBsaWJyYXJpZXMgYXJlIG5vdCBzdXBwb3J0ZWQuIFB1dHRpbmcgdGhlbQogICAgICMgaGVyZSBhbGxvd3MgdGhlbSB0byBiZSBvdmVycmlkZGVuIGlmIG5lY2Vzc2FyeS4KICAgICBydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAotICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKLSAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR7d2x9LS1leHBvcnQtZHluYW1pYycKKyAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSckd2wtcnBhdGggJHdsJGxpYmRpcicKKyAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR3bC0tZXhwb3J0LWR5bmFtaWMnCiAgICAgIyBhbmNpZW50IEdOVSBsZCBkaWRuJ3Qgc3VwcG9ydCAtLXdob2xlLWFyY2hpdmUgZXQuIGFsLgogICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICduby13aG9sZS1hcmNoaXZlJyA+IC9kZXYvbnVsbDsgdGhlbgotICAgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9IiR3bGFyYyInLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICciJHdsYXJjIictLW5vLXdob2xlLWFyY2hpdmUnCisgICAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0kd2xhcmMnLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICckd2xhcmMnLS1uby13aG9sZS1hcmNoaXZlJwogICAgIGVsc2UKICAgICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPQogICAgIGZpCiAgICAgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPW5vCi0gICAgY2FzZSBgJExEIC12IDI+JjFgIGluCisgICAgY2FzZSBgJExEIC12IHwgJFNFRCAtZSAncy8oXilcKylcc1wrLy8nIDI+JjFgIGluCiAgICAgICAqR05VXCBnb2xkKikgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPXllcyA7OwogICAgICAgKlwgWzAxXS4qIHwgKlwgMi5bMC05XS4qIHwgKlwgMi4xMC4qKSA7OyAjIGNhdGNoIHZlcnNpb25zIDwgMi4xMQogICAgICAgKlwgMi4xMS45My4wLjJcICopIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz15ZXMgOzsgIyBSSDcuMyAuLi4KQEAgLTkyNzgsNyArOTk1Nyw3IEBACiAgICAgY2FzZSAkaG9zdF9vcyBpbgogICAgIGFpeFszLTldKikKICAgICAgICMgT24gQUlYL1BQQywgdGhlIEdOVSBsaW5rZXIgaXMgdmVyeSBicm9rZW4KLSAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgIT0gaWE2NDsgdGhlbgorICAgICAgaWYgdGVzdCBpYTY0ICE9ICIkaG9zdF9jcHUiOyB0aGVuCiAJbGRfc2hsaWJzPW5vCiAJY2F0IDw8X0xUX0VPRiAxPiYyCiAKQEAgLTkyOTcsNyArOTk3Niw3IEBACiAgICAgICBjYXNlICRob3N0X2NwdSBpbgogICAgICAgcG93ZXJwYykKICAgICAgICAgICAgICMgc2VlIGNvbW1lbnQgYWJvdXQgQW1pZ2FPUzQgLnNvIHN1cHBvcnQKLSAgICAgICAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisgICAgICAgICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKICAgICAgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JycKICAgICAgICAgOzsKICAgICAgIG02OGspCkBAIC05MzEzLDcgKzk5OTIsNyBAQAogCWFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCiAJIyBKb3NlcGggQmVja2VuYmFjaCA8anJiM0BiZXN0LmNvbT4gc2F5cyBzb21lIHJlbGVhc2VzIG9mIGdjYwogCSMgc3VwcG9ydCAtLXVuZGVmaW5lZC4gIFRoaXMgZGVzZXJ2ZXMgc29tZSBpbnZlc3RpZ2F0aW9uLiAgRklYTUUKLQlhcmNoaXZlX2NtZHM9JyRDQyAtbm9zdGFydCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwlhcmNoaXZlX2NtZHM9JyRDQyAtbm9zdGFydCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCiAgICAgICBlbHNlCiAJbGRfc2hsaWJzPW5vCiAgICAgICBmaQpAQCAtOTMyMyw3ICsxMDAwMiw3IEBACiAgICAgICAjIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgKSBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywKICAgICAgICMgYXMgdGhlcmUgaXMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCiAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCi0gICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR7d2x9LS1leHBvcnQtYWxsLXN5bWJvbHMnCisgICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR3bC0tZXhwb3J0LWFsbC1zeW1ib2xzJwogICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKICAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9scz1ubwogICAgICAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz15ZXMKQEAgLTkzMzEsNjEgKzEwMDEwLDYxIEBACiAgICAgICBleGNsdWRlX2V4cHN5bXM9J1tfXStHTE9CQUxfT0ZGU0VUX1RBQkxFX3xbX10rR0xPQkFMX19bRklEXV8uKnxbX10raGVhZF9bQS1aYS16MC05X10rX2RsbHxbQS1aYS16MC05X10rX2RsbF9pbmFtZScKIAogICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgotICAgICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJwotCSMgSWYgdGhlIGV4cG9ydC1zeW1ib2xzIGZpbGUgYWxyZWFkeSBpcyBhIC5kZWYgZmlsZSAoMXN0IGxpbmUKLQkjIGlzIEVYUE9SVFMpLCB1c2UgaXQgYXMgaXM7IG90aGVyd2lzZSwgcHJlcGVuZC4uLgotCWFyY2hpdmVfZXhwc3ltX2NtZHM9J2lmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiA9IHhFWFBPUlRTOyB0aGVuCi0JICBjcCAkZXhwb3J0X3N5bWJvbHMgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7Ci0JZWxzZQotCSAgZWNobyBFWFBPUlRTID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7Ci0JICBjYXQgJGV4cG9ydF9zeW1ib2xzID4+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOwotCWZpfgotCSRDQyAtc2hhcmVkICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJworICAgICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR3bC0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKKwkjIElmIHRoZSBleHBvcnQtc3ltYm9scyBmaWxlIGFscmVhZHkgaXMgYSAuZGVmIGZpbGUsIHVzZSBpdCBhcworCSMgaXM7IG90aGVyd2lzZSwgcHJlcGVuZCBFWFBPUlRTLi4uCisJYXJjaGl2ZV9leHBzeW1fY21kcz0naWYgICB0ZXN0IERFRiA9ICJgJFNFRCAtbiAgICAgLWUgJ1wnJ3MvXlsJIF0qLy8nXCcnICAgICAtZSAnXCcnL15cKDsuKlwpKiQvZCdcJycgICAgIC1lICdcJydzL15cKEVYUE9SVFNcfExJQlJBUllcKVwoWwkgXS4qXCkqJC9ERUYvcCdcJycgICAgIC1lIHEgICAgICRleHBvcnRfc3ltYm9sc2AiIDsgdGhlbgorICAgICAgICAgIGNwICRleHBvcnRfc3ltYm9scyAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKyAgICAgICAgZWxzZQorICAgICAgICAgIGVjaG8gRVhQT1JUUyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworICAgICAgICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgPj4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisgICAgICAgIGZpfgorICAgICAgICAkQ0MgLXNoYXJlZCAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkd2wtLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCiAgICAgICBlbHNlCiAJbGRfc2hsaWJzPW5vCiAgICAgICBmaQogICAgICAgOzsKIAogICAgIGhhaWt1KikKLSAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisgICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKICAgICAgIGxpbmtfYWxsX2RlcGxpYnM9eWVzCiAgICAgICA7OwogCiAgICAgaW50ZXJpeFszLTldKikKICAgICAgIGhhcmRjb2RlX2RpcmVjdD1ubwogICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubwotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGgsJGxpYmRpcicKLSAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHt3bH0tRScKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR3bC1ycGF0aCwkbGliZGlyJworICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPSckd2wtRScKICAgICAgICMgSGFjazogT24gSW50ZXJpeCAzLngsIHdlIGNhbm5vdCBjb21waWxlIFBJQyBiZWNhdXNlIG9mIGEgYnJva2VuIGdjYy4KICAgICAgICMgSW5zdGVhZCwgc2hhcmVkIGxpYnJhcmllcyBhcmUgbG9hZGVkIGF0IGFuIGltYWdlIGJhc2UgKDB4MTAwMDAwMDAgYnkKICAgICAgICMgZGVmYXVsdCkgYW5kIHJlbG9jYXRlZCBpZiB0aGV5IGNvbmZsaWN0LCB3aGljaCBpcyBhIHNsb3cgdmVyeSBtZW1vcnkKICAgICAgICMgY29uc3VtaW5nIGFuZCBmcmFnbWVudGluZyBwcm9jZXNzLiAgVG8gYXZvaWQgdGhpcywgd2UgcGljayBhIHJhbmRvbSwKICAgICAgICMgMjU2IEtpQi1hbGlnbmVkIGltYWdlIGJhc2UgYmV0d2VlbiAweDUwMDAwMDAwIGFuZCAweDZGRkMwMDAwIGF0IGxpbmsKICAgICAgICMgdGltZS4gIE1vdmluZyB1cCBmcm9tIDB4MTAwMDAwMDAgYWxzbyBhbGxvd3MgbW9yZSBzYnJrKDIpIHNwYWNlLgotICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWgsJHNvbmFtZSAke3dsfS0taW1hZ2UtYmFzZSxgZXhwciAke1JBTkRPTS0kJH0gJSA0MDk2IC8gMiBcKiAyNjIxNDQgKyAxMzQyMTc3MjgwYCAtbyAkbGliJwotICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nc2VkICJzLF4sXywiICRleHBvcnRfc3ltYm9scyA+JG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW1+JENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1oLCRzb25hbWUgJHt3bH0tLXJldGFpbi1zeW1ib2xzLWZpbGUsJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW0gJHt3bH0tLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKKyAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtaCwkc29uYW1lICR3bC0taW1hZ2UtYmFzZSxgZXhwciAke1JBTkRPTS0kJH0gJSA0MDk2IC8gMiBcKiAyNjIxNDQgKyAxMzQyMTc3MjgwYCAtbyAkbGliJworICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nc2VkICJzfF58X3wiICRleHBvcnRfc3ltYm9scyA+JG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW1+JENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtaCwkc29uYW1lICR3bC0tcmV0YWluLXN5bWJvbHMtZmlsZSwkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cHN5bSAkd2wtLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKICAgICAgIDs7CiAKICAgICBnbnUqIHwgbGludXgqIHwgdHBmKiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSkKICAgICAgIHRtcF9kaWV0PW5vCi0gICAgICBpZiB0ZXN0ICIkaG9zdF9vcyIgPSBsaW51eC1kaWV0bGliYzsgdGhlbgorICAgICAgaWYgdGVzdCBsaW51eC1kaWV0bGliYyA9ICIkaG9zdF9vcyI7IHRoZW4KIAljYXNlICRjY19iYXNlbmFtZSBpbgogCSAgZGlldFwgKikgdG1wX2RpZXQ9eWVzOzsJIyBsaW51eC1kaWV0bGliYyB3aXRoIHN0YXRpYyBsaW5raW5nICghZGlldC1keW4pCiAJZXNhYwogICAgICAgZmkKICAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRFR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsIFwKLQkgJiYgdGVzdCAiJHRtcF9kaWV0IiA9IG5vCisJICYmIHRlc3Qgbm8gPSAiJHRtcF9kaWV0IgogICAgICAgdGhlbgogCXRtcF9hZGRmbGFnPScgJHBpY19mbGFnJwogCXRtcF9zaGFyZWRmbGFnPSctc2hhcmVkJwogCWNhc2UgJGNjX2Jhc2VuYW1lLCRob3N0X2NwdSBpbgogICAgICAgICBwZ2NjKikJCQkJIyBQb3J0bGFuZCBHcm91cCBDIGNvbXBpbGVyCi0JICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nJHt3bH0tLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisJICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nJHdsLS13aG9sZS1hcmNoaXZlYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgICR3bC0tbm8td2hvbGUtYXJjaGl2ZScKIAkgIHRtcF9hZGRmbGFnPScgJHBpY19mbGFnJwogCSAgOzsKIAlwZ2Y3NyogfCBwZ2Y5MCogfCBwZ2Y5NSogfCBwZ2ZvcnRyYW4qKQogCQkJCQkjIFBvcnRsYW5kIEdyb3VwIGY3NyBhbmQgZjkwIGNvbXBpbGVycwotCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JyR7d2x9LS13aG9sZS1hcmNoaXZlYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JyR3bC0td2hvbGUtYXJjaGl2ZWBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCAkd2wtLW5vLXdob2xlLWFyY2hpdmUnCiAJICB0bXBfYWRkZmxhZz0nICRwaWNfZmxhZyAtTW5vbWFpbicgOzsKIAllY2MqLGlhNjQqIHwgaWNjKixpYTY0KikJIyBJbnRlbCBDIGNvbXBpbGVyIG9uIGlhNjQKIAkgIHRtcF9hZGRmbGFnPScgLWlfZHluYW1pYycgOzsKQEAgLTkzOTYsNDIgKzEwMDc1LDQ0IEBACiAJbGY5NSopCQkJCSMgTGFoZXkgRm9ydHJhbiA4LjEKIAkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPQogCSAgdG1wX3NoYXJlZGZsYWc9Jy0tc2hhcmVkJyA7OworICAgICAgICBuYWdmb3IqKSAgICAgICAgICAgICAgICAgICAgICAgICMgTkFHRk9SIDUuMworICAgICAgICAgIHRtcF9zaGFyZWRmbGFnPSctV2wsLXNoYXJlZCcgOzsKIAl4bFtjQ10qIHwgYmd4bFtjQ10qIHwgbXBpeGxbY0NdKikgIyBJQk0gWEwgQyA4LjAgb24gUFBDIChkZWFsIHdpdGggeGxmIGJlbG93KQogCSAgdG1wX3NoYXJlZGZsYWc9Jy1xbWtzaHJvYmonCiAJICB0bXBfYWRkZmxhZz0gOzsKIAludmNjKikJIyBDdWRhIENvbXBpbGVyIERyaXZlciAyLjIKLQkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPScke3dsfS0td2hvbGUtYXJjaGl2ZWBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKKwkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSckd2wtLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAgJHdsLS1uby13aG9sZS1hcmNoaXZlJwogCSAgY29tcGlsZXJfbmVlZHNfb2JqZWN0PXllcwogCSAgOzsKIAllc2FjCiAJY2FzZSBgJENDIC1WIDI+JjEgfCBzZWQgNXFgIGluCiAJKlN1blwgQyopCQkJIyBTdW4gQyA1LjkKLQkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPScke3dsfS0td2hvbGUtYXJjaGl2ZWBuZXdfY29udmVuaWVuY2U9OyBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0IC16IFwiJGNvbnZcIiB8fCBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JyR3bC0td2hvbGUtYXJjaGl2ZWBuZXdfY29udmVuaWVuY2U9OyBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0IC16IFwiJGNvbnZcIiB8fCBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgICR3bC0tbm8td2hvbGUtYXJjaGl2ZScKIAkgIGNvbXBpbGVyX25lZWRzX29iamVjdD15ZXMKIAkgIHRtcF9zaGFyZWRmbGFnPSctRycgOzsKIAkqU3VuXCBGKikJCQkjIFN1biBGb3J0cmFuIDguMwogCSAgdG1wX3NoYXJlZGZsYWc9Jy1HJyA7OwogCWVzYWMKLQlhcmNoaXZlX2NtZHM9JyRDQyAnIiR0bXBfc2hhcmVkZmxhZyIiJHRtcF9hZGRmbGFnIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJYXJjaGl2ZV9jbWRzPSckQ0MgJyIkdG1wX3NoYXJlZGZsYWciIiR0bXBfYWRkZmxhZyInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKIAotICAgICAgICBpZiB0ZXN0ICJ4JHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZyIgPSB4eWVzOyB0aGVuCisgICAgICAgIGlmIHRlc3QgeWVzID0gIiRzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmciOyB0aGVuCiAgICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nZWNobyAieyBnbG9iYWw6IiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KLQkgICAgY2F0ICRleHBvcnRfc3ltYm9scyB8IHNlZCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgotCSAgICBlY2hvICJsb2NhbDogKjsgfTsiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KLQkgICAgJENDICciJHRtcF9zaGFyZWRmbGFnIiIkdG1wX2FkZGZsYWciJyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tdmVyc2lvbi1zY3JpcHQgJHt3bH0kb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKKyAgICAgICAgICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgfCBzZWQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKyAgICAgICAgICAgIGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorICAgICAgICAgICAgJENDICciJHRtcF9zaGFyZWRmbGFnIiIkdG1wX2FkZGZsYWciJyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lICR3bC12ZXJzaW9uLXNjcmlwdCAkd2wkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKICAgICAgICAgZmkKIAogCWNhc2UgJGNjX2Jhc2VuYW1lIGluCiAJeGxmKiB8IGJnZiogfCBiZ3hsZiogfCBtcGl4bGYqKQogCSAgIyBJQk0gWEwgRm9ydHJhbiAxMC4xIG9uIFBQQyBjYW5ub3QgY3JlYXRlIHNoYXJlZCBsaWJzIGl0c2VsZgogCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9Jy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAtLW5vLXdob2xlLWFyY2hpdmUnCi0JICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSckd2wtcnBhdGggJHdsJGxpYmRpcicKIAkgIGFyY2hpdmVfY21kcz0nJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLW8gJGxpYicKLQkgIGlmIHRlc3QgIngkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nIiA9IHh5ZXM7IHRoZW4KKwkgIGlmIHRlc3QgeWVzID0gIiRzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmciOyB0aGVuCiAJICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9J2VjaG8gInsgZ2xvYmFsOiIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+Ci0JICAgICAgY2F0ICRleHBvcnRfc3ltYm9scyB8IHNlZCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgotCSAgICAgIGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgotCSAgICAgICRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC12ZXJzaW9uLXNjcmlwdCAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKKyAgICAgICAgICAgICAgY2F0ICRleHBvcnRfc3ltYm9scyB8IHNlZCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorICAgICAgICAgICAgICBlY2hvICJsb2NhbDogKjsgfTsiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKyAgICAgICAgICAgICAgJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLXZlcnNpb24tc2NyaXB0ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJwogCSAgZmkKIAkgIDs7CiAJZXNhYwpAQCAtOTQ0NSw4ICsxMDEyNiw4IEBACiAJYXJjaGl2ZV9jbWRzPSckTEQgLUJzaGFyZWFibGUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtbyAkbGliJwogCXdsYXJjPQogICAgICAgZWxzZQotCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgJHdsLXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCiAgICAgICBmaQogICAgICAgOzsKIApAQCAtOTQ2NCw4ICsxMDE0NSw4IEBACiAKIF9MVF9FT0YKICAgICAgIGVsaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgotCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgJHdsLXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCiAgICAgICBlbHNlCiAJbGRfc2hsaWJzPW5vCiAgICAgICBmaQpAQCAtOTQ3Nyw3ICsxMDE1OCw3IEBACiAJbGRfc2hsaWJzPW5vCiAJY2F0IDw8X0xUX0VPRiAxPiYyCiAKLSoqKiBXYXJuaW5nOiBSZWxlYXNlcyBvZiB0aGUgR05VIGxpbmtlciBwcmlvciB0byAyLjE2LjkxLjAuMyBjYW4gbm90CisqKiogV2FybmluZzogUmVsZWFzZXMgb2YgdGhlIEdOVSBsaW5rZXIgcHJpb3IgdG8gMi4xNi45MS4wLjMgY2Fubm90CiAqKiogcmVsaWFibHkgY3JlYXRlIHNoYXJlZCBsaWJyYXJpZXMgb24gU0NPIHN5c3RlbXMuICBUaGVyZWZvcmUsIGxpYnRvb2wKICoqKiBpcyBkaXNhYmxpbmcgc2hhcmVkIGxpYnJhcmllcyBzdXBwb3J0LiAgV2UgdXJnZSB5b3UgdG8gdXBncmFkZSBHTlUKICoqKiBiaW51dGlscyB0byByZWxlYXNlIDIuMTYuOTEuMC4zIG9yIG5ld2VyLiAgQW5vdGhlciBvcHRpb24gaXMgdG8gbW9kaWZ5CkBAIC05NDkyLDkgKzEwMTczLDkgQEAKIAkgICMgRFRfUlVOUEFUSCB0YWcgZnJvbSBleGVjdXRhYmxlcyBhbmQgbGlicmFyaWVzLiAgQnV0IGRvaW5nIHNvCiAJICAjIHJlcXVpcmVzIHRoYXQgeW91IGNvbXBpbGUgZXZlcnl0aGluZyB0d2ljZSwgd2hpY2ggaXMgYSBwYWluLgogCSAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgotCSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCi0JICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0JICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSckd2wtcnBhdGggJHdsJGxpYmRpcicKKwkgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgJHdsLXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCiAJICBlbHNlCiAJICAgIGxkX3NobGlicz1ubwogCSAgZmkKQEAgLTk1MTEsMTUgKzEwMTkyLDE1IEBACiAKICAgICAqKQogICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgotCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgJHdsLXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCiAgICAgICBlbHNlCiAJbGRfc2hsaWJzPW5vCiAgICAgICBmaQogICAgICAgOzsKICAgICBlc2FjCiAKLSAgICBpZiB0ZXN0ICIkbGRfc2hsaWJzIiA9IG5vOyB0aGVuCisgICAgaWYgdGVzdCBubyA9ICIkbGRfc2hsaWJzIjsgdGhlbgogICAgICAgcnVucGF0aF92YXI9CiAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPQogICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPQpAQCAtOTUzNSw3ICsxMDIxNiw3IEBACiAgICAgICAjIE5vdGU6IHRoaXMgbGlua2VyIGhhcmRjb2RlcyB0aGUgZGlyZWN0b3JpZXMgaW4gTElCUEFUSCBpZiB0aGVyZQogICAgICAgIyBhcmUgbm8gZGlyZWN0b3JpZXMgc3BlY2lmaWVkIGJ5IC1MLgogICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzICYmIHRlc3QgLXogIiRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyI7IHRoZW4KKyAgICAgIGlmIHRlc3QgeWVzID0gIiRHQ0MiICYmIHRlc3QgLXogIiRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyI7IHRoZW4KIAkjIE5laXRoZXIgZGlyZWN0IGhhcmRjb2Rpbmcgbm9yIHN0YXRpYyBsaW5raW5nIGlzIHN1cHBvcnRlZCB3aXRoIGEKIAkjIGJyb2tlbiBjb2xsZWN0Mi4KIAloYXJkY29kZV9kaXJlY3Q9dW5zdXBwb3J0ZWQKQEAgLTk1NDMsMTIgKzEwMjI0LDEyIEBACiAgICAgICA7OwogCiAgICAgYWl4WzQtOV0qKQotICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKyAgICAgIGlmIHRlc3QgaWE2NCA9ICIkaG9zdF9jcHUiOyB0aGVuCiAJIyBPbiBJQTY0LCB0aGUgbGlua2VyIGRvZXMgcnVuIHRpbWUgbGlua2luZyBieSBkZWZhdWx0LCBzbyB3ZSBkb24ndAogCSMgaGF2ZSB0byBkbyBhbnl0aGluZyBzcGVjaWFsLgogCWFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KIAlleHBfc3ltX2ZsYWc9Jy1CZXhwb3J0JwotCW5vX2VudHJ5X2ZsYWc9IiIKKwlub19lbnRyeV9mbGFnPQogICAgICAgZWxzZQogCSMgSWYgd2UncmUgdXNpbmcgR05VIG5tLCB0aGVuIHdlIGRvbid0IHdhbnQgdGhlICItQyIgb3B0aW9uLgogCSMgLUMgbWVhbnMgZGVtYW5nbGUgdG8gQUlYIG5tLCBidXQgbWVhbnMgZG9uJ3QgZGVtYW5nbGUgd2l0aCBHTlUgbm0KQEAgLTk1NjYsNyArMTAyNDcsNyBAQAogCSMgbmVlZCB0byBkbyBydW50aW1lIGxpbmtpbmcuCiAJY2FzZSAkaG9zdF9vcyBpbiBhaXg0LlsyM118YWl4NC5bMjNdLip8YWl4WzUtOV0qKQogCSAgZm9yIGxkX2ZsYWcgaW4gJExERkxBR1M7IGRvCi0JICBpZiAodGVzdCAkbGRfZmxhZyA9ICItYnJ0bCIgfHwgdGVzdCAkbGRfZmxhZyA9ICItV2wsLWJydGwiKTsgdGhlbgorCSAgaWYgKHRlc3QgeC1icnRsID0gIngkbGRfZmxhZyIgfHwgdGVzdCB4LVdsLC1icnRsID0gIngkbGRfZmxhZyIpOyB0aGVuCiAJICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9eWVzCiAJICAgIGJyZWFrCiAJICBmaQpAQCAtOTU4OSwxMyArMTAyNzAsMTMgQEAKICAgICAgIGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZT15ZXMKICAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9JzonCiAgICAgICBsaW5rX2FsbF9kZXBsaWJzPXllcwotICAgICAgZmlsZV9saXN0X3NwZWM9JyR7d2x9LWYsJworICAgICAgZmlsZV9saXN0X3NwZWM9JyR3bC1mLCcKIAotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICAgIGlmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCiAJY2FzZSAkaG9zdF9vcyBpbiBhaXg0LlswMTJdfGFpeDQuWzAxMl0uKikKIAkjIFdlIG9ubHkgd2FudCB0byBkbyB0aGlzIG9uIEFJWCA0LjIgYW5kIGxvd2VyLCB0aGUgY2hlY2sKIAkjIGJlbG93IGZvciBicm9rZW4gY29sbGVjdDIgZG9lc24ndCB3b3JrIHVuZGVyIDQuMysKLQkgIGNvbGxlY3QybmFtZT1gJHtDQ30gLXByaW50LXByb2ctbmFtZT1jb2xsZWN0MmAKKwkgIGNvbGxlY3QybmFtZT1gJENDIC1wcmludC1wcm9nLW5hbWU9Y29sbGVjdDJgCiAJICBpZiB0ZXN0IC1mICIkY29sbGVjdDJuYW1lIiAmJgogCSAgIHN0cmluZ3MgIiRjb2xsZWN0Mm5hbWUiIHwgJEdSRVAgcmVzb2x2ZV9saWJfbmFtZSA+L2Rldi9udWxsCiAJICB0aGVuCkBAIC05NjE0LDM1ICsxMDI5NSwzNSBAQAogCSAgOzsKIAllc2FjCiAJc2hhcmVkX2ZsYWc9Jy1zaGFyZWQnCi0JaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCi0JICBzaGFyZWRfZmxhZz0iJHNoYXJlZF9mbGFnICInJHt3bH0tRycKKwlpZiB0ZXN0IHllcyA9ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyI7IHRoZW4KKwkgIHNoYXJlZF9mbGFnPSIkc2hhcmVkX2ZsYWcgIickd2wtRycKIAlmaQogICAgICAgZWxzZQogCSMgbm90IHVzaW5nIGdjYwotCWlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJaWYgdGVzdCBpYTY0ID0gIiRob3N0X2NwdSI7IHRoZW4KIAkjIFZpc3VhbEFnZSBDKyssIFZlcnNpb24gNS41IGZvciBBSVggNUwgZm9yIElBLTY0LCBCZXRhIDMgUmVsZWFzZQogCSMgY2hva2VzIG9uIC1XbCwtRy4gVGhlIGZvbGxvd2luZyBsaW5lIGlzIGNvcnJlY3Q6CiAJICBzaGFyZWRfZmxhZz0nLUcnCiAJZWxzZQotCSAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCi0JICAgIHNoYXJlZF9mbGFnPScke3dsfS1HJworCSAgaWYgdGVzdCB5ZXMgPSAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciOyB0aGVuCisJICAgIHNoYXJlZF9mbGFnPSckd2wtRycKIAkgIGVsc2UKLQkgICAgc2hhcmVkX2ZsYWc9JyR7d2x9LWJNOlNSRScKKwkgICAgc2hhcmVkX2ZsYWc9JyR3bC1iTTpTUkUnCiAJICBmaQogCWZpCiAgICAgICBmaQogCi0gICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR7d2x9LWJleHBhbGwnCisgICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR3bC1iZXhwYWxsJwogICAgICAgIyBJdCBzZWVtcyB0aGF0IC1iZXhwYWxsIGRvZXMgbm90IGV4cG9ydCBzeW1ib2xzIGJlZ2lubmluZyB3aXRoCiAgICAgICAjIHVuZGVyc2NvcmUgKF8pLCBzbyBpdCBpcyBiZXR0ZXIgdG8gZ2VuZXJhdGUgYSBsaXN0IG9mIHN5bWJvbHMgdG8gZXhwb3J0LgogICAgICAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzPXllcwotICAgICAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCisgICAgICBpZiB0ZXN0IHllcyA9ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyI7IHRoZW4KIAkjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW50aW1lIGxvYWRpbmcgZmxhZ3MgKC1icnRsKSwKIAkjIC1iZXJvayB3aWxsIGxpbmsgd2l0aG91dCBlcnJvciwgYnV0IG1heSBwcm9kdWNlIGEgYnJva2VuIGxpYnJhcnkuCiAJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9Jy1iZXJvaycKICAgICAgICAgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCiAgICAgICAgICMgZW1wdHkgZXhlY3V0YWJsZS4KLSAgICAgICAgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aCtzZXR9IiA9IHNldDsgdGhlbgorICAgICAgICBpZiB0ZXN0IHNldCA9ICIke2x0X2N2X2FpeF9saWJwYXRoK3NldH0iOyB0aGVuCiAgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aAogZWxzZQogICBpZiAke2x0X2N2X2FpeF9saWJwYXRoXys6fSBmYWxzZTsgdGhlbiA6CkBAIC05Njc3LDcgKzEwMzU4LDcgQEAKIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAogICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CiAgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF8iOyB0aGVuCi0gICAgbHRfY3ZfYWl4X2xpYnBhdGhfPSIvdXNyL2xpYjovbGliIgorICAgIGx0X2N2X2FpeF9saWJwYXRoXz0vdXNyL2xpYjovbGliCiAgIGZpCiAKIGZpCkBAIC05Njg1LDE3ICsxMDM2NiwxNyBAQAogICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGhfCiBmaQogCi0gICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCi0gICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgYGlmIHRlc3QgIngke2FsbG93X3VuZGVmaW5lZF9mbGFnfSIgIT0gIngiOyB0aGVuIGZ1bmNfZWNob19hbGwgIiR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30iOyBlbHNlIDo7IGZpYCAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyAkc2hhcmVkX2ZsYWciCisgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR3bC1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkd2wnJG5vX2VudHJ5X2ZsYWcnICRjb21waWxlcl9mbGFncyBgaWYgdGVzdCAtbiAiJGFsbG93X3VuZGVmaW5lZF9mbGFnIjsgdGhlbiBmdW5jX2VjaG9fYWxsICIkd2wkYWxsb3dfdW5kZWZpbmVkX2ZsYWciOyBlbHNlIDo7IGZpYCAkd2wnJGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzJyAnJHNoYXJlZF9mbGFnCiAgICAgICBlbHNlCi0JaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KLQkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LVIgJGxpYmRpcjovdXNyL2xpYjovbGliJworCWlmIHRlc3QgaWE2NCA9ICIkaG9zdF9jcHUiOyB0aGVuCisJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSckd2wtUiAkbGliZGlyOi91c3IvbGliOi9saWInCiAJICBhbGxvd191bmRlZmluZWRfZmxhZz0iLXogbm9kZWZzIgotCSAgYXJjaGl2ZV9leHBzeW1fY21kcz0iXCRDQyAkc2hhcmVkX2ZsYWciJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyIKKwkgIGFyY2hpdmVfZXhwc3ltX2NtZHM9IlwkQ0MgJHNoYXJlZF9mbGFnIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwkd2wkbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyAkd2wkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgJyJcJHdsJGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzIgogCWVsc2UKIAkgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCiAJICMgZW1wdHkgZXhlY3V0YWJsZS4KLQkgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aCtzZXR9IiA9IHNldDsgdGhlbgorCSBpZiB0ZXN0IHNldCA9ICIke2x0X2N2X2FpeF9saWJwYXRoK3NldH0iOyB0aGVuCiAgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aAogZWxzZQogICBpZiAke2x0X2N2X2FpeF9saWJwYXRoXys6fSBmYWxzZTsgdGhlbiA6CkBAIC05NzMwLDcgKzEwNDExLDcgQEAKIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAogICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CiAgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF8iOyB0aGVuCi0gICAgbHRfY3ZfYWl4X2xpYnBhdGhfPSIvdXNyL2xpYjovbGliIgorICAgIGx0X2N2X2FpeF9saWJwYXRoXz0vdXNyL2xpYjovbGliCiAgIGZpCiAKIGZpCkBAIC05NzM4LDIxICsxMDQxOSwyMSBAQAogICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGhfCiBmaQogCi0JIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisJIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR3bC1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgogCSAgIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVuIHRpbWUgbG9hZGluZyBmbGFncywKIAkgICMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KLQkgIG5vX3VuZGVmaW5lZF9mbGFnPScgJHt3bH0tYmVybm90b2snCi0JICBhbGxvd191bmRlZmluZWRfZmxhZz0nICR7d2x9LWJlcm9rJwotCSAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorCSAgbm9fdW5kZWZpbmVkX2ZsYWc9JyAkd2wtYmVybm90b2snCisJICBhbGxvd191bmRlZmluZWRfZmxhZz0nICR3bC1iZXJvaycKKwkgIGlmIHRlc3QgeWVzID0gIiR3aXRoX2dudV9sZCI7IHRoZW4KIAkgICAgIyBXZSBvbmx5IHVzZSB0aGlzIGNvZGUgZm9yIEdOVSBsZHMgdGhhdCBzdXBwb3J0IC0td2hvbGUtYXJjaGl2ZS4KLQkgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JyR7d2x9LS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworCSAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nJHdsLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICR3bC0tbm8td2hvbGUtYXJjaGl2ZScKIAkgIGVsc2UKIAkgICAgIyBFeHBvcnRlZCBzeW1ib2xzIGNhbiBiZSBwdWxsZWQgaW50byBzaGFyZWQgb2JqZWN0cyBmcm9tIGFyY2hpdmVzCiAJICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSckY29udmVuaWVuY2UnCiAJICBmaQogCSAgYXJjaGl2ZV9jbWRzX25lZWRfbGM9eWVzCiAJICAjIFRoaXMgaXMgc2ltaWxhciB0byBob3cgQUlYIHRyYWRpdGlvbmFsbHkgYnVpbGRzIGl0cyBzaGFyZWQgbGlicmFyaWVzLgotCSAgYXJjaGl2ZV9leHBzeW1fY21kcz0iXCRDQyAkc2hhcmVkX2ZsYWciJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICR7d2x9LWJub2VudHJ5ICRjb21waWxlcl9mbGFncyAke3dsfS1iRTokZXhwb3J0X3N5bWJvbHMke2FsbG93X3VuZGVmaW5lZF9mbGFnfX4kQVIgJEFSX0ZMQUdTICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lJHJlbGVhc2UuYSAkb3V0cHV0X29iamRpci8kc29uYW1lJworCSAgYXJjaGl2ZV9leHBzeW1fY21kcz0iXCRDQyAkc2hhcmVkX2ZsYWciJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICR3bC1ibm9lbnRyeSAkY29tcGlsZXJfZmxhZ3MgJHdsLWJFOiRleHBvcnRfc3ltYm9scyRhbGxvd191bmRlZmluZWRfZmxhZ34kQVIgJEFSX0ZMQUdTICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lJHJlbGVhc2UuYSAkb3V0cHV0X29iamRpci8kc29uYW1lJwogCWZpCiAgICAgICBmaQogICAgICAgOzsKQEAgLTk3NjEsNyArMTA0NDIsNyBAQAogICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KICAgICAgIHBvd2VycGMpCiAgICAgICAgICAgICAjIHNlZSBjb21tZW50IGFib3V0IEFtaWdhT1M0IC5zbyBzdXBwb3J0Ci0gICAgICAgICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworICAgICAgICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCiAgICAgICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPScnCiAgICAgICAgIDs7CiAgICAgICBtNjhrKQpAQCAtOTc5MSwxNiArMTA0NzIsMTcgQEAKIAkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgogCWxpYmV4dD1saWIKIAkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KLQlzaHJleHRfY21kcz0iLmRsbCIKKwlzaHJleHRfY21kcz0uZGxsCiAJIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgotCWFyY2hpdmVfY21kcz0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzIC1XbCwtZGxsfmxpbmtuYW1lcz0nCi0JYXJjaGl2ZV9leHBzeW1fY21kcz0naWYgdGVzdCAieGAkU0VEIDFxICRleHBvcnRfc3ltYm9sc2AiID0geEVYUE9SVFM7IHRoZW4KLQkgICAgc2VkIC1uIC1lICdzL1xcXFxcXFwoLipcXFxcXFxcKS8tbGlua1xcXCAtRVhQT1JUOlxcXFxcXFwxLycgLWUgJzFcXFwhcCcgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cDsKLQkgIGVsc2UKLQkgICAgc2VkIC1lICdzL1xcXFxcXFwoLipcXFxcXFxcKS8tbGlua1xcXCAtRVhQT1JUOlxcXFxcXFwxLycgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cDsKLQkgIGZpfgotCSAgJENDIC1vICR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAiQCR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lLmV4cCIgLVdsLC1ETEwsLUlNUExJQjoiJHRvb2xfb3V0cHV0X29iamRpciRsaWJuYW1lLmRsbC5saWIifgotCSAgbGlua25hbWVzPScKKwlhcmNoaXZlX2NtZHM9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAtV2wsLURMTCwtSU1QTElCOiIkdG9vbF9vdXRwdXRfb2JqZGlyJGxpYm5hbWUuZGxsLmxpYiJ+bGlua25hbWVzPScKKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSdpZiAgIHRlc3QgREVGID0gImAkU0VEIC1uICAgICAtZSAnXCcncy9eWwkgXSovLydcJycgICAgIC1lICdcJycvXlwoOy4qXCkqJC9kJ1wnJyAgICAgLWUgJ1wnJ3MvXlwoRVhQT1JUU1x8TElCUkFSWVwpXChbCSBdLipcKSokL0RFRi9wJ1wnJyAgICAgLWUgcSAgICAgJGV4cG9ydF9zeW1ib2xzYCIgOyB0aGVuCisgICAgICAgICAgICBjcCAiJGV4cG9ydF9zeW1ib2xzIiAiJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWYiOworICAgICAgICAgICAgZWNobyAiJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUuZGVmIiA+ICIkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cCI7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgJFNFRCAtZSAnXCcncy9eLy1saW5rIC1FWFBPUlQ6LydcJycgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cDsKKyAgICAgICAgICBmaX4KKyAgICAgICAgICAkQ0MgLW8gJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzICJAJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUuZXhwIiAtV2wsLURMTCwtSU1QTElCOiIkdG9vbF9vdXRwdXRfb2JqZGlyJGxpYm5hbWUuZGxsLmxpYiJ+CisgICAgICAgICAgbGlua25hbWVzPScKIAkjIFRoZSBsaW5rZXIgd2lsbCBub3QgYXV0b21hdGljYWxseSBidWlsZCBhIHN0YXRpYyBsaWIgaWYgd2UgYnVpbGQgYSBETEwuCiAJIyBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMsICk9J3RydWUnCiAJZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz15ZXMKQEAgLTk4MDksMTggKzEwNDkxLDE4IEBACiAJIyBEb24ndCB1c2UgcmFubGliCiAJb2xkX3Bvc3RpbnN0YWxsX2NtZHM9J2NobW9kIDY0NCAkb2xkbGliJwogCXBvc3RsaW5rX2NtZHM9J2x0X291dHB1dGZpbGU9IkBPVVRQVVRAIn4KLQkgIGx0X3Rvb2xfb3V0cHV0ZmlsZT0iQFRPT0xfT1VUUFVUQCJ+Ci0JICBjYXNlICRsdF9vdXRwdXRmaWxlIGluCi0JICAgICouZXhlfCouRVhFKSA7OwotCSAgICAqKQotCSAgICAgIGx0X291dHB1dGZpbGU9IiRsdF9vdXRwdXRmaWxlLmV4ZSIKLQkgICAgICBsdF90b29sX291dHB1dGZpbGU9IiRsdF90b29sX291dHB1dGZpbGUuZXhlIgotCSAgICAgIDs7Ci0JICBlc2FjfgotCSAgaWYgdGVzdCAiJE1BTklGRVNUX1RPT0wiICE9ICI6IiAmJiB0ZXN0IC1mICIkbHRfb3V0cHV0ZmlsZS5tYW5pZmVzdCI7IHRoZW4KLQkgICAgJE1BTklGRVNUX1RPT0wgLW1hbmlmZXN0ICIkbHRfdG9vbF9vdXRwdXRmaWxlLm1hbmlmZXN0IiAtb3V0cHV0cmVzb3VyY2U6IiRsdF90b29sX291dHB1dGZpbGUiIHx8IGV4aXQgMTsKLQkgICAgJFJNICIkbHRfb3V0cHV0ZmlsZS5tYW5pZmVzdCI7Ci0JICBmaScKKyAgICAgICAgICBsdF90b29sX291dHB1dGZpbGU9IkBUT09MX09VVFBVVEAifgorICAgICAgICAgIGNhc2UgJGx0X291dHB1dGZpbGUgaW4KKyAgICAgICAgICAgICouZXhlfCouRVhFKSA7OworICAgICAgICAgICAgKikKKyAgICAgICAgICAgICAgbHRfb3V0cHV0ZmlsZT0kbHRfb3V0cHV0ZmlsZS5leGUKKyAgICAgICAgICAgICAgbHRfdG9vbF9vdXRwdXRmaWxlPSRsdF90b29sX291dHB1dGZpbGUuZXhlCisgICAgICAgICAgICAgIDs7CisgICAgICAgICAgZXNhY34KKyAgICAgICAgICBpZiB0ZXN0IDogIT0gIiRNQU5JRkVTVF9UT09MIiAmJiB0ZXN0IC1mICIkbHRfb3V0cHV0ZmlsZS5tYW5pZmVzdCI7IHRoZW4KKyAgICAgICAgICAgICRNQU5JRkVTVF9UT09MIC1tYW5pZmVzdCAiJGx0X3Rvb2xfb3V0cHV0ZmlsZS5tYW5pZmVzdCIgLW91dHB1dHJlc291cmNlOiIkbHRfdG9vbF9vdXRwdXRmaWxlIiB8fCBleGl0IDE7CisgICAgICAgICAgICAkUk0gIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsKKyAgICAgICAgICBmaScKIAk7OwogICAgICAgKikKIAkjIEFzc3VtZSBNU1ZDIHdyYXBwZXIKQEAgLTk4MjksNyArMTA1MTEsNyBAQAogCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCiAJbGliZXh0PWxpYgogCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgotCXNocmV4dF9jbWRzPSIuZGxsIgorCXNocmV4dF9jbWRzPS5kbGwKIAkjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCiAJYXJjaGl2ZV9jbWRzPSckQ0MgLW8gJGxpYiAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgYGZ1bmNfZWNob19hbGwgIiRkZXBsaWJzIiB8ICRTRUQgJ1wnJ3MvIC1sYyQvLydcJydgIC1saW5rIC1kbGx+bGlua25hbWVzPScKIAkjIFRoZSBsaW5rZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgLmxpYiBmaWxlIGlmIHdlIGJ1aWxkIGEgRExMLgpAQCAtOTg0OCwyNCArMTA1MzAsMjQgQEAKICAgaGFyZGNvZGVfZGlyZWN0PW5vCiAgIGhhcmRjb2RlX2F1dG9tYXRpYz15ZXMKICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj11bnN1cHBvcnRlZAotICBpZiB0ZXN0ICIkbHRfY3ZfbGRfZm9yY2VfbG9hZCIgPSAieWVzIjsgdGhlbgotICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSdgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UgJHt3bH0tZm9yY2VfbG9hZCwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCcKKyAgaWYgdGVzdCB5ZXMgPSAiJGx0X2N2X2xkX2ZvcmNlX2xvYWQiOyB0aGVuCisgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9J2Bmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSAkd2wtZm9yY2VfbG9hZCwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCcKIAogICBlbHNlCiAgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JycKICAgZmkKICAgbGlua19hbGxfZGVwbGlicz15ZXMKLSAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9IiRfbHRfZGFyX2FsbG93X3VuZGVmaW5lZCIKKyAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkCiAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgIGlmb3J0KikgX2x0X2Rhcl9jYW5fc2hhcmVkPXllcyA7OworICAgICBpZm9ydCp8bmFnZm9yKikgX2x0X2Rhcl9jYW5fc2hhcmVkPXllcyA7OwogICAgICAqKSBfbHRfZGFyX2Nhbl9zaGFyZWQ9JEdDQyA7OwogICBlc2FjCi0gIGlmIHRlc3QgIiRfbHRfZGFyX2Nhbl9zaGFyZWQiID0gInllcyI7IHRoZW4KKyAgaWYgdGVzdCB5ZXMgPSAiJF9sdF9kYXJfY2FuX3NoYXJlZCI7IHRoZW4KICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD1mdW5jX2VjaG9fYWxsCi0gICAgYXJjaGl2ZV9jbWRzPSJcJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgXCRycGF0aC9cJHNvbmFtZSBcJHZlcnN0cmluZyAkX2x0X2Rhcl9zaW5nbGVfbW9kJHtfbHRfZHN5bXV0aWx9IgotICAgIG1vZHVsZV9jbWRzPSJcJENDIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgLWJ1bmRsZSBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3Mke19sdF9kc3ltdXRpbH0iCi0gICAgYXJjaGl2ZV9leHBzeW1fY21kcz0ic2VkICdzLF4sXywnIDwgXCRleHBvcnRfc3ltYm9scyA+IFwkb3V0cHV0X29iamRpci9cJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX5cJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgXCRycGF0aC9cJHNvbmFtZSBcJHZlcnN0cmluZyAke19sdF9kYXJfc2luZ2xlX21vZH0ke19sdF9kYXJfZXhwb3J0X3N5bXN9JHtfbHRfZHN5bXV0aWx9IgotICAgIG1vZHVsZV9leHBzeW1fY21kcz0ic2VkIC1lICdzLF4sXywnIDwgXCRleHBvcnRfc3ltYm9scyA+IFwkb3V0cHV0X29iamRpci9cJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX5cJENDIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgLWJ1bmRsZSBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3Mke19sdF9kYXJfZXhwb3J0X3N5bXN9JHtfbHRfZHN5bXV0aWx9IgorICAgIGFyY2hpdmVfY21kcz0iXCRDQyAtZHluYW1pY2xpYiBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lIFwkcnBhdGgvXCRzb25hbWUgXCR2ZXJzdHJpbmcgJF9sdF9kYXJfc2luZ2xlX21vZCRfbHRfZHN5bXV0aWwiCisgICAgbW9kdWxlX2NtZHM9IlwkQ0MgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiAtYnVuZGxlIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyRfbHRfZHN5bXV0aWwiCisgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0ic2VkICdzfF58X3wnIDwgXCRleHBvcnRfc3ltYm9scyA+IFwkb3V0cHV0X29iamRpci9cJGxpYm5hbWUtc3ltYm9scy5leHBzeW1+XCRDQyAtZHluYW1pY2xpYiBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lIFwkcnBhdGgvXCRzb25hbWUgXCR2ZXJzdHJpbmcgJF9sdF9kYXJfc2luZ2xlX21vZCRfbHRfZGFyX2V4cG9ydF9zeW1zJF9sdF9kc3ltdXRpbCIKKyAgICBtb2R1bGVfZXhwc3ltX2NtZHM9InNlZCAtZSAnc3xefF98JyA8IFwkZXhwb3J0X3N5bWJvbHMgPiBcJG91dHB1dF9vYmpkaXIvXCRsaWJuYW1lLXN5bWJvbHMuZXhwc3ltflwkQ0MgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiAtYnVuZGxlIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyRfbHRfZGFyX2V4cG9ydF9zeW1zJF9sdF9kc3ltdXRpbCIKIAogICBlbHNlCiAgIGxkX3NobGlicz1ubwpAQCAtOTkwNywzMyArMTA1ODksMzMgQEAKICAgICAgIDs7CiAKICAgICBocHV4OSopCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotCWFyY2hpdmVfY21kcz0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisgICAgICBpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgorCWFyY2hpdmVfY21kcz0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgJHBpY19mbGFnICR3bCtiICR3bCRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc350ZXN0ICJ4JG91dHB1dF9vYmpkaXIvJHNvbmFtZSIgPSAieCRsaWIiIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKICAgICAgIGVsc2UKLQlhcmNoaXZlX2NtZHM9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRMRCAtYiArYiAkaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworCWFyY2hpdmVfY21kcz0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JExEIC1iICtiICRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3N+dGVzdCAieCRvdXRwdXRfb2JqZGlyLyRzb25hbWUiID0gIngkbGliIiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCiAgICAgICBmaQotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0rYiAke3dsfSRsaWJkaXInCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSckd2wrYiAkd2wkbGliZGlyJwogICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06CiAgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCiAKICAgICAgICMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCiAgICAgICAjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KICAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCi0gICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR7d2x9LUUnCisgICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR3bC1FJwogICAgICAgOzsKIAogICAgIGhwdXgxMCopCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyAmJiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgaWYgdGVzdCB5ZXMsbm8gPSAiJEdDQywkd2l0aF9nbnVfbGQiOyB0aGVuCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHdsK2ggJHdsJHNvbmFtZSAkd2wrYiAkd2wkaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCiAgICAgICBlbHNlCiAJYXJjaGl2ZV9jbWRzPSckTEQgLWIgK2ggJHNvbmFtZSArYiAkaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwogICAgICAgZmkKLSAgICAgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgotCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9K2IgJHt3bH0kbGliZGlyJworICAgICAgaWYgdGVzdCBubyA9ICIkd2l0aF9nbnVfbGQiOyB0aGVuCisJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHdsK2IgJHdsJGxpYmRpcicKIAloYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKIAloYXJkY29kZV9kaXJlY3Q9eWVzCiAJaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlPXllcwotCWV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHt3bH0tRScKKwlleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR3bC1FJwogCSMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCiAJIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCiAJaGFyZGNvZGVfbWludXNfTD15ZXMKQEAgLTk5NDEsMjUgKzEwNjIzLDI1IEBACiAgICAgICA7OwogCiAgICAgaHB1eDExKikKLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzICYmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorICAgICAgaWYgdGVzdCB5ZXMsbm8gPSAiJEdDQywkd2l0aF9nbnVfbGQiOyB0aGVuCiAJY2FzZSAkaG9zdF9jcHUgaW4KIAlocHBhKjY0KikKLQkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICR3bCtoICR3bCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCiAJICA7OwogCWlhNjQqKQotCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkd2wraCAkd2wkc29uYW1lICR3bCtub2RlZmF1bHRycGF0aCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKIAkgIDs7CiAJKikKLQkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkd2wraCAkd2wkc29uYW1lICR3bCtiICR3bCRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKIAkgIDs7CiAJZXNhYwogICAgICAgZWxzZQogCWNhc2UgJGhvc3RfY3B1IGluCiAJaHBwYSo2NCopCi0JICBhcmNoaXZlX2NtZHM9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIGFyY2hpdmVfY21kcz0nJENDIC1iICR3bCtoICR3bCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCiAJICA7OwogCWlhNjQqKQotCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICBhcmNoaXZlX2NtZHM9JyRDQyAtYiAkd2wraCAkd2wkc29uYW1lICR3bCtub2RlZmF1bHRycGF0aCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKIAkgIDs7CiAJKikKIApAQCAtOTk3MSw3ICsxMDY1Myw3IEBACiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGx0X2N2X3Byb2dfY29tcGlsZXJfX2I9bm8KLSAgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCisgICBzYXZlX0xERkxBR1M9JExERkxBR1MKICAgIExERkxBR1M9IiRMREZMQUdTIC1iIgogICAgZWNobyAiJGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CiAgICBpZiAoZXZhbCAkYWNfbGluayAyPmNvbmZ0ZXN0LmVycikgJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KQEAgLTk5OTAsMTQgKzEwNjcyLDE0IEBACiAgICAgIGZpCiAgICBmaQogICAgJFJNIC1yIGNvbmZ0ZXN0KgotICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKKyAgIExERkxBR1M9JHNhdmVfTERGTEFHUwogCiBmaQogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX19iIiA+JjUKICRhc19lY2hvICIkbHRfY3ZfcHJvZ19jb21waWxlcl9fYiIgPiY2OyB9CiAKLWlmIHRlc3QgeCIkbHRfY3ZfcHJvZ19jb21waWxlcl9fYiIgPSB4eWVzOyB0aGVuCi0gICAgYXJjaGl2ZV9jbWRzPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKK2lmIHRlc3QgeWVzID0gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX19iIjsgdGhlbgorICAgIGFyY2hpdmVfY21kcz0nJENDIC1iICR3bCtoICR3bCRzb25hbWUgJHdsK2IgJHdsJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwogZWxzZQogICAgIGFyY2hpdmVfY21kcz0nJExEIC1iICtoICRzb25hbWUgK2IgJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKIGZpCkBAIC0xMDAwNSw4ICsxMDY4Nyw4IEBACiAJICA7OwogCWVzYWMKICAgICAgIGZpCi0gICAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KLQloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfStiICR7d2x9JGxpYmRpcicKKyAgICAgIGlmIHRlc3Qgbm8gPSAiJHdpdGhfZ251X2xkIjsgdGhlbgorCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR3bCtiICR3bCRsaWJkaXInCiAJaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06CiAKIAljYXNlICRob3N0X2NwdSBpbgpAQCAtMTAwMTcsNyArMTA2OTksNyBAQAogCSopCiAJICBoYXJkY29kZV9kaXJlY3Q9eWVzCiAJICBoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGU9eWVzCi0JICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR7d2x9LUUnCisJICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR3bC1FJwogCiAJICAjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAogCSAgIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCkBAIC0xMDAyOCw4ICsxMDcxMCw4IEBACiAgICAgICA7OwogCiAgICAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgICAgICBpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgorCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR3bC1zZXRfdmVyc2lvbiAkd2wkdmVyc3RyaW5nImAgJHdsLXVwZGF0ZV9yZWdpc3RyeSAkd2wkb3V0cHV0X29iamRpci9zb19sb2NhdGlvbnMgLW8gJGxpYicKIAkjIFRyeSB0byB1c2UgdGhlIC1leHBvcnRlZF9zeW1ib2wgbGQgb3B0aW9uLCBpZiBpdCBkb2VzIG5vdAogCSMgd29yaywgYXNzdW1lIHRoYXQgLWV4cG9ydHNfZmlsZSBkb2VzIG5vdCB3b3JrIGVpdGhlciBhbmQKIAkjIGltcGxpY2l0bHkgZXhwb3J0IGFsbCBzeW1ib2xzLgpAQCAtMTAwMzksOCArMTA3MjEsOCBAQAogaWYgJHtsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCs6fSBmYWxzZTsgdGhlbiA6CiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCi0gIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCi0JICAgTERGTEFHUz0iJExERkxBR1MgLXNoYXJlZCAke3dsfS1leHBvcnRlZF9zeW1ib2wgJHt3bH1mb28gJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9L2Rldi9udWxsIgorICBzYXZlX0xERkxBR1M9JExERkxBR1MKKwkgICBMREZMQUdTPSIkTERGTEFHUyAtc2hhcmVkICR3bC1leHBvcnRlZF9zeW1ib2wgJHt3bH1mb28gJHdsLXVwZGF0ZV9yZWdpc3RyeSAkd2wvZGV2L251bGwiCiAJICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogaW50IGZvbyAodm9pZCkgeyByZXR1cm4gMDsgfQpAQCAtMTAwNTIsMTkgKzEwNzM0LDE5IEBACiBmaQogcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCiAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLSAgICAgICAgICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKKyAgICAgICAgICAgTERGTEFHUz0kc2F2ZV9MREZMQUdTCiBmaQogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCIgPiY1CiAkYXNfZWNobyAiJGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sIiA+JjY7IH0KLQlpZiB0ZXN0ICIkbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2wiID0geWVzOyB0aGVuCi0gICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAke3dsfS1leHBvcnRzX2ZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKwlpZiB0ZXN0IHllcyA9ICIkbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2wiOyB0aGVuCisgICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR3bC1zZXRfdmVyc2lvbiAkd2wkdmVyc3RyaW5nImAgJHdsLXVwZGF0ZV9yZWdpc3RyeSAkd2wkb3V0cHV0X29iamRpci9zb19sb2NhdGlvbnMgJHdsLWV4cG9ydHNfZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKIAlmaQogICAgICAgZWxzZQotCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0JYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1leHBvcnRzX2ZpbGUgJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJG91dHB1dF9vYmpkaXIvc29fbG9jYXRpb25zIC1vICRsaWInCisJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICRvdXRwdXRfb2JqZGlyL3NvX2xvY2F0aW9ucyAtZXhwb3J0c19maWxlICRleHBvcnRfc3ltYm9scyAtbyAkbGliJwogICAgICAgZmkKICAgICAgIGFyY2hpdmVfY21kc19uZWVkX2xjPSdubycKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR3bC1ycGF0aCAkd2wkbGliZGlyJwogICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06CiAgICAgICBpbmhlcml0X3JwYXRoPXllcwogICAgICAgbGlua19hbGxfZGVwbGlicz15ZXMKQEAgLTEwMDg0LDcgKzEwNzY2LDcgQEAKICAgICBuZXdzb3M2KQogICAgICAgYXJjaGl2ZV9jbWRzPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCiAgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSckd2wtcnBhdGggJHdsJGxpYmRpcicKICAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgogICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubwogICAgICAgOzsKQEAgLTEwMDkyLDI3ICsxMDc3NCwxOSBAQAogICAgICpudG8qIHwgKnFueCopCiAgICAgICA7OwogCi0gICAgb3BlbmJzZCopCisgICAgb3BlbmJzZCogfCBiaXRyaWcqKQogICAgICAgaWYgdGVzdCAtZiAvdXNyL2xpYmV4ZWMvbGQuc287IHRoZW4KIAloYXJkY29kZV9kaXJlY3Q9eWVzCiAJaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubwogCWhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZT15ZXMKLQlpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCisJaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfX2AiOyB0aGVuCiAJICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQkgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlLCRleHBvcnRfc3ltYm9scycKLQkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoLCRsaWJkaXInCi0JICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR7d2x9LUUnCisJICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXJldGFpbi1zeW1ib2xzLWZpbGUsJGV4cG9ydF9zeW1ib2xzJworCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHdsLXJwYXRoLCRsaWJkaXInCisJICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR3bC1FJwogCWVsc2UKLQkgIGNhc2UgJGhvc3Rfb3MgaW4KLQkgICBvcGVuYnNkWzAxXS4qIHwgb3BlbmJzZDIuWzAtN10gfCBvcGVuYnNkMi5bMC03XS4qKQotCSAgICAgYXJjaGl2ZV9jbWRzPSckTEQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotCSAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJwotCSAgICAgOzsKLQkgICAqKQotCSAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCwkbGliZGlyJwotCSAgICAgOzsKLQkgIGVzYWMKKwkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHdsLXJwYXRoLCRsaWJkaXInCiAJZmkKICAgICAgIGVsc2UKIAlsZF9zaGxpYnM9bm8KQEAgLTEwMTI4LDI4ICsxMDgwMiwyOCBAQAogICAgICAgOzsKIAogICAgIG9zZjMqKQotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLQlhbGxvd191bmRlZmluZWRfZmxhZz0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCi0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworICAgICAgaWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KKwlhbGxvd191bmRlZmluZWRfZmxhZz0nICR3bC1leHBlY3RfdW5yZXNvbHZlZCAkd2xcKicKKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkJGFsbG93X3VuZGVmaW5lZF9mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR3bC1zZXRfdmVyc2lvbiAkd2wkdmVyc3RyaW5nImAgJHdsLXVwZGF0ZV9yZWdpc3RyeSAkd2wkb3V0cHV0X29iamRpci9zb19sb2NhdGlvbnMgLW8gJGxpYicKICAgICAgIGVsc2UKIAlhbGxvd191bmRlZmluZWRfZmxhZz0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCRhbGxvd191bmRlZmluZWRfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJG91dHB1dF9vYmpkaXIvc29fbG9jYXRpb25zIC1vICRsaWInCiAgICAgICBmaQogICAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGM9J25vJwotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHdsLXJwYXRoICR3bCRsaWJkaXInCiAgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKICAgICAgIDs7CiAKICAgICBvc2Y0KiB8IG9zZjUqKQkjIGFzIG9zZjMqIHdpdGggdGhlIGFkZGl0aW9uIG9mIC1tc3ltIGZsYWcKLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0JYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJwotCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LW1zeW0gJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLQloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICBpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgorCWFsbG93X3VuZGVmaW5lZF9mbGFnPScgJHdsLWV4cGVjdF91bnJlc29sdmVkICR3bFwqJworCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtbXN5bSAkd2wtc29uYW1lICR3bCRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR3bC1zZXRfdmVyc2lvbiAkd2wkdmVyc3RyaW5nImAgJHdsLXVwZGF0ZV9yZWdpc3RyeSAkd2wkb3V0cHV0X29iamRpci9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSckd2wtcnBhdGggJHdsJGxpYmRpcicKICAgICAgIGVsc2UKIAlhbGxvd191bmRlZmluZWRfZmxhZz0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1tc3ltIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCRhbGxvd191bmRlZmluZWRfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW1zeW0gLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJG91dHB1dF9vYmpkaXIvc29fbG9jYXRpb25zIC1vICRsaWInCiAJYXJjaGl2ZV9leHBzeW1fY21kcz0nZm9yIGkgaW4gYGNhdCAkZXhwb3J0X3N5bWJvbHNgOyBkbyBwcmludGYgIiVzICVzXFxuIiAtZXhwb3J0ZWRfc3ltYm9sICJcJGkiID4+ICRsaWIuZXhwOyBkb25lOyBwcmludGYgIiVzXFxuIiAiLWhpZGRlbiI+PiAkbGliLmV4cH4KLQkkQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICR7d2x9LWlucHV0ICR7d2x9JGxpYi5leHAgJGNvbXBpbGVyX2ZsYWdzICRsaWJvYmpzICRkZXBsaWJzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgJEVDSE8gIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGlifiRSTSAkbGliLmV4cCcKKyAgICAgICAgICAkQ0MgLXNoYXJlZCRhbGxvd191bmRlZmluZWRfZmxhZyAkd2wtaW5wdXQgJHdsJGxpYi5leHAgJGNvbXBpbGVyX2ZsYWdzICRsaWJvYmpzICRkZXBsaWJzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgJEVDSE8gIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAkb3V0cHV0X29iamRpci9zb19sb2NhdGlvbnMgLW8gJGxpYn4kUk0gJGxpYi5leHAnCiAKIAkjIEJvdGggYyBhbmQgY3h4IGNvbXBpbGVyIHN1cHBvcnQgLXJwYXRoIGRpcmVjdGx5CiAJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLXJwYXRoICRsaWJkaXInCkBAIC0xMDE2MCwyNCArMTA4MzQsMjQgQEAKIAogICAgIHNvbGFyaXMqKQogICAgICAgbm9fdW5kZWZpbmVkX2ZsYWc9JyAteiBkZWZzJwotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLQl3bGFyYz0nJHt3bH0nCi0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0teiAke3dsfXRleHQgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgorCXdsYXJjPSckd2wnCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHdsLXogJHt3bH10ZXh0ICR3bC1oICR3bCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCiAJYXJjaGl2ZV9leHBzeW1fY21kcz0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgotCSAgJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LU0gJHt3bH0kbGliLmV4cCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisgICAgICAgICAgJENDIC1zaGFyZWQgJHBpY19mbGFnICR3bC16ICR7d2x9dGV4dCAkd2wtTSAkd2wkbGliLmV4cCAkd2wtaCAkd2wkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKICAgICAgIGVsc2UKIAljYXNlIGAkQ0MgLVYgMj4mMWAgaW4KIAkqIkNvbXBpbGVycyA1LjAiKikKIAkgIHdsYXJjPScnCi0JICBhcmNoaXZlX2NtZHM9JyRMRCAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworCSAgYXJjaGl2ZV9jbWRzPSckTEQgLUckYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCiAJICBhcmNoaXZlX2V4cHN5bV9jbWRzPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+Ci0JICAkTEQgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtTSAkbGliLmV4cCAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFnc34kUk0gJGxpYi5leHAnCisgICAgICAgICAgICAkTEQgLUckYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLU0gJGxpYi5leHAgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3N+JFJNICRsaWIuZXhwJwogCSAgOzsKIAkqKQotCSAgd2xhcmM9JyR7d2x9JwotCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgd2xhcmM9JyR3bCcKKwkgIGFyY2hpdmVfY21kcz0nJENDIC1HJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCiAJICBhcmNoaXZlX2V4cHN5bV9jbWRzPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+Ci0JICAkQ0MgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtTSAkbGliLmV4cCAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKyAgICAgICAgICAgICRDQyAtRyRhbGxvd191bmRlZmluZWRfZmxhZyAtTSAkbGliLmV4cCAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKIAkgIDs7CiAJZXNhYwogICAgICAgZmkKQEAgLTEwMTg3LDExICsxMDg2MSwxMSBAQAogICAgICAgc29sYXJpczIuWzAtNV0gfCBzb2xhcmlzMi5bMC01XS4qKSA7OwogICAgICAgKikKIAkjIFRoZSBjb21waWxlciBkcml2ZXIgd2lsbCBjb21iaW5lIGFuZCByZW9yZGVyIGxpbmtlciBvcHRpb25zLAotCSMgYnV0IHVuZGVyc3RhbmRzIGAteiBsaW5rZXJfZmxhZycuICBHQ0MgZGlzY2FyZHMgaXQgd2l0aG91dCBgJHdsJywKKwkjIGJ1dCB1bmRlcnN0YW5kcyAnLXogbGlua2VyX2ZsYWcnLiAgR0NDIGRpc2NhcmRzIGl0IHdpdGhvdXQgJyR3bCcsCiAJIyBidXQgaXMgY2FyZWZ1bCBlbm91Z2ggbm90IHRvIHJlb3JkZXIuCiAJIyBTdXBwb3J0ZWQgc2luY2UgU29sYXJpcyAyLjYgKG1heWJlIDIuNS4xPykKLQlpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JyR7d2x9LXogJHt3bH1hbGxleHRyYWN0JGNvbnZlbmllbmNlICR7d2x9LXogJHt3bH1kZWZhdWx0ZXh0cmFjdCcKKwlpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgorCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JyR3bC16ICR7d2x9YWxsZXh0cmFjdCRjb252ZW5pZW5jZSAkd2wteiAke3dsfWRlZmF1bHRleHRyYWN0JwogCWVsc2UKIAkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPScteiBhbGxleHRyYWN0JGNvbnZlbmllbmNlIC16IGRlZmF1bHRleHRyYWN0JwogCWZpCkBAIC0xMDIwMSwxMCArMTA4NzUsMTAgQEAKICAgICAgIDs7CiAKICAgICBzdW5vczQqKQotICAgICAgaWYgdGVzdCAieCRob3N0X3ZlbmRvciIgPSB4c2VxdWVudDsgdGhlbgorICAgICAgaWYgdGVzdCBzZXF1ZW50ID0gIiRob3N0X3ZlbmRvciI7IHRoZW4KIAkjIFVzZSAkQ0MgdG8gbGluayB1bmRlciBzZXF1ZW50LCBiZWNhdXNlIGl0IHRocm93cyBpbiBzb21lIGV4dHJhIC5vCiAJIyBmaWxlcyB0aGF0IG1ha2UgLmluaXQgYW5kIC5maW5pIHNlY3Rpb25zIHdvcmsuCi0JYXJjaGl2ZV9jbWRzPSckQ0MgLUcgJHt3bH0taCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCWFyY2hpdmVfY21kcz0nJENDIC1HICR3bC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCiAgICAgICBlbHNlCiAJYXJjaGl2ZV9jbWRzPSckTEQgLWFzc2VydCBwdXJlLXRleHQgLUJzdGF0aWMgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwogICAgICAgZmkKQEAgLTEwMjUzLDQzICsxMDkyNyw0MyBAQAogICAgICAgOzsKIAogICAgIHN5c3Y0KnV3MiogfCBzeXN2NU9wZW5VTklYKiB8IHN5c3Y1VW5peFdhcmU3LlswMV0uWzEwXSogfCB1bml4d2FyZTcqIHwgc2NvMy4ydjUuMC5bMDI0XSopCi0gICAgICBub191bmRlZmluZWRfZmxhZz0nJHt3bH0teix0ZXh0JworICAgICAgbm9fdW5kZWZpbmVkX2ZsYWc9JyR3bC16LHRleHQnCiAgICAgICBhcmNoaXZlX2NtZHNfbmVlZF9sYz1ubwogICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubwogICAgICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJwogCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgIGlmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICR3bC1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwogICAgICAgZWxzZQotCWFyY2hpdmVfY21kcz0nJENDIC1HICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLUcgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCWFyY2hpdmVfY21kcz0nJENDIC1HICR3bC1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1HICR3bC1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwogICAgICAgZmkKICAgICAgIDs7CiAKICAgICBzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqKQotICAgICAgIyBOb3RlOiBXZSBjYW4gTk9UIHVzZSAteiBkZWZzIGFzIHdlIG1pZ2h0IGRlc2lyZSwgYmVjYXVzZSB3ZSBkbyBub3QKKyAgICAgICMgTm90ZTogV2UgQ0FOTk9UIHVzZSAteiBkZWZzIGFzIHdlIG1pZ2h0IGRlc2lyZSwgYmVjYXVzZSB3ZSBkbyBub3QKICAgICAgICMgbGluayB3aXRoIC1sYywgYW5kIHRoYXQgd291bGQgY2F1c2UgYW55IHN5bWJvbHMgdXNlZCBmcm9tIGxpYmMgdG8KICAgICAgICMgYWx3YXlzIGJlIHVucmVzb2x2ZWQsIHdoaWNoIG1lYW5zIGp1c3QgYWJvdXQgbm8gbGlicmFyeSB3b3VsZAogICAgICAgIyBldmVyIGxpbmsgY29ycmVjdGx5LiAgSWYgd2UncmUgbm90IHVzaW5nIEdOVSBsZCB3ZSB1c2UgLXogdGV4dAogICAgICAgIyB0aG91Z2gsIHdoaWNoIGRvZXMgY2F0Y2ggc29tZSBiYWQgc3ltYm9scyBidXQgaXNuJ3QgYXMgaGVhdnktaGFuZGVkCiAgICAgICAjIGFzIC16IGRlZnMuCi0gICAgICBub191bmRlZmluZWRfZmxhZz0nJHt3bH0teix0ZXh0JwotICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyR7d2x9LXosbm9kZWZzJworICAgICAgbm9fdW5kZWZpbmVkX2ZsYWc9JyR3bC16LHRleHQnCisgICAgICBhbGxvd191bmRlZmluZWRfZmxhZz0nJHdsLXosbm9kZWZzJwogICAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGM9bm8KICAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LVIsJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR3bC1SLCRsaWJkaXInCiAgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPSc6JwogICAgICAgbGlua19hbGxfZGVwbGlicz15ZXMKLSAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHt3bH0tQmV4cG9ydCcKKyAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHdsLUJleHBvcnQnCiAgICAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCiAKLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgaWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICR3bC1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHdsLUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR3bC1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCiAgICAgICBlbHNlCi0JYXJjaGl2ZV9jbWRzPSckQ0MgLUcgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtRyAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJYXJjaGl2ZV9jbWRzPSckQ0MgLUcgJHdsLWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLUcgJHdsLUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR3bC1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCiAgICAgICBmaQogICAgICAgOzsKIApAQCAtMTAzMDQsMTAgKzEwOTc4LDEwIEBACiAgICAgICA7OwogICAgIGVzYWMKIAotICAgIGlmIHRlc3QgeCRob3N0X3ZlbmRvciA9IHhzbmk7IHRoZW4KKyAgICBpZiB0ZXN0IHNuaSA9ICIkaG9zdF92ZW5kb3IiOyB0aGVuCiAgICAgICBjYXNlICRob3N0IGluCiAgICAgICBzeXN2NCB8IHN5c3Y0LjJ1dzIqIHwgc3lzdjQuMyogfCBzeXN2NSopCi0JZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPScke3dsfS1CbGFyZ2VkeW5zeW0nCisJZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPSckd2wtQmxhcmdlZHluc3ltJwogCTs7CiAgICAgICBlc2FjCiAgICAgZmkKQEAgLTEwMzE1LDcgKzEwOTg5LDcgQEAKIAogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsZF9zaGxpYnMiID4mNQogJGFzX2VjaG8gIiRsZF9zaGxpYnMiID4mNjsgfQotdGVzdCAiJGxkX3NobGlicyIgPSBubyAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCit0ZXN0IG5vID0gIiRsZF9zaGxpYnMiICYmIGNhbl9idWlsZF9zaGFyZWQ9bm8KIAogd2l0aF9nbnVfbGQ9JHdpdGhfZ251X2xkCiAKQEAgLTEwMzQxLDcgKzExMDE1LDcgQEAKICAgIyBBc3N1bWUgLWxjIHNob3VsZCBiZSBhZGRlZAogICBhcmNoaXZlX2NtZHNfbmVlZF9sYz15ZXMKIAotICBpZiB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgaWYgdGVzdCB5ZXMseWVzID0gIiRHQ0MsJGVuYWJsZV9zaGFyZWQiOyB0aGVuCiAgICAgY2FzZSAkYXJjaGl2ZV9jbWRzIGluCiAgICAgKid+JyopCiAgICAgICAjIEZJWE1FOiB3ZSBtYXkgaGF2ZSB0byBkZWFsIHdpdGggbXVsdGktY29tbWFuZCBzZXF1ZW5jZXMuCkBAIC0xMDU1NiwxNCArMTEyMzAsMTQgQEAKICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBkeW5hbWljIGxpbmtlciBjaGFyYWN0ZXJpc3RpY3MiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZHluYW1pYyBsaW5rZXIgY2hhcmFjdGVyaXN0aWNzLi4uICIgPiY2OyB9CiAKLWlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCitpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgogICBjYXNlICRob3N0X29zIGluCi0gICAgZGFyd2luKikgbHRfYXdrX2FyZz0iL15saWJyYXJpZXM6LywvTFIvIiA7OwotICAgICopIGx0X2F3a19hcmc9Ii9ebGlicmFyaWVzOi8iIDs7CisgICAgZGFyd2luKikgbHRfYXdrX2FyZz0nL15saWJyYXJpZXM6LywvTFIvJyA7OworICAgICopIGx0X2F3a19hcmc9Jy9ebGlicmFyaWVzOi8nIDs7CiAgIGVzYWMKICAgY2FzZSAkaG9zdF9vcyBpbgotICAgIG1pbmd3KiB8IGNlZ2NjKikgbHRfc2VkX3N0cmlwX2VxPSJzLD1cKFtBLVphLXpdOlwpLFwxLGciIDs7Ci0gICAgKikgbHRfc2VkX3N0cmlwX2VxPSJzLD0vLC8sZyIgOzsKKyAgICBtaW5ndyogfCBjZWdjYyopIGx0X3NlZF9zdHJpcF9lcT0nc3w9XChbQS1aYS16XTpcKXxcMXxnJyA7OworICAgICopIGx0X3NlZF9zdHJpcF9lcT0nc3w9L3wvfGcnIDs7CiAgIGVzYWMKICAgbHRfc2VhcmNoX3BhdGhfc3BlYz1gJENDIC1wcmludC1zZWFyY2gtZGlycyB8IGF3ayAkbHRfYXdrX2FyZyB8ICRTRUQgLWUgInMvXmxpYnJhcmllczovLyIgLWUgJGx0X3NlZF9zdHJpcF9lcWAKICAgY2FzZSAkbHRfc2VhcmNoX3BhdGhfc3BlYyBpbgpAQCAtMTA1NzksMjggKzExMjUzLDM1IEBACiAgICAgOzsKICAgZXNhYwogICAjIE9rLCBub3cgd2UgaGF2ZSB0aGUgcGF0aCwgc2VwYXJhdGVkIGJ5IHNwYWNlcywgd2UgY2FuIHN0ZXAgdGhyb3VnaCBpdAotICAjIGFuZCBhZGQgbXVsdGlsaWIgZGlyIGlmIG5lY2Vzc2FyeS4KKyAgIyBhbmQgYWRkIG11bHRpbGliIGRpciBpZiBuZWNlc3NhcnkuLi4KICAgbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWM9Ci0gIGx0X211bHRpX29zX2Rpcj1gJENDICRDUFBGTEFHUyAkQ0ZMQUdTICRMREZMQUdTIC1wcmludC1tdWx0aS1vcy1kaXJlY3RvcnkgMj4vZGV2L251bGxgCisgIGx0X211bHRpX29zX2Rpcj0vYCRDQyAkQ1BQRkxBR1MgJENGTEFHUyAkTERGTEFHUyAtcHJpbnQtbXVsdGktb3MtZGlyZWN0b3J5IDI+L2Rldi9udWxsYAorICAjIC4uLmJ1dCBpZiBzb21lIHBhdGggY29tcG9uZW50IGFscmVhZHkgZW5kcyB3aXRoIHRoZSBtdWx0aWxpYiBkaXIgd2UgYXNzdW1lCisgICMgdGhhdCBhbGwgaXMgZmluZSBhbmQgdHJ1c3QgLXByaW50LXNlYXJjaC1kaXJzIGFzIGlzIChHQ0MgNC4yPyBvciBuZXdlcikuCisgIGNhc2UgIiRsdF9tdWx0aV9vc19kaXI7ICRsdF9zZWFyY2hfcGF0aF9zcGVjICIgaW4KKyAgIi87ICIqIHwgIi8uOyAiKiB8ICIvLi87ICIqIHwgKiIkbHRfbXVsdGlfb3NfZGlyICIqIHwgKiIkbHRfbXVsdGlfb3NfZGlyLyAiKikKKyAgICBsdF9tdWx0aV9vc19kaXI9CisgICAgOzsKKyAgZXNhYwogICBmb3IgbHRfc3lzX3BhdGggaW4gJGx0X3NlYXJjaF9wYXRoX3NwZWM7IGRvCi0gICAgaWYgdGVzdCAtZCAiJGx0X3N5c19wYXRoLyRsdF9tdWx0aV9vc19kaXIiOyB0aGVuCi0gICAgICBsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYz0iJGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjICRsdF9zeXNfcGF0aC8kbHRfbXVsdGlfb3NfZGlyIgotICAgIGVsc2UKKyAgICBpZiB0ZXN0IC1kICIkbHRfc3lzX3BhdGgkbHRfbXVsdGlfb3NfZGlyIjsgdGhlbgorICAgICAgbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWM9IiRsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYyAkbHRfc3lzX3BhdGgkbHRfbXVsdGlfb3NfZGlyIgorICAgIGVsaWYgdGVzdCAtbiAiJGx0X211bHRpX29zX2RpciI7IHRoZW4KICAgICAgIHRlc3QgLWQgIiRsdF9zeXNfcGF0aCIgJiYgXAogCWx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjPSIkbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWMgJGx0X3N5c19wYXRoIgogICAgIGZpCiAgIGRvbmUKICAgbHRfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYyIgfCBhd2sgJwotQkVHSU4ge1JTPSIgIjsgRlM9Ii98XG4iO30gewotICBsdF9mb289IiI7Ci0gIGx0X2NvdW50PTA7CitCRUdJTiB7UlMgPSAiICI7IEZTID0gIi98XG4iO30geworICBsdF9mb28gPSAiIjsKKyAgbHRfY291bnQgPSAwOwogICBmb3IgKGx0X2kgPSBORjsgbHRfaSA+IDA7IGx0X2ktLSkgewogICAgIGlmICgkbHRfaSAhPSAiIiAmJiAkbHRfaSAhPSAiLiIpIHsKICAgICAgIGlmICgkbHRfaSA9PSAiLi4iKSB7CiAgICAgICAgIGx0X2NvdW50Kys7CiAgICAgICB9IGVsc2UgewogICAgICAgICBpZiAobHRfY291bnQgPT0gMCkgewotICAgICAgICAgIGx0X2Zvbz0iLyIgJGx0X2kgbHRfZm9vOworICAgICAgICAgIGx0X2ZvbyA9ICIvIiAkbHRfaSBsdF9mb287CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgbHRfY291bnQtLTsKICAgICAgICAgfQpAQCAtMTA2MTQsNyArMTEyOTUsNyBAQAogICAjIGZvciB0aGVzZSBob3N0cy4KICAgY2FzZSAkaG9zdF9vcyBpbgogICAgIG1pbmd3KiB8IGNlZ2NjKikgbHRfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRsdF9zZWFyY2hfcGF0aF9zcGVjIiB8XAotICAgICAgJFNFRCAncywvXChbQS1aYS16XTpcKSxcMSxnJ2AgOzsKKyAgICAgICRTRUQgJ3N8L1woW0EtWmEtel06XCl8XDF8ZydgIDs7CiAgIGVzYWMKICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJGx0X3NlYXJjaF9wYXRoX3NwZWMiIHwgJGx0X05MMlNQYAogZWxzZQpAQCAtMTA2MjMsNyArMTEzMDQsNyBAQAogbGlicmFyeV9uYW1lc19zcGVjPQogbGlibmFtZV9zcGVjPSdsaWIkbmFtZScKIHNvbmFtZV9zcGVjPQotc2hyZXh0X2NtZHM9Ii5zbyIKK3NocmV4dF9jbWRzPS5zbwogcG9zdGluc3RhbGxfY21kcz0KIHBvc3R1bmluc3RhbGxfY21kcz0KIGZpbmlzaF9jbWRzPQpAQCAtMTA2NDMsMTEgKzExMzI0LDExIEBACiBjYXNlICRob3N0X29zIGluCiBhaXgzKikKICAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJGxpYm5hbWUuYScKKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lLmEnCiAgIHNobGlicGF0aF92YXI9TElCUEFUSAogCiAgICMgQUlYIDMgaGFzIG5vIHZlcnNpb25pbmcgc3VwcG9ydCwgc28gd2UgYXBwZW5kIGEgbWFqb3IgdmVyc2lvbiB0byB0aGUgbmFtZS4KLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKICAgOzsKIAogYWl4WzQtOV0qKQpAQCAtMTA2NTUsNDAgKzExMzM2LDQwIEBACiAgIG5lZWRfbGliX3ByZWZpeD1ubwogICBuZWVkX3ZlcnNpb249bm8KICAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorICBpZiB0ZXN0IGlhNjQgPSAiJGhvc3RfY3B1IjsgdGhlbgogICAgICMgQUlYIDUgc3VwcG9ydHMgSUE2NAotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkc2hhcmVkX2V4dCcKICAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAogICBlbHNlCiAgICAgIyBXaXRoIEdDQyB1cCB0byAyLjk1LngsIGNvbGxlY3QyIHdvdWxkIGNyZWF0ZSBhbiBpbXBvcnQgZmlsZQogICAgICMgZm9yIGRlcGVuZGVuY2UgbGlicmFyaWVzLiAgVGhlIGltcG9ydCBmaWxlIHdvdWxkIHN0YXJ0IHdpdGgKLSAgICAjIHRoZSBsaW5lIGAjISAuJy4gIFRoaXMgd291bGQgY2F1c2UgdGhlIGdlbmVyYXRlZCBsaWJyYXJ5IHRvCi0gICAgIyBkZXBlbmQgb24gYC4nLCBhbHdheXMgYW4gaW52YWxpZCBsaWJyYXJ5LiAgVGhpcyB3YXMgZml4ZWQgaW4KKyAgICAjIHRoZSBsaW5lICcjISAuJy4gIFRoaXMgd291bGQgY2F1c2UgdGhlIGdlbmVyYXRlZCBsaWJyYXJ5IHRvCisgICAgIyBkZXBlbmQgb24gJy4nLCBhbHdheXMgYW4gaW52YWxpZCBsaWJyYXJ5LiAgVGhpcyB3YXMgZml4ZWQgaW4KICAgICAjIGRldmVsb3BtZW50IHNuYXBzaG90cyBvZiBHQ0MgcHJpb3IgdG8gMy4wLgogICAgIGNhc2UgJGhvc3Rfb3MgaW4KICAgICAgIGFpeDQgfCBhaXg0LlswMV0gfCBhaXg0LlswMV0uKikKICAgICAgIGlmIHsgZWNobyAnI2lmIF9fR05VQ19fID4gMiB8fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA+PSA5NyknCiAJICAgZWNobyAnIHllcyAnCi0JICAgZWNobyAnI2VuZGlmJzsgfSB8ICR7Q0N9IC1FIC0gfCAkR1JFUCB5ZXMgPiAvZGV2L251bGw7IHRoZW4KKwkgICBlY2hvICcjZW5kaWYnOyB9IHwgJENDIC1FIC0gfCAkR1JFUCB5ZXMgPiAvZGV2L251bGw7IHRoZW4KIAk6CiAgICAgICBlbHNlCiAJY2FuX2J1aWxkX3NoYXJlZD1ubwogICAgICAgZmkKICAgICAgIDs7CiAgICAgZXNhYwotICAgICMgQUlYIChvbiBQb3dlciopIGhhcyBubyB2ZXJzaW9uaW5nIHN1cHBvcnQsIHNvIGN1cnJlbnRseSB3ZSBjYW4gbm90IGhhcmRjb2RlIGNvcnJlY3QKKyAgICAjIEFJWCAob24gUG93ZXIqKSBoYXMgbm8gdmVyc2lvbmluZyBzdXBwb3J0LCBzbyBjdXJyZW50bHkgd2UgY2Fubm90IGhhcmRjb2RlIGNvcnJlY3QKICAgICAjIHNvbmFtZSBpbnRvIGV4ZWN1dGFibGUuIFByb2JhYmx5IHdlIGNhbiBhZGQgdmVyc2lvbmluZyBzdXBwb3J0IHRvCiAgICAgIyBjb2xsZWN0Miwgc28gYWRkaXRpb25hbCBsaW5rcyBjYW4gYmUgdXNlZnVsIGluIGZ1dHVyZS4KLSAgICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KKyAgICBpZiB0ZXN0IHllcyA9ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyI7IHRoZW4KICAgICAgICMgSWYgdXNpbmcgcnVuIHRpbWUgbGlua2luZyAob24gQUlYIDQuMiBvciBsYXRlcikgdXNlIGxpYjxuYW1lPi5zbwogICAgICAgIyBpbnN0ZWFkIG9mIGxpYjxuYW1lPi5hIHRvIGxldCBwZW9wbGUga25vdyB0aGF0IHRoZXNlIGFyZSBub3QKICAgICAgICMgdHlwaWNhbCBBSVggc2hhcmVkIGxpYnJhcmllcy4KLSAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JwogICAgIGVsc2UKICAgICAgICMgV2UgcHJlc2VydmUgLmEgYXMgZXh0ZW5zaW9uIGZvciBzaGFyZWQgbGlicmFyaWVzIHRocm91Z2ggQUlYNC4yCiAgICAgICAjIGFuZCBsYXRlciB3aGVuIHdlIGFyZSBub3QgZG9pbmcgcnVuIHRpbWUgbGlua2luZy4KLSAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0uYSAkbGlibmFtZS5hJwotICAgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZS5hICRsaWJuYW1lLmEnCisgICAgICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJwogICAgIGZpCiAgICAgc2hsaWJwYXRoX3Zhcj1MSUJQQVRICiAgIGZpCkBAIC0xMDY5OSwxOCArMTEzODAsMTggQEAKICAgcG93ZXJwYykKICAgICAjIFNpbmNlIEp1bHkgMjAwNyBBbWlnYU9TNCBvZmZpY2lhbGx5IHN1cHBvcnRzIC5zbyBsaWJyYXJpZXMuCiAgICAgIyBXaGVuIGNvbXBpbGluZyB0aGUgZXhlY3V0YWJsZSwgYWRkIC11c2UtZHlubGQgLUxzb2JqczogdG8gdGhlIGNvbXBpbGVsaW5lLgotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKICAgICA7OwogICBtNjhrKQogICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuaXhsaWJyYXJ5ICRsaWJuYW1lLmEnCiAgICAgIyBDcmVhdGUgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSBlbnRyaWVzIGluIC9zeXMvbGlicy4KLSAgICBmaW5pc2hfZXZhbD0nZm9yIGxpYiBpbiBgbHMgJGxpYmRpci8qLml4bGlicmFyeSAyPi9kZXYvbnVsbGA7IGRvIGxpYm5hbWU9YGZ1bmNfZWNob19hbGwgIiRsaWIiIHwgJFNFRCAnXCcncyVeLiovXChbXi9dKlwpXC5peGxpYnJhcnkkJVwxJSdcJydgOyB0ZXN0ICRSTSAvc3lzL2xpYnMvJHtsaWJuYW1lfV9peGxpYnJhcnkuYTsgJHNob3cgImNkIC9zeXMvbGlicyAmJiAkTE5fUyAkbGliICR7bGlibmFtZX1faXhsaWJyYXJ5LmEiOyBjZCAvc3lzL2xpYnMgJiYgJExOX1MgJGxpYiAke2xpYm5hbWV9X2l4bGlicmFyeS5hIHx8IGV4aXQgMTsgZG9uZScKKyAgICBmaW5pc2hfZXZhbD0nZm9yIGxpYiBpbiBgbHMgJGxpYmRpci8qLml4bGlicmFyeSAyPi9kZXYvbnVsbGA7IGRvIGxpYm5hbWU9YGZ1bmNfZWNob19hbGwgIiRsaWIiIHwgJFNFRCAnXCcncyVeLiovXChbXi9dKlwpXC5peGxpYnJhcnkkJVwxJSdcJydgOyAkUk0gL3N5cy9saWJzLyR7bGlibmFtZX1faXhsaWJyYXJ5LmE7ICRzaG93ICJjZCAvc3lzL2xpYnMgJiYgJExOX1MgJGxpYiAke2xpYm5hbWV9X2l4bGlicmFyeS5hIjsgY2QgL3N5cy9saWJzICYmICRMTl9TICRsaWIgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSB8fCBleGl0IDE7IGRvbmUnCiAgICAgOzsKICAgZXNhYwogICA7OwogCiBiZW9zKikKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaGFyZWRfZXh0JwogICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgbGQuc28iCiAgIHNobGlicGF0aF92YXI9TElCUkFSWV9QQVRICiAgIDs7CkBAIC0xMDcxOCw4ICsxMTM5OSw4IEBACiBic2RpWzQ1XSopCiAgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKICAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCiAgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnICRsaWJkaXInCiAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICiAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3NobGliIC91c3IvbGliIC91c3IvWDExL2xpYiAvdXNyL2NvbnRyaWIvbGliIC9saWIgL3Vzci9sb2NhbC9saWIiCkBAIC0xMDczMSw3ICsxMTQxMiw3IEBACiAKIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKICAgdmVyc2lvbl90eXBlPXdpbmRvd3MKLSAgc2hyZXh0X2NtZHM9Ii5kbGwiCisgIHNocmV4dF9jbWRzPS5kbGwKICAgbmVlZF92ZXJzaW9uPW5vCiAgIG5lZWRfbGliX3ByZWZpeD1ubwogCkBAIC0xMDc0MCw4ICsxMTQyMSw4IEBACiAgICAgIyBnY2MKICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmRsbC5hJwogICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKLSAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwke2ZpbGV9YH4KLSAgICAgIGRscGF0aD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGRpci8nXCcnXCR7YmFzZV9maWxlfSdcJydpOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisgICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJGZpbGVgfgorICAgICAgZGxwYXRoPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZGlyLydcJydcJGJhc2VfZmlsZSdcJydpOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CiAgICAgICBkbGRpcj0kZGVzdGRpci9gZGlybmFtZSBcJGRscGF0aGB+CiAgICAgICB0ZXN0IC1kIFwkZGxkaXIgfHwgbWtkaXIgLXAgXCRkbGRpcn4KICAgICAgICRpbnN0YWxsX3Byb2cgJGRpci8kZGxuYW1lIFwkZGxkaXIvJGRsbmFtZX4KQEAgLTEwNzU3LDE3ICsxMTQzOCwxNyBAQAogICAgIGNhc2UgJGhvc3Rfb3MgaW4KICAgICBjeWd3aW4qKQogICAgICAgIyBDeWd3aW4gRExMcyB1c2UgJ2N5ZycgcHJlZml4IHJhdGhlciB0aGFuICdsaWInCi0gICAgICBzb25hbWVfc3BlYz0nYGVjaG8gJHtsaWJuYW1lfSB8IHNlZCAtZSAncy9ebGliL2N5Zy8nYGBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCisgICAgICBzb25hbWVfc3BlYz0nYGVjaG8gJGxpYm5hbWUgfCBzZWQgLWUgJ3MvXmxpYi9jeWcvJ2BgZWNobyAkcmVsZWFzZSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHZlcnN1ZmZpeCRzaGFyZWRfZXh0JwogCiAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgL3Vzci9saWIvdzMyYXBpIgogICAgICAgOzsKICAgICBtaW5ndyogfCBjZWdjYyopCiAgICAgICAjIE1pbkdXIERMTHMgdXNlIHRyYWRpdGlvbmFsICdsaWInIHByZWZpeAotICAgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworICAgICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lYGVjaG8gJHJlbGVhc2UgfCAkU0VEIC1lICdzL1suXS8tL2cnYCR2ZXJzdWZmaXgkc2hhcmVkX2V4dCcKICAgICAgIDs7CiAgICAgcHczMiopCiAgICAgICAjIHB3MzIgRExMcyB1c2UgJ3B3JyBwcmVmaXggcmF0aGVyIHRoYW4gJ2xpYicKLSAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nYGVjaG8gJHtsaWJuYW1lfSB8IHNlZCAtZSAncy9ebGliL3B3LydgYGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nYGVjaG8gJGxpYm5hbWUgfCBzZWQgLWUgJ3MvXmxpYi9wdy8nYGBlY2hvICRyZWxlYXNlIHwgJFNFRCAtZSAncy9bLl0vLS9nJ2AkdmVyc3VmZml4JHNoYXJlZF9leHQnCiAgICAgICA7OwogICAgIGVzYWMKICAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJwpAQCAtMTA3NzYsOCArMTE0NTcsOCBAQAogICAqLGNsKikKICAgICAjIE5hdGl2ZSBNU1ZDCiAgICAgbGlibmFtZV9zcGVjPSckbmFtZScKLSAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfWBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9LmRsbC5saWInCisgICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lYGVjaG8gJHJlbGVhc2UgfCAkU0VEIC1lICdzL1suXS8tL2cnYCR2ZXJzdWZmaXgkc2hhcmVkX2V4dCcKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmRsbC5saWInCiAKICAgICBjYXNlICRidWlsZF9vcyBpbgogICAgIG1pbmd3KikKQEAgLTEwODA0LDcgKzExNDg1LDcgQEAKICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS11bml4ICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCiAgICAgICA7OwogICAgICopCi0gICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRMSUIiCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9JExJQgogICAgICAgaWYgJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJEdSRVAgJztbYy16Qy1aXTovJyA+L2Rldi9udWxsOyB0aGVuCiAgICAgICAgICMgSXQgaXMgbW9zdCBwcm9iYWJseSBhIFdpbmRvd3MgZm9ybWF0IFBBVEguCiAgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAncy87LyAvZydgCkBAIC0xMDgxNyw4ICsxMTQ5OCw4IEBACiAgICAgZXNhYwogCiAgICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcwotICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCR7ZmlsZX1gfgotICAgICAgZGxwYXRoPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZGlyLydcJydcJHtiYXNlX2ZpbGV9J1wnJ2k7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKyAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwkZmlsZWB+CisgICAgICBkbHBhdGg9YCRTSEVMTCAyPiYxIC1jICdcJycuICRkaXIvJ1wnJ1wkYmFzZV9maWxlJ1wnJ2k7IGVjaG8gXCRkbG5hbWUnXCcnYH4KICAgICAgIGRsZGlyPSRkZXN0ZGlyL2BkaXJuYW1lIFwkZGxwYXRoYH4KICAgICAgIHRlc3QgLWQgXCRkbGRpciB8fCBta2RpciAtcCBcJGRsZGlyfgogICAgICAgJGluc3RhbGxfcHJvZyAkZGlyLyRkbG5hbWUgXCRkbGRpci8kZGxuYW1lJwpAQCAtMTA4MzEsNyArMTE1MTIsNyBAQAogCiAgICopCiAgICAgIyBBc3N1bWUgTVNWQyB3cmFwcGVyCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fSAkbGlibmFtZS5saWInCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZWBlY2hvICRyZWxlYXNlIHwgJFNFRCAtZSAncy9bLl0vLS9nJ2AkdmVyc3VmZml4JHNoYXJlZF9leHQgJGxpYm5hbWUubGliJwogICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCiAgICAgOzsKICAgZXNhYwpAQCAtMTA4NDQsOCArMTE1MjUsOCBAQAogICB2ZXJzaW9uX3R5cGU9ZGFyd2luCiAgIG5lZWRfbGliX3ByZWZpeD1ubwogICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7bWFqb3J9JHNoYXJlZF9leHQgJHtsaWJuYW1lfSRzaGFyZWRfZXh0JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke21ham9yfSRzaGFyZWRfZXh0JworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2UkbWFqb3Ikc2hhcmVkX2V4dCAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRtYWpvciRzaGFyZWRfZXh0JwogICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCiAgIHNobGlicGF0aF92YXI9RFlMRF9MSUJSQVJZX1BBVEgKICAgc2hyZXh0X2NtZHM9J2B0ZXN0IC4kbW9kdWxlID0gLnllcyAmJiBlY2hvIC5zbyB8fCBlY2hvIC5keWxpYmAnCkBAIC0xMDg1OCw4ICsxMTUzOSw4IEBACiAgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKICAgbmVlZF9saWJfcHJlZml4PW5vCiAgIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKICAgOzsKIApAQCAtMTA4NzcsMTIgKzExNTU4LDEyIEBACiAgIHZlcnNpb25fdHlwZT1mcmVlYnNkLSRvYmpmb3JtYXQKICAgY2FzZSAkdmVyc2lvbl90eXBlIGluCiAgICAgZnJlZWJzZC1lbGYqKQotICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0ICRsaWJuYW1lJHNoYXJlZF9leHQnCiAgICAgICBuZWVkX3ZlcnNpb249bm8KICAgICAgIG5lZWRfbGliX3ByZWZpeD1ubwogICAgICAgOzsKICAgICBmcmVlYnNkLSopCi0gICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJGxpYm5hbWUke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCcKICAgICAgIG5lZWRfdmVyc2lvbj15ZXMKICAgICAgIDs7CiAgIGVzYWMKQEAgLTEwOTA3LDI2ICsxMTU4OCwxNSBAQAogICBlc2FjCiAgIDs7CiAKLWdudSopCi0gIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHttYWpvcn0gJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIDs7Ci0KIGhhaWt1KikKICAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgogICBuZWVkX2xpYl9wcmVmaXg9bm8KICAgbmVlZF92ZXJzaW9uPW5vCiAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBydW50aW1lX2xvYWRlciIKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR7bWFqb3J9ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCiAgIHNobGlicGF0aF92YXI9TElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCiAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvYm9vdC9ob21lL2NvbmZpZy9saWIgL2Jvb3QvY29tbW9uL2xpYiAvYm9vdC9zeXN0ZW0vbGliJwogICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCiAgIDs7CkBAIC0xMDk0NCw5ICsxMTYxNCw5IEBACiAgICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGRsZC5zbyIKICAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAogICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMgIyBVbmxlc3MgK25vZW52dmFyIGlzIHNwZWNpZmllZC4KLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICAgIGlmIHRlc3QgIlgkSFBVWF9JQTY0X01PREUiID0gWDMyOyB0aGVuCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCisgICAgaWYgdGVzdCAzMiA9ICIkSFBVWF9JQTY0X01PREUiOyB0aGVuCiAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL2hwdXgzMiAvdXNyL2xvY2FsL2xpYi9ocHV4MzIgL3Vzci9sb2NhbC9saWIiCiAgICAgZWxzZQogICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYi9ocHV4NjQgL3Vzci9sb2NhbC9saWIvaHB1eDY0IgpAQCAtMTA5NTksOCArMTE2MjksOCBAQAogICAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkbGQuc2wiCiAgICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEggIyBIb3cgc2hvdWxkIHdlIGhhbmRsZSBTSExJQl9QQVRICiAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcyAjIFVubGVzcyArbm9lbnZ2YXIgaXMgc3BlY2lmaWVkLgotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCiAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYi9wYTIwXzY0IC91c3IvY2NzL2xpYi9wYTIwXzY0IgogICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKICAgICA7OwpAQCAtMTA5NjksOCArMTE2MzksOCBAQAogICAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkbGQuc2wiCiAgICAgc2hsaWJwYXRoX3Zhcj1TSExJQl9QQVRICiAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vICMgK3MgaXMgcmVxdWlyZWQgdG8gZW5hYmxlIFNITElCX1BBVEgKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJwogICAgIDs7CiAgIGVzYWMKICAgIyBIUC1VWCBydW5zICpyZWFsbHkqIHNsb3dseSB1bmxlc3Mgc2hhcmVkIGxpYnJhcmllcyBhcmUgbW9kZSA1NTUsIC4uLgpAQCAtMTA5ODMsOCArMTE2NTMsOCBAQAogICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCiAgIG5lZWRfbGliX3ByZWZpeD1ubwogICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJwogICBkeW5hbWljX2xpbmtlcj0nSW50ZXJpeCAzLnggbGQuc28uMSAoUEUsIGxpa2UgRUxGKScKICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCkBAIC0xMDk5NSw3ICsxMTY2NSw3IEBACiAgIGNhc2UgJGhvc3Rfb3MgaW4KICAgICBub25zdG9wdXgqKSB2ZXJzaW9uX3R5cGU9bm9uc3RvcHV4IDs7CiAgICAgKikKLQlpZiB0ZXN0ICIkbHRfY3ZfcHJvZ19nbnVfbGQiID0geWVzOyB0aGVuCisJaWYgdGVzdCB5ZXMgPSAiJGx0X2N2X3Byb2dfZ251X2xkIjsgdGhlbgogCQl2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCiAJZWxzZQogCQl2ZXJzaW9uX3R5cGU9aXJpeApAQCAtMTEwMDMsOCArMTE2NzMsOCBAQAogICBlc2FjCiAgIG5lZWRfbGliX3ByZWZpeD1ubwogICBuZWVkX3ZlcnNpb249bm8KLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCAkbGlibmFtZSRzaGFyZWRfZXh0JwogICBjYXNlICRob3N0X29zIGluCiAgIGlyaXg1KiB8IG5vbnN0b3B1eCopCiAgICAgbGlic3VmZj0gc2hsaWJzdWZmPQpAQCAtMTEwMjMsOCArMTE2OTMsOCBAQAogICBlc2FjCiAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWSR7c2hsaWJzdWZmfV9QQVRICiAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliJHtsaWJzdWZmfSAvbGliJHtsaWJzdWZmfSAvdXNyL2xvY2FsL2xpYiR7bGlic3VmZn0iCi0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiR7bGlic3VmZn0gL2xpYiR7bGlic3VmZn0iCisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIkbGlic3VmZiAvbGliJGxpYnN1ZmYgL3Vzci9sb2NhbC9saWIkbGlic3VmZiIKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliJGxpYnN1ZmYgL2xpYiRsaWJzdWZmIgogICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCiAgIDs7CiAKQEAgLTExMDMzLDEzICsxMTcwMywzMyBAQAogICBkeW5hbWljX2xpbmtlcj1ubwogICA7OwogCitsaW51eCphbmRyb2lkKikKKyAgdmVyc2lvbl90eXBlPW5vbmUgIyBBbmRyb2lkIGRvZXNuJ3Qgc3VwcG9ydCB2ZXJzaW9uZWQgbGlicmFyaWVzLgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JworICBmaW5pc2hfY21kcz0KKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworCisgICMgVGhpcyBpbXBsaWVzIG5vIGZhc3RfaW5zdGFsbCwgd2hpY2ggaXMgdW5hY2NlcHRhYmxlLgorICAjIFNvbWUgcmV3b3JrIHdpbGwgYmUgbmVlZGVkIHRvIGFsbG93IGZvciBmYXN0X2luc3RhbGwKKyAgIyBiZWZvcmUgdGhpcyBjYW4gYmUgZW5hYmxlZC4KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworCisgIGR5bmFtaWNfbGlua2VyPSdBbmRyb2lkIGxpbmtlcicKKyAgIyBEb24ndCBlbWJlZCAtcnBhdGggZGlyZWN0b3JpZXMgc2luY2UgdGhlIGxpbmtlciBkb2Vzbid0IHN1cHBvcnQgdGhlbS4KKyAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICA7OworCiAjIFRoaXMgbXVzdCBiZSBnbGliYy9FTEYuCi1saW51eCogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUpCitsaW51eCogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUgfCBnbnUqKQogICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCiAgIG5lZWRfbGliX3ByZWZpeD1ubwogICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKICAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW4gJGxpYmRpcicKICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCkBAIC0xMTA4MywxNCArMTE3NzMsMTAgQEAKICAgIyBiZWZvcmUgdGhpcyBjYW4gYmUgZW5hYmxlZC4KICAgaGFyZGNvZGVfaW50b19saWJzPXllcwogCi0gICMgQWRkIEFCSS1zcGVjaWZpYyBkaXJlY3RvcmllcyB0byB0aGUgc3lzdGVtIGxpYnJhcnkgcGF0aC4KLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii9saWI2NCAvdXNyL2xpYjY0IC9saWIgL3Vzci9saWIiCi0KICAgIyBBcHBlbmQgbGQuc28uY29uZiBjb250ZW50cyB0byB0aGUgc2VhcmNoIHBhdGgKICAgaWYgdGVzdCAtZiAvZXRjL2xkLnNvLmNvbmY7IHRoZW4KICAgICBsdF9sZF9leHRyYT1gYXdrICcvXmluY2x1ZGUgLyB7IHN5c3RlbShzcHJpbnRmKCJjZCAvZXRjOyBjYXQgJXMgMj4vZGV2L251bGwiLCBcJDIpKTsgc2tpcCA9IDE7IH0geyBpZiAoIXNraXApIHByaW50IFwkMDsgc2tpcCA9IDA7IH0nIDwgL2V0Yy9sZC5zby5jb25mIHwgJFNFRCAtZSAncy8jLiovLzsvXlsJIF0qaHdjYXBbCSBdL2Q7cy9bOiwJXS8gL2c7cy89W149XSokLy87cy89W149IF0qIC8gL2c7cy8iLy9nOy9eJC9kJyB8IHRyICdcbicgJyAnYAotICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMgJGx0X2xkX2V4dHJhIgotCisgICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii9saWIgL3Vzci9saWIgJGx0X2xkX2V4dHJhIgogICBmaQogCiAgICMgV2UgdXNlZCB0byB0ZXN0IGZvciAvbGliL2xkLnNvLjEgYW5kIGRpc2FibGUgc2hhcmVkIGxpYnJhcmllcyBvbgpAQCAtMTExMDcsMTIgKzExNzkzLDEyIEBACiAgIG5lZWRfbGliX3ByZWZpeD1ubwogICBuZWVkX3ZlcnNpb249bm8KICAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JworICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCcKICAgICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbSAkbGliZGlyJwogICAgIGR5bmFtaWNfbGlua2VyPSdOZXRCU0QgKGEub3V0KSBsZC5zbycKICAgZWxzZQotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCi0gICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKICAgICBkeW5hbWljX2xpbmtlcj0nTmV0QlNEIGxkLmVsZl9zbycKICAgZmkKICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKQEAgLTExMTIyLDcgKzExODA4LDcgQEAKIAogbmV3c29zNikKICAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JwogICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAogICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCiAgIDs7CkBAIC0xMTEzMSw0NSArMTE4MTcsMzQgQEAKICAgdmVyc2lvbl90eXBlPXFueAogICBuZWVkX2xpYl9wcmVmaXg9bm8KICAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCiAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICiAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwogICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCiAgIGR5bmFtaWNfbGlua2VyPSdsZHFueC5zbycKICAgOzsKIAotb3BlbmJzZCopCitvcGVuYnNkKiB8IGJpdHJpZyopCiAgIHZlcnNpb25fdHlwZT1zdW5vcwotICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIiCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPS91c3IvbGliCiAgIG5lZWRfbGliX3ByZWZpeD1ubwotICAjIFNvbWUgb2xkZXIgdmVyc2lvbnMgb2YgT3BlbkJTRCAoMy4zIGF0IGxlYXN0KSAqZG8qIG5lZWQgdmVyc2lvbmVkIGxpYnMuCi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBvcGVuYnNkMy4zIHwgb3BlbmJzZDMuMy4qKQluZWVkX3ZlcnNpb249eWVzIDs7Ci0gICAgKikJCQkJbmVlZF92ZXJzaW9uPW5vICA7OwotICBlc2FjCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCisgIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX19gIjsgdGhlbgorICAgIG5lZWRfdmVyc2lvbj1ubworICBlbHNlCisgICAgbmVlZF92ZXJzaW9uPXllcworICBmaQorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkc2hhcmVkX2V4dCR2ZXJzdWZmaXgnCiAgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1tICRsaWJkaXInCiAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgICBvcGVuYnNkMi5bODldIHwgb3BlbmJzZDIuWzg5XS4qKQotCXNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotCTs7Ci0gICAgICAqKQotCXNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLQk7OwotICAgICAgZXNhYwotICBlbHNlCi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICBmaQorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCiAgIDs7CiAKIG9zMiopCiAgIGxpYm5hbWVfc3BlYz0nJG5hbWUnCi0gIHNocmV4dF9jbWRzPSIuZGxsIgorICBzaHJleHRfY21kcz0uZGxsCiAgIG5lZWRfbGliX3ByZWZpeD1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHtzaGFyZWRfZXh0fSAkbGlibmFtZS5hJworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNoYXJlZF9leHQgJGxpYm5hbWUuYScKICAgZHluYW1pY19saW5rZXI9J09TLzIgbGQuZXhlJwogICBzaGxpYnBhdGhfdmFyPUxJQlBBVEgKICAgOzsKQEAgLTExMTc4LDExICsxMTg1MywxMSBAQAogICB2ZXJzaW9uX3R5cGU9b3NmCiAgIG5lZWRfbGliX3ByZWZpeD1ubwogICBuZWVkX3ZlcnNpb249bm8KLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL3NobGliIC91c3IvY2NzL2xpYiAvdXNyL2xpYi9jbXBscnMvY2MgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIgL3Zhci9zaGxpYiIKLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKICAgOzsKIAogcmRvcyopCkBAIC0xMTE5Myw4ICsxMTg2OCw4IEBACiAgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKICAgbmVlZF9saWJfcHJlZml4PW5vCiAgIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJwogICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAogICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCiAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKQEAgLTExMjA0LDExICsxMTg3OSwxMSBAQAogCiBzdW5vczQqKQogICB2ZXJzaW9uX3R5cGU9c3Vub3MKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHNoYXJlZF9leHQkdmVyc3VmZml4JwogICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi91c3IvZXRjIiBsZGNvbmZpZyAkbGliZGlyJwogICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAogICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKyAgaWYgdGVzdCB5ZXMgPSAiJHdpdGhfZ251X2xkIjsgdGhlbgogICAgIG5lZWRfbGliX3ByZWZpeD1ubwogICBmaQogICBuZWVkX3ZlcnNpb249eWVzCkBAIC0xMTIxNiw4ICsxMTg5MSw4IEBACiAKIHN5c3Y0IHwgc3lzdjQuMyopCiAgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKICAgY2FzZSAkaG9zdF92ZW5kb3IgaW4KICAgICBzbmkpCkBAIC0xMTIzOCwxMCArMTE5MTMsMTAgQEAKICAgOzsKIAogc3lzdjQqTVAqKQotICBpZiB0ZXN0IC1kIC91c3IvbmVjIDt0aGVuCisgIGlmIHRlc3QgLWQgL3Vzci9uZWM7IHRoZW4KICAgICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSR7c2hhcmVkX2V4dH0uJHZlcnN1ZmZpeCAkbGlibmFtZSR7c2hhcmVkX2V4dH0uJG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgICBzb25hbWVfc3BlYz0nJGxpYm5hbWUke3NoYXJlZF9leHR9LiRtYWpvcicKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNoYXJlZF9leHQuJHZlcnN1ZmZpeCAkbGlibmFtZSRzaGFyZWRfZXh0LiRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRzaGFyZWRfZXh0LiRtYWpvcicKICAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAogICBmaQogICA7OwpAQCAtMTEyNTAsMTIgKzExOTI1LDEyIEBACiAgIHZlcnNpb25fdHlwZT1mcmVlYnNkLWVsZgogICBuZWVkX2xpYl9wcmVmaXg9bm8KICAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0ICRsaWJuYW1lJHNoYXJlZF9leHQnCisgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCiAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICiAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKICAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisgIGlmIHRlc3QgeWVzID0gIiR3aXRoX2dudV9sZCI7IHRoZW4KICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbG9jYWwvbGliIC91c3IvZ251L2xpYiAvdXNyL2Njcy9saWIgL3Vzci9saWIgL2xpYicKICAgZWxzZQogICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9jY3MvbGliIC91c3IvbGliJwpAQCAtMTEyNzMsNyArMTE5NDgsNyBAQAogICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCiAgIG5lZWRfbGliX3ByZWZpeD1ubwogICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCiAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKQEAgLTExMjgxLDggKzExOTU2LDggQEAKIAogdXRzNCopCiAgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKICAgOzsKIApAQCAtMTEyOTIsMTggKzExOTY3LDE4IEBACiBlc2FjCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGR5bmFtaWNfbGlua2VyIiA+JjUKICRhc19lY2hvICIkZHluYW1pY19saW5rZXIiID4mNjsgfQotdGVzdCAiJGR5bmFtaWNfbGlua2VyIiA9IG5vICYmIGNhbl9idWlsZF9zaGFyZWQ9bm8KK3Rlc3Qgbm8gPSAiJGR5bmFtaWNfbGlua2VyIiAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCiAKIHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSJQQVRIICRzaGxpYnBhdGhfdmFyICRydW5wYXRoX3ZhciIKLWlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCitpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgogICB2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0iJHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rIEdDQ19FWEVDX1BSRUZJWCBDT01QSUxFUl9QQVRIIExJQlJBUllfUEFUSCIKIGZpCiAKLWlmIHRlc3QgIiR7bHRfY3Zfc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjK3NldH0iID0gc2V0OyB0aGVuCi0gIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJGx0X2N2X3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIKK2lmIHRlc3Qgc2V0ID0gIiR7bHRfY3Zfc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjK3NldH0iOyB0aGVuCisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0kbHRfY3Zfc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCiBmaQotaWYgdGVzdCAiJHtsdF9jdl9zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYytzZXR9IiA9IHNldDsgdGhlbgotICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iJGx0X2N2X3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjIgoraWYgdGVzdCBzZXQgPSAiJHtsdF9jdl9zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYytzZXR9IjsgdGhlbgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kbHRfY3Zfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMKIGZpCiAKIApAQCAtMTE0MDIsMTUgKzEyMDc3LDE1IEBACiBoYXJkY29kZV9hY3Rpb249CiBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyIgfHwKICAgIHRlc3QgLW4gIiRydW5wYXRoX3ZhciIgfHwKLSAgIHRlc3QgIlgkaGFyZGNvZGVfYXV0b21hdGljIiA9ICJYeWVzIiA7IHRoZW4KKyAgIHRlc3QgeWVzID0gIiRoYXJkY29kZV9hdXRvbWF0aWMiOyB0aGVuCiAKICAgIyBXZSBjYW4gaGFyZGNvZGUgbm9uLWV4aXN0ZW50IGRpcmVjdG9yaWVzLgotICBpZiB0ZXN0ICIkaGFyZGNvZGVfZGlyZWN0IiAhPSBubyAmJgorICBpZiB0ZXN0IG5vICE9ICIkaGFyZGNvZGVfZGlyZWN0IiAmJgogICAgICAjIElmIHRoZSBvbmx5IG1lY2hhbmlzbSB0byBhdm9pZCBoYXJkY29kaW5nIGlzIHNobGlicGF0aF92YXIsIHdlCiAgICAgICMgaGF2ZSB0byByZWxpbmssIG90aGVyd2lzZSB3ZSBtaWdodCBsaW5rIHdpdGggYW4gaW5zdGFsbGVkIGxpYnJhcnkKICAgICAgIyB3aGVuIHdlIHNob3VsZCBiZSBsaW5raW5nIHdpdGggYSB5ZXQtdG8tYmUtaW5zdGFsbGVkIG9uZQotICAgICAjIyB0ZXN0ICIkX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCApIiAhPSBubyAmJgotICAgICB0ZXN0ICIkaGFyZGNvZGVfbWludXNfTCIgIT0gbm87IHRoZW4KKyAgICAgIyMgdGVzdCBubyAhPSAiJF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgKSIgJiYKKyAgICAgdGVzdCBubyAhPSAiJGhhcmRjb2RlX21pbnVzX0wiOyB0aGVuCiAgICAgIyBMaW5raW5nIGFsd2F5cyBoYXJkY29kZXMgdGhlIHRlbXBvcmFyeSBsaWJyYXJ5IGRpcmVjdG9yeS4KICAgICBoYXJkY29kZV9hY3Rpb249cmVsaW5rCiAgIGVsc2UKQEAgLTExNDI1LDEyICsxMjEwMCwxMiBAQAogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRoYXJkY29kZV9hY3Rpb24iID4mNQogJGFzX2VjaG8gIiRoYXJkY29kZV9hY3Rpb24iID4mNjsgfQogCi1pZiB0ZXN0ICIkaGFyZGNvZGVfYWN0aW9uIiA9IHJlbGluayB8fAotICAgdGVzdCAiJGluaGVyaXRfcnBhdGgiID0geWVzOyB0aGVuCitpZiB0ZXN0IHJlbGluayA9ICIkaGFyZGNvZGVfYWN0aW9uIiB8fAorICAgdGVzdCB5ZXMgPSAiJGluaGVyaXRfcnBhdGgiOyB0aGVuCiAgICMgRmFzdCBpbnN0YWxsYXRpb24gaXMgbm90IHN1cHBvcnRlZAogICBlbmFibGVfZmFzdF9pbnN0YWxsPW5vCi1lbGlmIHRlc3QgIiRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgiID0geWVzIHx8Ci0gICAgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IG5vOyB0aGVuCitlbGlmIHRlc3QgeWVzID0gIiRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgiIHx8CisgICAgIHRlc3Qgbm8gPSAiJGVuYWJsZV9zaGFyZWQiOyB0aGVuCiAgICMgRmFzdCBpbnN0YWxsYXRpb24gaXMgbm90IG5lY2Vzc2FyeQogICBlbmFibGVfZmFzdF9pbnN0YWxsPW5lZWRsZXNzCiBmaQpAQCAtMTE0NDAsNyArMTIxMTUsNyBAQAogCiAKIAotICBpZiB0ZXN0ICJ4JGVuYWJsZV9kbG9wZW4iICE9IHh5ZXM7IHRoZW4KKyAgaWYgdGVzdCB5ZXMgIT0gIiRlbmFibGVfZGxvcGVuIjsgdGhlbgogICBlbmFibGVfZGxvcGVuPXVua25vd24KICAgZW5hYmxlX2Rsb3Blbl9zZWxmPXVua25vd24KICAgZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpYz11bmtub3duCkBAIC0xMTQ1MCwyMyArMTIxMjUsMjMgQEAKIAogICBjYXNlICRob3N0X29zIGluCiAgIGJlb3MqKQotICAgIGx0X2N2X2Rsb3Blbj0ibG9hZF9hZGRfb24iCisgICAgbHRfY3ZfZGxvcGVuPWxvYWRfYWRkX29uCiAgICAgbHRfY3ZfZGxvcGVuX2xpYnM9CiAgICAgbHRfY3ZfZGxvcGVuX3NlbGY9eWVzCiAgICAgOzsKIAogICBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKLSAgICBsdF9jdl9kbG9wZW49IkxvYWRMaWJyYXJ5IgorICAgIGx0X2N2X2Rsb3Blbj1Mb2FkTGlicmFyeQogICAgIGx0X2N2X2Rsb3Blbl9saWJzPQogICAgIDs7CiAKICAgY3lnd2luKikKLSAgICBsdF9jdl9kbG9wZW49ImRsb3BlbiIKKyAgICBsdF9jdl9kbG9wZW49ZGxvcGVuCiAgICAgbHRfY3ZfZGxvcGVuX2xpYnM9CiAgICAgOzsKIAogICBkYXJ3aW4qKQotICAjIGlmIGxpYmRsIGlzIGluc3RhbGxlZCB3ZSBuZWVkIHRvIGxpbmsgYWdhaW5zdCBpdAorICAgICMgaWYgbGliZGwgaXMgaW5zdGFsbGVkIHdlIG5lZWQgdG8gbGluayBhZ2FpbnN0IGl0CiAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZGxvcGVuIGluIC1sZGwiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGRsb3BlbiBpbiAtbGRsLi4uICIgPiY2OyB9CiBpZiAke2FjX2N2X2xpYl9kbF9kbG9wZW4rOn0gZmFsc2U7IHRoZW4gOgpAQCAtMTE1MDQsMTAgKzEyMTc5LDEwIEBACiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9kbF9kbG9wZW4iID4mNQogJGFzX2VjaG8gIiRhY19jdl9saWJfZGxfZGxvcGVuIiA+JjY7IH0KIGlmIHRlc3QgIngkYWNfY3ZfbGliX2RsX2Rsb3BlbiIgPSB4eWVzOyB0aGVuIDoKLSAgbHRfY3ZfZGxvcGVuPSJkbG9wZW4iIGx0X2N2X2Rsb3Blbl9saWJzPSItbGRsIgorICBsdF9jdl9kbG9wZW49ZGxvcGVuIGx0X2N2X2Rsb3Blbl9saWJzPS1sZGwKIGVsc2UKIAotICAgIGx0X2N2X2Rsb3Blbj0iZHlsZCIKKyAgICBsdF9jdl9kbG9wZW49ZHlsZAogICAgIGx0X2N2X2Rsb3Blbl9saWJzPQogICAgIGx0X2N2X2Rsb3Blbl9zZWxmPXllcwogCkBAIC0xMTUxNSwxMCArMTIxOTAsMTggQEAKIAogICAgIDs7CiAKKyAgdHBmKikKKyAgICAjIERvbid0IHRyeSB0byBydW4gYW55IGxpbmsgdGVzdHMgZm9yIFRQRi4gIFdlIGtub3cgaXQncyBpbXBvc3NpYmxlCisgICAgIyBiZWNhdXNlIFRQRiBpcyBhIGNyb3NzLWNvbXBpbGVyLCBhbmQgd2Uga25vdyBob3cgd2Ugb3BlbiBEU09zLgorICAgIGx0X2N2X2Rsb3Blbj1kbG9wZW4KKyAgICBsdF9jdl9kbG9wZW5fbGlicz0KKyAgICBsdF9jdl9kbG9wZW5fc2VsZj1ubworICAgIDs7CisKICAgKikKICAgICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJzaGxfbG9hZCIgImFjX2N2X2Z1bmNfc2hsX2xvYWQiCiBpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfc2hsX2xvYWQiID0geHllczsgdGhlbiA6Ci0gIGx0X2N2X2Rsb3Blbj0ic2hsX2xvYWQiCisgIGx0X2N2X2Rsb3Blbj1zaGxfbG9hZAogZWxzZQogICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzaGxfbG9hZCBpbiAtbGRsZCIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBmb3Igc2hsX2xvYWQgaW4gLWxkbGQuLi4gIiA+JjY7IH0KQEAgLTExNTU3LDExICsxMjI0MCwxMSBAQAogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfZGxkX3NobF9sb2FkIiA+JjUKICRhc19lY2hvICIkYWNfY3ZfbGliX2RsZF9zaGxfbG9hZCIgPiY2OyB9CiBpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9kbGRfc2hsX2xvYWQiID0geHllczsgdGhlbiA6Ci0gIGx0X2N2X2Rsb3Blbj0ic2hsX2xvYWQiIGx0X2N2X2Rsb3Blbl9saWJzPSItbGRsZCIKKyAgbHRfY3ZfZGxvcGVuPXNobF9sb2FkIGx0X2N2X2Rsb3Blbl9saWJzPS1sZGxkCiBlbHNlCiAgIGFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgImRsb3BlbiIgImFjX2N2X2Z1bmNfZGxvcGVuIgogaWYgdGVzdCAieCRhY19jdl9mdW5jX2Rsb3BlbiIgPSB4eWVzOyB0aGVuIDoKLSAgbHRfY3ZfZGxvcGVuPSJkbG9wZW4iCisgIGx0X2N2X2Rsb3Blbj1kbG9wZW4KIGVsc2UKICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZGxvcGVuIGluIC1sZGwiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGRsb3BlbiBpbiAtbGRsLi4uICIgPiY2OyB9CkBAIC0xMTYwMCw3ICsxMjI4Myw3IEBACiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9kbF9kbG9wZW4iID4mNQogJGFzX2VjaG8gIiRhY19jdl9saWJfZGxfZGxvcGVuIiA+JjY7IH0KIGlmIHRlc3QgIngkYWNfY3ZfbGliX2RsX2Rsb3BlbiIgPSB4eWVzOyB0aGVuIDoKLSAgbHRfY3ZfZGxvcGVuPSJkbG9wZW4iIGx0X2N2X2Rsb3Blbl9saWJzPSItbGRsIgorICBsdF9jdl9kbG9wZW49ZGxvcGVuIGx0X2N2X2Rsb3Blbl9saWJzPS1sZGwKIGVsc2UKICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZGxvcGVuIGluIC1sc3ZsZCIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgZGxvcGVuIGluIC1sc3ZsZC4uLiAiID4mNjsgfQpAQCAtMTE2MzksNyArMTIzMjIsNyBAQAogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfc3ZsZF9kbG9wZW4iID4mNQogJGFzX2VjaG8gIiRhY19jdl9saWJfc3ZsZF9kbG9wZW4iID4mNjsgfQogaWYgdGVzdCAieCRhY19jdl9saWJfc3ZsZF9kbG9wZW4iID0geHllczsgdGhlbiA6Ci0gIGx0X2N2X2Rsb3Blbj0iZGxvcGVuIiBsdF9jdl9kbG9wZW5fbGlicz0iLWxzdmxkIgorICBsdF9jdl9kbG9wZW49ZGxvcGVuIGx0X2N2X2Rsb3Blbl9saWJzPS1sc3ZsZAogZWxzZQogICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBkbGRfbGluayBpbiAtbGRsZCIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgZGxkX2xpbmsgaW4gLWxkbGQuLi4gIiA+JjY7IH0KQEAgLTExNjc4LDcgKzEyMzYxLDcgQEAKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX2RsZF9kbGRfbGluayIgPiY1CiAkYXNfZWNobyAiJGFjX2N2X2xpYl9kbGRfZGxkX2xpbmsiID4mNjsgfQogaWYgdGVzdCAieCRhY19jdl9saWJfZGxkX2RsZF9saW5rIiA9IHh5ZXM7IHRoZW4gOgotICBsdF9jdl9kbG9wZW49ImRsZF9saW5rIiBsdF9jdl9kbG9wZW5fbGlicz0iLWxkbGQiCisgIGx0X2N2X2Rsb3Blbj1kbGRfbGluayBsdF9jdl9kbG9wZW5fbGlicz0tbGRsZAogZmkKIAogCkBAIC0xMTY5OSwyMSArMTIzODIsMjEgQEAKICAgICA7OwogICBlc2FjCiAKLSAgaWYgdGVzdCAieCRsdF9jdl9kbG9wZW4iICE9IHhubzsgdGhlbgotICAgIGVuYWJsZV9kbG9wZW49eWVzCi0gIGVsc2UKKyAgaWYgdGVzdCBubyA9ICIkbHRfY3ZfZGxvcGVuIjsgdGhlbgogICAgIGVuYWJsZV9kbG9wZW49bm8KKyAgZWxzZQorICAgIGVuYWJsZV9kbG9wZW49eWVzCiAgIGZpCiAKICAgY2FzZSAkbHRfY3ZfZGxvcGVuIGluCiAgIGRsb3BlbikKLSAgICBzYXZlX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCi0gICAgdGVzdCAieCRhY19jdl9oZWFkZXJfZGxmY25faCIgPSB4eWVzICYmIENQUEZMQUdTPSIkQ1BQRkxBR1MgLURIQVZFX0RMRkNOX0giCisgICAgc2F2ZV9DUFBGTEFHUz0kQ1BQRkxBR1MKKyAgICB0ZXN0IHllcyA9ICIkYWNfY3ZfaGVhZGVyX2RsZmNuX2giICYmIENQUEZMQUdTPSIkQ1BQRkxBR1MgLURIQVZFX0RMRkNOX0giCiAKLSAgICBzYXZlX0xERkxBR1M9IiRMREZMQUdTIgorICAgIHNhdmVfTERGTEFHUz0kTERGTEFHUwogICAgIHdsPSRsdF9wcm9nX2NvbXBpbGVyX3dsIGV2YWwgTERGTEFHUz1cIlwkTERGTEFHUyAkZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjXCIKIAotICAgIHNhdmVfTElCUz0iJExJQlMiCisgICAgc2F2ZV9MSUJTPSRMSUJTCiAgICAgTElCUz0iJGx0X2N2X2Rsb3Blbl9saWJzICRMSUJTIgogCiAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIGEgcHJvZ3JhbSBjYW4gZGxvcGVuIGl0c2VsZiIgPiY1CkBAIC0xMTcyMSw3ICsxMjQwNCw3IEBACiBpZiAke2x0X2N2X2Rsb3Blbl9zZWxmKzp9IGZhbHNlOyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgCSAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgorICAJICBpZiB0ZXN0IHllcyA9ICIkY3Jvc3NfY29tcGlsaW5nIjsgdGhlbiA6CiAgIGx0X2N2X2Rsb3Blbl9zZWxmPWNyb3NzCiBlbHNlCiAgIGx0X2RsdW5rbm93bj0wOyBsdF9kbG5vX3VzY29yZT0xOyBsdF9kbG5lZWRfdXNjb3JlPTIKQEAgLTExNzcwLDcgKzEyNDUzLDcgQEAKIAogLyogV2hlbiAtZnZpc2JpbGl0eT1oaWRkZW4gaXMgdXNlZCwgYXNzdW1lIHRoZSBjb2RlIGhhcyBiZWVuIGFubm90YXRlZAogICAgY29ycmVzcG9uZGluZ2x5IGZvciB0aGUgc3ltYm9scyBuZWVkZWQuICAqLwotI2lmIGRlZmluZWQoX19HTlVDX18pICYmICgoKF9fR05VQ19fID09IDMpICYmIChfX0dOVUNfTUlOT1JfXyA+PSAzKSkgfHwgKF9fR05VQ19fID4gMykpCisjaWYgZGVmaW5lZCBfX0dOVUNfXyAmJiAoKChfX0dOVUNfXyA9PSAzKSAmJiAoX19HTlVDX01JTk9SX18gPj0gMykpIHx8IChfX0dOVUNfXyA+IDMpKQogaW50IGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOwogI2VuZGlmCiAKQEAgLTExODAwLDcgKzEyNDgzLDcgQEAKICAgKGV2YWwgJGFjX2xpbmspIDI+JjUKICAgYWNfc3RhdHVzPSQ/CiAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH0gMj4vZGV2L251bGw7IHRoZW4KKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJiB0ZXN0IC1zICJjb25mdGVzdCRhY19leGVleHQiIDI+L2Rldi9udWxsOyB0aGVuCiAgICAgKC4vY29uZnRlc3Q7IGV4aXQ7ICkgPiY1IDI+L2Rldi9udWxsCiAgICAgbHRfc3RhdHVzPSQ/CiAgICAgY2FzZSB4JGx0X3N0YXR1cyBpbgpAQCAtMTE4MjAsMTQgKzEyNTAzLDE0IEBACiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2Rsb3Blbl9zZWxmIiA+JjUKICRhc19lY2hvICIkbHRfY3ZfZGxvcGVuX3NlbGYiID4mNjsgfQogCi0gICAgaWYgdGVzdCAieCRsdF9jdl9kbG9wZW5fc2VsZiIgPSB4eWVzOyB0aGVuCisgICAgaWYgdGVzdCB5ZXMgPSAiJGx0X2N2X2Rsb3Blbl9zZWxmIjsgdGhlbgogICAgICAgd2w9JGx0X3Byb2dfY29tcGlsZXJfd2wgZXZhbCBMREZMQUdTPVwiXCRMREZMQUdTICRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY1wiCiAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgYSBzdGF0aWNhbGx5IGxpbmtlZCBwcm9ncmFtIGNhbiBkbG9wZW4gaXRzZWxmIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgYSBzdGF0aWNhbGx5IGxpbmtlZCBwcm9ncmFtIGNhbiBkbG9wZW4gaXRzZWxmLi4uICIgPiY2OyB9CiBpZiAke2x0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYys6fSBmYWxzZTsgdGhlbiA6CiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCi0gIAkgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKyAgCSAgaWYgdGVzdCB5ZXMgPSAiJGNyb3NzX2NvbXBpbGluZyI7IHRoZW4gOgogICBsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWM9Y3Jvc3MKIGVsc2UKICAgbHRfZGx1bmtub3duPTA7IGx0X2Rsbm9fdXNjb3JlPTE7IGx0X2RsbmVlZF91c2NvcmU9MgpAQCAtMTE4NzYsNyArMTI1NTksNyBAQAogCiAvKiBXaGVuIC1mdmlzYmlsaXR5PWhpZGRlbiBpcyB1c2VkLCBhc3N1bWUgdGhlIGNvZGUgaGFzIGJlZW4gYW5ub3RhdGVkCiAgICBjb3JyZXNwb25kaW5nbHkgZm9yIHRoZSBzeW1ib2xzIG5lZWRlZC4gICovCi0jaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKCgoX19HTlVDX18gPT0gMykgJiYgKF9fR05VQ19NSU5PUl9fID49IDMpKSB8fCAoX19HTlVDX18gPiAzKSkKKyNpZiBkZWZpbmVkIF9fR05VQ19fICYmICgoKF9fR05VQ19fID09IDMpICYmIChfX0dOVUNfTUlOT1JfXyA+PSAzKSkgfHwgKF9fR05VQ19fID4gMykpCiBpbnQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7CiAjZW5kaWYKIApAQCAtMTE5MDYsNyArMTI1ODksNyBAQAogICAoZXZhbCAkYWNfbGluaykgMj4mNQogICBhY19zdGF0dXM9JD8KICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fSAyPi9kZXYvbnVsbDsgdGhlbgorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHRlc3QgLXMgImNvbmZ0ZXN0JGFjX2V4ZWV4dCIgMj4vZGV2L251bGw7IHRoZW4KICAgICAoLi9jb25mdGVzdDsgZXhpdDsgKSA+JjUgMj4vZGV2L251bGwKICAgICBsdF9zdGF0dXM9JD8KICAgICBjYXNlIHgkbHRfc3RhdHVzIGluCkBAIC0xMTkyNyw5ICsxMjYxMCw5IEBACiAkYXNfZWNobyAiJGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYyIgPiY2OyB9CiAgICAgZmkKIAotICAgIENQUEZMQUdTPSIkc2F2ZV9DUFBGTEFHUyIKLSAgICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgotICAgIExJQlM9IiRzYXZlX0xJQlMiCisgICAgQ1BQRkxBR1M9JHNhdmVfQ1BQRkxBR1MKKyAgICBMREZMQUdTPSRzYXZlX0xERkxBR1MKKyAgICBMSUJTPSRzYXZlX0xJQlMKICAgICA7OwogICBlc2FjCiAKQEAgLTExOTczLDcgKzEyNjU2LDcgQEAKICMgRklYTUUgLSBpbnNlcnQgc29tZSByZWFsIHRlc3RzLCBob3N0X29zIGlzbid0IHJlYWxseSBnb29kIGVub3VnaAogICBjYXNlICRob3N0X29zIGluCiAgIGRhcndpbiopCi0gICAgaWYgdGVzdCAtbiAiJFNUUklQIiA7IHRoZW4KKyAgICBpZiB0ZXN0IC1uICIkU1RSSVAiOyB0aGVuCiAgICAgICBzdHJpcGxpYj0iJFNUUklQIC14IgogICAgICAgb2xkX3N0cmlwbGliPSIkU1RSSVAgLVMiCiAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKQEAgLTEyMDAxLDcgKzEyNjg0LDcgQEAKIAogCiAKLSAgIyBSZXBvcnQgd2hpY2ggbGlicmFyeSB0eXBlcyB3aWxsIGFjdHVhbGx5IGJlIGJ1aWx0CisgICMgUmVwb3J0IHdoYXQgbGlicmFyeSB0eXBlcyB3aWxsIGFjdHVhbGx5IGJlIGJ1aWx0CiAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgbGlidG9vbCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIGlmIGxpYnRvb2wgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcy4uLiAiID4mNjsgfQogICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGNhbl9idWlsZF9zaGFyZWQiID4mNQpAQCAtMTIwMDksMTMgKzEyNjkyLDEzIEBACiAKICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzLi4uICIgPiY2OyB9Ci0gIHRlc3QgIiRjYW5fYnVpbGRfc2hhcmVkIiA9ICJubyIgJiYgZW5hYmxlX3NoYXJlZD1ubworICB0ZXN0IG5vID0gIiRjYW5fYnVpbGRfc2hhcmVkIiAmJiBlbmFibGVfc2hhcmVkPW5vCiAKICAgIyBPbiBBSVgsIHNoYXJlZCBsaWJyYXJpZXMgYW5kIHN0YXRpYyBsaWJyYXJpZXMgdXNlIHRoZSBzYW1lIG5hbWVzcGFjZSwgYW5kCiAgICMgYXJlIGFsbCBidWlsdCBmcm9tIFBJQy4KICAgY2FzZSAkaG9zdF9vcyBpbgogICBhaXgzKikKLSAgICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgZW5hYmxlX3N0YXRpYz1ubworICAgIHRlc3QgeWVzID0gIiRlbmFibGVfc2hhcmVkIiAmJiBlbmFibGVfc3RhdGljPW5vCiAgICAgaWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KICAgICAgIGFyY2hpdmVfY21kcz0iJGFyY2hpdmVfY21kc35cJFJBTkxJQiBcJGxpYiIKICAgICAgIHBvc3RpbnN0YWxsX2NtZHM9JyRSQU5MSUIgJGxpYicKQEAgLTEyMDIzLDggKzEyNzA2LDggQEAKICAgICA7OwogCiAgIGFpeFs0LTldKikKLSAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiICE9IGlhNjQgJiYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0gbm8gOyB0aGVuCi0gICAgICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgZW5hYmxlX3N0YXRpYz1ubworICAgIGlmIHRlc3QgaWE2NCAhPSAiJGhvc3RfY3B1IiAmJiB0ZXN0IG5vID0gIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIjsgdGhlbgorICAgICAgdGVzdCB5ZXMgPSAiJGVuYWJsZV9zaGFyZWQiICYmIGVuYWJsZV9zdGF0aWM9bm8KICAgICBmaQogICAgIDs7CiAgIGVzYWMKQEAgLTEyMDM0LDcgKzEyNzE3LDcgQEAKICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXMiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzLi4uICIgPiY2OyB9CiAgICMgTWFrZSBzdXJlIGVpdGhlciBlbmFibGVfc2hhcmVkIG9yIGVuYWJsZV9zdGF0aWMgaXMgeWVzLgotICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgfHwgZW5hYmxlX3N0YXRpYz15ZXMKKyAgdGVzdCB5ZXMgPSAiJGVuYWJsZV9zaGFyZWQiIHx8IGVuYWJsZV9zdGF0aWM9eWVzCiAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZW5hYmxlX3N0YXRpYyIgPiY1CiAkYXNfZWNobyAiJGVuYWJsZV9zdGF0aWMiID4mNjsgfQogCkBAIC0xMjA0OCw3ICsxMjczMSwzMTg3IEBACiBhY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JwogYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQogCi1DQz0iJGx0X3NhdmVfQ0MiCitDQz0kbHRfc2F2ZV9DQworCisgICAgICBpZiB0ZXN0IC1uICIkQ1hYIiAmJiAoIHRlc3Qgbm8gIT0gIiRDWFgiICYmCisgICAgKCAodGVzdCBnKysgPSAiJENYWCIgJiYgYGcrKyAtdiA+L2Rldi9udWxsIDI+JjFgICkgfHwKKyAgICAodGVzdCBnKysgIT0gIiRDWFgiKSkpOyB0aGVuCisgIGFjX2V4dD1jcHAKK2FjX2NwcD0nJENYWENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ1hYIC1jICRDWFhGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ1hYIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jeHhfY29tcGlsZXJfZ251Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBydW4gdGhlIEMrKyBwcmVwcm9jZXNzb3IiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIHJ1biB0aGUgQysrIHByZXByb2Nlc3Nvci4uLiAiID4mNjsgfQoraWYgdGVzdCAteiAiJENYWENQUCI7IHRoZW4KKyAgaWYgJHthY19jdl9wcm9nX0NYWENQUCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgICAgICAjIERvdWJsZSBxdW90ZXMgYmVjYXVzZSBDWFhDUFAgbmVlZHMgdG8gYmUgZXhwYW5kZWQKKyAgICBmb3IgQ1hYQ1BQIGluICIkQ1hYIC1FIiAiL2xpYi9jcHAiCisgICAgZG8KKyAgICAgIGFjX3ByZXByb2Nfb2s9ZmFsc2UKK2ZvciBhY19jeHhfcHJlcHJvY193YXJuX2ZsYWcgaW4gJycgeWVzCitkbworICAjIFVzZSBhIGhlYWRlciBmaWxlIHRoYXQgY29tZXMgd2l0aCBnY2MsIHNvIGNvbmZpZ3VyaW5nIGdsaWJjCisgICMgd2l0aCBhIGZyZXNoIGNyb3NzLWNvbXBpbGVyIHdvcmtzLgorICAjIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKyAgIyA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuCisgICMgT24gdGhlIE5lWFQsIGNjIC1FIHJ1bnMgdGhlIGNvZGUgdGhyb3VnaCB0aGUgY29tcGlsZXIncyBwYXJzZXIsCisgICMgbm90IGp1c3QgdGhyb3VnaCBjcHAuICJTeW50YXggZXJyb3IiIGlzIGhlcmUgdG8gY2F0Y2ggdGhpcyBjYXNlLgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaWZkZWYgX19TVERDX18KKyMgaW5jbHVkZSA8bGltaXRzLmg+CisjZWxzZQorIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyNlbmRpZgorCQkgICAgIFN5bnRheCBlcnJvcgorX0FDRU9GCitpZiBhY19mbl9jeHhfdHJ5X2NwcCAiJExJTkVOTyI7IHRoZW4gOgorCitlbHNlCisgICMgQnJva2VuOiBmYWlscyBvbiB2YWxpZCBpbnB1dC4KK2NvbnRpbnVlCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LmkgY29uZnRlc3QuJGFjX2V4dAorCisgICMgT0ssIHdvcmtzIG9uIHNhbmUgY2FzZXMuICBOb3cgY2hlY2sgd2hldGhlciBub25leGlzdGVudCBoZWFkZXJzCisgICMgY2FuIGJlIGRldGVjdGVkIGFuZCBob3cuCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxhY19ub25leGlzdGVudC5oPgorX0FDRU9GCitpZiBhY19mbl9jeHhfdHJ5X2NwcCAiJExJTkVOTyI7IHRoZW4gOgorICAjIEJyb2tlbjogc3VjY2VzcyBvbiBpbnZhbGlkIGlucHV0LgorY29udGludWUKK2Vsc2UKKyAgIyBQYXNzZXMgYm90aCB0ZXN0cy4KK2FjX3ByZXByb2Nfb2s9OgorYnJlYWsKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuaSBjb25mdGVzdC4kYWNfZXh0CisKK2RvbmUKKyMgQmVjYXVzZSBvZiBgYnJlYWsnLCBfQUNfUFJFUFJPQ19JRkVMU0UncyBjbGVhbmluZyBjb2RlIHdhcyBza2lwcGVkLgorcm0gLWYgY29uZnRlc3QuaSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAoraWYgJGFjX3ByZXByb2Nfb2s7IHRoZW4gOgorICBicmVhaworZmkKKworICAgIGRvbmUKKyAgICBhY19jdl9wcm9nX0NYWENQUD0kQ1hYQ1BQCisKK2ZpCisgIENYWENQUD0kYWNfY3ZfcHJvZ19DWFhDUFAKK2Vsc2UKKyAgYWNfY3ZfcHJvZ19DWFhDUFA9JENYWENQUAorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQ1hYQ1BQIiA+JjUKKyRhc19lY2hvICIkQ1hYQ1BQIiA+JjY7IH0KK2FjX3ByZXByb2Nfb2s9ZmFsc2UKK2ZvciBhY19jeHhfcHJlcHJvY193YXJuX2ZsYWcgaW4gJycgeWVzCitkbworICAjIFVzZSBhIGhlYWRlciBmaWxlIHRoYXQgY29tZXMgd2l0aCBnY2MsIHNvIGNvbmZpZ3VyaW5nIGdsaWJjCisgICMgd2l0aCBhIGZyZXNoIGNyb3NzLWNvbXBpbGVyIHdvcmtzLgorICAjIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKyAgIyA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuCisgICMgT24gdGhlIE5lWFQsIGNjIC1FIHJ1bnMgdGhlIGNvZGUgdGhyb3VnaCB0aGUgY29tcGlsZXIncyBwYXJzZXIsCisgICMgbm90IGp1c3QgdGhyb3VnaCBjcHAuICJTeW50YXggZXJyb3IiIGlzIGhlcmUgdG8gY2F0Y2ggdGhpcyBjYXNlLgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaWZkZWYgX19TVERDX18KKyMgaW5jbHVkZSA8bGltaXRzLmg+CisjZWxzZQorIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyNlbmRpZgorCQkgICAgIFN5bnRheCBlcnJvcgorX0FDRU9GCitpZiBhY19mbl9jeHhfdHJ5X2NwcCAiJExJTkVOTyI7IHRoZW4gOgorCitlbHNlCisgICMgQnJva2VuOiBmYWlscyBvbiB2YWxpZCBpbnB1dC4KK2NvbnRpbnVlCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LmkgY29uZnRlc3QuJGFjX2V4dAorCisgICMgT0ssIHdvcmtzIG9uIHNhbmUgY2FzZXMuICBOb3cgY2hlY2sgd2hldGhlciBub25leGlzdGVudCBoZWFkZXJzCisgICMgY2FuIGJlIGRldGVjdGVkIGFuZCBob3cuCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxhY19ub25leGlzdGVudC5oPgorX0FDRU9GCitpZiBhY19mbl9jeHhfdHJ5X2NwcCAiJExJTkVOTyI7IHRoZW4gOgorICAjIEJyb2tlbjogc3VjY2VzcyBvbiBpbnZhbGlkIGlucHV0LgorY29udGludWUKK2Vsc2UKKyAgIyBQYXNzZXMgYm90aCB0ZXN0cy4KK2FjX3ByZXByb2Nfb2s9OgorYnJlYWsKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuaSBjb25mdGVzdC4kYWNfZXh0CisKK2RvbmUKKyMgQmVjYXVzZSBvZiBgYnJlYWsnLCBfQUNfUFJFUFJPQ19JRkVMU0UncyBjbGVhbmluZyBjb2RlIHdhcyBza2lwcGVkLgorcm0gLWYgY29uZnRlc3QuaSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAoraWYgJGFjX3ByZXByb2Nfb2s7IHRoZW4gOgorCitlbHNlCisgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorYXNfZm5fZXJyb3IgJD8gIkMrKyBwcmVwcm9jZXNzb3IgXCIkQ1hYQ1BQXCIgZmFpbHMgc2FuaXR5IGNoZWNrCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQorZmkKKworYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorCitlbHNlCisgIF9sdF9jYXVnaHRfQ1hYX2Vycm9yPXllcworZmkKKworYWNfZXh0PWNwcAorYWNfY3BwPSckQ1hYQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDWFggLWMgJENYWEZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDWFggLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2N4eF9jb21waWxlcl9nbnUKKworYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPW5vCithbGxvd191bmRlZmluZWRfZmxhZ19DWFg9CithbHdheXNfZXhwb3J0X3N5bWJvbHNfQ1hYPW5vCithcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0KK2NvbXBpbGVyX25lZWRzX29iamVjdF9DWFg9bm8KK2V4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFg9CitoYXJkY29kZV9kaXJlY3RfQ1hYPW5vCitoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGVfQ1hYPW5vCitoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0KK2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYPQoraGFyZGNvZGVfbWludXNfTF9DWFg9bm8KK2hhcmRjb2RlX3NobGlicGF0aF92YXJfQ1hYPXVuc3VwcG9ydGVkCitoYXJkY29kZV9hdXRvbWF0aWNfQ1hYPW5vCitpbmhlcml0X3JwYXRoX0NYWD1ubworbW9kdWxlX2NtZHNfQ1hYPQorbW9kdWxlX2V4cHN5bV9jbWRzX0NYWD0KK2xpbmtfYWxsX2RlcGxpYnNfQ1hYPXVua25vd24KK29sZF9hcmNoaXZlX2NtZHNfQ1hYPSRvbGRfYXJjaGl2ZV9jbWRzCityZWxvYWRfZmxhZ19DWFg9JHJlbG9hZF9mbGFnCityZWxvYWRfY21kc19DWFg9JHJlbG9hZF9jbWRzCitub191bmRlZmluZWRfZmxhZ19DWFg9Cit3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19DWFg9CitlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzX0NYWD1ubworCisjIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgQysrIHRlc3Qgc291cmNlcy4KK2FjX2V4dD1jcHAKKworIyBPYmplY3QgZmlsZSBleHRlbnNpb24gZm9yIGNvbXBpbGVkIEMrKyB0ZXN0IHNvdXJjZXMuCitvYmpleHQ9bworb2JqZXh0X0NYWD0kb2JqZXh0CisKKyMgTm8gc2Vuc2UgaW4gcnVubmluZyBhbGwgdGhlc2UgdGVzdHMgaWYgd2UgYWxyZWFkeSBkZXRlcm1pbmVkIHRoYXQKKyMgdGhlIENYWCBjb21waWxlciBpc24ndCB3b3JraW5nLiAgU29tZSB2YXJpYWJsZXMgKGxpa2UgZW5hYmxlX3NoYXJlZCkKKyMgYXJlIGN1cnJlbnRseSBhc3N1bWVkIHRvIGFwcGx5IHRvIGFsbCBjb21waWxlcnMgb24gdGhpcyBwbGF0Zm9ybSwKKyMgYW5kIHdpbGwgYmUgY29ycnVwdGVkIGJ5IHNldHRpbmcgdGhlbSBiYXNlZCBvbiBhIG5vbi13b3JraW5nIGNvbXBpbGVyLgoraWYgdGVzdCB5ZXMgIT0gIiRfbHRfY2F1Z2h0X0NYWF9lcnJvciI7IHRoZW4KKyAgIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGNvbXBpbGUgdGVzdHMKKyAgbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlPSJpbnQgc29tZV92YXJpYWJsZSA9IDA7IgorCisgICMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBsaW5rIHRlc3RzCisgIGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0naW50IG1haW4oaW50LCBjaGFyICpbXSkgeyByZXR1cm4oMCk7IH0nCisKKyAgIyBsdG1haW4gb25seSB1c2VzICRDQyBmb3IgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHNvIG1ha2Ugc3VyZSAkQ0MgaXMgc2V0LgorCisKKworCisKKworIyBJZiBubyBDIGNvbXBpbGVyIHdhcyBzcGVjaWZpZWQsIHVzZSBDQy4KK0xUQ0M9JHtMVENDLSIkQ0MifQorCisjIElmIG5vIEMgY29tcGlsZXIgZmxhZ3Mgd2VyZSBzcGVjaWZpZWQsIHVzZSBDRkxBR1MuCitMVENGTEFHUz0ke0xUQ0ZMQUdTLSIkQ0ZMQUdTIn0KKworIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KK2NvbXBpbGVyPSRDQworCisKKyAgIyBzYXZlIHdhcm5pbmdzL2JvaWxlcnBsYXRlIG9mIHNpbXBsZSB0ZXN0IGNvZGUKKyAgYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0CitlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+Y29uZnRlc3QuJGFjX2V4dAorZXZhbCAiJGFjX2NvbXBpbGUiIDI+JjEgPi9kZXYvbnVsbCB8ICRTRUQgJy9eJC9kOyAvXiAqKy9kJyA+Y29uZnRlc3QuZXJyCitfbHRfY29tcGlsZXJfYm9pbGVycGxhdGU9YGNhdCBjb25mdGVzdC5lcnJgCiskUk0gY29uZnRlc3QqCisKKyAgYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0CitlY2hvICIkbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlIiA+Y29uZnRlc3QuJGFjX2V4dAorZXZhbCAiJGFjX2xpbmsiIDI+JjEgPi9kZXYvbnVsbCB8ICRTRUQgJy9eJC9kOyAvXiAqKy9kJyA+Y29uZnRlc3QuZXJyCitfbHRfbGlua2VyX2JvaWxlcnBsYXRlPWBjYXQgY29uZnRlc3QuZXJyYAorJFJNIC1yIGNvbmZ0ZXN0KgorCisKKyAgIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KKyAgbHRfc2F2ZV9DQz0kQ0MKKyAgbHRfc2F2ZV9DRkxBR1M9JENGTEFHUworICBsdF9zYXZlX0xEPSRMRAorICBsdF9zYXZlX0dDQz0kR0NDCisgIEdDQz0kR1hYCisgIGx0X3NhdmVfd2l0aF9nbnVfbGQ9JHdpdGhfZ251X2xkCisgIGx0X3NhdmVfcGF0aF9MRD0kbHRfY3ZfcGF0aF9MRAorICBpZiB0ZXN0IC1uICIke2x0X2N2X3Byb2dfZ251X2xkY3h4K3NldH0iOyB0aGVuCisgICAgbHRfY3ZfcHJvZ19nbnVfbGQ9JGx0X2N2X3Byb2dfZ251X2xkY3h4CisgIGVsc2UKKyAgICAkYXNfdW5zZXQgbHRfY3ZfcHJvZ19nbnVfbGQKKyAgZmkKKyAgaWYgdGVzdCAtbiAiJHtsdF9jdl9wYXRoX0xEQ1hYK3NldH0iOyB0aGVuCisgICAgbHRfY3ZfcGF0aF9MRD0kbHRfY3ZfcGF0aF9MRENYWAorICBlbHNlCisgICAgJGFzX3Vuc2V0IGx0X2N2X3BhdGhfTEQKKyAgZmkKKyAgdGVzdCAteiAiJHtMRENYWCtzZXR9IiB8fCBMRD0kTERDWFgKKyAgQ0M9JHtDWFgtImMrKyJ9CisgIENGTEFHUz0kQ1hYRkxBR1MKKyAgY29tcGlsZXI9JENDCisgIGNvbXBpbGVyX0NYWD0kQ0MKKyAgZm9yIGNjX3RlbXAgaW4gJGNvbXBpbGVyIiI7IGRvCisgIGNhc2UgJGNjX3RlbXAgaW4KKyAgICBjb21waWxlIHwgKltcXC9dY29tcGlsZSB8IGNjYWNoZSB8ICpbXFwvXWNjYWNoZSApIDs7CisgICAgZGlzdGNjIHwgKltcXC9dZGlzdGNjIHwgcHVyaWZ5IHwgKltcXC9dcHVyaWZ5ICkgOzsKKyAgICBcLSopIDs7CisgICAgKikgYnJlYWs7OworICBlc2FjCitkb25lCitjY19iYXNlbmFtZT1gJEVDSE8gIiRjY190ZW1wIiB8ICRTRUQgInMlLiovJSU7IHMlXiRob3N0X2FsaWFzLSUlImAKKworCisgIGlmIHRlc3QgLW4gIiRjb21waWxlciI7IHRoZW4KKyAgICAjIFdlIGRvbid0IHdhbnQgLWZuby1leGNlcHRpb24gd2hlbiBjb21waWxpbmcgQysrIGNvZGUsIHNvIHNldCB0aGUKKyAgICAjIG5vX2J1aWx0aW5fZmxhZyBzZXBhcmF0ZWx5CisgICAgaWYgdGVzdCB5ZXMgPSAiJEdYWCI7IHRoZW4KKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnX0NYWD0nIC1mbm8tYnVpbHRpbicKKyAgICBlbHNlCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZ19DWFg9CisgICAgZmkKKworICAgIGlmIHRlc3QgeWVzID0gIiRHWFgiOyB0aGVuCisgICAgICAjIFNldCB1cCBkZWZhdWx0IEdOVSBDKysgY29uZmlndXJhdGlvbgorCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1nbnUtbGQgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2dudV9sZCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfZ251X2xkOyB0ZXN0IG5vID0gIiR3aXRodmFsIiB8fCB3aXRoX2dudV9sZD15ZXMKK2Vsc2UKKyAgd2l0aF9nbnVfbGQ9bm8KK2ZpCisKK2FjX3Byb2c9bGQKK2lmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCisgICMgQ2hlY2sgaWYgZ2NjIC1wcmludC1wcm9nLW5hbWU9bGQgZ2l2ZXMgYSBwYXRoLgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBsZCB1c2VkIGJ5ICRDQyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgbGQgdXNlZCBieSAkQ0MuLi4gIiA+JjY7IH0KKyAgY2FzZSAkaG9zdCBpbgorICAqLSotbWluZ3cqKQorICAgICMgZ2NjIGxlYXZlcyBhIHRyYWlsaW5nIGNhcnJpYWdlIHJldHVybiwgd2hpY2ggdXBzZXRzIG1pbmd3CisgICAgYWNfcHJvZz1gKCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkKSAyPiY1IHwgdHIgLWQgJ1wwMTUnYCA7OworICAqKQorICAgIGFjX3Byb2c9YCgkQ0MgLXByaW50LXByb2ctbmFtZT1sZCkgMj4mNWAgOzsKKyAgZXNhYworICBjYXNlICRhY19wcm9nIGluCisgICAgIyBBY2NlcHQgYWJzb2x1dGUgcGF0aHMuCisgICAgW1xcL10qIHwgPzpbXFwvXSopCisgICAgICByZV9kaXJlbHQ9Jy9bXi9dW14vXSovXC5cLi8nCisgICAgICAjIENhbm9uaWNhbGl6ZSB0aGUgcGF0aG5hbWUgb2YgbGQKKyAgICAgIGFjX3Byb2c9YCRFQ0hPICIkYWNfcHJvZyJ8ICRTRUQgJ3MlXFxcXCUvJWcnYAorICAgICAgd2hpbGUgJEVDSE8gIiRhY19wcm9nIiB8ICRHUkVQICIkcmVfZGlyZWx0IiA+IC9kZXYvbnVsbCAyPiYxOyBkbworCWFjX3Byb2c9YCRFQ0hPICRhY19wcm9nfCAkU0VEICJzJSRyZV9kaXJlbHQlLyUiYAorICAgICAgZG9uZQorICAgICAgdGVzdCAteiAiJExEIiAmJiBMRD0kYWNfcHJvZworICAgICAgOzsKKyAgIiIpCisgICAgIyBJZiBpdCBmYWlscywgdGhlbiBwcmV0ZW5kIHdlIGFyZW4ndCB1c2luZyBHQ0MuCisgICAgYWNfcHJvZz1sZAorICAgIDs7CisgICopCisgICAgIyBJZiBpdCBpcyByZWxhdGl2ZSwgdGhlbiBzZWFyY2ggZm9yIHRoZSBmaXJzdCBsZCBpbiBQQVRILgorICAgIHdpdGhfZ251X2xkPXVua25vd24KKyAgICA7OworICBlc2FjCitlbGlmIHRlc3QgeWVzID0gIiR3aXRoX2dudV9sZCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgR05VIGxkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBHTlUgbGQuLi4gIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igbm9uLUdOVSBsZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igbm9uLUdOVSBsZC4uLiAiID4mNjsgfQorZmkKK2lmICR7bHRfY3ZfcGF0aF9MRCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLXogIiRMRCI7IHRoZW4KKyAgbHRfc2F2ZV9pZnM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorICBmb3IgYWNfZGlyIGluICRQQVRIOyBkbworICAgIElGUz0kbHRfc2F2ZV9pZnMKKyAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAgIGlmIHRlc3QgLWYgIiRhY19kaXIvJGFjX3Byb2ciIHx8IHRlc3QgLWYgIiRhY19kaXIvJGFjX3Byb2ckYWNfZXhlZXh0IjsgdGhlbgorICAgICAgbHRfY3ZfcGF0aF9MRD0kYWNfZGlyLyRhY19wcm9nCisgICAgICAjIENoZWNrIHRvIHNlZSBpZiB0aGUgcHJvZ3JhbSBpcyBHTlUgbGQuICBJJ2QgcmF0aGVyIHVzZSAtLXZlcnNpb24sCisgICAgICAjIGJ1dCBhcHBhcmVudGx5IHNvbWUgdmFyaWFudHMgb2YgR05VIGxkIG9ubHkgYWNjZXB0IC12LgorICAgICAgIyBCcmVhayBvbmx5IGlmIGl0IHdhcyB0aGUgR05VL25vbi1HTlUgbGQgdGhhdCB3ZSBwcmVmZXIuCisgICAgICBjYXNlIGAiJGx0X2N2X3BhdGhfTEQiIC12IDI+JjEgPC9kZXYvbnVsbGAgaW4KKyAgICAgICpHTlUqIHwgKid3aXRoIEJGRCcqKQorCXRlc3Qgbm8gIT0gIiR3aXRoX2dudV9sZCIgJiYgYnJlYWsKKwk7OworICAgICAgKikKKwl0ZXN0IHllcyAhPSAiJHdpdGhfZ251X2xkIiAmJiBicmVhaworCTs7CisgICAgICBlc2FjCisgICAgZmkKKyAgZG9uZQorICBJRlM9JGx0X3NhdmVfaWZzCitlbHNlCisgIGx0X2N2X3BhdGhfTEQ9JExEICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorZmkKK2ZpCisKK0xEPSRsdF9jdl9wYXRoX0xECitpZiB0ZXN0IC1uICIkTEQiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTEQiID4mNQorJGFzX2VjaG8gIiRMRCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKK3Rlc3QgLXogIiRMRCIgJiYgYXNfZm5fZXJyb3IgJD8gIm5vIGFjY2VwdGFibGUgbGQgZm91bmQgaW4gXCRQQVRIIiAiJExJTkVOTyIgNQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiB0aGUgbGlua2VyICgkTEQpIGlzIEdOVSBsZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiB0aGUgbGlua2VyICgkTEQpIGlzIEdOVSBsZC4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9wcm9nX2dudV9sZCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgICMgSSdkIHJhdGhlciB1c2UgLS12ZXJzaW9uIGhlcmUsIGJ1dCBhcHBhcmVudGx5IHNvbWUgR05VIGxkcyBvbmx5IGFjY2VwdCAtdi4KK2Nhc2UgYCRMRCAtdiAyPiYxIDwvZGV2L251bGxgIGluCisqR05VKiB8ICond2l0aCBCRkQnKikKKyAgbHRfY3ZfcHJvZ19nbnVfbGQ9eWVzCisgIDs7CisqKQorICBsdF9jdl9wcm9nX2dudV9sZD1ubworICA7OworZXNhYworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcHJvZ19nbnVfbGQiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2dudV9sZCIgPiY2OyB9Cit3aXRoX2dudV9sZD0kbHRfY3ZfcHJvZ19nbnVfbGQKKworCisKKworCisKKworICAgICAgIyBDaGVjayBpZiBHTlUgQysrIHVzZXMgR05VIGxkIGFzIHRoZSB1bmRlcmx5aW5nIGxpbmtlciwgc2luY2UgdGhlCisgICAgICAjIGFyY2hpdmluZyBjb21tYW5kcyBiZWxvdyBhc3N1bWUgdGhhdCBHTlUgbGQgaXMgYmVpbmcgdXNlZC4KKyAgICAgIGlmIHRlc3QgeWVzID0gIiR3aXRoX2dudV9sZCI7IHRoZW4KKyAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDICRwaWNfZmxhZyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckQ0MgJHBpY19mbGFnIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgJHdsLXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisKKyAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR3bC1ycGF0aCAkd2wkbGliZGlyJworICAgICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYPSckd2wtLWV4cG9ydC1keW5hbWljJworCisgICAgICAgICMgSWYgYXJjaGl2ZV9jbWRzIHJ1bnMgTEQsIG5vdCBDQywgd2xhcmMgc2hvdWxkIGJlIGVtcHR5CisgICAgICAgICMgWFhYIEkgdGhpbmsgd2xhcmMgY2FuIGJlIGVsaW1pbmF0ZWQgaW4gbHRjZi1jeHgsIGJ1dCBJIG5lZWQgdG8KKyAgICAgICAgIyAgICAgaW52ZXN0aWdhdGUgaXQgYSBsaXR0bGUgYml0IG1vcmUuIChNTSkKKyAgICAgICAgd2xhcmM9JyR3bCcKKworICAgICAgICAjIGFuY2llbnQgR05VIGxkIGRpZG4ndCBzdXBwb3J0IC0td2hvbGUtYXJjaGl2ZSBldC4gYWwuCisgICAgICAgIGlmIGV2YWwgImAkQ0MgLXByaW50LXByb2ctbmFtZT1sZGAgLS1oZWxwIDI+JjEiIHwKKwkgICRHUkVQICduby13aG9sZS1hcmNoaXZlJyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0kd2xhcmMnLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICckd2xhcmMnLS1uby13aG9sZS1hcmNoaXZlJworICAgICAgICBlbHNlCisgICAgICAgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYPQorICAgICAgICBmaQorICAgICAgZWxzZQorICAgICAgICB3aXRoX2dudV9sZD1ubworICAgICAgICB3bGFyYz0KKworICAgICAgICAjIEEgZ2VuZXJpYyBhbmQgdmVyeSBzaW1wbGUgZGVmYXVsdCBzaGFyZWQgbGlicmFyeSBjcmVhdGlvbgorICAgICAgICAjIGNvbW1hbmQgZm9yIEdOVSBDKysgZm9yIHRoZSBjYXNlIHdoZXJlIGl0IHVzZXMgdGhlIG5hdGl2ZQorICAgICAgICAjIGxpbmtlciwgaW5zdGVhZCBvZiBHTlUgbGQuICBJZiBwb3NzaWJsZSwgdGhpcyBzZXR0aW5nIHNob3VsZAorICAgICAgICAjIG92ZXJyaWRkZW4gdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIG5hdGl2ZSBsaW5rZXIgZmVhdHVyZXMgb24KKyAgICAgICAgIyB0aGUgcGxhdGZvcm0gaXQgaXMgYmVpbmcgdXNlZCBvbi4KKyAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbyAkbGliJworICAgICAgZmkKKworICAgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworICAgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisgICAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKyAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQIC12ICJeQ29uZmlndXJlZCB3aXRoOiIgfCAkR1JFUCAiXC1MIicKKworICAgIGVsc2UKKyAgICAgIEdYWD1ubworICAgICAgd2l0aF9nbnVfbGQ9bm8KKyAgICAgIHdsYXJjPQorICAgIGZpCisKKyAgICAjIFBPUlRNRTogZmlsbCBpbiBhIGRlc2NyaXB0aW9uIG9mIHlvdXIgc3lzdGVtJ3MgQysrIGxpbmsgY2hhcmFjdGVyaXN0aWNzCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRoZSAkY29tcGlsZXIgbGlua2VyICgkTEQpIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzLi4uICIgPiY2OyB9CisgICAgbGRfc2hsaWJzX0NYWD15ZXMKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgICBhaXgzKikKKyAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisgICAgICAgIGxkX3NobGlic19DWFg9bm8KKyAgICAgICAgOzsKKyAgICAgIGFpeFs0LTldKikKKyAgICAgICAgaWYgdGVzdCBpYTY0ID0gIiRob3N0X2NwdSI7IHRoZW4KKyAgICAgICAgICAjIE9uIElBNjQsIHRoZSBsaW5rZXIgZG9lcyBydW4gdGltZSBsaW5raW5nIGJ5IGRlZmF1bHQsIHNvIHdlIGRvbid0CisgICAgICAgICAgIyBoYXZlIHRvIGRvIGFueXRoaW5nIHNwZWNpYWwuCisgICAgICAgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz1ubworICAgICAgICAgIGV4cF9zeW1fZmxhZz0nLUJleHBvcnQnCisgICAgICAgICAgbm9fZW50cnlfZmxhZz0KKyAgICAgICAgZWxzZQorICAgICAgICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KKworICAgICAgICAgICMgVGVzdCBpZiB3ZSBhcmUgdHJ5aW5nIHRvIHVzZSBydW4gdGltZSBsaW5raW5nIG9yIG5vcm1hbAorICAgICAgICAgICMgQUlYIHN0eWxlIGxpbmtpbmcuIElmIC1icnRsIGlzIHNvbWV3aGVyZSBpbiBMREZMQUdTLCB3ZQorICAgICAgICAgICMgbmVlZCB0byBkbyBydW50aW1lIGxpbmtpbmcuCisgICAgICAgICAgY2FzZSAkaG9zdF9vcyBpbiBhaXg0LlsyM118YWl4NC5bMjNdLip8YWl4WzUtOV0qKQorCSAgICBmb3IgbGRfZmxhZyBpbiAkTERGTEFHUzsgZG8KKwkgICAgICBjYXNlICRsZF9mbGFnIGluCisJICAgICAgKi1icnRsKikKKwkgICAgICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9eWVzCisJICAgICAgICBicmVhaworCSAgICAgICAgOzsKKwkgICAgICBlc2FjCisJICAgIGRvbmUKKwkgICAgOzsKKyAgICAgICAgICBlc2FjCisKKyAgICAgICAgICBleHBfc3ltX2ZsYWc9Jy1iZXhwb3J0JworICAgICAgICAgIG5vX2VudHJ5X2ZsYWc9Jy1ibm9lbnRyeScKKyAgICAgICAgZmkKKworICAgICAgICAjIFdoZW4gbGFyZ2UgZXhlY3V0YWJsZXMgb3Igc2hhcmVkIG9iamVjdHMgYXJlIGJ1aWx0LCBBSVggbGQgY2FuCisgICAgICAgICMgaGF2ZSBwcm9ibGVtcyBjcmVhdGluZyB0aGUgdGFibGUgb2YgY29udGVudHMuICBJZiBsaW5raW5nIGEgbGlicmFyeQorICAgICAgICAjIG9yIHByb2dyYW0gcmVzdWx0cyBpbiAiZXJyb3IgVE9DIG92ZXJmbG93IiBhZGQgLW1taW5pbWFsLXRvYyB0bworICAgICAgICAjIENYWEZMQUdTL0NGTEFHUyBmb3IgZysrL2djYy4gIEluIHRoZSBjYXNlcyB3aGVyZSB0aGF0IGlzIG5vdAorICAgICAgICAjIGVub3VnaCB0byBmaXggdGhlIHByb2JsZW0sIGFkZCAtV2wsLWJiaWd0b2MgdG8gTERGTEFHUy4KKworICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPScnCisgICAgICAgIGhhcmRjb2RlX2RpcmVjdF9DWFg9eWVzCisgICAgICAgIGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZV9DWFg9eWVzCisgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYPSc6JworICAgICAgICBsaW5rX2FsbF9kZXBsaWJzX0NYWD15ZXMKKyAgICAgICAgZmlsZV9saXN0X3NwZWNfQ1hYPSckd2wtZiwnCisKKyAgICAgICAgaWYgdGVzdCB5ZXMgPSAiJEdYWCI7IHRoZW4KKyAgICAgICAgICBjYXNlICRob3N0X29zIGluIGFpeDQuWzAxMl18YWl4NC5bMDEyXS4qKQorICAgICAgICAgICMgV2Ugb25seSB3YW50IHRvIGRvIHRoaXMgb24gQUlYIDQuMiBhbmQgbG93ZXIsIHRoZSBjaGVjaworICAgICAgICAgICMgYmVsb3cgZm9yIGJyb2tlbiBjb2xsZWN0MiBkb2Vzbid0IHdvcmsgdW5kZXIgNC4zKworCSAgY29sbGVjdDJuYW1lPWAkQ0MgLXByaW50LXByb2ctbmFtZT1jb2xsZWN0MmAKKwkgIGlmIHRlc3QgLWYgIiRjb2xsZWN0Mm5hbWUiICYmCisJICAgICBzdHJpbmdzICIkY29sbGVjdDJuYW1lIiB8ICRHUkVQIHJlc29sdmVfbGliX25hbWUgPi9kZXYvbnVsbAorCSAgdGhlbgorCSAgICAjIFdlIGhhdmUgcmV3b3JrZWQgY29sbGVjdDIKKwkgICAgOgorCSAgZWxzZQorCSAgICAjIFdlIGhhdmUgb2xkIGNvbGxlY3QyCisJICAgIGhhcmRjb2RlX2RpcmVjdF9DWFg9dW5zdXBwb3J0ZWQKKwkgICAgIyBJdCBmYWlscyB0byBmaW5kIHVuaW5zdGFsbGVkIGxpYnJhcmllcyB3aGVuIHRoZSB1bmluc3RhbGxlZAorCSAgICAjIHBhdGggaXMgbm90IGxpc3RlZCBpbiB0aGUgbGlicGF0aC4gIFNldHRpbmcgaGFyZGNvZGVfbWludXNfTAorCSAgICAjIHRvIHVuc3VwcG9ydGVkIGZvcmNlcyByZWxpbmtpbmcKKwkgICAgaGFyZGNvZGVfbWludXNfTF9DWFg9eWVzCisJICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSctTCRsaWJkaXInCisJICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYPQorCSAgZmkKKyAgICAgICAgICBlc2FjCisgICAgICAgICAgc2hhcmVkX2ZsYWc9Jy1zaGFyZWQnCisJICBpZiB0ZXN0IHllcyA9ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyI7IHRoZW4KKwkgICAgc2hhcmVkX2ZsYWc9JHNoYXJlZF9mbGFnJyAkd2wtRycKKwkgIGZpCisgICAgICAgIGVsc2UKKyAgICAgICAgICAjIG5vdCB1c2luZyBnY2MKKyAgICAgICAgICBpZiB0ZXN0IGlhNjQgPSAiJGhvc3RfY3B1IjsgdGhlbgorCSAgIyBWaXN1YWxBZ2UgQysrLCBWZXJzaW9uIDUuNSBmb3IgQUlYIDVMIGZvciBJQS02NCwgQmV0YSAzIFJlbGVhc2UKKwkgICMgY2hva2VzIG9uIC1XbCwtRy4gVGhlIGZvbGxvd2luZyBsaW5lIGlzIGNvcnJlY3Q6CisJICBzaGFyZWRfZmxhZz0nLUcnCisgICAgICAgICAgZWxzZQorCSAgICBpZiB0ZXN0IHllcyA9ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyI7IHRoZW4KKwkgICAgICBzaGFyZWRfZmxhZz0nJHdsLUcnCisJICAgIGVsc2UKKwkgICAgICBzaGFyZWRfZmxhZz0nJHdsLWJNOlNSRScKKwkgICAgZmkKKyAgICAgICAgICBmaQorICAgICAgICBmaQorCisgICAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFg9JyR3bC1iZXhwYWxsJworICAgICAgICAjIEl0IHNlZW1zIHRoYXQgLWJleHBhbGwgZG9lcyBub3QgZXhwb3J0IHN5bWJvbHMgYmVnaW5uaW5nIHdpdGgKKyAgICAgICAgIyB1bmRlcnNjb3JlIChfKSwgc28gaXQgaXMgYmV0dGVyIHRvIGdlbmVyYXRlIGEgbGlzdCBvZiBzeW1ib2xzIHRvCisJIyBleHBvcnQuCisgICAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9sc19DWFg9eWVzCisgICAgICAgIGlmIHRlc3QgeWVzID0gIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIjsgdGhlbgorICAgICAgICAgICMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1bnRpbWUgbG9hZGluZyBmbGFncyAoLWJydGwpLAorICAgICAgICAgICMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KKyAgICAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9Jy1iZXJvaycKKyAgICAgICAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4gZW1wdHkKKyAgICAgICAgICAjIGV4ZWN1dGFibGUuCisgICAgICAgICAgaWYgdGVzdCBzZXQgPSAiJHtsdF9jdl9haXhfbGlicGF0aCtzZXR9IjsgdGhlbgorICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGgKK2Vsc2UKKyAgaWYgJHtsdF9jdl9haXhfbGlicGF0aF9fQ1hYKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jeHhfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKworICBsdF9haXhfbGlicGF0aF9zZWQ9JworICAgICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworCSAgL14wLyB7CisJICAgICAgcy9eMCAgKlwoW14gXSpcKSAqJC9cMS8KKwkgICAgICBwCisJICB9CisgICAgICB9JworICBsdF9jdl9haXhfbGlicGF0aF9fQ1hYPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorICAjIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCisgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF9fQ1hYIjsgdGhlbgorICAgIGx0X2N2X2FpeF9saWJwYXRoX19DWFg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisgIGZpCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoX19DWFgiOyB0aGVuCisgICAgbHRfY3ZfYWl4X2xpYnBhdGhfX0NYWD0vdXNyL2xpYjovbGliCisgIGZpCisKK2ZpCisKKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoX19DWFgKK2ZpCisKKyAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHdsLWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisKKyAgICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJHdsJyRub19lbnRyeV9mbGFnJyAkY29tcGlsZXJfZmxhZ3MgYGlmIHRlc3QgLW4gIiRhbGxvd191bmRlZmluZWRfZmxhZyI7IHRoZW4gZnVuY19lY2hvX2FsbCAiJHdsJGFsbG93X3VuZGVmaW5lZF9mbGFnIjsgZWxzZSA6OyBmaWAgJHdsJyRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scycgJyRzaGFyZWRfZmxhZworICAgICAgICBlbHNlCisgICAgICAgICAgaWYgdGVzdCBpYTY0ID0gIiRob3N0X2NwdSI7IHRoZW4KKwkgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR3bC1SICRsaWJkaXI6L3Vzci9saWI6L2xpYicKKwkgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPSIteiBub2RlZnMiCisJICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSJcJENDICRzaGFyZWRfZmxhZyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHdsJG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgJHdsJGFsbG93X3VuZGVmaW5lZF9mbGFnICciXCR3bCRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyIKKyAgICAgICAgICBlbHNlCisJICAgICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbgorCSAgICAjIGVtcHR5IGV4ZWN1dGFibGUuCisJICAgIGlmIHRlc3Qgc2V0ID0gIiR7bHRfY3ZfYWl4X2xpYnBhdGgrc2V0fSI7IHRoZW4KKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoCitlbHNlCisgIGlmICR7bHRfY3ZfYWl4X2xpYnBhdGhfX0NYWCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY3h4X3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisKKyAgbHRfYWl4X2xpYnBhdGhfc2VkPScKKyAgICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKwkgIC9eMC8geworCSAgICAgIHMvXjAgICpcKFteIF0qXCkgKiQvXDEvCisJICAgICAgcAorCSAgfQorICAgICAgfScKKyAgbHRfY3ZfYWl4X2xpYnBhdGhfX0NYWD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKyAgIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfX0NYWCI7IHRoZW4KKyAgICBsdF9jdl9haXhfbGlicGF0aF9fQ1hYPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorICBmaQorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF9fQ1hYIjsgdGhlbgorICAgIGx0X2N2X2FpeF9saWJwYXRoX19DWFg9L3Vzci9saWI6L2xpYgorICBmaQorCitmaQorCisgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aF9fQ1hYCitmaQorCisJICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSckd2wtYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKwkgICAgIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVuIHRpbWUgbG9hZGluZyBmbGFncywKKwkgICAgIyAtYmVyb2sgd2lsbCBsaW5rIHdpdGhvdXQgZXJyb3IsIGJ1dCBtYXkgcHJvZHVjZSBhIGJyb2tlbiBsaWJyYXJ5LgorCSAgICBub191bmRlZmluZWRfZmxhZ19DWFg9JyAkd2wtYmVybm90b2snCisJICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD0nICR3bC1iZXJvaycKKwkgICAgaWYgdGVzdCB5ZXMgPSAiJHdpdGhfZ251X2xkIjsgdGhlbgorCSAgICAgICMgV2Ugb25seSB1c2UgdGhpcyBjb2RlIGZvciBHTlUgbGRzIHRoYXQgc3VwcG9ydCAtLXdob2xlLWFyY2hpdmUuCisJICAgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYPSckd2wtLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJHdsLS1uby13aG9sZS1hcmNoaXZlJworCSAgICBlbHNlCisJICAgICAgIyBFeHBvcnRlZCBzeW1ib2xzIGNhbiBiZSBwdWxsZWQgaW50byBzaGFyZWQgb2JqZWN0cyBmcm9tIGFyY2hpdmVzCisJICAgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYPSckY29udmVuaWVuY2UnCisJICAgIGZpCisJICAgIGFyY2hpdmVfY21kc19uZWVkX2xjX0NYWD15ZXMKKwkgICAgIyBUaGlzIGlzIHNpbWlsYXIgdG8gaG93IEFJWCB0cmFkaXRpb25hbGx5IGJ1aWxkcyBpdHMgc2hhcmVkCisJICAgICMgbGlicmFyaWVzLgorCSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0iXCRDQyAkc2hhcmVkX2ZsYWciJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICR3bC1ibm9lbnRyeSAkY29tcGlsZXJfZmxhZ3MgJHdsLWJFOiRleHBvcnRfc3ltYm9scyRhbGxvd191bmRlZmluZWRfZmxhZ34kQVIgJEFSX0ZMQUdTICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lJHJlbGVhc2UuYSAkb3V0cHV0X29iamRpci8kc29uYW1lJworICAgICAgICAgIGZpCisgICAgICAgIGZpCisgICAgICAgIDs7CisKKyAgICAgIGJlb3MqKQorCWlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKwkgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD11bnN1cHBvcnRlZAorCSAgIyBKb3NlcGggQmVja2VuYmFjaCA8anJiM0BiZXN0LmNvbT4gc2F5cyBzb21lIHJlbGVhc2VzIG9mIGdjYworCSAgIyBzdXBwb3J0IC0tdW5kZWZpbmVkLiAgVGhpcyBkZXNlcnZlcyBzb21lIGludmVzdGlnYXRpb24uICBGSVhNRQorCSAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1ub3N0YXJ0ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwllbHNlCisJICBsZF9zaGxpYnNfQ1hYPW5vCisJZmkKKwk7OworCisgICAgICBjaG9ydXMqKQorICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgICopCisJICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgIGxkX3NobGlic19DWFg9bm8KKwkgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgOzsKKworICAgICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorCWNhc2UgJEdYWCwkY2NfYmFzZW5hbWUgaW4KKwksY2wqIHwgbm8sY2wqKQorCSAgIyBOYXRpdmUgTVNWQworCSAgIyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLCBhcyB0aGVyZSBpcworCSAgIyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKwkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPScgJworCSAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPXVuc3VwcG9ydGVkCisJICBhbHdheXNfZXhwb3J0X3N5bWJvbHNfQ1hYPXllcworCSAgZmlsZV9saXN0X3NwZWNfQ1hYPSdAJworCSAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KKwkgIGxpYmV4dD1saWIKKwkgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgorCSAgc2hyZXh0X2NtZHM9LmRsbAorCSAgIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorCSAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzIC1XbCwtRExMLC1JTVBMSUI6IiR0b29sX291dHB1dF9vYmpkaXIkbGlibmFtZS5kbGwubGliIn5saW5rbmFtZXM9JworCSAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9J2lmICAgdGVzdCBERUYgPSAiYCRTRUQgLW4gICAgIC1lICdcJydzL15bCSBdKi8vJ1wnJyAgICAgLWUgJ1wnJy9eXCg7LipcKSokL2QnXCcnICAgICAtZSAnXCcncy9eXChFWFBPUlRTXHxMSUJSQVJZXClcKFsJIF0uKlwpKiQvREVGL3AnXCcnICAgICAtZSBxICAgICAkZXhwb3J0X3N5bWJvbHNgIiA7IHRoZW4KKyAgICAgICAgICAgICAgY3AgIiRleHBvcnRfc3ltYm9scyIgIiRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmIjsKKyAgICAgICAgICAgICAgZWNobyAiJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUuZGVmIiA+ICIkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cCI7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICRTRUQgLWUgJ1wnJ3MvXi8tbGluayAtRVhQT1JUOi8nXCcnIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHA7CisgICAgICAgICAgICBmaX4KKyAgICAgICAgICAgICRDQyAtbyAkdG9vbF9vdXRwdXRfb2JqZGlyJHNvbmFtZSAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYnMgIkAkdG9vbF9vdXRwdXRfb2JqZGlyJHNvbmFtZS5leHAiIC1XbCwtRExMLC1JTVBMSUI6IiR0b29sX291dHB1dF9vYmpkaXIkbGlibmFtZS5kbGwubGliIn4KKyAgICAgICAgICAgIGxpbmtuYW1lcz0nCisJICAjIFRoZSBsaW5rZXIgd2lsbCBub3QgYXV0b21hdGljYWxseSBidWlsZCBhIHN0YXRpYyBsaWIgaWYgd2UgYnVpbGQgYSBETEwuCisJICAjIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcywgQ1hYKT0ndHJ1ZScKKwkgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfQ1hYPXllcworCSAgIyBEb24ndCB1c2UgcmFubGliCisJICBvbGRfcG9zdGluc3RhbGxfY21kc19DWFg9J2NobW9kIDY0NCAkb2xkbGliJworCSAgcG9zdGxpbmtfY21kc19DWFg9J2x0X291dHB1dGZpbGU9IkBPVVRQVVRAIn4KKyAgICAgICAgICAgIGx0X3Rvb2xfb3V0cHV0ZmlsZT0iQFRPT0xfT1VUUFVUQCJ+CisgICAgICAgICAgICBjYXNlICRsdF9vdXRwdXRmaWxlIGluCisgICAgICAgICAgICAgICouZXhlfCouRVhFKSA7OworICAgICAgICAgICAgICAqKQorICAgICAgICAgICAgICAgIGx0X291dHB1dGZpbGU9JGx0X291dHB1dGZpbGUuZXhlCisgICAgICAgICAgICAgICAgbHRfdG9vbF9vdXRwdXRmaWxlPSRsdF90b29sX291dHB1dGZpbGUuZXhlCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgIGVzYWN+CisgICAgICAgICAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJGx0X291dHB1dGZpbGUifgorICAgICAgICAgICAgaWYgdGVzdCA6ICE9ICIkTUFOSUZFU1RfVE9PTCIgJiYgdGVzdCAtZiAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOyB0aGVuCisgICAgICAgICAgICAgICRNQU5JRkVTVF9UT09MIC1tYW5pZmVzdCAiJGx0X3Rvb2xfb3V0cHV0ZmlsZS5tYW5pZmVzdCIgLW91dHB1dHJlc291cmNlOiIkbHRfdG9vbF9vdXRwdXRmaWxlIiB8fCBleGl0IDE7CisgICAgICAgICAgICAgICRSTSAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOworICAgICAgICAgICAgZmknCisJICA7OworCSopCisJICAjIGcrKworCSAgIyBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsIENYWCkgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsCisJICAjIGFzIHRoZXJlIGlzIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgorCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9Jy1MJGxpYmRpcicKKwkgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFg9JyR3bC0tZXhwb3J0LWFsbC1zeW1ib2xzJworCSAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPXVuc3VwcG9ydGVkCisJICBhbHdheXNfZXhwb3J0X3N5bWJvbHNfQ1hYPW5vCisJICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzX0NYWD15ZXMKKworCSAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgorCSAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHdsLS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJworCSAgICAjIElmIHRoZSBleHBvcnQtc3ltYm9scyBmaWxlIGFscmVhZHkgaXMgYSAuZGVmIGZpbGUsIHVzZSBpdCBhcworCSAgICAjIGlzOyBvdGhlcndpc2UsIHByZXBlbmQgRVhQT1JUUy4uLgorCSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0naWYgICB0ZXN0IERFRiA9ICJgJFNFRCAtbiAgICAgLWUgJ1wnJ3MvXlsJIF0qLy8nXCcnICAgICAtZSAnXCcnL15cKDsuKlwpKiQvZCdcJycgICAgIC1lICdcJydzL15cKEVYUE9SVFNcfExJQlJBUllcKVwoWwkgXS4qXCkqJC9ERUYvcCdcJycgICAgIC1lIHEgICAgICRleHBvcnRfc3ltYm9sc2AiIDsgdGhlbgorICAgICAgICAgICAgICBjcCAkZXhwb3J0X3N5bWJvbHMgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIGVjaG8gRVhQT1JUUyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworICAgICAgICAgICAgICBjYXQgJGV4cG9ydF9zeW1ib2xzID4+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworICAgICAgICAgICAgZml+CisgICAgICAgICAgICAkQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWYgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHdsLS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJworCSAgZWxzZQorCSAgICBsZF9zaGxpYnNfQ1hYPW5vCisJICBmaQorCSAgOzsKKwllc2FjCisJOzsKKyAgICAgIGRhcndpbiogfCByaGFwc29keSopCisKKworICBhcmNoaXZlX2NtZHNfbmVlZF9sY19DWFg9bm8KKyAgaGFyZGNvZGVfZGlyZWN0X0NYWD1ubworICBoYXJkY29kZV9hdXRvbWF0aWNfQ1hYPXllcworICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0NYWD11bnN1cHBvcnRlZAorICBpZiB0ZXN0IHllcyA9ICIkbHRfY3ZfbGRfZm9yY2VfbG9hZCI7IHRoZW4KKyAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19DWFg9J2Bmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSAkd2wtZm9yY2VfbG9hZCwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCcKKworICBlbHNlCisgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYPScnCisgIGZpCisgIGxpbmtfYWxsX2RlcGxpYnNfQ1hYPXllcworICBhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9JF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkCisgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgIGlmb3J0KnxuYWdmb3IqKSBfbHRfZGFyX2Nhbl9zaGFyZWQ9eWVzIDs7CisgICAgICopIF9sdF9kYXJfY2FuX3NoYXJlZD0kR0NDIDs7CisgIGVzYWMKKyAgaWYgdGVzdCB5ZXMgPSAiJF9sdF9kYXJfY2FuX3NoYXJlZCI7IHRoZW4KKyAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD1mdW5jX2VjaG9fYWxsCisgICAgYXJjaGl2ZV9jbWRzX0NYWD0iXCRDQyAtZHluYW1pY2xpYiBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lIFwkcnBhdGgvXCRzb25hbWUgXCR2ZXJzdHJpbmcgJF9sdF9kYXJfc2luZ2xlX21vZCRfbHRfZHN5bXV0aWwiCisgICAgbW9kdWxlX2NtZHNfQ1hYPSJcJENDIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgLWJ1bmRsZSBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MkX2x0X2RzeW11dGlsIgorICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSJzZWQgJ3N8XnxffCcgPCBcJGV4cG9ydF9zeW1ib2xzID4gXCRvdXRwdXRfb2JqZGlyL1wkbGlibmFtZS1zeW1ib2xzLmV4cHN5bX5cJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgXCRycGF0aC9cJHNvbmFtZSBcJHZlcnN0cmluZyAkX2x0X2Rhcl9zaW5nbGVfbW9kJF9sdF9kYXJfZXhwb3J0X3N5bXMkX2x0X2RzeW11dGlsIgorICAgIG1vZHVsZV9leHBzeW1fY21kc19DWFg9InNlZCAtZSAnc3xefF98JyA8IFwkZXhwb3J0X3N5bWJvbHMgPiBcJG91dHB1dF9vYmpkaXIvXCRsaWJuYW1lLXN5bWJvbHMuZXhwc3ltflwkQ0MgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiAtYnVuZGxlIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyRfbHRfZGFyX2V4cG9ydF9zeW1zJF9sdF9kc3ltdXRpbCIKKyAgICAgICBpZiB0ZXN0IHllcyAhPSAiJGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2QiOyB0aGVuCisgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSJcJENDIC1yIC1rZWVwX3ByaXZhdGVfZXh0ZXJucyAtbm9zdGRsaWIgLW8gXCRsaWItbWFzdGVyLm8gXCRsaWJvYmpzflwkQ0MgLWR5bmFtaWNsaWIgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiBcJGxpYi1tYXN0ZXIubyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lIFwkcnBhdGgvXCRzb25hbWUgXCR2ZXJzdHJpbmckX2x0X2RzeW11dGlsIgorICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9InNlZCAnc3xefF98JyA8IFwkZXhwb3J0X3N5bWJvbHMgPiBcJG91dHB1dF9vYmpkaXIvXCRsaWJuYW1lLXN5bWJvbHMuZXhwc3ltflwkQ0MgLXIgLWtlZXBfcHJpdmF0ZV9leHRlcm5zIC1ub3N0ZGxpYiAtbyBcJGxpYi1tYXN0ZXIubyBcJGxpYm9ianN+XCRDQyAtZHluYW1pY2xpYiBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIFwkbGliLW1hc3Rlci5vIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgXCRycGF0aC9cJHNvbmFtZSBcJHZlcnN0cmluZyRfbHRfZGFyX2V4cG9ydF9zeW1zJF9sdF9kc3ltdXRpbCIKKyAgICBmaQorCisgIGVsc2UKKyAgbGRfc2hsaWJzX0NYWD1ubworICBmaQorCisJOzsKKworICAgICAgZGd1eCopCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgZWMrKyopCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBsZF9zaGxpYnNfQ1hYPW5vCisJICAgIDs7CisgICAgICAgICAgZ2hjeCopCisJICAgICMgR3JlZW4gSGlsbHMgQysrIENvbXBpbGVyCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBsZF9zaGxpYnNfQ1hYPW5vCisJICAgIDs7CisgICAgICAgICAgKikKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIGxkX3NobGlic19DWFg9bm8KKwkgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICA7OworCisgICAgICBmcmVlYnNkMi4qKQorICAgICAgICAjIEMrKyBzaGFyZWQgbGlicmFyaWVzIHJlcG9ydGVkIHRvIGJlIGZhaXJseSBicm9rZW4gYmVmb3JlCisJIyBzd2l0Y2ggdG8gRUxGCisgICAgICAgIGxkX3NobGlic19DWFg9bm8KKyAgICAgICAgOzsKKworICAgICAgZnJlZWJzZC1lbGYqKQorICAgICAgICBhcmNoaXZlX2NtZHNfbmVlZF9sY19DWFg9bm8KKyAgICAgICAgOzsKKworICAgICAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQorICAgICAgICAjIEZyZWVCU0QgMyBhbmQgbGF0ZXIgdXNlIEdOVSBDKysgYW5kIEdOVSBsZCB3aXRoIHN0YW5kYXJkIEVMRgorICAgICAgICAjIGNvbnZlbnRpb25zCisgICAgICAgIGxkX3NobGlic19DWFg9eWVzCisgICAgICAgIDs7CisKKyAgICAgIGhhaWt1KikKKyAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworICAgICAgICBsaW5rX2FsbF9kZXBsaWJzX0NYWD15ZXMKKyAgICAgICAgOzsKKworICAgICAgaHB1eDkqKQorICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHdsK2IgJHdsJGxpYmRpcicKKyAgICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFg9OgorICAgICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYPSckd2wtRScKKyAgICAgICAgaGFyZGNvZGVfZGlyZWN0X0NYWD15ZXMKKyAgICAgICAgaGFyZGNvZGVfbWludXNfTF9DWFg9eWVzICMgTm90IGluIHRoZSBzZWFyY2ggUEFUSCwKKwkJCQkgICAgICAgICAgICAgIyBidXQgYXMgdGhlIGRlZmF1bHQKKwkJCQkgICAgICAgICAgICAgIyBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KKworICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIENDKikKKyAgICAgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorICAgICAgICAgICAgbGRfc2hsaWJzX0NYWD1ubworICAgICAgICAgICAgOzsKKyAgICAgICAgICBhQ0MqKQorICAgICAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1iICR3bCtiICR3bCRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc350ZXN0ICJ4JG91dHB1dF9vYmpkaXIvJHNvbmFtZSIgPSAieCRsaWIiIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKyAgICAgICAgICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKyAgICAgICAgICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorICAgICAgICAgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisgICAgICAgICAgICAjCisgICAgICAgICAgICAjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCisgICAgICAgICAgICAjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQorICAgICAgICAgICAgIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQorICAgICAgICAgICAgIyBkZXBlbmRlbmNpZXMuCisgICAgICAgICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCgkQ0MgLWIgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEpIHwgJEVHUkVQICJcLUwiYDsgbGlzdD0gOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgZnVuY19lY2hvX2FsbCAiJGxpc3QiJworICAgICAgICAgICAgOzsKKyAgICAgICAgICAqKQorICAgICAgICAgICAgaWYgdGVzdCB5ZXMgPSAiJEdYWCI7IHRoZW4KKyAgICAgICAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgLW5vc3RkbGliICRwaWNfZmxhZyAkd2wrYiAkd2wkaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAieCRvdXRwdXRfb2JqZGlyLyRzb25hbWUiID0gIngkbGliIiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorICAgICAgICAgICAgICBsZF9zaGxpYnNfQ1hYPW5vCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICA7OworCisgICAgICBocHV4MTAqfGhwdXgxMSopCisgICAgICAgIGlmIHRlc3Qgbm8gPSAiJHdpdGhfZ251X2xkIjsgdGhlbgorCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR3bCtiICR3bCRsaWJkaXInCisJICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWD06CisKKyAgICAgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgICAgICAgaHBwYSo2NCp8aWE2NCopCisgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAqKQorCSAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFg9JyR3bC1FJworICAgICAgICAgICAgICA7OworICAgICAgICAgIGVzYWMKKyAgICAgICAgZmkKKyAgICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgICAgICBocHBhKjY0KnxpYTY0KikKKyAgICAgICAgICAgIGhhcmRjb2RlX2RpcmVjdF9DWFg9bm8KKyAgICAgICAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfQ1hYPW5vCisgICAgICAgICAgICA7OworICAgICAgICAgICopCisgICAgICAgICAgICBoYXJkY29kZV9kaXJlY3RfQ1hYPXllcworICAgICAgICAgICAgaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlX0NYWD15ZXMKKyAgICAgICAgICAgIGhhcmRjb2RlX21pbnVzX0xfQ1hYPXllcyAjIE5vdCBpbiB0aGUgc2VhcmNoIFBBVEgsCisJCQkJCSAgICAgICAgICMgYnV0IGFzIHRoZSBkZWZhdWx0CisJCQkJCSAgICAgICAgICMgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCisgICAgICAgICAgICA7OworICAgICAgICBlc2FjCisKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBDQyopCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBsZF9zaGxpYnNfQ1hYPW5vCisJICAgIDs7CisgICAgICAgICAgYUNDKikKKwkgICAgY2FzZSAkaG9zdF9jcHUgaW4KKwkgICAgICBocHBhKjY0KikKKwkgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtYiAkd2wraCAkd2wkc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICAgICAgOzsKKwkgICAgICBpYTY0KikKKwkgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtYiAkd2wraCAkd2wkc29uYW1lICR3bCtub2RlZmF1bHRycGF0aCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKwkgICAgICAgIDs7CisJICAgICAgKikKKwkgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtYiAkd2wraCAkd2wkc29uYW1lICR3bCtiICR3bCRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKwkgICAgICAgIDs7CisJICAgIGVzYWMKKwkgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworCSAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKwkgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisJICAgICMKKwkgICAgIyBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIHdheSB0byBwcmV2ZW50IHRoaXMgY29tcGlsZXIgZnJvbQorCSAgICAjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQorCSAgICAjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5CisJICAgICMgZGVwZW5kZW5jaWVzLgorCSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCgkQ0MgLWIgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEpIHwgJEdSRVAgIlwtTCJgOyBsaXN0PSA7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyBmdW5jX2VjaG9fYWxsICIkbGlzdCInCisJICAgIDs7CisgICAgICAgICAgKikKKwkgICAgaWYgdGVzdCB5ZXMgPSAiJEdYWCI7IHRoZW4KKwkgICAgICBpZiB0ZXN0IG5vID0gIiR3aXRoX2dudV9sZCI7IHRoZW4KKwkgICAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisJICAgICAgICAgIGhwcGEqNjQqKQorCSAgICAgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAtZlBJQyAkd2wraCAkd2wkc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICAgICAgICAgIDs7CisJICAgICAgICAgIGlhNjQqKQorCSAgICAgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcGljX2ZsYWcgJHdsK2ggJHdsJHNvbmFtZSAkd2wrbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgICAgICAgICAgOzsKKwkgICAgICAgICAgKikKKwkgICAgICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHBpY19mbGFnICR3bCtoICR3bCRzb25hbWUgJHdsK2IgJHdsJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICAgICAgICAgIDs7CisJICAgICAgICBlc2FjCisJICAgICAgZmkKKwkgICAgZWxzZQorCSAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICAgIGxkX3NobGlic19DWFg9bm8KKwkgICAgZmkKKwkgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICA7OworCisgICAgICBpbnRlcml4WzMtOV0qKQorCWhhcmRjb2RlX2RpcmVjdF9DWFg9bm8KKwloYXJkY29kZV9zaGxpYnBhdGhfdmFyX0NYWD1ubworCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSckd2wtcnBhdGgsJGxpYmRpcicKKwlleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYPSckd2wtRScKKwkjIEhhY2s6IE9uIEludGVyaXggMy54LCB3ZSBjYW5ub3QgY29tcGlsZSBQSUMgYmVjYXVzZSBvZiBhIGJyb2tlbiBnY2MuCisJIyBJbnN0ZWFkLCBzaGFyZWQgbGlicmFyaWVzIGFyZSBsb2FkZWQgYXQgYW4gaW1hZ2UgYmFzZSAoMHgxMDAwMDAwMCBieQorCSMgZGVmYXVsdCkgYW5kIHJlbG9jYXRlZCBpZiB0aGV5IGNvbmZsaWN0LCB3aGljaCBpcyBhIHNsb3cgdmVyeSBtZW1vcnkKKwkjIGNvbnN1bWluZyBhbmQgZnJhZ21lbnRpbmcgcHJvY2Vzcy4gIFRvIGF2b2lkIHRoaXMsIHdlIHBpY2sgYSByYW5kb20sCisJIyAyNTYgS2lCLWFsaWduZWQgaW1hZ2UgYmFzZSBiZXR3ZWVuIDB4NTAwMDAwMDAgYW5kIDB4NkZGQzAwMDAgYXQgbGluaworCSMgdGltZS4gIE1vdmluZyB1cCBmcm9tIDB4MTAwMDAwMDAgYWxzbyBhbGxvd3MgbW9yZSBzYnJrKDIpIHNwYWNlLgorCWFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLWgsJHNvbmFtZSAkd2wtLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKKwlhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nc2VkICJzfF58X3wiICRleHBvcnRfc3ltYm9scyA+JG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW1+JENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtaCwkc29uYW1lICR3bC0tcmV0YWluLXN5bWJvbHMtZmlsZSwkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cHN5bSAkd2wtLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKKwk7OworICAgICAgaXJpeDUqIHwgaXJpeDYqKQorICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIENDKikKKwkgICAgIyBTR0kgQysrCisJICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1hbGwgLW11bHRpZ290ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAkb3V0cHV0X29iamRpci9zb19sb2NhdGlvbnMgLW8gJGxpYicKKworCSAgICAjIEFyY2hpdmVzIGNvbnRhaW5pbmcgQysrIG9iamVjdCBmaWxlcyBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKKwkgICAgIyAiQ0MgLWFyIiwgd2hlcmUgIkNDIiBpcyB0aGUgSVJJWCBDKysgY29tcGlsZXIuICBUaGlzIGlzCisJICAgICMgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VyZSBpbnN0YW50aWF0ZWQgdGVtcGxhdGVzIGFyZSBpbmNsdWRlZAorCSAgICAjIGluIHRoZSBhcmNoaXZlLgorCSAgICBvbGRfYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1hciAtV1IsLXUgLW8gJG9sZGxpYiAkb2xkb2JqcycKKwkgICAgOzsKKyAgICAgICAgICAqKQorCSAgICBpZiB0ZXN0IHllcyA9ICIkR1hYIjsgdGhlbgorCSAgICAgIGlmIHRlc3Qgbm8gPSAiJHdpdGhfZ251X2xkIjsgdGhlbgorCSAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIkd2wtc2V0X3ZlcnNpb24gJHdsJHZlcnN0cmluZyJgICR3bC11cGRhdGVfcmVnaXN0cnkgJHdsJG91dHB1dF9vYmpkaXIvc29fbG9jYXRpb25zIC1vICRsaWInCisJICAgICAgZWxzZQorCSAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIkd2wtc2V0X3ZlcnNpb24gJHdsJHZlcnN0cmluZyJgIC1vICRsaWInCisJICAgICAgZmkKKwkgICAgZmkKKwkgICAgbGlua19hbGxfZGVwbGlic19DWFg9eWVzCisJICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR3bC1ycGF0aCAkd2wkbGliZGlyJworICAgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWD06CisgICAgICAgIGluaGVyaXRfcnBhdGhfQ1hYPXllcworICAgICAgICA7OworCisgICAgICBsaW51eCogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUgfCBnbnUqKQorICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIEtDQyopCisJICAgICMgS3VjayBhbmQgQXNzb2NpYXRlcywgSW5jLiAoS0FJKSBDKysgQ29tcGlsZXIKKworCSAgICAjIEtDQyB3aWxsIG9ubHkgY3JlYXRlIGEgc2hhcmVkIGxpYnJhcnkgaWYgdGhlIG91dHB1dCBmaWxlCisJICAgICMgZW5kcyB3aXRoICIuc28iIChvciAiLnNsIiBmb3IgSFAtVVgpLCBzbyByZW5hbWUgdGhlIGxpYnJhcnkKKwkgICAgIyB0byBpdHMgcHJvcGVyIG5hbWUgKHdpdGggdmVyc2lvbikgYWZ0ZXIgbGlua2luZy4KKwkgICAgYXJjaGl2ZV9jbWRzX0NYWD0ndGVtcGV4dD1gZWNobyAkc2hhcmVkX2V4dCB8ICRTRUQgLWUgJ1wnJ3MvXChbXigpMC05QS1aYS16e31dXCkvXFxcXFwxL2cnXCcnYDsgdGVtcGxpYj1gZWNobyAkbGliIHwgJFNFRCAtZSAicy9cJHRlbXBleHRcLi4qLy5zby8iYDsgJENDICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtLXNvbmFtZSAkc29uYW1lIC1vIFwkdGVtcGxpYjsgbXYgXCR0ZW1wbGliICRsaWInCisJICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSd0ZW1wZXh0PWBlY2hvICRzaGFyZWRfZXh0IHwgJFNFRCAtZSAnXCcncy9cKFteKCkwLTlBLVphLXp7fV1cKS9cXFxcXDEvZydcJydgOyB0ZW1wbGliPWBlY2hvICRsaWIgfCAkU0VEIC1lICJzL1wkdGVtcGV4dFwuLiovLnNvLyJgOyAkQ0MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC0tc29uYW1lICRzb25hbWUgLW8gXCR0ZW1wbGliICR3bC1yZXRhaW4tc3ltYm9scy1maWxlLCRleHBvcnRfc3ltYm9sczsgbXYgXCR0ZW1wbGliICRsaWInCisJICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKwkgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisJICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorCSAgICAjCisJICAgICMgVGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYSB3YXkgdG8gcHJldmVudCB0aGlzIGNvbXBpbGVyIGZyb20KKwkgICAgIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KKwkgICAgIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQorCSAgICAjIGRlcGVuZGVuY2llcy4KKwkgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAkQ0MgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IC1vIGxpYmNvbmZ0ZXN0JHNoYXJlZF9leHQgMj4mMSB8ICRHUkVQICJsZCJgOyBybSAtZiBsaWJjb25mdGVzdCRzaGFyZWRfZXh0OyBsaXN0PSA7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyBmdW5jX2VjaG9fYWxsICIkbGlzdCInCisKKwkgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR3bC1ycGF0aCwkbGliZGlyJworCSAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYPSckd2wtLWV4cG9ydC1keW5hbWljJworCisJICAgICMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZworCSAgICAjICJDQyAtQnN0YXRpYyIsIHdoZXJlICJDQyIgaXMgdGhlIEtBSSBDKysgY29tcGlsZXIuCisJICAgIG9sZF9hcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLUJzdGF0aWMgLW8gJG9sZGxpYiAkb2xkb2JqcycKKwkgICAgOzsKKwkgIGljcGMqIHwgZWNwYyogKQorCSAgICAjIEludGVsIEMrKworCSAgICB3aXRoX2dudV9sZD15ZXMKKwkgICAgIyB2ZXJzaW9uIDguMCBhbmQgYWJvdmUgb2YgaWNwYyBjaG9rZSBvbiBtdWx0aXBseSBkZWZpbmVkIHN5bWJvbHMKKwkgICAgIyBpZiB3ZSBhZGQgJHByZWRlcF9vYmplY3RzIGFuZCAkcG9zdGRlcF9vYmplY3RzLCBob3dldmVyIDcuMSBhbmQKKwkgICAgIyBlYXJsaWVyIGRvIG5vdCBhZGQgdGhlIG9iamVjdHMgdGhlbXNlbHZlcy4KKwkgICAgY2FzZSBgJENDIC1WIDI+JjFgIGluCisJICAgICAgKiJWZXJzaW9uIDcuIiopCisJICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJCWFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lICR3bC1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCQk7OworCSAgICAgICopICAjIFZlcnNpb24gOC4wIG9yIG5ld2VyCisJICAgICAgICB0bXBfaWR5bj0KKwkgICAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisJCSAgaWE2NCopIHRtcF9pZHluPScgLWlfZHluYW1pYyc7OworCQllc2FjCisJICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCciJHRtcF9pZHluIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCQlhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nJENDIC1zaGFyZWQnIiR0bXBfaWR5biInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgJHdsLXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisJCTs7CisJICAgIGVzYWMKKwkgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPW5vCisJICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSckd2wtcnBhdGgsJGxpYmRpcicKKwkgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0nJHdsLS1leHBvcnQtZHluYW1pYycKKwkgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYPSckd2wtLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJHdsLS1uby13aG9sZS1hcmNoaXZlJworCSAgICA7OworICAgICAgICAgIHBnQ0MqIHwgcGdjcHAqKQorICAgICAgICAgICAgIyBQb3J0bGFuZCBHcm91cCBDKysgY29tcGlsZXIKKwkgICAgY2FzZSBgJENDIC1WYCBpbgorCSAgICAqcGdDQ1wgWzEtNV0uKiB8ICpwZ2NwcFwgWzEtNV0uKikKKwkgICAgICBwcmVsaW5rX2NtZHNfQ1hYPSd0cGxkaXI9VGVtcGxhdGUuZGlyfgorICAgICAgICAgICAgICAgcm0gLXJmICR0cGxkaXJ+CisgICAgICAgICAgICAgICAkQ0MgLS1wcmVsaW5rX29iamVjdHMgLS1pbnN0YW50aWF0aW9uX2RpciAkdHBsZGlyICRvYmpzICRsaWJvYmpzICRjb21waWxlX2RlcGxpYnN+CisgICAgICAgICAgICAgICBjb21waWxlX2NvbW1hbmQ9IiRjb21waWxlX2NvbW1hbmQgYGZpbmQgJHRwbGRpciAtbmFtZSBcKi5vIHwgc29ydCB8ICROTDJTUGAiJworCSAgICAgIG9sZF9hcmNoaXZlX2NtZHNfQ1hYPSd0cGxkaXI9VGVtcGxhdGUuZGlyfgorICAgICAgICAgICAgICAgIHJtIC1yZiAkdHBsZGlyfgorICAgICAgICAgICAgICAgICRDQyAtLXByZWxpbmtfb2JqZWN0cyAtLWluc3RhbnRpYXRpb25fZGlyICR0cGxkaXIgJG9sZG9ianMkb2xkX2RlcGxpYnN+CisgICAgICAgICAgICAgICAgJEFSICRBUl9GTEFHUyAkb2xkbGliJG9sZG9ianMkb2xkX2RlcGxpYnMgYGZpbmQgJHRwbGRpciAtbmFtZSBcKi5vIHwgc29ydCB8ICROTDJTUGB+CisgICAgICAgICAgICAgICAgJFJBTkxJQiAkb2xkbGliJworCSAgICAgIGFyY2hpdmVfY21kc19DWFg9J3RwbGRpcj1UZW1wbGF0ZS5kaXJ+CisgICAgICAgICAgICAgICAgcm0gLXJmICR0cGxkaXJ+CisgICAgICAgICAgICAgICAgJENDIC0tcHJlbGlua19vYmplY3RzIC0taW5zdGFudGlhdGlvbl9kaXIgJHRwbGRpciAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJGNvbnZlbmllbmNlICRwb3N0ZGVwX29iamVjdHN+CisgICAgICAgICAgICAgICAgJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCBzb3J0IHwgJE5MMlNQYCAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwkgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0ndHBsZGlyPVRlbXBsYXRlLmRpcn4KKyAgICAgICAgICAgICAgICBybSAtcmYgJHRwbGRpcn4KKyAgICAgICAgICAgICAgICAkQ0MgLS1wcmVsaW5rX29iamVjdHMgLS1pbnN0YW50aWF0aW9uX2RpciAkdHBsZGlyICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkY29udmVuaWVuY2UgJHBvc3RkZXBfb2JqZWN0c34KKyAgICAgICAgICAgICAgICAkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8IHNvcnQgfCAkTkwyU1BgICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAkd2wtcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKwkgICAgICA7OworCSAgICAqKSAjIFZlcnNpb24gNiBhbmQgYWJvdmUgdXNlIHdlYWsgc3ltYm9scworCSAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lICR3bC1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCSAgICAgIDs7CisJICAgIGVzYWMKKworCSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHdsLS1ycGF0aCAkd2wkbGliZGlyJworCSAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYPSckd2wtLWV4cG9ydC1keW5hbWljJworCSAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19DWFg9JyR3bC0td2hvbGUtYXJjaGl2ZWBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCAkd2wtLW5vLXdob2xlLWFyY2hpdmUnCisgICAgICAgICAgICA7OworCSAgY3h4KikKKwkgICAgIyBDb21wYXEgQysrCisJICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwkgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9JyRDQyAtc2hhcmVkICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgIC1vICRsaWIgJHdsLXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzJworCisJICAgIHJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRICisJICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSctcnBhdGggJGxpYmRpcicKKwkgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFg9OgorCisJICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKwkgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisJICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorCSAgICAjCisJICAgICMgVGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYSB3YXkgdG8gcHJldmVudCB0aGlzIGNvbXBpbGVyIGZyb20KKwkgICAgIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KKwkgICAgIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQorCSAgICAjIGRlcGVuZGVuY2llcy4KKwkgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAkQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQICJsZCJgOyB0ZW1wbGlzdD1gZnVuY19lY2hvX2FsbCAiJHRlbXBsaXN0IiB8ICRTRUQgInMvXCheLipsZC4qXClcKCAuKmxkIC4qJFwpL1wxLyJgOyBsaXN0PSA7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyBmdW5jX2VjaG9fYWxsICJYJGxpc3QiIHwgJFhzZWQnCisJICAgIDs7CisJICB4bCogfCBtcGl4bCogfCBiZ3hsKikKKwkgICAgIyBJQk0gWEwgOC4wIG9uIFBQQywgd2l0aCBHTlUgbGQKKwkgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR3bC1ycGF0aCAkd2wkbGliZGlyJworCSAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYPSckd2wtLWV4cG9ydC1keW5hbWljJworCSAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXFta3Nocm9iaiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJICAgIGlmIHRlc3QgeWVzID0gIiRzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmciOyB0aGVuCisJICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9J2VjaG8gInsgZ2xvYmFsOiIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisgICAgICAgICAgICAgICAgY2F0ICRleHBvcnRfc3ltYm9scyB8IHNlZCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorICAgICAgICAgICAgICAgIGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorICAgICAgICAgICAgICAgICRDQyAtcW1rc2hyb2JqICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgJHdsLXZlcnNpb24tc2NyaXB0ICR3bCRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJworCSAgICBmaQorCSAgICA7OworCSAgKikKKwkgICAgY2FzZSBgJENDIC1WIDI+JjEgfCBzZWQgNXFgIGluCisJICAgICpTdW5cIEMqKQorCSAgICAgICMgU3VuIEMrKyA1LjkKKwkgICAgICBub191bmRlZmluZWRfZmxhZ19DWFg9JyAtemRlZnMnCisJICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1HJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1oJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKwkgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nJENDIC1HJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1oJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMnCisJICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9Jy1SJGxpYmRpcicKKwkgICAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19DWFg9JyR3bC0td2hvbGUtYXJjaGl2ZWBuZXdfY29udmVuaWVuY2U9OyBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0IC16IFwiJGNvbnZcIiB8fCBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgICR3bC0tbm8td2hvbGUtYXJjaGl2ZScKKwkgICAgICBjb21waWxlcl9uZWVkc19vYmplY3RfQ1hYPXllcworCisJICAgICAgIyBOb3Qgc3VyZSB3aGV0aGVyIHNvbWV0aGluZyBiYXNlZCBvbgorCSAgICAgICMgJENDICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAtbyBsaWJjb25mdGVzdCRzaGFyZWRfZXh0IDI+JjEKKwkgICAgICAjIHdvdWxkIGJlIGJldHRlci4KKwkgICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nZnVuY19lY2hvX2FsbCcKKworCSAgICAgICMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZworCSAgICAgICMgIkNDIC14YXIiLCB3aGVyZSAiQ0MiIGlzIHRoZSBTdW4gQysrIGNvbXBpbGVyLiAgVGhpcyBpcworCSAgICAgICMgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VyZSBpbnN0YW50aWF0ZWQgdGVtcGxhdGVzIGFyZSBpbmNsdWRlZAorCSAgICAgICMgaW4gdGhlIGFyY2hpdmUuCisJICAgICAgb2xkX2FyY2hpdmVfY21kc19DWFg9JyRDQyAteGFyIC1vICRvbGRsaWIgJG9sZG9ianMnCisJICAgICAgOzsKKwkgICAgZXNhYworCSAgICA7OworCWVzYWMKKwk7OworCisgICAgICBseW54b3MqKQorICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwlsZF9zaGxpYnNfQ1hYPW5vCisJOzsKKworICAgICAgbTg4ayopCisgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorICAgICAgICBsZF9zaGxpYnNfQ1hYPW5vCisJOzsKKworICAgICAgbXZzKikKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBjeHgqKQorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgbGRfc2hsaWJzX0NYWD1ubworCSAgICA7OworCSAgKikKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIGxkX3NobGlic19DWFg9bm8KKwkgICAgOzsKKwllc2FjCisJOzsKKworICAgICAgbmV0YnNkKikKKyAgICAgICAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KKwkgIGFyY2hpdmVfY21kc19DWFg9JyRMRCAtQnNoYXJlYWJsZSAgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkbGlua2VyX2ZsYWdzJworCSAgd2xhcmM9CisJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nLVIkbGliZGlyJworCSAgaGFyZGNvZGVfZGlyZWN0X0NYWD15ZXMKKwkgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfQ1hYPW5vCisJZmkKKwkjIFdvcmthcm91bmQgc29tZSBicm9rZW4gcHJlLTEuNSB0b29sY2hhaW5zCisJb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9JyRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgJEdSRVAgY29uZnRlc3QuJG9iamV4dCB8ICRTRUQgLWUgInM6LWxnY2MgLWxjIC1sZ2NjOjoiJworCTs7CisKKyAgICAgICpudG8qIHwgKnFueCopCisgICAgICAgIGxkX3NobGlic19DWFg9eWVzCisJOzsKKworICAgICAgb3BlbmJzZCogfCBiaXRyaWcqKQorCWlmIHRlc3QgLWYgL3Vzci9saWJleGVjL2xkLnNvOyB0aGVuCisJICBoYXJkY29kZV9kaXJlY3RfQ1hYPXllcworCSAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9DWFg9bm8KKwkgIGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZV9DWFg9eWVzCisJICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRsaWInCisJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHdsLXJwYXRoLCRsaWJkaXInCisJICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX19gIjsgdGhlbgorCSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtcmV0YWluLXN5bWJvbHMtZmlsZSwkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKwkgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0nJHdsLUUnCisJICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0kd2xhcmMnLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICckd2xhcmMnLS1uby13aG9sZS1hcmNoaXZlJworCSAgZmkKKwkgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPWZ1bmNfZWNob19hbGwKKwllbHNlCisJICBsZF9zaGxpYnNfQ1hYPW5vCisJZmkKKwk7OworCisgICAgICBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgS0NDKikKKwkgICAgIyBLdWNrIGFuZCBBc3NvY2lhdGVzLCBJbmMuIChLQUkpIEMrKyBDb21waWxlcgorCisJICAgICMgS0NDIHdpbGwgb25seSBjcmVhdGUgYSBzaGFyZWQgbGlicmFyeSBpZiB0aGUgb3V0cHV0IGZpbGUKKwkgICAgIyBlbmRzIHdpdGggIi5zbyIgKG9yICIuc2wiIGZvciBIUC1VWCksIHNvIHJlbmFtZSB0aGUgbGlicmFyeQorCSAgICAjIHRvIGl0cyBwcm9wZXIgbmFtZSAod2l0aCB2ZXJzaW9uKSBhZnRlciBsaW5raW5nLgorCSAgICBhcmNoaXZlX2NtZHNfQ1hYPSd0ZW1wZXh0PWBlY2hvICRzaGFyZWRfZXh0IHwgJFNFRCAtZSAnXCcncy9cKFteKCkwLTlBLVphLXp7fV1cKS9cXFxcXDEvZydcJydgOyB0ZW1wbGliPWBlY2hvICIkbGliIiB8ICRTRUQgLWUgInMvXCR0ZW1wZXh0XC4uKi8uc28vImA7ICRDQyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLS1zb25hbWUgJHNvbmFtZSAtbyBcJHRlbXBsaWI7IG12IFwkdGVtcGxpYiAkbGliJworCisJICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSckd2wtcnBhdGgsJGxpYmRpcicKKwkgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFg9OgorCisJICAgICMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZworCSAgICAjIHRoZSBLQUkgQysrIGNvbXBpbGVyLgorCSAgICBjYXNlICRob3N0IGluCisJICAgICAgb3NmMyopIG9sZF9hcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLUJzdGF0aWMgLW8gJG9sZGxpYiAkb2xkb2JqcycgOzsKKwkgICAgICAqKSBvbGRfYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1vICRvbGRsaWIgJG9sZG9ianMnIDs7CisJICAgIGVzYWMKKwkgICAgOzsKKyAgICAgICAgICBSQ0MqKQorCSAgICAjIFJhdGlvbmFsIEMrKyAyLjQuMQorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgbGRfc2hsaWJzX0NYWD1ubworCSAgICA7OworICAgICAgICAgIGN4eCopCisJICAgIGNhc2UgJGhvc3QgaW4KKwkgICAgICBvc2YzKikKKwkgICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD0nICR3bC1leHBlY3RfdW5yZXNvbHZlZCAkd2xcKicKKwkgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkJGFsbG93X3VuZGVmaW5lZF9mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR3bC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAkb3V0cHV0X29iamRpci9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwkgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSckd2wtcnBhdGggJHdsJGxpYmRpcicKKwkJOzsKKwkgICAgICAqKQorCSAgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJworCSAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1tc3ltIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICRvdXRwdXRfb2JqZGlyL3NvX2xvY2F0aW9ucyAtbyAkbGliJworCSAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9J2ZvciBpIGluIGBjYXQgJGV4cG9ydF9zeW1ib2xzYDsgZG8gcHJpbnRmICIlcyAlc1xcbiIgLWV4cG9ydGVkX3N5bWJvbCAiXCRpIiA+PiAkbGliLmV4cDsgZG9uZX4KKyAgICAgICAgICAgICAgICAgIGVjaG8gIi1oaWRkZW4iPj4gJGxpYi5leHB+CisgICAgICAgICAgICAgICAgICAkQ0MgLXNoYXJlZCRhbGxvd191bmRlZmluZWRfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW1zeW0gLXNvbmFtZSAkc29uYW1lICR3bC1pbnB1dCAkd2wkbGliLmV4cCAgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJG91dHB1dF9vYmpkaXIvc29fbG9jYXRpb25zIC1vICRsaWJ+CisgICAgICAgICAgICAgICAgICAkUk0gJGxpYi5leHAnCisJICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nLXJwYXRoICRsaWJkaXInCisJCTs7CisJICAgIGVzYWMKKworCSAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWD06CisKKwkgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworCSAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKwkgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisJICAgICMKKwkgICAgIyBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIHdheSB0byBwcmV2ZW50IHRoaXMgY29tcGlsZXIgZnJvbQorCSAgICAjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQorCSAgICAjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5CisJICAgICMgZGVwZW5kZW5jaWVzLgorCSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgJEdSRVAgImxkIiB8ICRHUkVQIC12ICJsZDoiYDsgdGVtcGxpc3Q9YGZ1bmNfZWNob19hbGwgIiR0ZW1wbGlzdCIgfCAkU0VEICJzL1woXi4qbGQuKlwpXCggLipsZC4qJFwpL1wxLyJgOyBsaXN0PSA7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyBmdW5jX2VjaG9fYWxsICIkbGlzdCInCisJICAgIDs7CisJICAqKQorCSAgICBpZiB0ZXN0IHllcyxubyA9ICIkR1hYLCR3aXRoX2dudV9sZCI7IHRoZW4KKwkgICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9JyAkd2wtZXhwZWN0X3VucmVzb2x2ZWQgJHdsXConCisJICAgICAgY2FzZSAkaG9zdCBpbgorCSAgICAgICAgb3NmMyopCisJICAgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHdsLXNldF92ZXJzaW9uICR3bCR2ZXJzdHJpbmciYCAkd2wtdXBkYXRlX3JlZ2lzdHJ5ICR3bCRvdXRwdXRfb2JqZGlyL3NvX2xvY2F0aW9ucyAtbyAkbGliJworCQkgIDs7CisJICAgICAgICAqKQorCSAgICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW5vc3RkbGliICRhbGxvd191bmRlZmluZWRfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLW1zeW0gJHdsLXNvbmFtZSAkd2wkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIkd2wtc2V0X3ZlcnNpb24gJHdsJHZlcnN0cmluZyJgICR3bC11cGRhdGVfcmVnaXN0cnkgJHdsJG91dHB1dF9vYmpkaXIvc29fbG9jYXRpb25zIC1vICRsaWInCisJCSAgOzsKKwkgICAgICBlc2FjCisKKwkgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHdsLXJwYXRoICR3bCRsaWJkaXInCisJICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFg9OgorCisJICAgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworCSAgICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorCSAgICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorCSAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQIC12ICJeQ29uZmlndXJlZCB3aXRoOiIgfCAkR1JFUCAiXC1MIicKKworCSAgICBlbHNlCisJICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgICAgbGRfc2hsaWJzX0NYWD1ubworCSAgICBmaQorCSAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIDs7CisKKyAgICAgIHBzb3MqKQorICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKyAgICAgICAgbGRfc2hsaWJzX0NYWD1ubworICAgICAgICA7OworCisgICAgICBzdW5vczQqKQorICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIENDKikKKwkgICAgIyBTdW4gQysrIDQueAorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgbGRfc2hsaWJzX0NYWD1ubworCSAgICA7OworICAgICAgICAgIGxjYyopCisJICAgICMgTHVjaWQKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIGxkX3NobGlic19DWFg9bm8KKwkgICAgOzsKKyAgICAgICAgICAqKQorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgbGRfc2hsaWJzX0NYWD1ubworCSAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIDs7CisKKyAgICAgIHNvbGFyaXMqKQorICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIENDKiB8IHN1bkNDKikKKwkgICAgIyBTdW4gQysrIDQuMiwgNS54IGFuZCBDZW50ZXJsaW5lIEMrKworICAgICAgICAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPXllcworCSAgICBub191bmRlZmluZWRfZmxhZ19DWFg9JyAtemRlZnMnCisJICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtRyRhbGxvd191bmRlZmluZWRfZmxhZyAtaCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CisgICAgICAgICAgICAgICRDQyAtRyRhbGxvd191bmRlZmluZWRfZmxhZyAkd2wtTSAkd2wkbGliLmV4cCAtaCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworCisJICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSctUiRsaWJkaXInCisJICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfQ1hYPW5vCisJICAgIGNhc2UgJGhvc3Rfb3MgaW4KKwkgICAgICBzb2xhcmlzMi5bMC01XSB8IHNvbGFyaXMyLlswLTVdLiopIDs7CisJICAgICAgKikKKwkJIyBUaGUgY29tcGlsZXIgZHJpdmVyIHdpbGwgY29tYmluZSBhbmQgcmVvcmRlciBsaW5rZXIgb3B0aW9ucywKKwkJIyBidXQgdW5kZXJzdGFuZHMgJy16IGxpbmtlcl9mbGFnJy4KKwkgICAgICAgICMgU3VwcG9ydGVkIHNpbmNlIFNvbGFyaXMgMi42IChtYXliZSAyLjUuMT8pCisJCXdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0nLXogYWxsZXh0cmFjdCRjb252ZW5pZW5jZSAteiBkZWZhdWx0ZXh0cmFjdCcKKwkgICAgICAgIDs7CisJICAgIGVzYWMKKwkgICAgbGlua19hbGxfZGVwbGlic19DWFg9eWVzCisKKwkgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J2Z1bmNfZWNob19hbGwnCisKKwkgICAgIyBBcmNoaXZlcyBjb250YWluaW5nIEMrKyBvYmplY3QgZmlsZXMgbXVzdCBiZSBjcmVhdGVkIHVzaW5nCisJICAgICMgIkNDIC14YXIiLCB3aGVyZSAiQ0MiIGlzIHRoZSBTdW4gQysrIGNvbXBpbGVyLiAgVGhpcyBpcworCSAgICAjIG5lY2Vzc2FyeSB0byBtYWtlIHN1cmUgaW5zdGFudGlhdGVkIHRlbXBsYXRlcyBhcmUgaW5jbHVkZWQKKwkgICAgIyBpbiB0aGUgYXJjaGl2ZS4KKwkgICAgb2xkX2FyY2hpdmVfY21kc19DWFg9JyRDQyAteGFyIC1vICRvbGRsaWIgJG9sZG9ianMnCisJICAgIDs7CisgICAgICAgICAgZ2N4KikKKwkgICAgIyBHcmVlbiBIaWxscyBDKysgQ29tcGlsZXIKKwkgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1oICR3bCRzb25hbWUgLW8gJGxpYicKKworCSAgICAjIFRoZSBDKysgY29tcGlsZXIgbXVzdCBiZSB1c2VkIHRvIGNyZWF0ZSB0aGUgYXJjaGl2ZS4KKwkgICAgb2xkX2FyY2hpdmVfY21kc19DWFg9JyRDQyAkTERGTEFHUyAtYXJjaGl2ZSAtbyAkb2xkbGliICRvbGRvYmpzJworCSAgICA7OworICAgICAgICAgICopCisJICAgICMgR05VIEMrKyBjb21waWxlciB3aXRoIFNvbGFyaXMgbGlua2VyCisJICAgIGlmIHRlc3QgeWVzLG5vID0gIiRHWFgsJHdpdGhfZ251X2xkIjsgdGhlbgorCSAgICAgIG5vX3VuZGVmaW5lZF9mbGFnX0NYWD0nICR3bC16ICR7d2x9ZGVmcycKKwkgICAgICBpZiAkQ0MgLS12ZXJzaW9uIHwgJEdSRVAgLXYgJ14yXC43JyA+IC9kZXYvbnVsbDsgdGhlbgorCSAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLWggJHdsJHNvbmFtZSAtbyAkbGliJworCSAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKyAgICAgICAgICAgICAgICAgICRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbm9zdGRsaWIgJHdsLU0gJHdsJGxpYi5leHAgJHdsLWggJHdsJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisKKwkgICAgICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKwkgICAgICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorCSAgICAgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisJICAgICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCAkR1JFUCAtdiAiXkNvbmZpZ3VyZWQgd2l0aDoiIHwgJEdSRVAgIlwtTCInCisJICAgICAgZWxzZQorCSAgICAgICAgIyBnKysgMi43IGFwcGVhcnMgdG8gcmVxdWlyZSAnLUcnIE5PVCAnLXNoYXJlZCcgb24gdGhpcworCSAgICAgICAgIyBwbGF0Zm9ybS4KKwkgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtRyAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1oICR3bCRzb25hbWUgLW8gJGxpYicKKwkgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CisgICAgICAgICAgICAgICAgICAkQ0MgLUcgLW5vc3RkbGliICR3bC1NICR3bCRsaWIuZXhwICR3bC1oICR3bCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworCisJICAgICAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisJICAgICAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKwkgICAgICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorCSAgICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9JyRDQyAtRyAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQIC12ICJeQ29uZmlndXJlZCB3aXRoOiIgfCAkR1JFUCAiXC1MIicKKwkgICAgICBmaQorCisJICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR3bC1SICR3bCRsaWJkaXInCisJICAgICAgY2FzZSAkaG9zdF9vcyBpbgorCQlzb2xhcmlzMi5bMC01XSB8IHNvbGFyaXMyLlswLTVdLiopIDs7CisJCSopCisJCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYPSckd2wteiAke3dsfWFsbGV4dHJhY3QkY29udmVuaWVuY2UgJHdsLXogJHt3bH1kZWZhdWx0ZXh0cmFjdCcKKwkJICA7OworCSAgICAgIGVzYWMKKwkgICAgZmkKKwkgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICA7OworCisgICAgc3lzdjQqdXcyKiB8IHN5c3Y1T3BlblVOSVgqIHwgc3lzdjVVbml4V2FyZTcuWzAxXS5bMTBdKiB8IHVuaXh3YXJlNyogfCBzY28zLjJ2NS4wLlswMjRdKikKKyAgICAgIG5vX3VuZGVmaW5lZF9mbGFnX0NYWD0nJHdsLXosdGV4dCcKKyAgICAgIGFyY2hpdmVfY21kc19uZWVkX2xjX0NYWD1ubworICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9DWFg9bm8KKyAgICAgIHJ1bnBhdGhfdmFyPSdMRF9SVU5fUEFUSCcKKworICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgQ0MqKQorCSAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1HICR3bC1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nJENDIC1HICR3bC1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgOzsKKwkqKQorCSAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHdsLWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkd2wtQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHdsLWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgICBzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqKQorCSMgTm90ZTogV2UgQ0FOTk9UIHVzZSAteiBkZWZzIGFzIHdlIG1pZ2h0IGRlc2lyZSwgYmVjYXVzZSB3ZSBkbyBub3QKKwkjIGxpbmsgd2l0aCAtbGMsIGFuZCB0aGF0IHdvdWxkIGNhdXNlIGFueSBzeW1ib2xzIHVzZWQgZnJvbSBsaWJjIHRvCisJIyBhbHdheXMgYmUgdW5yZXNvbHZlZCwgd2hpY2ggbWVhbnMganVzdCBhYm91dCBubyBsaWJyYXJ5IHdvdWxkCisJIyBldmVyIGxpbmsgY29ycmVjdGx5LiAgSWYgd2UncmUgbm90IHVzaW5nIEdOVSBsZCB3ZSB1c2UgLXogdGV4dAorCSMgdGhvdWdoLCB3aGljaCBkb2VzIGNhdGNoIHNvbWUgYmFkIHN5bWJvbHMgYnV0IGlzbid0IGFzIGhlYXZ5LWhhbmRlZAorCSMgYXMgLXogZGVmcy4KKwlub191bmRlZmluZWRfZmxhZ19DWFg9JyR3bC16LHRleHQnCisJYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPSckd2wteixub2RlZnMnCisJYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPW5vCisJaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9DWFg9bm8KKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHdsLVIsJGxpYmRpcicKKwloYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWD0nOicKKwlsaW5rX2FsbF9kZXBsaWJzX0NYWD15ZXMKKwlleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYPSckd2wtQmV4cG9ydCcKKwlydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCisKKwljYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIENDKikKKwkgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1HICR3bC1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckQ0MgLUcgJHdsLUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR3bC1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICAgIG9sZF9hcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLVRwcmVsaW5rX29iamVjdHMgJG9sZG9ianN+CisgICAgICAgICAgICAgICciJG9sZF9hcmNoaXZlX2NtZHNfQ1hYIgorCSAgICByZWxvYWRfY21kc19DWFg9JyRDQyAtVHByZWxpbmtfb2JqZWN0cyAkcmVsb2FkX29ianN+CisgICAgICAgICAgICAgICciJHJlbG9hZF9jbWRzX0NYWCIKKwkgICAgOzsKKwkgICopCisJICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkICR3bC1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkd2wtQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHdsLWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgICAgOzsKKwllc2FjCisgICAgICA7OworCisgICAgICB0YW5kZW0qKQorICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIE5DQyopCisJICAgICMgTm9uU3RvcC1VWCBOQ0MgMy4yMAorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgbGRfc2hsaWJzX0NYWD1ubworCSAgICA7OworICAgICAgICAgICopCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBsZF9zaGxpYnNfQ1hYPW5vCisJICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgOzsKKworICAgICAgdnh3b3JrcyopCisgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorICAgICAgICBsZF9zaGxpYnNfQ1hYPW5vCisgICAgICAgIDs7CisKKyAgICAgICopCisgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorICAgICAgICBsZF9zaGxpYnNfQ1hYPW5vCisgICAgICAgIDs7CisgICAgZXNhYworCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsZF9zaGxpYnNfQ1hYIiA+JjUKKyRhc19lY2hvICIkbGRfc2hsaWJzX0NYWCIgPiY2OyB9CisgICAgdGVzdCBubyA9ICIkbGRfc2hsaWJzX0NYWCIgJiYgY2FuX2J1aWxkX3NoYXJlZD1ubworCisgICAgR0NDX0NYWD0kR1hYCisgICAgTERfQ1hYPSRMRAorCisgICAgIyMgQ0FWRUFUIEVNUFRPUjoKKyAgICAjIyBUaGVyZSBpcyBubyBlbmNhcHN1bGF0aW9uIHdpdGhpbiB0aGUgZm9sbG93aW5nIG1hY3JvcywgZG8gbm90IGNoYW5nZQorICAgICMjIHRoZSBydW5uaW5nIG9yZGVyIG9yIG90aGVyd2lzZSBtb3ZlIHRoZW0gYXJvdW5kIHVubGVzcyB5b3Uga25vdyBleGFjdGx5CisgICAgIyMgd2hhdCB5b3UgYXJlIGRvaW5nLi4uCisgICAgIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYmVmb3JlIGFuZCBhZnRlciB0aGUgb2JqZWN0IGJlaW5nIGxpbmtlZDoKK3ByZWRlcF9vYmplY3RzX0NYWD0KK3Bvc3RkZXBfb2JqZWN0c19DWFg9CitwcmVkZXBzX0NYWD0KK3Bvc3RkZXBzX0NYWD0KK2NvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF9DWFg9CisKK2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxfTFRfRU9GCitjbGFzcyBGb28KK3sKK3B1YmxpYzoKKyAgRm9vICh2b2lkKSB7IGEgPSAwOyB9Citwcml2YXRlOgorICBpbnQgYTsKK307CitfTFRfRU9GCisKKworX2x0X2xpYmRlcHNfc2F2ZV9DRkxBR1M9JENGTEFHUworY2FzZSAiJENDICRDRkxBR1MgIiBpbiAjKAorKlwgLWZsdG8qXCAqKSBDRkxBR1M9IiRDRkxBR1MgLWZuby1sdG8iIDs7CisqXCAtZndob3ByKlwgKikgQ0ZMQUdTPSIkQ0ZMQUdTIC1mbm8td2hvcHIiIDs7CisqXCAtZnVzZS1saW5rZXItcGx1Z2luKlwgKikgQ0ZMQUdTPSIkQ0ZMQUdTIC1mbm8tdXNlLWxpbmtlci1wbHVnaW4iIDs7Citlc2FjCisKK2lmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19jb21waWxlXCIiOyB9ID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KKyAgIyBQYXJzZSB0aGUgY29tcGlsZXIgb3V0cHV0IGFuZCBleHRyYWN0IHRoZSBuZWNlc3NhcnkKKyAgIyBvYmplY3RzLCBsaWJyYXJpZXMgYW5kIGxpYnJhcnkgZmxhZ3MuCisKKyAgIyBTZW50aW5lbCB1c2VkIHRvIGtlZXAgdHJhY2sgb2Ygd2hldGhlciBvciBub3Qgd2UgYXJlIGJlZm9yZQorICAjIHRoZSBjb25mdGVzdCBvYmplY3QgZmlsZS4KKyAgcHJlX3Rlc3Rfb2JqZWN0X2RlcHNfZG9uZT1ubworCisgIGZvciBwIGluIGBldmFsICIkb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQiYDsgZG8KKyAgICBjYXNlICRwcmV2JHAgaW4KKworICAgIC1MKiB8IC1SKiB8IC1sKikKKyAgICAgICAjIFNvbWUgY29tcGlsZXJzIHBsYWNlIHNwYWNlIGJldHdlZW4gIi17TCxSfSIgYW5kIHRoZSBwYXRoLgorICAgICAgICMgUmVtb3ZlIHRoZSBzcGFjZS4KKyAgICAgICBpZiB0ZXN0IHgtTCA9ICIkcCIgfHwKKyAgICAgICAgICB0ZXN0IHgtUiA9ICIkcCI7IHRoZW4KKwkgcHJldj0kcAorCSBjb250aW51ZQorICAgICAgIGZpCisKKyAgICAgICAjIEV4cGFuZCB0aGUgc3lzcm9vdCB0byBlYXNlIGV4dHJhY3RpbmcgdGhlIGRpcmVjdG9yaWVzIGxhdGVyLgorICAgICAgIGlmIHRlc3QgLXogIiRwcmV2IjsgdGhlbgorICAgICAgICAgY2FzZSAkcCBpbgorICAgICAgICAgLUwqKSBmdW5jX3N0cmlwbmFtZV9jbmYgJy1MJyAnJyAiJHAiOyBwcmV2PS1MOyBwPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQgOzsKKyAgICAgICAgIC1SKikgZnVuY19zdHJpcG5hbWVfY25mICctUicgJycgIiRwIjsgcHJldj0tUjsgcD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0IDs7CisgICAgICAgICAtbCopIGZ1bmNfc3RyaXBuYW1lX2NuZiAnLWwnICcnICIkcCI7IHByZXY9LWw7IHA9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCA7OworICAgICAgICAgZXNhYworICAgICAgIGZpCisgICAgICAgY2FzZSAkcCBpbgorICAgICAgID0qKSBmdW5jX3N0cmlwbmFtZV9jbmYgJz0nICcnICIkcCI7IHA9JGx0X3N5c3Jvb3QkZnVuY19zdHJpcG5hbWVfcmVzdWx0IDs7CisgICAgICAgZXNhYworICAgICAgIGlmIHRlc3Qgbm8gPSAiJHByZV90ZXN0X29iamVjdF9kZXBzX2RvbmUiOyB0aGVuCisJIGNhc2UgJHByZXYgaW4KKwkgLUwgfCAtUikKKwkgICAjIEludGVybmFsIGNvbXBpbGVyIGxpYnJhcnkgcGF0aHMgc2hvdWxkIGNvbWUgYWZ0ZXIgdGhvc2UKKwkgICAjIHByb3ZpZGVkIHRoZSB1c2VyLiAgVGhlIHBvc3RkZXBzIGFscmVhZHkgY29tZSBhZnRlciB0aGUKKwkgICAjIHVzZXIgc3VwcGxpZWQgbGlicyBzbyB0aGVyZSBpcyBubyBuZWVkIHRvIHByb2Nlc3MgdGhlbS4KKwkgICBpZiB0ZXN0IC16ICIkY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoX0NYWCI7IHRoZW4KKwkgICAgIGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF9DWFg9JHByZXYkcAorCSAgIGVsc2UKKwkgICAgIGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF9DWFg9IiR7Y29tcGlsZXJfbGliX3NlYXJjaF9wYXRoX0NYWH0gJHByZXYkcCIKKwkgICBmaQorCSAgIDs7CisJICMgVGhlICItbCIgY2FzZSB3b3VsZCBuZXZlciBjb21lIGJlZm9yZSB0aGUgb2JqZWN0IGJlaW5nCisJICMgbGlua2VkLCBzbyBkb24ndCBib3RoZXIgaGFuZGxpbmcgdGhpcyBjYXNlLgorCSBlc2FjCisgICAgICAgZWxzZQorCSBpZiB0ZXN0IC16ICIkcG9zdGRlcHNfQ1hYIjsgdGhlbgorCSAgIHBvc3RkZXBzX0NYWD0kcHJldiRwCisJIGVsc2UKKwkgICBwb3N0ZGVwc19DWFg9IiR7cG9zdGRlcHNfQ1hYfSAkcHJldiRwIgorCSBmaQorICAgICAgIGZpCisgICAgICAgcHJldj0KKyAgICAgICA7OworCisgICAgKi5sdG8uJG9iamV4dCkgOzsgIyBJZ25vcmUgR0NDIExUTyBvYmplY3RzCisgICAgKi4kb2JqZXh0KQorICAgICAgICMgVGhpcyBhc3N1bWVzIHRoYXQgdGhlIHRlc3Qgb2JqZWN0IGZpbGUgb25seSBzaG93cyB1cAorICAgICAgICMgb25jZSBpbiB0aGUgY29tcGlsZXIgb3V0cHV0LgorICAgICAgIGlmIHRlc3QgIiRwIiA9ICJjb25mdGVzdC4kb2JqZXh0IjsgdGhlbgorCSBwcmVfdGVzdF9vYmplY3RfZGVwc19kb25lPXllcworCSBjb250aW51ZQorICAgICAgIGZpCisKKyAgICAgICBpZiB0ZXN0IG5vID0gIiRwcmVfdGVzdF9vYmplY3RfZGVwc19kb25lIjsgdGhlbgorCSBpZiB0ZXN0IC16ICIkcHJlZGVwX29iamVjdHNfQ1hYIjsgdGhlbgorCSAgIHByZWRlcF9vYmplY3RzX0NYWD0kcAorCSBlbHNlCisJICAgcHJlZGVwX29iamVjdHNfQ1hYPSIkcHJlZGVwX29iamVjdHNfQ1hYICRwIgorCSBmaQorICAgICAgIGVsc2UKKwkgaWYgdGVzdCAteiAiJHBvc3RkZXBfb2JqZWN0c19DWFgiOyB0aGVuCisJICAgcG9zdGRlcF9vYmplY3RzX0NYWD0kcAorCSBlbHNlCisJICAgcG9zdGRlcF9vYmplY3RzX0NYWD0iJHBvc3RkZXBfb2JqZWN0c19DWFggJHAiCisJIGZpCisgICAgICAgZmkKKyAgICAgICA7OworCisgICAgKikgOzsgIyBJZ25vcmUgdGhlIHJlc3QuCisKKyAgICBlc2FjCisgIGRvbmUKKworICAjIENsZWFuIHVwLgorICBybSAtZiBhLm91dCBhLmV4ZQorZWxzZQorICBlY2hvICJsaWJ0b29sLm00OiBlcnJvcjogcHJvYmxlbSBjb21waWxpbmcgQ1hYIHRlc3QgcHJvZ3JhbSIKK2ZpCisKKyRSTSAtZiBjb25mZXN0LiRvYmpleHQKK0NGTEFHUz0kX2x0X2xpYmRlcHNfc2F2ZV9DRkxBR1MKKworIyBQT1JUTUU6IG92ZXJyaWRlIGFib3ZlIHRlc3Qgb24gc3lzdGVtcyB3aGVyZSBpdCBpcyBicm9rZW4KK2Nhc2UgJGhvc3Rfb3MgaW4KK2ludGVyaXhbMy05XSopCisgICMgSW50ZXJpeCAzLjUgaW5zdGFsbHMgY29tcGxldGVseSBob3NlZCAubGEgZmlsZXMgZm9yIEMrKywgc28gcmF0aGVyIHRoYW4KKyAgIyBoYWNrIGFsbCBhcm91bmQgaXQsIGxldCdzIGp1c3QgdHJ1c3QgImcrKyIgdG8gRFRSVC4KKyAgcHJlZGVwX29iamVjdHNfQ1hYPQorICBwb3N0ZGVwX29iamVjdHNfQ1hYPQorICBwb3N0ZGVwc19DWFg9CisgIDs7CisKK2xpbnV4KikKKyAgY2FzZSBgJENDIC1WIDI+JjEgfCBzZWQgNXFgIGluCisgICpTdW5cIEMqKQorICAgICMgU3VuIEMrKyA1LjkKKworICAgICMgVGhlIG1vcmUgc3RhbmRhcmRzLWNvbmZvcm1pbmcgc3RscG9ydDQgbGlicmFyeSBpcworICAgICMgaW5jb21wYXRpYmxlIHdpdGggdGhlIENzdGQgbGlicmFyeS4gQXZvaWQgc3BlY2lmeWluZworICAgICMgaXQgaWYgaXQncyBpbiBDWFhGTEFHUy4gSWdub3JlIGxpYkNydW4gYXMKKyAgICAjIC1saWJyYXJ5PXN0bHBvcnQ0IGRlcGVuZHMgb24gaXQuCisgICAgY2FzZSAiICRDWFggJENYWEZMQUdTICIgaW4KKyAgICAqIiAtbGlicmFyeT1zdGxwb3J0NCAiKikKKyAgICAgIHNvbGFyaXNfdXNlX3N0bHBvcnQ0PXllcworICAgICAgOzsKKyAgICBlc2FjCisKKyAgICBpZiB0ZXN0IHllcyAhPSAiJHNvbGFyaXNfdXNlX3N0bHBvcnQ0IjsgdGhlbgorICAgICAgcG9zdGRlcHNfQ1hYPSctbGlicmFyeT1Dc3RkIC1saWJyYXJ5PUNydW4nCisgICAgZmkKKyAgICA7OworICBlc2FjCisgIDs7CisKK3NvbGFyaXMqKQorICBjYXNlICRjY19iYXNlbmFtZSBpbgorICBDQyogfCBzdW5DQyopCisgICAgIyBUaGUgbW9yZSBzdGFuZGFyZHMtY29uZm9ybWluZyBzdGxwb3J0NCBsaWJyYXJ5IGlzCisgICAgIyBpbmNvbXBhdGlibGUgd2l0aCB0aGUgQ3N0ZCBsaWJyYXJ5LiBBdm9pZCBzcGVjaWZ5aW5nCisgICAgIyBpdCBpZiBpdCdzIGluIENYWEZMQUdTLiBJZ25vcmUgbGliQ3J1biBhcworICAgICMgLWxpYnJhcnk9c3RscG9ydDQgZGVwZW5kcyBvbiBpdC4KKyAgICBjYXNlICIgJENYWCAkQ1hYRkxBR1MgIiBpbgorICAgICoiIC1saWJyYXJ5PXN0bHBvcnQ0ICIqKQorICAgICAgc29sYXJpc191c2Vfc3RscG9ydDQ9eWVzCisgICAgICA7OworICAgIGVzYWMKKworICAgICMgQWRkaW5nIHRoaXMgcmVxdWlyZXMgYSBrbm93bi1nb29kIHNldHVwIG9mIHNoYXJlZCBsaWJyYXJpZXMgZm9yCisgICAgIyBTdW4gY29tcGlsZXIgdmVyc2lvbnMgYmVmb3JlIDUuNiwgZWxzZSBQSUMgb2JqZWN0cyBmcm9tIGFuIG9sZAorICAgICMgYXJjaGl2ZSB3aWxsIGJlIGxpbmtlZCBpbnRvIHRoZSBvdXRwdXQsIGxlYWRpbmcgdG8gc3VidGxlIGJ1Z3MuCisgICAgaWYgdGVzdCB5ZXMgIT0gIiRzb2xhcmlzX3VzZV9zdGxwb3J0NCI7IHRoZW4KKyAgICAgIHBvc3RkZXBzX0NYWD0nLWxpYnJhcnk9Q3N0ZCAtbGlicmFyeT1DcnVuJworICAgIGZpCisgICAgOzsKKyAgZXNhYworICA7OworZXNhYworCisKK2Nhc2UgIiAkcG9zdGRlcHNfQ1hYICIgaW4KKyoiIC1sYyAiKikgYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPW5vIDs7Citlc2FjCisgY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzX0NYWD0KK2lmIHRlc3QgLW4gIiR7Y29tcGlsZXJfbGliX3NlYXJjaF9wYXRoX0NYWH0iOyB0aGVuCisgY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzX0NYWD1gZWNobyAiICR7Y29tcGlsZXJfbGliX3NlYXJjaF9wYXRoX0NYWH0iIHwgJFNFRCAtZSAncyEgLUwhICFnJyAtZSAncyFeICEhJ2AKK2ZpCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKyAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0KK2x0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0KK2x0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0KKworCisgICMgQysrIHNwZWNpZmljIGNhc2VzIGZvciBwaWMsIHN0YXRpYywgd2wsIGV0Yy4KKyAgaWYgdGVzdCB5ZXMgPSAiJEdYWCI7IHRoZW4KKyAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nLVdsLCcKKyAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1zdGF0aWMnCisKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgYWl4KikKKyAgICAgICMgQWxsIEFJWCBjb2RlIGlzIFBJQy4KKyAgICAgIGlmIHRlc3QgaWE2NCA9ICIkaG9zdF9jcHUiOyB0aGVuCisJIyBBSVggNSBub3cgc3VwcG9ydHMgSUE2NCBwcm9jZXNzb3IKKwlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1Cc3RhdGljJworICAgICAgZmkKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLWZQSUMnCisgICAgICA7OworCisgICAgYW1pZ2FvcyopCisgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgcG93ZXJwYykKKyAgICAgICAgICAgICMgc2VlIGNvbW1lbnQgYWJvdXQgQW1pZ2FPUzQgLnNvIHN1cHBvcnQKKyAgICAgICAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLWZQSUMnCisgICAgICAgIDs7CisgICAgICBtNjhrKQorICAgICAgICAgICAgIyBGSVhNRTogd2UgbmVlZCBhdCBsZWFzdCA2ODAyMCBjb2RlIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMsIGJ1dAorICAgICAgICAgICAgIyBhZGRpbmcgdGhlICctbTY4MDIwJyBmbGFnIHRvIEdDQyBwcmV2ZW50cyBidWlsZGluZyBhbnl0aGluZyBiZXR0ZXIsCisgICAgICAgICAgICAjIGxpa2UgJy1tNjgwNDAnLgorICAgICAgICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctbTY4MDIwIC1yZXNpZGVudDMyIC1tYWx3YXlzLXJlc3RvcmUtYTQnCisgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgYmVvcyogfCBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqIHwgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIHRoZXNlIE9TZXMuCisgICAgICA7OworICAgIG1pbmd3KiB8IGN5Z3dpbiogfCBvczIqIHwgcHczMiogfCBjZWdjYyopCisgICAgICAjIFRoaXMgaGFjayBpcyBzbyB0aGF0IHRoZSBzb3VyY2UgZmlsZSBjYW4gdGVsbCB3aGV0aGVyIGl0IGlzIGJlaW5nCisgICAgICAjIGJ1aWx0IGZvciBpbmNsdXNpb24gaW4gYSBkbGwgKGFuZCBzaG91bGQgZXhwb3J0IHN5bWJvbHMgZm9yIGV4YW1wbGUpLgorICAgICAgIyBBbHRob3VnaCB0aGUgY3lnd2luIGdjYyBpZ25vcmVzIC1mUElDLCBzdGlsbCBuZWVkIHRoaXMgZm9yIG9sZC1zdHlsZQorICAgICAgIyAoLS1kaXNhYmxlLWF1dG8taW1wb3J0KSBsaWJyYXJpZXMKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLURETExfRVhQT1JUJworICAgICAgOzsKKyAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgb24gdGhpcyBwbGF0Zm9ybQorICAgICAgIyBDb21tb24gc3ltYm9scyBub3QgYWxsb3dlZCBpbiBNSF9EWUxJQiBmaWxlcworICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctZm5vLWNvbW1vbicKKyAgICAgIDs7CisgICAgKmRqZ3BwKikKKyAgICAgICMgREpHUFAgZG9lcyBub3Qgc3VwcG9ydCBzaGFyZWQgbGlicmFyaWVzIGF0IGFsbAorICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPQorICAgICAgOzsKKyAgICBoYWlrdSopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgSGFpa3UuCisgICAgICAjIFRoZSAiLXN0YXRpYyIgZmxhZyBleGlzdHMsIGJ1dCBpcyBicm9rZW4uCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9CisgICAgICA7OworICAgIGludGVyaXhbMy05XSopCisgICAgICAjIEludGVyaXggMy54IGdjYyAtZnBpYy8tZlBJQyBvcHRpb25zIGdlbmVyYXRlIGJyb2tlbiBjb2RlLgorICAgICAgIyBJbnN0ZWFkLCB3ZSByZWxvY2F0ZSBzaGFyZWQgbGlicmFyaWVzIGF0IHJ1bnRpbWUuCisgICAgICA7OworICAgIHN5c3Y0Kk1QKikKKyAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWM7IHRoZW4KKwlsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9LUtjb25mb3JtX3BpYworICAgICAgZmkKKyAgICAgIDs7CisgICAgaHB1eCopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgNjQtYml0IFBBIEhQLVVYLCBidXQgbm90IGZvciAzMi1iaXQKKyAgICAgICMgUEEgSFAtVVguICBPbiBJQTY0IEhQLVVYLCBQSUMgaXMgdGhlIGRlZmF1bHQgYnV0IHRoZSBwaWMgZmxhZworICAgICAgIyBzZXRzIHRoZSBkZWZhdWx0IFRMUyBtb2RlbCBhbmQgYWZmZWN0cyBpbmxpbmluZy4KKyAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICBocHBhKjY0KikKKwk7OworICAgICAgKikKKwlsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1mUElDJworCTs7CisgICAgICBlc2FjCisgICAgICA7OworICAgICpxbngqIHwgKm50byopCisgICAgICAjIFFOWCB1c2VzIEdOVSBDKyssIGJ1dCBuZWVkIHRvIGRlZmluZSAtc2hhcmVkIG9wdGlvbiB0b28sIG90aGVyd2lzZQorICAgICAgIyBpdCB3aWxsIGNvcmVkdW1wLgorICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctZlBJQyAtc2hhcmVkJworICAgICAgOzsKKyAgICAqKQorICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctZlBJQycKKyAgICAgIDs7CisgICAgZXNhYworICBlbHNlCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgYWl4WzQtOV0qKQorCSMgQWxsIEFJWCBjb2RlIGlzIFBJQy4KKwlpZiB0ZXN0IGlhNjQgPSAiJGhvc3RfY3B1IjsgdGhlbgorCSAgIyBBSVggNSBub3cgc3VwcG9ydHMgSUE2NCBwcm9jZXNzb3IKKwkgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nLUJzdGF0aWMnCisJZWxzZQorCSAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctYm5zbyAtYkk6L2xpYi9zeXNjYWxscy5leHAnCisJZmkKKwk7OworICAgICAgY2hvcnVzKikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCWN4Y2g2OCopCisJICAjIEdyZWVuIEhpbGxzIEMrKyBDb21waWxlcgorCSAgIyBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCBDWFgpPSItLW5vX2F1dG9faW5zdGFudGlhdGlvbiAtdSBfX21haW4gLXUgX19wcmVtYWluIC11IF9hYm9ydCAtciAkQ09PTF9ESVIvbGliL2xpYk9yYi5hICRNVk1FX0RJUi9saWIvQ0MvbGliQy5hICRNVk1FX0RJUi9saWIvY2xhc3NpeC9saWJjeC5zLmEiCisJICA7OworCWVzYWMKKwk7OworICAgICAgbWluZ3cqIHwgY3lnd2luKiB8IG9zMiogfCBwdzMyKiB8IGNlZ2NjKikKKwkjIFRoaXMgaGFjayBpcyBzbyB0aGF0IHRoZSBzb3VyY2UgZmlsZSBjYW4gdGVsbCB3aGV0aGVyIGl0IGlzIGJlaW5nCisJIyBidWlsdCBmb3IgaW5jbHVzaW9uIGluIGEgZGxsIChhbmQgc2hvdWxkIGV4cG9ydCBzeW1ib2xzIGZvciBleGFtcGxlKS4KKwlsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1ERExMX0VYUE9SVCcKKwk7OworICAgICAgZGd1eCopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIGVjKysqKQorCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1LUElDJworCSAgICA7OworCSAgZ2hjeCopCisJICAgICMgR3JlZW4gSGlsbHMgQysrIENvbXBpbGVyCisJICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLXBpYycKKwkgICAgOzsKKwkgICopCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICBmcmVlYnNkKiB8IGRyYWdvbmZseSopCisJIyBGcmVlQlNEIHVzZXMgR05VIEMrKworCTs7CisgICAgICBocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgQ0MqKQorCSAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nLVdsLCcKKwkgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSckd2wtYSAke3dsfWFyY2hpdmUnCisJICAgIGlmIHRlc3QgaWE2NCAhPSAiJGhvc3RfY3B1IjsgdGhlbgorCSAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nK1onCisJICAgIGZpCisJICAgIDs7CisJICBhQ0MqKQorCSAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nLVdsLCcKKwkgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSckd2wtYSAke3dsfWFyY2hpdmUnCisJICAgIGNhc2UgJGhvc3RfY3B1IGluCisJICAgIGhwcGEqNjQqfGlhNjQqKQorCSAgICAgICMgK1ogdGhlIGRlZmF1bHQKKwkgICAgICA7OworCSAgICAqKQorCSAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nK1onCisJICAgICAgOzsKKwkgICAgZXNhYworCSAgICA7OworCSAgKikKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIGludGVyaXgqKQorCSMgVGhpcyBpcyBjODksIHdoaWNoIGlzIE1TIFZpc3VhbCBDKysgKG5vIHNoYXJlZCBsaWJzKQorCSMgQW55b25lIHdhbnRzIHRvIGRvIGEgcG9ydD8KKwk7OworICAgICAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgQ0MqKQorCSAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nLVdsLCcKKwkgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctbm9uX3NoYXJlZCcKKwkgICAgIyBDQyBwaWMgZmxhZyAtS1BJQyBpcyB0aGUgZGVmYXVsdC4KKwkgICAgOzsKKwkgICopCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICBsaW51eCogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUgfCBnbnUqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBLQ0MqKQorCSAgICAjIEtBSSBDKysgQ29tcGlsZXIKKwkgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy0tYmFja2VuZCAtV2wsJworCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1mUElDJworCSAgICA7OworCSAgZWNwYyogKQorCSAgICAjIG9sZCBJbnRlbCBDKysgZm9yIHg4Nl82NCwgd2hpY2ggc3RpbGwgc3VwcG9ydGVkIC1LUElDLgorCSAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nLVdsLCcKKwkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctS1BJQycKKwkgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctc3RhdGljJworCSAgICA7OworCSAgaWNwYyogKQorCSAgICAjIEludGVsIEMrKywgdXNlZCB0byBiZSBpbmNvbXBhdGlibGUgd2l0aCBHQ0MuCisJICAgICMgSUNDIDEwIGRvZXNuJ3QgYWNjZXB0IC1LUElDIGFueSBtb3JlLgorCSAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nLVdsLCcKKwkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctZlBJQycKKwkgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctc3RhdGljJworCSAgICA7OworCSAgcGdDQyogfCBwZ2NwcCopCisJICAgICMgUG9ydGxhbmQgR3JvdXAgQysrIGNvbXBpbGVyCisJICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPSctV2wsJworCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1mcGljJworCSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1Cc3RhdGljJworCSAgICA7OworCSAgY3h4KikKKwkgICAgIyBDb21wYXEgQysrCisJICAgICMgTWFrZSBzdXJlIHRoZSBQSUMgZmxhZyBpcyBlbXB0eS4gIEl0IGFwcGVhcnMgdGhhdCBhbGwgQWxwaGEKKwkgICAgIyBMaW51eCBhbmQgQ29tcGFxIFRydTY0IFVuaXggb2JqZWN0cyBhcmUgUElDLgorCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9CisJICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nLW5vbl9zaGFyZWQnCisJICAgIDs7CisJICB4bGMqIHwgeGxDKiB8IGJneGxbY0NdKiB8IG1waXhsW2NDXSopCisJICAgICMgSUJNIFhMIDguMCwgOS4wIG9uIFBQQyBhbmQgQmx1ZUdlbmUKKwkgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy1XbCwnCisJICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLXFwaWMnCisJICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nLXFzdGF0aWNsaW5rJworCSAgICA7OworCSAgKikKKwkgICAgY2FzZSBgJENDIC1WIDI+JjEgfCBzZWQgNXFgIGluCisJICAgICpTdW5cIEMqKQorCSAgICAgICMgU3VuIEMrKyA1LjkKKwkgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1LUElDJworCSAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nLUJzdGF0aWMnCisJICAgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy1Rb3B0aW9uIGxkICcKKwkgICAgICA7OworCSAgICBlc2FjCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICBseW54b3MqKQorCTs7CisgICAgICBtODhrKikKKwk7OworICAgICAgbXZzKikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgY3h4KikKKwkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctVyBjLGV4cG9ydGFsbCcKKwkgICAgOzsKKwkgICopCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICBuZXRic2QqKQorCTs7CisgICAgICAqcW54KiB8ICpudG8qKQorICAgICAgICAjIFFOWCB1c2VzIEdOVSBDKyssIGJ1dCBuZWVkIHRvIGRlZmluZSAtc2hhcmVkIG9wdGlvbiB0b28sIG90aGVyd2lzZQorICAgICAgICAjIGl0IHdpbGwgY29yZWR1bXAuCisgICAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLWZQSUMgLXNoYXJlZCcKKyAgICAgICAgOzsKKyAgICAgIG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgS0NDKikKKwkgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy0tYmFja2VuZCAtV2wsJworCSAgICA7OworCSAgUkNDKikKKwkgICAgIyBSYXRpb25hbCBDKysgMi40LjEKKwkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctcGljJworCSAgICA7OworCSAgY3h4KikKKwkgICAgIyBEaWdpdGFsL0NvbXBhcSBDKysKKwkgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy1XbCwnCisJICAgICMgTWFrZSBzdXJlIHRoZSBQSUMgZmxhZyBpcyBlbXB0eS4gIEl0IGFwcGVhcnMgdGhhdCBhbGwgQWxwaGEKKwkgICAgIyBMaW51eCBhbmQgQ29tcGFxIFRydTY0IFVuaXggb2JqZWN0cyBhcmUgUElDLgorCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9CisJICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nLW5vbl9zaGFyZWQnCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgcHNvcyopCisJOzsKKyAgICAgIHNvbGFyaXMqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBDQyogfCBzdW5DQyopCisJICAgICMgU3VuIEMrKyA0LjIsIDUueCBhbmQgQ2VudGVybGluZSBDKysKKwkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctS1BJQycKKwkgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctQnN0YXRpYycKKwkgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy1Rb3B0aW9uIGxkICcKKwkgICAgOzsKKwkgIGdjeCopCisJICAgICMgR3JlZW4gSGlsbHMgQysrIENvbXBpbGVyCisJICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLVBJQycKKwkgICAgOzsKKwkgICopCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICBzdW5vczQqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBDQyopCisJICAgICMgU3VuIEMrKyA0LngKKwkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctcGljJworCSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1Cc3RhdGljJworCSAgICA7OworCSAgbGNjKikKKwkgICAgIyBMdWNpZAorCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1waWMnCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgc3lzdjUqIHwgdW5peHdhcmUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IE9wZW5VTklYKikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgQ0MqKQorCSAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nLVdsLCcKKwkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctS1BJQycKKwkgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctQnN0YXRpYycKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIHRhbmRlbSopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIE5DQyopCisJICAgICMgTm9uU3RvcC1VWCBOQ0MgMy4yMAorCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1LUElDJworCSAgICA7OworCSAgKikKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIHZ4d29ya3MqKQorCTs7CisgICAgICAqKQorCWx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZF9DWFg9bm8KKwk7OworICAgIGVzYWMKKyAgZmkKKworY2FzZSAkaG9zdF9vcyBpbgorICAjIEZvciBwbGF0Zm9ybXMgdGhhdCBkbyBub3Qgc3VwcG9ydCBQSUMsIC1EUElDIGlzIG1lYW5pbmdsZXNzOgorICAqZGpncHAqKQorICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0KKyAgICA7OworICAqKQorICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0iJGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWCAtRFBJQyIKKyAgICA7OworZXNhYworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X3Byb2dfY29tcGlsZXJfcGljX0NYWCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX0NYWD0kbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY19DWFgiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY19DWFgiID4mNjsgfQorbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY19DWFgKKworIworIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIFBJQyBmbGFnIGFjdHVhbGx5IHdvcmtzLgorIworaWYgdGVzdCAtbiAiJGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiAkY29tcGlsZXIgUElDIGZsYWcgJGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWCB3b3JrcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiAkY29tcGlsZXIgUElDIGZsYWcgJGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWCB3b3Jrcy4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3Jrc19DWFgrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3Jrc19DWFg9bm8KKyAgIGFjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAorICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisgICBsdF9jb21waWxlcl9mbGFnPSIkbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYIC1EUElDIiAgIyMgZXhjbHVkZSBmcm9tIHNjX3VzZWxlc3NfcXVvdGVzX2luX2Fzc2lnbm1lbnQKKyAgICMgSW5zZXJ0IHRoZSBvcHRpb24gZWl0aGVyICgxKSBhZnRlciB0aGUgbGFzdCAqRkxBR1MgdmFyaWFibGUsIG9yCisgICAjICgyKSBiZWZvcmUgYSB3b3JkIGNvbnRhaW5pbmcgImNvbmZ0ZXN0LiIsIG9yICgzKSBhdCB0aGUgZW5kLgorICAgIyBOb3RlIHRoYXQgJGFjX2NvbXBpbGUgaXRzZWxmIGRvZXMgbm90IGNvbnRhaW4gYmFja3NsYXNoZXMgYW5kIGJlZ2lucworICAgIyB3aXRoIGEgZG9sbGFyIHNpZ24gKG5vdCBhIGh5cGhlbiksIHNvIHRoZSBlY2hvIHNob3VsZCB3b3JrIGNvcnJlY3RseS4KKyAgICMgVGhlIG9wdGlvbiBpcyByZWZlcmVuY2VkIHZpYSBhIHZhcmlhYmxlIHRvIGF2b2lkIGNvbmZ1c2luZyBzZWQuCisgICBsdF9jb21waWxlPWBlY2hvICIkYWNfY29tcGlsZSIgfCAkU0VEIFwKKyAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKKyAgIC1lICdzOiBbXiBdKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKKyAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCisgICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6JExJTkVOTzogJGx0X2NvbXBpbGVcIiIgPiY1KQorICAgKGV2YWwgIiRsdF9jb21waWxlIiAyPmNvbmZ0ZXN0LmVycikKKyAgIGFjX3N0YXR1cz0kPworICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIGlmIChleGl0ICRhY19zdGF0dXMpICYmIHRlc3QgLXMgIiRhY19vdXRmaWxlIjsgdGhlbgorICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAorICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3Mgb3RoZXIgdGhhbiB0aGUgdXN1YWwgb3V0cHV0LgorICAgICAkRUNITyAiJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkU0VEICcvXiQvZCcgPmNvbmZ0ZXN0LmV4cAorICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjIKKyAgICAgaWYgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVyMiB8fCBkaWZmIGNvbmZ0ZXN0LmV4cCBjb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzX0NYWD15ZXMKKyAgICAgZmkKKyAgIGZpCisgICAkUk0gY29uZnRlc3QqCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzX0NYWCIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzX0NYWCIgPiY2OyB9CisKK2lmIHRlc3QgeWVzID0gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3Jrc19DWFgiOyB0aGVuCisgICAgY2FzZSAkbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYIGluCisgICAgICIiIHwgIiAiKikgOzsKKyAgICAgKikgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSIgJGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWCIgOzsKKyAgICAgZXNhYworZWxzZQorICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0KKyAgICAgbHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkX0NYWD1ubworZmkKKworZmkKKworCisKKworCisjCisjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgc3RhdGljIGZsYWcgYWN0dWFsbHkgd29ya3MuCisjCit3bD0kbHRfcHJvZ19jb21waWxlcl93bF9DWFggZXZhbCBsdF90bXBfc3RhdGljX2ZsYWc9XCIkbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYXCIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN0YXRpYyBmbGFnICRsdF90bXBfc3RhdGljX2ZsYWcgd29ya3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN0YXRpYyBmbGFnICRsdF90bXBfc3RhdGljX2ZsYWcgd29ya3MuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3NfQ1hYKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3NfQ1hYPW5vCisgICBzYXZlX0xERkxBR1M9JExERkxBR1MKKyAgIExERkxBR1M9IiRMREZMQUdTICRsdF90bXBfc3RhdGljX2ZsYWciCisgICBlY2hvICIkbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgIGlmIChldmFsICRhY19saW5rIDI+Y29uZnRlc3QuZXJyKSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgorICAgICAjIFRoZSBsaW5rZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKKyAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzCisgICAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgICAgIyBBcHBlbmQgYW55IGVycm9ycyB0byB0aGUgY29uZmlnLmxvZy4KKyAgICAgICBjYXQgY29uZnRlc3QuZXJyIDE+JjUKKyAgICAgICAkRUNITyAiJF9sdF9saW5rZXJfYm9pbGVycGxhdGUiIHwgJFNFRCAnL14kL2QnID4gY29uZnRlc3QuZXhwCisgICAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIyCisgICAgICAgaWYgZGlmZiBjb25mdGVzdC5leHAgY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KKyAgICAgICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzX0NYWD15ZXMKKyAgICAgICBmaQorICAgICBlbHNlCisgICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3NfQ1hYPXllcworICAgICBmaQorICAgZmkKKyAgICRSTSAtciBjb25mdGVzdCoKKyAgIExERkxBR1M9JHNhdmVfTERGTEFHUworCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrc19DWFgiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrc19DWFgiID4mNjsgfQorCitpZiB0ZXN0IHllcyA9ICIkbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3NfQ1hYIjsgdGhlbgorICAgIDoKK2Vsc2UKKyAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9CitmaQorCisKKworCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWMgLW8gZmlsZS4kYWNfb2JqZXh0IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtYyAtbyBmaWxlLiRhY19vYmpleHQuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfcHJvZ19jb21waWxlcl9jX29fQ1hYKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fQ1hYPW5vCisgICAkUk0gLXIgY29uZnRlc3QgMj4vZGV2L251bGwKKyAgIG1rZGlyIGNvbmZ0ZXN0CisgICBjZCBjb25mdGVzdAorICAgbWtkaXIgb3V0CisgICBlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKKworICAgbHRfY29tcGlsZXJfZmxhZz0iLW8gb3V0L2NvbmZ0ZXN0Mi4kYWNfb2JqZXh0IgorICAgIyBJbnNlcnQgdGhlIG9wdGlvbiBlaXRoZXIgKDEpIGFmdGVyIHRoZSBsYXN0ICpGTEFHUyB2YXJpYWJsZSwgb3IKKyAgICMgKDIpIGJlZm9yZSBhIHdvcmQgY29udGFpbmluZyAiY29uZnRlc3QuIiwgb3IgKDMpIGF0IHRoZSBlbmQuCisgICAjIE5vdGUgdGhhdCAkYWNfY29tcGlsZSBpdHNlbGYgZG9lcyBub3QgY29udGFpbiBiYWNrc2xhc2hlcyBhbmQgYmVnaW5zCisgICAjIHdpdGggYSBkb2xsYXIgc2lnbiAobm90IGEgaHlwaGVuKSwgc28gdGhlIGVjaG8gc2hvdWxkIHdvcmsgY29ycmVjdGx5LgorICAgbHRfY29tcGlsZT1gZWNobyAiJGFjX2NvbXBpbGUiIHwgJFNFRCBcCisgICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCisgICAtZSAnczogW14gXSpjb25mdGVzdFwuOiAkbHRfY29tcGlsZXJfZmxhZyY6OyB0JyBcCisgICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAorICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOiRMSU5FTk86ICRsdF9jb21waWxlXCIiID4mNSkKKyAgIChldmFsICIkbHRfY29tcGlsZSIgMj5vdXQvY29uZnRlc3QuZXJyKQorICAgYWNfc3RhdHVzPSQ/CisgICBjYXQgb3V0L2NvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIGlmIChleGl0ICRhY19zdGF0dXMpICYmIHRlc3QgLXMgb3V0L2NvbmZ0ZXN0Mi4kYWNfb2JqZXh0CisgICB0aGVuCisgICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCisgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncworICAgICAkRUNITyAiJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkU0VEICcvXiQvZCcgPiBvdXQvY29uZnRlc3QuZXhwCisgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBvdXQvY29uZnRlc3QuZXJyID5vdXQvY29uZnRlc3QuZXIyCisgICAgIGlmIHRlc3QgISAtcyBvdXQvY29uZnRlc3QuZXIyIHx8IGRpZmYgb3V0L2NvbmZ0ZXN0LmV4cCBvdXQvY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KKyAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19DWFg9eWVzCisgICAgIGZpCisgICBmaQorICAgY2htb2QgdSt3IC4gMj4mNQorICAgJFJNIGNvbmZ0ZXN0KgorICAgIyBTR0kgQysrIGNvbXBpbGVyIHdpbGwgY3JlYXRlIGRpcmVjdG9yeSBvdXQvaWlfZmlsZXMvIGZvcgorICAgIyB0ZW1wbGF0ZSBpbnN0YW50aWF0aW9uCisgICB0ZXN0IC1kIG91dC9paV9maWxlcyAmJiAkUk0gb3V0L2lpX2ZpbGVzLyogJiYgcm1kaXIgb3V0L2lpX2ZpbGVzCisgICAkUk0gb3V0LyogJiYgcm1kaXIgb3V0CisgICBjZCAuLgorICAgJFJNIC1yIGNvbmZ0ZXN0CisgICAkUk0gY29uZnRlc3QqCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWCIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWCIgPiY2OyB9CisKKworCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWMgLW8gZmlsZS4kYWNfb2JqZXh0IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtYyAtbyBmaWxlLiRhY19vYmpleHQuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfcHJvZ19jb21waWxlcl9jX29fQ1hYKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fQ1hYPW5vCisgICAkUk0gLXIgY29uZnRlc3QgMj4vZGV2L251bGwKKyAgIG1rZGlyIGNvbmZ0ZXN0CisgICBjZCBjb25mdGVzdAorICAgbWtkaXIgb3V0CisgICBlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKKworICAgbHRfY29tcGlsZXJfZmxhZz0iLW8gb3V0L2NvbmZ0ZXN0Mi4kYWNfb2JqZXh0IgorICAgIyBJbnNlcnQgdGhlIG9wdGlvbiBlaXRoZXIgKDEpIGFmdGVyIHRoZSBsYXN0ICpGTEFHUyB2YXJpYWJsZSwgb3IKKyAgICMgKDIpIGJlZm9yZSBhIHdvcmQgY29udGFpbmluZyAiY29uZnRlc3QuIiwgb3IgKDMpIGF0IHRoZSBlbmQuCisgICAjIE5vdGUgdGhhdCAkYWNfY29tcGlsZSBpdHNlbGYgZG9lcyBub3QgY29udGFpbiBiYWNrc2xhc2hlcyBhbmQgYmVnaW5zCisgICAjIHdpdGggYSBkb2xsYXIgc2lnbiAobm90IGEgaHlwaGVuKSwgc28gdGhlIGVjaG8gc2hvdWxkIHdvcmsgY29ycmVjdGx5LgorICAgbHRfY29tcGlsZT1gZWNobyAiJGFjX2NvbXBpbGUiIHwgJFNFRCBcCisgICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCisgICAtZSAnczogW14gXSpjb25mdGVzdFwuOiAkbHRfY29tcGlsZXJfZmxhZyY6OyB0JyBcCisgICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAorICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOiRMSU5FTk86ICRsdF9jb21waWxlXCIiID4mNSkKKyAgIChldmFsICIkbHRfY29tcGlsZSIgMj5vdXQvY29uZnRlc3QuZXJyKQorICAgYWNfc3RhdHVzPSQ/CisgICBjYXQgb3V0L2NvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIGlmIChleGl0ICRhY19zdGF0dXMpICYmIHRlc3QgLXMgb3V0L2NvbmZ0ZXN0Mi4kYWNfb2JqZXh0CisgICB0aGVuCisgICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCisgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncworICAgICAkRUNITyAiJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkU0VEICcvXiQvZCcgPiBvdXQvY29uZnRlc3QuZXhwCisgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBvdXQvY29uZnRlc3QuZXJyID5vdXQvY29uZnRlc3QuZXIyCisgICAgIGlmIHRlc3QgISAtcyBvdXQvY29uZnRlc3QuZXIyIHx8IGRpZmYgb3V0L2NvbmZ0ZXN0LmV4cCBvdXQvY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KKyAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19DWFg9eWVzCisgICAgIGZpCisgICBmaQorICAgY2htb2QgdSt3IC4gMj4mNQorICAgJFJNIGNvbmZ0ZXN0KgorICAgIyBTR0kgQysrIGNvbXBpbGVyIHdpbGwgY3JlYXRlIGRpcmVjdG9yeSBvdXQvaWlfZmlsZXMvIGZvcgorICAgIyB0ZW1wbGF0ZSBpbnN0YW50aWF0aW9uCisgICB0ZXN0IC1kIG91dC9paV9maWxlcyAmJiAkUk0gb3V0L2lpX2ZpbGVzLyogJiYgcm1kaXIgb3V0L2lpX2ZpbGVzCisgICAkUk0gb3V0LyogJiYgcm1kaXIgb3V0CisgICBjZCAuLgorICAgJFJNIC1yIGNvbmZ0ZXN0CisgICAkUk0gY29uZnRlc3QqCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWCIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWCIgPiY2OyB9CisKKworCisKK2hhcmRfbGlua3M9bm90dGVzdGVkCitpZiB0ZXN0IG5vID0gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19DWFgiICYmIHRlc3Qgbm8gIT0gIiRuZWVkX2xvY2tzIjsgdGhlbgorICAjIGRvIG5vdCBvdmVyd3JpdGUgdGhlIHZhbHVlIG9mIG5lZWRfbG9ja3MgcHJvdmlkZWQgYnkgdGhlIHVzZXIKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiB3ZSBjYW4gbG9jayB3aXRoIGhhcmQgbGlua3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgd2UgY2FuIGxvY2sgd2l0aCBoYXJkIGxpbmtzLi4uICIgPiY2OyB9CisgIGhhcmRfbGlua3M9eWVzCisgICRSTSBjb25mdGVzdCoKKyAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+L2Rldi9udWxsICYmIGhhcmRfbGlua3M9bm8KKyAgdG91Y2ggY29uZnRlc3QuYQorICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4mNSB8fCBoYXJkX2xpbmtzPW5vCisgIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPi9kZXYvbnVsbCAmJiBoYXJkX2xpbmtzPW5vCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkaGFyZF9saW5rcyIgPiY1CiskYXNfZWNobyAiJGhhcmRfbGlua3MiID4mNjsgfQorICBpZiB0ZXN0IG5vID0gIiRoYXJkX2xpbmtzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogJyRDQycgZG9lcyBub3Qgc3VwcG9ydCAnLWMgLW8nLCBzbyAnbWFrZSAtaicgbWF5IGJlIHVuc2FmZSIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAnJENDJyBkb2VzIG5vdCBzdXBwb3J0ICctYyAtbycsIHNvICdtYWtlIC1qJyBtYXkgYmUgdW5zYWZlIiA+JjI7fQorICAgIG5lZWRfbG9ja3M9d2FybgorICBmaQorZWxzZQorICBuZWVkX2xvY2tzPW5vCitmaQorCisKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcy4uLiAiID4mNjsgfQorCisgIGV4cG9ydF9zeW1ib2xzX2NtZHNfQ1hYPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgJ1wnJ3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisgIGV4Y2x1ZGVfZXhwc3ltc19DWFg9J19HTE9CQUxfT0ZGU0VUX1RBQkxFX3xfR0xPQkFMX19GW0lEXV8uKicKKyAgY2FzZSAkaG9zdF9vcyBpbgorICBhaXhbNC05XSopCisgICAgIyBJZiB3ZSdyZSB1c2luZyBHTlUgbm0sIHRoZW4gd2UgZG9uJ3Qgd2FudCB0aGUgIi1DIiBvcHRpb24uCisgICAgIyAtQyBtZWFucyBkZW1hbmdsZSB0byBBSVggbm0sIGJ1dCBtZWFucyBkb24ndCBkZW1hbmdsZSB3aXRoIEdOVSBubQorICAgICMgQWxzbywgQUlYIG5tIHRyZWF0cyB3ZWFrIGRlZmluZWQgc3ltYm9scyBsaWtlIG90aGVyIGdsb2JhbCBkZWZpbmVkCisgICAgIyBzeW1ib2xzLCB3aGVyZWFzIEdOVSBubSBtYXJrcyB0aGVtIGFzICJXIi4KKyAgICBpZiAkTk0gLVYgMj4mMSB8ICRHUkVQICdHTlUnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICBleHBvcnRfc3ltYm9sc19jbWRzX0NYWD0nJE5NIC1CcGcgJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgYXdrICdcJyd7IGlmICgoKFwkIDIgPT0gIlQiKSB8fCAoXCQgMiA9PSAiRCIpIHx8IChcJCAyID09ICJCIikgfHwgKFwkIDIgPT0gIlciKSkgJiYgKHN1YnN0cihcJCAzLDEsMSkgIT0gIi4iKSkgeyBwcmludCBcJCAzIH0gfSdcJycgfCBzb3J0IC11ID4gJGV4cG9ydF9zeW1ib2xzJworICAgIGVsc2UKKyAgICAgIGV4cG9ydF9zeW1ib2xzX2NtZHNfQ1hYPSckTk0gLUJDcGcgJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgYXdrICdcJyd7IGlmICgoKFwkIDIgPT0gIlQiKSB8fCAoXCQgMiA9PSAiRCIpIHx8IChcJCAyID09ICJCIikpICYmIChzdWJzdHIoXCQgMywxLDEpICE9ICIuIikpIHsgcHJpbnQgXCQgMyB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKKyAgICBmaQorICAgIDs7CisgIHB3MzIqKQorICAgIGV4cG9ydF9zeW1ib2xzX2NtZHNfQ1hYPSRsdGRsbF9jbWRzCisgICAgOzsKKyAgY3lnd2luKiB8IG1pbmd3KiB8IGNlZ2NjKikKKyAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgIGNsKikKKyAgICAgIGV4Y2x1ZGVfZXhwc3ltc19DWFg9J19OVUxMX0lNUE9SVF9ERVNDUklQVE9SfF9JTVBPUlRfREVTQ1JJUFRPUl8uKicKKyAgICAgIDs7CisgICAgKikKKyAgICAgIGV4cG9ydF9zeW1ib2xzX2NtZHNfQ1hYPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW0JDREdSU11bIF0vcy8uKlsgXVwoW14gXSpcKS9cMSBEQVRBLztzL14uKlsgXV9fbm1fX1woW14gXSpcKVsgXVteIF0qL1wxIERBVEEvOy9eSVsgXS9kOy9eW0FJVFddWyBdL3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisgICAgICBleGNsdWRlX2V4cHN5bXNfQ1hYPSdbX10rR0xPQkFMX09GRlNFVF9UQUJMRV98W19dK0dMT0JBTF9fW0ZJRF1fLip8W19dK2hlYWRfW0EtWmEtejAtOV9dK19kbGx8W0EtWmEtejAtOV9dK19kbGxfaW5hbWUnCisgICAgICA7OworICAgIGVzYWMKKyAgICA7OworICAqKQorICAgIGV4cG9ydF9zeW1ib2xzX2NtZHNfQ1hYPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgJ1wnJ3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisgICAgOzsKKyAgZXNhYworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGxkX3NobGlic19DWFgiID4mNQorJGFzX2VjaG8gIiRsZF9zaGxpYnNfQ1hYIiA+JjY7IH0KK3Rlc3Qgbm8gPSAiJGxkX3NobGlic19DWFgiICYmIGNhbl9idWlsZF9zaGFyZWQ9bm8KKword2l0aF9nbnVfbGRfQ1hYPSR3aXRoX2dudV9sZAorCisKKworCisKKworIworIyBEbyB3ZSBuZWVkIHRvIGV4cGxpY2l0bHkgbGluayBsaWJjPworIworY2FzZSAieCRhcmNoaXZlX2NtZHNfbmVlZF9sY19DWFgiIGluCit4fHh5ZXMpCisgICMgQXNzdW1lIC1sYyBzaG91bGQgYmUgYWRkZWQKKyAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPXllcworCisgIGlmIHRlc3QgeWVzLHllcyA9ICIkR0NDLCRlbmFibGVfc2hhcmVkIjsgdGhlbgorICAgIGNhc2UgJGFyY2hpdmVfY21kc19DWFggaW4KKyAgICAqJ34nKikKKyAgICAgICMgRklYTUU6IHdlIG1heSBoYXZlIHRvIGRlYWwgd2l0aCBtdWx0aS1jb21tYW5kIHNlcXVlbmNlcy4KKyAgICAgIDs7CisgICAgJyRDQyAnKikKKyAgICAgICMgVGVzdCB3aGV0aGVyIHRoZSBjb21waWxlciBpbXBsaWNpdGx5IGxpbmtzIHdpdGggLWxjIHNpbmNlIG9uIHNvbWUKKyAgICAgICMgc3lzdGVtcywgLWxnY2MgaGFzIHRvIGNvbWUgYmVmb3JlIC1sYy4gSWYgZ2NjIGFscmVhZHkgcGFzc2VzIC1sYworICAgICAgIyB0byBsZCwgZG9uJ3QgYWRkIC1sYyBiZWZvcmUgLWxnY2MuCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgLWxjIHNob3VsZCBiZSBleHBsaWNpdGx5IGxpbmtlZCBpbiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIC1sYyBzaG91bGQgYmUgZXhwbGljaXRseSBsaW5rZWQgaW4uLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgJFJNIGNvbmZ0ZXN0KgorCWVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorCisJaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2NvbXBpbGVcIiI7IH0gPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAyPmNvbmZ0ZXN0LmVycjsgdGhlbgorCSAgc29uYW1lPWNvbmZ0ZXN0CisJICBsaWI9Y29uZnRlc3QKKwkgIGxpYm9ianM9Y29uZnRlc3QuJGFjX29iamV4dAorCSAgZGVwbGlicz0KKwkgIHdsPSRsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWAorCSAgcGljX2ZsYWc9JGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWAorCSAgY29tcGlsZXJfZmxhZ3M9LXYKKwkgIGxpbmtlcl9mbGFncz0tdgorCSAgdmVyc3RyaW5nPQorCSAgb3V0cHV0X29iamRpcj0uCisJICBsaWJuYW1lPWNvbmZ0ZXN0CisJICBsdF9zYXZlX2FsbG93X3VuZGVmaW5lZF9mbGFnPSRhbGxvd191bmRlZmluZWRfZmxhZ19DWFgKKwkgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD0KKwkgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhcmNoaXZlX2NtZHNfQ1hYIDJcPlwmMSBcfCAkR1JFUCBcIiAtbGMgXCIgXD4vZGV2L251bGwgMlw+XCYxXCIiOyB9ID4mNQorICAoZXZhbCAkYXJjaGl2ZV9jbWRzX0NYWCAyXD5cJjEgXHwgJEdSRVAgXCIgLWxjIFwiIFw+L2Rldi9udWxsIDJcPlwmMSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0KKwkgIHRoZW4KKwkgICAgbHRfY3ZfYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPW5vCisJICBlbHNlCisJICAgIGx0X2N2X2FyY2hpdmVfY21kc19uZWVkX2xjX0NYWD15ZXMKKwkgIGZpCisJICBhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9JGx0X3NhdmVfYWxsb3dfdW5kZWZpbmVkX2ZsYWcKKwllbHNlCisJICBjYXQgY29uZnRlc3QuZXJyIDE+JjUKKwlmaQorCSRSTSBjb25mdGVzdCoKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYIiA+JjY7IH0KKyAgICAgIGFyY2hpdmVfY21kc19uZWVkX2xjX0NYWD0kbHRfY3ZfYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYCisgICAgICA7OworICAgIGVzYWMKKyAgZmkKKyAgOzsKK2VzYWMKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBkeW5hbWljIGxpbmtlciBjaGFyYWN0ZXJpc3RpY3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZHluYW1pYyBsaW5rZXIgY2hhcmFjdGVyaXN0aWNzLi4uICIgPiY2OyB9CisKK2xpYnJhcnlfbmFtZXNfc3BlYz0KK2xpYm5hbWVfc3BlYz0nbGliJG5hbWUnCitzb25hbWVfc3BlYz0KK3NocmV4dF9jbWRzPS5zbworcG9zdGluc3RhbGxfY21kcz0KK3Bvc3R1bmluc3RhbGxfY21kcz0KK2ZpbmlzaF9jbWRzPQorZmluaXNoX2V2YWw9CitzaGxpYnBhdGhfdmFyPQorc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXVua25vd24KK3ZlcnNpb25fdHlwZT1ub25lCitkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgbGQuc28iCitzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiAvdXNyL2xpYiIKK25lZWRfbGliX3ByZWZpeD11bmtub3duCitoYXJkY29kZV9pbnRvX2xpYnM9bm8KKworIyB3aGVuIHlvdSBzZXQgbmVlZF92ZXJzaW9uIHRvIG5vLCBtYWtlIHN1cmUgaXQgZG9lcyBub3QgY2F1c2UgLXNldF92ZXJzaW9uCisjIGZsYWdzIHRvIGJlIGxlZnQgd2l0aG91dCBhcmd1bWVudHMKK25lZWRfdmVyc2lvbj11bmtub3duCisKK2Nhc2UgJGhvc3Rfb3MgaW4KK2FpeDMqKQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZS5hJworICBzaGxpYnBhdGhfdmFyPUxJQlBBVEgKKworICAjIEFJWCAzIGhhcyBubyB2ZXJzaW9uaW5nIHN1cHBvcnQsIHNvIHdlIGFwcGVuZCBhIG1ham9yIHZlcnNpb24gdG8gdGhlIG5hbWUuCisgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCisgIDs7CisKK2FpeFs0LTldKikKKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgaWYgdGVzdCBpYTY0ID0gIiRob3N0X2NwdSI7IHRoZW4KKyAgICAjIEFJWCA1IHN1cHBvcnRzIElBNjQKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHNoYXJlZF9leHQnCisgICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgZWxzZQorICAgICMgV2l0aCBHQ0MgdXAgdG8gMi45NS54LCBjb2xsZWN0MiB3b3VsZCBjcmVhdGUgYW4gaW1wb3J0IGZpbGUKKyAgICAjIGZvciBkZXBlbmRlbmNlIGxpYnJhcmllcy4gIFRoZSBpbXBvcnQgZmlsZSB3b3VsZCBzdGFydCB3aXRoCisgICAgIyB0aGUgbGluZSAnIyEgLicuICBUaGlzIHdvdWxkIGNhdXNlIHRoZSBnZW5lcmF0ZWQgbGlicmFyeSB0bworICAgICMgZGVwZW5kIG9uICcuJywgYWx3YXlzIGFuIGludmFsaWQgbGlicmFyeS4gIFRoaXMgd2FzIGZpeGVkIGluCisgICAgIyBkZXZlbG9wbWVudCBzbmFwc2hvdHMgb2YgR0NDIHByaW9yIHRvIDMuMC4KKyAgICBjYXNlICRob3N0X29zIGluCisgICAgICBhaXg0IHwgYWl4NC5bMDFdIHwgYWl4NC5bMDFdLiopCisgICAgICBpZiB7IGVjaG8gJyNpZiBfX0dOVUNfXyA+IDIgfHwgKF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPj0gOTcpJworCSAgIGVjaG8gJyB5ZXMgJworCSAgIGVjaG8gJyNlbmRpZic7IH0gfCAkQ0MgLUUgLSB8ICRHUkVQIHllcyA+IC9kZXYvbnVsbDsgdGhlbgorCToKKyAgICAgIGVsc2UKKwljYW5fYnVpbGRfc2hhcmVkPW5vCisgICAgICBmaQorICAgICAgOzsKKyAgICBlc2FjCisgICAgIyBBSVggKG9uIFBvd2VyKikgaGFzIG5vIHZlcnNpb25pbmcgc3VwcG9ydCwgc28gY3VycmVudGx5IHdlIGNhbm5vdCBoYXJkY29kZSBjb3JyZWN0CisgICAgIyBzb25hbWUgaW50byBleGVjdXRhYmxlLiBQcm9iYWJseSB3ZSBjYW4gYWRkIHZlcnNpb25pbmcgc3VwcG9ydCB0bworICAgICMgY29sbGVjdDIsIHNvIGFkZGl0aW9uYWwgbGlua3MgY2FuIGJlIHVzZWZ1bCBpbiBmdXR1cmUuCisgICAgaWYgdGVzdCB5ZXMgPSAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciOyB0aGVuCisgICAgICAjIElmIHVzaW5nIHJ1biB0aW1lIGxpbmtpbmcgKG9uIEFJWCA0LjIgb3IgbGF0ZXIpIHVzZSBsaWI8bmFtZT4uc28KKyAgICAgICMgaW5zdGVhZCBvZiBsaWI8bmFtZT4uYSB0byBsZXQgcGVvcGxlIGtub3cgdGhhdCB0aGVzZSBhcmUgbm90CisgICAgICAjIHR5cGljYWwgQUlYIHNoYXJlZCBsaWJyYXJpZXMuCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgICAgZWxzZQorICAgICAgIyBXZSBwcmVzZXJ2ZSAuYSBhcyBleHRlbnNpb24gZm9yIHNoYXJlZCBsaWJyYXJpZXMgdGhyb3VnaCBBSVg0LjIKKyAgICAgICMgYW5kIGxhdGVyIHdoZW4gd2UgYXJlIG5vdCBkb2luZyBydW4gdGltZSBsaW5raW5nLgorICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlLmEgJGxpYm5hbWUuYScKKyAgICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCisgICAgZmkKKyAgICBzaGxpYnBhdGhfdmFyPUxJQlBBVEgKKyAgZmkKKyAgOzsKKworYW1pZ2FvcyopCisgIGNhc2UgJGhvc3RfY3B1IGluCisgIHBvd2VycGMpCisgICAgIyBTaW5jZSBKdWx5IDIwMDcgQW1pZ2FPUzQgb2ZmaWNpYWxseSBzdXBwb3J0cyAuc28gbGlicmFyaWVzLgorICAgICMgV2hlbiBjb21waWxpbmcgdGhlIGV4ZWN1dGFibGUsIGFkZCAtdXNlLWR5bmxkIC1Mc29ianM6IHRvIHRoZSBjb21waWxlbGluZS4KKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgICAgOzsKKyAgbTY4aykKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLml4bGlicmFyeSAkbGlibmFtZS5hJworICAgICMgQ3JlYXRlICR7bGlibmFtZX1faXhsaWJyYXJ5LmEgZW50cmllcyBpbiAvc3lzL2xpYnMuCisgICAgZmluaXNoX2V2YWw9J2ZvciBsaWIgaW4gYGxzICRsaWJkaXIvKi5peGxpYnJhcnkgMj4vZGV2L251bGxgOyBkbyBsaWJuYW1lPWBmdW5jX2VjaG9fYWxsICIkbGliIiB8ICRTRUQgJ1wnJ3MlXi4qL1woW14vXSpcKVwuaXhsaWJyYXJ5JCVcMSUnXCcnYDsgJFJNIC9zeXMvbGlicy8ke2xpYm5hbWV9X2l4bGlicmFyeS5hOyAkc2hvdyAiY2QgL3N5cy9saWJzICYmICRMTl9TICRsaWIgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSI7IGNkIC9zeXMvbGlicyAmJiAkTE5fUyAkbGliICR7bGlibmFtZX1faXhsaWJyYXJ5LmEgfHwgZXhpdCAxOyBkb25lJworICAgIDs7CisgIGVzYWMKKyAgOzsKKworYmVvcyopCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGxkLnNvIgorICBzaGxpYnBhdGhfdmFyPUxJQlJBUllfUEFUSAorICA7OworCitic2RpWzQ1XSopCisgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKKyAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgJGxpYmRpcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvc2hsaWIgL3Vzci9saWIgL3Vzci9YMTEvbGliIC91c3IvY29udHJpYi9saWIgL2xpYiAvdXNyL2xvY2FsL2xpYiIKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii9zaGxpYiAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYiIKKyAgIyB0aGUgZGVmYXVsdCBsZC5zby5jb25mIGFsc28gY29udGFpbnMgL3Vzci9jb250cmliL2xpYiBhbmQKKyAgIyAvdXNyL1gxMVI2L2xpYiAoL3Vzci9YMTEgaXMgYSBsaW5rIHRvIC91c3IvWDExUjYpLCBidXQgbGV0IHVzIGFsbG93CisgICMgbGlidG9vbCB0byBoYXJkLWNvZGUgdGhlc2UgaW50byBwcm9ncmFtcworICA7OworCitjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgIHZlcnNpb25fdHlwZT13aW5kb3dzCisgIHNocmV4dF9jbWRzPS5kbGwKKyAgbmVlZF92ZXJzaW9uPW5vCisgIG5lZWRfbGliX3ByZWZpeD1ubworCisgIGNhc2UgJEdDQywkY2NfYmFzZW5hbWUgaW4KKyAgeWVzLCopCisgICAgIyBnY2MKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmRsbC5hJworICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKKyAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwkZmlsZWB+CisgICAgICBkbHBhdGg9YCRTSEVMTCAyPiYxIC1jICdcJycuICRkaXIvJ1wnJ1wkYmFzZV9maWxlJ1wnJ2k7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKyAgICAgIGRsZGlyPSRkZXN0ZGlyL2BkaXJuYW1lIFwkZGxwYXRoYH4KKyAgICAgIHRlc3QgLWQgXCRkbGRpciB8fCBta2RpciAtcCBcJGRsZGlyfgorICAgICAgJGluc3RhbGxfcHJvZyAkZGlyLyRkbG5hbWUgXCRkbGRpci8kZGxuYW1lfgorICAgICAgY2htb2QgYSt4IFwkZGxkaXIvJGRsbmFtZX4KKyAgICAgIGlmIHRlc3QgLW4gJ1wnJyRzdHJpcG1lJ1wnJyAmJiB0ZXN0IC1uICdcJyckc3RyaXBsaWInXCcnOyB0aGVuCisgICAgICAgIGV2YWwgJ1wnJyRzdHJpcGxpYiBcJGRsZGlyLyRkbG5hbWUnXCcnIHx8IGV4aXQgXCQ/OworICAgICAgZmknCisgICAgcG9zdHVuaW5zdGFsbF9jbWRzPSdkbGRsbD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGZpbGU7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKyAgICAgIGRscGF0aD0kZGlyL1wkZGxkbGx+CisgICAgICAgJFJNIFwkZGxwYXRoJworICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKworICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBjeWd3aW4qKQorICAgICAgIyBDeWd3aW4gRExMcyB1c2UgJ2N5ZycgcHJlZml4IHJhdGhlciB0aGFuICdsaWInCisgICAgICBzb25hbWVfc3BlYz0nYGVjaG8gJGxpYm5hbWUgfCBzZWQgLWUgJ3MvXmxpYi9jeWcvJ2BgZWNobyAkcmVsZWFzZSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHZlcnN1ZmZpeCRzaGFyZWRfZXh0JworCisgICAgICA7OworICAgIG1pbmd3KiB8IGNlZ2NjKikKKyAgICAgICMgTWluR1cgRExMcyB1c2UgdHJhZGl0aW9uYWwgJ2xpYicgcHJlZml4CisgICAgICBzb25hbWVfc3BlYz0nJGxpYm5hbWVgZWNobyAkcmVsZWFzZSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHZlcnN1ZmZpeCRzaGFyZWRfZXh0JworICAgICAgOzsKKyAgICBwdzMyKikKKyAgICAgICMgcHczMiBETExzIHVzZSAncHcnIHByZWZpeCByYXRoZXIgdGhhbiAnbGliJworICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSdgZWNobyAkbGlibmFtZSB8IHNlZCAtZSAncy9ebGliL3B3LydgYGVjaG8gJHJlbGVhc2UgfCAkU0VEIC1lICdzL1suXS8tL2cnYCR2ZXJzdWZmaXgkc2hhcmVkX2V4dCcKKyAgICAgIDs7CisgICAgZXNhYworICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCisgICAgOzsKKworICAqLGNsKikKKyAgICAjIE5hdGl2ZSBNU1ZDCisgICAgbGlibmFtZV9zcGVjPSckbmFtZScKKyAgICBzb25hbWVfc3BlYz0nJGxpYm5hbWVgZWNobyAkcmVsZWFzZSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHZlcnN1ZmZpeCRzaGFyZWRfZXh0JworICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuZGxsLmxpYicKKworICAgIGNhc2UgJGJ1aWxkX29zIGluCisgICAgbWluZ3cqKQorICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPQorICAgICAgbHRfc2F2ZV9pZnM9JElGUworICAgICAgSUZTPSc7JworICAgICAgZm9yIGx0X3BhdGggaW4gJExJQgorICAgICAgZG8KKyAgICAgICAgSUZTPSRsdF9zYXZlX2lmcworICAgICAgICAjIExldCBET1MgdmFyaWFibGUgZXhwYW5zaW9uIHByaW50IHRoZSBzaG9ydCA4LjMgc3R5bGUgZmlsZSBuYW1lLgorICAgICAgICBsdF9wYXRoPWBjZCAiJGx0X3BhdGgiIDI+L2Rldi9udWxsICYmIGNtZCAvL0MgImZvciAlaSBpbiAoIi4iKSBkbyBAZWNobyAlfnNpImAKKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjICRsdF9wYXRoIgorICAgICAgZG9uZQorICAgICAgSUZTPSRsdF9zYXZlX2lmcworICAgICAgIyBDb252ZXJ0IHRvIE1TWVMgc3R5bGUuCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8IHNlZCAtZSAnc3xcXFxcfC98ZycgLWUgJ3N8IFxcKFthLXpBLVpdXFwpOnwgL1xcMXxnJyAtZSAnc3xeIHx8J2AKKyAgICAgIDs7CisgICAgY3lnd2luKikKKyAgICAgICMgQ29udmVydCB0byB1bml4IGZvcm0sIHRoZW4gdG8gZG9zIGZvcm0sIHRoZW4gYmFjayB0byB1bml4IGZvcm0KKyAgICAgICMgYnV0IHRoaXMgdGltZSBkb3Mgc3R5bGUgKG5vIHNwYWNlcyEpIHNvIHRoYXQgdGhlIHVuaXggZm9ybSBsb29rcworICAgICAgIyBsaWtlIC9jeWdkcml2ZS9jL1BST0dSQX4xOi9jeWdkci4uLgorICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLXVuaXggIiRMSUIiYAorICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLWRvcyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgMj4vZGV2L251bGxgCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tdW5peCAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAorICAgICAgOzsKKyAgICAqKQorICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSRMSUIKKyAgICAgIGlmICRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRHUkVQICc7W2MtekMtWl06LycgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICAjIEl0IGlzIG1vc3QgcHJvYmFibHkgYSBXaW5kb3dzIGZvcm1hdCBQQVRILgorICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgJ3MvOy8gL2cnYAorICAgICAgZWxzZQorICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCisgICAgICBmaQorICAgICAgIyBGSVhNRTogZmluZCB0aGUgc2hvcnQgbmFtZSBvciB0aGUgcGF0aCBjb21wb25lbnRzLCBhcyBzcGFjZXMgYXJlCisgICAgICAjIGNvbW1vbi4gKGUuZy4gIlByb2dyYW0gRmlsZXMiIC0+ICJQUk9HUkF+MSIpCisgICAgICA7OworICAgIGVzYWMKKworICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKKyAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwkZmlsZWB+CisgICAgICBkbHBhdGg9YCRTSEVMTCAyPiYxIC1jICdcJycuICRkaXIvJ1wnJ1wkYmFzZV9maWxlJ1wnJ2k7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKyAgICAgIGRsZGlyPSRkZXN0ZGlyL2BkaXJuYW1lIFwkZGxwYXRoYH4KKyAgICAgIHRlc3QgLWQgXCRkbGRpciB8fCBta2RpciAtcCBcJGRsZGlyfgorICAgICAgJGluc3RhbGxfcHJvZyAkZGlyLyRkbG5hbWUgXCRkbGRpci8kZGxuYW1lJworICAgIHBvc3R1bmluc3RhbGxfY21kcz0nZGxkbGw9YCRTSEVMTCAyPiYxIC1jICdcJycuICRmaWxlOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisgICAgICBkbHBhdGg9JGRpci9cJGRsZGxsfgorICAgICAgICRSTSBcJGRscGF0aCcKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxpbmsuZXhlJworICAgIDs7CisKKyAgKikKKyAgICAjIEFzc3VtZSBNU1ZDIHdyYXBwZXIKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lYGVjaG8gJHJlbGVhc2UgfCAkU0VEIC1lICdzL1suXS8tL2cnYCR2ZXJzdWZmaXgkc2hhcmVkX2V4dCAkbGlibmFtZS5saWInCisgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKKyAgICA7OworICBlc2FjCisgICMgRklYTUU6IGZpcnN0IHdlIHNob3VsZCBzZWFyY2ggLiBhbmQgdGhlIGRpcmVjdG9yeSB0aGUgZXhlY3V0YWJsZSBpcyBpbgorICBzaGxpYnBhdGhfdmFyPVBBVEgKKyAgOzsKKworZGFyd2luKiB8IHJoYXBzb2R5KikKKyAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGR5bGQiCisgIHZlcnNpb25fdHlwZT1kYXJ3aW4KKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2UkbWFqb3Ikc2hhcmVkX2V4dCAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRtYWpvciRzaGFyZWRfZXh0JworICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIHNobGlicGF0aF92YXI9RFlMRF9MSUJSQVJZX1BBVEgKKyAgc2hyZXh0X2NtZHM9J2B0ZXN0IC4kbW9kdWxlID0gLnllcyAmJiBlY2hvIC5zbyB8fCBlY2hvIC5keWxpYmAnCisKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbG9jYWwvbGliIC9saWIgL3Vzci9saWInCisgIDs7CisKK2RndXgqKQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICA7OworCitmcmVlYnNkKiB8IGRyYWdvbmZseSopCisgICMgRHJhZ29uRmx5IGRvZXMgbm90IGhhdmUgYW91dC4gIFdoZW4vaWYgdGhleSBpbXBsZW1lbnQgYSBuZXcKKyAgIyB2ZXJzaW9uaW5nIG1lY2hhbmlzbSwgYWRqdXN0IHRoaXMuCisgIGlmIHRlc3QgLXggL3Vzci9iaW4vb2JqZm9ybWF0OyB0aGVuCisgICAgb2JqZm9ybWF0PWAvdXNyL2Jpbi9vYmpmb3JtYXRgCisgIGVsc2UKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgZnJlZWJzZFsyM10uKikgb2JqZm9ybWF0PWFvdXQgOzsKKyAgICAqKSBvYmpmb3JtYXQ9ZWxmIDs7CisgICAgZXNhYworICBmaQorICB2ZXJzaW9uX3R5cGU9ZnJlZWJzZC0kb2JqZm9ybWF0CisgIGNhc2UgJHZlcnNpb25fdHlwZSBpbgorICAgIGZyZWVic2QtZWxmKikKKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgICAgIG5lZWRfdmVyc2lvbj1ubworICAgICAgbmVlZF9saWJfcHJlZml4PW5vCisgICAgICA7OworICAgIGZyZWVic2QtKikKKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCcKKyAgICAgIG5lZWRfdmVyc2lvbj15ZXMKKyAgICAgIDs7CisgIGVzYWMKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgY2FzZSAkaG9zdF9vcyBpbgorICBmcmVlYnNkMi4qKQorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgICA7OworICBmcmVlYnNkMy5bMDFdKiB8IGZyZWVic2RlbGYzLlswMV0qKQorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICAgOzsKKyAgZnJlZWJzZDMuWzItOV0qIHwgZnJlZWJzZGVsZjMuWzItOV0qIHwgXAorICBmcmVlYnNkNC5bMC01XSB8IGZyZWVic2RlbGY0LlswLTVdIHwgZnJlZWJzZDQuMS4xIHwgZnJlZWJzZGVsZjQuMS4xKQorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgICA7OworICAqKSAjIGZyb20gNC42IG9uLCBhbmQgRHJhZ29uRmx5CisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgICA7OworICBlc2FjCisgIDs7CisKK2hhaWt1KikKKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBydW50aW1lX2xvYWRlciIKKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy9ib290L2hvbWUvY29uZmlnL2xpYiAvYm9vdC9jb21tb24vbGliIC9ib290L3N5c3RlbS9saWInCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgOzsKKworaHB1eDkqIHwgaHB1eDEwKiB8IGhwdXgxMSopCisgICMgR2l2ZSBhIHNvbmFtZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBtYWpvciB2ZXJzaW9uIHNvIHRoYXQgZGxkLnNsIHJlZnVzZXMgdG8KKyAgIyBsaW5rIGFnYWluc3Qgb3RoZXIgdmVyc2lvbnMuCisgIHZlcnNpb25fdHlwZT1zdW5vcworICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGNhc2UgJGhvc3RfY3B1IGluCisgIGlhNjQqKQorICAgIHNocmV4dF9jbWRzPScuc28nCisgICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkbGQuc28iCisgICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzICMgVW5sZXNzICtub2VudnZhciBpcyBzcGVjaWZpZWQuCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCisgICAgaWYgdGVzdCAzMiA9ICIkSFBVWF9JQTY0X01PREUiOyB0aGVuCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL2hwdXgzMiAvdXNyL2xvY2FsL2xpYi9ocHV4MzIgL3Vzci9sb2NhbC9saWIiCisgICAgZWxzZQorICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYi9ocHV4NjQgL3Vzci9sb2NhbC9saWIvaHB1eDY0IgorICAgIGZpCisgICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYworICAgIDs7CisgIGhwcGEqNjQqKQorICAgIHNocmV4dF9jbWRzPScuc2wnCisgICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkbGQuc2wiCisgICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEggIyBIb3cgc2hvdWxkIHdlIGhhbmRsZSBTSExJQl9QQVRICisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcyAjIFVubGVzcyArbm9lbnZ2YXIgaXMgc3BlY2lmaWVkLgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJworICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIvcGEyMF82NCAvdXNyL2Njcy9saWIvcGEyMF82NCIKKyAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCisgICAgOzsKKyAgKikKKyAgICBzaHJleHRfY21kcz0nLnNsJworICAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkbGQuc2wiCisgICAgc2hsaWJwYXRoX3Zhcj1TSExJQl9QQVRICisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vICMgK3MgaXMgcmVxdWlyZWQgdG8gZW5hYmxlIFNITElCX1BBVEgKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKKyAgICA7OworICBlc2FjCisgICMgSFAtVVggcnVucyAqcmVhbGx5KiBzbG93bHkgdW5sZXNzIHNoYXJlZCBsaWJyYXJpZXMgYXJlIG1vZGUgNTU1LCAuLi4KKyAgcG9zdGluc3RhbGxfY21kcz0nY2htb2QgNTU1ICRsaWInCisgICMgb3IgZmFpbHMgb3V0cmlnaHQsIHNvIG92ZXJyaWRlIGF0b21pY2FsbHk6CisgIGluc3RhbGxfb3ZlcnJpZGVfbW9kZT01NTUKKyAgOzsKKworaW50ZXJpeFszLTldKikKKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKKyAgZHluYW1pY19saW5rZXI9J0ludGVyaXggMy54IGxkLnNvLjEgKFBFLCBsaWtlIEVMRiknCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKK2lyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBub25zdG9wdXgqKSB2ZXJzaW9uX3R5cGU9bm9uc3RvcHV4IDs7CisgICAgKikKKwlpZiB0ZXN0IHllcyA9ICIkbHRfY3ZfcHJvZ19nbnVfbGQiOyB0aGVuCisJCXZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKwllbHNlCisJCXZlcnNpb25fdHlwZT1pcml4CisJZmkgOzsKKyAgZXNhYworICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0ICRsaWJuYW1lJHNoYXJlZF9leHQnCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgaXJpeDUqIHwgbm9uc3RvcHV4KikKKyAgICBsaWJzdWZmPSBzaGxpYnN1ZmY9CisgICAgOzsKKyAgKikKKyAgICBjYXNlICRMRCBpbiAjIGxpYnRvb2wubTQgd2lsbCBhZGQgb25lIG9mIHRoZXNlIHN3aXRjaGVzIHRvIExECisgICAgKi0zMnwqIi0zMiAifCotbWVsZjMyYnNtaXB8KiItbWVsZjMyYnNtaXAgIikKKyAgICAgIGxpYnN1ZmY9IHNobGlic3VmZj0gbGlibWFnaWM9MzItYml0OzsKKyAgICAqLW4zMnwqIi1uMzIgInwqLW1lbGYzMmJtaXBuMzJ8KiItbWVsZjMyYm1pcG4zMiAiKQorICAgICAgbGlic3VmZj0zMiBzaGxpYnN1ZmY9TjMyIGxpYm1hZ2ljPU4zMjs7CisgICAgKi02NHwqIi02NCAifCotbWVsZjY0Ym1pcHwqIi1tZWxmNjRibWlwICIpCisgICAgICBsaWJzdWZmPTY0IHNobGlic3VmZj02NCBsaWJtYWdpYz02NC1iaXQ7OworICAgICopIGxpYnN1ZmY9IHNobGlic3VmZj0gbGlibWFnaWM9bmV2ZXItbWF0Y2g7OworICAgIGVzYWMKKyAgICA7OworICBlc2FjCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWSR7c2hsaWJzdWZmfV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliJGxpYnN1ZmYgL2xpYiRsaWJzdWZmIC91c3IvbG9jYWwvbGliJGxpYnN1ZmYiCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiRsaWJzdWZmIC9saWIkbGlic3VmZiIKKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICA7OworCisjIE5vIHNoYXJlZCBsaWIgc3VwcG9ydCBmb3IgTGludXggb2xkbGQsIGFvdXQsIG9yIGNvZmYuCitsaW51eCpvbGRsZCogfCBsaW51eCphb3V0KiB8IGxpbnV4KmNvZmYqKQorICBkeW5hbWljX2xpbmtlcj1ubworICA7OworCitsaW51eCphbmRyb2lkKikKKyAgdmVyc2lvbl90eXBlPW5vbmUgIyBBbmRyb2lkIGRvZXNuJ3Qgc3VwcG9ydCB2ZXJzaW9uZWQgbGlicmFyaWVzLgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JworICBmaW5pc2hfY21kcz0KKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworCisgICMgVGhpcyBpbXBsaWVzIG5vIGZhc3RfaW5zdGFsbCwgd2hpY2ggaXMgdW5hY2NlcHRhYmxlLgorICAjIFNvbWUgcmV3b3JrIHdpbGwgYmUgbmVlZGVkIHRvIGFsbG93IGZvciBmYXN0X2luc3RhbGwKKyAgIyBiZWZvcmUgdGhpcyBjYW4gYmUgZW5hYmxlZC4KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworCisgIGR5bmFtaWNfbGlua2VyPSdBbmRyb2lkIGxpbmtlcicKKyAgIyBEb24ndCBlbWJlZCAtcnBhdGggZGlyZWN0b3JpZXMgc2luY2UgdGhlIGxpbmtlciBkb2Vzbid0IHN1cHBvcnQgdGhlbS4KKyAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9Jy1MJGxpYmRpcicKKyAgOzsKKworIyBUaGlzIG11c3QgYmUgZ2xpYmMvRUxGLgorbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251IHwgZ251KikKKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKKyAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW4gJGxpYmRpcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisKKyAgIyBTb21lIGJpbnV0aWxzIGxkIGFyZSBwYXRjaGVkIHRvIHNldCBEVF9SVU5QQVRICisgIGlmICR7bHRfY3Zfc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3Zfc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgICAgc2F2ZV9MREZMQUdTPSRMREZMQUdTCisgICAgc2F2ZV9saWJkaXI9JGxpYmRpcgorICAgIGV2YWwgImxpYmRpcj0vZm9vOyB3bD1cIiRsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWFwiOyBcCisJIExERkxBR1M9XCJcJExERkxBR1MgJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYXCIiCisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jeHhfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgaWYgICgkT0JKRFVNUCAtcCBjb25mdGVzdCRhY19leGVleHQpIDI+L2Rldi9udWxsIHwgZ3JlcCAiUlVOUEFUSC4qJGxpYmRpciIgPi9kZXYvbnVsbDsgdGhlbiA6CisgIGx0X2N2X3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKK2ZpCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICBMREZMQUdTPSRzYXZlX0xERkxBR1MKKyAgICBsaWJkaXI9JHNhdmVfbGliZGlyCisKK2ZpCisKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPSRsdF9jdl9zaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgKKworICAjIFRoaXMgaW1wbGllcyBubyBmYXN0X2luc3RhbGwsIHdoaWNoIGlzIHVuYWNjZXB0YWJsZS4KKyAgIyBTb21lIHJld29yayB3aWxsIGJlIG5lZWRlZCB0byBhbGxvdyBmb3IgZmFzdF9pbnN0YWxsCisgICMgYmVmb3JlIHRoaXMgY2FuIGJlIGVuYWJsZWQuCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKworICAjIEFwcGVuZCBsZC5zby5jb25mIGNvbnRlbnRzIHRvIHRoZSBzZWFyY2ggcGF0aAorICBpZiB0ZXN0IC1mIC9ldGMvbGQuc28uY29uZjsgdGhlbgorICAgIGx0X2xkX2V4dHJhPWBhd2sgJy9eaW5jbHVkZSAvIHsgc3lzdGVtKHNwcmludGYoImNkIC9ldGM7IGNhdCAlcyAyPi9kZXYvbnVsbCIsIFwkMikpOyBza2lwID0gMTsgfSB7IGlmICghc2tpcCkgcHJpbnQgXCQwOyBza2lwID0gMDsgfScgPCAvZXRjL2xkLnNvLmNvbmYgfCAkU0VEIC1lICdzLyMuKi8vOy9eWwkgXSpod2NhcFsJIF0vZDtzL1s6LAldLyAvZztzLz1bXj1dKiQvLztzLz1bXj0gXSogLyAvZztzLyIvL2c7L14kL2QnIHwgdHIgJ1xuJyAnICdgCisgICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii9saWIgL3Vzci9saWIgJGx0X2xkX2V4dHJhIgorICBmaQorCisgICMgV2UgdXNlZCB0byB0ZXN0IGZvciAvbGliL2xkLnNvLjEgYW5kIGRpc2FibGUgc2hhcmVkIGxpYnJhcmllcyBvbgorICAjIHBvd2VycGMsIGJlY2F1c2UgTWtMaW51eCBvbmx5IHN1cHBvcnRlZCBzaGFyZWQgbGlicmFyaWVzIHdpdGggdGhlCisgICMgR05VIGR5bmFtaWMgbGlua2VyLiAgU2luY2UgdGhpcyB3YXMgYnJva2VuIHdpdGggY3Jvc3MgY29tcGlsZXJzLAorICAjIG1vc3QgcG93ZXJwYy1saW51eCBib3hlcyBzdXBwb3J0IGR5bmFtaWMgbGlua2luZyB0aGVzZSBkYXlzIGFuZAorICAjIHBlb3BsZSBjYW4gYWx3YXlzIC0tZGlzYWJsZS1zaGFyZWQsIHRoZSB0ZXN0IHdhcyByZW1vdmVkLCBhbmQgd2UKKyAgIyBhc3N1bWUgdGhlIEdOVS9MaW51eCBkeW5hbWljIGxpbmtlciBpcyBpbiB1c2UuCisgIGR5bmFtaWNfbGlua2VyPSdHTlUvTGludXggbGQuc28nCisgIDs7CisKK25ldGJzZCopCisgIHZlcnNpb25fdHlwZT1zdW5vcworICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHNoYXJlZF9leHQkdmVyc3VmZml4JworICAgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1tICRsaWJkaXInCisgICAgZHluYW1pY19saW5rZXI9J05ldEJTRCAoYS5vdXQpIGxkLnNvJworICBlbHNlCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCisgICAgZHluYW1pY19saW5rZXI9J05ldEJTRCBsZC5lbGZfc28nCisgIGZpCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICA7OworCituZXdzb3M2KQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICA7OworCisqbnRvKiB8ICpxbngqKQorICB2ZXJzaW9uX3R5cGU9cW54CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICBkeW5hbWljX2xpbmtlcj0nbGRxbnguc28nCisgIDs7CisKK29wZW5ic2QqIHwgYml0cmlnKikKKyAgdmVyc2lvbl90eXBlPXN1bm9zCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPS91c3IvbGliCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fYCI7IHRoZW4KKyAgICBuZWVkX3ZlcnNpb249bm8KKyAgZWxzZQorICAgIG5lZWRfdmVyc2lvbj15ZXMKKyAgZmkKKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHNoYXJlZF9leHQkdmVyc3VmZml4JworICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbSAkbGliZGlyJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIDs7CisKK29zMiopCisgIGxpYm5hbWVfc3BlYz0nJG5hbWUnCisgIHNocmV4dF9jbWRzPS5kbGwKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hhcmVkX2V4dCAkbGlibmFtZS5hJworICBkeW5hbWljX2xpbmtlcj0nT1MvMiBsZC5leGUnCisgIHNobGlicGF0aF92YXI9TElCUEFUSAorICA7OworCitvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisgIHZlcnNpb25fdHlwZT1vc2YKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9zaGxpYiAvdXNyL2Njcy9saWIgL3Vzci9saWIvY21wbHJzL2NjIC91c3IvbGliIC91c3IvbG9jYWwvbGliIC92YXIvc2hsaWIiCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKKyAgOzsKKworcmRvcyopCisgIGR5bmFtaWNfbGlua2VyPW5vCisgIDs7CisKK3NvbGFyaXMqKQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgIyBsZGQgY29tcGxhaW5zIHVubGVzcyBsaWJyYXJpZXMgYXJlIGV4ZWN1dGFibGUKKyAgcG9zdGluc3RhbGxfY21kcz0nY2htb2QgK3ggJGxpYicKKyAgOzsKKworc3Vub3M0KikKKyAgdmVyc2lvbl90eXBlPXN1bm9zCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCcKKyAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovdXNyL2V0YyIgbGRjb25maWcgJGxpYmRpcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBpZiB0ZXN0IHllcyA9ICIkd2l0aF9nbnVfbGQiOyB0aGVuCisgICAgbmVlZF9saWJfcHJlZml4PW5vCisgIGZpCisgIG5lZWRfdmVyc2lvbj15ZXMKKyAgOzsKKworc3lzdjQgfCBzeXN2NC4zKikKKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIGNhc2UgJGhvc3RfdmVuZG9yIGluCisgICAgc25pKQorICAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgICAgIHJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRICisgICAgICA7OworICAgIHNpZW1lbnMpCisgICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgICAgIDs7CisgICAgbW90b3JvbGEpCisgICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgICAgIG5lZWRfdmVyc2lvbj1ubworICAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy9saWIgL3Vzci9saWIgL3Vzci9jY3MvbGliJworICAgICAgOzsKKyAgZXNhYworICA7OworCitzeXN2NCpNUCopCisgIGlmIHRlc3QgLWQgL3Vzci9uZWM7IHRoZW4KKyAgICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaGFyZWRfZXh0LiR2ZXJzdWZmaXggJGxpYm5hbWUkc2hhcmVkX2V4dC4kbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkc2hhcmVkX2V4dC4kbWFqb3InCisgICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgZmkKKyAgOzsKKworc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IHVuaXh3YXJlKiB8IE9wZW5VTklYKiB8IHN5c3Y0KnV3MiopCisgIHZlcnNpb25fdHlwZT1mcmVlYnNkLWVsZgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIGlmIHRlc3QgeWVzID0gIiR3aXRoX2dudV9sZCI7IHRoZW4KKyAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbG9jYWwvbGliIC91c3IvZ251L2xpYiAvdXNyL2Njcy9saWIgL3Vzci9saWIgL2xpYicKKyAgZWxzZQorICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9jY3MvbGliIC91c3IvbGliJworICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIHNjbzMuMnY1KikKKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIC9saWIiCisJOzsKKyAgICBlc2FjCisgIGZpCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xpYicKKyAgOzsKKwordHBmKikKKyAgIyBUUEYgaXMgYSBjcm9zcy10YXJnZXQgb25seS4gIFByZWZlcnJlZCBjcm9zcy1ob3N0ID0gR05VL0xpbnV4LgorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICA7OworCit1dHM0KikKKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIDs7CisKKyopCisgIGR5bmFtaWNfbGlua2VyPW5vCisgIDs7Citlc2FjCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGR5bmFtaWNfbGlua2VyIiA+JjUKKyRhc19lY2hvICIkZHluYW1pY19saW5rZXIiID4mNjsgfQordGVzdCBubyA9ICIkZHluYW1pY19saW5rZXIiICYmIGNhbl9idWlsZF9zaGFyZWQ9bm8KKwordmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9IlBBVEggJHNobGlicGF0aF92YXIgJHJ1bnBhdGhfdmFyIgoraWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KKyAgdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9IiR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluayBHQ0NfRVhFQ19QUkVGSVggQ09NUElMRVJfUEFUSCBMSUJSQVJZX1BBVEgiCitmaQorCitpZiB0ZXN0IHNldCA9ICIke2x0X2N2X3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYytzZXR9IjsgdGhlbgorICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9JGx0X2N2X3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYworZmkKK2lmIHRlc3Qgc2V0ID0gIiR7bHRfY3Zfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMrc2V0fSI7IHRoZW4KKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JGx0X2N2X3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjCitmaQorCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBoYXJkY29kZSBsaWJyYXJ5IHBhdGhzIGludG8gcHJvZ3JhbXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBwcm9ncmFtcy4uLiAiID4mNjsgfQoraGFyZGNvZGVfYWN0aW9uX0NYWD0KK2lmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWCIgfHwKKyAgIHRlc3QgLW4gIiRydW5wYXRoX3Zhcl9DWFgiIHx8CisgICB0ZXN0IHllcyA9ICIkaGFyZGNvZGVfYXV0b21hdGljX0NYWCI7IHRoZW4KKworICAjIFdlIGNhbiBoYXJkY29kZSBub24tZXhpc3RlbnQgZGlyZWN0b3JpZXMuCisgIGlmIHRlc3Qgbm8gIT0gIiRoYXJkY29kZV9kaXJlY3RfQ1hYIiAmJgorICAgICAjIElmIHRoZSBvbmx5IG1lY2hhbmlzbSB0byBhdm9pZCBoYXJkY29kaW5nIGlzIHNobGlicGF0aF92YXIsIHdlCisgICAgICMgaGF2ZSB0byByZWxpbmssIG90aGVyd2lzZSB3ZSBtaWdodCBsaW5rIHdpdGggYW4gaW5zdGFsbGVkIGxpYnJhcnkKKyAgICAgIyB3aGVuIHdlIHNob3VsZCBiZSBsaW5raW5nIHdpdGggYSB5ZXQtdG8tYmUtaW5zdGFsbGVkIG9uZQorICAgICAjIyB0ZXN0IG5vICE9ICIkX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCBDWFgpIiAmJgorICAgICB0ZXN0IG5vICE9ICIkaGFyZGNvZGVfbWludXNfTF9DWFgiOyB0aGVuCisgICAgIyBMaW5raW5nIGFsd2F5cyBoYXJkY29kZXMgdGhlIHRlbXBvcmFyeSBsaWJyYXJ5IGRpcmVjdG9yeS4KKyAgICBoYXJkY29kZV9hY3Rpb25fQ1hYPXJlbGluaworICBlbHNlCisgICAgIyBXZSBjYW4gbGluayB3aXRob3V0IGhhcmRjb2RpbmcsIGFuZCB3ZSBjYW4gaGFyZGNvZGUgbm9uZXhpc3RpbmcgZGlycy4KKyAgICBoYXJkY29kZV9hY3Rpb25fQ1hYPWltbWVkaWF0ZQorICBmaQorZWxzZQorICAjIFdlIGNhbm5vdCBoYXJkY29kZSBhbnl0aGluZywgb3IgZWxzZSB3ZSBjYW4gb25seSBoYXJkY29kZSBleGlzdGluZworICAjIGRpcmVjdG9yaWVzLgorICBoYXJkY29kZV9hY3Rpb25fQ1hYPXVuc3VwcG9ydGVkCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRoYXJkY29kZV9hY3Rpb25fQ1hYIiA+JjUKKyRhc19lY2hvICIkaGFyZGNvZGVfYWN0aW9uX0NYWCIgPiY2OyB9CisKK2lmIHRlc3QgcmVsaW5rID0gIiRoYXJkY29kZV9hY3Rpb25fQ1hYIiB8fAorICAgdGVzdCB5ZXMgPSAiJGluaGVyaXRfcnBhdGhfQ1hYIjsgdGhlbgorICAjIEZhc3QgaW5zdGFsbGF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQKKyAgZW5hYmxlX2Zhc3RfaW5zdGFsbD1ubworZWxpZiB0ZXN0IHllcyA9ICIkc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoIiB8fAorICAgICB0ZXN0IG5vID0gIiRlbmFibGVfc2hhcmVkIjsgdGhlbgorICAjIEZhc3QgaW5zdGFsbGF0aW9uIGlzIG5vdCBuZWNlc3NhcnkKKyAgZW5hYmxlX2Zhc3RfaW5zdGFsbD1uZWVkbGVzcworZmkKKworCisKKworCisKKworICBmaSAjIHRlc3QgLW4gIiRjb21waWxlciIKKworICBDQz0kbHRfc2F2ZV9DQworICBDRkxBR1M9JGx0X3NhdmVfQ0ZMQUdTCisgIExEQ1hYPSRMRAorICBMRD0kbHRfc2F2ZV9MRAorICBHQ0M9JGx0X3NhdmVfR0NDCisgIHdpdGhfZ251X2xkPSRsdF9zYXZlX3dpdGhfZ251X2xkCisgIGx0X2N2X3BhdGhfTERDWFg9JGx0X2N2X3BhdGhfTEQKKyAgbHRfY3ZfcGF0aF9MRD0kbHRfc2F2ZV9wYXRoX0xECisgIGx0X2N2X3Byb2dfZ251X2xkY3h4PSRsdF9jdl9wcm9nX2dudV9sZAorICBsdF9jdl9wcm9nX2dudV9sZD0kbHRfc2F2ZV93aXRoX2dudV9sZAorZmkgIyB0ZXN0IHllcyAhPSAiJF9sdF9jYXVnaHRfQ1hYX2Vycm9yIgorCithY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CiAKIAogCkBAIC0xMjgxMSw3ICsxNjY3NCw3IEBACiAKIAogICAgICBjcHV0eXBlPWAoKChncmVwIGNwdSAvcHJvYy9jcHVpbmZvIHwgY3V0IC1kOiAtZjIpIDsgKCRQUlRESUFHIC12IHxncmVwIC1pIHNwYXJjKSA7IGdyZXAgLWkgY3B1IC92YXIvcnVuL2RtZXNnLmJvb3QgKSB8IGhlYWQgLW4gMSkgMj4gL2Rldi9udWxsYAotICAgICBjcHV0eXBlPWBlY2hvICIkY3B1dHlwZSIgfCB0ciAtZCAnIC0nIHx0ciAkYXNfY3JfTEVUVEVSUyAkYXNfY3JfbGV0dGVyc2AKKyAgICAgY3B1dHlwZT1gZWNobyAiJGNwdXR5cGUiIHwgdHIgLWQgJyAtJyB8IHNlZCAncy9TUEFSQ0lJaS9TUEFSQ0lJLycgfCB0ciAkYXNfY3JfTEVUVEVSUyAkYXNfY3JfbGV0dGVyc2AKICAgICAgY2FzZSAkY3B1dHlwZSBpbgogICAgICAgICAgKnVsdHJhc3BhcmNpdiopIGF4X2djY19hcmNoPSJ1bHRyYXNwYXJjNCB1bHRyYXNwYXJjMyB1bHRyYXNwYXJjIHY5IiA7OwogICAgICAgICAgKnVsdHJhc3BhcmNpaWkqKSBheF9nY2NfYXJjaD0idWx0cmFzcGFyYzMgdWx0cmFzcGFyYyB2OSIgOzsKQEAgLTEzMDgyLDEzICsxNjk0NSwxMyBAQAogCiBpZiB0ZXN0ICJ4JEdDQyIgPSAieHllcyI7IHRoZW4KICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1mZXhjZXB0aW9ucyIKLSAgdG91Y2ggbG9jYWwuZXhwCi1lbHNlCi0gIGNhdCA+IGxvY2FsLmV4cCA8PEVPRgotc2V0IENDX0ZPUl9UQVJHRVQgIiRDQyIKLUVPRgogZmkKIAorY2F0ID4gbG9jYWwuZXhwIDw8RU9GCitzZXQgQ0NfRk9SX1RBUkdFVCAiJENDIgorc2V0IENYWF9GT1JfVEFSR0VUICIkQ1hYIgorRU9GCisKIAogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRvIGVuYWJsZSBtYWludGFpbmVyLXNwZWNpZmljIHBvcnRpb25zIG9mIE1ha2VmaWxlcyIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRvIGVuYWJsZSBtYWludGFpbmVyLXNwZWNpZmljIHBvcnRpb25zIG9mIE1ha2VmaWxlcy4uLiAiID4mNjsgfQpAQCAtMTMyODgsNiArMTcxNTEsNyBAQAogCiAKIFRBUkdFVERJUj0idW5rbm93biIKK0hBVkVfTE9OR19ET1VCTEVfVkFSSUFOVD0wCiBjYXNlICIkaG9zdCIgaW4KICAgYWFyY2g2NCotKi0qKQogCVRBUkdFVD1BQVJDSDY0OyBUQVJHRVRESVI9YWFyY2g2NApAQCAtMTMyOTksNiArMTcxNjMsMTAgQEAKIAlIQVZFX0xPTkdfRE9VQkxFPSdkZWZpbmVkKF9fTE9OR19ET1VCTEVfMTI4X18pJwogCTs7CiAKKyAgYXJjKi0qLSopCisJVEFSR0VUPUFSQzsgVEFSR0VURElSPWFyYworCTs7CisKICAgYXJtKi0qLSopCiAJVEFSR0VUPUFSTTsgVEFSR0VURElSPWFybQogCTs7CkBAIC0xMzQxNyw2ICsxNzI4NSwxMCBAQAogCVRBUkdFVD1NNjhLOyBUQVJHRVRESVI9bTY4awogCTs7CiAKKyAgbTg4ay0qLSopCisJVEFSR0VUPU04OEs7IFRBUkdFVERJUj1tODhrCisJOzsKKwogICBtaWNyb2JsYXplKi0qLSopCiAJVEFSR0VUPU1JQ1JPQkxBWkU7IFRBUkdFVERJUj1taWNyb2JsYXplCiAJOzsKQEAgLTEzNDMyLDE0ICsxNzMwNCwxOSBAQAogICBtaXBzLXNnaS1pcml4NS4qIHwgbWlwcy1zZ2ktaXJpeDYuKiB8IG1pcHMqLSotcnRlbXMqKQogCVRBUkdFVD1NSVBTX0lSSVg7IFRBUkdFVERJUj1taXBzCiAJOzsKLSAgbWlwcyotKi1saW51eCogfCBtaXBzKi0qLW9wZW5ic2QqKQorICBtaXBzKi0qbGludXgqIHwgbWlwcyotKi1vcGVuYnNkKikKIAkjIFN1cHBvcnQgMTI4LWJpdCBsb25nIGRvdWJsZSBmb3IgTmV3QUJJLgogCUhBVkVfTE9OR19ET1VCTEU9J2RlZmluZWQoX19taXBzNjQpJwotCVRBUkdFVD1NSVBTX0lSSVg7IFRBUkdFVERJUj1taXBzCisJVEFSR0VUPU1JUFNfTElOVVg7IFRBUkdFVERJUj1taXBzCisJOzsKKworICBuaW9zMiotbGludXgqKQorCVRBUkdFVD1OSU9TMjsgVEFSR0VURElSPW5pb3MyCiAJOzsKIAogICBwb3dlcnBjKi0qLWxpbnV4KiB8IHBvd2VycGMtKi1zeXN2KikKIAlUQVJHRVQ9UE9XRVJQQzsgVEFSR0VURElSPXBvd2VycGMKKwlIQVZFX0xPTkdfRE9VQkxFX1ZBUklBTlQ9MQogCTs7CiAgIHBvd2VycGMtKi1hbWlnYW9zKikKIAlUQVJHRVQ9UE9XRVJQQzsgVEFSR0VURElSPXBvd2VycGMKQEAgLTEzNDU1LDYgKzE3MzMyLDcgQEAKIAk7OwogICBwb3dlcnBjLSotZnJlZWJzZCogfCBwb3dlcnBjLSotb3BlbmJzZCopCiAJVEFSR0VUPVBPV0VSUENfRlJFRUJTRDsgVEFSR0VURElSPXBvd2VycGMKKwlIQVZFX0xPTkdfRE9VQkxFX1ZBUklBTlQ9MQogCTs7CiAgIHBvd2VycGM2NC0qLWZyZWVic2QqKQogCVRBUkdFVD1QT1dFUlBDOyBUQVJHRVRESVI9cG93ZXJwYwpAQCAtMTM0ODIsNiArMTczNjAsMTAgQEAKICAgICAgICAgVEFSR0VUPVRJTEU7IFRBUkdFVERJUj10aWxlCiAgICAgICAgIDs7CiAKKyAgdmF4LSotKikKKwlUQVJHRVQ9VkFYOyBUQVJHRVRESVI9dmF4CisJOzsKKwogICB4dGVuc2EqLSopCiAJVEFSR0VUPVhURU5TQTsgVEFSR0VURElSPXh0ZW5zYQogCTs7CkBAIC0xMzU1OSw2ICsxNzQ0MSwyMiBAQAogICBYODZfREFSV0lOX0ZBTFNFPQogZmkKIAorIGlmIHRlc3QgeCRUQVJHRVQgPSB4WDg2X0RBUldJTiAmJiB0ZXN0ICRhY19jdl9zaXplb2Zfc2l6ZV90ID0gNDsgdGhlbgorICBYODZfREFSV0lOMzJfVFJVRT0KKyAgWDg2X0RBUldJTjMyX0ZBTFNFPScjJworZWxzZQorICBYODZfREFSV0lOMzJfVFJVRT0nIycKKyAgWDg2X0RBUldJTjMyX0ZBTFNFPQorZmkKKworIGlmIHRlc3QgeCRUQVJHRVQgPSB4WDg2X0RBUldJTiAmJiB0ZXN0ICRhY19jdl9zaXplb2Zfc2l6ZV90ID0gODsgdGhlbgorICBYODZfREFSV0lONjRfVFJVRT0KKyAgWDg2X0RBUldJTjY0X0ZBTFNFPScjJworZWxzZQorICBYODZfREFSV0lONjRfVFJVRT0nIycKKyAgWDg2X0RBUldJTjY0X0ZBTFNFPQorZmkKKwogIGlmIHRlc3QgeCRUQVJHRVQgPSB4QUxQSEE7IHRoZW4KICAgQUxQSEFfVFJVRT0KICAgQUxQSEFfRkFMU0U9JyMnCkBAIC0xMzU5MSw2ICsxNzQ4OSwxNCBAQAogICBNNjhLX0ZBTFNFPQogZmkKIAorIGlmIHRlc3QgeCRUQVJHRVQgPSB4TTg4SzsgdGhlbgorICBNODhLX1RSVUU9CisgIE04OEtfRkFMU0U9JyMnCitlbHNlCisgIE04OEtfVFJVRT0nIycKKyAgTTg4S19GQUxTRT0KK2ZpCisKICBpZiB0ZXN0IHgkVEFSR0VUID0geE1JQ1JPQkxBWkU7IHRoZW4KICAgTUlDUk9CTEFaRV9UUlVFPQogICBNSUNST0JMQVpFX0ZBTFNFPScjJwpAQCAtMTM2MTUsNiArMTc1MjEsMTQgQEAKICAgTU9YSUVfRkFMU0U9CiBmaQogCisgaWYgdGVzdCB4JFRBUkdFVCA9IHhOSU9TMjsgdGhlbgorICBOSU9TMl9UUlVFPQorICBOSU9TMl9GQUxTRT0nIycKK2Vsc2UKKyAgTklPUzJfVFJVRT0nIycKKyAgTklPUzJfRkFMU0U9CitmaQorCiAgaWYgdGVzdCB4JFRBUkdFVCA9IHhQT1dFUlBDOyB0aGVuCiAgIFBPV0VSUENfVFJVRT0KICAgUE9XRVJQQ19GQUxTRT0nIycKQEAgLTEzNjU1LDYgKzE3NTY5LDE0IEBACiAgIEFBUkNINjRfRkFMU0U9CiBmaQogCisgaWYgdGVzdCB4JFRBUkdFVCA9IHhBUkM7IHRoZW4KKyAgQVJDX1RSVUU9CisgIEFSQ19GQUxTRT0nIycKK2Vsc2UKKyAgQVJDX1RSVUU9JyMnCisgIEFSQ19GQUxTRT0KK2ZpCisKICBpZiB0ZXN0IHgkVEFSR0VUID0geEFSTTsgdGhlbgogICBBUk1fVFJVRT0KICAgQVJNX0ZBTFNFPScjJwpAQCAtMTM3NTEsNiArMTc2NzMsMTQgQEAKICAgVElMRV9GQUxTRT0KIGZpCiAKKyBpZiB0ZXN0IHgkVEFSR0VUID0geFZBWDsgdGhlbgorICBWQVhfVFJVRT0KKyAgVkFYX0ZBTFNFPScjJworZWxzZQorICBWQVhfVFJVRT0nIycKKyAgVkFYX0ZBTFNFPQorZmkKKwogIGlmIHRlc3QgeCRUQVJHRVQgPSB4WFRFTlNBOyB0aGVuCiAgIFhURU5TQV9UUlVFPQogICBYVEVOU0FfRkFMU0U9JyMnCkBAIC0xNDE1MSwxNyArMTgwODEsMjUgQEAKICMgQWxzbyBBQ19TVUJTVCB0aGlzIHZhcmlhYmxlIGZvciBmZmkuaC4KIGlmIHRlc3QgLXogIiRIQVZFX0xPTkdfRE9VQkxFIjsgdGhlbgogICBIQVZFX0xPTkdfRE9VQkxFPTAKLSAgaWYgdGVzdCAkYWNfY3Zfc2l6ZW9mX2RvdWJsZSAhPSAkYWNfY3Zfc2l6ZW9mX2xvbmdfZG91YmxlOyB0aGVuCi0gICAgaWYgdGVzdCAkYWNfY3Zfc2l6ZW9mX2xvbmdfZG91YmxlICE9IDA7IHRoZW4KKyAgaWYgdGVzdCAkYWNfY3Zfc2l6ZW9mX2xvbmdfZG91YmxlICE9IDA7IHRoZW4KKyAgICBpZiB0ZXN0ICRIQVZFX0xPTkdfRE9VQkxFX1ZBUklBTlQgIT0gMDsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0xPTkdfRE9VQkxFX1ZBUklBTlQgMSIgPj5jb25mZGVmcy5oCisKICAgICAgIEhBVkVfTE9OR19ET1VCTEU9MQorICAgIGVsc2UKKyAgICAgIGlmIHRlc3QgJGFjX2N2X3NpemVvZl9kb3VibGUgIT0gJGFjX2N2X3NpemVvZl9sb25nX2RvdWJsZTsgdGhlbgorICAgICAgICBIQVZFX0xPTkdfRE9VQkxFPTEKIAogJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9MT05HX0RPVUJMRSAxIiA+PmNvbmZkZWZzLmgKIAorICAgICAgZmkKICAgICBmaQogICBmaQogZmkKIAogCisKICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgYnl0ZSBvcmRlcmluZyBpcyBiaWdlbmRpYW4iID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBieXRlIG9yZGVyaW5nIGlzIGJpZ2VuZGlhbi4uLiAiID4mNjsgfQogaWYgJHthY19jdl9jX2JpZ2VuZGlhbis6fSBmYWxzZTsgdGhlbiA6CkBAIC0xNDYwMiw4ICsxODU0MCw3IEBACiBmaQogCiAKLWlmIHRlc3QgeCRUQVJHRVQgPSB4WDg2X1dJTjY0OyB0aGVuCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgXyBwcmVmaXggaW4gY29tcGlsZWQgc3ltYm9scyIgPiY1Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBfIHByZWZpeCBpbiBjb21waWxlZCBzeW1ib2xzIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIGZvciBfIHByZWZpeCBpbiBjb21waWxlZCBzeW1ib2xzLi4uICIgPiY2OyB9CiBpZiAke2x0X2N2X3N5c19zeW1ib2xfdW5kZXJzY29yZSs6fSBmYWxzZTsgdGhlbiA6CiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CkBAIC0xNDY1MCwxMSArMTg1ODcsMTAgQEAKICAgc3lzX3N5bWJvbF91bmRlcnNjb3JlPSRsdF9jdl9zeXNfc3ltYm9sX3VuZGVyc2NvcmUKIAogCi0gICAgaWYgdGVzdCAieCRzeXNfc3ltYm9sX3VuZGVyc2NvcmUiID0geHllczsgdGhlbgoraWYgdGVzdCAieCRzeXNfc3ltYm9sX3VuZGVyc2NvcmUiID0geHllczsgdGhlbgogCiAkYXNfZWNobyAiI2RlZmluZSBTWU1CT0xfVU5ERVJTQ09SRSAxIiA+PmNvbmZkZWZzLmgKIAotICAgIGZpCiBmaQogCiBGRklfRVhFQ19UUkFNUE9MSU5FX1RBQkxFPTAKQEAgLTE0NjgyLDE2ICsxODYxOCwzMiBAQAogCiAKIGlmIHRlc3QgeCRUQVJHRVQgPSB4WDg2XzY0OyB0aGVuCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBhc3NlbWJsZXIgc3VwcG9ydHMgdW53aW5kIHNlY3Rpb24gdHlwZSIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBhc3NlbWJsZXIgc3VwcG9ydHMgdW53aW5kIHNlY3Rpb24gdHlwZS4uLiAiID4mNjsgfQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgdG9vbGNoYWluIHN1cHBvcnRzIHVud2luZCBzZWN0aW9uIHR5cGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgdG9vbGNoYWluIHN1cHBvcnRzIHVud2luZCBzZWN0aW9uIHR5cGUuLi4gIiA+JjY7IH0KIGlmICR7bGliZmZpX2N2X2FzX3g4Nl82NF91bndpbmRfc2VjdGlvbl90eXBlKzp9IGZhbHNlOyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKIAotCWxpYmZmaV9jdl9hc194ODZfNjRfdW53aW5kX3NlY3Rpb25fdHlwZT15ZXMKLQllY2hvICcuc2VjdGlvbiAuZWhfZnJhbWUsImEiLEB1bndpbmQnID4gY29uZnRlc3QucwotCWlmICRDQyAkQ0ZMQUdTIC1jIGNvbmZ0ZXN0LnMgMj4mMSB8IGdyZXAgLWkgd2FybmluZyA+IC9kZXYvbnVsbDsgdGhlbgotCSAgICBsaWJmZmlfY3ZfYXNfeDg2XzY0X3Vud2luZF9zZWN0aW9uX3R5cGU9bm8KKyAgICAgICAgY2F0ICA+IGNvbmZ0ZXN0MS5zIDw8IEVPRgorLnRleHQKKy5nbG9ibCBmb28KK2ZvbzoKK2ptcCBiYXIKKy5zZWN0aW9uIC5laF9mcmFtZSwiYSIsQHVud2luZAorYmFyOgorRU9GCisKKyAgICAgICAgY2F0ID4gY29uZnRlc3QyLmMgIDw8IEVPRgorZXh0ZXJuIHZvaWQgZm9vKCk7CitpbnQgbWFpbigpe2ZvbygpO30KK0VPRgorCisJbGliZmZpX2N2X2FzX3g4Nl82NF91bndpbmRfc2VjdGlvbl90eXBlPW5vCisJIyB3ZSBlbnN1cmUgdGhhdCB3ZSBjYW4gY29tcGlsZSBfYW5kXyBsaW5rIGFuIGFzc2VtYmx5IGZpbGUgY29udGFpbmluZyBhbiBAdW53aW5kIHNlY3Rpb24KKwkjIHNpbmNlIHRoZSBjb21waWxlciBjYW4gc3VwcG9ydCBpdCBhbmQgbm90IHRoZSBsaW5rZXIgKGllIG9sZCBiaW51dGlscykKKwlpZiAkQ0MgLVdhLC0tZmF0YWwtd2FybmluZ3MgJENGTEFHUyAtYyBjb25mdGVzdDEucyA+IC9kZXYvbnVsbCAyPiYxICYmIFwKKyAgICAgICAgICAgJENDIGNvbmZ0ZXN0Mi5jIGNvbmZ0ZXN0MS5vID4gL2Rldi9udWxsIDI+JjEgOyB0aGVuCisJICAgIGxpYmZmaV9jdl9hc194ODZfNjRfdW53aW5kX3NlY3Rpb25fdHlwZT15ZXMKIAlmaQogCiBmaQpAQCAtMTQ4NDQsNyArMTg3OTYsNyBAQAogICAgIHRvb2xleGVjZGlyPSckKGxpYmRpcikvZ2NjLWxpYi8kKHRhcmdldF9hbGlhcyknCiAgICAgdG9vbGV4ZWNsaWJkaXI9JyQobGliZGlyKScKICAgZmkKLSAgbXVsdGlfb3NfZGlyZWN0b3J5PWAkQ0MgLXByaW50LW11bHRpLW9zLWRpcmVjdG9yeWAKKyAgbXVsdGlfb3NfZGlyZWN0b3J5PWAkQ0MgJENGTEFHUyAtcHJpbnQtbXVsdGktb3MtZGlyZWN0b3J5YAogICBjYXNlICRtdWx0aV9vc19kaXJlY3RvcnkgaW4KICAgICAuKSA7OyAjIEF2b2lkIHRyYWlsaW5nIC8uCiAgICAgLi4vKikgdG9vbGV4ZWNsaWJkaXI9JHRvb2xleGVjbGliZGlyLyRtdWx0aV9vc19kaXJlY3RvcnkgOzsKQEAgLTE1MDA1LDYgKzE4OTU3LDEwIEBACiAgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcImFtX19mYXN0ZGVwQ0NcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KIFVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKIGZpCitpZiB0ZXN0IC16ICIke2FtX19mYXN0ZGVwQ1hYX1RSVUV9IiAmJiB0ZXN0IC16ICIke2FtX19mYXN0ZGVwQ1hYX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiYW1fX2Zhc3RkZXBDWFhcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCiBpZiB0ZXN0IC16ICIke2FtX19mYXN0ZGVwQ0NBU19UUlVFfSIgJiYgdGVzdCAteiAiJHthbV9fZmFzdGRlcENDQVNfRkFMU0V9IjsgdGhlbgogICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJhbV9fZmFzdGRlcENDQVNcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KIFVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKQEAgLTE1MDQ5LDYgKzE5MDA1LDE0IEBACiAgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIlg4Nl9EQVJXSU5cIiB3YXMgbmV2ZXIgZGVmaW5lZC4KIFVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKIGZpCitpZiB0ZXN0IC16ICIke1g4Nl9EQVJXSU4zMl9UUlVFfSIgJiYgdGVzdCAteiAiJHtYODZfREFSV0lOMzJfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJYODZfREFSV0lOMzJcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke1g4Nl9EQVJXSU42NF9UUlVFfSIgJiYgdGVzdCAteiAiJHtYODZfREFSV0lONjRfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJYODZfREFSV0lONjRcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCiBpZiB0ZXN0IC16ICIke0FMUEhBX1RSVUV9IiAmJiB0ZXN0IC16ICIke0FMUEhBX0ZBTFNFfSI7IHRoZW4KICAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiQUxQSEFcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KIFVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKQEAgLTE1MDY1LDYgKzE5MDI5LDEwIEBACiAgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIk02OEtcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KIFVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKIGZpCitpZiB0ZXN0IC16ICIke004OEtfVFJVRX0iICYmIHRlc3QgLXogIiR7TTg4S19GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIk04OEtcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCiBpZiB0ZXN0IC16ICIke01JQ1JPQkxBWkVfVFJVRX0iICYmIHRlc3QgLXogIiR7TUlDUk9CTEFaRV9GQUxTRX0iOyB0aGVuCiAgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIk1JQ1JPQkxBWkVcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KIFVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKQEAgLTE1MDc3LDYgKzE5MDQ1LDEwIEBACiAgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIk1PWElFXCIgd2FzIG5ldmVyIGRlZmluZWQuCiBVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CiBmaQoraWYgdGVzdCAteiAiJHtOSU9TMl9UUlVFfSIgJiYgdGVzdCAteiAiJHtOSU9TMl9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIk5JT1MyXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQogaWYgdGVzdCAteiAiJHtQT1dFUlBDX1RSVUV9IiAmJiB0ZXN0IC16ICIke1BPV0VSUENfRkFMU0V9IjsgdGhlbgogICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJQT1dFUlBDXCIgd2FzIG5ldmVyIGRlZmluZWQuCiBVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CkBAIC0xNTA5Nyw2ICsxOTA2OSwxMCBAQAogICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJBQVJDSDY0XCIgd2FzIG5ldmVyIGRlZmluZWQuCiBVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CiBmaQoraWYgdGVzdCAteiAiJHtBUkNfVFJVRX0iICYmIHRlc3QgLXogIiR7QVJDX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiQVJDXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQogaWYgdGVzdCAteiAiJHtBUk1fVFJVRX0iICYmIHRlc3QgLXogIiR7QVJNX0ZBTFNFfSI7IHRoZW4KICAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiQVJNXCIgd2FzIG5ldmVyIGRlZmluZWQuCiBVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CkBAIC0xNTE0NSw2ICsxOTEyMSwxMCBAQAogICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJUSUxFXCIgd2FzIG5ldmVyIGRlZmluZWQuCiBVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CiBmaQoraWYgdGVzdCAteiAiJHtWQVhfVFJVRX0iICYmIHRlc3QgLXogIiR7VkFYX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiVkFYXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CitmaQogaWYgdGVzdCAteiAiJHtYVEVOU0FfVFJVRX0iICYmIHRlc3QgLXogIiR7WFRFTlNBX0ZBTFNFfSI7IHRoZW4KICAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiWFRFTlNBXCIgd2FzIG5ldmVyIGRlZmluZWQuCiBVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1CkBAIC0xNTU1OSw3ICsxOTUzOSw3IEBACiAjIHJlcG9ydCBhY3R1YWwgaW5wdXQgdmFsdWVzIG9mIENPTkZJR19GSUxFUyBldGMuIGluc3RlYWQgb2YgdGhlaXIKICMgdmFsdWVzIGFmdGVyIG9wdGlvbnMgaGFuZGxpbmcuCiBhY19sb2c9IgotVGhpcyBmaWxlIHdhcyBleHRlbmRlZCBieSBsaWJmZmkgJGFzX21lIDMuMC4xMywgd2hpY2ggd2FzCitUaGlzIGZpbGUgd2FzIGV4dGVuZGVkIGJ5IGxpYmZmaSAkYXNfbWUgMy4xLCB3aGljaCB3YXMKIGdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42OS4gIEludm9jYXRpb24gY29tbWFuZCBsaW5lIHdhcwogCiAgIENPTkZJR19GSUxFUyAgICA9ICRDT05GSUdfRklMRVMKQEAgLTE1NjI5LDcgKzE5NjA5LDcgQEAKIGNhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQogYWNfY3NfY29uZmlnPSJgJGFzX2VjaG8gIiRhY19jb25maWd1cmVfYXJncyIgfCBzZWQgJ3MvXiAvLzsgcy9bXFwiIlxgXCRdL1xcXFwmL2cnYCIKIGFjX2NzX3ZlcnNpb249IlxcCi1saWJmZmkgY29uZmlnLnN0YXR1cyAzLjAuMTMKK2xpYmZmaSBjb25maWcuc3RhdHVzIDMuMQogY29uZmlndXJlZCBieSAkMCwgZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjY5LAogICB3aXRoIG9wdGlvbnMgXFwiXCRhY19jc19jb25maWdcXCIKIApAQCAtMTU4MjEsOCArMTk4MDEsMTAgQEAKIEdDQz0nYCRFQ0hPICIkR0NDIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwogbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2ltcG9ydD0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9faW1wb3J0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCiBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X2N2X25tX2ludGVyZmFjZT0nYCRFQ0hPICIkbHRfY3Zfbm1faW50ZXJmYWNlIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKIG5tX2ZpbGVfbGlzdF9zcGVjPSdgJEVDSE8gIiRubV9maWxlX2xpc3Rfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCiBsdF9zeXNyb290PSdgJEVDSE8gIiRsdF9zeXNyb290IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKIG9iamRpcj0nYCRFQ0hPICIkb2JqZGlyIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKQEAgLTE1ODk2LDYgKzE5ODc4LDYwIEBACiBlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljPSdgJEVDSE8gIiRlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKIG9sZF9zdHJpcGxpYj0nYCRFQ0hPICIkb2xkX3N0cmlwbGliIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKIHN0cmlwbGliPSdgJEVDSE8gIiRzdHJpcGxpYiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitjb21waWxlcl9saWJfc2VhcmNoX2RpcnM9J2AkRUNITyAiJGNvbXBpbGVyX2xpYl9zZWFyY2hfZGlycyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitwcmVkZXBfb2JqZWN0cz0nYCRFQ0hPICIkcHJlZGVwX29iamVjdHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworcG9zdGRlcF9vYmplY3RzPSdgJEVDSE8gIiRwb3N0ZGVwX29iamVjdHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworcHJlZGVwcz0nYCRFQ0hPICIkcHJlZGVwcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitwb3N0ZGVwcz0nYCRFQ0hPICIkcG9zdGRlcHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoPSdgJEVDSE8gIiRjb21waWxlcl9saWJfc2VhcmNoX3BhdGgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworTERfQ1hYPSdgJEVDSE8gIiRMRF9DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworcmVsb2FkX2ZsYWdfQ1hYPSdgJEVDSE8gIiRyZWxvYWRfZmxhZ19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworcmVsb2FkX2NtZHNfQ1hYPSdgJEVDSE8gIiRyZWxvYWRfY21kc19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworb2xkX2FyY2hpdmVfY21kc19DWFg9J2AkRUNITyAiJG9sZF9hcmNoaXZlX2NtZHNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2NvbXBpbGVyX0NYWD0nYCRFQ0hPICIkY29tcGlsZXJfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0dDQ19DWFg9J2AkRUNITyAiJEdDQ19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWdfQ1hYPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZ19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfcHJvZ19jb21waWxlcl93bF9DWFg9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWD0nYCRFQ0hPICIkbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2FyY2hpdmVfY21kc19uZWVkX2xjX0NYWD0nYCRFQ0hPICIkYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2VuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfQ1hYPSdgJEVDSE8gIiRlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYPSdgJEVDSE8gIiRleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3dob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0nYCRFQ0hPICIkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2NvbXBpbGVyX25lZWRzX29iamVjdF9DWFg9J2AkRUNITyAiJGNvbXBpbGVyX25lZWRzX29iamVjdF9DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kc19DWFg9J2AkRUNITyAiJG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK29sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzX0NYWD0nYCRFQ0hPICIkb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2FyY2hpdmVfY21kc19DWFg9J2AkRUNITyAiJGFyY2hpdmVfY21kc19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9J2AkRUNITyAiJGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK21vZHVsZV9jbWRzX0NYWD0nYCRFQ0hPICIkbW9kdWxlX2NtZHNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK21vZHVsZV9leHBzeW1fY21kc19DWFg9J2AkRUNITyAiJG1vZHVsZV9leHBzeW1fY21kc19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJword2l0aF9nbnVfbGRfQ1hYPSdgJEVDSE8gIiR3aXRoX2dudV9sZF9DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPSdgJEVDSE8gIiRhbGxvd191bmRlZmluZWRfZmxhZ19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbm9fdW5kZWZpbmVkX2ZsYWdfQ1hYPSdgJEVDSE8gIiRub191bmRlZmluZWRfZmxhZ19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9J2AkRUNITyAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYPSdgJEVDSE8gIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitoYXJkY29kZV9kaXJlY3RfQ1hYPSdgJEVDSE8gIiRoYXJkY29kZV9kaXJlY3RfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZV9DWFg9J2AkRUNITyAiJGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZV9DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaGFyZGNvZGVfbWludXNfTF9DWFg9J2AkRUNITyAiJGhhcmRjb2RlX21pbnVzX0xfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hhcmRjb2RlX3NobGlicGF0aF92YXJfQ1hYPSdgJEVDSE8gIiRoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitoYXJkY29kZV9hdXRvbWF0aWNfQ1hYPSdgJEVDSE8gIiRoYXJkY29kZV9hdXRvbWF0aWNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2luaGVyaXRfcnBhdGhfQ1hYPSdgJEVDSE8gIiRpbmhlcml0X3JwYXRoX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsaW5rX2FsbF9kZXBsaWJzX0NYWD0nYCRFQ0hPICIkbGlua19hbGxfZGVwbGlic19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworYWx3YXlzX2V4cG9ydF9zeW1ib2xzX0NYWD0nYCRFQ0hPICIkYWx3YXlzX2V4cG9ydF9zeW1ib2xzX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitleHBvcnRfc3ltYm9sc19jbWRzX0NYWD0nYCRFQ0hPICIkZXhwb3J0X3N5bWJvbHNfY21kc19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZXhjbHVkZV9leHBzeW1zX0NYWD0nYCRFQ0hPICIkZXhjbHVkZV9leHBzeW1zX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitpbmNsdWRlX2V4cHN5bXNfQ1hYPSdgJEVDSE8gIiRpbmNsdWRlX2V4cHN5bXNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3ByZWxpbmtfY21kc19DWFg9J2AkRUNITyAiJHByZWxpbmtfY21kc19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworcG9zdGxpbmtfY21kc19DWFg9J2AkRUNITyAiJHBvc3RsaW5rX2NtZHNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2ZpbGVfbGlzdF9zcGVjX0NYWD0nYCRFQ0hPICIkZmlsZV9saXN0X3NwZWNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hhcmRjb2RlX2FjdGlvbl9DWFg9J2AkRUNITyAiJGhhcmRjb2RlX2FjdGlvbl9DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzX0NYWD0nYCRFQ0hPICIkY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitwcmVkZXBfb2JqZWN0c19DWFg9J2AkRUNITyAiJHByZWRlcF9vYmplY3RzX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitwb3N0ZGVwX29iamVjdHNfQ1hYPSdgJEVDSE8gIiRwb3N0ZGVwX29iamVjdHNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3ByZWRlcHNfQ1hYPSdgJEVDSE8gIiRwcmVkZXBzX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitwb3N0ZGVwc19DWFg9J2AkRUNITyAiJHBvc3RkZXBzX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitjb21waWxlcl9saWJfc2VhcmNoX3BhdGhfQ1hYPSdgJEVDSE8gIiRjb21waWxlcl9saWJfc2VhcmNoX3BhdGhfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKIAogTFRDQz0nJExUQ0MnCiBMVENGTEFHUz0nJExUQ0ZMQUdTJwpAQCAtMTU5NDAsOCArMTk5NzYsMTAgQEAKIGNvbXBpbGVyIFwKIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUgXAogbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wgXAorbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9faW1wb3J0IFwKIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzIFwKIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXggXAorbHRfY3Zfbm1faW50ZXJmYWNlIFwKIG5tX2ZpbGVfbGlzdF9zcGVjIFwKIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnIFwKIGx0X3Byb2dfY29tcGlsZXJfcGljIFwKQEAgLTE1OTc0LDEwICsyMDAxMiw0MSBAQAogaW5zdGFsbF9vdmVycmlkZV9tb2RlIFwKIGZpbmlzaF9ldmFsIFwKIG9sZF9zdHJpcGxpYiBcCi1zdHJpcGxpYjsgZG8KK3N0cmlwbGliIFwKK2NvbXBpbGVyX2xpYl9zZWFyY2hfZGlycyBcCitwcmVkZXBfb2JqZWN0cyBcCitwb3N0ZGVwX29iamVjdHMgXAorcHJlZGVwcyBcCitwb3N0ZGVwcyBcCitjb21waWxlcl9saWJfc2VhcmNoX3BhdGggXAorTERfQ1hYIFwKK3JlbG9hZF9mbGFnX0NYWCBcCitjb21waWxlcl9DWFggXAorbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWdfQ1hYIFwKK2x0X3Byb2dfY29tcGlsZXJfcGljX0NYWCBcCitsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWCBcCitsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFggXAorbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fQ1hYIFwKK2V4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFggXAord2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYIFwKK2NvbXBpbGVyX25lZWRzX29iamVjdF9DWFggXAord2l0aF9nbnVfbGRfQ1hYIFwKK2FsbG93X3VuZGVmaW5lZF9mbGFnX0NYWCBcCitub191bmRlZmluZWRfZmxhZ19DWFggXAoraGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFggXAoraGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFggXAorZXhjbHVkZV9leHBzeW1zX0NYWCBcCitpbmNsdWRlX2V4cHN5bXNfQ1hYIFwKK2ZpbGVfbGlzdF9zcGVjX0NYWCBcCitjb21waWxlcl9saWJfc2VhcmNoX2RpcnNfQ1hYIFwKK3ByZWRlcF9vYmplY3RzX0NYWCBcCitwb3N0ZGVwX29iamVjdHNfQ1hYIFwKK3ByZWRlcHNfQ1hYIFwKK3Bvc3RkZXBzX0NYWCBcCitjb21waWxlcl9saWJfc2VhcmNoX3BhdGhfQ1hYOyBkbwogICAgIGNhc2UgXGBldmFsIFxcXFxcJEVDSE8gXFxcXCIiXFxcXFwkXCR2YXIiXFxcXCJcYCBpbgogICAgICpbXFxcXFxcXGBcXCJcXFwkXSopCi0gICAgICBldmFsICJsdF9cJHZhcj1cXFxcXFwiXFxcYFxcXCRFQ0hPIFxcIlxcXCRcJHZhclxcIiB8IFxcXCRTRUQgXFwiXFxcJHNlZF9xdW90ZV9zdWJzdFxcIlxcXGBcXFxcXFwiIgorICAgICAgZXZhbCAibHRfXCR2YXI9XFxcXFxcIlxcXGBcXFwkRUNITyBcXCJcXFwkXCR2YXJcXCIgfCBcXFwkU0VEIFxcIlxcXCRzZWRfcXVvdGVfc3Vic3RcXCJcXFxgXFxcXFxcIiIgIyMgZXhjbHVkZSBmcm9tIHNjX3Byb2hpYml0X25lc3RlZF9xdW90ZXMKICAgICAgIDs7CiAgICAgKikKICAgICAgIGV2YWwgImx0X1wkdmFyPVxcXFxcXCJcXFwkXCR2YXJcXFxcXFwiIgpAQCAtMTYwMDQsMTAgKzIwMDczLDIxIEBACiBwb3N0dW5pbnN0YWxsX2NtZHMgXAogZmluaXNoX2NtZHMgXAogc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIFwKLXN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjOyBkbworc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMgXAorcmVsb2FkX2NtZHNfQ1hYIFwKK29sZF9hcmNoaXZlX2NtZHNfQ1hYIFwKK29sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHNfQ1hYIFwKK29sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzX0NYWCBcCithcmNoaXZlX2NtZHNfQ1hYIFwKK2FyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYIFwKK21vZHVsZV9jbWRzX0NYWCBcCittb2R1bGVfZXhwc3ltX2NtZHNfQ1hYIFwKK2V4cG9ydF9zeW1ib2xzX2NtZHNfQ1hYIFwKK3ByZWxpbmtfY21kc19DWFggXAorcG9zdGxpbmtfY21kc19DWFg7IGRvCiAgICAgY2FzZSBcYGV2YWwgXFxcXFwkRUNITyBcXFxcIiJcXFxcXCRcJHZhciJcXFxcIlxgIGluCiAgICAgKltcXFxcXFxcYFxcIlxcXCRdKikKLSAgICAgIGV2YWwgImx0X1wkdmFyPVxcXFxcXCJcXFxgXFxcJEVDSE8gXFwiXFxcJFwkdmFyXFwiIHwgXFxcJFNFRCAtZSBcXCJcXFwkZG91YmxlX3F1b3RlX3N1YnN0XFwiIC1lIFxcIlxcXCRzZWRfcXVvdGVfc3Vic3RcXCIgLWUgXFwiXFxcJGRlbGF5X3ZhcmlhYmxlX3N1YnN0XFwiXFxcYFxcXFxcXCIiCisgICAgICBldmFsICJsdF9cJHZhcj1cXFxcXFwiXFxcYFxcXCRFQ0hPIFxcIlxcXCRcJHZhclxcIiB8IFxcXCRTRUQgLWUgXFwiXFxcJGRvdWJsZV9xdW90ZV9zdWJzdFxcIiAtZSBcXCJcXFwkc2VkX3F1b3RlX3N1YnN0XFwiIC1lIFxcIlxcXCRkZWxheV92YXJpYWJsZV9zdWJzdFxcIlxcXGBcXFxcXFwiIiAjIyBleGNsdWRlIGZyb20gc2NfcHJvaGliaXRfbmVzdGVkX3F1b3RlcwogICAgICAgOzsKICAgICAqKQogICAgICAgZXZhbCAibHRfXCR2YXI9XFxcXFxcIlxcXCRcJHZhclxcXFxcXCIiCkBAIC0xNjAxNiwyNCArMjAwOTYsMjMgQEAKIGRvbmUKIAogYWNfYXV4X2Rpcj0nJGFjX2F1eF9kaXInCi14c2lfc2hlbGw9JyR4c2lfc2hlbGwnCi1sdF9zaGVsbF9hcHBlbmQ9JyRsdF9zaGVsbF9hcHBlbmQnCiAKLSMgU2VlIGlmIHdlIGFyZSBydW5uaW5nIG9uIHpzaCwgYW5kIHNldCB0aGUgb3B0aW9ucyB3aGljaCBhbGxvdyBvdXIKKyMgU2VlIGlmIHdlIGFyZSBydW5uaW5nIG9uIHpzaCwgYW5kIHNldCB0aGUgb3B0aW9ucyB0aGF0IGFsbG93IG91cgogIyBjb21tYW5kcyB0aHJvdWdoIHdpdGhvdXQgcmVtb3ZhbCBvZiBcIGVzY2FwZXMgSU5JVC4KLWlmIHRlc3QgLW4gIlwke1pTSF9WRVJTSU9OK3NldH0iIDsgdGhlbgoraWYgdGVzdCAtbiAiXCR7WlNIX1ZFUlNJT04rc2V0fSI7IHRoZW4KICAgIHNldG9wdCBOT19HTE9CX1NVQlNUCiBmaQogCiAKICAgICBQQUNLQUdFPSckUEFDS0FHRScKICAgICBWRVJTSU9OPSckVkVSU0lPTicKLSAgICBUSU1FU1RBTVA9JyRUSU1FU1RBTVAnCiAgICAgUk09JyRSTScKICAgICBvZmlsZT0nJG9maWxlJwogCiAKIAorCisKIFRBUkdFVERJUj0iJFRBUkdFVERJUiIKIAogX0FDRU9GCkBAIC0xNjgzMSw3ICsyMDkxMCw3IEBACiAgIGZpCiAgOzsKICAgICAiZGVwZmlsZXMiOkMpIHRlc3QgeCIkQU1ERVBfVFJVRSIgIT0geCIiIHx8IHsKLSAgIyBBdXRvY29uZiAyLjYyIHF1b3RlcyAtLWZpbGUgYXJndW1lbnRzIGZvciBldmFsLCBidXQgbm90IHdoZW4gZmlsZXMKKyAgIyBPbGRlciBBdXRvY29uZiBxdW90ZXMgLS1maWxlIGFyZ3VtZW50cyBmb3IgZXZhbCwgYnV0IG5vdCB3aGVuIGZpbGVzCiAgICMgYXJlIGxpc3RlZCB3aXRob3V0IC0tZmlsZS4gIExldCdzIHBsYXkgc2FmZSBhbmQgb25seSBlbmFibGUgdGhlIGV2YWwKICAgIyBpZiB3ZSBkZXRlY3QgdGhlIHF1b3RpbmcuCiAgIGNhc2UgJENPTkZJR19GSUxFUyBpbgpAQCAtMTY4ODIsNyArMjA5NjEsNyBAQAogICAgIERFUERJUj1gc2VkIC1uICdzL15ERVBESVIgPSAvL3AnIDwgIiRtZiJgCiAgICAgdGVzdCAteiAiJERFUERJUiIgJiYgY29udGludWUKICAgICBhbV9faW5jbHVkZT1gc2VkIC1uICdzL15hbV9faW5jbHVkZSA9IC8vcCcgPCAiJG1mImAKLSAgICB0ZXN0IC16ICJhbV9faW5jbHVkZSIgJiYgY29udGludWUKKyAgICB0ZXN0IC16ICIkYW1fX2luY2x1ZGUiICYmIGNvbnRpbnVlCiAgICAgYW1fX3F1b3RlPWBzZWQgLW4gJ3MvXmFtX19xdW90ZSA9IC8vcCcgPCAiJG1mImAKICAgICAjIEZpbmQgYWxsIGRlcGVuZGVuY3kgb3V0cHV0IGZpbGVzLCB0aGV5IGFyZSBpbmNsdWRlZCBmaWxlcyB3aXRoCiAgICAgIyAkKERFUERJUikgaW4gdGhlaXIgbmFtZXMuICBXZSBpbnZva2Ugc2VkIHR3aWNlIGJlY2F1c2UgaXQgaXMgdGhlCkBAIC0xNjkyNSwxMyArMjEwMDQsMTMgQEAKICA7OwogICAgICJsaWJ0b29sIjpDKQogCi0gICAgIyBTZWUgaWYgd2UgYXJlIHJ1bm5pbmcgb24genNoLCBhbmQgc2V0IHRoZSBvcHRpb25zIHdoaWNoIGFsbG93IG91cgorICAgICMgU2VlIGlmIHdlIGFyZSBydW5uaW5nIG9uIHpzaCwgYW5kIHNldCB0aGUgb3B0aW9ucyB0aGF0IGFsbG93IG91cgogICAgICMgY29tbWFuZHMgdGhyb3VnaCB3aXRob3V0IHJlbW92YWwgb2YgXCBlc2NhcGVzLgotICAgIGlmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgOyB0aGVuCisgICAgaWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IjsgdGhlbgogICAgICAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKICAgICBmaQogCi0gICAgY2ZnZmlsZT0iJHtvZmlsZX1UIgorICAgIGNmZ2ZpbGU9JHtvZmlsZX1UCiAgICAgdHJhcCAiJFJNIFwiJGNmZ2ZpbGVcIjsgZXhpdCAxIiAxIDIgMTUKICAgICAkUk0gIiRjZmdmaWxlIgogCkBAIC0xNjkzOSw3ICsyMTAxOCw3IEBACiAjISAkU0hFTEwKIAogIyBgJEVDSE8gIiRvZmlsZSIgfCBzZWQgJ3MlXi4qLyUlJ2AgLSBQcm92aWRlIGdlbmVyYWxpemVkIGxpYnJhcnktYnVpbGRpbmcgc3VwcG9ydCBzZXJ2aWNlcy4KLSMgR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgJGFzX21lICgkUEFDS0FHRSRUSU1FU1RBTVApICRWRVJTSU9OCisjIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5ICRhc19tZSAoJFBBQ0tBR0UpICRWRVJTSU9OCiAjIExpYnRvb2wgd2FzIGNvbmZpZ3VyZWQgb24gaG9zdCBgKGhvc3RuYW1lIHx8IHVuYW1lIC1uKSAyPi9kZXYvbnVsbCB8IHNlZCAxcWA6CiAjIE5PVEU6IENoYW5nZXMgbWFkZSB0byB0aGlzIGZpbGUgd2lsbCBiZSBsb3N0OiBsb29rIGF0IGx0bWFpbi5zaC4KICMKQEAgLTE2OTczLDcgKzIxMDUyLDcgQEAKIAogCiAjIFRoZSBuYW1lcyBvZiB0aGUgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHN1cHBvcnRlZCBieSB0aGlzIHNjcmlwdC4KLWF2YWlsYWJsZV90YWdzPSIiCithdmFpbGFibGVfdGFncz0nQ1hYICcKIAogIyAjIyMgQkVHSU4gTElCVE9PTCBDT05GSUcKIApAQCAtMTcxMTAsMTYgKzIxMTg5LDIyIEBACiAjIFRyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgcHJvcGVyIEMgZGVjbGFyYXRpb24uCiBnbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbAogCisjIFRyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGludG8gYSBsaXN0IG9mIHN5bWJvbHMgdG8gbWFudWFsbHkgcmVsb2NhdGUuCitnbG9iYWxfc3ltYm9sX3RvX2ltcG9ydD0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9faW1wb3J0CisKICMgVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBDIG5hbWUgYWRkcmVzcyBwYWlyLgogZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MKIAogIyBUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIEMgbmFtZSBhZGRyZXNzIHBhaXIgd2hlbiBsaWIgcHJlZml4IGlzIG5lZWRlZC4KIGdsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeAogCisjIFRoZSBuYW1lIGxpc3RlciBpbnRlcmZhY2UuCitubV9pbnRlcmZhY2U9JGx0X2x0X2N2X25tX2ludGVyZmFjZQorCiAjIFNwZWNpZnkgZmlsZW5hbWUgY29udGFpbmluZyBpbnB1dCBmaWxlcyBmb3IgXCROTS4KIG5tX2ZpbGVfbGlzdF9zcGVjPSRsdF9ubV9maWxlX2xpc3Rfc3BlYwogCi0jIFRoZSByb290IHdoZXJlIHRvIHNlYXJjaCBmb3IgZGVwZW5kZW50IGxpYnJhcmllcyxhbmQgaW4gd2hpY2ggb3VyIGxpYnJhcmllcyBzaG91bGQgYmUgaW5zdGFsbGVkLgorIyBUaGUgcm9vdCB3aGVyZSB0byBzZWFyY2ggZm9yIGRlcGVuZGVudCBsaWJyYXJpZXMsYW5kIHdoZXJlIG91ciBsaWJyYXJpZXMgc2hvdWxkIGJlIGluc3RhbGxlZC4KIGx0X3N5c3Jvb3Q9JGx0X3N5c3Jvb3QKIAogIyBUaGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgdGVtcG9yYXJ5IGxpYnRvb2wgZmlsZXMuCkBAIC0xNzMwNiwxMyArMjEzOTEsMTMgQEAKICMgV2hldGhlciB3ZSBuZWVkIGEgc2luZ2xlICItcnBhdGgiIGZsYWcgd2l0aCBhIHNlcGFyYXRlZCBhcmd1bWVudC4KIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9JGx0X2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IKIAotIyBTZXQgdG8gInllcyIgaWYgdXNpbmcgRElSL2xpYk5BTUVcJHtzaGFyZWRfZXh0fSBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMKKyMgU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIERJUi9saWJOQU1FXCRzaGFyZWRfZXh0IGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcwogIyBESVIgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeS4KIGhhcmRjb2RlX2RpcmVjdD0kaGFyZGNvZGVfZGlyZWN0CiAKLSMgU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIERJUi9saWJOQU1FXCR7c2hhcmVkX2V4dH0gZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzCisjIFNldCB0byAieWVzIiBpZiB1c2luZyBESVIvbGliTkFNRVwkc2hhcmVkX2V4dCBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMKICMgRElSIGludG8gdGhlIHJlc3VsdGluZyBiaW5hcnkgYW5kIHRoZSByZXN1bHRpbmcgbGlicmFyeSBkZXBlbmRlbmN5IGlzCi0jICJhYnNvbHV0ZSIsaS5lIGltcG9zc2libGUgdG8gY2hhbmdlIGJ5IHNldHRpbmcgXCR7c2hsaWJwYXRoX3Zhcn0gaWYgdGhlCisjICJhYnNvbHV0ZSIsaS5lIGltcG9zc2libGUgdG8gY2hhbmdlIGJ5IHNldHRpbmcgXCRzaGxpYnBhdGhfdmFyIGlmIHRoZQogIyBsaWJyYXJ5IGlzIHJlbG9jYXRlZC4KIGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZT0kaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlCiAKQEAgLTE3MzYwLDYgKzIxNDQ1LDIwIEBACiAjIEhvdyB0byBoYXJkY29kZSBhIHNoYXJlZCBsaWJyYXJ5IHBhdGggaW50byBhbiBleGVjdXRhYmxlLgogaGFyZGNvZGVfYWN0aW9uPSRoYXJkY29kZV9hY3Rpb24KIAorIyBUaGUgZGlyZWN0b3JpZXMgc2VhcmNoZWQgYnkgdGhpcyBjb21waWxlciB3aGVuIGNyZWF0aW5nIGEgc2hhcmVkIGxpYnJhcnkuCitjb21waWxlcl9saWJfc2VhcmNoX2RpcnM9JGx0X2NvbXBpbGVyX2xpYl9zZWFyY2hfZGlycworCisjIERlcGVuZGVuY2llcyB0byBwbGFjZSBiZWZvcmUgYW5kIGFmdGVyIHRoZSBvYmplY3RzIGJlaW5nIGxpbmtlZCB0bworIyBjcmVhdGUgYSBzaGFyZWQgbGlicmFyeS4KK3ByZWRlcF9vYmplY3RzPSRsdF9wcmVkZXBfb2JqZWN0cworcG9zdGRlcF9vYmplY3RzPSRsdF9wb3N0ZGVwX29iamVjdHMKK3ByZWRlcHM9JGx0X3ByZWRlcHMKK3Bvc3RkZXBzPSRsdF9wb3N0ZGVwcworCisjIFRoZSBsaWJyYXJ5IHNlYXJjaCBwYXRoIHVzZWQgaW50ZXJuYWxseSBieSB0aGUgY29tcGlsZXIgd2hlbiBsaW5raW5nCisjIGEgc2hhcmVkIGxpYnJhcnkuCitjb21waWxlcl9saWJfc2VhcmNoX3BhdGg9JGx0X2NvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aAorCiAjICMjIyBFTkQgTElCVE9PTCBDT05GSUcKIAogX0xUX0VPRgpAQCAtMTczNzAsNyArMjE0NjksNyBAQAogIyBBSVggc29tZXRpbWVzIGhhcyBwcm9ibGVtcyB3aXRoIHRoZSBHQ0MgY29sbGVjdDIgcHJvZ3JhbS4gIEZvciBzb21lCiAjIHJlYXNvbiwgaWYgd2Ugc2V0IHRoZSBDT0xMRUNUX05BTUVTIGVudmlyb25tZW50IHZhcmlhYmxlLCB0aGUgcHJvYmxlbXMKICMgdmFuaXNoIGluIGEgcHVmZiBvZiBzbW9rZS4KLWlmIHRlc3QgIlgke0NPTExFQ1RfTkFNRVMrc2V0fSIgIT0gWHNldDsgdGhlbgoraWYgdGVzdCBzZXQgIT0gIiR7Q09MTEVDVF9OQU1FUytzZXR9IjsgdGhlbgogICBDT0xMRUNUX05BTUVTPQogICBleHBvcnQgQ09MTEVDVF9OQU1FUwogZmkKQEAgLTE3Mzc5LDcgKzIxNDc4LDcgQEAKICAgZXNhYwogCiAKLWx0bWFpbj0iJGFjX2F1eF9kaXIvbHRtYWluLnNoIgorbHRtYWluPSRhY19hdXhfZGlyL2x0bWFpbi5zaAogCiAKICAgIyBXZSB1c2Ugc2VkIGluc3RlYWQgb2YgY2F0IGJlY2F1c2UgYmFzaCBvbiBESkdQUCBnZXRzIGNvbmZ1c2VkIGlmCkBAIC0xNzM4OSwxNjkgKzIxNDg4LDE2MyBAQAogICBzZWQgJyRxJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiBcCiAgICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiOyBleGl0IDEpCiAKLSAgaWYgdGVzdCB4IiR4c2lfc2hlbGwiID0geHllczsgdGhlbgotICBzZWQgLWUgJy9eZnVuY19kaXJuYW1lICgpJC8sL159ICMgZnVuY19kaXJuYW1lIC9jXAotZnVuY19kaXJuYW1lICgpXAote1wKLVwgICAgY2FzZSAkezF9IGluXAotXCAgICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7XAotXCAgICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOztcCi1cICAgIGVzYWNcCi19ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19kaXJuYW1lIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKLSAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCi0gICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKLXRlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06Ci0KLQotICBzZWQgLWUgJy9eZnVuY19iYXNlbmFtZSAoKSQvLC9efSAjIGZ1bmNfYmFzZW5hbWUgL2NcCi1mdW5jX2Jhc2VuYW1lICgpXAote1wKLVwgICAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99IlwKLX0gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2Jhc2VuYW1lIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKLSAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCi0gICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKLXRlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06Ci0KLQotICBzZWQgLWUgJy9eZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAoKSQvLC9efSAjIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgL2NcCi1mdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICgpXAote1wKLVwgICAgY2FzZSAkezF9IGluXAotXCAgICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7XAotXCAgICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOztcCi1cICAgIGVzYWNcCi1cICAgIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSJcCi19ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCi0gICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAotICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCi10ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgotCi0KLSAgc2VkIC1lICcvXmZ1bmNfc3RyaXBuYW1lICgpJC8sL159ICMgZnVuY19zdHJpcG5hbWUgL2NcCi1mdW5jX3N0cmlwbmFtZSAoKVwKLXtcCi1cICAgICMgcGRrc2ggNS4yLjE0IGRvZXMgbm90IGRvICR7WCUkWX0gY29ycmVjdGx5IGlmIGJvdGggWCBhbmQgWSBhcmVcCi1cICAgICMgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLCBzbyBhc3NpZ24gb25lIHRvIG9yZGluYXJ5IHBhcmFtZXRlciBmaXJzdC5cCi1cICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0kezN9XAotXCAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQjIiR7MX0ifVwKLVwgICAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0JSIkezJ9In1cCi19ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19zdHJpcG5hbWUgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAotICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKLSAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQotdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKLQotCi0gIHNlZCAtZSAnL15mdW5jX3NwbGl0X2xvbmdfb3B0ICgpJC8sL159ICMgZnVuY19zcGxpdF9sb25nX29wdCAvY1wKLWZ1bmNfc3BsaXRfbG9uZ19vcHQgKClcCi17XAotXCAgICBmdW5jX3NwbGl0X2xvbmdfb3B0X25hbWU9JHsxJSU9Kn1cCi1cICAgIGZ1bmNfc3BsaXRfbG9uZ19vcHRfYXJnPSR7MSMqPX1cCi19ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19zcGxpdF9sb25nX29wdCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCi0gICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAotICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCi10ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgotCi0KLSAgc2VkIC1lICcvXmZ1bmNfc3BsaXRfc2hvcnRfb3B0ICgpJC8sL159ICMgZnVuY19zcGxpdF9zaG9ydF9vcHQgL2NcCi1mdW5jX3NwbGl0X3Nob3J0X29wdCAoKVwKLXtcCi1cICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZz0kezEjPz99XAotXCAgICBmdW5jX3NwbGl0X3Nob3J0X29wdF9uYW1lPSR7MSUiJGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZyJ9XAotfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfc3BsaXRfc2hvcnRfb3B0IGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKLSAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCi0gICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKLXRlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06Ci0KLQotICBzZWQgLWUgJy9eZnVuY19sbzJvICgpJC8sL159ICMgZnVuY19sbzJvIC9jXAotZnVuY19sbzJvICgpXAote1wKLVwgICAgY2FzZSAkezF9IGluXAotXCAgICAgICoubG8pIGZ1bmNfbG8yb19yZXN1bHQ9JHsxJS5sb30uJHtvYmpleHR9IDs7XAotXCAgICAgICopICAgIGZ1bmNfbG8yb19yZXN1bHQ9JHsxfSA7O1wKLVwgICAgZXNhY1wKLX0gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2xvMm8gaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAotICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKLSAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQotdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKLQotCi0gIHNlZCAtZSAnL15mdW5jX3hmb3JtICgpJC8sL159ICMgZnVuY194Zm9ybSAvY1wKLWZ1bmNfeGZvcm0gKClcCi17XAotICAgIGZ1bmNfeGZvcm1fcmVzdWx0PSR7MSUuKn0ubG9cCi19ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY194Zm9ybSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCi0gICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAotICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCi10ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgotCi0KLSAgc2VkIC1lICcvXmZ1bmNfYXJpdGggKCkkLywvXn0gIyBmdW5jX2FyaXRoIC9jXAotZnVuY19hcml0aCAoKVwKLXtcCi0gICAgZnVuY19hcml0aF9yZXN1bHQ9JCgoICQqICkpXAotfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfYXJpdGggaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAotICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKLSAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQotdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKLQotCi0gIHNlZCAtZSAnL15mdW5jX2xlbiAoKSQvLC9efSAjIGZ1bmNfbGVuIC9jXAotZnVuY19sZW4gKClcCi17XAotICAgIGZ1bmNfbGVuX3Jlc3VsdD0keyMxfVwKLX0gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2xlbiBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCi0gICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAotICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCi10ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgotCi1maQotCi1pZiB0ZXN0IHgiJGx0X3NoZWxsX2FwcGVuZCIgPSB4eWVzOyB0aGVuCi0gIHNlZCAtZSAnL15mdW5jX2FwcGVuZCAoKSQvLC9efSAjIGZ1bmNfYXBwZW5kIC9jXAotZnVuY19hcHBlbmQgKClcCi17XAotICAgIGV2YWwgIiR7MX0rPVxcJHsyfSJcCi19ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19hcHBlbmQgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAotICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKLSAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQotdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKLQotCi0gIHNlZCAtZSAnL15mdW5jX2FwcGVuZF9xdW90ZWQgKCkkLywvXn0gIyBmdW5jX2FwcGVuZF9xdW90ZWQgL2NcCi1mdW5jX2FwcGVuZF9xdW90ZWQgKClcCi17XAotXCAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkezJ9IlwKLVwgICAgZXZhbCAiJHsxfSs9XFxcXCBcXCRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCJcCi19ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19hcHBlbmRfcXVvdGVkIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKLSAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCi0gICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKLXRlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06Ci0KLQotICAjIFNhdmUgYSBgZnVuY19hcHBlbmQnIGZ1bmN0aW9uIGNhbGwgd2hlcmUgcG9zc2libGUgYnkgZGlyZWN0IHVzZSBvZiAnKz0nCi0gIHNlZCAtZSAncyVmdW5jX2FwcGVuZCBcKFthLXpBLVpfXVx7MSxcfVwpICIlXDErPSIlZycgJGNmZ2ZpbGUgPiAkY2ZnZmlsZS50bXAgXAotICAgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAotICAgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKLSAgdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKLWVsc2UKLSAgIyBTYXZlIGEgYGZ1bmNfYXBwZW5kJyBmdW5jdGlvbiBjYWxsIGV2ZW4gd2hlbiAnKz0nIGlzIG5vdCBhdmFpbGFibGUKLSAgc2VkIC1lICdzJWZ1bmNfYXBwZW5kIFwoW2EtekEtWl9dXHsxLFx9XCkgIiVcMT0iJFwxJWcnICRjZmdmaWxlID4gJGNmZ2ZpbGUudG1wIFwKLSAgICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKLSAgICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCi0gIHRlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06Ci1maQotCi1pZiB0ZXN0IHgiJF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWwiID0geCI6IjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IFVuYWJsZSB0byBzdWJzdGl0dXRlIGV4dGVuZGVkIHNoZWxsIGZ1bmN0aW9ucyBpbiAkb2ZpbGUiID4mNQotJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogVW5hYmxlIHRvIHN1YnN0aXR1dGUgZXh0ZW5kZWQgc2hlbGwgZnVuY3Rpb25zIGluICRvZmlsZSIgPiYyO30KLWZpCi0KLQogICAgbXYgLWYgIiRjZmdmaWxlIiAiJG9maWxlIiB8fAogICAgIChybSAtZiAiJG9maWxlIiAmJiBjcCAiJGNmZ2ZpbGUiICIkb2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZSIpCiAgIGNobW9kICt4ICIkb2ZpbGUiCiAKKworICAgIGNhdCA8PF9MVF9FT0YgPj4gIiRvZmlsZSIKKworIyAjIyMgQkVHSU4gTElCVE9PTCBUQUcgQ09ORklHOiBDWFgKKworIyBUaGUgbGlua2VyIHVzZWQgdG8gYnVpbGQgbGlicmFyaWVzLgorTEQ9JGx0X0xEX0NYWAorCisjIEhvdyB0byBjcmVhdGUgcmVsb2FkYWJsZSBvYmplY3QgZmlsZXMuCityZWxvYWRfZmxhZz0kbHRfcmVsb2FkX2ZsYWdfQ1hYCityZWxvYWRfY21kcz0kbHRfcmVsb2FkX2NtZHNfQ1hYCisKKyMgQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhbiBvbGQtc3R5bGUgYXJjaGl2ZS4KK29sZF9hcmNoaXZlX2NtZHM9JGx0X29sZF9hcmNoaXZlX2NtZHNfQ1hYCisKKyMgQSBsYW5ndWFnZSBzcGVjaWZpYyBjb21waWxlci4KK0NDPSRsdF9jb21waWxlcl9DWFgKKworIyBJcyB0aGUgY29tcGlsZXIgdGhlIEdOVSBjb21waWxlcj8KK3dpdGhfZ2NjPSRHQ0NfQ1hYCisKKyMgQ29tcGlsZXIgZmxhZyB0byB0dXJuIG9mZiBidWlsdGluIGZ1bmN0aW9ucy4KK25vX2J1aWx0aW5fZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWdfQ1hYCisKKyMgQWRkaXRpb25hbCBjb21waWxlciBmbGFncyBmb3IgYnVpbGRpbmcgbGlicmFyeSBvYmplY3RzLgorcGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfcGljX0NYWAorCisjIEhvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3VnaCB0aGUgY29tcGlsZXIuCit3bD0kbHRfbHRfcHJvZ19jb21waWxlcl93bF9DWFgKKworIyBDb21waWxlciBmbGFnIHRvIHByZXZlbnQgZHluYW1pYyBsaW5raW5nLgorbGlua19zdGF0aWNfZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYCisKKyMgRG9lcyBjb21waWxlciBzaW11bHRhbmVvdXNseSBzdXBwb3J0IC1jIGFuZCAtbyBvcHRpb25zPworY29tcGlsZXJfY19vPSRsdF9sdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19DWFgKKworIyBXaGV0aGVyIG9yIG5vdCB0byBhZGQgLWxjIGZvciBidWlsZGluZyBzaGFyZWQgbGlicmFyaWVzLgorYnVpbGRfbGlidG9vbF9uZWVkX2xjPSRhcmNoaXZlX2NtZHNfbmVlZF9sY19DWFgKKworIyBXaGV0aGVyIG9yIG5vdCB0byBkaXNhbGxvdyBzaGFyZWQgbGlicyB3aGVuIHJ1bnRpbWUgbGlicyBhcmUgc3RhdGljLgorYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzPSRlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzX0NYWAorCisjIENvbXBpbGVyIGZsYWcgdG8gYWxsb3cgcmVmbGV4aXZlIGRsb3BlbnMuCitleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JGx0X2V4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFgKKworIyBDb21waWxlciBmbGFnIHRvIGdlbmVyYXRlIHNoYXJlZCBvYmplY3RzIGRpcmVjdGx5IGZyb20gYXJjaGl2ZXMuCit3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0kbHRfd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYCisKKyMgV2hldGhlciB0aGUgY29tcGlsZXIgY29wZXMgd2l0aCBwYXNzaW5nIG5vIG9iamVjdHMgZGlyZWN0bHkuCitjb21waWxlcl9uZWVkc19vYmplY3Q9JGx0X2NvbXBpbGVyX25lZWRzX29iamVjdF9DWFgKKworIyBDcmVhdGUgYW4gb2xkLXN0eWxlIGFyY2hpdmUgZnJvbSBhIHNoYXJlZCBhcmNoaXZlLgorb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcz0kbHRfb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kc19DWFgKKworIyBDcmVhdGUgYSB0ZW1wb3Jhcnkgb2xkLXN0eWxlIGFyY2hpdmUgdG8gbGluayBpbnN0ZWFkIG9mIGEgc2hhcmVkIGFyY2hpdmUuCitvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcz0kbHRfb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHNfQ1hYCisKKyMgQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhIHNoYXJlZCBhcmNoaXZlLgorYXJjaGl2ZV9jbWRzPSRsdF9hcmNoaXZlX2NtZHNfQ1hYCithcmNoaXZlX2V4cHN5bV9jbWRzPSRsdF9hcmNoaXZlX2V4cHN5bV9jbWRzX0NYWAorCisjIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYSBsb2FkYWJsZSBtb2R1bGUgaWYgZGlmZmVyZW50IGZyb20gYnVpbGRpbmcKKyMgYSBzaGFyZWQgYXJjaGl2ZS4KK21vZHVsZV9jbWRzPSRsdF9tb2R1bGVfY21kc19DWFgKK21vZHVsZV9leHBzeW1fY21kcz0kbHRfbW9kdWxlX2V4cHN5bV9jbWRzX0NYWAorCisjIFdoZXRoZXIgd2UgYXJlIGJ1aWxkaW5nIHdpdGggR05VIGxkIG9yIG5vdC4KK3dpdGhfZ251X2xkPSRsdF93aXRoX2dudV9sZF9DWFgKKworIyBGbGFnIHRoYXQgYWxsb3dzIHNoYXJlZCBsaWJyYXJpZXMgd2l0aCB1bmRlZmluZWQgc3ltYm9scyB0byBiZSBidWlsdC4KK2FsbG93X3VuZGVmaW5lZF9mbGFnPSRsdF9hbGxvd191bmRlZmluZWRfZmxhZ19DWFgKKworIyBGbGFnIHRoYXQgZW5mb3JjZXMgbm8gdW5kZWZpbmVkIHN5bWJvbHMuCitub191bmRlZmluZWRfZmxhZz0kbHRfbm9fdW5kZWZpbmVkX2ZsYWdfQ1hYCisKKyMgRmxhZyB0byBoYXJkY29kZSBcJGxpYmRpciBpbnRvIGEgYmluYXJ5IGR1cmluZyBsaW5raW5nLgorIyBUaGlzIG11c3Qgd29yayBldmVuIGlmIFwkbGliZGlyIGRvZXMgbm90IGV4aXN0CitoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSRsdF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWAorCisjIFdoZXRoZXIgd2UgbmVlZCBhIHNpbmdsZSAiLXJwYXRoIiBmbGFnIHdpdGggYSBzZXBhcmF0ZWQgYXJndW1lbnQuCitoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPSRsdF9oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWAorCisjIFNldCB0byAieWVzIiBpZiB1c2luZyBESVIvbGliTkFNRVwkc2hhcmVkX2V4dCBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMKKyMgRElSIGludG8gdGhlIHJlc3VsdGluZyBiaW5hcnkuCitoYXJkY29kZV9kaXJlY3Q9JGhhcmRjb2RlX2RpcmVjdF9DWFgKKworIyBTZXQgdG8gInllcyIgaWYgdXNpbmcgRElSL2xpYk5BTUVcJHNoYXJlZF9leHQgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzCisjIERJUiBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5IGFuZCB0aGUgcmVzdWx0aW5nIGxpYnJhcnkgZGVwZW5kZW5jeSBpcworIyAiYWJzb2x1dGUiLGkuZSBpbXBvc3NpYmxlIHRvIGNoYW5nZSBieSBzZXR0aW5nIFwkc2hsaWJwYXRoX3ZhciBpZiB0aGUKKyMgbGlicmFyeSBpcyByZWxvY2F0ZWQuCitoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGU9JGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZV9DWFgKKworIyBTZXQgdG8gInllcyIgaWYgdXNpbmcgdGhlIC1MRElSIGZsYWcgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUgorIyBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5LgoraGFyZGNvZGVfbWludXNfTD0kaGFyZGNvZGVfbWludXNfTF9DWFgKKworIyBTZXQgdG8gInllcyIgaWYgdXNpbmcgU0hMSUJQQVRIX1ZBUj1ESVIgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUgorIyBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5LgoraGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj0kaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9DWFgKKworIyBTZXQgdG8gInllcyIgaWYgYnVpbGRpbmcgYSBzaGFyZWQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGhhcmRjb2RlcyBESVIKKyMgaW50byB0aGUgbGlicmFyeSBhbmQgYWxsIHN1YnNlcXVlbnQgbGlicmFyaWVzIGFuZCBleGVjdXRhYmxlcyBsaW5rZWQKKyMgYWdhaW5zdCBpdC4KK2hhcmRjb2RlX2F1dG9tYXRpYz0kaGFyZGNvZGVfYXV0b21hdGljX0NYWAorCisjIFNldCB0byB5ZXMgaWYgbGlua2VyIGFkZHMgcnVudGltZSBwYXRocyBvZiBkZXBlbmRlbnQgbGlicmFyaWVzCisjIHRvIHJ1bnRpbWUgcGF0aCBsaXN0LgoraW5oZXJpdF9ycGF0aD0kaW5oZXJpdF9ycGF0aF9DWFgKKworIyBXaGV0aGVyIGxpYnRvb2wgbXVzdCBsaW5rIGEgcHJvZ3JhbSBhZ2FpbnN0IGFsbCBpdHMgZGVwZW5kZW5jeSBsaWJyYXJpZXMuCitsaW5rX2FsbF9kZXBsaWJzPSRsaW5rX2FsbF9kZXBsaWJzX0NYWAorCisjIFNldCB0byAieWVzIiBpZiBleHBvcnRlZCBzeW1ib2xzIGFyZSByZXF1aXJlZC4KK2Fsd2F5c19leHBvcnRfc3ltYm9scz0kYWx3YXlzX2V4cG9ydF9zeW1ib2xzX0NYWAorCisjIFRoZSBjb21tYW5kcyB0byBsaXN0IGV4cG9ydGVkIHN5bWJvbHMuCitleHBvcnRfc3ltYm9sc19jbWRzPSRsdF9leHBvcnRfc3ltYm9sc19jbWRzX0NYWAorCisjIFN5bWJvbHMgdGhhdCBzaG91bGQgbm90IGJlIGxpc3RlZCBpbiB0aGUgcHJlbG9hZGVkIHN5bWJvbHMuCitleGNsdWRlX2V4cHN5bXM9JGx0X2V4Y2x1ZGVfZXhwc3ltc19DWFgKKworIyBTeW1ib2xzIHRoYXQgbXVzdCBhbHdheXMgYmUgZXhwb3J0ZWQuCitpbmNsdWRlX2V4cHN5bXM9JGx0X2luY2x1ZGVfZXhwc3ltc19DWFgKKworIyBDb21tYW5kcyBuZWNlc3NhcnkgZm9yIGxpbmtpbmcgcHJvZ3JhbXMgKGFnYWluc3QgbGlicmFyaWVzKSB3aXRoIHRlbXBsYXRlcy4KK3ByZWxpbmtfY21kcz0kbHRfcHJlbGlua19jbWRzX0NYWAorCisjIENvbW1hbmRzIG5lY2Vzc2FyeSBmb3IgZmluaXNoaW5nIGxpbmtpbmcgcHJvZ3JhbXMuCitwb3N0bGlua19jbWRzPSRsdF9wb3N0bGlua19jbWRzX0NYWAorCisjIFNwZWNpZnkgZmlsZW5hbWUgY29udGFpbmluZyBpbnB1dCBmaWxlcy4KK2ZpbGVfbGlzdF9zcGVjPSRsdF9maWxlX2xpc3Rfc3BlY19DWFgKKworIyBIb3cgdG8gaGFyZGNvZGUgYSBzaGFyZWQgbGlicmFyeSBwYXRoIGludG8gYW4gZXhlY3V0YWJsZS4KK2hhcmRjb2RlX2FjdGlvbj0kaGFyZGNvZGVfYWN0aW9uX0NYWAorCisjIFRoZSBkaXJlY3RvcmllcyBzZWFyY2hlZCBieSB0aGlzIGNvbXBpbGVyIHdoZW4gY3JlYXRpbmcgYSBzaGFyZWQgbGlicmFyeS4KK2NvbXBpbGVyX2xpYl9zZWFyY2hfZGlycz0kbHRfY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzX0NYWAorCisjIERlcGVuZGVuY2llcyB0byBwbGFjZSBiZWZvcmUgYW5kIGFmdGVyIHRoZSBvYmplY3RzIGJlaW5nIGxpbmtlZCB0bworIyBjcmVhdGUgYSBzaGFyZWQgbGlicmFyeS4KK3ByZWRlcF9vYmplY3RzPSRsdF9wcmVkZXBfb2JqZWN0c19DWFgKK3Bvc3RkZXBfb2JqZWN0cz0kbHRfcG9zdGRlcF9vYmplY3RzX0NYWAorcHJlZGVwcz0kbHRfcHJlZGVwc19DWFgKK3Bvc3RkZXBzPSRsdF9wb3N0ZGVwc19DWFgKKworIyBUaGUgbGlicmFyeSBzZWFyY2ggcGF0aCB1c2VkIGludGVybmFsbHkgYnkgdGhlIGNvbXBpbGVyIHdoZW4gbGlua2luZworIyBhIHNoYXJlZCBsaWJyYXJ5LgorY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoPSRsdF9jb21waWxlcl9saWJfc2VhcmNoX3BhdGhfQ1hYCisKKyMgIyMjIEVORCBMSUJUT09MIFRBRyBDT05GSUc6IENYWAorX0xUX0VPRgorCiAgOzsKICAgICAiaW5jbHVkZSI6QykgdGVzdCAtZCBpbmNsdWRlIHx8IG1rZGlyIGluY2x1ZGUgOzsKICAgICAic3JjIjpDKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9jb25maWd1cmUuYWMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2NvbmZpZ3VyZS5hYwppbmRleCA3ZmU1ZmY1Li41Yzg4ODVmIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2NvbmZpZ3VyZS5hYworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2NvbmZpZ3VyZS5hYwpAQCAtNSwxMyArNSwxNyBAQAogCiBBQ19QUkVSRVEoMi42OCkKIAotQUNfSU5JVChbbGliZmZpXSwgWzMuMC4xM10sIFtodHRwOi8vZ2l0aHViLmNvbS9hdGdyZWVuL2xpYmZmaS9pc3N1ZXNdKQorQUNfSU5JVChbbGliZmZpXSwgWzMuMV0sIFtodHRwOi8vZ2l0aHViLmNvbS9hdGdyZWVuL2xpYmZmaS9pc3N1ZXNdKQogQUNfQ09ORklHX0hFQURFUlMoW2ZmaWNvbmZpZy5oXSkKIAogQUNfQ0FOT05JQ0FMX1NZU1RFTQogdGFyZ2V0X2FsaWFzPSR7dGFyZ2V0X2FsaWFzLSRob3N0X2FsaWFzfQogCi0uICR7c3JjZGlyfS9jb25maWd1cmUuaG9zdAorY2FzZSAiJHtob3N0fSIgaW4KKyAgZnJ2Ki1lbGYpCisgICAgTERGTEFHUz1gZWNobyAkTERGTEFHUyB8IHNlZCAicy9cLUJbXiBdKmxpYmdsb3NzXC9mcnZcLy8vImBcIC1CYHB3ZGAvLi4vbGliZ2xvc3MvZnJ2LworICAgIDs7Citlc2FjCiAKIEFYX0VOQUJMRV9CVUlMRERJUgogCkBAIC0yOCw2ICszMiw3IEBACiBtNF9kZWZpbmUoW19BQ19BUkdfVkFSX1BSRUNJT1VTXSxbXSkKIHNhdmVfQ0ZMQUdTPSRDRkxBR1MKIEFDX1BST0dfQ0MKK0FDX1BST0dfQ1hYCiBDRkxBR1M9JHNhdmVfQ0ZMQUdTCiBtNF91bmRlZmluZShbX0FDX0FSR19WQVJfUFJFQ0lPVVNdKQogbTRfcmVuYW1lX2ZvcmNlKFtyZWFsX1BSRUNJT1VTXSxbX0FDX0FSR19WQVJfUFJFQ0lPVVNdKQpAQCAtNTIsMTMgKzU3LDEzIEBACiAKIGlmIHRlc3QgIngkR0NDIiA9ICJ4eWVzIjsgdGhlbgogICBDRkxBR1M9IiRDRkxBR1MgLWZleGNlcHRpb25zIgotICB0b3VjaCBsb2NhbC5leHAKLWVsc2UKLSAgY2F0ID4gbG9jYWwuZXhwIDw8RU9GCi1zZXQgQ0NfRk9SX1RBUkdFVCAiJENDIgotRU9GCiBmaQogCitjYXQgPiBsb2NhbC5leHAgPDxFT0YKK3NldCBDQ19GT1JfVEFSR0VUICIkQ0MiCitzZXQgQ1hYX0ZPUl9UQVJHRVQgIiRDWFgiCitFT0YKKwogQU1fTUFJTlRBSU5FUl9NT0RFCiAKIEFDX0NIRUNLX0hFQURFUlMoc3lzL21tYW4uaCkKQEAgLTY5LDYgKzc0LDcgQEAKIEFNX0NPTkRJVElPTkFMKFRFU1RTVUJESVIsIHRlc3QgLWQgJHNyY2Rpci90ZXN0c3VpdGUpCiAKIFRBUkdFVERJUj0idW5rbm93biIKK0hBVkVfTE9OR19ET1VCTEVfVkFSSUFOVD0wCiBjYXNlICIkaG9zdCIgaW4KICAgYWFyY2g2NCotKi0qKQogCVRBUkdFVD1BQVJDSDY0OyBUQVJHRVRESVI9YWFyY2g2NApAQCAtODAsNiArODYsMTAgQEAKIAlIQVZFX0xPTkdfRE9VQkxFPSdkZWZpbmVkKF9fTE9OR19ET1VCTEVfMTI4X18pJwogCTs7CiAKKyAgYXJjKi0qLSopCisJVEFSR0VUPUFSQzsgVEFSR0VURElSPWFyYworCTs7CisKICAgYXJtKi0qLSopCiAJVEFSR0VUPUFSTTsgVEFSR0VURElSPWFybQogCTs7CkBAIC0xMzcsNiArMTQ3LDkgQEAKIAkgIEFNX0xUTERGTEFHUz0nLW5vLXVuZGVmaW5lZCAtYmluZGlyICIkKGJpbmRpcikiJzsKIAlmaQogCTs7CisgIGkqODYtKi1udG8tcW54KikgCisgICAgICAgIFRBUkdFVD1YODY7IFRBUkdFVERJUj14ODYKKyAgICAgICAgOzsKICAgaT84Ni0qLWRhcndpbiopCiAJVEFSR0VUPVg4Nl9EQVJXSU47IFRBUkdFVERJUj14ODYKIAk7OwpAQCAtMTQ5LDEwICsxNjIsNiBAQAogCWZpCSAgCiAJOzsKIAotICBpKjg2LSotbnRvLXFueCopIAotICAgICAgICBUQVJHRVQ9WDg2OyBUQVJHRVRESVI9eDg2Ci0gICAgICAgIDs7Ci0KICAgeDg2XzY0LSotZGFyd2luKikKIAlUQVJHRVQ9WDg2X0RBUldJTjsgVEFSR0VURElSPXg4NgogCTs7CkBAIC0xOTgsNiArMjA3LDEwIEBACiAJVEFSR0VUPU02OEs7IFRBUkdFVERJUj1tNjhrCiAJOzsKIAorICBtODhrLSotKikKKwlUQVJHRVQ9TTg4SzsgVEFSR0VURElSPW04OGsKKwk7OworCiAgIG1pY3JvYmxhemUqLSotKikKIAlUQVJHRVQ9TUlDUk9CTEFaRTsgVEFSR0VURElSPW1pY3JvYmxhemUKIAk7OwpAQCAtMjEzLDE0ICsyMjYsMTkgQEAKICAgbWlwcy1zZ2ktaXJpeDUuKiB8IG1pcHMtc2dpLWlyaXg2LiogfCBtaXBzKi0qLXJ0ZW1zKikKIAlUQVJHRVQ9TUlQU19JUklYOyBUQVJHRVRESVI9bWlwcwogCTs7Ci0gIG1pcHMqLSotbGludXgqIHwgbWlwcyotKi1vcGVuYnNkKikKKyAgbWlwcyotKmxpbnV4KiB8IG1pcHMqLSotb3BlbmJzZCopCiAJIyBTdXBwb3J0IDEyOC1iaXQgbG9uZyBkb3VibGUgZm9yIE5ld0FCSS4KIAlIQVZFX0xPTkdfRE9VQkxFPSdkZWZpbmVkKF9fbWlwczY0KScKLQlUQVJHRVQ9TUlQU19JUklYOyBUQVJHRVRESVI9bWlwcworCVRBUkdFVD1NSVBTX0xJTlVYOyBUQVJHRVRESVI9bWlwcworCTs7CisKKyAgbmlvczIqLWxpbnV4KikKKwlUQVJHRVQ9TklPUzI7IFRBUkdFVERJUj1uaW9zMgogCTs7CiAKICAgcG93ZXJwYyotKi1saW51eCogfCBwb3dlcnBjLSotc3lzdiopCiAJVEFSR0VUPVBPV0VSUEM7IFRBUkdFVERJUj1wb3dlcnBjCisJSEFWRV9MT05HX0RPVUJMRV9WQVJJQU5UPTEKIAk7OwogICBwb3dlcnBjLSotYW1pZ2FvcyopCiAJVEFSR0VUPVBPV0VSUEM7IFRBUkdFVERJUj1wb3dlcnBjCkBAIC0yMzYsNiArMjU0LDcgQEAKIAk7OwogICBwb3dlcnBjLSotZnJlZWJzZCogfCBwb3dlcnBjLSotb3BlbmJzZCopCiAJVEFSR0VUPVBPV0VSUENfRlJFRUJTRDsgVEFSR0VURElSPXBvd2VycGMKKwlIQVZFX0xPTkdfRE9VQkxFX1ZBUklBTlQ9MQogCTs7CiAgIHBvd2VycGM2NC0qLWZyZWVic2QqKQogCVRBUkdFVD1QT1dFUlBDOyBUQVJHRVRESVI9cG93ZXJwYwpAQCAtMjYzLDYgKzI4MiwxMCBAQAogICAgICAgICBUQVJHRVQ9VElMRTsgVEFSR0VURElSPXRpbGUKICAgICAgICAgOzsKIAorICB2YXgtKi0qKQorCVRBUkdFVD1WQVg7IFRBUkdFVERJUj12YXgKKwk7OworCiAgIHh0ZW5zYSotKikKIAlUQVJHRVQ9WFRFTlNBOyBUQVJHRVRESVI9eHRlbnNhCiAJOzsKQEAgLTI4NCwxOCArMzA3LDIzIEBACiBBTV9DT05ESVRJT05BTChYODZfV0lOMzIsIHRlc3QgeCRUQVJHRVQgPSB4WDg2X1dJTjMyKQogQU1fQ09ORElUSU9OQUwoWDg2X1dJTjY0LCB0ZXN0IHgkVEFSR0VUID0geFg4Nl9XSU42NCkKIEFNX0NPTkRJVElPTkFMKFg4Nl9EQVJXSU4sIHRlc3QgeCRUQVJHRVQgPSB4WDg2X0RBUldJTikKK0FNX0NPTkRJVElPTkFMKFg4Nl9EQVJXSU4zMiwgdGVzdCB4JFRBUkdFVCA9IHhYODZfREFSV0lOICYmIHRlc3QgJGFjX2N2X3NpemVvZl9zaXplX3QgPSA0KQorQU1fQ09ORElUSU9OQUwoWDg2X0RBUldJTjY0LCB0ZXN0IHgkVEFSR0VUID0geFg4Nl9EQVJXSU4gJiYgdGVzdCAkYWNfY3Zfc2l6ZW9mX3NpemVfdCA9IDgpCiBBTV9DT05ESVRJT05BTChBTFBIQSwgdGVzdCB4JFRBUkdFVCA9IHhBTFBIQSkKIEFNX0NPTkRJVElPTkFMKElBNjQsIHRlc3QgeCRUQVJHRVQgPSB4SUE2NCkKIEFNX0NPTkRJVElPTkFMKE0zMlIsIHRlc3QgeCRUQVJHRVQgPSB4TTMyUikKIEFNX0NPTkRJVElPTkFMKE02OEssIHRlc3QgeCRUQVJHRVQgPSB4TTY4SykKK0FNX0NPTkRJVElPTkFMKE04OEssIHRlc3QgeCRUQVJHRVQgPSB4TTg4SykKIEFNX0NPTkRJVElPTkFMKE1JQ1JPQkxBWkUsIHRlc3QgeCRUQVJHRVQgPSB4TUlDUk9CTEFaRSkKIEFNX0NPTkRJVElPTkFMKE1FVEFHLCB0ZXN0IHgkVEFSR0VUID0geE1FVEFHKQogQU1fQ09ORElUSU9OQUwoTU9YSUUsIHRlc3QgeCRUQVJHRVQgPSB4TU9YSUUpCitBTV9DT05ESVRJT05BTChOSU9TMiwgdGVzdCB4JFRBUkdFVCA9IHhOSU9TMikKIEFNX0NPTkRJVElPTkFMKFBPV0VSUEMsIHRlc3QgeCRUQVJHRVQgPSB4UE9XRVJQQykKIEFNX0NPTkRJVElPTkFMKFBPV0VSUENfQUlYLCB0ZXN0IHgkVEFSR0VUID0geFBPV0VSUENfQUlYKQogQU1fQ09ORElUSU9OQUwoUE9XRVJQQ19EQVJXSU4sIHRlc3QgeCRUQVJHRVQgPSB4UE9XRVJQQ19EQVJXSU4pCiBBTV9DT05ESVRJT05BTChQT1dFUlBDX0ZSRUVCU0QsIHRlc3QgeCRUQVJHRVQgPSB4UE9XRVJQQ19GUkVFQlNEKQogQU1fQ09ORElUSU9OQUwoQUFSQ0g2NCwgdGVzdCB4JFRBUkdFVCA9IHhBQVJDSDY0KQorQU1fQ09ORElUSU9OQUwoQVJDLCB0ZXN0IHgkVEFSR0VUID0geEFSQykKIEFNX0NPTkRJVElPTkFMKEFSTSwgdGVzdCB4JFRBUkdFVCA9IHhBUk0pCiBBTV9DT05ESVRJT05BTChBVlIzMiwgdGVzdCB4JFRBUkdFVCA9IHhBVlIzMikKIEFNX0NPTkRJVElPTkFMKExJQkZGSV9DUklTLCB0ZXN0IHgkVEFSR0VUID0geExJQkZGSV9DUklTKQpAQCAtMzA4LDYgKzMzNiw3IEBACiBBTV9DT05ESVRJT05BTChQQV9IUFVYLCB0ZXN0IHgkVEFSR0VUID0geFBBX0hQVVgpCiBBTV9DT05ESVRJT05BTChQQTY0X0hQVVgsIHRlc3QgeCRUQVJHRVQgPSB4UEE2NF9IUFVYKQogQU1fQ09ORElUSU9OQUwoVElMRSwgdGVzdCB4JFRBUkdFVCA9IHhUSUxFKQorQU1fQ09ORElUSU9OQUwoVkFYLCB0ZXN0IHgkVEFSR0VUID0geFZBWCkKIEFNX0NPTkRJVElPTkFMKFhURU5TQSwgdGVzdCB4JFRBUkdFVCA9IHhYVEVOU0EpCiAKIEFDX0hFQURFUl9TVERDCkBAIC0zMjAsMTQgKzM0OSwyMCBAQAogIyBBbHNvIEFDX1NVQlNUIHRoaXMgdmFyaWFibGUgZm9yIGZmaS5oLgogaWYgdGVzdCAteiAiJEhBVkVfTE9OR19ET1VCTEUiOyB0aGVuCiAgIEhBVkVfTE9OR19ET1VCTEU9MAotICBpZiB0ZXN0ICRhY19jdl9zaXplb2ZfZG91YmxlICE9ICRhY19jdl9zaXplb2ZfbG9uZ19kb3VibGU7IHRoZW4KLSAgICBpZiB0ZXN0ICRhY19jdl9zaXplb2ZfbG9uZ19kb3VibGUgIT0gMDsgdGhlbgorICBpZiB0ZXN0ICRhY19jdl9zaXplb2ZfbG9uZ19kb3VibGUgIT0gMDsgdGhlbgorICAgIGlmIHRlc3QgJEhBVkVfTE9OR19ET1VCTEVfVkFSSUFOVCAhPSAwOyB0aGVuCisgICAgICBBQ19ERUZJTkUoSEFWRV9MT05HX0RPVUJMRV9WQVJJQU5ULCAxLCBbRGVmaW5lIGlmIHlvdSBzdXBwb3J0IG1vcmUgdGhhbiBvbmUgc2l6ZSBvZiB0aGUgbG9uZyBkb3VibGUgdHlwZV0pCiAgICAgICBIQVZFX0xPTkdfRE9VQkxFPTEKLSAgICAgIEFDX0RFRklORShIQVZFX0xPTkdfRE9VQkxFLCAxLCBbRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBsb25nIGRvdWJsZSB0eXBlIGFuZCBpdCBpcyBiaWdnZXIgdGhhbiBhIGRvdWJsZV0pCisgICAgZWxzZQorICAgICAgaWYgdGVzdCAkYWNfY3Zfc2l6ZW9mX2RvdWJsZSAhPSAkYWNfY3Zfc2l6ZW9mX2xvbmdfZG91YmxlOyB0aGVuCisgICAgICAgIEhBVkVfTE9OR19ET1VCTEU9MQorICAgICAgICBBQ19ERUZJTkUoSEFWRV9MT05HX0RPVUJMRSwgMSwgW0RlZmluZSBpZiB5b3UgaGF2ZSB0aGUgbG9uZyBkb3VibGUgdHlwZSBhbmQgaXQgaXMgYmlnZ2VyIHRoYW4gYSBkb3VibGVdKQorICAgICAgZmkKICAgICBmaQogICBmaQogZmkKIEFDX1NVQlNUKEhBVkVfTE9OR19ET1VCTEUpCitBQ19TVUJTVChIQVZFX0xPTkdfRE9VQkxFX1ZBUklBTlQpCiAKIEFDX0NfQklHRU5ESUFOCiAKQEAgLTQxMywxMSArNDQ4LDkgQEAKICAgICAgIFtEZWZpbmUgdGhpcyBpZiB5b3Ugd2FudCB0byBlbmFibGUgcGF4IGVtdWxhdGVkIHRyYW1wb2xpbmVzXSkKICAgZmkpCiAKLWlmIHRlc3QgeCRUQVJHRVQgPSB4WDg2X1dJTjY0OyB0aGVuCi0gICAgTFRfU1lTX1NZTUJPTF9VU0NPUkUKLSAgICBpZiB0ZXN0ICJ4JHN5c19zeW1ib2xfdW5kZXJzY29yZSIgPSB4eWVzOyB0aGVuCi0gICAgICAgIEFDX0RFRklORShTWU1CT0xfVU5ERVJTQ09SRSwgMSwgW0RlZmluZSBpZiBzeW1ib2xzIGFyZSB1bmRlcnNjb3JlZC5dKQotICAgIGZpCitMVF9TWVNfU1lNQk9MX1VTQ09SRQoraWYgdGVzdCAieCRzeXNfc3ltYm9sX3VuZGVyc2NvcmUiID0geHllczsgdGhlbgorICAgIEFDX0RFRklORShTWU1CT0xfVU5ERVJTQ09SRSwgMSwgW0RlZmluZSBpZiBzeW1ib2xzIGFyZSB1bmRlcnNjb3JlZC5dKQogZmkKIAogRkZJX0VYRUNfVFJBTVBPTElORV9UQUJMRT0wCkBAIC00MzgsMTIgKzQ3MSwyOCBAQAogQUNfU1VCU1QoRkZJX0VYRUNfVFJBTVBPTElORV9UQUJMRSkKIAogaWYgdGVzdCB4JFRBUkdFVCA9IHhYODZfNjQ7IHRoZW4KLSAgICBBQ19DQUNIRV9DSEVDSyhbYXNzZW1ibGVyIHN1cHBvcnRzIHVud2luZCBzZWN0aW9uIHR5cGVdLAorICAgIEFDX0NBQ0hFX0NIRUNLKFt0b29sY2hhaW4gc3VwcG9ydHMgdW53aW5kIHNlY3Rpb24gdHlwZV0sCiAJbGliZmZpX2N2X2FzX3g4Nl82NF91bndpbmRfc2VjdGlvbl90eXBlLCBbCi0JbGliZmZpX2N2X2FzX3g4Nl82NF91bndpbmRfc2VjdGlvbl90eXBlPXllcwotCWVjaG8gJy5zZWN0aW9uIC5laF9mcmFtZSwiYSIsQHVud2luZCcgPiBjb25mdGVzdC5zCi0JaWYgJENDICRDRkxBR1MgLWMgY29uZnRlc3QucyAyPiYxIHwgZ3JlcCAtaSB3YXJuaW5nID4gL2Rldi9udWxsOyB0aGVuCi0JICAgIGxpYmZmaV9jdl9hc194ODZfNjRfdW53aW5kX3NlY3Rpb25fdHlwZT1ubworICAgICAgICBjYXQgID4gY29uZnRlc3QxLnMgPDwgRU9GCisudGV4dAorLmdsb2JsIGZvbworZm9vOgoram1wIGJhcgorLnNlY3Rpb24gLmVoX2ZyYW1lLCJhIixAdW53aW5kCitiYXI6CitFT0YKKworICAgICAgICBjYXQgPiBjb25mdGVzdDIuYyAgPDwgRU9GCitleHRlcm4gdm9pZCBmb28oKTsKK2ludCBtYWluKCl7Zm9vKCk7fQorRU9GCisKKwlsaWJmZmlfY3ZfYXNfeDg2XzY0X3Vud2luZF9zZWN0aW9uX3R5cGU9bm8KKwkjIHdlIGVuc3VyZSB0aGF0IHdlIGNhbiBjb21waWxlIF9hbmRfIGxpbmsgYW4gYXNzZW1ibHkgZmlsZSBjb250YWluaW5nIGFuIEB1bndpbmQgc2VjdGlvbgorCSMgc2luY2UgdGhlIGNvbXBpbGVyIGNhbiBzdXBwb3J0IGl0IGFuZCBub3QgdGhlIGxpbmtlciAoaWUgb2xkIGJpbnV0aWxzKQorCWlmICRDQyAtV2EsLS1mYXRhbC13YXJuaW5ncyAkQ0ZMQUdTIC1jIGNvbmZ0ZXN0MS5zID4gL2Rldi9udWxsIDI+JjEgJiYgXAorICAgICAgICAgICAkQ0MgY29uZnRlc3QyLmMgY29uZnRlc3QxLm8gPiAvZGV2L251bGwgMj4mMSA7IHRoZW4KKwkgICAgbGliZmZpX2N2X2FzX3g4Nl82NF91bndpbmRfc2VjdGlvbl90eXBlPXllcwogCWZpCiAJXSkKICAgICBpZiB0ZXN0ICJ4JGxpYmZmaV9jdl9hc194ODZfNjRfdW53aW5kX3NlY3Rpb25fdHlwZSIgPSB4eWVzOyB0aGVuCkBAIC01MjYsMTQgKzU3NSwxNCBAQAogQUNfQVJHX0VOQUJMRShzdHJ1Y3RzLAogWyAgLS1kaXNhYmxlLXN0cnVjdHMgICAgICAgb21pdCBjb2RlIGZvciBzdHJ1Y3Qgc3VwcG9ydF0sCiAgIGlmIHRlc3QgIiRlbmFibGVfc3RydWN0cyIgPSAibm8iOyB0aGVuCi0gICAgQUNfREVGSU5FKEZGSV9OT19TVFJVQ1RTLCAxLCBbRGVmaW5lIHRoaXMgaXMgeW91IGRvIG5vdCB3YW50IHN1cHBvcnQgZm9yIGFnZ3JlZ2F0ZSB0eXBlcy5dKQorICAgIEFDX0RFRklORShGRklfTk9fU1RSVUNUUywgMSwgW0RlZmluZSB0aGlzIGlmIHlvdSBkbyBub3Qgd2FudCBzdXBwb3J0IGZvciBhZ2dyZWdhdGUgdHlwZXMuXSkKICAgZmkpCiBBTV9DT05ESVRJT05BTChGRklfREVCVUcsIHRlc3QgIiRlbmFibGVfZGVidWciID0gInllcyIpCiAKIEFDX0FSR19FTkFCTEUocmF3LWFwaSwKIFsgIC0tZGlzYWJsZS1yYXctYXBpICAgICAgIG1ha2UgdGhlIHJhdyBhcGkgdW5hdmFpbGFibGVdLAogICBpZiB0ZXN0ICIkZW5hYmxlX3Jhd19hcGkiID0gIm5vIjsgdGhlbgotICAgIEFDX0RFRklORShGRklfTk9fUkFXX0FQSSwgMSwgW0RlZmluZSB0aGlzIGlzIHlvdSBkbyBub3Qgd2FudCBzdXBwb3J0IGZvciB0aGUgcmF3IEFQSS5dKQorICAgIEFDX0RFRklORShGRklfTk9fUkFXX0FQSSwgMSwgW0RlZmluZSB0aGlzIGlmIHlvdSBkbyBub3Qgd2FudCBzdXBwb3J0IGZvciB0aGUgcmF3IEFQSS5dKQogICBmaSkKIAogQUNfQVJHX0VOQUJMRShwdXJpZnktc2FmZXR5LApAQCAtNTUzLDcgKzYwMiw3IEBACiAgICAgdG9vbGV4ZWNkaXI9JyQobGliZGlyKS9nY2MtbGliLyQodGFyZ2V0X2FsaWFzKScKICAgICB0b29sZXhlY2xpYmRpcj0nJChsaWJkaXIpJwogICBmaQotICBtdWx0aV9vc19kaXJlY3Rvcnk9YCRDQyAtcHJpbnQtbXVsdGktb3MtZGlyZWN0b3J5YAorICBtdWx0aV9vc19kaXJlY3Rvcnk9YCRDQyAkQ0ZMQUdTIC1wcmludC1tdWx0aS1vcy1kaXJlY3RvcnlgCiAgIGNhc2UgJG11bHRpX29zX2RpcmVjdG9yeSBpbgogICAgIC4pIDs7ICMgQXZvaWQgdHJhaWxpbmcgLy4KICAgICAuLi8qKSB0b29sZXhlY2xpYmRpcj0kdG9vbGV4ZWNsaWJkaXIvJG11bHRpX29zX2RpcmVjdG9yeSA7OwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9jb25maWd1cmUuaG9zdCBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvY29uZmlndXJlLmhvc3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1MjQ1N2IuLjAwMDAwMDAKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9jb25maWd1cmUuaG9zdAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLSMgY29uZmlndXJlLmhvc3QKLSMKLSMgVGhpcyBzaGVsbCBzY3JpcHQgaGFuZGxlcyBhbGwgaG9zdCBiYXNlZCBjb25maWd1cmF0aW9uIGZvciBsaWJmZmkuCi0jIAotCi0jIFRISVMgVEFCTEUgSVMgU09SVEVELiAgS0VFUCBJVCBUSEFUIFdBWS4KLWNhc2UgIiR7aG9zdH0iIGluCi0gIGZydiotZWxmKQotICAgIExERkxBR1M9YGVjaG8gJExERkxBR1MgfCBzZWQgInMvXC1CW14gXSpsaWJnbG9zc1wvZnJ2XC8vLyJgXCAtQmBwd2RgLy4uL2xpYmdsb3NzL2Zydi8KLSAgICA7OwotZXNhYwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9kZXBjb21wIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9kZXBjb21wCmluZGV4IGRmOGVlYTcuLjRlYmQ1YjMgMTAwNzU1Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvZGVwY29tcAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2RlcGNvbXAKQEAgLTEsMTAgKzEsOSBAQAogIyEgL2Jpbi9zaAogIyBkZXBjb21wIC0gY29tcGlsZSBhIHByb2dyYW0gZ2VuZXJhdGluZyBkZXBlbmRlbmNpZXMgYXMgc2lkZS1lZmZlY3RzCiAKLXNjcmlwdHZlcnNpb249MjAwOS0wNC0yOC4yMTsgIyBVVEMKK3NjcmlwdHZlcnNpb249MjAxMy0wNS0zMC4wNzsgIyBVVEMKIAotIyBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDkgRnJlZQotIyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIENvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogCiAjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0yOCw5ICsyNyw5IEBACiAKIGNhc2UgJDEgaW4KICAgJycpCi0gICAgIGVjaG8gIiQwOiBObyBjb21tYW5kLiAgVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iIDE+JjIKLSAgICAgZXhpdCAxOwotICAgICA7OworICAgIGVjaG8gIiQwOiBObyBjb21tYW5kLiAgVHJ5ICckMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgMT4mMgorICAgIGV4aXQgMTsKKyAgICA7OwogICAtaCB8IC0taCopCiAgICAgY2F0IDw8XEVPRgogVXNhZ2U6IGRlcGNvbXAgWy0taGVscF0gWy0tdmVyc2lvbl0gUFJPR1JBTSBbQVJHU10KQEAgLTQwLDExICszOSwxMSBAQAogCiBFbnZpcm9ubWVudCB2YXJpYWJsZXM6CiAgIGRlcG1vZGUgICAgIERlcGVuZGVuY3kgdHJhY2tpbmcgbW9kZS4KLSAgc291cmNlICAgICAgU291cmNlIGZpbGUgcmVhZCBieSBgUFJPR1JBTVMgQVJHUycuCi0gIG9iamVjdCAgICAgIE9iamVjdCBmaWxlIG91dHB1dCBieSBgUFJPR1JBTVMgQVJHUycuCisgIHNvdXJjZSAgICAgIFNvdXJjZSBmaWxlIHJlYWQgYnkgJ1BST0dSQU1TIEFSR1MnLgorICBvYmplY3QgICAgICBPYmplY3QgZmlsZSBvdXRwdXQgYnkgJ1BST0dSQU1TIEFSR1MnLgogICBERVBESVIgICAgICBkaXJlY3Rvcnkgd2hlcmUgdG8gc3RvcmUgZGVwZW5kZW5jaWVzLgogICBkZXBmaWxlICAgICBEZXBlbmRlbmN5IGZpbGUgdG8gb3V0cHV0LgotICB0bXBkZXBmaWxlICBUZW1wb3JhcnkgZmlsZSB0byB1c2Ugd2hlbiBvdXRwdXRpbmcgZGVwZW5kZW5jaWVzLgorICB0bXBkZXBmaWxlICBUZW1wb3JhcnkgZmlsZSB0byB1c2Ugd2hlbiBvdXRwdXR0aW5nIGRlcGVuZGVuY2llcy4KICAgbGlidG9vbCAgICAgV2hldGhlciBsaWJ0b29sIGlzIHVzZWQgKHllcy9ubykuCiAKIFJlcG9ydCBidWdzIHRvIDxidWctYXV0b21ha2VAZ251Lm9yZz4uCkBAIC01Nyw2ICs1Niw2NiBAQAogICAgIDs7CiBlc2FjCiAKKyMgR2V0IHRoZSBkaXJlY3RvcnkgY29tcG9uZW50IG9mIHRoZSBnaXZlbiBwYXRoLCBhbmQgc2F2ZSBpdCBpbiB0aGUKKyMgZ2xvYmFsIHZhcmlhYmxlcyAnJGRpcicuICBOb3RlIHRoYXQgdGhpcyBkaXJlY3RvcnkgY29tcG9uZW50IHdpbGwKKyMgYmUgZWl0aGVyIGVtcHR5IG9yIGVuZGluZyB3aXRoIGEgJy8nIGNoYXJhY3Rlci4gIFRoaXMgaXMgZGVsaWJlcmF0ZS4KK3NldF9kaXJfZnJvbSAoKQoreworICBjYXNlICQxIGluCisgICAgKi8qKSBkaXI9YGVjaG8gIiQxIiB8IHNlZCAtZSAnc3wvW14vXSokfC98J2A7OworICAgICAgKikgZGlyPTs7CisgIGVzYWMKK30KKworIyBHZXQgdGhlIHN1ZmZpeC1zdHJpcHBlZCBiYXNlbmFtZSBvZiB0aGUgZ2l2ZW4gcGF0aCwgYW5kIHNhdmUgaXQgdGhlCisjIGdsb2JhbCB2YXJpYWJsZSAnJGJhc2UnLgorc2V0X2Jhc2VfZnJvbSAoKQoreworICBiYXNlPWBlY2hvICIkMSIgfCBzZWQgLWUgJ3N8Xi4qL3x8JyAtZSAncy9cLlteLl0qJC8vJ2AKK30KKworIyBJZiBubyBkZXBlbmRlbmN5IGZpbGUgd2FzIGFjdHVhbGx5IGNyZWF0ZWQgYnkgdGhlIGNvbXBpbGVyIGludm9jYXRpb24sCisjIHdlIHN0aWxsIGhhdmUgdG8gY3JlYXRlIGEgZHVtbXkgZGVwZmlsZSwgdG8gYXZvaWQgZXJyb3JzIHdpdGggdGhlCisjIE1ha2VmaWxlICJpbmNsdWRlIGJhc2VuYW1lLlBsbyIgc2NoZW1lLgorbWFrZV9kdW1teV9kZXBmaWxlICgpCit7CisgIGVjaG8gIiNkdW1teSIgPiAiJGRlcGZpbGUiCit9CisKKyMgRmFjdG9yIG91dCBzb21lIGNvbW1vbiBwb3N0LXByb2Nlc3Npbmcgb2YgdGhlIGdlbmVyYXRlZCBkZXBmaWxlLgorIyBSZXF1aXJlcyB0aGUgYXV4aWxpYXJ5IGdsb2JhbCB2YXJpYWJsZSAnJHRtcGRlcGZpbGUnIHRvIGJlIHNldC4KK2FpeF9wb3N0X3Byb2Nlc3NfZGVwZmlsZSAoKQoreworICAjIElmIHRoZSBjb21waWxlciBhY3R1YWxseSBtYW5hZ2VkIHRvIHByb2R1Y2UgYSBkZXBlbmRlbmN5IGZpbGUsCisgICMgcG9zdC1wcm9jZXNzIGl0LgorICBpZiB0ZXN0IC1mICIkdG1wZGVwZmlsZSI7IHRoZW4KKyAgICAjIEVhY2ggbGluZSBpcyBvZiB0aGUgZm9ybSAnZm9vLm86IGRlcGVuZGVuY3kuaCcuCisgICAgIyBEbyB0d28gcGFzc2VzLCBvbmUgdG8ganVzdCBjaGFuZ2UgdGhlc2UgdG8KKyAgICAjICAgJG9iamVjdDogZGVwZW5kZW5jeS5oCisgICAgIyBhbmQgb25lIHRvIHNpbXBseSBvdXRwdXQKKyAgICAjICAgZGVwZW5kZW5jeS5oOgorICAgICMgd2hpY2ggaXMgbmVlZGVkIHRvIGF2b2lkIHRoZSBkZWxldGVkLWhlYWRlciBwcm9ibGVtLgorICAgIHsgc2VkIC1lICJzLF4uKlwuWyRsb3dlcl0qOiwkb2JqZWN0OiwiIDwgIiR0bXBkZXBmaWxlIgorICAgICAgc2VkIC1lICJzLF4uKlwuWyRsb3dlcl0qOlskdGFiIF0qLCwiIC1lICdzLCQsOiwnIDwgIiR0bXBkZXBmaWxlIgorICAgIH0gPiAiJGRlcGZpbGUiCisgICAgcm0gLWYgIiR0bXBkZXBmaWxlIgorICBlbHNlCisgICAgbWFrZV9kdW1teV9kZXBmaWxlCisgIGZpCit9CisKKyMgQSB0YWJ1bGF0aW9uIGNoYXJhY3Rlci4KK3RhYj0nCScKKyMgQSBuZXdsaW5lIGNoYXJhY3Rlci4KK25sPScKKycKKyMgQ2hhcmFjdGVyIHJhbmdlcyBtaWdodCBiZSBwcm9ibGVtYXRpYyBvdXRzaWRlIHRoZSBDIGxvY2FsZS4KKyMgVGhlc2UgZGVmaW5pdGlvbnMgaGVscC4KK3VwcGVyPUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaCitsb3dlcj1hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egorZGlnaXRzPTAxMjM0NTY3ODkKK2FscGhhPSR7dXBwZXJ9JHtsb3dlcn0KKwogaWYgdGVzdCAteiAiJGRlcG1vZGUiIHx8IHRlc3QgLXogIiRzb3VyY2UiIHx8IHRlc3QgLXogIiRvYmplY3QiOyB0aGVuCiAgIGVjaG8gImRlcGNvbXA6IFZhcmlhYmxlcyBzb3VyY2UsIG9iamVjdCBhbmQgZGVwbW9kZSBtdXN0IGJlIHNldCIgMT4mMgogICBleGl0IDEKQEAgLTY5LDYgKzEyOCw5IEBACiAKIHJtIC1mICIkdG1wZGVwZmlsZSIKIAorIyBBdm9pZCBpbnRlcmZlcmVuY2VzIGZyb20gdGhlIGVudmlyb25tZW50LgorZ2NjZmxhZz0gZGFzaG1mbGFnPQorCiAjIFNvbWUgbW9kZXMgd29yayBqdXN0IGxpa2Ugb3RoZXIgbW9kZXMsIGJ1dCB1c2UgZGlmZmVyZW50IGZsYWdzLiAgV2UKICMgcGFyYW1ldGVyaXplIGhlcmUsIGJ1dCBzdGlsbCBsaXN0IHRoZSBtb2RlcyBpbiB0aGUgYmlnIGNhc2UgYmVsb3csCiAjIHRvIG1ha2UgZGVwZW5kLm00IGVhc2llciB0byB3cml0ZS4gIE5vdGUgdGhhdCB3ZSAqY2Fubm90KiB1c2UgYSBjYXNlCkBAIC04MCwxOCArMTQyLDMyIEBACiBmaQogCiBpZiB0ZXN0ICIkZGVwbW9kZSIgPSBkYXNoWG1zdGRvdXQ7IHRoZW4KLSAgICMgVGhpcyBpcyBqdXN0IGxpa2UgZGFzaG1zdGRvdXQgd2l0aCBhIGRpZmZlcmVudCBhcmd1bWVudC4KLSAgIGRhc2htZmxhZz0teE0KLSAgIGRlcG1vZGU9ZGFzaG1zdGRvdXQKKyAgIyBUaGlzIGlzIGp1c3QgbGlrZSBkYXNobXN0ZG91dCB3aXRoIGEgZGlmZmVyZW50IGFyZ3VtZW50LgorICBkYXNobWZsYWc9LXhNCisgIGRlcG1vZGU9ZGFzaG1zdGRvdXQKIGZpCiAKIGN5Z3BhdGhfdT0iY3lncGF0aCAtdSAtZiAtIgogaWYgdGVzdCAiJGRlcG1vZGUiID0gbXN2Y21zeXM7IHRoZW4KLSAgICMgVGhpcyBpcyBqdXN0IGxpa2UgbXN2aXN1YWxjcHAgYnV0IHcvbyBjeWdwYXRoIHRyYW5zbGF0aW9uLgotICAgIyBKdXN0IGNvbnZlcnQgdGhlIGJhY2tzbGFzaC1lc2NhcGVkIGJhY2tzbGFzaGVzIHRvIHNpbmdsZSBmb3J3YXJkCi0gICAjIHNsYXNoZXMgdG8gc2F0aXNmeSBkZXBlbmQubTQKLSAgIGN5Z3BhdGhfdT0ic2VkIHMsXFxcXFxcXFwsLyxnIgotICAgZGVwbW9kZT1tc3Zpc3VhbGNwcAorICAjIFRoaXMgaXMganVzdCBsaWtlIG1zdmlzdWFsY3BwIGJ1dCB3L28gY3lncGF0aCB0cmFuc2xhdGlvbi4KKyAgIyBKdXN0IGNvbnZlcnQgdGhlIGJhY2tzbGFzaC1lc2NhcGVkIGJhY2tzbGFzaGVzIHRvIHNpbmdsZSBmb3J3YXJkCisgICMgc2xhc2hlcyB0byBzYXRpc2Z5IGRlcGVuZC5tNAorICBjeWdwYXRoX3U9J3NlZCBzLFxcXFwsLyxnJworICBkZXBtb2RlPW1zdmlzdWFsY3BwCitmaQorCitpZiB0ZXN0ICIkZGVwbW9kZSIgPSBtc3ZjN21zeXM7IHRoZW4KKyAgIyBUaGlzIGlzIGp1c3QgbGlrZSBtc3ZjNyBidXQgdy9vIGN5Z3BhdGggdHJhbnNsYXRpb24uCisgICMgSnVzdCBjb252ZXJ0IHRoZSBiYWNrc2xhc2gtZXNjYXBlZCBiYWNrc2xhc2hlcyB0byBzaW5nbGUgZm9yd2FyZAorICAjIHNsYXNoZXMgdG8gc2F0aXNmeSBkZXBlbmQubTQKKyAgY3lncGF0aF91PSdzZWQgcyxcXFxcLC8sZycKKyAgZGVwbW9kZT1tc3ZjNworZmkKKworaWYgdGVzdCAiJGRlcG1vZGUiID0geGxjOyB0aGVuCisgICMgSUJNIEMvQysrIENvbXBpbGVycyB4bGMveGxDIGNhbiBvdXRwdXQgZ2NjLWxpa2UgZGVwZW5kZW5jeSBpbmZvcm1hdGlvbi4KKyAgZ2NjZmxhZz0tcW1ha2VkZXA9Z2NjLC1NRgorICBkZXBtb2RlPWdjYwogZmkKIAogY2FzZSAiJGRlcG1vZGUiIGluCkBAIC0xMTQsOCArMTkwLDcgQEAKICAgZG9uZQogICAiJEAiCiAgIHN0YXQ9JD8KLSAgaWYgdGVzdCAkc3RhdCAtZXEgMDsgdGhlbiA6Ci0gIGVsc2UKKyAgaWYgdGVzdCAkc3RhdCAtbmUgMDsgdGhlbgogICAgIHJtIC1mICIkdG1wZGVwZmlsZSIKICAgICBleGl0ICRzdGF0CiAgIGZpCkBAIC0xMjMsMTMgKzE5OCwxNyBAQAogICA7OwogCiBnY2MpCisjIyBOb3RlIHRoYXQgdGhpcyBkb2Vzbid0IGp1c3QgY2F0ZXIgdG8gb2Jzb3NldGUgcHJlLTMueCBHQ0MgY29tcGlsZXJzLgorIyMgYnV0IGFsc28gdG8gaW4tdXNlIGNvbXBpbGVycyBsaWtlIElNQiB4bGMveGxDIGFuZCB0aGUgSFAgQyBjb21waWxlci4KKyMjIChzZWUgdGhlIGNvbmRpdGlvbmFsIGFzc2lnbm1lbnQgdG8gJGdjY2ZsYWcgYWJvdmUpLgogIyMgVGhlcmUgYXJlIHZhcmlvdXMgd2F5cyB0byBnZXQgZGVwZW5kZW5jeSBvdXRwdXQgZnJvbSBnY2MuICBIZXJlJ3MKICMjIHdoeSB3ZSBwaWNrIHRoaXMgcmF0aGVyIG9ic2N1cmUgbWV0aG9kOgogIyMgLSBEb24ndCB3YW50IHRvIHVzZSAtTUQgYmVjYXVzZSB3ZSdkIGxpa2UgdGhlIGRlcGVuZGVuY2llcyB0byBlbmQKICMjICAgdXAgaW4gYSBzdWJkaXIuICBIYXZpbmcgdG8gcmVuYW1lIGJ5IGhhbmQgaXMgdWdseS4KICMjICAgKFdlIG1pZ2h0IGVuZCB1cCBkb2luZyB0aGlzIGFueXdheSB0byBzdXBwb3J0IG90aGVyIGNvbXBpbGVycy4pCiAjIyAtIFRoZSBERVBFTkRFTkNJRVNfT1VUUFVUIGVudmlyb25tZW50IHZhcmlhYmxlIG1ha2VzIGdjYyBhY3QgbGlrZQotIyMgICAtTU0sIG5vdCAtTSAoZGVzcGl0ZSB3aGF0IHRoZSBkb2NzIHNheSkuCisjIyAgIC1NTSwgbm90IC1NIChkZXNwaXRlIHdoYXQgdGhlIGRvY3Mgc2F5KS4gIEFsc28sIGl0IG1pZ2h0IG5vdCBiZQorIyMgICBzdXBwb3J0ZWQgYnkgdGhlIG90aGVyIGNvbXBpbGVycyB3aGljaCB1c2UgdGhlICdnY2MnIGRlcG1vZGUuCiAjIyAtIFVzaW5nIC1NIGRpcmVjdGx5IG1lYW5zIHJ1bm5pbmcgdGhlIGNvbXBpbGVyIHR3aWNlIChldmVuIHdvcnNlCiAjIyAgIHRoYW4gcmVuYW1pbmcpLgogICBpZiB0ZXN0IC16ICIkZ2NjZmxhZyI7IHRoZW4KQEAgLTEzNywzMSArMjE2LDMxIEBACiAgIGZpCiAgICIkQCIgLVdwLCIkZ2NjZmxhZyR0bXBkZXBmaWxlIgogICBzdGF0PSQ/Ci0gIGlmIHRlc3QgJHN0YXQgLWVxIDA7IHRoZW4gOgotICBlbHNlCisgIGlmIHRlc3QgJHN0YXQgLW5lIDA7IHRoZW4KICAgICBybSAtZiAiJHRtcGRlcGZpbGUiCiAgICAgZXhpdCAkc3RhdAogICBmaQogICBybSAtZiAiJGRlcGZpbGUiCiAgIGVjaG8gIiRvYmplY3QgOiBcXCIgPiAiJGRlcGZpbGUiCi0gIGFscGhhPUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLSMjIFRoZSBzZWNvbmQgLWUgZXhwcmVzc2lvbiBoYW5kbGVzIERPUy1zdHlsZSBmaWxlIG5hbWVzIHdpdGggZHJpdmUgbGV0dGVycy4KKyAgIyBUaGUgc2Vjb25kIC1lIGV4cHJlc3Npb24gaGFuZGxlcyBET1Mtc3R5bGUgZmlsZSBuYW1lcyB3aXRoIGRyaXZlCisgICMgbGV0dGVycy4KICAgc2VkIC1lICdzL15bXjpdKjogLyAvJyBcCiAgICAgICAtZSAncy9eWyckYWxwaGEnXTpcL1teOl0qOiAvIC8nIDwgIiR0bXBkZXBmaWxlIiA+PiAiJGRlcGZpbGUiCi0jIyBUaGlzIG5leHQgcGllY2Ugb2YgbWFnaWMgYXZvaWRzIHRoZSBgZGVsZXRlZCBoZWFkZXIgZmlsZScgcHJvYmxlbS4KKyMjIFRoaXMgbmV4dCBwaWVjZSBvZiBtYWdpYyBhdm9pZHMgdGhlICJkZWxldGVkIGhlYWRlciBmaWxlIiBwcm9ibGVtLgogIyMgVGhlIHByb2JsZW0gaXMgdGhhdCB3aGVuIGEgaGVhZGVyIGZpbGUgd2hpY2ggYXBwZWFycyBpbiBhIC5QIGZpbGUKICMjIGlzIGRlbGV0ZWQsIHRoZSBkZXBlbmRlbmN5IGNhdXNlcyBtYWtlIHRvIGRpZSAoYmVjYXVzZSB0aGVyZSBpcwogIyMgdHlwaWNhbGx5IG5vIHdheSB0byByZWJ1aWxkIHRoZSBoZWFkZXIpLiAgV2UgYXZvaWQgdGhpcyBieSBhZGRpbmcKICMjIGR1bW15IGRlcGVuZGVuY2llcyBmb3IgZWFjaCBoZWFkZXIgZmlsZS4gIFRvbyBiYWQgZ2NjIGRvZXNuJ3QgZG8KICMjIHRoaXMgZm9yIHVzIGRpcmVjdGx5LgotICB0ciAnICcgJwotJyA8ICIkdG1wZGVwZmlsZSIgfAotIyMgU29tZSB2ZXJzaW9ucyBvZiBnY2MgcHV0IGEgc3BhY2UgYmVmb3JlIHRoZSBgOicuICBPbiB0aGUgdGhlb3J5CisjIyBTb21lIHZlcnNpb25zIG9mIGdjYyBwdXQgYSBzcGFjZSBiZWZvcmUgdGhlICc6Jy4gIE9uIHRoZSB0aGVvcnkKICMjIHRoYXQgdGhlIHNwYWNlIG1lYW5zIHNvbWV0aGluZywgd2UgYWRkIGEgc3BhY2UgdG8gdGhlIG91dHB1dCBhcwotIyMgd2VsbC4KKyMjIHdlbGwuICBocCBkZXBtb2RlIGFsc28gYWRkcyB0aGF0IHNwYWNlLCBidXQgYWxzbyBwcmVmaXhlcyB0aGUgVlBBVEgKKyMjIHRvIHRoZSBvYmplY3QuICBUYWtlIGNhcmUgdG8gbm90IHJlcGVhdCBpdCBpbiB0aGUgb3V0cHV0LgogIyMgU29tZSB2ZXJzaW9ucyBvZiB0aGUgSFBVWCAxMC4yMCBzZWQgY2FuJ3QgcHJvY2VzcyB0aGlzIGludm9jYXRpb24KICMjIGNvcnJlY3RseS4gIEJyZWFraW5nIGl0IGludG8gdHdvIHNlZCBpbnZvY2F0aW9ucyBpcyBhIHdvcmthcm91bmQuCi0gICAgc2VkIC1lICdzL15cXCQvLycgLWUgJy9eJC9kJyAtZSAnLzokL2QnIHwgc2VkIC1lICdzLyQvIDovJyA+PiAiJGRlcGZpbGUiCisgIHRyICcgJyAiJG5sIiA8ICIkdG1wZGVwZmlsZSIgXAorICAgIHwgc2VkIC1lICdzL15cXCQvLycgLWUgJy9eJC9kJyAtZSAic3wuKiRvYmplY3QkfHwiIC1lICcvOiQvZCcgXAorICAgIHwgc2VkIC1lICdzLyQvIDovJyA+PiAiJGRlcGZpbGUiCiAgIHJtIC1mICIkdG1wZGVwZmlsZSIKICAgOzsKIApAQCAtMTc5LDggKzI1OCw3IEBACiAgICAgIiRAIiAtTUR1cGRhdGUgIiR0bXBkZXBmaWxlIgogICBmaQogICBzdGF0PSQ/Ci0gIGlmIHRlc3QgJHN0YXQgLWVxIDA7IHRoZW4gOgotICBlbHNlCisgIGlmIHRlc3QgJHN0YXQgLW5lIDA7IHRoZW4KICAgICBybSAtZiAiJHRtcGRlcGZpbGUiCiAgICAgZXhpdCAkc3RhdAogICBmaQpAQCAtMTg4LDQzICsyNjYsNDEgQEAKIAogICBpZiB0ZXN0IC1mICIkdG1wZGVwZmlsZSI7IHRoZW4gICMgeWVzLCB0aGUgc291cmNlZmlsZSBkZXBlbmQgb24gb3RoZXIgZmlsZXMKICAgICBlY2hvICIkb2JqZWN0IDogXFwiID4gIiRkZXBmaWxlIgotCiAgICAgIyBDbGlwIG9mZiB0aGUgaW5pdGlhbCBlbGVtZW50ICh0aGUgZGVwZW5kZW50KS4gIERvbid0IHRyeSB0byBiZQogICAgICMgY2xldmVyIGFuZCByZXBsYWNlIHRoaXMgd2l0aCBzZWQgY29kZSwgYXMgSVJJWCBzZWQgd29uJ3QgaGFuZGxlCiAgICAgIyBsaW5lcyB3aXRoIG1vcmUgdGhhbiBhIGZpeGVkIG51bWJlciBvZiBjaGFyYWN0ZXJzICg0MDk2IGluCiAgICAgIyBJUklYIDYuMiBzZWQsIDgxOTIgaW4gSVJJWCA2LjUpLiAgV2UgYWxzbyByZW1vdmUgY29tbWVudCBsaW5lczsKLSAgICAjIHRoZSBJUklYIGNjIGFkZHMgY29tbWVudHMgbGlrZSBgIzpmZWMnIHRvIHRoZSBlbmQgb2YgdGhlCisgICAgIyB0aGUgSVJJWCBjYyBhZGRzIGNvbW1lbnRzIGxpa2UgJyM6ZmVjJyB0byB0aGUgZW5kIG9mIHRoZQogICAgICMgZGVwZW5kZW5jeSBsaW5lLgotICAgIHRyICcgJyAnCi0nIDwgIiR0bXBkZXBmaWxlIiBcCi0gICAgfCBzZWQgLWUgJ3MvXi4qXC5vOi8vJyAtZSAncy8jLiokLy8nIC1lICcvXiQvIGQnIHwgXAotICAgIHRyICcKLScgJyAnID4+ICIkZGVwZmlsZSIKKyAgICB0ciAnICcgIiRubCIgPCAiJHRtcGRlcGZpbGUiIFwKKyAgICAgIHwgc2VkIC1lICdzL14uKlwubzovLycgLWUgJ3MvIy4qJC8vJyAtZSAnL14kLyBkJyBcCisgICAgICB8IHRyICIkbmwiICcgJyA+PiAiJGRlcGZpbGUiCiAgICAgZWNobyA+PiAiJGRlcGZpbGUiCi0KICAgICAjIFRoZSBzZWNvbmQgcGFzcyBnZW5lcmF0ZXMgYSBkdW1teSBlbnRyeSBmb3IgZWFjaCBoZWFkZXIgZmlsZS4KLSAgICB0ciAnICcgJwotJyA8ICIkdG1wZGVwZmlsZSIgXAotICAgfCBzZWQgLWUgJ3MvXi4qXC5vOi8vJyAtZSAncy8jLiokLy8nIC1lICcvXiQvIGQnIC1lICdzLyQvOi8nIFwKLSAgID4+ICIkZGVwZmlsZSIKKyAgICB0ciAnICcgIiRubCIgPCAiJHRtcGRlcGZpbGUiIFwKKyAgICAgIHwgc2VkIC1lICdzL14uKlwubzovLycgLWUgJ3MvIy4qJC8vJyAtZSAnL14kLyBkJyAtZSAncy8kLzovJyBcCisgICAgICA+PiAiJGRlcGZpbGUiCiAgIGVsc2UKLSAgICAjIFRoZSBzb3VyY2VmaWxlIGRvZXMgbm90IGNvbnRhaW4gYW55IGRlcGVuZGVuY2llcywgc28ganVzdAotICAgICMgc3RvcmUgYSBkdW1teSBjb21tZW50IGxpbmUsIHRvIGF2b2lkIGVycm9ycyB3aXRoIHRoZSBNYWtlZmlsZQotICAgICMgImluY2x1ZGUgYmFzZW5hbWUuUGxvIiBzY2hlbWUuCi0gICAgZWNobyAiI2R1bW15IiA+ICIkZGVwZmlsZSIKKyAgICBtYWtlX2R1bW15X2RlcGZpbGUKICAgZmkKICAgcm0gLWYgIiR0bXBkZXBmaWxlIgogICA7OwogCit4bGMpCisgICMgVGhpcyBjYXNlIGV4aXN0cyBvbmx5IHRvIGxldCBkZXBlbmQubTQgZG8gaXRzIHdvcmsuICBJdCB3b3JrcyBieQorICAjIGxvb2tpbmcgYXQgdGhlIHRleHQgb2YgdGhpcyBzY3JpcHQuICBUaGlzIGNhc2Ugd2lsbCBuZXZlciBiZSBydW4sCisgICMgc2luY2UgaXQgaXMgY2hlY2tlZCBmb3IgYWJvdmUuCisgIGV4aXQgMQorICA7OworCiBhaXgpCiAgICMgVGhlIEMgZm9yIEFJWCBDb21waWxlciB1c2VzIC1NIGFuZCBvdXRwdXRzIHRoZSBkZXBlbmRlbmNpZXMKICAgIyBpbiBhIC51IGZpbGUuICBJbiBvbGRlciB2ZXJzaW9ucywgdGhpcyBmaWxlIGFsd2F5cyBsaXZlcyBpbiB0aGUKLSAgIyBjdXJyZW50IGRpcmVjdG9yeS4gIEFsc28sIHRoZSBBSVggY29tcGlsZXIgcHV0cyBgJG9iamVjdDonIGF0IHRoZQorICAjIGN1cnJlbnQgZGlyZWN0b3J5LiAgQWxzbywgdGhlIEFJWCBjb21waWxlciBwdXRzICckb2JqZWN0OicgYXQgdGhlCiAgICMgc3RhcnQgb2YgZWFjaCBsaW5lOyAkb2JqZWN0IGRvZXNuJ3QgaGF2ZSBkaXJlY3RvcnkgaW5mb3JtYXRpb24uCiAgICMgVmVyc2lvbiA2IHVzZXMgdGhlIGRpcmVjdG9yeSBpbiBib3RoIGNhc2VzLgotICBkaXI9YGVjaG8gIiRvYmplY3QiIHwgc2VkIC1lICdzfC9bXi9dKiR8L3wnYAotICB0ZXN0ICJ4JGRpciIgPSAieCRvYmplY3QiICYmIGRpcj0KLSAgYmFzZT1gZWNobyAiJG9iamVjdCIgfCBzZWQgLWUgJ3N8Xi4qL3x8JyAtZSAncy9cLm8kLy8nIC1lICdzL1wubG8kLy8nYAorICBzZXRfZGlyX2Zyb20gIiRvYmplY3QiCisgIHNldF9iYXNlX2Zyb20gIiRvYmplY3QiCiAgIGlmIHRlc3QgIiRsaWJ0b29sIiA9IHllczsgdGhlbgogICAgIHRtcGRlcGZpbGUxPSRkaXIkYmFzZS51CiAgICAgdG1wZGVwZmlsZTI9JGJhc2UudQpAQCAtMjM3LDkgKzMxMyw3IEBACiAgICAgIiRAIiAtTQogICBmaQogICBzdGF0PSQ/Ci0KLSAgaWYgdGVzdCAkc3RhdCAtZXEgMDsgdGhlbiA6Ci0gIGVsc2UKKyAgaWYgdGVzdCAkc3RhdCAtbmUgMDsgdGhlbgogICAgIHJtIC1mICIkdG1wZGVwZmlsZTEiICIkdG1wZGVwZmlsZTIiICIkdG1wZGVwZmlsZTMiCiAgICAgZXhpdCAkc3RhdAogICBmaQpAQCAtMjQ4LDQ0ICszMjIsMTAwIEBACiAgIGRvCiAgICAgdGVzdCAtZiAiJHRtcGRlcGZpbGUiICYmIGJyZWFrCiAgIGRvbmUKLSAgaWYgdGVzdCAtZiAiJHRtcGRlcGZpbGUiOyB0aGVuCi0gICAgIyBFYWNoIGxpbmUgaXMgb2YgdGhlIGZvcm0gYGZvby5vOiBkZXBlbmRlbnQuaCcuCi0gICAgIyBEbyB0d28gcGFzc2VzLCBvbmUgdG8ganVzdCBjaGFuZ2UgdGhlc2UgdG8KLSAgICAjIGAkb2JqZWN0OiBkZXBlbmRlbnQuaCcgYW5kIG9uZSB0byBzaW1wbHkgYGRlcGVuZGVudC5oOicuCi0gICAgc2VkIC1lICJzLF4uKlwuW2Etel0qOiwkb2JqZWN0OiwiIDwgIiR0bXBkZXBmaWxlIiA+ICIkZGVwZmlsZSIKLSAgICAjIFRoYXQncyBhIHRhYiBhbmQgYSBzcGFjZSBpbiB0aGUgW10uCi0gICAgc2VkIC1lICdzLF4uKlwuW2Etel0qOlsJIF0qLCwnIC1lICdzLCQsOiwnIDwgIiR0bXBkZXBmaWxlIiA+PiAiJGRlcGZpbGUiCi0gIGVsc2UKLSAgICAjIFRoZSBzb3VyY2VmaWxlIGRvZXMgbm90IGNvbnRhaW4gYW55IGRlcGVuZGVuY2llcywgc28ganVzdAotICAgICMgc3RvcmUgYSBkdW1teSBjb21tZW50IGxpbmUsIHRvIGF2b2lkIGVycm9ycyB3aXRoIHRoZSBNYWtlZmlsZQotICAgICMgImluY2x1ZGUgYmFzZW5hbWUuUGxvIiBzY2hlbWUuCi0gICAgZWNobyAiI2R1bW15IiA+ICIkZGVwZmlsZSIKKyAgYWl4X3Bvc3RfcHJvY2Vzc19kZXBmaWxlCisgIDs7CisKK3RjYykKKyAgIyB0Y2MgKFRpbnkgQyBDb21waWxlcikgdW5kZXJzdGFuZCAnLU1EIC1NRiBmaWxlJyBzaW5jZSB2ZXJzaW9uIDAuOS4yNgorICAjIEZJWE1FOiBUaGF0IHZlcnNpb24gc3RpbGwgdW5kZXIgZGV2ZWxvcG1lbnQgYXQgdGhlIG1vbWVudCBvZiB3cml0aW5nLgorICAjICAgICAgICBNYWtlIHRoYXQgdGhpcyBzdGF0ZW1lbnQgcmVtYWlucyB0cnVlIGFsc28gZm9yIHN0YWJsZSwgcmVsZWFzZWQKKyAgIyAgICAgICAgdmVyc2lvbnMuCisgICMgSXQgd2lsbCB3cmFwIGxpbmVzIChkb2Vzbid0IG1hdHRlciB3aGV0aGVyIGxvbmcgb3Igc2hvcnQpIHdpdGggYQorICAjIHRyYWlsaW5nICdcJywgYXMgaW46CisgICMKKyAgIyAgIGZvby5vIDogXAorICAjICAgIGZvby5jIFwKKyAgIyAgICBmb28uaCBcCisgICMKKyAgIyBJdCB3aWxsIHB1dCBhIHRyYWlsaW5nICdcJyBldmVuIG9uIHRoZSBsYXN0IGxpbmUsIGFuZCB3aWxsIHVzZSBsZWFkaW5nCisgICMgc3BhY2VzIHJhdGhlciB0aGFuIGxlYWRpbmcgdGFicyAoYXQgbGVhc3Qgc2luY2UgaXRzIGNvbW1pdCAwMzk0Y2FmNworICAjICJFbWl0IHNwYWNlcyBmb3IgLU1EIikuCisgICIkQCIgLU1EIC1NRiAiJHRtcGRlcGZpbGUiCisgIHN0YXQ9JD8KKyAgaWYgdGVzdCAkc3RhdCAtbmUgMDsgdGhlbgorICAgIHJtIC1mICIkdG1wZGVwZmlsZSIKKyAgICBleGl0ICRzdGF0CiAgIGZpCisgIHJtIC1mICIkZGVwZmlsZSIKKyAgIyBFYWNoIG5vbi1lbXB0eSBsaW5lIGlzIG9mIHRoZSBmb3JtICdmb28ubyA6IFwnIG9yICcgZGVwLmggXCcuCisgICMgV2UgaGF2ZSB0byBjaGFuZ2UgbGluZXMgb2YgdGhlIGZpcnN0IGtpbmQgdG8gJyRvYmplY3Q6IFwnLgorICBzZWQgLWUgInN8Lio6fCRvYmplY3QgOnwiIDwgIiR0bXBkZXBmaWxlIiA+ICIkZGVwZmlsZSIKKyAgIyBBbmQgZm9yIGVhY2ggbGluZSBvZiB0aGUgc2Vjb25kIGtpbmQsIHdlIGhhdmUgdG8gZW1pdCBhICdkZXAuaDonCisgICMgZHVtbXkgZGVwZW5kZW5jeSwgdG8gYXZvaWQgdGhlIGRlbGV0ZWQtaGVhZGVyIHByb2JsZW0uCisgIHNlZCAtbiAtZSAnc3xeICAqXCguKlwpICpcXCR8XDE6fHAnIDwgIiR0bXBkZXBmaWxlIiA+PiAiJGRlcGZpbGUiCiAgIHJtIC1mICIkdG1wZGVwZmlsZSIKICAgOzsKIAotaWNjKQotICAjIEludGVsJ3MgQyBjb21waWxlciB1bmRlcnN0YW5kcyBgLU1EIC1NRiBmaWxlJy4gIEhvd2V2ZXIgb24KLSAgIyAgICBpY2MgLU1EIC1NRiBmb28uZCAtYyAtbyBzdWIvZm9vLm8gc3ViL2Zvby5jCi0gICMgSUNDIDcuMCB3aWxsIGZpbGwgZm9vLmQgd2l0aCBzb21ldGhpbmcgbGlrZQotICAjICAgIGZvby5vOiBzdWIvZm9vLmMKLSAgIyAgICBmb28ubzogc3ViL2Zvby5oCi0gICMgd2hpY2ggaXMgd3JvbmcuICBXZSB3YW50OgotICAjICAgIHN1Yi9mb28ubzogc3ViL2Zvby5jCi0gICMgICAgc3ViL2Zvby5vOiBzdWIvZm9vLmgKLSAgIyAgICBzdWIvZm9vLmM6Ci0gICMgICAgc3ViL2Zvby5oOgotICAjIElDQyA3LjEgd2lsbCBvdXRwdXQKKyMjIFRoZSBvcmRlciBvZiB0aGlzIG9wdGlvbiBpbiB0aGUgY2FzZSBzdGF0ZW1lbnQgaXMgaW1wb3J0YW50LCBzaW5jZSB0aGUKKyMjIHNoZWxsIGNvZGUgaW4gY29uZmlndXJlIHdpbGwgdHJ5IGVhY2ggb2YgdGhlc2UgZm9ybWF0cyBpbiB0aGUgb3JkZXIKKyMjIGxpc3RlZCBpbiB0aGlzIGZpbGUuICBBIHBsYWluICctTUQnIG9wdGlvbiB3b3VsZCBiZSB1bmRlcnN0b29kIGJ5IG1hbnkKKyMjIGNvbXBpbGVycywgc28gd2UgbXVzdCBlbnN1cmUgdGhpcyBjb21lcyBhZnRlciB0aGUgZ2NjIGFuZCBpY2Mgb3B0aW9ucy4KK3BnY2MpCisgICMgUG9ydGxhbmQncyBDIGNvbXBpbGVyIHVuZGVyc3RhbmRzICctTUQnLgorICAjIFdpbGwgYWx3YXlzIG91dHB1dCBkZXBzIHRvICdmaWxlLmQnIHdoZXJlIGZpbGUgaXMgdGhlIHJvb3QgbmFtZSBvZiB0aGUKKyAgIyBzb3VyY2UgZmlsZSB1bmRlciBjb21waWxhdGlvbiwgZXZlbiBpZiBmaWxlIHJlc2lkZXMgaW4gYSBzdWJkaXJlY3RvcnkuCisgICMgVGhlIG9iamVjdCBmaWxlIG5hbWUgZG9lcyBub3QgYWZmZWN0IHRoZSBuYW1lIG9mIHRoZSAnLmQnIGZpbGUuCisgICMgcGdjYyAxMC4yIHdpbGwgb3V0cHV0CiAgICMgICAgZm9vLm86IHN1Yi9mb28uYyBzdWIvZm9vLmgKLSAgIyBhbmQgd2lsbCB3cmFwIGxvbmcgbGluZXMgdXNpbmcgXCA6CisgICMgYW5kIHdpbGwgd3JhcCBsb25nIGxpbmVzIHVzaW5nICdcJyA6CiAgICMgICAgZm9vLm86IHN1Yi9mb28uYyAuLi4gXAogICAjICAgICBzdWIvZm9vLmggLi4uIFwKICAgIyAgICAgLi4uCisgIHNldF9kaXJfZnJvbSAiJG9iamVjdCIKKyAgIyBVc2UgdGhlIHNvdXJjZSwgbm90IHRoZSBvYmplY3QsIHRvIGRldGVybWluZSB0aGUgYmFzZSBuYW1lLCBzaW5jZQorICAjIHRoYXQncyBzYWRseSB3aGF0IHBnY2Mgd2lsbCBkbyB0b28uCisgIHNldF9iYXNlX2Zyb20gIiRzb3VyY2UiCisgIHRtcGRlcGZpbGU9JGJhc2UuZAogCi0gICIkQCIgLU1EIC1NRiAiJHRtcGRlcGZpbGUiCi0gIHN0YXQ9JD8KLSAgaWYgdGVzdCAkc3RhdCAtZXEgMDsgdGhlbiA6Ci0gIGVsc2UKKyAgIyBGb3IgcHJvamVjdHMgdGhhdCBidWlsZCB0aGUgc2FtZSBzb3VyY2UgZmlsZSB0d2ljZSBpbnRvIGRpZmZlcmVudCBvYmplY3QKKyAgIyBmaWxlcywgdGhlIHBnY2MgYXBwcm9hY2ggb2YgdXNpbmcgdGhlICpzb3VyY2UqIGZpbGUgcm9vdCBuYW1lIGNhbiBjYXVzZQorICAjIHByb2JsZW1zIGluIHBhcmFsbGVsIGJ1aWxkcy4gIFVzZSBhIGxvY2tpbmcgc3RyYXRlZ3kgdG8gYXZvaWQgc3RvbXBpbmcgb24KKyAgIyB0aGUgc2FtZSAkdG1wZGVwZmlsZS4KKyAgbG9ja2Rpcj0kYmFzZS5kLWxvY2sKKyAgdHJhcCAiCisgICAgZWNobyAnJDA6IGNhdWdodCBzaWduYWwsIGNsZWFuaW5nIHVwLi4uJyA+JjIKKyAgICBybWRpciAnJGxvY2tkaXInCisgICAgZXhpdCAxCisgICIgMSAyIDEzIDE1CisgIG51bXRyaWVzPTEwMAorICBpPSRudW10cmllcworICB3aGlsZSB0ZXN0ICRpIC1ndCAwOyBkbworICAgICMgbWtkaXIgaXMgYSBwb3J0YWJsZSB0ZXN0LWFuZC1zZXQuCisgICAgaWYgbWtkaXIgIiRsb2NrZGlyIiAyPi9kZXYvbnVsbDsgdGhlbgorICAgICAgIyBUaGlzIHByb2Nlc3MgYWNxdWlyZWQgdGhlIGxvY2suCisgICAgICAiJEAiIC1NRAorICAgICAgc3RhdD0kPworICAgICAgIyBSZWxlYXNlIHRoZSBsb2NrLgorICAgICAgcm1kaXIgIiRsb2NrZGlyIgorICAgICAgYnJlYWsKKyAgICBlbHNlCisgICAgICAjIElmIHRoZSBsb2NrIGlzIGJlaW5nIGhlbGQgYnkgYSBkaWZmZXJlbnQgcHJvY2Vzcywgd2FpdAorICAgICAgIyB1bnRpbCB0aGUgd2lubmluZyBwcm9jZXNzIGlzIGRvbmUgb3Igd2UgdGltZW91dC4KKyAgICAgIHdoaWxlIHRlc3QgLWQgIiRsb2NrZGlyIiAmJiB0ZXN0ICRpIC1ndCAwOyBkbworICAgICAgICBzbGVlcCAxCisgICAgICAgIGk9YGV4cHIgJGkgLSAxYAorICAgICAgZG9uZQorICAgIGZpCisgICAgaT1gZXhwciAkaSAtIDFgCisgIGRvbmUKKyAgdHJhcCAtIDEgMiAxMyAxNQorICBpZiB0ZXN0ICRpIC1sZSAwOyB0aGVuCisgICAgZWNobyAiJDA6IGZhaWxlZCB0byBhY3F1aXJlIGxvY2sgYWZ0ZXIgJG51bXRyaWVzIGF0dGVtcHRzIiA+JjIKKyAgICBlY2hvICIkMDogY2hlY2sgbG9ja2RpciAnJGxvY2tkaXInIiA+JjIKKyAgICBleGl0IDEKKyAgZmkKKworICBpZiB0ZXN0ICRzdGF0IC1uZSAwOyB0aGVuCiAgICAgcm0gLWYgIiR0bXBkZXBmaWxlIgogICAgIGV4aXQgJHN0YXQKICAgZmkKQEAgLTI5Nyw4ICs0MjcsOCBAQAogICBzZWQgInMsXlteOl0qOiwkb2JqZWN0IDosIiA8ICIkdG1wZGVwZmlsZSIgPiAiJGRlcGZpbGUiCiAgICMgU29tZSB2ZXJzaW9ucyBvZiB0aGUgSFBVWCAxMC4yMCBzZWQgY2FuJ3QgcHJvY2VzcyB0aGlzIGludm9jYXRpb24KICAgIyBjb3JyZWN0bHkuICBCcmVha2luZyBpdCBpbnRvIHR3byBzZWQgaW52b2NhdGlvbnMgaXMgYSB3b3JrYXJvdW5kLgotICBzZWQgJ3MsXlteOl0qOiBcKC4qXCkkLFwxLDtzL15cXCQvLzsvXiQvZDsvOiQvZCcgPCAiJHRtcGRlcGZpbGUiIHwKLSAgICBzZWQgLWUgJ3MvJC8gOi8nID4+ICIkZGVwZmlsZSIKKyAgc2VkICdzLF5bXjpdKjogXCguKlwpJCxcMSw7cy9eXFwkLy87L14kL2Q7LzokL2QnIDwgIiR0bXBkZXBmaWxlIiBcCisgICAgfCBzZWQgLWUgJ3MvJC8gOi8nID4+ICIkZGVwZmlsZSIKICAgcm0gLWYgIiR0bXBkZXBmaWxlIgogICA7OwogCkBAIC0zMDksOSArNDM5LDggQEAKICAgIyAnZm9vLmQnLCB3aGljaCBsYW5kcyBuZXh0IHRvIHRoZSBvYmplY3QgZmlsZSwgd2hlcmV2ZXIgdGhhdAogICAjIGhhcHBlbnMgdG8gYmUuCiAgICMgTXVjaCBvZiB0aGlzIGlzIHNpbWlsYXIgdG8gdGhlIHRydTY0IGNhc2U7IHNlZSBjb21tZW50cyB0aGVyZS4KLSAgZGlyPWBlY2hvICIkb2JqZWN0IiB8IHNlZCAtZSAnc3wvW14vXSokfC98J2AKLSAgdGVzdCAieCRkaXIiID0gIngkb2JqZWN0IiAmJiBkaXI9Ci0gIGJhc2U9YGVjaG8gIiRvYmplY3QiIHwgc2VkIC1lICdzfF4uKi98fCcgLWUgJ3MvXC5vJC8vJyAtZSAncy9cLmxvJC8vJ2AKKyAgc2V0X2Rpcl9mcm9tICAiJG9iamVjdCIKKyAgc2V0X2Jhc2VfZnJvbSAiJG9iamVjdCIKICAgaWYgdGVzdCAiJGxpYnRvb2wiID0geWVzOyB0aGVuCiAgICAgdG1wZGVwZmlsZTE9JGRpciRiYXNlLmQKICAgICB0bXBkZXBmaWxlMj0kZGlyLmxpYnMvJGJhc2UuZApAQCAtMzIyLDggKzQ1MSw3IEBACiAgICAgIiRAIiArTWFrZWQKICAgZmkKICAgc3RhdD0kPwotICBpZiB0ZXN0ICRzdGF0IC1lcSAwOyB0aGVuIDoKLSAgZWxzZQorICBpZiB0ZXN0ICRzdGF0IC1uZSAwOyB0aGVuCiAgICAgIHJtIC1mICIkdG1wZGVwZmlsZTEiICIkdG1wZGVwZmlsZTIiCiAgICAgIGV4aXQgJHN0YXQKICAgZmkKQEAgLTMzMyw3NyArNDYxLDEwNyBAQAogICAgIHRlc3QgLWYgIiR0bXBkZXBmaWxlIiAmJiBicmVhawogICBkb25lCiAgIGlmIHRlc3QgLWYgIiR0bXBkZXBmaWxlIjsgdGhlbgotICAgIHNlZCAtZSAicyxeLipcLlthLXpdKjosJG9iamVjdDosIiAiJHRtcGRlcGZpbGUiID4gIiRkZXBmaWxlIgotICAgICMgQWRkIGBkZXBlbmRlbnQuaDonIGxpbmVzLgorICAgIHNlZCAtZSAicyxeLipcLlskbG93ZXJdKjosJG9iamVjdDosIiAiJHRtcGRlcGZpbGUiID4gIiRkZXBmaWxlIgorICAgICMgQWRkICdkZXBlbmRlbnQuaDonIGxpbmVzLgogICAgIHNlZCAtbmUgJzIsJHsKLQkgICAgICAgcy9eICovLwotCSAgICAgICBzLyBcXCokLy8KLQkgICAgICAgcy8kLzovCi0JICAgICAgIHAKLQkgICAgIH0nICIkdG1wZGVwZmlsZSIgPj4gIiRkZXBmaWxlIgorICAgICAgICAgICAgICAgcy9eICovLworICAgICAgICAgICAgICAgcy8gXFwqJC8vCisgICAgICAgICAgICAgICBzLyQvOi8KKyAgICAgICAgICAgICAgIHAKKyAgICAgICAgICAgICB9JyAiJHRtcGRlcGZpbGUiID4+ICIkZGVwZmlsZSIKICAgZWxzZQotICAgIGVjaG8gIiNkdW1teSIgPiAiJGRlcGZpbGUiCisgICAgbWFrZV9kdW1teV9kZXBmaWxlCiAgIGZpCiAgIHJtIC1mICIkdG1wZGVwZmlsZSIgIiR0bXBkZXBmaWxlMiIKICAgOzsKIAogdHJ1NjQpCi0gICAjIFRoZSBUcnU2NCBjb21waWxlciB1c2VzIC1NRCB0byBnZW5lcmF0ZSBkZXBlbmRlbmNpZXMgYXMgYSBzaWRlCi0gICAjIGVmZmVjdC4gIGBjYyAtTUQgLW8gZm9vLm8gLi4uJyBwdXRzIHRoZSBkZXBlbmRlbmNpZXMgaW50byBgZm9vLm8uZCcuCi0gICAjIEF0IGxlYXN0IG9uIEFscGhhL1JlZGhhdCA2LjEsIENvbXBhcSBDQ0MgVjYuMi01MDQgc2VlbXMgdG8gcHV0Ci0gICAjIGRlcGVuZGVuY2llcyBpbiBgZm9vLmQnIGluc3RlYWQsIHNvIHdlIGNoZWNrIGZvciB0aGF0IHRvby4KLSAgICMgU3ViZGlyZWN0b3JpZXMgYXJlIHJlc3BlY3RlZC4KLSAgIGRpcj1gZWNobyAiJG9iamVjdCIgfCBzZWQgLWUgJ3N8L1teL10qJHwvfCdgCi0gICB0ZXN0ICJ4JGRpciIgPSAieCRvYmplY3QiICYmIGRpcj0KLSAgIGJhc2U9YGVjaG8gIiRvYmplY3QiIHwgc2VkIC1lICdzfF4uKi98fCcgLWUgJ3MvXC5vJC8vJyAtZSAncy9cLmxvJC8vJ2AKKyAgIyBUaGUgVHJ1NjQgY29tcGlsZXIgdXNlcyAtTUQgdG8gZ2VuZXJhdGUgZGVwZW5kZW5jaWVzIGFzIGEgc2lkZQorICAjIGVmZmVjdC4gICdjYyAtTUQgLW8gZm9vLm8gLi4uJyBwdXRzIHRoZSBkZXBlbmRlbmNpZXMgaW50byAnZm9vLm8uZCcuCisgICMgQXQgbGVhc3Qgb24gQWxwaGEvUmVkaGF0IDYuMSwgQ29tcGFxIENDQyBWNi4yLTUwNCBzZWVtcyB0byBwdXQKKyAgIyBkZXBlbmRlbmNpZXMgaW4gJ2Zvby5kJyBpbnN0ZWFkLCBzbyB3ZSBjaGVjayBmb3IgdGhhdCB0b28uCisgICMgU3ViZGlyZWN0b3JpZXMgYXJlIHJlc3BlY3RlZC4KKyAgc2V0X2Rpcl9mcm9tICAiJG9iamVjdCIKKyAgc2V0X2Jhc2VfZnJvbSAiJG9iamVjdCIKIAotICAgaWYgdGVzdCAiJGxpYnRvb2wiID0geWVzOyB0aGVuCi0gICAgICAjIFdpdGggVHJ1NjQgY2MsIHNoYXJlZCBvYmplY3RzIGNhbiBhbHNvIGJlIHVzZWQgdG8gbWFrZSBhCi0gICAgICAjIHN0YXRpYyBsaWJyYXJ5LiAgVGhpcyBtZWNoYW5pc20gaXMgdXNlZCBpbiBsaWJ0b29sIDEuNCBzZXJpZXMgdG8KLSAgICAgICMgaGFuZGxlIGJvdGggc2hhcmVkIGFuZCBzdGF0aWMgbGlicmFyaWVzIGluIGEgc2luZ2xlIGNvbXBpbGF0aW9uLgotICAgICAgIyBXaXRoIGxpYnRvb2wgMS40LCBkZXBlbmRlbmNpZXMgd2VyZSBvdXRwdXQgaW4gJGRpci5saWJzLyRiYXNlLmxvLmQuCi0gICAgICAjCi0gICAgICAjIFdpdGggbGlidG9vbCAxLjUgdGhpcyBleGNlcHRpb24gd2FzIHJlbW92ZWQsIGFuZCBsaWJ0b29sIG5vdwotICAgICAgIyBnZW5lcmF0ZXMgMiBzZXBhcmF0ZSBvYmplY3RzIGZvciB0aGUgMiBsaWJyYXJpZXMuICBUaGVzZSB0d28KLSAgICAgICMgY29tcGlsYXRpb25zIG91dHB1dCBkZXBlbmRlbmNpZXMgaW4gJGRpci5saWJzLyRiYXNlLm8uZCBhbmQKLSAgICAgICMgaW4gJGRpciRiYXNlLm8uZC4gIFdlIGhhdmUgdG8gY2hlY2sgZm9yIGJvdGggZmlsZXMsIGJlY2F1c2UKLSAgICAgICMgb25lIG9mIHRoZSB0d28gY29tcGlsYXRpb25zIGNhbiBiZSBkaXNhYmxlZC4gIFdlIHNob3VsZCBwcmVmZXIKLSAgICAgICMgJGRpciRiYXNlLm8uZCBvdmVyICRkaXIubGlicy8kYmFzZS5vLmQgYmVjYXVzZSB0aGUgbGF0dGVyIGlzCi0gICAgICAjIGF1dG9tYXRpY2FsbHkgY2xlYW5lZCB3aGVuIC5saWJzLyBpcyBkZWxldGVkLCB3aGlsZSBpZ25vcmluZwotICAgICAgIyB0aGUgZm9ybWVyIHdvdWxkIGNhdXNlIGEgZGlzdGNsZWFuY2hlY2sgcGFuaWMuCi0gICAgICB0bXBkZXBmaWxlMT0kZGlyLmxpYnMvJGJhc2UubG8uZCAgICMgbGlidG9vbCAxLjQKLSAgICAgIHRtcGRlcGZpbGUyPSRkaXIkYmFzZS5vLmQgICAgICAgICAgIyBsaWJ0b29sIDEuNQotICAgICAgdG1wZGVwZmlsZTM9JGRpci5saWJzLyRiYXNlLm8uZCAgICAjIGxpYnRvb2wgMS41Ci0gICAgICB0bXBkZXBmaWxlND0kZGlyLmxpYnMvJGJhc2UuZCAgICAgICMgQ29tcGFxIENDQyBWNi4yLTUwNAotICAgICAgIiRAIiAtV2MsLU1ECi0gICBlbHNlCi0gICAgICB0bXBkZXBmaWxlMT0kZGlyJGJhc2Uuby5kCi0gICAgICB0bXBkZXBmaWxlMj0kZGlyJGJhc2UuZAotICAgICAgdG1wZGVwZmlsZTM9JGRpciRiYXNlLmQKLSAgICAgIHRtcGRlcGZpbGU0PSRkaXIkYmFzZS5kCi0gICAgICAiJEAiIC1NRAotICAgZmkKKyAgaWYgdGVzdCAiJGxpYnRvb2wiID0geWVzOyB0aGVuCisgICAgIyBMaWJ0b29sIGdlbmVyYXRlcyAyIHNlcGFyYXRlIG9iamVjdHMgZm9yIHRoZSAyIGxpYnJhcmllcy4gIFRoZXNlCisgICAgIyB0d28gY29tcGlsYXRpb25zIG91dHB1dCBkZXBlbmRlbmNpZXMgaW4gJGRpci5saWJzLyRiYXNlLm8uZCBhbmQKKyAgICAjIGluICRkaXIkYmFzZS5vLmQuICBXZSBoYXZlIHRvIGNoZWNrIGZvciBib3RoIGZpbGVzLCBiZWNhdXNlCisgICAgIyBvbmUgb2YgdGhlIHR3byBjb21waWxhdGlvbnMgY2FuIGJlIGRpc2FibGVkLiAgV2Ugc2hvdWxkIHByZWZlcgorICAgICMgJGRpciRiYXNlLm8uZCBvdmVyICRkaXIubGlicy8kYmFzZS5vLmQgYmVjYXVzZSB0aGUgbGF0dGVyIGlzCisgICAgIyBhdXRvbWF0aWNhbGx5IGNsZWFuZWQgd2hlbiAubGlicy8gaXMgZGVsZXRlZCwgd2hpbGUgaWdub3JpbmcKKyAgICAjIHRoZSBmb3JtZXIgd291bGQgY2F1c2UgYSBkaXN0Y2xlYW5jaGVjayBwYW5pYy4KKyAgICB0bXBkZXBmaWxlMT0kZGlyJGJhc2Uuby5kICAgICAgICAgICMgbGlidG9vbCAxLjUKKyAgICB0bXBkZXBmaWxlMj0kZGlyLmxpYnMvJGJhc2Uuby5kICAgICMgTGlrZXdpc2UuCisgICAgdG1wZGVwZmlsZTM9JGRpci5saWJzLyRiYXNlLmQgICAgICAjIENvbXBhcSBDQ0MgVjYuMi01MDQKKyAgICAiJEAiIC1XYywtTUQKKyAgZWxzZQorICAgIHRtcGRlcGZpbGUxPSRkaXIkYmFzZS5kCisgICAgdG1wZGVwZmlsZTI9JGRpciRiYXNlLmQKKyAgICB0bXBkZXBmaWxlMz0kZGlyJGJhc2UuZAorICAgICIkQCIgLU1ECisgIGZpCiAKLSAgIHN0YXQ9JD8KLSAgIGlmIHRlc3QgJHN0YXQgLWVxIDA7IHRoZW4gOgotICAgZWxzZQotICAgICAgcm0gLWYgIiR0bXBkZXBmaWxlMSIgIiR0bXBkZXBmaWxlMiIgIiR0bXBkZXBmaWxlMyIgIiR0bXBkZXBmaWxlNCIKLSAgICAgIGV4aXQgJHN0YXQKLSAgIGZpCisgIHN0YXQ9JD8KKyAgaWYgdGVzdCAkc3RhdCAtbmUgMDsgdGhlbgorICAgIHJtIC1mICIkdG1wZGVwZmlsZTEiICIkdG1wZGVwZmlsZTIiICIkdG1wZGVwZmlsZTMiCisgICAgZXhpdCAkc3RhdAorICBmaQogCi0gICBmb3IgdG1wZGVwZmlsZSBpbiAiJHRtcGRlcGZpbGUxIiAiJHRtcGRlcGZpbGUyIiAiJHRtcGRlcGZpbGUzIiAiJHRtcGRlcGZpbGU0IgotICAgZG8KLSAgICAgdGVzdCAtZiAiJHRtcGRlcGZpbGUiICYmIGJyZWFrCi0gICBkb25lCi0gICBpZiB0ZXN0IC1mICIkdG1wZGVwZmlsZSI7IHRoZW4KLSAgICAgIHNlZCAtZSAicyxeLipcLlthLXpdKjosJG9iamVjdDosIiA8ICIkdG1wZGVwZmlsZSIgPiAiJGRlcGZpbGUiCi0gICAgICAjIFRoYXQncyBhIHRhYiBhbmQgYSBzcGFjZSBpbiB0aGUgW10uCi0gICAgICBzZWQgLWUgJ3MsXi4qXC5bYS16XSo6WwkgXSosLCcgLWUgJ3MsJCw6LCcgPCAiJHRtcGRlcGZpbGUiID4+ICIkZGVwZmlsZSIKLSAgIGVsc2UKLSAgICAgIGVjaG8gIiNkdW1teSIgPiAiJGRlcGZpbGUiCi0gICBmaQotICAgcm0gLWYgIiR0bXBkZXBmaWxlIgotICAgOzsKKyAgZm9yIHRtcGRlcGZpbGUgaW4gIiR0bXBkZXBmaWxlMSIgIiR0bXBkZXBmaWxlMiIgIiR0bXBkZXBmaWxlMyIKKyAgZG8KKyAgICB0ZXN0IC1mICIkdG1wZGVwZmlsZSIgJiYgYnJlYWsKKyAgZG9uZQorICAjIFNhbWUgcG9zdC1wcm9jZXNzaW5nIHRoYXQgaXMgcmVxdWlyZWQgZm9yIEFJWCBtb2RlLgorICBhaXhfcG9zdF9wcm9jZXNzX2RlcGZpbGUKKyAgOzsKKworbXN2YzcpCisgIGlmIHRlc3QgIiRsaWJ0b29sIiA9IHllczsgdGhlbgorICAgIHNob3dJbmNsdWRlcz0tV2MsLXNob3dJbmNsdWRlcworICBlbHNlCisgICAgc2hvd0luY2x1ZGVzPS1zaG93SW5jbHVkZXMKKyAgZmkKKyAgIiRAIiAkc2hvd0luY2x1ZGVzID4gIiR0bXBkZXBmaWxlIgorICBzdGF0PSQ/CisgIGdyZXAgLXYgJ15Ob3RlOiBpbmNsdWRpbmcgZmlsZTogJyAiJHRtcGRlcGZpbGUiCisgIGlmIHRlc3QgJHN0YXQgLW5lIDA7IHRoZW4KKyAgICBybSAtZiAiJHRtcGRlcGZpbGUiCisgICAgZXhpdCAkc3RhdAorICBmaQorICBybSAtZiAiJGRlcGZpbGUiCisgIGVjaG8gIiRvYmplY3QgOiBcXCIgPiAiJGRlcGZpbGUiCisgICMgVGhlIGZpcnN0IHNlZCBwcm9ncmFtIGJlbG93IGV4dHJhY3RzIHRoZSBmaWxlIG5hbWVzIGFuZCBlc2NhcGVzCisgICMgYmFja3NsYXNoZXMgZm9yIGN5Z3BhdGguICBUaGUgc2Vjb25kIHNlZCBwcm9ncmFtIG91dHB1dHMgdGhlIGZpbGUKKyAgIyBuYW1lIHdoZW4gcmVhZGluZywgYnV0IGFsc28gYWNjdW11bGF0ZXMgYWxsIGluY2x1ZGUgZmlsZXMgaW4gdGhlCisgICMgaG9sZCBidWZmZXIgaW4gb3JkZXIgdG8gb3V0cHV0IHRoZW0gYWdhaW4gYXQgdGhlIGVuZC4gIFRoaXMgb25seQorICAjIHdvcmtzIHdpdGggc2VkIGltcGxlbWVudGF0aW9ucyB0aGF0IGNhbiBoYW5kbGUgbGFyZ2UgYnVmZmVycy4KKyAgc2VkIDwgIiR0bXBkZXBmaWxlIiAtbiAnCisvXk5vdGU6IGluY2x1ZGluZyBmaWxlOiAgKlwoLipcKS8geworICBzLy9cMS8KKyAgcy9cXC9cXFxcL2cKKyAgcAorfScgfCAkY3lncGF0aF91IHwgc29ydCAtdSB8IHNlZCAtbiAnCitzLyAvXFwgL2cKK3MvXCguKlwpLyciJHRhYiInXDEgXFwvcAorcy8uXCguKlwpIFxcL1wxOi8KK0gKKyQgeworICBzLy4qLyciJHRhYiInLworICBHCisgIHAKK30nID4+ICIkZGVwZmlsZSIKKyAgZWNobyA+PiAiJGRlcGZpbGUiICMgbWFrZSBzdXJlIHRoZSBmcmFnbWVudCBkb2Vzbid0IGVuZCB3aXRoIGEgYmFja3NsYXNoCisgIHJtIC1mICIkdG1wZGVwZmlsZSIKKyAgOzsKKworbXN2Yzdtc3lzKQorICAjIFRoaXMgY2FzZSBleGlzdHMgb25seSB0byBsZXQgZGVwZW5kLm00IGRvIGl0cyB3b3JrLiAgSXQgd29ya3MgYnkKKyAgIyBsb29raW5nIGF0IHRoZSB0ZXh0IG9mIHRoaXMgc2NyaXB0LiAgVGhpcyBjYXNlIHdpbGwgbmV2ZXIgYmUgcnVuLAorICAjIHNpbmNlIGl0IGlzIGNoZWNrZWQgZm9yIGFib3ZlLgorICBleGl0IDEKKyAgOzsKIAogI25vc2lkZWVmZmVjdCkKICAgIyBUaGlzIGNvbW1lbnQgYWJvdmUgaXMgdXNlZCBieSBhdXRvbWFrZSB0byB0ZWxsIHNpZGUtZWZmZWN0CkBAIC00MjIsNyArNTgwLDcgQEAKICAgICBzaGlmdAogICBmaQogCi0gICMgUmVtb3ZlIGAtbyAkb2JqZWN0Jy4KKyAgIyBSZW1vdmUgJy1vICRvYmplY3QnLgogICBJRlM9IiAiCiAgIGZvciBhcmcKICAgZG8KQEAgLTQ0MiwxOCArNjAwLDE4IEBACiAgIGRvbmUKIAogICB0ZXN0IC16ICIkZGFzaG1mbGFnIiAmJiBkYXNobWZsYWc9LU0KLSAgIyBSZXF1aXJlIGF0IGxlYXN0IHR3byBjaGFyYWN0ZXJzIGJlZm9yZSBzZWFyY2hpbmcgZm9yIGA6JworICAjIFJlcXVpcmUgYXQgbGVhc3QgdHdvIGNoYXJhY3RlcnMgYmVmb3JlIHNlYXJjaGluZyBmb3IgJzonCiAgICMgaW4gdGhlIHRhcmdldCBuYW1lLiAgVGhpcyBpcyB0byBjb3BlIHdpdGggRE9TLXN0eWxlIGZpbGVuYW1lczoKLSAgIyBhIGRlcGVuZGVuY3kgc3VjaCBhcyBgYzovZm9vL2JhcicgY291bGQgYmUgc2VlbiBhcyB0YXJnZXQgYGMnIG90aGVyd2lzZS4KKyAgIyBhIGRlcGVuZGVuY3kgc3VjaCBhcyAnYzovZm9vL2JhcicgY291bGQgYmUgc2VlbiBhcyB0YXJnZXQgJ2MnIG90aGVyd2lzZS4KICAgIiRAIiAkZGFzaG1mbGFnIHwKLSAgICBzZWQgJ3M6XlsgIF0qW146IF1bXjpdW146XSpcOlsgICAgXSo6JyIkb2JqZWN0IidcOiA6JyA+ICIkdG1wZGVwZmlsZSIKKyAgICBzZWQgInN8XlskdGFiIF0qW146JHRhYiBdW146XVteOl0qOlskdGFiIF0qfCRvYmplY3Q6IHwiID4gIiR0bXBkZXBmaWxlIgogICBybSAtZiAiJGRlcGZpbGUiCiAgIGNhdCA8ICIkdG1wZGVwZmlsZSIgPiAiJGRlcGZpbGUiCi0gIHRyICcgJyAnCi0nIDwgIiR0bXBkZXBmaWxlIiB8IFwKLSMjIFNvbWUgdmVyc2lvbnMgb2YgdGhlIEhQVVggMTAuMjAgc2VkIGNhbid0IHByb2Nlc3MgdGhpcyBpbnZvY2F0aW9uCi0jIyBjb3JyZWN0bHkuICBCcmVha2luZyBpdCBpbnRvIHR3byBzZWQgaW52b2NhdGlvbnMgaXMgYSB3b3JrYXJvdW5kLgotICAgIHNlZCAtZSAncy9eXFwkLy8nIC1lICcvXiQvZCcgLWUgJy86JC9kJyB8IHNlZCAtZSAncy8kLyA6LycgPj4gIiRkZXBmaWxlIgorICAjIFNvbWUgdmVyc2lvbnMgb2YgdGhlIEhQVVggMTAuMjAgc2VkIGNhbid0IHByb2Nlc3MgdGhpcyBzZWQgaW52b2NhdGlvbgorICAjIGNvcnJlY3RseS4gIEJyZWFraW5nIGl0IGludG8gdHdvIHNlZCBpbnZvY2F0aW9ucyBpcyBhIHdvcmthcm91bmQuCisgIHRyICcgJyAiJG5sIiA8ICIkdG1wZGVwZmlsZSIgXAorICAgIHwgc2VkIC1lICdzL15cXCQvLycgLWUgJy9eJC9kJyAtZSAnLzokL2QnIFwKKyAgICB8IHNlZCAtZSAncy8kLyA6LycgPj4gIiRkZXBmaWxlIgogICBybSAtZiAiJHRtcGRlcGZpbGUiCiAgIDs7CiAKQEAgLTUwMywxMiArNjYxLDE1IEBACiAgIHRvdWNoICIkdG1wZGVwZmlsZSIKICAgJHtNQUtFREVQRU5ELW1ha2VkZXBlbmR9IC1vIiRvYmpfc3VmZml4IiAtZiIkdG1wZGVwZmlsZSIgIiRAIgogICBybSAtZiAiJGRlcGZpbGUiCi0gIGNhdCA8ICIkdG1wZGVwZmlsZSIgPiAiJGRlcGZpbGUiCi0gIHNlZCAnMSwyZCcgIiR0bXBkZXBmaWxlIiB8IHRyICcgJyAnCi0nIHwgXAotIyMgU29tZSB2ZXJzaW9ucyBvZiB0aGUgSFBVWCAxMC4yMCBzZWQgY2FuJ3QgcHJvY2VzcyB0aGlzIGludm9jYXRpb24KLSMjIGNvcnJlY3RseS4gIEJyZWFraW5nIGl0IGludG8gdHdvIHNlZCBpbnZvY2F0aW9ucyBpcyBhIHdvcmthcm91bmQuCi0gICAgc2VkIC1lICdzL15cXCQvLycgLWUgJy9eJC9kJyAtZSAnLzokL2QnIHwgc2VkIC1lICdzLyQvIDovJyA+PiAiJGRlcGZpbGUiCisgICMgbWFrZWRlcGVuZCBtYXkgcHJlcGVuZCB0aGUgVlBBVEggZnJvbSB0aGUgc291cmNlIGZpbGUgbmFtZSB0byB0aGUgb2JqZWN0LgorICAjIE5vIG5lZWQgdG8gcmVnZXgtZXNjYXBlICRvYmplY3QsIGV4Y2VzcyBtYXRjaGluZyBvZiAnLicgaXMgaGFybWxlc3MuCisgIHNlZCAic3xeLipcKCRvYmplY3QgKjpcKXxcMXwiICIkdG1wZGVwZmlsZSIgPiAiJGRlcGZpbGUiCisgICMgU29tZSB2ZXJzaW9ucyBvZiB0aGUgSFBVWCAxMC4yMCBzZWQgY2FuJ3QgcHJvY2VzcyB0aGUgbGFzdCBpbnZvY2F0aW9uCisgICMgY29ycmVjdGx5LiAgQnJlYWtpbmcgaXQgaW50byB0d28gc2VkIGludm9jYXRpb25zIGlzIGEgd29ya2Fyb3VuZC4KKyAgc2VkICcxLDJkJyAiJHRtcGRlcGZpbGUiIFwKKyAgICB8IHRyICcgJyAiJG5sIiBcCisgICAgfCBzZWQgLWUgJ3MvXlxcJC8vJyAtZSAnL14kL2QnIC1lICcvOiQvZCcgXAorICAgIHwgc2VkIC1lICdzLyQvIDovJyA+PiAiJGRlcGZpbGUiCiAgIHJtIC1mICIkdG1wZGVwZmlsZSIgIiR0bXBkZXBmaWxlIi5iYWsKICAgOzsKIApAQCAtNTI1LDcgKzY4Niw3IEBACiAgICAgc2hpZnQKICAgZmkKIAotICAjIFJlbW92ZSBgLW8gJG9iamVjdCcuCisgICMgUmVtb3ZlICctbyAkb2JqZWN0Jy4KICAgSUZTPSIgIgogICBmb3IgYXJnCiAgIGRvCkBAIC01NDQsMTAgKzcwNSwxMCBAQAogICAgIGVzYWMKICAgZG9uZQogCi0gICIkQCIgLUUgfAotICAgIHNlZCAtbiAtZSAnL14jIFswLTldWzAtOV0qICJcKFteIl0qXCkiLiovIHM6OiBcMSBcXDpwJyBcCi0gICAgICAgLWUgJy9eI2xpbmUgWzAtOV1bMC05XSogIlwoW14iXSpcKSIuKi8gczo6IFwxIFxcOnAnIHwKLSAgICBzZWQgJyQgczogXFwkOjonID4gIiR0bXBkZXBmaWxlIgorICAiJEAiIC1FIFwKKyAgICB8IHNlZCAtbiAtZSAnL14jIFswLTldWzAtOV0qICJcKFteIl0qXCkiLiovIHM6OiBcMSBcXDpwJyBcCisgICAgICAgICAgICAgLWUgJy9eI2xpbmUgWzAtOV1bMC05XSogIlwoW14iXSpcKSIuKi8gczo6IFwxIFxcOnAnIFwKKyAgICB8IHNlZCAnJCBzOiBcXCQ6OicgPiAiJHRtcGRlcGZpbGUiCiAgIHJtIC1mICIkZGVwZmlsZSIKICAgZWNobyAiJG9iamVjdCA6IFxcIiA+ICIkZGVwZmlsZSIKICAgY2F0IDwgIiR0bXBkZXBmaWxlIiA+PiAiJGRlcGZpbGUiCkBAIC01NzksMjMgKzc0MCwyMyBAQAogICAgICAgc2hpZnQKICAgICAgIDs7CiAgICAgIi1HbSJ8Ii9HbSJ8Ii1HaSJ8Ii9HaSJ8Ii1aSSJ8Ii9aSSIpCi0Jc2V0IGZub3JkICIkQCIKLQlzaGlmdAotCXNoaWZ0Ci0JOzsKKyAgICAgICAgc2V0IGZub3JkICIkQCIKKyAgICAgICAgc2hpZnQKKyAgICAgICAgc2hpZnQKKyAgICAgICAgOzsKICAgICAqKQotCXNldCBmbm9yZCAiJEAiICIkYXJnIgotCXNoaWZ0Ci0Jc2hpZnQKLQk7OworICAgICAgICBzZXQgZm5vcmQgIiRAIiAiJGFyZyIKKyAgICAgICAgc2hpZnQKKyAgICAgICAgc2hpZnQKKyAgICAgICAgOzsKICAgICBlc2FjCiAgIGRvbmUKICAgIiRAIiAtRSAyPi9kZXYvbnVsbCB8CiAgIHNlZCAtbiAnL14jbGluZSBbMC05XVswLTldKiAiXChbXiJdKlwpIi8gczo6XDE6cCcgfCAkY3lncGF0aF91IHwgc29ydCAtdSA+ICIkdG1wZGVwZmlsZSIKICAgcm0gLWYgIiRkZXBmaWxlIgogICBlY2hvICIkb2JqZWN0IDogXFwiID4gIiRkZXBmaWxlIgotICBzZWQgPCAiJHRtcGRlcGZpbGUiIC1uIC1lICdzJSAlXFwgJWcnIC1lICcvXlwoLipcKSQvIHM6OglcMSBcXDpwJyA+PiAiJGRlcGZpbGUiCi0gIGVjaG8gIgkiID4+ICIkZGVwZmlsZSIKKyAgc2VkIDwgIiR0bXBkZXBmaWxlIiAtbiAtZSAncyUgJVxcICVnJyAtZSAnL15cKC4qXCkkLyBzOjonIiR0YWIiJ1wxIFxcOnAnID4+ICIkZGVwZmlsZSIKKyAgZWNobyAiJHRhYiIgPj4gIiRkZXBmaWxlIgogICBzZWQgPCAiJHRtcGRlcGZpbGUiIC1uIC1lICdzJSAlXFwgJWcnIC1lICcvXlwoLipcKSQvIHM6OlwxXDo6cCcgPj4gIiRkZXBmaWxlIgogICBybSAtZiAiJHRtcGRlcGZpbGUiCiAgIDs7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2RvYy9saWJmZmkuaW5mbyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvZG9jL2xpYmZmaS5pbmZvCmluZGV4IDZkNWFjZjguLjM5OTA5MzkgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvZG9jL2xpYmZmaS5pbmZvCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvZG9jL2xpYmZmaS5pbmZvCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvZG9jL2xpYmZmaS50ZXhpIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9kb2MvbGliZmZpLnRleGkKaW5kZXggNWMwNTUyYi4uYTJiMTI0MiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9kb2MvbGliZmZpLnRleGkKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9kb2MvbGliZmZpLnRleGkKQEAgLTE4NCwxMSArMTg0LDExIEBACiAKIEB2YXJ7cnZhbHVlfSBpcyBhIHBvaW50ZXIgdG8gYSBjaHVuayBvZiBtZW1vcnkgdGhhdCB3aWxsIGhvbGQgdGhlCiByZXN1bHQgb2YgdGhlIGZ1bmN0aW9uIGNhbGwuICBUaGlzIG11c3QgYmUgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgdGhlCi1yZXN1bHQgYW5kIG11c3QgYmUgc3VpdGFibHkgYWxpZ25lZDsgaXQgaXMgdGhlIGNhbGxlcidzIHJlc3BvbnNpYmlsaXR5CityZXN1bHQsIG5vIHNtYWxsZXIgdGhhbiB0aGUgc3lzdGVtIHJlZ2lzdGVyIHNpemUgKGdlbmVyYWxseSAzMiBvciA2NAorYml0cyksIGFuZCBtdXN0IGJlIHN1aXRhYmx5IGFsaWduZWQ7IGl0IGlzIHRoZSBjYWxsZXIncyByZXNwb25zaWJpbGl0eQogdG8gZW5zdXJlIHRoaXMuICBJZiBAdmFye2NpZn0gZGVjbGFyZXMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucwogQGNvZGV7dm9pZH0gKHVzaW5nIEBjb2Rle2ZmaV90eXBlX3ZvaWR9KSwgdGhlbiBAdmFye3J2YWx1ZX0gaXMKLWlnbm9yZWQuICBJZiBAdmFye3J2YWx1ZX0gaXMgQHNhbXB7TlVMTH0sIHRoZW4gdGhlIHJldHVybiB2YWx1ZSBpcwotZGlzY2FyZGVkLgoraWdub3JlZC4KIAogQHZhcnthdmFsdWVzfSBpcyBhIHZlY3RvciBvZiBAY29kZXt2b2lkICp9IHBvaW50ZXJzIHRoYXQgcG9pbnQgdG8gdGhlCiBtZW1vcnkgbG9jYXRpb25zIGhvbGRpbmcgdGhlIGFyZ3VtZW50IHZhbHVlcyBmb3IgYSBjYWxsLiAgSWYgQHZhcntjaWZ9CkBAIC0yMTQsNyArMjE0LDcgQEAKICAgZmZpX3R5cGUgKmFyZ3NbMV07CiAgIHZvaWQgKnZhbHVlc1sxXTsKICAgY2hhciAqczsKLSAgaW50IHJjOworICBmZmlfYXJnIHJjOwogICAKICAgLyogSW5pdGlhbGl6ZSB0aGUgYXJndW1lbnQgaW5mbyB2ZWN0b3JzICovICAgIAogICBhcmdzWzBdID0gJmZmaV90eXBlX3BvaW50ZXI7CkBAIC0yMjIsNyArMjIyLDcgQEAKICAgCiAgIC8qIEluaXRpYWxpemUgdGhlIGNpZiAqLwogICBpZiAoZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMSwgCi0JCSAgICAgICAmZmZpX3R5cGVfdWludCwgYXJncykgPT0gRkZJX09LKQorCQkgICAgICAgJmZmaV90eXBlX3NpbnQsIGFyZ3MpID09IEZGSV9PSykKICAgICBAewogICAgICAgcyA9ICJIZWxsbyBXb3JsZCEiOwogICAgICAgZmZpX2NhbGwoJmNpZiwgcHV0cywgJnJjLCB2YWx1ZXMpOwpAQCAtNDE0LDYgKzQxNCw3IEBACiAgICAgICBpbnQgaTsKIAogICAgICAgdG1fdHlwZS5zaXplID0gdG1fdHlwZS5hbGlnbm1lbnQgPSAwOworICAgICAgdG1fdHlwZS50eXBlID0gRkZJX1RZUEVfU1RSVUNUOwogICAgICAgdG1fdHlwZS5lbGVtZW50cyA9ICZ0bV90eXBlX2VsZW1lbnRzOwogICAgIAogICAgICAgZm9yIChpID0gMDsgaSA8IDk7IGkrKykKQEAgLTUzMywyOCArNTM0LDMwIEBACiBAc2VjdGlvbiBDbG9zdXJlIEV4YW1wbGUKIAogQSB0cml2aWFsIGV4YW1wbGUgdGhhdCBjcmVhdGVzIGEgbmV3IEBjb2Rle3B1dHN9IGJ5IGJpbmRpbmcgCi1AY29kZXtmcHV0c30gd2l0aCBAY29kZXtzdGRpbn0uCitAY29kZXtmcHV0c30gd2l0aCBAY29kZXtzdGRvdXR9LgogCiBAZXhhbXBsZQogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8ZmZpLmg+CiAKIC8qIEFjdHMgbGlrZSBwdXRzIHdpdGggdGhlIGZpbGUgZ2l2ZW4gYXQgdGltZSBvZiBlbmNsb3N1cmUuICovCi12b2lkIHB1dHNfYmluZGluZyhmZmlfY2lmICpjaWYsIHVuc2lnbmVkIGludCAqcmV0LCB2b2lkKiBhcmdzW10sIAotICAgICAgICAgICAgICAgICAgRklMRSAqc3RyZWFtKQordm9pZCBwdXRzX2JpbmRpbmcoZmZpX2NpZiAqY2lmLCB2b2lkICpyZXQsIHZvaWQqIGFyZ3NbXSwKKyAgICAgICAgICAgICAgICAgIHZvaWQgKnN0cmVhbSkKIEB7Ci0gICpyZXQgPSBmcHV0cygqKGNoYXIgKiopYXJnc1swXSwgc3RyZWFtKTsKKyAgKihmZmlfYXJnICopcmV0ID0gZnB1dHMoKihjaGFyICoqKWFyZ3NbMF0sIChGSUxFICopc3RyZWFtKTsKIEB9CiAKK3R5cGVkZWYgaW50ICgqcHV0c190KShjaGFyICopOworCiBpbnQgbWFpbigpCiBAewogICBmZmlfY2lmIGNpZjsKICAgZmZpX3R5cGUgKmFyZ3NbMV07CiAgIGZmaV9jbG9zdXJlICpjbG9zdXJlOwogCi0gIGludCAoKmJvdW5kX3B1dHMpKGNoYXIgKik7CisgIHZvaWQgKmJvdW5kX3B1dHM7CiAgIGludCByYzsKLSAgCisKICAgLyogQWxsb2NhdGUgY2xvc3VyZSBhbmQgYm91bmRfcHV0cyAqLwogICBjbG9zdXJlID0gZmZpX2Nsb3N1cmVfYWxsb2Moc2l6ZW9mKGZmaV9jbG9zdXJlKSwgJmJvdW5kX3B1dHMpOwogCkBAIC01NjUsMTMgKzU2OCwxMyBAQAogCiAgICAgICAvKiBJbml0aWFsaXplIHRoZSBjaWYgKi8KICAgICAgIGlmIChmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAxLAotICAgICAgICAgICAgICAgICAgICAgICAmZmZpX3R5cGVfdWludCwgYXJncykgPT0gRkZJX09LKQorICAgICAgICAgICAgICAgICAgICAgICAmZmZpX3R5cGVfc2ludCwgYXJncykgPT0gRkZJX09LKQogICAgICAgICBAewogICAgICAgICAgIC8qIEluaXRpYWxpemUgdGhlIGNsb3N1cmUsIHNldHRpbmcgc3RyZWFtIHRvIHN0ZG91dCAqLwotICAgICAgICAgIGlmIChmZmlfcHJlcF9jbG9zdXJlX2xvYyhjbG9zdXJlLCAmY2lmLCBwdXRzX2JpbmRpbmcsIAorICAgICAgICAgIGlmIChmZmlfcHJlcF9jbG9zdXJlX2xvYyhjbG9zdXJlLCAmY2lmLCBwdXRzX2JpbmRpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dCwgYm91bmRfcHV0cykgPT0gRkZJX09LKQogICAgICAgICAgICAgQHsKLSAgICAgICAgICAgICAgcmMgPSBib3VuZF9wdXRzKCJIZWxsbyBXb3JsZCEiKTsKKyAgICAgICAgICAgICAgcmMgPSAoKHB1dHNfdClib3VuZF9wdXRzKSgiSGVsbG8gV29ybGQhIik7CiAgICAgICAgICAgICAgIC8qIHJjIG5vdyBob2xkcyB0aGUgcmVzdWx0IG9mIHRoZSBjYWxsIHRvIGZwdXRzICovCiAgICAgICAgICAgICBAfQogICAgICAgICBAfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9kb2Mvc3RhbXAtdnRpIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9kb2Mvc3RhbXAtdnRpCmluZGV4IDU0MjU1YmEuLjM3ODU5NTMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvZG9jL3N0YW1wLXZ0aQorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2RvYy9zdGFtcC12dGkKQEAgLTEsNCArMSw0IEBACi1Ac2V0IFVQREFURUQgMTYgTWFyY2ggMjAxMwotQHNldCBVUERBVEVELU1PTlRIIE1hcmNoIDIwMTMKLUBzZXQgRURJVElPTiAzLjAuMTMKLUBzZXQgVkVSU0lPTiAzLjAuMTMKK0BzZXQgVVBEQVRFRCAyNSBBcHJpbCAyMDE0CitAc2V0IFVQREFURUQtTU9OVEggQXByaWwgMjAxNAorQHNldCBFRElUSU9OIDMuMQorQHNldCBWRVJTSU9OIDMuMQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9kb2MvdmVyc2lvbi50ZXhpIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9kb2MvdmVyc2lvbi50ZXhpCmluZGV4IDU0MjU1YmEuLjM3ODU5NTMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvZG9jL3ZlcnNpb24udGV4aQorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2RvYy92ZXJzaW9uLnRleGkKQEAgLTEsNCArMSw0IEBACi1Ac2V0IFVQREFURUQgMTYgTWFyY2ggMjAxMwotQHNldCBVUERBVEVELU1PTlRIIE1hcmNoIDIwMTMKLUBzZXQgRURJVElPTiAzLjAuMTMKLUBzZXQgVkVSU0lPTiAzLjAuMTMKK0BzZXQgVVBEQVRFRCAyNSBBcHJpbCAyMDE0CitAc2V0IFVQREFURUQtTU9OVEggQXByaWwgMjAxNAorQHNldCBFRElUSU9OIDMuMQorQHNldCBWRVJTSU9OIDMuMQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9mZmljb25maWcuaC5pbiBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvZmZpY29uZmlnLmguaW4KaW5kZXggYzc3NTg1ZC4uY2RlZjkxYiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9mZmljb25maWcuaC5pbgorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2ZmaWNvbmZpZy5oLmluCkBAIC0yNiwxMCArMjYsMTAgQEAKIC8qIENhbm5vdCB1c2UgbWFsbG9jIG9uIHRoaXMgdGFyZ2V0LCBzbywgd2UgcmV2ZXJ0IHRvIGFsdGVybmF0aXZlIG1lYW5zICovCiAjdW5kZWYgRkZJX01NQVBfRVhFQ19XUklUCiAKLS8qIERlZmluZSB0aGlzIGlzIHlvdSBkbyBub3Qgd2FudCBzdXBwb3J0IGZvciB0aGUgcmF3IEFQSS4gKi8KKy8qIERlZmluZSB0aGlzIGlmIHlvdSBkbyBub3Qgd2FudCBzdXBwb3J0IGZvciB0aGUgcmF3IEFQSS4gKi8KICN1bmRlZiBGRklfTk9fUkFXX0FQSQogCi0vKiBEZWZpbmUgdGhpcyBpcyB5b3UgZG8gbm90IHdhbnQgc3VwcG9ydCBmb3IgYWdncmVnYXRlIHR5cGVzLiAqLworLyogRGVmaW5lIHRoaXMgaWYgeW91IGRvIG5vdCB3YW50IHN1cHBvcnQgZm9yIGFnZ3JlZ2F0ZSB0eXBlcy4gKi8KICN1bmRlZiBGRklfTk9fU1RSVUNUUwogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSBgYWxsb2NhJywgYXMgYSBmdW5jdGlvbiBvciBtYWNyby4gKi8KQEAgLTczLDYgKzczLDkgQEAKIC8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgbG9uZyBkb3VibGUgdHlwZSBhbmQgaXQgaXMgYmlnZ2VyIHRoYW4gYSBkb3VibGUgKi8KICN1bmRlZiBIQVZFX0xPTkdfRE9VQkxFCiAKKy8qIERlZmluZSBpZiB5b3Ugc3VwcG9ydCBtb3JlIHRoYW4gb25lIHNpemUgb2YgdGhlIGxvbmcgZG91YmxlIHR5cGUgKi8KKyN1bmRlZiBIQVZFX0xPTkdfRE9VQkxFX1ZBUklBTlQKKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBtZW1jcHknIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfTUVNQ1BZCiAKQEAgLTExOCw4ICsxMjEsNyBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx1bmlzdGQuaD4gaGVhZGVyIGZpbGUuICovCiAjdW5kZWYgSEFWRV9VTklTVERfSAogCi0vKiBEZWZpbmUgdG8gdGhlIHN1Yi1kaXJlY3RvcnkgaW4gd2hpY2ggbGlidG9vbCBzdG9yZXMgdW5pbnN0YWxsZWQgbGlicmFyaWVzLgotICAgKi8KKy8qIERlZmluZSB0byB0aGUgc3ViLWRpcmVjdG9yeSB3aGVyZSBsaWJ0b29sIHN0b3JlcyB1bmluc3RhbGxlZCBsaWJyYXJpZXMuICovCiAjdW5kZWYgTFRfT0JKRElSCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdXIgQyBjb21waWxlciBkb2Vzbid0IGFjY2VwdCAtYyBhbmQgLW8gdG9nZXRoZXIuICovCkBAIC0xNTIsNiArMTU0LDkgQEAKIC8qIFRoZSBzaXplIG9mIGBsb25nIGRvdWJsZScsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KICN1bmRlZiBTSVpFT0ZfTE9OR19ET1VCTEUKIAorLyogVGhlIHNpemUgb2YgYHNpemVfdCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKyN1bmRlZiBTSVpFT0ZfU0laRV9UCisKIC8qIElmIHVzaW5nIHRoZSBDIGltcGxlbWVudGF0aW9uIG9mIGFsbG9jYSwgZGVmaW5lIGlmIHlvdSBrbm93IHRoZQogICAgZGlyZWN0aW9uIG9mIHN0YWNrIGdyb3d0aCBmb3IgeW91ciBzeXN0ZW07IG90aGVyd2lzZSBpdCB3aWxsIGJlCiAgICBhdXRvbWF0aWNhbGx5IGRlZHVjZWQgYXQgcnVudGltZS4KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvZmZpY29uZmlnLnB5LmluIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9mZmljb25maWcucHkuaW4KaW5kZXggMzViZTI5Yy4uZDEwMjQ5OCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9mZmljb25maWcucHkuaW4KKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9mZmljb25maWcucHkuaW4KQEAgLTYsNyArNiw3IEBACiBmZmlfcGxhdGZvcm1zID0gewogICAgICdNSVBTX0lSSVgnOiBbJ3NyYy9taXBzL2ZmaS5jJywgJ3NyYy9taXBzL28zMi5TJywgJ3NyYy9taXBzL24zMi5TJ10sCiAgICAgJ01JUFNfTElOVVgnOiBbJ3NyYy9taXBzL2ZmaS5jJywgJ3NyYy9taXBzL28zMi5TJ10sCi0gICAgJ1g4Nic6IFsnc3JjL3g4Ni9mZmkuYycsICdzcmMveDg2L3N5c3YuUyddLAorICAgICdYODYnOiBbJ3NyYy94ODYvZmZpLmMnLCAnc3JjL3g4Ni9zeXN2LlMnLCAnc3JjL3g4Ni93aW4zMi5TJ10sCiAgICAgJ1g4Nl9GUkVFQlNEJzogWydzcmMveDg2L2ZmaS5jJywgJ3NyYy94ODYvZnJlZWJzZC5TJ10sCiAgICAgJ1g4Nl9XSU4zMic6IFsnc3JjL3g4Ni9mZmkuYycsICdzcmMveDg2L3dpbjMyLlMnXSwKICAgICAnU1BBUkMnOiBbJ3NyYy9zcGFyYy9mZmkuYycsICdzcmMvc3BhcmMvdjguUycsICdzcmMvc3BhcmMvdjkuUyddLApAQCAtMTQsOSArMTQsMTAgQEAKICAgICAnSUE2NCc6IFsnc3JjL2lhNjQvZmZpLmMnLCAnc3JjL2lhNjQvdW5peC5TJ10sCiAgICAgJ00zMlInOiBbJ3NyYy9tMzJyL3N5c3YuUycsICdzcmMvbTMyci9mZmkuYyddLAogICAgICdNNjhLJzogWydzcmMvbTY4ay9mZmkuYycsICdzcmMvbTY4ay9zeXN2LlMnXSwKLSAgICAnUE9XRVJQQyc6IFsnc3JjL3Bvd2VycGMvZmZpLmMnLCAnc3JjL3Bvd2VycGMvc3lzdi5TJywgJ3NyYy9wb3dlcnBjL3BwY19jbG9zdXJlLlMnLCAnc3JjL3Bvd2VycGMvbGludXg2NC5TJywgJ3NyYy9wb3dlcnBjL2xpbnV4NjRfY2xvc3VyZS5TJ10sCisgICAgJ1BPV0VSUEMnOiBbJ3NyYy9wb3dlcnBjL2ZmaS5jJywgJ3NyYy9wb3dlcnBjL2ZmaV9zeXN2LmMnLCAnc3JjL3Bvd2VycGMvZmZpX2xpbnV4NjQuYycsICdzcmMvcG93ZXJwYy9zeXN2LlMnLCAnc3JjL3Bvd2VycGMvcHBjX2Nsb3N1cmUuUycsICdzcmMvcG93ZXJwYy9saW51eDY0LlMnLCAnc3JjL3Bvd2VycGMvbGludXg2NF9jbG9zdXJlLlMnXSwKICAgICAnUE9XRVJQQ19BSVgnOiBbJ3NyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYycsICdzcmMvcG93ZXJwYy9haXguUycsICdzcmMvcG93ZXJwYy9haXhfY2xvc3VyZS5TJ10sCiAgICAgJ1BPV0VSUENfRlJFRUJTRCc6IFsnc3JjL3Bvd2VycGMvZmZpLmMnLCAnc3JjL3Bvd2VycGMvc3lzdi5TJywgJ3NyYy9wb3dlcnBjL3BwY19jbG9zdXJlLlMnXSwKKyAgICAnQUFSQ0g2NCc6IFsnc3JjL2FhcmNoNjQvc3lzdi5TJywgJ3NyYy9hYXJjaDY0L2ZmaS5jJ10sCiAgICAgJ0FSTSc6IFsnc3JjL2FybS9zeXN2LlMnLCAnc3JjL2FybS9mZmkuYyddLAogICAgICdMSUJGRklfQ1JJUyc6IFsnc3JjL2NyaXMvc3lzdi5TJywgJ3NyYy9jcmlzL2ZmaS5jJ10sCiAgICAgJ0ZSVic6IFsnc3JjL2Zydi9lYWJpLlMnLCAnc3JjL2Zydi9mZmkuYyddLApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9nZW5lcmF0ZS1kYXJ3aW4tc291cmNlLWFuZC1oZWFkZXJzLnB5IGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9nZW5lcmF0ZS1kYXJ3aW4tc291cmNlLWFuZC1oZWFkZXJzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2NGU4NjEKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2dlbmVyYXRlLWRhcndpbi1zb3VyY2UtYW5kLWhlYWRlcnMucHkKQEAgLTAsMCArMSwyMDkgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBvcworaW1wb3J0IGVycm5vCitpbXBvcnQgY29sbGVjdGlvbnMKK2ltcG9ydCBnbG9iCitpbXBvcnQgYXJncGFyc2UKKworY2xhc3MgUGxhdGZvcm0ob2JqZWN0KToKKyAgICBwYXNzCisKK2NsYXNzIHNpbXVsYXRvcl9wbGF0Zm9ybShQbGF0Zm9ybSk6CisgICAgZGlyZWN0b3J5ID0gJ2Rhcndpbl9pb3MnCisgICAgc2RrID0gJ2lwaG9uZXNpbXVsYXRvcicKKyAgICBhcmNoID0gJ2kzODYnCisgICAgdHJpcGxlID0gJ2kzODYtYXBwbGUtZGFyd2luMTEnCisgICAgdmVyc2lvbl9taW4gPSAnLW1pcGhvbmVvcy12ZXJzaW9uLW1pbj01LjEuMScKKworICAgIHByZWZpeCA9ICIjaWZkZWYgX19pMzg2X19cblxuIgorICAgIHN1ZmZpeCA9ICJcblxuI2VuZGlmIgorICAgIHNyY19kaXIgPSAneDg2JworICAgIHNyY19maWxlcyA9IFsnZGFyd2luLlMnLCAnd2luMzIuUycsICdmZmkuYyddCisKKworY2xhc3Mgc2ltdWxhdG9yNjRfcGxhdGZvcm0oUGxhdGZvcm0pOgorICAgIGRpcmVjdG9yeSA9ICdkYXJ3aW5faW9zJworICAgIHNkayA9ICdpcGhvbmVzaW11bGF0b3InCisgICAgYXJjaCA9ICd4ODZfNjQnCisgICAgdHJpcGxlID0gJ3g4Nl82NC1hcHBsZS1kYXJ3aW4xMycKKyAgICB2ZXJzaW9uX21pbiA9ICctbWlwaG9uZW9zLXZlcnNpb24tbWluPTcuMCcKKworICAgIHByZWZpeCA9ICIjaWZkZWYgX194ODZfNjRfX1xuXG4iCisgICAgc3VmZml4ID0gIlxuXG4jZW5kaWYiCisgICAgc3JjX2RpciA9ICd4ODYnCisgICAgc3JjX2ZpbGVzID0gWydkYXJ3aW42NC5TJywgJ2ZmaTY0LmMnXQorCisKK2NsYXNzIGRldmljZV9wbGF0Zm9ybShQbGF0Zm9ybSk6CisgICAgZGlyZWN0b3J5ID0gJ2Rhcndpbl9pb3MnCisgICAgc2RrID0gJ2lwaG9uZW9zJworICAgIGFyY2ggPSAnYXJtdjcnCisgICAgdHJpcGxlID0gJ2FybS1hcHBsZS1kYXJ3aW4xMScKKyAgICB2ZXJzaW9uX21pbiA9ICctbWlwaG9uZW9zLXZlcnNpb24tbWluPTUuMS4xJworCisgICAgcHJlZml4ID0gIiNpZmRlZiBfX2FybV9fXG5cbiIKKyAgICBzdWZmaXggPSAiXG5cbiNlbmRpZiIKKyAgICBzcmNfZGlyID0gJ2FybScKKyAgICBzcmNfZmlsZXMgPSBbJ3N5c3YuUycsICd0cmFtcG9saW5lLlMnLCAnZmZpLmMnXQorCisKK2NsYXNzIGRldmljZTY0X3BsYXRmb3JtKFBsYXRmb3JtKToKKyAgICBkaXJlY3RvcnkgPSAnZGFyd2luX2lvcycKKyAgICBzZGsgPSAnaXBob25lb3MnCisgICAgYXJjaCA9ICdhcm02NCcKKyAgICB0cmlwbGUgPSAnYWFyY2g2NC1hcHBsZS1kYXJ3aW4xMycKKyAgICB2ZXJzaW9uX21pbiA9ICctbWlwaG9uZW9zLXZlcnNpb24tbWluPTcuMCcKKworICAgIHByZWZpeCA9ICIjaWZkZWYgX19hcm02NF9fXG5cbiIKKyAgICBzdWZmaXggPSAiXG5cbiNlbmRpZiIKKyAgICBzcmNfZGlyID0gJ2FhcmNoNjQnCisgICAgc3JjX2ZpbGVzID0gWydzeXN2LlMnLCAnZmZpLmMnXQorCisKK2NsYXNzIGRlc2t0b3AzMl9wbGF0Zm9ybShQbGF0Zm9ybSk6CisgICAgZGlyZWN0b3J5ID0gJ2Rhcndpbl9vc3gnCisgICAgc2RrID0gJ21hY29zeCcKKyAgICBhcmNoID0gJ2kzODYnCisgICAgdHJpcGxlID0gJ2kzODYtYXBwbGUtZGFyd2luMTAnCisgICAgdmVyc2lvbl9taW4gPSAnLW1tYWNvc3gtdmVyc2lvbi1taW49MTAuNicKKyAgICBzcmNfZGlyID0gJ3g4NicKKyAgICBzcmNfZmlsZXMgPSBbJ2Rhcndpbi5TJywgJ3dpbjMyLlMnLCAnZmZpLmMnXQorCisgICAgcHJlZml4ID0gIiNpZmRlZiBfX2kzODZfX1xuXG4iCisgICAgc3VmZml4ID0gIlxuXG4jZW5kaWYiCisKKworY2xhc3MgZGVza3RvcDY0X3BsYXRmb3JtKFBsYXRmb3JtKToKKyAgICBkaXJlY3RvcnkgPSAnZGFyd2luX29zeCcKKyAgICBzZGsgPSAnbWFjb3N4JworICAgIGFyY2ggPSAneDg2XzY0JworICAgIHRyaXBsZSA9ICd4ODZfNjQtYXBwbGUtZGFyd2luMTAnCisgICAgdmVyc2lvbl9taW4gPSAnLW1tYWNvc3gtdmVyc2lvbi1taW49MTAuNicKKworICAgIHByZWZpeCA9ICIjaWZkZWYgX194ODZfNjRfX1xuXG4iCisgICAgc3VmZml4ID0gIlxuXG4jZW5kaWYiCisgICAgc3JjX2RpciA9ICd4ODYnCisgICAgc3JjX2ZpbGVzID0gWydkYXJ3aW42NC5TJywgJ2ZmaTY0LmMnXQorCisKK2RlZiBta2Rpcl9wKHBhdGgpOgorICAgIHRyeToKKyAgICAgICAgb3MubWFrZWRpcnMocGF0aCkKKyAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6ICAjIFB5dGhvbiA+Mi41CisgICAgICAgIGlmIGV4Yy5lcnJubyA9PSBlcnJuby5FRVhJU1Q6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZQorCisKK2RlZiBtb3ZlX2ZpbGUoc3JjX2RpciwgZHN0X2RpciwgZmlsZW5hbWUsIGZpbGVfc3VmZml4PU5vbmUsIHByZWZpeD0nJywgc3VmZml4PScnKToKKyAgICBta2Rpcl9wKGRzdF9kaXIpCisgICAgb3V0X2ZpbGVuYW1lID0gZmlsZW5hbWUKKworICAgIGlmIGZpbGVfc3VmZml4OgorICAgICAgICBzcGxpdF9uYW1lID0gb3MucGF0aC5zcGxpdGV4dChmaWxlbmFtZSkKKyAgICAgICAgb3V0X2ZpbGVuYW1lID0gIiVzXyVzJXMiICUgKHNwbGl0X25hbWVbMF0sIGZpbGVfc3VmZml4LCBzcGxpdF9uYW1lWzFdKQorCisgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihzcmNfZGlyLCBmaWxlbmFtZSkpIGFzIGluX2ZpbGU6CisgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oZHN0X2Rpciwgb3V0X2ZpbGVuYW1lKSwgJ3cnKSBhcyBvdXRfZmlsZToKKyAgICAgICAgICAgIGlmIHByZWZpeDoKKyAgICAgICAgICAgICAgICBvdXRfZmlsZS53cml0ZShwcmVmaXgpCisKKyAgICAgICAgICAgIG91dF9maWxlLndyaXRlKGluX2ZpbGUucmVhZCgpKQorCisgICAgICAgICAgICBpZiBzdWZmaXg6CisgICAgICAgICAgICAgICAgb3V0X2ZpbGUud3JpdGUoc3VmZml4KQorCisKK2RlZiBsaXN0X2ZpbGVzKHNyY19kaXIsIHBhdHRlcm49Tm9uZSwgZmlsZWxpc3Q9Tm9uZSk6CisgICAgaWYgcGF0dGVybjogZmlsZWxpc3QgPSBnbG9iLmlnbG9iKG9zLnBhdGguam9pbihzcmNfZGlyLCBwYXR0ZXJuKSkKKyAgICBmb3IgZmlsZSBpbiBmaWxlbGlzdDoKKyAgICAgICAgeWllbGQgb3MucGF0aC5iYXNlbmFtZShmaWxlKQorCisKK2RlZiBjb3B5X2ZpbGVzKHNyY19kaXIsIGRzdF9kaXIsIHBhdHRlcm49Tm9uZSwgZmlsZWxpc3Q9Tm9uZSwgZmlsZV9zdWZmaXg9Tm9uZSwgcHJlZml4PU5vbmUsIHN1ZmZpeD1Ob25lKToKKyAgICBmb3IgZmlsZW5hbWUgaW4gbGlzdF9maWxlcyhzcmNfZGlyLCBwYXR0ZXJuPXBhdHRlcm4sIGZpbGVsaXN0PWZpbGVsaXN0KToKKyAgICAgICAgbW92ZV9maWxlKHNyY19kaXIsIGRzdF9kaXIsIGZpbGVuYW1lLCBmaWxlX3N1ZmZpeD1maWxlX3N1ZmZpeCwgcHJlZml4PXByZWZpeCwgc3VmZml4PXN1ZmZpeCkKKworCitkZWYgY29weV9zcmNfcGxhdGZvcm1fZmlsZXMocGxhdGZvcm0pOgorICAgIHNyY19kaXIgPSBvcy5wYXRoLmpvaW4oJ3NyYycsIHBsYXRmb3JtLnNyY19kaXIpCisgICAgZHN0X2RpciA9IG9zLnBhdGguam9pbihwbGF0Zm9ybS5kaXJlY3RvcnksICdzcmMnLCBwbGF0Zm9ybS5zcmNfZGlyKQorICAgIGNvcHlfZmlsZXMoc3JjX2RpciwgZHN0X2RpciwgZmlsZWxpc3Q9cGxhdGZvcm0uc3JjX2ZpbGVzLCBmaWxlX3N1ZmZpeD1wbGF0Zm9ybS5hcmNoLCBwcmVmaXg9cGxhdGZvcm0ucHJlZml4LCBzdWZmaXg9cGxhdGZvcm0uc3VmZml4KQorCisKK2RlZiBidWlsZF90YXJnZXQocGxhdGZvcm0sIHBsYXRmb3JtX2hlYWRlcnMpOgorICAgIGRlZiB4Y3J1bl9jbWQoY21kKToKKyAgICAgICAgcmV0dXJuICd4Y3J1biAtc2RrICVzICVzIC1hcmNoICVzJyAlIChwbGF0Zm9ybS5zZGssIGNtZCwgcGxhdGZvcm0uYXJjaCkKKworICAgIHRhZz0nJXMtJXMnICUgKHBsYXRmb3JtLnNkaywgcGxhdGZvcm0uYXJjaCkKKyAgICBidWlsZF9kaXIgPSAnYnVpbGRfJXMnICUgdGFnCisgICAgbWtkaXJfcChidWlsZF9kaXIpCisgICAgZW52ID0gZGljdChDQz14Y3J1bl9jbWQoJ2NsYW5nJyksCisgICAgICAgICAgICAgICBMRD14Y3J1bl9jbWQoJ2xkJyksCisgICAgICAgICAgICAgICBDRkxBR1M9JyVzJyAlIChwbGF0Zm9ybS52ZXJzaW9uX21pbikpCisgICAgd29ya2luZ19kaXIgPSBvcy5nZXRjd2QoKQorICAgIHRyeToKKyAgICAgICAgb3MuY2hkaXIoYnVpbGRfZGlyKQorICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX2NhbGwoWycuLi9jb25maWd1cmUnLCAnLWhvc3QnLCBwbGF0Zm9ybS50cmlwbGVdLCBlbnY9ZW52KQorICAgIGZpbmFsbHk6CisgICAgICAgIG9zLmNoZGlyKHdvcmtpbmdfZGlyKQorCisgICAgZm9yIHNyY19kaXIgaW4gW2J1aWxkX2Rpciwgb3MucGF0aC5qb2luKGJ1aWxkX2RpciwgJ2luY2x1ZGUnKV06CisgICAgICAgIGNvcHlfZmlsZXMoc3JjX2RpciwKKyAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4ocGxhdGZvcm0uZGlyZWN0b3J5LCAnaW5jbHVkZScpLAorICAgICAgICAgICAgICAgICAgIHBhdHRlcm49JyouaCcsCisgICAgICAgICAgICAgICAgICAgZmlsZV9zdWZmaXg9cGxhdGZvcm0uYXJjaCwKKyAgICAgICAgICAgICAgICAgICBwcmVmaXg9cGxhdGZvcm0ucHJlZml4LAorICAgICAgICAgICAgICAgICAgIHN1ZmZpeD1wbGF0Zm9ybS5zdWZmaXgpCisKKyAgICAgICAgZm9yIGZpbGVuYW1lIGluIGxpc3RfZmlsZXMoc3JjX2RpciwgcGF0dGVybj0nKi5oJyk6CisgICAgICAgICAgICBwbGF0Zm9ybV9oZWFkZXJzW2ZpbGVuYW1lXS5hZGQoKHBsYXRmb3JtLnByZWZpeCwgcGxhdGZvcm0uYXJjaCwgcGxhdGZvcm0uc3VmZml4KSkKKworCitkZWYgbWFrZV90cmFtcCgpOgorICAgIHdpdGggb3Blbignc3JjL2FybS90cmFtcG9saW5lLlMnLCAndycpIGFzIHRyYW1wX291dDoKKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oWydiYXNoJywgJ3NyYy9hcm0vZ2VudHJhbXAuc2gnXSwgc3Rkb3V0PXRyYW1wX291dCkKKyAgICAgICAgcC53YWl0KCkKKworCitkZWYgZ2VuZXJhdGVfc291cmNlX2FuZF9oZWFkZXJzKGdlbmVyYXRlX29zeD1UcnVlLCBnZW5lcmF0ZV9pb3M9VHJ1ZSk6CisgICAgY29weV9maWxlcygnc3JjJywgJ2Rhcndpbl9jb21tb24vc3JjJywgcGF0dGVybj0nKi5jJykKKyAgICBjb3B5X2ZpbGVzKCdpbmNsdWRlJywgJ2Rhcndpbl9jb21tb24vaW5jbHVkZScsIHBhdHRlcm49JyouaCcpCisKKyAgICBpZiBnZW5lcmF0ZV9pb3M6CisgICAgICAgIG1ha2VfdHJhbXAoKQorICAgICAgICBjb3B5X3NyY19wbGF0Zm9ybV9maWxlcyhzaW11bGF0b3JfcGxhdGZvcm0pCisgICAgICAgIGNvcHlfc3JjX3BsYXRmb3JtX2ZpbGVzKHNpbXVsYXRvcjY0X3BsYXRmb3JtKQorICAgICAgICBjb3B5X3NyY19wbGF0Zm9ybV9maWxlcyhkZXZpY2VfcGxhdGZvcm0pCisgICAgICAgIGNvcHlfc3JjX3BsYXRmb3JtX2ZpbGVzKGRldmljZTY0X3BsYXRmb3JtKQorICAgIGlmIGdlbmVyYXRlX29zeDoKKyAgICAgICAgY29weV9zcmNfcGxhdGZvcm1fZmlsZXMoZGVza3RvcDMyX3BsYXRmb3JtKQorICAgICAgICBjb3B5X3NyY19wbGF0Zm9ybV9maWxlcyhkZXNrdG9wNjRfcGxhdGZvcm0pCisKKyAgICBwbGF0Zm9ybV9oZWFkZXJzID0gY29sbGVjdGlvbnMuZGVmYXVsdGRpY3Qoc2V0KQorCisgICAgaWYgZ2VuZXJhdGVfaW9zOgorICAgICAgICBidWlsZF90YXJnZXQoc2ltdWxhdG9yX3BsYXRmb3JtLCBwbGF0Zm9ybV9oZWFkZXJzKQorICAgICAgICBidWlsZF90YXJnZXQoc2ltdWxhdG9yNjRfcGxhdGZvcm0sIHBsYXRmb3JtX2hlYWRlcnMpCisgICAgICAgIGJ1aWxkX3RhcmdldChkZXZpY2VfcGxhdGZvcm0sIHBsYXRmb3JtX2hlYWRlcnMpCisgICAgICAgIGJ1aWxkX3RhcmdldChkZXZpY2U2NF9wbGF0Zm9ybSwgcGxhdGZvcm1faGVhZGVycykKKyAgICBpZiBnZW5lcmF0ZV9vc3g6CisgICAgICAgIGJ1aWxkX3RhcmdldChkZXNrdG9wMzJfcGxhdGZvcm0sIHBsYXRmb3JtX2hlYWRlcnMpCisgICAgICAgIGJ1aWxkX3RhcmdldChkZXNrdG9wNjRfcGxhdGZvcm0sIHBsYXRmb3JtX2hlYWRlcnMpCisKKyAgICBta2Rpcl9wKCdkYXJ3aW5fY29tbW9uL2luY2x1ZGUnKQorICAgIGZvciBoZWFkZXJfbmFtZSwgdGFnX3R1cGxlcyBpbiBwbGF0Zm9ybV9oZWFkZXJzLml0ZXJpdGVtcygpOgorICAgICAgICBiYXNlbmFtZSwgc3VmZml4ID0gb3MucGF0aC5zcGxpdGV4dChoZWFkZXJfbmFtZSkKKyAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbignZGFyd2luX2NvbW1vbi9pbmNsdWRlJywgaGVhZGVyX25hbWUpLCAndycpIGFzIGhlYWRlcjoKKyAgICAgICAgICAgIGZvciB0YWdfdHVwbGUgaW4gdGFnX3R1cGxlczoKKyAgICAgICAgICAgICAgICBoZWFkZXIud3JpdGUoJyVzI2luY2x1ZGUgPCVzXyVzJXM+XG4lc1xuJyAlICh0YWdfdHVwbGVbMF0sIGJhc2VuYW1lLCB0YWdfdHVwbGVbMV0sIHN1ZmZpeCwgdGFnX3R1cGxlWzJdKSkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1vbmx5LWlvcycsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlZmF1bHQ9RmFsc2UpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1vbmx5LW9zeCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlZmF1bHQ9RmFsc2UpCisgICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKKworICAgIGdlbmVyYXRlX3NvdXJjZV9hbmRfaGVhZGVycyhnZW5lcmF0ZV9vc3g9bm90IGFyZ3Mub25seV9pb3MsIGdlbmVyYXRlX2lvcz1ub3QgYXJncy5vbmx5X29zeCkKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvZ2VuZXJhdGUtaW9zLXNvdXJjZS1hbmQtaGVhZGVycy5weSBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvZ2VuZXJhdGUtaW9zLXNvdXJjZS1hbmQtaGVhZGVycy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggYzJiY2E3My4uMDAwMDAwMAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2dlbmVyYXRlLWlvcy1zb3VyY2UtYW5kLWhlYWRlcnMucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxNjAgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0KLWltcG9ydCBzdWJwcm9jZXNzCi1pbXBvcnQgcmUKLWltcG9ydCBvcwotaW1wb3J0IGVycm5vCi1pbXBvcnQgY29sbGVjdGlvbnMKLWltcG9ydCBzeXMKLQotY2xhc3MgUGxhdGZvcm0ob2JqZWN0KToKLSAgICBwYXNzCi0KLXNka19yZSA9IHJlLmNvbXBpbGUocicuKi1zZGsgKFthLXpBLVowLTkuXSopJykKLQotZGVmIHNka2luZm8oc2RrbmFtZSk6Ci0gICAgcmV0ID0ge30KLSAgICBmb3IgbGluZSBpbiBzdWJwcm9jZXNzLlBvcGVuKFsneGNvZGVidWlsZCcsICctc2RrJywgc2RrbmFtZSwgJy12ZXJzaW9uJ10sIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpLnN0ZG91dDoKLSAgICAgICAga3YgPSBsaW5lLnN0cmlwKCkuc3BsaXQoJzogJywgMSkKLSAgICAgICAgaWYgbGVuKGt2KSA9PSAyOgotICAgICAgICAgICAgayx2ID0ga3YKLSAgICAgICAgICAgIHJldFtrXSA9IHYKLSAgICByZXR1cm4gcmV0Ci0KLXNpbV9zZGtfaW5mbyA9IHNka2luZm8oJ2lwaG9uZXNpbXVsYXRvcicpCi1kZXZpY2Vfc2RrX2luZm8gPSBzZGtpbmZvKCdpcGhvbmVvcycpCi0KLWRlZiBsYXRlc3Rfc2RrcygpOgotICAgIGxhdGVzdF9zaW0gPSBOb25lCi0gICAgbGF0ZXN0X2RldmljZSA9IE5vbmUKLSAgICBmb3IgbGluZSBpbiBzdWJwcm9jZXNzLlBvcGVuKFsneGNvZGVidWlsZCcsICctc2hvd3Nka3MnXSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkuc3Rkb3V0OgotICAgICAgICBtYXRjaCA9IHNka19yZS5tYXRjaChsaW5lKQotICAgICAgICBpZiBtYXRjaDoKLSAgICAgICAgICAgIGlmICdTaW11bGF0b3InIGluIGxpbmU6Ci0gICAgICAgICAgICAgICAgbGF0ZXN0X3NpbSA9IG1hdGNoLmdyb3VwKDEpCi0gICAgICAgICAgICBlbGlmICdpT1MnIGluIGxpbmU6Ci0gICAgICAgICAgICAgICAgbGF0ZXN0X2RldmljZSA9IG1hdGNoLmdyb3VwKDEpCi0KLSAgICByZXR1cm4gbGF0ZXN0X3NpbSwgbGF0ZXN0X2RldmljZQotCi1zaW1fc2RrLCBkZXZpY2Vfc2RrID0gbGF0ZXN0X3Nka3MoKQotCi1jbGFzcyBzaW11bGF0b3JfcGxhdGZvcm0oUGxhdGZvcm0pOgotICAgIHNkaz0naXBob25lc2ltdWxhdG9yJwotICAgIGFyY2ggPSAnaTM4NicKLSAgICBuYW1lID0gJ3NpbXVsYXRvcicKLSAgICB0cmlwbGUgPSAnaTM4Ni1hcHBsZS1kYXJ3aW4xMCcKLSAgICBzZGtyb290ID0gc2ltX3Nka19pbmZvWydQYXRoJ10KLQotICAgIHByZWZpeCA9ICIjaWYgIWRlZmluZWQoX19hcm1fXykgJiYgZGVmaW5lZChfX2kzODZfXylcblxuIgotICAgIHN1ZmZpeCA9ICJcblxuI2VuZGlmIgotCi1jbGFzcyBkZXZpY2VfcGxhdGZvcm0oUGxhdGZvcm0pOgotICAgIHNkaz0naXBob25lb3MnCi0gICAgbmFtZSA9ICdpb3MnCi0gICAgYXJjaCA9ICdhcm12NycKLSAgICB0cmlwbGUgPSAnYXJtLWFwcGxlLWRhcndpbjEwJwotICAgIHNka3Jvb3QgPSBkZXZpY2Vfc2RrX2luZm9bJ1BhdGgnXQotCi0gICAgcHJlZml4ID0gIiNpZmRlZiBfX2FybV9fXG5cbiIKLSAgICBzdWZmaXggPSAiXG5cbiNlbmRpZiIKLQotCi1kZWYgbW92ZV9maWxlKHNyY19kaXIsIGRzdF9kaXIsIGZpbGVuYW1lLCBmaWxlX3N1ZmZpeD1Ob25lLCBwcmVmaXg9JycsIHN1ZmZpeD0nJyk6Ci0gICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGRzdF9kaXIpOgotICAgICAgICBvcy5tYWtlZGlycyhkc3RfZGlyKQotCi0gICAgb3V0X2ZpbGVuYW1lID0gZmlsZW5hbWUKLQotICAgIGlmIGZpbGVfc3VmZml4OgotICAgICAgICBzcGxpdF9uYW1lID0gb3MucGF0aC5zcGxpdGV4dChmaWxlbmFtZSkKLSAgICAgICAgb3V0X2ZpbGVuYW1lID0gICIlc18lcyVzIiAlIChzcGxpdF9uYW1lWzBdLCBmaWxlX3N1ZmZpeCwgc3BsaXRfbmFtZVsxXSkKLQotICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oc3JjX2RpciwgZmlsZW5hbWUpKSBhcyBpbl9maWxlOgotICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKGRzdF9kaXIsIG91dF9maWxlbmFtZSksICd3JykgYXMgb3V0X2ZpbGU6Ci0gICAgICAgICAgICBpZiBwcmVmaXg6Ci0gICAgICAgICAgICAgICAgb3V0X2ZpbGUud3JpdGUocHJlZml4KQotCi0gICAgICAgICAgICBvdXRfZmlsZS53cml0ZShpbl9maWxlLnJlYWQoKSkKLQotICAgICAgICAgICAgaWYgc3VmZml4OgotICAgICAgICAgICAgICAgIG91dF9maWxlLndyaXRlKHN1ZmZpeCkKLQotaGVhZGVyc19zZWVuID0gY29sbGVjdGlvbnMuZGVmYXVsdGRpY3Qoc2V0KQotCi1kZWYgbW92ZV9zb3VyY2VfdHJlZShzcmNfZGlyLCBkZXN0X2RpciwgZGVzdF9pbmNsdWRlX2RpciwgYXJjaD1Ob25lLCBwcmVmaXg9Tm9uZSwgc3VmZml4PU5vbmUpOgotICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKHNyY19kaXIsIGZvbGxvd2xpbmtzPVRydWUpOgotICAgICAgICByZWxyb290ID0gb3MucGF0aC5yZWxwYXRoKHJvb3Qsc3JjX2RpcikKLQotICAgICAgICBkZWYgbW92ZV9kaXIoYXJjaCwgcHJlZml4PScnLCBzdWZmaXg9JycsIGZpbGVzPVtdKToKLSAgICAgICAgICAgIGZvciBmaWxlIGluIGZpbGVzOgotICAgICAgICAgICAgICAgIGZpbGVfc3VmZml4ID0gTm9uZQotICAgICAgICAgICAgICAgIGlmIGZpbGUuZW5kc3dpdGgoJy5oJyk6Ci0gICAgICAgICAgICAgICAgICAgIGlmIGRlc3RfaW5jbHVkZV9kaXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICBmaWxlX3N1ZmZpeCA9IGFyY2gKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIGFyY2g6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyc19zZWVuW2ZpbGVdLmFkZChhcmNoKQotICAgICAgICAgICAgICAgICAgICAgICAgbW92ZV9maWxlKHJvb3QsIGRlc3RfaW5jbHVkZV9kaXIsIGZpbGUsIGFyY2gsIHByZWZpeD1wcmVmaXgsIHN1ZmZpeD1zdWZmaXgpCi0KLSAgICAgICAgICAgICAgICBlbGlmIGRlc3RfZGlyOgotICAgICAgICAgICAgICAgICAgICBvdXRyb290ID0gb3MucGF0aC5qb2luKGRlc3RfZGlyLCByZWxyb290KQotICAgICAgICAgICAgICAgICAgICBtb3ZlX2ZpbGUocm9vdCwgb3V0cm9vdCwgZmlsZSwgcHJlZml4PXByZWZpeCwgc3VmZml4PXN1ZmZpeCkKLQotICAgICAgICBpZiByZWxyb290ID09ICcuJzoKLSAgICAgICAgICAgIG1vdmVfZGlyKGFyY2g9YXJjaCwKLSAgICAgICAgICAgICAgICAgICAgIGZpbGVzPWZpbGVzLAotICAgICAgICAgICAgICAgICAgICAgcHJlZml4PXByZWZpeCwKLSAgICAgICAgICAgICAgICAgICAgIHN1ZmZpeD1zdWZmaXgpCi0gICAgICAgIGVsaWYgcmVscm9vdCA9PSAnYXJtJzoKLSAgICAgICAgICAgIG1vdmVfZGlyKGFyY2g9J2FybScsCi0gICAgICAgICAgICAgICAgICAgICBwcmVmaXg9IiNpZmRlZiBfX2FybV9fXG5cbiIsCi0gICAgICAgICAgICAgICAgICAgICBzdWZmaXg9IlxuXG4jZW5kaWYiLAotICAgICAgICAgICAgICAgICAgICAgZmlsZXM9ZmlsZXMpCi0gICAgICAgIGVsaWYgcmVscm9vdCA9PSAneDg2JzoKLSAgICAgICAgICAgIG1vdmVfZGlyKGFyY2g9J2kzODYnLAotICAgICAgICAgICAgICAgICAgICAgcHJlZml4PSIjaWYgIWRlZmluZWQoX19hcm1fXykgJiYgZGVmaW5lZChfX2kzODZfXylcblxuIiwKLSAgICAgICAgICAgICAgICAgICAgIHN1ZmZpeD0iXG5cbiNlbmRpZiIsCi0gICAgICAgICAgICAgICAgICAgICBmaWxlcz1maWxlcykKLQotZGVmIGJ1aWxkX3RhcmdldChwbGF0Zm9ybSk6Ci0gICAgZGVmIHhjcnVuX2NtZChjbWQpOgotICAgICAgICByZXR1cm4gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoWyd4Y3J1bicsICctc2RrJywgcGxhdGZvcm0uc2Rrcm9vdCwgJy1maW5kJywgY21kXSkuc3RyaXAoKQotCi0gICAgYnVpbGRfZGlyID0gJ2J1aWxkXycgKyBwbGF0Zm9ybS5uYW1lCi0gICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGJ1aWxkX2Rpcik6Ci0gICAgICAgIG9zLm1ha2VkaXJzKGJ1aWxkX2RpcikKLSAgICAgICAgZW52ID0gZGljdChDQz14Y3J1bl9jbWQoJ2NsYW5nJyksCi0gICAgICAgICAgICAgICAgICAgTEQ9eGNydW5fY21kKCdsZCcpLAotICAgICAgICAgICAgICAgICAgIENGTEFHUz0nLWFyY2ggJXMgLWlzeXNyb290ICVzIC1taXBob25lb3MtdmVyc2lvbi1taW49NC4wJyAlIChwbGF0Zm9ybS5hcmNoLCBwbGF0Zm9ybS5zZGtyb290KSkKLSAgICAgICAgd29ya2luZ19kaXI9b3MuZ2V0Y3dkKCkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgb3MuY2hkaXIoYnVpbGRfZGlyKQotICAgICAgICAgICAgc3VicHJvY2Vzcy5jaGVja19jYWxsKFsnLi4vY29uZmlndXJlJywgJy1ob3N0JywgcGxhdGZvcm0udHJpcGxlXSwgZW52PWVudikKLSAgICAgICAgICAgIG1vdmVfc291cmNlX3RyZWUoJy4nLCBOb25lLCAnLi4vaW9zL2luY2x1ZGUnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmNoPXBsYXRmb3JtLmFyY2gsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeD1wbGF0Zm9ybS5wcmVmaXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1ZmZpeD1wbGF0Zm9ybS5zdWZmaXgpCi0gICAgICAgICAgICBtb3ZlX3NvdXJjZV90cmVlKCcuL2luY2x1ZGUnLCBOb25lLCAnLi4vaW9zL2luY2x1ZGUnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyY2g9cGxhdGZvcm0uYXJjaCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXg9cGxhdGZvcm0ucHJlZml4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1ZmZpeD1wbGF0Zm9ybS5zdWZmaXgpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBvcy5jaGRpcih3b3JraW5nX2RpcikKLQotICAgICAgICBmb3IgaGVhZGVyX25hbWUsIGFyY2hzIGluIGhlYWRlcnNfc2Vlbi5pdGVyaXRlbXMoKToKLSAgICAgICAgICAgIGJhc2VuYW1lLCBzdWZmaXggPSBvcy5wYXRoLnNwbGl0ZXh0KGhlYWRlcl9uYW1lKQotCi1kZWYgbWFpbigpOgotICAgIG1vdmVfc291cmNlX3RyZWUoJ3NyYycsICdpb3Mvc3JjJywgJ2lvcy9pbmNsdWRlJykKLSAgICBtb3ZlX3NvdXJjZV90cmVlKCdpbmNsdWRlJywgTm9uZSwgJ2lvcy9pbmNsdWRlJykKLSAgICBidWlsZF90YXJnZXQoc2ltdWxhdG9yX3BsYXRmb3JtKQotICAgIGJ1aWxkX3RhcmdldChkZXZpY2VfcGxhdGZvcm0pCi0KLSAgICBmb3IgaGVhZGVyX25hbWUsIGFyY2hzIGluIGhlYWRlcnNfc2Vlbi5pdGVyaXRlbXMoKToKLSAgICAgICAgYmFzZW5hbWUsIHN1ZmZpeCA9IG9zLnBhdGguc3BsaXRleHQoaGVhZGVyX25hbWUpCi0gICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oJ2lvcy9pbmNsdWRlJywgaGVhZGVyX25hbWUpLCAndycpIGFzIGhlYWRlcjoKLSAgICAgICAgICAgIGZvciBhcmNoIGluIGFyY2hzOgotICAgICAgICAgICAgICAgIGhlYWRlci53cml0ZSgnI2luY2x1ZGUgPCVzXyVzJXM+XG4nICUgKGJhc2VuYW1lLCBhcmNoLCBzdWZmaXgpKQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9nZW5lcmF0ZS1vc3gtc291cmNlLWFuZC1oZWFkZXJzLnB5IGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9nZW5lcmF0ZS1vc3gtc291cmNlLWFuZC1oZWFkZXJzLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA2NDMxM2MxLi4wMDAwMDAwCi0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvZ2VuZXJhdGUtb3N4LXNvdXJjZS1hbmQtaGVhZGVycy5weQorKysgL2Rldi9udWxsCkBAIC0xLDE1MyArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KLWltcG9ydCBzdWJwcm9jZXNzCi1pbXBvcnQgcmUKLWltcG9ydCBvcwotaW1wb3J0IGVycm5vCi1pbXBvcnQgY29sbGVjdGlvbnMKLWltcG9ydCBzeXMKLQotY2xhc3MgUGxhdGZvcm0ob2JqZWN0KToKLSAgICBwYXNzCi0KLXNka19yZSA9IHJlLmNvbXBpbGUocicuKi1zZGsgKFthLXpBLVowLTkuXSopJykKLQotZGVmIHNka2luZm8oc2RrbmFtZSk6Ci0gICAgcmV0ID0ge30KLSAgICBmb3IgbGluZSBpbiBzdWJwcm9jZXNzLlBvcGVuKFsneGNvZGVidWlsZCcsICctc2RrJywgc2RrbmFtZSwgJy12ZXJzaW9uJ10sIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpLnN0ZG91dDoKLSAgICAgICAga3YgPSBsaW5lLnN0cmlwKCkuc3BsaXQoJzogJywgMSkKLSAgICAgICAgaWYgbGVuKGt2KSA9PSAyOgotICAgICAgICAgICAgayx2ID0ga3YKLSAgICAgICAgICAgIHJldFtrXSA9IHYKLSAgICByZXR1cm4gcmV0Ci0KLWRlc2t0b3Bfc2RrX2luZm8gPSBzZGtpbmZvKCdtYWNvc3gnKQotCi1kZWYgbGF0ZXN0X3Nka3MoKToKLSAgICBsYXRlc3RfZGVza3RvcCA9IE5vbmUKLSAgICBmb3IgbGluZSBpbiBzdWJwcm9jZXNzLlBvcGVuKFsneGNvZGVidWlsZCcsICctc2hvd3Nka3MnXSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkuc3Rkb3V0OgotICAgICAgICBtYXRjaCA9IHNka19yZS5tYXRjaChsaW5lKQotICAgICAgICBpZiBtYXRjaDoKLSAgICAgICAgICAgIGlmICdPUyBYJyBpbiBsaW5lOgotICAgICAgICAgICAgICAgIGxhdGVzdF9kZXNrdG9wID0gbWF0Y2guZ3JvdXAoMSkKLQotICAgIHJldHVybiBsYXRlc3RfZGVza3RvcAotCi1kZXNrdG9wX3NkayA9IGxhdGVzdF9zZGtzKCkKLQotY2xhc3MgZGVza3RvcF9wbGF0Zm9ybV8zMihQbGF0Zm9ybSk6Ci0gICAgc2RrPSdtYWNvc3gnCi0gICAgYXJjaCA9ICdpMzg2JwotICAgIG5hbWUgPSAnbWFjMzInCi0gICAgdHJpcGxlID0gJ2kzODYtYXBwbGUtZGFyd2luMTAnCi0gICAgc2Rrcm9vdCA9IGRlc2t0b3Bfc2RrX2luZm9bJ1BhdGgnXQotCi0gICAgcHJlZml4ID0gIiNpZiBkZWZpbmVkKF9faTM4Nl9fKSAmJiAhZGVmaW5lZChfX3g4Nl82NF9fKVxuXG4iCi0gICAgc3VmZml4ID0gIlxuXG4jZW5kaWYiCi0KLWNsYXNzIGRlc2t0b3BfcGxhdGZvcm1fNjQoUGxhdGZvcm0pOgotICAgIHNkaz0nbWFjb3N4JwotICAgIGFyY2ggPSAneDg2XzY0JwotICAgIG5hbWUgPSAnbWFjJwotICAgIHRyaXBsZSA9ICd4ODZfNjQtYXBwbGUtZGFyd2luMTAnCi0gICAgc2Rrcm9vdCA9IGRlc2t0b3Bfc2RrX2luZm9bJ1BhdGgnXQotCi0gICAgcHJlZml4ID0gIiNpZiAhZGVmaW5lZChfX2kzODZfXykgJiYgZGVmaW5lZChfX3g4Nl82NF9fKVxuXG4iCi0gICAgc3VmZml4ID0gIlxuXG4jZW5kaWYiCi0KLWRlZiBtb3ZlX2ZpbGUoc3JjX2RpciwgZHN0X2RpciwgZmlsZW5hbWUsIGZpbGVfc3VmZml4PU5vbmUsIHByZWZpeD0nJywgc3VmZml4PScnKToKLSAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZHN0X2Rpcik6Ci0gICAgICAgIG9zLm1ha2VkaXJzKGRzdF9kaXIpCi0KLSAgICBvdXRfZmlsZW5hbWUgPSBmaWxlbmFtZQotCi0gICAgaWYgZmlsZV9zdWZmaXg6Ci0gICAgICAgIHNwbGl0X25hbWUgPSBvcy5wYXRoLnNwbGl0ZXh0KGZpbGVuYW1lKQotICAgICAgICBvdXRfZmlsZW5hbWUgPSAgIiVzXyVzJXMiICUgKHNwbGl0X25hbWVbMF0sIGZpbGVfc3VmZml4LCBzcGxpdF9uYW1lWzFdKQotCi0gICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihzcmNfZGlyLCBmaWxlbmFtZSkpIGFzIGluX2ZpbGU6Ci0gICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oZHN0X2Rpciwgb3V0X2ZpbGVuYW1lKSwgJ3cnKSBhcyBvdXRfZmlsZToKLSAgICAgICAgICAgIGlmIHByZWZpeDoKLSAgICAgICAgICAgICAgICBvdXRfZmlsZS53cml0ZShwcmVmaXgpCi0KLSAgICAgICAgICAgIG91dF9maWxlLndyaXRlKGluX2ZpbGUucmVhZCgpKQotCi0gICAgICAgICAgICBpZiBzdWZmaXg6Ci0gICAgICAgICAgICAgICAgb3V0X2ZpbGUud3JpdGUoc3VmZml4KQotCi1oZWFkZXJzX3NlZW4gPSBjb2xsZWN0aW9ucy5kZWZhdWx0ZGljdChzZXQpCi0KLWRlZiBtb3ZlX3NvdXJjZV90cmVlKHNyY19kaXIsIGRlc3RfZGlyLCBkZXN0X2luY2x1ZGVfZGlyLCBhcmNoPU5vbmUsIHByZWZpeD1Ob25lLCBzdWZmaXg9Tm9uZSk6Ci0gICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsoc3JjX2RpciwgZm9sbG93bGlua3M9VHJ1ZSk6Ci0gICAgICAgIHJlbHJvb3QgPSBvcy5wYXRoLnJlbHBhdGgocm9vdCxzcmNfZGlyKQotCi0gICAgICAgIGRlZiBtb3ZlX2RpcihhcmNoLCBwcmVmaXg9JycsIHN1ZmZpeD0nJywgZmlsZXM9W10pOgotICAgICAgICAgICAgZm9yIGZpbGUgaW4gZmlsZXM6Ci0gICAgICAgICAgICAgICAgZmlsZV9zdWZmaXggPSBOb25lCi0gICAgICAgICAgICAgICAgaWYgZmlsZS5lbmRzd2l0aCgnLmgnKToKLSAgICAgICAgICAgICAgICAgICAgaWYgZGVzdF9pbmNsdWRlX2RpcjoKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfc3VmZml4ID0gYXJjaAotICAgICAgICAgICAgICAgICAgICAgICAgaWYgYXJjaDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzX3NlZW5bZmlsZV0uYWRkKGFyY2gpCi0gICAgICAgICAgICAgICAgICAgICAgICBtb3ZlX2ZpbGUocm9vdCwgZGVzdF9pbmNsdWRlX2RpciwgZmlsZSwgYXJjaCwgcHJlZml4PXByZWZpeCwgc3VmZml4PXN1ZmZpeCkKLQotICAgICAgICAgICAgICAgIGVsaWYgZGVzdF9kaXI6Ci0gICAgICAgICAgICAgICAgICAgIG91dHJvb3QgPSBvcy5wYXRoLmpvaW4oZGVzdF9kaXIsIHJlbHJvb3QpCi0gICAgICAgICAgICAgICAgICAgIG1vdmVfZmlsZShyb290LCBvdXRyb290LCBmaWxlLCBwcmVmaXg9cHJlZml4LCBzdWZmaXg9c3VmZml4KQotCi0gICAgICAgIGlmIHJlbHJvb3QgPT0gJy4nOgotICAgICAgICAgICAgbW92ZV9kaXIoYXJjaD1hcmNoLAotICAgICAgICAgICAgICAgICAgICAgZmlsZXM9ZmlsZXMsCi0gICAgICAgICAgICAgICAgICAgICBwcmVmaXg9cHJlZml4LAotICAgICAgICAgICAgICAgICAgICAgc3VmZml4PXN1ZmZpeCkKLSAgICAgICAgZWxpZiByZWxyb290ID09ICd4ODYnOgotICAgICAgICAgICAgbW92ZV9kaXIoYXJjaD0naTM4NicsCi0gICAgICAgICAgICAgICAgICAgICBwcmVmaXg9IiNpZiBkZWZpbmVkKF9faTM4Nl9fKSAmJiAhZGVmaW5lZChfX3g4Nl82NF9fKVxuXG4iLAotICAgICAgICAgICAgICAgICAgICAgc3VmZml4PSJcblxuI2VuZGlmIiwKLSAgICAgICAgICAgICAgICAgICAgIGZpbGVzPWZpbGVzKQotICAgICAgICAgICAgbW92ZV9kaXIoYXJjaD0neDg2XzY0JywKLSAgICAgICAgICAgICAgICAgICAgIHByZWZpeD0iI2lmICFkZWZpbmVkKF9faTM4Nl9fKSAmJiBkZWZpbmVkKF9feDg2XzY0X18pXG5cbiIsCi0gICAgICAgICAgICAgICAgICAgICBzdWZmaXg9IlxuXG4jZW5kaWYiLAotICAgICAgICAgICAgICAgICAgICAgZmlsZXM9ZmlsZXMpCi0KLWRlZiBidWlsZF90YXJnZXQocGxhdGZvcm0pOgotICAgIGRlZiB4Y3J1bl9jbWQoY21kKToKLSAgICAgICAgcmV0dXJuIHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KFsneGNydW4nLCAnLXNkaycsIHBsYXRmb3JtLnNka3Jvb3QsICctZmluZCcsIGNtZF0pLnN0cmlwKCkKLQotICAgIGJ1aWxkX2RpciA9ICdidWlsZF8nICsgcGxhdGZvcm0ubmFtZQotICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhidWlsZF9kaXIpOgotICAgICAgICBvcy5tYWtlZGlycyhidWlsZF9kaXIpCi0gICAgICAgIGVudiA9IGRpY3QoQ0M9eGNydW5fY21kKCdjbGFuZycpLAotICAgICAgICAgICAgICAgICAgIExEPXhjcnVuX2NtZCgnbGQnKSwKLSAgICAgICAgICAgICAgICAgICBDRkxBR1M9Jy1hcmNoICVzIC1pc3lzcm9vdCAlcyAtbW1hY29zeC12ZXJzaW9uLW1pbj0xMC42JyAlIChwbGF0Zm9ybS5hcmNoLCBwbGF0Zm9ybS5zZGtyb290KSkKLSAgICAgICAgd29ya2luZ19kaXI9b3MuZ2V0Y3dkKCkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgb3MuY2hkaXIoYnVpbGRfZGlyKQotICAgICAgICAgICAgc3VicHJvY2Vzcy5jaGVja19jYWxsKFsnLi4vY29uZmlndXJlJywgJy1ob3N0JywgcGxhdGZvcm0udHJpcGxlXSwgZW52PWVudikKLSAgICAgICAgICAgIG1vdmVfc291cmNlX3RyZWUoJy4nLCBOb25lLCAnLi4vb3N4L2luY2x1ZGUnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmNoPXBsYXRmb3JtLmFyY2gsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeD1wbGF0Zm9ybS5wcmVmaXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1ZmZpeD1wbGF0Zm9ybS5zdWZmaXgpCi0gICAgICAgICAgICBtb3ZlX3NvdXJjZV90cmVlKCcuL2luY2x1ZGUnLCBOb25lLCAnLi4vb3N4L2luY2x1ZGUnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmNoPXBsYXRmb3JtLmFyY2gsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeD1wbGF0Zm9ybS5wcmVmaXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1ZmZpeD1wbGF0Zm9ybS5zdWZmaXgpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBvcy5jaGRpcih3b3JraW5nX2RpcikKLQotICAgICAgICBmb3IgaGVhZGVyX25hbWUsIGFyY2hzIGluIGhlYWRlcnNfc2Vlbi5pdGVyaXRlbXMoKToKLSAgICAgICAgICAgIGJhc2VuYW1lLCBzdWZmaXggPSBvcy5wYXRoLnNwbGl0ZXh0KGhlYWRlcl9uYW1lKQotCi1kZWYgbWFpbigpOgotICAgIG1vdmVfc291cmNlX3RyZWUoJ3NyYycsICdvc3gvc3JjJywgJ29zeC9pbmNsdWRlJykKLSAgICBtb3ZlX3NvdXJjZV90cmVlKCdpbmNsdWRlJywgTm9uZSwgJ29zeC9pbmNsdWRlJykKLSAgICBidWlsZF90YXJnZXQoZGVza3RvcF9wbGF0Zm9ybV8zMikKLSAgICBidWlsZF90YXJnZXQoZGVza3RvcF9wbGF0Zm9ybV82NCkKLQotICAgIGZvciBoZWFkZXJfbmFtZSwgYXJjaHMgaW4gaGVhZGVyc19zZWVuLml0ZXJpdGVtcygpOgotICAgICAgICBiYXNlbmFtZSwgc3VmZml4ID0gb3MucGF0aC5zcGxpdGV4dChoZWFkZXJfbmFtZSkKLSAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbignb3N4L2luY2x1ZGUnLCBoZWFkZXJfbmFtZSksICd3JykgYXMgaGVhZGVyOgotICAgICAgICAgICAgZm9yIGFyY2ggaW4gYXJjaHM6Ci0gICAgICAgICAgICAgICAgaGVhZGVyLndyaXRlKCcjaW5jbHVkZSA8JXNfJXMlcz5cbicgJSAoYmFzZW5hbWUsIGFyY2gsIHN1ZmZpeCkpCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgbWFpbigpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2luY2x1ZGUvTWFrZWZpbGUuaW4gYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2luY2x1ZGUvTWFrZWZpbGUuaW4KaW5kZXggMmMzNmUzNi4uOWQ3NDdlOCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9pbmNsdWRlL01ha2VmaWxlLmluCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvaW5jbHVkZS9NYWtlZmlsZS5pbgpAQCAtMSw3ICsxLDcgQEAKLSMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTIuMiBmcm9tIE1ha2VmaWxlLmFtLgorIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xMy40IGZyb20gTWFrZWZpbGUuYW0uCiAjIEBjb25maWd1cmVfaW5wdXRACiAKLSMgQ29weXJpZ2h0IChDKSAxOTk0LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIENvcHlyaWdodCAoQykgMTk5NC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogCiAjIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgogIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LApAQCAtMTUsMjMgKzE1LDUxIEBACiBAU0VUX01BS0VACiAKIFZQQVRIID0gQHNyY2RpckAKLWFtX19tYWtlX2RyeXJ1biA9IFwKLSAgeyBcCi0gICAgYW1fX2RyeT1ubzsgXAorYW1fX2lzX2dudV9tYWtlID0gdGVzdCAtbiAnJChNQUtFRklMRV9MSVNUKScgJiYgdGVzdCAtbiAnJChNQUtFTEVWRUwpJworYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbiA9IFwKKyAgY2FzZSAkJHt0YXJnZXRfb3B0aW9uLX0gaW4gXAorICAgICAgPykgOzsgXAorICAgICAgKikgZWNobyAiYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbjogaW50ZXJuYWwgZXJyb3I6IGludmFsaWQiIFwKKyAgICAgICAgICAgICAgInRhcmdldCBvcHRpb24gJyQke3RhcmdldF9vcHRpb24tfScgc3BlY2lmaWVkIiA+JjI7IFwKKyAgICAgICAgIGV4aXQgMTs7IFwKKyAgZXNhYzsgXAorICBoYXNfb3B0PW5vOyBcCisgIHNhbmVfbWFrZWZsYWdzPSQkTUFLRUZMQUdTOyBcCisgIGlmICQoYW1fX2lzX2dudV9tYWtlKTsgdGhlbiBcCisgICAgc2FuZV9tYWtlZmxhZ3M9JCRNRkxBR1M7IFwKKyAgZWxzZSBcCiAgICAgY2FzZSAkJE1BS0VGTEFHUyBpbiBcCiAgICAgICAqXFxbXCBcCV0qKSBcCi0gICAgICAgIGVjaG8gJ2FtLS1lY2hvOiA7IEBlY2hvICJBTSIgIE9LJyB8ICQoTUFLRSkgLWYgLSAyPi9kZXYvbnVsbCBcCi0gICAgICAgICAgfCBncmVwICdeQU0gT0skJCcgPi9kZXYvbnVsbCB8fCBhbV9fZHJ5PXllczs7IFwKLSAgICAgICopIFwKLSAgICAgICAgZm9yIGFtX19mbGcgaW4gJCRNQUtFRkxBR1M7IGRvIFwKLSAgICAgICAgICBjYXNlICQkYW1fX2ZsZyBpbiBcCi0gICAgICAgICAgICAqPSp8LS0qKSA7OyBcCi0gICAgICAgICAgICAqbiopIGFtX19kcnk9eWVzOyBicmVhazs7IFwKLSAgICAgICAgICBlc2FjOyBcCi0gICAgICAgIGRvbmU7OyBcCisgICAgICAgIGJzPVxcOyBcCisgICAgICAgIHNhbmVfbWFrZWZsYWdzPWBwcmludGYgJyVzXG4nICIkJE1BS0VGTEFHUyIgXAorICAgICAgICAgIHwgc2VkICJzLyQkYnMkJGJzWyQkYnMgJCRicwldKi8vZyJgOzsgXAogICAgIGVzYWM7IFwKLSAgICB0ZXN0ICQkYW1fX2RyeSA9IHllczsgXAotICB9CisgIGZpOyBcCisgIHNraXBfbmV4dD1ubzsgXAorICBzdHJpcF90cmFpbG9wdCAoKSBcCisgIHsgXAorICAgIGZsZz1gcHJpbnRmICclc1xuJyAiJCRmbGciIHwgc2VkICJzLyQkMS4qJCQvLyJgOyBcCisgIH07IFwKKyAgZm9yIGZsZyBpbiAkJHNhbmVfbWFrZWZsYWdzOyBkbyBcCisgICAgdGVzdCAkJHNraXBfbmV4dCA9IHllcyAmJiB7IHNraXBfbmV4dD1ubzsgY29udGludWU7IH07IFwKKyAgICBjYXNlICQkZmxnIGluIFwKKyAgICAgICo9KnwtLSopIGNvbnRpbnVlOzsgXAorICAgICAgICAtKkkpIHN0cmlwX3RyYWlsb3B0ICdJJzsgc2tpcF9uZXh0PXllczs7IFwKKyAgICAgIC0qST8qKSBzdHJpcF90cmFpbG9wdCAnSSc7OyBcCisgICAgICAgIC0qTykgc3RyaXBfdHJhaWxvcHQgJ08nOyBza2lwX25leHQ9eWVzOzsgXAorICAgICAgLSpPPyopIHN0cmlwX3RyYWlsb3B0ICdPJzs7IFwKKyAgICAgICAgLSpsKSBzdHJpcF90cmFpbG9wdCAnbCc7IHNraXBfbmV4dD15ZXM7OyBcCisgICAgICAtKmw/Kikgc3RyaXBfdHJhaWxvcHQgJ2wnOzsgXAorICAgICAgLVtkRURtXSkgc2tpcF9uZXh0PXllczs7IFwKKyAgICAgIC1bSlRdKSBza2lwX25leHQ9eWVzOzsgXAorICAgIGVzYWM7IFwKKyAgICBjYXNlICQkZmxnIGluIFwKKyAgICAgICokJHRhcmdldF9vcHRpb24qKSBoYXNfb3B0PXllczsgYnJlYWs7OyBcCisgICAgZXNhYzsgXAorICBkb25lOyBcCisgIHRlc3QgJCRoYXNfb3B0ID0geWVzCithbV9fbWFrZV9kcnlydW4gPSAodGFyZ2V0X29wdGlvbj1uOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQorYW1fX21ha2Vfa2VlcGdvaW5nID0gKHRhcmdldF9vcHRpb249azsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKIHBrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAogcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACiBwa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACkBAIC01Miw3ICs4MCw3IEBACiBob3N0X3RyaXBsZXQgPSBAaG9zdEAKIHRhcmdldF90cmlwbGV0ID0gQHRhcmdldEAKIHN1YmRpciA9IGluY2x1ZGUKLURJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmFtICQoc3JjZGlyKS9NYWtlZmlsZS5pbiBcCitESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHNyY2RpcikvTWFrZWZpbGUuYW0gXAogCSQoc3JjZGlyKS9mZmkuaC5pbgogQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAogYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvbTQvYXNtY2ZpLm00IFwKQEAgLTc1LDYgKzEwMywxOCBAQAogQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9mZmljb25maWcuaAogQ09ORklHX0NMRUFOX0ZJTEVTID0gZmZpLmggZmZpdGFyZ2V0LmgKIENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9CitBTV9WX1AgPSAkKGFtX192X1BfQEFNX1ZAKQorYW1fX3ZfUF8gPSAkKGFtX192X1BfQEFNX0RFRkFVTFRfVkApCithbV9fdl9QXzAgPSBmYWxzZQorYW1fX3ZfUF8xID0gOgorQU1fVl9HRU4gPSAkKGFtX192X0dFTl9AQU1fVkApCithbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fQEFNX0RFRkFVTFRfVkApCithbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICAgIiAkQDsKK2FtX192X0dFTl8xID0gCitBTV9WX2F0ID0gJChhbV9fdl9hdF9AQU1fVkApCithbV9fdl9hdF8gPSAkKGFtX192X2F0X0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfYXRfMCA9IEAKK2FtX192X2F0XzEgPSAKIFNPVVJDRVMgPQogRElTVF9TT1VSQ0VTID0KIGFtX19jYW5fcnVuX2luc3RhbGxpbmZvID0gXApAQCAtMTExLDEyICsxNTEsMzAgQEAKICAgfQogYW1fX2luc3RhbGxkaXJzID0gIiQoREVTVERJUikkKGluY2x1ZGVzZGlyKSIKIEhFQURFUlMgPSAkKG5vZGlzdF9pbmNsdWRlc19IRUFERVJTKQorYW1fX3RhZ2dlZF9maWxlcyA9ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKFRBR1NfRklMRVMpICQoTElTUCkKKyMgUmVhZCBhIGxpc3Qgb2YgbmV3bGluZS1zZXBhcmF0ZWQgc3RyaW5ncyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCwKKyMgYW5kIHByaW50IGVhY2ggb2YgdGhlbSBvbmNlLCB3aXRob3V0IGR1cGxpY2F0ZXMuICBJbnB1dCBvcmRlciBpcworIyAqbm90KiBwcmVzZXJ2ZWQuCithbV9fdW5pcXVpZnlfaW5wdXQgPSAkKEFXSykgJ1wKKyAgQkVHSU4geyBub25lbXB0eSA9IDA7IH0gXAorICB7IGl0ZW1zWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGl0ZW1zKSBwcmludCBpOyB9OyB9IFwKKycKKyMgTWFrZSBzdXJlIHRoZSBsaXN0IG9mIHNvdXJjZXMgaXMgdW5pcXVlLiAgVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSwKKyMgZS5nLiwgdGhlIHNhbWUgc291cmNlIGZpbGUgbWlnaHQgYmUgc2hhcmVkIGFtb25nIF9TT1VSQ0VTIHZhcmlhYmxlcworIyBmb3IgZGlmZmVyZW50IHByb2dyYW1zL2xpYnJhcmllcy4KK2FtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMgPSBcCisgIGxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCisgIHVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisgIGRvbmUgfCAkKGFtX191bmlxdWlmeV9pbnB1dClgCiBFVEFHUyA9IGV0YWdzCiBDVEFHUyA9IGN0YWdzCiBESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQogQUNMT0NBTCA9IEBBQ0xPQ0FMQAogQUxMT0NBID0gQEFMTE9DQUAKIEFNVEFSID0gQEFNVEFSQAorQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACiBBTV9MVExERkxBR1MgPSBAQU1fTFRMREZMQUdTQAogQU1fUlVOVEVTVEZMQUdTID0gQEFNX1JVTlRFU1RGTEFHU0AKIEFSID0gQEFSQApAQCAtMTMyLDYgKzE5MCwxMCBAQAogQ0ZMQUdTID0gQENGTEFHU0AKIENQUCA9IEBDUFBACiBDUFBGTEFHUyA9IEBDUFBGTEFHU0AKK0NYWCA9IEBDWFhACitDWFhDUFAgPSBAQ1hYQ1BQQAorQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAorQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACiBDWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAogREVGUyA9IEBERUZTQAogREVQRElSID0gQERFUERJUkAKQEAgLTE0Nyw2ICsyMDksNyBAQAogRkdSRVAgPSBARkdSRVBACiBHUkVQID0gQEdSRVBACiBIQVZFX0xPTkdfRE9VQkxFID0gQEhBVkVfTE9OR19ET1VCTEVACitIQVZFX0xPTkdfRE9VQkxFX1ZBUklBTlQgPSBASEFWRV9MT05HX0RPVUJMRV9WQVJJQU5UQAogSU5TVEFMTCA9IEBJTlNUQUxMQAogSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKIElOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACkBAIC0xOTMsNiArMjU2LDcgQEAKIGFic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAogYWNfY3RfQVIgPSBAYWNfY3RfQVJACiBhY19jdF9DQyA9IEBhY19jdF9DQ0AKK2FjX2N0X0NYWCA9IEBhY19jdF9DWFhACiBhY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACiBhbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKIGFtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACkBAIC0zMTUsMjYgKzM3OSwxNSBAQAogCWZpbGVzPWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRwOyBkb25lIHwgc2VkIC1lICdzfF4uKi98fCdgOyBcCiAJZGlyPSckKERFU1RESVIpJChpbmNsdWRlc2RpciknOyAkKGFtX191bmluc3RhbGxfZmlsZXNfZnJvbV9kaXIpCiAKLUlEOiAkKEhFQURFUlMpICQoU09VUkNFUykgJChMSVNQKSAkKFRBR1NfRklMRVMpCi0JbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKLQl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAotCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKLQkgIGRvbmUgfCBcCi0JICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCi0JICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCi0JbWtpZCAtZklEICQkdW5pcXVlCi10YWdzOiBUQUdTCitJRDogJChhbV9fdGFnZ2VkX2ZpbGVzKQorCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IG1raWQgLWZJRCAkJHVuaXF1ZQordGFnczogdGFncy1hbQorVEFHUzogdGFncwogCi1UQUdTOiAgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCi0JCSQoVEFHU19GSUxFUykgJChMSVNQKQordGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQogCXNldCB4OyBcCiAJaGVyZT1gcHdkYDsgXAotCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAotCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0JICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAotCSAgZG9uZSB8IFwKLQkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKLQkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKKwkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCiAJc2hpZnQ7IFwKIAlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCQqJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAogCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXApAQCAtMzQ2LDE1ICszOTksMTEgQEAKIAkgICAgICAkJHVuaXF1ZTsgXAogCSAgZmk7IFwKIAlmaQotY3RhZ3M6IENUQUdTCi1DVEFHUzogICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAotCQkkKFRBR1NfRklMRVMpICQoTElTUCkKLQlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKLQl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAotCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKLQkgIGRvbmUgfCBcCi0JICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCi0JICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCitjdGFnczogY3RhZ3MtYW0KKworQ1RBR1M6IGN0YWdzCitjdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQorCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKIAl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR1bmlxdWUiIFwKIAkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKIAkgICAgICQkdW5pcXVlCkBAIC0zNjMsOSArNDEyLDEwIEBACiAJaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKIAkgICYmICQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpIFwKIAkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgIiQkaGVyZSIKK2NzY29wZWxpc3Q6IGNzY29wZWxpc3QtYW0KIAotY3Njb3BlbGlzdDogICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKExJU1ApCi0JbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICQoTElTUCknOyBcCitjc2NvcGVsaXN0LWFtOiAkKGFtX190YWdnZWRfZmlsZXMpCisJbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKIAljYXNlICIkKHNyY2RpcikiIGluIFwKIAkgIFtcXC9dKiB8ID86W1xcL10qKSBzZGlyPSIkKHNyY2RpcikiIDs7IFwKIAkgICopIHNkaXI9JChzdWJkaXIpLyQoc3JjZGlyKSA7OyBcCkBAIC01MTcsMTggKzU2NywxOSBAQAogCiAuTUFLRTogaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCiAKLS5QSE9OWTogQ1RBR1MgR1RBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIFwKLQljbGVhbi1saWJ0b29sIGNzY29wZWxpc3QgY3RhZ3MgZGlzdGNsZWFuIGRpc3RjbGVhbi1nZW5lcmljIFwKLQlkaXN0Y2xlYW4tbGlidG9vbCBkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBcCi0JaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBcCi0JaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIGluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBcCi0JaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIFwKLQlpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gaW5zdGFsbC1ub2Rpc3RfaW5jbHVkZXNIRUFERVJTIFwKLQlpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gXAotCWluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBcCi0JbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gXAotCW1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBwZGYgcGRmLWFtIHBzIHBzLWFtIFwKLQl0YWdzIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0gdW5pbnN0YWxsLW5vZGlzdF9pbmNsdWRlc0hFQURFUlMKKy5QSE9OWTogQ1RBR1MgR1RBR1MgVEFHUyBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgXAorCWNsZWFuLWxpYnRvb2wgY3Njb3BlbGlzdC1hbSBjdGFncyBjdGFncy1hbSBkaXN0Y2xlYW4gXAorCWRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi1saWJ0b29sIGRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIFwKKwlkdmktYW0gaHRtbCBodG1sLWFtIGluZm8gaW5mby1hbSBpbnN0YWxsIGluc3RhbGwtYW0gXAorCWluc3RhbGwtZGF0YSBpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgaW5zdGFsbC1kdmktYW0gXAorCWluc3RhbGwtZXhlYyBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIGluc3RhbGwtaHRtbC1hbSBcCisJaW5zdGFsbC1pbmZvIGluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBcCisJaW5zdGFsbC1ub2Rpc3RfaW5jbHVkZXNIRUFERVJTIGluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIFwKKwlpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgXAorCWluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBtYWludGFpbmVyLWNsZWFuIFwKKwltYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCisJbW9zdGx5Y2xlYW4tbGlidG9vbCBwZGYgcGRmLWFtIHBzIHBzLWFtIHRhZ3MgdGFncy1hbSB1bmluc3RhbGwgXAorCXVuaW5zdGFsbC1hbSB1bmluc3RhbGwtbm9kaXN0X2luY2x1ZGVzSEVBREVSUwogCiAKICMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2luY2x1ZGUvZmZpLmguaW4gYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2luY2x1ZGUvZmZpLmguaW4KaW5kZXggYTUxNTgzYi4uOTNjNzc2ZiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9pbmNsdWRlL2ZmaS5oLmluCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvaW5jbHVkZS9mZmkuaC5pbgpAQCAtMjIxLDYgKzIyMSwxMSBAQAogI2VuZGlmCiB9IGZmaV9jaWY7CiAKKyNpZiBIQVZFX0xPTkdfRE9VQkxFX1ZBUklBTlQKKy8qIFVzZWQgdG8gYWRqdXN0IHNpemUvYWxpZ25tZW50IG9mIGZmaSB0eXBlcy4gICovCit2b2lkIGZmaV9wcmVwX3R5cGVzIChmZmlfYWJpIGFiaSk7CisjIGVuZGlmCisKIC8qIFVzZWQgaW50ZXJuYWxseSwgYnV0IG92ZXJyaWRkZW4gYnkgc29tZSBhcmNoaXRlY3R1cmVzICovCiBmZmlfc3RhdHVzIGZmaV9wcmVwX2NpZl9jb3JlKGZmaV9jaWYgKmNpZiwKIAkJCSAgICAgZmZpX2FiaSBhYmksCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2luY2x1ZGUvZmZpX2NvbW1vbi5oIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9pbmNsdWRlL2ZmaV9jb21tb24uaAppbmRleCA2NTBjYTY5Li4zN2Y1YTllIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2luY2x1ZGUvZmZpX2NvbW1vbi5oCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvaW5jbHVkZS9mZmlfY29tbW9uLmgKQEAgLTEsNSArMSw1IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgZmZpX2NvbW1vbi5oIC0gQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyICBBbnRob255IEdyZWVuCisgICBmZmlfY29tbW9uLmggLSBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMgIEFudGhvbnkgR3JlZW4KICAgICAgICAgICAgICAgICAgIENvcHlyaWdodCAoQykgMjAwNyAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMKICAgICAgICAgICAgICAgICAgIENvcHlyaWdodCAoYykgMTk5NiAgUmVkIEhhdCwgSW5jLgogICAgICAgICAgICAgICAgICAgCkBAIC0xOSwxMCArMTksMTQgQEAKIC8qIERvIG5vdCBtb3ZlIHRoaXMuIFNvbWUgdmVyc2lvbnMgb2YgQUlYIGFyZSB2ZXJ5IHBpY2t5IGFib3V0IHdoZXJlCiAgICB0aGlzIGlzIHBvc2l0aW9uZWQuICovCiAjaWZkZWYgX19HTlVDX18KLS8qIG1pbmd3NjQgZGVmaW5lcyB0aGlzIGFscmVhZHkgaW4gbWFsbG9jLmguICovCi0jaWZuZGVmIGFsbG9jYQotIyBkZWZpbmUgYWxsb2NhIF9fYnVpbHRpbl9hbGxvY2EKLSNlbmRpZgorIyBpZiBIQVZFX0FMTE9DQV9ICisjICBpbmNsdWRlIDxhbGxvY2EuaD4KKyMgZWxzZQorICAvKiBtaW5ndzY0IGRlZmluZXMgdGhpcyBhbHJlYWR5IGluIG1hbGxvYy5oLiAqLworIyAgaWZuZGVmIGFsbG9jYQorIyAgICBkZWZpbmUgYWxsb2NhIF9fYnVpbHRpbl9hbGxvY2EKKyMgIGVuZGlmCisjIGVuZGlmCiAjIGRlZmluZSBNQVlCRV9VTlVTRUQgX19hdHRyaWJ1dGVfXygoX191bnVzZWRfXykpCiAjZWxzZQogIyBkZWZpbmUgTUFZQkVfVU5VU0VECkBAIC0zMCwxNyArMzQsMTcgQEAKICMgIGluY2x1ZGUgPGFsbG9jYS5oPgogIyBlbHNlCiAjICBpZmRlZiBfQUlYCi0gI3ByYWdtYSBhbGxvY2EKKyMgICBwcmFnbWEgYWxsb2NhCiAjICBlbHNlCiAjICAgaWZuZGVmIGFsbG9jYSAvKiBwcmVkZWZpbmVkIGJ5IEhQIGNjICtPbGliY2FsbHMgKi8KICMgICAgaWZkZWYgX01TQ19WRVIKICMgICAgIGRlZmluZSBhbGxvY2EgX2FsbG9jYQogIyAgICBlbHNlCiBjaGFyICphbGxvY2EgKCk7Ci0jICAgIGVuZGlmCiAjICAgZW5kaWYKICMgIGVuZGlmCiAjIGVuZGlmCisjIGVuZGlmCiAjZW5kaWYKIAogLyogQ2hlY2sgZm9yIHRoZSBleGlzdGVuY2Ugb2YgbWVtY3B5LiAqLwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9pbnN0YWxsLXNoIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9pbnN0YWxsLXNoCmluZGV4IDY3ODFiOTguLjM3N2JiODYgMTAwNzU1Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvaW5zdGFsbC1zaAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2luc3RhbGwtc2gKQEAgLTEsNyArMSw3IEBACiAjIS9iaW4vc2gKICMgaW5zdGFsbCAtIGluc3RhbGwgYSBwcm9ncmFtLCBzY3JpcHQsIG9yIGRhdGFmaWxlCiAKLXNjcmlwdHZlcnNpb249MjAwOS0wNC0yOC4yMTsgIyBVVEMKK3NjcmlwdHZlcnNpb249MjAxMS0xMS0yMC4wNzsgIyBVVEMKIAogIyBUaGlzIG9yaWdpbmF0ZXMgZnJvbSBYMTFSNSAobWl0L3V0aWwvc2NyaXB0cy9pbnN0YWxsLnNoKSwgd2hpY2ggd2FzCiAjIGxhdGVyIHJlbGVhc2VkIGluIFgxMVI2ICh4Yy9jb25maWcvdXRpbC9pbnN0YWxsLnNoKSB3aXRoIHRoZQpAQCAtMzUsNyArMzUsNyBAQAogIyBGU0YgY2hhbmdlcyB0byB0aGlzIGZpbGUgYXJlIGluIHRoZSBwdWJsaWMgZG9tYWluLgogIwogIyBDYWxsaW5nIHRoaXMgc2NyaXB0IGluc3RhbGwtc2ggaXMgcHJlZmVycmVkIG92ZXIgaW5zdGFsbC5zaCwgdG8gcHJldmVudAotIyBgbWFrZScgaW1wbGljaXQgcnVsZXMgZnJvbSBjcmVhdGluZyBhIGZpbGUgY2FsbGVkIGluc3RhbGwgZnJvbSBpdAorIyAnbWFrZScgaW1wbGljaXQgcnVsZXMgZnJvbSBjcmVhdGluZyBhIGZpbGUgY2FsbGVkIGluc3RhbGwgZnJvbSBpdAogIyB3aGVuIHRoZXJlIGlzIG5vIE1ha2VmaWxlLgogIwogIyBUaGlzIHNjcmlwdCBpcyBjb21wYXRpYmxlIHdpdGggdGhlIEJTRCBpbnN0YWxsIHNjcmlwdCwgYnV0IHdhcyB3cml0dGVuCkBAIC0xNTYsNiArMTU2LDEwIEBACiAgICAgLXMpIHN0cmlwY21kPSRzdHJpcHByb2c7OwogCiAgICAgLXQpIGRzdF9hcmc9JDIKKwkjIFByb3RlY3QgbmFtZXMgcHJvYmxlbWF0aWMgZm9yICd0ZXN0JyBhbmQgb3RoZXIgdXRpbGl0aWVzLgorCWNhc2UgJGRzdF9hcmcgaW4KKwkgIC0qIHwgWz1cKFwpIV0pIGRzdF9hcmc9Li8kZHN0X2FyZzs7CisJZXNhYwogCXNoaWZ0OzsKIAogICAgIC1UKSBub190YXJnZXRfZGlyZWN0b3J5PXRydWU7OwpAQCAtMTg2LDYgKzE5MCwxMCBAQAogICAgIGZpCiAgICAgc2hpZnQgIyBhcmcKICAgICBkc3RfYXJnPSRhcmcKKyAgICAjIFByb3RlY3QgbmFtZXMgcHJvYmxlbWF0aWMgZm9yICd0ZXN0JyBhbmQgb3RoZXIgdXRpbGl0aWVzLgorICAgIGNhc2UgJGRzdF9hcmcgaW4KKyAgICAgIC0qIHwgWz1cKFwpIV0pIGRzdF9hcmc9Li8kZHN0X2FyZzs7CisgICAgZXNhYwogICBkb25lCiBmaQogCkBAIC0xOTQsMTMgKzIwMiwxNyBAQAogICAgIGVjaG8gIiQwOiBubyBpbnB1dCBmaWxlIHNwZWNpZmllZC4iID4mMgogICAgIGV4aXQgMQogICBmaQotICAjIEl0J3MgT0sgdG8gY2FsbCBgaW5zdGFsbC1zaCAtZCcgd2l0aG91dCBhcmd1bWVudC4KKyAgIyBJdCdzIE9LIHRvIGNhbGwgJ2luc3RhbGwtc2ggLWQnIHdpdGhvdXQgYXJndW1lbnQuCiAgICMgVGhpcyBjYW4gaGFwcGVuIHdoZW4gY3JlYXRpbmcgY29uZGl0aW9uYWwgZGlyZWN0b3JpZXMuCiAgIGV4aXQgMAogZmkKIAogaWYgdGVzdCAteiAiJGRpcl9hcmciOyB0aGVuCi0gIHRyYXAgJyhleGl0ICQ/KTsgZXhpdCcgMSAyIDEzIDE1CisgIGRvX2V4aXQ9JyhleGl0ICRyZXQpOyBleGl0ICRyZXQnCisgIHRyYXAgInJldD0xMjk7ICRkb19leGl0IiAxCisgIHRyYXAgInJldD0xMzA7ICRkb19leGl0IiAyCisgIHRyYXAgInJldD0xNDE7ICRkb19leGl0IiAxMworICB0cmFwICJyZXQ9MTQzOyAkZG9fZXhpdCIgMTUKIAogICAjIFNldCB1bWFzayBzbyBhcyBub3QgdG8gY3JlYXRlIHRlbXBzIHdpdGggdG9vLWdlbmVyb3VzIG1vZGVzLgogICAjIEhvd2V2ZXIsICdzdHJpcCcgcmVxdWlyZXMgYm90aCByZWFkIGFuZCB3cml0ZSBhY2Nlc3MgdG8gdGVtcHMuCkBAIC0yMjgsOSArMjQwLDkgQEAKIAogZm9yIHNyYwogZG8KLSAgIyBQcm90ZWN0IG5hbWVzIHN0YXJ0aW5nIHdpdGggYC0nLgorICAjIFByb3RlY3QgbmFtZXMgcHJvYmxlbWF0aWMgZm9yICd0ZXN0JyBhbmQgb3RoZXIgdXRpbGl0aWVzLgogICBjYXNlICRzcmMgaW4KLSAgICAtKikgc3JjPS4vJHNyYzs7CisgICAgLSogfCBbPVwoXCkhXSkgc3JjPS4vJHNyYzs7CiAgIGVzYWMKIAogICBpZiB0ZXN0IC1uICIkZGlyX2FyZyI7IHRoZW4KQEAgLTI1MiwxMiArMjY0LDcgQEAKICAgICAgIGVjaG8gIiQwOiBubyBkZXN0aW5hdGlvbiBzcGVjaWZpZWQuIiA+JjIKICAgICAgIGV4aXQgMQogICAgIGZpCi0KICAgICBkc3Q9JGRzdF9hcmcKLSAgICAjIFByb3RlY3QgbmFtZXMgc3RhcnRpbmcgd2l0aCBgLScuCi0gICAgY2FzZSAkZHN0IGluCi0gICAgICAtKikgZHN0PS4vJGRzdDs7Ci0gICAgZXNhYwogCiAgICAgIyBJZiBkZXN0aW5hdGlvbiBpcyBhIGRpcmVjdG9yeSwgYXBwZW5kIHRoZSBpbnB1dCBmaWxlbmFtZTsgd29uJ3Qgd29yawogICAgICMgaWYgZG91YmxlIHNsYXNoZXMgYXJlbid0IGlnbm9yZWQuCkBAIC0zNDcsNyArMzU0LDcgQEAKIAkgICAgICBpZiB0ZXN0IC16ICIkZGlyX2FyZyIgfHwgewogCQkgICAjIENoZWNrIGZvciBQT1NJWCBpbmNvbXBhdGliaWxpdGllcyB3aXRoIC1tLgogCQkgICAjIEhQLVVYIDExLjIzIGFuZCBJUklYIDYuNSBta2RpciAtbSAtcCBzZXRzIGdyb3VwLSBvcgotCQkgICAjIG90aGVyLXdyaXRlYWJsZSBiaXQgb2YgcGFyZW50IGRpcmVjdG9yeSB3aGVuIGl0IHNob3VsZG4ndC4KKwkJICAgIyBvdGhlci13cml0YWJsZSBiaXQgb2YgcGFyZW50IGRpcmVjdG9yeSB3aGVuIGl0IHNob3VsZG4ndC4KIAkJICAgIyBGcmVlQlNEIDYuMSBta2RpciAtbSAtcCBzZXRzIG1vZGUgb2YgZXhpc3RpbmcgZGlyZWN0b3J5LgogCQkgICBsc19sZF90bXBkaXI9YGxzIC1sZCAiJHRtcGRpciJgCiAJCSAgIGNhc2UgJGxzX2xkX3RtcGRpciBpbgpAQCAtMzg1LDcgKzM5Miw3IEBACiAKICAgICAgIGNhc2UgJGRzdGRpciBpbgogCS8qKSBwcmVmaXg9Jy8nOzsKLQktKikgcHJlZml4PScuLyc7OworCVstPVwoXCkhXSopIHByZWZpeD0nLi8nOzsKIAkqKSAgcHJlZml4PScnOzsKICAgICAgIGVzYWMKIApAQCAtNDAzLDcgKzQxMCw3IEBACiAKICAgICAgIGZvciBkCiAgICAgICBkbwotCXRlc3QgLXogIiRkIiAmJiBjb250aW51ZQorCXRlc3QgWCIkZCIgPSBYICYmIGNvbnRpbnVlCiAKIAlwcmVmaXg9JHByZWZpeCRkCiAJaWYgdGVzdCAtZCAiJHByZWZpeCI7IHRoZW4KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbGliZmZpLnBjLmluIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9saWJmZmkucGMuaW4KaW5kZXggYzJlMWM3Yi4uZWRmNmZkZSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9saWJmZmkucGMuaW4KKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9saWJmZmkucGMuaW4KQEAgLTEsMTAgKzEsMTEgQEAKIHByZWZpeD1AcHJlZml4QAogZXhlY19wcmVmaXg9QGV4ZWNfcHJlZml4QAogbGliZGlyPUBsaWJkaXJACit0b29sZXhlY2xpYmRpcj1AdG9vbGV4ZWNsaWJkaXJACiBpbmNsdWRlZGlyPSR7bGliZGlyfS9AUEFDS0FHRV9OQU1FQC1AUEFDS0FHRV9WRVJTSU9OQC9pbmNsdWRlCiAKIE5hbWU6IEBQQUNLQUdFX05BTUVACiBEZXNjcmlwdGlvbjogTGlicmFyeSBzdXBwb3J0aW5nIEZvcmVpZ24gRnVuY3Rpb24gSW50ZXJmYWNlcwogVmVyc2lvbjogQFBBQ0tBR0VfVkVSU0lPTkAKLUxpYnM6IC1MJHtsaWJkaXJ9IC1sZmZpCitMaWJzOiAtTCR7dG9vbGV4ZWNsaWJkaXJ9IC1sZmZpCiBDZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9saWJmZmkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbGliZmZpLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMTRjMzlhMi4uMWNmMzk2ZiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9saWJmZmkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2xpYmZmaS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC03LDQ3MyArNyw0NDggQEAKIAlvYmplY3RzID0gewogCiAvKiBCZWdpbiBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLwotCQk2QzQzQ0JEQzE1MzRGNzZGMDAxNjIzNjQgLyogZmZpLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QzQzQ0JCRDE1MzRGNzZGMDAxNjIzNjQgLyogZmZpLmMgKi87IH07Ci0JCTZDNDNDQkREMTUzNEY3NkYwMDE2MjM2NCAvKiBzeXN2LlMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QzQzQ0JCRjE1MzRGNzZGMDAxNjIzNjQgLyogc3lzdi5TICovOyB9OwotCQk2QzQzQ0JERTE1MzRGNzZGMDAxNjIzNjQgLyogdHJhbXBvbGluZS5TIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkM0M0NCQzAxNTM0Rjc2RjAwMTYyMzY0IC8qIHRyYW1wb2xpbmUuUyAqLzsgfTsKLQkJNkM0M0NCRTYxNTM0Rjc2RjAwMTYyMzY0IC8qIGRhcndpbi5TIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkM0M0NCQzkxNTM0Rjc2RjAwMTYyMzY0IC8qIGRhcndpbi5TICovOyB9OwotCQk2QzQzQ0JFODE1MzRGNzZGMDAxNjIzNjQgLyogZmZpLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QzQzQ0JDQjE1MzRGNzZGMDAxNjIzNjQgLyogZmZpLmMgKi87IH07Ci0JCTZDNDNDQzFGMTUzNEY3NzgwMDE2MjM2NCAvKiBkYXJ3aW4uUyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZDNDNDQzA1MTUzNEY3NzgwMDE2MjM2NCAvKiBkYXJ3aW4uUyAqLzsgfTsKLQkJNkM0M0NDMjAxNTM0Rjc3ODAwMTYyMzY0IC8qIGRhcndpbjY0LlMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QzQzQ0MwNjE1MzRGNzc4MDAxNjIzNjQgLyogZGFyd2luNjQuUyAqLzsgfTsKLQkJNkM0M0NDMjExNTM0Rjc3ODAwMTYyMzY0IC8qIGZmaS5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkM0M0NDMDcxNTM0Rjc3ODAwMTYyMzY0IC8qIGZmaS5jICovOyB9OwotCQk2QzQzQ0MyMjE1MzRGNzc4MDAxNjIzNjQgLyogZmZpNjQuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZDNDNDQzA4MTUzNEY3NzgwMDE2MjM2NCAvKiBmZmk2NC5jICovOyB9OwotCQk2QzQzQ0MyRjE1MzRGN0JFMDAxNjIzNjQgLyogY2xvc3VyZXMuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZDNDNDQzI4MTUzNEY3QkUwMDE2MjM2NCAvKiBjbG9zdXJlcy5jICovOyB9OwotCQk2QzQzQ0MzMDE1MzRGN0JFMDAxNjIzNjQgLyogY2xvc3VyZXMuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZDNDNDQzI4MTUzNEY3QkUwMDE2MjM2NCAvKiBjbG9zdXJlcy5jICovOyB9OwotCQk2QzQzQ0MzNTE1MzRGN0JFMDAxNjIzNjQgLyogamF2YV9yYXdfYXBpLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QzQzQ0MyQjE1MzRGN0JFMDAxNjIzNjQgLyogamF2YV9yYXdfYXBpLmMgKi87IH07Ci0JCTZDNDNDQzM2MTUzNEY3QkUwMDE2MjM2NCAvKiBqYXZhX3Jhd19hcGkuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZDNDNDQzJCMTUzNEY3QkUwMDE2MjM2NCAvKiBqYXZhX3Jhd19hcGkuYyAqLzsgfTsKLQkJNkM0M0NDMzcxNTM0RjdCRTAwMTYyMzY0IC8qIHByZXBfY2lmLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QzQzQ0MyQzE1MzRGN0JFMDAxNjIzNjQgLyogcHJlcF9jaWYuYyAqLzsgfTsKLQkJNkM0M0NDMzgxNTM0RjdCRTAwMTYyMzY0IC8qIHByZXBfY2lmLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QzQzQ0MyQzE1MzRGN0JFMDAxNjIzNjQgLyogcHJlcF9jaWYuYyAqLzsgfTsKLQkJNkM0M0NDMzkxNTM0RjdCRTAwMTYyMzY0IC8qIHJhd19hcGkuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZDNDNDQzJEMTUzNEY3QkUwMDE2MjM2NCAvKiByYXdfYXBpLmMgKi87IH07Ci0JCTZDNDNDQzNBMTUzNEY3QkUwMDE2MjM2NCAvKiByYXdfYXBpLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QzQzQ0MyRDE1MzRGN0JFMDAxNjIzNjQgLyogcmF3X2FwaS5jICovOyB9OwotCQk2QzQzQ0MzQjE1MzRGN0JFMDAxNjIzNjQgLyogdHlwZXMuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZDNDNDQzJFMTUzNEY3QkUwMDE2MjM2NCAvKiB0eXBlcy5jICovOyB9OwotCQk2QzQzQ0MzQzE1MzRGN0JFMDAxNjIzNjQgLyogdHlwZXMuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZDNDNDQzJFMTUzNEY3QkUwMDE2MjM2NCAvKiB0eXBlcy5jICovOyB9OwotCQk2QzQzQ0M5NzE1MzUwMzI2MDAxNjIzNjQgLyogZmZpLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QzQzQ0M4RDE1MzUwMzI2MDAxNjIzNjQgLyogZmZpLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OwotCQk2QzQzQ0M5ODE1MzUwMzI2MDAxNjIzNjQgLyogZmZpX2NvbW1vbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkM0M0NDOEUxNTM1MDMyNjAwMTYyMzY0IC8qIGZmaV9jb21tb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07Ci0JCTZDNDNDQzk5MTUzNTAzMjYwMDE2MjM2NCAvKiBmZmlfaTM4Ni5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkM0M0NDOEYxNTM1MDMyNjAwMTYyMzY0IC8qIGZmaV9pMzg2LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OwotCQk2QzQzQ0M5QTE1MzUwMzI2MDAxNjIzNjQgLyogZmZpX3g4Nl82NC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkM0M0NDOTAxNTM1MDMyNjAwMTYyMzY0IC8qIGZmaV94ODZfNjQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07Ci0JCTZDNDNDQzlCMTUzNTAzMjYwMDE2MjM2NCAvKiBmZmljb25maWcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZDNDNDQzkxMTUzNTAzMjYwMDE2MjM2NCAvKiBmZmljb25maWcuaCAqLzsgfTsKLQkJNkM0M0NDOUMxNTM1MDMyNjAwMTYyMzY0IC8qIGZmaWNvbmZpZ19pMzg2LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QzQzQ0M5MjE1MzUwMzI2MDAxNjIzNjQgLyogZmZpY29uZmlnX2kzODYuaCAqLzsgfTsKLQkJNkM0M0NDOUQxNTM1MDMyNjAwMTYyMzY0IC8qIGZmaWNvbmZpZ194ODZfNjQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZDNDNDQzkzMTUzNTAzMjYwMDE2MjM2NCAvKiBmZmljb25maWdfeDg2XzY0LmggKi87IH07Ci0JCTZDNDNDQzlFMTUzNTAzMjYwMDE2MjM2NCAvKiBmZml0YXJnZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZDNDNDQzk0MTUzNTAzMjYwMDE2MjM2NCAvKiBmZml0YXJnZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07Ci0JCTZDNDNDQzlGMTUzNTAzMjYwMDE2MjM2NCAvKiBmZml0YXJnZXRfaTM4Ni5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkM0M0NDOTUxNTM1MDMyNjAwMTYyMzY0IC8qIGZmaXRhcmdldF9pMzg2LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OwotCQk2QzQzQ0NBMDE1MzUwMzI2MDAxNjIzNjQgLyogZmZpdGFyZ2V0X3g4Nl82NC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkM0M0NDOTYxNTM1MDMyNjAwMTYyMzY0IC8qIGZmaXRhcmdldF94ODZfNjQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07Ci0JCTZDNDNDQ0FEMTUzNTAzOTYwMDE2MjM2NCAvKiBmZmkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZDNDNDQ0EyMTUzNTAzOTYwMDE2MjM2NCAvKiBmZmkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07Ci0JCTZDNDNDQ0FFMTUzNTAzOTYwMDE2MjM2NCAvKiBmZmlfYXJtdjcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZDNDNDQ0EzMTUzNTAzOTYwMDE2MjM2NCAvKiBmZmlfYXJtdjcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07Ci0JCTZDNDNDQ0FGMTUzNTAzOTYwMDE2MjM2NCAvKiBmZmlfY29tbW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QzQzQ0NBNDE1MzUwMzk2MDAxNjIzNjQgLyogZmZpX2NvbW1vbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKLQkJNkM0M0NDQjAxNTM1MDM5NjAwMTYyMzY0IC8qIGZmaV9pMzg2LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QzQzQ0NBNTE1MzUwMzk2MDAxNjIzNjQgLyogZmZpX2kzODYuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07Ci0JCTZDNDNDQ0IxMTUzNTAzOTYwMDE2MjM2NCAvKiBmZmljb25maWcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZDNDNDQ0E2MTUzNTAzOTYwMDE2MjM2NCAvKiBmZmljb25maWcuaCAqLzsgfTsKLQkJNkM0M0NDQjIxNTM1MDM5NjAwMTYyMzY0IC8qIGZmaWNvbmZpZ19hcm12Ny5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkM0M0NDQTcxNTM1MDM5NjAwMTYyMzY0IC8qIGZmaWNvbmZpZ19hcm12Ny5oICovOyB9OwotCQk2QzQzQ0NCMzE1MzUwMzk2MDAxNjIzNjQgLyogZmZpY29uZmlnX2kzODYuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZDNDNDQ0E4MTUzNTAzOTYwMDE2MjM2NCAvKiBmZmljb25maWdfaTM4Ni5oICovOyB9OwotCQk2QzQzQ0NCNDE1MzUwMzk2MDAxNjIzNjQgLyogZmZpdGFyZ2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QzQzQ0NBOTE1MzUwMzk2MDAxNjIzNjQgLyogZmZpdGFyZ2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OwotCQk2QzQzQ0NCNTE1MzUwMzk2MDAxNjIzNjQgLyogZmZpdGFyZ2V0X2FybS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkM0M0NDQUExNTM1MDM5NjAwMTYyMzY0IC8qIGZmaXRhcmdldF9hcm0uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07Ci0JCTZDNDNDQ0I2MTUzNTAzOTYwMDE2MjM2NCAvKiBmZml0YXJnZXRfYXJtdjcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZDNDNDQ0FCMTUzNTAzOTYwMDE2MjM2NCAvKiBmZml0YXJnZXRfYXJtdjcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07Ci0JCTZDNDNDQ0I3MTUzNTAzOTYwMDE2MjM2NCAvKiBmZml0YXJnZXRfaTM4Ni5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkM0M0NDQUMxNTM1MDM5NjAwMTYyMzY0IC8qIGZmaXRhcmdldF9pMzg2LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OworCQlEQkZBNzE0QTE4N0YxRDg2MDBBNzYyNjIgLyogZmZpLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEQkZBNzEzRTE4N0YxRDg2MDBBNzYyNjIgLyogZmZpLmggKi87IH07CisJCURCRkE3MTRCMTg3RjFEODYwMEE3NjI2MiAvKiBmZmlfY29tbW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEQkZBNzEzRjE4N0YxRDg2MDBBNzYyNjIgLyogZmZpX2NvbW1vbi5oICovOyB9OworCQlEQkZBNzE0QzE4N0YxRDg2MDBBNzYyNjIgLyogZmZpY29uZmlnLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEQkZBNzE0MDE4N0YxRDg2MDBBNzYyNjIgLyogZmZpY29uZmlnLmggKi87IH07CisJCURCRkE3MTREMTg3RjFEODYwMEE3NjI2MiAvKiBmZml0YXJnZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERCRkE3MTQxMTg3RjFEODYwMEE3NjI2MiAvKiBmZml0YXJnZXQuaCAqLzsgfTsKKwkJREJGQTcxNEUxODdGMUQ4NjAwQTc2MjYyIC8qIGNsb3N1cmVzLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEQkZBNzE0MzE4N0YxRDg2MDBBNzYyNjIgLyogY2xvc3VyZXMuYyAqLzsgfTsKKwkJREJGQTcxNEYxODdGMUQ4NjAwQTc2MjYyIC8qIGNsb3N1cmVzLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEQkZBNzE0MzE4N0YxRDg2MDBBNzYyNjIgLyogY2xvc3VyZXMuYyAqLzsgfTsKKwkJREJGQTcxNTYxODdGMUQ4NjAwQTc2MjYyIC8qIHByZXBfY2lmLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEQkZBNzE0NzE4N0YxRDg2MDBBNzYyNjIgLyogcHJlcF9jaWYuYyAqLzsgfTsKKwkJREJGQTcxNTcxODdGMUQ4NjAwQTc2MjYyIC8qIHByZXBfY2lmLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEQkZBNzE0NzE4N0YxRDg2MDBBNzYyNjIgLyogcHJlcF9jaWYuYyAqLzsgfTsKKwkJREJGQTcxNTgxODdGMUQ4NjAwQTc2MjYyIC8qIHJhd19hcGkuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERCRkE3MTQ4MTg3RjFEODYwMEE3NjI2MiAvKiByYXdfYXBpLmMgKi87IH07CisJCURCRkE3MTU5MTg3RjFEODYwMEE3NjI2MiAvKiByYXdfYXBpLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEQkZBNzE0ODE4N0YxRDg2MDBBNzYyNjIgLyogcmF3X2FwaS5jICovOyB9OworCQlEQkZBNzE1QTE4N0YxRDg2MDBBNzYyNjIgLyogdHlwZXMuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERCRkE3MTQ5MTg3RjFEODYwMEE3NjI2MiAvKiB0eXBlcy5jICovOyB9OworCQlEQkZBNzE1QjE4N0YxRDg2MDBBNzYyNjIgLyogdHlwZXMuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERCRkE3MTQ5MTg3RjFEODYwMEE3NjI2MiAvKiB0eXBlcy5jICovOyB9OworCQlEQkZBNzE3NzE4N0YxRDlCMDBBNzYyNjIgLyogZmZpX2FybTY0LmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEQkZBNzE2QzE4N0YxRDlCMDBBNzYyNjIgLyogZmZpX2FybTY0LmMgKi87IH07CisJCURCRkE3MTc4MTg3RjFEOUIwMEE3NjI2MiAvKiBzeXN2X2FybTY0LlMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEQkZBNzE2RDE4N0YxRDlCMDBBNzYyNjIgLyogc3lzdl9hcm02NC5TICovOyB9OworCQlEQkZBNzE3OTE4N0YxRDlCMDBBNzYyNjIgLyogZmZpX2FybXY3LmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEQkZBNzE2RjE4N0YxRDlCMDBBNzYyNjIgLyogZmZpX2FybXY3LmMgKi87IH07CisJCURCRkE3MTdBMTg3RjFEOUIwMEE3NjI2MiAvKiBzeXN2X2FybXY3LlMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEQkZBNzE3MDE4N0YxRDlCMDBBNzYyNjIgLyogc3lzdl9hcm12Ny5TICovOyB9OworCQlEQkZBNzE3QjE4N0YxRDlCMDBBNzYyNjIgLyogdHJhbXBvbGluZV9hcm12Ny5TIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREJGQTcxNzExODdGMUQ5QjAwQTc2MjYyIC8qIHRyYW1wb2xpbmVfYXJtdjcuUyAqLzsgfTsKKwkJREJGQTcxN0MxODdGMUQ5QjAwQTc2MjYyIC8qIGRhcndpbjY0X3g4Nl82NC5TIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREJGQTcxNzMxODdGMUQ5QjAwQTc2MjYyIC8qIGRhcndpbjY0X3g4Nl82NC5TICovOyB9OworCQlEQkZBNzE3RDE4N0YxRDlCMDBBNzYyNjIgLyogZGFyd2luX2kzODYuUyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERCRkE3MTc0MTg3RjFEOUIwMEE3NjI2MiAvKiBkYXJ3aW5faTM4Ni5TICovOyB9OworCQlEQkZBNzE3RTE4N0YxRDlCMDBBNzYyNjIgLyogZmZpNjRfeDg2XzY0LmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEQkZBNzE3NTE4N0YxRDlCMDBBNzYyNjIgLyogZmZpNjRfeDg2XzY0LmMgKi87IH07CisJCURCRkE3MTdGMTg3RjFEOUIwMEE3NjI2MiAvKiBmZmlfaTM4Ni5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREJGQTcxNzYxODdGMUQ5QjAwQTc2MjYyIC8qIGZmaV9pMzg2LmMgKi87IH07CisJCURCRkE3MThFMTg3RjFEQTEwMEE3NjI2MiAvKiBmZmlfaTM4Ni5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREJGQTcxODIxODdGMURBMTAwQTc2MjYyIC8qIGZmaV9pMzg2LmggKi87IH07CisJCURCRkE3MThGMTg3RjFEQTEwMEE3NjI2MiAvKiBmZmlfeDg2XzY0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEQkZBNzE4MzE4N0YxREExMDBBNzYyNjIgLyogZmZpX3g4Nl82NC5oICovOyB9OworCQlEQkZBNzE5MDE4N0YxREExMDBBNzYyNjIgLyogZmZpY29uZmlnX2kzODYuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERCRkE3MTg0MTg3RjFEQTEwMEE3NjI2MiAvKiBmZmljb25maWdfaTM4Ni5oICovOyB9OworCQlEQkZBNzE5MTE4N0YxREExMDBBNzYyNjIgLyogZmZpY29uZmlnX3g4Nl82NC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREJGQTcxODUxODdGMURBMTAwQTc2MjYyIC8qIGZmaWNvbmZpZ194ODZfNjQuaCAqLzsgfTsKKwkJREJGQTcxOTIxODdGMURBMTAwQTc2MjYyIC8qIGZmaXRhcmdldF9pMzg2LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEQkZBNzE4NjE4N0YxREExMDBBNzYyNjIgLyogZmZpdGFyZ2V0X2kzODYuaCAqLzsgfTsKKwkJREJGQTcxOTMxODdGMURBMTAwQTc2MjYyIC8qIGZmaXRhcmdldF94ODZfNjQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERCRkE3MTg3MTg3RjFEQTEwMEE3NjI2MiAvKiBmZml0YXJnZXRfeDg2XzY0LmggKi87IH07CisJCURCRkE3MTk0MTg3RjFEQTEwMEE3NjI2MiAvKiBkYXJ3aW42NF94ODZfNjQuUyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERCRkE3MThBMTg3RjFEQTEwMEE3NjI2MiAvKiBkYXJ3aW42NF94ODZfNjQuUyAqLzsgfTsKKwkJREJGQTcxOTUxODdGMURBMTAwQTc2MjYyIC8qIGRhcndpbl9pMzg2LlMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEQkZBNzE4QjE4N0YxREExMDBBNzYyNjIgLyogZGFyd2luX2kzODYuUyAqLzsgfTsKKwkJREJGQTcxOTYxODdGMURBMTAwQTc2MjYyIC8qIGZmaTY0X3g4Nl82NC5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREJGQTcxOEMxODdGMURBMTAwQTc2MjYyIC8qIGZmaTY0X3g4Nl82NC5jICovOyB9OworCQlEQkZBNzE5NzE4N0YxREExMDBBNzYyNjIgLyogZmZpX2kzODYuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERCRkE3MThEMTg3RjFEQTEwMEE3NjI2MiAvKiBmZmlfaTM4Ni5jICovOyB9OwogLyogRW5kIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCiAKKy8qIEJlZ2luIFBCWENvcHlGaWxlc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLworCQlEQjEzQjE2NDE4NDlERjFFMDAxMEY0MkQgLyogQ29weUZpbGVzICovID0geworCQkJaXNhID0gUEJYQ29weUZpbGVzQnVpbGRQaGFzZTsKKwkJCWJ1aWxkQWN0aW9uTWFzayA9IDg7CisJCQlkc3RQYXRoID0gImluY2x1ZGUvJChQUk9EVUNUX05BTUUpIjsKKwkJCWRzdFN1YmZvbGRlclNwZWMgPSAxNjsKKwkJCWZpbGVzID0gKAorCQkJKTsKKwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAxOworCQl9OworLyogRW5kIFBCWENvcHlGaWxlc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLworCiAvKiBCZWdpbiBQQlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KLQkJNkM0M0NCM0QxNTM0RTlEMTAwMTYyMzY0IC8qIGxpYmZmaS5hICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBhcmNoaXZlLmFyOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSBsaWJmZmkuYTsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKLQkJNkM0M0NCQkQxNTM0Rjc2RjAwMTYyMzY0IC8qIGZmaS5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IHBhdGggPSBmZmkuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNkM0M0NCQkYxNTM0Rjc2RjAwMTYyMzY0IC8qIHN5c3YuUyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYXNtOyBwYXRoID0gc3lzdi5TOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2QzQzQ0JDMDE1MzRGNzZGMDAxNjIzNjQgLyogdHJhbXBvbGluZS5TICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5hc207IHBhdGggPSB0cmFtcG9saW5lLlM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTZDNDNDQkM5MTUzNEY3NkYwMDE2MjM2NCAvKiBkYXJ3aW4uUyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYXNtOyBwYXRoID0gZGFyd2luLlM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTZDNDNDQkNCMTUzNEY3NkYwMDE2MjM2NCAvKiBmZmkuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBwYXRoID0gZmZpLmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTZDNDNDQzA1MTUzNEY3NzgwMDE2MjM2NCAvKiBkYXJ3aW4uUyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYXNtOyBwYXRoID0gZGFyd2luLlM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTZDNDNDQzA2MTUzNEY3NzgwMDE2MjM2NCAvKiBkYXJ3aW42NC5TICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5hc207IHBhdGggPSBkYXJ3aW42NC5TOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2QzQzQ0MwNzE1MzRGNzc4MDAxNjIzNjQgLyogZmZpLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IGZmaS5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2QzQzQ0MwODE1MzRGNzc4MDAxNjIzNjQgLyogZmZpNjQuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBwYXRoID0gZmZpNjQuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNkM0M0NDMjgxNTM0RjdCRTAwMTYyMzY0IC8qIGNsb3N1cmVzLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgbmFtZSA9IGNsb3N1cmVzLmM7IHBhdGggPSBzcmMvY2xvc3VyZXMuYzsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OwotCQk2QzQzQ0MyQjE1MzRGN0JFMDAxNjIzNjQgLyogamF2YV9yYXdfYXBpLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgbmFtZSA9IGphdmFfcmF3X2FwaS5jOyBwYXRoID0gc3JjL2phdmFfcmF3X2FwaS5jOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07Ci0JCTZDNDNDQzJDMTUzNEY3QkUwMDE2MjM2NCAvKiBwcmVwX2NpZi5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IG5hbWUgPSBwcmVwX2NpZi5jOyBwYXRoID0gc3JjL3ByZXBfY2lmLmM7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKLQkJNkM0M0NDMkQxNTM0RjdCRTAwMTYyMzY0IC8qIHJhd19hcGkuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBuYW1lID0gcmF3X2FwaS5jOyBwYXRoID0gc3JjL3Jhd19hcGkuYzsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OwotCQk2QzQzQ0MyRTE1MzRGN0JFMDAxNjIzNjQgLyogdHlwZXMuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBuYW1lID0gdHlwZXMuYzsgcGF0aCA9IHNyYy90eXBlcy5jOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07Ci0JCTZDNDNDQzhEMTUzNTAzMjYwMDE2MjM2NCAvKiBmZmkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gZmZpLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTZDNDNDQzhFMTUzNTAzMjYwMDE2MjM2NCAvKiBmZmlfY29tbW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGZmaV9jb21tb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNkM0M0NDOEYxNTM1MDMyNjAwMTYyMzY0IC8qIGZmaV9pMzg2LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGZmaV9pMzg2Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTZDNDNDQzkwMTUzNTAzMjYwMDE2MjM2NCAvKiBmZmlfeDg2XzY0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGZmaV94ODZfNjQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNkM0M0NDOTExNTM1MDMyNjAwMTYyMzY0IC8qIGZmaWNvbmZpZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBmZmljb25maWcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNkM0M0NDOTIxNTM1MDMyNjAwMTYyMzY0IC8qIGZmaWNvbmZpZ19pMzg2LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGZmaWNvbmZpZ19pMzg2Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTZDNDNDQzkzMTUzNTAzMjYwMDE2MjM2NCAvKiBmZmljb25maWdfeDg2XzY0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGZmaWNvbmZpZ194ODZfNjQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNkM0M0NDOTQxNTM1MDMyNjAwMTYyMzY0IC8qIGZmaXRhcmdldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBmZml0YXJnZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNkM0M0NDOTUxNTM1MDMyNjAwMTYyMzY0IC8qIGZmaXRhcmdldF9pMzg2LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGZmaXRhcmdldF9pMzg2Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTZDNDNDQzk2MTUzNTAzMjYwMDE2MjM2NCAvKiBmZml0YXJnZXRfeDg2XzY0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGZmaXRhcmdldF94ODZfNjQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNkM0M0NDQTIxNTM1MDM5NjAwMTYyMzY0IC8qIGZmaS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBmZmkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNkM0M0NDQTMxNTM1MDM5NjAwMTYyMzY0IC8qIGZmaV9hcm12Ny5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBmZmlfYXJtdjcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNkM0M0NDQTQxNTM1MDM5NjAwMTYyMzY0IC8qIGZmaV9jb21tb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gZmZpX2NvbW1vbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2QzQzQ0NBNTE1MzUwMzk2MDAxNjIzNjQgLyogZmZpX2kzODYuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gZmZpX2kzODYuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNkM0M0NDQTYxNTM1MDM5NjAwMTYyMzY0IC8qIGZmaWNvbmZpZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBmZmljb25maWcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNkM0M0NDQTcxNTM1MDM5NjAwMTYyMzY0IC8qIGZmaWNvbmZpZ19hcm12Ny5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBmZmljb25maWdfYXJtdjcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNkM0M0NDQTgxNTM1MDM5NjAwMTYyMzY0IC8qIGZmaWNvbmZpZ19pMzg2LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGZmaWNvbmZpZ19pMzg2Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTZDNDNDQ0E5MTUzNTAzOTYwMDE2MjM2NCAvKiBmZml0YXJnZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gZmZpdGFyZ2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTZDNDNDQ0FBMTUzNTAzOTYwMDE2MjM2NCAvKiBmZml0YXJnZXRfYXJtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGZmaXRhcmdldF9hcm0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNkM0M0NDQUIxNTM1MDM5NjAwMTYyMzY0IC8qIGZmaXRhcmdldF9hcm12Ny5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBmZml0YXJnZXRfYXJtdjcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNkM0M0NDQUMxNTM1MDM5NjAwMTYyMzY0IC8qIGZmaXRhcmdldF9pMzg2LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGZmaXRhcmdldF9pMzg2Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUY2Rjk4MEJBMTQ3Mzg2MTMwMDA4RjEyMSAvKiBsaWJmZmkuYSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gYXJjaGl2ZS5hcjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gbGliZmZpLmE7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CisJCURCMTNCMTY2MTg0OURGMUUwMDEwRjQyRCAvKiBsaWJmZmkuYSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gYXJjaGl2ZS5hcjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gbGliZmZpLmE7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CisJCURCMTNCMTkxMTg0OURGNTEwMDEwRjQyRCAvKiBmZmkuZHlsaWIgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZHlsaWIiOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSBmZmkuZHlsaWI7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CisJCURCRkE3MTNFMTg3RjFEODYwMEE3NjI2MiAvKiBmZmkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gZmZpLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCURCRkE3MTNGMTg3RjFEODYwMEE3NjI2MiAvKiBmZmlfY29tbW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGZmaV9jb21tb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJREJGQTcxNDAxODdGMUQ4NjAwQTc2MjYyIC8qIGZmaWNvbmZpZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBmZmljb25maWcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJREJGQTcxNDExODdGMUQ4NjAwQTc2MjYyIC8qIGZmaXRhcmdldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBmZml0YXJnZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJREJGQTcxNDMxODdGMUQ4NjAwQTc2MjYyIC8qIGNsb3N1cmVzLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IGNsb3N1cmVzLmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCURCRkE3MTQ1MTg3RjFEODYwMEE3NjI2MiAvKiBkbG1hbGxvYy5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IHBhdGggPSBkbG1hbGxvYy5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEQkZBNzE0NzE4N0YxRDg2MDBBNzYyNjIgLyogcHJlcF9jaWYuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBwYXRoID0gcHJlcF9jaWYuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJREJGQTcxNDgxODdGMUQ4NjAwQTc2MjYyIC8qIHJhd19hcGkuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBwYXRoID0gcmF3X2FwaS5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEQkZBNzE0OTE4N0YxRDg2MDBBNzYyNjIgLyogdHlwZXMuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBwYXRoID0gdHlwZXMuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJREJGQTcxNUUxODdGMUQ5QjAwQTc2MjYyIC8qIGZmaV9hcm02NC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBmZmlfYXJtNjQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJREJGQTcxNUYxODdGMUQ5QjAwQTc2MjYyIC8qIGZmaV9hcm12Ny5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBmZmlfYXJtdjcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJREJGQTcxNjAxODdGMUQ5QjAwQTc2MjYyIC8qIGZmaV9pMzg2LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGZmaV9pMzg2Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCURCRkE3MTYxMTg3RjFEOUIwMEE3NjI2MiAvKiBmZmlfeDg2XzY0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGZmaV94ODZfNjQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJREJGQTcxNjIxODdGMUQ5QjAwQTc2MjYyIC8qIGZmaWNvbmZpZ19hcm02NC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBmZmljb25maWdfYXJtNjQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJREJGQTcxNjMxODdGMUQ5QjAwQTc2MjYyIC8qIGZmaWNvbmZpZ19hcm12Ny5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBmZmljb25maWdfYXJtdjcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJREJGQTcxNjQxODdGMUQ5QjAwQTc2MjYyIC8qIGZmaWNvbmZpZ19pMzg2LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGZmaWNvbmZpZ19pMzg2Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCURCRkE3MTY1MTg3RjFEOUIwMEE3NjI2MiAvKiBmZmljb25maWdfeDg2XzY0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGZmaWNvbmZpZ194ODZfNjQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJREJGQTcxNjYxODdGMUQ5QjAwQTc2MjYyIC8qIGZmaXRhcmdldF9hcm02NC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBmZml0YXJnZXRfYXJtNjQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJREJGQTcxNjcxODdGMUQ5QjAwQTc2MjYyIC8qIGZmaXRhcmdldF9hcm12Ny5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBmZml0YXJnZXRfYXJtdjcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJREJGQTcxNjgxODdGMUQ5QjAwQTc2MjYyIC8qIGZmaXRhcmdldF9pMzg2LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGZmaXRhcmdldF9pMzg2Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCURCRkE3MTY5MTg3RjFEOUIwMEE3NjI2MiAvKiBmZml0YXJnZXRfeDg2XzY0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGZmaXRhcmdldF94ODZfNjQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJREJGQTcxNkMxODdGMUQ5QjAwQTc2MjYyIC8qIGZmaV9hcm02NC5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IHBhdGggPSBmZmlfYXJtNjQuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJREJGQTcxNkQxODdGMUQ5QjAwQTc2MjYyIC8qIHN5c3ZfYXJtNjQuUyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYXNtOyBwYXRoID0gc3lzdl9hcm02NC5TOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEQkZBNzE2RjE4N0YxRDlCMDBBNzYyNjIgLyogZmZpX2FybXY3LmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IGZmaV9hcm12Ny5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEQkZBNzE3MDE4N0YxRDlCMDBBNzYyNjIgLyogc3lzdl9hcm12Ny5TICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5hc207IHBhdGggPSBzeXN2X2FybXY3LlM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCURCRkE3MTcxMTg3RjFEOUIwMEE3NjI2MiAvKiB0cmFtcG9saW5lX2FybXY3LlMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmFzbTsgcGF0aCA9IHRyYW1wb2xpbmVfYXJtdjcuUzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJREJGQTcxNzMxODdGMUQ5QjAwQTc2MjYyIC8qIGRhcndpbjY0X3g4Nl82NC5TICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5hc207IHBhdGggPSBkYXJ3aW42NF94ODZfNjQuUzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJREJGQTcxNzQxODdGMUQ5QjAwQTc2MjYyIC8qIGRhcndpbl9pMzg2LlMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmFzbTsgcGF0aCA9IGRhcndpbl9pMzg2LlM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCURCRkE3MTc1MTg3RjFEOUIwMEE3NjI2MiAvKiBmZmk2NF94ODZfNjQuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBwYXRoID0gZmZpNjRfeDg2XzY0LmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCURCRkE3MTc2MTg3RjFEOUIwMEE3NjI2MiAvKiBmZmlfaTM4Ni5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IHBhdGggPSBmZmlfaTM4Ni5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEQkZBNzE4MjE4N0YxREExMDBBNzYyNjIgLyogZmZpX2kzODYuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gZmZpX2kzODYuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJREJGQTcxODMxODdGMURBMTAwQTc2MjYyIC8qIGZmaV94ODZfNjQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gZmZpX3g4Nl82NC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEQkZBNzE4NDE4N0YxREExMDBBNzYyNjIgLyogZmZpY29uZmlnX2kzODYuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gZmZpY29uZmlnX2kzODYuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJREJGQTcxODUxODdGMURBMTAwQTc2MjYyIC8qIGZmaWNvbmZpZ194ODZfNjQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gZmZpY29uZmlnX3g4Nl82NC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEQkZBNzE4NjE4N0YxREExMDBBNzYyNjIgLyogZmZpdGFyZ2V0X2kzODYuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gZmZpdGFyZ2V0X2kzODYuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJREJGQTcxODcxODdGMURBMTAwQTc2MjYyIC8qIGZmaXRhcmdldF94ODZfNjQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gZmZpdGFyZ2V0X3g4Nl82NC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEQkZBNzE4QTE4N0YxREExMDBBNzYyNjIgLyogZGFyd2luNjRfeDg2XzY0LlMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmFzbTsgcGF0aCA9IGRhcndpbjY0X3g4Nl82NC5TOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEQkZBNzE4QjE4N0YxREExMDBBNzYyNjIgLyogZGFyd2luX2kzODYuUyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYXNtOyBwYXRoID0gZGFyd2luX2kzODYuUzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJREJGQTcxOEMxODdGMURBMTAwQTc2MjYyIC8qIGZmaTY0X3g4Nl82NC5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IHBhdGggPSBmZmk2NF94ODZfNjQuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJREJGQTcxOEQxODdGMURBMTAwQTc2MjYyIC8qIGZmaV9pMzg2LmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IGZmaV9pMzg2LmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAvKiBFbmQgUEJYRmlsZVJlZmVyZW5jZSBzZWN0aW9uICovCiAKLS8qIEJlZ2luIFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlIHNlY3Rpb24gKi8KLQkJNkM0M0NCM0ExNTM0RTlEMTAwMTYyMzY0IC8qIEZyYW1ld29ya3MgKi8gPSB7Ci0JCQlpc2EgPSBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZTsKLQkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7Ci0JCQlmaWxlcyA9ICgKLQkJCSk7Ci0JCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKLQkJfTsKLQkJRjZGOTgwQjcxNDczODYxMzAwMDhGMTIxIC8qIEZyYW1ld29ya3MgKi8gPSB7Ci0JCQlpc2EgPSBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZTsKLQkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7Ci0JCQlmaWxlcyA9ICgKLQkJCSk7Ci0JCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKLQkJfTsKLS8qIEVuZCBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZSBzZWN0aW9uICovCi0KIC8qIEJlZ2luIFBCWEdyb3VwIHNlY3Rpb24gKi8KLQkJNkM0M0NCQUYxNTM0Rjc2RjAwMTYyMzY0IC8qIGlPUyAqLyA9IHsKKwkJREIxM0IxNUIxODQ5REVCNzAwMTBGNDJEID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQk2QzQzQ0NBMTE1MzUwMzk2MDAxNjIzNjQgLyogaW5jbHVkZSAqLywKLQkJCQk2QzQzQ0JCQjE1MzRGNzZGMDAxNjIzNjQgLyogc3JjICovLAorCQkJCURCRkE3MTNDMTg3RjFEODYwMEE3NjI2MiAvKiBkYXJ3aW5fY29tbW9uICovLAorCQkJCURCRkE3MTVDMTg3RjFEOUIwMEE3NjI2MiAvKiBkYXJ3aW5faW9zICovLAorCQkJCURCRkE3MTgwMTg3RjFEQTEwMEE3NjI2MiAvKiBkYXJ3aW5fb3N4ICovLAorCQkJCURCMTNCMTY3MTg0OURGMUUwMDEwRjQyRCAvKiBQcm9kdWN0cyAqLywKIAkJCSk7Ci0JCQluYW1lID0gaU9TOwotCQkJcGF0aCA9IGlvczsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07Ci0JCTZDNDNDQkJCMTUzNEY3NkYwMDE2MjM2NCAvKiBzcmMgKi8gPSB7CisJCURCMTNCMTY3MTg0OURGMUUwMDEwRjQyRCAvKiBQcm9kdWN0cyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJNkM0M0NCQzgxNTM0Rjc2RjAwMTYyMzY0IC8qIHg4NiAqLywKLQkJCQk2QzQzQ0JCQzE1MzRGNzZGMDAxNjIzNjQgLyogYXJtICovLAorCQkJCURCMTNCMTY2MTg0OURGMUUwMDEwRjQyRCAvKiBsaWJmZmkuYSAqLywKKwkJCQlEQjEzQjE5MTE4NDlERjUxMDAxMEY0MkQgLyogZmZpLmR5bGliICovLAorCQkJKTsKKwkJCW5hbWUgPSBQcm9kdWN0czsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCURCRkE3MTNDMTg3RjFEODYwMEE3NjI2MiAvKiBkYXJ3aW5fY29tbW9uICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQlEQkZBNzEzRDE4N0YxRDg2MDBBNzYyNjIgLyogaW5jbHVkZSAqLywKKwkJCQlEQkZBNzE0MjE4N0YxRDg2MDBBNzYyNjIgLyogc3JjICovLAorCQkJKTsKKwkJCXBhdGggPSAiZGFyd2luX2NvbW1vbiI7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQlEQkZBNzEzRDE4N0YxRDg2MDBBNzYyNjIgLyogaW5jbHVkZSAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJREJGQTcxM0UxODdGMUQ4NjAwQTc2MjYyIC8qIGZmaS5oICovLAorCQkJCURCRkE3MTNGMTg3RjFEODYwMEE3NjI2MiAvKiBmZmlfY29tbW9uLmggKi8sCisJCQkJREJGQTcxNDAxODdGMUQ4NjAwQTc2MjYyIC8qIGZmaWNvbmZpZy5oICovLAorCQkJCURCRkE3MTQxMTg3RjFEODYwMEE3NjI2MiAvKiBmZml0YXJnZXQuaCAqLywKKwkJCSk7CisJCQlwYXRoID0gaW5jbHVkZTsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCURCRkE3MTQyMTg3RjFEODYwMEE3NjI2MiAvKiBzcmMgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCURCRkE3MTQzMTg3RjFEODYwMEE3NjI2MiAvKiBjbG9zdXJlcy5jICovLAorCQkJCURCRkE3MTQ1MTg3RjFEODYwMEE3NjI2MiAvKiBkbG1hbGxvYy5jICovLAorCQkJCURCRkE3MTQ3MTg3RjFEODYwMEE3NjI2MiAvKiBwcmVwX2NpZi5jICovLAorCQkJCURCRkE3MTQ4MTg3RjFEODYwMEE3NjI2MiAvKiByYXdfYXBpLmMgKi8sCisJCQkJREJGQTcxNDkxODdGMUQ4NjAwQTc2MjYyIC8qIHR5cGVzLmMgKi8sCiAJCQkpOwogCQkJcGF0aCA9IHNyYzsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07Ci0JCTZDNDNDQkJDMTUzNEY3NkYwMDE2MjM2NCAvKiBhcm0gKi8gPSB7CisJCURCRkE3MTVDMTg3RjFEOUIwMEE3NjI2MiAvKiBkYXJ3aW5faW9zICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQk2QzQzQ0JCRDE1MzRGNzZGMDAxNjIzNjQgLyogZmZpLmMgKi8sCi0JCQkJNkM0M0NCQkYxNTM0Rjc2RjAwMTYyMzY0IC8qIHN5c3YuUyAqLywKLQkJCQk2QzQzQ0JDMDE1MzRGNzZGMDAxNjIzNjQgLyogdHJhbXBvbGluZS5TICovLAorCQkJCURCRkE3MTVEMTg3RjFEOUIwMEE3NjI2MiAvKiBpbmNsdWRlICovLAorCQkJCURCRkE3MTZBMTg3RjFEOUIwMEE3NjI2MiAvKiBzcmMgKi8sCisJCQkpOworCQkJcGF0aCA9ICJkYXJ3aW5faW9zIjsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCURCRkE3MTVEMTg3RjFEOUIwMEE3NjI2MiAvKiBpbmNsdWRlICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQlEQkZBNzE1RTE4N0YxRDlCMDBBNzYyNjIgLyogZmZpX2FybTY0LmggKi8sCisJCQkJREJGQTcxNUYxODdGMUQ5QjAwQTc2MjYyIC8qIGZmaV9hcm12Ny5oICovLAorCQkJCURCRkE3MTYwMTg3RjFEOUIwMEE3NjI2MiAvKiBmZmlfaTM4Ni5oICovLAorCQkJCURCRkE3MTYxMTg3RjFEOUIwMEE3NjI2MiAvKiBmZmlfeDg2XzY0LmggKi8sCisJCQkJREJGQTcxNjIxODdGMUQ5QjAwQTc2MjYyIC8qIGZmaWNvbmZpZ19hcm02NC5oICovLAorCQkJCURCRkE3MTYzMTg3RjFEOUIwMEE3NjI2MiAvKiBmZmljb25maWdfYXJtdjcuaCAqLywKKwkJCQlEQkZBNzE2NDE4N0YxRDlCMDBBNzYyNjIgLyogZmZpY29uZmlnX2kzODYuaCAqLywKKwkJCQlEQkZBNzE2NTE4N0YxRDlCMDBBNzYyNjIgLyogZmZpY29uZmlnX3g4Nl82NC5oICovLAorCQkJCURCRkE3MTY2MTg3RjFEOUIwMEE3NjI2MiAvKiBmZml0YXJnZXRfYXJtNjQuaCAqLywKKwkJCQlEQkZBNzE2NzE4N0YxRDlCMDBBNzYyNjIgLyogZmZpdGFyZ2V0X2FybXY3LmggKi8sCisJCQkJREJGQTcxNjgxODdGMUQ5QjAwQTc2MjYyIC8qIGZmaXRhcmdldF9pMzg2LmggKi8sCisJCQkJREJGQTcxNjkxODdGMUQ5QjAwQTc2MjYyIC8qIGZmaXRhcmdldF94ODZfNjQuaCAqLywKKwkJCSk7CisJCQlwYXRoID0gaW5jbHVkZTsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCURCRkE3MTZBMTg3RjFEOUIwMEE3NjI2MiAvKiBzcmMgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCURCRkE3MTZCMTg3RjFEOUIwMEE3NjI2MiAvKiBhYXJjaDY0ICovLAorCQkJCURCRkE3MTZFMTg3RjFEOUIwMEE3NjI2MiAvKiBhcm0gKi8sCisJCQkJREJGQTcxNzIxODdGMUQ5QjAwQTc2MjYyIC8qIHg4NiAqLywKKwkJCSk7CisJCQlwYXRoID0gc3JjOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJREJGQTcxNkIxODdGMUQ5QjAwQTc2MjYyIC8qIGFhcmNoNjQgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCURCRkE3MTZDMTg3RjFEOUIwMEE3NjI2MiAvKiBmZmlfYXJtNjQuYyAqLywKKwkJCQlEQkZBNzE2RDE4N0YxRDlCMDBBNzYyNjIgLyogc3lzdl9hcm02NC5TICovLAorCQkJKTsKKwkJCXBhdGggPSBhYXJjaDY0OworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJREJGQTcxNkUxODdGMUQ5QjAwQTc2MjYyIC8qIGFybSAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJREJGQTcxNkYxODdGMUQ5QjAwQTc2MjYyIC8qIGZmaV9hcm12Ny5jICovLAorCQkJCURCRkE3MTcwMTg3RjFEOUIwMEE3NjI2MiAvKiBzeXN2X2FybXY3LlMgKi8sCisJCQkJREJGQTcxNzExODdGMUQ5QjAwQTc2MjYyIC8qIHRyYW1wb2xpbmVfYXJtdjcuUyAqLywKIAkJCSk7CiAJCQlwYXRoID0gYXJtOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKLQkJNkM0M0NCQzgxNTM0Rjc2RjAwMTYyMzY0IC8qIHg4NiAqLyA9IHsKKwkJREJGQTcxNzIxODdGMUQ5QjAwQTc2MjYyIC8qIHg4NiAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJNkM0M0NCQzkxNTM0Rjc2RjAwMTYyMzY0IC8qIGRhcndpbi5TICovLAotCQkJCTZDNDNDQkNCMTUzNEY3NkYwMDE2MjM2NCAvKiBmZmkuYyAqLywKKwkJCQlEQkZBNzE3MzE4N0YxRDlCMDBBNzYyNjIgLyogZGFyd2luNjRfeDg2XzY0LlMgKi8sCisJCQkJREJGQTcxNzQxODdGMUQ5QjAwQTc2MjYyIC8qIGRhcndpbl9pMzg2LlMgKi8sCisJCQkJREJGQTcxNzUxODdGMUQ5QjAwQTc2MjYyIC8qIGZmaTY0X3g4Nl82NC5jICovLAorCQkJCURCRkE3MTc2MTg3RjFEOUIwMEE3NjI2MiAvKiBmZmlfaTM4Ni5jICovLAogCQkJKTsKIAkJCXBhdGggPSB4ODY7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OwotCQk2QzQzQ0JGMDE1MzRGNzc4MDAxNjIzNjQgLyogT1MgWCAqLyA9IHsKKwkJREJGQTcxODAxODdGMURBMTAwQTc2MjYyIC8qIGRhcndpbl9vc3ggKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCTZDNDNDQzhDMTUzNTAzMjYwMDE2MjM2NCAvKiBpbmNsdWRlICovLAotCQkJCTZDNDNDQkZDMTUzNEY3NzgwMDE2MjM2NCAvKiBzcmMgKi8sCisJCQkJREJGQTcxODExODdGMURBMTAwQTc2MjYyIC8qIGluY2x1ZGUgKi8sCisJCQkJREJGQTcxODgxODdGMURBMTAwQTc2MjYyIC8qIHNyYyAqLywKIAkJCSk7Ci0JCQluYW1lID0gIk9TIFgiOwotCQkJcGF0aCA9IG9zeDsKKwkJCXBhdGggPSAiZGFyd2luX29zeCI7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OwotCQk2QzQzQ0JGQzE1MzRGNzc4MDAxNjIzNjQgLyogc3JjICovID0geworCQlEQkZBNzE4MTE4N0YxREExMDBBNzYyNjIgLyogaW5jbHVkZSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJNkM0M0NDMDQxNTM0Rjc3ODAwMTYyMzY0IC8qIHg4NiAqLywKKwkJCQlEQkZBNzE4MjE4N0YxREExMDBBNzYyNjIgLyogZmZpX2kzODYuaCAqLywKKwkJCQlEQkZBNzE4MzE4N0YxREExMDBBNzYyNjIgLyogZmZpX3g4Nl82NC5oICovLAorCQkJCURCRkE3MTg0MTg3RjFEQTEwMEE3NjI2MiAvKiBmZmljb25maWdfaTM4Ni5oICovLAorCQkJCURCRkE3MTg1MTg3RjFEQTEwMEE3NjI2MiAvKiBmZmljb25maWdfeDg2XzY0LmggKi8sCisJCQkJREJGQTcxODYxODdGMURBMTAwQTc2MjYyIC8qIGZmaXRhcmdldF9pMzg2LmggKi8sCisJCQkJREJGQTcxODcxODdGMURBMTAwQTc2MjYyIC8qIGZmaXRhcmdldF94ODZfNjQuaCAqLywKKwkJCSk7CisJCQlwYXRoID0gaW5jbHVkZTsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCURCRkE3MTg4MTg3RjFEQTEwMEE3NjI2MiAvKiBzcmMgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCURCRkE3MTg5MTg3RjFEQTEwMEE3NjI2MiAvKiB4ODYgKi8sCiAJCQkpOwogCQkJcGF0aCA9IHNyYzsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07Ci0JCTZDNDNDQzA0MTUzNEY3NzgwMDE2MjM2NCAvKiB4ODYgKi8gPSB7CisJCURCRkE3MTg5MTg3RjFEQTEwMEE3NjI2MiAvKiB4ODYgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCTZDNDNDQzA1MTUzNEY3NzgwMDE2MjM2NCAvKiBkYXJ3aW4uUyAqLywKLQkJCQk2QzQzQ0MwNjE1MzRGNzc4MDAxNjIzNjQgLyogZGFyd2luNjQuUyAqLywKLQkJCQk2QzQzQ0MwNzE1MzRGNzc4MDAxNjIzNjQgLyogZmZpLmMgKi8sCi0JCQkJNkM0M0NDMDgxNTM0Rjc3ODAwMTYyMzY0IC8qIGZmaTY0LmMgKi8sCisJCQkJREJGQTcxOEExODdGMURBMTAwQTc2MjYyIC8qIGRhcndpbjY0X3g4Nl82NC5TICovLAorCQkJCURCRkE3MThCMTg3RjFEQTEwMEE3NjI2MiAvKiBkYXJ3aW5faTM4Ni5TICovLAorCQkJCURCRkE3MThDMTg3RjFEQTEwMEE3NjI2MiAvKiBmZmk2NF94ODZfNjQuYyAqLywKKwkJCQlEQkZBNzE4RDE4N0YxREExMDBBNzYyNjIgLyogZmZpX2kzODYuYyAqLywKIAkJCSk7CiAJCQlwYXRoID0geDg2OwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKLQkJNkM0M0NDM0QxNTM0RjdDNDAwMTYyMzY0IC8qIHNyYyAqLyA9IHsKLQkJCWlzYSA9IFBCWEdyb3VwOwotCQkJY2hpbGRyZW4gPSAoCi0JCQkJNkM0M0NDMjgxNTM0RjdCRTAwMTYyMzY0IC8qIGNsb3N1cmVzLmMgKi8sCi0JCQkJNkM0M0NDMkIxNTM0RjdCRTAwMTYyMzY0IC8qIGphdmFfcmF3X2FwaS5jICovLAotCQkJCTZDNDNDQzJDMTUzNEY3QkUwMDE2MjM2NCAvKiBwcmVwX2NpZi5jICovLAotCQkJCTZDNDNDQzJEMTUzNEY3QkUwMDE2MjM2NCAvKiByYXdfYXBpLmMgKi8sCi0JCQkJNkM0M0NDMkUxNTM0RjdCRTAwMTYyMzY0IC8qIHR5cGVzLmMgKi8sCi0JCQkpOwotCQkJbmFtZSA9IHNyYzsKLQkJCXBhdGggPSBpb3M7Ci0JCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwotCQl9OwotCQk2QzQzQ0M4QzE1MzUwMzI2MDAxNjIzNjQgLyogaW5jbHVkZSAqLyA9IHsKLQkJCWlzYSA9IFBCWEdyb3VwOwotCQkJY2hpbGRyZW4gPSAoCi0JCQkJNkM0M0NDOEQxNTM1MDMyNjAwMTYyMzY0IC8qIGZmaS5oICovLAotCQkJCTZDNDNDQzhFMTUzNTAzMjYwMDE2MjM2NCAvKiBmZmlfY29tbW9uLmggKi8sCi0JCQkJNkM0M0NDOEYxNTM1MDMyNjAwMTYyMzY0IC8qIGZmaV9pMzg2LmggKi8sCi0JCQkJNkM0M0NDOTAxNTM1MDMyNjAwMTYyMzY0IC8qIGZmaV94ODZfNjQuaCAqLywKLQkJCQk2QzQzQ0M5MTE1MzUwMzI2MDAxNjIzNjQgLyogZmZpY29uZmlnLmggKi8sCi0JCQkJNkM0M0NDOTIxNTM1MDMyNjAwMTYyMzY0IC8qIGZmaWNvbmZpZ19pMzg2LmggKi8sCi0JCQkJNkM0M0NDOTMxNTM1MDMyNjAwMTYyMzY0IC8qIGZmaWNvbmZpZ194ODZfNjQuaCAqLywKLQkJCQk2QzQzQ0M5NDE1MzUwMzI2MDAxNjIzNjQgLyogZmZpdGFyZ2V0LmggKi8sCi0JCQkJNkM0M0NDOTUxNTM1MDMyNjAwMTYyMzY0IC8qIGZmaXRhcmdldF9pMzg2LmggKi8sCi0JCQkJNkM0M0NDOTYxNTM1MDMyNjAwMTYyMzY0IC8qIGZmaXRhcmdldF94ODZfNjQuaCAqLywKLQkJCSk7Ci0JCQlwYXRoID0gaW5jbHVkZTsKLQkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7Ci0JCX07Ci0JCTZDNDNDQ0ExMTUzNTAzOTYwMDE2MjM2NCAvKiBpbmNsdWRlICovID0gewotCQkJaXNhID0gUEJYR3JvdXA7Ci0JCQljaGlsZHJlbiA9ICgKLQkJCQk2QzQzQ0NBMjE1MzUwMzk2MDAxNjIzNjQgLyogZmZpLmggKi8sCi0JCQkJNkM0M0NDQTMxNTM1MDM5NjAwMTYyMzY0IC8qIGZmaV9hcm12Ny5oICovLAotCQkJCTZDNDNDQ0E0MTUzNTAzOTYwMDE2MjM2NCAvKiBmZmlfY29tbW9uLmggKi8sCi0JCQkJNkM0M0NDQTUxNTM1MDM5NjAwMTYyMzY0IC8qIGZmaV9pMzg2LmggKi8sCi0JCQkJNkM0M0NDQTYxNTM1MDM5NjAwMTYyMzY0IC8qIGZmaWNvbmZpZy5oICovLAotCQkJCTZDNDNDQ0E3MTUzNTAzOTYwMDE2MjM2NCAvKiBmZmljb25maWdfYXJtdjcuaCAqLywKLQkJCQk2QzQzQ0NBODE1MzUwMzk2MDAxNjIzNjQgLyogZmZpY29uZmlnX2kzODYuaCAqLywKLQkJCQk2QzQzQ0NBOTE1MzUwMzk2MDAxNjIzNjQgLyogZmZpdGFyZ2V0LmggKi8sCi0JCQkJNkM0M0NDQUExNTM1MDM5NjAwMTYyMzY0IC8qIGZmaXRhcmdldF9hcm0uaCAqLywKLQkJCQk2QzQzQ0NBQjE1MzUwMzk2MDAxNjIzNjQgLyogZmZpdGFyZ2V0X2FybXY3LmggKi8sCi0JCQkJNkM0M0NDQUMxNTM1MDM5NjAwMTYyMzY0IC8qIGZmaXRhcmdldF9pMzg2LmggKi8sCi0JCQkpOwotCQkJcGF0aCA9IGluY2x1ZGU7Ci0JCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwotCQl9OwotCQlGNkIwODM5NTE0NzIxRUU1MDAzMUQ4QTEgPSB7Ci0JCQlpc2EgPSBQQlhHcm91cDsKLQkJCWNoaWxkcmVuID0gKAotCQkJCTZDNDNDQzNEMTUzNEY3QzQwMDE2MjM2NCAvKiBzcmMgKi8sCi0JCQkJNkM0M0NCQUYxNTM0Rjc2RjAwMTYyMzY0IC8qIGlPUyAqLywKLQkJCQk2QzQzQ0JGMDE1MzRGNzc4MDAxNjIzNjQgLyogT1MgWCAqLywKLQkJCQlGNkY5ODBDNjE0NzM4NjI2MDAwOEYxMjEgLyogUHJvZHVjdHMgKi8sCi0JCQkpOwotCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKLQkJfTsKLQkJRjZGOTgwQzYxNDczODYyNjAwMDhGMTIxIC8qIFByb2R1Y3RzICovID0gewotCQkJaXNhID0gUEJYR3JvdXA7Ci0JCQljaGlsZHJlbiA9ICgKLQkJCQlGNkY5ODBCQTE0NzM4NjEzMDAwOEYxMjEgLyogbGliZmZpLmEgKi8sCi0JCQkJNkM0M0NCM0QxNTM0RTlEMTAwMTYyMzY0IC8qIGxpYmZmaS5hICovLAotCQkJKTsKLQkJCW5hbWUgPSBQcm9kdWN0czsKLQkJCXBhdGggPSAuLi8uLjsKLQkJCXNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7Ci0JCX07CiAvKiBFbmQgUEJYR3JvdXAgc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhIZWFkZXJzQnVpbGRQaGFzZSBzZWN0aW9uICovCi0JCTZDNDNDQjNCMTUzNEU5RDEwMDE2MjM2NCAvKiBIZWFkZXJzICovID0geworCQlEQjEzQjE4RjE4NDlERjUxMDAxMEY0MkQgLyogSGVhZGVycyAqLyA9IHsKIAkJCWlzYSA9IFBCWEhlYWRlcnNCdWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVzID0gKAotCQkJCTZDNDNDQzk3MTUzNTAzMjYwMDE2MjM2NCAvKiBmZmkuaCBpbiBIZWFkZXJzICovLAotCQkJCTZDNDNDQzk4MTUzNTAzMjYwMDE2MjM2NCAvKiBmZmlfY29tbW9uLmggaW4gSGVhZGVycyAqLywKLQkJCQk2QzQzQ0M5OTE1MzUwMzI2MDAxNjIzNjQgLyogZmZpX2kzODYuaCBpbiBIZWFkZXJzICovLAotCQkJCTZDNDNDQzlBMTUzNTAzMjYwMDE2MjM2NCAvKiBmZmlfeDg2XzY0LmggaW4gSGVhZGVycyAqLywKLQkJCQk2QzQzQ0M5RTE1MzUwMzI2MDAxNjIzNjQgLyogZmZpdGFyZ2V0LmggaW4gSGVhZGVycyAqLywKLQkJCQk2QzQzQ0M5RjE1MzUwMzI2MDAxNjIzNjQgLyogZmZpdGFyZ2V0X2kzODYuaCBpbiBIZWFkZXJzICovLAotCQkJCTZDNDNDQ0EwMTUzNTAzMjYwMDE2MjM2NCAvKiBmZml0YXJnZXRfeDg2XzY0LmggaW4gSGVhZGVycyAqLywKLQkJCQk2QzQzQ0M5QjE1MzUwMzI2MDAxNjIzNjQgLyogZmZpY29uZmlnLmggaW4gSGVhZGVycyAqLywKLQkJCQk2QzQzQ0M5QzE1MzUwMzI2MDAxNjIzNjQgLyogZmZpY29uZmlnX2kzODYuaCBpbiBIZWFkZXJzICovLAotCQkJCTZDNDNDQzlEMTUzNTAzMjYwMDE2MjM2NCAvKiBmZmljb25maWdfeDg2XzY0LmggaW4gSGVhZGVycyAqLywKLQkJCSk7Ci0JCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKLQkJfTsKLQkJRjZGOTgwQjgxNDczODYxMzAwMDhGMTIxIC8qIEhlYWRlcnMgKi8gPSB7Ci0JCQlpc2EgPSBQQlhIZWFkZXJzQnVpbGRQaGFzZTsKLQkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7Ci0JCQlmaWxlcyA9ICgKLQkJCQk2QzQzQ0NBRDE1MzUwMzk2MDAxNjIzNjQgLyogZmZpLmggaW4gSGVhZGVycyAqLywKLQkJCQk2QzQzQ0NBRTE1MzUwMzk2MDAxNjIzNjQgLyogZmZpX2FybXY3LmggaW4gSGVhZGVycyAqLywKLQkJCQk2QzQzQ0NBRjE1MzUwMzk2MDAxNjIzNjQgLyogZmZpX2NvbW1vbi5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNkM0M0NDQjAxNTM1MDM5NjAwMTYyMzY0IC8qIGZmaV9pMzg2LmggaW4gSGVhZGVycyAqLywKLQkJCQk2QzQzQ0NCNDE1MzUwMzk2MDAxNjIzNjQgLyogZmZpdGFyZ2V0LmggaW4gSGVhZGVycyAqLywKLQkJCQk2QzQzQ0NCNTE1MzUwMzk2MDAxNjIzNjQgLyogZmZpdGFyZ2V0X2FybS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNkM0M0NDQjYxNTM1MDM5NjAwMTYyMzY0IC8qIGZmaXRhcmdldF9hcm12Ny5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNkM0M0NDQjcxNTM1MDM5NjAwMTYyMzY0IC8qIGZmaXRhcmdldF9pMzg2LmggaW4gSGVhZGVycyAqLywKLQkJCQk2QzQzQ0NCMTE1MzUwMzk2MDAxNjIzNjQgLyogZmZpY29uZmlnLmggaW4gSGVhZGVycyAqLywKLQkJCQk2QzQzQ0NCMjE1MzUwMzk2MDAxNjIzNjQgLyogZmZpY29uZmlnX2FybXY3LmggaW4gSGVhZGVycyAqLywKLQkJCQk2QzQzQ0NCMzE1MzUwMzk2MDAxNjIzNjQgLyogZmZpY29uZmlnX2kzODYuaCBpbiBIZWFkZXJzICovLAorCQkJCURCRkE3MTRDMTg3RjFEODYwMEE3NjI2MiAvKiBmZmljb25maWcuaCBpbiBIZWFkZXJzICovLAorCQkJCURCRkE3MTREMTg3RjFEODYwMEE3NjI2MiAvKiBmZml0YXJnZXQuaCBpbiBIZWFkZXJzICovLAorCQkJCURCRkE3MTRBMTg3RjFEODYwMEE3NjI2MiAvKiBmZmkuaCBpbiBIZWFkZXJzICovLAorCQkJCURCRkE3MThGMTg3RjFEQTEwMEE3NjI2MiAvKiBmZmlfeDg2XzY0LmggaW4gSGVhZGVycyAqLywKKwkJCQlEQkZBNzE5MTE4N0YxREExMDBBNzYyNjIgLyogZmZpY29uZmlnX3g4Nl82NC5oIGluIEhlYWRlcnMgKi8sCisJCQkJREJGQTcxOEUxODdGMURBMTAwQTc2MjYyIC8qIGZmaV9pMzg2LmggaW4gSGVhZGVycyAqLywKKwkJCQlEQkZBNzE5MDE4N0YxREExMDBBNzYyNjIgLyogZmZpY29uZmlnX2kzODYuaCBpbiBIZWFkZXJzICovLAorCQkJCURCRkE3MTRCMTg3RjFEODYwMEE3NjI2MiAvKiBmZmlfY29tbW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQlEQkZBNzE5MzE4N0YxREExMDBBNzYyNjIgLyogZmZpdGFyZ2V0X3g4Nl82NC5oIGluIEhlYWRlcnMgKi8sCisJCQkJREJGQTcxOTIxODdGMURBMTAwQTc2MjYyIC8qIGZmaXRhcmdldF9pMzg2LmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKIC8qIEVuZCBQQlhIZWFkZXJzQnVpbGRQaGFzZSBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFBCWE5hdGl2ZVRhcmdldCBzZWN0aW9uICovCi0JCTZDNDNDQjNDMTUzNEU5RDEwMDE2MjM2NCAvKiBsaWJmZmkgT1MgWCAqLyA9IHsKKwkJREIxM0IxNjUxODQ5REYxRTAwMTBGNDJEIC8qIGxpYmZmaS1pT1MgKi8gPSB7CiAJCQlpc2EgPSBQQlhOYXRpdmVUYXJnZXQ7Ci0JCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gNkM0M0NCNEExNTM0RTlEMTAwMTYyMzY0IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJsaWJmZmkgT1MgWCIgKi87CisJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gREIxM0IxOEIxODQ5REYxRTAwMTBGNDJEIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJsaWJmZmktaU9TIiAqLzsKIAkJCWJ1aWxkUGhhc2VzID0gKAotCQkJCTZDNDNDQzQwMTUzNEZGM0IwMDE2MjM2NCAvKiBHZW5lcmF0ZSBTb3VyY2UgYW5kIEhlYWRlcnMgKi8sCi0JCQkJNkM0M0NCMzkxNTM0RTlEMTAwMTYyMzY0IC8qIFNvdXJjZXMgKi8sCi0JCQkJNkM0M0NCM0ExNTM0RTlEMTAwMTYyMzY0IC8qIEZyYW1ld29ya3MgKi8sCi0JCQkJNkM0M0NCM0IxNTM0RTlEMTAwMTYyMzY0IC8qIEhlYWRlcnMgKi8sCisJCQkJREIxM0IzMDUxODQ5RTAxQzAwMTBGNDJEIC8qIFNoZWxsU2NyaXB0ICovLAorCQkJCURCMTNCMTYyMTg0OURGMUUwMDEwRjQyRCAvKiBTb3VyY2VzICovLAorCQkJCURCMTNCMTY0MTg0OURGMUUwMDEwRjQyRCAvKiBDb3B5RmlsZXMgKi8sCiAJCQkpOwogCQkJYnVpbGRSdWxlcyA9ICgKIAkJCSk7CiAJCQlkZXBlbmRlbmNpZXMgPSAoCiAJCQkpOwotCQkJbmFtZSA9ICJsaWJmZmkgT1MgWCI7Ci0JCQlwcm9kdWN0TmFtZSA9ICJmZmkgT1MgWCI7Ci0JCQlwcm9kdWN0UmVmZXJlbmNlID0gNkM0M0NCM0QxNTM0RTlEMTAwMTYyMzY0IC8qIGxpYmZmaS5hICovOworCQkJbmFtZSA9ICJsaWJmZmktaU9TIjsKKwkJCXByb2R1Y3ROYW1lID0gZmZpOworCQkJcHJvZHVjdFJlZmVyZW5jZSA9IERCMTNCMTY2MTg0OURGMUUwMDEwRjQyRCAvKiBsaWJmZmkuYSAqLzsKIAkJCXByb2R1Y3RUeXBlID0gImNvbS5hcHBsZS5wcm9kdWN0LXR5cGUubGlicmFyeS5zdGF0aWMiOwogCQl9OwotCQlGNkY5ODBCOTE0NzM4NjEzMDAwOEYxMjEgLyogbGliZmZpIGlPUyAqLyA9IHsKKwkJREIxM0IxOTAxODQ5REY1MTAwMTBGNDJEIC8qIGxpYmZmaS1NYWMgKi8gPSB7CiAJCQlpc2EgPSBQQlhOYXRpdmVUYXJnZXQ7Ci0JCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gRjZGOTgwQzQxNDczODYxMzAwMDhGMTIxIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJsaWJmZmkgaU9TIiAqLzsKKwkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSBEQjEzQjFCMDE4NDlERjUyMDAxMEY0MkQgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgImxpYmZmaS1NYWMiICovOwogCQkJYnVpbGRQaGFzZXMgPSAoCi0JCQkJNkM0M0NDM0UxNTM0RjhFMjAwMTYyMzY0IC8qIEdlbmVyYXRlIFRyYW1wb2xpbmUgKi8sCi0JCQkJNkM0M0NDM0YxNTM0RkYxQjAwMTYyMzY0IC8qIEdlbmVyYXRlIFNvdXJjZSBhbmQgSGVhZGVycyAqLywKLQkJCQlGNkY5ODBCNjE0NzM4NjEzMDAwOEYxMjEgLyogU291cmNlcyAqLywKLQkJCQlGNkY5ODBCNzE0NzM4NjEzMDAwOEYxMjEgLyogRnJhbWV3b3JrcyAqLywKLQkJCQlGNkY5ODBCODE0NzM4NjEzMDAwOEYxMjEgLyogSGVhZGVycyAqLywKKwkJCQlEQjEzQjMwNjE4NDlFMDQ5MDAxMEY0MkQgLyogU2hlbGxTY3JpcHQgKi8sCisJCQkJREIxM0IxOEQxODQ5REY1MTAwMTBGNDJEIC8qIFNvdXJjZXMgKi8sCisJCQkJREIxM0IxOEYxODQ5REY1MTAwMTBGNDJEIC8qIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJYnVpbGRSdWxlcyA9ICgKIAkJCSk7CiAJCQlkZXBlbmRlbmNpZXMgPSAoCiAJCQkpOwotCQkJbmFtZSA9ICJsaWJmZmkgaU9TIjsKKwkJCW5hbWUgPSAibGliZmZpLU1hYyI7CiAJCQlwcm9kdWN0TmFtZSA9IGZmaTsKLQkJCXByb2R1Y3RSZWZlcmVuY2UgPSBGNkY5ODBCQTE0NzM4NjEzMDAwOEYxMjEgLyogbGliZmZpLmEgKi87Ci0JCQlwcm9kdWN0VHlwZSA9ICJjb20uYXBwbGUucHJvZHVjdC10eXBlLmxpYnJhcnkuc3RhdGljIjsKKwkJCXByb2R1Y3RSZWZlcmVuY2UgPSBEQjEzQjE5MTE4NDlERjUxMDAxMEY0MkQgLyogZmZpLmR5bGliICovOworCQkJcHJvZHVjdFR5cGUgPSAiY29tLmFwcGxlLnByb2R1Y3QtdHlwZS5saWJyYXJ5LmR5bmFtaWMiOwogCQl9OwogLyogRW5kIFBCWE5hdGl2ZVRhcmdldCBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFBCWFByb2plY3Qgc2VjdGlvbiAqLwotCQlGNkIwODM5NzE0NzIxRUU1MDAzMUQ4QTEgLyogUHJvamVjdCBvYmplY3QgKi8gPSB7CisJCURCMTNCMTVDMTg0OURFQjcwMDEwRjQyRCAvKiBQcm9qZWN0IG9iamVjdCAqLyA9IHsKIAkJCWlzYSA9IFBCWFByb2plY3Q7CiAJCQlhdHRyaWJ1dGVzID0gewotCQkJCUxhc3RVcGdyYWRlQ2hlY2sgPSAwNDMwOworCQkJCUxhc3RVcGdyYWRlQ2hlY2sgPSAwNTEwOwogCQkJfTsKLQkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSBGNkIwODM5QTE0NzIxRUU1MDAzMUQ4QTEgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhQcm9qZWN0ICJsaWJmZmkiICovOworCQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IERCMTNCMTVGMTg0OURFQjcwMDEwRjQyRCAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWFByb2plY3QgImxpYmZmaSIgKi87CiAJCQljb21wYXRpYmlsaXR5VmVyc2lvbiA9ICJYY29kZSAzLjIiOwogCQkJZGV2ZWxvcG1lbnRSZWdpb24gPSBFbmdsaXNoOwogCQkJaGFzU2Nhbm5lZEZvckVuY29kaW5ncyA9IDA7CiAJCQlrbm93blJlZ2lvbnMgPSAoCiAJCQkJZW4sCiAJCQkpOwotCQkJbWFpbkdyb3VwID0gRjZCMDgzOTUxNDcyMUVFNTAwMzFEOEExOwotCQkJcHJvZHVjdFJlZkdyb3VwID0gRjZCMDgzOTUxNDcyMUVFNTAwMzFEOEExOworCQkJbWFpbkdyb3VwID0gREIxM0IxNUIxODQ5REVCNzAwMTBGNDJEOworCQkJcHJvZHVjdFJlZkdyb3VwID0gREIxM0IxNjcxODQ5REYxRTAwMTBGNDJEIC8qIFByb2R1Y3RzICovOwogCQkJcHJvamVjdERpclBhdGggPSAiIjsKIAkJCXByb2plY3RSb290ID0gIiI7CiAJCQl0YXJnZXRzID0gKAotCQkJCUY2Rjk4MEI5MTQ3Mzg2MTMwMDA4RjEyMSAvKiBsaWJmZmkgaU9TICovLAotCQkJCTZDNDNDQjNDMTUzNEU5RDEwMDE2MjM2NCAvKiBsaWJmZmkgT1MgWCAqLywKKwkJCQlEQjEzQjE2NTE4NDlERjFFMDAxMEY0MkQgLyogbGliZmZpLWlPUyAqLywKKwkJCQlEQjEzQjE5MDE4NDlERjUxMDAxMEY0MkQgLyogbGliZmZpLU1hYyAqLywKIAkJCSk7CiAJCX07CiAvKiBFbmQgUEJYUHJvamVjdCBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFBCWFNoZWxsU2NyaXB0QnVpbGRQaGFzZSBzZWN0aW9uICovCi0JCTZDNDNDQzNFMTUzNEY4RTIwMDE2MjM2NCAvKiBHZW5lcmF0ZSBUcmFtcG9saW5lICovID0geworCQlEQjEzQjMwNTE4NDlFMDFDMDAxMEY0MkQgLyogU2hlbGxTY3JpcHQgKi8gPSB7CiAJCQlpc2EgPSBQQlhTaGVsbFNjcmlwdEJ1aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMgPSAoCiAJCQkpOwogCQkJaW5wdXRQYXRocyA9ICgKIAkJCSk7Ci0JCQluYW1lID0gIkdlbmVyYXRlIFRyYW1wb2xpbmUiOwotCQkJb3V0cHV0UGF0aHMgPSAoCi0JCQkpOwotCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7Ci0JCQlzaGVsbFBhdGggPSAvdXNyL2Jpbi9weXRob247Ci0JCQlzaGVsbFNjcmlwdCA9ICJpbXBvcnQgc3VicHJvY2Vzc1xuaW1wb3J0IHJlXG5pbXBvcnQgb3NcbmltcG9ydCBlcnJub1xuaW1wb3J0IHN5c1xuXG5kZWYgbWFpbigpOlxuICAgIHdpdGggb3Blbignc3JjL2FybS90cmFtcG9saW5lLlMnLCAndycpIGFzIHRyYW1wX291dDpcbiAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oWydiYXNoJywgJ3NyYy9hcm0vZ2VudHJhbXAuc2gnXSwgc3Rkb3V0PXRyYW1wX291dClcbiAgICAgICAgcC53YWl0KClcblxuaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzpcbiAgICBtYWluKCkiOwotCQl9OwotCQk2QzQzQ0MzRjE1MzRGRjFCMDAxNjIzNjQgLyogR2VuZXJhdGUgU291cmNlIGFuZCBIZWFkZXJzICovID0gewotCQkJaXNhID0gUEJYU2hlbGxTY3JpcHRCdWlsZFBoYXNlOwotCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKLQkJCWZpbGVzID0gKAotCQkJKTsKLQkJCWlucHV0UGF0aHMgPSAoCi0JCQkpOwotCQkJbmFtZSA9ICJHZW5lcmF0ZSBTb3VyY2UgYW5kIEhlYWRlcnMiOwogCQkJb3V0cHV0UGF0aHMgPSAoCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCQlzaGVsbFBhdGggPSAvYmluL3NoOwotCQkJc2hlbGxTY3JpcHQgPSAiL3Vzci9iaW4vcHl0aG9uIGdlbmVyYXRlLWlvcy1zb3VyY2UtYW5kLWhlYWRlcnMucHkiOworCQkJc2hlbGxTY3JpcHQgPSAiL3Vzci9iaW4vcHl0aG9uIGdlbmVyYXRlLWRhcndpbi1zb3VyY2UtYW5kLWhlYWRlcnMucHkgLS1vbmx5LWlvcyI7CiAJCX07Ci0JCTZDNDNDQzQwMTUzNEZGM0IwMDE2MjM2NCAvKiBHZW5lcmF0ZSBTb3VyY2UgYW5kIEhlYWRlcnMgKi8gPSB7CisJCURCMTNCMzA2MTg0OUUwNDkwMDEwRjQyRCAvKiBTaGVsbFNjcmlwdCAqLyA9IHsKIAkJCWlzYSA9IFBCWFNoZWxsU2NyaXB0QnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CiAJCQlmaWxlcyA9ICgKIAkJCSk7CiAJCQlpbnB1dFBhdGhzID0gKAogCQkJKTsKLQkJCW5hbWUgPSAiR2VuZXJhdGUgU291cmNlIGFuZCBIZWFkZXJzIjsKIAkJCW91dHB1dFBhdGhzID0gKAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQkJc2hlbGxQYXRoID0gL2Jpbi9zaDsKLQkJCXNoZWxsU2NyaXB0ID0gIi91c3IvYmluL3B5dGhvbiBnZW5lcmF0ZS1vc3gtc291cmNlLWFuZC1oZWFkZXJzLnB5IjsKKwkJCXNoZWxsU2NyaXB0ID0gIi91c3IvYmluL3B5dGhvbiBnZW5lcmF0ZS1kYXJ3aW4tc291cmNlLWFuZC1oZWFkZXJzLnB5IC0tb25seS1vc3giOwogCQl9OwogLyogRW5kIFBCWFNoZWxsU2NyaXB0QnVpbGRQaGFzZSBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFBCWFNvdXJjZXNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KLQkJNkM0M0NCMzkxNTM0RTlEMTAwMTYyMzY0IC8qIFNvdXJjZXMgKi8gPSB7CisJCURCMTNCMTYyMTg0OURGMUUwMDEwRjQyRCAvKiBTb3VyY2VzICovID0gewogCQkJaXNhID0gUEJYU291cmNlc0J1aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMgPSAoCi0JCQkJNkM0M0NDMUYxNTM0Rjc3ODAwMTYyMzY0IC8qIGRhcndpbi5TIGluIFNvdXJjZXMgKi8sCi0JCQkJNkM0M0NDMjAxNTM0Rjc3ODAwMTYyMzY0IC8qIGRhcndpbjY0LlMgaW4gU291cmNlcyAqLywKLQkJCQk2QzQzQ0MyMTE1MzRGNzc4MDAxNjIzNjQgLyogZmZpLmMgaW4gU291cmNlcyAqLywKLQkJCQk2QzQzQ0MyMjE1MzRGNzc4MDAxNjIzNjQgLyogZmZpNjQuYyBpbiBTb3VyY2VzICovLAotCQkJCTZDNDNDQzMwMTUzNEY3QkUwMDE2MjM2NCAvKiBjbG9zdXJlcy5jIGluIFNvdXJjZXMgKi8sCi0JCQkJNkM0M0NDMzYxNTM0RjdCRTAwMTYyMzY0IC8qIGphdmFfcmF3X2FwaS5jIGluIFNvdXJjZXMgKi8sCi0JCQkJNkM0M0NDMzgxNTM0RjdCRTAwMTYyMzY0IC8qIHByZXBfY2lmLmMgaW4gU291cmNlcyAqLywKLQkJCQk2QzQzQ0MzQTE1MzRGN0JFMDAxNjIzNjQgLyogcmF3X2FwaS5jIGluIFNvdXJjZXMgKi8sCi0JCQkJNkM0M0NDM0MxNTM0RjdCRTAwMTYyMzY0IC8qIHR5cGVzLmMgaW4gU291cmNlcyAqLywKKwkJCQlEQkZBNzE3RTE4N0YxRDlCMDBBNzYyNjIgLyogZmZpNjRfeDg2XzY0LmMgaW4gU291cmNlcyAqLywKKwkJCQlEQkZBNzE3OTE4N0YxRDlCMDBBNzYyNjIgLyogZmZpX2FybXY3LmMgaW4gU291cmNlcyAqLywKKwkJCQlEQkZBNzE3QjE4N0YxRDlCMDBBNzYyNjIgLyogdHJhbXBvbGluZV9hcm12Ny5TIGluIFNvdXJjZXMgKi8sCisJCQkJREJGQTcxNEUxODdGMUQ4NjAwQTc2MjYyIC8qIGNsb3N1cmVzLmMgaW4gU291cmNlcyAqLywKKwkJCQlEQkZBNzE3QTE4N0YxRDlCMDBBNzYyNjIgLyogc3lzdl9hcm12Ny5TIGluIFNvdXJjZXMgKi8sCisJCQkJREJGQTcxN0QxODdGMUQ5QjAwQTc2MjYyIC8qIGRhcndpbl9pMzg2LlMgaW4gU291cmNlcyAqLywKKwkJCQlEQkZBNzE1NjE4N0YxRDg2MDBBNzYyNjIgLyogcHJlcF9jaWYuYyBpbiBTb3VyY2VzICovLAorCQkJCURCRkE3MTdGMTg3RjFEOUIwMEE3NjI2MiAvKiBmZmlfaTM4Ni5jIGluIFNvdXJjZXMgKi8sCisJCQkJREJGQTcxNTgxODdGMUQ4NjAwQTc2MjYyIC8qIHJhd19hcGkuYyBpbiBTb3VyY2VzICovLAorCQkJCURCRkE3MTc4MTg3RjFEOUIwMEE3NjI2MiAvKiBzeXN2X2FybTY0LlMgaW4gU291cmNlcyAqLywKKwkJCQlEQkZBNzE3QzE4N0YxRDlCMDBBNzYyNjIgLyogZGFyd2luNjRfeDg2XzY0LlMgaW4gU291cmNlcyAqLywKKwkJCQlEQkZBNzE1QTE4N0YxRDg2MDBBNzYyNjIgLyogdHlwZXMuYyBpbiBTb3VyY2VzICovLAorCQkJCURCRkE3MTc3MTg3RjFEOUIwMEE3NjI2MiAvKiBmZmlfYXJtNjQuYyBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwotCQlGNkY5ODBCNjE0NzM4NjEzMDAwOEYxMjEgLyogU291cmNlcyAqLyA9IHsKKwkJREIxM0IxOEQxODQ5REY1MTAwMTBGNDJEIC8qIFNvdXJjZXMgKi8gPSB7CiAJCQlpc2EgPSBQQlhTb3VyY2VzQnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CiAJCQlmaWxlcyA9ICgKLQkJCQk2QzQzQ0JEQzE1MzRGNzZGMDAxNjIzNjQgLyogZmZpLmMgaW4gU291cmNlcyAqLywKLQkJCQk2QzQzQ0JERDE1MzRGNzZGMDAxNjIzNjQgLyogc3lzdi5TIGluIFNvdXJjZXMgKi8sCi0JCQkJNkM0M0NCREUxNTM0Rjc2RjAwMTYyMzY0IC8qIHRyYW1wb2xpbmUuUyBpbiBTb3VyY2VzICovLAotCQkJCTZDNDNDQkU2MTUzNEY3NkYwMDE2MjM2NCAvKiBkYXJ3aW4uUyBpbiBTb3VyY2VzICovLAotCQkJCTZDNDNDQkU4MTUzNEY3NkYwMDE2MjM2NCAvKiBmZmkuYyBpbiBTb3VyY2VzICovLAotCQkJCTZDNDNDQzJGMTUzNEY3QkUwMDE2MjM2NCAvKiBjbG9zdXJlcy5jIGluIFNvdXJjZXMgKi8sCi0JCQkJNkM0M0NDMzUxNTM0RjdCRTAwMTYyMzY0IC8qIGphdmFfcmF3X2FwaS5jIGluIFNvdXJjZXMgKi8sCi0JCQkJNkM0M0NDMzcxNTM0RjdCRTAwMTYyMzY0IC8qIHByZXBfY2lmLmMgaW4gU291cmNlcyAqLywKLQkJCQk2QzQzQ0MzOTE1MzRGN0JFMDAxNjIzNjQgLyogcmF3X2FwaS5jIGluIFNvdXJjZXMgKi8sCi0JCQkJNkM0M0NDM0IxNTM0RjdCRTAwMTYyMzY0IC8qIHR5cGVzLmMgaW4gU291cmNlcyAqLywKKwkJCQlEQkZBNzE5NjE4N0YxREExMDBBNzYyNjIgLyogZmZpNjRfeDg2XzY0LmMgaW4gU291cmNlcyAqLywKKwkJCQlEQkZBNzE5NTE4N0YxREExMDBBNzYyNjIgLyogZGFyd2luX2kzODYuUyBpbiBTb3VyY2VzICovLAorCQkJCURCRkE3MTU3MTg3RjFEODYwMEE3NjI2MiAvKiBwcmVwX2NpZi5jIGluIFNvdXJjZXMgKi8sCisJCQkJREJGQTcxOTcxODdGMURBMTAwQTc2MjYyIC8qIGZmaV9pMzg2LmMgaW4gU291cmNlcyAqLywKKwkJCQlEQkZBNzE1QjE4N0YxRDg2MDBBNzYyNjIgLyogdHlwZXMuYyBpbiBTb3VyY2VzICovLAorCQkJCURCRkE3MTU5MTg3RjFEODYwMEE3NjI2MiAvKiByYXdfYXBpLmMgaW4gU291cmNlcyAqLywKKwkJCQlEQkZBNzE0RjE4N0YxRDg2MDBBNzYyNjIgLyogY2xvc3VyZXMuYyBpbiBTb3VyY2VzICovLAorCQkJCURCRkE3MTk0MTg3RjFEQTEwMEE3NjI2MiAvKiBkYXJ3aW42NF94ODZfNjQuUyBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwogLyogRW5kIFBCWFNvdXJjZXNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KIAogLyogQmVnaW4gWENCdWlsZENvbmZpZ3VyYXRpb24gc2VjdGlvbiAqLwotCQk2QzQzQ0I0QjE1MzRFOUQxMDAxNjIzNjQgLyogRGVidWcgKi8gPSB7CisJCURCMTNCMTYwMTg0OURFQjcwMDEwRjQyRCAvKiBEZWJ1ZyAqLyA9IHsKIAkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOwogCQkJYnVpbGRTZXR0aW5ncyA9IHsKLQkJCQlBUkNIUyA9ICIkKEFSQ0hTX1NUQU5EQVJEXzMyXzY0X0JJVCkiOwotCQkJCURTVFJPT1QgPSAvdG1wL2ZmaS5kc3Q7Ci0JCQkJRlJBTUVXT1JLX1NFQVJDSF9QQVRIUyA9ICgKKwkJCQlIRUFERVJfU0VBUkNIX1BBVEhTID0gKAogCQkJCQkiJChpbmhlcml0ZWQpIiwKLQkJCQkJIlwiJChTWVNURU1fQVBQU19ESVIpL1hjb2RlLmFwcC9Db250ZW50cy9EZXZlbG9wZXIvTGlicmFyeS9GcmFtZXdvcmtzXCIiLAorCQkJCQkiZGFyd2luX2NvbW1vbi9pbmNsdWRlIiwKIAkJCQkpOwotCQkJCUdDQ19FTkFCTEVfT0JKQ19FWENFUFRJT05TID0gWUVTOwotCQkJCUdDQ19WRVJTSU9OID0gY29tLmFwcGxlLmNvbXBpbGVycy5sbHZtLmNsYW5nLjFfMDsKLQkJCQlHQ0NfV0FSTl82NF9UT18zMl9CSVRfQ09OVkVSU0lPTiA9IFlFUzsKLQkJCQlHQ0NfV0FSTl9VTklOSVRJQUxJWkVEX0FVVE9TID0gWUVTOwotCQkJCU1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCA9IDEwLjY7CiAJCQkJT05MWV9BQ1RJVkVfQVJDSCA9IFlFUzsKLQkJCQlQUk9EVUNUX05BTUUgPSBmZmk7Ci0JCQkJU0RLUk9PVCA9IG1hY29zeDsKIAkJCX07CiAJCQluYW1lID0gRGVidWc7CiAJCX07Ci0JCTZDNDNDQjRDMTUzNEU5RDEwMDE2MjM2NCAvKiBSZWxlYXNlICovID0geworCQlEQjEzQjE2MTE4NDlERUI3MDAxMEY0MkQgLyogUmVsZWFzZSAqLyA9IHsKIAkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOwogCQkJYnVpbGRTZXR0aW5ncyA9IHsKLQkJCQlBUkNIUyA9ICIkKEFSQ0hTX1NUQU5EQVJEXzMyXzY0X0JJVCkiOwotCQkJCURFQlVHX0lORk9STUFUSU9OX0ZPUk1BVCA9ICJkd2FyZi13aXRoLWRzeW0iOwotCQkJCURTVFJPT1QgPSAvdG1wL2ZmaS5kc3Q7Ci0JCQkJRlJBTUVXT1JLX1NFQVJDSF9QQVRIUyA9ICgKKwkJCQlIRUFERVJfU0VBUkNIX1BBVEhTID0gKAogCQkJCQkiJChpbmhlcml0ZWQpIiwKLQkJCQkJIlwiJChTWVNURU1fQVBQU19ESVIpL1hjb2RlLmFwcC9Db250ZW50cy9EZXZlbG9wZXIvTGlicmFyeS9GcmFtZXdvcmtzXCIiLAorCQkJCQkiZGFyd2luX2NvbW1vbi9pbmNsdWRlIiwKIAkJCQkpOwotCQkJCUdDQ19FTkFCTEVfT0JKQ19FWENFUFRJT05TID0gWUVTOwotCQkJCUdDQ19WRVJTSU9OID0gY29tLmFwcGxlLmNvbXBpbGVycy5sbHZtLmNsYW5nLjFfMDsKLQkJCQlHQ0NfV0FSTl82NF9UT18zMl9CSVRfQ09OVkVSU0lPTiA9IFlFUzsKLQkJCQlHQ0NfV0FSTl9VTklOSVRJQUxJWkVEX0FVVE9TID0gWUVTOwotCQkJCU1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCA9IDEwLjY7Ci0JCQkJUFJPRFVDVF9OQU1FID0gZmZpOwotCQkJCVNES1JPT1QgPSBtYWNvc3g7CiAJCQl9OwogCQkJbmFtZSA9IFJlbGVhc2U7CiAJCX07Ci0JCUY2QjA4M0FCMTQ3MjFFRTUwMDMxRDhBMSAvKiBEZWJ1ZyAqLyA9IHsKKwkJREIxM0IxODcxODQ5REYxRTAwMTBGNDJEIC8qIERlYnVnICovID0gewogCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CiAJCQlidWlsZFNldHRpbmdzID0gewogCQkJCUFMV0FZU19TRUFSQ0hfVVNFUl9QQVRIUyA9IE5POwotCQkJCUFSQ0hTID0gIiQoQVJDSFNfU1RBTkRBUkRfMzJfQklUKSI7CisJCQkJQVJDSFMgPSAiJChBUkNIU19TVEFOREFSRF9JTkNMVURJTkdfNjRfQklUKSI7CisJCQkJQ0xBTkdfQ1hYX0xBTkdVQUdFX1NUQU5EQVJEID0gImdudSsrMHgiOworCQkJCUNMQU5HX0NYWF9MSUJSQVJZID0gImxpYmMrKyI7CisJCQkJQ0xBTkdfRU5BQkxFX01PRFVMRVMgPSBZRVM7CisJCQkJQ0xBTkdfRU5BQkxFX09CSkNfQVJDID0gWUVTOworCQkJCUNMQU5HX1dBUk5fQk9PTF9DT05WRVJTSU9OID0gWUVTOworCQkJCUNMQU5HX1dBUk5fQ09OU1RBTlRfQ09OVkVSU0lPTiA9IFlFUzsKKwkJCQlDTEFOR19XQVJOX0RJUkVDVF9PQkpDX0lTQV9VU0FHRSA9IFlFU19FUlJPUjsKKwkJCQlDTEFOR19XQVJOX0VNUFRZX0JPRFkgPSBZRVM7CisJCQkJQ0xBTkdfV0FSTl9FTlVNX0NPTlZFUlNJT04gPSBZRVM7CisJCQkJQ0xBTkdfV0FSTl9JTlRfQ09OVkVSU0lPTiA9IFlFUzsKKwkJCQlDTEFOR19XQVJOX09CSkNfUk9PVF9DTEFTUyA9IFlFU19FUlJPUjsKKwkJCQlDTEFOR19XQVJOX19EVVBMSUNBVEVfTUVUSE9EX01BVENIID0gWUVTOwogCQkJCUNPUFlfUEhBU0VfU1RSSVAgPSBOTzsKKwkJCQlEU1RST09UID0gL3RtcC9mZmkuZHN0OwogCQkJCUdDQ19DX0xBTkdVQUdFX1NUQU5EQVJEID0gZ251OTk7CiAJCQkJR0NDX0RZTkFNSUNfTk9fUElDID0gTk87CiAJCQkJR0NDX09QVElNSVpBVElPTl9MRVZFTCA9IDA7CkBAIC00ODIsOTggKzQ1NywxODEgQEAKIAkJCQkJIiQoaW5oZXJpdGVkKSIsCiAJCQkJKTsKIAkJCQlHQ0NfU1lNQk9MU19QUklWQVRFX0VYVEVSTiA9IE5POwotCQkJCUdDQ19XQVJOX0FCT1VUX01JU1NJTkdfUFJPVE9UWVBFUyA9IE5POwotCQkJCUdDQ19XQVJOX0FCT1VUX1JFVFVSTl9UWVBFID0gWUVTOwotCQkJCUdDQ19XQVJOX1VOVVNFRF9WQUxVRSA9IE5POworCQkJCUdDQ19XQVJOXzY0X1RPXzMyX0JJVF9DT05WRVJTSU9OID0gWUVTOworCQkJCUdDQ19XQVJOX0FCT1VUX1JFVFVSTl9UWVBFID0gWUVTX0VSUk9SOworCQkJCUdDQ19XQVJOX1VOREVDTEFSRURfU0VMRUNUT1IgPSBZRVM7CisJCQkJR0NDX1dBUk5fVU5JTklUSUFMSVpFRF9BVVRPUyA9IFlFU19BR0dSRVNTSVZFOworCQkJCUdDQ19XQVJOX1VOVVNFRF9GVU5DVElPTiA9IFlFUzsKIAkJCQlHQ0NfV0FSTl9VTlVTRURfVkFSSUFCTEUgPSBZRVM7Ci0JCQkJSEVBREVSX1NFQVJDSF9QQVRIUyA9IGlvcy9pbmNsdWRlOworCQkJCUhFQURFUl9TRUFSQ0hfUEFUSFMgPSAoCisJCQkJCSIkKGluaGVyaXRlZCkiLAorCQkJCQkiZGFyd2luX2lvcy9pbmNsdWRlIiwKKwkJCQkpOworCQkJCUlQSE9ORU9TX0RFUExPWU1FTlRfVEFSR0VUID0gNS4wOworCQkJCSJJUEhPTkVPU19ERVBMT1lNRU5UX1RBUkdFVFthcmNoPWFybTY0XSIgPSA3LjA7CisJCQkJT1RIRVJfTERGTEFHUyA9ICItT2JqQyI7CisJCQkJUFJPRFVDVF9OQU1FID0gZmZpOwogCQkJCVNES1JPT1QgPSBpcGhvbmVvczsKKwkJCQlTS0lQX0lOU1RBTEwgPSBZRVM7CiAJCQl9OwogCQkJbmFtZSA9IERlYnVnOwogCQl9OwotCQlGNkIwODNBQzE0NzIxRUU1MDAzMUQ4QTEgLyogUmVsZWFzZSAqLyA9IHsKKwkJREIxM0IxODgxODQ5REYxRTAwMTBGNDJEIC8qIFJlbGVhc2UgKi8gPSB7CiAJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKIAkJCWJ1aWxkU2V0dGluZ3MgPSB7CiAJCQkJQUxXQVlTX1NFQVJDSF9VU0VSX1BBVEhTID0gTk87Ci0JCQkJQVJDSFMgPSAiJChBUkNIU19TVEFOREFSRF8zMl9CSVQpIjsKKwkJCQlBUkNIUyA9ICIkKEFSQ0hTX1NUQU5EQVJEX0lOQ0xVRElOR182NF9CSVQpIjsKKwkJCQlDTEFOR19DWFhfTEFOR1VBR0VfU1RBTkRBUkQgPSAiZ251KysweCI7CisJCQkJQ0xBTkdfQ1hYX0xJQlJBUlkgPSAibGliYysrIjsKKwkJCQlDTEFOR19FTkFCTEVfTU9EVUxFUyA9IFlFUzsKKwkJCQlDTEFOR19FTkFCTEVfT0JKQ19BUkMgPSBZRVM7CisJCQkJQ0xBTkdfV0FSTl9CT09MX0NPTlZFUlNJT04gPSBZRVM7CisJCQkJQ0xBTkdfV0FSTl9DT05TVEFOVF9DT05WRVJTSU9OID0gWUVTOworCQkJCUNMQU5HX1dBUk5fRElSRUNUX09CSkNfSVNBX1VTQUdFID0gWUVTX0VSUk9SOworCQkJCUNMQU5HX1dBUk5fRU1QVFlfQk9EWSA9IFlFUzsKKwkJCQlDTEFOR19XQVJOX0VOVU1fQ09OVkVSU0lPTiA9IFlFUzsKKwkJCQlDTEFOR19XQVJOX0lOVF9DT05WRVJTSU9OID0gWUVTOworCQkJCUNMQU5HX1dBUk5fT0JKQ19ST09UX0NMQVNTID0gWUVTX0VSUk9SOworCQkJCUNMQU5HX1dBUk5fX0RVUExJQ0FURV9NRVRIT0RfTUFUQ0ggPSBZRVM7CiAJCQkJQ09QWV9QSEFTRV9TVFJJUCA9IFlFUzsKKwkJCQlEU1RST09UID0gL3RtcC9mZmkuZHN0OworCQkJCUVOQUJMRV9OU19BU1NFUlRJT05TID0gTk87CiAJCQkJR0NDX0NfTEFOR1VBR0VfU1RBTkRBUkQgPSBnbnU5OTsKLQkJCQlHQ0NfUFJFUFJPQ0VTU09SX0RFRklOSVRJT05TID0gIiI7Ci0JCQkJR0NDX1dBUk5fQUJPVVRfTUlTU0lOR19QUk9UT1RZUEVTID0gTk87Ci0JCQkJR0NDX1dBUk5fQUJPVVRfUkVUVVJOX1RZUEUgPSBZRVM7Ci0JCQkJR0NDX1dBUk5fVU5VU0VEX1ZBTFVFID0gTk87CisJCQkJR0NDX1dBUk5fNjRfVE9fMzJfQklUX0NPTlZFUlNJT04gPSBZRVM7CisJCQkJR0NDX1dBUk5fQUJPVVRfUkVUVVJOX1RZUEUgPSBZRVNfRVJST1I7CisJCQkJR0NDX1dBUk5fVU5ERUNMQVJFRF9TRUxFQ1RPUiA9IFlFUzsKKwkJCQlHQ0NfV0FSTl9VTklOSVRJQUxJWkVEX0FVVE9TID0gWUVTX0FHR1JFU1NJVkU7CisJCQkJR0NDX1dBUk5fVU5VU0VEX0ZVTkNUSU9OID0gWUVTOwogCQkJCUdDQ19XQVJOX1VOVVNFRF9WQVJJQUJMRSA9IFlFUzsKLQkJCQlIRUFERVJfU0VBUkNIX1BBVEhTID0gaW9zL2luY2x1ZGU7CisJCQkJSEVBREVSX1NFQVJDSF9QQVRIUyA9ICgKKwkJCQkJIiQoaW5oZXJpdGVkKSIsCisJCQkJCSJkYXJ3aW5faW9zL2luY2x1ZGUiLAorCQkJCSk7CisJCQkJSVBIT05FT1NfREVQTE9ZTUVOVF9UQVJHRVQgPSA1LjA7CisJCQkJIklQSE9ORU9TX0RFUExPWU1FTlRfVEFSR0VUW2FyY2g9YXJtNjRdIiA9IDcuMDsKKwkJCQlPVEhFUl9MREZMQUdTID0gIi1PYmpDIjsKKwkJCQlQUk9EVUNUX05BTUUgPSBmZmk7CiAJCQkJU0RLUk9PVCA9IGlwaG9uZW9zOworCQkJCVNLSVBfSU5TVEFMTCA9IFlFUzsKIAkJCQlWQUxJREFURV9QUk9EVUNUID0gWUVTOwogCQkJfTsKIAkJCW5hbWUgPSBSZWxlYXNlOwogCQl9OwotCQlGNkY5ODBDMjE0NzM4NjEzMDAwOEYxMjEgLyogRGVidWcgKi8gPSB7CisJCURCMTNCMUIxMTg0OURGNTIwMDEwRjQyRCAvKiBEZWJ1ZyAqLyA9IHsKIAkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOwogCQkJYnVpbGRTZXR0aW5ncyA9IHsKLQkJCQlBUkNIUyA9ICgKLQkJCQkJYXJtdjYsCi0JCQkJCWFybXY3LAorCQkJCUFMV0FZU19TRUFSQ0hfVVNFUl9QQVRIUyA9IE5POworCQkJCUNMQU5HX0NYWF9MQU5HVUFHRV9TVEFOREFSRCA9ICJnbnUrKzB4IjsKKwkJCQlDTEFOR19DWFhfTElCUkFSWSA9ICJsaWJjKysiOworCQkJCUNMQU5HX0VOQUJMRV9PQkpDX0FSQyA9IFlFUzsKKwkJCQlDTEFOR19XQVJOX0JPT0xfQ09OVkVSU0lPTiA9IFlFUzsKKwkJCQlDTEFOR19XQVJOX0NPTlNUQU5UX0NPTlZFUlNJT04gPSBZRVM7CisJCQkJQ0xBTkdfV0FSTl9ESVJFQ1RfT0JKQ19JU0FfVVNBR0UgPSBZRVNfRVJST1I7CisJCQkJQ0xBTkdfV0FSTl9FTVBUWV9CT0RZID0gWUVTOworCQkJCUNMQU5HX1dBUk5fRU5VTV9DT05WRVJTSU9OID0gWUVTOworCQkJCUNMQU5HX1dBUk5fSU5UX0NPTlZFUlNJT04gPSBZRVM7CisJCQkJQ0xBTkdfV0FSTl9PQkpDX1JPT1RfQ0xBU1MgPSBZRVNfRVJST1I7CisJCQkJQ0xBTkdfV0FSTl9fRFVQTElDQVRFX01FVEhPRF9NQVRDSCA9IFlFUzsKKwkJCQlDT1BZX1BIQVNFX1NUUklQID0gTk87CisJCQkJRFlMSUJfQ09NUEFUSUJJTElUWV9WRVJTSU9OID0gMTsKKwkJCQlEWUxJQl9DVVJSRU5UX1ZFUlNJT04gPSAxOworCQkJCUdDQ19DX0xBTkdVQUdFX1NUQU5EQVJEID0gZ251OTk7CisJCQkJR0NDX0RZTkFNSUNfTk9fUElDID0gTk87CisJCQkJR0NDX0VOQUJMRV9PQkpDX0VYQ0VQVElPTlMgPSBZRVM7CisJCQkJR0NDX09QVElNSVpBVElPTl9MRVZFTCA9IDA7CisJCQkJR0NDX1BSRVBST0NFU1NPUl9ERUZJTklUSU9OUyA9ICgKKwkJCQkJIkRFQlVHPTEiLAorCQkJCQkiJChpbmhlcml0ZWQpIiwKIAkJCQkpOwotCQkJCURTVFJPT1QgPSAvdG1wL2ZmaS5kc3Q7Ci0JCQkJR0NDX1BSRUNPTVBJTEVfUFJFRklYX0hFQURFUiA9IFlFUzsKLQkJCQlHQ0NfVEhVTUJfU1VQUE9SVCA9IE5POwotCQkJCUlQSE9ORU9TX0RFUExPWU1FTlRfVEFSR0VUID0gNC4wOwotCQkJCU9USEVSX0xERkxBR1MgPSAiLU9iakMiOworCQkJCUdDQ19TWU1CT0xTX1BSSVZBVEVfRVhURVJOID0gTk87CisJCQkJR0NDX1dBUk5fNjRfVE9fMzJfQklUX0NPTlZFUlNJT04gPSBZRVM7CisJCQkJR0NDX1dBUk5fQUJPVVRfUkVUVVJOX1RZUEUgPSBZRVNfRVJST1I7CisJCQkJR0NDX1dBUk5fVU5ERUNMQVJFRF9TRUxFQ1RPUiA9IFlFUzsKKwkJCQlHQ0NfV0FSTl9VTklOSVRJQUxJWkVEX0FVVE9TID0gWUVTX0FHR1JFU1NJVkU7CisJCQkJR0NDX1dBUk5fVU5VU0VEX0ZVTkNUSU9OID0gWUVTOworCQkJCUdDQ19XQVJOX1VOVVNFRF9WQVJJQUJMRSA9IFlFUzsKKwkJCQlIRUFERVJfU0VBUkNIX1BBVEhTID0gKAorCQkJCQkiJChpbmhlcml0ZWQpIiwKKwkJCQkJImRhcndpbl9vc3gvaW5jbHVkZSIsCisJCQkJKTsKKwkJCQlNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQgPSAxMC42OworCQkJCU9OTFlfQUNUSVZFX0FSQ0ggPSBZRVM7CisJCQkJT1RIRVJfTERGTEFHUyA9ICItV2wsLW5vX2NvbXBhY3RfdW53aW5kIjsKIAkJCQlQUk9EVUNUX05BTUUgPSBmZmk7Ci0JCQkJU0tJUF9JTlNUQUxMID0gWUVTOworCQkJCVNES1JPT1QgPSBtYWNvc3g7CiAJCQl9OwogCQkJbmFtZSA9IERlYnVnOwogCQl9OwotCQlGNkY5ODBDMzE0NzM4NjEzMDAwOEYxMjEgLyogUmVsZWFzZSAqLyA9IHsKKwkJREIxM0IxQjIxODQ5REY1MjAwMTBGNDJEIC8qIFJlbGVhc2UgKi8gPSB7CiAJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKIAkJCWJ1aWxkU2V0dGluZ3MgPSB7Ci0JCQkJQVJDSFMgPSAoCi0JCQkJCWFybXY2LAotCQkJCQlhcm12NywKKwkJCQlBTFdBWVNfU0VBUkNIX1VTRVJfUEFUSFMgPSBOTzsKKwkJCQlDTEFOR19DWFhfTEFOR1VBR0VfU1RBTkRBUkQgPSAiZ251KysweCI7CisJCQkJQ0xBTkdfQ1hYX0xJQlJBUlkgPSAibGliYysrIjsKKwkJCQlDTEFOR19FTkFCTEVfT0JKQ19BUkMgPSBZRVM7CisJCQkJQ0xBTkdfV0FSTl9CT09MX0NPTlZFUlNJT04gPSBZRVM7CisJCQkJQ0xBTkdfV0FSTl9DT05TVEFOVF9DT05WRVJTSU9OID0gWUVTOworCQkJCUNMQU5HX1dBUk5fRElSRUNUX09CSkNfSVNBX1VTQUdFID0gWUVTX0VSUk9SOworCQkJCUNMQU5HX1dBUk5fRU1QVFlfQk9EWSA9IFlFUzsKKwkJCQlDTEFOR19XQVJOX0VOVU1fQ09OVkVSU0lPTiA9IFlFUzsKKwkJCQlDTEFOR19XQVJOX0lOVF9DT05WRVJTSU9OID0gWUVTOworCQkJCUNMQU5HX1dBUk5fT0JKQ19ST09UX0NMQVNTID0gWUVTX0VSUk9SOworCQkJCUNMQU5HX1dBUk5fX0RVUExJQ0FURV9NRVRIT0RfTUFUQ0ggPSBZRVM7CisJCQkJQ09QWV9QSEFTRV9TVFJJUCA9IFlFUzsKKwkJCQlERUJVR19JTkZPUk1BVElPTl9GT1JNQVQgPSAiZHdhcmYtd2l0aC1kc3ltIjsKKwkJCQlEWUxJQl9DT01QQVRJQklMSVRZX1ZFUlNJT04gPSAxOworCQkJCURZTElCX0NVUlJFTlRfVkVSU0lPTiA9IDE7CisJCQkJRU5BQkxFX05TX0FTU0VSVElPTlMgPSBOTzsKKwkJCQlHQ0NfQ19MQU5HVUFHRV9TVEFOREFSRCA9IGdudTk5OworCQkJCUdDQ19FTkFCTEVfT0JKQ19FWENFUFRJT05TID0gWUVTOworCQkJCUdDQ19XQVJOXzY0X1RPXzMyX0JJVF9DT05WRVJTSU9OID0gWUVTOworCQkJCUdDQ19XQVJOX0FCT1VUX1JFVFVSTl9UWVBFID0gWUVTX0VSUk9SOworCQkJCUdDQ19XQVJOX1VOREVDTEFSRURfU0VMRUNUT1IgPSBZRVM7CisJCQkJR0NDX1dBUk5fVU5JTklUSUFMSVpFRF9BVVRPUyA9IFlFU19BR0dSRVNTSVZFOworCQkJCUdDQ19XQVJOX1VOVVNFRF9GVU5DVElPTiA9IFlFUzsKKwkJCQlHQ0NfV0FSTl9VTlVTRURfVkFSSUFCTEUgPSBZRVM7CisJCQkJSEVBREVSX1NFQVJDSF9QQVRIUyA9ICgKKwkJCQkJIiQoaW5oZXJpdGVkKSIsCisJCQkJCSJkYXJ3aW5fb3N4L2luY2x1ZGUiLAogCQkJCSk7Ci0JCQkJRFNUUk9PVCA9IC90bXAvZmZpLmRzdDsKLQkJCQlHQ0NfUFJFQ09NUElMRV9QUkVGSVhfSEVBREVSID0gWUVTOwotCQkJCUdDQ19USFVNQl9TVVBQT1JUID0gTk87Ci0JCQkJSVBIT05FT1NfREVQTE9ZTUVOVF9UQVJHRVQgPSA0LjA7Ci0JCQkJT1RIRVJfTERGTEFHUyA9ICItT2JqQyI7CisJCQkJTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUID0gMTAuNjsKKwkJCQlPVEhFUl9MREZMQUdTID0gIi1XbCwtbm9fY29tcGFjdF91bndpbmQiOwogCQkJCVBST0RVQ1RfTkFNRSA9IGZmaTsKLQkJCQlTS0lQX0lOU1RBTEwgPSBZRVM7CisJCQkJU0RLUk9PVCA9IG1hY29zeDsKIAkJCX07CiAJCQluYW1lID0gUmVsZWFzZTsKIAkJfTsKIC8qIEVuZCBYQ0J1aWxkQ29uZmlndXJhdGlvbiBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFhDQ29uZmlndXJhdGlvbkxpc3Qgc2VjdGlvbiAqLwotCQk2QzQzQ0I0QTE1MzRFOUQxMDAxNjIzNjQgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgImxpYmZmaSBPUyBYIiAqLyA9IHsKKwkJREIxM0IxNUYxODQ5REVCNzAwMTBGNDJEIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYUHJvamVjdCAibGliZmZpIiAqLyA9IHsKIAkJCWlzYSA9IFhDQ29uZmlndXJhdGlvbkxpc3Q7CiAJCQlidWlsZENvbmZpZ3VyYXRpb25zID0gKAotCQkJCTZDNDNDQjRCMTUzNEU5RDEwMDE2MjM2NCAvKiBEZWJ1ZyAqLywKLQkJCQk2QzQzQ0I0QzE1MzRFOUQxMDAxNjIzNjQgLyogUmVsZWFzZSAqLywKKwkJCQlEQjEzQjE2MDE4NDlERUI3MDAxMEY0MkQgLyogRGVidWcgKi8sCisJCQkJREIxM0IxNjExODQ5REVCNzAwMTBGNDJEIC8qIFJlbGVhc2UgKi8sCiAJCQkpOwogCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAwOwogCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25OYW1lID0gUmVsZWFzZTsKIAkJfTsKLQkJRjZCMDgzOUExNDcyMUVFNTAwMzFEOEExIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYUHJvamVjdCAibGliZmZpIiAqLyA9IHsKKwkJREIxM0IxOEIxODQ5REYxRTAwMTBGNDJEIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJsaWJmZmktaU9TIiAqLyA9IHsKIAkJCWlzYSA9IFhDQ29uZmlndXJhdGlvbkxpc3Q7CiAJCQlidWlsZENvbmZpZ3VyYXRpb25zID0gKAotCQkJCUY2QjA4M0FCMTQ3MjFFRTUwMDMxRDhBMSAvKiBEZWJ1ZyAqLywKLQkJCQlGNkIwODNBQzE0NzIxRUU1MDAzMUQ4QTEgLyogUmVsZWFzZSAqLywKKwkJCQlEQjEzQjE4NzE4NDlERjFFMDAxMEY0MkQgLyogRGVidWcgKi8sCisJCQkJREIxM0IxODgxODQ5REYxRTAwMTBGNDJEIC8qIFJlbGVhc2UgKi8sCiAJCQkpOwogCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAwOwogCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25OYW1lID0gUmVsZWFzZTsKIAkJfTsKLQkJRjZGOTgwQzQxNDczODYxMzAwMDhGMTIxIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJsaWJmZmkgaU9TIiAqLyA9IHsKKwkJREIxM0IxQjAxODQ5REY1MjAwMTBGNDJEIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJsaWJmZmktTWFjIiAqLyA9IHsKIAkJCWlzYSA9IFhDQ29uZmlndXJhdGlvbkxpc3Q7CiAJCQlidWlsZENvbmZpZ3VyYXRpb25zID0gKAotCQkJCUY2Rjk4MEMyMTQ3Mzg2MTMwMDA4RjEyMSAvKiBEZWJ1ZyAqLywKLQkJCQlGNkY5ODBDMzE0NzM4NjEzMDAwOEYxMjEgLyogUmVsZWFzZSAqLywKKwkJCQlEQjEzQjFCMTE4NDlERjUyMDAxMEY0MkQgLyogRGVidWcgKi8sCisJCQkJREIxM0IxQjIxODQ5REY1MjAwMTBGNDJEIC8qIFJlbGVhc2UgKi8sCiAJCQkpOwogCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAwOwogCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25OYW1lID0gUmVsZWFzZTsKIAkJfTsKIC8qIEVuZCBYQ0NvbmZpZ3VyYXRpb25MaXN0IHNlY3Rpb24gKi8KIAl9OwotCXJvb3RPYmplY3QgPSBGNkIwODM5NzE0NzIxRUU1MDAzMUQ4QTEgLyogUHJvamVjdCBvYmplY3QgKi87CisJcm9vdE9iamVjdCA9IERCMTNCMTVDMTg0OURFQjcwMDEwRjQyRCAvKiBQcm9qZWN0IG9iamVjdCAqLzsKIH0KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbGlidG9vbC12ZXJzaW9uIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9saWJ0b29sLXZlcnNpb24KaW5kZXggZTc4NGZjNC4uZDRmNTAxYyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9saWJ0b29sLXZlcnNpb24KKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9saWJ0b29sLXZlcnNpb24KQEAgLTI2LDQgKzI2LDQgQEAKICMgICAgcmVsZWFzZSwgdGhlbiBzZXQgYWdlIHRvIDAuCiAjCiAjIENVUlJFTlQ6UkVWSVNJT046QUdFCi02OjE6MAorNjoyOjAKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbHRtYWluLnNoIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9sdG1haW4uc2gKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NAppbmRleCA2M2FlNjlkLi4wNTk1OTgwCi0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbHRtYWluLnNoCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbHRtYWluLnNoCkBAIC0xLDkgKzEsMTAgQEAKKyMhIC9iaW4vc2gKIAotIyBsaWJ0b29sIChHTlUgbGlidG9vbCkgMi40LjIKKyMgbGlidG9vbCAoR05VIGxpYnRvb2wpIDIuNC4yLjQxOAorIyBQcm92aWRlIGdlbmVyYWxpemVkIGxpYnJhcnktYnVpbGRpbmcgc3VwcG9ydCBzZXJ2aWNlcy4KICMgV3JpdHRlbiBieSBHb3Jkb24gTWF0emlna2VpdCA8Z29yZEBnbnUuYWkubWl0LmVkdT4sIDE5OTYKIAotIyBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsCi0jIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIENvcHlyaWdodCAoQykgMTk5Ni0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogIyBUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHNlZSB0aGUgc291cmNlIGZvciBjb3B5aW5nIGNvbmRpdGlvbnMuICBUaGVyZSBpcyBOTwogIyB3YXJyYW50eTsgbm90IGV2ZW4gZm9yIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KIApAQCAtMjMsMTY2ICsyNCw1NjIgQEAKICMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogIwogIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIyBhbG9uZyB3aXRoIEdOVSBMaWJ0b29sOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgYSBjb3B5Ci0jIGNhbiBiZSBkb3dubG9hZGVkIGZyb20gaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC5odG1sLAotIyBvciBvYnRhaW5lZCBieSB3cml0aW5nIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0jIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KIAotIyBVc2FnZTogJHByb2duYW1lIFtPUFRJT05dLi4uIFtNT0RFLUFSR10uLi4KLSMKLSMgUHJvdmlkZSBnZW5lcmFsaXplZCBsaWJyYXJ5LWJ1aWxkaW5nIHN1cHBvcnQgc2VydmljZXMuCi0jCi0jICAgICAgIC0tY29uZmlnICAgICAgICAgICAgIHNob3cgYWxsIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzCi0jICAgICAgIC0tZGVidWcgICAgICAgICAgICAgIGVuYWJsZSB2ZXJib3NlIHNoZWxsIHRyYWNpbmcKLSMgICAtbiwgLS1kcnktcnVuICAgICAgICAgICAgZGlzcGxheSBjb21tYW5kcyB3aXRob3V0IG1vZGlmeWluZyBhbnkgZmlsZXMKLSMgICAgICAgLS1mZWF0dXJlcyAgICAgICAgICAgZGlzcGxheSBiYXNpYyBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGFuZCBleGl0Ci0jICAgICAgIC0tbW9kZT1NT0RFICAgICAgICAgIHVzZSBvcGVyYXRpb24gbW9kZSBNT0RFCi0jICAgICAgIC0tcHJlc2VydmUtZHVwLWRlcHMgIGRvbid0IHJlbW92ZSBkdXBsaWNhdGUgZGVwZW5kZW5jeSBsaWJyYXJpZXMKLSMgICAgICAgLS1xdWlldCwgLS1zaWxlbnQgICAgZG9uJ3QgcHJpbnQgaW5mb3JtYXRpb25hbCBtZXNzYWdlcwotIyAgICAgICAtLW5vLXF1aWV0LCAtLW5vLXNpbGVudAotIyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzIChkZWZhdWx0KQotIyAgICAgICAtLW5vLXdhcm4gICAgICAgICAgICBkb24ndCBkaXNwbGF5IHdhcm5pbmcgbWVzc2FnZXMKLSMgICAgICAgLS10YWc9VEFHICAgICAgICAgICAgdXNlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGZyb20gdGFnIFRBRwotIyAgIC12LCAtLXZlcmJvc2UgICAgICAgICAgICBwcmludCBtb3JlIGluZm9ybWF0aW9uYWwgbWVzc2FnZXMgdGhhbiBkZWZhdWx0Ci0jICAgICAgIC0tbm8tdmVyYm9zZSAgICAgICAgIGRvbid0IHByaW50IHRoZSBleHRyYSBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzCi0jICAgICAgIC0tdmVyc2lvbiAgICAgICAgICAgIHByaW50IHZlcnNpb24gaW5mb3JtYXRpb24KLSMgICAtaCwgLS1oZWxwLCAtLWhlbHAtYWxsICAgcHJpbnQgc2hvcnQsIGxvbmcsIG9yIGRldGFpbGVkIGhlbHAgbWVzc2FnZQotIwotIyBNT0RFIG11c3QgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6Ci0jCi0jICAgICAgICAgY2xlYW4gICAgICAgICAgICAgIHJlbW92ZSBmaWxlcyBmcm9tIHRoZSBidWlsZCBkaXJlY3RvcnkKLSMgICAgICAgICBjb21waWxlICAgICAgICAgICAgY29tcGlsZSBhIHNvdXJjZSBmaWxlIGludG8gYSBsaWJ0b29sIG9iamVjdAotIyAgICAgICAgIGV4ZWN1dGUgICAgICAgICAgICBhdXRvbWF0aWNhbGx5IHNldCBsaWJyYXJ5IHBhdGgsIHRoZW4gcnVuIGEgcHJvZ3JhbQotIyAgICAgICAgIGZpbmlzaCAgICAgICAgICAgICBjb21wbGV0ZSB0aGUgaW5zdGFsbGF0aW9uIG9mIGxpYnRvb2wgbGlicmFyaWVzCi0jICAgICAgICAgaW5zdGFsbCAgICAgICAgICAgIGluc3RhbGwgbGlicmFyaWVzIG9yIGV4ZWN1dGFibGVzCi0jICAgICAgICAgbGluayAgICAgICAgICAgICAgIGNyZWF0ZSBhIGxpYnJhcnkgb3IgYW4gZXhlY3V0YWJsZQotIyAgICAgICAgIHVuaW5zdGFsbCAgICAgICAgICByZW1vdmUgbGlicmFyaWVzIGZyb20gYW4gaW5zdGFsbGVkIGRpcmVjdG9yeQotIwotIyBNT0RFLUFSR1MgdmFyeSBkZXBlbmRpbmcgb24gdGhlIE1PREUuICBXaGVuIHBhc3NlZCBhcyBmaXJzdCBvcHRpb24sCi0jIGAtLW1vZGU9TU9ERScgbWF5IGJlIGFiYnJldmlhdGVkIGFzIGBNT0RFJyBvciBhIHVuaXF1ZSBhYmJyZXZpYXRpb24gb2YgdGhhdC4KLSMgVHJ5IGAkcHJvZ25hbWUgLS1oZWxwIC0tbW9kZT1NT0RFJyBmb3IgYSBtb3JlIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIE1PREUuCi0jCi0jIFdoZW4gcmVwb3J0aW5nIGEgYnVnLCBwbGVhc2UgZGVzY3JpYmUgYSB0ZXN0IGNhc2UgdG8gcmVwcm9kdWNlIGl0IGFuZAotIyBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246Ci0jCi0jICAgICAgICAgaG9zdC10cmlwbGV0OgkkaG9zdAotIyAgICAgICAgIHNoZWxsOgkJJFNIRUxMCi0jICAgICAgICAgY29tcGlsZXI6CQkkTFRDQwotIyAgICAgICAgIGNvbXBpbGVyIGZsYWdzOgkJJExUQ0ZMQUdTCi0jICAgICAgICAgbGlua2VyOgkJJExEIChnbnU/ICR3aXRoX2dudV9sZCkKLSMgICAgICAgICAkcHJvZ25hbWU6CShHTlUgbGlidG9vbCkgMi40LjIKLSMgICAgICAgICBhdXRvbWFrZToJJGF1dG9tYWtlX3ZlcnNpb24KLSMgICAgICAgICBhdXRvY29uZjoJJGF1dG9jb25mX3ZlcnNpb24KLSMKLSMgUmVwb3J0IGJ1Z3MgdG8gPGJ1Zy1saWJ0b29sQGdudS5vcmc+LgotIyBHTlUgbGlidG9vbCBob21lIHBhZ2U6IDxodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvbGlidG9vbC8+LgotIyBHZW5lcmFsIGhlbHAgdXNpbmcgR05VIHNvZnR3YXJlOiA8aHR0cDovL3d3dy5nbnUub3JnL2dldGhlbHAvPi4KIAogUFJPR1JBTT1saWJ0b29sCiBQQUNLQUdFPWxpYnRvb2wKLVZFUlNJT049Mi40LjIKLVRJTUVTVEFNUD0iIgotcGFja2FnZV9yZXZpc2lvbj0xLjMzMzcKK1ZFUlNJT049Mi40LjIuNDE4CitwYWNrYWdlX3JldmlzaW9uPTIuNC4yLjQxOAogCi0jIEJlIEJvdXJuZSBjb21wYXRpYmxlCi1pZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iICYmIChlbXVsYXRlIHNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKworIyMgLS0tLS0tICMjCisjIyBVc2FnZS4gIyMKKyMjIC0tLS0tLSAjIworCisjIFJ1biAnLi9saWJ0b29sIC0taGVscCcgZm9yIGhlbHAgd2l0aCB1c2luZyB0aGlzIHNjcmlwdCBmcm9tIHRoZQorIyBjb21tYW5kIGxpbmUuCisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgVXNlciBvdmVycmlkYWJsZSBjb21tYW5kIHBhdGhzLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisjIEFmdGVyIGNvbmZpZ3VyZSBjb21wbGV0ZXMsIGl0IGhhcyBhIGJldHRlciBpZGVhIG9mIHNvbWUgb2YgdGhlCisjIHNoZWxsIHRvb2xzIHdlIG5lZWQgdGhhbiB0aGUgZGVmYXVsdHMgdXNlZCBieSB0aGUgZnVuY3Rpb25zIHNoYXJlZAorIyB3aXRoIGJvb3RzdHJhcCwgc28gc2V0IHRob3NlIGhlcmUgd2hlcmUgdGhleSBjYW4gc3RpbGwgYmUgb3Zlci0KKyMgcmlkZGVuIGJ5IHRoZSB1c2VyLCBidXQgb3RoZXJ3aXNlIHRha2UgcHJlY2VkZW5jZS4KKworOiAke0FVVE9DT05GPSJhdXRvY29uZiJ9Cis6ICR7QVVUT01BS0U9ImF1dG9tYWtlIn0KKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgU291cmNlIGV4dGVybmFsIGxpYnJhcmllcy4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKyMgTXVjaCBvZiBvdXIgbG93LWxldmVsIGZ1bmN0aW9uYWxpdHkgbmVlZHMgdG8gYmUgc291cmNlZCBmcm9tIGV4dGVybmFsCisjIGxpYnJhcmllcywgd2hpY2ggYXJlIGluc3RhbGxlZCB0byAkcGtnYXV4ZGlyLgorCisjIFNldCBhIHZlcnNpb24gc3RyaW5nIGZvciB0aGlzIHNjcmlwdC4KK3NjcmlwdHZlcnNpb249MjAxMy0wOC0yMy4yMDsgIyBVVEMKKworIyBHZW5lcmFsIHNoZWxsIHNjcmlwdCBib2lsZXIgcGxhdGUsIGFuZCBoZWxwZXIgZnVuY3Rpb25zLgorIyBXcml0dGVuIGJ5IEdhcnkgVi4gVmF1Z2hhbiwgMjAwNAorCisjIENvcHlyaWdodCAoQykgMjAwNC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHNlZSB0aGUgc291cmNlIGZvciBjb3B5aW5nIGNvbmRpdGlvbnMuICBUaGVyZSBpcyBOTworIyB3YXJyYW50eTsgbm90IGV2ZW4gZm9yIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisjIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpZiB5b3UgZGlzdHJpYnV0ZQorIyB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gb3IgbGlicmFyeSB0aGF0IGlzIGJ1aWx0IHVzaW5nIEdOVSBMaWJ0b29sLAorIyB5b3UgbWF5IGluY2x1ZGUgdGhpcyBmaWxlIHVuZGVyIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UKKyMgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VCisjIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisjIFBsZWFzZSByZXBvcnQgYnVncyBvciBwcm9wb3NlIHBhdGNoZXMgdG8gZ2FyeUBnbnUub3JnLgorCisKKyMjIC0tLS0tLSAjIworIyMgVXNhZ2UuICMjCisjIyAtLS0tLS0gIyMKKworIyBFdmFsdWF0ZSB0aGlzIGZpbGUgbmVhciB0aGUgdG9wIG9mIHlvdXIgc2NyaXB0IHRvIGdhaW4gYWNjZXNzIHRvCisjIHRoZSBmdW5jdGlvbnMgYW5kIHZhcmlhYmxlcyBkZWZpbmVkIGhlcmU6CisjCisjICAgLiBgZWNobyAiJDAiIHwgJHtTRUQtc2VkfSAnc3xbXi9dKiR8fCdgL2J1aWxkLWF1eC9mdW5jbGliLnNoCisjCisjIElmIHlvdSBuZWVkIHRvIG92ZXJyaWRlIGFueSBvZiB0aGUgZGVmYXVsdCBlbnZpcm9ubWVudCB2YXJpYWJsZQorIyBzZXR0aW5ncywgZG8gdGhhdCBiZWZvcmUgZXZhbHVhdGluZyB0aGlzIGZpbGUuCisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIFNoZWxsIG5vcm1hbGlzYXRpb24uICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisjIFNvbWUgc2hlbGxzIG5lZWQgYSBsaXR0bGUgaGVscCB0byBiZSBhcyBCb3VybmUgY29tcGF0aWJsZSBhcyBwb3NzaWJsZS4KKyMgQmVmb3JlIGRvaW5nIGFueXRoaW5nIGVsc2UsIG1ha2Ugc3VyZSBhbGwgdGhhdCBoZWxwIGhhcyBiZWVuIHByb3ZpZGVkIQorCitEVUFMQ0FTRT0xOyBleHBvcnQgRFVBTENBU0UgIyBmb3IgTUtTIHNoCitpZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iICYmIChlbXVsYXRlIHNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgogICBlbXVsYXRlIHNoCiAgIE5VTExDTUQ9OgotICAjIFpzaCAzLnggYW5kIDQueCBwZXJmb3JtcyB3b3JkIHNwbGl0dGluZyBvbiAkezErIiRAIn0sIHdoaWNoCisgICMgUHJlLTQuMiB2ZXJzaW9ucyBvZiBac2ggZG8gd29yZCBzcGxpdHRpbmcgb24gJHsxKyIkQCJ9LCB3aGljaAogICAjIGlzIGNvbnRyYXJ5IHRvIG91ciB1c2FnZS4gIERpc2FibGUgdGhpcyBmZWF0dXJlLgogICBhbGlhcyAtZyAnJHsxKyIkQCJ9Jz0nIiRAIicKICAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKIGVsc2UKLSAgY2FzZSBgKHNldCAtbykgMj4vZGV2L251bGxgIGluICpwb3NpeCopIHNldCAtbyBwb3NpeDs7IGVzYWMKKyAgY2FzZSBgKHNldCAtbykgMj4vZGV2L251bGxgIGluICpwb3NpeCopIHNldCAtbyBwb3NpeCA7OyBlc2FjCiBmaQotQklOX1NIPXhwZzQ7IGV4cG9ydCBCSU5fU0ggIyBmb3IgVHJ1NjQKLURVQUxDQVNFPTE7IGV4cG9ydCBEVUFMQ0FTRSAjIGZvciBNS1Mgc2gKIAotIyBBIGZ1bmN0aW9uIHRoYXQgaXMgdXNlZCB3aGVuIHRoZXJlIGlzIG5vIHByaW50IGJ1aWx0aW4gb3IgcHJpbnRmLgotZnVuY19mYWxsYmFja19lY2hvICgpCi17Ci0gIGV2YWwgJ2NhdCA8PF9MVEVDSE9fRU9GCi0kMQotX0xURUNIT19FT0YnCi19Ci0KLSMgTkxTIG51aXNhbmNlczogV2Ugc2F2ZSB0aGUgb2xkIHZhbHVlcyB0byByZXN0b3JlIGR1cmluZyBleGVjdXRlIG1vZGUuCi1sdF91c2VyX2xvY2FsZT0KLWx0X3NhZmVfbG9jYWxlPQotZm9yIGx0X3ZhciBpbiBMQU5HIExBTkdVQUdFIExDX0FMTCBMQ19DVFlQRSBMQ19DT0xMQVRFIExDX01FU1NBR0VTCisjIE5MUyBudWlzYW5jZXM6IFdlIHNhdmUgdGhlIG9sZCB2YWx1ZXMgaW4gY2FzZSB0aGV5IGFyZSByZXF1aXJlZCBsYXRlci4KK19HX3VzZXJfbG9jYWxlPQorX0dfc2FmZV9sb2NhbGU9Citmb3IgX0dfdmFyIGluIExBTkcgTEFOR1VBR0UgTENfQUxMIExDX0NUWVBFIExDX0NPTExBVEUgTENfTUVTU0FHRVMKIGRvCi0gIGV2YWwgImlmIHRlc3QgXCJcJHskbHRfdmFyK3NldH1cIiA9IHNldDsgdGhlbgotICAgICAgICAgIHNhdmVfJGx0X3Zhcj1cJCRsdF92YXIKLSAgICAgICAgICAkbHRfdmFyPUMKLQkgIGV4cG9ydCAkbHRfdmFyCi0JICBsdF91c2VyX2xvY2FsZT1cIiRsdF92YXI9XFxcJHNhdmVfXCRsdF92YXI7IFwkbHRfdXNlcl9sb2NhbGVcIgotCSAgbHRfc2FmZV9sb2NhbGU9XCIkbHRfdmFyPUM7IFwkbHRfc2FmZV9sb2NhbGVcIgorICBldmFsICJpZiB0ZXN0IHNldCA9IFwiXCR7JF9HX3ZhcitzZXR9XCI7IHRoZW4KKyAgICAgICAgICBzYXZlXyRfR192YXI9XCQkX0dfdmFyCisgICAgICAgICAgJF9HX3Zhcj1DCisJICBleHBvcnQgJF9HX3ZhcgorCSAgX0dfdXNlcl9sb2NhbGU9XCIkX0dfdmFyPVxcXCRzYXZlX1wkX0dfdmFyOyBcJF9HX3VzZXJfbG9jYWxlXCIKKwkgIF9HX3NhZmVfbG9jYWxlPVwiJF9HX3Zhcj1DOyBcJF9HX3NhZmVfbG9jYWxlXCIKIAlmaSIKIGRvbmUKLUxDX0FMTD1DCi1MQU5HVUFHRT1DCi1leHBvcnQgTEFOR1VBR0UgTENfQUxMCiAKLSRsdF91bnNldCBDRFBBVEgKKyMgQ0RQQVRILgorKHVuc2V0IENEUEFUSCkgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0IENEUEFUSAogCisjIE1ha2Ugc3VyZSBJRlMgaGFzIGEgc2Vuc2libGUgZGVmYXVsdAorc3A9JyAnCitubD0nCisnCitJRlM9IiRzcAkkbmwiCisKKyMgVGhlcmUgYXJlIHN0aWxsIG1vZGVybiBzeXN0ZW1zIHRoYXQgaGF2ZSBwcm9ibGVtcyB3aXRoICdlY2hvJyBtaXMtCisjIGhhbmRsaW5nIGJhY2tzbGFzaGVzLCBhbW9uZyBvdGhlcnMsIHNvIG1ha2Ugc3VyZSAkYnNfZWNobyBpcyBzZXQgdG8gYQorIyBjb21tYW5kIHRoYXQgY29ycmVjdGx5IGludGVycHJldHMgYmFja3NsYXNoZXMuCisjICh0aGlzIGNvZGUgZnJvbSBBdXRvY29uZiAyLjY4KQorCisjIFByaW50aW5nIGEgbG9uZyBzdHJpbmcgY3Jhc2hlcyBTb2xhcmlzIDcgL3Vzci9iaW4vcHJpbnRmLgorYnNfZWNobz0nXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXCcKK2JzX2VjaG89JGJzX2VjaG8kYnNfZWNobyRic19lY2hvJGJzX2VjaG8kYnNfZWNobworYnNfZWNobz0kYnNfZWNobyRic19lY2hvJGJzX2VjaG8kYnNfZWNobyRic19lY2hvJGJzX2VjaG8KKyMgUHJlZmVyIGEga3NoIHNoZWxsIGJ1aWx0aW4gb3ZlciBhbiBleHRlcm5hbCBwcmludGYgcHJvZ3JhbSBvbiBTb2xhcmlzLAorIyBidXQgd2l0aG91dCB3YXN0aW5nIGZvcmtzIGZvciBiYXNoIG9yIHpzaC4KK2lmIHRlc3QgLXogIiRCQVNIX1ZFUlNJT04kWlNIX1ZFUlNJT04iIFwKKyAgICAmJiAodGVzdCAiWGBwcmludCAtciAtLSAkYnNfZWNob2AiID0gIlgkYnNfZWNobyIpIDI+L2Rldi9udWxsOyB0aGVuCisgIGJzX2VjaG89J3ByaW50IC1yIC0tJworICBic19lY2hvX249J3ByaW50IC1ybiAtLScKK2VsaWYgKHRlc3QgIlhgcHJpbnRmICVzICRic19lY2hvYCIgPSAiWCRic19lY2hvIikgMj4vZGV2L251bGw7IHRoZW4KKyAgYnNfZWNobz0ncHJpbnRmICVzXG4nCisgIGJzX2VjaG9fbj0ncHJpbnRmICVzJworZWxzZQorICBpZiB0ZXN0ICJYYCgvdXNyL3VjYi9lY2hvIC1uIC1uICRic19lY2hvKSAyPi9kZXYvbnVsbGAiID0gIlgtbiAkYnNfZWNobyI7IHRoZW4KKyAgICBic19lY2hvX2JvZHk9J2V2YWwgL3Vzci91Y2IvZWNobyAtbiAiJDEkbmwiJworICAgIGJzX2VjaG9fbj0nL3Vzci91Y2IvZWNobyAtbicKKyAgZWxzZQorICAgIGJzX2VjaG9fYm9keT0nZXZhbCBleHByICJYJDEiIDogIlhcXCguKlxcKSInCisgICAgYnNfZWNob19uX2JvZHk9J2V2YWwKKyAgICAgIGFyZz0kMTsKKyAgICAgIGNhc2UgJGFyZyBpbiAjKAorICAgICAgKiIkbmwiKikKKwlleHByICJYJGFyZyIgOiAiWFxcKC4qXFwpJG5sIjsKKwlhcmc9YGV4cHIgIlgkYXJnIiA6ICIuKiRubFxcKC4qXFwpImA7OworICAgICAgZXNhYzsKKyAgICAgIGV4cHIgIlgkYXJnIiA6ICJYXFwoLipcXCkiIHwgdHIgLWQgIiRubCIKKyAgICAnCisgICAgZXhwb3J0IGJzX2VjaG9fbl9ib2R5CisgICAgYnNfZWNob19uPSdzaCAtYyAkYnNfZWNob19uX2JvZHkgYnNfZWNobycKKyAgZmkKKyAgZXhwb3J0IGJzX2VjaG9fYm9keQorICBic19lY2hvPSdzaCAtYyAkYnNfZWNob19ib2R5IGJzX2VjaG8nCitmaQorCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIFVzZXIgb3ZlcnJpZGFibGUgY29tbWFuZCBwYXRocy4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworIyBBbGwgdXBwZXJjYXNlIHZhcmlhYmxlIG5hbWVzIGFyZSB1c2VkIGZvciBlbnZpcm9ubWVudCB2YXJpYWJsZXMuICBUaGVzZQorIyB2YXJpYWJsZXMgY2FuIGJlIG92ZXJyaWRkZW4gYnkgdGhlIHVzZXIgYmVmb3JlIGNhbGxpbmcgYSBzY3JpcHQgdGhhdAorIyB1c2VzIHRoZW0gaWYgYSBzdWl0YWJsZSBjb21tYW5kIG9mIHRoYXQgbmFtZSBpcyBub3QgYWxyZWFkeSBhdmFpbGFibGUKKyMgaW4gdGhlIGNvbW1hbmQgc2VhcmNoIFBBVEguCisKKzogJHtDUD0iY3AgLWYifQorOiAke0VDSE89IiRic19lY2hvIn0KKzogJHtFR1JFUD0iZ3JlcCAtRSJ9Cis6ICR7RkdSRVA9ImdyZXAgLUYifQorOiAke0dSRVA9ImdyZXAifQorOiAke0xOX1M9ImxuIC1zIn0KKzogJHtNQUtFPSJtYWtlIn0KKzogJHtNS0RJUj0ibWtkaXIifQorOiAke01WPSJtdiAtZiJ9Cis6ICR7Uk09InJtIC1mIn0KKzogJHtTRUQ9InNlZCJ9Cis6ICR7U0hFTEw9IiR7Q09ORklHX1NIRUxMLS9iaW4vc2h9In0KKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgVXNlZnVsIHNlZCBzbmlwcGV0cy4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKK3NlZF9kaXJuYW1lPSdzfC9bXi9dKiR8fCcKK3NlZF9iYXNlbmFtZT0nc3xeLiovfHwnCisKKyMgU2VkIHN1YnN0aXR1dGlvbiB0aGF0IGhlbHBzIHVzIGRvIHJvYnVzdCBxdW90aW5nLiAgSXQgYmFja3NsYXNoaWZpZXMKKyMgbWV0YWNoYXJhY3RlcnMgdGhhdCBhcmUgc3RpbGwgYWN0aXZlIHdpdGhpbiBkb3VibGUtcXVvdGVkIHN0cmluZ3MuCitzZWRfcXVvdGVfc3Vic3Q9J3N8XChbYCIkXFxdXCl8XFxcMXxnJworCisjIFNhbWUgYXMgYWJvdmUsIGJ1dCBkbyBub3QgcXVvdGUgdmFyaWFibGUgcmVmZXJlbmNlcy4KK3NlZF9kb3VibGVfcXVvdGVfc3Vic3Q9J3MvXChbImBcXF1cKS9cXFwxL2cnCisKKyMgU2VkIHN1YnN0aXR1dGlvbiB0aGF0IHR1cm5zIGEgc3RyaW5nIGludG8gYSByZWdleCBtYXRjaGluZyBmb3IgdGhlCisjIHN0cmluZyBsaXRlcmFsbHkuCitzZWRfbWFrZV9saXRlcmFsX3JlZ2V4PSdzfFtdLlteJFxcKlwvXXxcXCZ8ZycKKworIyBTZWQgc3Vic3RpdHV0aW9uIHRoYXQgY29udmVydHMgYSB3MzIgZmlsZSBuYW1lIG9yIHBhdGgKKyMgdGhhdCBjb250YWlucyBmb3J3YXJkIHNsYXNoZXMsIGludG8gb25lIHRoYXQgY29udGFpbnMKKyMgKGVzY2FwZWQpIGJhY2tzbGFzaGVzLiAgQSB2ZXJ5IG5haXZlIGltcGxlbWVudGF0aW9uLgorc2VkX25haXZlX2JhY2tzbGFzaGlmeT0nc3xcXFxcKnxcXHxnO3N8L3xcXHxnO3N8XFx8XFxcXHxnJworCisjIFJlLSdcJyBwYXJhbWV0ZXIgZXhwYW5zaW9ucyBpbiBvdXRwdXQgb2Ygc2VkX2RvdWJsZV9xdW90ZV9zdWJzdCB0aGF0CisjIHdlcmUgJ1wnLWVkIGluIGlucHV0IHRvIHRoZSBzYW1lLiAgSWYgYW4gb2RkIG51bWJlciBvZiAnXCcgcHJlY2VkZWQgYQorIyAnJCcgaW4gaW5wdXQgdG8gc2VkX2RvdWJsZV9xdW90ZV9zdWJzdCwgdGhhdCAnJCcgd2FzIHByb3RlY3RlZCBmcm9tCisjIGV4cGFuc2lvbi4gIFNpbmNlIGVhY2ggaW5wdXQgJ1wnIGlzIG5vdyB0d28gJ1wncywgbG9vayBmb3IgYW55IG51bWJlcgorIyBvZiBydW5zIG9mIGZvdXIgJ1wncyBmb2xsb3dlZCBieSB0d28gJ1wncyBhbmQgdGhlbiBhICckJy4gICdcJyB0aGF0ICckJy4KK19HX2JzPSdcXCcKK19HX2JzMj0nXFxcXCcKK19HX2JzND0nXFxcXFxcXFwnCitfR19kb2xsYXI9J1wkJworc2VkX2RvdWJsZV9iYWNrc2xhc2g9IlwKKyAgcy8kX0dfYnM0LyZcXAorL2cKKyAgcy9eJF9HX2JzMiRfR19kb2xsYXIvJF9HX2JzJi8KKyAgcy9cXChbXiRfR19ic11cXCkkX0dfYnMyJF9HX2RvbGxhci9cXDEkX0dfYnMyJF9HX2JzJF9HX2RvbGxhci9nCisgIHMvXG4vL2ciCisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIEdsb2JhbCB2YXJpYWJsZXMuICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLSAjIworCisjIEV4Y2VwdCBmb3IgdGhlIGdsb2JhbCB2YXJpYWJsZXMgZXhwbGljaXRseSBsaXN0ZWQgYmVsb3csIHRoZSBmb2xsb3dpbmcKKyMgZnVuY3Rpb25zIGluIHRoZSAnXmZ1bmNfJyBuYW1lc3BhY2UsIGFuZCB0aGUgJ15yZXF1aXJlXycgbmFtZXNwYWNlCisjIHZhcmlhYmxlcyBpbml0aWFsaXNlZCBpbiB0aGUgJ1Jlc291cmNlIG1hbmFnZW1lbnQnIHNlY3Rpb24sIHNvdXJjaW5nCisjIHRoaXMgZmlsZSB3aWxsIG5vdCBwb2xsdXRlIHlvdXIgZ2xvYmFsIG5hbWVzcGFjZSB3aXRoIGFueXRoaW5nCisjIGVsc2UuIFRoZXJlJ3Mgbm8gcG9ydGFibGUgd2F5IHRvIHNjb3BlIHZhcmlhYmxlcyBpbiBCb3VybmUgc2hlbGwKKyMgdGhvdWdoLCBzbyBhY3R1YWxseSBydW5uaW5nIHRoZXNlIGZ1bmN0aW9ucyB3aWxsIHNvbWV0aW1lcyBwbGFjZQorIyByZXN1bHRzIGludG8gYSB2YXJpYWJsZSBuYW1lZCBhZnRlciB0aGUgZnVuY3Rpb24sIGFuZCBvZnRlbiB1c2UKKyMgdGVtcG9yYXJ5IHZhcmlhYmxlcyBpbiB0aGUgJ15fR18nIG5hbWVzcGFjZS4gSWYgeW91IGFyZSBjYXJlZnVsIHRvCisjIGF2b2lkIHVzaW5nIHRob3NlIG5hbWVzcGFjZXMgY2FzdWFsbHkgaW4geW91ciBzb3VyY2luZyBzY3JpcHQsIHRoaW5ncworIyBzaG91bGQgY29udGludWUgdG8gd29yayBhcyB5b3UgZXhwZWN0LiBBbmQsIG9mIGNvdXJzZSwgeW91IGNhbiBmcmVlbHkKKyMgb3ZlcndyaXRlIGFueSBvZiB0aGUgZnVuY3Rpb25zIG9yIHZhcmlhYmxlcyBkZWZpbmVkIGhlcmUgYmVmb3JlCisjIGNhbGxpbmcgYW55dGhpbmcgdG8gY3VzdG9taXplIHRoZW0uCisKK0VYSVRfU1VDQ0VTUz0wCitFWElUX0ZBSUxVUkU9MQorRVhJVF9NSVNNQVRDSD02MyAgIyAkPyA9IDYzIGlzIHVzZWQgdG8gaW5kaWNhdGUgdmVyc2lvbiBtaXNtYXRjaCB0byBtaXNzaW5nLgorRVhJVF9TS0lQPTc3CSAgIyAkPyA9IDc3IGlzIHVzZWQgdG8gaW5kaWNhdGUgYSBza2lwcGVkIHRlc3QgdG8gYXV0b21ha2UuCisKKyMgQWxsb3cgb3ZlcnJpZGluZywgZWcgYXNzdW1pbmcgdGhhdCB5b3UgZm9sbG93IHRoZSBjb252ZW50aW9uIG9mCisjIHB1dHRpbmcgJyRkZWJ1Z19jbWQnIGF0IHRoZSBzdGFydCBvZiBhbGwgeW91ciBmdW5jdGlvbnMsIHlvdSBjYW4gZ2V0CisjIGJhc2ggdG8gc2hvdyBmdW5jdGlvbiBjYWxsIHRyYWNlIHdpdGg6CisjCisjICAgIGRlYnVnX2NtZD0nZXZhbCBlY2hvICIke0ZVTkNOQU1FWzBdfSAkKiIgPiYyJyBiYXNoIHlvdXItc2NyaXB0LW5hbWUKK2RlYnVnX2NtZD0ke2RlYnVnX2NtZC0iOiJ9CitleGl0X2NtZD06CisKKyMgQnkgY29udmVudGlvbiwgZmluaXNoIHlvdXIgc2NyaXB0IHdpdGg6CisjCisjICAgIGV4aXQgJGV4aXRfc3RhdHVzCisjCisjIHNvIHRoYXQgeW91IGNhbiBzZXQgZXhpdF9zdGF0dXMgdG8gbm9uLXplcm8gaWYgeW91IHdhbnQgdG8gaW5kaWNhdGUKKyMgc29tZXRoaW5nIHdlbnQgd3JvbmcgZHVyaW5nIGV4ZWN1dGlvbiB3aXRob3V0IGFjdHVhbGx5IGJhaWxpbmcgb3V0IGF0CisjIHRoZSBwb2ludCBvZiBmYWlsdXJlLgorZXhpdF9zdGF0dXM9JEVYSVRfU1VDQ0VTUwogCiAjIFdvcmsgYXJvdW5kIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgaXNzdWUgb24gSVJJWCA2LjUuIE9uIElSSVggNi40Kywgc2gKICMgaXMga3NoIGJ1dCB3aGVuIHRoZSBzaGVsbCBpcyBpbnZva2VkIGFzICJzaCIgYW5kIHRoZSBjdXJyZW50IHZhbHVlIG9mCiAjIHRoZSBfWFBHIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIG5vdCBlcXVhbCB0byAxIChvbmUpLCB0aGUgc3BlY2lhbAogIyBwb3NpdGlvbmFsIHBhcmFtZXRlciAkMCwgd2l0aGluIGEgZnVuY3Rpb24gY2FsbCwgaXMgdGhlIG5hbWUgb2YgdGhlCiAjIGZ1bmN0aW9uLgotcHJvZ3BhdGg9IiQwIgorcHJvZ3BhdGg9JDAKKworIyBUaGUgbmFtZSBvZiB0aGlzIHByb2dyYW0uCitwcm9nbmFtZT1gJGJzX2VjaG8gIiRwcm9ncGF0aCIgfCRTRUQgIiRzZWRfYmFzZW5hbWUiYAorCisjIE1ha2Ugc3VyZSB3ZSBoYXZlIGFuIGFic29sdXRlIHByb2dwYXRoIGZvciByZWV4ZWN1dGlvbjoKK2Nhc2UgJHByb2dwYXRoIGluCisgIFtcXC9dKnxbQS1aYS16XTpcXCopIDs7CisgICpbXFwvXSopCisgICAgIHByb2dkaXI9YCRic19lY2hvICIkcHJvZ3BhdGgiIHwkU0VEICIkc2VkX2Rpcm5hbWUiYAorICAgICBwcm9nZGlyPWBjZCAiJHByb2dkaXIiICYmIHB3ZGAKKyAgICAgcHJvZ3BhdGg9JHByb2dkaXIvJHByb2duYW1lCisgICAgIDs7CisgICopCisgICAgIF9HX0lGUz0kSUZTCisgICAgIElGUz0ke1BBVEhfU0VQQVJBVE9SLTp9CisgICAgIGZvciBwcm9nZGlyIGluICRQQVRIOyBkbworICAgICAgIElGUz0kX0dfSUZTCisgICAgICAgdGVzdCAteCAiJHByb2dkaXIvJHByb2duYW1lIiAmJiBicmVhaworICAgICBkb25lCisgICAgIElGUz0kX0dfSUZTCisgICAgIHRlc3QgLW4gIiRwcm9nZGlyIiB8fCBwcm9nZGlyPWBwd2RgCisgICAgIHByb2dwYXRoPSRwcm9nZGlyLyRwcm9nbmFtZQorICAgICA7OworZXNhYwogCiAKKyMjIC0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBTdGFuZGFyZCBvcHRpb25zLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0gIyMKIAotOiAke0NQPSJjcCAtZiJ9Ci10ZXN0ICIke0VDSE8rc2V0fSIgPSBzZXQgfHwgRUNITz0ke2FzX2VjaG8tJ3ByaW50ZiAlc1xuJ30KLTogJHtNQUtFPSJtYWtlIn0KLTogJHtNS0RJUj0ibWtkaXIifQotOiAke01WPSJtdiAtZiJ9Ci06ICR7Uk09InJtIC1mIn0KLTogJHtTSEVMTD0iJHtDT05GSUdfU0hFTEwtL2Jpbi9zaH0ifQotOiAke1hzZWQ9IiRTRUQgLWUgMXMvXlgvLyJ9CisjIFRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhZmZlY3QgdGhlIG9wZXJhdGlvbiBvZiB0aGUgZnVuY3Rpb25zIGRlZmluZWQKKyMgYmVsb3csIGFuZCBzaG91bGQgYmUgc2V0IGFwcHJvcHJpYXRlbHkgZGVwZW5kaW5nIG9uIHJ1bi10aW1lIHBhcmEtCisjIG1ldGVycyBwYXNzZWQgb24gdGhlIGNvbW1hbmQgbGluZS4KIAotIyBHbG9iYWwgdmFyaWFibGVzOgotRVhJVF9TVUNDRVNTPTAKLUVYSVRfRkFJTFVSRT0xCi1FWElUX01JU01BVENIPTYzICAjICQ/ID0gNjMgaXMgdXNlZCB0byBpbmRpY2F0ZSB2ZXJzaW9uIG1pc21hdGNoIHRvIG1pc3NpbmcuCi1FWElUX1NLSVA9NzcJICAjICQ/ID0gNzcgaXMgdXNlZCB0byBpbmRpY2F0ZSBhIHNraXBwZWQgdGVzdCB0byBhdXRvbWFrZS4KK29wdF9kcnlfcnVuPWZhbHNlCitvcHRfcXVpZXQ9ZmFsc2UKK29wdF92ZXJib3NlPWZhbHNlCiAKLWV4aXRfc3RhdHVzPSRFWElUX1NVQ0NFU1MKKyMgQ2F0ZWdvcmllcyAnYWxsJyBhbmQgJ25vbmUnIGFyZSBhbHdheXMgYXZhaWxhYmxlLiAgQXBwZW5kIGFueSBvdGhlcnMKKyMgeW91IHdpbGwgcGFzcyBhcyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gZnVuY193YXJuaW5nIGZyb20geW91ciBvd24KKyMgY29kZS4KK3dhcm5pbmdfY2F0ZWdvcmllcz0KIAotIyBNYWtlIHN1cmUgSUZTIGhhcyBhIHNlbnNpYmxlIGRlZmF1bHQKLWx0X25sPScKLScKLUlGUz0iIAkkbHRfbmwiCisjIEJ5IGRlZmF1bHQsIGRpc3BsYXkgd2FybmluZ3MgYWNjb3JkaW5nIHRvICdvcHRfd2FybmluZ190eXBlcycuICBTZXQKKyMgJ3dhcm5pbmdfZnVuYycgIHRvICc6JyB0byBlbGlkZSBhbGwgd2FybmluZ3MsIG9yIGZ1bmNfZmF0YWxfZXJyb3IgdG8KKyMgdHJlYXQgdGhlIG5leHQgZGlzcGxheWVkIHdhcm5pbmcgYXMgYSBmYXRhbCBlcnJvci4KK3dhcm5pbmdfZnVuYz1mdW5jX3dhcm5fYW5kX2NvbnRpbnVlCiAKLWRpcm5hbWU9InMsL1teL10qJCwsIgotYmFzZW5hbWU9InMsXi4qLywsIgorIyBTZXQgdG8gJ2FsbCcgdG8gZGlzcGxheSBhbGwgd2FybmluZ3MsICdub25lJyB0byBzdXBwcmVzcyBhbGwKKyMgd2FybmluZ3MsIG9yIGEgc3BhY2UgZGVsaW1pdGVkIGxpc3Qgb2Ygc29tZSBzdWJzZXQgb2YKKyMgJ3dhcm5pbmdfY2F0ZWdvcmllcycgdG8gZGlzcGxheSBvbmx5IHRoZSBsaXN0ZWQgd2FybmluZ3MuCitvcHRfd2FybmluZ190eXBlcz1hbGwKIAotIyBmdW5jX2Rpcm5hbWUgZmlsZSBhcHBlbmQgbm9uZGlyX3JlcGxhY2VtZW50CisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBSZXNvdXJjZSBtYW5hZ2VtZW50LiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworIyBUaGlzIHNlY3Rpb24gY29udGFpbnMgZGVmaW5pdGlvbnMgZm9yIGZ1bmN0aW9ucyB0aGF0IGVhY2ggZW5zdXJlIGEKKyMgcGFydGljdWxhciByZXNvdXJjZSAoYSBmaWxlLCBvciBhIG5vbi1lbXB0eSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGZvcgorIyBleGFtcGxlKSBpcyBhdmFpbGFibGUsIGFuZCBpZiBhcHByb3ByaWF0ZSB0byBleHRyYWN0IGRlZmF1bHQgdmFsdWVzCisjIGZyb20gcGVydGluZW50IHBhY2thZ2UgZmlsZXMuIENhbGwgdGhlbSB1c2luZyB0aGVpciBhc3NvY2lhdGVkCisjICdyZXF1aXJlXyonIHZhcmlhYmxlIHRvIGVuc3VyZSB0aGF0IHRoZXkgYXJlIGV4ZWN1dGVkLCBhdCBtb3N0LCBvbmNlLgorIworIyBJdCdzIGVudGlyZWx5IGRlbGliZXJhdGUgdGhhdCBjYWxsaW5nIHRoZXNlIGZ1bmN0aW9ucyBjYW4gc2V0CisjIHZhcmlhYmxlcyB0aGF0IGRvbid0IG9iZXkgdGhlIG5hbWVzcGFjZSBsaW1pdGF0aW9ucyBvYmV5ZWQgYnkgdGhlIHJlc3QKKyMgb2YgdGhpcyBmaWxlLCBpbiBvcmRlciB0aGF0IHRoYXQgdGhleSBiZSBhcyB1c2VmdWwgYXMgcG9zc2libGUgdG8KKyMgY2FsbGVycy4KKworCisjIHJlcXVpcmVfdGVybV9jb2xvcnMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBBbGxvdyBkaXNwbGF5IG9mIGJvbGQgdGV4dCBvbiB0ZXJtaW5hbHMgdGhhdCBzdXBwb3J0IGl0LgorcmVxdWlyZV90ZXJtX2NvbG9ycz1mdW5jX3JlcXVpcmVfdGVybV9jb2xvcnMKK2Z1bmNfcmVxdWlyZV90ZXJtX2NvbG9ycyAoKQoreworICAgICRkZWJ1Z19jbWQKKworICAgIHRlc3QgLXQgMSAmJiB7CisgICAgICAjIENPTE9SVEVSTSBhbmQgVVNFX0FOU0lfQ09MT1JTIGVudmlyb25tZW50IHZhcmlhYmxlcyB0YWtlCisgICAgICAjIHByZWNlZGVuY2UsIGJlY2F1c2UgbW9zdCB0ZXJtaW5mbyBkYXRhYmFzZXMgbmVnbGVjdCB0byBkZXNjcmliZQorICAgICAgIyB3aGV0aGVyIGNvbG9yIHNlcXVlbmNlcyBhcmUgc3VwcG9ydGVkLgorICAgICAgdGVzdCAtbiAiJHtDT0xPUlRFUk0rc2V0fSIgJiYgOiAke1VTRV9BTlNJX0NPTE9SUz0iMSJ9CisKKyAgICAgIGlmIHRlc3QgMSA9ICIkVVNFX0FOU0lfQ09MT1JTIjsgdGhlbgorICAgICAgICAjIFN0YW5kYXJkIEFOU0kgZXNjYXBlIHNlcXVlbmNlcworICAgICAgICB0Y19yZXNldD0nG1swbScKKyAgICAgICAgdGNfYm9sZD0nG1sxbSc7ICAgdGNfc3RhbmRvdXQ9JxtbN20nCisgICAgICAgIHRjX3JlZD0nG1szMW0nOyAgIHRjX2dyZWVuPScbWzMybScKKyAgICAgICAgdGNfYmx1ZT0nG1szNG0nOyAgdGNfY3lhbj0nG1szNm0nCisgICAgICBlbHNlCisgICAgICAgICMgT3RoZXJ3aXNlIHRydXN0IHRoZSB0ZXJtaW5mbyBkYXRhYmFzZSBhZnRlciBhbGwuCisgICAgICAgIHRlc3QgLW4gImB0cHV0IHNncjAgMj4vZGV2L251bGxgIiAmJiB7CisgICAgICAgICAgdGNfcmVzZXQ9YHRwdXQgc2dyMGAKKyAgICAgICAgICB0ZXN0IC1uICJgdHB1dCBib2xkIDI+L2Rldi9udWxsYCIgJiYgdGNfYm9sZD1gdHB1dCBib2xkYAorICAgICAgICAgIHRjX3N0YW5kb3V0PSR0Y19ib2xkCisgICAgICAgICAgdGVzdCAtbiAiYHRwdXQgc21zbyAyPi9kZXYvbnVsbGAiICYmIHRjX3N0YW5kb3V0PWB0cHV0IHNtc29gCisgICAgICAgICAgdGVzdCAtbiAiYHRwdXQgc2V0YWYgMSAyPi9kZXYvbnVsbGAiICYmIHRjX3JlZD1gdHB1dCBzZXRhZiAxYAorICAgICAgICAgIHRlc3QgLW4gImB0cHV0IHNldGFmIDIgMj4vZGV2L251bGxgIiAmJiB0Y19ncmVlbj1gdHB1dCBzZXRhZiAyYAorICAgICAgICAgIHRlc3QgLW4gImB0cHV0IHNldGFmIDQgMj4vZGV2L251bGxgIiAmJiB0Y19ibHVlPWB0cHV0IHNldGFmIDRgCisgICAgICAgICAgdGVzdCAtbiAiYHRwdXQgc2V0YWYgNSAyPi9kZXYvbnVsbGAiICYmIHRjX2N5YW49YHRwdXQgc2V0YWYgNWAKKyAgICAgICAgfQorICAgICAgZmkKKyAgICB9CisKKyAgICByZXF1aXJlX3Rlcm1fY29sb3JzPToKK30KKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgRnVuY3Rpb24gbGlicmFyeS4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tICMjCisKKyMgVGhpcyBzZWN0aW9uIGNvbnRhaW5zIGEgdmFyaWV0eSBvZiB1c2VmdWwgZnVuY3Rpb25zIHRvIGNhbGwgaW4geW91cgorIyBzY3JpcHRzLiBUYWtlIG5vdGUgb2YgdGhlIHBvcnRhYmxlIHdyYXBwZXJzIGZvciBmZWF0dXJlcyBwcm92aWRlZCBieQorIyBzb21lIG1vZGVybiBzaGVsbHMsIHdoaWNoIHdpbGwgZmFsbCBiYWNrIHRvIHNsb3dlciBlcXVpdmFsZW50cyBvbgorIyBsZXNzIGZlYXR1cmVmdWwgc2hlbGxzLgorCisKKyMgZnVuY19hcHBlbmQgVkFSIFZBTFVFCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBBcHBlbmQgVkFMVUUgb250byB0aGUgZXhpc3RpbmcgY29udGVudHMgb2YgVkFSLgorCisgICMgV2Ugc2hvdWxkIHRyeSB0byBtaW5pbWlzZSBmb3JrcywgZXNwZWNpYWxseSBvbiBXaW5kb3dzIHdoZXJlIHRoZXkgYXJlCisgICMgdW5yZWFzb25hYmx5IHNsb3csIHNvIHNraXAgdGhlIGZlYXR1cmUgcHJvYmVzIHdoZW4gYmFzaCBvciB6c2ggYXJlCisgICMgYmVpbmcgdXNlZDoKKyAgaWYgdGVzdCBzZXQgPSAiJHtCQVNIX1ZFUlNJT04rc2V0fSR7WlNIX1ZFUlNJT04rc2V0fSI7IHRoZW4KKyAgICA6ICR7X0dfSEFWRV9BUklUSF9PUD0ieWVzIn0KKyAgICA6ICR7X0dfSEFWRV9YU0lfT1BTPSJ5ZXMifQorICAgICMgVGhlICs9IG9wZXJhdG9yIHdhcyBpbnRyb2R1Y2VkIGluIGJhc2ggMy4xCisgICAgY2FzZSAkQkFTSF9WRVJTSU9OIGluCisgICAgICBbMTJdLiogfCAzLjAgfCAzLjAqKSA7OworICAgICAgKikKKyAgICAgICAgOiAke19HX0hBVkVfUExVU0VRX09QPSJ5ZXMifQorICAgICAgICA7OworICAgIGVzYWMKKyAgZmkKKworICAjIF9HX0hBVkVfUExVU0VRX09QCisgICMgQ2FuIGJlIGVtcHR5LCBpbiB3aGljaCBjYXNlIHRoZSBzaGVsbCBpcyBwcm9iZWQsICJ5ZXMiIGlmICs9IGlzCisgICMgdXNlYWJsZSBvciBhbnl0aGluZyBlbHNlIGlmIGl0IGRvZXMgbm90IHdvcmsuCisgIHRlc3QgLXogIiRfR19IQVZFX1BMVVNFUV9PUCIgXAorICAgICYmIChldmFsICd4PWE7IHgrPSIgYiI7IHRlc3QgImEgYiIgPSAiJHgiJykgMj4vZGV2L251bGwgXAorICAgICYmIF9HX0hBVkVfUExVU0VRX09QPXllcworCitpZiB0ZXN0IHllcyA9ICIkX0dfSEFWRV9QTFVTRVFfT1AiCit0aGVuCisgICMgVGhpcyBpcyBhbiBYU0kgY29tcGF0aWJsZSBzaGVsbCwgYWxsb3dpbmcgYSBmYXN0ZXIgaW1wbGVtZW50YXRpb24uLi4KKyAgZXZhbCAnZnVuY19hcHBlbmQgKCkKKyAgeworICAgICRkZWJ1Z19jbWQKKworICAgIGV2YWwgIiQxKz1cJDIiCisgIH0nCitlbHNlCisgICMgLi4ub3RoZXJ3aXNlIGZhbGwgYmFjayB0byB1c2luZyBleHByLCB3aGljaCBpcyBvZnRlbiBhIHNoZWxsIGJ1aWx0aW4uCisgIGZ1bmNfYXBwZW5kICgpCisgIHsKKyAgICAkZGVidWdfY21kCisKKyAgICBldmFsICIkMT1cJCQxXCQyIgorICB9CitmaQorCisKKyMgZnVuY19hcHBlbmRfcXVvdGVkIFZBUiBWQUxVRQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFF1b3RlIFZBTFVFIGFuZCBhcHBlbmQgdG8gdGhlIGVuZCBvZiBzaGVsbCB2YXJpYWJsZSBWQVIsIHNlcGFyYXRlZAorIyBieSBhIHNwYWNlLgoraWYgdGVzdCB5ZXMgPSAiJF9HX0hBVkVfUExVU0VRX09QIjsgdGhlbgorICBldmFsICdmdW5jX2FwcGVuZF9xdW90ZWQgKCkKKyAgeworICAgICRkZWJ1Z19jbWQKKworICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiQyIgorICAgIGV2YWwgIiQxKz1cXCBcJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorICB9JworZWxzZQorICBmdW5jX2FwcGVuZF9xdW90ZWQgKCkKKyAgeworICAgICRkZWJ1Z19jbWQKKworICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiQyIgorICAgIGV2YWwgIiQxPVwkJDFcXCBcJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorICB9CitmaQorCisKKyMgZnVuY19hcHBlbmRfdW5pcSBWQVIgVkFMVUUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQXBwZW5kIHVuaXF1ZSBWQUxVRSBvbnRvIHRoZSBleGlzdGluZyBjb250ZW50cyBvZiBWQVIsIGFzc3VtaW5nCisjIGVudHJpZXMgYXJlIGRlbGltaXRlZCBieSB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIFZBTFVFLiAgRm9yIGV4YW1wbGU6CisjCisjICAgZnVuY19hcHBlbmRfdW5pcSBvcHRpb25zICIgLS1hbm90aGVyLW9wdGlvbiBvcHRpb24tYXJndW1lbnQiCisjCisjIHdpbGwgb25seSBhcHBlbmQgdG8gJG9wdGlvbnMgaWYgIiAtLWFub3RoZXItb3B0aW9uIG9wdGlvbi1hcmd1bWVudCAiCisjIGlzIG5vdCBhbHJlYWR5IHByZXNlbnQgc29tZXdoZXJlIGluICRvcHRpb25zIGFscmVhZHkgKG5vdGUgc3BhY2VzIGF0CisjIGVhY2ggZW5kIGltcGxpZWQgYnkgbGVhZGluZyBzcGFjZSBpbiBzZWNvbmQgYXJndW1lbnQpLgorZnVuY19hcHBlbmRfdW5pcSAoKQoreworICAgICRkZWJ1Z19jbWQKKworICAgIGV2YWwgX0dfY3VycmVudF92YWx1ZT0nYCRic19lY2hvICQnJDEnYCcKKyAgICBfR19kZWxpbT1gZXhwciAiJDIiIDogJ1woLlwpJ2AKKworICAgIGNhc2UgJF9HX2RlbGltJF9HX2N1cnJlbnRfdmFsdWUkX0dfZGVsaW0gaW4KKyAgICAgICoiJDIkX0dfZGVsaW0iKikgOzsKKyAgICAgICopIGZ1bmNfYXBwZW5kICIkQCIgOzsKKyAgICBlc2FjCit9CisKKworIyBmdW5jX2FyaXRoIFRFUk0uLi4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tCisjIFNldCBmdW5jX2FyaXRoX3Jlc3VsdCB0byB0aGUgcmVzdWx0IG9mIGV2YWx1YXRpbmcgVEVSTXMuCisgIHRlc3QgLXogIiRfR19IQVZFX0FSSVRIX09QIiBcCisgICAgJiYgKGV2YWwgJ3Rlc3QgMiA9ICQoKCAxICsgMSApKScpIDI+L2Rldi9udWxsIFwKKyAgICAmJiBfR19IQVZFX0FSSVRIX09QPXllcworCitpZiB0ZXN0IHllcyA9ICIkX0dfSEFWRV9BUklUSF9PUCI7IHRoZW4KKyAgZXZhbCAnZnVuY19hcml0aCAoKQorICB7CisgICAgJGRlYnVnX2NtZAorCisgICAgZnVuY19hcml0aF9yZXN1bHQ9JCgoICQqICkpCisgIH0nCitlbHNlCisgIGZ1bmNfYXJpdGggKCkKKyAgeworICAgICRkZWJ1Z19jbWQKKworICAgIGZ1bmNfYXJpdGhfcmVzdWx0PWBleHByICIkQCJgCisgIH0KK2ZpCisKKworIyBmdW5jX2Jhc2VuYW1lIEZJTEUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tCisjIFNldCBmdW5jX2Jhc2VuYW1lX3Jlc3VsdCB0byBGSUxFIHdpdGggZXZlcnl0aGluZyB1cCB0byBhbmQgaW5jbHVkaW5nCisjIHRoZSBsYXN0IC8gc3RyaXBwZWQuCitpZiB0ZXN0IHllcyA9ICIkX0dfSEFWRV9YU0lfT1BTIjsgdGhlbgorICAjIElmIHRoaXMgc2hlbGwgc3VwcG9ydHMgc3VmZml4IHBhdHRlcm4gcmVtb3ZhbCwgdGhlbiB1c2UgaXQgdG8gYXZvaWQKKyAgIyBmb3JraW5nLiBIaWRlIHRoZSBkZWZpbml0aW9ucyBzaW5nbGUgcXVvdGVzIGluIGNhc2UgdGhlIHNoZWxsIGNob2tlcworICAjIG9uIHVuc3VwcG9ydGVkIHN5bnRheC4uLgorICBfYj0nZnVuY19iYXNlbmFtZV9yZXN1bHQ9JHsxIyMqL30nCisgIF9kPSdjYXNlICQxIGluCisgICAgICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0kezElLyp9JDIgOzsKKyAgICAgICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSQzICAgICAgICA7OworICAgICAgZXNhYycKKworZWxzZQorICAjIC4uLm90aGVyd2lzZSBmYWxsIGJhY2sgdG8gdXNpbmcgc2VkLgorICBfYj0nZnVuY19iYXNlbmFtZV9yZXN1bHQ9YCRFQ0hPICIkMSIgfCRTRUQgIiRzZWRfYmFzZW5hbWUiYCcKKyAgX2Q9J2Z1bmNfZGlybmFtZV9yZXN1bHQ9YCRFQ0hPICIkMSIgIHwkU0VEICIkc2VkX2Rpcm5hbWUiYAorICAgICAgaWYgdGVzdCAiWCRmdW5jX2Rpcm5hbWVfcmVzdWx0IiA9ICJYJDEiOyB0aGVuCisgICAgICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9JDMKKyAgICAgIGVsc2UKKyAgICAgICAgZnVuY19hcHBlbmQgZnVuY19kaXJuYW1lX3Jlc3VsdCAiJDIiCisgICAgICBmaScKK2ZpCisKK2V2YWwgJ2Z1bmNfYmFzZW5hbWUgKCkKK3sKKyAgICAkZGVidWdfY21kCisKKyAgICAnIiRfYiInCit9JworCisKKyMgZnVuY19kaXJuYW1lIEZJTEUgQVBQRU5EIE5PTkRJUl9SRVBMQUNFTUVOVAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIENvbXB1dGUgdGhlIGRpcm5hbWUgb2YgRklMRS4gIElmIG5vbmVtcHR5LCBhZGQgQVBQRU5EIHRvIHRoZSByZXN1bHQsCiAjIG90aGVyd2lzZSBzZXQgcmVzdWx0IHRvIE5PTkRJUl9SRVBMQUNFTUVOVC4KLWZ1bmNfZGlybmFtZSAoKQorZXZhbCAnZnVuY19kaXJuYW1lICgpCiB7Ci0gICAgZnVuY19kaXJuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJGRpcm5hbWUiYAotICAgIGlmIHRlc3QgIlgkZnVuY19kaXJuYW1lX3Jlc3VsdCIgPSAiWCR7MX0iOyB0aGVuCi0gICAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IgotICAgIGVsc2UKLSAgICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0JHsyfSIKLSAgICBmaQotfSAjIGZ1bmNfZGlybmFtZSBtYXkgYmUgcmVwbGFjZWQgYnkgZXh0ZW5kZWQgc2hlbGwgaW1wbGVtZW50YXRpb24KKyAgICAkZGVidWdfY21kCisKKyAgICAnIiRfZCInCit9JwogCiAKLSMgZnVuY19iYXNlbmFtZSBmaWxlCi1mdW5jX2Jhc2VuYW1lICgpCi17Ci0gICAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRiYXNlbmFtZSJgCi19ICMgZnVuY19iYXNlbmFtZSBtYXkgYmUgcmVwbGFjZWQgYnkgZXh0ZW5kZWQgc2hlbGwgaW1wbGVtZW50YXRpb24KLQotCi0jIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgZmlsZSBhcHBlbmQgbm9uZGlyX3JlcGxhY2VtZW50Ci0jIHBlcmZvcm0gZnVuY19iYXNlbmFtZSBhbmQgZnVuY19kaXJuYW1lIGluIGEgc2luZ2xlIGZ1bmN0aW9uCisjIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgRklMRSBBUFBFTkQgTk9ORElSX1JFUExBQ0VNRU5UCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFBlcmZvcm0gZnVuY19iYXNlbmFtZSBhbmQgZnVuY19kaXJuYW1lIGluIGEgc2luZ2xlIGZ1bmN0aW9uCiAjIGNhbGw6CiAjICAgZGlybmFtZTogIENvbXB1dGUgdGhlIGRpcm5hbWUgb2YgRklMRS4gIElmIG5vbmVtcHR5LAogIyAgICAgICAgICAgICBhZGQgQVBQRU5EIHRvIHRoZSByZXN1bHQsIG90aGVyd2lzZSBzZXQgcmVzdWx0CkBAIC0xOTAsMjYzICs1ODcsMzI3IEBACiAjICAgICAgICAgICAgIHZhbHVlIHJldHVybmVkIGluICIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKICMgICBiYXNlbmFtZTogQ29tcHV0ZSBmaWxlbmFtZSBvZiBGSUxFLgogIyAgICAgICAgICAgICB2YWx1ZSByZXR1bmVkIGluICIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCi0jIEltcGxlbWVudGF0aW9uIG11c3QgYmUga2VwdCBzeW5jaHJvbml6ZWQgd2l0aCBmdW5jX2Rpcm5hbWUKLSMgYW5kIGZ1bmNfYmFzZW5hbWUuIEZvciBlZmZpY2llbmN5LCB3ZSBkbyBub3QgZGVsZWdhdGUgdG8KLSMgdGhvc2UgZnVuY3Rpb25zIGJ1dCBpbnN0ZWFkIGR1cGxpY2F0ZSB0aGUgZnVuY3Rpb25hbGl0eSBoZXJlLgotZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAoKQorIyBGb3IgZWZmaWNpZW5jeSwgd2UgZG8gbm90IGRlbGVnYXRlIHRvIHRoZSBmdW5jdGlvbnMgYWJvdmUgYnV0IGluc3RlYWQKKyMgZHVwbGljYXRlIHRoZSBmdW5jdGlvbmFsaXR5IGhlcmUuCitldmFsICdmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICgpCiB7Ci0gICAgIyBFeHRyYWN0IHN1YmRpcmVjdG9yeSBmcm9tIHRoZSBhcmd1bWVudC4KLSAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEIC1lICIkZGlybmFtZSJgCi0gICAgaWYgdGVzdCAiWCRmdW5jX2Rpcm5hbWVfcmVzdWx0IiA9ICJYJHsxfSI7IHRoZW4KLSAgICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iCi0gICAgZWxzZQotICAgICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJGZ1bmNfZGlybmFtZV9yZXN1bHQkezJ9IgorICAgICRkZWJ1Z19jbWQKKworICAgICciJF9iIicKKyAgICAnIiRfZCInCit9JworCisKKyMgZnVuY19lY2hvIEFSRy4uLgorIyAtLS0tLS0tLS0tLS0tLS0tCisjIEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIG1lc3NhZ2UuCitmdW5jX2VjaG8gKCkKK3sKKyAgICAkZGVidWdfY21kCisKKyAgICBfR19tZXNzYWdlPSQqCisKKyAgICBmdW5jX2VjaG9fSUZTPSRJRlMKKyAgICBJRlM9JG5sCisgICAgZm9yIF9HX2xpbmUgaW4gJF9HX21lc3NhZ2U7IGRvCisgICAgICBJRlM9JGZ1bmNfZWNob19JRlMKKyAgICAgICRic19lY2hvICIkcHJvZ25hbWU6ICRfR19saW5lIgorICAgIGRvbmUKKyAgICBJRlM9JGZ1bmNfZWNob19JRlMKK30KKworCisjIGZ1bmNfZWNob19hbGwgQVJHLi4uCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEludm9rZSAkRUNITyB3aXRoIGFsbCBhcmdzLCBzcGFjZS1zZXBhcmF0ZWQuCitmdW5jX2VjaG9fYWxsICgpCit7CisgICAgJEVDSE8gIiQqIgorfQorCisKKyMgZnVuY19lY2hvX2luZml4XzEgSU5GSVggQVJHLi4uCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFY2hvIHByb2dyYW0gbmFtZSwgZm9sbG93ZWQgYnkgSU5GSVggb24gdGhlIGZpcnN0IGxpbmUsIHdpdGggYW55CisjIGFkZGl0aW9uYWwgbGluZXMgbm90IHNob3dpbmcgSU5GSVguCitmdW5jX2VjaG9faW5maXhfMSAoKQoreworICAgICRkZWJ1Z19jbWQKKworICAgICRyZXF1aXJlX3Rlcm1fY29sb3JzCisKKyAgICBfR19pbmZpeD0kMTsgc2hpZnQKKyAgICBfR19pbmRlbnQ9JF9HX2luZml4CisgICAgX0dfcHJlZml4PSIkcHJvZ25hbWU6ICRfR19pbmZpeDogIgorICAgIF9HX21lc3NhZ2U9JCoKKworICAgICMgU3RyaXAgY29sb3IgZXNjYXBlIHNlcXVlbmNlcyBiZWZvcmUgY291bnRpbmcgcHJpbnRhYmxlIGxlbmd0aAorICAgIGZvciBfR190YyBpbiAiJHRjX3Jlc2V0IiAiJHRjX2JvbGQiICIkdGNfc3RhbmRvdXQiICIkdGNfcmVkIiAiJHRjX2dyZWVuIiAiJHRjX2JsdWUiICIkdGNfY3lhbiIKKyAgICBkbworICAgICAgdGVzdCAtbiAiJF9HX3RjIiAmJiB7CisgICAgICAgIF9HX2VzY190Yz1gJGJzX2VjaG8gIiRfR190YyIgfCBzZWQgIiRzZWRfbWFrZV9saXRlcmFsX3JlZ2V4ImAKKyAgICAgICAgX0dfaW5kZW50PWAkYnNfZWNobyAiJF9HX2luZGVudCIgfCBzZWQgInN8JF9HX2VzY190Y3x8ZyJgCisgICAgICB9CisgICAgZG9uZQorICAgIF9HX2luZGVudD0iJHByb2duYW1lOiAiYGVjaG8gIiRfR19pbmRlbnQiIHwgc2VkICdzfC58IHxnJ2AiICAiICMjIGV4Y2x1ZGUgZnJvbSBzY19wcm9oaWJpdF9uZXN0ZWRfcXVvdGVzCisKKyAgICBmdW5jX2VjaG9faW5maXhfMV9JRlM9JElGUworICAgIElGUz0kbmwKKyAgICBmb3IgX0dfbGluZSBpbiAkX0dfbWVzc2FnZTsgZG8KKyAgICAgIElGUz0kZnVuY19lY2hvX2luZml4XzFfSUZTCisgICAgICAkYnNfZWNobyAiJF9HX3ByZWZpeCR0Y19ib2xkJF9HX2xpbmUkdGNfcmVzZXQiID4mMgorICAgICAgX0dfcHJlZml4PSRfR19pbmRlbnQKKyAgICBkb25lCisgICAgSUZTPSRmdW5jX2VjaG9faW5maXhfMV9JRlMKK30KKworCisjIGZ1bmNfZXJyb3IgQVJHLi4uCisjIC0tLS0tLS0tLS0tLS0tLS0tCisjIEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIG1lc3NhZ2UgdG8gc3RhbmRhcmQgZXJyb3IuCitmdW5jX2Vycm9yICgpCit7CisgICAgJGRlYnVnX2NtZAorCisgICAgJHJlcXVpcmVfdGVybV9jb2xvcnMKKworICAgIGZ1bmNfZWNob19pbmZpeF8xICIgICR0Y19zdGFuZG91dCR7dGNfcmVkfWVycm9yJHRjX3Jlc2V0IiAiJCoiID4mMgorfQorCisKKyMgZnVuY19mYXRhbF9lcnJvciBBUkcuLi4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgbWVzc2FnZSB0byBzdGFuZGFyZCBlcnJvciwgYW5kIGV4aXQuCitmdW5jX2ZhdGFsX2Vycm9yICgpCit7CisgICAgJGRlYnVnX2NtZAorCisgICAgZnVuY19lcnJvciAiJCoiCisgICAgZXhpdCAkRVhJVF9GQUlMVVJFCit9CisKKworIyBmdW5jX2dyZXAgRVhQUkVTU0lPTiBGSUxFTkFNRQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDaGVjayB3aGV0aGVyIEVYUFJFU1NJT04gbWF0Y2hlcyBhbnkgbGluZSBvZiBGSUxFTkFNRSwgd2l0aG91dCBvdXRwdXQuCitmdW5jX2dyZXAgKCkKK3sKKyAgICAkZGVidWdfY21kCisKKyAgICAkR1JFUCAiJDEiICIkMiIgPi9kZXYvbnVsbCAyPiYxCit9CisKKworIyBmdW5jX2xlbiBTVFJJTkcKKyMgLS0tLS0tLS0tLS0tLS0tCisjIFNldCBmdW5jX2xlbl9yZXN1bHQgdG8gdGhlIGxlbmd0aCBvZiBTVFJJTkcuIFNUUklORyBtYXkgbm90CisjIHN0YXJ0IHdpdGggYSBoeXBoZW4uCisgIHRlc3QgLXogIiRfR19IQVZFX1hTSV9PUFMiIFwKKyAgICAmJiAoZXZhbCAneD1hL2IvYzsKKyAgICAgIHRlc3QgNWFhL2JiL2NjID0gIiR7I3h9JHt4JSUvKn0ke3glLyp9JHt4IyovfSR7eCMjKi99IicpIDI+L2Rldi9udWxsIFwKKyAgICAmJiBfR19IQVZFX1hTSV9PUFM9eWVzCisKK2lmIHRlc3QgeWVzID0gIiRfR19IQVZFX1hTSV9PUFMiOyB0aGVuCisgIGV2YWwgJ2Z1bmNfbGVuICgpCisgIHsKKyAgICAkZGVidWdfY21kCisKKyAgICBmdW5jX2xlbl9yZXN1bHQ9JHsjMX0KKyAgfScKK2Vsc2UKKyAgZnVuY19sZW4gKCkKKyAgeworICAgICRkZWJ1Z19jbWQKKworICAgIGZ1bmNfbGVuX3Jlc3VsdD1gZXhwciAiJDEiIDogIi4qIiAyPi9kZXYvbnVsbCB8fCBlY2hvICRtYXhfY21kX2xlbmAKKyAgfQorZmkKKworCisjIGZ1bmNfbWtkaXJfcCBESVJFQ1RPUlktUEFUSAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgTWFrZSBzdXJlIHRoZSBlbnRpcmUgcGF0aCB0byBESVJFQ1RPUlktUEFUSCBpcyBhdmFpbGFibGUuCitmdW5jX21rZGlyX3AgKCkKK3sKKyAgICAkZGVidWdfY21kCisKKyAgICBfR19kaXJlY3RvcnlfcGF0aD0kMQorICAgIF9HX2Rpcl9saXN0PQorCisgICAgaWYgdGVzdCAtbiAiJF9HX2RpcmVjdG9yeV9wYXRoIiAmJiB0ZXN0IDogIT0gIiRvcHRfZHJ5X3J1biI7IHRoZW4KKworICAgICAgIyBQcm90ZWN0IGRpcmVjdG9yeSBuYW1lcyBzdGFydGluZyB3aXRoICctJworICAgICAgY2FzZSAkX0dfZGlyZWN0b3J5X3BhdGggaW4KKyAgICAgICAgLSopIF9HX2RpcmVjdG9yeV9wYXRoPS4vJF9HX2RpcmVjdG9yeV9wYXRoIDs7CisgICAgICBlc2FjCisKKyAgICAgICMgV2hpbGUgc29tZSBwb3J0aW9uIG9mIERJUiBkb2VzIG5vdCB5ZXQgZXhpc3QuLi4KKyAgICAgIHdoaWxlIHRlc3QgISAtZCAiJF9HX2RpcmVjdG9yeV9wYXRoIjsgZG8KKyAgICAgICAgIyAuLi5tYWtlIGEgbGlzdCBpbiB0b3Btb3N0IGZpcnN0IG9yZGVyLiAgVXNlIGEgY29sb24gZGVsaW1pdGVkCisJIyBsaXN0IGluY2FzZSBzb21lIHBvcnRpb24gb2YgcGF0aCBjb250YWlucyB3aGl0ZXNwYWNlLgorICAgICAgICBfR19kaXJfbGlzdD0kX0dfZGlyZWN0b3J5X3BhdGg6JF9HX2Rpcl9saXN0CisKKyAgICAgICAgIyBJZiB0aGUgbGFzdCBwb3J0aW9uIGFkZGVkIGhhcyBubyBzbGFzaCBpbiBpdCwgdGhlIGxpc3QgaXMgZG9uZQorICAgICAgICBjYXNlICRfR19kaXJlY3RvcnlfcGF0aCBpbiAqLyopIDs7ICopIGJyZWFrIDs7IGVzYWMKKworICAgICAgICAjIC4uLm90aGVyd2lzZSB0aHJvdyBhd2F5IHRoZSBjaGlsZCBkaXJlY3RvcnkgYW5kIGxvb3AKKyAgICAgICAgX0dfZGlyZWN0b3J5X3BhdGg9YCRFQ0hPICIkX0dfZGlyZWN0b3J5X3BhdGgiIHwgJFNFRCAtZSAiJHNlZF9kaXJuYW1lImAKKyAgICAgIGRvbmUKKyAgICAgIF9HX2Rpcl9saXN0PWAkRUNITyAiJF9HX2Rpcl9saXN0IiB8ICRTRUQgJ3N8OiokfHwnYAorCisgICAgICBmdW5jX21rZGlyX3BfSUZTPSRJRlM7IElGUz06CisgICAgICBmb3IgX0dfZGlyIGluICRfR19kaXJfbGlzdDsgZG8KKwlJRlM9JGZ1bmNfbWtkaXJfcF9JRlMKKyAgICAgICAgIyBta2RpciBjYW4gZmFpbCB3aXRoIGEgJ0ZpbGUgZXhpc3QnIGVycm9yIGlmIHR3byBwcm9jZXNzZXMKKyAgICAgICAgIyB0cnkgdG8gY3JlYXRlIG9uZSBvZiB0aGUgZGlyZWN0b3JpZXMgY29uY3VycmVudGx5LiAgRG9uJ3QKKyAgICAgICAgIyBzdG9wIGluIHRoYXQgY2FzZSEKKyAgICAgICAgJE1LRElSICIkX0dfZGlyIiAyPi9kZXYvbnVsbCB8fCA6CisgICAgICBkb25lCisgICAgICBJRlM9JGZ1bmNfbWtkaXJfcF9JRlMKKworICAgICAgIyBCYWlsIG91dCBpZiB3ZSAob3Igc29tZSBvdGhlciBwcm9jZXNzKSBmYWlsZWQgdG8gY3JlYXRlIGEgZGlyZWN0b3J5LgorICAgICAgdGVzdCAtZCAiJF9HX2RpcmVjdG9yeV9wYXRoIiB8fCBcCisgICAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgIkZhaWxlZCB0byBjcmVhdGUgJyQxJyIKICAgICBmaQotICAgIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEIC1lICIkYmFzZW5hbWUiYAotfSAjIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgbWF5IGJlIHJlcGxhY2VkIGJ5IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9uCit9CiAKIAotIyBmdW5jX3N0cmlwbmFtZSBwcmVmaXggc3VmZml4IG5hbWUKLSMgc3RyaXAgUFJFRklYIGFuZCBTVUZGSVggb2ZmIG9mIE5BTUUuCi0jIFBSRUZJWCBhbmQgU1VGRklYIG11c3Qgbm90IGNvbnRhaW4gZ2xvYmJpbmcgb3IgcmVnZXggc3BlY2lhbAotIyBjaGFyYWN0ZXJzLCBoYXNoZXMsIHBlcmNlbnQgc2lnbnMsIGJ1dCBTVUZGSVggbWF5IGNvbnRhaW4gYSBsZWFkaW5nCi0jIGRvdCAoaW4gd2hpY2ggY2FzZSB0aGF0IG1hdGNoZXMgb25seSBhIGRvdCkuCi0jIGZ1bmNfc3RyaXBfc3VmZml4IHByZWZpeCBuYW1lCi1mdW5jX3N0cmlwbmFtZSAoKQorIyBmdW5jX21rdGVtcGRpciBbQkFTRU5BTUVdCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgTWFrZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgdGhhdCB3b24ndCBjbGFzaCB3aXRoIG90aGVyIHJ1bm5pbmcKKyMgbGlidG9vbCBwcm9jZXNzZXMsIGFuZCBhdm9pZHMgcmFjZSBjb25kaXRpb25zIGlmIHBvc3NpYmxlLiAgSWYKKyMgZ2l2ZW4sIEJBU0VOQU1FIGlzIHRoZSBiYXNlbmFtZSBmb3IgdGhhdCBkaXJlY3RvcnkuCitmdW5jX21rdGVtcGRpciAoKQogewotICAgIGNhc2UgJHsyfSBpbgotICAgICAgLiopIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7M30iIHwgJFNFRCAicyVeJHsxfSUlOyBzJVxcXFwkezJ9XCQlJSJgOzsKLSAgICAgICopICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezN9IiB8ICRTRUQgInMlXiR7MX0lJTsgcyUkezJ9XCQlJSJgOzsKLSAgICBlc2FjCi19ICMgZnVuY19zdHJpcG5hbWUgbWF5IGJlIHJlcGxhY2VkIGJ5IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9uCisgICAgJGRlYnVnX2NtZAogCisgICAgX0dfdGVtcGxhdGU9JHtUTVBESVItL3RtcH0vJHsxLSRwcm9nbmFtZX0KIAotIyBUaGVzZSBTRUQgc2NyaXB0cyBwcmVzdXBwb3NlIGFuIGFic29sdXRlIHBhdGggd2l0aCBhIHRyYWlsaW5nIHNsYXNoLgotcGF0aGNhcj0ncyxeL1woW14vXSpcKS4qJCxcMSwnCi1wYXRoY2RyPSdzLF4vW14vXSosLCcKLXJlbW92ZWRvdHBhcnRzPSc6ZG90c2wKLQkJc0AvXC4vQC9AZwotCQl0IGRvdHNsCi0JCXMsL1wuJCwvLCcKLWNvbGxhcHNlc2xhc2hlcz0nc0AvXHsxLFx9QC9AZycKLWZpbmFsc2xhc2g9J3MsLyokLC8sJworICAgIGlmIHRlc3QgOiA9ICIkb3B0X2RyeV9ydW4iOyB0aGVuCisgICAgICAjIFJldHVybiBhIGRpcmVjdG9yeSBuYW1lLCBidXQgZG9uJ3QgY3JlYXRlIGl0IGluIGRyeS1ydW4gbW9kZQorICAgICAgX0dfdG1wZGlyPSRfR190ZW1wbGF0ZS0kJAorICAgIGVsc2UKKworICAgICAgIyBJZiBta3RlbXAgd29ya3MsIHVzZSB0aGF0IGZpcnN0IGFuZCBmb3JlbW9zdAorICAgICAgX0dfdG1wZGlyPWBta3RlbXAgLWQgIiRfR190ZW1wbGF0ZS1YWFhYWFhYWCIgMj4vZGV2L251bGxgCisKKyAgICAgIGlmIHRlc3QgISAtZCAiJF9HX3RtcGRpciI7IHRoZW4KKyAgICAgICAgIyBGYWlsaW5nIHRoYXQsIGF0IGxlYXN0IHRyeSBhbmQgdXNlICRSQU5ET00gdG8gYXZvaWQgYSByYWNlCisgICAgICAgIF9HX3RtcGRpcj0kX0dfdGVtcGxhdGUtJHtSQU5ET00tMH0kJAorCisgICAgICAgIGZ1bmNfbWt0ZW1wZGlyX3VtYXNrPWB1bWFza2AKKyAgICAgICAgdW1hc2sgMDA3NworICAgICAgICAkTUtESVIgIiRfR190bXBkaXIiCisgICAgICAgIHVtYXNrICRmdW5jX21rdGVtcGRpcl91bWFzaworICAgICAgZmkKKworICAgICAgIyBJZiB3ZSdyZSBub3QgaW4gZHJ5LXJ1biBtb2RlLCBib21iIG91dCBvbiBmYWlsdXJlCisgICAgICB0ZXN0IC1kICIkX0dfdG1wZGlyIiB8fCBcCisgICAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBjcmVhdGUgdGVtcG9yYXJ5IGRpcmVjdG9yeSAnJF9HX3RtcGRpciciCisgICAgZmkKKworICAgICRFQ0hPICIkX0dfdG1wZGlyIgorfQorCiAKICMgZnVuY19ub3JtYWxfYWJzcGF0aCBQQVRICisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBSZW1vdmUgZG91YmxlZC11cCBhbmQgdHJhaWxpbmcgc2xhc2hlcywgIi4iIHBhdGggY29tcG9uZW50cywKICMgYW5kIGNhbmNlbCBvdXQgYW55ICIuLiIgcGF0aCBjb21wb25lbnRzIGluIFBBVEggYWZ0ZXIgbWFraW5nCiAjIGl0IGFuIGFic29sdXRlIHBhdGguCi0jICAgICAgICAgICAgIHZhbHVlIHJldHVybmVkIGluICIkZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQiCiBmdW5jX25vcm1hbF9hYnNwYXRoICgpCiB7Ci0gICMgU3RhcnQgZnJvbSByb290IGRpciBhbmQgcmVhc3NlbWJsZSB0aGUgcGF0aC4KLSAgZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQ9Ci0gIGZ1bmNfbm9ybWFsX2Fic3BhdGhfdHBhdGg9JDEKLSAgZnVuY19ub3JtYWxfYWJzcGF0aF9hbHRuYW1lc3BhY2U9Ci0gIGNhc2UgJGZ1bmNfbm9ybWFsX2Fic3BhdGhfdHBhdGggaW4KLSAgICAiIikKLSAgICAgICMgRW1wdHkgcGF0aCwgdGhhdCBqdXN0IG1lYW5zICRjd2QuCi0gICAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLycgImBwd2RgIgotICAgICAgZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQ9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAotICAgICAgcmV0dXJuCi0gICAgOzsKLSAgICAjIFRoZSBuZXh0IHRocmVlIGVudHJpZXMgYXJlIHVzZWQgdG8gc3BvdCBhIHJ1biBvZiBwcmVjaXNlbHkKLSAgICAjIHR3byBsZWFkaW5nIHNsYXNoZXMgd2l0aG91dCB1c2luZyBuZWdhdGVkIGNoYXJhY3RlciBjbGFzc2VzOwotICAgICMgd2UgdGFrZSBhZHZhbnRhZ2Ugb2YgY2FzZSdzIGZpcnN0LW1hdGNoIGJlaGF2aW91ci4KLSAgICAvLy8qKQotICAgICAgIyBVbnVzdWFsIGZvcm0gb2YgYWJzb2x1dGUgcGF0aCwgZG8gbm90aGluZy4KLSAgICA7OwotICAgIC8vKikKLSAgICAgICMgTm90IG5lY2Vzc2FyaWx5IGFuIG9yZGluYXJ5IHBhdGg7IFBPU0lYIHJlc2VydmVzIGxlYWRpbmcgJy8vJwotICAgICAgIyBhbmQgZm9yIGV4YW1wbGUgQ3lnd2luIHVzZXMgaXQgdG8gYWNjZXNzIHJlbW90ZSBmaWxlIHNoYXJlcwotICAgICAgIyBvdmVyIENJRlMvU01CLCBzbyB3ZSBjb25zZXJ2ZSBhIGxlYWRpbmcgZG91YmxlIHNsYXNoIGlmIGZvdW5kLgotICAgICAgZnVuY19ub3JtYWxfYWJzcGF0aF9hbHRuYW1lc3BhY2U9LwotICAgIDs7Ci0gICAgLyopCi0gICAgICAjIEFic29sdXRlIHBhdGgsIGRvIG5vdGhpbmcuCi0gICAgOzsKLSAgICAqKQotICAgICAgIyBSZWxhdGl2ZSBwYXRoLCBwcmVwZW5kICRjd2QuCi0gICAgICBmdW5jX25vcm1hbF9hYnNwYXRoX3RwYXRoPWBwd2RgLyRmdW5jX25vcm1hbF9hYnNwYXRoX3RwYXRoCi0gICAgOzsKLSAgZXNhYwotICAjIENhbmNlbCBvdXQgYWxsIHRoZSBzaW1wbGUgc3R1ZmYgdG8gc2F2ZSBpdGVyYXRpb25zLiAgV2UgYWxzbyB3YW50Ci0gICMgdGhlIHBhdGggdG8gZW5kIHdpdGggYSBzbGFzaCBmb3IgZWFzZSBvZiBwYXJzaW5nLCBzbyBtYWtlIHN1cmUKLSAgIyB0aGVyZSBpcyBvbmUgKGFuZCBvbmx5IG9uZSkgaGVyZS4KLSAgZnVuY19ub3JtYWxfYWJzcGF0aF90cGF0aD1gJEVDSE8gIiRmdW5jX25vcm1hbF9hYnNwYXRoX3RwYXRoIiB8ICRTRUQgXAotICAgICAgICAtZSAiJHJlbW92ZWRvdHBhcnRzIiAtZSAiJGNvbGxhcHNlc2xhc2hlcyIgLWUgIiRmaW5hbHNsYXNoImAKLSAgd2hpbGUgOjsgZG8KLSAgICAjIFByb2Nlc3NlZCBpdCBhbGwgeWV0PwotICAgIGlmIHRlc3QgIiRmdW5jX25vcm1hbF9hYnNwYXRoX3RwYXRoIiA9IC8gOyB0aGVuCi0gICAgICAjIElmIHdlIGFzY2VuZGVkIHRvIHRoZSByb290IHVzaW5nICIuLiIgdGhlIHJlc3VsdCBtYXkgYmUgZW1wdHkgbm93LgotICAgICAgaWYgdGVzdCAteiAiJGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0IiA7IHRoZW4KLSAgICAgICAgZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQ9LwotICAgICAgZmkKLSAgICAgIGJyZWFrCi0gICAgZmkKLSAgICBmdW5jX25vcm1hbF9hYnNwYXRoX3Rjb21wb25lbnQ9YCRFQ0hPICIkZnVuY19ub3JtYWxfYWJzcGF0aF90cGF0aCIgfCAkU0VEIFwKLSAgICAgICAgLWUgIiRwYXRoY2FyImAKLSAgICBmdW5jX25vcm1hbF9hYnNwYXRoX3RwYXRoPWAkRUNITyAiJGZ1bmNfbm9ybWFsX2Fic3BhdGhfdHBhdGgiIHwgJFNFRCBcCi0gICAgICAgIC1lICIkcGF0aGNkciJgCi0gICAgIyBGaWd1cmUgb3V0IHdoYXQgdG8gZG8gd2l0aCBpdAotICAgIGNhc2UgJGZ1bmNfbm9ybWFsX2Fic3BhdGhfdGNvbXBvbmVudCBpbgorICAgICRkZWJ1Z19jbWQKKworICAgICMgVGhlc2UgU0VEIHNjcmlwdHMgcHJlc3VwcG9zZSBhbiBhYnNvbHV0ZSBwYXRoIHdpdGggYSB0cmFpbGluZyBzbGFzaC4KKyAgICBfR19wYXRoY2FyPSdzfF4vXChbXi9dKlwpLiokfFwxfCcKKyAgICBfR19wYXRoY2RyPSdzfF4vW14vXSp8fCcKKyAgICBfR19yZW1vdmVkb3RwYXJ0cz0nOmRvdHNsCisJCXN8L1wuL3wvfGcKKwkJdCBkb3RzbAorCQlzfC9cLiR8L3wnCisgICAgX0dfY29sbGFwc2VzbGFzaGVzPSdzfC9cezEsXH18L3xnJworICAgIF9HX2ZpbmFsc2xhc2g9J3N8LyokfC98JworCisgICAgIyBTdGFydCBmcm9tIHJvb3QgZGlyIGFuZCByZWFzc2VtYmxlIHRoZSBwYXRoLgorICAgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0PQorICAgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfdHBhdGg9JDEKKyAgICBmdW5jX25vcm1hbF9hYnNwYXRoX2FsdG5hbWVzcGFjZT0KKyAgICBjYXNlICRmdW5jX25vcm1hbF9hYnNwYXRoX3RwYXRoIGluCiAgICAgICAiIikKLSAgICAgICAgIyBUcmFpbGluZyBlbXB0eSBwYXRoIGNvbXBvbmVudCwgaWdub3JlIGl0LgotICAgICAgOzsKLSAgICAgIC4uKQotICAgICAgICAjIFBhcmVudCBkaXI7IHN0cmlwIGxhc3QgYXNzZW1ibGVkIGNvbXBvbmVudCBmcm9tIHJlc3VsdC4KLSAgICAgICAgZnVuY19kaXJuYW1lICIkZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQiCi0gICAgICAgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0PSRmdW5jX2Rpcm5hbWVfcmVzdWx0Ci0gICAgICA7OwotICAgICAgKikKLSAgICAgICAgIyBBY3R1YWwgcGF0aCBjb21wb25lbnQsIGFwcGVuZCBpdC4KLSAgICAgICAgZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQ9JGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0LyRmdW5jX25vcm1hbF9hYnNwYXRoX3Rjb21wb25lbnQKLSAgICAgIDs7Ci0gICAgZXNhYwotICBkb25lCi0gICMgUmVzdG9yZSBsZWFkaW5nIGRvdWJsZS1zbGFzaCBpZiBvbmUgd2FzIGZvdW5kIG9uIGVudHJ5LgotICBmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdD0kZnVuY19ub3JtYWxfYWJzcGF0aF9hbHRuYW1lc3BhY2UkZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQKLX0KLQotIyBmdW5jX3JlbGF0aXZlX3BhdGggU1JDRElSIERTVERJUgotIyBnZW5lcmF0ZXMgYSByZWxhdGl2ZSBwYXRoIGZyb20gU1JDRElSIHRvIERTVERJUiwgd2l0aCBhIHRyYWlsaW5nCi0jIHNsYXNoIGlmIG5vbi1lbXB0eSwgc3VpdGFibGUgZm9yIGltbWVkaWF0ZWx5IGFwcGVuZGluZyBhIGZpbGVuYW1lCi0jIHdpdGhvdXQgbmVlZGluZyB0byBhcHBlbmQgYSBzZXBhcmF0b3IuCi0jICAgICAgICAgICAgIHZhbHVlIHJldHVybmVkIGluICIkZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdCIKLWZ1bmNfcmVsYXRpdmVfcGF0aCAoKQotewotICBmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0PQotICBmdW5jX25vcm1hbF9hYnNwYXRoICIkMSIKLSAgZnVuY19yZWxhdGl2ZV9wYXRoX3RsaWJkaXI9JGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0Ci0gIGZ1bmNfbm9ybWFsX2Fic3BhdGggIiQyIgotICBmdW5jX3JlbGF0aXZlX3BhdGhfdGJpbmRpcj0kZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQKLQotICAjIEFzY2VuZCB0aGUgdHJlZSBzdGFydGluZyBmcm9tIGxpYmRpcgotICB3aGlsZSA6OyBkbwotICAgICMgY2hlY2sgaWYgd2UgaGF2ZSBmb3VuZCBhIHByZWZpeCBvZiBiaW5kaXIKLSAgICBjYXNlICRmdW5jX3JlbGF0aXZlX3BhdGhfdGJpbmRpciBpbgotICAgICAgJGZ1bmNfcmVsYXRpdmVfcGF0aF90bGliZGlyKQotICAgICAgICAjIGZvdW5kIGFuIGV4YWN0IG1hdGNoCi0gICAgICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF90Y2FuY2VsbGVkPQotICAgICAgICBicmVhaworICAgICAgICAjIEVtcHR5IHBhdGgsIHRoYXQganVzdCBtZWFucyAkY3dkLgorICAgICAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLycgImBwd2RgIgorICAgICAgICBmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisgICAgICAgIHJldHVybgogICAgICAgICA7OwotICAgICAgJGZ1bmNfcmVsYXRpdmVfcGF0aF90bGliZGlyKikKLSAgICAgICAgIyBmb3VuZCBhIG1hdGNoaW5nIHByZWZpeAotICAgICAgICBmdW5jX3N0cmlwbmFtZSAiJGZ1bmNfcmVsYXRpdmVfcGF0aF90bGliZGlyIiAnJyAiJGZ1bmNfcmVsYXRpdmVfcGF0aF90YmluZGlyIgotICAgICAgICBmdW5jX3JlbGF0aXZlX3BhdGhfdGNhbmNlbGxlZD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0Ci0gICAgICAgIGlmIHRlc3QgLXogIiRmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0IjsgdGhlbgotICAgICAgICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQ9LgotICAgICAgICBmaQotICAgICAgICBicmVhaworICAgICAgIyBUaGUgbmV4dCB0aHJlZSBlbnRyaWVzIGFyZSB1c2VkIHRvIHNwb3QgYSBydW4gb2YgcHJlY2lzZWx5CisgICAgICAjIHR3byBsZWFkaW5nIHNsYXNoZXMgd2l0aG91dCB1c2luZyBuZWdhdGVkIGNoYXJhY3RlciBjbGFzc2VzOworICAgICAgIyB3ZSB0YWtlIGFkdmFudGFnZSBvZiBjYXNlJ3MgZmlyc3QtbWF0Y2ggYmVoYXZpb3VyLgorICAgICAgLy8vKikKKyAgICAgICAgIyBVbnVzdWFsIGZvcm0gb2YgYWJzb2x1dGUgcGF0aCwgZG8gbm90aGluZy4KKyAgICAgICAgOzsKKyAgICAgIC8vKikKKyAgICAgICAgIyBOb3QgbmVjZXNzYXJpbHkgYW4gb3JkaW5hcnkgcGF0aDsgUE9TSVggcmVzZXJ2ZXMgbGVhZGluZyAnLy8nCisgICAgICAgICMgYW5kIGZvciBleGFtcGxlIEN5Z3dpbiB1c2VzIGl0IHRvIGFjY2VzcyByZW1vdGUgZmlsZSBzaGFyZXMKKyAgICAgICAgIyBvdmVyIENJRlMvU01CLCBzbyB3ZSBjb25zZXJ2ZSBhIGxlYWRpbmcgZG91YmxlIHNsYXNoIGlmIGZvdW5kLgorICAgICAgICBmdW5jX25vcm1hbF9hYnNwYXRoX2FsdG5hbWVzcGFjZT0vCisgICAgICAgIDs7CisgICAgICAvKikKKyAgICAgICAgIyBBYnNvbHV0ZSBwYXRoLCBkbyBub3RoaW5nLgogICAgICAgICA7OwogICAgICAgKikKLSAgICAgICAgZnVuY19kaXJuYW1lICRmdW5jX3JlbGF0aXZlX3BhdGhfdGxpYmRpcgotICAgICAgICBmdW5jX3JlbGF0aXZlX3BhdGhfdGxpYmRpcj0ke2Z1bmNfZGlybmFtZV9yZXN1bHR9Ci0gICAgICAgIGlmIHRlc3QgIngkZnVuY19yZWxhdGl2ZV9wYXRoX3RsaWJkaXIiID0geCA7IHRoZW4KLSAgICAgICAgICAjIEhhdmUgdG8gZGVzY2VuZCBhbGwgdGhlIHdheSB0byB0aGUgcm9vdCEKLSAgICAgICAgICBmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0PS4uLyRmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0Ci0gICAgICAgICAgZnVuY19yZWxhdGl2ZV9wYXRoX3RjYW5jZWxsZWQ9JGZ1bmNfcmVsYXRpdmVfcGF0aF90YmluZGlyCi0gICAgICAgICAgYnJlYWsKLSAgICAgICAgZmkKLSAgICAgICAgZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdD0uLi8kZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdAorICAgICAgICAjIFJlbGF0aXZlIHBhdGgsIHByZXBlbmQgJGN3ZC4KKyAgICAgICAgZnVuY19ub3JtYWxfYWJzcGF0aF90cGF0aD1gcHdkYC8kZnVuY19ub3JtYWxfYWJzcGF0aF90cGF0aAogICAgICAgICA7OwogICAgIGVzYWMKLSAgZG9uZQogCi0gICMgTm93IGNhbGN1bGF0ZSBwYXRoOyB0YWtlIGNhcmUgdG8gYXZvaWQgZG91YmxpbmctdXAgc2xhc2hlcy4KLSAgZnVuY19zdHJpcG5hbWUgJycgJy8nICIkZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdCIKLSAgZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0Ci0gIGZ1bmNfc3RyaXBuYW1lICcvJyAnLycgIiRmdW5jX3JlbGF0aXZlX3BhdGhfdGNhbmNlbGxlZCIKLSAgaWYgdGVzdCAieCRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiICE9IHggOyB0aGVuCi0gICAgZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdD0ke2Z1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHR9LyR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0fQotICBmaQotCi0gICMgTm9ybWFsaXNhdGlvbi4gSWYgYmluZGlyIGlzIGxpYmRpciwgcmV0dXJuIGVtcHR5IHN0cmluZywKLSAgIyBlbHNlIHJlbGF0aXZlIHBhdGggZW5kaW5nIHdpdGggYSBzbGFzaDsgZWl0aGVyIHdheSwgdGFyZ2V0Ci0gICMgZmlsZSBuYW1lIGNhbiBiZSBkaXJlY3RseSBhcHBlbmRlZC4KLSAgaWYgdGVzdCAhIC16ICIkZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdCI7IHRoZW4KLSAgICBmdW5jX3N0cmlwbmFtZSAnLi8nICcnICIkZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdC8iCi0gICAgZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0Ci0gIGZpCisgICAgIyBDYW5jZWwgb3V0IGFsbCB0aGUgc2ltcGxlIHN0dWZmIHRvIHNhdmUgaXRlcmF0aW9ucy4gIFdlIGFsc28gd2FudAorICAgICMgdGhlIHBhdGggdG8gZW5kIHdpdGggYSBzbGFzaCBmb3IgZWFzZSBvZiBwYXJzaW5nLCBzbyBtYWtlIHN1cmUKKyAgICAjIHRoZXJlIGlzIG9uZSAoYW5kIG9ubHkgb25lKSBoZXJlLgorICAgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfdHBhdGg9YCRFQ0hPICIkZnVuY19ub3JtYWxfYWJzcGF0aF90cGF0aCIgfCAkU0VEIFwKKyAgICAgICAgICAtZSAiJF9HX3JlbW92ZWRvdHBhcnRzIiAtZSAiJF9HX2NvbGxhcHNlc2xhc2hlcyIgLWUgIiRfR19maW5hbHNsYXNoImAKKyAgICB3aGlsZSA6OyBkbworICAgICAgIyBQcm9jZXNzZWQgaXQgYWxsIHlldD8KKyAgICAgIGlmIHRlc3QgLyA9ICIkZnVuY19ub3JtYWxfYWJzcGF0aF90cGF0aCI7IHRoZW4KKyAgICAgICAgIyBJZiB3ZSBhc2NlbmRlZCB0byB0aGUgcm9vdCB1c2luZyAiLi4iIHRoZSByZXN1bHQgbWF5IGJlIGVtcHR5IG5vdy4KKyAgICAgICAgaWYgdGVzdCAteiAiJGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0IjsgdGhlbgorICAgICAgICAgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0PS8KKyAgICAgICAgZmkKKyAgICAgICAgYnJlYWsKKyAgICAgIGZpCisgICAgICBmdW5jX25vcm1hbF9hYnNwYXRoX3Rjb21wb25lbnQ9YCRFQ0hPICIkZnVuY19ub3JtYWxfYWJzcGF0aF90cGF0aCIgfCAkU0VEIFwKKyAgICAgICAgICAtZSAiJF9HX3BhdGhjYXIiYAorICAgICAgZnVuY19ub3JtYWxfYWJzcGF0aF90cGF0aD1gJEVDSE8gIiRmdW5jX25vcm1hbF9hYnNwYXRoX3RwYXRoIiB8ICRTRUQgXAorICAgICAgICAgIC1lICIkX0dfcGF0aGNkciJgCisgICAgICAjIEZpZ3VyZSBvdXQgd2hhdCB0byBkbyB3aXRoIGl0CisgICAgICBjYXNlICRmdW5jX25vcm1hbF9hYnNwYXRoX3Rjb21wb25lbnQgaW4KKyAgICAgICAgIiIpCisgICAgICAgICAgIyBUcmFpbGluZyBlbXB0eSBwYXRoIGNvbXBvbmVudCwgaWdub3JlIGl0LgorICAgICAgICAgIDs7CisgICAgICAgIC4uKQorICAgICAgICAgICMgUGFyZW50IGRpcjsgc3RyaXAgbGFzdCBhc3NlbWJsZWQgY29tcG9uZW50IGZyb20gcmVzdWx0LgorICAgICAgICAgIGZ1bmNfZGlybmFtZSAiJGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0IgorICAgICAgICAgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0PSRmdW5jX2Rpcm5hbWVfcmVzdWx0CisgICAgICAgICAgOzsKKyAgICAgICAgKikKKyAgICAgICAgICAjIEFjdHVhbCBwYXRoIGNvbXBvbmVudCwgYXBwZW5kIGl0LgorICAgICAgICAgIGZ1bmNfYXBwZW5kIGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0ICIvJGZ1bmNfbm9ybWFsX2Fic3BhdGhfdGNvbXBvbmVudCIKKyAgICAgICAgICA7OworICAgICAgZXNhYworICAgIGRvbmUKKyAgICAjIFJlc3RvcmUgbGVhZGluZyBkb3VibGUtc2xhc2ggaWYgb25lIHdhcyBmb3VuZCBvbiBlbnRyeS4KKyAgICBmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdD0kZnVuY19ub3JtYWxfYWJzcGF0aF9hbHRuYW1lc3BhY2UkZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQKIH0KIAotIyBUaGUgbmFtZSBvZiB0aGlzIHByb2dyYW06Ci1mdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICIkcHJvZ3BhdGgiCi1wcm9nbmFtZT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKIAotIyBNYWtlIHN1cmUgd2UgaGF2ZSBhbiBhYnNvbHV0ZSBwYXRoIGZvciByZWV4ZWN1dGlvbjoKLWNhc2UgJHByb2dwYXRoIGluCi0gIFtcXC9dKnxbQS1aYS16XTpcXCopIDs7Ci0gICpbXFwvXSopCi0gICAgIHByb2dkaXI9JGZ1bmNfZGlybmFtZV9yZXN1bHQKLSAgICAgcHJvZ2Rpcj1gY2QgIiRwcm9nZGlyIiAmJiBwd2RgCi0gICAgIHByb2dwYXRoPSIkcHJvZ2Rpci8kcHJvZ25hbWUiCi0gICAgIDs7Ci0gICopCi0gICAgIHNhdmVfSUZTPSIkSUZTIgotICAgICBJRlM9JHtQQVRIX1NFUEFSQVRPUi06fQotICAgICBmb3IgcHJvZ2RpciBpbiAkUEFUSDsgZG8KLSAgICAgICBJRlM9IiRzYXZlX0lGUyIKLSAgICAgICB0ZXN0IC14ICIkcHJvZ2Rpci8kcHJvZ25hbWUiICYmIGJyZWFrCi0gICAgIGRvbmUKLSAgICAgSUZTPSIkc2F2ZV9JRlMiCi0gICAgIHRlc3QgLW4gIiRwcm9nZGlyIiB8fCBwcm9nZGlyPWBwd2RgCi0gICAgIHByb2dwYXRoPSIkcHJvZ2Rpci8kcHJvZ25hbWUiCi0gICAgIDs7Ci1lc2FjCi0KLSMgU2VkIHN1YnN0aXR1dGlvbiB0aGF0IGhlbHBzIHVzIGRvIHJvYnVzdCBxdW90aW5nLiAgSXQgYmFja3NsYXNoaWZpZXMKLSMgbWV0YWNoYXJhY3RlcnMgdGhhdCBhcmUgc3RpbGwgYWN0aXZlIHdpdGhpbiBkb3VibGUtcXVvdGVkIHN0cmluZ3MuCi1Yc2VkPSIke1NFRH0iJyAtZSAxcy9eWC8vJwotc2VkX3F1b3RlX3N1YnN0PSdzL1woW2AiJFxcXVwpL1xcXDEvZycKLQotIyBTYW1lIGFzIGFib3ZlLCBidXQgZG8gbm90IHF1b3RlIHZhcmlhYmxlIHJlZmVyZW5jZXMuCi1kb3VibGVfcXVvdGVfc3Vic3Q9J3MvXChbImBcXF1cKS9cXFwxL2cnCi0KLSMgU2VkIHN1YnN0aXR1dGlvbiB0aGF0IHR1cm5zIGEgc3RyaW5nIGludG8gYSByZWdleCBtYXRjaGluZyBmb3IgdGhlCi0jIHN0cmluZyBsaXRlcmFsbHkuCi1zZWRfbWFrZV9saXRlcmFsX3JlZ2V4PSdzLFtdLlteJFxcKlwvXSxcXCYsZycKLQotIyBTZWQgc3Vic3RpdHV0aW9uIHRoYXQgY29udmVydHMgYSB3MzIgZmlsZSBuYW1lIG9yIHBhdGgKLSMgd2hpY2ggY29udGFpbnMgZm9yd2FyZCBzbGFzaGVzLCBpbnRvIG9uZSB0aGF0IGNvbnRhaW5zCi0jIChlc2NhcGVkKSBiYWNrc2xhc2hlcy4gIEEgdmVyeSBuYWl2ZSBpbXBsZW1lbnRhdGlvbi4KLWx0X3NlZF9uYWl2ZV9iYWNrc2xhc2hpZnk9J3N8XFxcXCp8XFx8ZztzfC98XFx8ZztzfFxcfFxcXFx8ZycKLQotIyBSZS1gXCcgcGFyYW1ldGVyIGV4cGFuc2lvbnMgaW4gb3V0cHV0IG9mIGRvdWJsZV9xdW90ZV9zdWJzdCB0aGF0IHdlcmUKLSMgYFwnLWVkIGluIGlucHV0IHRvIHRoZSBzYW1lLiAgSWYgYW4gb2RkIG51bWJlciBvZiBgXCcgcHJlY2VkZWQgYSAnJCcKLSMgaW4gaW5wdXQgdG8gZG91YmxlX3F1b3RlX3N1YnN0LCB0aGF0ICckJyB3YXMgcHJvdGVjdGVkIGZyb20gZXhwYW5zaW9uLgotIyBTaW5jZSBlYWNoIGlucHV0IGBcJyBpcyBub3cgdHdvIGBcJ3MsIGxvb2sgZm9yIGFueSBudW1iZXIgb2YgcnVucyBvZgotIyBmb3VyIGBcJ3MgZm9sbG93ZWQgYnkgdHdvIGBcJ3MgYW5kIHRoZW4gYSAnJCcuICBgXCcgdGhhdCAnJCcuCi1icz0nXFwnCi1iczI9J1xcXFwnCi1iczQ9J1xcXFxcXFxcJwotZG9sbGFyPSdcJCcKLXNlZF9kb3VibGVfYmFja3NsYXNoPSJcCi0gIHMvJGJzNC8mXFwKLS9nCi0gIHMvXiRiczIkZG9sbGFyLyRicyYvCi0gIHMvXFwoW14kYnNdXFwpJGJzMiRkb2xsYXIvXFwxJGJzMiRicyRkb2xsYXIvZwotICBzL1xuLy9nIgotCi0jIFN0YW5kYXJkIG9wdGlvbnM6Ci1vcHRfZHJ5X3J1bj1mYWxzZQotb3B0X2hlbHA9ZmFsc2UKLW9wdF9xdWlldD1mYWxzZQotb3B0X3ZlcmJvc2U9ZmFsc2UKLW9wdF93YXJuaW5nPToKLQotIyBmdW5jX2VjaG8gYXJnLi4uCi0jIEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIG1lc3NhZ2UsIGFsb25nIHdpdGggdGhlIGN1cnJlbnQgbW9kZQotIyBuYW1lIGlmIGl0IGhhcyBiZWVuIHNldCB5ZXQuCi1mdW5jX2VjaG8gKCkKKyMgZnVuY19ub3RxdWlldCBBUkcuLi4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgbWVzc2FnZSBvbmx5IHdoZW4gbm90IGluIHF1aWV0IG1vZGUuCitmdW5jX25vdHF1aWV0ICgpCiB7Ci0gICAgJEVDSE8gIiRwcm9nbmFtZTogJHtvcHRfbW9kZSskb3B0X21vZGU6IH0kKiIKLX0KKyAgICAkZGVidWdfY21kCiAKLSMgZnVuY192ZXJib3NlIGFyZy4uLgotIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCBtZXNzYWdlIGluIHZlcmJvc2UgbW9kZSBvbmx5LgotZnVuY192ZXJib3NlICgpCi17Ci0gICAgJG9wdF92ZXJib3NlICYmIGZ1bmNfZWNobyAkezErIiRAIn0KKyAgICAkb3B0X3F1aWV0IHx8IGZ1bmNfZWNobyAkezErIiRAIn0KIAogICAgICMgQSBidWcgaW4gYmFzaCBoYWx0cyB0aGUgc2NyaXB0IGlmIHRoZSBsYXN0IGxpbmUgb2YgYSBmdW5jdGlvbgogICAgICMgZmFpbHMgd2hlbiBzZXQgLWUgaXMgaW4gZm9yY2UsIHNvIHdlIG5lZWQgYW5vdGhlciBjb21tYW5kIHRvCkBAIC00NTQsNDUwICs5MTUsMTEyMiBAQAogICAgIDoKIH0KIAotIyBmdW5jX2VjaG9fYWxsIGFyZy4uLgotIyBJbnZva2UgJEVDSE8gd2l0aCBhbGwgYXJncywgc3BhY2Utc2VwYXJhdGVkLgotZnVuY19lY2hvX2FsbCAoKQotewotICAgICRFQ0hPICIkKiIKLX0KIAotIyBmdW5jX2Vycm9yIGFyZy4uLgotIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCBtZXNzYWdlIHRvIHN0YW5kYXJkIGVycm9yLgotZnVuY19lcnJvciAoKQorIyBmdW5jX3JlbGF0aXZlX3BhdGggU1JDRElSIERTVERJUgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTZXQgZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdCB0byB0aGUgcmVsYXRpdmUgcGF0aCBmcm9tIFNSQ0RJUiB0byBEU1RESVIuCitmdW5jX3JlbGF0aXZlX3BhdGggKCkKIHsKLSAgICAkRUNITyAiJHByb2duYW1lOiAke29wdF9tb2RlKyRvcHRfbW9kZTogfSIkezErIiRAIn0gMT4mMgotfQorICAgICRkZWJ1Z19jbWQKIAotIyBmdW5jX3dhcm5pbmcgYXJnLi4uCi0jIEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIHdhcm5pbmcgbWVzc2FnZSB0byBzdGFuZGFyZCBlcnJvci4KLWZ1bmNfd2FybmluZyAoKQotewotICAgICRvcHRfd2FybmluZyAmJiAkRUNITyAiJHByb2duYW1lOiAke29wdF9tb2RlKyRvcHRfbW9kZTogfXdhcm5pbmc6ICIkezErIiRAIn0gMT4mMgorICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQ9CisgICAgZnVuY19ub3JtYWxfYWJzcGF0aCAiJDEiCisgICAgZnVuY19yZWxhdGl2ZV9wYXRoX3RsaWJkaXI9JGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0CisgICAgZnVuY19ub3JtYWxfYWJzcGF0aCAiJDIiCisgICAgZnVuY19yZWxhdGl2ZV9wYXRoX3RiaW5kaXI9JGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0CiAKLSAgICAjIGJhc2ggYnVnIGFnYWluOgorICAgICMgQXNjZW5kIHRoZSB0cmVlIHN0YXJ0aW5nIGZyb20gbGliZGlyCisgICAgd2hpbGUgOjsgZG8KKyAgICAgICMgY2hlY2sgaWYgd2UgaGF2ZSBmb3VuZCBhIHByZWZpeCBvZiBiaW5kaXIKKyAgICAgIGNhc2UgJGZ1bmNfcmVsYXRpdmVfcGF0aF90YmluZGlyIGluCisgICAgICAgICRmdW5jX3JlbGF0aXZlX3BhdGhfdGxpYmRpcikKKyAgICAgICAgICAjIGZvdW5kIGFuIGV4YWN0IG1hdGNoCisgICAgICAgICAgZnVuY19yZWxhdGl2ZV9wYXRoX3RjYW5jZWxsZWQ9CisgICAgICAgICAgYnJlYWsKKyAgICAgICAgICA7OworICAgICAgICAkZnVuY19yZWxhdGl2ZV9wYXRoX3RsaWJkaXIqKQorICAgICAgICAgICMgZm91bmQgYSBtYXRjaGluZyBwcmVmaXgKKyAgICAgICAgICBmdW5jX3N0cmlwbmFtZSAiJGZ1bmNfcmVsYXRpdmVfcGF0aF90bGliZGlyIiAnJyAiJGZ1bmNfcmVsYXRpdmVfcGF0aF90YmluZGlyIgorICAgICAgICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF90Y2FuY2VsbGVkPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKyAgICAgICAgICBpZiB0ZXN0IC16ICIkZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdCI7IHRoZW4KKyAgICAgICAgICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQ9LgorICAgICAgICAgIGZpCisgICAgICAgICAgYnJlYWsKKyAgICAgICAgICA7OworICAgICAgICAqKQorICAgICAgICAgIGZ1bmNfZGlybmFtZSAkZnVuY19yZWxhdGl2ZV9wYXRoX3RsaWJkaXIKKyAgICAgICAgICBmdW5jX3JlbGF0aXZlX3BhdGhfdGxpYmRpcj0kZnVuY19kaXJuYW1lX3Jlc3VsdAorICAgICAgICAgIGlmIHRlc3QgLXogIiRmdW5jX3JlbGF0aXZlX3BhdGhfdGxpYmRpciI7IHRoZW4KKyAgICAgICAgICAgICMgSGF2ZSB0byBkZXNjZW5kIGFsbCB0aGUgd2F5IHRvIHRoZSByb290IQorICAgICAgICAgICAgZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdD0uLi8kZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdAorICAgICAgICAgICAgZnVuY19yZWxhdGl2ZV9wYXRoX3RjYW5jZWxsZWQ9JGZ1bmNfcmVsYXRpdmVfcGF0aF90YmluZGlyCisgICAgICAgICAgICBicmVhaworICAgICAgICAgIGZpCisgICAgICAgICAgZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdD0uLi8kZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdAorICAgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgZG9uZQorCisgICAgIyBOb3cgY2FsY3VsYXRlIHBhdGg7IHRha2UgY2FyZSB0byBhdm9pZCBkb3VibGluZy11cCBzbGFzaGVzLgorICAgIGZ1bmNfc3RyaXBuYW1lICcnICcvJyAiJGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQiCisgICAgZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisgICAgZnVuY19zdHJpcG5hbWUgJy8nICcvJyAiJGZ1bmNfcmVsYXRpdmVfcGF0aF90Y2FuY2VsbGVkIgorICAgIGlmIHRlc3QgLW4gIiRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiOyB0aGVuCisgICAgICBmdW5jX2FwcGVuZCBmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0ICIvJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCIKKyAgICBmaQorCisgICAgIyBOb3JtYWxpc2F0aW9uLiBJZiBiaW5kaXIgaXMgbGliZGlyLCByZXR1cm4gJy4nIGVsc2UgcmVsYXRpdmUgcGF0aC4KKyAgICBpZiB0ZXN0IC1uICIkZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdCI7IHRoZW4KKyAgICAgIGZ1bmNfc3RyaXBuYW1lICcuLycgJycgIiRmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0IgorICAgICAgZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisgICAgZmkKKworICAgIHRlc3QgLW4gIiRmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0IiB8fCBmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0PS4KKwogICAgIDoKIH0KIAotIyBmdW5jX2ZhdGFsX2Vycm9yIGFyZy4uLgotIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCBtZXNzYWdlIHRvIHN0YW5kYXJkIGVycm9yLCBhbmQgZXhpdC4KLWZ1bmNfZmF0YWxfZXJyb3IgKCkKLXsKLSAgICBmdW5jX2Vycm9yICR7MSsiJEAifQotICAgIGV4aXQgJEVYSVRfRkFJTFVSRQotfQogCi0jIGZ1bmNfZmF0YWxfaGVscCBhcmcuLi4KLSMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgbWVzc2FnZSB0byBzdGFuZGFyZCBlcnJvciwgZm9sbG93ZWQgYnkKLSMgYSBoZWxwIGhpbnQsIGFuZCBleGl0LgotZnVuY19mYXRhbF9oZWxwICgpCi17Ci0gICAgZnVuY19lcnJvciAkezErIiRAIn0KLSAgICBmdW5jX2ZhdGFsX2Vycm9yICIkaGVscCIKLX0KLWhlbHA9IlRyeSBcYCRwcm9nbmFtZSAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgICMjIGRlZmF1bHQKLQotCi0jIGZ1bmNfZ3JlcCBleHByZXNzaW9uIGZpbGVuYW1lCi0jIENoZWNrIHdoZXRoZXIgRVhQUkVTU0lPTiBtYXRjaGVzIGFueSBsaW5lIG9mIEZJTEVOQU1FLCB3aXRob3V0IG91dHB1dC4KLWZ1bmNfZ3JlcCAoKQotewotICAgICRHUkVQICIkMSIgIiQyIiA+L2Rldi9udWxsIDI+JjEKLX0KLQotCi0jIGZ1bmNfbWtkaXJfcCBkaXJlY3RvcnktcGF0aAotIyBNYWtlIHN1cmUgdGhlIGVudGlyZSBwYXRoIHRvIERJUkVDVE9SWS1QQVRIIGlzIGF2YWlsYWJsZS4KLWZ1bmNfbWtkaXJfcCAoKQotewotICAgIG15X2RpcmVjdG9yeV9wYXRoPSIkMSIKLSAgICBteV9kaXJfbGlzdD0KLQotICAgIGlmIHRlc3QgLW4gIiRteV9kaXJlY3RvcnlfcGF0aCIgJiYgdGVzdCAiJG9wdF9kcnlfcnVuIiAhPSAiOiI7IHRoZW4KLQotICAgICAgIyBQcm90ZWN0IGRpcmVjdG9yeSBuYW1lcyBzdGFydGluZyB3aXRoIGAtJwotICAgICAgY2FzZSAkbXlfZGlyZWN0b3J5X3BhdGggaW4KLSAgICAgICAgLSopIG15X2RpcmVjdG9yeV9wYXRoPSIuLyRteV9kaXJlY3RvcnlfcGF0aCIgOzsKLSAgICAgIGVzYWMKLQotICAgICAgIyBXaGlsZSBzb21lIHBvcnRpb24gb2YgRElSIGRvZXMgbm90IHlldCBleGlzdC4uLgotICAgICAgd2hpbGUgdGVzdCAhIC1kICIkbXlfZGlyZWN0b3J5X3BhdGgiOyBkbwotICAgICAgICAjIC4uLm1ha2UgYSBsaXN0IGluIHRvcG1vc3QgZmlyc3Qgb3JkZXIuICBVc2UgYSBjb2xvbiBkZWxpbWl0ZWQKLQkjIGxpc3QgaW5jYXNlIHNvbWUgcG9ydGlvbiBvZiBwYXRoIGNvbnRhaW5zIHdoaXRlc3BhY2UuCi0gICAgICAgIG15X2Rpcl9saXN0PSIkbXlfZGlyZWN0b3J5X3BhdGg6JG15X2Rpcl9saXN0IgotCi0gICAgICAgICMgSWYgdGhlIGxhc3QgcG9ydGlvbiBhZGRlZCBoYXMgbm8gc2xhc2ggaW4gaXQsIHRoZSBsaXN0IGlzIGRvbmUKLSAgICAgICAgY2FzZSAkbXlfZGlyZWN0b3J5X3BhdGggaW4gKi8qKSA7OyAqKSBicmVhayA7OyBlc2FjCi0KLSAgICAgICAgIyAuLi5vdGhlcndpc2UgdGhyb3cgYXdheSB0aGUgY2hpbGQgZGlyZWN0b3J5IGFuZCBsb29wCi0gICAgICAgIG15X2RpcmVjdG9yeV9wYXRoPWAkRUNITyAiJG15X2RpcmVjdG9yeV9wYXRoIiB8ICRTRUQgLWUgIiRkaXJuYW1lImAKLSAgICAgIGRvbmUKLSAgICAgIG15X2Rpcl9saXN0PWAkRUNITyAiJG15X2Rpcl9saXN0IiB8ICRTRUQgJ3MsOiokLCwnYAotCi0gICAgICBzYXZlX21rZGlyX3BfSUZTPSIkSUZTIjsgSUZTPSc6JwotICAgICAgZm9yIG15X2RpciBpbiAkbXlfZGlyX2xpc3Q7IGRvCi0JSUZTPSIkc2F2ZV9ta2Rpcl9wX0lGUyIKLSAgICAgICAgIyBta2RpciBjYW4gZmFpbCB3aXRoIGEgYEZpbGUgZXhpc3QnIGVycm9yIGlmIHR3byBwcm9jZXNzZXMKLSAgICAgICAgIyB0cnkgdG8gY3JlYXRlIG9uZSBvZiB0aGUgZGlyZWN0b3JpZXMgY29uY3VycmVudGx5LiAgRG9uJ3QKLSAgICAgICAgIyBzdG9wIGluIHRoYXQgY2FzZSEKLSAgICAgICAgJE1LRElSICIkbXlfZGlyIiAyPi9kZXYvbnVsbCB8fCA6Ci0gICAgICBkb25lCi0gICAgICBJRlM9IiRzYXZlX21rZGlyX3BfSUZTIgotCi0gICAgICAjIEJhaWwgb3V0IGlmIHdlIChvciBzb21lIG90aGVyIHByb2Nlc3MpIGZhaWxlZCB0byBjcmVhdGUgYSBkaXJlY3RvcnkuCi0gICAgICB0ZXN0IC1kICIkbXlfZGlyZWN0b3J5X3BhdGgiIHx8IFwKLSAgICAgICAgZnVuY19mYXRhbF9lcnJvciAiRmFpbGVkIHRvIGNyZWF0ZSBcYCQxJyIKLSAgICBmaQotfQotCi0KLSMgZnVuY19ta3RlbXBkaXIgW3N0cmluZ10KLSMgTWFrZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgdGhhdCB3b24ndCBjbGFzaCB3aXRoIG90aGVyIHJ1bm5pbmcKLSMgbGlidG9vbCBwcm9jZXNzZXMsIGFuZCBhdm9pZHMgcmFjZSBjb25kaXRpb25zIGlmIHBvc3NpYmxlLiAgSWYKLSMgZ2l2ZW4sIFNUUklORyBpcyB0aGUgYmFzZW5hbWUgZm9yIHRoYXQgZGlyZWN0b3J5LgotZnVuY19ta3RlbXBkaXIgKCkKLXsKLSAgICBteV90ZW1wbGF0ZT0iJHtUTVBESVItL3RtcH0vJHsxLSRwcm9nbmFtZX0iCi0KLSAgICBpZiB0ZXN0ICIkb3B0X2RyeV9ydW4iID0gIjoiOyB0aGVuCi0gICAgICAjIFJldHVybiBhIGRpcmVjdG9yeSBuYW1lLCBidXQgZG9uJ3QgY3JlYXRlIGl0IGluIGRyeS1ydW4gbW9kZQotICAgICAgbXlfdG1wZGlyPSIke215X3RlbXBsYXRlfS0kJCIKLSAgICBlbHNlCi0KLSAgICAgICMgSWYgbWt0ZW1wIHdvcmtzLCB1c2UgdGhhdCBmaXJzdCBhbmQgZm9yZW1vc3QKLSAgICAgIG15X3RtcGRpcj1gbWt0ZW1wIC1kICIke215X3RlbXBsYXRlfS1YWFhYWFhYWCIgMj4vZGV2L251bGxgCi0KLSAgICAgIGlmIHRlc3QgISAtZCAiJG15X3RtcGRpciI7IHRoZW4KLSAgICAgICAgIyBGYWlsaW5nIHRoYXQsIGF0IGxlYXN0IHRyeSBhbmQgdXNlICRSQU5ET00gdG8gYXZvaWQgYSByYWNlCi0gICAgICAgIG15X3RtcGRpcj0iJHtteV90ZW1wbGF0ZX0tJHtSQU5ET00tMH0kJCIKLQotICAgICAgICBzYXZlX21rdGVtcGRpcl91bWFzaz1gdW1hc2tgCi0gICAgICAgIHVtYXNrIDAwNzcKLSAgICAgICAgJE1LRElSICIkbXlfdG1wZGlyIgotICAgICAgICB1bWFzayAkc2F2ZV9ta3RlbXBkaXJfdW1hc2sKLSAgICAgIGZpCi0KLSAgICAgICMgSWYgd2UncmUgbm90IGluIGRyeS1ydW4gbW9kZSwgYm9tYiBvdXQgb24gZmFpbHVyZQotICAgICAgdGVzdCAtZCAiJG15X3RtcGRpciIgfHwgXAotICAgICAgICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgY3JlYXRlIHRlbXBvcmFyeSBkaXJlY3RvcnkgXGAkbXlfdG1wZGlyJyIKLSAgICBmaQotCi0gICAgJEVDSE8gIiRteV90bXBkaXIiCi19Ci0KLQotIyBmdW5jX3F1b3RlX2Zvcl9ldmFsIGFyZwotIyBBZXN0aGV0aWNhbGx5IHF1b3RlIEFSRyB0byBiZSBldmFsZWQgbGF0ZXIuCi0jIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0d28gdmFsdWVzOiBGVU5DX1FVT1RFX0ZPUl9FVkFMX1JFU1VMVAotIyBpcyBkb3VibGUtcXVvdGVkLCBzdWl0YWJsZSBmb3IgYSBzdWJzZXF1ZW50IGV2YWwsIHdoZXJlYXMKLSMgRlVOQ19RVU9URV9GT1JfRVZBTF9VTlFVT1RFRF9SRVNVTFQgaGFzIG1lcmVseSBhbGwgY2hhcmFjdGVycwotIyB3aGljaCBhcmUgc3RpbGwgYWN0aXZlIHdpdGhpbiBkb3VibGUgcXVvdGVzIGJhY2tzbGFzaGlmaWVkLgorIyBmdW5jX3F1b3RlX2Zvcl9ldmFsIEFSRy4uLgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBBZXN0aGV0aWNhbGx5IHF1b3RlIEFSR3MgdG8gYmUgZXZhbGVkIGxhdGVyLgorIyBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdHdvIHZhbHVlczoKKyMgICBpKSBmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdAorIyAgICAgIGRvdWJsZS1xdW90ZWQsIHN1aXRhYmxlIGZvciBhIHN1YnNlcXVlbnQgZXZhbAorIyAgaWkpIGZ1bmNfcXVvdGVfZm9yX2V2YWxfdW5xdW90ZWRfcmVzdWx0CisjICAgICAgaGFzIGFsbCBjaGFyYWN0ZXJzIHRoYXQgYXJlIHN0aWxsIGFjdGl2ZSB3aXRoaW4gZG91YmxlCisjICAgICAgcXVvdGVzIGJhY2tzbGFzaGlmaWVkLgogZnVuY19xdW90ZV9mb3JfZXZhbCAoKQogewotICAgIGNhc2UgJDEgaW4KLSAgICAgICpbXFxcYFwiXCRdKikKLQlmdW5jX3F1b3RlX2Zvcl9ldmFsX3VucXVvdGVkX3Jlc3VsdD1gJEVDSE8gIiQxIiB8ICRTRUQgIiRzZWRfcXVvdGVfc3Vic3QiYCA7OwotICAgICAgKikKLSAgICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbF91bnF1b3RlZF9yZXN1bHQ9IiQxIiA7OwotICAgIGVzYWMKKyAgICAkZGVidWdfY21kCiAKLSAgICBjYXNlICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3VucXVvdGVkX3Jlc3VsdCBpbgotICAgICAgIyBEb3VibGUtcXVvdGUgYXJncyBjb250YWluaW5nIHNoZWxsIG1ldGFjaGFyYWN0ZXJzIHRvIGRlbGF5Ci0gICAgICAjIHdvcmQgc3BsaXR0aW5nLCBjb21tYW5kIHN1YnN0aXR1dGlvbiBhbmQgYW5kIHZhcmlhYmxlCi0gICAgICAjIGV4cGFuc2lvbiBmb3IgYSBzdWJzZXF1ZW50IGV2YWwuCi0gICAgICAjIE1hbnkgQm91cm5lIHNoZWxscyBjYW5ub3QgaGFuZGxlIGNsb3NlIGJyYWNrZXRzIGNvcnJlY3RseQotICAgICAgIyBpbiBzY2FuIHNldHMsIHNvIHdlIHNwZWNpZnkgaXQgc2VwYXJhdGVseS4KLSAgICAgICpbXFtcflwjXF5cJlwqXChcKVx7XH1cfFw7XDxcPlw/XCdcIFwJXSp8Kl0qfCIiKQotICAgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdD0iXCIkZnVuY19xdW90ZV9mb3JfZXZhbF91bnF1b3RlZF9yZXN1bHRcIiIKLSAgICAgICAgOzsKLSAgICAgICopCi0gICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0PSIkZnVuY19xdW90ZV9mb3JfZXZhbF91bnF1b3RlZF9yZXN1bHQiCi0gICAgZXNhYworICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWxfdW5xdW90ZWRfcmVzdWx0PQorICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0PQorICAgIHdoaWxlIHRlc3QgMCAtbHQgJCM7IGRvCisgICAgICBjYXNlICQxIGluCisgICAgICAgICpbXFxcYFwiXCRdKikKKwkgIF9HX3VucXVvdGVkX2FyZz1gcHJpbnRmICclc1xuJyAiJDEiIHwkU0VEICIkc2VkX3F1b3RlX3N1YnN0ImAgOzsKKyAgICAgICAgKikKKyAgICAgICAgICBfR191bnF1b3RlZF9hcmc9JDEgOzsKKyAgICAgIGVzYWMKKyAgICAgIGlmIHRlc3QgLW4gIiRmdW5jX3F1b3RlX2Zvcl9ldmFsX3VucXVvdGVkX3Jlc3VsdCI7IHRoZW4KKwlmdW5jX2FwcGVuZCBmdW5jX3F1b3RlX2Zvcl9ldmFsX3VucXVvdGVkX3Jlc3VsdCAiICRfR191bnF1b3RlZF9hcmciCisgICAgICBlbHNlCisgICAgICAgIGZ1bmNfYXBwZW5kIGZ1bmNfcXVvdGVfZm9yX2V2YWxfdW5xdW90ZWRfcmVzdWx0ICIkX0dfdW5xdW90ZWRfYXJnIgorICAgICAgZmkKKworICAgICAgY2FzZSAkX0dfdW5xdW90ZWRfYXJnIGluCisgICAgICAgICMgRG91YmxlLXF1b3RlIGFyZ3MgY29udGFpbmluZyBzaGVsbCBtZXRhY2hhcmFjdGVycyB0byBkZWxheQorICAgICAgICAjIHdvcmQgc3BsaXR0aW5nLCBjb21tYW5kIHN1YnN0aXR1dGlvbiBhbmQgdmFyaWFibGUgZXhwYW5zaW9uCisgICAgICAgICMgZm9yIGEgc3Vic2VxdWVudCBldmFsLgorICAgICAgICAjIE1hbnkgQm91cm5lIHNoZWxscyBjYW5ub3QgaGFuZGxlIGNsb3NlIGJyYWNrZXRzIGNvcnJlY3RseQorICAgICAgICAjIGluIHNjYW4gc2V0cywgc28gd2Ugc3BlY2lmeSBpdCBzZXBhcmF0ZWx5LgorICAgICAgICAqW1xbXH5cI1xeXCZcKlwoXClce1x9XHxcO1w8XD5cP1wnXCBcCV0qfCpdKnwiIikKKyAgICAgICAgICBfR19xdW90ZWRfYXJnPVwiJF9HX3VucXVvdGVkX2FyZ1wiCisgICAgICAgICAgOzsKKyAgICAgICAgKikKKyAgICAgICAgICBfR19xdW90ZWRfYXJnPSRfR191bnF1b3RlZF9hcmcKKwkgIDs7CisgICAgICBlc2FjCisKKyAgICAgIGlmIHRlc3QgLW4gIiRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCI7IHRoZW4KKwlmdW5jX2FwcGVuZCBmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCAiICRfR19xdW90ZWRfYXJnIgorICAgICAgZWxzZQorICAgICAgICBmdW5jX2FwcGVuZCBmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCAiJF9HX3F1b3RlZF9hcmciCisgICAgICBmaQorICAgICAgc2hpZnQKKyAgICBkb25lCiB9CiAKIAotIyBmdW5jX3F1b3RlX2Zvcl9leHBhbmQgYXJnCisjIGZ1bmNfcXVvdGVfZm9yX2V4cGFuZCBBUkcKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBBZXN0aGV0aWNhbGx5IHF1b3RlIEFSRyB0byBiZSBldmFsZWQgbGF0ZXI7IHNhbWUgYXMgYWJvdmUsCiAjIGJ1dCBkbyBub3QgcXVvdGUgdmFyaWFibGUgcmVmZXJlbmNlcy4KIGZ1bmNfcXVvdGVfZm9yX2V4cGFuZCAoKQogeworICAgICRkZWJ1Z19jbWQKKwogICAgIGNhc2UgJDEgaW4KICAgICAgICpbXFxcYFwiXSopCi0JbXlfYXJnPWAkRUNITyAiJDEiIHwgJFNFRCBcCi0JICAgIC1lICIkZG91YmxlX3F1b3RlX3N1YnN0IiAtZSAiJHNlZF9kb3VibGVfYmFja3NsYXNoImAgOzsKKwlfR19hcmc9YCRFQ0hPICIkMSIgfCAkU0VEIFwKKwkgICAgLWUgIiRzZWRfZG91YmxlX3F1b3RlX3N1YnN0IiAtZSAiJHNlZF9kb3VibGVfYmFja3NsYXNoImAgOzsKICAgICAgICopCi0gICAgICAgIG15X2FyZz0iJDEiIDs7CisgICAgICAgIF9HX2FyZz0kMSA7OwogICAgIGVzYWMKIAotICAgIGNhc2UgJG15X2FyZyBpbgorICAgIGNhc2UgJF9HX2FyZyBpbgogICAgICAgIyBEb3VibGUtcXVvdGUgYXJncyBjb250YWluaW5nIHNoZWxsIG1ldGFjaGFyYWN0ZXJzIHRvIGRlbGF5CiAgICAgICAjIHdvcmQgc3BsaXR0aW5nIGFuZCBjb21tYW5kIHN1YnN0aXR1dGlvbiBmb3IgYSBzdWJzZXF1ZW50IGV2YWwuCiAgICAgICAjIE1hbnkgQm91cm5lIHNoZWxscyBjYW5ub3QgaGFuZGxlIGNsb3NlIGJyYWNrZXRzIGNvcnJlY3RseQogICAgICAgIyBpbiBzY2FuIHNldHMsIHNvIHdlIHNwZWNpZnkgaXQgc2VwYXJhdGVseS4KICAgICAgICpbXFtcflwjXF5cJlwqXChcKVx7XH1cfFw7XDxcPlw/XCdcIFwJXSp8Kl0qfCIiKQotICAgICAgICBteV9hcmc9IlwiJG15X2FyZ1wiIgorICAgICAgICBfR19hcmc9XCIkX0dfYXJnXCIKICAgICAgICAgOzsKICAgICBlc2FjCiAKLSAgICBmdW5jX3F1b3RlX2Zvcl9leHBhbmRfcmVzdWx0PSIkbXlfYXJnIgorICAgIGZ1bmNfcXVvdGVfZm9yX2V4cGFuZF9yZXN1bHQ9JF9HX2FyZwogfQogCiAKLSMgZnVuY19zaG93X2V2YWwgY21kIFtmYWlsX2V4cF0KLSMgVW5sZXNzIG9wdF9zaWxlbnQgaXMgdHJ1ZSwgdGhlbiBvdXRwdXQgQ01ELiAgVGhlbiwgaWYgb3B0X2RyeXJ1biBpcworIyBmdW5jX3N0cmlwbmFtZSBQUkVGSVggU1VGRklYIE5BTUUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIHN0cmlwIFBSRUZJWCBhbmQgU1VGRklYIGZyb20gTkFNRSwgYW5kIHN0b3JlIGluIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdC4KKyMgUFJFRklYIGFuZCBTVUZGSVggbXVzdCBub3QgY29udGFpbiBnbG9iYmluZyBvciByZWdleCBzcGVjaWFsCisjIGNoYXJhY3RlcnMsIGhhc2hlcywgcGVyY2VudCBzaWducywgYnV0IFNVRkZJWCBtYXkgY29udGFpbiBhIGxlYWRpbmcKKyMgZG90IChpbiB3aGljaCBjYXNlIHRoYXQgbWF0Y2hlcyBvbmx5IGEgZG90KS4KK2lmIHRlc3QgeWVzID0gIiRfR19IQVZFX1hTSV9PUFMiOyB0aGVuCisgIGV2YWwgJ2Z1bmNfc3RyaXBuYW1lICgpCisgIHsKKyAgICAkZGVidWdfY21kCisKKyAgICAjIHBka3NoIDUuMi4xNCBkb2VzIG5vdCBkbyAke1glJFl9IGNvcnJlY3RseSBpZiBib3RoIFggYW5kIFkgYXJlCisgICAgIyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMsIHNvIGFzc2lnbiBvbmUgdG8gb3JkaW5hcnkgdmFyaWFibGUgZmlyc3QuCisgICAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSQzCisgICAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0IyIkMSJ9CisgICAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0JSIkMiJ9CisgIH0nCitlbHNlCisgIGZ1bmNfc3RyaXBuYW1lICgpCisgIHsKKyAgICAkZGVidWdfY21kCisKKyAgICBjYXNlICQyIGluCisgICAgICAuKikgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiJDMiIHwgJFNFRCAtZSAicyVeJDElJSIgLWUgInMlXFxcXCQyXCQlJSJgOzsKKyAgICAgICopICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICIkMyIgfCAkU0VEIC1lICJzJV4kMSUlIiAtZSAicyUkMlwkJSUiYDs7CisgICAgZXNhYworICB9CitmaQorCisKKyMgZnVuY19zaG93X2V2YWwgQ01EIFtGQUlMX0VYUF0KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVW5sZXNzIG9wdF9xdWlldCBpcyB0cnVlLCB0aGVuIG91dHB1dCBDTUQuICBUaGVuLCBpZiBvcHRfZHJ5cnVuIGlzCiAjIG5vdCB0cnVlLCBldmFsdWF0ZSBDTUQuICBJZiB0aGUgZXZhbHVhdGlvbiBvZiBDTUQgZmFpbHMsIGFuZCBGQUlMX0VYUAogIyBpcyBnaXZlbiwgdGhlbiBldmFsdWF0ZSBpdC4KIGZ1bmNfc2hvd19ldmFsICgpCiB7Ci0gICAgbXlfY21kPSIkMSIKLSAgICBteV9mYWlsX2V4cD0iJHsyLTp9IgorICAgICRkZWJ1Z19jbWQKIAotICAgICR7b3B0X3NpbGVudC1mYWxzZX0gfHwgewotICAgICAgZnVuY19xdW90ZV9mb3JfZXhwYW5kICIkbXlfY21kIgotICAgICAgZXZhbCAiZnVuY19lY2hvICRmdW5jX3F1b3RlX2Zvcl9leHBhbmRfcmVzdWx0IgotICAgIH0KKyAgICBfR19jbWQ9JDEKKyAgICBfR19mYWlsX2V4cD0kezItJzonfQogCi0gICAgaWYgJHtvcHRfZHJ5X3J1bi1mYWxzZX07IHRoZW4gOjsgZWxzZQotICAgICAgZXZhbCAiJG15X2NtZCIKLSAgICAgIG15X3N0YXR1cz0kPwotICAgICAgaWYgdGVzdCAiJG15X3N0YXR1cyIgLWVxIDA7IHRoZW4gOjsgZWxzZQotCWV2YWwgIihleGl0ICRteV9zdGF0dXMpOyAkbXlfZmFpbF9leHAiCisgICAgZnVuY19xdW90ZV9mb3JfZXhwYW5kICIkX0dfY21kIgorICAgIGV2YWwgImZ1bmNfbm90cXVpZXQgJGZ1bmNfcXVvdGVfZm9yX2V4cGFuZF9yZXN1bHQiCisKKyAgICAkb3B0X2RyeV9ydW4gfHwgeworICAgICAgZXZhbCAiJF9HX2NtZCIKKyAgICAgIF9HX3N0YXR1cz0kPworICAgICAgaWYgdGVzdCAwIC1uZSAiJF9HX3N0YXR1cyI7IHRoZW4KKwlldmFsICIoZXhpdCAkX0dfc3RhdHVzKTsgJF9HX2ZhaWxfZXhwIgogICAgICAgZmkKLSAgICBmaQorICAgIH0KIH0KIAogCi0jIGZ1bmNfc2hvd19ldmFsX2xvY2FsZSBjbWQgW2ZhaWxfZXhwXQotIyBVbmxlc3Mgb3B0X3NpbGVudCBpcyB0cnVlLCB0aGVuIG91dHB1dCBDTUQuICBUaGVuLCBpZiBvcHRfZHJ5cnVuIGlzCisjIGZ1bmNfc2hvd19ldmFsX2xvY2FsZSBDTUQgW0ZBSUxfRVhQXQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVW5sZXNzIG9wdF9xdWlldCBpcyB0cnVlLCB0aGVuIG91dHB1dCBDTUQuICBUaGVuLCBpZiBvcHRfZHJ5cnVuIGlzCiAjIG5vdCB0cnVlLCBldmFsdWF0ZSBDTUQuICBJZiB0aGUgZXZhbHVhdGlvbiBvZiBDTUQgZmFpbHMsIGFuZCBGQUlMX0VYUAogIyBpcyBnaXZlbiwgdGhlbiBldmFsdWF0ZSBpdC4gIFVzZSB0aGUgc2F2ZWQgbG9jYWxlIGZvciBldmFsdWF0aW9uLgogZnVuY19zaG93X2V2YWxfbG9jYWxlICgpCiB7Ci0gICAgbXlfY21kPSIkMSIKLSAgICBteV9mYWlsX2V4cD0iJHsyLTp9IgorICAgICRkZWJ1Z19jbWQKIAotICAgICR7b3B0X3NpbGVudC1mYWxzZX0gfHwgewotICAgICAgZnVuY19xdW90ZV9mb3JfZXhwYW5kICIkbXlfY21kIgorICAgIF9HX2NtZD0kMQorICAgIF9HX2ZhaWxfZXhwPSR7Mi0nOid9CisKKyAgICAkb3B0X3F1aWV0IHx8IHsKKyAgICAgIGZ1bmNfcXVvdGVfZm9yX2V4cGFuZCAiJF9HX2NtZCIKICAgICAgIGV2YWwgImZ1bmNfZWNobyAkZnVuY19xdW90ZV9mb3JfZXhwYW5kX3Jlc3VsdCIKICAgICB9CiAKLSAgICBpZiAke29wdF9kcnlfcnVuLWZhbHNlfTsgdGhlbiA6OyBlbHNlCi0gICAgICBldmFsICIkbHRfdXNlcl9sb2NhbGUKLQkgICAgJG15X2NtZCIKLSAgICAgIG15X3N0YXR1cz0kPwotICAgICAgZXZhbCAiJGx0X3NhZmVfbG9jYWxlIgotICAgICAgaWYgdGVzdCAiJG15X3N0YXR1cyIgLWVxIDA7IHRoZW4gOjsgZWxzZQotCWV2YWwgIihleGl0ICRteV9zdGF0dXMpOyAkbXlfZmFpbF9leHAiCisgICAgJG9wdF9kcnlfcnVuIHx8IHsKKyAgICAgIGV2YWwgIiRfR191c2VyX2xvY2FsZQorCSAgICAkX0dfY21kIgorICAgICAgX0dfc3RhdHVzPSQ/CisgICAgICBldmFsICIkX0dfc2FmZV9sb2NhbGUiCisgICAgICBpZiB0ZXN0IDAgLW5lICIkX0dfc3RhdHVzIjsgdGhlbgorCWV2YWwgIihleGl0ICRfR19zdGF0dXMpOyAkX0dfZmFpbF9leHAiCiAgICAgICBmaQotICAgIGZpCisgICAgfQogfQogCisKICMgZnVuY190cl9zaAorIyAtLS0tLS0tLS0tCiAjIFR1cm4gJDEgaW50byBhIHN0cmluZyBzdWl0YWJsZSBmb3IgYSBzaGVsbCB2YXJpYWJsZSBuYW1lLgogIyBSZXN1bHQgaXMgc3RvcmVkIGluICRmdW5jX3RyX3NoX3Jlc3VsdC4gIEFsbCBjaGFyYWN0ZXJzCiAjIG5vdCBpbiB0aGUgc2V0IGEtekEtWjAtOV8gYXJlIHJlcGxhY2VkIHdpdGggJ18nLiBGdXJ0aGVyLAogIyBpZiAkMSBiZWdpbnMgd2l0aCBhIGRpZ2l0LCBhICdfJyBpcyBwcmVwZW5kZWQgYXMgd2VsbC4KIGZ1bmNfdHJfc2ggKCkKIHsKLSAgY2FzZSAkMSBpbgotICBbMC05XSogfCAqWyFhLXpBLVowLTlfXSopCi0gICAgZnVuY190cl9zaF9yZXN1bHQ9YCRFQ0hPICIkMSIgfCAkU0VEICdzL15cKFswLTldXCkvX1wxLzsgcy9bXmEtekEtWjAtOV9dL18vZydgCi0gICAgOzsKLSAgKiApCi0gICAgZnVuY190cl9zaF9yZXN1bHQ9JDEKLSAgICA7OwotICBlc2FjCisgICAgJGRlYnVnX2NtZAorCisgICAgY2FzZSAkMSBpbgorICAgIFswLTldKiB8ICpbIWEtekEtWjAtOV9dKikKKyAgICAgIGZ1bmNfdHJfc2hfcmVzdWx0PWAkRUNITyAiJDEiIHwgJFNFRCAtZSAncy9eXChbMC05XVwpL19cMS8nIC1lICdzL1teYS16QS1aMC05X10vXy9nJ2AKKyAgICAgIDs7CisgICAgKiApCisgICAgICBmdW5jX3RyX3NoX3Jlc3VsdD0kMQorICAgICAgOzsKKyAgICBlc2FjCiB9CiAKIAotIyBmdW5jX3ZlcnNpb24KLSMgRWNobyB2ZXJzaW9uIG1lc3NhZ2UgdG8gc3RhbmRhcmQgb3V0cHV0IGFuZCBleGl0LgotZnVuY192ZXJzaW9uICgpCisjIGZ1bmNfdmVyYm9zZSBBUkcuLi4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCBtZXNzYWdlIGluIHZlcmJvc2UgbW9kZSBvbmx5LgorZnVuY192ZXJib3NlICgpCiB7Ci0gICAgJG9wdF9kZWJ1ZworICAgICRkZWJ1Z19jbWQKIAotICAgICRTRUQgLW4gJy8oQykvIWIgZ28KLQk6bW9yZQotCS9cLi8hewotCSAgTgotCSAgcy9cbiMgLyAvCi0JICBiIG1vcmUKLQl9Ci0JOmdvCi0JL14jICckUFJPR1JBTScgKEdOVSAvLC8jIHdhcnJhbnR5OyAvIHsKLSAgICAgICAgcy9eIyAvLwotCXMvXiMgKiQvLwotICAgICAgICBzL1woKEMpXClbIDAtOSwtXSpcKCBbMS05XVswLTldKlwpL1wxXDIvCi0gICAgICAgIHAKLSAgICAgfScgPCAiJHByb2dwYXRoIgotICAgICBleGl0ICQ/CisgICAgJG9wdF92ZXJib3NlICYmIGZ1bmNfZWNobyAiJCoiCisKKyAgICA6CiB9CiAKLSMgZnVuY191c2FnZQotIyBFY2hvIHNob3J0IGhlbHAgbWVzc2FnZSB0byBzdGFuZGFyZCBvdXRwdXQgYW5kIGV4aXQuCi1mdW5jX3VzYWdlICgpCisKKyMgZnVuY193YXJuX2FuZF9jb250aW51ZSBBUkcuLi4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgd2FybmluZyBtZXNzYWdlIHRvIHN0YW5kYXJkIGVycm9yLgorZnVuY193YXJuX2FuZF9jb250aW51ZSAoKQogewotICAgICRvcHRfZGVidWcKKyAgICAkZGVidWdfY21kCiAKLSAgICAkU0VEIC1uICcvXiMgVXNhZ2U6LywvXiMgICouKi0taGVscC8gewotICAgICAgICBzL14jIC8vCi0Jcy9eIyAqJC8vCi0Jcy9cJHByb2duYW1lLyckcHJvZ25hbWUnLwotCXAKLSAgICB9JyA8ICIkcHJvZ3BhdGgiCi0gICAgZWNobwotICAgICRFQ0hPICJydW4gXGAkcHJvZ25hbWUgLS1oZWxwIHwgbW9yZScgZm9yIGZ1bGwgdXNhZ2UiCi0gICAgZXhpdCAkPworICAgICRyZXF1aXJlX3Rlcm1fY29sb3JzCisKKyAgICBmdW5jX2VjaG9faW5maXhfMSAiJHt0Y19yZWR9d2FybmluZyR0Y19yZXNldCIgIiQqIiA+JjIKIH0KIAotIyBmdW5jX2hlbHAgW05PRVhJVF0KLSMgRWNobyBsb25nIGhlbHAgbWVzc2FnZSB0byBzdGFuZGFyZCBvdXRwdXQgYW5kIGV4aXQsCi0jIHVubGVzcyAnbm9leGl0JyBpcyBwYXNzZWQgYXMgYXJndW1lbnQuCisKKyMgZnVuY193YXJuaW5nIENBVEVHT1JZIEFSRy4uLgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIHdhcm5pbmcgbWVzc2FnZSB0byBzdGFuZGFyZCBlcnJvci4gV2FybmluZworIyBtZXNzYWdlcyBjYW4gYmUgZmlsdGVyZWQgYWNjb3JkaW5nIHRvIENBVEVHT1JZLCB3aGVyZSB0aGlzIGZ1bmN0aW9uCisjIGVsaWRlcyBtZXNzYWdlcyB3aGVyZSBDQVRFR09SWSBpcyBub3QgbGlzdGVkIGluIHRoZSBnbG9iYWwgdmFyaWFibGUKKyMgJ29wdF93YXJuaW5nX3R5cGVzJy4KK2Z1bmNfd2FybmluZyAoKQoreworICAgICRkZWJ1Z19jbWQKKworICAgICMgQ0FURUdPUlkgbXVzdCBiZSBpbiB0aGUgd2FybmluZ19jYXRlZ29yaWVzIGxpc3QhCisgICAgY2FzZSAiICR3YXJuaW5nX2NhdGVnb3JpZXMgIiBpbgorICAgICAgKiIgJDEgIiopIDs7CisgICAgICAqKSBmdW5jX2ludGVybmFsX2Vycm9yICJpbnZhbGlkIHdhcm5pbmcgY2F0ZWdvcnkgJyQxJyIgOzsKKyAgICBlc2FjCisKKyAgICBfR19jYXRlZ29yeT0kMQorICAgIHNoaWZ0CisKKyAgICBjYXNlICIgJG9wdF93YXJuaW5nX3R5cGVzICIgaW4KKyAgICAgICoiICRfR19jYXRlZ29yeSAiKikgJHdhcm5pbmdfZnVuYyAkezErIiRAIn0gOzsKKyAgICBlc2FjCit9CisKKworIyBmdW5jX3NvcnRfdmVyIFZFUjEgVkVSMgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyAnc29ydCAtVicgaXMgbm90IGdlbmVyYWxseSBhdmFpbGFibGUuCisjIE5vdGUgdGhpcyBkZXZpYXRlcyBmcm9tIHRoZSB2ZXJzaW9uIGNvbXBhcmlzb24gaW4gYXV0b21ha2UKKyMgaW4gdGhhdCBpdCB0cmVhdHMgMS41IDwgMS41LjAsIGFuZCB0cmVhdHMgMS40LjRhIDwgMS40LXAzYQorIyBidXQgdGhpcyBzaG91bGQgc3VmZmljZSBhcyB3ZSB3b24ndCBiZSBzcGVjaWZ5aW5nIG9sZAorIyB2ZXJzaW9uIGZvcm1hdHMgb3IgcmVkdW5kYW50IHRyYWlsaW5nIC4wIGluIGJvb3RzdHJhcC5jb25mLgorIyBJZiB3ZSBkaWQgd2FudCBmdWxsIGNvbXBhdGliaWxpdHkgdGhlbiB3ZSBzaG91bGQgcHJvYmFibHkKKyMgdXNlIG00X3ZlcnNpb25fY29tcGFyZSBmcm9tIGF1dG9jb25mLgorZnVuY19zb3J0X3ZlciAoKQoreworICAgICRkZWJ1Z19jbWQKKworICAgIHZlcjE9JDEKKyAgICB2ZXIyPSQyCisKKyAgICAjIFNwbGl0IG9uICcuJyBhbmQgY29tcGFyZSBlYWNoIGNvbXBvbmVudC4KKyAgICBpPTEKKyAgICB3aGlsZSA6OyBkbworICAgICAgcDE9YGVjaG8gIiR2ZXIxIiB8Y3V0IC1kLiAtZiRpYAorICAgICAgcDI9YGVjaG8gIiR2ZXIyIiB8Y3V0IC1kLiAtZiRpYAorICAgICAgaWYgdGVzdCAhICIkcDEiOyB0aGVuCisgICAgICAgIGVjaG8gIiQxICQyIgorICAgICAgICBicmVhaworICAgICAgZWxpZiB0ZXN0ICEgIiRwMiI7IHRoZW4KKyAgICAgICAgZWNobyAiJDIgJDEiCisgICAgICAgIGJyZWFrCisgICAgICBlbGlmIHRlc3QgISAiJHAxIiA9ICIkcDIiOyB0aGVuCisgICAgICAgIGlmIHRlc3QgIiRwMSIgLWd0ICIkcDIiIDI+L2Rldi9udWxsOyB0aGVuICMgbnVtZXJpYyBjb21wYXJpc29uCisgICAgICAgICAgZWNobyAiJDIgJDEiCisgICAgICAgIGVsaWYgdGVzdCAiJHAyIiAtZ3QgIiRwMSIgMj4vZGV2L251bGw7IHRoZW4gIyBudW1lcmljIGNvbXBhcmlzb24KKyAgICAgICAgICBlY2hvICIkMSAkMiIKKyAgICAgICAgZWxzZSAjIG51bWVyaWMsIHRoZW4gbGV4aWNvZ3JhcGhpYyBjb21wYXJpc29uCisgICAgICAgICAgbHA9YHByaW50ZiAiJHAxXG4kcDJcbiIgfHNvcnQgLW4gfHRhaWwgLW4xYAorICAgICAgICAgIGlmIHRlc3QgIiRscCIgPSAiJHAyIjsgdGhlbgorICAgICAgICAgICAgZWNobyAiJDEgJDIiCisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgZWNobyAiJDIgJDEiCisgICAgICAgICAgZmkKKyAgICAgICAgZmkKKyAgICAgICAgYnJlYWsKKyAgICAgIGZpCisgICAgICBpPWBleHByICRpICsgMWAKKyAgICBkb25lCit9CisKKworIyBMb2NhbCB2YXJpYWJsZXM6CisjIG1vZGU6IHNoZWxsLXNjcmlwdAorIyBzaC1pbmRlbnRhdGlvbjogMgorIyBldmFsOiAoYWRkLWhvb2sgJ3dyaXRlLWZpbGUtaG9va3MgJ3RpbWUtc3RhbXApCisjIHRpbWUtc3RhbXAtcGF0dGVybjogIjEwL3NjcmlwdHZlcnNpb249JTp5LSUwMm0tJTAyZC4lMDJIOyAjIFVUQyIKKyMgdGltZS1zdGFtcC10aW1lLXpvbmU6ICJVVEMiCisjIEVuZDoKKyMhIC9iaW4vc2gKKworIyBTZXQgYSB2ZXJzaW9uIHN0cmluZyBmb3IgdGhpcyBzY3JpcHQuCitzY3JpcHR2ZXJzaW9uPTIwMTItMTAtMjEuMTE7ICMgVVRDCisKKyMgQSBwb3J0YWJsZSwgcGx1Z2dhYmxlIG9wdGlvbiBwYXJzZXIgZm9yIEJvdXJuZSBzaGVsbC4KKyMgV3JpdHRlbiBieSBHYXJ5IFYuIFZhdWdoYW4sIDIwMTAKKworIyBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyBzZWUgdGhlIHNvdXJjZSBmb3IgY29weWluZyBjb25kaXRpb25zLiAgVGhlcmUgaXMgTk8KKyMgd2FycmFudHk7IG5vdCBldmVuIGZvciBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisjIFBsZWFzZSByZXBvcnQgYnVncyBvciBwcm9wb3NlIHBhdGNoZXMgdG8gZ2FyeUBnbnUub3JnLgorCisKKyMjIC0tLS0tLSAjIworIyMgVXNhZ2UuICMjCisjIyAtLS0tLS0gIyMKKworIyBUaGlzIGZpbGUgaXMgYSBsaWJyYXJ5IGZvciBwYXJzaW5nIG9wdGlvbnMgaW4geW91ciBzaGVsbCBzY3JpcHRzIGFsb25nCisjIHdpdGggYXNzb3J0ZWQgb3RoZXIgdXNlZnVsIHN1cHBvcnRpbmcgZmVhdHVyZXMgdGhhdCB5b3UgY2FuIG1ha2UgdXNlCisjIG9mIHRvby4KKyMKKyMgRm9yIHRoZSBzaW1wbGVzdCBzY3JpcHRzIHlvdSBtaWdodCBuZWVkIG9ubHk6CisjCisjICAgIyEvYmluL3NoCisjICAgLiByZWxhdGl2ZS9wYXRoL3RvL2Z1bmNsaWIuc2gKKyMgICAuIHJlbGF0aXZlL3BhdGgvdG8vb3B0aW9ucy1wYXJzZXIKKyMgICBzY3JpcHR2ZXJzaW9uPTEuMAorIyAgIGZ1bmNfb3B0aW9ucyAkezErIiRAIn0KKyMgICBldmFsIHNldCBkdW1teSAiJGZ1bmNfb3B0aW9uc19yZXN1bHQiOyBzaGlmdAorIyAgIC4uLnJlc3Qgb2YgeW91ciBzY3JpcHQuLi4KKyMKKyMgSW4gb3JkZXIgZm9yIHRoZSAnLS12ZXJzaW9uJyBvcHRpb24gdG8gd29yaywgeW91IHdpbGwgbmVlZCB0byBoYXZlIGEKKyMgc3VpdGFibHkgZm9ybWF0dGVkIGNvbW1lbnQgbGlrZSB0aGUgb25lIGF0IHRoZSB0b3Agb2YgdGhpcyBmaWxlCisjIHN0YXJ0aW5nIHdpdGggJyMgV3JpdHRlbiBieSAnIGFuZCBlbmRpbmcgd2l0aCAnIyB3YXJyYW50eTsgJy4KKyMKKyMgRm9yICctaCcgYW5kICctLWhlbHAnIHRvIHdvcmssIHlvdSB3aWxsIGFsc28gbmVlZCBhIG9uZSBsaW5lCisjIGRlc2NyaXB0aW9uIG9mIHlvdXIgc2NyaXB0J3MgcHVycG9zZSBpbiBhIGNvbW1lbnQgZGlyZWN0bHkgYWJvdmUgdGhlCisjICcjIFdyaXR0ZW4gYnkgJyBsaW5lLCBsaWtlIHRoZSBvbmUgYXQgdGhlIHRvcCBvZiB0aGlzIGZpbGUuCisjCisjIFRoZSBkZWZhdWx0IG9wdGlvbnMgYWxzbyBzdXBwb3J0ICctLWRlYnVnJywgd2hpY2ggd2lsbCB0dXJuIG9uIHNoZWxsCisjIGV4ZWN1dGlvbiB0cmFjaW5nIChzZWUgdGhlIGNvbW1lbnQgYWJvdmUgZGVidWdfY21kIGJlbG93IGZvciBhbm90aGVyCisjIHVzZSksIGFuZCAnLS12ZXJib3NlJyBhbmQgdGhlIGZ1bmNfdmVyYm9zZSBmdW5jdGlvbiB0byBhbGxvdyB5b3VyIHNjcmlwdAorIyB0byBkaXNwbGF5IHZlcmJvc2UgbWVzc2FnZXMgb25seSB3aGVuIHlvdXIgdXNlciBoYXMgc3BlY2lmaWVkCisjICctLXZlcmJvc2UnLgorIworIyBBZnRlciBzb3VyY2luZyB0aGlzIGZpbGUsIHlvdSBjYW4gcGx1ZyBwcm9jZXNzaW5nIGZvciBhZGRpdGlvbmFsCisjIG9wdGlvbnMgYnkgYW1lbmRpbmcgdGhlIHZhcmlhYmxlcyBmcm9tIHRoZSAnQ29uZmlndXJhdGlvbicgc2VjdGlvbgorIyBiZWxvdywgYW5kIGZvbGxvd2luZyB0aGUgaW5zdHJ1Y3Rpb25zIGluIHRoZSAnT3B0aW9uIHBhcnNpbmcnCisjIHNlY3Rpb24gZnVydGhlciBkb3duLgorCisjIyAtLS0tLS0tLS0tLS0tLSAjIworIyMgQ29uZmlndXJhdGlvbi4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tICMjCisKKyMgWW91IHNob3VsZCBvdmVycmlkZSB0aGVzZSB2YXJpYWJsZXMgaW4geW91ciBzY3JpcHQgYWZ0ZXIgc291cmNpbmcgdGhpcworIyBmaWxlIHNvIHRoYXQgdGhleSByZWZsZWN0IHRoZSBjdXN0b21pc2F0aW9ucyB5b3UgaGF2ZSBhZGRlZCB0byB0aGUKKyMgb3B0aW9uIHBhcnNlci4KKworIyBUaGUgdXNhZ2UgbGluZSBmb3Igb3B0aW9uIHBhcnNpbmcgZXJyb3JzIGFuZCB0aGUgc3RhcnQgb2YgJy1oJyBhbmQKKyMgJy0taGVscCcgb3V0cHV0IG1lc3NhZ2VzLiBZb3UgY2FuIGVtYmVkIHNoZWxsIHZhcmlhYmxlcyBmb3IgZGVsYXllZAorIyBleHBhbnNpb24gYXQgdGhlIHRpbWUgdGhlIG1lc3NhZ2UgaXMgZGlzcGxheWVkLCBidXQgeW91IHdpbGwgbmVlZCB0bworIyBxdW90ZSBvdGhlciBzaGVsbCBtZXRhLWNoYXJhY3RlcnMgY2FyZWZ1bGx5IHRvIHByZXZlbnQgdGhlbSBiZWluZworIyBleHBhbmRlZCB3aGVuIHRoZSBjb250ZW50cyBhcmUgZXZhbGVkLgordXNhZ2U9JyRwcm9ncGF0aCBbT1BUSU9OXS4uLicKKworIyBTaG9ydCBoZWxwIG1lc3NhZ2UgaW4gcmVzcG9uc2UgdG8gJy1oJyBhbmQgJy0taGVscCcuICBBZGQgdG8gdGhpcyBvcgorIyBvdmVycmlkZSBpdCBhZnRlciBzb3VyY2luZyB0aGlzIGxpYnJhcnkgdG8gcmVmbGVjdCB0aGUgZnVsbCBzZXQgb2YKKyMgb3B0aW9ucyB5b3VyIHNjcmlwdCBhY2NlcHRzLgordXNhZ2VfbWVzc2FnZT0iXAorICAgICAgIC0tZGVidWcgICAgICAgIGVuYWJsZSB2ZXJib3NlIHNoZWxsIHRyYWNpbmcKKyAgIC1XLCAtLXdhcm5pbmdzPUNBVEVHT1JZCisgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0IHRoZSB3YXJuaW5ncyBmYWxsaW5nIGluIENBVEVHT1JZIFthbGxdCisgICAtdiwgLS12ZXJib3NlICAgICAgdmVyYm9zZWx5IHJlcG9ydCBwcm9jZXNzaW5nCisgICAgICAgLS12ZXJzaW9uICAgICAgcHJpbnQgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdAorICAgLWgsIC0taGVscCAgICAgICAgIHByaW50IHNob3J0IG9yIGxvbmcgaGVscCBtZXNzYWdlIGFuZCBleGl0CisiCisKKyMgQWRkaXRpb25hbCB0ZXh0IGFwcGVuZGVkIHRvICd1c2FnZV9tZXNzYWdlJyBpbiByZXNwb25zZSB0byAnLS1oZWxwJy4KK2xvbmdfaGVscF9tZXNzYWdlPSIKK1dhcm5pbmcgY2F0ZWdvcmllcyBpbmNsdWRlOgorICAgICAgICdhbGwnICAgICAgICAgIHNob3cgYWxsIHdhcm5pbmdzCisgICAgICAgJ25vbmUnICAgICAgICAgdHVybiBvZmYgYWxsIHRoZSB3YXJuaW5ncworICAgICAgICdlcnJvcicgICAgICAgIHdhcm5pbmdzIGFyZSB0cmVhdGVkIGFzIGZhdGFsIGVycm9ycyIKKworIyBIZWxwIG1lc3NhZ2UgcHJpbnRlZCBiZWZvcmUgZmF0YWwgb3B0aW9uIHBhcnNpbmcgZXJyb3JzLgorZmF0YWxfaGVscD0iVHJ5ICdcJHByb2duYW1lIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorCisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgSG9vayBmdW5jdGlvbiBtYW5hZ2VtZW50LiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisjIFRoaXMgc2VjdGlvbiBjb250YWlucyBmdW5jdGlvbnMgZm9yIGFkZGluZywgcmVtb3ZpbmcsIGFuZCBydW5uaW5nIGhvb2tzCisjIHRvIHRoZSBtYWluIGNvZGUuICBBIGhvb2sgaXMganVzdCBhIG5hbWVkIGxpc3Qgb2Ygb2YgZnVuY3Rpb24sIHRoYXQgY2FuCisjIGJlIHJ1biBpbiBvcmRlciBsYXRlciBvbi4KKworIyBmdW5jX2hvb2thYmxlIEZVTkNfTkFNRQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBEZWNsYXJlIHRoYXQgRlVOQ19OQU1FIHdpbGwgcnVuIGhvb2tzIGFkZGVkIHdpdGgKKyMgJ2Z1bmNfYWRkX2hvb2sgRlVOQ19OQU1FIC4uLicuCitmdW5jX2hvb2thYmxlICgpCit7CisgICAgJGRlYnVnX2NtZAorCisgICAgZnVuY19hcHBlbmQgaG9va2FibGVfZm5zICIgJDEiCit9CisKKworIyBmdW5jX2FkZF9ob29rIEZVTkNfTkFNRSBIT09LX0ZVTkMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFJlcXVlc3QgdGhhdCBGVU5DX05BTUUgY2FsbCBIT09LX0ZVTkMgYmVmb3JlIGl0IHJldHVybnMuICBGVU5DX05BTUUgbXVzdAorIyBmaXJzdCBoYXZlIGJlZW4gZGVjbGFyZWQgImhvb2thYmxlIiBieSBhIGNhbGwgdG8gJ2Z1bmNfaG9va2FibGUnLgorZnVuY19hZGRfaG9vayAoKQoreworICAgICRkZWJ1Z19jbWQKKworICAgIGNhc2UgIiAkaG9va2FibGVfZm5zICIgaW4KKyAgICAgICoiICQxICIqKSA7OworICAgICAgKikgZnVuY19mYXRhbF9lcnJvciAiJyQxJyBkb2VzIG5vdCBhY2NlcHQgaG9vayBmdW5jdGlvbnMuIiA7OworICAgIGVzYWMKKworICAgIGV2YWwgZnVuY19hcHBlbmQgJHsxfV9ob29rcyAnIiAkMiInCit9CisKKworIyBmdW5jX3JlbW92ZV9ob29rIEZVTkNfTkFNRSBIT09LX0ZVTkMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFJlbW92ZSBIT09LX0ZVTkMgZnJvbSB0aGUgbGlzdCBvZiBmdW5jdGlvbnMgY2FsbGVkIGJ5IEZVTkNfTkFNRS4KK2Z1bmNfcmVtb3ZlX2hvb2sgKCkKK3sKKyAgICAkZGVidWdfY21kCisKKyAgICBldmFsICR7MX1faG9va3M9J2AkYnNfZWNobyAiXCQnJDEnX2hvb2tzIiB8JFNFRCAic3wgJyQyJ3x8ImAnCit9CisKKworIyBmdW5jX3J1bl9ob29rcyBGVU5DX05BTUUgW0FSR10uLi4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFJ1biBhbGwgaG9vayBmdW5jdGlvbnMgcmVnaXN0ZXJlZCB0byBGVU5DX05BTUUuCisjIEl0IGlzIGFzc3VtZWQgdGhhdCB0aGUgbGlzdCBvZiBob29rIGZ1bmN0aW9ucyBjb250YWlucyBub3RoaW5nIG1vcmUKKyMgdGhhbiBhIHdoaXRlc3BhY2UtZGVsaW1pdGVkIGxpc3Qgb2YgbGVnYWwgc2hlbGwgZnVuY3Rpb24gbmFtZXMsIGFuZAorIyBubyBlZmZvcnQgaXMgd2FzdGVkIHRyeWluZyB0byBjYXRjaCBzaGVsbCBtZXRhLWNoYXJhY3RlcnMgb3IgcHJlc2VydmUKKyMgd2hpdGVzcGFjZS4KK2Z1bmNfcnVuX2hvb2tzICgpCit7CisgICAgJGRlYnVnX2NtZAorCisgICAgY2FzZSAiICRob29rYWJsZV9mbnMgIiBpbgorICAgICAgKiIgJDEgIiopIDs7CisgICAgICAqKSBmdW5jX2ZhdGFsX2Vycm9yICInJDEnIGRvZXMgbm90IHN1cHBvcnQgaG9vayBmdW5jdGlvbnMuIiA7OworICAgIGVzYWMKKworICAgIGV2YWwgX0dfaG9va19mbnM9XCQkMV9ob29rczsgc2hpZnQKKworICAgIGZvciBfR19ob29rIGluICRfR19ob29rX2ZuczsgZG8KKyAgICAgIGV2YWwgJF9HX2hvb2sgJyIkQCInCisKKyAgICAgICMgc3RvcmUgcmV0dXJuZWQgb3B0aW9ucyBsaXN0IGJhY2sgaW50byBwb3NpdGlvbmFsCisgICAgICAjIHBhcmFtZXRlcnMgZm9yIG5leHQgJ2NtZCcgZXhlY3V0aW9uLgorICAgICAgZXZhbCBfR19ob29rX3Jlc3VsdD1cJCR7X0dfaG9va31fcmVzdWx0CisgICAgICBldmFsIHNldCBkdW1teSAiJF9HX2hvb2tfcmVzdWx0Ijsgc2hpZnQKKyAgICBkb25lCisKKyAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICR7MSsiJEAifQorICAgIGZ1bmNfcnVuX2hvb2tzX3Jlc3VsdD0kZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQKK30KKworCisKKyMjIC0tLS0tLS0tLS0tLS0tLSAjIworIyMgT3B0aW9uIHBhcnNpbmcuICMjCisjIyAtLS0tLS0tLS0tLS0tLS0gIyMKKworIyBJbiBvcmRlciB0byBhZGQgeW91ciBvd24gb3B0aW9uIHBhcnNpbmcgaG9va3MsIHlvdSBtdXN0IGFjY2VwdCB0aGUKKyMgZnVsbCBwb3NpdGlvbmFsIHBhcmFtZXRlciBsaXN0IGluIHlvdXIgaG9vayBmdW5jdGlvbiwgcmVtb3ZlIGFueQorIyBvcHRpb25zIHRoYXQgeW91IGFjdGlvbiwgYW5kIHRoZW4gcGFzcyBiYWNrIHRoZSByZW1haW5pbmcgdW5wcm9jZXNzZWQKKyMgb3B0aW9ucyBpbiAnPGhvb2tlZF9mdW5jdGlvbl9uYW1lPl9yZXN1bHQnLCBlc2NhcGVkIHN1aXRhYmx5IGZvcgorIyAnZXZhbCcuICBMaWtlIHRoaXM6CisjCisjICAgIG15X29wdGlvbnNfcHJlcCAoKQorIyAgICB7CisjICAgICAgICAkZGVidWdfY21kCisjCisjICAgICAgICAjIEV4dGVuZCB0aGUgZXhpc3RpbmcgdXNhZ2UgbWVzc2FnZS4KKyMgICAgICAgIHVzYWdlX21lc3NhZ2U9JHVzYWdlX21lc3NhZ2UnCisjICAgICAgLXMsIC0tc2lsZW50ICAgICAgIGRvbidcJyd0IHByaW50IGluZm9ybWF0aW9uYWwgbWVzc2FnZXMKKyMgICAgJworIworIyAgICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAkezErIiRAIn0KKyMgICAgICAgIG15X29wdGlvbnNfcHJlcF9yZXN1bHQ9JGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0CisjICAgIH0KKyMgICAgZnVuY19hZGRfaG9vayBmdW5jX29wdGlvbnNfcHJlcCBteV9vcHRpb25zX3ByZXAKKyMKKyMKKyMgICAgbXlfc2lsZW50X29wdGlvbiAoKQorIyAgICB7CisjICAgICAgICAkZGVidWdfY21kCisjCisjICAgICAgICAjIE5vdGUgdGhhdCBmb3IgZWZmaWNpZW5jeSwgd2UgcGFyc2UgYXMgbWFueSBvcHRpb25zIGFzIHdlIGNhbgorIyAgICAgICAgIyByZWNvZ25pc2UgaW4gYSBsb29wIGJlZm9yZSBwYXNzaW5nIHRoZSByZW1haW5kZXIgYmFjayB0byB0aGUKKyMgICAgICAgICMgY2FsbGVyIG9uIHRoZSBmaXJzdCB1bnJlY29nbmlzZWQgYXJndW1lbnQgd2UgZW5jb3VudGVyLgorIyAgICAgICAgd2hpbGUgdGVzdCAkIyAtZ3QgMDsgZG8KKyMgICAgICAgICAgb3B0PSQxOyBzaGlmdAorIyAgICAgICAgICBjYXNlICRvcHQgaW4KKyMgICAgICAgICAgICAtLXNpbGVudHwtcykgb3B0X3NpbGVudD06IDs7CisjICAgICAgICAgICAgIyBTZXBhcmF0ZSBub24tYXJndW1lbnQgc2hvcnQgb3B0aW9uczoKKyMgICAgICAgICAgICAtcyopICAgICAgICAgZnVuY19zcGxpdF9zaG9ydF9vcHQgIiRfR19vcHQiCisjICAgICAgICAgICAgICAgICAgICAgICAgIHNldCBkdW1teSAiJGZ1bmNfc3BsaXRfc2hvcnRfb3B0X25hbWUiIFwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItJGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZyIgJHsxKyIkQCJ9CisjICAgICAgICAgICAgICAgICAgICAgICAgIHNoaWZ0CisjICAgICAgICAgICAgICAgICAgICAgICAgIDs7CisjICAgICAgICAgICAgKikgICAgICAgICAgICBzZXQgZHVtbXkgIiRfR19vcHQiICIkKiI7IHNoaWZ0OyBicmVhayA7OworIyAgICAgICAgICBlc2FjCisjICAgICAgICBkb25lCisjCisjICAgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICR7MSsiJEAifQorIyAgICAgICAgbXlfc2lsZW50X29wdGlvbl9yZXN1bHQ9JGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0CisjICAgIH0KKyMgICAgZnVuY19hZGRfaG9vayBmdW5jX3BhcnNlX29wdGlvbnMgbXlfc2lsZW50X29wdGlvbgorIworIworIyAgICBteV9vcHRpb25fdmFsaWRhdGlvbiAoKQorIyAgICB7CisjICAgICAgICAkZGVidWdfY21kCisjCisjICAgICAgICAkb3B0X3NpbGVudCAmJiAkb3B0X3ZlcmJvc2UgJiYgZnVuY19mYXRhbF9oZWxwICJcCisjICAgICctLXNpbGVudCcgYW5kICctLXZlcmJvc2UnIG9wdGlvbnMgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4iCisjCisjICAgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICR7MSsiJEAifQorIyAgICAgICAgbXlfb3B0aW9uX3ZhbGlkYXRpb25fcmVzdWx0PSRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdAorIyAgICB9CisjICAgIGZ1bmNfYWRkX2hvb2sgZnVuY192YWxpZGF0ZV9vcHRpb25zIG15X29wdGlvbl92YWxpZGF0aW9uCisjCisjIFlvdSdsbCBhbHNlIG5lZWQgdG8gbWFudWFsbHkgYW1lbmQgJHVzYWdlX21lc3NhZ2UgdG8gcmVmbGVjdCB0aGUgZXh0cmEKKyMgb3B0aW9ucyB5b3UgcGFyc2UuICBJdCdzIHByZWZlcmFibGUgdG8gYXBwZW5kIGlmIHlvdSBjYW4sIHNvIHRoYXQKKyMgbXVsdGlwbGUgb3B0aW9uIHBhcnNpbmcgaG9va3MgY2FuIGJlIGFkZGVkIHNhZmVseS4KKworCisjIGZ1bmNfb3B0aW9ucyBbQVJHXS4uLgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQWxsIHRoZSBmdW5jdGlvbnMgY2FsbGVkIGluc2lkZSBmdW5jX29wdGlvbnMgYXJlIGhvb2thYmxlLiBTZWUgdGhlCisjIGluZGl2aWR1YWwgaW1wbGVtZW50YXRpb25zIGZvciBkZXRhaWxzLgorZnVuY19ob29rYWJsZSBmdW5jX29wdGlvbnMKK2Z1bmNfb3B0aW9ucyAoKQoreworICAgICRkZWJ1Z19jbWQKKworICAgIGZ1bmNfb3B0aW9uc19wcmVwICR7MSsiJEAifQorICAgIGV2YWwgZnVuY19wYXJzZV9vcHRpb25zIFwKKyAgICAgICAgJHtmdW5jX29wdGlvbnNfcHJlcF9yZXN1bHQrIiRmdW5jX29wdGlvbnNfcHJlcF9yZXN1bHQifQorICAgIGV2YWwgZnVuY192YWxpZGF0ZV9vcHRpb25zIFwKKyAgICAgICAgJHtmdW5jX3BhcnNlX29wdGlvbnNfcmVzdWx0KyIkZnVuY19wYXJzZV9vcHRpb25zX3Jlc3VsdCJ9CisKKyAgICBldmFsIGZ1bmNfcnVuX2hvb2tzIGZ1bmNfb3B0aW9ucyBcCisgICAgICAgICR7ZnVuY192YWxpZGF0ZV9vcHRpb25zX3Jlc3VsdCsiJGZ1bmNfdmFsaWRhdGVfb3B0aW9uc19yZXN1bHQifQorCisgICAgIyBzYXZlIG1vZGlmaWVkIHBvc2l0aW9uYWwgcGFyYW1ldGVycyBmb3IgY2FsbGVyCisgICAgZnVuY19vcHRpb25zX3Jlc3VsdD0kZnVuY19ydW5faG9va3NfcmVzdWx0Cit9CisKKworIyBmdW5jX29wdGlvbnNfcHJlcCBbQVJHXS4uLgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBBbGwgaW5pdGlhbGlzYXRpb25zIHJlcXVpcmVkIGJlZm9yZSBzdGFydGluZyB0aGUgb3B0aW9uIHBhcnNlIGxvb3AuCisjIE5vdGUgdGhhdCB3aGVuIGNhbGxpbmcgaG9vayBmdW5jdGlvbnMsIHdlIHBhc3MgdGhyb3VnaCB0aGUgbGlzdCBvZgorIyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMuICBJZiBhIGhvb2sgZnVuY3Rpb24gbW9kaWZpZXMgdGhhdCBsaXN0LCBhbmQKKyMgbmVlZHMgdG8gcHJvcG9nYXRlIHRoYXQgYmFjayB0byByZXN0IG9mIHRoaXMgc2NyaXB0LCB0aGVuIHRoZSBjb21wbGV0ZQorIyBtb2RpZmllZCBsaXN0IG11c3QgYmUgcHV0IGluICdmdW5jX3J1bl9ob29rc19yZXN1bHQnIGJlZm9yZQorIyByZXR1cm5pbmcuCitmdW5jX2hvb2thYmxlIGZ1bmNfb3B0aW9uc19wcmVwCitmdW5jX29wdGlvbnNfcHJlcCAoKQoreworICAgICRkZWJ1Z19jbWQKKworICAgICMgT3B0aW9uIGRlZmF1bHRzOgorICAgIG9wdF92ZXJib3NlPWZhbHNlCisgICAgb3B0X3dhcm5pbmdfdHlwZXM9CisKKyAgICBmdW5jX3J1bl9ob29rcyBmdW5jX29wdGlvbnNfcHJlcCAkezErIiRAIn0KKworICAgICMgc2F2ZSBtb2RpZmllZCBwb3NpdGlvbmFsIHBhcmFtZXRlcnMgZm9yIGNhbGxlcgorICAgIGZ1bmNfb3B0aW9uc19wcmVwX3Jlc3VsdD0kZnVuY19ydW5faG9va3NfcmVzdWx0Cit9CisKKworIyBmdW5jX3BhcnNlX29wdGlvbnMgW0FSR10uLi4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRoZSBtYWluIG9wdGlvbiBwYXJzaW5nIGxvb3AuCitmdW5jX2hvb2thYmxlIGZ1bmNfcGFyc2Vfb3B0aW9ucworZnVuY19wYXJzZV9vcHRpb25zICgpCit7CisgICAgJGRlYnVnX2NtZAorCisgICAgZnVuY19wYXJzZV9vcHRpb25zX3Jlc3VsdD0KKworICAgICMgdGhpcyBqdXN0IGVhc2VzIGV4aXQgaGFuZGxpbmcKKyAgICB3aGlsZSB0ZXN0ICQjIC1ndCAwOyBkbworICAgICAgIyBEZWZlciB0byBob29rIGZ1bmN0aW9ucyBmb3IgaW5pdGlhbCBvcHRpb24gcGFyc2luZywgc28gdGhleQorICAgICAgIyBnZXQgcHJpb3JpdHkgaW4gdGhlIGV2ZW50IG9mIHJldXNpbmcgYW4gb3B0aW9uIG5hbWUuCisgICAgICBmdW5jX3J1bl9ob29rcyBmdW5jX3BhcnNlX29wdGlvbnMgJHsxKyIkQCJ9CisKKyAgICAgICMgQWRqdXN0IGZ1bmNfcGFyc2Vfb3B0aW9ucyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMgdG8gbWF0Y2gKKyAgICAgIGV2YWwgc2V0IGR1bW15ICIkZnVuY19ydW5faG9va3NfcmVzdWx0Ijsgc2hpZnQKKworICAgICAgIyBCcmVhayBvdXQgb2YgdGhlIGxvb3AgaWYgd2UgYWxyZWFkeSBwYXJzZWQgZXZlcnkgb3B0aW9uLgorICAgICAgdGVzdCAkIyAtZ3QgMCB8fCBicmVhaworCisgICAgICBfR19vcHQ9JDEKKyAgICAgIHNoaWZ0CisgICAgICBjYXNlICRfR19vcHQgaW4KKyAgICAgICAgLS1kZWJ1Z3wteCkgICBkZWJ1Z19jbWQ9J3NldCAteCcKKyAgICAgICAgICAgICAgICAgICAgICBmdW5jX2VjaG8gImVuYWJsaW5nIHNoZWxsIHRyYWNlIG1vZGUiCisgICAgICAgICAgICAgICAgICAgICAgJGRlYnVnX2NtZAorICAgICAgICAgICAgICAgICAgICAgIDs7CisKKyAgICAgICAgLS1uby13YXJuaW5nc3wtLW5vLXdhcm5pbmd8LS1uby13YXJuKQorICAgICAgICAgICAgICAgICAgICAgIHNldCBkdW1teSAtLXdhcm5pbmdzIG5vbmUgJHsxKyIkQCJ9CisgICAgICAgICAgICAgICAgICAgICAgc2hpZnQKKwkJICAgICAgOzsKKworICAgICAgICAtLXdhcm5pbmdzfC0td2FybmluZ3wtVykKKyAgICAgICAgICAgICAgICAgICAgICB0ZXN0ICQjID0gMCAmJiBmdW5jX21pc3NpbmdfYXJnICRfR19vcHQgJiYgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlICIgJHdhcm5pbmdfY2F0ZWdvcmllcyAkMSIgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICoiICQxICIqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAjIHRyYWlsaW5nIHNwYWNlIHByZXZlbnRzIG1hdGNoaW5nIGxhc3QgJDEgYWJvdmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY19hcHBlbmRfdW5pcSBvcHRfd2FybmluZ190eXBlcyAiICQxIgorICAgICAgICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgICAgICAgKmFsbCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0X3dhcm5pbmdfdHlwZXM9JHdhcm5pbmdfY2F0ZWdvcmllcworICAgICAgICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgICAgICAgKm5vbmUpCisgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdF93YXJuaW5nX3R5cGVzPW5vbmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ19mdW5jPToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICplcnJvcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0X3dhcm5pbmdfdHlwZXM9JHdhcm5pbmdfY2F0ZWdvcmllcworICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nX2Z1bmM9ZnVuY19mYXRhbF9lcnJvcgorICAgICAgICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgICAgICAgKikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY19mYXRhbF9lcnJvciBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bnN1cHBvcnRlZCB3YXJuaW5nIGNhdGVnb3J5OiAnJDEnIgorICAgICAgICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgICAgICAgICBzaGlmdAorICAgICAgICAgICAgICAgICAgICAgIDs7CisKKyAgICAgICAgLS12ZXJib3NlfC12KSBvcHRfdmVyYm9zZT06IDs7CisgICAgICAgIC0tdmVyc2lvbikgICAgZnVuY192ZXJzaW9uIDs7CisgICAgICAgIC1cP3wtaCkgICAgICAgZnVuY191c2FnZSA7OworICAgICAgICAtLWhlbHApICAgICAgIGZ1bmNfaGVscCA7OworCisJIyBTZXBhcmF0ZSBvcHRhcmdzIHRvIGxvbmcgb3B0aW9ucyAocGx1Z2lucyBtYXkgbmVlZCB0aGlzKToKKwktLSo9KikgICAgICAgIGZ1bmNfc3BsaXRfZXF1YWxzICIkX0dfb3B0IgorCSAgICAgICAgICAgICAgc2V0IGR1bW15ICIkZnVuY19zcGxpdF9lcXVhbHNfbGhzIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICIkZnVuY19zcGxpdF9lcXVhbHNfcmhzIiAkezErIiRAIn0KKyAgICAgICAgICAgICAgICAgICAgICBzaGlmdAorICAgICAgICAgICAgICAgICAgICAgIDs7CisKKyAgICAgICAjIFNlcGFyYXRlIG9wdGFyZ3MgdG8gc2hvcnQgb3B0aW9uczoKKyAgICAgICAgLVcqKQorICAgICAgICAgICAgICAgICAgICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0ICIkX0dfb3B0IgorICAgICAgICAgICAgICAgICAgICAgIHNldCBkdW1teSAiJGZ1bmNfc3BsaXRfc2hvcnRfb3B0X25hbWUiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIiRmdW5jX3NwbGl0X3Nob3J0X29wdF9hcmciICR7MSsiJEAifQorICAgICAgICAgICAgICAgICAgICAgIHNoaWZ0CisgICAgICAgICAgICAgICAgICAgICAgOzsKKworICAgICAgICAjIFNlcGFyYXRlIG5vbi1hcmd1bWVudCBzaG9ydCBvcHRpb25zOgorICAgICAgICAtXD8qfC1oKnwtdip8LXgqKQorICAgICAgICAgICAgICAgICAgICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0ICIkX0dfb3B0IgorICAgICAgICAgICAgICAgICAgICAgIHNldCBkdW1teSAiJGZ1bmNfc3BsaXRfc2hvcnRfb3B0X25hbWUiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIi0kZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnIiAkezErIiRAIn0KKyAgICAgICAgICAgICAgICAgICAgICBzaGlmdAorICAgICAgICAgICAgICAgICAgICAgIDs7CisKKyAgICAgICAgLS0pICAgICAgICAgICBicmVhayA7OworICAgICAgICAtKikgICAgICAgICAgIGZ1bmNfZmF0YWxfaGVscCAidW5yZWNvZ25pc2VkIG9wdGlvbjogJyRfR19vcHQnIiA7OworICAgICAgICAqKSAgICAgICAgICAgIHNldCBkdW1teSAiJF9HX29wdCIgJHsxKyIkQCJ9OyBzaGlmdDsgYnJlYWsgOzsKKyAgICAgIGVzYWMKKyAgICBkb25lCisKKyAgICAjIHNhdmUgbW9kaWZpZWQgcG9zaXRpb25hbCBwYXJhbWV0ZXJzIGZvciBjYWxsZXIKKyAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICR7MSsiJEAifQorICAgIGZ1bmNfcGFyc2Vfb3B0aW9uc19yZXN1bHQ9JGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0Cit9CisKKworIyBmdW5jX3ZhbGlkYXRlX29wdGlvbnMgW0FSR10uLi4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFBlcmZvcm0gYW55IHNhbml0eSBjaGVja3Mgb24gb3B0aW9uIHNldHRpbmdzIGFuZC9vciB1bmNvbnN1bWVkCisjIGFyZ3VtZW50cy4KK2Z1bmNfaG9va2FibGUgZnVuY192YWxpZGF0ZV9vcHRpb25zCitmdW5jX3ZhbGlkYXRlX29wdGlvbnMgKCkKK3sKKyAgICAkZGVidWdfY21kCisKKyAgICAjIERpc3BsYXkgYWxsIHdhcm5pbmdzIGlmIC1XIHdhcyBub3QgZ2l2ZW4uCisgICAgdGVzdCAtbiAiJG9wdF93YXJuaW5nX3R5cGVzIiB8fCBvcHRfd2FybmluZ190eXBlcz0iICR3YXJuaW5nX2NhdGVnb3JpZXMiCisKKyAgICBmdW5jX3J1bl9ob29rcyBmdW5jX3ZhbGlkYXRlX29wdGlvbnMgJHsxKyIkQCJ9CisKKyAgICAjIEJhaWwgaWYgdGhlIG9wdGlvbnMgd2VyZSBzY3Jld2VkIQorICAgICRleGl0X2NtZCAkRVhJVF9GQUlMVVJFCisKKyAgICAjIHNhdmUgbW9kaWZpZWQgcG9zaXRpb25hbCBwYXJhbWV0ZXJzIGZvciBjYWxsZXIKKyAgICBmdW5jX3ZhbGlkYXRlX29wdGlvbnNfcmVzdWx0PSRmdW5jX3J1bl9ob29rc19yZXN1bHQKK30KKworCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLSMjCisjIyBIZWxwZXIgZnVuY3Rpb25zLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tIyMKKworIyBUaGlzIHNlY3Rpb24gY29udGFpbnMgdGhlIGhlbHBlciBmdW5jdGlvbnMgdXNlZCBieSB0aGUgcmVzdCBvZiB0aGUKKyMgaG9va2FibGUgb3B0aW9uIHBhcnNlciBmcmFtZXdvcmsgaW4gYXNjaWktYmV0aWNhbCBvcmRlci4KKworCisjIGZ1bmNfZmF0YWxfaGVscCBBUkcuLi4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCBtZXNzYWdlIHRvIHN0YW5kYXJkIGVycm9yLCBmb2xsb3dlZCBieQorIyBhIGhlbHAgaGludCwgYW5kIGV4aXQuCitmdW5jX2ZhdGFsX2hlbHAgKCkKK3sKKyAgICAkZGVidWdfY21kCisKKyAgICBldmFsIFwkYnNfZWNobyBcIiJVc2FnZTogJHVzYWdlIlwiCisgICAgZXZhbCBcJGJzX2VjaG8gXCIiJGZhdGFsX2hlbHAiXCIKKyAgICBmdW5jX2Vycm9yICR7MSsiJEAifQorICAgIGV4aXQgJEVYSVRfRkFJTFVSRQorfQorCisKKyMgZnVuY19oZWxwCisjIC0tLS0tLS0tLQorIyBFY2hvIGxvbmcgaGVscCBtZXNzYWdlIHRvIHN0YW5kYXJkIG91dHB1dCBhbmQgZXhpdC4KIGZ1bmNfaGVscCAoKQogewotICAgICRvcHRfZGVidWcKKyAgICAkZGVidWdfY21kCiAKLSAgICAkU0VEIC1uICcvXiMgVXNhZ2U6LywvIyBSZXBvcnQgYnVncyB0by8gewotCTpwcmludAotICAgICAgICBzL14jIC8vCi0Jcy9eIyAqJC8vCi0JcypcJHByb2duYW1lKickcHJvZ25hbWUnKgotCXMqXCRob3N0KiciJGhvc3QiJyoKLQlzKlwkU0hFTEwqJyIkU0hFTEwiJyoKLQlzKlwkTFRDQyonIiRMVENDIicqCi0JcypcJExUQ0ZMQUdTKiciJExUQ0ZMQUdTIicqCi0JcypcJExEKiciJExEIicqCi0Jcy9cJHdpdGhfZ251X2xkLyciJHdpdGhfZ251X2xkIicvCi0Jcy9cJGF1dG9tYWtlX3ZlcnNpb24vJyJgKCR7QVVUT01BS0UtYXV0b21ha2V9IC0tdmVyc2lvbikgMj4vZGV2L251bGwgfCRTRUQgMXFgIicvCi0Jcy9cJGF1dG9jb25mX3ZlcnNpb24vJyJgKCR7QVVUT0NPTkYtYXV0b2NvbmZ9IC0tdmVyc2lvbikgMj4vZGV2L251bGwgfCRTRUQgMXFgIicvCi0JcAotCWQKLSAgICAgfQotICAgICAvXiMgLiogaG9tZSBwYWdlOi9iIHByaW50Ci0gICAgIC9eIyBHZW5lcmFsIGhlbHAgdXNpbmcvYiBwcmludAotICAgICAnIDwgIiRwcm9ncGF0aCIKLSAgICByZXQ9JD8KLSAgICBpZiB0ZXN0IC16ICIkMSI7IHRoZW4KLSAgICAgIGV4aXQgJHJldAotICAgIGZpCisgICAgZnVuY191c2FnZV9tZXNzYWdlCisgICAgJGJzX2VjaG8gIiRsb25nX2hlbHBfbWVzc2FnZSIKKyAgICBleGl0IDAKIH0KIAotIyBmdW5jX21pc3NpbmdfYXJnIGFyZ25hbWUKKworIyBmdW5jX21pc3NpbmdfYXJnIEFSR05BTUUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIG1lc3NhZ2UgdG8gc3RhbmRhcmQgZXJyb3IgYW5kIHNldCBnbG9iYWwKICMgZXhpdF9jbWQuCiBmdW5jX21pc3NpbmdfYXJnICgpCiB7Ci0gICAgJG9wdF9kZWJ1ZworICAgICRkZWJ1Z19jbWQKIAotICAgIGZ1bmNfZXJyb3IgIm1pc3NpbmcgYXJndW1lbnQgZm9yICQxLiIKKyAgICBmdW5jX2Vycm9yICJNaXNzaW5nIGFyZ3VtZW50IGZvciAnJDEnLiIKICAgICBleGl0X2NtZD1leGl0CiB9CiAKIAotIyBmdW5jX3NwbGl0X3Nob3J0X29wdCBzaG9ydG9wdAorIyBmdW5jX3NwbGl0X2VxdWFscyBTVFJJTkcKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFNldCBmdW5jX3NwbGl0X2VxdWFsc19saHMgYW5kIGZ1bmNfc3BsaXRfZXF1YWxzX3JocyBzaGVsbCB2YXJpYWJsZXMgYWZ0ZXIKKyMgc3BsaXR0aW5nIFNUUklORyBhdCB0aGUgJz0nIHNpZ24uCit0ZXN0IC16ICIkX0dfSEFWRV9YU0lfT1BTIiBcCisgICAgJiYgKGV2YWwgJ3g9YS9iL2M7CisgICAgICB0ZXN0IDVhYS9iYi9jYyA9ICIkeyN4fSR7eCUlLyp9JHt4JS8qfSR7eCMqL30ke3gjIyovfSInKSAyPi9kZXYvbnVsbCBcCisgICAgJiYgX0dfSEFWRV9YU0lfT1BTPXllcworCitpZiB0ZXN0IHllcyA9ICIkX0dfSEFWRV9YU0lfT1BTIgordGhlbgorICAjIFRoaXMgaXMgYW4gWFNJIGNvbXBhdGlibGUgc2hlbGwsIGFsbG93aW5nIGEgZmFzdGVyIGltcGxlbWVudGF0aW9uLi4uCisgIGV2YWwgJ2Z1bmNfc3BsaXRfZXF1YWxzICgpCisgIHsKKyAgICAgICRkZWJ1Z19jbWQKKworICAgICAgZnVuY19zcGxpdF9lcXVhbHNfbGhzPSR7MSUlPSp9CisgICAgICBmdW5jX3NwbGl0X2VxdWFsc19yaHM9JHsxIyo9fQorICAgICAgdGVzdCAieCRmdW5jX3NwbGl0X2VxdWFsc19saHMiID0gIngkMSIgXAorICAgICAgICAmJiBmdW5jX3NwbGl0X2VxdWFsc19yaHM9CisgIH0nCitlbHNlCisgICMgLi4ub3RoZXJ3aXNlIGZhbGwgYmFjayB0byB1c2luZyBleHByLCB3aGljaCBpcyBvZnRlbiBhIHNoZWxsIGJ1aWx0aW4uCisgIGZ1bmNfc3BsaXRfZXF1YWxzICgpCisgIHsKKyAgICAgICRkZWJ1Z19jbWQKKworICAgICAgZnVuY19zcGxpdF9lcXVhbHNfbGhzPWBleHByICJ4JDEiIDogJ3hcKFtePV0qXCknYAorICAgICAgZnVuY19zcGxpdF9lcXVhbHNfcmhzPQorICAgICAgdGVzdCAieCRmdW5jX3NwbGl0X2VxdWFsc19saHMiID0gIngkMSIgXAorICAgICAgICB8fCBmdW5jX3NwbGl0X2VxdWFsc19yaHM9YGV4cHIgIngkMSIgOiAneFtePV0qPVwoLipcKSQnYAorICB9CitmaSAjZnVuY19zcGxpdF9lcXVhbHMKKworCisjIGZ1bmNfc3BsaXRfc2hvcnRfb3B0IFNIT1JUT1BUCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIFNldCBmdW5jX3NwbGl0X3Nob3J0X29wdF9uYW1lIGFuZCBmdW5jX3NwbGl0X3Nob3J0X29wdF9hcmcgc2hlbGwKICMgdmFyaWFibGVzIGFmdGVyIHNwbGl0dGluZyBTSE9SVE9QVCBhZnRlciB0aGUgMm5kIGNoYXJhY3Rlci4KLWZ1bmNfc3BsaXRfc2hvcnRfb3B0ICgpCitpZiB0ZXN0IHllcyA9ICIkX0dfSEFWRV9YU0lfT1BTIgordGhlbgorICAjIFRoaXMgaXMgYW4gWFNJIGNvbXBhdGlibGUgc2hlbGwsIGFsbG93aW5nIGEgZmFzdGVyIGltcGxlbWVudGF0aW9uLi4uCisgIGV2YWwgJ2Z1bmNfc3BsaXRfc2hvcnRfb3B0ICgpCisgIHsKKyAgICAgICRkZWJ1Z19jbWQKKworICAgICAgZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnPSR7MSM/P30KKyAgICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X25hbWU9JHsxJSIkZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnIn0KKyAgfScKK2Vsc2UKKyAgIyAuLi5vdGhlcndpc2UgZmFsbCBiYWNrIHRvIHVzaW5nIGV4cHIsIHdoaWNoIGlzIG9mdGVuIGEgc2hlbGwgYnVpbHRpbi4KKyAgZnVuY19zcGxpdF9zaG9ydF9vcHQgKCkKKyAgeworICAgICAgJGRlYnVnX2NtZAorCisgICAgICBmdW5jX3NwbGl0X3Nob3J0X29wdF9uYW1lPWBleHByICJ4JDEiIDogJ3gtXCguXCknYAorICAgICAgZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnPWBleHByICJ4JDEiIDogJ3gtLlwoLipcKSQnYAorICB9CitmaSAjZnVuY19zcGxpdF9zaG9ydF9vcHQKKworCisjIGZ1bmNfdXNhZ2UKKyMgLS0tLS0tLS0tLQorIyBFY2hvIHNob3J0IGhlbHAgbWVzc2FnZSB0byBzdGFuZGFyZCBvdXRwdXQgYW5kIGV4aXQuCitmdW5jX3VzYWdlICgpCiB7Ci0gICAgbXlfc2VkX3Nob3J0X29wdD0nMXMvXlwoLi5cKS4qJC9cMS87cScKLSAgICBteV9zZWRfc2hvcnRfcmVzdD0nMXMvXi4uXCguKlwpJC9cMS87cScKKyAgICAkZGVidWdfY21kCiAKLSAgICBmdW5jX3NwbGl0X3Nob3J0X29wdF9uYW1lPWAkRUNITyAiJDEiIHwgJFNFRCAiJG15X3NlZF9zaG9ydF9vcHQiYAotICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZz1gJEVDSE8gIiQxIiB8ICRTRUQgIiRteV9zZWRfc2hvcnRfcmVzdCJgCi19ICMgZnVuY19zcGxpdF9zaG9ydF9vcHQgbWF5IGJlIHJlcGxhY2VkIGJ5IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9uCisgICAgZnVuY191c2FnZV9tZXNzYWdlCisgICAgJGJzX2VjaG8gIlJ1biAnJHByb2duYW1lIC0taGVscCB8JHtQQUdFUi1tb3JlfScgZm9yIGZ1bGwgdXNhZ2UiCisgICAgZXhpdCAwCit9CiAKIAotIyBmdW5jX3NwbGl0X2xvbmdfb3B0IGxvbmdvcHQKLSMgU2V0IGZ1bmNfc3BsaXRfbG9uZ19vcHRfbmFtZSBhbmQgZnVuY19zcGxpdF9sb25nX29wdF9hcmcgc2hlbGwKLSMgdmFyaWFibGVzIGFmdGVyIHNwbGl0dGluZyBMT05HT1BUIGF0IHRoZSBgPScgc2lnbi4KLWZ1bmNfc3BsaXRfbG9uZ19vcHQgKCkKKyMgZnVuY191c2FnZV9tZXNzYWdlCisjIC0tLS0tLS0tLS0tLS0tLS0tLQorIyBFY2hvIHNob3J0IGhlbHAgbWVzc2FnZSB0byBzdGFuZGFyZCBvdXRwdXQuCitmdW5jX3VzYWdlX21lc3NhZ2UgKCkKIHsKLSAgICBteV9zZWRfbG9uZ19vcHQ9JzFzL15cKC0tW149XSpcKT0uKi9cMS87cScKLSAgICBteV9zZWRfbG9uZ19hcmc9JzFzL14tLVtePV0qPS8vJworICAgICRkZWJ1Z19jbWQKIAotICAgIGZ1bmNfc3BsaXRfbG9uZ19vcHRfbmFtZT1gJEVDSE8gIiQxIiB8ICRTRUQgIiRteV9zZWRfbG9uZ19vcHQiYAotICAgIGZ1bmNfc3BsaXRfbG9uZ19vcHRfYXJnPWAkRUNITyAiJDEiIHwgJFNFRCAiJG15X3NlZF9sb25nX2FyZyJgCi19ICMgZnVuY19zcGxpdF9sb25nX29wdCBtYXkgYmUgcmVwbGFjZWQgYnkgZXh0ZW5kZWQgc2hlbGwgaW1wbGVtZW50YXRpb24KLQotZXhpdF9jbWQ9OgorICAgIGV2YWwgXCRic19lY2hvIFwiIlVzYWdlOiAkdXNhZ2UiXCIKKyAgICBlY2hvCisgICAgJFNFRCAtbiAnc3xeIyB8fAorICAgICAgICAvXldyaXR0ZW4gYnkveworICAgICAgICAgIHg7cDt4CisgICAgICAgIH0KKwloCisJL15Xcml0dGVuIGJ5L3EnIDwgIiRwcm9ncGF0aCIKKyAgICBlY2hvCisgICAgZXZhbCBcJGJzX2VjaG8gXCIiJHVzYWdlX21lc3NhZ2UiXCIKK30KIAogCi0KLQotCi1tYWdpYz0iJSUlTUFHSUMgdmFyaWFibGUlJSUiCi1tYWdpY19leGU9IiUlJU1BR0lDIEVYRSB2YXJpYWJsZSUlJSIKLQotIyBHbG9iYWwgdmFyaWFibGVzLgotbm9ub3B0PQotcHJlc2VydmVfYXJncz0KLWxvMm89InMvXFwubG9cJC8uJHtvYmpleHR9LyIKLW8ybG89InMvXFwuJHtvYmpleHR9XCQvLmxvLyIKLWV4dHJhY3RlZF9hcmNoaXZlcz0KLWV4dHJhY3RlZF9zZXJpYWw9MAotCi0jIElmIHRoaXMgdmFyaWFibGUgaXMgc2V0IGluIGFueSBvZiB0aGUgYWN0aW9ucywgdGhlIGNvbW1hbmQgaW4gaXQKLSMgd2lsbCBiZSBleGVjZWQgYXQgdGhlIGVuZC4gIFRoaXMgcHJldmVudHMgaGVyZS1kb2N1bWVudHMgZnJvbSBiZWluZwotIyBsZWZ0IG92ZXIgYnkgc2hlbGxzLgotZXhlY19jbWQ9Ci0KLSMgZnVuY19hcHBlbmQgdmFyIHZhbHVlCi0jIEFwcGVuZCBWQUxVRSB0byB0aGUgZW5kIG9mIHNoZWxsIHZhcmlhYmxlIFZBUi4KLWZ1bmNfYXBwZW5kICgpCisjIGZ1bmNfdmVyc2lvbgorIyAtLS0tLS0tLS0tLS0KKyMgRWNobyB2ZXJzaW9uIG1lc3NhZ2UgdG8gc3RhbmRhcmQgb3V0cHV0IGFuZCBleGl0LgorZnVuY192ZXJzaW9uICgpCiB7Ci0gICAgZXZhbCAiJHsxfT1cJCR7MX1cJHsyfSIKLX0gIyBmdW5jX2FwcGVuZCBtYXkgYmUgcmVwbGFjZWQgYnkgZXh0ZW5kZWQgc2hlbGwgaW1wbGVtZW50YXRpb24KKyAgICAkZGVidWdfY21kCiAKLSMgZnVuY19hcHBlbmRfcXVvdGVkIHZhciB2YWx1ZQotIyBRdW90ZSBWQUxVRSBhbmQgYXBwZW5kIHRvIHRoZSBlbmQgb2Ygc2hlbGwgdmFyaWFibGUgVkFSLCBzZXBhcmF0ZWQKLSMgYnkgYSBzcGFjZS4KLWZ1bmNfYXBwZW5kX3F1b3RlZCAoKQorICAgIHByaW50ZiAnJXNcbicgIiRwcm9nbmFtZSAkc2NyaXB0dmVyc2lvbiIKKyAgICAkU0VEIC1uICcvXiMjL3EKKyAgICAgICAgLyhDKS8hYiBnbworICAgICAgICA6bW9yZQorICAgICAgICAvXC4vIXsKKyAgICAgICAgICBOCisgICAgICAgICAgc3xcbiMgfCB8CisgICAgICAgICAgYiBtb3JlCisgICAgICAgIH0KKyAgICAgICAgOmdvCisgICAgICAgIC9eIyBXcml0dGVuIGJ5IC8sLyMgd2FycmFudHk7IC8geworICAgICAgICAgIHN8XiMgfHwKKyAgICAgICAgICBzfF4jICokfHwKKyAgICAgICAgICBzfFwoKEMpXClbIDAtOSwtXSpbICwtXVwoWzEtOV1bMC05XSogXCl8XDEgXDJ8CisgICAgICAgICAgcAorICAgICAgICB9CisgICAgICAgIC9eIyBXcml0dGVuIGJ5IC8geworICAgICAgICAgIHN8XiMgfHwKKyAgICAgICAgICBwCisgICAgICAgIH0KKyAgICAgICAgL153YXJyYW50eTsgL3EnIDwgIiRwcm9ncGF0aCIKKworICAgIGV4aXQgJD8KK30KKworCisjIExvY2FsIHZhcmlhYmxlczoKKyMgbW9kZTogc2hlbGwtc2NyaXB0CisjIHNoLWluZGVudGF0aW9uOiAyCisjIGV2YWw6IChhZGQtaG9vayAnd3JpdGUtZmlsZS1ob29rcyAndGltZS1zdGFtcCkKKyMgdGltZS1zdGFtcC1wYXR0ZXJuOiAiMTAvc2NyaXB0dmVyc2lvbj0lOnktJTAybS0lMDJkLiUwMkg7ICMgVVRDIgorIyB0aW1lLXN0YW1wLXRpbWUtem9uZTogIlVUQyIKKyMgRW5kOgorCisjIFNldCBhIHZlcnNpb24gc3RyaW5nLgorc2NyaXB0dmVyc2lvbj0nKEdOVSBsaWJ0b29sKSAyLjQuMi40MTgnCisKKworIyBmdW5jX2VjaG8gQVJHLi4uCisjIC0tLS0tLS0tLS0tLS0tLS0KKyMgTGlidG9vbCBhbHNvIGRpc3BsYXlzIHRoZSBjdXJyZW50IG1vZGUgaW4gbWVzc2FnZXMsIHNvIG92ZXJyaWRlCisjIGZ1bmNsaWIuc2ggZnVuY19lY2hvIHdpdGggdGhpcyBjdXN0b20gZGVmaW5pdGlvbi4KK2Z1bmNfZWNobyAoKQogewotICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiR7Mn0iCi0gICAgZXZhbCAiJHsxfT1cJCR7MX1cXCBcJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgotfSAjIGZ1bmNfYXBwZW5kX3F1b3RlZCBtYXkgYmUgcmVwbGFjZWQgYnkgZXh0ZW5kZWQgc2hlbGwgaW1wbGVtZW50YXRpb24KKyAgICAkZGVidWdfY21kCisKKyAgICBfR19tZXNzYWdlPSQqCisKKyAgICBmdW5jX2VjaG9fSUZTPSRJRlMKKyAgICBJRlM9JG5sCisgICAgZm9yIF9HX2xpbmUgaW4gJF9HX21lc3NhZ2U7IGRvCisgICAgICBJRlM9JGZ1bmNfZWNob19JRlMKKyAgICAgICRic19lY2hvICIkcHJvZ25hbWUke29wdF9tb2RlKzogJG9wdF9tb2RlfTogJF9HX2xpbmUiCisgICAgZG9uZQorICAgIElGUz0kZnVuY19lY2hvX0lGUworfQogCiAKLSMgZnVuY19hcml0aCBhcml0aG1ldGljLXRlcm0uLi4KLWZ1bmNfYXJpdGggKCkKKyMgZnVuY193YXJuaW5nIEFSRy4uLgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tCisjIExpYnRvb2wgd2FybmluZ3MgYXJlIG5vdCBjYXRlZ29yaXplZCwgc28gb3ZlcnJpZGUgZnVuY2xpYi5zaAorIyBmdW5jX3dhcm5pbmcgd2l0aCB0aGlzIHNpbXBsZXIgZGVmaW5pdGlvbi4KK2Z1bmNfd2FybmluZyAoKQogewotICAgIGZ1bmNfYXJpdGhfcmVzdWx0PWBleHByICIke0B9ImAKLX0gIyBmdW5jX2FyaXRoIG1heSBiZSByZXBsYWNlZCBieSBleHRlbmRlZCBzaGVsbCBpbXBsZW1lbnRhdGlvbgorICAgICRkZWJ1Z19jbWQKKworICAgICR3YXJuaW5nX2Z1bmMgJHsxKyIkQCJ9Cit9CiAKIAotIyBmdW5jX2xlbiBzdHJpbmcKLSMgU1RSSU5HIG1heSBub3Qgc3RhcnQgd2l0aCBhIGh5cGhlbi4KLWZ1bmNfbGVuICgpCi17Ci0gICAgZnVuY19sZW5fcmVzdWx0PWBleHByICIkezF9IiA6ICIuKiIgMj4vZGV2L251bGwgfHwgZWNobyAkbWF4X2NtZF9sZW5gCi19ICMgZnVuY19sZW4gbWF5IGJlIHJlcGxhY2VkIGJ5IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9uCisjIyAtLS0tLS0tLS0tLS0tLS0tICMjCisjIyBPcHRpb25zIHBhcnNpbmcuICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tICMjCisKKyMgSG9vayBpbiB0aGUgZnVuY3Rpb25zIHRvIG1ha2Ugc3VyZSBvdXIgb3duIG9wdGlvbnMgYXJlIHBhcnNlZCBkdXJpbmcKKyMgdGhlIG9wdGlvbiBwYXJzaW5nIGxvb3AuCisKK3VzYWdlPSckcHJvZ3BhdGggW09QVElPTl0uLi4gW01PREUtQVJHXS4uLicKKworIyBTaG9ydCBoZWxwIG1lc3NhZ2UgaW4gcmVzcG9uc2UgdG8gJy1oJy4KK3VzYWdlX21lc3NhZ2U9Ik9wdGlvbnM6CisgICAgICAgLS1jb25maWcgICAgICAgICAgICAgc2hvdyBhbGwgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMKKyAgICAgICAtLWRlYnVnICAgICAgICAgICAgICBlbmFibGUgdmVyYm9zZSBzaGVsbCB0cmFjaW5nCisgICAtbiwgLS1kcnktcnVuICAgICAgICAgICAgZGlzcGxheSBjb21tYW5kcyB3aXRob3V0IG1vZGlmeWluZyBhbnkgZmlsZXMKKyAgICAgICAtLWZlYXR1cmVzICAgICAgICAgICBkaXNwbGF5IGJhc2ljIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gYW5kIGV4aXQKKyAgICAgICAtLW1vZGU9TU9ERSAgICAgICAgICB1c2Ugb3BlcmF0aW9uIG1vZGUgTU9ERQorICAgICAgIC0tbm8td2FybmluZ3MgICAgICAgIGVxdWl2YWxlbnQgdG8gJy1Xbm9uZScKKyAgICAgICAtLXByZXNlcnZlLWR1cC1kZXBzICBkb24ndCByZW1vdmUgZHVwbGljYXRlIGRlcGVuZGVuY3kgbGlicmFyaWVzCisgICAgICAgLS1xdWlldCwgLS1zaWxlbnQgICAgZG9uJ3QgcHJpbnQgaW5mb3JtYXRpb25hbCBtZXNzYWdlcworICAgICAgIC0tdGFnPVRBRyAgICAgICAgICAgIHVzZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBmcm9tIHRhZyBUQUcKKyAgIC12LCAtLXZlcmJvc2UgICAgICAgICAgICBwcmludCBtb3JlIGluZm9ybWF0aW9uYWwgbWVzc2FnZXMgdGhhbiBkZWZhdWx0CisgICAgICAgLS12ZXJzaW9uICAgICAgICAgICAgcHJpbnQgdmVyc2lvbiBpbmZvcm1hdGlvbgorICAgLVcsIC0td2FybmluZ3M9Q0FURUdPUlkgIHJlcG9ydCB0aGUgd2FybmluZ3MgZmFsbGluZyBpbiBDQVRFR09SWSBbYWxsXQorICAgLWgsIC0taGVscCwgLS1oZWxwLWFsbCAgIHByaW50IHNob3J0LCBsb25nLCBvciBkZXRhaWxlZCBoZWxwIG1lc3NhZ2UKKyIKKworIyBBZGRpdGlvbmFsIHRleHQgYXBwZW5kZWQgdG8gJ3VzYWdlX21lc3NhZ2UnIGluIHJlc3BvbnNlIHRvICctLWhlbHAnLgorbG9uZ19oZWxwX21lc3NhZ2U9JGxvbmdfaGVscF9tZXNzYWdlIgorCitNT0RFIG11c3QgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgICAgICBjbGVhbiAgICAgICAgICAgcmVtb3ZlIGZpbGVzIGZyb20gdGhlIGJ1aWxkIGRpcmVjdG9yeQorICAgICAgIGNvbXBpbGUgICAgICAgICBjb21waWxlIGEgc291cmNlIGZpbGUgaW50byBhIGxpYnRvb2wgb2JqZWN0CisgICAgICAgZXhlY3V0ZSAgICAgICAgIGF1dG9tYXRpY2FsbHkgc2V0IGxpYnJhcnkgcGF0aCwgdGhlbiBydW4gYSBwcm9ncmFtCisgICAgICAgZmluaXNoICAgICAgICAgIGNvbXBsZXRlIHRoZSBpbnN0YWxsYXRpb24gb2YgbGlidG9vbCBsaWJyYXJpZXMKKyAgICAgICBpbnN0YWxsICAgICAgICAgaW5zdGFsbCBsaWJyYXJpZXMgb3IgZXhlY3V0YWJsZXMKKyAgICAgICBsaW5rICAgICAgICAgICAgY3JlYXRlIGEgbGlicmFyeSBvciBhbiBleGVjdXRhYmxlCisgICAgICAgdW5pbnN0YWxsICAgICAgIHJlbW92ZSBsaWJyYXJpZXMgZnJvbSBhbiBpbnN0YWxsZWQgZGlyZWN0b3J5CisKK01PREUtQVJHUyB2YXJ5IGRlcGVuZGluZyBvbiB0aGUgTU9ERS4gIFdoZW4gcGFzc2VkIGFzIGZpcnN0IG9wdGlvbiwKKyctLW1vZGU9TU9ERScgbWF5IGJlIGFiYnJldmlhdGVkIGFzICdNT0RFJyBvciBhIHVuaXF1ZSBhYmJyZXZpYXRpb24gb2YgdGhhdC4KK1RyeSAnJHByb2duYW1lIC0taGVscCAtLW1vZGU9TU9ERScgZm9yIGEgbW9yZSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiBNT0RFLgorCitXaGVuIHJlcG9ydGluZyBhIGJ1ZywgcGxlYXNlIGRlc2NyaWJlIGEgdGVzdCBjYXNlIHRvIHJlcHJvZHVjZSBpdCBhbmQKK2luY2x1ZGUgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjoKKworICAgICAgIGhvc3QtdHJpcGxldDogICAkaG9zdAorICAgICAgIHNoZWxsOiAgICAgICAgICAkU0hFTEwKKyAgICAgICBjb21waWxlcjogICAgICAgJExUQ0MKKyAgICAgICBjb21waWxlciBmbGFnczogJExUQ0ZMQUdTCisgICAgICAgbGlua2VyOiAgICAgICAgICRMRCAoZ251PyAkd2l0aF9nbnVfbGQpCisgICAgICAgdmVyc2lvbjogICAgICAgICRwcm9nbmFtZSAoR05VIGxpYnRvb2wpIDIuNC4yLjQxOAorICAgICAgIGF1dG9tYWtlOiAgICAgICBgKCRBVVRPTUFLRSAtLXZlcnNpb24pIDI+L2Rldi9udWxsIHwkU0VEIDFxYAorICAgICAgIGF1dG9jb25mOiAgICAgICBgKCRBVVRPQ09ORiAtLXZlcnNpb24pIDI+L2Rldi9udWxsIHwkU0VEIDFxYAorCitSZXBvcnQgYnVncyB0byA8YnVnLWxpYnRvb2xAZ251Lm9yZz4uCitHTlUgbGlidG9vbCBob21lIHBhZ2U6IDxodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvbGlidG9vbC8+LgorR2VuZXJhbCBoZWxwIHVzaW5nIEdOVSBzb2Z0d2FyZTogPGh0dHA6Ly93d3cuZ251Lm9yZy9nZXRoZWxwLz4uIgogCiAKLSMgZnVuY19sbzJvIG9iamVjdAotZnVuY19sbzJvICgpCi17Ci0gICAgZnVuY19sbzJvX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJGxvMm8iYAotfSAjIGZ1bmNfbG8ybyBtYXkgYmUgcmVwbGFjZWQgYnkgZXh0ZW5kZWQgc2hlbGwgaW1wbGVtZW50YXRpb24KKyMgZnVuY19sbzJvIE9CSkVDVC1OQU1FCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUcmFuc2Zvcm0gT0JKRUNULU5BTUUgZnJvbSBhICcubG8nIHN1ZmZpeCB0byB0aGUgcGxhdGZvcm0gc3BlY2lmaWMKKyMgb2JqZWN0IHN1ZmZpeC4KKworbG8ybz1zL1xcLmxvXCQvLiRvYmpleHQvCitvMmxvPXMvXFwuJG9iamV4dFwkLy5sby8KKworaWYgdGVzdCB5ZXMgPSAiJF9HX0hBVkVfWFNJX09QUyI7IHRoZW4KKyAgZXZhbCAnZnVuY19sbzJvICgpCisgIHsKKyAgICBjYXNlICQxIGluCisgICAgICAqLmxvKSBmdW5jX2xvMm9fcmVzdWx0PSR7MSUubG99LiRvYmpleHQgOzsKKyAgICAgICogICApIGZ1bmNfbG8yb19yZXN1bHQ9JDEgICAgICAgICAgICAgICA7OworICAgIGVzYWMKKyAgfScKKworICAjIGZ1bmNfeGZvcm0gTElCT0JKLU9SLVNPVVJDRQorICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAjIFRyYW5zZm9ybSBMSUJPQkotT1ItU09VUkNFIGZyb20gYSAnLm8nIG9yICcuYycgKG9yIG90aGVyd2lzZSkKKyAgIyBzdWZmaXggdG8gYSAnLmxvJyBsaWJ0b29sLW9iamVjdCBzdWZmaXguCisgIGV2YWwgJ2Z1bmNfeGZvcm0gKCkKKyAgeworICAgIGZ1bmNfeGZvcm1fcmVzdWx0PSR7MSUuKn0ubG8KKyAgfScKK2Vsc2UKKyAgIyAuLi5vdGhlcndpc2UgZmFsbCBiYWNrIHRvIHVzaW5nIHNlZC4KKyAgZnVuY19sbzJvICgpCisgIHsKKyAgICBmdW5jX2xvMm9fcmVzdWx0PWAkRUNITyAiJDEiIHwgJFNFRCAiJGxvMm8iYAorICB9CisKKyAgZnVuY194Zm9ybSAoKQorICB7CisgICAgZnVuY194Zm9ybV9yZXN1bHQ9YCRFQ0hPICIkMSIgfCAkU0VEICdzfFwuW14uXSokfC5sb3wnYAorICB9CitmaQogCiAKLSMgZnVuY194Zm9ybSBsaWJvYmotb3Itc291cmNlCi1mdW5jX3hmb3JtICgpCi17Ci0gICAgZnVuY194Zm9ybV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgJ3MvXC5bXi5dKiQvLmxvLydgCi19ICMgZnVuY194Zm9ybSBtYXkgYmUgcmVwbGFjZWQgYnkgZXh0ZW5kZWQgc2hlbGwgaW1wbGVtZW50YXRpb24KLQotCi0jIGZ1bmNfZmF0YWxfY29uZmlndXJhdGlvbiBhcmcuLi4KKyMgZnVuY19mYXRhbF9jb25maWd1cmF0aW9uIEFSRy4uLgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIG1lc3NhZ2UgdG8gc3RhbmRhcmQgZXJyb3IsIGZvbGxvd2VkIGJ5CiAjIGEgY29uZmlndXJhdGlvbiBmYWlsdXJlIGhpbnQsIGFuZCBleGl0LgogZnVuY19mYXRhbF9jb25maWd1cmF0aW9uICgpCiB7Ci0gICAgZnVuY19lcnJvciAkezErIiRAIn0KLSAgICBmdW5jX2Vycm9yICJTZWUgdGhlICRQQUNLQUdFIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uIgotICAgIGZ1bmNfZmF0YWxfZXJyb3IgIkZhdGFsIGNvbmZpZ3VyYXRpb24gZXJyb3IuIgorICAgIGZ1bmNfX2ZhdGFsX2Vycm9yICR7MSsiJEAifSBcCisgICAgICAiU2VlIHRoZSAkUEFDS0FHRSBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgXAorICAgICAgIkZhdGFsIGNvbmZpZ3VyYXRpb24gZXJyb3IuIgogfQogCiAKICMgZnVuY19jb25maWcKKyMgLS0tLS0tLS0tLS0KICMgRGlzcGxheSB0aGUgY29uZmlndXJhdGlvbiBmb3IgYWxsIHRoZSB0YWdzIGluIHRoaXMgc2NyaXB0LgogZnVuY19jb25maWcgKCkKIHsKQEAgLTkxNSwxNyArMjA0OCwxOSBAQAogICAgIGV4aXQgJD8KIH0KIAorCiAjIGZ1bmNfZmVhdHVyZXMKKyMgLS0tLS0tLS0tLS0tLQogIyBEaXNwbGF5IHRoZSBmZWF0dXJlcyBzdXBwb3J0ZWQgYnkgdGhpcyBzY3JpcHQuCiBmdW5jX2ZlYXR1cmVzICgpCiB7CiAgICAgZWNobyAiaG9zdDogJGhvc3QiCi0gICAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXM7IHRoZW4KKyAgICBpZiB0ZXN0IHllcyA9ICIkYnVpbGRfbGlidG9vbF9saWJzIjsgdGhlbgogICAgICAgZWNobyAiZW5hYmxlIHNoYXJlZCBsaWJyYXJpZXMiCiAgICAgZWxzZQogICAgICAgZWNobyAiZGlzYWJsZSBzaGFyZWQgbGlicmFyaWVzIgogICAgIGZpCi0gICAgaWYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IHllczsgdGhlbgorICAgIGlmIHRlc3QgeWVzID0gIiRidWlsZF9vbGRfbGlicyI7IHRoZW4KICAgICAgIGVjaG8gImVuYWJsZSBzdGF0aWMgbGlicmFyaWVzIgogICAgIGVsc2UKICAgICAgIGVjaG8gImRpc2FibGUgc3RhdGljIGxpYnJhcmllcyIKQEAgLTkzNCwyOTggKzIwNjksMzI1IEBACiAgICAgZXhpdCAkPwogfQogCi0jIGZ1bmNfZW5hYmxlX3RhZyB0YWduYW1lCisKKyMgZnVuY19lbmFibGVfdGFnIFRBR05BTUUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgVmVyaWZ5IHRoYXQgVEFHTkFNRSBpcyB2YWxpZCwgYW5kIGVpdGhlciBmbGFnIGFuIGVycm9yIGFuZCBleGl0LCBvcgogIyBlbmFibGUgdGhlIFRBR05BTUUgdGFnLiAgV2UgYWxzbyBhZGQgVEFHTkFNRSB0byB0aGUgZ2xvYmFsICR0YWdsaXN0CiAjIHZhcmlhYmxlIGhlcmUuCiBmdW5jX2VuYWJsZV90YWcgKCkKIHsKLSAgIyBHbG9iYWwgdmFyaWFibGU6Ci0gIHRhZ25hbWU9IiQxIgorICAgICMgR2xvYmFsIHZhcmlhYmxlOgorICAgIHRhZ25hbWU9JDEKIAotICByZV9iZWdpbmNmPSJeIyAjIyMgQkVHSU4gTElCVE9PTCBUQUcgQ09ORklHOiAkdGFnbmFtZVwkIgotICByZV9lbmRjZj0iXiMgIyMjIEVORCBMSUJUT09MIFRBRyBDT05GSUc6ICR0YWduYW1lXCQiCi0gIHNlZF9leHRyYWN0Y2Y9Ii8kcmVfYmVnaW5jZi8sLyRyZV9lbmRjZi9wIgorICAgIHJlX2JlZ2luY2Y9Il4jICMjIyBCRUdJTiBMSUJUT09MIFRBRyBDT05GSUc6ICR0YWduYW1lXCQiCisgICAgcmVfZW5kY2Y9Il4jICMjIyBFTkQgTElCVE9PTCBUQUcgQ09ORklHOiAkdGFnbmFtZVwkIgorICAgIHNlZF9leHRyYWN0Y2Y9LyRyZV9iZWdpbmNmLywvJHJlX2VuZGNmL3AKIAotICAjIFZhbGlkYXRlIHRhZ25hbWUuCi0gIGNhc2UgJHRhZ25hbWUgaW4KLSAgICAqWyEtX0EtWmEtejAtOSwvXSopCi0gICAgICBmdW5jX2ZhdGFsX2Vycm9yICJpbnZhbGlkIHRhZyBuYW1lOiAkdGFnbmFtZSIKLSAgICAgIDs7Ci0gIGVzYWMKKyAgICAjIFZhbGlkYXRlIHRhZ25hbWUuCisgICAgY2FzZSAkdGFnbmFtZSBpbgorICAgICAgKlshLV9BLVphLXowLTksL10qKQorICAgICAgICBmdW5jX2ZhdGFsX2Vycm9yICJpbnZhbGlkIHRhZyBuYW1lOiAkdGFnbmFtZSIKKyAgICAgICAgOzsKKyAgICBlc2FjCiAKLSAgIyBEb24ndCB0ZXN0IGZvciB0aGUgImRlZmF1bHQiIEMgdGFnLCBhcyB3ZSBrbm93IGl0J3MKLSAgIyB0aGVyZSBidXQgbm90IHNwZWNpYWxseSBtYXJrZWQuCi0gIGNhc2UgJHRhZ25hbWUgaW4KLSAgICBDQykgOzsKKyAgICAjIERvbid0IHRlc3QgZm9yIHRoZSAiZGVmYXVsdCIgQyB0YWcsIGFzIHdlIGtub3cgaXQncworICAgICMgdGhlcmUgYnV0IG5vdCBzcGVjaWFsbHkgbWFya2VkLgorICAgIGNhc2UgJHRhZ25hbWUgaW4KKyAgICAgICAgQ0MpIDs7CiAgICAgKikKLSAgICAgIGlmICRHUkVQICIkcmVfYmVnaW5jZiIgIiRwcm9ncGF0aCIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0JdGFnbGlzdD0iJHRhZ2xpc3QgJHRhZ25hbWUiCisgICAgICAgIGlmICRHUkVQICIkcmVfYmVnaW5jZiIgIiRwcm9ncGF0aCIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisJICB0YWdsaXN0PSIkdGFnbGlzdCAkdGFnbmFtZSIKIAotCSMgRXZhbHVhdGUgdGhlIGNvbmZpZ3VyYXRpb24uICBCZSBjYXJlZnVsIHRvIHF1b3RlIHRoZSBwYXRoCi0JIyBhbmQgdGhlIHNlZCBzY3JpcHQsIHRvIGF2b2lkIHNwbGl0dGluZyBvbiB3aGl0ZXNwYWNlLCBidXQKLQkjIGFsc28gZG9uJ3QgdXNlIG5vbi1wb3J0YWJsZSBxdW90ZXMgd2l0aGluIGJhY2txdW90ZXMgd2l0aGluCi0JIyBxdW90ZXMgd2UgaGF2ZSB0byBkbyBpdCBpbiAyIHN0ZXBzOgotCWV4dHJhY3RlZGNmPWAkU0VEIC1uIC1lICIkc2VkX2V4dHJhY3RjZiIgPCAiJHByb2dwYXRoImAKLQlldmFsICIkZXh0cmFjdGVkY2YiCi0gICAgICBlbHNlCi0JZnVuY19lcnJvciAiaWdub3JpbmcgdW5rbm93biB0YWcgJHRhZ25hbWUiCi0gICAgICBmaQotICAgICAgOzsKLSAgZXNhYworCSAgIyBFdmFsdWF0ZSB0aGUgY29uZmlndXJhdGlvbi4gIEJlIGNhcmVmdWwgdG8gcXVvdGUgdGhlIHBhdGgKKwkgICMgYW5kIHRoZSBzZWQgc2NyaXB0LCB0byBhdm9pZCBzcGxpdHRpbmcgb24gd2hpdGVzcGFjZSwgYnV0CisJICAjIGFsc28gZG9uJ3QgdXNlIG5vbi1wb3J0YWJsZSBxdW90ZXMgd2l0aGluIGJhY2txdW90ZXMgd2l0aGluCisJICAjIHF1b3RlcyB3ZSBoYXZlIHRvIGRvIGl0IGluIDIgc3RlcHM6CisJICBleHRyYWN0ZWRjZj1gJFNFRCAtbiAtZSAiJHNlZF9leHRyYWN0Y2YiIDwgIiRwcm9ncGF0aCJgCisJICBldmFsICIkZXh0cmFjdGVkY2YiCisgICAgICAgIGVsc2UKKwkgIGZ1bmNfZXJyb3IgImlnbm9yaW5nIHVua25vd24gdGFnICR0YWduYW1lIgorICAgICAgICBmaQorICAgICAgICA7OworICAgIGVzYWMKIH0KIAorCiAjIGZ1bmNfY2hlY2tfdmVyc2lvbl9tYXRjaAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgRW5zdXJlIHRoYXQgd2UgYXJlIHVzaW5nIG00IG1hY3JvcywgYW5kIGxpYnRvb2wgc2NyaXB0IGZyb20gdGhlIHNhbWUKICMgcmVsZWFzZSBvZiBsaWJ0b29sLgogZnVuY19jaGVja192ZXJzaW9uX21hdGNoICgpCiB7Ci0gIGlmIHRlc3QgIiRwYWNrYWdlX3JldmlzaW9uIiAhPSAiJG1hY3JvX3JldmlzaW9uIjsgdGhlbgotICAgIGlmIHRlc3QgIiRWRVJTSU9OIiAhPSAiJG1hY3JvX3ZlcnNpb24iOyB0aGVuCi0gICAgICBpZiB0ZXN0IC16ICIkbWFjcm9fdmVyc2lvbiI7IHRoZW4KLSAgICAgICAgY2F0ID4mMiA8PF9MVF9FT0YKKyAgICBpZiB0ZXN0ICIkcGFja2FnZV9yZXZpc2lvbiIgIT0gIiRtYWNyb19yZXZpc2lvbiI7IHRoZW4KKyAgICAgIGlmIHRlc3QgIiRWRVJTSU9OIiAhPSAiJG1hY3JvX3ZlcnNpb24iOyB0aGVuCisgICAgICAgIGlmIHRlc3QgLXogIiRtYWNyb192ZXJzaW9uIjsgdGhlbgorICAgICAgICAgIGNhdCA+JjIgPDxfTFRfRU9GCiAkcHJvZ25hbWU6IFZlcnNpb24gbWlzbWF0Y2ggZXJyb3IuICBUaGlzIGlzICRQQUNLQUdFICRWRVJTSU9OLCBidXQgdGhlCiAkcHJvZ25hbWU6IGRlZmluaXRpb24gb2YgdGhpcyBMVF9JTklUIGNvbWVzIGZyb20gYW4gb2xkZXIgcmVsZWFzZS4KICRwcm9nbmFtZTogWW91IHNob3VsZCByZWNyZWF0ZSBhY2xvY2FsLm00IHdpdGggbWFjcm9zIGZyb20gJFBBQ0tBR0UgJFZFUlNJT04KICRwcm9nbmFtZTogYW5kIHJ1biBhdXRvY29uZiBhZ2Fpbi4KIF9MVF9FT0YKLSAgICAgIGVsc2UKLSAgICAgICAgY2F0ID4mMiA8PF9MVF9FT0YKKyAgICAgICAgZWxzZQorICAgICAgICAgIGNhdCA+JjIgPDxfTFRfRU9GCiAkcHJvZ25hbWU6IFZlcnNpb24gbWlzbWF0Y2ggZXJyb3IuICBUaGlzIGlzICRQQUNLQUdFICRWRVJTSU9OLCBidXQgdGhlCiAkcHJvZ25hbWU6IGRlZmluaXRpb24gb2YgdGhpcyBMVF9JTklUIGNvbWVzIGZyb20gJFBBQ0tBR0UgJG1hY3JvX3ZlcnNpb24uCiAkcHJvZ25hbWU6IFlvdSBzaG91bGQgcmVjcmVhdGUgYWNsb2NhbC5tNCB3aXRoIG1hY3JvcyBmcm9tICRQQUNLQUdFICRWRVJTSU9OCiAkcHJvZ25hbWU6IGFuZCBydW4gYXV0b2NvbmYgYWdhaW4uCiBfTFRfRU9GCi0gICAgICBmaQotICAgIGVsc2UKLSAgICAgIGNhdCA+JjIgPDxfTFRfRU9GCisgICAgICAgIGZpCisgICAgICBlbHNlCisgICAgICAgIGNhdCA+JjIgPDxfTFRfRU9GCiAkcHJvZ25hbWU6IFZlcnNpb24gbWlzbWF0Y2ggZXJyb3IuICBUaGlzIGlzICRQQUNLQUdFICRWRVJTSU9OLCByZXZpc2lvbiAkcGFja2FnZV9yZXZpc2lvbiwKICRwcm9nbmFtZTogYnV0IHRoZSBkZWZpbml0aW9uIG9mIHRoaXMgTFRfSU5JVCBjb21lcyBmcm9tIHJldmlzaW9uICRtYWNyb19yZXZpc2lvbi4KICRwcm9nbmFtZTogWW91IHNob3VsZCByZWNyZWF0ZSBhY2xvY2FsLm00IHdpdGggbWFjcm9zIGZyb20gcmV2aXNpb24gJHBhY2thZ2VfcmV2aXNpb24KICRwcm9nbmFtZTogb2YgJFBBQ0tBR0UgJFZFUlNJT04gYW5kIHJ1biBhdXRvY29uZiBhZ2Fpbi4KIF9MVF9FT0YKLSAgICBmaQorICAgICAgZmkKIAotICAgIGV4aXQgJEVYSVRfTUlTTUFUQ0gKLSAgZmkKKyAgICAgIGV4aXQgJEVYSVRfTUlTTUFUQ0gKKyAgICBmaQogfQogCiAKLSMgU2hvcnRoYW5kIGZvciAtLW1vZGU9Zm9vLCBvbmx5IHZhbGlkIGFzIHRoZSBmaXJzdCBhcmd1bWVudAotY2FzZSAkMSBpbgotY2xlYW58Y2xlYXxjbGV8Y2wpCi0gIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIGNsZWFuICR7MSsiJEAifTsgc2hpZnQKLSAgOzsKLWNvbXBpbGV8Y29tcGlsfGNvbXBpfGNvbXB8Y29tfGNvfGMpCi0gIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIGNvbXBpbGUgJHsxKyIkQCJ9OyBzaGlmdAotICA7OwotZXhlY3V0ZXxleGVjdXR8ZXhlY3V8ZXhlY3xleGV8ZXh8ZSkKLSAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgZXhlY3V0ZSAkezErIiRAIn07IHNoaWZ0Ci0gIDs7Ci1maW5pc2h8ZmluaXN8ZmluaXxmaW58Zml8ZikKLSAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgZmluaXNoICR7MSsiJEAifTsgc2hpZnQKLSAgOzsKLWluc3RhbGx8aW5zdGFsfGluc3RhfGluc3R8aW5zfGlufGkpCi0gIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIGluc3RhbGwgJHsxKyIkQCJ9OyBzaGlmdAotICA7OwotbGlua3xsaW58bGl8bCkKLSAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgbGluayAkezErIiRAIn07IHNoaWZ0Ci0gIDs7Ci11bmluc3RhbGx8dW5pbnN0YWx8dW5pbnN0YXx1bmluc3R8dW5pbnN8dW5pbnx1bml8dW58dSkKLSAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgdW5pbnN0YWxsICR7MSsiJEAifTsgc2hpZnQKLSAgOzsKLWVzYWMKLQotCi0KLSMgT3B0aW9uIGRlZmF1bHRzOgotb3B0X2RlYnVnPToKLW9wdF9kcnlfcnVuPWZhbHNlCi1vcHRfY29uZmlnPWZhbHNlCi1vcHRfcHJlc2VydmVfZHVwX2RlcHM9ZmFsc2UKLW9wdF9mZWF0dXJlcz1mYWxzZQotb3B0X2ZpbmlzaD1mYWxzZQotb3B0X2hlbHA9ZmFsc2UKLW9wdF9oZWxwX2FsbD1mYWxzZQotb3B0X3NpbGVudD06Ci1vcHRfd2FybmluZz06Ci1vcHRfdmVyYm9zZT06Ci1vcHRfc2lsZW50PWZhbHNlCi1vcHRfdmVyYm9zZT1mYWxzZQotCi0KLSMgUGFyc2Ugb3B0aW9ucyBvbmNlLCB0aG9yb3VnaGx5LiAgVGhpcyBjb21lcyBhcyBzb29uIGFzIHBvc3NpYmxlIGluIHRoZQotIyBzY3JpcHQgdG8gbWFrZSB0aGluZ3MgbGlrZSBgLS12ZXJzaW9uJyBoYXBwZW4gYXMgcXVpY2tseSBhcyB3ZSBjYW4uCisjIGxpYnRvb2xfb3B0aW9uc19wcmVwIFtBUkddLi4uCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFByZXBhcmF0aW9uIGZvciBvcHRpb25zIHBhcnNlZCBieSBsaWJ0b29sLgorbGlidG9vbF9vcHRpb25zX3ByZXAgKCkKIHsKLSAgIyB0aGlzIGp1c3QgZWFzZXMgZXhpdCBoYW5kbGluZwotICB3aGlsZSB0ZXN0ICQjIC1ndCAwOyBkbwotICAgIG9wdD0iJDEiCi0gICAgc2hpZnQKLSAgICBjYXNlICRvcHQgaW4KLSAgICAgIC0tZGVidWd8LXgpCW9wdF9kZWJ1Zz0nc2V0IC14JwotCQkJZnVuY19lY2hvICJlbmFibGluZyBzaGVsbCB0cmFjZSBtb2RlIgotCQkJJG9wdF9kZWJ1ZwotCQkJOzsKLSAgICAgIC0tZHJ5LXJ1bnwtLWRyeXJ1bnwtbikKLQkJCW9wdF9kcnlfcnVuPToKLQkJCTs7Ci0gICAgICAtLWNvbmZpZykKLQkJCW9wdF9jb25maWc9OgotZnVuY19jb25maWcKLQkJCTs7Ci0gICAgICAtLWRsb3BlbnwtZGxvcGVuKQotCQkJb3B0YXJnPSIkMSIKLQkJCW9wdF9kbG9wZW49IiR7b3B0X2Rsb3Blbiskb3B0X2Rsb3BlbgotfSRvcHRhcmciCi0JCQlzaGlmdAotCQkJOzsKLSAgICAgIC0tcHJlc2VydmUtZHVwLWRlcHMpCi0JCQlvcHRfcHJlc2VydmVfZHVwX2RlcHM9OgotCQkJOzsKLSAgICAgIC0tZmVhdHVyZXMpCi0JCQlvcHRfZmVhdHVyZXM9OgotZnVuY19mZWF0dXJlcwotCQkJOzsKLSAgICAgIC0tZmluaXNoKQotCQkJb3B0X2ZpbmlzaD06Ci1zZXQgZHVtbXkgLS1tb2RlIGZpbmlzaCAkezErIiRAIn07IHNoaWZ0Ci0JCQk7OwotICAgICAgLS1oZWxwKQotCQkJb3B0X2hlbHA9OgotCQkJOzsKLSAgICAgIC0taGVscC1hbGwpCi0JCQlvcHRfaGVscF9hbGw9Ogotb3B0X2hlbHA9JzogaGVscC1hbGwnCi0JCQk7OwotICAgICAgLS1tb2RlKQotCQkJdGVzdCAkIyA9IDAgJiYgZnVuY19taXNzaW5nX2FyZyAkb3B0ICYmIGJyZWFrCi0JCQlvcHRhcmc9IiQxIgotCQkJb3B0X21vZGU9IiRvcHRhcmciCi1jYXNlICRvcHRhcmcgaW4KLSAgIyBWYWxpZCBtb2RlIGFyZ3VtZW50czoKLSAgY2xlYW58Y29tcGlsZXxleGVjdXRlfGZpbmlzaHxpbnN0YWxsfGxpbmt8cmVsaW5rfHVuaW5zdGFsbCkgOzsKKyAgICAkZGVidWdfbW9kZQogCi0gICMgQ2F0Y2ggYW55dGhpbmcgZWxzZSBhcyBhbiBlcnJvcgotICAqKSBmdW5jX2Vycm9yICJpbnZhbGlkIGFyZ3VtZW50IGZvciAkb3B0IgotICAgICBleGl0X2NtZD1leGl0Ci0gICAgIGJyZWFrCi0gICAgIDs7Ci1lc2FjCi0JCQlzaGlmdAotCQkJOzsKLSAgICAgIC0tbm8tc2lsZW50fC0tbm8tcXVpZXQpCi0JCQlvcHRfc2lsZW50PWZhbHNlCi1mdW5jX2FwcGVuZCBwcmVzZXJ2ZV9hcmdzICIgJG9wdCIKLQkJCTs7Ci0gICAgICAtLW5vLXdhcm5pbmd8LS1uby13YXJuKQotCQkJb3B0X3dhcm5pbmc9ZmFsc2UKLWZ1bmNfYXBwZW5kIHByZXNlcnZlX2FyZ3MgIiAkb3B0IgotCQkJOzsKLSAgICAgIC0tbm8tdmVyYm9zZSkKLQkJCW9wdF92ZXJib3NlPWZhbHNlCi1mdW5jX2FwcGVuZCBwcmVzZXJ2ZV9hcmdzICIgJG9wdCIKLQkJCTs7Ci0gICAgICAtLXNpbGVudHwtLXF1aWV0KQotCQkJb3B0X3NpbGVudD06Ci1mdW5jX2FwcGVuZCBwcmVzZXJ2ZV9hcmdzICIgJG9wdCIKLSAgICAgICAgb3B0X3ZlcmJvc2U9ZmFsc2UKLQkJCTs7Ci0gICAgICAtLXZlcmJvc2V8LXYpCi0JCQlvcHRfdmVyYm9zZT06Ci1mdW5jX2FwcGVuZCBwcmVzZXJ2ZV9hcmdzICIgJG9wdCIKLW9wdF9zaWxlbnQ9ZmFsc2UKLQkJCTs7Ci0gICAgICAtLXRhZykKLQkJCXRlc3QgJCMgPSAwICYmIGZ1bmNfbWlzc2luZ19hcmcgJG9wdCAmJiBicmVhawotCQkJb3B0YXJnPSIkMSIKLQkJCW9wdF90YWc9IiRvcHRhcmciCi1mdW5jX2FwcGVuZCBwcmVzZXJ2ZV9hcmdzICIgJG9wdCAkb3B0YXJnIgotZnVuY19lbmFibGVfdGFnICIkb3B0YXJnIgotCQkJc2hpZnQKLQkJCTs7CisgICAgIyBPcHRpb24gZGVmYXVsdHM6CisgICAgb3B0X2NvbmZpZz1mYWxzZQorICAgIG9wdF9kbG9wZW49CisgICAgb3B0X2RyeV9ydW49ZmFsc2UKKyAgICBvcHRfaGVscD1mYWxzZQorICAgIG9wdF9tb2RlPQorICAgIG9wdF9wcmVzZXJ2ZV9kdXBfZGVwcz1mYWxzZQorICAgIG9wdF9xdWlldD1mYWxzZQogCi0gICAgICAtXD98LWgpCQlmdW5jX3VzYWdlCQkJCTs7Ci0gICAgICAtLWhlbHApCQlmdW5jX2hlbHAJCQkJOzsKLSAgICAgIC0tdmVyc2lvbikJZnVuY192ZXJzaW9uCQkJCTs7CisgICAgbm9ub3B0PQorICAgIHByZXNlcnZlX2FyZ3M9CiAKLSAgICAgICMgU2VwYXJhdGUgb3B0YXJncyB0byBsb25nIG9wdGlvbnM6Ci0gICAgICAtLSo9KikKLQkJCWZ1bmNfc3BsaXRfbG9uZ19vcHQgIiRvcHQiCi0JCQlzZXQgZHVtbXkgIiRmdW5jX3NwbGl0X2xvbmdfb3B0X25hbWUiICIkZnVuY19zcGxpdF9sb25nX29wdF9hcmciICR7MSsiJEAifQotCQkJc2hpZnQKLQkJCTs7Ci0KLSAgICAgICMgU2VwYXJhdGUgbm9uLWFyZ3VtZW50IHNob3J0IG9wdGlvbnM6Ci0gICAgICAtXD8qfC1oKnwtbip8LXYqKQotCQkJZnVuY19zcGxpdF9zaG9ydF9vcHQgIiRvcHQiCi0JCQlzZXQgZHVtbXkgIiRmdW5jX3NwbGl0X3Nob3J0X29wdF9uYW1lIiAiLSRmdW5jX3NwbGl0X3Nob3J0X29wdF9hcmciICR7MSsiJEAifQotCQkJc2hpZnQKLQkJCTs7Ci0KLSAgICAgIC0tKQkJYnJlYWsJCQkJCTs7Ci0gICAgICAtKikJCWZ1bmNfZmF0YWxfaGVscCAidW5yZWNvZ25pemVkIG9wdGlvbiBcYCRvcHQnIiA7OwotICAgICAgKikJCXNldCBkdW1teSAiJG9wdCIgJHsxKyIkQCJ9OwlzaGlmdDsgYnJlYWsgIDs7CisgICAgIyBTaG9ydGhhbmQgZm9yIC0tbW9kZT1mb28sIG9ubHkgdmFsaWQgYXMgdGhlIGZpcnN0IGFyZ3VtZW50CisgICAgY2FzZSAkMSBpbgorICAgIGNsZWFufGNsZWF8Y2xlfGNsKQorICAgICAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgY2xlYW4gJHsxKyIkQCJ9OyBzaGlmdAorICAgICAgOzsKKyAgICBjb21waWxlfGNvbXBpbHxjb21waXxjb21wfGNvbXxjb3xjKQorICAgICAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgY29tcGlsZSAkezErIiRAIn07IHNoaWZ0CisgICAgICA7OworICAgIGV4ZWN1dGV8ZXhlY3V0fGV4ZWN1fGV4ZWN8ZXhlfGV4fGUpCisgICAgICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSBleGVjdXRlICR7MSsiJEAifTsgc2hpZnQKKyAgICAgIDs7CisgICAgZmluaXNofGZpbmlzfGZpbml8ZmlufGZpfGYpCisgICAgICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSBmaW5pc2ggJHsxKyIkQCJ9OyBzaGlmdAorICAgICAgOzsKKyAgICBpbnN0YWxsfGluc3RhbHxpbnN0YXxpbnN0fGluc3xpbnxpKQorICAgICAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgaW5zdGFsbCAkezErIiRAIn07IHNoaWZ0CisgICAgICA7OworICAgIGxpbmt8bGlufGxpfGwpCisgICAgICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSBsaW5rICR7MSsiJEAifTsgc2hpZnQKKyAgICAgIDs7CisgICAgdW5pbnN0YWxsfHVuaW5zdGFsfHVuaW5zdGF8dW5pbnN0fHVuaW5zfHVuaW58dW5pfHVufHUpCisgICAgICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSB1bmluc3RhbGwgJHsxKyIkQCJ9OyBzaGlmdAorICAgICAgOzsKICAgICBlc2FjCi0gIGRvbmUKIAotICAjIFZhbGlkYXRlIG9wdGlvbnM6Ci0KLSAgIyBzYXZlIGZpcnN0IG5vbi1vcHRpb24gYXJndW1lbnQKLSAgaWYgdGVzdCAiJCMiIC1ndCAwOyB0aGVuCi0gICAgbm9ub3B0PSIkb3B0IgotICAgIHNoaWZ0Ci0gIGZpCi0KLSAgIyBwcmVzZXJ2ZSAtLWRlYnVnCi0gIHRlc3QgIiRvcHRfZGVidWciID0gOiB8fCBmdW5jX2FwcGVuZCBwcmVzZXJ2ZV9hcmdzICIgLS1kZWJ1ZyIKLQotICBjYXNlICRob3N0IGluCi0gICAgKmN5Z3dpbiogfCAqbWluZ3cqIHwgKnB3MzIqIHwgKmNlZ2NjKikKLSAgICAgICMgZG9uJ3QgZWxpbWluYXRlIGR1cGxpY2F0aW9ucyBpbiAkcG9zdGRlcHMgYW5kICRwcmVkZXBzCi0gICAgICBvcHRfZHVwbGljYXRlX2NvbXBpbGVyX2dlbmVyYXRlZF9kZXBzPToKLSAgICAgIDs7Ci0gICAgKikKLSAgICAgIG9wdF9kdXBsaWNhdGVfY29tcGlsZXJfZ2VuZXJhdGVkX2RlcHM9JG9wdF9wcmVzZXJ2ZV9kdXBfZGVwcwotICAgICAgOzsKLSAgZXNhYwotCi0gICRvcHRfaGVscCB8fCB7Ci0gICAgIyBTYW5pdHkgY2hlY2tzIGZpcnN0OgotICAgIGZ1bmNfY2hlY2tfdmVyc2lvbl9tYXRjaAotCi0gICAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgIT0geWVzICYmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgIT0geWVzOyB0aGVuCi0gICAgICBmdW5jX2ZhdGFsX2NvbmZpZ3VyYXRpb24gIm5vdCBjb25maWd1cmVkIHRvIGJ1aWxkIGFueSBraW5kIG9mIGxpYnJhcnkiCi0gICAgZmkKLQotICAgICMgRGFyd2luIHN1Y2tzCi0gICAgZXZhbCBzdGRfc2hyZXh0PVwiJHNocmV4dF9jbWRzXCIKLQotICAgICMgT25seSBleGVjdXRlIG1vZGUgaXMgYWxsb3dlZCB0byBoYXZlIC1kbG9wZW4gZmxhZ3MuCi0gICAgaWYgdGVzdCAtbiAiJG9wdF9kbG9wZW4iICYmIHRlc3QgIiRvcHRfbW9kZSIgIT0gZXhlY3V0ZTsgdGhlbgotICAgICAgZnVuY19lcnJvciAidW5yZWNvZ25pemVkIG9wdGlvbiBcYC1kbG9wZW4nIgotICAgICAgJEVDSE8gIiRoZWxwIiAxPiYyCi0gICAgICBleGl0ICRFWElUX0ZBSUxVUkUKLSAgICBmaQotCi0gICAgIyBDaGFuZ2UgdGhlIGhlbHAgbWVzc2FnZSB0byBhIG1vZGUtc3BlY2lmaWMgb25lLgotICAgIGdlbmVyaWNfaGVscD0iJGhlbHAiCi0gICAgaGVscD0iVHJ5IFxgJHByb2duYW1lIC0taGVscCAtLW1vZGU9JG9wdF9tb2RlJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCi0gIH0KLQotCi0gICMgQmFpbCBpZiB0aGUgb3B0aW9ucyB3ZXJlIHNjcmV3ZWQKLSAgJGV4aXRfY21kICRFWElUX0ZBSUxVUkUKKyAgICAjIFBhc3MgYmFjayB0aGUgbGlzdCBvZiBvcHRpb25zLgorICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgJHsxKyIkQCJ9CisgICAgbGlidG9vbF9vcHRpb25zX3ByZXBfcmVzdWx0PSRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdAogfQorZnVuY19hZGRfaG9vayBmdW5jX29wdGlvbnNfcHJlcCBsaWJ0b29sX29wdGlvbnNfcHJlcAogCiAKKyMgbGlidG9vbF9wYXJzZV9vcHRpb25zIFtBUkddLi4uCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQcm92aWRlIGhhbmRsaW5nIGZvciBsaWJ0b29sIHNwZWNpZmljIG9wdGlvbnMuCitsaWJ0b29sX3BhcnNlX29wdGlvbnMgKCkKK3sKKyAgICAkZGVidWdfY21kCisKKyAgICAjIFBlcmZvcm0gb3VyIG93biBsb29wIHRvIGNvbnN1bWUgYXMgbWFueSBvcHRpb25zIGFzIHBvc3NpYmxlIGluCisgICAgIyBlYWNoIGl0ZXJhdGlvbi4KKyAgICB3aGlsZSB0ZXN0ICQjIC1ndCAwOyBkbworICAgICAgX0dfb3B0PSQxCisgICAgICBzaGlmdAorICAgICAgY2FzZSAkX0dfb3B0IGluCisgICAgICAgIC0tZHJ5LXJ1bnwtLWRyeXJ1bnwtbikKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wdF9kcnlfcnVuPToKKyAgICAgICAgICAgICAgICAgICAgICAgIDs7CisKKyAgICAgICAgLS1jb25maWcpICAgICAgIGZ1bmNfY29uZmlnIDs7CisKKyAgICAgICAgLS1kbG9wZW58LWRsb3BlbikKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wdF9kbG9wZW49IiR7b3B0X2Rsb3Blbiskb3B0X2Rsb3BlbgorfSQxIgorICAgICAgICAgICAgICAgICAgICAgICAgc2hpZnQKKyAgICAgICAgICAgICAgICAgICAgICAgIDs7CisKKyAgICAgICAgLS1wcmVzZXJ2ZS1kdXAtZGVwcykKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wdF9wcmVzZXJ2ZV9kdXBfZGVwcz06IDs7CisKKyAgICAgICAgLS1mZWF0dXJlcykgICAgIGZ1bmNfZmVhdHVyZXMgOzsKKworICAgICAgICAtLWZpbmlzaCkgICAgICAgc2V0IGR1bW15IC0tbW9kZSBmaW5pc2ggJHsxKyIkQCJ9OyBzaGlmdCA7OworCisgICAgICAgIC0taGVscCkgICAgICAgICBvcHRfaGVscD06IDs7CisKKyAgICAgICAgLS1oZWxwLWFsbCkgICAgIG9wdF9oZWxwPSc6IGhlbHAtYWxsJyA7OworCisgICAgICAgIC0tbW9kZSkgICAgICAgICB0ZXN0ICQjID0gMCAmJiBmdW5jX21pc3NpbmdfYXJnICRfR19vcHQgJiYgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wdF9tb2RlPSQxCisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICQxIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICMgVmFsaWQgbW9kZSBhcmd1bWVudHM6CisgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFufGNvbXBpbGV8ZXhlY3V0ZXxmaW5pc2h8aW5zdGFsbHxsaW5rfHJlbGlua3x1bmluc3RhbGwpIDs7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIyBDYXRjaCBhbnl0aGluZyBlbHNlIGFzIGFuIGVycm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICopIGZ1bmNfZXJyb3IgImludmFsaWQgYXJndW1lbnQgZm9yICRfR19vcHQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXRfY21kPWV4aXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgICAgICAgICAgIHNoaWZ0CisgICAgICAgICAgICAgICAgICAgICAgICA7OworCisgICAgICAgIC0tbm8tc2lsZW50fC0tbm8tcXVpZXQpCisgICAgICAgICAgICAgICAgICAgICAgICBvcHRfcXVpZXQ9ZmFsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmNfYXBwZW5kIHByZXNlcnZlX2FyZ3MgIiAkX0dfb3B0IgorICAgICAgICAgICAgICAgICAgICAgICAgOzsKKworICAgICAgICAtLW5vLXdhcm5pbmdzfC0tbm8td2FybmluZ3wtLW5vLXdhcm4pCisgICAgICAgICAgICAgICAgICAgICAgICBvcHRfd2FybmluZz1mYWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgZnVuY19hcHBlbmQgcHJlc2VydmVfYXJncyAiICRfR19vcHQiCisgICAgICAgICAgICAgICAgICAgICAgICA7OworCisgICAgICAgIC0tbm8tdmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wdF92ZXJib3NlPWZhbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBmdW5jX2FwcGVuZCBwcmVzZXJ2ZV9hcmdzICIgJF9HX29wdCIKKyAgICAgICAgICAgICAgICAgICAgICAgIDs7CisKKyAgICAgICAgLS1zaWxlbnR8LS1xdWlldCkKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wdF9xdWlldD06CisgICAgICAgICAgICAgICAgICAgICAgICBvcHRfdmVyYm9zZT1mYWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgZnVuY19hcHBlbmQgcHJlc2VydmVfYXJncyAiICRfR19vcHQiCisgICAgICAgICAgICAgICAgICAgICAgICA7OworCisgICAgICAgIC0tdGFnKSAgICAgICAgICB0ZXN0ICQjID0gMCAmJiBmdW5jX21pc3NpbmdfYXJnICRfR19vcHQgJiYgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wdF90YWc9JDEKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmNfYXBwZW5kIHByZXNlcnZlX2FyZ3MgIiAkX0dfb3B0ICQxIgorICAgICAgICAgICAgICAgICAgICAgICAgZnVuY19lbmFibGVfdGFnICIkMSIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNoaWZ0CisgICAgICAgICAgICAgICAgICAgICAgICA7OworCisgICAgICAgIC0tdmVyYm9zZXwtdikgICBvcHRfcXVpZXQ9ZmFsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wdF92ZXJib3NlPToKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmNfYXBwZW5kIHByZXNlcnZlX2FyZ3MgIiAkX0dfb3B0IgorICAgICAgICAgICAgICAgICAgICAgICAgOzsKKworCSMgQW4gb3B0aW9uIG5vdCBoYW5kbGVkIGJ5IHRoaXMgaG9vayBmdW5jdGlvbjoKKyAgICAgICAgKikJCXNldCBkdW1teSAiJF9HX29wdCIgJHsxKyIkQCJ9OwlzaGlmdDsgYnJlYWsgIDs7CisgICAgICBlc2FjCisgICAgZG9uZQorCisKKyAgICAjIHNhdmUgbW9kaWZpZWQgcG9zaXRpb25hbCBwYXJhbWV0ZXJzIGZvciBjYWxsZXIKKyAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICR7MSsiJEAifQorICAgIGxpYnRvb2xfcGFyc2Vfb3B0aW9uc19yZXN1bHQ9JGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0Cit9CitmdW5jX2FkZF9ob29rIGZ1bmNfcGFyc2Vfb3B0aW9ucyBsaWJ0b29sX3BhcnNlX29wdGlvbnMKKworCisKKyMgbGlidG9vbF92YWxpZGF0ZV9vcHRpb25zIFtBUkddLi4uCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQZXJmb3JtIGFueSBzYW5pdHkgY2hlY2tzIG9uIG9wdGlvbiBzZXR0aW5ncyBhbmQvb3IgdW5jb25zdW1lZAorIyBhcmd1bWVudHMuCitsaWJ0b29sX3ZhbGlkYXRlX29wdGlvbnMgKCkKK3sKKyAgICAjIHNhdmUgZmlyc3Qgbm9uLW9wdGlvbiBhcmd1bWVudAorICAgIGlmIHRlc3QgMCAtbHQgJCM7IHRoZW4KKyAgICAgIG5vbm9wdD0kMQorICAgICAgc2hpZnQKKyAgICBmaQorCisgICAgIyBwcmVzZXJ2ZSAtLWRlYnVnCisgICAgdGVzdCA6ID0gIiRkZWJ1Z19jbWQiIHx8IGZ1bmNfYXBwZW5kIHByZXNlcnZlX2FyZ3MgIiAtLWRlYnVnIgorCisgICAgY2FzZSAkaG9zdCBpbgorICAgICAgKmN5Z3dpbiogfCAqbWluZ3cqIHwgKnB3MzIqIHwgKmNlZ2NjKikKKyAgICAgICAgIyBkb24ndCBlbGltaW5hdGUgZHVwbGljYXRpb25zIGluICRwb3N0ZGVwcyBhbmQgJHByZWRlcHMKKyAgICAgICAgb3B0X2R1cGxpY2F0ZV9jb21waWxlcl9nZW5lcmF0ZWRfZGVwcz06CisgICAgICAgIDs7CisgICAgICAqKQorICAgICAgICBvcHRfZHVwbGljYXRlX2NvbXBpbGVyX2dlbmVyYXRlZF9kZXBzPSRvcHRfcHJlc2VydmVfZHVwX2RlcHMKKyAgICAgICAgOzsKKyAgICBlc2FjCisKKyAgICAkb3B0X2hlbHAgfHwgeworICAgICAgIyBTYW5pdHkgY2hlY2tzIGZpcnN0OgorICAgICAgZnVuY19jaGVja192ZXJzaW9uX21hdGNoCisKKyAgICAgIHRlc3QgeWVzICE9ICIkYnVpbGRfbGlidG9vbF9saWJzIiBcCisgICAgICAgICYmIHRlc3QgeWVzICE9ICIkYnVpbGRfb2xkX2xpYnMiIFwKKyAgICAgICAgJiYgZnVuY19mYXRhbF9jb25maWd1cmF0aW9uICJub3QgY29uZmlndXJlZCB0byBidWlsZCBhbnkga2luZCBvZiBsaWJyYXJ5IgorCisgICAgICAjIERhcndpbiBzdWNrcworICAgICAgZXZhbCBzdGRfc2hyZXh0PVwiJHNocmV4dF9jbWRzXCIKKworICAgICAgIyBPbmx5IGV4ZWN1dGUgbW9kZSBpcyBhbGxvd2VkIHRvIGhhdmUgLWRsb3BlbiBmbGFncy4KKyAgICAgIGlmIHRlc3QgLW4gIiRvcHRfZGxvcGVuIiAmJiB0ZXN0IGV4ZWN1dGUgIT0gIiRvcHRfbW9kZSI7IHRoZW4KKyAgICAgICAgZnVuY19lcnJvciAidW5yZWNvZ25pemVkIG9wdGlvbiAnLWRsb3BlbiciCisgICAgICAgICRFQ0hPICIkaGVscCIgMT4mMgorICAgICAgICBleGl0ICRFWElUX0ZBSUxVUkUKKyAgICAgIGZpCisKKyAgICAgICMgQ2hhbmdlIHRoZSBoZWxwIG1lc3NhZ2UgdG8gYSBtb2RlLXNwZWNpZmljIG9uZS4KKyAgICAgIGdlbmVyaWNfaGVscD0kaGVscAorICAgICAgaGVscD0iVHJ5ICckcHJvZ25hbWUgLS1oZWxwIC0tbW9kZT0kb3B0X21vZGUnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKKyAgICB9CisKKyAgICAjIFBhc3MgYmFjayB0aGUgdW5wYXJzZWQgYXJndW1lbnQgbGlzdAorICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgJHsxKyIkQCJ9CisgICAgbGlidG9vbF92YWxpZGF0ZV9vcHRpb25zX3Jlc3VsdD0kZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQKK30KK2Z1bmNfYWRkX2hvb2sgZnVuY192YWxpZGF0ZV9vcHRpb25zIGxpYnRvb2xfdmFsaWRhdGVfb3B0aW9ucworCisKKyMgUHJvY2VzcyBvcHRpb25zIGFzIGVhcmx5IGFzIHBvc3NpYmxlIHNvIHRoYXQgLS1oZWxwIGFuZCAtLXZlcnNpb24KKyMgY2FuIHJldHVybiBxdWlja2x5LgorZnVuY19vcHRpb25zICR7MSsiJEAifQorZXZhbCBzZXQgZHVtbXkgIiRmdW5jX29wdGlvbnNfcmVzdWx0Ijsgc2hpZnQKKwogCiAKICMjIC0tLS0tLS0tLS0tICMjCiAjIyAgICBNYWluLiAgICAjIwogIyMgLS0tLS0tLS0tLS0gIyMKIAorbWFnaWM9JyUlJU1BR0lDIHZhcmlhYmxlJSUlJworbWFnaWNfZXhlPSclJSVNQUdJQyBFWEUgdmFyaWFibGUlJSUnCisKKyMgR2xvYmFsIHZhcmlhYmxlcy4KK2V4dHJhY3RlZF9hcmNoaXZlcz0KK2V4dHJhY3RlZF9zZXJpYWw9MAorCisjIElmIHRoaXMgdmFyaWFibGUgaXMgc2V0IGluIGFueSBvZiB0aGUgYWN0aW9ucywgdGhlIGNvbW1hbmQgaW4gaXQKKyMgd2lsbCBiZSBleGVjZWQgYXQgdGhlIGVuZC4gIFRoaXMgcHJldmVudHMgaGVyZS1kb2N1bWVudHMgZnJvbSBiZWluZworIyBsZWZ0IG92ZXIgYnkgc2hlbGxzLgorZXhlY19jbWQ9CisKKworIyBBIGZ1bmN0aW9uIHRoYXQgaXMgdXNlZCB3aGVuIHRoZXJlIGlzIG5vIHByaW50IGJ1aWx0aW4gb3IgcHJpbnRmLgorZnVuY19mYWxsYmFja19lY2hvICgpCit7CisgIGV2YWwgJ2NhdCA8PF9MVEVDSE9fRU9GCiskMQorX0xURUNIT19FT0YnCit9CisKICMgZnVuY19sYWxpYl9wIGZpbGUKLSMgVHJ1ZSBpZmYgRklMRSBpcyBhIGxpYnRvb2wgYC5sYScgbGlicmFyeSBvciBgLmxvJyBvYmplY3QgZmlsZS4KKyMgVHJ1ZSBpZmYgRklMRSBpcyBhIGxpYnRvb2wgJy5sYScgbGlicmFyeSBvciAnLmxvJyBvYmplY3QgZmlsZS4KICMgVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGEgYmFzaWMgc2FuaXR5IGNoZWNrOyBpdCB3aWxsIGhhcmRseSBmbHVzaCBvdXQKICMgZGV0ZXJtaW5lZCBpbXBvc3RlcnMuCiBmdW5jX2xhbGliX3AgKCkKQEAgLTEyMzYsMTIgKzIzOTgsMTIgQEAKIH0KIAogIyBmdW5jX2xhbGliX3Vuc2FmZV9wIGZpbGUKLSMgVHJ1ZSBpZmYgRklMRSBpcyBhIGxpYnRvb2wgYC5sYScgbGlicmFyeSBvciBgLmxvJyBvYmplY3QgZmlsZS4KKyMgVHJ1ZSBpZmYgRklMRSBpcyBhIGxpYnRvb2wgJy5sYScgbGlicmFyeSBvciAnLmxvJyBvYmplY3QgZmlsZS4KICMgVGhpcyBmdW5jdGlvbiBpbXBsZW1lbnRzIHRoZSBzYW1lIGNoZWNrIGFzIGZ1bmNfbGFsaWJfcCB3aXRob3V0CiAjIHJlc29ydGluZyB0byBleHRlcm5hbCBwcm9ncmFtcy4gIFRvIHRoaXMgZW5kLCBpdCByZWRpcmVjdHMgc3RkaW4gYW5kCiAjIGNsb3NlcyBpdCBhZnRlcndhcmRzLCB3aXRob3V0IHNhdmluZyB0aGUgb3JpZ2luYWwgZmlsZSBkZXNjcmlwdG9yLgogIyBBcyBhIHNhZmV0eSBtZWFzdXJlLCB1c2UgaXQgb25seSB3aGVyZSBhIG5lZ2F0aXZlIHJlc3VsdCB3b3VsZCBiZQotIyBmYXRhbCBhbnl3YXkuICBXb3JrcyBpZiBgZmlsZScgZG9lcyBub3QgZXhpc3QuCisjIGZhdGFsIGFueXdheS4gIFdvcmtzIGlmICdmaWxlJyBkb2VzIG5vdCBleGlzdC4KIGZ1bmNfbGFsaWJfdW5zYWZlX3AgKCkKIHsKICAgICBsYWxpYl9wPW5vCkBAIC0xMjQ5LDEzICsyNDExLDEzIEBACiAJZm9yIGxhbGliX3BfbCBpbiAxIDIgMyA0CiAJZG8KIAkgICAgcmVhZCBsYWxpYl9wX2xpbmUKLQkgICAgY2FzZSAiJGxhbGliX3BfbGluZSIgaW4KKwkgICAgY2FzZSAkbGFsaWJfcF9saW5lIGluCiAJCVwjXCBHZW5lcmF0ZWRcIGJ5XCAqJFBBQ0tBR0UqICkgbGFsaWJfcD15ZXM7IGJyZWFrOzsKIAkgICAgZXNhYwogCWRvbmUKIAlleGVjIDA8JjUgNTwmLQogICAgIGZpCi0gICAgdGVzdCAiJGxhbGliX3AiID0geWVzCisgICAgdGVzdCB5ZXMgPSAiJGxhbGliX3AiCiB9CiAKICMgZnVuY19sdHdyYXBwZXJfc2NyaXB0X3AgZmlsZQpAQCAtMTI4OSw3ICsyNDUxLDcgQEAKIHsKICAgICBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICIkMSIgIiIgIi4iCiAgICAgZnVuY19zdHJpcG5hbWUgJycgJy5leGUnICIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCi0gICAgZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZV9yZXN1bHQ9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0LyRvYmpkaXIvJHtmdW5jX3N0cmlwbmFtZV9yZXN1bHR9X2x0c2h3cmFwcGVyIgorICAgIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0PSRmdW5jX2Rpcm5hbWVfcmVzdWx0LyRvYmpkaXIvJHtmdW5jX3N0cmlwbmFtZV9yZXN1bHR9X2x0c2h3cmFwcGVyCiB9CiAKICMgZnVuY19sdHdyYXBwZXJfcCBmaWxlCkBAIC0xMzA4LDExICsyNDcwLDEzIEBACiAjIEZBSUxfQ01EIG1heSByZWFkLWFjY2VzcyB0aGUgY3VycmVudCBjb21tYW5kIGluIHZhcmlhYmxlIENNRCEKIGZ1bmNfZXhlY3V0ZV9jbWRzICgpCiB7Ci0gICAgJG9wdF9kZWJ1ZworICAgICRkZWJ1Z19jbWQKKwogICAgIHNhdmVfaWZzPSRJRlM7IElGUz0nficKICAgICBmb3IgY21kIGluICQxOyBkbwotICAgICAgSUZTPSRzYXZlX2lmcworICAgICAgSUZTPSRzcCRubAogICAgICAgZXZhbCBjbWQ9XCIkY21kXCIKKyAgICAgIElGUz0kc2F2ZV9pZnMKICAgICAgIGZ1bmNfc2hvd19ldmFsICIkY21kIiAiJHsyLTp9IgogICAgIGRvbmUKICAgICBJRlM9JHNhdmVfaWZzCkBAIC0xMzI0LDEwICsyNDg4LDExIEBACiAjIE5vdGUgdGhhdCBpdCBpcyBub3QgbmVjZXNzYXJ5IG9uIGN5Z3dpbi9taW5ndyB0byBhcHBlbmQgYSBkb3QgdG8KICMgRklMRSBldmVuIGlmIGJvdGggRklMRSBhbmQgRklMRS5leGUgZXhpc3Q6IGF1dG9tYXRpYy1hcHBlbmQtLmV4ZQogIyBiZWhhdmlvciBoYXBwZW5zIG9ubHkgZm9yIGV4ZWMoMyksIG5vdCBmb3Igb3BlbigyKSEgIEFsc28sIHNvdXJjaW5nCi0jIGBGSUxFLicgZG9lcyBub3Qgd29yayBvbiBjeWd3aW4gbWFuYWdlZCBtb3VudHMuCisjICdGSUxFLicgZG9lcyBub3Qgd29yayBvbiBjeWd3aW4gbWFuYWdlZCBtb3VudHMuCiBmdW5jX3NvdXJjZSAoKQogewotICAgICRvcHRfZGVidWcKKyAgICAkZGVidWdfY21kCisKICAgICBjYXNlICQxIGluCiAgICAgKi8qIHwgKlxcKikJLiAiJDEiIDs7CiAgICAgKikJCS4gIi4vJDEiIDs7CkBAIC0xMzU0LDEwICsyNTE5LDEwIEBACiAjIHN0b3JlIHRoZSByZXN1bHQgaW50byBmdW5jX3JlcGxhY2Vfc3lzcm9vdF9yZXN1bHQuCiBmdW5jX3JlcGxhY2Vfc3lzcm9vdCAoKQogewotICBjYXNlICIkbHRfc3lzcm9vdDokMSIgaW4KKyAgY2FzZSAkbHRfc3lzcm9vdDokMSBpbgogICA/KjoiJGx0X3N5c3Jvb3QiKikKICAgICBmdW5jX3N0cmlwbmFtZSAiJGx0X3N5c3Jvb3QiICcnICIkMSIKLSAgICBmdW5jX3JlcGxhY2Vfc3lzcm9vdF9yZXN1bHQ9Ij0kZnVuY19zdHJpcG5hbWVfcmVzdWx0IgorICAgIGZ1bmNfcmVwbGFjZV9zeXNyb290X3Jlc3VsdD0nPSckZnVuY19zdHJpcG5hbWVfcmVzdWx0CiAgICAgOzsKICAgKikKICAgICAjIEluY2x1ZGluZyBubyBzeXNyb290LgpAQCAtMTM3NCw3ICsyNTM5LDggQEAKICMgYXJnIGlzIHVzdWFsbHkgb2YgdGhlIGZvcm0gJ2djYyAuLi4nCiBmdW5jX2luZmVyX3RhZyAoKQogewotICAgICRvcHRfZGVidWcKKyAgICAkZGVidWdfY21kCisKICAgICBpZiB0ZXN0IC1uICIkYXZhaWxhYmxlX3RhZ3MiICYmIHRlc3QgLXogIiR0YWduYW1lIjsgdGhlbgogICAgICAgQ0NfcXVvdGVkPQogICAgICAgZm9yIGFyZyBpbiAkQ0M7IGRvCkBAIC0xMzkzLDcgKzI1NTksNyBAQAogCWZvciB6IGluICRhdmFpbGFibGVfdGFnczsgZG8KIAkgIGlmICRHUkVQICJeIyAjIyMgQkVHSU4gTElCVE9PTCBUQUcgQ09ORklHOiAkeiQiIDwgIiRwcm9ncGF0aCIgPiAvZGV2L251bGw7IHRoZW4KIAkgICAgIyBFdmFsdWF0ZSB0aGUgY29uZmlndXJhdGlvbi4KLQkgICAgZXZhbCAiYCR7U0VEfSAtbiAtZSAnL14jICMjIyBCRUdJTiBMSUJUT09MIFRBRyBDT05GSUc6ICckeickLywvXiMgIyMjIEVORCBMSUJUT09MIFRBRyBDT05GSUc6ICckeickL3AnIDwgJHByb2dwYXRoYCIKKwkgICAgZXZhbCAiYCRTRUQgLW4gLWUgJy9eIyAjIyMgQkVHSU4gTElCVE9PTCBUQUcgQ09ORklHOiAnJHonJC8sL14jICMjIyBFTkQgTElCVE9PTCBUQUcgQ09ORklHOiAnJHonJC9wJyA8ICRwcm9ncGF0aGAiCiAJICAgIENDX3F1b3RlZD0KIAkgICAgZm9yIGFyZyBpbiAkQ0M7IGRvCiAJICAgICAgIyBEb3VibGUtcXVvdGUgYXJncyBjb250YWluaW5nIG90aGVyIHNoZWxsIG1ldGFjaGFyYWN0ZXJzLgpAQCAtMTQxOCw3ICsyNTg0LDcgQEAKIAkjIGxpbmUgb3B0aW9uIG11c3QgYmUgdXNlZC4KIAlpZiB0ZXN0IC16ICIkdGFnbmFtZSI7IHRoZW4KIAkgIGZ1bmNfZWNobyAidW5hYmxlIHRvIGluZmVyIHRhZ2dlZCBjb25maWd1cmF0aW9uIgotCSAgZnVuY19mYXRhbF9lcnJvciAic3BlY2lmeSBhIHRhZyB3aXRoIFxgLS10YWcnIgorCSAgZnVuY19mYXRhbF9lcnJvciAic3BlY2lmeSBhIHRhZyB3aXRoICctLXRhZyciCiAjCWVsc2UKICMJICBmdW5jX3ZlcmJvc2UgInVzaW5nICR0YWduYW1lIHRhZ2dlZCBjb25maWd1cmF0aW9uIgogCWZpCkBAIC0xNDM0LDE1ICsyNjAwLDE1IEBACiAjIGJ1dCBkb24ndCBjcmVhdGUgaXQgaWYgd2UncmUgZG9pbmcgYSBkcnkgcnVuLgogZnVuY193cml0ZV9saWJ0b29sX29iamVjdCAoKQogewotICAgIHdyaXRlX2xpYm9iaj0kezF9Ci0gICAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXM7IHRoZW4KLSAgICAgIHdyaXRlX2xvYmo9XCckezJ9XCcKKyAgICB3cml0ZV9saWJvYmo9JDEKKyAgICBpZiB0ZXN0IHllcyA9ICIkYnVpbGRfbGlidG9vbF9saWJzIjsgdGhlbgorICAgICAgd3JpdGVfbG9iaj1cJyQyXCcKICAgICBlbHNlCiAgICAgICB3cml0ZV9sb2JqPW5vbmUKICAgICBmaQogCi0gICAgaWYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IHllczsgdGhlbgotICAgICAgd3JpdGVfb2xkb2JqPVwnJHszfVwnCisgICAgaWYgdGVzdCB5ZXMgPSAiJGJ1aWxkX29sZF9saWJzIjsgdGhlbgorICAgICAgd3JpdGVfb2xkb2JqPVwnJDNcJwogICAgIGVsc2UKICAgICAgIHdyaXRlX29sZG9iaj1ub25lCiAgICAgZmkKQEAgLTE0NTAsNyArMjYxNiw3IEBACiAgICAgJG9wdF9kcnlfcnVuIHx8IHsKICAgICAgIGNhdCA+JHt3cml0ZV9saWJvYmp9VCA8PEVPRgogIyAkd3JpdGVfbGlib2JqIC0gYSBsaWJ0b29sIG9iamVjdCBmaWxlCi0jIEdlbmVyYXRlZCBieSAkUFJPR1JBTSAoR05VICRQQUNLQUdFJFRJTUVTVEFNUCkgJFZFUlNJT04KKyMgR2VuZXJhdGVkIGJ5ICRQUk9HUkFNIChHTlUgJFBBQ0tBR0UpICRWRVJTSU9OCiAjCiAjIFBsZWFzZSBETyBOT1QgZGVsZXRlIHRoaXMgZmlsZSEKICMgSXQgaXMgbmVjZXNzYXJ5IGZvciBsaW5raW5nIHRoZSBsaWJyYXJ5LgpAQCAtMTQ2Miw3ICsyNjI4LDcgQEAKIG5vbl9waWNfb2JqZWN0PSR3cml0ZV9vbGRvYmoKIAogRU9GCi0gICAgICAkTVYgIiR7d3JpdGVfbGlib2JqfVQiICIke3dyaXRlX2xpYm9ian0iCisgICAgICAkTVYgIiR7d3JpdGVfbGlib2JqfVQiICIkd3JpdGVfbGlib2JqIgogICAgIH0KIH0KIApAQCAtMTQ4Miw4ICsyNjQ4LDkgQEAKICMgYmUgZW1wdHkgb24gZXJyb3IgKG9yIHdoZW4gQVJHIGlzIGVtcHR5KQogZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMiAoKQogewotICAkb3B0X2RlYnVnCi0gIGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfcmVzdWx0PSIkMSIKKyAgJGRlYnVnX2NtZAorCisgIGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfcmVzdWx0PSQxCiAgIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgogICAgICMgVW5mb3J0dW5hdGVseSwgd2luZXBhdGggZG9lcyBub3QgZXhpdCB3aXRoIGEgbm9uLXplcm8gZXJyb3IgY29kZSwgc28gd2UKICAgICAjIGFyZSBmb3JjZWQgdG8gY2hlY2sgdGhlIGNvbnRlbnRzIG9mIHN0ZG91dC4gT24gdGhlIG90aGVyIGhhbmQsIGlmIHRoZQpAQCAtMTQ5MSw5ICsyNjU4LDkgQEAKICAgICAjICphbiBlcnJvciBtZXNzYWdlKiB0byBzdGRvdXQuIFNvIHdlIG11c3QgY2hlY2sgZm9yIGJvdGggZXJyb3IgY29kZSBvZgogICAgICMgemVybyBBTkQgbm9uLWVtcHR5IHN0ZG91dCwgd2hpY2ggZXhwbGFpbnMgdGhlIG9kZCBjb25zdHJ1Y3Rpb246CiAgICAgZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl90bXA9YHdpbmVwYXRoIC13ICIkMSIgMj4vZGV2L251bGxgCi0gICAgaWYgdGVzdCAiJD8iIC1lcSAwICYmIHRlc3QgLW4gIiR7ZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl90bXB9IjsgdGhlbgorICAgIGlmIHRlc3QgIiQ/IiAtZXEgMCAmJiB0ZXN0IC1uICIkZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl90bXAiOyB0aGVuCiAgICAgICBmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3Jlc3VsdD1gJEVDSE8gIiRmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3RtcCIgfAotICAgICAgICAkU0VEIC1lICIkbHRfc2VkX25haXZlX2JhY2tzbGFzaGlmeSJgCisgICAgICAgICRTRUQgLWUgIiRzZWRfbmFpdmVfYmFja3NsYXNoaWZ5ImAKICAgICBlbHNlCiAgICAgICBmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3Jlc3VsdD0KICAgICBmaQpAQCAtMTUxNCwxOCArMjY4MSwxOSBAQAogIyBhcmUgY29udmVydGlibGUsIHRoZW4gdGhlIHJlc3VsdCBtYXkgYmUgZW1wdHkuCiBmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyICgpCiB7Ci0gICRvcHRfZGVidWcKKyAgJGRlYnVnX2NtZAorCiAgICMgdW5mb3J0dW5hdGVseSwgd2luZXBhdGggZG9lc24ndCBjb252ZXJ0IHBhdGhzLCBvbmx5IGZpbGUgbmFtZXMKLSAgZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMl9yZXN1bHQ9IiIKKyAgZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMl9yZXN1bHQ9CiAgIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgogICAgIG9sZElGUz0kSUZTCiAgICAgSUZTPToKICAgICBmb3IgZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMl9mIGluICQxOyBkbwogICAgICAgSUZTPSRvbGRJRlMKICAgICAgIGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzIgIiRmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyX2YiCi0gICAgICBpZiB0ZXN0IC1uICIkZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl9yZXN1bHQiIDsgdGhlbgorICAgICAgaWYgdGVzdCAtbiAiJGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfcmVzdWx0IjsgdGhlbgogICAgICAgICBpZiB0ZXN0IC16ICIkZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMl9yZXN1bHQiOyB0aGVuCi0gICAgICAgICAgZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMl9yZXN1bHQ9IiRmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3Jlc3VsdCIKKyAgICAgICAgICBmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyX3Jlc3VsdD0kZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl9yZXN1bHQKICAgICAgICAgZWxzZQogICAgICAgICAgIGZ1bmNfYXBwZW5kIGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzJfcmVzdWx0ICI7JGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfcmVzdWx0IgogICAgICAgICBmaQpAQCAtMTU1NCw3ICsyNzIyLDggQEAKICMgZW52aXJvbm1lbnQgdmFyaWFibGU7IGRvIG5vdCBwdXQgaXQgaW4gJFBBVEguCiBmdW5jX2N5Z3BhdGggKCkKIHsKLSAgJG9wdF9kZWJ1ZworICAkZGVidWdfY21kCisKICAgaWYgdGVzdCAtbiAiJExUX0NZR1BBVEgiICYmIHRlc3QgLWYgIiRMVF9DWUdQQVRIIjsgdGhlbgogICAgIGZ1bmNfY3lncGF0aF9yZXN1bHQ9YCRMVF9DWUdQQVRIICIkQCIgMj4vZGV2L251bGxgCiAgICAgaWYgdGVzdCAiJD8iIC1uZSAwOyB0aGVuCkBAIC0xNTYzLDcgKzI3MzIsNyBAQAogICAgIGZpCiAgIGVsc2UKICAgICBmdW5jX2N5Z3BhdGhfcmVzdWx0PQotICAgIGZ1bmNfZXJyb3IgIkxUX0NZR1BBVEggaXMgZW1wdHkgb3Igc3BlY2lmaWVzIG5vbi1leGlzdGVudCBmaWxlOiBcYCRMVF9DWUdQQVRIJyIKKyAgICBmdW5jX2Vycm9yICJMVF9DWUdQQVRIIGlzIGVtcHR5IG9yIHNwZWNpZmllcyBub24tZXhpc3RlbnQgZmlsZTogJyRMVF9DWUdQQVRIJyIKICAgZmkKIH0KICNlbmQ6IGZ1bmNfY3lncGF0aApAQCAtMTU3NCwxMCArMjc0MywxMSBAQAogIyByZXN1bHQgaW4gZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzJfcmVzdWx0LgogZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzIgKCkKIHsKLSAgJG9wdF9kZWJ1ZworICAkZGVidWdfY21kCisKICAgIyBhd2t3YXJkOiBjbWQgYXBwZW5kcyBzcGFjZXMgdG8gcmVzdWx0CiAgIGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyX3Jlc3VsdD1gKCBjbWQgLy9jIGVjaG8gIiQxIiApIDI+L2Rldi9udWxsIHwKLSAgICAkU0VEIC1lICdzL1sgXSokLy8nIC1lICIkbHRfc2VkX25haXZlX2JhY2tzbGFzaGlmeSJgCisgICAgJFNFRCAtZSAncy9bIF0qJC8vJyAtZSAiJHNlZF9uYWl2ZV9iYWNrc2xhc2hpZnkiYAogfQogI2VuZDogZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzIKIApAQCAtMTU4OCwxMyArMjc1OCwxNCBAQAogIyBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQgdG8gQVJHMSkuCiBmdW5jX2NvbnZlcnRfZmlsZV9jaGVjayAoKQogewotICAkb3B0X2RlYnVnCi0gIGlmIHRlc3QgLXogIiQyIiAmJiB0ZXN0IC1uICIkMSIgOyB0aGVuCisgICRkZWJ1Z19jbWQKKworICBpZiB0ZXN0IC16ICIkMiIgJiYgdGVzdCAtbiAiJDEiOyB0aGVuCiAgICAgZnVuY19lcnJvciAiQ291bGQgbm90IGRldGVybWluZSBob3N0IGZpbGUgbmFtZSBjb3JyZXNwb25kaW5nIHRvIgotICAgIGZ1bmNfZXJyb3IgIiAgXGAkMSciCisgICAgZnVuY19lcnJvciAiICAnJDEnIgogICAgIGZ1bmNfZXJyb3IgIkNvbnRpbnVpbmcsIGJ1dCB1bmluc3RhbGxlZCBleGVjdXRhYmxlcyBtYXkgbm90IHdvcmsuIgogICAgICMgRmFsbGJhY2s6Ci0gICAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSIkMSIKKyAgICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9JDEKICAgZmkKIH0KICMgZW5kIGZ1bmNfY29udmVydF9maWxlX2NoZWNrCkBAIC0xNjA2LDEwICsyNzc3LDExIEBACiAjIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdCB0byBhIHNpbXBsaXN0aWMgZmFsbGJhY2sgdmFsdWUgKHNlZSBiZWxvdykuCiBmdW5jX2NvbnZlcnRfcGF0aF9jaGVjayAoKQogewotICAkb3B0X2RlYnVnCisgICRkZWJ1Z19jbWQKKwogICBpZiB0ZXN0IC16ICIkNCIgJiYgdGVzdCAtbiAiJDMiOyB0aGVuCiAgICAgZnVuY19lcnJvciAiQ291bGQgbm90IGRldGVybWluZSB0aGUgaG9zdCBwYXRoIGNvcnJlc3BvbmRpbmcgdG8iCi0gICAgZnVuY19lcnJvciAiICBcYCQzJyIKKyAgICBmdW5jX2Vycm9yICIgICckMyciCiAgICAgZnVuY19lcnJvciAiQ29udGludWluZywgYnV0IHVuaW5zdGFsbGVkIGV4ZWN1dGFibGVzIG1heSBub3Qgd29yay4iCiAgICAgIyBGYWxsYmFjay4gIFRoaXMgaXMgYSBkZWxpYmVyYXRlbHkgc2ltcGxpc3RpYyAiY29udmVyc2lvbiIgYW5kCiAgICAgIyBzaG91bGQgbm90IGJlICJpbXByb3ZlZCIuICBTZWUgbGlidG9vbC5pbmZvLgpAQCAtMTYxOCw3ICsyNzkwLDcgQEAKICAgICAgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD1gZWNobyAiJDMiIHwKICAgICAgICAgJFNFRCAtZSAiJGx0X3JlcGxhY2VfcGF0aHNlcF9jaGFycyJgCiAgICAgZWxzZQotICAgICAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkMyIKKyAgICAgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0kMwogICAgIGZpCiAgIGZpCiB9CkBAIC0xNjMwLDkgKzI4MDIsMTAgQEAKICMgYW5kIGFwcGVuZGluZyBSRVBMIGlmIE9SSUcgbWF0Y2hlcyBCQUNLUEFULgogZnVuY19jb252ZXJ0X3BhdGhfZnJvbnRfYmFja19wYXRoc2VwICgpCiB7Ci0gICRvcHRfZGVidWcKKyAgJGRlYnVnX2NtZAorCiAgIGNhc2UgJDQgaW4KLSAgJDEgKSBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9IiQzJGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCIKKyAgJDEgKSBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9JDMkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0CiAgICAgOzsKICAgZXNhYwogICBjYXNlICQ0IGluCkBAIC0xNjQ2LDcgKzI4MTksNyBAQAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMgJGJ1aWxkIHRvICRob3N0IEZJTEUgTkFNRSBDT05WRVJTSU9OIEZVTkNUSU9OUyAjCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBpbnZva2VkIHZpYSBgJHRvX2hvc3RfZmlsZV9jbWQgQVJHJworIyBpbnZva2VkIHZpYSAnJHRvX2hvc3RfZmlsZV9jbWQgQVJHJwogIwogIyBJbiBlYWNoIGNhc2UsIEFSRyBpcyB0aGUgcGF0aCB0byBiZSBjb252ZXJ0ZWQgZnJvbSAkYnVpbGQgdG8gJGhvc3QgZm9ybWF0LgogIyBSZXN1bHQgd2lsbCBiZSBhdmFpbGFibGUgaW4gJGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KQEAgLTE2NTcsNyArMjgzMCw4IEBACiAjIGluIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KIGZ1bmNfdG9faG9zdF9maWxlICgpCiB7Ci0gICRvcHRfZGVidWcKKyAgJGRlYnVnX2NtZAorCiAgICR0b19ob3N0X2ZpbGVfY21kICIkMSIKIH0KICMgZW5kIGZ1bmNfdG9faG9zdF9maWxlCkBAIC0xNjY5LDcgKzI4NDMsOCBAQAogIyBpbiAodGhlIGNvbW1hIHNlcGFyYXRlZCkgTEFaWSwgbm8gY29udmVyc2lvbiB0YWtlcyBwbGFjZS4KIGZ1bmNfdG9fdG9vbF9maWxlICgpCiB7Ci0gICRvcHRfZGVidWcKKyAgJGRlYnVnX2NtZAorCiAgIGNhc2UgLCQyLCBpbgogICAgICosIiR0b190b29sX2ZpbGVfY21kIiwqKQogICAgICAgZnVuY190b190b29sX2ZpbGVfcmVzdWx0PSQxCkBAIC0xNjg3LDcgKzI4NjIsNyBAQAogIyBDb3B5IEFSRyB0byBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCiBmdW5jX2NvbnZlcnRfZmlsZV9ub29wICgpCiB7Ci0gIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0iJDEiCisgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0kMQogfQogIyBlbmQgZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAogCkBAIC0xNjk4LDExICsyODczLDEyIEBACiAjIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyICgpCiB7Ci0gICRvcHRfZGVidWcKLSAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSIkMSIKKyAgJGRlYnVnX2NtZAorCisgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0kMQogICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KICAgICBmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMiAiJDEiCi0gICAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSIkZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzJfcmVzdWx0IgorICAgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0kZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzJfcmVzdWx0CiAgIGZpCiAgIGZ1bmNfY29udmVydF9maWxlX2NoZWNrICIkMSIgIiRmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQiCiB9CkBAIC0xNzE0LDggKzI4OTAsOSBAQAogIyBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCiBmdW5jX2NvbnZlcnRfZmlsZV9jeWd3aW5fdG9fdzMyICgpCiB7Ci0gICRvcHRfZGVidWcKLSAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSIkMSIKKyAgJGRlYnVnX2NtZAorCisgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0kMQogICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KICAgICAjIGJlY2F1c2UgJGJ1aWxkIGlzIGN5Z3dpbiwgd2UgY2FsbCAidGhlIiBjeWdwYXRoIGluICRQQVRIOyBubyBuZWVkIHRvIHVzZQogICAgICMgTFRfQ1lHUEFUSCBpbiB0aGlzIGNhc2UuCkBAIC0xNzMxLDExICsyOTA4LDEyIEBACiAjIGFuZCBhIHdvcmtpbmcgd2luZXBhdGguIFJldHVybnMgcmVzdWx0IGluIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KIGZ1bmNfY29udmVydF9maWxlX25peF90b193MzIgKCkKIHsKLSAgJG9wdF9kZWJ1ZwotICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9IiQxIgorICAkZGVidWdfY21kCisKKyAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSQxCiAgIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgogICAgIGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzIgIiQxIgotICAgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0iJGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfcmVzdWx0IgorICAgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0kZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl9yZXN1bHQKICAgZmkKICAgZnVuY19jb252ZXJ0X2ZpbGVfY2hlY2sgIiQxIiAiJGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdCIKIH0KQEAgLTE3NDcsMTIgKzI5MjUsMTMgQEAKICMgUmV0dXJucyByZXN1bHQgaW4gZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgogZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b19jeWd3aW4gKCkKIHsKLSAgJG9wdF9kZWJ1ZwotICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9IiQxIgorICAkZGVidWdfY21kCisKKyAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSQxCiAgIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgogICAgIGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyICIkMSIKICAgICBmdW5jX2N5Z3BhdGggLXUgIiRmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMl9yZXN1bHQiCi0gICAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSIkZnVuY19jeWdwYXRoX3Jlc3VsdCIKKyAgICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9JGZ1bmNfY3lncGF0aF9yZXN1bHQKICAgZmkKICAgZnVuY19jb252ZXJ0X2ZpbGVfY2hlY2sgIiQxIiAiJGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdCIKIH0KQEAgLTE3NjUsMTMgKzI5NDQsMTQgQEAKICMgaW4gZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgogZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX2N5Z3dpbiAoKQogewotICAkb3B0X2RlYnVnCi0gIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0iJDEiCisgICRkZWJ1Z19jbWQKKworICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9JDEKICAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCiAgICAgIyBjb252ZXJ0IGZyb20gKm5peCB0byB3MzIsIHRoZW4gdXNlIGN5Z3BhdGggdG8gY29udmVydCBmcm9tIHczMiB0byBjeWd3aW4uCiAgICAgZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMiAiJDEiCiAgICAgZnVuY19jeWdwYXRoIC11ICIkZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl9yZXN1bHQiCi0gICAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSIkZnVuY19jeWdwYXRoX3Jlc3VsdCIKKyAgICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9JGZ1bmNfY3lncGF0aF9yZXN1bHQKICAgZmkKICAgZnVuY19jb252ZXJ0X2ZpbGVfY2hlY2sgIiQxIiAiJGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdCIKIH0KQEAgLTE3ODEsNyArMjk2MSw3IEBACiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMgJGJ1aWxkIHRvICRob3N0IFBBVEggQ09OVkVSU0lPTiBGVU5DVElPTlMgIwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIGludm9rZWQgdmlhIGAkdG9faG9zdF9wYXRoX2NtZCBBUkcnCisjIGludm9rZWQgdmlhICckdG9faG9zdF9wYXRoX2NtZCBBUkcnCiAjCiAjIEluIGVhY2ggY2FzZSwgQVJHIGlzIHRoZSBwYXRoIHRvIGJlIGNvbnZlcnRlZCBmcm9tICRidWlsZCB0byAkaG9zdCBmb3JtYXQuCiAjIFRoZSByZXN1bHQgd2lsbCBiZSBhdmFpbGFibGUgaW4gJGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdC4KQEAgLTE4MDUsMTAgKzI5ODUsMTEgQEAKIHRvX2hvc3RfcGF0aF9jbWQ9CiBmdW5jX2luaXRfdG9faG9zdF9wYXRoX2NtZCAoKQogewotICAkb3B0X2RlYnVnCisgICRkZWJ1Z19jbWQKKwogICBpZiB0ZXN0IC16ICIkdG9faG9zdF9wYXRoX2NtZCI7IHRoZW4KICAgICBmdW5jX3N0cmlwbmFtZSAnZnVuY19jb252ZXJ0X2ZpbGVfJyAnJyAiJHRvX2hvc3RfZmlsZV9jbWQiCi0gICAgdG9faG9zdF9wYXRoX2NtZD0iZnVuY19jb252ZXJ0X3BhdGhfJHtmdW5jX3N0cmlwbmFtZV9yZXN1bHR9IgorICAgIHRvX2hvc3RfcGF0aF9jbWQ9ZnVuY19jb252ZXJ0X3BhdGhfJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAogICBmaQogfQogCkBAIC0xODE4LDcgKzI5OTksOCBAQAogIyBpbiBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQuCiBmdW5jX3RvX2hvc3RfcGF0aCAoKQogewotICAkb3B0X2RlYnVnCisgICRkZWJ1Z19jbWQKKwogICBmdW5jX2luaXRfdG9faG9zdF9wYXRoX2NtZAogICAkdG9faG9zdF9wYXRoX2NtZCAiJDEiCiB9CkBAIC0xODI5LDcgKzMwMTEsNyBAQAogIyBDb3B5IEFSRyB0byBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQuCiBmdW5jX2NvbnZlcnRfcGF0aF9ub29wICgpCiB7Ci0gIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0iJDEiCisgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0kMQogfQogIyBlbmQgZnVuY19jb252ZXJ0X3BhdGhfbm9vcAogCkBAIC0xODQwLDggKzMwMjIsOSBAQAogIyBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQuCiBmdW5jX2NvbnZlcnRfcGF0aF9tc3lzX3RvX3czMiAoKQogewotICAkb3B0X2RlYnVnCi0gIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0iJDEiCisgICRkZWJ1Z19jbWQKKworICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9JDEKICAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCiAgICAgIyBSZW1vdmUgbGVhZGluZyBhbmQgdHJhaWxpbmcgcGF0aCBzZXBhcmF0b3IgY2hhcmFjdGVycyBmcm9tIEFSRy4gIE1TWVMKICAgICAjIGJlaGF2aW9yIGlzIGluY29uc2lzdGVudCBoZXJlOyBjeWdwYXRoIHR1cm5zIHRoZW0gaW50byAnLjsnIGFuZCAnOy4nOwpAQCAtMTg0OSw3ICszMDMyLDcgQEAKICAgICBmdW5jX3N0cmlwbmFtZSA6IDogIiQxIgogICAgIGZ1bmNfdG9faG9zdF9wYXRoX3RtcDE9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAogICAgIGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyICIkZnVuY190b19ob3N0X3BhdGhfdG1wMSIKLSAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9IiRmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMl9yZXN1bHQiCisgICAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSRmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMl9yZXN1bHQKICAgICBmdW5jX2NvbnZlcnRfcGF0aF9jaGVjayA6ICI7IiBcCiAgICAgICAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiICIkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IgogICAgIGZ1bmNfY29udmVydF9wYXRoX2Zyb250X2JhY2tfcGF0aHNlcCAiOioiICIqOiIgIjsiICIkMSIKQEAgLTE4NjMsOCArMzA0Niw5IEBACiAjIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KIGZ1bmNfY29udmVydF9wYXRoX2N5Z3dpbl90b193MzIgKCkKIHsKLSAgJG9wdF9kZWJ1ZwotICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9IiQxIgorICAkZGVidWdfY21kCisKKyAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSQxCiAgIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgogICAgICMgU2VlIGZ1bmNfY29udmVydF9wYXRoX21zeXNfdG9fdzMyOgogICAgIGZ1bmNfc3RyaXBuYW1lIDogOiAiJDEiCkBAIC0xODgzLDE0ICszMDY3LDE1IEBACiAjIGEgd29ya2luZyB3aW5lcGF0aC4gIFJldHVybnMgcmVzdWx0IGluIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KIGZ1bmNfY29udmVydF9wYXRoX25peF90b193MzIgKCkKIHsKLSAgJG9wdF9kZWJ1ZwotICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9IiQxIgorICAkZGVidWdfY21kCisKKyAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSQxCiAgIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgogICAgICMgU2VlIGZ1bmNfY29udmVydF9wYXRoX21zeXNfdG9fdzMyOgogICAgIGZ1bmNfc3RyaXBuYW1lIDogOiAiJDEiCiAgICAgZnVuY190b19ob3N0X3BhdGhfdG1wMT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CiAgICAgZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMiAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiCi0gICAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMl9yZXN1bHQiCisgICAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSRmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyX3Jlc3VsdAogICAgIGZ1bmNfY29udmVydF9wYXRoX2NoZWNrIDogIjsiIFwKICAgICAgICIkZnVuY190b19ob3N0X3BhdGhfdG1wMSIgIiRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQiCiAgICAgZnVuY19jb252ZXJ0X3BhdGhfZnJvbnRfYmFja19wYXRoc2VwICI6KiIgIio6IiAiOyIgIiQxIgpAQCAtMTkwNCwxNSArMzA4OSwxNiBAQAogIyBSZXR1cm5zIHJlc3VsdCBpbiBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCiBmdW5jX2NvbnZlcnRfcGF0aF9tc3lzX3RvX2N5Z3dpbiAoKQogewotICAkb3B0X2RlYnVnCi0gIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0iJDEiCisgICRkZWJ1Z19jbWQKKworICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9JDEKICAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCiAgICAgIyBTZWUgZnVuY19jb252ZXJ0X3BhdGhfbXN5c190b193MzI6CiAgICAgZnVuY19zdHJpcG5hbWUgOiA6ICIkMSIKICAgICBmdW5jX3RvX2hvc3RfcGF0aF90bXAxPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKICAgICBmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMiAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiCiAgICAgZnVuY19jeWdwYXRoIC11IC1wICIkZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzJfcmVzdWx0IgotICAgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0iJGZ1bmNfY3lncGF0aF9yZXN1bHQiCisgICAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSRmdW5jX2N5Z3BhdGhfcmVzdWx0CiAgICAgZnVuY19jb252ZXJ0X3BhdGhfY2hlY2sgOiA6IFwKICAgICAgICIkZnVuY190b19ob3N0X3BhdGhfdG1wMSIgIiRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQiCiAgICAgZnVuY19jb252ZXJ0X3BhdGhfZnJvbnRfYmFja19wYXRoc2VwICI6KiIgIio6IiA6ICIkMSIKQEAgLTE5MjcsOCArMzExMyw5IEBACiAjIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KIGZ1bmNfY29udmVydF9wYXRoX25peF90b19jeWd3aW4gKCkKIHsKLSAgJG9wdF9kZWJ1ZwotICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9IiQxIgorICAkZGVidWdfY21kCisKKyAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSQxCiAgIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgogICAgICMgUmVtb3ZlIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHBhdGggc2VwYXJhdG9yIGNoYXJhY3RlcnMgZnJvbQogICAgICMgQVJHLiBtc3lzIGJlaGF2aW9yIGlzIGluY29uc2lzdGVudCBoZXJlLCBjeWdwYXRoIHR1cm5zIHRoZW0KQEAgLTE5MzcsNyArMzEyNCw3IEBACiAgICAgZnVuY190b19ob3N0X3BhdGhfdG1wMT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CiAgICAgZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMiAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiCiAgICAgZnVuY19jeWdwYXRoIC11IC1wICIkZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMl9yZXN1bHQiCi0gICAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkZnVuY19jeWdwYXRoX3Jlc3VsdCIKKyAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9JGZ1bmNfY3lncGF0aF9yZXN1bHQKICAgICBmdW5jX2NvbnZlcnRfcGF0aF9jaGVjayA6IDogXAogICAgICAgIiRmdW5jX3RvX2hvc3RfcGF0aF90bXAxIiAiJGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCIKICAgICBmdW5jX2NvbnZlcnRfcGF0aF9mcm9udF9iYWNrX3BhdGhzZXAgIjoqIiAiKjoiIDogIiQxIgpAQCAtMTk0NiwxMyArMzEzMywzMSBAQAogIyBlbmQgZnVuY19jb252ZXJ0X3BhdGhfbml4X3RvX2N5Z3dpbgogCiAKKyMgZnVuY19kbGxfZGVmX3AgRklMRQorIyBUcnVlIGlmZiBGSUxFIGlzIGEgV2luZG93cyBETEwgJy5kZWYnIGZpbGUuCisjIEtlZXAgaW4gc3luYyB3aXRoIF9MVF9ETExfREVGX1AgaW4gbGlidG9vbC5tNAorZnVuY19kbGxfZGVmX3AgKCkKK3sKKyAgJGRlYnVnX2NtZAorCisgIGZ1bmNfZGxsX2RlZl9wX3RtcD1gJFNFRCAtbiBcCisgICAgLWUgJ3MvXlsJIF0qLy8nIFwKKyAgICAtZSAnL15cKDsuKlwpKiQvZCcgXAorICAgIC1lICdzL15cKEVYUE9SVFNcfExJQlJBUllcKVwoWwkgXS4qXCkqJC9ERUYvcCcgXAorICAgIC1lIHEgXAorICAgICIkMSJgCisgIHRlc3QgREVGID0gIiRmdW5jX2RsbF9kZWZfcF90bXAiCit9CisKKwogIyBmdW5jX21vZGVfY29tcGlsZSBhcmcuLi4KIGZ1bmNfbW9kZV9jb21waWxlICgpCiB7Ci0gICAgJG9wdF9kZWJ1ZworICAgICRkZWJ1Z19jbWQKKwogICAgICMgR2V0IHRoZSBjb21waWxhdGlvbiBjb21tYW5kIGFuZCB0aGUgc291cmNlIGZpbGUuCiAgICAgYmFzZV9jb21waWxlPQotICAgIHNyY2ZpbGU9IiRub25vcHQiICAjICBhbHdheXMga2VlcCBhIG5vbi1lbXB0eSB2YWx1ZSBpbiAic3JjZmlsZSIKKyAgICBzcmNmaWxlPSRub25vcHQgICMgIGFsd2F5cyBrZWVwIGEgbm9uLWVtcHR5IHZhbHVlIGluICJzcmNmaWxlIgogICAgIHN1cHByZXNzX29wdD15ZXMKICAgICBzdXBwcmVzc19vdXRwdXQ9CiAgICAgYXJnX21vZGU9bm9ybWFsCkBAIC0xOTY1LDEyICszMTcwLDEyIEBACiAgICAgICBjYXNlICRhcmdfbW9kZSBpbgogICAgICAgYXJnICApCiAJIyBkbyBub3QgImNvbnRpbnVlIi4gIEluc3RlYWQsIGFkZCB0aGlzIHRvIGJhc2VfY29tcGlsZQotCWxhc3Rhcmc9IiRhcmciCisJbGFzdGFyZz0kYXJnCiAJYXJnX21vZGU9bm9ybWFsCiAJOzsKIAogICAgICAgdGFyZ2V0ICkKLQlsaWJvYmo9IiRhcmciCisJbGlib2JqPSRhcmcKIAlhcmdfbW9kZT1ub3JtYWwKIAljb250aW51ZQogCTs7CkBAIC0xOTgwLDcgKzMxODUsNyBAQAogCWNhc2UgJGFyZyBpbgogCS1vKQogCSAgdGVzdCAtbiAiJGxpYm9iaiIgJiYgXAotCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJ5b3UgY2Fubm90IHNwZWNpZnkgXGAtbycgbW9yZSB0aGFuIG9uY2UiCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgInlvdSBjYW5ub3Qgc3BlY2lmeSAnLW8nIG1vcmUgdGhhbiBvbmNlIgogCSAgYXJnX21vZGU9dGFyZ2V0CiAJICBjb250aW51ZQogCSAgOzsKQEAgLTIwMDksMTIgKzMyMTQsMTIgQEAKIAkgIGZ1bmNfc3RyaXBuYW1lICctV2MsJyAnJyAiJGFyZyIKIAkgIGFyZ3M9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAogCSAgbGFzdGFyZz0KLQkgIHNhdmVfaWZzPSIkSUZTIjsgSUZTPScsJworCSAgc2F2ZV9pZnM9JElGUzsgSUZTPSwKIAkgIGZvciBhcmcgaW4gJGFyZ3M7IGRvCi0JICAgIElGUz0iJHNhdmVfaWZzIgorCSAgICBJRlM9JHNhdmVfaWZzCiAJICAgIGZ1bmNfYXBwZW5kX3F1b3RlZCBsYXN0YXJnICIkYXJnIgogCSAgZG9uZQotCSAgSUZTPSIkc2F2ZV9pZnMiCisJICBJRlM9JHNhdmVfaWZzCiAJICBmdW5jX3N0cmlwbmFtZSAnICcgJycgIiRsYXN0YXJnIgogCSAgbGFzdGFyZz0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CiAKQEAgLTIwMjcsOCArMzIzMiw4IEBACiAJICAjIEFjY2VwdCB0aGUgY3VycmVudCBhcmd1bWVudCBhcyB0aGUgc291cmNlIGZpbGUuCiAJICAjIFRoZSBwcmV2aW91cyAic3JjZmlsZSIgYmVjb21lcyB0aGUgY3VycmVudCBhcmd1bWVudC4KIAkgICMKLQkgIGxhc3Rhcmc9IiRzcmNmaWxlIgotCSAgc3JjZmlsZT0iJGFyZyIKKwkgIGxhc3Rhcmc9JHNyY2ZpbGUKKwkgIHNyY2ZpbGU9JGFyZwogCSAgOzsKIAllc2FjICAjICBjYXNlICRhcmcKIAk7OwpAQCAtMjA0MywxMyArMzI0OCwxMyBAQAogICAgICAgZnVuY19mYXRhbF9lcnJvciAieW91IG11c3Qgc3BlY2lmeSBhbiBhcmd1bWVudCBmb3IgLVhjb21waWxlIgogICAgICAgOzsKICAgICB0YXJnZXQpCi0gICAgICBmdW5jX2ZhdGFsX2Vycm9yICJ5b3UgbXVzdCBzcGVjaWZ5IGEgdGFyZ2V0IHdpdGggXGAtbyciCisgICAgICBmdW5jX2ZhdGFsX2Vycm9yICJ5b3UgbXVzdCBzcGVjaWZ5IGEgdGFyZ2V0IHdpdGggJy1vJyIKICAgICAgIDs7CiAgICAgKikKICAgICAgICMgR2V0IHRoZSBuYW1lIG9mIHRoZSBsaWJyYXJ5IG9iamVjdC4KICAgICAgIHRlc3QgLXogIiRsaWJvYmoiICYmIHsKIAlmdW5jX2Jhc2VuYW1lICIkc3JjZmlsZSIKLQlsaWJvYmo9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKwlsaWJvYmo9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0CiAgICAgICB9CiAgICAgICA7OwogICAgIGVzYWMKQEAgLTIwNjksNyArMzI3NCw3IEBACiAgICAgY2FzZSAkbGlib2JqIGluCiAgICAgKi5sbykgZnVuY19sbzJvICIkbGlib2JqIjsgb2JqPSRmdW5jX2xvMm9fcmVzdWx0IDs7CiAgICAgKikKLSAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBkZXRlcm1pbmUgbmFtZSBvZiBsaWJyYXJ5IG9iamVjdCBmcm9tIFxgJGxpYm9iaiciCisgICAgICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZGV0ZXJtaW5lIG5hbWUgb2YgbGlicmFyeSBvYmplY3QgZnJvbSAnJGxpYm9iaiciCiAgICAgICA7OwogICAgIGVzYWMKIApAQCAtMjA3OCw4ICszMjgzLDggQEAKICAgICBmb3IgYXJnIGluICRsYXRlcjsgZG8KICAgICAgIGNhc2UgJGFyZyBpbgogICAgICAgLXNoYXJlZCkKLQl0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiAhPSB5ZXMgJiYgXAotCSAgZnVuY19mYXRhbF9jb25maWd1cmF0aW9uICJjYW4gbm90IGJ1aWxkIGEgc2hhcmVkIGxpYnJhcnkiCisJdGVzdCB5ZXMgPSAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgXAorCSAgfHwgZnVuY19mYXRhbF9jb25maWd1cmF0aW9uICJjYW5ub3QgYnVpbGQgYSBzaGFyZWQgbGlicmFyeSIKIAlidWlsZF9vbGRfbGlicz1ubwogCWNvbnRpbnVlCiAJOzsKQEAgLTIxMDUsMTcgKzMzMTAsMTcgQEAKICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkbGlib2JqIgogICAgIHRlc3QgIlgkbGlib2JqIiAhPSAiWCRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIgXAogICAgICAgJiYgJEVDSE8gIlgkbGlib2JqIiB8ICRHUkVQICdbXX4jXip7fTs8Pj8iJyInIicJICYoKXxgJFtdJyBcCi0gICAgICAmJiBmdW5jX3dhcm5pbmcgImxpYm9iaiBuYW1lIFxgJGxpYm9iaicgbWF5IG5vdCBjb250YWluIHNoZWxsIHNwZWNpYWwgY2hhcmFjdGVycy4iCisgICAgICAmJiBmdW5jX3dhcm5pbmcgImxpYm9iaiBuYW1lICckbGlib2JqJyBtYXkgbm90IGNvbnRhaW4gc2hlbGwgc3BlY2lhbCBjaGFyYWN0ZXJzLiIKICAgICBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICIkb2JqIiAiLyIgIiIKLSAgICBvYmpuYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCi0gICAgeGRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCi0gICAgbG9iaj0ke3hkaXJ9JG9iamRpci8kb2JqbmFtZQorICAgIG9iam5hbWU9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0CisgICAgeGRpcj0kZnVuY19kaXJuYW1lX3Jlc3VsdAorICAgIGxvYmo9JHhkaXIkb2JqZGlyLyRvYmpuYW1lCiAKICAgICB0ZXN0IC16ICIkYmFzZV9jb21waWxlIiAmJiBcCiAgICAgICBmdW5jX2ZhdGFsX2hlbHAgInlvdSBtdXN0IHNwZWNpZnkgYSBjb21waWxhdGlvbiBjb21tYW5kIgogCiAgICAgIyBEZWxldGUgYW55IGxlZnRvdmVyIGxpYnJhcnkgb2JqZWN0cy4KLSAgICBpZiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0geWVzOyB0aGVuCisgICAgaWYgdGVzdCB5ZXMgPSAiJGJ1aWxkX29sZF9saWJzIjsgdGhlbgogICAgICAgcmVtb3ZlbGlzdD0iJG9iaiAkbG9iaiAkbGlib2JqICR7bGlib2JqfVQiCiAgICAgZWxzZQogICAgICAgcmVtb3ZlbGlzdD0iJGxvYmogJGxpYm9iaiAke2xpYm9ian1UIgpAQCAtMjEyNywxNiArMzMzMiwxNiBAQAogICAgICAgcGljX21vZGU9ZGVmYXVsdAogICAgICAgOzsKICAgICBlc2FjCi0gICAgaWYgdGVzdCAiJHBpY19tb2RlIiA9IG5vICYmIHRlc3QgIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgIT0gcGFzc19hbGw7IHRoZW4KKyAgICBpZiB0ZXN0IG5vID0gIiRwaWNfbW9kZSIgJiYgdGVzdCBwYXNzX2FsbCAhPSAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIjsgdGhlbgogICAgICAgIyBub24tUElDIGNvZGUgaW4gc2hhcmVkIGxpYnJhcmllcyBpcyBub3Qgc3VwcG9ydGVkCiAgICAgICBwaWNfbW9kZT1kZWZhdWx0CiAgICAgZmkKIAogICAgICMgQ2FsY3VsYXRlIHRoZSBmaWxlbmFtZSBvZiB0aGUgb3V0cHV0IG9iamVjdCBpZiBjb21waWxlciBkb2VzCiAgICAgIyBub3Qgc3VwcG9ydCAtbyB3aXRoIC1jCi0gICAgaWYgdGVzdCAiJGNvbXBpbGVyX2NfbyIgPSBubzsgdGhlbgotICAgICAgb3V0cHV0X29iaj1gJEVDSE8gIiRzcmNmaWxlIiB8ICRTRUQgJ3MlXi4qLyUlOyBzJVwuW14uXSokJSUnYC4ke29iamV4dH0KLSAgICAgIGxvY2tmaWxlPSIkb3V0cHV0X29iai5sb2NrIgorICAgIGlmIHRlc3Qgbm8gPSAiJGNvbXBpbGVyX2NfbyI7IHRoZW4KKyAgICAgIG91dHB1dF9vYmo9YCRFQ0hPICIkc3JjZmlsZSIgfCAkU0VEICdzJV4uKi8lJTsgcyVcLlteLl0qJCUlJ2AuJG9iamV4dAorICAgICAgbG9ja2ZpbGU9JG91dHB1dF9vYmoubG9jawogICAgIGVsc2UKICAgICAgIG91dHB1dF9vYmo9CiAgICAgICBuZWVkX2xvY2tzPW5vCkBAIC0yMTQ1LDEyICszMzUwLDEyIEBACiAKICAgICAjIExvY2sgdGhpcyBjcml0aWNhbCBzZWN0aW9uIGlmIGl0IGlzIG5lZWRlZAogICAgICMgV2UgdXNlIHRoaXMgc2NyaXB0IGZpbGUgdG8gbWFrZSB0aGUgbGluaywgaXQgYXZvaWRzIGNyZWF0aW5nIGEgbmV3IGZpbGUKLSAgICBpZiB0ZXN0ICIkbmVlZF9sb2NrcyIgPSB5ZXM7IHRoZW4KKyAgICBpZiB0ZXN0IHllcyA9ICIkbmVlZF9sb2NrcyI7IHRoZW4KICAgICAgIHVudGlsICRvcHRfZHJ5X3J1biB8fCBsbiAiJHByb2dwYXRoIiAiJGxvY2tmaWxlIiAyPi9kZXYvbnVsbDsgZG8KIAlmdW5jX2VjaG8gIldhaXRpbmcgZm9yICRsb2NrZmlsZSB0byBiZSByZW1vdmVkIgogCXNsZWVwIDIKICAgICAgIGRvbmUKLSAgICBlbGlmIHRlc3QgIiRuZWVkX2xvY2tzIiA9IHdhcm47IHRoZW4KKyAgICBlbGlmIHRlc3Qgd2FybiA9ICIkbmVlZF9sb2NrcyI7IHRoZW4KICAgICAgIGlmIHRlc3QgLWYgIiRsb2NrZmlsZSI7IHRoZW4KIAkkRUNITyAiXAogKioqIEVSUk9SLCAkbG9ja2ZpbGUgZXhpc3RzIGFuZCBjb250YWluczoKQEAgLTIxNTgsNyArMzM2Myw3IEBACiAKIFRoaXMgaW5kaWNhdGVzIHRoYXQgYW5vdGhlciBwcm9jZXNzIGlzIHRyeWluZyB0byB1c2UgdGhlIHNhbWUKIHRlbXBvcmFyeSBvYmplY3QgZmlsZSwgYW5kIGxpYnRvb2wgY291bGQgbm90IHdvcmsgYXJvdW5kIGl0IGJlY2F1c2UKLXlvdXIgY29tcGlsZXIgZG9lcyBub3Qgc3VwcG9ydCBcYC1jJyBhbmQgXGAtbycgdG9nZXRoZXIuICBJZiB5b3UKK3lvdXIgY29tcGlsZXIgZG9lcyBub3Qgc3VwcG9ydCAnLWMnIGFuZCAnLW8nIHRvZ2V0aGVyLiAgSWYgeW91CiByZXBlYXQgdGhpcyBjb21waWxhdGlvbiwgaXQgbWF5IHN1Y2NlZWQsIGJ5IGNoYW5jZSwgYnV0IHlvdSBoYWQgYmV0dGVyCiBhdm9pZCBwYXJhbGxlbCBidWlsZHMgKG1ha2UgLWopIGluIHRoaXMgcGxhdGZvcm0sIG9yIGdldCBhIGJldHRlcgogY29tcGlsZXIuIgpAQCAtMjE4MCwxMSArMzM4NSwxMSBAQAogICAgIHFzcmNmaWxlPSRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdAogCiAgICAgIyBPbmx5IGJ1aWxkIGEgUElDIG9iamVjdCBpZiB3ZSBhcmUgYnVpbGRpbmcgbGlidG9vbCBsaWJyYXJpZXMuCi0gICAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXM7IHRoZW4KKyAgICBpZiB0ZXN0IHllcyA9ICIkYnVpbGRfbGlidG9vbF9saWJzIjsgdGhlbgogICAgICAgIyBXaXRob3V0IHRoaXMgYXNzaWdubWVudCwgYmFzZV9jb21waWxlIGdldHMgZW1wdGllZC4KICAgICAgIGZic2RfaGlkZW91c19zaF9idWc9JGJhc2VfY29tcGlsZQogCi0gICAgICBpZiB0ZXN0ICIkcGljX21vZGUiICE9IG5vOyB0aGVuCisgICAgICBpZiB0ZXN0IG5vICE9ICIkcGljX21vZGUiOyB0aGVuCiAJY29tbWFuZD0iJGJhc2VfY29tcGlsZSAkcXNyY2ZpbGUgJHBpY19mbGFnIgogICAgICAgZWxzZQogCSMgRG9uJ3QgYnVpbGQgUElDIGNvZGUKQEAgLTIyMDEsNyArMzQwNiw3IEBACiAgICAgICBmdW5jX3Nob3dfZXZhbF9sb2NhbGUgIiRjb21tYW5kIglcCiAgICAgICAgICAgJ3Rlc3QgLW4gIiRvdXRwdXRfb2JqIiAmJiAkUk0gJHJlbW92ZWxpc3Q7IGV4aXQgJEVYSVRfRkFJTFVSRScKIAotICAgICAgaWYgdGVzdCAiJG5lZWRfbG9ja3MiID0gd2FybiAmJgorICAgICAgaWYgdGVzdCB3YXJuID0gIiRuZWVkX2xvY2tzIiAmJgogCSB0ZXN0ICJYYGNhdCAkbG9ja2ZpbGUgMj4vZGV2L251bGxgIiAhPSAiWCRzcmNmaWxlIjsgdGhlbgogCSRFQ0hPICJcCiAqKiogRVJST1IsICRsb2NrZmlsZSBjb250YWluczoKQEAgLTIyMTIsNyArMzQxNyw3IEBACiAKIFRoaXMgaW5kaWNhdGVzIHRoYXQgYW5vdGhlciBwcm9jZXNzIGlzIHRyeWluZyB0byB1c2UgdGhlIHNhbWUKIHRlbXBvcmFyeSBvYmplY3QgZmlsZSwgYW5kIGxpYnRvb2wgY291bGQgbm90IHdvcmsgYXJvdW5kIGl0IGJlY2F1c2UKLXlvdXIgY29tcGlsZXIgZG9lcyBub3Qgc3VwcG9ydCBcYC1jJyBhbmQgXGAtbycgdG9nZXRoZXIuICBJZiB5b3UKK3lvdXIgY29tcGlsZXIgZG9lcyBub3Qgc3VwcG9ydCAnLWMnIGFuZCAnLW8nIHRvZ2V0aGVyLiAgSWYgeW91CiByZXBlYXQgdGhpcyBjb21waWxhdGlvbiwgaXQgbWF5IHN1Y2NlZWQsIGJ5IGNoYW5jZSwgYnV0IHlvdSBoYWQgYmV0dGVyCiBhdm9pZCBwYXJhbGxlbCBidWlsZHMgKG1ha2UgLWopIGluIHRoaXMgcGxhdGZvcm0sIG9yIGdldCBhIGJldHRlcgogY29tcGlsZXIuIgpAQCAtMjIyOCwyMCArMzQzMywyMCBAQAogICAgICAgZmkKIAogICAgICAgIyBBbGxvdyBlcnJvciBtZXNzYWdlcyBvbmx5IGZyb20gdGhlIGZpcnN0IGNvbXBpbGF0aW9uLgotICAgICAgaWYgdGVzdCAiJHN1cHByZXNzX29wdCIgPSB5ZXM7IHRoZW4KKyAgICAgIGlmIHRlc3QgeWVzID0gIiRzdXBwcmVzc19vcHQiOyB0aGVuCiAJc3VwcHJlc3Nfb3V0cHV0PScgPi9kZXYvbnVsbCAyPiYxJwogICAgICAgZmkKICAgICBmaQogCiAgICAgIyBPbmx5IGJ1aWxkIGEgcG9zaXRpb24tZGVwZW5kZW50IG9iamVjdCBpZiB3ZSBidWlsZCBvbGQgbGlicmFyaWVzLgotICAgIGlmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXM7IHRoZW4KLSAgICAgIGlmIHRlc3QgIiRwaWNfbW9kZSIgIT0geWVzOyB0aGVuCisgICAgaWYgdGVzdCB5ZXMgPSAiJGJ1aWxkX29sZF9saWJzIjsgdGhlbgorICAgICAgaWYgdGVzdCB5ZXMgIT0gIiRwaWNfbW9kZSI7IHRoZW4KIAkjIERvbid0IGJ1aWxkIFBJQyBjb2RlCiAJY29tbWFuZD0iJGJhc2VfY29tcGlsZSAkcXNyY2ZpbGUkcGllX2ZsYWciCiAgICAgICBlbHNlCiAJY29tbWFuZD0iJGJhc2VfY29tcGlsZSAkcXNyY2ZpbGUgJHBpY19mbGFnIgogICAgICAgZmkKLSAgICAgIGlmIHRlc3QgIiRjb21waWxlcl9jX28iID0geWVzOyB0aGVuCisgICAgICBpZiB0ZXN0IHllcyA9ICIkY29tcGlsZXJfY19vIjsgdGhlbgogCWZ1bmNfYXBwZW5kIGNvbW1hbmQgIiAtbyAkb2JqIgogICAgICAgZmkKIApAQCAtMjI1MCw3ICszNDU1LDcgQEAKICAgICAgIGZ1bmNfc2hvd19ldmFsX2xvY2FsZSAiJGNvbW1hbmQiIFwKICAgICAgICAgJyRvcHRfZHJ5X3J1biB8fCAkUk0gJHJlbW92ZWxpc3Q7IGV4aXQgJEVYSVRfRkFJTFVSRScKIAotICAgICAgaWYgdGVzdCAiJG5lZWRfbG9ja3MiID0gd2FybiAmJgorICAgICAgaWYgdGVzdCB3YXJuID0gIiRuZWVkX2xvY2tzIiAmJgogCSB0ZXN0ICJYYGNhdCAkbG9ja2ZpbGUgMj4vZGV2L251bGxgIiAhPSAiWCRzcmNmaWxlIjsgdGhlbgogCSRFQ0hPICJcCiAqKiogRVJST1IsICRsb2NrZmlsZSBjb250YWluczoKQEAgLTIyNjEsNyArMzQ2Niw3IEBACiAKIFRoaXMgaW5kaWNhdGVzIHRoYXQgYW5vdGhlciBwcm9jZXNzIGlzIHRyeWluZyB0byB1c2UgdGhlIHNhbWUKIHRlbXBvcmFyeSBvYmplY3QgZmlsZSwgYW5kIGxpYnRvb2wgY291bGQgbm90IHdvcmsgYXJvdW5kIGl0IGJlY2F1c2UKLXlvdXIgY29tcGlsZXIgZG9lcyBub3Qgc3VwcG9ydCBcYC1jJyBhbmQgXGAtbycgdG9nZXRoZXIuICBJZiB5b3UKK3lvdXIgY29tcGlsZXIgZG9lcyBub3Qgc3VwcG9ydCAnLWMnIGFuZCAnLW8nIHRvZ2V0aGVyLiAgSWYgeW91CiByZXBlYXQgdGhpcyBjb21waWxhdGlvbiwgaXQgbWF5IHN1Y2NlZWQsIGJ5IGNoYW5jZSwgYnV0IHlvdSBoYWQgYmV0dGVyCiBhdm9pZCBwYXJhbGxlbCBidWlsZHMgKG1ha2UgLWopIGluIHRoaXMgcGxhdGZvcm0sIG9yIGdldCBhIGJldHRlcgogY29tcGlsZXIuIgpAQCAtMjI4MSw3ICszNDg2LDcgQEAKICAgICAgIGZ1bmNfd3JpdGVfbGlidG9vbF9vYmplY3QgIiRsaWJvYmoiICIkb2JqZGlyLyRvYmpuYW1lIiAiJG9iam5hbWUiCiAKICAgICAgICMgVW5sb2NrIHRoZSBjcml0aWNhbCBzZWN0aW9uIGlmIGl0IHdhcyBsb2NrZWQKLSAgICAgIGlmIHRlc3QgIiRuZWVkX2xvY2tzIiAhPSBubzsgdGhlbgorICAgICAgaWYgdGVzdCBubyAhPSAiJG5lZWRfbG9ja3MiOyB0aGVuCiAJcmVtb3ZlbGlzdD0kbG9ja2ZpbGUKICAgICAgICAgJFJNICIkbG9ja2ZpbGUiCiAgICAgICBmaQpAQCAtMjI5MSw3ICszNDk2LDcgQEAKIH0KIAogJG9wdF9oZWxwIHx8IHsKLSAgdGVzdCAiJG9wdF9tb2RlIiA9IGNvbXBpbGUgJiYgZnVuY19tb2RlX2NvbXBpbGUgJHsxKyIkQCJ9CisgIHRlc3QgY29tcGlsZSA9ICIkb3B0X21vZGUiICYmIGZ1bmNfbW9kZV9jb21waWxlICR7MSsiJEAifQogfQogCiBmdW5jX21vZGVfaGVscCAoKQpAQCAtMjMxMSw3ICszNTE2LDcgQEAKIFJlbW92ZSBmaWxlcyBmcm9tIHRoZSBidWlsZCBkaXJlY3RvcnkuCiAKIFJNIGlzIHRoZSBuYW1lIG9mIHRoZSBwcm9ncmFtIHRvIHVzZSB0byBkZWxldGUgZmlsZXMgYXNzb2NpYXRlZCB3aXRoIGVhY2ggRklMRQotKHR5cGljYWxseSBcYC9iaW4vcm0nKS4gIFJNLU9QVElPTlMgYXJlIG9wdGlvbnMgKHN1Y2ggYXMgXGAtZicpIHRvIGJlIHBhc3NlZAorKHR5cGljYWxseSAnL2Jpbi9ybScpLiAgUk0tT1BUSU9OUyBhcmUgb3B0aW9ucyAoc3VjaCBhcyAnLWYnKSB0byBiZSBwYXNzZWQKIHRvIFJNLgogCiBJZiBGSUxFIGlzIGEgbGlidG9vbCBsaWJyYXJ5LCBvYmplY3Qgb3IgcHJvZ3JhbSwgYWxsIHRoZSBmaWxlcyBhc3NvY2lhdGVkCkBAIC0yMzMwLDE2ICszNTM1LDE2IEBACiAgIC1uby1zdXBwcmVzcyAgICAgIGRvIG5vdCBzdXBwcmVzcyBjb21waWxlciBvdXRwdXQgZm9yIG11bHRpcGxlIHBhc3NlcwogICAtcHJlZmVyLXBpYyAgICAgICB0cnkgdG8gYnVpbGQgUElDIG9iamVjdHMgb25seQogICAtcHJlZmVyLW5vbi1waWMgICB0cnkgdG8gYnVpbGQgbm9uLVBJQyBvYmplY3RzIG9ubHkKLSAgLXNoYXJlZCAgICAgICAgICAgZG8gbm90IGJ1aWxkIGEgXGAubycgZmlsZSBzdWl0YWJsZSBmb3Igc3RhdGljIGxpbmtpbmcKLSAgLXN0YXRpYyAgICAgICAgICAgb25seSBidWlsZCBhIFxgLm8nIGZpbGUgc3VpdGFibGUgZm9yIHN0YXRpYyBsaW5raW5nCisgIC1zaGFyZWQgICAgICAgICAgIGRvIG5vdCBidWlsZCBhICcubycgZmlsZSBzdWl0YWJsZSBmb3Igc3RhdGljIGxpbmtpbmcKKyAgLXN0YXRpYyAgICAgICAgICAgb25seSBidWlsZCBhICcubycgZmlsZSBzdWl0YWJsZSBmb3Igc3RhdGljIGxpbmtpbmcKICAgLVdjLEZMQUcgICAgICAgICAgcGFzcyBGTEFHIGRpcmVjdGx5IHRvIHRoZSBjb21waWxlcgogCi1DT01QSUxFLUNPTU1BTkQgaXMgYSBjb21tYW5kIHRvIGJlIHVzZWQgaW4gY3JlYXRpbmcgYSBcYHN0YW5kYXJkJyBvYmplY3QgZmlsZQorQ09NUElMRS1DT01NQU5EIGlzIGEgY29tbWFuZCB0byBiZSB1c2VkIGluIGNyZWF0aW5nIGEgJ3N0YW5kYXJkJyBvYmplY3QgZmlsZQogZnJvbSB0aGUgZ2l2ZW4gU09VUkNFRklMRS4KIAogVGhlIG91dHB1dCBmaWxlIG5hbWUgaXMgZGV0ZXJtaW5lZCBieSByZW1vdmluZyB0aGUgZGlyZWN0b3J5IGNvbXBvbmVudCBmcm9tCi1TT1VSQ0VGSUxFLCB0aGVuIHN1YnN0aXR1dGluZyB0aGUgQyBzb3VyY2UgY29kZSBzdWZmaXggXGAuYycgd2l0aCB0aGUKLWxpYnJhcnkgb2JqZWN0IHN1ZmZpeCwgXGAubG8nLiIKK1NPVVJDRUZJTEUsIHRoZW4gc3Vic3RpdHV0aW5nIHRoZSBDIHNvdXJjZSBjb2RlIHN1ZmZpeCAnLmMnIHdpdGggdGhlCitsaWJyYXJ5IG9iamVjdCBzdWZmaXgsICcubG8nLiIKICAgICAgICAgOzsKIAogICAgICAgZXhlY3V0ZSkKQEAgLTIzNTIsNyArMzU1Nyw3IEBACiAKICAgLWRsb3BlbiBGSUxFICAgICAgYWRkIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyBGSUxFIHRvIHRoZSBsaWJyYXJ5IHBhdGgKIAotVGhpcyBtb2RlIHNldHMgdGhlIGxpYnJhcnkgcGF0aCBlbnZpcm9ubWVudCB2YXJpYWJsZSBhY2NvcmRpbmcgdG8gXGAtZGxvcGVuJworVGhpcyBtb2RlIHNldHMgdGhlIGxpYnJhcnkgcGF0aCBlbnZpcm9ubWVudCB2YXJpYWJsZSBhY2NvcmRpbmcgdG8gJy1kbG9wZW4nCiBmbGFncy4KIAogSWYgYW55IG9mIHRoZSBBUkdTIGFyZSBsaWJ0b29sIGV4ZWN1dGFibGUgd3JhcHBlcnMsIHRoZW4gdGhleSBhcmUgdHJhbnNsYXRlZApAQCAtMjM3MSw3ICszNTc2LDcgQEAKIEVhY2ggTElCRElSIGlzIGEgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgbGlidG9vbCBsaWJyYXJpZXMuCiAKIFRoZSBjb21tYW5kcyB0aGF0IHRoaXMgbW9kZSBleGVjdXRlcyBtYXkgcmVxdWlyZSBzdXBlcnVzZXIgcHJpdmlsZWdlcy4gIFVzZQotdGhlIFxgLS1kcnktcnVuJyBvcHRpb24gaWYgeW91IGp1c3Qgd2FudCB0byBzZWUgd2hhdCB3b3VsZCBiZSBleGVjdXRlZC4iCit0aGUgJy0tZHJ5LXJ1bicgb3B0aW9uIGlmIHlvdSBqdXN0IHdhbnQgdG8gc2VlIHdoYXQgd291bGQgYmUgZXhlY3V0ZWQuIgogICAgICAgICA7OwogCiAgICAgICBpbnN0YWxsKQpAQCAtMjM4MSw3ICszNTg2LDcgQEAKIEluc3RhbGwgZXhlY3V0YWJsZXMgb3IgbGlicmFyaWVzLgogCiBJTlNUQUxMLUNPTU1BTkQgaXMgdGhlIGluc3RhbGxhdGlvbiBjb21tYW5kLiAgVGhlIGZpcnN0IGNvbXBvbmVudCBzaG91bGQgYmUKLWVpdGhlciB0aGUgXGBpbnN0YWxsJyBvciBcYGNwJyBwcm9ncmFtLgorZWl0aGVyIHRoZSAnaW5zdGFsbCcgb3IgJ2NwJyBwcm9ncmFtLgogCiBUaGUgZm9sbG93aW5nIGNvbXBvbmVudHMgb2YgSU5TVEFMTC1DT01NQU5EIGFyZSB0cmVhdGVkIHNwZWNpYWxseToKIApAQCAtMjQwNyw3ICszNjEyLDcgQEAKICAgLWF2b2lkLXZlcnNpb24gICAgZG8gbm90IGFkZCBhIHZlcnNpb24gc3VmZml4IGlmIHBvc3NpYmxlCiAgIC1iaW5kaXIgQklORElSICAgIHNwZWNpZnkgcGF0aCB0byBiaW5hcmllcyBkaXJlY3RvcnkgKGZvciBzeXN0ZW1zIHdoZXJlCiAgICAgICAgICAgICAgICAgICAgIGxpYnJhcmllcyBtdXN0IGJlIGZvdW5kIGluIHRoZSBQQVRIIHNldHRpbmcgYXQgcnVudGltZSkKLSAgLWRsb3BlbiBGSUxFICAgICAgXGAtZGxwcmVvcGVuJyBGSUxFIGlmIGl0IGNhbm5vdCBiZSBkbG9wZW5lZCBhdCBydW50aW1lCisgIC1kbG9wZW4gRklMRSAgICAgICctZGxwcmVvcGVuJyBGSUxFIGlmIGl0IGNhbm5vdCBiZSBkbG9wZW5lZCBhdCBydW50aW1lCiAgIC1kbHByZW9wZW4gRklMRSAgIGxpbmsgaW4gRklMRSBhbmQgYWRkIGl0cyBzeW1ib2xzIHRvIGx0X3ByZWxvYWRlZF9zeW1ib2xzCiAgIC1leHBvcnQtZHluYW1pYyAgIGFsbG93IHN5bWJvbHMgZnJvbSBPVVRQVVQtRklMRSB0byBiZSByZXNvbHZlZCB3aXRoIGRsc3ltKDMpCiAgIC1leHBvcnQtc3ltYm9scyBTWU1GSUxFCkBAIC0yNDQxLDIwICszNjQ2LDIwIEBACiAgIC1YbGlua2VyIEZMQUcgICAgIHBhc3MgbGlua2VyLXNwZWNpZmljIEZMQUcgZGlyZWN0bHkgdG8gdGhlIGxpbmtlcgogICAtWENDbGlua2VyIEZMQUcgICBwYXNzIGxpbmstc3BlY2lmaWMgRkxBRyB0byB0aGUgY29tcGlsZXIgZHJpdmVyIChDQykKIAotQWxsIG90aGVyIG9wdGlvbnMgKGFyZ3VtZW50cyBiZWdpbm5pbmcgd2l0aCBcYC0nKSBhcmUgaWdub3JlZC4KK0FsbCBvdGhlciBvcHRpb25zIChhcmd1bWVudHMgYmVnaW5uaW5nIHdpdGggJy0nKSBhcmUgaWdub3JlZC4KIAotRXZlcnkgb3RoZXIgYXJndW1lbnQgaXMgdHJlYXRlZCBhcyBhIGZpbGVuYW1lLiAgRmlsZXMgZW5kaW5nIGluIFxgLmxhJyBhcmUKK0V2ZXJ5IG90aGVyIGFyZ3VtZW50IGlzIHRyZWF0ZWQgYXMgYSBmaWxlbmFtZS4gIEZpbGVzIGVuZGluZyBpbiAnLmxhJyBhcmUKIHRyZWF0ZWQgYXMgdW5pbnN0YWxsZWQgbGlidG9vbCBsaWJyYXJpZXMsIG90aGVyIGZpbGVzIGFyZSBzdGFuZGFyZCBvciBsaWJyYXJ5CiBvYmplY3QgZmlsZXMuCiAKLUlmIHRoZSBPVVRQVVQtRklMRSBlbmRzIGluIFxgLmxhJywgdGhlbiBhIGxpYnRvb2wgbGlicmFyeSBpcyBjcmVhdGVkLAotb25seSBsaWJyYXJ5IG9iamVjdHMgKFxgLmxvJyBmaWxlcykgbWF5IGJlIHNwZWNpZmllZCwgYW5kIFxgLXJwYXRoJyBpcworSWYgdGhlIE9VVFBVVC1GSUxFIGVuZHMgaW4gJy5sYScsIHRoZW4gYSBsaWJ0b29sIGxpYnJhcnkgaXMgY3JlYXRlZCwKK29ubHkgbGlicmFyeSBvYmplY3RzICgnLmxvJyBmaWxlcykgbWF5IGJlIHNwZWNpZmllZCwgYW5kICctcnBhdGgnIGlzCiByZXF1aXJlZCwgZXhjZXB0IHdoZW4gY3JlYXRpbmcgYSBjb252ZW5pZW5jZSBsaWJyYXJ5LgogCi1JZiBPVVRQVVQtRklMRSBlbmRzIGluIFxgLmEnIG9yIFxgLmxpYicsIHRoZW4gYSBzdGFuZGFyZCBsaWJyYXJ5IGlzIGNyZWF0ZWQKLXVzaW5nIFxgYXInIGFuZCBcYHJhbmxpYicsIG9yIG9uIFdpbmRvd3MgdXNpbmcgXGBsaWInLgorSWYgT1VUUFVULUZJTEUgZW5kcyBpbiAnLmEnIG9yICcubGliJywgdGhlbiBhIHN0YW5kYXJkIGxpYnJhcnkgaXMgY3JlYXRlZAordXNpbmcgJ2FyJyBhbmQgJ3JhbmxpYicsIG9yIG9uIFdpbmRvd3MgdXNpbmcgJ2xpYicuCiAKLUlmIE9VVFBVVC1GSUxFIGVuZHMgaW4gXGAubG8nIG9yIFxgLiR7b2JqZXh0fScsIHRoZW4gYSByZWxvYWRhYmxlIG9iamVjdCBmaWxlCitJZiBPVVRQVVQtRklMRSBlbmRzIGluICcubG8nIG9yICcuJG9iamV4dCcsIHRoZW4gYSByZWxvYWRhYmxlIG9iamVjdCBmaWxlCiBpcyBjcmVhdGVkLCBvdGhlcndpc2UgYW4gZXhlY3V0YWJsZSBwcm9ncmFtIGlzIGNyZWF0ZWQuIgogICAgICAgICA7OwogCkBAIC0yNDY1LDcgKzM2NzAsNyBAQAogUmVtb3ZlIGxpYnJhcmllcyBmcm9tIGFuIGluc3RhbGxhdGlvbiBkaXJlY3RvcnkuCiAKIFJNIGlzIHRoZSBuYW1lIG9mIHRoZSBwcm9ncmFtIHRvIHVzZSB0byBkZWxldGUgZmlsZXMgYXNzb2NpYXRlZCB3aXRoIGVhY2ggRklMRQotKHR5cGljYWxseSBcYC9iaW4vcm0nKS4gIFJNLU9QVElPTlMgYXJlIG9wdGlvbnMgKHN1Y2ggYXMgXGAtZicpIHRvIGJlIHBhc3NlZAorKHR5cGljYWxseSAnL2Jpbi9ybScpLiAgUk0tT1BUSU9OUyBhcmUgb3B0aW9ucyAoc3VjaCBhcyAnLWYnKSB0byBiZSBwYXNzZWQKIHRvIFJNLgogCiBJZiBGSUxFIGlzIGEgbGlidG9vbCBsaWJyYXJ5LCBhbGwgdGhlIGZpbGVzIGFzc29jaWF0ZWQgd2l0aCBpdCBhcmUgZGVsZXRlZC4KQEAgLTI0NzMsMTcgKzM2NzgsMTcgQEAKICAgICAgICAgOzsKIAogICAgICAgKikKLSAgICAgICAgZnVuY19mYXRhbF9oZWxwICJpbnZhbGlkIG9wZXJhdGlvbiBtb2RlIFxgJG9wdF9tb2RlJyIKKyAgICAgICAgZnVuY19mYXRhbF9oZWxwICJpbnZhbGlkIG9wZXJhdGlvbiBtb2RlICckb3B0X21vZGUnIgogICAgICAgICA7OwogICAgIGVzYWMKIAogICAgIGVjaG8KLSAgICAkRUNITyAiVHJ5IFxgJHByb2duYW1lIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgb3RoZXIgbW9kZXMuIgorICAgICRFQ0hPICJUcnkgJyRwcm9nbmFtZSAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IG90aGVyIG1vZGVzLiIKIH0KIAogIyBOb3cgdGhhdCB3ZSd2ZSBjb2xsZWN0ZWQgYSBwb3NzaWJsZSAtLW1vZGUgYXJnLCBzaG93IGhlbHAgaWYgbmVjZXNzYXJ5CiBpZiAkb3B0X2hlbHA7IHRoZW4KLSAgaWYgdGVzdCAiJG9wdF9oZWxwIiA9IDo7IHRoZW4KKyAgaWYgdGVzdCA6ID0gIiRvcHRfaGVscCI7IHRoZW4KICAgICBmdW5jX21vZGVfaGVscAogICBlbHNlCiAgICAgewpAQCAtMjUxNiwxNiArMzcyMSwxNyBAQAogIyBmdW5jX21vZGVfZXhlY3V0ZSBhcmcuLi4KIGZ1bmNfbW9kZV9leGVjdXRlICgpCiB7Ci0gICAgJG9wdF9kZWJ1ZworICAgICRkZWJ1Z19jbWQKKwogICAgICMgVGhlIGZpcnN0IGFyZ3VtZW50IGlzIHRoZSBjb21tYW5kIG5hbWUuCi0gICAgY21kPSIkbm9ub3B0IgorICAgIGNtZD0kbm9ub3B0CiAgICAgdGVzdCAteiAiJGNtZCIgJiYgXAogICAgICAgZnVuY19mYXRhbF9oZWxwICJ5b3UgbXVzdCBzcGVjaWZ5IGEgQ09NTUFORCIKIAogICAgICMgSGFuZGxlIC1kbG9wZW4gZmxhZ3MgaW1tZWRpYXRlbHkuCiAgICAgZm9yIGZpbGUgaW4gJG9wdF9kbG9wZW47IGRvCiAgICAgICB0ZXN0IC1mICIkZmlsZSIgXAotCXx8IGZ1bmNfZmF0YWxfaGVscCAiXGAkZmlsZScgaXMgbm90IGEgZmlsZSIKKwl8fCBmdW5jX2ZhdGFsX2hlbHAgIickZmlsZScgaXMgbm90IGEgZmlsZSIKIAogICAgICAgZGlyPQogICAgICAgY2FzZSAkZmlsZSBpbgpAQCAtMjUzNSw3ICszNzQxLDcgQEAKIAogCSMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhpcyByZWFsbHkgaXMgYSBsaWJ0b29sIGFyY2hpdmUuCiAJZnVuY19sYWxpYl91bnNhZmVfcCAiJGZpbGUiIFwKLQkgIHx8IGZ1bmNfZmF0YWxfaGVscCAiXGAkbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCisJICB8fCBmdW5jX2ZhdGFsX2hlbHAgIickbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCiAKIAkjIFJlYWQgdGhlIGxpYnRvb2wgbGlicmFyeS4KIAlkbG5hbWU9CkBAIC0yNTQ2LDE4ICszNzUyLDE4IEBACiAJaWYgdGVzdCAteiAiJGRsbmFtZSI7IHRoZW4KIAkgICMgV2FybiBpZiBpdCB3YXMgYSBzaGFyZWQgbGlicmFyeS4KIAkgIHRlc3QgLW4gIiRsaWJyYXJ5X25hbWVzIiAmJiBcCi0JICAgIGZ1bmNfd2FybmluZyAiXGAkZmlsZScgd2FzIG5vdCBsaW5rZWQgd2l0aCBcYC1leHBvcnQtZHluYW1pYyciCisJICAgIGZ1bmNfd2FybmluZyAiJyRmaWxlJyB3YXMgbm90IGxpbmtlZCB3aXRoICctZXhwb3J0LWR5bmFtaWMnIgogCSAgY29udGludWUKIAlmaQogCiAJZnVuY19kaXJuYW1lICIkZmlsZSIgIiIgIi4iCi0JZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKwlkaXI9JGZ1bmNfZGlybmFtZV9yZXN1bHQKIAogCWlmIHRlc3QgLWYgIiRkaXIvJG9iamRpci8kZGxuYW1lIjsgdGhlbgogCSAgZnVuY19hcHBlbmQgZGlyICIvJG9iamRpciIKIAllbHNlCiAJICBpZiB0ZXN0ICEgLWYgIiRkaXIvJGRsbmFtZSI7IHRoZW4KLQkgICAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGZpbmQgXGAkZGxuYW1lJyBpbiBcYCRkaXInIG9yIFxgJGRpci8kb2JqZGlyJyIKKwkgICAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGZpbmQgJyRkbG5hbWUnIGluICckZGlyJyBvciAnJGRpci8kb2JqZGlyJyIKIAkgIGZpCiAJZmkKIAk7OwpAQCAtMjU2NSwxOCArMzc3MSwxOCBAQAogICAgICAgKi5sbykKIAkjIEp1c3QgYWRkIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgLmxvIGZpbGUuCiAJZnVuY19kaXJuYW1lICIkZmlsZSIgIiIgIi4iCi0JZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKwlkaXI9JGZ1bmNfZGlybmFtZV9yZXN1bHQKIAk7OwogCiAgICAgICAqKQotCWZ1bmNfd2FybmluZyAiXGAtZGxvcGVuJyBpcyBpZ25vcmVkIGZvciBub24tbGlidG9vbCBsaWJyYXJpZXMgYW5kIG9iamVjdHMiCisJZnVuY193YXJuaW5nICInLWRsb3BlbicgaXMgaWdub3JlZCBmb3Igbm9uLWxpYnRvb2wgbGlicmFyaWVzIGFuZCBvYmplY3RzIgogCWNvbnRpbnVlCiAJOzsKICAgICAgIGVzYWMKIAogICAgICAgIyBHZXQgdGhlIGFic29sdXRlIHBhdGhuYW1lLgogICAgICAgYWJzZGlyPWBjZCAiJGRpciIgJiYgcHdkYAotICAgICAgdGVzdCAtbiAiJGFic2RpciIgJiYgZGlyPSIkYWJzZGlyIgorICAgICAgdGVzdCAtbiAiJGFic2RpciIgJiYgZGlyPSRhYnNkaXIKIAogICAgICAgIyBOb3cgYWRkIHRoZSBkaXJlY3RvcnkgdG8gc2hsaWJwYXRoX3Zhci4KICAgICAgIGlmIGV2YWwgInRlc3QgLXogXCJcJCRzaGxpYnBhdGhfdmFyXCIiOyB0aGVuCkBAIC0yNTg4LDcgKzM3OTQsNyBAQAogCiAgICAgIyBUaGlzIHZhcmlhYmxlIHRlbGxzIHdyYXBwZXIgc2NyaXB0cyBqdXN0IHRvIHNldCBzaGxpYnBhdGhfdmFyCiAgICAgIyByYXRoZXIgdGhhbiBydW5uaW5nIHRoZWlyIHByb2dyYW1zLgotICAgIGxpYnRvb2xfZXhlY3V0ZV9tYWdpYz0iJG1hZ2ljIgorICAgIGxpYnRvb2xfZXhlY3V0ZV9tYWdpYz0kbWFnaWMKIAogICAgICMgQ2hlY2sgaWYgYW55IG9mIHRoZSBhcmd1bWVudHMgaXMgYSB3cmFwcGVyIHNjcmlwdC4KICAgICBhcmdzPQpAQCAtMjYwMSwxMiArMzgwNywxMiBAQAogCWlmIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdF9wICIkZmlsZSI7IHRoZW4KIAkgIGZ1bmNfc291cmNlICIkZmlsZSIKIAkgICMgVHJhbnNmb3JtIGFyZyB0byB3cmFwcGVkIG5hbWUuCi0JICBmaWxlPSIkcHJvZ2Rpci8kcHJvZ3JhbSIKKwkgIGZpbGU9JHByb2dkaXIvJHByb2dyYW0KIAllbGlmIGZ1bmNfbHR3cmFwcGVyX2V4ZWN1dGFibGVfcCAiJGZpbGUiOyB0aGVuCiAJICBmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lICIkZmlsZSIKIAkgIGZ1bmNfc291cmNlICIkZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZV9yZXN1bHQiCiAJICAjIFRyYW5zZm9ybSBhcmcgdG8gd3JhcHBlZCBuYW1lLgotCSAgZmlsZT0iJHByb2dkaXIvJHByb2dyYW0iCisJICBmaWxlPSRwcm9nZGlyLyRwcm9ncmFtCiAJZmkKIAk7OwogICAgICAgZXNhYwpAQCAtMjYxNCw3ICszODIwLDE1IEBACiAgICAgICBmdW5jX2FwcGVuZF9xdW90ZWQgYXJncyAiJGZpbGUiCiAgICAgZG9uZQogCi0gICAgaWYgdGVzdCAiWCRvcHRfZHJ5X3J1biIgPSBYZmFsc2U7IHRoZW4KKyAgICBpZiAkb3B0X2RyeV9ydW47IHRoZW4KKyAgICAgICMgRGlzcGxheSB3aGF0IHdvdWxkIGJlIGRvbmUuCisgICAgICBpZiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciI7IHRoZW4KKwlldmFsICJcJEVDSE8gXCJcJHNobGlicGF0aF92YXI9XCQkc2hsaWJwYXRoX3ZhclwiIgorCWVjaG8gImV4cG9ydCAkc2hsaWJwYXRoX3ZhciIKKyAgICAgIGZpCisgICAgICAkRUNITyAiJGNtZCRhcmdzIgorICAgICAgZXhpdCAkRVhJVF9TVUNDRVNTCisgICAgZWxzZQogICAgICAgaWYgdGVzdCAtbiAiJHNobGlicGF0aF92YXIiOyB0aGVuCiAJIyBFeHBvcnQgdGhlIHNobGlicGF0aF92YXIuCiAJZXZhbCAiZXhwb3J0ICRzaGxpYnBhdGhfdmFyIgpAQCAtMjYzMSwyNSArMzg0NSwxOCBAQAogICAgICAgZG9uZQogCiAgICAgICAjIE5vdyBwcmVwYXJlIHRvIGFjdHVhbGx5IGV4ZWMgdGhlIGNvbW1hbmQuCi0gICAgICBleGVjX2NtZD0iXCRjbWQkYXJncyIKLSAgICBlbHNlCi0gICAgICAjIERpc3BsYXkgd2hhdCB3b3VsZCBiZSBkb25lLgotICAgICAgaWYgdGVzdCAtbiAiJHNobGlicGF0aF92YXIiOyB0aGVuCi0JZXZhbCAiXCRFQ0hPIFwiXCRzaGxpYnBhdGhfdmFyPVwkJHNobGlicGF0aF92YXJcIiIKLQllY2hvICJleHBvcnQgJHNobGlicGF0aF92YXIiCi0gICAgICBmaQotICAgICAgJEVDSE8gIiRjbWQkYXJncyIKLSAgICAgIGV4aXQgJEVYSVRfU1VDQ0VTUworICAgICAgZXhlY19jbWQ9XCRjbWQkYXJncwogICAgIGZpCiB9CiAKLXRlc3QgIiRvcHRfbW9kZSIgPSBleGVjdXRlICYmIGZ1bmNfbW9kZV9leGVjdXRlICR7MSsiJEAifQordGVzdCBleGVjdXRlID0gIiRvcHRfbW9kZSIgJiYgZnVuY19tb2RlX2V4ZWN1dGUgJHsxKyIkQCJ9CiAKIAogIyBmdW5jX21vZGVfZmluaXNoIGFyZy4uLgogZnVuY19tb2RlX2ZpbmlzaCAoKQogewotICAgICRvcHRfZGVidWcKKyAgICAkZGVidWdfY21kCisKICAgICBsaWJzPQogICAgIGxpYmRpcnM9CiAgICAgYWRtaW5jbWRzPQpAQCAtMjY2MywxMSArMzg3MCwxMSBAQAogCWlmIGZ1bmNfbGFsaWJfdW5zYWZlX3AgIiRvcHQiOyB0aGVuCiAJICBmdW5jX2FwcGVuZCBsaWJzICIgJG9wdCIKIAllbHNlCi0JICBmdW5jX3dhcm5pbmcgIlxgJG9wdCcgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgorCSAgZnVuY193YXJuaW5nICInJG9wdCcgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgogCWZpCiAKICAgICAgIGVsc2UKLQlmdW5jX2ZhdGFsX2Vycm9yICJpbnZhbGlkIGFyZ3VtZW50IFxgJG9wdCciCisJZnVuY19mYXRhbF9lcnJvciAiaW52YWxpZCBhcmd1bWVudCAnJG9wdCciCiAgICAgICBmaQogICAgIGRvbmUKIApAQCAtMjY4MiwxMiArMzg4OSwxMiBAQAogICAgICAgIyBSZW1vdmUgc3lzcm9vdCByZWZlcmVuY2VzCiAgICAgICBpZiAkb3B0X2RyeV9ydW47IHRoZW4KICAgICAgICAgZm9yIGxpYiBpbiAkbGliczsgZG8KLSAgICAgICAgICBlY2hvICJyZW1vdmluZyByZWZlcmVuY2VzIHRvICRsdF9zeXNyb290IGFuZCBcYD0nIHByZWZpeGVzIGZyb20gJGxpYiIKKyAgICAgICAgICBlY2hvICJyZW1vdmluZyByZWZlcmVuY2VzIHRvICRsdF9zeXNyb290IGFuZCAnPScgcHJlZml4ZXMgZnJvbSAkbGliIgogICAgICAgICBkb25lCiAgICAgICBlbHNlCiAgICAgICAgIHRtcGRpcj1gZnVuY19ta3RlbXBkaXJgCiAgICAgICAgIGZvciBsaWIgaW4gJGxpYnM7IGRvCi0JICBzZWQgLWUgIiR7c3lzcm9vdF9jbWR9IHMvXChbICddLVtMUl1cKT0vXDEvZzsgcy9cKFsgJ11cKT0vXDEvZyIgJGxpYiBcCisJICBzZWQgLWUgIiRzeXNyb290X2NtZCBzL1woWyAnXS1bTFJdXCk9L1wxL2c7IHMvXChbICddXCk9L1wxL2ciICRsaWIgXAogCSAgICA+ICR0bXBkaXIvdG1wLWxhCiAJICBtdiAtZiAkdG1wZGlyL3RtcC1sYSAkbGliCiAJZG9uZQpAQCAtMjcxMiw3ICszOTE5LDcgQEAKICAgICBmaQogCiAgICAgIyBFeGl0IGhlcmUgaWYgdGhleSB3YW50ZWQgc2lsZW50IG1vZGUuCi0gICAgJG9wdF9zaWxlbnQgJiYgZXhpdCAkRVhJVF9TVUNDRVNTCisgICAgJG9wdF9xdWlldCAmJiBleGl0ICRFWElUX1NVQ0NFU1MKIAogICAgIGlmIHRlc3QgLW4gIiRmaW5pc2hfY21kcyRmaW5pc2hfZXZhbCIgJiYgdGVzdCAtbiAiJGxpYmRpcnMiOyB0aGVuCiAgICAgICBlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgpAQCAtMjcyMywyNyArMzkzMCwyNyBAQAogICAgICAgZWNobwogICAgICAgZWNobyAiSWYgeW91IGV2ZXIgaGFwcGVuIHRvIHdhbnQgdG8gbGluayBhZ2FpbnN0IGluc3RhbGxlZCBsaWJyYXJpZXMiCiAgICAgICBlY2hvICJpbiBhIGdpdmVuIGRpcmVjdG9yeSwgTElCRElSLCB5b3UgbXVzdCBlaXRoZXIgdXNlIGxpYnRvb2wsIGFuZCIKLSAgICAgIGVjaG8gInNwZWNpZnkgdGhlIGZ1bGwgcGF0aG5hbWUgb2YgdGhlIGxpYnJhcnksIG9yIHVzZSB0aGUgXGAtTExJQkRJUiciCisgICAgICBlY2hvICJzcGVjaWZ5IHRoZSBmdWxsIHBhdGhuYW1lIG9mIHRoZSBsaWJyYXJ5LCBvciB1c2UgdGhlICctTExJQkRJUiciCiAgICAgICBlY2hvICJmbGFnIGR1cmluZyBsaW5raW5nIGFuZCBkbyBhdCBsZWFzdCBvbmUgb2YgdGhlIGZvbGxvd2luZzoiCiAgICAgICBpZiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciI7IHRoZW4KLQllY2hvICIgICAtIGFkZCBMSUJESVIgdG8gdGhlIFxgJHNobGlicGF0aF92YXInIGVudmlyb25tZW50IHZhcmlhYmxlIgorCWVjaG8gIiAgIC0gYWRkIExJQkRJUiB0byB0aGUgJyRzaGxpYnBhdGhfdmFyJyBlbnZpcm9ubWVudCB2YXJpYWJsZSIKIAllY2hvICIgICAgIGR1cmluZyBleGVjdXRpb24iCiAgICAgICBmaQogICAgICAgaWYgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIjsgdGhlbgotCWVjaG8gIiAgIC0gYWRkIExJQkRJUiB0byB0aGUgXGAkcnVucGF0aF92YXInIGVudmlyb25tZW50IHZhcmlhYmxlIgorCWVjaG8gIiAgIC0gYWRkIExJQkRJUiB0byB0aGUgJyRydW5wYXRoX3ZhcicgZW52aXJvbm1lbnQgdmFyaWFibGUiCiAJZWNobyAiICAgICBkdXJpbmcgbGlua2luZyIKICAgICAgIGZpCiAgICAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyI7IHRoZW4KIAlsaWJkaXI9TElCRElSCiAJZXZhbCBmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgogCi0JJEVDSE8gIiAgIC0gdXNlIHRoZSBcYCRmbGFnJyBsaW5rZXIgZmxhZyIKKwkkRUNITyAiICAgLSB1c2UgdGhlICckZmxhZycgbGlua2VyIGZsYWciCiAgICAgICBmaQogICAgICAgaWYgdGVzdCAtbiAiJGFkbWluY21kcyI7IHRoZW4KIAkkRUNITyAiICAgLSBoYXZlIHlvdXIgc3lzdGVtIGFkbWluaXN0cmF0b3IgcnVuIHRoZXNlIGNvbW1hbmRzOiRhZG1pbmNtZHMiCiAgICAgICBmaQogICAgICAgaWYgdGVzdCAtZiAvZXRjL2xkLnNvLmNvbmY7IHRoZW4KLQllY2hvICIgICAtIGhhdmUgeW91ciBzeXN0ZW0gYWRtaW5pc3RyYXRvciBhZGQgTElCRElSIHRvIFxgL2V0Yy9sZC5zby5jb25mJyIKKwllY2hvICIgICAtIGhhdmUgeW91ciBzeXN0ZW0gYWRtaW5pc3RyYXRvciBhZGQgTElCRElSIHRvICcvZXRjL2xkLnNvLmNvbmYnIgogICAgICAgZmkKICAgICAgIGVjaG8KIApAQCAtMjc2MiwxOCArMzk2OSwyMCBAQAogICAgIGV4aXQgJEVYSVRfU1VDQ0VTUwogfQogCi10ZXN0ICIkb3B0X21vZGUiID0gZmluaXNoICYmIGZ1bmNfbW9kZV9maW5pc2ggJHsxKyIkQCJ9Cit0ZXN0IGZpbmlzaCA9ICIkb3B0X21vZGUiICYmIGZ1bmNfbW9kZV9maW5pc2ggJHsxKyIkQCJ9CiAKIAogIyBmdW5jX21vZGVfaW5zdGFsbCBhcmcuLi4KIGZ1bmNfbW9kZV9pbnN0YWxsICgpCiB7Ci0gICAgJG9wdF9kZWJ1ZworICAgICRkZWJ1Z19jbWQKKwogICAgICMgVGhlcmUgbWF5IGJlIGFuIG9wdGlvbmFsIHNoKDEpIGFyZ3VtZW50IGF0IHRoZSBiZWdpbm5pbmcgb2YKICAgICAjIGluc3RhbGxfcHJvZyAoZXNwZWNpYWxseSBvbiBXaW5kb3dzIE5UKS4KLSAgICBpZiB0ZXN0ICIkbm9ub3B0IiA9ICIkU0hFTEwiIHx8IHRlc3QgIiRub25vcHQiID0gL2Jpbi9zaCB8fAorICAgIGlmIHRlc3QgIiRTSEVMTCIgPSAiJG5vbm9wdCIgfHwgdGVzdCAvYmluL3NoID0gIiRub25vcHQiIHx8CiAgICAgICAgIyBBbGxvdyB0aGUgdXNlIG9mIEdOVSBzaHRvb2wncyBpbnN0YWxsIGNvbW1hbmQuCi0gICAgICAgY2FzZSAkbm9ub3B0IGluICpzaHRvb2wqKSA6OzsgKikgZmFsc2U7OyBlc2FjOyB0aGVuCisgICAgICAgY2FzZSAkbm9ub3B0IGluICpzaHRvb2wqKSA6OzsgKikgZmFsc2U7OyBlc2FjCisgICAgdGhlbgogICAgICAgIyBBZXN0aGV0aWNhbGx5IHF1b3RlIGl0LgogICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJG5vbm9wdCIKICAgICAgIGluc3RhbGxfcHJvZz0iJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0ICIKQEAgLTI4MDAsNyArNDAwOSw3IEBACiAgICAgb3B0cz0KICAgICBwcmV2PQogICAgIGluc3RhbGxfdHlwZT0KLSAgICBpc2Rpcj1ubworICAgIGlzZGlyPWZhbHNlCiAgICAgc3RyaXBtZT0KICAgICBub19tb2RlPToKICAgICBmb3IgYXJnCkBAIC0yODEzLDcgKzQwMjIsNyBAQAogICAgICAgZmkKIAogICAgICAgY2FzZSAkYXJnIGluCi0gICAgICAtZCkgaXNkaXI9eWVzIDs7CisgICAgICAtZCkgaXNkaXI9OiA7OwogICAgICAgLWYpCiAJaWYgJGluc3RhbGxfY3A7IHRoZW4gOjsgZWxzZQogCSAgcHJldj0kYXJnCkBAIC0yODMxLDcgKzQwNDAsNyBAQAogICAgICAgKikKIAkjIElmIHRoZSBwcmV2aW91cyBvcHRpb24gbmVlZGVkIGFuIGFyZ3VtZW50LCB0aGVuIHNraXAgaXQuCiAJaWYgdGVzdCAtbiAiJHByZXYiOyB0aGVuCi0JICBpZiB0ZXN0ICJ4JHByZXYiID0geC1tICYmIHRlc3QgLW4gIiRpbnN0YWxsX292ZXJyaWRlX21vZGUiOyB0aGVuCisJICBpZiB0ZXN0IFgtbSA9ICJYJHByZXYiICYmIHRlc3QgLW4gIiRpbnN0YWxsX292ZXJyaWRlX21vZGUiOyB0aGVuCiAJICAgIGFyZzI9JGluc3RhbGxfb3ZlcnJpZGVfbW9kZQogCSAgICBub19tb2RlPWZhbHNlCiAJICBmaQpAQCAtMjg1Niw3ICs0MDY1LDcgQEAKICAgICAgIGZ1bmNfZmF0YWxfaGVscCAieW91IG11c3Qgc3BlY2lmeSBhbiBpbnN0YWxsIHByb2dyYW0iCiAKICAgICB0ZXN0IC1uICIkcHJldiIgJiYgXAotICAgICAgZnVuY19mYXRhbF9oZWxwICJ0aGUgXGAkcHJldicgb3B0aW9uIHJlcXVpcmVzIGFuIGFyZ3VtZW50IgorICAgICAgZnVuY19mYXRhbF9oZWxwICJ0aGUgJyRwcmV2JyBvcHRpb24gcmVxdWlyZXMgYW4gYXJndW1lbnQiCiAKICAgICBpZiB0ZXN0IC1uICIkaW5zdGFsbF9vdmVycmlkZV9tb2RlIiAmJiAkbm9fbW9kZTsgdGhlbgogICAgICAgaWYgJGluc3RhbGxfY3A7IHRoZW4gOjsgZWxzZQpAQCAtMjg3OCwxOSArNDA4NywxOSBAQAogICAgIGRlc3Q9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAogCiAgICAgIyBDaGVjayB0byBzZWUgdGhhdCB0aGUgZGVzdGluYXRpb24gaXMgYSBkaXJlY3RvcnkuCi0gICAgdGVzdCAtZCAiJGRlc3QiICYmIGlzZGlyPXllcwotICAgIGlmIHRlc3QgIiRpc2RpciIgPSB5ZXM7IHRoZW4KLSAgICAgIGRlc3RkaXI9IiRkZXN0IgorICAgIHRlc3QgLWQgIiRkZXN0IiAmJiBpc2Rpcj06CisgICAgaWYgJGlzZGlyOyB0aGVuCisgICAgICBkZXN0ZGlyPSRkZXN0CiAgICAgICBkZXN0bmFtZT0KICAgICBlbHNlCiAgICAgICBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICIkZGVzdCIgIiIgIi4iCi0gICAgICBkZXN0ZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKLSAgICAgIGRlc3RuYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisgICAgICBkZXN0ZGlyPSRmdW5jX2Rpcm5hbWVfcmVzdWx0CisgICAgICBkZXN0bmFtZT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKIAogICAgICAgIyBOb3QgYSBkaXJlY3RvcnksIHNvIGNoZWNrIHRvIHNlZSB0aGF0IHRoZXJlIGlzIG9ubHkgb25lIGZpbGUgc3BlY2lmaWVkLgogICAgICAgc2V0IGR1bW15ICRmaWxlczsgc2hpZnQKICAgICAgIHRlc3QgIiQjIiAtZ3QgMSAmJiBcCi0JZnVuY19mYXRhbF9oZWxwICJcYCRkZXN0JyBpcyBub3QgYSBkaXJlY3RvcnkiCisJZnVuY19mYXRhbF9oZWxwICInJGRlc3QnIGlzIG5vdCBhIGRpcmVjdG9yeSIKICAgICBmaQogICAgIGNhc2UgJGRlc3RkaXIgaW4KICAgICBbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIDs7CkBAIC0yODk5LDcgKzQxMDgsNyBAQAogCWNhc2UgJGZpbGUgaW4KIAkqLmxvKSA7OwogCSopCi0JICBmdW5jX2ZhdGFsX2hlbHAgIlxgJGRlc3RkaXInIG11c3QgYmUgYW4gYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWUiCisJICBmdW5jX2ZhdGFsX2hlbHAgIickZGVzdGRpcicgbXVzdCBiZSBhbiBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZSIKIAkgIDs7CiAJZXNhYwogICAgICAgZG9uZQpAQCAtMjkwOCw3ICs0MTE3LDcgQEAKIAogICAgICMgVGhpcyB2YXJpYWJsZSB0ZWxscyB3cmFwcGVyIHNjcmlwdHMganVzdCB0byBzZXQgdmFyaWFibGVzIHJhdGhlcgogICAgICMgdGhhbiBydW5uaW5nIHRoZWlyIHByb2dyYW1zLgotICAgIGxpYnRvb2xfaW5zdGFsbF9tYWdpYz0iJG1hZ2ljIgorICAgIGxpYnRvb2xfaW5zdGFsbF9tYWdpYz0kbWFnaWMKIAogICAgIHN0YXRpY2xpYnM9CiAgICAgZnV0dXJlX2xpYmRpcnM9CkBAIC0yOTI4LDcgKzQxMzcsNyBAQAogCiAJIyBDaGVjayB0byBzZWUgdGhhdCB0aGlzIHJlYWxseSBpcyBhIGxpYnRvb2wgYXJjaGl2ZS4KIAlmdW5jX2xhbGliX3Vuc2FmZV9wICIkZmlsZSIgXAotCSAgfHwgZnVuY19mYXRhbF9oZWxwICJcYCRmaWxlJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCisJICB8fCBmdW5jX2ZhdGFsX2hlbHAgIickZmlsZScgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgogCiAJbGlicmFyeV9uYW1lcz0KIAlvbGRfbGlicmFyeT0KQEAgLTI5NTAsNyArNDE1OSw3IEBACiAJZmkKIAogCWZ1bmNfZGlybmFtZSAiJGZpbGUiICIvIiAiIgotCWRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisJZGlyPSRmdW5jX2Rpcm5hbWVfcmVzdWx0CiAJZnVuY19hcHBlbmQgZGlyICIkb2JqZGlyIgogCiAJaWYgdGVzdCAtbiAiJHJlbGlua19jb21tYW5kIjsgdGhlbgpAQCAtMjk2NCw3ICs0MTczLDcgQEAKIAkgICMgYXJlIGluc3RhbGxlZCBpbnRvICRsaWJkaXIvLi4vYmluIChjdXJyZW50bHksIHRoYXQgd29ya3MgZmluZSkKIAkgICMgYnV0IGl0J3Mgc29tZXRoaW5nIHRvIGtlZXAgYW4gZXllIG9uLgogCSAgdGVzdCAiJGluc3RfcHJlZml4X2RpciIgPSAiJGRlc3RkaXIiICYmIFwKLQkgICAgZnVuY19mYXRhbF9lcnJvciAiZXJyb3I6IGNhbm5vdCBpbnN0YWxsIFxgJGZpbGUnIHRvIGEgZGlyZWN0b3J5IG5vdCBlbmRpbmcgaW4gJGxpYmRpciIKKwkgICAgZnVuY19mYXRhbF9lcnJvciAiZXJyb3I6IGNhbm5vdCBpbnN0YWxsICckZmlsZScgdG8gYSBkaXJlY3Rvcnkgbm90IGVuZGluZyBpbiAkbGliZGlyIgogCiAJICBpZiB0ZXN0IC1uICIkaW5zdF9wcmVmaXhfZGlyIjsgdGhlbgogCSAgICAjIFN0aWNrIHRoZSBpbnN0X3ByZWZpeF9kaXIgZGF0YSBpbnRvIHRoZSBsaW5rIGNvbW1hbmQuCkBAIC0yOTczLDI5ICs0MTgyLDI5IEBACiAJICAgIHJlbGlua19jb21tYW5kPWAkRUNITyAiJHJlbGlua19jb21tYW5kIiB8ICRTRUQgInMlQGluc3RfcHJlZml4X2RpckAlJSJgCiAJICBmaQogCi0JICBmdW5jX3dhcm5pbmcgInJlbGlua2luZyBcYCRmaWxlJyIKKwkgIGZ1bmNfd2FybmluZyAicmVsaW5raW5nICckZmlsZSciCiAJICBmdW5jX3Nob3dfZXZhbCAiJHJlbGlua19jb21tYW5kIiBcCi0JICAgICdmdW5jX2ZhdGFsX2Vycm9yICJlcnJvcjogcmVsaW5rIFxgJGZpbGUnXCcnIHdpdGggdGhlIGFib3ZlIGNvbW1hbmQgYmVmb3JlIGluc3RhbGxpbmcgaXQiJworCSAgICAnZnVuY19mYXRhbF9lcnJvciAiZXJyb3I6IHJlbGluayAnXCcnJGZpbGUnXCcnIHdpdGggdGhlIGFib3ZlIGNvbW1hbmQgYmVmb3JlIGluc3RhbGxpbmcgaXQiJwogCWZpCiAKIAkjIFNlZSB0aGUgbmFtZXMgb2YgdGhlIHNoYXJlZCBsaWJyYXJ5LgogCXNldCBkdW1teSAkbGlicmFyeV9uYW1lczsgc2hpZnQKIAlpZiB0ZXN0IC1uICIkMSI7IHRoZW4KLQkgIHJlYWxuYW1lPSIkMSIKKwkgIHJlYWxuYW1lPSQxCiAJICBzaGlmdAogCi0JICBzcmNuYW1lPSIkcmVhbG5hbWUiCi0JICB0ZXN0IC1uICIkcmVsaW5rX2NvbW1hbmQiICYmIHNyY25hbWU9IiRyZWFsbmFtZSJUCisJICBzcmNuYW1lPSRyZWFsbmFtZQorCSAgdGVzdCAtbiAiJHJlbGlua19jb21tYW5kIiAmJiBzcmNuYW1lPSR7cmVhbG5hbWV9VAogCiAJICAjIEluc3RhbGwgdGhlIHNoYXJlZCBsaWJyYXJ5IGFuZCBidWlsZCB0aGUgc3ltbGlua3MuCiAJICBmdW5jX3Nob3dfZXZhbCAiJGluc3RhbGxfc2hhcmVkX3Byb2cgJGRpci8kc3JjbmFtZSAkZGVzdGRpci8kcmVhbG5hbWUiIFwKIAkgICAgICAnZXhpdCAkPycKLQkgIHRzdHJpcG1lPSIkc3RyaXBtZSIKKwkgIHRzdHJpcG1lPSRzdHJpcG1lCiAJICBjYXNlICRob3N0X29zIGluCiAJICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCiAJICAgIGNhc2UgJHJlYWxuYW1lIGluCiAJICAgICouZGxsLmEpCi0JICAgICAgdHN0cmlwbWU9IiIKKwkgICAgICB0c3RyaXBtZT0KIAkgICAgICA7OwogCSAgICBlc2FjCiAJICAgIDs7CkBAIC0zMDA2LDcgKzQyMTUsNyBAQAogCiAJICBpZiB0ZXN0ICIkIyIgLWd0IDA7IHRoZW4KIAkgICAgIyBEZWxldGUgdGhlIG9sZCBzeW1saW5rcywgYW5kIGNyZWF0ZSBuZXcgb25lcy4KLQkgICAgIyBUcnkgYGxuIC1zZicgZmlyc3QsIGJlY2F1c2UgdGhlIGBsbicgYmluYXJ5IG1pZ2h0IGRlcGVuZCBvbgorCSAgICAjIFRyeSAnbG4gLXNmJyBmaXJzdCwgYmVjYXVzZSB0aGUgJ2xuJyBiaW5hcnkgbWlnaHQgZGVwZW5kIG9uCiAJICAgICMgdGhlIHN5bWxpbmsgd2UgcmVwbGFjZSEgIFNvbGFyaXMgL2Jpbi9sbiBkb2VzIG5vdCB1bmRlcnN0YW5kIC1mLAogCSAgICAjIHNvIHdlIGFsc28gbmVlZCB0byB0cnkgcm0gJiYgbG4gLXMuCiAJICAgIGZvciBsaW5rbmFtZQpAQCAtMzAxNywxNCArNDIyNiwxNCBAQAogCSAgZmkKIAogCSAgIyBEbyBlYWNoIGNvbW1hbmQgaW4gdGhlIHBvc3RpbnN0YWxsIGNvbW1hbmRzLgotCSAgbGliPSIkZGVzdGRpci8kcmVhbG5hbWUiCisJICBsaWI9JGRlc3RkaXIvJHJlYWxuYW1lCiAJICBmdW5jX2V4ZWN1dGVfY21kcyAiJHBvc3RpbnN0YWxsX2NtZHMiICdleGl0ICQ/JwogCWZpCiAKIAkjIEluc3RhbGwgdGhlIHBzZXVkby1saWJyYXJ5IGZvciBpbmZvcm1hdGlvbiBwdXJwb3Nlcy4KIAlmdW5jX2Jhc2VuYW1lICIkZmlsZSIKLQluYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCi0JaW5zdG5hbWU9IiRkaXIvJG5hbWUiaQorCW5hbWU9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0CisJaW5zdG5hbWU9JGRpci8ke25hbWV9aQogCWZ1bmNfc2hvd19ldmFsICIkaW5zdGFsbF9wcm9nICRpbnN0bmFtZSAkZGVzdGRpci8kbmFtZSIgJ2V4aXQgJD8nCiAKIAkjIE1heWJlIGluc3RhbGwgdGhlIHN0YXRpYyBsaWJyYXJ5LCB0b28uCkBAIC0zMDM2LDExICs0MjQ1LDExIEBACiAKIAkjIEZpZ3VyZSBvdXQgZGVzdGluYXRpb24gZmlsZSBuYW1lLCBpZiBpdCB3YXNuJ3QgYWxyZWFkeSBzcGVjaWZpZWQuCiAJaWYgdGVzdCAtbiAiJGRlc3RuYW1lIjsgdGhlbgotCSAgZGVzdGZpbGU9IiRkZXN0ZGlyLyRkZXN0bmFtZSIKKwkgIGRlc3RmaWxlPSRkZXN0ZGlyLyRkZXN0bmFtZQogCWVsc2UKIAkgIGZ1bmNfYmFzZW5hbWUgIiRmaWxlIgotCSAgZGVzdGZpbGU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKLQkgIGRlc3RmaWxlPSIkZGVzdGRpci8kZGVzdGZpbGUiCisJICBkZXN0ZmlsZT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKKwkgIGRlc3RmaWxlPSRkZXN0ZGlyLyRkZXN0ZmlsZQogCWZpCiAKIAkjIERlZHVjZSB0aGUgbmFtZSBvZiB0aGUgZGVzdGluYXRpb24gb2xkLXN0eWxlIG9iamVjdCBmaWxlLgpAQCAtMzA1MCwxMSArNDI1OSwxMSBAQAogCSAgc3RhdGljZGVzdD0kZnVuY19sbzJvX3Jlc3VsdAogCSAgOzsKIAkqLiRvYmpleHQpCi0JICBzdGF0aWNkZXN0PSIkZGVzdGZpbGUiCisJICBzdGF0aWNkZXN0PSRkZXN0ZmlsZQogCSAgZGVzdGZpbGU9CiAJICA7OwogCSopCi0JICBmdW5jX2ZhdGFsX2hlbHAgImNhbm5vdCBjb3B5IGEgbGlidG9vbCBvYmplY3QgdG8gXGAkZGVzdGZpbGUnIgorCSAgZnVuY19mYXRhbF9oZWxwICJjYW5ub3QgY29weSBhIGxpYnRvb2wgb2JqZWN0IHRvICckZGVzdGZpbGUnIgogCSAgOzsKIAllc2FjCiAKQEAgLTMwNjMsNyArNDI3Miw3IEBACiAJICBmdW5jX3Nob3dfZXZhbCAiJGluc3RhbGxfcHJvZyAkZmlsZSAkZGVzdGZpbGUiICdleGl0ICQ/JwogCiAJIyBJbnN0YWxsIHRoZSBvbGQgb2JqZWN0IGlmIGVuYWJsZWQuCi0JaWYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IHllczsgdGhlbgorCWlmIHRlc3QgeWVzID0gIiRidWlsZF9vbGRfbGlicyI7IHRoZW4KIAkgICMgRGVkdWNlIHRoZSBuYW1lIG9mIHRoZSBvbGQtc3R5bGUgb2JqZWN0IGZpbGUuCiAJICBmdW5jX2xvMm8gIiRmaWxlIgogCSAgc3RhdGljb2JqPSRmdW5jX2xvMm9fcmVzdWx0CkBAIC0zMDc1LDIzICs0Mjg0LDIzIEBACiAgICAgICAqKQogCSMgRmlndXJlIG91dCBkZXN0aW5hdGlvbiBmaWxlIG5hbWUsIGlmIGl0IHdhc24ndCBhbHJlYWR5IHNwZWNpZmllZC4KIAlpZiB0ZXN0IC1uICIkZGVzdG5hbWUiOyB0aGVuCi0JICBkZXN0ZmlsZT0iJGRlc3RkaXIvJGRlc3RuYW1lIgorCSAgZGVzdGZpbGU9JGRlc3RkaXIvJGRlc3RuYW1lCiAJZWxzZQogCSAgZnVuY19iYXNlbmFtZSAiJGZpbGUiCi0JICBkZXN0ZmlsZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgotCSAgZGVzdGZpbGU9IiRkZXN0ZGlyLyRkZXN0ZmlsZSIKKwkgIGRlc3RmaWxlPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAorCSAgZGVzdGZpbGU9JGRlc3RkaXIvJGRlc3RmaWxlCiAJZmkKIAogCSMgSWYgdGhlIGZpbGUgaXMgbWlzc2luZywgYW5kIHRoZXJlIGlzIGEgLmV4ZSBvbiB0aGUgZW5kLCBzdHJpcCBpdAogCSMgYmVjYXVzZSBpdCBpcyBtb3N0IGxpa2VseSBhIGxpYnRvb2wgc2NyaXB0IHdlIGFjdHVhbGx5IHdhbnQgdG8KIAkjIGluc3RhbGwKLQlzdHJpcHBlZF9leHQ9IiIKKwlzdHJpcHBlZF9leHQ9CiAJY2FzZSAkZmlsZSBpbgogCSAgKi5leGUpCiAJICAgIGlmIHRlc3QgISAtZiAiJGZpbGUiOyB0aGVuCiAJICAgICAgZnVuY19zdHJpcG5hbWUgJycgJy5leGUnICIkZmlsZSIKIAkgICAgICBmaWxlPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKLQkgICAgICBzdHJpcHBlZF9leHQ9Ii5leGUiCisJICAgICAgc3RyaXBwZWRfZXh0PS5leGUKIAkgICAgZmkKIAkgICAgOzsKIAllc2FjCkBAIC0zMTE5LDE5ICs0MzI4LDE5IEBACiAKIAkgICMgQ2hlY2sgdGhlIHZhcmlhYmxlcyB0aGF0IHNob3VsZCBoYXZlIGJlZW4gc2V0LgogCSAgdGVzdCAteiAiJGdlbmVyYXRlZF9ieV9saWJ0b29sX3ZlcnNpb24iICYmIFwKLQkgICAgZnVuY19mYXRhbF9lcnJvciAiaW52YWxpZCBsaWJ0b29sIHdyYXBwZXIgc2NyaXB0IFxgJHdyYXBwZXInIgorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJpbnZhbGlkIGxpYnRvb2wgd3JhcHBlciBzY3JpcHQgJyR3cmFwcGVyJyIKIAotCSAgZmluYWxpemU9eWVzCisJICBmaW5hbGl6ZT06CiAJICBmb3IgbGliIGluICRub3RpbnN0X2RlcGxpYnM7IGRvCiAJICAgICMgQ2hlY2sgdG8gc2VlIHRoYXQgZWFjaCBsaWJyYXJ5IGlzIGluc3RhbGxlZC4KIAkgICAgbGliZGlyPQogCSAgICBpZiB0ZXN0IC1mICIkbGliIjsgdGhlbgogCSAgICAgIGZ1bmNfc291cmNlICIkbGliIgogCSAgICBmaQotCSAgICBsaWJmaWxlPSIkbGliZGlyLyJgJEVDSE8gIiRsaWIiIHwgJFNFRCAncyVeLiovJSVnJ2AgIyMjIHRlc3RzdWl0ZTogc2tpcCBuZXN0ZWQgcXVvdGluZyB0ZXN0CisJICAgIGxpYmZpbGU9JGxpYmRpci9gJEVDSE8gIiRsaWIiIHwgJFNFRCAncyVeLiovJSVnJ2AKIAkgICAgaWYgdGVzdCAtbiAiJGxpYmRpciIgJiYgdGVzdCAhIC1mICIkbGliZmlsZSI7IHRoZW4KLQkgICAgICBmdW5jX3dhcm5pbmcgIlxgJGxpYicgaGFzIG5vdCBiZWVuIGluc3RhbGxlZCBpbiBcYCRsaWJkaXInIgotCSAgICAgIGZpbmFsaXplPW5vCisJICAgICAgZnVuY193YXJuaW5nICInJGxpYicgaGFzIG5vdCBiZWVuIGluc3RhbGxlZCBpbiAnJGxpYmRpciciCisJICAgICAgZmluYWxpemU9ZmFsc2UKIAkgICAgZmkKIAkgIGRvbmUKIApAQCAtMzEzOSwyOSArNDM0OCwyOSBAQAogCSAgZnVuY19zb3VyY2UgIiR3cmFwcGVyIgogCiAJICBvdXRwdXRuYW1lPQotCSAgaWYgdGVzdCAiJGZhc3RfaW5zdGFsbCIgPSBubyAmJiB0ZXN0IC1uICIkcmVsaW5rX2NvbW1hbmQiOyB0aGVuCisJICBpZiB0ZXN0IG5vID0gIiRmYXN0X2luc3RhbGwiICYmIHRlc3QgLW4gIiRyZWxpbmtfY29tbWFuZCI7IHRoZW4KIAkgICAgJG9wdF9kcnlfcnVuIHx8IHsKLQkgICAgICBpZiB0ZXN0ICIkZmluYWxpemUiID0geWVzOyB0aGVuCisJICAgICAgaWYgJGZpbmFsaXplOyB0aGVuCiAJICAgICAgICB0bXBkaXI9YGZ1bmNfbWt0ZW1wZGlyYAogCQlmdW5jX2Jhc2VuYW1lICIkZmlsZSRzdHJpcHBlZF9leHQiCi0JCWZpbGU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKLQkgICAgICAgIG91dHB1dG5hbWU9IiR0bXBkaXIvJGZpbGUiCisJCWZpbGU9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0CisJICAgICAgICBvdXRwdXRuYW1lPSR0bXBkaXIvJGZpbGUKIAkgICAgICAgICMgUmVwbGFjZSB0aGUgb3V0cHV0IGZpbGUgc3BlY2lmaWNhdGlvbi4KIAkgICAgICAgIHJlbGlua19jb21tYW5kPWAkRUNITyAiJHJlbGlua19jb21tYW5kIiB8ICRTRUQgJ3MlQE9VVFBVVEAlJyIkb3V0cHV0bmFtZSInJWcnYAogCi0JICAgICAgICAkb3B0X3NpbGVudCB8fCB7CisJICAgICAgICAkb3B0X3F1aWV0IHx8IHsKIAkgICAgICAgICAgZnVuY19xdW90ZV9mb3JfZXhwYW5kICIkcmVsaW5rX2NvbW1hbmQiCiAJCSAgZXZhbCAiZnVuY19lY2hvICRmdW5jX3F1b3RlX2Zvcl9leHBhbmRfcmVzdWx0IgogCSAgICAgICAgfQogCSAgICAgICAgaWYgZXZhbCAiJHJlbGlua19jb21tYW5kIjsgdGhlbiA6CiAJICAgICAgICAgIGVsc2UKLQkJICBmdW5jX2Vycm9yICJlcnJvcjogcmVsaW5rIFxgJGZpbGUnIHdpdGggdGhlIGFib3ZlIGNvbW1hbmQgYmVmb3JlIGluc3RhbGxpbmcgaXQiCisJCSAgZnVuY19lcnJvciAiZXJyb3I6IHJlbGluayAnJGZpbGUnIHdpdGggdGhlIGFib3ZlIGNvbW1hbmQgYmVmb3JlIGluc3RhbGxpbmcgaXQiCiAJCSAgJG9wdF9kcnlfcnVuIHx8ICR7Uk19ciAiJHRtcGRpciIKIAkJICBjb250aW51ZQogCSAgICAgICAgZmkKLQkgICAgICAgIGZpbGU9IiRvdXRwdXRuYW1lIgorCSAgICAgICAgZmlsZT0kb3V0cHV0bmFtZQogCSAgICAgIGVsc2UKLQkgICAgICAgIGZ1bmNfd2FybmluZyAiY2Fubm90IHJlbGluayBcYCRmaWxlJyIKKwkgICAgICAgIGZ1bmNfd2FybmluZyAiY2Fubm90IHJlbGluayAnJGZpbGUnIgogCSAgICAgIGZpCiAJICAgIH0KIAkgIGVsc2UKQEAgLTMxOTgsMTAgKzQ0MDcsMTAgQEAKIAogICAgIGZvciBmaWxlIGluICRzdGF0aWNsaWJzOyBkbwogICAgICAgZnVuY19iYXNlbmFtZSAiJGZpbGUiCi0gICAgICBuYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisgICAgICBuYW1lPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAogCiAgICAgICAjIFNldCB1cCB0aGUgcmFubGliIHBhcmFtZXRlcnMuCi0gICAgICBvbGRsaWI9IiRkZXN0ZGlyLyRuYW1lIgorICAgICAgb2xkbGliPSRkZXN0ZGlyLyRuYW1lCiAgICAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJG9sZGxpYiIgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKICAgICAgIHRvb2xfb2xkbGliPSRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQKIApAQCAtMzIxNiwxOCArNDQyNSwxOCBAQAogICAgIGRvbmUKIAogICAgIHRlc3QgLW4gIiRmdXR1cmVfbGliZGlycyIgJiYgXAotICAgICAgZnVuY193YXJuaW5nICJyZW1lbWJlciB0byBydW4gXGAkcHJvZ25hbWUgLS1maW5pc2gkZnV0dXJlX2xpYmRpcnMnIgorICAgICAgZnVuY193YXJuaW5nICJyZW1lbWJlciB0byBydW4gJyRwcm9nbmFtZSAtLWZpbmlzaCRmdXR1cmVfbGliZGlycyciCiAKICAgICBpZiB0ZXN0IC1uICIkY3VycmVudF9saWJkaXJzIjsgdGhlbgogICAgICAgIyBNYXliZSBqdXN0IGRvIGEgZHJ5IHJ1bi4KICAgICAgICRvcHRfZHJ5X3J1biAmJiBjdXJyZW50X2xpYmRpcnM9IiAtbiRjdXJyZW50X2xpYmRpcnMiCi0gICAgICBleGVjX2NtZD0nJFNIRUxMICRwcm9ncGF0aCAkcHJlc2VydmVfYXJncyAtLWZpbmlzaCRjdXJyZW50X2xpYmRpcnMnCisgICAgICBleGVjX2NtZD0nJFNIRUxMICIkcHJvZ3BhdGgiICRwcmVzZXJ2ZV9hcmdzIC0tZmluaXNoJGN1cnJlbnRfbGliZGlycycKICAgICBlbHNlCiAgICAgICBleGl0ICRFWElUX1NVQ0NFU1MKICAgICBmaQogfQogCi10ZXN0ICIkb3B0X21vZGUiID0gaW5zdGFsbCAmJiBmdW5jX21vZGVfaW5zdGFsbCAkezErIiRAIn0KK3Rlc3QgaW5zdGFsbCA9ICIkb3B0X21vZGUiICYmIGZ1bmNfbW9kZV9pbnN0YWxsICR7MSsiJEAifQogCiAKICMgZnVuY19nZW5lcmF0ZV9kbHN5bXMgb3V0cHV0bmFtZSBvcmlnaW5hdG9yIHBpY19wCkBAIC0zMjM1LDE2ICs0NDQ0LDE3IEBACiAjIGEgZGxwcmVvcGVuIHN5bWJvbCB0YWJsZS4KIGZ1bmNfZ2VuZXJhdGVfZGxzeW1zICgpCiB7Ci0gICAgJG9wdF9kZWJ1ZwotICAgIG15X291dHB1dG5hbWU9IiQxIgotICAgIG15X29yaWdpbmF0b3I9IiQyIgotICAgIG15X3BpY19wPSIkezMtbm99IgorICAgICRkZWJ1Z19jbWQKKworICAgIG15X291dHB1dG5hbWU9JDEKKyAgICBteV9vcmlnaW5hdG9yPSQyCisgICAgbXlfcGljX3A9JHszLWZhbHNlfQogICAgIG15X3ByZWZpeD1gJEVDSE8gIiRteV9vcmlnaW5hdG9yIiB8IHNlZCAncyVbXmEtekEtWjAtOV0lXyVnJ2AKICAgICBteV9kbHN5bXM9CiAKLSAgICBpZiB0ZXN0IC1uICIkZGxmaWxlcyRkbHByZWZpbGVzIiB8fCB0ZXN0ICIkZGxzZWxmIiAhPSBubzsgdGhlbgorICAgIGlmIHRlc3QgLW4gIiRkbGZpbGVzJGRscHJlZmlsZXMiIHx8IHRlc3Qgbm8gIT0gIiRkbHNlbGYiOyB0aGVuCiAgICAgICBpZiB0ZXN0IC1uICIkTk0iICYmIHRlc3QgLW4gIiRnbG9iYWxfc3ltYm9sX3BpcGUiOyB0aGVuCi0JbXlfZGxzeW1zPSIke215X291dHB1dG5hbWV9Uy5jIgorCW15X2Rsc3ltcz0ke215X291dHB1dG5hbWV9Uy5jCiAgICAgICBlbHNlCiAJZnVuY19lcnJvciAibm90IGNvbmZpZ3VyZWQgdG8gZXh0cmFjdCBnbG9iYWwgc3ltYm9scyBmcm9tIGRscHJlb3BlbmVkIGZpbGVzIgogICAgICAgZmkKQEAgLTMyNTUsNyArNDQ2NSw3IEBACiAgICAgICAiIikgOzsKICAgICAgICouYykKIAkjIERpc2NvdmVyIHRoZSBubGlzdCBvZiBlYWNoIG9mIHRoZSBkbGZpbGVzLgotCW5saXN0PSIkb3V0cHV0X29iamRpci8ke215X291dHB1dG5hbWV9Lm5tIgorCW5saXN0PSRvdXRwdXRfb2JqZGlyLyRteV9vdXRwdXRuYW1lLm5tCiAKIAlmdW5jX3Nob3dfZXZhbCAiJFJNICRubGlzdCAke25saXN0fVMgJHtubGlzdH1UIgogCkBAIC0zMjYzLDM0ICs0NDczLDM2IEBACiAJZnVuY192ZXJib3NlICJjcmVhdGluZyAkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIgogCiAJJG9wdF9kcnlfcnVuIHx8ICRFQ0hPID4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiICJcCi0vKiAkbXlfZGxzeW1zIC0gc3ltYm9sIHJlc29sdXRpb24gdGFibGUgZm9yIFxgJG15X291dHB1dG5hbWUnIGRsc3ltIGVtdWxhdGlvbi4gKi8KLS8qIEdlbmVyYXRlZCBieSAkUFJPR1JBTSAoR05VICRQQUNLQUdFJFRJTUVTVEFNUCkgJFZFUlNJT04gKi8KKy8qICRteV9kbHN5bXMgLSBzeW1ib2wgcmVzb2x1dGlvbiB0YWJsZSBmb3IgJyRteV9vdXRwdXRuYW1lJyBkbHN5bSBlbXVsYXRpb24uICovCisvKiBHZW5lcmF0ZWQgYnkgJFBST0dSQU0gKEdOVSAkUEFDS0FHRSkgJFZFUlNJT04gKi8KIAogI2lmZGVmIF9fY3BsdXNwbHVzCiBleHRlcm4gXCJDXCIgewogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoKChfX0dOVUNfXyA9PSA0KSAmJiAoX19HTlVDX01JTk9SX18gPj0gNCkpIHx8IChfX0dOVUNfXyA+IDQpKQorI2lmIGRlZmluZWQgX19HTlVDX18gJiYgKCgoX19HTlVDX18gPT0gNCkgJiYgKF9fR05VQ19NSU5PUl9fID49IDQpKSB8fCAoX19HTlVDX18gPiA0KSkKICNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCBcIi1Xc3RyaWN0LXByb3RvdHlwZXNcIgogI2VuZGlmCiAKIC8qIEtlZXAgdGhpcyBjb2RlIGluIHN5bmMgYmV0d2VlbiBsaWJ0b29sLm00LCBsdG1haW4sIGx0X3N5c3RlbS5oLCBhbmQgdGVzdHMuICAqLwotI2lmIGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9fQ1lHV0lOX18pIHx8IGRlZmluZWQoX1dJTjMyX1dDRSkKLS8qIERBVEEgaW1wb3J0cyBmcm9tIERMTHMgb24gV0lOMzIgY29uJ3QgYmUgY29uc3QsIGJlY2F1c2UgcnVudGltZQorI2lmIGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19DWUdXSU5fXyB8fCBkZWZpbmVkIF9XSU4zMl9XQ0UKKy8qIERBVEEgaW1wb3J0cyBmcm9tIERMTHMgb24gV0lOMzIgY2FuJ3QgYmUgY29uc3QsIGJlY2F1c2UgcnVudGltZQogICAgcmVsb2NhdGlvbnMgYXJlIHBlcmZvcm1lZCAtLSBzZWUgbGQncyBkb2N1bWVudGF0aW9uIG9uIHBzZXVkby1yZWxvY3MuICAqLwogIyBkZWZpbmUgTFRfRExTWU1fQ09OU1QKLSNlbGlmIGRlZmluZWQoX19vc2ZfXykKKyNlbGlmIGRlZmluZWQgX19vc2ZfXwogLyogVGhpcyBzeXN0ZW0gZG9lcyBub3QgY29wZSB3ZWxsIHdpdGggcmVsb2NhdGlvbnMgaW4gY29uc3QgZGF0YS4gICovCiAjIGRlZmluZSBMVF9ETFNZTV9DT05TVAogI2Vsc2UKICMgZGVmaW5lIExUX0RMU1lNX0NPTlNUIGNvbnN0CiAjZW5kaWYKIAorI2RlZmluZSBTVFJFUShzMSwgczIpIChzdHJjbXAgKChzMSksIChzMikpID09IDApCisKIC8qIEV4dGVybmFsIHN5bWJvbCBkZWNsYXJhdGlvbnMgZm9yIHRoZSBjb21waWxlci4gKi9cCiAiCiAKLQlpZiB0ZXN0ICIkZGxzZWxmIiA9IHllczsgdGhlbgotCSAgZnVuY192ZXJib3NlICJnZW5lcmF0aW5nIHN5bWJvbCBsaXN0IGZvciBcYCRvdXRwdXQnIgorCWlmIHRlc3QgeWVzID0gIiRkbHNlbGYiOyB0aGVuCisJICBmdW5jX3ZlcmJvc2UgImdlbmVyYXRpbmcgc3ltYm9sIGxpc3QgZm9yICckb3V0cHV0JyIKIAogCSAgJG9wdF9kcnlfcnVuIHx8IGVjaG8gJzogQFBST0dSQU1AICcgPiAiJG5saXN0IgogCkBAIC0zMjk4LDcgKzQ1MTAsNyBAQAogCSAgcHJvZ2ZpbGVzPWAkRUNITyAiJG9ianMkb2xkX2RlcGxpYnMiIHwgJFNQMk5MIHwgJFNFRCAiJGxvMm8iIHwgJE5MMlNQYAogCSAgZm9yIHByb2dmaWxlIGluICRwcm9nZmlsZXM7IGRvCiAJICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkcHJvZ2ZpbGUiIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCi0JICAgIGZ1bmNfdmVyYm9zZSAiZXh0cmFjdGluZyBnbG9iYWwgQyBzeW1ib2xzIGZyb20gXGAkZnVuY190b190b29sX2ZpbGVfcmVzdWx0JyIKKwkgICAgZnVuY192ZXJib3NlICJleHRyYWN0aW5nIGdsb2JhbCBDIHN5bWJvbHMgZnJvbSAnJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCciCiAJICAgICRvcHRfZHJ5X3J1biB8fCBldmFsICIkTk0gJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgPj4gJyRubGlzdCciCiAJICBkb25lCiAKQEAgLTMzMTgsMTAgKzQ1MzAsMTAgQEAKIAogCSAgIyBQcmVwYXJlIHRoZSBsaXN0IG9mIGV4cG9ydGVkIHN5bWJvbHMKIAkgIGlmIHRlc3QgLXogIiRleHBvcnRfc3ltYm9scyI7IHRoZW4KLQkgICAgZXhwb3J0X3N5bWJvbHM9IiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmV4cCIKKwkgICAgZXhwb3J0X3N5bWJvbHM9JG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZXhwCiAJICAgICRvcHRfZHJ5X3J1biB8fCB7CiAJICAgICAgJFJNICRleHBvcnRfc3ltYm9scwotCSAgICAgIGV2YWwgIiR7U0VEfSAtbiAtZSAnL146IEBQUk9HUkFNQCAkL2QnIC1lICdzL14uKiBcKC4qXCkkL1wxL3AnICInPCAiJG5saXN0IiA+ICIkZXhwb3J0X3N5bWJvbHMiJworCSAgICAgIGV2YWwgIiRTRUQgLW4gLWUgJy9eOiBAUFJPR1JBTUAgJC9kJyAtZSAncy9eLiogXCguKlwpJC9cMS9wJyAiJzwgIiRubGlzdCIgPiAiJGV4cG9ydF9zeW1ib2xzIicKIAkgICAgICBjYXNlICRob3N0IGluCiAJICAgICAgKmN5Z3dpbiogfCAqbWluZ3cqIHwgKmNlZ2NjKiApCiAgICAgICAgICAgICAgICAgZXZhbCAiZWNobyBFWFBPUlRTICInPiAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZGVmIicKQEAgLTMzMzEsNyArNDU0Myw3IEBACiAJICAgIH0KIAkgIGVsc2UKIAkgICAgJG9wdF9kcnlfcnVuIHx8IHsKLQkgICAgICBldmFsICIke1NFRH0gLWUgJ3MvXChbXS5bKl4kXVwpL1xcXFxcMS9nJyAtZSAncy9eLyAvJyAtZSAncy8kLyQvJyInIDwgIiRleHBvcnRfc3ltYm9scyIgPiAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZXhwIicKKwkgICAgICBldmFsICIkU0VEIC1lICdzL1woW10uWypeJF1cKS9cXFxcXDEvZycgLWUgJ3MvXi8gLycgLWUgJ3MvJC8kLyciJyA8ICIkZXhwb3J0X3N5bWJvbHMiID4gIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmV4cCInCiAJICAgICAgZXZhbCAnJEdSRVAgLWYgIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmV4cCIgPCAiJG5saXN0IiA+ICIkbmxpc3QiVCcKIAkgICAgICBldmFsICckTVYgIiRubGlzdCJUICIkbmxpc3QiJwogCSAgICAgIGNhc2UgJGhvc3QgaW4KQEAgLTMzNDUsMjIgKzQ1NTcsMjIgQEAKIAlmaQogCiAJZm9yIGRscHJlZmlsZSBpbiAkZGxwcmVmaWxlczsgZG8KLQkgIGZ1bmNfdmVyYm9zZSAiZXh0cmFjdGluZyBnbG9iYWwgQyBzeW1ib2xzIGZyb20gXGAkZGxwcmVmaWxlJyIKKwkgIGZ1bmNfdmVyYm9zZSAiZXh0cmFjdGluZyBnbG9iYWwgQyBzeW1ib2xzIGZyb20gJyRkbHByZWZpbGUnIgogCSAgZnVuY19iYXNlbmFtZSAiJGRscHJlZmlsZSIKLQkgIG5hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKwkgIG5hbWU9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0CiAgICAgICAgICAgY2FzZSAkaG9zdCBpbgogCSAgICAqY3lnd2luKiB8ICptaW5ndyogfCAqY2VnY2MqICkKIAkgICAgICAjIGlmIGFuIGltcG9ydCBsaWJyYXJ5LCB3ZSBuZWVkIHRvIG9idGFpbiBkbG5hbWUKIAkgICAgICBpZiBmdW5jX3dpbjMyX2ltcG9ydF9saWJfcCAiJGRscHJlZmlsZSI7IHRoZW4KIAkgICAgICAgIGZ1bmNfdHJfc2ggIiRkbHByZWZpbGUiCiAJICAgICAgICBldmFsICJjdXJyX2xhZmlsZT1cJGxpYmZpbGVfJGZ1bmNfdHJfc2hfcmVzdWx0IgotCSAgICAgICAgZGxwcmVmaWxlX2RsYmFzZW5hbWU9IiIKKwkgICAgICAgIGRscHJlZmlsZV9kbGJhc2VuYW1lPQogCSAgICAgICAgaWYgdGVzdCAtbiAiJGN1cnJfbGFmaWxlIiAmJiBmdW5jX2xhbGliX3AgIiRjdXJyX2xhZmlsZSI7IHRoZW4KIAkgICAgICAgICAgIyBVc2Ugc3Vic2hlbGwsIHRvIGF2b2lkIGNsb2JiZXJpbmcgY3VycmVudCB2YXJpYWJsZSB2YWx1ZXMKIAkgICAgICAgICAgZGxwcmVmaWxlX2RsbmFtZT1gc291cmNlICIkY3Vycl9sYWZpbGUiICYmIGVjaG8gIiRkbG5hbWUiYAotCSAgICAgICAgICBpZiB0ZXN0IC1uICIkZGxwcmVmaWxlX2RsbmFtZSIgOyB0aGVuCisJICAgICAgICAgIGlmIHRlc3QgLW4gIiRkbHByZWZpbGVfZGxuYW1lIjsgdGhlbgogCSAgICAgICAgICAgIGZ1bmNfYmFzZW5hbWUgIiRkbHByZWZpbGVfZGxuYW1lIgotCSAgICAgICAgICAgIGRscHJlZmlsZV9kbGJhc2VuYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisJICAgICAgICAgICAgZGxwcmVmaWxlX2RsYmFzZW5hbWU9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0CiAJICAgICAgICAgIGVsc2UKIAkgICAgICAgICAgICAjIG5vIGxhZmlsZS4gdXNlciBleHBsaWNpdGx5IHJlcXVlc3RlZCAtZGxwcmVvcGVuIDxpbXBvcnQgbGlicmFyeT4uCiAJICAgICAgICAgICAgJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kICIkZGxwcmVmaWxlIgpAQCAtMzM2OCw3ICs0NTgwLDcgQEAKIAkgICAgICAgICAgZmkKIAkgICAgICAgIGZpCiAJICAgICAgICAkb3B0X2RyeV9ydW4gfHwgewotCSAgICAgICAgICBpZiB0ZXN0IC1uICIkZGxwcmVmaWxlX2RsYmFzZW5hbWUiIDsgdGhlbgorCSAgICAgICAgICBpZiB0ZXN0IC1uICIkZGxwcmVmaWxlX2RsYmFzZW5hbWUiOyB0aGVuCiAJICAgICAgICAgICAgZXZhbCAnJEVDSE8gIjogJGRscHJlZmlsZV9kbGJhc2VuYW1lIiA+PiAiJG5saXN0IicKIAkgICAgICAgICAgZWxzZQogCSAgICAgICAgICAgIGZ1bmNfd2FybmluZyAiQ291bGQgbm90IGNvbXB1dGUgRExMIG5hbWUgZnJvbSAkbmFtZSIKQEAgLTM0MjQsNiArNDYzNiwxMSBAQAogCSAgICBlY2hvICcvKiBOT05FICovJyA+PiAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIKIAkgIGZpCiAKKwkgIGZ1bmNfc2hvd19ldmFsICckUk0gIiR7bmxpc3R9SSInCisJICBpZiB0ZXN0IC1uICIkZ2xvYmFsX3N5bWJvbF90b19pbXBvcnQiOyB0aGVuCisJICAgIGV2YWwgIiRnbG9iYWxfc3ltYm9sX3RvX2ltcG9ydCInIDwgIiRubGlzdCJTID4gIiRubGlzdCJJJworCSAgZmkKKwogCSAgZWNobyA+PiAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIgIlwKIAogLyogVGhlIG1hcHBpbmcgYmV0d2VlbiBzeW1ib2wgbmFtZXMgYW5kIHN5bWJvbHMuICAqLwpAQCAtMzQzMiwxMSArNDY0OSwzMCBAQAogICB2b2lkICphZGRyZXNzOwogfSBsdF9kbHN5bWxpc3Q7CiBleHRlcm4gTFRfRExTWU1fQ09OU1QgbHRfZGxzeW1saXN0Ci1sdF8ke215X3ByZWZpeH1fTFRYX3ByZWxvYWRlZF9zeW1ib2xzW107CitsdF8ke215X3ByZWZpeH1fTFRYX3ByZWxvYWRlZF9zeW1ib2xzW107XAorIgorCisJICBpZiB0ZXN0IC1zICIkbmxpc3QiSTsgdGhlbgorCSAgICBlY2hvID4+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIiAiXAorc3RhdGljIHZvaWQgbHRfc3ltaW5pdCh2b2lkKQoreworICBMVF9ETFNZTV9DT05TVCBsdF9kbHN5bWxpc3QgKnN5bWJvbCA9IGx0XyR7bXlfcHJlZml4fV9MVFhfcHJlbG9hZGVkX3N5bWJvbHM7CisgIGZvciAoOyBzeW1ib2wtPm5hbWU7ICsrc3ltYm9sKQorICAgIHsiCisJICAgICRTRUQgJ3MvLiovICAgICAgaWYgKFNUUkVRIChzeW1ib2wtPm5hbWUsIFwiJlwiKSkgc3ltYm9sLT5hZGRyZXNzID0gKHZvaWQgKikgXCYmOy8nIDwgIiRubGlzdCJJID4+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIgorCSAgICBlY2hvID4+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIiAiXAorICAgIH0KK30iCisJICBmaQorCSAgZWNobyA+PiAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIgIlwKIExUX0RMU1lNX0NPTlNUIGx0X2Rsc3ltbGlzdAogbHRfJHtteV9wcmVmaXh9X0xUWF9wcmVsb2FkZWRfc3ltYm9sc1tdID0KLXtcCi0gIHsgXCIkbXlfb3JpZ2luYXRvclwiLCAodm9pZCAqKSAwIH0sIgoreyB7XCIkbXlfb3JpZ2luYXRvclwiLCAodm9pZCAqKSAwfSwiCisKKwkgIGlmIHRlc3QgLXMgIiRubGlzdCJJOyB0aGVuCisJICAgIGVjaG8gPj4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiICJcCisgIHtcIkBJTklUQFwiLCAodm9pZCAqKSAmbHRfc3ltaW5pdH0sIgorCSAgZmkKIAogCSAgY2FzZSAkbmVlZF9saWJfcHJlZml4IGluCiAJICBubykKQEAgLTM0NzgsOSArNDcxNCw3IEBACiAJICAqLSotaHB1eCopCiAJICAgIHBpY19mbGFnX2Zvcl9zeW10YWJsZT0iICRwaWNfZmxhZyIgIDs7CiAJICAqKQotCSAgICBpZiB0ZXN0ICJYJG15X3BpY19wIiAhPSBYbm87IHRoZW4KLQkgICAgICBwaWNfZmxhZ19mb3Jfc3ltdGFibGU9IiAkcGljX2ZsYWciCi0JICAgIGZpCisJICAgICRteV9waWNfcCAmJiBwaWNfZmxhZ19mb3Jfc3ltdGFibGU9IiAkcGljX2ZsYWciCiAJICAgIDs7CiAJICBlc2FjCiAJICA7OwpAQCAtMzQ5NywxMCArNDczMSwxMCBAQAogCWZ1bmNfc2hvd19ldmFsICcoY2QgJG91dHB1dF9vYmpkaXIgJiYgJExUQ0Mkc3ltdGFiX2NmbGFncyAtYyRub19idWlsdGluX2ZsYWckcGljX2ZsYWdfZm9yX3N5bXRhYmxlICIkbXlfZGxzeW1zIiknICdleGl0ICQ/JwogCiAJIyBDbGVhbiB1cCB0aGUgZ2VuZXJhdGVkIGZpbGVzLgotCWZ1bmNfc2hvd19ldmFsICckUk0gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiICIkbmxpc3QiICIke25saXN0fVMiICIke25saXN0fVQiJworCWZ1bmNfc2hvd19ldmFsICckUk0gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiICIkbmxpc3QiICIke25saXN0fVMiICIke25saXN0fVQiICIke25saXN0fUkiJwogCiAJIyBUcmFuc2Zvcm0gdGhlIHN5bWJvbCBmaWxlIGludG8gdGhlIGNvcnJlY3QgbmFtZS4KLQlzeW1maWxlb2JqPSIkb3V0cHV0X29iamRpci8ke215X291dHB1dG5hbWV9Uy4kb2JqZXh0IgorCXN5bWZpbGVvYmo9JG91dHB1dF9vYmpkaXIvJHtteV9vdXRwdXRuYW1lfVMuJG9iamV4dAogCWNhc2UgJGhvc3QgaW4KIAkqY3lnd2luKiB8ICptaW5ndyogfCAqY2VnY2MqICkKIAkgIGlmIHRlc3QgLWYgIiRvdXRwdXRfb2JqZGlyLyRteV9vdXRwdXRuYW1lLmRlZiI7IHRoZW4KQEAgLTM1MTgsNyArNDc1Miw3IEBACiAJZXNhYwogCTs7CiAgICAgICAqKQotCWZ1bmNfZmF0YWxfZXJyb3IgInVua25vd24gc3VmZml4IGZvciBcYCRteV9kbHN5bXMnIgorCWZ1bmNfZmF0YWxfZXJyb3IgInVua25vd24gc3VmZml4IGZvciAnJG15X2Rsc3ltcyciCiAJOzsKICAgICAgIGVzYWMKICAgICBlbHNlCkBAIC0zNTMyLDYgKzQ3NjYsMzIgQEAKICAgICBmaQogfQogCisjIGZ1bmNfY3lnbWluZ19nbnVfaW1wbGliX3AgQVJHCisjIFRoaXMgcHJlZGljYXRlIHJldHVybnMgd2l0aCB6ZXJvIHN0YXR1cyAoVFJVRSkgaWYKKyMgQVJHIGlzIGEgR05VL2JpbnV0aWxzLXN0eWxlIGltcG9ydCBsaWJyYXJ5LiBSZXR1cm5zCisjIHdpdGggbm9uemVybyBzdGF0dXMgKEZBTFNFKSBvdGhlcndpc2UuCitmdW5jX2N5Z21pbmdfZ251X2ltcGxpYl9wICgpCit7CisgICRkZWJ1Z19jbWQKKworICBmdW5jX3RvX3Rvb2xfZmlsZSAiJDEiIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisgIGZ1bmNfY3lnbWluZ19nbnVfaW1wbGliX3RtcD1gJE5NICIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0IiB8IGV2YWwgIiRnbG9iYWxfc3ltYm9sX3BpcGUiIHwgJEVHUkVQICcgKF9oZWFkX1tBLVphLXowLTlfXStfW2FkXWwqfFtBLVphLXowLTlfXStfW2FkXWwqX2luYW1lKSQnYAorICB0ZXN0IC1uICIkZnVuY19jeWdtaW5nX2dudV9pbXBsaWJfdG1wIgorfQorCisjIGZ1bmNfY3lnbWluZ19tc19pbXBsaWJfcCBBUkcKKyMgVGhpcyBwcmVkaWNhdGUgcmV0dXJucyB3aXRoIHplcm8gc3RhdHVzIChUUlVFKSBpZgorIyBBUkcgaXMgYW4gTVMtc3R5bGUgaW1wb3J0IGxpYnJhcnkuIFJldHVybnMKKyMgd2l0aCBub256ZXJvIHN0YXR1cyAoRkFMU0UpIG90aGVyd2lzZS4KK2Z1bmNfY3lnbWluZ19tc19pbXBsaWJfcCAoKQoreworICAkZGVidWdfY21kCisKKyAgZnVuY190b190b29sX2ZpbGUgIiQxIiBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorICBmdW5jX2N5Z21pbmdfbXNfaW1wbGliX3RtcD1gJE5NICIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0IiB8IGV2YWwgIiRnbG9iYWxfc3ltYm9sX3BpcGUiIHwgJEdSRVAgJ19OVUxMX0lNUE9SVF9ERVNDUklQVE9SJ2AKKyAgdGVzdCAtbiAiJGZ1bmNfY3lnbWluZ19tc19pbXBsaWJfdG1wIgorfQorCiAjIGZ1bmNfd2luMzJfbGliaWQgYXJnCiAjIHJldHVybiB0aGUgbGlicmFyeSB0eXBlIG9mIGZpbGUgJ2FyZycKICMKQEAgLTM1NDEsOCArNDgwMSw5IEBACiAjIERlc3BpdGUgdGhlIG5hbWUsIGFsc28gZGVhbCB3aXRoIDY0IGJpdCBiaW5hcmllcy4KIGZ1bmNfd2luMzJfbGliaWQgKCkKIHsKLSAgJG9wdF9kZWJ1ZwotICB3aW4zMl9saWJpZF90eXBlPSJ1bmtub3duIgorICAkZGVidWdfY21kCisKKyAgd2luMzJfbGliaWRfdHlwZT11bmtub3duCiAgIHdpbjMyX2ZpbGVyZXM9YGZpbGUgLUwgJDEgMj4vZGV2L251bGxgCiAgIGNhc2UgJHdpbjMyX2ZpbGVyZXMgaW4KICAgKmFyXCBhcmNoaXZlXCBpbXBvcnRcIGxpYnJhcnkqKSAjIGRlZmluaXRlbHkgaW1wb3J0CkBAIC0zNTUyLDE2ICs0ODEzLDI5IEBACiAgICAgIyBLZWVwIHRoZSBlZ3JlcCBwYXR0ZXJuIGluIHN5bmMgd2l0aCB0aGUgb25lIGluIF9MVF9DSEVDS19NQUdJQ19NRVRIT0QuCiAgICAgaWYgZXZhbCAkT0JKRFVNUCAtZiAkMSB8ICRTRUQgLWUgJzEwcScgMj4vZGV2L251bGwgfAogICAgICAgICRFR1JFUCAnZmlsZSBmb3JtYXQgKHBlaSotaTM4NiguKmFyY2hpdGVjdHVyZTogaTM4Nik/fHBlLWFybS13aW5jZXxwZS14ODYtNjQpJyA+L2Rldi9udWxsOyB0aGVuCi0gICAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJDEiIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCi0gICAgICB3aW4zMl9ubXJlcz1gZXZhbCAkTk0gLWYgcG9zaXggLUEgXCIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0XCIgfAotCSRTRUQgLW4gLWUgJworICAgICAgY2FzZSAkbm1faW50ZXJmYWNlIGluCisgICAgICAiTVMgZHVtcGJpbiIpCisJaWYgZnVuY19jeWdtaW5nX21zX2ltcGxpYl9wICIkMSIgfHwKKwkgICBmdW5jX2N5Z21pbmdfZ251X2ltcGxpYl9wICIkMSIKKwl0aGVuCisJICB3aW4zMl9ubXJlcz1pbXBvcnQKKwllbHNlCisJICB3aW4zMl9ubXJlcz0KKwlmaQorCTs7CisgICAgICAqKQorCWZ1bmNfdG9fdG9vbF9maWxlICIkMSIgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKwl3aW4zMl9ubXJlcz1gZXZhbCAkTk0gLWYgcG9zaXggLUEgXCIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0XCIgfAorCSAgJFNFRCAtbiAtZSAnCiAJICAgIDEsMTAwewogCQkvIEkgL3sKLQkJICAgIHMsLiosaW1wb3J0LAorCQkgICAgc3wuKnxpbXBvcnR8CiAJCSAgICBwCiAJCSAgICBxCiAJCX0KIAkgICAgfSdgCisJOzsKKyAgICAgIGVzYWMKICAgICAgIGNhc2UgJHdpbjMyX25tcmVzIGluCiAgICAgICBpbXBvcnQqKSAgd2luMzJfbGliaWRfdHlwZT0ieDg2IGFyY2hpdmUgaW1wb3J0Ijs7CiAgICAgICAqKSAgICAgICAgd2luMzJfbGliaWRfdHlwZT0ieDg2IGFyY2hpdmUgc3RhdGljIjs7CkBAIC0zNTkzLDcgKzQ4NjcsOCBAQAogIyAgICAkc2hhcmVkbGliX2Zyb21fbGlua2xpYl9yZXN1bHQKIGZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYiAoKQogewotICAkb3B0X2RlYnVnCisgICRkZWJ1Z19jbWQKKwogICBzaGFyZWRsaWJfZnJvbV9saW5rbGliX3Jlc3VsdD1gJERMTFRPT0wgLS1pZGVudGlmeS1zdHJpY3QgLS1pZGVudGlmeSAiJDEiYAogfQogCkBAIC0zNjEwLDcgKzQ4ODUsOCBAQAogIyBzcGVjaWZpZWQgaW1wb3J0IGxpYnJhcnkuCiBmdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWJfZmFsbGJhY2tfY29yZSAoKQogewotICAkb3B0X2RlYnVnCisgICRkZWJ1Z19jbWQKKwogICBtYXRjaF9saXRlcmFsPWAkRUNITyAiJDEiIHwgJFNFRCAiJHNlZF9tYWtlX2xpdGVyYWxfcmVnZXgiYAogICAkT0JKRFVNUCAtcyAtLXNlY3Rpb24gIiQxIiAiJDIiIDI+L2Rldi9udWxsIHwKICAgICAkU0VEICcvXkNvbnRlbnRzIG9mIHNlY3Rpb24gJyIkbWF0Y2hfbGl0ZXJhbCInOi97CkBAIC0zNjQ2LDggKzQ5MjIsOCBAQAogICAgICAgLy4vcCcgfAogICAgICMgd2Ugbm93IGhhdmUgYSBsaXN0LCBvbmUgZW50cnkgcGVyIGxpbmUsIG9mIHRoZSBzdHJpbmdpZmllZAogICAgICMgY29udGVudHMgb2YgdGhlIGFwcHJvcHJpYXRlIHNlY3Rpb24gb2YgYWxsIG1lbWJlcnMgb2YgdGhlCi0gICAgIyBhcmNoaXZlIHdoaWNoIHBvc3Nlc3MgdGhhdCBzZWN0aW9uLiBIZXVyaXN0aWM6IGVsaW1pbmF0ZQotICAgICMgYWxsIHRob3NlIHdoaWNoIGhhdmUgYSBmaXJzdCBvciBzZWNvbmQgY2hhcmFjdGVyIHRoYXQgaXMKKyAgICAjIGFyY2hpdmUgdGhhdCBwb3NzZXNzIHRoYXQgc2VjdGlvbi4gSGV1cmlzdGljOiBlbGltaW5hdGUKKyAgICAjIGFsbCB0aG9zZSB0aGF0IGhhdmUgYSBmaXJzdCBvciBzZWNvbmQgY2hhcmFjdGVyIHRoYXQgaXMKICAgICAjIGEgJy4nICh0aGF0IGlzLCBvYmpkdW1wJ3MgcmVwcmVzZW50YXRpb24gb2YgYW4gdW5wcmludGFibGUKICAgICAjIGNoYXJhY3Rlci4pIFRoaXMgc2hvdWxkIHdvcmsgZm9yIGFsbCBhcmNoaXZlcyB3aXRoIGxlc3MgdGhhbgogICAgICMgMHgzMDJmIGV4cG9ydHMgLS0gYnV0IHdpbGwgZmFpbCBmb3IgRExMcyB3aG9zZSBuYW1lIGFjdHVhbGx5CkBAIC0zNjU4LDMwICs0OTM0LDYgQEAKICAgICAkU0VEIC1lICcvXlwuL2Q7L14uXC4vZDtxJwogfQogCi0jIGZ1bmNfY3lnbWluZ19nbnVfaW1wbGliX3AgQVJHCi0jIFRoaXMgcHJlZGljYXRlIHJldHVybnMgd2l0aCB6ZXJvIHN0YXR1cyAoVFJVRSkgaWYKLSMgQVJHIGlzIGEgR05VL2JpbnV0aWxzLXN0eWxlIGltcG9ydCBsaWJyYXJ5LiBSZXR1cm5zCi0jIHdpdGggbm9uemVybyBzdGF0dXMgKEZBTFNFKSBvdGhlcndpc2UuCi1mdW5jX2N5Z21pbmdfZ251X2ltcGxpYl9wICgpCi17Ci0gICRvcHRfZGVidWcKLSAgZnVuY190b190b29sX2ZpbGUgIiQxIiBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgotICBmdW5jX2N5Z21pbmdfZ251X2ltcGxpYl90bXA9YCROTSAiJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCIgfCBldmFsICIkZ2xvYmFsX3N5bWJvbF9waXBlIiB8ICRFR1JFUCAnIChfaGVhZF9bQS1aYS16MC05X10rX1thZF1sKnxbQS1aYS16MC05X10rX1thZF1sKl9pbmFtZSkkJ2AKLSAgdGVzdCAtbiAiJGZ1bmNfY3lnbWluZ19nbnVfaW1wbGliX3RtcCIKLX0KLQotIyBmdW5jX2N5Z21pbmdfbXNfaW1wbGliX3AgQVJHCi0jIFRoaXMgcHJlZGljYXRlIHJldHVybnMgd2l0aCB6ZXJvIHN0YXR1cyAoVFJVRSkgaWYKLSMgQVJHIGlzIGFuIE1TLXN0eWxlIGltcG9ydCBsaWJyYXJ5LiBSZXR1cm5zCi0jIHdpdGggbm9uemVybyBzdGF0dXMgKEZBTFNFKSBvdGhlcndpc2UuCi1mdW5jX2N5Z21pbmdfbXNfaW1wbGliX3AgKCkKLXsKLSAgJG9wdF9kZWJ1ZwotICBmdW5jX3RvX3Rvb2xfZmlsZSAiJDEiIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCi0gIGZ1bmNfY3lnbWluZ19tc19pbXBsaWJfdG1wPWAkTk0gIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQiIHwgZXZhbCAiJGdsb2JhbF9zeW1ib2xfcGlwZSIgfCAkR1JFUCAnX05VTExfSU1QT1JUX0RFU0NSSVBUT1InYAotICB0ZXN0IC1uICIkZnVuY19jeWdtaW5nX21zX2ltcGxpYl90bXAiCi19Ci0KICMgZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliX2ZhbGxiYWNrIEFSRwogIyBQbGF0Zm9ybS1zcGVjaWZpYyBmdW5jdGlvbiB0byBleHRyYWN0IHRoZQogIyBuYW1lIG9mIHRoZSBETEwgYXNzb2NpYXRlZCB3aXRoIHRoZSBzcGVjaWZpZWQKQEAgLTM2OTUsMTYgKzQ5NDcsMTcgQEAKICMgICAgJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfcmVzdWx0CiBmdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWJfZmFsbGJhY2sgKCkKIHsKLSAgJG9wdF9kZWJ1ZwotICBpZiBmdW5jX2N5Z21pbmdfZ251X2ltcGxpYl9wICIkMSIgOyB0aGVuCisgICRkZWJ1Z19jbWQKKworICBpZiBmdW5jX2N5Z21pbmdfZ251X2ltcGxpYl9wICIkMSI7IHRoZW4KICAgICAjIGJpbnV0aWxzIGltcG9ydCBsaWJyYXJ5CiAgICAgc2hhcmVkbGliX2Zyb21fbGlua2xpYl9yZXN1bHQ9YGZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYl9mYWxsYmFja19jb3JlICcuaWRhdGEkNycgIiQxImAKLSAgZWxpZiBmdW5jX2N5Z21pbmdfbXNfaW1wbGliX3AgIiQxIiA7IHRoZW4KKyAgZWxpZiBmdW5jX2N5Z21pbmdfbXNfaW1wbGliX3AgIiQxIjsgdGhlbgogICAgICMgbXMtZ2VuZXJhdGVkIGltcG9ydCBsaWJyYXJ5CiAgICAgc2hhcmVkbGliX2Zyb21fbGlua2xpYl9yZXN1bHQ9YGZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYl9mYWxsYmFja19jb3JlICcuaWRhdGEkNicgIiQxImAKICAgZWxzZQogICAgICMgdW5rbm93bgotICAgIHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfcmVzdWx0PSIiCisgICAgc2hhcmVkbGliX2Zyb21fbGlua2xpYl9yZXN1bHQ9CiAgIGZpCiB9CiAKQEAgLTM3MTIsMTAgKzQ5NjUsMTEgQEAKICMgZnVuY19leHRyYWN0X2FuX2FyY2hpdmUgZGlyIG9sZGxpYgogZnVuY19leHRyYWN0X2FuX2FyY2hpdmUgKCkKIHsKLSAgICAkb3B0X2RlYnVnCi0gICAgZl9leF9hbl9hcl9kaXI9IiQxIjsgc2hpZnQKLSAgICBmX2V4X2FuX2FyX29sZGxpYj0iJDEiCi0gICAgaWYgdGVzdCAiJGxvY2tfb2xkX2FyY2hpdmVfZXh0cmFjdGlvbiIgPSB5ZXM7IHRoZW4KKyAgICAkZGVidWdfY21kCisKKyAgICBmX2V4X2FuX2FyX2Rpcj0kMTsgc2hpZnQKKyAgICBmX2V4X2FuX2FyX29sZGxpYj0kMQorICAgIGlmIHRlc3QgeWVzID0gIiRsb2NrX29sZF9hcmNoaXZlX2V4dHJhY3Rpb24iOyB0aGVuCiAgICAgICBsb2NrZmlsZT0kZl9leF9hbl9hcl9vbGRsaWIubG9jawogICAgICAgdW50aWwgJG9wdF9kcnlfcnVuIHx8IGxuICIkcHJvZ3BhdGgiICIkbG9ja2ZpbGUiIDI+L2Rldi9udWxsOyBkbwogCWZ1bmNfZWNobyAiV2FpdGluZyBmb3IgJGxvY2tmaWxlIHRvIGJlIHJlbW92ZWQiCkBAIC0zNzI0LDcgKzQ5NzgsNyBAQAogICAgIGZpCiAgICAgZnVuY19zaG93X2V2YWwgIihjZCBcJGZfZXhfYW5fYXJfZGlyICYmICRBUiB4IFwiXCRmX2V4X2FuX2FyX29sZGxpYlwiKSIgXAogCQkgICAnc3RhdD0kPzsgcm0gLWYgIiRsb2NrZmlsZSI7IGV4aXQgJHN0YXQnCi0gICAgaWYgdGVzdCAiJGxvY2tfb2xkX2FyY2hpdmVfZXh0cmFjdGlvbiIgPSB5ZXM7IHRoZW4KKyAgICBpZiB0ZXN0IHllcyA9ICIkbG9ja19vbGRfYXJjaGl2ZV9leHRyYWN0aW9uIjsgdGhlbgogICAgICAgJG9wdF9kcnlfcnVuIHx8IHJtIC1mICIkbG9ja2ZpbGUiCiAgICAgZmkKICAgICBpZiAoJEFSIHQgIiRmX2V4X2FuX2FyX29sZGxpYiIgfCBzb3J0IHwgc29ydCAtdWMgPi9kZXYvbnVsbCAyPiYxKTsgdGhlbgpAQCAtMzczOCwyMiArNDk5MiwyMyBAQAogIyBmdW5jX2V4dHJhY3RfYXJjaGl2ZXMgZ2VudG9wIG9sZGxpYiAuLi4KIGZ1bmNfZXh0cmFjdF9hcmNoaXZlcyAoKQogewotICAgICRvcHRfZGVidWcKLSAgICBteV9nZW50b3A9IiQxIjsgc2hpZnQKKyAgICAkZGVidWdfY21kCisKKyAgICBteV9nZW50b3A9JDE7IHNoaWZ0CiAgICAgbXlfb2xkbGlicz0kezErIiRAIn0KLSAgICBteV9vbGRvYmpzPSIiCi0gICAgbXlfeGxpYj0iIgotICAgIG15X3hhYnM9IiIKLSAgICBteV94ZGlyPSIiCisgICAgbXlfb2xkb2Jqcz0KKyAgICBteV94bGliPQorICAgIG15X3hhYnM9CisgICAgbXlfeGRpcj0KIAogICAgIGZvciBteV94bGliIGluICRteV9vbGRsaWJzOyBkbwogICAgICAgIyBFeHRyYWN0IHRoZSBvYmplY3RzLgogICAgICAgY2FzZSAkbXlfeGxpYiBpbgotCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgbXlfeGFicz0iJG15X3hsaWIiIDs7CisJW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSBteV94YWJzPSRteV94bGliIDs7CiAJKikgbXlfeGFicz1gcHdkYCIvJG15X3hsaWIiIDs7CiAgICAgICBlc2FjCiAgICAgICBmdW5jX2Jhc2VuYW1lICIkbXlfeGxpYiIKLSAgICAgIG15X3hsaWI9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKyAgICAgIG15X3hsaWI9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0CiAgICAgICBteV94bGliX3U9JG15X3hsaWIKICAgICAgIHdoaWxlIDo7IGRvCiAgICAgICAgIGNhc2UgIiAkZXh0cmFjdGVkX2FyY2hpdmVzICIgaW4KQEAgLTM3NjUsNyArNTAyMCw3IEBACiAJZXNhYwogICAgICAgZG9uZQogICAgICAgZXh0cmFjdGVkX2FyY2hpdmVzPSIkZXh0cmFjdGVkX2FyY2hpdmVzICRteV94bGliX3UiCi0gICAgICBteV94ZGlyPSIkbXlfZ2VudG9wLyRteV94bGliX3UiCisgICAgICBteV94ZGlyPSRteV9nZW50b3AvJG15X3hsaWJfdQogCiAgICAgICBmdW5jX21rZGlyX3AgIiRteV94ZGlyIgogCkBAIC0zNzc4LDE5ICs1MDMzLDIwIEBACiAJICBjZCAkbXlfeGRpciB8fCBleGl0ICQ/CiAJICBkYXJ3aW5fYXJjaGl2ZT0kbXlfeGFicwogCSAgZGFyd2luX2N1cmRpcj1gcHdkYAotCSAgZGFyd2luX2Jhc2VfYXJjaGl2ZT1gYmFzZW5hbWUgIiRkYXJ3aW5fYXJjaGl2ZSJgCisJICBmdW5jX2Jhc2VuYW1lICIkZGFyd2luX2FyY2hpdmUiCisJICBkYXJ3aW5fYmFzZV9hcmNoaXZlPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAogCSAgZGFyd2luX2FyY2hlcz1gJExJUE8gLWluZm8gIiRkYXJ3aW5fYXJjaGl2ZSIgMj4vZGV2L251bGwgfCAkR1JFUCBBcmNoaXRlY3R1cmVzIDI+L2Rldi9udWxsIHx8IHRydWVgCiAJICBpZiB0ZXN0IC1uICIkZGFyd2luX2FyY2hlcyI7IHRoZW4KIAkgICAgZGFyd2luX2FyY2hlcz1gJEVDSE8gIiRkYXJ3aW5fYXJjaGVzIiB8ICRTRUQgLWUgJ3MvLiphcmU6Ly8nYAogCSAgICBkYXJ3aW5fYXJjaD0KIAkgICAgZnVuY192ZXJib3NlICIkZGFyd2luX2Jhc2VfYXJjaGl2ZSBoYXMgbXVsdGlwbGUgYXJjaGl0ZWN0dXJlcyAkZGFyd2luX2FyY2hlcyIKLQkgICAgZm9yIGRhcndpbl9hcmNoIGluICAkZGFyd2luX2FyY2hlcyA7IGRvCi0JICAgICAgZnVuY19ta2Rpcl9wICJ1bmZhdC0kJC8ke2Rhcndpbl9iYXNlX2FyY2hpdmV9LSR7ZGFyd2luX2FyY2h9IgotCSAgICAgICRMSVBPIC10aGluICRkYXJ3aW5fYXJjaCAtb3V0cHV0ICJ1bmZhdC0kJC8ke2Rhcndpbl9iYXNlX2FyY2hpdmV9LSR7ZGFyd2luX2FyY2h9LyR7ZGFyd2luX2Jhc2VfYXJjaGl2ZX0iICIke2Rhcndpbl9hcmNoaXZlfSIKLQkgICAgICBjZCAidW5mYXQtJCQvJHtkYXJ3aW5fYmFzZV9hcmNoaXZlfS0ke2Rhcndpbl9hcmNofSIKLQkgICAgICBmdW5jX2V4dHJhY3RfYW5fYXJjaGl2ZSAiYHB3ZGAiICIke2Rhcndpbl9iYXNlX2FyY2hpdmV9IgorCSAgICBmb3IgZGFyd2luX2FyY2ggaW4gICRkYXJ3aW5fYXJjaGVzOyBkbworCSAgICAgIGZ1bmNfbWtkaXJfcCAidW5mYXQtJCQvJGRhcndpbl9iYXNlX2FyY2hpdmUtJGRhcndpbl9hcmNoIgorCSAgICAgICRMSVBPIC10aGluICRkYXJ3aW5fYXJjaCAtb3V0cHV0ICJ1bmZhdC0kJC8kZGFyd2luX2Jhc2VfYXJjaGl2ZS0kZGFyd2luX2FyY2gvJGRhcndpbl9iYXNlX2FyY2hpdmUiICIkZGFyd2luX2FyY2hpdmUiCisJICAgICAgY2QgInVuZmF0LSQkLyRkYXJ3aW5fYmFzZV9hcmNoaXZlLSRkYXJ3aW5fYXJjaCIKKwkgICAgICBmdW5jX2V4dHJhY3RfYW5fYXJjaGl2ZSAiYHB3ZGAiICIkZGFyd2luX2Jhc2VfYXJjaGl2ZSIKIAkgICAgICBjZCAiJGRhcndpbl9jdXJkaXIiCi0JICAgICAgJFJNICJ1bmZhdC0kJC8ke2Rhcndpbl9iYXNlX2FyY2hpdmV9LSR7ZGFyd2luX2FyY2h9LyR7ZGFyd2luX2Jhc2VfYXJjaGl2ZX0iCisJICAgICAgJFJNICJ1bmZhdC0kJC8kZGFyd2luX2Jhc2VfYXJjaGl2ZS0kZGFyd2luX2FyY2gvJGRhcndpbl9iYXNlX2FyY2hpdmUiCiAJICAgIGRvbmUgIyAkZGFyd2luX2FyY2hlcwogICAgICAgICAgICAgIyMgT2theSBub3cgd2UndmUgYSBidW5jaCBvZiB0aGluIG9iamVjdHMsIGdvdHRhIGZhdHRlbiB0aGVtIHVwIDopCiAJICAgIGRhcndpbl9maWxlbGlzdD1gZmluZCB1bmZhdC0kJCAtdHlwZSBmIC1uYW1lIFwqLm8gLXByaW50IC1vIC1uYW1lIFwqLmxvIC1wcmludCB8ICRTRUQgLWUgIiRiYXNlbmFtZSIgfCBzb3J0IC11YApAQCAtMzgxNSw3ICs1MDcxLDcgQEAKICAgICAgIG15X29sZG9ianM9IiRteV9vbGRvYmpzICJgZmluZCAkbXlfeGRpciAtbmFtZSBcKi4kb2JqZXh0IC1wcmludCAtbyAtbmFtZSBcKi5sbyAtcHJpbnQgfCBzb3J0IHwgJE5MMlNQYAogICAgIGRvbmUKIAotICAgIGZ1bmNfZXh0cmFjdF9hcmNoaXZlc19yZXN1bHQ9IiRteV9vbGRvYmpzIgorICAgIGZ1bmNfZXh0cmFjdF9hcmNoaXZlc19yZXN1bHQ9JG15X29sZG9ianMKIH0KIAogCkBAIC0zODMwLDcgKzUwODYsNyBAQAogIwogIyBBUkcgaXMgdGhlIHZhbHVlIHRoYXQgdGhlIFdSQVBQRVJfU0NSSVBUX0JFTE9OR1NfSU5fT0JKRElSCiAjIHZhcmlhYmxlIHdpbGwgdGFrZS4gIElmICd5ZXMnLCB0aGVuIHRoZSBlbWl0dGVkIHNjcmlwdAotIyB3aWxsIGFzc3VtZSB0aGF0IHRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggaXQgaXMgc3RvcmVkIGlzCisjIHdpbGwgYXNzdW1lIHRoYXQgdGhlIGRpcmVjdG9yeSB3aGVyZSBpdCBpcyBzdG9yZWQgaXMKICMgdGhlICRvYmpkaXIgZGlyZWN0b3J5LiAgVGhpcyBpcyBhIGN5Z3dpbi9taW5ndy1zcGVjaWZpYwogIyBiZWhhdmlvci4KIGZ1bmNfZW1pdF93cmFwcGVyICgpCkBAIC0zODQxLDcgKzUwOTcsNyBAQAogIyEgJFNIRUxMCiAKICMgJG91dHB1dCAtIHRlbXBvcmFyeSB3cmFwcGVyIHNjcmlwdCBmb3IgJG9iamRpci8kb3V0cHV0bmFtZQotIyBHZW5lcmF0ZWQgYnkgJFBST0dSQU0gKEdOVSAkUEFDS0FHRSRUSU1FU1RBTVApICRWRVJTSU9OCisjIEdlbmVyYXRlZCBieSAkUFJPR1JBTSAoR05VICRQQUNLQUdFKSAkVkVSU0lPTgogIwogIyBUaGUgJG91dHB1dCBwcm9ncmFtIGNhbm5vdCBiZSBkaXJlY3RseSBleGVjdXRlZCB1bnRpbCBhbGwgdGhlIGxpYnRvb2wKICMgbGlicmFyaWVzIHRoYXQgaXQgZGVwZW5kcyBvbiBhcmUgaW5zdGFsbGVkLgpAQCAtMzg5OCw5ICs1MTU0LDkgQEAKIAogIyBWZXJ5IGJhc2ljIG9wdGlvbiBwYXJzaW5nLiBUaGVzZSBvcHRpb25zIGFyZSAoYSkgc3BlY2lmaWMgdG8KICMgdGhlIGxpYnRvb2wgd3JhcHBlciwgKGIpIGFyZSBpZGVudGljYWwgYmV0d2VlbiB0aGUgd3JhcHBlcgotIyAvc2NyaXB0LyBhbmQgdGhlIHdyYXBwZXIgL2V4ZWN1dGFibGUvIHdoaWNoIGlzIHVzZWQgb25seSBvbgorIyAvc2NyaXB0LyBhbmQgdGhlIHdyYXBwZXIgL2V4ZWN1dGFibGUvIHRoYXQgaXMgdXNlZCBvbmx5IG9uCiAjIHdpbmRvd3MgcGxhdGZvcm1zLCBhbmQgKGMpIGFsbCBiZWdpbiB3aXRoIHRoZSBzdHJpbmcgIi0tbHQtIgotIyAoYXBwbGljYXRpb24gcHJvZ3JhbXMgYXJlIHVubGlrZWx5IHRvIGhhdmUgb3B0aW9ucyB3aGljaCBtYXRjaAorIyAoYXBwbGljYXRpb24gcHJvZ3JhbXMgYXJlIHVubGlrZWx5IHRvIGhhdmUgb3B0aW9ucyB0aGF0IG1hdGNoCiAjIHRoaXMgcGF0dGVybikuCiAjCiAjIFRoZXJlIGFyZSBvbmx5IHR3byBzdXBwb3J0ZWQgb3B0aW9uczogLS1sdC1kZWJ1ZyBhbmQKQEAgLTM5MzMsNyArNTE4OSw3IEBACiAKICAgIyBQcmludCB0aGUgZGVidWcgYmFubmVyIGltbWVkaWF0ZWx5OgogICBpZiB0ZXN0IC1uIFwiXCRsdF9vcHRpb25fZGVidWdcIjsgdGhlbgotICAgIGVjaG8gXCIke291dHB1dG5hbWV9OiR7b3V0cHV0fTpcJHtMSU5FTk99OiBsaWJ0b29sIHdyYXBwZXIgKEdOVSAkUEFDS0FHRSRUSU1FU1RBTVApICRWRVJTSU9OXCIgMT4mMgorICAgIGVjaG8gXCIkb3V0cHV0bmFtZTokb3V0cHV0OlwkTElORU5POiBsaWJ0b29sIHdyYXBwZXIgKEdOVSAkUEFDS0FHRSkgJFZFUlNJT05cIiAxPiYyCiAgIGZpCiB9CiAKQEAgLTM5NDQsNyArNTIwMCw3IEBACiAgIGx0X2R1bXBfYXJnc19OPTE7CiAgIGZvciBsdF9hcmcKICAgZG8KLSAgICBcJEVDSE8gXCIke291dHB1dG5hbWV9OiR7b3V0cHV0fTpcJHtMSU5FTk99OiBuZXdhcmd2W1wkbHRfZHVtcF9hcmdzX05dOiBcJGx0X2FyZ1wiCisgICAgXCRFQ0hPIFwiJG91dHB1dG5hbWU6JG91dHB1dDpcJExJTkVOTzogbmV3YXJndltcJGx0X2R1bXBfYXJnc19OXTogXCRsdF9hcmdcIgogICAgIGx0X2R1bXBfYXJnc19OPVxgZXhwciBcJGx0X2R1bXBfYXJnc19OICsgMVxgCiAgIGRvbmUKIH0KQEAgLTM5NTgsNyArNTIxNCw3IEBACiAgICotKi1taW5ndyB8ICotKi1vczIqIHwgKi1jZWdjYyopCiAgICAgJEVDSE8gIlwKICAgICAgIGlmIHRlc3QgLW4gXCJcJGx0X29wdGlvbl9kZWJ1Z1wiOyB0aGVuCi0gICAgICAgIFwkRUNITyBcIiR7b3V0cHV0bmFtZX06JHtvdXRwdXR9Olwke0xJTkVOT306IG5ld2FyZ3ZbMF06IFwkcHJvZ2RpclxcXFxcJHByb2dyYW1cIiAxPiYyCisgICAgICAgIFwkRUNITyBcIiRvdXRwdXRuYW1lOiRvdXRwdXQ6XCRMSU5FTk86IG5ld2FyZ3ZbMF06IFwkcHJvZ2RpclxcXFxcJHByb2dyYW1cIiAxPiYyCiAgICAgICAgIGZ1bmNfbHRfZHVtcF9hcmdzIFwkezErXCJcJEBcIn0gMT4mMgogICAgICAgZmkKICAgICAgIGV4ZWMgXCJcJHByb2dkaXJcXFxcXCRwcm9ncmFtXCIgXCR7MStcIlwkQFwifQpAQCAtMzk2OCw3ICs1MjI0LDcgQEAKICAgKikKICAgICAkRUNITyAiXAogICAgICAgaWYgdGVzdCAtbiBcIlwkbHRfb3B0aW9uX2RlYnVnXCI7IHRoZW4KLSAgICAgICAgXCRFQ0hPIFwiJHtvdXRwdXRuYW1lfToke291dHB1dH06XCR7TElORU5PfTogbmV3YXJndlswXTogXCRwcm9nZGlyL1wkcHJvZ3JhbVwiIDE+JjIKKyAgICAgICAgXCRFQ0hPIFwiJG91dHB1dG5hbWU6JG91dHB1dDpcJExJTkVOTzogbmV3YXJndlswXTogXCRwcm9nZGlyL1wkcHJvZ3JhbVwiIDE+JjIKICAgICAgICAgZnVuY19sdF9kdW1wX2FyZ3MgXCR7MStcIlwkQFwifSAxPiYyCiAgICAgICBmaQogICAgICAgZXhlYyBcIlwkcHJvZ2Rpci9cJHByb2dyYW1cIiBcJHsxK1wiXCRAXCJ9CkBAIC00MDQzLDEzICs1Mjk5LDEzIEBACiAgIHRlc3QgLW4gXCJcJGFic2RpclwiICYmIHRoaXNkaXI9XCJcJGFic2RpclwiCiAiCiAKLQlpZiB0ZXN0ICIkZmFzdF9pbnN0YWxsIiA9IHllczsgdGhlbgorCWlmIHRlc3QgeWVzID0gIiRmYXN0X2luc3RhbGwiOyB0aGVuCiAJICAkRUNITyAiXAogICBwcm9ncmFtPWx0LSckb3V0cHV0bmFtZSckZXhlZXh0CiAgIHByb2dkaXI9XCJcJHRoaXNkaXIvJG9iamRpclwiCiAKICAgaWYgdGVzdCAhIC1mIFwiXCRwcm9nZGlyL1wkcHJvZ3JhbVwiIHx8Ci0gICAgIHsgZmlsZT1cYGxzIC0xZHQgXCJcJHByb2dkaXIvXCRwcm9ncmFtXCIgXCJcJHByb2dkaXIvLi4vXCRwcm9ncmFtXCIgMj4vZGV2L251bGwgfCAke1NFRH0gMXFcYDsgXFwKKyAgICAgeyBmaWxlPVxgbHMgLTFkdCBcIlwkcHJvZ2Rpci9cJHByb2dyYW1cIiBcIlwkcHJvZ2Rpci8uLi9cJHByb2dyYW1cIiAyPi9kZXYvbnVsbCB8ICRTRUQgMXFcYDsgXFwKICAgICAgICB0ZXN0IFwiWFwkZmlsZVwiICE9IFwiWFwkcHJvZ2Rpci9cJHByb2dyYW1cIjsgfTsgdGhlbgogCiAgICAgZmlsZT1cIlwkXCQtXCRwcm9ncmFtXCIKQEAgLTQxMDEsNyArNTM1Nyw3IEBACiAJZmkKIAogCSMgRXhwb3J0IG91ciBzaGxpYnBhdGhfdmFyIGlmIHdlIGhhdmUgb25lLgotCWlmIHRlc3QgIiRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgiID0geWVzICYmIHRlc3QgLW4gIiRzaGxpYnBhdGhfdmFyIiAmJiB0ZXN0IC1uICIkdGVtcF9ycGF0aCI7IHRoZW4KKwlpZiB0ZXN0IHllcyA9ICIkc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoIiAmJiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciIgJiYgdGVzdCAtbiAiJHRlbXBfcnBhdGgiOyB0aGVuCiAJICAkRUNITyAiXAogICAgICMgQWRkIG91ciBvd24gbGlicmFyeSBwYXRoIHRvICRzaGxpYnBhdGhfdmFyCiAgICAgJHNobGlicGF0aF92YXI9XCIkdGVtcF9ycGF0aFwkJHNobGlicGF0aF92YXJcIgpAQCAtNDEyMSw3ICs1Mzc3LDcgQEAKICAgICBmaQogICBlbHNlCiAgICAgIyBUaGUgcHJvZ3JhbSBkb2Vzbid0IGV4aXN0LgotICAgIFwkRUNITyBcIlwkMDogZXJyb3I6IFxcXGBcJHByb2dkaXIvXCRwcm9ncmFtJyBkb2VzIG5vdCBleGlzdFwiIDE+JjIKKyAgICBcJEVDSE8gXCJcJDA6IGVycm9yOiAnXCRwcm9nZGlyL1wkcHJvZ3JhbScgZG9lcyBub3QgZXhpc3RcIiAxPiYyCiAgICAgXCRFQ0hPIFwiVGhpcyBzY3JpcHQgaXMganVzdCBhIHdyYXBwZXIgZm9yIFwkcHJvZ3JhbS5cIiAxPiYyCiAgICAgXCRFQ0hPIFwiU2VlIHRoZSAkUEFDS0FHRSBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLlwiIDE+JjIKICAgICBleGl0IDEKQEAgLTQxNDAsNyArNTM5Niw3IEBACiAJY2F0IDw8RU9GCiAKIC8qICRjd3JhcHBlcnNvdXJjZSAtIHRlbXBvcmFyeSB3cmFwcGVyIGV4ZWN1dGFibGUgZm9yICRvYmpkaXIvJG91dHB1dG5hbWUKLSAgIEdlbmVyYXRlZCBieSAkUFJPR1JBTSAoR05VICRQQUNLQUdFJFRJTUVTVEFNUCkgJFZFUlNJT04KKyAgIEdlbmVyYXRlZCBieSAkUFJPR1JBTSAoR05VICRQQUNLQUdFKSAkVkVSU0lPTgogCiAgICBUaGUgJG91dHB1dCBwcm9ncmFtIGNhbm5vdCBiZSBkaXJlY3RseSBleGVjdXRlZCB1bnRpbCBhbGwgdGhlIGxpYnRvb2wKICAgIGxpYnJhcmllcyB0aGF0IGl0IGRlcGVuZHMgb24gYXJlIGluc3RhbGxlZC4KQEAgLTQxNzUsNDcgKzU0MzEsNDUgQEAKICNpbmNsdWRlIDxmY250bC5oPgogI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CiAKKyNkZWZpbmUgU1RSRVEoczEsIHMyKSAoc3RyY21wICgoczEpLCAoczIpKSA9PSAwKQorCiAvKiBkZWNsYXJhdGlvbnMgb2Ygbm9uLUFOU0kgZnVuY3Rpb25zICovCi0jaWYgZGVmaW5lZChfX01JTkdXMzJfXykKKyNpZiBkZWZpbmVkIF9fTUlOR1czMl9fCiAjIGlmZGVmIF9fU1RSSUNUX0FOU0lfXwogaW50IF9wdXRlbnYgKGNvbnN0IGNoYXIgKik7CiAjIGVuZGlmCi0jZWxpZiBkZWZpbmVkKF9fQ1lHV0lOX18pCisjZWxpZiBkZWZpbmVkIF9fQ1lHV0lOX18KICMgaWZkZWYgX19TVFJJQ1RfQU5TSV9fCiBjaGFyICpyZWFscGF0aCAoY29uc3QgY2hhciAqLCBjaGFyICopOwogaW50IHB1dGVudiAoY2hhciAqKTsKIGludCBzZXRlbnYgKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBpbnQpOwogIyBlbmRpZgotLyogI2VsaWYgZGVmaW5lZCAob3RoZXIgcGxhdGZvcm1zKSAuLi4gKi8KKy8qICNlbGlmIGRlZmluZWQgb3RoZXJfcGxhdGZvcm0gfHwgZGVmaW5lZCAuLi4gKi8KICNlbmRpZgogCiAvKiBwb3J0YWJpbGl0eSBkZWZpbmVzLCBleGNsdWRpbmcgcGF0aCBoYW5kbGluZyBtYWNyb3MgKi8KLSNpZiBkZWZpbmVkKF9NU0NfVkVSKQorI2lmIGRlZmluZWQgX01TQ19WRVIKICMgZGVmaW5lIHNldG1vZGUgX3NldG1vZGUKICMgZGVmaW5lIHN0YXQgICAgX3N0YXQKICMgZGVmaW5lIGNobW9kICAgX2NobW9kCiAjIGRlZmluZSBnZXRjd2QgIF9nZXRjd2QKICMgZGVmaW5lIHB1dGVudiAgX3B1dGVudgogIyBkZWZpbmUgU19JWFVTUiBfU19JRVhFQwotIyBpZm5kZWYgX0lOVFBUUl9UX0RFRklORUQKLSMgIGRlZmluZSBfSU5UUFRSX1RfREVGSU5FRAotIyAgZGVmaW5lIGludHB0cl90IGludAotIyBlbmRpZgotI2VsaWYgZGVmaW5lZChfX01JTkdXMzJfXykKKyNlbGlmIGRlZmluZWQgX19NSU5HVzMyX18KICMgZGVmaW5lIHNldG1vZGUgX3NldG1vZGUKICMgZGVmaW5lIHN0YXQgICAgX3N0YXQKICMgZGVmaW5lIGNobW9kICAgX2NobW9kCiAjIGRlZmluZSBnZXRjd2QgIF9nZXRjd2QKICMgZGVmaW5lIHB1dGVudiAgX3B1dGVudgotI2VsaWYgZGVmaW5lZChfX0NZR1dJTl9fKQorI2VsaWYgZGVmaW5lZCBfX0NZR1dJTl9fCiAjIGRlZmluZSBIQVZFX1NFVEVOVgogIyBkZWZpbmUgRk9QRU5fV0IgIndiIgotLyogI2VsaWYgZGVmaW5lZCAob3RoZXIgcGxhdGZvcm1zKSAuLi4gKi8KKy8qICNlbGlmIGRlZmluZWQgb3RoZXIgcGxhdGZvcm1zIC4uLiAqLwogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKFBBVEhfTUFYKQorI2lmIGRlZmluZWQgUEFUSF9NQVgKICMgZGVmaW5lIExUX1BBVEhNQVggUEFUSF9NQVgKLSNlbGlmIGRlZmluZWQoTUFYUEFUSExFTikKKyNlbGlmIGRlZmluZWQgTUFYUEFUSExFTgogIyBkZWZpbmUgTFRfUEFUSE1BWCBNQVhQQVRITEVOCiAjZWxzZQogIyBkZWZpbmUgTFRfUEFUSE1BWCAxMDI0CkBAIC00MjM0LDggKzU0ODgsOCBAQAogIyBkZWZpbmUgUEFUSF9TRVBBUkFUT1IgJzonCiAjZW5kaWYKIAotI2lmIGRlZmluZWQgKF9XSU4zMikgfHwgZGVmaW5lZCAoX19NU0RPU19fKSB8fCBkZWZpbmVkIChfX0RKR1BQX18pIHx8IFwKLSAgZGVmaW5lZCAoX19PUzJfXykKKyNpZiBkZWZpbmVkIF9XSU4zMiB8fCBkZWZpbmVkIF9fTVNET1NfXyB8fCBkZWZpbmVkIF9fREpHUFBfXyB8fCBcCisgIGRlZmluZWQgX19PUzJfXwogIyBkZWZpbmUgSEFWRV9ET1NfQkFTRURfRklMRV9TWVNURU0KICMgZGVmaW5lIEZPUEVOX1dCICJ3YiIKICMgaWZuZGVmIERJUl9TRVBBUkFUT1JfMgpAQCAtNDI2OCwxMCArNTUyMiwxMCBAQAogCiAjZGVmaW5lIFhNQUxMT0ModHlwZSwgbnVtKSAgICAgICgodHlwZSAqKSB4bWFsbG9jICgobnVtKSAqIHNpemVvZih0eXBlKSkpCiAjZGVmaW5lIFhGUkVFKHN0YWxlKSBkbyB7IFwKLSAgaWYgKHN0YWxlKSB7IGZyZWUgKCh2b2lkICopIHN0YWxlKTsgc3RhbGUgPSAwOyB9IFwKKyAgaWYgKHN0YWxlKSB7IGZyZWUgKHN0YWxlKTsgc3RhbGUgPSAwOyB9IFwKIH0gd2hpbGUgKDApCiAKLSNpZiBkZWZpbmVkKExUX0RFQlVHV1JBUFBFUikKKyNpZiBkZWZpbmVkIExUX0RFQlVHV1JBUFBFUgogc3RhdGljIGludCBsdF9kZWJ1ZyA9IDE7CiAjZWxzZQogc3RhdGljIGludCBsdF9kZWJ1ZyA9IDA7CkBAIC00MzA0LDcgKzU1NTgsNyBAQAogY29uc3QgY2hhciAqIExJQl9QQVRIX1ZBUk5BTUUgPSAiJHNobGlicGF0aF92YXIiOwogRU9GCiAKLQkgICAgaWYgdGVzdCAiJHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aCIgPSB5ZXMgJiYgdGVzdCAtbiAiJHNobGlicGF0aF92YXIiICYmIHRlc3QgLW4gIiR0ZW1wX3JwYXRoIjsgdGhlbgorCSAgICBpZiB0ZXN0IHllcyA9ICIkc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoIiAmJiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciIgJiYgdGVzdCAtbiAiJHRlbXBfcnBhdGgiOyB0aGVuCiAgICAgICAgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRoICIkdGVtcF9ycGF0aCIKIAkgICAgICBjYXQgPDxFT0YKIGNvbnN0IGNoYXIgKiBMSUJfUEFUSF9WQUxVRSAgID0gIiRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQiOwpAQCAtNDMyOCw3ICs1NTgyLDcgQEAKIEVPRgogCSAgICBmaQogCi0JICAgIGlmIHRlc3QgIiRmYXN0X2luc3RhbGwiID0geWVzOyB0aGVuCisJICAgIGlmIHRlc3QgeWVzID0gIiRmYXN0X2luc3RhbGwiOyB0aGVuCiAJICAgICAgY2F0IDw8RU9GCiBjb25zdCBjaGFyICogVEFSR0VUX1BST0dSQU1fTkFNRSA9ICJsdC0kb3V0cHV0bmFtZSI7IC8qIGhvcGVmdWxseSwgbm8gLmV4ZSAqLwogRU9GCkBAIC00MzU3LDEyICs1NjExLDEyIEBACiAgIGNoYXIgKmFjdHVhbF9jd3JhcHBlcl9uYW1lOwogICBjaGFyICp0YXJnZXRfbmFtZTsKICAgY2hhciAqbHRfYXJndl96ZXJvOwotICBpbnRwdHJfdCBydmFsID0gMTI3OworICBpbnQgcnZhbCA9IDEyNzsKIAogICBpbnQgaTsKIAogICBwcm9ncmFtX25hbWUgPSAoY2hhciAqKSB4c3RyZHVwIChiYXNlX25hbWUgKGFyZ3ZbMF0pKTsKLSAgbmV3YXJneiA9IFhNQUxMT0MgKGNoYXIgKiwgYXJnYyArIDEpOworICBuZXdhcmd6ID0gWE1BTExPQyAoY2hhciAqLCAoc2l6ZV90KSBhcmdjICsgMSk7CiAKICAgLyogdmVyeSBzaW1wbGUgYXJnIHBhcnNpbmc7IGRvbid0IHdhbnQgdG8gcmVseSBvbiBnZXRvcHQKICAgICogYWxzbywgY29weSBhbGwgbm9uIGN3cmFwcGVyIG9wdGlvbnMgdG8gbmV3YXJneiwgZXhjZXB0CkBAIC00MzcxLDEwICs1NjI1LDEwIEBACiAgIG5ld2FyZ2M9MDsKICAgZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykKICAgICB7Ci0gICAgICBpZiAoc3RyY21wIChhcmd2W2ldLCBkdW1wc2NyaXB0X29wdCkgPT0gMCkKKyAgICAgIGlmIChTVFJFUSAoYXJndltpXSwgZHVtcHNjcmlwdF9vcHQpKQogCXsKIEVPRgotCSAgICBjYXNlICIkaG9zdCIgaW4KKwkgICAgY2FzZSAkaG9zdCBpbgogCSAgICAgICptaW5ndyogfCAqY3lnd2luKiApCiAJCSMgbWFrZSBzdGRvdXQgdXNlICJ1bml4IiBsaW5lIGVuZGluZ3MKIAkJZWNobyAiICAgICAgICAgIHNldG1vZGUoMSxfT19CSU5BUlkpOyIKQEAgLTQzODUsMTIgKzU2MzksMTIgQEAKIAkgIGx0X2R1bXBfc2NyaXB0IChzdGRvdXQpOwogCSAgcmV0dXJuIDA7CiAJfQotICAgICAgaWYgKHN0cmNtcCAoYXJndltpXSwgZGVidWdfb3B0KSA9PSAwKQorICAgICAgaWYgKFNUUkVRIChhcmd2W2ldLCBkZWJ1Z19vcHQpKQogCXsKICAgICAgICAgICBsdF9kZWJ1ZyA9IDE7CiAgICAgICAgICAgY29udGludWU7CiAJfQotICAgICAgaWYgKHN0cmNtcCAoYXJndltpXSwgbHR3cmFwcGVyX29wdGlvbl9wcmVmaXgpID09IDApCisgICAgICBpZiAoU1RSRVEgKGFyZ3ZbaV0sIGx0d3JhcHBlcl9vcHRpb25fcHJlZml4KSkKICAgICAgICAgewogICAgICAgICAgIC8qIGhvd2V2ZXIsIGlmIHRoZXJlIGlzIGFuIG9wdGlvbiBpbiB0aGUgTFRXUkFQUEVSX09QVElPTl9QUkVGSVgKICAgICAgICAgICAgICBuYW1lc3BhY2UsIGJ1dCBpdCBpcyBub3Qgb25lIG9mIHRoZSBvbmVzIHdlIGtub3cgYWJvdXQgYW5kCkBAIC00NDEzLDcgKzU2NjcsNyBAQAogRU9GCiAJICAgIGNhdCA8PEVPRgogICAvKiBUaGUgR05VIGJhbm5lciBtdXN0IGJlIHRoZSBmaXJzdCBub24tZXJyb3IgZGVidWcgbWVzc2FnZSAqLwotICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLCAibGlidG9vbCB3cmFwcGVyIChHTlUgJFBBQ0tBR0UkVElNRVNUQU1QKSAkVkVSU0lPTlxuIik7CisgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sICJsaWJ0b29sIHdyYXBwZXIgKEdOVSAkUEFDS0FHRSkgJFZFUlNJT05cbiIpOwogRU9GCiAJICAgIGNhdCA8PCJFT0YiCiAgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sICIobWFpbikgYXJndlswXTogJXNcbiIsIGFyZ3ZbMF0pOwpAQCAtNDUyNCw3ICs1Nzc4LDcgQEAKIAkJY2F0IDw8IkVPRiIKICAgLyogZXhlY3YgZG9lc24ndCBhY3R1YWxseSB3b3JrIG9uIG1pbmd3IGFzIGV4cGVjdGVkIG9uIHVuaXggKi8KICAgbmV3YXJneiA9IHByZXBhcmVfc3Bhd24gKG5ld2FyZ3opOwotICBydmFsID0gX3NwYXdudiAoX1BfV0FJVCwgbHRfYXJndl96ZXJvLCAoY29uc3QgY2hhciAqIGNvbnN0ICopIG5ld2FyZ3opOworICBydmFsID0gKGludCkgX3NwYXdudiAoX1BfV0FJVCwgbHRfYXJndl96ZXJvLCAoY29uc3QgY2hhciAqIGNvbnN0ICopIG5ld2FyZ3opOwogICBpZiAocnZhbCA9PSAtMSkKICAgICB7CiAgICAgICAvKiBmYWlsZWQgdG8gc3RhcnQgcHJvY2VzcyAqLwpAQCAtNDU2OSw3ICs1ODIzLDcgQEAKIHsKICAgY29uc3QgY2hhciAqYmFzZTsKIAotI2lmIGRlZmluZWQgKEhBVkVfRE9TX0JBU0VEX0ZJTEVfU1lTVEVNKQorI2lmIGRlZmluZWQgSEFWRV9ET1NfQkFTRURfRklMRV9TWVNURU0KICAgLyogU2tpcCBvdmVyIHRoZSBkaXNrIG5hbWUgaW4gTVNET1MgcGF0aG5hbWVzLiAqLwogICBpZiAoaXNhbHBoYSAoKHVuc2lnbmVkIGNoYXIpIG5hbWVbMF0pICYmIG5hbWVbMV0gPT0gJzonKQogICAgIG5hbWUgKz0gMjsKQEAgLTQ2MjgsNyArNTg4Miw3IEBACiAgIGNvbnN0IGNoYXIgKnBfbmV4dDsKICAgLyogc3RhdGljIGJ1ZmZlciBmb3IgZ2V0Y3dkICovCiAgIGNoYXIgdG1wW0xUX1BBVEhNQVggKyAxXTsKLSAgaW50IHRtcF9sZW47CisgIHNpemVfdCB0bXBfbGVuOwogICBjaGFyICpjb25jYXRfbmFtZTsKIAogICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLCAiKGZpbmRfZXhlY3V0YWJsZSk6ICVzXG4iLApAQCAtNDYzOCw3ICs1ODkyLDcgQEAKICAgICByZXR1cm4gTlVMTDsKIAogICAvKiBBYnNvbHV0ZSBwYXRoPyAqLwotI2lmIGRlZmluZWQgKEhBVkVfRE9TX0JBU0VEX0ZJTEVfU1lTVEVNKQorI2lmIGRlZmluZWQgSEFWRV9ET1NfQkFTRURfRklMRV9TWVNURU0KICAgaWYgKGlzYWxwaGEgKCh1bnNpZ25lZCBjaGFyKSB3cmFwcGVyWzBdKSAmJiB3cmFwcGVyWzFdID09ICc6JykKICAgICB7CiAgICAgICBjb25jYXRfbmFtZSA9IHhzdHJkdXAgKHdyYXBwZXIpOwpAQCAtNDY1Niw3ICs1OTEwLDcgQEAKIAkgICAgcmV0dXJuIGNvbmNhdF9uYW1lOwogCSAgWEZSRUUgKGNvbmNhdF9uYW1lKTsKIAl9Ci0jaWYgZGVmaW5lZCAoSEFWRV9ET1NfQkFTRURfRklMRV9TWVNURU0pCisjaWYgZGVmaW5lZCBIQVZFX0RPU19CQVNFRF9GSUxFX1NZU1RFTQogICAgIH0KICNlbmRpZgogCkBAIC00Njc5LDcgKzU5MzMsNyBAQAogCSAgICAgIGZvciAocSA9IHA7ICpxOyBxKyspCiAJCWlmIChJU19QQVRIX1NFUEFSQVRPUiAoKnEpKQogCQkgIGJyZWFrOwotCSAgICAgIHBfbGVuID0gcSAtIHA7CisJICAgICAgcF9sZW4gPSAoc2l6ZV90KSAocSAtIHApOwogCSAgICAgIHBfbmV4dCA9ICgqcSA9PSAnXDAnID8gcSA6IHEgKyAxKTsKIAkgICAgICBpZiAocF9sZW4gPT0gMCkKIAkJewpAQCAtNDc5OCw3ICs2MDUyLDcgQEAKICAgaWYgKHBhdGxlbiA8PSBsZW4pCiAgICAgewogICAgICAgc3RyICs9IGxlbiAtIHBhdGxlbjsKLSAgICAgIGlmIChzdHJjbXAgKHN0ciwgcGF0KSA9PSAwKQorICAgICAgaWYgKFNUUkVRIChzdHIsIHBhdCkpCiAJKnN0ciA9ICdcMCc7CiAgICAgfQogICByZXR1cm4gc3RyOwpAQCAtNDg2Myw3ICs2MTE3LDcgQEAKICAgICBjaGFyICpzdHIgPSB4c3RyZHVwICh2YWx1ZSk7CiAgICAgc2V0ZW52IChuYW1lLCBzdHIsIDEpOwogI2Vsc2UKLSAgICBpbnQgbGVuID0gc3RybGVuIChuYW1lKSArIDEgKyBzdHJsZW4gKHZhbHVlKSArIDE7CisgICAgc2l6ZV90IGxlbiA9IHN0cmxlbiAobmFtZSkgKyAxICsgc3RybGVuICh2YWx1ZSkgKyAxOwogICAgIGNoYXIgKnN0ciA9IFhNQUxMT0MgKGNoYXIsIGxlbik7CiAgICAgc3ByaW50ZiAoc3RyLCAiJXM9JXMiLCBuYW1lLCB2YWx1ZSk7CiAgICAgaWYgKHB1dGVudiAoc3RyKSAhPSBFWElUX1NVQ0NFU1MpCkBAIC00ODgwLDggKzYxMzQsOCBAQAogICBjaGFyICpuZXdfdmFsdWU7CiAgIGlmIChvcmlnX3ZhbHVlICYmICpvcmlnX3ZhbHVlKQogICAgIHsKLSAgICAgIGludCBvcmlnX3ZhbHVlX2xlbiA9IHN0cmxlbiAob3JpZ192YWx1ZSk7Ci0gICAgICBpbnQgYWRkX2xlbiA9IHN0cmxlbiAoYWRkKTsKKyAgICAgIHNpemVfdCBvcmlnX3ZhbHVlX2xlbiA9IHN0cmxlbiAob3JpZ192YWx1ZSk7CisgICAgICBzaXplX3QgYWRkX2xlbiA9IHN0cmxlbiAoYWRkKTsKICAgICAgIG5ld192YWx1ZSA9IFhNQUxMT0MgKGNoYXIsIGFkZF9sZW4gKyBvcmlnX3ZhbHVlX2xlbiArIDEpOwogICAgICAgaWYgKHRvX2VuZCkKICAgICAgICAgewpAQCAtNDkxMiwxMCArNjE2NiwxMCBAQAogICAgIHsKICAgICAgIGNoYXIgKm5ld192YWx1ZSA9IGx0X2V4dGVuZF9zdHIgKGdldGVudiAobmFtZSksIHZhbHVlLCAwKTsKICAgICAgIC8qIHNvbWUgc3lzdGVtcyBjYW4ndCBjb3BlIHdpdGggYSAnOictdGVybWluYXRlZCBwYXRoICMnICovCi0gICAgICBpbnQgbGVuID0gc3RybGVuIChuZXdfdmFsdWUpOwotICAgICAgd2hpbGUgKCgobGVuID0gc3RybGVuIChuZXdfdmFsdWUpKSA+IDApICYmIElTX1BBVEhfU0VQQVJBVE9SIChuZXdfdmFsdWVbbGVuLTFdKSkKKyAgICAgIHNpemVfdCBsZW4gPSBzdHJsZW4gKG5ld192YWx1ZSk7CisgICAgICB3aGlsZSAoKGxlbiA+IDApICYmIElTX1BBVEhfU0VQQVJBVE9SIChuZXdfdmFsdWVbbGVuLTFdKSkKICAgICAgICAgewotICAgICAgICAgIG5ld192YWx1ZVtsZW4tMV0gPSAnXDAnOworICAgICAgICAgIG5ld192YWx1ZVstLWxlbl0gPSAnXDAnOwogICAgICAgICB9CiAgICAgICBsdF9zZXRlbnYgKG5hbWUsIG5ld192YWx1ZSk7CiAgICAgICBYRlJFRSAobmV3X3ZhbHVlKTsKQEAgLTUwODIsNyArNjMzNiw4IEBACiAjIFRydWUgaWYgQVJHIGlzIGFuIGltcG9ydCBsaWIsIGFzIGluZGljYXRlZCBieSAkZmlsZV9tYWdpY19jbWQKIGZ1bmNfd2luMzJfaW1wb3J0X2xpYl9wICgpCiB7Ci0gICAgJG9wdF9kZWJ1ZworICAgICRkZWJ1Z19jbWQKKwogICAgIGNhc2UgYGV2YWwgJGZpbGVfbWFnaWNfY21kIFwiXCQxXCIgMj4vZGV2L251bGwgfCAkU0VEIC1lIDEwcWAgaW4KICAgICAqaW1wb3J0KikgOiA7OwogICAgICopIGZhbHNlIDs7CkBAIC01MDkyLDE3ICs2MzQ3LDE4IEBACiAjIGZ1bmNfbW9kZV9saW5rIGFyZy4uLgogZnVuY19tb2RlX2xpbmsgKCkKIHsKLSAgICAkb3B0X2RlYnVnCisgICAgJGRlYnVnX2NtZAorCiAgICAgY2FzZSAkaG9zdCBpbgogICAgICotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1wdzMyKiB8ICotKi1vczIqIHwgKi1jZWdjYyopCiAgICAgICAjIEl0IGlzIGltcG9zc2libGUgdG8gbGluayBhIGRsbCB3aXRob3V0IHRoaXMgc2V0dGluZywgYW5kCiAgICAgICAjIHdlIHNob3VsZG4ndCBmb3JjZSB0aGUgbWFrZWZpbGUgbWFpbnRhaW5lciB0byBmaWd1cmUgb3V0Ci0gICAgICAjIHdoaWNoIHN5c3RlbSB3ZSBhcmUgY29tcGlsaW5nIGZvciBpbiBvcmRlciB0byBwYXNzIGFuIGV4dHJhCisgICAgICAjIHdoYXQgc3lzdGVtIHdlIGFyZSBjb21waWxpbmcgZm9yIGluIG9yZGVyIHRvIHBhc3MgYW4gZXh0cmEKICAgICAgICMgZmxhZyBmb3IgZXZlcnkgbGlidG9vbCBpbnZvY2F0aW9uLgogICAgICAgIyBhbGxvd191bmRlZmluZWQ9bm8KIAogICAgICAgIyBGSVhNRTogVW5mb3J0dW5hdGVseSwgdGhlcmUgYXJlIHByb2JsZW1zIHdpdGggdGhlIGFib3ZlIHdoZW4gdHJ5aW5nCi0gICAgICAjIHRvIG1ha2UgYSBkbGwgd2hpY2ggaGFzIHVuZGVmaW5lZCBzeW1ib2xzLCBpbiB3aGljaCBjYXNlIG5vdAorICAgICAgIyB0byBtYWtlIGEgZGxsIHRoYXQgaGFzIHVuZGVmaW5lZCBzeW1ib2xzLCBpbiB3aGljaCBjYXNlIG5vdAogICAgICAgIyBldmVuIGEgc3RhdGljIGxpYnJhcnkgaXMgYnVpbHQuICBGb3Igbm93LCB3ZSBuZWVkIHRvIHNwZWNpZnkKICAgICAgICMgLW5vLXVuZGVmaW5lZCBvbiB0aGUgbGlidG9vbCBsaW5rIGxpbmUgd2hlbiB3ZSBjYW4gYmUgY2VydGFpbgogICAgICAgIyB0aGF0IGFsbCBzeW1ib2xzIGFyZSBzYXRpc2ZpZWQsIG90aGVyd2lzZSB3ZSBnZXQgYSBzdGF0aWMgbGlicmFyeS4KQEAgLTUxNDksNyArNjQwNSw3IEBACiAgICAgbm9uX3BpY19vYmplY3RzPQogICAgIHByZWNpb3VzX2ZpbGVzX3JlZ2V4PQogICAgIHByZWZlcl9zdGF0aWNfbGlicz1ubwotICAgIHByZWxvYWQ9bm8KKyAgICBwcmVsb2FkPWZhbHNlCiAgICAgcHJldj0KICAgICBwcmV2YXJnPQogICAgIHJlbGVhc2U9CkBAIC01MTYxLDcgKzY0MTcsNyBAQAogICAgIHZpbmZvPQogICAgIHZpbmZvX251bWJlcj1ubwogICAgIHdlYWtfbGlicz0KLSAgICBzaW5nbGVfbW9kdWxlPSIke3dsfS1zaW5nbGVfbW9kdWxlIgorICAgIHNpbmdsZV9tb2R1bGU9JHdsLXNpbmdsZV9tb2R1bGUKICAgICBmdW5jX2luZmVyX3RhZyAkYmFzZV9jb21waWxlCiAKICAgICAjIFdlIG5lZWQgdG8ga25vdyAtc3RhdGljLCB0byBnZXQgdGhlIHJpZ2h0IG91dHB1dCBmaWxlbmFtZXMuCkBAIC01MTY5LDE1ICs2NDI1LDE1IEBACiAgICAgZG8KICAgICAgIGNhc2UgJGFyZyBpbgogICAgICAgLXNoYXJlZCkKLQl0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiAhPSB5ZXMgJiYgXAotCSAgZnVuY19mYXRhbF9jb25maWd1cmF0aW9uICJjYW4gbm90IGJ1aWxkIGEgc2hhcmVkIGxpYnJhcnkiCisJdGVzdCB5ZXMgIT0gIiRidWlsZF9saWJ0b29sX2xpYnMiIFwKKwkgICYmIGZ1bmNfZmF0YWxfY29uZmlndXJhdGlvbiAiY2Fubm90IGJ1aWxkIGEgc2hhcmVkIGxpYnJhcnkiCiAJYnVpbGRfb2xkX2xpYnM9bm8KIAlicmVhawogCTs7CiAgICAgICAtYWxsLXN0YXRpYyB8IC1zdGF0aWMgfCAtc3RhdGljLWxpYnRvb2wtbGlicykKIAljYXNlICRhcmcgaW4KIAktYWxsLXN0YXRpYykKLQkgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzICYmIHRlc3QgLXogIiRsaW5rX3N0YXRpY19mbGFnIjsgdGhlbgorCSAgaWYgdGVzdCB5ZXMgPSAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgJiYgdGVzdCAteiAiJGxpbmtfc3RhdGljX2ZsYWciOyB0aGVuCiAJICAgIGZ1bmNfd2FybmluZyAiY29tcGxldGUgc3RhdGljIGxpbmtpbmcgaXMgaW1wb3NzaWJsZSBpbiB0aGlzIGNvbmZpZ3VyYXRpb24iCiAJICBmaQogCSAgaWYgdGVzdCAtbiAiJGxpbmtfc3RhdGljX2ZsYWciOyB0aGVuCkBAIC01MjEwLDcgKzY0NjYsNyBAQAogCiAgICAgIyBHbyB0aHJvdWdoIHRoZSBhcmd1bWVudHMsIHRyYW5zZm9ybWluZyB0aGVtIG9uIHRoZSB3YXkuCiAgICAgd2hpbGUgdGVzdCAiJCMiIC1ndCAwOyBkbwotICAgICAgYXJnPSIkMSIKKyAgICAgIGFyZz0kMQogICAgICAgc2hpZnQKICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCiAgICAgICBxYXJnPSRmdW5jX3F1b3RlX2Zvcl9ldmFsX3VucXVvdGVkX3Jlc3VsdApAQCAtNTIyNywyMSArNjQ4MywyMSBAQAogCiAJY2FzZSAkcHJldiBpbgogCWJpbmRpcikKLQkgIGJpbmRpcj0iJGFyZyIKKwkgIGJpbmRpcj0kYXJnCiAJICBwcmV2PQogCSAgY29udGludWUKIAkgIDs7CiAJZGxmaWxlc3xkbHByZWZpbGVzKQotCSAgaWYgdGVzdCAiJHByZWxvYWQiID0gbm87IHRoZW4KKwkgICRwcmVsb2FkIHx8IHsKIAkgICAgIyBBZGQgdGhlIHN5bWJvbCBvYmplY3QgaW50byB0aGUgbGlua2luZyBjb21tYW5kcy4KIAkgICAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgQFNZTUZJTEVAIgogCSAgICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgQFNZTUZJTEVAIgotCSAgICBwcmVsb2FkPXllcwotCSAgZmkKKwkgICAgcHJlbG9hZD06CisJICB9CiAJICBjYXNlICRhcmcgaW4KIAkgICoubGEgfCAqLmxvKSA7OyAgIyBXZSBoYW5kbGUgdGhlc2UgY2FzZXMgYmVsb3cuCiAJICBmb3JjZSkKLQkgICAgaWYgdGVzdCAiJGRsc2VsZiIgPSBubzsgdGhlbgorCSAgICBpZiB0ZXN0IG5vID0gIiRkbHNlbGYiOyB0aGVuCiAJICAgICAgZGxzZWxmPW5lZWRsZXNzCiAJICAgICAgZXhwb3J0X2R5bmFtaWM9eWVzCiAJICAgIGZpCkBAIC01MjQ5LDkgKzY1MDUsOSBAQAogCSAgICBjb250aW51ZQogCSAgICA7OwogCSAgc2VsZikKLQkgICAgaWYgdGVzdCAiJHByZXYiID0gZGxwcmVmaWxlczsgdGhlbgorCSAgICBpZiB0ZXN0IGRscHJlZmlsZXMgPSAiJHByZXYiOyB0aGVuCiAJICAgICAgZGxzZWxmPXllcwotCSAgICBlbGlmIHRlc3QgIiRwcmV2IiA9IGRsZmlsZXMgJiYgdGVzdCAiJGRsb3Blbl9zZWxmIiAhPSB5ZXM7IHRoZW4KKwkgICAgZWxpZiB0ZXN0IGRsZmlsZXMgPSAiJHByZXYiICYmIHRlc3QgeWVzICE9ICIkZGxvcGVuX3NlbGYiOyB0aGVuCiAJICAgICAgZGxzZWxmPXllcwogCSAgICBlbHNlCiAJICAgICAgZGxzZWxmPW5lZWRsZXNzCkBAIC01MjYxLDcgKzY1MTcsNyBAQAogCSAgICBjb250aW51ZQogCSAgICA7OwogCSAgKikKLQkgICAgaWYgdGVzdCAiJHByZXYiID0gZGxmaWxlczsgdGhlbgorCSAgICBpZiB0ZXN0IGRsZmlsZXMgPSAiJHByZXYiOyB0aGVuCiAJICAgICAgZnVuY19hcHBlbmQgZGxmaWxlcyAiICRhcmciCiAJICAgIGVsc2UKIAkgICAgICBmdW5jX2FwcGVuZCBkbHByZWZpbGVzICIgJGFyZyIKQEAgLTUyNzIsMTQgKzY1MjgsMTQgQEAKIAkgIGVzYWMKIAkgIDs7CiAJZXhwc3ltcykKLQkgIGV4cG9ydF9zeW1ib2xzPSIkYXJnIgorCSAgZXhwb3J0X3N5bWJvbHM9JGFyZwogCSAgdGVzdCAtZiAiJGFyZyIgXAotCSAgICB8fCBmdW5jX2ZhdGFsX2Vycm9yICJzeW1ib2wgZmlsZSBcYCRhcmcnIGRvZXMgbm90IGV4aXN0IgorCSAgICB8fCBmdW5jX2ZhdGFsX2Vycm9yICJzeW1ib2wgZmlsZSAnJGFyZycgZG9lcyBub3QgZXhpc3QiCiAJICBwcmV2PQogCSAgY29udGludWUKIAkgIDs7CiAJZXhwc3ltc19yZWdleCkKLQkgIGV4cG9ydF9zeW1ib2xzX3JlZ2V4PSIkYXJnIgorCSAgZXhwb3J0X3N5bWJvbHNfcmVnZXg9JGFyZwogCSAgcHJldj0KIAkgIGNvbnRpbnVlCiAJICA7OwpAQCAtNTI5Nyw3ICs2NTUzLDEzIEBACiAJICBjb250aW51ZQogCSAgOzsKIAlpbnN0X3ByZWZpeCkKLQkgIGluc3RfcHJlZml4X2Rpcj0iJGFyZyIKKwkgIGluc3RfcHJlZml4X2Rpcj0kYXJnCisJICBwcmV2PQorCSAgY29udGludWUKKwkgIDs7CisJbWxsdm0pCisJICAjIENsYW5nIGRvZXMgbm90IHVzZSBMTFZNIHRvIGxpbmssIHNvIHdlIGNhbiBzaW1wbHkgZGlzY2FyZCBhbnkKKwkgICMgJy1tbGx2bSAkYXJnJyBvcHRpb25zIHdoZW4gZG9pbmcgdGhlIGxpbmsgc3RlcC4KIAkgIHByZXY9CiAJICBjb250aW51ZQogCSAgOzsKQEAgLTUzMjEsMjEgKzY1ODMsMjEgQEAKIAogCQlpZiB0ZXN0IC16ICIkcGljX29iamVjdCIgfHwKIAkJICAgdGVzdCAteiAiJG5vbl9waWNfb2JqZWN0IiB8fAotCQkgICB0ZXN0ICIkcGljX29iamVjdCIgPSBub25lICYmCi0JCSAgIHRlc3QgIiRub25fcGljX29iamVjdCIgPSBub25lOyB0aGVuCi0JCSAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGZpbmQgbmFtZSBvZiBvYmplY3QgZm9yIFxgJGFyZyciCisJCSAgIHRlc3Qgbm9uZSA9ICIkcGljX29iamVjdCIgJiYKKwkJICAgdGVzdCBub25lID0gIiRub25fcGljX29iamVjdCI7IHRoZW4KKwkJICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZmluZCBuYW1lIG9mIG9iamVjdCBmb3IgJyRhcmcnIgogCQlmaQogCiAJCSMgRXh0cmFjdCBzdWJkaXJlY3RvcnkgZnJvbSB0aGUgYXJndW1lbnQuCiAJCWZ1bmNfZGlybmFtZSAiJGFyZyIgIi8iICIiCi0JCXhkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorCQl4ZGlyPSRmdW5jX2Rpcm5hbWVfcmVzdWx0CiAKLQkJaWYgdGVzdCAiJHBpY19vYmplY3QiICE9IG5vbmU7IHRoZW4KKwkJaWYgdGVzdCBub25lICE9ICIkcGljX29iamVjdCI7IHRoZW4KIAkJICAjIFByZXBlbmQgdGhlIHN1YmRpcmVjdG9yeSB0aGUgb2JqZWN0IGlzIGZvdW5kIGluLgotCQkgIHBpY19vYmplY3Q9IiR4ZGlyJHBpY19vYmplY3QiCisJCSAgcGljX29iamVjdD0keGRpciRwaWNfb2JqZWN0CiAKLQkJICBpZiB0ZXN0ICIkcHJldiIgPSBkbGZpbGVzOyB0aGVuCi0JCSAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllcyAmJiB0ZXN0ICIkZGxvcGVuX3N1cHBvcnQiID0geWVzOyB0aGVuCisJCSAgaWYgdGVzdCBkbGZpbGVzID0gIiRwcmV2IjsgdGhlbgorCQkgICAgaWYgdGVzdCB5ZXMgPSAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgJiYgdGVzdCB5ZXMgPSAiJGRsb3Blbl9zdXBwb3J0IjsgdGhlbgogCQkgICAgICBmdW5jX2FwcGVuZCBkbGZpbGVzICIgJHBpY19vYmplY3QiCiAJCSAgICAgIHByZXY9CiAJCSAgICAgIGNvbnRpbnVlCkBAIC01MzQ2LDcgKzY2MDgsNyBAQAogCQkgIGZpCiAKIAkJICAjIENIRUNLIE1FOiAgSSB0aGluayBJIGJ1c3RlZCB0aGlzLiAgLU9zc2FtYQotCQkgIGlmIHRlc3QgIiRwcmV2IiA9IGRscHJlZmlsZXM7IHRoZW4KKwkJICBpZiB0ZXN0IGRscHJlZmlsZXMgPSAiJHByZXYiOyB0aGVuCiAJCSAgICAjIFByZWxvYWQgdGhlIG9sZC1zdHlsZSBvYmplY3QuCiAJCSAgICBmdW5jX2FwcGVuZCBkbHByZWZpbGVzICIgJHBpY19vYmplY3QiCiAJCSAgICBwcmV2PQpAQCAtNTM1NCwyMyArNjYxNiwyMyBAQAogCiAJCSAgIyBBIFBJQyBvYmplY3QuCiAJCSAgZnVuY19hcHBlbmQgbGlib2JqcyAiICRwaWNfb2JqZWN0IgotCQkgIGFyZz0iJHBpY19vYmplY3QiCisJCSAgYXJnPSRwaWNfb2JqZWN0CiAJCWZpCiAKIAkJIyBOb24tUElDIG9iamVjdC4KLQkJaWYgdGVzdCAiJG5vbl9waWNfb2JqZWN0IiAhPSBub25lOyB0aGVuCisJCWlmIHRlc3Qgbm9uZSAhPSAiJG5vbl9waWNfb2JqZWN0IjsgdGhlbgogCQkgICMgUHJlcGVuZCB0aGUgc3ViZGlyZWN0b3J5IHRoZSBvYmplY3QgaXMgZm91bmQgaW4uCi0JCSAgbm9uX3BpY19vYmplY3Q9IiR4ZGlyJG5vbl9waWNfb2JqZWN0IgorCQkgIG5vbl9waWNfb2JqZWN0PSR4ZGlyJG5vbl9waWNfb2JqZWN0CiAKIAkJICAjIEEgc3RhbmRhcmQgbm9uLVBJQyBvYmplY3QKIAkJICBmdW5jX2FwcGVuZCBub25fcGljX29iamVjdHMgIiAkbm9uX3BpY19vYmplY3QiCi0JCSAgaWYgdGVzdCAteiAiJHBpY19vYmplY3QiIHx8IHRlc3QgIiRwaWNfb2JqZWN0IiA9IG5vbmUgOyB0aGVuCi0JCSAgICBhcmc9IiRub25fcGljX29iamVjdCIKKwkJICBpZiB0ZXN0IC16ICIkcGljX29iamVjdCIgfHwgdGVzdCBub25lID0gIiRwaWNfb2JqZWN0IjsgdGhlbgorCQkgICAgYXJnPSRub25fcGljX29iamVjdAogCQkgIGZpCiAJCWVsc2UKIAkJICAjIElmIHRoZSBQSUMgb2JqZWN0IGV4aXN0cywgdXNlIGl0IGluc3RlYWQuCiAJCSAgIyAkeGRpciB3YXMgcHJlcGVuZGVkIHRvICRwaWNfb2JqZWN0IGFib3ZlLgotCQkgIG5vbl9waWNfb2JqZWN0PSIkcGljX29iamVjdCIKKwkJICBub25fcGljX29iamVjdD0kcGljX29iamVjdAogCQkgIGZ1bmNfYXBwZW5kIG5vbl9waWNfb2JqZWN0cyAiICRub25fcGljX29iamVjdCIKIAkJZmkKIAkgICAgICBlbHNlCkBAIC01Mzc4LDcgKzY2NDAsNyBAQAogCQlpZiAkb3B0X2RyeV9ydW47IHRoZW4KIAkJICAjIEV4dHJhY3Qgc3ViZGlyZWN0b3J5IGZyb20gdGhlIGFyZ3VtZW50LgogCQkgIGZ1bmNfZGlybmFtZSAiJGFyZyIgIi8iICIiCi0JCSAgeGRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisJCSAgeGRpcj0kZnVuY19kaXJuYW1lX3Jlc3VsdAogCiAJCSAgZnVuY19sbzJvICIkYXJnIgogCQkgIHBpY19vYmplY3Q9JHhkaXIkb2JqZGlyLyRmdW5jX2xvMm9fcmVzdWx0CkBAIC01Mzg2LDI0ICs2NjQ4LDI0IEBACiAJCSAgZnVuY19hcHBlbmQgbGlib2JqcyAiICRwaWNfb2JqZWN0IgogCQkgIGZ1bmNfYXBwZW5kIG5vbl9waWNfb2JqZWN0cyAiICRub25fcGljX29iamVjdCIKIAkgICAgICAgIGVsc2UKLQkJICBmdW5jX2ZhdGFsX2Vycm9yICJcYCRhcmcnIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgb2JqZWN0IgorCQkgIGZ1bmNfZmF0YWxfZXJyb3IgIickYXJnJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIG9iamVjdCIKIAkJZmkKIAkgICAgICBmaQogCSAgICBkb25lCiAJICBlbHNlCi0JICAgIGZ1bmNfZmF0YWxfZXJyb3IgImxpbmsgaW5wdXQgZmlsZSBcYCRhcmcnIGRvZXMgbm90IGV4aXN0IgorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJsaW5rIGlucHV0IGZpbGUgJyRhcmcnIGRvZXMgbm90IGV4aXN0IgogCSAgZmkKIAkgIGFyZz0kc2F2ZV9hcmcKIAkgIHByZXY9CiAJICBjb250aW51ZQogCSAgOzsKIAlwcmVjaW91c19yZWdleCkKLQkgIHByZWNpb3VzX2ZpbGVzX3JlZ2V4PSIkYXJnIgorCSAgcHJlY2lvdXNfZmlsZXNfcmVnZXg9JGFyZwogCSAgcHJldj0KIAkgIGNvbnRpbnVlCiAJICA7OwogCXJlbGVhc2UpCi0JICByZWxlYXNlPSItJGFyZyIKKwkgIHJlbGVhc2U9LSRhcmcKIAkgIHByZXY9CiAJICBjb250aW51ZQogCSAgOzsKQEAgLTU0MTUsNyArNjY3Nyw3IEBACiAJICAgIGZ1bmNfZmF0YWxfZXJyb3IgIm9ubHkgYWJzb2x1dGUgcnVuLXBhdGhzIGFyZSBhbGxvd2VkIgogCSAgICA7OwogCSAgZXNhYwotCSAgaWYgdGVzdCAiJHByZXYiID0gcnBhdGg7IHRoZW4KKwkgIGlmIHRlc3QgcnBhdGggPSAiJHByZXYiOyB0aGVuCiAJICAgIGNhc2UgIiRycGF0aCAiIGluCiAJICAgICoiICRhcmcgIiopIDs7CiAJICAgICopIGZ1bmNfYXBwZW5kIHJwYXRoICIgJGFyZyIgOzsKQEAgLTU0MzAsNyArNjY5Miw3IEBACiAJICBjb250aW51ZQogCSAgOzsKIAlzaHJleHQpCi0JICBzaHJleHRfY21kcz0iJGFyZyIKKwkgIHNocmV4dF9jbWRzPSRhcmcKIAkgIHByZXY9CiAJICBjb250aW51ZQogCSAgOzsKQEAgLTU0NzAsNyArNjczMiw3IEBACiAJZXNhYwogICAgICAgZmkgIyB0ZXN0IC1uICIkcHJldiIKIAotICAgICAgcHJldmFyZz0iJGFyZyIKKyAgICAgIHByZXZhcmc9JGFyZwogCiAgICAgICBjYXNlICRhcmcgaW4KICAgICAgIC1hbGwtc3RhdGljKQpAQCAtNTQ4NCw3ICs2NzQ2LDcgQEAKIAogICAgICAgLWFsbG93LXVuZGVmaW5lZCkKIAkjIEZJWE1FOiByZW1vdmUgdGhpcyBmbGFnIHNvbWV0aW1lIGluIHRoZSBmdXR1cmUuCi0JZnVuY19mYXRhbF9lcnJvciAiXGAtYWxsb3ctdW5kZWZpbmVkJyBtdXN0IG5vdCBiZSB1c2VkIGJlY2F1c2UgaXQgaXMgdGhlIGRlZmF1bHQiCisJZnVuY19mYXRhbF9lcnJvciAiJy1hbGxvdy11bmRlZmluZWQnIG11c3Qgbm90IGJlIHVzZWQgYmVjYXVzZSBpdCBpcyB0aGUgZGVmYXVsdCIKIAk7OwogCiAgICAgICAtYXZvaWQtdmVyc2lvbikKQEAgLTU1MTYsNyArNjc3OCw3IEBACiAJaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiB8fCB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHNfcmVnZXgiOyB0aGVuCiAJICBmdW5jX2ZhdGFsX2Vycm9yICJtb3JlIHRoYW4gb25lIC1leHBvcnRlZC1zeW1ib2xzIGFyZ3VtZW50IGlzIG5vdCBhbGxvd2VkIgogCWZpCi0JaWYgdGVzdCAiWCRhcmciID0gIlgtZXhwb3J0LXN5bWJvbHMiOyB0aGVuCisJaWYgdGVzdCBYLWV4cG9ydC1zeW1ib2xzID0gIlgkYXJnIjsgdGhlbgogCSAgcHJldj1leHBzeW1zCiAJZWxzZQogCSAgcHJldj1leHBzeW1zX3JlZ2V4CkBAIC01NTUwLDkgKzY4MTIsOSBAQAogCWZ1bmNfc3RyaXBuYW1lICItTCIgJycgIiRhcmciCiAJaWYgdGVzdCAteiAiJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCI7IHRoZW4KIAkgIGlmIHRlc3QgIiQjIiAtZ3QgMDsgdGhlbgotCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJyZXF1aXJlIG5vIHNwYWNlIGJldHdlZW4gXGAtTCcgYW5kIFxgJDEnIgorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJyZXF1aXJlIG5vIHNwYWNlIGJldHdlZW4gJy1MJyBhbmQgJyQxJyIKIAkgIGVsc2UKLQkgICAgZnVuY19mYXRhbF9lcnJvciAibmVlZCBwYXRoIGZvciBcYC1MJyBvcHRpb24iCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgIm5lZWQgcGF0aCBmb3IgJy1MJyBvcHRpb24iCiAJICBmaQogCWZpCiAJZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiCkBAIC01NTYzLDggKzY4MjUsOCBAQAogCSopCiAJICBhYnNkaXI9YGNkICIkZGlyIiAmJiBwd2RgCiAJICB0ZXN0IC16ICIkYWJzZGlyIiAmJiBcCi0JICAgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBkZXRlcm1pbmUgYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWUgb2YgXGAkZGlyJyIKLQkgIGRpcj0iJGFic2RpciIKKwkgICAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGRldGVybWluZSBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZSBvZiAnJGRpciciCisJICBkaXI9JGFic2RpcgogCSAgOzsKIAllc2FjCiAJY2FzZSAiJGRlcGxpYnMgIiBpbgpAQCAtNTU5OSw3ICs2ODYxLDcgQEAKIAk7OwogCiAgICAgICAtbCopCi0JaWYgdGVzdCAiWCRhcmciID0gIlgtbGMiIHx8IHRlc3QgIlgkYXJnIiA9ICJYLWxtIjsgdGhlbgorCWlmIHRlc3QgWC1sYyA9ICJYJGFyZyIgfHwgdGVzdCBYLWxtID0gIlgkYXJnIjsgdGhlbgogCSAgY2FzZSAkaG9zdCBpbgogCSAgKi0qLWN5Z3dpbiogfCAqLSotbWluZ3cqIHwgKi0qLXB3MzIqIHwgKi0qLWJlb3MqIHwgKi1jZWdjYyogfCAqLSotaGFpa3UqKQogCSAgICAjIFRoZXNlIHN5c3RlbXMgZG9uJ3QgYWN0dWFsbHkgaGF2ZSBhIEMgb3IgbWF0aCBsaWJyYXJ5IChhcyBzdWNoKQpAQCAtNTYwNywxMSArNjg2OSwxMSBAQAogCSAgICA7OwogCSAgKi0qLW9zMiopCiAJICAgICMgVGhlc2Ugc3lzdGVtcyBkb24ndCBhY3R1YWxseSBoYXZlIGEgQyBsaWJyYXJ5IChhcyBzdWNoKQotCSAgICB0ZXN0ICJYJGFyZyIgPSAiWC1sYyIgJiYgY29udGludWUKKwkgICAgdGVzdCBYLWxjID0gIlgkYXJnIiAmJiBjb250aW51ZQogCSAgICA7OwotCSAgKi0qLW9wZW5ic2QqIHwgKi0qLWZyZWVic2QqIHwgKi0qLWRyYWdvbmZseSopCisJICAqLSotb3BlbmJzZCogfCAqLSotZnJlZWJzZCogfCAqLSotZHJhZ29uZmx5KiB8ICotKi1iaXRyaWcqKQogCSAgICAjIERvIG5vdCBpbmNsdWRlIGxpYmMgZHVlIHRvIHVzIGhhdmluZyBsaWJjL2xpYmNfci4KLQkgICAgdGVzdCAiWCRhcmciID0gIlgtbGMiICYmIGNvbnRpbnVlCisJICAgIHRlc3QgWC1sYyA9ICJYJGFyZyIgJiYgY29udGludWUKIAkgICAgOzsKIAkgICotKi1yaGFwc29keSogfCAqLSotZGFyd2luMS5bMDEyXSkKIAkgICAgIyBSaGFwc29keSBDIGFuZCBtYXRoIGxpYnJhcmllcyBhcmUgaW4gdGhlIFN5c3RlbSBmcmFtZXdvcmsKQEAgLTU2MjAsMTYgKzY4ODIsMTYgQEAKIAkgICAgOzsKIAkgICotKi1zY28zLjJ2NSogfCAqLSotc2NvNXY2KikKIAkgICAgIyBDYXVzZXMgcHJvYmxlbXMgd2l0aCBfX2N0eXBlCi0JICAgIHRlc3QgIlgkYXJnIiA9ICJYLWxjIiAmJiBjb250aW51ZQorCSAgICB0ZXN0IFgtbGMgPSAiWCRhcmciICYmIGNvbnRpbnVlCiAJICAgIDs7CiAJICAqLSotc3lzdjQuMnV3MiogfCAqLSotc3lzdjUqIHwgKi0qLXVuaXh3YXJlKiB8ICotKi1PcGVuVU5JWCopCiAJICAgICMgQ29tcGlsZXIgaW5zZXJ0cyBsaWJjIGluIHRoZSBjb3JyZWN0IHBsYWNlIGZvciB0aHJlYWRzIHRvIHdvcmsKLQkgICAgdGVzdCAiWCRhcmciID0gIlgtbGMiICYmIGNvbnRpbnVlCisJICAgIHRlc3QgWC1sYyA9ICJYJGFyZyIgJiYgY29udGludWUKIAkgICAgOzsKIAkgIGVzYWMKLQllbGlmIHRlc3QgIlgkYXJnIiA9ICJYLWxjX3IiOyB0aGVuCisJZWxpZiB0ZXN0IFgtbGNfciA9ICJYJGFyZyI7IHRoZW4KIAkgY2FzZSAkaG9zdCBpbgotCSAqLSotb3BlbmJzZCogfCAqLSotZnJlZWJzZCogfCAqLSotZHJhZ29uZmx5KikKKwkgKi0qLW9wZW5ic2QqIHwgKi0qLWZyZWVic2QqIHwgKi0qLWRyYWdvbmZseSogfCAqLSotYml0cmlnKikKIAkgICAjIERvIG5vdCBpbmNsdWRlIGxpYmNfciBkaXJlY3RseSwgdXNlIC1wdGhyZWFkIGZsYWcuCiAJICAgY29udGludWUKIAkgICA7OwpAQCAtNTYzOSw2ICs2OTAxLDExIEBACiAJY29udGludWUKIAk7OwogCisgICAgICAtbWxsdm0pCisJcHJldj1tbGx2bQorCWNvbnRpbnVlCisJOzsKKwogICAgICAgLW1vZHVsZSkKIAltb2R1bGU9eWVzCiAJY29udGludWUKQEAgLTU2NjgsNyArNjkzNSw3IEBACiAJOzsKIAogICAgICAgLW11bHRpX21vZHVsZSkKLQlzaW5nbGVfbW9kdWxlPSIke3dsfS1tdWx0aV9tb2R1bGUiCisJc2luZ2xlX21vZHVsZT0kd2wtbXVsdGlfbW9kdWxlCiAJY29udGludWUKIAk7OwogCkBAIC01NjgyLDggKzY5NDksOCBAQAogCSotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1wdzMyKiB8ICotKi1vczIqIHwgKi0qLWRhcndpbiogfCAqLWNlZ2NjKikKIAkgICMgVGhlIFBBVEggaGFja2VyeSBpbiB3cmFwcGVyIHNjcmlwdHMgaXMgcmVxdWlyZWQgb24gV2luZG93cwogCSAgIyBhbmQgRGFyd2luIGluIG9yZGVyIGZvciB0aGUgbG9hZGVyIHRvIGZpbmQgYW55IGRsbHMgaXQgbmVlZHMuCi0JICBmdW5jX3dhcm5pbmcgIlxgLW5vLWluc3RhbGwnIGlzIGlnbm9yZWQgZm9yICRob3N0IgotCSAgZnVuY193YXJuaW5nICJhc3N1bWluZyBcYC1uby1mYXN0LWluc3RhbGwnIGluc3RlYWQiCisJICBmdW5jX3dhcm5pbmcgIictbm8taW5zdGFsbCcgaXMgaWdub3JlZCBmb3IgJGhvc3QiCisJICBmdW5jX3dhcm5pbmcgImFzc3VtaW5nICctbm8tZmFzdC1pbnN0YWxsJyBpbnN0ZWFkIgogCSAgZmFzdF9pbnN0YWxsPW5vCiAJICA7OwogCSopIG5vX2luc3RhbGw9eWVzIDs7CkBAIC01Nzg4LDE0ICs3MDU1LDE0IEBACiAJZnVuY19zdHJpcG5hbWUgJy1XYywnICcnICIkYXJnIgogCWFyZ3M9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAogCWFyZz0KLQlzYXZlX2lmcz0iJElGUyI7IElGUz0nLCcKKwlzYXZlX2lmcz0kSUZTOyBJRlM9LAogCWZvciBmbGFnIGluICRhcmdzOyBkbwotCSAgSUZTPSIkc2F2ZV9pZnMiCisJICBJRlM9JHNhdmVfaWZzCiAgICAgICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGZsYWciCiAJICBmdW5jX2FwcGVuZCBhcmcgIiAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCiAJICBmdW5jX2FwcGVuZCBjb21waWxlcl9mbGFncyAiICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKIAlkb25lCi0JSUZTPSIkc2F2ZV9pZnMiCisJSUZTPSRzYXZlX2lmcwogCWZ1bmNfc3RyaXBuYW1lICcgJyAnJyAiJGFyZyIKIAlhcmc9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAogCTs7CkBAIC01ODA0LDE1ICs3MDcxLDE1IEBACiAJZnVuY19zdHJpcG5hbWUgJy1XbCwnICcnICIkYXJnIgogCWFyZ3M9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAogCWFyZz0KLQlzYXZlX2lmcz0iJElGUyI7IElGUz0nLCcKKwlzYXZlX2lmcz0kSUZTOyBJRlM9LAogCWZvciBmbGFnIGluICRhcmdzOyBkbwotCSAgSUZTPSIkc2F2ZV9pZnMiCisJICBJRlM9JHNhdmVfaWZzCiAgICAgICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGZsYWciCiAJICBmdW5jX2FwcGVuZCBhcmcgIiAkd2wkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCiAJICBmdW5jX2FwcGVuZCBjb21waWxlcl9mbGFncyAiICR3bCRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKIAkgIGZ1bmNfYXBwZW5kIGxpbmtlcl9mbGFncyAiICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKIAlkb25lCi0JSUZTPSIkc2F2ZV9pZnMiCisJSUZTPSRzYXZlX2lmcwogCWZ1bmNfc3RyaXBuYW1lICcgJyAnJyAiJGFyZyIKIAlhcmc9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAogCTs7CkBAIC01ODM1LDcgKzcxMDIsNyBAQAogICAgICAgIyAtbXNnXyogZm9yIG9zZiBjYwogICAgICAgLW1zZ18qKQogCWZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCi0JYXJnPSIkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisJYXJnPSRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdAogCTs7CiAKICAgICAgICMgRmxhZ3MgdG8gYmUgcGFzc2VkIHRocm91Z2ggdW5jaGFuZ2VkLCB3aXRoIHJhdGlvbmFsZToKQEAgLTU4NTAsMTIgKzcxMTcsMTMgQEAKICAgICAgICMgQGZpbGUgICAgICAgICAgICAgICAgR0NDIHJlc3BvbnNlIGZpbGVzCiAgICAgICAjIC10cD0qICAgICAgICAgICAgICAgIFBvcnRsYW5kIHBnY2MgdGFyZ2V0IHByb2Nlc3NvciBzZWxlY3Rpb24KICAgICAgICMgLS1zeXNyb290PSogICAgICAgICAgZm9yIHN5c3Jvb3Qgc3VwcG9ydAotICAgICAgIyAtTyosIC1mbHRvKiwgLWZ3aG9wciosIC1mdXNlLWxpbmtlci1wbHVnaW4gR0NDIGxpbmstdGltZSBvcHRpbWl6YXRpb24KKyAgICAgICMgLU8qLCAtZyosIC1mbHRvKiwgLWZ3aG9wciosIC1mdXNlLWxpbmtlci1wbHVnaW4gR0NDIGxpbmstdGltZSBvcHRpbWl6YXRpb24KKyAgICAgICMgLXN0ZGxpYj0qICAgICAgICAgICAgc2VsZWN0IGMrKyBzdGQgbGliIHdpdGggY2xhbmcKICAgICAgIC02NHwtbWlwc1swLTldfC1yWzAtOV1bMC05XSp8LXhhcmNoPSp8LXh0YXJnZXQ9KnwrREEqfCtERCp8LXEqfC1tKnwgXAogICAgICAgLXRbNDVdKnwtdHhzY2FsZSp8LXB8LXBnfC0tY292ZXJhZ2V8LWZwcm9maWxlLSp8LUYqfEAqfC10cD0qfC0tc3lzcm9vdD0qfCBcCi0gICAgICAtTyp8LWZsdG8qfC1md2hvcHIqfC1mdXNlLWxpbmtlci1wbHVnaW4pCisgICAgICAtTyp8LWcqfC1mbHRvKnwtZndob3ByKnwtZnVzZS1saW5rZXItcGx1Z2lufC1zdGRsaWI9KikKICAgICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGFyZyIKLQlhcmc9IiRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKwlhcmc9JGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0CiAgICAgICAgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRhcmciCiAgICAgICAgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkYXJnIgogICAgICAgICBmdW5jX2FwcGVuZCBjb21waWxlcl9mbGFncyAiICRhcmciCkBAIC01ODY1LDcgKzcxMzMsNyBAQAogICAgICAgIyBTb21lIG90aGVyIGNvbXBpbGVyIGZsYWcuCiAgICAgICAtKiB8ICsqKQogICAgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkYXJnIgotCWFyZz0iJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorCWFyZz0kZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQKIAk7OwogCiAgICAgICAqLiRvYmpleHQpCkBAIC01ODg2LDIxICs3MTU0LDIxIEBACiAKIAkgIGlmIHRlc3QgLXogIiRwaWNfb2JqZWN0IiB8fAogCSAgICAgdGVzdCAteiAiJG5vbl9waWNfb2JqZWN0IiB8fAotCSAgICAgdGVzdCAiJHBpY19vYmplY3QiID0gbm9uZSAmJgotCSAgICAgdGVzdCAiJG5vbl9waWNfb2JqZWN0IiA9IG5vbmU7IHRoZW4KLQkgICAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGZpbmQgbmFtZSBvZiBvYmplY3QgZm9yIFxgJGFyZyciCisJICAgICB0ZXN0IG5vbmUgPSAiJHBpY19vYmplY3QiICYmCisJICAgICB0ZXN0IG5vbmUgPSAiJG5vbl9waWNfb2JqZWN0IjsgdGhlbgorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZmluZCBuYW1lIG9mIG9iamVjdCBmb3IgJyRhcmcnIgogCSAgZmkKIAogCSAgIyBFeHRyYWN0IHN1YmRpcmVjdG9yeSBmcm9tIHRoZSBhcmd1bWVudC4KIAkgIGZ1bmNfZGlybmFtZSAiJGFyZyIgIi8iICIiCi0JICB4ZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKwkgIHhkaXI9JGZ1bmNfZGlybmFtZV9yZXN1bHQKIAotCSAgaWYgdGVzdCAiJHBpY19vYmplY3QiICE9IG5vbmU7IHRoZW4KKwkgIHRlc3Qgbm9uZSA9ICIkcGljX29iamVjdCIgfHwgewogCSAgICAjIFByZXBlbmQgdGhlIHN1YmRpcmVjdG9yeSB0aGUgb2JqZWN0IGlzIGZvdW5kIGluLgotCSAgICBwaWNfb2JqZWN0PSIkeGRpciRwaWNfb2JqZWN0IgorCSAgICBwaWNfb2JqZWN0PSR4ZGlyJHBpY19vYmplY3QKIAotCSAgICBpZiB0ZXN0ICIkcHJldiIgPSBkbGZpbGVzOyB0aGVuCi0JICAgICAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXMgJiYgdGVzdCAiJGRsb3Blbl9zdXBwb3J0IiA9IHllczsgdGhlbgorCSAgICBpZiB0ZXN0IGRsZmlsZXMgPSAiJHByZXYiOyB0aGVuCisJICAgICAgaWYgdGVzdCB5ZXMgPSAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgJiYgdGVzdCB5ZXMgPSAiJGRsb3Blbl9zdXBwb3J0IjsgdGhlbgogCQlmdW5jX2FwcGVuZCBkbGZpbGVzICIgJHBpY19vYmplY3QiCiAJCXByZXY9CiAJCWNvbnRpbnVlCkBAIC01OTExLDcgKzcxNzksNyBAQAogCSAgICBmaQogCiAJICAgICMgQ0hFQ0sgTUU6ICBJIHRoaW5rIEkgYnVzdGVkIHRoaXMuICAtT3NzYW1hCi0JICAgIGlmIHRlc3QgIiRwcmV2IiA9IGRscHJlZmlsZXM7IHRoZW4KKwkgICAgaWYgdGVzdCBkbHByZWZpbGVzID0gIiRwcmV2IjsgdGhlbgogCSAgICAgICMgUHJlbG9hZCB0aGUgb2xkLXN0eWxlIG9iamVjdC4KIAkgICAgICBmdW5jX2FwcGVuZCBkbHByZWZpbGVzICIgJHBpY19vYmplY3QiCiAJICAgICAgcHJldj0KQEAgLTU5MTksMjMgKzcxODcsMjMgQEAKIAogCSAgICAjIEEgUElDIG9iamVjdC4KIAkgICAgZnVuY19hcHBlbmQgbGlib2JqcyAiICRwaWNfb2JqZWN0IgotCSAgICBhcmc9IiRwaWNfb2JqZWN0IgotCSAgZmkKKwkgICAgYXJnPSRwaWNfb2JqZWN0CisJICB9CiAKIAkgICMgTm9uLVBJQyBvYmplY3QuCi0JICBpZiB0ZXN0ICIkbm9uX3BpY19vYmplY3QiICE9IG5vbmU7IHRoZW4KKwkgIGlmIHRlc3Qgbm9uZSAhPSAiJG5vbl9waWNfb2JqZWN0IjsgdGhlbgogCSAgICAjIFByZXBlbmQgdGhlIHN1YmRpcmVjdG9yeSB0aGUgb2JqZWN0IGlzIGZvdW5kIGluLgotCSAgICBub25fcGljX29iamVjdD0iJHhkaXIkbm9uX3BpY19vYmplY3QiCisJICAgIG5vbl9waWNfb2JqZWN0PSR4ZGlyJG5vbl9waWNfb2JqZWN0CiAKIAkgICAgIyBBIHN0YW5kYXJkIG5vbi1QSUMgb2JqZWN0CiAJICAgIGZ1bmNfYXBwZW5kIG5vbl9waWNfb2JqZWN0cyAiICRub25fcGljX29iamVjdCIKLQkgICAgaWYgdGVzdCAteiAiJHBpY19vYmplY3QiIHx8IHRlc3QgIiRwaWNfb2JqZWN0IiA9IG5vbmUgOyB0aGVuCi0JICAgICAgYXJnPSIkbm9uX3BpY19vYmplY3QiCisJICAgIGlmIHRlc3QgLXogIiRwaWNfb2JqZWN0IiB8fCB0ZXN0IG5vbmUgPSAiJHBpY19vYmplY3QiOyB0aGVuCisJICAgICAgYXJnPSRub25fcGljX29iamVjdAogCSAgICBmaQogCSAgZWxzZQogCSAgICAjIElmIHRoZSBQSUMgb2JqZWN0IGV4aXN0cywgdXNlIGl0IGluc3RlYWQuCiAJICAgICMgJHhkaXIgd2FzIHByZXBlbmRlZCB0byAkcGljX29iamVjdCBhYm92ZS4KLQkgICAgbm9uX3BpY19vYmplY3Q9IiRwaWNfb2JqZWN0IgorCSAgICBub25fcGljX29iamVjdD0kcGljX29iamVjdAogCSAgICBmdW5jX2FwcGVuZCBub25fcGljX29iamVjdHMgIiAkbm9uX3BpY19vYmplY3QiCiAJICBmaQogCWVsc2UKQEAgLTU5NDMsNyArNzIxMSw3IEBACiAJICBpZiAkb3B0X2RyeV9ydW47IHRoZW4KIAkgICAgIyBFeHRyYWN0IHN1YmRpcmVjdG9yeSBmcm9tIHRoZSBhcmd1bWVudC4KIAkgICAgZnVuY19kaXJuYW1lICIkYXJnIiAiLyIgIiIKLQkgICAgeGRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisJICAgIHhkaXI9JGZ1bmNfZGlybmFtZV9yZXN1bHQKIAogCSAgICBmdW5jX2xvMm8gIiRhcmciCiAJICAgIHBpY19vYmplY3Q9JHhkaXIkb2JqZGlyLyRmdW5jX2xvMm9fcmVzdWx0CkBAIC01OTUxLDcgKzcyMTksNyBAQAogCSAgICBmdW5jX2FwcGVuZCBsaWJvYmpzICIgJHBpY19vYmplY3QiCiAJICAgIGZ1bmNfYXBwZW5kIG5vbl9waWNfb2JqZWN0cyAiICRub25fcGljX29iamVjdCIKIAkgIGVsc2UKLQkgICAgZnVuY19mYXRhbF9lcnJvciAiXGAkYXJnJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIG9iamVjdCIKKwkgICAgZnVuY19mYXRhbF9lcnJvciAiJyRhcmcnIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgb2JqZWN0IgogCSAgZmkKIAlmaQogCTs7CkBAIC01OTY3LDExICs3MjM1LDExIEBACiAJIyBBIGxpYnRvb2wtY29udHJvbGxlZCBsaWJyYXJ5LgogCiAJZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRhcmciCi0JaWYgdGVzdCAiJHByZXYiID0gZGxmaWxlczsgdGhlbgorCWlmIHRlc3QgZGxmaWxlcyA9ICIkcHJldiI7IHRoZW4KIAkgICMgVGhpcyBsaWJyYXJ5IHdhcyBzcGVjaWZpZWQgd2l0aCAtZGxvcGVuLgogCSAgZnVuY19hcHBlbmQgZGxmaWxlcyAiICRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQiCiAJICBwcmV2PQotCWVsaWYgdGVzdCAiJHByZXYiID0gZGxwcmVmaWxlczsgdGhlbgorCWVsaWYgdGVzdCBkbHByZWZpbGVzID0gIiRwcmV2IjsgdGhlbgogCSAgIyBUaGUgbGlicmFyeSB3YXMgc3BlY2lmaWVkIHdpdGggLWRscHJlb3Blbi4KIAkgIGZ1bmNfYXBwZW5kIGRscHJlZmlsZXMgIiAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IgogCSAgcHJldj0KQEAgLTU5ODYsNyArNzI1NCw3IEBACiAJIyBVbmtub3duIGFyZ3VtZW50cyBpbiBib3RoIGZpbmFsaXplX2NvbW1hbmQgYW5kIGNvbXBpbGVfY29tbWFuZCBuZWVkCiAJIyB0byBiZSBhZXN0aGV0aWNhbGx5IHF1b3RlZCBiZWNhdXNlIHRoZXkgYXJlIGV2YWxlZCBsYXRlci4KIAlmdW5jX3F1b3RlX2Zvcl9ldmFsICIkYXJnIgotCWFyZz0iJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorCWFyZz0kZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQKIAk7OwogICAgICAgZXNhYyAjIGFyZwogCkBAIC01OTk4LDkgKzcyNjYsOSBAQAogICAgIGRvbmUgIyBhcmd1bWVudCBwYXJzaW5nIGxvb3AKIAogICAgIHRlc3QgLW4gIiRwcmV2IiAmJiBcCi0gICAgICBmdW5jX2ZhdGFsX2hlbHAgInRoZSBcYCRwcmV2YXJnJyBvcHRpb24gcmVxdWlyZXMgYW4gYXJndW1lbnQiCisgICAgICBmdW5jX2ZhdGFsX2hlbHAgInRoZSAnJHByZXZhcmcnIG9wdGlvbiByZXF1aXJlcyBhbiBhcmd1bWVudCIKIAotICAgIGlmIHRlc3QgIiRleHBvcnRfZHluYW1pYyIgPSB5ZXMgJiYgdGVzdCAtbiAiJGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYyI7IHRoZW4KKyAgICBpZiB0ZXN0IHllcyA9ICIkZXhwb3J0X2R5bmFtaWMiICYmIHRlc3QgLW4gIiRleHBvcnRfZHluYW1pY19mbGFnX3NwZWMiOyB0aGVuCiAgICAgICBldmFsIGFyZz1cIiRleHBvcnRfZHluYW1pY19mbGFnX3NwZWNcIgogICAgICAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJGFyZyIKICAgICAgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkYXJnIgpAQCAtNjAwOSwxMiArNzI3NywxMiBAQAogICAgIG9sZGxpYnM9CiAgICAgIyBjYWxjdWxhdGUgdGhlIG5hbWUgb2YgdGhlIGZpbGUsIHdpdGhvdXQgaXRzIGRpcmVjdG9yeQogICAgIGZ1bmNfYmFzZW5hbWUgIiRvdXRwdXQiCi0gICAgb3V0cHV0bmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgotICAgIGxpYm9ianNfc2F2ZT0iJGxpYm9ianMiCisgICAgb3V0cHV0bmFtZT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKKyAgICBsaWJvYmpzX3NhdmU9JGxpYm9ianMKIAogICAgIGlmIHRlc3QgLW4gIiRzaGxpYnBhdGhfdmFyIjsgdGhlbgogICAgICAgIyBnZXQgdGhlIGRpcmVjdG9yaWVzIGxpc3RlZCBpbiAkc2hsaWJwYXRoX3ZhcgotICAgICAgZXZhbCBzaGxpYl9zZWFyY2hfcGF0aD1cYFwkRUNITyBcIlwkeyRzaGxpYnBhdGhfdmFyfVwiIFx8IFwkU0VEIFwncy86LyAvZ1wnXGAKKyAgICAgIGV2YWwgc2hsaWJfc2VhcmNoX3BhdGg9XGBcJEVDSE8gXCJcJCRzaGxpYnBhdGhfdmFyXCIgXHwgXCRTRUQgXCdzLzovIC9nXCdcYAogICAgIGVsc2UKICAgICAgIHNobGliX3NlYXJjaF9wYXRoPQogICAgIGZpCkBAIC02MDIyLDcgKzcyOTAsNyBAQAogICAgIGV2YWwgc3lzX2xpYl9kbHNlYXJjaF9wYXRoPVwiJHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjXCIKIAogICAgIGZ1bmNfZGlybmFtZSAiJG91dHB1dCIgIi8iICIiCi0gICAgb3V0cHV0X29iamRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQkb2JqZGlyIgorICAgIG91dHB1dF9vYmpkaXI9JGZ1bmNfZGlybmFtZV9yZXN1bHQkb2JqZGlyCiAgICAgZnVuY190b190b29sX2ZpbGUgIiRvdXRwdXRfb2JqZGlyLyIKICAgICB0b29sX291dHB1dF9vYmpkaXI9JGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdAogICAgICMgQ3JlYXRlIHRoZSBvYmplY3QgZGlyZWN0b3J5LgpAQCAtNjA0NSw3ICs3MzEzLDcgQEAKICAgICAjIEZpbmQgYWxsIGludGVyZGVwZW5kZW50IGRlcGxpYnMgYnkgc2VhcmNoaW5nIGZvciBsaWJyYXJpZXMKICAgICAjIHRoYXQgYXJlIGxpbmtlZCBtb3JlIHRoYW4gb25jZSAoZS5nLiAtbGEgLWxiIC1sYSkKICAgICBmb3IgZGVwbGliIGluICRkZXBsaWJzOyBkbwotICAgICAgaWYgJG9wdF9wcmVzZXJ2ZV9kdXBfZGVwcyA7IHRoZW4KKyAgICAgIGlmICRvcHRfcHJlc2VydmVfZHVwX2RlcHM7IHRoZW4KIAljYXNlICIkbGlicyAiIGluCiAJKiIgJGRlcGxpYiAiKikgZnVuY19hcHBlbmQgc3BlY2lhbGRlcGxpYnMgIiAkZGVwbGliIiA7OwogCWVzYWMKQEAgLTYwNTMsNyArNzMyMSw3IEBACiAgICAgICBmdW5jX2FwcGVuZCBsaWJzICIgJGRlcGxpYiIKICAgICBkb25lCiAKLSAgICBpZiB0ZXN0ICIkbGlua21vZGUiID0gbGliOyB0aGVuCisgICAgaWYgdGVzdCBsaWIgPSAiJGxpbmttb2RlIjsgdGhlbgogICAgICAgbGlicz0iJHByZWRlcHMgJGxpYnMgJGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCAkcG9zdGRlcHMiCiAKICAgICAgICMgQ29tcHV0ZSBsaWJyYXJpZXMgdGhhdCBhcmUgbGlzdGVkIG1vcmUgdGhhbiBvbmNlIGluICRwcmVkZXBzCkBAIC02MDg1LDcgKzczNTMsNyBAQAogCSAgY2FzZSAkZmlsZSBpbgogCSAgKi5sYSkgOzsKIAkgICopCi0JICAgIGZ1bmNfZmF0YWxfaGVscCAibGlicmFyaWVzIGNhbiBcYC1kbG9wZW4nIG9ubHkgbGlidG9vbCBsaWJyYXJpZXM6ICRmaWxlIgorCSAgICBmdW5jX2ZhdGFsX2hlbHAgImxpYnJhcmllcyBjYW4gJy1kbG9wZW4nIG9ubHkgbGlidG9vbCBsaWJyYXJpZXM6ICRmaWxlIgogCSAgICA7OwogCSAgZXNhYwogCWRvbmUKQEAgLTYwOTMsNyArNzM2MSw3IEBACiAgICAgcHJvZykKIAljb21waWxlX2RlcGxpYnM9CiAJZmluYWxpemVfZGVwbGlicz0KLQlhbGxkZXBsaWJzPW5vCisJYWxsZGVwbGlicz1mYWxzZQogCW5ld2RsZmlsZXM9CiAJbmV3ZGxwcmVmaWxlcz0KIAlwYXNzZXM9ImNvbnYgc2NhbiBkbG9wZW4gZGxwcmVvcGVuIGxpbmsiCkBAIC02MTA1LDI5ICs3MzczLDI5IEBACiAgICAgZm9yIHBhc3MgaW4gJHBhc3NlczsgZG8KICAgICAgICMgVGhlIHByZW9wZW4gcGFzcyBpbiBsaWIgbW9kZSByZXZlcnNlcyAkZGVwbGliczsgcHV0IGl0IGJhY2sgaGVyZQogICAgICAgIyBzbyB0aGF0IC1MIGNvbWVzIGJlZm9yZSBsaWJzIHRoYXQgbmVlZCBpdCBmb3IgaW5zdGFuY2UuLi4KLSAgICAgIGlmIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAibGliLGxpbmsiOyB0aGVuCisgICAgICBpZiB0ZXN0IGxpYixsaW5rID0gIiRsaW5rbW9kZSwkcGFzcyI7IHRoZW4KIAkjIyBGSVhNRTogRmluZCB0aGUgcGxhY2Ugd2hlcmUgdGhlIGxpc3QgaXMgcmVidWlsdCBpbiB0aGUgd3JvbmcKIAkjIyAgICAgICAgb3JkZXIsIGFuZCBmaXggaXQgdGhlcmUgcHJvcGVybHkKICAgICAgICAgdG1wX2RlcGxpYnM9CiAJZm9yIGRlcGxpYiBpbiAkZGVwbGliczsgZG8KIAkgIHRtcF9kZXBsaWJzPSIkZGVwbGliICR0bXBfZGVwbGlicyIKIAlkb25lCi0JZGVwbGlicz0iJHRtcF9kZXBsaWJzIgorCWRlcGxpYnM9JHRtcF9kZXBsaWJzCiAgICAgICBmaQogCi0gICAgICBpZiB0ZXN0ICIkbGlua21vZGUsJHBhc3MiID0gImxpYixsaW5rIiB8fAotCSB0ZXN0ICIkbGlua21vZGUsJHBhc3MiID0gInByb2csc2NhbiI7IHRoZW4KLQlsaWJzPSIkZGVwbGlicyIKKyAgICAgIGlmIHRlc3QgbGliLGxpbmsgPSAiJGxpbmttb2RlLCRwYXNzIiB8fAorCSB0ZXN0IHByb2csc2NhbiA9ICIkbGlua21vZGUsJHBhc3MiOyB0aGVuCisJbGlicz0kZGVwbGlicwogCWRlcGxpYnM9CiAgICAgICBmaQotICAgICAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2c7IHRoZW4KKyAgICAgIGlmIHRlc3QgcHJvZyA9ICIkbGlua21vZGUiOyB0aGVuCiAJY2FzZSAkcGFzcyBpbgotCWRsb3BlbikgbGlicz0iJGRsZmlsZXMiIDs7Ci0JZGxwcmVvcGVuKSBsaWJzPSIkZGxwcmVmaWxlcyIgOzsKKwlkbG9wZW4pIGxpYnM9JGRsZmlsZXMgOzsKKwlkbHByZW9wZW4pIGxpYnM9JGRscHJlZmlsZXMgOzsKIAlsaW5rKSBsaWJzPSIkZGVwbGlicyAlREVQTElCUyUgJGRlcGVuZGVuY3lfbGlicyIgOzsKIAllc2FjCiAgICAgICBmaQotICAgICAgaWYgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiA9ICJsaWIsZGxwcmVvcGVuIjsgdGhlbgorICAgICAgaWYgdGVzdCBsaWIsZGxwcmVvcGVuID0gIiRsaW5rbW9kZSwkcGFzcyI7IHRoZW4KIAkjIENvbGxlY3QgYW5kIGZvcndhcmQgZGVwbGlicyBvZiBwcmVvcGVuZWQgbGlidG9vbCBsaWJzCiAJZm9yIGxpYiBpbiAkZGxwcmVmaWxlczsgZG8KIAkgICMgSWdub3JlIG5vbi1saWJ0b29sLWxpYnMKQEAgLTYxNDgsMjYgKzc0MTYsMjYgQEAKIAkgICAgZXNhYwogCSAgZG9uZQogCWRvbmUKLQlsaWJzPSIkZGxwcmVmaWxlcyIKKwlsaWJzPSRkbHByZWZpbGVzCiAgICAgICBmaQotICAgICAgaWYgdGVzdCAiJHBhc3MiID0gZGxvcGVuOyB0aGVuCisgICAgICBpZiB0ZXN0IGRsb3BlbiA9ICIkcGFzcyI7IHRoZW4KIAkjIENvbGxlY3QgZGxwcmVvcGVuZWQgbGlicmFyaWVzCi0Jc2F2ZV9kZXBsaWJzPSIkZGVwbGlicyIKKwlzYXZlX2RlcGxpYnM9JGRlcGxpYnMKIAlkZXBsaWJzPQogICAgICAgZmkKIAogICAgICAgZm9yIGRlcGxpYiBpbiAkbGliczsgZG8KIAlsaWI9Ci0JZm91bmQ9bm8KKwlmb3VuZD1mYWxzZQogCWNhc2UgJGRlcGxpYiBpbgogCS1tdHwtbXRocmVhZHN8LWt0aHJlYWR8LUt0aHJlYWR8LXB0aHJlYWR8LXB0aHJlYWRzfC0tdGhyZWFkLXNhZmUgXAogICAgICAgICB8LXRocmVhZHN8LWZvcGVubXB8LW9wZW5tcHwtbXB8LXhvcGVubXB8LW9tcHwtcXNtcD0qKQotCSAgaWYgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiA9ICJwcm9nLGxpbmsiOyB0aGVuCisJICBpZiB0ZXN0IHByb2csbGluayA9ICIkbGlua21vZGUsJHBhc3MiOyB0aGVuCiAJICAgIGNvbXBpbGVfZGVwbGlicz0iJGRlcGxpYiAkY29tcGlsZV9kZXBsaWJzIgogCSAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGVwbGliICRmaW5hbGl6ZV9kZXBsaWJzIgogCSAgZWxzZQogCSAgICBmdW5jX2FwcGVuZCBjb21waWxlcl9mbGFncyAiICRkZXBsaWIiCi0JICAgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBsaWIgOyB0aGVuCisJICAgIGlmIHRlc3QgbGliID0gIiRsaW5rbW9kZSI7IHRoZW4KIAkJY2FzZSAiJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICIgaW4KIAkJICAgICoiICRkZXBsaWIgIiopIDs7CiAJCSAgICAqICkgZnVuY19hcHBlbmQgbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgIiAkZGVwbGliIiA7OwpAQCAtNjE3NywxMyArNzQ0NSwxMyBAQAogCSAgY29udGludWUKIAkgIDs7CiAJLWwqKQotCSAgaWYgdGVzdCAiJGxpbmttb2RlIiAhPSBsaWIgJiYgdGVzdCAiJGxpbmttb2RlIiAhPSBwcm9nOyB0aGVuCi0JICAgIGZ1bmNfd2FybmluZyAiXGAtbCcgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMvb2JqZWN0cyIKKwkgIGlmIHRlc3QgbGliICE9ICIkbGlua21vZGUiICYmIHRlc3QgcHJvZyAhPSAiJGxpbmttb2RlIjsgdGhlbgorCSAgICBmdW5jX3dhcm5pbmcgIictbCcgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMvb2JqZWN0cyIKIAkgICAgY29udGludWUKIAkgIGZpCiAJICBmdW5jX3N0cmlwbmFtZSAnLWwnICcnICIkZGVwbGliIgogCSAgbmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0Ci0JICBpZiB0ZXN0ICIkbGlua21vZGUiID0gbGliOyB0aGVuCisJICBpZiB0ZXN0IGxpYiA9ICIkbGlua21vZGUiOyB0aGVuCiAJICAgIHNlYXJjaGRpcnM9IiRuZXdsaWJfc2VhcmNoX3BhdGggJGxpYl9zZWFyY2hfcGF0aCAkY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzICRzeXNfbGliX3NlYXJjaF9wYXRoICRzaGxpYl9zZWFyY2hfcGF0aCIKIAkgIGVsc2UKIAkgICAgc2VhcmNoZGlycz0iJG5ld2xpYl9zZWFyY2hfcGF0aCAkbGliX3NlYXJjaF9wYXRoICRzeXNfbGliX3NlYXJjaF9wYXRoICRzaGxpYl9zZWFyY2hfcGF0aCIKQEAgLTYxOTEsMzEgKzc0NTksMjIgQEAKIAkgIGZvciBzZWFyY2hkaXIgaW4gJHNlYXJjaGRpcnM7IGRvCiAJICAgIGZvciBzZWFyY2hfZXh0IGluIC5sYSAkc3RkX3NocmV4dCAuc28gLmE7IGRvCiAJICAgICAgIyBTZWFyY2ggdGhlIGxpYnRvb2wgbGlicmFyeQotCSAgICAgIGxpYj0iJHNlYXJjaGRpci9saWIke25hbWV9JHtzZWFyY2hfZXh0fSIKKwkgICAgICBsaWI9JHNlYXJjaGRpci9saWIkbmFtZSRzZWFyY2hfZXh0CiAJICAgICAgaWYgdGVzdCAtZiAiJGxpYiI7IHRoZW4KLQkJaWYgdGVzdCAiJHNlYXJjaF9leHQiID0gIi5sYSI7IHRoZW4KLQkJICBmb3VuZD15ZXMKKwkJaWYgdGVzdCAubGEgPSAiJHNlYXJjaF9leHQiOyB0aGVuCisJCSAgZm91bmQ9OgogCQllbHNlCi0JCSAgZm91bmQ9bm8KKwkJICBmb3VuZD1mYWxzZQogCQlmaQogCQlicmVhayAyCiAJICAgICAgZmkKIAkgICAgZG9uZQogCSAgZG9uZQotCSAgaWYgdGVzdCAiJGZvdW5kIiAhPSB5ZXM7IHRoZW4KLQkgICAgIyBkZXBsaWIgZG9lc24ndCBzZWVtIHRvIGJlIGEgbGlidG9vbCBsaWJyYXJ5Ci0JICAgIGlmIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAicHJvZyxsaW5rIjsgdGhlbgotCSAgICAgIGNvbXBpbGVfZGVwbGlicz0iJGRlcGxpYiAkY29tcGlsZV9kZXBsaWJzIgotCSAgICAgIGZpbmFsaXplX2RlcGxpYnM9IiRkZXBsaWIgJGZpbmFsaXplX2RlcGxpYnMiCi0JICAgIGVsc2UKLQkgICAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgotCSAgICAgIHRlc3QgIiRsaW5rbW9kZSIgPSBsaWIgJiYgbmV3ZGVwZW5kZW5jeV9saWJzPSIkZGVwbGliICRuZXdkZXBlbmRlbmN5X2xpYnMiCi0JICAgIGZpCi0JICAgIGNvbnRpbnVlCi0JICBlbHNlICMgZGVwbGliIGlzIGEgbGlidG9vbCBsaWJyYXJ5CisJICBpZiAkZm91bmQ7IHRoZW4KKwkgICAgIyBkZXBsaWIgaXMgYSBsaWJ0b29sIGxpYnJhcnkKIAkgICAgIyBJZiAkYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzICYmICRkZXBsaWIgaXMgYSBzdGRsaWIsCiAJICAgICMgV2UgbmVlZCB0byBkbyBzb21lIHNwZWNpYWwgdGhpbmdzIGhlcmUsIGFuZCBub3QgbGF0ZXIuCi0JICAgIGlmIHRlc3QgIlgkYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzIiA9ICJYeWVzIiA7IHRoZW4KKwkgICAgaWYgdGVzdCB5ZXMgPSAiJGFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcyI7IHRoZW4KIAkgICAgICBjYXNlICIgJHByZWRlcHMgJHBvc3RkZXBzICIgaW4KIAkgICAgICAqIiAkZGVwbGliICIqKQogCQlpZiBmdW5jX2xhbGliX3AgIiRsaWIiOyB0aGVuCkBAIC02MjIzLDE5ICs3NDgyLDE5IEBACiAJCSAgb2xkX2xpYnJhcnk9CiAJCSAgZnVuY19zb3VyY2UgIiRsaWIiCiAJCSAgZm9yIGwgaW4gJG9sZF9saWJyYXJ5ICRsaWJyYXJ5X25hbWVzOyBkbwotCQkgICAgbGw9IiRsIgorCQkgICAgbGw9JGwKIAkJICBkb25lCi0JCSAgaWYgdGVzdCAiWCRsbCIgPSAiWCRvbGRfbGlicmFyeSIgOyB0aGVuICMgb25seSBzdGF0aWMgdmVyc2lvbiBhdmFpbGFibGUKLQkJICAgIGZvdW5kPW5vCisJCSAgaWYgdGVzdCAiWCRsbCIgPSAiWCRvbGRfbGlicmFyeSI7IHRoZW4gIyBvbmx5IHN0YXRpYyB2ZXJzaW9uIGF2YWlsYWJsZQorCQkgICAgZm91bmQ9ZmFsc2UKIAkJICAgIGZ1bmNfZGlybmFtZSAiJGxpYiIgIiIgIi4iCi0JCSAgICBsYWRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisJCSAgICBsYWRpcj0kZnVuY19kaXJuYW1lX3Jlc3VsdAogCQkgICAgbGliPSRsYWRpci8kb2xkX2xpYnJhcnkKLQkJICAgIGlmIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAicHJvZyxsaW5rIjsgdGhlbgorCQkgICAgaWYgdGVzdCBwcm9nLGxpbmsgPSAiJGxpbmttb2RlLCRwYXNzIjsgdGhlbgogCQkgICAgICBjb21waWxlX2RlcGxpYnM9IiRkZXBsaWIgJGNvbXBpbGVfZGVwbGlicyIKIAkJICAgICAgZmluYWxpemVfZGVwbGlicz0iJGRlcGxpYiAkZmluYWxpemVfZGVwbGlicyIKIAkJICAgIGVsc2UKIAkJICAgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKLQkJICAgICAgdGVzdCAiJGxpbmttb2RlIiA9IGxpYiAmJiBuZXdkZXBlbmRlbmN5X2xpYnM9IiRkZXBsaWIgJG5ld2RlcGVuZGVuY3lfbGlicyIKKwkJICAgICAgdGVzdCBsaWIgPSAiJGxpbmttb2RlIiAmJiBuZXdkZXBlbmRlbmN5X2xpYnM9IiRkZXBsaWIgJG5ld2RlcGVuZGVuY3lfbGlicyIKIAkJICAgIGZpCiAJCSAgICBjb250aW51ZQogCQkgIGZpCkBAIC02MjQ0LDE1ICs3NTAzLDI1IEBACiAJICAgICAgKikgOzsKIAkgICAgICBlc2FjCiAJICAgIGZpCisJICBlbHNlCisJICAgICMgZGVwbGliIGRvZXNuJ3Qgc2VlbSB0byBiZSBhIGxpYnRvb2wgbGlicmFyeQorCSAgICBpZiB0ZXN0IHByb2csbGluayA9ICIkbGlua21vZGUsJHBhc3MiOyB0aGVuCisJICAgICAgY29tcGlsZV9kZXBsaWJzPSIkZGVwbGliICRjb21waWxlX2RlcGxpYnMiCisJICAgICAgZmluYWxpemVfZGVwbGlicz0iJGRlcGxpYiAkZmluYWxpemVfZGVwbGlicyIKKwkgICAgZWxzZQorCSAgICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICAgICAgdGVzdCBsaWIgPSAiJGxpbmttb2RlIiAmJiBuZXdkZXBlbmRlbmN5X2xpYnM9IiRkZXBsaWIgJG5ld2RlcGVuZGVuY3lfbGlicyIKKwkgICAgZmkKKwkgICAgY29udGludWUKIAkgIGZpCiAJICA7OyAjIC1sCiAJKi5sdGZyYW1ld29yaykKLQkgIGlmIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAicHJvZyxsaW5rIjsgdGhlbgorCSAgaWYgdGVzdCBwcm9nLGxpbmsgPSAiJGxpbmttb2RlLCRwYXNzIjsgdGhlbgogCSAgICBjb21waWxlX2RlcGxpYnM9IiRkZXBsaWIgJGNvbXBpbGVfZGVwbGlicyIKIAkgICAgZmluYWxpemVfZGVwbGlicz0iJGRlcGxpYiAkZmluYWxpemVfZGVwbGlicyIKIAkgIGVsc2UKIAkgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKLQkgICAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IGxpYiA7IHRoZW4KKwkgICAgaWYgdGVzdCBsaWIgPSAiJGxpbmttb2RlIjsgdGhlbgogCQljYXNlICIkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgIiBpbgogCQkgICAgKiIgJGRlcGxpYiAiKikgOzsKIAkJICAgICogKSBmdW5jX2FwcGVuZCBuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAiICRkZXBsaWIiIDs7CkBAIC02MjY1LDE4ICs3NTM0LDE4IEBACiAJICBjYXNlICRsaW5rbW9kZSBpbgogCSAgbGliKQogCSAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgotCSAgICB0ZXN0ICIkcGFzcyIgPSBjb252ICYmIGNvbnRpbnVlCisJICAgIHRlc3QgY29udiA9ICIkcGFzcyIgJiYgY29udGludWUKIAkgICAgbmV3ZGVwZW5kZW5jeV9saWJzPSIkZGVwbGliICRuZXdkZXBlbmRlbmN5X2xpYnMiCiAJICAgIGZ1bmNfc3RyaXBuYW1lICctTCcgJycgIiRkZXBsaWIiCiAJICAgIGZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZnVuY19zdHJpcG5hbWVfcmVzdWx0IgogCSAgICBmdW5jX2FwcGVuZCBuZXdsaWJfc2VhcmNoX3BhdGggIiAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IgogCSAgICA7OwogCSAgcHJvZykKLQkgICAgaWYgdGVzdCAiJHBhc3MiID0gY29udjsgdGhlbgorCSAgICBpZiB0ZXN0IGNvbnYgPSAiJHBhc3MiOyB0aGVuCiAJICAgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKIAkgICAgICBjb250aW51ZQogCSAgICBmaQotCSAgICBpZiB0ZXN0ICIkcGFzcyIgPSBzY2FuOyB0aGVuCisJICAgIGlmIHRlc3Qgc2NhbiA9ICIkcGFzcyI7IHRoZW4KIAkgICAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgogCSAgICBlbHNlCiAJICAgICAgY29tcGlsZV9kZXBsaWJzPSIkZGVwbGliICRjb21waWxlX2RlcGxpYnMiCkBAIC02Mjg3LDEzICs3NTU2LDEzIEBACiAJICAgIGZ1bmNfYXBwZW5kIG5ld2xpYl9zZWFyY2hfcGF0aCAiICRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQiCiAJICAgIDs7CiAJICAqKQotCSAgICBmdW5jX3dhcm5pbmcgIlxgLUwnIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzL29iamVjdHMiCisJICAgIGZ1bmNfd2FybmluZyAiJy1MJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcy9vYmplY3RzIgogCSAgICA7OwogCSAgZXNhYyAjIGxpbmttb2RlCiAJICBjb250aW51ZQogCSAgOzsgIyAtTAogCS1SKikKLQkgIGlmIHRlc3QgIiRwYXNzIiA9IGxpbms7IHRoZW4KKwkgIGlmIHRlc3QgbGluayA9ICIkcGFzcyI7IHRoZW4KIAkgICAgZnVuY19zdHJpcG5hbWUgJy1SJyAnJyAiJGRlcGxpYiIKIAkgICAgZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiCiAJICAgIGRpcj0kZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0CkBAIC02MzExLDcgKzc1ODAsNyBAQAogCSAgbGliPSRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQKIAkgIDs7CiAJKi4kbGliZXh0KQotCSAgaWYgdGVzdCAiJHBhc3MiID0gY29udjsgdGhlbgorCSAgaWYgdGVzdCBjb252ID0gIiRwYXNzIjsgdGhlbgogCSAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgogCSAgICBjb250aW51ZQogCSAgZmkKQEAgLTYzMjIsMjEgKzc1OTEsMjYgQEAKIAkgICAgY2FzZSAiICRkbHByZWNvbnZlbmllbmNlbGlicyAiIGluCiAJICAgICoiICRkZXBsaWIgIiopIDs7CiAJICAgICopCi0JICAgICAgdmFsaWRfYV9saWI9bm8KKwkgICAgICB2YWxpZF9hX2xpYj1mYWxzZQogCSAgICAgIGNhc2UgJGRlcGxpYnNfY2hlY2tfbWV0aG9kIGluCiAJCW1hdGNoX3BhdHRlcm4qKQogCQkgIHNldCBkdW1teSAkZGVwbGlic19jaGVja19tZXRob2Q7IHNoaWZ0CiAJCSAgbWF0Y2hfcGF0dGVybl9yZWdleD1gZXhwciAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiA6ICIkMSBcKC4qXCkiYAogCQkgIGlmIGV2YWwgIlwkRUNITyBcIiRkZXBsaWJcIiIgMj4vZGV2L251bGwgfCAkU0VEIDEwcSBcCiAJCSAgICB8ICRFR1JFUCAiJG1hdGNoX3BhdHRlcm5fcmVnZXgiID4gL2Rldi9udWxsOyB0aGVuCi0JCSAgICB2YWxpZF9hX2xpYj15ZXMKKwkJICAgIHZhbGlkX2FfbGliPToKIAkJICBmaQogCQk7OwogCQlwYXNzX2FsbCkKLQkJICB2YWxpZF9hX2xpYj15ZXMKKwkJICB2YWxpZF9hX2xpYj06CiAJCTs7CiAJICAgICAgZXNhYwotCSAgICAgIGlmIHRlc3QgIiR2YWxpZF9hX2xpYiIgIT0geWVzOyB0aGVuCisJICAgICAgaWYgJHZhbGlkX2FfbGliOyB0aGVuCisJCWVjaG8KKwkJJEVDSE8gIioqKiBXYXJuaW5nOiBMaW5raW5nIHRoZSBzaGFyZWQgbGlicmFyeSAkb3V0cHV0IGFnYWluc3QgdGhlIgorCQkkRUNITyAiKioqIHN0YXRpYyBsaWJyYXJ5ICRkZXBsaWIgaXMgbm90IHBvcnRhYmxlISIKKwkJZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwkgICAgICBlbHNlCiAJCWVjaG8KIAkJJEVDSE8gIioqKiBXYXJuaW5nOiBUcnlpbmcgdG8gbGluayB3aXRoIHN0YXRpYyBsaWIgYXJjaGl2ZSAkZGVwbGliLiIKIAkJZWNobyAiKioqIEkgaGF2ZSB0aGUgY2FwYWJpbGl0eSB0byBtYWtlIHRoYXQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGxpbmsgaW4gd2hlbiIKQEAgLTYzNDQsMTggKzc2MTgsMTMgQEAKIAkJZWNobyAiKioqIHNoYXJlZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCB3aGljaCB5b3UgZG8gbm90IGFwcGVhciB0byBoYXZlIgogCQllY2hvICIqKiogYmVjYXVzZSB0aGUgZmlsZSBleHRlbnNpb25zIC4kbGliZXh0IG9mIHRoaXMgYXJndW1lbnQgbWFrZXMgbWUgYmVsaWV2ZSIKIAkJZWNobyAiKioqIHRoYXQgaXQgaXMganVzdCBhIHN0YXRpYyBhcmNoaXZlIHRoYXQgSSBzaG91bGQgbm90IHVzZSBoZXJlLiIKLQkgICAgICBlbHNlCi0JCWVjaG8KLQkJJEVDSE8gIioqKiBXYXJuaW5nOiBMaW5raW5nIHRoZSBzaGFyZWQgbGlicmFyeSAkb3V0cHV0IGFnYWluc3QgdGhlIgotCQkkRUNITyAiKioqIHN0YXRpYyBsaWJyYXJ5ICRkZXBsaWIgaXMgbm90IHBvcnRhYmxlISIKLQkJZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKIAkgICAgICBmaQogCSAgICAgIDs7CiAJICAgIGVzYWMKIAkgICAgY29udGludWUKIAkgICAgOzsKIAkgIHByb2cpCi0JICAgIGlmIHRlc3QgIiRwYXNzIiAhPSBsaW5rOyB0aGVuCisJICAgIGlmIHRlc3QgbGluayAhPSAiJHBhc3MiOyB0aGVuCiAJICAgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKIAkgICAgZWxzZQogCSAgICAgIGNvbXBpbGVfZGVwbGlicz0iJGRlcGxpYiAkY29tcGlsZV9kZXBsaWJzIgpAQCAtNjM2NiwxMCArNzYzNSwxMCBAQAogCSAgZXNhYyAjIGxpbmttb2RlCiAJICA7OyAjICouJGxpYmV4dAogCSoubG8gfCAqLiRvYmpleHQpCi0JICBpZiB0ZXN0ICIkcGFzcyIgPSBjb252OyB0aGVuCisJICBpZiB0ZXN0IGNvbnYgPSAiJHBhc3MiOyB0aGVuCiAJICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCi0JICBlbGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nOyB0aGVuCi0JICAgIGlmIHRlc3QgIiRwYXNzIiA9IGRscHJlb3BlbiB8fCB0ZXN0ICIkZGxvcGVuX3N1cHBvcnQiICE9IHllcyB8fCB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IG5vOyB0aGVuCisJICBlbGlmIHRlc3QgcHJvZyA9ICIkbGlua21vZGUiOyB0aGVuCisJICAgIGlmIHRlc3QgZGxwcmVvcGVuID0gIiRwYXNzIiB8fCB0ZXN0IHllcyAhPSAiJGRsb3Blbl9zdXBwb3J0IiB8fCB0ZXN0IG5vID0gIiRidWlsZF9saWJ0b29sX2xpYnMiOyB0aGVuCiAJICAgICAgIyBJZiB0aGVyZSBpcyBubyBkbG9wZW4gc3VwcG9ydCBvciB3ZSdyZSBsaW5raW5nIHN0YXRpY2FsbHksCiAJICAgICAgIyB3ZSBuZWVkIHRvIHByZWxvYWQuCiAJICAgICAgZnVuY19hcHBlbmQgbmV3ZGxwcmVmaWxlcyAiICRkZXBsaWIiCkBAIC02MzgyLDIyICs3NjUxLDIwIEBACiAJICBjb250aW51ZQogCSAgOzsKIAklREVQTElCUyUpCi0JICBhbGxkZXBsaWJzPXllcworCSAgYWxsZGVwbGlicz06CiAJICBjb250aW51ZQogCSAgOzsKIAllc2FjICMgY2FzZSAkZGVwbGliCiAKLQlpZiB0ZXN0ICIkZm91bmQiID0geWVzIHx8IHRlc3QgLWYgIiRsaWIiOyB0aGVuIDoKLQllbHNlCi0JICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZmluZCB0aGUgbGlicmFyeSBcYCRsaWInIG9yIHVuaGFuZGxlZCBhcmd1bWVudCBcYCRkZXBsaWInIgotCWZpCisJJGZvdW5kIHx8IHRlc3QgLWYgIiRsaWIiIFwKKwkgIHx8IGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBmaW5kIHRoZSBsaWJyYXJ5ICckbGliJyBvciB1bmhhbmRsZWQgYXJndW1lbnQgJyRkZXBsaWInIgogCiAJIyBDaGVjayB0byBzZWUgdGhhdCB0aGlzIHJlYWxseSBpcyBhIGxpYnRvb2wgYXJjaGl2ZS4KIAlmdW5jX2xhbGliX3Vuc2FmZV9wICIkbGliIiBcCi0JICB8fCBmdW5jX2ZhdGFsX2Vycm9yICJcYCRsaWInIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKKwkgIHx8IGZ1bmNfZmF0YWxfZXJyb3IgIickbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCiAKIAlmdW5jX2Rpcm5hbWUgIiRsaWIiICIiICIuIgotCWxhZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKwlsYWRpcj0kZnVuY19kaXJuYW1lX3Jlc3VsdAogCiAJZGxuYW1lPQogCWRsb3Blbj0KQEAgLTY0MjcsMzAgKzc2OTQsMzAgQEAKIAkgIGRvbmUKIAlmaQogCWRlcGVuZGVuY3lfbGlicz1gJEVDSE8gIiAkZGVwZW5kZW5jeV9saWJzIiB8ICRTRUQgJ3MlIFwoW14gJF0qXCkubHRmcmFtZXdvcmslIC1mcmFtZXdvcmsgXDElZydgCi0JaWYgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiA9ICJsaWIsbGluayIgfHwKLQkgICB0ZXN0ICIkbGlua21vZGUsJHBhc3MiID0gInByb2csc2NhbiIgfHwKLQkgICB7IHRlc3QgIiRsaW5rbW9kZSIgIT0gcHJvZyAmJiB0ZXN0ICIkbGlua21vZGUiICE9IGxpYjsgfTsgdGhlbgorCWlmIHRlc3QgbGliLGxpbmsgPSAiJGxpbmttb2RlLCRwYXNzIiB8fAorCSAgIHRlc3QgcHJvZyxzY2FuID0gIiRsaW5rbW9kZSwkcGFzcyIgfHwKKwkgICB7IHRlc3QgcHJvZyAhPSAiJGxpbmttb2RlIiAmJiB0ZXN0IGxpYiAhPSAiJGxpbmttb2RlIjsgfTsgdGhlbgogCSAgdGVzdCAtbiAiJGRsb3BlbiIgJiYgZnVuY19hcHBlbmQgZGxmaWxlcyAiICRkbG9wZW4iCiAJICB0ZXN0IC1uICIkZGxwcmVvcGVuIiAmJiBmdW5jX2FwcGVuZCBkbHByZWZpbGVzICIgJGRscHJlb3BlbiIKIAlmaQogCi0JaWYgdGVzdCAiJHBhc3MiID0gY29udjsgdGhlbgorCWlmIHRlc3QgY29udiA9ICIkcGFzcyI7IHRoZW4KIAkgICMgT25seSBjaGVjayBmb3IgY29udmVuaWVuY2UgbGlicmFyaWVzCiAJICBkZXBsaWJzPSIkbGliICRkZXBsaWJzIgogCSAgaWYgdGVzdCAteiAiJGxpYmRpciI7IHRoZW4KIAkgICAgaWYgdGVzdCAteiAiJG9sZF9saWJyYXJ5IjsgdGhlbgotCSAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBmaW5kIG5hbWUgb2YgbGluayBsaWJyYXJ5IGZvciBcYCRsaWInIgorCSAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBmaW5kIG5hbWUgb2YgbGluayBsaWJyYXJ5IGZvciAnJGxpYiciCiAJICAgIGZpCiAJICAgICMgSXQgaXMgYSBsaWJ0b29sIGNvbnZlbmllbmNlIGxpYnJhcnksIHNvIGFkZCBpbiBpdHMgb2JqZWN0cy4KIAkgICAgZnVuY19hcHBlbmQgY29udmVuaWVuY2UgIiAkbGFkaXIvJG9iamRpci8kb2xkX2xpYnJhcnkiCiAJICAgIGZ1bmNfYXBwZW5kIG9sZF9jb252ZW5pZW5jZSAiICRsYWRpci8kb2JqZGlyLyRvbGRfbGlicmFyeSIKLQkgIGVsaWYgdGVzdCAiJGxpbmttb2RlIiAhPSBwcm9nICYmIHRlc3QgIiRsaW5rbW9kZSIgIT0gbGliOyB0aGVuCi0JICAgIGZ1bmNfZmF0YWxfZXJyb3IgIlxgJGxpYicgaXMgbm90IGEgY29udmVuaWVuY2UgbGlicmFyeSIKKwkgIGVsaWYgdGVzdCBwcm9nICE9ICIkbGlua21vZGUiICYmIHRlc3QgbGliICE9ICIkbGlua21vZGUiOyB0aGVuCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgIickbGliJyBpcyBub3QgYSBjb252ZW5pZW5jZSBsaWJyYXJ5IgogCSAgZmkKIAkgIHRtcF9saWJzPQogCSAgZm9yIGRlcGxpYiBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbwogCSAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgotCSAgICBpZiAkb3B0X3ByZXNlcnZlX2R1cF9kZXBzIDsgdGhlbgorCSAgICBpZiAkb3B0X3ByZXNlcnZlX2R1cF9kZXBzOyB0aGVuCiAJICAgICAgY2FzZSAiJHRtcF9saWJzICIgaW4KIAkgICAgICAqIiAkZGVwbGliICIqKSBmdW5jX2FwcGVuZCBzcGVjaWFsZGVwbGlicyAiICRkZXBsaWIiIDs7CiAJICAgICAgZXNhYwpAQCAtNjQ2NCwyNiArNzczMSwyNiBAQAogCSMgR2V0IHRoZSBuYW1lIG9mIHRoZSBsaWJyYXJ5IHdlIGxpbmsgYWdhaW5zdC4KIAlsaW5rbGliPQogCWlmIHRlc3QgLW4gIiRvbGRfbGlicmFyeSIgJiYKLQkgICB7IHRlc3QgIiRwcmVmZXJfc3RhdGljX2xpYnMiID0geWVzIHx8Ci0JICAgICB0ZXN0ICIkcHJlZmVyX3N0YXRpY19saWJzLCRpbnN0YWxsZWQiID0gImJ1aWx0LG5vIjsgfTsgdGhlbgorCSAgIHsgdGVzdCB5ZXMgPSAiJHByZWZlcl9zdGF0aWNfbGlicyIgfHwKKwkgICAgIHRlc3QgYnVpbHQsbm8gPSAiJHByZWZlcl9zdGF0aWNfbGlicywkaW5zdGFsbGVkIjsgfTsgdGhlbgogCSAgbGlua2xpYj0kb2xkX2xpYnJhcnkKIAllbHNlCiAJICBmb3IgbCBpbiAkb2xkX2xpYnJhcnkgJGxpYnJhcnlfbmFtZXM7IGRvCi0JICAgIGxpbmtsaWI9IiRsIgorCSAgICBsaW5rbGliPSRsCiAJICBkb25lCiAJZmkKIAlpZiB0ZXN0IC16ICIkbGlua2xpYiI7IHRoZW4KLQkgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBmaW5kIG5hbWUgb2YgbGluayBsaWJyYXJ5IGZvciBcYCRsaWInIgorCSAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGZpbmQgbmFtZSBvZiBsaW5rIGxpYnJhcnkgZm9yICckbGliJyIKIAlmaQogCiAJIyBUaGlzIGxpYnJhcnkgd2FzIHNwZWNpZmllZCB3aXRoIC1kbG9wZW4uCi0JaWYgdGVzdCAiJHBhc3MiID0gZGxvcGVuOyB0aGVuCi0JICBpZiB0ZXN0IC16ICIkbGliZGlyIjsgdGhlbgotCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgLWRsb3BlbiBhIGNvbnZlbmllbmNlIGxpYnJhcnk6IFxgJGxpYiciCi0JICBmaQorCWlmIHRlc3QgZGxvcGVuID0gIiRwYXNzIjsgdGhlbgorCSAgdGVzdCAteiAiJGxpYmRpciIgXAorCSAgICAmJiBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgLWRsb3BlbiBhIGNvbnZlbmllbmNlIGxpYnJhcnk6ICckbGliJyIKIAkgIGlmIHRlc3QgLXogIiRkbG5hbWUiIHx8Ci0JICAgICB0ZXN0ICIkZGxvcGVuX3N1cHBvcnQiICE9IHllcyB8fAotCSAgICAgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSBubzsgdGhlbgorCSAgICAgdGVzdCB5ZXMgIT0gIiRkbG9wZW5fc3VwcG9ydCIgfHwKKwkgICAgIHRlc3Qgbm8gPSAiJGJ1aWxkX2xpYnRvb2xfbGlicyIKKwkgIHRoZW4KIAkgICAgIyBJZiB0aGVyZSBpcyBubyBkbG5hbWUsIG5vIGRsb3BlbiBzdXBwb3J0IG9yIHdlJ3JlIGxpbmtpbmcKIAkgICAgIyBzdGF0aWNhbGx5LCB3ZSBuZWVkIHRvIHByZWxvYWQuICBXZSBhbHNvIG5lZWQgdG8gcHJlbG9hZCBhbnkKIAkgICAgIyBkZXBlbmRlbnQgbGlicmFyaWVzIHNvIGxpYmx0ZGwncyBkZXBsaWIgcHJlbG9hZGVyIGRvZXNuJ3QKQEAgLTY0OTcsNDAgKzc3NjQsNDAgQEAKIAogCSMgV2UgbmVlZCBhbiBhYnNvbHV0ZSBwYXRoLgogCWNhc2UgJGxhZGlyIGluCi0JW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSBhYnNfbGFkaXI9IiRsYWRpciIgOzsKKwlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIGFic19sYWRpcj0kbGFkaXIgOzsKIAkqKQogCSAgYWJzX2xhZGlyPWBjZCAiJGxhZGlyIiAmJiBwd2RgCiAJICBpZiB0ZXN0IC16ICIkYWJzX2xhZGlyIjsgdGhlbgotCSAgICBmdW5jX3dhcm5pbmcgImNhbm5vdCBkZXRlcm1pbmUgYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWUgb2YgXGAkbGFkaXInIgorCSAgICBmdW5jX3dhcm5pbmcgImNhbm5vdCBkZXRlcm1pbmUgYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWUgb2YgJyRsYWRpciciCiAJICAgIGZ1bmNfd2FybmluZyAicGFzc2luZyBpdCBsaXRlcmFsbHkgdG8gdGhlIGxpbmtlciwgYWx0aG91Z2ggaXQgbWlnaHQgZmFpbCIKLQkgICAgYWJzX2xhZGlyPSIkbGFkaXIiCisJICAgIGFic19sYWRpcj0kbGFkaXIKIAkgIGZpCiAJICA7OwogCWVzYWMKIAlmdW5jX2Jhc2VuYW1lICIkbGliIgotCWxhbmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorCWxhbmFtZT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKIAogCSMgRmluZCB0aGUgcmVsZXZhbnQgb2JqZWN0IGRpcmVjdG9yeSBhbmQgbGlicmFyeSBuYW1lLgotCWlmIHRlc3QgIlgkaW5zdGFsbGVkIiA9IFh5ZXM7IHRoZW4KKwlpZiB0ZXN0IHllcyA9ICIkaW5zdGFsbGVkIjsgdGhlbgogCSAgaWYgdGVzdCAhIC1mICIkbHRfc3lzcm9vdCRsaWJkaXIvJGxpbmtsaWIiICYmIHRlc3QgLWYgIiRhYnNfbGFkaXIvJGxpbmtsaWIiOyB0aGVuCi0JICAgIGZ1bmNfd2FybmluZyAibGlicmFyeSBcYCRsaWInIHdhcyBtb3ZlZC4iCi0JICAgIGRpcj0iJGxhZGlyIgotCSAgICBhYnNkaXI9IiRhYnNfbGFkaXIiCi0JICAgIGxpYmRpcj0iJGFic19sYWRpciIKKwkgICAgZnVuY193YXJuaW5nICJsaWJyYXJ5ICckbGliJyB3YXMgbW92ZWQuIgorCSAgICBkaXI9JGxhZGlyCisJICAgIGFic2Rpcj0kYWJzX2xhZGlyCisJICAgIGxpYmRpcj0kYWJzX2xhZGlyCiAJICBlbHNlCi0JICAgIGRpcj0iJGx0X3N5c3Jvb3QkbGliZGlyIgotCSAgICBhYnNkaXI9IiRsdF9zeXNyb290JGxpYmRpciIKKwkgICAgZGlyPSRsdF9zeXNyb290JGxpYmRpcgorCSAgICBhYnNkaXI9JGx0X3N5c3Jvb3QkbGliZGlyCiAJICBmaQotCSAgdGVzdCAiWCRoYXJkY29kZV9hdXRvbWF0aWMiID0gWHllcyAmJiBhdm9pZHRlbXBycGF0aD15ZXMKKwkgIHRlc3QgeWVzID0gIiRoYXJkY29kZV9hdXRvbWF0aWMiICYmIGF2b2lkdGVtcHJwYXRoPXllcwogCWVsc2UKIAkgIGlmIHRlc3QgISAtZiAiJGxhZGlyLyRvYmpkaXIvJGxpbmtsaWIiICYmIHRlc3QgLWYgIiRhYnNfbGFkaXIvJGxpbmtsaWIiOyB0aGVuCi0JICAgIGRpcj0iJGxhZGlyIgotCSAgICBhYnNkaXI9IiRhYnNfbGFkaXIiCisJICAgIGRpcj0kbGFkaXIKKwkgICAgYWJzZGlyPSRhYnNfbGFkaXIKIAkgICAgIyBSZW1vdmUgdGhpcyBzZWFyY2ggcGF0aCBsYXRlcgogCSAgICBmdW5jX2FwcGVuZCBub3RpbnN0X3BhdGggIiAkYWJzX2xhZGlyIgogCSAgZWxzZQotCSAgICBkaXI9IiRsYWRpci8kb2JqZGlyIgotCSAgICBhYnNkaXI9IiRhYnNfbGFkaXIvJG9iamRpciIKKwkgICAgZGlyPSRsYWRpci8kb2JqZGlyCisJICAgIGFic2Rpcj0kYWJzX2xhZGlyLyRvYmpkaXIKIAkgICAgIyBSZW1vdmUgdGhpcyBzZWFyY2ggcGF0aCBsYXRlcgogCSAgICBmdW5jX2FwcGVuZCBub3RpbnN0X3BhdGggIiAkYWJzX2xhZGlyIgogCSAgZmkKQEAgLTY1MzksMTEgKzc4MDYsMTEgQEAKIAluYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKIAogCSMgVGhpcyBsaWJyYXJ5IHdhcyBzcGVjaWZpZWQgd2l0aCAtZGxwcmVvcGVuLgotCWlmIHRlc3QgIiRwYXNzIiA9IGRscHJlb3BlbjsgdGhlbgotCSAgaWYgdGVzdCAteiAiJGxpYmRpciIgJiYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2c7IHRoZW4KLQkgICAgZnVuY19mYXRhbF9lcnJvciAib25seSBsaWJyYXJpZXMgbWF5IC1kbHByZW9wZW4gYSBjb252ZW5pZW5jZSBsaWJyYXJ5OiBcYCRsaWInIgorCWlmIHRlc3QgZGxwcmVvcGVuID0gIiRwYXNzIjsgdGhlbgorCSAgaWYgdGVzdCAteiAiJGxpYmRpciIgJiYgdGVzdCBwcm9nID0gIiRsaW5rbW9kZSI7IHRoZW4KKwkgICAgZnVuY19mYXRhbF9lcnJvciAib25seSBsaWJyYXJpZXMgbWF5IC1kbHByZW9wZW4gYSBjb252ZW5pZW5jZSBsaWJyYXJ5OiAnJGxpYiciCiAJICBmaQotCSAgY2FzZSAiJGhvc3QiIGluCisJICBjYXNlICRob3N0IGluCiAJICAgICMgc3BlY2lhbCBoYW5kbGluZyBmb3IgcGxhdGZvcm1zIHdpdGggUEUtRExMcy4KIAkgICAgKmN5Z3dpbiogfCAqbWluZ3cqIHwgKmNlZ2NjKiApCiAJICAgICAgIyBMaW5rZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGxpbmsgYWdhaW5zdCBzaGFyZWQgbGlicmFyeSBpZiBib3RoCkBAIC02NTg3LDkgKzc4NTQsOSBAQAogCiAJaWYgdGVzdCAteiAiJGxpYmRpciI7IHRoZW4KIAkgICMgTGluayB0aGUgY29udmVuaWVuY2UgbGlicmFyeQotCSAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IGxpYjsgdGhlbgorCSAgaWYgdGVzdCBsaWIgPSAiJGxpbmttb2RlIjsgdGhlbgogCSAgICBkZXBsaWJzPSIkZGlyLyRvbGRfbGlicmFyeSAkZGVwbGlicyIKLQkgIGVsaWYgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiA9ICJwcm9nLGxpbmsiOyB0aGVuCisJICBlbGlmIHRlc3QgcHJvZyxsaW5rID0gIiRsaW5rbW9kZSwkcGFzcyI7IHRoZW4KIAkgICAgY29tcGlsZV9kZXBsaWJzPSIkZGlyLyRvbGRfbGlicmFyeSAkY29tcGlsZV9kZXBsaWJzIgogCSAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGlyLyRvbGRfbGlicmFyeSAkZmluYWxpemVfZGVwbGlicyIKIAkgIGVsc2UKQEAgLTY1OTksMTQgKzc4NjYsMTQgQEAKIAlmaQogCiAKLQlpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZyAmJiB0ZXN0ICIkcGFzcyIgIT0gbGluazsgdGhlbgorCWlmIHRlc3QgcHJvZyA9ICIkbGlua21vZGUiICYmIHRlc3QgbGluayAhPSAiJHBhc3MiOyB0aGVuCiAJICBmdW5jX2FwcGVuZCBuZXdsaWJfc2VhcmNoX3BhdGggIiAkbGFkaXIiCiAJICBkZXBsaWJzPSIkbGliICRkZXBsaWJzIgogCi0JICBsaW5rYWxsZGVwbGlicz1ubwotCSAgaWYgdGVzdCAiJGxpbmtfYWxsX2RlcGxpYnMiICE9IG5vIHx8IHRlc3QgLXogIiRsaWJyYXJ5X25hbWVzIiB8fAotCSAgICAgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSBubzsgdGhlbgotCSAgICBsaW5rYWxsZGVwbGlicz15ZXMKKwkgIGxpbmthbGxkZXBsaWJzPWZhbHNlCisJICBpZiB0ZXN0IG5vICE9ICIkbGlua19hbGxfZGVwbGlicyIgfHwgdGVzdCAteiAiJGxpYnJhcnlfbmFtZXMiIHx8CisJICAgICB0ZXN0IG5vID0gIiRidWlsZF9saWJ0b29sX2xpYnMiOyB0aGVuCisJICAgIGxpbmthbGxkZXBsaWJzPToKIAkgIGZpCiAKIAkgIHRtcF9saWJzPQpAQCAtNjYxOCwxNCArNzg4NSwxNCBAQAogCQkgOzsKIAkgICAgZXNhYwogCSAgICAjIE5lZWQgdG8gbGluayBhZ2FpbnN0IGFsbCBkZXBlbmRlbmN5X2xpYnM/Ci0JICAgIGlmIHRlc3QgIiRsaW5rYWxsZGVwbGlicyIgPSB5ZXM7IHRoZW4KKwkgICAgaWYgJGxpbmthbGxkZXBsaWJzOyB0aGVuCiAJICAgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKIAkgICAgZWxzZQogCSAgICAgICMgTmVlZCB0byBoYXJkY29kZSBzaGFyZWQgbGlicmFyeSBwYXRocwogCSAgICAgICMgb3IvYW5kIGxpbmsgYWdhaW5zdCBzdGF0aWMgbGlicmFyaWVzCiAJICAgICAgbmV3ZGVwZW5kZW5jeV9saWJzPSIkZGVwbGliICRuZXdkZXBlbmRlbmN5X2xpYnMiCiAJICAgIGZpCi0JICAgIGlmICRvcHRfcHJlc2VydmVfZHVwX2RlcHMgOyB0aGVuCisJICAgIGlmICRvcHRfcHJlc2VydmVfZHVwX2RlcHM7IHRoZW4KIAkgICAgICBjYXNlICIkdG1wX2xpYnMgIiBpbgogCSAgICAgICoiICRkZXBsaWIgIiopIGZ1bmNfYXBwZW5kIHNwZWNpYWxkZXBsaWJzICIgJGRlcGxpYiIgOzsKIAkgICAgICBlc2FjCkBAIC02NjM1LDE1ICs3OTAyLDE1IEBACiAJICBjb250aW51ZQogCWZpICMgJGxpbmttb2RlID0gcHJvZy4uLgogCi0JaWYgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiA9ICJwcm9nLGxpbmsiOyB0aGVuCisJaWYgdGVzdCBwcm9nLGxpbmsgPSAiJGxpbmttb2RlLCRwYXNzIjsgdGhlbgogCSAgaWYgdGVzdCAtbiAiJGxpYnJhcnlfbmFtZXMiICYmCi0JICAgICB7IHsgdGVzdCAiJHByZWZlcl9zdGF0aWNfbGlicyIgPSBubyB8fAotCSAgICAgICAgIHRlc3QgIiRwcmVmZXJfc3RhdGljX2xpYnMsJGluc3RhbGxlZCIgPSAiYnVpbHQseWVzIjsgfSB8fAorCSAgICAgeyB7IHRlc3Qgbm8gPSAiJHByZWZlcl9zdGF0aWNfbGlicyIgfHwKKwkgICAgICAgICB0ZXN0IGJ1aWx0LHllcyA9ICIkcHJlZmVyX3N0YXRpY19saWJzLCRpbnN0YWxsZWQiOyB9IHx8CiAJICAgICAgIHRlc3QgLXogIiRvbGRfbGlicmFyeSI7IH07IHRoZW4KIAkgICAgIyBXZSBuZWVkIHRvIGhhcmRjb2RlIHRoZSBsaWJyYXJ5IHBhdGgKLQkgICAgaWYgdGVzdCAtbiAiJHNobGlicGF0aF92YXIiICYmIHRlc3QgLXogIiRhdm9pZHRlbXBycGF0aCIgOyB0aGVuCisJICAgIGlmIHRlc3QgLW4gIiRzaGxpYnBhdGhfdmFyIiAmJiB0ZXN0IC16ICIkYXZvaWR0ZW1wcnBhdGgiOyB0aGVuCiAJICAgICAgIyBNYWtlIHN1cmUgdGhlIHJwYXRoIGNvbnRhaW5zIG9ubHkgdW5pcXVlIGRpcmVjdG9yaWVzLgotCSAgICAgIGNhc2UgIiR0ZW1wX3JwYXRoOiIgaW4KKwkgICAgICBjYXNlICR0ZW1wX3JwYXRoOiBpbgogCSAgICAgICoiJGFic2RpcjoiKikgOzsKIAkgICAgICAqKSBmdW5jX2FwcGVuZCB0ZW1wX3JwYXRoICIkYWJzZGlyOiIgOzsKIAkgICAgICBlc2FjCkBAIC02NjcyLDkgKzc5MzksOSBAQAogCSAgICBlc2FjCiAJICBmaSAjICRsaW5rbW9kZSwkcGFzcyA9IHByb2csbGluay4uLgogCi0JICBpZiB0ZXN0ICIkYWxsZGVwbGlicyIgPSB5ZXMgJiYKLQkgICAgIHsgdGVzdCAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiA9IHBhc3NfYWxsIHx8Ci0JICAgICAgIHsgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXMgJiYKKwkgIGlmICRhbGxkZXBsaWJzICYmCisJICAgICB7IHRlc3QgcGFzc19hbGwgPSAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiB8fAorCSAgICAgICB7IHRlc3QgeWVzID0gIiRidWlsZF9saWJ0b29sX2xpYnMiICYmCiAJCSB0ZXN0IC1uICIkbGlicmFyeV9uYW1lcyI7IH07IH07IHRoZW4KIAkgICAgIyBXZSBvbmx5IG5lZWQgdG8gc2VhcmNoIGZvciBzdGF0aWMgbGlicmFyaWVzCiAJICAgIGNvbnRpbnVlCkBAIC02NjgzLDExICs3OTUwLDExIEBACiAKIAlsaW5rX3N0YXRpYz1ubyAjIFdoZXRoZXIgdGhlIGRlcGxpYiB3aWxsIGJlIGxpbmtlZCBzdGF0aWNhbGx5CiAJdXNlX3N0YXRpY19saWJzPSRwcmVmZXJfc3RhdGljX2xpYnMKLQlpZiB0ZXN0ICIkdXNlX3N0YXRpY19saWJzIiA9IGJ1aWx0ICYmIHRlc3QgIiRpbnN0YWxsZWQiID0geWVzOyB0aGVuCisJaWYgdGVzdCBidWlsdCA9ICIkdXNlX3N0YXRpY19saWJzIiAmJiB0ZXN0IHllcyA9ICIkaW5zdGFsbGVkIjsgdGhlbgogCSAgdXNlX3N0YXRpY19saWJzPW5vCiAJZmkKIAlpZiB0ZXN0IC1uICIkbGlicmFyeV9uYW1lcyIgJiYKLQkgICB7IHRlc3QgIiR1c2Vfc3RhdGljX2xpYnMiID0gbm8gfHwgdGVzdCAteiAiJG9sZF9saWJyYXJ5IjsgfTsgdGhlbgorCSAgIHsgdGVzdCBubyA9ICIkdXNlX3N0YXRpY19saWJzIiB8fCB0ZXN0IC16ICIkb2xkX2xpYnJhcnkiOyB9OyB0aGVuCiAJICBjYXNlICRob3N0IGluCiAJICAqY3lnd2luKiB8ICptaW5ndyogfCAqY2VnY2MqKQogCSAgICAgICMgTm8gcG9pbnQgaW4gcmVsaW5raW5nIERMTHMgYmVjYXVzZSBwYXRocyBhcmUgbm90IGVuY29kZWQKQEAgLTY2OTUsNyArNzk2Miw3IEBACiAJICAgICAgbmVlZF9yZWxpbms9bm8KIAkgICAgOzsKIAkgICopCi0JICAgIGlmIHRlc3QgIiRpbnN0YWxsZWQiID0gbm87IHRoZW4KKwkgICAgaWYgdGVzdCBubyA9ICIkaW5zdGFsbGVkIjsgdGhlbgogCSAgICAgIGZ1bmNfYXBwZW5kIG5vdGluc3RfZGVwbGlicyAiICRsaWIiCiAJICAgICAgbmVlZF9yZWxpbms9eWVzCiAJICAgIGZpCkBAIC02NzA1LDI0ICs3OTcyLDI0IEBACiAKIAkgICMgV2FybiBhYm91dCBwb3J0YWJpbGl0eSwgY2FuJ3QgbGluayBhZ2FpbnN0IC1tb2R1bGUncyBvbiBzb21lCiAJICAjIHN5c3RlbXMgKGRhcndpbikuICBEb24ndCBibGVhdCBhYm91dCBkbG9wZW5lZCBtb2R1bGVzIHRob3VnaCEKLQkgIGRsb3Blbm1vZHVsZT0iIgorCSAgZGxvcGVubW9kdWxlPQogCSAgZm9yIGRscHJlbW9kdWxldGVzdCBpbiAkZGxwcmVmaWxlczsgZG8KIAkgICAgaWYgdGVzdCAiWCRkbHByZW1vZHVsZXRlc3QiID0gIlgkbGliIjsgdGhlbgotCSAgICAgIGRsb3Blbm1vZHVsZT0iJGRscHJlbW9kdWxldGVzdCIKKwkgICAgICBkbG9wZW5tb2R1bGU9JGRscHJlbW9kdWxldGVzdAogCSAgICAgIGJyZWFrCiAJICAgIGZpCiAJICBkb25lCi0JICBpZiB0ZXN0IC16ICIkZGxvcGVubW9kdWxlIiAmJiB0ZXN0ICIkc2hvdWxkbm90bGluayIgPSB5ZXMgJiYgdGVzdCAiJHBhc3MiID0gbGluazsgdGhlbgorCSAgaWYgdGVzdCAteiAiJGRsb3Blbm1vZHVsZSIgJiYgdGVzdCB5ZXMgPSAiJHNob3VsZG5vdGxpbmsiICYmIHRlc3QgbGluayA9ICIkcGFzcyI7IHRoZW4KIAkgICAgZWNobwotCSAgICBpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZzsgdGhlbgorCSAgICBpZiB0ZXN0IHByb2cgPSAiJGxpbmttb2RlIjsgdGhlbgogCSAgICAgICRFQ0hPICIqKiogV2FybmluZzogTGlua2luZyB0aGUgZXhlY3V0YWJsZSAkb3V0cHV0IGFnYWluc3QgdGhlIGxvYWRhYmxlIG1vZHVsZSIKIAkgICAgZWxzZQogCSAgICAgICRFQ0hPICIqKiogV2FybmluZzogTGlua2luZyB0aGUgc2hhcmVkIGxpYnJhcnkgJG91dHB1dCBhZ2FpbnN0IHRoZSBsb2FkYWJsZSBtb2R1bGUiCiAJICAgIGZpCiAJICAgICRFQ0hPICIqKiogJGxpbmtsaWIgaXMgbm90IHBvcnRhYmxlISIKIAkgIGZpCi0JICBpZiB0ZXN0ICIkbGlua21vZGUiID0gbGliICYmCi0JICAgICB0ZXN0ICIkaGFyZGNvZGVfaW50b19saWJzIiA9IHllczsgdGhlbgorCSAgaWYgdGVzdCBsaWIgPSAiJGxpbmttb2RlIiAmJgorCSAgICAgdGVzdCB5ZXMgPSAiJGhhcmRjb2RlX2ludG9fbGlicyI7IHRoZW4KIAkgICAgIyBIYXJkY29kZSB0aGUgbGlicmFyeSBwYXRoLgogCSAgICAjIFNraXAgZGlyZWN0b3JpZXMgdGhhdCBhcmUgaW4gdGhlIHN5c3RlbSBkZWZhdWx0IHJ1bi10aW1lCiAJICAgICMgc2VhcmNoIHBhdGguCkBAIC02NzUwLDQzICs4MDE3LDQzIEBACiAJICAgICMgZmlndXJlIG91dCB0aGUgc29uYW1lCiAJICAgIHNldCBkdW1teSAkbGlicmFyeV9uYW1lcwogCSAgICBzaGlmdAotCSAgICByZWFsbmFtZT0iJDEiCisJICAgIHJlYWxuYW1lPSQxCiAJICAgIHNoaWZ0CiAJICAgIGxpYm5hbWU9YGV2YWwgIlxcJEVDSE8gXCIkbGlibmFtZV9zcGVjXCIiYAogCSAgICAjIHVzZSBkbG5hbWUgaWYgd2UgZ290IGl0LiBpdCdzIHBlcmZlY3RseSBnb29kLCBubz8KIAkgICAgaWYgdGVzdCAtbiAiJGRsbmFtZSI7IHRoZW4KLQkgICAgICBzb25hbWU9IiRkbG5hbWUiCisJICAgICAgc29uYW1lPSRkbG5hbWUKIAkgICAgZWxpZiB0ZXN0IC1uICIkc29uYW1lX3NwZWMiOyB0aGVuCiAJICAgICAgIyBibGVoIHdpbmRvd3MKIAkgICAgICBjYXNlICRob3N0IGluCiAJICAgICAgKmN5Z3dpbiogfCBtaW5ndyogfCAqY2VnY2MqKQogCSAgICAgICAgZnVuY19hcml0aCAkY3VycmVudCAtICRhZ2UKIAkJbWFqb3I9JGZ1bmNfYXJpdGhfcmVzdWx0Ci0JCXZlcnN1ZmZpeD0iLSRtYWpvciIKKwkJdmVyc3VmZml4PS0kbWFqb3IKIAkJOzsKIAkgICAgICBlc2FjCiAJICAgICAgZXZhbCBzb25hbWU9XCIkc29uYW1lX3NwZWNcIgogCSAgICBlbHNlCi0JICAgICAgc29uYW1lPSIkcmVhbG5hbWUiCisJICAgICAgc29uYW1lPSRyZWFsbmFtZQogCSAgICBmaQogCiAJICAgICMgTWFrZSBhIG5ldyBuYW1lIGZvciB0aGUgZXh0cmFjdF9leHBzeW1zX2NtZHMgdG8gdXNlCi0JICAgIHNvcm9vdD0iJHNvbmFtZSIKKwkgICAgc29yb290PSRzb25hbWUKIAkgICAgZnVuY19iYXNlbmFtZSAiJHNvcm9vdCIKLQkgICAgc29uYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisJICAgIHNvbmFtZT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKIAkgICAgZnVuY19zdHJpcG5hbWUgJ2xpYicgJy5kbGwnICIkc29uYW1lIgogCSAgICBuZXdsaWI9bGliaW1wLSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQuYQogCiAJICAgICMgSWYgdGhlIGxpYnJhcnkgaGFzIG5vIGV4cG9ydCBsaXN0LCB0aGVuIGNyZWF0ZSBvbmUgbm93CiAJICAgIGlmIHRlc3QgLWYgIiRvdXRwdXRfb2JqZGlyLyRzb25hbWUtZGVmIjsgdGhlbiA6CiAJICAgIGVsc2UKLQkgICAgICBmdW5jX3ZlcmJvc2UgImV4dHJhY3RpbmcgZXhwb3J0ZWQgc3ltYm9sIGxpc3QgZnJvbSBcYCRzb25hbWUnIgorCSAgICAgIGZ1bmNfdmVyYm9zZSAiZXh0cmFjdGluZyBleHBvcnRlZCBzeW1ib2wgbGlzdCBmcm9tICckc29uYW1lJyIKIAkgICAgICBmdW5jX2V4ZWN1dGVfY21kcyAiJGV4dHJhY3RfZXhwc3ltc19jbWRzIiAnZXhpdCAkPycKIAkgICAgZmkKIAogCSAgICAjIENyZWF0ZSAkbmV3bGliCiAJICAgIGlmIHRlc3QgLWYgIiRvdXRwdXRfb2JqZGlyLyRuZXdsaWIiOyB0aGVuIDo7IGVsc2UKLQkgICAgICBmdW5jX3ZlcmJvc2UgImdlbmVyYXRpbmcgaW1wb3J0IGxpYnJhcnkgZm9yIFxgJHNvbmFtZSciCisJICAgICAgZnVuY192ZXJib3NlICJnZW5lcmF0aW5nIGltcG9ydCBsaWJyYXJ5IGZvciAnJHNvbmFtZSciCiAJICAgICAgZnVuY19leGVjdXRlX2NtZHMgIiRvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcyIgJ2V4aXQgJD8nCiAJICAgIGZpCiAJICAgICMgbWFrZSBzdXJlIHRoZSBsaWJyYXJ5IHZhcmlhYmxlcyBhcmUgcG9pbnRpbmcgdG8gdGhlIG5ldyBsaWJyYXJ5CkBAIC02Nzk0LDU4ICs4MDYxLDU4IEBACiAJICAgIGxpbmtsaWI9JG5ld2xpYgogCSAgZmkgIyB0ZXN0IC1uICIkb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHMiCiAKLQkgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nIHx8IHRlc3QgIiRvcHRfbW9kZSIgIT0gcmVsaW5rOyB0aGVuCisJICBpZiB0ZXN0IHByb2cgPSAiJGxpbmttb2RlIiB8fCB0ZXN0IHJlbGluayAhPSAiJG9wdF9tb2RlIjsgdGhlbgogCSAgICBhZGRfc2hsaWJwYXRoPQogCSAgICBhZGRfZGlyPQogCSAgICBhZGQ9CiAJICAgIGxpYl9saW5rZWQ9eWVzCiAJICAgIGNhc2UgJGhhcmRjb2RlX2FjdGlvbiBpbgogCSAgICBpbW1lZGlhdGUgfCB1bnN1cHBvcnRlZCkKLQkgICAgICBpZiB0ZXN0ICIkaGFyZGNvZGVfZGlyZWN0IiA9IG5vOyB0aGVuCi0JCWFkZD0iJGRpci8kbGlua2xpYiIKKwkgICAgICBpZiB0ZXN0IG5vID0gIiRoYXJkY29kZV9kaXJlY3QiOyB0aGVuCisJCWFkZD0kZGlyLyRsaW5rbGliCiAJCWNhc2UgJGhvc3QgaW4KLQkJICAqLSotc2NvMy4ydjUuMC5bMDI0XSopIGFkZF9kaXI9Ii1MJGRpciIgOzsKLQkJICAqLSotc3lzdjQqdXcyKikgYWRkX2Rpcj0iLUwkZGlyIiA7OworCQkgICotKi1zY28zLjJ2NS4wLlswMjRdKikgYWRkX2Rpcj0tTCRkaXIgOzsKKwkJICAqLSotc3lzdjQqdXcyKikgYWRkX2Rpcj0tTCRkaXIgOzsKIAkJICAqLSotc3lzdjVPcGVuVU5JWCogfCAqLSotc3lzdjVVbml4V2FyZTcuWzAxXS5bMTBdKiB8IFwKLQkJICAgICotKi11bml4d2FyZTcqKSBhZGRfZGlyPSItTCRkaXIiIDs7CisJCSAgICAqLSotdW5peHdhcmU3KikgYWRkX2Rpcj0tTCRkaXIgOzsKIAkJICAqLSotZGFyd2luKiApCi0JCSAgICAjIGlmIHRoZSBsaWIgaXMgYSAobm9uLWRsb3BlbmVkKSBtb2R1bGUgdGhlbiB3ZSBjYW4gbm90CisJCSAgICAjIGlmIHRoZSBsaWIgaXMgYSAobm9uLWRsb3BlbmVkKSBtb2R1bGUgdGhlbiB3ZSBjYW5ub3QKIAkJICAgICMgbGluayBhZ2FpbnN0IGl0LCBzb21lb25lIGlzIGlnbm9yaW5nIHRoZSBlYXJsaWVyIHdhcm5pbmdzCiAJCSAgICBpZiAvdXNyL2Jpbi9maWxlIC1MICRhZGQgMj4gL2Rldi9udWxsIHwKLQkJCSAkR1JFUCAiOiBbXjpdKiBidW5kbGUiID4vZGV2L251bGwgOyB0aGVuCisJCQkgJEdSRVAgIjogW146XSogYnVuZGxlIiA+L2Rldi9udWxsOyB0aGVuCiAJCSAgICAgIGlmIHRlc3QgIlgkZGxvcGVubW9kdWxlIiAhPSAiWCRsaWIiOyB0aGVuCiAJCQkkRUNITyAiKioqIFdhcm5pbmc6IGxpYiAkbGlua2xpYiBpcyBhIG1vZHVsZSwgbm90IGEgc2hhcmVkIGxpYnJhcnkiCi0JCQlpZiB0ZXN0IC16ICIkb2xkX2xpYnJhcnkiIDsgdGhlbgorCQkJaWYgdGVzdCAteiAiJG9sZF9saWJyYXJ5IjsgdGhlbgogCQkJICBlY2hvCiAJCQkgIGVjaG8gIioqKiBBbmQgdGhlcmUgZG9lc24ndCBzZWVtIHRvIGJlIGEgc3RhdGljIGFyY2hpdmUgYXZhaWxhYmxlIgogCQkJICBlY2hvICIqKiogVGhlIGxpbmsgd2lsbCBwcm9iYWJseSBmYWlsLCBzb3JyeSIKIAkJCWVsc2UKLQkJCSAgYWRkPSIkZGlyLyRvbGRfbGlicmFyeSIKKwkJCSAgYWRkPSRkaXIvJG9sZF9saWJyYXJ5CiAJCQlmaQogCQkgICAgICBlbGlmIHRlc3QgLW4gIiRvbGRfbGlicmFyeSI7IHRoZW4KLQkJCWFkZD0iJGRpci8kb2xkX2xpYnJhcnkiCisJCQlhZGQ9JGRpci8kb2xkX2xpYnJhcnkKIAkJICAgICAgZmkKIAkJICAgIGZpCiAJCWVzYWMKLQkgICAgICBlbGlmIHRlc3QgIiRoYXJkY29kZV9taW51c19MIiA9IG5vOyB0aGVuCisJICAgICAgZWxpZiB0ZXN0IG5vID0gIiRoYXJkY29kZV9taW51c19MIjsgdGhlbgogCQljYXNlICRob3N0IGluCi0JCSotKi1zdW5vcyopIGFkZF9zaGxpYnBhdGg9IiRkaXIiIDs7CisJCSotKi1zdW5vcyopIGFkZF9zaGxpYnBhdGg9JGRpciA7OwogCQllc2FjCi0JCWFkZF9kaXI9Ii1MJGRpciIKLQkJYWRkPSItbCRuYW1lIgotCSAgICAgIGVsaWYgdGVzdCAiJGhhcmRjb2RlX3NobGlicGF0aF92YXIiID0gbm87IHRoZW4KLQkJYWRkX3NobGlicGF0aD0iJGRpciIKLQkJYWRkPSItbCRuYW1lIgorCQlhZGRfZGlyPS1MJGRpcgorCQlhZGQ9LWwkbmFtZQorCSAgICAgIGVsaWYgdGVzdCBubyA9ICIkaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciI7IHRoZW4KKwkJYWRkX3NobGlicGF0aD0kZGlyCisJCWFkZD0tbCRuYW1lCiAJICAgICAgZWxzZQogCQlsaWJfbGlua2VkPW5vCiAJICAgICAgZmkKIAkgICAgICA7OwogCSAgICByZWxpbmspCi0JICAgICAgaWYgdGVzdCAiJGhhcmRjb2RlX2RpcmVjdCIgPSB5ZXMgJiYKLQkgICAgICAgICB0ZXN0ICIkaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlIiA9IG5vOyB0aGVuCi0JCWFkZD0iJGRpci8kbGlua2xpYiIKLQkgICAgICBlbGlmIHRlc3QgIiRoYXJkY29kZV9taW51c19MIiA9IHllczsgdGhlbgotCQlhZGRfZGlyPSItTCRhYnNkaXIiCisJICAgICAgaWYgdGVzdCB5ZXMgPSAiJGhhcmRjb2RlX2RpcmVjdCIgJiYKKwkgICAgICAgICB0ZXN0IG5vID0gIiRoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUiOyB0aGVuCisJCWFkZD0kZGlyLyRsaW5rbGliCisJICAgICAgZWxpZiB0ZXN0IHllcyA9ICIkaGFyZGNvZGVfbWludXNfTCI7IHRoZW4KKwkJYWRkX2Rpcj0tTCRhYnNkaXIKIAkJIyBUcnkgbG9va2luZyBmaXJzdCBpbiB0aGUgbG9jYXRpb24gd2UncmUgYmVpbmcgaW5zdGFsbGVkIHRvLgogCQlpZiB0ZXN0IC1uICIkaW5zdF9wcmVmaXhfZGlyIjsgdGhlbgogCQkgIGNhc2UgJGxpYmRpciBpbgpAQCAtNjg1NCwxMCArODEyMSwxMCBAQAogCQkgICAgICA7OwogCQkgIGVzYWMKIAkJZmkKLQkJYWRkPSItbCRuYW1lIgotCSAgICAgIGVsaWYgdGVzdCAiJGhhcmRjb2RlX3NobGlicGF0aF92YXIiID0geWVzOyB0aGVuCi0JCWFkZF9zaGxpYnBhdGg9IiRkaXIiCi0JCWFkZD0iLWwkbmFtZSIKKwkJYWRkPS1sJG5hbWUKKwkgICAgICBlbGlmIHRlc3QgeWVzID0gIiRoYXJkY29kZV9zaGxpYnBhdGhfdmFyIjsgdGhlbgorCQlhZGRfc2hsaWJwYXRoPSRkaXIKKwkJYWRkPS1sJG5hbWUKIAkgICAgICBlbHNlCiAJCWxpYl9saW5rZWQ9bm8KIAkgICAgICBmaQpAQCAtNjg2NSw3ICs4MTMyLDcgQEAKIAkgICAgKikgbGliX2xpbmtlZD1ubyA7OwogCSAgICBlc2FjCiAKLQkgICAgaWYgdGVzdCAiJGxpYl9saW5rZWQiICE9IHllczsgdGhlbgorCSAgICBpZiB0ZXN0IHllcyAhPSAiJGxpYl9saW5rZWQiOyB0aGVuCiAJICAgICAgZnVuY19mYXRhbF9jb25maWd1cmF0aW9uICJ1bnN1cHBvcnRlZCBoYXJkY29kZSBwcm9wZXJ0aWVzIgogCSAgICBmaQogCkBAIC02ODc1LDE1ICs4MTQyLDE1IEBACiAJICAgICAgKikgZnVuY19hcHBlbmQgY29tcGlsZV9zaGxpYnBhdGggIiRhZGRfc2hsaWJwYXRoOiIgOzsKIAkgICAgICBlc2FjCiAJICAgIGZpCi0JICAgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nOyB0aGVuCisJICAgIGlmIHRlc3QgcHJvZyA9ICIkbGlua21vZGUiOyB0aGVuCiAJICAgICAgdGVzdCAtbiAiJGFkZF9kaXIiICYmIGNvbXBpbGVfZGVwbGlicz0iJGFkZF9kaXIgJGNvbXBpbGVfZGVwbGlicyIKIAkgICAgICB0ZXN0IC1uICIkYWRkIiAmJiBjb21waWxlX2RlcGxpYnM9IiRhZGQgJGNvbXBpbGVfZGVwbGlicyIKIAkgICAgZWxzZQogCSAgICAgIHRlc3QgLW4gIiRhZGRfZGlyIiAmJiBkZXBsaWJzPSIkYWRkX2RpciAkZGVwbGlicyIKIAkgICAgICB0ZXN0IC1uICIkYWRkIiAmJiBkZXBsaWJzPSIkYWRkICRkZXBsaWJzIgotCSAgICAgIGlmIHRlc3QgIiRoYXJkY29kZV9kaXJlY3QiICE9IHllcyAmJgotCQkgdGVzdCAiJGhhcmRjb2RlX21pbnVzX0wiICE9IHllcyAmJgotCQkgdGVzdCAiJGhhcmRjb2RlX3NobGlicGF0aF92YXIiID0geWVzOyB0aGVuCisJICAgICAgaWYgdGVzdCB5ZXMgIT0gIiRoYXJkY29kZV9kaXJlY3QiICYmCisJCSB0ZXN0IHllcyAhPSAiJGhhcmRjb2RlX21pbnVzX0wiICYmCisJCSB0ZXN0IHllcyA9ICIkaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciI7IHRoZW4KIAkJY2FzZSA6JGZpbmFsaXplX3NobGlicGF0aDogaW4KIAkJKiI6JGxpYmRpcjoiKikgOzsKIAkJKikgZnVuY19hcHBlbmQgZmluYWxpemVfc2hsaWJwYXRoICIkbGliZGlyOiIgOzsKQEAgLTY4OTIsMzMgKzgxNTksMzMgQEAKIAkgICAgZmkKIAkgIGZpCiAKLQkgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nIHx8IHRlc3QgIiRvcHRfbW9kZSIgPSByZWxpbms7IHRoZW4KKwkgIGlmIHRlc3QgcHJvZyA9ICIkbGlua21vZGUiIHx8IHRlc3QgcmVsaW5rID0gIiRvcHRfbW9kZSI7IHRoZW4KIAkgICAgYWRkX3NobGlicGF0aD0KIAkgICAgYWRkX2Rpcj0KIAkgICAgYWRkPQogCSAgICAjIEZpbmFsaXplIGNvbW1hbmQgZm9yIGJvdGggaXMgc2ltcGxlOiBqdXN0IGhhcmRjb2RlIGl0LgotCSAgICBpZiB0ZXN0ICIkaGFyZGNvZGVfZGlyZWN0IiA9IHllcyAmJgotCSAgICAgICB0ZXN0ICIkaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlIiA9IG5vOyB0aGVuCi0JICAgICAgYWRkPSIkbGliZGlyLyRsaW5rbGliIgotCSAgICBlbGlmIHRlc3QgIiRoYXJkY29kZV9taW51c19MIiA9IHllczsgdGhlbgotCSAgICAgIGFkZF9kaXI9Ii1MJGxpYmRpciIKLQkgICAgICBhZGQ9Ii1sJG5hbWUiCi0JICAgIGVsaWYgdGVzdCAiJGhhcmRjb2RlX3NobGlicGF0aF92YXIiID0geWVzOyB0aGVuCisJICAgIGlmIHRlc3QgeWVzID0gIiRoYXJkY29kZV9kaXJlY3QiICYmCisJICAgICAgIHRlc3Qgbm8gPSAiJGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSI7IHRoZW4KKwkgICAgICBhZGQ9JGxpYmRpci8kbGlua2xpYgorCSAgICBlbGlmIHRlc3QgeWVzID0gIiRoYXJkY29kZV9taW51c19MIjsgdGhlbgorCSAgICAgIGFkZF9kaXI9LUwkbGliZGlyCisJICAgICAgYWRkPS1sJG5hbWUKKwkgICAgZWxpZiB0ZXN0IHllcyA9ICIkaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciI7IHRoZW4KIAkgICAgICBjYXNlIDokZmluYWxpemVfc2hsaWJwYXRoOiBpbgogCSAgICAgICoiOiRsaWJkaXI6IiopIDs7CiAJICAgICAgKikgZnVuY19hcHBlbmQgZmluYWxpemVfc2hsaWJwYXRoICIkbGliZGlyOiIgOzsKIAkgICAgICBlc2FjCi0JICAgICAgYWRkPSItbCRuYW1lIgotCSAgICBlbGlmIHRlc3QgIiRoYXJkY29kZV9hdXRvbWF0aWMiID0geWVzOyB0aGVuCisJICAgICAgYWRkPS1sJG5hbWUKKwkgICAgZWxpZiB0ZXN0IHllcyA9ICIkaGFyZGNvZGVfYXV0b21hdGljIjsgdGhlbgogCSAgICAgIGlmIHRlc3QgLW4gIiRpbnN0X3ByZWZpeF9kaXIiICYmCi0JCSB0ZXN0IC1mICIkaW5zdF9wcmVmaXhfZGlyJGxpYmRpci8kbGlua2xpYiIgOyB0aGVuCi0JCWFkZD0iJGluc3RfcHJlZml4X2RpciRsaWJkaXIvJGxpbmtsaWIiCisJCSB0ZXN0IC1mICIkaW5zdF9wcmVmaXhfZGlyJGxpYmRpci8kbGlua2xpYiI7IHRoZW4KKwkJYWRkPSRpbnN0X3ByZWZpeF9kaXIkbGliZGlyLyRsaW5rbGliCiAJICAgICAgZWxzZQotCQlhZGQ9IiRsaWJkaXIvJGxpbmtsaWIiCisJCWFkZD0kbGliZGlyLyRsaW5rbGliCiAJICAgICAgZmkKIAkgICAgZWxzZQogCSAgICAgICMgV2UgY2Fubm90IHNlZW0gdG8gaGFyZGNvZGUgaXQsIGd1ZXNzIHdlJ2xsIGZha2UgaXQuCi0JICAgICAgYWRkX2Rpcj0iLUwkbGliZGlyIgorCSAgICAgIGFkZF9kaXI9LUwkbGliZGlyCiAJICAgICAgIyBUcnkgbG9va2luZyBmaXJzdCBpbiB0aGUgbG9jYXRpb24gd2UncmUgYmVpbmcgaW5zdGFsbGVkIHRvLgogCSAgICAgIGlmIHRlc3QgLW4gIiRpbnN0X3ByZWZpeF9kaXIiOyB0aGVuCiAJCWNhc2UgJGxpYmRpciBpbgpAQCAtNjkyNywxMCArODE5NCwxMCBAQAogCQkgICAgOzsKIAkJZXNhYwogCSAgICAgIGZpCi0JICAgICAgYWRkPSItbCRuYW1lIgorCSAgICAgIGFkZD0tbCRuYW1lCiAJICAgIGZpCiAKLQkgICAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2c7IHRoZW4KKwkgICAgaWYgdGVzdCBwcm9nID0gIiRsaW5rbW9kZSI7IHRoZW4KIAkgICAgICB0ZXN0IC1uICIkYWRkX2RpciIgJiYgZmluYWxpemVfZGVwbGlicz0iJGFkZF9kaXIgJGZpbmFsaXplX2RlcGxpYnMiCiAJICAgICAgdGVzdCAtbiAiJGFkZCIgJiYgZmluYWxpemVfZGVwbGlicz0iJGFkZCAkZmluYWxpemVfZGVwbGlicyIKIAkgICAgZWxzZQpAQCAtNjkzOCw0MyArODIwNSw0MyBAQAogCSAgICAgIHRlc3QgLW4gIiRhZGQiICYmIGRlcGxpYnM9IiRhZGQgJGRlcGxpYnMiCiAJICAgIGZpCiAJICBmaQotCWVsaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2c7IHRoZW4KKwllbGlmIHRlc3QgcHJvZyA9ICIkbGlua21vZGUiOyB0aGVuCiAJICAjIEhlcmUgd2UgYXNzdW1lIHRoYXQgb25lIG9mIGhhcmRjb2RlX2RpcmVjdCBvciBoYXJkY29kZV9taW51c19MCiAJICAjIGlzIG5vdCB1bnN1cHBvcnRlZC4gIFRoaXMgaXMgdmFsaWQgb24gYWxsIGtub3duIHN0YXRpYyBhbmQKIAkgICMgc2hhcmVkIHBsYXRmb3Jtcy4KLQkgIGlmIHRlc3QgIiRoYXJkY29kZV9kaXJlY3QiICE9IHVuc3VwcG9ydGVkOyB0aGVuCi0JICAgIHRlc3QgLW4gIiRvbGRfbGlicmFyeSIgJiYgbGlua2xpYj0iJG9sZF9saWJyYXJ5IgorCSAgaWYgdGVzdCB1bnN1cHBvcnRlZCAhPSAiJGhhcmRjb2RlX2RpcmVjdCI7IHRoZW4KKwkgICAgdGVzdCAtbiAiJG9sZF9saWJyYXJ5IiAmJiBsaW5rbGliPSRvbGRfbGlicmFyeQogCSAgICBjb21waWxlX2RlcGxpYnM9IiRkaXIvJGxpbmtsaWIgJGNvbXBpbGVfZGVwbGlicyIKIAkgICAgZmluYWxpemVfZGVwbGlicz0iJGRpci8kbGlua2xpYiAkZmluYWxpemVfZGVwbGlicyIKIAkgIGVsc2UKIAkgICAgY29tcGlsZV9kZXBsaWJzPSItbCRuYW1lIC1MJGRpciAkY29tcGlsZV9kZXBsaWJzIgogCSAgICBmaW5hbGl6ZV9kZXBsaWJzPSItbCRuYW1lIC1MJGRpciAkZmluYWxpemVfZGVwbGlicyIKIAkgIGZpCi0JZWxpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllczsgdGhlbgorCWVsaWYgdGVzdCB5ZXMgPSAiJGJ1aWxkX2xpYnRvb2xfbGlicyI7IHRoZW4KIAkgICMgTm90IGEgc2hhcmVkIGxpYnJhcnkKLQkgIGlmIHRlc3QgIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgIT0gcGFzc19hbGw7IHRoZW4KKwkgIGlmIHRlc3QgcGFzc19hbGwgIT0gIiRkZXBsaWJzX2NoZWNrX21ldGhvZCI7IHRoZW4KIAkgICAgIyBXZSdyZSB0cnlpbmcgbGluayBhIHNoYXJlZCBsaWJyYXJ5IGFnYWluc3QgYSBzdGF0aWMgb25lCiAJICAgICMgYnV0IHRoZSBzeXN0ZW0gZG9lc24ndCBzdXBwb3J0IGl0LgogCiAJICAgICMgSnVzdCBwcmludCBhIHdhcm5pbmcgYW5kIGFkZCB0aGUgbGlicmFyeSB0byBkZXBlbmRlbmN5X2xpYnMgc28KIAkgICAgIyB0aGF0IHRoZSBwcm9ncmFtIGNhbiBiZSBsaW5rZWQgYWdhaW5zdCB0aGUgc3RhdGljIGxpYnJhcnkuCiAJICAgIGVjaG8KLQkgICAgJEVDSE8gIioqKiBXYXJuaW5nOiBUaGlzIHN5c3RlbSBjYW4gbm90IGxpbmsgdG8gc3RhdGljIGxpYiBhcmNoaXZlICRsaWIuIgorCSAgICAkRUNITyAiKioqIFdhcm5pbmc6IFRoaXMgc3lzdGVtIGNhbm5vdCBsaW5rIHRvIHN0YXRpYyBsaWIgYXJjaGl2ZSAkbGliLiIKIAkgICAgZWNobyAiKioqIEkgaGF2ZSB0aGUgY2FwYWJpbGl0eSB0byBtYWtlIHRoYXQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGxpbmsgaW4gd2hlbiIKIAkgICAgZWNobyAiKioqIHlvdSBsaW5rIHRvIHRoaXMgbGlicmFyeS4gIEJ1dCBJIGNhbiBvbmx5IGRvIHRoaXMgaWYgeW91IGhhdmUgYSIKIAkgICAgZWNobyAiKioqIHNoYXJlZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCB3aGljaCB5b3UgZG8gbm90IGFwcGVhciB0byBoYXZlLiIKLQkgICAgaWYgdGVzdCAiJG1vZHVsZSIgPSB5ZXM7IHRoZW4KKwkgICAgaWYgdGVzdCB5ZXMgPSAiJG1vZHVsZSI7IHRoZW4KIAkgICAgICBlY2hvICIqKiogQnV0IGFzIHlvdSB0cnkgdG8gYnVpbGQgYSBtb2R1bGUgbGlicmFyeSwgbGlidG9vbCB3aWxsIHN0aWxsIGNyZWF0ZSAiCiAJICAgICAgZWNobyAiKioqIGEgc3RhdGljIG1vZHVsZSwgdGhhdCBzaG91bGQgd29yayBhcyBsb25nIGFzIHRoZSBkbG9wZW5pbmcgYXBwbGljYXRpb24iCiAJICAgICAgZWNobyAiKioqIGlzIGxpbmtlZCB3aXRoIHRoZSAtZGxvcGVuIGZsYWcgdG8gcmVzb2x2ZSBzeW1ib2xzIGF0IHJ1bnRpbWUuIgogCSAgICAgIGlmIHRlc3QgLXogIiRnbG9iYWxfc3ltYm9sX3BpcGUiOyB0aGVuCiAJCWVjaG8KIAkJZWNobyAiKioqIEhvd2V2ZXIsIHRoaXMgd291bGQgb25seSB3b3JrIGlmIGxpYnRvb2wgd2FzIGFibGUgdG8gZXh0cmFjdCBzeW1ib2wiCi0JCWVjaG8gIioqKiBsaXN0cyBmcm9tIGEgcHJvZ3JhbSwgdXNpbmcgXGBubScgb3IgZXF1aXZhbGVudCwgYnV0IGxpYnRvb2wgY291bGQiCisJCWVjaG8gIioqKiBsaXN0cyBmcm9tIGEgcHJvZ3JhbSwgdXNpbmcgJ25tJyBvciBlcXVpdmFsZW50LCBidXQgbGlidG9vbCBjb3VsZCIKIAkJZWNobyAiKioqIG5vdCBmaW5kIHN1Y2ggYSBwcm9ncmFtLiAgU28sIHRoaXMgbW9kdWxlIGlzIHByb2JhYmx5IHVzZWxlc3MuIgotCQllY2hvICIqKiogXGBubScgZnJvbSBHTlUgYmludXRpbHMgYW5kIGEgZnVsbCByZWJ1aWxkIG1heSBoZWxwLiIKKwkJZWNobyAiKioqICdubScgZnJvbSBHTlUgYmludXRpbHMgYW5kIGEgZnVsbCByZWJ1aWxkIG1heSBoZWxwLiIKIAkgICAgICBmaQotCSAgICAgIGlmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSBubzsgdGhlbgorCSAgICAgIGlmIHRlc3Qgbm8gPSAiJGJ1aWxkX29sZF9saWJzIjsgdGhlbgogCQlidWlsZF9saWJ0b29sX2xpYnM9bW9kdWxlCiAJCWJ1aWxkX29sZF9saWJzPXllcwogCSAgICAgIGVsc2UKQEAgLTY5ODcsMTEgKzgyNTQsMTEgQEAKIAkgIGZpCiAJZmkgIyBsaW5rIHNoYXJlZC9zdGF0aWMgbGlicmFyeT8KIAotCWlmIHRlc3QgIiRsaW5rbW9kZSIgPSBsaWI7IHRoZW4KKwlpZiB0ZXN0IGxpYiA9ICIkbGlua21vZGUiOyB0aGVuCiAJICBpZiB0ZXN0IC1uICIkZGVwZW5kZW5jeV9saWJzIiAmJgotCSAgICAgeyB0ZXN0ICIkaGFyZGNvZGVfaW50b19saWJzIiAhPSB5ZXMgfHwKLQkgICAgICAgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IHllcyB8fAotCSAgICAgICB0ZXN0ICIkbGlua19zdGF0aWMiID0geWVzOyB9OyB0aGVuCisJICAgICB7IHRlc3QgeWVzICE9ICIkaGFyZGNvZGVfaW50b19saWJzIiB8fAorCSAgICAgICB0ZXN0IHllcyA9ICIkYnVpbGRfb2xkX2xpYnMiIHx8CisJICAgICAgIHRlc3QgeWVzID0gIiRsaW5rX3N0YXRpYyI7IH07IHRoZW4KIAkgICAgIyBFeHRyYWN0IC1SIGZyb20gZGVwZW5kZW5jeV9saWJzCiAJICAgIHRlbXBfZGVwbGlicz0KIAkgICAgZm9yIGxpYmRpciBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbwpAQCAtNzAwNSwxMiArODI3MiwxMiBAQAogCSAgICAgICopIGZ1bmNfYXBwZW5kIHRlbXBfZGVwbGlicyAiICRsaWJkaXIiOzsKIAkgICAgICBlc2FjCiAJICAgIGRvbmUKLQkgICAgZGVwZW5kZW5jeV9saWJzPSIkdGVtcF9kZXBsaWJzIgorCSAgICBkZXBlbmRlbmN5X2xpYnM9JHRlbXBfZGVwbGlicwogCSAgZmkKIAogCSAgZnVuY19hcHBlbmQgbmV3bGliX3NlYXJjaF9wYXRoICIgJGFic2RpciIKIAkgICMgTGluayBhZ2FpbnN0IHRoaXMgbGlicmFyeQotCSAgdGVzdCAiJGxpbmtfc3RhdGljIiA9IG5vICYmIG5ld2RlcGVuZGVuY3lfbGlicz0iJGFic19sYWRpci8kbGFuYW1lICRuZXdkZXBlbmRlbmN5X2xpYnMiCisJICB0ZXN0IG5vID0gIiRsaW5rX3N0YXRpYyIgJiYgbmV3ZGVwZW5kZW5jeV9saWJzPSIkYWJzX2xhZGlyLyRsYW5hbWUgJG5ld2RlcGVuZGVuY3lfbGlicyIKIAkgICMgLi4uIGFuZCBpdHMgZGVwZW5kZW5jeV9saWJzCiAJICB0bXBfbGlicz0KIAkgIGZvciBkZXBsaWIgaW4gJGRlcGVuZGVuY3lfbGliczsgZG8KQEAgLTcwMjAsNyArODI4Nyw3IEBACiAgICAgICAgICAgICAgICAgICAgZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiOzsKICAgICAgICAgICAgICAgKikgZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRkZXBsaWIiIDs7CiAgICAgICAgICAgICBlc2FjCi0JICAgIGlmICRvcHRfcHJlc2VydmVfZHVwX2RlcHMgOyB0aGVuCisJICAgIGlmICRvcHRfcHJlc2VydmVfZHVwX2RlcHM7IHRoZW4KIAkgICAgICBjYXNlICIkdG1wX2xpYnMgIiBpbgogCSAgICAgICoiICRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQgIiopCiAgICAgICAgICAgICAgICAgZnVuY19hcHBlbmQgc3BlY2lhbGRlcGxpYnMgIiAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IiA7OwpAQCAtNzAyOSwxMiArODI5NiwxMiBAQAogCSAgICBmdW5jX2FwcGVuZCB0bXBfbGlicyAiICRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQiCiAJICBkb25lCiAKLQkgIGlmIHRlc3QgIiRsaW5rX2FsbF9kZXBsaWJzIiAhPSBubzsgdGhlbgorCSAgaWYgdGVzdCBubyAhPSAiJGxpbmtfYWxsX2RlcGxpYnMiOyB0aGVuCiAJICAgICMgQWRkIHRoZSBzZWFyY2ggcGF0aHMgb2YgYWxsIGRlcGVuZGVuY3kgbGlicmFyaWVzCiAJICAgIGZvciBkZXBsaWIgaW4gJGRlcGVuZGVuY3lfbGliczsgZG8KIAkgICAgICBwYXRoPQogCSAgICAgIGNhc2UgJGRlcGxpYiBpbgotCSAgICAgIC1MKikgcGF0aD0iJGRlcGxpYiIgOzsKKwkgICAgICAtTCopIHBhdGg9JGRlcGxpYiA7OwogCSAgICAgICoubGEpCiAJICAgICAgICBmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGRlcGxpYiIKIAkgICAgICAgIGRlcGxpYj0kZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0CkBAIC03MDQyLDEyICs4MzA5LDEyIEBACiAJCWRpcj0kZnVuY19kaXJuYW1lX3Jlc3VsdAogCQkjIFdlIG5lZWQgYW4gYWJzb2x1dGUgcGF0aC4KIAkJY2FzZSAkZGlyIGluCi0JCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgYWJzZGlyPSIkZGlyIiA7OworCQlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIGFic2Rpcj0kZGlyIDs7CiAJCSopCiAJCSAgYWJzZGlyPWBjZCAiJGRpciIgJiYgcHdkYAogCQkgIGlmIHRlc3QgLXogIiRhYnNkaXIiOyB0aGVuCi0JCSAgICBmdW5jX3dhcm5pbmcgImNhbm5vdCBkZXRlcm1pbmUgYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWUgb2YgXGAkZGlyJyIKLQkJICAgIGFic2Rpcj0iJGRpciIKKwkJICAgIGZ1bmNfd2FybmluZyAiY2Fubm90IGRldGVybWluZSBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZSBvZiAnJGRpciciCisJCSAgICBhYnNkaXI9JGRpcgogCQkgIGZpCiAJCSAgOzsKIAkJZXNhYwpAQCAtNzA1NSwzNSArODMyMiwzNSBAQAogCQljYXNlICRob3N0IGluCiAJCSotKi1kYXJ3aW4qKQogCQkgIGRlcGRlcGw9Ci0JCSAgZXZhbCBkZXBsaWJyYXJ5X25hbWVzPWAke1NFRH0gLW4gLWUgJ3MvXmxpYnJhcnlfbmFtZXM9XCguKlwpJC9cMS9wJyAkZGVwbGliYAotCQkgIGlmIHRlc3QgLW4gIiRkZXBsaWJyYXJ5X25hbWVzIiA7IHRoZW4KLQkJICAgIGZvciB0bXAgaW4gJGRlcGxpYnJhcnlfbmFtZXMgOyBkbworCQkgIGV2YWwgZGVwbGlicmFyeV9uYW1lcz1gJFNFRCAtbiAtZSAncy9ebGlicmFyeV9uYW1lcz1cKC4qXCkkL1wxL3AnICRkZXBsaWJgCisJCSAgaWYgdGVzdCAtbiAiJGRlcGxpYnJhcnlfbmFtZXMiOyB0aGVuCisJCSAgICBmb3IgdG1wIGluICRkZXBsaWJyYXJ5X25hbWVzOyBkbwogCQkgICAgICBkZXBkZXBsPSR0bXAKIAkJICAgIGRvbmUKLQkJICAgIGlmIHRlc3QgLWYgIiRhYnNkaXIvJG9iamRpci8kZGVwZGVwbCIgOyB0aGVuCi0JCSAgICAgIGRlcGRlcGw9IiRhYnNkaXIvJG9iamRpci8kZGVwZGVwbCIKLQkJICAgICAgZGFyd2luX2luc3RhbGxfbmFtZT1gJHtPVE9PTH0gLUwgJGRlcGRlcGwgfCBhd2sgJ3tpZiAoTlIgPT0gMikge3ByaW50ICQxO2V4aXR9fSdgCisJCSAgICBpZiB0ZXN0IC1mICIkYWJzZGlyLyRvYmpkaXIvJGRlcGRlcGwiOyB0aGVuCisJCSAgICAgIGRlcGRlcGw9JGFic2Rpci8kb2JqZGlyLyRkZXBkZXBsCisJCSAgICAgIGRhcndpbl9pbnN0YWxsX25hbWU9YCRPVE9PTCAtTCAkZGVwZGVwbCB8IGF3ayAne2lmIChOUiA9PSAyKSB7cHJpbnQgJDE7ZXhpdH19J2AKICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkZGFyd2luX2luc3RhbGxfbmFtZSI7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgZGFyd2luX2luc3RhbGxfbmFtZT1gJHtPVE9PTDY0fSAtTCAkZGVwZGVwbCAgfCBhd2sgJ3tpZiAoTlIgPT0gMikge3ByaW50ICQxO2V4aXR9fSdgCisgICAgICAgICAgICAgICAgICAgICAgICAgIGRhcndpbl9pbnN0YWxsX25hbWU9YCRPVE9PTDY0IC1MICRkZXBkZXBsICB8IGF3ayAne2lmIChOUiA9PSAyKSB7cHJpbnQgJDE7ZXhpdH19J2AKICAgICAgICAgICAgICAgICAgICAgICBmaQotCQkgICAgICBmdW5jX2FwcGVuZCBjb21waWxlcl9mbGFncyAiICR7d2x9LWR5bGliX2ZpbGUgJHt3bH0ke2Rhcndpbl9pbnN0YWxsX25hbWV9OiR7ZGVwZGVwbH0iCi0JCSAgICAgIGZ1bmNfYXBwZW5kIGxpbmtlcl9mbGFncyAiIC1keWxpYl9maWxlICR7ZGFyd2luX2luc3RhbGxfbmFtZX06JHtkZXBkZXBsfSIKKwkJICAgICAgZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAkd2wtZHlsaWJfZmlsZSAkd2wkZGFyd2luX2luc3RhbGxfbmFtZTokZGVwZGVwbCIKKwkJICAgICAgZnVuY19hcHBlbmQgbGlua2VyX2ZsYWdzICIgLWR5bGliX2ZpbGUgJGRhcndpbl9pbnN0YWxsX25hbWU6JGRlcGRlcGwiCiAJCSAgICAgIHBhdGg9CiAJCSAgICBmaQogCQkgIGZpCiAJCSAgOzsKIAkJKikKLQkJICBwYXRoPSItTCRhYnNkaXIvJG9iamRpciIKKwkJICBwYXRoPS1MJGFic2Rpci8kb2JqZGlyCiAJCSAgOzsKIAkJZXNhYwogCQllbHNlCi0JCSAgZXZhbCBsaWJkaXI9YCR7U0VEfSAtbiAtZSAncy9ebGliZGlyPVwoLipcKSQvXDEvcCcgJGRlcGxpYmAKKwkJICBldmFsIGxpYmRpcj1gJFNFRCAtbiAtZSAncy9ebGliZGlyPVwoLipcKSQvXDEvcCcgJGRlcGxpYmAKIAkJICB0ZXN0IC16ICIkbGliZGlyIiAmJiBcCi0JCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJcYCRkZXBsaWInIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKKwkJICAgIGZ1bmNfZmF0YWxfZXJyb3IgIickZGVwbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCiAJCSAgdGVzdCAiJGFic2RpciIgIT0gIiRsaWJkaXIiICYmIFwKLQkJICAgIGZ1bmNfd2FybmluZyAiXGAkZGVwbGliJyBzZWVtcyB0byBiZSBtb3ZlZCIKKwkJICAgIGZ1bmNfd2FybmluZyAiJyRkZXBsaWInIHNlZW1zIHRvIGJlIG1vdmVkIgogCi0JCSAgcGF0aD0iLUwkYWJzZGlyIgorCQkgIHBhdGg9LUwkYWJzZGlyCiAJCWZpCiAJCTs7CiAJICAgICAgZXNhYwpAQCAtNzA5NSwyMyArODM2MiwyMyBAQAogCSAgZmkgIyBsaW5rX2FsbF9kZXBsaWJzICE9IG5vCiAJZmkgIyBsaW5rbW9kZSA9IGxpYgogICAgICAgZG9uZSAjIGZvciBkZXBsaWIgaW4gJGxpYnMKLSAgICAgIGlmIHRlc3QgIiRwYXNzIiA9IGxpbms7IHRoZW4KLQlpZiB0ZXN0ICIkbGlua21vZGUiID0gInByb2ciOyB0aGVuCisgICAgICBpZiB0ZXN0IGxpbmsgPSAiJHBhc3MiOyB0aGVuCisJaWYgdGVzdCBwcm9nID0gIiRsaW5rbW9kZSI7IHRoZW4KIAkgIGNvbXBpbGVfZGVwbGlicz0iJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICRjb21waWxlX2RlcGxpYnMiCiAJICBmaW5hbGl6ZV9kZXBsaWJzPSIkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgJGZpbmFsaXplX2RlcGxpYnMiCiAJZWxzZQogCSAgY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAiYCRFQ0hPICIgJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzIiB8ICRTRUQgJ3MlIFwoW14gJF0qXCkubHRmcmFtZXdvcmslIC1mcmFtZXdvcmsgXDElZydgCiAJZmkKICAgICAgIGZpCi0gICAgICBkZXBlbmRlbmN5X2xpYnM9IiRuZXdkZXBlbmRlbmN5X2xpYnMiCi0gICAgICBpZiB0ZXN0ICIkcGFzcyIgPSBkbHByZW9wZW47IHRoZW4KKyAgICAgIGRlcGVuZGVuY3lfbGlicz0kbmV3ZGVwZW5kZW5jeV9saWJzCisgICAgICBpZiB0ZXN0IGRscHJlb3BlbiA9ICIkcGFzcyI7IHRoZW4KIAkjIExpbmsgdGhlIGRscHJlb3BlbmVkIGxpYnJhcmllcyBiZWZvcmUgb3RoZXIgbGlicmFyaWVzCiAJZm9yIGRlcGxpYiBpbiAkc2F2ZV9kZXBsaWJzOyBkbwogCSAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKIAlkb25lCiAgICAgICBmaQotICAgICAgaWYgdGVzdCAiJHBhc3MiICE9IGRsb3BlbjsgdGhlbgotCWlmIHRlc3QgIiRwYXNzIiAhPSBjb252OyB0aGVuCisgICAgICBpZiB0ZXN0IGRsb3BlbiAhPSAiJHBhc3MiOyB0aGVuCisJdGVzdCBjb252ID0gIiRwYXNzIiB8fCB7CiAJICAjIE1ha2Ugc3VyZSBsaWJfc2VhcmNoX3BhdGggY29udGFpbnMgb25seSB1bmlxdWUgZGlyZWN0b3JpZXMuCiAJICBsaWJfc2VhcmNoX3BhdGg9CiAJICBmb3IgZGlyIGluICRuZXdsaWJfc2VhcmNoX3BhdGg7IGRvCkBAIC03MTIxLDEyICs4Mzg4LDEyIEBACiAJICAgIGVzYWMKIAkgIGRvbmUKIAkgIG5ld2xpYl9zZWFyY2hfcGF0aD0KLQlmaQorCX0KIAotCWlmIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgIT0gInByb2csbGluayI7IHRoZW4KLQkgIHZhcnM9ImRlcGxpYnMiCi0JZWxzZQorCWlmIHRlc3QgcHJvZyxsaW5rID0gIiRsaW5rbW9kZSwkcGFzcyI7IHRoZW4KIAkgIHZhcnM9ImNvbXBpbGVfZGVwbGlicyBmaW5hbGl6ZV9kZXBsaWJzIgorCWVsc2UKKwkgIHZhcnM9ZGVwbGlicwogCWZpCiAJZm9yIHZhciBpbiAkdmFycyBkZXBlbmRlbmN5X2xpYnM7IGRvCiAJICAjIEFkZCBsaWJyYXJpZXMgdG8gJHZhciBpbiByZXZlcnNlIG9yZGVyCkBAIC03MTg3LDU5ICs4NDU0LDU5IEBACiAgICAgICAjIExhc3Qgc3RlcDogcmVtb3ZlIHJ1bnRpbWUgbGlicyBmcm9tIGRlcGVuZGVuY3lfbGlicwogICAgICAgIyAodGhleSBzdGF5IGluIGRlcGxpYnMpCiAgICAgICB0bXBfbGlicz0KLSAgICAgIGZvciBpIGluICRkZXBlbmRlbmN5X2xpYnMgOyBkbworICAgICAgZm9yIGkgaW4gJGRlcGVuZGVuY3lfbGliczsgZG8KIAljYXNlICIgJHByZWRlcHMgJHBvc3RkZXBzICRjb21waWxlcl9saWJfc2VhcmNoX3BhdGggIiBpbgogCSoiICRpICIqKQotCSAgaT0iIgorCSAgaT0KIAkgIDs7CiAJZXNhYwotCWlmIHRlc3QgLW4gIiRpIiA7IHRoZW4KKwlpZiB0ZXN0IC1uICIkaSI7IHRoZW4KIAkgIGZ1bmNfYXBwZW5kIHRtcF9saWJzICIgJGkiCiAJZmkKICAgICAgIGRvbmUKICAgICAgIGRlcGVuZGVuY3lfbGlicz0kdG1wX2xpYnMKICAgICBkb25lICMgZm9yIHBhc3MKLSAgICBpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZzsgdGhlbgotICAgICAgZGxmaWxlcz0iJG5ld2RsZmlsZXMiCisgICAgaWYgdGVzdCBwcm9nID0gIiRsaW5rbW9kZSI7IHRoZW4KKyAgICAgIGRsZmlsZXM9JG5ld2RsZmlsZXMKICAgICBmaQotICAgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nIHx8IHRlc3QgIiRsaW5rbW9kZSIgPSBsaWI7IHRoZW4KLSAgICAgIGRscHJlZmlsZXM9IiRuZXdkbHByZWZpbGVzIgorICAgIGlmIHRlc3QgcHJvZyA9ICIkbGlua21vZGUiIHx8IHRlc3QgbGliID0gIiRsaW5rbW9kZSI7IHRoZW4KKyAgICAgIGRscHJlZmlsZXM9JG5ld2RscHJlZmlsZXMKICAgICBmaQogCiAgICAgY2FzZSAkbGlua21vZGUgaW4KICAgICBvbGRsaWIpCi0gICAgICBpZiB0ZXN0IC1uICIkZGxmaWxlcyRkbHByZWZpbGVzIiB8fCB0ZXN0ICIkZGxzZWxmIiAhPSBubzsgdGhlbgotCWZ1bmNfd2FybmluZyAiXGAtZGxvcGVuJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcyIKKyAgICAgIGlmIHRlc3QgLW4gIiRkbGZpbGVzJGRscHJlZmlsZXMiIHx8IHRlc3Qgbm8gIT0gIiRkbHNlbGYiOyB0aGVuCisJZnVuY193YXJuaW5nICInLWRsb3BlbicgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMiCiAgICAgICBmaQogCiAgICAgICBjYXNlICIgJGRlcGxpYnMiIGluCiAgICAgICAqXCAtbCogfCAqXCAtTCopCi0JZnVuY193YXJuaW5nICJcYC1sJyBhbmQgXGAtTCcgYXJlIGlnbm9yZWQgZm9yIGFyY2hpdmVzIiA7OworCWZ1bmNfd2FybmluZyAiJy1sJyBhbmQgJy1MJyBhcmUgaWdub3JlZCBmb3IgYXJjaGl2ZXMiIDs7CiAgICAgICBlc2FjCiAKICAgICAgIHRlc3QgLW4gIiRycGF0aCIgJiYgXAotCWZ1bmNfd2FybmluZyAiXGAtcnBhdGgnIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzIgorCWZ1bmNfd2FybmluZyAiJy1ycGF0aCcgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMiCiAKICAgICAgIHRlc3QgLW4gIiR4cnBhdGgiICYmIFwKLQlmdW5jX3dhcm5pbmcgIlxgLVInIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzIgorCWZ1bmNfd2FybmluZyAiJy1SJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcyIKIAogICAgICAgdGVzdCAtbiAiJHZpbmZvIiAmJiBcCi0JZnVuY193YXJuaW5nICJcYC12ZXJzaW9uLWluZm8vLXZlcnNpb24tbnVtYmVyJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcyIKKwlmdW5jX3dhcm5pbmcgIictdmVyc2lvbi1pbmZvLy12ZXJzaW9uLW51bWJlcicgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMiCiAKICAgICAgIHRlc3QgLW4gIiRyZWxlYXNlIiAmJiBcCi0JZnVuY193YXJuaW5nICJcYC1yZWxlYXNlJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcyIKKwlmdW5jX3dhcm5pbmcgIictcmVsZWFzZScgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMiCiAKICAgICAgIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyRleHBvcnRfc3ltYm9sc19yZWdleCIgJiYgXAotCWZ1bmNfd2FybmluZyAiXGAtZXhwb3J0LXN5bWJvbHMnIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzIgorCWZ1bmNfd2FybmluZyAiJy1leHBvcnQtc3ltYm9scycgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMiCiAKICAgICAgICMgTm93IHNldCB0aGUgdmFyaWFibGVzIGZvciBidWlsZGluZyBvbGQgbGlicmFyaWVzLgogICAgICAgYnVpbGRfbGlidG9vbF9saWJzPW5vCi0gICAgICBvbGRsaWJzPSIkb3V0cHV0IgorICAgICAgb2xkbGlicz0kb3V0cHV0CiAgICAgICBmdW5jX2FwcGVuZCBvYmpzICIkb2xkX2RlcGxpYnMiCiAgICAgICA7OwogCiAgICAgbGliKQotICAgICAgIyBNYWtlIHN1cmUgd2Ugb25seSBnZW5lcmF0ZSBsaWJyYXJpZXMgb2YgdGhlIGZvcm0gYGxpYk5BTUUubGEnLgorICAgICAgIyBNYWtlIHN1cmUgd2Ugb25seSBnZW5lcmF0ZSBsaWJyYXJpZXMgb2YgdGhlIGZvcm0gJ2xpYk5BTUUubGEnLgogICAgICAgY2FzZSAkb3V0cHV0bmFtZSBpbgogICAgICAgbGliKikKIAlmdW5jX3N0cmlwbmFtZSAnbGliJyAnLmxhJyAiJG91dHB1dG5hbWUiCkBAIC03MjQ4LDEwICs4NTE1LDEwIEBACiAJZXZhbCBsaWJuYW1lPVwiJGxpYm5hbWVfc3BlY1wiCiAJOzsKICAgICAgICopCi0JdGVzdCAiJG1vZHVsZSIgPSBubyAmJiBcCi0JICBmdW5jX2ZhdGFsX2hlbHAgImxpYnRvb2wgbGlicmFyeSBcYCRvdXRwdXQnIG11c3QgYmVnaW4gd2l0aCBcYGxpYiciCisJdGVzdCBubyA9ICIkbW9kdWxlIiBcCisJICAmJiBmdW5jX2ZhdGFsX2hlbHAgImxpYnRvb2wgbGlicmFyeSAnJG91dHB1dCcgbXVzdCBiZWdpbiB3aXRoICdsaWInIgogCi0JaWYgdGVzdCAiJG5lZWRfbGliX3ByZWZpeCIgIT0gbm87IHRoZW4KKwlpZiB0ZXN0IG5vICE9ICIkbmVlZF9saWJfcHJlZml4IjsgdGhlbgogCSAgIyBBZGQgdGhlICJsaWIiIHByZWZpeCBmb3IgbW9kdWxlcyBpZiByZXF1aXJlZAogCSAgZnVuY19zdHJpcG5hbWUgJycgJy5sYScgIiRvdXRwdXRuYW1lIgogCSAgbmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CkBAIC03MjY1LDggKzg1MzIsOCBAQAogICAgICAgZXNhYwogCiAgICAgICBpZiB0ZXN0IC1uICIkb2JqcyI7IHRoZW4KLQlpZiB0ZXN0ICIkZGVwbGlic19jaGVja19tZXRob2QiICE9IHBhc3NfYWxsOyB0aGVuCi0JICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgYnVpbGQgbGlidG9vbCBsaWJyYXJ5IFxgJG91dHB1dCcgZnJvbSBub24tbGlidG9vbCBvYmplY3RzIG9uIHRoaXMgaG9zdDokb2JqcyIKKwlpZiB0ZXN0IHBhc3NfYWxsICE9ICIkZGVwbGlic19jaGVja19tZXRob2QiOyB0aGVuCisJICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgYnVpbGQgbGlidG9vbCBsaWJyYXJ5ICckb3V0cHV0JyBmcm9tIG5vbi1saWJ0b29sIG9iamVjdHMgb24gdGhpcyBob3N0OiRvYmpzIgogCWVsc2UKIAkgIGVjaG8KIAkgICRFQ0hPICIqKiogV2FybmluZzogTGlua2luZyB0aGUgc2hhcmVkIGxpYnJhcnkgJG91dHB1dCBhZ2FpbnN0IHRoZSBub24tbGlidG9vbCIKQEAgLTcyNzUsMjEgKzg1NDIsMjEgQEAKIAlmaQogICAgICAgZmkKIAotICAgICAgdGVzdCAiJGRsc2VsZiIgIT0gbm8gJiYgXAotCWZ1bmNfd2FybmluZyAiXGAtZGxvcGVuIHNlbGYnIGlzIGlnbm9yZWQgZm9yIGxpYnRvb2wgbGlicmFyaWVzIgorICAgICAgdGVzdCBubyA9ICIkZGxzZWxmIiBcCisJfHwgZnVuY193YXJuaW5nICInLWRsb3BlbiBzZWxmJyBpcyBpZ25vcmVkIGZvciBsaWJ0b29sIGxpYnJhcmllcyIKIAogICAgICAgc2V0IGR1bW15ICRycGF0aAogICAgICAgc2hpZnQKLSAgICAgIHRlc3QgIiQjIiAtZ3QgMSAmJiBcCi0JZnVuY193YXJuaW5nICJpZ25vcmluZyBtdWx0aXBsZSBcYC1ycGF0aCdzIGZvciBhIGxpYnRvb2wgbGlicmFyeSIKKyAgICAgIHRlc3QgMSAtbHQgIiQjIiBcCisJJiYgZnVuY193YXJuaW5nICJpZ25vcmluZyBtdWx0aXBsZSAnLXJwYXRoJ3MgZm9yIGEgbGlidG9vbCBsaWJyYXJ5IgogCi0gICAgICBpbnN0YWxsX2xpYmRpcj0iJDEiCisgICAgICBpbnN0YWxsX2xpYmRpcj0kMQogCiAgICAgICBvbGRsaWJzPQogICAgICAgaWYgdGVzdCAteiAiJHJwYXRoIjsgdGhlbgotCWlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzOyB0aGVuCisJaWYgdGVzdCB5ZXMgPSAiJGJ1aWxkX2xpYnRvb2xfbGlicyI7IHRoZW4KIAkgICMgQnVpbGRpbmcgYSBsaWJ0b29sIGNvbnZlbmllbmNlIGxpYnJhcnkuCi0JICAjIFNvbWUgY29tcGlsZXJzIGhhdmUgcHJvYmxlbXMgd2l0aCBhIGAuYWwnIGV4dGVuc2lvbiBzbworCSAgIyBTb21lIGNvbXBpbGVycyBoYXZlIHByb2JsZW1zIHdpdGggYSAnLmFsJyBleHRlbnNpb24gc28KIAkgICMgY29udmVuaWVuY2UgbGlicmFyaWVzIHNob3VsZCBoYXZlIHRoZSBzYW1lIGV4dGVuc2lvbiBhbgogCSAgIyBhcmNoaXZlIG5vcm1hbGx5IHdvdWxkLgogCSAgb2xkbGlicz0iJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuJGxpYmV4dCAkb2xkbGlicyIKQEAgLTcyOTgsMjAgKzg1NjUsMjAgQEAKIAlmaQogCiAJdGVzdCAtbiAiJHZpbmZvIiAmJiBcCi0JICBmdW5jX3dhcm5pbmcgIlxgLXZlcnNpb24taW5mby8tdmVyc2lvbi1udW1iZXInIGlzIGlnbm9yZWQgZm9yIGNvbnZlbmllbmNlIGxpYnJhcmllcyIKKwkgIGZ1bmNfd2FybmluZyAiJy12ZXJzaW9uLWluZm8vLXZlcnNpb24tbnVtYmVyJyBpcyBpZ25vcmVkIGZvciBjb252ZW5pZW5jZSBsaWJyYXJpZXMiCiAKIAl0ZXN0IC1uICIkcmVsZWFzZSIgJiYgXAotCSAgZnVuY193YXJuaW5nICJcYC1yZWxlYXNlJyBpcyBpZ25vcmVkIGZvciBjb252ZW5pZW5jZSBsaWJyYXJpZXMiCisJICBmdW5jX3dhcm5pbmcgIictcmVsZWFzZScgaXMgaWdub3JlZCBmb3IgY29udmVuaWVuY2UgbGlicmFyaWVzIgogICAgICAgZWxzZQogCiAJIyBQYXJzZSB0aGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBhcmd1bWVudC4KLQlzYXZlX2lmcz0iJElGUyI7IElGUz0nOicKKwlzYXZlX2lmcz0kSUZTOyBJRlM9OgogCXNldCBkdW1teSAkdmluZm8gMCAwIDAKIAlzaGlmdAotCUlGUz0iJHNhdmVfaWZzIgorCUlGUz0kc2F2ZV9pZnMKIAogCXRlc3QgLW4gIiQ3IiAmJiBcCi0JICBmdW5jX2ZhdGFsX2hlbHAgInRvbyBtYW55IHBhcmFtZXRlcnMgdG8gXGAtdmVyc2lvbi1pbmZvJyIKKwkgIGZ1bmNfZmF0YWxfaGVscCAidG9vIG1hbnkgcGFyYW1ldGVycyB0byAnLXZlcnNpb24taW5mbyciCiAKIAkjIGNvbnZlcnQgYWJzb2x1dGUgdmVyc2lvbiBudW1iZXJzIHRvIGxpYnRvb2wgYWdlcwogCSMgdGhpcyByZXRhaW5zIGNvbXBhdGliaWxpdHkgd2l0aCAubGEgZmlsZXMgYW5kIGF0dGVtcHRzCkBAIC03MzE5LDQyICs4NTg2LDQyIEBACiAKIAljYXNlICR2aW5mb19udW1iZXIgaW4KIAl5ZXMpCi0JICBudW1iZXJfbWFqb3I9IiQxIgotCSAgbnVtYmVyX21pbm9yPSIkMiIKLQkgIG51bWJlcl9yZXZpc2lvbj0iJDMiCisJICBudW1iZXJfbWFqb3I9JDEKKwkgIG51bWJlcl9taW5vcj0kMgorCSAgbnVtYmVyX3JldmlzaW9uPSQzCiAJICAjCiAJICAjIFRoZXJlIGFyZSByZWFsbHkgb25seSB0d28ga2luZHMgLS0gdGhvc2UgdGhhdAogCSAgIyB1c2UgdGhlIGN1cnJlbnQgcmV2aXNpb24gYXMgdGhlIG1ham9yIHZlcnNpb24KIAkgICMgYW5kIHRob3NlIHRoYXQgc3VidHJhY3QgYWdlIGFuZCB1c2UgYWdlIGFzCiAJICAjIGEgbWlub3IgdmVyc2lvbi4gIEJ1dCwgdGhlbiB0aGVyZSBpcyBpcml4Ci0JICAjIHdoaWNoIGhhcyBhbiBleHRyYSAxIGFkZGVkIGp1c3QgZm9yIGZ1bgorCSAgIyB0aGF0IGhhcyBhbiBleHRyYSAxIGFkZGVkIGp1c3QgZm9yIGZ1bgogCSAgIwogCSAgY2FzZSAkdmVyc2lvbl90eXBlIGluCiAJICAjIGNvcnJlY3QgbGludXggdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKIAkgIGRhcndpbnxsaW51eHxvc2Z8d2luZG93c3xub25lKQogCSAgICBmdW5jX2FyaXRoICRudW1iZXJfbWFqb3IgKyAkbnVtYmVyX21pbm9yCiAJICAgIGN1cnJlbnQ9JGZ1bmNfYXJpdGhfcmVzdWx0Ci0JICAgIGFnZT0iJG51bWJlcl9taW5vciIKLQkgICAgcmV2aXNpb249IiRudW1iZXJfcmV2aXNpb24iCisJICAgIGFnZT0kbnVtYmVyX21pbm9yCisJICAgIHJldmlzaW9uPSRudW1iZXJfcmV2aXNpb24KIAkgICAgOzsKIAkgIGZyZWVic2QtYW91dHxmcmVlYnNkLWVsZnxxbnh8c3Vub3MpCi0JICAgIGN1cnJlbnQ9IiRudW1iZXJfbWFqb3IiCi0JICAgIHJldmlzaW9uPSIkbnVtYmVyX21pbm9yIgotCSAgICBhZ2U9IjAiCisJICAgIGN1cnJlbnQ9JG51bWJlcl9tYWpvcgorCSAgICByZXZpc2lvbj0kbnVtYmVyX21pbm9yCisJICAgIGFnZT0wCiAJICAgIDs7CiAJICBpcml4fG5vbnN0b3B1eCkKIAkgICAgZnVuY19hcml0aCAkbnVtYmVyX21ham9yICsgJG51bWJlcl9taW5vcgogCSAgICBjdXJyZW50PSRmdW5jX2FyaXRoX3Jlc3VsdAotCSAgICBhZ2U9IiRudW1iZXJfbWlub3IiCi0JICAgIHJldmlzaW9uPSIkbnVtYmVyX21pbm9yIgorCSAgICBhZ2U9JG51bWJlcl9taW5vcgorCSAgICByZXZpc2lvbj0kbnVtYmVyX21pbm9yCiAJICAgIGx0X2lyaXhfaW5jcmVtZW50PW5vCiAJICAgIDs7CiAJICBlc2FjCiAJICA7OwogCW5vKQotCSAgY3VycmVudD0iJDEiCi0JICByZXZpc2lvbj0iJDIiCi0JICBhZ2U9IiQzIgorCSAgY3VycmVudD0kMQorCSAgcmV2aXNpb249JDIKKwkgIGFnZT0kMwogCSAgOzsKIAllc2FjCiAKQEAgLTczNjIsMzAgKzg2MjksMzAgQEAKIAljYXNlICRjdXJyZW50IGluCiAJMHxbMS05XXxbMS05XVswLTldfFsxLTldWzAtOV1bMC05XXxbMS05XVswLTldWzAtOV1bMC05XXxbMS05XVswLTldWzAtOV1bMC05XVswLTldKSA7OwogCSopCi0JICBmdW5jX2Vycm9yICJDVVJSRU5UIFxgJGN1cnJlbnQnIG11c3QgYmUgYSBub25uZWdhdGl2ZSBpbnRlZ2VyIgotCSAgZnVuY19mYXRhbF9lcnJvciAiXGAkdmluZm8nIGlzIG5vdCB2YWxpZCB2ZXJzaW9uIGluZm9ybWF0aW9uIgorCSAgZnVuY19lcnJvciAiQ1VSUkVOVCAnJGN1cnJlbnQnIG11c3QgYmUgYSBub25uZWdhdGl2ZSBpbnRlZ2VyIgorCSAgZnVuY19mYXRhbF9lcnJvciAiJyR2aW5mbycgaXMgbm90IHZhbGlkIHZlcnNpb24gaW5mb3JtYXRpb24iCiAJICA7OwogCWVzYWMKIAogCWNhc2UgJHJldmlzaW9uIGluCiAJMHxbMS05XXxbMS05XVswLTldfFsxLTldWzAtOV1bMC05XXxbMS05XVswLTldWzAtOV1bMC05XXxbMS05XVswLTldWzAtOV1bMC05XVswLTldKSA7OwogCSopCi0JICBmdW5jX2Vycm9yICJSRVZJU0lPTiBcYCRyZXZpc2lvbicgbXVzdCBiZSBhIG5vbm5lZ2F0aXZlIGludGVnZXIiCi0JICBmdW5jX2ZhdGFsX2Vycm9yICJcYCR2aW5mbycgaXMgbm90IHZhbGlkIHZlcnNpb24gaW5mb3JtYXRpb24iCisJICBmdW5jX2Vycm9yICJSRVZJU0lPTiAnJHJldmlzaW9uJyBtdXN0IGJlIGEgbm9ubmVnYXRpdmUgaW50ZWdlciIKKwkgIGZ1bmNfZmF0YWxfZXJyb3IgIickdmluZm8nIGlzIG5vdCB2YWxpZCB2ZXJzaW9uIGluZm9ybWF0aW9uIgogCSAgOzsKIAllc2FjCiAKIAljYXNlICRhZ2UgaW4KIAkwfFsxLTldfFsxLTldWzAtOV18WzEtOV1bMC05XVswLTldfFsxLTldWzAtOV1bMC05XVswLTldfFsxLTldWzAtOV1bMC05XVswLTldWzAtOV0pIDs7CiAJKikKLQkgIGZ1bmNfZXJyb3IgIkFHRSBcYCRhZ2UnIG11c3QgYmUgYSBub25uZWdhdGl2ZSBpbnRlZ2VyIgotCSAgZnVuY19mYXRhbF9lcnJvciAiXGAkdmluZm8nIGlzIG5vdCB2YWxpZCB2ZXJzaW9uIGluZm9ybWF0aW9uIgorCSAgZnVuY19lcnJvciAiQUdFICckYWdlJyBtdXN0IGJlIGEgbm9ubmVnYXRpdmUgaW50ZWdlciIKKwkgIGZ1bmNfZmF0YWxfZXJyb3IgIickdmluZm8nIGlzIG5vdCB2YWxpZCB2ZXJzaW9uIGluZm9ybWF0aW9uIgogCSAgOzsKIAllc2FjCiAKIAlpZiB0ZXN0ICIkYWdlIiAtZ3QgIiRjdXJyZW50IjsgdGhlbgotCSAgZnVuY19lcnJvciAiQUdFIFxgJGFnZScgaXMgZ3JlYXRlciB0aGFuIHRoZSBjdXJyZW50IGludGVyZmFjZSBudW1iZXIgXGAkY3VycmVudCciCi0JICBmdW5jX2ZhdGFsX2Vycm9yICJcYCR2aW5mbycgaXMgbm90IHZhbGlkIHZlcnNpb24gaW5mb3JtYXRpb24iCisJICBmdW5jX2Vycm9yICJBR0UgJyRhZ2UnIGlzIGdyZWF0ZXIgdGhhbiB0aGUgY3VycmVudCBpbnRlcmZhY2UgbnVtYmVyICckY3VycmVudCciCisJICBmdW5jX2ZhdGFsX2Vycm9yICInJHZpbmZvJyBpcyBub3QgdmFsaWQgdmVyc2lvbiBpbmZvcm1hdGlvbiIKIAlmaQogCiAJIyBDYWxjdWxhdGUgdGhlIHZlcnNpb24gdmFyaWFibGVzLgpAQCAtNzQwMCwyNiArODY2NywzNSBAQAogCSAgIyB2ZXJzdHJpbmcgZm9yIGNvZGluZyBpdCBpbnRvIHRoZSBsaWJyYXJ5IGhlYWRlcgogCSAgZnVuY19hcml0aCAkY3VycmVudCAtICRhZ2UKIAkgIG1ham9yPS4kZnVuY19hcml0aF9yZXN1bHQKLQkgIHZlcnN1ZmZpeD0iJG1ham9yLiRhZ2UuJHJldmlzaW9uIgorCSAgdmVyc3VmZml4PSRtYWpvci4kYWdlLiRyZXZpc2lvbgogCSAgIyBEYXJ3aW4gbGQgZG9lc24ndCBsaWtlIDAgZm9yIHRoZXNlIG9wdGlvbnMuLi4KIAkgIGZ1bmNfYXJpdGggJGN1cnJlbnQgKyAxCiAJICBtaW5vcl9jdXJyZW50PSRmdW5jX2FyaXRoX3Jlc3VsdAotCSAgeGxjdmVyc3RyaW5nPSIke3dsfS1jb21wYXRpYmlsaXR5X3ZlcnNpb24gJHt3bH0kbWlub3JfY3VycmVudCAke3dsfS1jdXJyZW50X3ZlcnNpb24gJHt3bH0kbWlub3JfY3VycmVudC4kcmV2aXNpb24iCisJICB4bGN2ZXJzdHJpbmc9IiR3bC1jb21wYXRpYmlsaXR5X3ZlcnNpb24gJHdsJG1pbm9yX2N1cnJlbnQgJHdsLWN1cnJlbnRfdmVyc2lvbiAkd2wkbWlub3JfY3VycmVudC4kcmV2aXNpb24iCiAJICB2ZXJzdHJpbmc9Ii1jb21wYXRpYmlsaXR5X3ZlcnNpb24gJG1pbm9yX2N1cnJlbnQgLWN1cnJlbnRfdmVyc2lvbiAkbWlub3JfY3VycmVudC4kcmV2aXNpb24iCisgICAgICAgICAgIyBPbiBEYXJ3aW4gb3RoZXIgY29tcGlsZXJzCisgICAgICAgICAgY2FzZSAkQ0MgaW4KKyAgICAgICAgICAgICAgbmFnZm9yKikKKyAgICAgICAgICAgICAgICAgIHZlcnN0cmluZz0iJHdsLWNvbXBhdGliaWxpdHlfdmVyc2lvbiAkd2wkbWlub3JfY3VycmVudCAkd2wtY3VycmVudF92ZXJzaW9uICR3bCRtaW5vcl9jdXJyZW50LiRyZXZpc2lvbiIKKyAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICopCisgICAgICAgICAgICAgICAgICB2ZXJzdHJpbmc9Ii1jb21wYXRpYmlsaXR5X3ZlcnNpb24gJG1pbm9yX2N1cnJlbnQgLWN1cnJlbnRfdmVyc2lvbiAkbWlub3JfY3VycmVudC4kcmV2aXNpb24iCisgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgIGVzYWMKIAkgIDs7CiAKIAlmcmVlYnNkLWFvdXQpCi0JICBtYWpvcj0iLiRjdXJyZW50IgotCSAgdmVyc3VmZml4PSIuJGN1cnJlbnQuJHJldmlzaW9uIjsKKwkgIG1ham9yPS4kY3VycmVudAorCSAgdmVyc3VmZml4PS4kY3VycmVudC4kcmV2aXNpb24KIAkgIDs7CiAKIAlmcmVlYnNkLWVsZikKLQkgIG1ham9yPSIuJGN1cnJlbnQiCi0JICB2ZXJzdWZmaXg9Ii4kY3VycmVudCIKKwkgIG1ham9yPS4kY3VycmVudAorCSAgdmVyc3VmZml4PS4kY3VycmVudAogCSAgOzsKIAogCWlyaXggfCBub25zdG9wdXgpCi0JICBpZiB0ZXN0ICJYJGx0X2lyaXhfaW5jcmVtZW50IiA9ICJYbm8iOyB0aGVuCisJICBpZiB0ZXN0IG5vID0gIiRsdF9pcml4X2luY3JlbWVudCI7IHRoZW4KIAkgICAgZnVuY19hcml0aCAkY3VycmVudCAtICRhZ2UKIAkgIGVsc2UKIAkgICAgZnVuY19hcml0aCAkY3VycmVudCAtICRhZ2UgKyAxCkBAIC03NDMwLDY5ICs4NzA2LDY5IEBACiAJICAgIG5vbnN0b3B1eCkgdmVyc3RyaW5nX3ByZWZpeD1ub25zdG9wdXggOzsKIAkgICAgKikgICAgICAgICB2ZXJzdHJpbmdfcHJlZml4PXNnaSA7OwogCSAgZXNhYwotCSAgdmVyc3RyaW5nPSIkdmVyc3RyaW5nX3ByZWZpeCRtYWpvci4kcmV2aXNpb24iCisJICB2ZXJzdHJpbmc9JHZlcnN0cmluZ19wcmVmaXgkbWFqb3IuJHJldmlzaW9uCiAKIAkgICMgQWRkIGluIGFsbCB0aGUgaW50ZXJmYWNlcyB0aGF0IHdlIGFyZSBjb21wYXRpYmxlIHdpdGguCiAJICBsb29wPSRyZXZpc2lvbgotCSAgd2hpbGUgdGVzdCAiJGxvb3AiIC1uZSAwOyBkbworCSAgd2hpbGUgdGVzdCAwIC1uZSAiJGxvb3AiOyBkbwogCSAgICBmdW5jX2FyaXRoICRyZXZpc2lvbiAtICRsb29wCiAJICAgIGlmYWNlPSRmdW5jX2FyaXRoX3Jlc3VsdAogCSAgICBmdW5jX2FyaXRoICRsb29wIC0gMQogCSAgICBsb29wPSRmdW5jX2FyaXRoX3Jlc3VsdAotCSAgICB2ZXJzdHJpbmc9IiR2ZXJzdHJpbmdfcHJlZml4JG1ham9yLiRpZmFjZTokdmVyc3RyaW5nIgorCSAgICB2ZXJzdHJpbmc9JHZlcnN0cmluZ19wcmVmaXgkbWFqb3IuJGlmYWNlOiR2ZXJzdHJpbmcKIAkgIGRvbmUKIAotCSAgIyBCZWZvcmUgdGhpcyBwb2ludCwgJG1ham9yIG11c3Qgbm90IGNvbnRhaW4gYC4nLgorCSAgIyBCZWZvcmUgdGhpcyBwb2ludCwgJG1ham9yIG11c3Qgbm90IGNvbnRhaW4gJy4nLgogCSAgbWFqb3I9LiRtYWpvcgotCSAgdmVyc3VmZml4PSIkbWFqb3IuJHJldmlzaW9uIgorCSAgdmVyc3VmZml4PSRtYWpvci4kcmV2aXNpb24KIAkgIDs7CiAKIAlsaW51eCkgIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCiAJICBmdW5jX2FyaXRoICRjdXJyZW50IC0gJGFnZQogCSAgbWFqb3I9LiRmdW5jX2FyaXRoX3Jlc3VsdAotCSAgdmVyc3VmZml4PSIkbWFqb3IuJGFnZS4kcmV2aXNpb24iCisJICB2ZXJzdWZmaXg9JG1ham9yLiRhZ2UuJHJldmlzaW9uCiAJICA7OwogCiAJb3NmKQogCSAgZnVuY19hcml0aCAkY3VycmVudCAtICRhZ2UKIAkgIG1ham9yPS4kZnVuY19hcml0aF9yZXN1bHQKLQkgIHZlcnN1ZmZpeD0iLiRjdXJyZW50LiRhZ2UuJHJldmlzaW9uIgotCSAgdmVyc3RyaW5nPSIkY3VycmVudC4kYWdlLiRyZXZpc2lvbiIKKwkgIHZlcnN1ZmZpeD0uJGN1cnJlbnQuJGFnZS4kcmV2aXNpb24KKwkgIHZlcnN0cmluZz0kY3VycmVudC4kYWdlLiRyZXZpc2lvbgogCiAJICAjIEFkZCBpbiBhbGwgdGhlIGludGVyZmFjZXMgdGhhdCB3ZSBhcmUgY29tcGF0aWJsZSB3aXRoLgogCSAgbG9vcD0kYWdlCi0JICB3aGlsZSB0ZXN0ICIkbG9vcCIgLW5lIDA7IGRvCisJICB3aGlsZSB0ZXN0IDAgLW5lICIkbG9vcCI7IGRvCiAJICAgIGZ1bmNfYXJpdGggJGN1cnJlbnQgLSAkbG9vcAogCSAgICBpZmFjZT0kZnVuY19hcml0aF9yZXN1bHQKIAkgICAgZnVuY19hcml0aCAkbG9vcCAtIDEKIAkgICAgbG9vcD0kZnVuY19hcml0aF9yZXN1bHQKLQkgICAgdmVyc3RyaW5nPSIkdmVyc3RyaW5nOiR7aWZhY2V9LjAiCisJICAgIHZlcnN0cmluZz0kdmVyc3RyaW5nOiRpZmFjZS4wCiAJICBkb25lCiAKIAkgICMgTWFrZSBleGVjdXRhYmxlcyBkZXBlbmQgb24gb3VyIGN1cnJlbnQgdmVyc2lvbi4KLQkgIGZ1bmNfYXBwZW5kIHZlcnN0cmluZyAiOiR7Y3VycmVudH0uMCIKKwkgIGZ1bmNfYXBwZW5kIHZlcnN0cmluZyAiOiRjdXJyZW50LjAiCiAJICA7OwogCiAJcW54KQotCSAgbWFqb3I9Ii4kY3VycmVudCIKLQkgIHZlcnN1ZmZpeD0iLiRjdXJyZW50IgorCSAgbWFqb3I9LiRjdXJyZW50CisJICB2ZXJzdWZmaXg9LiRjdXJyZW50CiAJICA7OwogCiAJc3Vub3MpCi0JICBtYWpvcj0iLiRjdXJyZW50IgotCSAgdmVyc3VmZml4PSIuJGN1cnJlbnQuJHJldmlzaW9uIgorCSAgbWFqb3I9LiRjdXJyZW50CisJICB2ZXJzdWZmaXg9LiRjdXJyZW50LiRyZXZpc2lvbgogCSAgOzsKIAogCXdpbmRvd3MpCiAJICAjIFVzZSAnLScgcmF0aGVyIHRoYW4gJy4nLCBzaW5jZSB3ZSBvbmx5IHdhbnQgb25lCi0JICAjIGV4dGVuc2lvbiBvbiBET1MgOC4zIGZpbGVzeXN0ZW1zLgorCSAgIyBleHRlbnNpb24gb24gRE9TIDguMyBmaWxlIHN5c3RlbXMuCiAJICBmdW5jX2FyaXRoICRjdXJyZW50IC0gJGFnZQogCSAgbWFqb3I9JGZ1bmNfYXJpdGhfcmVzdWx0Ci0JICB2ZXJzdWZmaXg9Ii0kbWFqb3IiCisJICB2ZXJzdWZmaXg9LSRtYWpvcgogCSAgOzsKIAogCSopCi0JICBmdW5jX2ZhdGFsX2NvbmZpZ3VyYXRpb24gInVua25vd24gbGlicmFyeSB2ZXJzaW9uIHR5cGUgXGAkdmVyc2lvbl90eXBlJyIKKwkgIGZ1bmNfZmF0YWxfY29uZmlndXJhdGlvbiAidW5rbm93biBsaWJyYXJ5IHZlcnNpb24gdHlwZSAnJHZlcnNpb25fdHlwZSciCiAJICA7OwogCWVzYWMKIApAQCAtNzUwNiw0MiArODc4Miw0NSBAQAogCSAgICB2ZXJzdHJpbmc9CiAJICAgIDs7CiAJICAqKQotCSAgICB2ZXJzdHJpbmc9IjAuMCIKKwkgICAgdmVyc3RyaW5nPTAuMAogCSAgICA7OwogCSAgZXNhYwotCSAgaWYgdGVzdCAiJG5lZWRfdmVyc2lvbiIgPSBubzsgdGhlbgorCSAgaWYgdGVzdCBubyA9ICIkbmVlZF92ZXJzaW9uIjsgdGhlbgogCSAgICB2ZXJzdWZmaXg9CiAJICBlbHNlCi0JICAgIHZlcnN1ZmZpeD0iLjAuMCIKKwkgICAgdmVyc3VmZml4PS4wLjAKIAkgIGZpCiAJZmkKIAogCSMgUmVtb3ZlIHZlcnNpb24gaW5mbyBmcm9tIG5hbWUgaWYgdmVyc2lvbmluZyBzaG91bGQgYmUgYXZvaWRlZAotCWlmIHRlc3QgIiRhdm9pZF92ZXJzaW9uIiA9IHllcyAmJiB0ZXN0ICIkbmVlZF92ZXJzaW9uIiA9IG5vOyB0aGVuCisJaWYgdGVzdCB5ZXMsbm8gPSAiJGF2b2lkX3ZlcnNpb24sJG5lZWRfdmVyc2lvbiI7IHRoZW4KIAkgIG1ham9yPQogCSAgdmVyc3VmZml4PQotCSAgdmVyc3RyaW5nPSIiCisJICB2ZXJzdHJpbmc9CiAJZmkKIAogCSMgQ2hlY2sgdG8gc2VlIGlmIHRoZSBhcmNoaXZlIHdpbGwgaGF2ZSB1bmRlZmluZWQgc3ltYm9scy4KLQlpZiB0ZXN0ICIkYWxsb3dfdW5kZWZpbmVkIiA9IHllczsgdGhlbgotCSAgaWYgdGVzdCAiJGFsbG93X3VuZGVmaW5lZF9mbGFnIiA9IHVuc3VwcG9ydGVkOyB0aGVuCi0JICAgIGZ1bmNfd2FybmluZyAidW5kZWZpbmVkIHN5bWJvbHMgbm90IGFsbG93ZWQgaW4gJGhvc3Qgc2hhcmVkIGxpYnJhcmllcyIKLQkgICAgYnVpbGRfbGlidG9vbF9saWJzPW5vCi0JICAgIGJ1aWxkX29sZF9saWJzPXllcworCWlmIHRlc3QgeWVzID0gIiRhbGxvd191bmRlZmluZWQiOyB0aGVuCisJICBpZiB0ZXN0IHVuc3VwcG9ydGVkID0gIiRhbGxvd191bmRlZmluZWRfZmxhZyI7IHRoZW4KKwkgICAgaWYgdGVzdCB5ZXMgPSAiJGJ1aWxkX29sZF9saWJzIjsgdGhlbgorCSAgICAgIGZ1bmNfd2FybmluZyAidW5kZWZpbmVkIHN5bWJvbHMgbm90IGFsbG93ZWQgaW4gJGhvc3Qgc2hhcmVkIGxpYnJhcmllczsgYnVpbGRpbmcgc3RhdGljIG9ubHkiCisJICAgICAgYnVpbGRfbGlidG9vbF9saWJzPW5vCisJICAgIGVsc2UKKwkgICAgICBmdW5jX2ZhdGFsX2Vycm9yICJjYW4ndCBidWlsZCAkaG9zdCBzaGFyZWQgbGlicmFyeSB1bmxlc3MgLW5vLXVuZGVmaW5lZCBpcyBzcGVjaWZpZWQiCisJICAgIGZpCiAJICBmaQogCWVsc2UKIAkgICMgRG9uJ3QgYWxsb3cgdW5kZWZpbmVkIHN5bWJvbHMuCi0JICBhbGxvd191bmRlZmluZWRfZmxhZz0iJG5vX3VuZGVmaW5lZF9mbGFnIgorCSAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JG5vX3VuZGVmaW5lZF9mbGFnCiAJZmkKIAogICAgICAgZmkKIAotICAgICAgZnVuY19nZW5lcmF0ZV9kbHN5bXMgIiRsaWJuYW1lIiAiJGxpYm5hbWUiICJ5ZXMiCisgICAgICBmdW5jX2dlbmVyYXRlX2Rsc3ltcyAiJGxpYm5hbWUiICIkbGlibmFtZSIgOgogICAgICAgZnVuY19hcHBlbmQgbGlib2JqcyAiICRzeW1maWxlb2JqIgotICAgICAgdGVzdCAiWCRsaWJvYmpzIiA9ICJYICIgJiYgbGlib2Jqcz0KKyAgICAgIHRlc3QgIiAiID0gIiRsaWJvYmpzIiAmJiBsaWJvYmpzPQogCi0gICAgICBpZiB0ZXN0ICIkb3B0X21vZGUiICE9IHJlbGluazsgdGhlbgorICAgICAgaWYgdGVzdCByZWxpbmsgIT0gIiRvcHRfbW9kZSI7IHRoZW4KIAkjIFJlbW92ZSBvdXIgb3V0cHV0cywgYnV0IGRvbid0IHJlbW92ZSBvYmplY3QgZmlsZXMgc2luY2UgdGhleQogCSMgbWF5IGhhdmUgYmVlbiBjcmVhdGVkIHdoZW4gY29tcGlsaW5nIFBJQyBvYmplY3RzLgogCXJlbW92ZWxpc3Q9CkBAIC03NTUwLDggKzg4MjksOCBAQAogCSAgY2FzZSAkcCBpbgogCSAgICAqLiRvYmpleHQgfCAqLmdjbm8pCiAJICAgICAgIDs7Ci0JICAgICRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lIHwgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuKiB8ICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0ke3JlbGVhc2V9LiopCi0JICAgICAgIGlmIHRlc3QgIlgkcHJlY2lvdXNfZmlsZXNfcmVnZXgiICE9ICJYIjsgdGhlbgorCSAgICAkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZSB8ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLiogfCAkb3V0cHV0X29iamRpci8kbGlibmFtZSRyZWxlYXNlLiopCisJICAgICAgIGlmIHRlc3QgLW4gIiRwcmVjaW91c19maWxlc19yZWdleCI7IHRoZW4KIAkJIGlmICRFQ0hPICIkcCIgfCAkRUdSRVAgLWUgIiRwcmVjaW91c19maWxlc19yZWdleCIgPi9kZXYvbnVsbCAyPiYxCiAJCSB0aGVuCiAJCSAgIGNvbnRpbnVlCkBAIC03NTY3LDExICs4ODQ2LDExIEBACiAgICAgICBmaQogCiAgICAgICAjIE5vdyBzZXQgdGhlIHZhcmlhYmxlcyBmb3IgYnVpbGRpbmcgb2xkIGxpYnJhcmllcy4KLSAgICAgIGlmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXMgJiYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgIT0gY29udmVuaWVuY2UgOyB0aGVuCisgICAgICBpZiB0ZXN0IHllcyA9ICIkYnVpbGRfb2xkX2xpYnMiICYmIHRlc3QgY29udmVuaWVuY2UgIT0gIiRidWlsZF9saWJ0b29sX2xpYnMiOyB0aGVuCiAJZnVuY19hcHBlbmQgb2xkbGlicyAiICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLiRsaWJleHQiCiAKIAkjIFRyYW5zZm9ybSAubG8gZmlsZXMgdG8gLm8gZmlsZXMuCi0Jb2xkb2Jqcz0iJG9ianMgImAkRUNITyAiJGxpYm9ianMiIHwgJFNQMk5MIHwgJFNFRCAiL1wuJHtsaWJleHR9JC9kOyAkbG8ybyIgfCAkTkwyU1BgCisJb2xkb2Jqcz0iJG9ianMgImAkRUNITyAiJGxpYm9ianMiIHwgJFNQMk5MIHwgJFNFRCAiL1wuJGxpYmV4dCQvZDsgJGxvMm8iIHwgJE5MMlNQYAogICAgICAgZmkKIAogICAgICAgIyBFbGltaW5hdGUgYWxsIHRlbXBvcmFyeSBkaXJlY3Rvcmllcy4KQEAgLTc1OTIsMTMgKzg4NzEsMTMgQEAKIAkgICopIGZ1bmNfYXBwZW5kIGZpbmFsaXplX3JwYXRoICIgJGxpYmRpciIgOzsKIAkgIGVzYWMKIAlkb25lCi0JaWYgdGVzdCAiJGhhcmRjb2RlX2ludG9fbGlicyIgIT0geWVzIHx8IHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXM7IHRoZW4KKwlpZiB0ZXN0IHllcyAhPSAiJGhhcmRjb2RlX2ludG9fbGlicyIgfHwgdGVzdCB5ZXMgPSAiJGJ1aWxkX29sZF9saWJzIjsgdGhlbgogCSAgZGVwZW5kZW5jeV9saWJzPSIkdGVtcF94cnBhdGggJGRlcGVuZGVuY3lfbGlicyIKIAlmaQogICAgICAgZmkKIAogICAgICAgIyBNYWtlIHN1cmUgZGxmaWxlcyBjb250YWlucyBvbmx5IHVuaXF1ZSBmaWxlcyB0aGF0IHdvbid0IGJlIGRscHJlb3BlbmVkCi0gICAgICBvbGRfZGxmaWxlcz0iJGRsZmlsZXMiCisgICAgICBvbGRfZGxmaWxlcz0kZGxmaWxlcwogICAgICAgZGxmaWxlcz0KICAgICAgIGZvciBsaWIgaW4gJG9sZF9kbGZpbGVzOyBkbwogCWNhc2UgIiAkZGxwcmVmaWxlcyAkZGxmaWxlcyAiIGluCkBAIC03NjA4LDcgKzg4ODcsNyBAQAogICAgICAgZG9uZQogCiAgICAgICAjIE1ha2Ugc3VyZSBkbHByZWZpbGVzIGNvbnRhaW5zIG9ubHkgdW5pcXVlIGZpbGVzCi0gICAgICBvbGRfZGxwcmVmaWxlcz0iJGRscHJlZmlsZXMiCisgICAgICBvbGRfZGxwcmVmaWxlcz0kZGxwcmVmaWxlcwogICAgICAgZGxwcmVmaWxlcz0KICAgICAgIGZvciBsaWIgaW4gJG9sZF9kbHByZWZpbGVzOyBkbwogCWNhc2UgIiRkbHByZWZpbGVzICIgaW4KQEAgLTc2MTcsNyArODg5Niw3IEBACiAJZXNhYwogICAgICAgZG9uZQogCi0gICAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllczsgdGhlbgorICAgICAgaWYgdGVzdCB5ZXMgPSAiJGJ1aWxkX2xpYnRvb2xfbGlicyI7IHRoZW4KIAlpZiB0ZXN0IC1uICIkcnBhdGgiOyB0aGVuCiAJICBjYXNlICRob3N0IGluCiAJICAqLSotY3lnd2luKiB8ICotKi1taW5ndyogfCAqLSotcHczMiogfCAqLSotb3MyKiB8ICotKi1iZW9zKiB8ICotY2VnY2MqIHwgKi0qLWhhaWt1KikKQEAgLTc2NDEsNyArODkyMCw3IEBACiAJICAgIDs7CiAJICAqKQogCSAgICAjIEFkZCBsaWJjIHRvIGRlcGxpYnMgb24gYWxsIG90aGVyIHN5c3RlbXMgaWYgbmVjZXNzYXJ5LgotCSAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9uZWVkX2xjIiA9ICJ5ZXMiOyB0aGVuCisJICAgIGlmIHRlc3QgeWVzID0gIiRidWlsZF9saWJ0b29sX25lZWRfbGMiOyB0aGVuCiAJICAgICAgZnVuY19hcHBlbmQgZGVwbGlicyAiIC1sYyIKIAkgICAgZmkKIAkgICAgOzsKQEAgLTc2NTcsOSArODkzNiw5IEBACiAJIyBJJ20gbm90IHN1cmUgaWYgSSdtIHRyZWF0aW5nIHRoZSByZWxlYXNlIGNvcnJlY3RseS4gIEkgdGhpbmsKIAkjIHJlbGVhc2Ugc2hvdWxkIHNob3cgdXAgaW4gdGhlIC1sIChpZSAtbGdtcDUpIHNvIHdlIGRvbid0IHdhbnQgdG8KIAkjIGFkZCBpdCBpbiB0d2ljZS4gIElzIHRoYXQgY29ycmVjdD8KLQlyZWxlYXNlPSIiCi0JdmVyc3VmZml4PSIiCi0JbWFqb3I9IiIKKwlyZWxlYXNlPQorCXZlcnN1ZmZpeD0KKwltYWpvcj0KIAluZXdkZXBsaWJzPQogCWRyb3BwZWRkZXBzPW5vCiAJY2FzZSAkZGVwbGlic19jaGVja19tZXRob2QgaW4KQEAgLTc2ODgsMjAgKzg5NjcsMjAgQEAKIAkgICAgICAtbCopCiAJCWZ1bmNfc3RyaXBuYW1lIC1sICcnICIkaSIKIAkJbmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0Ci0JCWlmIHRlc3QgIlgkYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzIiA9ICJYeWVzIiA7IHRoZW4KKwkJaWYgdGVzdCB5ZXMgPSAiJGFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcyI7IHRoZW4KIAkJICBjYXNlICIgJHByZWRlcHMgJHBvc3RkZXBzICIgaW4KIAkJICAqIiAkaSAiKikKIAkJICAgIGZ1bmNfYXBwZW5kIG5ld2RlcGxpYnMgIiAkaSIKLQkJICAgIGk9IiIKKwkJICAgIGk9CiAJCSAgICA7OwogCQkgIGVzYWMKIAkJZmkKLQkJaWYgdGVzdCAtbiAiJGkiIDsgdGhlbgorCQlpZiB0ZXN0IC1uICIkaSI7IHRoZW4KIAkJICBsaWJuYW1lPWBldmFsICJcXCRFQ0hPIFwiJGxpYm5hbWVfc3BlY1wiImAKIAkJICBkZXBsaWJfbWF0Y2hlcz1gZXZhbCAiXFwkRUNITyBcIiRsaWJyYXJ5X25hbWVzX3NwZWNcIiJgCiAJCSAgc2V0IGR1bW15ICRkZXBsaWJfbWF0Y2hlczsgc2hpZnQKIAkJICBkZXBsaWJfbWF0Y2g9JDEKLQkJICBpZiB0ZXN0IGBleHByICIkbGRkX291dHB1dCIgOiAiLiokZGVwbGliX21hdGNoImAgLW5lIDAgOyB0aGVuCisJCSAgaWYgdGVzdCBgZXhwciAiJGxkZF9vdXRwdXQiIDogIi4qJGRlcGxpYl9tYXRjaCJgIC1uZSAwOyB0aGVuCiAJCSAgICBmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGkiCiAJCSAgZWxzZQogCQkgICAgZHJvcHBlZGRlcHM9eWVzCkBAIC03NzMxLDIwICs5MDEwLDIwIEBACiAJCSRvcHRfZHJ5X3J1biB8fCAkUk0gY29uZnRlc3QKIAkJaWYgJExUQ0MgJExUQ0ZMQUdTIC1vIGNvbmZ0ZXN0IGNvbmZ0ZXN0LmMgJGk7IHRoZW4KIAkJICBsZGRfb3V0cHV0PWBsZGQgY29uZnRlc3RgCi0JCSAgaWYgdGVzdCAiWCRhbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXMiID0gIlh5ZXMiIDsgdGhlbgorCQkgIGlmIHRlc3QgeWVzID0gIiRhbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXMiOyB0aGVuCiAJCSAgICBjYXNlICIgJHByZWRlcHMgJHBvc3RkZXBzICIgaW4KIAkJICAgICoiICRpICIqKQogCQkgICAgICBmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGkiCi0JCSAgICAgIGk9IiIKKwkJICAgICAgaT0KIAkJICAgICAgOzsKIAkJICAgIGVzYWMKIAkJICBmaQotCQkgIGlmIHRlc3QgLW4gIiRpIiA7IHRoZW4KKwkJICBpZiB0ZXN0IC1uICIkaSI7IHRoZW4KIAkJICAgIGxpYm5hbWU9YGV2YWwgIlxcJEVDSE8gXCIkbGlibmFtZV9zcGVjXCIiYAogCQkgICAgZGVwbGliX21hdGNoZXM9YGV2YWwgIlxcJEVDSE8gXCIkbGlicmFyeV9uYW1lc19zcGVjXCIiYAogCQkgICAgc2V0IGR1bW15ICRkZXBsaWJfbWF0Y2hlczsgc2hpZnQKIAkJICAgIGRlcGxpYl9tYXRjaD0kMQotCQkgICAgaWYgdGVzdCBgZXhwciAiJGxkZF9vdXRwdXQiIDogIi4qJGRlcGxpYl9tYXRjaCJgIC1uZSAwIDsgdGhlbgorCQkgICAgaWYgdGVzdCBgZXhwciAiJGxkZF9vdXRwdXQiIDogIi4qJGRlcGxpYl9tYXRjaCJgIC1uZSAwOyB0aGVuCiAJCSAgICAgIGZ1bmNfYXBwZW5kIG5ld2RlcGxpYnMgIiAkaSIKIAkJICAgIGVsc2UKIAkJICAgICAgZHJvcHBlZGRlcHM9eWVzCkBAIC03NzgxLDI0ICs5MDYwLDI0IEBACiAJICAgIC1sKikKIAkgICAgICBmdW5jX3N0cmlwbmFtZSAtbCAnJyAiJGFfZGVwbGliIgogCSAgICAgIG5hbWU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAotCSAgICAgIGlmIHRlc3QgIlgkYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzIiA9ICJYeWVzIiA7IHRoZW4KKwkgICAgICBpZiB0ZXN0IHllcyA9ICIkYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzIjsgdGhlbgogCQljYXNlICIgJHByZWRlcHMgJHBvc3RkZXBzICIgaW4KIAkJKiIgJGFfZGVwbGliICIqKQogCQkgIGZ1bmNfYXBwZW5kIG5ld2RlcGxpYnMgIiAkYV9kZXBsaWIiCi0JCSAgYV9kZXBsaWI9IiIKKwkJICBhX2RlcGxpYj0KIAkJICA7OwogCQllc2FjCiAJICAgICAgZmkKLQkgICAgICBpZiB0ZXN0IC1uICIkYV9kZXBsaWIiIDsgdGhlbgorCSAgICAgIGlmIHRlc3QgLW4gIiRhX2RlcGxpYiI7IHRoZW4KIAkJbGlibmFtZT1gZXZhbCAiXFwkRUNITyBcIiRsaWJuYW1lX3NwZWNcIiJgCiAJCWlmIHRlc3QgLW4gIiRmaWxlX21hZ2ljX2dsb2IiOyB0aGVuCiAJCSAgbGlibmFtZWdsb2I9YGZ1bmNfZWNob19hbGwgIiRsaWJuYW1lIiB8ICRTRUQgLWUgJGZpbGVfbWFnaWNfZ2xvYmAKIAkJZWxzZQogCQkgIGxpYm5hbWVnbG9iPSRsaWJuYW1lCiAJCWZpCi0JCXRlc3QgIiR3YW50X25vY2FzZWdsb2IiID0geWVzICYmIG5vY2FzZWdsb2I9YHNob3B0IC1wIG5vY2FzZWdsb2JgCisJCXRlc3QgeWVzID0gIiR3YW50X25vY2FzZWdsb2IiICYmIG5vY2FzZWdsb2I9YHNob3B0IC1wIG5vY2FzZWdsb2JgCiAJCWZvciBpIGluICRsaWJfc2VhcmNoX3BhdGggJHN5c19saWJfc2VhcmNoX3BhdGggJHNobGliX3NlYXJjaF9wYXRoOyBkbwotCQkgIGlmIHRlc3QgIiR3YW50X25vY2FzZWdsb2IiID0geWVzOyB0aGVuCisJCSAgaWYgdGVzdCB5ZXMgPSAiJHdhbnRfbm9jYXNlZ2xvYiI7IHRoZW4KIAkJICAgIHNob3B0IC1zIG5vY2FzZWdsb2IKIAkJICAgIHBvdGVudGlhbF9saWJzPWBscyAkaS8kbGlibmFtZWdsb2JbLi1dKiAyPi9kZXYvbnVsbGAKIAkJICAgICRub2Nhc2VnbG9iCkBAIC03ODE2LDI1ICs5MDk1LDI1IEBACiAJCSAgICAgICMgV2UgbWlnaHQgc3RpbGwgZW50ZXIgYW4gZW5kbGVzcyBsb29wLCBzaW5jZSBhIGxpbmsKIAkJICAgICAgIyBsb29wIGNhbiBiZSBjbG9zZWQgd2hpbGUgd2UgZm9sbG93IGxpbmtzLAogCQkgICAgICAjIGJ1dCBzbyB3aGF0PwotCQkgICAgICBwb3RsaWI9IiRwb3RlbnRfbGliIgorCQkgICAgICBwb3RsaWI9JHBvdGVudF9saWIKIAkJICAgICAgd2hpbGUgdGVzdCAtaCAiJHBvdGxpYiIgMj4vZGV2L251bGw7IGRvCi0JCQlwb3RsaWJsaW5rPWBscyAtbGQgJHBvdGxpYiB8ICR7U0VEfSAncy8uKiAtPiAvLydgCisJCQlwb3RsaWJsaW5rPWBscyAtbGQgJHBvdGxpYiB8ICRTRUQgJ3MvLiogLT4gLy8nYAogCQkJY2FzZSAkcG90bGlibGluayBpbgotCQkJW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSBwb3RsaWI9IiRwb3RsaWJsaW5rIjs7Ci0JCQkqKSBwb3RsaWI9YCRFQ0hPICIkcG90bGliIiB8ICRTRUQgJ3MsW14vXSokLCwnYCIkcG90bGlibGluayI7OworCQkJW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSBwb3RsaWI9JHBvdGxpYmxpbms7OworCQkJKikgcG90bGliPWAkRUNITyAiJHBvdGxpYiIgfCAkU0VEICdzfFteL10qJHx8J2AiJHBvdGxpYmxpbmsiOzsKIAkJCWVzYWMKIAkJICAgICAgZG9uZQogCQkgICAgICBpZiBldmFsICRmaWxlX21hZ2ljX2NtZCBcIlwkcG90bGliXCIgMj4vZGV2L251bGwgfAogCQkJICRTRUQgLWUgMTBxIHwKIAkJCSAkRUdSRVAgIiRmaWxlX21hZ2ljX3JlZ2V4IiA+IC9kZXYvbnVsbDsgdGhlbgogCQkJZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRhX2RlcGxpYiIKLQkJCWFfZGVwbGliPSIiCisJCQlhX2RlcGxpYj0KIAkJCWJyZWFrIDIKIAkJICAgICAgZmkKIAkJICBkb25lCiAJCWRvbmUKIAkgICAgICBmaQotCSAgICAgIGlmIHRlc3QgLW4gIiRhX2RlcGxpYiIgOyB0aGVuCisJICAgICAgaWYgdGVzdCAtbiAiJGFfZGVwbGliIjsgdGhlbgogCQlkcm9wcGVkZGVwcz15ZXMKIAkJZWNobwogCQkkRUNITyAiKioqIFdhcm5pbmc6IGxpbmtlciBwYXRoIGRvZXMgbm90IGhhdmUgcmVhbCBmaWxlIGZvciBsaWJyYXJ5ICRhX2RlcGxpYi4iCkBAIC03ODQyLDcgKzkxMjEsNyBAQAogCQllY2hvICIqKiogeW91IGxpbmsgdG8gdGhpcyBsaWJyYXJ5LiAgQnV0IEkgY2FuIG9ubHkgZG8gdGhpcyBpZiB5b3UgaGF2ZSBhIgogCQllY2hvICIqKiogc2hhcmVkIHZlcnNpb24gb2YgdGhlIGxpYnJhcnksIHdoaWNoIHlvdSBkbyBub3QgYXBwZWFyIHRvIGhhdmUiCiAJCWVjaG8gIioqKiBiZWNhdXNlIEkgZGlkIGNoZWNrIHRoZSBsaW5rZXIgcGF0aCBsb29raW5nIGZvciBhIGZpbGUgc3RhcnRpbmciCi0JCWlmIHRlc3QgLXogIiRwb3RsaWIiIDsgdGhlbgorCQlpZiB0ZXN0IC16ICIkcG90bGliIjsgdGhlbgogCQkgICRFQ0hPICIqKiogd2l0aCAkbGlibmFtZSBidXQgbm8gY2FuZGlkYXRlcyB3ZXJlIGZvdW5kLiAoLi4uZm9yIGZpbGUgbWFnaWMgdGVzdCkiCiAJCWVsc2UKIAkJICAkRUNITyAiKioqIHdpdGggJGxpYm5hbWUgYW5kIG5vbmUgb2YgdGhlIGNhbmRpZGF0ZXMgcGFzc2VkIGEgZmlsZSBmb3JtYXQgdGVzdCIKQEAgLTc4NjUsMzAgKzkxNDQsMzAgQEAKIAkgICAgLWwqKQogCSAgICAgIGZ1bmNfc3RyaXBuYW1lIC1sICcnICIkYV9kZXBsaWIiCiAJICAgICAgbmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0Ci0JICAgICAgaWYgdGVzdCAiWCRhbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXMiID0gIlh5ZXMiIDsgdGhlbgorCSAgICAgIGlmIHRlc3QgeWVzID0gIiRhbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXMiOyB0aGVuCiAJCWNhc2UgIiAkcHJlZGVwcyAkcG9zdGRlcHMgIiBpbgogCQkqIiAkYV9kZXBsaWIgIiopCiAJCSAgZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRhX2RlcGxpYiIKLQkJICBhX2RlcGxpYj0iIgorCQkgIGFfZGVwbGliPQogCQkgIDs7CiAJCWVzYWMKIAkgICAgICBmaQotCSAgICAgIGlmIHRlc3QgLW4gIiRhX2RlcGxpYiIgOyB0aGVuCisJICAgICAgaWYgdGVzdCAtbiAiJGFfZGVwbGliIjsgdGhlbgogCQlsaWJuYW1lPWBldmFsICJcXCRFQ0hPIFwiJGxpYm5hbWVfc3BlY1wiImAKIAkJZm9yIGkgaW4gJGxpYl9zZWFyY2hfcGF0aCAkc3lzX2xpYl9zZWFyY2hfcGF0aCAkc2hsaWJfc2VhcmNoX3BhdGg7IGRvCiAJCSAgcG90ZW50aWFsX2xpYnM9YGxzICRpLyRsaWJuYW1lWy4tXSogMj4vZGV2L251bGxgCiAJCSAgZm9yIHBvdGVudF9saWIgaW4gJHBvdGVudGlhbF9saWJzOyBkbwotCQkgICAgcG90bGliPSIkcG90ZW50X2xpYiIgIyBzZWUgc3ltbGluay1jaGVjayBhYm92ZSBpbiBmaWxlX21hZ2ljIHRlc3QKKwkJICAgIHBvdGxpYj0kcG90ZW50X2xpYiAjIHNlZSBzeW1saW5rLWNoZWNrIGFib3ZlIGluIGZpbGVfbWFnaWMgdGVzdAogCQkgICAgaWYgZXZhbCAiXCRFQ0hPIFwiJHBvdGVudF9saWJcIiIgMj4vZGV2L251bGwgfCAkU0VEIDEwcSB8IFwKIAkJICAgICAgICRFR1JFUCAiJG1hdGNoX3BhdHRlcm5fcmVnZXgiID4gL2Rldi9udWxsOyB0aGVuCiAJCSAgICAgIGZ1bmNfYXBwZW5kIG5ld2RlcGxpYnMgIiAkYV9kZXBsaWIiCi0JCSAgICAgIGFfZGVwbGliPSIiCisJCSAgICAgIGFfZGVwbGliPQogCQkgICAgICBicmVhayAyCiAJCSAgICBmaQogCQkgIGRvbmUKIAkJZG9uZQogCSAgICAgIGZpCi0JICAgICAgaWYgdGVzdCAtbiAiJGFfZGVwbGliIiA7IHRoZW4KKwkgICAgICBpZiB0ZXN0IC1uICIkYV9kZXBsaWIiOyB0aGVuCiAJCWRyb3BwZWRkZXBzPXllcwogCQllY2hvCiAJCSRFQ0hPICIqKiogV2FybmluZzogbGlua2VyIHBhdGggZG9lcyBub3QgaGF2ZSByZWFsIGZpbGUgZm9yIGxpYnJhcnkgJGFfZGVwbGliLiIKQEAgLTc4OTYsNyArOTE3NSw3IEBACiAJCWVjaG8gIioqKiB5b3UgbGluayB0byB0aGlzIGxpYnJhcnkuICBCdXQgSSBjYW4gb25seSBkbyB0aGlzIGlmIHlvdSBoYXZlIGEiCiAJCWVjaG8gIioqKiBzaGFyZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgd2hpY2ggeW91IGRvIG5vdCBhcHBlYXIgdG8gaGF2ZSIKIAkJZWNobyAiKioqIGJlY2F1c2UgSSBkaWQgY2hlY2sgdGhlIGxpbmtlciBwYXRoIGxvb2tpbmcgZm9yIGEgZmlsZSBzdGFydGluZyIKLQkJaWYgdGVzdCAteiAiJHBvdGxpYiIgOyB0aGVuCisJCWlmIHRlc3QgLXogIiRwb3RsaWIiOyB0aGVuCiAJCSAgJEVDSE8gIioqKiB3aXRoICRsaWJuYW1lIGJ1dCBubyBjYW5kaWRhdGVzIHdlcmUgZm91bmQuICguLi5mb3IgcmVnZXggcGF0dGVybiB0ZXN0KSIKIAkJZWxzZQogCQkgICRFQ0hPICIqKiogd2l0aCAkbGlibmFtZSBhbmQgbm9uZSBvZiB0aGUgY2FuZGlkYXRlcyBwYXNzZWQgYSBmaWxlIGZvcm1hdCB0ZXN0IgpAQCAtNzkxMiwxOCArOTE5MSwxOCBAQAogCSAgZG9uZSAjIEdvbmUgdGhyb3VnaCBhbGwgZGVwbGlicy4KIAkgIDs7CiAJbm9uZSB8IHVua25vd24gfCAqKQotCSAgbmV3ZGVwbGlicz0iIgorCSAgbmV3ZGVwbGlicz0KIAkgIHRtcF9kZXBsaWJzPWAkRUNITyAiICRkZXBsaWJzIiB8ICRTRUQgJ3MvIC1sYyQvLzsgcy8gLVtMUl1bXiBdKi8vZydgCi0JICBpZiB0ZXN0ICJYJGFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcyIgPSAiWHllcyIgOyB0aGVuCi0JICAgIGZvciBpIGluICRwcmVkZXBzICRwb3N0ZGVwcyA7IGRvCisJICBpZiB0ZXN0IHllcyA9ICIkYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzIjsgdGhlbgorCSAgICBmb3IgaSBpbiAkcHJlZGVwcyAkcG9zdGRlcHM7IGRvCiAJICAgICAgIyBjYW4ndCB1c2UgWHNlZCBiZWxvdywgYmVjYXVzZSAkaSBtaWdodCBjb250YWluICcvJwotCSAgICAgIHRtcF9kZXBsaWJzPWAkRUNITyAiICR0bXBfZGVwbGlicyIgfCAkU0VEICJzLCRpLCwiYAorCSAgICAgIHRtcF9kZXBsaWJzPWAkRUNITyAiICR0bXBfZGVwbGlicyIgfCAkU0VEICJzfCRpfHwiYAogCSAgICBkb25lCiAJICBmaQogCSAgY2FzZSAkdG1wX2RlcGxpYnMgaW4KIAkgICpbIVwJXCBdKikKIAkgICAgZWNobwotCSAgICBpZiB0ZXN0ICJYJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiA9ICJYbm9uZSI7IHRoZW4KKwkgICAgaWYgdGVzdCBub25lID0gIiRkZXBsaWJzX2NoZWNrX21ldGhvZCI7IHRoZW4KIAkgICAgICBlY2hvICIqKiogV2FybmluZzogaW50ZXItbGlicmFyeSBkZXBlbmRlbmNpZXMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBwbGF0Zm9ybS4iCiAJICAgIGVsc2UKIAkgICAgICBlY2hvICIqKiogV2FybmluZzogaW50ZXItbGlicmFyeSBkZXBlbmRlbmNpZXMgYXJlIG5vdCBrbm93biB0byBiZSBzdXBwb3J0ZWQuIgpAQCAtNzk0Nyw4ICs5MjI2LDggQEAKIAkgIDs7CiAJZXNhYwogCi0JaWYgdGVzdCAiJGRyb3BwZWRkZXBzIiA9IHllczsgdGhlbgotCSAgaWYgdGVzdCAiJG1vZHVsZSIgPSB5ZXM7IHRoZW4KKwlpZiB0ZXN0IHllcyA9ICIkZHJvcHBlZGRlcHMiOyB0aGVuCisJICBpZiB0ZXN0IHllcyA9ICIkbW9kdWxlIjsgdGhlbgogCSAgICBlY2hvCiAJICAgIGVjaG8gIioqKiBXYXJuaW5nOiBsaWJ0b29sIGNvdWxkIG5vdCBzYXRpc2Z5IGFsbCBkZWNsYXJlZCBpbnRlci1saWJyYXJ5IgogCSAgICAkRUNITyAiKioqIGRlcGVuZGVuY2llcyBvZiBtb2R1bGUgJGxpYm5hbWUuICBUaGVyZWZvcmUsIGxpYnRvb2wgd2lsbCBjcmVhdGUiCkBAIC03OTU3LDEyICs5MjM2LDEyIEBACiAJICAgIGlmIHRlc3QgLXogIiRnbG9iYWxfc3ltYm9sX3BpcGUiOyB0aGVuCiAJICAgICAgZWNobwogCSAgICAgIGVjaG8gIioqKiBIb3dldmVyLCB0aGlzIHdvdWxkIG9ubHkgd29yayBpZiBsaWJ0b29sIHdhcyBhYmxlIHRvIGV4dHJhY3Qgc3ltYm9sIgotCSAgICAgIGVjaG8gIioqKiBsaXN0cyBmcm9tIGEgcHJvZ3JhbSwgdXNpbmcgXGBubScgb3IgZXF1aXZhbGVudCwgYnV0IGxpYnRvb2wgY291bGQiCisJICAgICAgZWNobyAiKioqIGxpc3RzIGZyb20gYSBwcm9ncmFtLCB1c2luZyAnbm0nIG9yIGVxdWl2YWxlbnQsIGJ1dCBsaWJ0b29sIGNvdWxkIgogCSAgICAgIGVjaG8gIioqKiBub3QgZmluZCBzdWNoIGEgcHJvZ3JhbS4gIFNvLCB0aGlzIG1vZHVsZSBpcyBwcm9iYWJseSB1c2VsZXNzLiIKLQkgICAgICBlY2hvICIqKiogXGBubScgZnJvbSBHTlUgYmludXRpbHMgYW5kIGEgZnVsbCByZWJ1aWxkIG1heSBoZWxwLiIKKwkgICAgICBlY2hvICIqKiogJ25tJyBmcm9tIEdOVSBiaW51dGlscyBhbmQgYSBmdWxsIHJlYnVpbGQgbWF5IGhlbHAuIgogCSAgICBmaQotCSAgICBpZiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0gbm87IHRoZW4KLQkgICAgICBvbGRsaWJzPSIkb3V0cHV0X29iamRpci8kbGlibmFtZS4kbGliZXh0IgorCSAgICBpZiB0ZXN0IG5vID0gIiRidWlsZF9vbGRfbGlicyI7IHRoZW4KKwkgICAgICBvbGRsaWJzPSRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLiRsaWJleHQKIAkgICAgICBidWlsZF9saWJ0b29sX2xpYnM9bW9kdWxlCiAJICAgICAgYnVpbGRfb2xkX2xpYnM9eWVzCiAJICAgIGVsc2UKQEAgLTc5NzMsMTQgKzkyNTIsMTQgQEAKIAkgICAgZWNobyAiKioqIGF1dG9tYXRpY2FsbHkgYWRkZWQgd2hlbmV2ZXIgYSBwcm9ncmFtIGlzIGxpbmtlZCB3aXRoIHRoaXMgbGlicmFyeSIKIAkgICAgZWNobyAiKioqIG9yIGlzIGRlY2xhcmVkIHRvIC1kbG9wZW4gaXQuIgogCi0JICAgIGlmIHRlc3QgIiRhbGxvd191bmRlZmluZWQiID0gbm87IHRoZW4KKwkgICAgaWYgdGVzdCBubyA9ICIkYWxsb3dfdW5kZWZpbmVkIjsgdGhlbgogCSAgICAgIGVjaG8KIAkgICAgICBlY2hvICIqKiogU2luY2UgdGhpcyBsaWJyYXJ5IG11c3Qgbm90IGNvbnRhaW4gdW5kZWZpbmVkIHN5bWJvbHMsIgogCSAgICAgIGVjaG8gIioqKiBiZWNhdXNlIGVpdGhlciB0aGUgcGxhdGZvcm0gZG9lcyBub3Qgc3VwcG9ydCB0aGVtIG9yIgogCSAgICAgIGVjaG8gIioqKiBpdCB3YXMgZXhwbGljaXRseSByZXF1ZXN0ZWQgd2l0aCAtbm8tdW5kZWZpbmVkLCIKIAkgICAgICBlY2hvICIqKiogbGlidG9vbCB3aWxsIG9ubHkgY3JlYXRlIGEgc3RhdGljIHZlcnNpb24gb2YgaXQuIgotCSAgICAgIGlmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSBubzsgdGhlbgotCQlvbGRsaWJzPSIkb3V0cHV0X29iamRpci8kbGlibmFtZS4kbGliZXh0IgorCSAgICAgIGlmIHRlc3Qgbm8gPSAiJGJ1aWxkX29sZF9saWJzIjsgdGhlbgorCQlvbGRsaWJzPSRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLiRsaWJleHQKIAkJYnVpbGRfbGlidG9vbF9saWJzPW1vZHVsZQogCQlidWlsZF9vbGRfbGlicz15ZXMKIAkgICAgICBlbHNlCkBAIC04MDI2LDcgKzkzMDUsNyBAQAogCSopIGZ1bmNfYXBwZW5kIG5ld19saWJzICIgJGRlcGxpYiIgOzsKIAllc2FjCiAgICAgICBkb25lCi0gICAgICBkZXBsaWJzPSIkbmV3X2xpYnMiCisgICAgICBkZXBsaWJzPSRuZXdfbGlicwogCiAgICAgICAjIEFsbCB0aGUgbGlicmFyeS1zcGVjaWZpYyB2YXJpYWJsZXMgKGluc3RhbGxfbGliZGlyIGlzIHNldCBhYm92ZSkuCiAgICAgICBsaWJyYXJ5X25hbWVzPQpAQCAtODAzNCwyNSArOTMxMywyNSBAQAogICAgICAgZGxuYW1lPQogCiAgICAgICAjIFRlc3QgYWdhaW4sIHdlIG1heSBoYXZlIGRlY2lkZWQgbm90IHRvIGJ1aWxkIGl0IGFueSBtb3JlCi0gICAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllczsgdGhlbgotCSMgUmVtb3ZlICR7d2x9IGluc3RhbmNlcyB3aGVuIGxpbmtpbmcgd2l0aCBsZC4KKyAgICAgIGlmIHRlc3QgeWVzID0gIiRidWlsZF9saWJ0b29sX2xpYnMiOyB0aGVuCisJIyBSZW1vdmUgJHdsIGluc3RhbmNlcyB3aGVuIGxpbmtpbmcgd2l0aCBsZC4KIAkjIEZJWE1FOiBzaG91bGQgdGVzdCB0aGUgcmlnaHQgX2NtZHMgdmFyaWFibGUuCiAJY2FzZSAkYXJjaGl2ZV9jbWRzIGluCiAJICAqXCRMRFwgKikgd2w9IDs7CiAgICAgICAgIGVzYWMKLQlpZiB0ZXN0ICIkaGFyZGNvZGVfaW50b19saWJzIiA9IHllczsgdGhlbgorCWlmIHRlc3QgeWVzID0gIiRoYXJkY29kZV9pbnRvX2xpYnMiOyB0aGVuCiAJICAjIEhhcmRjb2RlIHRoZSBsaWJyYXJ5IHBhdGhzCiAJICBoYXJkY29kZV9saWJkaXJzPQogCSAgZGVwX3JwYXRoPQotCSAgcnBhdGg9IiRmaW5hbGl6ZV9ycGF0aCIKLQkgIHRlc3QgIiRvcHRfbW9kZSIgIT0gcmVsaW5rICYmIHJwYXRoPSIkY29tcGlsZV9ycGF0aCRycGF0aCIKKwkgIHJwYXRoPSRmaW5hbGl6ZV9ycGF0aAorCSAgdGVzdCByZWxpbmsgPSAiJG9wdF9tb2RlIiB8fCBycGF0aD0kY29tcGlsZV9ycGF0aCRycGF0aAogCSAgZm9yIGxpYmRpciBpbiAkcnBhdGg7IGRvCiAJICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIjsgdGhlbgogCSAgICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIjsgdGhlbgogCQlmdW5jX3JlcGxhY2Vfc3lzcm9vdCAiJGxpYmRpciIKIAkJbGliZGlyPSRmdW5jX3JlcGxhY2Vfc3lzcm9vdF9yZXN1bHQKIAkJaWYgdGVzdCAteiAiJGhhcmRjb2RlX2xpYmRpcnMiOyB0aGVuCi0JCSAgaGFyZGNvZGVfbGliZGlycz0iJGxpYmRpciIKKwkJICBoYXJkY29kZV9saWJkaXJzPSRsaWJkaXIKIAkJZWxzZQogCQkgICMgSnVzdCBhY2N1bXVsYXRlIHRoZSB1bmlxdWUgbGliZGlycy4KIAkJICBjYXNlICRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGhhcmRjb2RlX2xpYmRpcnMkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciBpbgpAQCAtODA3Nyw3ICs5MzU2LDcgQEAKIAkgICMgU3Vic3RpdHV0ZSB0aGUgaGFyZGNvZGVkIGxpYmRpcnMgaW50byB0aGUgcnBhdGguCiAJICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIgJiYKIAkgICAgIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJzIjsgdGhlbgotCSAgICBsaWJkaXI9IiRoYXJkY29kZV9saWJkaXJzIgorCSAgICBsaWJkaXI9JGhhcmRjb2RlX2xpYmRpcnMKIAkgICAgZXZhbCAiZGVwX3JwYXRoPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIiIKIAkgIGZpCiAJICBpZiB0ZXN0IC1uICIkcnVucGF0aF92YXIiICYmIHRlc3QgLW4gIiRwZXJtX3JwYXRoIjsgdGhlbgpAQCAtODA5MSw4ICs5MzcwLDggQEAKIAkgIHRlc3QgLW4gIiRkZXBfcnBhdGgiICYmIGRlcGxpYnM9IiRkZXBfcnBhdGggJGRlcGxpYnMiCiAJZmkKIAotCXNobGlicGF0aD0iJGZpbmFsaXplX3NobGlicGF0aCIKLQl0ZXN0ICIkb3B0X21vZGUiICE9IHJlbGluayAmJiBzaGxpYnBhdGg9IiRjb21waWxlX3NobGlicGF0aCRzaGxpYnBhdGgiCisJc2hsaWJwYXRoPSRmaW5hbGl6ZV9zaGxpYnBhdGgKKwl0ZXN0IHJlbGluayA9ICIkb3B0X21vZGUiIHx8IHNobGlicGF0aD0kY29tcGlsZV9zaGxpYnBhdGgkc2hsaWJwYXRoCiAJaWYgdGVzdCAtbiAiJHNobGlicGF0aCI7IHRoZW4KIAkgIGV2YWwgIiRzaGxpYnBhdGhfdmFyPSckc2hsaWJwYXRoXCQkc2hsaWJwYXRoX3Zhcic7IGV4cG9ydCAkc2hsaWJwYXRoX3ZhciIKIAlmaQpAQCAtODEwMiwxOSArOTM4MSwxOSBAQAogCWV2YWwgbGlicmFyeV9uYW1lcz1cIiRsaWJyYXJ5X25hbWVzX3NwZWNcIgogCXNldCBkdW1teSAkbGlicmFyeV9uYW1lcwogCXNoaWZ0Ci0JcmVhbG5hbWU9IiQxIgorCXJlYWxuYW1lPSQxCiAJc2hpZnQKIAogCWlmIHRlc3QgLW4gIiRzb25hbWVfc3BlYyI7IHRoZW4KIAkgIGV2YWwgc29uYW1lPVwiJHNvbmFtZV9zcGVjXCIKIAllbHNlCi0JICBzb25hbWU9IiRyZWFsbmFtZSIKKwkgIHNvbmFtZT0kcmVhbG5hbWUKIAlmaQogCWlmIHRlc3QgLXogIiRkbG5hbWUiOyB0aGVuCiAJICBkbG5hbWU9JHNvbmFtZQogCWZpCiAKLQlsaWI9IiRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZSIKKwlsaWI9JG91dHB1dF9vYmpkaXIvJHJlYWxuYW1lCiAJbGlua25hbWVzPQogCWZvciBsaW5rCiAJZG8KQEAgLTgxMjgsNyArOTQwNyw3IEBACiAJZGVsZmlsZXM9CiAJaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiAmJiB0ZXN0IC1uICIkaW5jbHVkZV9leHBzeW1zIjsgdGhlbgogCSAgJG9wdF9kcnlfcnVuIHx8IGNwICIkZXhwb3J0X3N5bWJvbHMiICIkb3V0cHV0X29iamRpci8kbGlibmFtZS51ZXhwIgotCSAgZXhwb3J0X3N5bWJvbHM9IiRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnVleHAiCisJICBleHBvcnRfc3ltYm9scz0kb3V0cHV0X29iamRpci8kbGlibmFtZS51ZXhwCiAJICBmdW5jX2FwcGVuZCBkZWxmaWxlcyAiICRleHBvcnRfc3ltYm9scyIKIAlmaQogCkBAIC04MTM3LDMxICs5NDE2LDMxIEBACiAJY3lnd2luKiB8IG1pbmd3KiB8IGNlZ2NjKikKIAkgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgJiYgdGVzdCAteiAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IjsgdGhlbgogCSAgICAjIGV4cG9ydGluZyB1c2luZyB1c2VyIHN1cHBsaWVkIHN5bWZpbGUKLQkgICAgaWYgdGVzdCAieGAkU0VEIDFxICRleHBvcnRfc3ltYm9sc2AiICE9IHhFWFBPUlRTOyB0aGVuCisJICAgIGZ1bmNfZGxsX2RlZl9wICIkZXhwb3J0X3N5bWJvbHMiIHx8IHsKIAkgICAgICAjIGFuZCBpdCdzIE5PVCBhbHJlYWR5IGEgLmRlZiBmaWxlLiBNdXN0IGZpZ3VyZSBvdXQKIAkgICAgICAjIHdoaWNoIG9mIHRoZSBnaXZlbiBzeW1ib2xzIGFyZSBkYXRhIHN5bWJvbHMgYW5kIHRhZwogCSAgICAgICMgdGhlbSBhcyBzdWNoLiBTbywgdHJpZ2dlciB1c2Ugb2YgZXhwb3J0X3N5bWJvbHNfY21kcy4KIAkgICAgICAjIGV4cG9ydF9zeW1ib2xzIGdldHMgcmVhc3NpZ25lZCBpbnNpZGUgdGhlICJwcmVwYXJlCiAJICAgICAgIyB0aGUgbGlzdCBvZiBleHBvcnRlZCBzeW1ib2xzIiBpZiBzdGF0ZW1lbnQsIHNvIHRoZQogCSAgICAgICMgaW5jbHVkZV9leHBzeW1zIGxvZ2ljIHN0aWxsIHdvcmtzLgotCSAgICAgIG9yaWdfZXhwb3J0X3N5bWJvbHM9IiRleHBvcnRfc3ltYm9scyIKKwkgICAgICBvcmlnX2V4cG9ydF9zeW1ib2xzPSRleHBvcnRfc3ltYm9scwogCSAgICAgIGV4cG9ydF9zeW1ib2xzPQogCSAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9scz15ZXMKLQkgICAgZmkKKwkgICAgfQogCSAgZmkKIAkgIDs7CiAJZXNhYwogCiAJIyBQcmVwYXJlIHRoZSBsaXN0IG9mIGV4cG9ydGVkIHN5bWJvbHMKIAlpZiB0ZXN0IC16ICIkZXhwb3J0X3N5bWJvbHMiOyB0aGVuCi0JICBpZiB0ZXN0ICIkYWx3YXlzX2V4cG9ydF9zeW1ib2xzIiA9IHllcyB8fCB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHNfcmVnZXgiOyB0aGVuCi0JICAgIGZ1bmNfdmVyYm9zZSAiZ2VuZXJhdGluZyBzeW1ib2wgbGlzdCBmb3IgXGAkbGlibmFtZS5sYSciCi0JICAgIGV4cG9ydF9zeW1ib2xzPSIkb3V0cHV0X29iamRpci8kbGlibmFtZS5leHAiCisJICBpZiB0ZXN0IHllcyA9ICIkYWx3YXlzX2V4cG9ydF9zeW1ib2xzIiB8fCB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHNfcmVnZXgiOyB0aGVuCisJICAgIGZ1bmNfdmVyYm9zZSAiZ2VuZXJhdGluZyBzeW1ib2wgbGlzdCBmb3IgJyRsaWJuYW1lLmxhJyIKKwkgICAgZXhwb3J0X3N5bWJvbHM9JG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZXhwCiAJICAgICRvcHRfZHJ5X3J1biB8fCAkUk0gJGV4cG9ydF9zeW1ib2xzCiAJICAgIGNtZHM9JGV4cG9ydF9zeW1ib2xzX2NtZHMKLQkgICAgc2F2ZV9pZnM9IiRJRlMiOyBJRlM9J34nCisJICAgIHNhdmVfaWZzPSRJRlM7IElGUz0nficKIAkgICAgZm9yIGNtZDEgaW4gJGNtZHM7IGRvCi0JICAgICAgSUZTPSIkc2F2ZV9pZnMiCisJICAgICAgSUZTPSRzYXZlX2lmcwogCSAgICAgICMgVGFrZSB0aGUgbm9ybWFsIGJyYW5jaCBpZiB0aGUgbm1fZmlsZV9saXN0X3NwZWMgYnJhbmNoCiAJICAgICAgIyBkb2Vzbid0IHdvcmsgb3IgaWYgdG9vbCBjb252ZXJzaW9uIGlzIG5vdCBuZWVkZWQuCiAJICAgICAgY2FzZSAkbm1fZmlsZV9saXN0X3NwZWN+JHRvX3Rvb2xfZmlsZV9jbWQgaW4KQEAgLTgxNzUsNyArOTQ1NCw3IEBACiAJCSAgdHJ5X25vcm1hbF9icmFuY2g9bm8KIAkJICA7OwogCSAgICAgIGVzYWMKLQkgICAgICBpZiB0ZXN0ICIkdHJ5X25vcm1hbF9icmFuY2giID0geWVzIFwKKwkgICAgICBpZiB0ZXN0IHllcyA9ICIkdHJ5X25vcm1hbF9icmFuY2giIFwKIAkJICYmIHsgdGVzdCAiJGxlbiIgLWx0ICIkbWF4X2NtZF9sZW4iIFwKIAkJICAgICAgfHwgdGVzdCAiJG1heF9jbWRfbGVuIiAtbGUgLTE7IH0KIAkgICAgICB0aGVuCkBAIC04MTg2LDcgKzk0NjUsNyBAQAogCQlvdXRwdXRfbGE9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0CiAJCXNhdmVfbGlib2Jqcz0kbGlib2JqcwogCQlzYXZlX291dHB1dD0kb3V0cHV0Ci0JCW91dHB1dD0ke291dHB1dF9vYmpkaXJ9LyR7b3V0cHV0X2xhfS5ubQorCQlvdXRwdXQ9JG91dHB1dF9vYmpkaXIvJG91dHB1dF9sYS5ubQogCQlmdW5jX3RvX3Rvb2xfZmlsZSAiJG91dHB1dCIKIAkJbGlib2Jqcz0kbm1fZmlsZV9saXN0X3NwZWMkZnVuY190b190b29sX2ZpbGVfcmVzdWx0CiAJCWZ1bmNfYXBwZW5kIGRlbGZpbGVzICIgJG91dHB1dCIKQEAgLTgyMDksOCArOTQ4OCw4IEBACiAJCWJyZWFrCiAJICAgICAgZmkKIAkgICAgZG9uZQotCSAgICBJRlM9IiRzYXZlX2lmcyIKLQkgICAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IiAmJiB0ZXN0ICJYJHNraXBwZWRfZXhwb3J0IiAhPSAiWDoiOyB0aGVuCisJICAgIElGUz0kc2F2ZV9pZnMKKwkgICAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IiAmJiB0ZXN0IDogIT0gIiRza2lwcGVkX2V4cG9ydCI7IHRoZW4KIAkgICAgICBmdW5jX3Nob3dfZXZhbCAnJEVHUkVQIC1lICIkZXhwb3J0X3N5bWJvbHNfcmVnZXgiICIkZXhwb3J0X3N5bWJvbHMiID4gIiR7ZXhwb3J0X3N5bWJvbHN9VCInCiAJICAgICAgZnVuY19zaG93X2V2YWwgJyRNViAiJHtleHBvcnRfc3ltYm9sc31UIiAiJGV4cG9ydF9zeW1ib2xzIicKIAkgICAgZmkKQEAgLTgyMTgsMTYgKzk0OTcsMTYgQEAKIAlmaQogCiAJaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiAmJiB0ZXN0IC1uICIkaW5jbHVkZV9leHBzeW1zIjsgdGhlbgotCSAgdG1wX2V4cG9ydF9zeW1ib2xzPSIkZXhwb3J0X3N5bWJvbHMiCi0JICB0ZXN0IC1uICIkb3JpZ19leHBvcnRfc3ltYm9scyIgJiYgdG1wX2V4cG9ydF9zeW1ib2xzPSIkb3JpZ19leHBvcnRfc3ltYm9scyIKKwkgIHRtcF9leHBvcnRfc3ltYm9scz0kZXhwb3J0X3N5bWJvbHMKKwkgIHRlc3QgLW4gIiRvcmlnX2V4cG9ydF9zeW1ib2xzIiAmJiB0bXBfZXhwb3J0X3N5bWJvbHM9JG9yaWdfZXhwb3J0X3N5bWJvbHMKIAkgICRvcHRfZHJ5X3J1biB8fCBldmFsICckRUNITyAiJGluY2x1ZGVfZXhwc3ltcyIgfCAkU1AyTkwgPj4gIiR0bXBfZXhwb3J0X3N5bWJvbHMiJwogCWZpCiAKLQlpZiB0ZXN0ICJYJHNraXBwZWRfZXhwb3J0IiAhPSAiWDoiICYmIHRlc3QgLW4gIiRvcmlnX2V4cG9ydF9zeW1ib2xzIjsgdGhlbgorCWlmIHRlc3QgOiAhPSAiJHNraXBwZWRfZXhwb3J0IiAmJiB0ZXN0IC1uICIkb3JpZ19leHBvcnRfc3ltYm9scyI7IHRoZW4KIAkgICMgVGhlIGdpdmVuIGV4cG9ydHNfc3ltYm9scyBmaWxlIGhhcyB0byBiZSBmaWx0ZXJlZCwgc28gZmlsdGVyIGl0LgotCSAgZnVuY192ZXJib3NlICJmaWx0ZXIgc3ltYm9sIGxpc3QgZm9yIFxgJGxpYm5hbWUubGEnIHRvIHRhZyBEQVRBIGV4cG9ydHMiCisJICBmdW5jX3ZlcmJvc2UgImZpbHRlciBzeW1ib2wgbGlzdCBmb3IgJyRsaWJuYW1lLmxhJyB0byB0YWcgREFUQSBleHBvcnRzIgogCSAgIyBGSVhNRTogJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZmlsdGVyIHBvdGVudGlhbGx5IGNvbnRhaW5zIGxvdHMgb2YKLQkgICMgJ3MnIGNvbW1hbmRzIHdoaWNoIG5vdCBhbGwgc2VkcyBjYW4gaGFuZGxlLiBHTlUgc2VkIHNob3VsZCBiZSBmaW5lCisJICAjICdzJyBjb21tYW5kcywgd2hpY2ggbm90IGFsbCBzZWRzIGNhbiBoYW5kbGUuIEdOVSBzZWQgc2hvdWxkIGJlIGZpbmUKIAkgICMgdGhvdWdoLiBBbHNvLCB0aGUgZmlsdGVyIHNjYWxlcyBzdXBlcmxpbmVhcmx5IHdpdGggdGhlIG51bWJlciBvZgogCSAgIyBnbG9iYWwgdmFyaWFibGVzLiBqb2luKDEpIHdvdWxkIGJlIG5pY2UgaGVyZSwgYnV0IHVuZm9ydHVuYXRlbHkKIAkgICMgaXNuJ3QgYSBibGVzc2VkIHRvb2wuCkBAIC04MjQ2LDExICs5NTI1LDExIEBACiAJICAgIDs7CiAJICBlc2FjCiAJZG9uZQotCWRlcGxpYnM9IiR0bXBfZGVwbGlicyIKKwlkZXBsaWJzPSR0bXBfZGVwbGlicwogCiAJaWYgdGVzdCAtbiAiJGNvbnZlbmllbmNlIjsgdGhlbgogCSAgaWYgdGVzdCAtbiAiJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIiAmJgotCSAgICB0ZXN0ICIkY29tcGlsZXJfbmVlZHNfb2JqZWN0IiA9IHllcyAmJgorCSAgICB0ZXN0IHllcyA9ICIkY29tcGlsZXJfbmVlZHNfb2JqZWN0IiAmJgogCSAgICB0ZXN0IC16ICIkbGlib2JqcyI7IHRoZW4KIAkgICAgIyBleHRyYWN0IHRoZSBhcmNoaXZlcywgc28gd2UgaGF2ZSBvYmplY3RzIHRvIGxpc3QuCiAJICAgICMgVE9ETzogY291bGQgb3B0aW1pemUgdGhpcyB0byBqdXN0IGV4dHJhY3Qgb25lIGFyY2hpdmUuCkBAIC04MjYxLDcgKzk1NDAsNyBAQAogCSAgICBldmFsIGxpYm9ianM9XCJcJGxpYm9ianMgJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjXCIKIAkgICAgdGVzdCAiWCRsaWJvYmpzIiA9ICJYICIgJiYgbGlib2Jqcz0KIAkgIGVsc2UKLQkgICAgZ2VudG9wPSIkb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9eCIKKwkgICAgZ2VudG9wPSRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX14CiAJICAgIGZ1bmNfYXBwZW5kIGdlbmVyYXRlZCAiICRnZW50b3AiCiAKIAkgICAgZnVuY19leHRyYWN0X2FyY2hpdmVzICRnZW50b3AgJGNvbnZlbmllbmNlCkBAIC04MjcwLDE4ICs5NTQ5LDE4IEBACiAJICBmaQogCWZpCiAKLQlpZiB0ZXN0ICIkdGhyZWFkX3NhZmUiID0geWVzICYmIHRlc3QgLW4gIiR0aHJlYWRfc2FmZV9mbGFnX3NwZWMiOyB0aGVuCisJaWYgdGVzdCB5ZXMgPSAiJHRocmVhZF9zYWZlIiAmJiB0ZXN0IC1uICIkdGhyZWFkX3NhZmVfZmxhZ19zcGVjIjsgdGhlbgogCSAgZXZhbCBmbGFnPVwiJHRocmVhZF9zYWZlX2ZsYWdfc3BlY1wiCiAJICBmdW5jX2FwcGVuZCBsaW5rZXJfZmxhZ3MgIiAkZmxhZyIKIAlmaQogCiAJIyBNYWtlIGEgYmFja3VwIG9mIHRoZSB1bmluc3RhbGxlZCBsaWJyYXJ5IHdoZW4gcmVsaW5raW5nCi0JaWYgdGVzdCAiJG9wdF9tb2RlIiA9IHJlbGluazsgdGhlbgorCWlmIHRlc3QgcmVsaW5rID0gIiRvcHRfbW9kZSI7IHRoZW4KIAkgICRvcHRfZHJ5X3J1biB8fCBldmFsICcoY2QgJG91dHB1dF9vYmpkaXIgJiYgJFJNICR7cmVhbG5hbWV9VSAmJiAkTVYgJHJlYWxuYW1lICR7cmVhbG5hbWV9VSknIHx8IGV4aXQgJD8KIAlmaQogCiAJIyBEbyBlYWNoIG9mIHRoZSBhcmNoaXZlIGNvbW1hbmRzLgotCWlmIHRlc3QgIiRtb2R1bGUiID0geWVzICYmIHRlc3QgLW4gIiRtb2R1bGVfY21kcyIgOyB0aGVuCisJaWYgdGVzdCB5ZXMgPSAiJG1vZHVsZSIgJiYgdGVzdCAtbiAiJG1vZHVsZV9jbWRzIjsgdGhlbgogCSAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiAmJiB0ZXN0IC1uICIkbW9kdWxlX2V4cHN5bV9jbWRzIjsgdGhlbgogCSAgICBldmFsIHRlc3RfY21kcz1cIiRtb2R1bGVfZXhwc3ltX2NtZHNcIgogCSAgICBjbWRzPSRtb2R1bGVfZXhwc3ltX2NtZHMKQEAgLTgyOTksNyArOTU3OCw3IEBACiAJICBmaQogCWZpCiAKLQlpZiB0ZXN0ICJYJHNraXBwZWRfZXhwb3J0IiAhPSAiWDoiICYmCisJaWYgdGVzdCA6ICE9ICIkc2tpcHBlZF9leHBvcnQiICYmCiAJICAgZnVuY19sZW4gIiAkdGVzdF9jbWRzIiAmJgogCSAgIGxlbj0kZnVuY19sZW5fcmVzdWx0ICYmCiAJICAgdGVzdCAiJGxlbiIgLWx0ICIkbWF4X2NtZF9sZW4iIHx8IHRlc3QgIiRtYXhfY21kX2xlbiIgLWxlIC0xOyB0aGVuCkBAIC04MzMyLDggKzk2MTEsOCBAQAogCSAgbGFzdF9yb2JqPQogCSAgaz0xCiAKLQkgIGlmIHRlc3QgLW4gIiRzYXZlX2xpYm9ianMiICYmIHRlc3QgIlgkc2tpcHBlZF9leHBvcnQiICE9ICJYOiIgJiYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgotCSAgICBvdXRwdXQ9JHtvdXRwdXRfb2JqZGlyfS8ke291dHB1dF9sYX0ubG5rc2NyaXB0CisJICBpZiB0ZXN0IC1uICIkc2F2ZV9saWJvYmpzIiAmJiB0ZXN0IDogIT0gIiRza2lwcGVkX2V4cG9ydCIgJiYgdGVzdCB5ZXMgPSAiJHdpdGhfZ251X2xkIjsgdGhlbgorCSAgICBvdXRwdXQ9JG91dHB1dF9vYmpkaXIvJG91dHB1dF9sYS5sbmtzY3JpcHQKIAkgICAgZnVuY192ZXJib3NlICJjcmVhdGluZyBHTlUgbGQgc2NyaXB0OiAkb3V0cHV0IgogCSAgICBlY2hvICdJTlBVVCAoJyA+ICRvdXRwdXQKIAkgICAgZm9yIG9iaiBpbiAkc2F2ZV9saWJvYmpzCkBAIC04MzQ1LDE0ICs5NjI0LDE0IEBACiAJICAgIGZ1bmNfYXBwZW5kIGRlbGZpbGVzICIgJG91dHB1dCIKIAkgICAgZnVuY190b190b29sX2ZpbGUgIiRvdXRwdXQiCiAJICAgIG91dHB1dD0kZnVuY190b190b29sX2ZpbGVfcmVzdWx0Ci0JICBlbGlmIHRlc3QgLW4gIiRzYXZlX2xpYm9ianMiICYmIHRlc3QgIlgkc2tpcHBlZF9leHBvcnQiICE9ICJYOiIgJiYgdGVzdCAiWCRmaWxlX2xpc3Rfc3BlYyIgIT0gWDsgdGhlbgotCSAgICBvdXRwdXQ9JHtvdXRwdXRfb2JqZGlyfS8ke291dHB1dF9sYX0ubG5rCisJICBlbGlmIHRlc3QgLW4gIiRzYXZlX2xpYm9ianMiICYmIHRlc3QgOiAhPSAiJHNraXBwZWRfZXhwb3J0IiAmJiB0ZXN0IC1uICIkZmlsZV9saXN0X3NwZWMiOyB0aGVuCisJICAgIG91dHB1dD0kb3V0cHV0X29iamRpci8kb3V0cHV0X2xhLmxuawogCSAgICBmdW5jX3ZlcmJvc2UgImNyZWF0aW5nIGxpbmtlciBpbnB1dCBmaWxlIGxpc3Q6ICRvdXRwdXQiCiAJICAgIDogPiAkb3V0cHV0CiAJICAgIHNldCB4ICRzYXZlX2xpYm9ianMKIAkgICAgc2hpZnQKIAkgICAgZmlyc3RvYmo9Ci0JICAgIGlmIHRlc3QgIiRjb21waWxlcl9uZWVkc19vYmplY3QiID0geWVzOyB0aGVuCisJICAgIGlmIHRlc3QgeWVzID0gIiRjb21waWxlcl9uZWVkc19vYmplY3QiOyB0aGVuCiAJICAgICAgZmlyc3RvYmo9IiQxICIKIAkgICAgICBzaGlmdAogCSAgICBmaQpAQCAtODM2Nyw3ICs5NjQ2LDcgQEAKIAkgIGVsc2UKIAkgICAgaWYgdGVzdCAtbiAiJHNhdmVfbGlib2JqcyI7IHRoZW4KIAkgICAgICBmdW5jX3ZlcmJvc2UgImNyZWF0aW5nIHJlbG9hZGFibGUgb2JqZWN0IGZpbGVzLi4uIgotCSAgICAgIG91dHB1dD0kb3V0cHV0X29iamRpci8kb3V0cHV0X2xhLSR7a30uJG9iamV4dAorCSAgICAgIG91dHB1dD0kb3V0cHV0X29iamRpci8kb3V0cHV0X2xhLSRrLiRvYmpleHQKIAkgICAgICBldmFsIHRlc3RfY21kcz1cIiRyZWxvYWRfY21kc1wiCiAJICAgICAgZnVuY19sZW4gIiAkdGVzdF9jbWRzIgogCSAgICAgIGxlbjA9JGZ1bmNfbGVuX3Jlc3VsdApAQCAtODM3OSwxMyArOTY1OCwxMyBAQAogCQlmdW5jX2xlbiAiICRvYmoiCiAJCWZ1bmNfYXJpdGggJGxlbiArICRmdW5jX2xlbl9yZXN1bHQKIAkJbGVuPSRmdW5jX2FyaXRoX3Jlc3VsdAotCQlpZiB0ZXN0ICJYJG9iamxpc3QiID0gWCB8fAorCQlpZiB0ZXN0IC16ICIkb2JqbGlzdCIgfHwKIAkJICAgdGVzdCAiJGxlbiIgLWx0ICIkbWF4X2NtZF9sZW4iOyB0aGVuCiAJCSAgZnVuY19hcHBlbmQgb2JqbGlzdCAiICRvYmoiCiAJCWVsc2UKIAkJICAjIFRoZSBjb21tYW5kICR0ZXN0X2NtZHMgaXMgYWxtb3N0IHRvbyBsb25nLCBhZGQgYQogCQkgICMgY29tbWFuZCB0byB0aGUgcXVldWUuCi0JCSAgaWYgdGVzdCAiJGsiIC1lcSAxIDsgdGhlbgorCQkgIGlmIHRlc3QgMSAtZXEgIiRrIjsgdGhlbgogCQkgICAgIyBUaGUgZmlyc3QgZmlsZSBkb2Vzbid0IGhhdmUgYSBwcmV2aW91cyBjb21tYW5kIHRvIGFkZC4KIAkJICAgIHJlbG9hZF9vYmpzPSRvYmpsaXN0CiAJCSAgICBldmFsIGNvbmNhdF9jbWRzPVwiJHJlbG9hZF9jbWRzXCIKQEAgLTgzOTUsMTAgKzk2NzQsMTAgQEAKIAkJICAgIHJlbG9hZF9vYmpzPSIkb2JqbGlzdCAkbGFzdF9yb2JqIgogCQkgICAgZXZhbCBjb25jYXRfY21kcz1cIlwkY29uY2F0X2NtZHN+JHJlbG9hZF9jbWRzflwkUk0gJGxhc3Rfcm9ialwiCiAJCSAgZmkKLQkJICBsYXN0X3JvYmo9JG91dHB1dF9vYmpkaXIvJG91dHB1dF9sYS0ke2t9LiRvYmpleHQKKwkJICBsYXN0X3JvYmo9JG91dHB1dF9vYmpkaXIvJG91dHB1dF9sYS0kay4kb2JqZXh0CiAJCSAgZnVuY19hcml0aCAkayArIDEKIAkJICBrPSRmdW5jX2FyaXRoX3Jlc3VsdAotCQkgIG91dHB1dD0kb3V0cHV0X29iamRpci8kb3V0cHV0X2xhLSR7a30uJG9iamV4dAorCQkgIG91dHB1dD0kb3V0cHV0X29iamRpci8kb3V0cHV0X2xhLSRrLiRvYmpleHQKIAkJICBvYmpsaXN0PSIgJG9iaiIKIAkJICBmdW5jX2xlbiAiICRsYXN0X3JvYmoiCiAJCSAgZnVuY19hcml0aCAkbGVuMCArICRmdW5jX2xlbl9yZXN1bHQKQEAgLTg0MTAsOSArOTY4OSw5IEBACiAJICAgICAgIyBmaWxlcyB3aWxsIGxpbmsgaW4gdGhlIGxhc3Qgb25lIGNyZWF0ZWQuCiAJICAgICAgdGVzdCAteiAiJGNvbmNhdF9jbWRzIiB8fCBjb25jYXRfY21kcz0kY29uY2F0X2NtZHN+CiAJICAgICAgcmVsb2FkX29ianM9IiRvYmpsaXN0ICRsYXN0X3JvYmoiCi0JICAgICAgZXZhbCBjb25jYXRfY21kcz1cIlwke2NvbmNhdF9jbWRzfSRyZWxvYWRfY21kc1wiCisJICAgICAgZXZhbCBjb25jYXRfY21kcz1cIlwkY29uY2F0X2NtZHMkcmVsb2FkX2NtZHNcIgogCSAgICAgIGlmIHRlc3QgLW4gIiRsYXN0X3JvYmoiOyB0aGVuCi0JICAgICAgICBldmFsIGNvbmNhdF9jbWRzPVwiXCR7Y29uY2F0X2NtZHN9flwkUk0gJGxhc3Rfcm9ialwiCisJICAgICAgICBldmFsIGNvbmNhdF9jbWRzPVwiXCRjb25jYXRfY21kc35cJFJNICRsYXN0X3JvYmpcIgogCSAgICAgIGZpCiAJICAgICAgZnVuY19hcHBlbmQgZGVsZmlsZXMgIiAkb3V0cHV0IgogCkBAIC04NDIwLDkgKzk2OTksOSBAQAogCSAgICAgIG91dHB1dD0KIAkgICAgZmkKIAotCSAgICBpZiAke3NraXBwZWRfZXhwb3J0LWZhbHNlfTsgdGhlbgotCSAgICAgIGZ1bmNfdmVyYm9zZSAiZ2VuZXJhdGluZyBzeW1ib2wgbGlzdCBmb3IgXGAkbGlibmFtZS5sYSciCi0JICAgICAgZXhwb3J0X3N5bWJvbHM9IiRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmV4cCIKKwkgICAgJHtza2lwcGVkX2V4cG9ydC1mYWxzZX0gJiYgeworCSAgICAgIGZ1bmNfdmVyYm9zZSAiZ2VuZXJhdGluZyBzeW1ib2wgbGlzdCBmb3IgJyRsaWJuYW1lLmxhJyIKKwkgICAgICBleHBvcnRfc3ltYm9scz0kb3V0cHV0X29iamRpci8kbGlibmFtZS5leHAKIAkgICAgICAkb3B0X2RyeV9ydW4gfHwgJFJNICRleHBvcnRfc3ltYm9scwogCSAgICAgIGxpYm9ianM9JG91dHB1dAogCSAgICAgICMgQXBwZW5kIHRoZSBjb21tYW5kIHRvIGNyZWF0ZSB0aGUgZXhwb3J0IGZpbGUuCkBAIC04NDMxLDE2ICs5NzEwLDE2IEBACiAJICAgICAgaWYgdGVzdCAtbiAiJGxhc3Rfcm9iaiI7IHRoZW4KIAkJZXZhbCBjb25jYXRfY21kcz1cIlwkY29uY2F0X2NtZHN+XCRSTSAkbGFzdF9yb2JqXCIKIAkgICAgICBmaQotCSAgICBmaQorCSAgICB9CiAKIAkgICAgdGVzdCAtbiAiJHNhdmVfbGlib2JqcyIgJiYKIAkgICAgICBmdW5jX3ZlcmJvc2UgImNyZWF0aW5nIGEgdGVtcG9yYXJ5IHJlbG9hZGFibGUgb2JqZWN0IGZpbGU6ICRvdXRwdXQiCiAKIAkgICAgIyBMb29wIHRocm91Z2ggdGhlIGNvbW1hbmRzIGdlbmVyYXRlZCBhYm92ZSBhbmQgZXhlY3V0ZSB0aGVtLgotCSAgICBzYXZlX2lmcz0iJElGUyI7IElGUz0nficKKwkgICAgc2F2ZV9pZnM9JElGUzsgSUZTPSd+JwogCSAgICBmb3IgY21kIGluICRjb25jYXRfY21kczsgZG8KLQkgICAgICBJRlM9IiRzYXZlX2lmcyIKLQkgICAgICAkb3B0X3NpbGVudCB8fCB7CisJICAgICAgSUZTPSRzYXZlX2lmcworCSAgICAgICRvcHRfcXVpZXQgfHwgewogCQkgIGZ1bmNfcXVvdGVfZm9yX2V4cGFuZCAiJGNtZCIKIAkJICBldmFsICJmdW5jX2VjaG8gJGZ1bmNfcXVvdGVfZm9yX2V4cGFuZF9yZXN1bHQiCiAJICAgICAgfQpAQCAtODQ0OCw3ICs5NzI3LDcgQEAKIAkJbHRfZXhpdD0kPwogCiAJCSMgUmVzdG9yZSB0aGUgdW5pbnN0YWxsZWQgbGlicmFyeSBhbmQgZXhpdAotCQlpZiB0ZXN0ICIkb3B0X21vZGUiID0gcmVsaW5rOyB0aGVuCisJCWlmIHRlc3QgcmVsaW5rID0gIiRvcHRfbW9kZSI7IHRoZW4KIAkJICAoIGNkICIkb3V0cHV0X29iamRpciIgJiYgXAogCQkgICAgJFJNICIke3JlYWxuYW1lfVQiICYmIFwKIAkJICAgICRNViAiJHtyZWFsbmFtZX1VIiAiJHJlYWxuYW1lIiApCkBAIC04NDU3LDcgKzk3MzYsNyBAQAogCQlleGl0ICRsdF9leGl0CiAJICAgICAgfQogCSAgICBkb25lCi0JICAgIElGUz0iJHNhdmVfaWZzIgorCSAgICBJRlM9JHNhdmVfaWZzCiAKIAkgICAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IiAmJiAke3NraXBwZWRfZXhwb3J0LWZhbHNlfTsgdGhlbgogCSAgICAgIGZ1bmNfc2hvd19ldmFsICckRUdSRVAgLWUgIiRleHBvcnRfc3ltYm9sc19yZWdleCIgIiRleHBvcnRfc3ltYm9scyIgPiAiJHtleHBvcnRfc3ltYm9sc31UIicKQEAgLTg0NjUsMTggKzk3NDQsMTggQEAKIAkgICAgZmkKIAkgIGZpCiAKLSAgICAgICAgICBpZiAke3NraXBwZWRfZXhwb3J0LWZhbHNlfTsgdGhlbgorICAgICAgICAgICR7c2tpcHBlZF9leHBvcnQtZmFsc2V9ICYmIHsKIAkgICAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiAmJiB0ZXN0IC1uICIkaW5jbHVkZV9leHBzeW1zIjsgdGhlbgotCSAgICAgIHRtcF9leHBvcnRfc3ltYm9scz0iJGV4cG9ydF9zeW1ib2xzIgotCSAgICAgIHRlc3QgLW4gIiRvcmlnX2V4cG9ydF9zeW1ib2xzIiAmJiB0bXBfZXhwb3J0X3N5bWJvbHM9IiRvcmlnX2V4cG9ydF9zeW1ib2xzIgorCSAgICAgIHRtcF9leHBvcnRfc3ltYm9scz0kZXhwb3J0X3N5bWJvbHMKKwkgICAgICB0ZXN0IC1uICIkb3JpZ19leHBvcnRfc3ltYm9scyIgJiYgdG1wX2V4cG9ydF9zeW1ib2xzPSRvcmlnX2V4cG9ydF9zeW1ib2xzCiAJICAgICAgJG9wdF9kcnlfcnVuIHx8IGV2YWwgJyRFQ0hPICIkaW5jbHVkZV9leHBzeW1zIiB8ICRTUDJOTCA+PiAiJHRtcF9leHBvcnRfc3ltYm9scyInCiAJICAgIGZpCiAKIAkgICAgaWYgdGVzdCAtbiAiJG9yaWdfZXhwb3J0X3N5bWJvbHMiOyB0aGVuCiAJICAgICAgIyBUaGUgZ2l2ZW4gZXhwb3J0c19zeW1ib2xzIGZpbGUgaGFzIHRvIGJlIGZpbHRlcmVkLCBzbyBmaWx0ZXIgaXQuCi0JICAgICAgZnVuY192ZXJib3NlICJmaWx0ZXIgc3ltYm9sIGxpc3QgZm9yIFxgJGxpYm5hbWUubGEnIHRvIHRhZyBEQVRBIGV4cG9ydHMiCisJICAgICAgZnVuY192ZXJib3NlICJmaWx0ZXIgc3ltYm9sIGxpc3QgZm9yICckbGlibmFtZS5sYScgdG8gdGFnIERBVEEgZXhwb3J0cyIKIAkgICAgICAjIEZJWE1FOiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5maWx0ZXIgcG90ZW50aWFsbHkgY29udGFpbnMgbG90cyBvZgotCSAgICAgICMgJ3MnIGNvbW1hbmRzIHdoaWNoIG5vdCBhbGwgc2VkcyBjYW4gaGFuZGxlLiBHTlUgc2VkIHNob3VsZCBiZSBmaW5lCisJICAgICAgIyAncycgY29tbWFuZHMsIHdoaWNoIG5vdCBhbGwgc2VkcyBjYW4gaGFuZGxlLiBHTlUgc2VkIHNob3VsZCBiZSBmaW5lCiAJICAgICAgIyB0aG91Z2guIEFsc28sIHRoZSBmaWx0ZXIgc2NhbGVzIHN1cGVybGluZWFybHkgd2l0aCB0aGUgbnVtYmVyIG9mCiAJICAgICAgIyBnbG9iYWwgdmFyaWFibGVzLiBqb2luKDEpIHdvdWxkIGJlIG5pY2UgaGVyZSwgYnV0IHVuZm9ydHVuYXRlbHkKIAkgICAgICAjIGlzbid0IGEgYmxlc3NlZCB0b29sLgpAQCAtODQ4NSw3ICs5NzY0LDcgQEAKIAkgICAgICBleHBvcnRfc3ltYm9scz0kb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWYKIAkgICAgICAkb3B0X2RyeV9ydW4gfHwgJFNFRCAtZiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5maWx0ZXIgPCAkb3JpZ19leHBvcnRfc3ltYm9scyA+ICRleHBvcnRfc3ltYm9scwogCSAgICBmaQotCSAgZmkKKwkgIH0KIAogCSAgbGlib2Jqcz0kb3V0cHV0CiAJICAjIFJlc3RvcmUgdGhlIHZhbHVlIG9mIG91dHB1dC4KQEAgLTg0OTksNyArOTc3OCw3IEBACiAJICAjIHZhbHVlIG9mICRsaWJvYmpzIGZvciBwaWVjZXdpc2UgbGlua2luZy4KIAogCSAgIyBEbyBlYWNoIG9mIHRoZSBhcmNoaXZlIGNvbW1hbmRzLgotCSAgaWYgdGVzdCAiJG1vZHVsZSIgPSB5ZXMgJiYgdGVzdCAtbiAiJG1vZHVsZV9jbWRzIiA7IHRoZW4KKwkgIGlmIHRlc3QgeWVzID0gIiRtb2R1bGUiICYmIHRlc3QgLW4gIiRtb2R1bGVfY21kcyI7IHRoZW4KIAkgICAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiAmJiB0ZXN0IC1uICIkbW9kdWxlX2V4cHN5bV9jbWRzIjsgdGhlbgogCSAgICAgIGNtZHM9JG1vZHVsZV9leHBzeW1fY21kcwogCSAgICBlbHNlCkBAIC04NTIxLDcgKzk4MDAsNyBAQAogCiAJIyBBZGQgYW55IG9iamVjdHMgZnJvbSBwcmVsb2FkZWQgY29udmVuaWVuY2UgbGlicmFyaWVzCiAJaWYgdGVzdCAtbiAiJGRscHJlZmlsZXMiOyB0aGVuCi0JICBnZW50b3A9IiRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX14IgorCSAgZ2VudG9wPSRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX14CiAJICBmdW5jX2FwcGVuZCBnZW5lcmF0ZWQgIiAkZ2VudG9wIgogCiAJICBmdW5jX2V4dHJhY3RfYXJjaGl2ZXMgJGdlbnRvcCAkZGxwcmVmaWxlcwpAQCAtODUyOSwxMSArOTgwOCwxMiBAQAogCSAgdGVzdCAiWCRsaWJvYmpzIiA9ICJYICIgJiYgbGlib2Jqcz0KIAlmaQogCi0Jc2F2ZV9pZnM9IiRJRlMiOyBJRlM9J34nCisJc2F2ZV9pZnM9JElGUzsgSUZTPSd+JwogCWZvciBjbWQgaW4gJGNtZHM7IGRvCi0JICBJRlM9IiRzYXZlX2lmcyIKKwkgIElGUz0kc3AkbmwKIAkgIGV2YWwgY21kPVwiJGNtZFwiCi0JICAkb3B0X3NpbGVudCB8fCB7CisJICBJRlM9JHNhdmVfaWZzCisJICAkb3B0X3F1aWV0IHx8IHsKIAkgICAgZnVuY19xdW90ZV9mb3JfZXhwYW5kICIkY21kIgogCSAgICBldmFsICJmdW5jX2VjaG8gJGZ1bmNfcXVvdGVfZm9yX2V4cGFuZF9yZXN1bHQiCiAJICB9CkBAIC04NTQxLDcgKzk4MjEsNyBAQAogCSAgICBsdF9leGl0PSQ/CiAKIAkgICAgIyBSZXN0b3JlIHRoZSB1bmluc3RhbGxlZCBsaWJyYXJ5IGFuZCBleGl0Ci0JICAgIGlmIHRlc3QgIiRvcHRfbW9kZSIgPSByZWxpbms7IHRoZW4KKwkgICAgaWYgdGVzdCByZWxpbmsgPSAiJG9wdF9tb2RlIjsgdGhlbgogCSAgICAgICggY2QgIiRvdXRwdXRfb2JqZGlyIiAmJiBcCiAJICAgICAgICAkUk0gIiR7cmVhbG5hbWV9VCIgJiYgXAogCQkkTVYgIiR7cmVhbG5hbWV9VSIgIiRyZWFsbmFtZSIgKQpAQCAtODU1MCwxMCArOTgzMCwxMCBAQAogCSAgICBleGl0ICRsdF9leGl0CiAJICB9CiAJZG9uZQotCUlGUz0iJHNhdmVfaWZzIgorCUlGUz0kc2F2ZV9pZnMKIAogCSMgUmVzdG9yZSB0aGUgdW5pbnN0YWxsZWQgbGlicmFyeSBhbmQgZXhpdAotCWlmIHRlc3QgIiRvcHRfbW9kZSIgPSByZWxpbms7IHRoZW4KKwlpZiB0ZXN0IHJlbGluayA9ICIkb3B0X21vZGUiOyB0aGVuCiAJICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAnKGNkICRvdXRwdXRfb2JqZGlyICYmICRSTSAke3JlYWxuYW1lfVQgJiYgJE1WICRyZWFsbmFtZSAke3JlYWxuYW1lfVQgJiYgJE1WICR7cmVhbG5hbWV9VSAkcmVhbG5hbWUpJyB8fCBleGl0ICQ/CiAKIAkgIGlmIHRlc3QgLW4gIiRjb252ZW5pZW5jZSI7IHRoZW4KQEAgLTg1NzMsMzkgKzk4NTMsMzkgQEAKIAlkb25lCiAKIAkjIElmIC1tb2R1bGUgb3IgLWV4cG9ydC1keW5hbWljIHdhcyBzcGVjaWZpZWQsIHNldCB0aGUgZGxuYW1lLgotCWlmIHRlc3QgIiRtb2R1bGUiID0geWVzIHx8IHRlc3QgIiRleHBvcnRfZHluYW1pYyIgPSB5ZXM7IHRoZW4KKwlpZiB0ZXN0IHllcyA9ICIkbW9kdWxlIiB8fCB0ZXN0IHllcyA9ICIkZXhwb3J0X2R5bmFtaWMiOyB0aGVuCiAJICAjIE9uIGFsbCBrbm93biBvcGVyYXRpbmcgc3lzdGVtcywgdGhlc2UgYXJlIGlkZW50aWNhbC4KLQkgIGRsbmFtZT0iJHNvbmFtZSIKKwkgIGRsbmFtZT0kc29uYW1lCiAJZmkKICAgICAgIGZpCiAgICAgICA7OwogCiAgICAgb2JqKQotICAgICAgaWYgdGVzdCAtbiAiJGRsZmlsZXMkZGxwcmVmaWxlcyIgfHwgdGVzdCAiJGRsc2VsZiIgIT0gbm87IHRoZW4KLQlmdW5jX3dhcm5pbmcgIlxgLWRsb3BlbicgaXMgaWdub3JlZCBmb3Igb2JqZWN0cyIKKyAgICAgIGlmIHRlc3QgLW4gIiRkbGZpbGVzJGRscHJlZmlsZXMiIHx8IHRlc3Qgbm8gIT0gIiRkbHNlbGYiOyB0aGVuCisJZnVuY193YXJuaW5nICInLWRsb3BlbicgaXMgaWdub3JlZCBmb3Igb2JqZWN0cyIKICAgICAgIGZpCiAKICAgICAgIGNhc2UgIiAkZGVwbGlicyIgaW4KICAgICAgICpcIC1sKiB8ICpcIC1MKikKLQlmdW5jX3dhcm5pbmcgIlxgLWwnIGFuZCBcYC1MJyBhcmUgaWdub3JlZCBmb3Igb2JqZWN0cyIgOzsKKwlmdW5jX3dhcm5pbmcgIictbCcgYW5kICctTCcgYXJlIGlnbm9yZWQgZm9yIG9iamVjdHMiIDs7CiAgICAgICBlc2FjCiAKICAgICAgIHRlc3QgLW4gIiRycGF0aCIgJiYgXAotCWZ1bmNfd2FybmluZyAiXGAtcnBhdGgnIGlzIGlnbm9yZWQgZm9yIG9iamVjdHMiCisJZnVuY193YXJuaW5nICInLXJwYXRoJyBpcyBpZ25vcmVkIGZvciBvYmplY3RzIgogCiAgICAgICB0ZXN0IC1uICIkeHJwYXRoIiAmJiBcCi0JZnVuY193YXJuaW5nICJcYC1SJyBpcyBpZ25vcmVkIGZvciBvYmplY3RzIgorCWZ1bmNfd2FybmluZyAiJy1SJyBpcyBpZ25vcmVkIGZvciBvYmplY3RzIgogCiAgICAgICB0ZXN0IC1uICIkdmluZm8iICYmIFwKLQlmdW5jX3dhcm5pbmcgIlxgLXZlcnNpb24taW5mbycgaXMgaWdub3JlZCBmb3Igb2JqZWN0cyIKKwlmdW5jX3dhcm5pbmcgIictdmVyc2lvbi1pbmZvJyBpcyBpZ25vcmVkIGZvciBvYmplY3RzIgogCiAgICAgICB0ZXN0IC1uICIkcmVsZWFzZSIgJiYgXAotCWZ1bmNfd2FybmluZyAiXGAtcmVsZWFzZScgaXMgaWdub3JlZCBmb3Igb2JqZWN0cyIKKwlmdW5jX3dhcm5pbmcgIictcmVsZWFzZScgaXMgaWdub3JlZCBmb3Igb2JqZWN0cyIKIAogICAgICAgY2FzZSAkb3V0cHV0IGluCiAgICAgICAqLmxvKQogCXRlc3QgLW4gIiRvYmpzJG9sZF9kZXBsaWJzIiAmJiBcCi0JICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgYnVpbGQgbGlicmFyeSBvYmplY3QgXGAkb3V0cHV0JyBmcm9tIG5vbi1saWJ0b29sIG9iamVjdHMiCisJICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgYnVpbGQgbGlicmFyeSBvYmplY3QgJyRvdXRwdXQnIGZyb20gbm9uLWxpYnRvb2wgb2JqZWN0cyIKIAogCWxpYm9iaj0kb3V0cHV0CiAJZnVuY19sbzJvICIkbGlib2JqIgpAQCAtODYxMyw3ICs5ODkzLDcgQEAKIAk7OwogICAgICAgKikKIAlsaWJvYmo9Ci0Jb2JqPSIkb3V0cHV0IgorCW9iaj0kb3V0cHV0CiAJOzsKICAgICAgIGVzYWMKIApAQCAtODYzNiw3ICs5OTE2LDcgQEAKIAkgIGV2YWwgdG1wX3dob2xlX2FyY2hpdmVfZmxhZ3M9XCIkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNcIgogCSAgcmVsb2FkX2NvbnZfb2Jqcz0kcmVsb2FkX29ianNcIGAkRUNITyAiJHRtcF93aG9sZV9hcmNoaXZlX2ZsYWdzIiB8ICRTRUQgJ3N8LHwgfGcnYAogCWVsc2UKLQkgIGdlbnRvcD0iJG91dHB1dF9vYmpkaXIvJHtvYmp9eCIKKwkgIGdlbnRvcD0kb3V0cHV0X29iamRpci8ke29ian14CiAJICBmdW5jX2FwcGVuZCBnZW5lcmF0ZWQgIiAkZ2VudG9wIgogCiAJICBmdW5jX2V4dHJhY3RfYXJjaGl2ZXMgJGdlbnRvcCAkY29udmVuaWVuY2UKQEAgLTg2NDUsMTIgKzk5MjUsMTIgQEAKICAgICAgIGZpCiAKICAgICAgICMgSWYgd2UncmUgbm90IGJ1aWxkaW5nIHNoYXJlZCwgd2UgbmVlZCB0byB1c2Ugbm9uX3BpY19vYmpzCi0gICAgICB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiAhPSB5ZXMgJiYgbGlib2Jqcz0iJG5vbl9waWNfb2JqZWN0cyIKKyAgICAgIHRlc3QgeWVzID0gIiRidWlsZF9saWJ0b29sX2xpYnMiIHx8IGxpYm9ianM9JG5vbl9waWNfb2JqZWN0cwogCiAgICAgICAjIENyZWF0ZSB0aGUgb2xkLXN0eWxlIG9iamVjdC4KLSAgICAgIHJlbG9hZF9vYmpzPSIkb2JqcyRvbGRfZGVwbGlicyAiYCRFQ0hPICIkbGlib2JqcyIgfCAkU1AyTkwgfCAkU0VEICIvXC4ke2xpYmV4dH0kL2Q7IC9cLmxpYiQvZDsgJGxvMm8iIHwgJE5MMlNQYCIgJHJlbG9hZF9jb252X29ianMiICMjIyB0ZXN0c3VpdGU6IHNraXAgbmVzdGVkIHF1b3RpbmcgdGVzdAorICAgICAgcmVsb2FkX29ianM9JG9ianMkb2xkX2RlcGxpYnMnICdgJEVDSE8gIiRsaWJvYmpzIiB8ICRTUDJOTCB8ICRTRUQgIi9cLiRsaWJleHQkL2Q7IC9cLmxpYiQvZDsgJGxvMm8iIHwgJE5MMlNQYCcgJyRyZWxvYWRfY29udl9vYmpzCiAKLSAgICAgIG91dHB1dD0iJG9iaiIKKyAgICAgIG91dHB1dD0kb2JqCiAgICAgICBmdW5jX2V4ZWN1dGVfY21kcyAiJHJlbG9hZF9jbWRzIiAnZXhpdCAkPycKIAogICAgICAgIyBFeGl0IGlmIHdlIGFyZW4ndCBkb2luZyBhIGxpYnJhcnkgb2JqZWN0IGZpbGUuCkBAIC04NjYyLDcgKzk5NDIsNyBAQAogCWV4aXQgJEVYSVRfU1VDQ0VTUwogICAgICAgZmkKIAotICAgICAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgIT0geWVzOyB0aGVuCisgICAgICB0ZXN0IHllcyA9ICIkYnVpbGRfbGlidG9vbF9saWJzIiB8fCB7CiAJaWYgdGVzdCAtbiAiJGdlbnRvcCI7IHRoZW4KIAkgIGZ1bmNfc2hvd19ldmFsICcke1JNfXIgIiRnZW50b3AiJwogCWZpCkBAIC04NjcyLDEyICs5OTUyLDEyIEBACiAJIyAkc2hvdyAiZWNobyB0aW1lc3RhbXAgPiAkbGlib2JqIgogCSMgJG9wdF9kcnlfcnVuIHx8IGV2YWwgImVjaG8gdGltZXN0YW1wID4gJGxpYm9iaiIgfHwgZXhpdCAkPwogCWV4aXQgJEVYSVRfU1VDQ0VTUwotICAgICAgZmkKKyAgICAgIH0KIAotICAgICAgaWYgdGVzdCAtbiAiJHBpY19mbGFnIiB8fCB0ZXN0ICIkcGljX21vZGUiICE9IGRlZmF1bHQ7IHRoZW4KKyAgICAgIGlmIHRlc3QgLW4gIiRwaWNfZmxhZyIgfHwgdGVzdCBkZWZhdWx0ICE9ICIkcGljX21vZGUiOyB0aGVuCiAJIyBPbmx5IGRvIGNvbW1hbmRzIGlmIHdlIHJlYWxseSBoYXZlIGRpZmZlcmVudCBQSUMgb2JqZWN0cy4KIAlyZWxvYWRfb2Jqcz0iJGxpYm9ianMgJHJlbG9hZF9jb252X29ianMiCi0Jb3V0cHV0PSIkbGlib2JqIgorCW91dHB1dD0kbGlib2JqCiAJZnVuY19leGVjdXRlX2NtZHMgIiRyZWxvYWRfY21kcyIgJ2V4aXQgJD8nCiAgICAgICBmaQogCkBAIC04Njk0LDE2ICs5OTc0LDE0IEBACiAJICAgICAgICAgIG91dHB1dD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0LmV4ZTs7CiAgICAgICBlc2FjCiAgICAgICB0ZXN0IC1uICIkdmluZm8iICYmIFwKLQlmdW5jX3dhcm5pbmcgIlxgLXZlcnNpb24taW5mbycgaXMgaWdub3JlZCBmb3IgcHJvZ3JhbXMiCisJZnVuY193YXJuaW5nICInLXZlcnNpb24taW5mbycgaXMgaWdub3JlZCBmb3IgcHJvZ3JhbXMiCiAKICAgICAgIHRlc3QgLW4gIiRyZWxlYXNlIiAmJiBcCi0JZnVuY193YXJuaW5nICJcYC1yZWxlYXNlJyBpcyBpZ25vcmVkIGZvciBwcm9ncmFtcyIKKwlmdW5jX3dhcm5pbmcgIictcmVsZWFzZScgaXMgaWdub3JlZCBmb3IgcHJvZ3JhbXMiCiAKLSAgICAgIHRlc3QgIiRwcmVsb2FkIiA9IHllcyBcCi0gICAgICAgICYmIHRlc3QgIiRkbG9wZW5fc3VwcG9ydCIgPSB1bmtub3duIFwKLQkmJiB0ZXN0ICIkZGxvcGVuX3NlbGYiID0gdW5rbm93biBcCi0JJiYgdGVzdCAiJGRsb3Blbl9zZWxmX3N0YXRpYyIgPSB1bmtub3duICYmIFwKLQkgIGZ1bmNfd2FybmluZyAiXGBMVF9JTklUKFtkbG9wZW5dKScgbm90IHVzZWQuIEFzc3VtaW5nIG5vIGRsb3BlbiBzdXBwb3J0LiIKKyAgICAgICRwcmVsb2FkIFwKKwkmJiB0ZXN0IHVua25vd24sdW5rbm93bix1bmtub3duID0gIiRkbG9wZW5fc3VwcG9ydCwkZGxvcGVuX3NlbGYsJGRsb3Blbl9zZWxmX3N0YXRpYyIgXAorCSYmIGZ1bmNfd2FybmluZyAiJ0xUX0lOSVQoW2Rsb3Blbl0pJyBub3QgdXNlZC4gQXNzdW1pbmcgbm8gZGxvcGVuIHN1cHBvcnQuIgogCiAgICAgICBjYXNlICRob3N0IGluCiAgICAgICAqLSotcmhhcHNvZHkqIHwgKi0qLWRhcndpbjEuWzAxMl0pCkBAIC04NzE3LDExICs5OTk1LDExIEBACiAgICAgICAqLSotZGFyd2luKikKIAkjIERvbid0IGFsbG93IGxhenkgbGlua2luZywgaXQgYnJlYWtzIEMrKyBnbG9iYWwgY29uc3RydWN0b3JzCiAJIyBCdXQgaXMgc3VwcG9zZWRseSBmaXhlZCBvbiAxMC40IG9yIGxhdGVyICh5YXkhKS4KLQlpZiB0ZXN0ICIkdGFnbmFtZSIgPSBDWFggOyB0aGVuCisJaWYgdGVzdCBDWFggPSAiJHRhZ25hbWUiOyB0aGVuCiAJICBjYXNlICR7TUFDT1NYX0RFUExPWU1FTlRfVEFSR0VULTEwLjB9IGluCiAJICAgIDEwLlswMTIzXSkKLQkgICAgICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAke3dsfS1iaW5kX2F0X2xvYWQiCi0JICAgICAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICR7d2x9LWJpbmRfYXRfbG9hZCIKKwkgICAgICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkd2wtYmluZF9hdF9sb2FkIgorCSAgICAgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkd2wtYmluZF9hdF9sb2FkIgogCSAgICA7OwogCSAgZXNhYwogCWZpCkBAIC04NzU3LDcgKzEwMDM1LDcgQEAKIAkqKSBmdW5jX2FwcGVuZCBuZXdfbGlicyAiICRkZXBsaWIiIDs7CiAJZXNhYwogICAgICAgZG9uZQotICAgICAgY29tcGlsZV9kZXBsaWJzPSIkbmV3X2xpYnMiCisgICAgICBjb21waWxlX2RlcGxpYnM9JG5ld19saWJzCiAKIAogICAgICAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJGNvbXBpbGVfZGVwbGlicyIKQEAgLTg3ODEsNyArMTAwNTksNyBAQAogCWlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIjsgdGhlbgogCSAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiOyB0aGVuCiAJICAgIGlmIHRlc3QgLXogIiRoYXJkY29kZV9saWJkaXJzIjsgdGhlbgotCSAgICAgIGhhcmRjb2RlX2xpYmRpcnM9IiRsaWJkaXIiCisJICAgICAgaGFyZGNvZGVfbGliZGlycz0kbGliZGlyCiAJICAgIGVsc2UKIAkgICAgICAjIEp1c3QgYWNjdW11bGF0ZSB0aGUgdW5pcXVlIGxpYmRpcnMuCiAJICAgICAgY2FzZSAkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRoYXJkY29kZV9saWJkaXJzJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IgaW4KQEAgLTg4MDQsNyArMTAwODIsNyBAQAogCWZpCiAJY2FzZSAkaG9zdCBpbgogCSotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1wdzMyKiB8ICotKi1vczIqIHwgKi1jZWdjYyopCi0JICB0ZXN0YmluZGlyPWAke0VDSE99ICIkbGliZGlyIiB8ICR7U0VEfSAtZSAncyovbGliJCovYmluKidgCisJICB0ZXN0YmluZGlyPWAkRUNITyAiJGxpYmRpciIgfCAkU0VEIC1lICdzKi9saWIkKi9iaW4qJ2AKIAkgIGNhc2UgOiRkbGxzZWFyY2hwYXRoOiBpbgogCSAgKiI6JGxpYmRpcjoiKikgOzsKIAkgIDo6KSBkbGxzZWFyY2hwYXRoPSRsaWJkaXI7OwpAQCAtODgyMSwxMCArMTAwOTksMTAgQEAKICAgICAgICMgU3Vic3RpdHV0ZSB0aGUgaGFyZGNvZGVkIGxpYmRpcnMgaW50byB0aGUgcnBhdGguCiAgICAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIgJiYKIAkgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcnMiOyB0aGVuCi0JbGliZGlyPSIkaGFyZGNvZGVfbGliZGlycyIKKwlsaWJkaXI9JGhhcmRjb2RlX2xpYmRpcnMKIAlldmFsIHJwYXRoPVwiICRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKICAgICAgIGZpCi0gICAgICBjb21waWxlX3JwYXRoPSIkcnBhdGgiCisgICAgICBjb21waWxlX3JwYXRoPSRycGF0aAogCiAgICAgICBycGF0aD0KICAgICAgIGhhcmRjb2RlX2xpYmRpcnM9CkBAIC04ODMyLDcgKzEwMTEwLDcgQEAKIAlpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyI7IHRoZW4KIAkgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIjsgdGhlbgogCSAgICBpZiB0ZXN0IC16ICIkaGFyZGNvZGVfbGliZGlycyI7IHRoZW4KLQkgICAgICBoYXJkY29kZV9saWJkaXJzPSIkbGliZGlyIgorCSAgICAgIGhhcmRjb2RlX2xpYmRpcnM9JGxpYmRpcgogCSAgICBlbHNlCiAJICAgICAgIyBKdXN0IGFjY3VtdWxhdGUgdGhlIHVuaXF1ZSBsaWJkaXJzLgogCSAgICAgIGNhc2UgJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkaGFyZGNvZGVfbGliZGlycyRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIGluCkBAIC04ODU3LDQ1ICsxMDEzNSw0MyBAQAogICAgICAgIyBTdWJzdGl0dXRlIHRoZSBoYXJkY29kZWQgbGliZGlycyBpbnRvIHRoZSBycGF0aC4KICAgICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIiAmJgogCSB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlycyI7IHRoZW4KLQlsaWJkaXI9IiRoYXJkY29kZV9saWJkaXJzIgorCWxpYmRpcj0kaGFyZGNvZGVfbGliZGlycwogCWV2YWwgcnBhdGg9XCIgJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgogICAgICAgZmkKLSAgICAgIGZpbmFsaXplX3JwYXRoPSIkcnBhdGgiCisgICAgICBmaW5hbGl6ZV9ycGF0aD0kcnBhdGgKIAotICAgICAgaWYgdGVzdCAtbiAiJGxpYm9ianMiICYmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXM7IHRoZW4KKyAgICAgIGlmIHRlc3QgLW4gIiRsaWJvYmpzIiAmJiB0ZXN0IHllcyA9ICIkYnVpbGRfb2xkX2xpYnMiOyB0aGVuCiAJIyBUcmFuc2Zvcm0gYWxsIHRoZSBsaWJyYXJ5IG9iamVjdHMgaW50byBzdGFuZGFyZCBvYmplY3RzLgogCWNvbXBpbGVfY29tbWFuZD1gJEVDSE8gIiRjb21waWxlX2NvbW1hbmQiIHwgJFNQMk5MIHwgJFNFRCAiJGxvMm8iIHwgJE5MMlNQYAogCWZpbmFsaXplX2NvbW1hbmQ9YCRFQ0hPICIkZmluYWxpemVfY29tbWFuZCIgfCAkU1AyTkwgfCAkU0VEICIkbG8ybyIgfCAkTkwyU1BgCiAgICAgICBmaQogCi0gICAgICBmdW5jX2dlbmVyYXRlX2Rsc3ltcyAiJG91dHB1dG5hbWUiICJAUFJPR1JBTUAiICJubyIKKyAgICAgIGZ1bmNfZ2VuZXJhdGVfZGxzeW1zICIkb3V0cHV0bmFtZSIgIkBQUk9HUkFNQCIgZmFsc2UKIAogICAgICAgIyB0ZW1wbGF0ZSBwcmVsaW5raW5nIHN0ZXAKICAgICAgIGlmIHRlc3QgLW4gIiRwcmVsaW5rX2NtZHMiOyB0aGVuCiAJZnVuY19leGVjdXRlX2NtZHMgIiRwcmVsaW5rX2NtZHMiICdleGl0ICQ/JwogICAgICAgZmkKIAotICAgICAgd3JhcHBlcnNfcmVxdWlyZWQ9eWVzCisgICAgICB3cmFwcGVyc19yZXF1aXJlZD06CiAgICAgICBjYXNlICRob3N0IGluCiAgICAgICAqY2VnY2MqIHwgKm1pbmd3MzJjZSopCiAgICAgICAgICMgRGlzYWJsZSB3cmFwcGVycyBmb3IgY2VnY2MgYW5kIG1pbmd3MzJjZSBob3N0cywgd2UgYXJlIGNyb3NzIGNvbXBpbGluZyBhbnl3YXkuCi0gICAgICAgIHdyYXBwZXJzX3JlcXVpcmVkPW5vCisgICAgICAgIHdyYXBwZXJzX3JlcXVpcmVkPWZhbHNlCiAgICAgICAgIDs7CiAgICAgICAqY3lnd2luKiB8ICptaW5ndyogKQotICAgICAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiAhPSB5ZXM7IHRoZW4KLSAgICAgICAgICB3cmFwcGVyc19yZXF1aXJlZD1ubwotICAgICAgICBmaQorICAgICAgICB0ZXN0IHllcyA9ICIkYnVpbGRfbGlidG9vbF9saWJzIiB8fCB3cmFwcGVyc19yZXF1aXJlZD1mYWxzZQogICAgICAgICA7OwogICAgICAgKikKLSAgICAgICAgaWYgdGVzdCAiJG5lZWRfcmVsaW5rIiA9IG5vIHx8IHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiICE9IHllczsgdGhlbgotICAgICAgICAgIHdyYXBwZXJzX3JlcXVpcmVkPW5vCisgICAgICAgIGlmIHRlc3Qgbm8gPSAiJG5lZWRfcmVsaW5rIiB8fCB0ZXN0IHllcyAhPSAiJGJ1aWxkX2xpYnRvb2xfbGlicyI7IHRoZW4KKyAgICAgICAgICB3cmFwcGVyc19yZXF1aXJlZD1mYWxzZQogICAgICAgICBmaQogICAgICAgICA7OwogICAgICAgZXNhYwotICAgICAgaWYgdGVzdCAiJHdyYXBwZXJzX3JlcXVpcmVkIiA9IG5vOyB0aGVuCisgICAgICAkd3JhcHBlcnNfcmVxdWlyZWQgfHwgewogCSMgUmVwbGFjZSB0aGUgb3V0cHV0IGZpbGUgc3BlY2lmaWNhdGlvbi4KIAljb21waWxlX2NvbW1hbmQ9YCRFQ0hPICIkY29tcGlsZV9jb21tYW5kIiB8ICRTRUQgJ3MlQE9VVFBVVEAlJyIkb3V0cHV0IiclZydgCi0JbGlua19jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kJGNvbXBpbGVfcnBhdGgiCisJbGlua19jb21tYW5kPSRjb21waWxlX2NvbW1hbmQkY29tcGlsZV9ycGF0aAogCiAJIyBXZSBoYXZlIG5vIHVuaW5zdGFsbGVkIGxpYnJhcnkgZGVwZW5kZW5jaWVzLCBzbyBmaW5hbGl6ZSByaWdodCBub3cuCiAJZXhpdF9zdGF0dXM9MApAQCAtODkwOCwxMiArMTAxODQsMTIgQEAKIAlmaQogCiAJIyBEZWxldGUgdGhlIGdlbmVyYXRlZCBmaWxlcy4KLQlpZiB0ZXN0IC1mICIkb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9Uy4ke29iamV4dH0iOyB0aGVuCi0JICBmdW5jX3Nob3dfZXZhbCAnJFJNICIkb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9Uy4ke29iamV4dH0iJworCWlmIHRlc3QgLWYgIiRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX1TLiRvYmpleHQiOyB0aGVuCisJICBmdW5jX3Nob3dfZXZhbCAnJFJNICIkb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9Uy4kb2JqZXh0IicKIAlmaQogCiAJZXhpdCAkZXhpdF9zdGF0dXMKLSAgICAgIGZpCisgICAgICB9CiAKICAgICAgIGlmIHRlc3QgLW4gIiRjb21waWxlX3NobGlicGF0aCRmaW5hbGl6ZV9zaGxpYnBhdGgiOyB0aGVuCiAJY29tcGlsZV9jb21tYW5kPSIkc2hsaWJwYXRoX3Zhcj1cIiRjb21waWxlX3NobGlicGF0aCRmaW5hbGl6ZV9zaGxpYnBhdGhcJCRzaGxpYnBhdGhfdmFyXCIgJGNvbXBpbGVfY29tbWFuZCIKQEAgLTg5NDMsOSArMTAyMTksOSBAQAogCWZpCiAgICAgICBmaQogCi0gICAgICBpZiB0ZXN0ICIkbm9faW5zdGFsbCIgPSB5ZXM7IHRoZW4KKyAgICAgIGlmIHRlc3QgeWVzID0gIiRub19pbnN0YWxsIjsgdGhlbgogCSMgV2UgZG9uJ3QgbmVlZCB0byBjcmVhdGUgYSB3cmFwcGVyIHNjcmlwdC4KLQlsaW5rX2NvbW1hbmQ9IiRjb21waWxlX3ZhciRjb21waWxlX2NvbW1hbmQkY29tcGlsZV9ycGF0aCIKKwlsaW5rX2NvbW1hbmQ9JGNvbXBpbGVfdmFyJGNvbXBpbGVfY29tbWFuZCRjb21waWxlX3JwYXRoCiAJIyBSZXBsYWNlIHRoZSBvdXRwdXQgZmlsZSBzcGVjaWZpY2F0aW9uLgogCWxpbmtfY29tbWFuZD1gJEVDSE8gIiRsaW5rX2NvbW1hbmQiIHwgJFNFRCAncyVAT1VUUFVUQCUnIiRvdXRwdXQiJyVnJ2AKIAkjIERlbGV0ZSB0aGUgb2xkIG91dHB1dCBmaWxlLgpAQCAtODk2MiwyNyArMTAyMzgsMjggQEAKIAlleGl0ICRFWElUX1NVQ0NFU1MKICAgICAgIGZpCiAKLSAgICAgIGlmIHRlc3QgIiRoYXJkY29kZV9hY3Rpb24iID0gcmVsaW5rOyB0aGVuCi0JIyBGYXN0IGluc3RhbGxhdGlvbiBpcyBub3Qgc3VwcG9ydGVkCi0JbGlua19jb21tYW5kPSIkY29tcGlsZV92YXIkY29tcGlsZV9jb21tYW5kJGNvbXBpbGVfcnBhdGgiCi0JcmVsaW5rX2NvbW1hbmQ9IiRmaW5hbGl6ZV92YXIkZmluYWxpemVfY29tbWFuZCRmaW5hbGl6ZV9ycGF0aCIKKyAgICAgIGNhc2UgJGhhcmRjb2RlX2FjdGlvbiwkZmFzdF9pbnN0YWxsIGluCisgICAgICAgIHJlbGluaywqKQorCSAgIyBGYXN0IGluc3RhbGxhdGlvbiBpcyBub3Qgc3VwcG9ydGVkCisJICBsaW5rX2NvbW1hbmQ9JGNvbXBpbGVfdmFyJGNvbXBpbGVfY29tbWFuZCRjb21waWxlX3JwYXRoCisJICByZWxpbmtfY29tbWFuZD0kZmluYWxpemVfdmFyJGZpbmFsaXplX2NvbW1hbmQkZmluYWxpemVfcnBhdGgKIAotCWZ1bmNfd2FybmluZyAidGhpcyBwbGF0Zm9ybSBkb2VzIG5vdCBsaWtlIHVuaW5zdGFsbGVkIHNoYXJlZCBsaWJyYXJpZXMiCi0JZnVuY193YXJuaW5nICJcYCRvdXRwdXQnIHdpbGwgYmUgcmVsaW5rZWQgZHVyaW5nIGluc3RhbGxhdGlvbiIKLSAgICAgIGVsc2UKLQlpZiB0ZXN0ICIkZmFzdF9pbnN0YWxsIiAhPSBubzsgdGhlbgotCSAgbGlua19jb21tYW5kPSIkZmluYWxpemVfdmFyJGNvbXBpbGVfY29tbWFuZCRmaW5hbGl6ZV9ycGF0aCIKLQkgIGlmIHRlc3QgIiRmYXN0X2luc3RhbGwiID0geWVzOyB0aGVuCi0JICAgIHJlbGlua19jb21tYW5kPWAkRUNITyAiJGNvbXBpbGVfdmFyJGNvbXBpbGVfY29tbWFuZCRjb21waWxlX3JwYXRoIiB8ICRTRUQgJ3MlQE9VVFBVVEAlXCRwcm9nZGlyL1wkZmlsZSVnJ2AKLQkgIGVsc2UKLQkgICAgIyBmYXN0X2luc3RhbGwgaXMgc2V0IHRvIG5lZWRsZXNzCi0JICAgIHJlbGlua19jb21tYW5kPQotCSAgZmkKLQllbHNlCi0JICBsaW5rX2NvbW1hbmQ9IiRjb21waWxlX3ZhciRjb21waWxlX2NvbW1hbmQkY29tcGlsZV9ycGF0aCIKLQkgIHJlbGlua19jb21tYW5kPSIkZmluYWxpemVfdmFyJGZpbmFsaXplX2NvbW1hbmQkZmluYWxpemVfcnBhdGgiCi0JZmkKLSAgICAgIGZpCisJICBmdW5jX3dhcm5pbmcgInRoaXMgcGxhdGZvcm0gZG9lcyBub3QgbGlrZSB1bmluc3RhbGxlZCBzaGFyZWQgbGlicmFyaWVzIgorCSAgZnVuY193YXJuaW5nICInJG91dHB1dCcgd2lsbCBiZSByZWxpbmtlZCBkdXJpbmcgaW5zdGFsbGF0aW9uIgorCSAgOzsKKyAgICAgICAgKix5ZXMpCisJICBsaW5rX2NvbW1hbmQ9JGZpbmFsaXplX3ZhciRjb21waWxlX2NvbW1hbmQkZmluYWxpemVfcnBhdGgKKwkgIHJlbGlua19jb21tYW5kPWAkRUNITyAiJGNvbXBpbGVfdmFyJGNvbXBpbGVfY29tbWFuZCRjb21waWxlX3JwYXRoIiB8ICRTRUQgJ3MlQE9VVFBVVEAlXCRwcm9nZGlyL1wkZmlsZSVnJ2AKKyAgICAgICAgICA7OworCSosbm8pCisJICBsaW5rX2NvbW1hbmQ9JGNvbXBpbGVfdmFyJGNvbXBpbGVfY29tbWFuZCRjb21waWxlX3JwYXRoCisJICByZWxpbmtfY29tbWFuZD0kZmluYWxpemVfdmFyJGZpbmFsaXplX2NvbW1hbmQkZmluYWxpemVfcnBhdGgKKyAgICAgICAgICA7OworCSosbmVlZGxlc3MpCisJICBsaW5rX2NvbW1hbmQ9JGZpbmFsaXplX3ZhciRjb21waWxlX2NvbW1hbmQkZmluYWxpemVfcnBhdGgKKwkgIHJlbGlua19jb21tYW5kPQorICAgICAgICAgIDs7CisgICAgICBlc2FjCiAKICAgICAgICMgUmVwbGFjZSB0aGUgb3V0cHV0IGZpbGUgc3BlY2lmaWNhdGlvbi4KICAgICAgIGxpbmtfY29tbWFuZD1gJEVDSE8gIiRsaW5rX2NvbW1hbmQiIHwgJFNFRCAncyVAT1VUUFVUQCUnIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lIiclZydgCkBAIC05MDM5LDggKzEwMzE2LDggQEAKIAkgICAgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAiJG91dHB1dCIgIiIgIi4iCiAJICAgIG91dHB1dF9uYW1lPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAogCSAgICBvdXRwdXRfcGF0aD0kZnVuY19kaXJuYW1lX3Jlc3VsdAotCSAgICBjd3JhcHBlcnNvdXJjZT0iJG91dHB1dF9wYXRoLyRvYmpkaXIvbHQtJG91dHB1dF9uYW1lLmMiCi0JICAgIGN3cmFwcGVyPSIkb3V0cHV0X3BhdGgvJG91dHB1dF9uYW1lLmV4ZSIKKwkgICAgY3dyYXBwZXJzb3VyY2U9JG91dHB1dF9wYXRoLyRvYmpkaXIvbHQtJG91dHB1dF9uYW1lLmMKKwkgICAgY3dyYXBwZXI9JG91dHB1dF9wYXRoLyRvdXRwdXRfbmFtZS5leGUKIAkgICAgJFJNICRjd3JhcHBlcnNvdXJjZSAkY3dyYXBwZXIKIAkgICAgdHJhcCAiJFJNICRjd3JhcHBlcnNvdXJjZSAkY3dyYXBwZXI7IGV4aXQgJEVYSVRfRkFJTFVSRSIgMSAyIDE1CiAKQEAgLTkwNjEsNyArMTAzMzgsNyBAQAogCSAgICB0cmFwICIkUk0gJGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0OyBleGl0ICRFWElUX0ZBSUxVUkUiIDEgMiAxNQogCSAgICAkb3B0X2RyeV9ydW4gfHwgewogCSAgICAgICMgbm90ZTogdGhpcyBzY3JpcHQgd2lsbCBub3QgYmUgZXhlY3V0ZWQsIHNvIGRvIG5vdCBjaG1vZC4KLQkgICAgICBpZiB0ZXN0ICJ4JGJ1aWxkIiA9ICJ4JGhvc3QiIDsgdGhlbgorCSAgICAgIGlmIHRlc3QgIngkYnVpbGQiID0gIngkaG9zdCI7IHRoZW4KIAkJJGN3cmFwcGVyIC0tbHQtZHVtcC1zY3JpcHQgPiAkZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZV9yZXN1bHQKIAkgICAgICBlbHNlCiAJCWZ1bmNfZW1pdF93cmFwcGVyIG5vID4gJGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0CkBAIC05MDg0LDI1ICsxMDM2MSwyNyBAQAogICAgICMgU2VlIGlmIHdlIG5lZWQgdG8gYnVpbGQgYW4gb2xkLWZhc2hpb25lZCBhcmNoaXZlLgogICAgIGZvciBvbGRsaWIgaW4gJG9sZGxpYnM7IGRvCiAKLSAgICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0gY29udmVuaWVuY2U7IHRoZW4KLQlvbGRvYmpzPSIkbGlib2Jqc19zYXZlICRzeW1maWxlb2JqIgotCWFkZGxpYnM9IiRjb252ZW5pZW5jZSIKLQlidWlsZF9saWJ0b29sX2xpYnM9bm8KLSAgICAgIGVsc2UKLQlpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IG1vZHVsZTsgdGhlbgotCSAgb2xkb2Jqcz0iJGxpYm9ianNfc2F2ZSIKKyAgICAgIGNhc2UgJGJ1aWxkX2xpYnRvb2xfbGlicyBpbgorICAgICAgICBjb252ZW5pZW5jZSkKKwkgIG9sZG9ianM9IiRsaWJvYmpzX3NhdmUgJHN5bWZpbGVvYmoiCisJICBhZGRsaWJzPSRjb252ZW5pZW5jZQogCSAgYnVpbGRfbGlidG9vbF9saWJzPW5vCi0JZWxzZQorCSAgOzsKKwltb2R1bGUpCisJICBvbGRvYmpzPSRsaWJvYmpzX3NhdmUKKwkgIGFkZGxpYnM9JG9sZF9jb252ZW5pZW5jZQorCSAgYnVpbGRfbGlidG9vbF9saWJzPW5vCisgICAgICAgICAgOzsKKwkqKQogCSAgb2xkb2Jqcz0iJG9sZF9kZXBsaWJzICRub25fcGljX29iamVjdHMiCi0JICBpZiB0ZXN0ICIkcHJlbG9hZCIgPSB5ZXMgJiYgdGVzdCAtZiAiJHN5bWZpbGVvYmoiOyB0aGVuCi0JICAgIGZ1bmNfYXBwZW5kIG9sZG9ianMgIiAkc3ltZmlsZW9iaiIKLQkgIGZpCi0JZmkKLQlhZGRsaWJzPSIkb2xkX2NvbnZlbmllbmNlIgotICAgICAgZmkKKwkgICRwcmVsb2FkICYmIHRlc3QgLWYgIiRzeW1maWxlb2JqIiBcCisJICAgICYmIGZ1bmNfYXBwZW5kIG9sZG9ianMgIiAkc3ltZmlsZW9iaiIKKwkgIGFkZGxpYnM9JG9sZF9jb252ZW5pZW5jZQorCSAgOzsKKyAgICAgIGVzYWMKIAogICAgICAgaWYgdGVzdCAtbiAiJGFkZGxpYnMiOyB0aGVuCi0JZ2VudG9wPSIkb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9eCIKKwlnZW50b3A9JG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfXgKIAlmdW5jX2FwcGVuZCBnZW5lcmF0ZWQgIiAkZ2VudG9wIgogCiAJZnVuY19leHRyYWN0X2FyY2hpdmVzICRnZW50b3AgJGFkZGxpYnMKQEAgLTkxMTAsMTMgKzEwMzg5LDEzIEBACiAgICAgICBmaQogCiAgICAgICAjIERvIGVhY2ggY29tbWFuZCBpbiB0aGUgYXJjaGl2ZSBjb21tYW5kcy4KLSAgICAgIGlmIHRlc3QgLW4gIiRvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzIiAmJiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllczsgdGhlbgorICAgICAgaWYgdGVzdCAtbiAiJG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMiICYmIHRlc3QgeWVzID0gIiRidWlsZF9saWJ0b29sX2xpYnMiOyB0aGVuCiAJY21kcz0kb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcwogICAgICAgZWxzZQogCiAJIyBBZGQgYW55IG9iamVjdHMgZnJvbSBwcmVsb2FkZWQgY29udmVuaWVuY2UgbGlicmFyaWVzCiAJaWYgdGVzdCAtbiAiJGRscHJlZmlsZXMiOyB0aGVuCi0JICBnZW50b3A9IiRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX14IgorCSAgZ2VudG9wPSRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX14CiAJICBmdW5jX2FwcGVuZCBnZW5lcmF0ZWQgIiAkZ2VudG9wIgogCiAJICBmdW5jX2V4dHJhY3RfYXJjaGl2ZXMgJGdlbnRvcCAkZGxwcmVmaWxlcwpAQCAtOTEzNyw3ICsxMDQxNiw3IEBACiAJICA6CiAJZWxzZQogCSAgZWNobyAiY29weWluZyBzZWxlY3RlZCBvYmplY3QgZmlsZXMgdG8gYXZvaWQgYmFzZW5hbWUgY29uZmxpY3RzLi4uIgotCSAgZ2VudG9wPSIkb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9eCIKKwkgIGdlbnRvcD0kb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9eAogCSAgZnVuY19hcHBlbmQgZ2VuZXJhdGVkICIgJGdlbnRvcCIKIAkgIGZ1bmNfbWtkaXJfcCAiJGdlbnRvcCIKIAkgIHNhdmVfb2xkb2Jqcz0kb2xkb2JqcwpAQCAtOTE0Niw3ICsxMDQyNSw3IEBACiAJICBmb3Igb2JqIGluICRzYXZlX29sZG9ianMKIAkgIGRvCiAJICAgIGZ1bmNfYmFzZW5hbWUgIiRvYmoiCi0JICAgIG9iamJhc2U9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKwkgICAgb2JqYmFzZT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKIAkgICAgY2FzZSAiICRvbGRvYmpzICIgaW4KIAkgICAgIiAiKSBvbGRvYmpzPSRvYmogOzsKIAkgICAgKltcIC9dIiRvYmpiYXNlICIqKQpAQCAtOTIxNSwxOCArMTA0OTQsMTggQEAKIAkgICAgZWxzZQogCSAgICAgICMgdGhlIGFib3ZlIGNvbW1hbmQgc2hvdWxkIGJlIHVzZWQgYmVmb3JlIGl0IGdldHMgdG9vIGxvbmcKIAkgICAgICBvbGRvYmpzPSRvYmpsaXN0Ci0JICAgICAgaWYgdGVzdCAiJG9iaiIgPSAiJGxhc3Rfb2xkb2JqIiA7IHRoZW4KKwkgICAgICBpZiB0ZXN0ICIkb2JqIiA9ICIkbGFzdF9vbGRvYmoiOyB0aGVuCiAJCVJBTkxJQj0kc2F2ZV9SQU5MSUIKIAkgICAgICBmaQogCSAgICAgIHRlc3QgLXogIiRjb25jYXRfY21kcyIgfHwgY29uY2F0X2NtZHM9JGNvbmNhdF9jbWRzfgotCSAgICAgIGV2YWwgY29uY2F0X2NtZHM9XCJcJHtjb25jYXRfY21kc30kb2xkX2FyY2hpdmVfY21kc1wiCisJICAgICAgZXZhbCBjb25jYXRfY21kcz1cIlwkY29uY2F0X2NtZHMkb2xkX2FyY2hpdmVfY21kc1wiCiAJICAgICAgb2JqbGlzdD0KIAkgICAgICBsZW49JGxlbjAKIAkgICAgZmkKIAkgIGRvbmUKIAkgIFJBTkxJQj0kc2F2ZV9SQU5MSUIKIAkgIG9sZG9ianM9JG9iamxpc3QKLQkgIGlmIHRlc3QgIlgkb2xkb2JqcyIgPSAiWCIgOyB0aGVuCisJICBpZiB0ZXN0IC16ICIkb2xkb2JqcyI7IHRoZW4KIAkgICAgZXZhbCBjbWRzPVwiXCRjb25jYXRfY21kc1wiCiAJICBlbHNlCiAJICAgIGV2YWwgY21kcz1cIlwkY29uY2F0X2NtZHN+XCRvbGRfYXJjaGl2ZV9jbWRzXCIKQEAgLTkyNDMsNyArMTA1MjIsNyBAQAogICAgIGNhc2UgJG91dHB1dCBpbgogICAgICoubGEpCiAgICAgICBvbGRfbGlicmFyeT0KLSAgICAgIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXMgJiYgb2xkX2xpYnJhcnk9IiRsaWJuYW1lLiRsaWJleHQiCisgICAgICB0ZXN0IHllcyA9ICIkYnVpbGRfb2xkX2xpYnMiICYmIG9sZF9saWJyYXJ5PSRsaWJuYW1lLiRsaWJleHQKICAgICAgIGZ1bmNfdmVyYm9zZSAiY3JlYXRpbmcgJG91dHB1dCIKIAogICAgICAgIyBQcmVzZXJ2ZSBhbnkgdmFyaWFibGVzIHRoYXQgbWF5IGFmZmVjdCBjb21waWxlciBiZWhhdmlvcgpAQCAtOTI1OCwzMSArMTA1MzcsMzEgQEAKIAlmaQogICAgICAgZG9uZQogICAgICAgIyBRdW90ZSB0aGUgbGluayBjb21tYW5kIGZvciBzaGlwcGluZy4KLSAgICAgIHJlbGlua19jb21tYW5kPSIoY2QgYHB3ZGA7ICRTSEVMTCAkcHJvZ3BhdGggJHByZXNlcnZlX2FyZ3MgLS1tb2RlPXJlbGluayAkbGlidG9vbF9hcmdzIEBpbnN0X3ByZWZpeF9kaXJAKSIKKyAgICAgIHJlbGlua19jb21tYW5kPSIoY2QgYHB3ZGA7ICRTSEVMTCBcIiRwcm9ncGF0aFwiICRwcmVzZXJ2ZV9hcmdzIC0tbW9kZT1yZWxpbmsgJGxpYnRvb2xfYXJncyBAaW5zdF9wcmVmaXhfZGlyQCkiCiAgICAgICByZWxpbmtfY29tbWFuZD1gJEVDSE8gIiRyZWxpbmtfY29tbWFuZCIgfCAkU0VEICIkc2VkX3F1b3RlX3N1YnN0ImAKLSAgICAgIGlmIHRlc3QgIiRoYXJkY29kZV9hdXRvbWF0aWMiID0geWVzIDsgdGhlbgorICAgICAgaWYgdGVzdCB5ZXMgPSAiJGhhcmRjb2RlX2F1dG9tYXRpYyI7IHRoZW4KIAlyZWxpbmtfY29tbWFuZD0KICAgICAgIGZpCiAKICAgICAgICMgT25seSBjcmVhdGUgdGhlIG91dHB1dCBpZiBub3QgYSBkcnkgcnVuLgogICAgICAgJG9wdF9kcnlfcnVuIHx8IHsKIAlmb3IgaW5zdGFsbGVkIGluIG5vIHllczsgZG8KLQkgIGlmIHRlc3QgIiRpbnN0YWxsZWQiID0geWVzOyB0aGVuCisJICBpZiB0ZXN0IHllcyA9ICIkaW5zdGFsbGVkIjsgdGhlbgogCSAgICBpZiB0ZXN0IC16ICIkaW5zdGFsbF9saWJkaXIiOyB0aGVuCiAJICAgICAgYnJlYWsKIAkgICAgZmkKLQkgICAgb3V0cHV0PSIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZSJpCisJICAgIG91dHB1dD0kb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9aQogCSAgICAjIFJlcGxhY2UgYWxsIHVuaW5zdGFsbGVkIGxpYnRvb2wgbGlicmFyaWVzIHdpdGggdGhlIGluc3RhbGxlZCBvbmVzCiAJICAgIG5ld2RlcGVuZGVuY3lfbGlicz0KIAkgICAgZm9yIGRlcGxpYiBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbwogCSAgICAgIGNhc2UgJGRlcGxpYiBpbgogCSAgICAgICoubGEpCiAJCWZ1bmNfYmFzZW5hbWUgIiRkZXBsaWIiCi0JCW5hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKwkJbmFtZT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKIAkJZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRkZXBsaWIiCi0JCWV2YWwgbGliZGlyPWAke1NFRH0gLW4gLWUgJ3MvXmxpYmRpcj1cKC4qXCkkL1wxL3AnICRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHRgCisJCWV2YWwgbGliZGlyPWAkU0VEIC1uIC1lICdzL15saWJkaXI9XCguKlwpJC9cMS9wJyAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0YAogCQl0ZXN0IC16ICIkbGliZGlyIiAmJiBcCi0JCSAgZnVuY19mYXRhbF9lcnJvciAiXGAkZGVwbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCisJCSAgZnVuY19mYXRhbF9lcnJvciAiJyRkZXBsaWInIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKIAkJZnVuY19hcHBlbmQgbmV3ZGVwZW5kZW5jeV9saWJzICIgJHtsdF9zeXNyb290Ois9fSRsaWJkaXIvJG5hbWUiCiAJCTs7CiAJICAgICAgLUwqKQpAQCAtOTI5OCwyMyArMTA1NzcsMjMgQEAKIAkgICAgICAqKSBmdW5jX2FwcGVuZCBuZXdkZXBlbmRlbmN5X2xpYnMgIiAkZGVwbGliIiA7OwogCSAgICAgIGVzYWMKIAkgICAgZG9uZQotCSAgICBkZXBlbmRlbmN5X2xpYnM9IiRuZXdkZXBlbmRlbmN5X2xpYnMiCisJICAgIGRlcGVuZGVuY3lfbGlicz0kbmV3ZGVwZW5kZW5jeV9saWJzCiAJICAgIG5ld2RsZmlsZXM9CiAKIAkgICAgZm9yIGxpYiBpbiAkZGxmaWxlczsgZG8KIAkgICAgICBjYXNlICRsaWIgaW4KIAkgICAgICAqLmxhKQogCSAgICAgICAgZnVuY19iYXNlbmFtZSAiJGxpYiIKLQkJbmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgotCQlldmFsIGxpYmRpcj1gJHtTRUR9IC1uIC1lICdzL15saWJkaXI9XCguKlwpJC9cMS9wJyAkbGliYAorCQluYW1lPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAorCQlldmFsIGxpYmRpcj1gJFNFRCAtbiAtZSAncy9ebGliZGlyPVwoLipcKSQvXDEvcCcgJGxpYmAKIAkJdGVzdCAteiAiJGxpYmRpciIgJiYgXAotCQkgIGZ1bmNfZmF0YWxfZXJyb3IgIlxgJGxpYicgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgorCQkgIGZ1bmNfZmF0YWxfZXJyb3IgIickbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCiAJCWZ1bmNfYXBwZW5kIG5ld2RsZmlsZXMgIiAke2x0X3N5c3Jvb3Q6Kz19JGxpYmRpci8kbmFtZSIKIAkJOzsKIAkgICAgICAqKSBmdW5jX2FwcGVuZCBuZXdkbGZpbGVzICIgJGxpYiIgOzsKIAkgICAgICBlc2FjCiAJICAgIGRvbmUKLQkgICAgZGxmaWxlcz0iJG5ld2RsZmlsZXMiCisJICAgIGRsZmlsZXM9JG5ld2RsZmlsZXMKIAkgICAgbmV3ZGxwcmVmaWxlcz0KIAkgICAgZm9yIGxpYiBpbiAkZGxwcmVmaWxlczsgZG8KIAkgICAgICBjYXNlICRsaWIgaW4KQEAgLTkzMjQsMzQgKzEwNjAzLDM0IEBACiAJCSMgZGlkbid0IGFscmVhZHkgbGluayB0aGUgcHJlb3BlbmVkIG9iamVjdHMgZGlyZWN0bHkgaW50bwogCQkjIHRoZSBsaWJyYXJ5OgogCQlmdW5jX2Jhc2VuYW1lICIkbGliIgotCQluYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCi0JCWV2YWwgbGliZGlyPWAke1NFRH0gLW4gLWUgJ3MvXmxpYmRpcj1cKC4qXCkkL1wxL3AnICRsaWJgCisJCW5hbWU9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0CisJCWV2YWwgbGliZGlyPWAkU0VEIC1uIC1lICdzL15saWJkaXI9XCguKlwpJC9cMS9wJyAkbGliYAogCQl0ZXN0IC16ICIkbGliZGlyIiAmJiBcCi0JCSAgZnVuY19mYXRhbF9lcnJvciAiXGAkbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCisJCSAgZnVuY19mYXRhbF9lcnJvciAiJyRsaWInIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKIAkJZnVuY19hcHBlbmQgbmV3ZGxwcmVmaWxlcyAiICR7bHRfc3lzcm9vdDorPX0kbGliZGlyLyRuYW1lIgogCQk7OwogCSAgICAgIGVzYWMKIAkgICAgZG9uZQotCSAgICBkbHByZWZpbGVzPSIkbmV3ZGxwcmVmaWxlcyIKKwkgICAgZGxwcmVmaWxlcz0kbmV3ZGxwcmVmaWxlcwogCSAgZWxzZQogCSAgICBuZXdkbGZpbGVzPQogCSAgICBmb3IgbGliIGluICRkbGZpbGVzOyBkbwogCSAgICAgIGNhc2UgJGxpYiBpbgotCQlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIGFicz0iJGxpYiIgOzsKKwkJW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSBhYnM9JGxpYiA7OwogCQkqKSBhYnM9YHB3ZGAiLyRsaWIiIDs7CiAJICAgICAgZXNhYwogCSAgICAgIGZ1bmNfYXBwZW5kIG5ld2RsZmlsZXMgIiAkYWJzIgogCSAgICBkb25lCi0JICAgIGRsZmlsZXM9IiRuZXdkbGZpbGVzIgorCSAgICBkbGZpbGVzPSRuZXdkbGZpbGVzCiAJICAgIG5ld2RscHJlZmlsZXM9CiAJICAgIGZvciBsaWIgaW4gJGRscHJlZmlsZXM7IGRvCiAJICAgICAgY2FzZSAkbGliIGluCi0JCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgYWJzPSIkbGliIiA7OworCQlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIGFicz0kbGliIDs7CiAJCSopIGFicz1gcHdkYCIvJGxpYiIgOzsKIAkgICAgICBlc2FjCiAJICAgICAgZnVuY19hcHBlbmQgbmV3ZGxwcmVmaWxlcyAiICRhYnMiCiAJICAgIGRvbmUKLQkgICAgZGxwcmVmaWxlcz0iJG5ld2RscHJlZmlsZXMiCisJICAgIGRscHJlZmlsZXM9JG5ld2RscHJlZmlsZXMKIAkgIGZpCiAJICAkUk0gJG91dHB1dAogCSAgIyBwbGFjZSBkbG5hbWUgaW4gY29ycmVjdCBwb3NpdGlvbiBmb3IgY3lnd2luCkBAIC05MzY3LDEwICsxMDY0Niw5IEBACiAJICBjYXNlICRob3N0LCRvdXRwdXQsJGluc3RhbGxlZCwkbW9kdWxlLCRkbG5hbWUgaW4KIAkgICAgKmN5Z3dpbiosKmxhaSx5ZXMsbm8sKi5kbGwgfCAqbWluZ3cqLCpsYWkseWVzLG5vLCouZGxsIHwgKmNlZ2NjKiwqbGFpLHllcyxubywqLmRsbCkKIAkgICAgICAjIElmIGEgLWJpbmRpciBhcmd1bWVudCB3YXMgc3VwcGxpZWQsIHBsYWNlIHRoZSBkbGwgdGhlcmUuCi0JICAgICAgaWYgdGVzdCAieCRiaW5kaXIiICE9IHggOwotCSAgICAgIHRoZW4KKwkgICAgICBpZiB0ZXN0IC1uICIkYmluZGlyIjsgdGhlbgogCQlmdW5jX3JlbGF0aXZlX3BhdGggIiRpbnN0YWxsX2xpYmRpciIgIiRiaW5kaXIiCi0JCXRkbG5hbWU9JGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQkZGxuYW1lCisJCXRkbG5hbWU9JGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQvJGRsbmFtZQogCSAgICAgIGVsc2UKIAkJIyBPdGhlcndpc2UgZmFsbCBiYWNrIG9uIGhldXJpc3RpYy4KIAkJdGRsbmFtZT0uLi9iaW4vJGRsbmFtZQpAQCAtOTM3OSw3ICsxMDY1Nyw3IEBACiAJICBlc2FjCiAJICAkRUNITyA+ICRvdXRwdXQgIlwKICMgJG91dHB1dG5hbWUgLSBhIGxpYnRvb2wgbGlicmFyeSBmaWxlCi0jIEdlbmVyYXRlZCBieSAkUFJPR1JBTSAoR05VICRQQUNLQUdFJFRJTUVTVEFNUCkgJFZFUlNJT04KKyMgR2VuZXJhdGVkIGJ5ICRQUk9HUkFNIChHTlUgJFBBQ0tBR0UpICRWRVJTSU9OCiAjCiAjIFBsZWFzZSBETyBOT1QgZGVsZXRlIHRoaXMgZmlsZSEKICMgSXQgaXMgbmVjZXNzYXJ5IGZvciBsaW5raW5nIHRoZSBsaWJyYXJ5LgpAQCAtOTM5Myw3ICsxMDY3MSw3IEBACiAjIFRoZSBuYW1lIG9mIHRoZSBzdGF0aWMgYXJjaGl2ZS4KIG9sZF9saWJyYXJ5PSckb2xkX2xpYnJhcnknCiAKLSMgTGlua2VyIGZsYWdzIHRoYXQgY2FuIG5vdCBnbyBpbiBkZXBlbmRlbmN5X2xpYnMuCisjIExpbmtlciBmbGFncyB0aGF0IGNhbm5vdCBnbyBpbiBkZXBlbmRlbmN5X2xpYnMuCiBpbmhlcml0ZWRfbGlua2VyX2ZsYWdzPSckbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MnCiAKICMgTGlicmFyaWVzIHRoYXQgdGhpcyBvbmUgZGVwZW5kcyB1cG9uLgpAQCAtOTQxOSw3ICsxMDY5Nyw3IEBACiAKICMgRGlyZWN0b3J5IHRoYXQgdGhpcyBsaWJyYXJ5IG5lZWRzIHRvIGJlIGluc3RhbGxlZCBpbjoKIGxpYmRpcj0nJGluc3RhbGxfbGliZGlyJyIKLQkgIGlmIHRlc3QgIiRpbnN0YWxsZWQiID0gbm8gJiYgdGVzdCAiJG5lZWRfcmVsaW5rIiA9IHllczsgdGhlbgorCSAgaWYgdGVzdCBubyx5ZXMgPSAiJGluc3RhbGxlZCwkbmVlZF9yZWxpbmsiOyB0aGVuCiAJICAgICRFQ0hPID4+ICRvdXRwdXQgIlwKIHJlbGlua19jb21tYW5kPVwiJHJlbGlua19jb21tYW5kXCIiCiAJICBmaQpAQCAtOTQzNCwyNyArMTA3MTIsMjkgQEAKICAgICBleGl0ICRFWElUX1NVQ0NFU1MKIH0KIAoteyB0ZXN0ICIkb3B0X21vZGUiID0gbGluayB8fCB0ZXN0ICIkb3B0X21vZGUiID0gcmVsaW5rOyB9ICYmCi0gICAgZnVuY19tb2RlX2xpbmsgJHsxKyIkQCJ9CitpZiB0ZXN0IGxpbmsgPSAiJG9wdF9tb2RlIiB8fCB0ZXN0IHJlbGluayA9ICIkb3B0X21vZGUiOyB0aGVuCisgIGZ1bmNfbW9kZV9saW5rICR7MSsiJEAifQorZmkKIAogCiAjIGZ1bmNfbW9kZV91bmluc3RhbGwgYXJnLi4uCiBmdW5jX21vZGVfdW5pbnN0YWxsICgpCiB7Ci0gICAgJG9wdF9kZWJ1ZwotICAgIFJNPSIkbm9ub3B0IgorICAgICRkZWJ1Z19jbWQKKworICAgIFJNPSRub25vcHQKICAgICBmaWxlcz0KLSAgICBybWZvcmNlPQorICAgIHJtZm9yY2U9ZmFsc2UKICAgICBleGl0X3N0YXR1cz0wCiAKICAgICAjIFRoaXMgdmFyaWFibGUgdGVsbHMgd3JhcHBlciBzY3JpcHRzIGp1c3QgdG8gc2V0IHZhcmlhYmxlcyByYXRoZXIKICAgICAjIHRoYW4gcnVubmluZyB0aGVpciBwcm9ncmFtcy4KLSAgICBsaWJ0b29sX2luc3RhbGxfbWFnaWM9IiRtYWdpYyIKKyAgICBsaWJ0b29sX2luc3RhbGxfbWFnaWM9JG1hZ2ljCiAKICAgICBmb3IgYXJnCiAgICAgZG8KICAgICAgIGNhc2UgJGFyZyBpbgotICAgICAgLWYpIGZ1bmNfYXBwZW5kIFJNICIgJGFyZyI7IHJtZm9yY2U9eWVzIDs7CisgICAgICAtZikgZnVuY19hcHBlbmQgUk0gIiAkYXJnIjsgcm1mb3JjZT06IDs7CiAgICAgICAtKikgZnVuY19hcHBlbmQgUk0gIiAkYXJnIiA7OwogICAgICAgKikgZnVuY19hcHBlbmQgZmlsZXMgIiAkYXJnIiA7OwogICAgICAgZXNhYwpAQCAtOTQ2NywxOCArMTA3NDcsMTggQEAKIAogICAgIGZvciBmaWxlIGluICRmaWxlczsgZG8KICAgICAgIGZ1bmNfZGlybmFtZSAiJGZpbGUiICIiICIuIgotICAgICAgZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKLSAgICAgIGlmIHRlc3QgIlgkZGlyIiA9IFguOyB0aGVuCi0Jb2Rpcj0iJG9iamRpciIKKyAgICAgIGRpcj0kZnVuY19kaXJuYW1lX3Jlc3VsdAorICAgICAgaWYgdGVzdCAuID0gIiRkaXIiOyB0aGVuCisJb2Rpcj0kb2JqZGlyCiAgICAgICBlbHNlCi0Jb2Rpcj0iJGRpci8kb2JqZGlyIgorCW9kaXI9JGRpci8kb2JqZGlyCiAgICAgICBmaQogICAgICAgZnVuY19iYXNlbmFtZSAiJGZpbGUiCi0gICAgICBuYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCi0gICAgICB0ZXN0ICIkb3B0X21vZGUiID0gdW5pbnN0YWxsICYmIG9kaXI9IiRkaXIiCisgICAgICBuYW1lPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAorICAgICAgdGVzdCB1bmluc3RhbGwgPSAiJG9wdF9tb2RlIiAmJiBvZGlyPSRkaXIKIAogICAgICAgIyBSZW1lbWJlciBvZGlyIGZvciByZW1vdmFsIGxhdGVyLCBiZWluZyBjYXJlZnVsIHRvIGF2b2lkIGR1cGxpY2F0ZXMKLSAgICAgIGlmIHRlc3QgIiRvcHRfbW9kZSIgPSBjbGVhbjsgdGhlbgorICAgICAgaWYgdGVzdCBjbGVhbiA9ICIkb3B0X21vZGUiOyB0aGVuCiAJY2FzZSAiICRybWRpcnMgIiBpbgogCSAgKiIgJG9kaXIgIiopIDs7CiAJICAqKSBmdW5jX2FwcGVuZCBybWRpcnMgIiAkb2RpciIgOzsKQEAgLTk0OTMsMTEgKzEwNzczLDExIEBACiAgICAgICBlbGlmIHRlc3QgLWQgIiRmaWxlIjsgdGhlbgogCWV4aXRfc3RhdHVzPTEKIAljb250aW51ZQotICAgICAgZWxpZiB0ZXN0ICIkcm1mb3JjZSIgPSB5ZXM7IHRoZW4KKyAgICAgIGVsaWYgJHJtZm9yY2U7IHRoZW4KIAljb250aW51ZQogICAgICAgZmkKIAotICAgICAgcm1maWxlcz0iJGZpbGUiCisgICAgICBybWZpbGVzPSRmaWxlCiAKICAgICAgIGNhc2UgJG5hbWUgaW4KICAgICAgICoubGEpCkBAIC05NTExLDcgKzEwNzkxLDcgQEAKIAkgIGRvbmUKIAkgIHRlc3QgLW4gIiRvbGRfbGlicmFyeSIgJiYgZnVuY19hcHBlbmQgcm1maWxlcyAiICRvZGlyLyRvbGRfbGlicmFyeSIKIAotCSAgY2FzZSAiJG9wdF9tb2RlIiBpbgorCSAgY2FzZSAkb3B0X21vZGUgaW4KIAkgIGNsZWFuKQogCSAgICBjYXNlICIgJGxpYnJhcnlfbmFtZXMgIiBpbgogCSAgICAqIiAkZGxuYW1lICIqKSA7OwpAQCAtOTUyMiwxMiArMTA4MDIsMTIgQEAKIAkgIHVuaW5zdGFsbCkKIAkgICAgaWYgdGVzdCAtbiAiJGxpYnJhcnlfbmFtZXMiOyB0aGVuCiAJICAgICAgIyBEbyBlYWNoIGNvbW1hbmQgaW4gdGhlIHBvc3R1bmluc3RhbGwgY29tbWFuZHMuCi0JICAgICAgZnVuY19leGVjdXRlX2NtZHMgIiRwb3N0dW5pbnN0YWxsX2NtZHMiICd0ZXN0ICIkcm1mb3JjZSIgPSB5ZXMgfHwgZXhpdF9zdGF0dXM9MScKKwkgICAgICBmdW5jX2V4ZWN1dGVfY21kcyAiJHBvc3R1bmluc3RhbGxfY21kcyIgJyRybWZvcmNlIHx8IGV4aXRfc3RhdHVzPTEnCiAJICAgIGZpCiAKIAkgICAgaWYgdGVzdCAtbiAiJG9sZF9saWJyYXJ5IjsgdGhlbgogCSAgICAgICMgRG8gZWFjaCBjb21tYW5kIGluIHRoZSBvbGRfcG9zdHVuaW5zdGFsbCBjb21tYW5kcy4KLQkgICAgICBmdW5jX2V4ZWN1dGVfY21kcyAiJG9sZF9wb3N0dW5pbnN0YWxsX2NtZHMiICd0ZXN0ICIkcm1mb3JjZSIgPSB5ZXMgfHwgZXhpdF9zdGF0dXM9MScKKwkgICAgICBmdW5jX2V4ZWN1dGVfY21kcyAiJG9sZF9wb3N0dW5pbnN0YWxsX2NtZHMiICckcm1mb3JjZSB8fCBleGl0X3N0YXR1cz0xJwogCSAgICBmaQogCSAgICAjIEZJWE1FOiBzaG91bGQgcmVpbnN0YWxsIHRoZSBiZXN0IHJlbWFpbmluZyBzaGFyZWQgbGlicmFyeS4KIAkgICAgOzsKQEAgLTk1NDMsMjEgKzEwODIzLDE5IEBACiAJICBmdW5jX3NvdXJjZSAkZGlyLyRuYW1lCiAKIAkgICMgQWRkIFBJQyBvYmplY3QgdG8gdGhlIGxpc3Qgb2YgZmlsZXMgdG8gcmVtb3ZlLgotCSAgaWYgdGVzdCAtbiAiJHBpY19vYmplY3QiICYmCi0JICAgICB0ZXN0ICIkcGljX29iamVjdCIgIT0gbm9uZTsgdGhlbgorCSAgaWYgdGVzdCAtbiAiJHBpY19vYmplY3QiICYmIHRlc3Qgbm9uZSAhPSAiJHBpY19vYmplY3QiOyB0aGVuCiAJICAgIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkZGlyLyRwaWNfb2JqZWN0IgogCSAgZmkKIAogCSAgIyBBZGQgbm9uLVBJQyBvYmplY3QgdG8gdGhlIGxpc3Qgb2YgZmlsZXMgdG8gcmVtb3ZlLgotCSAgaWYgdGVzdCAtbiAiJG5vbl9waWNfb2JqZWN0IiAmJgotCSAgICAgdGVzdCAiJG5vbl9waWNfb2JqZWN0IiAhPSBub25lOyB0aGVuCisJICBpZiB0ZXN0IC1uICIkbm9uX3BpY19vYmplY3QiICYmIHRlc3Qgbm9uZSAhPSAiJG5vbl9waWNfb2JqZWN0IjsgdGhlbgogCSAgICBmdW5jX2FwcGVuZCBybWZpbGVzICIgJGRpci8kbm9uX3BpY19vYmplY3QiCiAJICBmaQogCWZpCiAJOzsKIAogICAgICAgKikKLQlpZiB0ZXN0ICIkb3B0X21vZGUiID0gY2xlYW4gOyB0aGVuCisJaWYgdGVzdCBjbGVhbiA9ICIkb3B0X21vZGUiOyB0aGVuCiAJICBub2V4ZW5hbWU9JG5hbWUKIAkgIGNhc2UgJGZpbGUgaW4KIAkgICouZXhlKQpAQCAtOTU4NCwxMiArMTA4NjIsMTIgQEAKIAogCSAgICAjIG5vdGUgJG5hbWUgc3RpbGwgY29udGFpbnMgLmV4ZSBpZiBpdCB3YXMgaW4gJGZpbGUgb3JpZ2luYWxseQogCSAgICAjIGFzIGRvZXMgdGhlIHZlcnNpb24gb2YgJGZpbGUgdGhhdCB3YXMgYWRkZWQgaW50byAkcm1maWxlcwotCSAgICBmdW5jX2FwcGVuZCBybWZpbGVzICIgJG9kaXIvJG5hbWUgJG9kaXIvJHtuYW1lfVMuJHtvYmpleHR9IgotCSAgICBpZiB0ZXN0ICIkZmFzdF9pbnN0YWxsIiA9IHllcyAmJiB0ZXN0IC1uICIkcmVsaW5rX2NvbW1hbmQiOyB0aGVuCisJICAgIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkb2Rpci8kbmFtZSAkb2Rpci8ke25hbWV9Uy4kb2JqZXh0IgorCSAgICBpZiB0ZXN0IHllcyA9ICIkZmFzdF9pbnN0YWxsIiAmJiB0ZXN0IC1uICIkcmVsaW5rX2NvbW1hbmQiOyB0aGVuCiAJICAgICAgZnVuY19hcHBlbmQgcm1maWxlcyAiICRvZGlyL2x0LSRuYW1lIgogCSAgICBmaQotCSAgICBpZiB0ZXN0ICJYJG5vZXhlbmFtZSIgIT0gIlgkbmFtZSIgOyB0aGVuCi0JICAgICAgZnVuY19hcHBlbmQgcm1maWxlcyAiICRvZGlyL2x0LSR7bm9leGVuYW1lfS5jIgorCSAgICBpZiB0ZXN0ICJYJG5vZXhlbmFtZSIgIT0gIlgkbmFtZSI7IHRoZW4KKwkgICAgICBmdW5jX2FwcGVuZCBybWZpbGVzICIgJG9kaXIvbHQtJG5vZXhlbmFtZS5jIgogCSAgICBmaQogCSAgZmkKIAlmaQpAQCAtOTU5OCw3ICsxMDg3Niw3IEBACiAgICAgICBmdW5jX3Nob3dfZXZhbCAiJFJNICRybWZpbGVzIiAnZXhpdF9zdGF0dXM9MScKICAgICBkb25lCiAKLSAgICAjIFRyeSB0byByZW1vdmUgdGhlICR7b2JqZGlyfXMgaW4gdGhlIGRpcmVjdG9yaWVzIHdoZXJlIHdlIGRlbGV0ZWQgZmlsZXMKKyAgICAjIFRyeSB0byByZW1vdmUgdGhlICRvYmpkaXIncyBpbiB0aGUgZGlyZWN0b3JpZXMgd2hlcmUgd2UgZGVsZXRlZCBmaWxlcwogICAgIGZvciBkaXIgaW4gJHJtZGlyczsgZG8KICAgICAgIGlmIHRlc3QgLWQgIiRkaXIiOyB0aGVuCiAJZnVuY19zaG93X2V2YWwgInJtZGlyICRkaXIgPi9kZXYvbnVsbCAyPiYxIgpAQCAtOTYwOCwxNiArMTA4ODYsMTcgQEAKICAgICBleGl0ICRleGl0X3N0YXR1cwogfQogCi17IHRlc3QgIiRvcHRfbW9kZSIgPSB1bmluc3RhbGwgfHwgdGVzdCAiJG9wdF9tb2RlIiA9IGNsZWFuOyB9ICYmCi0gICAgZnVuY19tb2RlX3VuaW5zdGFsbCAkezErIiRAIn0KK2lmIHRlc3QgdW5pbnN0YWxsID0gIiRvcHRfbW9kZSIgfHwgdGVzdCBjbGVhbiA9ICIkb3B0X21vZGUiOyB0aGVuCisgIGZ1bmNfbW9kZV91bmluc3RhbGwgJHsxKyIkQCJ9CitmaQogCiB0ZXN0IC16ICIkb3B0X21vZGUiICYmIHsKLSAgaGVscD0iJGdlbmVyaWNfaGVscCIKKyAgaGVscD0kZ2VuZXJpY19oZWxwCiAgIGZ1bmNfZmF0YWxfaGVscCAieW91IG11c3Qgc3BlY2lmeSBhIE1PREUiCiB9CiAKIHRlc3QgLXogIiRleGVjX2NtZCIgJiYgXAotICBmdW5jX2ZhdGFsX2hlbHAgImludmFsaWQgb3BlcmF0aW9uIG1vZGUgXGAkb3B0X21vZGUnIgorICBmdW5jX2ZhdGFsX2hlbHAgImludmFsaWQgb3BlcmF0aW9uIG1vZGUgJyRvcHRfbW9kZSciCiAKIGlmIHRlc3QgLW4gIiRleGVjX2NtZCI7IHRoZW4KICAgZXZhbCBleGVjICIkZXhlY19jbWQiCkBAIC05NjI4LDcgKzEwOTA3LDcgQEAKIAogCiAjIFRoZSBUQUdzIGJlbG93IGFyZSBkZWZpbmVkIHN1Y2ggdGhhdCB3ZSBuZXZlciBnZXQgaW50byBhIHNpdHVhdGlvbgotIyBpbiB3aGljaCB3ZSBkaXNhYmxlIGJvdGgga2luZHMgb2YgbGlicmFyaWVzLiAgR2l2ZW4gY29uZmxpY3RpbmcKKyMgd2hlcmUgd2UgZGlzYWJsZSBib3RoIGtpbmRzIG9mIGxpYnJhcmllcy4gIEdpdmVuIGNvbmZsaWN0aW5nCiAjIGNob2ljZXMsIHdlIGdvIGZvciBhIHN0YXRpYyBsaWJyYXJ5LCB0aGF0IGlzIHRoZSBtb3N0IHBvcnRhYmxlLAogIyBzaW5jZSB3ZSBjYW4ndCB0ZWxsIHdoZXRoZXIgc2hhcmVkIGxpYnJhcmllcyB3ZXJlIGRpc2FibGVkIGJlY2F1c2UKICMgdGhlIHVzZXIgYXNrZWQgZm9yIHRoYXQgb3IgYmVjYXVzZSB0aGUgcGxhdGZvcm0gZG9lc24ndCBzdXBwb3J0CkBAIC05NjUxLDUgKzEwOTMwLDMgQEAKICMgbW9kZTpzaGVsbC1zY3JpcHQKICMgc2gtaW5kZW50YXRpb246MgogIyBFbmQ6Ci0jIHZpOnN3PTIKLQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9tNC9heF9nY2NfYXJjaGZsYWcubTQgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL200L2F4X2djY19hcmNoZmxhZy5tNAppbmRleCAzZmQwNTBlLi5hYWIyNjYxIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL200L2F4X2djY19hcmNoZmxhZy5tNAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL200L2F4X2djY19hcmNoZmxhZy5tNApAQCAtMTU1LDcgKzE1NSw3IEBACiAgIHNwYXJjKikKICAgICAgQUNfUEFUSF9QUk9HKFtQUlRESUFHXSwgW3BydGRpYWddLCBbcHJ0ZGlhZ10sIFskUEFUSDovdXNyL3BsYXRmb3JtL2B1bmFtZSAtaWAvc2Jpbi86L3Vzci9wbGF0Zm9ybS9gdW5hbWUgLW1gL3NiaW4vXSkKICAgICAgY3B1dHlwZT1gKCgoZ3JlcCBjcHUgL3Byb2MvY3B1aW5mbyB8IGN1dCAtZDogLWYyKSA7ICgkUFJURElBRyAtdiB8Z3JlcCAtaSBzcGFyYykgOyBncmVwIC1pIGNwdSAvdmFyL3J1bi9kbWVzZy5ib290ICkgfCBoZWFkIC1uIDEpIDI+IC9kZXYvbnVsbGAKLSAgICAgY3B1dHlwZT1gZWNobyAiJGNwdXR5cGUiIHwgdHIgLWQgJyAtJyB8dHIgJGFzX2NyX0xFVFRFUlMgJGFzX2NyX2xldHRlcnNgCisgICAgIGNwdXR5cGU9YGVjaG8gIiRjcHV0eXBlIiB8IHRyIC1kICcgLScgfCBzZWQgJ3MvU1BBUkNJSWkvU1BBUkNJSS8nIHwgdHIgJGFzX2NyX0xFVFRFUlMgJGFzX2NyX2xldHRlcnNgCiAgICAgIGNhc2UgJGNwdXR5cGUgaW4KICAgICAgICAgICp1bHRyYXNwYXJjaXYqKSBheF9nY2NfYXJjaD0idWx0cmFzcGFyYzQgdWx0cmFzcGFyYzMgdWx0cmFzcGFyYyB2OSIgOzsKICAgICAgICAgICp1bHRyYXNwYXJjaWlpKikgYXhfZ2NjX2FyY2g9InVsdHJhc3BhcmMzIHVsdHJhc3BhcmMgdjkiIDs7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL200L2xpYnRvb2wubTQgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL200L2xpYnRvb2wubTQKaW5kZXggMzMxOGYyNy4uNGJjNmIyMiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9tNC9saWJ0b29sLm00CisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbTQvbGlidG9vbC5tNApAQCAtMSw4ICsxLDYgQEAKICMgbGlidG9vbC5tNCAtIENvbmZpZ3VyZSBsaWJ0b29sIGZvciB0aGUgaG9zdCBzeXN0ZW0uIC0qLUF1dG9jb25mLSotCiAjCi0jICAgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAzLCAyMDA0LCAyMDA1LAotIyAgICAgICAgICAgICAgICAgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlCi0jICAgICAgICAgICAgICAgICBGb3VuZGF0aW9uLCBJbmMuCisjICAgQ29weXJpZ2h0IChDKSAxOTk2LTIwMDEsIDIwMDMtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KICMgICBXcml0dGVuIGJ5IEdvcmRvbiBNYXR6aWdrZWl0LCAxOTk2CiAjCiAjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGdpdmVzCkBAIC0zOSw3ICszNyw3IEBACiAjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgogXSkKIAotIyBzZXJpYWwgNTcgTFRfSU5JVAorIyBzZXJpYWwgNTggTFRfSU5JVAogCiAKICMgTFRfUFJFUkVRKFZFUlNJT04pCkBAIC05MSw3ICs4OSw3IEBACiBfTFRfU0VUX09QVElPTlMoWyQwXSwgWyQxXSkKIAogIyBUaGlzIGNhbiBiZSB1c2VkIHRvIHJlYnVpbGQgbGlidG9vbCB3aGVuIG5lZWRlZAotTElCVE9PTF9ERVBTPSIkbHRtYWluIgorTElCVE9PTF9ERVBTPSRsdG1haW4KIAogIyBBbHdheXMgdXNlIG91ciBvd24gbGlidG9vbC4KIExJQlRPT0w9JyQoU0hFTEwpICQodG9wX2J1aWxkZGlyKS9saWJ0b29sJwpAQCAtMTMwLDcgKzEyOCw3IEBACiAjIF9MVF9GSUxFVVRJTFNfREVGQVVMVFMKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBJdCBpcyBva2F5IHRvIHVzZSB0aGVzZSBmaWxlIGNvbW1hbmRzIGFuZCBhc3N1bWUgdGhleSBoYXZlIGJlZW4gc2V0Ci0jIHNlbnNpYmx5IGFmdGVyIGBtNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSknLgorIyBzZW5zaWJseSBhZnRlciAnbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pJy4KIG00X2RlZnVuKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSwKIFs6ICR7Q1A9ImNwIC1mIn0KIDogJHtNVj0ibXYgLWYifQpAQCAtMTc5LDEzICsxNzcsMTMgQEAKIG00X3JlcXVpcmUoW19MVF9XSVRIX1NZU1JPT1RdKWRubAogCiBfTFRfQ09ORklHX0xJQlRPT0xfSU5JVChbCi0jIFNlZSBpZiB3ZSBhcmUgcnVubmluZyBvbiB6c2gsIGFuZCBzZXQgdGhlIG9wdGlvbnMgd2hpY2ggYWxsb3cgb3VyCisjIFNlZSBpZiB3ZSBhcmUgcnVubmluZyBvbiB6c2gsIGFuZCBzZXQgdGhlIG9wdGlvbnMgdGhhdCBhbGxvdyBvdXIKICMgY29tbWFuZHMgdGhyb3VnaCB3aXRob3V0IHJlbW92YWwgb2YgXCBlc2NhcGVzIElOSVQuCi1pZiB0ZXN0IC1uICJcJHtaU0hfVkVSU0lPTitzZXR9IiA7IHRoZW4KK2lmIHRlc3QgLW4gIlwke1pTSF9WRVJTSU9OK3NldH0iOyB0aGVuCiAgICBzZXRvcHQgTk9fR0xPQl9TVUJTVAogZmkKIF0pCi1pZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iIDsgdGhlbgoraWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IjsgdGhlbgogICAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKIGZpCiAKQEAgLTE5OCw3ICsxOTYsNyBAQAogICAjIEFJWCBzb21ldGltZXMgaGFzIHByb2JsZW1zIHdpdGggdGhlIEdDQyBjb2xsZWN0MiBwcm9ncmFtLiAgRm9yIHNvbWUKICAgIyByZWFzb24sIGlmIHdlIHNldCB0aGUgQ09MTEVDVF9OQU1FUyBlbnZpcm9ubWVudCB2YXJpYWJsZSwgdGhlIHByb2JsZW1zCiAgICMgdmFuaXNoIGluIGEgcHVmZiBvZiBzbW9rZS4KLSAgaWYgdGVzdCAiWCR7Q09MTEVDVF9OQU1FUytzZXR9IiAhPSBYc2V0OyB0aGVuCisgIGlmIHRlc3Qgc2V0ICE9ICIke0NPTExFQ1RfTkFNRVMrc2V0fSI7IHRoZW4KICAgICBDT0xMRUNUX05BTUVTPQogICAgIGV4cG9ydCBDT0xMRUNUX05BTUVTCiAgIGZpCkBAIC0yMDksMTQgKzIwNywxNCBAQAogb2ZpbGU9bGlidG9vbAogY2FuX2J1aWxkX3NoYXJlZD15ZXMKIAotIyBBbGwga25vd24gbGlua2VycyByZXF1aXJlIGEgYC5hJyBhcmNoaXZlIGZvciBzdGF0aWMgbGlua2luZyAoZXhjZXB0IE1TVkMsCisjIEFsbCBrbm93biBsaW5rZXJzIHJlcXVpcmUgYSAnLmEnIGFyY2hpdmUgZm9yIHN0YXRpYyBsaW5raW5nIChleGNlcHQgTVNWQywKICMgd2hpY2ggbmVlZHMgJy5saWInKS4KIGxpYmV4dD1hCiAKLXdpdGhfZ251X2xkPSIkbHRfY3ZfcHJvZ19nbnVfbGQiCit3aXRoX2dudV9sZD0kbHRfY3ZfcHJvZ19nbnVfbGQKIAotb2xkX0NDPSIkQ0MiCi1vbGRfQ0ZMQUdTPSIkQ0ZMQUdTIgorb2xkX0NDPSRDQworb2xkX0NGTEFHUz0kQ0ZMQUdTCiAKICMgU2V0IHNhbmUgZGVmYXVsdHMgZm9yIHZhcmlvdXMgdmFyaWFibGVzCiB0ZXN0IC16ICIkQ0MiICYmIENDPWNjCkBAIC0yNjksMTQgKzI2NywxNCBAQAogCiAjIF9MVF9QUk9HX0xUTUFJTgogIyAtLS0tLS0tLS0tLS0tLS0KLSMgTm90ZSB0aGF0IHRoaXMgY29kZSBpcyBjYWxsZWQgYm90aCBmcm9tIGBjb25maWd1cmUnLCBhbmQgYGNvbmZpZy5zdGF0dXMnCisjIE5vdGUgdGhhdCB0aGlzIGNvZGUgaXMgY2FsbGVkIGJvdGggZnJvbSAnY29uZmlndXJlJywgYW5kICdjb25maWcuc3RhdHVzJwogIyBub3cgdGhhdCB3ZSB1c2UgQUNfQ09ORklHX0NPTU1BTkRTIHRvIGdlbmVyYXRlIGxpYnRvb2wuICBOb3RhYmx5LAotIyBgY29uZmlnLnN0YXR1cycgaGFzIG5vIHZhbHVlIGZvciBhY19hdXhfZGlyIHVubGVzcyB3ZSBhcmUgdXNpbmcgQXV0b21ha2UsCisjICdjb25maWcuc3RhdHVzJyBoYXMgbm8gdmFsdWUgZm9yIGFjX2F1eF9kaXIgdW5sZXNzIHdlIGFyZSB1c2luZyBBdXRvbWFrZSwKICMgc28gd2UgcGFzcyBhIGNvcHkgYWxvbmcgdG8gbWFrZSBzdXJlIGl0IGhhcyBhIHNlbnNpYmxlIHZhbHVlIGFueXdheS4KIG00X2RlZnVuKFtfTFRfUFJPR19MVE1BSU5dLAogW200X2lmZGVmKFtBQ19SRVFVSVJFX0FVWF9GSUxFXSwgW0FDX1JFUVVJUkVfQVVYX0ZJTEUoW2x0bWFpbi5zaF0pXSlkbmwKIF9MVF9DT05GSUdfTElCVE9PTF9JTklUKFthY19hdXhfZGlyPSckYWNfYXV4X2RpciddKQotbHRtYWluPSIkYWNfYXV4X2Rpci9sdG1haW4uc2giCitsdG1haW49JGFjX2F1eF9kaXIvbHRtYWluLnNoCiBdKSMgX0xUX1BST0dfTFRNQUlOCiAKIApAQCAtMjg2LDcgKzI4NCw3IEBACiAKICMgU28gdGhhdCB3ZSBjYW4gcmVjcmVhdGUgYSBmdWxsIGxpYnRvb2wgc2NyaXB0IGluY2x1ZGluZyBhZGRpdGlvbmFsCiAjIHRhZ3MsIHdlIGFjY3VtdWxhdGUgdGhlIGNodW5rcyBvZiBjb2RlIHRvIHNlbmQgdG8gQUNfQ09ORklHX0NPTU1BTkRTCi0jIGluIG1hY3JvcyBhbmQgdGhlbiBtYWtlIGEgc2luZ2xlIGNhbGwgYXQgdGhlIGVuZCB1c2luZyB0aGUgYGxpYnRvb2wnCisjIGluIG1hY3JvcyBhbmQgdGhlbiBtYWtlIGEgc2luZ2xlIGNhbGwgYXQgdGhlIGVuZCB1c2luZyB0aGUgJ2xpYnRvb2wnCiAjIGxhYmVsLgogCiAKQEAgLTQyMSw4ICs0MTksOCBAQAogCiAjIF9MVF9DT05GSUdfU1RBVFVTX0RFQ0xBUkUoW1ZBUk5BTUVdKQogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgUXVvdGUgYSB2YXJpYWJsZSB2YWx1ZSwgYW5kIGZvcndhcmQgaXQgdG8gYGNvbmZpZy5zdGF0dXMnIHNvIHRoYXQgaXRzCi0jIGRlY2xhcmF0aW9uIHRoZXJlIHdpbGwgaGF2ZSB0aGUgc2FtZSB2YWx1ZSBhcyBpbiBgY29uZmlndXJlJy4gIFZBUk5BTUUKKyMgUXVvdGUgYSB2YXJpYWJsZSB2YWx1ZSwgYW5kIGZvcndhcmQgaXQgdG8gJ2NvbmZpZy5zdGF0dXMnIHNvIHRoYXQgaXRzCisjIGRlY2xhcmF0aW9uIHRoZXJlIHdpbGwgaGF2ZSB0aGUgc2FtZSB2YWx1ZSBhcyBpbiAnY29uZmlndXJlJy4gIFZBUk5BTUUKICMgbXVzdCBoYXZlIGEgc2luZ2xlIHF1b3RlIGRlbGltaXRlZCB2YWx1ZSBmb3IgdGhpcyB0byB3b3JrLgogbTRfZGVmaW5lKFtfTFRfQ09ORklHX1NUQVRVU19ERUNMQVJFXSwKIFskMT0nYCRFQ0hPICIkXVskMSIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnXSkKQEAgLTQ0Niw3ICs0NDQsNyBAQAogIyBPdXRwdXQgY29tbWVudCBhbmQgbGlzdCBvZiB0YWdzIHN1cHBvcnRlZCBieSB0aGUgc2NyaXB0CiBtNF9kZWZ1bihbX0xUX0xJQlRPT0xfVEFHU10sCiBbX0xUX0ZPUk1BVF9DT01NRU5UKFtUaGUgbmFtZXMgb2YgdGhlIHRhZ2dlZCBjb25maWd1cmF0aW9ucyBzdXBwb3J0ZWQgYnkgdGhpcyBzY3JpcHRdKWRubAotYXZhaWxhYmxlX3RhZ3M9Il9MVF9UQUdTImRubAorYXZhaWxhYmxlX3RhZ3M9J19MVF9UQUdTJ2RubAogXSkKIAogCkBAIC00NzQsNyArNDcyLDcgQEAKICMgX0xUX0xJQlRPT0xfQ09ORklHX1ZBUlMKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgUHJvZHVjZSBjb21tZW50ZWQgZGVjbGFyYXRpb25zIG9mIG5vbi10YWdnZWQgbGlidG9vbCBjb25maWcgdmFyaWFibGVzCi0jIHN1aXRhYmxlIGZvciBpbnNlcnRpb24gaW4gdGhlIExJQlRPT0wgQ09ORklHIHNlY3Rpb24gb2YgdGhlIGBsaWJ0b29sJworIyBzdWl0YWJsZSBmb3IgaW5zZXJ0aW9uIGluIHRoZSBMSUJUT09MIENPTkZJRyBzZWN0aW9uIG9mIHRoZSAnbGlidG9vbCcKICMgc2NyaXB0LiAgVGFnZ2VkIGxpYnRvb2wgY29uZmlnIHZhcmlhYmxlcyAoZXZlbiBmb3IgdGhlIExJQlRPT0wgQ09ORklHCiAjIHNlY3Rpb24pIGFyZSBwcm9kdWNlZCBieSBfTFRfTElCVE9PTF9UQUdfVkFSUy4KIG00X2RlZnVuKFtfTFRfTElCVE9PTF9DT05GSUdfVkFSU10sCkBAIC01MDAsOCArNDk4LDggQEAKICMgU2VuZCBhY2N1bXVsYXRlZCBvdXRwdXQgdG8gJENPTkZJR19TVEFUVVMuICBUaGFua3MgdG8gdGhlIGxpc3RzIG9mCiAjIHZhcmlhYmxlcyBmb3Igc2luZ2xlIGFuZCBkb3VibGUgcXVvdGUgZXNjYXBpbmcgd2Ugc2F2ZWQgZnJvbSBjYWxscwogIyB0byBfTFRfREVDTCwgd2UgY2FuIHB1dCBxdW90ZSBlc2NhcGVkIHZhcmlhYmxlcyBkZWNsYXJhdGlvbnMKLSMgaW50byBgY29uZmlnLnN0YXR1cycsIGFuZCB0aGVuIHRoZSBzaGVsbCBjb2RlIHRvIHF1b3RlIGVzY2FwZSB0aGVtIGluCi0jIGZvciBsb29wcyBpbiBgY29uZmlnLnN0YXR1cycuICBGaW5hbGx5LCBhbnkgYWRkaXRpb25hbCBjb2RlIGFjY3VtdWxhdGVkCisjIGludG8gJ2NvbmZpZy5zdGF0dXMnLCBhbmQgdGhlbiB0aGUgc2hlbGwgY29kZSB0byBxdW90ZSBlc2NhcGUgdGhlbSBpbgorIyBmb3IgbG9vcHMgaW4gJ2NvbmZpZy5zdGF0dXMnLiAgRmluYWxseSwgYW55IGFkZGl0aW9uYWwgY29kZSBhY2N1bXVsYXRlZAogIyBmcm9tIGNhbGxzIHRvIF9MVF9DT05GSUdfTElCVE9PTF9JTklUIGlzIGV4cGFuZGVkLgogbTRfZGVmdW4oW19MVF9DT05GSUdfQ09NTUFORFNdLAogW0FDX1BST1ZJREVfSUZFTFNFKFtMVF9PVVRQVVRdLApAQCAtNTQ3LDcgKzU0NSw3IEBACiBdXSwgbHRfZGVjbF9xdW90ZV92YXJuYW1lcyk7IGRvCiAgICAgY2FzZSBcYGV2YWwgXFxcXFwkRUNITyBcXFxcIiJcXFxcXCRcJHZhciJcXFxcIlxgIGluCiAgICAgKltbXFxcXFxcXGBcXCJcXFwkXV0qKQotICAgICAgZXZhbCAibHRfXCR2YXI9XFxcXFxcIlxcXGBcXFwkRUNITyBcXCJcXFwkXCR2YXJcXCIgfCBcXFwkU0VEIFxcIlxcXCRzZWRfcXVvdGVfc3Vic3RcXCJcXFxgXFxcXFxcIiIKKyAgICAgIGV2YWwgImx0X1wkdmFyPVxcXFxcXCJcXFxgXFxcJEVDSE8gXFwiXFxcJFwkdmFyXFwiIHwgXFxcJFNFRCBcXCJcXFwkc2VkX3F1b3RlX3N1YnN0XFwiXFxcYFxcXFxcXCIiICMjIGV4Y2x1ZGUgZnJvbSBzY19wcm9oaWJpdF9uZXN0ZWRfcXVvdGVzCiAgICAgICA7OwogICAgICopCiAgICAgICBldmFsICJsdF9cJHZhcj1cXFxcXFwiXFxcJFwkdmFyXFxcXFxcIiIKQEAgLTU2MCw3ICs1NTgsNyBAQAogXV0sIGx0X2RlY2xfZHF1b3RlX3Zhcm5hbWVzKTsgZG8KICAgICBjYXNlIFxgZXZhbCBcXFxcXCRFQ0hPIFxcXFwiIlxcXFxcJFwkdmFyIlxcXFwiXGAgaW4KICAgICAqW1tcXFxcXFxcYFxcIlxcXCRdXSopCi0gICAgICBldmFsICJsdF9cJHZhcj1cXFxcXFwiXFxcYFxcXCRFQ0hPIFxcIlxcXCRcJHZhclxcIiB8IFxcXCRTRUQgLWUgXFwiXFxcJGRvdWJsZV9xdW90ZV9zdWJzdFxcIiAtZSBcXCJcXFwkc2VkX3F1b3RlX3N1YnN0XFwiIC1lIFxcIlxcXCRkZWxheV92YXJpYWJsZV9zdWJzdFxcIlxcXGBcXFxcXFwiIgorICAgICAgZXZhbCAibHRfXCR2YXI9XFxcXFxcIlxcXGBcXFwkRUNITyBcXCJcXFwkXCR2YXJcXCIgfCBcXFwkU0VEIC1lIFxcIlxcXCRkb3VibGVfcXVvdGVfc3Vic3RcXCIgLWUgXFwiXFxcJHNlZF9xdW90ZV9zdWJzdFxcIiAtZSBcXCJcXFwkZGVsYXlfdmFyaWFibGVfc3Vic3RcXCJcXFxgXFxcXFxcIiIgIyMgZXhjbHVkZSBmcm9tIHNjX3Byb2hpYml0X25lc3RlZF9xdW90ZXMKICAgICAgIDs7CiAgICAgKikKICAgICAgIGV2YWwgImx0X1wkdmFyPVxcXFxcXCJcXFwkXCR2YXJcXFxcXFwiIgpAQCAtNTc2LDcgKzU3NCw3IEBACiAjIEdlbmVyYXRlIGEgY2hpbGQgc2NyaXB0IEZJTEUgd2l0aCBhbGwgaW5pdGlhbGl6YXRpb24gbmVjZXNzYXJ5IHRvCiAjIHJldXNlIHRoZSBlbnZpcm9ubWVudCBsZWFybmVkIGJ5IHRoZSBwYXJlbnQgc2NyaXB0LCBhbmQgbWFrZSB0aGUKICMgZmlsZSBleGVjdXRhYmxlLiAgSWYgQ09NTUVOVCBpcyBzdXBwbGllZCwgaXQgaXMgaW5zZXJ0ZWQgYWZ0ZXIgdGhlCi0jIGAjIScgc2VxdWVuY2UgYnV0IGJlZm9yZSBpbml0aWFsaXphdGlvbiB0ZXh0IGJlZ2lucy4gIEFmdGVyIHRoaXMKKyMgJyMhJyBzZXF1ZW5jZSBidXQgYmVmb3JlIGluaXRpYWxpemF0aW9uIHRleHQgYmVnaW5zLiAgQWZ0ZXIgdGhpcwogIyBtYWNybywgYWRkaXRpb25hbCB0ZXh0IGNhbiBiZSBhcHBlbmRlZCB0byBGSUxFIHRvIGZvcm0gdGhlIGJvZHkgb2YKICMgdGhlIGNoaWxkIHNjcmlwdC4gIFRoZSBtYWNybyBlbmRzIHdpdGggbm9uLXplcm8gc3RhdHVzIGlmIHRoZQogIyBmaWxlIGNvdWxkIG5vdCBiZSBmdWxseSB3cml0dGVuIChzdWNoIGFzIGlmIHRoZSBkaXNrIGlzIGZ1bGwpLgpAQCAtNTk4LDcgKzU5Niw3IEBACiBfQVNfUFJFUEFSRQogZXhlYyBBU19NRVNTQUdFX0ZEPiYxCiBfQVNFT0YKLXRlc3QgJGx0X3dyaXRlX2ZhaWwgPSAwICYmIGNobW9kICt4ICQxW11kbmwKK3Rlc3QgMCA9ICIkbHRfd3JpdGVfZmFpbCIgJiYgY2htb2QgK3ggJDFbXWRubAogbTRfcG9wZGVmKFtBU19NRVNTQUdFX0xPR19GRF0pXSldKSMgX0xUX0dFTkVSQVRFRF9GSUxFX0lOSVQKIAogIyBMVF9PVVRQVVQKQEAgLTYyMSw3ICs2MTksNyBAQAogfSA+JkFTX01FU1NBR0VfTE9HX0ZECiAKIGx0X2NsX2hlbHA9IlwKLVxgJGFzX21lJyBjcmVhdGVzIGEgbG9jYWwgbGlidG9vbCBzdHViIGZyb20gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiwKKyckYXNfbWUnIGNyZWF0ZXMgYSBsb2NhbCBsaWJ0b29sIHN0dWIgZnJvbSB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLAogZm9yIHVzZSBpbiBmdXJ0aGVyIGNvbmZpZ3VyZSB0aW1lIHRlc3RzIGJlZm9yZSB0aGUgcmVhbCBsaWJ0b29sIGlzCiBnZW5lcmF0ZWQuCiAKQEAgLTY0Myw3ICs2NDEsNyBAQAogVGhpcyBjb25maWcubHQgc2NyaXB0IGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KIGdpdmVzIHVubGltaXRlZCBwZXJtaXNpb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQgbW9kaWZ5IGl0LiIKIAotd2hpbGUgdGVzdCAkWyNdICE9IDAKK3doaWxlIHRlc3QgMCAhPSAkWyNdCiBkbwogICBjYXNlICRbMV0gaW4KICAgICAtLXZlcnNpb24gfCAtLXYqIHwgLVYgKQpAQCAtNjU2LDEwICs2NTQsMTAgQEAKICAgICAgIGx0X2NsX3NpbGVudD06IDs7CiAKICAgICAtKikgQUNfTVNHX0VSUk9SKFt1bnJlY29nbml6ZWQgb3B0aW9uOiAkWzFdCi1UcnkgXGAkWzBdIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uXSkgOzsKK1RyeSAnJFswXSAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLl0pIDs7CiAKICAgICAqKSBBQ19NU0dfRVJST1IoW3VucmVjb2duaXplZCBhcmd1bWVudDogJFsxXQotVHJ5IFxgJFswXSAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLl0pIDs7CitUcnkgJyRbMF0gLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5dKSA7OwogICBlc2FjCiAgIHNoaWZ0CiBkb25lCkBAIC02ODUsNyArNjgzLDcgQEAKICMgb3BlbiBieSBjb25maWd1cmUuICBIZXJlIHdlIGV4ZWMgdGhlIEZEIHRvIC9kZXYvbnVsbCwgZWZmZWN0aXZlbHkgY2xvc2luZwogIyBjb25maWcubG9nLCBzbyBpdCBjYW4gYmUgcHJvcGVybHkgKHJlKW9wZW5lZCBhbmQgYXBwZW5kZWQgdG8gYnkgY29uZmlnLmx0LgogbHRfY2xfc3VjY2Vzcz06Ci10ZXN0ICIkc2lsZW50IiA9IHllcyAmJgordGVzdCB5ZXMgPSAiJHNpbGVudCIgJiYKICAgbHRfY29uZmlnX2x0X2FyZ3M9IiRsdF9jb25maWdfbHRfYXJncyAtLXF1aWV0IgogZXhlYyBBU19NRVNTQUdFX0xPR19GRD4vZGV2L251bGwKICRTSEVMTCAiJENPTkZJR19MVCIgJGx0X2NvbmZpZ19sdF9hcmdzIHx8IGx0X2NsX3N1Y2Nlc3M9ZmFsc2UKQEAgLTcwNSwxMyArNzAzLDEzIEBACiBfTFRfQ09ORklHX1NBVkVfQ09NTUFORFMoWwogICBtNF9kZWZpbmUoW19MVF9UQUddLCBtNF9pZihbJDFdLCBbXSwgW0NdLCBbJDFdKSlkbmwKICAgbTRfaWYoX0xUX1RBRywgW0NdLCBbCi0gICAgIyBTZWUgaWYgd2UgYXJlIHJ1bm5pbmcgb24genNoLCBhbmQgc2V0IHRoZSBvcHRpb25zIHdoaWNoIGFsbG93IG91cgorICAgICMgU2VlIGlmIHdlIGFyZSBydW5uaW5nIG9uIHpzaCwgYW5kIHNldCB0aGUgb3B0aW9ucyB0aGF0IGFsbG93IG91cgogICAgICMgY29tbWFuZHMgdGhyb3VnaCB3aXRob3V0IHJlbW92YWwgb2YgXCBlc2NhcGVzLgotICAgIGlmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgOyB0aGVuCisgICAgaWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IjsgdGhlbgogICAgICAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKICAgICBmaQogCi0gICAgY2ZnZmlsZT0iJHtvZmlsZX1UIgorICAgIGNmZ2ZpbGU9JHtvZmlsZX1UCiAgICAgdHJhcCAiJFJNIFwiJGNmZ2ZpbGVcIjsgZXhpdCAxIiAxIDIgMTUKICAgICAkUk0gIiRjZmdmaWxlIgogCkBAIC03MTksNyArNzE3LDcgQEAKICMhICRTSEVMTAogCiAjIGAkRUNITyAiJG9maWxlIiB8IHNlZCAncyVeLiovJSUnYCAtIFByb3ZpZGUgZ2VuZXJhbGl6ZWQgbGlicmFyeS1idWlsZGluZyBzdXBwb3J0IHNlcnZpY2VzLgotIyBHZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSAkYXNfbWUgKCRQQUNLQUdFJFRJTUVTVEFNUCkgJFZFUlNJT04KKyMgR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgJGFzX21lICgkUEFDS0FHRSkgJFZFUlNJT04KICMgTGlidG9vbCB3YXMgY29uZmlndXJlZCBvbiBob3N0IGAoaG9zdG5hbWUgfHwgdW5hbWUgLW4pIDI+L2Rldi9udWxsIHwgc2VkIDFxYDoKICMgTk9URTogQ2hhbmdlcyBtYWRlIHRvIHRoaXMgZmlsZSB3aWxsIGJlIGxvc3Q6IGxvb2sgYXQgbHRtYWluLnNoLgogIwpAQCAtNzM5LDcgKzczNyw3IEBACiAjIEFJWCBzb21ldGltZXMgaGFzIHByb2JsZW1zIHdpdGggdGhlIEdDQyBjb2xsZWN0MiBwcm9ncmFtLiAgRm9yIHNvbWUKICMgcmVhc29uLCBpZiB3ZSBzZXQgdGhlIENPTExFQ1RfTkFNRVMgZW52aXJvbm1lbnQgdmFyaWFibGUsIHRoZSBwcm9ibGVtcwogIyB2YW5pc2ggaW4gYSBwdWZmIG9mIHNtb2tlLgotaWYgdGVzdCAiWCR7Q09MTEVDVF9OQU1FUytzZXR9IiAhPSBYc2V0OyB0aGVuCitpZiB0ZXN0IHNldCAhPSAiJHtDT0xMRUNUX05BTUVTK3NldH0iOyB0aGVuCiAgIENPTExFQ1RfTkFNRVM9CiAgIGV4cG9ydCBDT0xMRUNUX05BTUVTCiBmaQpAQCAtNzU2LDggKzc1NCw2IEBACiAgIHNlZCAnJHEnICIkbHRtYWluIiA+PiAiJGNmZ2ZpbGUiIFwKICAgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSI7IGV4aXQgMSkKIAotICBfTFRfUFJPR19SRVBMQUNFX1NIRUxMRk5TCi0KICAgIG12IC1mICIkY2ZnZmlsZSIgIiRvZmlsZSIgfHwKICAgICAocm0gLWYgIiRvZmlsZSIgJiYgY3AgIiRjZmdmaWxlIiAiJG9maWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUiKQogICBjaG1vZCAreCAiJG9maWxlIgpAQCAtNzc1LDcgKzc3MSw2IEBACiBbbTRfaWYoWyQxXSwgW10sIFsKICAgICBQQUNLQUdFPSckUEFDS0FHRScKICAgICBWRVJTSU9OPSckVkVSU0lPTicKLSAgICBUSU1FU1RBTVA9JyRUSU1FU1RBTVAnCiAgICAgUk09JyRSTScKICAgICBvZmlsZT0nJG9maWxlJ10sIFtdKQogXSlkbmwgL19MVF9DT05GSUdfU0FWRV9DT01NQU5EUwpAQCAtOTc0LDcgKzk2OSw3IEBACiAKICAgICBBQ19DQUNIRV9DSEVDSyhbZm9yIC1zaW5nbGVfbW9kdWxlIGxpbmtlciBmbGFnXSxbbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZF0sCiAgICAgICBbbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZD1ubwotICAgICAgaWYgdGVzdCAteiAiJHtMVF9NVUxUSV9NT0RVTEV9IjsgdGhlbgorICAgICAgaWYgdGVzdCAteiAiJExUX01VTFRJX01PRFVMRSI7IHRoZW4KIAkjIEJ5IGRlZmF1bHQgd2Ugd2lsbCBhZGQgdGhlIC1zaW5nbGVfbW9kdWxlIGZsYWcuIFlvdSBjYW4gb3ZlcnJpZGUKIAkjIGJ5IGVpdGhlciBzZXR0aW5nIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBMVF9NVUxUSV9NT0RVTEUKIAkjIG5vbi1lbXB0eSBhdCBjb25maWd1cmUgdGltZSwgb3IgYnkgYWRkaW5nIC1tdWx0aV9tb2R1bGUgdG8gdGhlCkBAIC05OTIsNyArOTg3LDcgQEAKIAkgIGNhdCBjb25mdGVzdC5lcnIgPiZBU19NRVNTQUdFX0xPR19GRAogCSMgT3RoZXJ3aXNlLCBpZiB0aGUgb3V0cHV0IHdhcyBjcmVhdGVkIHdpdGggYSAwIGV4aXQgY29kZSBmcm9tCiAJIyB0aGUgY29tcGlsZXIsIGl0IHdvcmtlZC4KLQllbGlmIHRlc3QgLWYgbGliY29uZnRlc3QuZHlsaWIgJiYgdGVzdCAkX2x0X3Jlc3VsdCAtZXEgMDsgdGhlbgorCWVsaWYgdGVzdCAtZiBsaWJjb25mdGVzdC5keWxpYiAmJiB0ZXN0IDAgPSAiJF9sdF9yZXN1bHQiOyB0aGVuCiAJICBsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kPXllcwogCWVsc2UKIAkgIGNhdCBjb25mdGVzdC5lcnIgPiZBU19NRVNTQUdFX0xPR19GRApAQCAtMTAxMCw3ICsxMDA1LDcgQEAKICAgICAgIEFDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW10sW10pXSwKIAlbbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0PXllc10sCiAJW2x0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdD1ub10pCi0JTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKKwlMREZMQUdTPSRzYXZlX0xERkxBR1MKICAgICBdKQogCiAgICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciAtZm9yY2VfbG9hZCBsaW5rZXIgZmxhZ10sW2x0X2N2X2xkX2ZvcmNlX2xvYWRdLApAQCAtMTAzMiw3ICsxMDI3LDcgQEAKICAgICAgIF9sdF9yZXN1bHQ9JD8KICAgICAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyICYmICRHUkVQIGZvcmNlX2xvYWQgY29uZnRlc3QuZXJyOyB0aGVuCiAJY2F0IGNvbmZ0ZXN0LmVyciA+JkFTX01FU1NBR0VfTE9HX0ZECi0gICAgICBlbGlmIHRlc3QgLWYgY29uZnRlc3QgJiYgdGVzdCAkX2x0X3Jlc3VsdCAtZXEgMCAmJiAkR1JFUCBmb3JjZWRfbG9hZCBjb25mdGVzdCA+L2Rldi9udWxsIDI+JjEgOyB0aGVuCisgICAgICBlbGlmIHRlc3QgLWYgY29uZnRlc3QgJiYgdGVzdCAwID0gIiRfbHRfcmVzdWx0IiAmJiAkR1JFUCBmb3JjZWRfbG9hZCBjb25mdGVzdCA+L2Rldi9udWxsIDI+JjE7IHRoZW4KIAlsdF9jdl9sZF9mb3JjZV9sb2FkPXllcwogICAgICAgZWxzZQogCWNhdCBjb25mdGVzdC5lcnIgPiZBU19NRVNTQUdFX0xPR19GRApAQCAtMTA0MiwzMiArMTAzNywzMiBAQAogICAgIF0pCiAgICAgY2FzZSAkaG9zdF9vcyBpbgogICAgIHJoYXBzb2R5KiB8IGRhcndpbjEuW1swMTJdXSkKLSAgICAgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPScke3dsfS11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycgOzsKKyAgICAgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPSckd2wtdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnIDs7CiAgICAgZGFyd2luMS4qKQotICAgICAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR7d2x9LWZsYXRfbmFtZXNwYWNlICR7d2x9LXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJyA7OworICAgICAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR3bC1mbGF0X25hbWVzcGFjZSAkd2wtdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnIDs7CiAgICAgZGFyd2luKikgIyBkYXJ3aW4gNS54IG9uCiAgICAgICAjIGlmIHJ1bm5pbmcgb24gMTAuNSBvciBsYXRlciwgdGhlIGRlcGxveW1lbnQgdGFyZ2V0IGRlZmF1bHRzCiAgICAgICAjIHRvIHRoZSBPUyB2ZXJzaW9uLCBpZiBvbiB4ODYsIGFuZCAxMC40LCB0aGUgZGVwbG95bWVudAogICAgICAgIyB0YXJnZXQgZGVmYXVsdHMgdG8gMTAuNC4gRG9uJ3QgeW91IGxvdmUgaXQ/CiAgICAgICBjYXNlICR7TUFDT1NYX0RFUExPWU1FTlRfVEFSR0VULTEwLjB9LCRob3N0IGluCiAJMTAuMCwqODYqLWRhcndpbjgqfDEwLjAsKi1kYXJ3aW5bWzkxXV0qKQotCSAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR7d2x9LXVuZGVmaW5lZCAke3dsfWR5bmFtaWNfbG9va3VwJyA7OworCSAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR3bC11bmRlZmluZWQgJHt3bH1keW5hbWljX2xvb2t1cCcgOzsKIAkxMC5bWzAxMl1dKikKLQkgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPScke3dsfS1mbGF0X25hbWVzcGFjZSAke3dsfS11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycgOzsKKwkgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPSckd2wtZmxhdF9uYW1lc3BhY2UgJHdsLXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJyA7OwogCTEwLiopCi0JICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHt3bH0tdW5kZWZpbmVkICR7d2x9ZHluYW1pY19sb29rdXAnIDs7CisJICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHdsLXVuZGVmaW5lZCAke3dsfWR5bmFtaWNfbG9va3VwJyA7OwogICAgICAgZXNhYwogICAgIDs7CiAgIGVzYWMKLSAgICBpZiB0ZXN0ICIkbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZCIgPSAieWVzIjsgdGhlbgorICAgIGlmIHRlc3QgeWVzID0gIiRsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kIjsgdGhlbgogICAgICAgX2x0X2Rhcl9zaW5nbGVfbW9kPSckc2luZ2xlX21vZHVsZScKICAgICBmaQotICAgIGlmIHRlc3QgIiRsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3QiID0gInllcyI7IHRoZW4KLSAgICAgIF9sdF9kYXJfZXhwb3J0X3N5bXM9JyAke3dsfS1leHBvcnRlZF9zeW1ib2xzX2xpc3QsJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bScKKyAgICBpZiB0ZXN0IHllcyA9ICIkbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0IjsgdGhlbgorICAgICAgX2x0X2Rhcl9leHBvcnRfc3ltcz0nICR3bC1leHBvcnRlZF9zeW1ib2xzX2xpc3QsJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUtc3ltYm9scy5leHBzeW0nCiAgICAgZWxzZQotICAgICAgX2x0X2Rhcl9leHBvcnRfc3ltcz0nfiROTUVESVQgLXMgJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bSAke2xpYn0nCisgICAgICBfbHRfZGFyX2V4cG9ydF9zeW1zPSd+JE5NRURJVCAtcyAkb3V0cHV0X29iamRpci8kbGlibmFtZS1zeW1ib2xzLmV4cHN5bSAkbGliJwogICAgIGZpCi0gICAgaWYgdGVzdCAiJERTWU1VVElMIiAhPSAiOiIgJiYgdGVzdCAiJGx0X2N2X2xkX2ZvcmNlX2xvYWQiID0gIm5vIjsgdGhlbgorICAgIGlmIHRlc3QgOiAhPSAiJERTWU1VVElMIiAmJiB0ZXN0IG5vID0gIiRsdF9jdl9sZF9mb3JjZV9sb2FkIjsgdGhlbgogICAgICAgX2x0X2RzeW11dGlsPSd+JERTWU1VVElMICRsaWIgfHwgOicKICAgICBlbHNlCiAgICAgICBfbHRfZHN5bXV0aWw9CkBAIC0xMDg3LDI5ICsxMDgyLDI5IEBACiAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KICAgX0xUX1RBR1ZBUihoYXJkY29kZV9hdXRvbWF0aWMsICQxKT15ZXMKICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9dW5zdXBwb3J0ZWQKLSAgaWYgdGVzdCAiJGx0X2N2X2xkX2ZvcmNlX2xvYWQiID0gInllcyI7IHRoZW4KLSAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9J2Bmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSAke3dsfS1mb3JjZV9sb2FkLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgJworICBpZiB0ZXN0IHllcyA9ICIkbHRfY3ZfbGRfZm9yY2VfbG9hZCI7IHRoZW4KKyAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9J2Bmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSAkd2wtZm9yY2VfbG9hZCwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCcKICAgICBtNF9jYXNlKFskMV0sIFtGNzddLCBbX0xUX1RBR1ZBUihjb21waWxlcl9uZWVkc19vYmplY3QsICQxKT15ZXNdLAogICAgICAgICAgICAgICAgICAgW0ZDXSwgIFtfTFRfVEFHVkFSKGNvbXBpbGVyX25lZWRzX29iamVjdCwgJDEpPXllc10pCiAgIGVsc2UKICAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JycKICAgZmkKICAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCi0gIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0iJF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkIgorICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkCiAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgIGlmb3J0KikgX2x0X2Rhcl9jYW5fc2hhcmVkPXllcyA7OworICAgICBpZm9ydCp8bmFnZm9yKikgX2x0X2Rhcl9jYW5fc2hhcmVkPXllcyA7OwogICAgICAqKSBfbHRfZGFyX2Nhbl9zaGFyZWQ9JEdDQyA7OwogICBlc2FjCi0gIGlmIHRlc3QgIiRfbHRfZGFyX2Nhbl9zaGFyZWQiID0gInllcyI7IHRoZW4KKyAgaWYgdGVzdCB5ZXMgPSAiJF9sdF9kYXJfY2FuX3NoYXJlZCI7IHRoZW4KICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD1mdW5jX2VjaG9fYWxsCi0gICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0iXCRDQyAtZHluYW1pY2xpYiBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lIFwkcnBhdGgvXCRzb25hbWUgXCR2ZXJzdHJpbmcgJF9sdF9kYXJfc2luZ2xlX21vZCR7X2x0X2RzeW11dGlsfSIKLSAgICBfTFRfVEFHVkFSKG1vZHVsZV9jbWRzLCAkMSk9IlwkQ0MgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiAtYnVuZGxlIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyR7X2x0X2RzeW11dGlsfSIKLSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0ic2VkICdzLF4sXywnIDwgXCRleHBvcnRfc3ltYm9scyA+IFwkb3V0cHV0X29iamRpci9cJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX5cJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgXCRycGF0aC9cJHNvbmFtZSBcJHZlcnN0cmluZyAke19sdF9kYXJfc2luZ2xlX21vZH0ke19sdF9kYXJfZXhwb3J0X3N5bXN9JHtfbHRfZHN5bXV0aWx9IgotICAgIF9MVF9UQUdWQVIobW9kdWxlX2V4cHN5bV9jbWRzLCAkMSk9InNlZCAtZSAncyxeLF8sJyA8IFwkZXhwb3J0X3N5bWJvbHMgPiBcJG91dHB1dF9vYmpkaXIvXCR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+XCRDQyBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIC1idW5kbGUgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzJHtfbHRfZGFyX2V4cG9ydF9zeW1zfSR7X2x0X2RzeW11dGlsfSIKKyAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSJcJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgXCRycGF0aC9cJHNvbmFtZSBcJHZlcnN0cmluZyAkX2x0X2Rhcl9zaW5nbGVfbW9kJF9sdF9kc3ltdXRpbCIKKyAgICBfTFRfVEFHVkFSKG1vZHVsZV9jbWRzLCAkMSk9IlwkQ0MgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiAtYnVuZGxlIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyRfbHRfZHN5bXV0aWwiCisgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9InNlZCAnc3xefF98JyA8IFwkZXhwb3J0X3N5bWJvbHMgPiBcJG91dHB1dF9vYmpkaXIvXCRsaWJuYW1lLXN5bWJvbHMuZXhwc3ltflwkQ0MgLWR5bmFtaWNsaWIgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSBcJHJwYXRoL1wkc29uYW1lIFwkdmVyc3RyaW5nICRfbHRfZGFyX3NpbmdsZV9tb2QkX2x0X2Rhcl9leHBvcnRfc3ltcyRfbHRfZHN5bXV0aWwiCisgICAgX0xUX1RBR1ZBUihtb2R1bGVfZXhwc3ltX2NtZHMsICQxKT0ic2VkIC1lICdzfF58X3wnIDwgXCRleHBvcnRfc3ltYm9scyA+IFwkb3V0cHV0X29iamRpci9cJGxpYm5hbWUtc3ltYm9scy5leHBzeW1+XCRDQyBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIC1idW5kbGUgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzJF9sdF9kYXJfZXhwb3J0X3N5bXMkX2x0X2RzeW11dGlsIgogICAgIG00X2lmKFskMV0sIFtDWFhdLAotWyAgIGlmIHRlc3QgIiRsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kIiAhPSAieWVzIjsgdGhlbgotICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0iXCRDQyAtciAta2VlcF9wcml2YXRlX2V4dGVybnMgLW5vc3RkbGliIC1vIFwke2xpYn0tbWFzdGVyLm8gXCRsaWJvYmpzflwkQ0MgLWR5bmFtaWNsaWIgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiBcJHtsaWJ9LW1hc3Rlci5vIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgXCRycGF0aC9cJHNvbmFtZSBcJHZlcnN0cmluZyR7X2x0X2RzeW11dGlsfSIKLSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSJzZWQgJ3MsXixfLCcgPCBcJGV4cG9ydF9zeW1ib2xzID4gXCRvdXRwdXRfb2JqZGlyL1wke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltflwkQ0MgLXIgLWtlZXBfcHJpdmF0ZV9leHRlcm5zIC1ub3N0ZGxpYiAtbyBcJHtsaWJ9LW1hc3Rlci5vIFwkbGlib2Jqc35cJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCR7bGlifS1tYXN0ZXIubyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lIFwkcnBhdGgvXCRzb25hbWUgXCR2ZXJzdHJpbmcke19sdF9kYXJfZXhwb3J0X3N5bXN9JHtfbHRfZHN5bXV0aWx9IgorWyAgIGlmIHRlc3QgeWVzICE9ICIkbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZCI7IHRoZW4KKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9IlwkQ0MgLXIgLWtlZXBfcHJpdmF0ZV9leHRlcm5zIC1ub3N0ZGxpYiAtbyBcJGxpYi1tYXN0ZXIubyBcJGxpYm9ianN+XCRDQyAtZHluYW1pY2xpYiBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIFwkbGliLW1hc3Rlci5vIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgXCRycGF0aC9cJHNvbmFtZSBcJHZlcnN0cmluZyRfbHRfZHN5bXV0aWwiCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0ic2VkICdzfF58X3wnIDwgXCRleHBvcnRfc3ltYm9scyA+IFwkb3V0cHV0X29iamRpci9cJGxpYm5hbWUtc3ltYm9scy5leHBzeW1+XCRDQyAtciAta2VlcF9wcml2YXRlX2V4dGVybnMgLW5vc3RkbGliIC1vIFwkbGliLW1hc3Rlci5vIFwkbGlib2Jqc35cJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCRsaWItbWFzdGVyLm8gXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSBcJHJwYXRoL1wkc29uYW1lIFwkdmVyc3RyaW5nJF9sdF9kYXJfZXhwb3J0X3N5bXMkX2x0X2RzeW11dGlsIgogICAgIGZpCiBdLFtdKQogICBlbHNlCkBAIC0xMTI5LDcgKzExMjQsNyBAQAogIyBBbGxvdyB0byBvdmVycmlkZSB0aGVtIGZvciBhbGwgdGFncyB0aHJvdWdoIGx0X2N2X2FpeF9saWJwYXRoLgogbTRfZGVmdW4oW19MVF9TWVNfTU9EVUxFX1BBVEhfQUlYXSwKIFttNF9yZXF1aXJlKFtfTFRfREVDTF9TRURdKWRubAotaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aCtzZXR9IiA9IHNldDsgdGhlbgoraWYgdGVzdCBzZXQgPSAiJHtsdF9jdl9haXhfbGlicGF0aCtzZXR9IjsgdGhlbgogICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGgKIGVsc2UKICAgQUNfQ0FDSEVfVkFMKFtfTFRfVEFHVkFSKFtsdF9jdl9haXhfbGlicGF0aF9dLCBbJDFdKV0sCkBAIC0xMTQ3LDcgKzExNDIsNyBAQAogICAgIF9MVF9UQUdWQVIoW2x0X2N2X2FpeF9saWJwYXRoX10sIFskMV0pPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAogICBmaV0sW10pCiAgIGlmIHRlc3QgLXogIiRfTFRfVEFHVkFSKFtsdF9jdl9haXhfbGlicGF0aF9dLCBbJDFdKSI7IHRoZW4KLSAgICBfTFRfVEFHVkFSKFtsdF9jdl9haXhfbGlicGF0aF9dLCBbJDFdKT0iL3Vzci9saWI6L2xpYiIKKyAgICBfTFRfVEFHVkFSKFtsdF9jdl9haXhfbGlicGF0aF9dLCBbJDFdKT0vdXNyL2xpYjovbGliCiAgIGZpCiAgIF0pCiAgIGFpeF9saWJwYXRoPSRfTFRfVEFHVkFSKFtsdF9jdl9haXhfbGlicGF0aF9dLCBbJDFdKQpAQCAtMTE2Nyw4ICsxMTYyLDggQEAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgRmluZCBob3cgd2UgY2FuIGZha2UgYW4gZWNobyBjb21tYW5kIHRoYXQgZG9lcyBub3QgaW50ZXJwcmV0IGJhY2tzbGFzaC4KICMgSW4gcGFydGljdWxhciwgd2l0aCBBdXRvY29uZiAyLjYwIG9yIGxhdGVyIHdlIGFkZCBzb21lIGNvZGUgdG8gdGhlIHN0YXJ0Ci0jIG9mIHRoZSBnZW5lcmF0ZWQgY29uZmlndXJlIHNjcmlwdCB3aGljaCB3aWxsIGZpbmQgYSBzaGVsbCB3aXRoIGEgYnVpbHRpbgotIyBwcmludGYgKHdoaWNoIHdlIGNhbiB1c2UgYXMgYW4gZWNobyBjb21tYW5kKS4KKyMgb2YgdGhlIGdlbmVyYXRlZCBjb25maWd1cmUgc2NyaXB0IHRoYXQgd2lsbCBmaW5kIGEgc2hlbGwgd2l0aCBhIGJ1aWx0aW4KKyMgcHJpbnRmICh0aGF0IHdlIGNhbiB1c2UgYXMgYW4gZWNobyBjb21tYW5kKS4KIG00X2RlZnVuKFtfTFRfUFJPR19FQ0hPX0JBQ0tTTEFTSF0sCiBbRUNITz0nXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXCcKIEVDSE89JEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITwpAQCAtMTE5NiwxMCArMTE5MSwxMCBAQAogIyBJbnZva2UgJEVDSE8gd2l0aCBhbGwgYXJncywgc3BhY2Utc2VwYXJhdGVkLgogZnVuY19lY2hvX2FsbCAoKQogewotICAgICRFQ0hPICIkKiIgCisgICAgJEVDSE8gIiQqIgogfQogCi1jYXNlICIkRUNITyIgaW4KK2Nhc2UgJEVDSE8gaW4KICAgcHJpbnRmKikgQUNfTVNHX1JFU1VMVChbcHJpbnRmXSkgOzsKICAgcHJpbnQqKSBBQ19NU0dfUkVTVUxUKFtwcmludCAtcl0pIDs7CiAgICopIEFDX01TR19SRVNVTFQoW2NhdF0pIDs7CkBAIC0xMjI1LDE2ICsxMjIwLDE3IEBACiBBQ19ERUZVTihbX0xUX1dJVEhfU1lTUk9PVF0sCiBbQUNfTVNHX0NIRUNLSU5HKFtmb3Igc3lzcm9vdF0pCiBBQ19BUkdfV0lUSChbc3lzcm9vdF0sCi1bICAtLXdpdGgtc3lzcm9vdFs9RElSXSBTZWFyY2ggZm9yIGRlcGVuZGVudCBsaWJyYXJpZXMgd2l0aGluIERJUgotICAgICAgICAgICAgICAgICAgICAgICAgKG9yIHRoZSBjb21waWxlcidzIHN5c3Jvb3QgaWYgbm90IHNwZWNpZmllZCkuXSwKK1tBU19IRUxQX1NUUklORyhbLS13aXRoLXN5c3Jvb3RAPDpAPURJUkA6PkBdLAorICBbU2VhcmNoIGZvciBkZXBlbmRlbnQgbGlicmFyaWVzIHdpdGhpbiBESVIgKG9yIHRoZSBjb21waWxlcidzIHN5c3Jvb3QKKyAgIGlmIG5vdCBzcGVjaWZpZWQpLl0pXSwKIFtdLCBbd2l0aF9zeXNyb290PW5vXSkKIAogZG5sIGx0X3N5c3Jvb3Qgd2lsbCBhbHdheXMgYmUgcGFzc2VkIHVucXVvdGVkLiAgV2UgcXVvdGUgaXQgaGVyZQogZG5sIGluIGNhc2UgdGhlIHVzZXIgcGFzc2VkIGEgZGlyZWN0b3J5IG5hbWUuCiBsdF9zeXNyb290PQotY2FzZSAke3dpdGhfc3lzcm9vdH0gaW4gIygKK2Nhc2UgJHdpdGhfc3lzcm9vdCBpbiAjKAogIHllcykKLSAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICBpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgogICAgICBsdF9zeXNyb290PWAkQ0MgLS1wcmludC1zeXNyb290IDI+L2Rldi9udWxsYAogICAgZmkKICAgIDs7ICMoCkBAIC0xMjQ0LDE0ICsxMjQwLDE0IEBACiAgbm98JycpCiAgICA7OyAjKAogICopCi0gICBBQ19NU0dfUkVTVUxUKFske3dpdGhfc3lzcm9vdH1dKQorICAgQUNfTVNHX1JFU1VMVChbJHdpdGhfc3lzcm9vdF0pCiAgICBBQ19NU0dfRVJST1IoW1RoZSBzeXNyb290IG11c3QgYmUgYW4gYWJzb2x1dGUgcGF0aC5dKQogICAgOzsKIGVzYWMKIAogIEFDX01TR19SRVNVTFQoWyR7bHRfc3lzcm9vdDotbm99XSkKIF9MVF9ERUNMKFtdLCBbbHRfc3lzcm9vdF0sIFswXSwgW1RoZSByb290IHdoZXJlIHRvIHNlYXJjaCBmb3IgXWRubAotW2RlcGVuZGVudCBsaWJyYXJpZXMsIGFuZCBpbiB3aGljaCBvdXIgbGlicmFyaWVzIHNob3VsZCBiZSBpbnN0YWxsZWQuXSldKQorW2RlcGVuZGVudCBsaWJyYXJpZXMsIGFuZCB3aGVyZSBvdXIgbGlicmFyaWVzIHNob3VsZCBiZSBpbnN0YWxsZWQuXSldKQogCiAjIF9MVF9FTkFCTEVfTE9DSwogIyAtLS0tLS0tLS0tLS0tLS0KQEAgLTEyNTksMzEgKzEyNTUsMzMgQEAKIFtBQ19BUkdfRU5BQkxFKFtsaWJ0b29sLWxvY2tdLAogICBbQVNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS1saWJ0b29sLWxvY2tdLAogICAgIFthdm9pZCBsb2NraW5nIChtaWdodCBicmVhayBwYXJhbGxlbCBidWlsZHMpXSldKQotdGVzdCAieCRlbmFibGVfbGlidG9vbF9sb2NrIiAhPSB4bm8gJiYgZW5hYmxlX2xpYnRvb2xfbG9jaz15ZXMKK3Rlc3Qgbm8gPSAiJGVuYWJsZV9saWJ0b29sX2xvY2siIHx8IGVuYWJsZV9saWJ0b29sX2xvY2s9eWVzCiAKICMgU29tZSBmbGFncyBuZWVkIHRvIGJlIHByb3BhZ2F0ZWQgdG8gdGhlIGNvbXBpbGVyIG9yIGxpbmtlciBmb3IgZ29vZAogIyBsaWJ0b29sIHN1cHBvcnQuCiBjYXNlICRob3N0IGluCiBpYTY0LSotaHB1eCopCi0gICMgRmluZCBvdXQgd2hpY2ggQUJJIHdlIGFyZSB1c2luZy4KKyAgIyBGaW5kIG91dCB3aGF0IEFCSSBpcyBiZWluZyBwcm9kdWNlZCBieSBhY19jb21waWxlLCBhbmQgc2V0IG1vZGUKKyAgIyBvcHRpb25zIGFjY29yZGluZ2x5LgogICBlY2hvICdpbnQgaTsnID4gY29uZnRlc3QuJGFjX2V4dAogICBpZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgogICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KICAgICAgICpFTEYtMzIqKQotCUhQVVhfSUE2NF9NT0RFPSIzMiIKKwlIUFVYX0lBNjRfTU9ERT0zMgogCTs7CiAgICAgICAqRUxGLTY0KikKLQlIUFVYX0lBNjRfTU9ERT0iNjQiCisJSFBVWF9JQTY0X01PREU9NjQKIAk7OwogICAgIGVzYWMKICAgZmkKICAgcm0gLXJmIGNvbmZ0ZXN0KgogICA7OwogKi0qLWlyaXg2KikKLSAgIyBGaW5kIG91dCB3aGljaCBBQkkgd2UgYXJlIHVzaW5nLgorICAjIEZpbmQgb3V0IHdoYXQgQUJJIGlzIGJlaW5nIHByb2R1Y2VkIGJ5IGFjX2NvbXBpbGUsIGFuZCBzZXQgbGlua2VyCisgICMgb3B0aW9ucyBhY2NvcmRpbmdseS4KICAgZWNobyAnWyNdbGluZSAnJExJTkVOTycgImNvbmZpZ3VyZSInID4gY29uZnRlc3QuJGFjX2V4dAogICBpZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgotICAgIGlmIHRlc3QgIiRsdF9jdl9wcm9nX2dudV9sZCIgPSB5ZXM7IHRoZW4KKyAgICBpZiB0ZXN0IHllcyA9ICIkbHRfY3ZfcHJvZ19nbnVfbGQiOyB0aGVuCiAgICAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0LiRhY19vYmpleHRgIGluCiAJKjMyLWJpdCopCiAJICBMRD0iJHtMRC1sZH0gLW1lbGYzMmJzbWlwIgpAQCAtMTMxMiw5ICsxMzEwLDQ2IEBACiAgIHJtIC1yZiBjb25mdGVzdCoKICAgOzsKIAoteDg2XzY0LSprZnJlZWJzZCotZ251fHg4Nl82NC0qbGludXgqfHBwYyotKmxpbnV4Knxwb3dlcnBjKi0qbGludXgqfCBcCittaXBzNjQqLSpsaW51eCopCisgICMgRmluZCBvdXQgd2hhdCBBQkkgaXMgYmVpbmcgcHJvZHVjZWQgYnkgYWNfY29tcGlsZSwgYW5kIHNldCBsaW5rZXIKKyAgIyBvcHRpb25zIGFjY29yZGluZ2x5LgorICBlY2hvICdbI11saW5lICckTElORU5PJyAiY29uZmlndXJlIicgPiBjb25mdGVzdC4kYWNfZXh0CisgIGlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCisgICAgZW11bD1lbGYKKyAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0LiRhY19vYmpleHRgIGluCisgICAgICAqMzItYml0KikKKwllbXVsPSIke2VtdWx9MzIiCisJOzsKKyAgICAgICo2NC1iaXQqKQorCWVtdWw9IiR7ZW11bH02NCIKKwk7OworICAgIGVzYWMKKyAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0LiRhY19vYmpleHRgIGluCisgICAgICAqTVNCKikKKwllbXVsPSIke2VtdWx9YnRzbWlwIgorCTs7CisgICAgICAqTFNCKikKKwllbXVsPSIke2VtdWx9bHRzbWlwIgorCTs7CisgICAgZXNhYworICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KKyAgICAgICpOMzIqKQorCWVtdWw9IiR7ZW11bH1uMzIiCisJOzsKKyAgICBlc2FjCisgICAgTEQ9IiR7TEQtbGR9IC1tICRlbXVsIgorICBmaQorICBybSAtcmYgY29uZnRlc3QqCisgIDs7CisKK3g4Nl82NC0qa2ZyZWVic2QqLWdudXx4ODZfNjQtKmxpbnV4Knxwb3dlcnBjKi0qbGludXgqfCBcCiBzMzkwKi0qbGludXgqfHMzOTAqLSp0cGYqfHNwYXJjKi0qbGludXgqKQotICAjIEZpbmQgb3V0IHdoaWNoIEFCSSB3ZSBhcmUgdXNpbmcuCisgICMgRmluZCBvdXQgd2hhdCBBQkkgaXMgYmVpbmcgcHJvZHVjZWQgYnkgYWNfY29tcGlsZSwgYW5kIHNldCBsaW5rZXIKKyAgIyBvcHRpb25zIGFjY29yZGluZ2x5LiAgTm90ZSB0aGF0IHRoZSBsaXN0ZWQgY2FzZXMgb25seSBjb3ZlciB0aGUKKyAgIyBzaXR1YXRpb25zIHdoZXJlIGFkZGl0aW9uYWwgbGlua2VyIG9wdGlvbnMgYXJlIG5lZWRlZCAoc3VjaCBhcyB3aGVuCisgICMgZG9pbmcgMzItYml0IGNvbXBpbGF0aW9uIGZvciBhIGhvc3Qgd2hlcmUgbGQgZGVmYXVsdHMgdG8gNjQtYml0LCBvcgorICAjIHZpY2UgdmVyc2EpOyB0aGUgY29tbW9uIGNhc2VzIHdoZXJlIG5vIGxpbmtlciBvcHRpb25zIGFyZSBuZWVkZWQgZG8KKyAgIyBub3QgYXBwZWFyIGluIHRoZSBsaXN0LgogICBlY2hvICdpbnQgaTsnID4gY29uZnRlc3QuJGFjX2V4dAogICBpZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgogICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3Qub2AgaW4KQEAgLTEzMjYsMTQgKzEzNjEsMTcgQEAKIAkgIHg4Nl82NC0qbGludXgqKQogCSAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0Lm9gIGluCiAJICAgICAgKng4Ni02NCopCi0JICAgICAgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjMyX3g4Nl82NCIKLQkgICAgICAgICA7OworCQlMRD0iJHtMRC1sZH0gLW0gZWxmMzJfeDg2XzY0IgorCQk7OwogCSAgICAgICopCi0JICAgICAgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl9pMzg2IgotCSAgICAgICAgIDs7CisJCUxEPSIke0xELWxkfSAtbSBlbGZfaTM4NiIKKwkJOzsKIAkgICAgZXNhYwogCSAgICA7OwotCSAgcHBjNjQtKmxpbnV4Knxwb3dlcnBjNjQtKmxpbnV4KikKKwkgIHBvd2VycGM2NGxlLSpsaW51eCopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGYzMmxwcGNsaW51eCIKKwkgICAgOzsKKwkgIHBvd2VycGM2NC0qbGludXgqKQogCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmMzJwcGNsaW51eCIKIAkgICAgOzsKIAkgIHMzOTB4LSpsaW51eCopCkBAIC0xMzUyLDcgKzEzOTAsMTAgQEAKIAkgIHg4Nl82NC0qbGludXgqKQogCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX3g4Nl82NCIKIAkgICAgOzsKLQkgIHBwYyotKmxpbnV4Knxwb3dlcnBjKi0qbGludXgqKQorCSAgcG93ZXJwY2xlLSpsaW51eCopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGY2NGxwcGMiCisJICAgIDs7CisJICBwb3dlcnBjLSpsaW51eCopCiAJICAgIExEPSIke0xELWxkfSAtbSBlbGY2NHBwYyIKIAkgICAgOzsKIAkgIHMzOTAqLSpsaW51eCp8czM5MCotKnRwZiopCkBAIC0xMzcwLDE5ICsxNDExLDIwIEBACiAKICotKi1zY28zLjJ2NSopCiAgICMgT24gU0NPIE9wZW5TZXJ2ZXIgNSwgd2UgbmVlZCAtYmVsZiB0byBnZXQgZnVsbC1mZWF0dXJlZCBiaW5hcmllcy4KLSAgU0FWRV9DRkxBR1M9IiRDRkxBR1MiCisgIFNBVkVfQ0ZMQUdTPSRDRkxBR1MKICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1iZWxmIgogICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciB0aGUgQyBjb21waWxlciBuZWVkcyAtYmVsZl0sIGx0X2N2X2NjX25lZWRzX2JlbGYsCiAgICAgW0FDX0xBTkdfUFVTSChDKQogICAgICBBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbXV0sW1tdXSldLFtsdF9jdl9jY19uZWVkc19iZWxmPXllc10sW2x0X2N2X2NjX25lZWRzX2JlbGY9bm9dKQogICAgICBBQ19MQU5HX1BPUF0pCi0gIGlmIHRlc3QgeCIkbHRfY3ZfY2NfbmVlZHNfYmVsZiIgIT0geCJ5ZXMiOyB0aGVuCisgIGlmIHRlc3QgeWVzICE9ICIkbHRfY3ZfY2NfbmVlZHNfYmVsZiI7IHRoZW4KICAgICAjIHRoaXMgaXMgcHJvYmFibHkgZ2NjIDIuOC4wLCBlZ2NzIDEuMCBvciBuZXdlcjsgbm8gbmVlZCBmb3IgLWJlbGYKLSAgICBDRkxBR1M9IiRTQVZFX0NGTEFHUyIKKyAgICBDRkxBR1M9JFNBVkVfQ0ZMQUdTCiAgIGZpCiAgIDs7CiAqLSpzb2xhcmlzKikKLSAgIyBGaW5kIG91dCB3aGljaCBBQkkgd2UgYXJlIHVzaW5nLgorICAjIEZpbmQgb3V0IHdoYXQgQUJJIGlzIGJlaW5nIHByb2R1Y2VkIGJ5IGFjX2NvbXBpbGUsIGFuZCBzZXQgbGlua2VyCisgICMgb3B0aW9ucyBhY2NvcmRpbmdseS4KICAgZWNobyAnaW50IGk7JyA+IGNvbmZ0ZXN0LiRhY19leHQKICAgaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSk7IHRoZW4KICAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0Lm9gIGluCkBAIC0xMzkwLDcgKzE0MzIsNyBAQAogICAgICAgY2FzZSAkbHRfY3ZfcHJvZ19nbnVfbGQgaW4KICAgICAgIHllcyopCiAgICAgICAgIGNhc2UgJGhvc3QgaW4KLSAgICAgICAgaT84Ni0qLXNvbGFyaXMqKQorICAgICAgICBpPzg2LSotc29sYXJpcyp8eDg2XzY0LSotc29sYXJpcyopCiAgICAgICAgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl94ODZfNjQiCiAgICAgICAgICAgOzsKICAgICAgICAgc3BhcmMqLSotc29sYXJpcyopCkBAIC0xMzk5LDcgKzE0NDEsNyBAQAogICAgICAgICBlc2FjCiAgICAgICAgICMgR05VIGxkIDIuMjEgaW50cm9kdWNlZCBfc29sMiBlbXVsYXRpb25zLiAgVXNlIHRoZW0gaWYgYXZhaWxhYmxlLgogICAgICAgICBpZiAke0xELWxkfSAtViB8IGdyZXAgX3NvbDIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gICAgICAgICAgTEQ9IiR7TEQtbGR9X3NvbDIiCisgICAgICAgICAgTEQ9JHtMRC1sZH1fc29sMgogICAgICAgICBmaQogICAgICAgICA7OwogICAgICAgKikKQEAgLTE0MTUsNyArMTQ1Nyw3IEBACiAgIDs7CiBlc2FjCiAKLW5lZWRfbG9ja3M9IiRlbmFibGVfbGlidG9vbF9sb2NrIgorbmVlZF9sb2Nrcz0kZW5hYmxlX2xpYnRvb2xfbG9jawogXSkjIF9MVF9FTkFCTEVfTE9DSwogCiAKQEAgLTE0MzQsMTEgKzE0NzYsMTEgQEAKICAgICAgW2VjaG8gY29uZnRlc3QuJGFjX29iamV4dCA+IGNvbmZ0ZXN0LmxzdAogICAgICAgbHRfYXJfdHJ5PSckQVIgJEFSX0ZMQUdTIGxpYmNvbmZ0ZXN0LmEgQGNvbmZ0ZXN0LmxzdCA+JkFTX01FU1NBR0VfTE9HX0ZEJwogICAgICAgQUNfVFJZX0VWQUwoW2x0X2FyX3RyeV0pCi0gICAgICBpZiB0ZXN0ICIkYWNfc3RhdHVzIiAtZXEgMDsgdGhlbgorICAgICAgaWYgdGVzdCAwIC1lcSAiJGFjX3N0YXR1cyI7IHRoZW4KIAkjIEVuc3VyZSB0aGUgYXJjaGl2ZXIgZmFpbHMgdXBvbiBib2d1cyBmaWxlIG5hbWVzLgogCXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgbGliY29uZnRlc3QuYQogCUFDX1RSWV9FVkFMKFtsdF9hcl90cnldKQotCWlmIHRlc3QgIiRhY19zdGF0dXMiIC1uZSAwOyB0aGVuCisJaWYgdGVzdCAwIC1uZSAiJGFjX3N0YXR1cyI7IHRoZW4KICAgICAgICAgICBsdF9jdl9hcl9hdF9maWxlPUAKICAgICAgICAgZmkKICAgICAgIGZpCkBAIC0xNDQ2LDcgKzE0ODgsNyBAQAogICAgICBdKQogICBdKQogCi1pZiB0ZXN0ICJ4JGx0X2N2X2FyX2F0X2ZpbGUiID0geG5vOyB0aGVuCitpZiB0ZXN0IG5vID0gIiRsdF9jdl9hcl9hdF9maWxlIjsgdGhlbgogICBhcmNoaXZlcl9saXN0X3NwZWM9CiBlbHNlCiAgIGFyY2hpdmVyX2xpc3Rfc3BlYz0kbHRfY3ZfYXJfYXRfZmlsZQpAQCAtMTQ3Nyw3ICsxNTE5LDcgQEAKIAogaWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KICAgY2FzZSAkaG9zdF9vcyBpbgotICBvcGVuYnNkKikKKyAgYml0cmlnKiB8IG9wZW5ic2QqKQogICAgIG9sZF9wb3N0aW5zdGFsbF9jbWRzPSIkb2xkX3Bvc3RpbnN0YWxsX2NtZHN+XCRSQU5MSUIgLXQgXCR0b29sX29sZGxpYiIKICAgICA7OwogICAqKQpAQCAtMTUxMyw3ICsxNTU1LDcgQEAKICAgWyQyPW5vCiAgICBtNF9pZihbJDRdLCAsIFthY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHRdLCBbYWNfb3V0ZmlsZT0kNF0pCiAgICBlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKLSAgIGx0X2NvbXBpbGVyX2ZsYWc9IiQzIgorICAgbHRfY29tcGlsZXJfZmxhZz0iJDMiICAjIyBleGNsdWRlIGZyb20gc2NfdXNlbGVzc19xdW90ZXNfaW5fYXNzaWdubWVudAogICAgIyBJbnNlcnQgdGhlIG9wdGlvbiBlaXRoZXIgKDEpIGFmdGVyIHRoZSBsYXN0ICpGTEFHUyB2YXJpYWJsZSwgb3IKICAgICMgKDIpIGJlZm9yZSBhIHdvcmQgY29udGFpbmluZyAiY29uZnRlc3QuIiwgb3IgKDMpIGF0IHRoZSBlbmQuCiAgICAjIE5vdGUgdGhhdCAkYWNfY29tcGlsZSBpdHNlbGYgZG9lcyBub3QgY29udGFpbiBiYWNrc2xhc2hlcyBhbmQgYmVnaW5zCkBAIC0xNTQwLDcgKzE1ODIsNyBAQAogICAgJFJNIGNvbmZ0ZXN0KgogXSkKIAotaWYgdGVzdCB4IlskXSQyIiA9IHh5ZXM7IHRoZW4KK2lmIHRlc3QgeWVzID0gIlskXSQyIjsgdGhlbgogICAgIG00X2lmKFskNV0sICwgOiwgWyQ1XSkKIGVsc2UKICAgICBtNF9pZihbJDZdLCAsIDosIFskNl0pCkBAIC0xNTYyLDcgKzE2MDQsNyBAQAogbTRfcmVxdWlyZShbX0xUX0RFQ0xfU0VEXSlkbmwKIEFDX0NBQ0hFX0NIRUNLKFskMV0sIFskMl0sCiAgIFskMj1ubwotICAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKKyAgIHNhdmVfTERGTEFHUz0kTERGTEFHUwogICAgTERGTEFHUz0iJExERkxBR1MgJDMiCiAgICBlY2hvICIkbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKICAgIGlmIChldmFsICRhY19saW5rIDI+Y29uZnRlc3QuZXJyKSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgpAQCAtMTU4MSwxMCArMTYyMywxMCBAQAogICAgICBmaQogICAgZmkKICAgICRSTSAtciBjb25mdGVzdCoKLSAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCisgICBMREZMQUdTPSRzYXZlX0xERkxBR1MKIF0pCiAKLWlmIHRlc3QgeCJbJF0kMiIgPSB4eWVzOyB0aGVuCitpZiB0ZXN0IHllcyA9ICJbJF0kMiI7IHRoZW4KICAgICBtNF9pZihbJDRdLCAsIDosIFskNF0pCiBlbHNlCiAgICAgbTRfaWYoWyQ1XSwgLCA6LCBbJDVdKQpAQCAtMTYwNSw3ICsxNjQ3LDcgQEAKIEFDX01TR19DSEVDS0lORyhbdGhlIG1heGltdW0gbGVuZ3RoIG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudHNdKQogQUNfQ0FDSEVfVkFMKFtsdF9jdl9zeXNfbWF4X2NtZF9sZW5dLCBbZG5sCiAgIGk9MAotICB0ZXN0c3RyaW5nPSJBQkNEIgorICB0ZXN0c3RyaW5nPUFCQ0QKIAogICBjYXNlICRidWlsZF9vcyBpbgogICBtc2Rvc2RqZ3BwKikKQEAgLTE2NDUsNyArMTY4Nyw3IEBACiAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTgxOTI7CiAgICAgOzsKIAotICBuZXRic2QqIHwgZnJlZWJzZCogfCBvcGVuYnNkKiB8IGRhcndpbiogfCBkcmFnb25mbHkqKQorICBiaXRyaWcqIHwgZGFyd2luKiB8IGRyYWdvbmZseSogfCBmcmVlYnNkKiB8IG5ldGJzZCogfCBvcGVuYnNkKikKICAgICAjIFRoaXMgaGFzIGJlZW4gYXJvdW5kIHNpbmNlIDM4NkJTRCwgYXQgbGVhc3QuICBMaWtlbHkgZnVydGhlci4KICAgICBpZiB0ZXN0IC14IC9zYmluL3N5c2N0bDsgdGhlbgogICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWAvc2Jpbi9zeXNjdGwgLW4ga2Vybi5hcmdtYXhgCkBAIC0xNjk2LDIyICsxNzM4LDIyIEBACiAgICopCiAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWAoZ2V0Y29uZiBBUkdfTUFYKSAyPiAvZGV2L251bGxgCiAgICAgaWYgdGVzdCAtbiAiJGx0X2N2X3N5c19tYXhfY21kX2xlbiIgJiYgXAotICAgICAgdGVzdCB1bmRlZmluZWQgIT0gIiRsdF9jdl9zeXNfbWF4X2NtZF9sZW4iOyB0aGVuCisgICAgICAgdGVzdCB1bmRlZmluZWQgIT0gIiRsdF9jdl9zeXNfbWF4X2NtZF9sZW4iOyB0aGVuCiAgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgJGx0X2N2X3N5c19tYXhfY21kX2xlbiBcLyA0YAogICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXCogM2AKICAgICBlbHNlCiAgICAgICAjIE1ha2UgdGVzdHN0cmluZyBhIGxpdHRsZSBiaWdnZXIgYmVmb3JlIHdlIGRvIGFueXRoaW5nIHdpdGggaXQuCiAgICAgICAjIGEgMUsgc3RyaW5nIHNob3VsZCBiZSBhIHJlYXNvbmFibGUgc3RhcnQuCi0gICAgICBmb3IgaSBpbiAxIDIgMyA0IDUgNiA3IDggOyBkbworICAgICAgZm9yIGkgaW4gMSAyIDMgNCA1IDYgNyA4OyBkbwogICAgICAgICB0ZXN0c3RyaW5nPSR0ZXN0c3RyaW5nJHRlc3RzdHJpbmcKICAgICAgIGRvbmUKICAgICAgIFNIRUxMPSR7U0hFTEwtJHtDT05GSUdfU0hFTEwtL2Jpbi9zaH19CiAgICAgICAjIElmIHRlc3QgaXMgbm90IGEgc2hlbGwgYnVpbHQtaW4sIHdlJ2xsIHByb2JhYmx5IGVuZCB1cCBjb21wdXRpbmcgYQogICAgICAgIyBtYXhpbXVtIGxlbmd0aCB0aGF0IGlzIG9ubHkgaGFsZiBvZiB0aGUgYWN0dWFsIG1heGltdW0gbGVuZ3RoLCBidXQKICAgICAgICMgd2UgY2FuJ3QgdGVsbC4KLSAgICAgIHdoaWxlIHsgdGVzdCAiWCJgZW52IGVjaG8gIiR0ZXN0c3RyaW5nJHRlc3RzdHJpbmciIDI+L2Rldi9udWxsYCBcCisgICAgICB3aGlsZSB7IHRlc3QgWGBlbnYgZWNobyAiJHRlc3RzdHJpbmckdGVzdHN0cmluZyIgMj4vZGV2L251bGxgIFwKIAkgICAgICAgICA9ICJYJHRlc3RzdHJpbmckdGVzdHN0cmluZyI7IH0gPi9kZXYvbnVsbCAyPiYxICYmCi0JICAgICAgdGVzdCAkaSAhPSAxNyAjIDEvMiBNQiBzaG91bGQgYmUgZW5vdWdoCisJICAgICAgdGVzdCAxNyAhPSAiJGkiICMgMS8yIE1CIHNob3VsZCBiZSBlbm91Z2gKICAgICAgIGRvCiAgICAgICAgIGk9YGV4cHIgJGkgKyAxYAogICAgICAgICB0ZXN0c3RyaW5nPSR0ZXN0c3RyaW5nJHRlc3RzdHJpbmcKQEAgLTE3MjcsNyArMTc2OSw3IEBACiAgICAgOzsKICAgZXNhYwogXSkKLWlmIHRlc3QgLW4gJGx0X2N2X3N5c19tYXhfY21kX2xlbiA7IHRoZW4KK2lmIHRlc3QgLW4gIiRsdF9jdl9zeXNfbWF4X2NtZF9sZW4iOyB0aGVuCiAgIEFDX01TR19SRVNVTFQoJGx0X2N2X3N5c19tYXhfY21kX2xlbikKIGVsc2UKICAgQUNfTVNHX1JFU1VMVChub25lKQpAQCAtMTc1NSw3ICsxNzk3LDcgQEAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogbTRfZGVmdW4oW19MVF9UUllfRExPUEVOX1NFTEZdLAogW200X3JlcXVpcmUoW19MVF9IRUFERVJfRExGQ05dKWRubAotaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgoraWYgdGVzdCB5ZXMgPSAiJGNyb3NzX2NvbXBpbGluZyI7IHRoZW4gOgogICBbJDRdCiBlbHNlCiAgIGx0X2RsdW5rbm93bj0wOyBsdF9kbG5vX3VzY29yZT0xOyBsdF9kbG5lZWRfdXNjb3JlPTIKQEAgLTE4MDQsNyArMTg0Niw3IEBACiAKIC8qIFdoZW4gLWZ2aXNiaWxpdHk9aGlkZGVuIGlzIHVzZWQsIGFzc3VtZSB0aGUgY29kZSBoYXMgYmVlbiBhbm5vdGF0ZWQKICAgIGNvcnJlc3BvbmRpbmdseSBmb3IgdGhlIHN5bWJvbHMgbmVlZGVkLiAgKi8KLSNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoKChfX0dOVUNfXyA9PSAzKSAmJiAoX19HTlVDX01JTk9SX18gPj0gMykpIHx8IChfX0dOVUNfXyA+IDMpKQorI2lmIGRlZmluZWQgX19HTlVDX18gJiYgKCgoX19HTlVDX18gPT0gMykgJiYgKF9fR05VQ19NSU5PUl9fID49IDMpKSB8fCAoX19HTlVDX18gPiAzKSkKIGludCBmbm9yZCAoKSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsKICNlbmRpZgogCkBAIC0xODMwLDcgKzE4NzIsNyBAQAogICByZXR1cm4gc3RhdHVzOwogfV0KIF9MVF9FT0YKLSAgaWYgQUNfVFJZX0VWQUwoYWNfbGluaykgJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fSAyPi9kZXYvbnVsbDsgdGhlbgorICBpZiBBQ19UUllfRVZBTChhY19saW5rKSAmJiB0ZXN0IC1zICJjb25mdGVzdCRhY19leGVleHQiIDI+L2Rldi9udWxsOyB0aGVuCiAgICAgKC4vY29uZnRlc3Q7IGV4aXQ7ICkgPiZBU19NRVNTQUdFX0xPR19GRCAyPi9kZXYvbnVsbAogICAgIGx0X3N0YXR1cz0kPwogICAgIGNhc2UgeCRsdF9zdGF0dXMgaW4KQEAgLTE4NTEsNyArMTg5Myw3IEBACiAjIC0tLS0tLS0tLS0tLS0tLS0tLQogQUNfREVGVU4oW0xUX1NZU19ETE9QRU5fU0VMRl0sCiBbbTRfcmVxdWlyZShbX0xUX0hFQURFUl9ETEZDTl0pZG5sCi1pZiB0ZXN0ICJ4JGVuYWJsZV9kbG9wZW4iICE9IHh5ZXM7IHRoZW4KK2lmIHRlc3QgeWVzICE9ICIkZW5hYmxlX2Rsb3BlbiI7IHRoZW4KICAgZW5hYmxlX2Rsb3Blbj11bmtub3duCiAgIGVuYWJsZV9kbG9wZW5fc2VsZj11bmtub3duCiAgIGVuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWM9dW5rbm93bgpAQCAtMTg2MSw0NCArMTkwMyw1MiBAQAogCiAgIGNhc2UgJGhvc3Rfb3MgaW4KICAgYmVvcyopCi0gICAgbHRfY3ZfZGxvcGVuPSJsb2FkX2FkZF9vbiIKKyAgICBsdF9jdl9kbG9wZW49bG9hZF9hZGRfb24KICAgICBsdF9jdl9kbG9wZW5fbGlicz0KICAgICBsdF9jdl9kbG9wZW5fc2VsZj15ZXMKICAgICA7OwogCiAgIG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQotICAgIGx0X2N2X2Rsb3Blbj0iTG9hZExpYnJhcnkiCisgICAgbHRfY3ZfZGxvcGVuPUxvYWRMaWJyYXJ5CiAgICAgbHRfY3ZfZGxvcGVuX2xpYnM9CiAgICAgOzsKIAogICBjeWd3aW4qKQotICAgIGx0X2N2X2Rsb3Blbj0iZGxvcGVuIgorICAgIGx0X2N2X2Rsb3Blbj1kbG9wZW4KICAgICBsdF9jdl9kbG9wZW5fbGlicz0KICAgICA7OwogCiAgIGRhcndpbiopCi0gICMgaWYgbGliZGwgaXMgaW5zdGFsbGVkIHdlIG5lZWQgdG8gbGluayBhZ2FpbnN0IGl0CisgICAgIyBpZiBsaWJkbCBpcyBpbnN0YWxsZWQgd2UgbmVlZCB0byBsaW5rIGFnYWluc3QgaXQKICAgICBBQ19DSEVDS19MSUIoW2RsXSwgW2Rsb3Blbl0sCi0JCVtsdF9jdl9kbG9wZW49ImRsb3BlbiIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1sZGwiXSxbCi0gICAgbHRfY3ZfZGxvcGVuPSJkeWxkIgorCQlbbHRfY3ZfZGxvcGVuPWRsb3BlbiBsdF9jdl9kbG9wZW5fbGlicz0tbGRsXSxbCisgICAgbHRfY3ZfZGxvcGVuPWR5bGQKICAgICBsdF9jdl9kbG9wZW5fbGlicz0KICAgICBsdF9jdl9kbG9wZW5fc2VsZj15ZXMKICAgICBdKQogICAgIDs7CiAKKyAgdHBmKikKKyAgICAjIERvbid0IHRyeSB0byBydW4gYW55IGxpbmsgdGVzdHMgZm9yIFRQRi4gIFdlIGtub3cgaXQncyBpbXBvc3NpYmxlCisgICAgIyBiZWNhdXNlIFRQRiBpcyBhIGNyb3NzLWNvbXBpbGVyLCBhbmQgd2Uga25vdyBob3cgd2Ugb3BlbiBEU09zLgorICAgIGx0X2N2X2Rsb3Blbj1kbG9wZW4KKyAgICBsdF9jdl9kbG9wZW5fbGlicz0KKyAgICBsdF9jdl9kbG9wZW5fc2VsZj1ubworICAgIDs7CisKICAgKikKICAgICBBQ19DSEVDS19GVU5DKFtzaGxfbG9hZF0sCi0JICBbbHRfY3ZfZGxvcGVuPSJzaGxfbG9hZCJdLAorCSAgW2x0X2N2X2Rsb3Blbj1zaGxfbG9hZF0sCiAgICAgICBbQUNfQ0hFQ0tfTElCKFtkbGRdLCBbc2hsX2xvYWRdLAotCSAgICBbbHRfY3ZfZGxvcGVuPSJzaGxfbG9hZCIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1sZGxkIl0sCisJICAgIFtsdF9jdl9kbG9wZW49c2hsX2xvYWQgbHRfY3ZfZGxvcGVuX2xpYnM9LWxkbGRdLAogCVtBQ19DSEVDS19GVU5DKFtkbG9wZW5dLAotCSAgICAgIFtsdF9jdl9kbG9wZW49ImRsb3BlbiJdLAorCSAgICAgIFtsdF9jdl9kbG9wZW49ZGxvcGVuXSwKIAkgIFtBQ19DSEVDS19MSUIoW2RsXSwgW2Rsb3Blbl0sCi0JCVtsdF9jdl9kbG9wZW49ImRsb3BlbiIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1sZGwiXSwKKwkJW2x0X2N2X2Rsb3Blbj1kbG9wZW4gbHRfY3ZfZGxvcGVuX2xpYnM9LWxkbF0sCiAJICAgIFtBQ19DSEVDS19MSUIoW3N2bGRdLCBbZGxvcGVuXSwKLQkJICBbbHRfY3ZfZGxvcGVuPSJkbG9wZW4iIGx0X2N2X2Rsb3Blbl9saWJzPSItbHN2bGQiXSwKKwkJICBbbHRfY3ZfZGxvcGVuPWRsb3BlbiBsdF9jdl9kbG9wZW5fbGlicz0tbHN2bGRdLAogCSAgICAgIFtBQ19DSEVDS19MSUIoW2RsZF0sIFtkbGRfbGlua10sCi0JCSAgICBbbHRfY3ZfZGxvcGVuPSJkbGRfbGluayIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1sZGxkIl0pCisJCSAgICBbbHRfY3ZfZGxvcGVuPWRsZF9saW5rIGx0X2N2X2Rsb3Blbl9saWJzPS1sZGxkXSkKIAkgICAgICBdKQogCSAgICBdKQogCSAgXSkKQEAgLTE5MDcsMjEgKzE5NTcsMjEgQEAKICAgICA7OwogICBlc2FjCiAKLSAgaWYgdGVzdCAieCRsdF9jdl9kbG9wZW4iICE9IHhubzsgdGhlbgotICAgIGVuYWJsZV9kbG9wZW49eWVzCi0gIGVsc2UKKyAgaWYgdGVzdCBubyA9ICIkbHRfY3ZfZGxvcGVuIjsgdGhlbgogICAgIGVuYWJsZV9kbG9wZW49bm8KKyAgZWxzZQorICAgIGVuYWJsZV9kbG9wZW49eWVzCiAgIGZpCiAKICAgY2FzZSAkbHRfY3ZfZGxvcGVuIGluCiAgIGRsb3BlbikKLSAgICBzYXZlX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCi0gICAgdGVzdCAieCRhY19jdl9oZWFkZXJfZGxmY25faCIgPSB4eWVzICYmIENQUEZMQUdTPSIkQ1BQRkxBR1MgLURIQVZFX0RMRkNOX0giCisgICAgc2F2ZV9DUFBGTEFHUz0kQ1BQRkxBR1MKKyAgICB0ZXN0IHllcyA9ICIkYWNfY3ZfaGVhZGVyX2RsZmNuX2giICYmIENQUEZMQUdTPSIkQ1BQRkxBR1MgLURIQVZFX0RMRkNOX0giCiAKLSAgICBzYXZlX0xERkxBR1M9IiRMREZMQUdTIgorICAgIHNhdmVfTERGTEFHUz0kTERGTEFHUwogICAgIHdsPSRsdF9wcm9nX2NvbXBpbGVyX3dsIGV2YWwgTERGTEFHUz1cIlwkTERGTEFHUyAkZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjXCIKIAotICAgIHNhdmVfTElCUz0iJExJQlMiCisgICAgc2F2ZV9MSUJTPSRMSUJTCiAgICAgTElCUz0iJGx0X2N2X2Rsb3Blbl9saWJzICRMSUJTIgogCiAgICAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgYSBwcm9ncmFtIGNhbiBkbG9wZW4gaXRzZWxmXSwKQEAgLTE5MzEsNyArMTk4MSw3IEBACiAJICAgIGx0X2N2X2Rsb3Blbl9zZWxmPW5vLCBsdF9jdl9kbG9wZW5fc2VsZj1jcm9zcykKICAgICBdKQogCi0gICAgaWYgdGVzdCAieCRsdF9jdl9kbG9wZW5fc2VsZiIgPSB4eWVzOyB0aGVuCisgICAgaWYgdGVzdCB5ZXMgPSAiJGx0X2N2X2Rsb3Blbl9zZWxmIjsgdGhlbgogICAgICAgd2w9JGx0X3Byb2dfY29tcGlsZXJfd2wgZXZhbCBMREZMQUdTPVwiXCRMREZMQUdTICRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY1wiCiAgICAgICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBhIHN0YXRpY2FsbHkgbGlua2VkIHByb2dyYW0gY2FuIGRsb3BlbiBpdHNlbGZdLAogCSAgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljLCBbZG5sCkBAIC0xOTQxLDkgKzE5OTEsOSBAQAogICAgICAgXSkKICAgICBmaQogCi0gICAgQ1BQRkxBR1M9IiRzYXZlX0NQUEZMQUdTIgotICAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCi0gICAgTElCUz0iJHNhdmVfTElCUyIKKyAgICBDUFBGTEFHUz0kc2F2ZV9DUFBGTEFHUworICAgIExERkxBR1M9JHNhdmVfTERGTEFHUworICAgIExJQlM9JHNhdmVfTElCUwogICAgIDs7CiAgIGVzYWMKIApAQCAtMjAzNSw4ICsyMDg1LDggQEAKIG00X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKWRubAogX0xUX0NPTVBJTEVSX0NfTyhbJDFdKQogCi1oYXJkX2xpbmtzPSJub3R0ZXN0ZWQiCi1pZiB0ZXN0ICIkX0xUX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbywgJDEpIiA9IG5vICYmIHRlc3QgIiRuZWVkX2xvY2tzIiAhPSBubzsgdGhlbgoraGFyZF9saW5rcz1ub3R0ZXN0ZWQKK2lmIHRlc3Qgbm8gPSAiJF9MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9jX28sICQxKSIgJiYgdGVzdCBubyAhPSAiJG5lZWRfbG9ja3MiOyB0aGVuCiAgICMgZG8gbm90IG92ZXJ3cml0ZSB0aGUgdmFsdWUgb2YgbmVlZF9sb2NrcyBwcm92aWRlZCBieSB0aGUgdXNlcgogICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIHdlIGNhbiBsb2NrIHdpdGggaGFyZCBsaW5rc10pCiAgIGhhcmRfbGlua3M9eWVzCkBAIC0yMDQ2LDggKzIwOTYsOCBAQAogICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4mNSB8fCBoYXJkX2xpbmtzPW5vCiAgIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPi9kZXYvbnVsbCAmJiBoYXJkX2xpbmtzPW5vCiAgIEFDX01TR19SRVNVTFQoWyRoYXJkX2xpbmtzXSkKLSAgaWYgdGVzdCAiJGhhcmRfbGlua3MiID0gbm87IHRoZW4KLSAgICBBQ19NU0dfV0FSTihbYCRDQycgZG9lcyBub3Qgc3VwcG9ydCBgLWMgLW8nLCBzbyBgbWFrZSAtaicgbWF5IGJlIHVuc2FmZV0pCisgIGlmIHRlc3Qgbm8gPSAiJGhhcmRfbGlua3MiOyB0aGVuCisgICAgQUNfTVNHX1dBUk4oWyckQ0MnIGRvZXMgbm90IHN1cHBvcnQgJy1jIC1vJywgc28gJ21ha2UgLWonIG1heSBiZSB1bnNhZmVdKQogICAgIG5lZWRfbG9ja3M9d2FybgogICBmaQogZWxzZQpAQCAtMjA3NCw4ICsyMTI0LDggQEAKIF9MVF9ERUNMKFtdLCBbb2JqZGlyXSwgWzBdLAogICAgICAgICAgW1RoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyB0ZW1wb3JhcnkgbGlidG9vbCBmaWxlc10pZG5sCiBtNF9wYXR0ZXJuX2FsbG93KFtMVF9PQkpESVJdKWRubAotQUNfREVGSU5FX1VOUVVPVEVEKExUX09CSkRJUiwgIiRsdF9jdl9vYmpkaXIvIiwKLSAgW0RlZmluZSB0byB0aGUgc3ViLWRpcmVjdG9yeSBpbiB3aGljaCBsaWJ0b29sIHN0b3JlcyB1bmluc3RhbGxlZCBsaWJyYXJpZXMuXSkKK0FDX0RFRklORV9VTlFVT1RFRChbTFRfT0JKRElSXSwgIiRsdF9jdl9vYmpkaXIvIiwKKyAgW0RlZmluZSB0byB0aGUgc3ViLWRpcmVjdG9yeSB3aGVyZSBsaWJ0b29sIHN0b3JlcyB1bmluc3RhbGxlZCBsaWJyYXJpZXMuXSkKIF0pIyBfTFRfQ0hFQ0tfT0JKRElSCiAKIApAQCAtMjA4NywxNSArMjEzNywxNSBAQAogX0xUX1RBR1ZBUihoYXJkY29kZV9hY3Rpb24sICQxKT0KIGlmIHRlc3QgLW4gIiRfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKSIgfHwKICAgIHRlc3QgLW4gIiRfTFRfVEFHVkFSKHJ1bnBhdGhfdmFyLCAkMSkiIHx8Ci0gICB0ZXN0ICJYJF9MVF9UQUdWQVIoaGFyZGNvZGVfYXV0b21hdGljLCAkMSkiID0gIlh5ZXMiIDsgdGhlbgorICAgdGVzdCB5ZXMgPSAiJF9MVF9UQUdWQVIoaGFyZGNvZGVfYXV0b21hdGljLCAkMSkiOyB0aGVuCiAKICAgIyBXZSBjYW4gaGFyZGNvZGUgbm9uLWV4aXN0ZW50IGRpcmVjdG9yaWVzLgotICBpZiB0ZXN0ICIkX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKSIgIT0gbm8gJiYKKyAgaWYgdGVzdCBubyAhPSAiJF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSkiICYmCiAgICAgICMgSWYgdGhlIG9ubHkgbWVjaGFuaXNtIHRvIGF2b2lkIGhhcmRjb2RpbmcgaXMgc2hsaWJwYXRoX3Zhciwgd2UKICAgICAgIyBoYXZlIHRvIHJlbGluaywgb3RoZXJ3aXNlIHdlIG1pZ2h0IGxpbmsgd2l0aCBhbiBpbnN0YWxsZWQgbGlicmFyeQogICAgICAjIHdoZW4gd2Ugc2hvdWxkIGJlIGxpbmtpbmcgd2l0aCBhIHlldC10by1iZS1pbnN0YWxsZWQgb25lCi0gICAgICMjIHRlc3QgIiRfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKSIgIT0gbm8gJiYKLSAgICAgdGVzdCAiJF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpIiAhPSBubzsgdGhlbgorICAgICAjIyB0ZXN0IG5vICE9ICIkX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSkiICYmCisgICAgIHRlc3Qgbm8gIT0gIiRfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKSI7IHRoZW4KICAgICAjIExpbmtpbmcgYWx3YXlzIGhhcmRjb2RlcyB0aGUgdGVtcG9yYXJ5IGxpYnJhcnkgZGlyZWN0b3J5LgogICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfYWN0aW9uLCAkMSk9cmVsaW5rCiAgIGVsc2UKQEAgLTIxMDksMTIgKzIxNTksMTIgQEAKIGZpCiBBQ19NU0dfUkVTVUxUKFskX0xUX1RBR1ZBUihoYXJkY29kZV9hY3Rpb24sICQxKV0pCiAKLWlmIHRlc3QgIiRfTFRfVEFHVkFSKGhhcmRjb2RlX2FjdGlvbiwgJDEpIiA9IHJlbGluayB8fAotICAgdGVzdCAiJF9MVF9UQUdWQVIoaW5oZXJpdF9ycGF0aCwgJDEpIiA9IHllczsgdGhlbgoraWYgdGVzdCByZWxpbmsgPSAiJF9MVF9UQUdWQVIoaGFyZGNvZGVfYWN0aW9uLCAkMSkiIHx8CisgICB0ZXN0IHllcyA9ICIkX0xUX1RBR1ZBUihpbmhlcml0X3JwYXRoLCAkMSkiOyB0aGVuCiAgICMgRmFzdCBpbnN0YWxsYXRpb24gaXMgbm90IHN1cHBvcnRlZAogICBlbmFibGVfZmFzdF9pbnN0YWxsPW5vCi1lbGlmIHRlc3QgIiRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgiID0geWVzIHx8Ci0gICAgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IG5vOyB0aGVuCitlbGlmIHRlc3QgeWVzID0gIiRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgiIHx8CisgICAgIHRlc3Qgbm8gPSAiJGVuYWJsZV9zaGFyZWQiOyB0aGVuCiAgICMgRmFzdCBpbnN0YWxsYXRpb24gaXMgbm90IG5lY2Vzc2FyeQogICBlbmFibGVfZmFzdF9pbnN0YWxsPW5lZWRsZXNzCiBmaQpAQCAtMjEzOCw3ICsyMTg4LDcgQEAKICMgRklYTUUgLSBpbnNlcnQgc29tZSByZWFsIHRlc3RzLCBob3N0X29zIGlzbid0IHJlYWxseSBnb29kIGVub3VnaAogICBjYXNlICRob3N0X29zIGluCiAgIGRhcndpbiopCi0gICAgaWYgdGVzdCAtbiAiJFNUUklQIiA7IHRoZW4KKyAgICBpZiB0ZXN0IC1uICIkU1RSSVAiOyB0aGVuCiAgICAgICBzdHJpcGxpYj0iJFNUUklQIC14IgogICAgICAgb2xkX3N0cmlwbGliPSIkU1RSSVAgLVMiCiAgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQpAQCAtMjE2OSwxNCArMjIxOSwxNCBAQAogQUNfTVNHX0NIRUNLSU5HKFtkeW5hbWljIGxpbmtlciBjaGFyYWN0ZXJpc3RpY3NdKQogbTRfaWYoWyQxXSwKIAlbXSwgWwotaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KK2lmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCiAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBkYXJ3aW4qKSBsdF9hd2tfYXJnPSIvXmxpYnJhcmllczovLC9MUi8iIDs7Ci0gICAgKikgbHRfYXdrX2FyZz0iL15saWJyYXJpZXM6LyIgOzsKKyAgICBkYXJ3aW4qKSBsdF9hd2tfYXJnPScvXmxpYnJhcmllczovLC9MUi8nIDs7CisgICAgKikgbHRfYXdrX2FyZz0nL15saWJyYXJpZXM6LycgOzsKICAgZXNhYwogICBjYXNlICRob3N0X29zIGluCi0gICAgbWluZ3cqIHwgY2VnY2MqKSBsdF9zZWRfc3RyaXBfZXE9InMsPVwoW1tBLVphLXpdXTpcKSxcMSxnIiA7OwotICAgICopIGx0X3NlZF9zdHJpcF9lcT0icyw9LywvLGciIDs7CisgICAgbWluZ3cqIHwgY2VnY2MqKSBsdF9zZWRfc3RyaXBfZXE9J3N8PVwoW1tBLVphLXpdXTpcKXxcMXxnJyA7OworICAgICopIGx0X3NlZF9zdHJpcF9lcT0nc3w9L3wvfGcnIDs7CiAgIGVzYWMKICAgbHRfc2VhcmNoX3BhdGhfc3BlYz1gJENDIC1wcmludC1zZWFyY2gtZGlycyB8IGF3ayAkbHRfYXdrX2FyZyB8ICRTRUQgLWUgInMvXmxpYnJhcmllczovLyIgLWUgJGx0X3NlZF9zdHJpcF9lcWAKICAgY2FzZSAkbHRfc2VhcmNoX3BhdGhfc3BlYyBpbgpAQCAtMjE5MiwyOCArMjI0MiwzNSBAQAogICAgIDs7CiAgIGVzYWMKICAgIyBPaywgbm93IHdlIGhhdmUgdGhlIHBhdGgsIHNlcGFyYXRlZCBieSBzcGFjZXMsIHdlIGNhbiBzdGVwIHRocm91Z2ggaXQKLSAgIyBhbmQgYWRkIG11bHRpbGliIGRpciBpZiBuZWNlc3NhcnkuCisgICMgYW5kIGFkZCBtdWx0aWxpYiBkaXIgaWYgbmVjZXNzYXJ5Li4uCiAgIGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjPQotICBsdF9tdWx0aV9vc19kaXI9YCRDQyAkQ1BQRkxBR1MgJENGTEFHUyAkTERGTEFHUyAtcHJpbnQtbXVsdGktb3MtZGlyZWN0b3J5IDI+L2Rldi9udWxsYAorICBsdF9tdWx0aV9vc19kaXI9L2AkQ0MgJENQUEZMQUdTICRDRkxBR1MgJExERkxBR1MgLXByaW50LW11bHRpLW9zLWRpcmVjdG9yeSAyPi9kZXYvbnVsbGAKKyAgIyAuLi5idXQgaWYgc29tZSBwYXRoIGNvbXBvbmVudCBhbHJlYWR5IGVuZHMgd2l0aCB0aGUgbXVsdGlsaWIgZGlyIHdlIGFzc3VtZQorICAjIHRoYXQgYWxsIGlzIGZpbmUgYW5kIHRydXN0IC1wcmludC1zZWFyY2gtZGlycyBhcyBpcyAoR0NDIDQuMj8gb3IgbmV3ZXIpLgorICBjYXNlICIkbHRfbXVsdGlfb3NfZGlyOyAkbHRfc2VhcmNoX3BhdGhfc3BlYyAiIGluCisgICIvOyAiKiB8ICIvLjsgIiogfCAiLy4vOyAiKiB8ICoiJGx0X211bHRpX29zX2RpciAiKiB8ICoiJGx0X211bHRpX29zX2Rpci8gIiopCisgICAgbHRfbXVsdGlfb3NfZGlyPQorICAgIDs7CisgIGVzYWMKICAgZm9yIGx0X3N5c19wYXRoIGluICRsdF9zZWFyY2hfcGF0aF9zcGVjOyBkbwotICAgIGlmIHRlc3QgLWQgIiRsdF9zeXNfcGF0aC8kbHRfbXVsdGlfb3NfZGlyIjsgdGhlbgotICAgICAgbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWM9IiRsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYyAkbHRfc3lzX3BhdGgvJGx0X211bHRpX29zX2RpciIKLSAgICBlbHNlCisgICAgaWYgdGVzdCAtZCAiJGx0X3N5c19wYXRoJGx0X211bHRpX29zX2RpciI7IHRoZW4KKyAgICAgIGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjPSIkbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWMgJGx0X3N5c19wYXRoJGx0X211bHRpX29zX2RpciIKKyAgICBlbGlmIHRlc3QgLW4gIiRsdF9tdWx0aV9vc19kaXIiOyB0aGVuCiAgICAgICB0ZXN0IC1kICIkbHRfc3lzX3BhdGgiICYmIFwKIAlsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYz0iJGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjICRsdF9zeXNfcGF0aCIKICAgICBmaQogICBkb25lCiAgIGx0X3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWMiIHwgYXdrICcKLUJFR0lOIHtSUz0iICI7IEZTPSIvfFxuIjt9IHsKLSAgbHRfZm9vPSIiOwotICBsdF9jb3VudD0wOworQkVHSU4ge1JTID0gIiAiOyBGUyA9ICIvfFxuIjt9IHsKKyAgbHRfZm9vID0gIiI7CisgIGx0X2NvdW50ID0gMDsKICAgZm9yIChsdF9pID0gTkY7IGx0X2kgPiAwOyBsdF9pLS0pIHsKICAgICBpZiAoJGx0X2kgIT0gIiIgJiYgJGx0X2kgIT0gIi4iKSB7CiAgICAgICBpZiAoJGx0X2kgPT0gIi4uIikgewogICAgICAgICBsdF9jb3VudCsrOwogICAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKGx0X2NvdW50ID09IDApIHsKLSAgICAgICAgICBsdF9mb289Ii8iICRsdF9pIGx0X2ZvbzsKKyAgICAgICAgICBsdF9mb28gPSAiLyIgJGx0X2kgbHRfZm9vOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgIGx0X2NvdW50LS07CiAgICAgICAgIH0KQEAgLTIyMjcsNyArMjI4NCw3IEBACiAgICMgZm9yIHRoZXNlIGhvc3RzLgogICBjYXNlICRob3N0X29zIGluCiAgICAgbWluZ3cqIHwgY2VnY2MqKSBsdF9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJGx0X3NlYXJjaF9wYXRoX3NwZWMiIHxcCi0gICAgICAkU0VEICdzLC9cKFtbQS1aYS16XV06XCksXDEsZydgIDs7CisgICAgICAkU0VEICdzfC9cKFtbQS1aYS16XV06XCl8XDF8ZydgIDs7CiAgIGVzYWMKICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJGx0X3NlYXJjaF9wYXRoX3NwZWMiIHwgJGx0X05MMlNQYAogZWxzZQpAQCAtMjIzNiw3ICsyMjkzLDcgQEAKIGxpYnJhcnlfbmFtZXNfc3BlYz0KIGxpYm5hbWVfc3BlYz0nbGliJG5hbWUnCiBzb25hbWVfc3BlYz0KLXNocmV4dF9jbWRzPSIuc28iCitzaHJleHRfY21kcz0uc28KIHBvc3RpbnN0YWxsX2NtZHM9CiBwb3N0dW5pbnN0YWxsX2NtZHM9CiBmaW5pc2hfY21kcz0KQEAgLTIyNTYsMTEgKzIzMTMsMTEgQEAKIGNhc2UgJGhvc3Rfb3MgaW4KIGFpeDMqKQogICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAkbGlibmFtZS5hJworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUuYScKICAgc2hsaWJwYXRoX3Zhcj1MSUJQQVRICiAKICAgIyBBSVggMyBoYXMgbm8gdmVyc2lvbmluZyBzdXBwb3J0LCBzbyB3ZSBhcHBlbmQgYSBtYWpvciB2ZXJzaW9uIHRvIHRoZSBuYW1lLgotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJwogICA7OwogCiBhaXhbWzQtOV1dKikKQEAgLTIyNjgsNDAgKzIzMjUsNDAgQEAKICAgbmVlZF9saWJfcHJlZml4PW5vCiAgIG5lZWRfdmVyc2lvbj1ubwogICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisgIGlmIHRlc3QgaWE2NCA9ICIkaG9zdF9jcHUiOyB0aGVuCiAgICAgIyBBSVggNSBzdXBwb3J0cyBJQTY0Ci0gICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRzaGFyZWRfZXh0JwogICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICiAgIGVsc2UKICAgICAjIFdpdGggR0NDIHVwIHRvIDIuOTUueCwgY29sbGVjdDIgd291bGQgY3JlYXRlIGFuIGltcG9ydCBmaWxlCiAgICAgIyBmb3IgZGVwZW5kZW5jZSBsaWJyYXJpZXMuICBUaGUgaW1wb3J0IGZpbGUgd291bGQgc3RhcnQgd2l0aAotICAgICMgdGhlIGxpbmUgYCMhIC4nLiAgVGhpcyB3b3VsZCBjYXVzZSB0aGUgZ2VuZXJhdGVkIGxpYnJhcnkgdG8KLSAgICAjIGRlcGVuZCBvbiBgLicsIGFsd2F5cyBhbiBpbnZhbGlkIGxpYnJhcnkuICBUaGlzIHdhcyBmaXhlZCBpbgorICAgICMgdGhlIGxpbmUgJyMhIC4nLiAgVGhpcyB3b3VsZCBjYXVzZSB0aGUgZ2VuZXJhdGVkIGxpYnJhcnkgdG8KKyAgICAjIGRlcGVuZCBvbiAnLicsIGFsd2F5cyBhbiBpbnZhbGlkIGxpYnJhcnkuICBUaGlzIHdhcyBmaXhlZCBpbgogICAgICMgZGV2ZWxvcG1lbnQgc25hcHNob3RzIG9mIEdDQyBwcmlvciB0byAzLjAuCiAgICAgY2FzZSAkaG9zdF9vcyBpbgogICAgICAgYWl4NCB8IGFpeDQuW1swMV1dIHwgYWl4NC5bWzAxXV0uKikKICAgICAgIGlmIHsgZWNobyAnI2lmIF9fR05VQ19fID4gMiB8fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA+PSA5NyknCiAJICAgZWNobyAnIHllcyAnCi0JICAgZWNobyAnI2VuZGlmJzsgfSB8ICR7Q0N9IC1FIC0gfCAkR1JFUCB5ZXMgPiAvZGV2L251bGw7IHRoZW4KKwkgICBlY2hvICcjZW5kaWYnOyB9IHwgJENDIC1FIC0gfCAkR1JFUCB5ZXMgPiAvZGV2L251bGw7IHRoZW4KIAk6CiAgICAgICBlbHNlCiAJY2FuX2J1aWxkX3NoYXJlZD1ubwogICAgICAgZmkKICAgICAgIDs7CiAgICAgZXNhYwotICAgICMgQUlYIChvbiBQb3dlciopIGhhcyBubyB2ZXJzaW9uaW5nIHN1cHBvcnQsIHNvIGN1cnJlbnRseSB3ZSBjYW4gbm90IGhhcmRjb2RlIGNvcnJlY3QKKyAgICAjIEFJWCAob24gUG93ZXIqKSBoYXMgbm8gdmVyc2lvbmluZyBzdXBwb3J0LCBzbyBjdXJyZW50bHkgd2UgY2Fubm90IGhhcmRjb2RlIGNvcnJlY3QKICAgICAjIHNvbmFtZSBpbnRvIGV4ZWN1dGFibGUuIFByb2JhYmx5IHdlIGNhbiBhZGQgdmVyc2lvbmluZyBzdXBwb3J0IHRvCiAgICAgIyBjb2xsZWN0Miwgc28gYWRkaXRpb25hbCBsaW5rcyBjYW4gYmUgdXNlZnVsIGluIGZ1dHVyZS4KLSAgICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KKyAgICBpZiB0ZXN0IHllcyA9ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyI7IHRoZW4KICAgICAgICMgSWYgdXNpbmcgcnVuIHRpbWUgbGlua2luZyAob24gQUlYIDQuMiBvciBsYXRlcikgdXNlIGxpYjxuYW1lPi5zbwogICAgICAgIyBpbnN0ZWFkIG9mIGxpYjxuYW1lPi5hIHRvIGxldCBwZW9wbGUga25vdyB0aGF0IHRoZXNlIGFyZSBub3QKICAgICAgICMgdHlwaWNhbCBBSVggc2hhcmVkIGxpYnJhcmllcy4KLSAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JwogICAgIGVsc2UKICAgICAgICMgV2UgcHJlc2VydmUgLmEgYXMgZXh0ZW5zaW9uIGZvciBzaGFyZWQgbGlicmFyaWVzIHRocm91Z2ggQUlYNC4yCiAgICAgICAjIGFuZCBsYXRlciB3aGVuIHdlIGFyZSBub3QgZG9pbmcgcnVuIHRpbWUgbGlua2luZy4KLSAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0uYSAkbGlibmFtZS5hJwotICAgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZS5hICRsaWJuYW1lLmEnCisgICAgICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJwogICAgIGZpCiAgICAgc2hsaWJwYXRoX3Zhcj1MSUJQQVRICiAgIGZpCkBAIC0yMzEyLDE4ICsyMzY5LDE4IEBACiAgIHBvd2VycGMpCiAgICAgIyBTaW5jZSBKdWx5IDIwMDcgQW1pZ2FPUzQgb2ZmaWNpYWxseSBzdXBwb3J0cyAuc28gbGlicmFyaWVzLgogICAgICMgV2hlbiBjb21waWxpbmcgdGhlIGV4ZWN1dGFibGUsIGFkZCAtdXNlLWR5bmxkIC1Mc29ianM6IHRvIHRoZSBjb21waWxlbGluZS4KLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCiAgICAgOzsKICAgbTY4aykKICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLml4bGlicmFyeSAkbGlibmFtZS5hJwogICAgICMgQ3JlYXRlICR7bGlibmFtZX1faXhsaWJyYXJ5LmEgZW50cmllcyBpbiAvc3lzL2xpYnMuCi0gICAgZmluaXNoX2V2YWw9J2ZvciBsaWIgaW4gYGxzICRsaWJkaXIvKi5peGxpYnJhcnkgMj4vZGV2L251bGxgOyBkbyBsaWJuYW1lPWBmdW5jX2VjaG9fYWxsICIkbGliIiB8ICRTRUQgJ1wnJ3MlXi4qL1woW1teL11dKlwpXC5peGxpYnJhcnkkJVwxJSdcJydgOyB0ZXN0ICRSTSAvc3lzL2xpYnMvJHtsaWJuYW1lfV9peGxpYnJhcnkuYTsgJHNob3cgImNkIC9zeXMvbGlicyAmJiAkTE5fUyAkbGliICR7bGlibmFtZX1faXhsaWJyYXJ5LmEiOyBjZCAvc3lzL2xpYnMgJiYgJExOX1MgJGxpYiAke2xpYm5hbWV9X2l4bGlicmFyeS5hIHx8IGV4aXQgMTsgZG9uZScKKyAgICBmaW5pc2hfZXZhbD0nZm9yIGxpYiBpbiBgbHMgJGxpYmRpci8qLml4bGlicmFyeSAyPi9kZXYvbnVsbGA7IGRvIGxpYm5hbWU9YGZ1bmNfZWNob19hbGwgIiRsaWIiIHwgJFNFRCAnXCcncyVeLiovXChbW14vXV0qXClcLml4bGlicmFyeSQlXDElJ1wnJ2A7ICRSTSAvc3lzL2xpYnMvJHtsaWJuYW1lfV9peGxpYnJhcnkuYTsgJHNob3cgImNkIC9zeXMvbGlicyAmJiAkTE5fUyAkbGliICR7bGlibmFtZX1faXhsaWJyYXJ5LmEiOyBjZCAvc3lzL2xpYnMgJiYgJExOX1MgJGxpYiAke2xpYm5hbWV9X2l4bGlicmFyeS5hIHx8IGV4aXQgMTsgZG9uZScKICAgICA7OwogICBlc2FjCiAgIDs7CiAKIGJlb3MqKQotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3NoYXJlZF9leHR9JworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNoYXJlZF9leHQnCiAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBsZC5zbyIKICAgc2hsaWJwYXRoX3Zhcj1MSUJSQVJZX1BBVEgKICAgOzsKQEAgLTIzMzEsOCArMjM4OCw4IEBACiBic2RpW1s0NV1dKikKICAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgogICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKICAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgJGxpYmRpcicKICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvc2hsaWIgL3Vzci9saWIgL3Vzci9YMTEvbGliIC91c3IvY29udHJpYi9saWIgL2xpYiAvdXNyL2xvY2FsL2xpYiIKQEAgLTIzNDQsNyArMjQwMSw3IEBACiAKIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKICAgdmVyc2lvbl90eXBlPXdpbmRvd3MKLSAgc2hyZXh0X2NtZHM9Ii5kbGwiCisgIHNocmV4dF9jbWRzPS5kbGwKICAgbmVlZF92ZXJzaW9uPW5vCiAgIG5lZWRfbGliX3ByZWZpeD1ubwogCkBAIC0yMzUzLDggKzI0MTAsOCBAQAogICAgICMgZ2NjCiAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5kbGwuYScKICAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCi0gICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJHtmaWxlfWB+Ci0gICAgICBkbHBhdGg9YCRTSEVMTCAyPiYxIC1jICdcJycuICRkaXIvJ1wnJ1wke2Jhc2VfZmlsZX0nXCcnaTsgZWNobyBcJGRsbmFtZSdcJydgfgorICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCRmaWxlYH4KKyAgICAgIGRscGF0aD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGRpci8nXCcnXCRiYXNlX2ZpbGUnXCcnaTsgZWNobyBcJGRsbmFtZSdcJydgfgogICAgICAgZGxkaXI9JGRlc3RkaXIvYGRpcm5hbWUgXCRkbHBhdGhgfgogICAgICAgdGVzdCAtZCBcJGRsZGlyIHx8IG1rZGlyIC1wIFwkZGxkaXJ+CiAgICAgICAkaW5zdGFsbF9wcm9nICRkaXIvJGRsbmFtZSBcJGRsZGlyLyRkbG5hbWV+CkBAIC0yMzcwLDE3ICsyNDI3LDE3IEBACiAgICAgY2FzZSAkaG9zdF9vcyBpbgogICAgIGN5Z3dpbiopCiAgICAgICAjIEN5Z3dpbiBETExzIHVzZSAnY3lnJyBwcmVmaXggcmF0aGVyIHRoYW4gJ2xpYicKLSAgICAgIHNvbmFtZV9zcGVjPSdgZWNobyAke2xpYm5hbWV9IHwgc2VkIC1lICdzL15saWIvY3lnLydgYGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvW1suXV0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworICAgICAgc29uYW1lX3NwZWM9J2BlY2hvICRsaWJuYW1lIHwgc2VkIC1lICdzL15saWIvY3lnLydgYGVjaG8gJHJlbGVhc2UgfCAkU0VEIC1lICdzL1tbLl1dLy0vZydgJHZlcnN1ZmZpeCRzaGFyZWRfZXh0JwogbTRfaWYoWyQxXSwgW10sWwogICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIC91c3IvbGliL3czMmFwaSJdKQogICAgICAgOzsKICAgICBtaW5ndyogfCBjZWdjYyopCiAgICAgICAjIE1pbkdXIERMTHMgdXNlIHRyYWRpdGlvbmFsICdsaWInIHByZWZpeAotICAgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bWy5dXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCisgICAgICBzb25hbWVfc3BlYz0nJGxpYm5hbWVgZWNobyAkcmVsZWFzZSB8ICRTRUQgLWUgJ3MvW1suXV0vLS9nJ2AkdmVyc3VmZml4JHNoYXJlZF9leHQnCiAgICAgICA7OwogICAgIHB3MzIqKQogICAgICAgIyBwdzMyIERMTHMgdXNlICdwdycgcHJlZml4IHJhdGhlciB0aGFuICdsaWInCi0gICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9J2BlY2hvICR7bGlibmFtZX0gfCBzZWQgLWUgJ3MvXmxpYi9wdy8nYGBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1tbLl1dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nYGVjaG8gJGxpYm5hbWUgfCBzZWQgLWUgJ3MvXmxpYi9wdy8nYGBlY2hvICRyZWxlYXNlIHwgJFNFRCAtZSAncy9bWy5dXS8tL2cnYCR2ZXJzdWZmaXgkc2hhcmVkX2V4dCcKICAgICAgIDs7CiAgICAgZXNhYwogICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCkBAIC0yMzg5LDggKzI0NDYsOCBAQAogICAqLGNsKikKICAgICAjIE5hdGl2ZSBNU1ZDCiAgICAgbGlibmFtZV9zcGVjPSckbmFtZScKLSAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfWBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1tbLl1dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0uZGxsLmxpYicKKyAgICBzb25hbWVfc3BlYz0nJGxpYm5hbWVgZWNobyAkcmVsZWFzZSB8ICRTRUQgLWUgJ3MvW1suXV0vLS9nJ2AkdmVyc3VmZml4JHNoYXJlZF9leHQnCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5kbGwubGliJwogCiAgICAgY2FzZSAkYnVpbGRfb3MgaW4KICAgICBtaW5ndyopCkBAIC0yNDE3LDcgKzI0NzQsNyBAQAogICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLXVuaXggIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKICAgICAgIDs7CiAgICAgKikKLSAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJExJQiIKKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0kTElCCiAgICAgICBpZiAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCBbJEdSRVAgJztbYy16Qy1aXTovJyA+L2Rldi9udWxsXTsgdGhlbgogICAgICAgICAjIEl0IGlzIG1vc3QgcHJvYmFibHkgYSBXaW5kb3dzIGZvcm1hdCBQQVRILgogICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgJ3MvOy8gL2cnYApAQCAtMjQzMCw4ICsyNDg3LDggQEAKICAgICBlc2FjCiAKICAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCi0gICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJHtmaWxlfWB+Ci0gICAgICBkbHBhdGg9YCRTSEVMTCAyPiYxIC1jICdcJycuICRkaXIvJ1wnJ1wke2Jhc2VfZmlsZX0nXCcnaTsgZWNobyBcJGRsbmFtZSdcJydgfgorICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCRmaWxlYH4KKyAgICAgIGRscGF0aD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGRpci8nXCcnXCRiYXNlX2ZpbGUnXCcnaTsgZWNobyBcJGRsbmFtZSdcJydgfgogICAgICAgZGxkaXI9JGRlc3RkaXIvYGRpcm5hbWUgXCRkbHBhdGhgfgogICAgICAgdGVzdCAtZCBcJGRsZGlyIHx8IG1rZGlyIC1wIFwkZGxkaXJ+CiAgICAgICAkaW5zdGFsbF9wcm9nICRkaXIvJGRsbmFtZSBcJGRsZGlyLyRkbG5hbWUnCkBAIC0yNDQ0LDcgKzI1MDEsNyBAQAogCiAgICopCiAgICAgIyBBc3N1bWUgTVNWQyB3cmFwcGVyCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvW1suXV0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9ICRsaWJuYW1lLmxpYicKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lYGVjaG8gJHJlbGVhc2UgfCAkU0VEIC1lICdzL1tbLl1dLy0vZydgJHZlcnN1ZmZpeCRzaGFyZWRfZXh0ICRsaWJuYW1lLmxpYicKICAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJwogICAgIDs7CiAgIGVzYWMKQEAgLTI0NTcsOCArMjUxNCw4IEBACiAgIHZlcnNpb25fdHlwZT1kYXJ3aW4KICAgbmVlZF9saWJfcHJlZml4PW5vCiAgIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHttYWpvcn0kc2hhcmVkX2V4dCAke2xpYm5hbWV9JHNoYXJlZF9leHQnCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7bWFqb3J9JHNoYXJlZF9leHQnCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRtYWpvciRzaGFyZWRfZXh0ICRsaWJuYW1lJHNoYXJlZF9leHQnCisgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJG1ham9yJHNoYXJlZF9leHQnCiAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKICAgc2hsaWJwYXRoX3Zhcj1EWUxEX0xJQlJBUllfUEFUSAogICBzaHJleHRfY21kcz0nYHRlc3QgLiRtb2R1bGUgPSAueWVzICYmIGVjaG8gLnNvIHx8IGVjaG8gLmR5bGliYCcKQEAgLTI0NzEsOCArMjUyOCw4IEBACiAgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKICAgbmVlZF9saWJfcHJlZml4PW5vCiAgIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKICAgOzsKIApAQCAtMjQ5MCwxMiArMjU0NywxMiBAQAogICB2ZXJzaW9uX3R5cGU9ZnJlZWJzZC0kb2JqZm9ybWF0CiAgIGNhc2UgJHZlcnNpb25fdHlwZSBpbgogICAgIGZyZWVic2QtZWxmKikKLSAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCAkbGlibmFtZSRzaGFyZWRfZXh0JwogICAgICAgbmVlZF92ZXJzaW9uPW5vCiAgICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KICAgICAgIDs7CiAgICAgZnJlZWJzZC0qKQotICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICRsaWJuYW1lJHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkc2hhcmVkX2V4dCR2ZXJzdWZmaXgnCiAgICAgICBuZWVkX3ZlcnNpb249eWVzCiAgICAgICA7OwogICBlc2FjCkBAIC0yNTIwLDI2ICsyNTc3LDE1IEBACiAgIGVzYWMKICAgOzsKIAotZ251KikKLSAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0ke21ham9yfSAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgOzsKLQogaGFpa3UqKQogICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCiAgIG5lZWRfbGliX3ByZWZpeD1ubwogICBuZWVkX3ZlcnNpb249bm8KICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIHJ1bnRpbWVfbG9hZGVyIgotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHttYWpvcn0gJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKICAgc2hsaWJwYXRoX3Zhcj1MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy9ib290L2hvbWUvY29uZmlnL2xpYiAvYm9vdC9jb21tb24vbGliIC9ib290L3N5c3RlbS9saWInCiAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKICAgOzsKQEAgLTI1NTcsOSArMjYwMyw5IEBACiAgICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGRsZC5zbyIKICAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAogICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMgIyBVbmxlc3MgK25vZW52dmFyIGlzIHNwZWNpZmllZC4KLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICAgIGlmIHRlc3QgIlgkSFBVWF9JQTY0X01PREUiID0gWDMyOyB0aGVuCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCisgICAgaWYgdGVzdCAzMiA9ICIkSFBVWF9JQTY0X01PREUiOyB0aGVuCiAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL2hwdXgzMiAvdXNyL2xvY2FsL2xpYi9ocHV4MzIgL3Vzci9sb2NhbC9saWIiCiAgICAgZWxzZQogICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYi9ocHV4NjQgL3Vzci9sb2NhbC9saWIvaHB1eDY0IgpAQCAtMjU3Miw4ICsyNjE4LDggQEAKICAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNsIgogICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRIICMgSG93IHNob3VsZCB3ZSBoYW5kbGUgU0hMSUJfUEFUSAogICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMgIyBVbmxlc3MgK25vZW52dmFyIGlzIHNwZWNpZmllZC4KLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJwogICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIvcGEyMF82NCAvdXNyL2Njcy9saWIvcGEyMF82NCIKICAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCiAgICAgOzsKQEAgLTI1ODIsOCArMjYyOCw4IEBACiAgICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGRsZC5zbCIKICAgICBzaGxpYnBhdGhfdmFyPVNITElCX1BBVEgKICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8gIyArcyBpcyByZXF1aXJlZCB0byBlbmFibGUgU0hMSUJfUEFUSAotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCiAgICAgOzsKICAgZXNhYwogICAjIEhQLVVYIHJ1bnMgKnJlYWxseSogc2xvd2x5IHVubGVzcyBzaGFyZWQgbGlicmFyaWVzIGFyZSBtb2RlIDU1NSwgLi4uCkBAIC0yNTk2LDggKzI2NDIsOCBAQAogICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCiAgIG5lZWRfbGliX3ByZWZpeD1ubwogICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJwogICBkeW5hbWljX2xpbmtlcj0nSW50ZXJpeCAzLnggbGQuc28uMSAoUEUsIGxpa2UgRUxGKScKICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCkBAIC0yNjA4LDcgKzI2NTQsNyBAQAogICBjYXNlICRob3N0X29zIGluCiAgICAgbm9uc3RvcHV4KikgdmVyc2lvbl90eXBlPW5vbnN0b3B1eCA7OwogICAgICopCi0JaWYgdGVzdCAiJGx0X2N2X3Byb2dfZ251X2xkIiA9IHllczsgdGhlbgorCWlmIHRlc3QgeWVzID0gIiRsdF9jdl9wcm9nX2dudV9sZCI7IHRoZW4KIAkJdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgogCWVsc2UKIAkJdmVyc2lvbl90eXBlPWlyaXgKQEAgLTI2MTYsOCArMjY2Miw4IEBACiAgIGVzYWMKICAgbmVlZF9saWJfcHJlZml4PW5vCiAgIG5lZWRfdmVyc2lvbj1ubwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0ICRsaWJuYW1lJHNoYXJlZF9leHQnCiAgIGNhc2UgJGhvc3Rfb3MgaW4KICAgaXJpeDUqIHwgbm9uc3RvcHV4KikKICAgICBsaWJzdWZmPSBzaGxpYnN1ZmY9CkBAIC0yNjM2LDggKzI2ODIsOCBAQAogICBlc2FjCiAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWSR7c2hsaWJzdWZmfV9QQVRICiAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliJHtsaWJzdWZmfSAvbGliJHtsaWJzdWZmfSAvdXNyL2xvY2FsL2xpYiR7bGlic3VmZn0iCi0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiR7bGlic3VmZn0gL2xpYiR7bGlic3VmZn0iCisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIkbGlic3VmZiAvbGliJGxpYnN1ZmYgL3Vzci9sb2NhbC9saWIkbGlic3VmZiIKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliJGxpYnN1ZmYgL2xpYiRsaWJzdWZmIgogICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCiAgIDs7CiAKQEAgLTI2NDYsMTMgKzI2OTIsMzMgQEAKICAgZHluYW1pY19saW5rZXI9bm8KICAgOzsKIAorbGludXgqYW5kcm9pZCopCisgIHZlcnNpb25fdHlwZT1ub25lICMgQW5kcm9pZCBkb2Vzbid0IHN1cHBvcnQgdmVyc2lvbmVkIGxpYnJhcmllcy4KKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCcKKyAgZmluaXNoX2NtZHM9CisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKworICAjIFRoaXMgaW1wbGllcyBubyBmYXN0X2luc3RhbGwsIHdoaWNoIGlzIHVuYWNjZXB0YWJsZS4KKyAgIyBTb21lIHJld29yayB3aWxsIGJlIG5lZWRlZCB0byBhbGxvdyBmb3IgZmFzdF9pbnN0YWxsCisgICMgYmVmb3JlIHRoaXMgY2FuIGJlIGVuYWJsZWQuCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKworICBkeW5hbWljX2xpbmtlcj0nQW5kcm9pZCBsaW5rZXInCisgICMgRG9uJ3QgZW1iZWQgLXJwYXRoIGRpcmVjdG9yaWVzIHNpbmNlIHRoZSBsaW5rZXIgZG9lc24ndCBzdXBwb3J0IHRoZW0uCisgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCisgIDs7CisKICMgVGhpcyBtdXN0IGJlIGdsaWJjL0VMRi4KLWxpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSkKK2xpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSB8IGdudSopCiAgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKICAgbmVlZF9saWJfcHJlZml4PW5vCiAgIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJwogICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbiAkbGliZGlyJwogICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAogICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KQEAgLTI2NzcsMTQgKzI3NDMsMTAgQEAKICAgIyBiZWZvcmUgdGhpcyBjYW4gYmUgZW5hYmxlZC4KICAgaGFyZGNvZGVfaW50b19saWJzPXllcwogCi0gICMgQWRkIEFCSS1zcGVjaWZpYyBkaXJlY3RvcmllcyB0byB0aGUgc3lzdGVtIGxpYnJhcnkgcGF0aC4KLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii9saWI2NCAvdXNyL2xpYjY0IC9saWIgL3Vzci9saWIiCi0KICAgIyBBcHBlbmQgbGQuc28uY29uZiBjb250ZW50cyB0byB0aGUgc2VhcmNoIHBhdGgKICAgaWYgdGVzdCAtZiAvZXRjL2xkLnNvLmNvbmY7IHRoZW4KICAgICBsdF9sZF9leHRyYT1gYXdrICcvXmluY2x1ZGUgLyB7IHN5c3RlbShzcHJpbnRmKCJjZCAvZXRjOyBjYXQgJXMgMj4vZGV2L251bGwiLCBcWyRdMikpOyBza2lwID0gMTsgfSB7IGlmICghc2tpcCkgcHJpbnQgXFskXTA7IHNraXAgPSAwOyB9JyA8IC9ldGMvbGQuc28uY29uZiB8ICRTRUQgLWUgJ3MvIy4qLy87L15bCSBdKmh3Y2FwWwkgXS9kO3MvWzosCV0vIC9nO3MvPVtePV0qJC8vO3MvPVtePSBdKiAvIC9nO3MvIi8vZzsvXiQvZCcgfCB0ciAnXG4nICcgJ2AKLSAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjICRsdF9sZF9leHRyYSIKLQorICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvbGliIC91c3IvbGliICRsdF9sZF9leHRyYSIKICAgZmkKIAogICAjIFdlIHVzZWQgdG8gdGVzdCBmb3IgL2xpYi9sZC5zby4xIGFuZCBkaXNhYmxlIHNoYXJlZCBsaWJyYXJpZXMgb24KQEAgLTI3MDEsMTIgKzI3NjMsMTIgQEAKICAgbmVlZF9saWJfcHJlZml4PW5vCiAgIG5lZWRfdmVyc2lvbj1ubwogICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHNoYXJlZF9leHQkdmVyc3VmZml4JwogICAgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1tICRsaWJkaXInCiAgICAgZHluYW1pY19saW5rZXI9J05ldEJTRCAoYS5vdXQpIGxkLnNvJwogICBlbHNlCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKLSAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJwogICAgIGR5bmFtaWNfbGlua2VyPSdOZXRCU0QgbGQuZWxmX3NvJwogICBmaQogICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSApAQCAtMjcxNiw3ICsyNzc4LDcgQEAKIAogbmV3c29zNikKICAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JwogICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAogICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCiAgIDs7CkBAIC0yNzI1LDQ1ICsyNzg3LDM0IEBACiAgIHZlcnNpb25fdHlwZT1xbngKICAgbmVlZF9saWJfcHJlZml4PW5vCiAgIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJwogICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAogICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KICAgaGFyZGNvZGVfaW50b19saWJzPXllcwogICBkeW5hbWljX2xpbmtlcj0nbGRxbnguc28nCiAgIDs7CiAKLW9wZW5ic2QqKQorb3BlbmJzZCogfCBiaXRyaWcqKQogICB2ZXJzaW9uX3R5cGU9c3Vub3MKLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliIgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0vdXNyL2xpYgogICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgIyBTb21lIG9sZGVyIHZlcnNpb25zIG9mIE9wZW5CU0QgKDMuMyBhdCBsZWFzdCkgKmRvKiBuZWVkIHZlcnNpb25lZCBsaWJzLgotICBjYXNlICRob3N0X29zIGluCi0gICAgb3BlbmJzZDMuMyB8IG9wZW5ic2QzLjMuKikJbmVlZF92ZXJzaW9uPXllcyA7OwotICAgICopCQkJCW5lZWRfdmVyc2lvbj1ubyAgOzsKLSAgZXNhYwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JworICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fYCI7IHRoZW4KKyAgICBuZWVkX3ZlcnNpb249bm8KKyAgZWxzZQorICAgIG5lZWRfdmVyc2lvbj15ZXMKKyAgZmkKKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHNoYXJlZF9leHQkdmVyc3VmZml4JwogICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbSAkbGliZGlyJwogICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCi0gICAgY2FzZSAkaG9zdF9vcyBpbgotICAgICAgb3BlbmJzZDIuW1s4OV1dIHwgb3BlbmJzZDIuW1s4OV1dLiopCi0Jc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0JOzsKLSAgICAgICopCi0Jc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotCTs7Ci0gICAgICBlc2FjCi0gIGVsc2UKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gIGZpCisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKICAgOzsKIAogb3MyKikKICAgbGlibmFtZV9zcGVjPSckbmFtZScKLSAgc2hyZXh0X2NtZHM9Ii5kbGwiCisgIHNocmV4dF9jbWRzPS5kbGwKICAgbmVlZF9saWJfcHJlZml4PW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUke3NoYXJlZF9leHR9ICRsaWJuYW1lLmEnCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hhcmVkX2V4dCAkbGlibmFtZS5hJwogICBkeW5hbWljX2xpbmtlcj0nT1MvMiBsZC5leGUnCiAgIHNobGlicGF0aF92YXI9TElCUEFUSAogICA7OwpAQCAtMjc3MiwxMSArMjgyMywxMSBAQAogICB2ZXJzaW9uX3R5cGU9b3NmCiAgIG5lZWRfbGliX3ByZWZpeD1ubwogICBuZWVkX3ZlcnNpb249bm8KLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL3NobGliIC91c3IvY2NzL2xpYiAvdXNyL2xpYi9jbXBscnMvY2MgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIgL3Zhci9zaGxpYiIKLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKICAgOzsKIAogcmRvcyopCkBAIC0yNzg3LDggKzI4MzgsOCBAQAogICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCiAgIG5lZWRfbGliX3ByZWZpeD1ubwogICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwogICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCkBAIC0yNzk4LDExICsyODQ5LDExIEBACiAKIHN1bm9zNCopCiAgIHZlcnNpb25fdHlwZT1zdW5vcwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkc2hhcmVkX2V4dCR2ZXJzdWZmaXgnCiAgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3Vzci9ldGMiIGxkY29uZmlnICRsaWJkaXInCiAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICiAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorICBpZiB0ZXN0IHllcyA9ICIkd2l0aF9nbnVfbGQiOyB0aGVuCiAgICAgbmVlZF9saWJfcHJlZml4PW5vCiAgIGZpCiAgIG5lZWRfdmVyc2lvbj15ZXMKQEAgLTI4MTAsOCArMjg2MSw4IEBACiAKIHN5c3Y0IHwgc3lzdjQuMyopCiAgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKICAgY2FzZSAkaG9zdF92ZW5kb3IgaW4KICAgICBzbmkpCkBAIC0yODMyLDEwICsyODgzLDEwIEBACiAgIDs7CiAKIHN5c3Y0Kk1QKikKLSAgaWYgdGVzdCAtZCAvdXNyL25lYyA7dGhlbgorICBpZiB0ZXN0IC1kIC91c3IvbmVjOyB0aGVuCiAgICAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUke3NoYXJlZF9leHR9LiR2ZXJzdWZmaXggJGxpYm5hbWUke3NoYXJlZF9leHR9LiRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHtzaGFyZWRfZXh0fS4kbWFqb3InCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaGFyZWRfZXh0LiR2ZXJzdWZmaXggJGxpYm5hbWUkc2hhcmVkX2V4dC4kbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkc2hhcmVkX2V4dC4kbWFqb3InCiAgICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKICAgZmkKICAgOzsKQEAgLTI4NDQsMTIgKzI4OTUsMTIgQEAKICAgdmVyc2lvbl90eXBlPWZyZWVic2QtZWxmCiAgIG5lZWRfbGliX3ByZWZpeD1ubwogICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwogICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKyAgaWYgdGVzdCB5ZXMgPSAiJHdpdGhfZ251X2xkIjsgdGhlbgogICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9sb2NhbC9saWIgL3Vzci9nbnUvbGliIC91c3IvY2NzL2xpYiAvdXNyL2xpYiAvbGliJwogICBlbHNlCiAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPScvdXNyL2Njcy9saWIgL3Vzci9saWInCkBAIC0yODY3LDcgKzI5MTgsNyBAQAogICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCiAgIG5lZWRfbGliX3ByZWZpeD1ubwogICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCiAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKQEAgLTI4NzUsOCArMjkyNiw4IEBACiAKIHV0czQqKQogICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCiAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICiAgIDs7CiAKQEAgLTI4ODUsMTggKzI5MzYsMTggQEAKICAgOzsKIGVzYWMKIEFDX01TR19SRVNVTFQoWyRkeW5hbWljX2xpbmtlcl0pCi10ZXN0ICIkZHluYW1pY19saW5rZXIiID0gbm8gJiYgY2FuX2J1aWxkX3NoYXJlZD1ubwordGVzdCBubyA9ICIkZHluYW1pY19saW5rZXIiICYmIGNhbl9idWlsZF9zaGFyZWQ9bm8KIAogdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9IlBBVEggJHNobGlicGF0aF92YXIgJHJ1bnBhdGhfdmFyIgotaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KK2lmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCiAgIHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSIkdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmsgR0NDX0VYRUNfUFJFRklYIENPTVBJTEVSX1BBVEggTElCUkFSWV9QQVRIIgogZmkKIAotaWYgdGVzdCAiJHtsdF9jdl9zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkbHRfY3Zfc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIgoraWYgdGVzdCBzZXQgPSAiJHtsdF9jdl9zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMrc2V0fSI7IHRoZW4KKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSRsdF9jdl9zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKIGZpCi1pZiB0ZXN0ICIke2x0X2N2X3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjK3NldH0iID0gc2V0OyB0aGVuCi0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIkbHRfY3Zfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMiCitpZiB0ZXN0IHNldCA9ICIke2x0X2N2X3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjK3NldH0iOyB0aGVuCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRsdF9jdl9zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYwogZmkKIAogX0xUX0RFQ0woW10sIFt2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGlua10sIFsxXSwKQEAgLTI5MzgsMzIgKzI5ODksMzIgQEAKIAogIyBfTFRfUEFUSF9UT09MX1BSRUZJWChUT09MKQogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBmaW5kIGEgZmlsZSBwcm9ncmFtIHdoaWNoIGNhbiByZWNvZ25pemUgc2hhcmVkIGxpYnJhcnkKKyMgZmluZCBhIGZpbGUgcHJvZ3JhbSB0aGF0IGNhbiByZWNvZ25pemUgc2hhcmVkIGxpYnJhcnkKIEFDX0RFRlVOKFtfTFRfUEFUSF9UT09MX1BSRUZJWF0sCiBbbTRfcmVxdWlyZShbX0xUX0RFQ0xfRUdSRVBdKWRubAogQUNfTVNHX0NIRUNLSU5HKFtmb3IgJDFdKQogQUNfQ0FDSEVfVkFMKGx0X2N2X3BhdGhfTUFHSUNfQ01ELAogW2Nhc2UgJE1BR0lDX0NNRCBpbgogW1tcXC8qXSB8ICA/OltcXC9dKl0pCi0gIGx0X2N2X3BhdGhfTUFHSUNfQ01EPSIkTUFHSUNfQ01EIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgbHRfY3ZfcGF0aF9NQUdJQ19DTUQ9JE1BR0lDX0NNRCAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KICAgOzsKICopCi0gIGx0X3NhdmVfTUFHSUNfQ01EPSIkTUFHSUNfQ01EIgotICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0kUEFUSF9TRVBBUkFUT1IKKyAgbHRfc2F2ZV9NQUdJQ19DTUQ9JE1BR0lDX0NNRAorICBsdF9zYXZlX2lmcz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCiBkbmwgJGFjX2R1bW15IGZvcmNlcyBzcGxpdHRpbmcgb24gY29uc3RhbnQgdXNlci1zdXBwbGllZCBwYXRocy4KIGRubCBQT1NJWC4yIHdvcmQgc3BsaXR0aW5nIGlzIGRvbmUgb25seSBvbiB0aGUgb3V0cHV0IG9mIHdvcmQgZXhwYW5zaW9ucywKIGRubCBub3QgZXZlcnkgd29yZC4gIFRoaXMgY2xvc2VzIGEgbG9uZ3N0YW5kaW5nIHNoIHNlY3VyaXR5IGhvbGUuCiAgIGFjX2R1bW15PSJtNF9pZihbJDJdLCAsICRQQVRILCBbJDJdKSIKICAgZm9yIGFjX2RpciBpbiAkYWNfZHVtbXk7IGRvCi0gICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgSUZTPSRsdF9zYXZlX2lmcwogICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCi0gICAgaWYgdGVzdCAtZiAkYWNfZGlyLyQxOyB0aGVuCi0gICAgICBsdF9jdl9wYXRoX01BR0lDX0NNRD0iJGFjX2Rpci8kMSIKKyAgICBpZiB0ZXN0IC1mICIkYWNfZGlyLyQxIjsgdGhlbgorICAgICAgbHRfY3ZfcGF0aF9NQUdJQ19DTUQ9JGFjX2Rpci8iJDEiCiAgICAgICBpZiB0ZXN0IC1uICIkZmlsZV9tYWdpY190ZXN0X2ZpbGUiOyB0aGVuCiAJY2FzZSAkZGVwbGlic19jaGVja19tZXRob2QgaW4KIAkiZmlsZV9tYWdpYyAiKikKIAkgIGZpbGVfbWFnaWNfcmVnZXg9YGV4cHIgIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgOiAiZmlsZV9tYWdpYyBcKC4qXCkiYAotCSAgTUFHSUNfQ01EPSIkbHRfY3ZfcGF0aF9NQUdJQ19DTUQiCisJICBNQUdJQ19DTUQ9JGx0X2N2X3BhdGhfTUFHSUNfQ01ECiAJICBpZiBldmFsICRmaWxlX21hZ2ljX2NtZCBcJGZpbGVfbWFnaWNfdGVzdF9maWxlIDI+IC9kZXYvbnVsbCB8CiAJICAgICRFR1JFUCAiJGZpbGVfbWFnaWNfcmVnZXgiID4gL2Rldi9udWxsOyB0aGVuCiAJICAgIDoKQEAgLTI5ODYsMTEgKzMwMzcsMTEgQEAKICAgICAgIGJyZWFrCiAgICAgZmkKICAgZG9uZQotICBJRlM9IiRsdF9zYXZlX2lmcyIKLSAgTUFHSUNfQ01EPSIkbHRfc2F2ZV9NQUdJQ19DTUQiCisgIElGUz0kbHRfc2F2ZV9pZnMKKyAgTUFHSUNfQ01EPSRsdF9zYXZlX01BR0lDX0NNRAogICA7OwogZXNhY10pCi1NQUdJQ19DTUQ9IiRsdF9jdl9wYXRoX01BR0lDX0NNRCIKK01BR0lDX0NNRD0kbHRfY3ZfcGF0aF9NQUdJQ19DTUQKIGlmIHRlc3QgLW4gIiRNQUdJQ19DTUQiOyB0aGVuCiAgIEFDX01TR19SRVNVTFQoJE1BR0lDX0NNRCkKIGVsc2UKQEAgLTMwMDgsNyArMzA1OSw3IEBACiAKICMgX0xUX1BBVEhfTUFHSUMKICMgLS0tLS0tLS0tLS0tLS0KLSMgZmluZCBhIGZpbGUgcHJvZ3JhbSB3aGljaCBjYW4gcmVjb2duaXplIGEgc2hhcmVkIGxpYnJhcnkKKyMgZmluZCBhIGZpbGUgcHJvZ3JhbSB0aGF0IGNhbiByZWNvZ25pemUgYSBzaGFyZWQgbGlicmFyeQogbTRfZGVmdW4oW19MVF9QQVRIX01BR0lDXSwKIFtfTFRfUEFUSF9UT09MX1BSRUZJWCgke2FjX3Rvb2xfcHJlZml4fWZpbGUsIC91c3IvYmluJFBBVEhfU0VQQVJBVE9SJFBBVEgpCiBpZiB0ZXN0IC16ICIkbHRfY3ZfcGF0aF9NQUdJQ19DTUQiOyB0aGVuCkBAIC0zMDM1LDE2ICszMDg2LDE2IEBACiBBQ19BUkdfV0lUSChbZ251LWxkXSwKICAgICBbQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1nbnUtbGRdLAogCVthc3N1bWUgdGhlIEMgY29tcGlsZXIgdXNlcyBHTlUgbGQgQDw6QGRlZmF1bHQ9bm9AOj5AXSldLAotICAgIFt0ZXN0ICIkd2l0aHZhbCIgPSBubyB8fCB3aXRoX2dudV9sZD15ZXNdLAorICAgIFt0ZXN0IG5vID0gIiR3aXRodmFsIiB8fCB3aXRoX2dudV9sZD15ZXNdLAogICAgIFt3aXRoX2dudV9sZD1ub10pZG5sCiAKIGFjX3Byb2c9bGQKLWlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCitpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgogICAjIENoZWNrIGlmIGdjYyAtcHJpbnQtcHJvZy1uYW1lPWxkIGdpdmVzIGEgcGF0aC4KICAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgbGQgdXNlZCBieSAkQ0NdKQogICBjYXNlICRob3N0IGluCiAgICotKi1taW5ndyopCi0gICAgIyBnY2MgbGVhdmVzIGEgdHJhaWxpbmcgY2FycmlhZ2UgcmV0dXJuIHdoaWNoIHVwc2V0cyBtaW5ndworICAgICMgZ2NjIGxlYXZlcyBhIHRyYWlsaW5nIGNhcnJpYWdlIHJldHVybiwgd2hpY2ggdXBzZXRzIG1pbmd3CiAgICAgYWNfcHJvZz1gKCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkKSAyPiY1IHwgdHIgLWQgJ1wwMTUnYCA7OwogICAqKQogICAgIGFjX3Byb2c9YCgkQ0MgLXByaW50LXByb2ctbmFtZT1sZCkgMj4mNWAgOzsKQEAgLTMwNTgsNyArMzEwOSw3IEBACiAgICAgICB3aGlsZSAkRUNITyAiJGFjX3Byb2ciIHwgJEdSRVAgIiRyZV9kaXJlbHQiID4gL2Rldi9udWxsIDI+JjE7IGRvCiAJYWNfcHJvZz1gJEVDSE8gJGFjX3Byb2d8ICRTRUQgInMlJHJlX2RpcmVsdCUvJSJgCiAgICAgICBkb25lCi0gICAgICB0ZXN0IC16ICIkTEQiICYmIExEPSIkYWNfcHJvZyIKKyAgICAgIHRlc3QgLXogIiRMRCIgJiYgTEQ9JGFjX3Byb2cKICAgICAgIDs7CiAgICIiKQogICAgICMgSWYgaXQgZmFpbHMsIHRoZW4gcHJldGVuZCB3ZSBhcmVuJ3QgdXNpbmcgR0NDLgpAQCAtMzA2OSwzNyArMzEyMCwzNyBAQAogICAgIHdpdGhfZ251X2xkPXVua25vd24KICAgICA7OwogICBlc2FjCi1lbGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KK2VsaWYgdGVzdCB5ZXMgPSAiJHdpdGhfZ251X2xkIjsgdGhlbgogICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBHTlUgbGRdKQogZWxzZQogICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBub24tR05VIGxkXSkKIGZpCiBBQ19DQUNIRV9WQUwobHRfY3ZfcGF0aF9MRCwKIFtpZiB0ZXN0IC16ICIkTEQiOyB0aGVuCi0gIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSRQQVRIX1NFUEFSQVRPUgorICBsdF9zYXZlX2lmcz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCiAgIGZvciBhY19kaXIgaW4gJFBBVEg7IGRvCi0gICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgSUZTPSRsdF9zYXZlX2lmcwogICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCiAgICAgaWYgdGVzdCAtZiAiJGFjX2Rpci8kYWNfcHJvZyIgfHwgdGVzdCAtZiAiJGFjX2Rpci8kYWNfcHJvZyRhY19leGVleHQiOyB0aGVuCi0gICAgICBsdF9jdl9wYXRoX0xEPSIkYWNfZGlyLyRhY19wcm9nIgorICAgICAgbHRfY3ZfcGF0aF9MRD0kYWNfZGlyLyRhY19wcm9nCiAgICAgICAjIENoZWNrIHRvIHNlZSBpZiB0aGUgcHJvZ3JhbSBpcyBHTlUgbGQuICBJJ2QgcmF0aGVyIHVzZSAtLXZlcnNpb24sCiAgICAgICAjIGJ1dCBhcHBhcmVudGx5IHNvbWUgdmFyaWFudHMgb2YgR05VIGxkIG9ubHkgYWNjZXB0IC12LgogICAgICAgIyBCcmVhayBvbmx5IGlmIGl0IHdhcyB0aGUgR05VL25vbi1HTlUgbGQgdGhhdCB3ZSBwcmVmZXIuCiAgICAgICBjYXNlIGAiJGx0X2N2X3BhdGhfTEQiIC12IDI+JjEgPC9kZXYvbnVsbGAgaW4KICAgICAgICpHTlUqIHwgKid3aXRoIEJGRCcqKQotCXRlc3QgIiR3aXRoX2dudV9sZCIgIT0gbm8gJiYgYnJlYWsKKwl0ZXN0IG5vICE9ICIkd2l0aF9nbnVfbGQiICYmIGJyZWFrCiAJOzsKICAgICAgICopCi0JdGVzdCAiJHdpdGhfZ251X2xkIiAhPSB5ZXMgJiYgYnJlYWsKKwl0ZXN0IHllcyAhPSAiJHdpdGhfZ251X2xkIiAmJiBicmVhawogCTs7CiAgICAgICBlc2FjCiAgICAgZmkKICAgZG9uZQotICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgSUZTPSRsdF9zYXZlX2lmcwogZWxzZQotICBsdF9jdl9wYXRoX0xEPSIkTEQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICBsdF9jdl9wYXRoX0xEPSRMRCAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KIGZpXSkKLUxEPSIkbHRfY3ZfcGF0aF9MRCIKK0xEPSRsdF9jdl9wYXRoX0xECiBpZiB0ZXN0IC1uICIkTEQiOyB0aGVuCiAgIEFDX01TR19SRVNVTFQoJExEKQogZWxzZQpAQCAtMzE1MywxMyArMzIwNCwxMyBAQAogcmVsb2FkX2NtZHM9JyRMRCRyZWxvYWRfZmxhZyAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJwogY2FzZSAkaG9zdF9vcyBpbgogICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCi0gICAgaWYgdGVzdCAiJEdDQyIgIT0geWVzOyB0aGVuCisgICAgaWYgdGVzdCB5ZXMgIT0gIiRHQ0MiOyB0aGVuCiAgICAgICByZWxvYWRfY21kcz1mYWxzZQogICAgIGZpCiAgICAgOzsKICAgZGFyd2luKikKLSAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotICAgICAgcmVsb2FkX2NtZHM9JyRMVENDICRMVENGTEFHUyAtbm9zdGRsaWIgJHt3bH0tciAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworICAgIGlmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCisgICAgICByZWxvYWRfY21kcz0nJExUQ0MgJExUQ0ZMQUdTIC1ub3N0ZGxpYiAkd2wtciAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJwogICAgIGVsc2UKICAgICAgIHJlbG9hZF9jbWRzPSckTEQkcmVsb2FkX2ZsYWcgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKICAgICBmaQpAQCAtMzE4NSwxMyArMzIzNiwxMyBAQAogIyBOZWVkIHRvIHNldCB0aGUgcHJlY2VkaW5nIHZhcmlhYmxlIG9uIGFsbCBwbGF0Zm9ybXMgdGhhdCBzdXBwb3J0CiAjIGludGVybGlicmFyeSBkZXBlbmRlbmNpZXMuCiAjICdub25lJyAtLSBkZXBlbmRlbmNpZXMgbm90IHN1cHBvcnRlZC4KLSMgYHVua25vd24nIC0tIHNhbWUgYXMgbm9uZSwgYnV0IGRvY3VtZW50cyB0aGF0IHdlIHJlYWxseSBkb24ndCBrbm93LgorIyAndW5rbm93bicgLS0gc2FtZSBhcyBub25lLCBidXQgZG9jdW1lbnRzIHRoYXQgd2UgcmVhbGx5IGRvbid0IGtub3cuCiAjICdwYXNzX2FsbCcgLS0gYWxsIGRlcGVuZGVuY2llcyBwYXNzZWQgd2l0aCBubyBjaGVja3MuCiAjICd0ZXN0X2NvbXBpbGUnIC0tIGNoZWNrIGJ5IG1ha2luZyB0ZXN0IHByb2dyYW0uCiAjICdmaWxlX21hZ2ljIFtbcmVnZXhdXScgLS0gY2hlY2sgYnkgbG9va2luZyBmb3IgZmlsZXMgaW4gbGlicmFyeSBwYXRoCi0jIHdoaWNoIHJlc3BvbmRzIHRvIHRoZSAkZmlsZV9tYWdpY19jbWQgd2l0aCBhIGdpdmVuIGV4dGVuZGVkIHJlZ2V4LgotIyBJZiB5b3UgaGF2ZSBgZmlsZScgb3IgZXF1aXZhbGVudCBvbiB5b3VyIHN5c3RlbSBhbmQgeW91J3JlIG5vdCBzdXJlCi0jIHdoZXRoZXIgYHBhc3NfYWxsJyB3aWxsICphbHdheXMqIHdvcmssIHlvdSBwcm9iYWJseSB3YW50IHRoaXMgb25lLgorIyB0aGF0IHJlc3BvbmRzIHRvIHRoZSAkZmlsZV9tYWdpY19jbWQgd2l0aCBhIGdpdmVuIGV4dGVuZGVkIHJlZ2V4LgorIyBJZiB5b3UgaGF2ZSAnZmlsZScgb3IgZXF1aXZhbGVudCBvbiB5b3VyIHN5c3RlbSBhbmQgeW91J3JlIG5vdCBzdXJlCisjIHdoZXRoZXIgJ3Bhc3NfYWxsJyB3aWxsICphbHdheXMqIHdvcmssIHlvdSBwcm9iYWJseSB3YW50IHRoaXMgb25lLgogCiBjYXNlICRob3N0X29zIGluCiBhaXhbWzQtOV1dKikKQEAgLTMyMTgsOCArMzI2OSw3IEBACiAgICMgQmFzZSBNU1lTL01pbkdXIGRvIG5vdCBwcm92aWRlIHRoZSAnZmlsZScgY29tbWFuZCBuZWVkZWQgYnkKICAgIyBmdW5jX3dpbjMyX2xpYmlkIHNoZWxsIGZ1bmN0aW9uLCBzbyB1c2UgYSB3ZWFrZXIgdGVzdCBiYXNlZCBvbiAnb2JqZHVtcCcsCiAgICMgdW5sZXNzIHdlIGZpbmQgJ2ZpbGUnLCBmb3IgZXhhbXBsZSBiZWNhdXNlIHdlIGFyZSBjcm9zcy1jb21waWxpbmcuCi0gICMgZnVuY193aW4zMl9saWJpZCBhc3N1bWVzIEJTRCBubSwgc28gZGlzYWxsb3cgaXQgaWYgdXNpbmcgTVMgZHVtcGJpbi4KLSAgaWYgKCB0ZXN0ICIkbHRfY3Zfbm1faW50ZXJmYWNlIiA9ICJCU0Qgbm0iICYmIGZpbGUgLyApID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBpZiAoIGZpbGUgLyApID4vZGV2L251bGwgMj4mMTsgdGhlbgogICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIF54ODYgYXJjaGl2ZSBpbXBvcnR8Xng4NiBETEwnCiAgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9J2Z1bmNfd2luMzJfbGliaWQnCiAgIGVsc2UKQEAgLTMyNTUsMTAgKzMzMDUsNiBAQAogICBmaQogICA7OwogCi1nbnUqKQotICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAotICA7OwotCiBoYWlrdSopCiAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCiAgIDs7CkBAIC0zMjk3LDcgKzMzNDMsNyBAQAogICA7OwogCiAjIFRoaXMgbXVzdCBiZSBnbGliYy9FTEYuCi1saW51eCogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUpCitsaW51eCogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUgfCBnbnUqKQogICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAogICA7OwogCkBAIC0zMzE5LDggKzMzNjUsOCBAQAogICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAogICA7OwogCi1vcGVuYnNkKikKLSAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgorb3BlbmJzZCogfCBiaXRyaWcqKQorICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fYCI7IHRoZW4KICAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW1teL11dKyhcLnNvXC5bWzAtOV1dK1wuW1swLTldXSt8XC5zb3xfcGljXC5hKSQnCiAgIGVsc2UKICAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW1teL11dKyhcLnNvXC5bWzAtOV1dK1wuW1swLTldXSt8X3BpY1wuYSkkJwpAQCAtMzQxMywzMyArMzQ1OSwzMyBAQAogQUNfQ0FDSEVfQ0hFQ0soW2ZvciBCU0QtIG9yIE1TLWNvbXBhdGlibGUgbmFtZSBsaXN0ZXIgKG5tKV0sIGx0X2N2X3BhdGhfTk0sCiBbaWYgdGVzdCAtbiAiJE5NIjsgdGhlbgogICAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLSAgbHRfY3ZfcGF0aF9OTT0iJE5NIgorICBsdF9jdl9wYXRoX05NPSROTQogZWxzZQotICBsdF9ubV90b19jaGVjaz0iJHthY190b29sX3ByZWZpeH1ubSIKKyAgbHRfbm1fdG9fY2hlY2s9JHthY190b29sX3ByZWZpeH1ubQogICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiICYmIHRlc3QgIiRidWlsZCIgPSAiJGhvc3QiOyB0aGVuCiAgICAgbHRfbm1fdG9fY2hlY2s9IiRsdF9ubV90b19jaGVjayBubSIKICAgZmkKICAgZm9yIGx0X3RtcF9ubSBpbiAkbHRfbm1fdG9fY2hlY2s7IGRvCi0gICAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisgICAgbHRfc2F2ZV9pZnM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgogICAgIGZvciBhY19kaXIgaW4gJFBBVEggL3Vzci9jY3MvYmluL2VsZiAvdXNyL2Njcy9iaW4gL3Vzci91Y2IgL2JpbjsgZG8KLSAgICAgIElGUz0iJGx0X3NhdmVfaWZzIgorICAgICAgSUZTPSRsdF9zYXZlX2lmcwogICAgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KLSAgICAgIHRtcF9ubT0iJGFjX2Rpci8kbHRfdG1wX25tIgotICAgICAgaWYgdGVzdCAtZiAiJHRtcF9ubSIgfHwgdGVzdCAtZiAiJHRtcF9ubSRhY19leGVleHQiIDsgdGhlbgorICAgICAgdG1wX25tPSRhY19kaXIvJGx0X3RtcF9ubQorICAgICAgaWYgdGVzdCAtZiAiJHRtcF9ubSIgfHwgdGVzdCAtZiAiJHRtcF9ubSRhY19leGVleHQiOyB0aGVuCiAJIyBDaGVjayB0byBzZWUgaWYgdGhlIG5tIGFjY2VwdHMgYSBCU0QtY29tcGF0IGZsYWcuCi0JIyBBZGRpbmcgdGhlIGBzZWQgMXEnIHByZXZlbnRzIGZhbHNlIHBvc2l0aXZlcyBvbiBIUC1VWCwgd2hpY2ggc2F5czoKKwkjIEFkZGluZyB0aGUgJ3NlZCAxcScgcHJldmVudHMgZmFsc2UgcG9zaXRpdmVzIG9uIEhQLVVYLCB3aGljaCBzYXlzOgogCSMgICBubTogdW5rbm93biBvcHRpb24gIkIiIGlnbm9yZWQKIAkjIFRydTY0J3Mgbm0gY29tcGxhaW5zIHRoYXQgL2Rldi9udWxsIGlzIGFuIGludmFsaWQgb2JqZWN0IGZpbGUKIAljYXNlIGAiJHRtcF9ubSIgLUIgL2Rldi9udWxsIDI+JjEgfCBzZWQgJzFxJ2AgaW4KIAkqL2Rldi9udWxsKiB8IConSW52YWxpZCBmaWxlIG9yIG9iamVjdCB0eXBlJyopCiAJICBsdF9jdl9wYXRoX05NPSIkdG1wX25tIC1CIgotCSAgYnJlYWsKKwkgIGJyZWFrIDIKIAkgIDs7CiAJKikKIAkgIGNhc2UgYCIkdG1wX25tIiAtcCAvZGV2L251bGwgMj4mMSB8IHNlZCAnMXEnYCBpbgogCSAgKi9kZXYvbnVsbCopCiAJICAgIGx0X2N2X3BhdGhfTk09IiR0bXBfbm0gLXAiCi0JICAgIGJyZWFrCisJICAgIGJyZWFrIDIKIAkgICAgOzsKIAkgICopCiAJICAgIGx0X2N2X3BhdGhfTk09JHtsdF9jdl9wYXRoX05NPSIkdG1wX25tIn0gIyBrZWVwIHRoZSBmaXJzdCBtYXRjaCwgYnV0CkBAIC0zNDUwLDIxICszNDk2LDIxIEBACiAJZXNhYwogICAgICAgZmkKICAgICBkb25lCi0gICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgSUZTPSRsdF9zYXZlX2lmcwogICBkb25lCiAgIDogJHtsdF9jdl9wYXRoX05NPW5vfQogZmldKQotaWYgdGVzdCAiJGx0X2N2X3BhdGhfTk0iICE9ICJubyI7IHRoZW4KLSAgTk09IiRsdF9jdl9wYXRoX05NIgoraWYgdGVzdCBubyAhPSAiJGx0X2N2X3BhdGhfTk0iOyB0aGVuCisgIE5NPSRsdF9jdl9wYXRoX05NCiBlbHNlCiAgICMgRGlkbid0IGZpbmQgYW55IEJTRCBjb21wYXRpYmxlIG5hbWUgbGlzdGVyLCBsb29rIGZvciBkdW1wYmluLgogICBpZiB0ZXN0IC1uICIkRFVNUEJJTiI7IHRoZW4gOgogICAgICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgogICBlbHNlCiAgICAgQUNfQ0hFQ0tfVE9PTFMoRFVNUEJJTiwgW2R1bXBiaW4gImxpbmsgLWR1bXAiXSwgOikKLSAgICBjYXNlIGAkRFVNUEJJTiAtc3ltYm9scyAvZGV2L251bGwgMj4mMSB8IHNlZCAnMXEnYCBpbgorICAgIGNhc2UgYCREVU1QQklOIC1zeW1ib2xzIC1oZWFkZXJzIC9kZXYvbnVsbCAyPiYxIHwgc2VkICcxcSdgIGluCiAgICAgKkNPRkYqKQotICAgICAgRFVNUEJJTj0iJERVTVBCSU4gLXN5bWJvbHMiCisgICAgICBEVU1QQklOPSIkRFVNUEJJTiAtc3ltYm9scyAtaGVhZGVycyIKICAgICAgIDs7CiAgICAgKikKICAgICAgIERVTVBCSU49OgpAQCAtMzQ3Miw4ICszNTE4LDggQEAKICAgICBlc2FjCiAgIGZpCiAgIEFDX1NVQlNUKFtEVU1QQklOXSkKLSAgaWYgdGVzdCAiJERVTVBCSU4iICE9ICI6IjsgdGhlbgotICAgIE5NPSIkRFVNUEJJTiIKKyAgaWYgdGVzdCA6ICE9ICIkRFVNUEJJTiI7IHRoZW4KKyAgICBOTT0kRFVNUEJJTgogICBmaQogZmkKIHRlc3QgLXogIiROTSIgJiYgTk09bm0KQEAgLTM1MTksOCArMzU2NSw4IEBACiAKIGNhc2UgJGhvc3Rfb3MgaW4KIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKLSAgIyB0d28gZGlmZmVyZW50IHNoZWxsIGZ1bmN0aW9ucyBkZWZpbmVkIGluIGx0bWFpbi5zaAotICAjIGRlY2lkZSB3aGljaCB0byB1c2UgYmFzZWQgb24gY2FwYWJpbGl0aWVzIG9mICRETExUT09MCisgICMgdHdvIGRpZmZlcmVudCBzaGVsbCBmdW5jdGlvbnMgZGVmaW5lZCBpbiBsdG1haW4uc2g7CisgICMgZGVjaWRlIHdoaWNoIG9uZSB0byB1c2UgYmFzZWQgb24gY2FwYWJpbGl0aWVzIG9mICRETExUT09MCiAgIGNhc2UgYCRETExUT09MIC0taGVscCAyPiYxYCBpbgogICAqLS1pZGVudGlmeS1zdHJpY3QqKQogICAgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPWZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYgpAQCAtMzUzMiw3ICszNTc4LDcgQEAKICAgOzsKICopCiAgICMgZmFsbGJhY2s6IGFzc3VtZSBsaW5rbGliIElTIHNoYXJlZGxpYgotICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0iJEVDSE8iCisgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSRFQ0hPCiAgIDs7CiBlc2FjCiBdKQpAQCAtMzU1OSwxMyArMzYwNSwyOCBAQAogICAgIGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbD15ZXMKICAgZmkKICAgcm0gLWYgY29uZnRlc3QqXSkKLWlmIHRlc3QgIngkbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sIiAhPSB4eWVzOyB0aGVuCitpZiB0ZXN0IHllcyAhPSAiJGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCI7IHRoZW4KICAgTUFOSUZFU1RfVE9PTD06CiBmaQogX0xUX0RFQ0woW10sIFtNQU5JRkVTVF9UT09MXSwgWzFdLCBbTWFuaWZlc3QgdG9vbF0pZG5sCiBdKSMgX0xUX1BBVEhfTUFOSUZFU1RfVE9PTAogCiAKKyMgX0xUX0RMTF9ERUZfUChbRklMRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUcnVlIGlmZiBGSUxFIGlzIGEgV2luZG93cyBETEwgJy5kZWYnIGZpbGUuCisjIEtlZXAgaW4gc3luYyB3aXRoIGZ1bmNfZGxsX2RlZl9wIGluIHRoZSBsaWJ0b29sIHNjcmlwdAorQUNfREVGVU4oW19MVF9ETExfREVGX1BdLAorW2RubAorICB0ZXN0IERFRiA9ICJgJFNFRCAtbiBkbmwKKyAgICAtZSAnXCcncy9eW1sJIF1dKi8vJ1wnJyBkbmwgU3RyaXAgbGVhZGluZyB3aGl0ZXNwYWNlCisgICAgLWUgJ1wnJy9eXCg7LipcKSokL2QnXCcnIGRubCAgICAgIERlbGV0ZSBlbXB0eSBsaW5lcyBhbmQgY29tbWVudHMKKyAgICAtZSAnXCcncy9eXChFWFBPUlRTXHxMSUJSQVJZXClcKFtbCSBdXS4qXCkqJC9ERUYvcCdcJycgZG5sCisgICAgLWUgcSBkbmwgICAgICAgICAgICAgICAgICAgICAgICAgIE9ubHkgY29uc2lkZXIgdGhlIGZpcnN0ICJyZWFsIiBsaW5lCisgICAgJDFgIiBkbmwKK10pIyBfTFRfRExMX0RFRl9QCisKKwogIyBMVF9MSUJfTQogIyAtLS0tLS0tLQogIyBjaGVjayBmb3IgbWF0aCBsaWJyYXJ5CkBAIC0zNTc3LDExICszNjM4LDExIEBACiAgICMgVGhlc2Ugc3lzdGVtIGRvbid0IGhhdmUgbGlibSwgb3IgZG9uJ3QgbmVlZCBpdAogICA7OwogKi1uY3Itc3lzdjQuMyopCi0gIEFDX0NIRUNLX0xJQihtdywgX213dmFsaWRjaGVja2wsIExJQk09Ii1sbXciKQorICBBQ19DSEVDS19MSUIobXcsIF9td3ZhbGlkY2hlY2tsLCBMSUJNPS1sbXcpCiAgIEFDX0NIRUNLX0xJQihtLCBjb3MsIExJQk09IiRMSUJNIC1sbSIpCiAgIDs7CiAqKQotICBBQ19DSEVDS19MSUIobSwgY29zLCBMSUJNPSItbG0iKQorICBBQ19DSEVDS19MSUIobSwgY29zLCBMSUJNPS1sbSkKICAgOzsKIGVzYWMKIEFDX1NVQlNUKFtMSUJNXSkKQEAgLTM2MDAsNyArMzY2MSw3IEBACiAKIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcsICQxKT0KIAotaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KK2lmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCiAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCiAgIG52Y2MqKQogICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcsICQxKT0nIC1YY29tcGlsZXIgLWZuby1idWlsdGluJyA7OwpAQCAtMzY1Miw3ICszNzEzLDcgQEAKICAgc3ltY29kZT0nW1tBQkNER0lTVFddXScKICAgOzsKIGhwdXgqKQotICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorICBpZiB0ZXN0IGlhNjQgPSAiJGhvc3RfY3B1IjsgdGhlbgogICAgIHN5bWNvZGU9J1tbQUJDREVHUlNUXV0nCiAgIGZpCiAgIDs7CkBAIC0zNjg1LDE0ICszNzQ2LDQ0IEBACiAgIHN5bWNvZGU9J1tbQUJDREdJUlNUV11dJyA7OwogZXNhYwogCitpZiB0ZXN0ICIkbHRfY3Zfbm1faW50ZXJmYWNlIiA9ICJNUyBkdW1wYmluIjsgdGhlbgorICAjIEdldHMgbGlzdCBvZiBkYXRhIHN5bWJvbHMgdG8gaW1wb3J0LgorICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19pbXBvcnQ9InNlZCAtbiAtZSAncy9eSSAuKiBcKC4qXCkkL1wxL3AnIgorICAjIEFkanVzdCB0aGUgYmVsb3cgZ2xvYmFsIHN5bWJvbCB0cmFuc2Zvcm1zIHRvIGZpeHVwIGltcG9ydGVkIHZhcmlhYmxlcy4KKyAgbHRfY2RlY2xfaG9vaz0iIC1lICdzL15JIC4qIFwoLipcKSQvZXh0ZXJuIF9fZGVjbHNwZWMoZGxsaW1wb3J0KSBjaGFyIFwxOy9wJyIKKyAgbHRfY19uYW1lX2hvb2s9IiAtZSAncy9eSSAuKiBcKC4qXCkkLyAge1wiXDFcIiwgKHZvaWQgKikgMH0sL3AnIgorICBsdF9jX25hbWVfbGliX2hvb2s9IlwKKyAgLWUgJ3MvXkkgLiogXChsaWIuKlwpJC8gIHtcIlwxXCIsICh2b2lkICopIDB9LC9wJ1wKKyAgLWUgJ3MvXkkgLiogXCguKlwpJC8gIHtcImxpYlwxXCIsICh2b2lkICopIDB9LC9wJyIKK2Vsc2UKKyAgIyBEaXNhYmxlIGhvb2tzIGJ5IGRlZmF1bHQuCisgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2ltcG9ydD0KKyAgbHRfY2RlY2xfaG9vaz0KKyAgbHRfY19uYW1lX2hvb2s9CisgIGx0X2NfbmFtZV9saWJfaG9vaz0KK2ZpCisKICMgVHJhbnNmb3JtIGFuIGV4dHJhY3RlZCBzeW1ib2wgbGluZSBpbnRvIGEgcHJvcGVyIEMgZGVjbGFyYXRpb24uCiAjIFNvbWUgc3lzdGVtcyAoZXNwLiBvbiBpYTY0KSBsaW5rIGRhdGEgYW5kIGNvZGUgc3ltYm9scyBkaWZmZXJlbnRseSwKICMgc28gdXNlIHRoaXMgZ2VuZXJhbCBhcHByb2FjaC4KLWx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSJzZWQgLW4gLWUgJ3MvXlQgLiogXCguKlwpJC9leHRlcm4gaW50IFwxKCk7L3AnIC1lICdzL14kc3ltY29kZSogLiogXCguKlwpJC9leHRlcm4gY2hhciBcMTsvcCciCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0ic2VkIC1uIlwKKyRsdF9jZGVjbF9ob29rXAorIiAtZSAncy9eVCAuKiBcKC4qXCkkL2V4dGVybiBpbnQgXDEoKTsvcCciXAorIiAtZSAncy9eJHN5bWNvZGUkc3ltY29kZSogLiogXCguKlwpJC9leHRlcm4gY2hhciBcMTsvcCciCiAKICMgVHJhbnNmb3JtIGFuIGV4dHJhY3RlZCBzeW1ib2wgbGluZSBpbnRvIHN5bWJvbCBuYW1lIGFuZCBzeW1ib2wgYWRkcmVzcwotbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9InNlZCAtbiAtZSAncy9eOiBcKFtbXiBdXSpcKVtbIF1dKiQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbW14gXV0qXCkgXChbW14gXV0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgotbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0ic2VkIC1uIC1lICdzL146IFwoW1teIF1dKlwpW1sgXV0qJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFtbXiBdXSpcKSBcKGxpYltbXiBdXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFtbXiBdXSpcKSBcKFtbXiBdXSpcKSQvICB7XCJsaWJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0ic2VkIC1uIlwKKyRsdF9jX25hbWVfaG9va1wKKyIgLWUgJ3MvXjogXCguKlwpIC4qJC8gIHtcIlwxXCIsICh2b2lkICopIDB9LC9wJyJcCisiIC1lICdzL14kc3ltY29kZSRzeW1jb2RlKiAuKiBcKC4qXCkkLyAge1wiXDFcIiwgKHZvaWQgKikgXCZcMX0sL3AnIgorCisjIFRyYW5zZm9ybSBhbiBleHRyYWN0ZWQgc3ltYm9sIGxpbmUgaW50byBzeW1ib2wgbmFtZSB3aXRoIGxpYiBwcmVmaXggYW5kCisjIHN5bWJvbCBhZGRyZXNzLgorbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0ic2VkIC1uIlwKKyRsdF9jX25hbWVfbGliX2hvb2tcCisiIC1lICdzL146IFwoLipcKSAuKiQvICB7XCJcMVwiLCAodm9pZCAqKSAwfSwvcCciXAorIiAtZSAncy9eJHN5bWNvZGUkc3ltY29kZSogLiogXChsaWIuKlwpJC8gIHtcIlwxXCIsICh2b2lkICopIFwmXDF9LC9wJyJcCisiIC1lICdzL14kc3ltY29kZSRzeW1jb2RlKiAuKiBcKC4qXCkkLyAge1wibGliXDFcIiwgKHZvaWQgKikgXCZcMX0sL3AnIgogCiAjIEhhbmRsZSBDUkxGIGluIG1pbmd3IHRvb2wgY2hhaW4KIG9wdF9jcj0KQEAgLTM3MTAsMjEgKzM4MDEsMjQgQEAKIAogICAjIFdyaXRlIHRoZSByYXcgYW5kIEMgaWRlbnRpZmllcnMuCiAgIGlmIHRlc3QgIiRsdF9jdl9ubV9pbnRlcmZhY2UiID0gIk1TIGR1bXBiaW4iOyB0aGVuCi0gICAgIyBGYWtlIGl0IGZvciBkdW1wYmluIGFuZCBzYXkgVCBmb3IgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb24KLSAgICAjIGFuZCBEIGZvciBhbnkgZ2xvYmFsIHZhcmlhYmxlLgorICAgICMgRmFrZSBpdCBmb3IgZHVtcGJpbiBhbmQgc2F5IFQgZm9yIGFueSBub24tc3RhdGljIGZ1bmN0aW9uLAorICAgICMgRCBmb3IgYW55IGdsb2JhbCB2YXJpYWJsZSBhbmQgSSBmb3IgYW55IGltcG9ydGVkIHZhcmlhYmxlLgogICAgICMgQWxzbyBmaW5kIEMrKyBhbmQgX19mYXN0Y2FsbCBzeW1ib2xzIGZyb20gTVNWQysrLAogICAgICMgd2hpY2ggc3RhcnQgd2l0aCBAIG9yID8uCiAgICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0iJEFXSyBbJyJcCiAiICAgICB7bGFzdF9zZWN0aW9uPXNlY3Rpb247IHNlY3Rpb249XCQgM307IlwKICIgICAgIC9eQ09GRiBTWU1CT0wgVEFCTEUve2ZvcihpIGluIGhpZGUpIGRlbGV0ZSBoaWRlW2ldfTsiXAogIiAgICAgL1NlY3Rpb24gbGVuZ3RoIC4qI3JlbG9jcy4qKHBpY2sgYW55KS97aGlkZVtsYXN0X3NlY3Rpb25dPTF9OyJcCisiICAgICAvXiAqU3ltYm9sIG5hbWUgKjogL3tzcGxpdChcJCAwLHNuLFwiOlwiKTsgc2k9c3Vic3RyKHNuWzJdLDIpfTsiXAorIiAgICAgL14gKlR5cGUgKjogY29kZS97cHJpbnQgXCJUXCIsc2ksc3Vic3RyKHNpLGxlbmd0aChwcmZ4KSl9OyJcCisiICAgICAvXiAqVHlwZSAqOiBkYXRhL3twcmludCBcIklcIixzaSxzdWJzdHIoc2ksbGVuZ3RoKHByZngpKX07IlwKICIgICAgIFwkIDAhfi9FeHRlcm5hbCAqXHwve25leHR9OyJcCiAiICAgICAvIDArIFVOREVGIC97bmV4dH07IC8gVU5ERUYgXChbXnxdXCkqKCkve25leHR9OyJcCiAiICAgICB7aWYoaGlkZVtzZWN0aW9uXSkgbmV4dH07IlwKLSIgICAgIHtmPTB9OyBcJCAwfi9cKFwpLipcfC97Zj0xfTsge3ByaW50ZiBmID8gXCJUIFwiIDogXCJEIFwifTsiXAotIiAgICAge3NwbGl0KFwkIDAsIGEsIC9cfHxcci8pOyBzcGxpdChhWzJdLCBzKX07IlwKLSIgICAgIHNbMV1+L15bQD9dL3twcmludCBzWzFdLCBzWzFdOyBuZXh0fTsiXAotIiAgICAgc1sxXX5wcmZ4IHtzcGxpdChzWzFdLHQsXCJAXCIpOyBwcmludCB0WzFdLCBzdWJzdHIodFsxXSxsZW5ndGgocHJmeCkpfSJcCisiICAgICB7Zj1cIkRcIn07IFwkIDB+L1woXCkuKlx8L3tmPVwiVFwifTsiXAorIiAgICAge3NwbGl0KFwkIDAsYSwvXHx8XHIvKTsgc3BsaXQoYVsyXSxzKX07IlwKKyIgICAgIHNbMV1+L15bQD9dL3twcmludCBmLHNbMV0sc1sxXTsgbmV4dH07IlwKKyIgICAgIHNbMV1+cHJmeCB7c3BsaXQoc1sxXSx0LFwiQFwiKTsgcHJpbnQgZix0WzFdLHN1YnN0cih0WzFdLGxlbmd0aChwcmZ4KSl9IlwKICIgICAgICcgcHJmeD1eJGFjX3N5bXByZnhdIgogICBlbHNlCiAgICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0ic2VkIC1uIC1lICdzL14uKltbCSBdXVwoJHN5bWNvZGUkc3ltY29kZSpcKVtbCSBdXVtbCSBdXSokYWNfc3ltcHJmeCRzeW1wYXQkb3B0X2NyJC8kc3lteGZybS9wJyIKQEAgLTM3NjQsMTEgKzM4NTgsMTEgQEAKIAlpZiAkR1JFUCAnIG5tX3Rlc3RfZnVuYyQnICIkbmxpc3QiID4vZGV2L251bGw7IHRoZW4KIAkgIGNhdCA8PF9MVF9FT0YgPiBjb25mdGVzdC4kYWNfZXh0CiAvKiBLZWVwIHRoaXMgY29kZSBpbiBzeW5jIGJldHdlZW4gbGlidG9vbC5tNCwgbHRtYWluLCBsdF9zeXN0ZW0uaCwgYW5kIHRlc3RzLiAgKi8KLSNpZiBkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfX0NZR1dJTl9fKSB8fCBkZWZpbmVkKF9XSU4zMl9XQ0UpCi0vKiBEQVRBIGltcG9ydHMgZnJvbSBETExzIG9uIFdJTjMyIGNvbid0IGJlIGNvbnN0LCBiZWNhdXNlIHJ1bnRpbWUKKyNpZiBkZWZpbmVkIF9XSU4zMiB8fCBkZWZpbmVkIF9fQ1lHV0lOX18gfHwgZGVmaW5lZCBfV0lOMzJfV0NFCisvKiBEQVRBIGltcG9ydHMgZnJvbSBETExzIG9uIFdJTjMyIGNhbid0IGJlIGNvbnN0LCBiZWNhdXNlIHJ1bnRpbWUKICAgIHJlbG9jYXRpb25zIGFyZSBwZXJmb3JtZWQgLS0gc2VlIGxkJ3MgZG9jdW1lbnRhdGlvbiBvbiBwc2V1ZG8tcmVsb2NzLiAgKi8KICMgZGVmaW5lIExUQCZ0QF9ETFNZTV9DT05TVAotI2VsaWYgZGVmaW5lZChfX29zZl9fKQorI2VsaWYgZGVmaW5lZCBfX29zZl9fCiAvKiBUaGlzIHN5c3RlbSBkb2VzIG5vdCBjb3BlIHdlbGwgd2l0aCByZWxvY2F0aW9ucyBpbiBjb25zdCBkYXRhLiAgKi8KICMgZGVmaW5lIExUQCZ0QF9ETFNZTV9DT05TVAogI2Vsc2UKQEAgLTM3OTQsNyArMzg4OCw3IEBACiB7CiAgIHsgIkBQUk9HUkFNQCIsICh2b2lkICopIDAgfSwKIF9MVF9FT0YKLQkgICRTRUQgInMvXiRzeW1jb2RlJHN5bWNvZGUqIFwoLipcKSBcKC4qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sLyIgPCAiJG5saXN0IiB8ICRHUkVQIC12IG1haW4gPj4gY29uZnRlc3QuJGFjX2V4dAorCSAgJFNFRCAicy9eJHN5bWNvZGUkc3ltY29kZSogLiogXCguKlwpJC8gIHtcIlwxXCIsICh2b2lkICopIFwmXDF9LC8iIDwgIiRubGlzdCIgfCAkR1JFUCAtdiBtYWluID4+IGNvbmZ0ZXN0LiRhY19leHQKIAkgIGNhdCA8PFxfTFRfRU9GID4+IGNvbmZ0ZXN0LiRhY19leHQKICAgezAsICh2b2lkICopIDB9CiB9OwpAQCAtMzgxNCw5ICszOTA4LDkgQEAKIAkgIG12IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRzdG0uJGFjX29iamV4dAogCSAgbHRfZ2xvYnN5bV9zYXZlX0xJQlM9JExJQlMKIAkgIGx0X2dsb2JzeW1fc2F2ZV9DRkxBR1M9JENGTEFHUwotCSAgTElCUz0iY29uZnRzdG0uJGFjX29iamV4dCIKKwkgIExJQlM9Y29uZnRzdG0uJGFjX29iamV4dAogCSAgQ0ZMQUdTPSIkQ0ZMQUdTJF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcsICQxKSIKLQkgIGlmIEFDX1RSWV9FVkFMKGFjX2xpbmspICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKwkgIGlmIEFDX1RSWV9FVkFMKGFjX2xpbmspICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCiAJICAgIHBpcGVfd29ya3M9eWVzCiAJICBmaQogCSAgTElCUz0kbHRfZ2xvYnN5bV9zYXZlX0xJQlMKQEAgLTM4MzcsNyArMzkzMSw3IEBACiAgIHJtIC1yZiBjb25mdGVzdCogY29uZnRzdCoKIAogICAjIERvIG5vdCB1c2UgdGhlIGdsb2JhbF9zeW1ib2xfcGlwZSB1bmxlc3MgaXQgd29ya3MuCi0gIGlmIHRlc3QgIiRwaXBlX3dvcmtzIiA9IHllczsgdGhlbgorICBpZiB0ZXN0IHllcyA9ICIkcGlwZV93b3JrcyI7IHRoZW4KICAgICBicmVhawogICBlbHNlCiAgICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0KQEAgLTM4NjQsMTIgKzM5NTgsMTYgQEAKICAgICBbVGFrZSB0aGUgb3V0cHV0IG9mIG5tIGFuZCBwcm9kdWNlIGEgbGlzdGluZyBvZiByYXcgc3ltYm9scyBhbmQgQyBuYW1lc10pCiBfTFRfREVDTChbZ2xvYmFsX3N5bWJvbF90b19jZGVjbF0sIFtsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbF0sIFsxXSwKICAgICBbVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBwcm9wZXIgQyBkZWNsYXJhdGlvbl0pCitfTFRfREVDTChbZ2xvYmFsX3N5bWJvbF90b19pbXBvcnRdLCBbbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9faW1wb3J0XSwgWzFdLAorICAgIFtUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbnRvIGEgbGlzdCBvZiBzeW1ib2xzIHRvIG1hbnVhbGx5IHJlbG9jYXRlXSkKIF9MVF9ERUNMKFtnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzXSwKICAgICBbbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NdLCBbMV0sCiAgICAgW1RyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgQyBuYW1lIGFkZHJlc3MgcGFpcl0pCiBfTFRfREVDTChbZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4XSwKICAgICBbbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeF0sIFsxXSwKICAgICBbVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBDIG5hbWUgYWRkcmVzcyBwYWlyIHdoZW4gbGliIHByZWZpeCBpcyBuZWVkZWRdKQorX0xUX0RFQ0woW25tX2ludGVyZmFjZV0sIFtsdF9jdl9ubV9pbnRlcmZhY2VdLCBbMV0sCisgICAgW1RoZSBuYW1lIGxpc3RlciBpbnRlcmZhY2VdKQogX0xUX0RFQ0woW10sIFtubV9maWxlX2xpc3Rfc3BlY10sIFsxXSwKICAgICBbU3BlY2lmeSBmaWxlbmFtZSBjb250YWluaW5nIGlucHV0IGZpbGVzIGZvciAkTk1dKQogXSkgIyBfTFRfQ01EX0dMT0JBTF9TWU1CT0xTCkBAIC0zODg1LDE3ICszOTgzLDE4IEBACiAKIG00X2lmKFskMV0sIFtDWFhdLCBbCiAgICMgQysrIHNwZWNpZmljIGNhc2VzIGZvciBwaWMsIHN0YXRpYywgd2wsIGV0Yy4KLSAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKyAgaWYgdGVzdCB5ZXMgPSAiJEdYWCI7IHRoZW4KICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1zdGF0aWMnCiAKICAgICBjYXNlICRob3N0X29zIGluCiAgICAgYWl4KikKICAgICAgICMgQWxsIEFJWCBjb2RlIGlzIFBJQy4KLSAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisgICAgICBpZiB0ZXN0IGlhNjQgPSAiJGhvc3RfY3B1IjsgdGhlbgogCSMgQUlYIDUgbm93IHN1cHBvcnRzIElBNjQgcHJvY2Vzc29yCiAJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKICAgICAgIGZpCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJwogICAgICAgOzsKIAogICAgIGFtaWdhb3MqKQpAQCAtMzkwNiw4ICs0MDA1LDggQEAKICAgICAgICAgOzsKICAgICAgIG02OGspCiAgICAgICAgICAgICAjIEZJWE1FOiB3ZSBuZWVkIGF0IGxlYXN0IDY4MDIwIGNvZGUgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcywgYnV0Ci0gICAgICAgICAgICAjIGFkZGluZyB0aGUgYC1tNjgwMjAnIGZsYWcgdG8gR0NDIHByZXZlbnRzIGJ1aWxkaW5nIGFueXRoaW5nIGJldHRlciwKLSAgICAgICAgICAgICMgbGlrZSBgLW02ODA0MCcuCisgICAgICAgICAgICAjIGFkZGluZyB0aGUgJy1tNjgwMjAnIGZsYWcgdG8gR0NDIHByZXZlbnRzIGJ1aWxkaW5nIGFueXRoaW5nIGJldHRlciwKKyAgICAgICAgICAgICMgbGlrZSAnLW02ODA0MCcuCiAgICAgICAgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1tNjgwMjAgLXJlc2lkZW50MzIgLW1hbHdheXMtcmVzdG9yZS1hNCcKICAgICAgICAgOzsKICAgICAgIGVzYWMKQEAgLTM5NzIsNyArNDA3MSw3IEBACiAgICAgY2FzZSAkaG9zdF9vcyBpbgogICAgICAgYWl4W1s0LTldXSopCiAJIyBBbGwgQUlYIGNvZGUgaXMgUElDLgotCWlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJaWYgdGVzdCBpYTY0ID0gIiRob3N0X2NwdSI7IHRoZW4KIAkgICMgQUlYIDUgbm93IHN1cHBvcnRzIElBNjQgcHJvY2Vzc29yCiAJICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJwogCWVsc2UKQEAgLTQwMTMsMTQgKzQxMTIsMTQgQEAKIAljYXNlICRjY19iYXNlbmFtZSBpbgogCSAgQ0MqKQogCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKLQkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPScke3dsfS1hICR7d2x9YXJjaGl2ZScKLQkgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiAhPSBpYTY0OyB0aGVuCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nJHdsLWEgJHt3bH1hcmNoaXZlJworCSAgICBpZiB0ZXN0IGlhNjQgIT0gIiRob3N0X2NwdSI7IHRoZW4KIAkgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9JytaJwogCSAgICBmaQogCSAgICA7OwogCSAgYUNDKikKIAkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCi0JICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nJHt3bH0tYSAke3dsfWFyY2hpdmUnCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nJHdsLWEgJHt3bH1hcmNoaXZlJwogCSAgICBjYXNlICRob3N0X2NwdSBpbgogCSAgICBocHBhKjY0KnxpYTY0KikKIAkgICAgICAjICtaIHRoZSBkZWZhdWx0CkBAIC00MDQ5LDcgKzQxNDgsNyBAQAogCSAgICA7OwogCWVzYWMKIAk7OwotICAgICAgbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251KQorICAgICAgbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251IHwgZ251KikKIAljYXNlICRjY19iYXNlbmFtZSBpbgogCSAgS0NDKikKIAkgICAgIyBLQUkgQysrIENvbXBpbGVyCkBAIC00MDU3LDcgKzQxNTYsNyBAQAogCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJwogCSAgICA7OwogCSAgZWNwYyogKQotCSAgICAjIG9sZCBJbnRlbCBDKysgZm9yIHg4Nl82NCB3aGljaCBzdGlsbCBzdXBwb3J0ZWQgLUtQSUMuCisJICAgICMgb2xkIEludGVsIEMrKyBmb3IgeDg2XzY0LCB3aGljaCBzdGlsbCBzdXBwb3J0ZWQgLUtQSUMuCiAJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJwogCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJwogCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1zdGF0aWMnCkBAIC00MjAyLDE3ICs0MzAxLDE4IEBACiAgIGZpCiBdLAogWwotICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICBpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgogICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJwogICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLXN0YXRpYycKIAogICAgIGNhc2UgJGhvc3Rfb3MgaW4KICAgICAgIGFpeCopCiAgICAgICAjIEFsbCBBSVggY29kZSBpcyBQSUMuCi0gICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorICAgICAgaWYgdGVzdCBpYTY0ID0gIiRob3N0X2NwdSI7IHRoZW4KIAkjIEFJWCA1IG5vdyBzdXBwb3J0cyBJQTY0IHByb2Nlc3NvcgogCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCiAgICAgICBmaQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQycKICAgICAgIDs7CiAKICAgICBhbWlnYW9zKikKQEAgLTQyMjMsOCArNDMyMyw4IEBACiAgICAgICAgIDs7CiAgICAgICBtNjhrKQogICAgICAgICAgICAgIyBGSVhNRTogd2UgbmVlZCBhdCBsZWFzdCA2ODAyMCBjb2RlIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMsIGJ1dAotICAgICAgICAgICAgIyBhZGRpbmcgdGhlIGAtbTY4MDIwJyBmbGFnIHRvIEdDQyBwcmV2ZW50cyBidWlsZGluZyBhbnl0aGluZyBiZXR0ZXIsCi0gICAgICAgICAgICAjIGxpa2UgYC1tNjgwNDAnLgorICAgICAgICAgICAgIyBhZGRpbmcgdGhlICctbTY4MDIwJyBmbGFnIHRvIEdDQyBwcmV2ZW50cyBidWlsZGluZyBhbnl0aGluZyBiZXR0ZXIsCisgICAgICAgICAgICAjIGxpa2UgJy1tNjgwNDAnLgogICAgICAgICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctbTY4MDIwIC1yZXNpZGVudDMyIC1tYWx3YXlzLXJlc3RvcmUtYTQnCiAgICAgICAgIDs7CiAgICAgICBlc2FjCkBAIC00MzExLDcgKzQ0MTEsNyBAQAogICAgIGNhc2UgJGhvc3Rfb3MgaW4KICAgICBhaXgqKQogICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCi0gICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorICAgICAgaWYgdGVzdCBpYTY0ID0gIiRob3N0X2NwdSI7IHRoZW4KIAkjIEFJWCA1IG5vdyBzdXBwb3J0cyBJQTY0IHByb2Nlc3NvcgogCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCiAgICAgICBlbHNlCkBAIC00MzE5LDYgKzQ0MTksMjAgQEAKICAgICAgIGZpCiAgICAgICA7OwogCisgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IG9uIHRoaXMgcGxhdGZvcm0KKyAgICAgICMgQ29tbW9uIHN5bWJvbHMgbm90IGFsbG93ZWQgaW4gTUhfRFlMSUIgZmlsZXMKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZuby1jb21tb24nCisgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgbmFnZm9yKikKKyAgICAgICAgIyBOQUcgRm9ydHJhbiBjb21waWxlcgorICAgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLC1XbCwsJworICAgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1QSUMnCisgICAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICA7OworCiAgICAgbWluZ3cqIHwgY3lnd2luKiB8IHB3MzIqIHwgb3MyKiB8IGNlZ2NjKikKICAgICAgICMgVGhpcyBoYWNrIGlzIHNvIHRoYXQgdGhlIHNvdXJjZSBmaWxlIGNhbiB0ZWxsIHdoZXRoZXIgaXQgaXMgYmVpbmcKICAgICAgICMgYnVpbHQgZm9yIGluY2x1c2lvbiBpbiBhIGRsbCAoYW5kIHNob3VsZCBleHBvcnQgc3ltYm9scyBmb3IgZXhhbXBsZSkuCkBAIC00MzM5LDcgKzQ0NTMsNyBAQAogCTs7CiAgICAgICBlc2FjCiAgICAgICAjIElzIHRoZXJlIGEgYmV0dGVyIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljIHRoYXQgd29ya3Mgd2l0aCB0aGUgYnVuZGxlZCBDQz8KLSAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nJHt3bH0tYSAke3dsfWFyY2hpdmUnCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9JyR3bC1hICR7d2x9YXJjaGl2ZScKICAgICAgIDs7CiAKICAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQpAQCAtNDM0OCw5ICs0NDYyLDkgQEAKICAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLW5vbl9zaGFyZWQnCiAgICAgICA7OwogCi0gICAgbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251KQorICAgIGxpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSB8IGdudSopCiAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgIyBvbGQgSW50ZWwgZm9yIHg4Nl82NCB3aGljaCBzdGlsbCBzdXBwb3J0ZWQgLUtQSUMuCisgICAgICAjIG9sZCBJbnRlbCBmb3IgeDg2XzY0LCB3aGljaCBzdGlsbCBzdXBwb3J0ZWQgLUtQSUMuCiAgICAgICBlY2MqKQogCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJwogCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCkBAIC00Mzc1LDYgKzQ0ODksMTIgQEAKIAlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1QSUMnCiAJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKIAk7OworICAgICAgdGNjKikKKwkjIEZhYnJpY2UgQmVsbGFyZCBldCBhbCdzIFRpbnkgQyBDb21waWxlcgorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctc3RhdGljJworCTs7CiAgICAgICBwZ2NjKiB8IHBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KiB8IHBnZm9ydHJhbiopCiAgICAgICAgICMgUG9ydGxhbmQgR3JvdXAgY29tcGlsZXJzICgqbm90KiB0aGUgUGVudGl1bSBnY2MgY29tcGlsZXIsCiAJIyB3aGljaCBsb29rcyB0byBiZSBhIGRlYWQgcHJvamVjdCkKQEAgLTQ0NzIsNyArNDU5Miw3IEBACiAgICAgICA7OwogCiAgICAgc3lzdjQqTVAqKQotICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYyA7dGhlbgorICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYzsgdGhlbgogCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtjb25mb3JtX3BpYycKIAlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJwogICAgICAgZmkKQEAgLTQ1MDEsNyArNDYyMSw3IEBACiAgIGZpCiBdKQogY2FzZSAkaG9zdF9vcyBpbgotICAjIEZvciBwbGF0Zm9ybXMgd2hpY2ggZG8gbm90IHN1cHBvcnQgUElDLCAtRFBJQyBpcyBtZWFuaW5nbGVzczoKKyAgIyBGb3IgcGxhdGZvcm1zIHRoYXQgZG8gbm90IHN1cHBvcnQgUElDLCAtRFBJQyBpcyBtZWFuaW5nbGVzczoKICAgKmRqZ3BwKikKICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9CiAgICAgOzsKQEAgLTQ1NzcsNyArNDY5Nyw3IEBACiAgICAgZmkKICAgICA7OwogICBwdzMyKikKLSAgICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0iJGx0ZGxsX2NtZHMiCisgICAgX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JGx0ZGxsX2NtZHMKICAgICA7OwogICBjeWd3aW4qIHwgbWluZ3cqIHwgY2VnY2MqKQogICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCkBAIC00NjIzLDkgKzQ3NDMsOSBAQAogICAjIGluY2x1ZGVkIGluIHRoZSBzeW1ib2wgbGlzdAogICBfTFRfVEFHVkFSKGluY2x1ZGVfZXhwc3ltcywgJDEpPQogICAjIGV4Y2x1ZGVfZXhwc3ltcyBjYW4gYmUgYW4gZXh0ZW5kZWQgcmVnZXhwIG9mIHN5bWJvbHMgdG8gZXhjbHVkZQotICAjIGl0IHdpbGwgYmUgd3JhcHBlZCBieSBgICgnIGFuZCBgKSQnLCBzbyBvbmUgbXVzdCBub3QgbWF0Y2ggYmVnaW5uaW5nIG9yCi0gICMgZW5kIG9mIGxpbmUuICBFeGFtcGxlOiBgYXxiY3wuKmQuKicgd2lsbCBleGNsdWRlIHRoZSBzeW1ib2xzIGBhJyBhbmQgYGJjJywKLSAgIyBhcyB3ZWxsIGFzIGFueSBzeW1ib2wgdGhhdCBjb250YWlucyBgZCcuCisgICMgaXQgd2lsbCBiZSB3cmFwcGVkIGJ5ICcgKCcgYW5kICcpJCcsIHNvIG9uZSBtdXN0IG5vdCBtYXRjaCBiZWdpbm5pbmcgb3IKKyAgIyBlbmQgb2YgbGluZS4gIEV4YW1wbGU6ICdhfGJjfC4qZC4qJyB3aWxsIGV4Y2x1ZGUgdGhlIHN5bWJvbHMgJ2EnIGFuZCAnYmMnLAorICAjIGFzIHdlbGwgYXMgYW55IHN5bWJvbCB0aGF0IGNvbnRhaW5zICdkJy4KICAgX0xUX1RBR1ZBUihleGNsdWRlX2V4cHN5bXMsICQxKT1bJ19HTE9CQUxfT0ZGU0VUX1RBQkxFX3xfR0xPQkFMX19GW0lEXV8uKiddCiAgICMgQWx0aG91Z2ggX0dMT0JBTF9PRkZTRVRfVEFCTEVfIGlzIGEgdmFsaWQgc3ltYm9sIEMgbmFtZSwgbW9zdCBhLm91dAogICAjIHBsYXRmb3JtcyAoYWIpdXNlIGl0IGluIFBJQyBjb2RlLCBidXQgdGhlaXIgbGlua2VycyBnZXQgY29uZnVzZWQgaWYKQEAgLTQ2NDEsNyArNDc2MSw3IEBACiAgICAgIyBGSVhNRTogdGhlIE1TVkMrKyBwb3J0IGhhc24ndCBiZWVuIHRlc3RlZCBpbiBhIGxvb29vbmcgdGltZQogICAgICMgV2hlbiBub3QgdXNpbmcgZ2NjLCB3ZSBjdXJyZW50bHkgYXNzdW1lIHRoYXQgd2UgYXJlIHVzaW5nCiAgICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KLSAgICBpZiB0ZXN0ICIkR0NDIiAhPSB5ZXM7IHRoZW4KKyAgICBpZiB0ZXN0IHllcyAhPSAiJEdDQyI7IHRoZW4KICAgICAgIHdpdGhfZ251X2xkPW5vCiAgICAgZmkKICAgICA7OwpAQCAtNDY0OSw3ICs0NzY5LDcgQEAKICAgICAjIHdlIGp1c3QgaG9wZS9hc3N1bWUgdGhpcyBpcyBnY2MgYW5kIG5vdCBjODkgKD0gTVNWQysrKQogICAgIHdpdGhfZ251X2xkPXllcwogICAgIDs7Ci0gIG9wZW5ic2QqKQorICBvcGVuYnNkKiB8IGJpdHJpZyopCiAgICAgd2l0aF9nbnVfbGQ9bm8KICAgICA7OwogICBlc2FjCkBAIC00NjU5LDcgKzQ3NzksNyBAQAogICAjIE9uIHNvbWUgdGFyZ2V0cywgR05VIGxkIGlzIGNvbXBhdGlibGUgZW5vdWdoIHdpdGggdGhlIG5hdGl2ZSBsaW5rZXIKICAgIyB0aGF0IHdlJ3JlIGJldHRlciBvZmYgdXNpbmcgdGhlIG5hdGl2ZSBpbnRlcmZhY2UgZm9yIGJvdGguCiAgIGx0X3VzZV9nbnVfbGRfaW50ZXJmYWNlPW5vCi0gIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKyAgaWYgdGVzdCB5ZXMgPSAiJHdpdGhfZ251X2xkIjsgdGhlbgogICAgIGNhc2UgJGhvc3Rfb3MgaW4KICAgICAgIGFpeCopCiAJIyBUaGUgQUlYIHBvcnQgb2YgR05VIGxkIGhhcyBhbHdheXMgYXNwaXJlZCB0byBjb21wYXRpYmlsaXR5CkBAIC00NjgxLDI0ICs0ODAxLDI0IEBACiAgICAgZXNhYwogICBmaQogCi0gIGlmIHRlc3QgIiRsdF91c2VfZ251X2xkX2ludGVyZmFjZSIgPSB5ZXM7IHRoZW4KKyAgaWYgdGVzdCB5ZXMgPSAiJGx0X3VzZV9nbnVfbGRfaW50ZXJmYWNlIjsgdGhlbgogICAgICMgSWYgYXJjaGl2ZV9jbWRzIHJ1bnMgTEQsIG5vdCBDQywgd2xhcmMgc2hvdWxkIGJlIGVtcHR5Ci0gICAgd2xhcmM9JyR7d2x9JworICAgIHdsYXJjPSckd2wnCiAKICAgICAjIFNldCBzb21lIGRlZmF1bHRzIGZvciBHTlUgbGQgd2l0aCBzaGFyZWQgbGlicmFyeSBzdXBwb3J0LiBUaGVzZQogICAgICMgYXJlIHJlc2V0IGxhdGVyIGlmIHNoYXJlZCBsaWJyYXJpZXMgYXJlIG5vdCBzdXBwb3J0ZWQuIFB1dHRpbmcgdGhlbQogICAgICMgaGVyZSBhbGxvd3MgdGhlbSB0byBiZSBvdmVycmlkZGVuIGlmIG5lY2Vzc2FyeS4KICAgICBydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAotICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCi0gICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tLWV4cG9ydC1keW5hbWljJworICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSckd2wtcnBhdGggJHdsJGxpYmRpcicKKyAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPSckd2wtLWV4cG9ydC1keW5hbWljJwogICAgICMgYW5jaWVudCBHTlUgbGQgZGlkbid0IHN1cHBvcnQgLS13aG9sZS1hcmNoaXZlIGV0LiBhbC4KICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnbm8td2hvbGUtYXJjaGl2ZScgPiAvZGV2L251bGw7IHRoZW4KLSAgICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0iJHdsYXJjIictLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJyIkd2xhcmMiJy0tbm8td2hvbGUtYXJjaGl2ZScKKyAgICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0kd2xhcmMnLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICckd2xhcmMnLS1uby13aG9sZS1hcmNoaXZlJwogICAgIGVsc2UKICAgICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0KICAgICBmaQogICAgIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz1ubwotICAgIGNhc2UgYCRMRCAtdiAyPiYxYCBpbgorICAgIGNhc2UgYCRMRCAtdiB8ICRTRUQgLWUgJ3MvKFteKV1cKylcc1wrLy8nIDI+JjFgIGluCiAgICAgICAqR05VXCBnb2xkKikgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPXllcyA7OwogICAgICAgKlwgW1swMV1dLiogfCAqXCAyLltbMC05XV0uKiB8ICpcIDIuMTAuKikgOzsgIyBjYXRjaCB2ZXJzaW9ucyA8IDIuMTEKICAgICAgICpcIDIuMTEuOTMuMC4yXCAqKSBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9eWVzIDs7ICMgUkg3LjMgLi4uCkBAIC00NzExLDcgKzQ4MzEsNyBAQAogICAgIGNhc2UgJGhvc3Rfb3MgaW4KICAgICBhaXhbWzMtOV1dKikKICAgICAgICMgT24gQUlYL1BQQywgdGhlIEdOVSBsaW5rZXIgaXMgdmVyeSBicm9rZW4KLSAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgIT0gaWE2NDsgdGhlbgorICAgICAgaWYgdGVzdCBpYTY0ICE9ICIkaG9zdF9jcHUiOyB0aGVuCiAJX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwogCWNhdCA8PF9MVF9FT0YgMT4mMgogCkBAIC00NzMwLDcgKzQ4NTAsNyBAQAogICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KICAgICAgIHBvd2VycGMpCiAgICAgICAgICAgICAjIHNlZSBjb21tZW50IGFib3V0IEFtaWdhT1M0IC5zbyBzdXBwb3J0Ci0gICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKICAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPScnCiAgICAgICAgIDs7CiAgICAgICBtNjhrKQpAQCAtNDc0Niw3ICs0ODY2LDcgQEAKIAlfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKIAkjIEpvc2VwaCBCZWNrZW5iYWNoIDxqcmIzQGJlc3QuY29tPiBzYXlzIHNvbWUgcmVsZWFzZXMgb2YgZ2NjCiAJIyBzdXBwb3J0IC0tdW5kZWZpbmVkLiAgVGhpcyBkZXNlcnZlcyBzb21lIGludmVzdGlnYXRpb24uICBGSVhNRQotCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtbm9zdGFydCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLW5vc3RhcnQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwogICAgICAgZWxzZQogCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KICAgICAgIGZpCkBAIC00NzU2LDcgKzQ4NzYsNyBAQAogICAgICAgIyBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKSBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywKICAgICAgICMgYXMgdGhlcmUgaXMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCiAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJwotICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tLWV4cG9ydC1hbGwtc3ltYm9scycKKyAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR3bC0tZXhwb3J0LWFsbC1zeW1ib2xzJwogICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCiAgICAgICBfTFRfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPW5vCiAgICAgICBfTFRfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT15ZXMKQEAgLTQ3NjQsNjEgKzQ4ODQsNjEgQEAKICAgICAgIF9MVF9UQUdWQVIoZXhjbHVkZV9leHBzeW1zLCAkMSk9WydbX10rR0xPQkFMX09GRlNFVF9UQUJMRV98W19dK0dMT0JBTF9fW0ZJRF1fLip8W19dK2hlYWRfW0EtWmEtejAtOV9dK19kbGx8W0EtWmEtejAtOV9dK19kbGxfaW5hbWUnXQogCiAgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCi0gICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJwotCSMgSWYgdGhlIGV4cG9ydC1zeW1ib2xzIGZpbGUgYWxyZWFkeSBpcyBhIC5kZWYgZmlsZSAoMXN0IGxpbmUKLQkjIGlzIEVYUE9SVFMpLCB1c2UgaXQgYXMgaXM7IG90aGVyd2lzZSwgcHJlcGVuZC4uLgotCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdpZiB0ZXN0ICJ4YCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCIgPSB4RVhQT1JUUzsgdGhlbgotCSAgY3AgJGV4cG9ydF9zeW1ib2xzICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOwotCWVsc2UKLQkgIGVjaG8gRVhQT1JUUyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOwotCSAgY2F0ICRleHBvcnRfc3ltYm9scyA+PiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKLQlmaX4KLQkkQ0MgLXNoYXJlZCAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKKyAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHdsLS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJworCSMgSWYgdGhlIGV4cG9ydC1zeW1ib2xzIGZpbGUgYWxyZWFkeSBpcyBhIC5kZWYgZmlsZSwgdXNlIGl0IGFzCisJIyBpczsgb3RoZXJ3aXNlLCBwcmVwZW5kIEVYUE9SVFMuLi4KKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0naWYgX0xUX0RMTF9ERUZfUChbJGV4cG9ydF9zeW1ib2xzXSk7IHRoZW4KKyAgICAgICAgICBjcCAkZXhwb3J0X3N5bWJvbHMgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBlY2hvIEVYUE9SVFMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKyAgICAgICAgICBjYXQgJGV4cG9ydF9zeW1ib2xzID4+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworICAgICAgICBmaX4KKyAgICAgICAgJENDIC1zaGFyZWQgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWYgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHdsLS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJwogICAgICAgZWxzZQogCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KICAgICAgIGZpCiAgICAgICA7OwogCiAgICAgaGFpa3UqKQotICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCiAgICAgICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKICAgICAgIDs7CiAKICAgICBpbnRlcml4W1szLTldXSopCiAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCiAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubwotICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoLCRsaWJkaXInCi0gICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1FJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bC1ycGF0aCwkbGliZGlyJworICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHdsLUUnCiAgICAgICAjIEhhY2s6IE9uIEludGVyaXggMy54LCB3ZSBjYW5ub3QgY29tcGlsZSBQSUMgYmVjYXVzZSBvZiBhIGJyb2tlbiBnY2MuCiAgICAgICAjIEluc3RlYWQsIHNoYXJlZCBsaWJyYXJpZXMgYXJlIGxvYWRlZCBhdCBhbiBpbWFnZSBiYXNlICgweDEwMDAwMDAwIGJ5CiAgICAgICAjIGRlZmF1bHQpIGFuZCByZWxvY2F0ZWQgaWYgdGhleSBjb25mbGljdCwgd2hpY2ggaXMgYSBzbG93IHZlcnkgbWVtb3J5CiAgICAgICAjIGNvbnN1bWluZyBhbmQgZnJhZ21lbnRpbmcgcHJvY2Vzcy4gIFRvIGF2b2lkIHRoaXMsIHdlIHBpY2sgYSByYW5kb20sCiAgICAgICAjIDI1NiBLaUItYWxpZ25lZCBpbWFnZSBiYXNlIGJldHdlZW4gMHg1MDAwMDAwMCBhbmQgMHg2RkZDMDAwMCBhdCBsaW5rCiAgICAgICAjIHRpbWUuICBNb3ZpbmcgdXAgZnJvbSAweDEwMDAwMDAwIGFsc28gYWxsb3dzIG1vcmUgc2JyaygyKSBzcGFjZS4KLSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCwkc29uYW1lICR7d2x9LS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCi0gICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nc2VkICJzLF4sXywiICRleHBvcnRfc3ltYm9scyA+JG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW1+JENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1oLCRzb25hbWUgJHt3bH0tLXJldGFpbi1zeW1ib2xzLWZpbGUsJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW0gJHt3bH0tLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLWgsJHNvbmFtZSAkd2wtLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdzZWQgInN8XnxffCIgJGV4cG9ydF9zeW1ib2xzID4kb3V0cHV0X29iamRpci8kc29uYW1lLmV4cHN5bX4kQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1oLCRzb25hbWUgJHdsLS1yZXRhaW4tc3ltYm9scy1maWxlLCRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltICR3bC0taW1hZ2UtYmFzZSxgZXhwciAke1JBTkRPTS0kJH0gJSA0MDk2IC8gMiBcKiAyNjIxNDQgKyAxMzQyMTc3MjgwYCAtbyAkbGliJwogICAgICAgOzsKIAogICAgIGdudSogfCBsaW51eCogfCB0cGYqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251KQogICAgICAgdG1wX2RpZXQ9bm8KLSAgICAgIGlmIHRlc3QgIiRob3N0X29zIiA9IGxpbnV4LWRpZXRsaWJjOyB0aGVuCisgICAgICBpZiB0ZXN0IGxpbnV4LWRpZXRsaWJjID0gIiRob3N0X29zIjsgdGhlbgogCWNhc2UgJGNjX2Jhc2VuYW1lIGluCiAJICBkaWV0XCAqKSB0bXBfZGlldD15ZXM7OwkjIGxpbnV4LWRpZXRsaWJjIHdpdGggc3RhdGljIGxpbmtpbmcgKCFkaWV0LWR5bikKIAllc2FjCiAgICAgICBmaQogICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEVHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGwgXAotCSAmJiB0ZXN0ICIkdG1wX2RpZXQiID0gbm8KKwkgJiYgdGVzdCBubyA9ICIkdG1wX2RpZXQiCiAgICAgICB0aGVuCiAJdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcnCiAJdG1wX3NoYXJlZGZsYWc9Jy1zaGFyZWQnCiAJY2FzZSAkY2NfYmFzZW5hbWUsJGhvc3RfY3B1IGluCiAgICAgICAgIHBnY2MqKQkJCQkjIFBvcnRsYW5kIEdyb3VwIEMgY29tcGlsZXIKLQkgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0tLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisJICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR3bC0td2hvbGUtYXJjaGl2ZWBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCAkd2wtLW5vLXdob2xlLWFyY2hpdmUnCiAJICB0bXBfYWRkZmxhZz0nICRwaWNfZmxhZycKIAkgIDs7CiAJcGdmNzcqIHwgcGdmOTAqIHwgcGdmOTUqIHwgcGdmb3J0cmFuKikKIAkJCQkJIyBQb3J0bGFuZCBHcm91cCBmNzcgYW5kIGY5MCBjb21waWxlcnMKLQkgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0tLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisJICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR3bC0td2hvbGUtYXJjaGl2ZWBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCAkd2wtLW5vLXdob2xlLWFyY2hpdmUnCiAJICB0bXBfYWRkZmxhZz0nICRwaWNfZmxhZyAtTW5vbWFpbicgOzsKIAllY2MqLGlhNjQqIHwgaWNjKixpYTY0KikJIyBJbnRlbCBDIGNvbXBpbGVyIG9uIGlhNjQKIAkgIHRtcF9hZGRmbGFnPScgLWlfZHluYW1pYycgOzsKQEAgLTQ4MjksNDIgKzQ5NDksNDQgQEAKIAlsZjk1KikJCQkJIyBMYWhleSBGb3J0cmFuIDguMQogCSAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPQogCSAgdG1wX3NoYXJlZGZsYWc9Jy0tc2hhcmVkJyA7OworICAgICAgICBuYWdmb3IqKSAgICAgICAgICAgICAgICAgICAgICAgICMgTkFHRk9SIDUuMworICAgICAgICAgIHRtcF9zaGFyZWRmbGFnPSctV2wsLXNoYXJlZCcgOzsKIAl4bFtbY0NdXSogfCBiZ3hsW1tjQ11dKiB8IG1waXhsW1tjQ11dKikgIyBJQk0gWEwgQyA4LjAgb24gUFBDIChkZWFsIHdpdGggeGxmIGJlbG93KQogCSAgdG1wX3NoYXJlZGZsYWc9Jy1xbWtzaHJvYmonCiAJICB0bXBfYWRkZmxhZz0gOzsKIAludmNjKikJIyBDdWRhIENvbXBpbGVyIERyaXZlciAyLjIKLQkgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0tLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisJICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR3bC0td2hvbGUtYXJjaGl2ZWBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCAkd2wtLW5vLXdob2xlLWFyY2hpdmUnCiAJICBfTFRfVEFHVkFSKGNvbXBpbGVyX25lZWRzX29iamVjdCwgJDEpPXllcwogCSAgOzsKIAllc2FjCiAJY2FzZSBgJENDIC1WIDI+JjEgfCBzZWQgNXFgIGluCiAJKlN1blwgQyopCQkJIyBTdW4gQyA1LjkKLQkgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0tLXdob2xlLWFyY2hpdmVgbmV3X2NvbnZlbmllbmNlPTsgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAteiBcIiRjb252XCIgfHwgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKKwkgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHdsLS13aG9sZS1hcmNoaXZlYG5ld19jb252ZW5pZW5jZT07IGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgLXogXCIkY29udlwiIHx8IG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAgJHdsLS1uby13aG9sZS1hcmNoaXZlJwogCSAgX0xUX1RBR1ZBUihjb21waWxlcl9uZWVkc19vYmplY3QsICQxKT15ZXMKIAkgIHRtcF9zaGFyZWRmbGFnPSctRycgOzsKIAkqU3VuXCBGKikJCQkjIFN1biBGb3J0cmFuIDguMwogCSAgdG1wX3NoYXJlZGZsYWc9Jy1HJyA7OwogCWVzYWMKLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgJyIkdG1wX3NoYXJlZGZsYWciIiR0bXBfYWRkZmxhZyInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAnIiR0bXBfc2hhcmVkZmxhZyIiJHRtcF9hZGRmbGFnIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwogCi0gICAgICAgIGlmIHRlc3QgIngkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nIiA9IHh5ZXM7IHRoZW4KKyAgICAgICAgaWYgdGVzdCB5ZXMgPSAiJHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZyI7IHRoZW4KICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZWNobyAieyBnbG9iYWw6IiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KLQkgICAgY2F0ICRleHBvcnRfc3ltYm9scyB8IHNlZCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgotCSAgICBlY2hvICJsb2NhbDogKjsgfTsiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KLQkgICAgJENDICciJHRtcF9zaGFyZWRmbGFnIiIkdG1wX2FkZGZsYWciJyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tdmVyc2lvbi1zY3JpcHQgJHt3bH0kb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKKyAgICAgICAgICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgfCBzZWQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKyAgICAgICAgICAgIGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorICAgICAgICAgICAgJENDICciJHRtcF9zaGFyZWRmbGFnIiIkdG1wX2FkZGZsYWciJyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lICR3bC12ZXJzaW9uLXNjcmlwdCAkd2wkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKICAgICAgICAgZmkKIAogCWNhc2UgJGNjX2Jhc2VuYW1lIGluCiAJeGxmKiB8IGJnZiogfCBiZ3hsZiogfCBtcGl4bGYqKQogCSAgIyBJQk0gWEwgRm9ydHJhbiAxMC4xIG9uIFBQQyBjYW5ub3QgY3JlYXRlIHNoYXJlZCBsaWJzIGl0c2VsZgogCSAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSctLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgLS1uby13aG9sZS1hcmNoaXZlJwotCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSckd2wtcnBhdGggJHdsJGxpYmRpcicKIAkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC1vICRsaWInCi0JICBpZiB0ZXN0ICJ4JHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZyIgPSB4eWVzOyB0aGVuCisJICBpZiB0ZXN0IHllcyA9ICIkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nIjsgdGhlbgogCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZWNobyAieyBnbG9iYWw6IiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KLQkgICAgICBjYXQgJGV4cG9ydF9zeW1ib2xzIHwgc2VkIC1lICJzL1woLipcKS9cMTsvIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+Ci0JICAgICAgZWNobyAibG9jYWw6ICo7IH07IiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+Ci0JICAgICAgJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLXZlcnNpb24tc2NyaXB0ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJworICAgICAgICAgICAgICBjYXQgJGV4cG9ydF9zeW1ib2xzIHwgc2VkIC1lICJzL1woLipcKS9cMTsvIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisgICAgICAgICAgICAgIGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorICAgICAgICAgICAgICAkTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtdmVyc2lvbi1zY3JpcHQgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCiAJICBmaQogCSAgOzsKIAllc2FjCkBAIC00ODc4LDggKzUwMDAsOCBAQAogCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtQnNoYXJlYWJsZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1vICRsaWInCiAJd2xhcmM9CiAgICAgICBlbHNlCi0JX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgJHdsLXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCiAgICAgICBmaQogICAgICAgOzsKIApAQCAtNDg5Nyw4ICs1MDE5LDggQEAKIAogX0xUX0VPRgogICAgICAgZWxpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCi0JX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgJHdsLXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCiAgICAgICBlbHNlCiAJX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwogICAgICAgZmkKQEAgLTQ5MTAsNyArNTAzMiw3IEBACiAJX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwogCWNhdCA8PF9MVF9FT0YgMT4mMgogCi0qKiogV2FybmluZzogUmVsZWFzZXMgb2YgdGhlIEdOVSBsaW5rZXIgcHJpb3IgdG8gMi4xNi45MS4wLjMgY2FuIG5vdAorKioqIFdhcm5pbmc6IFJlbGVhc2VzIG9mIHRoZSBHTlUgbGlua2VyIHByaW9yIHRvIDIuMTYuOTEuMC4zIGNhbm5vdAogKioqIHJlbGlhYmx5IGNyZWF0ZSBzaGFyZWQgbGlicmFyaWVzIG9uIFNDTyBzeXN0ZW1zLiAgVGhlcmVmb3JlLCBsaWJ0b29sCiAqKiogaXMgZGlzYWJsaW5nIHNoYXJlZCBsaWJyYXJpZXMgc3VwcG9ydC4gIFdlIHVyZ2UgeW91IHRvIHVwZ3JhZGUgR05VCiAqKiogYmludXRpbHMgdG8gcmVsZWFzZSAyLjE2LjkxLjAuMyBvciBuZXdlci4gIEFub3RoZXIgb3B0aW9uIGlzIHRvIG1vZGlmeQpAQCAtNDkyNSw5ICs1MDQ3LDkgQEAKIAkgICMgRFRfUlVOUEFUSCB0YWcgZnJvbSBleGVjdXRhYmxlcyBhbmQgbGlicmFyaWVzLiAgQnV0IGRvaW5nIHNvCiAJICAjIHJlcXVpcmVzIHRoYXQgeW91IGNvbXBpbGUgZXZlcnl0aGluZyB0d2ljZSwgd2hpY2ggaXMgYSBwYWluLgogCSAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgotCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJwotCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLQkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsLXJwYXRoICR3bCRsaWJkaXInCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgJHdsLXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCiAJICBlbHNlCiAJICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KIAkgIGZpCkBAIC00OTQ0LDE1ICs1MDY2LDE1IEBACiAKICAgICAqKQogICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgotCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLQlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lICR3bC1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJwogICAgICAgZWxzZQogCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KICAgICAgIGZpCiAgICAgICA7OwogICAgIGVzYWMKIAotICAgIGlmIHRlc3QgIiRfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpIiA9IG5vOyB0aGVuCisgICAgaWYgdGVzdCBubyA9ICIkX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKSI7IHRoZW4KICAgICAgIHJ1bnBhdGhfdmFyPQogICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9CiAgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPQpAQCAtNDk2OCw3ICs1MDkwLDcgQEAKICAgICAgICMgTm90ZTogdGhpcyBsaW5rZXIgaGFyZGNvZGVzIHRoZSBkaXJlY3RvcmllcyBpbiBMSUJQQVRIIGlmIHRoZXJlCiAgICAgICAjIGFyZSBubyBkaXJlY3RvcmllcyBzcGVjaWZpZWQgYnkgLUwuCiAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzICYmIHRlc3QgLXogIiRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyI7IHRoZW4KKyAgICAgIGlmIHRlc3QgeWVzID0gIiRHQ0MiICYmIHRlc3QgLXogIiRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyI7IHRoZW4KIAkjIE5laXRoZXIgZGlyZWN0IGhhcmRjb2Rpbmcgbm9yIHN0YXRpYyBsaW5raW5nIGlzIHN1cHBvcnRlZCB3aXRoIGEKIAkjIGJyb2tlbiBjb2xsZWN0Mi4KIAlfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXVuc3VwcG9ydGVkCkBAIC00OTc2LDEyICs1MDk4LDEyIEBACiAgICAgICA7OwogCiAgICAgYWl4W1s0LTldXSopCi0gICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorICAgICAgaWYgdGVzdCBpYTY0ID0gIiRob3N0X2NwdSI7IHRoZW4KIAkjIE9uIElBNjQsIHRoZSBsaW5rZXIgZG9lcyBydW4gdGltZSBsaW5raW5nIGJ5IGRlZmF1bHQsIHNvIHdlIGRvbid0CiAJIyBoYXZlIHRvIGRvIGFueXRoaW5nIHNwZWNpYWwuCiAJYWl4X3VzZV9ydW50aW1lbGlua2luZz1ubwogCWV4cF9zeW1fZmxhZz0nLUJleHBvcnQnCi0Jbm9fZW50cnlfZmxhZz0iIgorCW5vX2VudHJ5X2ZsYWc9CiAgICAgICBlbHNlCiAJIyBJZiB3ZSdyZSB1c2luZyBHTlUgbm0sIHRoZW4gd2UgZG9uJ3Qgd2FudCB0aGUgIi1DIiBvcHRpb24uCiAJIyAtQyBtZWFucyBkZW1hbmdsZSB0byBBSVggbm0sIGJ1dCBtZWFucyBkb24ndCBkZW1hbmdsZSB3aXRoIEdOVSBubQpAQCAtNDk5OSw3ICs1MTIxLDcgQEAKIAkjIG5lZWQgdG8gZG8gcnVudGltZSBsaW5raW5nLgogCWNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bWzIzXV18YWl4NC5bWzIzXV0uKnxhaXhbWzUtOV1dKikKIAkgIGZvciBsZF9mbGFnIGluICRMREZMQUdTOyBkbwotCSAgaWYgKHRlc3QgJGxkX2ZsYWcgPSAiLWJydGwiIHx8IHRlc3QgJGxkX2ZsYWcgPSAiLVdsLC1icnRsIik7IHRoZW4KKwkgIGlmICh0ZXN0IHgtYnJ0bCA9ICJ4JGxkX2ZsYWciIHx8IHRlc3QgeC1XbCwtYnJ0bCA9ICJ4JGxkX2ZsYWciKTsgdGhlbgogCSAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPXllcwogCSAgICBicmVhawogCSAgZmkKQEAgLTUwMjIsMTMgKzUxNDQsMTMgQEAKICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlLCAkMSk9eWVzCiAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0nOicKICAgICAgIF9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcwotICAgICAgX0xUX1RBR1ZBUihmaWxlX2xpc3Rfc3BlYywgJDEpPScke3dsfS1mLCcKKyAgICAgIF9MVF9UQUdWQVIoZmlsZV9saXN0X3NwZWMsICQxKT0nJHdsLWYsJwogCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgICAgaWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KIAljYXNlICRob3N0X29zIGluIGFpeDQuW1swMTJdXXxhaXg0LltbMDEyXV0uKikKIAkjIFdlIG9ubHkgd2FudCB0byBkbyB0aGlzIG9uIEFJWCA0LjIgYW5kIGxvd2VyLCB0aGUgY2hlY2sKIAkjIGJlbG93IGZvciBicm9rZW4gY29sbGVjdDIgZG9lc24ndCB3b3JrIHVuZGVyIDQuMysKLQkgIGNvbGxlY3QybmFtZT1gJHtDQ30gLXByaW50LXByb2ctbmFtZT1jb2xsZWN0MmAKKwkgIGNvbGxlY3QybmFtZT1gJENDIC1wcmludC1wcm9nLW5hbWU9Y29sbGVjdDJgCiAJICBpZiB0ZXN0IC1mICIkY29sbGVjdDJuYW1lIiAmJgogCSAgIHN0cmluZ3MgIiRjb2xsZWN0Mm5hbWUiIHwgJEdSRVAgcmVzb2x2ZV9saWJfbmFtZSA+L2Rldi9udWxsCiAJICB0aGVuCkBAIC01MDQ3LDYxICs1MTY5LDYxIEBACiAJICA7OwogCWVzYWMKIAlzaGFyZWRfZmxhZz0nLXNoYXJlZCcKLQlpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KLQkgIHNoYXJlZF9mbGFnPSIkc2hhcmVkX2ZsYWcgIicke3dsfS1HJworCWlmIHRlc3QgeWVzID0gIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIjsgdGhlbgorCSAgc2hhcmVkX2ZsYWc9IiRzaGFyZWRfZmxhZyAiJyR3bC1HJwogCWZpCiAgICAgICBlbHNlCiAJIyBub3QgdXNpbmcgZ2NjCi0JaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKwlpZiB0ZXN0IGlhNjQgPSAiJGhvc3RfY3B1IjsgdGhlbgogCSMgVmlzdWFsQWdlIEMrKywgVmVyc2lvbiA1LjUgZm9yIEFJWCA1TCBmb3IgSUEtNjQsIEJldGEgMyBSZWxlYXNlCiAJIyBjaG9rZXMgb24gLVdsLC1HLiBUaGUgZm9sbG93aW5nIGxpbmUgaXMgY29ycmVjdDoKIAkgIHNoYXJlZF9mbGFnPSctRycKIAllbHNlCi0JICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KLQkgICAgc2hhcmVkX2ZsYWc9JyR7d2x9LUcnCisJICBpZiB0ZXN0IHllcyA9ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyI7IHRoZW4KKwkgICAgc2hhcmVkX2ZsYWc9JyR3bC1HJwogCSAgZWxzZQotCSAgICBzaGFyZWRfZmxhZz0nJHt3bH0tYk06U1JFJworCSAgICBzaGFyZWRfZmxhZz0nJHdsLWJNOlNSRScKIAkgIGZpCiAJZmkKICAgICAgIGZpCiAKLSAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LWJleHBhbGwnCisgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPSckd2wtYmV4cGFsbCcKICAgICAgICMgSXQgc2VlbXMgdGhhdCAtYmV4cGFsbCBkb2VzIG5vdCBleHBvcnQgc3ltYm9scyBiZWdpbm5pbmcgd2l0aAogICAgICAgIyB1bmRlcnNjb3JlIChfKSwgc28gaXQgaXMgYmV0dGVyIHRvIGdlbmVyYXRlIGEgbGlzdCBvZiBzeW1ib2xzIHRvIGV4cG9ydC4KICAgICAgIF9MVF9UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9eWVzCi0gICAgICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KKyAgICAgIGlmIHRlc3QgeWVzID0gIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIjsgdGhlbgogCSMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1bnRpbWUgbG9hZGluZyBmbGFncyAoLWJydGwpLAogCSMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KIAlfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9Jy1iZXJvaycKICAgICAgICAgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCiAgICAgICAgICMgZW1wdHkgZXhlY3V0YWJsZS4KICAgICAgICAgX0xUX1NZU19NT0RVTEVfUEFUSF9BSVgoWyQxXSkKLSAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCi0gICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzIGBpZiB0ZXN0ICJ4JHthbGxvd191bmRlZmluZWRfZmxhZ30iICE9ICJ4IjsgdGhlbiBmdW5jX2VjaG9fYWxsICIke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IjsgZWxzZSA6OyBmaWAgJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMgJHNoYXJlZF9mbGFnIgorICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsLWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkd2wnJG5vX2VudHJ5X2ZsYWcnICRjb21waWxlcl9mbGFncyBgaWYgdGVzdCAtbiAiJGFsbG93X3VuZGVmaW5lZF9mbGFnIjsgdGhlbiBmdW5jX2VjaG9fYWxsICIkd2wkYWxsb3dfdW5kZWZpbmVkX2ZsYWciOyBlbHNlIDo7IGZpYCAkd2wnJGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzJyAnJHNoYXJlZF9mbGFnCiAgICAgICBlbHNlCi0JaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KLQkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1SICRsaWJkaXI6L3Vzci9saWI6L2xpYicKKwlpZiB0ZXN0IGlhNjQgPSAiJGhvc3RfY3B1IjsgdGhlbgorCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bC1SICRsaWJkaXI6L3Vzci9saWI6L2xpYicKIAkgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0iLXogbm9kZWZzIgotCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9IlwkQ0MgJHNoYXJlZF9mbGFnIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzICR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30gJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMiCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0iXCRDQyAkc2hhcmVkX2ZsYWciJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR3bCRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzICR3bCRhbGxvd191bmRlZmluZWRfZmxhZyAnIlwkd2wkZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMiCiAJZWxzZQogCSAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KIAkgIyBlbXB0eSBleGVjdXRhYmxlLgogCSBfTFRfU1lTX01PRFVMRV9QQVRIX0FJWChbJDFdKQotCSBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKwkgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bC1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgogCSAgIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVuIHRpbWUgbG9hZGluZyBmbGFncywKIAkgICMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KLQkgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR7d2x9LWJlcm5vdG9rJwotCSAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgJHt3bH0tYmVyb2snCi0JICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisJICBfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAkd2wtYmVybm90b2snCisJICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAkd2wtYmVyb2snCisJICBpZiB0ZXN0IHllcyA9ICIkd2l0aF9nbnVfbGQiOyB0aGVuCiAJICAgICMgV2Ugb25seSB1c2UgdGhpcyBjb2RlIGZvciBHTlUgbGRzIHRoYXQgc3VwcG9ydCAtLXdob2xlLWFyY2hpdmUuCi0JICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0tLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisJICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHdsLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICR3bC0tbm8td2hvbGUtYXJjaGl2ZScKIAkgIGVsc2UKIAkgICAgIyBFeHBvcnRlZCBzeW1ib2xzIGNhbiBiZSBwdWxsZWQgaW50byBzaGFyZWQgb2JqZWN0cyBmcm9tIGFyY2hpdmVzCiAJICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJGNvbnZlbmllbmNlJwogCSAgZmkKIAkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT15ZXMKIAkgICMgVGhpcyBpcyBzaW1pbGFyIHRvIGhvdyBBSVggdHJhZGl0aW9uYWxseSBidWlsZHMgaXRzIHNoYXJlZCBsaWJyYXJpZXMuCi0JICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0iXCRDQyAkc2hhcmVkX2ZsYWciJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICR7d2x9LWJub2VudHJ5ICRjb21waWxlcl9mbGFncyAke3dsfS1iRTokZXhwb3J0X3N5bWJvbHMke2FsbG93X3VuZGVmaW5lZF9mbGFnfX4kQVIgJEFSX0ZMQUdTICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lJHJlbGVhc2UuYSAkb3V0cHV0X29iamRpci8kc29uYW1lJworCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9IlwkQ0MgJHNoYXJlZF9mbGFnIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkd2wtYm5vZW50cnkgJGNvbXBpbGVyX2ZsYWdzICR3bC1iRTokZXhwb3J0X3N5bWJvbHMkYWxsb3dfdW5kZWZpbmVkX2ZsYWd+JEFSICRBUl9GTEFHUyAkb3V0cHV0X29iamRpci8kbGlibmFtZSRyZWxlYXNlLmEgJG91dHB1dF9vYmpkaXIvJHNvbmFtZScKIAlmaQogICAgICAgZmkKICAgICAgIDs7CkBAIC01MTEwLDcgKzUyMzIsNyBAQAogICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KICAgICAgIHBvd2VycGMpCiAgICAgICAgICAgICAjIHNlZSBjb21tZW50IGFib3V0IEFtaWdhT1M0IC5zbyBzdXBwb3J0Ci0gICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKICAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPScnCiAgICAgICAgIDs7CiAgICAgICBtNjhrKQpAQCAtNTE0MCwxNiArNTI2MiwxNyBAQAogCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCiAJbGliZXh0PWxpYgogCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgotCXNocmV4dF9jbWRzPSIuZGxsIgorCXNocmV4dF9jbWRzPS5kbGwKIAkjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCi0JX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzIC1XbCwtZGxsfmxpbmtuYW1lcz0nCi0JX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2lmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiA9IHhFWFBPUlRTOyB0aGVuCi0JICAgIHNlZCAtbiAtZSAncy9cXFxcXFxcKC4qXFxcXFxcXCkvLWxpbmtcXFwgLUVYUE9SVDpcXFxcXFxcMS8nIC1lICcxXFxcIXAnIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHA7Ci0JICBlbHNlCi0JICAgIHNlZCAtZSAncy9cXFxcXFxcKC4qXFxcXFxcXCkvLWxpbmtcXFwgLUVYUE9SVDpcXFxcXFxcMS8nIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHA7Ci0JICBmaX4KLQkgICRDQyAtbyAkdG9vbF9vdXRwdXRfb2JqZGlyJHNvbmFtZSAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYnMgIkAkdG9vbF9vdXRwdXRfb2JqZGlyJHNvbmFtZS5leHAiIC1XbCwtRExMLC1JTVBMSUI6IiR0b29sX291dHB1dF9vYmpkaXIkbGlibmFtZS5kbGwubGliIn4KLQkgIGxpbmtuYW1lcz0nCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzIC1XbCwtRExMLC1JTVBMSUI6IiR0b29sX291dHB1dF9vYmpkaXIkbGlibmFtZS5kbGwubGliIn5saW5rbmFtZXM9JworCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdpZiBfTFRfRExMX0RFRl9QKFskZXhwb3J0X3N5bWJvbHNdKTsgdGhlbgorICAgICAgICAgICAgY3AgIiRleHBvcnRfc3ltYm9scyIgIiRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmIjsKKyAgICAgICAgICAgIGVjaG8gIiR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lLmRlZiIgPiAiJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHAiOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICRTRUQgLWUgJ1wnJ3MvXi8tbGluayAtRVhQT1JUOi8nXCcnIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHA7CisgICAgICAgICAgZml+CisgICAgICAgICAgJENDIC1vICR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAiQCR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lLmV4cCIgLVdsLC1ETEwsLUlNUExJQjoiJHRvb2xfb3V0cHV0X29iamRpciRsaWJuYW1lLmRsbC5saWIifgorICAgICAgICAgIGxpbmtuYW1lcz0nCiAJIyBUaGUgbGlua2VyIHdpbGwgbm90IGF1dG9tYXRpY2FsbHkgYnVpbGQgYSBzdGF0aWMgbGliIGlmIHdlIGJ1aWxkIGEgRExMLgogCSMgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzLCAkMSk9J3RydWUnCiAJX0xUX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9eWVzCkBAIC01MTU4LDE4ICs1MjgxLDE4IEBACiAJIyBEb24ndCB1c2UgcmFubGliCiAJX0xUX1RBR1ZBUihvbGRfcG9zdGluc3RhbGxfY21kcywgJDEpPSdjaG1vZCA2NDQgJG9sZGxpYicKIAlfTFRfVEFHVkFSKHBvc3RsaW5rX2NtZHMsICQxKT0nbHRfb3V0cHV0ZmlsZT0iQE9VVFBVVEAifgotCSAgbHRfdG9vbF9vdXRwdXRmaWxlPSJAVE9PTF9PVVRQVVRAIn4KLQkgIGNhc2UgJGx0X291dHB1dGZpbGUgaW4KLQkgICAgKi5leGV8Ki5FWEUpIDs7Ci0JICAgICopCi0JICAgICAgbHRfb3V0cHV0ZmlsZT0iJGx0X291dHB1dGZpbGUuZXhlIgotCSAgICAgIGx0X3Rvb2xfb3V0cHV0ZmlsZT0iJGx0X3Rvb2xfb3V0cHV0ZmlsZS5leGUiCi0JICAgICAgOzsKLQkgIGVzYWN+Ci0JICBpZiB0ZXN0ICIkTUFOSUZFU1RfVE9PTCIgIT0gIjoiICYmIHRlc3QgLWYgIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsgdGhlbgotCSAgICAkTUFOSUZFU1RfVE9PTCAtbWFuaWZlc3QgIiRsdF90b29sX291dHB1dGZpbGUubWFuaWZlc3QiIC1vdXRwdXRyZXNvdXJjZToiJGx0X3Rvb2xfb3V0cHV0ZmlsZSIgfHwgZXhpdCAxOwotCSAgICAkUk0gIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsKLQkgIGZpJworICAgICAgICAgIGx0X3Rvb2xfb3V0cHV0ZmlsZT0iQFRPT0xfT1VUUFVUQCJ+CisgICAgICAgICAgY2FzZSAkbHRfb3V0cHV0ZmlsZSBpbgorICAgICAgICAgICAgKi5leGV8Ki5FWEUpIDs7CisgICAgICAgICAgICAqKQorICAgICAgICAgICAgICBsdF9vdXRwdXRmaWxlPSRsdF9vdXRwdXRmaWxlLmV4ZQorICAgICAgICAgICAgICBsdF90b29sX291dHB1dGZpbGU9JGx0X3Rvb2xfb3V0cHV0ZmlsZS5leGUKKyAgICAgICAgICAgICAgOzsKKyAgICAgICAgICBlc2FjfgorICAgICAgICAgIGlmIHRlc3QgOiAhPSAiJE1BTklGRVNUX1RPT0wiICYmIHRlc3QgLWYgIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsgdGhlbgorICAgICAgICAgICAgJE1BTklGRVNUX1RPT0wgLW1hbmlmZXN0ICIkbHRfdG9vbF9vdXRwdXRmaWxlLm1hbmlmZXN0IiAtb3V0cHV0cmVzb3VyY2U6IiRsdF90b29sX291dHB1dGZpbGUiIHx8IGV4aXQgMTsKKyAgICAgICAgICAgICRSTSAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOworICAgICAgICAgIGZpJwogCTs7CiAgICAgICAqKQogCSMgQXNzdW1lIE1TVkMgd3JhcHBlcgpAQCAtNTE3OCw3ICs1MzAxLDcgQEAKIAkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgogCWxpYmV4dD1saWIKIAkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KLQlzaHJleHRfY21kcz0iLmRsbCIKKwlzaHJleHRfY21kcz0uZGxsCiAJIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgogCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtbyAkbGliICRsaWJvYmpzICRjb21waWxlcl9mbGFncyBgZnVuY19lY2hvX2FsbCAiJGRlcGxpYnMiIHwgJFNFRCAnXCcncy8gLWxjJC8vJ1wnJ2AgLWxpbmsgLWRsbH5saW5rbmFtZXM9JwogCSMgVGhlIGxpbmtlciB3aWxsIGF1dG9tYXRpY2FsbHkgYnVpbGQgYSAubGliIGZpbGUgaWYgd2UgYnVpbGQgYSBETEwuCkBAIC01MjI4LDMzICs1MzUxLDMzIEBACiAgICAgICA7OwogCiAgICAgaHB1eDkqKQotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKyAgICAgIGlmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgJHBpY19mbGFnICR3bCtiICR3bCRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc350ZXN0ICJ4JG91dHB1dF9vYmpkaXIvJHNvbmFtZSIgPSAieCRsaWIiIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKICAgICAgIGVsc2UKLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kTEQgLWIgK2IgJGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kTEQgLWIgK2IgJGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFnc350ZXN0ICJ4JG91dHB1dF9vYmpkaXIvJHNvbmFtZSIgPSAieCRsaWIiIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKICAgICAgIGZpCi0gICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0rYiAke3dsfSRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsK2IgJHdsJGxpYmRpcicKICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCiAKICAgICAgICMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCiAgICAgICAjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcwotICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tRScKKyAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR3bC1FJwogICAgICAgOzsKIAogICAgIGhwdXgxMCopCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyAmJiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgIGlmIHRlc3QgeWVzLG5vID0gIiRHQ0MsJHdpdGhfZ251X2xkIjsgdGhlbgorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkd2wraCAkd2wkc29uYW1lICR3bCtiICR3bCRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKICAgICAgIGVsc2UKIAlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLWIgK2ggJHNvbmFtZSArYiAkaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwogICAgICAgZmkKLSAgICAgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgotCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfStiICR7d2x9JGxpYmRpcicKKyAgICAgIGlmIHRlc3Qgbm8gPSAiJHdpdGhfZ251X2xkIjsgdGhlbgorCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSckd2wrYiAkd2wkbGliZGlyJwogCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKIAlfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcwogCV9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlLCAkMSk9eWVzCi0JX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tRScKKwlfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPSckd2wtRScKIAkjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAogCSMgYnV0IGFzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgogCV9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcwpAQCAtNTI2MiwyNSArNTM4NSwyNSBAQAogICAgICAgOzsKIAogICAgIGhwdXgxMSopCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyAmJiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKyAgICAgIGlmIHRlc3QgeWVzLG5vID0gIiRHQ0MsJHdpdGhfZ251X2xkIjsgdGhlbgogCWNhc2UgJGhvc3RfY3B1IGluCiAJaHBwYSo2NCopCi0JICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR3bCtoICR3bCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCiAJICA7OwogCWlhNjQqKQotCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR3bCtoICR3bCRzb25hbWUgJHdsK25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwogCSAgOzsKIAkqKQotCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHdsK2ggJHdsJHNvbmFtZSAkd2wrYiAkd2wkaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCiAJICA7OwogCWVzYWMKICAgICAgIGVsc2UKIAljYXNlICRob3N0X2NwdSBpbgogCWhwcGEqNjQqKQotCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1iICR3bCtoICR3bCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCiAJICA7OwogCWlhNjQqKQotCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1iICR3bCtoICR3bCRzb25hbWUgJHdsK25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwogCSAgOzsKIAkqKQogCW00X2lmKCQxLCBbXSwgWwpAQCAtNTI4OCwxNCArNTQxMSwxNCBAQAogCSAgIyAoSFA5MjQ1My0wMSBBLjExLjAxLjIwIGRvZXNuJ3QsIEhQOTI0NTMtMDEgQi4xMS5YLjM1MTc1LTM1MTc2LkdQIGRvZXMpCiAJICBfTFRfTElOS0VSX09QVElPTihbaWYgJENDIHVuZGVyc3RhbmRzIC1iXSwKIAkgICAgX0xUX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX19iLCAkMSksIFstYl0sCi0JICAgIFtfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyddLAorCSAgICBbX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1iICR3bCtoICR3bCRzb25hbWUgJHdsK2IgJHdsJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJ10sCiAJICAgIFtfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLWIgK2ggJHNvbmFtZSArYiAkaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJ10pXSwKLQkgIFtfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyddKQorCSAgW19MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYiAkd2wraCAkd2wkc29uYW1lICR3bCtiICR3bCRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyddKQogCSAgOzsKIAllc2FjCiAgICAgICBmaQotICAgICAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCi0JX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9K2IgJHt3bH0kbGliZGlyJworICAgICAgaWYgdGVzdCBubyA9ICIkd2l0aF9nbnVfbGQiOyB0aGVuCisJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bCtiICR3bCRsaWJkaXInCiAJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgogCiAJY2FzZSAkaG9zdF9jcHUgaW4KQEAgLTUzMDYsNyArNTQyOSw3IEBACiAJKikKIAkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCiAJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPXllcwotCSAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tRScKKwkgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR3bC1FJwogCiAJICAjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAogCSAgIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCkBAIC01MzE3LDE2ICs1NDQwLDE2IEBACiAgICAgICA7OwogCiAgICAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0JX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworICAgICAgaWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHdsLXNldF92ZXJzaW9uICR3bCR2ZXJzdHJpbmciYCAkd2wtdXBkYXRlX3JlZ2lzdHJ5ICR3bCRvdXRwdXRfb2JqZGlyL3NvX2xvY2F0aW9ucyAtbyAkbGliJwogCSMgVHJ5IHRvIHVzZSB0aGUgLWV4cG9ydGVkX3N5bWJvbCBsZCBvcHRpb24sIGlmIGl0IGRvZXMgbm90CiAJIyB3b3JrLCBhc3N1bWUgdGhhdCAtZXhwb3J0c19maWxlIGRvZXMgbm90IHdvcmsgZWl0aGVyIGFuZAogCSMgaW1wbGljaXRseSBleHBvcnQgYWxsIHN5bWJvbHMuCiAJIyBUaGlzIHNob3VsZCBiZSB0aGUgc2FtZSBmb3IgYWxsIGxhbmd1YWdlcywgc28gbm8gcGVyLXRhZyBjYWNoZSB2YXJpYWJsZS4KIAlBQ19DQUNIRV9DSEVDSyhbd2hldGhlciB0aGUgJGhvc3Rfb3MgbGlua2VyIGFjY2VwdHMgLWV4cG9ydGVkX3N5bWJvbF0sCiAJICBbbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2xdLAotCSAgW3NhdmVfTERGTEFHUz0iJExERkxBR1MiCi0JICAgTERGTEFHUz0iJExERkxBR1MgLXNoYXJlZCAke3dsfS1leHBvcnRlZF9zeW1ib2wgJHt3bH1mb28gJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9L2Rldi9udWxsIgorCSAgW3NhdmVfTERGTEFHUz0kTERGTEFHUworCSAgIExERkxBR1M9IiRMREZMQUdTIC1zaGFyZWQgJHdsLWV4cG9ydGVkX3N5bWJvbCAke3dsfWZvbyAkd2wtdXBkYXRlX3JlZ2lzdHJ5ICR3bC9kZXYvbnVsbCIKIAkgICBBQ19MSU5LX0lGRUxTRSgKIAkgICAgIFtBQ19MQU5HX1NPVVJDRSgKIAkgICAgICAgIFtBQ19MQU5HX0NBU0UoW0NdLCBbW2ludCBmb28gKHZvaWQpIHsgcmV0dXJuIDA7IH1dXSwKQEAgLTUzMzksMTYgKzU0NjIsMTYgQEAKICAgICAgIGVuZF1dKV0pXSwKIAkgICAgICBbbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2w9eWVzXSwKIAkgICAgICBbbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2w9bm9dKQotICAgICAgICAgICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIl0pCi0JaWYgdGVzdCAiJGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sIiA9IHllczsgdGhlbgotICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zICR7d2x9LWV4cG9ydHNfZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgICAgICBMREZMQUdTPSRzYXZlX0xERkxBR1NdKQorCWlmIHRlc3QgeWVzID0gIiRsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCI7IHRoZW4KKyAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR3bC1zZXRfdmVyc2lvbiAkd2wkdmVyc3RyaW5nImAgJHdsLXVwZGF0ZV9yZWdpc3RyeSAkd2wkb3V0cHV0X29iamRpci9zb19sb2NhdGlvbnMgJHdsLWV4cG9ydHNfZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKIAlmaQogICAgICAgZWxzZQotCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwotCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLWV4cG9ydHNfZmlsZSAkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJG91dHB1dF9vYmpkaXIvc29fbG9jYXRpb25zIC1vICRsaWInCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAkb3V0cHV0X29iamRpci9zb19sb2NhdGlvbnMgLWV4cG9ydHNfZmlsZSAkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKICAgICAgIGZpCiAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9J25vJwotICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSckd2wtcnBhdGggJHdsJGxpYmRpcicKICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKICAgICAgIF9MVF9UQUdWQVIoaW5oZXJpdF9ycGF0aCwgJDEpPXllcwogICAgICAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCkBAIC01MzY4LDcgKzU0OTEsNyBAQAogICAgIG5ld3NvczYpCiAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCiAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcwotICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSckd2wtcnBhdGggJHdsJGxpYmRpcicKICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCiAgICAgICA7OwpAQCAtNTM3NiwyNyArNTQ5OSwxOSBAQAogICAgICpudG8qIHwgKnFueCopCiAgICAgICA7OwogCi0gICAgb3BlbmJzZCopCisgICAgb3BlbmJzZCogfCBiaXRyaWcqKQogICAgICAgaWYgdGVzdCAtZiAvdXNyL2xpYmV4ZWMvbGQuc287IHRoZW4KIAlfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcwogCV9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCiAJX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT15ZXMKLQlpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCisJaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfX2AiOyB0aGVuCiAJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUsJGV4cG9ydF9zeW1ib2xzJwotCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoLCRsaWJkaXInCi0JICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1FJworCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtcmV0YWluLXN5bWJvbHMtZmlsZSwkZXhwb3J0X3N5bWJvbHMnCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsLXJwYXRoLCRsaWJkaXInCisJICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPSckd2wtRScKIAllbHNlCi0JICBjYXNlICRob3N0X29zIGluCi0JICAgb3BlbmJzZFtbMDFdXS4qIHwgb3BlbmJzZDIuW1swLTddXSB8IG9wZW5ic2QyLltbMC03XV0uKikKLQkgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0JICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLVIkbGliZGlyJwotCSAgICAgOzsKLQkgICAqKQotCSAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoLCRsaWJkaXInCi0JICAgICA7OwotCSAgZXNhYworCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bC1ycGF0aCwkbGliZGlyJwogCWZpCiAgICAgICBlbHNlCiAJX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwpAQCAtNTQxMiwyOCArNTUyNywyOCBAQAogICAgICAgOzsKIAogICAgIG9zZjMqKQotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLQlfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJwotCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgICAgICBpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgorCV9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR3bC1leHBlY3RfdW5yZXNvbHZlZCAkd2xcKicKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCRhbGxvd191bmRlZmluZWRfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIkd2wtc2V0X3ZlcnNpb24gJHdsJHZlcnN0cmluZyJgICR3bC11cGRhdGVfcmVnaXN0cnkgJHdsJG91dHB1dF9vYmpkaXIvc29fbG9jYXRpb25zIC1vICRsaWInCiAgICAgICBlbHNlCiAJX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJwotCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICRvdXRwdXRfb2JqZGlyL3NvX2xvY2F0aW9ucyAtbyAkbGliJwogICAgICAgZmkKICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT0nbm8nCi0gICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bC1ycGF0aCAkd2wkbGliZGlyJwogICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgogICAgICAgOzsKIAogICAgIG9zZjQqIHwgb3NmNSopCSMgYXMgb3NmMyogd2l0aCB0aGUgYWRkaXRpb24gb2YgLW1zeW0gZmxhZwotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLQlfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJwotCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0JX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgIGlmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCisJX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgJHdsLWV4cGVjdF91bnJlc29sdmVkICR3bFwqJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJGFsbG93X3VuZGVmaW5lZF9mbGFnICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLW1zeW0gJHdsLXNvbmFtZSAkd2wkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIkd2wtc2V0X3ZlcnNpb24gJHdsJHZlcnN0cmluZyJgICR3bC11cGRhdGVfcmVnaXN0cnkgJHdsJG91dHB1dF9vYmpkaXIvc29fbG9jYXRpb25zIC1vICRsaWInCisJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bC1ycGF0aCAkd2wkbGliZGlyJwogICAgICAgZWxzZQogCV9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbXN5bSAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJGFsbG93X3VuZGVmaW5lZF9mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbXN5bSAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAkb3V0cHV0X29iamRpci9zb19sb2NhdGlvbnMgLW8gJGxpYicKIAlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZm9yIGkgaW4gYGNhdCAkZXhwb3J0X3N5bWJvbHNgOyBkbyBwcmludGYgIiVzICVzXFxuIiAtZXhwb3J0ZWRfc3ltYm9sICJcJGkiID4+ICRsaWIuZXhwOyBkb25lOyBwcmludGYgIiVzXFxuIiAiLWhpZGRlbiI+PiAkbGliLmV4cH4KLQkkQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICR7d2x9LWlucHV0ICR7d2x9JGxpYi5leHAgJGNvbXBpbGVyX2ZsYWdzICRsaWJvYmpzICRkZXBsaWJzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgJEVDSE8gIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGlifiRSTSAkbGliLmV4cCcKKyAgICAgICAgICAkQ0MgLXNoYXJlZCRhbGxvd191bmRlZmluZWRfZmxhZyAkd2wtaW5wdXQgJHdsJGxpYi5leHAgJGNvbXBpbGVyX2ZsYWdzICRsaWJvYmpzICRkZXBsaWJzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgJEVDSE8gIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAkb3V0cHV0X29iamRpci9zb19sb2NhdGlvbnMgLW8gJGxpYn4kUk0gJGxpYi5leHAnCiAKIAkjIEJvdGggYyBhbmQgY3h4IGNvbXBpbGVyIHN1cHBvcnQgLXJwYXRoIGRpcmVjdGx5CiAJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1ycGF0aCAkbGliZGlyJwpAQCAtNTQ0NCwyNCArNTU1OSwyNCBAQAogCiAgICAgc29sYXJpcyopCiAgICAgICBfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAteiBkZWZzJwotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLQl3bGFyYz0nJHt3bH0nCi0JX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgaWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KKwl3bGFyYz0nJHdsJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkd2wteiAke3dsfXRleHQgJHdsLWggJHdsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKIAlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgotCSAgJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LU0gJHt3bH0kbGliLmV4cCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisgICAgICAgICAgJENDIC1zaGFyZWQgJHBpY19mbGFnICR3bC16ICR7d2x9dGV4dCAkd2wtTSAkd2wkbGliLmV4cCAkd2wtaCAkd2wkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKICAgICAgIGVsc2UKIAljYXNlIGAkQ0MgLVYgMj4mMWAgaW4KIAkqIkNvbXBpbGVycyA1LjAiKikKIAkgIHdsYXJjPScnCi0JICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyRhbGxvd191bmRlZmluZWRfZmxhZyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKIAkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+Ci0JICAkTEQgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtTSAkbGliLmV4cCAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFnc34kUk0gJGxpYi5leHAnCisgICAgICAgICAgICAkTEQgLUckYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLU0gJGxpYi5leHAgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3N+JFJNICRsaWIuZXhwJwogCSAgOzsKIAkqKQotCSAgd2xhcmM9JyR7d2x9JwotCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIHdsYXJjPSckd2wnCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUckYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKIAkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+Ci0JICAkQ0MgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtTSAkbGliLmV4cCAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKyAgICAgICAgICAgICRDQyAtRyRhbGxvd191bmRlZmluZWRfZmxhZyAtTSAkbGliLmV4cCAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKIAkgIDs7CiAJZXNhYwogICAgICAgZmkKQEAgLTU0NzEsMTEgKzU1ODYsMTEgQEAKICAgICAgIHNvbGFyaXMyLltbMC01XV0gfCBzb2xhcmlzMi5bWzAtNV1dLiopIDs7CiAgICAgICAqKQogCSMgVGhlIGNvbXBpbGVyIGRyaXZlciB3aWxsIGNvbWJpbmUgYW5kIHJlb3JkZXIgbGlua2VyIG9wdGlvbnMsCi0JIyBidXQgdW5kZXJzdGFuZHMgYC16IGxpbmtlcl9mbGFnJy4gIEdDQyBkaXNjYXJkcyBpdCB3aXRob3V0IGAkd2wnLAorCSMgYnV0IHVuZGVyc3RhbmRzICcteiBsaW5rZXJfZmxhZycuICBHQ0MgZGlzY2FyZHMgaXQgd2l0aG91dCAnJHdsJywKIAkjIGJ1dCBpcyBjYXJlZnVsIGVub3VnaCBub3QgdG8gcmVvcmRlci4KIAkjIFN1cHBvcnRlZCBzaW5jZSBTb2xhcmlzIDIuNiAobWF5YmUgMi41LjE/KQotCWlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0JICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXogJHt3bH1hbGxleHRyYWN0JGNvbnZlbmllbmNlICR7d2x9LXogJHt3bH1kZWZhdWx0ZXh0cmFjdCcKKwlpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgorCSAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSckd2wteiAke3dsfWFsbGV4dHJhY3QkY29udmVuaWVuY2UgJHdsLXogJHt3bH1kZWZhdWx0ZXh0cmFjdCcKIAllbHNlCiAJICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9Jy16IGFsbGV4dHJhY3QkY29udmVuaWVuY2UgLXogZGVmYXVsdGV4dHJhY3QnCiAJZmkKQEAgLTU0ODUsMTAgKzU2MDAsMTAgQEAKICAgICAgIDs7CiAKICAgICBzdW5vczQqKQotICAgICAgaWYgdGVzdCAieCRob3N0X3ZlbmRvciIgPSB4c2VxdWVudDsgdGhlbgorICAgICAgaWYgdGVzdCBzZXF1ZW50ID0gIiRob3N0X3ZlbmRvciI7IHRoZW4KIAkjIFVzZSAkQ0MgdG8gbGluayB1bmRlciBzZXF1ZW50LCBiZWNhdXNlIGl0IHRocm93cyBpbiBzb21lIGV4dHJhIC5vCiAJIyBmaWxlcyB0aGF0IG1ha2UgLmluaXQgYW5kIC5maW5pIHNlY3Rpb25zIHdvcmsuCi0JX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HICR7d2x9LWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcgJHdsLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKICAgICAgIGVsc2UKIAlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLWFzc2VydCBwdXJlLXRleHQgLUJzdGF0aWMgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwogICAgICAgZmkKQEAgLTU1MzcsNDMgKzU2NTIsNDMgQEAKICAgICAgIDs7CiAKICAgICBzeXN2NCp1dzIqIHwgc3lzdjVPcGVuVU5JWCogfCBzeXN2NVVuaXhXYXJlNy5bWzAxXV0uW1sxMF1dKiB8IHVuaXh3YXJlNyogfCBzY28zLjJ2NS4wLltbMDI0XV0qKQotICAgICAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScke3dsfS16LHRleHQnCisgICAgICBfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyR3bC16LHRleHQnCiAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCiAgICAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCiAKLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0JX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR3bC1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR3bC1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwogICAgICAgZWxzZQotCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtRyAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HICR3bC1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtRyAkd2wtQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHdsLWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKICAgICAgIGZpCiAgICAgICA7OwogCiAgICAgc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KikKLSAgICAgICMgTm90ZTogV2UgY2FuIE5PVCB1c2UgLXogZGVmcyBhcyB3ZSBtaWdodCBkZXNpcmUsIGJlY2F1c2Ugd2UgZG8gbm90CisgICAgICAjIE5vdGU6IFdlIENBTk5PVCB1c2UgLXogZGVmcyBhcyB3ZSBtaWdodCBkZXNpcmUsIGJlY2F1c2Ugd2UgZG8gbm90CiAgICAgICAjIGxpbmsgd2l0aCAtbGMsIGFuZCB0aGF0IHdvdWxkIGNhdXNlIGFueSBzeW1ib2xzIHVzZWQgZnJvbSBsaWJjIHRvCiAgICAgICAjIGFsd2F5cyBiZSB1bnJlc29sdmVkLCB3aGljaCBtZWFucyBqdXN0IGFib3V0IG5vIGxpYnJhcnkgd291bGQKICAgICAgICMgZXZlciBsaW5rIGNvcnJlY3RseS4gIElmIHdlJ3JlIG5vdCB1c2luZyBHTlUgbGQgd2UgdXNlIC16IHRleHQKICAgICAgICMgdGhvdWdoLCB3aGljaCBkb2VzIGNhdGNoIHNvbWUgYmFkIHN5bWJvbHMgYnV0IGlzbid0IGFzIGhlYXZ5LWhhbmRlZAogICAgICAgIyBhcyAteiBkZWZzLgotICAgICAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScke3dsfS16LHRleHQnCi0gICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyR7d2x9LXosbm9kZWZzJworICAgICAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPSckd2wteix0ZXh0JworICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPSckd2wteixub2RlZnMnCiAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0gICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tUiwkbGliZGlyJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bC1SLCRsaWJkaXInCiAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0nOicKICAgICAgIF9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcwotICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tQmV4cG9ydCcKKyAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR3bC1CZXhwb3J0JwogICAgICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJwogCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgaWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkd2wtQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHdsLWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKICAgICAgIGVsc2UKLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLUcgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLUcgJHdsLUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR3bC1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCiAgICAgICBmaQogICAgICAgOzsKIApAQCAtNTU4OCwxNyArNTcwMywxNyBAQAogICAgICAgOzsKICAgICBlc2FjCiAKLSAgICBpZiB0ZXN0IHgkaG9zdF92ZW5kb3IgPSB4c25pOyB0aGVuCisgICAgaWYgdGVzdCBzbmkgPSAiJGhvc3RfdmVuZG9yIjsgdGhlbgogICAgICAgY2FzZSAkaG9zdCBpbgogICAgICAgc3lzdjQgfCBzeXN2NC4ydXcyKiB8IHN5c3Y0LjMqIHwgc3lzdjUqKQotCV9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUJsYXJnZWR5bnN5bScKKwlfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPSckd2wtQmxhcmdlZHluc3ltJwogCTs7CiAgICAgICBlc2FjCiAgICAgZmkKICAgZmkKIF0pCiBBQ19NU0dfUkVTVUxUKFskX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKV0pCi10ZXN0ICIkX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKSIgPSBubyAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCit0ZXN0IG5vID0gIiRfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpIiAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCiAKIF9MVF9UQUdWQVIod2l0aF9nbnVfbGQsICQxKT0kd2l0aF9nbnVfbGQKIApAQCAtNTYxNSw3ICs1NzMwLDcgQEAKICAgIyBBc3N1bWUgLWxjIHNob3VsZCBiZSBhZGRlZAogICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9eWVzCiAKLSAgaWYgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzICYmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgIGlmIHRlc3QgeWVzLHllcyA9ICIkR0NDLCRlbmFibGVfc2hhcmVkIjsgdGhlbgogICAgIGNhc2UgJF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSkgaW4KICAgICAqJ34nKikKICAgICAgICMgRklYTUU6IHdlIG1heSBoYXZlIHRvIGRlYWwgd2l0aCBtdWx0aS1jb21tYW5kIHNlcXVlbmNlcy4KQEAgLTU2OTUsMTIgKzU4MTAsMTIgQEAKIF9MVF9UQUdERUNMKFtdLCBbaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl0sIFsxXSwKICAgICBbV2hldGhlciB3ZSBuZWVkIGEgc2luZ2xlICItcnBhdGgiIGZsYWcgd2l0aCBhIHNlcGFyYXRlZCBhcmd1bWVudF0pCiBfTFRfVEFHREVDTChbXSwgW2hhcmRjb2RlX2RpcmVjdF0sIFswXSwKLSAgICBbU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIERJUi9saWJOQU1FJHtzaGFyZWRfZXh0fSBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMKKyAgICBbU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIERJUi9saWJOQU1FJHNoYXJlZF9leHQgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzCiAgICAgRElSIGludG8gdGhlIHJlc3VsdGluZyBiaW5hcnldKQogX0xUX1RBR0RFQ0woW10sIFtoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGVdLCBbMF0sCi0gICAgW1NldCB0byAieWVzIiBpZiB1c2luZyBESVIvbGliTkFNRSR7c2hhcmVkX2V4dH0gZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzCisgICAgW1NldCB0byAieWVzIiBpZiB1c2luZyBESVIvbGliTkFNRSRzaGFyZWRfZXh0IGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcwogICAgIERJUiBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5IGFuZCB0aGUgcmVzdWx0aW5nIGxpYnJhcnkgZGVwZW5kZW5jeSBpcwotICAgICJhYnNvbHV0ZSIsIGkuZSBpbXBvc3NpYmxlIHRvIGNoYW5nZSBieSBzZXR0aW5nICR7c2hsaWJwYXRoX3Zhcn0gaWYgdGhlCisgICAgImFic29sdXRlIiwgaS5lIGltcG9zc2libGUgdG8gY2hhbmdlIGJ5IHNldHRpbmcgJHNobGlicGF0aF92YXIgaWYgdGhlCiAgICAgbGlicmFyeSBpcyByZWxvY2F0ZWRdKQogX0xUX1RBR0RFQ0woW10sIFtoYXJkY29kZV9taW51c19MXSwgWzBdLAogICAgIFtTZXQgdG8gInllcyIgaWYgdXNpbmcgdGhlIC1MRElSIGZsYWcgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUgpAQCAtNTc0MSwxMCArNTg1NiwxMCBAQAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgRW5zdXJlIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGZvciBhIEMgY29tcGlsZXIgYXJlIHN1aXRhYmx5CiAjIGRlZmluZWQuICBUaGVzZSB2YXJpYWJsZXMgYXJlIHN1YnNlcXVlbnRseSB1c2VkIGJ5IF9MVF9DT05GSUcgdG8gd3JpdGUKLSMgdGhlIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gdG8gYGxpYnRvb2wnLgorIyB0aGUgY29tcGlsZXIgY29uZmlndXJhdGlvbiB0byAnbGlidG9vbCcuCiBtNF9kZWZ1bihbX0xUX0xBTkdfQ19DT05GSUddLAogW200X3JlcXVpcmUoW19MVF9ERUNMX0VHUkVQXSlkbmwKLWx0X3NhdmVfQ0M9IiRDQyIKK2x0X3NhdmVfQ0M9JENDCiBBQ19MQU5HX1BVU0goQykKIAogIyBTb3VyY2UgZmlsZSBleHRlbnNpb24gZm9yIEMgdGVzdCBzb3VyY2VzLgpAQCAtNTc4NCwxOCArNTg5OSwxOCBAQAogICBMVF9TWVNfRExPUEVOX1NFTEYKICAgX0xUX0NNRF9TVFJJUExJQgogCi0gICMgUmVwb3J0IHdoaWNoIGxpYnJhcnkgdHlwZXMgd2lsbCBhY3R1YWxseSBiZSBidWlsdAorICAjIFJlcG9ydCB3aGF0IGxpYnJhcnkgdHlwZXMgd2lsbCBhY3R1YWxseSBiZSBidWlsdAogICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGxpYnRvb2wgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllc10pCiAgIEFDX01TR19SRVNVTFQoWyRjYW5fYnVpbGRfc2hhcmVkXSkKIAogICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllc10pCi0gIHRlc3QgIiRjYW5fYnVpbGRfc2hhcmVkIiA9ICJubyIgJiYgZW5hYmxlX3NoYXJlZD1ubworICB0ZXN0IG5vID0gIiRjYW5fYnVpbGRfc2hhcmVkIiAmJiBlbmFibGVfc2hhcmVkPW5vCiAKICAgIyBPbiBBSVgsIHNoYXJlZCBsaWJyYXJpZXMgYW5kIHN0YXRpYyBsaWJyYXJpZXMgdXNlIHRoZSBzYW1lIG5hbWVzcGFjZSwgYW5kCiAgICMgYXJlIGFsbCBidWlsdCBmcm9tIFBJQy4KICAgY2FzZSAkaG9zdF9vcyBpbgogICBhaXgzKikKLSAgICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgZW5hYmxlX3N0YXRpYz1ubworICAgIHRlc3QgeWVzID0gIiRlbmFibGVfc2hhcmVkIiAmJiBlbmFibGVfc3RhdGljPW5vCiAgICAgaWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KICAgICAgIGFyY2hpdmVfY21kcz0iJGFyY2hpdmVfY21kc35cJFJBTkxJQiBcJGxpYiIKICAgICAgIHBvc3RpbnN0YWxsX2NtZHM9JyRSQU5MSUIgJGxpYicKQEAgLTU4MDMsOCArNTkxOCw4IEBACiAgICAgOzsKIAogICBhaXhbWzQtOV1dKikKLSAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiICE9IGlhNjQgJiYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0gbm8gOyB0aGVuCi0gICAgICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgZW5hYmxlX3N0YXRpYz1ubworICAgIGlmIHRlc3QgaWE2NCAhPSAiJGhvc3RfY3B1IiAmJiB0ZXN0IG5vID0gIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIjsgdGhlbgorICAgICAgdGVzdCB5ZXMgPSAiJGVuYWJsZV9zaGFyZWQiICYmIGVuYWJsZV9zdGF0aWM9bm8KICAgICBmaQogICAgIDs7CiAgIGVzYWMKQEAgLTU4MTIsMTMgKzU5MjcsMTMgQEAKIAogICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllc10pCiAgICMgTWFrZSBzdXJlIGVpdGhlciBlbmFibGVfc2hhcmVkIG9yIGVuYWJsZV9zdGF0aWMgaXMgeWVzLgotICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgfHwgZW5hYmxlX3N0YXRpYz15ZXMKKyAgdGVzdCB5ZXMgPSAiJGVuYWJsZV9zaGFyZWQiIHx8IGVuYWJsZV9zdGF0aWM9eWVzCiAgIEFDX01TR19SRVNVTFQoWyRlbmFibGVfc3RhdGljXSkKIAogICBfTFRfQ09ORklHKCQxKQogZmkKIEFDX0xBTkdfUE9QCi1DQz0iJGx0X3NhdmVfQ0MiCitDQz0kbHRfc2F2ZV9DQwogXSkjIF9MVF9MQU5HX0NfQ09ORklHCiAKIApAQCAtNTgyNiwxNCArNTk0MSwxNCBAQAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBFbnN1cmUgdGhhdCB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgZm9yIGEgQysrIGNvbXBpbGVyIGFyZSBzdWl0YWJseQogIyBkZWZpbmVkLiAgVGhlc2UgdmFyaWFibGVzIGFyZSBzdWJzZXF1ZW50bHkgdXNlZCBieSBfTFRfQ09ORklHIHRvIHdyaXRlCi0jIHRoZSBjb21waWxlciBjb25maWd1cmF0aW9uIHRvIGBsaWJ0b29sJy4KKyMgdGhlIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gdG8gJ2xpYnRvb2wnLgogbTRfZGVmdW4oW19MVF9MQU5HX0NYWF9DT05GSUddLAogW200X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKWRubAogbTRfcmVxdWlyZShbX0xUX0RFQ0xfRUdSRVBdKWRubAogbTRfcmVxdWlyZShbX0xUX1BBVEhfTUFOSUZFU1RfVE9PTF0pZG5sCi1pZiB0ZXN0IC1uICIkQ1hYIiAmJiAoIHRlc3QgIlgkQ1hYIiAhPSAiWG5vIiAmJgotICAgICggKHRlc3QgIlgkQ1hYIiA9ICJYZysrIiAmJiBgZysrIC12ID4vZGV2L251bGwgMj4mMWAgKSB8fAotICAgICh0ZXN0ICJYJENYWCIgIT0gIlhnKysiKSkpIDsgdGhlbgoraWYgdGVzdCAtbiAiJENYWCIgJiYgKCB0ZXN0IG5vICE9ICIkQ1hYIiAmJgorICAgICggKHRlc3QgZysrID0gIiRDWFgiICYmIGBnKysgLXYgPi9kZXYvbnVsbCAyPiYxYCApIHx8CisgICAgKHRlc3QgZysrICE9ICIkQ1hYIikpKTsgdGhlbgogICBBQ19QUk9HX0NYWENQUAogZWxzZQogICBfbHRfY2F1Z2h0X0NYWF9lcnJvcj15ZXMKQEAgLTU4NzUsNyArNTk5MCw3IEBACiAjIHRoZSBDWFggY29tcGlsZXIgaXNuJ3Qgd29ya2luZy4gIFNvbWUgdmFyaWFibGVzIChsaWtlIGVuYWJsZV9zaGFyZWQpCiAjIGFyZSBjdXJyZW50bHkgYXNzdW1lZCB0byBhcHBseSB0byBhbGwgY29tcGlsZXJzIG9uIHRoaXMgcGxhdGZvcm0sCiAjIGFuZCB3aWxsIGJlIGNvcnJ1cHRlZCBieSBzZXR0aW5nIHRoZW0gYmFzZWQgb24gYSBub24td29ya2luZyBjb21waWxlci4KLWlmIHRlc3QgIiRfbHRfY2F1Z2h0X0NYWF9lcnJvciIgIT0geWVzOyB0aGVuCitpZiB0ZXN0IHllcyAhPSAiJF9sdF9jYXVnaHRfQ1hYX2Vycm9yIjsgdGhlbgogICAjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cwogICBsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9ImludCBzb21lX3ZhcmlhYmxlID0gMDsiCiAKQEAgLTU5MTcsMzUgKzYwMzIsMzUgQEAKICAgaWYgdGVzdCAtbiAiJGNvbXBpbGVyIjsgdGhlbgogICAgICMgV2UgZG9uJ3Qgd2FudCAtZm5vLWV4Y2VwdGlvbiB3aGVuIGNvbXBpbGluZyBDKysgY29kZSwgc28gc2V0IHRoZQogICAgICMgbm9fYnVpbHRpbl9mbGFnIHNlcGFyYXRlbHkKLSAgICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorICAgIGlmIHRlc3QgeWVzID0gIiRHWFgiOyB0aGVuCiAgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSk9JyAtZm5vLWJ1aWx0aW4nCiAgICAgZWxzZQogICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpPQogICAgIGZpCiAKLSAgICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorICAgIGlmIHRlc3QgeWVzID0gIiRHWFgiOyB0aGVuCiAgICAgICAjIFNldCB1cCBkZWZhdWx0IEdOVSBDKysgY29uZmlndXJhdGlvbgogCiAgICAgICBMVF9QQVRIX0xECiAKICAgICAgICMgQ2hlY2sgaWYgR05VIEMrKyB1c2VzIEdOVSBsZCBhcyB0aGUgdW5kZXJseWluZyBsaW5rZXIsIHNpbmNlIHRoZQogICAgICAgIyBhcmNoaXZpbmcgY29tbWFuZHMgYmVsb3cgYXNzdW1lIHRoYXQgR05VIGxkIGlzIGJlaW5nIHVzZWQuCi0gICAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCi0gICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAkcGljX2ZsYWcgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0gICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgJHBpY19mbGFnIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgaWYgdGVzdCB5ZXMgPSAiJHdpdGhfZ251X2xkIjsgdGhlbgorICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgJHBpY19mbGFnIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKyAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAkcGljX2ZsYWcgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAkd2wtcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKIAotICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJwotICAgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tZXhwb3J0LWR5bmFtaWMnCisgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSckd2wtcnBhdGggJHdsJGxpYmRpcicKKyAgICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHdsLS1leHBvcnQtZHluYW1pYycKIAogICAgICAgICAjIElmIGFyY2hpdmVfY21kcyBydW5zIExELCBub3QgQ0MsIHdsYXJjIHNob3VsZCBiZSBlbXB0eQogICAgICAgICAjIFhYWCBJIHRoaW5rIHdsYXJjIGNhbiBiZSBlbGltaW5hdGVkIGluIGx0Y2YtY3h4LCBidXQgSSBuZWVkIHRvCiAgICAgICAgICMgICAgIGludmVzdGlnYXRlIGl0IGEgbGl0dGxlIGJpdCBtb3JlLiAoTU0pCi0gICAgICAgIHdsYXJjPScke3dsfScKKyAgICAgICAgd2xhcmM9JyR3bCcKIAogICAgICAgICAjIGFuY2llbnQgR05VIGxkIGRpZG4ndCBzdXBwb3J0IC0td2hvbGUtYXJjaGl2ZSBldC4gYWwuCiAgICAgICAgIGlmIGV2YWwgImAkQ0MgLXByaW50LXByb2ctbmFtZT1sZGAgLS1oZWxwIDI+JjEiIHwKIAkgICRHUkVQICduby13aG9sZS1hcmNoaXZlJyA+IC9kZXYvbnVsbDsgdGhlbgotICAgICAgICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0iJHdsYXJjIictLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJyIkd2xhcmMiJy0tbm8td2hvbGUtYXJjaGl2ZScKKyAgICAgICAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JHdsYXJjJy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAnJHdsYXJjJy0tbm8td2hvbGUtYXJjaGl2ZScKICAgICAgICAgZWxzZQogICAgICAgICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0KICAgICAgICAgZmkKQEAgLTU5ODEsMTIgKzYwOTYsMTIgQEAKICAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwogICAgICAgICA7OwogICAgICAgYWl4W1s0LTldXSopCi0gICAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisgICAgICAgIGlmIHRlc3QgaWE2NCA9ICIkaG9zdF9jcHUiOyB0aGVuCiAgICAgICAgICAgIyBPbiBJQTY0LCB0aGUgbGlua2VyIGRvZXMgcnVuIHRpbWUgbGlua2luZyBieSBkZWZhdWx0LCBzbyB3ZSBkb24ndAogICAgICAgICAgICMgaGF2ZSB0byBkbyBhbnl0aGluZyBzcGVjaWFsLgogICAgICAgICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KICAgICAgICAgICBleHBfc3ltX2ZsYWc9Jy1CZXhwb3J0JwotICAgICAgICAgIG5vX2VudHJ5X2ZsYWc9IiIKKyAgICAgICAgICBub19lbnRyeV9mbGFnPQogICAgICAgICBlbHNlCiAgICAgICAgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz1ubwogCkBAIC02MDIwLDEzICs2MTM1LDEzIEBACiAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlLCAkMSk9eWVzCiAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPSc6JwogICAgICAgICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKLSAgICAgICAgX0xUX1RBR1ZBUihmaWxlX2xpc3Rfc3BlYywgJDEpPScke3dsfS1mLCcKKyAgICAgICAgX0xUX1RBR1ZBUihmaWxlX2xpc3Rfc3BlYywgJDEpPSckd2wtZiwnCiAKLSAgICAgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKyAgICAgICAgaWYgdGVzdCB5ZXMgPSAiJEdYWCI7IHRoZW4KICAgICAgICAgICBjYXNlICRob3N0X29zIGluIGFpeDQuW1swMTJdXXxhaXg0LltbMDEyXV0uKikKICAgICAgICAgICAjIFdlIG9ubHkgd2FudCB0byBkbyB0aGlzIG9uIEFJWCA0LjIgYW5kIGxvd2VyLCB0aGUgY2hlY2sKICAgICAgICAgICAjIGJlbG93IGZvciBicm9rZW4gY29sbGVjdDIgZG9lc24ndCB3b3JrIHVuZGVyIDQuMysKLQkgIGNvbGxlY3QybmFtZT1gJHtDQ30gLXByaW50LXByb2ctbmFtZT1jb2xsZWN0MmAKKwkgIGNvbGxlY3QybmFtZT1gJENDIC1wcmludC1wcm9nLW5hbWU9Y29sbGVjdDJgCiAJICBpZiB0ZXN0IC1mICIkY29sbGVjdDJuYW1lIiAmJgogCSAgICAgc3RyaW5ncyAiJGNvbGxlY3QybmFtZSIgfCAkR1JFUCByZXNvbHZlX2xpYl9uYW1lID4vZGV2L251bGwKIAkgIHRoZW4KQEAgLTYwNDQsNTYgKzYxNTksNTYgQEAKIAkgIGZpCiAgICAgICAgICAgZXNhYwogICAgICAgICAgIHNoYXJlZF9mbGFnPSctc2hhcmVkJwotCSAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCi0JICAgIHNoYXJlZF9mbGFnPSIkc2hhcmVkX2ZsYWcgIicke3dsfS1HJworCSAgaWYgdGVzdCB5ZXMgPSAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciOyB0aGVuCisJICAgIHNoYXJlZF9mbGFnPSRzaGFyZWRfZmxhZycgJHdsLUcnCiAJICBmaQogICAgICAgICBlbHNlCiAgICAgICAgICAgIyBub3QgdXNpbmcgZ2NjCi0gICAgICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKyAgICAgICAgICBpZiB0ZXN0IGlhNjQgPSAiJGhvc3RfY3B1IjsgdGhlbgogCSAgIyBWaXN1YWxBZ2UgQysrLCBWZXJzaW9uIDUuNSBmb3IgQUlYIDVMIGZvciBJQS02NCwgQmV0YSAzIFJlbGVhc2UKIAkgICMgY2hva2VzIG9uIC1XbCwtRy4gVGhlIGZvbGxvd2luZyBsaW5lIGlzIGNvcnJlY3Q6CiAJICBzaGFyZWRfZmxhZz0nLUcnCiAgICAgICAgICAgZWxzZQotCSAgICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KLQkgICAgICBzaGFyZWRfZmxhZz0nJHt3bH0tRycKKwkgICAgaWYgdGVzdCB5ZXMgPSAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciOyB0aGVuCisJICAgICAgc2hhcmVkX2ZsYWc9JyR3bC1HJwogCSAgICBlbHNlCi0JICAgICAgc2hhcmVkX2ZsYWc9JyR7d2x9LWJNOlNSRScKKwkgICAgICBzaGFyZWRfZmxhZz0nJHdsLWJNOlNSRScKIAkgICAgZmkKICAgICAgICAgICBmaQogICAgICAgICBmaQogCi0gICAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LWJleHBhbGwnCisgICAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR3bC1iZXhwYWxsJwogICAgICAgICAjIEl0IHNlZW1zIHRoYXQgLWJleHBhbGwgZG9lcyBub3QgZXhwb3J0IHN5bWJvbHMgYmVnaW5uaW5nIHdpdGgKICAgICAgICAgIyB1bmRlcnNjb3JlIChfKSwgc28gaXQgaXMgYmV0dGVyIHRvIGdlbmVyYXRlIGEgbGlzdCBvZiBzeW1ib2xzIHRvCiAJIyBleHBvcnQuCiAgICAgICAgIF9MVF9UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9eWVzCi0gICAgICAgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgorICAgICAgICBpZiB0ZXN0IHllcyA9ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyI7IHRoZW4KICAgICAgICAgICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW50aW1lIGxvYWRpbmcgZmxhZ3MgKC1icnRsKSwKICAgICAgICAgICAjIC1iZXJvayB3aWxsIGxpbmsgd2l0aG91dCBlcnJvciwgYnV0IG1heSBwcm9kdWNlIGEgYnJva2VuIGxpYnJhcnkuCiAgICAgICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPSctYmVyb2snCiAgICAgICAgICAgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuIGVtcHR5CiAgICAgICAgICAgIyBleGVjdXRhYmxlLgogICAgICAgICAgIF9MVF9TWVNfTU9EVUxFX1BBVEhfQUlYKFskMV0pCi0gICAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisgICAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bC1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgogCi0gICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgYGlmIHRlc3QgIngke2FsbG93X3VuZGVmaW5lZF9mbGFnfSIgIT0gIngiOyB0aGVuIGZ1bmNfZWNob19hbGwgIiR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30iOyBlbHNlIDo7IGZpYCAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyAkc2hhcmVkX2ZsYWciCisgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICR3bCckbm9fZW50cnlfZmxhZycgJGNvbXBpbGVyX2ZsYWdzIGBpZiB0ZXN0IC1uICIkYWxsb3dfdW5kZWZpbmVkX2ZsYWciOyB0aGVuIGZ1bmNfZWNob19hbGwgIiR3bCRhbGxvd191bmRlZmluZWRfZmxhZyI7IGVsc2UgOjsgZmlgICR3bCckZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMnICckc2hhcmVkX2ZsYWcKICAgICAgICAgZWxzZQotICAgICAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCi0JICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1SICRsaWJkaXI6L3Vzci9saWI6L2xpYicKKyAgICAgICAgICBpZiB0ZXN0IGlhNjQgPSAiJGhvc3RfY3B1IjsgdGhlbgorCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsLVIgJGxpYmRpcjovdXNyL2xpYjovbGliJwogCSAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9Ii16IG5vZGVmcyIKLQkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9IlwkQ0MgJHNoYXJlZF9mbGFnIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzICR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30gJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMiCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSJcJENDICRzaGFyZWRfZmxhZyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHdsJG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgJHdsJGFsbG93X3VuZGVmaW5lZF9mbGFnICciXCR3bCRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyIKICAgICAgICAgICBlbHNlCiAJICAgICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbgogCSAgICAjIGVtcHR5IGV4ZWN1dGFibGUuCiAJICAgIF9MVF9TWVNfTU9EVUxFX1BBVEhfQUlYKFskMV0pCi0JICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsLWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCiAJICAgICMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1biB0aW1lIGxvYWRpbmcgZmxhZ3MsCiAJICAgICMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KLQkgICAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScgJHt3bH0tYmVybm90b2snCi0JICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR7d2x9LWJlcm9rJwotCSAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisJICAgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR3bC1iZXJub3RvaycKKwkgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgJHdsLWJlcm9rJworCSAgICBpZiB0ZXN0IHllcyA9ICIkd2l0aF9nbnVfbGQiOyB0aGVuCiAJICAgICAgIyBXZSBvbmx5IHVzZSB0aGlzIGNvZGUgZm9yIEdOVSBsZHMgdGhhdCBzdXBwb3J0IC0td2hvbGUtYXJjaGl2ZS4KLQkgICAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworCSAgICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHdsLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICR3bC0tbm8td2hvbGUtYXJjaGl2ZScKIAkgICAgZWxzZQogCSAgICAgICMgRXhwb3J0ZWQgc3ltYm9scyBjYW4gYmUgcHVsbGVkIGludG8gc2hhcmVkIG9iamVjdHMgZnJvbSBhcmNoaXZlcwogCSAgICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJGNvbnZlbmllbmNlJwpAQCAtNjEwMSw3ICs2MjE2LDcgQEAKIAkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPXllcwogCSAgICAjIFRoaXMgaXMgc2ltaWxhciB0byBob3cgQUlYIHRyYWRpdGlvbmFsbHkgYnVpbGRzIGl0cyBzaGFyZWQKIAkgICAgIyBsaWJyYXJpZXMuCi0JICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSJcJENDICRzaGFyZWRfZmxhZyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJHt3bH0tYm5vZW50cnkgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWJFOiRleHBvcnRfc3ltYm9scyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9fiRBUiAkQVJfRkxBR1MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUkcmVsZWFzZS5hICRvdXRwdXRfb2JqZGlyLyRzb25hbWUnCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSJcJENDICRzaGFyZWRfZmxhZyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJHdsLWJub2VudHJ5ICRjb21waWxlcl9mbGFncyAkd2wtYkU6JGV4cG9ydF9zeW1ib2xzJGFsbG93X3VuZGVmaW5lZF9mbGFnfiRBUiAkQVJfRkxBR1MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUkcmVsZWFzZS5hICRvdXRwdXRfb2JqZGlyLyRzb25hbWUnCiAgICAgICAgICAgZmkKICAgICAgICAgZmkKICAgICAgICAgOzsKQEAgLTYxMTEsNyArNjIyNiw3IEBACiAJICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKIAkgICMgSm9zZXBoIEJlY2tlbmJhY2ggPGpyYjNAYmVzdC5jb20+IHNheXMgc29tZSByZWxlYXNlcyBvZiBnY2MKIAkgICMgc3VwcG9ydCAtLXVuZGVmaW5lZC4gIFRoaXMgZGVzZXJ2ZXMgc29tZSBpbnZlc3RpZ2F0aW9uLiAgRklYTUUKLQkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtbm9zdGFydCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtbm9zdGFydCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCiAJZWxzZQogCSAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwogCWZpCkBAIC02MTM5LDU3ICs2MjU0LDU4IEBACiAJICAjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgogCSAgbGliZXh0PWxpYgogCSAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCi0JICBzaHJleHRfY21kcz0iLmRsbCIKKwkgIHNocmV4dF9jbWRzPS5kbGwKIAkgICMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KLQkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAtV2wsLWRsbH5saW5rbmFtZXM9JwotCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2lmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiA9IHhFWFBPUlRTOyB0aGVuCi0JICAgICAgJFNFRCAtbiAtZSAncy9cXFxcXFxcKC4qXFxcXFxcXCkvLWxpbmtcXFwgLUVYUE9SVDpcXFxcXFxcMS8nIC1lICcxXFxcIXAnIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHA7Ci0JICAgIGVsc2UKLQkgICAgICAkU0VEIC1lICdzL1xcXFxcXFwoLipcXFxcXFxcKS8tbGlua1xcXCAtRVhQT1JUOlxcXFxcXFwxLycgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cDsKLQkgICAgZml+Ci0JICAgICRDQyAtbyAkdG9vbF9vdXRwdXRfb2JqZGlyJHNvbmFtZSAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYnMgIkAkdG9vbF9vdXRwdXRfb2JqZGlyJHNvbmFtZS5leHAiIC1XbCwtRExMLC1JTVBMSUI6IiR0b29sX291dHB1dF9vYmpkaXIkbGlibmFtZS5kbGwubGliIn4KLQkgICAgbGlua25hbWVzPScKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAtV2wsLURMTCwtSU1QTElCOiIkdG9vbF9vdXRwdXRfb2JqZGlyJGxpYm5hbWUuZGxsLmxpYiJ+bGlua25hbWVzPScKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdpZiBfTFRfRExMX0RFRl9QKFskZXhwb3J0X3N5bWJvbHNdKTsgdGhlbgorICAgICAgICAgICAgICBjcCAiJGV4cG9ydF9zeW1ib2xzIiAiJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWYiOworICAgICAgICAgICAgICBlY2hvICIkdG9vbF9vdXRwdXRfb2JqZGlyJHNvbmFtZS5kZWYiID4gIiRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwIjsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgJFNFRCAtZSAnXCcncy9eLy1saW5rIC1FWFBPUlQ6LydcJycgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cDsKKyAgICAgICAgICAgIGZpfgorICAgICAgICAgICAgJENDIC1vICR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAiQCR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lLmV4cCIgLVdsLC1ETEwsLUlNUExJQjoiJHRvb2xfb3V0cHV0X29iamRpciRsaWJuYW1lLmRsbC5saWIifgorICAgICAgICAgICAgbGlua25hbWVzPScKIAkgICMgVGhlIGxpbmtlciB3aWxsIG5vdCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgc3RhdGljIGxpYiBpZiB3ZSBidWlsZCBhIERMTC4KIAkgICMgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzLCAkMSk9J3RydWUnCiAJICBfTFRfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT15ZXMKIAkgICMgRG9uJ3QgdXNlIHJhbmxpYgogCSAgX0xUX1RBR1ZBUihvbGRfcG9zdGluc3RhbGxfY21kcywgJDEpPSdjaG1vZCA2NDQgJG9sZGxpYicKIAkgIF9MVF9UQUdWQVIocG9zdGxpbmtfY21kcywgJDEpPSdsdF9vdXRwdXRmaWxlPSJAT1VUUFVUQCJ+Ci0JICAgIGx0X3Rvb2xfb3V0cHV0ZmlsZT0iQFRPT0xfT1VUUFVUQCJ+Ci0JICAgIGNhc2UgJGx0X291dHB1dGZpbGUgaW4KLQkgICAgICAqLmV4ZXwqLkVYRSkgOzsKLQkgICAgICAqKQotCQlsdF9vdXRwdXRmaWxlPSIkbHRfb3V0cHV0ZmlsZS5leGUiCi0JCWx0X3Rvb2xfb3V0cHV0ZmlsZT0iJGx0X3Rvb2xfb3V0cHV0ZmlsZS5leGUiCi0JCTs7Ci0JICAgIGVzYWN+Ci0JICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkbHRfb3V0cHV0ZmlsZSJ+Ci0JICAgIGlmIHRlc3QgIiRNQU5JRkVTVF9UT09MIiAhPSAiOiIgJiYgdGVzdCAtZiAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOyB0aGVuCi0JICAgICAgJE1BTklGRVNUX1RPT0wgLW1hbmlmZXN0ICIkbHRfdG9vbF9vdXRwdXRmaWxlLm1hbmlmZXN0IiAtb3V0cHV0cmVzb3VyY2U6IiRsdF90b29sX291dHB1dGZpbGUiIHx8IGV4aXQgMTsKLQkgICAgICAkUk0gIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsKLQkgICAgZmknCisgICAgICAgICAgICBsdF90b29sX291dHB1dGZpbGU9IkBUT09MX09VVFBVVEAifgorICAgICAgICAgICAgY2FzZSAkbHRfb3V0cHV0ZmlsZSBpbgorICAgICAgICAgICAgICAqLmV4ZXwqLkVYRSkgOzsKKyAgICAgICAgICAgICAgKikKKyAgICAgICAgICAgICAgICBsdF9vdXRwdXRmaWxlPSRsdF9vdXRwdXRmaWxlLmV4ZQorICAgICAgICAgICAgICAgIGx0X3Rvb2xfb3V0cHV0ZmlsZT0kbHRfdG9vbF9vdXRwdXRmaWxlLmV4ZQorICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICBlc2FjfgorICAgICAgICAgICAgZnVuY190b190b29sX2ZpbGUgIiRsdF9vdXRwdXRmaWxlIn4KKyAgICAgICAgICAgIGlmIHRlc3QgOiAhPSAiJE1BTklGRVNUX1RPT0wiICYmIHRlc3QgLWYgIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsgdGhlbgorICAgICAgICAgICAgICAkTUFOSUZFU1RfVE9PTCAtbWFuaWZlc3QgIiRsdF90b29sX291dHB1dGZpbGUubWFuaWZlc3QiIC1vdXRwdXRyZXNvdXJjZToiJGx0X3Rvb2xfb3V0cHV0ZmlsZSIgfHwgZXhpdCAxOworICAgICAgICAgICAgICAkUk0gIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsKKyAgICAgICAgICAgIGZpJwogCSAgOzsKIAkqKQogCSAgIyBnKysKIAkgICMgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSkgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsCiAJICAjIGFzIHRoZXJlIGlzIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgogCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKLQkgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS1leHBvcnQtYWxsLXN5bWJvbHMnCisJICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPSckd2wtLWV4cG9ydC1hbGwtc3ltYm9scycKIAkgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAogCSAgX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT1ubwogCSAgX0xUX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9eWVzCiAKIAkgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICdhdXRvLWltcG9ydCcgPiAvZGV2L251bGw7IHRoZW4KLQkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJwotCSAgICAjIElmIHRoZSBleHBvcnQtc3ltYm9scyBmaWxlIGFscmVhZHkgaXMgYSAuZGVmIGZpbGUgKDFzdCBsaW5lCi0JICAgICMgaXMgRVhQT1JUUyksIHVzZSBpdCBhcyBpczsgb3RoZXJ3aXNlLCBwcmVwZW5kLi4uCi0JICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdpZiB0ZXN0ICJ4YCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCIgPSB4RVhQT1JUUzsgdGhlbgotCSAgICAgIGNwICRleHBvcnRfc3ltYm9scyAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKLQkgICAgZWxzZQotCSAgICAgIGVjaG8gRVhQT1JUUyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOwotCSAgICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgPj4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7Ci0JICAgIGZpfgotCSAgICAkQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWYgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkd2wtLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCisJICAgICMgSWYgdGhlIGV4cG9ydC1zeW1ib2xzIGZpbGUgYWxyZWFkeSBpcyBhIC5kZWYgZmlsZSwgdXNlIGl0IGFzCisJICAgICMgaXM7IG90aGVyd2lzZSwgcHJlcGVuZCBFWFBPUlRTLi4uCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdpZiBfTFRfRExMX0RFRl9QKFskZXhwb3J0X3N5bWJvbHNdKTsgdGhlbgorICAgICAgICAgICAgICBjcCAkZXhwb3J0X3N5bWJvbHMgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIGVjaG8gRVhQT1JUUyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworICAgICAgICAgICAgICBjYXQgJGV4cG9ydF9zeW1ib2xzID4+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworICAgICAgICAgICAgZml+CisgICAgICAgICAgICAkQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWYgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHdsLS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJwogCSAgZWxzZQogCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCiAJICBmaQpAQCAtNjIzNCwxOCArNjM1MCwxNSBAQAogICAgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPXllcwogICAgICAgICA7OwogCi0gICAgICBnbnUqKQotICAgICAgICA7OwotCiAgICAgICBoYWlrdSopCi0gICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCiAgICAgICAgIF9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcwogICAgICAgICA7OwogCiAgICAgICBocHV4OSopCi0gICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfStiICR7d2x9JGxpYmRpcicKKyAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bCtiICR3bCRsaWJkaXInCiAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKLSAgICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tRScKKyAgICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHdsLUUnCiAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCiAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcyAjIE5vdCBpbiB0aGUgc2VhcmNoIFBBVEgsCiAJCQkJICAgICAgICAgICAgICMgYnV0IGFzIHRoZSBkZWZhdWx0CkBAIC02MjU3LDcgKzYzNzAsNyBAQAogICAgICAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwogICAgICAgICAgICAgOzsKICAgICAgICAgICBhQ0MqKQotICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1iICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLWIgJHdsK2IgJHdsJGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgIngkb3V0cHV0X29iamRpci8kc29uYW1lIiA9ICJ4JGxpYiIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJwogICAgICAgICAgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cwogICAgICAgICAgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCiAgICAgICAgICAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KQEAgLTYyNjYsMTEgKzYzNzksMTEgQEAKICAgICAgICAgICAgICMgZXhwbGljaXRseSBsaW5raW5nIHN5c3RlbSBvYmplY3QgZmlsZXMgc28gd2UgbmVlZCB0byBzdHJpcCB0aGVtCiAgICAgICAgICAgICAjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5CiAgICAgICAgICAgICAjIGRlcGVuZGVuY2llcy4KLSAgICAgICAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gKCRDQyAtYiAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSkgfCAkRUdSRVAgIlwtTCJgOyBsaXN0PSIiOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgZnVuY19lY2hvX2FsbCAiJGxpc3QiJworICAgICAgICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAoJENDIC1iICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxKSB8ICRFR1JFUCAiXC1MImA7IGxpc3Q9IDsgZm9yIHogaW4gJHRlbXBsaXN0OyBkbyBjYXNlICR6IGluIGNvbmZ0ZXN0LiRvYmpleHQpIGxpc3Q9IiRsaXN0ICR6Ijs7ICouJG9iamV4dCk7OyAqKSBsaXN0PSIkbGlzdCAkeiI7O2VzYWM7IGRvbmU7IGZ1bmNfZWNob19hbGwgIiRsaXN0IicKICAgICAgICAgICAgIDs7CiAgICAgICAgICAgKikKLSAgICAgICAgICAgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCi0gICAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcGljX2ZsYWcgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKyAgICAgICAgICAgIGlmIHRlc3QgeWVzID0gIiRHWFgiOyB0aGVuCisgICAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcGljX2ZsYWcgJHdsK2IgJHdsJGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgIngkb3V0cHV0X29iamRpci8kc29uYW1lIiA9ICJ4JGxpYiIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKICAgICAgICAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwpAQCAtNjI4MCwxNSArNjM5MywxNSBAQAogICAgICAgICA7OwogCiAgICAgICBocHV4MTAqfGhwdXgxMSopCi0gICAgICAgIGlmIHRlc3QgJHdpdGhfZ251X2xkID0gbm87IHRoZW4KLQkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfStiICR7d2x9JGxpYmRpcicKKyAgICAgICAgaWYgdGVzdCBubyA9ICIkd2l0aF9nbnVfbGQiOyB0aGVuCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsK2IgJHdsJGxpYmRpcicKIAkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKIAogICAgICAgICAgIGNhc2UgJGhvc3RfY3B1IGluCiAgICAgICAgICAgICBocHBhKjY0KnxpYTY0KikKICAgICAgICAgICAgICAgOzsKICAgICAgICAgICAgICopCi0JICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tRScKKwkgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPSckd2wtRScKICAgICAgICAgICAgICAgOzsKICAgICAgICAgICBlc2FjCiAgICAgICAgIGZpCkBAIC02MzE0LDEzICs2NDI3LDEzIEBACiAgICAgICAgICAgYUNDKikKIAkgICAgY2FzZSAkaG9zdF9jcHUgaW4KIAkgICAgICBocHBhKjY0KikKLQkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYiAkd2wraCAkd2wkc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJwogCSAgICAgICAgOzsKIAkgICAgICBpYTY0KikKLQkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYiAkd2wraCAkd2wkc29uYW1lICR3bCtub2RlZmF1bHRycGF0aCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKIAkgICAgICAgIDs7CiAJICAgICAgKikKLQkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1iICR3bCtoICR3bCRzb25hbWUgJHdsK2IgJHdsJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJwogCSAgICAgICAgOzsKIAkgICAgZXNhYwogCSAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCkBAIC02MzMxLDIwICs2NDQ0LDIwIEBACiAJICAgICMgZXhwbGljaXRseSBsaW5raW5nIHN5c3RlbSBvYmplY3QgZmlsZXMgc28gd2UgbmVlZCB0byBzdHJpcCB0aGVtCiAJICAgICMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKIAkgICAgIyBkZXBlbmRlbmNpZXMuCi0JICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gKCRDQyAtYiAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSkgfCAkR1JFUCAiXC1MImA7IGxpc3Q9IiI7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyBmdW5jX2VjaG9fYWxsICIkbGlzdCInCisJICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gKCRDQyAtYiAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSkgfCAkR1JFUCAiXC1MImA7IGxpc3Q9IDsgZm9yIHogaW4gJHRlbXBsaXN0OyBkbyBjYXNlICR6IGluIGNvbmZ0ZXN0LiRvYmpleHQpIGxpc3Q9IiRsaXN0ICR6Ijs7ICouJG9iamV4dCk7OyAqKSBsaXN0PSIkbGlzdCAkeiI7O2VzYWM7IGRvbmU7IGZ1bmNfZWNob19hbGwgIiRsaXN0IicKIAkgICAgOzsKICAgICAgICAgICAqKQotCSAgICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgotCSAgICAgIGlmIHRlc3QgJHdpdGhfZ251X2xkID0gbm87IHRoZW4KKwkgICAgaWYgdGVzdCB5ZXMgPSAiJEdYWCI7IHRoZW4KKwkgICAgICBpZiB0ZXN0IG5vID0gIiR3aXRoX2dudV9sZCI7IHRoZW4KIAkgICAgICAgIGNhc2UgJGhvc3RfY3B1IGluCiAJICAgICAgICAgIGhwcGEqNjQqKQotCSAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKwkgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgLWZQSUMgJHdsK2ggJHdsJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKIAkgICAgICAgICAgICA7OwogCSAgICAgICAgICBpYTY0KikKLQkgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcGljX2ZsYWcgJHdsK2ggJHdsJHNvbmFtZSAkd2wrbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCiAJICAgICAgICAgICAgOzsKIAkgICAgICAgICAgKikKLQkgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwaWNfZmxhZyAkd2wraCAkd2wkc29uYW1lICR3bCtiICR3bCRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKIAkgICAgICAgICAgICA7OwogCSAgICAgICAgZXNhYwogCSAgICAgIGZpCkBAIC02MzU5LDIyICs2NDcyLDIyIEBACiAgICAgICBpbnRlcml4W1szLTldXSopCiAJX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubwogCV9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0JX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoLCRsaWJkaXInCi0JX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tRScKKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsLXJwYXRoLCRsaWJkaXInCisJX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHdsLUUnCiAJIyBIYWNrOiBPbiBJbnRlcml4IDMueCwgd2UgY2Fubm90IGNvbXBpbGUgUElDIGJlY2F1c2Ugb2YgYSBicm9rZW4gZ2NjLgogCSMgSW5zdGVhZCwgc2hhcmVkIGxpYnJhcmllcyBhcmUgbG9hZGVkIGF0IGFuIGltYWdlIGJhc2UgKDB4MTAwMDAwMDAgYnkKIAkjIGRlZmF1bHQpIGFuZCByZWxvY2F0ZWQgaWYgdGhleSBjb25mbGljdCwgd2hpY2ggaXMgYSBzbG93IHZlcnkgbWVtb3J5CiAJIyBjb25zdW1pbmcgYW5kIGZyYWdtZW50aW5nIHByb2Nlc3MuICBUbyBhdm9pZCB0aGlzLCB3ZSBwaWNrIGEgcmFuZG9tLAogCSMgMjU2IEtpQi1hbGlnbmVkIGltYWdlIGJhc2UgYmV0d2VlbiAweDUwMDAwMDAwIGFuZCAweDZGRkMwMDAwIGF0IGxpbmsKIAkjIHRpbWUuICBNb3ZpbmcgdXAgZnJvbSAweDEwMDAwMDAwIGFsc28gYWxsb3dzIG1vcmUgc2JyaygyKSBzcGFjZS4KLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWgsJHNvbmFtZSAke3dsfS0taW1hZ2UtYmFzZSxgZXhwciAke1JBTkRPTS0kJH0gJSA0MDk2IC8gMiBcKiAyNjIxNDQgKyAxMzQyMTc3MjgwYCAtbyAkbGliJwotCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdzZWQgInMsXixfLCIgJGV4cG9ydF9zeW1ib2xzID4kb3V0cHV0X29iamRpci8kc29uYW1lLmV4cHN5bX4kQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWgsJHNvbmFtZSAke3dsfS0tcmV0YWluLXN5bWJvbHMtZmlsZSwkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cHN5bSAke3dsfS0taW1hZ2UtYmFzZSxgZXhwciAke1JBTkRPTS0kJH0gJSA0MDk2IC8gMiBcKiAyNjIxNDQgKyAxMzQyMTc3MjgwYCAtbyAkbGliJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLWgsJHNvbmFtZSAkd2wtLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nc2VkICJzfF58X3wiICRleHBvcnRfc3ltYm9scyA+JG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW1+JENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtaCwkc29uYW1lICR3bC0tcmV0YWluLXN5bWJvbHMtZmlsZSwkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cHN5bSAkd2wtLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKIAk7OwogICAgICAgaXJpeDUqIHwgaXJpeDYqKQogICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgogICAgICAgICAgIENDKikKIAkgICAgIyBTR0kgQysrCi0JICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1hbGwgLW11bHRpZ290ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtYWxsIC1tdWx0aWdvdCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJG91dHB1dF9vYmpkaXIvc29fbG9jYXRpb25zIC1vICRsaWInCiAKIAkgICAgIyBBcmNoaXZlcyBjb250YWluaW5nIEMrKyBvYmplY3QgZmlsZXMgbXVzdCBiZSBjcmVhdGVkIHVzaW5nCiAJICAgICMgIkNDIC1hciIsIHdoZXJlICJDQyIgaXMgdGhlIElSSVggQysrIGNvbXBpbGVyLiAgVGhpcyBpcwpAQCAtNjM4MywyMiArNjQ5NiwyMiBAQAogCSAgICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nJENDIC1hciAtV1IsLXUgLW8gJG9sZGxpYiAkb2xkb2JqcycKIAkgICAgOzsKICAgICAgICAgICAqKQotCSAgICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgotCSAgICAgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgotCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwkgICAgaWYgdGVzdCB5ZXMgPSAiJEdYWCI7IHRoZW4KKwkgICAgICBpZiB0ZXN0IG5vID0gIiR3aXRoX2dudV9sZCI7IHRoZW4KKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHdsLXNldF92ZXJzaW9uICR3bCR2ZXJzdHJpbmciYCAkd2wtdXBkYXRlX3JlZ2lzdHJ5ICR3bCRvdXRwdXRfb2JqZGlyL3NvX2xvY2F0aW9ucyAtbyAkbGliJwogCSAgICAgIGVsc2UKLQkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgIC1vICRsaWInCisJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR3bC1zZXRfdmVyc2lvbiAkd2wkdmVyc3RyaW5nImAgLW8gJGxpYicKIAkgICAgICBmaQogCSAgICBmaQogCSAgICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKIAkgICAgOzsKICAgICAgICAgZXNhYwotICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsLXJwYXRoICR3bCRsaWJkaXInCiAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKICAgICAgICAgX0xUX1RBR1ZBUihpbmhlcml0X3JwYXRoLCAkMSk9eWVzCiAgICAgICAgIDs7CiAKLSAgICAgIGxpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSkKKyAgICAgIGxpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSB8IGdudSopCiAgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCiAgICAgICAgICAgS0NDKikKIAkgICAgIyBLdWNrIGFuZCBBc3NvY2lhdGVzLCBJbmMuIChLQUkpIEMrKyBDb21waWxlcgpAQCAtNjQwNiw4ICs2NTE5LDggQEAKIAkgICAgIyBLQ0Mgd2lsbCBvbmx5IGNyZWF0ZSBhIHNoYXJlZCBsaWJyYXJ5IGlmIHRoZSBvdXRwdXQgZmlsZQogCSAgICAjIGVuZHMgd2l0aCAiLnNvIiAob3IgIi5zbCIgZm9yIEhQLVVYKSwgc28gcmVuYW1lIHRoZSBsaWJyYXJ5CiAJICAgICMgdG8gaXRzIHByb3BlciBuYW1lICh3aXRoIHZlcnNpb24pIGFmdGVyIGxpbmtpbmcuCi0JICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9J3RlbXBleHQ9YGVjaG8gJHNoYXJlZF9leHQgfCAkU0VEIC1lICdcJydzL1woW1teKCkwLTlBLVphLXp7fV1dXCkvXFxcXFwxL2cnXCcnYDsgdGVtcGxpYj1gZWNobyAkbGliIHwgJFNFRCAtZSAicy9cJHt0ZW1wZXh0fVwuLiovLnNvLyJgOyAkQ0MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC0tc29uYW1lICRzb25hbWUgLW8gXCR0ZW1wbGliOyBtdiBcJHRlbXBsaWIgJGxpYicKLQkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J3RlbXBleHQ9YGVjaG8gJHNoYXJlZF9leHQgfCAkU0VEIC1lICdcJydzL1woW1teKCkwLTlBLVphLXp7fV1dXCkvXFxcXFwxL2cnXCcnYDsgdGVtcGxpYj1gZWNobyAkbGliIHwgJFNFRCAtZSAicy9cJHt0ZW1wZXh0fVwuLiovLnNvLyJgOyAkQ0MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC0tc29uYW1lICRzb25hbWUgLW8gXCR0ZW1wbGliICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUsJGV4cG9ydF9zeW1ib2xzOyBtdiBcJHRlbXBsaWIgJGxpYicKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0ndGVtcGV4dD1gZWNobyAkc2hhcmVkX2V4dCB8ICRTRUQgLWUgJ1wnJ3MvXChbW14oKTAtOUEtWmEtent9XV1cKS9cXFxcXDEvZydcJydgOyB0ZW1wbGliPWBlY2hvICRsaWIgfCAkU0VEIC1lICJzL1wkdGVtcGV4dFwuLiovLnNvLyJgOyAkQ0MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC0tc29uYW1lICRzb25hbWUgLW8gXCR0ZW1wbGliOyBtdiBcJHRlbXBsaWIgJGxpYicKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J3RlbXBleHQ9YGVjaG8gJHNoYXJlZF9leHQgfCAkU0VEIC1lICdcJydzL1woW1teKCkwLTlBLVphLXp7fV1dXCkvXFxcXFwxL2cnXCcnYDsgdGVtcGxpYj1gZWNobyAkbGliIHwgJFNFRCAtZSAicy9cJHRlbXBleHRcLi4qLy5zby8iYDsgJENDICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtLXNvbmFtZSAkc29uYW1lIC1vIFwkdGVtcGxpYiAkd2wtcmV0YWluLXN5bWJvbHMtZmlsZSwkZXhwb3J0X3N5bWJvbHM7IG12IFwkdGVtcGxpYiAkbGliJwogCSAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCiAJICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgogCSAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KQEAgLTY0MTYsMTAgKzY1MjksMTAgQEAKIAkgICAgIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KIAkgICAgIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQogCSAgICAjIGRlcGVuZGVuY2llcy4KLQkgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAkQ0MgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IC1vIGxpYmNvbmZ0ZXN0JHNoYXJlZF9leHQgMj4mMSB8ICRHUkVQICJsZCJgOyBybSAtZiBsaWJjb25mdGVzdCRzaGFyZWRfZXh0OyBsaXN0PSIiOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgZnVuY19lY2hvX2FsbCAiJGxpc3QiJworCSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCRDQyAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgLW8gbGliY29uZnRlc3Qkc2hhcmVkX2V4dCAyPiYxIHwgJEdSRVAgImxkImA7IHJtIC1mIGxpYmNvbmZ0ZXN0JHNoYXJlZF9leHQ7IGxpc3Q9IDsgZm9yIHogaW4gJHRlbXBsaXN0OyBkbyBjYXNlICR6IGluIGNvbmZ0ZXN0LiRvYmpleHQpIGxpc3Q9IiRsaXN0ICR6Ijs7ICouJG9iamV4dCk7OyAqKSBsaXN0PSIkbGlzdCAkeiI7O2VzYWM7IGRvbmU7IGZ1bmNfZWNob19hbGwgIiRsaXN0IicKIAotCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGgsJGxpYmRpcicKLQkgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tLWV4cG9ydC1keW5hbWljJworCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsLXJwYXRoLCRsaWJkaXInCisJICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR3bC0tZXhwb3J0LWR5bmFtaWMnCiAKIAkgICAgIyBBcmNoaXZlcyBjb250YWluaW5nIEMrKyBvYmplY3QgZmlsZXMgbXVzdCBiZSBjcmVhdGVkIHVzaW5nCiAJICAgICMgIkNDIC1Cc3RhdGljIiwgd2hlcmUgIkNDIiBpcyB0aGUgS0FJIEMrKyBjb21waWxlci4KQEAgLTY0MzMsNTkgKzY1NDYsNTkgQEAKIAkgICAgIyBlYXJsaWVyIGRvIG5vdCBhZGQgdGhlIG9iamVjdHMgdGhlbXNlbHZlcy4KIAkgICAgY2FzZSBgJENDIC1WIDI+JjFgIGluCiAJICAgICAgKiJWZXJzaW9uIDcuIiopCi0JICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLQkJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCQlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAkd2wtcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKIAkJOzsKIAkgICAgICAqKSAgIyBWZXJzaW9uIDguMCBvciBuZXdlcgogCSAgICAgICAgdG1wX2lkeW49CiAJICAgICAgICBjYXNlICRob3N0X2NwdSBpbgogCQkgIGlhNjQqKSB0bXBfaWR5bj0nIC1pX2R5bmFtaWMnOzsKIAkJZXNhYwotCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQnIiR0bXBfaWR5biInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotCQlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQnIiR0bXBfaWR5biInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQnIiR0bXBfaWR5biInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwkJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJyIkdG1wX2lkeW4iJyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lICR3bC1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJwogCQk7OwogCSAgICBlc2FjCiAJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubwotCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGgsJGxpYmRpcicKLQkgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tLWV4cG9ydC1keW5hbWljJwotCSAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsLXJwYXRoLCRsaWJkaXInCisJICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR3bC0tZXhwb3J0LWR5bmFtaWMnCisJICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHdsLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICR3bC0tbm8td2hvbGUtYXJjaGl2ZScKIAkgICAgOzsKICAgICAgICAgICBwZ0NDKiB8IHBnY3BwKikKICAgICAgICAgICAgICMgUG9ydGxhbmQgR3JvdXAgQysrIGNvbXBpbGVyCiAJICAgIGNhc2UgYCRDQyAtVmAgaW4KIAkgICAgKnBnQ0NcIFtbMS01XV0uKiB8ICpwZ2NwcFwgW1sxLTVdXS4qKQogCSAgICAgIF9MVF9UQUdWQVIocHJlbGlua19jbWRzLCAkMSk9J3RwbGRpcj1UZW1wbGF0ZS5kaXJ+Ci0JCXJtIC1yZiAkdHBsZGlyfgotCQkkQ0MgLS1wcmVsaW5rX29iamVjdHMgLS1pbnN0YW50aWF0aW9uX2RpciAkdHBsZGlyICRvYmpzICRsaWJvYmpzICRjb21waWxlX2RlcGxpYnN+Ci0JCWNvbXBpbGVfY29tbWFuZD0iJGNvbXBpbGVfY29tbWFuZCBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCBzb3J0IHwgJE5MMlNQYCInCisgICAgICAgICAgICAgICBybSAtcmYgJHRwbGRpcn4KKyAgICAgICAgICAgICAgICRDQyAtLXByZWxpbmtfb2JqZWN0cyAtLWluc3RhbnRpYXRpb25fZGlyICR0cGxkaXIgJG9ianMgJGxpYm9ianMgJGNvbXBpbGVfZGVwbGlic34KKyAgICAgICAgICAgICAgIGNvbXBpbGVfY29tbWFuZD0iJGNvbXBpbGVfY29tbWFuZCBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCBzb3J0IHwgJE5MMlNQYCInCiAJICAgICAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9J3RwbGRpcj1UZW1wbGF0ZS5kaXJ+Ci0JCXJtIC1yZiAkdHBsZGlyfgotCQkkQ0MgLS1wcmVsaW5rX29iamVjdHMgLS1pbnN0YW50aWF0aW9uX2RpciAkdHBsZGlyICRvbGRvYmpzJG9sZF9kZXBsaWJzfgotCQkkQVIgJEFSX0ZMQUdTICRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicyBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCBzb3J0IHwgJE5MMlNQYH4KLQkJJFJBTkxJQiAkb2xkbGliJworICAgICAgICAgICAgICAgIHJtIC1yZiAkdHBsZGlyfgorICAgICAgICAgICAgICAgICRDQyAtLXByZWxpbmtfb2JqZWN0cyAtLWluc3RhbnRpYXRpb25fZGlyICR0cGxkaXIgJG9sZG9ianMkb2xkX2RlcGxpYnN+CisgICAgICAgICAgICAgICAgJEFSICRBUl9GTEFHUyAkb2xkbGliJG9sZG9ianMkb2xkX2RlcGxpYnMgYGZpbmQgJHRwbGRpciAtbmFtZSBcKi5vIHwgc29ydCB8ICROTDJTUGB+CisgICAgICAgICAgICAgICAgJFJBTkxJQiAkb2xkbGliJwogCSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9J3RwbGRpcj1UZW1wbGF0ZS5kaXJ+Ci0JCXJtIC1yZiAkdHBsZGlyfgotCQkkQ0MgLS1wcmVsaW5rX29iamVjdHMgLS1pbnN0YW50aWF0aW9uX2RpciAkdHBsZGlyICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkY29udmVuaWVuY2UgJHBvc3RkZXBfb2JqZWN0c34KLQkJJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCBzb3J0IHwgJE5MMlNQYCAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIC1vICRsaWInCisgICAgICAgICAgICAgICAgcm0gLXJmICR0cGxkaXJ+CisgICAgICAgICAgICAgICAgJENDIC0tcHJlbGlua19vYmplY3RzIC0taW5zdGFudGlhdGlvbl9kaXIgJHRwbGRpciAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJGNvbnZlbmllbmNlICRwb3N0ZGVwX29iamVjdHN+CisgICAgICAgICAgICAgICAgJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCBzb3J0IHwgJE5MMlNQYCAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKIAkgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0ndHBsZGlyPVRlbXBsYXRlLmRpcn4KLQkJcm0gLXJmICR0cGxkaXJ+Ci0JCSRDQyAtLXByZWxpbmtfb2JqZWN0cyAtLWluc3RhbnRpYXRpb25fZGlyICR0cGxkaXIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRjb252ZW5pZW5jZSAkcG9zdGRlcF9vYmplY3RzfgotCQkkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8IHNvcnQgfCAkTkwyU1BgICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgICAgICAgICAgIHJtIC1yZiAkdHBsZGlyfgorICAgICAgICAgICAgICAgICRDQyAtLXByZWxpbmtfb2JqZWN0cyAtLWluc3RhbnRpYXRpb25fZGlyICR0cGxkaXIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRjb252ZW5pZW5jZSAkcG9zdGRlcF9vYmplY3RzfgorICAgICAgICAgICAgICAgICRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgYGZpbmQgJHRwbGRpciAtbmFtZSBcKi5vIHwgc29ydCB8ICROTDJTUGAgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lICR3bC1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJwogCSAgICAgIDs7CiAJICAgICopICMgVmVyc2lvbiA2IGFuZCBhYm92ZSB1c2Ugd2VhayBzeW1ib2xzCi0JICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIC1vICRsaWInCi0JICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisJICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwkgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgJHdsLXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCiAJICAgICAgOzsKIAkgICAgZXNhYwogCi0JICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tcnBhdGggJHt3bH0kbGliZGlyJwotCSAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tZXhwb3J0LWR5bmFtaWMnCi0JICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0tLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSckd2wtLXJwYXRoICR3bCRsaWJkaXInCisJICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR3bC0tZXhwb3J0LWR5bmFtaWMnCisJICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHdsLS13aG9sZS1hcmNoaXZlYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgICR3bC0tbm8td2hvbGUtYXJjaGl2ZScKICAgICAgICAgICAgIDs7CiAJICBjeHgqKQogCSAgICAjIENvbXBhcSBDKysKLQkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0JICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgIC1vICRsaWIgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMnCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgIC1vICRsaWIgJHdsLXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzJwogCiAJICAgIHJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRICiAJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctcnBhdGggJGxpYmRpcicKQEAgLTY0OTksMTggKzY2MTIsMTggQEAKIAkgICAgIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KIAkgICAgIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQogCSAgICAjIGRlcGVuZGVuY2llcy4KLQkgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAkQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQICJsZCJgOyB0ZW1wbGlzdD1gZnVuY19lY2hvX2FsbCAiJHRlbXBsaXN0IiB8ICRTRUQgInMvXCheLipsZC4qXClcKCAuKmxkIC4qJFwpL1wxLyJgOyBsaXN0PSIiOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgZnVuY19lY2hvX2FsbCAiWCRsaXN0IiB8ICRYc2VkJworCSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgJEdSRVAgImxkImA7IHRlbXBsaXN0PWBmdW5jX2VjaG9fYWxsICIkdGVtcGxpc3QiIHwgJFNFRCAicy9cKF4uKmxkLipcKVwoIC4qbGQgLiokXCkvXDEvImA7IGxpc3Q9IDsgZm9yIHogaW4gJHRlbXBsaXN0OyBkbyBjYXNlICR6IGluIGNvbmZ0ZXN0LiRvYmpleHQpIGxpc3Q9IiRsaXN0ICR6Ijs7ICouJG9iamV4dCk7OyAqKSBsaXN0PSIkbGlzdCAkeiI7O2VzYWM7IGRvbmU7IGZ1bmNfZWNob19hbGwgIlgkbGlzdCIgfCAkWHNlZCcKIAkgICAgOzsKIAkgIHhsKiB8IG1waXhsKiB8IGJneGwqKQogCSAgICAjIElCTSBYTCA4LjAgb24gUFBDLCB3aXRoIEdOVSBsZAotCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJwotCSAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tZXhwb3J0LWR5bmFtaWMnCi0JICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtcW1rc2hyb2JqICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotCSAgICBpZiB0ZXN0ICJ4JHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZyIgPSB4eWVzOyB0aGVuCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSckd2wtcnBhdGggJHdsJGxpYmRpcicKKwkgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHdsLS1leHBvcnQtZHluYW1pYycKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1xbWtzaHJvYmogJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCSAgICBpZiB0ZXN0IHllcyA9ICIkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nIjsgdGhlbgogCSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdlY2hvICJ7IGdsb2JhbDoiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgotCQljYXQgJGV4cG9ydF9zeW1ib2xzIHwgc2VkIC1lICJzL1woLipcKS9cMTsvIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+Ci0JCWVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgotCQkkQ0MgLXFta3Nocm9iaiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tdmVyc2lvbi1zY3JpcHQgJHt3bH0kb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKKyAgICAgICAgICAgICAgICBjYXQgJGV4cG9ydF9zeW1ib2xzIHwgc2VkIC1lICJzL1woLipcKS9cMTsvIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisgICAgICAgICAgICAgICAgZWNobyAibG9jYWw6ICo7IH07IiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisgICAgICAgICAgICAgICAgJENDIC1xbWtzaHJvYmogJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAkd2wtdmVyc2lvbi1zY3JpcHQgJHdsJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCiAJICAgIGZpCiAJICAgIDs7CiAJICAqKQpAQCAtNjUxOCwxMCArNjYzMSwxMCBAQAogCSAgICAqU3VuXCBDKikKIAkgICAgICAjIFN1biBDKysgNS45CiAJICAgICAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScgLXpkZWZzJwotCSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1oJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKLQkgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLWgkc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMnCisJICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1oJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKwkgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1HJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1oJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMnCiAJICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1SJGxpYmRpcicKLQkgICAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS13aG9sZS1hcmNoaXZlYG5ld19jb252ZW5pZW5jZT07IGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgLXogXCIkY29udlwiIHx8IG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisJICAgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSckd2wtLXdob2xlLWFyY2hpdmVgbmV3X2NvbnZlbmllbmNlPTsgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAteiBcIiRjb252XCIgfHwgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCAkd2wtLW5vLXdob2xlLWFyY2hpdmUnCiAJICAgICAgX0xUX1RBR1ZBUihjb21waWxlcl9uZWVkc19vYmplY3QsICQxKT15ZXMKIAogCSAgICAgICMgTm90IHN1cmUgd2hldGhlciBzb21ldGhpbmcgYmFzZWQgb24KQEAgLTY1NzksMjIgKzY2OTIsMTcgQEAKICAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT15ZXMKIAk7OwogCi0gICAgICBvcGVuYnNkMiopCi0gICAgICAgICMgQysrIHNoYXJlZCBsaWJyYXJpZXMgYXJlIGZhaXJseSBicm9rZW4KLQlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0JOzsKLQotICAgICAgb3BlbmJzZCopCisgICAgICBvcGVuYnNkKiB8IGJpdHJpZyopCiAJaWYgdGVzdCAtZiAvdXNyL2xpYmV4ZWMvbGQuc287IHRoZW4KIAkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCiAJICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubwogCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT15ZXMKIAkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW8gJGxpYicKLQkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCwkbGliZGlyJwotCSAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCi0JICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCi0JICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCi0JICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0iJHdsYXJjIictLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJyIkd2xhcmMiJy0tbm8td2hvbGUtYXJjaGl2ZScKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSckd2wtcnBhdGgsJGxpYmRpcicKKwkgIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfX2AiOyB0aGVuCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1yZXRhaW4tc3ltYm9scy1maWxlLCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCSAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPSckd2wtRScKKwkgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSR3bGFyYyctLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJyR3bGFyYyctLW5vLXdob2xlLWFyY2hpdmUnCiAJICBmaQogCSAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9ZnVuY19lY2hvX2FsbAogCWVsc2UKQEAgLTY2MTAsOSArNjcxOCw5IEBACiAJICAgICMgS0NDIHdpbGwgb25seSBjcmVhdGUgYSBzaGFyZWQgbGlicmFyeSBpZiB0aGUgb3V0cHV0IGZpbGUKIAkgICAgIyBlbmRzIHdpdGggIi5zbyIgKG9yICIuc2wiIGZvciBIUC1VWCksIHNvIHJlbmFtZSB0aGUgbGlicmFyeQogCSAgICAjIHRvIGl0cyBwcm9wZXIgbmFtZSAod2l0aCB2ZXJzaW9uKSBhZnRlciBsaW5raW5nLgotCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSd0ZW1wZXh0PWBlY2hvICRzaGFyZWRfZXh0IHwgJFNFRCAtZSAnXCcncy9cKFtbXigpMC05QS1aYS16e31dXVwpL1xcXFxcMS9nJ1wnJ2A7IHRlbXBsaWI9YGVjaG8gIiRsaWIiIHwgJFNFRCAtZSAicy9cJHt0ZW1wZXh0fVwuLiovLnNvLyJgOyAkQ0MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC0tc29uYW1lICRzb25hbWUgLW8gXCR0ZW1wbGliOyBtdiBcJHRlbXBsaWIgJGxpYicKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0ndGVtcGV4dD1gZWNobyAkc2hhcmVkX2V4dCB8ICRTRUQgLWUgJ1wnJ3MvXChbW14oKTAtOUEtWmEtent9XV1cKS9cXFxcXDEvZydcJydgOyB0ZW1wbGliPWBlY2hvICIkbGliIiB8ICRTRUQgLWUgInMvXCR0ZW1wZXh0XC4uKi8uc28vImA7ICRDQyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLS1zb25hbWUgJHNvbmFtZSAtbyBcJHRlbXBsaWI7IG12IFwkdGVtcGxpYiAkbGliJwogCi0JICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCwkbGliZGlyJworCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsLXJwYXRoLCRsaWJkaXInCiAJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKIAogCSAgICAjIEFyY2hpdmVzIGNvbnRhaW5pbmcgQysrIG9iamVjdCBmaWxlcyBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKQEAgLTY2MzAsMTcgKzY3MzgsMTcgQEAKICAgICAgICAgICBjeHgqKQogCSAgICBjYXNlICRob3N0IGluCiAJICAgICAgb3NmMyopCi0JICAgICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJwotCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0JICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworCSAgICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgJHdsLWV4cGVjdF91bnJlc29sdmVkICR3bFwqJworCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHdsLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICRvdXRwdXRfb2JqZGlyL3NvX2xvY2F0aW9ucyAtbyAkbGliJworCSAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bC1ycGF0aCAkd2wkbGliZGlyJwogCQk7OwogCSAgICAgICopCiAJICAgICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAtZXhwZWN0X3VucmVzb2x2ZWQgXConCi0JICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbXN5bSAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1tc3ltIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICRvdXRwdXRfb2JqZGlyL3NvX2xvY2F0aW9ucyAtbyAkbGliJwogCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2ZvciBpIGluIGBjYXQgJGV4cG9ydF9zeW1ib2xzYDsgZG8gcHJpbnRmICIlcyAlc1xcbiIgLWV4cG9ydGVkX3N5bWJvbCAiXCRpIiA+PiAkbGliLmV4cDsgZG9uZX4KLQkgICAgICAgICAgZWNobyAiLWhpZGRlbiI+PiAkbGliLmV4cH4KLQkgICAgICAgICAgJENDIC1zaGFyZWQkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1tc3ltIC1zb25hbWUgJHNvbmFtZSAke3dsfS1pbnB1dCAke3dsfSRsaWIuZXhwICBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgJEVDSE8gIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGlifgotCSAgICAgICAgICAkUk0gJGxpYi5leHAnCisgICAgICAgICAgICAgICAgICBlY2hvICItaGlkZGVuIj4+ICRsaWIuZXhwfgorICAgICAgICAgICAgICAgICAgJENDIC1zaGFyZWQkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1tc3ltIC1zb25hbWUgJHNvbmFtZSAkd2wtaW5wdXQgJHdsJGxpYi5leHAgIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICRvdXRwdXRfb2JqZGlyL3NvX2xvY2F0aW9ucyAtbyAkbGlifgorICAgICAgICAgICAgICAgICAgJFJNICRsaWIuZXhwJwogCSAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1ycGF0aCAkbGliZGlyJwogCQk7OwogCSAgICBlc2FjCkBAIC02NjU1LDIxICs2NzYzLDIxIEBACiAJICAgICMgZXhwbGljaXRseSBsaW5raW5nIHN5c3RlbSBvYmplY3QgZmlsZXMgc28gd2UgbmVlZCB0byBzdHJpcCB0aGVtCiAJICAgICMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKIAkgICAgIyBkZXBlbmRlbmNpZXMuCi0JICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCAkR1JFUCAibGQiIHwgJEdSRVAgLXYgImxkOiJgOyB0ZW1wbGlzdD1gZnVuY19lY2hvX2FsbCAiJHRlbXBsaXN0IiB8ICRTRUQgInMvXCheLipsZC4qXClcKCAuKmxkLiokXCkvXDEvImA7IGxpc3Q9IiI7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyBmdW5jX2VjaG9fYWxsICIkbGlzdCInCisJICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCAkR1JFUCAibGQiIHwgJEdSRVAgLXYgImxkOiJgOyB0ZW1wbGlzdD1gZnVuY19lY2hvX2FsbCAiJHRlbXBsaXN0IiB8ICRTRUQgInMvXCheLipsZC4qXClcKCAuKmxkLiokXCkvXDEvImA7IGxpc3Q9IDsgZm9yIHogaW4gJHRlbXBsaXN0OyBkbyBjYXNlICR6IGluIGNvbmZ0ZXN0LiRvYmpleHQpIGxpc3Q9IiRsaXN0ICR6Ijs7ICouJG9iamV4dCk7OyAqKSBsaXN0PSIkbGlzdCAkeiI7O2VzYWM7IGRvbmU7IGZ1bmNfZWNob19hbGwgIiRsaXN0IicKIAkgICAgOzsKIAkgICopCi0JICAgIGlmIHRlc3QgIiRHWFgiID0geWVzICYmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgotCSAgICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCisJICAgIGlmIHRlc3QgeWVzLG5vID0gIiRHWFgsJHdpdGhfZ251X2xkIjsgdGhlbgorCSAgICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR3bC1leHBlY3RfdW5yZXNvbHZlZCAkd2xcKicKIAkgICAgICBjYXNlICRob3N0IGluCiAJICAgICAgICBvc2YzKikKLQkgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCSAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJGFsbG93X3VuZGVmaW5lZF9mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR3bC1zZXRfdmVyc2lvbiAkd2wkdmVyc3RyaW5nImAgJHdsLXVwZGF0ZV9yZWdpc3RyeSAkd2wkb3V0cHV0X29iamRpci9zb19sb2NhdGlvbnMgLW8gJGxpYicKIAkJICA7OwogCSAgICAgICAgKikKLQkgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1ub3N0ZGxpYiAke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tbXN5bSAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCSAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW5vc3RkbGliICRhbGxvd191bmRlZmluZWRfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLW1zeW0gJHdsLXNvbmFtZSAkd2wkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIkd2wtc2V0X3ZlcnNpb24gJHdsJHZlcnN0cmluZyJgICR3bC11cGRhdGVfcmVnaXN0cnkgJHdsJG91dHB1dF9vYmpkaXIvc29fbG9jYXRpb25zIC1vICRsaWInCiAJCSAgOzsKIAkgICAgICBlc2FjCiAKLQkgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworCSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSckd2wtcnBhdGggJHdsJGxpYmRpcicKIAkgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CiAKIAkgICAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCkBAIC02NzE1LDkgKzY4MjMsOSBAQAogCSAgICAjIFN1biBDKysgNC4yLCA1LnggYW5kIENlbnRlcmxpbmUgQysrCiAgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCQxKT15ZXMKIAkgICAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScgLXpkZWZzJwotCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAgLWgkc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUckYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLWgkc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJwogCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgotCSAgICAgICRDQyAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICR7d2x9LU0gJHt3bH0kbGliLmV4cCAtaCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworICAgICAgICAgICAgICAkQ0MgLUckYWxsb3dfdW5kZWZpbmVkX2ZsYWcgJHdsLU0gJHdsJGxpYi5leHAgLWgkc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKIAogCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLVIkbGliZGlyJwogCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubwpAQCAtNjcyNSw3ICs2ODMzLDcgQEAKIAkgICAgICBzb2xhcmlzMi5bWzAtNV1dIHwgc29sYXJpczIuW1swLTVdXS4qKSA7OwogCSAgICAgICopCiAJCSMgVGhlIGNvbXBpbGVyIGRyaXZlciB3aWxsIGNvbWJpbmUgYW5kIHJlb3JkZXIgbGlua2VyIG9wdGlvbnMsCi0JCSMgYnV0IHVuZGVyc3RhbmRzIGAteiBsaW5rZXJfZmxhZycuCisJCSMgYnV0IHVuZGVyc3RhbmRzICcteiBsaW5rZXJfZmxhZycuCiAJICAgICAgICAjIFN1cHBvcnRlZCBzaW5jZSBTb2xhcmlzIDIuNiAobWF5YmUgMi41LjE/KQogCQlfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9Jy16IGFsbGV4dHJhY3QkY29udmVuaWVuY2UgLXogZGVmYXVsdGV4dHJhY3QnCiAJICAgICAgICA7OwpAQCAtNjc0MiwzMCArNjg1MCwzMCBAQAogCSAgICA7OwogICAgICAgICAgIGdjeCopCiAJICAgICMgR3JlZW4gSGlsbHMgQysrIENvbXBpbGVyCi0JICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1oICR3bCRzb25hbWUgLW8gJGxpYicKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1oICR3bCRzb25hbWUgLW8gJGxpYicKIAogCSAgICAjIFRoZSBDKysgY29tcGlsZXIgbXVzdCBiZSB1c2VkIHRvIGNyZWF0ZSB0aGUgYXJjaGl2ZS4KIAkgICAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAkTERGTEFHUyAtYXJjaGl2ZSAtbyAkb2xkbGliICRvbGRvYmpzJwogCSAgICA7OwogICAgICAgICAgICopCiAJICAgICMgR05VIEMrKyBjb21waWxlciB3aXRoIFNvbGFyaXMgbGlua2VyCi0JICAgIGlmIHRlc3QgIiRHWFgiID0geWVzICYmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgotCSAgICAgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR7d2x9LXogJHt3bH1kZWZzJworCSAgICBpZiB0ZXN0IHllcyxubyA9ICIkR1hYLCR3aXRoX2dudV9sZCI7IHRoZW4KKwkgICAgICBfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAkd2wteiAke3dsfWRlZnMnCiAJICAgICAgaWYgJENDIC0tdmVyc2lvbiB8ICRHUkVQIC12ICdeMlwuNycgPiAvZGV2L251bGw7IHRoZW4KLQkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbm9zdGRsaWIgJExERkxBR1MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWggJHdsJHNvbmFtZSAtbyAkbGliJworCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLWggJHdsJHNvbmFtZSAtbyAkbGliJwogCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KLQkJICAkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW5vc3RkbGliICR7d2x9LU0gJHdsJGxpYi5leHAgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworICAgICAgICAgICAgICAgICAgJENDIC1zaGFyZWQgJHBpY19mbGFnIC1ub3N0ZGxpYiAkd2wtTSAkd2wkbGliLmV4cCAkd2wtaCAkd2wkc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKIAogCSAgICAgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cwogCSAgICAgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCiAJICAgICAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KIAkgICAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQIC12ICJeQ29uZmlndXJlZCB3aXRoOiIgfCAkR1JFUCAiXC1MIicKIAkgICAgICBlbHNlCi0JICAgICAgICAjIGcrKyAyLjcgYXBwZWFycyB0byByZXF1aXJlIGAtRycgTk9UIGAtc2hhcmVkJyBvbiB0aGlzCisJICAgICAgICAjIGcrKyAyLjcgYXBwZWFycyB0byByZXF1aXJlICctRycgTk9UICctc2hhcmVkJyBvbiB0aGlzCiAJICAgICAgICAjIHBsYXRmb3JtLgotCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HIC1ub3N0ZGxpYiAkTERGTEFHUyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCAkd2wkc29uYW1lIC1vICRsaWInCisJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtaCAkd2wkc29uYW1lIC1vICRsaWInCiAJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgotCQkgICRDQyAtRyAtbm9zdGRsaWIgJHt3bH0tTSAkd2wkbGliLmV4cCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisgICAgICAgICAgICAgICAgICAkQ0MgLUcgLW5vc3RkbGliICR3bC1NICR3bCRsaWIuZXhwICR3bC1oICR3bCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJwogCiAJICAgICAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCiAJICAgICAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KQEAgLTY3NzMsMTEgKzY4ODEsMTEgQEAKIAkgICAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLUcgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCAkR1JFUCAtdiAiXkNvbmZpZ3VyZWQgd2l0aDoiIHwgJEdSRVAgIlwtTCInCiAJICAgICAgZmkKIAotCSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1SICR3bCRsaWJkaXInCisJICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bC1SICR3bCRsaWJkaXInCiAJICAgICAgY2FzZSAkaG9zdF9vcyBpbgogCQlzb2xhcmlzMi5bWzAtNV1dIHwgc29sYXJpczIuW1swLTVdXS4qKSA7OwogCQkqKQotCQkgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0teiAke3dsfWFsbGV4dHJhY3QkY29udmVuaWVuY2UgJHt3bH0teiAke3dsfWRlZmF1bHRleHRyYWN0JworCQkgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHdsLXogJHt3bH1hbGxleHRyYWN0JGNvbnZlbmllbmNlICR3bC16ICR7d2x9ZGVmYXVsdGV4dHJhY3QnCiAJCSAgOzsKIAkgICAgICBlc2FjCiAJICAgIGZpCkBAIC02Nzg2LDUyICs2ODk0LDUyIEBACiAgICAgICAgIDs7CiAKICAgICBzeXN2NCp1dzIqIHwgc3lzdjVPcGVuVU5JWCogfCBzeXN2NVVuaXhXYXJlNy5bWzAxXV0uW1sxMF1dKiB8IHVuaXh3YXJlNyogfCBzY28zLjJ2NS4wLltbMDI0XV0qKQotICAgICAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScke3dsfS16LHRleHQnCisgICAgICBfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyR3bC16LHRleHQnCiAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCiAgICAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCiAKICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCiAgICAgICAgIENDKikKLQkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1HICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtRyAkd2wtQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHdsLWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKIAkgIDs7CiAJKikKLQkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR3bC1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwogCSAgOzsKICAgICAgIGVzYWMKICAgICAgIDs7CiAKICAgICAgIHN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiopCi0JIyBOb3RlOiBXZSBjYW4gTk9UIHVzZSAteiBkZWZzIGFzIHdlIG1pZ2h0IGRlc2lyZSwgYmVjYXVzZSB3ZSBkbyBub3QKKwkjIE5vdGU6IFdlIENBTk5PVCB1c2UgLXogZGVmcyBhcyB3ZSBtaWdodCBkZXNpcmUsIGJlY2F1c2Ugd2UgZG8gbm90CiAJIyBsaW5rIHdpdGggLWxjLCBhbmQgdGhhdCB3b3VsZCBjYXVzZSBhbnkgc3ltYm9scyB1c2VkIGZyb20gbGliYyB0bwogCSMgYWx3YXlzIGJlIHVucmVzb2x2ZWQsIHdoaWNoIG1lYW5zIGp1c3QgYWJvdXQgbm8gbGlicmFyeSB3b3VsZAogCSMgZXZlciBsaW5rIGNvcnJlY3RseS4gIElmIHdlJ3JlIG5vdCB1c2luZyBHTlUgbGQgd2UgdXNlIC16IHRleHQKIAkjIHRob3VnaCwgd2hpY2ggZG9lcyBjYXRjaCBzb21lIGJhZCBzeW1ib2xzIGJ1dCBpc24ndCBhcyBoZWF2eS1oYW5kZWQKIAkjIGFzIC16IGRlZnMuCi0JX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScke3dsfS16LHRleHQnCi0JX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScke3dsfS16LG5vZGVmcycKKwlfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyR3bC16LHRleHQnCisJX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPSckd2wteixub2RlZnMnCiAJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCiAJX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KLQlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tUiwkbGliZGlyJworCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSckd2wtUiwkbGliZGlyJwogCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPSc6JwogCV9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcwotCV9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUJleHBvcnQnCisJX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHdsLUJleHBvcnQnCiAJcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJwogCiAJY2FzZSAkY2NfYmFzZW5hbWUgaW4KICAgICAgICAgICBDQyopCi0JICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLUcgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcgJHdsLWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtRyAkd2wtQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHdsLWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKIAkgICAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtVHByZWxpbmtfb2JqZWN0cyAkb2xkb2Jqc34KLQkgICAgICAnIiRfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKSIKKyAgICAgICAgICAgICAgJyIkX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSkiCiAJICAgIF9MVF9UQUdWQVIocmVsb2FkX2NtZHMsICQxKT0nJENDIC1UcHJlbGlua19vYmplY3RzICRyZWxvYWRfb2Jqc34KLQkgICAgICAnIiRfTFRfVEFHVkFSKHJlbG9hZF9jbWRzLCAkMSkiCisgICAgICAgICAgICAgICciJF9MVF9UQUdWQVIocmVsb2FkX2NtZHMsICQxKSIKIAkgICAgOzsKIAkgICopCi0JICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHdsLWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR3bC1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwogCSAgICA7OwogCWVzYWMKICAgICAgIDs7CkBAIC02ODYyLDEwICs2OTcwLDEwIEBACiAgICAgZXNhYwogCiAgICAgQUNfTVNHX1JFU1VMVChbJF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSldKQotICAgIHRlc3QgIiRfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpIiA9IG5vICYmIGNhbl9idWlsZF9zaGFyZWQ9bm8KKyAgICB0ZXN0IG5vID0gIiRfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpIiAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCiAKLSAgICBfTFRfVEFHVkFSKEdDQywgJDEpPSIkR1hYIgotICAgIF9MVF9UQUdWQVIoTEQsICQxKT0iJExEIgorICAgIF9MVF9UQUdWQVIoR0NDLCAkMSk9JEdYWAorICAgIF9MVF9UQUdWQVIoTEQsICQxKT0kTEQKIAogICAgICMjIENBVkVBVCBFTVBUT1I6CiAgICAgIyMgVGhlcmUgaXMgbm8gZW5jYXBzdWxhdGlvbiB3aXRoaW4gdGhlIGZvbGxvd2luZyBtYWNyb3MsIGRvIG5vdCBjaGFuZ2UKQEAgLTY4OTIsNyArNzAwMCw3IEBACiAgIGx0X2N2X3BhdGhfTEQ9JGx0X3NhdmVfcGF0aF9MRAogICBsdF9jdl9wcm9nX2dudV9sZGN4eD0kbHRfY3ZfcHJvZ19nbnVfbGQKICAgbHRfY3ZfcHJvZ19nbnVfbGQ9JGx0X3NhdmVfd2l0aF9nbnVfbGQKLWZpICMgdGVzdCAiJF9sdF9jYXVnaHRfQ1hYX2Vycm9yIiAhPSB5ZXMKK2ZpICMgdGVzdCB5ZXMgIT0gIiRfbHRfY2F1Z2h0X0NYWF9lcnJvciIKIAogQUNfTEFOR19QT1AKIF0pIyBfTFRfTEFOR19DWFhfQ09ORklHCkBAIC02OTE0LDkgKzcwMjIsOSBAQAogQUNfUkVRVUlSRShbX0xUX1BST0dfRUNIT19CQUNLU0xBU0hdKQogZnVuY19zdHJpcG5hbWVfY25mICgpCiB7Ci0gIGNhc2UgJHsyfSBpbgotICAuKikgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiJHszfSIgfCAkU0VEICJzJV4kezF9JSU7IHMlXFxcXCR7Mn1cJCUlImA7OwotICAqKSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiJHszfSIgfCAkU0VEICJzJV4kezF9JSU7IHMlJHsyfVwkJSUiYDs7CisgIGNhc2UgQFN8QDIgaW4KKyAgLiopIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIkBTfEAzIiB8ICRTRUQgInMlXkBTfEAxJSU7IHMlXFxcXEBTfEAyXCQlJSJgOzsKKyAgKikgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIkBTfEAzIiB8ICRTRUQgInMlXkBTfEAxJSU7IHMlQFN8QDJcJCUlImA7OwogICBlc2FjCiB9ICMgZnVuY19zdHJpcG5hbWVfY25mCiBdKSMgX0xUX0ZVTkNfU1RSSVBOQU1FX0NORgpAQCAtNzAwNCwxMyArNzExMiwxMyBAQAogICBwcmVfdGVzdF9vYmplY3RfZGVwc19kb25lPW5vCiAKICAgZm9yIHAgaW4gYGV2YWwgIiRvdXRwdXRfdmVyYm9zZV9saW5rX2NtZCJgOyBkbwotICAgIGNhc2UgJHtwcmV2fSR7cH0gaW4KKyAgICBjYXNlICRwcmV2JHAgaW4KIAogICAgIC1MKiB8IC1SKiB8IC1sKikKICAgICAgICAjIFNvbWUgY29tcGlsZXJzIHBsYWNlIHNwYWNlIGJldHdlZW4gIi17TCxSfSIgYW5kIHRoZSBwYXRoLgogICAgICAgICMgUmVtb3ZlIHRoZSBzcGFjZS4KLSAgICAgICBpZiB0ZXN0ICRwID0gIi1MIiB8fAotICAgICAgICAgIHRlc3QgJHAgPSAiLVIiOyB0aGVuCisgICAgICAgaWYgdGVzdCB4LUwgPSAiJHAiIHx8CisgICAgICAgICAgdGVzdCB4LVIgPSAiJHAiOyB0aGVuCiAJIHByZXY9JHAKIAkgY29udGludWUKICAgICAgICBmaQpAQCAtNzAyNiwxNiArNzEzNCwxNiBAQAogICAgICAgIGNhc2UgJHAgaW4KICAgICAgICA9KikgZnVuY19zdHJpcG5hbWVfY25mICc9JyAnJyAiJHAiOyBwPSRsdF9zeXNyb290JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCA7OwogICAgICAgIGVzYWMKLSAgICAgICBpZiB0ZXN0ICIkcHJlX3Rlc3Rfb2JqZWN0X2RlcHNfZG9uZSIgPSBubzsgdGhlbgotCSBjYXNlICR7cHJldn0gaW4KKyAgICAgICBpZiB0ZXN0IG5vID0gIiRwcmVfdGVzdF9vYmplY3RfZGVwc19kb25lIjsgdGhlbgorCSBjYXNlICRwcmV2IGluCiAJIC1MIHwgLVIpCiAJICAgIyBJbnRlcm5hbCBjb21waWxlciBsaWJyYXJ5IHBhdGhzIHNob3VsZCBjb21lIGFmdGVyIHRob3NlCiAJICAgIyBwcm92aWRlZCB0aGUgdXNlci4gIFRoZSBwb3N0ZGVwcyBhbHJlYWR5IGNvbWUgYWZ0ZXIgdGhlCiAJICAgIyB1c2VyIHN1cHBsaWVkIGxpYnMgc28gdGhlcmUgaXMgbm8gbmVlZCB0byBwcm9jZXNzIHRoZW0uCiAJICAgaWYgdGVzdCAteiAiJF9MVF9UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoLCAkMSkiOyB0aGVuCi0JICAgICBfTFRfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCwgJDEpPSIke3ByZXZ9JHtwfSIKKwkgICAgIF9MVF9UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoLCAkMSk9JHByZXYkcAogCSAgIGVsc2UKLQkgICAgIF9MVF9UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoLCAkMSk9IiR7X0xUX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX3BhdGgsICQxKX0gJHtwcmV2fSR7cH0iCisJICAgICBfTFRfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCwgJDEpPSIke19MVF9UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoLCAkMSl9ICRwcmV2JHAiCiAJICAgZmkKIAkgICA7OwogCSAjIFRoZSAiLWwiIGNhc2Ugd291bGQgbmV2ZXIgY29tZSBiZWZvcmUgdGhlIG9iamVjdCBiZWluZwpAQCAtNzA0Myw5ICs3MTUxLDkgQEAKIAkgZXNhYwogICAgICAgIGVsc2UKIAkgaWYgdGVzdCAteiAiJF9MVF9UQUdWQVIocG9zdGRlcHMsICQxKSI7IHRoZW4KLQkgICBfTFRfVEFHVkFSKHBvc3RkZXBzLCAkMSk9IiR7cHJldn0ke3B9IgorCSAgIF9MVF9UQUdWQVIocG9zdGRlcHMsICQxKT0kcHJldiRwCiAJIGVsc2UKLQkgICBfTFRfVEFHVkFSKHBvc3RkZXBzLCAkMSk9IiR7X0xUX1RBR1ZBUihwb3N0ZGVwcywgJDEpfSAke3ByZXZ9JHtwfSIKKwkgICBfTFRfVEFHVkFSKHBvc3RkZXBzLCAkMSk9IiR7X0xUX1RBR1ZBUihwb3N0ZGVwcywgJDEpfSAkcHJldiRwIgogCSBmaQogICAgICAgIGZpCiAgICAgICAgcHJldj0KQEAgLTcwNjAsMTUgKzcxNjgsMTUgQEAKIAkgY29udGludWUKICAgICAgICBmaQogCi0gICAgICAgaWYgdGVzdCAiJHByZV90ZXN0X29iamVjdF9kZXBzX2RvbmUiID0gbm87IHRoZW4KKyAgICAgICBpZiB0ZXN0IG5vID0gIiRwcmVfdGVzdF9vYmplY3RfZGVwc19kb25lIjsgdGhlbgogCSBpZiB0ZXN0IC16ICIkX0xUX1RBR1ZBUihwcmVkZXBfb2JqZWN0cywgJDEpIjsgdGhlbgotCSAgIF9MVF9UQUdWQVIocHJlZGVwX29iamVjdHMsICQxKT0iJHAiCisJICAgX0xUX1RBR1ZBUihwcmVkZXBfb2JqZWN0cywgJDEpPSRwCiAJIGVsc2UKIAkgICBfTFRfVEFHVkFSKHByZWRlcF9vYmplY3RzLCAkMSk9IiRfTFRfVEFHVkFSKHByZWRlcF9vYmplY3RzLCAkMSkgJHAiCiAJIGZpCiAgICAgICAgZWxzZQogCSBpZiB0ZXN0IC16ICIkX0xUX1RBR1ZBUihwb3N0ZGVwX29iamVjdHMsICQxKSI7IHRoZW4KLQkgICBfTFRfVEFHVkFSKHBvc3RkZXBfb2JqZWN0cywgJDEpPSIkcCIKKwkgICBfTFRfVEFHVkFSKHBvc3RkZXBfb2JqZWN0cywgJDEpPSRwCiAJIGVsc2UKIAkgICBfTFRfVEFHVkFSKHBvc3RkZXBfb2JqZWN0cywgJDEpPSIkX0xUX1RBR1ZBUihwb3N0ZGVwX29iamVjdHMsICQxKSAkcCIKIAkgZmkKQEAgLTcxMTUsNyArNzIyMyw3IEBACiAgICAgICA7OwogICAgIGVzYWMKIAotICAgIGlmIHRlc3QgIiRzb2xhcmlzX3VzZV9zdGxwb3J0NCIgIT0geWVzOyB0aGVuCisgICAgaWYgdGVzdCB5ZXMgIT0gIiRzb2xhcmlzX3VzZV9zdGxwb3J0NCI7IHRoZW4KICAgICAgIF9MVF9UQUdWQVIocG9zdGRlcHMsJDEpPSctbGlicmFyeT1Dc3RkIC1saWJyYXJ5PUNydW4nCiAgICAgZmkKICAgICA7OwpAQCAtNzEzOCw3ICs3MjQ2LDcgQEAKICAgICAjIEFkZGluZyB0aGlzIHJlcXVpcmVzIGEga25vd24tZ29vZCBzZXR1cCBvZiBzaGFyZWQgbGlicmFyaWVzIGZvcgogICAgICMgU3VuIGNvbXBpbGVyIHZlcnNpb25zIGJlZm9yZSA1LjYsIGVsc2UgUElDIG9iamVjdHMgZnJvbSBhbiBvbGQKICAgICAjIGFyY2hpdmUgd2lsbCBiZSBsaW5rZWQgaW50byB0aGUgb3V0cHV0LCBsZWFkaW5nIHRvIHN1YnRsZSBidWdzLgotICAgIGlmIHRlc3QgIiRzb2xhcmlzX3VzZV9zdGxwb3J0NCIgIT0geWVzOyB0aGVuCisgICAgaWYgdGVzdCB5ZXMgIT0gIiRzb2xhcmlzX3VzZV9zdGxwb3J0NCI7IHRoZW4KICAgICAgIF9MVF9UQUdWQVIocG9zdGRlcHMsJDEpPSctbGlicmFyeT1Dc3RkIC1saWJyYXJ5PUNydW4nCiAgICAgZmkKICAgICA7OwpAQCAtNzE1Miw3ICs3MjYwLDcgQEAKIGVzYWMKICBfTFRfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfZGlycywgJDEpPQogaWYgdGVzdCAtbiAiJHtfTFRfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCwgJDEpfSI7IHRoZW4KLSBfTFRfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfZGlycywgJDEpPWBlY2hvICIgJHtfTFRfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCwgJDEpfSIgfCAke1NFRH0gLWUgJ3MhIC1MISAhZycgLWUgJ3MhXiAhISdgCisgX0xUX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX2RpcnMsICQxKT1gZWNobyAiICR7X0xUX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX3BhdGgsICQxKX0iIHwgJFNFRCAtZSAncyEgLUwhICFnJyAtZSAncyFeICEhJ2AKIGZpCiBfTFRfVEFHREVDTChbXSwgW2NvbXBpbGVyX2xpYl9zZWFyY2hfZGlyc10sIFsxXSwKICAgICBbVGhlIGRpcmVjdG9yaWVzIHNlYXJjaGVkIGJ5IHRoaXMgY29tcGlsZXIgd2hlbiBjcmVhdGluZyBhIHNoYXJlZCBsaWJyYXJ5XSkKQEAgLTcxNzIsMTAgKzcyODAsMTAgQEAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgRW5zdXJlIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGZvciBhIEZvcnRyYW4gNzcgY29tcGlsZXIgYXJlCiAjIHN1aXRhYmx5IGRlZmluZWQuICBUaGVzZSB2YXJpYWJsZXMgYXJlIHN1YnNlcXVlbnRseSB1c2VkIGJ5IF9MVF9DT05GSUcKLSMgdG8gd3JpdGUgdGhlIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gdG8gYGxpYnRvb2wnLgorIyB0byB3cml0ZSB0aGUgY29tcGlsZXIgY29uZmlndXJhdGlvbiB0byAnbGlidG9vbCcuCiBtNF9kZWZ1bihbX0xUX0xBTkdfRjc3X0NPTkZJR10sCiBbQUNfTEFOR19QVVNIKEZvcnRyYW4gNzcpCi1pZiB0ZXN0IC16ICIkRjc3IiB8fCB0ZXN0ICJYJEY3NyIgPSAiWG5vIjsgdGhlbgoraWYgdGVzdCAteiAiJEY3NyIgfHwgdGVzdCBubyA9ICIkRjc3IjsgdGhlbgogICBfbHRfZGlzYWJsZV9GNzc9eWVzCiBmaQogCkBAIC03MjEyLDcgKzczMjAsNyBAQAogIyB0aGUgRjc3IGNvbXBpbGVyIGlzbid0IHdvcmtpbmcuICBTb21lIHZhcmlhYmxlcyAobGlrZSBlbmFibGVfc2hhcmVkKQogIyBhcmUgY3VycmVudGx5IGFzc3VtZWQgdG8gYXBwbHkgdG8gYWxsIGNvbXBpbGVycyBvbiB0aGlzIHBsYXRmb3JtLAogIyBhbmQgd2lsbCBiZSBjb3JydXB0ZWQgYnkgc2V0dGluZyB0aGVtIGJhc2VkIG9uIGEgbm9uLXdvcmtpbmcgY29tcGlsZXIuCi1pZiB0ZXN0ICIkX2x0X2Rpc2FibGVfRjc3IiAhPSB5ZXM7IHRoZW4KK2lmIHRlc3QgeWVzICE9ICIkX2x0X2Rpc2FibGVfRjc3IjsgdGhlbgogICAjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cwogICBsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9IlwKICAgICAgIHN1YnJvdXRpbmUgdApAQCAtNzIzNCw3ICs3MzQyLDcgQEAKICAgX0xUX0xJTktFUl9CT0lMRVJQTEFURQogCiAgICMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCi0gIGx0X3NhdmVfQ0M9IiRDQyIKKyAgbHRfc2F2ZV9DQz0kQ0MKICAgbHRfc2F2ZV9HQ0M9JEdDQwogICBsdF9zYXZlX0NGTEFHUz0kQ0ZMQUdTCiAgIENDPSR7Rjc3LSJmNzcifQpAQCAtNzI0OCwyMSArNzM1NiwyMSBAQAogICAgIEFDX01TR19SRVNVTFQoWyRjYW5fYnVpbGRfc2hhcmVkXSkKIAogICAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzXSkKLSAgICB0ZXN0ICIkY2FuX2J1aWxkX3NoYXJlZCIgPSAibm8iICYmIGVuYWJsZV9zaGFyZWQ9bm8KKyAgICB0ZXN0IG5vID0gIiRjYW5fYnVpbGRfc2hhcmVkIiAmJiBlbmFibGVfc2hhcmVkPW5vCiAKICAgICAjIE9uIEFJWCwgc2hhcmVkIGxpYnJhcmllcyBhbmQgc3RhdGljIGxpYnJhcmllcyB1c2UgdGhlIHNhbWUgbmFtZXNwYWNlLCBhbmQKICAgICAjIGFyZSBhbGwgYnVpbHQgZnJvbSBQSUMuCiAgICAgY2FzZSAkaG9zdF9vcyBpbgogICAgICAgYWl4MyopCi0gICAgICAgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiBlbmFibGVfc3RhdGljPW5vCisgICAgICAgIHRlc3QgeWVzID0gIiRlbmFibGVfc2hhcmVkIiAmJiBlbmFibGVfc3RhdGljPW5vCiAgICAgICAgIGlmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCiAgICAgICAgICAgYXJjaGl2ZV9jbWRzPSIkYXJjaGl2ZV9jbWRzflwkUkFOTElCIFwkbGliIgogICAgICAgICAgIHBvc3RpbnN0YWxsX2NtZHM9JyRSQU5MSUIgJGxpYicKICAgICAgICAgZmkKICAgICAgICAgOzsKICAgICAgIGFpeFtbNC05XV0qKQotCWlmIHRlc3QgIiRob3N0X2NwdSIgIT0gaWE2NCAmJiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSBubyA7IHRoZW4KLQkgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiBlbmFibGVfc3RhdGljPW5vCisJaWYgdGVzdCBpYTY0ICE9ICIkaG9zdF9jcHUiICYmIHRlc3Qgbm8gPSAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciOyB0aGVuCisJICB0ZXN0IHllcyA9ICIkZW5hYmxlX3NoYXJlZCIgJiYgZW5hYmxlX3N0YXRpYz1ubwogCWZpCiAgICAgICAgIDs7CiAgICAgZXNhYwpAQCAtNzI3MCwxMSArNzM3OCwxMSBAQAogCiAgICAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXNdKQogICAgICMgTWFrZSBzdXJlIGVpdGhlciBlbmFibGVfc2hhcmVkIG9yIGVuYWJsZV9zdGF0aWMgaXMgeWVzLgotICAgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyB8fCBlbmFibGVfc3RhdGljPXllcworICAgIHRlc3QgeWVzID0gIiRlbmFibGVfc2hhcmVkIiB8fCBlbmFibGVfc3RhdGljPXllcwogICAgIEFDX01TR19SRVNVTFQoWyRlbmFibGVfc3RhdGljXSkKIAotICAgIF9MVF9UQUdWQVIoR0NDLCAkMSk9IiRHNzciCi0gICAgX0xUX1RBR1ZBUihMRCwgJDEpPSIkTEQiCisgICAgX0xUX1RBR1ZBUihHQ0MsICQxKT0kRzc3CisgICAgX0xUX1RBR1ZBUihMRCwgJDEpPSRMRAogCiAgICAgIyMgQ0FWRUFUIEVNUFRPUjoKICAgICAjIyBUaGVyZSBpcyBubyBlbmNhcHN1bGF0aW9uIHdpdGhpbiB0aGUgZm9sbG93aW5nIG1hY3JvcywgZG8gbm90IGNoYW5nZQpAQCAtNzI5MSw5ICs3Mzk5LDkgQEAKICAgZmkgIyB0ZXN0IC1uICIkY29tcGlsZXIiCiAKICAgR0NDPSRsdF9zYXZlX0dDQwotICBDQz0iJGx0X3NhdmVfQ0MiCi0gIENGTEFHUz0iJGx0X3NhdmVfQ0ZMQUdTIgotZmkgIyB0ZXN0ICIkX2x0X2Rpc2FibGVfRjc3IiAhPSB5ZXMKKyAgQ0M9JGx0X3NhdmVfQ0MKKyAgQ0ZMQUdTPSRsdF9zYXZlX0NGTEFHUworZmkgIyB0ZXN0IHllcyAhPSAiJF9sdF9kaXNhYmxlX0Y3NyIKIAogQUNfTEFOR19QT1AKIF0pIyBfTFRfTEFOR19GNzdfQ09ORklHCkBAIC03MzAzLDExICs3NDExLDExIEBACiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgRW5zdXJlIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGZvciBhIEZvcnRyYW4gY29tcGlsZXIgYXJlCiAjIHN1aXRhYmx5IGRlZmluZWQuICBUaGVzZSB2YXJpYWJsZXMgYXJlIHN1YnNlcXVlbnRseSB1c2VkIGJ5IF9MVF9DT05GSUcKLSMgdG8gd3JpdGUgdGhlIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gdG8gYGxpYnRvb2wnLgorIyB0byB3cml0ZSB0aGUgY29tcGlsZXIgY29uZmlndXJhdGlvbiB0byAnbGlidG9vbCcuCiBtNF9kZWZ1bihbX0xUX0xBTkdfRkNfQ09ORklHXSwKIFtBQ19MQU5HX1BVU0goRm9ydHJhbikKIAotaWYgdGVzdCAteiAiJEZDIiB8fCB0ZXN0ICJYJEZDIiA9ICJYbm8iOyB0aGVuCitpZiB0ZXN0IC16ICIkRkMiIHx8IHRlc3Qgbm8gPSAiJEZDIjsgdGhlbgogICBfbHRfZGlzYWJsZV9GQz15ZXMKIGZpCiAKQEAgLTczNDQsNyArNzQ1Miw3IEBACiAjIHRoZSBGQyBjb21waWxlciBpc24ndCB3b3JraW5nLiAgU29tZSB2YXJpYWJsZXMgKGxpa2UgZW5hYmxlX3NoYXJlZCkKICMgYXJlIGN1cnJlbnRseSBhc3N1bWVkIHRvIGFwcGx5IHRvIGFsbCBjb21waWxlcnMgb24gdGhpcyBwbGF0Zm9ybSwKICMgYW5kIHdpbGwgYmUgY29ycnVwdGVkIGJ5IHNldHRpbmcgdGhlbSBiYXNlZCBvbiBhIG5vbi13b3JraW5nIGNvbXBpbGVyLgotaWYgdGVzdCAiJF9sdF9kaXNhYmxlX0ZDIiAhPSB5ZXM7IHRoZW4KK2lmIHRlc3QgeWVzICE9ICIkX2x0X2Rpc2FibGVfRkMiOyB0aGVuCiAgICMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBjb21waWxlIHRlc3RzCiAgIGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZT0iXAogICAgICAgc3Vicm91dGluZSB0CkBAIC03MzY2LDcgKzc0NzQsNyBAQAogICBfTFRfTElOS0VSX0JPSUxFUlBMQVRFCiAKICAgIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KLSAgbHRfc2F2ZV9DQz0iJENDIgorICBsdF9zYXZlX0NDPSRDQwogICBsdF9zYXZlX0dDQz0kR0NDCiAgIGx0X3NhdmVfQ0ZMQUdTPSRDRkxBR1MKICAgQ0M9JHtGQy0iZjk1In0KQEAgLTczODIsMjEgKzc0OTAsMjEgQEAKICAgICBBQ19NU0dfUkVTVUxUKFskY2FuX2J1aWxkX3NoYXJlZF0pCiAKICAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllc10pCi0gICAgdGVzdCAiJGNhbl9idWlsZF9zaGFyZWQiID0gIm5vIiAmJiBlbmFibGVfc2hhcmVkPW5vCisgICAgdGVzdCBubyA9ICIkY2FuX2J1aWxkX3NoYXJlZCIgJiYgZW5hYmxlX3NoYXJlZD1ubwogCiAgICAgIyBPbiBBSVgsIHNoYXJlZCBsaWJyYXJpZXMgYW5kIHN0YXRpYyBsaWJyYXJpZXMgdXNlIHRoZSBzYW1lIG5hbWVzcGFjZSwgYW5kCiAgICAgIyBhcmUgYWxsIGJ1aWx0IGZyb20gUElDLgogICAgIGNhc2UgJGhvc3Rfb3MgaW4KICAgICAgIGFpeDMqKQotICAgICAgICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgZW5hYmxlX3N0YXRpYz1ubworICAgICAgICB0ZXN0IHllcyA9ICIkZW5hYmxlX3NoYXJlZCIgJiYgZW5hYmxlX3N0YXRpYz1ubwogICAgICAgICBpZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgogICAgICAgICAgIGFyY2hpdmVfY21kcz0iJGFyY2hpdmVfY21kc35cJFJBTkxJQiBcJGxpYiIKICAgICAgICAgICBwb3N0aW5zdGFsbF9jbWRzPSckUkFOTElCICRsaWInCiAgICAgICAgIGZpCiAgICAgICAgIDs7CiAgICAgICBhaXhbWzQtOV1dKikKLQlpZiB0ZXN0ICIkaG9zdF9jcHUiICE9IGlhNjQgJiYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0gbm8gOyB0aGVuCi0JICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgZW5hYmxlX3N0YXRpYz1ubworCWlmIHRlc3QgaWE2NCAhPSAiJGhvc3RfY3B1IiAmJiB0ZXN0IG5vID0gIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIjsgdGhlbgorCSAgdGVzdCB5ZXMgPSAiJGVuYWJsZV9zaGFyZWQiICYmIGVuYWJsZV9zdGF0aWM9bm8KIAlmaQogICAgICAgICA7OwogICAgIGVzYWMKQEAgLTc0MDQsMTEgKzc1MTIsMTEgQEAKIAogICAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzXSkKICAgICAjIE1ha2Ugc3VyZSBlaXRoZXIgZW5hYmxlX3NoYXJlZCBvciBlbmFibGVfc3RhdGljIGlzIHllcy4KLSAgICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgfHwgZW5hYmxlX3N0YXRpYz15ZXMKKyAgICB0ZXN0IHllcyA9ICIkZW5hYmxlX3NoYXJlZCIgfHwgZW5hYmxlX3N0YXRpYz15ZXMKICAgICBBQ19NU0dfUkVTVUxUKFskZW5hYmxlX3N0YXRpY10pCiAKLSAgICBfTFRfVEFHVkFSKEdDQywgJDEpPSIkYWNfY3ZfZmNfY29tcGlsZXJfZ251IgotICAgIF9MVF9UQUdWQVIoTEQsICQxKT0iJExEIgorICAgIF9MVF9UQUdWQVIoR0NDLCAkMSk9JGFjX2N2X2ZjX2NvbXBpbGVyX2dudQorICAgIF9MVF9UQUdWQVIoTEQsICQxKT0kTEQKIAogICAgICMjIENBVkVBVCBFTVBUT1I6CiAgICAgIyMgVGhlcmUgaXMgbm8gZW5jYXBzdWxhdGlvbiB3aXRoaW4gdGhlIGZvbGxvd2luZyBtYWNyb3MsIGRvIG5vdCBjaGFuZ2UKQEAgLTc0MjgsNyArNzUzNiw3IEBACiAgIEdDQz0kbHRfc2F2ZV9HQ0MKICAgQ0M9JGx0X3NhdmVfQ0MKICAgQ0ZMQUdTPSRsdF9zYXZlX0NGTEFHUwotZmkgIyB0ZXN0ICIkX2x0X2Rpc2FibGVfRkMiICE9IHllcworZmkgIyB0ZXN0IHllcyAhPSAiJF9sdF9kaXNhYmxlX0ZDIgogCiBBQ19MQU5HX1BPUAogXSkjIF9MVF9MQU5HX0ZDX0NPTkZJRwpAQCAtNzQzOCw3ICs3NTQ2LDcgQEAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgRW5zdXJlIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGZvciB0aGUgR05VIEphdmEgQ29tcGlsZXIgY29tcGlsZXIKICMgYXJlIHN1aXRhYmx5IGRlZmluZWQuICBUaGVzZSB2YXJpYWJsZXMgYXJlIHN1YnNlcXVlbnRseSB1c2VkIGJ5IF9MVF9DT05GSUcKLSMgdG8gd3JpdGUgdGhlIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gdG8gYGxpYnRvb2wnLgorIyB0byB3cml0ZSB0aGUgY29tcGlsZXIgY29uZmlndXJhdGlvbiB0byAnbGlidG9vbCcuCiBtNF9kZWZ1bihbX0xUX0xBTkdfR0NKX0NPTkZJR10sCiBbQUNfUkVRVUlSRShbTFRfUFJPR19HQ0pdKWRubAogQUNfTEFOR19TQVZFCkBAIC03NDcyLDcgKzc1ODAsNyBAQAogQ0ZMQUdTPSRHQ0pGTEFHUwogY29tcGlsZXI9JENDCiBfTFRfVEFHVkFSKGNvbXBpbGVyLCAkMSk9JENDCi1fTFRfVEFHVkFSKExELCAkMSk9IiRMRCIKK19MVF9UQUdWQVIoTEQsICQxKT0kTEQKIF9MVF9DQ19CQVNFTkFNRShbJGNvbXBpbGVyXSkKIAogIyBHQ0ogZGlkIG5vdCBleGlzdCBhdCB0aGUgdGltZSBHQ0MgZGlkbid0IGltcGxpY2l0bHkgbGluayBsaWJjIGluLgpAQCAtNzUwOSw3ICs3NjE3LDcgQEAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgRW5zdXJlIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGZvciB0aGUgR05VIEdvIGNvbXBpbGVyCiAjIGFyZSBzdWl0YWJseSBkZWZpbmVkLiAgVGhlc2UgdmFyaWFibGVzIGFyZSBzdWJzZXF1ZW50bHkgdXNlZCBieSBfTFRfQ09ORklHCi0jIHRvIHdyaXRlIHRoZSBjb21waWxlciBjb25maWd1cmF0aW9uIHRvIGBsaWJ0b29sJy4KKyMgdG8gd3JpdGUgdGhlIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gdG8gJ2xpYnRvb2wnLgogbTRfZGVmdW4oW19MVF9MQU5HX0dPX0NPTkZJR10sCiBbQUNfUkVRVUlSRShbTFRfUFJPR19HT10pZG5sCiBBQ19MQU5HX1NBVkUKQEAgLTc1NDMsNyArNzY1MSw3IEBACiBDRkxBR1M9JEdPRkxBR1MKIGNvbXBpbGVyPSRDQwogX0xUX1RBR1ZBUihjb21waWxlciwgJDEpPSRDQwotX0xUX1RBR1ZBUihMRCwgJDEpPSIkTEQiCitfTFRfVEFHVkFSKExELCAkMSk9JExECiBfTFRfQ0NfQkFTRU5BTUUoWyRjb21waWxlcl0pCiAKICMgR28gZGlkIG5vdCBleGlzdCBhdCB0aGUgdGltZSBHQ0MgZGlkbid0IGltcGxpY2l0bHkgbGluayBsaWJjIGluLgpAQCAtNzU4MCw3ICs3Njg4LDcgQEAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBFbnN1cmUgdGhhdCB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgZm9yIHRoZSBXaW5kb3dzIHJlc291cmNlIGNvbXBpbGVyCiAjIGFyZSBzdWl0YWJseSBkZWZpbmVkLiAgVGhlc2UgdmFyaWFibGVzIGFyZSBzdWJzZXF1ZW50bHkgdXNlZCBieSBfTFRfQ09ORklHCi0jIHRvIHdyaXRlIHRoZSBjb21waWxlciBjb25maWd1cmF0aW9uIHRvIGBsaWJ0b29sJy4KKyMgdG8gd3JpdGUgdGhlIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gdG8gJ2xpYnRvb2wnLgogbTRfZGVmdW4oW19MVF9MQU5HX1JDX0NPTkZJR10sCiBbQUNfUkVRVUlSRShbTFRfUFJPR19SQ10pZG5sCiBBQ19MQU5HX1NBVkUKQEAgLTc1OTYsNyArNzcwNCw3IEBACiBsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9J3NhbXBsZSBNRU5VIHsgTUVOVUlURU0gIiZTb3VwIiwgMTAwLCBDSEVDS0VEIH0nCiAKICMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBsaW5rIHRlc3RzCi1sdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9IiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiCitsdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9JGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZQogCiAjIGx0bWFpbiBvbmx5IHVzZXMgJENDIGZvciB0YWdnZWQgY29uZmlndXJhdGlvbnMgc28gbWFrZSBzdXJlICRDQyBpcyBzZXQuCiBfTFRfVEFHX0NPTVBJTEVSCkBAIC03NjA2LDcgKzc3MTQsNyBAQAogX0xUX0xJTktFUl9CT0lMRVJQTEFURQogCiAjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgotbHRfc2F2ZV9DQz0iJENDIgorbHRfc2F2ZV9DQz0kQ0MKIGx0X3NhdmVfQ0ZMQUdTPSRDRkxBR1MKIGx0X3NhdmVfR0NDPSRHQ0MKIEdDQz0KQEAgLTc2MzUsNyArNzc0Myw3IEBACiBbbTRfaWZkZWYoW0FDX1BST0dfR0NKXSwgW0FDX1BST0dfR0NKXSwKICAgW200X2lmZGVmKFtBXVtNX1BST0dfR0NKXSwgW0FdW01fUFJPR19HQ0pdLAogICAgIFtBQ19DSEVDS19UT09MKEdDSiwgZ2NqLCkKLSAgICAgIHRlc3QgIngke0dDSkZMQUdTK3NldH0iID0geHNldCB8fCBHQ0pGTEFHUz0iLWcgLU8yIgorICAgICAgdGVzdCBzZXQgPSAiJHtHQ0pGTEFHUytzZXR9IiB8fCBHQ0pGTEFHUz0iLWcgLU8yIgogICAgICAgQUNfU1VCU1QoR0NKRkxBR1MpXSldKVtdZG5sCiBdKQogCkBAIC03NzQ2LDcgKzc4NTQsNyBAQAogIyBBZGQgL3Vzci94cGc0L2Jpbi9zZWQgYXMgaXQgaXMgdHlwaWNhbGx5IGZvdW5kIG9uIFNvbGFyaXMKICMgYWxvbmcgd2l0aCAvYmluL3NlZCB0aGF0IHRydW5jYXRlcyBvdXRwdXQuCiBmb3IgbHRfYWNfc2VkIGluICRsdF9hY19zZWRfbGlzdCAvdXNyL3hwZzQvYmluL3NlZDsgZG8KLSAgdGVzdCAhIC1mICRsdF9hY19zZWQgJiYgY29udGludWUKKyAgdGVzdCAhIC1mICIkbHRfYWNfc2VkIiAmJiBjb250aW51ZQogICBjYXQgL2Rldi9udWxsID4gY29uZnRlc3QuaW4KICAgbHRfYWNfY291bnQ9MAogICBlY2hvICRFQ0hPX04gIjAxMjM0NTY3ODkkRUNIT19DIiA+Y29uZnRlc3QuaW4KQEAgLTc3NjMsOSArNzg3MSw5IEBACiAgICAgJGx0X2FjX3NlZCAtZSAncy9hJC8vJyA8IGNvbmZ0ZXN0Lm5sID5jb25mdGVzdC5vdXQgfHwgYnJlYWsKICAgICBjbXAgLXMgY29uZnRlc3Qub3V0IGNvbmZ0ZXN0Lm5sIHx8IGJyZWFrCiAgICAgIyAxMDAwMCBjaGFycyBhcyBpbnB1dCBzZWVtcyBtb3JlIHRoYW4gZW5vdWdoCi0gICAgdGVzdCAkbHRfYWNfY291bnQgLWd0IDEwICYmIGJyZWFrCisgICAgdGVzdCAxMCAtbHQgIiRsdF9hY19jb3VudCIgJiYgYnJlYWsKICAgICBsdF9hY19jb3VudD1gZXhwciAkbHRfYWNfY291bnQgKyAxYAotICAgIGlmIHRlc3QgJGx0X2FjX2NvdW50IC1ndCAkbHRfYWNfbWF4OyB0aGVuCisgICAgaWYgdGVzdCAiJGx0X2FjX2NvdW50IiAtZ3QgIiRsdF9hY19tYXgiOyB0aGVuCiAgICAgICBsdF9hY19tYXg9JGx0X2FjX2NvdW50CiAgICAgICBsdF9jdl9wYXRoX1NFRD0kbHRfYWNfc2VkCiAgICAgZmkKQEAgLTc3ODksMjcgKzc4OTcsNyBAQAogIyBGaW5kIG91dCB3aGV0aGVyIHRoZSBzaGVsbCBpcyBCb3VybmUgb3IgWFNJIGNvbXBhdGlibGUsCiAjIG9yIGhhcyBzb21lIG90aGVyIHVzZWZ1bCBmZWF0dXJlcy4KIG00X2RlZnVuKFtfTFRfQ0hFQ0tfU0hFTExfRkVBVFVSRVNdLAotW0FDX01TR19DSEVDS0lORyhbd2hldGhlciB0aGUgc2hlbGwgdW5kZXJzdGFuZHMgc29tZSBYU0kgY29uc3RydWN0c10pCi0jIFRyeSBzb21lIFhTSSBmZWF0dXJlcwoteHNpX3NoZWxsPW5vCi0oIF9sdF9kdW1teT0iYS9iL2MiCi0gIHRlc3QgIiR7X2x0X2R1bW15IyMqL30sJHtfbHRfZHVtbXklLyp9LCR7X2x0X2R1bW15Iz8/fSIke19sdF9kdW1teSUiJF9sdF9kdW1teSJ9LCBcCi0gICAgICA9IGMsYS9iLGIvYywgXAotICAgICYmIGV2YWwgJ3Rlc3QgJCgoIDEgKyAxICkpIC1lcSAyIFwKLSAgICAmJiB0ZXN0ICIkeyNfbHRfZHVtbXl9IiAtZXEgNScgKSA+L2Rldi9udWxsIDI+JjEgXAotICAmJiB4c2lfc2hlbGw9eWVzCi1BQ19NU0dfUkVTVUxUKFskeHNpX3NoZWxsXSkKLV9MVF9DT05GSUdfTElCVE9PTF9JTklUKFt4c2lfc2hlbGw9JyR4c2lfc2hlbGwnXSkKLQotQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRoZSBzaGVsbCB1bmRlcnN0YW5kcyAiKz0iXSkKLWx0X3NoZWxsX2FwcGVuZD1ubwotKCBmb289YmFyOyBzZXQgZm9vIGJhejsgZXZhbCAiJFsxXSs9XCRbMl0iICYmIHRlc3QgIiRmb28iID0gYmFyYmF6ICkgXAotICAgID4vZGV2L251bGwgMj4mMSBcCi0gICYmIGx0X3NoZWxsX2FwcGVuZD15ZXMKLUFDX01TR19SRVNVTFQoWyRsdF9zaGVsbF9hcHBlbmRdKQotX0xUX0NPTkZJR19MSUJUT09MX0lOSVQoW2x0X3NoZWxsX2FwcGVuZD0nJGx0X3NoZWxsX2FwcGVuZCddKQotCi1pZiAoIChNQUlMPTYwOyB1bnNldCBNQUlMKSB8fCBleGl0KSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KK1tpZiAoIChNQUlMPTYwOyB1bnNldCBNQUlMKSB8fCBleGl0KSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KICAgbHRfdW5zZXQ9dW5zZXQKIGVsc2UKICAgbHRfdW5zZXQ9ZmFsc2UKQEAgLTc4MzMsMTAyICs3OTIxLDkgQEAKIF0pIyBfTFRfQ0hFQ0tfU0hFTExfRkVBVFVSRVMKIAogCi0jIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UgKEZVTkNOQU1FLCBSRVBMQUNFTUVOVC1CT0RZKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgSW4gYCRjZmdmaWxlJywgbG9vayBmb3IgZnVuY3Rpb24gRlVOQ05BTUUgZGVsaW1pdGVkIGJ5IGBeRlVOQ05BTUUgKCkkJyBhbmQKLSMgJ159IEZVTkNOQU1FICcsIGFuZCByZXBsYWNlIGl0cyBib2R5IHdpdGggUkVQTEFDRU1FTlQtQk9EWS4KLW00X2RlZnVuKFtfTFRfUFJPR19GVU5DVElPTl9SRVBMQUNFXSwKLVtkbmwgewotc2VkIC1lICcvXiQxICgpJC8sL159ICMgJDEgL2NcCi0kMSAoKVwKLXtcCi1tNF9icGF0c3Vic3RzKFskMl0sIFskXSwgW1xcXSwgW15cKFsJIF1cKV0sIFtcXFwxXSkKLX0gIyBFeHRlbmRlZC1zaGVsbCAkMSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCi0gICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAotICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCi10ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgotXSkKLQotCi0jIF9MVF9QUk9HX1JFUExBQ0VfU0hFTExGTlMKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBSZXBsYWNlIGV4aXN0aW5nIHBvcnRhYmxlIGltcGxlbWVudGF0aW9ucyBvZiBzZXZlcmFsIHNoZWxsIGZ1bmN0aW9ucyB3aXRoCi0jIGVxdWl2YWxlbnQgZXh0ZW5kZWQgc2hlbGwgaW1wbGVtZW50YXRpb25zIHdoZXJlIHRob3NlIGZlYXR1cmVzIGFyZSBhdmFpbGFibGUuLgotbTRfZGVmdW4oW19MVF9QUk9HX1JFUExBQ0VfU0hFTExGTlNdLAotW2lmIHRlc3QgeCIkeHNpX3NoZWxsIiA9IHh5ZXM7IHRoZW4KLSAgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRShbZnVuY19kaXJuYW1lXSwgW2RubAotICAgIGNhc2UgJHsxfSBpbgotICAgICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOzsKLSAgICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOzsKLSAgICBlc2FjXSkKLQotICBfTFRfUFJPR19GVU5DVElPTl9SRVBMQUNFKFtmdW5jX2Jhc2VuYW1lXSwgW2RubAotICAgIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSJdKQotCi0gIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UoW2Z1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWVdLCBbZG5sCi0gICAgY2FzZSAkezF9IGluCi0gICAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7OwotICAgICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7OwotICAgIGVzYWMKLSAgICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iXSkKLQotICBfTFRfUFJPR19GVU5DVElPTl9SRVBMQUNFKFtmdW5jX3N0cmlwbmFtZV0sIFtkbmwKLSAgICAjIHBka3NoIDUuMi4xNCBkb2VzIG5vdCBkbyAke1glJFl9IGNvcnJlY3RseSBpZiBib3RoIFggYW5kIFkgYXJlCi0gICAgIyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMsIHNvIGFzc2lnbiBvbmUgdG8gb3JkaW5hcnkgcGFyYW1ldGVyIGZpcnN0LgotICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0kezN9Ci0gICAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0IyIkezF9In0KLSAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQlIiR7Mn0ifV0pCi0KLSAgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRShbZnVuY19zcGxpdF9sb25nX29wdF0sIFtkbmwKLSAgICBmdW5jX3NwbGl0X2xvbmdfb3B0X25hbWU9JHsxJSU9Kn0KLSAgICBmdW5jX3NwbGl0X2xvbmdfb3B0X2FyZz0kezEjKj19XSkKLQotICBfTFRfUFJPR19GVU5DVElPTl9SRVBMQUNFKFtmdW5jX3NwbGl0X3Nob3J0X29wdF0sIFtkbmwKLSAgICBmdW5jX3NwbGl0X3Nob3J0X29wdF9hcmc9JHsxIz8/fQotICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X25hbWU9JHsxJSIkZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnIn1dKQotCi0gIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UoW2Z1bmNfbG8yb10sIFtkbmwKLSAgICBjYXNlICR7MX0gaW4KLSAgICAgICoubG8pIGZ1bmNfbG8yb19yZXN1bHQ9JHsxJS5sb30uJHtvYmpleHR9IDs7Ci0gICAgICAqKSAgICBmdW5jX2xvMm9fcmVzdWx0PSR7MX0gOzsKLSAgICBlc2FjXSkKLQotICBfTFRfUFJPR19GVU5DVElPTl9SRVBMQUNFKFtmdW5jX3hmb3JtXSwgWyAgICBmdW5jX3hmb3JtX3Jlc3VsdD0kezElLip9LmxvXSkKLQotICBfTFRfUFJPR19GVU5DVElPTl9SRVBMQUNFKFtmdW5jX2FyaXRoXSwgWyAgICBmdW5jX2FyaXRoX3Jlc3VsdD0kKCggJFsqXSApKV0pCi0KLSAgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRShbZnVuY19sZW5dLCBbICAgIGZ1bmNfbGVuX3Jlc3VsdD0keyMxfV0pCi1maQotCi1pZiB0ZXN0IHgiJGx0X3NoZWxsX2FwcGVuZCIgPSB4eWVzOyB0aGVuCi0gIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UoW2Z1bmNfYXBwZW5kXSwgWyAgICBldmFsICIkezF9Kz1cXCR7Mn0iXSkKLQotICBfTFRfUFJPR19GVU5DVElPTl9SRVBMQUNFKFtmdW5jX2FwcGVuZF9xdW90ZWRdLCBbZG5sCi0gICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJHsyfSIKLWRubCBtNCBleHBhbnNpb24gdHVybnMgXFxcXCBpbnRvIFxcLCBhbmQgdGhlbiB0aGUgc2hlbGwgZXZhbCB0dXJucyB0aGF0IGludG8gXAotICAgIGV2YWwgIiR7MX0rPVxcXFwgXFwkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiXSkKLQotICAjIFNhdmUgYSBgZnVuY19hcHBlbmQnIGZ1bmN0aW9uIGNhbGwgd2hlcmUgcG9zc2libGUgYnkgZGlyZWN0IHVzZSBvZiAnKz0nCi0gIHNlZCAtZSAncyVmdW5jX2FwcGVuZCBcKFtbYS16QS1aX11dXHsxLFx9XCkgIiVcMSs9IiVnJyAkY2ZnZmlsZSA+ICRjZmdmaWxlLnRtcCBcCi0gICAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCi0gICAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQotICB0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgotZWxzZQotICAjIFNhdmUgYSBgZnVuY19hcHBlbmQnIGZ1bmN0aW9uIGNhbGwgZXZlbiB3aGVuICcrPScgaXMgbm90IGF2YWlsYWJsZQotICBzZWQgLWUgJ3MlZnVuY19hcHBlbmQgXChbW2EtekEtWl9dXVx7MSxcfVwpICIlXDE9IiRcMSVnJyAkY2ZnZmlsZSA+ICRjZmdmaWxlLnRtcCBcCi0gICAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCi0gICAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQotICB0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgotZmkKLQotaWYgdGVzdCB4IiRfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsIiA9IHgiOiI7IHRoZW4KLSAgQUNfTVNHX1dBUk4oW1VuYWJsZSB0byBzdWJzdGl0dXRlIGV4dGVuZGVkIHNoZWxsIGZ1bmN0aW9ucyBpbiAkb2ZpbGVdKQotZmkKLV0pCi0KICMgX0xUX1BBVEhfQ09OVkVSU0lPTl9GVU5DVElPTlMKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgRGV0ZXJtaW5lIHdoaWNoIGZpbGUgbmFtZSBjb252ZXJzaW9uIGZ1bmN0aW9ucyBzaG91bGQgYmUgdXNlZCBieQorIyBEZXRlcm1pbmUgd2hhdCBmaWxlIG5hbWUgY29udmVyc2lvbiBmdW5jdGlvbnMgc2hvdWxkIGJlIHVzZWQgYnkKICMgZnVuY190b19ob3N0X2ZpbGUgKGFuZCwgaW1wbGljaXRseSwgYnkgZnVuY190b19ob3N0X3BhdGgpLiAgVGhlc2UgYXJlIG5lZWRlZAogIyBmb3IgY2VydGFpbiBjcm9zcy1jb21waWxlIGNvbmZpZ3VyYXRpb25zIGFuZCBuYXRpdmUgbWluZ3cuCiBtNF9kZWZ1bihbX0xUX1BBVEhfQ09OVkVSU0lPTl9GVU5DVElPTlNdLApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9tNC9sdG9wdGlvbnMubTQgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL200L2x0b3B0aW9ucy5tNAppbmRleCA1ZDlhY2Q4Li41MGM3NzIzIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL200L2x0b3B0aW9ucy5tNAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL200L2x0b3B0aW9ucy5tNApAQCAtMSwxNCArMSwxNCBAQAogIyBIZWxwZXIgZnVuY3Rpb25zIGZvciBvcHRpb24gaGFuZGxpbmcuICAgICAgICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCiAjCi0jICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA3LCAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSMgICBJbmMuCisjICAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDUsIDIwMDctMjAwOSwgMjAxMS0yMDEzIEZyZWUgU29mdHdhcmUKKyMgICBGb3VuZGF0aW9uLCBJbmMuCiAjICAgV3JpdHRlbiBieSBHYXJ5IFYuIFZhdWdoYW4sIDIwMDQKICMKICMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gZ2l2ZXMKICMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwgd2l0aCBvciB3aXRob3V0CiAjIG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgogCi0jIHNlcmlhbCA3IGx0b3B0aW9ucy5tNAorIyBzZXJpYWwgOCBsdG9wdGlvbnMubTQKIAogIyBUaGlzIGlzIHRvIGhlbHAgYWNsb2NhbCBmaW5kIHRoZXNlIG1hY3JvcywgYXMgaXQgY2FuJ3Qgc2VlIG00X2RlZmluZS4KIEFDX0RFRlVOKFtMVE9QVElPTlNfVkVSU0lPTl0sIFttNF9pZihbMV0pXSkKQEAgLTI5LDcgKzI5LDcgQEAKIFttNF9kZWZpbmUoX0xUX01BTkdMRV9PUFRJT04oWyQxXSwgWyQyXSkpZG5sCiBtNF9pZmRlZihfTFRfTUFOR0xFX0RFRlVOKFskMV0sIFskMl0pLAogICAgICAgICBfTFRfTUFOR0xFX0RFRlVOKFskMV0sIFskMl0pLAotICAgIFttNF93YXJuaW5nKFtVbmtub3duICQxIG9wdGlvbiBgJDInXSldKVtdZG5sCisgICAgW200X3dhcm5pbmcoW1Vua25vd24gJDEgb3B0aW9uICckMiddKV0pW11kbmwKIF0pCiAKIApAQCAtNzUsMTMgKzc1LDEzIEBACiAgIGRubAogICBkbmwgSWYgbm8gcmVmZXJlbmNlIHdhcyBtYWRlIHRvIHZhcmlvdXMgcGFpcnMgb2Ygb3Bwb3Npbmcgb3B0aW9ucywgdGhlbgogICBkbmwgd2UgcnVuIHRoZSBkZWZhdWx0IG1vZGUgaGFuZGxlciBmb3IgdGhlIHBhaXIuICBGb3IgZXhhbXBsZSwgaWYgbmVpdGhlcgotICBkbmwgYHNoYXJlZCcgbm9yIGBkaXNhYmxlLXNoYXJlZCcgd2FzIHBhc3NlZCwgd2UgZW5hYmxlIGJ1aWxkaW5nIG9mIHNoYXJlZAorICBkbmwgJ3NoYXJlZCcgbm9yICdkaXNhYmxlLXNoYXJlZCcgd2FzIHBhc3NlZCwgd2UgZW5hYmxlIGJ1aWxkaW5nIG9mIHNoYXJlZAogICBkbmwgYXJjaGl2ZXMgYnkgZGVmYXVsdDoKICAgX0xUX1VOTEVTU19PUFRJT05TKFtMVF9JTklUXSwgW3NoYXJlZCBkaXNhYmxlLXNoYXJlZF0sIFtfTFRfRU5BQkxFX1NIQVJFRF0pCiAgIF9MVF9VTkxFU1NfT1BUSU9OUyhbTFRfSU5JVF0sIFtzdGF0aWMgZGlzYWJsZS1zdGF0aWNdLCBbX0xUX0VOQUJMRV9TVEFUSUNdKQogICBfTFRfVU5MRVNTX09QVElPTlMoW0xUX0lOSVRdLCBbcGljLW9ubHkgbm8tcGljXSwgW19MVF9XSVRIX1BJQ10pCiAgIF9MVF9VTkxFU1NfT1BUSU9OUyhbTFRfSU5JVF0sIFtmYXN0LWluc3RhbGwgZGlzYWJsZS1mYXN0LWluc3RhbGxdLAotICAJCSAgIFtfTFRfRU5BQkxFX0ZBU1RfSU5TVEFMTF0pCisJCSAgIFtfTFRfRU5BQkxFX0ZBU1RfSU5TVEFMTF0pCiAgIF0pCiBdKSMgX0xUX1NFVF9PUFRJT05TCiAKQEAgLTExMiw3ICsxMTIsNyBAQAogW19MVF9TRVRfT1BUSU9OKFtMVF9JTklUXSwgW2Rsb3Blbl0pCiBBQ19ESUFHTk9TRShbb2Jzb2xldGVdLAogWyQwOiBSZW1vdmUgdGhpcyB3YXJuaW5nIGFuZCB0aGUgY2FsbCB0byBfTFRfU0VUX09QVElPTiB3aGVuIHlvdQotcHV0IHRoZSBgZGxvcGVuJyBvcHRpb24gaW50byBMVF9JTklUJ3MgZmlyc3QgcGFyYW1ldGVyLl0pCitwdXQgdGhlICdkbG9wZW4nIG9wdGlvbiBpbnRvIExUX0lOSVQncyBmaXJzdCBwYXJhbWV0ZXIuXSkKIF0pCiAKIGRubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKQEAgLTE0OCw3ICsxNDgsNyBAQAogX0xUX1NFVF9PUFRJT04oW0xUX0lOSVRdLCBbd2luMzItZGxsXSkKIEFDX0RJQUdOT1NFKFtvYnNvbGV0ZV0sCiBbJDA6IFJlbW92ZSB0aGlzIHdhcm5pbmcgYW5kIHRoZSBjYWxsIHRvIF9MVF9TRVRfT1BUSU9OIHdoZW4geW91Ci1wdXQgdGhlIGB3aW4zMi1kbGwnIG9wdGlvbiBpbnRvIExUX0lOSVQncyBmaXJzdCBwYXJhbWV0ZXIuXSkKK3B1dCB0aGUgJ3dpbjMyLWRsbCcgb3B0aW9uIGludG8gTFRfSU5JVCdzIGZpcnN0IHBhcmFtZXRlci5dKQogXSkKIAogZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgpAQCAtMTU3LDkgKzE1Nyw5IEBACiAKICMgX0xUX0VOQUJMRV9TSEFSRUQoW0RFRkFVTFRdKQogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIGltcGxlbWVudCB0aGUgLS1lbmFibGUtc2hhcmVkIGZsYWcsIGFuZCBzdXBwb3J0cyB0aGUgYHNoYXJlZCcgYW5kCi0jIGBkaXNhYmxlLXNoYXJlZCcgTFRfSU5JVCBvcHRpb25zLgotIyBERUZBVUxUIGlzIGVpdGhlciBgeWVzJyBvciBgbm8nLiAgSWYgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gYHllcycuCisjIGltcGxlbWVudCB0aGUgLS1lbmFibGUtc2hhcmVkIGZsYWcsIGFuZCBzdXBwb3J0cyB0aGUgJ3NoYXJlZCcgYW5kCisjICdkaXNhYmxlLXNoYXJlZCcgTFRfSU5JVCBvcHRpb25zLgorIyBERUZBVUxUIGlzIGVpdGhlciAneWVzJyBvciAnbm8nLiAgSWYgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gJ3llcycuCiBtNF9kZWZpbmUoW19MVF9FTkFCTEVfU0hBUkVEXSwKIFttNF9kZWZpbmUoW19MVF9FTkFCTEVfU0hBUkVEX0RFRkFVTFRdLCBbbTRfaWYoJDEsIG5vLCBubywgeWVzKV0pZG5sCiBBQ19BUkdfRU5BQkxFKFtzaGFyZWRdLApAQCAtMTcyLDE0ICsxNzIsMTQgQEAKICAgICAqKQogICAgICAgZW5hYmxlX3NoYXJlZD1ubwogICAgICAgIyBMb29rIGF0IHRoZSBhcmd1bWVudCB3ZSBnb3QuICBXZSB1c2UgYWxsIHRoZSBjb21tb24gbGlzdCBzZXBhcmF0b3JzLgotICAgICAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IiR7SUZTfSRQQVRIX1NFUEFSQVRPUiwiCisgICAgICBsdF9zYXZlX2lmcz0kSUZTOyBJRlM9JElGUyRQQVRIX1NFUEFSQVRPUiwKICAgICAgIGZvciBwa2cgaW4gJGVuYWJsZXZhbDsgZG8KLQlJRlM9IiRsdF9zYXZlX2lmcyIKKwlJRlM9JGx0X3NhdmVfaWZzCiAJaWYgdGVzdCAiWCRwa2ciID0gIlgkcCI7IHRoZW4KIAkgIGVuYWJsZV9zaGFyZWQ9eWVzCiAJZmkKICAgICAgIGRvbmUKLSAgICAgIElGUz0iJGx0X3NhdmVfaWZzIgorICAgICAgSUZTPSRsdF9zYXZlX2lmcwogICAgICAgOzsKICAgICBlc2FjXSwKICAgICBbZW5hYmxlX3NoYXJlZD1dX0xUX0VOQUJMRV9TSEFSRURfREVGQVVMVCkKQEAgLTIxMSw5ICsyMTEsOSBAQAogCiAjIF9MVF9FTkFCTEVfU1RBVElDKFtERUZBVUxUXSkKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBpbXBsZW1lbnQgdGhlIC0tZW5hYmxlLXN0YXRpYyBmbGFnLCBhbmQgc3VwcG9ydCB0aGUgYHN0YXRpYycgYW5kCi0jIGBkaXNhYmxlLXN0YXRpYycgTFRfSU5JVCBvcHRpb25zLgotIyBERUZBVUxUIGlzIGVpdGhlciBgeWVzJyBvciBgbm8nLiAgSWYgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gYHllcycuCisjIGltcGxlbWVudCB0aGUgLS1lbmFibGUtc3RhdGljIGZsYWcsIGFuZCBzdXBwb3J0IHRoZSAnc3RhdGljJyBhbmQKKyMgJ2Rpc2FibGUtc3RhdGljJyBMVF9JTklUIG9wdGlvbnMuCisjIERFRkFVTFQgaXMgZWl0aGVyICd5ZXMnIG9yICdubycuICBJZiBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byAneWVzJy4KIG00X2RlZmluZShbX0xUX0VOQUJMRV9TVEFUSUNdLAogW200X2RlZmluZShbX0xUX0VOQUJMRV9TVEFUSUNfREVGQVVMVF0sIFttNF9pZigkMSwgbm8sIG5vLCB5ZXMpXSlkbmwKIEFDX0FSR19FTkFCTEUoW3N0YXRpY10sCkBAIC0yMjYsMTQgKzIyNiwxNCBAQAogICAgICopCiAgICAgIGVuYWJsZV9zdGF0aWM9bm8KICAgICAgICMgTG9vayBhdCB0aGUgYXJndW1lbnQgd2UgZ290LiAgV2UgdXNlIGFsbCB0aGUgY29tbW9uIGxpc3Qgc2VwYXJhdG9ycy4KLSAgICAgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU30kUEFUSF9TRVBBUkFUT1IsIgorICAgICAgbHRfc2F2ZV9pZnM9JElGUzsgSUZTPSRJRlMkUEFUSF9TRVBBUkFUT1IsCiAgICAgICBmb3IgcGtnIGluICRlbmFibGV2YWw7IGRvCi0JSUZTPSIkbHRfc2F2ZV9pZnMiCisJSUZTPSRsdF9zYXZlX2lmcwogCWlmIHRlc3QgIlgkcGtnIiA9ICJYJHAiOyB0aGVuCiAJICBlbmFibGVfc3RhdGljPXllcwogCWZpCiAgICAgICBkb25lCi0gICAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgICAgIElGUz0kbHRfc2F2ZV9pZnMKICAgICAgIDs7CiAgICAgZXNhY10sCiAgICAgW2VuYWJsZV9zdGF0aWM9XV9MVF9FTkFCTEVfU1RBVElDX0RFRkFVTFQpCkBAIC0yNjUsOSArMjY1LDkgQEAKIAogIyBfTFRfRU5BQkxFX0ZBU1RfSU5TVEFMTChbREVGQVVMVF0pCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgaW1wbGVtZW50IHRoZSAtLWVuYWJsZS1mYXN0LWluc3RhbGwgZmxhZywgYW5kIHN1cHBvcnQgdGhlIGBmYXN0LWluc3RhbGwnCi0jIGFuZCBgZGlzYWJsZS1mYXN0LWluc3RhbGwnIExUX0lOSVQgb3B0aW9ucy4KLSMgREVGQVVMVCBpcyBlaXRoZXIgYHllcycgb3IgYG5vJy4gIElmIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIGB5ZXMnLgorIyBpbXBsZW1lbnQgdGhlIC0tZW5hYmxlLWZhc3QtaW5zdGFsbCBmbGFnLCBhbmQgc3VwcG9ydCB0aGUgJ2Zhc3QtaW5zdGFsbCcKKyMgYW5kICdkaXNhYmxlLWZhc3QtaW5zdGFsbCcgTFRfSU5JVCBvcHRpb25zLgorIyBERUZBVUxUIGlzIGVpdGhlciAneWVzJyBvciAnbm8nLiAgSWYgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gJ3llcycuCiBtNF9kZWZpbmUoW19MVF9FTkFCTEVfRkFTVF9JTlNUQUxMXSwKIFttNF9kZWZpbmUoW19MVF9FTkFCTEVfRkFTVF9JTlNUQUxMX0RFRkFVTFRdLCBbbTRfaWYoJDEsIG5vLCBubywgeWVzKV0pZG5sCiBBQ19BUkdfRU5BQkxFKFtmYXN0LWluc3RhbGxdLApAQCAtMjgwLDE0ICsyODAsMTQgQEAKICAgICAqKQogICAgICAgZW5hYmxlX2Zhc3RfaW5zdGFsbD1ubwogICAgICAgIyBMb29rIGF0IHRoZSBhcmd1bWVudCB3ZSBnb3QuICBXZSB1c2UgYWxsIHRoZSBjb21tb24gbGlzdCBzZXBhcmF0b3JzLgotICAgICAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IiR7SUZTfSRQQVRIX1NFUEFSQVRPUiwiCisgICAgICBsdF9zYXZlX2lmcz0kSUZTOyBJRlM9JElGUyRQQVRIX1NFUEFSQVRPUiwKICAgICAgIGZvciBwa2cgaW4gJGVuYWJsZXZhbDsgZG8KLQlJRlM9IiRsdF9zYXZlX2lmcyIKKwlJRlM9JGx0X3NhdmVfaWZzCiAJaWYgdGVzdCAiWCRwa2ciID0gIlgkcCI7IHRoZW4KIAkgIGVuYWJsZV9mYXN0X2luc3RhbGw9eWVzCiAJZmkKICAgICAgIGRvbmUKLSAgICAgIElGUz0iJGx0X3NhdmVfaWZzIgorICAgICAgSUZTPSRsdF9zYXZlX2lmcwogICAgICAgOzsKICAgICBlc2FjXSwKICAgICBbZW5hYmxlX2Zhc3RfaW5zdGFsbD1dX0xUX0VOQUJMRV9GQVNUX0lOU1RBTExfREVGQVVMVCkKQEAgLTMwNCwxNCArMzA0LDE0IEBACiBbX0xUX1NFVF9PUFRJT04oW0xUX0lOSVRdLCBtNF9pZihbJDFdLCBbbm9dLCBbZGlzYWJsZS1dKVtmYXN0LWluc3RhbGxdKQogQUNfRElBR05PU0UoW29ic29sZXRlXSwKIFskMDogUmVtb3ZlIHRoaXMgd2FybmluZyBhbmQgdGhlIGNhbGwgdG8gX0xUX1NFVF9PUFRJT04gd2hlbiB5b3UgcHV0Ci10aGUgYGZhc3QtaW5zdGFsbCcgb3B0aW9uIGludG8gTFRfSU5JVCdzIGZpcnN0IHBhcmFtZXRlci5dKQordGhlICdmYXN0LWluc3RhbGwnIG9wdGlvbiBpbnRvIExUX0lOSVQncyBmaXJzdCBwYXJhbWV0ZXIuXSkKIF0pCiAKIEFVX0RFRlVOKFtBQ19ESVNBQkxFX0ZBU1RfSU5TVEFMTF0sCiBbX0xUX1NFVF9PUFRJT04oW0xUX0lOSVRdLCBbZGlzYWJsZS1mYXN0LWluc3RhbGxdKQogQUNfRElBR05PU0UoW29ic29sZXRlXSwKIFskMDogUmVtb3ZlIHRoaXMgd2FybmluZyBhbmQgdGhlIGNhbGwgdG8gX0xUX1NFVF9PUFRJT04gd2hlbiB5b3UgcHV0Ci10aGUgYGRpc2FibGUtZmFzdC1pbnN0YWxsJyBvcHRpb24gaW50byBMVF9JTklUJ3MgZmlyc3QgcGFyYW1ldGVyLl0pCit0aGUgJ2Rpc2FibGUtZmFzdC1pbnN0YWxsJyBvcHRpb24gaW50byBMVF9JTklUJ3MgZmlyc3QgcGFyYW1ldGVyLl0pCiBdKQogCiBkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CkBAIC0zMjEsOSArMzIxLDkgQEAKIAogIyBfTFRfV0lUSF9QSUMoW01PREVdKQogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBpbXBsZW1lbnQgdGhlIC0td2l0aC1waWMgZmxhZywgYW5kIHN1cHBvcnQgdGhlIGBwaWMtb25seScgYW5kIGBuby1waWMnCisjIGltcGxlbWVudCB0aGUgLS13aXRoLXBpYyBmbGFnLCBhbmQgc3VwcG9ydCB0aGUgJ3BpYy1vbmx5JyBhbmQgJ25vLXBpYycKICMgTFRfSU5JVCBvcHRpb25zLgotIyBNT0RFIGlzIGVpdGhlciBgeWVzJyBvciBgbm8nLiAgSWYgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gYGJvdGgnLgorIyBNT0RFIGlzIGVpdGhlciAneWVzJyBvciAnbm8nLiAgSWYgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gJ2JvdGgnLgogbTRfZGVmaW5lKFtfTFRfV0lUSF9QSUNdLAogW0FDX0FSR19XSVRIKFtwaWNdLAogICAgIFtBU19IRUxQX1NUUklORyhbLS13aXRoLXBpY0A8OkA9UEtHU0A6PkBdLApAQCAtMzM0LDE5ICszMzQsMTcgQEAKICAgICAqKQogICAgICAgcGljX21vZGU9ZGVmYXVsdAogICAgICAgIyBMb29rIGF0IHRoZSBhcmd1bWVudCB3ZSBnb3QuICBXZSB1c2UgYWxsIHRoZSBjb21tb24gbGlzdCBzZXBhcmF0b3JzLgotICAgICAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IiR7SUZTfSRQQVRIX1NFUEFSQVRPUiwiCisgICAgICBsdF9zYXZlX2lmcz0kSUZTOyBJRlM9JElGUyRQQVRIX1NFUEFSQVRPUiwKICAgICAgIGZvciBsdF9wa2cgaW4gJHdpdGh2YWw7IGRvCi0JSUZTPSIkbHRfc2F2ZV9pZnMiCisJSUZTPSRsdF9zYXZlX2lmcwogCWlmIHRlc3QgIlgkbHRfcGtnIiA9ICJYJGx0X3AiOyB0aGVuCiAJICBwaWNfbW9kZT15ZXMKIAlmaQogICAgICAgZG9uZQotICAgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgICBJRlM9JGx0X3NhdmVfaWZzCiAgICAgICA7OwogICAgIGVzYWNdLAotICAgIFtwaWNfbW9kZT1kZWZhdWx0XSkKLQotdGVzdCAteiAiJHBpY19tb2RlIiAmJiBwaWNfbW9kZT1tNF9kZWZhdWx0KFskMV0sIFtkZWZhdWx0XSkKKyAgICBbcGljX21vZGU9bTRfZGVmYXVsdChbJDFdLCBbZGVmYXVsdF0pXSkKIAogX0xUX0RFQ0woW10sIFtwaWNfbW9kZV0sIFswXSwgW1doYXQgdHlwZSBvZiBvYmplY3RzIHRvIGJ1aWxkXSlkbmwKIF0pIyBfTFRfV0lUSF9QSUMKQEAgLTM1OSw3ICszNTcsNyBAQAogW19MVF9TRVRfT1BUSU9OKFtMVF9JTklUXSwgW3BpYy1vbmx5XSkKIEFDX0RJQUdOT1NFKFtvYnNvbGV0ZV0sCiBbJDA6IFJlbW92ZSB0aGlzIHdhcm5pbmcgYW5kIHRoZSBjYWxsIHRvIF9MVF9TRVRfT1BUSU9OIHdoZW4geW91Ci1wdXQgdGhlIGBwaWMtb25seScgb3B0aW9uIGludG8gTFRfSU5JVCdzIGZpcnN0IHBhcmFtZXRlci5dKQorcHV0IHRoZSAncGljLW9ubHknIG9wdGlvbiBpbnRvIExUX0lOSVQncyBmaXJzdCBwYXJhbWV0ZXIuXSkKIF0pCiAKIGRubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbTQvbHRzdWdhci5tNCBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbTQvbHRzdWdhci5tNAppbmRleCA5MDAwYTA1Li43Y2JjNjM4IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL200L2x0c3VnYXIubTQKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9tNC9sdHN1Z2FyLm00CkBAIC0xLDYgKzEsNyBAQAogIyBsdHN1Z2FyLm00IC0tIGxpYnRvb2wgbTQgYmFzZSBsYXllci4gICAgICAgICAgICAgICAgICAgICAgICAgLSotQXV0b2NvbmYtKi0KICMKLSMgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA3LCAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNSwgMjAwNy0yMDA4LCAyMDExLTIwMTMgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuCiAjIFdyaXR0ZW4gYnkgR2FyeSBWLiBWYXVnaGFuLCAyMDA0CiAjCiAjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGdpdmVzCkBAIC0zMyw3ICszNCw3IEBACiAjIC0tLS0tLS0tLS0tLQogIyBNYW5pcHVsYXRlIG00IGxpc3RzLgogIyBUaGVzZSBtYWNyb3MgYXJlIG5lY2Vzc2FyeSBhcyBsb25nIGFzIHdpbGwgc3RpbGwgbmVlZCB0byBzdXBwb3J0Ci0jIEF1dG9jb25mLTIuNTkgd2hpY2ggcXVvdGVzIGRpZmZlcmVudGx5LgorIyBBdXRvY29uZi0yLjU5LCB3aGljaCBxdW90ZXMgZGlmZmVyZW50bHkuCiBtNF9kZWZpbmUoW2x0X2Nhcl0sIFtbJDFdXSkKIG00X2RlZmluZShbbHRfY2RyXSwKIFttNF9pZihbJCNdLCAwLCBbbTRfZmF0YWwoWyQwOiBjYW5ub3QgYmUgY2FsbGVkIHdpdGhvdXQgYXJndW1lbnRzXSldLApAQCAtNDQsNyArNDUsNyBAQAogCiAjIGx0X2FwcGVuZChNQUNSTy1OQU1FLCBTVFJJTkcsIFtTRVBBUkFUT1JdKQogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgUmVkZWZpbmUgTUFDUk8tTkFNRSB0byBob2xkIGl0cyBmb3JtZXIgY29udGVudCBwbHVzIGBTRVBBUkFUT1InYFNUUklORycuCisjIFJlZGVmaW5lIE1BQ1JPLU5BTUUgdG8gaG9sZCBpdHMgZm9ybWVyIGNvbnRlbnQgcGx1cyAnU0VQQVJBVE9SJydTVFJJTkcnLgogIyBOb3RlIHRoYXQgbmVpdGhlciBTRVBBUkFUT1Igbm9yIFNUUklORyBhcmUgZXhwYW5kZWQ7IHRoZXkgYXJlIGFwcGVuZGVkCiAjIHRvIE1BQ1JPLU5BTUUgYXMgaXMgKGxlYXZpbmcgdGhlIGV4cGFuc2lvbiBmb3Igd2hlbiBNQUNSTy1OQU1FIGlzIGludm9rZWQpLgogIyBObyBTRVBBUkFUT1IgaXMgb3V0cHV0IGlmIE1BQ1JPLU5BTUUgd2FzIHByZXZpb3VzbHkgdW5kZWZpbmVkIChkaWZmZXJlbnQKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbTQvbHR2ZXJzaW9uLm00IGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9tNC9sdHZlcnNpb24ubTQKaW5kZXggMDdhODYwMi4uZGFlYjBhZiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9tNC9sdHZlcnNpb24ubTQKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9tNC9sdHZlcnNpb24ubTQKQEAgLTEsNiArMSw2IEBACiAjIGx0dmVyc2lvbi5tNCAtLSB2ZXJzaW9uIG51bWJlcnMJCQktKi0gQXV0b2NvbmYgLSotCiAjCi0jICAgQ29weXJpZ2h0IChDKSAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAxMS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogIyAgIFdyaXR0ZW4gYnkgU2NvdHQgSmFtZXMgUmVtbmFudCwgMjAwNAogIwogIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBnaXZlcwpAQCAtOSwxNSArOSwxNSBAQAogCiAjIEBjb25maWd1cmVfaW5wdXRACiAKLSMgc2VyaWFsIDMzMzcgbHR2ZXJzaW9uLm00CisjIHNlcmlhbCA0MDM4IGx0dmVyc2lvbi5tNAogIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgTGlidG9vbAogCi1tNF9kZWZpbmUoW0xUX1BBQ0tBR0VfVkVSU0lPTl0sIFsyLjQuMl0pCi1tNF9kZWZpbmUoW0xUX1BBQ0tBR0VfUkVWSVNJT05dLCBbMS4zMzM3XSkKK200X2RlZmluZShbTFRfUEFDS0FHRV9WRVJTSU9OXSwgWzIuNC4yLjQxOF0pCittNF9kZWZpbmUoW0xUX1BBQ0tBR0VfUkVWSVNJT05dLCBbMi40LjIuNDE4XSkKIAogQUNfREVGVU4oW0xUVkVSU0lPTl9WRVJTSU9OXSwKLVttYWNyb192ZXJzaW9uPScyLjQuMicKLW1hY3JvX3JldmlzaW9uPScxLjMzMzcnCitbbWFjcm9fdmVyc2lvbj0nMi40LjIuNDE4JworbWFjcm9fcmV2aXNpb249JzIuNC4yLjQxOCcKIF9MVF9ERUNMKCwgbWFjcm9fdmVyc2lvbiwgMCwgW1doaWNoIHJlbGVhc2Ugb2YgbGlidG9vbC5tNCB3YXMgdXNlZD9dKQogX0xUX0RFQ0woLCBtYWNyb19yZXZpc2lvbiwgMCkKIF0pCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL200L2x0fm9ic29sZXRlLm00IGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9tNC9sdH5vYnNvbGV0ZS5tNAppbmRleCBjNTczZGE5Li41OTQ2MWU0IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL200L2x0fm9ic29sZXRlLm00CisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbTQvbHR+b2Jzb2xldGUubTQKQEAgLTEsNiArMSw3IEBACiAjIGx0fm9ic29sZXRlLm00IC0tIGFjbG9jYWwgc2F0aXNmeWluZyBvYnNvbGV0ZSBkZWZpbml0aW9ucy4gICAgLSotQXV0b2NvbmYtKi0KICMKLSMgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDcsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjICAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDUsIDIwMDcsIDIwMDksIDIwMTEtMjAxMyBGcmVlIFNvZnR3YXJlCisjICAgRm91bmRhdGlvbiwgSW5jLgogIyAgIFdyaXR0ZW4gYnkgU2NvdHQgSmFtZXMgUmVtbmFudCwgMjAwNC4KICMKICMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gZ2l2ZXMKQEAgLTExLDcgKzEyLDcgQEAKIAogIyBUaGVzZSBleGlzdCBlbnRpcmVseSB0byBmb29sIGFjbG9jYWwgd2hlbiBib290c3RyYXBwaW5nIGxpYnRvb2wuCiAjCi0jIEluIHRoZSBwYXN0IGxpYnRvb2wubTQgaGFzIHByb3ZpZGVkIG1hY3JvcyB2aWEgQUNfREVGVU4gKG9yIEFVX0RFRlVOKQorIyBJbiB0aGUgcGFzdCBsaWJ0b29sLm00IGhhcyBwcm92aWRlZCBtYWNyb3MgdmlhIEFDX0RFRlVOIChvciBBVV9ERUZVTiksCiAjIHdoaWNoIGhhdmUgbGF0ZXIgYmVlbiBjaGFuZ2VkIHRvIG00X2RlZmluZSBhcyB0aGV5IGFyZW4ndCBwYXJ0IG9mIHRoZQogIyBleHBvcnRlZCBBUEksIG9yIG1vdmVkIHRvIEF1dG9jb25mIG9yIEF1dG9tYWtlIHdoZXJlIHRoZXkgYmVsb25nLgogIwpAQCAtMjUsNyArMjYsNyBAQAogIyBpbmNsdWRlZCBhZnRlciBldmVyeXRoaW5nIGVsc2UuICBUaGlzIHByb3ZpZGVzIGFjbG9jYWwgd2l0aCB0aGUKICMgQUNfREVGVU5zIGl0IHdhbnRzLCBidXQgd2hlbiBtNCBwcm9jZXNzZXMgaXQsIGl0IGRvZXNuJ3QgZG8gYW55dGhpbmcKICMgYmVjYXVzZSB0aG9zZSBtYWNyb3MgYWxyZWFkeSBleGlzdCwgb3Igd2lsbCBiZSBvdmVyd3JpdHRlbiBsYXRlci4KLSMgV2UgdXNlIEFDX0RFRlVOIG92ZXIgQVVfREVGVU4gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBhY2xvY2FsLTEuNi4gCisjIFdlIHVzZSBBQ19ERUZVTiBvdmVyIEFVX0RFRlVOIGZvciBjb21wYXRpYmlsaXR5IHdpdGggYWNsb2NhbC0xLjYuCiAjCiAjIEFueXRpbWUgd2Ugd2l0aGRyYXcgYW4gQUNfREVGVU4gb3IgQVVfREVGVU4sIHJlbWVtYmVyIHRvIGFkZCBpdCBoZXJlLgogIyBZZXMsIHRoYXQgbWVhbnMgZXZlcnkgbmFtZSBvbmNlIHRha2VuIHdpbGwgbmVlZCB0byByZW1haW4gaGVyZSB1bnRpbApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9tYW4vTWFrZWZpbGUuaW4gYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL21hbi9NYWtlZmlsZS5pbgppbmRleCBjMDJlMWYyLi5kOTJhZjc0IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL21hbi9NYWtlZmlsZS5pbgorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL21hbi9NYWtlZmlsZS5pbgpAQCAtMSw3ICsxLDcgQEAKLSMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTIuMiBmcm9tIE1ha2VmaWxlLmFtLgorIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xMy40IGZyb20gTWFrZWZpbGUuYW0uCiAjIEBjb25maWd1cmVfaW5wdXRACiAKLSMgQ29weXJpZ2h0IChDKSAxOTk0LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIENvcHlyaWdodCAoQykgMTk5NC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogCiAjIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgogIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LApAQCAtMTQsMjMgKzE0LDUxIEBACiAKIEBTRVRfTUFLRUAKIFZQQVRIID0gQHNyY2RpckAKLWFtX19tYWtlX2RyeXJ1biA9IFwKLSAgeyBcCi0gICAgYW1fX2RyeT1ubzsgXAorYW1fX2lzX2dudV9tYWtlID0gdGVzdCAtbiAnJChNQUtFRklMRV9MSVNUKScgJiYgdGVzdCAtbiAnJChNQUtFTEVWRUwpJworYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbiA9IFwKKyAgY2FzZSAkJHt0YXJnZXRfb3B0aW9uLX0gaW4gXAorICAgICAgPykgOzsgXAorICAgICAgKikgZWNobyAiYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbjogaW50ZXJuYWwgZXJyb3I6IGludmFsaWQiIFwKKyAgICAgICAgICAgICAgInRhcmdldCBvcHRpb24gJyQke3RhcmdldF9vcHRpb24tfScgc3BlY2lmaWVkIiA+JjI7IFwKKyAgICAgICAgIGV4aXQgMTs7IFwKKyAgZXNhYzsgXAorICBoYXNfb3B0PW5vOyBcCisgIHNhbmVfbWFrZWZsYWdzPSQkTUFLRUZMQUdTOyBcCisgIGlmICQoYW1fX2lzX2dudV9tYWtlKTsgdGhlbiBcCisgICAgc2FuZV9tYWtlZmxhZ3M9JCRNRkxBR1M7IFwKKyAgZWxzZSBcCiAgICAgY2FzZSAkJE1BS0VGTEFHUyBpbiBcCiAgICAgICAqXFxbXCBcCV0qKSBcCi0gICAgICAgIGVjaG8gJ2FtLS1lY2hvOiA7IEBlY2hvICJBTSIgIE9LJyB8ICQoTUFLRSkgLWYgLSAyPi9kZXYvbnVsbCBcCi0gICAgICAgICAgfCBncmVwICdeQU0gT0skJCcgPi9kZXYvbnVsbCB8fCBhbV9fZHJ5PXllczs7IFwKLSAgICAgICopIFwKLSAgICAgICAgZm9yIGFtX19mbGcgaW4gJCRNQUtFRkxBR1M7IGRvIFwKLSAgICAgICAgICBjYXNlICQkYW1fX2ZsZyBpbiBcCi0gICAgICAgICAgICAqPSp8LS0qKSA7OyBcCi0gICAgICAgICAgICAqbiopIGFtX19kcnk9eWVzOyBicmVhazs7IFwKLSAgICAgICAgICBlc2FjOyBcCi0gICAgICAgIGRvbmU7OyBcCisgICAgICAgIGJzPVxcOyBcCisgICAgICAgIHNhbmVfbWFrZWZsYWdzPWBwcmludGYgJyVzXG4nICIkJE1BS0VGTEFHUyIgXAorICAgICAgICAgIHwgc2VkICJzLyQkYnMkJGJzWyQkYnMgJCRicwldKi8vZyJgOzsgXAogICAgIGVzYWM7IFwKLSAgICB0ZXN0ICQkYW1fX2RyeSA9IHllczsgXAotICB9CisgIGZpOyBcCisgIHNraXBfbmV4dD1ubzsgXAorICBzdHJpcF90cmFpbG9wdCAoKSBcCisgIHsgXAorICAgIGZsZz1gcHJpbnRmICclc1xuJyAiJCRmbGciIHwgc2VkICJzLyQkMS4qJCQvLyJgOyBcCisgIH07IFwKKyAgZm9yIGZsZyBpbiAkJHNhbmVfbWFrZWZsYWdzOyBkbyBcCisgICAgdGVzdCAkJHNraXBfbmV4dCA9IHllcyAmJiB7IHNraXBfbmV4dD1ubzsgY29udGludWU7IH07IFwKKyAgICBjYXNlICQkZmxnIGluIFwKKyAgICAgICo9KnwtLSopIGNvbnRpbnVlOzsgXAorICAgICAgICAtKkkpIHN0cmlwX3RyYWlsb3B0ICdJJzsgc2tpcF9uZXh0PXllczs7IFwKKyAgICAgIC0qST8qKSBzdHJpcF90cmFpbG9wdCAnSSc7OyBcCisgICAgICAgIC0qTykgc3RyaXBfdHJhaWxvcHQgJ08nOyBza2lwX25leHQ9eWVzOzsgXAorICAgICAgLSpPPyopIHN0cmlwX3RyYWlsb3B0ICdPJzs7IFwKKyAgICAgICAgLSpsKSBzdHJpcF90cmFpbG9wdCAnbCc7IHNraXBfbmV4dD15ZXM7OyBcCisgICAgICAtKmw/Kikgc3RyaXBfdHJhaWxvcHQgJ2wnOzsgXAorICAgICAgLVtkRURtXSkgc2tpcF9uZXh0PXllczs7IFwKKyAgICAgIC1bSlRdKSBza2lwX25leHQ9eWVzOzsgXAorICAgIGVzYWM7IFwKKyAgICBjYXNlICQkZmxnIGluIFwKKyAgICAgICokJHRhcmdldF9vcHRpb24qKSBoYXNfb3B0PXllczsgYnJlYWs7OyBcCisgICAgZXNhYzsgXAorICBkb25lOyBcCisgIHRlc3QgJCRoYXNfb3B0ID0geWVzCithbV9fbWFrZV9kcnlydW4gPSAodGFyZ2V0X29wdGlvbj1uOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQorYW1fX21ha2Vfa2VlcGdvaW5nID0gKHRhcmdldF9vcHRpb249azsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKIHBrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAogcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACiBwa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACkBAIC01MSw3ICs3OSw3IEBACiBob3N0X3RyaXBsZXQgPSBAaG9zdEAKIHRhcmdldF90cmlwbGV0ID0gQHRhcmdldEAKIHN1YmRpciA9IG1hbgotRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChzcmNkaXIpL01ha2VmaWxlLmluCitESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHNyY2RpcikvTWFrZWZpbGUuYW0KIEFDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKIGFtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL200L2FzbWNmaS5tNCBcCiAJJCh0b3Bfc3JjZGlyKS9tNC9heF9hcHBlbmRfZmxhZy5tNCBcCkBAIC03Myw2ICsxMDEsMTggQEAKIENPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvZmZpY29uZmlnLmgKIENPTkZJR19DTEVBTl9GSUxFUyA9CiBDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQorQU1fVl9QID0gJChhbV9fdl9QX0BBTV9WQCkKK2FtX192X1BfID0gJChhbV9fdl9QX0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfUF8wID0gZmFsc2UKK2FtX192X1BfMSA9IDoKK0FNX1ZfR0VOID0gJChhbV9fdl9HRU5fQEFNX1ZAKQorYW1fX3ZfR0VOXyA9ICQoYW1fX3ZfR0VOX0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAgICIgJEA7CithbV9fdl9HRU5fMSA9IAorQU1fVl9hdCA9ICQoYW1fX3ZfYXRfQEFNX1ZAKQorYW1fX3ZfYXRfID0gJChhbV9fdl9hdF9AQU1fREVGQVVMVF9WQCkKK2FtX192X2F0XzAgPSBACithbV9fdl9hdF8xID0gCiBTT1VSQ0VTID0KIERJU1RfU09VUkNFUyA9CiBhbV9fY2FuX3J1bl9pbnN0YWxsaW5mbyA9IFwKQEAgLTExMSwxMCArMTUxLDEyIEBACiBhbV9faW5zdGFsbGRpcnMgPSAiJChERVNURElSKSQobWFuM2RpcikiCiBOUk9GRiA9IG5yb2ZmCiBNQU5TID0gJChtYW5fTUFOUykKK2FtX190YWdnZWRfZmlsZXMgPSAkKEhFQURFUlMpICQoU09VUkNFUykgJChUQUdTX0ZJTEVTKSAkKExJU1ApCiBESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQogQUNMT0NBTCA9IEBBQ0xPQ0FMQAogQUxMT0NBID0gQEFMTE9DQUAKIEFNVEFSID0gQEFNVEFSQAorQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACiBBTV9MVExERkxBR1MgPSBAQU1fTFRMREZMQUdTQAogQU1fUlVOVEVTVEZMQUdTID0gQEFNX1JVTlRFU1RGTEFHU0AKIEFSID0gQEFSQApAQCAtMTMwLDYgKzE3MiwxMCBAQAogQ0ZMQUdTID0gQENGTEFHU0AKIENQUCA9IEBDUFBACiBDUFBGTEFHUyA9IEBDUFBGTEFHU0AKK0NYWCA9IEBDWFhACitDWFhDUFAgPSBAQ1hYQ1BQQAorQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAorQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACiBDWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAogREVGUyA9IEBERUZTQAogREVQRElSID0gQERFUERJUkAKQEAgLTE0NSw2ICsxOTEsNyBAQAogRkdSRVAgPSBARkdSRVBACiBHUkVQID0gQEdSRVBACiBIQVZFX0xPTkdfRE9VQkxFID0gQEhBVkVfTE9OR19ET1VCTEVACitIQVZFX0xPTkdfRE9VQkxFX1ZBUklBTlQgPSBASEFWRV9MT05HX0RPVUJMRV9WQVJJQU5UQAogSU5TVEFMTCA9IEBJTlNUQUxMQAogSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKIElOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACkBAIC0xOTEsNiArMjM4LDcgQEAKIGFic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAogYWNfY3RfQVIgPSBAYWNfY3RfQVJACiBhY19jdF9DQyA9IEBhY19jdF9DQ0AKK2FjX2N0X0NYWCA9IEBhY19jdF9DWFhACiBhY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACiBhbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKIGFtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACkBAIC0zMzAsMjkgKzM3OCwxNCBAQAogCX0gfCBzZWQgLWUgJ3MsLiovLCw7aDtzLC4qXC4sLDtzLF5bXjNdWzAtOWEtel0qJCQsMyw7eCcgXAogCSAgICAgIC1lICdzLFwuWzAtOWEtel0qJCQsLDskKHRyYW5zZm9ybSk7RztzLFxuLC4sJ2A7IFwKIAlkaXI9JyQoREVTVERJUikkKG1hbjNkaXIpJzsgJChhbV9fdW5pbnN0YWxsX2ZpbGVzX2Zyb21fZGlyKQotdGFnczogVEFHUwotVEFHUzoKK3RhZ3MgVEFHUzoKIAotY3RhZ3M6IENUQUdTCi1DVEFHUzoKK2N0YWdzIENUQUdTOgogCiBjc2NvcGUgY3Njb3BlbGlzdDoKIAogCiBkaXN0ZGlyOiAkKERJU1RGSUxFUykKLQlAbGlzdD0nJChNQU5TKSc7IGlmIHRlc3QgLW4gIiQkbGlzdCI7IHRoZW4gXAotCSAgbGlzdD1gZm9yIHAgaW4gJCRsaXN0OyBkbyBcCi0JICAgIGlmIHRlc3QgLWYgJCRwOyB0aGVuIGQ9OyBlbHNlIGQ9IiQoc3JjZGlyKS8iOyBmaTsgXAotCSAgICBpZiB0ZXN0IC1mICIkJGQkJHAiOyB0aGVuIGVjaG8gIiQkZCQkcCI7IGVsc2UgOjsgZmk7IGRvbmVgOyBcCi0JICBpZiB0ZXN0IC1uICIkJGxpc3QiICYmIFwKLQkgICAgZ3JlcCAnYWIgaGVscDJtYW4gaXMgcmVxdWlyZWQgdG8gZ2VuZXJhdGUgdGhpcyBwYWdlJyAkJGxpc3QgPi9kZXYvbnVsbDsgdGhlbiBcCi0JICAgIGVjaG8gImVycm9yOiBmb3VuZCBtYW4gcGFnZXMgY29udGFpbmluZyB0aGUgJ21pc3NpbmcgaGVscDJtYW4nIHJlcGxhY2VtZW50IHRleHQ6IiA+JjI7IFwKLQkgICAgZ3JlcCAtbCAnYWIgaGVscDJtYW4gaXMgcmVxdWlyZWQgdG8gZ2VuZXJhdGUgdGhpcyBwYWdlJyAkJGxpc3QgfCBzZWQgJ3MvXi8gICAgICAgICAvJyA+JjI7IFwKLQkgICAgZWNobyAiICAgICAgIHRvIGZpeCB0aGVtLCBpbnN0YWxsIGhlbHAybWFuLCByZW1vdmUgYW5kIHJlZ2VuZXJhdGUgdGhlIG1hbiBwYWdlczsiID4mMjsgXAotCSAgICBlY2hvICIgICAgICAgdHlwaWNhbGx5ICdtYWtlIG1haW50YWluZXItY2xlYW4nIHdpbGwgcmVtb3ZlIHRoZW0iID4mMjsgXAotCSAgICBleGl0IDE7IFwKLQkgIGVsc2UgOjsgZmk7IFwKLQllbHNlIDo7IGZpCiAJQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAogCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKIAlsaXN0PSckKERJU1RGSUxFUyknOyBcCkBAIC00OTAsMTYgKzUyMywxNyBAQAogLk1BS0U6IGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcAogCiAuUEhPTlk6IGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIFwKLQlkaXN0Y2xlYW4gZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGRpciBkdmkgXAotCWR2aS1hbSBodG1sIGh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBcCi0JaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBpbnN0YWxsLWR2aS1hbSBcCi0JaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgaW5zdGFsbC1odG1sLWFtIFwKLQlpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIGluc3RhbGwtbWFuMyBcCi0JaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIFwKLQlpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgXAotCW1haW50YWluZXItY2xlYW4gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIFwKLQltb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgcGRmIHBkZi1hbSBwcyBwcy1hbSBcCi0JdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSB1bmluc3RhbGwtbWFuIHVuaW5zdGFsbC1tYW4zCisJY3Njb3BlbGlzdC1hbSBjdGFncy1hbSBkaXN0Y2xlYW4gZGlzdGNsZWFuLWdlbmVyaWMgXAorCWRpc3RjbGVhbi1saWJ0b29sIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIGh0bWwtYW0gaW5mbyBpbmZvLWFtIFwKKwlpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBcCisJaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgXAorCWluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIFwKKwlpbnN0YWxsLW1hbjMgaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gaW5zdGFsbC1wcyBcCisJaW5zdGFsbC1wcy1hbSBpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gXAorCWluc3RhbGxkaXJzIG1haW50YWluZXItY2xlYW4gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIFwKKwltb3N0bHljbGVhbiBtb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgcGRmIHBkZi1hbSBcCisJcHMgcHMtYW0gdGFncy1hbSB1bmluc3RhbGwgdW5pbnN0YWxsLWFtIHVuaW5zdGFsbC1tYW4gXAorCXVuaW5zdGFsbC1tYW4zCiAKIAogIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbWRhdGUtc2ggYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL21kYXRlLXNoCmluZGV4IGNkOTE2YzAuLmIzNzE5Y2YgMTAwNzU1Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbWRhdGUtc2gKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9tZGF0ZS1zaApAQCAtMSwxMCArMSw5IEBACiAjIS9iaW4vc2gKICMgR2V0IG1vZGlmaWNhdGlvbiB0aW1lIG9mIGEgZmlsZSBvciBkaXJlY3RvcnkgYW5kIHByZXR0eS1wcmludCBpdC4KIAotc2NyaXB0dmVyc2lvbj0yMDA1LTA2LTI5LjIyCitzY3JpcHR2ZXJzaW9uPTIwMTAtMDgtMjEuMDY7ICMgVVRDCiAKLSMgQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk2LCAxOTk3LCAyMDAzLCAyMDA0LCAyMDA1IEZyZWUgU29mdHdhcmUKLSMgRm91bmRhdGlvbiwgSW5jLgorIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KICMgd3JpdHRlbiBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBnbnUuYWkubWl0LmVkdT4sIEp1bmUgMTk5NQogIwogIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMTgsOCArMTcsNyBAQAogIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogIwogIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotIyBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiAKICMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGlmIHlvdQogIyBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIGEKQEAgLTMwLDE2ICsyOCwyNiBAQAogIyBidWdzIHRvIDxidWctYXV0b21ha2VAZ251Lm9yZz4gb3Igc2VuZCBwYXRjaGVzIHRvCiAjIDxhdXRvbWFrZS1wYXRjaGVzQGdudS5vcmc+LgogCitpZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iICYmIChlbXVsYXRlIHNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgZW11bGF0ZSBzaAorICBOVUxMQ01EPToKKyAgIyBQcmUtNC4yIHZlcnNpb25zIG9mIFpzaCBkbyB3b3JkIHNwbGl0dGluZyBvbiAkezErIiRAIn0sIHdoaWNoCisgICMgaXMgY29udHJhcnkgdG8gb3VyIHVzYWdlLiAgRGlzYWJsZSB0aGlzIGZlYXR1cmUuCisgIGFsaWFzIC1nICckezErIiRAIn0nPSciJEAiJworICBzZXRvcHQgTk9fR0xPQl9TVUJTVAorZmkKKwogY2FzZSAkMSBpbgogICAnJykKLSAgICAgZWNobyAiJDA6IE5vIGZpbGUuICBUcnkgXGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgMT4mMgorICAgICBlY2hvICIkMDogTm8gZmlsZS4gIFRyeSAnJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iIDE+JjIKICAgICAgZXhpdCAxOwogICAgICA7OwogICAtaCB8IC0taCopCiAgICAgY2F0IDw8XEVPRgogVXNhZ2U6IG1kYXRlLXNoIFstLWhlbHBdIFstLXZlcnNpb25dIEZJTEUKIAotUHJldHR5LXByaW50IHRoZSBtb2RpZmljYXRpb24gdGltZSBvZiBGSUxFLgorUHJldHR5LXByaW50IHRoZSBtb2RpZmljYXRpb24gZGF5IG9mIEZJTEUsIGluIHRoZSBmb3JtYXQ6CisxIEphbnVhcnkgMTk3MAogCiBSZXBvcnQgYnVncyB0byA8YnVnLWF1dG9tYWtlQGdudS5vcmc+LgogRU9GCkBAIC01MSw2ICs1OSwxMyBAQAogICAgIDs7CiBlc2FjCiAKK2Vycm9yICgpCit7CisgIGVjaG8gIiQwOiAkMSIgPiYyCisgIGV4aXQgMQorfQorCisKICMgUHJldmVudCBkYXRlIGdpdmluZyByZXNwb25zZSBpbiBhbm90aGVyIGxhbmd1YWdlLgogTEFORz1DCiBleHBvcnQgTEFORwpAQCAtNjAsNyArNzUsNyBAQAogZXhwb3J0IExDX1RJTUUKIAogIyBHTlUgbHMgY2hhbmdlcyBpdHMgdGltZSBmb3JtYXQgaW4gcmVzcG9uc2UgdG8gdGhlIFRJTUVfU1RZTEUKLSMgdmFyaWFibGUuICBTaW5jZSB3ZSBjYW5ub3QgYXNzdW1lIGB1bnNldCcgd29ya3MsIHJldmVydCB0aGlzCisjIHZhcmlhYmxlLiAgU2luY2Ugd2UgY2Fubm90IGFzc3VtZSAndW5zZXQnIHdvcmtzLCByZXZlcnQgdGhpcwogIyB2YXJpYWJsZSB0byBpdHMgZG9jdW1lbnRlZCBkZWZhdWx0LgogaWYgdGVzdCAiJHtUSU1FX1NUWUxFK3NldH0iID0gc2V0OyB0aGVuCiAgIFRJTUVfU1RZTEU9cG9zaXgtbG9uZy1pc28KQEAgLTc1LDI3ICs5MCwzMiBAQAogZWxzZQogICBsc19jb21tYW5kPSdscyAtbCAtZCcKIGZpCisjIEF2b2lkIHVzZXIvZ3JvdXAgbmFtZXMgdGhhdCBtaWdodCBoYXZlIHNwYWNlcywgd2hlbiBwb3NzaWJsZS4KK2lmIGxzIC1uIC9kZXYvbnVsbCAxPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIGxzX2NvbW1hbmQ9IiRsc19jb21tYW5kIC1uIgorZmkKIAotIyBBIGBscyAtbCcgbGluZSBsb29rcyBhcyBmb2xsb3dzIG9uIE9TLzIuCisjIEEgJ2xzIC1sJyBsaW5lIGxvb2tzIGFzIGZvbGxvd3Mgb24gT1MvMi4KICMgIGRyd3hyd3gtLS0gICAgICAgIDAgQXVnIDExICAyMDAxIGZvbwogIyBUaGlzIGRpZmZlcnMgZnJvbSBVbml4LCB3aGljaCBhZGRzIG93bmVyc2hpcCBpbmZvcm1hdGlvbi4KICMgIGRyd3hyd3gtLS0gICAyIHJvb3QgIHJvb3QgICAgICA0MDk2IEF1ZyAxMSAgMjAwMSBmb28KICMKICMgVG8gZmluZCB0aGUgZGF0ZSwgd2Ugc3BsaXQgdGhlIGxpbmUgb24gc3BhY2VzIGFuZCBpdGVyYXRlIG9uIHdvcmRzCiAjIHVudGlsIHdlIGZpbmQgYSBtb250aC4gIFRoaXMgY2Fubm90IHdvcmsgd2l0aCBmaWxlcyB3aG9zZSBvd25lciBpcyBhCi0jIHVzZXIgbmFtZWQgYEphbicsIG9yIGBGZWInLCBldGMuICBIb3dldmVyLCBpdCdzIHVubGlrZWx5IHRoYXQgYC8nCisjIHVzZXIgbmFtZWQgIkphbiIsIG9yICJGZWIiLCBldGMuICBIb3dldmVyLCBpdCdzIHVubGlrZWx5IHRoYXQgJy8nCiAjIHdpbGwgYmUgb3duZWQgYnkgYSB1c2VyIHdob3NlIG5hbWUgaXMgYSBtb250aC4gIFNvIHdlIGZpcnN0IGxvb2sgYXQKICMgdGhlIGV4dGVuZGVkIGxzIG91dHB1dCBvZiB0aGUgcm9vdCBkaXJlY3RvcnkgdG8gZGVjaWRlIGhvdyBtYW55CiAjIHdvcmRzIHNob3VsZCBiZSBza2lwcGVkIHRvIGdldCB0aGUgZGF0ZS4KIAogIyBPbiBIUFVYIC9iaW4vc2gsICJzZXQiIGludGVycHJldHMgIi1ydy1yLS1yLS0iIGFzIG9wdGlvbnMsIHNvIHRoZSAieCIgYmVsb3cuCi1zZXQgeGBscyAtbCAtZCAvYAorc2V0IHhgJGxzX2NvbW1hbmQgL2AKIAogIyBGaW5kIHdoaWNoIGFyZ3VtZW50IGlzIHRoZSBtb250aC4KIG1vbnRoPQogY29tbWFuZD0KIHVudGlsIHRlc3QgJG1vbnRoCiBkbworICB0ZXN0ICQjIC1ndCAwIHx8IGVycm9yICJmYWlsZWQgcGFyc2luZyAnJGxzX2NvbW1hbmQgLycgb3V0cHV0IgogICBzaGlmdAogICAjIEFkZCBhbm90aGVyIHNoaWZ0IHRvIHRoZSBjb21tYW5kLgogICBjb21tYW5kPSIkY29tbWFuZCBzaGlmdDsiCkBAIC0xMTUsOCArMTM1LDEwIEBACiAgIGVzYWMKIGRvbmUKIAordGVzdCAtbiAiJG1vbnRoIiB8fCBlcnJvciAiZmFpbGVkIHBhcnNpbmcgJyRsc19jb21tYW5kIC8nIG91dHB1dCIKKwogIyBHZXQgdGhlIGV4dGVuZGVkIGxzIG91dHB1dCBvZiB0aGUgZmlsZSBvciBkaXJlY3RvcnkuCi1zZXQgZHVtbXkgeGBldmFsICIkbHNfY29tbWFuZCBcIlwkc2F2ZV9hcmcxXCIiYAorc2V0IGR1bW15IHhgZXZhbCAiJGxzX2NvbW1hbmQgXCJcXFwkc2F2ZV9hcmcxXCIiYAogCiAjIFJlbW92ZSBhbGwgcHJlY2VkaW5nIGFyZ3VtZW50cwogZXZhbCAkY29tbWFuZApAQCAtMTk3LDUgKzIxOSw2IEBACiAjIGV2YWw6IChhZGQtaG9vayAnd3JpdGUtZmlsZS1ob29rcyAndGltZS1zdGFtcCkKICMgdGltZS1zdGFtcC1zdGFydDogInNjcmlwdHZlcnNpb249IgogIyB0aW1lLXN0YW1wLWZvcm1hdDogIiU6eS0lMDJtLSUwMmQuJTAySCIKLSMgdGltZS1zdGFtcC1lbmQ6ICIkIgorIyB0aW1lLXN0YW1wLXRpbWUtem9uZTogIlVUQyIKKyMgdGltZS1zdGFtcC1lbmQ6ICI7ICMgVVRDIgogIyBFbmQ6CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL21pc3NpbmcgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL21pc3NpbmcKaW5kZXggMjgwNTVkMi4uY2RlYTUxNCAxMDA3NTUKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9taXNzaW5nCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbWlzc2luZwpAQCAtMSwxMSArMSwxMCBAQAogIyEgL2Jpbi9zaAotIyBDb21tb24gc3R1YiBmb3IgYSBmZXcgbWlzc2luZyBHTlUgcHJvZ3JhbXMgd2hpbGUgaW5zdGFsbGluZy4KKyMgQ29tbW9uIHdyYXBwZXIgZm9yIGEgZmV3IHBvdGVudGlhbGx5IG1pc3NpbmcgR05VIHByb2dyYW1zLgogCi1zY3JpcHR2ZXJzaW9uPTIwMDktMDQtMjguMjE7ICMgVVRDCitzY3JpcHR2ZXJzaW9uPTIwMTItMDYtMjYuMTY7ICMgVVRDCiAKLSMgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk5LCAyMDAwLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LAotIyAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotIyBPcmlnaW5hbGx5IGJ5IEZyYW4sY29pcyBQaW5hcmQgPHBpbmFyZEBpcm8udW1vbnRyZWFsLmNhPiwgMTk5Ni4KKyMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIE9yaWdpbmFsbHkgd3JpdHRlbiBieSBGcmFuLGNvaXMgUGluYXJkIDxwaW5hcmRAaXJvLnVtb250cmVhbC5jYT4sIDE5OTYuCiAKICMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTI2LDY5ICsyNSw0MCBAQAogIyB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCiAKIGlmIHRlc3QgJCMgLWVxIDA7IHRoZW4KLSAgZWNobyAxPiYyICJUcnkgXGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uIgorICBlY2hvIDE+JjIgIlRyeSAnJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbiIKICAgZXhpdCAxCiBmaQogCi1ydW49Ogotc2VkX291dHB1dD0ncy8uKiAtLW91dHB1dFsgPV1cKFteIF0qXCkuKi9cMS9wJwotc2VkX21pbnVzbz0ncy8uKiAtbyBcKFteIF0qXCkuKi9cMS9wJwotCi0jIEluIHRoZSBjYXNlcyB3aGVyZSB0aGlzIG1hdHRlcnMsIGBtaXNzaW5nJyBpcyBiZWluZyBydW4gaW4gdGhlCi0jIHNyY2RpciBhbHJlYWR5LgotaWYgdGVzdCAtZiBjb25maWd1cmUuYWM7IHRoZW4KLSAgY29uZmlndXJlX2FjPWNvbmZpZ3VyZS5hYwotZWxzZQotICBjb25maWd1cmVfYWM9Y29uZmlndXJlLmluCi1maQotCi1tc2c9Im1pc3Npbmcgb24geW91ciBzeXN0ZW0iCi0KIGNhc2UgJDEgaW4KLS0tcnVuKQotICAjIFRyeSB0byBydW4gcmVxdWVzdGVkIHByb2dyYW0sIGFuZCBqdXN0IGV4aXQgaWYgaXQgc3VjY2VlZHMuCi0gIHJ1bj0KLSAgc2hpZnQKLSAgIiRAIiAmJiBleGl0IDAKLSAgIyBFeGl0IGNvZGUgNjMgbWVhbnMgdmVyc2lvbiBtaXNtYXRjaC4gIFRoaXMgb2Z0ZW4gaGFwcGVucwotICAjIHdoZW4gdGhlIHVzZXIgdHJ5IHRvIHVzZSBhbiBhbmNpZW50IHZlcnNpb24gb2YgYSB0b29sIG9uCi0gICMgYSBmaWxlIHRoYXQgcmVxdWlyZXMgYSBtaW5pbXVtIHZlcnNpb24uICBJbiB0aGlzIGNhc2Ugd2UKLSAgIyB3ZSBzaG91bGQgcHJvY2VlZCBoYXMgaWYgdGhlIHByb2dyYW0gaGFkIGJlZW4gYWJzZW50LCBvcgotICAjIGlmIC0tcnVuIGhhZG4ndCBiZWVuIHBhc3NlZC4KLSAgaWYgdGVzdCAkPyA9IDYzOyB0aGVuCi0gICAgcnVuPToKLSAgICBtc2c9InByb2JhYmx5IHRvbyBvbGQiCi0gIGZpCi0gIDs7CisKKyAgLS1pcy1saWdodHdlaWdodCkKKyAgICAjIFVzZWQgYnkgb3VyIGF1dG9jb25mIG1hY3JvcyB0byBjaGVjayB3aGV0aGVyIHRoZSBhdmFpbGFibGUgbWlzc2luZworICAgICMgc2NyaXB0IGlzIG1vZGVybiBlbm91Z2guCisgICAgZXhpdCAwCisgICAgOzsKKworICAtLXJ1bikKKyAgICAjIEJhY2stY29tcGF0IHdpdGggdGhlIGNhbGxpbmcgY29udmVudGlvbiB1c2VkIGJ5IG9sZGVyIGF1dG9tYWtlLgorICAgIHNoaWZ0CisgICAgOzsKIAogICAtaHwtLWh8LS1oZXwtLWhlbHwtLWhlbHApCiAgICAgZWNobyAiXAogJDAgW09QVElPTl0uLi4gUFJPR1JBTSBbQVJHVU1FTlRdLi4uCiAKLUhhbmRsZSBcYFBST0dSQU0gW0FSR1VNRU5UXS4uLicgZm9yIHdoZW4gUFJPR1JBTSBpcyBtaXNzaW5nLCBvciByZXR1cm4gYW4KLWVycm9yIHN0YXR1cyBpZiB0aGVyZSBpcyBubyBrbm93biBoYW5kbGluZyBmb3IgUFJPR1JBTS4KK1J1biAnUFJPR1JBTSBbQVJHVU1FTlRdLi4uJywgcmV0dXJuaW5nIGEgcHJvcGVyIGFkdmljZSB3aGVuIHRoaXMgZmFpbHMgZHVlCit0byBQUk9HUkFNIGJlaW5nIG1pc3Npbmcgb3IgdG9vIG9sZC4KIAogT3B0aW9uczoKICAgLWgsIC0taGVscCAgICAgIGRpc3BsYXkgdGhpcyBoZWxwIGFuZCBleGl0CiAgIC12LCAtLXZlcnNpb24gICBvdXRwdXQgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdAotICAtLXJ1biAgICAgICAgICAgdHJ5IHRvIHJ1biB0aGUgZ2l2ZW4gY29tbWFuZCwgYW5kIGVtdWxhdGUgaXQgaWYgaXQgZmFpbHMKIAogU3VwcG9ydGVkIFBST0dSQU0gdmFsdWVzOgotICBhY2xvY2FsICAgICAgdG91Y2ggZmlsZSBcYGFjbG9jYWwubTQnCi0gIGF1dG9jb25mICAgICB0b3VjaCBmaWxlIFxgY29uZmlndXJlJwotICBhdXRvaGVhZGVyICAgdG91Y2ggZmlsZSBcYGNvbmZpZy5oLmluJwotICBhdXRvbTR0ZSAgICAgdG91Y2ggdGhlIG91dHB1dCBmaWxlLCBvciBjcmVhdGUgYSBzdHViIG9uZQotICBhdXRvbWFrZSAgICAgdG91Y2ggYWxsIFxgTWFrZWZpbGUuaW4nIGZpbGVzCi0gIGJpc29uICAgICAgICBjcmVhdGUgXGB5LnRhYi5bY2hdJywgaWYgcG9zc2libGUsIGZyb20gZXhpc3RpbmcgLltjaF0KLSAgZmxleCAgICAgICAgIGNyZWF0ZSBcYGxleC55eS5jJywgaWYgcG9zc2libGUsIGZyb20gZXhpc3RpbmcgLmMKLSAgaGVscDJtYW4gICAgIHRvdWNoIHRoZSBvdXRwdXQgZmlsZQotICBsZXggICAgICAgICAgY3JlYXRlIFxgbGV4Lnl5LmMnLCBpZiBwb3NzaWJsZSwgZnJvbSBleGlzdGluZyAuYwotICBtYWtlaW5mbyAgICAgdG91Y2ggdGhlIG91dHB1dCBmaWxlCi0gIHRhciAgICAgICAgICB0cnkgdGFyLCBnbnV0YXIsIGd0YXIsIHRoZW4gdGFyIHdpdGhvdXQgbm9uLXBvcnRhYmxlIGZsYWdzCi0gIHlhY2MgICAgICAgICBjcmVhdGUgXGB5LnRhYi5bY2hdJywgaWYgcG9zc2libGUsIGZyb20gZXhpc3RpbmcgLltjaF0KKyAgYWNsb2NhbCAgIGF1dG9jb25mICBhdXRvaGVhZGVyICAgYXV0b200dGUgIGF1dG9tYWtlICBtYWtlaW5mbworICBiaXNvbiAgICAgeWFjYyAgICAgIGZsZXggICAgICAgICBsZXggICAgICAgaGVscDJtYW4KIAotVmVyc2lvbiBzdWZmaXhlcyB0byBQUk9HUkFNIGFzIHdlbGwgYXMgdGhlIHByZWZpeGVzIFxgZ251LScsIFxgZ251JywgYW5kCi1cYGcnIGFyZSBpZ25vcmVkIHdoZW4gY2hlY2tpbmcgdGhlIG5hbWUuCitWZXJzaW9uIHN1ZmZpeGVzIHRvIFBST0dSQU0gYXMgd2VsbCBhcyB0aGUgcHJlZml4ZXMgJ2dudS0nLCAnZ251JywgYW5kCisnZycgYXJlIGlnbm9yZWQgd2hlbiBjaGVja2luZyB0aGUgbmFtZS4KIAogU2VuZCBidWcgcmVwb3J0cyB0byA8YnVnLWF1dG9tYWtlQGdudS5vcmc+LiIKICAgICBleGl0ICQ/CkBAIC0xMDAsMjcyICs3MCwxNDEgQEAKICAgICA7OwogCiAgIC0qKQotICAgIGVjaG8gMT4mMiAiJDA6IFVua25vd24gXGAkMScgb3B0aW9uIgotICAgIGVjaG8gMT4mMiAiVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbiIKKyAgICBlY2hvIDE+JjIgIiQwOiB1bmtub3duICckMScgb3B0aW9uIgorICAgIGVjaG8gMT4mMiAiVHJ5ICckMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uIgogICAgIGV4aXQgMQogICAgIDs7CiAKIGVzYWMKIAotIyBub3JtYWxpemUgcHJvZ3JhbSBuYW1lIHRvIGNoZWNrIGZvci4KLXByb2dyYW09YGVjaG8gIiQxIiB8IHNlZCAnCi0gIHMvXmdudS0vLzsgdAotICBzL15nbnUvLzsgdAotICBzL15nLy87IHQnYAorIyBSdW4gdGhlIGdpdmVuIHByb2dyYW0sIHJlbWVtYmVyIGl0cyBleGl0IHN0YXR1cy4KKyIkQCI7IHN0PSQ/CiAKLSMgTm93IGV4aXQgaWYgd2UgaGF2ZSBpdCwgYnV0IGl0IGZhaWxlZC4gIEFsc28gZXhpdCBub3cgaWYgd2UKLSMgZG9uJ3QgaGF2ZSBpdCBhbmQgLS12ZXJzaW9uIHdhcyBwYXNzZWQgKG1vc3QgbGlrZWx5IHRvIGRldGVjdAotIyB0aGUgcHJvZ3JhbSkuICBUaGlzIGlzIGFib3V0IG5vbi1HTlUgcHJvZ3JhbXMsIHNvIHVzZSAkMSBub3QKLSMgJHByb2dyYW0uCi1jYXNlICQxIGluCi0gIGxleCp8eWFjYyopCi0gICAgIyBOb3QgR05VIHByb2dyYW1zLCB0aGV5IGRvbid0IGhhdmUgLS12ZXJzaW9uLgorIyBJZiBpdCBzdWNjZWVkZWQsIHdlIGFyZSBkb25lLgordGVzdCAkc3QgLWVxIDAgJiYgZXhpdCAwCisKKyMgQWxzbyBleGl0IG5vdyBpZiB3ZSBpdCBmYWlsZWQgKG9yIHdhc24ndCBmb3VuZCksIGFuZCAnLS12ZXJzaW9uJyB3YXMKKyMgcGFzc2VkOyBzdWNoIGFuIG9wdGlvbiBpcyBwYXNzZWQgbW9zdCBsaWtlbHkgdG8gZGV0ZWN0IHdoZXRoZXIgdGhlCisjIHByb2dyYW0gaXMgcHJlc2VudCBhbmQgd29ya3MuCitjYXNlICQyIGluIC0tdmVyc2lvbnwtLWhlbHApIGV4aXQgJHN0OzsgZXNhYworCisjIEV4aXQgY29kZSA2MyBtZWFucyB2ZXJzaW9uIG1pc21hdGNoLiAgVGhpcyBvZnRlbiBoYXBwZW5zIHdoZW4gdGhlIHVzZXIKKyMgdHJpZXMgdG8gdXNlIGFuIGFuY2llbnQgdmVyc2lvbiBvZiBhIHRvb2wgb24gYSBmaWxlIHRoYXQgcmVxdWlyZXMgYQorIyBtaW5pbXVtIHZlcnNpb24uCitpZiB0ZXN0ICRzdCAtZXEgNjM7IHRoZW4KKyAgbXNnPSJwcm9iYWJseSB0b28gb2xkIgorZWxpZiB0ZXN0ICRzdCAtZXEgMTI3OyB0aGVuCisgICMgUHJvZ3JhbSB3YXMgbWlzc2luZy4KKyAgbXNnPSJtaXNzaW5nIG9uIHlvdXIgc3lzdGVtIgorZWxzZQorICAjIFByb2dyYW0gd2FzIGZvdW5kIGFuZCBleGVjdXRlZCwgYnV0IGZhaWxlZC4gIEdpdmUgdXAuCisgIGV4aXQgJHN0CitmaQorCitwZXJsX1VSTD1odHRwOi8vd3d3LnBlcmwub3JnLworZmxleF9VUkw9aHR0cDovL2ZsZXguc291cmNlZm9yZ2UubmV0LworZ251X3NvZnR3YXJlX1VSTD1odHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUKKworcHJvZ3JhbV9kZXRhaWxzICgpCit7CisgIGNhc2UgJDEgaW4KKyAgICBhY2xvY2FsfGF1dG9tYWtlKQorICAgICAgZWNobyAiVGhlICckMScgcHJvZ3JhbSBpcyBwYXJ0IG9mIHRoZSBHTlUgQXV0b21ha2UgcGFja2FnZToiCisgICAgICBlY2hvICI8JGdudV9zb2Z0d2FyZV9VUkwvYXV0b21ha2U+IgorICAgICAgZWNobyAiSXQgYWxzbyByZXF1aXJlcyBHTlUgQXV0b2NvbmYsIEdOVSBtNCBhbmQgUGVybCBpbiBvcmRlciB0byBydW46IgorICAgICAgZWNobyAiPCRnbnVfc29mdHdhcmVfVVJML2F1dG9jb25mPiIKKyAgICAgIGVjaG8gIjwkZ251X3NvZnR3YXJlX1VSTC9tNC8+IgorICAgICAgZWNobyAiPCRwZXJsX1VSTD4iCisgICAgICA7OworICAgIGF1dG9jb25mfGF1dG9tNHRlfGF1dG9oZWFkZXIpCisgICAgICBlY2hvICJUaGUgJyQxJyBwcm9ncmFtIGlzIHBhcnQgb2YgdGhlIEdOVSBBdXRvY29uZiBwYWNrYWdlOiIKKyAgICAgIGVjaG8gIjwkZ251X3NvZnR3YXJlX1VSTC9hdXRvY29uZi8+IgorICAgICAgZWNobyAiSXQgYWxzbyByZXF1aXJlcyBHTlUgbTQgYW5kIFBlcmwgaW4gb3JkZXIgdG8gcnVuOiIKKyAgICAgIGVjaG8gIjwkZ251X3NvZnR3YXJlX1VSTC9tNC8+IgorICAgICAgZWNobyAiPCRwZXJsX1VSTD4iCisgICAgICA7OworICBlc2FjCit9CisKK2dpdmVfYWR2aWNlICgpCit7CisgICMgTm9ybWFsaXplIHByb2dyYW0gbmFtZSB0byBjaGVjayBmb3IuCisgIG5vcm1hbGl6ZWRfcHJvZ3JhbT1gZWNobyAiJDEiIHwgc2VkICcKKyAgICBzL15nbnUtLy87IHQKKyAgICBzL15nbnUvLzsgdAorICAgIHMvXmcvLzsgdCdgCisKKyAgcHJpbnRmICclc1xuJyAiJyQxJyBpcyAkbXNnLiIKKworICBjb25maWd1cmVfZGVwcz0iJ2NvbmZpZ3VyZS5hYycgb3IgbTQgZmlsZXMgaW5jbHVkZWQgYnkgJ2NvbmZpZ3VyZS5hYyciCisgIGNhc2UgJG5vcm1hbGl6ZWRfcHJvZ3JhbSBpbgorICAgIGF1dG9jb25mKikKKyAgICAgIGVjaG8gIllvdSBzaG91bGQgb25seSBuZWVkIGl0IGlmIHlvdSBtb2RpZmllZCAnY29uZmlndXJlLmFjJywiCisgICAgICBlY2hvICJvciBtNCBmaWxlcyBpbmNsdWRlZCBieSBpdC4iCisgICAgICBwcm9ncmFtX2RldGFpbHMgJ2F1dG9jb25mJworICAgICAgOzsKKyAgICBhdXRvaGVhZGVyKikKKyAgICAgIGVjaG8gIllvdSBzaG91bGQgb25seSBuZWVkIGl0IGlmIHlvdSBtb2RpZmllZCAnYWNjb25maWcuaCcgb3IiCisgICAgICBlY2hvICIkY29uZmlndXJlX2RlcHMuIgorICAgICAgcHJvZ3JhbV9kZXRhaWxzICdhdXRvaGVhZGVyJworICAgICAgOzsKKyAgICBhdXRvbWFrZSopCisgICAgICBlY2hvICJZb3Ugc2hvdWxkIG9ubHkgbmVlZCBpdCBpZiB5b3UgbW9kaWZpZWQgJ01ha2VmaWxlLmFtJyBvciIKKyAgICAgIGVjaG8gIiRjb25maWd1cmVfZGVwcy4iCisgICAgICBwcm9ncmFtX2RldGFpbHMgJ2F1dG9tYWtlJworICAgICAgOzsKKyAgICBhY2xvY2FsKikKKyAgICAgIGVjaG8gIllvdSBzaG91bGQgb25seSBuZWVkIGl0IGlmIHlvdSBtb2RpZmllZCAnYWNpbmNsdWRlLm00JyBvciIKKyAgICAgIGVjaG8gIiRjb25maWd1cmVfZGVwcy4iCisgICAgICBwcm9ncmFtX2RldGFpbHMgJ2FjbG9jYWwnCisgICAgICA7OworICAgYXV0b200dGUqKQorICAgICAgZWNobyAiWW91IG1pZ2h0IGhhdmUgbW9kaWZpZWQgc29tZSBtYWludGFpbmVyIGZpbGVzIHRoYXQgcmVxdWlyZSIKKyAgICAgIGVjaG8gInRoZSAnYXV0b21hNHRlJyBwcm9ncmFtIHRvIGJlIHJlYnVpbHQuIgorICAgICAgcHJvZ3JhbV9kZXRhaWxzICdhdXRvbTR0ZScKKyAgICAgIDs7CisgICAgYmlzb24qfHlhY2MqKQorICAgICAgZWNobyAiWW91IHNob3VsZCBvbmx5IG5lZWQgaXQgaWYgeW91IG1vZGlmaWVkIGEgJy55JyBmaWxlLiIKKyAgICAgIGVjaG8gIllvdSBtYXkgd2FudCB0byBpbnN0YWxsIHRoZSBHTlUgQmlzb24gcGFja2FnZToiCisgICAgICBlY2hvICI8JGdudV9zb2Z0d2FyZV9VUkwvYmlzb24vPiIKKyAgICAgIDs7CisgICAgbGV4KnxmbGV4KikKKyAgICAgIGVjaG8gIllvdSBzaG91bGQgb25seSBuZWVkIGl0IGlmIHlvdSBtb2RpZmllZCBhICcubCcgZmlsZS4iCisgICAgICBlY2hvICJZb3UgbWF5IHdhbnQgdG8gaW5zdGFsbCB0aGUgRmFzdCBMZXhpY2FsIEFuYWx5emVyIHBhY2thZ2U6IgorICAgICAgZWNobyAiPCRmbGV4X1VSTD4iCisgICAgICA7OworICAgIGhlbHAybWFuKikKKyAgICAgIGVjaG8gIllvdSBzaG91bGQgb25seSBuZWVkIGl0IGlmIHlvdSBtb2RpZmllZCBhIGRlcGVuZGVuY3kiIFwKKyAgICAgICAgICAgIm9mIGEgbWFuIHBhZ2UuIgorICAgICAgZWNobyAiWW91IG1heSB3YW50IHRvIGluc3RhbGwgdGhlIEdOVSBIZWxwMm1hbiBwYWNrYWdlOiIKKyAgICAgIGVjaG8gIjwkZ251X3NvZnR3YXJlX1VSTC9oZWxwMm1hbi8+IgogICAgIDs7CisgICAgbWFrZWluZm8qKQorICAgICAgZWNobyAiWW91IHNob3VsZCBvbmx5IG5lZWQgaXQgaWYgeW91IG1vZGlmaWVkIGEgJy50ZXhpJyBmaWxlLCBvciIKKyAgICAgIGVjaG8gImFueSBvdGhlciBmaWxlIGluZGlyZWN0bHkgYWZmZWN0aW5nIHRoZSBhc3BlY3Qgb2YgdGhlIG1hbnVhbC4iCisgICAgICBlY2hvICJZb3UgbWlnaHQgd2FudCB0byBpbnN0YWxsIHRoZSBUZXhpbmZvIHBhY2thZ2U6IgorICAgICAgZWNobyAiPCRnbnVfc29mdHdhcmVfVVJML3RleGluZm8vPiIKKyAgICAgIGVjaG8gIlRoZSBzcHVyaW91cyBtYWtlaW5mbyBjYWxsIG1pZ2h0IGFsc28gYmUgdGhlIGNvbnNlcXVlbmNlIG9mIgorICAgICAgZWNobyAidXNpbmcgYSBidWdneSAnbWFrZScgKEFJWCwgRFUsIElSSVgpLCBpbiB3aGljaCBjYXNlIHlvdSBtaWdodCIKKyAgICAgIGVjaG8gIndhbnQgdG8gaW5zdGFsbCBHTlUgbWFrZToiCisgICAgICBlY2hvICI8JGdudV9zb2Z0d2FyZV9VUkwvbWFrZS8+IgorICAgICAgOzsKKyAgICAqKQorICAgICAgZWNobyAiWW91IG1pZ2h0IGhhdmUgbW9kaWZpZWQgc29tZSBmaWxlcyB3aXRob3V0IGhhdmluZyB0aGUgcHJvcGVyIgorICAgICAgZWNobyAidG9vbHMgZm9yIGZ1cnRoZXIgaGFuZGxpbmcgdGhlbS4gIENoZWNrIHRoZSAnUkVBRE1FJyBmaWxlLCBpdCIKKyAgICAgIGVjaG8gIm9mdGVuIHRlbGxzIHlvdSBhYm91dCB0aGUgbmVlZGVkIHByZXJlcXVpc2l0ZXMgZm9yIGluc3RhbGxpbmciCisgICAgICBlY2hvICJ0aGlzIHBhY2thZ2UuICBZb3UgbWF5IGFsc28gcGVlayBhdCBhbnkgR05VIGFyY2hpdmUgc2l0ZSwgaW4iCisgICAgICBlY2hvICJjYXNlIHNvbWUgb3RoZXIgcGFja2FnZSBjb250YWlucyB0aGlzIG1pc3NpbmcgJyQxJyBwcm9ncmFtLiIKKyAgICAgIDs7CisgIGVzYWMKK30KIAotICB0YXIqKQotICAgIGlmIHRlc3QgLW4gIiRydW4iOyB0aGVuCi0gICAgICAgZWNobyAxPiYyICJFUlJPUjogXGB0YXInIHJlcXVpcmVzIC0tcnVuIgotICAgICAgIGV4aXQgMQotICAgIGVsaWYgdGVzdCAieCQyIiA9ICJ4LS12ZXJzaW9uIiB8fCB0ZXN0ICJ4JDIiID0gIngtLWhlbHAiOyB0aGVuCi0gICAgICAgZXhpdCAxCi0gICAgZmkKLSAgICA7OworZ2l2ZV9hZHZpY2UgIiQxIiB8IHNlZCAtZSAnMXMvXi9XQVJOSU5HOiAvJyBcCisgICAgICAgICAgICAgICAgICAgICAgIC1lICcyLCRzL14vICAgICAgICAgLycgPiYyCiAKLSAgKikKLSAgICBpZiB0ZXN0IC16ICIkcnVuIiAmJiAoJDEgLS12ZXJzaW9uKSA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gICAgICAgIyBXZSBoYXZlIGl0LCBidXQgaXQgZmFpbGVkLgotICAgICAgIGV4aXQgMQotICAgIGVsaWYgdGVzdCAieCQyIiA9ICJ4LS12ZXJzaW9uIiB8fCB0ZXN0ICJ4JDIiID0gIngtLWhlbHAiOyB0aGVuCi0gICAgICAgIyBDb3VsZCBub3QgcnVuIC0tdmVyc2lvbiBvciAtLWhlbHAuICBUaGlzIGlzIHByb2JhYmx5IHNvbWVvbmUKLSAgICAgICAjIHJ1bm5pbmcgYCRUT09MIC0tdmVyc2lvbicgb3IgYCRUT09MIC0taGVscCcgdG8gY2hlY2sgd2hldGhlcgotICAgICAgICMgJFRPT0wgZXhpc3RzIGFuZCBub3Qga25vd2luZyAkVE9PTCB1c2VzIG1pc3NpbmcuCi0gICAgICAgZXhpdCAxCi0gICAgZmkKLSAgICA7OwotZXNhYwotCi0jIElmIGl0IGRvZXMgbm90IGV4aXN0LCBvciBmYWlscyB0byBydW4gKHBvc3NpYmx5IGFuIG91dGRhdGVkIHZlcnNpb24pLAotIyB0cnkgdG8gZW11bGF0ZSBpdC4KLWNhc2UgJHByb2dyYW0gaW4KLSAgYWNsb2NhbCopCi0gICAgZWNobyAxPiYyICJcCi1XQVJOSU5HOiBcYCQxJyBpcyAkbXNnLiAgWW91IHNob3VsZCBvbmx5IG5lZWQgaXQgaWYKLSAgICAgICAgIHlvdSBtb2RpZmllZCBcYGFjaW5jbHVkZS5tNCcgb3IgXGAke2NvbmZpZ3VyZV9hY30nLiAgWW91IG1pZ2h0IHdhbnQKLSAgICAgICAgIHRvIGluc3RhbGwgdGhlIFxgQXV0b21ha2UnIGFuZCBcYFBlcmwnIHBhY2thZ2VzLiAgR3JhYiB0aGVtIGZyb20KLSAgICAgICAgIGFueSBHTlUgYXJjaGl2ZSBzaXRlLiIKLSAgICB0b3VjaCBhY2xvY2FsLm00Ci0gICAgOzsKLQotICBhdXRvY29uZiopCi0gICAgZWNobyAxPiYyICJcCi1XQVJOSU5HOiBcYCQxJyBpcyAkbXNnLiAgWW91IHNob3VsZCBvbmx5IG5lZWQgaXQgaWYKLSAgICAgICAgIHlvdSBtb2RpZmllZCBcYCR7Y29uZmlndXJlX2FjfScuICBZb3UgbWlnaHQgd2FudCB0byBpbnN0YWxsIHRoZQotICAgICAgICAgXGBBdXRvY29uZicgYW5kIFxgR05VIG00JyBwYWNrYWdlcy4gIEdyYWIgdGhlbSBmcm9tIGFueSBHTlUKLSAgICAgICAgIGFyY2hpdmUgc2l0ZS4iCi0gICAgdG91Y2ggY29uZmlndXJlCi0gICAgOzsKLQotICBhdXRvaGVhZGVyKikKLSAgICBlY2hvIDE+JjIgIlwKLVdBUk5JTkc6IFxgJDEnIGlzICRtc2cuICBZb3Ugc2hvdWxkIG9ubHkgbmVlZCBpdCBpZgotICAgICAgICAgeW91IG1vZGlmaWVkIFxgYWNjb25maWcuaCcgb3IgXGAke2NvbmZpZ3VyZV9hY30nLiAgWW91IG1pZ2h0IHdhbnQKLSAgICAgICAgIHRvIGluc3RhbGwgdGhlIFxgQXV0b2NvbmYnIGFuZCBcYEdOVSBtNCcgcGFja2FnZXMuICBHcmFiIHRoZW0KLSAgICAgICAgIGZyb20gYW55IEdOVSBhcmNoaXZlIHNpdGUuIgotICAgIGZpbGVzPWBzZWQgLW4gJ3MvXlsgXSpBW0NNXV9DT05GSUdfSEVBREVSKFwoW14pXSpcKSkuKi9cMS9wJyAke2NvbmZpZ3VyZV9hY31gCi0gICAgdGVzdCAteiAiJGZpbGVzIiAmJiBmaWxlcz0iY29uZmlnLmgiCi0gICAgdG91Y2hfZmlsZXM9Ci0gICAgZm9yIGYgaW4gJGZpbGVzOyBkbwotICAgICAgY2FzZSAkZiBpbgotICAgICAgKjoqKSB0b3VjaF9maWxlcz0iJHRvdWNoX2ZpbGVzICJgZWNobyAiJGYiIHwKLQkJCQkgICAgICAgc2VkIC1lICdzL15bXjpdKjovLycgLWUgJ3MvOi4qLy8nYDs7Ci0gICAgICAqKSB0b3VjaF9maWxlcz0iJHRvdWNoX2ZpbGVzICRmLmluIjs7Ci0gICAgICBlc2FjCi0gICAgZG9uZQotICAgIHRvdWNoICR0b3VjaF9maWxlcwotICAgIDs7Ci0KLSAgYXV0b21ha2UqKQotICAgIGVjaG8gMT4mMiAiXAotV0FSTklORzogXGAkMScgaXMgJG1zZy4gIFlvdSBzaG91bGQgb25seSBuZWVkIGl0IGlmCi0gICAgICAgICB5b3UgbW9kaWZpZWQgXGBNYWtlZmlsZS5hbScsIFxgYWNpbmNsdWRlLm00JyBvciBcYCR7Y29uZmlndXJlX2FjfScuCi0gICAgICAgICBZb3UgbWlnaHQgd2FudCB0byBpbnN0YWxsIHRoZSBcYEF1dG9tYWtlJyBhbmQgXGBQZXJsJyBwYWNrYWdlcy4KLSAgICAgICAgIEdyYWIgdGhlbSBmcm9tIGFueSBHTlUgYXJjaGl2ZSBzaXRlLiIKLSAgICBmaW5kIC4gLXR5cGUgZiAtbmFtZSBNYWtlZmlsZS5hbSAtcHJpbnQgfAotCSAgIHNlZCAncy9cLmFtJC8uaW4vJyB8Ci0JICAgd2hpbGUgcmVhZCBmOyBkbyB0b3VjaCAiJGYiOyBkb25lCi0gICAgOzsKLQotICBhdXRvbTR0ZSopCi0gICAgZWNobyAxPiYyICJcCi1XQVJOSU5HOiBcYCQxJyBpcyBuZWVkZWQsIGJ1dCBpcyAkbXNnLgotICAgICAgICAgWW91IG1pZ2h0IGhhdmUgbW9kaWZpZWQgc29tZSBmaWxlcyB3aXRob3V0IGhhdmluZyB0aGUKLSAgICAgICAgIHByb3BlciB0b29scyBmb3IgZnVydGhlciBoYW5kbGluZyB0aGVtLgotICAgICAgICAgWW91IGNhbiBnZXQgXGAkMScgYXMgcGFydCBvZiBcYEF1dG9jb25mJyBmcm9tIGFueSBHTlUKLSAgICAgICAgIGFyY2hpdmUgc2l0ZS4iCi0KLSAgICBmaWxlPWBlY2hvICIkKiIgfCBzZWQgLW4gIiRzZWRfb3V0cHV0ImAKLSAgICB0ZXN0IC16ICIkZmlsZSIgJiYgZmlsZT1gZWNobyAiJCoiIHwgc2VkIC1uICIkc2VkX21pbnVzbyJgCi0gICAgaWYgdGVzdCAtZiAiJGZpbGUiOyB0aGVuCi0JdG91Y2ggJGZpbGUKLSAgICBlbHNlCi0JdGVzdCAteiAiJGZpbGUiIHx8IGV4ZWMgPiRmaWxlCi0JZWNobyAiIyEgL2Jpbi9zaCIKLQllY2hvICIjIENyZWF0ZWQgYnkgR05VIEF1dG9tYWtlIG1pc3NpbmcgYXMgYSByZXBsYWNlbWVudCBvZiIKLQllY2hvICIjICAkICRAIgotCWVjaG8gImV4aXQgMCIKLQljaG1vZCAreCAkZmlsZQotCWV4aXQgMQotICAgIGZpCi0gICAgOzsKLQotICBiaXNvbip8eWFjYyopCi0gICAgZWNobyAxPiYyICJcCi1XQVJOSU5HOiBcYCQxJyAkbXNnLiAgWW91IHNob3VsZCBvbmx5IG5lZWQgaXQgaWYKLSAgICAgICAgIHlvdSBtb2RpZmllZCBhIFxgLnknIGZpbGUuICBZb3UgbWF5IG5lZWQgdGhlIFxgQmlzb24nIHBhY2thZ2UKLSAgICAgICAgIGluIG9yZGVyIGZvciB0aG9zZSBtb2RpZmljYXRpb25zIHRvIHRha2UgZWZmZWN0LiAgWW91IGNhbiBnZXQKLSAgICAgICAgIFxgQmlzb24nIGZyb20gYW55IEdOVSBhcmNoaXZlIHNpdGUuIgotICAgIHJtIC1mIHkudGFiLmMgeS50YWIuaAotICAgIGlmIHRlc3QgJCMgLW5lIDE7IHRoZW4KLSAgICAgICAgZXZhbCBMQVNUQVJHPSJcJHskI30iCi0JY2FzZSAkTEFTVEFSRyBpbgotCSoueSkKLQkgICAgU1JDRklMRT1gZWNobyAiJExBU1RBUkciIHwgc2VkICdzL3kkL2MvJ2AKLQkgICAgaWYgdGVzdCAtZiAiJFNSQ0ZJTEUiOyB0aGVuCi0JICAgICAgICAgY3AgIiRTUkNGSUxFIiB5LnRhYi5jCi0JICAgIGZpCi0JICAgIFNSQ0ZJTEU9YGVjaG8gIiRMQVNUQVJHIiB8IHNlZCAncy95JC9oLydgCi0JICAgIGlmIHRlc3QgLWYgIiRTUkNGSUxFIjsgdGhlbgotCSAgICAgICAgIGNwICIkU1JDRklMRSIgeS50YWIuaAotCSAgICBmaQotCSAgOzsKLQllc2FjCi0gICAgZmkKLSAgICBpZiB0ZXN0ICEgLWYgeS50YWIuaDsgdGhlbgotCWVjaG8gPnkudGFiLmgKLSAgICBmaQotICAgIGlmIHRlc3QgISAtZiB5LnRhYi5jOyB0aGVuCi0JZWNobyAnbWFpbigpIHsgcmV0dXJuIDA7IH0nID55LnRhYi5jCi0gICAgZmkKLSAgICA7OwotCi0gIGxleCp8ZmxleCopCi0gICAgZWNobyAxPiYyICJcCi1XQVJOSU5HOiBcYCQxJyBpcyAkbXNnLiAgWW91IHNob3VsZCBvbmx5IG5lZWQgaXQgaWYKLSAgICAgICAgIHlvdSBtb2RpZmllZCBhIFxgLmwnIGZpbGUuICBZb3UgbWF5IG5lZWQgdGhlIFxgRmxleCcgcGFja2FnZQotICAgICAgICAgaW4gb3JkZXIgZm9yIHRob3NlIG1vZGlmaWNhdGlvbnMgdG8gdGFrZSBlZmZlY3QuICBZb3UgY2FuIGdldAotICAgICAgICAgXGBGbGV4JyBmcm9tIGFueSBHTlUgYXJjaGl2ZSBzaXRlLiIKLSAgICBybSAtZiBsZXgueXkuYwotICAgIGlmIHRlc3QgJCMgLW5lIDE7IHRoZW4KLSAgICAgICAgZXZhbCBMQVNUQVJHPSJcJHskI30iCi0JY2FzZSAkTEFTVEFSRyBpbgotCSoubCkKLQkgICAgU1JDRklMRT1gZWNobyAiJExBU1RBUkciIHwgc2VkICdzL2wkL2MvJ2AKLQkgICAgaWYgdGVzdCAtZiAiJFNSQ0ZJTEUiOyB0aGVuCi0JICAgICAgICAgY3AgIiRTUkNGSUxFIiBsZXgueXkuYwotCSAgICBmaQotCSAgOzsKLQllc2FjCi0gICAgZmkKLSAgICBpZiB0ZXN0ICEgLWYgbGV4Lnl5LmM7IHRoZW4KLQllY2hvICdtYWluKCkgeyByZXR1cm4gMDsgfScgPmxleC55eS5jCi0gICAgZmkKLSAgICA7OwotCi0gIGhlbHAybWFuKikKLSAgICBlY2hvIDE+JjIgIlwKLVdBUk5JTkc6IFxgJDEnIGlzICRtc2cuICBZb3Ugc2hvdWxkIG9ubHkgbmVlZCBpdCBpZgotCSB5b3UgbW9kaWZpZWQgYSBkZXBlbmRlbmN5IG9mIGEgbWFudWFsIHBhZ2UuICBZb3UgbWF5IG5lZWQgdGhlCi0JIFxgSGVscDJtYW4nIHBhY2thZ2UgaW4gb3JkZXIgZm9yIHRob3NlIG1vZGlmaWNhdGlvbnMgdG8gdGFrZQotCSBlZmZlY3QuICBZb3UgY2FuIGdldCBcYEhlbHAybWFuJyBmcm9tIGFueSBHTlUgYXJjaGl2ZSBzaXRlLiIKLQotICAgIGZpbGU9YGVjaG8gIiQqIiB8IHNlZCAtbiAiJHNlZF9vdXRwdXQiYAotICAgIHRlc3QgLXogIiRmaWxlIiAmJiBmaWxlPWBlY2hvICIkKiIgfCBzZWQgLW4gIiRzZWRfbWludXNvImAKLSAgICBpZiB0ZXN0IC1mICIkZmlsZSI7IHRoZW4KLQl0b3VjaCAkZmlsZQotICAgIGVsc2UKLQl0ZXN0IC16ICIkZmlsZSIgfHwgZXhlYyA+JGZpbGUKLQllY2hvICIuYWIgaGVscDJtYW4gaXMgcmVxdWlyZWQgdG8gZ2VuZXJhdGUgdGhpcyBwYWdlIgotCWV4aXQgJD8KLSAgICBmaQotICAgIDs7Ci0KLSAgbWFrZWluZm8qKQotICAgIGVjaG8gMT4mMiAiXAotV0FSTklORzogXGAkMScgaXMgJG1zZy4gIFlvdSBzaG91bGQgb25seSBuZWVkIGl0IGlmCi0gICAgICAgICB5b3UgbW9kaWZpZWQgYSBcYC50ZXhpJyBvciBcYC50ZXhpbmZvJyBmaWxlLCBvciBhbnkgb3RoZXIgZmlsZQotICAgICAgICAgaW5kaXJlY3RseSBhZmZlY3RpbmcgdGhlIGFzcGVjdCBvZiB0aGUgbWFudWFsLiAgVGhlIHNwdXJpb3VzCi0gICAgICAgICBjYWxsIG1pZ2h0IGFsc28gYmUgdGhlIGNvbnNlcXVlbmNlIG9mIHVzaW5nIGEgYnVnZ3kgXGBtYWtlJyAoQUlYLAotICAgICAgICAgRFUsIElSSVgpLiAgWW91IG1pZ2h0IHdhbnQgdG8gaW5zdGFsbCB0aGUgXGBUZXhpbmZvJyBwYWNrYWdlIG9yCi0gICAgICAgICB0aGUgXGBHTlUgbWFrZScgcGFja2FnZS4gIEdyYWIgZWl0aGVyIGZyb20gYW55IEdOVSBhcmNoaXZlIHNpdGUuIgotICAgICMgVGhlIGZpbGUgdG8gdG91Y2ggaXMgdGhhdCBzcGVjaWZpZWQgd2l0aCAtbyAuLi4KLSAgICBmaWxlPWBlY2hvICIkKiIgfCBzZWQgLW4gIiRzZWRfb3V0cHV0ImAKLSAgICB0ZXN0IC16ICIkZmlsZSIgJiYgZmlsZT1gZWNobyAiJCoiIHwgc2VkIC1uICIkc2VkX21pbnVzbyJgCi0gICAgaWYgdGVzdCAteiAiJGZpbGUiOyB0aGVuCi0gICAgICAjIC4uLiBvciBpdCBpcyB0aGUgb25lIHNwZWNpZmllZCB3aXRoIEBzZXRmaWxlbmFtZSAuLi4KLSAgICAgIGluZmlsZT1gZWNobyAiJCoiIHwgc2VkICdzLy4qIFwoW14gXSpcKSAqJC9cMS8nYAotICAgICAgZmlsZT1gc2VkIC1uICcKLQkvXkBzZXRmaWxlbmFtZS97Ci0JICBzLy4qIFwoW14gXSpcKSAqJC9cMS8KLQkgIHAKLQkgIHEKLQl9JyAkaW5maWxlYAotICAgICAgIyAuLi4gb3IgaXQgaXMgZGVyaXZlZCBmcm9tIHRoZSBzb3VyY2UgbmFtZSAoZGlyL2YudGV4aSBiZWNvbWVzIGYuaW5mbykKLSAgICAgIHRlc3QgLXogIiRmaWxlIiAmJiBmaWxlPWBlY2hvICIkaW5maWxlIiB8IHNlZCAncywuKi8sLDtzLC5bXi5dKiQsLCdgLmluZm8KLSAgICBmaQotICAgICMgSWYgdGhlIGZpbGUgZG9lcyBub3QgZXhpc3QsIHRoZSB1c2VyIHJlYWxseSBuZWVkcyBtYWtlaW5mbzsKLSAgICAjIGxldCdzIGZhaWwgd2l0aG91dCB0b3VjaGluZyBhbnl0aGluZy4KLSAgICB0ZXN0IC1mICRmaWxlIHx8IGV4aXQgMQotICAgIHRvdWNoICRmaWxlCi0gICAgOzsKLQotICB0YXIqKQotICAgIHNoaWZ0Ci0KLSAgICAjIFdlIGhhdmUgYWxyZWFkeSB0cmllZCB0YXIgaW4gdGhlIGdlbmVyaWMgcGFydC4KLSAgICAjIExvb2sgZm9yIGdudXRhci9ndGFyIGJlZm9yZSBpbnZvY2F0aW9uIHRvIGF2b2lkIHVnbHkgZXJyb3IKLSAgICAjIG1lc3NhZ2VzLgotICAgIGlmIChnbnV0YXIgLS12ZXJzaW9uID4gL2Rldi9udWxsIDI+JjEpOyB0aGVuCi0gICAgICAgZ251dGFyICIkQCIgJiYgZXhpdCAwCi0gICAgZmkKLSAgICBpZiAoZ3RhciAtLXZlcnNpb24gPiAvZGV2L251bGwgMj4mMSk7IHRoZW4KLSAgICAgICBndGFyICIkQCIgJiYgZXhpdCAwCi0gICAgZmkKLSAgICBmaXJzdGFyZz0iJDEiCi0gICAgaWYgc2hpZnQ7IHRoZW4KLQljYXNlICRmaXJzdGFyZyBpbgotCSpvKikKLQkgICAgZmlyc3Rhcmc9YGVjaG8gIiRmaXJzdGFyZyIgfCBzZWQgcy9vLy9gCi0JICAgIHRhciAiJGZpcnN0YXJnIiAiJEAiICYmIGV4aXQgMAotCSAgICA7OwotCWVzYWMKLQljYXNlICRmaXJzdGFyZyBpbgotCSpoKikKLQkgICAgZmlyc3Rhcmc9YGVjaG8gIiRmaXJzdGFyZyIgfCBzZWQgcy9oLy9gCi0JICAgIHRhciAiJGZpcnN0YXJnIiAiJEAiICYmIGV4aXQgMAotCSAgICA7OwotCWVzYWMKLSAgICBmaQotCi0gICAgZWNobyAxPiYyICJcCi1XQVJOSU5HOiBJIGNhbid0IHNlZW0gdG8gYmUgYWJsZSB0byBydW4gXGB0YXInIHdpdGggdGhlIGdpdmVuIGFyZ3VtZW50cy4KLSAgICAgICAgIFlvdSBtYXkgd2FudCB0byBpbnN0YWxsIEdOVSB0YXIgb3IgRnJlZSBwYXh1dGlscywgb3IgY2hlY2sgdGhlCi0gICAgICAgICBjb21tYW5kIGxpbmUgYXJndW1lbnRzLiIKLSAgICBleGl0IDEKLSAgICA7OwotCi0gICopCi0gICAgZWNobyAxPiYyICJcCi1XQVJOSU5HOiBcYCQxJyBpcyBuZWVkZWQsIGFuZCBpcyAkbXNnLgotICAgICAgICAgWW91IG1pZ2h0IGhhdmUgbW9kaWZpZWQgc29tZSBmaWxlcyB3aXRob3V0IGhhdmluZyB0aGUKLSAgICAgICAgIHByb3BlciB0b29scyBmb3IgZnVydGhlciBoYW5kbGluZyB0aGVtLiAgQ2hlY2sgdGhlIFxgUkVBRE1FJyBmaWxlLAotICAgICAgICAgaXQgb2Z0ZW4gdGVsbHMgeW91IGFib3V0IHRoZSBuZWVkZWQgcHJlcmVxdWlzaXRlcyBmb3IgaW5zdGFsbGluZwotICAgICAgICAgdGhpcyBwYWNrYWdlLiAgWW91IG1heSBhbHNvIHBlZWsgYXQgYW55IEdOVSBhcmNoaXZlIHNpdGUsIGluIGNhc2UKLSAgICAgICAgIHNvbWUgb3RoZXIgcGFja2FnZSB3b3VsZCBjb250YWluIHRoaXMgbWlzc2luZyBcYCQxJyBwcm9ncmFtLiIKLSAgICBleGl0IDEKLSAgICA7OwotZXNhYwotCi1leGl0IDAKKyMgUHJvcGFnYXRlIHRoZSBjb3JyZWN0IGV4aXQgc3RhdHVzIChleHBlY3RlZCB0byBiZSAxMjcgZm9yIGEgcHJvZ3JhbQorIyBub3QgZm91bmQsIDYzIGZvciBhIHByb2dyYW0gdGhhdCBmYWlsZWQgZHVlIHRvIHZlcnNpb24gbWlzbWF0Y2gpLgorZXhpdCAkc3QKIAogIyBMb2NhbCB2YXJpYWJsZXM6CiAjIGV2YWw6IChhZGQtaG9vayAnd3JpdGUtZmlsZS1ob29rcyAndGltZS1zdGFtcCkKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbXN2Y2Muc2ggYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL21zdmNjLnNoCmluZGV4IGRjZGJlYWIuLjc0NDBkZWIgMTAwNzU1Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbXN2Y2Muc2gKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9tc3ZjYy5zaApAQCAtNDIsNiArNDIsNyBAQAogIyBmb3JtYXQgYW5kIHRyYW5zbGF0ZWQgaW50byBzb21ldGhpbmcgc2Vuc2libGUgZm9yIGNsIG9yIG1sLgogIwogCithcmdzX29yaWc9JEAKIGFyZ3M9Ii1ub2xvZ28gLVczIgogbWQ9LU1ECiBjbD0iY2wiCkBAIC03MiwxNCArNzMsMzUgQEAKICAgICAgIHNoaWZ0IDEKICAgICA7OwogICAgIC1PKikKLSAgICAgICMgSWYgd2UncmUgb3B0aW1pemluZywgbWFrZSBzdXJlIHdlIGV4cGxpY2l0bHkgdHVybiBvbiBzb21lIG9wdGltaXphdGlvbnMKLSAgICAgICMgdGhhdCBhcmUgaW1wbGljaXRseSBkaXNhYmxlZCBieSBkZWJ1ZyBzeW1ib2xzICgtWmkpLgotICAgICAgYXJncz0iJGFyZ3MgJDEgLU9QVDpSRUYgLU9QVDpJQ0YgLUlOQ1JFTUVOVEFMOk5PIgorICAgICAgIyBSdW50aW1lIGVycm9yIGNoZWNrcyAoZW5hYmxlZCBieSBzZXR0aW5nIC1SVEMxIGluIHRoZSAtREZGSV9ERUJVRworICAgICAgIyBjYXNlIGJlbG93KSBhcmUgbm90IGNvbXBhdGlibGUgd2l0aCBvcHRpbWl6YXRpb24gZmxhZ3MgYW5kIHdpbGwKKyAgICAgICMgY2F1c2UgdGhlIGJ1aWxkIHRvIGZhaWwuIFRoZXJlZm9yZSwgZHJvcCB0aGUgb3B0aW1pemF0aW9uIGZsYWcgaWYKKyAgICAgICMgLURGRklfREVCVUcgaXMgYWxzbyBzZXQuCisgICAgICBjYXNlICRhcmdzX29yaWcgaW4KKyAgICAgICAgKi1ERkZJX0RFQlVHKikKKyAgICAgICAgICBhcmdzPSIkYXJncyIKKyAgICAgICAgOzsKKyAgICAgICAgKikKKyAgICAgICAgICAjIFRoZSBheF9jY19tYXhvcHQubTQgbWFjcm8gZnJvbSB0aGUgdXBzdHJlYW0gYXV0b2NvbmYtYXJjaGl2ZQorICAgICAgICAgICMgcHJvamVjdCBkb2Vzbid0IHN1cHBvcnQgTVNWQyBhbmQgdGhlcmVmb3JlIGVuZHMgdXAgdHJ5aW5nIHRvCisgICAgICAgICAgIyB1c2UgLU8zLiBVc2UgdGhlIGVxdWl2YWxlbnQgIm1heCBvcHRpbWl6YXRpb24iIGZsYWcgZm9yIE1TVkMKKyAgICAgICAgICAjIGluc3RlYWQgb2YgZXJyb3Jpbmcgb3V0LgorICAgICAgICAgIGNhc2UgJDEgaW4KKyAgICAgICAgICAgIC1PMykKKyAgICAgICAgICAgICAgYXJncz0iJGFyZ3MgLU8yIgorICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICopCisgICAgICAgICAgICAgIGFyZ3M9IiRhcmdzICQxIgorICAgICAgICAgICAgOzsKKyAgICAgICAgICBlc2FjCisgICAgICAgICAgb3B0PSJ0cnVlIgorICAgICAgICA7OworICAgICAgZXNhYwogICAgICAgc2hpZnQgMQogICAgIDs7CiAgICAgLWcpCiAgICAgICAjIEVuYWJsZSBkZWJ1ZyBzeW1ib2wgZ2VuZXJhdGlvbi4KLSAgICAgIGFyZ3M9IiRhcmdzIC1aaSAtREVCVUciCisgICAgICBhcmdzPSIkYXJncyAtWmkiCiAgICAgICBzaGlmdCAxCiAgICAgOzsKICAgICAtREZGSV9ERUJVRykKQEAgLTEyNiw2ICsxNDgsMTAgQEAKICAgICAgICMgdG8gZG8gaGVyZS4KICAgICAgIHNoaWZ0IDEKICAgICA7OworICAgIC1wZWRhbnRpYykKKyAgICAgICMgbGliZmZpIHRlc3RzIC1wZWRhbnRpYyB3aXRoIC1XYWxsLCBzbyBkcm9wIGl0IGFsc28uCisgICAgICBzaGlmdCAxCisgICAgOzsKICAgICAtV2Vycm9yKQogICAgICAgYXJncz0iJGFyZ3MgLVdYIgogICAgICAgc2hpZnQgMQpAQCAtMTcwLDYgKzE5NiwxMyBAQAogICBlc2FjCiBkb25lCiAKKyMgSWYgLVppIGlzIHNwZWNpZmllZCwgY2VydGFpbiBvcHRpbWl6YXRpb25zIGFyZSBpbXBsaWNpdGx5IGRpc2FibGVkCisjIGJ5IE1TVkMuIEFkZCBiYWNrIHRob3NlIG9wdGltaXphdGlvbnMgaWYgdGhpcyBpcyBhbiBvcHRpbWl6ZWQgYnVpbGQuCisjIE5PVEU6IFRoZXNlIGFyZ3VtZW50cyBtdXN0IGNvbWUgYWZ0ZXIgYWxsIG90aGVycy4KK2lmIFsgLW4gIiRvcHQiIF07IHRoZW4KKyAgICBhcmdzPSIkYXJncyAtbGluayAtT1BUOlJFRiAtT1BUOklDRiAtSU5DUkVNRU5UQUw6Tk8iCitmaQorCiBpZiBbIC1uICIkYXNzZW1ibHkiIF07IHRoZW4KICAgICBpZiBbIC16ICIkb3V0ZGlyIiBdOyB0aGVuCiAgICAgICBvdXRkaXI9Ii4iCkBAIC0xODksNyArMjIyLDEwIEBACiBlbHNlCiAgICAgYXJncz0iJG1kICRhcmdzIgogICAgIGVjaG8gIiRjbCAkYXJncyIKLSAgICBldmFsICJcIiRjbFwiICRhcmdzIgorICAgICMgUmV0dXJuIGFuIGVycm9yIGNvZGUgb2YgMSBpZiBhbiBpbnZhbGlkIGNvbW1hbmQgbGluZSBwYXJhbWV0ZXIgaXMgcGFzc2VkCisgICAgIyBpbnN0ZWFkIG9mIGp1c3QgaWdub3JpbmcgaXQuCisgICAgZXZhbCAiKFwiJGNsXCIgJGFyZ3MgMj4mMSAxPiYzIHwgXAorICAgICAgICAgIGF3ayAne3ByaW50IFwkMH0gL0Q5MDAyLyB7ZXJyb3I9MX0gRU5Ee2V4aXQgZXJyb3J9JyA+JjIpIDM+JjEiCiAgICAgcmVzdWx0PSQ/CiBmaQogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9hYXJjaDY0L2ZmaS5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvYWFyY2g2NC9mZmkuYwppbmRleCAxNDA1NjY1Li5iODA3YTJkIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9hYXJjaDY0L2ZmaS5jCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL2FhcmNoNjQvZmZpLmMKQEAgLTI3LDcgKzI3LDExIEBACiAjaW5jbHVkZSA8c3RkbGliLmg+CiAKIC8qIFN0YWNrIGFsaWdubWVudCByZXF1aXJlbWVudCBpbiBieXRlcyAqLworI2lmIGRlZmluZWQgKF9fQVBQTEVfXykKKyNkZWZpbmUgQUFSQ0g2NF9TVEFDS19BTElHTiAxCisjZWxzZQogI2RlZmluZSBBQVJDSDY0X1NUQUNLX0FMSUdOIDE2CisjZW5kaWYKIAogI2RlZmluZSBOX1hfQVJHX1JFRyA4CiAjZGVmaW5lIE5fVl9BUkdfUkVHIDgKQEAgLTQ5LDYgKzUzLDIzIEBACiAgIH0gdiBbQUFSQ0g2NF9OX1ZSRUddOwogfTsKIAorI2lmIGRlZmluZWQgKF9fY2xhbmdfXykgJiYgZGVmaW5lZCAoX19BUFBMRV9fKQorZXh0ZXJuIHZvaWQKK3N5c19pY2FjaGVfaW52YWxpZGF0ZSAodm9pZCAqc3RhcnQsIHNpemVfdCBsZW4pOworI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorZmZpX2NsZWFyX2NhY2hlICh2b2lkICpzdGFydCwgdm9pZCAqZW5kKQoreworI2lmIGRlZmluZWQgKF9fY2xhbmdfXykgJiYgZGVmaW5lZCAoX19BUFBMRV9fKQorCXN5c19pY2FjaGVfaW52YWxpZGF0ZSAoc3RhcnQsIChjaGFyICopZW5kIC0gKGNoYXIgKilzdGFydCk7CisjZWxpZiBkZWZpbmVkIChfX0dOVUNfXykKKwlfX2J1aWx0aW5fX19jbGVhcl9jYWNoZSAoc3RhcnQsIGVuZCk7CisjZWxzZQorI2Vycm9yICJNaXNzaW5nIGJ1aWx0aW4gdG8gZmx1c2ggaW5zdHJ1Y3Rpb24gY2FjaGUiCisjZW5kaWYKK30KKwogc3RhdGljIHZvaWQgKgogZ2V0X3hfYWRkciAoc3RydWN0IGNhbGxfY29udGV4dCAqY29udGV4dCwgdW5zaWduZWQgbikKIHsKQEAgLTk0LDggKzExNSwxMCBAQAogICAgICAgcmV0dXJuIGdldF9zX2FkZHIgKGNvbnRleHQsIG4pOwogICAgIGNhc2UgRkZJX1RZUEVfRE9VQkxFOgogICAgICAgcmV0dXJuIGdldF9kX2FkZHIgKGNvbnRleHQsIG4pOworI2lmIEZGSV9UWVBFX0RPVUJMRSAhPSBGRklfVFlQRV9MT05HRE9VQkxFCiAgICAgY2FzZSBGRklfVFlQRV9MT05HRE9VQkxFOgogICAgICAgcmV0dXJuIGdldF92X2FkZHIgKGNvbnRleHQsIG4pOworI2VuZGlmCiAgICAgY2FzZSBGRklfVFlQRV9VSU5UODoKICAgICBjYXNlIEZGSV9UWVBFX1NJTlQ4OgogICAgIGNhc2UgRkZJX1RZUEVfVUlOVDE2OgpAQCAtMTA3LDYgKzEzMCw4IEBACiAgICAgY2FzZSBGRklfVFlQRV9VSU5UNjQ6CiAgICAgY2FzZSBGRklfVFlQRV9TSU5UNjQ6CiAgICAgICByZXR1cm4gZ2V0X3hfYWRkciAoY29udGV4dCwgbik7CisgICAgY2FzZSBGRklfVFlQRV9WT0lEOgorICAgICAgcmV0dXJuIE5VTEw7CiAgICAgZGVmYXVsdDoKICAgICAgIEZGSV9BU1NFUlQgKDApOwogICAgICAgcmV0dXJuIE5VTEw7CkBAIC0xMjMsMTUgKzE0OCwyNiBAQAogICAgIGNhc2UgRkZJX1RZUEVfRkxPQVQ6CiAgICAgY2FzZSBGRklfVFlQRV9ET1VCTEU6CiAgICAgICByZXR1cm4gc2l6ZW9mIChVSU5UNjQpOworI2lmIEZGSV9UWVBFX0RPVUJMRSAhPSBGRklfVFlQRV9MT05HRE9VQkxFCiAgICAgY2FzZSBGRklfVFlQRV9MT05HRE9VQkxFOgogICAgICAgcmV0dXJuIHNpemVvZiAobG9uZyBkb3VibGUpOworI2VuZGlmCiAgICAgY2FzZSBGRklfVFlQRV9VSU5UODoKICAgICBjYXNlIEZGSV9UWVBFX1NJTlQ4OgorI2lmIGRlZmluZWQgKF9fQVBQTEVfXykKKwkgIHJldHVybiBzaXplb2YgKFVJTlQ4KTsKKyNlbmRpZgogICAgIGNhc2UgRkZJX1RZUEVfVUlOVDE2OgogICAgIGNhc2UgRkZJX1RZUEVfU0lOVDE2OgorI2lmIGRlZmluZWQgKF9fQVBQTEVfXykKKwkgIHJldHVybiBzaXplb2YgKFVJTlQxNik7CisjZW5kaWYKICAgICBjYXNlIEZGSV9UWVBFX1VJTlQzMjoKICAgICBjYXNlIEZGSV9UWVBFX0lOVDoKICAgICBjYXNlIEZGSV9UWVBFX1NJTlQzMjoKKyNpZiBkZWZpbmVkIChfX0FQUExFX18pCisJICByZXR1cm4gc2l6ZW9mIChVSU5UMzIpOworI2VuZGlmCiAgICAgY2FzZSBGRklfVFlQRV9QT0lOVEVSOgogICAgIGNhc2UgRkZJX1RZUEVfVUlOVDY0OgogICAgIGNhc2UgRkZJX1RZUEVfU0lOVDY0OgpAQCAtMTU0LDggKzE5MCwxMCBAQAogICAgICAgcmV0dXJuIHNpemVvZiAoVUlOVDMyKTsKICAgICBjYXNlIEZGSV9UWVBFX0RPVUJMRToKICAgICAgIHJldHVybiBzaXplb2YgKFVJTlQ2NCk7CisjaWYgRkZJX1RZUEVfRE9VQkxFICE9IEZGSV9UWVBFX0xPTkdET1VCTEUKICAgICBjYXNlIEZGSV9UWVBFX0xPTkdET1VCTEU6CiAgICAgICByZXR1cm4gc2l6ZW9mIChsb25nIGRvdWJsZSk7CisjZW5kaWYKICAgICBjYXNlIEZGSV9UWVBFX1VJTlQ4OgogICAgICAgcmV0dXJuIHNpemVvZiAoVUlOVDgpOwogICAgIGNhc2UgRkZJX1RZUEVfU0lOVDg6CkBAIC0xODYsNyArMjI0LDcgQEAKIAkJCSAgICBleHRlbmRlZF9jaWYgKiksCiAgICAgICAgICAgICAgICBzdHJ1Y3QgY2FsbF9jb250ZXh0ICpjb250ZXh0LAogICAgICAgICAgICAgICAgZXh0ZW5kZWRfY2lmICosCi0gICAgICAgICAgICAgICB1bnNpZ25lZCwKKyAgICAgICAgICAgICAgIHNpemVfdCwKICAgICAgICAgICAgICAgIHZvaWQgKCpmbikodm9pZCkpOwogCiBleHRlcm4gdm9pZApAQCAtMzA1LDcgKzM0Myw5IEBACiAgICAgY2FzZSBGRklfVFlQRV9WT0lEOgogICAgIGNhc2UgRkZJX1RZUEVfRkxPQVQ6CiAgICAgY2FzZSBGRklfVFlQRV9ET1VCTEU6CisjaWYgRkZJX1RZUEVfRE9VQkxFICE9IEZGSV9UWVBFX0xPTkdET1VCTEUKICAgICBjYXNlIEZGSV9UWVBFX0xPTkdET1VCTEU6CisjZW5kaWYKICAgICBjYXNlIEZGSV9UWVBFX1VJTlQ4OgogICAgIGNhc2UgRkZJX1RZUEVfVUlOVDE2OgogICAgIGNhc2UgRkZJX1RZUEVfVUlOVDMyOgpAQCAtMzY3LDE2ICs0MDcsMjQgQEAKIHsKICAgdW5zaWduZWQgbmdybjsgICAgICAgICAgICAgICAgLyogTmV4dCBnZW5lcmFsLXB1cnBvc2UgcmVnaXN0ZXIgbnVtYmVyLiAqLwogICB1bnNpZ25lZCBuc3JuOyAgICAgICAgICAgICAgICAvKiBOZXh0IHZlY3RvciByZWdpc3RlciBudW1iZXIuICovCi0gIHVuc2lnbmVkIG5zYWE7ICAgICAgICAgICAgICAgIC8qIE5leHQgc3RhY2sgb2Zmc2V0LiAqLworICBzaXplX3QgbnNhYTsgICAgICAgICAgICAgICAgICAvKiBOZXh0IHN0YWNrIG9mZnNldC4gKi8KKworI2lmIGRlZmluZWQgKF9fQVBQTEVfXykKKyAgdW5zaWduZWQgYWxsb2NhdGluZ192YXJpYWRpYzsKKyNlbmRpZgogfTsKIAogLyogSW5pdGlhbGl6ZSBhIHByb2NlZHVyZSBjYWxsIGFyZ3VtZW50IG1hcnNoYWxsaW5nIHN0YXRlLiAgKi8KIHN0YXRpYyB2b2lkCi1hcmdfaW5pdCAoc3RydWN0IGFyZ19zdGF0ZSAqc3RhdGUsIHVuc2lnbmVkIGNhbGxfZnJhbWVfc2l6ZSkKK2FyZ19pbml0IChzdHJ1Y3QgYXJnX3N0YXRlICpzdGF0ZSwgc2l6ZV90IGNhbGxfZnJhbWVfc2l6ZSkKIHsKICAgc3RhdGUtPm5ncm4gPSAwOwogICBzdGF0ZS0+bnNybiA9IDA7CiAgIHN0YXRlLT5uc2FhID0gMDsKKworI2lmIGRlZmluZWQgKF9fQVBQTEVfXykKKyAgc3RhdGUtPmFsbG9jYXRpbmdfdmFyaWFkaWMgPSAwOworI2VuZGlmCiB9CiAKIC8qIFJldHVybiB0aGUgbnVtYmVyIG9mIGF2YWlsYWJsZSBjb25zZWN1dGl2ZSBjb3JlIGFyZ3VtZW50CkBAIC00MDAsMzUgKzQ0OCwzNSBAQAogc3RhdGljIHZvaWQgKgogYWxsb2NhdGVfdG9feCAoc3RydWN0IGNhbGxfY29udGV4dCAqY29udGV4dCwgc3RydWN0IGFyZ19zdGF0ZSAqc3RhdGUpCiB7Ci0gIEZGSV9BU1NFUlQgKHN0YXRlLT5uZ3JuIDwgTl9YX0FSR19SRUcpCisgIEZGSV9BU1NFUlQgKHN0YXRlLT5uZ3JuIDwgTl9YX0FSR19SRUcpOwogICByZXR1cm4gZ2V0X3hfYWRkciAoY29udGV4dCwgKHN0YXRlLT5uZ3JuKSsrKTsKIH0KIAogc3RhdGljIHZvaWQgKgogYWxsb2NhdGVfdG9fcyAoc3RydWN0IGNhbGxfY29udGV4dCAqY29udGV4dCwgc3RydWN0IGFyZ19zdGF0ZSAqc3RhdGUpCiB7Ci0gIEZGSV9BU1NFUlQgKHN0YXRlLT5uc3JuIDwgTl9WX0FSR19SRUcpCisgIEZGSV9BU1NFUlQgKHN0YXRlLT5uc3JuIDwgTl9WX0FSR19SRUcpOwogICByZXR1cm4gZ2V0X3NfYWRkciAoY29udGV4dCwgKHN0YXRlLT5uc3JuKSsrKTsKIH0KIAogc3RhdGljIHZvaWQgKgogYWxsb2NhdGVfdG9fZCAoc3RydWN0IGNhbGxfY29udGV4dCAqY29udGV4dCwgc3RydWN0IGFyZ19zdGF0ZSAqc3RhdGUpCiB7Ci0gIEZGSV9BU1NFUlQgKHN0YXRlLT5uc3JuIDwgTl9WX0FSR19SRUcpCisgIEZGSV9BU1NFUlQgKHN0YXRlLT5uc3JuIDwgTl9WX0FSR19SRUcpOwogICByZXR1cm4gZ2V0X2RfYWRkciAoY29udGV4dCwgKHN0YXRlLT5uc3JuKSsrKTsKIH0KIAogc3RhdGljIHZvaWQgKgogYWxsb2NhdGVfdG9fdiAoc3RydWN0IGNhbGxfY29udGV4dCAqY29udGV4dCwgc3RydWN0IGFyZ19zdGF0ZSAqc3RhdGUpCiB7Ci0gIEZGSV9BU1NFUlQgKHN0YXRlLT5uc3JuIDwgTl9WX0FSR19SRUcpCisgIEZGSV9BU1NFUlQgKHN0YXRlLT5uc3JuIDwgTl9WX0FSR19SRUcpOwogICByZXR1cm4gZ2V0X3ZfYWRkciAoY29udGV4dCwgKHN0YXRlLT5uc3JuKSsrKTsKIH0KIAogLyogQWxsb2NhdGUgYW4gYWxpZ25lZCBzbG90IG9uIHRoZSBzdGFjayBhbmQgcmV0dXJuIGEgcG9pbnRlciB0byBpdC4gICovCiBzdGF0aWMgdm9pZCAqCi1hbGxvY2F0ZV90b19zdGFjayAoc3RydWN0IGFyZ19zdGF0ZSAqc3RhdGUsIHZvaWQgKnN0YWNrLCB1bnNpZ25lZCBhbGlnbm1lbnQsCi0JCSAgIHVuc2lnbmVkIHNpemUpCithbGxvY2F0ZV90b19zdGFjayAoc3RydWN0IGFyZ19zdGF0ZSAqc3RhdGUsIHZvaWQgKnN0YWNrLCBzaXplX3QgYWxpZ25tZW50LAorCQkgICBzaXplX3Qgc2l6ZSkKIHsKICAgdm9pZCAqYWxsb2NhdGlvbjsKIApAQCAtNDM2LDcgKzQ4NCwxMiBAQAogICAgICBhbGlnbm1lbnQgb2YgdGhlIGFyZ3VtZW50J3MgdHlwZS4gICovCiAgIHN0YXRlLT5uc2FhID0gQUxJR04gKHN0YXRlLT5uc2FhLCBhbGlnbm1lbnQpOwogICBzdGF0ZS0+bnNhYSA9IEFMSUdOIChzdGF0ZS0+bnNhYSwgYWxpZ25tZW50KTsKKyNpZiBkZWZpbmVkIChfX0FQUExFX18pCisgIGlmIChzdGF0ZS0+YWxsb2NhdGluZ192YXJpYWRpYykKKyAgICBzdGF0ZS0+bnNhYSA9IEFMSUdOIChzdGF0ZS0+bnNhYSwgOCk7CisjZWxzZQogICBzdGF0ZS0+bnNhYSA9IEFMSUdOIChzdGF0ZS0+bnNhYSwgOCk7CisjZW5kaWYKIAogICBhbGxvY2F0aW9uID0gc3RhY2sgKyBzdGF0ZS0+bnNhYTsKIApAQCAtNDQ3LDcgKzUwMCw3IEBACiBzdGF0aWMgdm9pZAogY29weV9iYXNpY190eXBlICh2b2lkICpkZXN0LCB2b2lkICpzb3VyY2UsIHVuc2lnbmVkIHNob3J0IHR5cGUpCiB7Ci0gIC8qIFRoaXMgaXMgbmVjY2Vzc2FyeSB0byBlbnN1cmUgdGhhdCBiYXNpYyB0eXBlcyBhcmUgY29waWVkCisgIC8qIFRoaXMgaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGF0IGJhc2ljIHR5cGVzIGFyZSBjb3BpZWQKICAgICAgc2lnbiBleHRlbmRlZCB0byA2NC1iaXRzIGFzIGxpYmZmaSBleHBlY3RzLiAgKi8KICAgc3dpdGNoICh0eXBlKQogICAgIHsKQEAgLTQ1Nyw5ICs1MTAsMTEgQEAKICAgICBjYXNlIEZGSV9UWVBFX0RPVUJMRToKICAgICAgICooZG91YmxlICopIGRlc3QgPSAqKGRvdWJsZSAqKSBzb3VyY2U7CiAgICAgICBicmVhazsKKyNpZiBGRklfVFlQRV9ET1VCTEUgIT0gRkZJX1RZUEVfTE9OR0RPVUJMRQogICAgIGNhc2UgRkZJX1RZUEVfTE9OR0RPVUJMRToKICAgICAgICoobG9uZyBkb3VibGUgKikgZGVzdCA9ICoobG9uZyBkb3VibGUgKikgc291cmNlOwogICAgICAgYnJlYWs7CisjZW5kaWYKICAgICBjYXNlIEZGSV9UWVBFX1VJTlQ4OgogICAgICAgKihmZmlfYXJnICopIGRlc3QgPSAqKFVJTlQ4ICopIHNvdXJjZTsKICAgICAgIGJyZWFrOwpAQCAtNDg2LDYgKzU0MSw4IEBACiAgICAgY2FzZSBGRklfVFlQRV9TSU5UNjQ6CiAgICAgICAqKGZmaV9zYXJnICopIGRlc3QgPSAqKFNJTlQ2NCAqKSBzb3VyY2U7CiAgICAgICBicmVhazsKKyAgICBjYXNlIEZGSV9UWVBFX1ZPSUQ6CisgICAgICBicmVhazsKIAogICAgIGRlZmF1bHQ6CiAgICAgICBGRklfQVNTRVJUICgwKTsKQEAgLTUxNCw3ICs1NzEsNiBAQAogICAgIHsKICAgICAgIGludCBpOwogICAgICAgdW5zaWduZWQgc2hvcnQgdHlwZSA9IGdldF9ob21vZ2VuZW91c190eXBlICh0eSk7Ci0gICAgICB1bnNpZ25lZCBlbGVtcyA9IGVsZW1lbnRfY291bnQgKHR5KTsKICAgICAgIGZvciAoaSA9IDA7IGkgPCBlbGVtczsgaSsrKQogCXsKIAkgIHZvaWQgKnJlZyA9IGFsbG9jYXRlX3RvX3YgKGNvbnRleHQsIHN0YXRlKTsKQEAgLTU0OCwxMSArNjA0LDEzIEBACiAJcmV0dXJuIGFsbG9jYXRlX3RvX2QgKGNvbnRleHQsIHN0YXRlKTsKICAgICAgIHN0YXRlLT5uc3JuID0gTl9WX0FSR19SRUc7CiAgICAgICBicmVhazsKKyNpZiBGRklfVFlQRV9ET1VCTEUgIT0gRkZJX1RZUEVfTE9OR0RPVUJMRQogICAgIGNhc2UgRkZJX1RZUEVfTE9OR0RPVUJMRToKICAgICAgIGlmIChzdGF0ZS0+bnNybiA8IE5fVl9BUkdfUkVHKQogCXJldHVybiBhbGxvY2F0ZV90b192IChjb250ZXh0LCBzdGF0ZSk7CiAgICAgICBzdGF0ZS0+bnNybiA9IE5fVl9BUkdfUkVHOwogICAgICAgYnJlYWs7CisjZW5kaWYKICAgICBjYXNlIEZGSV9UWVBFX1VJTlQ4OgogICAgIGNhc2UgRkZJX1RZUEVfU0lOVDg6CiAgICAgY2FzZSBGRklfVFlQRV9VSU5UMTY6CkBAIC02MTUsNyArNjczLDkgQEAKIAkgICBhcHByb3ByaWF0ZSByZWdpc3Rlciwgb3IgaWYgbm9uZSBhcmUgYXZhaWxhYmxlLCB0byB0aGUgc3RhY2suICAqLwogCWNhc2UgRkZJX1RZUEVfRkxPQVQ6CiAJY2FzZSBGRklfVFlQRV9ET1VCTEU6CisjaWYgRkZJX1RZUEVfRE9VQkxFICE9IEZGSV9UWVBFX0xPTkdET1VCTEUKIAljYXNlIEZGSV9UWVBFX0xPTkdET1VCTEU6CisjZW5kaWYKIAljYXNlIEZGSV9UWVBFX1VJTlQ4OgogCWNhc2UgRkZJX1RZUEVfU0lOVDg6CiAJY2FzZSBGRklfVFlQRV9VSU5UMTY6CkBAIC02NzYsNiArNzM2LDE2IEBACiAJICBGRklfQVNTRVJUICgwKTsKIAkgIGJyZWFrOwogCX0KKworI2lmIGRlZmluZWQgKF9fQVBQTEVfXykKKyAgICAgIGlmIChpICsgMSA9PSBlY2lmLT5jaWYtPmFhcmNoNjRfbmZpeGVkYXJncykKKwl7CisJICBzdGF0ZS5uZ3JuID0gTl9YX0FSR19SRUc7CisJICBzdGF0ZS5uc3JuID0gTl9WX0FSR19SRUc7CisKKwkgIHN0YXRlLmFsbG9jYXRpbmdfdmFyaWFkaWMgPSAxOworCX0KKyNlbmRpZgogICAgIH0KIAogICByZXR1cm4gZWNpZi0+Y2lmLT5hYXJjaDY0X2ZsYWdzOwpAQCAtNzEyLDYgKzc4MiwyMCBAQAogICByZXR1cm4gRkZJX09LOwogfQogCisjaWYgZGVmaW5lZCAoX19BUFBMRV9fKQorCisvKiBQZXJmb3JtIEFwcGxlLXNwZWNpZmljIGNpZiBwcm9jZXNzaW5nIGZvciB2YXJpYWRpYyBjYWxscyAqLworZmZpX3N0YXR1cyBmZmlfcHJlcF9jaWZfbWFjaGRlcF92YXIoZmZpX2NpZiAqY2lmLAorCQkJCSAgICB1bnNpZ25lZCBpbnQgbmZpeGVkYXJncywKKwkJCQkgICAgdW5zaWduZWQgaW50IG50b3RhbGFyZ3MpCit7CisgIGNpZi0+YWFyY2g2NF9uZml4ZWRhcmdzID0gbmZpeGVkYXJnczsKKworICByZXR1cm4gZmZpX3ByZXBfY2lmX21hY2hkZXAoY2lmKTsKK30KKworI2VuZGlmCisKIC8qIENhbGwgYSBmdW5jdGlvbiB3aXRoIHRoZSBwcm92aWRlZCBhcmd1bWVudHMgYW5kIGNhcHR1cmUgdGhlIHJldHVybgogICAgdmFsdWUuICAqLwogdm9pZApAQCAtNzI4LDcgKzgxMiw3IEBACiAgICAgY2FzZSBGRklfU1lTVjoKICAgICAgIHsKICAgICAgICAgc3RydWN0IGNhbGxfY29udGV4dCBjb250ZXh0OwotCXVuc2lnbmVkIHN0YWNrX2J5dGVzOworCXNpemVfdCBzdGFja19ieXRlczsKIAogCS8qIEZpZ3VyZSBvdXQgdGhlIHRvdGFsIGFtb3VudCBvZiBzdGFjayBzcGFjZSB3ZSBuZWVkLCB0aGUKIAkgICBhYm92ZSBjYWxsIGZyYW1lIHNwYWNlIG5lZWRzIHRvIGJlIDE2IGJ5dGVzIGFsaWduZWQgdG8KQEAgLTc0NSw3ICs4MjksOSBAQAogICAgICAgICAgICAgICBjYXNlIEZGSV9UWVBFX1ZPSUQ6CiAgICAgICAgICAgICAgIGNhc2UgRkZJX1RZUEVfRkxPQVQ6CiAgICAgICAgICAgICAgIGNhc2UgRkZJX1RZUEVfRE9VQkxFOgorI2lmIEZGSV9UWVBFX0RPVUJMRSAhPSBGRklfVFlQRV9MT05HRE9VQkxFCiAgICAgICAgICAgICAgIGNhc2UgRkZJX1RZUEVfTE9OR0RPVUJMRToKKyNlbmRpZgogICAgICAgICAgICAgICBjYXNlIEZGSV9UWVBFX1VJTlQ4OgogICAgICAgICAgICAgICBjYXNlIEZGSV9UWVBFX1NJTlQ4OgogICAgICAgICAgICAgICBjYXNlIEZGSV9UWVBFX1VJTlQxNjoKQEAgLTc3OCw3ICs4NjQsNyBAQAogCQkgIH0KICAgICAgICAgICAgICAgICBlbHNlIGlmICgoY2lmLT5ydHlwZS0+c2l6ZSArIDcpIC8gOCA8IE5fWF9BUkdfUkVHKQogICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaXplID0gQUxJR04gKGNpZi0+cnR5cGUtPnNpemUsIHNpemVvZiAoVUlOVDY0KSk7CisgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzaXplID0gQUxJR04gKGNpZi0+cnR5cGUtPnNpemUsIHNpemVvZiAoVUlOVDY0KSk7CiAgICAgICAgICAgICAgICAgICAgIG1lbWNweSAocnZhbHVlLCBnZXRfeF9hZGRyICgmY29udGV4dCwgMCksIHNpemUpOwogICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGVsc2UKQEAgLTgyNCw3ICs5MTAsNyBAQAogICAgIG1lbWNweSAoX190cmFtcCArIDEyLCAmX19mdW4sIHNpemVvZiAoX19mdW4pKTsJCQlcCiAgICAgbWVtY3B5IChfX3RyYW1wICsgMjAsICZfX2N0eCwgc2l6ZW9mIChfX2N0eCkpOwkJCVwKICAgICBtZW1jcHkgKF9fdHJhbXAgKyAyOCwgJl9fZmxhZ3MsIHNpemVvZiAoX19mbGFncykpOwkJCVwKLSAgICBfX2NsZWFyX2NhY2hlKF9fdHJhbXAsIF9fdHJhbXAgKyBGRklfVFJBTVBPTElORV9TSVpFKTsJCVwKKyAgICBmZmlfY2xlYXJfY2FjaGUoX190cmFtcCwgX190cmFtcCArIEZGSV9UUkFNUE9MSU5FX1NJWkUpOwkJXAogICB9KQogCiBmZmlfc3RhdHVzCkBAIC04NTcsMTMgKzk0MywxMyBAQAogICAgdGhlIHN0YWNrIGF0IHRoZSBwb2ludCBmZmlfY2xvc3VyZV9TWVNWKCkgd2FzIGludm9rZWQuCiAKICAgIE9uIHRoZSByZXR1cm4gcGF0aCB0aGUgYXNzZW1ibGVyIHdyYXBwZXIgd2lsbCByZWxvYWQgY2FsbCBjb250ZXh0Ci0gICByZWdzaXRlcnMuCisgICByZWdpc3RlcnMuCiAKICAgIGZmaV9jbG9zdXJlX1NZU1ZfaW5uZXIoKSBtYXJzaGFsbHMgdGhlIGNhbGwgY29udGV4dCBpbnRvIGZmaSB2YWx1ZQotICAgZGVzcmlwdG9ycywgaW52b2tlcyB0aGUgd3JhcHBlZCBmdW5jdGlvbiwgdGhlbiBtYXJzaGFsbHMgdGhlIHJldHVybgorICAgZGVzY3JpcHRvcnMsIGludm9rZXMgdGhlIHdyYXBwZWQgZnVuY3Rpb24sIHRoZW4gbWFyc2hhbGxzIHRoZSByZXR1cm4KICAgIHZhbHVlIGJhY2sgaW50byB0aGUgY2FsbCBjb250ZXh0LiAgKi8KIAotdm9pZAordm9pZCBGRklfSElEREVOCiBmZmlfY2xvc3VyZV9TWVNWX2lubmVyIChmZmlfY2xvc3VyZSAqY2xvc3VyZSwgc3RydWN0IGNhbGxfY29udGV4dCAqY29udGV4dCwKIAkJCXZvaWQgKnN0YWNrKQogewpAQCAtODk3LDEwICs5ODMsMTIgQEAKIAljYXNlIEZGSV9UWVBFX1NJTlQ2NDoKIAljYXNlICBGRklfVFlQRV9GTE9BVDoKIAljYXNlICBGRklfVFlQRV9ET1VCTEU6CisjaWYgRkZJX1RZUEVfRE9VQkxFICE9IEZGSV9UWVBFX0xPTkdET1VCTEUKIAljYXNlICBGRklfVFlQRV9MT05HRE9VQkxFOgogCSAgYXZhbHVlW2ldID0gYWxsb2NhdGVfdG9fcmVnaXN0ZXJfb3Jfc3RhY2sgKGNvbnRleHQsIHN0YWNrLAogCQkJCQkJICAgICAmc3RhdGUsIHR5LT50eXBlKTsKIAkgIGJyZWFrOworI2VuZGlmCiAKIAljYXNlIEZGSV9UWVBFX1NUUlVDVDoKIAkgIGlmIChpc19oZmEgKHR5KSkKQEAgLTkyNCw3ICsxMDEyLDcgQEAKIAkJCSAgIHRoZXJlZm9yZSB0aGUgc3RydWN0dXJlIGlzIG5vdCByZXByZXNlbnRlZCBhcwogCQkJICAgYSBjb250aWd1b3VzIHNlcXVlbmNlIG9mIGJ5dGVzIGluIG91ciBzYXZlZAogCQkJICAgcmVnaXN0ZXIgY29udGV4dC4gV2UgbmVlZCB0byBmYWtlIHVwIGEgY29weQotCQkJICAgb2YgdGhlIHN0cnVjdHVyZSBsYXllZCBvdXQgaW4gbWVtb3J5CisJCQkgICBvZiB0aGUgc3RydWN0dXJlIGxhaWQgb3V0IGluIG1lbW9yeQogCQkJICAgY29ycmVjdGx5LiBUaGUgZmFrZSBjYW4gYmUgdG9zc2VkIG9uY2UgdGhlCiAJCQkgICBjbG9zdXJlIGZ1bmN0aW9uIGhhcyByZXR1cm5lZCBoZW5jZSBhbGxvY2EoKQogCQkJICAgaXMgc3VmZmljaWVudC4gKi8KQEAgLTk0NSw3ICsxMDMzLDcgQEAKIAkJCSAgIHRoZXJlZm9yZSB0aGUgc3RydWN0dXJlIGlzIG5vdCByZXByZXNlbnRlZCBhcwogCQkJICAgYSBjb250aWd1b3VzIHNlcXVlbmNlIG9mIGJ5dGVzIGluIG91ciBzYXZlZAogCQkJICAgcmVnaXN0ZXIgY29udGV4dC4gV2UgbmVlZCB0byBmYWtlIHVwIGEgY29weQotCQkJICAgb2YgdGhlIHN0cnVjdHVyZSBsYXllZCBvdXQgaW4gbWVtb3J5CisJCQkgICBvZiB0aGUgc3RydWN0dXJlIGxhaWQgb3V0IGluIG1lbW9yeQogCQkJICAgY29ycmVjdGx5LiBUaGUgZmFrZSBjYW4gYmUgdG9zc2VkIG9uY2UgdGhlCiAJCQkgICBjbG9zdXJlIGZ1bmN0aW9uIGhhcyByZXR1cm5lZCBoZW5jZSBhbGxvY2EoKQogCQkJICAgaXMgc3VmZmljaWVudC4gKi8KQEAgLTk1OCwxMSArMTA0NiwxMyBAQAogCQkJYnJlYWs7CiAJCSAgICAgIH0KIAorI2lmIEZGSV9UWVBFX0RPVUJMRSAhPSBGRklfVFlQRV9MT05HRE9VQkxFCiAJCSAgICBjYXNlIEZGSV9UWVBFX0xPTkdET1VCTEU6CiAJCQkgIG1lbWNweSAoJmF2YWx1ZVtpXSwKIAkJCQkgIGFsbG9jYXRlX3RvX3YgKGNvbnRleHQsICZzdGF0ZSksCiAJCQkJICBzaXplb2YgKCphdmFsdWUpKTsKIAkJICAgICAgYnJlYWs7CisjZW5kaWYKIAogCQkgICAgZGVmYXVsdDoKIAkJICAgICAgRkZJX0FTU0VSVCAoMCk7CkBAIC0xMDMzLDcgKzExMjMsOSBAQAogICAgICAgICBjYXNlIEZGSV9UWVBFX1NJTlQ2NDoKICAgICAgICAgY2FzZSBGRklfVFlQRV9GTE9BVDoKICAgICAgICAgY2FzZSBGRklfVFlQRV9ET1VCTEU6CisjaWYgRkZJX1RZUEVfRE9VQkxFICE9IEZGSV9UWVBFX0xPTkdET1VCTEUKICAgICAgICAgY2FzZSBGRklfVFlQRV9MT05HRE9VQkxFOgorI2VuZGlmCiAJICB7CiAJICAgIHZvaWQgKmFkZHIgPSBnZXRfYmFzaWNfdHlwZV9hZGRyIChjaWYtPnJ0eXBlLT50eXBlLCBjb250ZXh0LCAwKTsKIAkgICAgY29weV9iYXNpY190eXBlIChhZGRyLCBydmFsdWUsIGNpZi0+cnR5cGUtPnR5cGUpOwpAQCAtMTA0MiwxOSArMTEzNCwxOSBAQAogICAgICAgICBjYXNlIEZGSV9UWVBFX1NUUlVDVDoKICAgICAgICAgICBpZiAoaXNfaGZhIChjaWYtPnJ0eXBlKSkKIAkgICAgewotCSAgICAgIGludCBpOworCSAgICAgIGludCBqOwogCSAgICAgIHVuc2lnbmVkIHNob3J0IHR5cGUgPSBnZXRfaG9tb2dlbmVvdXNfdHlwZSAoY2lmLT5ydHlwZSk7CiAJICAgICAgdW5zaWduZWQgZWxlbXMgPSBlbGVtZW50X2NvdW50IChjaWYtPnJ0eXBlKTsKLQkgICAgICBmb3IgKGkgPSAwOyBpIDwgZWxlbXM7IGkrKykKKwkgICAgICBmb3IgKGogPSAwOyBqIDwgZWxlbXM7IGorKykKIAkJewotCQkgIHZvaWQgKnJlZyA9IGdldF9iYXNpY190eXBlX2FkZHIgKHR5cGUsIGNvbnRleHQsIGkpOworCQkgIHZvaWQgKnJlZyA9IGdldF9iYXNpY190eXBlX2FkZHIgKHR5cGUsIGNvbnRleHQsIGopOwogCQkgIGNvcHlfYmFzaWNfdHlwZSAocmVnLCBydmFsdWUsIHR5cGUpOwogCQkgIHJ2YWx1ZSArPSBnZXRfYmFzaWNfdHlwZV9zaXplICh0eXBlKTsKIAkJfQogCSAgICB9CiAgICAgICAgICAgZWxzZSBpZiAoKGNpZi0+cnR5cGUtPnNpemUgKyA3KSAvIDggPCBOX1hfQVJHX1JFRykKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgdW5zaWduZWQgc2l6ZSA9IEFMSUdOIChjaWYtPnJ0eXBlLT5zaXplLCBzaXplb2YgKFVJTlQ2NCkpIDsKKyAgICAgICAgICAgICAgc2l6ZV90IHNpemUgPSBBTElHTiAoY2lmLT5ydHlwZS0+c2l6ZSwgc2l6ZW9mIChVSU5UNjQpKSA7CiAgICAgICAgICAgICAgIG1lbWNweSAoZ2V0X3hfYWRkciAoY29udGV4dCwgMCksIHJ2YWx1ZSwgc2l6ZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgZWxzZQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvYWFyY2g2NC9mZml0YXJnZXQuaCBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL2FhcmNoNjQvZmZpdGFyZ2V0LmgKaW5kZXggNmYxYTM0OC4uNGJiY2VkMiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvYWFyY2g2NC9mZml0YXJnZXQuaAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9hYXJjaDY0L2ZmaXRhcmdldC5oCkBAIC00Nyw4ICs0NywxMiBAQAogCiAvKiAtLS0tIEludGVybmFsIC0tLS0gKi8KIAotCisjaWYgZGVmaW5lZCAoX19BUFBMRV9fKQorI2RlZmluZSBGRklfVEFSR0VUX1NQRUNJRklDX1ZBUklBRElDCisjZGVmaW5lIEZGSV9FWFRSQV9DSUZfRklFTERTIHVuc2lnbmVkIGFhcmNoNjRfZmxhZ3M7IHVuc2lnbmVkIGFhcmNoNjRfbmZpeGVkYXJncworI2Vsc2UKICNkZWZpbmUgRkZJX0VYVFJBX0NJRl9GSUVMRFMgdW5zaWduZWQgYWFyY2g2NF9mbGFncworI2VuZGlmCiAKICNkZWZpbmUgQUFSQ0g2NF9GRklfV0lUSF9WX0JJVCAwCiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL2FhcmNoNjQvc3lzdi5TIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvYWFyY2g2NC9zeXN2LlMKaW5kZXggYjhjZDQyMS4uMTY5ZWFiOCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvYWFyY2g2NC9zeXN2LlMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvYWFyY2g2NC9zeXN2LlMKQEAgLTIzLDE0ICsyMywzMyBAQAogI2luY2x1ZGUgPGZmaWNvbmZpZy5oPgogI2luY2x1ZGUgPGZmaS5oPgogCisjaWZkZWYgSEFWRV9NQUNISU5FX0FTTV9ICisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNlbHNlCisjaWZkZWYgX19VU0VSX0xBQkVMX1BSRUZJWF9fCisjZGVmaW5lIENPTkNBVDEoYSwgYikgQ09OQ0FUMihhLCBiKQorI2RlZmluZSBDT05DQVQyKGEsIGIpIGEgIyMgYgorCisvKiBVc2UgdGhlIHJpZ2h0IHByZWZpeCBmb3IgZ2xvYmFsIGxhYmVscy4gICovCisjZGVmaW5lIENOQU1FKHgpIENPTkNBVDEgKF9fVVNFUl9MQUJFTF9QUkVGSVhfXywgeCkKKyNlbHNlCisjZGVmaW5lIENOQU1FKHgpIHgKKyNlbmRpZgorI2VuZGlmCisKICNkZWZpbmUgY2ZpX2FkanVzdF9jZmFfb2Zmc2V0KG9mZikJLmNmaV9hZGp1c3RfY2ZhX29mZnNldCBvZmYKICNkZWZpbmUgY2ZpX3JlbF9vZmZzZXQocmVnLCBvZmYpCS5jZmlfcmVsX29mZnNldCByZWcsIG9mZgogI2RlZmluZSBjZmlfcmVzdG9yZShyZWcpCQkuY2ZpX3Jlc3RvcmUgcmVnCiAjZGVmaW5lIGNmaV9kZWZfY2ZhX3JlZ2lzdGVyKHJlZykJLmNmaV9kZWZfY2ZhX3JlZ2lzdGVyIHJlZwogCiAgICAgICAgIC50ZXh0Ci0gICAgICAgIC5nbG9ibCBmZmlfY2FsbF9TWVNWCi0gICAgICAgIC50eXBlIGZmaV9jYWxsX1NZU1YsICNmdW5jdGlvbgorICAgICAgICAuZ2xvYmwgQ05BTUUoZmZpX2NhbGxfU1lTVikKKyNpZmRlZiBfX0VMRl9fCisgICAgICAgIC50eXBlIENOQU1FKGZmaV9jYWxsX1NZU1YpLCAjZnVuY3Rpb24KKyNlbmRpZgorI2lmZGVmIF9fQVBQTEVfXworICAgICAgICAuYWxpZ24gMgorI2VuZGlmCiAKIC8qIGZmaV9jYWxsX1NZU1YoKQogCkBAIC01Myw3ICs3Miw3IEBACiAJCQkgICBleHRlbmRlZF9jaWYgKiksCiAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY2FsbF9jb250ZXh0ICpjb250ZXh0LAogICAgICAgICAgICAgICAgICAgZXh0ZW5kZWRfY2lmICosCi0gICAgICAgICAgICAgICAgICB1bnNpZ25lZCByZXF1aXJlZF9zdGFja19zaXplLAorICAgICAgICAgICAgICAgICAgc2l6ZV90IHJlcXVpcmVkX3N0YWNrX3NpemUsCiAgICAgICAgICAgICAgICAgICB2b2lkICgqZm4pKHZvaWQpKTsKIAogICAgVGhlcmVmb3JlIG9uIGVudHJ5IHdlIGhhdmU6CkBAIC04Miw3ICsxMDEsNyBAQAogI2RlZmluZSBmZmlfY2FsbF9TWVNWX0ZTICg4ICogNCkKIAogICAgICAgICAuY2ZpX3N0YXJ0cHJvYwotZmZpX2NhbGxfU1lTVjoKK0NOQU1FKGZmaV9jYWxsX1NZU1YpOgogICAgICAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQogCWNmaV9hZGp1c3RfY2ZhX29mZnNldCAoMTYpCiAgICAgICAgIGNmaV9yZWxfb2Zmc2V0ICh4MjksIDApCkBAIC05MiwxMSArMTExLDExIEBACiAJY2ZpX2RlZl9jZmFfcmVnaXN0ZXIgKHgyOSkKICAgICAgICAgc3ViICAgICBzcCwgc3AsICNmZmlfY2FsbF9TWVNWX0ZTCiAKLSAgICAgICAgc3RwICAgICB4MjEsIHgyMiwgW3NwLCAwXQorICAgICAgICBzdHAgICAgIHgyMSwgeDIyLCBbc3AsICMwXQogICAgICAgICBjZmlfcmVsX29mZnNldCAoeDIxLCAwIC0gZmZpX2NhbGxfU1lTVl9GUykKICAgICAgICAgY2ZpX3JlbF9vZmZzZXQgKHgyMiwgOCAtIGZmaV9jYWxsX1NZU1ZfRlMpCiAKLSAgICAgICAgc3RwICAgICB4MjMsIHgyNCwgW3NwLCAxNl0KKyAgICAgICAgc3RwICAgICB4MjMsIHgyNCwgW3NwLCAjMTZdCiAgICAgICAgIGNmaV9yZWxfb2Zmc2V0ICh4MjMsIDE2IC0gZmZpX2NhbGxfU1lTVl9GUykKICAgICAgICAgY2ZpX3JlbF9vZmZzZXQgKHgyNCwgMjQgLSBmZmlfY2FsbF9TWVNWX0ZTKQogCkBAIC0xODAsNyArMTk5LDkgQEAKICAgICAgICAgcmV0CiAKICAgICAgICAgLmNmaV9lbmRwcm9jCi0gICAgICAgIC5zaXplIGZmaV9jYWxsX1NZU1YsIC4tZmZpX2NhbGxfU1lTVgorI2lmZGVmIF9fRUxGX18KKyAgICAgICAgLnNpemUgQ05BTUUoZmZpX2NhbGxfU1lTViksIC4tQ05BTUUoZmZpX2NhbGxfU1lTVikKKyNlbmRpZgogCiAjZGVmaW5lIGZmaV9jbG9zdXJlX1NZU1ZfRlMgKDggKiAyICsgQUFSQ0g2NF9DQUxMX0NPTlRFWFRfU0laRSkKIApAQCAtMjIyLDIyICsyNDMsMjUgQEAKICAgIFZvaWxhISAgKi8KIAogICAgICAgICAudGV4dAotICAgICAgICAuZ2xvYmwgZmZpX2Nsb3N1cmVfU1lTVgorICAgICAgICAuZ2xvYmwgQ05BTUUoZmZpX2Nsb3N1cmVfU1lTVikKKyNpZmRlZiBfX0FQUExFX18KKyAgICAgICAgLmFsaWduIDIKKyNlbmRpZgogICAgICAgICAuY2ZpX3N0YXJ0cHJvYwotZmZpX2Nsb3N1cmVfU1lTVjoKK0NOQU1FKGZmaV9jbG9zdXJlX1NZU1YpOgogICAgICAgICBzdHAgICAgIHgyOSwgeDMwLCBbc3AsICMtMTZdIQogCWNmaV9hZGp1c3RfY2ZhX29mZnNldCAoMTYpCiAgICAgICAgIGNmaV9yZWxfb2Zmc2V0ICh4MjksIDApCiAgICAgICAgIGNmaV9yZWxfb2Zmc2V0ICh4MzAsIDgpCiAKICAgICAgICAgbW92ICAgICB4MjksIHNwCisgICAgICAgIGNmaV9kZWZfY2ZhX3JlZ2lzdGVyICh4MjkpCiAKICAgICAgICAgc3ViICAgICBzcCwgc3AsICNmZmlfY2xvc3VyZV9TWVNWX0ZTCi0JY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IChmZmlfY2xvc3VyZV9TWVNWX0ZTKQogCiAgICAgICAgIHN0cCAgICAgeDIxLCB4MjIsIFt4MjksICMtMTZdCi0gICAgICAgIGNmaV9yZWxfb2Zmc2V0ICh4MjEsIDApCi0gICAgICAgIGNmaV9yZWxfb2Zmc2V0ICh4MjIsIDgpCisgICAgICAgIGNmaV9yZWxfb2Zmc2V0ICh4MjEsIC0xNikKKyAgICAgICAgY2ZpX3JlbF9vZmZzZXQgKHgyMiwgLTgpCiAKICAgICAgICAgLyogTG9hZCB4MjEgd2l0aCAmY2FsbF9jb250ZXh0LiAgKi8KICAgICAgICAgbW92ICAgICB4MjEsIHNwCkBAIC0yNzAsNyArMjk0LDcgQEAKICAgICAgICAgICAgdHJhbXBvbGluZSB3YXMgY2FsbGVkLiAgKi8KICAgICAgICAgYWRkICAgICB4MiwgeDI5LCAjMTYKIAotICAgICAgICBibCAgICAgIGZmaV9jbG9zdXJlX1NZU1ZfaW5uZXIKKyAgICAgICAgYmwgICAgICBDTkFNRShmZmlfY2xvc3VyZV9TWVNWX2lubmVyKQogCiAgICAgICAgIC8qIEZpZ3VyZSBvdXQgaWYgd2Ugc2hvdWxkIHRvdWNoIHRoZSB2ZWN0b3IgcmVnaXN0ZXJzLiAgKi8KICAgICAgICAgbGRyICAgICB4MCwgW3gyMiwgIzhdCkBAIC0yODcsNyArMzExLDcgQEAKICAgICAgICAgbGRwICAgICB4MiwgeDMsIFt4MjEsICMxNl0KICAgICAgICAgbGRwICAgICB4NCwgeDUsIFt4MjEsICMzMl0KICAgICAgICAgbGRwICAgICB4NiwgeDcsIFt4MjEsICM0OF0KLSAgICAgICAgLyogTm90ZSBub3RoaW5nIHVzZWZ1bGwgaXMgcmV0dXJuZWQgaW4geDguICAqLworICAgICAgICAvKiBOb3RlIG5vdGhpbmcgdXNlZnVsIGlzIHJldHVybmVkIGluIHg4LiAgKi8KIAogICAgICAgICAvKiBXZSBhcmUgZG9uZSwgdW53aW5kIG91ciBmcmFtZS4gICovCiAgICAgICAgIGxkcCAgICAgeDIxLCB4MjIsIFt4MjksICAjLTE2XQpAQCAtMjk1LDcgKzMxOSw3IEBACiAgICAgICAgIGNmaV9yZXN0b3JlICh4MjIpCiAKICAgICAgICAgbW92ICAgICBzcCwgeDI5Ci0JY2ZpX2FkanVzdF9jZmFfb2Zmc2V0ICgtZmZpX2Nsb3N1cmVfU1lTVl9GUykKKyAgICAgICAgY2ZpX2RlZl9jZmFfcmVnaXN0ZXIgKHNwKQogCiAgICAgICAgIGxkcCAgICAgeDI5LCB4MzAsIFtzcF0sICMxNgogCWNmaV9hZGp1c3RfY2ZhX29mZnNldCAoLTE2KQpAQCAtMzA0LDQgKzMyOCw2IEBACiAKICAgICAgICAgcmV0CiAgICAgICAgIC5jZmlfZW5kcHJvYwotICAgICAgICAuc2l6ZSBmZmlfY2xvc3VyZV9TWVNWLCAuLWZmaV9jbG9zdXJlX1NZU1YKKyNpZmRlZiBfX0VMRl9fCisgICAgICAgIC5zaXplIENOQU1FKGZmaV9jbG9zdXJlX1NZU1YpLCAuLUNOQU1FKGZmaV9jbG9zdXJlX1NZU1YpCisjZW5kaWYKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL2FyYy9hcmNvbXBhY3QuUyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL2FyYy9hcmNvbXBhY3QuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzcxNWZkCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvYXJjL2FyY29tcGFjdC5TCkBAIC0wLDAgKzEsMTM1IEBACisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgYXJjb21wYWN0LlMgLSBDb3B5cmlnaHQgKGMpIDIwMTMgU3lucG9zeXMsIEluYy4gKHd3dy5zeW5vcHN5cy5jb20pCisgICAKKyAgIEFSQ29tcGFjdCBGb3JlaWduIEZ1bmN0aW9uIEludGVyZmFjZSAKKworICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisgICBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyAgIGBgU29mdHdhcmUnJyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICAgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICAgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgICBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAgIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQKKyAgIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCisgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTCisgICBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCisgICBJTiBOTyBFVkVOVCBTSEFMTCBSRU5FU0FTIFRFQ0hOT0xPR1kgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAgIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICAgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgICBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIExJQkZGSV9BU00KKyNpbmNsdWRlIDxmZmljb25maWcuaD4KKyNpbmNsdWRlIDxmZmkuaD4KKyNpZmRlZiBIQVZFX01BQ0hJTkVfQVNNX0gKKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2Vsc2UKKyNkZWZpbmUgQ05BTUUoeCkgeAorI2RlZmluZSBFTlRSWSh4KSAuZ2xvYmwgQ05BTUUoeClgIC50eXBlIENOQU1FKHgpLCVmdW5jdGlvbmAgQ05BTUUoeCk6CisjZW5kaWYKKworLnRleHQKKworICAgICAgICAvKiBSMDogICBmZmlfcHJlcF9hcmdzICovCisgICAgICAgIC8qIFIxOiAgICZlY2lmICovCisgICAgICAgIC8qIFIyOiAgIGNpZi0+Ynl0ZXMgKi8KKyAgICAgICAgLyogUjM6ICAgZmlnLT5mbGFncyAqLworICAgICAgICAvKiBSNDogICBlY2lmLnJ2YWx1ZSAqLworICAgICAgICAvKiBSNTogICBmbiAqLworRU5UUlkoZmZpX2NhbGxfQVJDb21wYWN0KQorICAgICAgICAvKiBTYXZlIHJlZ2lzdGVycy4gICovCisgICAgICAgIHN0LmEgICAgICAgZnAsIFtzcCwgLTRdICAgICAgICAvKiBmcCArIDIwLCBmcCAqLworICAgICAgICBwdXNoX3MgICAgIGJsaW5rICAgICAgICAgICAgICAgLyogZnAgKyAxNiwgYmxpbmsgKi8KKyAgICAgICAgc3QuYSAgICAgICByNCwgW3NwLCAtNF0gICAgICAgIC8qIGZwICsgMTIsIGVjaWYucnZhbHVlICovCisgICAgICAgIHB1c2hfcyAgICAgcjMgICAgICAgICAgICAgICAgICAvKiBmcCArICA4LCBmaWctPmZsYWdzICovCisgICAgICAgIHN0LmEgICAgICAgcjUsIFtzcCwgLTRdICAgICAgICAvKiBmcCArICA0LCBmbiAqLworICAgICAgICBwdXNoX3MgICAgIHIyICAgICAgICAgICAgICAgICAgLyogZnAgKyAgMCwgY2lmLT5ieXRlcyAqLworICAgICAgICBtb3YgICAgICAgIGZwLCBzcAorCisgICAgICAgIC8qIE1ha2Ugcm9vbSBmb3IgYWxsIG9mIHRoZSBuZXcgYXJncy4gICovCisgICAgICAgIHN1YiAgICAgICAgc3AsIHNwLCByMgorCisgICAgICAgIC8qIFBsYWNlIGFsbCBvZiB0aGUgZmZpX3ByZXBfYXJncyBpbiBwb3NpdGlvbi4gICovCisgICAgICAgIC8qIGZmaV9wcmVwX2FyZ3MoY2hhciAqc3RhY2ssIGV4dGVuZGVkX2NpZiAqZWNpZikgKi8KKyAgICAgICAgLyogUjEgYWxyZWFkeSBzZXQuICAqLworCisgICAgICAgIC8qIEFuZCBjYWxsLiAgKi8KKyAgICAgICAgamxfcy5kICAgICBbcjBdCisgICAgICAgIG1vdl9zICAgICAgcjAsIHNwCisKKyAgICAgICAgbGQuYWIgICAgICByMTIsIFtmcCwgNF0gICAgICAgIC8qIGNpZi0+Ynl0ZXMgKi8KKyAgICAgICAgbGQuYWIgICAgICByMTEsIFtmcCwgNF0gICAgICAgIC8qIGZuICovCisKKyAgICAgICAgLyogTW92ZSBmaXJzdCA4IHBhcmFtZXRlcnMgaW4gcmVnaXN0ZXJzLi4uICAqLworICAgICAgICBsZF9zICAgICAgIHIwLCBbc3BdCisgICAgICAgIGxkX3MgICAgICAgcjEsIFtzcCwgNF0KKyAgICAgICAgbGRfcyAgICAgICByMiwgW3NwLCA4XQorICAgICAgICBsZF9zICAgICAgIHIzLCBbc3AsIDEyXQorICAgICAgICBsZCAgICAgICAgIHI0LCBbc3AsIDE2XQorICAgICAgICBsZCAgICAgICAgIHI1LCBbc3AsIDIwXQorICAgICAgICBsZCAgICAgICAgIHI2LCBbc3AsIDI0XQorICAgICAgICBsZCAgICAgICAgIHI3LCBbc3AsIDI4XQorCisgICAgICAgIC8qIC4uLmFuZCBhZGp1c3QgdGhlIHN0YWNrLiAgKi8KKyAgICAgICAgbWluICAgICAgICByMTIsIHIxMiwgMzIKKworICAgICAgICAvKiBDYWxsIHRoZSBmdW5jdGlvbi4gICovCisgICAgICAgIGpsLmQgICAgICAgW3IxMV0KKyAgICAgICAgYWRkICAgICAgICBzcCwgc3AsIHIxMiAKKworICAgICAgICBtb3YgICAgICAgIHNwLCBmcCAgICAgICAgCisgICAgICAgIHBvcF9zICAgICAgcjMgICAgICAgIC8qIGZpZy0+ZmxhZ3MsIHJldHVybiB0eXBlICovCisgICAgICAgIHBvcF9zICAgICAgcjIgICAgICAgIC8qIGVjaWYucnZhbHVlLCBwb2ludGVyIGZvciByZXR1cm4gdmFsdWUgKi8KKworICAgICAgICAvKiBJZiB0aGUgcmV0dXJuIHZhbHVlIHBvaW50ZXIgaXMgTlVMTCwgYXNzdW1lIG5vIHJldHVybiB2YWx1ZS4gICovCisgICAgICAgIGJyZXEuZCAgICAgcjIsIDAsIGVwaWxvZ3VlCisgICAgICAgIHBvcF9zICAgICAgYmxpbmsKKworICAgICAgICAvKiBSZXR1cm4gSU5ULiAgKi8KKyAgICAgICAgYnJuZSAgICAgICByMywgRkZJX1RZUEVfSU5ULCByZXR1cm5fZG91YmxlCisgICAgICAgIGIuZCAgICAgICAgZXBpbG9ndWUKKyAgICAgICAgc3RfcyAgICAgICByMCwgW3IyXSAgICAgICAgCisKK3JldHVybl9kb3VibGU6CisgICAgICAgIGJybmUgICAgICAgcjMsIEZGSV9UWVBFX0RPVUJMRSwgZXBpbG9ndWUKKyAgICAgICAgc3RfcyAgICAgICByMCwgW3IyXSAgICAgICAgCisgICAgICAgIHN0X3MgICAgICAgcjEsIFtyMiw0XQorCitlcGlsb2d1ZToKKyAgICAgICAgal9zLmQgICAgICBbYmxpbmtdCisgICAgICAgIGxkLmFiICAgICAgZnAsIFtzcCwgNF0KKworRU5UUlkoZmZpX2Nsb3N1cmVfQVJDb21wYWN0KQorICAgICAgICBzdC5hICAgICAgIHIwLCBbc3AsIC0zMl0KKyAgICAgICAgc3RfcyAgICAgICByMSwgW3NwLCA0XQorICAgICAgICBzdF9zICAgICAgIHIyLCBbc3AsIDhdCisgICAgICAgIHN0X3MgICAgICAgcjMsIFtzcCwgMTJdCisgICAgICAgIHN0ICAgICAgICAgcjQsIFtzcCwgMTZdCisgICAgICAgIHN0ICAgICAgICAgcjUsIFtzcCwgMjBdCisgICAgICAgIHN0ICAgICAgICAgcjYsIFtzcCwgMjRdCisgICAgICAgIHN0ICAgICAgICAgcjcsIFtzcCwgMjhdCisKKyAgICAgICAgLyogcG9pbnRlciB0byBhcmd1bWVudHMgKi8KKyAgICAgICAgbW92X3MgICAgICByMiwgc3AKKworICAgICAgICAvKiByZXR1cm4gdmFsdWUgZ29lcyBoZXJlICovCisgICAgICAgIHN1YiAgICAgICAgc3AsIHNwLCA4CisgICAgICAgIG1vdl9zICAgICAgcjEsIHNwCisKKyAgICAgICAgcHVzaF9zICAgICBibGluaworICAgICAgICAKKyAgICAgICAgYmwuZCAgICAgICBmZmlfY2xvc3VyZV9pbm5lcl9BUkNvbXBhY3QKKyAgICAgICAgbW92X3MgICAgICByMCwgcjggICAgICAgICAgICAgICAgLyogY29kZWxvYywgc2V0IGJ5IHRyYW1wb2xpbmUgKi8KKworICAgICAgICBwb3BfcyAgICAgIGJsaW5rCisKKyAgICAgICAgLyogc2V0IHJldHVybiB2YWx1ZSB0byByMTpyMCAqLworICAgICAgICBwb3BfcyAgICAgIHIwCisgICAgICAgIHBvcF9zICAgICAgcjEKKyAgICAgICAgal9zLmQgICAgICBbYmxpbmtdCisgICAgICAgIGFkZF9zICAgICAgc3AsIHNwLCAzMgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvYXJjL2ZmaS5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvYXJjL2ZmaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyZjgyYTcKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9hcmMvZmZpLmMKQEAgLTAsMCArMSwyNjggQEAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBmZmkuYyAtIENvcHlyaWdodCAoYykgMjAxMyAgU3lub3BzeXMsIEluYy4gKHd3dy5zeW5vcHN5cy5jb20pCisgICAKKyAgIEFSQyBGb3JlaWduIEZ1bmN0aW9uIEludGVyZmFjZSAKKworICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisgICBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyAgIGBgU29mdHdhcmUnJyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICAgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICAgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgICBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAgIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQKKyAgIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCisgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTCisgICBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCisgICBJTiBOTyBFVkVOVCBTSEFMTCBSRU5FU0FTIFRFQ0hOT0xPR1kgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAgIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICAgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgICBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaW5jbHVkZSA8ZmZpLmg+CisjaW5jbHVkZSA8ZmZpX2NvbW1vbi5oPgorCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKyNpbmNsdWRlIDxzeXMvY2FjaGVjdGwuaD4KKworLyogZm9yIGxpdHRsZSBlbmRpYW4gQVJDLCB0aGUgY29kZSBpcyBpbiBmYWN0IHN0b3JlZCBhcyBtaXhlZCBlbmRpYW4gZm9yCisgICBwZXJmb3JtYW5jZSByZWFzb25zICovCisjaWYgX19CSUdfRU5ESUFOX18KKyNkZWZpbmUgQ09ERV9FTkRJQU4oeCkgKHgpCisjZWxzZQorI2RlZmluZSBDT0RFX0VORElBTih4KSAoICgoKHVpbnQzMl90KSAoeCkpIDw8IDE2KSB8ICgoKHVpbnQzMl90KSAoeCkpID4+IDE2KSkKKyNlbmRpZgorCisvKiBmZmlfcHJlcF9hcmdzIGlzIGNhbGxlZCBieSB0aGUgYXNzZW1ibHkgcm91dGluZSBvbmNlIHN0YWNrCisgICBzcGFjZSBoYXMgYmVlbiBhbGxvY2F0ZWQgZm9yIHRoZSBmdW5jdGlvbidzIGFyZ3VtZW50cy4gICovCisKK3ZvaWQKK2ZmaV9wcmVwX2FyZ3MgKGNoYXIgKnN0YWNrLCBleHRlbmRlZF9jaWYgKiBlY2lmKQoreworICB1bnNpZ25lZCBpbnQgaTsKKyAgaW50IHRtcDsKKyAgdm9pZCAqKnBfYXJndjsKKyAgY2hhciAqYXJncDsKKyAgZmZpX3R5cGUgKipwX2FyZzsKKworICB0bXAgPSAwOworICBhcmdwID0gc3RhY2s7CisKKyAgaWYgKGVjaWYtPmNpZi0+cnR5cGUtPnR5cGUgPT0gRkZJX1RZUEVfU1RSVUNUKQorICAgIHsKKyAgICAgICoodm9pZCAqKikgYXJncCA9IGVjaWYtPnJ2YWx1ZTsKKyAgICAgIGFyZ3AgKz0gNDsKKyAgICB9CisKKyAgcF9hcmd2ID0gZWNpZi0+YXZhbHVlOworCisgIGZvciAoaSA9IGVjaWYtPmNpZi0+bmFyZ3MsIHBfYXJnID0gZWNpZi0+Y2lmLT5hcmdfdHlwZXM7CisgICAgICAgKGkgIT0gMCk7IGktLSwgcF9hcmcrKykKKyAgICB7CisgICAgICBzaXplX3QgejsKKyAgICAgIGludCBhbGlnbm1lbnQ7CisKKyAgICAgIC8qIGFsaWduIGFsaWdubWVudCB0byA0ICovCisgICAgICBhbGlnbm1lbnQgPSAoKCgqcF9hcmcpLT5hbGlnbm1lbnQgLSAxKSB8IDMpICsgMTsKKworICAgICAgLyogQWxpZ24gaWYgbmVjZXNzYXJ5LiAgKi8KKyAgICAgIGlmICgoYWxpZ25tZW50IC0gMSkgJiAodW5zaWduZWQpIGFyZ3ApCisJYXJncCA9IChjaGFyICopIEFMSUdOIChhcmdwLCBhbGlnbm1lbnQpOworCisgICAgICB6ID0gKCpwX2FyZyktPnNpemU7CisgICAgICBpZiAoeiA8IHNpemVvZiAoaW50KSkKKwl7CisJICB6ID0gc2l6ZW9mIChpbnQpOworCisJICBzd2l0Y2ggKCgqcF9hcmcpLT50eXBlKQorCSAgICB7CisJICAgIGNhc2UgRkZJX1RZUEVfU0lOVDg6CisJICAgICAgKihzaWduZWQgaW50ICopIGFyZ3AgPSAoc2lnbmVkIGludCkgKihTSU5UOCAqKSAoKnBfYXJndik7CisJICAgICAgYnJlYWs7CisKKwkgICAgY2FzZSBGRklfVFlQRV9VSU5UODoKKwkgICAgICAqKHVuc2lnbmVkIGludCAqKSBhcmdwID0gKHVuc2lnbmVkIGludCkgKihVSU5UOCAqKSAoKnBfYXJndik7CisJICAgICAgYnJlYWs7CisKKwkgICAgY2FzZSBGRklfVFlQRV9TSU5UMTY6CisJICAgICAgKihzaWduZWQgaW50ICopIGFyZ3AgPSAoc2lnbmVkIGludCkgKihTSU5UMTYgKikgKCpwX2FyZ3YpOworCSAgICAgIGJyZWFrOworCisJICAgIGNhc2UgRkZJX1RZUEVfVUlOVDE2OgorCSAgICAgICoodW5zaWduZWQgaW50ICopIGFyZ3AgPSAodW5zaWduZWQgaW50KSAqKFVJTlQxNiAqKSAoKnBfYXJndik7CisJICAgICAgYnJlYWs7CisKKwkgICAgY2FzZSBGRklfVFlQRV9TVFJVQ1Q6CisJICAgICAgbWVtY3B5IChhcmdwLCAqcF9hcmd2LCAoKnBfYXJnKS0+c2l6ZSk7CisJICAgICAgYnJlYWs7CisKKwkgICAgZGVmYXVsdDoKKwkgICAgICBGRklfQVNTRVJUICgwKTsKKwkgICAgfQorCX0KKyAgICAgIGVsc2UgaWYgKHogPT0gc2l6ZW9mIChpbnQpKQorCXsKKwkgICoodW5zaWduZWQgaW50ICopIGFyZ3AgPSAodW5zaWduZWQgaW50KSAqKFVJTlQzMiAqKSAoKnBfYXJndik7CisJfQorICAgICAgZWxzZQorCXsKKwkgIGlmICgoKnBfYXJnKS0+dHlwZSA9PSBGRklfVFlQRV9TVFJVQ1QpCisJICAgIHsKKwkgICAgICBtZW1jcHkgKGFyZ3AsICpwX2FyZ3YsIHopOworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICAvKiBEb3VibGUgb3IgbG9uZyBsb25nIDY0Yml0LiAgKi8KKwkgICAgICBtZW1jcHkgKGFyZ3AsICpwX2FyZ3YsIHopOworCSAgICB9CisJfQorICAgICAgcF9hcmd2Kys7CisgICAgICBhcmdwICs9IHo7CisgICAgfQorCisgIHJldHVybjsKK30KKworLyogUGVyZm9ybSBtYWNoaW5lIGRlcGVuZGVudCBjaWYgcHJvY2Vzc2luZy4gICovCitmZmlfc3RhdHVzCitmZmlfcHJlcF9jaWZfbWFjaGRlcCAoZmZpX2NpZiAqIGNpZikKK3sKKyAgLyogU2V0IHRoZSByZXR1cm4gdHlwZSBmbGFnLiAgKi8KKyAgc3dpdGNoIChjaWYtPnJ0eXBlLT50eXBlKQorICAgIHsKKyAgICBjYXNlIEZGSV9UWVBFX1ZPSUQ6CisgICAgICBjaWYtPmZsYWdzID0gKHVuc2lnbmVkKSBjaWYtPnJ0eXBlLT50eXBlOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZGSV9UWVBFX1NUUlVDVDoKKyAgICAgIGNpZi0+ZmxhZ3MgPSAodW5zaWduZWQpIGNpZi0+cnR5cGUtPnR5cGU7CisgICAgICBicmVhazsKKworICAgIGNhc2UgRkZJX1RZUEVfU0lOVDY0OgorICAgIGNhc2UgRkZJX1RZUEVfVUlOVDY0OgorICAgIGNhc2UgRkZJX1RZUEVfRE9VQkxFOgorICAgICAgY2lmLT5mbGFncyA9IEZGSV9UWVBFX0RPVUJMRTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBGRklfVFlQRV9GTE9BVDoKKyAgICBkZWZhdWx0OgorICAgICAgY2lmLT5mbGFncyA9IEZGSV9UWVBFX0lOVDsKKyAgICAgIGJyZWFrOworICAgIH0KKworICByZXR1cm4gRkZJX09LOworfQorCitleHRlcm4gdm9pZCBmZmlfY2FsbF9BUkNvbXBhY3QgKHZvaWQgKCopKGNoYXIgKiwgZXh0ZW5kZWRfY2lmICopLAorCQkJCWV4dGVuZGVkX2NpZiAqLCB1bnNpZ25lZCwgdW5zaWduZWQsCisJCQkJdW5zaWduZWQgKiwgdm9pZCAoKmZuKSAodm9pZCkpOworCit2b2lkCitmZmlfY2FsbCAoZmZpX2NpZiAqIGNpZiwgdm9pZCAoKmZuKSAodm9pZCksIHZvaWQgKnJ2YWx1ZSwgdm9pZCAqKmF2YWx1ZSkKK3sKKyAgZXh0ZW5kZWRfY2lmIGVjaWY7CisKKyAgZWNpZi5jaWYgPSBjaWY7CisgIGVjaWYuYXZhbHVlID0gYXZhbHVlOworCisgIC8qIElmIHRoZSByZXR1cm4gdmFsdWUgaXMgYSBzdHJ1Y3QgYW5kIHdlIGRvbid0IGhhdmUKKyAgICAgYSByZXR1cm4gdmFsdWUgYWRkcmVzcyB0aGVuIHdlIG5lZWQgdG8gbWFrZSBvbmUuICAqLworICBpZiAoKHJ2YWx1ZSA9PSBOVUxMKSAmJiAoY2lmLT5ydHlwZS0+dHlwZSA9PSBGRklfVFlQRV9TVFJVQ1QpKQorICAgIHsKKyAgICAgIGVjaWYucnZhbHVlID0gYWxsb2NhIChjaWYtPnJ0eXBlLT5zaXplKTsKKyAgICB9CisgIGVsc2UKKyAgICBlY2lmLnJ2YWx1ZSA9IHJ2YWx1ZTsKKworICBzd2l0Y2ggKGNpZi0+YWJpKQorICAgIHsKKyAgICBjYXNlIEZGSV9BUkNPTVBBQ1Q6CisgICAgICBmZmlfY2FsbF9BUkNvbXBhY3QgKGZmaV9wcmVwX2FyZ3MsICZlY2lmLCBjaWYtPmJ5dGVzLAorCQkJICBjaWYtPmZsYWdzLCBlY2lmLnJ2YWx1ZSwgZm4pOworICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgRkZJX0FTU0VSVCAoMCk7CisgICAgICBicmVhazsKKyAgICB9Cit9CisKK2ludAorZmZpX2Nsb3N1cmVfaW5uZXJfQVJDb21wYWN0IChmZmlfY2xvc3VyZSAqIGNsb3N1cmUsIHZvaWQgKnJ2YWx1ZSwKKwkJCSAgICAgZmZpX2FyZyAqIGFyZ3MpCit7CisgIHZvaWQgKiphcmdfYXJlYSwgKipwX2FyZ3Y7CisgIGZmaV9jaWYgKmNpZiA9IGNsb3N1cmUtPmNpZjsKKyAgY2hhciAqYXJncCA9IChjaGFyICopIGFyZ3M7CisgIGZmaV90eXBlICoqcF9hcmd0OworICBpbnQgaTsKKworICBhcmdfYXJlYSA9ICh2b2lkICoqKSBhbGxvY2EgKGNpZi0+bmFyZ3MgKiBzaXplb2YgKHZvaWQgKikpOworCisgIC8qIGhhbmRsZSBoaWRkZW4gYXJndW1lbnQgKi8KKyAgaWYgKGNpZi0+ZmxhZ3MgPT0gRkZJX1RZUEVfU1RSVUNUKQorICAgIHsKKyAgICAgIHJ2YWx1ZSA9ICoodm9pZCAqKikgYXJncDsKKyAgICAgIGFyZ3AgKz0gNDsKKyAgICB9CisKKyAgcF9hcmd2ID0gYXJnX2FyZWE7CisKKyAgZm9yIChpID0gMCwgcF9hcmd0ID0gY2lmLT5hcmdfdHlwZXM7IGkgPCBjaWYtPm5hcmdzOworICAgICAgIGkrKywgcF9hcmd0KyssIHBfYXJndisrKQorICAgIHsKKyAgICAgIHNpemVfdCB6OworICAgICAgaW50IGFsaWdubWVudDsKKworICAgICAgLyogYWxpZ24gYWxpZ25tZW50IHRvIDQgKi8KKyAgICAgIGFsaWdubWVudCA9ICgoKCpwX2FyZ3QpLT5hbGlnbm1lbnQgLSAxKSB8IDMpICsgMTsKKworICAgICAgLyogQWxpZ24gaWYgbmVjZXNzYXJ5LiAgKi8KKyAgICAgIGlmICgoYWxpZ25tZW50IC0gMSkgJiAodW5zaWduZWQpIGFyZ3ApCisJYXJncCA9IChjaGFyICopIEFMSUdOIChhcmdwLCBhbGlnbm1lbnQpOworCisgICAgICB6ID0gKCpwX2FyZ3QpLT5zaXplOworICAgICAgKnBfYXJndiA9ICh2b2lkICopIGFyZ3A7CisgICAgICBhcmdwICs9IHo7CisgICAgfQorCisgIChjbG9zdXJlLT5mdW4pIChjaWYsIHJ2YWx1ZSwgYXJnX2FyZWEsIGNsb3N1cmUtPnVzZXJfZGF0YSk7CisKKyAgcmV0dXJuIGNpZi0+ZmxhZ3M7Cit9CisKK2V4dGVybiB2b2lkIGZmaV9jbG9zdXJlX0FSQ29tcGFjdCAodm9pZCk7CisKK2ZmaV9zdGF0dXMKK2ZmaV9wcmVwX2Nsb3N1cmVfbG9jIChmZmlfY2xvc3VyZSAqIGNsb3N1cmUsIGZmaV9jaWYgKiBjaWYsCisJCSAgICAgIHZvaWQgKCpmdW4pIChmZmlfY2lmICosIHZvaWQgKiwgdm9pZCAqKiwgdm9pZCAqKSwKKwkJICAgICAgdm9pZCAqdXNlcl9kYXRhLCB2b2lkICpjb2RlbG9jKQoreworICB1aW50MzJfdCAqdHJhbXAgPSAodWludDMyX3QgKikgJiAoY2xvc3VyZS0+dHJhbXBbMF0pOworCisgIHN3aXRjaCAoY2lmLT5hYmkpCisgICAgeworICAgIGNhc2UgRkZJX0FSQ09NUEFDVDoKKyAgICAgIEZGSV9BU1NFUlQgKHRyYW1wID09IGNvZGVsb2MpOworICAgICAgdHJhbXBbMF0gPSBDT0RFX0VORElBTiAoMHgyMDBhMWZjMCk7CS8qIG1vdiByOCwgcGNsICAqLworICAgICAgdHJhbXBbMV0gPSBDT0RFX0VORElBTiAoMHgyMDIwMGY4MCk7CS8qIGogW2xvbmcgaW1tXSAqLworICAgICAgdHJhbXBbMl0gPSBDT0RFX0VORElBTiAoZmZpX2Nsb3N1cmVfQVJDb21wYWN0KTsKKyAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgIHJldHVybiBGRklfQkFEX0FCSTsKKyAgICB9CisKKyAgY2xvc3VyZS0+Y2lmID0gY2lmOworICBjbG9zdXJlLT5mdW4gPSBmdW47CisgIGNsb3N1cmUtPnVzZXJfZGF0YSA9IHVzZXJfZGF0YTsKKyAgY2FjaGVmbHVzaCAoY29kZWxvYywgRkZJX1RSQU1QT0xJTkVfU0laRSwgQkNBQ0hFKTsKKworICByZXR1cm4gRkZJX09LOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvYXJjL2ZmaXRhcmdldC5oIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvYXJjL2ZmaXRhcmdldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmODMxMWIKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9hcmMvZmZpdGFyZ2V0LmgKQEAgLTAsMCArMSw1MyBAQAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIGZmaXRhcmdldC5oIC0gQ29weXJpZ2h0IChjKSAyMDEyICBBbnRob255IEdyZWVuCisgICAgICAgICAgICAgICAgIENvcHlyaWdodCAoYykgMjAxMyAgU3lub3BzeXMsIEluYy4gKHd3dy5zeW5vcHN5cy5jb20pCisgICBUYXJnZXQgY29uZmlndXJhdGlvbiBtYWNyb3MgZm9yIEFSQy4KKworICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisgICBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyAgIGBgU29mdHdhcmUnJyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICAgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICAgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgICBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAgIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQKKyAgIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCisgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTCisgICBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCisgICBJTiBOTyBFVkVOVCBTSEFMTCBSRU5FU0FTIFRFQ0hOT0xPR1kgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAgIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICAgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgICBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZm5kZWYgTElCRkZJX1RBUkdFVF9ICisjZGVmaW5lIExJQkZGSV9UQVJHRVRfSAorCisjaWZuZGVmIExJQkZGSV9ICisjZXJyb3IgIlBsZWFzZSBkbyBub3QgaW5jbHVkZSBmZml0YXJnZXQuaCBkaXJlY3RseSBpbnRvIHlvdXIgc291cmNlLiAgVXNlIGZmaS5oIGluc3RlYWQuIgorI2VuZGlmCisKKy8qIC0tLS0gR2VuZXJpYyB0eXBlIGRlZmluaXRpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZm5kZWYgTElCRkZJX0FTTQordHlwZWRlZiB1bnNpZ25lZCBsb25nIGZmaV9hcmc7Cit0eXBlZGVmIHNpZ25lZCBsb25nIGZmaV9zYXJnOworCit0eXBlZGVmIGVudW0gZmZpX2FiaQoreworICBGRklfRklSU1RfQUJJID0gMCwKKyAgRkZJX0FSQ09NUEFDVCwKKyAgRkZJX0xBU1RfQUJJLAorICBGRklfREVGQVVMVF9BQkkgPSBGRklfQVJDT01QQUNUCit9IGZmaV9hYmk7CisjZW5kaWYKKworI2RlZmluZSBGRklfQ0xPU1VSRVMgCQkxCisjZGVmaW5lIEZGSV9UUkFNUE9MSU5FX1NJWkUJMTIKKyNkZWZpbmUgRkZJX05BVElWRV9SQVdfQVBJIAkwCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvYXJtL2ZmaS5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvYXJtL2ZmaS5jCmluZGV4IDdmZDdmNDQuLjY2OTFhYjUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL2FybS9mZmkuYworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9hcm0vZmZpLmMKQEAgLTQsOCArNCw4IEBACiAgICAgICAgICAgIENvcHlyaWdodCAoYykgMjAxMSBBbnRob255IEdyZWVuCiAJICAgQ29weXJpZ2h0IChjKSAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgogICAgICAgICAgICBDb3B5cmlnaHQgKGMpIDE5OTgsIDIwMDgsIDIwMTEgIFJlZCBIYXQsIEluYy4KLQkgICAKLSAgIEFSTSBGb3JlaWduIEZ1bmN0aW9uIEludGVyZmFjZSAKKworICAgQVJNIEZvcmVpZ24gRnVuY3Rpb24gSW50ZXJmYWNlCiAKICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZwogICAgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCkBAIC0zNyw2ICszNyw4NyBAQAogc3RhdGljIGludCB2ZnBfdHlwZV9wIChmZmlfdHlwZSAqKTsKIHN0YXRpYyB2b2lkIGxheW91dF92ZnBfYXJncyAoZmZpX2NpZiAqKTsKIAoraW50IGZmaV9wcmVwX2FyZ3NfU1lTVihjaGFyICpzdGFjaywgZXh0ZW5kZWRfY2lmICplY2lmLCBmbG9hdCAqdmZwX3NwYWNlKTsKK2ludCBmZmlfcHJlcF9hcmdzX1ZGUChjaGFyICpzdGFjaywgZXh0ZW5kZWRfY2lmICplY2lmLCBmbG9hdCAqdmZwX3NwYWNlKTsKKworc3RhdGljIGNoYXIqIGZmaV9hbGlnbihmZmlfdHlwZSAqKnBfYXJnLCBjaGFyICphcmdwKQoreworICAvKiBBbGlnbiBpZiBuZWNlc3NhcnkgKi8KKyAgcmVnaXN0ZXIgc2l6ZV90IGFsaWdubWVudCA9ICgqcF9hcmcpLT5hbGlnbm1lbnQ7CisgIGlmIChhbGlnbm1lbnQgPCA0KQorICB7CisgICAgYWxpZ25tZW50ID0gNDsKKyAgfQorI2lmZGVmIF9XSU4zMl9XQ0UKKyAgaWYgKGFsaWdubWVudCA+IDQpCisgIHsKKyAgICBhbGlnbm1lbnQgPSA0OworICB9CisjZW5kaWYKKyAgaWYgKChhbGlnbm1lbnQgLSAxKSAmICh1bnNpZ25lZCkgYXJncCkKKyAgeworICAgIGFyZ3AgPSAoY2hhciAqKSBBTElHTihhcmdwLCBhbGlnbm1lbnQpOworICB9CisKKyAgaWYgKCgqcF9hcmcpLT50eXBlID09IEZGSV9UWVBFX1NUUlVDVCkKKyAgeworICAgIGFyZ3AgPSAoY2hhciAqKSBBTElHTihhcmdwLCA0KTsKKyAgfQorICByZXR1cm4gYXJncDsKK30KKworc3RhdGljIHNpemVfdCBmZmlfcHV0X2FyZyhmZmlfdHlwZSAqKmFyZ190eXBlLCB2b2lkICoqYXJnLCBjaGFyICpzdGFjaykKK3sKKwlyZWdpc3RlciBjaGFyKiBhcmdwID0gc3RhY2s7CisJcmVnaXN0ZXIgZmZpX3R5cGUgKipwX2FyZyA9IGFyZ190eXBlOworCXJlZ2lzdGVyIHZvaWQgKipwX2FyZ3YgPSBhcmc7CisJcmVnaXN0ZXIgc2l6ZV90IHogPSAoKnBfYXJnKS0+c2l6ZTsKKyAgaWYgKHogPCBzaXplb2YoaW50KSkKKyAgICB7CisJCXogPSBzaXplb2YoaW50KTsKKwkJc3dpdGNoICgoKnBfYXJnKS0+dHlwZSkKKyAgICAgIHsKKyAgICAgIGNhc2UgRkZJX1RZUEVfU0lOVDg6CisgICAgICAgICooc2lnbmVkIGludCAqKSBhcmdwID0gKHNpZ25lZCBpbnQpKihTSU5UOCAqKSgqIHBfYXJndik7CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICAgIGNhc2UgRkZJX1RZUEVfVUlOVDg6CisgICAgICAgICoodW5zaWduZWQgaW50ICopIGFyZ3AgPSAodW5zaWduZWQgaW50KSooVUlOVDggKikoKiBwX2FyZ3YpOworICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgICBjYXNlIEZGSV9UWVBFX1NJTlQxNjoKKyAgICAgICAgKihzaWduZWQgaW50ICopIGFyZ3AgPSAoc2lnbmVkIGludCkqKFNJTlQxNiAqKSgqIHBfYXJndik7CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICAgIGNhc2UgRkZJX1RZUEVfVUlOVDE2OgorICAgICAgICAqKHVuc2lnbmVkIGludCAqKSBhcmdwID0gKHVuc2lnbmVkIGludCkqKFVJTlQxNiAqKSgqIHBfYXJndik7CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICAgIGNhc2UgRkZJX1RZUEVfU1RSVUNUOgorICAgICAgICBtZW1jcHkoYXJncCwgKnBfYXJndiwgKCpwX2FyZyktPnNpemUpOworICAgICAgICBicmVhazsKKworICAgICAgZGVmYXVsdDoKKyAgICAgICAgRkZJX0FTU0VSVCgwKTsKKyAgICAgIH0KKyAgICB9CisgIGVsc2UgaWYgKHogPT0gc2l6ZW9mKGludCkpCisgICAgeworCQlpZiAoKCpwX2FyZyktPnR5cGUgPT0gRkZJX1RZUEVfRkxPQVQpCisJCQkqKGZsb2F0ICopIGFyZ3AgPSAqKGZsb2F0ICopKCogcF9hcmd2KTsKKwkJZWxzZQorCQkJKih1bnNpZ25lZCBpbnQgKikgYXJncCA9ICh1bnNpZ25lZCBpbnQpKihVSU5UMzIgKikoKiBwX2FyZ3YpOworICAgIH0KKwllbHNlIGlmICh6ID09IHNpemVvZihkb3VibGUpICYmICgqcF9hcmcpLT50eXBlID09IEZGSV9UWVBFX0RPVUJMRSkKKwkJeworCQkJKihkb3VibGUgKikgYXJncCA9ICooZG91YmxlICopKCogcF9hcmd2KTsKKwkJfQorICBlbHNlCisgICAgeworICAgICAgbWVtY3B5KGFyZ3AsICpwX2FyZ3YsIHopOworICAgIH0KKyAgcmV0dXJuIHo7Cit9CiAvKiBmZmlfcHJlcF9hcmdzIGlzIGNhbGxlZCBieSB0aGUgYXNzZW1ibHkgcm91dGluZSBvbmNlIHN0YWNrIHNwYWNlCiAgICBoYXMgYmVlbiBhbGxvY2F0ZWQgZm9yIHRoZSBmdW5jdGlvbidzIGFyZ3VtZW50cwogICAgCkBAIC00NCwxNCArMTI1LDE0IEBACiAgICB2YWx1ZSBpcyBjaWYtPnZmcF91c2VkICh3b3JkIGJpdHNldCBvZiBWRlAgcmVncyB1c2VkIGZvciBwYXNzaW5nCiAgICBhcmd1bWVudHMpLiBUaGVzZSBhcmUgb25seSB1c2VkIGZvciB0aGUgVkZQIGhhcmQtZmxvYXQgQUJJLgogKi8KLWludCBmZmlfcHJlcF9hcmdzKGNoYXIgKnN0YWNrLCBleHRlbmRlZF9jaWYgKmVjaWYsIGZsb2F0ICp2ZnBfc3BhY2UpCitpbnQgZmZpX3ByZXBfYXJnc19TWVNWKGNoYXIgKnN0YWNrLCBleHRlbmRlZF9jaWYgKmVjaWYsIGZsb2F0ICp2ZnBfc3BhY2UpCiB7Ci0gIHJlZ2lzdGVyIHVuc2lnbmVkIGludCBpLCB2aSA9IDA7CisgIHJlZ2lzdGVyIHVuc2lnbmVkIGludCBpOwogICByZWdpc3RlciB2b2lkICoqcF9hcmd2OwogICByZWdpc3RlciBjaGFyICphcmdwOwogICByZWdpc3RlciBmZmlfdHlwZSAqKnBfYXJnOwotCiAgIGFyZ3AgPSBzdGFjazsKKyAgCiAKICAgaWYgKCBlY2lmLT5jaWYtPmZsYWdzID09IEZGSV9UWVBFX1NUUlVDVCApIHsKICAgICAqKHZvaWQgKiopIGFyZ3AgPSBlY2lmLT5ydmFsdWU7CkBAIC02Miw4MSArMTQzLDg5IEBACiAKICAgZm9yIChpID0gZWNpZi0+Y2lmLT5uYXJncywgcF9hcmcgPSBlY2lmLT5jaWYtPmFyZ190eXBlczsKICAgICAgICAoaSAhPSAwKTsKLSAgICAgICBpLS0sIHBfYXJnKyspCisgICAgICAgaS0tLCBwX2FyZysrLCBwX2FyZ3YrKykKICAgICB7Ci0gICAgICBzaXplX3QgejsKLSAgICAgIHNpemVfdCBhbGlnbm1lbnQ7Ci0KLSAgICAgIC8qIEFsbG9jYXRlZCBpbiBWRlAgcmVnaXN0ZXJzLiAqLwotICAgICAgaWYgKGVjaWYtPmNpZi0+YWJpID09IEZGSV9WRlAKLQkgICYmIHZpIDwgZWNpZi0+Y2lmLT52ZnBfbmFyZ3MgJiYgdmZwX3R5cGVfcCAoKnBfYXJnKSkKLQl7Ci0JICBmbG9hdCogdmZwX3Nsb3QgPSB2ZnBfc3BhY2UgKyBlY2lmLT5jaWYtPnZmcF9hcmdzW3ZpKytdOwotCSAgaWYgKCgqcF9hcmcpLT50eXBlID09IEZGSV9UWVBFX0ZMT0FUKQotCSAgICAqKChmbG9hdCopdmZwX3Nsb3QpID0gKigoZmxvYXQqKSpwX2FyZ3YpOwotCSAgZWxzZSBpZiAoKCpwX2FyZyktPnR5cGUgPT0gRkZJX1RZUEVfRE9VQkxFKQotCSAgICAqKChkb3VibGUqKXZmcF9zbG90KSA9ICooKGRvdWJsZSopKnBfYXJndik7Ci0JICBlbHNlCi0JICAgIG1lbWNweSh2ZnBfc2xvdCwgKnBfYXJndiwgKCpwX2FyZyktPnNpemUpOwotCSAgcF9hcmd2Kys7Ci0JICBjb250aW51ZTsKLQl9Ci0KLSAgICAgIC8qIEFsaWduIGlmIG5lY2Vzc2FyeSAqLwotICAgICAgYWxpZ25tZW50ID0gKCpwX2FyZyktPmFsaWdubWVudDsKLSNpZmRlZiBfV0lOMzJfV0NFCi0gICAgICBpZiAoYWxpZ25tZW50ID4gNCkKLQlhbGlnbm1lbnQgPSA0OwotI2VuZGlmCi0gICAgICBpZiAoKGFsaWdubWVudCAtIDEpICYgKHVuc2lnbmVkKSBhcmdwKSB7Ci0JYXJncCA9IChjaGFyICopIEFMSUdOKGFyZ3AsIGFsaWdubWVudCk7Ci0gICAgICB9Ci0KLSAgICAgIGlmICgoKnBfYXJnKS0+dHlwZSA9PSBGRklfVFlQRV9TVFJVQ1QpCi0JYXJncCA9IChjaGFyICopIEFMSUdOKGFyZ3AsIDQpOwotCi0JICB6ID0gKCpwX2FyZyktPnNpemU7Ci0JICBpZiAoeiA8IHNpemVvZihpbnQpKQotCSAgICB7Ci0JICAgICAgeiA9IHNpemVvZihpbnQpOwotCSAgICAgIHN3aXRjaCAoKCpwX2FyZyktPnR5cGUpCi0JCXsKLQkJY2FzZSBGRklfVFlQRV9TSU5UODoKLQkJICAqKHNpZ25lZCBpbnQgKikgYXJncCA9IChzaWduZWQgaW50KSooU0lOVDggKikoKiBwX2FyZ3YpOwotCQkgIGJyZWFrOwotCQkgIAotCQljYXNlIEZGSV9UWVBFX1VJTlQ4OgotCQkgICoodW5zaWduZWQgaW50ICopIGFyZ3AgPSAodW5zaWduZWQgaW50KSooVUlOVDggKikoKiBwX2FyZ3YpOwotCQkgIGJyZWFrOwotCQkgIAotCQljYXNlIEZGSV9UWVBFX1NJTlQxNjoKLQkJICAqKHNpZ25lZCBpbnQgKikgYXJncCA9IChzaWduZWQgaW50KSooU0lOVDE2ICopKCogcF9hcmd2KTsKLQkJICBicmVhazsKLQkJICAKLQkJY2FzZSBGRklfVFlQRV9VSU5UMTY6Ci0JCSAgKih1bnNpZ25lZCBpbnQgKikgYXJncCA9ICh1bnNpZ25lZCBpbnQpKihVSU5UMTYgKikoKiBwX2FyZ3YpOwotCQkgIGJyZWFrOwotCQkgIAotCQljYXNlIEZGSV9UWVBFX1NUUlVDVDoKLQkJICBtZW1jcHkoYXJncCwgKnBfYXJndiwgKCpwX2FyZyktPnNpemUpOwotCQkgIGJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCSAgRkZJX0FTU0VSVCgwKTsKLQkJfQotCSAgICB9Ci0JICBlbHNlIGlmICh6ID09IHNpemVvZihpbnQpKQotCSAgICB7Ci0JICAgICAgKih1bnNpZ25lZCBpbnQgKikgYXJncCA9ICh1bnNpZ25lZCBpbnQpKihVSU5UMzIgKikoKiBwX2FyZ3YpOwotCSAgICB9Ci0JICBlbHNlCi0JICAgIHsKLQkgICAgICBtZW1jcHkoYXJncCwgKnBfYXJndiwgeik7Ci0JICAgIH0KLQkgIHBfYXJndisrOwotCSAgYXJncCArPSB6OworICAgIGFyZ3AgPSBmZmlfYWxpZ24ocF9hcmcsIGFyZ3ApOworICAgIGFyZ3AgKz0gZmZpX3B1dF9hcmcocF9hcmcsIHBfYXJndiwgYXJncCk7CiAgICAgfQogCisgIHJldHVybiAwOworfQorCitpbnQgZmZpX3ByZXBfYXJnc19WRlAoY2hhciAqc3RhY2ssIGV4dGVuZGVkX2NpZiAqZWNpZiwgZmxvYXQgKnZmcF9zcGFjZSkKK3sKKyAgcmVnaXN0ZXIgdW5zaWduZWQgaW50IGksIHZpID0gMDsKKyAgcmVnaXN0ZXIgdm9pZCAqKnBfYXJndjsKKyAgcmVnaXN0ZXIgY2hhciAqYXJncCwgKnJlZ3AsICplb19yZWdwOworICByZWdpc3RlciBmZmlfdHlwZSAqKnBfYXJnOworICBjaGFyIHN0YWNrX3VzZWQgPSAwOworICBjaGFyIGRvbmVfd2l0aF9yZWdzID0gMDsKKyAgY2hhciBpc192ZnBfdHlwZTsKKworICAvLyBtYWtlIHN1cmUgd2UgYXJlIHVzaW5nIEZGSV9WRlAKKyAgRkZJX0FTU0VSVChlY2lmLT5jaWYtPmFiaSA9PSBGRklfVkZQKTsKKworICAvKiB0aGUgZmlyc3QgNCB3b3JkcyBvbiB0aGUgc3RhY2sgYXJlIHVzZWQgZm9yIHZhbHVlcyBwYXNzZWQgaW4gY29yZQorICAgKiByZWdpc3RlcnMuICovCisgIHJlZ3AgPSBzdGFjazsKKyAgZW9fcmVncCA9IGFyZ3AgPSByZWdwICsgMTY7CisgIAorCisgIC8qIGlmIHRoZSBmdW5jdGlvbiByZXR1cm5zIGFuIEZGSV9UWVBFX1NUUlVDVCBpbiBtZW1vcnksIHRoYXQgYWRkcmVzcyBpcworICAgKiBwYXNzZWQgaW4gcjAgdG8gdGhlIGZ1bmN0aW9uICovCisgIGlmICggZWNpZi0+Y2lmLT5mbGFncyA9PSBGRklfVFlQRV9TVFJVQ1QgKSB7CisgICAgKih2b2lkICoqKSByZWdwID0gZWNpZi0+cnZhbHVlOworICAgIHJlZ3AgKz0gNDsKKyAgfQorCisgIHBfYXJndiA9IGVjaWYtPmF2YWx1ZTsKKworICBmb3IgKGkgPSBlY2lmLT5jaWYtPm5hcmdzLCBwX2FyZyA9IGVjaWYtPmNpZi0+YXJnX3R5cGVzOworICAgICAgIChpICE9IDApOworICAgICAgIGktLSwgcF9hcmcrKywgcF9hcmd2KyspCisgICAgeworICAgICAgaXNfdmZwX3R5cGUgPSB2ZnBfdHlwZV9wICgqcF9hcmcpOworCisgICAgICAvKiBBbGxvY2F0ZWQgaW4gVkZQIHJlZ2lzdGVycy4gKi8KKyAgICAgIGlmKHZpIDwgZWNpZi0+Y2lmLT52ZnBfbmFyZ3MgJiYgaXNfdmZwX3R5cGUpCisgICAgICAgIHsKKyAgICAgICAgICBjaGFyICp2ZnBfc2xvdCA9IChjaGFyICopKHZmcF9zcGFjZSArIGVjaWYtPmNpZi0+dmZwX2FyZ3NbdmkrK10pOworICAgICAgICAgIGZmaV9wdXRfYXJnKHBfYXJnLCBwX2FyZ3YsIHZmcF9zbG90KTsKKyAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgLyogVHJ5IGFsbG9jYXRpbmcgaW4gY29yZSByZWdpc3RlcnMuICovCisgICAgICBlbHNlIGlmICghZG9uZV93aXRoX3JlZ3MgJiYgIWlzX3ZmcF90eXBlKQorICAgICAgICB7CisgICAgICAgICAgY2hhciAqdHJlZ3AgPSBmZmlfYWxpZ24ocF9hcmcsIHJlZ3ApOworICAgICAgICAgIHNpemVfdCBzaXplID0gKCpwX2FyZyktPnNpemU7IAorICAgICAgICAgIHNpemUgPSAoc2l6ZSA8IDQpPyA0IDogc2l6ZTsgLy8gcGFkCisgICAgICAgICAgLyogQ2hlY2sgaWYgdGhlcmUgaXMgc3BhY2UgbGVmdCBpbiB0aGUgYWxpZ25lZCByZWdpc3RlciBhcmVhIHRvIHBsYWNlCisgICAgICAgICAgICogdGhlIGFyZ3VtZW50ICovCisgICAgICAgICAgaWYodHJlZ3AgKyBzaXplIDw9IGVvX3JlZ3ApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHJlZ3AgPSB0cmVncCArIGZmaV9wdXRfYXJnKHBfYXJnLCBwX2FyZ3YsIHRyZWdwKTsKKyAgICAgICAgICAgICAgZG9uZV93aXRoX3JlZ3MgPSAocmVncCA9PSBhcmdwKTsKKyAgICAgICAgICAgICAgLy8gZW5zdXJlIHdlIGRpZCBub3Qgd3JpdGUgaW50byB0aGUgc3RhY2sgYXJlYQorICAgICAgICAgICAgICBGRklfQVNTRVJUKHJlZ3AgPD0gYXJncCk7CisgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgIC8qIEluIGNhc2UgdGhlcmUgYXJlIG5vIGFyZ3VtZW50cyBpbiB0aGUgc3RhY2sgYXJlYSB5ZXQsIAorICAgICAgICAgIHRoZSBhcmd1bWVudCBpcyBwYXNzZWQgaW4gdGhlIHJlbWFpbmluZyBjb3JlIHJlZ2lzdGVycyBhbmQgb24gdGhlCisgICAgICAgICAgc3RhY2suICovCisgICAgICAgICAgZWxzZSBpZiAoIXN0YWNrX3VzZWQpIAorICAgICAgICAgICAgeworICAgICAgICAgICAgICBzdGFja191c2VkID0gMTsKKyAgICAgICAgICAgICAgZG9uZV93aXRoX3JlZ3MgPSAxOworICAgICAgICAgICAgICBhcmdwID0gdHJlZ3AgKyBmZmlfcHV0X2FyZyhwX2FyZywgcF9hcmd2LCB0cmVncCk7CisgICAgICAgICAgICAgIEZGSV9BU1NFUlQoZW9fcmVncCA8IGFyZ3ApOworICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgLyogQmFzZSBjYXNlLCBhcmd1bWVudHMgYXJlIHBhc3NlZCBvbiB0aGUgc3RhY2sgKi8KKyAgICAgIHN0YWNrX3VzZWQgPSAxOworICAgICAgYXJncCA9IGZmaV9hbGlnbihwX2FyZywgYXJncCk7CisgICAgICBhcmdwICs9IGZmaV9wdXRfYXJnKHBfYXJnLCBwX2FyZ3YsIGFyZ3ApOworICAgIH0KICAgLyogSW5kaWNhdGUgdGhlIFZGUCByZWdpc3RlcnMgdXNlZC4gKi8KICAgcmV0dXJuIGVjaWYtPmNpZi0+dmZwX3VzZWQ7CiB9CkBAIC0yMjcsNyArMzE2LDcgQEAKICAgZWNpZi5hdmFsdWUgPSBhdmFsdWU7CiAKICAgLyogSWYgdGhlIHJldHVybiB2YWx1ZSBpcyBhIHN0cnVjdCBhbmQgd2UgZG9uJ3QgaGF2ZSBhIHJldHVybgkqLwotICAvKiB2YWx1ZSBhZGRyZXNzIHRoZW4gd2UgbmVlZCB0byBtYWtlIG9uZQkJICAgICAgICAqLworICAvKiB2YWx1ZSBhZGRyZXNzIHRoZW4gd2UgbmVlZCB0byBtYWtlIG9uZQkJCSovCiAKICAgaWYgKChydmFsdWUgPT0gTlVMTCkgJiYgCiAgICAgICAoY2lmLT5mbGFncyA9PSBGRklfVFlQRV9TVFJVQ1QpKQpAQCAtMjYxLDkgKzM1MCwxNyBAQAogICAgICAgYnJlYWs7CiAgICAgfQogICBpZiAoc21hbGxfc3RydWN0KQotICAgIG1lbWNweSAocnZhbHVlLCAmdGVtcCwgY2lmLT5ydHlwZS0+c2l6ZSk7CisgICAgeworICAgICAgRkZJX0FTU0VSVChydmFsdWUgIT0gTlVMTCk7CisgICAgICBtZW1jcHkgKHJ2YWx1ZSwgJnRlbXAsIGNpZi0+cnR5cGUtPnNpemUpOworICAgIH0KKyAgICAKICAgZWxzZSBpZiAodmZwX3N0cnVjdCkKLSAgICBtZW1jcHkgKHJ2YWx1ZSwgZWNpZi5ydmFsdWUsIGNpZi0+cnR5cGUtPnNpemUpOworICAgIHsKKyAgICAgIEZGSV9BU1NFUlQocnZhbHVlICE9IE5VTEwpOworICAgICAgbWVtY3B5IChydmFsdWUsIGVjaWYucnZhbHVlLCBjaWYtPnJ0eXBlLT5zaXplKTsKKyAgICB9CisgICAgCiB9CiAKIC8qKiBwcml2YXRlIG1lbWJlcnMgKiovCkBAIC0yNzEsMTggKzM2OCwxOCBAQAogc3RhdGljIHZvaWQgZmZpX3ByZXBfaW5jb21pbmdfYXJnc19TWVNWIChjaGFyICpzdGFjaywgdm9pZCAqKnJldCwKIAkJCQkJIHZvaWQqKiBhcmdzLCBmZmlfY2lmKiBjaWYsIGZsb2F0ICp2ZnBfc3RhY2spOwogCitzdGF0aWMgdm9pZCBmZmlfcHJlcF9pbmNvbWluZ19hcmdzX1ZGUCAoY2hhciAqc3RhY2ssIHZvaWQgKipyZXQsCisJCQkJCSB2b2lkKiogYXJncywgZmZpX2NpZiogY2lmLCBmbG9hdCAqdmZwX3N0YWNrKTsKKwogdm9pZCBmZmlfY2xvc3VyZV9TWVNWIChmZmlfY2xvc3VyZSAqKTsKIAogdm9pZCBmZmlfY2xvc3VyZV9WRlAgKGZmaV9jbG9zdXJlICopOwogCiAvKiBUaGlzIGZ1bmN0aW9uIGlzIGp1bXBlZCB0byBieSB0aGUgdHJhbXBvbGluZSAqLwogCi11bnNpZ25lZCBpbnQKLWZmaV9jbG9zdXJlX1NZU1ZfaW5uZXIoCi0gICAgIGZmaV9jbG9zdXJlICpjbG9zdXJlLAotICAgICB2b2lkICoqcmVzcHAsCi0gICAgIHZvaWQgKmFyZ3MsCi0gICAgIHZvaWQgKnZmcF9hcmdzKQordW5zaWduZWQgaW50IEZGSV9ISURERU4KK2ZmaV9jbG9zdXJlX2lubmVyIChmZmlfY2xvc3VyZSAqY2xvc3VyZSwgCisJCSAgIHZvaWQgKipyZXNwcCwgdm9pZCAqYXJncywgdm9pZCAqdmZwX2FyZ3MpCiB7CiAgIC8vIG91ciB2YXJpb3VzIHRoaW5ncy4uLgogICBmZmlfY2lmICAgICAgICpjaWY7CkBAIC0yOTYsOCArMzkzLDEwIEBACiAgICAqIHZhbHVlIG9uIHRoZSBzdGFjazsgYW5kIGlmIHRoZSBmdW5jdGlvbiByZXR1cm5zCiAgICAqIGEgc3RydWN0dXJlLCBpdCB3aWxsIHJlLXNldCBSRVNQIHRvIHBvaW50IHRvIHRoZQogICAgKiBzdHJ1Y3R1cmUgcmV0dXJuIGFkZHJlc3MuICAqLwotCi0gIGZmaV9wcmVwX2luY29taW5nX2FyZ3NfU1lTVihhcmdzLCByZXNwcCwgYXJnX2FyZWEsIGNpZiwgdmZwX2FyZ3MpOworICBpZiAoY2lmLT5hYmkgPT0gRkZJX1ZGUCkKKyAgICBmZmlfcHJlcF9pbmNvbWluZ19hcmdzX1ZGUChhcmdzLCByZXNwcCwgYXJnX2FyZWEsIGNpZiwgdmZwX2FyZ3MpOworICBlbHNlCisgICAgZmZpX3ByZXBfaW5jb21pbmdfYXJnc19TWVNWKGFyZ3MsIHJlc3BwLCBhcmdfYXJlYSwgY2lmLCB2ZnBfYXJncyk7CiAKICAgKGNsb3N1cmUtPmZ1bikgKGNpZiwgKnJlc3BwLCBhcmdfYXJlYSwgY2xvc3VyZS0+dXNlcl9kYXRhKTsKIApAQCAtMzEyLDcgKzQxMSw3IEBACiAJCQkgICAgZmxvYXQgKnZmcF9zdGFjaykKIC8qQD1leHBvcnRoZWFkZXJAKi8KIHsKLSAgcmVnaXN0ZXIgdW5zaWduZWQgaW50IGksIHZpID0gMDsKKyAgcmVnaXN0ZXIgdW5zaWduZWQgaW50IGk7CiAgIHJlZ2lzdGVyIHZvaWQgKipwX2FyZ3Y7CiAgIHJlZ2lzdGVyIGNoYXIgKmFyZ3A7CiAgIHJlZ2lzdGVyIGZmaV90eXBlICoqcF9hcmc7CkBAIC0zMjksMjcgKzQyOCw4IEBACiAgIGZvciAoaSA9IGNpZi0+bmFyZ3MsIHBfYXJnID0gY2lmLT5hcmdfdHlwZXM7IChpICE9IDApOyBpLS0sIHBfYXJnKyspCiAgICAgewogICAgICAgc2l6ZV90IHo7Ci0gICAgICBzaXplX3QgYWxpZ25tZW50OwotICAKLSAgICAgIGlmIChjaWYtPmFiaSA9PSBGRklfVkZQCi0JICAmJiB2aSA8IGNpZi0+dmZwX25hcmdzICYmIHZmcF90eXBlX3AgKCpwX2FyZykpCi0JewotCSAgKnBfYXJndisrID0gKHZvaWQqKSh2ZnBfc3RhY2sgKyBjaWYtPnZmcF9hcmdzW3ZpKytdKTsKLQkgIGNvbnRpbnVlOwotCX0KIAotICAgICAgYWxpZ25tZW50ID0gKCpwX2FyZyktPmFsaWdubWVudDsKLSAgICAgIGlmIChhbGlnbm1lbnQgPCA0KQotCWFsaWdubWVudCA9IDQ7Ci0jaWZkZWYgX1dJTjMyX1dDRQotICAgICAgZWxzZQotCWlmIChhbGlnbm1lbnQgPiA0KQotCSAgYWxpZ25tZW50ID0gNDsKLSNlbmRpZgotICAgICAgLyogQWxpZ24gaWYgbmVjZXNzYXJ5ICovCi0gICAgICBpZiAoKGFsaWdubWVudCAtIDEpICYgKHVuc2lnbmVkKSBhcmdwKSB7Ci0JYXJncCA9IChjaGFyICopIEFMSUdOKGFyZ3AsIGFsaWdubWVudCk7Ci0gICAgICB9CisgICAgICBhcmdwID0gZmZpX2FsaWduKHBfYXJnLCBhcmdwKTsKIAogICAgICAgeiA9ICgqcF9hcmcpLT5zaXplOwogCkBAIC0zNjQsNiArNDQ0LDk1IEBACiAgIHJldHVybjsKIH0KIAorLypALWV4cG9ydGhlYWRlckAqLworc3RhdGljIHZvaWQgCitmZmlfcHJlcF9pbmNvbWluZ19hcmdzX1ZGUChjaGFyICpzdGFjaywgdm9pZCAqKnJ2YWx1ZSwKKwkJCSAgICB2b2lkICoqYXZhbHVlLCBmZmlfY2lmICpjaWYsCisJCQkgICAgLyogVXNlZCBvbmx5IHVuZGVyIFZGUCBoYXJkLWZsb2F0IEFCSS4gKi8KKwkJCSAgICBmbG9hdCAqdmZwX3N0YWNrKQorLypAPWV4cG9ydGhlYWRlckAqLworeworICByZWdpc3RlciB1bnNpZ25lZCBpbnQgaSwgdmkgPSAwOworICByZWdpc3RlciB2b2lkICoqcF9hcmd2OworICByZWdpc3RlciBjaGFyICphcmdwLCAqcmVncCwgKmVvX3JlZ3A7CisgIHJlZ2lzdGVyIGZmaV90eXBlICoqcF9hcmc7CisgIGNoYXIgZG9uZV93aXRoX3JlZ3MgPSAwOworICBjaGFyIHN0YWNrX3VzZWQgPSAwOworICBjaGFyIGlzX3ZmcF90eXBlOworCisgIEZGSV9BU1NFUlQoY2lmLT5hYmkgPT0gRkZJX1ZGUCk7CisgIHJlZ3AgPSBzdGFjazsKKyAgZW9fcmVncCA9IGFyZ3AgPSByZWdwICsgMTY7CisKKyAgaWYgKCBjaWYtPmZsYWdzID09IEZGSV9UWVBFX1NUUlVDVCApIHsKKyAgICAqcnZhbHVlID0gKih2b2lkICoqKSByZWdwOworICAgIHJlZ3AgKz0gNDsKKyAgfQorCisgIHBfYXJndiA9IGF2YWx1ZTsKKworICBmb3IgKGkgPSBjaWYtPm5hcmdzLCBwX2FyZyA9IGNpZi0+YXJnX3R5cGVzOyAoaSAhPSAwKTsgaS0tLCBwX2FyZysrKQorICAgIHsKKyAgICBzaXplX3QgejsKKyAgICBpc192ZnBfdHlwZSA9IHZmcF90eXBlX3AgKCpwX2FyZyk7IAorCisgICAgaWYodmkgPCBjaWYtPnZmcF9uYXJncyAmJiBpc192ZnBfdHlwZSkKKyAgICAgIHsKKyAgICAgICAgKnBfYXJndisrID0gKHZvaWQqKSh2ZnBfc3RhY2sgKyBjaWYtPnZmcF9hcmdzW3ZpKytdKTsKKyAgICAgICAgY29udGludWU7CisgICAgICB9CisgICAgZWxzZSBpZiAoIWRvbmVfd2l0aF9yZWdzICYmICFpc192ZnBfdHlwZSkKKyAgICAgIHsKKyAgICAgICAgY2hhciogdHJlZ3AgPSBmZmlfYWxpZ24ocF9hcmcsIHJlZ3ApOworCisgICAgICAgIHogPSAoKnBfYXJnKS0+c2l6ZTsgCisgICAgICAgIHogPSAoeiA8IDQpPyA0IDogejsgLy8gcGFkCisgICAgICAgIAorICAgICAgICAvKiBpZiB0aGUgYXJndW1lbnRzIGVpdGhlciBmaXRzIGludG8gdGhlIHJlZ2lzdGVycyBvciB1c2VzIHJlZ2lzdGVycworICAgICAgICAgKiBhbmQgc3RhY2ssIHdoaWxlIHdlIGhhdmVuJ3QgcmVhZCBvdGhlciB0aGluZ3MgZnJvbSB0aGUgc3RhY2sgKi8KKyAgICAgICAgaWYodHJlZ3AgKyB6IDw9IGVvX3JlZ3AgfHwgIXN0YWNrX3VzZWQpIAorICAgICAgICAgIHsKKyAgICAgICAgICAvKiBiZWNhdXNlIHdlJ3JlIGxpdHRsZSBlbmRpYW4sIHRoaXMgaXMgd2hhdCBpdCB0dXJucyBpbnRvLiAqLworICAgICAgICAgICpwX2FyZ3YgPSAodm9pZCopIHRyZWdwOworCisgICAgICAgICAgcF9hcmd2Kys7CisgICAgICAgICAgcmVncCA9IHRyZWdwICsgejsKKyAgICAgICAgICAvLyBpZiB3ZSByZWFkIHBhc3QgdGhlIGxhc3QgY29yZSByZWdpc3RlciwgbWFrZSBzdXJlIHdlIGhhdmUgbm90IHJlYWQKKyAgICAgICAgICAvLyBmcm9tIHRoZSBzdGFjayBiZWZvcmUgYW5kIGNvbnRpbnVlIHJlYWRpbmcgYWZ0ZXIgcmVncAorICAgICAgICAgIGlmKHJlZ3AgPiBlb19yZWdwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgaWYoc3RhY2tfdXNlZCkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGFib3J0KCk7IC8vIHdlIHNob3VsZCBuZXZlciByZWFkIHBhc3QgdGhlIGVuZCBvZiB0aGUgcmVnaXN0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhcmUgaWYgdGhlIHN0YWNrIGlzIGFscmVhZHkgaW4gdXNlCisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGFyZ3AgPSByZWdwOworICAgICAgICAgICAgfQorICAgICAgICAgIGlmKHJlZ3AgPj0gZW9fcmVncCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGRvbmVfd2l0aF9yZWdzID0gMTsKKyAgICAgICAgICAgIHN0YWNrX3VzZWQgPSAxOworICAgICAgICAgICAgfQorICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgIH0KKyAgICAgIH0KKyAgICBzdGFja191c2VkID0gMTsKKworICAgIGFyZ3AgPSBmZmlfYWxpZ24ocF9hcmcsIGFyZ3ApOworCisgICAgeiA9ICgqcF9hcmcpLT5zaXplOworCisgICAgLyogYmVjYXVzZSB3ZSdyZSBsaXR0bGUgZW5kaWFuLCB0aGlzIGlzIHdoYXQgaXQgdHVybnMgaW50by4gICAqLworCisgICAgKnBfYXJndiA9ICh2b2lkKikgYXJncDsKKworICAgIHBfYXJndisrOworICAgIGFyZ3AgKz0gejsKKyAgICB9CisgIAorICByZXR1cm47Cit9CisKIC8qIEhvdyB0byBtYWtlIGEgdHJhbXBvbGluZS4gICovCiAKIGV4dGVybiB1bnNpZ25lZCBpbnQgZmZpX2FybV90cmFtcG9saW5lWzNdOwpAQCAtMzgxLDcgKzU1MCw3IEBACiB0eXBlZGVmIHN0cnVjdCBmZmlfdHJhbXBvbGluZV90YWJsZV9lbnRyeSBmZmlfdHJhbXBvbGluZV90YWJsZV9lbnRyeTsKIAogc3RydWN0IGZmaV90cmFtcG9saW5lX3RhYmxlIHsKLSAgLyogY29udGlnaW91cyB3cml0YWJsZSBhbmQgZXhlY3V0YWJsZSBwYWdlcyAqLworICAvKiBjb250aWd1b3VzIHdyaXRhYmxlIGFuZCBleGVjdXRhYmxlIHBhZ2VzICovCiAgIHZtX2FkZHJlc3NfdCBjb25maWdfcGFnZTsKICAgdm1fYWRkcmVzc190IHRyYW1wb2xpbmVfcGFnZTsKIApAQCAtNDIxLDcgKzU5MCw3IEBACiB7CiAgIGZmaV90cmFtcG9saW5lX3RhYmxlICp0YWJsZSA9IE5VTEw7CiAKLSAgLyogTG9vcCB1bnRpbCB3ZSBjYW4gYWxsb2NhdGUgdHdvIGNvbnRpZ2lvdXMgcGFnZXMgKi8KKyAgLyogTG9vcCB1bnRpbCB3ZSBjYW4gYWxsb2NhdGUgdHdvIGNvbnRpZ3VvdXMgcGFnZXMgKi8KICAgd2hpbGUgKHRhYmxlID09IE5VTEwpIHsKICAgICB2bV9hZGRyZXNzX3QgY29uZmlnX3BhZ2UgPSAweDA7CiAgICAga2Vybl9yZXR1cm5fdCBrdDsKQEAgLTYxNyw3ICs3ODYsNyBAQAogI2VuZGlmCiAgIGVsc2UKICAgICByZXR1cm4gRkZJX0JBRF9BQkk7Ci0gICAgCisKICNpZiBGRklfRVhFQ19UUkFNUE9MSU5FX1RBQkxFCiAgIHZvaWQgKipjb25maWcgPSBGRklfVFJBTVBPTElORV9DT0RFTE9DX0NPTkZJRyhjb2RlbG9jKTsKICAgY29uZmlnWzBdID0gY2xvc3VyZTsKQEAgLTcwMCw5ICs4NjksOSBAQAogICByZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgcGxhY2VfdmZwX2FyZyAoZmZpX2NpZiAqY2lmLCBmZmlfdHlwZSAqdCkKK3N0YXRpYyBpbnQgcGxhY2VfdmZwX2FyZyAoZmZpX2NpZiAqY2lmLCBmZmlfdHlwZSAqdCkKIHsKLSAgaW50IHJlZyA9IGNpZi0+dmZwX3JlZ19mcmVlOworICBzaG9ydCByZWcgPSBjaWYtPnZmcF9yZWdfZnJlZTsKICAgaW50IG5yZWdzID0gdC0+c2l6ZSAvIHNpemVvZiAoZmxvYXQpOwogICBpbnQgYWxpZ24gPSAoKHQtPnR5cGUgPT0gRkZJX1RZUEVfU1RSVUNUX1ZGUF9GTE9BVAogCQl8fCB0LT50eXBlID09IEZGSV9UWVBFX0ZMT0FUKSA/IDEgOiAyKTsKQEAgLTczMyw5ICs5MDIsMTMgQEAKIAkgICAgcmVnICs9IDE7CiAJICBjaWYtPnZmcF9yZWdfZnJlZSA9IHJlZzsKIAl9Ci0gICAgICByZXR1cm47CisgICAgICByZXR1cm4gMDsKICAgICBuZXh0X3JlZzogOwogICAgIH0KKyAgLy8gZG9uZSwgbWFyayBhbGwgcmVncyBhcyB1c2VkCisgIGNpZi0+dmZwX3JlZ19mcmVlID0gMTY7CisgIGNpZi0+dmZwX3VzZWQgPSAweEZGRkY7CisgIHJldHVybiAxOwogfQogCiBzdGF0aWMgdm9pZCBsYXlvdXRfdmZwX2FyZ3MgKGZmaV9jaWYgKmNpZikKQEAgLTc1MCw3ICs5MjMsOSBAQAogICBmb3IgKGkgPSAwOyBpIDwgY2lmLT5uYXJnczsgaSsrKQogICAgIHsKICAgICAgIGZmaV90eXBlICp0ID0gY2lmLT5hcmdfdHlwZXNbaV07Ci0gICAgICBpZiAodmZwX3R5cGVfcCAodCkpCi0JcGxhY2VfdmZwX2FyZyAoY2lmLCB0KTsKKyAgICAgIGlmICh2ZnBfdHlwZV9wICh0KSAmJiBwbGFjZV92ZnBfYXJnIChjaWYsIHQpID09IDEpCisgICAgICAgIHsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL2FybS9nZW50cmFtcC5zaCBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL2FybS9nZW50cmFtcC5zaAppbmRleCA3NGYwYjg2Li4wNWM0M2EzIDEwMDc1NQotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9hcm0vZ2VudHJhbXAuc2gKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvYXJtL2dlbnRyYW1wLnNoCkBAIC04NCw3ICs4NCw3IEBACiB9CiAKIAotIyBXQVJOSU5HIC0gRG9uJ3QgbW9kaWZ5IHRoZSB0cmFtcG9saW5lIGNvZGUgc2l6ZSB3aXRob3V0IGFsc28gdXBkYXRpbmcgdGhlIHJlbGV2ZW50IGxpYmZmaSBjb2RlCisjIFdBUk5JTkcgLSBEb24ndCBtb2RpZnkgdGhlIHRyYW1wb2xpbmUgY29kZSBzaXplIHdpdGhvdXQgYWxzbyB1cGRhdGluZyB0aGUgcmVsZXZhbnQgbGliZmZpIGNvZGUKIHRyYW1wb2xpbmUgKCkgewogICAgIGNhdCA8PCBFTkQKIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvYXJtL3N5c3YuUyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL2FybS9zeXN2LlMKaW5kZXggZmIzOGNkNi4uNTQxYmJlOSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvYXJtL3N5c3YuUworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9hcm0vc3lzdi5TCkBAIC0xMDksNDIgKzEwOSwyNyBAQAogI2RlZmluZSBVTldJTkQgQAogI2VuZGlmCQogCi0JCisuc3ludGF4IHVuaWZpZWQKKwogI2lmIGRlZmluZWQoX190aHVtYl9fKSAmJiAhZGVmaW5lZChfX1RIVU1CX0lOVEVSV09SS19fKQotLm1hY3JvCUFSTV9GVU5DX1NUQVJUIG5hbWUKLQkudGV4dAotCS5hbGlnbiAwCi0JLnRodW1iCi0JLnRodW1iX2Z1bmMKLSNpZmRlZiBfX0FQUExFX18KLQlFTlRSWSgkMCkKKyNkZWZpbmUgQVJNX0ZVTkNfU1RBUlQobmFtZSkgXAorCS50ZXh0OyBcCisJLmFsaWduIDI7IFwKKwkudGh1bWI7IFwKKwkudGh1bWJfZnVuYzsgXAorCUVOVFJZKG5hbWUpOyBcCisJYnggcGM7IFwKKwlub3A7IFwKKwkuYXJtOyBcCisJVU5XSU5EIC5mbnN0YXJ0OyBcCitfTF9fIyNuYW1lOgogI2Vsc2UKLQlFTlRSWShcbmFtZSkKLSNlbmRpZgotCWJ4CXBjCi0Jbm9wCi0JLmFybQorI2RlZmluZSBBUk1fRlVOQ19TVEFSVChuYW1lKSBcCisJLnRleHQ7IFwKKwkuYWxpZ24gMjsgXAorCS5hcm07IFwKKwlFTlRSWShuYW1lKTsgXAogCVVOV0lORCAuZm5zdGFydAotLyogQSBob29rIHRvIHRlbGwgZ2RiIHRoYXQgd2UndmUgc3dpdGNoZWQgdG8gQVJNIG1vZGUuICBBbHNvIHVzZWQgdG8gY2FsbAotICAgZGlyZWN0bHkgZnJvbSBvdGhlciBsb2NhbCBhcm0gcm91dGluZXMuICAqLwotI2lmZGVmIF9fQVBQTEVfXwotX0xfXyQwOgotI2Vsc2UKLV9MX19cbmFtZToKLSNlbmRpZgotLmVuZG0KLSNlbHNlCi0ubWFjcm8JQVJNX0ZVTkNfU1RBUlQgbmFtZQotCS50ZXh0Ci0JLmFsaWduIDAKLQkuYXJtCi0jaWZkZWYgX19BUFBMRV9fCi0JRU5UUlkoJDApCi0jZWxzZQotCUVOVFJZKFxuYW1lKQotI2VuZGlmCi0JVU5XSU5EIC5mbnN0YXJ0Ci0uZW5kbQogI2VuZGlmCiAKIC5tYWNybwlSRVRMRE0JcmVncz0sIGNvbmQ9LCBkaXJuPWlhCkBAIC0xNzEsNyArMTU2LDcgQEAKIAlAIHNwKzA6IGVjaWYucnZhbHVlCiAKIAlAIFRoaXMgYXNzdW1lcyB3ZSBhcmUgdXNpbmcgZ2FzLgotQVJNX0ZVTkNfU1RBUlQgZmZpX2NhbGxfU1lTVgorQVJNX0ZVTkNfU1RBUlQoZmZpX2NhbGxfU1lTVikKIAlAIFNhdmUgcmVnaXN0ZXJzCiAgICAgICAgIHN0bWZkCXNwISwge3IwLXIzLCBmcCwgbHJ9CiAJVU5XSU5EIC5zYXZlCXtyMC1yMywgZnAsIGxyfQpAQCAtMTg3LDcgKzE3Miw3IEBACiAJQCAgICAgcjEgYWxyZWFkeSBzZXQKIAogCUAgQ2FsbCBmZmlfcHJlcF9hcmdzKHN0YWNrLCAmZWNpZikKLQlibAlDTkFNRShmZmlfcHJlcF9hcmdzKQorCWJsCUNOQU1FKGZmaV9wcmVwX2FyZ3NfU1lTVikKIAogCUAgbW92ZSBmaXJzdCA0IHBhcmFtZXRlcnMgaW4gcmVnaXN0ZXJzCiAJbGRtaWEJc3AsIHtyMC1yM30KQEAgLTIyOCw3ICsyMTMsNyBAQAogI2lmIGRlZmluZWQoX19TT0ZURlBfXykgfHwgZGVmaW5lZChfX0FSTV9FQUJJX18pCiAJY21wbmUJcjMsICNGRklfVFlQRV9ET1VCTEUKICNlbmRpZgotCXN0bWVxaWEJcjIsIHtyMCwgcjF9CisJc3RtaWFlcQlyMiwge3IwLCByMX0KIAogI2lmICFkZWZpbmVkKF9fU09GVEZQX18pICYmICFkZWZpbmVkKF9fQVJNX0VBQklfXykKIAliZXEJTFNZTShMZXBpbG9ndWUpCkBAIC0yNjAsMTMgKzI0NSwxMyBAQAogCiAvKgogCXVuc2lnbmVkIGludCBGRklfSElEREVOCi0JZmZpX2Nsb3N1cmVfU1lTVl9pbm5lciAoY2xvc3VyZSwgcmVzcHAsIGFyZ3MpCisJZmZpX2Nsb3N1cmVfaW5uZXIgKGNsb3N1cmUsIHJlc3BwLCBhcmdzKQogCSAgICAgZmZpX2Nsb3N1cmUgKmNsb3N1cmU7CiAJICAgICB2b2lkICoqcmVzcHA7CiAgIAkgICAgIHZvaWQgKmFyZ3M7CiAqLwogCi1BUk1fRlVOQ19TVEFSVCBmZmlfY2xvc3VyZV9TWVNWCitBUk1fRlVOQ19TVEFSVChmZmlfY2xvc3VyZV9TWVNWKQogCVVOV0lORCAucGFkICMxNgogCWFkZAlpcCwgc3AsICMxNgogCXN0bWZkCXNwISwge2lwLCBscn0KQEAgLTI3Niw3ICsyNjEsNyBAQAogCXN1YglzcCwgc3AsICMxNgogCXN0cglzcCwgW3NwLCAjOF0KIAlhZGQJcjEsIHNwLCAjOAotCWJsCUNOQU1FKGZmaV9jbG9zdXJlX1NZU1ZfaW5uZXIpCisJYmwJQ05BTUUoZmZpX2Nsb3N1cmVfaW5uZXIpCiAJY21wCXIwLCAjRkZJX1RZUEVfSU5UCiAJYmVxCS5McmV0aW50CiAKQEAgLTM0NSw3ICszMzAsNyBAQAogCUAgcjM6ICAgZmlnLT5mbGFncwogCUAgc3ArMDogZWNpZi5ydmFsdWUKIAotQVJNX0ZVTkNfU1RBUlQgZmZpX2NhbGxfVkZQCitBUk1fRlVOQ19TVEFSVChmZmlfY2FsbF9WRlApCiAJQCBTYXZlIHJlZ2lzdGVycwogICAgICAgICBzdG1mZAlzcCEsIHtyMC1yMywgZnAsIGxyfQogCVVOV0lORCAuc2F2ZQl7cjAtcjMsIGZwLCBscn0KQEAgLTM2NCwxMCArMzQ5LDExIEBACiAJc3ViCXIyLCBmcCwgIzY0ICAgQCBWRlAgc2NyYXRjaCBzcGFjZQogCiAJQCBDYWxsIGZmaV9wcmVwX2FyZ3Moc3RhY2ssICZlY2lmLCB2ZnBfc3BhY2UpCi0JYmwJQ05BTUUoZmZpX3ByZXBfYXJncykKKwlibAlDTkFNRShmZmlfcHJlcF9hcmdzX1ZGUCkKIAogCUAgTG9hZCBWRlAgcmVnaXN0ZXIgYXJncyBpZiBuZWVkZWQKIAljbXAJcjAsICMwCisJbW92CWlwLCBmcAogCWJlcQlMU1lNKExiYXNlX2FyZ3MpCiAKIAlAIExvYWQgb25seSBkMCBpZiBwb3NzaWJsZQpAQCAtNDMzLDcgKzQxOSw3IEBACiAgICAgICAgIC5zaXplICAgIENOQU1FKGZmaV9jYWxsX1ZGUCksLmZmaV9jYWxsX1ZGUF9lbmQtQ05BTUUoZmZpX2NhbGxfVkZQKQogCiAKLUFSTV9GVU5DX1NUQVJUIGZmaV9jbG9zdXJlX1ZGUAorQVJNX0ZVTkNfU1RBUlQoZmZpX2Nsb3N1cmVfVkZQKQogCWZzdG1mZGQJc3AhLCB7ZDAtZDd9CiAJQCByMC1yMywgdGhlbiBkMC1kNwogCVVOV0lORCAucGFkICM4MApAQCAtNDQ2LDcgKzQzMiw3IEBACiAJc3ViCXNwLCBzcCwgIzcyCiAJc3RyCXNwLCBbc3AsICM2NF0KIAlhZGQJcjEsIHNwLCAjNjQKLQlibAlDTkFNRShmZmlfY2xvc3VyZV9TWVNWX2lubmVyKQorCWJsCUNOQU1FKGZmaV9jbG9zdXJlX2lubmVyKQogCiAJY21wCXIwLCAjRkZJX1RZUEVfSU5UCiAJYmVxCS5McmV0aW50X3ZmcApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvYmZpbi9mZmkuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL2JmaW4vZmZpLmMKaW5kZXggMGJlY2NjMS4uMjJhMmFjZCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvYmZpbi9mZmkuYworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9iZmluL2ZmaS5jCkBAIC0xLDUgKzEsNiBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgIGZmaS5jIC0gQ29weXJpZ2h0IChjKSAyMDEyICBBbGV4YW5kcmUgSy4gSS4gZGUgTWVuZG9uY2EgPGFsZXhhbmRyZS5rZXVuZWNrZUBnbWFpbC5jb20+CisgICBmZmkuYyAtIENvcHlyaWdodCAoYykgMjAxMiAgQWxleGFuZHJlIEsuIEkuIGRlIE1lbmRvbmNhIDxhbGV4YW5kcmUua2V1bmVja2VAZ21haWwuY29tPiwKKwkJCQkJCQkgICBQYXVsbyBQaXphcnJvIDxwYXVsby5waXphcnJvQGdtYWlsLmNvbT4KIAogICAgQmxhY2tmaW4gRm9yZWlnbiBGdW5jdGlvbiBJbnRlcmZhY2UKIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvYmZpbi9zeXN2LlMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9iZmluL3N5c3YuUwppbmRleCBhZTdhMTUyLi5mNDI3OGJlIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9iZmluL3N5c3YuUworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9iZmluL3N5c3YuUwpAQCAtMSw1ICsxLDYgQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICBzeXN2LlMgLSBDb3B5cmlnaHQgKGMpIDIwMTIgIEFsZXhhbmRyZSBLLiBJLiBkZSBNZW5kb25jYSA8YWxleGFuZHJlLmtldW5lY2tlQGdtYWlsLmNvbT4KKyAgIHN5c3YuUyAtIENvcHlyaWdodCAoYykgMjAxMiAgQWxleGFuZHJlIEsuIEkuIGRlIE1lbmRvbmNhIDxhbGV4YW5kcmUua2V1bmVja2VAZ21haWwuY29tPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGF1bG8gUGl6YXJybyA8cGF1bG8ucGl6YXJyb0BnbWFpbC5jb20+CiAKICAgIEJsYWNrZmluIEZvcmVpZ24gRnVuY3Rpb24gSW50ZXJmYWNlCiAKQEAgLTMyLDcgKzMzLDcgQEAKIC5hbGlnbiA0CiAKIAkvKgotCSBUaGVyZSBpcyBhICJmZWF0dXJlIiBpbiB0aGUgYmZpbiB0b29sY2hhaW4gdGhhdCBpdCBwdXRzIGEgXyBiZWZvcmUgZnVuY2lvbiBuYW1lcworCSBUaGVyZSBpcyBhICJmZWF0dXJlIiBpbiB0aGUgYmZpbiB0b29sY2hhaW4gdGhhdCBpdCBwdXRzIGEgXyBiZWZvcmUgZnVuY3Rpb24gbmFtZXMKIAkgdGhhdCdzIHdoeSB0aGUgZnVuY3Rpb24gaGVyZSBpdCdzIGNhbGxlZCBfZmZpX2NhbGxfU1lTViBhbmQgbm90IGZmaV9jYWxsX1NZU1YKIAkgKi8KIAkuZ2xvYmFsIF9mZmlfY2FsbF9TWVNWOwpAQCAtNDAsMjUgKzQxLDI2IEBACiAJLmZ1bmMgZmZpX2NhbGxfU1lTVgogCiAJLyoKLQljaWYtPmJ5dGVzICAJPSBSMAkoZnArOCkKLQkmZWNpZgkJCT0gUjEJKGZwKzEyKQotCWZmaV9wcmVwX2FyZ3MJPSBSMgkoZnArMTYpCi0JcmV0X3R5cGUJCT0gc3RhY2sgKGZwKzIwKQotCWVjaWYucnZhbHVlCQk9IHN0YWNrIChmcCsyNCkKLQlmbgkJCQk9IHN0YWNrCShmcCsyOCkKLQkJCQkJICBnb3QJKGZwKzMyKQotICAgIFRoZXJlIGlzIHJvb20gZm9yIGltcHJvdmVtZW50IGhlcmUgKHdlIGNhbiB1c2UgdGVtcG9yYXJ5IHJlZ2lzdGVycwotICAgICAgICBpbnN0ZWFkIG9mIHNhdmluZyB0aGUgdmFsdWVzIGluIHRoZSBtZW1vcnkpCi0JUkVHUzoKLQkJUDUgPT4gU3RhY2sgcG9pbnRlciAoZnVuY3Rpb24gYXJndW1lbnRzKQotCQlSNSA9PiBjaWYtPmJ5dGVzCi0JCVI0ID0+IHJldC0+dHlwZQorICAgICAgICAgY2lmLT5ieXRlcyAgICA9IFIwICAgIChmcCs4KQorICAgICAgICAgJmVjaWYgICAgICAgICA9IFIxICAgIChmcCsxMikKKyAgICAgICAgIGZmaV9wcmVwX2FyZ3MgPSBSMiAgICAoZnArMTYpCisgICAgICAgICByZXRfdHlwZSAgICAgID0gc3RhY2sgKGZwKzIwKQorICAgICAgICAgZWNpZi5ydmFsdWUgICA9IHN0YWNrIChmcCsyNCkKKyAgICAgICAgIGZuICAgICAgICAgICAgPSBzdGFjayAoZnArMjgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3QgKGZwKzMyKQogCi0JCUZQLTIwID0gUDMKLQkJRlAtMTYgPSBTUCAocGFyYW1ldGVycyBhcmVhKQotCQlGUC0xMiA9IFNQICh0ZW1wKQotCQlGUC0wOCA9IGZ1bmN0aW9uIHJldHVybiBwYXJ0IDEgW1IwXQotCQlGUC0wNCA9IGZ1bmN0aW9uIHJldHVybiBwYXJ0IDIgW1IxXQorICAgICAgICBUaGVyZSBpcyByb29tIGZvciBpbXByb3ZlbWVudCBoZXJlICh3ZSBjYW4gdXNlIHRlbXBvcmFyeSByZWdpc3RlcnMKKyAgICAgICAgaW5zdGVhZCBvZiBzYXZpbmcgdGhlIHZhbHVlcyBpbiB0aGUgbWVtb3J5KQorICAgICAgICBSRUdTOgorICAgICAgICBQNSA9PiBTdGFjayBwb2ludGVyIChmdW5jdGlvbiBhcmd1bWVudHMpCisgICAgICAgIFI1ID0+IGNpZi0+Ynl0ZXMKKyAgICAgICAgUjQgPT4gcmV0LT50eXBlCisKKyAgICAgICAgRlAtMjAgPSBQMworICAgICAgICBGUC0xNiA9IFNQIChwYXJhbWV0ZXJzIGFyZWEpCisgICAgICAgIEZQLTEyID0gU1AgKHRlbXApCisgICAgICAgIEZQLTA4ID0gZnVuY3Rpb24gcmV0dXJuIHBhcnQgMSBbUjBdCisgICAgICAgIEZQLTA0ID0gZnVuY3Rpb24gcmV0dXJuIHBhcnQgMiBbUjFdCiAJKi8KIAogX2ZmaV9jYWxsX1NZU1Y6CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9jbG9zdXJlcy5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvY2xvc3VyZXMuYwppbmRleCA2Mjk4ZDZmLi5jNzg2M2YzIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9jbG9zdXJlcy5jCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL2Nsb3N1cmVzLmMKQEAgLTM0LDcgKzM0LDcgQEAKICNpbmNsdWRlIDxmZmlfY29tbW9uLmg+CiAKICNpZiAhRkZJX01NQVBfRVhFQ19XUklUICYmICFGRklfRVhFQ19UUkFNUE9MSU5FX1RBQkxFCi0jIGlmIF9fZ251X2xpbnV4X18KKyMgaWYgX19nbnVfbGludXhfXyAmJiAhZGVmaW5lZChfX0FORFJPSURfXykKIC8qIFRoaXMgbWFjcm8gaW5kaWNhdGVzIGl0IG1heSBiZSBmb3JiaWRkZW4gdG8gbWFwIGFub255bW91cyBtZW1vcnkKICAgIHdpdGggYm90aCB3cml0ZSBhbmQgZXhlY3V0ZSBwZXJtaXNzaW9uLiAgQ29kZSBjb21waWxlZCB3aGVuIHRoaXMKICAgIG9wdGlvbiBpcyBkZWZpbmVkIHdpbGwgYXR0ZW1wdCB0byBtYXAgc3VjaCBwYWdlcyBvbmNlLCBidXQgaWYgaXQKQEAgLTE4MSwxMCArMTgxLDI2IEBACiBzdGF0aWMgaW50CiBlbXV0cmFtcF9lbmFibGVkX2NoZWNrICh2b2lkKQogewotICBpZiAoZ2V0ZW52ICgiRkZJX0RJU0FCTEVfRU1VVFJBTVAiKSA9PSBOVUxMKQotICAgIHJldHVybiAxOwotICBlbHNlCisgIGNoYXIgKmJ1ZiA9IE5VTEw7CisgIHNpemVfdCBsZW4gPSAwOworICBGSUxFICpmOworICBpbnQgcmV0OworICBmID0gZm9wZW4gKCIvcHJvYy9zZWxmL3N0YXR1cyIsICJyIik7CisgIGlmIChmID09IE5VTEwpCiAgICAgcmV0dXJuIDA7CisgIHJldCA9IDA7CisKKyAgd2hpbGUgKGdldGxpbmUgKCZidWYsICZsZW4sIGYpICE9IC0xKQorICAgIGlmICghc3RybmNtcCAoYnVmLCAiUGFYOiIsIDQpKQorICAgICAgeworICAgICAgICBjaGFyIGVtdXRyYW1wOworICAgICAgICBpZiAoc3NjYW5mIChidWYsICIlKnMgJSpjJWMiLCAmZW11dHJhbXApID09IDEpCisgICAgICAgICAgcmV0ID0gKGVtdXRyYW1wID09ICdFJyk7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICBmcmVlIChidWYpOworICBmY2xvc2UgKGYpOworICByZXR1cm4gcmV0OwogfQogCiAjZGVmaW5lIGlzX2VtdXRyYW1wX2VuYWJsZWQoKSAoZW11dHJhbXBfZW5hYmxlZCA+PSAwID8gZW11dHJhbXBfZW5hYmxlZCBcCkBAIC0yNjQsNyArMjgwLDcgQEAKIG9wZW5fdGVtcF9leGVjX2ZpbGVfZGlyIChjb25zdCBjaGFyICpkaXIpCiB7CiAgIHN0YXRpYyBjb25zdCBjaGFyIHN1ZmZpeFtdID0gIi9mZmlYWFhYWFgiOwotICBpbnQgbGVuZGlyID0gc3RybGVuIChkaXIpOworICBzaXplX3QgbGVuZGlyID0gc3RybGVuIChkaXIpOwogICBjaGFyICp0ZW1wbmFtZSA9IF9fYnVpbHRpbl9hbGxvY2EgKGxlbmRpciArIHNpemVvZiAoc3VmZml4KSk7CiAKICAgaWYgKCF0ZW1wbmFtZSkKQEAgLTM4Miw3ICszOTgsNyBAQAogfQogCiAvKiBSZXR1cm4gYSBmaWxlIGRlc2NyaXB0b3Igb2YgYSB0ZW1wb3JhcnkgemVyby1zaXplZCBmaWxlIGluIGEKLSAgIHdyaXRhYmxlIGFuZCBleGV4dXRhYmxlIGZpbGVzeXN0ZW0uICAqLworICAgd3JpdGFibGUgYW5kIGV4ZWN1dGFibGUgZmlsZXN5c3RlbS4gICovCiBzdGF0aWMgaW50CiBvcGVuX3RlbXBfZXhlY19maWxlICh2b2lkKQogewpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvZGxtYWxsb2MuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL2RsbWFsbG9jLmMKaW5kZXggMjc3Mzk1My4uNmU0NzRiNyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvZGxtYWxsb2MuYworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9kbG1hbGxvYy5jCkBAIC0xMjYwLDcgKzEyNjAsNyBAQAogI2RlZmluZSBTSVpFX1RfQklUU0laRSAgICAgIChzaXplb2Yoc2l6ZV90KSA8PCAzKQogCiAvKiBTb21lIGNvbnN0YW50cyBjb2VyY2VkIHRvIHNpemVfdCAqLwotLyogQW5ub3lpbmcgYnV0IG5lY2Vzc2FyeSB0byBhdm9pZCBlcnJvcnMgb24gc29tZSBwbGFmdG9ybXMgKi8KKy8qIEFubm95aW5nIGJ1dCBuZWNlc3NhcnkgdG8gYXZvaWQgZXJyb3JzIG9uIHNvbWUgcGxhdGZvcm1zICovCiAjZGVmaW5lIFNJWkVfVF9aRVJPICAgICAgICAgKChzaXplX3QpMCkKICNkZWZpbmUgU0laRV9UX09ORSAgICAgICAgICAoKHNpemVfdCkxKQogI2RlZmluZSBTSVpFX1RfVFdPICAgICAgICAgICgoc2l6ZV90KTIpCkBAIC0xNDE0LDcgKzE0MTQsNyBAQAogI2RlZmluZSBDQUxMX01PUkVDT1JFKFMpICAgICBNRkFJTAogI2VuZGlmIC8qIEhBVkVfTU9SRUNPUkUgKi8KIAotLyogbXN0YXRlIGJpdCBzZXQgaWYgY29udGluZ3VvdXMgbW9yZWNvcmUgZGlzYWJsZWQgb3IgZmFpbGVkICovCisvKiBtc3RhdGUgYml0IHNldCBpZiBjb250aWd1b3VzIG1vcmVjb3JlIGRpc2FibGVkIG9yIGZhaWxlZCAqLwogI2RlZmluZSBVU0VfTk9OQ09OVElHVU9VU19CSVQgKDRVKQogCiAvKiBzZWdtZW50IGJpdCBzZXQgaW4gY3JlYXRlX21zcGFjZV93aXRoX2Jhc2UgKi8KQEAgLTE2NjYsNyArMTY2Niw3IEBACiB0eXBlZGVmIHN0cnVjdCBtYWxsb2NfY2h1bmsgIG1jaHVuazsKIHR5cGVkZWYgc3RydWN0IG1hbGxvY19jaHVuayogbWNodW5rcHRyOwogdHlwZWRlZiBzdHJ1Y3QgbWFsbG9jX2NodW5rKiBzYmlucHRyOyAgLyogVGhlIHR5cGUgb2YgYmlucyBvZiBjaHVua3MgKi8KLXR5cGVkZWYgdW5zaWduZWQgaW50IGJpbmRleF90OyAgICAgICAgIC8qIERlc2NyaWJlZCBiZWxvdyAqLwordHlwZWRlZiBzaXplX3QgYmluZGV4X3Q7ICAgICAgICAgICAgICAgLyogRGVzY3JpYmVkIGJlbG93ICovCiB0eXBlZGVmIHVuc2lnbmVkIGludCBiaW5tYXBfdDsgICAgICAgICAvKiBEZXNjcmliZWQgYmVsb3cgKi8KIHR5cGVkZWYgdW5zaWduZWQgaW50IGZsYWdfdDsgICAgICAgICAgIC8qIFRoZSB0eXBlIG9mIHZhcmlvdXMgYml0IGZsYWcgc2V0cyAqLwogCkBAIC0zMDk1LDggKzMwOTUsOCBAQAogICAgICBhbmQgY2hvb3NlIGl0cyBiayBub2RlIGFzIGl0cyByZXBsYWNlbWVudC4KICAgMi4gSWYgeCB3YXMgdGhlIGxhc3Qgbm9kZSBvZiBpdHMgc2l6ZSwgYnV0IG5vdCBhIGxlYWYgbm9kZSwgaXQgbXVzdAogICAgICBiZSByZXBsYWNlZCB3aXRoIGEgbGVhZiBub2RlIChub3QgbWVyZWx5IG9uZSB3aXRoIGFuIG9wZW4gbGVmdCBvcgotICAgICByaWdodCksIHRvIG1ha2Ugc3VyZSB0aGF0IGxlZnRzIGFuZCByaWdodHMgb2YgZGVzY2VuZGVudHMKLSAgICAgY29ycmVzcG9uZCBwcm9wZXJseSB0byBiaXQgbWFza3MuICBXZSB1c2UgdGhlIHJpZ2h0bW9zdCBkZXNjZW5kZW50CisgICAgIHJpZ2h0KSwgdG8gbWFrZSBzdXJlIHRoYXQgbGVmdHMgYW5kIHJpZ2h0cyBvZiBkZXNjZW5kYW50cworICAgICBjb3JyZXNwb25kIHByb3Blcmx5IHRvIGJpdCBtYXNrcy4gIFdlIHVzZSB0aGUgcmlnaHRtb3N0IGRlc2NlbmRhbnQKICAgICAgb2YgeC4gIFdlIGNvdWxkIHVzZSBhbnkgb3RoZXIgbGVhZiwgYnV0IHRoaXMgaXMgZWFzeSB0byBsb2NhdGUgYW5kCiAgICAgIHRlbmRzIHRvIGNvdW50ZXJhY3QgcmVtb3ZhbCBvZiBsZWZ0bW9zdHMgZWxzZXdoZXJlLCBhbmQgc28ga2VlcHMKICAgICAgcGF0aHMgc2hvcnRlciB0aGFuIG1pbmltYWxseSBndWFyYW50ZWVkLiAgVGhpcyBkb2Vzbid0IGxvb3AgbXVjaApAQCAtMzM5Myw3ICszMzkzLDcgQEAKICAgKnNzID0gbS0+c2VnOyAvKiBQdXNoIGN1cnJlbnQgcmVjb3JkICovCiAgIG0tPnNlZy5iYXNlID0gdGJhc2U7CiAgIG0tPnNlZy5zaXplID0gdHNpemU7Ci0gIHNldF9zZWdtZW50X2ZsYWdzKCZtLT5zZWcsIG1tYXBwZWQpOworICAodm9pZClzZXRfc2VnbWVudF9mbGFncygmbS0+c2VnLCBtbWFwcGVkKTsKICAgbS0+c2VnLm5leHQgPSBzczsKIAogICAvKiBJbnNlcnQgdHJhaWxpbmcgZmVuY2Vwb3N0cyAqLwpAQCAtMzU1Myw3ICszNTUzLDcgQEAKICAgICBpZiAoIWlzX2luaXRpYWxpemVkKG0pKSB7IC8qIGZpcnN0LXRpbWUgaW5pdGlhbGl6YXRpb24gKi8KICAgICAgIG0tPnNlZy5iYXNlID0gbS0+bGVhc3RfYWRkciA9IHRiYXNlOwogICAgICAgbS0+c2VnLnNpemUgPSB0c2l6ZTsKLSAgICAgIHNldF9zZWdtZW50X2ZsYWdzKCZtLT5zZWcsIG1tYXBfZmxhZyk7CisgICAgICAodm9pZClzZXRfc2VnbWVudF9mbGFncygmbS0+c2VnLCBtbWFwX2ZsYWcpOwogICAgICAgbS0+bWFnaWMgPSBtcGFyYW1zLm1hZ2ljOwogICAgICAgaW5pdF9iaW5zKG0pOwogICAgICAgaWYgKGlzX2dsb2JhbChtKSkgCkBAIC00NTAyLDcgKzQ1MDIsNyBAQAogICAgIGNoYXIqIHRiYXNlID0gKGNoYXIqKShDQUxMX01NQVAodHNpemUpKTsKICAgICBpZiAodGJhc2UgIT0gQ01GQUlMKSB7CiAgICAgICBtID0gaW5pdF91c2VyX21zdGF0ZSh0YmFzZSwgdHNpemUpOwotICAgICAgc2V0X3NlZ21lbnRfZmxhZ3MoJm0tPnNlZywgSVNfTU1BUFBFRF9CSVQpOworICAgICAgKHZvaWQpc2V0X3NlZ21lbnRfZmxhZ3MoJm0tPnNlZywgSVNfTU1BUFBFRF9CSVQpOwogICAgICAgc2V0X2xvY2sobSwgbG9ja2VkKTsKICAgICB9CiAgIH0KQEAgLTQ1MTcsNyArNDUxNyw3IEBACiAgIGlmIChjYXBhY2l0eSA+IG1zaXplICsgVE9QX0ZPT1RfU0laRSAmJgogICAgICAgY2FwYWNpdHkgPCAoc2l6ZV90KSAtKG1zaXplICsgVE9QX0ZPT1RfU0laRSArIG1wYXJhbXMucGFnZV9zaXplKSkgewogICAgIG0gPSBpbml0X3VzZXJfbXN0YXRlKChjaGFyKiliYXNlLCBjYXBhY2l0eSk7Ci0gICAgc2V0X3NlZ21lbnRfZmxhZ3MoJm0tPnNlZywgRVhURVJOX0JJVCk7CisgICAgKHZvaWQpc2V0X3NlZ21lbnRfZmxhZ3MoJm0tPnNlZywgRVhURVJOX0JJVCk7CiAgICAgc2V0X2xvY2sobSwgbG9ja2VkKTsKICAgfQogICByZXR1cm4gKG1zcGFjZSltOwpAQCAtNTA5NiwxMCArNTA5NiwxMCBAQAogICAgICAgICBXb2xmcmFtIEdsb2dlciAoR2xvZ2VyQGxyei51bmktbXVlbmNoZW4uZGUpLgogICAgICAgKiBVc2UgbGFzdF9yZW1haW5kZXIgaW4gbW9yZSBjYXNlcy4KICAgICAgICogUGFjayBiaW5zIHVzaW5nIGlkZWEgZnJvbSAgY29saW5Abnl4MTAuY3MuZHUuZWR1Ci0gICAgICAqIFVzZSBvcmRlcmVkIGJpbnMgaW5zdGVhZCBvZiBiZXN0LWZpdCB0aHJlc2hob2xkCisgICAgICAqIFVzZSBvcmRlcmVkIGJpbnMgaW5zdGVhZCBvZiBiZXN0LWZpdCB0aHJlc2hvbGQKICAgICAgICogRWxpbWluYXRlIGJsb2NrLWxvY2FsIGRlY2xzIHRvIHNpbXBsaWZ5IHRyYWNpbmcgYW5kIGRlYnVnZ2luZy4KICAgICAgICogU3VwcG9ydCBhbm90aGVyIGNhc2Ugb2YgcmVhbGxvYyB2aWEgbW92ZSBpbnRvIHRvcAotICAgICAgKiBGaXggZXJyb3Igb2NjdXJpbmcgd2hlbiBpbml0aWFsIHNicmtfYmFzZSBub3Qgd29yZC1hbGlnbmVkLgorICAgICAgKiBGaXggZXJyb3Igb2NjdXJyaW5nIHdoZW4gaW5pdGlhbCBzYnJrX2Jhc2Ugbm90IHdvcmQtYWxpZ25lZC4KICAgICAgICogUmVseSBvbiBwYWdlIHNpemUgZm9yIHVuaXRzIGluc3RlYWQgb2YgU0JSS19VTklUIHRvCiAgICAgICAgIGF2b2lkIHN1cnByaXNlcyBhYm91dCBzYnJrIGFsaWdubWVudCBjb252ZW50aW9ucy4KICAgICAgICogQWRkIG1hbGxpbmZvLCBtYWxsb3B0LiBUaGFua3MgdG8gUmF5bW9uZCBOaWpzc2VuCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9pYTY0L2ZmaS5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvaWE2NC9mZmkuYwppbmRleCA5NTMzZWY2Li5iNzdhODM2IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9pYTY0L2ZmaS5jCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL2lhNjQvZmZpLmMKQEAgLTQwMSw3ICs0MDEsNyBAQAogICAgdGhlIGNsb3N1cmUgKGluIHRoZSAidHJhbXBvbGluZSIgYXJlYSksIGJ1dCB3ZSByZXBsYWNlIHRoZSBncAogICAgcG9pbnRlciB3aXRoIGEgcG9pbnRlciB0byB0aGUgY2xvc3VyZSBpdHNlbGYuICBXZSBhbHNvIGFkZCB0aGUgcmVhbAogICAgZ3AgcG9pbnRlciB0byB0aGUgY2xvc3VyZS4gIFRoaXMgYWxsb3dzIHRoZSBmdW5jdGlvbiBlbnRyeSBjb2RlIHRvCi0gICBib3RoIHJldHJpZXZlIHRoZSB1c2VyIGRhdGEsIGFuZCB0byByZXN0aXJlIHRoZSBjb3JyZWN0IGdwIHBvaW50ZXIuICAqLworICAgYm90aCByZXRyaWV2ZSB0aGUgdXNlciBkYXRhLCBhbmQgdG8gcmVzdG9yZSB0aGUgY29ycmVjdCBncCBwb2ludGVyLiAgKi8KIAogZXh0ZXJuIHZvaWQgZmZpX2Nsb3N1cmVfdW5peCAoKTsKIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvbTg4ay9mZmkuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL204OGsvZmZpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhkZjQ5NAotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL204OGsvZmZpLmMKQEAgLTAsMCArMSw0MDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTMgTWlvZHJhZyBWYWxsYXQuICA8bWlvZEBvcGVuYnNkLm9yZz4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKyAqIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICogYGBTb2Z0d2FyZScnKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisgKiBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKyAqIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICogCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZAorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKiAKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULAorICogVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUKKyAqIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICovCisKKy8qCisgKiBtODhrIEZvcmVpZ24gRnVuY3Rpb24gSW50ZXJmYWNlCisgKgorICogVGhpcyBmaWxlIGF0dGVtcHRzIHRvIHByb3ZpZGUgYWxsIHRoZSBGRkkgZW50cnkgcG9pbnRzIHdoaWNoIGNhbiByZWxpYWJseQorICogYmUgaW1wbGVtZW50ZWQgaW4gQy4KKyAqCisgKiBPbmx5IE9wZW5CU0QvbTg4ayBpcyBjdXJyZW50bHkgc3VwcG9ydGVkOyBvdGhlciBwbGF0Zm9ybXMgKHN1Y2ggYXMKKyAqIE1vdG9yb2xhJ3MgU3lzVi9tODhrKSBjb3VsZCBiZSBzdXBwb3J0ZWQgd2l0aCB0aGUgZm9sbG93aW5nIHR3ZWFrczoKKyAqCisgKiAtIG5vbi1PcGVuQlNEIHN5c3RlbXMgdXNlIGFuIGBvdXRnb2luZyBwYXJhbWV0ZXIgYXJlYScgYXMgcGFydCBvZiB0aGUKKyAqICAgODhCQ1MgY2FsbGluZyBjb252ZW50aW9uLCB3aGljaCBpcyBub3Qgc3VwcG9ydGVkIHVuZGVyIE9wZW5CU0QgZnJvbQorICogICByZWxlYXNlIDMuNiBvbndhcmRzLiAgU3VwcG9ydGluZyBpdCBzaG91bGQgYmUgYXMgZWFzeSBhcyB0YWtpbmcgaXQKKyAqICAgaW50byBhY2NvdW50IHdoZW4gYWRqdXN0aW5nIHRoZSBzdGFjaywgaW4gdGhlIGFzc2VtYmx5IGNvZGUuCisgKgorICogLSB0aGUgbG9naWMgZGVjaWRpbmcgd2hldGhlciBhIGZ1bmN0aW9uIGFyZ3VtZW50IGdldHMgcGFzc2VkIHRocm91Z2gKKyAqICAgcmVnaXN0ZXJzLCBvciBvbiB0aGUgc3RhY2ssIGhhcyBjaGFuZ2VkIHNldmVyYWwgdGltZXMgaW4gT3BlbkJTRCBpbgorICogICBlZGdlIGNhc2VzIChlc3BlY2lhbGx5IGZvciBzdHJ1Y3RzIGxhcmdlciB0aGFuIDMyIGJ5dGVzIGJlaW5nIHBhc3NlZAorICogICBieSB2YWx1ZSkuIFRoZSBjb2RlIGJlbG93IGF0dGVtcHMgdG8gbWF0Y2ggdGhlIGxvZ2ljIHVzZWQgYnkgdGhlCisgKiAgIHN5c3RlbSBjb21waWxlciBvZiBPcGVuQlNEIDUuMywgaS5lLiBnY2MgMy4zLjYgd2l0aCBtYW55IG04OGsgYmFja2VuZAorICogICBmaXhlcy4KKyAqLworCisjaW5jbHVkZSA8ZmZpLmg+CisjaW5jbHVkZSA8ZmZpX2NvbW1vbi5oPgorCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKK3ZvaWQgZmZpX2NhbGxfT0JTRCAodW5zaWduZWQgaW50LCBleHRlbmRlZF9jaWYgKiwgdW5zaWduZWQgaW50LCB2b2lkICosCisJCSAgICB2b2lkICgqZm4pICgpKTsKK3ZvaWQgKmZmaV9wcmVwX2FyZ3MgKHZvaWQgKiwgZXh0ZW5kZWRfY2lmICopOwordm9pZCBmZmlfY2xvc3VyZV9PQlNEIChmZmlfY2xvc3VyZSAqKTsKK3ZvaWQgZmZpX2Nsb3N1cmVfc3RydWN0X09CU0QgKGZmaV9jbG9zdXJlICopOwordW5zaWduZWQgaW50IGZmaV9jbG9zdXJlX09CU0RfaW5uZXIgKGZmaV9jbG9zdXJlICosIHZvaWQgKiwgdW5zaWduZWQgaW50ICosCisJCQkJICAgICBjaGFyICopOwordm9pZCBmZmlfY2FjaGVmbHVzaF9PQlNEICh1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCk7CisKKyNkZWZpbmUgQ0lGX0ZMQUdTX0lOVAkJKDEgPDwgMCkKKyNkZWZpbmUgQ0lGX0ZMQUdTX0RJTlQJCSgxIDw8IDEpCisKKy8qCisgKiBGb3JlaWduIEZ1bmN0aW9uIEludGVyZmFjZSBBUEkKKyAqLworCisvKiBmZmlfcHJlcF9hcmdzIGlzIGNhbGxlZCBieSB0aGUgYXNzZW1ibHkgcm91dGluZSBvbmNlIHN0YWNrIHNwYWNlIGhhcworICAgYmVlbiBhbGxvY2F0ZWQgZm9yIHRoZSBmdW5jdGlvbidzIGFyZ3VtZW50cy4gICovCisKK3ZvaWQgKgorZmZpX3ByZXBfYXJncyAodm9pZCAqc3RhY2ssIGV4dGVuZGVkX2NpZiAqZWNpZikKK3sKKyAgdW5zaWduZWQgaW50IGk7CisgIHZvaWQgKipwX2FyZ3Y7CisgIGNoYXIgKmFyZ3AsICpzdGFja3A7CisgIHVuc2lnbmVkIGludCAqcmVncDsKKyAgdW5zaWduZWQgaW50IHJlZ3VzZWQ7CisgIGZmaV90eXBlICoqcF9hcmc7CisgIHZvaWQgKnN0cnVjdF92YWx1ZV9wdHI7CisKKyAgcmVncCA9ICh1bnNpZ25lZCBpbnQgKilzdGFjazsKKyAgc3RhY2twID0gKGNoYXIgKikocmVncCArIDgpOworICByZWd1c2VkID0gMDsKKworICBpZiAoZWNpZi0+Y2lmLT5ydHlwZS0+dHlwZSA9PSBGRklfVFlQRV9TVFJVQ1QKKyAgICAgICYmICFlY2lmLT5jaWYtPmZsYWdzKQorICAgIHN0cnVjdF92YWx1ZV9wdHIgPSBlY2lmLT5ydmFsdWU7CisgIGVsc2UKKyAgICBzdHJ1Y3RfdmFsdWVfcHRyID0gTlVMTDsKKworICBwX2FyZ3YgPSBlY2lmLT5hdmFsdWU7CisKKyAgZm9yIChpID0gZWNpZi0+Y2lmLT5uYXJncywgcF9hcmcgPSBlY2lmLT5jaWYtPmFyZ190eXBlczsgaSAhPSAwOyBpLS0sIHBfYXJnKyspCisgICAgeworICAgICAgc2l6ZV90IHo7CisgICAgICB1bnNpZ25lZCBzaG9ydCB0LCBhOworCisgICAgICB6ID0gKCpwX2FyZyktPnNpemU7CisgICAgICB0ID0gKCpwX2FyZyktPnR5cGU7CisgICAgICBhID0gKCpwX2FyZyktPmFsaWdubWVudDsKKworICAgICAgLyoKKyAgICAgICAqIEZpZ3VyZSBvdXQgd2hldGhlciB0aGUgYXJndW1lbnQgY2FuIGJlIHBhc3NlZCB0aHJvdWdoIHJlZ2lzdGVycworICAgICAgICogb3Igb24gdGhlIHN0YWNrLgorICAgICAgICogVGhlIHJ1bGUgaXMgdGhhdCByZWdpc3RlcnMgY2FuIG9ubHkgcmVjZWl2ZSBzaW1wbGUgdHlwZXMgbm90IGxhcmdlcgorICAgICAgICogdGhhbiA2NCBiaXRzLCBvciBzdHJ1Y3RzIHRoZSBleGFjdCBzaXplIG9mIGEgcmVnaXN0ZXIgYW5kIGFsaWduZWQgdG8KKyAgICAgICAqIHRoZSBzaXplIG9mIGEgcmVnaXN0ZXIuCisgICAgICAgKi8KKyAgICAgIGlmICh0ID09IEZGSV9UWVBFX1NUUlVDVCkKKwl7CisJICBpZiAoeiA9PSBzaXplb2YgKGludCkgJiYgYSA9PSBzaXplb2YgKGludCkgJiYgcmVndXNlZCA8IDgpCisJICAgIGFyZ3AgPSAoY2hhciAqKXJlZ3A7CisJICBlbHNlCisJICAgIGFyZ3AgPSBzdGFja3A7CisJfQorICAgICAgZWxzZQorCXsKKwkgIGlmICh6ID4gc2l6ZW9mIChpbnQpICYmIHJlZ3VzZWQgPCA4IC0gMSkKKwkgICAgeworCSAgICAgIC8qIGFsaWduIHRvIGFuIGV2ZW4gcmVnaXN0ZXIgcGFpciAqLworCSAgICAgIGlmIChyZWd1c2VkICYgMSkKKwkJeworCQkgIHJlZ3ArKzsKKwkJICByZWd1c2VkKys7CisJCX0KKwkgICAgfQorCSAgaWYgKHJlZ3VzZWQgPCA4KQorCSAgICBhcmdwID0gKGNoYXIgKilyZWdwOworCSAgZWxzZQorCSAgICBhcmdwID0gc3RhY2twOworCX0KKworICAgICAgLyogRW5mb3JjZSBwcm9wZXIgc3RhY2sgYWxpZ25tZW50IG9mIDY0LWJpdCB0eXBlcyAqLworICAgICAgaWYgKGFyZ3AgPT0gc3RhY2twICYmIGEgPiBzaXplb2YgKGludCkpCisJeworCSAgc3RhY2twID0gKGNoYXIgKikgQUxJR04oc3RhY2twLCBhKTsKKwkgIGFyZ3AgPSBzdGFja3A7CisJfQorCisgICAgICBzd2l0Y2ggKHQpCisJeworCWNhc2UgRkZJX1RZUEVfU0lOVDg6CisJICAqKHNpZ25lZCBpbnQgKikgYXJncCA9IChzaWduZWQgaW50KSAqKFNJTlQ4ICopICpwX2FyZ3Y7CisJICBicmVhazsKKworCWNhc2UgRkZJX1RZUEVfVUlOVDg6CisJICAqKHVuc2lnbmVkIGludCAqKSBhcmdwID0gKHVuc2lnbmVkIGludCkgKihVSU5UOCAqKSAqcF9hcmd2OworCSAgYnJlYWs7CisKKwljYXNlIEZGSV9UWVBFX1NJTlQxNjoKKwkgICooc2lnbmVkIGludCAqKSBhcmdwID0gKHNpZ25lZCBpbnQpICooU0lOVDE2ICopICpwX2FyZ3Y7CisJICBicmVhazsKKworCWNhc2UgRkZJX1RZUEVfVUlOVDE2OgorCSAgKih1bnNpZ25lZCBpbnQgKikgYXJncCA9ICh1bnNpZ25lZCBpbnQpICooVUlOVDE2ICopICpwX2FyZ3Y7CisJICBicmVhazsKKworCWNhc2UgRkZJX1RZUEVfSU5UOgorCWNhc2UgRkZJX1RZUEVfRkxPQVQ6CisJY2FzZSBGRklfVFlQRV9VSU5UMzI6CisJY2FzZSBGRklfVFlQRV9TSU5UMzI6CisJY2FzZSBGRklfVFlQRV9QT0lOVEVSOgorCSAgKih1bnNpZ25lZCBpbnQgKikgYXJncCA9ICoodW5zaWduZWQgaW50ICopICpwX2FyZ3Y7CisJICBicmVhazsKKworCWNhc2UgRkZJX1RZUEVfRE9VQkxFOgorCWNhc2UgRkZJX1RZUEVfVUlOVDY0OgorCWNhc2UgRkZJX1RZUEVfU0lOVDY0OgorCWNhc2UgRkZJX1RZUEVfU1RSVUNUOgorCSAgbWVtY3B5IChhcmdwLCAqcF9hcmd2LCB6KTsKKwkgIGJyZWFrOworCisJZGVmYXVsdDoKKwkgIEZGSV9BU1NFUlQgKDApOworCX0KKworICAgICAgLyogQWxpZ24gaWYgbmVjZXNzYXJ5LiAgKi8KKyAgICAgIGlmICgoc2l6ZW9mIChpbnQpIC0gMSkgJiB6KQorCXogPSBBTElHTih6LCBzaXplb2YgKGludCkpOworCisgICAgICBwX2FyZ3YrKzsKKworICAgICAgLyogQmUgY2FyZWZ1bCwgb25jZSBhbGwgcmVnaXN0ZXJzIGFyZSBmaWxsZWQsIGFuZCBhYm91dCB0byBjb250aW51ZQorICAgICAgICAgb24gc3RhY2ssIHJlZ3AgPT0gc3RhY2twLiAgVGhlcmVmb3JlIHRoZSBjaGVjayBmb3IgcmVndXNlZCBhcyB3ZWxsLiAqLworICAgICAgaWYgKGFyZ3AgPT0gKGNoYXIgKilyZWdwICYmIHJlZ3VzZWQgPCA4KQorCXsKKwkgIHJlZ3AgKz0geiAvIHNpemVvZiAoaW50KTsKKwkgIHJlZ3VzZWQgKz0geiAvIHNpemVvZiAoaW50KTsKKwl9CisgICAgICBlbHNlCisJc3RhY2twICs9IHo7CisgICAgfQorCisgIHJldHVybiBzdHJ1Y3RfdmFsdWVfcHRyOworfQorCisvKiBQZXJmb3JtIG1hY2hpbmUgZGVwZW5kZW50IGNpZiBwcm9jZXNzaW5nICovCitmZmlfc3RhdHVzCitmZmlfcHJlcF9jaWZfbWFjaGRlcCAoZmZpX2NpZiAqY2lmKQoreworICAvKiBTZXQgdGhlIHJldHVybiB0eXBlIGZsYWcgKi8KKyAgc3dpdGNoIChjaWYtPnJ0eXBlLT50eXBlKQorICAgIHsKKyAgICBjYXNlIEZGSV9UWVBFX1ZPSUQ6CisgICAgICBjaWYtPmZsYWdzID0gMDsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBGRklfVFlQRV9TVFJVQ1Q6CisgICAgICBpZiAoY2lmLT5ydHlwZS0+c2l6ZSA9PSBzaXplb2YgKGludCkgJiYKKwkgIGNpZi0+cnR5cGUtPmFsaWdubWVudCA9PSBzaXplb2YgKGludCkpCisJY2lmLT5mbGFncyA9IENJRl9GTEFHU19JTlQ7CisgICAgICBlbHNlCisJY2lmLT5mbGFncyA9IDA7CisgICAgICBicmVhazsKKworICAgIGNhc2UgRkZJX1RZUEVfRE9VQkxFOgorICAgIGNhc2UgRkZJX1RZUEVfU0lOVDY0OgorICAgIGNhc2UgRkZJX1RZUEVfVUlOVDY0OgorICAgICAgY2lmLT5mbGFncyA9IENJRl9GTEFHU19ESU5UOworICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgY2lmLT5mbGFncyA9IENJRl9GTEFHU19JTlQ7CisgICAgICBicmVhazsKKyAgICB9CisKKyAgcmV0dXJuIEZGSV9PSzsKK30KKwordm9pZAorZmZpX2NhbGwgKGZmaV9jaWYgKmNpZiwgdm9pZCAoKmZuKSAoKSwgdm9pZCAqcnZhbHVlLCB2b2lkICoqYXZhbHVlKQoreworICBleHRlbmRlZF9jaWYgZWNpZjsKKworICBlY2lmLmNpZiA9IGNpZjsKKyAgZWNpZi5hdmFsdWUgPSBhdmFsdWU7CisKKyAgLyogSWYgdGhlIHJldHVybiB2YWx1ZSBpcyBhIHN0cnVjdCBhbmQgd2UgZG9uJ3QgaGF2ZSBhIHJldHVybiB2YWx1ZQorICAgICBhZGRyZXNzIHRoZW4gd2UgbmVlZCB0byBtYWtlIG9uZS4gICovCisKKyAgaWYgKHJ2YWx1ZSA9PSBOVUxMCisgICAgICAmJiBjaWYtPnJ0eXBlLT50eXBlID09IEZGSV9UWVBFX1NUUlVDVAorICAgICAgJiYgKGNpZi0+cnR5cGUtPnNpemUgIT0gc2l6ZW9mIChpbnQpCisJICB8fCBjaWYtPnJ0eXBlLT5hbGlnbm1lbnQgIT0gc2l6ZW9mIChpbnQpKSkKKyAgICBlY2lmLnJ2YWx1ZSA9IGFsbG9jYSAoY2lmLT5ydHlwZS0+c2l6ZSk7CisgIGVsc2UKKyAgICBlY2lmLnJ2YWx1ZSA9IHJ2YWx1ZTsKKworICBzd2l0Y2ggKGNpZi0+YWJpKQorICAgIHsKKyAgICBjYXNlIEZGSV9PQlNEOgorICAgICAgZmZpX2NhbGxfT0JTRCAoY2lmLT5ieXRlcywgJmVjaWYsIGNpZi0+ZmxhZ3MsIGVjaWYucnZhbHVlLCBmbik7CisgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICBGRklfQVNTRVJUICgwKTsKKyAgICAgIGJyZWFrOworICAgIH0KK30KKworLyoKKyAqIENsb3N1cmUgQVBJCisgKi8KKworc3RhdGljIHZvaWQKK2ZmaV9wcmVwX2Nsb3N1cmVfYXJnc19PQlNEIChmZmlfY2lmICpjaWYsIHZvaWQgKiphdmFsdWUsIHVuc2lnbmVkIGludCAqcmVncCwKKwkJCSAgICBjaGFyICpzdGFja3ApCit7CisgIHVuc2lnbmVkIGludCBpOworICB2b2lkICoqcF9hcmd2OworICBjaGFyICphcmdwOworICB1bnNpZ25lZCBpbnQgcmVndXNlZDsKKyAgZmZpX3R5cGUgKipwX2FyZzsKKworICByZWd1c2VkID0gMDsKKworICBwX2FyZ3YgPSBhdmFsdWU7CisKKyAgZm9yIChpID0gY2lmLT5uYXJncywgcF9hcmcgPSBjaWYtPmFyZ190eXBlczsgaSAhPSAwOyBpLS0sIHBfYXJnKyspCisgICAgeworICAgICAgc2l6ZV90IHo7CisgICAgICB1bnNpZ25lZCBzaG9ydCB0LCBhOworCisgICAgICB6ID0gKCpwX2FyZyktPnNpemU7CisgICAgICB0ID0gKCpwX2FyZyktPnR5cGU7CisgICAgICBhID0gKCpwX2FyZyktPmFsaWdubWVudDsKKworICAgICAgLyoKKyAgICAgICAqIEZpZ3VyZSBvdXQgd2hldGhlciB0aGUgYXJndW1lbnQgaGFzIGJlZW4gcGFzc2VkIHRocm91Z2ggcmVnaXN0ZXJzCisgICAgICAgKiBvciBvbiB0aGUgc3RhY2suCisgICAgICAgKiBUaGUgcnVsZSBpcyB0aGF0IHJlZ2lzdGVycyBjYW4gb25seSByZWNlaXZlIHNpbXBsZSB0eXBlcyBub3QgbGFyZ2VyCisgICAgICAgKiB0aGFuIDY0IGJpdHMsIG9yIHN0cnVjdHMgdGhlIGV4YWN0IHNpemUgb2YgYSByZWdpc3RlciBhbmQgYWxpZ25lZCB0bworICAgICAgICogdGhlIHNpemUgb2YgYSByZWdpc3Rlci4KKyAgICAgICAqLworICAgICAgaWYgKHQgPT0gRkZJX1RZUEVfU1RSVUNUKQorCXsKKwkgIGlmICh6ID09IHNpemVvZiAoaW50KSAmJiBhID09IHNpemVvZiAoaW50KSAmJiByZWd1c2VkIDwgOCkKKwkgICAgYXJncCA9IChjaGFyICopcmVncDsKKwkgIGVsc2UKKwkgICAgYXJncCA9IHN0YWNrcDsKKwl9CisgICAgICBlbHNlCisJeworCSAgaWYgKHogPiBzaXplb2YgKGludCkgJiYgcmVndXNlZCA8IDggLSAxKQorCSAgICB7CisJICAgICAgLyogYWxpZ24gdG8gYW4gZXZlbiByZWdpc3RlciBwYWlyICovCisJICAgICAgaWYgKHJlZ3VzZWQgJiAxKQorCQl7CisJCSAgcmVncCsrOworCQkgIHJlZ3VzZWQrKzsKKwkJfQorCSAgICB9CisJICBpZiAocmVndXNlZCA8IDgpCisJICAgIGFyZ3AgPSAoY2hhciAqKXJlZ3A7CisJICBlbHNlCisJICAgIGFyZ3AgPSBzdGFja3A7CisJfQorCisgICAgICAvKiBFbmZvcmNlIHByb3BlciBzdGFjayBhbGlnbm1lbnQgb2YgNjQtYml0IHR5cGVzICovCisgICAgICBpZiAoYXJncCA9PSBzdGFja3AgJiYgYSA+IHNpemVvZiAoaW50KSkKKwl7CisJICBzdGFja3AgPSAoY2hhciAqKSBBTElHTihzdGFja3AsIGEpOworCSAgYXJncCA9IHN0YWNrcDsKKwl9CisKKyAgICAgIGlmICh6IDwgc2l6ZW9mIChpbnQpICYmIHQgIT0gRkZJX1RZUEVfU1RSVUNUKQorCSpwX2FyZ3YgPSAodm9pZCAqKSAoYXJncCArIHNpemVvZiAoaW50KSAtIHopOworICAgICAgZWxzZQorCSpwX2FyZ3YgPSAodm9pZCAqKSBhcmdwOworCisgICAgICAvKiBBbGlnbiBpZiBuZWNlc3NhcnkgKi8KKyAgICAgIGlmICgoc2l6ZW9mIChpbnQpIC0gMSkgJiB6KQorCXogPSBBTElHTih6LCBzaXplb2YgKGludCkpOworCisgICAgICBwX2FyZ3YrKzsKKworICAgICAgLyogQmUgY2FyZWZ1bCwgb25jZSBhbGwgcmVnaXN0ZXJzIGFyZSBleGhhdXN0ZWQsIGFuZCBhYm91dCB0byBmZXRjaCBmcm9tCisJIHN0YWNrLCByZWdwID09IHN0YWNrcC4gIFRoZXJlZm9yZSB0aGUgY2hlY2sgZm9yIHJlZ3VzZWQgYXMgd2VsbC4gKi8KKyAgICAgIGlmIChhcmdwID09IChjaGFyICopcmVncCAmJiByZWd1c2VkIDwgOCkKKwl7CisJICByZWdwICs9IHogLyBzaXplb2YgKGludCk7CisJICByZWd1c2VkICs9IHogLyBzaXplb2YgKGludCk7CisJfQorICAgICAgZWxzZQorCXN0YWNrcCArPSB6OworICAgIH0KK30KKwordW5zaWduZWQgaW50CitmZmlfY2xvc3VyZV9PQlNEX2lubmVyIChmZmlfY2xvc3VyZSAqY2xvc3VyZSwgdm9pZCAqcmVzcCwgdW5zaWduZWQgaW50ICpyZWdwLAorCQkJY2hhciAqc3RhY2twKQoreworICBmZmlfY2lmICpjaWY7CisgIHZvaWQgKiphcmdfYXJlYTsKKworICBjaWYgPSBjbG9zdXJlLT5jaWY7CisgIGFyZ19hcmVhID0gKHZvaWQqKikgYWxsb2NhIChjaWYtPm5hcmdzICogc2l6ZW9mICh2b2lkICopKTsKKworICBmZmlfcHJlcF9jbG9zdXJlX2FyZ3NfT0JTRChjaWYsIGFyZ19hcmVhLCByZWdwLCBzdGFja3ApOworCisgIChjbG9zdXJlLT5mdW4pIChjaWYsIHJlc3AsIGFyZ19hcmVhLCBjbG9zdXJlLT51c2VyX2RhdGEpOworCisgIHJldHVybiBjaWYtPmZsYWdzOworfQorCitmZmlfc3RhdHVzCitmZmlfcHJlcF9jbG9zdXJlX2xvYyAoZmZpX2Nsb3N1cmUqIGNsb3N1cmUsIGZmaV9jaWYqIGNpZiwKKwkJICAgICAgdm9pZCAoKmZ1bikoZmZpX2NpZiosdm9pZCosdm9pZCoqLHZvaWQqKSwKKwkJICAgICAgdm9pZCAqdXNlcl9kYXRhLCB2b2lkICpjb2RlbG9jKQoreworICB1bnNpZ25lZCBpbnQgKnRyYW1wID0gKHVuc2lnbmVkIGludCAqKSBjb2RlbG9jOworICB2b2lkICpmbjsKKworICBGRklfQVNTRVJUIChjaWYtPmFiaSA9PSBGRklfT0JTRCk7CisKKyAgaWYgKGNpZi0+cnR5cGUtPnR5cGUgPT0gRkZJX1RZUEVfU1RSVUNUICYmICFjaWYtPmZsYWdzKQorICAgIGZuID0gJmZmaV9jbG9zdXJlX3N0cnVjdF9PQlNEOworICBlbHNlCisgICAgZm4gPSAmZmZpX2Nsb3N1cmVfT0JTRDsKKworICAvKiBvci51ICVyMTAsICVyMCwgJWhpMTYoZm4pICovCisgIHRyYW1wWzBdID0gMHg1ZDQwMDAwMCB8ICgoKHVuc2lnbmVkIGludClmbikgPj4gMTYpOworICAvKiBvci51ICVyMTMsICVyMCwgJWhpMTYoY2xvc3VyZSkgKi8KKyAgdHJhbXBbMV0gPSAweDVkYTAwMDAwIHwgKCh1bnNpZ25lZCBpbnQpY2xvc3VyZSA+PiAxNik7CisgIC8qIG9yICVyMTAsICVyMTAsICVsbzE2KGZuKSAqLworICB0cmFtcFsyXSA9IDB4NTk0YTAwMDAgfCAoKCh1bnNpZ25lZCBpbnQpZm4pICYgMHhmZmZmKTsKKyAgLyogam1wLm4gJXIxMCAqLworICB0cmFtcFszXSA9IDB4ZjQwMGM0MGE7CisgIC8qIG9yICVyMTMsICVyMTMsICVsbzE2KGNsb3N1cmUpICovCisgIHRyYW1wWzRdID0gMHg1OWFkMDAwMCB8ICgodW5zaWduZWQgaW50KWNsb3N1cmUgJiAweGZmZmYpOworCisgIGZmaV9jYWNoZWZsdXNoX09CU0QoKHVuc2lnbmVkIGludCljb2RlbG9jLCBGRklfVFJBTVBPTElORV9TSVpFKTsKKworICBjbG9zdXJlLT5jaWYgID0gY2lmOworICBjbG9zdXJlLT51c2VyX2RhdGEgPSB1c2VyX2RhdGE7CisgIGNsb3N1cmUtPmZ1biAgPSBmdW47CisKKyAgcmV0dXJuIEZGSV9PSzsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL204OGsvZmZpdGFyZ2V0LmggYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9tODhrL2ZmaXRhcmdldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1MmJmOWYKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9tODhrL2ZmaXRhcmdldC5oCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTMgTWlvZHJhZyBWYWxsYXQuICA8bWlvZEBvcGVuYnNkLm9yZz4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKyAqIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICogYGBTb2Z0d2FyZScnKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisgKiBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKyAqIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICogCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZAorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKiAKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULAorICogVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUKKyAqIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICovCisKKy8qCisgKiBtODhrIEZvcmVpZ24gRnVuY3Rpb24gSW50ZXJmYWNlCisgKi8KKworI2lmbmRlZiBMSUJGRklfVEFSR0VUX0gKKyNkZWZpbmUgTElCRkZJX1RBUkdFVF9ICisKKyNpZm5kZWYgTElCRkZJX0FTTQordHlwZWRlZiB1bnNpZ25lZCBsb25nIGZmaV9hcmc7Cit0eXBlZGVmIHNpZ25lZCBsb25nIGZmaV9zYXJnOworCit0eXBlZGVmIGVudW0gZmZpX2FiaSB7CisgIEZGSV9GSVJTVF9BQkkgPSAwLAorICBGRklfT0JTRCwKKyAgRkZJX0RFRkFVTFRfQUJJID0gRkZJX09CU0QsCisgIEZGSV9MQVNUX0FCSSA9IEZGSV9ERUZBVUxUX0FCSSArIDEKK30gZmZpX2FiaTsKKyNlbmRpZgorCisvKiAtLS0tIERlZmluaXRpb25zIGZvciBjbG9zdXJlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIEZGSV9DTE9TVVJFUyAxCisjZGVmaW5lIEZGSV9UUkFNUE9MSU5FX1NJWkUgMHgxNAorI2RlZmluZSBGRklfTkFUSVZFX1JBV19BUEkgMAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL204OGsvb2JzZC5TIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvbTg4ay9vYnNkLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk0NGEyMwotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL204OGsvb2JzZC5TCkBAIC0wLDAgKzEsMjA5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEzIE1pb2RyYWcgVmFsbGF0LiAgPG1pb2RAb3BlbmJzZC5vcmc+CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisgKiBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyAqIGBgU29mdHdhcmUnJyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICogZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqIAorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICogCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWQorICogQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwKKyAqIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFCisgKiBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisvKgorICogbTg4ayBGb3JlaWduIEZ1bmN0aW9uIEludGVyZmFjZQorICovCisKKyNkZWZpbmUgTElCRkZJX0FTTQkKKyNpbmNsdWRlIDxmZmljb25maWcuaD4KKyNpbmNsdWRlIDxmZmkuaD4KKworCS50ZXh0CisKKy8qCisgKiBmZmlfY2FjaGVmbHVzaF9PQlNEKHVuc2lnbmVkIGludCBhZGRyLAklcjIKKyAqCQkgICAgICAgdW5zaWduZWQgaW50IHNpemUpOwklcjMKKyAqLworCS5hbGlnbgk0CisJLmdsb2JsCWZmaV9jYWNoZWZsdXNoX09CU0QKKwkudHlwZQlmZmlfY2FjaGVmbHVzaF9PQlNELEBmdW5jdGlvbgorZmZpX2NhY2hlZmx1c2hfT0JTRDoKKwl0YjAJMCwgICAlcjAsIDQ1MQorCW9yCSVyMCwgJXIwLCAlcjAKKwlqbXAJJXIxCisJLnNpemUJZmZpX2NhY2hlZmx1c2hfT0JTRCwgLiAtIGZmaV9jYWNoZWZsdXNoX09CU0QKKworLyoKKyAqIGZmaV9jYWxsX09CU0QodW5zaWduZWQgYnl0ZXMsCQklcjIKKyAqCQkgZXh0ZW5kZWRfY2lmICplY2lmLAkJJXIzCisgKgkJIHVuc2lnbmVkIGZsYWdzLAkJJXI0CisgKgkJIHZvaWQgKnJ2YWx1ZSwJCQklcjUKKyAqCQkgdm9pZCAoKmZuKSgpKTsJCQklcjYKKyAqLworCS5hbGlnbgk0CisJLmdsb2JsCWZmaV9jYWxsX09CU0QKKwkudHlwZQlmZmlfY2FsbF9PQlNELEBmdW5jdGlvbgorZmZpX2NhbGxfT0JTRDoKKwlzdWJ1CSVyMzEsICVyMzEsIDMyCisJc3QJJXIzMCwgJXIzMSwgNAorCXN0CSVyMSwgICVyMzEsIDAKKwlhZGR1CSVyMzAsICVyMzEsIDMyCisKKwl8IFNhdmUgdGhlIGZldyBhcmd1bWVudHMgd2UnbGwgbmVlZCBhZnRlciBmZmlfcHJlcF9hcmdzKCkKKwlzdC5kCSVyNCwgJXIzMSwgOAorCXN0CSVyNiwgJXIzMSwgMTYKKworCXwgQWxsb2NhdGUgcm9vbSBmb3IgdGhlIGltYWdlIG9mIHIyLXI5LCBhbmQgdGhlIHN0YWNrIHNwYWNlIGZvcgorCXwgdGhlIGFyZ3MgKHJvdW5kZWQgdG8gYSAxNi1ieXRlIGJvdW5kYXJ5KQorCWFkZHUJJXIyLCAgJXIyLCAgKDggKiA0KSArIDE1CisJY2xyCSVyMiwgICVyMiwgIDQ8MD4KKwlzdWJ1CSVyMzEsICVyMzEsICVyMgorCisJfCBGaWxsIHJlZ2lzdGVyIGFuZCBzdGFjayBpbWFnZQorCW9yCSVyMiwgJXIzMSwgJXIwCisjaWZkZWYgUElDCisJYnNyCWZmaV9wcmVwX2FyZ3MjcGx0CisjZWxzZQorCWJzcglmZmlfcHJlcF9hcmdzCisjZW5kaWYKKworCXwgU2F2ZSBwb2ludGVyIHRvIHJldHVybiBzdHJ1Y3QgYWRkcmVzcywgaWYgYW55CisJb3IJJXIxMiwgJXIyLCAlcjAKKworCXwgR2V0IGZ1bmN0aW9uIHBvaW50ZXIKKwlzdWJ1CSVyNCwgICVyMzAsIDMyCisJbGQJJXIxLCAgJXI0LCAgMTYKKworCXwgRmV0Y2ggdGhlIHJlZ2lzdGVyIGFyZ3VtZW50cworCWxkLmQJJXIyLCAlcjMxLCAoMCAqIDQpCisJbGQuZAklcjQsICVyMzEsICgyICogNCkKKwlsZC5kCSVyNiwgJXIzMSwgKDQgKiA0KQorCWxkLmQJJXI4LCAlcjMxLCAoNiAqIDQpCisJYWRkdQklcjMxLCAlcjMxLCAoOCAqIDQpCisKKwl8IEludm9rZSB0aGUgZnVuY3Rpb24KKwlqc3IJJXIxCisKKwl8IFJlc3RvcmUgc3RhY2sgbm93IHRoYXQgd2UgZG9uJ3QgbmVlZCB0aGUgYXJncyBhbnltb3JlCisJc3VidQklcjMxLCAlcjMwLCAzMgorCisJfCBGaWd1cmUgb3V0IHdoYXQgdG8gcmV0dXJuIGFzIHRoZSBmdW5jdGlvbidzIHJldHVybiB2YWx1ZQorCWxkCSVyNSwgJXIzMSwgMTIJCXwgcnZhbHVlCisJbGQJJXI0LCAlcjMxLCA4CQl8IGZsYWdzCisKKwliY25kCWVxMCwgJXI1LCA5ZgorCisJYmIwCTAsICVyNCwgMWYJCXwgQ0lGX0ZMQUdTX0lOVAorCXN0CSVyMiwgJXI1LCAwCisJYnIJOWYKKworMToKKwliYjAJMSwgJXI0LCAxZgkJfCBDSUZfRkxBR1NfRElOVAorCXN0LmQJJXIyLCAlcjUsIDAKKwlicgk5ZgorCisxOgorOToKKwlsZAklcjEsICAlcjMxLCAwCisJbGQJJXIzMCwgJXIzMSwgNAorCWptcC5uCSVyMQorCSBhZGR1CSVyMzEsICVyMzEsIDMyCisJLnNpemUJZmZpX2NhbGxfT0JTRCwgLiAtIGZmaV9jYWxsX09CU0QKKworLyoKKyAqIGZmaV9jbG9zdXJlX09CU0QoZmZpX2Nsb3N1cmUgKmNsb3N1cmUpOwklcjEzCisgKi8KKwkuYWxpZ24JNAorCS5nbG9ibAlmZmlfY2xvc3VyZV9PQlNECisJLnR5cGUJZmZpX2Nsb3N1cmVfT0JTRCwgQGZ1bmN0aW9uCitmZmlfY2xvc3VyZV9PQlNEOgorCXN1YnUJJXIzMSwgJXIzMSwgMTYKKwlzdAklcjMwLCAlcjMxLCA0CisJc3QJJXIxLCAgJXIzMSwgMAorCWFkZHUJJXIzMCwgJXIzMSwgMTYKKworCXwgTWFrZSByb29tIG9uIHRoZSBzdGFjayBmb3Igc2F2ZWQgcmVnaXN0ZXIgYXJndW1lbnRzIGFuZCByZXR1cm4KKwl8IHZhbHVlCisJc3VidQklcjMxLCAlcjMxLCAoOCAqIDQpICsgKDIgKiA0KQorCXN0LmQJJXIyLCAgJXIzMSwgKDAgKiA0KQorCXN0LmQJJXI0LCAgJXIzMSwgKDIgKiA0KQorCXN0LmQJJXI2LCAgJXIzMSwgKDQgKiA0KQorCXN0LmQJJXI4LCAgJXIzMSwgKDYgKiA0KQorCisJfCBJbnZva2UgdGhlIGNsb3N1cmUgZnVuY3Rpb24KKwlvcgklcjUsICAlcjMwLCAwCQkJfCBjYWxsaW5nIHN0YWNrCisJYWRkdQklcjQsICAlcjMxLCAwCQkJfCBzYXZlZCByZWdpc3RlcnMKKwlhZGR1CSVyMywgICVyMzEsICg4ICogNCkJCXwgcmV0dXJuIHZhbHVlCisJb3IJJXIyLCAgJXIxMywgJXIwCQkJfCBjbG9zdXJlCisjaWZkZWYgUElDCisJYnNyCWZmaV9jbG9zdXJlX09CU0RfaW5uZXIjcGx0CisjZWxzZQorCWJzcglmZmlfY2xvc3VyZV9PQlNEX2lubmVyCisjZW5kaWYKKworCXwgRmlndXJlIG91dCB3aGF0IHRvIHJldHVybiBhcyB0aGUgZnVuY3Rpb24ncyByZXR1cm4gdmFsdWUKKwliYjAJMCwgJXIyLCAxZgkJfCBDSUZfRkxBR1NfSU5UCisJbGQJJXIyLCAlcjMxLCAoOCAqIDQpCisJYnIJOWYKKworMToKKwliYjAJMSwgJXIyLCAxZgkJfCBDSUZfRkxBR1NfRElOVAorCWxkLmQJJXIyLCAlcjMxLCAoOCAqIDQpCisJYnIJOWYKKworMToKKzk6CisJc3VidQklcjMxLCAlcjMwLCAxNgorCWxkCSVyMSwgICVyMzEsIDAKKwlsZAklcjMwLCAlcjMxLCA0CisJam1wLm4JJXIxCisJIGFkZHUJJXIzMSwgJXIzMSwgMTYKKwkuc2l6ZQlmZmlfY2xvc3VyZV9PQlNELC4tZmZpX2Nsb3N1cmVfT0JTRAorCisvKgorICogZmZpX2Nsb3N1cmVfc3RydWN0X09CU0QoZmZpX2Nsb3N1cmUgKmNsb3N1cmUpOwklcjEzCisgKi8KKwkuYWxpZ24JNAorCS5nbG9ibAlmZmlfY2xvc3VyZV9zdHJ1Y3RfT0JTRAorCS50eXBlCWZmaV9jbG9zdXJlX3N0cnVjdF9PQlNELCBAZnVuY3Rpb24KK2ZmaV9jbG9zdXJlX3N0cnVjdF9PQlNEOgorCXN1YnUJJXIzMSwgJXIzMSwgMTYKKwlzdAklcjMwLCAlcjMxLCA0CisJc3QJJXIxLCAgJXIzMSwgMAorCWFkZHUJJXIzMCwgJXIzMSwgMTYKKworCXwgTWFrZSByb29tIG9uIHRoZSBzdGFjayBmb3Igc2F2ZWQgcmVnaXN0ZXIgYXJndW1lbnRzCisJc3VidQklcjMxLCAlcjMxLCAoOCAqIDQpCisJc3QuZAklcjIsICAlcjMxLCAoMCAqIDQpCisJc3QuZAklcjQsICAlcjMxLCAoMiAqIDQpCisJc3QuZAklcjYsICAlcjMxLCAoNCAqIDQpCisJc3QuZAklcjgsICAlcjMxLCAoNiAqIDQpCisKKwl8IEludm9rZSB0aGUgY2xvc3VyZSBmdW5jdGlvbgorCW9yCSVyNSwgICVyMzAsIDAJCQl8IGNhbGxpbmcgc3RhY2sKKwlhZGR1CSVyNCwgICVyMzEsIDAJCQl8IHNhdmVkIHJlZ2lzdGVycworCW9yCSVyMywgICVyMTIsIDAJCQl8IHJldHVybiB2YWx1ZQorCW9yCSVyMiwgICVyMTMsICVyMAkJCXwgY2xvc3VyZQorI2lmZGVmIFBJQworCWJzcglmZmlfY2xvc3VyZV9PQlNEX2lubmVyI3BsdAorI2Vsc2UKKwlic3IJZmZpX2Nsb3N1cmVfT0JTRF9pbm5lcgorI2VuZGlmCisKKwlzdWJ1CSVyMzEsICVyMzAsIDE2CisJbGQJJXIxLCAgJXIzMSwgMAorCWxkCSVyMzAsICVyMzEsIDQKKwlqbXAubgklcjEKKwkgYWRkdQklcjMxLCAlcjMxLCAxNgorCS5zaXplCWZmaV9jbG9zdXJlX3N0cnVjdF9PQlNELC4tZmZpX2Nsb3N1cmVfc3RydWN0X09CU0QKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL21pY3JvYmxhemUvZmZpLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9taWNyb2JsYXplL2ZmaS5jCmluZGV4IDVjMTU1YzUuLmVhOTYyZWEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL21pY3JvYmxhemUvZmZpLmMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvbWljcm9ibGF6ZS9mZmkuYwpAQCAtMTgzLDcgKzE4Myw3IEBACiAJZmZpX3R5cGUqKiBhcmdfdHlwZXMgPSBjaWYtPmFyZ190eXBlczsKIAogCS8qIHJlLWFsbG9jYXRlIGRhdGEgZm9yIHRoZSBhcmdzLiBUaGlzIG5lZWRzIHRvIGJlIGRvbmUgaW4gb3JkZXIgdG8ga2VlcAotCSAqIG11bHRpLXdvcmQgb2JqZWN0cyAoZS5nLiBzdHJ1Y3RzKSBpbiBjb250aWdpb3VzIG1lbW9yeS4gQ2FsbGVycyBhcmUgbm90CisJICogbXVsdGktd29yZCBvYmplY3RzIChlLmcuIHN0cnVjdHMpIGluIGNvbnRpZ3VvdXMgbWVtb3J5LiBDYWxsZXJzIGFyZSBub3QKIAkgKiByZXF1aXJlZCB0byBzdG9yZSB0aGUgdmFsdWUgb2YgYXJncyBpbiB0aGUgbG93ZXIgNiB3b3JkcyBpbiB0aGUgc3RhY2sKIAkgKiAoYWx0aG91Z2ggdGhleSBhcmUgYWxsb2NhdGVkIGluIHRoZSBzdGFjaykuCiAJICovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9taWNyb2JsYXplL3N5c3YuUyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL21pY3JvYmxhemUvc3lzdi5TCmluZGV4IDdhMTk1YTYuLmVhNDNlOWQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL21pY3JvYmxhemUvc3lzdi5TCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL21pY3JvYmxhemUvc3lzdi5TCkBAIC0xMzQsNyArMTM0LDcgQEAKIAlyc3ViaSByMTEsIHIyMywgOAogCWJlcWkgcjExLCBmZmlfY2FsbF9TWVNWX3N0b3JlNjQKIAotCS8qIERpZG50IG1hdGNoIGFueXRoaW5nICovCisJLyogRGlkbid0IG1hdGNoIGFueXRoaW5nICovCiAJYnJpIGZmaV9jYWxsX1NZU1ZfZW5kCiAKIGZmaV9jYWxsX1NZU1Zfc3RvcmU2NDoKQEAgLTIxMCw3ICsyMTAsNyBAQAogCWFkZGlrIHI3LCByMTIsIDAgLyogY2xvc3VyZSBvYmplY3QgKi8KIAlhZGRpayByMSwgcjEsIC04IC8qIGFsbG9jYXRlIHJldHVybiB2YWx1ZSAqLwogCWFkZGlrIHI4LCByMSwgMCAvKiB2b2lkKiBydmFsdWUgKi8KLQlhZGRpayByMSwgcjEsIC04IC8qIGFsbG9jYXRlIGZvciByZXV0cm4gdHlwZS9zaXplIHZhbHVlcyAqLworCWFkZGlrIHIxLCByMSwgLTggLyogYWxsb2NhdGUgZm9yIHJldHVybiB0eXBlL3NpemUgdmFsdWVzICovCiAJYWRkaWsgcjksIHIxLCAwIC8qIHZvaWQqIHJ0eXBlICovCiAJYWRkaWsgcjEwLCByMSwgNCAvKiB2b2lkKiByc2l6ZSAqLwogCkBAIC0yNDcsNyArMjQ3LDcgQEAKIAlyc3ViaSByMTEsIHIxMCwgOAogCWJlcWkgcjExLCBmZmlfY2xvc3VyZV9TWVNWX3N0b3JlNjQKIAotCS8qIERpZG50IG1hdGNoIGFueXRoaW5nICovCisJLyogRGlkbid0IG1hdGNoIGFueXRoaW5nICovCiAJYnJpIGZmaV9jbG9zdXJlX1NZU1ZfZW5kCiAKIGZmaV9jbG9zdXJlX1NZU1Zfc3RvcmU2NDoKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL21pcHMvZmZpLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9taXBzL2ZmaS5jCmluZGV4IDAzMTIxZTMuLjVkMGRkNzAgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL21pcHMvZmZpLmMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvbWlwcy9mZmkuYwpAQCAtMTcwLDcgKzE3MCwxNCBAQAogCQlicmVhazsKIAkJICAKIAkgICAgICBjYXNlIEZGSV9UWVBFX1VJTlQzMjoKKyNpZmRlZiBGRklfTUlQU19OMzIKKwkJLyogVGhlIE4zMiBBQkkgcmVxdWlyZXMgdGhhdCAzMi1iaXQgaW50ZWdlcnMKKwkJICAgYmUgc2lnbi1leHRlbmRlZCB0byA2NC1iaXRzLCByZWdhcmRsZXNzIG9mCisJCSAgIHdoZXRoZXIgdGhleSBhcmUgc2lnbmVkIG9yIHVuc2lnbmVkLiAqLworCQkqKGZmaV9hcmcgKilhcmdwID0gKihTSU5UMzIgKikoKiBwX2FyZ3YpOworI2Vsc2UKIAkJKihmZmlfYXJnICopYXJncCA9ICooVUlOVDMyICopKCogcF9hcmd2KTsKKyNlbmRpZgogCQlicmVhazsKIAogCSAgICAgIC8qIFRoaXMgY2FuIG9ubHkgaGFwcGVuIHdpdGggNjRiaXQgc2xvdHMuICAqLwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvbWlwcy9uMzIuUyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL21pcHMvbjMyLlMKaW5kZXggZmY0YmJjZS4uYzY5ODVkMyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvbWlwcy9uMzIuUworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9taXBzL24zMi5TCkBAIC0xMDgsMTAgKzEwOCw4IEBACiAJUkVHX0wJdDYsIDMqRkZJX1NJWkVPRl9BUkcoJGZwKSAgIyBsb2FkIHRoZSBmbGFncyB3b3JkIGludG8gdDYuCiAKIAlhbmQJdDQsIHQ2LCAoKDE8PEZGSV9GTEFHX0JJVFMpLTEpCi0JYm5legl0NCwgYXJnMV9mbG9hdHAKIAlSRUdfTAlhMCwgMCpGRklfU0laRU9GX0FSRyh0OSkKLQliCWFyZzFfbmV4dAotYXJnMV9mbG9hdHA6CQorCWJlcXoJdDQsIGFyZzFfbmV4dAogCWJuZQl0NCwgRkZJX1RZUEVfRkxPQVQsIGFyZzFfZG91YmxlcAogCWwucwkkZjEyLCAwKkZGSV9TSVpFT0ZfQVJHKHQ5KQogCWIJYXJnMV9uZXh0CkBAIC0xMjEsMTAgKzExOSw4IEBACiAJCiAJU1JMCXQ0LCB0NiwgMSpGRklfRkxBR19CSVRTCiAJYW5kCXQ0LCAoKDE8PEZGSV9GTEFHX0JJVFMpLTEpCi0JYm5legl0NCwgYXJnMl9mbG9hdHAKIAlSRUdfTAlhMSwgMSpGRklfU0laRU9GX0FSRyh0OSkKLQliCWFyZzJfbmV4dAotYXJnMl9mbG9hdHA6CisJYmVxegl0NCwgYXJnMl9uZXh0CiAJYm5lCXQ0LCBGRklfVFlQRV9GTE9BVCwgYXJnMl9kb3VibGVwCiAJbC5zCSRmMTMsIDEqRkZJX1NJWkVPRl9BUkcodDkpCQogCWIJYXJnMl9uZXh0CkBAIC0xMzQsMTAgKzEzMCw4IEBACiAJCiAJU1JMCXQ0LCB0NiwgMipGRklfRkxBR19CSVRTCiAJYW5kCXQ0LCAoKDE8PEZGSV9GTEFHX0JJVFMpLTEpCi0JYm5legl0NCwgYXJnM19mbG9hdHAKIAlSRUdfTAlhMiwgMipGRklfU0laRU9GX0FSRyh0OSkKLQliCWFyZzNfbmV4dAotYXJnM19mbG9hdHA6CisJYmVxegl0NCwgYXJnM19uZXh0CiAJYm5lCXQ0LCBGRklfVFlQRV9GTE9BVCwgYXJnM19kb3VibGVwCiAJbC5zCSRmMTQsIDIqRkZJX1NJWkVPRl9BUkcodDkpCQogCWIJYXJnM19uZXh0CkBAIC0xNDcsMTAgKzE0MSw4IEBACiAJCiAJU1JMCXQ0LCB0NiwgMypGRklfRkxBR19CSVRTCiAJYW5kCXQ0LCAoKDE8PEZGSV9GTEFHX0JJVFMpLTEpCi0JYm5legl0NCwgYXJnNF9mbG9hdHAKIAlSRUdfTAlhMywgMypGRklfU0laRU9GX0FSRyh0OSkKLQliCWFyZzRfbmV4dAotYXJnNF9mbG9hdHA6CisJYmVxegl0NCwgYXJnNF9uZXh0CiAJYm5lCXQ0LCBGRklfVFlQRV9GTE9BVCwgYXJnNF9kb3VibGVwCiAJbC5zCSRmMTUsIDMqRkZJX1NJWkVPRl9BUkcodDkpCQogCWIJYXJnNF9uZXh0CkBAIC0xNjAsMTAgKzE1Miw4IEBACiAJCiAJU1JMCXQ0LCB0NiwgNCpGRklfRkxBR19CSVRTCiAJYW5kCXQ0LCAoKDE8PEZGSV9GTEFHX0JJVFMpLTEpCi0JYm5legl0NCwgYXJnNV9mbG9hdHAKIAlSRUdfTAlhNCwgNCpGRklfU0laRU9GX0FSRyh0OSkKLQliCWFyZzVfbmV4dAotYXJnNV9mbG9hdHA6CisJYmVxegl0NCwgYXJnNV9uZXh0CiAJYm5lCXQ0LCBGRklfVFlQRV9GTE9BVCwgYXJnNV9kb3VibGVwCiAJbC5zCSRmMTYsIDQqRkZJX1NJWkVPRl9BUkcodDkpCQogCWIJYXJnNV9uZXh0CkBAIC0xNzMsMTAgKzE2Myw4IEBACiAJCiAJU1JMCXQ0LCB0NiwgNSpGRklfRkxBR19CSVRTCiAJYW5kCXQ0LCAoKDE8PEZGSV9GTEFHX0JJVFMpLTEpCi0JYm5legl0NCwgYXJnNl9mbG9hdHAKIAlSRUdfTAlhNSwgNSpGRklfU0laRU9GX0FSRyh0OSkKLQliCWFyZzZfbmV4dAotYXJnNl9mbG9hdHA6CisJYmVxegl0NCwgYXJnNl9uZXh0CiAJYm5lCXQ0LCBGRklfVFlQRV9GTE9BVCwgYXJnNl9kb3VibGVwCiAJbC5zCSRmMTcsIDUqRkZJX1NJWkVPRl9BUkcodDkpCQogCWIJYXJnNl9uZXh0CkBAIC0xODYsMTAgKzE3NCw4IEBACiAJCiAJU1JMCXQ0LCB0NiwgNipGRklfRkxBR19CSVRTCiAJYW5kCXQ0LCAoKDE8PEZGSV9GTEFHX0JJVFMpLTEpCi0JYm5legl0NCwgYXJnN19mbG9hdHAKIAlSRUdfTAlhNiwgNipGRklfU0laRU9GX0FSRyh0OSkKLQliCWFyZzdfbmV4dAotYXJnN19mbG9hdHA6CisJYmVxegl0NCwgYXJnN19uZXh0CiAJYm5lCXQ0LCBGRklfVFlQRV9GTE9BVCwgYXJnN19kb3VibGVwCiAJbC5zCSRmMTgsIDYqRkZJX1NJWkVPRl9BUkcodDkpCQogCWIJYXJnN19uZXh0CkBAIC0xOTksMTAgKzE4NSw4IEBACiAJCiAJU1JMCXQ0LCB0NiwgNypGRklfRkxBR19CSVRTCiAJYW5kCXQ0LCAoKDE8PEZGSV9GTEFHX0JJVFMpLTEpCi0JYm5legl0NCwgYXJnOF9mbG9hdHAKIAlSRUdfTAlhNywgNypGRklfU0laRU9GX0FSRyh0OSkKLQliCWFyZzhfbmV4dAotYXJnOF9mbG9hdHA6CisJYmVxegl0NCwgYXJnOF9uZXh0CiAJYm5lCXQ0LCBGRklfVFlQRV9GTE9BVCwgYXJnOF9kb3VibGVwCiAgCWwucwkkZjE5LCA3KkZGSV9TSVpFT0ZfQVJHKHQ5KQkKIAliCWFyZzhfbmV4dApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvbmlvczIvZmZpLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9uaW9zMi9mZmkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWZhMDMzCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvbmlvczIvZmZpLmMKQEAgLTAsMCArMSwzMDQgQEAKKy8qIGxpYmZmaSBzdXBwb3J0IGZvciBBbHRlcmEgTmlvcyBJSS4KKworICAgQ29weXJpZ2h0IChjKSAyMDEzIE1lbnRvciBHcmFwaGljcy4KKworICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisgICBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyAgIGBgU29mdHdhcmUnJyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICAgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICAgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgICBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAgIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAgIAorICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKyAgIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICAgCisgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCisgICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWQorICAgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwKKyAgIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFCisgICBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICovCisKKworI2luY2x1ZGUgPGZmaS5oPgorI2luY2x1ZGUgPGZmaV9jb21tb24uaD4KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisvKiBUaGUgTmlvcyBJSSBQcm9jZXNzb3IgUmVmZXJlbmNlIEhhbmRib29rIGRlZmluZXMgdGhlIHByb2NlZHVyZSBjYWxsCisgICBBQkkgYXMgZm9sbG93cy4KKworICAgQXJndW1lbnRzIGFyZSBwYXNzZWQgYXMgaWYgYSBzdHJ1Y3R1cmUgY29udGFpbmluZyB0aGUgdHlwZXMgb2YKKyAgIHRoZSBhcmd1bWVudHMgd2VyZSBjb25zdHJ1Y3RlZC4gIFRoZSBmaXJzdCAxNiBieXRlcyBhcmUgcGFzc2VkIGluIHI0CisgICB0aHJvdWdoIHI3LCB0aGUgcmVtYWluZGVyIG9uIHRoZSBzdGFjay4gIFRoZSBmaXJzdCAxNiBieXRlcyBvZiBhIGZ1bmN0aW9uCisgICB0YWtpbmcgdmFyaWFibGUgYXJndW1lbnRzIGFyZSBwYXNzZWQgaW4gcjQtcjcgaW4gdGhlIHNhbWUgd2F5LgorCisgICBSZXR1cm4gdmFsdWVzIG9mIHR5cGVzIHVwIHRvIDggYnl0ZXMgYXJlIHJldHVybmVkIGluIHIyIGFuZCByMy4gIEZvcgorICAgcmV0dXJuIHZhbHVlcyBncmVhdGVyIHRoYW4gOCBieXRlcywgdGhlIGNhbGxlciBtdXN0IGFsbG9jYXRlIG1lbW9yeSBmb3IKKyAgIHRoZSByZXN1bHQgYW5kIHBhc3MgdGhlIGFkZHJlc3MgYXMgaWYgaXQgd2VyZSBhcmd1bWVudCAwLiAgCisKKyAgIFdoaWxlIHRoaXMgaXNuJ3Qgc3BlY2lmaWVkIGV4cGxpY2l0bHkgaW4gdGhlIEFCSSBkb2N1bWVudGF0aW9uLCBHQ0MKKyAgIHByb21vdGVzIGludGVncmFsIGFyZ3VtZW50cyBzbWFsbGVyIHRoYW4gaW50IHNpemUgdG8gMzIgYml0cy4KKworICAgQWxzbyBvZiBub3RlLCB0aGUgQUJJIHNwZWNpZmllcyB0aGF0IGFsbCBzdHJ1Y3R1cmUgb2JqZWN0cyBhcmUKKyAgIGFsaWduZWQgdG8gMzIgYml0cyBldmVuIGlmIGFsbCB0aGVpciBmaWVsZHMgaGF2ZSBhIHNtYWxsZXIgbmF0dXJhbAorICAgYWxpZ25tZW50LiAgU2VlIEZGSV9BR0dSRUdBVEVfQUxJR05NRU5ULiAgKi8KKworCisvKiBEZWNsYXJlIHRoZSBhc3NlbWJseSBsYW5ndWFnZSBob29rcy4gICovCisKK2V4dGVybiBVSU5UNjQgZmZpX2NhbGxfc3lzdiAodm9pZCAoKikgKGNoYXIgKiwgZXh0ZW5kZWRfY2lmICopLAorCQkJICAgICBleHRlbmRlZF9jaWYgKiwKKwkJCSAgICAgdW5zaWduZWQsIAorCQkJICAgICB2b2lkICgqZm4pICh2b2lkKSk7CitleHRlcm4gdm9pZCBmZmlfY2xvc3VyZV9zeXN2ICh2b2lkKTsKKworLyogUGVyZm9ybSBtYWNoaW5lLWRlcGVuZGVudCBjaWYgcHJvY2Vzc2luZy4gICovCisKK2ZmaV9zdGF0dXMgZmZpX3ByZXBfY2lmX21hY2hkZXAgKGZmaV9jaWYgKmNpZikKK3sKKyAgLyogV2UgYWx3YXlzIHdhbnQgYXQgbGVhc3QgMTYgYnl0ZXMgaW4gdGhlIHBhcmFtZXRlciBibG9jayBzaW5jZSBpdAorICAgICBzaW1wbGlmaWVzIHRoZSBsb3ctbGV2ZWwgY2FsbCBmdW5jdGlvbi4gIEFsc28gcm91bmQgdGhlIHBhcmFtZXRlcgorICAgICBibG9jayBzaXplIHVwIHRvIGEgbXVsdGlwbGUgb2YgNCBieXRlcyB0byBwcmVzZXJ2ZQorICAgICAzMi1iaXQgYWxpZ25tZW50IG9mIHRoZSBzdGFjayBwb2ludGVyLiAgKi8KKyAgaWYgKGNpZi0+Ynl0ZXMgPCAxNikKKyAgICBjaWYtPmJ5dGVzID0gMTY7CisgIGVsc2UKKyAgICBjaWYtPmJ5dGVzID0gKGNpZi0+Ynl0ZXMgKyAzKSAmIH4zOworCisgIHJldHVybiBGRklfT0s7Cit9CisKKworLyogZmZpX3ByZXBfYXJncyBpcyBjYWxsZWQgYnkgdGhlIGFzc2VtYmx5IHJvdXRpbmUgdG8gdHJhbnNmZXIgYXJndW1lbnRzCisgICB0byB0aGUgc3RhY2sgdXNpbmcgdGhlIHBvaW50ZXJzIGluIHRoZSBlY2lmIGFycmF5LgorICAgTm90ZSB0aGF0IHRoZSBzdGFjayBidWZmZXIgaXMgYmlnIGVub3VnaCB0byBmaXQgYWxsIHRoZSBhcmd1bWVudHMsCisgICBidXQgdGhlIGZpcnN0IDE2IGJ5dGVzIHdpbGwgYmUgY29waWVkIHRvIHJlZ2lzdGVycyBmb3IgdGhlIGFjdHVhbAorICAgY2FsbC4gICovCisKK3ZvaWQgZmZpX3ByZXBfYXJncyAoY2hhciAqc3RhY2ssIGV4dGVuZGVkX2NpZiAqZWNpZikKK3sKKyAgY2hhciAqYXJncCA9IHN0YWNrOworICB1bnNpZ25lZCBpbnQgaTsKKworICAvKiBUaGUgaW1wbGljaXQgcmV0dXJuIHZhbHVlIHBvaW50ZXIgaXMgcGFzc2VkIGFzIGlmIGl0IHdlcmUgYSBoaWRkZW4KKyAgICAgZmlyc3QgYXJndW1lbnQuICAqLworICBpZiAoZWNpZi0+Y2lmLT5ydHlwZS0+dHlwZSA9PSBGRklfVFlQRV9TVFJVQ1QKKyAgICAgICYmIGVjaWYtPmNpZi0+cnR5cGUtPnNpemUgPiA4KQorICAgIHsKKyAgICAgICgqKHZvaWQgKiopIGFyZ3ApID0gZWNpZi0+cnZhbHVlOworICAgICAgYXJncCArPSA0OworICAgIH0KKworICBmb3IgKGkgPSAwOyBpIDwgZWNpZi0+Y2lmLT5uYXJnczsgaSsrKQorICAgIHsKKyAgICAgIHZvaWQgKmF2YWx1ZSA9IGVjaWYtPmF2YWx1ZVtpXTsKKyAgICAgIGZmaV90eXBlICphdHlwZSA9IGVjaWYtPmNpZi0+YXJnX3R5cGVzW2ldOworICAgICAgc2l6ZV90IHNpemUgPSBhdHlwZS0+c2l6ZTsKKyAgICAgIHNpemVfdCBhbGlnbm1lbnQgPSBhdHlwZS0+YWxpZ25tZW50OworCisgICAgICAvKiBBbGlnbiBhcmdwIGFzIGFwcHJvcHJpYXRlIGZvciB0aGUgYXJndW1lbnQgdHlwZS4gICovCisgICAgICBpZiAoKGFsaWdubWVudCAtIDEpICYgKHVuc2lnbmVkKSBhcmdwKQorCWFyZ3AgPSAoY2hhciAqKSBBTElHTiAoYXJncCwgYWxpZ25tZW50KTsKKworICAgICAgLyogQ29weSB0aGUgYXJndW1lbnQsIHByb21vdGluZyBpbnRlZ3JhbCB0eXBlcyBzbWFsbGVyIHRoYW4gYQorCSB3b3JkIHRvIHdvcmQgc2l6ZS4gICovCisgICAgICBpZiAoc2l6ZSA8IHNpemVvZiAoaW50KSkKKwl7CisJICBzaXplID0gc2l6ZW9mIChpbnQpOworCSAgc3dpdGNoIChhdHlwZS0+dHlwZSkKKwkgICAgeworCSAgICBjYXNlIEZGSV9UWVBFX1NJTlQ4OgorCSAgICAgICooc2lnbmVkIGludCAqKSBhcmdwID0gKHNpZ25lZCBpbnQpICooU0lOVDggKikgYXZhbHVlOworCSAgICAgIGJyZWFrOworCQkgIAorCSAgICBjYXNlIEZGSV9UWVBFX1VJTlQ4OgorCSAgICAgICoodW5zaWduZWQgaW50ICopIGFyZ3AgPSAodW5zaWduZWQgaW50KSAqKFVJTlQ4ICopIGF2YWx1ZTsKKwkgICAgICBicmVhazsKKwkJICAKKwkgICAgY2FzZSBGRklfVFlQRV9TSU5UMTY6CisJICAgICAgKihzaWduZWQgaW50ICopIGFyZ3AgPSAoc2lnbmVkIGludCkgKihTSU5UMTYgKikgYXZhbHVlOworCSAgICAgIGJyZWFrOworCQkgIAorCSAgICBjYXNlIEZGSV9UWVBFX1VJTlQxNjoKKwkgICAgICAqKHVuc2lnbmVkIGludCAqKSBhcmdwID0gKHVuc2lnbmVkIGludCkgKihVSU5UMTYgKikgYXZhbHVlOworCSAgICAgIGJyZWFrOworCisJICAgIGNhc2UgRkZJX1RZUEVfU1RSVUNUOgorCSAgICAgIG1lbWNweSAoYXJncCwgYXZhbHVlLCBhdHlwZS0+c2l6ZSk7CisJICAgICAgYnJlYWs7CisKKwkgICAgZGVmYXVsdDoKKwkgICAgICBGRklfQVNTRVJUKDApOworCSAgICB9CisJfQorICAgICAgZWxzZSBpZiAoc2l6ZSA9PSBzaXplb2YgKGludCkpCisJKih1bnNpZ25lZCBpbnQgKikgYXJncCA9ICh1bnNpZ25lZCBpbnQpICooVUlOVDMyICopIGF2YWx1ZTsKKyAgICAgIGVsc2UKKwltZW1jcHkgKGFyZ3AsIGF2YWx1ZSwgc2l6ZSk7CisgICAgICBhcmdwICs9IHNpemU7CisgICAgfQorfQorCisKKy8qIENhbGwgRk4gdXNpbmcgdGhlIHByZXBhcmVkIENJRi4gIFJWQUxVRSBwb2ludHMgdG8gc3BhY2UgYWxsb2NhdGVkIGJ5CisgICB0aGUgY2FsbGVyIGZvciB0aGUgcmV0dXJuIHZhbHVlLCBhbmQgQVZBTFVFIGlzIGFuIGFycmF5IG9mIGFyZ3VtZW50CisgICBwb2ludGVycy4gICovCisKK3ZvaWQgZmZpX2NhbGwgKGZmaV9jaWYgKmNpZiwgdm9pZCAoKmZuKSAodm9pZCksIHZvaWQgKnJ2YWx1ZSwgdm9pZCAqKmF2YWx1ZSkKK3sKKworICBleHRlbmRlZF9jaWYgZWNpZjsKKyAgVUlOVDY0IHJlc3VsdDsKKworICAvKiBJZiBiaWdyZXQgaXMgdHJ1ZSwgdGhpcyBpcyB0aGUgY2FzZSB3aGVyZSBhIHJldHVybiB2YWx1ZSBvZiBsYXJnZXIKKyAgICAgdGhhbiA4IGJ5dGVzIGlzIGhhbmRsZWQgYnkgYmVpbmcgcGFzc2VkIGJ5IHJlZmVyZW5jZSBhcyBhbiBpbXBsaWNpdAorICAgICBhcmd1bWVudC4gICovCisgIGludCBiaWdyZXQgPSAoY2lmLT5ydHlwZS0+dHlwZSA9PSBGRklfVFlQRV9TVFJVQ1QKKwkJJiYgY2lmLT5ydHlwZS0+c2l6ZSA+IDgpOworCisgIGVjaWYuY2lmID0gY2lmOworICBlY2lmLmF2YWx1ZSA9IGF2YWx1ZTsKKworICAvKiBBbGxvY2F0ZSBzcGFjZSBmb3IgcmV0dXJuIHZhbHVlIGlmIHRoaXMgaXMgdGhlIHBhc3MtYnktcmVmZXJlbmNlIGNhc2UKKyAgICAgYW5kIHRoZSBjYWxsZXIgZGlkIG5vdCBwcm92aWRlIGEgYnVmZmVyLiAgKi8KKyAgaWYgKHJ2YWx1ZSA9PSBOVUxMICYmIGJpZ3JldCkKKyAgICBlY2lmLnJ2YWx1ZSA9IGFsbG9jYSAoY2lmLT5ydHlwZS0+c2l6ZSk7CisgIGVsc2UKKyAgICBlY2lmLnJ2YWx1ZSA9IHJ2YWx1ZTsKKworICByZXN1bHQgPSBmZmlfY2FsbF9zeXN2IChmZmlfcHJlcF9hcmdzLCAmZWNpZiwgY2lmLT5ieXRlcywgZm4pOworCisgIC8qIE5vdyByZXN1bHQgY29udGFpbnMgdGhlIDY0IGJpdCBjb250ZW50cyByZXR1cm5lZCBmcm9tIGZuIGluCisgICAgIHIyIGFuZCByMy4gIENvcHkgdGhlIHZhbHVlIG9mIHRoZSBhcHByb3ByaWF0ZSBzaXplIHRvIHRoZSB1c2VyLXByb3ZpZGVkCisgICAgIHJ2YWx1ZSBidWZmZXIuICAqLworICBpZiAocnZhbHVlICYmICFiaWdyZXQpCisgICAgc3dpdGNoIChjaWYtPnJ0eXBlLT5zaXplKQorICAgICAgeworICAgICAgY2FzZSAxOgorCSooVUlOVDggKilydmFsdWUgPSAoVUlOVDgpIHJlc3VsdDsKKwlicmVhazsKKyAgICAgIGNhc2UgMjoKKwkqKFVJTlQxNiAqKXJ2YWx1ZSA9IChVSU5UMTYpIHJlc3VsdDsKKwlicmVhazsKKyAgICAgIGNhc2UgNDoKKwkqKFVJTlQzMiAqKXJ2YWx1ZSA9IChVSU5UMzIpIHJlc3VsdDsKKwlicmVhazsKKyAgICAgIGNhc2UgODoKKwkqKFVJTlQ2NCAqKXJ2YWx1ZSA9IChVSU5UNjQpIHJlc3VsdDsKKwlicmVhazsKKyAgICAgIGRlZmF1bHQ6CisJbWVtY3B5IChydmFsdWUsICh2b2lkICopJnJlc3VsdCwgY2lmLT5ydHlwZS0+c2l6ZSk7CisJYnJlYWs7CisgICAgICB9Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gaXMgaW52b2tlZCBmcm9tIHRoZSBjbG9zdXJlIHRyYW1wb2xpbmUgdG8gaW52b2tlCisgICBDTE9TVVJFIHdpdGggYXJndW1lbnQgYmxvY2sgQVJHUy4gIFBhcnNlIEFSR1MgYWNjb3JkaW5nIHRvCisgICBDTE9TVVJFLT5jZmkgYW5kIGludm9rZSBDTE9TVVJFLT5mdW4uICAqLworCitzdGF0aWMgVUlOVDY0CitmZmlfY2xvc3VyZV9oZWxwZXIgKHVuc2lnbmVkIGNoYXIgKmFyZ3MsCisJCSAgICBmZmlfY2xvc3VyZSAqY2xvc3VyZSkKK3sKKyAgZmZpX2NpZiAqY2lmID0gY2xvc3VyZS0+Y2lmOworICB1bnNpZ25lZCBjaGFyICphcmdwID0gYXJnczsKKyAgdm9pZCAqKnBhcnNlZF9hcmdzID0gYWxsb2NhIChjaWYtPm5hcmdzICogc2l6ZW9mICh2b2lkICopKTsKKyAgVUlOVDY0IHJlc3VsdDsKKyAgdm9pZCAqcmV0cHRyOworICB1bnNpZ25lZCBpbnQgaTsKKworICAvKiBGaXJzdCBmaWd1cmUgb3V0IHdoYXQgdG8gZG8gYWJvdXQgdGhlIHJldHVybiB0eXBlLiAgSWYgdGhpcyBpcyB0aGUKKyAgICAgYmlnLXN0cnVjdHVyZS1yZXR1cm4gY2FzZSwgdGhlIGZpcnN0IGFyZyBpcyB0aGUgaGlkZGVuIHJldHVybiBidWZmZXIKKyAgICAgYWxsb2NhdGVkIGJ5IHRoZSBjYWxsZXIuICAqLworICBpZiAoY2lmLT5ydHlwZS0+dHlwZSA9PSBGRklfVFlQRV9TVFJVQ1QKKyAgICAgICYmIGNpZi0+cnR5cGUtPnNpemUgPiA4KQorICAgIHsKKyAgICAgIHJldHB0ciA9ICooKHZvaWQgKiopIGFyZ3ApOworICAgICAgYXJncCArPSA0OworICAgIH0KKyAgZWxzZQorICAgIHJldHB0ciA9ICh2b2lkICopICZyZXN1bHQ7CisKKyAgLyogRmlsbCBpbiB0aGUgYXJyYXkgb2YgYXJndW1lbnQgcG9pbnRlcnMuICAqLworICBmb3IgKGkgPSAwOyBpIDwgY2lmLT5uYXJnczsgaSsrKQorICAgIHsKKyAgICAgIHNpemVfdCBzaXplID0gY2lmLT5hcmdfdHlwZXNbaV0tPnNpemU7CisgICAgICBzaXplX3QgYWxpZ25tZW50ID0gY2lmLT5hcmdfdHlwZXNbaV0tPmFsaWdubWVudDsKKworICAgICAgLyogQWxpZ24gYXJncCBhcyBhcHByb3ByaWF0ZSBmb3IgdGhlIGFyZ3VtZW50IHR5cGUuICAqLworICAgICAgaWYgKChhbGlnbm1lbnQgLSAxKSAmICh1bnNpZ25lZCkgYXJncCkKKwlhcmdwID0gKGNoYXIgKikgQUxJR04gKGFyZ3AsIGFsaWdubWVudCk7CisKKyAgICAgIC8qIEFyZ3VtZW50cyBzbWFsbGVyIHRoYW4gYW4gaW50IGFyZSBwcm9tb3RlZCB0byBpbnQuICAqLworICAgICAgaWYgKHNpemUgPCBzaXplb2YgKGludCkpCisJc2l6ZSA9IHNpemVvZiAoaW50KTsKKworICAgICAgLyogU3RvcmUgdGhlIHBvaW50ZXIuICAqLworICAgICAgcGFyc2VkX2FyZ3NbaV0gPSBhcmdwOworICAgICAgYXJncCArPSBzaXplOworICAgIH0KKworICAvKiBDYWxsIHRoZSB1c2VyLXN1cHBsaWVkIGZ1bmN0aW9uLiAgKi8KKyAgKGNsb3N1cmUtPmZ1bikgKGNpZiwgcmV0cHRyLCBwYXJzZWRfYXJncywgY2xvc3VyZS0+dXNlcl9kYXRhKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworCisvKiBJbml0aWFsaXplIENMT1NVUkUgd2l0aCBhIHRyYW1wb2xpbmUgdG8gY2FsbCBGVU4gd2l0aAorICAgQ0lGIGFuZCBVU0VSX0RBVEEuICAqLworZmZpX3N0YXR1cworZmZpX3ByZXBfY2xvc3VyZV9sb2MgKGZmaV9jbG9zdXJlKiBjbG9zdXJlLAorCQkgICAgICBmZmlfY2lmKiBjaWYsCisJCSAgICAgIHZvaWQgKCpmdW4pIChmZmlfY2lmKiwgdm9pZCosIHZvaWQqKiwgdm9pZCopLAorCQkgICAgICB2b2lkICp1c2VyX2RhdGEsCisJCSAgICAgIHZvaWQgKmNvZGVsb2MpCit7CisgIHVuc2lnbmVkIGludCAqdHJhbXAgPSAodW5zaWduZWQgaW50ICopICZjbG9zdXJlLT50cmFtcFswXTsKKyAgaW50IGk7CisKKyAgaWYgKGNpZi0+YWJpICE9IEZGSV9TWVNWKQorICAgIHJldHVybiBGRklfQkFEX0FCSTsKKworICAvKiBUaGUgdHJhbXBvbGluZSBsb29rcyBsaWtlOgorICAgICAgIG1vdmhpIHI4LCAlaGkoZmZpX2Nsb3N1cmVfc3lzdikKKyAgICAgICBvcmkgcjgsIHI4LCAlbG8oZmZpX2Nsb3N1cmVfc3lzdikKKyAgICAgICBtb3ZoaSByOSwgJWhpKGZmaV9jbG9zdXJlX2hlbHBlcikKKyAgICAgICBvcmkgcjAsIHI5LCAlbG8oZmZpX2Nsb3N1cmVfaGVscGVyKQorICAgICAgIG1vdmhpIHIxMCwgJWhpKGNsb3N1cmUpCisgICAgICAgb3JpIHIxMCwgcjEwLCAlbG8oY2xvc3VyZSkKKyAgICAgICBqbXAgcjgKKyAgICAgYW5kIHRoZW4gZmZpX2Nsb3N1cmVfc3lzdiByZXRyaWV2ZXMgdGhlIGNsb3N1cmUgcG9pbnRlciBvdXQgb2YgcjEwCisgICAgIGluIGFkZGl0aW9uIHRvIHRoZSBhcmd1bWVudHMgcGFzc2VkIGluIHRoZSBub3JtYWwgd2F5IGZvciB0aGUgY2FsbCwKKyAgICAgYW5kIGludm9rZXMgZmZpX2Nsb3N1cmVfaGVscGVyLiAgV2UgZW5jb2RlIHRoZSBwb2ludGVyIHRvCisgICAgIGZmaV9jbG9zdXJlX2hlbHBlciBpbiB0aGUgdHJhbXBvbGluZSBiZWNhdXNlIG1ha2luZyBhIFBJQyBjYWxsCisgICAgIHRvIGl0IGluIGZmaV9jbG9zdXJlX3N5c3Ygd291bGQgYmUgbWVzc3kgKGl0IHdvdWxkIGhhdmUgdG8gaW5kaXJlY3QKKyAgICAgdGhyb3VnaCB0aGUgR09UKS4gICovCisKKyNkZWZpbmUgSEkoeCkgKCgoKHVuc2lnbmVkIGludCkgKHgpKSA+PiAxNikgJiAweGZmZmYpCisjZGVmaW5lIExPKHgpICgoKHVuc2lnbmVkIGludCkgKHgpKSAmIDB4ZmZmZikKKyAgdHJhbXBbMF0gPSAoMCA8PCAyNykgfCAoOCA8PCAyMikgfCAoSEkgKGZmaV9jbG9zdXJlX3N5c3YpIDw8IDYpIHwgMHgzNDsKKyAgdHJhbXBbMV0gPSAoOCA8PCAyNykgfCAoOCA8PCAyMikgfCAoTE8gKGZmaV9jbG9zdXJlX3N5c3YpIDw8IDYpIHwgMHgxNDsKKyAgdHJhbXBbMl0gPSAoMCA8PCAyNykgfCAoOSA8PCAyMikgfCAoSEkgKGZmaV9jbG9zdXJlX2hlbHBlcikgPDwgNikgfCAweDM0OworICB0cmFtcFszXSA9ICg5IDw8IDI3KSB8ICg5IDw8IDIyKSB8IChMTyAoZmZpX2Nsb3N1cmVfaGVscGVyKSA8PCA2KSB8IDB4MTQ7CisgIHRyYW1wWzRdID0gKDAgPDwgMjcpIHwgKDEwIDw8IDIyKSB8IChISSAoY2xvc3VyZSkgPDwgNikgfCAweDM0OworICB0cmFtcFs1XSA9ICgxMCA8PCAyNykgfCAoMTAgPDwgMjIpIHwgKExPIChjbG9zdXJlKSA8PCA2KSB8IDB4MTQ7CisgIHRyYW1wWzZdID0gKDggPDwgMjcpIHwgKDB4MGQgPDwgMTEpIHwgMHgzYTsKKyN1bmRlZiBISQorI3VuZGVmIExPCisKKyAgLyogRmx1c2ggdGhlIGNhY2hlcy4KKyAgICAgU2VlIEV4YW1wbGUgOS00IGluIHRoZSBOaW9zIElJIFNvZnR3YXJlIERldmVsb3BlcidzIEhhbmRib29rLiAgKi8KKyAgZm9yIChpID0gMDsgaSA8IDc7IGkrKykKKyAgICBhc20gdm9sYXRpbGUgKCJmbHVzaGQgMCglMCk7IGZsdXNoaSAlMCIgOjogInIiKHRyYW1wICsgaSkgOiAibWVtb3J5Iik7CisgIGFzbSB2b2xhdGlsZSAoImZsdXNocCIgOjo6ICJtZW1vcnkiKTsKKworICBjbG9zdXJlLT5jaWYgPSBjaWY7CisgIGNsb3N1cmUtPmZ1biA9IGZ1bjsKKyAgY2xvc3VyZS0+dXNlcl9kYXRhID0gdXNlcl9kYXRhOworCisgIHJldHVybiBGRklfT0s7Cit9CisKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL25pb3MyL2ZmaXRhcmdldC5oIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvbmlvczIvZmZpdGFyZ2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTM0ZDExOAotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL25pb3MyL2ZmaXRhcmdldC5oCkBAIC0wLDAgKzEsNTIgQEAKKy8qIGxpYmZmaSB0YXJnZXQgaW5jbHVkZXMgZm9yIEFsdGVyYSBOaW9zIElJLgorCisgICBDb3B5cmlnaHQgKGMpIDIwMTMgTWVudG9yIEdyYXBoaWNzLgorCisgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKyAgIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICAgYGBTb2Z0d2FyZScnKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisgICB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisgICBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKyAgIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworICAgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICAgCisgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorICAgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgICAKKyAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAgIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KKyAgIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZCisgICBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULAorICAgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUKKyAgIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgKi8KKworCisjaWZuZGVmIExJQkZGSV9UQVJHRVRfSAorI2RlZmluZSBMSUJGRklfVEFSR0VUX0gKKworI2lmbmRlZiBMSUJGRklfSAorI2Vycm9yICJQbGVhc2UgZG8gbm90IGluY2x1ZGUgZmZpdGFyZ2V0LmggZGlyZWN0bHkgaW50byB5b3VyIHNvdXJjZS4gIFVzZSBmZmkuaCBpbnN0ZWFkLiIKKyNlbmRpZgorCisjaWZuZGVmIExJQkZGSV9BU00KK3R5cGVkZWYgdW5zaWduZWQgbG9uZyAgICAgICAgICBmZmlfYXJnOwordHlwZWRlZiBzaWduZWQgbG9uZyAgICAgICAgICAgIGZmaV9zYXJnOworCit0eXBlZGVmIGVudW0gZmZpX2FiaSB7CisgIEZGSV9GSVJTVF9BQkkgPSAwLAorICBGRklfU1lTViwKKyAgRkZJX0xBU1RfQUJJLAorICBGRklfREVGQVVMVF9BQkkgPSBGRklfU1lTVgorfSBmZmlfYWJpOworI2VuZGlmCisKKy8qIFN0cnVjdHVyZXMgaGF2ZSBhIDQtYnl0ZSBhbGlnbm1lbnQgZXZlbiBpZiBhbGwgdGhlIGZpZWxkcyBoYXZlIGxlc3NlcgorICAgYWxpZ25tZW50IHJlcXVpcmVtZW50cy4gICovCisjZGVmaW5lIEZGSV9BR0dSRUdBVEVfQUxJR05NRU5UIDQKKworI2RlZmluZSBGRklfQ0xPU1VSRVMgMQorI2RlZmluZSBGRklfVFJBTVBPTElORV9TSVpFIDI4ICAgLyogNyBpbnN0cnVjdGlvbnMgKi8KKyNkZWZpbmUgRkZJX05BVElWRV9SQVdfQVBJIDAKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9uaW9zMi9zeXN2LlMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9uaW9zMi9zeXN2LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzVmNDQyYgotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL25pb3MyL3N5c3YuUwpAQCAtMCwwICsxLDEzNiBAQAorLyogTG93LWxldmVsIGxpYmZmaSBzdXBwb3J0IGZvciBBbHRlcmEgTmlvcyBJSS4KKworICAgQ29weXJpZ2h0IChjKSAyMDEzIE1lbnRvciBHcmFwaGljcy4KKworICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisgICBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyAgIGBgU29mdHdhcmUnJyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICAgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICAgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgICBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAgIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAgIAorICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKyAgIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICAgCisgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCisgICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWQorICAgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwKKyAgIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFCisgICBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICovCisKKy8qIFRoaXMgZnVuY3Rpb24gaXMgZGVjbGFyZWQgb24gdGhlIEMgc2lkZSBhcyAKKworICAgZXh0ZXJuIFVJTlQ2NCBmZmlfY2FsbF9zeXN2ICh2b2lkICgqYXJnaG9vaykgKGNoYXIgKiwgZXh0ZW5kZWRfY2lmICopLAorCSAgCQkgICAgICAgIGV4dGVuZGVkX2NpZiAqZWNpZiwKKwkJCQl1bnNpZ25lZCBuYnl0ZXMsIAorCQkJCXZvaWQgKCpmbikgKHZvaWQpKTsKKwkKKyAgIE9uIGlucHV0LCB0aGUgYXJndW1lbnRzIGFwcGVhciBhcworCXI0ID0gYXJnaG9vaworCXI1ID0gZWNpZgorCXI2ID0gbmJ5dGVzCisJcjcgPSBmbgorKi8KKworCS5zZWN0aW9uCS50ZXh0CisJLmFsaWduCTIKKwkuZ2xvYmFsCWZmaV9jYWxsX3N5c3YKKwkudHlwZQlmZmlfY2FsbF9zeXN2LCBAZnVuY3Rpb24KKworZmZpX2NhbGxfc3lzdjoKKwkuY2ZpX3N0YXJ0cHJvYworCisJLyogQ3JlYXRlIHRoZSBzdGFjayBmcmFtZSwgc2F2aW5nIHIxNiBzbyB3ZSBjYW4gdXNlIGl0IGxvY2FsbHkuICAqLworCWFkZGkJc3AsIHNwLCAtMTIKKwkuY2ZpX2RlZl9jZmFfb2Zmc2V0IDEyCisJc3R3CXJhLCA4KHNwKQorCXN0dwlmcCwgNChzcCkKKwlzdHcJcjE2LCAwKHNwKQorCS5jZmlfb2Zmc2V0IDMxLCAtNAorCS5jZmlfb2Zmc2V0IDI4LCAtOAorCS5jZmlfb2Zmc2V0IDE2LCAtMTIKKwltb3YJZnAsIHNwCisJLmNmaV9kZWZfY2ZhX3JlZ2lzdGVyIDI4CisJbW92CXIxNiwgcjcKKworCS8qIEFkanVzdCB0aGUgc3RhY2sgcG9pbnRlciB0byBjcmVhdGUgdGhlIGFyZ3VtZW50IGJ1ZmZlcgorCSAgIG5ieXRlcyBsb25nLiAgKi8KKwlzdWIJc3AsIHNwLCByNgorCisJLyogQ2FsbCB0aGUgYXJnaG9vayBmdW5jdGlvbi4gICovCisJbW92CXIyLCByNAkJLyogZm4gKi8KKwltb3YJcjQsIHNwCQkvKiBhcmdidWZmZXIgKi8KKwljYWxscglyMgkJLyogcjUgYWxyZWFkeSBjb250YWlucyBlY2lmICovCisKKwkvKiBQb3Agb2ZmIHRoZSBmaXJzdCAxNiBieXRlcyBvZiB0aGUgYXJndW1lbnQgYnVmZmVyIG9uIHRoZSBzdGFjaywKKwkgICB0cmFuc2ZlcnJpbmcgdGhlIGNvbnRlbnRzIHRvIHRoZSBhcmd1bWVudCByZWdpc3RlcnMuICAqLworCWxkdwlyNCwgMChzcCkKKwlsZHcJcjUsIDQoc3ApCisJbGR3CXI2LCA4KHNwKQorCWxkdwlyNywgMTIoc3ApCisJYWRkaQlzcCwgc3AsIDE2CisKKwkvKiBDYWxsIHRoZSB1c2VyIGZ1bmN0aW9uLCB3aGljaCBsZWF2ZXMgaXRzIHJlc3VsdCBpbiByMiBhbmQgcjMuICAqLworCWNhbGxyCXIxNgorCisJLyogUG9wIG9mZiB0aGUgc3RhY2sgZnJhbWUuICAqLworCW1vdglzcCwgZnAKKwlsZHcJcmEsIDgoc3ApCisJbGR3CWZwLCA0KHNwKQorCWxkdwlyMTYsIDAoc3ApCisJYWRkaQlzcCwgc3AsIDEyCisJcmV0CisJLmNmaV9lbmRwcm9jCisJLnNpemUJZmZpX2NhbGxfc3lzdiwgLi1mZmlfY2FsbF9zeXN2CisKKworLyogQ2xvc3VyZSB0cmFtcG9saW5lcyBqdW1wIGhlcmUgYWZ0ZXIgcHV0dGluZyB0aGUgQyBoZWxwZXIgYWRkcmVzcworICAgaW4gcjkgYW5kIHRoZSBjbG9zdXJlIHBvaW50ZXIgaW4gcjEwLiAgVGhlIHVzZXItc3VwcGxpZWQgYXJndW1lbnRzCisgICB0byB0aGUgY2xvc3VyZSBhcmUgaW4gdGhlIG5vcm1hbCBwbGFjZXMsIGluIHI0LXI3IGFuZCBvbiB0aGUKKyAgIHN0YWNrLiAgUHVzaCB0aGUgcmVnaXN0ZXIgYXJndW1lbnRzIG9uIHRoZSBzdGFjayB0b28gYW5kIHRoZW4gY2FsbCB0aGUKKyAgIEMgaGVscGVyIGZ1bmN0aW9uIHRvIGRlYWwgd2l0aCB0aGVtLiAgKi8KKyAgIAorCS5zZWN0aW9uCS50ZXh0CisJLmFsaWduCTIKKwkuZ2xvYmFsCWZmaV9jbG9zdXJlX3N5c3YKKwkudHlwZQlmZmlfY2xvc3VyZV9zeXN2LCBAZnVuY3Rpb24KKworZmZpX2Nsb3N1cmVfc3lzdjoKKwkuY2ZpX3N0YXJ0cHJvYworCisJLyogQ3JlYXRlIHRoZSBzdGFjayBmcmFtZSwgcHVzaGluZyB0aGUgcmVnaXN0ZXIgYXJncyBvbiB0aGUgc3RhY2sKKwkgICBqdXN0IGJlbG93IHRoZSBzdGFjayBhcmdzLiAgVGhpcyBpcyB0aGUgc2FtZSB0cmljayBpbGx1c3RyYXRlZAorCSAgIGluIEZpZ3VyZSA3LTMgaW4gdGhlIE5pb3MgSUkgUHJvY2Vzc29yIFJlZmVyZW5jZSBIYW5kYm9vaywgdXNlZAorCSAgIGZvciB2YXJpYWJsZSBhcmd1bWVudHMgYW5kIHN0cnVjdHVyZXMgcGFzc2VkIGJ5IHZhbHVlLiAgKi8KKwlhZGRpCXNwLCBzcCwgLTIwCisJLmNmaV9kZWZfY2ZhX29mZnNldCAyMAorCXN0dwlyYSwgMChzcCkKKwkuY2ZpX29mZnNldCAzMSwgLTIwCisJc3R3CXI0LCA0KHNwKQorCS5jZmlfb2Zmc2V0IDQsIC0xNgorCXN0dwlyNSwgOChzcCkKKwkuY2ZpX29mZnNldCA1LCAtMTIKKwlzdHcJcjYsIDEyKHNwKQorCS5jZmlfb2Zmc2V0IDYsIC04CisJc3R3CXI3LCAxNihzcCkKKwkuY2ZpX29mZnNldCA3LCAtNAorCisJLyogQ2FsbCB0aGUgaGVscGVyLgorCSAgIHI0ID0gcG9pbnRlciB0byBhcmd1bWVudHMgb24gc3RhY2sKKwkgICByNSA9IGNsb3N1cmUgcG9pbnRlciAobG9hZGVkIGluIHIxMCBieSB0aGUgdHJhbXBvbGluZSkKKwkgICByOSA9IGFkZHJlc3Mgb2YgaGVscGVyIGZ1bmN0aW9uIChsb2FkZWQgYnkgdHJhbXBvbGluZSkgKi8KKwlhZGRpCXI0LCBzcCwgNAorCW1vdglyNSwgcjEwCisJY2FsbHIJcjkKKwkKKwkvKiBQb3AgdGhlIHN0YWNrIGFuZCByZXR1cm4uICAqLworCWxkdwlyYSwgMChzcCkKKwlhZGRpCXNwLCBzcCwgMjAKKwkuY2ZpX2RlZl9jZmFfb2Zmc2V0IC0yMAorCXJldAorCS5jZmlfZW5kcHJvYworCS5zaXplCWZmaV9jbG9zdXJlX3N5c3YsIC4tZmZpX2Nsb3N1cmVfc3lzdgorCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9wb3dlcnBjL2Rhcndpbi5TIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvcG93ZXJwYy9kYXJ3aW4uUwppbmRleCA0Zjk4N2RjLi4wNjZlYjgyIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9wb3dlcnBjL2Rhcndpbi5TCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3Bvd2VycGMvZGFyd2luLlMKQEAgLTMxOCwxMSArMzE4LDYgQEAKIAogI2RlZmluZSBFSF9EQVRBX0FMSUdOX0ZBQ1QgTU9ERV9DSE9JQ0UoMHg3YywweDc4KQogCi0JLnN0YXRpY19kYXRhCi0JLmFsaWduIExPRzJfR1BSX0JZVEVTCi1MTEZCMCRub25fbGF6eV9wdHI6Ci0JLmdfbG9uZyBMc3RhcnRjb2RlCi0KIAkuc2VjdGlvbiBfX1RFWFQsX19laF9mcmFtZSxjb2FsZXNjZWQsbm9fdG9jK3N0cmlwX3N0YXRpY19zeW1zK2xpdmVfc3VwcG9ydAogRUhfZnJhbWUxOgogCS5zZXQJTCRzZXQkMCxMRUNJRTEtTFNDSUUxCkBAIC0zMzUsNyArMzMwLDcgQEAKIAkuYnl0ZQlFSF9EQVRBX0FMSUdOX0ZBQ1QgOyBzbGViMTI4IC00OyBDSUUgRGF0YSBBbGlnbm1lbnQgRmFjdG9yCiAJLmJ5dGUJMHg0MQk7IENJRSBSQSBDb2x1bW4KIAkuYnl0ZQkweDEJOyB1bGViMTI4IDB4MTsgQXVnbWVudGF0aW9uIHNpemUKLQkuYnl0ZQkweDEwCTsgRkRFIEVuY29kaW5nIChpbmRpcmVjdCBwY3JlbCkKKwkuYnl0ZQkweDEwCTsgRkRFIEVuY29kaW5nIChwY3JlbCkKIAkuYnl0ZQkweGMJOyBEV19DRkFfZGVmX2NmYQogCS5ieXRlCTB4MQk7IHVsZWIxMjggMHgxCiAJLmJ5dGUJMHgwCTsgdWxlYjEyOCAweDAKQEAgLTM0OSw3ICszNDQsNyBAQAogCS5sb25nCUwkc2V0JDEJOyBGREUgTGVuZ3RoCiBMQVNGREUxOgogCS5sb25nCUxBU0ZERTEtRUhfZnJhbWUxIDsgRkRFIENJRSBvZmZzZXQKLQkuZ19sb25nCUxMRkIwJG5vbl9sYXp5X3B0ci0uCTsgRkRFIGluaXRpYWwgbG9jYXRpb24KKwkuZ19sb25nCUxzdGFydGNvZGUtLgk7IEZERSBpbml0aWFsIGxvY2F0aW9uCiAJLnNldAlMJHNldCQzLExGRTEtTHN0YXJ0Y29kZQogCS5nX2xvbmcJTCRzZXQkMwk7IEZERSBhZGRyZXNzIHJhbmdlCiAJLmJ5dGUgICAweDAgICAgIDsgdWxlYjEyOCAweDA7IEF1Z21lbnRhdGlvbiBzaXplCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9wb3dlcnBjL2Rhcndpbl9jbG9zdXJlLlMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9wb3dlcnBjL2Rhcndpbl9jbG9zdXJlLlMKaW5kZXggM2Y2NzkwZi4uYzc3MzRkNCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvcG93ZXJwYy9kYXJ3aW5fY2xvc3VyZS5TCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3Bvd2VycGMvZGFyd2luX2Nsb3N1cmUuUwpAQCAtMTkyLDcgKzE5Miw3IEBACiAJbGcJcjAsMChyMykJCTsgc2l6ZSA9PiByMAogCWxoeglyMyxGRklfVFlQRV9UWVBFKHIzKQk7IHR5cGUgPT4gcjMKIAotCS8qIFRoZSBoZWxwZXIgd2lsbCBoYXZlIGludGVyY2VwdGVkIHN0cnV0dXJlIHJldHVybnMgYW5kIGluc2VydGVkCisJLyogVGhlIGhlbHBlciB3aWxsIGhhdmUgaW50ZXJjZXB0ZWQgc3RydWN0dXJlIHJldHVybnMgYW5kIGluc2VydGVkCiAJICAgdGhlIGNhbGxlcmBzIGRlc3RpbmF0aW9uIGFkZHJlc3MgZm9yIHN0cnVjdHMgcmV0dXJuZWQgYnkgcmVmLiAgKi8KIAogCS8qIHIzIGNvbnRhaW5zIHRoZSByZXR1cm4gdHlwZSAgc28gdXNlIGl0IHRvIGxvb2sgdXAgaW4gYSB0YWJsZQpAQCAtNDY3LDExICs0NjcsNiBAQAogI2RlZmluZSBFSF9GUkFNRV9PRkZTRVRBIE1PREVfQ0hPSUNFKDE3NiwweDkwKQogI2RlZmluZSBFSF9GUkFNRV9PRkZTRVRCIE1PREVfQ0hPSUNFKDEsMykKIAotCS5zdGF0aWNfZGF0YQotCS5hbGlnbiBMT0cyX0dQUl9CWVRFUwotTExGQjEkbm9uX2xhenlfcHRyOgotCS5nX2xvbmcgTHN0YXJ0Y29kZQotCiAJLnNlY3Rpb24gX19URVhULF9fZWhfZnJhbWUsY29hbGVzY2VkLG5vX3RvYytzdHJpcF9zdGF0aWNfc3ltcytsaXZlX3N1cHBvcnQKIEVIX2ZyYW1lMToKIAkuc2V0CUwkc2V0JDAsTEVDSUUxLUxTQ0lFMQpAQCAtNDg0LDcgKzQ3OSw3IEBACiAJLmJ5dGUJRUhfREFUQV9BTElHTl9GQUNUIDsgc2xlYjEyOCAtNDsgQ0lFIERhdGEgQWxpZ25tZW50IEZhY3RvcgogCS5ieXRlCTB4NDEJOyBDSUUgUkEgQ29sdW1uCiAJLmJ5dGUJMHgxCTsgdWxlYjEyOCAweDE7IEF1Z21lbnRhdGlvbiBzaXplCi0JLmJ5dGUJMHgxMAk7IEZERSBFbmNvZGluZyAoaW5kaXJlY3QgcGNyZWwpCisJLmJ5dGUJMHgxMAk7IEZERSBFbmNvZGluZyAocGNyZWwpCiAJLmJ5dGUJMHhjCTsgRFdfQ0ZBX2RlZl9jZmEKIAkuYnl0ZQkweDEJOyB1bGViMTI4IDB4MQogCS5ieXRlCTB4MAk7IHVsZWIxMjggMHgwCkBAIC00OTgsNyArNDkzLDcgQEAKIAogTEFTRkRFMToKIAkubG9uZwlMQVNGREUxLUVIX2ZyYW1lMQk7IEZERSBDSUUgb2Zmc2V0Ci0JLmdfbG9uZwlMTEZCMSRub25fbGF6eV9wdHItLgk7IEZERSBpbml0aWFsIGxvY2F0aW9uCisJLmdfbG9uZwlMc3RhcnRjb2RlLS4JOyBGREUgaW5pdGlhbCBsb2NhdGlvbgogCS5zZXQJTCRzZXQkMyxMRkUxLUxzdGFydGNvZGUKIAkuZ19sb25nCUwkc2V0JDMJOyBGREUgYWRkcmVzcyByYW5nZQogCS5ieXRlICAgMHgwICAgICA7IHVsZWIxMjggMHgwOyBBdWdtZW50YXRpb24gc2l6ZQpAQCAtNTIzLDEyICs1MTgsMTIgQEAKIExfZmZpX2Nsb3N1cmVfaGVscGVyX0RBUldJTiRzdHViOgogCS5pbmRpcmVjdF9zeW1ib2wgX2ZmaV9jbG9zdXJlX2hlbHBlcl9EQVJXSU4KIAltZmxyIHIwCi0JYmNsIDIwLDMxLCJMMDAwMDAwMDAwMDEkc3BiIgotIkwwMDAwMDAwMDAwMSRzcGIiOgorCWJjbCAyMCwzMSwiTDEkc3BiIgorIkwxJHNwYiI6CiAJbWZsciByMTEKLQlhZGRpcyByMTEscjExLGhhMTYoTF9mZmlfY2xvc3VyZV9oZWxwZXJfREFSV0lOJGxhenlfcHRyLSJMMDAwMDAwMDAwMDEkc3BiIikKKwlhZGRpcyByMTEscjExLGhhMTYoTF9mZmlfY2xvc3VyZV9oZWxwZXJfREFSV0lOJGxhenlfcHRyLSJMMSRzcGIiKQogCW10bHIgcjAKLQlsd3p1IHIxMixsbzE2KExfZmZpX2Nsb3N1cmVfaGVscGVyX0RBUldJTiRsYXp5X3B0ci0iTDAwMDAwMDAwMDAxJHNwYiIpKHIxMSkKKwlsd3p1IHIxMixsbzE2KExfZmZpX2Nsb3N1cmVfaGVscGVyX0RBUldJTiRsYXp5X3B0ci0iTDEkc3BiIikocjExKQogCW10Y3RyIHIxMgogCWJjdHIKIAkubGF6eV9zeW1ib2xfcG9pbnRlcgpAQCAtNTQyLDEyICs1MzcsMTIgQEAKIExfZGFyd2luNjRfc3RydWN0X3JldF9ieV92YWx1ZV9wJHN0dWI6CiAJLmluZGlyZWN0X3N5bWJvbCBfZGFyd2luNjRfc3RydWN0X3JldF9ieV92YWx1ZV9wCiAJbWZsciByMAotCWJjbCAyMCwzMSwiTDAwMDAwMDAwMDAyJHNwYiIKLSJMMDAwMDAwMDAwMDIkc3BiIjoKKwliY2wgMjAsMzEsIkwyJHNwYiIKKyJMMiRzcGIiOgogCW1mbHIgcjExCi0JYWRkaXMgcjExLHIxMSxoYTE2KExfZGFyd2luNjRfc3RydWN0X3JldF9ieV92YWx1ZV9wJGxhenlfcHRyLSJMMDAwMDAwMDAwMDIkc3BiIikKKwlhZGRpcyByMTEscjExLGhhMTYoTF9kYXJ3aW42NF9zdHJ1Y3RfcmV0X2J5X3ZhbHVlX3AkbGF6eV9wdHItIkwyJHNwYiIpCiAJbXRsciByMAotCWx3enUgcjEyLGxvMTYoTF9kYXJ3aW42NF9zdHJ1Y3RfcmV0X2J5X3ZhbHVlX3AkbGF6eV9wdHItIkwwMDAwMDAwMDAwMiRzcGIiKShyMTEpCisJbHd6dSByMTIsbG8xNihMX2RhcndpbjY0X3N0cnVjdF9yZXRfYnlfdmFsdWVfcCRsYXp5X3B0ci0iTDIkc3BiIikocjExKQogCW10Y3RyIHIxMgogCWJjdHIKIAkubGF6eV9zeW1ib2xfcG9pbnRlcgpAQCAtNTYwLDEyICs1NTUsMTIgQEAKIExfZGFyd2luNjRfcGFzc19zdHJ1Y3RfZmxvYXRzJHN0dWI6CiAJLmluZGlyZWN0X3N5bWJvbCBfZGFyd2luNjRfcGFzc19zdHJ1Y3RfZmxvYXRzCiAJbWZsciByMAotCWJjbCAyMCwzMSwiTDAwMDAwMDAwMDAzJHNwYiIKLSJMMDAwMDAwMDAwMDMkc3BiIjoKKwliY2wgMjAsMzEsIkwzJHNwYiIKKyJMMyRzcGIiOgogCW1mbHIgcjExCi0JYWRkaXMgcjExLHIxMSxoYTE2KExfZGFyd2luNjRfcGFzc19zdHJ1Y3RfZmxvYXRzJGxhenlfcHRyLSJMMDAwMDAwMDAwMDMkc3BiIikKKwlhZGRpcyByMTEscjExLGhhMTYoTF9kYXJ3aW42NF9wYXNzX3N0cnVjdF9mbG9hdHMkbGF6eV9wdHItIkwzJHNwYiIpCiAJbXRsciByMAotCWx3enUgcjEyLGxvMTYoTF9kYXJ3aW42NF9wYXNzX3N0cnVjdF9mbG9hdHMkbGF6eV9wdHItIkwwMDAwMDAwMDAwMyRzcGIiKShyMTEpCisJbHd6dSByMTIsbG8xNihMX2RhcndpbjY0X3Bhc3Nfc3RydWN0X2Zsb2F0cyRsYXp5X3B0ci0iTDMkc3BiIikocjExKQogCW10Y3RyIHIxMgogCWJjdHIKIAkubGF6eV9zeW1ib2xfcG9pbnRlcgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvcG93ZXJwYy9mZmkuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3Bvd2VycGMvZmZpLmMKaW5kZXggNTM4MWQzZC4uZWZiNDQxYiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvcG93ZXJwYy9mZmkuYworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9wb3dlcnBjL2ZmaS5jCkBAIC0xLDUgKzEsNiBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgIGZmaS5jIC0gQ29weXJpZ2h0IChDKSAyMDExIEFudGhvbnkgR3JlZW4KKyAgIGZmaS5jIC0gQ29weXJpZ2h0IChDKSAyMDEzIElCTQorICAgICAgICAgICBDb3B5cmlnaHQgKEMpIDIwMTEgQW50aG9ueSBHcmVlbgogICAgICAgICAgICBDb3B5cmlnaHQgKEMpIDIwMTEgS3lsZSBNb2ZmZXR0CiAgICAgICAgICAgIENvcHlyaWdodCAoQykgMjAwOCBSZWQgSGF0LCBJbmMKICAgICAgICAgICAgQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jCkBAIC0yNyw5OTIgKzI4LDEwMyBAQAogICAgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotI2luY2x1ZGUgPGZmaS5oPgotI2luY2x1ZGUgPGZmaV9jb21tb24uaD4KKyNpbmNsdWRlICJmZmkuaCIKKyNpbmNsdWRlICJmZmlfY29tbW9uLmgiCisjaW5jbHVkZSAiZmZpX3Bvd2VycGMuaCIKIAotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KLQotZXh0ZXJuIHZvaWQgZmZpX2Nsb3N1cmVfU1lTViAodm9pZCk7Ci1leHRlcm4gdm9pZCBGRklfSElEREVOIGZmaV9jbG9zdXJlX0xJTlVYNjQgKHZvaWQpOwotCi1lbnVtIHsKLSAgLyogVGhlIGFzc2VtYmx5IGRlcGVuZHMgb24gdGhlc2UgZXhhY3QgZmxhZ3MuICAqLwotICBGTEFHX1JFVFVSTlNfU01TVAk9IDEgPDwgKDMxLTMxKSwgLyogVXNlZCBmb3IgRkZJX1NZU1Ygc21hbGwgc3RydWN0cy4gICovCi0gIEZMQUdfUkVUVVJOU19OT1RISU5HICA9IDEgPDwgKDMxLTMwKSwgLyogVGhlc2UgZ28gaW4gY3I3ICovCi0jaWZuZGVmIF9fTk9fRlBSU19fCi0gIEZMQUdfUkVUVVJOU19GUCAgICAgICA9IDEgPDwgKDMxLTI5KSwKLSNlbmRpZgotICBGTEFHX1JFVFVSTlNfNjRCSVRTICAgPSAxIDw8ICgzMS0yOCksCi0KLSAgRkxBR19SRVRVUk5TXzEyOEJJVFMgID0gMSA8PCAoMzEtMjcpLCAvKiBjcjYgICovCi0KLSAgRkxBR19TWVNWX1NNU1RfUjQgICAgID0gMSA8PCAoMzEtMjYpLCAvKiB1c2UgcjQgZm9yIEZGSV9TWVNWIDggYnl0ZQotCQkJCQkgICBzdHJ1Y3RzLiAgKi8KLSAgRkxBR19TWVNWX1NNU1RfUjMgICAgID0gMSA8PCAoMzEtMjUpLCAvKiB1c2UgcjMgZm9yIEZGSV9TWVNWIDQgYnl0ZQotCQkJCQkgICBzdHJ1Y3RzLiAgKi8KLQotICBGTEFHX0FSR19ORUVEU19DT1BZICAgPSAxIDw8ICgzMS0gNyksCi0jaWZuZGVmIF9fTk9fRlBSU19fCi0gIEZMQUdfRlBfQVJHVU1FTlRTICAgICA9IDEgPDwgKDMxLSA2KSwgLyogY3IxLmVxOyBzcGVjaWZpZWQgYnkgQUJJICovCi0jZW5kaWYKLSAgRkxBR180X0dQUl9BUkdVTUVOVFMgID0gMSA8PCAoMzEtIDUpLAotICBGTEFHX1JFVFZBTF9SRUZFUkVOQ0UgPSAxIDw8ICgzMS0gNCkKLX07Ci0KLS8qIEFib3V0IHRoZSBTWVNWIEFCSS4gICovCi0jZGVmaW5lIEFTTV9ORUVEU19SRUdJU1RFUlMgNAotI2RlZmluZSBOVU1fR1BSX0FSR19SRUdJU1RFUlMgOAotI2lmbmRlZiBfX05PX0ZQUlNfXwotIyBkZWZpbmUgTlVNX0ZQUl9BUkdfUkVHSVNURVJTIDgKLSNlbmRpZgotCi0vKiBmZmlfcHJlcF9hcmdzX1NZU1YgaXMgY2FsbGVkIGJ5IHRoZSBhc3NlbWJseSByb3V0aW5lIG9uY2Ugc3RhY2sgc3BhY2UKLSAgIGhhcyBiZWVuIGFsbG9jYXRlZCBmb3IgdGhlIGZ1bmN0aW9uJ3MgYXJndW1lbnRzLgotCi0gICBUaGUgc3RhY2sgbGF5b3V0IHdlIHdhbnQgbG9va3MgbGlrZSB0aGlzOgotCi0gICB8ICAgUmV0dXJuIGFkZHJlc3MgZnJvbSBmZmlfY2FsbF9TWVNWIDRieXRlcwl8CWhpZ2hlciBhZGRyZXNzZXMKLSAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKLSAgIHwgICBQcmV2aW91cyBiYWNrY2hhaW4gcG9pbnRlcgk0CXwgICAgICAgc3RhY2sgcG9pbnRlciBoZXJlCi0gICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18PCsgPDw8CW9uIGVudHJ5IHRvCi0gICB8ICAgU2F2ZWQgcjI4LXIzMQkJCTQqNAl8IHwJZmZpX2NhbGxfU1lTVgotICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCB8Ci0gICB8ICAgR1BSIHJlZ2lzdGVycyByMy1yMTAJCTgqNAl8IHwJZmZpX2NhbGxfU1lTVgotICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCB8Ci0gICB8ICAgRlBSIHJlZ2lzdGVycyBmMS1mOCAob3B0aW9uYWwpCTgqOAl8IHwKLSAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgfAlzdGFjawl8Ci0gICB8ICAgU3BhY2UgZm9yIGNvcGllZCBzdHJ1Y3R1cmVzCQl8IHwJZ3Jvd3MJfAotICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCB8CWRvd24gICAgVgotICAgfCAgIFBhcmFtZXRlcnMgdGhhdCBkaWRuJ3QgZml0IGluIHJlZ2lzdGVycyAgfCB8Ci0gICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IHwJbG93ZXIgYWRkcmVzc2VzCi0gICB8ICAgU3BhY2UgZm9yIGNhbGxlZSdzIExSCQk0CXwgfAotICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCB8CXN0YWNrIHBvaW50ZXIgaGVyZQotICAgfCAgIEN1cnJlbnQgYmFja2NoYWluIHBvaW50ZXIJNAl8LS8JZHVyaW5nCi0gICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18ICAgPDw8CWZmaV9jYWxsX1NZU1YKLQotKi8KLQotdm9pZAotZmZpX3ByZXBfYXJnc19TWVNWIChleHRlbmRlZF9jaWYgKmVjaWYsIHVuc2lnbmVkICpjb25zdCBzdGFjaykKLXsKLSAgY29uc3QgdW5zaWduZWQgYnl0ZXMgPSBlY2lmLT5jaWYtPmJ5dGVzOwotICBjb25zdCB1bnNpZ25lZCBmbGFncyA9IGVjaWYtPmNpZi0+ZmxhZ3M7Ci0KLSAgdHlwZWRlZiB1bmlvbiB7Ci0gICAgY2hhciAqYzsKLSAgICB1bnNpZ25lZCAqdTsKLSAgICBsb25nIGxvbmcgKmxsOwotICAgIGZsb2F0ICpmOwotICAgIGRvdWJsZSAqZDsKLSAgfSB2YWxwOwotCi0gIC8qICdzdGFja3RvcCcgcG9pbnRzIGF0IHRoZSBwcmV2aW91cyBiYWNrY2hhaW4gcG9pbnRlci4gICovCi0gIHZhbHAgc3RhY2t0b3A7Ci0KLSAgLyogJ2dwcl9iYXNlJyBwb2ludHMgYXQgdGhlIHNwYWNlIGZvciBncHIzLCBhbmQgZ3Jvd3MgdXB3YXJkcyBhcwotICAgICB3ZSB1c2UgR1BSIHJlZ2lzdGVycy4gICovCi0gIHZhbHAgZ3ByX2Jhc2U7Ci0gIGludCBpbnRhcmdfY291bnQ7Ci0KLSNpZm5kZWYgX19OT19GUFJTX18KLSAgLyogJ2Zwcl9iYXNlJyBwb2ludHMgYXQgdGhlIHNwYWNlIGZvciBmcHIxLCBhbmQgZ3Jvd3MgdXB3YXJkcyBhcwotICAgICB3ZSB1c2UgRlBSIHJlZ2lzdGVycy4gICovCi0gIHZhbHAgZnByX2Jhc2U7Ci0gIGludCBmcGFyZ19jb3VudDsKLSNlbmRpZgotCi0gIC8qICdjb3B5X3NwYWNlJyBncm93cyBkb3duIGFzIHdlIHB1dCBzdHJ1Y3R1cmVzIGluIGl0LiAgSXQgc2hvdWxkCi0gICAgIHN0YXkgMTYtYnl0ZSBhbGlnbmVkLiAgKi8KLSAgdmFscCBjb3B5X3NwYWNlOwotCi0gIC8qICduZXh0X2FyZycgZ3Jvd3MgdXAgYXMgd2UgcHV0IHBhcmFtZXRlcnMgaW4gaXQuICAqLwotICB2YWxwIG5leHRfYXJnOwotCi0gIGludCBpOwotICBmZmlfdHlwZSAqKnB0cjsKLSAgdW5pb24gewotICAgIHZvaWQgKip2OwotICAgIGNoYXIgKipjOwotICAgIHNpZ25lZCBjaGFyICoqc2M7Ci0gICAgdW5zaWduZWQgY2hhciAqKnVjOwotICAgIHNpZ25lZCBzaG9ydCAqKnNzOwotICAgIHVuc2lnbmVkIHNob3J0ICoqdXM7Ci0gICAgdW5zaWduZWQgaW50ICoqdWk7Ci0gICAgbG9uZyBsb25nICoqbGw7Ci0gICAgZmxvYXQgKipmOwotICAgIGRvdWJsZSAqKmQ7Ci0gIH0gcF9hcmd2OwotICBzaXplX3Qgc3RydWN0X2NvcHlfc2l6ZTsKLSAgdW5zaWduZWQgZ3BydmFsdWU7Ci0jaWZuZGVmIF9fTk9fRlBSU19fCi0gIGRvdWJsZSBkb3VibGVfdG1wOwotI2VuZGlmCi0KLSAgc3RhY2t0b3AuYyA9IChjaGFyICopIHN0YWNrICsgYnl0ZXM7Ci0gIGdwcl9iYXNlLnUgPSBzdGFja3RvcC51IC0gQVNNX05FRURTX1JFR0lTVEVSUyAtIE5VTV9HUFJfQVJHX1JFR0lTVEVSUzsKLSAgaW50YXJnX2NvdW50ID0gMDsKLSNpZm5kZWYgX19OT19GUFJTX18KLSAgZnByX2Jhc2UuZCA9IGdwcl9iYXNlLmQgLSBOVU1fRlBSX0FSR19SRUdJU1RFUlM7Ci0gIGZwYXJnX2NvdW50ID0gMDsKLSAgY29weV9zcGFjZS5jID0gKChmbGFncyAmIEZMQUdfRlBfQVJHVU1FTlRTKSA/IGZwcl9iYXNlLmMgOiBncHJfYmFzZS5jKTsKLSNlbHNlCi0gIGNvcHlfc3BhY2UuYyA9IGdwcl9iYXNlLmM7Ci0jZW5kaWYKLSAgbmV4dF9hcmcudSA9IHN0YWNrICsgMjsKLQotICAvKiBDaGVjayB0aGF0IGV2ZXJ5dGhpbmcgc3RhcnRzIGFsaWduZWQgcHJvcGVybHkuICAqLwotICBGRklfQVNTRVJUICgoKHVuc2lnbmVkIGxvbmcpIChjaGFyICopIHN0YWNrICYgMHhGKSA9PSAwKTsKLSAgRkZJX0FTU0VSVCAoKCh1bnNpZ25lZCBsb25nKSBjb3B5X3NwYWNlLmMgJiAweEYpID09IDApOwotICBGRklfQVNTRVJUICgoKHVuc2lnbmVkIGxvbmcpIHN0YWNrdG9wLmMgJiAweEYpID09IDApOwotICBGRklfQVNTRVJUICgoYnl0ZXMgJiAweEYpID09IDApOwotICBGRklfQVNTRVJUIChjb3B5X3NwYWNlLmMgPj0gbmV4dF9hcmcuYyk7Ci0KLSAgLyogRGVhbCB3aXRoIHJldHVybiB2YWx1ZXMgdGhhdCBhcmUgYWN0dWFsbHkgcGFzcy1ieS1yZWZlcmVuY2UuICAqLwotICBpZiAoZmxhZ3MgJiBGTEFHX1JFVFZBTF9SRUZFUkVOQ0UpCi0gICAgewotICAgICAgKmdwcl9iYXNlLnUrKyA9ICh1bnNpZ25lZCBsb25nKSAoY2hhciAqKSBlY2lmLT5ydmFsdWU7Ci0gICAgICBpbnRhcmdfY291bnQrKzsKLSAgICB9Ci0KLSAgLyogTm93IGZvciB0aGUgYXJndW1lbnRzLiAgKi8KLSAgcF9hcmd2LnYgPSBlY2lmLT5hdmFsdWU7Ci0gIGZvciAocHRyID0gZWNpZi0+Y2lmLT5hcmdfdHlwZXMsIGkgPSBlY2lmLT5jaWYtPm5hcmdzOwotICAgICAgIGkgPiAwOwotICAgICAgIGktLSwgcHRyKyssIHBfYXJndi52KyspCi0gICAgewotICAgICAgdW5zaWduZWQgc2hvcnQgdHlwZW51bSA9ICgqcHRyKS0+dHlwZTsKLQotICAgICAgLyogV2UgbWF5IG5lZWQgdG8gaGFuZGxlIHNvbWUgdmFsdWVzIGRlcGVuZGluZyBvbiBBQkkgKi8KLSAgICAgIGlmIChlY2lmLT5jaWYtPmFiaSA9PSBGRklfTElOVVhfU09GVF9GTE9BVCkgewotCQlpZiAodHlwZW51bSA9PSBGRklfVFlQRV9GTE9BVCkKLQkJCXR5cGVudW0gPSBGRklfVFlQRV9VSU5UMzI7Ci0JCWlmICh0eXBlbnVtID09IEZGSV9UWVBFX0RPVUJMRSkKLQkJCXR5cGVudW0gPSBGRklfVFlQRV9VSU5UNjQ7Ci0JCWlmICh0eXBlbnVtID09IEZGSV9UWVBFX0xPTkdET1VCTEUpCi0JCQl0eXBlbnVtID0gRkZJX1RZUEVfVUlOVDEyODsKLSAgICAgIH0gZWxzZSBpZiAoZWNpZi0+Y2lmLT5hYmkgIT0gRkZJX0xJTlVYKSB7Ci0jaWYgRkZJX1RZUEVfTE9OR0RPVUJMRSAhPSBGRklfVFlQRV9ET1VCTEUKLQkJaWYgKHR5cGVudW0gPT0gRkZJX1RZUEVfTE9OR0RPVUJMRSkKLQkJCXR5cGVudW0gPSBGRklfVFlQRV9TVFJVQ1Q7Ci0jZW5kaWYKLSAgICAgIH0KLQotICAgICAgLyogTm93IHRlc3QgdGhlIHRyYW5zbGF0ZWQgdmFsdWUgKi8KLSAgICAgIHN3aXRjaCAodHlwZW51bSkgewotI2lmbmRlZiBfX05PX0ZQUlNfXwotCWNhc2UgRkZJX1RZUEVfRkxPQVQ6Ci0JICAvKiBXaXRoIEZGSV9MSU5VWF9TT0ZUX0ZMT0FUIGZsb2F0cyBhcmUgaGFuZGxlZCBsaWtlIFVJTlQzMi4gICovCi0JICBkb3VibGVfdG1wID0gKipwX2FyZ3YuZjsKLQkgIGlmIChmcGFyZ19jb3VudCA+PSBOVU1fRlBSX0FSR19SRUdJU1RFUlMpCi0JICAgIHsKLQkgICAgICAqbmV4dF9hcmcuZiA9IChmbG9hdCkgZG91YmxlX3RtcDsKLQkgICAgICBuZXh0X2FyZy51ICs9IDE7Ci0JICAgICAgaW50YXJnX2NvdW50Kys7Ci0JICAgIH0KLQkgIGVsc2UKLQkgICAgKmZwcl9iYXNlLmQrKyA9IGRvdWJsZV90bXA7Ci0JICBmcGFyZ19jb3VudCsrOwotCSAgRkZJX0FTU0VSVCAoZmxhZ3MgJiBGTEFHX0ZQX0FSR1VNRU5UUyk7Ci0JICBicmVhazsKLQotCWNhc2UgRkZJX1RZUEVfRE9VQkxFOgotCSAgLyogV2l0aCBGRklfTElOVVhfU09GVF9GTE9BVCBkb3VibGVzIGFyZSBoYW5kbGVkIGxpa2UgVUlOVDY0LiAgKi8KLQkgIGRvdWJsZV90bXAgPSAqKnBfYXJndi5kOwotCi0JICBpZiAoZnBhcmdfY291bnQgPj0gTlVNX0ZQUl9BUkdfUkVHSVNURVJTKQotCSAgICB7Ci0JICAgICAgaWYgKGludGFyZ19jb3VudCA+PSBOVU1fR1BSX0FSR19SRUdJU1RFUlMKLQkJICAmJiBpbnRhcmdfY291bnQgJSAyICE9IDApCi0JCXsKLQkJICBpbnRhcmdfY291bnQrKzsKLQkJICBuZXh0X2FyZy51Kys7Ci0JCX0KLQkgICAgICAqbmV4dF9hcmcuZCA9IGRvdWJsZV90bXA7Ci0JICAgICAgbmV4dF9hcmcudSArPSAyOwotCSAgICB9Ci0JICBlbHNlCi0JICAgICpmcHJfYmFzZS5kKysgPSBkb3VibGVfdG1wOwotCSAgZnBhcmdfY291bnQrKzsKLQkgIEZGSV9BU1NFUlQgKGZsYWdzICYgRkxBR19GUF9BUkdVTUVOVFMpOwotCSAgYnJlYWs7Ci0KLSNpZiBGRklfVFlQRV9MT05HRE9VQkxFICE9IEZGSV9UWVBFX0RPVUJMRQotCWNhc2UgRkZJX1RZUEVfTE9OR0RPVUJMRToKLQkgICAgICBkb3VibGVfdG1wID0gKCpwX2FyZ3YuZClbMF07Ci0KLQkgICAgICBpZiAoZnBhcmdfY291bnQgPj0gTlVNX0ZQUl9BUkdfUkVHSVNURVJTIC0gMSkKLQkJewotCQkgIGlmIChpbnRhcmdfY291bnQgPj0gTlVNX0dQUl9BUkdfUkVHSVNURVJTCi0JCSAgICAgICYmIGludGFyZ19jb3VudCAlIDIgIT0gMCkKLQkJICAgIHsKLQkJICAgICAgaW50YXJnX2NvdW50Kys7Ci0JCSAgICAgIG5leHRfYXJnLnUrKzsKLQkJICAgIH0KLQkJICAqbmV4dF9hcmcuZCA9IGRvdWJsZV90bXA7Ci0JCSAgbmV4dF9hcmcudSArPSAyOwotCQkgIGRvdWJsZV90bXAgPSAoKnBfYXJndi5kKVsxXTsKLQkJICAqbmV4dF9hcmcuZCA9IGRvdWJsZV90bXA7Ci0JCSAgbmV4dF9hcmcudSArPSAyOwotCQl9Ci0JICAgICAgZWxzZQotCQl7Ci0JCSAgKmZwcl9iYXNlLmQrKyA9IGRvdWJsZV90bXA7Ci0JCSAgZG91YmxlX3RtcCA9ICgqcF9hcmd2LmQpWzFdOwotCQkgICpmcHJfYmFzZS5kKysgPSBkb3VibGVfdG1wOwotCQl9Ci0KLQkgICAgICBmcGFyZ19jb3VudCArPSAyOwotCSAgICAgIEZGSV9BU1NFUlQgKGZsYWdzICYgRkxBR19GUF9BUkdVTUVOVFMpOwotCSAgYnJlYWs7Ci0jZW5kaWYKLSNlbmRpZiAvKiBoYXZlIEZQUnMgKi8KLQotCS8qCi0JICogVGhlIHNvZnQgZmxvYXQgQUJJIGZvciBsb25nIGRvdWJsZXMgd29ya3MgbGlrZSB0aGlzLCBhIGxvbmcgZG91YmxlCi0JICogaXMgcGFzc2VkIGluIGZvdXIgY29uc2VjdXRpdmUgR1BScyBpZiBhdmFpbGFibGUuICBBIG1heGltdW0gb2YgMgotCSAqIGxvbmcgZG91YmxlcyBjYW4gYmUgcGFzc2VkIGluIGdwcnMuICBJZiB3ZSBkbyBub3QgaGF2ZSA0IEdQUnMKLQkgKiBsZWZ0LCB0aGUgbG9uZyBkb3VibGUgaXMgcGFzc2VkIG9uIHRoZSBzdGFjaywgNC1ieXRlIGFsaWduZWQuCi0JICovCi0JY2FzZSBGRklfVFlQRV9VSU5UMTI4OiB7Ci0JCXVuc2lnbmVkIGludCBpbnRfdG1wID0gKCpwX2FyZ3YudWkpWzBdOwotCQl1bnNpZ25lZCBpbnQgaWk7Ci0JCWlmIChpbnRhcmdfY291bnQgPj0gTlVNX0dQUl9BUkdfUkVHSVNURVJTIC0gMykgewotCQkJaWYgKGludGFyZ19jb3VudCA8IE5VTV9HUFJfQVJHX1JFR0lTVEVSUykKLQkJCQlpbnRhcmdfY291bnQgKz0gTlVNX0dQUl9BUkdfUkVHSVNURVJTIC0gaW50YXJnX2NvdW50OwotCQkJKihuZXh0X2FyZy51KyspID0gaW50X3RtcDsKLQkJCWZvciAoaWkgPSAxOyBpaSA8IDQ7IGlpKyspIHsKLQkJCQlpbnRfdG1wID0gKCpwX2FyZ3YudWkpW2lpXTsKLQkJCQkqKG5leHRfYXJnLnUrKykgPSBpbnRfdG1wOwotCQkJfQotCQl9IGVsc2UgewotCQkJKihncHJfYmFzZS51KyspID0gaW50X3RtcDsKLQkJCWZvciAoaWkgPSAxOyBpaSA8IDQ7IGlpKyspIHsKLQkJCQlpbnRfdG1wID0gKCpwX2FyZ3YudWkpW2lpXTsKLQkJCQkqKGdwcl9iYXNlLnUrKykgPSBpbnRfdG1wOwotCQkJfQotCQl9Ci0JCWludGFyZ19jb3VudCArPSA0OwotCQlicmVhazsKLQl9Ci0KLQljYXNlIEZGSV9UWVBFX1VJTlQ2NDoKLQljYXNlIEZGSV9UWVBFX1NJTlQ2NDoKLQkgIGlmIChpbnRhcmdfY291bnQgPT0gTlVNX0dQUl9BUkdfUkVHSVNURVJTLTEpCi0JICAgIGludGFyZ19jb3VudCsrOwotCSAgaWYgKGludGFyZ19jb3VudCA+PSBOVU1fR1BSX0FSR19SRUdJU1RFUlMpCi0JICAgIHsKLQkgICAgICBpZiAoaW50YXJnX2NvdW50ICUgMiAhPSAwKQotCQl7Ci0JCSAgaW50YXJnX2NvdW50Kys7Ci0JCSAgbmV4dF9hcmcudSsrOwotCQl9Ci0JICAgICAgKm5leHRfYXJnLmxsID0gKipwX2FyZ3YubGw7Ci0JICAgICAgbmV4dF9hcmcudSArPSAyOwotCSAgICB9Ci0JICBlbHNlCi0JICAgIHsKLQkgICAgICAvKiB3aG9vcHM6IGFiaSBzdGF0ZXMgb25seSBjZXJ0YWluIHJlZ2lzdGVyIHBhaXJzCi0JICAgICAgICogY2FuIGJlIHVzZWQgZm9yIHBhc3NpbmcgbG9uZyBsb25nIGludAotCSAgICAgICAqIHNwZWNpZmljYWxseSAocjMscjQpLCAocjUscjYpLCAocjcscjgpLAotCSAgICAgICAqIChyOSxyMTApIGFuZCBpZiBuZXh0IGFyZyBpcyBsb25nIGxvbmcgYnV0Ci0JICAgICAgICogbm90IGNvcnJlY3Qgc3RhcnRpbmcgcmVnaXN0ZXIgb2YgcGFpciB0aGVuIHNraXAKLQkgICAgICAgKiB1bnRpbCB0aGUgcHJvcGVyIHN0YXJ0aW5nIHJlZ2lzdGVyCi0JICAgICAgICovCi0JICAgICAgaWYgKGludGFyZ19jb3VudCAlIDIgIT0gMCkKLQkJewotCQkgIGludGFyZ19jb3VudCArKzsKLQkJICBncHJfYmFzZS51Kys7Ci0JCX0KLQkgICAgICAqZ3ByX2Jhc2UubGwrKyA9ICoqcF9hcmd2LmxsOwotCSAgICB9Ci0JICBpbnRhcmdfY291bnQgKz0gMjsKLQkgIGJyZWFrOwotCi0JY2FzZSBGRklfVFlQRV9TVFJVQ1Q6Ci0JICBzdHJ1Y3RfY29weV9zaXplID0gKCgqcHRyKS0+c2l6ZSArIDE1KSAmIH4weEY7Ci0JICBjb3B5X3NwYWNlLmMgLT0gc3RydWN0X2NvcHlfc2l6ZTsKLQkgIG1lbWNweSAoY29weV9zcGFjZS5jLCAqcF9hcmd2LmMsICgqcHRyKS0+c2l6ZSk7Ci0KLQkgIGdwcnZhbHVlID0gKHVuc2lnbmVkIGxvbmcpIGNvcHlfc3BhY2UuYzsKLQotCSAgRkZJX0FTU0VSVCAoY29weV9zcGFjZS5jID4gbmV4dF9hcmcuYyk7Ci0JICBGRklfQVNTRVJUIChmbGFncyAmIEZMQUdfQVJHX05FRURTX0NPUFkpOwotCSAgZ290byBwdXRncHI7Ci0KLQljYXNlIEZGSV9UWVBFX1VJTlQ4OgotCSAgZ3BydmFsdWUgPSAqKnBfYXJndi51YzsKLQkgIGdvdG8gcHV0Z3ByOwotCWNhc2UgRkZJX1RZUEVfU0lOVDg6Ci0JICBncHJ2YWx1ZSA9ICoqcF9hcmd2LnNjOwotCSAgZ290byBwdXRncHI7Ci0JY2FzZSBGRklfVFlQRV9VSU5UMTY6Ci0JICBncHJ2YWx1ZSA9ICoqcF9hcmd2LnVzOwotCSAgZ290byBwdXRncHI7Ci0JY2FzZSBGRklfVFlQRV9TSU5UMTY6Ci0JICBncHJ2YWx1ZSA9ICoqcF9hcmd2LnNzOwotCSAgZ290byBwdXRncHI7Ci0KLQljYXNlIEZGSV9UWVBFX0lOVDoKLQljYXNlIEZGSV9UWVBFX1VJTlQzMjoKLQljYXNlIEZGSV9UWVBFX1NJTlQzMjoKLQljYXNlIEZGSV9UWVBFX1BPSU5URVI6Ci0KLQkgIGdwcnZhbHVlID0gKipwX2FyZ3YudWk7Ci0KLQlwdXRncHI6Ci0JICBpZiAoaW50YXJnX2NvdW50ID49IE5VTV9HUFJfQVJHX1JFR0lTVEVSUykKLQkgICAgKm5leHRfYXJnLnUrKyA9IGdwcnZhbHVlOwotCSAgZWxzZQotCSAgICAqZ3ByX2Jhc2UudSsrID0gZ3BydmFsdWU7Ci0JICBpbnRhcmdfY291bnQrKzsKLQkgIGJyZWFrOwotCX0KLSAgICB9Ci0KLSAgLyogQ2hlY2sgdGhhdCB3ZSBkaWRuJ3Qgb3ZlcnJ1biB0aGUgc3RhY2suLi4gICovCi0gIEZGSV9BU1NFUlQgKGNvcHlfc3BhY2UuYyA+PSBuZXh0X2FyZy5jKTsKLSAgRkZJX0FTU0VSVCAoZ3ByX2Jhc2UudSA8PSBzdGFja3RvcC51IC0gQVNNX05FRURTX1JFR0lTVEVSUyk7Ci0gIC8qIFRoZSBhc3NlcnQgYmVsb3cgaXMgdGVzdGluZyB0aGF0IHRoZSBudW1iZXIgb2YgaW50ZWdlciBhcmd1bWVudHMgYWdyZWVzCi0gICAgIHdpdGggdGhlIG51bWJlciBmb3VuZCBpbiBmZmlfcHJlcF9jaWZfbWFjaGRlcCgpLiAgSG93ZXZlciwgaW50YXJnX2NvdW50Ci0gICAgIGlzIGluY3JlbWVuZXRlZCB3aGVuZXZlciB3ZSBwbGFjZSBhbiBGUCBhcmcgb24gdGhlIHN0YWNrLCBzbyBhY2NvdW50IGZvcgotICAgICB0aGF0IGJlZm9yZSBvdXIgYXNzZXJ0IHRlc3QuICAqLwotI2lmbmRlZiBfX05PX0ZQUlNfXwotICBpZiAoZnBhcmdfY291bnQgPiBOVU1fRlBSX0FSR19SRUdJU1RFUlMpCi0gICAgaW50YXJnX2NvdW50IC09IGZwYXJnX2NvdW50IC0gTlVNX0ZQUl9BUkdfUkVHSVNURVJTOwotICBGRklfQVNTRVJUIChmcHJfYmFzZS51Ci0JICAgICAgPD0gc3RhY2t0b3AudSAtIEFTTV9ORUVEU19SRUdJU1RFUlMgLSBOVU1fR1BSX0FSR19SRUdJU1RFUlMpOwotI2VuZGlmCi0gIEZGSV9BU1NFUlQgKGZsYWdzICYgRkxBR180X0dQUl9BUkdVTUVOVFMgfHwgaW50YXJnX2NvdW50IDw9IDQpOwotfQotCi0vKiBBYm91dCB0aGUgTElOVVg2NCBBQkkuICAqLwotZW51bSB7Ci0gIE5VTV9HUFJfQVJHX1JFR0lTVEVSUzY0ID0gOCwKLSAgTlVNX0ZQUl9BUkdfUkVHSVNURVJTNjQgPSAxMwotfTsKLWVudW0geyBBU01fTkVFRFNfUkVHSVNURVJTNjQgPSA0IH07Ci0KLS8qIGZmaV9wcmVwX2FyZ3M2NCBpcyBjYWxsZWQgYnkgdGhlIGFzc2VtYmx5IHJvdXRpbmUgb25jZSBzdGFjayBzcGFjZQotICAgaGFzIGJlZW4gYWxsb2NhdGVkIGZvciB0aGUgZnVuY3Rpb24ncyBhcmd1bWVudHMuCi0KLSAgIFRoZSBzdGFjayBsYXlvdXQgd2Ugd2FudCBsb29rcyBsaWtlIHRoaXM6Ci0KLSAgIHwgICBSZXQgYWRkciBmcm9tIGZmaV9jYWxsX0xJTlVYNjQJOGJ5dGVzCXwJaGlnaGVyIGFkZHJlc3NlcwotICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAotICAgfCAgIENSIHNhdmUgYXJlYQkJCThieXRlcwl8Ci0gICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18Ci0gICB8ICAgUHJldmlvdXMgYmFja2NoYWluIHBvaW50ZXIJOAl8CXN0YWNrIHBvaW50ZXIgaGVyZQotICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfDwrIDw8PAlvbiBlbnRyeSB0bwotICAgfCAgIFNhdmVkIHIyOC1yMzEJCQk0KjgJfCB8CWZmaV9jYWxsX0xJTlVYNjQKLSAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgfAotICAgfCAgIEdQUiByZWdpc3RlcnMgcjMtcjEwCQk4KjgJfCB8Ci0gICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IHwKLSAgIHwgICBGUFIgcmVnaXN0ZXJzIGYxLWYxMyAob3B0aW9uYWwpCTEzKjgJfCB8Ci0gICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IHwKLSAgIHwgICBQYXJhbWV0ZXIgc2F2ZSBhcmVhCQkgICAgICAgIHwgfAotICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCB8Ci0gICB8ICAgVE9DIHNhdmUgYXJlYQkJCTgJfCB8Ci0gICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IHwJc3RhY2sJfAotICAgfCAgIExpbmtlciBkb3VibGV3b3JkCQk4CXwgfAlncm93cwl8Ci0gICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IHwJZG93bglWCi0gICB8ICAgQ29tcGlsZXIgZG91Ymxld29yZAkJOAl8IHwKLSAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgfAlsb3dlciBhZGRyZXNzZXMKLSAgIHwgICBTcGFjZSBmb3IgY2FsbGVlJ3MgTFIJCTgJfCB8Ci0gICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IHwKLSAgIHwgICBDUiBzYXZlIGFyZWEJCQk4CXwgfAotICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCB8CXN0YWNrIHBvaW50ZXIgaGVyZQotICAgfCAgIEN1cnJlbnQgYmFja2NoYWluIHBvaW50ZXIJOAl8LS8JZHVyaW5nCi0gICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18ICAgPDw8CWZmaV9jYWxsX0xJTlVYNjQKLQotKi8KLQorI2lmIEhBVkVfTE9OR19ET1VCTEVfVkFSSUFOVAorLyogQWRqdXN0IGZmaV90eXBlX2xvbmdkb3VibGUuICAqLwogdm9pZCBGRklfSElEREVOCi1mZmlfcHJlcF9hcmdzNjQgKGV4dGVuZGVkX2NpZiAqZWNpZiwgdW5zaWduZWQgbG9uZyAqY29uc3Qgc3RhY2spCitmZmlfcHJlcF90eXBlcyAoZmZpX2FiaSBhYmkpCiB7Ci0gIGNvbnN0IHVuc2lnbmVkIGxvbmcgYnl0ZXMgPSBlY2lmLT5jaWYtPmJ5dGVzOwotICBjb25zdCB1bnNpZ25lZCBsb25nIGZsYWdzID0gZWNpZi0+Y2lmLT5mbGFnczsKLQotICB0eXBlZGVmIHVuaW9uIHsKLSAgICBjaGFyICpjOwotICAgIHVuc2lnbmVkIGxvbmcgKnVsOwotICAgIGZsb2F0ICpmOwotICAgIGRvdWJsZSAqZDsKLSAgfSB2YWxwOwotCi0gIC8qICdzdGFja3RvcCcgcG9pbnRzIGF0IHRoZSBwcmV2aW91cyBiYWNrY2hhaW4gcG9pbnRlci4gICovCi0gIHZhbHAgc3RhY2t0b3A7Ci0KLSAgLyogJ25leHRfYXJnJyBwb2ludHMgYXQgdGhlIHNwYWNlIGZvciBncHIzLCBhbmQgZ3Jvd3MgdXB3YXJkcyBhcwotICAgICB3ZSB1c2UgR1BSIHJlZ2lzdGVycywgdGhlbiBjb250aW51ZXMgYXQgcmVzdC4gICovCi0gIHZhbHAgZ3ByX2Jhc2U7Ci0gIHZhbHAgZ3ByX2VuZDsKLSAgdmFscCByZXN0OwotICB2YWxwIG5leHRfYXJnOwotCi0gIC8qICdmcHJfYmFzZScgcG9pbnRzIGF0IHRoZSBzcGFjZSBmb3IgZnByMywgYW5kIGdyb3dzIHVwd2FyZHMgYXMKLSAgICAgd2UgdXNlIEZQUiByZWdpc3RlcnMuICAqLwotICB2YWxwIGZwcl9iYXNlOwotICBpbnQgZnBhcmdfY291bnQ7Ci0KLSAgaW50IGksIHdvcmRzOwotICBmZmlfdHlwZSAqKnB0cjsKLSAgZG91YmxlIGRvdWJsZV90bXA7Ci0gIHVuaW9uIHsKLSAgICB2b2lkICoqdjsKLSAgICBjaGFyICoqYzsKLSAgICBzaWduZWQgY2hhciAqKnNjOwotICAgIHVuc2lnbmVkIGNoYXIgKip1YzsKLSAgICBzaWduZWQgc2hvcnQgKipzczsKLSAgICB1bnNpZ25lZCBzaG9ydCAqKnVzOwotICAgIHNpZ25lZCBpbnQgKipzaTsKLSAgICB1bnNpZ25lZCBpbnQgKip1aTsKLSAgICB1bnNpZ25lZCBsb25nICoqdWw7Ci0gICAgZmxvYXQgKipmOwotICAgIGRvdWJsZSAqKmQ7Ci0gIH0gcF9hcmd2OwotICB1bnNpZ25lZCBsb25nIGdwcnZhbHVlOwotCi0gIHN0YWNrdG9wLmMgPSAoY2hhciAqKSBzdGFjayArIGJ5dGVzOwotICBncHJfYmFzZS51bCA9IHN0YWNrdG9wLnVsIC0gQVNNX05FRURTX1JFR0lTVEVSUzY0IC0gTlVNX0dQUl9BUkdfUkVHSVNURVJTNjQ7Ci0gIGdwcl9lbmQudWwgPSBncHJfYmFzZS51bCArIE5VTV9HUFJfQVJHX1JFR0lTVEVSUzY0OwotICByZXN0LnVsID0gc3RhY2sgKyA2ICsgTlVNX0dQUl9BUkdfUkVHSVNURVJTNjQ7Ci0gIGZwcl9iYXNlLmQgPSBncHJfYmFzZS5kIC0gTlVNX0ZQUl9BUkdfUkVHSVNURVJTNjQ7Ci0gIGZwYXJnX2NvdW50ID0gMDsKLSAgbmV4dF9hcmcudWwgPSBncHJfYmFzZS51bDsKLQotICAvKiBDaGVjayB0aGF0IGV2ZXJ5dGhpbmcgc3RhcnRzIGFsaWduZWQgcHJvcGVybHkuICAqLwotICBGRklfQVNTRVJUICgoKHVuc2lnbmVkIGxvbmcpIChjaGFyICopIHN0YWNrICYgMHhGKSA9PSAwKTsKLSAgRkZJX0FTU0VSVCAoKCh1bnNpZ25lZCBsb25nKSBzdGFja3RvcC5jICYgMHhGKSA9PSAwKTsKLSAgRkZJX0FTU0VSVCAoKGJ5dGVzICYgMHhGKSA9PSAwKTsKLQotICAvKiBEZWFsIHdpdGggcmV0dXJuIHZhbHVlcyB0aGF0IGFyZSBhY3R1YWxseSBwYXNzLWJ5LXJlZmVyZW5jZS4gICovCi0gIGlmIChmbGFncyAmIEZMQUdfUkVUVkFMX1JFRkVSRU5DRSkKLSAgICAqbmV4dF9hcmcudWwrKyA9ICh1bnNpZ25lZCBsb25nKSAoY2hhciAqKSBlY2lmLT5ydmFsdWU7Ci0KLSAgLyogTm93IGZvciB0aGUgYXJndW1lbnRzLiAgKi8KLSAgcF9hcmd2LnYgPSBlY2lmLT5hdmFsdWU7Ci0gIGZvciAocHRyID0gZWNpZi0+Y2lmLT5hcmdfdHlwZXMsIGkgPSBlY2lmLT5jaWYtPm5hcmdzOwotICAgICAgIGkgPiAwOwotICAgICAgIGktLSwgcHRyKyssIHBfYXJndi52KyspCi0gICAgewotICAgICAgc3dpdGNoICgoKnB0ciktPnR5cGUpCi0JewotCWNhc2UgRkZJX1RZUEVfRkxPQVQ6Ci0JICBkb3VibGVfdG1wID0gKipwX2FyZ3YuZjsKLQkgICpuZXh0X2FyZy5mID0gKGZsb2F0KSBkb3VibGVfdG1wOwotCSAgaWYgKCsrbmV4dF9hcmcudWwgPT0gZ3ByX2VuZC51bCkKLQkgICAgbmV4dF9hcmcudWwgPSByZXN0LnVsOwotCSAgaWYgKGZwYXJnX2NvdW50IDwgTlVNX0ZQUl9BUkdfUkVHSVNURVJTNjQpCi0JICAgICpmcHJfYmFzZS5kKysgPSBkb3VibGVfdG1wOwotCSAgZnBhcmdfY291bnQrKzsKLQkgIEZGSV9BU1NFUlQgKGZsYWdzICYgRkxBR19GUF9BUkdVTUVOVFMpOwotCSAgYnJlYWs7Ci0KLQljYXNlIEZGSV9UWVBFX0RPVUJMRToKLQkgIGRvdWJsZV90bXAgPSAqKnBfYXJndi5kOwotCSAgKm5leHRfYXJnLmQgPSBkb3VibGVfdG1wOwotCSAgaWYgKCsrbmV4dF9hcmcudWwgPT0gZ3ByX2VuZC51bCkKLQkgICAgbmV4dF9hcmcudWwgPSByZXN0LnVsOwotCSAgaWYgKGZwYXJnX2NvdW50IDwgTlVNX0ZQUl9BUkdfUkVHSVNURVJTNjQpCi0JICAgICpmcHJfYmFzZS5kKysgPSBkb3VibGVfdG1wOwotCSAgZnBhcmdfY291bnQrKzsKLQkgIEZGSV9BU1NFUlQgKGZsYWdzICYgRkxBR19GUF9BUkdVTUVOVFMpOwotCSAgYnJlYWs7Ci0KLSNpZiBGRklfVFlQRV9MT05HRE9VQkxFICE9IEZGSV9UWVBFX0RPVUJMRQotCWNhc2UgRkZJX1RZUEVfTE9OR0RPVUJMRToKLQkgIGRvdWJsZV90bXAgPSAoKnBfYXJndi5kKVswXTsKLQkgICpuZXh0X2FyZy5kID0gZG91YmxlX3RtcDsKLQkgIGlmICgrK25leHRfYXJnLnVsID09IGdwcl9lbmQudWwpCi0JICAgIG5leHRfYXJnLnVsID0gcmVzdC51bDsKLQkgIGlmIChmcGFyZ19jb3VudCA8IE5VTV9GUFJfQVJHX1JFR0lTVEVSUzY0KQotCSAgICAqZnByX2Jhc2UuZCsrID0gZG91YmxlX3RtcDsKLQkgIGZwYXJnX2NvdW50Kys7Ci0JICBkb3VibGVfdG1wID0gKCpwX2FyZ3YuZClbMV07Ci0JICAqbmV4dF9hcmcuZCA9IGRvdWJsZV90bXA7Ci0JICBpZiAoKytuZXh0X2FyZy51bCA9PSBncHJfZW5kLnVsKQotCSAgICBuZXh0X2FyZy51bCA9IHJlc3QudWw7Ci0JICBpZiAoZnBhcmdfY291bnQgPCBOVU1fRlBSX0FSR19SRUdJU1RFUlM2NCkKLQkgICAgKmZwcl9iYXNlLmQrKyA9IGRvdWJsZV90bXA7Ci0JICBmcGFyZ19jb3VudCsrOwotCSAgRkZJX0FTU0VSVCAoX19MREJMX01BTlRfRElHX18gPT0gMTA2KTsKLQkgIEZGSV9BU1NFUlQgKGZsYWdzICYgRkxBR19GUF9BUkdVTUVOVFMpOwotCSAgYnJlYWs7Ci0jZW5kaWYKLQotCWNhc2UgRkZJX1RZUEVfU1RSVUNUOgotCSAgd29yZHMgPSAoKCpwdHIpLT5zaXplICsgNykgLyA4OwotCSAgaWYgKG5leHRfYXJnLnVsID49IGdwcl9iYXNlLnVsICYmIG5leHRfYXJnLnVsICsgd29yZHMgPiBncHJfZW5kLnVsKQotCSAgICB7Ci0JICAgICAgc2l6ZV90IGZpcnN0ID0gZ3ByX2VuZC5jIC0gbmV4dF9hcmcuYzsKLQkgICAgICBtZW1jcHkgKG5leHRfYXJnLmMsICpwX2FyZ3YuYywgZmlyc3QpOwotCSAgICAgIG1lbWNweSAocmVzdC5jLCAqcF9hcmd2LmMgKyBmaXJzdCwgKCpwdHIpLT5zaXplIC0gZmlyc3QpOwotCSAgICAgIG5leHRfYXJnLmMgPSByZXN0LmMgKyB3b3JkcyAqIDggLSBmaXJzdDsKLQkgICAgfQotCSAgZWxzZQotCSAgICB7Ci0JICAgICAgY2hhciAqd2hlcmUgPSBuZXh0X2FyZy5jOwotCi0JICAgICAgLyogU3RydWN0dXJlcyB3aXRoIHNpemUgbGVzcyB0aGFuIGVpZ2h0IGJ5dGVzIGFyZSBwYXNzZWQKLQkJIGxlZnQtcGFkZGVkLiAgKi8KLQkgICAgICBpZiAoKCpwdHIpLT5zaXplIDwgOCkKLQkJd2hlcmUgKz0gOCAtICgqcHRyKS0+c2l6ZTsKLQotCSAgICAgIG1lbWNweSAod2hlcmUsICpwX2FyZ3YuYywgKCpwdHIpLT5zaXplKTsKLQkgICAgICBuZXh0X2FyZy51bCArPSB3b3JkczsKLQkgICAgICBpZiAobmV4dF9hcmcudWwgPT0gZ3ByX2VuZC51bCkKLQkJbmV4dF9hcmcudWwgPSByZXN0LnVsOwotCSAgICB9Ci0JICBicmVhazsKLQotCWNhc2UgRkZJX1RZUEVfVUlOVDg6Ci0JICBncHJ2YWx1ZSA9ICoqcF9hcmd2LnVjOwotCSAgZ290byBwdXRncHI7Ci0JY2FzZSBGRklfVFlQRV9TSU5UODoKLQkgIGdwcnZhbHVlID0gKipwX2FyZ3Yuc2M7Ci0JICBnb3RvIHB1dGdwcjsKLQljYXNlIEZGSV9UWVBFX1VJTlQxNjoKLQkgIGdwcnZhbHVlID0gKipwX2FyZ3YudXM7Ci0JICBnb3RvIHB1dGdwcjsKLQljYXNlIEZGSV9UWVBFX1NJTlQxNjoKLQkgIGdwcnZhbHVlID0gKipwX2FyZ3Yuc3M7Ci0JICBnb3RvIHB1dGdwcjsKLQljYXNlIEZGSV9UWVBFX1VJTlQzMjoKLQkgIGdwcnZhbHVlID0gKipwX2FyZ3YudWk7Ci0JICBnb3RvIHB1dGdwcjsKLQljYXNlIEZGSV9UWVBFX0lOVDoKLQljYXNlIEZGSV9UWVBFX1NJTlQzMjoKLQkgIGdwcnZhbHVlID0gKipwX2FyZ3Yuc2k7Ci0JICBnb3RvIHB1dGdwcjsKLQotCWNhc2UgRkZJX1RZUEVfVUlOVDY0OgotCWNhc2UgRkZJX1RZUEVfU0lOVDY0OgotCWNhc2UgRkZJX1RZUEVfUE9JTlRFUjoKLQkgIGdwcnZhbHVlID0gKipwX2FyZ3YudWw7Ci0JcHV0Z3ByOgotCSAgKm5leHRfYXJnLnVsKysgPSBncHJ2YWx1ZTsKLQkgIGlmIChuZXh0X2FyZy51bCA9PSBncHJfZW5kLnVsKQotCSAgICBuZXh0X2FyZy51bCA9IHJlc3QudWw7Ci0JICBicmVhazsKLQl9Ci0gICAgfQotCi0gIEZGSV9BU1NFUlQgKGZsYWdzICYgRkxBR180X0dQUl9BUkdVTUVOVFMKLQkgICAgICB8fCAobmV4dF9hcmcudWwgPj0gZ3ByX2Jhc2UudWwKLQkJICAmJiBuZXh0X2FyZy51bCA8PSBncHJfYmFzZS51bCArIDQpKTsKKyMgaWYgRkZJX1RZUEVfTE9OR0RPVUJMRSAhPSBGRklfVFlQRV9ET1VCTEUKKyMgIGlmZGVmIFBPV0VSUEM2NAorICBmZmlfcHJlcF90eXBlc19saW51eDY0IChhYmkpOworIyAgZWxzZQorICBmZmlfcHJlcF90eXBlc19zeXN2IChhYmkpOworIyAgZW5kaWYKKyMgZW5kaWYKIH0KLQotCisjZW5kaWYKIAogLyogUGVyZm9ybSBtYWNoaW5lIGRlcGVuZGVudCBjaWYgcHJvY2Vzc2luZyAqLwotZmZpX3N0YXR1cworZmZpX3N0YXR1cyBGRklfSElEREVOCiBmZmlfcHJlcF9jaWZfbWFjaGRlcCAoZmZpX2NpZiAqY2lmKQogewotICAvKiBBbGwgdGhpcyBpcyBmb3IgdGhlIFNZU1YgYW5kIExJTlVYNjQgQUJJLiAgKi8KLSAgaW50IGk7Ci0gIGZmaV90eXBlICoqcHRyOwotICB1bnNpZ25lZCBieXRlczsKLSAgaW50IGZwYXJnX2NvdW50ID0gMCwgaW50YXJnX2NvdW50ID0gMDsKLSAgdW5zaWduZWQgZmxhZ3MgPSAwOwotICB1bnNpZ25lZCBzdHJ1Y3RfY29weV9zaXplID0gMDsKLSAgdW5zaWduZWQgdHlwZSA9IGNpZi0+cnR5cGUtPnR5cGU7Ci0gIHVuc2lnbmVkIHNpemUgPSBjaWYtPnJ0eXBlLT5zaXplOwotCi0gIGlmIChjaWYtPmFiaSAhPSBGRklfTElOVVg2NCkKLSAgICB7Ci0gICAgICAvKiBBbGwgdGhlIG1hY2hpbmUtaW5kZXBlbmRlbnQgY2FsY3VsYXRpb24gb2YgY2lmLT5ieXRlcyB3aWxsIGJlIHdyb25nLgotCSBSZWRvIHRoZSBjYWxjdWxhdGlvbiBmb3IgU1lTVi4gICovCi0KLSAgICAgIC8qIFNwYWNlIGZvciB0aGUgZnJhbWUgcG9pbnRlciwgY2FsbGVlJ3MgTFIsIGFuZCB0aGUgYXNtJ3MgdGVtcCByZWdzLiAgKi8KLSAgICAgIGJ5dGVzID0gKDIgKyBBU01fTkVFRFNfUkVHSVNURVJTKSAqIHNpemVvZiAoaW50KTsKLQotICAgICAgLyogU3BhY2UgZm9yIHRoZSBHUFIgcmVnaXN0ZXJzLiAgKi8KLSAgICAgIGJ5dGVzICs9IE5VTV9HUFJfQVJHX1JFR0lTVEVSUyAqIHNpemVvZiAoaW50KTsKLSAgICB9Ci0gIGVsc2UKLSAgICB7Ci0gICAgICAvKiA2NC1iaXQgQUJJLiAgKi8KLQotICAgICAgLyogU3BhY2UgZm9yIGJhY2tjaGFpbiwgQ1IsIExSLCBjYy9sZCBkb3VibGV3b3JkLCBUT0MgYW5kIHRoZSBhc20ncyB0ZW1wCi0JIHJlZ3MuICAqLwotICAgICAgYnl0ZXMgPSAoNiArIEFTTV9ORUVEU19SRUdJU1RFUlM2NCkgKiBzaXplb2YgKGxvbmcpOwotCi0gICAgICAvKiBTcGFjZSBmb3IgdGhlIG1hbmRhdG9yeSBwYXJtIHNhdmUgYXJlYSBhbmQgZ2VuZXJhbCByZWdpc3RlcnMuICAqLwotICAgICAgYnl0ZXMgKz0gMiAqIE5VTV9HUFJfQVJHX1JFR0lTVEVSUzY0ICogc2l6ZW9mIChsb25nKTsKLSAgICB9Ci0KLSAgLyogUmV0dXJuIHZhbHVlIGhhbmRsaW5nLiAgVGhlIHJ1bGVzIGZvciBTWVNWIGFyZSBhcyBmb2xsb3dzOgotICAgICAtIDMyLWJpdCAob3IgbGVzcykgaW50ZWdlciB2YWx1ZXMgYXJlIHJldHVybmVkIGluIGdwcjM7Ci0gICAgIC0gU3RydWN0dXJlcyBvZiBzaXplIDw9IDQgYnl0ZXMgYWxzbyByZXR1cm5lZCBpbiBncHIzOwotICAgICAtIDY0LWJpdCBpbnRlZ2VyIHZhbHVlcyBhbmQgc3RydWN0dXJlcyBiZXR3ZWVuIDUgYW5kIDggYnl0ZXMgYXJlIHJldHVybmVkCi0gICAgIGluIGdwcjMgYW5kIGdwcjQ7Ci0gICAgIC0gU2luZ2xlL2RvdWJsZSBGUCB2YWx1ZXMgYXJlIHJldHVybmVkIGluIGZwcjE7Ci0gICAgIC0gTGFyZ2VyIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCBzcGFjZSBhbmQgYSBwb2ludGVyIGlzIHBhc3NlZCBhcwotICAgICB0aGUgZmlyc3QgYXJndW1lbnQuCi0gICAgIC0gbG9uZyBkb3VibGVzIChpZiBub3QgZXF1aXZhbGVudCB0byBkb3VibGUpIGFyZSByZXR1cm5lZCBpbgotICAgICBmcHIxLGZwcjIgZm9yIExpbnV4IGFuZCBhcyBmb3IgbGFyZ2Ugc3RydWN0cyBmb3IgU3lzVi4KLSAgICAgRm9yIExJTlVYNjQ6Ci0gICAgIC0gaW50ZWdlciB2YWx1ZXMgaW4gZ3ByMzsKLSAgICAgLSBTdHJ1Y3R1cmVzL1VuaW9ucyBieSByZWZlcmVuY2U7Ci0gICAgIC0gU2luZ2xlL2RvdWJsZSBGUCB2YWx1ZXMgaW4gZnByMSwgbG9uZyBkb3VibGUgaW4gZnByMSxmcHIyLgotICAgICAtIHNvZnQtZmxvYXQgZmxvYXQvZG91YmxlcyBhcmUgdHJlYXRlZCBhcyBVSU5UMzIvVUlOVDY0IHJlc3BlY3RpdmxleS4KLSAgICAgLSBzb2Z0LWZsb2F0IGxvbmcgZG91YmxlcyBhcmUgcmV0dXJuZWQgaW4gZ3ByMy1ncHI2LiAgKi8KLSAgLyogRmlyc3QgdHJhbnNsYXRlIGZvciBzb2Z0ZmxvYXQvbm9ubGludXggKi8KLSAgaWYgKGNpZi0+YWJpID09IEZGSV9MSU5VWF9TT0ZUX0ZMT0FUKSB7Ci0JaWYgKHR5cGUgPT0gRkZJX1RZUEVfRkxPQVQpCi0JCXR5cGUgPSBGRklfVFlQRV9VSU5UMzI7Ci0JaWYgKHR5cGUgPT0gRkZJX1RZUEVfRE9VQkxFKQotCQl0eXBlID0gRkZJX1RZUEVfVUlOVDY0OwotCWlmICh0eXBlID09IEZGSV9UWVBFX0xPTkdET1VCTEUpCi0JCXR5cGUgPSBGRklfVFlQRV9VSU5UMTI4OwotICB9IGVsc2UgaWYgKGNpZi0+YWJpICE9IEZGSV9MSU5VWCAmJiBjaWYtPmFiaSAhPSBGRklfTElOVVg2NCkgewotI2lmIEZGSV9UWVBFX0xPTkdET1VCTEUgIT0gRkZJX1RZUEVfRE9VQkxFCi0JaWYgKHR5cGUgPT0gRkZJX1RZUEVfTE9OR0RPVUJMRSkKLQkJdHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKKyNpZmRlZiBQT1dFUlBDNjQKKyAgcmV0dXJuIGZmaV9wcmVwX2NpZl9saW51eDY0IChjaWYpOworI2Vsc2UKKyAgcmV0dXJuIGZmaV9wcmVwX2NpZl9zeXN2IChjaWYpOwogI2VuZGlmCi0gIH0KLQotICBzd2l0Y2ggKHR5cGUpCi0gICAgewotI2lmbmRlZiBfX05PX0ZQUlNfXwotI2lmIEZGSV9UWVBFX0xPTkdET1VCTEUgIT0gRkZJX1RZUEVfRE9VQkxFCi0gICAgY2FzZSBGRklfVFlQRV9MT05HRE9VQkxFOgotICAgICAgZmxhZ3MgfD0gRkxBR19SRVRVUk5TXzEyOEJJVFM7Ci0gICAgICAvKiBGYWxsIHRocm91Z2guICAqLwotI2VuZGlmCi0gICAgY2FzZSBGRklfVFlQRV9ET1VCTEU6Ci0gICAgICBmbGFncyB8PSBGTEFHX1JFVFVSTlNfNjRCSVRTOwotICAgICAgLyogRmFsbCB0aHJvdWdoLiAgKi8KLSAgICBjYXNlIEZGSV9UWVBFX0ZMT0FUOgotICAgICAgZmxhZ3MgfD0gRkxBR19SRVRVUk5TX0ZQOwotICAgICAgYnJlYWs7Ci0jZW5kaWYKLQotICAgIGNhc2UgRkZJX1RZUEVfVUlOVDEyODoKLSAgICAgIGZsYWdzIHw9IEZMQUdfUkVUVVJOU18xMjhCSVRTOwotICAgICAgLyogRmFsbCB0aHJvdWdoLiAgKi8KLSAgICBjYXNlIEZGSV9UWVBFX1VJTlQ2NDoKLSAgICBjYXNlIEZGSV9UWVBFX1NJTlQ2NDoKLSAgICAgIGZsYWdzIHw9IEZMQUdfUkVUVVJOU182NEJJVFM7Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgRkZJX1RZUEVfU1RSVUNUOgotICAgICAgaWYgKGNpZi0+YWJpID09IEZGSV9TWVNWKQotCXsKLQkgIC8qIFRoZSBmaW5hbCBTWVNWIEFCSSBzYXlzIHRoYXQgc3RydWN0dXJlcyBzbWFsbGVyIG9yIGVxdWFsIDggYnl0ZXMKLQkgICAgIGFyZSByZXR1cm5lZCBpbiByMy9yNC4gVGhlIEZGSV9HQ0NfU1lTViBBQkkgaW5zdGVhZCByZXR1cm5zIHRoZW0KLQkgICAgIGluIG1lbW9yeS4gICovCi0KLQkgIC8qIFRyZWF0IHN0cnVjdHMgd2l0aCBzaXplIDw9IDggYnl0ZXMuICAqLwotCSAgaWYgKHNpemUgPD0gOCkKLQkgICAgewotCSAgICAgIGZsYWdzIHw9IEZMQUdfUkVUVVJOU19TTVNUOwotCSAgICAgIC8qIFRoZXNlIHN0cnVjdHMgYXJlIHJldHVybmVkIGluIHIzLiBXZSBwYWNrIHRoZSB0eXBlIGFuZCB0aGUKLQkJIHByZWNhbGN1bGF0ZWQgc2hpZnQgdmFsdWUgKG5lZWRlZCBpbiB0aGUgc3lzdi5TKSBpbnRvIGZsYWdzLgotCQkgVGhlIHNhbWUgYXBwbGllcyBmb3IgdGhlIHN0cnVjdHMgcmV0dXJuZWQgaW4gcjMvcjQuICAqLwotCSAgICAgIGlmIChzaXplIDw9IDQpCi0JCXsKLQkJICBmbGFncyB8PSBGTEFHX1NZU1ZfU01TVF9SMzsKLQkJICBmbGFncyB8PSA4ICogKDQgLSBzaXplKSA8PCA4OwotCQkgIGJyZWFrOwotCQl9Ci0JICAgICAgLyogVGhlc2Ugc3RydWN0cyBhcmUgcmV0dXJuZWQgaW4gcjMgYW5kIHI0LiBTZWUgYWJvdmUuICAgKi8KLQkgICAgICBpZiAgKHNpemUgPD0gOCkKLQkJewotCQkgIGZsYWdzIHw9IEZMQUdfU1lTVl9TTVNUX1IzIHwgRkxBR19TWVNWX1NNU1RfUjQ7Ci0JCSAgZmxhZ3MgfD0gOCAqICg4IC0gc2l6ZSkgPDwgODsKLQkJICBicmVhazsKLQkJfQotCSAgICB9Ci0JfQotCi0gICAgICBpbnRhcmdfY291bnQrKzsKLSAgICAgIGZsYWdzIHw9IEZMQUdfUkVUVkFMX1JFRkVSRU5DRTsKLSAgICAgIC8qIEZhbGwgdGhyb3VnaC4gICovCi0gICAgY2FzZSBGRklfVFlQRV9WT0lEOgotICAgICAgZmxhZ3MgfD0gRkxBR19SRVRVUk5TX05PVEhJTkc7Ci0gICAgICBicmVhazsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICAvKiBSZXR1cm5zIDMyLWJpdCBpbnRlZ2VyLCBvciBzaW1pbGFyLiAgTm90aGluZyB0byBkbyBoZXJlLiAgKi8KLSAgICAgIGJyZWFrOwotICAgIH0KLQotICBpZiAoY2lmLT5hYmkgIT0gRkZJX0xJTlVYNjQpCi0gICAgLyogVGhlIGZpcnN0IE5VTV9HUFJfQVJHX1JFR0lTVEVSUyB3b3JkcyBvZiBpbnRlZ2VyIGFyZ3VtZW50cywgYW5kIHRoZQotICAgICAgIGZpcnN0IE5VTV9GUFJfQVJHX1JFR0lTVEVSUyBmcCBhcmd1bWVudHMsIGdvIGluIHJlZ2lzdGVyczsgdGhlIHJlc3QKLSAgICAgICBnb2VzIG9uIHRoZSBzdGFjay4gIFN0cnVjdHVyZXMgYW5kIGxvbmcgZG91YmxlcyAoaWYgbm90IGVxdWl2YWxlbnQKLSAgICAgICB0byBkb3VibGUpIGFyZSBwYXNzZWQgYXMgYSBwb2ludGVyIHRvIGEgY29weSBvZiB0aGUgc3RydWN0dXJlLgotICAgICAgIFN0dWZmIG9uIHRoZSBzdGFjayBuZWVkcyB0byBrZWVwIHByb3BlciBhbGlnbm1lbnQuICAqLwotICAgIGZvciAocHRyID0gY2lmLT5hcmdfdHlwZXMsIGkgPSBjaWYtPm5hcmdzOyBpID4gMDsgaS0tLCBwdHIrKykKLSAgICAgIHsKLQl1bnNpZ25lZCBzaG9ydCB0eXBlbnVtID0gKCpwdHIpLT50eXBlOwotCi0JLyogV2UgbWF5IG5lZWQgdG8gaGFuZGxlIHNvbWUgdmFsdWVzIGRlcGVuZGluZyBvbiBBQkkgKi8KLQlpZiAoY2lmLT5hYmkgPT0gRkZJX0xJTlVYX1NPRlRfRkxPQVQpIHsKLQkJaWYgKHR5cGVudW0gPT0gRkZJX1RZUEVfRkxPQVQpCi0JCQl0eXBlbnVtID0gRkZJX1RZUEVfVUlOVDMyOwotCQlpZiAodHlwZW51bSA9PSBGRklfVFlQRV9ET1VCTEUpCi0JCQl0eXBlbnVtID0gRkZJX1RZUEVfVUlOVDY0OwotCQlpZiAodHlwZW51bSA9PSBGRklfVFlQRV9MT05HRE9VQkxFKQotCQkJdHlwZW51bSA9IEZGSV9UWVBFX1VJTlQxMjg7Ci0JfSBlbHNlIGlmIChjaWYtPmFiaSAhPSBGRklfTElOVVggJiYgY2lmLT5hYmkgIT0gRkZJX0xJTlVYNjQpIHsKLSNpZiBGRklfVFlQRV9MT05HRE9VQkxFICE9IEZGSV9UWVBFX0RPVUJMRQotCQlpZiAodHlwZW51bSA9PSBGRklfVFlQRV9MT05HRE9VQkxFKQotCQkJdHlwZW51bSA9IEZGSV9UWVBFX1NUUlVDVDsKLSNlbmRpZgotCX0KLQotCXN3aXRjaCAodHlwZW51bSkgewotI2lmbmRlZiBfX05PX0ZQUlNfXwotCSAgY2FzZSBGRklfVFlQRV9GTE9BVDoKLQkgICAgZnBhcmdfY291bnQrKzsKLQkgICAgLyogZmxvYXRpbmcgc2luZ2xlcyBhcmUgbm90IDgtYWxpZ25lZCBvbiBzdGFjayAqLwotCSAgICBicmVhazsKLQotI2lmIEZGSV9UWVBFX0xPTkdET1VCTEUgIT0gRkZJX1RZUEVfRE9VQkxFCi0JICBjYXNlIEZGSV9UWVBFX0xPTkdET1VCTEU6Ci0JICAgIGZwYXJnX2NvdW50Kys7Ci0JICAgIC8qIEZhbGwgdGhydSAqLwotI2VuZGlmCi0JICBjYXNlIEZGSV9UWVBFX0RPVUJMRToKLQkgICAgZnBhcmdfY291bnQrKzsKLQkgICAgLyogSWYgdGhpcyBGUCBhcmcgaXMgZ29pbmcgb24gdGhlIHN0YWNrLCBpdCBtdXN0IGJlCi0JICAgICAgIDgtYnl0ZS1hbGlnbmVkLiAgKi8KLQkgICAgaWYgKGZwYXJnX2NvdW50ID4gTlVNX0ZQUl9BUkdfUkVHSVNURVJTCi0JCSYmIGludGFyZ19jb3VudCA+PSBOVU1fR1BSX0FSR19SRUdJU1RFUlMKLQkJJiYgaW50YXJnX2NvdW50ICUgMiAhPSAwKQotCSAgICAgIGludGFyZ19jb3VudCsrOwotCSAgICBicmVhazsKLSNlbmRpZgotCSAgY2FzZSBGRklfVFlQRV9VSU5UMTI4OgotCQkvKgotCQkgKiBBIGxvbmcgZG91YmxlIGluIEZGSV9MSU5VWF9TT0ZUX0ZMT0FUIGNhbiB1c2Ugb25seSBhIHNldAotCQkgKiBvZiBmb3VyIGNvbnNlY3V0aXZlIGdwcnMuIElmIHdlIGRvIG5vdCBoYXZlIGVub3VnaCwgd2UKLQkJICogaGF2ZSB0byBhZGp1c3QgdGhlIGludGFyZ19jb3VudCB2YWx1ZS4KLQkJICovCi0JCWlmIChpbnRhcmdfY291bnQgPj0gTlVNX0dQUl9BUkdfUkVHSVNURVJTIC0gMwotCQkJCSYmIGludGFyZ19jb3VudCA8IE5VTV9HUFJfQVJHX1JFR0lTVEVSUykKLQkJCWludGFyZ19jb3VudCA9IE5VTV9HUFJfQVJHX1JFR0lTVEVSUzsKLQkJaW50YXJnX2NvdW50ICs9IDQ7Ci0JCWJyZWFrOwotCi0JICBjYXNlIEZGSV9UWVBFX1VJTlQ2NDoKLQkgIGNhc2UgRkZJX1RZUEVfU0lOVDY0OgotCSAgICAvKiAnbG9uZyBsb25nJyBhcmd1bWVudHMgYXJlIHBhc3NlZCBhcyB0d28gd29yZHMsIGJ1dAotCSAgICAgICBlaXRoZXIgYm90aCB3b3JkcyBtdXN0IGZpdCBpbiByZWdpc3RlcnMgb3IgYm90aCBnbwotCSAgICAgICBvbiB0aGUgc3RhY2suICBJZiB0aGV5IGdvIG9uIHRoZSBzdGFjaywgdGhleSBtdXN0Ci0JICAgICAgIGJlIDgtYnl0ZS1hbGlnbmVkLgotCi0JICAgICAgIEFsc28sIG9ubHkgY2VydGFpbiByZWdpc3RlciBwYWlycyBjYW4gYmUgdXNlZCBmb3IKLQkgICAgICAgcGFzc2luZyBsb25nIGxvbmcgaW50IC0tIHNwZWNpZmljYWxseSAocjMscjQpLCAocjUscjYpLAotCSAgICAgICAocjcscjgpLCAocjkscjEwKS4KLQkgICAgKi8KLQkgICAgaWYgKGludGFyZ19jb3VudCA9PSBOVU1fR1BSX0FSR19SRUdJU1RFUlMtMQotCQl8fCBpbnRhcmdfY291bnQgJSAyICE9IDApCi0JICAgICAgaW50YXJnX2NvdW50Kys7Ci0JICAgIGludGFyZ19jb3VudCArPSAyOwotCSAgICBicmVhazsKLQotCSAgY2FzZSBGRklfVFlQRV9TVFJVQ1Q6Ci0JICAgIC8qIFdlIG11c3QgYWxsb2NhdGUgc3BhY2UgZm9yIGEgY29weSBvZiB0aGVzZSB0byBlbmZvcmNlCi0JICAgICAgIHBhc3MtYnktdmFsdWUuICBQYWQgdGhlIHNwYWNlIHVwIHRvIGEgbXVsdGlwbGUgb2YgMTYKLQkgICAgICAgYnl0ZXMgKHRoZSBtYXhpbXVtIGFsaWdubWVudCByZXF1aXJlZCBmb3IgYW55dGhpbmcgdW5kZXIKLQkgICAgICAgdGhlIFNZU1YgQUJJKS4gICovCi0JICAgIHN0cnVjdF9jb3B5X3NpemUgKz0gKCgqcHRyKS0+c2l6ZSArIDE1KSAmIH4weEY7Ci0JICAgIC8qIEZhbGwgdGhyb3VnaCAoYWxsb2NhdGUgc3BhY2UgZm9yIHRoZSBwb2ludGVyKS4gICovCi0KLQkgIGNhc2UgRkZJX1RZUEVfUE9JTlRFUjoKLQkgIGNhc2UgRkZJX1RZUEVfSU5UOgotCSAgY2FzZSBGRklfVFlQRV9VSU5UMzI6Ci0JICBjYXNlIEZGSV9UWVBFX1NJTlQzMjoKLQkgIGNhc2UgRkZJX1RZUEVfVUlOVDE2OgotCSAgY2FzZSBGRklfVFlQRV9TSU5UMTY6Ci0JICBjYXNlIEZGSV9UWVBFX1VJTlQ4OgotCSAgY2FzZSBGRklfVFlQRV9TSU5UODoKLQkgICAgLyogRXZlcnl0aGluZyBlbHNlIGlzIHBhc3NlZCBhcyBhIDQtYnl0ZSB3b3JkIGluIGEgR1BSLCBlaXRoZXIKLQkgICAgICAgdGhlIG9iamVjdCBpdHNlbGYgb3IgYSBwb2ludGVyIHRvIGl0LiAgKi8KLQkgICAgaW50YXJnX2NvdW50Kys7Ci0JICAgIGJyZWFrOwotCSAgZGVmYXVsdDoKLQkJRkZJX0FTU0VSVCAoMCk7Ci0JICB9Ci0gICAgICB9Ci0gIGVsc2UKLSAgICBmb3IgKHB0ciA9IGNpZi0+YXJnX3R5cGVzLCBpID0gY2lmLT5uYXJnczsgaSA+IDA7IGktLSwgcHRyKyspCi0gICAgICB7Ci0Jc3dpdGNoICgoKnB0ciktPnR5cGUpCi0JICB7Ci0jaWYgRkZJX1RZUEVfTE9OR0RPVUJMRSAhPSBGRklfVFlQRV9ET1VCTEUKLQkgIGNhc2UgRkZJX1RZUEVfTE9OR0RPVUJMRToKLQkgICAgaWYgKGNpZi0+YWJpID09IEZGSV9MSU5VWF9TT0ZUX0ZMT0FUKQotCSAgICAgIGludGFyZ19jb3VudCArPSA0OwotCSAgICBlbHNlCi0JICAgICAgewotCQlmcGFyZ19jb3VudCArPSAyOwotCQlpbnRhcmdfY291bnQgKz0gMjsKLQkgICAgICB9Ci0JICAgIGJyZWFrOwotI2VuZGlmCi0JICBjYXNlIEZGSV9UWVBFX0ZMT0FUOgotCSAgY2FzZSBGRklfVFlQRV9ET1VCTEU6Ci0JICAgIGZwYXJnX2NvdW50Kys7Ci0JICAgIGludGFyZ19jb3VudCsrOwotCSAgICBicmVhazsKLQotCSAgY2FzZSBGRklfVFlQRV9TVFJVQ1Q6Ci0JICAgIGludGFyZ19jb3VudCArPSAoKCpwdHIpLT5zaXplICsgNykgLyA4OwotCSAgICBicmVhazsKLQotCSAgY2FzZSBGRklfVFlQRV9QT0lOVEVSOgotCSAgY2FzZSBGRklfVFlQRV9VSU5UNjQ6Ci0JICBjYXNlIEZGSV9UWVBFX1NJTlQ2NDoKLQkgIGNhc2UgRkZJX1RZUEVfSU5UOgotCSAgY2FzZSBGRklfVFlQRV9VSU5UMzI6Ci0JICBjYXNlIEZGSV9UWVBFX1NJTlQzMjoKLQkgIGNhc2UgRkZJX1RZUEVfVUlOVDE2OgotCSAgY2FzZSBGRklfVFlQRV9TSU5UMTY6Ci0JICBjYXNlIEZGSV9UWVBFX1VJTlQ4OgotCSAgY2FzZSBGRklfVFlQRV9TSU5UODoKLQkgICAgLyogRXZlcnl0aGluZyBlbHNlIGlzIHBhc3NlZCBhcyBhIDgtYnl0ZSB3b3JkIGluIGEgR1BSLCBlaXRoZXIKLQkgICAgICAgdGhlIG9iamVjdCBpdHNlbGYgb3IgYSBwb2ludGVyIHRvIGl0LiAgKi8KLQkgICAgaW50YXJnX2NvdW50Kys7Ci0JICAgIGJyZWFrOwotCSAgZGVmYXVsdDoKLQkJRkZJX0FTU0VSVCAoMCk7Ci0JICB9Ci0gICAgICB9Ci0KLSNpZm5kZWYgX19OT19GUFJTX18KLSAgaWYgKGZwYXJnX2NvdW50ICE9IDApCi0gICAgZmxhZ3MgfD0gRkxBR19GUF9BUkdVTUVOVFM7Ci0jZW5kaWYKLSAgaWYgKGludGFyZ19jb3VudCA+IDQpCi0gICAgZmxhZ3MgfD0gRkxBR180X0dQUl9BUkdVTUVOVFM7Ci0gIGlmIChzdHJ1Y3RfY29weV9zaXplICE9IDApCi0gICAgZmxhZ3MgfD0gRkxBR19BUkdfTkVFRFNfQ09QWTsKLQotICBpZiAoY2lmLT5hYmkgIT0gRkZJX0xJTlVYNjQpCi0gICAgewotI2lmbmRlZiBfX05PX0ZQUlNfXwotICAgICAgLyogU3BhY2UgZm9yIHRoZSBGUFIgcmVnaXN0ZXJzLCBpZiBuZWVkZWQuICAqLwotICAgICAgaWYgKGZwYXJnX2NvdW50ICE9IDApCi0JYnl0ZXMgKz0gTlVNX0ZQUl9BUkdfUkVHSVNURVJTICogc2l6ZW9mIChkb3VibGUpOwotI2VuZGlmCi0KLSAgICAgIC8qIFN0YWNrIHNwYWNlLiAgKi8KLSAgICAgIGlmIChpbnRhcmdfY291bnQgPiBOVU1fR1BSX0FSR19SRUdJU1RFUlMpCi0JYnl0ZXMgKz0gKGludGFyZ19jb3VudCAtIE5VTV9HUFJfQVJHX1JFR0lTVEVSUykgKiBzaXplb2YgKGludCk7Ci0jaWZuZGVmIF9fTk9fRlBSU19fCi0gICAgICBpZiAoZnBhcmdfY291bnQgPiBOVU1fRlBSX0FSR19SRUdJU1RFUlMpCi0JYnl0ZXMgKz0gKGZwYXJnX2NvdW50IC0gTlVNX0ZQUl9BUkdfUkVHSVNURVJTKSAqIHNpemVvZiAoZG91YmxlKTsKLSNlbmRpZgotICAgIH0KLSAgZWxzZQotICAgIHsKLSNpZm5kZWYgX19OT19GUFJTX18KLSAgICAgIC8qIFNwYWNlIGZvciB0aGUgRlBSIHJlZ2lzdGVycywgaWYgbmVlZGVkLiAgKi8KLSAgICAgIGlmIChmcGFyZ19jb3VudCAhPSAwKQotCWJ5dGVzICs9IE5VTV9GUFJfQVJHX1JFR0lTVEVSUzY0ICogc2l6ZW9mIChkb3VibGUpOwotI2VuZGlmCi0KLSAgICAgIC8qIFN0YWNrIHNwYWNlLiAgKi8KLSAgICAgIGlmIChpbnRhcmdfY291bnQgPiBOVU1fR1BSX0FSR19SRUdJU1RFUlM2NCkKLQlieXRlcyArPSAoaW50YXJnX2NvdW50IC0gTlVNX0dQUl9BUkdfUkVHSVNURVJTNjQpICogc2l6ZW9mIChsb25nKTsKLSAgICB9Ci0KLSAgLyogVGhlIHN0YWNrIHNwYWNlIGFsbG9jYXRlZCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDE2IGJ5dGVzLiAgKi8KLSAgYnl0ZXMgPSAoYnl0ZXMgKyAxNSkgJiB+MHhGOwotCi0gIC8qIEFkZCBpbiB0aGUgc3BhY2UgZm9yIHRoZSBjb3BpZWQgc3RydWN0dXJlcy4gICovCi0gIGJ5dGVzICs9IHN0cnVjdF9jb3B5X3NpemU7Ci0KLSAgY2lmLT5mbGFncyA9IGZsYWdzOwotICBjaWYtPmJ5dGVzID0gYnl0ZXM7Ci0KLSAgcmV0dXJuIEZGSV9PSzsKIH0KIAotZXh0ZXJuIHZvaWQgZmZpX2NhbGxfU1lTVihleHRlbmRlZF9jaWYgKiwgdW5zaWduZWQsIHVuc2lnbmVkLCB1bnNpZ25lZCAqLAotCQkJICB2b2lkICgqZm4pKHZvaWQpKTsKLWV4dGVybiB2b2lkIEZGSV9ISURERU4gZmZpX2NhbGxfTElOVVg2NChleHRlbmRlZF9jaWYgKiwgdW5zaWduZWQgbG9uZywKLQkJCQkJdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyAqLAotCQkJCQl2b2lkICgqZm4pKHZvaWQpKTsKK2ZmaV9zdGF0dXMgRkZJX0hJRERFTgorZmZpX3ByZXBfY2lmX21hY2hkZXBfdmFyIChmZmlfY2lmICpjaWYsCisJCQkgIHVuc2lnbmVkIGludCBuZml4ZWRhcmdzIE1BWUJFX1VOVVNFRCwKKwkJCSAgdW5zaWduZWQgaW50IG50b3RhbGFyZ3MgTUFZQkVfVU5VU0VEKQoreworI2lmZGVmIFBPV0VSUEM2NAorICByZXR1cm4gZmZpX3ByZXBfY2lmX2xpbnV4NjRfdmFyIChjaWYsIG5maXhlZGFyZ3MsIG50b3RhbGFyZ3MpOworI2Vsc2UKKyAgcmV0dXJuIGZmaV9wcmVwX2NpZl9zeXN2IChjaWYpOworI2VuZGlmCit9CiAKIHZvaWQKIGZmaV9jYWxsKGZmaV9jaWYgKmNpZiwgdm9pZCAoKmZuKSh2b2lkKSwgdm9pZCAqcnZhbHVlLCB2b2lkICoqYXZhbHVlKQogewotICAvKgotICAgKiBUaGUgZmluYWwgU1lTViBBQkkgc2F5cyB0aGF0IHN0cnVjdHVyZXMgc21hbGxlciBvciBlcXVhbCA4IGJ5dGVzCi0gICAqIGFyZSByZXR1cm5lZCBpbiByMy9yNC4gVGhlIEZGSV9HQ0NfU1lTViBBQkkgaW5zdGVhZCByZXR1cm5zIHRoZW0KLSAgICogaW4gbWVtb3J5LgotICAgKgotICAgKiBKdXN0IHRvIGtlZXAgdGhpbmdzIHNpbXBsZSBmb3IgdGhlIGFzc2VtYmx5IGNvZGUsIHdlIHdpbGwgYWx3YXlzCi0gICAqIGJvdW5jZS1idWZmZXIgc3RydWN0IHJldHVybiB2YWx1ZXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDggYnl0ZXMuCi0gICAqIFRoaXMgYWxsb3dzIHRoZSBBU00gdG8gaGFuZGxlIFNZU1Ygc21hbGwgc3RydWN0dXJlcyBieSBkaXJlY3RseQotICAgKiB3cml0aW5nIHIzIGFuZCByNCB0byBtZW1vcnkgd2l0aG91dCB3b3JyeWluZyBhYm91dCBzdHJ1Y3Qgc2l6ZS4KLSAgICovCi0gIHVuc2lnbmVkIGludCBzbXN0X2J1ZmZlclsyXTsKKyAgLyogVGhlIGZpbmFsIFNZU1YgQUJJIHNheXMgdGhhdCBzdHJ1Y3R1cmVzIHNtYWxsZXIgb3IgZXF1YWwgOCBieXRlcworICAgICBhcmUgcmV0dXJuZWQgaW4gcjMvcjQuICBBIGRyYWZ0IEFCSSB1c2VkIGJ5IGxpbnV4IGluc3RlYWQgcmV0dXJucworICAgICB0aGVtIGluIG1lbW9yeS4KKworICAgICBXZSBib3VuY2UtYnVmZmVyIFNZU1Ygc21hbGwgc3RydWN0IHJldHVybiB2YWx1ZXMgc28gdGhhdCBzeXN2LlMKKyAgICAgY2FuIHdyaXRlIHIzIGFuZCByNCB0byBtZW1vcnkgd2l0aG91dCB3b3JyeWluZyBhYm91dCBzdHJ1Y3Qgc2l6ZS4KKyAgIAorICAgICBGb3IgRUxGdjIgQUJJLCB1c2UgYSBib3VuY2UgYnVmZmVyIGZvciBob21vZ2VuZW91cyBzdHJ1Y3RzIHRvbywKKyAgICAgZm9yIHNpbWlsYXIgcmVhc29ucy4gICovCisgIHVuc2lnbmVkIGxvbmcgc21zdF9idWZmZXJbOF07CiAgIGV4dGVuZGVkX2NpZiBlY2lmOwotICB1bnNpZ25lZCBpbnQgcnNpemUgPSAwOwogCiAgIGVjaWYuY2lmID0gY2lmOwogICBlY2lmLmF2YWx1ZSA9IGF2YWx1ZTsKIAotICAvKiBFbnN1cmUgdGhhdCB3ZSBoYXZlIGEgdmFsaWQgc3RydWN0IHJldHVybiB2YWx1ZSAqLwogICBlY2lmLnJ2YWx1ZSA9IHJ2YWx1ZTsKLSAgaWYgKGNpZi0+cnR5cGUtPnR5cGUgPT0gRkZJX1RZUEVfU1RSVUNUKSB7Ci0gICAgcnNpemUgPSBjaWYtPnJ0eXBlLT5zaXplOwotICAgIGlmIChyc2l6ZSA8PSA4KQotICAgICAgZWNpZi5ydmFsdWUgPSBzbXN0X2J1ZmZlcjsKLSAgICBlbHNlIGlmICghcnZhbHVlKQotICAgICAgZWNpZi5ydmFsdWUgPSBhbGxvY2EocnNpemUpOwotICB9CisgIGlmICgoY2lmLT5mbGFncyAmIEZMQUdfUkVUVVJOU19TTVNUKSAhPSAwKQorICAgIGVjaWYucnZhbHVlID0gc21zdF9idWZmZXI7CisgIC8qIEVuc3VyZSB0aGF0IHdlIGhhdmUgYSB2YWxpZCBzdHJ1Y3QgcmV0dXJuIHZhbHVlLgorICAgICBGSVhNRTogSXNuJ3QgdGhpcyBqdXN0IHBhcGVyaW5nIG92ZXIgYSB1c2VyIHByb2JsZW0/ICAqLworICBlbHNlIGlmICghcnZhbHVlICYmIGNpZi0+cnR5cGUtPnR5cGUgPT0gRkZJX1RZUEVfU1RSVUNUKQorICAgIGVjaWYucnZhbHVlID0gYWxsb2NhIChjaWYtPnJ0eXBlLT5zaXplKTsKIAotICBzd2l0Y2ggKGNpZi0+YWJpKQotICAgIHsKLSNpZm5kZWYgUE9XRVJQQzY0Ci0jIGlmbmRlZiBfX05PX0ZQUlNfXwotICAgIGNhc2UgRkZJX1NZU1Y6Ci0gICAgY2FzZSBGRklfR0NDX1NZU1Y6Ci0gICAgY2FzZSBGRklfTElOVVg6Ci0jIGVuZGlmCi0gICAgY2FzZSBGRklfTElOVVhfU09GVF9GTE9BVDoKLSAgICAgIGZmaV9jYWxsX1NZU1YgKCZlY2lmLCAtY2lmLT5ieXRlcywgY2lmLT5mbGFncywgZWNpZi5ydmFsdWUsIGZuKTsKLSAgICAgIGJyZWFrOworI2lmZGVmIFBPV0VSUEM2NAorICBmZmlfY2FsbF9MSU5VWDY0ICgmZWNpZiwgLShsb25nKSBjaWYtPmJ5dGVzLCBjaWYtPmZsYWdzLCBlY2lmLnJ2YWx1ZSwgZm4pOwogI2Vsc2UKLSAgICBjYXNlIEZGSV9MSU5VWDY0OgotICAgICAgZmZpX2NhbGxfTElOVVg2NCAoJmVjaWYsIC0obG9uZykgY2lmLT5ieXRlcywgY2lmLT5mbGFncywgZWNpZi5ydmFsdWUsIGZuKTsKLSAgICAgIGJyZWFrOworICBmZmlfY2FsbF9TWVNWICgmZWNpZiwgLWNpZi0+Ynl0ZXMsIGNpZi0+ZmxhZ3MsIGVjaWYucnZhbHVlLCBmbik7CiAjZW5kaWYKLSAgICBkZWZhdWx0OgotICAgICAgRkZJX0FTU0VSVCAoMCk7Ci0gICAgICBicmVhazsKLSAgICB9CiAKICAgLyogQ2hlY2sgZm9yIGEgYm91bmNlLWJ1ZmZlcmVkIHJldHVybiB2YWx1ZSAqLwogICBpZiAocnZhbHVlICYmIGVjaWYucnZhbHVlID09IHNtc3RfYnVmZmVyKQotICAgIG1lbWNweShydmFsdWUsIHNtc3RfYnVmZmVyLCByc2l6ZSk7Ci19Ci0KLQotI2lmbmRlZiBQT1dFUlBDNjQKLSNkZWZpbmUgTUlOX0NBQ0hFX0xJTkVfU0laRSA4Ci0KLXN0YXRpYyB2b2lkCi1mbHVzaF9pY2FjaGUgKGNoYXIgKndyYWRkciwgY2hhciAqeGFkZHIsIGludCBzaXplKQotewotICBpbnQgaTsKLSAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkgKz0gTUlOX0NBQ0hFX0xJTkVfU0laRSkKLSAgICBfX2FzbV9fIHZvbGF0aWxlICgiaWNiaSAwLCUwOyIgImRjYmYgMCwlMTsiCi0JCSAgICAgIDogOiAiciIgKHhhZGRyICsgaSksICJyIiAod3JhZGRyICsgaSkgOiAibWVtb3J5Iik7Ci0gIF9fYXNtX18gdm9sYXRpbGUgKCJpY2JpIDAsJTA7IiAiZGNiZiAwLCUxOyIgInN5bmM7IiAiaXN5bmM7IgotCQkgICAgOiA6ICJyIih4YWRkciArIHNpemUgLSAxKSwgInIiKHdyYWRkciArIHNpemUgLSAxKQotCQkgICAgOiAibWVtb3J5Iik7Ci19CisgICAgeworICAgICAgdW5zaWduZWQgaW50IHJzaXplID0gY2lmLT5ydHlwZS0+c2l6ZTsKKyNpZm5kZWYgX19MSVRUTEVfRU5ESUFOX18KKyAgICAgIC8qIFRoZSBTWVNWIEFCSSByZXR1cm5zIGEgc3RydWN0dXJlIG9mIHVwIHRvIDQgYnl0ZXMgaW4gc2l6ZQorCSBsZWZ0LXBhZGRlZCBpbiByMy4gICovCisjIGlmbmRlZiBQT1dFUlBDNjQKKyAgICAgIGlmIChyc2l6ZSA8PSA0KQorCW1lbWNweSAocnZhbHVlLCAoY2hhciAqKSBzbXN0X2J1ZmZlciArIDQgLSByc2l6ZSwgcnNpemUpOworICAgICAgZWxzZQorIyBlbmRpZgorCS8qIFRoZSBTWVNWIEFCSSByZXR1cm5zIGEgc3RydWN0dXJlIG9mIHVwIHRvIDggYnl0ZXMgaW4gc2l6ZQorCSAgIGxlZnQtcGFkZGVkIGluIHIzL3I0LCBhbmQgdGhlIEVMRnYyIEFCSSBzaW1pbGFybHkgcmV0dXJucyBhCisJICAgc3RydWN0dXJlIG9mIHVwIHRvIDggYnl0ZXMgaW4gc2l6ZSBsZWZ0LXBhZGRlZCBpbiByMy4gICovCisJaWYgKHJzaXplIDw9IDgpCisJICBtZW1jcHkgKHJ2YWx1ZSwgKGNoYXIgKikgc21zdF9idWZmZXIgKyA4IC0gcnNpemUsIHJzaXplKTsKKwllbHNlCiAjZW5kaWYKKwkgIG1lbWNweSAocnZhbHVlLCBzbXN0X2J1ZmZlciwgcnNpemUpOworICAgIH0KK30KKwogCiBmZmlfc3RhdHVzCiBmZmlfcHJlcF9jbG9zdXJlX2xvYyAoZmZpX2Nsb3N1cmUgKmNsb3N1cmUsCkBAIC0xMDIyLDQ4MCArMTM0LDggQEAKIAkJICAgICAgdm9pZCAqY29kZWxvYykKIHsKICNpZmRlZiBQT1dFUlBDNjQKLSAgdm9pZCAqKnRyYW1wID0gKHZvaWQgKiopICZjbG9zdXJlLT50cmFtcFswXTsKLQotICBpZiAoY2lmLT5hYmkgIT0gRkZJX0xJTlVYNjQpCi0gICAgcmV0dXJuIEZGSV9CQURfQUJJOwotICAvKiBDb3B5IGZ1bmN0aW9uIGFkZHJlc3MgYW5kIFRPQyBmcm9tIGZmaV9jbG9zdXJlX0xJTlVYNjQuICAqLwotICBtZW1jcHkgKHRyYW1wLCAoY2hhciAqKSBmZmlfY2xvc3VyZV9MSU5VWDY0LCAxNik7Ci0gIHRyYW1wWzJdID0gY29kZWxvYzsKKyAgcmV0dXJuIGZmaV9wcmVwX2Nsb3N1cmVfbG9jX2xpbnV4NjQgKGNsb3N1cmUsIGNpZiwgZnVuLCB1c2VyX2RhdGEsIGNvZGVsb2MpOwogI2Vsc2UKLSAgdW5zaWduZWQgaW50ICp0cmFtcDsKLQotICBpZiAoISAoY2lmLT5hYmkgPT0gRkZJX0dDQ19TWVNWIAotCSB8fCBjaWYtPmFiaSA9PSBGRklfU1lTVgotCSB8fCBjaWYtPmFiaSA9PSBGRklfTElOVVgKLQkgfHwgY2lmLT5hYmkgPT0gRkZJX0xJTlVYX1NPRlRfRkxPQVQpKQotICAgIHJldHVybiBGRklfQkFEX0FCSTsKLQotICB0cmFtcCA9ICh1bnNpZ25lZCBpbnQgKikgJmNsb3N1cmUtPnRyYW1wWzBdOwotICB0cmFtcFswXSA9IDB4N2MwODAyYTY7ICAvKiAgIG1mbHIgICAgcjAgKi8KLSAgdHJhbXBbMV0gPSAweDQ4MDAwMDBkOyAgLyogICBibCAgICAgIDEwIDx0cmFtcG9saW5lX2luaXRpYWwrMHgxMD4gKi8KLSAgdHJhbXBbNF0gPSAweDdkNjgwMmE2OyAgLyogICBtZmxyICAgIHIxMSAqLwotICB0cmFtcFs1XSA9IDB4N2MwODAzYTY7ICAvKiAgIG10bHIgICAgcjAgKi8KLSAgdHJhbXBbNl0gPSAweDgwMGIwMDAwOyAgLyogICBsd3ogICAgIHIwLDAocjExKSAqLwotICB0cmFtcFs3XSA9IDB4ODE2YjAwMDQ7ICAvKiAgIGx3eiAgICAgcjExLDQocjExKSAqLwotICB0cmFtcFs4XSA9IDB4N2MwOTAzYTY7ICAvKiAgIG10Y3RyICAgcjAgKi8KLSAgdHJhbXBbOV0gPSAweDRlODAwNDIwOyAgLyogICBiY3RyICovCi0gICoodm9pZCAqKikgJnRyYW1wWzJdID0gKHZvaWQgKikgZmZpX2Nsb3N1cmVfU1lTVjsgLyogZnVuY3Rpb24gKi8KLSAgKih2b2lkICoqKSAmdHJhbXBbM10gPSBjb2RlbG9jOyAgICAgICAgICAgICAgICAgICAvKiBjb250ZXh0ICovCi0KLSAgLyogRmx1c2ggdGhlIGljYWNoZS4gICovCi0gIGZsdXNoX2ljYWNoZSAoKGNoYXIgKil0cmFtcCwgKGNoYXIgKiljb2RlbG9jLCBGRklfVFJBTVBPTElORV9TSVpFKTsKKyAgcmV0dXJuIGZmaV9wcmVwX2Nsb3N1cmVfbG9jX3N5c3YgKGNsb3N1cmUsIGNpZiwgZnVuLCB1c2VyX2RhdGEsIGNvZGVsb2MpOwogI2VuZGlmCi0KLSAgY2xvc3VyZS0+Y2lmID0gY2lmOwotICBjbG9zdXJlLT5mdW4gPSBmdW47Ci0gIGNsb3N1cmUtPnVzZXJfZGF0YSA9IHVzZXJfZGF0YTsKLQotICByZXR1cm4gRkZJX09LOwotfQotCi10eXBlZGVmIHVuaW9uCi17Ci0gIGZsb2F0IGY7Ci0gIGRvdWJsZSBkOwotfSBmZmlfZGJsZmw7Ci0KLWludCBmZmlfY2xvc3VyZV9oZWxwZXJfU1lTViAoZmZpX2Nsb3N1cmUgKiwgdm9pZCAqLCB1bnNpZ25lZCBsb25nICosCi0JCQkgICAgIGZmaV9kYmxmbCAqLCB1bnNpZ25lZCBsb25nICopOwotCi0vKiBCYXNpY2FsbHkgdGhlIHRyYW1wb2xpbmUgaW52b2tlcyBmZmlfY2xvc3VyZV9TWVNWLCBhbmQgb24KLSAqIGVudHJ5LCByMTEgaG9sZHMgdGhlIGFkZHJlc3Mgb2YgdGhlIGNsb3N1cmUuCi0gKiBBZnRlciBzdG9yaW5nIHRoZSByZWdpc3RlcnMgdGhhdCBjb3VsZCBwb3NzaWJseSBjb250YWluCi0gKiBwYXJhbWV0ZXJzIHRvIGJlIHBhc3NlZCBpbnRvIHRoZSBzdGFjayBmcmFtZSBhbmQgc2V0dGluZwotICogdXAgc3BhY2UgZm9yIGEgcmV0dXJuIHZhbHVlLCBmZmlfY2xvc3VyZV9TWVNWIGludm9rZXMgdGhlCi0gKiBmb2xsb3dpbmcgaGVscGVyIGZ1bmN0aW9uIHRvIGRvIG1vc3Qgb2YgdGhlIHdvcmsKLSAqLwotCi1pbnQKLWZmaV9jbG9zdXJlX2hlbHBlcl9TWVNWIChmZmlfY2xvc3VyZSAqY2xvc3VyZSwgdm9pZCAqcnZhbHVlLAotCQkJIHVuc2lnbmVkIGxvbmcgKnBnciwgZmZpX2RibGZsICpwZnIsCi0JCQkgdW5zaWduZWQgbG9uZyAqcHN0KQotewotICAvKiBydmFsdWUgaXMgdGhlIHBvaW50ZXIgdG8gc3BhY2UgZm9yIHJldHVybiB2YWx1ZSBpbiBjbG9zdXJlIGFzc2VtYmx5ICovCi0gIC8qIHBnciBpcyB0aGUgcG9pbnRlciB0byB3aGVyZSByMy1yMTAgYXJlIHN0b3JlZCBpbiBmZmlfY2xvc3VyZV9TWVNWICovCi0gIC8qIHBmciBpcyB0aGUgcG9pbnRlciB0byB3aGVyZSBmMS1mOCBhcmUgc3RvcmVkIGluIGZmaV9jbG9zdXJlX1NZU1YgICovCi0gIC8qIHBzdCBpcyB0aGUgcG9pbnRlciB0byBvdXRnb2luZyBwYXJhbWV0ZXIgc3RhY2sgaW4gb3JpZ2luYWwgY2FsbGVyICovCi0KLSAgdm9pZCAqKiAgICAgICAgICBhdmFsdWU7Ci0gIGZmaV90eXBlICoqICAgICAgYXJnX3R5cGVzOwotICBsb25nICAgICAgICAgICAgIGksIGF2bjsKLSNpZm5kZWYgX19OT19GUFJTX18KLSAgbG9uZyAgICAgICAgICAgICBuZiA9IDA7ICAgLyogbnVtYmVyIG9mIGZsb2F0aW5nIHJlZ2lzdGVycyBhbHJlYWR5IHVzZWQgKi8KLSNlbmRpZgotICBsb25nICAgICAgICAgICAgIG5nID0gMDsgICAvKiBudW1iZXIgb2YgZ2VuZXJhbCByZWdpc3RlcnMgYWxyZWFkeSB1c2VkICovCi0KLSAgZmZpX2NpZiAqY2lmID0gY2xvc3VyZS0+Y2lmOwotICB1bnNpZ25lZCAgICAgICBzaXplICAgICA9IGNpZi0+cnR5cGUtPnNpemU7Ci0gIHVuc2lnbmVkIHNob3J0IHJ0eXBlbnVtID0gY2lmLT5ydHlwZS0+dHlwZTsKLQotICBhdmFsdWUgPSBhbGxvY2EgKGNpZi0+bmFyZ3MgKiBzaXplb2YgKHZvaWQgKikpOwotCi0gIC8qIEZpcnN0IHRyYW5zbGF0ZSBmb3Igc29mdGZsb2F0L25vbmxpbnV4ICovCi0gIGlmIChjaWYtPmFiaSA9PSBGRklfTElOVVhfU09GVF9GTE9BVCkgewotCWlmIChydHlwZW51bSA9PSBGRklfVFlQRV9GTE9BVCkKLQkJcnR5cGVudW0gPSBGRklfVFlQRV9VSU5UMzI7Ci0JaWYgKHJ0eXBlbnVtID09IEZGSV9UWVBFX0RPVUJMRSkKLQkJcnR5cGVudW0gPSBGRklfVFlQRV9VSU5UNjQ7Ci0JaWYgKHJ0eXBlbnVtID09IEZGSV9UWVBFX0xPTkdET1VCTEUpCi0JCXJ0eXBlbnVtID0gRkZJX1RZUEVfVUlOVDEyODsKLSAgfSBlbHNlIGlmIChjaWYtPmFiaSAhPSBGRklfTElOVVggJiYgY2lmLT5hYmkgIT0gRkZJX0xJTlVYNjQpIHsKLSNpZiBGRklfVFlQRV9MT05HRE9VQkxFICE9IEZGSV9UWVBFX0RPVUJMRQotCWlmIChydHlwZW51bSA9PSBGRklfVFlQRV9MT05HRE9VQkxFKQotCQlydHlwZW51bSA9IEZGSV9UWVBFX1NUUlVDVDsKLSNlbmRpZgotICB9Ci0KLQotICAvKiBDb3B5IHRoZSBjYWxsZXIncyBzdHJ1Y3R1cmUgcmV0dXJuIHZhbHVlIGFkZHJlc3Mgc28gdGhhdCB0aGUgY2xvc3VyZQotICAgICByZXR1cm5zIHRoZSBkYXRhIGRpcmVjdGx5IHRvIHRoZSBjYWxsZXIuCi0gICAgIEZvciBGRklfU1lTViB0aGUgcmVzdWx0IGlzIHBhc3NlZCBpbiByMy9yNCBpZiB0aGUgc3RydWN0IHNpemUgaXMgbGVzcwotICAgICBvciBlcXVhbCA4IGJ5dGVzLiAgKi8KLSAgaWYgKHJ0eXBlbnVtID09IEZGSV9UWVBFX1NUUlVDVCAmJiAoKGNpZi0+YWJpICE9IEZGSV9TWVNWKSB8fCAoc2l6ZSA+IDgpKSkgewotICAgICAgcnZhbHVlID0gKHZvaWQgKikgKnBncjsKLSAgICAgIG5nKys7Ci0gICAgICBwZ3IrKzsKLSAgICB9Ci0KLSAgaSA9IDA7Ci0gIGF2biA9IGNpZi0+bmFyZ3M7Ci0gIGFyZ190eXBlcyA9IGNpZi0+YXJnX3R5cGVzOwotCi0gIC8qIEdyYWIgdGhlIGFkZHJlc3NlcyBvZiB0aGUgYXJndW1lbnRzIGZyb20gdGhlIHN0YWNrIGZyYW1lLiAgKi8KLSAgd2hpbGUgKGkgPCBhdm4pIHsKLSAgICAgIHVuc2lnbmVkIHNob3J0IHR5cGVudW0gPSBhcmdfdHlwZXNbaV0tPnR5cGU7Ci0KLSAgICAgIC8qIFdlIG1heSBuZWVkIHRvIGhhbmRsZSBzb21lIHZhbHVlcyBkZXBlbmRpbmcgb24gQUJJICovCi0gICAgICBpZiAoY2lmLT5hYmkgPT0gRkZJX0xJTlVYX1NPRlRfRkxPQVQpIHsKLQkJaWYgKHR5cGVudW0gPT0gRkZJX1RZUEVfRkxPQVQpCi0JCQl0eXBlbnVtID0gRkZJX1RZUEVfVUlOVDMyOwotCQlpZiAodHlwZW51bSA9PSBGRklfVFlQRV9ET1VCTEUpCi0JCQl0eXBlbnVtID0gRkZJX1RZUEVfVUlOVDY0OwotCQlpZiAodHlwZW51bSA9PSBGRklfVFlQRV9MT05HRE9VQkxFKQotCQkJdHlwZW51bSA9IEZGSV9UWVBFX1VJTlQxMjg7Ci0gICAgICB9IGVsc2UgaWYgKGNpZi0+YWJpICE9IEZGSV9MSU5VWCAmJiBjaWYtPmFiaSAhPSBGRklfTElOVVg2NCkgewotI2lmIEZGSV9UWVBFX0xPTkdET1VCTEUgIT0gRkZJX1RZUEVfRE9VQkxFCi0JCWlmICh0eXBlbnVtID09IEZGSV9UWVBFX0xPTkdET1VCTEUpCi0JCQl0eXBlbnVtID0gRkZJX1RZUEVfU1RSVUNUOwotI2VuZGlmCi0gICAgICB9Ci0KLSAgICAgIHN3aXRjaCAodHlwZW51bSkgewotI2lmbmRlZiBfX05PX0ZQUlNfXwotCWNhc2UgRkZJX1RZUEVfRkxPQVQ6Ci0JICAvKiB1bmZvcnR1bmF0ZWx5IGZsb2F0IHZhbHVlcyBhcmUgc3RvcmVkIGFzIGRvdWJsZXMKLQkgICAqIGluIHRoZSBmZmlfY2xvc3VyZV9TWVNWIGNvZGUgKHNpbmNlIHdlIGRvbid0IGNoZWNrCi0JICAgKiB0aGUgdHlwZSBpbiB0aGF0IHJvdXRpbmUpLgotCSAgICovCi0KLQkgIC8qIHRoZXJlIGFyZSA4IDY0Yml0IGZsb2F0aW5nIHBvaW50IHJlZ2lzdGVycyAqLwotCi0JICBpZiAobmYgPCA4KQotCSAgICB7Ci0JICAgICAgZG91YmxlIHRlbXAgPSBwZnItPmQ7Ci0JICAgICAgcGZyLT5mID0gKGZsb2F0KSB0ZW1wOwotCSAgICAgIGF2YWx1ZVtpXSA9IHBmcjsKLQkgICAgICBuZisrOwotCSAgICAgIHBmcisrOwotCSAgICB9Ci0JICBlbHNlCi0JICAgIHsKLQkgICAgICAvKiBGSVhNRT8gaGVyZSB3ZSBhcmUgcmVhbGx5IGNoYW5naW5nIHRoZSB2YWx1ZXMKLQkgICAgICAgKiBzdG9yZWQgaW4gdGhlIG9yaWdpbmFsIGNhbGxpbmcgcm91dGluZXMgb3V0Z29pbmcKLQkgICAgICAgKiBwYXJhbWV0ZXIgc3RhY2suICBUaGlzIGlzIHByb2JhYmx5IGEgcmVhbGx5Ci0JICAgICAgICogbmF1Z2h0eSB0aGluZyB0byBkbyBidXQuLi4KLQkgICAgICAgKi8KLQkgICAgICBhdmFsdWVbaV0gPSBwc3Q7Ci0JICAgICAgcHN0ICs9IDE7Ci0JICAgIH0KLQkgIGJyZWFrOwotCi0JY2FzZSBGRklfVFlQRV9ET1VCTEU6Ci0JICAvKiBPbiB0aGUgb3V0Z29pbmcgc3RhY2sgYWxsIHZhbHVlcyBhcmUgYWxpZ25lZCB0byA4ICovCi0JICAvKiB0aGVyZSBhcmUgOCA2NGJpdCBmbG9hdGluZyBwb2ludCByZWdpc3RlcnMgKi8KLQotCSAgaWYgKG5mIDwgOCkKLQkgICAgewotCSAgICAgIGF2YWx1ZVtpXSA9IHBmcjsKLQkgICAgICBuZisrOwotCSAgICAgIHBmcisrOwotCSAgICB9Ci0JICBlbHNlCi0JICAgIHsKLQkgICAgICBpZiAoKChsb25nKSBwc3QpICYgNCkKLQkJcHN0Kys7Ci0JICAgICAgYXZhbHVlW2ldID0gcHN0OwotCSAgICAgIHBzdCArPSAyOwotCSAgICB9Ci0JICBicmVhazsKLQotI2lmIEZGSV9UWVBFX0xPTkdET1VCTEUgIT0gRkZJX1RZUEVfRE9VQkxFCi0JY2FzZSBGRklfVFlQRV9MT05HRE9VQkxFOgotCSAgaWYgKG5mIDwgNykKLQkgICAgewotCSAgICAgIGF2YWx1ZVtpXSA9IHBmcjsKLQkgICAgICBwZnIgKz0gMjsKLQkgICAgICBuZiArPSAyOwotCSAgICB9Ci0JICBlbHNlCi0JICAgIHsKLQkgICAgICBpZiAoKChsb25nKSBwc3QpICYgNCkKLQkJcHN0Kys7Ci0JICAgICAgYXZhbHVlW2ldID0gcHN0OwotCSAgICAgIHBzdCArPSA0OwotCSAgICAgIG5mID0gODsKLQkgICAgfQotCSAgYnJlYWs7Ci0jZW5kaWYKLSNlbmRpZiAvKiBoYXZlIEZQUlMgKi8KLQotCWNhc2UgRkZJX1RZUEVfVUlOVDEyODoKLQkJLyoKLQkJICogVGVzdCBpZiBmb3IgdGhlIHdob2xlIGxvbmcgZG91YmxlLCA0IGdwcnMgYXJlIGF2YWlsYWJsZS4KLQkJICogb3RoZXJ3aXNlIHRoZSBzdHVmZiBlbmRzIHVwIG9uIHRoZSBzdGFjay4KLQkJICovCi0JCWlmIChuZyA8IDUpIHsKLQkJCWF2YWx1ZVtpXSA9IHBncjsKLQkJCXBnciArPSA0OwotCQkJbmcgKz0gNDsKLQkJfSBlbHNlIHsKLQkJCWF2YWx1ZVtpXSA9IHBzdDsKLQkJCXBzdCArPSA0OwotCQkJbmcgPSA4KzQ7Ci0JCX0KLQkJYnJlYWs7Ci0KLQljYXNlIEZGSV9UWVBFX1NJTlQ4OgotCWNhc2UgRkZJX1RZUEVfVUlOVDg6Ci0JICAvKiB0aGVyZSBhcmUgOCBncHIgcmVnaXN0ZXJzIHVzZWQgdG8gcGFzcyB2YWx1ZXMgKi8KLQkgIGlmIChuZyA8IDgpCi0JICAgIHsKLQkgICAgICBhdmFsdWVbaV0gPSAoY2hhciAqKSBwZ3IgKyAzOwotCSAgICAgIG5nKys7Ci0JICAgICAgcGdyKys7Ci0JICAgIH0KLQkgIGVsc2UKLQkgICAgewotCSAgICAgIGF2YWx1ZVtpXSA9IChjaGFyICopIHBzdCArIDM7Ci0JICAgICAgcHN0Kys7Ci0JICAgIH0KLQkgIGJyZWFrOwotCi0JY2FzZSBGRklfVFlQRV9TSU5UMTY6Ci0JY2FzZSBGRklfVFlQRV9VSU5UMTY6Ci0JICAvKiB0aGVyZSBhcmUgOCBncHIgcmVnaXN0ZXJzIHVzZWQgdG8gcGFzcyB2YWx1ZXMgKi8KLQkgIGlmIChuZyA8IDgpCi0JICAgIHsKLQkgICAgICBhdmFsdWVbaV0gPSAoY2hhciAqKSBwZ3IgKyAyOwotCSAgICAgIG5nKys7Ci0JICAgICAgcGdyKys7Ci0JICAgIH0KLQkgIGVsc2UKLQkgICAgewotCSAgICAgIGF2YWx1ZVtpXSA9IChjaGFyICopIHBzdCArIDI7Ci0JICAgICAgcHN0Kys7Ci0JICAgIH0KLQkgIGJyZWFrOwotCi0JY2FzZSBGRklfVFlQRV9TSU5UMzI6Ci0JY2FzZSBGRklfVFlQRV9VSU5UMzI6Ci0JY2FzZSBGRklfVFlQRV9QT0lOVEVSOgotCSAgLyogdGhlcmUgYXJlIDggZ3ByIHJlZ2lzdGVycyB1c2VkIHRvIHBhc3MgdmFsdWVzICovCi0JICBpZiAobmcgPCA4KQotCSAgICB7Ci0JICAgICAgYXZhbHVlW2ldID0gcGdyOwotCSAgICAgIG5nKys7Ci0JICAgICAgcGdyKys7Ci0JICAgIH0KLQkgIGVsc2UKLQkgICAgewotCSAgICAgIGF2YWx1ZVtpXSA9IHBzdDsKLQkgICAgICBwc3QrKzsKLQkgICAgfQotCSAgYnJlYWs7Ci0KLQljYXNlIEZGSV9UWVBFX1NUUlVDVDoKLQkgIC8qIFN0cnVjdHMgYXJlIHBhc3NlZCBieSByZWZlcmVuY2UuIFRoZSBhZGRyZXNzIHdpbGwgYXBwZWFyIGluIGEKLQkgICAgIGdwciBpZiBpdCBpcyBvbmUgb2YgdGhlIGZpcnN0IDggYXJndW1lbnRzLiAgKi8KLQkgIGlmIChuZyA8IDgpCi0JICAgIHsKLQkgICAgICBhdmFsdWVbaV0gPSAodm9pZCAqKSAqcGdyOwotCSAgICAgIG5nKys7Ci0JICAgICAgcGdyKys7Ci0JICAgIH0KLQkgIGVsc2UKLQkgICAgewotCSAgICAgIGF2YWx1ZVtpXSA9ICh2b2lkICopICpwc3Q7Ci0JICAgICAgcHN0Kys7Ci0JICAgIH0KLQkgIGJyZWFrOwotCi0JY2FzZSBGRklfVFlQRV9TSU5UNjQ6Ci0JY2FzZSBGRklfVFlQRV9VSU5UNjQ6Ci0JICAvKiBwYXNzaW5nIGxvbmcgbG9uZyBpbnRzIGFyZSBjb21wbGV4LCB0aGV5IG11c3QKLQkgICAqIGJlIHBhc3NlZCBpbiBzdWl0YWJsZSByZWdpc3RlciBwYWlycyBzdWNoIGFzCi0JICAgKiAocjMscjQpIG9yIChyNSxyNikgb3IgKHI2LHI3KSwgb3IgKHI3LHI4KSBvciAocjkscjEwKQotCSAgICogYW5kIGlmIHRoZSBlbnRpcmUgcGFpciBhcmVuJ3QgYXZhaWxhYmxlIHRoZW4gdGhlIG91dGdvaW5nCi0JICAgKiBwYXJhbWV0ZXIgc3RhY2sgaXMgdXNlZCBmb3IgYm90aCBidXQgYW4gYWxpZ25tZW50IG9mIDgKLQkgICAqIG11c3Qgd2lsbCBiZSBrZXB0LiAgU28gd2UgbXVzdCBlaXRoZXIgbG9vayBpbiBwZ3IKLQkgICAqIG9yIHBzdCB0byBmaW5kIHRoZSBjb3JyZWN0IGFkZHJlc3MgZm9yIHRoaXMgdHlwZQotCSAgICogb2YgcGFyYW1ldGVyLgotCSAgICovCi0JICBpZiAobmcgPCA3KQotCSAgICB7Ci0JICAgICAgaWYgKG5nICYgMHgwMSkKLQkJewotCQkgIC8qIHNraXAgcjQsIHI2LCByOCBhcyBzdGFydGluZyBwb2ludHMgKi8KLQkJICBuZysrOwotCQkgIHBncisrOwotCQl9Ci0JICAgICAgYXZhbHVlW2ldID0gcGdyOwotCSAgICAgIG5nICs9IDI7Ci0JICAgICAgcGdyICs9IDI7Ci0JICAgIH0KLQkgIGVsc2UKLQkgICAgewotCSAgICAgIGlmICgoKGxvbmcpIHBzdCkgJiA0KQotCQlwc3QrKzsKLQkgICAgICBhdmFsdWVbaV0gPSBwc3Q7Ci0JICAgICAgcHN0ICs9IDI7Ci0JICAgICAgbmcgPSA4OwotCSAgICB9Ci0JICBicmVhazsKLQotCWRlZmF1bHQ6Ci0JCUZGSV9BU1NFUlQgKDApOwotCX0KLQotICAgICAgaSsrOwotICAgIH0KLQotCi0gIChjbG9zdXJlLT5mdW4pIChjaWYsIHJ2YWx1ZSwgYXZhbHVlLCBjbG9zdXJlLT51c2VyX2RhdGEpOwotCi0gIC8qIFRlbGwgZmZpX2Nsb3N1cmVfU1lTViBob3cgdG8gcGVyZm9ybSByZXR1cm4gdHlwZSBwcm9tb3Rpb25zLgotICAgICBCZWNhdXNlIHRoZSBGRklfU1lTViBBQkkgcmV0dXJucyB0aGUgc3RydWN0dXJlcyA8PSA4IGJ5dGVzIGluIHIzL3I0Ci0gICAgIHdlIGhhdmUgdG8gdGVsbCBmZmlfY2xvc3VyZV9TWVNWIGhvdyB0byB0cmVhdCB0aGVtLiBXZSBjb21iaW5lIHRoZSBiYXNlCi0gICAgIHR5cGUgRkZJX1NZU1ZfVFlQRV9TTUFMTF9TVFJVQ1QgLSAxICB3aXRoIHRoZSBzaXplIG9mIHRoZSBzdHJ1Y3QuCi0gICAgIFNvIGEgb25lIGJ5dGUgc3RydWN0IGdldHMgdGhlIHJldHVybiB0eXBlIDE2LiBSZXR1cm4gdHlwZSAxIHRvIDE1IGFyZQotICAgICBhbHJlYWR5IHVzZWQgYW5kIHdlIG5ldmVyIGhhdmUgYSBzdHJ1Y3Qgd2l0aCBzaXplIHplcm8uIFRoYXQgaXMgdGhlIHJlYXNvbgotICAgICBmb3IgdGhlIHN1YnRyYWN0aW9uIG9mIDEuIFNlZSB0aGUgY29tbWVudCBpbiBmZml0YXJnZXQuaCBhYm91dCBvcmRlcmluZy4KLSAgKi8KLSAgaWYgKGNpZi0+YWJpID09IEZGSV9TWVNWICYmIHJ0eXBlbnVtID09IEZGSV9UWVBFX1NUUlVDVCAmJiBzaXplIDw9IDgpCi0gICAgcmV0dXJuIChGRklfU1lTVl9UWVBFX1NNQUxMX1NUUlVDVCAtIDEpICsgc2l6ZTsKLSAgcmV0dXJuIHJ0eXBlbnVtOwotfQotCi1pbnQgRkZJX0hJRERFTiBmZmlfY2xvc3VyZV9oZWxwZXJfTElOVVg2NCAoZmZpX2Nsb3N1cmUgKiwgdm9pZCAqLAotCQkJCQkgICB1bnNpZ25lZCBsb25nICosIGZmaV9kYmxmbCAqKTsKLQotaW50IEZGSV9ISURERU4KLWZmaV9jbG9zdXJlX2hlbHBlcl9MSU5VWDY0IChmZmlfY2xvc3VyZSAqY2xvc3VyZSwgdm9pZCAqcnZhbHVlLAotCQkJICAgIHVuc2lnbmVkIGxvbmcgKnBzdCwgZmZpX2RibGZsICpwZnIpCi17Ci0gIC8qIHJ2YWx1ZSBpcyB0aGUgcG9pbnRlciB0byBzcGFjZSBmb3IgcmV0dXJuIHZhbHVlIGluIGNsb3N1cmUgYXNzZW1ibHkgKi8KLSAgLyogcHN0IGlzIHRoZSBwb2ludGVyIHRvIHBhcmFtZXRlciBzYXZlIGFyZWEKLSAgICAgKHIzLXIxMCBhcmUgc3RvcmVkIGludG8gaXRzIGZpcnN0IDggc2xvdHMgYnkgZmZpX2Nsb3N1cmVfTElOVVg2NCkgKi8KLSAgLyogcGZyIGlzIHRoZSBwb2ludGVyIHRvIHdoZXJlIGYxLWYxMyBhcmUgc3RvcmVkIGluIGZmaV9jbG9zdXJlX0xJTlVYNjQgKi8KLQotICB2b2lkICoqYXZhbHVlOwotICBmZmlfdHlwZSAqKmFyZ190eXBlczsKLSAgbG9uZyBpLCBhdm47Ci0gIGZmaV9jaWYgKmNpZjsKLSAgZmZpX2RibGZsICplbmRfcGZyID0gcGZyICsgTlVNX0ZQUl9BUkdfUkVHSVNURVJTNjQ7Ci0KLSAgY2lmID0gY2xvc3VyZS0+Y2lmOwotICBhdmFsdWUgPSBhbGxvY2EgKGNpZi0+bmFyZ3MgKiBzaXplb2YgKHZvaWQgKikpOwotCi0gIC8qIENvcHkgdGhlIGNhbGxlcidzIHN0cnVjdHVyZSByZXR1cm4gdmFsdWUgYWRkcmVzcyBzbyB0aGF0IHRoZSBjbG9zdXJlCi0gICAgIHJldHVybnMgdGhlIGRhdGEgZGlyZWN0bHkgdG8gdGhlIGNhbGxlci4gICovCi0gIGlmIChjaWYtPnJ0eXBlLT50eXBlID09IEZGSV9UWVBFX1NUUlVDVCkKLSAgICB7Ci0gICAgICBydmFsdWUgPSAodm9pZCAqKSAqcHN0OwotICAgICAgcHN0Kys7Ci0gICAgfQotCi0gIGkgPSAwOwotICBhdm4gPSBjaWYtPm5hcmdzOwotICBhcmdfdHlwZXMgPSBjaWYtPmFyZ190eXBlczsKLQotICAvKiBHcmFiIHRoZSBhZGRyZXNzZXMgb2YgdGhlIGFyZ3VtZW50cyBmcm9tIHRoZSBzdGFjayBmcmFtZS4gICovCi0gIHdoaWxlIChpIDwgYXZuKQotICAgIHsKLSAgICAgIHN3aXRjaCAoYXJnX3R5cGVzW2ldLT50eXBlKQotCXsKLQljYXNlIEZGSV9UWVBFX1NJTlQ4OgotCWNhc2UgRkZJX1RZUEVfVUlOVDg6Ci0JICBhdmFsdWVbaV0gPSAoY2hhciAqKSBwc3QgKyA3OwotCSAgcHN0Kys7Ci0JICBicmVhazsKLQotCWNhc2UgRkZJX1RZUEVfU0lOVDE2OgotCWNhc2UgRkZJX1RZUEVfVUlOVDE2OgotCSAgYXZhbHVlW2ldID0gKGNoYXIgKikgcHN0ICsgNjsKLQkgIHBzdCsrOwotCSAgYnJlYWs7Ci0KLQljYXNlIEZGSV9UWVBFX1NJTlQzMjoKLQljYXNlIEZGSV9UWVBFX1VJTlQzMjoKLQkgIGF2YWx1ZVtpXSA9IChjaGFyICopIHBzdCArIDQ7Ci0JICBwc3QrKzsKLQkgIGJyZWFrOwotCi0JY2FzZSBGRklfVFlQRV9TSU5UNjQ6Ci0JY2FzZSBGRklfVFlQRV9VSU5UNjQ6Ci0JY2FzZSBGRklfVFlQRV9QT0lOVEVSOgotCSAgYXZhbHVlW2ldID0gcHN0OwotCSAgcHN0Kys7Ci0JICBicmVhazsKLQotCWNhc2UgRkZJX1RZUEVfU1RSVUNUOgotCSAgLyogU3RydWN0dXJlcyB3aXRoIHNpemUgbGVzcyB0aGFuIGVpZ2h0IGJ5dGVzIGFyZSBwYXNzZWQKLQkgICAgIGxlZnQtcGFkZGVkLiAgKi8KLQkgIGlmIChhcmdfdHlwZXNbaV0tPnNpemUgPCA4KQotCSAgICBhdmFsdWVbaV0gPSAoY2hhciAqKSBwc3QgKyA4IC0gYXJnX3R5cGVzW2ldLT5zaXplOwotCSAgZWxzZQotCSAgICBhdmFsdWVbaV0gPSBwc3Q7Ci0JICBwc3QgKz0gKGFyZ190eXBlc1tpXS0+c2l6ZSArIDcpIC8gODsKLQkgIGJyZWFrOwotCi0JY2FzZSBGRklfVFlQRV9GTE9BVDoKLQkgIC8qIHVuZm9ydHVuYXRlbHkgZmxvYXQgdmFsdWVzIGFyZSBzdG9yZWQgYXMgZG91YmxlcwotCSAgICogaW4gdGhlIGZmaV9jbG9zdXJlX0xJTlVYNjQgY29kZSAoc2luY2Ugd2UgZG9uJ3QgY2hlY2sKLQkgICAqIHRoZSB0eXBlIGluIHRoYXQgcm91dGluZSkuCi0JICAgKi8KLQotCSAgLyogdGhlcmUgYXJlIDEzIDY0Yml0IGZsb2F0aW5nIHBvaW50IHJlZ2lzdGVycyAqLwotCi0JICBpZiAocGZyIDwgZW5kX3BmcikKLQkgICAgewotCSAgICAgIGRvdWJsZSB0ZW1wID0gcGZyLT5kOwotCSAgICAgIHBmci0+ZiA9IChmbG9hdCkgdGVtcDsKLQkgICAgICBhdmFsdWVbaV0gPSBwZnI7Ci0JICAgICAgcGZyKys7Ci0JICAgIH0KLQkgIGVsc2UKLQkgICAgYXZhbHVlW2ldID0gcHN0OwotCSAgcHN0Kys7Ci0JICBicmVhazsKLQotCWNhc2UgRkZJX1RZUEVfRE9VQkxFOgotCSAgLyogT24gdGhlIG91dGdvaW5nIHN0YWNrIGFsbCB2YWx1ZXMgYXJlIGFsaWduZWQgdG8gOCAqLwotCSAgLyogdGhlcmUgYXJlIDEzIDY0Yml0IGZsb2F0aW5nIHBvaW50IHJlZ2lzdGVycyAqLwotCi0JICBpZiAocGZyIDwgZW5kX3BmcikKLQkgICAgewotCSAgICAgIGF2YWx1ZVtpXSA9IHBmcjsKLQkgICAgICBwZnIrKzsKLQkgICAgfQotCSAgZWxzZQotCSAgICBhdmFsdWVbaV0gPSBwc3Q7Ci0JICBwc3QrKzsKLQkgIGJyZWFrOwotCi0jaWYgRkZJX1RZUEVfTE9OR0RPVUJMRSAhPSBGRklfVFlQRV9ET1VCTEUKLQljYXNlIEZGSV9UWVBFX0xPTkdET1VCTEU6Ci0JICBpZiAocGZyICsgMSA8IGVuZF9wZnIpCi0JICAgIHsKLQkgICAgICBhdmFsdWVbaV0gPSBwZnI7Ci0JICAgICAgcGZyICs9IDI7Ci0JICAgIH0KLQkgIGVsc2UKLQkgICAgewotCSAgICAgIGlmIChwZnIgPCBlbmRfcGZyKQotCQl7Ci0JCSAgLyogUGFzc2VkIHBhcnRseSBpbiBmMTMgYW5kIHBhcnRseSBvbiB0aGUgc3RhY2suCi0JCSAgICAgTW92ZSBpdCBhbGwgdG8gdGhlIHN0YWNrLiAgKi8KLQkJICAqcHN0ID0gKih1bnNpZ25lZCBsb25nICopIHBmcjsKLQkJICBwZnIrKzsKLQkJfQotCSAgICAgIGF2YWx1ZVtpXSA9IHBzdDsKLQkgICAgfQotCSAgcHN0ICs9IDI7Ci0JICBicmVhazsKLSNlbmRpZgotCi0JZGVmYXVsdDoKLQkgIEZGSV9BU1NFUlQgKDApOwotCX0KLQotICAgICAgaSsrOwotICAgIH0KLQotCi0gIChjbG9zdXJlLT5mdW4pIChjaWYsIHJ2YWx1ZSwgYXZhbHVlLCBjbG9zdXJlLT51c2VyX2RhdGEpOwotCi0gIC8qIFRlbGwgZmZpX2Nsb3N1cmVfTElOVVg2NCBob3cgdG8gcGVyZm9ybSByZXR1cm4gdHlwZSBwcm9tb3Rpb25zLiAgKi8KLSAgcmV0dXJuIGNpZi0+cnR5cGUtPnR5cGU7CiB9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jCmluZGV4IDFkMWQ0OGMuLmNmNmZiNmQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jCkBAIC01OTMsNyArNTkzLDcgQEAKICAgICAgIC8qIE5hdHVyYWwgYWxpZ25tZW50IGZvciBhbGwgaXRlbXMuICAqLwogICAgICAgYWxpZ24gPSBwLT5hbGlnbm1lbnQ7CiAjZWxzZQotICAgICAgLyogTmF0cnVhbCBhbGlnbm1lbnQgZm9yIHRoZSBmaXJzdCBpdGVtLi4uICovCisgICAgICAvKiBOYXR1cmFsIGFsaWdubWVudCBmb3IgdGhlIGZpcnN0IGl0ZW0uLi4gKi8KICAgICAgIGlmIChpID09IDApCiAJYWxpZ24gPSBwLT5hbGlnbm1lbnQ7CiAgICAgICBlbHNlIGlmIChwLT5hbGlnbm1lbnQgPT0gMTYgfHwgcC0+YWxpZ25tZW50IDwgNCkKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3Bvd2VycGMvZmZpX2xpbnV4NjQuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3Bvd2VycGMvZmZpX2xpbnV4NjQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDg3YWY4Ci0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvcG93ZXJwYy9mZmlfbGludXg2NC5jCkBAIC0wLDAgKzEsOTQzIEBACisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgZmZpX2xpbnV4NjQuYyAtIENvcHlyaWdodCAoQykgMjAxMyBJQk0KKyAgICAgICAgICAgICAgICAgICBDb3B5cmlnaHQgKEMpIDIwMTEgQW50aG9ueSBHcmVlbgorICAgICAgICAgICAgICAgICAgIENvcHlyaWdodCAoQykgMjAxMSBLeWxlIE1vZmZldHQKKyAgICAgICAgICAgICAgICAgICBDb3B5cmlnaHQgKEMpIDIwMDggUmVkIEhhdCwgSW5jCisgICAgICAgICAgICAgICAgICAgQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jCisgICAgICAgICAgICAgICAgICAgQ29weXJpZ2h0IChjKSAxOTk4IEdlb2ZmcmV5IEtlYXRpbmcKKworICAgUG93ZXJQQyBGb3JlaWduIEZ1bmN0aW9uIEludGVyZmFjZQorCisgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKyAgIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICAgYGBTb2Z0d2FyZScnKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisgICB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisgICBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKyAgIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworICAgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCisgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZAorICAgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKKyAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MKKyAgIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAgIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KKyAgIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAgIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICAgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgICBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaW5jbHVkZSAiZmZpLmgiCisKKyNpZmRlZiBQT1dFUlBDNjQKKyNpbmNsdWRlICJmZmlfY29tbW9uLmgiCisjaW5jbHVkZSAiZmZpX3Bvd2VycGMuaCIKKworCisvKiBBYm91dCB0aGUgTElOVVg2NCBBQkkuICAqLworZW51bSB7CisgIE5VTV9HUFJfQVJHX1JFR0lTVEVSUzY0ID0gOCwKKyAgTlVNX0ZQUl9BUkdfUkVHSVNURVJTNjQgPSAxMworfTsKK2VudW0geyBBU01fTkVFRFNfUkVHSVNURVJTNjQgPSA0IH07CisKKworI2lmIEhBVkVfTE9OR19ET1VCTEVfVkFSSUFOVCAmJiBGRklfVFlQRV9MT05HRE9VQkxFICE9IEZGSV9UWVBFX0RPVUJMRQorLyogQWRqdXN0IHNpemUgb2YgZmZpX3R5cGVfbG9uZ2RvdWJsZS4gICovCit2b2lkIEZGSV9ISURERU4KK2ZmaV9wcmVwX3R5cGVzX2xpbnV4NjQgKGZmaV9hYmkgYWJpKQoreworICBpZiAoKGFiaSAmIChGRklfTElOVVggfCBGRklfTElOVVhfTE9OR19ET1VCTEVfMTI4KSkgPT0gRkZJX0xJTlVYKQorICAgIHsKKyAgICAgIGZmaV90eXBlX2xvbmdkb3VibGUuc2l6ZSA9IDg7CisgICAgICBmZmlfdHlwZV9sb25nZG91YmxlLmFsaWdubWVudCA9IDg7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgZmZpX3R5cGVfbG9uZ2RvdWJsZS5zaXplID0gMTY7CisgICAgICBmZmlfdHlwZV9sb25nZG91YmxlLmFsaWdubWVudCA9IDE2OworICAgIH0KK30KKyNlbmRpZgorCisKKyNpZiBfQ0FMTF9FTEYgPT0gMgorc3RhdGljIHVuc2lnbmVkIGludAorZGlzY292ZXJfaG9tb2dlbmVvdXNfYWdncmVnYXRlIChjb25zdCBmZmlfdHlwZSAqdCwgdW5zaWduZWQgaW50ICplbG51bSkKK3sKKyAgc3dpdGNoICh0LT50eXBlKQorICAgIHsKKyAgICBjYXNlIEZGSV9UWVBFX0ZMT0FUOgorICAgIGNhc2UgRkZJX1RZUEVfRE9VQkxFOgorICAgICAgKmVsbnVtID0gMTsKKyAgICAgIHJldHVybiAoaW50KSB0LT50eXBlOworCisgICAgY2FzZSBGRklfVFlQRV9TVFJVQ1Q6OworICAgICAgeworCXVuc2lnbmVkIGludCBiYXNlX2VsdCA9IDAsIHRvdGFsX2VsbnVtID0gMDsKKwlmZmlfdHlwZSAqKmVsID0gdC0+ZWxlbWVudHM7CisJd2hpbGUgKCplbCkKKwkgIHsKKwkgICAgdW5zaWduZWQgaW50IGVsX2VsdCwgZWxfZWxudW0gPSAwOworCSAgICBlbF9lbHQgPSBkaXNjb3Zlcl9ob21vZ2VuZW91c19hZ2dyZWdhdGUgKCplbCwgJmVsX2VsbnVtKTsKKwkgICAgaWYgKGVsX2VsdCA9PSAwCisJCXx8IChiYXNlX2VsdCAmJiBiYXNlX2VsdCAhPSBlbF9lbHQpKQorCSAgICAgIHJldHVybiAwOworCSAgICBiYXNlX2VsdCA9IGVsX2VsdDsKKwkgICAgdG90YWxfZWxudW0gKz0gZWxfZWxudW07CisJICAgIGlmICh0b3RhbF9lbG51bSA+IDgpCisJICAgICAgcmV0dXJuIDA7CisJICAgIGVsKys7CisJICB9CisJKmVsbnVtID0gdG90YWxfZWxudW07CisJcmV0dXJuIGJhc2VfZWx0OworICAgICAgfQorCisgICAgZGVmYXVsdDoKKyAgICAgIHJldHVybiAwOworICAgIH0KK30KKyNlbmRpZgorCisKKy8qIFBlcmZvcm0gbWFjaGluZSBkZXBlbmRlbnQgY2lmIHByb2Nlc3NpbmcgKi8KK3N0YXRpYyBmZmlfc3RhdHVzCitmZmlfcHJlcF9jaWZfbGludXg2NF9jb3JlIChmZmlfY2lmICpjaWYpCit7CisgIGZmaV90eXBlICoqcHRyOworICB1bnNpZ25lZCBieXRlczsKKyAgdW5zaWduZWQgaSwgZnBhcmdfY291bnQgPSAwLCBpbnRhcmdfY291bnQgPSAwOworICB1bnNpZ25lZCBmbGFncyA9IGNpZi0+ZmxhZ3M7CisjaWYgX0NBTExfRUxGID09IDIKKyAgdW5zaWduZWQgaW50IGVsdCwgZWxudW07CisjZW5kaWYKKworI2lmIEZGSV9UWVBFX0xPTkdET1VCTEUgPT0gRkZJX1RZUEVfRE9VQkxFCisgIC8qIElmIGNvbXBpbGVkIHdpdGhvdXQgbG9uZyBkb3VibGUgc3VwcG9ydC4uICAqLworICBpZiAoKGNpZi0+YWJpICYgRkZJX0xJTlVYX0xPTkdfRE9VQkxFXzEyOCkgIT0gMCkKKyAgICByZXR1cm4gRkZJX0JBRF9BQkk7CisjZW5kaWYKKworICAvKiBUaGUgbWFjaGluZS1pbmRlcGVuZGVudCBjYWxjdWxhdGlvbiBvZiBjaWYtPmJ5dGVzIGRvZXNuJ3Qgd29yaworICAgICBmb3IgdXMuICBSZWRvIHRoZSBjYWxjdWxhdGlvbi4gICovCisjaWYgX0NBTExfRUxGID09IDIKKyAgLyogU3BhY2UgZm9yIGJhY2tjaGFpbiwgQ1IsIExSLCBUT0MgYW5kIHRoZSBhc20ncyB0ZW1wIHJlZ3MuICAqLworICBieXRlcyA9ICg0ICsgQVNNX05FRURTX1JFR0lTVEVSUzY0KSAqIHNpemVvZiAobG9uZyk7CisKKyAgLyogU3BhY2UgZm9yIHRoZSBnZW5lcmFsIHJlZ2lzdGVycy4gICovCisgIGJ5dGVzICs9IE5VTV9HUFJfQVJHX1JFR0lTVEVSUzY0ICogc2l6ZW9mIChsb25nKTsKKyNlbHNlCisgIC8qIFNwYWNlIGZvciBiYWNrY2hhaW4sIENSLCBMUiwgY2MvbGQgZG91Ymxld29yZCwgVE9DIGFuZCB0aGUgYXNtJ3MgdGVtcAorICAgICByZWdzLiAgKi8KKyAgYnl0ZXMgPSAoNiArIEFTTV9ORUVEU19SRUdJU1RFUlM2NCkgKiBzaXplb2YgKGxvbmcpOworCisgIC8qIFNwYWNlIGZvciB0aGUgbWFuZGF0b3J5IHBhcm0gc2F2ZSBhcmVhIGFuZCBnZW5lcmFsIHJlZ2lzdGVycy4gICovCisgIGJ5dGVzICs9IDIgKiBOVU1fR1BSX0FSR19SRUdJU1RFUlM2NCAqIHNpemVvZiAobG9uZyk7CisjZW5kaWYKKworICAvKiBSZXR1cm4gdmFsdWUgaGFuZGxpbmcuICAqLworICBzd2l0Y2ggKGNpZi0+cnR5cGUtPnR5cGUpCisgICAgeworI2lmIEZGSV9UWVBFX0xPTkdET1VCTEUgIT0gRkZJX1RZUEVfRE9VQkxFCisgICAgY2FzZSBGRklfVFlQRV9MT05HRE9VQkxFOgorICAgICAgaWYgKChjaWYtPmFiaSAmIEZGSV9MSU5VWF9MT05HX0RPVUJMRV8xMjgpICE9IDApCisJZmxhZ3MgfD0gRkxBR19SRVRVUk5TXzEyOEJJVFM7CisgICAgICAvKiBGYWxsIHRocm91Z2guICAqLworI2VuZGlmCisgICAgY2FzZSBGRklfVFlQRV9ET1VCTEU6CisgICAgICBmbGFncyB8PSBGTEFHX1JFVFVSTlNfNjRCSVRTOworICAgICAgLyogRmFsbCB0aHJvdWdoLiAgKi8KKyAgICBjYXNlIEZGSV9UWVBFX0ZMT0FUOgorICAgICAgZmxhZ3MgfD0gRkxBR19SRVRVUk5TX0ZQOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZGSV9UWVBFX1VJTlQxMjg6CisgICAgICBmbGFncyB8PSBGTEFHX1JFVFVSTlNfMTI4QklUUzsKKyAgICAgIC8qIEZhbGwgdGhyb3VnaC4gICovCisgICAgY2FzZSBGRklfVFlQRV9VSU5UNjQ6CisgICAgY2FzZSBGRklfVFlQRV9TSU5UNjQ6CisgICAgICBmbGFncyB8PSBGTEFHX1JFVFVSTlNfNjRCSVRTOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZGSV9UWVBFX1NUUlVDVDoKKyNpZiBfQ0FMTF9FTEYgPT0gMgorICAgICAgZWx0ID0gZGlzY292ZXJfaG9tb2dlbmVvdXNfYWdncmVnYXRlIChjaWYtPnJ0eXBlLCAmZWxudW0pOworICAgICAgaWYgKGVsdCkKKwl7CisJICBpZiAoZWx0ID09IEZGSV9UWVBFX0RPVUJMRSkKKwkgICAgZmxhZ3MgfD0gRkxBR19SRVRVUk5TXzY0QklUUzsKKwkgIGZsYWdzIHw9IEZMQUdfUkVUVVJOU19GUCB8IEZMQUdfUkVUVVJOU19TTVNUOworCSAgYnJlYWs7CisJfQorICAgICAgaWYgKGNpZi0+cnR5cGUtPnNpemUgPD0gMTYpCisJeworCSAgZmxhZ3MgfD0gRkxBR19SRVRVUk5TX1NNU1Q7CisJICBicmVhazsKKwl9CisjZW5kaWYKKyAgICAgIGludGFyZ19jb3VudCsrOworICAgICAgZmxhZ3MgfD0gRkxBR19SRVRWQUxfUkVGRVJFTkNFOworICAgICAgLyogRmFsbCB0aHJvdWdoLiAgKi8KKyAgICBjYXNlIEZGSV9UWVBFX1ZPSUQ6CisgICAgICBmbGFncyB8PSBGTEFHX1JFVFVSTlNfTk9USElORzsKKyAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgIC8qIFJldHVybnMgMzItYml0IGludGVnZXIsIG9yIHNpbWlsYXIuICBOb3RoaW5nIHRvIGRvIGhlcmUuICAqLworICAgICAgYnJlYWs7CisgICAgfQorCisgIGZvciAocHRyID0gY2lmLT5hcmdfdHlwZXMsIGkgPSBjaWYtPm5hcmdzOyBpID4gMDsgaS0tLCBwdHIrKykKKyAgICB7CisgICAgICB1bnNpZ25lZCBpbnQgYWxpZ247CisKKyAgICAgIHN3aXRjaCAoKCpwdHIpLT50eXBlKQorCXsKKyNpZiBGRklfVFlQRV9MT05HRE9VQkxFICE9IEZGSV9UWVBFX0RPVUJMRQorCWNhc2UgRkZJX1RZUEVfTE9OR0RPVUJMRToKKwkgIGlmICgoY2lmLT5hYmkgJiBGRklfTElOVVhfTE9OR19ET1VCTEVfMTI4KSAhPSAwKQorCSAgICB7CisJICAgICAgZnBhcmdfY291bnQrKzsKKwkgICAgICBpbnRhcmdfY291bnQrKzsKKwkgICAgfQorCSAgLyogRmFsbCB0aHJvdWdoLiAgKi8KKyNlbmRpZgorCWNhc2UgRkZJX1RZUEVfRE9VQkxFOgorCWNhc2UgRkZJX1RZUEVfRkxPQVQ6CisJICBmcGFyZ19jb3VudCsrOworCSAgaW50YXJnX2NvdW50Kys7CisJICBpZiAoZnBhcmdfY291bnQgPiBOVU1fRlBSX0FSR19SRUdJU1RFUlM2NCkKKwkgICAgZmxhZ3MgfD0gRkxBR19BUkdfTkVFRFNfUFNBVkU7CisJICBicmVhazsKKworCWNhc2UgRkZJX1RZUEVfU1RSVUNUOgorCSAgaWYgKChjaWYtPmFiaSAmIEZGSV9MSU5VWF9TVFJVQ1RfQUxJR04pICE9IDApCisJICAgIHsKKwkgICAgICBhbGlnbiA9ICgqcHRyKS0+YWxpZ25tZW50OworCSAgICAgIGlmIChhbGlnbiA+IDE2KQorCQlhbGlnbiA9IDE2OworCSAgICAgIGFsaWduID0gYWxpZ24gLyA4OworCSAgICAgIGlmIChhbGlnbiA+IDEpCisJCWludGFyZ19jb3VudCA9IEFMSUdOIChpbnRhcmdfY291bnQsIGFsaWduKTsKKwkgICAgfQorCSAgaW50YXJnX2NvdW50ICs9ICgoKnB0ciktPnNpemUgKyA3KSAvIDg7CisjaWYgX0NBTExfRUxGID09IDIKKwkgIGVsdCA9IGRpc2NvdmVyX2hvbW9nZW5lb3VzX2FnZ3JlZ2F0ZSAoKnB0ciwgJmVsbnVtKTsKKwkgIGlmIChlbHQpCisJICAgIHsKKwkgICAgICBmcGFyZ19jb3VudCArPSBlbG51bTsKKwkgICAgICBpZiAoZnBhcmdfY291bnQgPiBOVU1fRlBSX0FSR19SRUdJU1RFUlM2NCkKKwkJZmxhZ3MgfD0gRkxBR19BUkdfTkVFRFNfUFNBVkU7CisJICAgIH0KKwkgIGVsc2UKKyNlbmRpZgorCSAgICB7CisJICAgICAgaWYgKGludGFyZ19jb3VudCA+IE5VTV9HUFJfQVJHX1JFR0lTVEVSUzY0KQorCQlmbGFncyB8PSBGTEFHX0FSR19ORUVEU19QU0FWRTsKKwkgICAgfQorCSAgYnJlYWs7CisKKwljYXNlIEZGSV9UWVBFX1BPSU5URVI6CisJY2FzZSBGRklfVFlQRV9VSU5UNjQ6CisJY2FzZSBGRklfVFlQRV9TSU5UNjQ6CisJY2FzZSBGRklfVFlQRV9JTlQ6CisJY2FzZSBGRklfVFlQRV9VSU5UMzI6CisJY2FzZSBGRklfVFlQRV9TSU5UMzI6CisJY2FzZSBGRklfVFlQRV9VSU5UMTY6CisJY2FzZSBGRklfVFlQRV9TSU5UMTY6CisJY2FzZSBGRklfVFlQRV9VSU5UODoKKwljYXNlIEZGSV9UWVBFX1NJTlQ4OgorCSAgLyogRXZlcnl0aGluZyBlbHNlIGlzIHBhc3NlZCBhcyBhIDgtYnl0ZSB3b3JkIGluIGEgR1BSLCBlaXRoZXIKKwkgICAgIHRoZSBvYmplY3QgaXRzZWxmIG9yIGEgcG9pbnRlciB0byBpdC4gICovCisJICBpbnRhcmdfY291bnQrKzsKKwkgIGlmIChpbnRhcmdfY291bnQgPiBOVU1fR1BSX0FSR19SRUdJU1RFUlM2NCkKKwkgICAgZmxhZ3MgfD0gRkxBR19BUkdfTkVFRFNfUFNBVkU7CisJICBicmVhazsKKwlkZWZhdWx0OgorCSAgRkZJX0FTU0VSVCAoMCk7CisJfQorICAgIH0KKworICBpZiAoZnBhcmdfY291bnQgIT0gMCkKKyAgICBmbGFncyB8PSBGTEFHX0ZQX0FSR1VNRU5UUzsKKyAgaWYgKGludGFyZ19jb3VudCA+IDQpCisgICAgZmxhZ3MgfD0gRkxBR180X0dQUl9BUkdVTUVOVFM7CisKKyAgLyogU3BhY2UgZm9yIHRoZSBGUFIgcmVnaXN0ZXJzLCBpZiBuZWVkZWQuICAqLworICBpZiAoZnBhcmdfY291bnQgIT0gMCkKKyAgICBieXRlcyArPSBOVU1fRlBSX0FSR19SRUdJU1RFUlM2NCAqIHNpemVvZiAoZG91YmxlKTsKKworICAvKiBTdGFjayBzcGFjZS4gICovCisjaWYgX0NBTExfRUxGID09IDIKKyAgaWYgKChmbGFncyAmIEZMQUdfQVJHX05FRURTX1BTQVZFKSAhPSAwKQorICAgIGJ5dGVzICs9IGludGFyZ19jb3VudCAqIHNpemVvZiAobG9uZyk7CisjZWxzZQorICBpZiAoaW50YXJnX2NvdW50ID4gTlVNX0dQUl9BUkdfUkVHSVNURVJTNjQpCisgICAgYnl0ZXMgKz0gKGludGFyZ19jb3VudCAtIE5VTV9HUFJfQVJHX1JFR0lTVEVSUzY0KSAqIHNpemVvZiAobG9uZyk7CisjZW5kaWYKKworICAvKiBUaGUgc3RhY2sgc3BhY2UgYWxsb2NhdGVkIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMTYgYnl0ZXMuICAqLworICBieXRlcyA9IChieXRlcyArIDE1KSAmIH4weEY7CisKKyAgY2lmLT5mbGFncyA9IGZsYWdzOworICBjaWYtPmJ5dGVzID0gYnl0ZXM7CisKKyAgcmV0dXJuIEZGSV9PSzsKK30KKworZmZpX3N0YXR1cyBGRklfSElEREVOCitmZmlfcHJlcF9jaWZfbGludXg2NCAoZmZpX2NpZiAqY2lmKQoreworICBpZiAoKGNpZi0+YWJpICYgRkZJX0xJTlVYKSAhPSAwKQorICAgIGNpZi0+bmZpeGVkYXJncyA9IGNpZi0+bmFyZ3M7CisjaWYgX0NBTExfRUxGICE9IDIKKyAgZWxzZSBpZiAoY2lmLT5hYmkgPT0gRkZJX0NPTVBBVF9MSU5VWDY0KQorICAgIHsKKyAgICAgIC8qIFRoaXMgY2FsbCBpcyBmcm9tIG9sZCBjb2RlLiAgRG9uJ3QgdG91Y2ggY2lmLT5uZml4ZWRhcmdzCisJIHNpbmNlIG9sZCBjb2RlIHdpbGwgYmUgdXNpbmcgYSBzbWFsbGVyIGNpZi4gICovCisgICAgICBjaWYtPmZsYWdzIHw9IEZMQUdfQ09NUEFUOworICAgICAgLyogVHJhbnNsYXRlIHRvIG5ldyBhYmkgdmFsdWUuICAqLworICAgICAgY2lmLT5hYmkgPSBGRklfTElOVVggfCBGRklfTElOVVhfTE9OR19ET1VCTEVfMTI4OworICAgIH0KKyNlbmRpZgorICBlbHNlCisgICAgcmV0dXJuIEZGSV9CQURfQUJJOworICByZXR1cm4gZmZpX3ByZXBfY2lmX2xpbnV4NjRfY29yZSAoY2lmKTsKK30KKworZmZpX3N0YXR1cyBGRklfSElEREVOCitmZmlfcHJlcF9jaWZfbGludXg2NF92YXIgKGZmaV9jaWYgKmNpZiwKKwkJCSAgdW5zaWduZWQgaW50IG5maXhlZGFyZ3MsCisJCQkgIHVuc2lnbmVkIGludCBudG90YWxhcmdzIE1BWUJFX1VOVVNFRCkKK3sKKyAgaWYgKChjaWYtPmFiaSAmIEZGSV9MSU5VWCkgIT0gMCkKKyAgICBjaWYtPm5maXhlZGFyZ3MgPSBuZml4ZWRhcmdzOworI2lmIF9DQUxMX0VMRiAhPSAyCisgIGVsc2UgaWYgKGNpZi0+YWJpID09IEZGSV9DT01QQVRfTElOVVg2NCkKKyAgICB7CisgICAgICAvKiBUaGlzIGNhbGwgaXMgZnJvbSBvbGQgY29kZS4gIERvbid0IHRvdWNoIGNpZi0+bmZpeGVkYXJncworCSBzaW5jZSBvbGQgY29kZSB3aWxsIGJlIHVzaW5nIGEgc21hbGxlciBjaWYuICAqLworICAgICAgY2lmLT5mbGFncyB8PSBGTEFHX0NPTVBBVDsKKyAgICAgIC8qIFRyYW5zbGF0ZSB0byBuZXcgYWJpIHZhbHVlLiAgKi8KKyAgICAgIGNpZi0+YWJpID0gRkZJX0xJTlVYIHwgRkZJX0xJTlVYX0xPTkdfRE9VQkxFXzEyODsKKyAgICB9CisjZW5kaWYKKyAgZWxzZQorICAgIHJldHVybiBGRklfQkFEX0FCSTsKKyNpZiBfQ0FMTF9FTEYgPT0gMgorICBjaWYtPmZsYWdzIHw9IEZMQUdfQVJHX05FRURTX1BTQVZFOworI2VuZGlmCisgIHJldHVybiBmZmlfcHJlcF9jaWZfbGludXg2NF9jb3JlIChjaWYpOworfQorCisKKy8qIGZmaV9wcmVwX2FyZ3M2NCBpcyBjYWxsZWQgYnkgdGhlIGFzc2VtYmx5IHJvdXRpbmUgb25jZSBzdGFjayBzcGFjZQorICAgaGFzIGJlZW4gYWxsb2NhdGVkIGZvciB0aGUgZnVuY3Rpb24ncyBhcmd1bWVudHMuCisKKyAgIFRoZSBzdGFjayBsYXlvdXQgd2Ugd2FudCBsb29rcyBsaWtlIHRoaXM6CisKKyAgIHwgICBSZXQgYWRkciBmcm9tIGZmaV9jYWxsX0xJTlVYNjQJOGJ5dGVzCXwJaGlnaGVyIGFkZHJlc3NlcworICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAorICAgfCAgIENSIHNhdmUgYXJlYQkJCThieXRlcwl8CisgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CisgICB8ICAgUHJldmlvdXMgYmFja2NoYWluIHBvaW50ZXIJOAl8CXN0YWNrIHBvaW50ZXIgaGVyZQorICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfDwrIDw8PAlvbiBlbnRyeSB0bworICAgfCAgIFNhdmVkIHIyOC1yMzEJCQk0KjgJfCB8CWZmaV9jYWxsX0xJTlVYNjQKKyAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgfAorICAgfCAgIEdQUiByZWdpc3RlcnMgcjMtcjEwCQk4KjgJfCB8CisgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IHwKKyAgIHwgICBGUFIgcmVnaXN0ZXJzIGYxLWYxMyAob3B0aW9uYWwpCTEzKjgJfCB8CisgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IHwKKyAgIHwgICBQYXJhbWV0ZXIgc2F2ZSBhcmVhCQkgICAgICAgIHwgfAorICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCB8CisgICB8ICAgVE9DIHNhdmUgYXJlYQkJCTgJfCB8CisgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IHwJc3RhY2sJfAorICAgfCAgIExpbmtlciBkb3VibGV3b3JkCQk4CXwgfAlncm93cwl8CisgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IHwJZG93bglWCisgICB8ICAgQ29tcGlsZXIgZG91Ymxld29yZAkJOAl8IHwKKyAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgfAlsb3dlciBhZGRyZXNzZXMKKyAgIHwgICBTcGFjZSBmb3IgY2FsbGVlJ3MgTFIJCTgJfCB8CisgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IHwKKyAgIHwgICBDUiBzYXZlIGFyZWEJCQk4CXwgfAorICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCB8CXN0YWNrIHBvaW50ZXIgaGVyZQorICAgfCAgIEN1cnJlbnQgYmFja2NoYWluIHBvaW50ZXIJOAl8LS8JZHVyaW5nCisgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18ICAgPDw8CWZmaV9jYWxsX0xJTlVYNjQKKworKi8KKwordm9pZCBGRklfSElEREVOCitmZmlfcHJlcF9hcmdzNjQgKGV4dGVuZGVkX2NpZiAqZWNpZiwgdW5zaWduZWQgbG9uZyAqY29uc3Qgc3RhY2spCit7CisgIGNvbnN0IHVuc2lnbmVkIGxvbmcgYnl0ZXMgPSBlY2lmLT5jaWYtPmJ5dGVzOworICBjb25zdCB1bnNpZ25lZCBsb25nIGZsYWdzID0gZWNpZi0+Y2lmLT5mbGFnczsKKworICB0eXBlZGVmIHVuaW9uCisgIHsKKyAgICBjaGFyICpjOworICAgIHVuc2lnbmVkIGxvbmcgKnVsOworICAgIGZsb2F0ICpmOworICAgIGRvdWJsZSAqZDsKKyAgICBzaXplX3QgcDsKKyAgfSB2YWxwOworCisgIC8qICdzdGFja3RvcCcgcG9pbnRzIGF0IHRoZSBwcmV2aW91cyBiYWNrY2hhaW4gcG9pbnRlci4gICovCisgIHZhbHAgc3RhY2t0b3A7CisKKyAgLyogJ25leHRfYXJnJyBwb2ludHMgYXQgdGhlIHNwYWNlIGZvciBncHIzLCBhbmQgZ3Jvd3MgdXB3YXJkcyBhcworICAgICB3ZSB1c2UgR1BSIHJlZ2lzdGVycywgdGhlbiBjb250aW51ZXMgYXQgcmVzdC4gICovCisgIHZhbHAgZ3ByX2Jhc2U7CisgIHZhbHAgZ3ByX2VuZDsKKyAgdmFscCByZXN0OworICB2YWxwIG5leHRfYXJnOworCisgIC8qICdmcHJfYmFzZScgcG9pbnRzIGF0IHRoZSBzcGFjZSBmb3IgZnByMywgYW5kIGdyb3dzIHVwd2FyZHMgYXMKKyAgICAgd2UgdXNlIEZQUiByZWdpc3RlcnMuICAqLworICB2YWxwIGZwcl9iYXNlOworICB1bnNpZ25lZCBpbnQgZnBhcmdfY291bnQ7CisKKyAgdW5zaWduZWQgaW50IGksIHdvcmRzLCBuYXJncywgbmZpeGVkYXJnczsKKyAgZmZpX3R5cGUgKipwdHI7CisgIGRvdWJsZSBkb3VibGVfdG1wOworICB1bmlvbgorICB7CisgICAgdm9pZCAqKnY7CisgICAgY2hhciAqKmM7CisgICAgc2lnbmVkIGNoYXIgKipzYzsKKyAgICB1bnNpZ25lZCBjaGFyICoqdWM7CisgICAgc2lnbmVkIHNob3J0ICoqc3M7CisgICAgdW5zaWduZWQgc2hvcnQgKip1czsKKyAgICBzaWduZWQgaW50ICoqc2k7CisgICAgdW5zaWduZWQgaW50ICoqdWk7CisgICAgdW5zaWduZWQgbG9uZyAqKnVsOworICAgIGZsb2F0ICoqZjsKKyAgICBkb3VibGUgKipkOworICB9IHBfYXJndjsKKyAgdW5zaWduZWQgbG9uZyBncHJ2YWx1ZTsKKyAgdW5zaWduZWQgbG9uZyBhbGlnbjsKKworICBzdGFja3RvcC5jID0gKGNoYXIgKikgc3RhY2sgKyBieXRlczsKKyAgZ3ByX2Jhc2UudWwgPSBzdGFja3RvcC51bCAtIEFTTV9ORUVEU19SRUdJU1RFUlM2NCAtIE5VTV9HUFJfQVJHX1JFR0lTVEVSUzY0OworICBncHJfZW5kLnVsID0gZ3ByX2Jhc2UudWwgKyBOVU1fR1BSX0FSR19SRUdJU1RFUlM2NDsKKyNpZiBfQ0FMTF9FTEYgPT0gMgorICByZXN0LnVsID0gc3RhY2sgKyA0ICsgTlVNX0dQUl9BUkdfUkVHSVNURVJTNjQ7CisjZWxzZQorICByZXN0LnVsID0gc3RhY2sgKyA2ICsgTlVNX0dQUl9BUkdfUkVHSVNURVJTNjQ7CisjZW5kaWYKKyAgZnByX2Jhc2UuZCA9IGdwcl9iYXNlLmQgLSBOVU1fRlBSX0FSR19SRUdJU1RFUlM2NDsKKyAgZnBhcmdfY291bnQgPSAwOworICBuZXh0X2FyZy51bCA9IGdwcl9iYXNlLnVsOworCisgIC8qIENoZWNrIHRoYXQgZXZlcnl0aGluZyBzdGFydHMgYWxpZ25lZCBwcm9wZXJseS4gICovCisgIEZGSV9BU1NFUlQgKCgodW5zaWduZWQgbG9uZykgKGNoYXIgKikgc3RhY2sgJiAweEYpID09IDApOworICBGRklfQVNTRVJUICgoKHVuc2lnbmVkIGxvbmcpIHN0YWNrdG9wLmMgJiAweEYpID09IDApOworICBGRklfQVNTRVJUICgoYnl0ZXMgJiAweEYpID09IDApOworCisgIC8qIERlYWwgd2l0aCByZXR1cm4gdmFsdWVzIHRoYXQgYXJlIGFjdHVhbGx5IHBhc3MtYnktcmVmZXJlbmNlLiAgKi8KKyAgaWYgKGZsYWdzICYgRkxBR19SRVRWQUxfUkVGRVJFTkNFKQorICAgICpuZXh0X2FyZy51bCsrID0gKHVuc2lnbmVkIGxvbmcpIChjaGFyICopIGVjaWYtPnJ2YWx1ZTsKKworICAvKiBOb3cgZm9yIHRoZSBhcmd1bWVudHMuICAqLworICBwX2FyZ3YudiA9IGVjaWYtPmF2YWx1ZTsKKyAgbmFyZ3MgPSBlY2lmLT5jaWYtPm5hcmdzOworI2lmIF9DQUxMX0VMRiAhPSAyCisgIG5maXhlZGFyZ3MgPSAodW5zaWduZWQpIC0xOworICBpZiAoKGZsYWdzICYgRkxBR19DT01QQVQpID09IDApCisjZW5kaWYKKyAgICBuZml4ZWRhcmdzID0gZWNpZi0+Y2lmLT5uZml4ZWRhcmdzOworICBmb3IgKHB0ciA9IGVjaWYtPmNpZi0+YXJnX3R5cGVzLCBpID0gMDsKKyAgICAgICBpIDwgbmFyZ3M7CisgICAgICAgaSsrLCBwdHIrKywgcF9hcmd2LnYrKykKKyAgICB7CisjaWYgX0NBTExfRUxGID09IDIKKyAgICAgIHVuc2lnbmVkIGludCBlbHQsIGVsbnVtOworI2VuZGlmCisKKyAgICAgIHN3aXRjaCAoKCpwdHIpLT50eXBlKQorCXsKKyNpZiBGRklfVFlQRV9MT05HRE9VQkxFICE9IEZGSV9UWVBFX0RPVUJMRQorCWNhc2UgRkZJX1RZUEVfTE9OR0RPVUJMRToKKwkgIGlmICgoZWNpZi0+Y2lmLT5hYmkgJiBGRklfTElOVVhfTE9OR19ET1VCTEVfMTI4KSAhPSAwKQorCSAgICB7CisJICAgICAgZG91YmxlX3RtcCA9ICgqcF9hcmd2LmQpWzBdOworCSAgICAgIGlmIChmcGFyZ19jb3VudCA8IE5VTV9GUFJfQVJHX1JFR0lTVEVSUzY0ICYmIGkgPCBuZml4ZWRhcmdzKQorCQl7CisJCSAgKmZwcl9iYXNlLmQrKyA9IGRvdWJsZV90bXA7CisjIGlmIF9DQUxMX0VMRiAhPSAyCisJCSAgaWYgKChmbGFncyAmIEZMQUdfQ09NUEFUKSAhPSAwKQorCQkgICAgKm5leHRfYXJnLmQgPSBkb3VibGVfdG1wOworIyBlbmRpZgorCQl9CisJICAgICAgZWxzZQorCQkqbmV4dF9hcmcuZCA9IGRvdWJsZV90bXA7CisJICAgICAgaWYgKCsrbmV4dF9hcmcudWwgPT0gZ3ByX2VuZC51bCkKKwkJbmV4dF9hcmcudWwgPSByZXN0LnVsOworCSAgICAgIGZwYXJnX2NvdW50Kys7CisJICAgICAgZG91YmxlX3RtcCA9ICgqcF9hcmd2LmQpWzFdOworCSAgICAgIGlmIChmcGFyZ19jb3VudCA8IE5VTV9GUFJfQVJHX1JFR0lTVEVSUzY0ICYmIGkgPCBuZml4ZWRhcmdzKQorCQl7CisJCSAgKmZwcl9iYXNlLmQrKyA9IGRvdWJsZV90bXA7CisjIGlmIF9DQUxMX0VMRiAhPSAyCisJCSAgaWYgKChmbGFncyAmIEZMQUdfQ09NUEFUKSAhPSAwKQorCQkgICAgKm5leHRfYXJnLmQgPSBkb3VibGVfdG1wOworIyBlbmRpZgorCQl9CisJICAgICAgZWxzZQorCQkqbmV4dF9hcmcuZCA9IGRvdWJsZV90bXA7CisJICAgICAgaWYgKCsrbmV4dF9hcmcudWwgPT0gZ3ByX2VuZC51bCkKKwkJbmV4dF9hcmcudWwgPSByZXN0LnVsOworCSAgICAgIGZwYXJnX2NvdW50Kys7CisJICAgICAgRkZJX0FTU0VSVCAoX19MREJMX01BTlRfRElHX18gPT0gMTA2KTsKKwkgICAgICBGRklfQVNTRVJUIChmbGFncyAmIEZMQUdfRlBfQVJHVU1FTlRTKTsKKwkgICAgICBicmVhazsKKwkgICAgfQorCSAgLyogRmFsbCB0aHJvdWdoLiAgKi8KKyNlbmRpZgorCWNhc2UgRkZJX1RZUEVfRE9VQkxFOgorCSAgZG91YmxlX3RtcCA9ICoqcF9hcmd2LmQ7CisJICBpZiAoZnBhcmdfY291bnQgPCBOVU1fRlBSX0FSR19SRUdJU1RFUlM2NCAmJiBpIDwgbmZpeGVkYXJncykKKwkgICAgeworCSAgICAgICpmcHJfYmFzZS5kKysgPSBkb3VibGVfdG1wOworI2lmIF9DQUxMX0VMRiAhPSAyCisJICAgICAgaWYgKChmbGFncyAmIEZMQUdfQ09NUEFUKSAhPSAwKQorCQkqbmV4dF9hcmcuZCA9IGRvdWJsZV90bXA7CisjZW5kaWYKKwkgICAgfQorCSAgZWxzZQorCSAgICAqbmV4dF9hcmcuZCA9IGRvdWJsZV90bXA7CisJICBpZiAoKytuZXh0X2FyZy51bCA9PSBncHJfZW5kLnVsKQorCSAgICBuZXh0X2FyZy51bCA9IHJlc3QudWw7CisJICBmcGFyZ19jb3VudCsrOworCSAgRkZJX0FTU0VSVCAoZmxhZ3MgJiBGTEFHX0ZQX0FSR1VNRU5UUyk7CisJICBicmVhazsKKworCWNhc2UgRkZJX1RZUEVfRkxPQVQ6CisJICBkb3VibGVfdG1wID0gKipwX2FyZ3YuZjsKKwkgIGlmIChmcGFyZ19jb3VudCA8IE5VTV9GUFJfQVJHX1JFR0lTVEVSUzY0ICYmIGkgPCBuZml4ZWRhcmdzKQorCSAgICB7CisJICAgICAgKmZwcl9iYXNlLmQrKyA9IGRvdWJsZV90bXA7CisjaWYgX0NBTExfRUxGICE9IDIKKwkgICAgICBpZiAoKGZsYWdzICYgRkxBR19DT01QQVQpICE9IDApCisJCSpuZXh0X2FyZy5mID0gKGZsb2F0KSBkb3VibGVfdG1wOworI2VuZGlmCisJICAgIH0KKwkgIGVsc2UKKwkgICAgKm5leHRfYXJnLmYgPSAoZmxvYXQpIGRvdWJsZV90bXA7CisJICBpZiAoKytuZXh0X2FyZy51bCA9PSBncHJfZW5kLnVsKQorCSAgICBuZXh0X2FyZy51bCA9IHJlc3QudWw7CisJICBmcGFyZ19jb3VudCsrOworCSAgRkZJX0FTU0VSVCAoZmxhZ3MgJiBGTEFHX0ZQX0FSR1VNRU5UUyk7CisJICBicmVhazsKKworCWNhc2UgRkZJX1RZUEVfU1RSVUNUOgorCSAgaWYgKChlY2lmLT5jaWYtPmFiaSAmIEZGSV9MSU5VWF9TVFJVQ1RfQUxJR04pICE9IDApCisJICAgIHsKKwkgICAgICBhbGlnbiA9ICgqcHRyKS0+YWxpZ25tZW50OworCSAgICAgIGlmIChhbGlnbiA+IDE2KQorCQlhbGlnbiA9IDE2OworCSAgICAgIGlmIChhbGlnbiA+IDEpCisJCW5leHRfYXJnLnAgPSBBTElHTiAobmV4dF9hcmcucCwgYWxpZ24pOworCSAgICB9CisjaWYgX0NBTExfRUxGID09IDIKKwkgIGVsdCA9IGRpc2NvdmVyX2hvbW9nZW5lb3VzX2FnZ3JlZ2F0ZSAoKnB0ciwgJmVsbnVtKTsKKwkgIGlmIChlbHQpCisJICAgIHsKKwkgICAgICB1bmlvbiB7CisJCXZvaWQgKnY7CisJCWZsb2F0ICpmOworCQlkb3VibGUgKmQ7CisJICAgICAgfSBhcmc7CisKKwkgICAgICBhcmcudiA9ICpwX2FyZ3YudjsKKwkgICAgICBpZiAoZWx0ID09IEZGSV9UWVBFX0ZMT0FUKQorCQl7CisJCSAgZG8KKwkJICAgIHsKKwkJICAgICAgZG91YmxlX3RtcCA9ICphcmcuZisrOworCQkgICAgICBpZiAoZnBhcmdfY291bnQgPCBOVU1fRlBSX0FSR19SRUdJU1RFUlM2NAorCQkJICAmJiBpIDwgbmZpeGVkYXJncykKKwkJCSpmcHJfYmFzZS5kKysgPSBkb3VibGVfdG1wOworCQkgICAgICBlbHNlCisJCQkqbmV4dF9hcmcuZiA9IChmbG9hdCkgZG91YmxlX3RtcDsKKwkJICAgICAgaWYgKCsrbmV4dF9hcmcuZiA9PSBncHJfZW5kLmYpCisJCQluZXh0X2FyZy5mID0gcmVzdC5mOworCQkgICAgICBmcGFyZ19jb3VudCsrOworCQkgICAgfQorCQkgIHdoaWxlICgtLWVsbnVtICE9IDApOworCQkgIGlmICgobmV4dF9hcmcucCAmIDMpICE9IDApCisJCSAgICB7CisJCSAgICAgIGlmICgrK25leHRfYXJnLmYgPT0gZ3ByX2VuZC5mKQorCQkJbmV4dF9hcmcuZiA9IHJlc3QuZjsKKwkJICAgIH0KKwkJfQorCSAgICAgIGVsc2UKKwkJZG8KKwkJICB7CisJCSAgICBkb3VibGVfdG1wID0gKmFyZy5kKys7CisJCSAgICBpZiAoZnBhcmdfY291bnQgPCBOVU1fRlBSX0FSR19SRUdJU1RFUlM2NCAmJiBpIDwgbmZpeGVkYXJncykKKwkJICAgICAgKmZwcl9iYXNlLmQrKyA9IGRvdWJsZV90bXA7CisJCSAgICBlbHNlCisJCSAgICAgICpuZXh0X2FyZy5kID0gZG91YmxlX3RtcDsKKwkJICAgIGlmICgrK25leHRfYXJnLmQgPT0gZ3ByX2VuZC5kKQorCQkgICAgICBuZXh0X2FyZy5kID0gcmVzdC5kOworCQkgICAgZnBhcmdfY291bnQrKzsKKwkJICB9CisJCXdoaWxlICgtLWVsbnVtICE9IDApOworCSAgICB9CisJICBlbHNlCisjZW5kaWYKKwkgICAgeworCSAgICAgIHdvcmRzID0gKCgqcHRyKS0+c2l6ZSArIDcpIC8gODsKKwkgICAgICBpZiAobmV4dF9hcmcudWwgPj0gZ3ByX2Jhc2UudWwgJiYgbmV4dF9hcmcudWwgKyB3b3JkcyA+IGdwcl9lbmQudWwpCisJCXsKKwkJICBzaXplX3QgZmlyc3QgPSBncHJfZW5kLmMgLSBuZXh0X2FyZy5jOworCQkgIG1lbWNweSAobmV4dF9hcmcuYywgKnBfYXJndi5jLCBmaXJzdCk7CisJCSAgbWVtY3B5IChyZXN0LmMsICpwX2FyZ3YuYyArIGZpcnN0LCAoKnB0ciktPnNpemUgLSBmaXJzdCk7CisJCSAgbmV4dF9hcmcuYyA9IHJlc3QuYyArIHdvcmRzICogOCAtIGZpcnN0OworCQl9CisJICAgICAgZWxzZQorCQl7CisJCSAgY2hhciAqd2hlcmUgPSBuZXh0X2FyZy5jOworCisjaWZuZGVmIF9fTElUVExFX0VORElBTl9fCisJCSAgLyogU3RydWN0dXJlcyB3aXRoIHNpemUgbGVzcyB0aGFuIGVpZ2h0IGJ5dGVzIGFyZSBwYXNzZWQKKwkJICAgICBsZWZ0LXBhZGRlZC4gICovCisJCSAgaWYgKCgqcHRyKS0+c2l6ZSA8IDgpCisJCSAgICB3aGVyZSArPSA4IC0gKCpwdHIpLT5zaXplOworI2VuZGlmCisJCSAgbWVtY3B5ICh3aGVyZSwgKnBfYXJndi5jLCAoKnB0ciktPnNpemUpOworCQkgIG5leHRfYXJnLnVsICs9IHdvcmRzOworCQkgIGlmIChuZXh0X2FyZy51bCA9PSBncHJfZW5kLnVsKQorCQkgICAgbmV4dF9hcmcudWwgPSByZXN0LnVsOworCQl9CisJICAgIH0KKwkgIGJyZWFrOworCisJY2FzZSBGRklfVFlQRV9VSU5UODoKKwkgIGdwcnZhbHVlID0gKipwX2FyZ3YudWM7CisJICBnb3RvIHB1dGdwcjsKKwljYXNlIEZGSV9UWVBFX1NJTlQ4OgorCSAgZ3BydmFsdWUgPSAqKnBfYXJndi5zYzsKKwkgIGdvdG8gcHV0Z3ByOworCWNhc2UgRkZJX1RZUEVfVUlOVDE2OgorCSAgZ3BydmFsdWUgPSAqKnBfYXJndi51czsKKwkgIGdvdG8gcHV0Z3ByOworCWNhc2UgRkZJX1RZUEVfU0lOVDE2OgorCSAgZ3BydmFsdWUgPSAqKnBfYXJndi5zczsKKwkgIGdvdG8gcHV0Z3ByOworCWNhc2UgRkZJX1RZUEVfVUlOVDMyOgorCSAgZ3BydmFsdWUgPSAqKnBfYXJndi51aTsKKwkgIGdvdG8gcHV0Z3ByOworCWNhc2UgRkZJX1RZUEVfSU5UOgorCWNhc2UgRkZJX1RZUEVfU0lOVDMyOgorCSAgZ3BydmFsdWUgPSAqKnBfYXJndi5zaTsKKwkgIGdvdG8gcHV0Z3ByOworCisJY2FzZSBGRklfVFlQRV9VSU5UNjQ6CisJY2FzZSBGRklfVFlQRV9TSU5UNjQ6CisJY2FzZSBGRklfVFlQRV9QT0lOVEVSOgorCSAgZ3BydmFsdWUgPSAqKnBfYXJndi51bDsKKwlwdXRncHI6CisJICAqbmV4dF9hcmcudWwrKyA9IGdwcnZhbHVlOworCSAgaWYgKG5leHRfYXJnLnVsID09IGdwcl9lbmQudWwpCisJICAgIG5leHRfYXJnLnVsID0gcmVzdC51bDsKKwkgIGJyZWFrOworCX0KKyAgICB9CisKKyAgRkZJX0FTU0VSVCAoZmxhZ3MgJiBGTEFHXzRfR1BSX0FSR1VNRU5UUworCSAgICAgIHx8IChuZXh0X2FyZy51bCA+PSBncHJfYmFzZS51bAorCQkgICYmIG5leHRfYXJnLnVsIDw9IGdwcl9iYXNlLnVsICsgNCkpOworfQorCisKKyNpZiBfQ0FMTF9FTEYgPT0gMgorI2RlZmluZSBNSU5fQ0FDSEVfTElORV9TSVpFIDgKKworc3RhdGljIHZvaWQKK2ZsdXNoX2ljYWNoZSAoY2hhciAqd3JhZGRyLCBjaGFyICp4YWRkciwgaW50IHNpemUpCit7CisgIGludCBpOworICBmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSArPSBNSU5fQ0FDSEVfTElORV9TSVpFKQorICAgIF9fYXNtX18gdm9sYXRpbGUgKCJpY2JpIDAsJTA7IiAiZGNiZiAwLCUxOyIKKwkJICAgICAgOiA6ICJyIiAoeGFkZHIgKyBpKSwgInIiICh3cmFkZHIgKyBpKSA6ICJtZW1vcnkiKTsKKyAgX19hc21fXyB2b2xhdGlsZSAoImljYmkgMCwlMDsiICJkY2JmIDAsJTE7IiAic3luYzsiICJpc3luYzsiCisJCSAgICA6IDogInIiKHhhZGRyICsgc2l6ZSAtIDEpLCAiciIod3JhZGRyICsgc2l6ZSAtIDEpCisJCSAgICA6ICJtZW1vcnkiKTsKK30KKyNlbmRpZgorCitmZmlfc3RhdHVzCitmZmlfcHJlcF9jbG9zdXJlX2xvY19saW51eDY0IChmZmlfY2xvc3VyZSAqY2xvc3VyZSwKKwkJCSAgICAgIGZmaV9jaWYgKmNpZiwKKwkJCSAgICAgIHZvaWQgKCpmdW4pIChmZmlfY2lmICosIHZvaWQgKiwgdm9pZCAqKiwgdm9pZCAqKSwKKwkJCSAgICAgIHZvaWQgKnVzZXJfZGF0YSwKKwkJCSAgICAgIHZvaWQgKmNvZGVsb2MpCit7CisjaWYgX0NBTExfRUxGID09IDIKKyAgdW5zaWduZWQgaW50ICp0cmFtcCA9ICh1bnNpZ25lZCBpbnQgKikgJmNsb3N1cmUtPnRyYW1wWzBdOworCisgIGlmIChjaWYtPmFiaSA8IEZGSV9MSU5VWCB8fCBjaWYtPmFiaSA+PSBGRklfTEFTVF9BQkkpCisgICAgcmV0dXJuIEZGSV9CQURfQUJJOworCisgIHRyYW1wWzBdID0gMHhlOTZjMDAxODsJLyogMDoJbGQJMTEsMmYtMGIoMTIpCSovCisgIHRyYW1wWzFdID0gMHhlOThjMDAxMDsJLyoJbGQJMTIsMWYtMGIoMTIpCSovCisgIHRyYW1wWzJdID0gMHg3ZDg5MDNhNjsJLyoJbXRjdHIJMTIJCSovCisgIHRyYW1wWzNdID0gMHg0ZTgwMDQyMDsJLyoJYmN0cgkJCSovCisJCQkJLyogMToJLnF1YWQJZnVuY3Rpb25fYWRkcgkqLworCQkJCS8qIDI6CS5xdWFkCWNvbnRleHQJCSovCisgICoodm9pZCAqKikgJnRyYW1wWzRdID0gKHZvaWQgKikgZmZpX2Nsb3N1cmVfTElOVVg2NDsKKyAgKih2b2lkICoqKSAmdHJhbXBbNl0gPSBjb2RlbG9jOworICBmbHVzaF9pY2FjaGUgKChjaGFyICopdHJhbXAsIChjaGFyICopY29kZWxvYywgRkZJX1RSQU1QT0xJTkVfU0laRSk7CisjZWxzZQorICB2b2lkICoqdHJhbXAgPSAodm9pZCAqKikgJmNsb3N1cmUtPnRyYW1wWzBdOworCisgIGlmIChjaWYtPmFiaSA8IEZGSV9MSU5VWCB8fCBjaWYtPmFiaSA+PSBGRklfTEFTVF9BQkkpCisgICAgcmV0dXJuIEZGSV9CQURfQUJJOworCisgIC8qIENvcHkgZnVuY3Rpb24gYWRkcmVzcyBhbmQgVE9DIGZyb20gZmZpX2Nsb3N1cmVfTElOVVg2NC4gICovCisgIG1lbWNweSAodHJhbXAsIChjaGFyICopIGZmaV9jbG9zdXJlX0xJTlVYNjQsIDE2KTsKKyAgdHJhbXBbMl0gPSB0cmFtcFsxXTsKKyAgdHJhbXBbMV0gPSBjb2RlbG9jOworI2VuZGlmCisKKyAgY2xvc3VyZS0+Y2lmID0gY2lmOworICBjbG9zdXJlLT5mdW4gPSBmdW47CisgIGNsb3N1cmUtPnVzZXJfZGF0YSA9IHVzZXJfZGF0YTsKKworICByZXR1cm4gRkZJX09LOworfQorCisKK2ludCBGRklfSElEREVOCitmZmlfY2xvc3VyZV9oZWxwZXJfTElOVVg2NCAoZmZpX2Nsb3N1cmUgKmNsb3N1cmUsIHZvaWQgKnJ2YWx1ZSwKKwkJCSAgICB1bnNpZ25lZCBsb25nICpwc3QsIGZmaV9kYmxmbCAqcGZyKQoreworICAvKiBydmFsdWUgaXMgdGhlIHBvaW50ZXIgdG8gc3BhY2UgZm9yIHJldHVybiB2YWx1ZSBpbiBjbG9zdXJlIGFzc2VtYmx5ICovCisgIC8qIHBzdCBpcyB0aGUgcG9pbnRlciB0byBwYXJhbWV0ZXIgc2F2ZSBhcmVhCisgICAgIChyMy1yMTAgYXJlIHN0b3JlZCBpbnRvIGl0cyBmaXJzdCA4IHNsb3RzIGJ5IGZmaV9jbG9zdXJlX0xJTlVYNjQpICovCisgIC8qIHBmciBpcyB0aGUgcG9pbnRlciB0byB3aGVyZSBmMS1mMTMgYXJlIHN0b3JlZCBpbiBmZmlfY2xvc3VyZV9MSU5VWDY0ICovCisKKyAgdm9pZCAqKmF2YWx1ZTsKKyAgZmZpX3R5cGUgKiphcmdfdHlwZXM7CisgIHVuc2lnbmVkIGxvbmcgaSwgYXZuLCBuZml4ZWRhcmdzOworICBmZmlfY2lmICpjaWY7CisgIGZmaV9kYmxmbCAqZW5kX3BmciA9IHBmciArIE5VTV9GUFJfQVJHX1JFR0lTVEVSUzY0OworICB1bnNpZ25lZCBsb25nIGFsaWduOworCisgIGNpZiA9IGNsb3N1cmUtPmNpZjsKKyAgYXZhbHVlID0gYWxsb2NhIChjaWYtPm5hcmdzICogc2l6ZW9mICh2b2lkICopKTsKKworICAvKiBDb3B5IHRoZSBjYWxsZXIncyBzdHJ1Y3R1cmUgcmV0dXJuIHZhbHVlIGFkZHJlc3Mgc28gdGhhdCB0aGUKKyAgICAgY2xvc3VyZSByZXR1cm5zIHRoZSBkYXRhIGRpcmVjdGx5IHRvIHRoZSBjYWxsZXIuICAqLworICBpZiAoY2lmLT5ydHlwZS0+dHlwZSA9PSBGRklfVFlQRV9TVFJVQ1QKKyAgICAgICYmIChjaWYtPmZsYWdzICYgRkxBR19SRVRVUk5TX1NNU1QpID09IDApCisgICAgeworICAgICAgcnZhbHVlID0gKHZvaWQgKikgKnBzdDsKKyAgICAgIHBzdCsrOworICAgIH0KKworICBpID0gMDsKKyAgYXZuID0gY2lmLT5uYXJnczsKKyNpZiBfQ0FMTF9FTEYgIT0gMgorICBuZml4ZWRhcmdzID0gKHVuc2lnbmVkKSAtMTsKKyAgaWYgKChjaWYtPmZsYWdzICYgRkxBR19DT01QQVQpID09IDApCisjZW5kaWYKKyAgICBuZml4ZWRhcmdzID0gY2lmLT5uZml4ZWRhcmdzOworICBhcmdfdHlwZXMgPSBjaWYtPmFyZ190eXBlczsKKworICAvKiBHcmFiIHRoZSBhZGRyZXNzZXMgb2YgdGhlIGFyZ3VtZW50cyBmcm9tIHRoZSBzdGFjayBmcmFtZS4gICovCisgIHdoaWxlIChpIDwgYXZuKQorICAgIHsKKyAgICAgIHVuc2lnbmVkIGludCBlbHQsIGVsbnVtOworCisgICAgICBzd2l0Y2ggKGFyZ190eXBlc1tpXS0+dHlwZSkKKwl7CisJY2FzZSBGRklfVFlQRV9TSU5UODoKKwljYXNlIEZGSV9UWVBFX1VJTlQ4OgorI2lmbmRlZiBfX0xJVFRMRV9FTkRJQU5fXworCSAgYXZhbHVlW2ldID0gKGNoYXIgKikgcHN0ICsgNzsKKwkgIHBzdCsrOworCSAgYnJlYWs7CisjZW5kaWYKKworCWNhc2UgRkZJX1RZUEVfU0lOVDE2OgorCWNhc2UgRkZJX1RZUEVfVUlOVDE2OgorI2lmbmRlZiBfX0xJVFRMRV9FTkRJQU5fXworCSAgYXZhbHVlW2ldID0gKGNoYXIgKikgcHN0ICsgNjsKKwkgIHBzdCsrOworCSAgYnJlYWs7CisjZW5kaWYKKworCWNhc2UgRkZJX1RZUEVfU0lOVDMyOgorCWNhc2UgRkZJX1RZUEVfVUlOVDMyOgorI2lmbmRlZiBfX0xJVFRMRV9FTkRJQU5fXworCSAgYXZhbHVlW2ldID0gKGNoYXIgKikgcHN0ICsgNDsKKwkgIHBzdCsrOworCSAgYnJlYWs7CisjZW5kaWYKKworCWNhc2UgRkZJX1RZUEVfU0lOVDY0OgorCWNhc2UgRkZJX1RZUEVfVUlOVDY0OgorCWNhc2UgRkZJX1RZUEVfUE9JTlRFUjoKKwkgIGF2YWx1ZVtpXSA9IHBzdDsKKwkgIHBzdCsrOworCSAgYnJlYWs7CisKKwljYXNlIEZGSV9UWVBFX1NUUlVDVDoKKwkgIGlmICgoY2lmLT5hYmkgJiBGRklfTElOVVhfU1RSVUNUX0FMSUdOKSAhPSAwKQorCSAgICB7CisJICAgICAgYWxpZ24gPSBhcmdfdHlwZXNbaV0tPmFsaWdubWVudDsKKwkgICAgICBpZiAoYWxpZ24gPiAxNikKKwkJYWxpZ24gPSAxNjsKKwkgICAgICBpZiAoYWxpZ24gPiAxKQorCQlwc3QgPSAodW5zaWduZWQgbG9uZyAqKSBBTElHTiAoKHNpemVfdCkgcHN0LCBhbGlnbik7CisJICAgIH0KKwkgIGVsdCA9IDA7CisjaWYgX0NBTExfRUxGID09IDIKKwkgIGVsdCA9IGRpc2NvdmVyX2hvbW9nZW5lb3VzX2FnZ3JlZ2F0ZSAoYXJnX3R5cGVzW2ldLCAmZWxudW0pOworI2VuZGlmCisJICBpZiAoZWx0KQorCSAgICB7CisJICAgICAgdW5pb24geworCQl2b2lkICp2OworCQl1bnNpZ25lZCBsb25nICp1bDsKKwkJZmxvYXQgKmY7CisJCWRvdWJsZSAqZDsKKwkJc2l6ZV90IHA7CisJICAgICAgfSB0bywgZnJvbTsKKworCSAgICAgIC8qIFJlcGFja2FnZSB0aGUgYWdncmVnYXRlIGZyb20gaXRzIHBhcnRzLiAgVGhlCisJCSBhZ2dyZWdhdGUgc2l6ZSBpcyBub3QgZ3JlYXRlciB0aGFuIHRoZSBzcGFjZSB0YWtlbiBieQorCQkgdGhlIHJlZ2lzdGVycyBzbyBzdG9yZSBiYWNrIHRvIHRoZSByZWdpc3Rlci9wYXJhbWV0ZXIKKwkJIHNhdmUgYXJyYXlzLiAgKi8KKwkgICAgICBpZiAocGZyICsgZWxudW0gPD0gZW5kX3BmcikKKwkJdG8udiA9IHBmcjsKKwkgICAgICBlbHNlCisJCXRvLnYgPSBwc3Q7CisKKwkgICAgICBhdmFsdWVbaV0gPSB0by52OworCSAgICAgIGZyb20udWwgPSBwc3Q7CisJICAgICAgaWYgKGVsdCA9PSBGRklfVFlQRV9GTE9BVCkKKwkJeworCQkgIGRvCisJCSAgICB7CisJCSAgICAgIGlmIChwZnIgPCBlbmRfcGZyICYmIGkgPCBuZml4ZWRhcmdzKQorCQkJeworCQkJICAqdG8uZiA9IChmbG9hdCkgcGZyLT5kOworCQkJICBwZnIrKzsKKwkJCX0KKwkJICAgICAgZWxzZQorCQkJKnRvLmYgPSAqZnJvbS5mOworCQkgICAgICB0by5mKys7CisJCSAgICAgIGZyb20uZisrOworCQkgICAgfQorCQkgIHdoaWxlICgtLWVsbnVtICE9IDApOworCQl9CisJICAgICAgZWxzZQorCQl7CisJCSAgZG8KKwkJICAgIHsKKwkJICAgICAgaWYgKHBmciA8IGVuZF9wZnIgJiYgaSA8IG5maXhlZGFyZ3MpCisJCQl7CisJCQkgICp0by5kID0gcGZyLT5kOworCQkJICBwZnIrKzsKKwkJCX0KKwkJICAgICAgZWxzZQorCQkJKnRvLmQgPSAqZnJvbS5kOworCQkgICAgICB0by5kKys7CisJCSAgICAgIGZyb20uZCsrOworCQkgICAgfQorCQkgIHdoaWxlICgtLWVsbnVtICE9IDApOworCQl9CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworI2lmbmRlZiBfX0xJVFRMRV9FTkRJQU5fXworCSAgICAgIC8qIFN0cnVjdHVyZXMgd2l0aCBzaXplIGxlc3MgdGhhbiBlaWdodCBieXRlcyBhcmUgcGFzc2VkCisJCSBsZWZ0LXBhZGRlZC4gICovCisJICAgICAgaWYgKGFyZ190eXBlc1tpXS0+c2l6ZSA8IDgpCisJCWF2YWx1ZVtpXSA9IChjaGFyICopIHBzdCArIDggLSBhcmdfdHlwZXNbaV0tPnNpemU7CisJICAgICAgZWxzZQorI2VuZGlmCisJCWF2YWx1ZVtpXSA9IHBzdDsKKwkgICAgfQorCSAgcHN0ICs9IChhcmdfdHlwZXNbaV0tPnNpemUgKyA3KSAvIDg7CisJICBicmVhazsKKworI2lmIEZGSV9UWVBFX0xPTkdET1VCTEUgIT0gRkZJX1RZUEVfRE9VQkxFCisJY2FzZSBGRklfVFlQRV9MT05HRE9VQkxFOgorCSAgaWYgKChjaWYtPmFiaSAmIEZGSV9MSU5VWF9MT05HX0RPVUJMRV8xMjgpICE9IDApCisJICAgIHsKKwkgICAgICBpZiAocGZyICsgMSA8IGVuZF9wZnIgJiYgaSArIDEgPCBuZml4ZWRhcmdzKQorCQl7CisJCSAgYXZhbHVlW2ldID0gcGZyOworCQkgIHBmciArPSAyOworCQl9CisJICAgICAgZWxzZQorCQl7CisJCSAgaWYgKHBmciA8IGVuZF9wZnIgJiYgaSA8IG5maXhlZGFyZ3MpCisJCSAgICB7CisJCSAgICAgIC8qIFBhc3NlZCBwYXJ0bHkgaW4gZjEzIGFuZCBwYXJ0bHkgb24gdGhlIHN0YWNrLgorCQkJIE1vdmUgaXQgYWxsIHRvIHRoZSBzdGFjay4gICovCisJCSAgICAgICpwc3QgPSAqKHVuc2lnbmVkIGxvbmcgKikgcGZyOworCQkgICAgICBwZnIrKzsKKwkJICAgIH0KKwkJICBhdmFsdWVbaV0gPSBwc3Q7CisJCX0KKwkgICAgICBwc3QgKz0gMjsKKwkgICAgICBicmVhazsKKwkgICAgfQorCSAgLyogRmFsbCB0aHJvdWdoLiAgKi8KKyNlbmRpZgorCWNhc2UgRkZJX1RZUEVfRE9VQkxFOgorCSAgLyogT24gdGhlIG91dGdvaW5nIHN0YWNrIGFsbCB2YWx1ZXMgYXJlIGFsaWduZWQgdG8gOCAqLworCSAgLyogdGhlcmUgYXJlIDEzIDY0Yml0IGZsb2F0aW5nIHBvaW50IHJlZ2lzdGVycyAqLworCisJICBpZiAocGZyIDwgZW5kX3BmciAmJiBpIDwgbmZpeGVkYXJncykKKwkgICAgeworCSAgICAgIGF2YWx1ZVtpXSA9IHBmcjsKKwkgICAgICBwZnIrKzsKKwkgICAgfQorCSAgZWxzZQorCSAgICBhdmFsdWVbaV0gPSBwc3Q7CisJICBwc3QrKzsKKwkgIGJyZWFrOworCisJY2FzZSBGRklfVFlQRV9GTE9BVDoKKwkgIGlmIChwZnIgPCBlbmRfcGZyICYmIGkgPCBuZml4ZWRhcmdzKQorCSAgICB7CisJICAgICAgLyogRmxvYXQgdmFsdWVzIGFyZSBzdG9yZWQgYXMgZG91YmxlcyBpbiB0aGUKKwkJIGZmaV9jbG9zdXJlX0xJTlVYNjQgY29kZS4gIEZpeCB0aGVtIGhlcmUuICAqLworCSAgICAgIHBmci0+ZiA9IChmbG9hdCkgcGZyLT5kOworCSAgICAgIGF2YWx1ZVtpXSA9IHBmcjsKKwkgICAgICBwZnIrKzsKKwkgICAgfQorCSAgZWxzZQorCSAgICBhdmFsdWVbaV0gPSBwc3Q7CisJICBwc3QrKzsKKwkgIGJyZWFrOworCisJZGVmYXVsdDoKKwkgIEZGSV9BU1NFUlQgKDApOworCX0KKworICAgICAgaSsrOworICAgIH0KKworCisgIChjbG9zdXJlLT5mdW4pIChjaWYsIHJ2YWx1ZSwgYXZhbHVlLCBjbG9zdXJlLT51c2VyX2RhdGEpOworCisgIC8qIFRlbGwgZmZpX2Nsb3N1cmVfTElOVVg2NCBob3cgdG8gcGVyZm9ybSByZXR1cm4gdHlwZSBwcm9tb3Rpb25zLiAgKi8KKyAgaWYgKChjaWYtPmZsYWdzICYgRkxBR19SRVRVUk5TX1NNU1QpICE9IDApCisgICAgeworICAgICAgaWYgKChjaWYtPmZsYWdzICYgRkxBR19SRVRVUk5TX0ZQKSA9PSAwKQorCXJldHVybiBGRklfVjJfVFlQRV9TTUFMTF9TVFJVQ1QgKyBjaWYtPnJ0eXBlLT5zaXplIC0gMTsKKyAgICAgIGVsc2UgaWYgKChjaWYtPmZsYWdzICYgRkxBR19SRVRVUk5TXzY0QklUUykgIT0gMCkKKwlyZXR1cm4gRkZJX1YyX1RZUEVfRE9VQkxFX0hPTU9HOworICAgICAgZWxzZQorCXJldHVybiBGRklfVjJfVFlQRV9GTE9BVF9IT01PRzsKKyAgICB9CisgIHJldHVybiBjaWYtPnJ0eXBlLT50eXBlOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9wb3dlcnBjL2ZmaV9wb3dlcnBjLmggYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9wb3dlcnBjL2ZmaV9wb3dlcnBjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmU2MTY1MwotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3Bvd2VycGMvZmZpX3Bvd2VycGMuaApAQCAtMCwwICsxLDc3IEBACisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgZmZpX3Bvd2VycGMuaCAtIENvcHlyaWdodCAoQykgMjAxMyBJQk0KKyAgICAgICAgICAgICAgICAgICBDb3B5cmlnaHQgKEMpIDIwMTEgQW50aG9ueSBHcmVlbgorICAgICAgICAgICAgICAgICAgIENvcHlyaWdodCAoQykgMjAxMSBLeWxlIE1vZmZldHQKKyAgICAgICAgICAgICAgICAgICBDb3B5cmlnaHQgKEMpIDIwMDggUmVkIEhhdCwgSW5jCisgICAgICAgICAgICAgICAgICAgQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jCisgICAgICAgICAgICAgICAgICAgQ29weXJpZ2h0IChjKSAxOTk4IEdlb2ZmcmV5IEtlYXRpbmcKKworICAgUG93ZXJQQyBGb3JlaWduIEZ1bmN0aW9uIEludGVyZmFjZQorCisgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKyAgIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICAgYGBTb2Z0d2FyZScnKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisgICB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisgICBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKyAgIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworICAgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCisgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZAorICAgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKKyAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MKKyAgIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAgIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KKyAgIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAgIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICAgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgICBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitlbnVtIHsKKyAgLyogVGhlIGFzc2VtYmx5IGRlcGVuZHMgb24gdGhlc2UgZXhhY3QgZmxhZ3MuICAqLworICAvKiBUaGVzZSBnbyBpbiBjcjcgKi8KKyAgRkxBR19SRVRVUk5TX1NNU1QJPSAxIDw8ICgzMS0zMSksIC8qIFVzZWQgZm9yIEZGSV9TWVNWIHNtYWxsIHN0cnVjdHMuICAqLworICBGTEFHX1JFVFVSTlNfTk9USElORyAgPSAxIDw8ICgzMS0zMCksCisgIEZMQUdfUkVUVVJOU19GUCAgICAgICA9IDEgPDwgKDMxLTI5KSwKKyAgRkxBR19SRVRVUk5TXzY0QklUUyAgID0gMSA8PCAoMzEtMjgpLAorCisgIC8qIFRoaXMgZ29lcyBpbiBjcjYgKi8KKyAgRkxBR19SRVRVUk5TXzEyOEJJVFMgID0gMSA8PCAoMzEtMjcpLAorCisgIEZMQUdfQ09NUEFUCQk9IDEgPDwgKDMxLSA4KSwgLyogTm90IHVzZWQgYnkgYXNzZW1ibHkgKi8KKworICAvKiBUaGVzZSBnbyBpbiBjcjEgKi8KKyAgRkxBR19BUkdfTkVFRFNfQ09QWSAgID0gMSA8PCAoMzEtIDcpLCAvKiBVc2VkIGJ5IHN5c3YgY29kZSAqLworICBGTEFHX0FSR19ORUVEU19QU0FWRSAgPSBGTEFHX0FSR19ORUVEU19DT1BZLCAvKiBVc2VkIGJ5IGxpbnV4NjQgY29kZSAqLworICBGTEFHX0ZQX0FSR1VNRU5UUyAgICAgPSAxIDw8ICgzMS0gNiksIC8qIGNyMS5lcTsgc3BlY2lmaWVkIGJ5IEFCSSAqLworICBGTEFHXzRfR1BSX0FSR1VNRU5UUyAgPSAxIDw8ICgzMS0gNSksCisgIEZMQUdfUkVUVkFMX1JFRkVSRU5DRSA9IDEgPDwgKDMxLSA0KQorfTsKKwordHlwZWRlZiB1bmlvbgoreworICBmbG9hdCBmOworICBkb3VibGUgZDsKK30gZmZpX2RibGZsOworCit2b2lkIEZGSV9ISURERU4gZmZpX2Nsb3N1cmVfU1lTViAodm9pZCk7Cit2b2lkIEZGSV9ISURERU4gZmZpX2NhbGxfU1lTVihleHRlbmRlZF9jaWYgKiwgdW5zaWduZWQsIHVuc2lnbmVkLCB1bnNpZ25lZCAqLAorCQkJICAgICAgdm9pZCAoKikodm9pZCkpOworCit2b2lkIEZGSV9ISURERU4gZmZpX3ByZXBfdHlwZXNfc3lzdiAoZmZpX2FiaSk7CitmZmlfc3RhdHVzIEZGSV9ISURERU4gZmZpX3ByZXBfY2lmX3N5c3YgKGZmaV9jaWYgKik7CitpbnQgRkZJX0hJRERFTiBmZmlfY2xvc3VyZV9oZWxwZXJfU1lTViAoZmZpX2Nsb3N1cmUgKiwgdm9pZCAqLCB1bnNpZ25lZCBsb25nICosCisJCQkJCWZmaV9kYmxmbCAqLCB1bnNpZ25lZCBsb25nICopOworCit2b2lkIEZGSV9ISURERU4gZmZpX2NhbGxfTElOVVg2NChleHRlbmRlZF9jaWYgKiwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywKKwkJCQkgdW5zaWduZWQgbG9uZyAqLCB2b2lkICgqKSh2b2lkKSk7Cit2b2lkIEZGSV9ISURERU4gZmZpX2Nsb3N1cmVfTElOVVg2NCAodm9pZCk7CisKK3ZvaWQgRkZJX0hJRERFTiBmZmlfcHJlcF90eXBlc19saW51eDY0IChmZmlfYWJpKTsKK2ZmaV9zdGF0dXMgRkZJX0hJRERFTiBmZmlfcHJlcF9jaWZfbGludXg2NCAoZmZpX2NpZiAqKTsKK2ZmaV9zdGF0dXMgRkZJX0hJRERFTiBmZmlfcHJlcF9jaWZfbGludXg2NF92YXIgKGZmaV9jaWYgKiwgdW5zaWduZWQgaW50LAorCQkJCQkJdW5zaWduZWQgaW50KTsKK3ZvaWQgRkZJX0hJRERFTiBmZmlfcHJlcF9hcmdzNjQgKGV4dGVuZGVkX2NpZiAqLCB1bnNpZ25lZCBsb25nICpjb25zdCk7CitpbnQgRkZJX0hJRERFTiBmZmlfY2xvc3VyZV9oZWxwZXJfTElOVVg2NCAoZmZpX2Nsb3N1cmUgKiwgdm9pZCAqLAorCQkJCQkgICB1bnNpZ25lZCBsb25nICosIGZmaV9kYmxmbCAqKTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3Bvd2VycGMvZmZpX3N5c3YuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3Bvd2VycGMvZmZpX3N5c3YuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmU4NWZlCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvcG93ZXJwYy9mZmlfc3lzdi5jCkBAIC0wLDAgKzEsOTMxIEBACisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgZmZpX3N5c3YuYyAtIENvcHlyaWdodCAoQykgMjAxMyBJQk0KKyAgICAgICAgICAgICAgICBDb3B5cmlnaHQgKEMpIDIwMTEgQW50aG9ueSBHcmVlbgorICAgICAgICAgICAgICAgIENvcHlyaWdodCAoQykgMjAxMSBLeWxlIE1vZmZldHQKKyAgICAgICAgICAgICAgICBDb3B5cmlnaHQgKEMpIDIwMDggUmVkIEhhdCwgSW5jCisgICAgICAgICAgICAgICAgQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jCisgICAgICAgICAgICAgICAgQ29weXJpZ2h0IChjKSAxOTk4IEdlb2ZmcmV5IEtlYXRpbmcKKworICAgUG93ZXJQQyBGb3JlaWduIEZ1bmN0aW9uIEludGVyZmFjZQorCisgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKyAgIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICAgYGBTb2Z0d2FyZScnKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisgICB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisgICBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKyAgIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworICAgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCisgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZAorICAgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKKyAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MKKyAgIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAgIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KKyAgIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAgIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICAgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgICBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaW5jbHVkZSAiZmZpLmgiCisKKyNpZm5kZWYgUE9XRVJQQzY0CisjaW5jbHVkZSAiZmZpX2NvbW1vbi5oIgorI2luY2x1ZGUgImZmaV9wb3dlcnBjLmgiCisKKworLyogQWJvdXQgdGhlIFNZU1YgQUJJLiAgKi8KKyNkZWZpbmUgQVNNX05FRURTX1JFR0lTVEVSUyA0CisjZGVmaW5lIE5VTV9HUFJfQVJHX1JFR0lTVEVSUyA4CisjZGVmaW5lIE5VTV9GUFJfQVJHX1JFR0lTVEVSUyA4CisKKworI2lmIEhBVkVfTE9OR19ET1VCTEVfVkFSSUFOVCAmJiBGRklfVFlQRV9MT05HRE9VQkxFICE9IEZGSV9UWVBFX0RPVUJMRQorLyogQWRqdXN0IHNpemUgb2YgZmZpX3R5cGVfbG9uZ2RvdWJsZS4gICovCit2b2lkIEZGSV9ISURERU4KK2ZmaV9wcmVwX3R5cGVzX3N5c3YgKGZmaV9hYmkgYWJpKQoreworICBpZiAoKGFiaSAmIChGRklfU1lTViB8IEZGSV9TWVNWX0xPTkdfRE9VQkxFXzEyOCkpID09IEZGSV9TWVNWKQorICAgIHsKKyAgICAgIGZmaV90eXBlX2xvbmdkb3VibGUuc2l6ZSA9IDg7CisgICAgICBmZmlfdHlwZV9sb25nZG91YmxlLmFsaWdubWVudCA9IDg7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgZmZpX3R5cGVfbG9uZ2RvdWJsZS5zaXplID0gMTY7CisgICAgICBmZmlfdHlwZV9sb25nZG91YmxlLmFsaWdubWVudCA9IDE2OworICAgIH0KK30KKyNlbmRpZgorCisvKiBUcmFuc2Zvcm0gbG9uZyBkb3VibGUsIGRvdWJsZSBhbmQgZmxvYXQgdG8gb3RoZXIgdHlwZXMgYXMgcGVyIGFiaS4gICovCitzdGF0aWMgaW50Cit0cmFuc2xhdGVfZmxvYXQgKGludCBhYmksIGludCB0eXBlKQoreworI2lmIEZGSV9UWVBFX0xPTkdET1VCTEUgIT0gRkZJX1RZUEVfRE9VQkxFCisgIGlmICh0eXBlID09IEZGSV9UWVBFX0xPTkdET1VCTEUKKyAgICAgICYmIChhYmkgJiBGRklfU1lTVl9MT05HX0RPVUJMRV8xMjgpID09IDApCisgICAgdHlwZSA9IEZGSV9UWVBFX0RPVUJMRTsKKyNlbmRpZgorICBpZiAoKGFiaSAmIEZGSV9TWVNWX1NPRlRfRkxPQVQpICE9IDApCisgICAgeworICAgICAgaWYgKHR5cGUgPT0gRkZJX1RZUEVfRkxPQVQpCisJdHlwZSA9IEZGSV9UWVBFX1VJTlQzMjsKKyAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRkZJX1RZUEVfRE9VQkxFKQorCXR5cGUgPSBGRklfVFlQRV9VSU5UNjQ7CisjaWYgRkZJX1RZUEVfTE9OR0RPVUJMRSAhPSBGRklfVFlQRV9ET1VCTEUKKyAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRkZJX1RZUEVfTE9OR0RPVUJMRSkKKwl0eXBlID0gRkZJX1RZUEVfVUlOVDEyODsKKyAgICB9CisgIGVsc2UgaWYgKChhYmkgJiBGRklfU1lTVl9JQk1fTE9OR19ET1VCTEUpID09IDApCisgICAgeworICAgICAgaWYgKHR5cGUgPT0gRkZJX1RZUEVfTE9OR0RPVUJMRSkKKwl0eXBlID0gRkZJX1RZUEVfU1RSVUNUOworI2VuZGlmCisgICAgfQorICByZXR1cm4gdHlwZTsKK30KKworLyogUGVyZm9ybSBtYWNoaW5lIGRlcGVuZGVudCBjaWYgcHJvY2Vzc2luZyAqLworc3RhdGljIGZmaV9zdGF0dXMKK2ZmaV9wcmVwX2NpZl9zeXN2X2NvcmUgKGZmaV9jaWYgKmNpZikKK3sKKyAgZmZpX3R5cGUgKipwdHI7CisgIHVuc2lnbmVkIGJ5dGVzOworICB1bnNpZ25lZCBpLCBmcGFyZ19jb3VudCA9IDAsIGludGFyZ19jb3VudCA9IDA7CisgIHVuc2lnbmVkIGZsYWdzID0gY2lmLT5mbGFnczsKKyAgdW5zaWduZWQgc3RydWN0X2NvcHlfc2l6ZSA9IDA7CisgIHVuc2lnbmVkIHR5cGUgPSBjaWYtPnJ0eXBlLT50eXBlOworICB1bnNpZ25lZCBzaXplID0gY2lmLT5ydHlwZS0+c2l6ZTsKKworICAvKiBUaGUgbWFjaGluZS1pbmRlcGVuZGVudCBjYWxjdWxhdGlvbiBvZiBjaWYtPmJ5dGVzIGRvZXNuJ3Qgd29yaworICAgICBmb3IgdXMuICBSZWRvIHRoZSBjYWxjdWxhdGlvbi4gICovCisKKyAgLyogU3BhY2UgZm9yIHRoZSBmcmFtZSBwb2ludGVyLCBjYWxsZWUncyBMUiwgYW5kIHRoZSBhc20ncyB0ZW1wIHJlZ3MuICAqLworICBieXRlcyA9ICgyICsgQVNNX05FRURTX1JFR0lTVEVSUykgKiBzaXplb2YgKGludCk7CisKKyAgLyogU3BhY2UgZm9yIHRoZSBHUFIgcmVnaXN0ZXJzLiAgKi8KKyAgYnl0ZXMgKz0gTlVNX0dQUl9BUkdfUkVHSVNURVJTICogc2l6ZW9mIChpbnQpOworCisgIC8qIFJldHVybiB2YWx1ZSBoYW5kbGluZy4gIFRoZSBydWxlcyBmb3IgU1lTViBhcmUgYXMgZm9sbG93czoKKyAgICAgLSAzMi1iaXQgKG9yIGxlc3MpIGludGVnZXIgdmFsdWVzIGFyZSByZXR1cm5lZCBpbiBncHIzOworICAgICAtIFN0cnVjdHVyZXMgb2Ygc2l6ZSA8PSA0IGJ5dGVzIGFsc28gcmV0dXJuZWQgaW4gZ3ByMzsKKyAgICAgLSA2NC1iaXQgaW50ZWdlciB2YWx1ZXMgYW5kIHN0cnVjdHVyZXMgYmV0d2VlbiA1IGFuZCA4IGJ5dGVzIGFyZSByZXR1cm5lZAorICAgICBpbiBncHIzIGFuZCBncHI0OworICAgICAtIExhcmdlciBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQgc3BhY2UgYW5kIGEgcG9pbnRlciBpcyBwYXNzZWQgYXMKKyAgICAgdGhlIGZpcnN0IGFyZ3VtZW50LgorICAgICAtIFNpbmdsZS9kb3VibGUgRlAgdmFsdWVzIGFyZSByZXR1cm5lZCBpbiBmcHIxOworICAgICAtIGxvbmcgZG91YmxlcyAoaWYgbm90IGVxdWl2YWxlbnQgdG8gZG91YmxlKSBhcmUgcmV0dXJuZWQgaW4KKyAgICAgZnByMSxmcHIyIGZvciBMaW51eCBhbmQgYXMgZm9yIGxhcmdlIHN0cnVjdHMgZm9yIFN5c1YuICAqLworCisgIHR5cGUgPSB0cmFuc2xhdGVfZmxvYXQgKGNpZi0+YWJpLCB0eXBlKTsKKworICBzd2l0Y2ggKHR5cGUpCisgICAgeworI2lmIEZGSV9UWVBFX0xPTkdET1VCTEUgIT0gRkZJX1RZUEVfRE9VQkxFCisgICAgY2FzZSBGRklfVFlQRV9MT05HRE9VQkxFOgorICAgICAgZmxhZ3MgfD0gRkxBR19SRVRVUk5TXzEyOEJJVFM7CisgICAgICAvKiBGYWxsIHRocm91Z2guICAqLworI2VuZGlmCisgICAgY2FzZSBGRklfVFlQRV9ET1VCTEU6CisgICAgICBmbGFncyB8PSBGTEFHX1JFVFVSTlNfNjRCSVRTOworICAgICAgLyogRmFsbCB0aHJvdWdoLiAgKi8KKyAgICBjYXNlIEZGSV9UWVBFX0ZMT0FUOgorICAgICAgZmxhZ3MgfD0gRkxBR19SRVRVUk5TX0ZQOworI2lmZGVmIF9fTk9fRlBSU19fCisgICAgICByZXR1cm4gRkZJX0JBRF9BQkk7CisjZW5kaWYKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBGRklfVFlQRV9VSU5UMTI4OgorICAgICAgZmxhZ3MgfD0gRkxBR19SRVRVUk5TXzEyOEJJVFM7CisgICAgICAvKiBGYWxsIHRocm91Z2guICAqLworICAgIGNhc2UgRkZJX1RZUEVfVUlOVDY0OgorICAgIGNhc2UgRkZJX1RZUEVfU0lOVDY0OgorICAgICAgZmxhZ3MgfD0gRkxBR19SRVRVUk5TXzY0QklUUzsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBGRklfVFlQRV9TVFJVQ1Q6CisgICAgICAvKiBUaGUgZmluYWwgU1lTViBBQkkgc2F5cyB0aGF0IHN0cnVjdHVyZXMgc21hbGxlciBvciBlcXVhbCA4IGJ5dGVzCisJIGFyZSByZXR1cm5lZCBpbiByMy9yNC4gIEEgZHJhZnQgQUJJIHVzZWQgYnkgbGludXggaW5zdGVhZAorCSByZXR1cm5zIHRoZW0gaW4gbWVtb3J5LiAgKi8KKyAgICAgIGlmICgoY2lmLT5hYmkgJiBGRklfU1lTVl9TVFJVQ1RfUkVUKSAhPSAwICYmIHNpemUgPD0gOCkKKwl7CisJICBmbGFncyB8PSBGTEFHX1JFVFVSTlNfU01TVDsKKwkgIGJyZWFrOworCX0KKyAgICAgIGludGFyZ19jb3VudCsrOworICAgICAgZmxhZ3MgfD0gRkxBR19SRVRWQUxfUkVGRVJFTkNFOworICAgICAgLyogRmFsbCB0aHJvdWdoLiAgKi8KKyAgICBjYXNlIEZGSV9UWVBFX1ZPSUQ6CisgICAgICBmbGFncyB8PSBGTEFHX1JFVFVSTlNfTk9USElORzsKKyAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgIC8qIFJldHVybnMgMzItYml0IGludGVnZXIsIG9yIHNpbWlsYXIuICBOb3RoaW5nIHRvIGRvIGhlcmUuICAqLworICAgICAgYnJlYWs7CisgICAgfQorCisgIC8qIFRoZSBmaXJzdCBOVU1fR1BSX0FSR19SRUdJU1RFUlMgd29yZHMgb2YgaW50ZWdlciBhcmd1bWVudHMsIGFuZCB0aGUKKyAgICAgZmlyc3QgTlVNX0ZQUl9BUkdfUkVHSVNURVJTIGZwIGFyZ3VtZW50cywgZ28gaW4gcmVnaXN0ZXJzOyB0aGUgcmVzdAorICAgICBnb2VzIG9uIHRoZSBzdGFjay4gIFN0cnVjdHVyZXMgYW5kIGxvbmcgZG91YmxlcyAoaWYgbm90IGVxdWl2YWxlbnQKKyAgICAgdG8gZG91YmxlKSBhcmUgcGFzc2VkIGFzIGEgcG9pbnRlciB0byBhIGNvcHkgb2YgdGhlIHN0cnVjdHVyZS4KKyAgICAgU3R1ZmYgb24gdGhlIHN0YWNrIG5lZWRzIHRvIGtlZXAgcHJvcGVyIGFsaWdubWVudC4gICovCisgIGZvciAocHRyID0gY2lmLT5hcmdfdHlwZXMsIGkgPSBjaWYtPm5hcmdzOyBpID4gMDsgaS0tLCBwdHIrKykKKyAgICB7CisgICAgICB1bnNpZ25lZCBzaG9ydCB0eXBlbnVtID0gKCpwdHIpLT50eXBlOworCisgICAgICB0eXBlbnVtID0gdHJhbnNsYXRlX2Zsb2F0IChjaWYtPmFiaSwgdHlwZW51bSk7CisKKyAgICAgIHN3aXRjaCAodHlwZW51bSkKKwl7CisjaWYgRkZJX1RZUEVfTE9OR0RPVUJMRSAhPSBGRklfVFlQRV9ET1VCTEUKKwljYXNlIEZGSV9UWVBFX0xPTkdET1VCTEU6CisJICBmcGFyZ19jb3VudCsrOworCSAgLyogRmFsbCB0aHJ1ICovCisjZW5kaWYKKwljYXNlIEZGSV9UWVBFX0RPVUJMRToKKwkgIGZwYXJnX2NvdW50Kys7CisJICAvKiBJZiB0aGlzIEZQIGFyZyBpcyBnb2luZyBvbiB0aGUgc3RhY2ssIGl0IG11c3QgYmUKKwkgICAgIDgtYnl0ZS1hbGlnbmVkLiAgKi8KKwkgIGlmIChmcGFyZ19jb3VudCA+IE5VTV9GUFJfQVJHX1JFR0lTVEVSUworCSAgICAgICYmIGludGFyZ19jb3VudCA+PSBOVU1fR1BSX0FSR19SRUdJU1RFUlMKKwkgICAgICAmJiBpbnRhcmdfY291bnQgJSAyICE9IDApCisJICAgIGludGFyZ19jb3VudCsrOworI2lmZGVmIF9fTk9fRlBSU19fCisJICByZXR1cm4gRkZJX0JBRF9BQkk7CisjZW5kaWYKKwkgIGJyZWFrOworCisJY2FzZSBGRklfVFlQRV9GTE9BVDoKKwkgIGZwYXJnX2NvdW50Kys7CisjaWZkZWYgX19OT19GUFJTX18KKwkgIHJldHVybiBGRklfQkFEX0FCSTsKKyNlbmRpZgorCSAgYnJlYWs7CisKKwljYXNlIEZGSV9UWVBFX1VJTlQxMjg6CisJICAvKiBBIGxvbmcgZG91YmxlIGluIEZGSV9MSU5VWF9TT0ZUX0ZMT0FUIGNhbiB1c2Ugb25seSBhIHNldAorCSAgICAgb2YgZm91ciBjb25zZWN1dGl2ZSBncHJzLiBJZiB3ZSBkbyBub3QgaGF2ZSBlbm91Z2gsIHdlCisJICAgICBoYXZlIHRvIGFkanVzdCB0aGUgaW50YXJnX2NvdW50IHZhbHVlLiAgKi8KKwkgIGlmIChpbnRhcmdfY291bnQgPj0gTlVNX0dQUl9BUkdfUkVHSVNURVJTIC0gMworCSAgICAgICYmIGludGFyZ19jb3VudCA8IE5VTV9HUFJfQVJHX1JFR0lTVEVSUykKKwkgICAgaW50YXJnX2NvdW50ID0gTlVNX0dQUl9BUkdfUkVHSVNURVJTOworCSAgaW50YXJnX2NvdW50ICs9IDQ7CisJICBicmVhazsKKworCWNhc2UgRkZJX1RZUEVfVUlOVDY0OgorCWNhc2UgRkZJX1RZUEVfU0lOVDY0OgorCSAgLyogJ2xvbmcgbG9uZycgYXJndW1lbnRzIGFyZSBwYXNzZWQgYXMgdHdvIHdvcmRzLCBidXQKKwkgICAgIGVpdGhlciBib3RoIHdvcmRzIG11c3QgZml0IGluIHJlZ2lzdGVycyBvciBib3RoIGdvCisJICAgICBvbiB0aGUgc3RhY2suICBJZiB0aGV5IGdvIG9uIHRoZSBzdGFjaywgdGhleSBtdXN0CisJICAgICBiZSA4LWJ5dGUtYWxpZ25lZC4KKworCSAgICAgQWxzbywgb25seSBjZXJ0YWluIHJlZ2lzdGVyIHBhaXJzIGNhbiBiZSB1c2VkIGZvcgorCSAgICAgcGFzc2luZyBsb25nIGxvbmcgaW50IC0tIHNwZWNpZmljYWxseSAocjMscjQpLCAocjUscjYpLAorCSAgICAgKHI3LHI4KSwgKHI5LHIxMCkuICAqLworCSAgaWYgKGludGFyZ19jb3VudCA9PSBOVU1fR1BSX0FSR19SRUdJU1RFUlMtMQorCSAgICAgIHx8IGludGFyZ19jb3VudCAlIDIgIT0gMCkKKwkgICAgaW50YXJnX2NvdW50Kys7CisJICBpbnRhcmdfY291bnQgKz0gMjsKKwkgIGJyZWFrOworCisJY2FzZSBGRklfVFlQRV9TVFJVQ1Q6CisJICAvKiBXZSBtdXN0IGFsbG9jYXRlIHNwYWNlIGZvciBhIGNvcHkgb2YgdGhlc2UgdG8gZW5mb3JjZQorCSAgICAgcGFzcy1ieS12YWx1ZS4gIFBhZCB0aGUgc3BhY2UgdXAgdG8gYSBtdWx0aXBsZSBvZiAxNgorCSAgICAgYnl0ZXMgKHRoZSBtYXhpbXVtIGFsaWdubWVudCByZXF1aXJlZCBmb3IgYW55dGhpbmcgdW5kZXIKKwkgICAgIHRoZSBTWVNWIEFCSSkuICAqLworCSAgc3RydWN0X2NvcHlfc2l6ZSArPSAoKCpwdHIpLT5zaXplICsgMTUpICYgfjB4RjsKKwkgIC8qIEZhbGwgdGhyb3VnaCAoYWxsb2NhdGUgc3BhY2UgZm9yIHRoZSBwb2ludGVyKS4gICovCisKKwljYXNlIEZGSV9UWVBFX1BPSU5URVI6CisJY2FzZSBGRklfVFlQRV9JTlQ6CisJY2FzZSBGRklfVFlQRV9VSU5UMzI6CisJY2FzZSBGRklfVFlQRV9TSU5UMzI6CisJY2FzZSBGRklfVFlQRV9VSU5UMTY6CisJY2FzZSBGRklfVFlQRV9TSU5UMTY6CisJY2FzZSBGRklfVFlQRV9VSU5UODoKKwljYXNlIEZGSV9UWVBFX1NJTlQ4OgorCSAgLyogRXZlcnl0aGluZyBlbHNlIGlzIHBhc3NlZCBhcyBhIDQtYnl0ZSB3b3JkIGluIGEgR1BSLCBlaXRoZXIKKwkgICAgIHRoZSBvYmplY3QgaXRzZWxmIG9yIGEgcG9pbnRlciB0byBpdC4gICovCisJICBpbnRhcmdfY291bnQrKzsKKwkgIGJyZWFrOworCisJZGVmYXVsdDoKKwkgIEZGSV9BU1NFUlQgKDApOworCX0KKyAgICB9CisKKyAgaWYgKGZwYXJnX2NvdW50ICE9IDApCisgICAgZmxhZ3MgfD0gRkxBR19GUF9BUkdVTUVOVFM7CisgIGlmIChpbnRhcmdfY291bnQgPiA0KQorICAgIGZsYWdzIHw9IEZMQUdfNF9HUFJfQVJHVU1FTlRTOworICBpZiAoc3RydWN0X2NvcHlfc2l6ZSAhPSAwKQorICAgIGZsYWdzIHw9IEZMQUdfQVJHX05FRURTX0NPUFk7CisKKyAgLyogU3BhY2UgZm9yIHRoZSBGUFIgcmVnaXN0ZXJzLCBpZiBuZWVkZWQuICAqLworICBpZiAoZnBhcmdfY291bnQgIT0gMCkKKyAgICBieXRlcyArPSBOVU1fRlBSX0FSR19SRUdJU1RFUlMgKiBzaXplb2YgKGRvdWJsZSk7CisKKyAgLyogU3RhY2sgc3BhY2UuICAqLworICBpZiAoaW50YXJnX2NvdW50ID4gTlVNX0dQUl9BUkdfUkVHSVNURVJTKQorICAgIGJ5dGVzICs9IChpbnRhcmdfY291bnQgLSBOVU1fR1BSX0FSR19SRUdJU1RFUlMpICogc2l6ZW9mIChpbnQpOworICBpZiAoZnBhcmdfY291bnQgPiBOVU1fRlBSX0FSR19SRUdJU1RFUlMpCisgICAgYnl0ZXMgKz0gKGZwYXJnX2NvdW50IC0gTlVNX0ZQUl9BUkdfUkVHSVNURVJTKSAqIHNpemVvZiAoZG91YmxlKTsKKworICAvKiBUaGUgc3RhY2sgc3BhY2UgYWxsb2NhdGVkIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMTYgYnl0ZXMuICAqLworICBieXRlcyA9IChieXRlcyArIDE1KSAmIH4weEY7CisKKyAgLyogQWRkIGluIHRoZSBzcGFjZSBmb3IgdGhlIGNvcGllZCBzdHJ1Y3R1cmVzLiAgKi8KKyAgYnl0ZXMgKz0gc3RydWN0X2NvcHlfc2l6ZTsKKworICBjaWYtPmZsYWdzID0gZmxhZ3M7CisgIGNpZi0+Ynl0ZXMgPSBieXRlczsKKworICByZXR1cm4gRkZJX09LOworfQorCitmZmlfc3RhdHVzIEZGSV9ISURERU4KK2ZmaV9wcmVwX2NpZl9zeXN2IChmZmlfY2lmICpjaWYpCit7CisgIGlmICgoY2lmLT5hYmkgJiBGRklfU1lTVikgPT0gMCkKKyAgICB7CisgICAgICAvKiBUaGlzIGNhbGwgaXMgZnJvbSBvbGQgY29kZS4gIFRyYW5zbGF0ZSB0byBuZXcgQUJJIHZhbHVlcy4gICovCisgICAgICBjaWYtPmZsYWdzIHw9IEZMQUdfQ09NUEFUOworICAgICAgc3dpdGNoIChjaWYtPmFiaSkKKwl7CisJZGVmYXVsdDoKKwkgIHJldHVybiBGRklfQkFEX0FCSTsKKworCWNhc2UgRkZJX0NPTVBBVF9TWVNWOgorCSAgY2lmLT5hYmkgPSBGRklfU1lTViB8IEZGSV9TWVNWX1NUUlVDVF9SRVQgfCBGRklfU1lTVl9MT05HX0RPVUJMRV8xMjg7CisJICBicmVhazsKKworCWNhc2UgRkZJX0NPTVBBVF9HQ0NfU1lTVjoKKwkgIGNpZi0+YWJpID0gRkZJX1NZU1YgfCBGRklfU1lTVl9MT05HX0RPVUJMRV8xMjg7CisJICBicmVhazsKKworCWNhc2UgRkZJX0NPTVBBVF9MSU5VWDoKKwkgIGNpZi0+YWJpID0gKEZGSV9TWVNWIHwgRkZJX1NZU1ZfSUJNX0xPTkdfRE9VQkxFCisJCSAgICAgIHwgRkZJX1NZU1ZfTE9OR19ET1VCTEVfMTI4KTsKKwkgIGJyZWFrOworCisJY2FzZSBGRklfQ09NUEFUX0xJTlVYX1NPRlRfRkxPQVQ6CisJICBjaWYtPmFiaSA9IChGRklfU1lTViB8IEZGSV9TWVNWX1NPRlRfRkxPQVQgfCBGRklfU1lTVl9JQk1fTE9OR19ET1VCTEUKKwkJICAgICAgfCBGRklfU1lTVl9MT05HX0RPVUJMRV8xMjgpOworCSAgYnJlYWs7CisJfQorICAgIH0KKyAgcmV0dXJuIGZmaV9wcmVwX2NpZl9zeXN2X2NvcmUgKGNpZik7Cit9CisKKy8qIGZmaV9wcmVwX2FyZ3NfU1lTViBpcyBjYWxsZWQgYnkgdGhlIGFzc2VtYmx5IHJvdXRpbmUgb25jZSBzdGFjayBzcGFjZQorICAgaGFzIGJlZW4gYWxsb2NhdGVkIGZvciB0aGUgZnVuY3Rpb24ncyBhcmd1bWVudHMuCisKKyAgIFRoZSBzdGFjayBsYXlvdXQgd2Ugd2FudCBsb29rcyBsaWtlIHRoaXM6CisKKyAgIHwgICBSZXR1cm4gYWRkcmVzcyBmcm9tIGZmaV9jYWxsX1NZU1YgNGJ5dGVzCXwJaGlnaGVyIGFkZHJlc3NlcworICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAorICAgfCAgIFByZXZpb3VzIGJhY2tjaGFpbiBwb2ludGVyCTQJfCAgICAgICBzdGFjayBwb2ludGVyIGhlcmUKKyAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXw8KyA8PDwJb24gZW50cnkgdG8KKyAgIHwgICBTYXZlZCByMjgtcjMxCQkJNCo0CXwgfAlmZmlfY2FsbF9TWVNWCisgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IHwKKyAgIHwgICBHUFIgcmVnaXN0ZXJzIHIzLXIxMAkJOCo0CXwgfAlmZmlfY2FsbF9TWVNWCisgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IHwKKyAgIHwgICBGUFIgcmVnaXN0ZXJzIGYxLWY4IChvcHRpb25hbCkJOCo4CXwgfAorICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCB8CXN0YWNrCXwKKyAgIHwgICBTcGFjZSBmb3IgY29waWVkIHN0cnVjdHVyZXMJCXwgfAlncm93cwl8CisgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IHwJZG93biAgICBWCisgICB8ICAgUGFyYW1ldGVycyB0aGF0IGRpZG4ndCBmaXQgaW4gcmVnaXN0ZXJzICB8IHwKKyAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgfAlsb3dlciBhZGRyZXNzZXMKKyAgIHwgICBTcGFjZSBmb3IgY2FsbGVlJ3MgTFIJCTQJfCB8CisgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IHwJc3RhY2sgcG9pbnRlciBoZXJlCisgICB8ICAgQ3VycmVudCBiYWNrY2hhaW4gcG9pbnRlcgk0CXwtLwlkdXJpbmcKKyAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgICA8PDwJZmZpX2NhbGxfU1lTVgorCisqLworCit2b2lkIEZGSV9ISURERU4KK2ZmaV9wcmVwX2FyZ3NfU1lTViAoZXh0ZW5kZWRfY2lmICplY2lmLCB1bnNpZ25lZCAqY29uc3Qgc3RhY2spCit7CisgIGNvbnN0IHVuc2lnbmVkIGJ5dGVzID0gZWNpZi0+Y2lmLT5ieXRlczsKKyAgY29uc3QgdW5zaWduZWQgZmxhZ3MgPSBlY2lmLT5jaWYtPmZsYWdzOworCisgIHR5cGVkZWYgdW5pb24KKyAgeworICAgIGNoYXIgKmM7CisgICAgdW5zaWduZWQgKnU7CisgICAgbG9uZyBsb25nICpsbDsKKyAgICBmbG9hdCAqZjsKKyAgICBkb3VibGUgKmQ7CisgIH0gdmFscDsKKworICAvKiAnc3RhY2t0b3AnIHBvaW50cyBhdCB0aGUgcHJldmlvdXMgYmFja2NoYWluIHBvaW50ZXIuICAqLworICB2YWxwIHN0YWNrdG9wOworCisgIC8qICdncHJfYmFzZScgcG9pbnRzIGF0IHRoZSBzcGFjZSBmb3IgZ3ByMywgYW5kIGdyb3dzIHVwd2FyZHMgYXMKKyAgICAgd2UgdXNlIEdQUiByZWdpc3RlcnMuICAqLworICB2YWxwIGdwcl9iYXNlOworICBpbnQgaW50YXJnX2NvdW50OworCisjaWZuZGVmIF9fTk9fRlBSU19fCisgIC8qICdmcHJfYmFzZScgcG9pbnRzIGF0IHRoZSBzcGFjZSBmb3IgZnByMSwgYW5kIGdyb3dzIHVwd2FyZHMgYXMKKyAgICAgd2UgdXNlIEZQUiByZWdpc3RlcnMuICAqLworICB2YWxwIGZwcl9iYXNlOworICBpbnQgZnBhcmdfY291bnQ7CisjZW5kaWYKKworICAvKiAnY29weV9zcGFjZScgZ3Jvd3MgZG93biBhcyB3ZSBwdXQgc3RydWN0dXJlcyBpbiBpdC4gIEl0IHNob3VsZAorICAgICBzdGF5IDE2LWJ5dGUgYWxpZ25lZC4gICovCisgIHZhbHAgY29weV9zcGFjZTsKKworICAvKiAnbmV4dF9hcmcnIGdyb3dzIHVwIGFzIHdlIHB1dCBwYXJhbWV0ZXJzIGluIGl0LiAgKi8KKyAgdmFscCBuZXh0X2FyZzsKKworICBpbnQgaTsKKyAgZmZpX3R5cGUgKipwdHI7CisjaWZuZGVmIF9fTk9fRlBSU19fCisgIGRvdWJsZSBkb3VibGVfdG1wOworI2VuZGlmCisgIHVuaW9uCisgIHsKKyAgICB2b2lkICoqdjsKKyAgICBjaGFyICoqYzsKKyAgICBzaWduZWQgY2hhciAqKnNjOworICAgIHVuc2lnbmVkIGNoYXIgKip1YzsKKyAgICBzaWduZWQgc2hvcnQgKipzczsKKyAgICB1bnNpZ25lZCBzaG9ydCAqKnVzOworICAgIHVuc2lnbmVkIGludCAqKnVpOworICAgIGxvbmcgbG9uZyAqKmxsOworICAgIGZsb2F0ICoqZjsKKyAgICBkb3VibGUgKipkOworICB9IHBfYXJndjsKKyAgc2l6ZV90IHN0cnVjdF9jb3B5X3NpemU7CisgIHVuc2lnbmVkIGdwcnZhbHVlOworCisgIHN0YWNrdG9wLmMgPSAoY2hhciAqKSBzdGFjayArIGJ5dGVzOworICBncHJfYmFzZS51ID0gc3RhY2t0b3AudSAtIEFTTV9ORUVEU19SRUdJU1RFUlMgLSBOVU1fR1BSX0FSR19SRUdJU1RFUlM7CisgIGludGFyZ19jb3VudCA9IDA7CisjaWZuZGVmIF9fTk9fRlBSU19fCisgIGZwcl9iYXNlLmQgPSBncHJfYmFzZS5kIC0gTlVNX0ZQUl9BUkdfUkVHSVNURVJTOworICBmcGFyZ19jb3VudCA9IDA7CisgIGNvcHlfc3BhY2UuYyA9ICgoZmxhZ3MgJiBGTEFHX0ZQX0FSR1VNRU5UUykgPyBmcHJfYmFzZS5jIDogZ3ByX2Jhc2UuYyk7CisjZWxzZQorICBjb3B5X3NwYWNlLmMgPSBncHJfYmFzZS5jOworI2VuZGlmCisgIG5leHRfYXJnLnUgPSBzdGFjayArIDI7CisKKyAgLyogQ2hlY2sgdGhhdCBldmVyeXRoaW5nIHN0YXJ0cyBhbGlnbmVkIHByb3Blcmx5LiAgKi8KKyAgRkZJX0FTU0VSVCAoKCh1bnNpZ25lZCBsb25nKSAoY2hhciAqKSBzdGFjayAmIDB4RikgPT0gMCk7CisgIEZGSV9BU1NFUlQgKCgodW5zaWduZWQgbG9uZykgY29weV9zcGFjZS5jICYgMHhGKSA9PSAwKTsKKyAgRkZJX0FTU0VSVCAoKCh1bnNpZ25lZCBsb25nKSBzdGFja3RvcC5jICYgMHhGKSA9PSAwKTsKKyAgRkZJX0FTU0VSVCAoKGJ5dGVzICYgMHhGKSA9PSAwKTsKKyAgRkZJX0FTU0VSVCAoY29weV9zcGFjZS5jID49IG5leHRfYXJnLmMpOworCisgIC8qIERlYWwgd2l0aCByZXR1cm4gdmFsdWVzIHRoYXQgYXJlIGFjdHVhbGx5IHBhc3MtYnktcmVmZXJlbmNlLiAgKi8KKyAgaWYgKGZsYWdzICYgRkxBR19SRVRWQUxfUkVGRVJFTkNFKQorICAgIHsKKyAgICAgICpncHJfYmFzZS51KysgPSAodW5zaWduZWQgbG9uZykgKGNoYXIgKikgZWNpZi0+cnZhbHVlOworICAgICAgaW50YXJnX2NvdW50Kys7CisgICAgfQorCisgIC8qIE5vdyBmb3IgdGhlIGFyZ3VtZW50cy4gICovCisgIHBfYXJndi52ID0gZWNpZi0+YXZhbHVlOworICBmb3IgKHB0ciA9IGVjaWYtPmNpZi0+YXJnX3R5cGVzLCBpID0gZWNpZi0+Y2lmLT5uYXJnczsKKyAgICAgICBpID4gMDsKKyAgICAgICBpLS0sIHB0cisrLCBwX2FyZ3YudisrKQorICAgIHsKKyAgICAgIHVuc2lnbmVkIGludCB0eXBlbnVtID0gKCpwdHIpLT50eXBlOworCisgICAgICB0eXBlbnVtID0gdHJhbnNsYXRlX2Zsb2F0IChlY2lmLT5jaWYtPmFiaSwgdHlwZW51bSk7CisKKyAgICAgIC8qIE5vdyB0ZXN0IHRoZSB0cmFuc2xhdGVkIHZhbHVlICovCisgICAgICBzd2l0Y2ggKHR5cGVudW0pCisJeworI2lmbmRlZiBfX05PX0ZQUlNfXworIyBpZiBGRklfVFlQRV9MT05HRE9VQkxFICE9IEZGSV9UWVBFX0RPVUJMRQorCWNhc2UgRkZJX1RZUEVfTE9OR0RPVUJMRToKKwkgIGRvdWJsZV90bXAgPSAoKnBfYXJndi5kKVswXTsKKworCSAgaWYgKGZwYXJnX2NvdW50ID49IE5VTV9GUFJfQVJHX1JFR0lTVEVSUyAtIDEpCisJICAgIHsKKwkgICAgICBpZiAoaW50YXJnX2NvdW50ID49IE5VTV9HUFJfQVJHX1JFR0lTVEVSUworCQkgICYmIGludGFyZ19jb3VudCAlIDIgIT0gMCkKKwkJeworCQkgIGludGFyZ19jb3VudCsrOworCQkgIG5leHRfYXJnLnUrKzsKKwkJfQorCSAgICAgICpuZXh0X2FyZy5kID0gZG91YmxlX3RtcDsKKwkgICAgICBuZXh0X2FyZy51ICs9IDI7CisJICAgICAgZG91YmxlX3RtcCA9ICgqcF9hcmd2LmQpWzFdOworCSAgICAgICpuZXh0X2FyZy5kID0gZG91YmxlX3RtcDsKKwkgICAgICBuZXh0X2FyZy51ICs9IDI7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgICpmcHJfYmFzZS5kKysgPSBkb3VibGVfdG1wOworCSAgICAgIGRvdWJsZV90bXAgPSAoKnBfYXJndi5kKVsxXTsKKwkgICAgICAqZnByX2Jhc2UuZCsrID0gZG91YmxlX3RtcDsKKwkgICAgfQorCisJICBmcGFyZ19jb3VudCArPSAyOworCSAgRkZJX0FTU0VSVCAoZmxhZ3MgJiBGTEFHX0ZQX0FSR1VNRU5UUyk7CisJICBicmVhazsKKyMgZW5kaWYKKwljYXNlIEZGSV9UWVBFX0RPVUJMRToKKwkgIGRvdWJsZV90bXAgPSAqKnBfYXJndi5kOworCisJICBpZiAoZnBhcmdfY291bnQgPj0gTlVNX0ZQUl9BUkdfUkVHSVNURVJTKQorCSAgICB7CisJICAgICAgaWYgKGludGFyZ19jb3VudCA+PSBOVU1fR1BSX0FSR19SRUdJU1RFUlMKKwkJICAmJiBpbnRhcmdfY291bnQgJSAyICE9IDApCisJCXsKKwkJICBpbnRhcmdfY291bnQrKzsKKwkJICBuZXh0X2FyZy51Kys7CisJCX0KKwkgICAgICAqbmV4dF9hcmcuZCA9IGRvdWJsZV90bXA7CisJICAgICAgbmV4dF9hcmcudSArPSAyOworCSAgICB9CisJICBlbHNlCisJICAgICpmcHJfYmFzZS5kKysgPSBkb3VibGVfdG1wOworCSAgZnBhcmdfY291bnQrKzsKKwkgIEZGSV9BU1NFUlQgKGZsYWdzICYgRkxBR19GUF9BUkdVTUVOVFMpOworCSAgYnJlYWs7CisKKwljYXNlIEZGSV9UWVBFX0ZMT0FUOgorCSAgZG91YmxlX3RtcCA9ICoqcF9hcmd2LmY7CisJICBpZiAoZnBhcmdfY291bnQgPj0gTlVNX0ZQUl9BUkdfUkVHSVNURVJTKQorCSAgICB7CisJICAgICAgKm5leHRfYXJnLmYgPSAoZmxvYXQpIGRvdWJsZV90bXA7CisJICAgICAgbmV4dF9hcmcudSArPSAxOworCSAgICAgIGludGFyZ19jb3VudCsrOworCSAgICB9CisJICBlbHNlCisJICAgICpmcHJfYmFzZS5kKysgPSBkb3VibGVfdG1wOworCSAgZnBhcmdfY291bnQrKzsKKwkgIEZGSV9BU1NFUlQgKGZsYWdzICYgRkxBR19GUF9BUkdVTUVOVFMpOworCSAgYnJlYWs7CisjZW5kaWYgLyogaGF2ZSBGUFJzICovCisKKwljYXNlIEZGSV9UWVBFX1VJTlQxMjg6CisJICAvKiBUaGUgc29mdCBmbG9hdCBBQkkgZm9yIGxvbmcgZG91YmxlcyB3b3JrcyBsaWtlIHRoaXMsIGEgbG9uZyBkb3VibGUKKwkgICAgIGlzIHBhc3NlZCBpbiBmb3VyIGNvbnNlY3V0aXZlIEdQUnMgaWYgYXZhaWxhYmxlLiAgQSBtYXhpbXVtIG9mIDIKKwkgICAgIGxvbmcgZG91YmxlcyBjYW4gYmUgcGFzc2VkIGluIGdwcnMuICBJZiB3ZSBkbyBub3QgaGF2ZSA0IEdQUnMKKwkgICAgIGxlZnQsIHRoZSBsb25nIGRvdWJsZSBpcyBwYXNzZWQgb24gdGhlIHN0YWNrLCA0LWJ5dGUgYWxpZ25lZC4gICovCisJICB7CisJICAgIHVuc2lnbmVkIGludCBpbnRfdG1wOworCSAgICB1bnNpZ25lZCBpbnQgaWk7CisJICAgIGlmIChpbnRhcmdfY291bnQgPj0gTlVNX0dQUl9BUkdfUkVHSVNURVJTIC0gMykKKwkgICAgICB7CisJCWlmIChpbnRhcmdfY291bnQgPCBOVU1fR1BSX0FSR19SRUdJU1RFUlMpCisJCSAgaW50YXJnX2NvdW50ID0gTlVNX0dQUl9BUkdfUkVHSVNURVJTOworCQlmb3IgKGlpID0gMDsgaWkgPCA0OyBpaSsrKQorCQkgIHsKKwkJICAgIGludF90bXAgPSAoKnBfYXJndi51aSlbaWldOworCQkgICAgKm5leHRfYXJnLnUrKyA9IGludF90bXA7CisJCSAgfQorCSAgICAgIH0KKwkgICAgZWxzZQorCSAgICAgIHsKKwkJZm9yIChpaSA9IDA7IGlpIDwgNDsgaWkrKykKKwkJICB7CisJCSAgICBpbnRfdG1wID0gKCpwX2FyZ3YudWkpW2lpXTsKKwkJICAgICpncHJfYmFzZS51KysgPSBpbnRfdG1wOworCQkgIH0KKwkgICAgICB9CisJICAgIGludGFyZ19jb3VudCArPSA0OworCSAgICBicmVhazsKKwkgIH0KKworCWNhc2UgRkZJX1RZUEVfVUlOVDY0OgorCWNhc2UgRkZJX1RZUEVfU0lOVDY0OgorCSAgaWYgKGludGFyZ19jb3VudCA9PSBOVU1fR1BSX0FSR19SRUdJU1RFUlMtMSkKKwkgICAgaW50YXJnX2NvdW50Kys7CisJICBpZiAoaW50YXJnX2NvdW50ID49IE5VTV9HUFJfQVJHX1JFR0lTVEVSUykKKwkgICAgeworCSAgICAgIGlmIChpbnRhcmdfY291bnQgJSAyICE9IDApCisJCXsKKwkJICBpbnRhcmdfY291bnQrKzsKKwkJICBuZXh0X2FyZy51Kys7CisJCX0KKwkgICAgICAqbmV4dF9hcmcubGwgPSAqKnBfYXJndi5sbDsKKwkgICAgICBuZXh0X2FyZy51ICs9IDI7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgIC8qIFRoZSBhYmkgc3RhdGVzIG9ubHkgY2VydGFpbiByZWdpc3RlciBwYWlycyBjYW4gYmUKKwkJIHVzZWQgZm9yIHBhc3NpbmcgbG9uZyBsb25nIGludCBzcGVjaWZpY2FsbHkgKHIzLHI0KSwKKwkJIChyNSxyNiksIChyNyxyOCksIChyOSxyMTApLiAgSWYgbmV4dCBhcmcgaXMgbG9uZyBsb25nCisJCSBidXQgbm90IGNvcnJlY3Qgc3RhcnRpbmcgcmVnaXN0ZXIgb2YgcGFpciB0aGVuIHNraXAKKwkJIHVudGlsIHRoZSBwcm9wZXIgc3RhcnRpbmcgcmVnaXN0ZXIuICAqLworCSAgICAgIGlmIChpbnRhcmdfY291bnQgJSAyICE9IDApCisJCXsKKwkJICBpbnRhcmdfY291bnQgKys7CisJCSAgZ3ByX2Jhc2UudSsrOworCQl9CisJICAgICAgKmdwcl9iYXNlLmxsKysgPSAqKnBfYXJndi5sbDsKKwkgICAgfQorCSAgaW50YXJnX2NvdW50ICs9IDI7CisJICBicmVhazsKKworCWNhc2UgRkZJX1RZUEVfU1RSVUNUOgorCSAgc3RydWN0X2NvcHlfc2l6ZSA9ICgoKnB0ciktPnNpemUgKyAxNSkgJiB+MHhGOworCSAgY29weV9zcGFjZS5jIC09IHN0cnVjdF9jb3B5X3NpemU7CisJICBtZW1jcHkgKGNvcHlfc3BhY2UuYywgKnBfYXJndi5jLCAoKnB0ciktPnNpemUpOworCisJICBncHJ2YWx1ZSA9ICh1bnNpZ25lZCBsb25nKSBjb3B5X3NwYWNlLmM7CisKKwkgIEZGSV9BU1NFUlQgKGNvcHlfc3BhY2UuYyA+IG5leHRfYXJnLmMpOworCSAgRkZJX0FTU0VSVCAoZmxhZ3MgJiBGTEFHX0FSR19ORUVEU19DT1BZKTsKKwkgIGdvdG8gcHV0Z3ByOworCisJY2FzZSBGRklfVFlQRV9VSU5UODoKKwkgIGdwcnZhbHVlID0gKipwX2FyZ3YudWM7CisJICBnb3RvIHB1dGdwcjsKKwljYXNlIEZGSV9UWVBFX1NJTlQ4OgorCSAgZ3BydmFsdWUgPSAqKnBfYXJndi5zYzsKKwkgIGdvdG8gcHV0Z3ByOworCWNhc2UgRkZJX1RZUEVfVUlOVDE2OgorCSAgZ3BydmFsdWUgPSAqKnBfYXJndi51czsKKwkgIGdvdG8gcHV0Z3ByOworCWNhc2UgRkZJX1RZUEVfU0lOVDE2OgorCSAgZ3BydmFsdWUgPSAqKnBfYXJndi5zczsKKwkgIGdvdG8gcHV0Z3ByOworCisJY2FzZSBGRklfVFlQRV9JTlQ6CisJY2FzZSBGRklfVFlQRV9VSU5UMzI6CisJY2FzZSBGRklfVFlQRV9TSU5UMzI6CisJY2FzZSBGRklfVFlQRV9QT0lOVEVSOgorCisJICBncHJ2YWx1ZSA9ICoqcF9hcmd2LnVpOworCisJcHV0Z3ByOgorCSAgaWYgKGludGFyZ19jb3VudCA+PSBOVU1fR1BSX0FSR19SRUdJU1RFUlMpCisJICAgICpuZXh0X2FyZy51KysgPSBncHJ2YWx1ZTsKKwkgIGVsc2UKKwkgICAgKmdwcl9iYXNlLnUrKyA9IGdwcnZhbHVlOworCSAgaW50YXJnX2NvdW50Kys7CisJICBicmVhazsKKwl9CisgICAgfQorCisgIC8qIENoZWNrIHRoYXQgd2UgZGlkbid0IG92ZXJydW4gdGhlIHN0YWNrLi4uICAqLworICBGRklfQVNTRVJUIChjb3B5X3NwYWNlLmMgPj0gbmV4dF9hcmcuYyk7CisgIEZGSV9BU1NFUlQgKGdwcl9iYXNlLnUgPD0gc3RhY2t0b3AudSAtIEFTTV9ORUVEU19SRUdJU1RFUlMpOworICAvKiBUaGUgYXNzZXJ0IGJlbG93IGlzIHRlc3RpbmcgdGhhdCB0aGUgbnVtYmVyIG9mIGludGVnZXIgYXJndW1lbnRzIGFncmVlcworICAgICB3aXRoIHRoZSBudW1iZXIgZm91bmQgaW4gZmZpX3ByZXBfY2lmX21hY2hkZXAoKS4gIEhvd2V2ZXIsIGludGFyZ19jb3VudAorICAgICBpcyBpbmNyZW1lbnRlZCB3aGVuZXZlciB3ZSBwbGFjZSBhbiBGUCBhcmcgb24gdGhlIHN0YWNrLCBzbyBhY2NvdW50IGZvcgorICAgICB0aGF0IGJlZm9yZSBvdXIgYXNzZXJ0IHRlc3QuICAqLworI2lmbmRlZiBfX05PX0ZQUlNfXworICBpZiAoZnBhcmdfY291bnQgPiBOVU1fRlBSX0FSR19SRUdJU1RFUlMpCisgICAgaW50YXJnX2NvdW50IC09IGZwYXJnX2NvdW50IC0gTlVNX0ZQUl9BUkdfUkVHSVNURVJTOworICBGRklfQVNTRVJUIChmcHJfYmFzZS51CisJICAgICAgPD0gc3RhY2t0b3AudSAtIEFTTV9ORUVEU19SRUdJU1RFUlMgLSBOVU1fR1BSX0FSR19SRUdJU1RFUlMpOworI2VuZGlmCisgIEZGSV9BU1NFUlQgKGZsYWdzICYgRkxBR180X0dQUl9BUkdVTUVOVFMgfHwgaW50YXJnX2NvdW50IDw9IDQpOworfQorCisjZGVmaW5lIE1JTl9DQUNIRV9MSU5FX1NJWkUgOAorCitzdGF0aWMgdm9pZAorZmx1c2hfaWNhY2hlIChjaGFyICp3cmFkZHIsIGNoYXIgKnhhZGRyLCBpbnQgc2l6ZSkKK3sKKyAgaW50IGk7CisgIGZvciAoaSA9IDA7IGkgPCBzaXplOyBpICs9IE1JTl9DQUNIRV9MSU5FX1NJWkUpCisgICAgX19hc21fXyB2b2xhdGlsZSAoImljYmkgMCwlMDsiICJkY2JmIDAsJTE7IgorCQkgICAgICA6IDogInIiICh4YWRkciArIGkpLCAiciIgKHdyYWRkciArIGkpIDogIm1lbW9yeSIpOworICBfX2FzbV9fIHZvbGF0aWxlICgiaWNiaSAwLCUwOyIgImRjYmYgMCwlMTsiICJzeW5jOyIgImlzeW5jOyIKKwkJICAgIDogOiAiciIoeGFkZHIgKyBzaXplIC0gMSksICJyIih3cmFkZHIgKyBzaXplIC0gMSkKKwkJICAgIDogIm1lbW9yeSIpOworfQorCitmZmlfc3RhdHVzIEZGSV9ISURERU4KK2ZmaV9wcmVwX2Nsb3N1cmVfbG9jX3N5c3YgKGZmaV9jbG9zdXJlICpjbG9zdXJlLAorCQkJICAgZmZpX2NpZiAqY2lmLAorCQkJICAgdm9pZCAoKmZ1bikgKGZmaV9jaWYgKiwgdm9pZCAqLCB2b2lkICoqLCB2b2lkICopLAorCQkJICAgdm9pZCAqdXNlcl9kYXRhLAorCQkJICAgdm9pZCAqY29kZWxvYykKK3sKKyAgdW5zaWduZWQgaW50ICp0cmFtcDsKKworICBpZiAoY2lmLT5hYmkgPCBGRklfU1lTViB8fCBjaWYtPmFiaSA+PSBGRklfTEFTVF9BQkkpCisgICAgcmV0dXJuIEZGSV9CQURfQUJJOworCisgIHRyYW1wID0gKHVuc2lnbmVkIGludCAqKSAmY2xvc3VyZS0+dHJhbXBbMF07CisgIHRyYW1wWzBdID0gMHg3YzA4MDJhNjsgIC8qICAgbWZsciAgICByMCAqLworICB0cmFtcFsxXSA9IDB4NDgwMDAwMGQ7ICAvKiAgIGJsICAgICAgMTAgPHRyYW1wb2xpbmVfaW5pdGlhbCsweDEwPiAqLworICB0cmFtcFs0XSA9IDB4N2Q2ODAyYTY7ICAvKiAgIG1mbHIgICAgcjExICovCisgIHRyYW1wWzVdID0gMHg3YzA4MDNhNjsgIC8qICAgbXRsciAgICByMCAqLworICB0cmFtcFs2XSA9IDB4ODAwYjAwMDA7ICAvKiAgIGx3eiAgICAgcjAsMChyMTEpICovCisgIHRyYW1wWzddID0gMHg4MTZiMDAwNDsgIC8qICAgbHd6ICAgICByMTEsNChyMTEpICovCisgIHRyYW1wWzhdID0gMHg3YzA5MDNhNjsgIC8qICAgbXRjdHIgICByMCAqLworICB0cmFtcFs5XSA9IDB4NGU4MDA0MjA7ICAvKiAgIGJjdHIgKi8KKyAgKih2b2lkICoqKSAmdHJhbXBbMl0gPSAodm9pZCAqKSBmZmlfY2xvc3VyZV9TWVNWOyAvKiBmdW5jdGlvbiAqLworICAqKHZvaWQgKiopICZ0cmFtcFszXSA9IGNvZGVsb2M7ICAgICAgICAgICAgICAgICAgIC8qIGNvbnRleHQgKi8KKworICAvKiBGbHVzaCB0aGUgaWNhY2hlLiAgKi8KKyAgZmx1c2hfaWNhY2hlICgoY2hhciAqKXRyYW1wLCAoY2hhciAqKWNvZGVsb2MsIEZGSV9UUkFNUE9MSU5FX1NJWkUpOworCisgIGNsb3N1cmUtPmNpZiA9IGNpZjsKKyAgY2xvc3VyZS0+ZnVuID0gZnVuOworICBjbG9zdXJlLT51c2VyX2RhdGEgPSB1c2VyX2RhdGE7CisKKyAgcmV0dXJuIEZGSV9PSzsKK30KKworLyogQmFzaWNhbGx5IHRoZSB0cmFtcG9saW5lIGludm9rZXMgZmZpX2Nsb3N1cmVfU1lTViwgYW5kIG9uCisgICBlbnRyeSwgcjExIGhvbGRzIHRoZSBhZGRyZXNzIG9mIHRoZSBjbG9zdXJlLgorICAgQWZ0ZXIgc3RvcmluZyB0aGUgcmVnaXN0ZXJzIHRoYXQgY291bGQgcG9zc2libHkgY29udGFpbgorICAgcGFyYW1ldGVycyB0byBiZSBwYXNzZWQgaW50byB0aGUgc3RhY2sgZnJhbWUgYW5kIHNldHRpbmcKKyAgIHVwIHNwYWNlIGZvciBhIHJldHVybiB2YWx1ZSwgZmZpX2Nsb3N1cmVfU1lTViBpbnZva2VzIHRoZQorICAgZm9sbG93aW5nIGhlbHBlciBmdW5jdGlvbiB0byBkbyBtb3N0IG9mIHRoZSB3b3JrLiAgKi8KKworaW50CitmZmlfY2xvc3VyZV9oZWxwZXJfU1lTViAoZmZpX2Nsb3N1cmUgKmNsb3N1cmUsIHZvaWQgKnJ2YWx1ZSwKKwkJCSB1bnNpZ25lZCBsb25nICpwZ3IsIGZmaV9kYmxmbCAqcGZyLAorCQkJIHVuc2lnbmVkIGxvbmcgKnBzdCkKK3sKKyAgLyogcnZhbHVlIGlzIHRoZSBwb2ludGVyIHRvIHNwYWNlIGZvciByZXR1cm4gdmFsdWUgaW4gY2xvc3VyZSBhc3NlbWJseSAqLworICAvKiBwZ3IgaXMgdGhlIHBvaW50ZXIgdG8gd2hlcmUgcjMtcjEwIGFyZSBzdG9yZWQgaW4gZmZpX2Nsb3N1cmVfU1lTViAqLworICAvKiBwZnIgaXMgdGhlIHBvaW50ZXIgdG8gd2hlcmUgZjEtZjggYXJlIHN0b3JlZCBpbiBmZmlfY2xvc3VyZV9TWVNWICAqLworICAvKiBwc3QgaXMgdGhlIHBvaW50ZXIgdG8gb3V0Z29pbmcgcGFyYW1ldGVyIHN0YWNrIGluIG9yaWdpbmFsIGNhbGxlciAqLworCisgIHZvaWQgKiogICAgICAgICAgYXZhbHVlOworICBmZmlfdHlwZSAqKiAgICAgIGFyZ190eXBlczsKKyAgbG9uZyAgICAgICAgICAgICBpLCBhdm47CisjaWZuZGVmIF9fTk9fRlBSU19fCisgIGxvbmcgICAgICAgICAgICAgbmYgPSAwOyAgIC8qIG51bWJlciBvZiBmbG9hdGluZyByZWdpc3RlcnMgYWxyZWFkeSB1c2VkICovCisjZW5kaWYKKyAgbG9uZyAgICAgICAgICAgICBuZyA9IDA7ICAgLyogbnVtYmVyIG9mIGdlbmVyYWwgcmVnaXN0ZXJzIGFscmVhZHkgdXNlZCAqLworCisgIGZmaV9jaWYgKmNpZiA9IGNsb3N1cmUtPmNpZjsKKyAgdW5zaWduZWQgICAgICAgc2l6ZSAgICAgPSBjaWYtPnJ0eXBlLT5zaXplOworICB1bnNpZ25lZCBzaG9ydCBydHlwZW51bSA9IGNpZi0+cnR5cGUtPnR5cGU7CisKKyAgYXZhbHVlID0gYWxsb2NhIChjaWYtPm5hcmdzICogc2l6ZW9mICh2b2lkICopKTsKKworICAvKiBGaXJzdCB0cmFuc2xhdGUgZm9yIHNvZnRmbG9hdC9ub25saW51eCAqLworICBydHlwZW51bSA9IHRyYW5zbGF0ZV9mbG9hdCAoY2lmLT5hYmksIHJ0eXBlbnVtKTsKKworICAvKiBDb3B5IHRoZSBjYWxsZXIncyBzdHJ1Y3R1cmUgcmV0dXJuIHZhbHVlIGFkZHJlc3Mgc28gdGhhdCB0aGUgY2xvc3VyZQorICAgICByZXR1cm5zIHRoZSBkYXRhIGRpcmVjdGx5IHRvIHRoZSBjYWxsZXIuCisgICAgIEZvciBGRklfU1lTViB0aGUgcmVzdWx0IGlzIHBhc3NlZCBpbiByMy9yNCBpZiB0aGUgc3RydWN0IHNpemUgaXMgbGVzcworICAgICBvciBlcXVhbCA4IGJ5dGVzLiAgKi8KKyAgaWYgKHJ0eXBlbnVtID09IEZGSV9UWVBFX1NUUlVDVAorICAgICAgJiYgISgoY2lmLT5hYmkgJiBGRklfU1lTVl9TVFJVQ1RfUkVUKSAhPSAwICYmIHNpemUgPD0gOCkpCisgICAgeworICAgICAgcnZhbHVlID0gKHZvaWQgKikgKnBncjsKKyAgICAgIG5nKys7CisgICAgICBwZ3IrKzsKKyAgICB9CisKKyAgaSA9IDA7CisgIGF2biA9IGNpZi0+bmFyZ3M7CisgIGFyZ190eXBlcyA9IGNpZi0+YXJnX3R5cGVzOworCisgIC8qIEdyYWIgdGhlIGFkZHJlc3NlcyBvZiB0aGUgYXJndW1lbnRzIGZyb20gdGhlIHN0YWNrIGZyYW1lLiAgKi8KKyAgd2hpbGUgKGkgPCBhdm4pIHsKKyAgICB1bnNpZ25lZCBzaG9ydCB0eXBlbnVtID0gYXJnX3R5cGVzW2ldLT50eXBlOworCisgICAgLyogV2UgbWF5IG5lZWQgdG8gaGFuZGxlIHNvbWUgdmFsdWVzIGRlcGVuZGluZyBvbiBBQkkuICAqLworICAgIHR5cGVudW0gPSB0cmFuc2xhdGVfZmxvYXQgKGNpZi0+YWJpLCB0eXBlbnVtKTsKKworICAgIHN3aXRjaCAodHlwZW51bSkKKyAgICAgIHsKKyNpZm5kZWYgX19OT19GUFJTX18KKyAgICAgIGNhc2UgRkZJX1RZUEVfRkxPQVQ6CisJLyogVW5mb3J0dW5hdGVseSBmbG9hdCB2YWx1ZXMgYXJlIHN0b3JlZCBhcyBkb3VibGVzCisJICAgaW4gdGhlIGZmaV9jbG9zdXJlX1NZU1YgY29kZSAoc2luY2Ugd2UgZG9uJ3QgY2hlY2sKKwkgICB0aGUgdHlwZSBpbiB0aGF0IHJvdXRpbmUpLiAgKi8KKwlpZiAobmYgPCBOVU1fRlBSX0FSR19SRUdJU1RFUlMpCisJICB7CisJICAgIC8qIEZJWE1FPyBoZXJlIHdlIGFyZSByZWFsbHkgY2hhbmdpbmcgdGhlIHZhbHVlcworCSAgICAgICBzdG9yZWQgaW4gdGhlIG9yaWdpbmFsIGNhbGxpbmcgcm91dGluZXMgb3V0Z29pbmcKKwkgICAgICAgcGFyYW1ldGVyIHN0YWNrLiAgVGhpcyBpcyBwcm9iYWJseSBhIHJlYWxseQorCSAgICAgICBuYXVnaHR5IHRoaW5nIHRvIGRvIGJ1dC4uLiAgKi8KKwkgICAgZG91YmxlIHRlbXAgPSBwZnItPmQ7CisJICAgIHBmci0+ZiA9IChmbG9hdCkgdGVtcDsKKwkgICAgYXZhbHVlW2ldID0gcGZyOworCSAgICBuZisrOworCSAgICBwZnIrKzsKKwkgIH0KKwllbHNlCisJICB7CisJICAgIGF2YWx1ZVtpXSA9IHBzdDsKKwkgICAgcHN0ICs9IDE7CisJICB9CisJYnJlYWs7CisKKyAgICAgIGNhc2UgRkZJX1RZUEVfRE9VQkxFOgorCWlmIChuZiA8IE5VTV9GUFJfQVJHX1JFR0lTVEVSUykKKwkgIHsKKwkgICAgYXZhbHVlW2ldID0gcGZyOworCSAgICBuZisrOworCSAgICBwZnIrKzsKKwkgIH0KKwllbHNlCisJICB7CisJICAgIGlmICgoKGxvbmcpIHBzdCkgJiA0KQorCSAgICAgIHBzdCsrOworCSAgICBhdmFsdWVbaV0gPSBwc3Q7CisJICAgIHBzdCArPSAyOworCSAgfQorCWJyZWFrOworCisjIGlmIEZGSV9UWVBFX0xPTkdET1VCTEUgIT0gRkZJX1RZUEVfRE9VQkxFCisgICAgICBjYXNlIEZGSV9UWVBFX0xPTkdET1VCTEU6CisJaWYgKG5mIDwgTlVNX0ZQUl9BUkdfUkVHSVNURVJTIC0gMSkKKwkgIHsKKwkgICAgYXZhbHVlW2ldID0gcGZyOworCSAgICBwZnIgKz0gMjsKKwkgICAgbmYgKz0gMjsKKwkgIH0KKwllbHNlCisJICB7CisJICAgIGlmICgoKGxvbmcpIHBzdCkgJiA0KQorCSAgICAgIHBzdCsrOworCSAgICBhdmFsdWVbaV0gPSBwc3Q7CisJICAgIHBzdCArPSA0OworCSAgICBuZiA9IDg7CisJICB9CisJYnJlYWs7CisjIGVuZGlmCisjZW5kaWYKKworICAgICAgY2FzZSBGRklfVFlQRV9VSU5UMTI4OgorCS8qIFRlc3QgaWYgZm9yIHRoZSB3aG9sZSBsb25nIGRvdWJsZSwgNCBncHJzIGFyZSBhdmFpbGFibGUuCisJICAgb3RoZXJ3aXNlIHRoZSBzdHVmZiBlbmRzIHVwIG9uIHRoZSBzdGFjay4gICovCisJaWYgKG5nIDwgTlVNX0dQUl9BUkdfUkVHSVNURVJTIC0gMykKKwkgIHsKKwkgICAgYXZhbHVlW2ldID0gcGdyOworCSAgICBwZ3IgKz0gNDsKKwkgICAgbmcgKz0gNDsKKwkgIH0KKwllbHNlCisJICB7CisJICAgIGF2YWx1ZVtpXSA9IHBzdDsKKwkgICAgcHN0ICs9IDQ7CisJICAgIG5nID0gOCs0OworCSAgfQorCWJyZWFrOworCisgICAgICBjYXNlIEZGSV9UWVBFX1NJTlQ4OgorICAgICAgY2FzZSBGRklfVFlQRV9VSU5UODoKKyNpZm5kZWYgX19MSVRUTEVfRU5ESUFOX18KKwlpZiAobmcgPCBOVU1fR1BSX0FSR19SRUdJU1RFUlMpCisJICB7CisJICAgIGF2YWx1ZVtpXSA9IChjaGFyICopIHBnciArIDM7CisJICAgIG5nKys7CisJICAgIHBncisrOworCSAgfQorCWVsc2UKKwkgIHsKKwkgICAgYXZhbHVlW2ldID0gKGNoYXIgKikgcHN0ICsgMzsKKwkgICAgcHN0Kys7CisJICB9CisJYnJlYWs7CisjZW5kaWYKKworICAgICAgY2FzZSBGRklfVFlQRV9TSU5UMTY6CisgICAgICBjYXNlIEZGSV9UWVBFX1VJTlQxNjoKKyNpZm5kZWYgX19MSVRUTEVfRU5ESUFOX18KKwlpZiAobmcgPCBOVU1fR1BSX0FSR19SRUdJU1RFUlMpCisJICB7CisJICAgIGF2YWx1ZVtpXSA9IChjaGFyICopIHBnciArIDI7CisJICAgIG5nKys7CisJICAgIHBncisrOworCSAgfQorCWVsc2UKKwkgIHsKKwkgICAgYXZhbHVlW2ldID0gKGNoYXIgKikgcHN0ICsgMjsKKwkgICAgcHN0Kys7CisJICB9CisJYnJlYWs7CisjZW5kaWYKKworICAgICAgY2FzZSBGRklfVFlQRV9TSU5UMzI6CisgICAgICBjYXNlIEZGSV9UWVBFX1VJTlQzMjoKKyAgICAgIGNhc2UgRkZJX1RZUEVfUE9JTlRFUjoKKwlpZiAobmcgPCBOVU1fR1BSX0FSR19SRUdJU1RFUlMpCisJICB7CisJICAgIGF2YWx1ZVtpXSA9IHBncjsKKwkgICAgbmcrKzsKKwkgICAgcGdyKys7CisJICB9CisJZWxzZQorCSAgeworCSAgICBhdmFsdWVbaV0gPSBwc3Q7CisJICAgIHBzdCsrOworCSAgfQorCWJyZWFrOworCisgICAgICBjYXNlIEZGSV9UWVBFX1NUUlVDVDoKKwkvKiBTdHJ1Y3RzIGFyZSBwYXNzZWQgYnkgcmVmZXJlbmNlLiBUaGUgYWRkcmVzcyB3aWxsIGFwcGVhciBpbiBhCisJICAgZ3ByIGlmIGl0IGlzIG9uZSBvZiB0aGUgZmlyc3QgOCBhcmd1bWVudHMuICAqLworCWlmIChuZyA8IE5VTV9HUFJfQVJHX1JFR0lTVEVSUykKKwkgIHsKKwkgICAgYXZhbHVlW2ldID0gKHZvaWQgKikgKnBncjsKKwkgICAgbmcrKzsKKwkgICAgcGdyKys7CisJICB9CisJZWxzZQorCSAgeworCSAgICBhdmFsdWVbaV0gPSAodm9pZCAqKSAqcHN0OworCSAgICBwc3QrKzsKKwkgIH0KKwlicmVhazsKKworICAgICAgY2FzZSBGRklfVFlQRV9TSU5UNjQ6CisgICAgICBjYXNlIEZGSV9UWVBFX1VJTlQ2NDoKKwkvKiBQYXNzaW5nIGxvbmcgbG9uZyBpbnRzIGFyZSBjb21wbGV4LCB0aGV5IG11c3QKKwkgICBiZSBwYXNzZWQgaW4gc3VpdGFibGUgcmVnaXN0ZXIgcGFpcnMgc3VjaCBhcworCSAgIChyMyxyNCkgb3IgKHI1LHI2KSBvciAocjYscjcpLCBvciAocjcscjgpIG9yIChyOSxyMTApCisJICAgYW5kIGlmIHRoZSBlbnRpcmUgcGFpciBhcmVuJ3QgYXZhaWxhYmxlIHRoZW4gdGhlIG91dGdvaW5nCisJICAgcGFyYW1ldGVyIHN0YWNrIGlzIHVzZWQgZm9yIGJvdGggYnV0IGFuIGFsaWdubWVudCBvZiA4CisJICAgbXVzdCB3aWxsIGJlIGtlcHQuICBTbyB3ZSBtdXN0IGVpdGhlciBsb29rIGluIHBncgorCSAgIG9yIHBzdCB0byBmaW5kIHRoZSBjb3JyZWN0IGFkZHJlc3MgZm9yIHRoaXMgdHlwZQorCSAgIG9mIHBhcmFtZXRlci4gICovCisJaWYgKG5nIDwgTlVNX0dQUl9BUkdfUkVHSVNURVJTIC0gMSkKKwkgIHsKKwkgICAgaWYgKG5nICYgMSkKKwkgICAgICB7CisJCS8qIHNraXAgcjQsIHI2LCByOCBhcyBzdGFydGluZyBwb2ludHMgKi8KKwkJbmcrKzsKKwkJcGdyKys7CisJICAgICAgfQorCSAgICBhdmFsdWVbaV0gPSBwZ3I7CisJICAgIG5nICs9IDI7CisJICAgIHBnciArPSAyOworCSAgfQorCWVsc2UKKwkgIHsKKwkgICAgaWYgKCgobG9uZykgcHN0KSAmIDQpCisJICAgICAgcHN0Kys7CisJICAgIGF2YWx1ZVtpXSA9IHBzdDsKKwkgICAgcHN0ICs9IDI7CisJICAgIG5nID0gTlVNX0dQUl9BUkdfUkVHSVNURVJTOworCSAgfQorCWJyZWFrOworCisgICAgICBkZWZhdWx0OgorCUZGSV9BU1NFUlQgKDApOworICAgICAgfQorCisgICAgaSsrOworICB9CisKKyAgKGNsb3N1cmUtPmZ1bikgKGNpZiwgcnZhbHVlLCBhdmFsdWUsIGNsb3N1cmUtPnVzZXJfZGF0YSk7CisKKyAgLyogVGVsbCBmZmlfY2xvc3VyZV9TWVNWIGhvdyB0byBwZXJmb3JtIHJldHVybiB0eXBlIHByb21vdGlvbnMuCisgICAgIEJlY2F1c2UgdGhlIEZGSV9TWVNWIEFCSSByZXR1cm5zIHRoZSBzdHJ1Y3R1cmVzIDw9IDggYnl0ZXMgaW4KKyAgICAgcjMvcjQgd2UgaGF2ZSB0byB0ZWxsIGZmaV9jbG9zdXJlX1NZU1YgaG93IHRvIHRyZWF0IHRoZW0uICBXZQorICAgICBjb21iaW5lIHRoZSBiYXNlIHR5cGUgRkZJX1NZU1ZfVFlQRV9TTUFMTF9TVFJVQ1Qgd2l0aCB0aGUgc2l6ZSBvZgorICAgICB0aGUgc3RydWN0IGxlc3Mgb25lLiAgV2UgbmV2ZXIgaGF2ZSBhIHN0cnVjdCB3aXRoIHNpemUgemVyby4KKyAgICAgU2VlIHRoZSBjb21tZW50IGluIGZmaXRhcmdldC5oIGFib3V0IG9yZGVyaW5nLiAgKi8KKyAgaWYgKHJ0eXBlbnVtID09IEZGSV9UWVBFX1NUUlVDVAorICAgICAgJiYgKGNpZi0+YWJpICYgRkZJX1NZU1ZfU1RSVUNUX1JFVCkgIT0gMCAmJiBzaXplIDw9IDgpCisgICAgcmV0dXJuIEZGSV9TWVNWX1RZUEVfU01BTExfU1RSVUNUIC0gMSArIHNpemU7CisgIHJldHVybiBydHlwZW51bTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvcG93ZXJwYy9mZml0YXJnZXQuaCBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3Bvd2VycGMvZmZpdGFyZ2V0LmgKaW5kZXggM2M5ZGI0OS4uYjQ3YjBmNSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvcG93ZXJwYy9mZml0YXJnZXQuaAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9wb3dlcnBjL2ZmaXRhcmdldC5oCkBAIC02MCw0NSArNjAsNzYgQEAKIHR5cGVkZWYgZW51bSBmZmlfYWJpIHsKICAgRkZJX0ZJUlNUX0FCSSA9IDAsCiAKLSNpZmRlZiBQT1dFUlBDCi0gIEZGSV9TWVNWLAotICBGRklfR0NDX1NZU1YsCi0gIEZGSV9MSU5VWDY0LAotICBGRklfTElOVVgsCi0gIEZGSV9MSU5VWF9TT0ZUX0ZMT0FULAotIyBpZiBkZWZpbmVkKFBPV0VSUEM2NCkKLSAgRkZJX0RFRkFVTFRfQUJJID0gRkZJX0xJTlVYNjQsCi0jIGVsaWYgZGVmaW5lZChfX05PX0ZQUlNfXykKLSAgRkZJX0RFRkFVTFRfQUJJID0gRkZJX0xJTlVYX1NPRlRfRkxPQVQsCi0jIGVsaWYgKF9fTERCTF9NQU5UX0RJR19fID09IDEwNikKLSAgRkZJX0RFRkFVTFRfQUJJID0gRkZJX0xJTlVYLAotIyBlbHNlCi0gIEZGSV9ERUZBVUxUX0FCSSA9IEZGSV9HQ0NfU1lTViwKLSMgZW5kaWYKLSNlbmRpZgotCi0jaWZkZWYgUE9XRVJQQ19BSVgKKyNpZiBkZWZpbmVkIChQT1dFUlBDX0FJWCkKICAgRkZJX0FJWCwKICAgRkZJX0RBUldJTiwKICAgRkZJX0RFRkFVTFRfQUJJID0gRkZJX0FJWCwKLSNlbmRpZgorICBGRklfTEFTVF9BQkkKIAotI2lmZGVmIFBPV0VSUENfREFSV0lOCisjZWxpZiBkZWZpbmVkIChQT1dFUlBDX0RBUldJTikKICAgRkZJX0FJWCwKICAgRkZJX0RBUldJTiwKICAgRkZJX0RFRkFVTFRfQUJJID0gRkZJX0RBUldJTiwKLSNlbmRpZgotCi0jaWZkZWYgUE9XRVJQQ19GUkVFQlNECi0gIEZGSV9TWVNWLAotICBGRklfR0NDX1NZU1YsCi0gIEZGSV9MSU5VWDY0LAotICBGRklfTElOVVgsCi0gIEZGSV9MSU5VWF9TT0ZUX0ZMT0FULAotICBGRklfREVGQVVMVF9BQkkgPSBGRklfU1lTViwKLSNlbmRpZgotCiAgIEZGSV9MQVNUX0FCSQorCisjZWxzZQorICAvKiBUaGUgRkZJX0NPTVBBVCB2YWx1ZXMgYXJlIHVzZWQgYnkgb2xkIGNvZGUuICBTaW5jZSBsaWJmZmkgbWF5IGJlCisgICAgIGEgc2hhcmVkIGxpYnJhcnkgd2UgaGF2ZSB0byBzdXBwb3J0IG9sZCB2YWx1ZXMgZm9yIGJhY2t3YXJkcworICAgICBjb21wYXRpYmlsaXR5LiAgKi8KKyAgRkZJX0NPTVBBVF9TWVNWLAorICBGRklfQ09NUEFUX0dDQ19TWVNWLAorICBGRklfQ09NUEFUX0xJTlVYNjQsCisgIEZGSV9DT01QQVRfTElOVVgsCisgIEZGSV9DT01QQVRfTElOVVhfU09GVF9GTE9BVCwKKworIyBpZiBkZWZpbmVkIChQT1dFUlBDNjQpCisgIC8qIFRoaXMgYml0LCBhbHdheXMgc2V0IGluIG5ldyBjb2RlLCBtdXN0IG5vdCBiZSBzZXQgaW4gYW55IG9mIHRoZQorICAgICBvbGQgRkZJX0NPTVBBVCB2YWx1ZXMgdGhhdCBtaWdodCBiZSB1c2VkIGZvciA2NC1iaXQgbGludXguICBXZQorICAgICBvbmx5IG5lZWQgd29ycnkgYWJvdXQgRkZJX0NPTVBBVF9MSU5VWDY0LCBidXQgdG8gYmUgc2FmZSBhdm9pZAorICAgICBhbGwgb2xkIHZhbHVlcy4gICovCisgIEZGSV9MSU5VWCA9IDgsCisgIC8qIFRoaXMgYW5kIGZvbGxvd2luZyBiaXRzIGNhbiByZXVzZSBGRklfQ09NUEFUIHZhbHVlcy4gICovCisgIEZGSV9MSU5VWF9TVFJVQ1RfQUxJR04gPSAxLAorICBGRklfTElOVVhfTE9OR19ET1VCTEVfMTI4ID0gMiwKKyAgRkZJX0RFRkFVTFRfQUJJID0gKEZGSV9MSU5VWAorIyAgaWZkZWYgX19TVFJVQ1RfUEFSTV9BTElHTl9fCisJCSAgICAgfCBGRklfTElOVVhfU1RSVUNUX0FMSUdOCisjICBlbmRpZgorIyAgaWZkZWYgX19MT05HX0RPVUJMRV8xMjhfXworCQkgICAgIHwgRkZJX0xJTlVYX0xPTkdfRE9VQkxFXzEyOAorIyAgZW5kaWYKKwkJICAgICApLAorICBGRklfTEFTVF9BQkkgPSAxMgorCisjIGVsc2UKKyAgLyogVGhpcyBiaXQsIGFsd2F5cyBzZXQgaW4gbmV3IGNvZGUsIG11c3Qgbm90IGJlIHNldCBpbiBhbnkgb2YgdGhlCisgICAgIG9sZCBGRklfQ09NUEFUIHZhbHVlcyB0aGF0IG1pZ2h0IGJlIHVzZWQgZm9yIDMyLWJpdCBsaW51eC9zeXN2L2JzZC4gICovCisgIEZGSV9TWVNWID0gOCwKKyAgLyogVGhpcyBhbmQgZm9sbG93aW5nIGJpdHMgY2FuIHJldXNlIEZGSV9DT01QQVQgdmFsdWVzLiAgKi8KKyAgRkZJX1NZU1ZfU09GVF9GTE9BVCA9IDEsCisgIEZGSV9TWVNWX1NUUlVDVF9SRVQgPSAyLAorICBGRklfU1lTVl9JQk1fTE9OR19ET1VCTEUgPSA0LAorICBGRklfU1lTVl9MT05HX0RPVUJMRV8xMjggPSAxNiwKKworICBGRklfREVGQVVMVF9BQkkgPSAoRkZJX1NZU1YKKyMgIGlmZGVmIF9fTk9fRlBSU19fCisJCSAgICAgfCBGRklfU1lTVl9TT0ZUX0ZMT0FUCisjICBlbmRpZgorIyAgaWYgKGRlZmluZWQgKF9fU1ZSNF9TVFJVQ1RfUkVUVVJOKQkJCQkJXAorICAgICAgIHx8IGRlZmluZWQgKFBPV0VSUENfRlJFRUJTRCkgJiYgIWRlZmluZWQgKF9fQUlYX1NUUlVDVF9SRVRVUk4pKQorCQkgICAgIHwgRkZJX1NZU1ZfU1RSVUNUX1JFVAorIyAgZW5kaWYKKyMgIGlmIF9fTERCTF9NQU5UX0RJR19fID09IDEwNgorCQkgICAgIHwgRkZJX1NZU1ZfSUJNX0xPTkdfRE9VQkxFCisjICBlbmRpZgorIyAgaWZkZWYgX19MT05HX0RPVUJMRV8xMjhfXworCQkgICAgIHwgRkZJX1NZU1ZfTE9OR19ET1VCTEVfMTI4CisjICBlbmRpZgorCQkgICAgICksCisgIEZGSV9MQVNUX0FCSSA9IDMyCisjIGVuZGlmCisjZW5kaWYKKwogfSBmZmlfYWJpOwogI2VuZGlmCiAKQEAgLTEwNiw2ICsxMzcsMTAgQEAKIAogI2RlZmluZSBGRklfQ0xPU1VSRVMgMQogI2RlZmluZSBGRklfTkFUSVZFX1JBV19BUEkgMAorI2lmIGRlZmluZWQgKFBPV0VSUEMpIHx8IGRlZmluZWQgKFBPV0VSUENfRlJFRUJTRCkKKyMgZGVmaW5lIEZGSV9UQVJHRVRfU1BFQ0lGSUNfVkFSSUFESUMgMQorIyBkZWZpbmUgRkZJX0VYVFJBX0NJRl9GSUVMRFMgdW5zaWduZWQgbmZpeGVkYXJncworI2VuZGlmCiAKIC8qIEZvciBhZGRpdGlvbmFsIHR5cGVzIGxpa2UgdGhlIGJlbG93LCB0YWtlIGNhcmUgYWJvdXQgdGhlIG9yZGVyIGluCiAgICBwcGNfY2xvc3VyZXMuUy4gVGhleSBtdXN0IGZvbGxvdyBhZnRlciB0aGUgRkZJX1RZUEVfTEFTVC4gICovCkBAIC0xMTMsMTkgKzE0OCwyNiBAQAogLyogTmVlZGVkIGZvciBzb2Z0LWZsb2F0IGxvbmctZG91YmxlLTEyOCBzdXBwb3J0LiAgKi8KICNkZWZpbmUgRkZJX1RZUEVfVUlOVDEyOCAoRkZJX1RZUEVfTEFTVCArIDEpCiAKLS8qIE5lZWRlZCBmb3IgRkZJX1NZU1Ygc21hbGwgc3RydWN0dXJlIHJldHVybnMuCi0gICBXZSB1c2UgdHdvIGZsYWcgYml0cywgKEZMQUdfU1lTVl9TTVNUX1IzLCBGTEFHX1NZU1ZfU01TVF9SNCkgd2hpY2ggYXJlCi0gICBkZWZpbmVkIGluIGZmaS5jLCB0byBkZXRlcm1pbmUgdGhlIGV4YWN0IHJldHVybiB0eXBlIGFuZCBpdHMgc2l6ZS4gICovCisvKiBOZWVkZWQgZm9yIEZGSV9TWVNWIHNtYWxsIHN0cnVjdHVyZSByZXR1cm5zLiAgKi8KICNkZWZpbmUgRkZJX1NZU1ZfVFlQRV9TTUFMTF9TVFJVQ1QgKEZGSV9UWVBFX0xBU1QgKyAyKQogCi0jaWYgZGVmaW5lZChQT1dFUlBDNjQpIHx8IGRlZmluZWQoUE9XRVJQQ19BSVgpCisvKiBVc2VkIGJ5IEVMRnYyIGZvciBob21vZ2Vub3VzIHN0cnVjdHVyZSByZXR1cm5zLiAgKi8KKyNkZWZpbmUgRkZJX1YyX1RZUEVfRkxPQVRfSE9NT0cJCShGRklfVFlQRV9MQVNUICsgMSkKKyNkZWZpbmUgRkZJX1YyX1RZUEVfRE9VQkxFX0hPTU9HCShGRklfVFlQRV9MQVNUICsgMikKKyNkZWZpbmUgRkZJX1YyX1RZUEVfU01BTExfU1RSVUNUCShGRklfVFlQRV9MQVNUICsgMykKKworI2lmIF9DQUxMX0VMRiA9PSAyCisjIGRlZmluZSBGRklfVFJBTVBPTElORV9TSVpFIDMyCisjZWxzZQorIyBpZiBkZWZpbmVkKFBPV0VSUEM2NCkgfHwgZGVmaW5lZChQT1dFUlBDX0FJWCkKICMgIGlmIGRlZmluZWQoUE9XRVJQQ19EQVJXSU42NCkKICMgICAgZGVmaW5lIEZGSV9UUkFNUE9MSU5FX1NJWkUgNDgKICMgIGVsc2UKICMgICAgZGVmaW5lIEZGSV9UUkFNUE9MSU5FX1NJWkUgMjQKICMgIGVuZGlmCi0jZWxzZSAvKiBQT1dFUlBDIHx8IFBPV0VSUENfQUlYICovCisjIGVsc2UgLyogUE9XRVJQQyB8fCBQT1dFUlBDX0FJWCAqLwogIyAgZGVmaW5lIEZGSV9UUkFNUE9MSU5FX1NJWkUgNDAKKyMgZW5kaWYKICNlbmRpZgogCiAjaWZuZGVmIExJQkZGSV9BU00KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3Bvd2VycGMvbGludXg2NC5TIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvcG93ZXJwYy9saW51eDY0LlMKaW5kZXggZjI4ZGE4MS4uYzRkMDFkOCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvcG93ZXJwYy9saW51eDY0LlMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvcG93ZXJwYy9saW51eDY0LlMKQEAgLTI5LDE4ICsyOSwyNSBAQAogI2luY2x1ZGUgPGZmaWNvbmZpZy5oPgogI2luY2x1ZGUgPGZmaS5oPgogCi0jaWZkZWYgX19wb3dlcnBjNjRfXworI2lmZGVmIFBPV0VSUEM2NAogCS5oaWRkZW4JZmZpX2NhbGxfTElOVVg2NAogCS5nbG9ibAlmZmlfY2FsbF9MSU5VWDY0CisjIGlmIF9DQUxMX0VMRiA9PSAyCisJLnRleHQKK2ZmaV9jYWxsX0xJTlVYNjQ6CisJYWRkaXMJJXIyLCAlcjEyLCAuVE9DLi1mZmlfY2FsbF9MSU5VWDY0QGhhCisJYWRkaQklcjIsICVyMiwgLlRPQy4tZmZpX2NhbGxfTElOVVg2NEBsCisJLmxvY2FsZW50cnkgZmZpX2NhbGxfTElOVVg2NCwgLiAtIGZmaV9jYWxsX0xJTlVYNjQKKyMgZWxzZQogCS5zZWN0aW9uCSIub3BkIiwiYXciCiAJLmFsaWduCTMKIGZmaV9jYWxsX0xJTlVYNjQ6Ci0jaWZkZWYgX0NBTExfTElOVVgKKyMgIGlmZGVmIF9DQUxMX0xJTlVYCiAJLnF1YWQJLkwuZmZpX2NhbGxfTElOVVg2NCwuVE9DLkB0b2NiYXNlLDAKIAkudHlwZQlmZmlfY2FsbF9MSU5VWDY0LEBmdW5jdGlvbgogCS50ZXh0CiAuTC5mZmlfY2FsbF9MSU5VWDY0OgotI2Vsc2UKKyMgIGVsc2UKIAkuaGlkZGVuCS5mZmlfY2FsbF9MSU5VWDY0CiAJLmdsb2JsCS5mZmlfY2FsbF9MSU5VWDY0CiAJLnF1YWQJLmZmaV9jYWxsX0xJTlVYNjQsLlRPQy5AdG9jYmFzZSwwCkBAIC00OCw3ICs1NSw4IEBACiAJLnR5cGUJLmZmaV9jYWxsX0xJTlVYNjQsQGZ1bmN0aW9uCiAJLnRleHQKIC5mZmlfY2FsbF9MSU5VWDY0OgotI2VuZGlmCisjICBlbmRpZgorIyBlbmRpZgogLkxGQjE6CiAJbWZscgklcjAKIAlzdGQJJXIyOCwgLTMyKCVyMSkKQEAgLTYzLDI2ICs3MSwzNSBAQAogCW1yCSVyMzEsICVyNQkvKiBmbGFncywgKi8KIAltcgklcjMwLCAlcjYJLyogcnZhbHVlLCAqLwogCW1yCSVyMjksICVyNwkvKiBmdW5jdGlvbiBhZGRyZXNzLiAgKi8KKy8qIFNhdmUgdG9jIHBvaW50ZXIsIG5vdCBmb3IgdGhlIGZmaV9wcmVwX2FyZ3M2NCBjYWxsLCBidXQgZm9yIHRoZSBsYXRlcgorICAgYmN0cmwgZnVuY3Rpb24gY2FsbC4gICovCisjIGlmIF9DQUxMX0VMRiA9PSAyCisJc3RkCSVyMiwgMjQoJXIxKQorIyBlbHNlCiAJc3RkCSVyMiwgNDAoJXIxKQorIyBlbmRpZgogCiAJLyogQ2FsbCBmZmlfcHJlcF9hcmdzNjQuICAqLwogCW1yCSVyNCwgJXIxCi0jaWZkZWYgX0NBTExfTElOVVgKKyMgaWYgZGVmaW5lZCBfQ0FMTF9MSU5VWCB8fCBfQ0FMTF9FTEYgPT0gMgogCWJsCWZmaV9wcmVwX2FyZ3M2NAotI2Vsc2UKKyMgZWxzZQogCWJsCS5mZmlfcHJlcF9hcmdzNjQKLSNlbmRpZgorIyBlbmRpZgogCi0JbGQJJXIwLCAwKCVyMjkpCisjIGlmIF9DQUxMX0VMRiA9PSAyCisJbXIJJXIxMiwgJXIyOQorIyBlbHNlCisJbGQJJXIxMiwgMCglcjI5KQogCWxkCSVyMiwgOCglcjI5KQogCWxkCSVyMTEsIDE2KCVyMjkpCi0KKyMgZW5kaWYKIAkvKiBOb3cgZG8gdGhlIGNhbGwuICAqLwogCS8qIFNldCB1cCBjcjEgd2l0aCBiaXRzIDQtNyBvZiB0aGUgZmxhZ3MuICAqLwogCW10Y3JmCTB4NDAsICVyMzEKIAogCS8qIEdldCB0aGUgYWRkcmVzcyB0byBjYWxsIGludG8gQ1RSLiAgKi8KLQltdGN0cgklcjAKKwltdGN0cgklcjEyCiAJLyogTG9hZCBhbGwgdGhvc2UgYXJndW1lbnQgcmVnaXN0ZXJzLiAgKi8KIAlsZAklcjMsIC0zMi0oOCo4KSglcjI4KQogCWxkCSVyNCwgLTMyLSg3KjgpKCVyMjgpCkBAIC0xMTcsMTIgKzEzNCwxNyBAQAogCiAJLyogVGhpcyBtdXN0IGZvbGxvdyB0aGUgY2FsbCBpbW1lZGlhdGVseSwgdGhlIHVud2luZGVyCiAJICAgdXNlcyB0aGlzIHRvIGZpbmQgb3V0IGlmIHIyIGhhcyBiZWVuIHNhdmVkIG9yIG5vdC4gICovCisjIGlmIF9DQUxMX0VMRiA9PSAyCisJbGQJJXIyLCAyNCglcjEpCisjIGVsc2UKIAlsZAklcjIsIDQwKCVyMSkKKyMgZW5kaWYKIAogCS8qIE5vdywgZGVhbCB3aXRoIHRoZSByZXR1cm4gdmFsdWUuICAqLwogCW10Y3JmCTB4MDEsICVyMzEKLQlidC0JMzAsIC5MZG9uZV9yZXR1cm5fdmFsdWUKLQlidC0JMjksIC5MZnBfcmV0dXJuX3ZhbHVlCisJYnQJMzEsIC5Mc3RydWN0X3JldHVybl92YWx1ZQorCWJ0CTMwLCAuTGRvbmVfcmV0dXJuX3ZhbHVlCisJYnQJMjksIC5MZnBfcmV0dXJuX3ZhbHVlCiAJc3RkCSVyMywgMCglcjMwKQogCS8qIEZhbGwgdGhyb3VnaC4uLiAgKi8KIApAQCAtMTMwLDcgKzE1Miw3IEBACiAJLyogUmVzdG9yZSB0aGUgcmVnaXN0ZXJzIHdlIHVzZWQgYW5kIHJldHVybi4gICovCiAJbXIJJXIxLCAlcjI4CiAJbGQJJXIwLCAxNiglcjI4KQotCWxkCSVyMjgsIC0zMiglcjEpCisJbGQJJXIyOCwgLTMyKCVyMjgpCiAJbXRscgklcjAKIAlsZAklcjI5LCAtMjQoJXIxKQogCWxkCSVyMzAsIC0xNiglcjEpCkBAIC0xNDcsMTQgKzE2OSw0OCBAQAogLkxmbG9hdF9yZXR1cm5fdmFsdWU6CiAJc3RmcwklZjEsIDAoJXIzMCkKIAliCS5MZG9uZV9yZXR1cm5fdmFsdWUKKworLkxzdHJ1Y3RfcmV0dXJuX3ZhbHVlOgorCWJmCTI5LCAuTHNtYWxsX3N0cnVjdAorCWJmCTI4LCAuTGZsb2F0X2hvbW9nX3JldHVybl92YWx1ZQorCXN0ZmQJJWYxLCAwKCVyMzApCisJc3RmZAklZjIsIDgoJXIzMCkKKwlzdGZkCSVmMywgMTYoJXIzMCkKKwlzdGZkCSVmNCwgMjQoJXIzMCkKKwlzdGZkCSVmNSwgMzIoJXIzMCkKKwlzdGZkCSVmNiwgNDAoJXIzMCkKKwlzdGZkCSVmNywgNDgoJXIzMCkKKwlzdGZkCSVmOCwgNTYoJXIzMCkKKwliCS5MZG9uZV9yZXR1cm5fdmFsdWUKKworLkxmbG9hdF9ob21vZ19yZXR1cm5fdmFsdWU6CisJc3RmcwklZjEsIDAoJXIzMCkKKwlzdGZzCSVmMiwgNCglcjMwKQorCXN0ZnMJJWYzLCA4KCVyMzApCisJc3RmcwklZjQsIDEyKCVyMzApCisJc3RmcwklZjUsIDE2KCVyMzApCisJc3RmcwklZjYsIDIwKCVyMzApCisJc3RmcwklZjcsIDI0KCVyMzApCisJc3RmcwklZjgsIDI4KCVyMzApCisJYgkuTGRvbmVfcmV0dXJuX3ZhbHVlCisKKy5Mc21hbGxfc3RydWN0OgorCXN0ZAklcjMsIDAoJXIzMCkKKwlzdGQJJXI0LCA4KCVyMzApCisJYgkuTGRvbmVfcmV0dXJuX3ZhbHVlCisKIC5MRkUxOgogCS5sb25nCTAKIAkuYnl0ZQkwLDEyLDAsMSwxMjgsNCwwLDAKLSNpZmRlZiBfQ0FMTF9MSU5VWAorIyBpZiBfQ0FMTF9FTEYgPT0gMgorCS5zaXplCWZmaV9jYWxsX0xJTlVYNjQsLi1mZmlfY2FsbF9MSU5VWDY0CisjIGVsc2UKKyMgIGlmZGVmIF9DQUxMX0xJTlVYCiAJLnNpemUJZmZpX2NhbGxfTElOVVg2NCwuLS5MLmZmaV9jYWxsX0xJTlVYNjQKLSNlbHNlCisjICBlbHNlCiAJLnNpemUJLmZmaV9jYWxsX0xJTlVYNjQsLi0uZmZpX2NhbGxfTElOVVg2NAotI2VuZGlmCisjICBlbmRpZgorIyBlbmRpZgogCiAJLnNlY3Rpb24JLmVoX2ZyYW1lLEVIX0ZSQU1FX0ZMQUdTLEBwcm9nYml0cwogLkxmcmFtZTE6CkBAIC0xOTcsOCArMjUzLDggQEAKIAkudWxlYjEyOCAweDQKIAkuYWxpZ24gMwogLkxFRkRFMToKLSNlbmRpZgogCi0jaWYgZGVmaW5lZCBfX0VMRl9fICYmIGRlZmluZWQgX19saW51eF9fCisjIGlmIChkZWZpbmVkIF9fRUxGX18gJiYgZGVmaW5lZCBfX2xpbnV4X18pIHx8IF9DQUxMX0VMRiA9PSAyCiAJLnNlY3Rpb24JLm5vdGUuR05VLXN0YWNrLCIiLEBwcm9nYml0cworIyBlbmRpZgogI2VuZGlmCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9wb3dlcnBjL2xpbnV4NjRfY2xvc3VyZS5TIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvcG93ZXJwYy9saW51eDY0X2Nsb3N1cmUuUwppbmRleCBiMWUxMjE5Li5iYzYxYjVlIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9wb3dlcnBjL2xpbnV4NjRfY2xvc3VyZS5TCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3Bvd2VycGMvbGludXg2NF9jbG9zdXJlLlMKQEAgLTMwLDE4ICszMCwyNSBAQAogCiAJLmZpbGUJImxpbnV4NjRfY2xvc3VyZS5TIgogCi0jaWZkZWYgX19wb3dlcnBjNjRfXworI2lmZGVmIFBPV0VSUEM2NAogCUZGSV9ISURERU4gKGZmaV9jbG9zdXJlX0xJTlVYNjQpCiAJLmdsb2JsICBmZmlfY2xvc3VyZV9MSU5VWDY0CisjIGlmIF9DQUxMX0VMRiA9PSAyCisJLnRleHQKK2ZmaV9jbG9zdXJlX0xJTlVYNjQ6CisJYWRkaXMJJXIyLCAlcjEyLCAuVE9DLi1mZmlfY2xvc3VyZV9MSU5VWDY0QGhhCisJYWRkaQklcjIsICVyMiwgLlRPQy4tZmZpX2Nsb3N1cmVfTElOVVg2NEBsCisJLmxvY2FsZW50cnkgZmZpX2Nsb3N1cmVfTElOVVg2NCwgLiAtIGZmaV9jbG9zdXJlX0xJTlVYNjQKKyMgZWxzZQogCS5zZWN0aW9uICAgICAgICAiLm9wZCIsImF3IgogCS5hbGlnbiAgMwogZmZpX2Nsb3N1cmVfTElOVVg2NDoKLSNpZmRlZiBfQ0FMTF9MSU5VWAorIyAgaWZkZWYgX0NBTExfTElOVVgKIAkucXVhZCAgIC5MLmZmaV9jbG9zdXJlX0xJTlVYNjQsLlRPQy5AdG9jYmFzZSwwCiAJLnR5cGUgICBmZmlfY2xvc3VyZV9MSU5VWDY0LEBmdW5jdGlvbgogCS50ZXh0CiAuTC5mZmlfY2xvc3VyZV9MSU5VWDY0OgotI2Vsc2UKKyMgIGVsc2UKIAlGRklfSElEREVOICguZmZpX2Nsb3N1cmVfTElOVVg2NCkKIAkuZ2xvYmwgIC5mZmlfY2xvc3VyZV9MSU5VWDY0CiAJLnF1YWQgICAuZmZpX2Nsb3N1cmVfTElOVVg2NCwuVE9DLkB0b2NiYXNlLDAKQEAgLTQ5LDYxICs1NiwxMDUgQEAKIAkudHlwZSAgIC5mZmlfY2xvc3VyZV9MSU5VWDY0LEBmdW5jdGlvbgogCS50ZXh0CiAuZmZpX2Nsb3N1cmVfTElOVVg2NDoKLSNlbmRpZgotLkxGQjE6Ci0JIyBzYXZlIGdlbmVyYWwgcmVncyBpbnRvIHBhcm0gc2F2ZSBhcmVhCi0Jc3RkCSVyMywgNDgoJXIxKQotCXN0ZAklcjQsIDU2KCVyMSkKLQlzdGQJJXI1LCA2NCglcjEpCi0Jc3RkCSVyNiwgNzIoJXIxKQotCW1mbHIJJXIwCisjICBlbmRpZgorIyBlbmRpZgogCi0Jc3RkCSVyNywgODAoJXIxKQotCXN0ZAklcjgsIDg4KCVyMSkKLQlzdGQJJXI5LCA5NiglcjEpCi0Jc3RkCSVyMTAsIDEwNCglcjEpCisjIGlmIF9DQUxMX0VMRiA9PSAyCisjICAzMiBieXRlIHNwZWNpYWwgcmVnIHNhdmUgYXJlYSArIDY0IGJ5dGUgcGFybSBzYXZlIGFyZWEKKyMgICsgNjQgYnl0ZSByZXR2YWwgYXJlYSArIDEzKjggZnByIHNhdmUgYXJlYSArIHJvdW5kIHRvIDE2CisjICBkZWZpbmUgU1RBQ0tGUkFNRSAyNzIKKyMgIGRlZmluZSBQQVJNU0FWRSAzMgorIyAgZGVmaW5lIFJFVFZBTCBQQVJNU0FWRSs2NAorIyBlbHNlCisjICA0OCBieXRlcyBzcGVjaWFsIHJlZyBzYXZlIGFyZWEgKyA2NCBieXRlcyBwYXJtIHNhdmUgYXJlYQorIyAgKyAxNiBieXRlcyByZXR2YWwgYXJlYSArIDEzKjggYnl0ZXMgZnByIHNhdmUgYXJlYSArIHJvdW5kIHRvIDE2CisjICBkZWZpbmUgU1RBQ0tGUkFNRSAyNDAKKyMgIGRlZmluZSBQQVJNU0FWRSA0OAorIyAgZGVmaW5lIFJFVFZBTCBQQVJNU0FWRSs2NAorIyBlbmRpZgorCisuTEZCMToKKyMgaWYgX0NBTExfRUxGID09IDIKKwlsZAklcjEyLCBGRklfVFJBTVBPTElORV9TSVpFKCVyMTEpCQkjIGNsb3N1cmUtPmNpZgorCW1mbHIJJXIwCisJbHd6CSVyMTIsIDI4KCVyMTIpCQkJCSMgY2lmLT5mbGFncworCW10Y3JmCTB4NDAsICVyMTIKKwlhZGRpCSVyMTIsICVyMSwgUEFSTVNBVkUKKwlidAk3LCAuTHBhcm1zYXZlCisJIyBPdXIgY2FsbGVyIGhhcyBub3QgYWxsb2NhdGVkIGEgcGFyYW1ldGVyIHNhdmUgYXJlYS4KKwkjIFdlIG5lZWQgdG8gYWxsb2NhdGUgb25lIGhlcmUgYW5kIHVzZSBpdCB0byBwYXNzIGdwcnMgdG8KKwkjIGZmaV9jbG9zdXJlX2hlbHBlcl9MSU5VWDY0LgorCWFkZGkJJXIxMiwgJXIxLCAtU1RBQ0tGUkFNRStQQVJNU0FWRQorLkxwYXJtc2F2ZToKKwlzdGQJJXIwLCAxNiglcjEpCisJIyBTYXZlIGdlbmVyYWwgcmVncyBpbnRvIHBhcm0gc2F2ZSBhcmVhCisJc3RkCSVyMywgMCglcjEyKQorCXN0ZAklcjQsIDgoJXIxMikKKwlzdGQJJXI1LCAxNiglcjEyKQorCXN0ZAklcjYsIDI0KCVyMTIpCisJc3RkCSVyNywgMzIoJXIxMikKKwlzdGQJJXI4LCA0MCglcjEyKQorCXN0ZAklcjksIDQ4KCVyMTIpCisJc3RkCSVyMTAsIDU2KCVyMTIpCisKKwkjIGxvYWQgdXAgdGhlIHBvaW50ZXIgdG8gdGhlIHBhcm0gc2F2ZSBhcmVhCisJbXIJJXI1LCAlcjEyCisjIGVsc2UKKwkjIGNvcHkgcjIgdG8gcjExIGFuZCBsb2FkIFRPQyBpbnRvIHIyCisJbXIJJXIxMSwgJXIyCisJbGQJJXIyLCAxNiglcjExKQorCisJbWZscgklcjAKKwkjIFNhdmUgZ2VuZXJhbCByZWdzIGludG8gcGFybSBzYXZlIGFyZWEKKwkjIFRoaXMgaXMgdGhlIHBhcmFtZXRlciBzYXZlIGFyZWEgc2V0IHVwIGJ5IG91ciBjYWxsZXIuCisJc3RkCSVyMywgUEFSTVNBVkUrMCglcjEpCisJc3RkCSVyNCwgUEFSTVNBVkUrOCglcjEpCisJc3RkCSVyNSwgUEFSTVNBVkUrMTYoJXIxKQorCXN0ZAklcjYsIFBBUk1TQVZFKzI0KCVyMSkKKwlzdGQJJXI3LCBQQVJNU0FWRSszMiglcjEpCisJc3RkCSVyOCwgUEFSTVNBVkUrNDAoJXIxKQorCXN0ZAklcjksIFBBUk1TQVZFKzQ4KCVyMSkKKwlzdGQJJXIxMCwgUEFSTVNBVkUrNTYoJXIxKQorCiAJc3RkCSVyMCwgMTYoJXIxKQogCi0JIyBtYW5kYXRvcnkgNDggYnl0ZXMgc3BlY2lhbCByZWcgc2F2ZSBhcmVhICsgNjQgYnl0ZXMgcGFybSBzYXZlIGFyZWEKLQkjICsgMTYgYnl0ZXMgcmV0dmFsIGFyZWEgKyAxMyo4IGJ5dGVzIGZwciBzYXZlIGFyZWEgKyByb3VuZCB0byAxNgotCXN0ZHUJJXIxLCAtMjQwKCVyMSkKLS5MQ0ZJMDoKKwkjIGxvYWQgdXAgdGhlIHBvaW50ZXIgdG8gdGhlIHBhcm0gc2F2ZSBhcmVhCisJYWRkaQklcjUsICVyMSwgUEFSTVNBVkUKKyMgZW5kaWYKIAogCSMgbmV4dCBzYXZlIGZwciAxIHRvIGZwciAxMwotCXN0ZmQgICVmMSwgMTI4KygwKjgpKCVyMSkKLQlzdGZkICAlZjIsIDEyOCsoMSo4KSglcjEpCi0Jc3RmZCAgJWYzLCAxMjgrKDIqOCkoJXIxKQotCXN0ZmQgICVmNCwgMTI4KygzKjgpKCVyMSkKLQlzdGZkICAlZjUsIDEyOCsoNCo4KSglcjEpCi0Jc3RmZCAgJWY2LCAxMjgrKDUqOCkoJXIxKQotCXN0ZmQgICVmNywgMTI4Kyg2KjgpKCVyMSkKLQlzdGZkICAlZjgsIDEyOCsoNyo4KSglcjEpCi0Jc3RmZCAgJWY5LCAxMjgrKDgqOCkoJXIxKQotCXN0ZmQgICVmMTAsIDEyOCsoOSo4KSglcjEpCi0Jc3RmZCAgJWYxMSwgMTI4KygxMCo4KSglcjEpCi0Jc3RmZCAgJWYxMiwgMTI4KygxMSo4KSglcjEpCi0Jc3RmZCAgJWYxMywgMTI4KygxMio4KSglcjEpCisJc3RmZAklZjEsIC0xMDQrKDAqOCkoJXIxKQorCXN0ZmQJJWYyLCAtMTA0KygxKjgpKCVyMSkKKwlzdGZkCSVmMywgLTEwNCsoMio4KSglcjEpCisJc3RmZAklZjQsIC0xMDQrKDMqOCkoJXIxKQorCXN0ZmQJJWY1LCAtMTA0Kyg0KjgpKCVyMSkKKwlzdGZkCSVmNiwgLTEwNCsoNSo4KSglcjEpCisJc3RmZAklZjcsIC0xMDQrKDYqOCkoJXIxKQorCXN0ZmQJJWY4LCAtMTA0Kyg3KjgpKCVyMSkKKwlzdGZkCSVmOSwgLTEwNCsoOCo4KSglcjEpCisJc3RmZAklZjEwLCAtMTA0Kyg5KjgpKCVyMSkKKwlzdGZkCSVmMTEsIC0xMDQrKDEwKjgpKCVyMSkKKwlzdGZkCSVmMTIsIC0xMDQrKDExKjgpKCVyMSkKKwlzdGZkCSVmMTMsIC0xMDQrKDEyKjgpKCVyMSkKIAotCSMgc2V0IHVwIHJlZ2lzdGVycyBmb3IgdGhlIHJvdXRpbmUgdGhhdCBhY3R1YWxseSBkb2VzIHRoZSB3b3JrCisJIyBsb2FkIHVwIHRoZSBwb2ludGVyIHRvIHRoZSBzYXZlZCBmcHIgcmVnaXN0ZXJzICovCisJYWRkaQklcjYsICVyMSwgLTEwNAorCisJIyBsb2FkIHVwIHRoZSBwb2ludGVyIHRvIHRoZSByZXN1bHQgc3RvcmFnZQorCWFkZGkJJXI0LCAlcjEsIC1TVEFDS0ZSQU1FK1JFVFZBTAorCisJc3RkdQklcjEsIC1TVEFDS0ZSQU1FKCVyMSkKKy5MQ0ZJMDoKKwogCSMgZ2V0IHRoZSBjb250ZXh0IHBvaW50ZXIgZnJvbSB0aGUgdHJhbXBvbGluZQotCW1yICVyMywgJXIxMQotCi0JIyBub3cgbG9hZCB1cCB0aGUgcG9pbnRlciB0byB0aGUgcmVzdWx0IHN0b3JhZ2UKLQlhZGRpICVyNCwgJXIxLCAxMTIKLQotCSMgbm93IGxvYWQgdXAgdGhlIHBvaW50ZXIgdG8gdGhlIHBhcmFtZXRlciBzYXZlIGFyZWEKLQkjIGluIHRoZSBwcmV2aW91cyBmcmFtZQotCWFkZGkgJXI1LCAlcjEsIDI0MCArIDQ4Ci0KLQkjIG5vdyBsb2FkIHVwIHRoZSBwb2ludGVyIHRvIHRoZSBzYXZlZCBmcHIgcmVnaXN0ZXJzICovCi0JYWRkaSAlcjYsICVyMSwgMTI4CisJbXIJJXIzLCAlcjExCiAKIAkjIG1ha2UgdGhlIGNhbGwKLSNpZmRlZiBfQ0FMTF9MSU5VWAorIyBpZiBkZWZpbmVkIF9DQUxMX0xJTlVYIHx8IF9DQUxMX0VMRiA9PSAyCiAJYmwgZmZpX2Nsb3N1cmVfaGVscGVyX0xJTlVYNjQKLSNlbHNlCisjIGVsc2UKIAlibCAuZmZpX2Nsb3N1cmVfaGVscGVyX0xJTlVYNjQKLSNlbmRpZgorIyBlbmRpZgogLkxyZXQ6CiAKIAkjIG5vdyByMyBjb250YWlucyB0aGUgcmV0dXJuIHR5cGUKQEAgLTExMiwxMCArMTYzLDEyIEBACiAKIAkjIGxvb2sgdXAgdGhlIHByb3BlciBzdGFydGluZyBwb2ludCBpbiB0YWJsZQogCSMgYnkgdXNpbmcgcmV0dXJuIHR5cGUgYXMgb2Zmc2V0CisJbGQgJXIwLCBTVEFDS0ZSQU1FKzE2KCVyMSkKKwljbXBsZGkgJXIzLCBGRklfVjJfVFlQRV9TTUFMTF9TVFJVQ1QKKwliZ2UgLkxzbWFsbAogCW1mbHIgJXI0CQkjIG1vdmUgYWRkcmVzcyBvZiAuTHJldCB0byByNAogCXNsZGkgJXIzLCAlcjMsIDQJIyBub3cgbXVsdGlwbHkgcmV0dXJuIHR5cGUgYnkgMTYKIAlhZGRpICVyNCwgJXI0LCAuTHJldF90eXBlMCAtIC5McmV0Ci0JbGQgJXIwLCAyNDArMTYoJXIxKQogCWFkZCAlcjMsICVyMywgJXI0CSMgYWRkIGNvbnRlbnRzIG9mIHRhYmxlIHRvIHRhYmxlIGFkZHJlc3MKIAltdGN0ciAlcjMKIAliY3RyCQkJIyBqdW1wIHRvIGl0CkBAIC0xMjgsODkgKzE4MSwxNzUgQEAKIC5McmV0X3R5cGUwOgogIyBjYXNlIEZGSV9UWVBFX1ZPSUQKIAltdGxyICVyMAotCWFkZGkgJXIxLCAlcjEsIDI0MAorCWFkZGkgJXIxLCAlcjEsIFNUQUNLRlJBTUUKIAlibHIKIAlub3AKICMgY2FzZSBGRklfVFlQRV9JTlQKLQlsd2EgJXIzLCAxMTIrNCglcjEpCisjIGlmZGVmIF9fTElUVExFX0VORElBTl9fCisJbHdhICVyMywgUkVUVkFMKzAoJXIxKQorIyBlbHNlCisJbHdhICVyMywgUkVUVkFMKzQoJXIxKQorIyBlbmRpZgogCW10bHIgJXIwCi0JYWRkaSAlcjEsICVyMSwgMjQwCisJYWRkaSAlcjEsICVyMSwgU1RBQ0tGUkFNRQogCWJscgogIyBjYXNlIEZGSV9UWVBFX0ZMT0FUCi0JbGZzICVmMSwgMTEyKzAoJXIxKQorCWxmcyAlZjEsIFJFVFZBTCswKCVyMSkKIAltdGxyICVyMAotCWFkZGkgJXIxLCAlcjEsIDI0MAorCWFkZGkgJXIxLCAlcjEsIFNUQUNLRlJBTUUKIAlibHIKICMgY2FzZSBGRklfVFlQRV9ET1VCTEUKLQlsZmQgJWYxLCAxMTIrMCglcjEpCisJbGZkICVmMSwgUkVUVkFMKzAoJXIxKQogCW10bHIgJXIwCi0JYWRkaSAlcjEsICVyMSwgMjQwCisJYWRkaSAlcjEsICVyMSwgU1RBQ0tGUkFNRQogCWJscgogIyBjYXNlIEZGSV9UWVBFX0xPTkdET1VCTEUKLQlsZmQgJWYxLCAxMTIrMCglcjEpCisJbGZkICVmMSwgUkVUVkFMKzAoJXIxKQogCW10bHIgJXIwCi0JbGZkICVmMiwgMTEyKzgoJXIxKQorCWxmZCAlZjIsIFJFVFZBTCs4KCVyMSkKIAliIC5MZmluaXNoCiAjIGNhc2UgRkZJX1RZUEVfVUlOVDgKLQlsYnogJXIzLCAxMTIrNyglcjEpCisjIGlmZGVmIF9fTElUVExFX0VORElBTl9fCisJbGJ6ICVyMywgUkVUVkFMKzAoJXIxKQorIyBlbHNlCisJbGJ6ICVyMywgUkVUVkFMKzcoJXIxKQorIyBlbmRpZgogCW10bHIgJXIwCi0JYWRkaSAlcjEsICVyMSwgMjQwCisJYWRkaSAlcjEsICVyMSwgU1RBQ0tGUkFNRQogCWJscgogIyBjYXNlIEZGSV9UWVBFX1NJTlQ4Ci0JbGJ6ICVyMywgMTEyKzcoJXIxKQorIyBpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworCWxieiAlcjMsIFJFVFZBTCswKCVyMSkKKyMgZWxzZQorCWxieiAlcjMsIFJFVFZBTCs3KCVyMSkKKyMgZW5kaWYKIAlleHRzYiAlcjMsJXIzCiAJbXRsciAlcjAKIAliIC5MZmluaXNoCiAjIGNhc2UgRkZJX1RZUEVfVUlOVDE2Ci0JbGh6ICVyMywgMTEyKzYoJXIxKQorIyBpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworCWxoeiAlcjMsIFJFVFZBTCswKCVyMSkKKyMgZWxzZQorCWxoeiAlcjMsIFJFVFZBTCs2KCVyMSkKKyMgZW5kaWYKIAltdGxyICVyMAogLkxmaW5pc2g6Ci0JYWRkaSAlcjEsICVyMSwgMjQwCisJYWRkaSAlcjEsICVyMSwgU1RBQ0tGUkFNRQogCWJscgogIyBjYXNlIEZGSV9UWVBFX1NJTlQxNgotCWxoYSAlcjMsIDExMis2KCVyMSkKKyMgaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKwlsaGEgJXIzLCBSRVRWQUwrMCglcjEpCisjIGVsc2UKKwlsaGEgJXIzLCBSRVRWQUwrNiglcjEpCisjIGVuZGlmCiAJbXRsciAlcjAKLQlhZGRpICVyMSwgJXIxLCAyNDAKKwlhZGRpICVyMSwgJXIxLCBTVEFDS0ZSQU1FCiAJYmxyCiAjIGNhc2UgRkZJX1RZUEVfVUlOVDMyCi0JbHd6ICVyMywgMTEyKzQoJXIxKQorIyBpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworCWx3eiAlcjMsIFJFVFZBTCswKCVyMSkKKyMgZWxzZQorCWx3eiAlcjMsIFJFVFZBTCs0KCVyMSkKKyMgZW5kaWYKIAltdGxyICVyMAotCWFkZGkgJXIxLCAlcjEsIDI0MAorCWFkZGkgJXIxLCAlcjEsIFNUQUNLRlJBTUUKIAlibHIKICMgY2FzZSBGRklfVFlQRV9TSU5UMzIKLQlsd2EgJXIzLCAxMTIrNCglcjEpCisjIGlmZGVmIF9fTElUVExFX0VORElBTl9fCisJbHdhICVyMywgUkVUVkFMKzAoJXIxKQorIyBlbHNlCisJbHdhICVyMywgUkVUVkFMKzQoJXIxKQorIyBlbmRpZgogCW10bHIgJXIwCi0JYWRkaSAlcjEsICVyMSwgMjQwCisJYWRkaSAlcjEsICVyMSwgU1RBQ0tGUkFNRQogCWJscgogIyBjYXNlIEZGSV9UWVBFX1VJTlQ2NAotCWxkICVyMywgMTEyKzAoJXIxKQorCWxkICVyMywgUkVUVkFMKzAoJXIxKQogCW10bHIgJXIwCi0JYWRkaSAlcjEsICVyMSwgMjQwCisJYWRkaSAlcjEsICVyMSwgU1RBQ0tGUkFNRQogCWJscgogIyBjYXNlIEZGSV9UWVBFX1NJTlQ2NAotCWxkICVyMywgMTEyKzAoJXIxKQorCWxkICVyMywgUkVUVkFMKzAoJXIxKQogCW10bHIgJXIwCi0JYWRkaSAlcjEsICVyMSwgMjQwCisJYWRkaSAlcjEsICVyMSwgU1RBQ0tGUkFNRQogCWJscgogIyBjYXNlIEZGSV9UWVBFX1NUUlVDVAogCW10bHIgJXIwCi0JYWRkaSAlcjEsICVyMSwgMjQwCisJYWRkaSAlcjEsICVyMSwgU1RBQ0tGUkFNRQogCWJscgogCW5vcAogIyBjYXNlIEZGSV9UWVBFX1BPSU5URVIKLQlsZCAlcjMsIDExMiswKCVyMSkKKwlsZCAlcjMsIFJFVFZBTCswKCVyMSkKIAltdGxyICVyMAotCWFkZGkgJXIxLCAlcjEsIDI0MAorCWFkZGkgJXIxLCAlcjEsIFNUQUNLRlJBTUUKIAlibHIKLSMgZXNhYworIyBjYXNlIEZGSV9WMl9UWVBFX0ZMT0FUX0hPTU9HCisJbGZzICVmMSwgUkVUVkFMKzAoJXIxKQorCWxmcyAlZjIsIFJFVFZBTCs0KCVyMSkKKwlsZnMgJWYzLCBSRVRWQUwrOCglcjEpCisJYiAuTG1vcmVmbG9hdAorIyBjYXNlIEZGSV9WMl9UWVBFX0RPVUJMRV9IT01PRworCWxmZCAlZjEsIFJFVFZBTCswKCVyMSkKKwlsZmQgJWYyLCBSRVRWQUwrOCglcjEpCisJbGZkICVmMywgUkVUVkFMKzE2KCVyMSkKKwlsZmQgJWY0LCBSRVRWQUwrMjQoJXIxKQorCW10bHIgJXIwCisJbGZkICVmNSwgUkVUVkFMKzMyKCVyMSkKKwlsZmQgJWY2LCBSRVRWQUwrNDAoJXIxKQorCWxmZCAlZjcsIFJFVFZBTCs0OCglcjEpCisJbGZkICVmOCwgUkVUVkFMKzU2KCVyMSkKKwlhZGRpICVyMSwgJXIxLCBTVEFDS0ZSQU1FCisJYmxyCisuTG1vcmVmbG9hdDoKKwlsZnMgJWY0LCBSRVRWQUwrMTIoJXIxKQorCW10bHIgJXIwCisJbGZzICVmNSwgUkVUVkFMKzE2KCVyMSkKKwlsZnMgJWY2LCBSRVRWQUwrMjAoJXIxKQorCWxmcyAlZjcsIFJFVFZBTCsyNCglcjEpCisJbGZzICVmOCwgUkVUVkFMKzI4KCVyMSkKKwlhZGRpICVyMSwgJXIxLCBTVEFDS0ZSQU1FCisJYmxyCisuTHNtYWxsOgorIyBpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworCWxkICVyMyxSRVRWQUwrMCglcjEpCisJbXRsciAlcjAKKwlsZCAlcjQsUkVUVkFMKzgoJXIxKQorCWFkZGkgJXIxLCAlcjEsIFNUQUNLRlJBTUUKKwlibHIKKyMgZWxzZQorCSMgQSBzdHJ1Y3Qgc21hbGxlciB0aGFuIGEgZHdvcmQgaXMgcmV0dXJuZWQgaW4gdGhlIGxvdyBiaXRzIG9mIHIzCisJIyBpZS4gcmlnaHQganVzdGlmaWVkLiAgTGFyZ2VyIHN0cnVjdHMgYXJlIHBhc3NlZCBsZWZ0IGp1c3RpZmllZAorCSMgaW4gcjMgYW5kIHI0LiAgVGhlIHJldHVybiB2YWx1ZSBhcmVhIG9uIHRoZSBzdGFjayB3aWxsIGhhdmUKKwkjIHRoZSBzdHJ1Y3RzIGFzIHRoZXkgYXJlIHVzdWFsbHkgc3RvcmVkIGluIG1lbW9yeS4KKwljbXBsZGkgJXIzLCBGRklfVjJfVFlQRV9TTUFMTF9TVFJVQ1QgKyA3ICMgc2l6ZSA4IGJ5dGVzPworCW5lZyAlcjUsICVyMworCWxkICVyMyxSRVRWQUwrMCglcjEpCisJYmx0IC5Mc21hbGxkb3duCisJbXRsciAlcjAKKwlsZCAlcjQsUkVUVkFMKzgoJXIxKQorCWFkZGkgJXIxLCAlcjEsIFNUQUNLRlJBTUUKKwlibHIKKy5Mc21hbGxkb3duOgorCWFkZGkgJXI1LCAlcjUsIEZGSV9WMl9UWVBFX1NNQUxMX1NUUlVDVCArIDcKKwltdGxyICVyMAorCXNsZGkgJXI1LCAlcjUsIDMKKwlhZGRpICVyMSwgJXIxLCBTVEFDS0ZSQU1FCisJc3JkICVyMywgJXIzLCAlcjUKKwlibHIKKyMgZW5kaWYKKwogLkxGRTE6CiAJLmxvbmcJMAogCS5ieXRlCTAsMTIsMCwxLDEyOCwwLDAsMAotI2lmZGVmIF9DQUxMX0xJTlVYCisjIGlmIF9DQUxMX0VMRiA9PSAyCisJLnNpemUJZmZpX2Nsb3N1cmVfTElOVVg2NCwuLWZmaV9jbG9zdXJlX0xJTlVYNjQKKyMgZWxzZQorIyAgaWZkZWYgX0NBTExfTElOVVgKIAkuc2l6ZQlmZmlfY2xvc3VyZV9MSU5VWDY0LC4tLkwuZmZpX2Nsb3N1cmVfTElOVVg2NAotI2Vsc2UKKyMgIGVsc2UKIAkuc2l6ZQkuZmZpX2Nsb3N1cmVfTElOVVg2NCwuLS5mZmlfY2xvc3VyZV9MSU5VWDY0Ci0jZW5kaWYKKyMgIGVuZGlmCisjIGVuZGlmCiAKIAkuc2VjdGlvbgkuZWhfZnJhbWUsRUhfRlJBTUVfRkxBR1MsQHByb2diaXRzCiAuTGZyYW1lMToKQEAgLTIzOSwxNCArMzc4LDE0IEBACiAJLmJ5dGUJMHgyCSAjIERXX0NGQV9hZHZhbmNlX2xvYzEKIAkuYnl0ZQkuTENGSTAtLkxGQjEKIAkuYnl0ZQkweGUJICMgRFdfQ0ZBX2RlZl9jZmFfb2Zmc2V0Ci0JLnVsZWIxMjggMjQwCisJLnVsZWIxMjggU1RBQ0tGUkFNRQogCS5ieXRlCTB4MTEJICMgRFdfQ0ZBX29mZnNldF9leHRlbmRlZF9zZgogCS51bGViMTI4IDB4NDEKIAkuc2xlYjEyOCAtMgogCS5hbGlnbiAzCiAuTEVGREUxOgotI2VuZGlmCiAKLSNpZiBkZWZpbmVkIF9fRUxGX18gJiYgZGVmaW5lZCBfX2xpbnV4X18KKyMgaWYgZGVmaW5lZCBfX0VMRl9fICYmIGRlZmluZWQgX19saW51eF9fCiAJLnNlY3Rpb24JLm5vdGUuR05VLXN0YWNrLCIiLEBwcm9nYml0cworIyBlbmRpZgogI2VuZGlmCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9wb3dlcnBjL3BwY19jbG9zdXJlLlMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9wb3dlcnBjL3BwY19jbG9zdXJlLlMKaW5kZXggNDFmYjg4NS4uMDc1OTIyYyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3Bvd2VycGMvcHBjX2Nsb3N1cmUuUwpAQCAtMzEsNyArMzEsNyBAQAogCiAJLmZpbGUgICAicHBjX2Nsb3N1cmUuUyIKIAotI2lmbmRlZiBfX3Bvd2VycGM2NF9fCisjaWZuZGVmIFBPV0VSUEM2NAogCiBFTlRSWShmZmlfY2xvc3VyZV9TWVNWKQogLkxGQjE6CkBAIC0xNTksMjUgKzE1OSw0MSBAQAogI2VuZGlmCiAKICMgY2FzZSBGRklfVFlQRV9VSU5UOAorI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisJbGJ6ICVyMywxMTIrMCglcjEpCisjZWxzZQogCWxieiAlcjMsMTEyKzMoJXIxKQorI2VuZGlmCiAJbXRsciAlcjAKIAlhZGRpICVyMSwlcjEsMTQ0CiAJYmxyCiAKICMgY2FzZSBGRklfVFlQRV9TSU5UOAorI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisJbGJ6ICVyMywxMTIrMCglcjEpCisjZWxzZQogCWxieiAlcjMsMTEyKzMoJXIxKQorI2VuZGlmCiAJZXh0c2IgJXIzLCVyMwogCW10bHIgJXIwCiAJYiAuTGZpbmlzaAogCiAjIGNhc2UgRkZJX1RZUEVfVUlOVDE2CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKwlsaHogJXIzLDExMiswKCVyMSkKKyNlbHNlCiAJbGh6ICVyMywxMTIrMiglcjEpCisjZW5kaWYKIAltdGxyICVyMAogCWFkZGkgJXIxLCVyMSwxNDQKIAlibHIKIAogIyBjYXNlIEZGSV9UWVBFX1NJTlQxNgorI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisJbGhhICVyMywxMTIrMCglcjEpCisjZWxzZQogCWxoYSAlcjMsMTEyKzIoJXIxKQorI2VuZGlmCiAJbXRsciAlcjAKIAlhZGRpICVyMSwlcjEsMTQ0CiAJYmxyCkBAIC0yMjIsNyArMjM4LDcgQEAKIAlsd3ogJXIzLDExMiswKCVyMSkKIAlsd3ogJXI0LDExMis0KCVyMSkKIAlsd3ogJXI1LDExMis4KCVyMSkKLQlibCAuTHVpbnQxMjgKKwliIC5MdWludDEyOAogCiAjIFRoZSByZXR1cm4gdHlwZXMgYmVsb3cgYXJlIG9ubHkgdXNlZCB3aGVuIHRoZSBBQkkgdHlwZSBpcyBGRklfU1lTVi4KICMgY2FzZSBGRklfU1lTVl9UWVBFX1NNQUxMX1NUUlVDVCArIDEuIE9uZSBieXRlIHN0cnVjdC4KQEAgLTIzOSw5ICsyNTUsMTUgQEAKIAogIyBjYXNlIEZGSV9TWVNWX1RZUEVfU01BTExfU1RSVUNUICsgMy4gVGhyZWUgYnl0ZSBzdHJ1Y3QuCiAJbHd6ICVyMywxMTIrMCglcjEpCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKwltdGxyICVyMAorCWFkZGkgJXIxLCVyMSwxNDQKKwlibHIKKyNlbHNlCiAJc3J3aSAlcjMsJXIzLDgKIAltdGxyICVyMAogCWIgLkxmaW5pc2gKKyNlbmRpZgogCiAjIGNhc2UgRkZJX1NZU1ZfVFlQRV9TTUFMTF9TVFJVQ1QgKyA0LiBGb3VyIGJ5dGUgc3RydWN0LgogCWx3eiAlcjMsMTEyKzAoJXIxKQpAQCAtMjUyLDIwICsyNzQsMzUgQEAKICMgY2FzZSBGRklfU1lTVl9UWVBFX1NNQUxMX1NUUlVDVCArIDUuIEZpdmUgYnl0ZSBzdHJ1Y3QuCiAJbHd6ICVyMywxMTIrMCglcjEpCiAJbHd6ICVyNCwxMTIrNCglcjEpCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKwltdGxyICVyMAorCWIgLkxmaW5pc2gKKyNlbHNlCiAJbGkgJXI1LDI0CiAJYiAuTHN0cnVjdDU2NworI2VuZGlmCiAKICMgY2FzZSBGRklfU1lTVl9UWVBFX1NNQUxMX1NUUlVDVCArIDYuIFNpeCBieXRlIHN0cnVjdC4KIAlsd3ogJXIzLDExMiswKCVyMSkKIAlsd3ogJXI0LDExMis0KCVyMSkKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworCW10bHIgJXIwCisJYiAuTGZpbmlzaAorI2Vsc2UKIAlsaSAlcjUsMTYKIAliIC5Mc3RydWN0NTY3CisjZW5kaWYKIAogIyBjYXNlIEZGSV9TWVNWX1RZUEVfU01BTExfU1RSVUNUICsgNy4gU2V2ZW4gYnl0ZSBzdHJ1Y3QuCiAJbHd6ICVyMywxMTIrMCglcjEpCiAJbHd6ICVyNCwxMTIrNCglcjEpCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKwltdGxyICVyMAorCWIgLkxmaW5pc2gKKyNlbHNlCiAJbGkgJXI1LDgKIAliIC5Mc3RydWN0NTY3CisjZW5kaWYKIAogIyBjYXNlIEZGSV9TWVNWX1RZUEVfU01BTExfU1RSVUNUICsgOC4gRWlnaHQgYnl0ZSBzdHJ1Y3QuCiAJbHd6ICVyMywxMTIrMCglcjEpCkBAIC0yNzMsNiArMzEwLDcgQEAKIAltdGxyICVyMAogCWIgLkxmaW5pc2gKIAorI2lmbmRlZiBfX0xJVFRMRV9FTkRJQU5fXwogLkxzdHJ1Y3Q1Njc6CiAJc3ViZmljICVyNiwlcjUsMzIKIAlzcncgJXI0LCVyNCwlcjUKQEAgLTI4MiwxMyArMzIwLDE0IEBACiAJbXRsciAlcjAKIAlhZGRpICVyMSwlcjEsMTQ0CiAJYmxyCisjZW5kaWYKIAogLkx1aW50MTI4OgogCWx3eiAlcjYsMTEyKzEyKCVyMSkKIAltdGxyICVyMAogCWFkZGkgJXIxLCVyMSwxNDQKIAlibHIKLQorCQogRU5EKGZmaV9jbG9zdXJlX1NZU1YpCiAKIAkuc2VjdGlvbgkiLmVoX2ZyYW1lIixFSF9GUkFNRV9GTEFHUyxAcHJvZ2JpdHMKQEAgLTMzOSw4ICszNzgsNyBAQAogCS5hbGlnbiAyCiAuTEVGREUxOgogCi0jZW5kaWYKLQogI2lmIGRlZmluZWQgX19FTEZfXyAmJiBkZWZpbmVkIF9fbGludXhfXwogCS5zZWN0aW9uCS5ub3RlLkdOVS1zdGFjaywiIixAcHJvZ2JpdHMKICNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9wb3dlcnBjL3N5c3YuUyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3Bvd2VycGMvc3lzdi5TCmluZGV4IDVlZTNhMTkuLmZlZDIzODAgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3Bvd2VycGMvc3lzdi5TCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3Bvd2VycGMvc3lzdi5TCkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVkZSA8ZmZpLmg+CiAjaW5jbHVkZSA8cG93ZXJwYy9hc20uaD4KIAotI2lmbmRlZiBfX3Bvd2VycGM2NF9fCisjaWZuZGVmIFBPV0VSUEM2NAogCS5nbG9ibCBmZmlfcHJlcF9hcmdzX1NZU1YKIEVOVFJZKGZmaV9jYWxsX1NZU1YpCiAuTEZCMToKQEAgLTE0MiwxOSArMTQyLDE0IEBACiAjZW5kaWYKIAogTChzbWFsbF9zdHJ1Y3RfcmV0dXJuX3ZhbHVlKToKLQlleHRyd2kJJXI2LCVyMzEsMiwxOSAgICAgICAgIC8qIG51bWJlciBvZiBieXRlcyBwYWRkaW5nID0gc2hpZnQvOCAqLwotCW10Y3JmCTB4MDIsJXIzMQkgICAgICAvKiBjb3B5IGZsYWdzIHRvIGNyWzI0OjI3XSAoY3I2KSAqLwotCWV4dHJ3aQklcjUsJXIzMSw1LDE5ICAgICAgICAgLyogcjUgPC0gbnVtYmVyIG9mIGJpdHMgb2YgcGFkZGluZyAqLwotCXN1YmZpYyAgJXI2LCVyNiw0ICAgICAgICAgICAgIC8qIHI2IDwtIG51bWJlciBvZiB1c2VmdWwgYnl0ZXMgaW4gcjMgKi8KLQliZi0JMjUsTChkb25lX3JldHVybl92YWx1ZSkgLyogc3RydWN0IGluIHIzID8gaWYgbm90LCBkb25lLiAqLwotLyogc21zdF9vbmVfcmVnaXN0ZXI6ICovCi0Jc2x3CSVyMywlcjMsJXI1ICAgICAgICAgICAvKiBMZWZ0LWp1c3RpZnkgdmFsdWUgaW4gcjMgKi8KLQltdHhlcgklcjYgICAgICAgICAgICAgICAgICAgLyogbW92ZSBieXRlIGNvdW50IHRvIFhFUiAuLi4gKi8KLQlzdHN3eAklcjMsMCwlcjMwICAgICAgICAgICAgLyogLi4uIGFuZCBzdG9yZSB0aGF0IG1hbnkgYnl0ZXMgKi8KLQliZisJMjYsTChkb25lX3JldHVybl92YWx1ZSkgIC8qIHN0cnVjdCBpbiByMzpyNCA/ICovCi0JYWRkCSVyNiwlcjYsJXIzMCAgICAgICAgICAvKiBhZGp1c3QgcG9pbnRlciAqLwotCXN0c3dpCSVyNCwlcjYsNCAgICAgICAgICAgICAvKiBzdG9yZSBsYXN0IGZvdXIgYnl0ZXMgKi8KLQliCUwoZG9uZV9yZXR1cm5fdmFsdWUpCisJLyoKKwkgKiBUaGUgQyBjb2RlIGFsd2F5cyBhbGxvY2F0ZXMgYSBwcm9wZXJseS1hbGlnbmVkIDgtYnl0ZSBib3VuY2UKKwkgKiBidWZmZXIgdG8gbWFrZSB0aGlzIGFzc2VtYmx5IGNvZGUgdmVyeSBzaW1wbGUuICBKdXN0IHdyaXRlIG91dAorCSAqIHIzIGFuZCByNCB0byB0aGUgYnVmZmVyIHRvIGFsbG93IHRoZSBDIGNvZGUgdG8gaGFuZGxlIHRoZSByZXN0LgorCSAqLworCXN0dyAlcjMsIDAoJXIzMCkKKwlzdHcgJXI0LCA0KCVyMzApCisJYiBMKGRvbmVfcmV0dXJuX3ZhbHVlKQogCiAuTEZFMToKIEVORChmZmlfY2FsbF9TWVNWKQpAQCAtMjE4LDggKzIxMyw4IEBACiAgICAgICAudWxlYjEyOCAgMHgxYwogICAgICAgLmFsaWduIDIKIC5MRUZERTE6Ci0jZW5kaWYKIAogI2lmIGRlZmluZWQgX19FTEZfXyAmJiBkZWZpbmVkIF9fbGludXhfXwogCS5zZWN0aW9uCS5ub3RlLkdOVS1zdGFjaywiIixAcHJvZ2JpdHMKICNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9wcmVwX2NpZi5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvcHJlcF9jaWYuYwppbmRleCBlOGVjNWNmLi41NWNlZWQ4IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9wcmVwX2NpZi5jCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3ByZXBfY2lmLmMKQEAgLTc2LDYgKzc2LDEzIEBACiAgICAgIHRvdGFsIHNpemUgb2YgMypzaXplb2YobG9uZykuICAqLwogICBhcmctPnNpemUgPSBBTElHTiAoYXJnLT5zaXplLCBhcmctPmFsaWdubWVudCk7CiAKKyAgLyogT24gc29tZSB0YXJnZXRzLCB0aGUgQUJJIGRlZmluZXMgdGhhdCBzdHJ1Y3R1cmVzIGhhdmUgYW4gYWRkaXRpb25hbAorICAgICBhbGlnbm1lbnQgYmV5b25kIHRoZSAibmF0dXJhbCIgb25lIGJhc2VkIG9uIHRoZWlyIGVsZW1lbnRzLiAgKi8KKyNpZmRlZiBGRklfQUdHUkVHQVRFX0FMSUdOTUVOVAorICBpZiAoRkZJX0FHR1JFR0FURV9BTElHTk1FTlQgPiBhcmctPmFsaWdubWVudCkKKyAgICBhcmctPmFsaWdubWVudCA9IEZGSV9BR0dSRUdBVEVfQUxJR05NRU5UOworI2VuZGlmCisKICAgaWYgKGFyZy0+c2l6ZSA9PSAwKQogICAgIHJldHVybiBGRklfQkFEX1RZUEVERUY7CiAgIGVsc2UKQEAgLTExMSwxMyArMTE4LDggQEAKICAgRkZJX0FTU0VSVCgoIWlzdmFyaWFkaWMpIHx8IChuZml4ZWRhcmdzID49IDEpKTsKICAgRkZJX0FTU0VSVChuZml4ZWRhcmdzIDw9IG50b3RhbGFyZ3MpOwogCi0jaWZuZGVmIFg4Nl9XSU4zMgogICBpZiAoISAoYWJpID4gRkZJX0ZJUlNUX0FCSSAmJiBhYmkgPCBGRklfTEFTVF9BQkkpKQogICAgIHJldHVybiBGRklfQkFEX0FCSTsKLSNlbHNlCi0gIGlmICghIChhYmkgPiBGRklfRklSU1RfQUJJICYmIGFiaSA8IEZGSV9MQVNUX0FCSSB8fCBhYmkgPT0gRkZJX1RISVNDQUxMKSkKLSAgICByZXR1cm4gRkZJX0JBRF9BQkk7Ci0jZW5kaWYKIAogICBjaWYtPmFiaSA9IGFiaTsKICAgY2lmLT5hcmdfdHlwZXMgPSBhdHlwZXM7CkBAIC0xMjYsNiArMTI4LDEwIEBACiAKICAgY2lmLT5mbGFncyA9IDA7CiAKKyNpZiBIQVZFX0xPTkdfRE9VQkxFX1ZBUklBTlQKKyAgZmZpX3ByZXBfdHlwZXMgKGFiaSk7CisjZW5kaWYKKwogICAvKiBJbml0aWFsaXplIHRoZSByZXR1cm4gdHlwZSBpZiBuZWNlc3NhcnkgKi8KICAgaWYgKChjaWYtPnJ0eXBlLT5zaXplID09IDApICYmIChpbml0aWFsaXplX2FnZ3JlZ2F0ZShjaWYtPnJ0eXBlKSAhPSBGRklfT0spKQogICAgIHJldHVybiBGRklfQkFEX1RZUEVERUY7CkBAIC0xNDYsNyArMTUyLDkgQEAKICNpZmRlZiBYVEVOU0EKICAgICAgICYmIChjaWYtPnJ0eXBlLT5zaXplID4gMTYpCiAjZW5kaWYKLQorI2lmZGVmIE5JT1MyCisgICAgICAmJiAoY2lmLT5ydHlwZS0+c2l6ZSA+IDgpCisjZW5kaWYKICAgICAgKQogICAgIGJ5dGVzID0gU1RBQ0tfQVJHX1NJWkUoc2l6ZW9mKHZvaWQqKSk7CiAjZW5kaWYKQEAgLTE3NCw3ICsxODIsNyBAQAogCXsKIAkgIC8qIEFkZCBhbnkgcGFkZGluZyBpZiBuZWNlc3NhcnkgKi8KIAkgIGlmICgoKCpwdHIpLT5hbGlnbm1lbnQgLSAxKSAmIGJ5dGVzKQotCSAgICBieXRlcyA9IEFMSUdOKGJ5dGVzLCAoKnB0ciktPmFsaWdubWVudCk7CisJICAgIGJ5dGVzID0gKHVuc2lnbmVkKUFMSUdOKGJ5dGVzLCAoKnB0ciktPmFsaWdubWVudCk7CiAKICNpZmRlZiBUSUxFCiAJICBpZiAoYnl0ZXMgPCAxMCAqIEZGSV9TSVpFT0ZfQVJHICYmCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9zaC9mZmkuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3NoL2ZmaS5jCmluZGV4IDM1MTViOTEuLjllYzg2YmYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3NoL2ZmaS5jCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3NoL2ZmaS5jCkBAIC00MSw3ICs0MSw3IEBACiAjZGVmaW5lIFNUUlVDVF9WQUxVRV9BRERSRVNTX1dJVEhfQVJHIDAKICNlbmRpZgogCi0vKiBJZiB0aGUgc3RydWN0dXJlIGhhcyBlc3NlbnRpYWx5IGFuIHVuaXF1ZSBlbGVtZW50LCByZXR1cm4gaXRzIHR5cGUuICAqLworLyogSWYgdGhlIHN0cnVjdHVyZSBoYXMgZXNzZW50aWFsbHkgYW4gdW5pcXVlIGVsZW1lbnQsIHJldHVybiBpdHMgdHlwZS4gICovCiBzdGF0aWMgaW50CiBzaW1wbGVfdHlwZSAoZmZpX3R5cGUgKmFyZykKIHsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3RpbGUvdGlsZS5TIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvdGlsZS90aWxlLlMKaW5kZXggYTE4NmUxZi4uZDFmODJjYiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvdGlsZS90aWxlLlMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvdGlsZS90aWxlLlMKQEAgLTYwLDcgKzYwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKmZuYWRkcikodm9pZCkpOwogCiAgICAgICAgIE9uIGVudHJ5LCBSRUdfQVJHUyBjb250YWluIHRoZSBvdXRnb2luZyByZWdpc3RlciB2YWx1ZXMsCi0gICAgICAgIGFuZCBTVEFDS19BUkdTIGNvbnRhaW50cyBTVEFDS19BUkdfQllURVMgb2YgYWRkaXRpb25hbCB2YWx1ZXMKKyAgICAgICAgYW5kIFNUQUNLX0FSR1MgY29udGFpbnMgU1RBQ0tfQVJHX0JZVEVTIG9mIGFkZGl0aW9uYWwgdmFsdWVzCiAgICAgICAgIHRvIGJlIHBhc3NlZCBvbiB0aGUgc3RhY2suIElmIFNUQUNLX0FSR19CWVRFUyBpcyB6ZXJvLCB0aGVuCiAgICAgICAgIFNUQUNLX0FSR1MgaXMgaWdub3JlZC4KIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvdHlwZXMuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3R5cGVzLmMKaW5kZXggMGExMWViMC4uMGRlNTk5NCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvdHlwZXMuYworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy90eXBlcy5jCkBAIC00NCw2ICs0NCwxNyBAQAogICBpZCwgTlVMTAkJCQkJXAogfQogCisjZGVmaW5lIEZGSV9OT05DT05TVF9UWVBFREVGKG5hbWUsIHR5cGUsIGlkKQlcCitzdHJ1Y3Qgc3RydWN0X2FsaWduXyMjbmFtZSB7CQkJXAorICBjaGFyIGM7CQkJCQlcCisgIHR5cGUgeDsJCQkJCVwKK307CQkJCQkJXAorZmZpX3R5cGUgZmZpX3R5cGVfIyNuYW1lID0gewkJCVwKKyAgc2l6ZW9mKHR5cGUpLAkJCQkJXAorICBvZmZzZXRvZihzdHJ1Y3Qgc3RydWN0X2FsaWduXyMjbmFtZSwgeCksCVwKKyAgaWQsIE5VTEwJCQkJCVwKK30KKwogLyogU2l6ZSBhbmQgYWxpZ25tZW50IGFyZSBmYWtlIGhlcmUuIFRoZXkgbXVzdCBub3QgYmUgMC4gKi8KIGNvbnN0IGZmaV90eXBlIGZmaV90eXBlX3ZvaWQgPSB7CiAgIDEsIDEsIEZGSV9UWVBFX1ZPSUQsIE5VTEwKQEAgLTczLDUgKzg0LDkgQEAKICMgZW5kaWYKIGNvbnN0IGZmaV90eXBlIGZmaV90eXBlX2xvbmdkb3VibGUgPSB7IDE2LCAxNiwgNCwgTlVMTCB9OwogI2VsaWYgRkZJX1RZUEVfTE9OR0RPVUJMRSAhPSBGRklfVFlQRV9ET1VCTEUKKyMgaWYgSEFWRV9MT05HX0RPVUJMRV9WQVJJQU5UCitGRklfTk9OQ09OU1RfVFlQRURFRihsb25nZG91YmxlLCBsb25nIGRvdWJsZSwgRkZJX1RZUEVfTE9OR0RPVUJMRSk7CisjIGVsc2UKIEZGSV9UWVBFREVGKGxvbmdkb3VibGUsIGxvbmcgZG91YmxlLCBGRklfVFlQRV9MT05HRE9VQkxFKTsKKyMgZW5kaWYKICNlbmRpZgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvdmF4L2VsZmJzZC5TIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvdmF4L2VsZmJzZC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxY2EzMTMKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy92YXgvZWxmYnNkLlMKQEAgLTAsMCArMSwxOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTMgTWlvZHJhZyBWYWxsYXQuICA8bWlvZEBvcGVuYnNkLm9yZz4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKyAqIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICogYGBTb2Z0d2FyZScnKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisgKiBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKyAqIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICogCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZAorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKiAKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULAorICogVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUKKyAqIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICovCisKKy8qCisgKiB2YXggRm9yZWlnbiBGdW5jdGlvbiBJbnRlcmZhY2UKKyAqLworCisjZGVmaW5lIExJQkZGSV9BU00JCisjaW5jbHVkZSA8ZmZpY29uZmlnLmg+CisjaW5jbHVkZSA8ZmZpLmg+CisKKwkudGV4dAorCisvKgorICogdm9pZCAqCQkJCQklcjAKKyAqIGZmaV9jYWxsX2VsZmJzZChleHRlbmRlZF9jaWYgKmVjaWYsCQk0KCVhcCkKKyAqCQkgICB1bnNpZ25lZCBieXRlcywJCTgoJWFwKQorICoJCSAgIHVuc2lnbmVkIGZsYWdzLAkJMTIoJWFwKQorICoJCSAgIHZvaWQgKnJ2YWx1ZSwJCTE2KCVhcCkKKyAqCQkgICB2b2lkICgqZm4pKCkpOwkJMjAoJWFwKQorICovCisJLmdsb2JsCWZmaV9jYWxsX2VsZmJzZAorCS50eXBlCWZmaV9jYWxsX2VsZmJzZCxAZnVuY3Rpb24KKwkuYWxpZ24JMgorZmZpX2NhbGxfZWxmYnNkOgorCS53b3JkCTB4MDBjCQkjIHNhdmUgUjIgYW5kIFIzCisKKwkjIEFsbG9jYXRlIHN0YWNrIHNwYWNlIGZvciB0aGUgYXJncworCXN1YmwyCTgoJWFwKSwgJXNwCisKKwkjIENhbGwgZmZpX3ByZXBfYXJncworCXB1c2hsCSVzcAorCXB1c2hsCTQoJWFwKQorCWNhbGxzCSQyLCBmZmlfcHJlcF9hcmdzCisKKwkjIEdldCBmdW5jdGlvbiBwb2ludGVyCisJbW92bAkyMCglYXApLCAlcjEKKworCSMgQnVpbGQgYSBDQUxMUyBmcmFtZQorCWFzaGwJJC0yLCA4KCVhcCksICVyMAorCXB1c2hsCSVyMAkJIyBhcmd1bWVudCBzdGFjayB1c2FnZQorCW1vdmwJJXNwLCAlcjAJIyBmdXR1cmUgJWFwCisJIyBzYXZlZCByZWdpc3RlcnMKKwliYmMJJDExLCAwKCVyMSksIDFmCisJcHVzaGwJJXIxMQorMToJYmJjCSQxMCwgMCglcjEpLCAxZgorCXB1c2hsCSVyMTAKKzE6CWJiYwkkOSwgMCglcjEpLCAxZgorCXB1c2hsCSVyOQorMToJYmJjCSQ4LCAwKCVyMSksIDFmCisJcHVzaGwJJXI4CisxOgliYmMJJDcsIDAoJXIxKSwgMWYKKwlwdXNobAklcjcKKzE6CWJiYwkkNiwgMCglcjEpLCAxZgorCXB1c2hsCSVyNgorMToJYmJjCSQ1LCAwKCVyMSksIDFmCisJcHVzaGwJJXI1CisxOgliYmMJJDQsIDAoJXIxKSwgMWYKKwlwdXNobAklcjQKKzE6CWJiYwkkMywgMCglcjEpLCAxZgorCXB1c2hsCSVyMworMToJYmJjCSQyLCAwKCVyMSksIDFmCisJcHVzaGwJJXIyCisxOgkKKwlwdXNoYWwJOWYKKwlwdXNobAklZnAKKwlwdXNobAklYXAKKwltb3ZsCTE2KCVhcCksICVyMwkjIHN0cnVjdCByZXR1cm4gYWRkcmVzcywgaWYgbmVlZGVkCisJbW92bAklcjAsICVhcAorCW1vdnp3bAk0KCVmcCksICVyMAkjIHByZXZpb3VzIFBTVywgd2l0aG91dCB0aGUgc2F2ZWQgcmVnaXN0ZXJzIG1hc2sKKwliaXNsMgkkMHgyMDAwMDAwMCwgJXIwICMgY2FsbHMgZnJhbWUKKwltb3Z6d2wJMCglcjEpLCAlcjIKKwliaWN3MgkkMHhmMDAzLCAlcjIJIyBvbmx5IGtlZXAgUjExLVIyCisJYXNobAkkMTYsICVyMiwgJXIyCisJYmlzbDIJJXIyLCAlcjAJIyBzYXZlZCByZWdpc3RlciBtYXNrIG9mIHRoZSBjYWxsZWQgZnVuY3Rpb24KKwlwdXNobAklcjAJCisJcHVzaGwJJDAKKwltb3ZsCSVzcCwgJWZwCisKKwkjIEludm9rZSB0aGUgZnVuY3Rpb24KKwlwdXNoYWwJMiglcjEpCQkjIHNraXAgcHJvY2VkdXJlIGVudHJ5IG1hc2sKKwltb3ZsCSVyMywgJXIxCisJYmljcHN3CSQweDAwMGYKKwlyc2IKKworOToKKwkjIENvcHkgcmV0dXJuIHZhbHVlIGlmIG5lY2Vzc2FyeQorCXRzdGwJMTYoJWFwKQorCWplcWwJOWYKKwltb3ZsCTE2KCVhcCksICVyMgorCisJYmJjCSQwLCAxMiglYXApLCAxZgkjIENJRl9GTEFHU19DSEFSCisJbW92YgklcjAsIDAoJXIyKQorCWJyYgk5ZgorMToKKwliYmMJJDEsIDEyKCVhcCksIDFmCSMgQ0lGX0ZMQUdTX1NIT1JUCisJbW92dwklcjAsIDAoJXIyKQorCWJyYgk5ZgorMToKKwliYmMJJDIsIDEyKCVhcCksIDFmCSMgQ0lGX0ZMQUdTX0lOVAorCW1vdmwJJXIwLCAwKCVyMikKKwlicmIJOWYKKzE6CisJYmJjCSQzLCAxMiglYXApLCAxZgkjIENJRl9GTEFHU19ESU5UCisJbW92cQklcjAsIDAoJXIyKQorCWJyYgk5ZgorMToKKwltb3ZsCSVyMSwgJXIwCSMgbWlnaHQgaGF2ZSBiZWVuIGEgc3RydWN0CisJI2JyYgk5ZgorCis5OgorCXJldAorCisvKgorICogZmZpX2Nsb3N1cmVfZWxmYnNkKHZvaWQpOworICogaW52b2tlZCB3aXRoCSVyMDogZmZpX2Nsb3N1cmUgKmNsb3N1cmUKKyAqLworCS5nbG9ibAlmZmlfY2xvc3VyZV9lbGZic2QKKwkudHlwZQlmZmlfY2xvc3VyZV9lbGZic2QsIEBmdW5jdGlvbgorCS5hbGlnbgkyCitmZmlfY2xvc3VyZV9lbGZic2Q6CisJLndvcmQJMAorCisJIyBBbGxvY2F0ZSByb29tIG9uIHN0YWNrIGZvciByZXR1cm4gdmFsdWUKKwlzdWJsMgkkOCwgJXNwCisKKwkjIEludm9rZSB0aGUgY2xvc3VyZSBmdW5jdGlvbgorCXB1c2hhbAk0KCVhcCkJCSMgY2FsbGluZyBzdGFjaworCXB1c2hhbAk0KCVzcCkJCSMgcmV0dXJuIHZhbHVlCisJcHVzaGwJJXIwCQkjIGNsb3N1cmUKKwljYWxscwkkMywgZmZpX2Nsb3N1cmVfZWxmYnNkX2lubmVyCisKKwkjIENvcHkgcmV0dXJuIHZhbHVlIGlmIG5lY2Vzc2FyeQorCWJpdGIJJDEsICVyMAkJIyBDSUZfRkxBR1NfQ0hBUgorCWJlcWwJMWYKKwltb3ZiCTAoJXNwKSwgJXIwCisJYnJiCTlmCisxOgorCWJpdGIJJDIsICVyMAkJIyBDSUZfRkxBR1NfU0hPUlQKKwliZXFsCTFmCisJbW92dwkwKCVzcCksICVyMAorCWJyYgk5ZgorMToKKwliaXRiCSQ0LCAlcjAJCSMgQ0lGX0ZMQUdTX0lOVAorCWJlcWwJMWYKKwltb3ZsCTAoJXNwKSwgJXIwCisJYnJiCTlmCisxOgorCWJpdGIJJDgsICVyMAkJIyBDSUZfRkxBR1NfRElOVAorCWJlcWwJMWYKKwltb3ZxCTAoJXNwKSwgJXIwCisJI2JyYgk5ZgorMToKKworOToKKwlyZXQKKworLyoKKyAqIGZmaV9jbG9zdXJlX3N0cnVjdF9lbGZic2Qodm9pZCk7CisgKiBpbnZva2VkIHdpdGgJJXIwOiBmZmlfY2xvc3VyZSAqY2xvc3VyZQorICoJCSVyMTogc3RydWN0IHJldHVybiBhZGRyZXNzCisgKi8KKwkuZ2xvYmwJZmZpX2Nsb3N1cmVfc3RydWN0X2VsZmJzZAorCS50eXBlCWZmaV9jbG9zdXJlX3N0cnVjdF9lbGZic2QsIEBmdW5jdGlvbgorCS5hbGlnbgkyCitmZmlfY2xvc3VyZV9zdHJ1Y3RfZWxmYnNkOgorCS53b3JkCTAKKworCSMgSW52b2tlIHRoZSBjbG9zdXJlIGZ1bmN0aW9uCisJcHVzaGFsCTQoJWFwKQkJIyBjYWxsaW5nIHN0YWNrCisJcHVzaGwJJXIxCQkjIHJldHVybiB2YWx1ZQorCXB1c2hsCSVyMAkJIyBjbG9zdXJlCisJY2FsbHMJJDMsIGZmaV9jbG9zdXJlX2VsZmJzZF9pbm5lcgorCisJcmV0CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy92YXgvZmZpLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy92YXgvZmZpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRkNmJiYgotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3ZheC9mZmkuYwpAQCAtMCwwICsxLDI3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMyBNaW9kcmFnIFZhbGxhdC4gIDxtaW9kQG9wZW5ic2Qub3JnPgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworICogYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisgKiBgYFNvZnR3YXJlJycpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAqIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKiAKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqIAorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsCisgKiBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRQorICogU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKi8KKworLyoKKyAqIHZheCBGb3JlaWduIEZ1bmN0aW9uIEludGVyZmFjZQorICoKKyAqIFRoaXMgZmlsZSBhdHRlbXB0cyB0byBwcm92aWRlIGFsbCB0aGUgRkZJIGVudHJ5IHBvaW50cyB3aGljaCBjYW4gcmVsaWFibHkKKyAqIGJlIGltcGxlbWVudGVkIGluIEMuCisgKi8KKworI2luY2x1ZGUgPGZmaS5oPgorI2luY2x1ZGUgPGZmaV9jb21tb24uaD4KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjZGVmaW5lIENJRl9GTEFHU19DSEFSCQkxCS8qIGZvciBzdHJ1Y3Qgb25seSAqLworI2RlZmluZSBDSUZfRkxBR1NfU0hPUlQJCTIJLyogZm9yIHN0cnVjdCBvbmx5ICovCisjZGVmaW5lIENJRl9GTEFHU19JTlQJCTQKKyNkZWZpbmUgQ0lGX0ZMQUdTX0RJTlQJCTgKKworLyoKKyAqIEZvcmVpZ24gRnVuY3Rpb24gSW50ZXJmYWNlIEFQSQorICovCisKK3ZvaWQgZmZpX2NhbGxfZWxmYnNkIChleHRlbmRlZF9jaWYgKiwgdW5zaWduZWQsIHVuc2lnbmVkLCB2b2lkICosCisJCSAgICAgICB2b2lkICgqKSAoKSk7Cit2b2lkICpmZmlfcHJlcF9hcmdzIChleHRlbmRlZF9jaWYgKmVjaWYsIHZvaWQgKnN0YWNrKTsKKwordm9pZCAqCitmZmlfcHJlcF9hcmdzIChleHRlbmRlZF9jaWYgKmVjaWYsIHZvaWQgKnN0YWNrKQoreworICB1bnNpZ25lZCBpbnQgaTsKKyAgdm9pZCAqKnBfYXJndjsKKyAgY2hhciAqYXJncDsKKyAgZmZpX3R5cGUgKipwX2FyZzsKKyAgdm9pZCAqc3RydWN0X3ZhbHVlX3B0cjsKKworICBhcmdwID0gc3RhY2s7CisKKyAgaWYgKGVjaWYtPmNpZi0+cnR5cGUtPnR5cGUgPT0gRkZJX1RZUEVfU1RSVUNUCisgICAgICAmJiAhZWNpZi0+Y2lmLT5mbGFncykKKyAgICBzdHJ1Y3RfdmFsdWVfcHRyID0gZWNpZi0+cnZhbHVlOworICBlbHNlCisgICAgc3RydWN0X3ZhbHVlX3B0ciA9IE5VTEw7CisKKyAgcF9hcmd2ID0gZWNpZi0+YXZhbHVlOworCisgIGZvciAoaSA9IGVjaWYtPmNpZi0+bmFyZ3MsIHBfYXJnID0gZWNpZi0+Y2lmLT5hcmdfdHlwZXM7CisgICAgICAgaSAhPSAwOworICAgICAgIGktLSwgcF9hcmcrKykKKyAgICB7CisgICAgICBzaXplX3QgejsKKworICAgICAgeiA9ICgqcF9hcmcpLT5zaXplOworICAgICAgaWYgKHogPCBzaXplb2YgKGludCkpCisJeworCSAgc3dpdGNoICgoKnBfYXJnKS0+dHlwZSkKKwkgICAgeworCSAgICBjYXNlIEZGSV9UWVBFX1NJTlQ4OgorCSAgICAgICooc2lnbmVkIGludCAqKSBhcmdwID0gKHNpZ25lZCBpbnQpICooU0lOVDggKikgKnBfYXJndjsKKwkgICAgICBicmVhazsKKworCSAgICBjYXNlIEZGSV9UWVBFX1VJTlQ4OgorCSAgICAgICoodW5zaWduZWQgaW50ICopIGFyZ3AgPSAodW5zaWduZWQgaW50KSAqKFVJTlQ4ICopICpwX2FyZ3Y7CisJICAgICAgYnJlYWs7CisKKwkgICAgY2FzZSBGRklfVFlQRV9TSU5UMTY6CisJICAgICAgKihzaWduZWQgaW50ICopIGFyZ3AgPSAoc2lnbmVkIGludCkgKihTSU5UMTYgKikgKnBfYXJndjsKKwkgICAgICBicmVhazsKKworCSAgICBjYXNlIEZGSV9UWVBFX1VJTlQxNjoKKwkgICAgICAqKHVuc2lnbmVkIGludCAqKSBhcmdwID0gKHVuc2lnbmVkIGludCkgKihVSU5UMTYgKikgKnBfYXJndjsKKwkgICAgICBicmVhazsKKworCSAgICBjYXNlIEZGSV9UWVBFX1NUUlVDVDoKKwkgICAgICBtZW1jcHkgKGFyZ3AsICpwX2FyZ3YsIHopOworCSAgICAgIGJyZWFrOworCisJICAgIGRlZmF1bHQ6CisJICAgICAgRkZJX0FTU0VSVCAoMCk7CisJICAgIH0KKwkgIHogPSBzaXplb2YgKGludCk7CisJfQorICAgICAgZWxzZQorCXsKKwkgIG1lbWNweSAoYXJncCwgKnBfYXJndiwgeik7CisKKwkgIC8qIEFsaWduIGlmIG5lY2Vzc2FyeS4gICovCisJICBpZiAoKHNpemVvZihpbnQpIC0gMSkgJiB6KQorCSAgICB6ID0gQUxJR04oeiwgc2l6ZW9mKGludCkpOworCX0KKworICAgICAgcF9hcmd2Kys7CisgICAgICBhcmdwICs9IHo7CisgICAgfQorCisgIHJldHVybiBzdHJ1Y3RfdmFsdWVfcHRyOworfQorCitmZmlfc3RhdHVzCitmZmlfcHJlcF9jaWZfbWFjaGRlcCAoZmZpX2NpZiAqY2lmKQoreworICAvKiBTZXQgdGhlIHJldHVybiB0eXBlIGZsYWcgKi8KKyAgc3dpdGNoIChjaWYtPnJ0eXBlLT50eXBlKQorICAgIHsKKyAgICBjYXNlIEZGSV9UWVBFX1ZPSUQ6CisgICAgICBjaWYtPmZsYWdzID0gMDsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBGRklfVFlQRV9TVFJVQ1Q6CisgICAgICBpZiAoY2lmLT5ydHlwZS0+ZWxlbWVudHNbMF0tPnR5cGUgPT0gRkZJX1RZUEVfU1RSVUNUICYmCisJICBjaWYtPnJ0eXBlLT5lbGVtZW50c1sxXSkKKwl7CisJICBjaWYtPmZsYWdzID0gMDsKKwkgIGJyZWFrOworCX0KKworICAgICAgaWYgKGNpZi0+cnR5cGUtPnNpemUgPT0gc2l6ZW9mIChjaGFyKSkKKwljaWYtPmZsYWdzID0gQ0lGX0ZMQUdTX0NIQVI7CisgICAgICBlbHNlIGlmIChjaWYtPnJ0eXBlLT5zaXplID09IHNpemVvZiAoc2hvcnQpKQorCWNpZi0+ZmxhZ3MgPSBDSUZfRkxBR1NfU0hPUlQ7CisgICAgICBlbHNlIGlmIChjaWYtPnJ0eXBlLT5zaXplID09IHNpemVvZiAoaW50KSkKKwljaWYtPmZsYWdzID0gQ0lGX0ZMQUdTX0lOVDsKKyAgICAgIGVsc2UgaWYgKGNpZi0+cnR5cGUtPnNpemUgPT0gMiAqIHNpemVvZiAoaW50KSkKKwljaWYtPmZsYWdzID0gQ0lGX0ZMQUdTX0RJTlQ7CisgICAgICBlbHNlCisJY2lmLT5mbGFncyA9IDA7CisgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICBpZiAoY2lmLT5ydHlwZS0+c2l6ZSA8PSBzaXplb2YgKGludCkpCisJY2lmLT5mbGFncyA9IENJRl9GTEFHU19JTlQ7CisgICAgICBlbHNlCisJY2lmLT5mbGFncyA9IENJRl9GTEFHU19ESU5UOworICAgICAgYnJlYWs7CisgICAgfQorCisgIHJldHVybiBGRklfT0s7Cit9CisKK3ZvaWQKK2ZmaV9jYWxsIChmZmlfY2lmICpjaWYsIHZvaWQgKCpmbikgKCksIHZvaWQgKnJ2YWx1ZSwgdm9pZCAqKmF2YWx1ZSkKK3sKKyAgZXh0ZW5kZWRfY2lmIGVjaWY7CisKKyAgZWNpZi5jaWYgPSBjaWY7CisgIGVjaWYuYXZhbHVlID0gYXZhbHVlOworCisgIC8qIElmIHRoZSByZXR1cm4gdmFsdWUgaXMgYSBzdHJ1Y3QgYW5kIHdlIGRvbid0IGhhdmUgYSByZXR1cm4gdmFsdWUKKyAgICAgYWRkcmVzcyB0aGVuIHdlIG5lZWQgdG8gbWFrZSBvbmUuICAqLworCisgIGlmIChydmFsdWUgPT0gTlVMTAorICAgICAgJiYgY2lmLT5ydHlwZS0+dHlwZSA9PSBGRklfVFlQRV9TVFJVQ1QKKyAgICAgICYmIGNpZi0+ZmxhZ3MgPT0gMCkKKyAgICBlY2lmLnJ2YWx1ZSA9IGFsbG9jYSAoY2lmLT5ydHlwZS0+c2l6ZSk7CisgIGVsc2UKKyAgICBlY2lmLnJ2YWx1ZSA9IHJ2YWx1ZTsKKworICBzd2l0Y2ggKGNpZi0+YWJpKQorICAgIHsKKyAgICBjYXNlIEZGSV9FTEZCU0Q6CisgICAgICBmZmlfY2FsbF9lbGZic2QgKCZlY2lmLCBjaWYtPmJ5dGVzLCBjaWYtPmZsYWdzLCBlY2lmLnJ2YWx1ZSwgZm4pOworICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgRkZJX0FTU0VSVCAoMCk7CisgICAgICBicmVhazsKKyAgICB9Cit9CisKKy8qCisgKiBDbG9zdXJlIEFQSQorICovCisKK3ZvaWQgZmZpX2Nsb3N1cmVfZWxmYnNkICh2b2lkKTsKK3ZvaWQgZmZpX2Nsb3N1cmVfc3RydWN0X2VsZmJzZCAodm9pZCk7Cit1bnNpZ25lZCBpbnQgZmZpX2Nsb3N1cmVfZWxmYnNkX2lubmVyIChmZmlfY2xvc3VyZSAqLCB2b2lkICosIGNoYXIgKik7CisKK3N0YXRpYyB2b2lkCitmZmlfcHJlcF9jbG9zdXJlX2VsZmJzZCAoZmZpX2NpZiAqY2lmLCB2b2lkICoqYXZhbHVlLCBjaGFyICpzdGFja3ApCit7CisgIHVuc2lnbmVkIGludCBpOworICB2b2lkICoqcF9hcmd2OworICBmZmlfdHlwZSAqKnBfYXJnOworCisgIHBfYXJndiA9IGF2YWx1ZTsKKworICBmb3IgKGkgPSBjaWYtPm5hcmdzLCBwX2FyZyA9IGNpZi0+YXJnX3R5cGVzOyBpICE9IDA7IGktLSwgcF9hcmcrKykKKyAgICB7CisgICAgICBzaXplX3QgejsKKworICAgICAgeiA9ICgqcF9hcmcpLT5zaXplOworICAgICAgKnBfYXJndiA9IHN0YWNrcDsKKworICAgICAgLyogQWxpZ24gaWYgbmVjZXNzYXJ5ICovCisgICAgICBpZiAoKHNpemVvZiAoaW50KSAtIDEpICYgeikKKwl6ID0gQUxJR04oeiwgc2l6ZW9mIChpbnQpKTsKKworICAgICAgcF9hcmd2Kys7CisgICAgICBzdGFja3AgKz0gejsKKyAgICB9Cit9CisKK3Vuc2lnbmVkIGludAorZmZpX2Nsb3N1cmVfZWxmYnNkX2lubmVyIChmZmlfY2xvc3VyZSAqY2xvc3VyZSwgdm9pZCAqcmVzcCwgY2hhciAqc3RhY2spCit7CisgIGZmaV9jaWYgKmNpZjsKKyAgdm9pZCAqKmFyZ19hcmVhOworCisgIGNpZiA9IGNsb3N1cmUtPmNpZjsKKyAgYXJnX2FyZWEgPSAodm9pZCAqKikgYWxsb2NhIChjaWYtPm5hcmdzICogc2l6ZW9mICh2b2lkICopKTsKKworICBmZmlfcHJlcF9jbG9zdXJlX2VsZmJzZCAoY2lmLCBhcmdfYXJlYSwgc3RhY2spOworCisgIChjbG9zdXJlLT5mdW4pIChjaWYsIHJlc3AsIGFyZ19hcmVhLCBjbG9zdXJlLT51c2VyX2RhdGEpOworCisgIHJldHVybiBjaWYtPmZsYWdzOworfQorCitmZmlfc3RhdHVzCitmZmlfcHJlcF9jbG9zdXJlX2xvYyAoZmZpX2Nsb3N1cmUgKmNsb3N1cmUsIGZmaV9jaWYgKmNpZiwKKwkJICAgICAgdm9pZCAoKmZ1bikoZmZpX2NpZiAqLCB2b2lkICosIHZvaWQgKiosIHZvaWQgKiksCisJCSAgICAgIHZvaWQgKnVzZXJfZGF0YSwgdm9pZCAqY29kZWxvYykKK3sKKyAgY2hhciAqdHJhbXAgPSAoY2hhciAqKSBjb2RlbG9jOworICB2b2lkICpmbjsKKworICBGRklfQVNTRVJUIChjaWYtPmFiaSA9PSBGRklfRUxGQlNEKTsKKworICAvKiBlbnRyeSBtYXNrICovCisgICoodW5zaWduZWQgc2hvcnQgKikodHJhbXAgKyAwKSA9IDB4MDAwMDsKKyAgLyogbW92bCAjY2xvc3VyZSwgcjAgKi8KKyAgdHJhbXBbMl0gPSAweGQwOworICB0cmFtcFszXSA9IDB4OGY7CisgICoodW5zaWduZWQgaW50ICopKHRyYW1wICsgNCkgPSAodW5zaWduZWQgaW50KSBjbG9zdXJlOworICB0cmFtcFs4XSA9IDB4NTA7CisKKyAgaWYgKGNpZi0+cnR5cGUtPnR5cGUgPT0gRkZJX1RZUEVfU1RSVUNUCisgICAgICAmJiAhY2lmLT5mbGFncykKKyAgICBmbiA9ICZmZmlfY2xvc3VyZV9zdHJ1Y3RfZWxmYnNkOworICBlbHNlCisgICAgZm4gPSAmZmZpX2Nsb3N1cmVfZWxmYnNkOworCisgIC8qIGptcGwgI2ZuICovCisgIHRyYW1wWzldID0gMHgxNzsKKyAgdHJhbXBbMTBdID0gMHhlZjsKKyAgKih1bnNpZ25lZCBpbnQgKikodHJhbXAgKyAxMSkgPSAodW5zaWduZWQgaW50KWZuICsgMiAtCisJCQkJICAodW5zaWduZWQgaW50KXRyYW1wIC0gOSAtIDY7CisKKyAgY2xvc3VyZS0+Y2lmID0gY2lmOworICBjbG9zdXJlLT51c2VyX2RhdGEgPSB1c2VyX2RhdGE7CisgIGNsb3N1cmUtPmZ1biA9IGZ1bjsKKworICByZXR1cm4gRkZJX09LOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvdmF4L2ZmaXRhcmdldC5oIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvdmF4L2ZmaXRhcmdldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmYzk0ODgKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy92YXgvZmZpdGFyZ2V0LmgKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMyBNaW9kcmFnIFZhbGxhdC4gIDxtaW9kQG9wZW5ic2Qub3JnPgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworICogYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisgKiBgYFNvZnR3YXJlJycpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAqIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKiAKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqIAorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsCisgKiBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRQorICogU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKi8KKworLyoKKyAqIHZheCBGb3JlaWduIEZ1bmN0aW9uIEludGVyZmFjZQorICovCisKKyNpZm5kZWYgTElCRkZJX1RBUkdFVF9ICisjZGVmaW5lIExJQkZGSV9UQVJHRVRfSAorCisjaWZuZGVmIExJQkZGSV9BU00KK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBmZmlfYXJnOwordHlwZWRlZiBzaWduZWQgbG9uZyBmZmlfc2FyZzsKKwordHlwZWRlZiBlbnVtIGZmaV9hYmkgeworICBGRklfRklSU1RfQUJJID0gMCwKKyAgRkZJX0VMRkJTRCwKKyAgRkZJX0RFRkFVTFRfQUJJID0gRkZJX0VMRkJTRCwKKyAgRkZJX0xBU1RfQUJJID0gRkZJX0RFRkFVTFRfQUJJICsgMQorfSBmZmlfYWJpOworI2VuZGlmCisKKy8qIC0tLS0gRGVmaW5pdGlvbnMgZm9yIGNsb3N1cmVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgRkZJX0NMT1NVUkVTIDEKKyNkZWZpbmUgRkZJX1RSQU1QT0xJTkVfU0laRSAxNQorI2RlZmluZSBGRklfTkFUSVZFX1JBV19BUEkgMAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3g4Ni9kYXJ3aW42NC5TIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMveDg2L2RhcndpbjY0LlMKaW5kZXggMmY3Mzk0ZS4uMGM3MmVkMiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMveDg2L2RhcndpbjY0LlMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMveDg2L2RhcndpbjY0LlMKQEAgLTM1MCw3ICszNTAsNyBAQAogCS5zZXQJTCRzZXQkMyxMVVcxLUxVVzAKIAkubG9uZwlMJHNldCQzCiAKLQkvKiBOZXcgc3RhY2sgZnJhbWUgYmFzZWQgb2ZmIHJicC4gIFRoaXMgaXMgYSBpdHR5IGJpdCBvZiB1bndpbmQKKwkvKiBOZXcgc3RhY2sgZnJhbWUgYmFzZWQgb2ZmIHJicC4gIFRoaXMgaXMgYW4gaXR0eSBiaXQgb2YgdW53aW5kCiAJICAgdHJpY2tlcnkgaW4gdGhhdCB0aGUgQ0ZBICpoYXMqIGNoYW5nZWQuICBUaGVyZSBpcyBubyBlYXN5IHdheQogCSAgIHRvIGRlc2NyaWJlIGl0IGNvcnJlY3RseSBvbiBlbnRyeSB0byB0aGUgZnVuY3Rpb24uICBGb3J0dW5hdGVseSwKIAkgICBpdCBkb2Vzbid0IG1hdHRlciB0b28gbXVjaCBzaW5jZSBhdCBhbGwgcG9pbnRzIHdlIGNhbiBjb3JyZWN0bHkKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3g4Ni9mZmkuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3g4Ni9mZmkuYwppbmRleCAwNjAwNDE0Li5kYmY5YzhlIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy94ODYvZmZpLmMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMveDg2L2ZmaS5jCkBAIC0zOSwxNiArMzksMTggQEAKIAogI2luY2x1ZGUgPHN0ZGxpYi5oPgogCisKIC8qIGZmaV9wcmVwX2FyZ3MgaXMgY2FsbGVkIGJ5IHRoZSBhc3NlbWJseSByb3V0aW5lIG9uY2Ugc3RhY2sgc3BhY2UKICAgIGhhcyBiZWVuIGFsbG9jYXRlZCBmb3IgdGhlIGZ1bmN0aW9uJ3MgYXJndW1lbnRzICovCiAKK3ZvaWQgZmZpX3ByZXBfYXJncyhjaGFyICpzdGFjaywgZXh0ZW5kZWRfY2lmICplY2lmKTsKIHZvaWQgZmZpX3ByZXBfYXJncyhjaGFyICpzdGFjaywgZXh0ZW5kZWRfY2lmICplY2lmKQogewogICByZWdpc3RlciB1bnNpZ25lZCBpbnQgaTsKICAgcmVnaXN0ZXIgdm9pZCAqKnBfYXJndjsKICAgcmVnaXN0ZXIgY2hhciAqYXJncDsKICAgcmVnaXN0ZXIgZmZpX3R5cGUgKipwX2FyZzsKLSNpZmRlZiBYODZfV0lOMzIKKyNpZm5kZWYgWDg2X1dJTjY0CiAgIHNpemVfdCBwX3N0YWNrX2FyZ3NbMl07CiAgIHZvaWQgKnBfc3RhY2tfZGF0YVsyXTsKICAgY2hhciAqYXJncDIgPSBzdGFjazsKQEAgLTY3LDcgKzY5LDcgQEAKICAgICAgICkKICAgICB7CiAgICAgICAqKHZvaWQgKiopIGFyZ3AgPSBlY2lmLT5ydmFsdWU7Ci0jaWZkZWYgWDg2X1dJTjMyCisjaWZuZGVmIFg4Nl9XSU42NAogICAgICAgLyogRm9yIGZhc3RjYWxsL3RoaXNjYWxsIHRoaXMgaXMgZmlyc3QgcmVnaXN0ZXItcGFzc2VkCiAgICAgICAgICBhcmd1bWVudC4gICovCiAgICAgICBpZiAoY2FiaSA9PSBGRklfVEhJU0NBTEwgfHwgY2FiaSA9PSBGRklfRkFTVENBTEwpCkBAIC0xNTMsNyArMTU1LDcgQEAKICAgICAgICAgICBtZW1jcHkoYXJncCwgKnBfYXJndiwgeik7CiAgICAgICAgIH0KIAotI2lmZGVmIFg4Nl9XSU4zMgorI2lmbmRlZiBYODZfV0lONjQKICAgICAvKiBGb3IgdGhpc2NhbGwvZmFzdGNhbGwgY29udmVudGlvbiByZWdpc3Rlci1wYXNzZWQgYXJndW1lbnRzCiAgICAgICAgYXJlIHRoZSBmaXJzdCB0d28gbm9uZS1mbG9hdGluZy1wb2ludCBhcmd1bWVudHMgd2l0aCBhIHNpemUKICAgICAgICBzbWFsbGVyIG9yIGVxdWFsIHRvIHNpemVvZiAodm9pZCopLiAgKi8KQEAgLTE3OCw3ICsxODAsNyBAQAogI2VuZGlmCiAgICAgfQogCi0jaWZkZWYgWDg2X1dJTjMyCisjaWZuZGVmIFg4Nl9XSU42NAogICAvKiBXZSBuZWVkIHRvIG1vdmUgdGhlIHJlZ2lzdGVyLXBhc3NlZCBhcmd1bWVudHMgZm9yIHRoaXNjYWxsL2Zhc3RjYWxsCiAgICAgIG9uIHRvcCBvZiBzdGFjaywgc28gdGhhdCB0aG9zZSBjYW4gYmUgbW92ZWQgdG8gcmVnaXN0ZXJzIGVjeC9lZHggYnkKICAgICAgY2FsbC1oYW5kbGVyLiAgKi8KQEAgLTMwNyw3ICszMDksNyBAQAogICAgIHsKICAgICAgIGlmICgoKCpwdHIpLT5hbGlnbm1lbnQgLSAxKSAmIGNpZi0+Ynl0ZXMpCiAgICAgICAgIGNpZi0+Ynl0ZXMgPSBBTElHTihjaWYtPmJ5dGVzLCAoKnB0ciktPmFsaWdubWVudCk7Ci0gICAgICBjaWYtPmJ5dGVzICs9IEFMSUdOKCgqcHRyKS0+c2l6ZSwgRkZJX1NJWkVPRl9BUkcpOworICAgICAgY2lmLT5ieXRlcyArPSAodW5zaWduZWQpQUxJR04oKCpwdHIpLT5zaXplLCBGRklfU0laRU9GX0FSRyk7CiAgICAgfQogCiAjaWZkZWYgWDg2X1dJTjY0CkBAIC0zMTUsNyArMzE3LDEyIEBACiAgIGNpZi0+Ynl0ZXMgKz0gNCAqIHNpemVvZihmZmlfYXJnKTsKICNlbmRpZgogCi0gIGNpZi0+Ynl0ZXMgPSAoY2lmLT5ieXRlcyArIDE1KSAmIH4weEY7CisjaWZuZGVmIFg4Nl9XSU4zMgorI2lmbmRlZiBYODZfV0lONjQKKyAgaWYgKGNpZi0+YWJpICE9IEZGSV9TVERDQUxMICYmIGNpZi0+YWJpICE9IEZGSV9USElTQ0FMTCAmJiBjaWYtPmFiaSAhPSBGRklfRkFTVENBTEwpCisjZW5kaWYKKyAgICBjaWYtPmJ5dGVzID0gKGNpZi0+Ynl0ZXMgKyAxNSkgJiB+MHhGOworI2VuZGlmCiAKICAgcmV0dXJuIEZGSV9PSzsKIH0KQEAgLTM3Miw4ICszNzksOCBAQAogICAgICAgYnJlYWs7CiAjZWxpZiBkZWZpbmVkKFg4Nl9XSU4zMikKICAgICBjYXNlIEZGSV9TWVNWOgotICAgIGNhc2UgRkZJX1NURENBTEw6CiAgICAgY2FzZSBGRklfTVNfQ0RFQ0w6CisgICAgY2FzZSBGRklfU1REQ0FMTDoKICAgICAgIGZmaV9jYWxsX3dpbjMyKGZmaV9wcmVwX2FyZ3MsICZlY2lmLCBjaWYtPmFiaSwgY2lmLT5ieXRlcywgY2lmLT5mbGFncywKIAkJICAgICBlY2lmLnJ2YWx1ZSwgZm4pOwogICAgICAgYnJlYWs7CkBAIC00MzQsMTIgKzQ0MSwxNSBAQAogI2lmZGVmIFg4Nl9XSU4zMgogdm9pZCBGRklfSElEREVOIGZmaV9jbG9zdXJlX3Jhd19USElTQ0FMTCAoZmZpX3Jhd19jbG9zdXJlICopCiAgICAgIF9fYXR0cmlidXRlX18gKChyZWdwYXJtKDEpKSk7CisjZW5kaWYKKyNpZm5kZWYgWDg2X1dJTjY0CiB2b2lkIEZGSV9ISURERU4gZmZpX2Nsb3N1cmVfU1REQ0FMTCAoZmZpX2Nsb3N1cmUgKikKICAgICAgX19hdHRyaWJ1dGVfXyAoKHJlZ3Bhcm0oMSkpKTsKIHZvaWQgRkZJX0hJRERFTiBmZmlfY2xvc3VyZV9USElTQ0FMTCAoZmZpX2Nsb3N1cmUgKikKICAgICAgX19hdHRyaWJ1dGVfXyAoKHJlZ3Bhcm0oMSkpKTsKLSNlbmRpZgotI2lmZGVmIFg4Nl9XSU42NAordm9pZCBGRklfSElEREVOIGZmaV9jbG9zdXJlX0ZBU1RDQUxMIChmZmlfY2xvc3VyZSAqKQorICAgICBfX2F0dHJpYnV0ZV9fICgocmVncGFybSgxKSkpOworI2Vsc2UKIHZvaWQgRkZJX0hJRERFTiBmZmlfY2xvc3VyZV93aW42NCAoZmZpX2Nsb3N1cmUgKik7CiAjZW5kaWYKIApAQCAtNTk4LDcgKzYwOCw3IEBACiAgICAqKHVuc2lnbmVkIGludCopICAmX190cmFtcFs2XSA9IF9fZGlzOyAvKiBqbXAgX19mdW4gICovIFwKICB9CiAKLSNkZWZpbmUgRkZJX0lOSVRfVFJBTVBPTElORV9USElTQ0FMTChUUkFNUCxGVU4sQ1RYLFNJWkUpIFwKKyNkZWZpbmUgRkZJX0lOSVRfVFJBTVBPTElORV9SQVdfVEhJU0NBTEwoVFJBTVAsRlVOLENUWCxTSVpFKSBcCiB7IHVuc2lnbmVkIGNoYXIgKl9fdHJhbXAgPSAodW5zaWduZWQgY2hhciopKFRSQU1QKTsgXAogICAgdW5zaWduZWQgaW50ICBfX2Z1biA9ICh1bnNpZ25lZCBpbnQpKEZVTik7IFwKICAgIHVuc2lnbmVkIGludCAgX19jdHggPSAodW5zaWduZWQgaW50KShDVFgpOyBcCkBAIC02MjUsMTggKzYzNSwxNSBAQAogICAgKih1bnNpZ25lZCBzaG9ydCopICAmX190cmFtcFs1MF0gPSAoX19zaXplICsgOCk7IC8qIHJldCAoX19zaXplICsgOCkgICovIFwKICB9CiAKLSNkZWZpbmUgRkZJX0lOSVRfVFJBTVBPTElORV9TVERDQUxMKFRSQU1QLEZVTixDVFgsU0laRSkgIFwKKyNkZWZpbmUgRkZJX0lOSVRfVFJBTVBPTElORV9TVERDQUxMKFRSQU1QLEZVTixDVFgpICBcCiB7IHVuc2lnbmVkIGNoYXIgKl9fdHJhbXAgPSAodW5zaWduZWQgY2hhciopKFRSQU1QKTsgXAogICAgdW5zaWduZWQgaW50ICBfX2Z1biA9ICh1bnNpZ25lZCBpbnQpKEZVTik7IFwKICAgIHVuc2lnbmVkIGludCAgX19jdHggPSAodW5zaWduZWQgaW50KShDVFgpOyBcCiAgICB1bnNpZ25lZCBpbnQgIF9fZGlzID0gX19mdW4gLSAoX19jdHggKyAxMCk7IFwKLSAgIHVuc2lnbmVkIHNob3J0IF9fc2l6ZSA9ICh1bnNpZ25lZCBzaG9ydCkoU0laRSk7IFwKICAgICoodW5zaWduZWQgY2hhciopICZfX3RyYW1wWzBdID0gMHhiODsgXAogICAgKih1bnNpZ25lZCBpbnQqKSAgJl9fdHJhbXBbMV0gPSBfX2N0eDsgLyogbW92bCBfX2N0eCwgJWVheCAqLyBcCiAgICAqKHVuc2lnbmVkIGNoYXIgKikgICZfX3RyYW1wWzVdID0gMHhlODsgXAogICAgKih1bnNpZ25lZCBpbnQqKSAgJl9fdHJhbXBbNl0gPSBfX2RpczsgLyogY2FsbCBfX2Z1biAgKi8gXAotICAgKih1bnNpZ25lZCBjaGFyICopICAmX190cmFtcFsxMF0gPSAweGMyOyBcCi0gICAqKHVuc2lnbmVkIHNob3J0KikgICZfX3RyYW1wWzExXSA9IF9fc2l6ZTsgLyogcmV0IF9fc2l6ZSAgKi8gXAogIH0KIAogLyogdGhlIGNpZiBtdXN0IGFscmVhZHkgYmUgcHJlcCdlZCAqLwpAQCAtNjY2LDIwICs2NzMsMjUgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmZmlfY2xvc3VyZV9TWVNWLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKWNvZGVsb2MpOwogICAgIH0KLSNpZmRlZiBYODZfV0lOMzIKKyAgZWxzZSBpZiAoY2lmLT5hYmkgPT0gRkZJX0ZBU1RDQUxMKQorICAgIHsKKyAgICAgIEZGSV9JTklUX1RSQU1QT0xJTkVfU1REQ0FMTCAoJmNsb3N1cmUtPnRyYW1wWzBdLAorCQkJCSAgICZmZmlfY2xvc3VyZV9GQVNUQ0FMTCwKKwkJCQkgICAodm9pZCopY29kZWxvYyk7CisgICAgfQogICBlbHNlIGlmIChjaWYtPmFiaSA9PSBGRklfVEhJU0NBTEwpCiAgICAgewotICAgICAgRkZJX0lOSVRfVFJBTVBPTElORV9USElTQ0FMTCAoJmNsb3N1cmUtPnRyYW1wWzBdLAotCQkJCSAgICAmZmZpX2Nsb3N1cmVfVEhJU0NBTEwsCi0JCQkJICAgICh2b2lkKiljb2RlbG9jLAotCQkJCSAgICBjaWYtPmJ5dGVzKTsKKyAgICAgIEZGSV9JTklUX1RSQU1QT0xJTkVfU1REQ0FMTCAoJmNsb3N1cmUtPnRyYW1wWzBdLAorCQkJCSAgICZmZmlfY2xvc3VyZV9USElTQ0FMTCwKKwkJCQkgICAodm9pZCopY29kZWxvYyk7CiAgICAgfQogICBlbHNlIGlmIChjaWYtPmFiaSA9PSBGRklfU1REQ0FMTCkKICAgICB7CiAgICAgICBGRklfSU5JVF9UUkFNUE9MSU5FX1NURENBTEwgKCZjbG9zdXJlLT50cmFtcFswXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZmaV9jbG9zdXJlX1NURENBTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiljb2RlbG9jLCBjaWYtPmJ5dGVzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKWNvZGVsb2MpOwogICAgIH0KKyNpZmRlZiBYODZfV0lOMzIKICAgZWxzZSBpZiAoY2lmLT5hYmkgPT0gRkZJX01TX0NERUNMKQogICAgIHsKICAgICAgIEZGSV9JTklUX1RSQU1QT0xJTkUgKCZjbG9zdXJlLT50cmFtcFswXSwKQEAgLTcxMywxMiArNzI1LDEyIEBACiB7CiAgIGludCBpOwogCi0gIGlmIChjaWYtPmFiaSAhPSBGRklfU1lTVikgeworICBpZiAoY2lmLT5hYmkgIT0gRkZJX1NZU1YKICNpZmRlZiBYODZfV0lOMzIKLSAgICBpZiAoY2lmLT5hYmkgIT0gRkZJX1RISVNDQUxMKQorICAgICAgJiYgY2lmLT5hYmkgIT0gRkZJX1RISVNDQUxMCiAjZW5kaWYKKyAgICAgKQogICAgIHJldHVybiBGRklfQkFEX0FCSTsKLSAgfQogCiAgIC8qIHdlIGN1cnJlbnRseSBkb24ndCBzdXBwb3J0IGNlcnRhaW4ga2luZHMgb2YgYXJndW1lbnRzIGZvciByYXcKICAgICAgY2xvc3VyZXMuICBUaGlzIHNob3VsZCBiZSBpbXBsZW1lbnRlZCBieSBhIHNlcGFyYXRlIGFzc2VtYmx5CkBAIC03NDEsOCArNzUzLDcgQEAKICAgICB9CiAgIGVsc2UgaWYgKGNpZi0+YWJpID09IEZGSV9USElTQ0FMTCkKICAgICB7Ci0gICAgICBGRklfSU5JVF9UUkFNUE9MSU5FX1RISVNDQUxMICgmY2xvc3VyZS0+dHJhbXBbMF0sICZmZmlfY2xvc3VyZV9yYXdfVEhJU0NBTEwsCi0JCQkJICAgIGNvZGVsb2MsIGNpZi0+Ynl0ZXMpOworICAgICAgRkZJX0lOSVRfVFJBTVBPTElORV9SQVdfVEhJU0NBTEwgKCZjbG9zdXJlLT50cmFtcFswXSwgJmZmaV9jbG9zdXJlX3Jhd19USElTQ0FMTCwgY29kZWxvYywgY2lmLT5ieXRlcyk7CiAgICAgfQogI2VuZGlmCiAgIGNsb3N1cmUtPmNpZiAgPSBjaWY7CkBAIC03NzUsMjIgKzc4NiwzNyBAQAogICAvKiBJZiB0aGUgcmV0dXJuIHZhbHVlIGlzIGEgc3RydWN0IGFuZCB3ZSBkb24ndCBoYXZlIGEgcmV0dXJuICovCiAgIC8qIHZhbHVlIGFkZHJlc3MgdGhlbiB3ZSBuZWVkIHRvIG1ha2Ugb25lICAgICAgICAgICAgICAgICAgICAgKi8KIAorI2lmZGVmIFg4Nl9XSU42NAorICBpZiAocnZhbHVlID09IE5VTEwKKyAgICAgICYmIGNpZi0+ZmxhZ3MgPT0gRkZJX1RZUEVfU1RSVUNUCisgICAgICAmJiBjaWYtPnJ0eXBlLT5zaXplICE9IDEgJiYgY2lmLT5ydHlwZS0+c2l6ZSAhPSAyCisgICAgICAmJiBjaWYtPnJ0eXBlLT5zaXplICE9IDQgJiYgY2lmLT5ydHlwZS0+c2l6ZSAhPSA4KQorICAgIHsKKyAgICAgIGVjaWYucnZhbHVlID0gYWxsb2NhKChjaWYtPnJ0eXBlLT5zaXplICsgMHhGKSAmIH4weEYpOworICAgIH0KKyNlbHNlCiAgIGlmIChydmFsdWUgPT0gTlVMTAogICAgICAgJiYgKGNpZi0+ZmxhZ3MgPT0gRkZJX1RZUEVfU1RSVUNUCiAgICAgICAgICAgfHwgY2lmLT5mbGFncyA9PSBGRklfVFlQRV9NU19TVFJVQ1QpKQogICAgIHsKICAgICAgIGVjaWYucnZhbHVlID0gYWxsb2NhKGNpZi0+cnR5cGUtPnNpemUpOwogICAgIH0KKyNlbmRpZgogICBlbHNlCiAgICAgZWNpZi5ydmFsdWUgPSBydmFsdWU7CiAgICAgCiAgIAogICBzd2l0Y2ggKGNpZi0+YWJpKSAKICAgICB7Ci0jaWZkZWYgWDg2X1dJTjMyCisjaWZkZWYgWDg2X1dJTjY0CisgICAgY2FzZSBGRklfV0lONjQ6CisgICAgICBmZmlfY2FsbF93aW42NChmZmlfcHJlcF9hcmdzX3JhdywgJmVjaWYsIGNpZi0+Ynl0ZXMsCisgICAgICAgICAgICAgICAgICAgICBjaWYtPmZsYWdzLCBlY2lmLnJ2YWx1ZSwgZm4pOworICAgICAgYnJlYWs7CisjZWxpZiBkZWZpbmVkKFg4Nl9XSU4zMikKICAgICBjYXNlIEZGSV9TWVNWOgotICAgIGNhc2UgRkZJX1NURENBTEw6CiAgICAgY2FzZSBGRklfTVNfQ0RFQ0w6CisgICAgY2FzZSBGRklfU1REQ0FMTDoKICAgICAgIGZmaV9jYWxsX3dpbjMyKGZmaV9wcmVwX2FyZ3NfcmF3LCAmZWNpZiwgY2lmLT5hYmksIGNpZi0+Ynl0ZXMsIGNpZi0+ZmxhZ3MsCiAJCSAgICAgZWNpZi5ydmFsdWUsIGZuKTsKICAgICAgIGJyZWFrOwpAQCAtODE2LDE3ICs4NDIsMTcgQEAKIAkgICAgKytwYXNzZWRfcmVnczsKIAkgIH0KIAlpZiAocGFzc2VkX3JlZ3MgPCAyICYmIGFiaSA9PSBGRklfRkFTVENBTEwpCi0JICBjaWYtPmFiaSA9IGFiaSA9IEZGSV9USElTQ0FMTDsKKwkgIGFiaSA9IEZGSV9USElTQ0FMTDsKIAlpZiAocGFzc2VkX3JlZ3MgPCAxICYmIGFiaSA9PSBGRklfVEhJU0NBTEwpCi0JICBjaWYtPmFiaSA9IGFiaSA9IEZGSV9TVERDQUxMOworCSAgYWJpID0gRkZJX1NURENBTEw7CiAgICAgICAgIGZmaV9jYWxsX3dpbjMyKGZmaV9wcmVwX2FyZ3NfcmF3LCAmZWNpZiwgYWJpLCBjaWYtPmJ5dGVzLCBjaWYtPmZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICBlY2lmLnJ2YWx1ZSwgZm4pOwogICAgICAgfQogICAgICAgYnJlYWs7CiAjZWxzZQogICAgIGNhc2UgRkZJX1NZU1Y6Ci0gICAgICBmZmlfY2FsbF9TWVNWKGZmaV9wcmVwX2FyZ3NfcmF3LCAmZWNpZiwgY2lmLT5ieXRlcywgY2lmLT5mbGFncywKLSAgICAgICAgICAgICAgICAgICAgZWNpZi5ydmFsdWUsIGZuKTsKKyAgICAgIGZmaV9jYWxsX1NZU1YoZmZpX3ByZXBfYXJnc19yYXcsICZlY2lmLCBjaWYtPmJ5dGVzLCBjaWYtPmZsYWdzLCBlY2lmLnJ2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgZm4pOwogICAgICAgYnJlYWs7CiAjZW5kaWYKICAgICBkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMveDg2L2ZmaTY0LmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy94ODYvZmZpNjQuYwppbmRleCAyMDE0YWYyLi41YTVlMDQzIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy94ODYvZmZpNjQuYworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy94ODYvZmZpNjQuYwpAQCAtMyw4ICszLDggQEAKICAgICAgICAgICAgICBDb3B5cmlnaHQgKGMpIDIwMTEgIEFudGhvbnkgR3JlZW4KICAgICAgICAgICAgICBDb3B5cmlnaHQgKGMpIDIwMDgsIDIwMTAgIFJlZCBIYXQsIEluYy4KICAgICAgICAgICAgICBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDcgIEJvIFRob3JzZW4gPGJvQHN1c2UuZGU+Ci0gICAgICAgICAgICAgCi0gICB4ODYtNjQgRm9yZWlnbiBGdW5jdGlvbiBJbnRlcmZhY2UgCisKKyAgIHg4Ni02NCBGb3JlaWduIEZ1bmN0aW9uIEludGVyZmFjZQogCiAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKICAgIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQpAQCAtMzksNiArMzksNyBAQAogI2RlZmluZSBNQVhfU1NFX1JFR1MgOAogCiAjaWYgZGVmaW5lZChfX0lOVEVMX0NPTVBJTEVSKQorI2luY2x1ZGUgInhtbWludHJpbi5oIgogI2RlZmluZSBVSU5UMTI4IF9fbTEyOAogI2Vsc2UKICNpZiBkZWZpbmVkKF9fU1VOUFJPX0MpCkBAIC02MCw3ICs2MSw3IEBACiB7CiAgIC8qIFJlZ2lzdGVycyBmb3IgYXJndW1lbnQgcGFzc2luZy4gICovCiAgIFVJTlQ2NCBncHJbTUFYX0dQUl9SRUdTXTsKLSAgdW5pb24gYmlnX2ludF91bmlvbiBzc2VbTUFYX1NTRV9SRUdTXTsgCisgIHVuaW9uIGJpZ19pbnRfdW5pb24gc3NlW01BWF9TU0VfUkVHU107CiB9OwogCiBleHRlcm4gdm9pZCBmZmlfY2FsbF91bml4NjQgKHZvaWQgKmFyZ3MsIHVuc2lnbmVkIGxvbmcgYnl0ZXMsIHVuc2lnbmVkIGZsYWdzLApAQCAtMTUxLDcgKzE1Miw3IEBACiAKICAgIFNlZSB0aGUgeDg2LTY0IFBTIEFCSSBmb3IgZGV0YWlscy4KICovCi1zdGF0aWMgaW50CitzdGF0aWMgc2l6ZV90CiBjbGFzc2lmeV9hcmd1bWVudCAoZmZpX3R5cGUgKnR5cGUsIGVudW0geDg2XzY0X3JlZ19jbGFzcyBjbGFzc2VzW10sCiAJCSAgIHNpemVfdCBieXRlX29mZnNldCkKIHsKQEAgLTE2Nyw3ICsxNjgsNyBAQAogICAgIGNhc2UgRkZJX1RZUEVfU0lOVDY0OgogICAgIGNhc2UgRkZJX1RZUEVfUE9JTlRFUjoKICAgICAgIHsKLQlpbnQgc2l6ZSA9IGJ5dGVfb2Zmc2V0ICsgdHlwZS0+c2l6ZTsKKwlzaXplX3Qgc2l6ZSA9IGJ5dGVfb2Zmc2V0ICsgdHlwZS0+c2l6ZTsKIAogCWlmIChzaXplIDw9IDQpCiAJICB7CkBAIC0yMDIsMTUgKzIwMywxNyBAQAogICAgIGNhc2UgRkZJX1RZUEVfRE9VQkxFOgogICAgICAgY2xhc3Nlc1swXSA9IFg4Nl82NF9TU0VERl9DTEFTUzsKICAgICAgIHJldHVybiAxOworI2lmIEZGSV9UWVBFX0xPTkdET1VCTEUgIT0gRkZJX1RZUEVfRE9VQkxFCiAgICAgY2FzZSBGRklfVFlQRV9MT05HRE9VQkxFOgogICAgICAgY2xhc3Nlc1swXSA9IFg4Nl82NF9YODdfQ0xBU1M7CiAgICAgICBjbGFzc2VzWzFdID0gWDg2XzY0X1g4N1VQX0NMQVNTOwogICAgICAgcmV0dXJuIDI7CisjZW5kaWYKICAgICBjYXNlIEZGSV9UWVBFX1NUUlVDVDoKICAgICAgIHsKLQljb25zdCBpbnQgVU5JVFNfUEVSX1dPUkQgPSA4OwotCWludCB3b3JkcyA9ICh0eXBlLT5zaXplICsgVU5JVFNfUEVSX1dPUkQgLSAxKSAvIFVOSVRTX1BFUl9XT1JEOwotCWZmaV90eXBlICoqcHRyOyAKKwljb25zdCBzaXplX3QgVU5JVFNfUEVSX1dPUkQgPSA4OworCXNpemVfdCB3b3JkcyA9ICh0eXBlLT5zaXplICsgVU5JVFNfUEVSX1dPUkQgLSAxKSAvIFVOSVRTX1BFUl9XT1JEOworCWZmaV90eXBlICoqcHRyOwogCWludCBpOwogCWVudW0geDg2XzY0X3JlZ19jbGFzcyBzdWJjbGFzc2VzW01BWF9DTEFTU0VTXTsKIApAQCAtMjMyLDcgKzIzNSw3IEBACiAJLyogTWVyZ2UgdGhlIGZpZWxkcyBvZiBzdHJ1Y3R1cmUuICAqLwogCWZvciAocHRyID0gdHlwZS0+ZWxlbWVudHM7ICpwdHIgIT0gTlVMTDsgcHRyKyspCiAJICB7Ci0JICAgIGludCBudW07CisJICAgIHNpemVfdCBudW07CiAKIAkgICAgYnl0ZV9vZmZzZXQgPSBBTElHTiAoYnl0ZV9vZmZzZXQsICgqcHRyKS0+YWxpZ25tZW50KTsKIApAQCAtMjQxLDcgKzI0NCw3IEBACiAJICAgICAgcmV0dXJuIDA7CiAJICAgIGZvciAoaSA9IDA7IGkgPCBudW07IGkrKykKIAkgICAgICB7Ci0JCWludCBwb3MgPSBieXRlX29mZnNldCAvIDg7CisJCXNpemVfdCBwb3MgPSBieXRlX29mZnNldCAvIDg7CiAJCWNsYXNzZXNbaSArIHBvc10gPQogCQkgIG1lcmdlX2NsYXNzZXMgKHN1YmNsYXNzZXNbaV0sIGNsYXNzZXNbaSArIHBvc10pOwogCSAgICAgIH0KQEAgLTMwNSwxMSArMzA4LDEyIEBACiAgICBjbGFzcy4gIFJldHVybiB6ZXJvIGlmZiBwYXJhbWV0ZXIgc2hvdWxkIGJlIHBhc3NlZCBpbiBtZW1vcnksIG90aGVyd2lzZQogICAgdGhlIG51bWJlciBvZiByZWdpc3RlcnMuICAqLwogCi1zdGF0aWMgaW50CitzdGF0aWMgc2l6ZV90CiBleGFtaW5lX2FyZ3VtZW50IChmZmlfdHlwZSAqdHlwZSwgZW51bSB4ODZfNjRfcmVnX2NsYXNzIGNsYXNzZXNbTUFYX0NMQVNTRVNdLAogCQkgIF9Cb29sIGluX3JldHVybiwgaW50ICpwbmdwciwgaW50ICpwbnNzZSkKIHsKLSAgaW50IGksIG4sIG5ncHIsIG5zc2U7CisgIHNpemVfdCBuOworICBpbnQgaSwgbmdwciwgbnNzZTsKIAogICBuID0gY2xhc3NpZnlfYXJndW1lbnQgKHR5cGUsIGNsYXNzZXMsIDApOwogICBpZiAobiA9PSAwKQpAQCAtMzUwLDkgKzM1NCw5IEBACiBmZmlfc3RhdHVzCiBmZmlfcHJlcF9jaWZfbWFjaGRlcCAoZmZpX2NpZiAqY2lmKQogewotICBpbnQgZ3ByY291bnQsIHNzZWNvdW50LCBpLCBhdm4sIG4sIG5ncHIsIG5zc2UsIGZsYWdzOworICBpbnQgZ3ByY291bnQsIHNzZWNvdW50LCBpLCBhdm4sIG5ncHIsIG5zc2UsIGZsYWdzOwogICBlbnVtIHg4Nl82NF9yZWdfY2xhc3MgY2xhc3Nlc1tNQVhfQ0xBU1NFU107Ci0gIHNpemVfdCBieXRlczsKKyAgc2l6ZV90IGJ5dGVzLCBuOwogCiAgIGdwcmNvdW50ID0gc3NlY291bnQgPSAwOwogCkBAIC00MTAsNyArNDE0LDcgQEAKICAgaWYgKHNzZWNvdW50KQogICAgIGZsYWdzIHw9IDEgPDwgMTE7CiAgIGNpZi0+ZmxhZ3MgPSBmbGFnczsKLSAgY2lmLT5ieXRlcyA9IEFMSUdOIChieXRlcywgOCk7CisgIGNpZi0+Ynl0ZXMgPSAodW5zaWduZWQpQUxJR04gKGJ5dGVzLCA4KTsKIAogICByZXR1cm4gRkZJX09LOwogfQpAQCAtNDUzLDggKzQ1Nyw3IEBACiAKICAgZm9yIChpID0gMDsgaSA8IGF2bjsgKytpKQogICAgIHsKLSAgICAgIHNpemVfdCBzaXplID0gYXJnX3R5cGVzW2ldLT5zaXplOwotICAgICAgaW50IG47CisgICAgICBzaXplX3Qgbiwgc2l6ZSA9IGFyZ190eXBlc1tpXS0+c2l6ZTsKIAogICAgICAgbiA9IGV4YW1pbmVfYXJndW1lbnQgKGFyZ190eXBlc1tpXSwgY2xhc3NlcywgMCwgJm5ncHIsICZuc3NlKTsKICAgICAgIGlmIChuID09IDAKQEAgLTU4Myw3ICs1ODYsNyBAQAogICBpZiAocmV0ICE9IEZGSV9UWVBFX1ZPSUQpCiAgICAgewogICAgICAgZW51bSB4ODZfNjRfcmVnX2NsYXNzIGNsYXNzZXNbTUFYX0NMQVNTRVNdOwotICAgICAgaW50IG4gPSBleGFtaW5lX2FyZ3VtZW50IChjaWYtPnJ0eXBlLCBjbGFzc2VzLCAxLCAmbmdwciwgJm5zc2UpOworICAgICAgc2l6ZV90IG4gPSBleGFtaW5lX2FyZ3VtZW50IChjaWYtPnJ0eXBlLCBjbGFzc2VzLCAxLCAmbmdwciwgJm5zc2UpOwogICAgICAgaWYgKG4gPT0gMCkKIAl7CiAJICAvKiBUaGUgcmV0dXJuIHZhbHVlIGdvZXMgaW4gbWVtb3J5LiAgQXJyYW5nZSBmb3IgdGhlIGNsb3N1cmUKQEAgLTYwNiwxMSArNjA5LDExIEBACiAKICAgYXZuID0gY2lmLT5uYXJnczsKICAgYXJnX3R5cGVzID0gY2lmLT5hcmdfdHlwZXM7Ci0gIAorCiAgIGZvciAoaSA9IDA7IGkgPCBhdm47ICsraSkKICAgICB7CiAgICAgICBlbnVtIHg4Nl82NF9yZWdfY2xhc3MgY2xhc3Nlc1tNQVhfQ0xBU1NFU107Ci0gICAgICBpbnQgbjsKKyAgICAgIHNpemVfdCBuOwogCiAgICAgICBuID0gZXhhbWluZV9hcmd1bWVudCAoYXJnX3R5cGVzW2ldLCBjbGFzc2VzLCAwLCAmbmdwciwgJm5zc2UpOwogICAgICAgaWYgKG4gPT0gMApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMveDg2L2ZmaXRhcmdldC5oIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMveDg2L2ZmaXRhcmdldC5oCmluZGV4IDQ2ZjI5NGMuLmIyYWZlOTEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3g4Ni9mZml0YXJnZXQuaAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy94ODYvZmZpdGFyZ2V0LmgKQEAgLTk4LDYgKzk4LDkgQEAKICAgLyogLS0tLSBJbnRlbCB4ODYgYW5kIEFNRCB4ODYtNjQgLSAqLwogICBGRklfU1lTViwKICAgRkZJX1VOSVg2NCwgICAvKiBVbml4IHZhcmlhbnRzIGFsbCB1c2UgdGhlIHNhbWUgQUJJIGZvciB4ODYtNjQgICovCisgIEZGSV9USElTQ0FMTCwKKyAgRkZJX0ZBU1RDQUxMLAorICBGRklfU1REQ0FMTCwKICAgRkZJX0xBU1RfQUJJLAogI2lmIGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX19pMzg2KQogICBGRklfREVGQVVMVF9BQkkgPSBGRklfU1lTVgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMveDg2L2ZyZWVic2QuUyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3g4Ni9mcmVlYnNkLlMKaW5kZXggYWZkZTUxMy4uOTdlMGI0ZSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMveDg2L2ZyZWVic2QuUworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy94ODYvZnJlZWJzZC5TCkBAIC00OSw2ICs0OSw5IEBACiAJbW92bCAgMTYoJWVicCksJWVjeAogCXN1YmwgICVlY3gsJWVzcAogCisJLyogQWxpZ24gdGhlIHN0YWNrIHBvaW50ZXIgdG8gMTYtYnl0ZXMgKi8KKwlhbmRsICAkMHhmZmZmZmZmMCwgJWVzcAorCiAJbW92bCAgJWVzcCwlZWF4CiAKIAkvKiBQbGFjZSBhbGwgb2YgdGhlIGZmaV9wcmVwX2FyZ3MgaW4gcG9zaXRpb24gICovCkBAIC00NTYsMyArNDU5LDUgQEAKICNlbmRpZgogCiAjZW5kaWYgLyogaWZuZGVmIF9feDg2XzY0X18gKi8KKworCS5zZWN0aW9uIC5ub3RlLkdOVS1zdGFjaywiIiwlcHJvZ2JpdHMKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3g4Ni91bml4NjQuUyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3g4Ni91bml4NjQuUwppbmRleCBkY2Q2YmM3Li40NWEwZWQ3IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy94ODYvdW5peDY0LlMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMveDg2L3VuaXg2NC5TCkBAIC0zNjYsNyArMzY2LDcgQEAKIAkuYnl0ZQkweDQJCQkvKiBEV19DRkFfYWR2YW5jZV9sb2M0ICovCiAJLmxvbmcJLkxVVzEtLkxVVzAKIAotCS8qIE5ldyBzdGFjayBmcmFtZSBiYXNlZCBvZmYgcmJwLiAgVGhpcyBpcyBhIGl0dHkgYml0IG9mIHVud2luZAorCS8qIE5ldyBzdGFjayBmcmFtZSBiYXNlZCBvZmYgcmJwLiAgVGhpcyBpcyBhbiBpdHR5IGJpdCBvZiB1bndpbmQKIAkgICB0cmlja2VyeSBpbiB0aGF0IHRoZSBDRkEgKmhhcyogY2hhbmdlZC4gIFRoZXJlIGlzIG5vIGVhc3kgd2F5CiAJICAgdG8gZGVzY3JpYmUgaXQgY29ycmVjdGx5IG9uIGVudHJ5IHRvIHRoZSBmdW5jdGlvbi4gIEZvcnR1bmF0ZWx5LAogCSAgIGl0IGRvZXNuJ3QgbWF0dGVyIHRvbyBtdWNoIHNpbmNlIGF0IGFsbCBwb2ludHMgd2UgY2FuIGNvcnJlY3RseQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMveDg2L3dpbjMyLlMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy94ODYvd2luMzIuUwppbmRleCAyNGI3YmJkLi5kYWYwZTc5IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy94ODYvd2luMzIuUworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy94ODYvd2luMzIuUwpAQCAtMzMsOCArMzMsMTMgQEAKICNpbmNsdWRlIDxmZmljb25maWcuaD4KICNpbmNsdWRlIDxmZmkuaD4KIAorI2RlZmluZSBDSUZfQUJJX09GRlNFVCAwCisjZGVmaW5lIENJRl9CWVRFU19PRkZTRVQgMTYKKwogI2lmZGVmIF9NU0NfVkVSCiAKKyNkZWZpbmUgQ0xPU1VSRV9DSUZfT0ZGU0VUICgoRkZJX1RSQU1QT0xJTkVfU0laRSArIDMpIEFORCBOT1QgMykKKwogLjM4NgogLk1PREVMIEZMQVQsIEMKIApAQCAtMTg4LDE0ICsxOTMsMjMgQEAKICAgICAgICAgcmV0CiBmZmlfY2FsbF93aW4zMiBFTkRQCiAKLWZmaV9jbG9zdXJlX1RISVNDQUxMIFBST0MgTkVBUiBGT1JDRUZSQU1FCi0Jc3ViCWVzcCwgNDAKLQlsZWEJZWR4LCBbZWJwIC0yNF0KLQltb3YJW2VicCAtIDEyXSwgZWR4CS8qIHJlc3AgKi8KLQlsZWEJZWR4LCBbZWJwICsgMTJdICAvKiBhY2NvdW50IGZvciBzdHViIHJldHVybiBhZGRyZXNzIG9uIHN0YWNrICovCi0Jam1wCXN0dWIKK2ZmaV9jbG9zdXJlX1RISVNDQUxMIFBST0MgTkVBUgorCTs7IEluc2VydCB0aGUgcmVnaXN0ZXIgYXJndW1lbnQgb24gdGhlIHN0YWNrIGFzIHRoZSBmaXJzdCBhcmd1bWVudAorCXhjaGcJRFdPUkQgUFRSIFtlc3ArNF0sIGVjeAorCXhjaGcJRFdPUkQgUFRSIFtlc3BdLCBlY3gKKwlwdXNoCWVjeAorCWptcAlmZmlfY2xvc3VyZV9TVERDQUxMCiBmZmlfY2xvc3VyZV9USElTQ0FMTCBFTkRQCiAKK2ZmaV9jbG9zdXJlX0ZBU1RDQUxMIFBST0MgTkVBUgorCTs7IEluc2VydCB0aGUgcmVnaXN0ZXIgYXJndW1lbnQgb24gdGhlIHN0YWNrIGFzIHRoZSBmaXJzdCBhcmd1bWVudAorCXhjaGcJRFdPUkQgUFRSIFtlc3ArNF0sIGVkeAorCXhjaGcJRFdPUkQgUFRSIFtlc3BdLCBlY3gKKwlwdXNoCWVkeAorCXB1c2gJZWN4CisJam1wCWZmaV9jbG9zdXJlX1NURENBTEwKK2ZmaV9jbG9zdXJlX0ZBU1RDQUxMIEVORFAKKwogZmZpX2Nsb3N1cmVfU1lTViBQUk9DIE5FQVIgRk9SQ0VGUkFNRQogICAgIDs7IHRoZSBmZmlfY2xvc3VyZSBjdHggaXMgcGFzc2VkIGluIGVheCBieSB0aGUgdHJhbXBvbGluZS4KIApAQCAtNDY0LDggKzQ3OCwyMyBAQAogICAgICAgICBqbXAgICBjZF9lcGlsb2d1ZQogCiBjZF9lcGlsb2d1ZToKLSAgICAgICAgOzsgRXBpbG9ndWUgY29kZSBpcyBhdXRvZ2VuZXJhdGVkLgotICAgICAgICByZXQKKyAgICAgICAgbW92ICAgZXNwLCBlYnAKKyAgICAgICAgcG9wICAgZWJwCisgICAgICAgIHBvcCAgIGVjeAorICAgICAgICBwb3AgICBlZHgKKyAgICAgICAgbW92ICAgZWN4LCBEV09SRCBQVFIgW2VjeCArIChDTE9TVVJFX0NJRl9PRkZTRVQtMTApXQorICAgICAgICBhZGQgICBlc3AsIERXT1JEIFBUUiBbZWN4ICsgQ0lGX0JZVEVTX09GRlNFVF0KKyAgICAgICAgbW92ICAgZWN4LCBEV09SRCBQVFIgW2VjeCArIENJRl9BQklfT0ZGU0VUXQorICAgICAgICBjbXAgICBlY3gsIDMKKyAgICAgICAgamUgICAgY2RfdGhpc2NhbGwKKyAgICAgICAgY21wICAgZWN4LCA0CisgICAgICAgIGpuZSAgIGNkX25vdF9mYXN0Y2FsbAorCisgICAgICAgIGFkZCAgIGVzcCwgNAorY2RfdGhpc2NhbGw6CisgICAgICAgIGFkZCAgIGVzcCwgNAorY2Rfbm90X2Zhc3RjYWxsOgorICAgICAgICBqbXAgICBlZHgKIGZmaV9jbG9zdXJlX1NURENBTEwgRU5EUAogCiBfVEVYVCBFTkRTCkBAIC00NzMsMTUgKzUwMiwyMyBAQAogCiAjZWxzZQogCisjZGVmaW5lIENMT1NVUkVfQ0lGX09GRlNFVCAoKEZGSV9UUkFNUE9MSU5FX1NJWkUgKyAzKSAmIH4zKQorCisjaWYgZGVmaW5lZChTWU1CT0xfVU5ERVJTQ09SRSkKKyNkZWZpbmUgVVNDT1JFX1NZTUJPTCh4KSBfIyN4CisjZWxzZQorI2RlZmluZSBVU0NPUkVfU1lNQk9MKHgpIHgKKyNlbmRpZgogCS50ZXh0CiAgCiAgICAgICAgICMgVGhpcyBhc3N1bWVzIHdlIGFyZSB1c2luZyBnYXMuCiAgICAgICAgIC5iYWxpZ24gMTYKLQkuZ2xvYmwJX2ZmaV9jYWxsX3dpbjMyCi0jaWZuZGVmIF9fT1MyX18KK0ZGSV9ISURERU4oZmZpX2NhbGxfd2luMzIpCisJLmdsb2JsCVVTQ09SRV9TWU1CT0woZmZpX2NhbGxfd2luMzIpCisjaWYgZGVmaW5lZChYODZfV0lOMzIpICYmICFkZWZpbmVkKF9fT1MyX18pCiAJLmRlZglfZmZpX2NhbGxfd2luMzI7CS5zY2wJMjsJLnR5cGUJMzI7CS5lbmRlZgogI2VuZGlmCi1fZmZpX2NhbGxfd2luMzI6CitVU0NPUkVfU1lNQk9MKGZmaV9jYWxsX3dpbjMyKToKIC5MRkIxOgogICAgICAgICBwdXNobCAlZWJwCiAuTENGSTA6CkBAIC01NDIsMzEgKzU3OSwzMiBAQAogCWNhbGwJMWYKIAkjIERvIG5vdCBpbnNlcnQgYW55dGhpbmcgaGVyZSBiZXR3ZWVuIHRoZSBjYWxsIGFuZCB0aGUganVtcCB0YWJsZS4KIC5Mc3RvcmVfdGFibGU6Ci0JLmxvbmcJLkxub3JldHZhbAkJLyogRkZJX1RZUEVfVk9JRCAqLwotCS5sb25nCS5McmV0aW50CQkvKiBGRklfVFlQRV9JTlQgKi8KLQkubG9uZwkuTHJldGZsb2F0CQkvKiBGRklfVFlQRV9GTE9BVCAqLwotCS5sb25nCS5McmV0ZG91YmxlCQkvKiBGRklfVFlQRV9ET1VCTEUgKi8KLQkubG9uZwkuTHJldGxvbmdkb3VibGUJCS8qIEZGSV9UWVBFX0xPTkdET1VCTEUgKi8KLQkubG9uZwkuTHJldHVpbnQ4CQkvKiBGRklfVFlQRV9VSU5UOCAqLwotCS5sb25nCS5McmV0c2ludDgJCS8qIEZGSV9UWVBFX1NJTlQ4ICovCi0JLmxvbmcJLkxyZXR1aW50MTYJCS8qIEZGSV9UWVBFX1VJTlQxNiAqLwotCS5sb25nCS5McmV0c2ludDE2CQkvKiBGRklfVFlQRV9TSU5UMTYgKi8KLQkubG9uZwkuTHJldGludAkJLyogRkZJX1RZUEVfVUlOVDMyICovCi0JLmxvbmcJLkxyZXRpbnQJCS8qIEZGSV9UWVBFX1NJTlQzMiAqLwotCS5sb25nCS5McmV0aW50NjQJCS8qIEZGSV9UWVBFX1VJTlQ2NCAqLwotCS5sb25nCS5McmV0aW50NjQJCS8qIEZGSV9UWVBFX1NJTlQ2NCAqLwotCS5sb25nCS5McmV0c3RydWN0CQkvKiBGRklfVFlQRV9TVFJVQ1QgKi8KLQkubG9uZwkuTHJldGludAkJLyogRkZJX1RZUEVfUE9JTlRFUiAqLwotCS5sb25nCS5McmV0c3RydWN0MWIJCS8qIEZGSV9UWVBFX1NNQUxMX1NUUlVDVF8xQiAqLwotCS5sb25nCS5McmV0c3RydWN0MmIJCS8qIEZGSV9UWVBFX1NNQUxMX1NUUlVDVF8yQiAqLwotCS5sb25nCS5McmV0c3RydWN0NGIJCS8qIEZGSV9UWVBFX1NNQUxMX1NUUlVDVF80QiAqLwotCS5sb25nCS5McmV0c3RydWN0CQkvKiBGRklfVFlQRV9NU19TVFJVQ1QgKi8KKwkubG9uZwkuTG5vcmV0dmFsLS5Mc3RvcmVfdGFibGUJLyogRkZJX1RZUEVfVk9JRCAqLworCS5sb25nCS5McmV0aW50LS5Mc3RvcmVfdGFibGUJCS8qIEZGSV9UWVBFX0lOVCAqLworCS5sb25nCS5McmV0ZmxvYXQtLkxzdG9yZV90YWJsZQkvKiBGRklfVFlQRV9GTE9BVCAqLworCS5sb25nCS5McmV0ZG91YmxlLS5Mc3RvcmVfdGFibGUJLyogRkZJX1RZUEVfRE9VQkxFICovCisJLmxvbmcJLkxyZXRsb25nZG91YmxlLS5Mc3RvcmVfdGFibGUJLyogRkZJX1RZUEVfTE9OR0RPVUJMRSAqLworCS5sb25nCS5McmV0dWludDgtLkxzdG9yZV90YWJsZQkvKiBGRklfVFlQRV9VSU5UOCAqLworCS5sb25nCS5McmV0c2ludDgtLkxzdG9yZV90YWJsZQkvKiBGRklfVFlQRV9TSU5UOCAqLworCS5sb25nCS5McmV0dWludDE2LS5Mc3RvcmVfdGFibGUJLyogRkZJX1RZUEVfVUlOVDE2ICovCisJLmxvbmcJLkxyZXRzaW50MTYtLkxzdG9yZV90YWJsZQkvKiBGRklfVFlQRV9TSU5UMTYgKi8KKwkubG9uZwkuTHJldGludC0uTHN0b3JlX3RhYmxlCQkvKiBGRklfVFlQRV9VSU5UMzIgKi8KKwkubG9uZwkuTHJldGludC0uTHN0b3JlX3RhYmxlCQkvKiBGRklfVFlQRV9TSU5UMzIgKi8KKwkubG9uZwkuTHJldGludDY0LS5Mc3RvcmVfdGFibGUJLyogRkZJX1RZUEVfVUlOVDY0ICovCisJLmxvbmcJLkxyZXRpbnQ2NC0uTHN0b3JlX3RhYmxlCS8qIEZGSV9UWVBFX1NJTlQ2NCAqLworCS5sb25nCS5McmV0c3RydWN0LS5Mc3RvcmVfdGFibGUJLyogRkZJX1RZUEVfU1RSVUNUICovCisJLmxvbmcJLkxyZXRpbnQtLkxzdG9yZV90YWJsZQkJLyogRkZJX1RZUEVfUE9JTlRFUiAqLworCS5sb25nCS5McmV0c3RydWN0MWItLkxzdG9yZV90YWJsZQkvKiBGRklfVFlQRV9TTUFMTF9TVFJVQ1RfMUIgKi8KKwkubG9uZwkuTHJldHN0cnVjdDJiLS5Mc3RvcmVfdGFibGUJLyogRkZJX1RZUEVfU01BTExfU1RSVUNUXzJCICovCisJLmxvbmcJLkxyZXRzdHJ1Y3Q0Yi0uTHN0b3JlX3RhYmxlCS8qIEZGSV9UWVBFX1NNQUxMX1NUUlVDVF80QiAqLworCS5sb25nCS5McmV0c3RydWN0LS5Mc3RvcmVfdGFibGUJLyogRkZJX1RZUEVfTVNfU1RSVUNUICovCiAxOgotCWFkZAklZWN4LCAlZWN4Ci0JYWRkCSVlY3gsICVlY3gKKwlzaGwJJDIsICVlY3gKKwlhZGQJKCVlc3ApLCVlY3gKKwltb3YJKCVlY3gpLCVlY3gKIAlhZGQJKCVlc3ApLCVlY3gKIAlhZGQJJDQsICVlc3AKLQlqbXAJKiglZWN4KQorCWptcAkqJWVjeAogCiAJLyogU2lnbi96ZXJvIGV4dGVuZCBhcyBhcHByb3ByaWF0ZS4gICovCiAuTHJldHNpbnQ4OgpAQCAtNjQ0LDI3ICs2ODIsNDMgQEAKICAgICAgICAgcmV0CiAuZmZpX2NhbGxfd2luMzJfZW5kOgogICAgICAgICAuYmFsaWduIDE2Ci0JLmdsb2JsCV9mZmlfY2xvc3VyZV9USElTQ0FMTAotI2lmbmRlZiBfX09TMl9fCitGRklfSElEREVOKGZmaV9jbG9zdXJlX1RISVNDQUxMKQorCS5nbG9ibAlVU0NPUkVfU1lNQk9MKGZmaV9jbG9zdXJlX1RISVNDQUxMKQorI2lmIGRlZmluZWQoWDg2X1dJTjMyKSAmJiAhZGVmaW5lZChfX09TMl9fKQogCS5kZWYJX2ZmaV9jbG9zdXJlX1RISVNDQUxMOwkuc2NsCTI7CS50eXBlCTMyOwkuZW5kZWYKICNlbmRpZgotX2ZmaV9jbG9zdXJlX1RISVNDQUxMOgotCXB1c2hsCSVlYnAKLQltb3ZsCSVlc3AsICVlYnAKLQlzdWJsCSQ0MCwgJWVzcAotCWxlYWwJLTI0KCVlYnApLCAlZWR4Ci0JbW92bAklZWR4LCAtMTIoJWVicCkJLyogcmVzcCAqLwotCWxlYWwJMTIoJWVicCksICVlZHggIC8qIGFjY291bnQgZm9yIHN0dWIgcmV0dXJuIGFkZHJlc3Mgb24gc3RhY2sgKi8KLQlqbXAJLnN0dWIKK1VTQ09SRV9TWU1CT0woZmZpX2Nsb3N1cmVfVEhJU0NBTEwpOgorCS8qIEluc2VydCB0aGUgcmVnaXN0ZXIgYXJndW1lbnQgb24gdGhlIHN0YWNrIGFzIHRoZSBmaXJzdCBhcmd1bWVudCAqLworCXhjaGcJJWVjeCwgNCglZXNwKQorCXhjaGcJJWVjeCwgKCVlc3ApCisJcHVzaAklZWN4CisJam1wCS5mZmlfY2xvc3VyZV9TVERDQUxMX2ludGVybmFsCisKKyAgICAgICAgLmJhbGlnbiAxNgorRkZJX0hJRERFTihmZmlfY2xvc3VyZV9GQVNUQ0FMTCkKKwkuZ2xvYmwJVVNDT1JFX1NZTUJPTChmZmlfY2xvc3VyZV9GQVNUQ0FMTCkKKyNpZiBkZWZpbmVkKFg4Nl9XSU4zMikgJiYgIWRlZmluZWQoX19PUzJfXykKKwkuZGVmCV9mZmlfY2xvc3VyZV9GQVNUQ0FMTDsJLnNjbAkyOwkudHlwZQkzMjsJLmVuZGVmCisjZW5kaWYKK1VTQ09SRV9TWU1CT0woZmZpX2Nsb3N1cmVfRkFTVENBTEwpOgorCS8qIEluc2VydCB0aGUgcmVnaXN0ZXIgYXJndW1lbnRzIG9uIHRoZSBzdGFjayBhcyB0aGUgZmlyc3QgdHdvIGFyZ3VtZW50cyAqLworCXhjaGcJJWVkeCwgNCglZXNwKQorCXhjaGcJJWVjeCwgKCVlc3ApCisJcHVzaAklZWR4CisJcHVzaAklZWN4CisJam1wCS5mZmlfY2xvc3VyZV9TVERDQUxMX2ludGVybmFsCiAuTEZFMToKIAogICAgICAgICAjIFRoaXMgYXNzdW1lcyB3ZSBhcmUgdXNpbmcgZ2FzLgogICAgICAgICAuYmFsaWduIDE2Ci0JLmdsb2JsCV9mZmlfY2xvc3VyZV9TWVNWCi0jaWZuZGVmIF9fT1MyX18KK0ZGSV9ISURERU4oZmZpX2Nsb3N1cmVfU1lTVikKKyNpZiBkZWZpbmVkKFg4Nl9XSU4zMikKKwkuZ2xvYmwJVVNDT1JFX1NZTUJPTChmZmlfY2xvc3VyZV9TWVNWKQorI2lmIGRlZmluZWQoWDg2X1dJTjMyKSAmJiAhZGVmaW5lZChfX09TMl9fKQogCS5kZWYJX2ZmaV9jbG9zdXJlX1NZU1Y7CS5zY2wJMjsJLnR5cGUJMzI7CS5lbmRlZgogI2VuZGlmCi1fZmZpX2Nsb3N1cmVfU1lTVjoKK1VTQ09SRV9TWU1CT0woZmZpX2Nsb3N1cmVfU1lTVik6CisjZW5kaWYKIC5MRkIzOgogCXB1c2hsCSVlYnAKIC5MQ0ZJNDoKQEAgLTY3NCw0MyArNzI4LDU0IEBACiAJbGVhbAktMjQoJWVicCksICVlZHgKIAltb3ZsCSVlZHgsIC0xMiglZWJwKQkvKiByZXNwICovCiAJbGVhbAk4KCVlYnApLCAlZWR4Ci0uc3R1YjoKIAltb3ZsCSVlZHgsIDQoJWVzcCkJLyogYXJncyA9IF9fYnVpbHRpbl9kd2FyZl9jZmEgKCkgKi8KIAlsZWFsCS0xMiglZWJwKSwgJWVkeAogCW1vdmwJJWVkeCwgKCVlc3ApCS8qICZyZXNwICovCi0JY2FsbAlfZmZpX2Nsb3N1cmVfU1lTVl9pbm5lcgorI2lmIGRlZmluZWQoSEFWRV9ISURERU5fVklTSUJJTElUWV9BVFRSSUJVVEUpIHx8ICFkZWZpbmVkKF9fUElDX18pCisJY2FsbAlVU0NPUkVfU1lNQk9MKGZmaV9jbG9zdXJlX1NZU1ZfaW5uZXIpCisjZWxpZiBkZWZpbmVkKFg4Nl9EQVJXSU4pCisJY2FsbGwJTF9mZmlfY2xvc3VyZV9TWVNWX2lubmVyJHN0dWIKKyNlbHNlCisJbW92bAklZWJ4LCA4KCVlc3ApCisJY2FsbAkxZgorMToJcG9wbAklZWJ4CisJYWRkbAkkX0dMT0JBTF9PRkZTRVRfVEFCTEVfK1suLTFiXSwgJWVieAorCWNhbGwJZmZpX2Nsb3N1cmVfU1lTVl9pbm5lckBQTFQKKwltb3ZsCTgoJWVzcCksICVlYngKKyNlbmRpZgogCW1vdmwJLTEyKCVlYnApLCAlZWN4CiAKIDA6CiAJY2FsbAkxZgogCSMgRG8gbm90IGluc2VydCBhbnl0aGluZyBoZXJlIGJldHdlZW4gdGhlIGNhbGwgYW5kIHRoZSBqdW1wIHRhYmxlLgogLkxjbHNfc3RvcmVfdGFibGU6Ci0JLmxvbmcJLkxjbHNfbm9yZXR2YWwJCS8qIEZGSV9UWVBFX1ZPSUQgKi8KLQkubG9uZwkuTGNsc19yZXRpbnQJCS8qIEZGSV9UWVBFX0lOVCAqLwotCS5sb25nCS5MY2xzX3JldGZsb2F0CQkvKiBGRklfVFlQRV9GTE9BVCAqLwotCS5sb25nCS5MY2xzX3JldGRvdWJsZQkJLyogRkZJX1RZUEVfRE9VQkxFICovCi0JLmxvbmcJLkxjbHNfcmV0bGRvdWJsZQkvKiBGRklfVFlQRV9MT05HRE9VQkxFICovCi0JLmxvbmcJLkxjbHNfcmV0dWludDgJCS8qIEZGSV9UWVBFX1VJTlQ4ICovCi0JLmxvbmcJLkxjbHNfcmV0c2ludDgJCS8qIEZGSV9UWVBFX1NJTlQ4ICovCi0JLmxvbmcJLkxjbHNfcmV0dWludDE2CQkvKiBGRklfVFlQRV9VSU5UMTYgKi8KLQkubG9uZwkuTGNsc19yZXRzaW50MTYJCS8qIEZGSV9UWVBFX1NJTlQxNiAqLwotCS5sb25nCS5MY2xzX3JldGludAkJLyogRkZJX1RZUEVfVUlOVDMyICovCi0JLmxvbmcJLkxjbHNfcmV0aW50CQkvKiBGRklfVFlQRV9TSU5UMzIgKi8KLQkubG9uZwkuTGNsc19yZXRsbG9uZwkJLyogRkZJX1RZUEVfVUlOVDY0ICovCi0JLmxvbmcJLkxjbHNfcmV0bGxvbmcJCS8qIEZGSV9UWVBFX1NJTlQ2NCAqLwotCS5sb25nCS5MY2xzX3JldHN0cnVjdAkJLyogRkZJX1RZUEVfU1RSVUNUICovCi0JLmxvbmcJLkxjbHNfcmV0aW50CQkvKiBGRklfVFlQRV9QT0lOVEVSICovCi0JLmxvbmcJLkxjbHNfcmV0c3RydWN0MQkvKiBGRklfVFlQRV9TTUFMTF9TVFJVQ1RfMUIgKi8KLQkubG9uZwkuTGNsc19yZXRzdHJ1Y3QyCS8qIEZGSV9UWVBFX1NNQUxMX1NUUlVDVF8yQiAqLwotCS5sb25nCS5MY2xzX3JldHN0cnVjdDQJLyogRkZJX1RZUEVfU01BTExfU1RSVUNUXzRCICovCi0JLmxvbmcJLkxjbHNfcmV0bXNzdHJ1Y3QJLyogRkZJX1RZUEVfTVNfU1RSVUNUICovCisJLmxvbmcJLkxjbHNfbm9yZXR2YWwtLkxjbHNfc3RvcmVfdGFibGUJLyogRkZJX1RZUEVfVk9JRCAqLworCS5sb25nCS5MY2xzX3JldGludC0uTGNsc19zdG9yZV90YWJsZQkJLyogRkZJX1RZUEVfSU5UICovCisJLmxvbmcJLkxjbHNfcmV0ZmxvYXQtLkxjbHNfc3RvcmVfdGFibGUJLyogRkZJX1RZUEVfRkxPQVQgKi8KKwkubG9uZwkuTGNsc19yZXRkb3VibGUtLkxjbHNfc3RvcmVfdGFibGUJLyogRkZJX1RZUEVfRE9VQkxFICovCisJLmxvbmcJLkxjbHNfcmV0bGRvdWJsZS0uTGNsc19zdG9yZV90YWJsZQkvKiBGRklfVFlQRV9MT05HRE9VQkxFICovCisJLmxvbmcJLkxjbHNfcmV0dWludDgtLkxjbHNfc3RvcmVfdGFibGUJLyogRkZJX1RZUEVfVUlOVDggKi8KKwkubG9uZwkuTGNsc19yZXRzaW50OC0uTGNsc19zdG9yZV90YWJsZQkvKiBGRklfVFlQRV9TSU5UOCAqLworCS5sb25nCS5MY2xzX3JldHVpbnQxNi0uTGNsc19zdG9yZV90YWJsZQkvKiBGRklfVFlQRV9VSU5UMTYgKi8KKwkubG9uZwkuTGNsc19yZXRzaW50MTYtLkxjbHNfc3RvcmVfdGFibGUJLyogRkZJX1RZUEVfU0lOVDE2ICovCisJLmxvbmcJLkxjbHNfcmV0aW50LS5MY2xzX3N0b3JlX3RhYmxlCQkvKiBGRklfVFlQRV9VSU5UMzIgKi8KKwkubG9uZwkuTGNsc19yZXRpbnQtLkxjbHNfc3RvcmVfdGFibGUJCS8qIEZGSV9UWVBFX1NJTlQzMiAqLworCS5sb25nCS5MY2xzX3JldGxsb25nLS5MY2xzX3N0b3JlX3RhYmxlCS8qIEZGSV9UWVBFX1VJTlQ2NCAqLworCS5sb25nCS5MY2xzX3JldGxsb25nLS5MY2xzX3N0b3JlX3RhYmxlCS8qIEZGSV9UWVBFX1NJTlQ2NCAqLworCS5sb25nCS5MY2xzX3JldHN0cnVjdC0uTGNsc19zdG9yZV90YWJsZQkvKiBGRklfVFlQRV9TVFJVQ1QgKi8KKwkubG9uZwkuTGNsc19yZXRpbnQtLkxjbHNfc3RvcmVfdGFibGUJCS8qIEZGSV9UWVBFX1BPSU5URVIgKi8KKwkubG9uZwkuTGNsc19yZXRzdHJ1Y3QxLS5MY2xzX3N0b3JlX3RhYmxlCS8qIEZGSV9UWVBFX1NNQUxMX1NUUlVDVF8xQiAqLworCS5sb25nCS5MY2xzX3JldHN0cnVjdDItLkxjbHNfc3RvcmVfdGFibGUJLyogRkZJX1RZUEVfU01BTExfU1RSVUNUXzJCICovCisJLmxvbmcJLkxjbHNfcmV0c3RydWN0NC0uTGNsc19zdG9yZV90YWJsZQkvKiBGRklfVFlQRV9TTUFMTF9TVFJVQ1RfNEIgKi8KKwkubG9uZwkuTGNsc19yZXRtc3N0cnVjdC0uTGNsc19zdG9yZV90YWJsZQkvKiBGRklfVFlQRV9NU19TVFJVQ1QgKi8KIAogMToKLQlhZGQJJWVheCwgJWVheAotCWFkZAklZWF4LCAlZWF4CisJc2hsCSQyLCAlZWF4CisJYWRkCSglZXNwKSwlZWF4CisJbW92CSglZWF4KSwlZWF4CiAJYWRkCSglZXNwKSwlZWF4CiAJYWRkCSQ0LCAlZXNwCi0Jam1wCSooJWVheCkKKwlqbXAJKiVlYXgKIAogCS8qIFNpZ24vemVybyBleHRlbmQgYXMgYXBwcm9wcmlhdGUuICAqLwogLkxjbHNfcmV0c2ludDg6CkBAIC03ODgsMTIgKzg1MywxNSBAQAogI2RlZmluZSBSQVdfQ0xPU1VSRV9GVU5fT0ZGU0VUIChSQVdfQ0xPU1VSRV9DSUZfT0ZGU0VUICsgNCkKICNkZWZpbmUgUkFXX0NMT1NVUkVfVVNFUl9EQVRBX09GRlNFVCAoUkFXX0NMT1NVUkVfRlVOX09GRlNFVCArIDQpCiAjZGVmaW5lIENJRl9GTEFHU19PRkZTRVQgMjAKKworI2lmZGVmIFg4Nl9XSU4zMgogICAgICAgICAuYmFsaWduIDE2Ci0JLmdsb2JsCV9mZmlfY2xvc3VyZV9yYXdfVEhJU0NBTEwKLSNpZm5kZWYgX19PUzJfXworRkZJX0hJRERFTihmZmlfY2xvc3VyZV9yYXdfVEhJU0NBTEwpCisJLmdsb2JsCVVTQ09SRV9TWU1CT0woZmZpX2Nsb3N1cmVfcmF3X1RISVNDQUxMKQorI2lmIGRlZmluZWQoWDg2X1dJTjMyKSAmJiAhZGVmaW5lZChfX09TMl9fKQogCS5kZWYJX2ZmaV9jbG9zdXJlX3Jhd19USElTQ0FMTDsJLnNjbAkyOwkudHlwZQkzMjsJLmVuZGVmCiAjZW5kaWYKLV9mZmlfY2xvc3VyZV9yYXdfVEhJU0NBTEw6CitVU0NPUkVfU1lNQk9MKGZmaV9jbG9zdXJlX3Jhd19USElTQ0FMTCk6CiAJcHVzaGwJJWVicAogCW1vdmwJJWVzcCwgJWVicAogCXB1c2hsCSVlc2kKQEAgLTgwMywxMyArODcxLDE3IEBACiAJbW92bAklZWR4LCAxMiglZXNwKQkvKiB1c2VyX2RhdGEgKi8KIAlsZWFsCTEyKCVlYnApLCAlZWR4CS8qIF9fYnVpbHRpbl9kd2FyZl9jZmEgKCkgKi8KIAlqbXAJLnN0dWJyYXcKKyNlbmRpZiAvKiBYODZfV0lOMzIgKi8KKwogICAgICAgICAjIFRoaXMgYXNzdW1lcyB3ZSBhcmUgdXNpbmcgZ2FzLgogICAgICAgICAuYmFsaWduIDE2Ci0JLmdsb2JsCV9mZmlfY2xvc3VyZV9yYXdfU1lTVgotI2lmbmRlZiBfX09TMl9fCisjaWYgZGVmaW5lZChYODZfV0lOMzIpCisJLmdsb2JsCVVTQ09SRV9TWU1CT0woZmZpX2Nsb3N1cmVfcmF3X1NZU1YpCisjaWYgZGVmaW5lZChYODZfV0lOMzIpICYmICFkZWZpbmVkKF9fT1MyX18pCiAJLmRlZglfZmZpX2Nsb3N1cmVfcmF3X1NZU1Y7CS5zY2wJMjsJLnR5cGUJMzI7CS5lbmRlZgogI2VuZGlmCi1fZmZpX2Nsb3N1cmVfcmF3X1NZU1Y6CitVU0NPUkVfU1lNQk9MKGZmaV9jbG9zdXJlX3Jhd19TWVNWKToKKyNlbmRpZiAvKiBkZWZpbmVkKFg4Nl9XSU4zMikgKi8KIC5MRkI0OgogCXB1c2hsCSVlYnAKIC5MQ0ZJNjoKQEAgLTgzMywzMSArOTA1LDMyIEBACiAJY2FsbAkxZgogCSMgRG8gbm90IGluc2VydCBhbnl0aGluZyBoZXJlIGJldHdlZW4gdGhlIGNhbGwgYW5kIHRoZSBqdW1wIHRhYmxlLgogLkxyY2xzX3N0b3JlX3RhYmxlOgotCS5sb25nCS5McmNsc19ub3JldHZhbAkJLyogRkZJX1RZUEVfVk9JRCAqLwotCS5sb25nCS5McmNsc19yZXRpbnQJCS8qIEZGSV9UWVBFX0lOVCAqLwotCS5sb25nCS5McmNsc19yZXRmbG9hdAkJLyogRkZJX1RZUEVfRkxPQVQgKi8KLQkubG9uZwkuTHJjbHNfcmV0ZG91YmxlCS8qIEZGSV9UWVBFX0RPVUJMRSAqLwotCS5sb25nCS5McmNsc19yZXRsZG91YmxlCS8qIEZGSV9UWVBFX0xPTkdET1VCTEUgKi8KLQkubG9uZwkuTHJjbHNfcmV0dWludDgJCS8qIEZGSV9UWVBFX1VJTlQ4ICovCi0JLmxvbmcJLkxyY2xzX3JldHNpbnQ4CQkvKiBGRklfVFlQRV9TSU5UOCAqLwotCS5sb25nCS5McmNsc19yZXR1aW50MTYJLyogRkZJX1RZUEVfVUlOVDE2ICovCi0JLmxvbmcJLkxyY2xzX3JldHNpbnQxNgkvKiBGRklfVFlQRV9TSU5UMTYgKi8KLQkubG9uZwkuTHJjbHNfcmV0aW50CQkvKiBGRklfVFlQRV9VSU5UMzIgKi8KLQkubG9uZwkuTHJjbHNfcmV0aW50CQkvKiBGRklfVFlQRV9TSU5UMzIgKi8KLQkubG9uZwkuTHJjbHNfcmV0bGxvbmcJCS8qIEZGSV9UWVBFX1VJTlQ2NCAqLwotCS5sb25nCS5McmNsc19yZXRsbG9uZwkJLyogRkZJX1RZUEVfU0lOVDY0ICovCi0JLmxvbmcJLkxyY2xzX3JldHN0cnVjdAkvKiBGRklfVFlQRV9TVFJVQ1QgKi8KLQkubG9uZwkuTHJjbHNfcmV0aW50CQkvKiBGRklfVFlQRV9QT0lOVEVSICovCi0JLmxvbmcJLkxyY2xzX3JldHN0cnVjdDEJLyogRkZJX1RZUEVfU01BTExfU1RSVUNUXzFCICovCi0JLmxvbmcJLkxyY2xzX3JldHN0cnVjdDIJLyogRkZJX1RZUEVfU01BTExfU1RSVUNUXzJCICovCi0JLmxvbmcJLkxyY2xzX3JldHN0cnVjdDQJLyogRkZJX1RZUEVfU01BTExfU1RSVUNUXzRCICovCi0JLmxvbmcJLkxyY2xzX3JldHN0cnVjdAkvKiBGRklfVFlQRV9NU19TVFJVQ1QgKi8KKwkubG9uZwkuTHJjbHNfbm9yZXR2YWwtLkxyY2xzX3N0b3JlX3RhYmxlCS8qIEZGSV9UWVBFX1ZPSUQgKi8KKwkubG9uZwkuTHJjbHNfcmV0aW50LS5McmNsc19zdG9yZV90YWJsZQkvKiBGRklfVFlQRV9JTlQgKi8KKwkubG9uZwkuTHJjbHNfcmV0ZmxvYXQtLkxyY2xzX3N0b3JlX3RhYmxlCS8qIEZGSV9UWVBFX0ZMT0FUICovCisJLmxvbmcJLkxyY2xzX3JldGRvdWJsZS0uTHJjbHNfc3RvcmVfdGFibGUJLyogRkZJX1RZUEVfRE9VQkxFICovCisJLmxvbmcJLkxyY2xzX3JldGxkb3VibGUtLkxyY2xzX3N0b3JlX3RhYmxlCS8qIEZGSV9UWVBFX0xPTkdET1VCTEUgKi8KKwkubG9uZwkuTHJjbHNfcmV0dWludDgtLkxyY2xzX3N0b3JlX3RhYmxlCS8qIEZGSV9UWVBFX1VJTlQ4ICovCisJLmxvbmcJLkxyY2xzX3JldHNpbnQ4LS5McmNsc19zdG9yZV90YWJsZQkvKiBGRklfVFlQRV9TSU5UOCAqLworCS5sb25nCS5McmNsc19yZXR1aW50MTYtLkxyY2xzX3N0b3JlX3RhYmxlCS8qIEZGSV9UWVBFX1VJTlQxNiAqLworCS5sb25nCS5McmNsc19yZXRzaW50MTYtLkxyY2xzX3N0b3JlX3RhYmxlCS8qIEZGSV9UWVBFX1NJTlQxNiAqLworCS5sb25nCS5McmNsc19yZXRpbnQtLkxyY2xzX3N0b3JlX3RhYmxlCS8qIEZGSV9UWVBFX1VJTlQzMiAqLworCS5sb25nCS5McmNsc19yZXRpbnQtLkxyY2xzX3N0b3JlX3RhYmxlCS8qIEZGSV9UWVBFX1NJTlQzMiAqLworCS5sb25nCS5McmNsc19yZXRsbG9uZy0uTHJjbHNfc3RvcmVfdGFibGUJLyogRkZJX1RZUEVfVUlOVDY0ICovCisJLmxvbmcJLkxyY2xzX3JldGxsb25nLS5McmNsc19zdG9yZV90YWJsZQkvKiBGRklfVFlQRV9TSU5UNjQgKi8KKwkubG9uZwkuTHJjbHNfcmV0c3RydWN0LS5McmNsc19zdG9yZV90YWJsZQkvKiBGRklfVFlQRV9TVFJVQ1QgKi8KKwkubG9uZwkuTHJjbHNfcmV0aW50LS5McmNsc19zdG9yZV90YWJsZQkvKiBGRklfVFlQRV9QT0lOVEVSICovCisJLmxvbmcJLkxyY2xzX3JldHN0cnVjdDEtLkxyY2xzX3N0b3JlX3RhYmxlCS8qIEZGSV9UWVBFX1NNQUxMX1NUUlVDVF8xQiAqLworCS5sb25nCS5McmNsc19yZXRzdHJ1Y3QyLS5McmNsc19zdG9yZV90YWJsZQkvKiBGRklfVFlQRV9TTUFMTF9TVFJVQ1RfMkIgKi8KKwkubG9uZwkuTHJjbHNfcmV0c3RydWN0NC0uTHJjbHNfc3RvcmVfdGFibGUJLyogRkZJX1RZUEVfU01BTExfU1RSVUNUXzRCICovCisJLmxvbmcJLkxyY2xzX3JldHN0cnVjdC0uTHJjbHNfc3RvcmVfdGFibGUJLyogRkZJX1RZUEVfTVNfU1RSVUNUICovCiAxOgotCWFkZAklZWF4LCAlZWF4Ci0JYWRkCSVlYXgsICVlYXgKKwlzaGwJJDIsICVlYXgKKwlhZGQJKCVlc3ApLCVlYXgKKwltb3YJKCVlYXgpLCVlYXgKIAlhZGQJKCVlc3ApLCVlYXgKIAlhZGQJJDQsICVlc3AKLQlqbXAJKiglZWF4KQorCWptcAkqJWVheAogCiAJLyogU2lnbi96ZXJvIGV4dGVuZCBhcyBhcHByb3ByaWF0ZS4gICovCiAuTHJjbHNfcmV0c2ludDg6CkBAIC05MjUsMTEgKzk5OCwxMyBAQAogCiAgICAgICAgICMgVGhpcyBhc3N1bWVzIHdlIGFyZSB1c2luZyBnYXMuCiAJLmJhbGlnbgkxNgotCS5nbG9ibAlfZmZpX2Nsb3N1cmVfU1REQ0FMTAotI2lmbmRlZiBfX09TMl9fCitGRklfSElEREVOKGZmaV9jbG9zdXJlX1NURENBTEwpCisJLmdsb2JsCVVTQ09SRV9TWU1CT0woZmZpX2Nsb3N1cmVfU1REQ0FMTCkKKyNpZiBkZWZpbmVkKFg4Nl9XSU4zMikgJiYgIWRlZmluZWQoX19PUzJfXykKIAkuZGVmCV9mZmlfY2xvc3VyZV9TVERDQUxMOwkuc2NsCTI7CS50eXBlCTMyOwkuZW5kZWYKICNlbmRpZgotX2ZmaV9jbG9zdXJlX1NURENBTEw6CitVU0NPUkVfU1lNQk9MKGZmaV9jbG9zdXJlX1NURENBTEwpOgorLmZmaV9jbG9zdXJlX1NURENBTExfaW50ZXJuYWw6CiAuTEZCNToKIAlwdXNobAklZWJwCiAuTENGSTk6CkBAIC05NDIsMzYgKzEwMTcsNDggQEAKIAltb3ZsCSVlZHgsIDQoJWVzcCkJLyogYXJncyAqLwogCWxlYWwJLTEyKCVlYnApLCAlZWR4CiAJbW92bAklZWR4LCAoJWVzcCkJLyogJnJlc3AgKi8KLQljYWxsCV9mZmlfY2xvc3VyZV9TWVNWX2lubmVyCisjaWYgZGVmaW5lZChIQVZFX0hJRERFTl9WSVNJQklMSVRZX0FUVFJJQlVURSkgfHwgIWRlZmluZWQoX19QSUNfXykKKwljYWxsCVVTQ09SRV9TWU1CT0woZmZpX2Nsb3N1cmVfU1lTVl9pbm5lcikKKyNlbGlmIGRlZmluZWQoWDg2X0RBUldJTikKKwljYWxsbAlMX2ZmaV9jbG9zdXJlX1NZU1ZfaW5uZXIkc3R1YgorI2Vsc2UKKwltb3ZsCSVlYngsIDgoJWVzcCkKKwljYWxsCTFmCisxOglwb3BsCSVlYngKKwlhZGRsCSRfR0xPQkFMX09GRlNFVF9UQUJMRV8rWy4tMWJdLCAlZWJ4CisJY2FsbAlmZmlfY2xvc3VyZV9TWVNWX2lubmVyQFBMVAorCW1vdmwJOCglZXNwKSwgJWVieAorI2VuZGlmCiAJbW92bAktMTIoJWVicCksICVlY3gKIDA6CiAJY2FsbAkxZgogCSMgRG8gbm90IGluc2VydCBhbnl0aGluZyBoZXJlIGJldHdlZW4gdGhlIGNhbGwgYW5kIHRoZSBqdW1wIHRhYmxlLgogLkxzY2xzX3N0b3JlX3RhYmxlOgotCS5sb25nCS5Mc2Nsc19ub3JldHZhbAkJLyogRkZJX1RZUEVfVk9JRCAqLwotCS5sb25nCS5Mc2Nsc19yZXRpbnQJCS8qIEZGSV9UWVBFX0lOVCAqLwotCS5sb25nCS5Mc2Nsc19yZXRmbG9hdAkJLyogRkZJX1RZUEVfRkxPQVQgKi8KLQkubG9uZwkuTHNjbHNfcmV0ZG91YmxlCS8qIEZGSV9UWVBFX0RPVUJMRSAqLwotCS5sb25nCS5Mc2Nsc19yZXRsZG91YmxlCS8qIEZGSV9UWVBFX0xPTkdET1VCTEUgKi8KLQkubG9uZwkuTHNjbHNfcmV0dWludDgJCS8qIEZGSV9UWVBFX1VJTlQ4ICovCi0JLmxvbmcJLkxzY2xzX3JldHNpbnQ4CQkvKiBGRklfVFlQRV9TSU5UOCAqLwotCS5sb25nCS5Mc2Nsc19yZXR1aW50MTYJLyogRkZJX1RZUEVfVUlOVDE2ICovCi0JLmxvbmcJLkxzY2xzX3JldHNpbnQxNgkvKiBGRklfVFlQRV9TSU5UMTYgKi8KLQkubG9uZwkuTHNjbHNfcmV0aW50CQkvKiBGRklfVFlQRV9VSU5UMzIgKi8KLQkubG9uZwkuTHNjbHNfcmV0aW50CQkvKiBGRklfVFlQRV9TSU5UMzIgKi8KLQkubG9uZwkuTHNjbHNfcmV0bGxvbmcJCS8qIEZGSV9UWVBFX1VJTlQ2NCAqLwotCS5sb25nCS5Mc2Nsc19yZXRsbG9uZwkJLyogRkZJX1RZUEVfU0lOVDY0ICovCi0JLmxvbmcJLkxzY2xzX3JldHN0cnVjdAkvKiBGRklfVFlQRV9TVFJVQ1QgKi8KLQkubG9uZwkuTHNjbHNfcmV0aW50CQkvKiBGRklfVFlQRV9QT0lOVEVSICovCi0JLmxvbmcJLkxzY2xzX3JldHN0cnVjdDEJLyogRkZJX1RZUEVfU01BTExfU1RSVUNUXzFCICovCi0JLmxvbmcJLkxzY2xzX3JldHN0cnVjdDIJLyogRkZJX1RZUEVfU01BTExfU1RSVUNUXzJCICovCi0JLmxvbmcJLkxzY2xzX3JldHN0cnVjdDQJLyogRkZJX1RZUEVfU01BTExfU1RSVUNUXzRCICovCisJLmxvbmcJLkxzY2xzX25vcmV0dmFsLS5Mc2Nsc19zdG9yZV90YWJsZQkvKiBGRklfVFlQRV9WT0lEICovCisJLmxvbmcJLkxzY2xzX3JldGludC0uTHNjbHNfc3RvcmVfdGFibGUJLyogRkZJX1RZUEVfSU5UICovCisJLmxvbmcJLkxzY2xzX3JldGZsb2F0LS5Mc2Nsc19zdG9yZV90YWJsZQkvKiBGRklfVFlQRV9GTE9BVCAqLworCS5sb25nCS5Mc2Nsc19yZXRkb3VibGUtLkxzY2xzX3N0b3JlX3RhYmxlCS8qIEZGSV9UWVBFX0RPVUJMRSAqLworCS5sb25nCS5Mc2Nsc19yZXRsZG91YmxlLS5Mc2Nsc19zdG9yZV90YWJsZQkvKiBGRklfVFlQRV9MT05HRE9VQkxFICovCisJLmxvbmcJLkxzY2xzX3JldHVpbnQ4LS5Mc2Nsc19zdG9yZV90YWJsZQkvKiBGRklfVFlQRV9VSU5UOCAqLworCS5sb25nCS5Mc2Nsc19yZXRzaW50OC0uTHNjbHNfc3RvcmVfdGFibGUJLyogRkZJX1RZUEVfU0lOVDggKi8KKwkubG9uZwkuTHNjbHNfcmV0dWludDE2LS5Mc2Nsc19zdG9yZV90YWJsZQkvKiBGRklfVFlQRV9VSU5UMTYgKi8KKwkubG9uZwkuTHNjbHNfcmV0c2ludDE2LS5Mc2Nsc19zdG9yZV90YWJsZQkvKiBGRklfVFlQRV9TSU5UMTYgKi8KKwkubG9uZwkuTHNjbHNfcmV0aW50LS5Mc2Nsc19zdG9yZV90YWJsZQkvKiBGRklfVFlQRV9VSU5UMzIgKi8KKwkubG9uZwkuTHNjbHNfcmV0aW50LS5Mc2Nsc19zdG9yZV90YWJsZQkvKiBGRklfVFlQRV9TSU5UMzIgKi8KKwkubG9uZwkuTHNjbHNfcmV0bGxvbmctLkxzY2xzX3N0b3JlX3RhYmxlCS8qIEZGSV9UWVBFX1VJTlQ2NCAqLworCS5sb25nCS5Mc2Nsc19yZXRsbG9uZy0uTHNjbHNfc3RvcmVfdGFibGUJLyogRkZJX1RZUEVfU0lOVDY0ICovCisJLmxvbmcJLkxzY2xzX3JldHN0cnVjdC0uTHNjbHNfc3RvcmVfdGFibGUJLyogRkZJX1RZUEVfU1RSVUNUICovCisJLmxvbmcJLkxzY2xzX3JldGludC0uTHNjbHNfc3RvcmVfdGFibGUJLyogRkZJX1RZUEVfUE9JTlRFUiAqLworCS5sb25nCS5Mc2Nsc19yZXRzdHJ1Y3QxLS5Mc2Nsc19zdG9yZV90YWJsZQkvKiBGRklfVFlQRV9TTUFMTF9TVFJVQ1RfMUIgKi8KKwkubG9uZwkuTHNjbHNfcmV0c3RydWN0Mi0uTHNjbHNfc3RvcmVfdGFibGUJLyogRkZJX1RZUEVfU01BTExfU1RSVUNUXzJCICovCisJLmxvbmcJLkxzY2xzX3JldHN0cnVjdDQtLkxzY2xzX3N0b3JlX3RhYmxlCS8qIEZGSV9UWVBFX1NNQUxMX1NUUlVDVF80QiAqLwogMToKLQlhZGQJJWVheCwgJWVheAotCWFkZAklZWF4LCAlZWF4CisJc2hsCSQyLCAlZWF4CisJYWRkCSglZXNwKSwlZWF4CisJbW92CSglZWF4KSwlZWF4CiAJYWRkCSglZXNwKSwlZWF4CiAJYWRkCSQ0LCAlZXNwCi0Jam1wCSooJWVheCkKKwlqbXAJKiVlYXgKIAogCS8qIFNpZ24vemVybyBleHRlbmQgYXMgYXBwcm9wcmlhdGUuICAqLwogLkxzY2xzX3JldHNpbnQ4OgpAQCAtMTAzMCwxMSArMTExNywzMCBAQAogLkxzY2xzX2VwaWxvZ3VlOgogCW1vdmwJJWVicCwgJWVzcAogCXBvcGwJJWVicAotCXJldAorCXBvcGwJJWVjeAorCXBvcGwJJWVkeAorCW1vdmwJKENMT1NVUkVfQ0lGX09GRlNFVC0xMCkoJWVjeCksICVlY3gKKwlhZGRsCUNJRl9CWVRFU19PRkZTRVQoJWVjeCksICVlc3AKKwltb3ZsCUNJRl9BQklfT0ZGU0VUKCVlY3gpLCAlZWN4CisJY21wbAkkMywgJWVjeCAvKiBGRklfVEhJU0NBTEwgKi8KKwlqZQkxZgorCWNtcGwJJDQsICVlY3ggLyogRkZJX0ZBU1RDQUxMICovCisJam5lCTJmCisKKwlhZGRsCSQ0LCAlZXNwCisxOglhZGRsCSQ0LCAlZXNwCisyOglqbXAJKiVlZHgKIC5mZmlfY2xvc3VyZV9TVERDQUxMX2VuZDoKIC5MRkU1OgogCi0jaWZuZGVmIF9fT1MyX18KKyNpZiBkZWZpbmVkKFg4Nl9EQVJXSU4pCisuc2VjdGlvbiBfX0lNUE9SVCxfX2p1bXBfdGFibGUsc3ltYm9sX3N0dWJzLHNlbGZfbW9kaWZ5aW5nX2NvZGUrcHVyZV9pbnN0cnVjdGlvbnMsNQorTF9mZmlfY2xvc3VyZV9TWVNWX2lubmVyJHN0dWI6CisJLmluZGlyZWN0X3N5bWJvbCBfZmZpX2Nsb3N1cmVfU1lTVl9pbm5lcgorCWhsdCA7IGhsdCA7IGhsdCA7IGhsdCA7IGhsdAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKFg4Nl9XSU4zMikgJiYgIWRlZmluZWQoX19PUzJfXykKIAkuc2VjdGlvbgkuZWhfZnJhbWUsInciCiAjZW5kaWYKIC5MZnJhbWUxOgpAQCAtMTA5NCw3ICsxMjAwLDYgQEAKIAkuYWxpZ24gNAogLkxFRkRFMToKIAotCiAuTFNGREUzOgogCS5sb25nCS5MRUZERTMtLkxBU0ZERTMJLyogRkRFIExlbmd0aCAqLwogLkxBU0ZERTM6CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3N0YW1wLWguaW4gYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3N0YW1wLWguaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3ODhmNzAuLjAwMDAwMDAKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zdGFtcC1oLmluCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotdGltZXN0YW1wCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9NYWtlZmlsZS5hbSBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL01ha2VmaWxlLmFtCmluZGV4IGVkYzZlNjEuLmRhMTA0NjUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL01ha2VmaWxlLmFtCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL01ha2VmaWxlLmFtCkBAIC0yLDE3ICsyLDYgQEAKIAogQVVUT01BS0VfT1BUSU9OUyA9IGZvcmVpZ24gZGVqYWdudQogCi0jIFNldHVwIHRoZSB0ZXN0aW5nIGZyYW1ld29yaywgaWYgeW91IGhhdmUgb25lCi1FWFBFQ1QgPSBgaWYgWyAtZiAkKHRvcF9idWlsZGRpcikvLi4vZXhwZWN0L2V4cGVjdCBdIDsgdGhlbiBcCi0gICAgICAgICAgICBlY2hvICQodG9wX2J1aWxkZGlyKS8uLi9leHBlY3QvZXhwZWN0IDsgXAotICAgICAgICAgIGVsc2UgZWNobyBleHBlY3QgOyBmaWAKLQotUlVOVEVTVCA9IGBpZiBbIC1mICQodG9wX3NyY2RpcikvLi4vZGVqYWdudS9ydW50ZXN0IF0gOyB0aGVuIFwKLQkgICAgICAgZWNobyAkKHRvcF9zcmNkaXIpLy4uL2RlamFnbnUvcnVudGVzdCA7IFwKLQkgICAgZWxzZSBlY2hvIHJ1bnRlc3Q7IGZpYAotCi1BTV9SVU5URVNURkxBR1MgPQotCiBFWFRSQV9ERUpBR05VX1NJVEVfQ09ORklHPS4uL2xvY2FsLmV4cAogCiBDTEVBTkZJTEVTID0gKi5leGUgY29yZSogKi5sb2cgKi5zdW0KQEAgLTIwLDcgKzksNyBAQAogRVhUUkFfRElTVCA9IGNvbmZpZy9kZWZhdWx0LmV4cCBsaWJmZmkuY2FsbC9jbHNfMTlieXRlLmMJCVwKIGxpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlX3NwbGl0LmMJCQkJXAogbGliZmZpLmNhbGwvY2xvc3VyZV9sb2NfZm4wLmMgbGliZmZpLmNhbGwvY2xzX3NjaGFyLmMJCQlcCi1saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMS5jIGxpYmZmaS5jYWxsL21hbnkyX3dpbjMyLmMJCQlcCitsaWJmZmkuY2FsbC9jbG9zdXJlX2ZuMS5jIFwKIGxpYmZmaS5jYWxsL3JldHVybl91bC5jIGxpYmZmaS5jYWxsL2Nsc19hbGlnbl9kb3VibGUuYwkJCVwKIGxpYmZmaS5jYWxsL3JldHVybl9mbDIuYyBsaWJmZmkuY2FsbC9jbHNfMV8xYnl0ZS5jCQkJXAogbGliZmZpLmNhbGwvY2xzXzY0Ynl0ZS5jIGxpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q3LmMJCQlcCkBAIC0zMCw3ICsxOSw3IEBACiBsaWJmZmkuY2FsbC9jbHNfM2J5dGUxLmMgbGliZmZpLmNhbGwvY2xzXzE2Ynl0ZS5jCQkJXAogbGliZmZpLmNhbGwvc3RydWN0OC5jIGxpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q4LmMJCQlcCiBsaWJmZmkuY2FsbC9jbHNfbXVsdGlfc3Nob3J0LmMgbGliZmZpLmNhbGwvY2xzXzNieXRlMi5jCQkJXAotbGliZmZpLmNhbGwvZmFzdHRoaXMyX3dpbjMyLmMgbGliZmZpLmNhbGwvY2xzX3BvaW50ZXIuYwkJCVwKK2xpYmZmaS5jYWxsL2Nsc19wb2ludGVyLmMJCQlcCiBsaWJmZmkuY2FsbC9lcnJfYmFkX3R5cGVkZWYuYyBsaWJmZmkuY2FsbC9jbHNfNF8xYnl0ZS5jCQkJXAogbGliZmZpLmNhbGwvY2xzXzlieXRlMi5jIGxpYmZmaS5jYWxsL2Nsc19tdWx0aV9zY2hhci5jCQkJXAogbGliZmZpLmNhbGwvc3RyZXRfbWVkaXVtMi5jIGxpYmZmaS5jYWxsL2Nsc181XzFfYnl0ZS5jCQkJXApAQCAtNDYsMTYgKzM1LDE2IEBACiBsaWJmZmkuY2FsbC9yZXR1cm5fZmwzLmMgbGliZmZpLmNhbGwvc3RyZXRfbWVkaXVtLmMJCQlcCiBsaWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Ni5jIGxpYmZmaS5jYWxsL2Nsb3N1cmVfZm4zLmMJCQlcCiBsaWJmZmkuY2FsbC9mbG9hdDMuYyBsaWJmZmkuY2FsbC9tYW55Mi5jCQkJCVwKLWxpYmZmaS5jYWxsL2Nsb3N1cmVfc3RkY2FsbC5jIGxpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50MTYuYwkJXAorbGliZmZpLmNhbGwvY2xvc3VyZV9zaW1wbGUuYyBsaWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDE2LmMJCVwKIGxpYmZmaS5jYWxsL2Nsc185Ynl0ZTEuYyBsaWJmZmkuY2FsbC9jbG9zdXJlX2ZuNi5jCQkJXAogbGliZmZpLmNhbGwvY2xzX2RvdWJsZV92YS5jIGxpYmZmaS5jYWxsL2Nsc19hbGlnbl9wb2ludGVyLmMJCVwKIGxpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlLmMgbGliZmZpLmNhbGwvY2xvc3VyZV9mbjIuYwkJXAotbGliZmZpLmNhbGwvY2xzX3NzaG9ydC5jIGxpYmZmaS5jYWxsL21hbnlfd2luMzIuYwkJCVwKK2xpYmZmaS5jYWxsL2Nsc19zc2hvcnQuYyBcCiBsaWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0LmMgbGliZmZpLmNhbGwvY2xzXzIwYnl0ZS5jCQkJXAogbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGUuYyBsaWJmZmkuY2FsbC9jbHNfbXVsdGlfdWNoYXIuYwkJXAotbGliZmZpLmNhbGwvcmV0dXJuX3VjLmMgbGliZmZpLmNhbGwvY2xvc3VyZV90aGlzY2FsbC5jCQkJXAorbGliZmZpLmNhbGwvcmV0dXJuX3VjLmMgXAogbGliZmZpLmNhbGwvY2xzXzE4Ynl0ZS5jIGxpYmZmaS5jYWxsL2Nsc184Ynl0ZS5jCQkJXAotbGliZmZpLmNhbGwvcHJvbW90aW9uLmMgbGliZmZpLmNhbGwvc3RydWN0MV93aW4zMi5jCQkJXAorbGliZmZpLmNhbGwvcHJvbW90aW9uLmMgXAogbGliZmZpLmNhbGwvcmV0dXJuX2RibC5jIGxpYmZmaS5jYWxsL2Nsc18yNGJ5dGUuYwkJCVwKIGxpYmZmaS5jYWxsL3N0cnVjdDQuYyBsaWJmZmkuY2FsbC9jbHNfNmJ5dGUuYwkJCQlcCiBsaWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDMyLmMgbGliZmZpLmNhbGwvZmxvYXQuYwkJCVwKQEAgLTYzLDcgKzUyLDcgQEAKIGxpYmZmaS5jYWxsL3JldHVybl9kYmwxLmMgbGliZmZpLmNhbGwvY2xzXzNfMWJ5dGUuYwkJCVwKIGxpYmZmaS5jYWxsL2Nsc19hbGlnbl9mbG9hdC5jIGxpYmZmaS5jYWxsL3JldHVybl9mbDEuYwkJCVwKIGxpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QxMC5jIGxpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q1LmMJCVwKLWxpYmZmaS5jYWxsL2Zhc3R0aGlzMV93aW4zMi5jIGxpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50NjQuYwkJXAorbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQ2NC5jCQlcCiBsaWJmZmkuY2FsbC9zdHJldF9sYXJnZTIuYyBsaWJmZmkuY2FsbC9yZXR1cm5fc2wuYwkJCVwKIGxpYmZmaS5jYWxsL2Nsb3N1cmVfZm4wLmMgbGliZmZpLmNhbGwvY2xzXzVieXRlLmMJCQlcCiBsaWJmZmkuY2FsbC9jbHNfMmJ5dGUuYyBsaWJmZmkuY2FsbC9mbG9hdDIuYwkJCQlcCkBAIC03NSwyMCArNjQsMjIgQEAKIGxpYmZmaS5jYWxsL3B5b2JqYy10Yy5jIGxpYmZmaS5jYWxsL2Nsc19tdWx0aV91c2hvcnRjaGFyLmMJCVwKIGxpYmZmaS5jYWxsL3N0cnVjdDEuYyBsaWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0OS5jCQkJXAogbGliZmZpLmNhbGwvaHVnZV9zdHJ1Y3QuYyBsaWJmZmkuY2FsbC9wcm9ibGVtMS5jCQkJXAotbGliZmZpLmNhbGwvZmxvYXQ0LmMgbGliZmZpLmNhbGwvZmFzdHRoaXMzX3dpbjMyLmMJCQlcCi1saWJmZmkuY2FsbC9yZXR1cm5fbGRsLmMgbGliZmZpLmNhbGwvc3RybGVuMl93aW4zMi5jCQkJXAotbGliZmZpLmNhbGwvY2xvc3VyZV9mbjUuYyBsaWJmZmkuY2FsbC9zdHJ1Y3QyX3dpbjMyLmMJCQlcCitsaWJmZmkuY2FsbC9mbG9hdDQuYyBcCitsaWJmZmkuY2FsbC9yZXR1cm5fbGRsLmMgXAorbGliZmZpLmNhbGwvY2xvc3VyZV9mbjUuYyBcCiBsaWJmZmkuY2FsbC9zdHJ1Y3Q2LmMgbGliZmZpLmNhbGwvcmV0dXJuX2xsLmMgbGliZmZpLmNhbGwvc3RydWN0OS5jCVwKIGxpYmZmaS5jYWxsL3JldHVybl9zYy5jIGxpYmZmaS5jYWxsL3N0cnVjdDcuYwkJCQlcCiBsaWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDY0LmMgbGliZmZpLmNhbGwvY2xzXzRieXRlLmMJCQlcCi1saWJmZmkuY2FsbC9zdHJsZW5fd2luMzIuYyBsaWJmZmkuY2FsbC9jbHNfNl8xX2J5dGUuYwkJCVwKLWxpYmZmaS5jYWxsL2Nsc183XzFfYnl0ZS5jIGxpYmZmaS5zcGVjaWFsL3Vud2luZHRlc3QuY2MJCQlcCi1saWJmZmkuc3BlY2lhbC9zcGVjaWFsLmV4cCBsaWJmZmkuc3BlY2lhbC91bndpbmR0ZXN0X2ZmaV9jYWxsLmNjCVwKLWxpYmZmaS5zcGVjaWFsL2ZmaXRlc3RjeHguaCBsaWIvd3JhcHBlci5leHAgbGliL3RhcmdldC1saWJwYXRoLmV4cAlcCitsaWJmZmkuY2FsbC9jbHNfNl8xX2J5dGUuYwkJCVwKK2xpYmZmaS5jYWxsL2Nsc183XzFfYnl0ZS5jIGxpYmZmaS5jYWxsL3Vud2luZHRlc3QuY2MJCQlcCitsaWJmZmkuY2FsbC91bndpbmR0ZXN0X2ZmaV9jYWxsLmNjCVwKK2xpYi93cmFwcGVyLmV4cCBsaWIvdGFyZ2V0LWxpYnBhdGguZXhwCVwKIGxpYi9saWJmZmkuZXhwIGxpYmZmaS5jYWxsL2Nsc19zdHJ1Y3RfdmExLmMJCQkJXAogbGliZmZpLmNhbGwvY2xzX3VjaGFyX3ZhLmMgbGliZmZpLmNhbGwvY2xzX3VpbnRfdmEuYwkJCVwKIGxpYmZmaS5jYWxsL2Nsc191bG9uZ192YS5jIGxpYmZmaS5jYWxsL2Nsc191c2hvcnRfdmEuYwkJCVwKIGxpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QxMS5jIGxpYmZmaS5jYWxsL3VuaW5pdGlhbGl6ZWQuYwkJXAogbGliZmZpLmNhbGwvdmFfMS5jIGxpYmZmaS5jYWxsL3ZhX3N0cnVjdDEuYyBsaWJmZmkuY2FsbC92YV9zdHJ1Y3QyLmMJXAotbGliZmZpLmNhbGwvdmFfc3RydWN0My5jCi0KK2xpYmZmaS5jYWxsL3ZhX3N0cnVjdDMuYyBcCitsaWJmZmkuY2FsbC9zdHJsZW4yLmMgXAorbGliZmZpLmNhbGwvc3RybGVuMy5jIFwKK2xpYmZmaS5jYWxsL3N0cmxlbjQuYwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvTWFrZWZpbGUuaW4gYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9NYWtlZmlsZS5pbgppbmRleCBhM2JhMDY2Li45OWUyMjZjIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9NYWtlZmlsZS5pbgorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9NYWtlZmlsZS5pbgpAQCAtMSw3ICsxLDcgQEAKLSMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTIuMiBmcm9tIE1ha2VmaWxlLmFtLgorIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xMy40IGZyb20gTWFrZWZpbGUuYW0uCiAjIEBjb25maWd1cmVfaW5wdXRACiAKLSMgQ29weXJpZ2h0IChDKSAxOTk0LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIENvcHlyaWdodCAoQykgMTk5NC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogCiAjIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgogIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LApAQCAtMTQsMjMgKzE0LDUxIEBACiAKIEBTRVRfTUFLRUAKIFZQQVRIID0gQHNyY2RpckAKLWFtX19tYWtlX2RyeXJ1biA9IFwKLSAgeyBcCi0gICAgYW1fX2RyeT1ubzsgXAorYW1fX2lzX2dudV9tYWtlID0gdGVzdCAtbiAnJChNQUtFRklMRV9MSVNUKScgJiYgdGVzdCAtbiAnJChNQUtFTEVWRUwpJworYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbiA9IFwKKyAgY2FzZSAkJHt0YXJnZXRfb3B0aW9uLX0gaW4gXAorICAgICAgPykgOzsgXAorICAgICAgKikgZWNobyAiYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbjogaW50ZXJuYWwgZXJyb3I6IGludmFsaWQiIFwKKyAgICAgICAgICAgICAgInRhcmdldCBvcHRpb24gJyQke3RhcmdldF9vcHRpb24tfScgc3BlY2lmaWVkIiA+JjI7IFwKKyAgICAgICAgIGV4aXQgMTs7IFwKKyAgZXNhYzsgXAorICBoYXNfb3B0PW5vOyBcCisgIHNhbmVfbWFrZWZsYWdzPSQkTUFLRUZMQUdTOyBcCisgIGlmICQoYW1fX2lzX2dudV9tYWtlKTsgdGhlbiBcCisgICAgc2FuZV9tYWtlZmxhZ3M9JCRNRkxBR1M7IFwKKyAgZWxzZSBcCiAgICAgY2FzZSAkJE1BS0VGTEFHUyBpbiBcCiAgICAgICAqXFxbXCBcCV0qKSBcCi0gICAgICAgIGVjaG8gJ2FtLS1lY2hvOiA7IEBlY2hvICJBTSIgIE9LJyB8ICQoTUFLRSkgLWYgLSAyPi9kZXYvbnVsbCBcCi0gICAgICAgICAgfCBncmVwICdeQU0gT0skJCcgPi9kZXYvbnVsbCB8fCBhbV9fZHJ5PXllczs7IFwKLSAgICAgICopIFwKLSAgICAgICAgZm9yIGFtX19mbGcgaW4gJCRNQUtFRkxBR1M7IGRvIFwKLSAgICAgICAgICBjYXNlICQkYW1fX2ZsZyBpbiBcCi0gICAgICAgICAgICAqPSp8LS0qKSA7OyBcCi0gICAgICAgICAgICAqbiopIGFtX19kcnk9eWVzOyBicmVhazs7IFwKLSAgICAgICAgICBlc2FjOyBcCi0gICAgICAgIGRvbmU7OyBcCisgICAgICAgIGJzPVxcOyBcCisgICAgICAgIHNhbmVfbWFrZWZsYWdzPWBwcmludGYgJyVzXG4nICIkJE1BS0VGTEFHUyIgXAorICAgICAgICAgIHwgc2VkICJzLyQkYnMkJGJzWyQkYnMgJCRicwldKi8vZyJgOzsgXAogICAgIGVzYWM7IFwKLSAgICB0ZXN0ICQkYW1fX2RyeSA9IHllczsgXAotICB9CisgIGZpOyBcCisgIHNraXBfbmV4dD1ubzsgXAorICBzdHJpcF90cmFpbG9wdCAoKSBcCisgIHsgXAorICAgIGZsZz1gcHJpbnRmICclc1xuJyAiJCRmbGciIHwgc2VkICJzLyQkMS4qJCQvLyJgOyBcCisgIH07IFwKKyAgZm9yIGZsZyBpbiAkJHNhbmVfbWFrZWZsYWdzOyBkbyBcCisgICAgdGVzdCAkJHNraXBfbmV4dCA9IHllcyAmJiB7IHNraXBfbmV4dD1ubzsgY29udGludWU7IH07IFwKKyAgICBjYXNlICQkZmxnIGluIFwKKyAgICAgICo9KnwtLSopIGNvbnRpbnVlOzsgXAorICAgICAgICAtKkkpIHN0cmlwX3RyYWlsb3B0ICdJJzsgc2tpcF9uZXh0PXllczs7IFwKKyAgICAgIC0qST8qKSBzdHJpcF90cmFpbG9wdCAnSSc7OyBcCisgICAgICAgIC0qTykgc3RyaXBfdHJhaWxvcHQgJ08nOyBza2lwX25leHQ9eWVzOzsgXAorICAgICAgLSpPPyopIHN0cmlwX3RyYWlsb3B0ICdPJzs7IFwKKyAgICAgICAgLSpsKSBzdHJpcF90cmFpbG9wdCAnbCc7IHNraXBfbmV4dD15ZXM7OyBcCisgICAgICAtKmw/Kikgc3RyaXBfdHJhaWxvcHQgJ2wnOzsgXAorICAgICAgLVtkRURtXSkgc2tpcF9uZXh0PXllczs7IFwKKyAgICAgIC1bSlRdKSBza2lwX25leHQ9eWVzOzsgXAorICAgIGVzYWM7IFwKKyAgICBjYXNlICQkZmxnIGluIFwKKyAgICAgICokJHRhcmdldF9vcHRpb24qKSBoYXNfb3B0PXllczsgYnJlYWs7OyBcCisgICAgZXNhYzsgXAorICBkb25lOyBcCisgIHRlc3QgJCRoYXNfb3B0ID0geWVzCithbV9fbWFrZV9kcnlydW4gPSAodGFyZ2V0X29wdGlvbj1uOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQorYW1fX21ha2Vfa2VlcGdvaW5nID0gKHRhcmdldF9vcHRpb249azsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKIHBrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAogcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACiBwa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACkBAIC01MSw3ICs3OSw3IEBACiBob3N0X3RyaXBsZXQgPSBAaG9zdEAKIHRhcmdldF90cmlwbGV0ID0gQHRhcmdldEAKIHN1YmRpciA9IHRlc3RzdWl0ZQotRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChzcmNkaXIpL01ha2VmaWxlLmluCitESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHNyY2RpcikvTWFrZWZpbGUuYW0KIEFDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKIGFtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL200L2FzbWNmaS5tNCBcCiAJJCh0b3Bfc3JjZGlyKS9tNC9heF9hcHBlbmRfZmxhZy5tNCBcCkBAIC03Myw2ICsxMDEsMTggQEAKIENPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvZmZpY29uZmlnLmgKIENPTkZJR19DTEVBTl9GSUxFUyA9CiBDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQorQU1fVl9QID0gJChhbV9fdl9QX0BBTV9WQCkKK2FtX192X1BfID0gJChhbV9fdl9QX0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfUF8wID0gZmFsc2UKK2FtX192X1BfMSA9IDoKK0FNX1ZfR0VOID0gJChhbV9fdl9HRU5fQEFNX1ZAKQorYW1fX3ZfR0VOXyA9ICQoYW1fX3ZfR0VOX0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAgICIgJEA7CithbV9fdl9HRU5fMSA9IAorQU1fVl9hdCA9ICQoYW1fX3ZfYXRfQEFNX1ZAKQorYW1fX3ZfYXRfID0gJChhbV9fdl9hdF9AQU1fREVGQVVMVF9WQCkKK2FtX192X2F0XzAgPSBACithbV9fdl9hdF8xID0gCiBTT1VSQ0VTID0KIERJU1RfU09VUkNFUyA9CiBhbV9fY2FuX3J1bl9pbnN0YWxsaW5mbyA9IFwKQEAgLTgwLDE0ICsxMjAsMTggQEAKICAgICBufG5vfE5PKSBmYWxzZTs7IFwKICAgICAqKSAoaW5zdGFsbC1pbmZvIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOzsgXAogICBlc2FjCithbV9fdGFnZ2VkX2ZpbGVzID0gJChIRUFERVJTKSAkKFNPVVJDRVMpICQoVEFHU19GSUxFUykgJChMSVNQKQogREVKQVRPT0wgPSAkKFBBQ0tBR0UpCiBSVU5URVNUREVGQVVMVEZMQUdTID0gLS10b29sICQkdG9vbCAtLXNyY2RpciAkJHNyY2RpcgorRVhQRUNUID0gZXhwZWN0CitSVU5URVNUID0gcnVudGVzdAogRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKIEFDTE9DQUwgPSBAQUNMT0NBTEAKIEFMTE9DQSA9IEBBTExPQ0FACiBBTVRBUiA9IEBBTVRBUkAKK0FNX0RFRkFVTFRfVkVSQk9TSVRZID0gQEFNX0RFRkFVTFRfVkVSQk9TSVRZQAogQU1fTFRMREZMQUdTID0gQEFNX0xUTERGTEFHU0AKLUFNX1JVTlRFU1RGTEFHUyA9IAorQU1fUlVOVEVTVEZMQUdTID0gQEFNX1JVTlRFU1RGTEFHU0AKIEFSID0gQEFSQAogQVVUT0NPTkYgPSBAQVVUT0NPTkZACiBBVVRPSEVBREVSID0gQEFVVE9IRUFERVJACkBAIC0xMDEsNiArMTQ1LDEwIEBACiBDRkxBR1MgPSBAQ0ZMQUdTQAogQ1BQID0gQENQUEAKIENQUEZMQUdTID0gQENQUEZMQUdTQAorQ1hYID0gQENYWEAKK0NYWENQUCA9IEBDWFhDUFBACitDWFhERVBNT0RFID0gQENYWERFUE1PREVACitDWFhGTEFHUyA9IEBDWFhGTEFHU0AKIENZR1BBVEhfVyA9IEBDWUdQQVRIX1dACiBERUZTID0gQERFRlNACiBERVBESVIgPSBAREVQRElSQApAQCAtMTE2LDYgKzE2NCw3IEBACiBGR1JFUCA9IEBGR1JFUEAKIEdSRVAgPSBAR1JFUEAKIEhBVkVfTE9OR19ET1VCTEUgPSBASEFWRV9MT05HX0RPVUJMRUAKK0hBVkVfTE9OR19ET1VCTEVfVkFSSUFOVCA9IEBIQVZFX0xPTkdfRE9VQkxFX1ZBUklBTlRACiBJTlNUQUxMID0gQElOU1RBTExACiBJTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAogSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKQEAgLTE2Miw2ICsyMTEsNyBAQAogYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACiBhY19jdF9BUiA9IEBhY19jdF9BUkAKIGFjX2N0X0NDID0gQGFjX2N0X0NDQAorYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKIGFjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKIGFtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAogYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKQEAgLTIxNywyMiArMjY3LDEyIEBACiB0b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAogdG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAogQVVUT01BS0VfT1BUSU9OUyA9IGZvcmVpZ24gZGVqYWdudQotCi0jIFNldHVwIHRoZSB0ZXN0aW5nIGZyYW1ld29yaywgaWYgeW91IGhhdmUgb25lCi1FWFBFQ1QgPSBgaWYgWyAtZiAkKHRvcF9idWlsZGRpcikvLi4vZXhwZWN0L2V4cGVjdCBdIDsgdGhlbiBcCi0gICAgICAgICAgICBlY2hvICQodG9wX2J1aWxkZGlyKS8uLi9leHBlY3QvZXhwZWN0IDsgXAotICAgICAgICAgIGVsc2UgZWNobyBleHBlY3QgOyBmaWAKLQotUlVOVEVTVCA9IGBpZiBbIC1mICQodG9wX3NyY2RpcikvLi4vZGVqYWdudS9ydW50ZXN0IF0gOyB0aGVuIFwKLQkgICAgICAgZWNobyAkKHRvcF9zcmNkaXIpLy4uL2RlamFnbnUvcnVudGVzdCA7IFwKLQkgICAgZWxzZSBlY2hvIHJ1bnRlc3Q7IGZpYAotCiBFWFRSQV9ERUpBR05VX1NJVEVfQ09ORklHID0gLi4vbG9jYWwuZXhwCiBDTEVBTkZJTEVTID0gKi5leGUgY29yZSogKi5sb2cgKi5zdW0KIEVYVFJBX0RJU1QgPSBjb25maWcvZGVmYXVsdC5leHAgbGliZmZpLmNhbGwvY2xzXzE5Ynl0ZS5jCQlcCiBsaWJmZmkuY2FsbC9jbHNfYWxpZ25fbG9uZ2RvdWJsZV9zcGxpdC5jCQkJCVwKIGxpYmZmaS5jYWxsL2Nsb3N1cmVfbG9jX2ZuMC5jIGxpYmZmaS5jYWxsL2Nsc19zY2hhci5jCQkJXAotbGliZmZpLmNhbGwvY2xvc3VyZV9mbjEuYyBsaWJmZmkuY2FsbC9tYW55Ml93aW4zMi5jCQkJXAorbGliZmZpLmNhbGwvY2xvc3VyZV9mbjEuYyBcCiBsaWJmZmkuY2FsbC9yZXR1cm5fdWwuYyBsaWJmZmkuY2FsbC9jbHNfYWxpZ25fZG91YmxlLmMJCQlcCiBsaWJmZmkuY2FsbC9yZXR1cm5fZmwyLmMgbGliZmZpLmNhbGwvY2xzXzFfMWJ5dGUuYwkJCVwKIGxpYmZmaS5jYWxsL2Nsc182NGJ5dGUuYyBsaWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Ny5jCQkJXApAQCAtMjQyLDcgKzI4Miw3IEBACiBsaWJmZmkuY2FsbC9jbHNfM2J5dGUxLmMgbGliZmZpLmNhbGwvY2xzXzE2Ynl0ZS5jCQkJXAogbGliZmZpLmNhbGwvc3RydWN0OC5jIGxpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q4LmMJCQlcCiBsaWJmZmkuY2FsbC9jbHNfbXVsdGlfc3Nob3J0LmMgbGliZmZpLmNhbGwvY2xzXzNieXRlMi5jCQkJXAotbGliZmZpLmNhbGwvZmFzdHRoaXMyX3dpbjMyLmMgbGliZmZpLmNhbGwvY2xzX3BvaW50ZXIuYwkJCVwKK2xpYmZmaS5jYWxsL2Nsc19wb2ludGVyLmMJCQlcCiBsaWJmZmkuY2FsbC9lcnJfYmFkX3R5cGVkZWYuYyBsaWJmZmkuY2FsbC9jbHNfNF8xYnl0ZS5jCQkJXAogbGliZmZpLmNhbGwvY2xzXzlieXRlMi5jIGxpYmZmaS5jYWxsL2Nsc19tdWx0aV9zY2hhci5jCQkJXAogbGliZmZpLmNhbGwvc3RyZXRfbWVkaXVtMi5jIGxpYmZmaS5jYWxsL2Nsc181XzFfYnl0ZS5jCQkJXApAQCAtMjU4LDE2ICsyOTgsMTYgQEAKIGxpYmZmaS5jYWxsL3JldHVybl9mbDMuYyBsaWJmZmkuY2FsbC9zdHJldF9tZWRpdW0uYwkJCVwKIGxpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q2LmMgbGliZmZpLmNhbGwvY2xvc3VyZV9mbjMuYwkJCVwKIGxpYmZmaS5jYWxsL2Zsb2F0My5jIGxpYmZmaS5jYWxsL21hbnkyLmMJCQkJXAotbGliZmZpLmNhbGwvY2xvc3VyZV9zdGRjYWxsLmMgbGliZmZpLmNhbGwvY2xzX2FsaWduX3VpbnQxNi5jCQlcCitsaWJmZmkuY2FsbC9jbG9zdXJlX3NpbXBsZS5jIGxpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50MTYuYwkJXAogbGliZmZpLmNhbGwvY2xzXzlieXRlMS5jIGxpYmZmaS5jYWxsL2Nsb3N1cmVfZm42LmMJCQlcCiBsaWJmZmkuY2FsbC9jbHNfZG91YmxlX3ZhLmMgbGliZmZpLmNhbGwvY2xzX2FsaWduX3BvaW50ZXIuYwkJXAogbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGUuYyBsaWJmZmkuY2FsbC9jbG9zdXJlX2ZuMi5jCQlcCi1saWJmZmkuY2FsbC9jbHNfc3Nob3J0LmMgbGliZmZpLmNhbGwvbWFueV93aW4zMi5jCQkJXAorbGliZmZpLmNhbGwvY2xzX3NzaG9ydC5jIFwKIGxpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QuYyBsaWJmZmkuY2FsbC9jbHNfMjBieXRlLmMJCQlcCiBsaWJmZmkuY2FsbC9jbHNfbG9uZ2RvdWJsZS5jIGxpYmZmaS5jYWxsL2Nsc19tdWx0aV91Y2hhci5jCQlcCi1saWJmZmkuY2FsbC9yZXR1cm5fdWMuYyBsaWJmZmkuY2FsbC9jbG9zdXJlX3RoaXNjYWxsLmMJCQlcCitsaWJmZmkuY2FsbC9yZXR1cm5fdWMuYyBcCiBsaWJmZmkuY2FsbC9jbHNfMThieXRlLmMgbGliZmZpLmNhbGwvY2xzXzhieXRlLmMJCQlcCi1saWJmZmkuY2FsbC9wcm9tb3Rpb24uYyBsaWJmZmkuY2FsbC9zdHJ1Y3QxX3dpbjMyLmMJCQlcCitsaWJmZmkuY2FsbC9wcm9tb3Rpb24uYyBcCiBsaWJmZmkuY2FsbC9yZXR1cm5fZGJsLmMgbGliZmZpLmNhbGwvY2xzXzI0Ynl0ZS5jCQkJXAogbGliZmZpLmNhbGwvc3RydWN0NC5jIGxpYmZmaS5jYWxsL2Nsc182Ynl0ZS5jCQkJCVwKIGxpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50MzIuYyBsaWJmZmkuY2FsbC9mbG9hdC5jCQkJXApAQCAtMjc1LDcgKzMxNSw3IEBACiBsaWJmZmkuY2FsbC9yZXR1cm5fZGJsMS5jIGxpYmZmaS5jYWxsL2Nsc18zXzFieXRlLmMJCQlcCiBsaWJmZmkuY2FsbC9jbHNfYWxpZ25fZmxvYXQuYyBsaWJmZmkuY2FsbC9yZXR1cm5fZmwxLmMJCQlcCiBsaWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0MTAuYyBsaWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0NS5jCQlcCi1saWJmZmkuY2FsbC9mYXN0dGhpczFfd2luMzIuYyBsaWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDY0LmMJCVwKK2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50NjQuYwkJXAogbGliZmZpLmNhbGwvc3RyZXRfbGFyZ2UyLmMgbGliZmZpLmNhbGwvcmV0dXJuX3NsLmMJCQlcCiBsaWJmZmkuY2FsbC9jbG9zdXJlX2ZuMC5jIGxpYmZmaS5jYWxsL2Nsc181Ynl0ZS5jCQkJXAogbGliZmZpLmNhbGwvY2xzXzJieXRlLmMgbGliZmZpLmNhbGwvZmxvYXQyLmMJCQkJXApAQCAtMjg3LDIyICszMjcsMjUgQEAKIGxpYmZmaS5jYWxsL3B5b2JqYy10Yy5jIGxpYmZmaS5jYWxsL2Nsc19tdWx0aV91c2hvcnRjaGFyLmMJCVwKIGxpYmZmaS5jYWxsL3N0cnVjdDEuYyBsaWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0OS5jCQkJXAogbGliZmZpLmNhbGwvaHVnZV9zdHJ1Y3QuYyBsaWJmZmkuY2FsbC9wcm9ibGVtMS5jCQkJXAotbGliZmZpLmNhbGwvZmxvYXQ0LmMgbGliZmZpLmNhbGwvZmFzdHRoaXMzX3dpbjMyLmMJCQlcCi1saWJmZmkuY2FsbC9yZXR1cm5fbGRsLmMgbGliZmZpLmNhbGwvc3RybGVuMl93aW4zMi5jCQkJXAotbGliZmZpLmNhbGwvY2xvc3VyZV9mbjUuYyBsaWJmZmkuY2FsbC9zdHJ1Y3QyX3dpbjMyLmMJCQlcCitsaWJmZmkuY2FsbC9mbG9hdDQuYyBcCitsaWJmZmkuY2FsbC9yZXR1cm5fbGRsLmMgXAorbGliZmZpLmNhbGwvY2xvc3VyZV9mbjUuYyBcCiBsaWJmZmkuY2FsbC9zdHJ1Y3Q2LmMgbGliZmZpLmNhbGwvcmV0dXJuX2xsLmMgbGliZmZpLmNhbGwvc3RydWN0OS5jCVwKIGxpYmZmaS5jYWxsL3JldHVybl9zYy5jIGxpYmZmaS5jYWxsL3N0cnVjdDcuYwkJCQlcCiBsaWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDY0LmMgbGliZmZpLmNhbGwvY2xzXzRieXRlLmMJCQlcCi1saWJmZmkuY2FsbC9zdHJsZW5fd2luMzIuYyBsaWJmZmkuY2FsbC9jbHNfNl8xX2J5dGUuYwkJCVwKLWxpYmZmaS5jYWxsL2Nsc183XzFfYnl0ZS5jIGxpYmZmaS5zcGVjaWFsL3Vud2luZHRlc3QuY2MJCQlcCi1saWJmZmkuc3BlY2lhbC9zcGVjaWFsLmV4cCBsaWJmZmkuc3BlY2lhbC91bndpbmR0ZXN0X2ZmaV9jYWxsLmNjCVwKLWxpYmZmaS5zcGVjaWFsL2ZmaXRlc3RjeHguaCBsaWIvd3JhcHBlci5leHAgbGliL3RhcmdldC1saWJwYXRoLmV4cAlcCitsaWJmZmkuY2FsbC9jbHNfNl8xX2J5dGUuYwkJCVwKK2xpYmZmaS5jYWxsL2Nsc183XzFfYnl0ZS5jIGxpYmZmaS5jYWxsL3Vud2luZHRlc3QuY2MJCQlcCitsaWJmZmkuY2FsbC91bndpbmR0ZXN0X2ZmaV9jYWxsLmNjCVwKK2xpYi93cmFwcGVyLmV4cCBsaWIvdGFyZ2V0LWxpYnBhdGguZXhwCVwKIGxpYi9saWJmZmkuZXhwIGxpYmZmaS5jYWxsL2Nsc19zdHJ1Y3RfdmExLmMJCQkJXAogbGliZmZpLmNhbGwvY2xzX3VjaGFyX3ZhLmMgbGliZmZpLmNhbGwvY2xzX3VpbnRfdmEuYwkJCVwKIGxpYmZmaS5jYWxsL2Nsc191bG9uZ192YS5jIGxpYmZmaS5jYWxsL2Nsc191c2hvcnRfdmEuYwkJCVwKIGxpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QxMS5jIGxpYmZmaS5jYWxsL3VuaW5pdGlhbGl6ZWQuYwkJXAogbGliZmZpLmNhbGwvdmFfMS5jIGxpYmZmaS5jYWxsL3ZhX3N0cnVjdDEuYyBsaWJmZmkuY2FsbC92YV9zdHJ1Y3QyLmMJXAotbGliZmZpLmNhbGwvdmFfc3RydWN0My5jCitsaWJmZmkuY2FsbC92YV9zdHJ1Y3QzLmMgXAorbGliZmZpLmNhbGwvc3RybGVuMi5jIFwKK2xpYmZmaS5jYWxsL3N0cmxlbjMuYyBcCitsaWJmZmkuY2FsbC9zdHJsZW40LmMKIAogYWxsOiBhbGwtYW0KIApAQCAtMzQzLDExICszODYsOSBAQAogCiBjbGVhbi1saWJ0b29sOgogCS1ybSAtcmYgLmxpYnMgX2xpYnMKLXRhZ3M6IFRBR1MKLVRBR1M6Cit0YWdzIFRBR1M6CiAKLWN0YWdzOiBDVEFHUwotQ1RBR1M6CitjdGFncyBDVEFHUzoKIAogY3Njb3BlIGNzY29wZWxpc3Q6CiAKQEAgLTM1NSwxMyArMzk2LDEyIEBACiBjaGVjay1ERUpBR05VOiBzaXRlLmV4cAogCXNyY2Rpcj0nJChzcmNkaXIpJzsgZXhwb3J0IHNyY2RpcjsgXAogCUVYUEVDVD0kKEVYUEVDVCk7IGV4cG9ydCBFWFBFQ1Q7IFwKLQlydW50ZXN0PSQoUlVOVEVTVCk7IFwKLQlpZiAkKFNIRUxMKSAtYyAiJCRydW50ZXN0IC0tdmVyc2lvbiIgPiAvZGV2L251bGwgMj4mMTsgdGhlbiBcCisJaWYgJChTSEVMTCkgLWMgIiQoUlVOVEVTVCkgLS12ZXJzaW9uIiA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuIFwKIAkgIGV4aXRfc3RhdHVzPTA7IGw9JyQoREVKQVRPT0wpJzsgZm9yIHRvb2wgaW4gJCRsOyBkbyBcCi0JICAgIGlmICQkcnVudGVzdCAkKEFNX1JVTlRFU1RGTEFHUykgJChSVU5URVNUREVGQVVMVEZMQUdTKSAkKFJVTlRFU1RGTEFHUyk7IFwKKwkgICAgaWYgJChSVU5URVNUKSAkKEFNX1JVTlRFU1RGTEFHUykgJChSVU5URVNUREVGQVVMVEZMQUdTKSAkKFJVTlRFU1RGTEFHUyk7IFwKIAkgICAgdGhlbiA6OyBlbHNlIGV4aXRfc3RhdHVzPTE7IGZpOyBcCiAJICBkb25lOyBcCi0JZWxzZSBlY2hvICJXQVJOSU5HOiBjb3VsZCBub3QgZmluZCAncnVudGVzdCciIDE+JjI7IDo7XAorCWVsc2UgZWNobyAiV0FSTklORzogY291bGQgbm90IGZpbmQgJyQoUlVOVEVTVCknIiAxPiYyOyA6O1wKIAlmaTsgXAogCWV4aXQgJCRleGl0X3N0YXR1cwogc2l0ZS5leHA6IE1ha2VmaWxlICQoRVhUUkFfREVKQUdOVV9TSVRFX0NPTkZJRykKQEAgLTUzMiwxNiArNTcyLDE3IEBACiAuTUFLRTogY2hlY2stYW0gaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCiAKIC5QSE9OWTogYWxsIGFsbC1hbSBjaGVjayBjaGVjay1ERUpBR05VIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgXAotCWNsZWFuLWxpYnRvb2wgZGlzdGNsZWFuIGRpc3RjbGVhbi1ERUpBR05VIGRpc3RjbGVhbi1nZW5lcmljIFwKLQlkaXN0Y2xlYW4tbGlidG9vbCBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBodG1sLWFtIGluZm8gaW5mby1hbSBcCi0JaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgXAotCWluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIFwKLQlpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIGluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBcCi0JaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIFwKLQlpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgXAotCW1haW50YWluZXItY2xlYW4gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIFwKLQltb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgcGRmIHBkZi1hbSBwcyBwcy1hbSBcCi0JdW5pbnN0YWxsIHVuaW5zdGFsbC1hbQorCWNsZWFuLWxpYnRvb2wgY3Njb3BlbGlzdC1hbSBjdGFncy1hbSBkaXN0Y2xlYW4gXAorCWRpc3RjbGVhbi1ERUpBR05VIGRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi1saWJ0b29sIGRpc3RkaXIgXAorCWR2aSBkdmktYW0gaHRtbCBodG1sLWFtIGluZm8gaW5mby1hbSBpbnN0YWxsIGluc3RhbGwtYW0gXAorCWluc3RhbGwtZGF0YSBpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgaW5zdGFsbC1kdmktYW0gXAorCWluc3RhbGwtZXhlYyBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIGluc3RhbGwtaHRtbC1hbSBcCisJaW5zdGFsbC1pbmZvIGluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBpbnN0YWxsLXBkZiBcCisJaW5zdGFsbC1wZGYtYW0gaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIGluc3RhbGwtc3RyaXAgXAorCWluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgbWFpbnRhaW5lci1jbGVhbiBcCisJbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIG1vc3RseWNsZWFuLWdlbmVyaWMgXAorCW1vc3RseWNsZWFuLWxpYnRvb2wgcGRmIHBkZi1hbSBwcyBwcy1hbSB0YWdzLWFtIHVuaW5zdGFsbCBcCisJdW5pbnN0YWxsLWFtCiAKIAogIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYi9saWJmZmkuZXhwIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliL2xpYmZmaS5leHAKaW5kZXggMWFjMmMzNi4uZGJkZDFhMiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliL2xpYmZmaS5leHAKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliL2xpYmZmaS5leHAKQEAgLTIyMiw2ICsyMjIsMTAgQEAKIAlsYXBwZW5kIG9wdGlvbnMgImxpYnM9IC1scHRocmVhZCIKICAgICB9CiAKKyAgICBpZiB7IFtzdHJpbmcgbWF0Y2ggIiouY2MiICRzb3VyY2VdIH0geworCWxhcHBlbmQgb3B0aW9ucyAiYysrIgorICAgIH0KKwogICAgIHZlcmJvc2UgIm9wdGlvbnM6ICRvcHRpb25zIgogICAgIHJldHVybiBbdGFyZ2V0X2NvbXBpbGUgJHNvdXJjZSAkZGVzdCAkdHlwZSAkb3B0aW9uc10KIH0KQEAgLTI3Myw2ICsyNzcsNDYgQEAKICAgICB9CiB9CiAKK3Byb2MgcnVuLW1hbnktdGVzdHMgeyB0ZXN0Y2FzZXMgZXh0cmFfZmxhZ3MgfSB7CisgICAgZ2xvYmFsIHVzaW5nX2djYworICAgIGlmIHsgW3N0cmluZyBtYXRjaCAkdXNpbmdfZ2NjICJ5ZXMiXSB9IHsKKyAgICAgICAgc2V0IGNvbW1vbiAiLVcgLVdhbGwiCisgICAgICAgIHNldCBvcHRpbWl6YXRpb25zIHsgIi1PMCIgIi1PMiIgIi1PMyIgIi1PcyIgIi1PMiAtZm9taXQtZnJhbWUtcG9pbnRlciIgfQorICAgIH0gZWxzZSB7CisgICAgICAgICMgQXNzdW1lIHdlIGFyZSB1c2luZyB0aGUgdmVuZG9yIGNvbXBpbGVyLgorICAgICAgICBzZXQgY29tbW9uICIiCisgICAgICAgIHNldCBvcHRpbWl6YXRpb25zIHsgIiIgfQorICAgIH0KKworICAgIHNldCB0YXJnZXRhYmlzIHsgIiIgfQorICAgIGlmIFtzdHJpbmcgbWF0Y2ggJHVzaW5nX2djYyAieWVzIl0geworICAgICAgICBpZiBbaXN0YXJnZXQgImk/ODYtKi0qIl0geworICAgICAgICAgICAgc2V0IHRhcmdldGFiaXMgeworICAgICAgICAgICAgICAgICIiCisgICAgICAgICAgICAgICAgIi1EQUJJX05VTT1GRklfU1REQ0FMTCAtREFCSV9BVFRSPV9fU1REQ0FMTF9fIgorICAgICAgICAgICAgICAgICItREFCSV9OVU09RkZJX1RISVNDQUxMIC1EQUJJX0FUVFI9X19USElTQ0FMTF9fIgorICAgICAgICAgICAgICAgICItREFCSV9OVU09RkZJX0ZBU1RDQUxMIC1EQUJJX0FUVFI9X19GQVNUQ0FMTF9fIgorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgc2V0IGNvbW1vbiBbIGNvbmNhdCAkY29tbW9uICRleHRyYV9mbGFncyBdCisgICAgZm9yZWFjaCB0ZXN0ICR0ZXN0Y2FzZXMgeworICAgICAgICBzZXQgdGVzdG5hbWUgW2ZpbGUgdGFpbCAkdGVzdF0KKyAgICAgICAgaWYgW3NlYXJjaF9mb3IgJHRlc3QgIkFCSV9OVU0iXSB7CisgICAgICAgICAgICBzZXQgYWJpcyAkdGFyZ2V0YWJpcworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc2V0IGFiaXMgeyAiIiB9CisgICAgICAgIH0KKyAgICAgICAgZm9yZWFjaCBvcHQgJG9wdGltaXphdGlvbnMgeworICAgICAgICAgICAgZm9yZWFjaCBhYmkgJGFiaXMgeworICAgICAgICAgICAgICAgIHNldCBvcHRpb25zIFtjb25jYXQgJGNvbW1vbiAkb3B0ICRhYmldCisgICAgICAgICAgICAgICAgdmVyYm9zZSAiVGVzdGluZyAkdGVzdG5hbWUsICRvcHRpb25zIiAxCisgICAgICAgICAgICAgICAgZGctdGVzdCAkdGVzdCAkb3B0aW9ucyAiIgorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQogCiAjIExpa2UgY2hlY2tfY29uZGl0aW9uYWxfeGZhaWwsIGJ1dCBjYWxsYWJsZSBmcm9tIGEgZGcgdGVzdC4KIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvYS5vdXQgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9hLm91dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOS4uMDAwMDAwMAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9hLm91dAorKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jYWxsLmV4cCBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2NhbGwuZXhwCmluZGV4IGMzMzQ2ODUuLjM2ZDEzZDggMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2NhbGwuZXhwCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2NhbGwuZXhwCkBAIC0xOSwyMCArMTksNyBAQAogCiBnbG9iYWwgc3JjZGlyIHN1YmRpcgogCi1pZiB7IFtzdHJpbmcgbWF0Y2ggJHVzaW5nX2djYyAieWVzIl0gfSB7Ci0KLSAgZGctcnVudGVzdCBbbHNvcnQgW2dsb2IgLW5vY29tcGxhaW4gJHNyY2Rpci8kc3ViZGlyLyouXFtjU1xdXV0gIi1PMCAtVyAtV2FsbCIgIiIKLSAgZGctcnVudGVzdCBbbHNvcnQgW2dsb2IgLW5vY29tcGxhaW4gJHNyY2Rpci8kc3ViZGlyLyouXFtjU1xdXV0gIi1PMiIgIiIKLSAgZGctcnVudGVzdCBbbHNvcnQgW2dsb2IgLW5vY29tcGxhaW4gJHNyY2Rpci8kc3ViZGlyLyouXFtjU1xdXV0gIi1PMyIgIiIKLSAgZGctcnVudGVzdCBbbHNvcnQgW2dsb2IgLW5vY29tcGxhaW4gJHNyY2Rpci8kc3ViZGlyLyouXFtjU1xdXV0gIi1PcyIgIiIKLSAgZGctcnVudGVzdCBbbHNvcnQgW2dsb2IgLW5vY29tcGxhaW4gJHNyY2Rpci8kc3ViZGlyLyouXFtjU1xdXV0gIi1PMiAtZm9taXQtZnJhbWUtcG9pbnRlciIgIiIKLSAKLX0gZWxzZSB7IAotCi0gICMgQXNzdW1lIHdlIGFyZSB1c2luZyB0aGUgdmVuZG9yIGNvbXBpbGVyLgotICBkZy1ydW50ZXN0IFtsc29ydCBbZ2xvYiAtbm9jb21wbGFpbiAkc3JjZGlyLyRzdWJkaXIvKi5cW2NTXF1dXSAiIiAiIgotCi19CitydW4tbWFueS10ZXN0cyBbbHNvcnQgW2dsb2IgLW5vY29tcGxhaW4gLS0gJHNyY2Rpci8kc3ViZGlyLyoue2MsY2N9XV0gIiIKIAogZGctZmluaXNoCiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfc2ltcGxlLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX3NpbXBsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhNGU3MjgKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX3NpbXBsZS5jCkBAIC0wLDAgKzEsNTUgQEAKKy8qIEFyZWE6CWNsb3N1cmVfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgc2ltcGxlIGNsb3N1cmUgaGFuZGxpbmcgd2l0aCBhbGwgQUJJcworICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOgk8dHdhbGxqYXZhQGRldi5qYXZhLm5ldD4gKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKworc3RhdGljIHZvaWQKK2Nsb3N1cmVfdGVzdChmZmlfY2lmKiBjaWYgX19VTlVTRURfXywgdm9pZCogcmVzcCwgdm9pZCoqIGFyZ3MsIHZvaWQqIHVzZXJkYXRhKQoreworICAqKGZmaV9hcmcqKXJlc3AgPQorICAgIChpbnQpKihpbnQgKilhcmdzWzBdICsgKGludCkoKihpbnQgKilhcmdzWzFdKQorICAgICsgKGludCkoKihpbnQgKilhcmdzWzJdKSAgKyAoaW50KSgqKGludCAqKWFyZ3NbM10pCisgICAgKyAoaW50KShpbnRwdHJfdCl1c2VyZGF0YTsKKworICBwcmludGYoIiVkICVkICVkICVkOiAlZFxuIiwKKwkgKGludCkqKGludCAqKWFyZ3NbMF0sIChpbnQpKCooaW50ICopYXJnc1sxXSksCisJIChpbnQpKCooaW50ICopYXJnc1syXSksIChpbnQpKCooaW50ICopYXJnc1szXSksCisgICAgICAgICAoaW50KSooZmZpX2FyZyAqKXJlc3ApOworCit9CisKK3R5cGVkZWYgaW50IChBQklfQVRUUiAqY2xvc3VyZV90ZXN0X3R5cGUwKShpbnQsIGludCwgaW50LCBpbnQpOworCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIHZvaWQgKmNvZGU7CisgIGZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisgIGZmaV90eXBlICogY2xfYXJnX3R5cGVzWzE3XTsKKyAgaW50IHJlczsKKworICBjbF9hcmdfdHlwZXNbMF0gPSAmZmZpX3R5cGVfdWludDsKKyAgY2xfYXJnX3R5cGVzWzFdID0gJmZmaV90eXBlX3VpbnQ7CisgIGNsX2FyZ190eXBlc1syXSA9ICZmZmlfdHlwZV91aW50OworICBjbF9hcmdfdHlwZXNbM10gPSAmZmZpX3R5cGVfdWludDsKKyAgY2xfYXJnX3R5cGVzWzRdID0gTlVMTDsKKworICAvKiBJbml0aWFsaXplIHRoZSBjaWYgKi8KKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEFCSV9OVU0sIDQsCisJCSAgICAgJmZmaV90eXBlX3NpbnQsIGNsX2FyZ190eXBlcykgPT0gRkZJX09LKTsKKworICBDSEVDSyhmZmlfcHJlcF9jbG9zdXJlX2xvYyhwY2wsICZjaWYsIGNsb3N1cmVfdGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKikgMyAvKiB1c2VyZGF0YSAqLywgY29kZSkgPT0gRkZJX09LKTsKKworICByZXMgPSAoKihjbG9zdXJlX3Rlc3RfdHlwZTApY29kZSkoMCwgMSwgMiwgMyk7CisgIC8qIHsgZGctb3V0cHV0ICIwIDEgMiAzOiA5IiB9ICovCisKKyAgcHJpbnRmKCJyZXM6ICVkXG4iLHJlcyk7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogOSIgfSAqLworCisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX3N0ZGNhbGwuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfc3RkY2FsbC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNDA3ZjAyLi4wMDAwMDAwCi0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfc3RkY2FsbC5jCisrKyAvZGV2L251bGwKQEAgLTEsNzIgKzAsMCBAQAotLyogQXJlYToJY2xvc3VyZV9jYWxsIChzdGRjYWxsIGNvbnZlbnRpb24pCi0gICBQdXJwb3NlOglDaGVjayBoYW5kbGluZyB3aGVuIGNhbGxlciBleHBlY3RzIHN0ZGNhbGwgY2FsbGVlCi0gICBMaW1pdGF0aW9uczoJbm9uZS4KLSAgIFBSOgkJbm9uZS4KLSAgIE9yaWdpbmF0b3I6CTx0d2FsbGphdmFAZGV2LmphdmEubmV0PiAqLwotCi0vKiB7IGRnLWRvIHJ1biB7IHRhcmdldCBpPzg2LSotY3lnd2luKiBpPzg2LSotbWluZ3cqIH0gfSAqLwotI2luY2x1ZGUgImZmaXRlc3QuaCIKLQotc3RhdGljIHZvaWQKLWNsb3N1cmVfdGVzdF9zdGRjYWxsKGZmaV9jaWYqIGNpZiBfX1VOVVNFRF9fLCB2b2lkKiByZXNwLCB2b2lkKiogYXJncywKLQkJIHZvaWQqIHVzZXJkYXRhKQotewotICAqKGZmaV9hcmcqKXJlc3AgPQotICAgIChpbnQpKihpbnQgKilhcmdzWzBdICsgKGludCkoKihpbnQgKilhcmdzWzFdKQotICAgICsgKGludCkoKihpbnQgKilhcmdzWzJdKSAgKyAoaW50KSgqKGludCAqKWFyZ3NbM10pCi0gICAgKyAoaW50KShpbnRwdHJfdCl1c2VyZGF0YTsKLQotICBwcmludGYoIiVkICVkICVkICVkOiAlZFxuIiwKLQkgKGludCkqKGludCAqKWFyZ3NbMF0sIChpbnQpKCooaW50ICopYXJnc1sxXSksCi0JIChpbnQpKCooaW50ICopYXJnc1syXSksIChpbnQpKCooaW50ICopYXJnc1szXSksCi0gICAgICAgICAoaW50KSooZmZpX2FyZyAqKXJlc3ApOwotCi19Ci0KLXR5cGVkZWYgaW50IChfX3N0ZGNhbGwgKmNsb3N1cmVfdGVzdF90eXBlMCkoaW50LCBpbnQsIGludCwgaW50KTsKLQotaW50IG1haW4gKHZvaWQpCi17Ci0gIGZmaV9jaWYgY2lmOwotICB2b2lkICpjb2RlOwotICBmZmlfY2xvc3VyZSAqcGNsID0gZmZpX2Nsb3N1cmVfYWxsb2Moc2l6ZW9mKGZmaV9jbG9zdXJlKSwgJmNvZGUpOwotICBmZmlfdHlwZSAqIGNsX2FyZ190eXBlc1sxN107Ci0gIGludCByZXM7Ci0gIHZvaWQqIHNwX3ByZTsKLSAgdm9pZCogc3BfcG9zdDsKLSAgY2hhciBidWZbMTAyNF07Ci0KLSAgY2xfYXJnX3R5cGVzWzBdID0gJmZmaV90eXBlX3VpbnQ7Ci0gIGNsX2FyZ190eXBlc1sxXSA9ICZmZmlfdHlwZV91aW50OwotICBjbF9hcmdfdHlwZXNbMl0gPSAmZmZpX3R5cGVfdWludDsKLSAgY2xfYXJnX3R5cGVzWzNdID0gJmZmaV90eXBlX3VpbnQ7Ci0gIGNsX2FyZ190eXBlc1s0XSA9IE5VTEw7Ci0KLSAgLyogSW5pdGlhbGl6ZSB0aGUgY2lmICovCi0gIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfU1REQ0FMTCwgNCwKLQkJICAgICAmZmZpX3R5cGVfc2ludCwgY2xfYXJnX3R5cGVzKSA9PSBGRklfT0spOwotCi0gIENIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgY2xvc3VyZV90ZXN0X3N0ZGNhbGwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICopIDMgLyogdXNlcmRhdGEgKi8sIGNvZGUpID09IEZGSV9PSyk7Ci0KLSNpZmRlZiBfTVNDX1ZFUgotICBfX2FzbSB7IG1vdiBzcF9wcmUsIGVzcCB9Ci0jZWxzZQotICBhc20gdm9sYXRpbGUgKCIgbW92bCAlJWVzcCwlMCIgOiAiPWciIChzcF9wcmUpKTsKLSNlbmRpZgotICByZXMgPSAoKihjbG9zdXJlX3Rlc3RfdHlwZTApY29kZSkoMCwgMSwgMiwgMyk7Ci0jaWZkZWYgX01TQ19WRVIKLSAgX19hc20geyBtb3Ygc3BfcG9zdCwgZXNwIH0KLSNlbHNlCi0gIGFzbSB2b2xhdGlsZSAoIiBtb3ZsICUlZXNwLCUwIiA6ICI9ZyIgKHNwX3Bvc3QpKTsKLSNlbmRpZgotICAvKiB7IGRnLW91dHB1dCAiMCAxIDIgMzogOSIgfSAqLwotCi0gIHByaW50ZigicmVzOiAlZFxuIixyZXMpOwotICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDkiIH0gKi8KLQotICBzcHJpbnRmKGJ1ZiwgIm1pc21hdGNoOiBwcmU9JXAgdnMgcG9zdD0lcCIsIHNwX3ByZSwgc3BfcG9zdCk7Ci0gIHByaW50Zigic3RhY2sgcG9pbnRlciAlc1xuIiwgKHNwX3ByZSA9PSBzcF9wb3N0ID8gIm1hdGNoIiA6IGJ1ZikpOwotICAvKiB7IGRnLW91dHB1dCAiXG5zdGFjayBwb2ludGVyIG1hdGNoIiB9ICovCi0gIGV4aXQoMCk7Ci19CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX3RoaXNjYWxsLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX3RoaXNjYWxsLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmOTM2NDkuLjAwMDAwMDAKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV90aGlzY2FsbC5jCisrKyAvZGV2L251bGwKQEAgLTEsNzIgKzAsMCBAQAotLyogQXJlYToJY2xvc3VyZV9jYWxsICh0aGlzY2FsbCBjb252ZW50aW9uKQotICAgUHVycG9zZToJQ2hlY2sgaGFuZGxpbmcgd2hlbiBjYWxsZXIgZXhwZWN0cyB0aGlzY2FsbCBjYWxsZWUKLSAgIExpbWl0YXRpb25zOglub25lLgotICAgUFI6CQlub25lLgotICAgT3JpZ2luYXRvcjoJPGt0aWV0ekByZWRoYXQuY29tPiAqLwotCi0vKiB7IGRnLWRvIHJ1biB7IHRhcmdldCBpPzg2LSotY3lnd2luKiBpPzg2LSotbWluZ3cqIH0gfSAqLwotI2luY2x1ZGUgImZmaXRlc3QuaCIKLQotc3RhdGljIHZvaWQKLWNsb3N1cmVfdGVzdF90aGlzY2FsbChmZmlfY2lmKiBjaWYgX19VTlVTRURfXywgdm9pZCogcmVzcCwgdm9pZCoqIGFyZ3MsCi0JCSAgICAgIHZvaWQqIHVzZXJkYXRhKQotewotICAqKGZmaV9hcmcqKXJlc3AgPQotICAgIChpbnQpKihpbnQgKilhcmdzWzBdICsgKGludCkoKihpbnQgKilhcmdzWzFdKQotICAgICsgKGludCkoKihpbnQgKilhcmdzWzJdKSAgKyAoaW50KSgqKGludCAqKWFyZ3NbM10pCi0gICAgKyAoaW50KShpbnRwdHJfdCl1c2VyZGF0YTsKLQotICBwcmludGYoIiVkICVkICVkICVkOiAlZFxuIiwKLQkgKGludCkqKGludCAqKWFyZ3NbMF0sIChpbnQpKCooaW50ICopYXJnc1sxXSksCi0JIChpbnQpKCooaW50ICopYXJnc1syXSksIChpbnQpKCooaW50ICopYXJnc1szXSksCi0gICAgICAgICAoaW50KSooZmZpX2FyZyAqKXJlc3ApOwotCi19Ci0KLXR5cGVkZWYgaW50IChfX3RoaXNjYWxsICpjbG9zdXJlX3Rlc3RfdHlwZTApKGludCwgaW50LCBpbnQsIGludCk7Ci0KLWludCBtYWluICh2b2lkKQotewotICBmZmlfY2lmIGNpZjsKLSAgdm9pZCAqY29kZTsKLSAgZmZpX2Nsb3N1cmUgKnBjbCA9IGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfY2xvc3VyZSksICZjb2RlKTsKLSAgZmZpX3R5cGUgKiBjbF9hcmdfdHlwZXNbMTddOwotICBpbnQgcmVzOwotICB2b2lkKiBzcF9wcmU7Ci0gIHZvaWQqIHNwX3Bvc3Q7Ci0gIGNoYXIgYnVmWzEwMjRdOwotCi0gIGNsX2FyZ190eXBlc1swXSA9ICZmZmlfdHlwZV91aW50OwotICBjbF9hcmdfdHlwZXNbMV0gPSAmZmZpX3R5cGVfdWludDsKLSAgY2xfYXJnX3R5cGVzWzJdID0gJmZmaV90eXBlX3VpbnQ7Ci0gIGNsX2FyZ190eXBlc1szXSA9ICZmZmlfdHlwZV91aW50OwotICBjbF9hcmdfdHlwZXNbNF0gPSBOVUxMOwotCi0gIC8qIEluaXRpYWxpemUgdGhlIGNpZiAqLwotICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX1RISVNDQUxMLCA0LAotCQkgICAgICZmZmlfdHlwZV9zaW50LCBjbF9hcmdfdHlwZXMpID09IEZGSV9PSyk7Ci0KLSAgQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCBjbG9zdXJlX3Rlc3RfdGhpc2NhbGwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICopIDMgLyogdXNlcmRhdGEgKi8sIGNvZGUpID09IEZGSV9PSyk7Ci0KLSNpZmRlZiBfTVNDX1ZFUgotICBfX2FzbSB7IG1vdiBzcF9wcmUsIGVzcCB9Ci0jZWxzZQotICBhc20gdm9sYXRpbGUgKCIgbW92bCAlJWVzcCwlMCIgOiAiPWciIChzcF9wcmUpKTsKLSNlbmRpZgotICByZXMgPSAoKihjbG9zdXJlX3Rlc3RfdHlwZTApY29kZSkoMCwgMSwgMiwgMyk7Ci0jaWZkZWYgX01TQ19WRVIKLSAgX19hc20geyBtb3Ygc3BfcG9zdCwgZXNwIH0KLSNlbHNlCi0gIGFzbSB2b2xhdGlsZSAoIiBtb3ZsICUlZXNwLCUwIiA6ICI9ZyIgKHNwX3Bvc3QpKTsKLSNlbmRpZgotICAvKiB7IGRnLW91dHB1dCAiMCAxIDIgMzogOSIgfSAqLwotCi0gIHByaW50ZigicmVzOiAlZFxuIixyZXMpOwotICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDkiIH0gKi8KLQotICBzcHJpbnRmKGJ1ZiwgIm1pc21hdGNoOiBwcmU9JXAgdnMgcG9zdD0lcCIsIHNwX3ByZSwgc3BfcG9zdCk7Ci0gIHByaW50Zigic3RhY2sgcG9pbnRlciAlc1xuIiwgKHNwX3ByZSA9PSBzcF9wb3N0ID8gIm1hdGNoIiA6IGJ1ZikpOwotICAvKiB7IGRnLW91dHB1dCAiXG5zdGFjayBwb2ludGVyIG1hdGNoIiB9ICovCi0gIGV4aXQoMCk7Ci19CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZG91YmxlX3ZhLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZG91YmxlX3ZhLmMKaW5kZXggNDMxNjdiNi4uZTA3N2Y5MiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2RvdWJsZV92YS5jCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kb3VibGVfdmEuYwpAQCAtMzgsNyArMzgsNyBAQAogCiAJLyogVGhpcyBwcmludGYgY2FsbCBpcyB2YXJpYWRpYyAqLwogCUNIRUNLKGZmaV9wcmVwX2NpZl92YXIoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAxLCAyLCAmZmZpX3R5cGVfc2ludCwKLQkJYXJnX3R5cGVzKSA9PSBGRklfT0spOworCQkJICAgICAgIGFyZ190eXBlcykgPT0gRkZJX09LKTsKIAogCWFyZ3NbMF0gPSAmZm9ybWF0OwogCWFyZ3NbMV0gPSAmZG91YmxlQXJnOwpAQCAtNDksMTIgKzQ5LDEwIEBACiAJcHJpbnRmKCJyZXM6ICVkXG4iLCAoaW50KSByZXMpOwogCS8qIHsgZGctb3V0cHV0ICJcbnJlczogNCIgfSAqLwogCi0JLyogVGhlIGNhbGwgdG8gY2xzX2RvdWJsZV92YV9mbiBpcyBzdGF0aWMsIHNvIGhhdmUgdG8gdXNlIGEgbm9ybWFsIHByZXBfY2lmICovCi0JQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMiwgJmZmaV90eXBlX3NpbnQsIGFyZ190eXBlcykgPT0gRkZJX09LKTsKKwlDSEVDSyhmZmlfcHJlcF9jbG9zdXJlX2xvYyhwY2wsICZjaWYsIGNsc19kb3VibGVfdmFfZm4sIE5VTEwsCisJCQkJICAgY29kZSkgPT0gRkZJX09LKTsKIAotCUNIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgY2xzX2RvdWJsZV92YV9mbiwgTlVMTCwgY29kZSkgPT0gRkZJX09LKTsKLQotCXJlcwk9ICgoaW50KCopKGNoYXIqLCBkb3VibGUpKShjb2RlKSkoZm9ybWF0LCBkb3VibGVBcmcpOworCXJlcyA9ICgoaW50KCopKGNoYXIqLCAuLi4pKShjb2RlKSkoZm9ybWF0LCBkb3VibGVBcmcpOwogCS8qIHsgZGctb3V0cHV0ICJcbjcuMCIgfSAqLwogCXByaW50ZigicmVzOiAlZFxuIiwgKGludCkgcmVzKTsKIAkvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDQiIH0gKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19sb25nZG91YmxlX3ZhLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbG9uZ2RvdWJsZV92YS5jCmluZGV4IDcxMjZiMTMuLjM5YjQzOGIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19sb25nZG91YmxlX3ZhLmMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGVfdmEuYwpAQCAtMzgsNyArMzgsNyBAQAogCiAJLyogVGhpcyBwcmludGYgY2FsbCBpcyB2YXJpYWRpYyAqLwogCUNIRUNLKGZmaV9wcmVwX2NpZl92YXIoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAxLCAyLCAmZmZpX3R5cGVfc2ludCwKLQkJYXJnX3R5cGVzKSA9PSBGRklfT0spOworCQkJICAgICAgIGFyZ190eXBlcykgPT0gRkZJX09LKTsKIAogCWFyZ3NbMF0gPSAmZm9ybWF0OwogCWFyZ3NbMV0gPSAmbGRBcmc7CkBAIC00OSwxMyArNDksMTAgQEAKIAlwcmludGYoInJlczogJWRcbiIsIChpbnQpIHJlcyk7CiAJLyogeyBkZy1vdXRwdXQgIlxucmVzOiA0IiB9ICovCiAKLQkvKiBUaGUgY2FsbCB0byBjbHNfbG9uZ2RvdWJsZV92YV9mbiBpcyBzdGF0aWMsIHNvIGhhdmUgdG8gdXNlIGEgbm9ybWFsIHByZXBfY2lmICovCi0JQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMiwgJmZmaV90eXBlX3NpbnQsCi0JCWFyZ190eXBlcykgPT0gRkZJX09LKTsKKwlDSEVDSyhmZmlfcHJlcF9jbG9zdXJlX2xvYyhwY2wsICZjaWYsIGNsc19sb25nZG91YmxlX3ZhX2ZuLCBOVUxMLAorCQkJCSAgIGNvZGUpID09IEZGSV9PSyk7CiAKLQlDSEVDSyhmZmlfcHJlcF9jbG9zdXJlX2xvYyhwY2wsICZjaWYsIGNsc19sb25nZG91YmxlX3ZhX2ZuLCBOVUxMLCBjb2RlKSA9PSBGRklfT0spOwotCi0JcmVzCT0gKChpbnQoKikoY2hhciosIGxvbmcgZG91YmxlKSkoY29kZSkpKGZvcm1hdCwgbGRBcmcpOworCXJlcyA9ICgoaW50KCopKGNoYXIqLCAuLi4pKShjb2RlKSkoZm9ybWF0LCBsZEFyZyk7CiAJLyogeyBkZy1vdXRwdXQgIlxuNy4wIiB9ICovCiAJcHJpbnRmKCJyZXM6ICVkXG4iLCAoaW50KSByZXMpOwogCS8qIHsgZGctb3V0cHV0ICJcbnJlczogNCIgfSAqLwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3N0cnVjdF92YTEuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zdHJ1Y3RfdmExLmMKaW5kZXggMTc1ZWQ5Ni4uNmQxZmRhZSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3N0cnVjdF92YTEuYworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc3RydWN0X3ZhMS5jCkBAIC0zNSw3ICszNSw3IEBACiAgIHByaW50ZiAoIiVkICVkICVkICVkICVkICVkICVkICVkICVkICVkXG4iLCBuLCBzMS5hLCBzMS5iLAogCSAgbDEuYSwgbDEuYiwgbDEuYywgbDEuZCwgbDEuZSwKIAkgIHMyLmEsIHMyLmIpOwotICAqIChpbnQqKSByZXNwID0gNDI7CisgICogKGZmaV9hcmcqKSByZXNwID0gNDI7CiB9CiAKIGludApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VpbnRfdmEuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191aW50X3ZhLmMKaW5kZXggMTUwZmRkZC4uYjA0Y2ZkMSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VpbnRfdmEuYworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWludF92YS5jCkBAIC0xMyw5ICsxMyw5IEBACiBzdGF0aWMgdm9pZCBjbHNfcmV0X1RfZm4oZmZpX2NpZiogY2lmIF9fVU5VU0VEX18sIHZvaWQqIHJlc3AsIHZvaWQqKiBhcmdzLAogCQkJIHZvaWQqIHVzZXJkYXRhIF9fVU5VU0VEX18pCiAgewotICAgKihUICopcmVzcCA9ICooVCAqKWFyZ3NbMF07CisgICAqKGZmaV9hcmcgKilyZXNwID0gKihUICopYXJnc1swXTsKIAotICAgcHJpbnRmKCIlZDogJWQgJWRcbiIsICooVCAqKXJlc3AsICooVCAqKWFyZ3NbMF0sICooVCAqKWFyZ3NbMV0pOworICAgcHJpbnRmKCIlZDogJWQgJWRcbiIsIChpbnQpKihmZmlfYXJnICopcmVzcCwgKihUICopYXJnc1swXSwgKihUICopYXJnc1sxXSk7CiAgfQogCiB0eXBlZGVmIFQgKCpjbHNfcmV0X1QpKFQsIC4uLik7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9mZml0ZXN0LmggYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9mZml0ZXN0LmgKaW5kZXggMTM2YTdhNi4uMTVkNWU0NCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmZpdGVzdC5oCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2ZmaXRlc3QuaApAQCAtMTUsMjIgKzE1LDI1IEBACiAKICNkZWZpbmUgTUFYX0FSR1MgMjU2CiAKLSNkZWZpbmUgQ0hFQ0soeCkgISh4KSA/IChhYm9ydCgpLCAxKSA6IDAKKyNkZWZpbmUgQ0hFQ0soeCkgKHZvaWQpKCEoeCkgPyAoYWJvcnQoKSwgMSkgOiAwKQogCi0vKiBEZWZpbmUgX19VTlVTRURfXyB0aGF0IGFsc28gb3RoZXIgY29tcGlsZXJzIHRoYW4gZ2NjIGNhbiBydW4gdGhlIHRlc3RzLiAgKi8KKy8qIERlZmluZSBtYWNyb3Mgc28gdGhhdCBjb21waWxlcnMgb3RoZXIgdGhhbiBnY2MgY2FuIHJ1biB0aGUgdGVzdHMuICAqLwogI3VuZGVmIF9fVU5VU0VEX18KICNpZiBkZWZpbmVkKF9fR05VQ19fKQogI2RlZmluZSBfX1VOVVNFRF9fIF9fYXR0cmlidXRlX18oKF9fdW51c2VkX18pKQorI2RlZmluZSBfX1NURENBTExfXyBfX2F0dHJpYnV0ZV9fKChzdGRjYWxsKSkKKyNkZWZpbmUgX19USElTQ0FMTF9fIF9fYXR0cmlidXRlX18oKHRoaXNjYWxsKSkKKyNkZWZpbmUgX19GQVNUQ0FMTF9fIF9fYXR0cmlidXRlX18oKGZhc3RjYWxsKSkKICNlbHNlCiAjZGVmaW5lIF9fVU5VU0VEX18KKyNkZWZpbmUgX19TVERDQUxMX18gX19zdGRjYWxsCisjZGVmaW5lIF9fVEhJU0NBTExfXyBfX3RoaXNjYWxsCisjZGVmaW5lIF9fRkFTVENBTExfXyBfX2Zhc3RjYWxsCiAjZW5kaWYKIAotLyogRGVmaW5lIF9fRkFTVENBTExfXyBzbyB0aGF0IG90aGVyIGNvbXBpbGVycyB0aGFuIGdjYyBjYW4gcnVuIHRoZSB0ZXN0cy4gICovCi0jdW5kZWYgX19GQVNUQ0FMTF9fCi0jaWYgZGVmaW5lZCBfTVNDX1ZFUgotI2RlZmluZSBfX0ZBU1RDQUxMX18gX19mYXN0Y2FsbAotI2Vsc2UKLSNkZWZpbmUgX19GQVNUQ0FMTF9fIF9fYXR0cmlidXRlX18oKGZhc3RjYWxsKSkKKyNpZm5kZWYgQUJJX05VTQorI2RlZmluZSBBQklfTlVNIEZGSV9ERUZBVUxUX0FCSQorI2RlZmluZSBBQklfQVRUUgogI2VuZGlmCiAKIC8qIFByZWZlciBNQVBfQU5PTihZTU9VUykgdG8gL2Rldi96ZXJvLCBzaW5jZSB3ZSBkb24ndCBuZWVkIHRvIGtlZXAgYQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvbWFueS5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvbWFueS5jCmluZGV4IDQ4NjliYTkuLjMzNjk2OGMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL21hbnkuYworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9tYW55LmMKQEAgLTcsMjEgKzcsMTEgQEAKIC8qIHsgZGctZG8gcnVuIH0gKi8KICNpbmNsdWRlICJmZml0ZXN0LmgiCiAKKyNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxmbG9hdC5oPgorI2luY2x1ZGUgPG1hdGguaD4KIAotc3RhdGljIGZsb2F0IG1hbnkoZmxvYXQgZjEsCi0JCSAgZmxvYXQgZjIsCi0JCSAgZmxvYXQgZjMsCi0JCSAgZmxvYXQgZjQsCi0JCSAgZmxvYXQgZjUsCi0JCSAgZmxvYXQgZjYsCi0JCSAgZmxvYXQgZjcsCi0JCSAgZmxvYXQgZjgsCi0JCSAgZmxvYXQgZjksCi0JCSAgZmxvYXQgZjEwLAotCQkgIGZsb2F0IGYxMSwKLQkJICBmbG9hdCBmMTIsCi0JCSAgZmxvYXQgZjEzKQorc3RhdGljIGZsb2F0IEFCSV9BVFRSIG1hbnkoZmxvYXQgZjEsIGZsb2F0IGYyLCBmbG9hdCBmMywgZmxvYXQgZjQsIGZsb2F0IGY1LCBmbG9hdCBmNiwgZmxvYXQgZjcsIGZsb2F0IGY4LCBmbG9hdCBmOSwgZmxvYXQgZjEwLCBmbG9hdCBmMTEsIGZsb2F0IGYxMiwgZmxvYXQgZjEzKQogewogI2lmIDAKICAgcHJpbnRmKCIlZiAlZiAlZiAlZiAlZiAlZiAlZiAlZiAlZiAlZiAlZiAlZiAlZlxuIiwKQEAgLTMwLDcgKzIwLDcgQEAKIAkgKGRvdWJsZSkgZjExLCAoZG91YmxlKSBmMTIsIChkb3VibGUpIGYxMyk7CiAjZW5kaWYKIAotICByZXR1cm4gKChmMS9mMitmMy9mNCtmNS9mNitmNy9mOCtmOS9mMTArZjExL2YxMikgKiBmMTMpOworICByZXR1cm4gZjErZjIrZjMrZjQrZjUrZjYrZjcrZjgrZjkrZjEwK2YxMStmMTIrZjEzOwogfQogCiBpbnQgbWFpbiAodm9pZCkKQEAgLTUwLDcgKzQwLDcgQEAKICAgICB9CiAKICAgICAvKiBJbml0aWFsaXplIHRoZSBjaWYgKi8KLSAgICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAxMywgCisgICAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEFCSV9OVU0sIDEzLAogCQkgICAgICAgJmZmaV90eXBlX2Zsb2F0LCBhcmdzKSA9PSBGRklfT0spOwogCiAgICAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKG1hbnkpLCAmZiwgdmFsdWVzKTsKQEAgLTYyLDcgKzUyLDcgQEAKIAkgICAgICAgZmFbOF0sIGZhWzldLAogCSAgICAgICBmYVsxMF0sZmFbMTFdLGZhWzEyXSk7CiAKLSAgICBpZiAoZiAtIGZmIDwgRkxUX0VQU0lMT04pCisgICAgaWYgKGZhYnMoZiAtIGZmKSA8IEZMVF9FUFNJTE9OKQogICAgICAgZXhpdCgwKTsKICAgICBlbHNlCiAgICAgICBhYm9ydCgpOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvbWFueTIuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL21hbnkyLmMKaW5kZXggOThlYWM2MC4uMWM4NTc0NiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvbWFueTIuYworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9tYW55Mi5jCkBAIC0yMiw3ICsyMiw3IEBACiAgIHJldHVybiBhICsgYiArIGMgKyBkICsgZSArIGYgKyBnOwogfQogCi11aW50OF90Cit1aW50OF90IEFCSV9BVFRSCiBiYXIgKHVpbnQ4X3QgYSwgdWludDhfdCBiLCB1aW50OF90IGMsIHVpbnQ4X3QgZCwKICAgICAgdWludDhfdCBlLCB1aW50OF90IGYsIHVpbnQ4X3QgZykKIHsKQEAgLTQyLDcgKzQyLDcgQEAKICAgZm9yIChpID0gMDsgaSA8IE5BUkdTOyArK2kpCiAgICAgZmZpdHlwZXNbaV0gPSAmZmZpX3R5cGVfdWludDg7CiAKLSAgQ0hFQ0sgKGZmaV9wcmVwX2NpZiAoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCBOQVJHUywKKyAgQ0hFQ0sgKGZmaV9wcmVwX2NpZiAoJmNpZiwgQUJJX05VTSwgTkFSR1MsCiAJCSAgICAgICAmZmZpX3R5cGVfdWludDgsIGZmaXR5cGVzKSA9PSBGRklfT0spOwogCiAgIGZvciAoaSA9IDA7IGkgPCBOQVJHUzsgKytpKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvbWFueTJfd2luMzIuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL21hbnkyX3dpbjMyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhZGJlNGQuLjAwMDAwMDAKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvbWFueTJfd2luMzIuYworKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8qIEFyZWE6CWZmaV9jYWxsCi0gICBQdXJwb3NlOglDaGVjayBzdGRjYWxsIG1hbnkgY2FsbCBvbiBYODZfV0lOMzIgc3lzdGVtcy4KLSAgIExpbWl0YXRpb25zOglub25lLgotICAgUFI6CQlub25lLgotICAgT3JpZ2luYXRvcjoJRnJvbSB0aGUgb3JpZ2luYWwgZmZpdGVzdC5jICAqLwotCi0vKiB7IGRnLWRvIHJ1biB7IHRhcmdldCBpPzg2LSotY3lnd2luKiBpPzg2LSotbWluZ3cqIH0gfSAqLwotCi0jaW5jbHVkZSAiZmZpdGVzdC5oIgotI2luY2x1ZGUgPGZsb2F0Lmg+Ci0KLXN0YXRpYyBmbG9hdCBfX2F0dHJpYnV0ZV9fKChmYXN0Y2FsbCkpIGZhc3RjYWxsX21hbnkoZmxvYXQgZjEsCi0JCQkJCQkgICBmbG9hdCBmMiwKLQkJCQkJCSAgIGZsb2F0IGYzLAotCQkJCQkJICAgZmxvYXQgZjQsCi0JCQkJCQkgICBmbG9hdCBmNSwKLQkJCQkJCSAgIGZsb2F0IGY2LAotCQkJCQkJICAgZmxvYXQgZjcsCi0JCQkJCQkgICBmbG9hdCBmOCwKLQkJCQkJCSAgIGZsb2F0IGY5LAotCQkJCQkJICAgZmxvYXQgZjEwLAotCQkJCQkJICAgZmxvYXQgZjExLAotCQkJCQkJICAgZmxvYXQgZjEyLAotCQkJCQkJICAgZmxvYXQgZjEzKQotewotICByZXR1cm4gKChmMS9mMitmMy9mNCtmNS9mNitmNy9mOCtmOS9mMTArZjExL2YxMikgKiBmMTMpOwotfQotCi1pbnQgbWFpbiAodm9pZCkKLXsKLSAgZmZpX2NpZiBjaWY7Ci0gIGZmaV90eXBlICphcmdzWzEzXTsKLSAgdm9pZCAqdmFsdWVzWzEzXTsKLSAgZmxvYXQgZmFbMTNdOwotICBmbG9hdCBmLCBmZjsKLSAgdW5zaWduZWQgbG9uZyB1bDsKLQotICBmb3IgKHVsID0gMDsgdWwgPCAxMzsgdWwrKykKLSAgICB7Ci0gICAgICBhcmdzW3VsXSA9ICZmZmlfdHlwZV9mbG9hdDsKLSAgICAgIHZhbHVlc1t1bF0gPSAmZmFbdWxdOwotCWZhW3VsXSA9IChmbG9hdCkgdWw7Ci0gICAgfQotCi0gIC8qIEluaXRpYWxpemUgdGhlIGNpZiAqLwotICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0ZBU1RDQUxMLCAxMywKLQkJICAgICAmZmZpX3R5cGVfZmxvYXQsIGFyZ3MpID09IEZGSV9PSyk7Ci0KLSAgZmYgPSAgZmFzdGNhbGxfbWFueShmYVswXSwgZmFbMV0sCi0JCSAgICAgZmFbMl0sIGZhWzNdLAotCQkgICAgIGZhWzRdLCBmYVs1XSwKLQkJICAgICBmYVs2XSwgZmFbN10sCi0JCSAgICAgZmFbOF0sIGZhWzldLAotCQkgICAgIGZhWzEwXSwgZmFbMTFdLCBmYVsxMl0pOwotCi0gIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihmYXN0Y2FsbF9tYW55KSwgJmYsIHZhbHVlcyk7Ci0KLSAgaWYgKGYgLSBmZiA8IEZMVF9FUFNJTE9OKQotICAgIHByaW50ZigiZmFzdGNhbGwgbWFueSBhcmcgdGVzdHMgb2shXG4iKTsKLSAgZWxzZQotICAgIENIRUNLKDApOwotICBleGl0KDApOwotfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvbWFueV93aW4zMi5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvbWFueV93aW4zMi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYjI2MzMyLi4wMDAwMDAwCi0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL21hbnlfd2luMzIuYworKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8qIEFyZWE6CWZmaV9jYWxsCi0gICBQdXJwb3NlOglDaGVjayBzdGRjYWxsIG1hbnkgY2FsbCBvbiBYODZfV0lOMzIgc3lzdGVtcy4KLSAgIExpbWl0YXRpb25zOglub25lLgotICAgUFI6CQlub25lLgotICAgT3JpZ2luYXRvcjoJRnJvbSB0aGUgb3JpZ2luYWwgZmZpdGVzdC5jICAqLwotCi0vKiB7IGRnLWRvIHJ1biB7IHRhcmdldCBpPzg2LSotY3lnd2luKiBpPzg2LSotbWluZ3cqIH0gfSAqLwotCi0jaW5jbHVkZSAiZmZpdGVzdC5oIgotI2luY2x1ZGUgPGZsb2F0Lmg+Ci0KLXN0YXRpYyBmbG9hdCBfX2F0dHJpYnV0ZV9fKChzdGRjYWxsKSkgc3RkY2FsbF9tYW55KGZsb2F0IGYxLAotCQkJCQkJICAgZmxvYXQgZjIsCi0JCQkJCQkgICBmbG9hdCBmMywKLQkJCQkJCSAgIGZsb2F0IGY0LAotCQkJCQkJICAgZmxvYXQgZjUsCi0JCQkJCQkgICBmbG9hdCBmNiwKLQkJCQkJCSAgIGZsb2F0IGY3LAotCQkJCQkJICAgZmxvYXQgZjgsCi0JCQkJCQkgICBmbG9hdCBmOSwKLQkJCQkJCSAgIGZsb2F0IGYxMCwKLQkJCQkJCSAgIGZsb2F0IGYxMSwKLQkJCQkJCSAgIGZsb2F0IGYxMiwKLQkJCQkJCSAgIGZsb2F0IGYxMykKLXsKLSAgcmV0dXJuICgoZjEvZjIrZjMvZjQrZjUvZjYrZjcvZjgrZjkvZjEwK2YxMS9mMTIpICogZjEzKTsKLX0KLQotaW50IG1haW4gKHZvaWQpCi17Ci0gIGZmaV9jaWYgY2lmOwotICBmZmlfdHlwZSAqYXJnc1sxM107Ci0gIHZvaWQgKnZhbHVlc1sxM107Ci0gIGZsb2F0IGZhWzEzXTsKLSAgZmxvYXQgZiwgZmY7Ci0gIHVuc2lnbmVkIGxvbmcgdWw7Ci0KLSAgZm9yICh1bCA9IDA7IHVsIDwgMTM7IHVsKyspCi0gICAgewotICAgICAgYXJnc1t1bF0gPSAmZmZpX3R5cGVfZmxvYXQ7Ci0gICAgICB2YWx1ZXNbdWxdID0gJmZhW3VsXTsKLQlmYVt1bF0gPSAoZmxvYXQpIHVsOwotICAgIH0KLQotICAvKiBJbml0aWFsaXplIHRoZSBjaWYgKi8KLSAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9TVERDQUxMLCAxMywKLQkJICAgICAmZmZpX3R5cGVfZmxvYXQsIGFyZ3MpID09IEZGSV9PSyk7Ci0KLSAgZmYgPSAgc3RkY2FsbF9tYW55KGZhWzBdLCBmYVsxXSwKLQkJICAgICBmYVsyXSwgZmFbM10sCi0JCSAgICAgZmFbNF0sIGZhWzVdLAotCQkgICAgIGZhWzZdLCBmYVs3XSwKLQkJICAgICBmYVs4XSwgZmFbOV0sCi0JCSAgICAgZmFbMTBdLCBmYVsxMV0sIGZhWzEyXSk7Ci0KLSAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKHN0ZGNhbGxfbWFueSksICZmLCB2YWx1ZXMpOwotCi0gIGlmIChmIC0gZmYgPCBGTFRfRVBTSUxPTikKLSAgICBwcmludGYoInN0ZGNhbGwgbWFueSBhcmcgdGVzdHMgb2shXG4iKTsKLSAgZWxzZQotICAgIENIRUNLKDApOwotICBleGl0KDApOwotfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDExLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0MTEuYwppbmRleCBmY2U2OTQ4Li4zNTEwNDkzIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0MTEuYworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0MTEuYwpAQCAtMSw3ICsxLDcgQEAKIC8qIEFyZWE6CWZmaV9jYWxsLCBjbG9zdXJlX2NhbGwKICAgIFB1cnBvc2U6CUNoZWNrIHBhcmFtZXRlciBwYXNzaW5nIHdpdGggbmVzdGVkIHN0cnVjdHMKIAkJb2YgYSBzaW5nbGUgdHlwZS4gIFRoaXMgdGVzdHMgdGhlIHNwZWNpYWwgY2FzZXMKLQkJZm9yIGhvbW9nZW5vdXMgZmxvYXRpbmctcG9pbnQgYWdncmVnYXRlcyBpbiB0aGUKKwkJZm9yIGhvbW9nZW5lb3VzIGZsb2F0aW5nLXBvaW50IGFnZ3JlZ2F0ZXMgaW4gdGhlCiAJCUFBcmNoNjQgUENTLgogICAgTGltaXRhdGlvbnM6CW5vbmUuCiAgICBQUjoJCW5vbmUuCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJsZW4uYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmxlbi5jCmluZGV4IDNkZTQ1ZGUuLjM1YjcwZWEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmxlbi5jCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmxlbi5jCkBAIC03LDcgKzcsNyBAQAogLyogeyBkZy1kbyBydW4gfSAqLwogI2luY2x1ZGUgImZmaXRlc3QuaCIKIAotc3RhdGljIHNpemVfdCBteV9zdHJsZW4oY2hhciAqcykKK3N0YXRpYyBzaXplX3QgQUJJX0FUVFIgbXlfc3RybGVuKGNoYXIgKnMpCiB7CiAgIHJldHVybiAoc3RybGVuKHMpKTsKIH0KQEAgLTI0LDcgKzI0LDcgQEAKICAgdmFsdWVzWzBdID0gKHZvaWQqKSAmczsKICAgCiAgIC8qIEluaXRpYWxpemUgdGhlIGNpZiAqLwotICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAxLCAKKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEFCSV9OVU0sIDEsCiAJCSAgICAgJmZmaV90eXBlX3NpbnQsIGFyZ3MpID09IEZGSV9PSyk7CiAgIAogICBzID0gImEiOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmFzdHRoaXMxX3dpbjMyLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJsZW4yLmMKc2ltaWxhcml0eSBpbmRleCA2MCUKcmVuYW1lIGZyb20gTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmFzdHRoaXMxX3dpbjMyLmMKcmVuYW1lIHRvIE1vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmxlbjIuYwppbmRleCBjYmM0NzI0Li45NjI4MmJjIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9mYXN0dGhpczFfd2luMzIuYworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJsZW4yLmMKQEAgLTEsMTQgKzEsMTQgQEAKIC8qIEFyZWE6CWZmaV9jYWxsCi0gICBQdXJwb3NlOglDaGVjayBmYXN0Y2FsbCBmY3QgY2FsbCBvbiBYODZfV0lOMzIgc3lzdGVtcy4KKyAgIFB1cnBvc2U6CUNoZWNrIHN0cmxlbiBmdW5jdGlvbiBjYWxsIHdpdGggYWRkaXRpb25hbCBhcmd1bWVudHMuCiAgICBMaW1pdGF0aW9uczoJbm9uZS4KICAgIFBSOgkJbm9uZS4KICAgIE9yaWdpbmF0b3I6CUZyb20gdGhlIG9yaWdpbmFsIGZmaXRlc3QuYyAgKi8KIAotLyogeyBkZy1kbyBydW4geyB0YXJnZXQgaT84Ni0qLWN5Z3dpbiogaT84Ni0qLW1pbmd3KiB9IH0gKi8KKy8qIHsgZGctZG8gcnVuIH0gKi8KIAogI2luY2x1ZGUgImZmaXRlc3QuaCIKIAotc3RhdGljIHNpemVfdCBfX0ZBU1RDQUxMX18gbXlfZmFzdGNhbGxfZihjaGFyICpzLCBmbG9hdCBhKQorc3RhdGljIHNpemVfdCBBQklfQVRUUiBteV9mKGNoYXIgKnMsIGZsb2F0IGEpCiB7CiAgIHJldHVybiAoc2l6ZV90KSAoKGludCkgc3RybGVuKHMpICsgKGludCkgYSk7CiB9CkBAIC0yNywyNCArMjcsMjMgQEAKICAgdmFsdWVzWzFdID0gKHZvaWQqKSAmdjI7CiAgIAogICAvKiBJbml0aWFsaXplIHRoZSBjaWYgKi8KLSAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9GQVNUQ0FMTCwgMiwKKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEFCSV9OVU0sIDIsCiAJCSAgICAgICAmZmZpX3R5cGVfc2ludCwgYXJncykgPT0gRkZJX09LKTsKICAgCiAgIHMgPSAiYSI7CiAgIHYyID0gMC4wOwotICBmZmlfY2FsbCgmY2lmLCBGRklfRk4obXlfZmFzdGNhbGxfZiksICZyaW50LCB2YWx1ZXMpOworICBmZmlfY2FsbCgmY2lmLCBGRklfRk4obXlfZiksICZyaW50LCB2YWx1ZXMpOwogICBDSEVDSyhyaW50ID09IDEpOwogICAKICAgcyA9ICIxMjM0NTY3IjsKICAgdjIgPSAtMS4wOwotICBmZmlfY2FsbCgmY2lmLCBGRklfRk4obXlfZmFzdGNhbGxfZiksICZyaW50LCB2YWx1ZXMpOworICBmZmlfY2FsbCgmY2lmLCBGRklfRk4obXlfZiksICZyaW50LCB2YWx1ZXMpOwogICBDSEVDSyhyaW50ID09IDYpOwogICAKICAgcyA9ICIxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1IjsKICAgdjIgPSAxLjA7Ci0gIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihteV9mYXN0Y2FsbF9mKSwgJnJpbnQsIHZhbHVlcyk7CisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihteV9mKSwgJnJpbnQsIHZhbHVlcyk7CiAgIENIRUNLKHJpbnQgPT0gMjYpOwogICAKLSAgcHJpbnRmKCJmYXN0Y2FsbCBmY3QxIHRlc3RzIHBhc3NlZFxuIik7CiAgIGV4aXQoMCk7CiB9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJsZW4yX3dpbjMyLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJsZW4yX3dpbjMyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkODEwNjEuLjAwMDAwMDAKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RybGVuMl93aW4zMi5jCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotLyogQXJlYToJZmZpX2NhbGwKLSAgIFB1cnBvc2U6CUNoZWNrIGZhc3RjYWxsIHN0cmxlbiBjYWxsIG9uIFg4Nl9XSU4zMiBzeXN0ZW1zLgotICAgTGltaXRhdGlvbnM6CW5vbmUuCi0gICBQUjoJCW5vbmUuCi0gICBPcmlnaW5hdG9yOglGcm9tIHRoZSBvcmlnaW5hbCBmZml0ZXN0LmMgICovCi0KLS8qIHsgZGctZG8gcnVuIHsgdGFyZ2V0IGk/ODYtKi1jeWd3aW4qIGk/ODYtKi1taW5ndyogfSB9ICovCi0KLSNpbmNsdWRlICJmZml0ZXN0LmgiCi0KLXN0YXRpYyBzaXplX3QgX19GQVNUQ0FMTF9fIG15X2Zhc3RjYWxsX3N0cmxlbihjaGFyICpzKQotewotICByZXR1cm4gKHN0cmxlbihzKSk7Ci19Ci0KLWludCBtYWluICh2b2lkKQotewotICBmZmlfY2lmIGNpZjsKLSAgZmZpX3R5cGUgKmFyZ3NbTUFYX0FSR1NdOwotICB2b2lkICp2YWx1ZXNbTUFYX0FSR1NdOwotICBmZmlfYXJnIHJpbnQ7Ci0gIGNoYXIgKnM7Ci0gIGFyZ3NbMF0gPSAmZmZpX3R5cGVfcG9pbnRlcjsKLSAgdmFsdWVzWzBdID0gKHZvaWQqKSAmczsKLSAgCi0gIC8qIEluaXRpYWxpemUgdGhlIGNpZiAqLwotICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0ZBU1RDQUxMLCAxLAotCQkgICAgICAgJmZmaV90eXBlX3NpbnQsIGFyZ3MpID09IEZGSV9PSyk7Ci0gIAotICBzID0gImEiOwotICBmZmlfY2FsbCgmY2lmLCBGRklfRk4obXlfZmFzdGNhbGxfc3RybGVuKSwgJnJpbnQsIHZhbHVlcyk7Ci0gIENIRUNLKHJpbnQgPT0gMSk7Ci0gIAotICBzID0gIjEyMzQ1NjciOwotICBmZmlfY2FsbCgmY2lmLCBGRklfRk4obXlfZmFzdGNhbGxfc3RybGVuKSwgJnJpbnQsIHZhbHVlcyk7Ci0gIENIRUNLKHJpbnQgPT0gNyk7Ci0gIAotICBzID0gIjEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDUiOwotICBmZmlfY2FsbCgmY2lmLCBGRklfRk4obXlfZmFzdGNhbGxfc3RybGVuKSwgJnJpbnQsIHZhbHVlcyk7Ci0gIENIRUNLKHJpbnQgPT0gMjUpOwotICAKLSAgcHJpbnRmKCJmYXN0Y2FsbCBzdHJsZW4gdGVzdHMgcGFzc2VkXG4iKTsKLSAgZXhpdCgwKTsKLX0KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zhc3R0aGlzMl93aW4zMi5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RybGVuMy5jCnNpbWlsYXJpdHkgaW5kZXggNjAlCnJlbmFtZSBmcm9tIE1vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zhc3R0aGlzMl93aW4zMi5jCnJlbmFtZSB0byBNb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJsZW4zLmMKaW5kZXggN2JkZDBlMS4uYmViYTg2ZSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmFzdHRoaXMyX3dpbjMyLmMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RybGVuMy5jCkBAIC0xLDE0ICsxLDE0IEBACiAvKiBBcmVhOglmZmlfY2FsbAotICAgUHVycG9zZToJQ2hlY2sgZmFzdGNhbGwgZmN0IGNhbGwgb24gWDg2X1dJTjMyIHN5c3RlbXMuCisgICBQdXJwb3NlOglDaGVjayBzdHJsZW4gZnVuY3Rpb24gY2FsbCB3aXRoIGFkZGl0aW9uYWwgYXJndW1lbnRzLgogICAgTGltaXRhdGlvbnM6CW5vbmUuCiAgICBQUjoJCW5vbmUuCiAgICBPcmlnaW5hdG9yOglGcm9tIHRoZSBvcmlnaW5hbCBmZml0ZXN0LmMgICovCiAKLS8qIHsgZGctZG8gcnVuIHsgdGFyZ2V0IGk/ODYtKi1jeWd3aW4qIGk/ODYtKi1taW5ndyogfSB9ICovCisvKiB7IGRnLWRvIHJ1biB9ICovCiAKICNpbmNsdWRlICJmZml0ZXN0LmgiCiAKLXN0YXRpYyBzaXplX3QgX19GQVNUQ0FMTF9fIG15X2Zhc3RjYWxsX2YoZmxvYXQgYSwgY2hhciAqcykKK3N0YXRpYyBzaXplX3QgQUJJX0FUVFIgbXlfZihmbG9hdCBhLCBjaGFyICpzKQogewogICByZXR1cm4gKHNpemVfdCkgKChpbnQpIHN0cmxlbihzKSArIChpbnQpIGEpOwogfQpAQCAtMjcsMjQgKzI3LDIzIEBACiAgIHZhbHVlc1swXSA9ICh2b2lkKikgJnYyOwogICAKICAgLyogSW5pdGlhbGl6ZSB0aGUgY2lmICovCi0gIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfRkFTVENBTEwsIDIsCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBBQklfTlVNLCAyLAogCQkgICAgICAgJmZmaV90eXBlX3NpbnQsIGFyZ3MpID09IEZGSV9PSyk7CiAgIAogICBzID0gImEiOwogICB2MiA9IDAuMDsKLSAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKG15X2Zhc3RjYWxsX2YpLCAmcmludCwgdmFsdWVzKTsKKyAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKG15X2YpLCAmcmludCwgdmFsdWVzKTsKICAgQ0hFQ0socmludCA9PSAxKTsKICAgCiAgIHMgPSAiMTIzNDU2NyI7CiAgIHYyID0gLTEuMDsKLSAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKG15X2Zhc3RjYWxsX2YpLCAmcmludCwgdmFsdWVzKTsKKyAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKG15X2YpLCAmcmludCwgdmFsdWVzKTsKICAgQ0hFQ0socmludCA9PSA2KTsKICAgCiAgIHMgPSAiMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NSI7CiAgIHYyID0gMS4wOwotICBmZmlfY2FsbCgmY2lmLCBGRklfRk4obXlfZmFzdGNhbGxfZiksICZyaW50LCB2YWx1ZXMpOworICBmZmlfY2FsbCgmY2lmLCBGRklfRk4obXlfZiksICZyaW50LCB2YWx1ZXMpOwogICBDSEVDSyhyaW50ID09IDI2KTsKICAgCi0gIHByaW50ZigiZmFzdGNhbGwgZmN0MiB0ZXN0cyBwYXNzZWRcbiIpOwogICBleGl0KDApOwogfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmFzdHRoaXMzX3dpbjMyLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJsZW40LmMKc2ltaWxhcml0eSBpbmRleCA2MyUKcmVuYW1lIGZyb20gTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmFzdHRoaXMzX3dpbjMyLmMKcmVuYW1lIHRvIE1vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmxlbjQuYwppbmRleCBiNWQ2MDZkLi5kNWQ0MmI0IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9mYXN0dGhpczNfd2luMzIuYworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJsZW40LmMKQEAgLTEsMTQgKzEsMTQgQEAKIC8qIEFyZWE6CWZmaV9jYWxsCi0gICBQdXJwb3NlOglDaGVjayBmYXN0Y2FsbCBmIGNhbGwgb24gWDg2X1dJTjMyIHN5c3RlbXMuCisgICBQdXJwb3NlOglDaGVjayBzdHJsZW4gZnVuY3Rpb24gY2FsbCB3aXRoIGFkZGl0aW9uYWwgYXJndW1lbnRzLgogICAgTGltaXRhdGlvbnM6CW5vbmUuCiAgICBQUjoJCW5vbmUuCiAgICBPcmlnaW5hdG9yOglGcm9tIHRoZSBvcmlnaW5hbCBmZml0ZXN0LmMgICovCiAKLS8qIHsgZGctZG8gcnVuIHsgdGFyZ2V0IGk/ODYtKi1jeWd3aW4qIGk/ODYtKi1taW5ndyogfSB9ICovCisvKiB7IGRnLWRvIHJ1biB9ICovCiAKICNpbmNsdWRlICJmZml0ZXN0LmgiCiAKLXN0YXRpYyBzaXplX3QgX19GQVNUQ0FMTF9fIG15X2Zhc3RjYWxsX2YoZmxvYXQgYSwgY2hhciAqcywgaW50IGkpCitzdGF0aWMgc2l6ZV90IEFCSV9BVFRSIG15X2YoZmxvYXQgYSwgY2hhciAqcywgaW50IGkpCiB7CiAgIHJldHVybiAoc2l6ZV90KSAoKGludCkgc3RybGVuKHMpICsgKGludCkgYSArIGkpOwogfQpAQCAtMzAsMjcgKzMwLDI2IEBACiAgIHZhbHVlc1swXSA9ICh2b2lkKikgJnYyOwogICAKICAgLyogSW5pdGlhbGl6ZSB0aGUgY2lmICovCi0gIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfRkFTVENBTEwsIDMsCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBBQklfTlVNLCAzLAogCQkgICAgICAgJmZmaV90eXBlX3NpbnQsIGFyZ3MpID09IEZGSV9PSyk7CiAgIAogICBzID0gImEiOwogICB2MSA9IDE7CiAgIHYyID0gMC4wOwotICBmZmlfY2FsbCgmY2lmLCBGRklfRk4obXlfZmFzdGNhbGxfZiksICZyaW50LCB2YWx1ZXMpOworICBmZmlfY2FsbCgmY2lmLCBGRklfRk4obXlfZiksICZyaW50LCB2YWx1ZXMpOwogICBDSEVDSyhyaW50ID09IDIpOwogICAKICAgcyA9ICIxMjM0NTY3IjsKICAgdjIgPSAtMS4wOwogICB2MSA9IC0yOwotICBmZmlfY2FsbCgmY2lmLCBGRklfRk4obXlfZmFzdGNhbGxfZiksICZyaW50LCB2YWx1ZXMpOworICBmZmlfY2FsbCgmY2lmLCBGRklfRk4obXlfZiksICZyaW50LCB2YWx1ZXMpOwogICBDSEVDSyhyaW50ID09IDQpOwogICAKICAgcyA9ICIxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1IjsKICAgdjIgPSAxLjA7CiAgIHYxID0gMjsKLSAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKG15X2Zhc3RjYWxsX2YpLCAmcmludCwgdmFsdWVzKTsKKyAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKG15X2YpLCAmcmludCwgdmFsdWVzKTsKICAgQ0hFQ0socmludCA9PSAyOCk7CiAgIAotICBwcmludGYoImZhc3RjYWxsIGZjdDMgdGVzdHMgcGFzc2VkXG4iKTsKICAgZXhpdCgwKTsKIH0KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmxlbl93aW4zMi5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RybGVuX3dpbjMyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmYmNjODcuLjAwMDAwMDAKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RybGVuX3dpbjMyLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi0vKiBBcmVhOglmZmlfY2FsbAotICAgUHVycG9zZToJQ2hlY2sgc3RkY2FsbCBzdHJsZW4gY2FsbCBvbiBYODZfV0lOMzIgc3lzdGVtcy4KLSAgIExpbWl0YXRpb25zOglub25lLgotICAgUFI6CQlub25lLgotICAgT3JpZ2luYXRvcjoJRnJvbSB0aGUgb3JpZ2luYWwgZmZpdGVzdC5jICAqLwotCi0vKiB7IGRnLWRvIHJ1biB7IHRhcmdldCBpPzg2LSotY3lnd2luKiBpPzg2LSotbWluZ3cqIH0gfSAqLwotCi0jaW5jbHVkZSAiZmZpdGVzdC5oIgotCi1zdGF0aWMgc2l6ZV90IF9fYXR0cmlidXRlX18oKHN0ZGNhbGwpKSBteV9zdGRjYWxsX3N0cmxlbihjaGFyICpzKQotewotICByZXR1cm4gKHN0cmxlbihzKSk7Ci19Ci0KLWludCBtYWluICh2b2lkKQotewotICBmZmlfY2lmIGNpZjsKLSAgZmZpX3R5cGUgKmFyZ3NbTUFYX0FSR1NdOwotICB2b2lkICp2YWx1ZXNbTUFYX0FSR1NdOwotICBmZmlfYXJnIHJpbnQ7Ci0gIGNoYXIgKnM7Ci0gIGFyZ3NbMF0gPSAmZmZpX3R5cGVfcG9pbnRlcjsKLSAgdmFsdWVzWzBdID0gKHZvaWQqKSAmczsKLSAgCi0gIC8qIEluaXRpYWxpemUgdGhlIGNpZiAqLwotICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX1NURENBTEwsIDEsCi0JCSAgICAgICAmZmZpX3R5cGVfc2ludCwgYXJncykgPT0gRkZJX09LKTsKLSAgCi0gIHMgPSAiYSI7Ci0gIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihteV9zdGRjYWxsX3N0cmxlbiksICZyaW50LCB2YWx1ZXMpOwotICBDSEVDSyhyaW50ID09IDEpOwotICAKLSAgcyA9ICIxMjM0NTY3IjsKLSAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKG15X3N0ZGNhbGxfc3RybGVuKSwgJnJpbnQsIHZhbHVlcyk7Ci0gIENIRUNLKHJpbnQgPT0gNyk7Ci0gIAotICBzID0gIjEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDUiOwotICBmZmlfY2FsbCgmY2lmLCBGRklfRk4obXlfc3RkY2FsbF9zdHJsZW4pLCAmcmludCwgdmFsdWVzKTsKLSAgQ0hFQ0socmludCA9PSAyNSk7Ci0gIAotICBwcmludGYoInN0ZGNhbGwgc3RybGVuIHRlc3RzIHBhc3NlZFxuIik7Ci0gIGV4aXQoMCk7Ci19CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3QxLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3QxLmMKaW5kZXggYmZjMjNmNi4uYzEzZTIzZiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0MS5jCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDEuYwpAQCAtMTQsNyArMTQsNyBAQAogICB1bnNpZ25lZCBpbnQgdWk7CiB9IHRlc3Rfc3RydWN0dXJlXzE7CiAKLXN0YXRpYyB0ZXN0X3N0cnVjdHVyZV8xIHN0cnVjdDEodGVzdF9zdHJ1Y3R1cmVfMSB0cykKK3N0YXRpYyB0ZXN0X3N0cnVjdHVyZV8xIEFCSV9BVFRSIHN0cnVjdDEodGVzdF9zdHJ1Y3R1cmVfMSB0cykKIHsKICAgdHMudWMrKzsKICAgdHMuZC0tOwpAQCAtNTAsNyArNTAsNyBAQAogICB2YWx1ZXNbMF0gPSAmdHMxX2FyZzsKICAgCiAgIC8qIEluaXRpYWxpemUgdGhlIGNpZiAqLwotICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAxLCAKKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEFCSV9OVU0sIDEsCiAJCSAgICAgJnRzMV90eXBlLCBhcmdzKSA9PSBGRklfT0spOwogICAKICAgdHMxX2FyZy51YyA9ICdceDAxJzsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDFfd2luMzIuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDFfd2luMzIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjc1NmY1YS4uMDAwMDAwMAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3QxX3dpbjMyLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi0vKiBBcmVhOglmZmlfY2FsbAotICAgUHVycG9zZToJQ2hlY2sgc3RydWN0dXJlcyB3aXRoIGZhc3RjYWxsL3RoaXNjYWxsIGNvbnZlbnRpb24uCi0gICBMaW1pdGF0aW9uczoJbm9uZS4KLSAgIFBSOgkJbm9uZS4KLSAgIE9yaWdpbmF0b3I6CUZyb20gdGhlIG9yaWdpbmFsIGZmaXRlc3QuYyAgKi8KLQotLyogeyBkZy1kbyBydW4geyB0YXJnZXQgaT84Ni0qLWN5Z3dpbiogaT84Ni0qLW1pbmd3KiB9IH0gKi8KLSNpbmNsdWRlICJmZml0ZXN0LmgiCi0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIHVuc2lnbmVkIGNoYXIgdWM7Ci0gIGRvdWJsZSBkOwotICB1bnNpZ25lZCBpbnQgdWk7Ci19IHRlc3Rfc3RydWN0dXJlXzE7Ci0KLXN0YXRpYyB0ZXN0X3N0cnVjdHVyZV8xIF9fRkFTVENBTExfXyBzdHJ1Y3QxKHRlc3Rfc3RydWN0dXJlXzEgdHMpCi17Ci0gIHRzLnVjKys7Ci0gIHRzLmQtLTsKLSAgdHMudWkrKzsKLQotICByZXR1cm4gdHM7Ci19Ci0KLWludCBtYWluICh2b2lkKQotewotICBmZmlfY2lmIGNpZjsKLSAgZmZpX3R5cGUgKmFyZ3NbTUFYX0FSR1NdOwotICB2b2lkICp2YWx1ZXNbTUFYX0FSR1NdOwotICBmZmlfdHlwZSB0czFfdHlwZTsKLSAgZmZpX3R5cGUgKnRzMV90eXBlX2VsZW1lbnRzWzRdOwotCi0gIHRlc3Rfc3RydWN0dXJlXzEgdHMxX2FyZzsKLQotICAvKiBUaGlzIGlzIGEgaGFjayB0byBnZXQgYSBwcm9wZXJseSBhbGlnbmVkIHJlc3VsdCBidWZmZXIgKi8KLSAgdGVzdF9zdHJ1Y3R1cmVfMSAqdHMxX3Jlc3VsdCA9Ci0gICAgKHRlc3Rfc3RydWN0dXJlXzEgKikgbWFsbG9jIChzaXplb2YodGVzdF9zdHJ1Y3R1cmVfMSkpOwotCi0gIHRzMV90eXBlLnNpemUgPSAwOwotICB0czFfdHlwZS5hbGlnbm1lbnQgPSAwOwotICB0czFfdHlwZS50eXBlID0gRkZJX1RZUEVfU1RSVUNUOwotICB0czFfdHlwZS5lbGVtZW50cyA9IHRzMV90eXBlX2VsZW1lbnRzOwotICB0czFfdHlwZV9lbGVtZW50c1swXSA9ICZmZmlfdHlwZV91Y2hhcjsKLSAgdHMxX3R5cGVfZWxlbWVudHNbMV0gPSAmZmZpX3R5cGVfZG91YmxlOwotICB0czFfdHlwZV9lbGVtZW50c1syXSA9ICZmZmlfdHlwZV91aW50OwotICB0czFfdHlwZV9lbGVtZW50c1szXSA9IE5VTEw7Ci0gIAotICBhcmdzWzBdID0gJnRzMV90eXBlOwotICB2YWx1ZXNbMF0gPSAmdHMxX2FyZzsKLSAgCi0gIC8qIEluaXRpYWxpemUgdGhlIGNpZiAqLwotICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0ZBU1RDQUxMLCAxLCAKLQkJICAgICAmdHMxX3R5cGUsIGFyZ3MpID09IEZGSV9PSyk7Ci0gIAotICB0czFfYXJnLnVjID0gJ1x4MDEnOwotICB0czFfYXJnLmQgPSAzLjE0MTU5OwotICB0czFfYXJnLnVpID0gNTU1OwotCi0gIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihzdHJ1Y3QxKSwgdHMxX3Jlc3VsdCwgdmFsdWVzKTsKLSAgCi0gIENIRUNLKHRzMV9yZXN1bHQtPnVpID09IDU1Nik7Ci0gIENIRUNLKHRzMV9yZXN1bHQtPmQgPT0gMy4xNDE1OSAtIDEpOwotIAotICBmcmVlICh0czFfcmVzdWx0KTsKLSAgZXhpdCgwKTsKLX0KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDIuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDIuYwppbmRleCBkODUzODVlLi41MDc3YTVlIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3QyLmMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0Mi5jCkBAIC0xMyw3ICsxMyw3IEBACiAgIGRvdWJsZSBkMjsKIH0gdGVzdF9zdHJ1Y3R1cmVfMjsKIAotc3RhdGljIHRlc3Rfc3RydWN0dXJlXzIgc3RydWN0Mih0ZXN0X3N0cnVjdHVyZV8yIHRzKQorc3RhdGljIHRlc3Rfc3RydWN0dXJlXzIgQUJJX0FUVFIgc3RydWN0Mih0ZXN0X3N0cnVjdHVyZV8yIHRzKQogewogICB0cy5kMS0tOwogICB0cy5kMi0tOwpAQCAtNDYsNyArNDYsNyBAQAogICB2YWx1ZXNbMF0gPSAmdHMyX2FyZzsKICAgCiAgIC8qIEluaXRpYWxpemUgdGhlIGNpZiAqLwotICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAxLCAmdHMyX3R5cGUsIGFyZ3MpID09IEZGSV9PSyk7CisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBBQklfTlVNLCAxLCAmdHMyX3R5cGUsIGFyZ3MpID09IEZGSV9PSyk7CiAgIAogICB0czJfYXJnLmQxID0gNS41NTsKICAgdHMyX2FyZy5kMiA9IDYuNjY7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3QyX3dpbjMyLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3QyX3dpbjMyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkMDIyODUuLjAwMDAwMDAKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0Ml93aW4zMi5jCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotLyogQXJlYToJZmZpX2NhbGwKLSAgIFB1cnBvc2U6CUNoZWNrIHN0cnVjdHVyZXMgaW4gZmFzdGNhbGwvc3RkY2FsbCBmdW5jdGlvbgotICAgTGltaXRhdGlvbnM6CW5vbmUuCi0gICBQUjoJCW5vbmUuCi0gICBPcmlnaW5hdG9yOglGcm9tIHRoZSBvcmlnaW5hbCBmZml0ZXN0LmMgICovCi0KLS8qIHsgZGctZG8gcnVuIHsgdGFyZ2V0IGk/ODYtKi1jeWd3aW4qIGk/ODYtKi1taW5ndyogfSB9ICovCi0jaW5jbHVkZSAiZmZpdGVzdC5oIgotCi10eXBlZGVmIHN0cnVjdAotewotICBkb3VibGUgZDE7Ci0gIGRvdWJsZSBkMjsKLX0gdGVzdF9zdHJ1Y3R1cmVfMjsKLQotc3RhdGljIHRlc3Rfc3RydWN0dXJlXzIgX19GQVNUQ0FMTF9fIHN0cnVjdDIodGVzdF9zdHJ1Y3R1cmVfMiB0cykKLXsKLSAgdHMuZDEtLTsKLSAgdHMuZDItLTsKLQotICByZXR1cm4gdHM7Ci19Ci0KLWludCBtYWluICh2b2lkKQotewotICBmZmlfY2lmIGNpZjsKLSAgZmZpX3R5cGUgKmFyZ3NbTUFYX0FSR1NdOwotICB2b2lkICp2YWx1ZXNbTUFYX0FSR1NdOwotICB0ZXN0X3N0cnVjdHVyZV8yIHRzMl9hcmc7Ci0gIGZmaV90eXBlIHRzMl90eXBlOwotICBmZmlfdHlwZSAqdHMyX3R5cGVfZWxlbWVudHNbM107Ci0KLSAgLyogVGhpcyBpcyBhIGhhY2sgdG8gZ2V0IGEgcHJvcGVybHkgYWxpZ25lZCByZXN1bHQgYnVmZmVyICovCi0gIHRlc3Rfc3RydWN0dXJlXzIgKnRzMl9yZXN1bHQgPQotICAgICh0ZXN0X3N0cnVjdHVyZV8yICopIG1hbGxvYyAoc2l6ZW9mKHRlc3Rfc3RydWN0dXJlXzIpKTsKLQotICB0czJfdHlwZS5zaXplID0gMDsKLSAgdHMyX3R5cGUuYWxpZ25tZW50ID0gMDsKLSAgdHMyX3R5cGUudHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKLSAgdHMyX3R5cGUuZWxlbWVudHMgPSB0czJfdHlwZV9lbGVtZW50czsKLSAgdHMyX3R5cGVfZWxlbWVudHNbMF0gPSAmZmZpX3R5cGVfZG91YmxlOwotICB0czJfdHlwZV9lbGVtZW50c1sxXSA9ICZmZmlfdHlwZV9kb3VibGU7Ci0gIHRzMl90eXBlX2VsZW1lbnRzWzJdID0gTlVMTDsKLQotICBhcmdzWzBdID0gJnRzMl90eXBlOwotICB2YWx1ZXNbMF0gPSAmdHMyX2FyZzsKLSAgCi0gIC8qIEluaXRpYWxpemUgdGhlIGNpZiAqLwotICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0ZBU1RDQUxMLCAxLCAmdHMyX3R5cGUsIGFyZ3MpID09IEZGSV9PSyk7Ci0gIAotICB0czJfYXJnLmQxID0gNS41NTsKLSAgdHMyX2FyZy5kMiA9IDYuNjY7Ci0gIAotICBwcmludGYgKCIlZ1xuIiwgdHMyX2FyZy5kMSk7Ci0gIHByaW50ZiAoIiVnXG4iLCB0czJfYXJnLmQyKTsKLSAgCi0gIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihzdHJ1Y3QyKSwgdHMyX3Jlc3VsdCwgdmFsdWVzKTsKLSAgCi0gIHByaW50ZiAoIiVnXG4iLCB0czJfcmVzdWx0LT5kMSk7Ci0gIHByaW50ZiAoIiVnXG4iLCB0czJfcmVzdWx0LT5kMik7Ci0gIAotICBDSEVDSyh0czJfcmVzdWx0LT5kMSA9PSA1LjU1IC0gMSk7Ci0gIENIRUNLKHRzMl9yZXN1bHQtPmQyID09IDYuNjYgLSAxKTsKLSAgCi0gIGZyZWUgKHRzMl9yZXN1bHQpOwotICBleGl0KDApOwotfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0My5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0My5jCmluZGV4IGRlODgzYzIuLjdlYmEwZWEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDMuYworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3QzLmMKQEAgLTEyLDcgKzEyLDcgQEAKICAgaW50IHNpOwogfSB0ZXN0X3N0cnVjdHVyZV8zOwogCi1zdGF0aWMgdGVzdF9zdHJ1Y3R1cmVfMyBzdHJ1Y3QzKHRlc3Rfc3RydWN0dXJlXzMgdHMpCitzdGF0aWMgdGVzdF9zdHJ1Y3R1cmVfMyBBQklfQVRUUiBzdHJ1Y3QzKHRlc3Rfc3RydWN0dXJlXzMgdHMpCiB7CiAgIHRzLnNpID0gLSh0cy5zaSoyKTsKIApAQCAtNDMsNyArNDMsNyBAQAogICB2YWx1ZXNbMF0gPSAmdHMzX2FyZzsKICAgCiAgIC8qIEluaXRpYWxpemUgdGhlIGNpZiAqLwotICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAxLCAKKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEFCSV9OVU0sIDEsCiAJCSAgICAgJnRzM190eXBlLCBhcmdzKSA9PSBGRklfT0spOwogICAKICAgdHMzX2FyZy5zaSA9IC0xMjM7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3Q0LmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3Q0LmMKaW5kZXggNDhlMDM0OS4uNjZhOTU1MSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0NC5jCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDQuYwpAQCAtMTQsNyArMTQsNyBAQAogICB1bnNpZ25lZCB1aTM7CiB9IHRlc3Rfc3RydWN0dXJlXzQ7CiAKLXN0YXRpYyB0ZXN0X3N0cnVjdHVyZV80IHN0cnVjdDQodGVzdF9zdHJ1Y3R1cmVfNCB0cykKK3N0YXRpYyB0ZXN0X3N0cnVjdHVyZV80IEFCSV9BVFRSIHN0cnVjdDQodGVzdF9zdHJ1Y3R1cmVfNCB0cykKIHsKICAgdHMudWkzID0gdHMudWkxICogdHMudWkyICogdHMudWkzOwogCkBAIC00OCw3ICs0OCw3IEBACiAgIHZhbHVlc1swXSA9ICZ0czRfYXJnOwogICAKICAgLyogSW5pdGlhbGl6ZSB0aGUgY2lmICovCi0gIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDEsICZ0czRfdHlwZSwgYXJncykgPT0gRkZJX09LKTsKKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEFCSV9OVU0sIDEsICZ0czRfdHlwZSwgYXJncykgPT0gRkZJX09LKTsKICAgCiAgIHRzNF9hcmcudWkxID0gMjsKICAgdHM0X2FyZy51aTIgPSAzOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0NS5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0NS5jCmluZGV4IDI4YjFmMGMuLjIzZTJhM2YgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDUuYworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3Q1LmMKQEAgLTEyLDcgKzEyLDcgQEAKICAgY2hhciBjMjsKIH0gdGVzdF9zdHJ1Y3R1cmVfNTsKIAotc3RhdGljIHRlc3Rfc3RydWN0dXJlXzUgc3RydWN0NSh0ZXN0X3N0cnVjdHVyZV81IHRzMSwgdGVzdF9zdHJ1Y3R1cmVfNSB0czIpCitzdGF0aWMgdGVzdF9zdHJ1Y3R1cmVfNSBBQklfQVRUUiBzdHJ1Y3Q1KHRlc3Rfc3RydWN0dXJlXzUgdHMxLCB0ZXN0X3N0cnVjdHVyZV81IHRzMikKIHsKICAgdHMxLmMxICs9IHRzMi5jMTsKICAgdHMxLmMyIC09IHRzMi5jMjsKQEAgLTQ4LDcgKzQ4LDcgQEAKICAgdmFsdWVzWzFdID0gJnRzNV9hcmcyOwogICAKICAgLyogSW5pdGlhbGl6ZSB0aGUgY2lmICovCi0gIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDIsICZ0czVfdHlwZSwgYXJncykgPT0gRkZJX09LKTsKKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEFCSV9OVU0sIDIsICZ0czVfdHlwZSwgYXJncykgPT0gRkZJX09LKTsKICAgCiAgIHRzNV9hcmcxLmMxID0gMjsKICAgdHM1X2FyZzEuYzIgPSA2OwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0Ni5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0Ni5jCmluZGV4IDBlMjY3NDYuLjE3M2M2NmUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDYuYworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3Q2LmMKQEAgLTEyLDcgKzEyLDcgQEAKICAgZG91YmxlIGQ7CiB9IHRlc3Rfc3RydWN0dXJlXzY7CiAKLXN0YXRpYyB0ZXN0X3N0cnVjdHVyZV82IHN0cnVjdDYgKHRlc3Rfc3RydWN0dXJlXzYgdHMpCitzdGF0aWMgdGVzdF9zdHJ1Y3R1cmVfNiBBQklfQVRUUiBzdHJ1Y3Q2ICh0ZXN0X3N0cnVjdHVyZV82IHRzKQogewogICB0cy5mICs9IDE7CiAgIHRzLmQgKz0gMTsKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgdmFsdWVzWzBdID0gJnRzNl9hcmc7CiAKICAgLyogSW5pdGlhbGl6ZSB0aGUgY2lmICovCi0gIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDEsICZ0czZfdHlwZSwgYXJncykgPT0gRkZJX09LKTsKKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEFCSV9OVU0sIDEsICZ0czZfdHlwZSwgYXJncykgPT0gRkZJX09LKTsKICAgCiAgIHRzNl9hcmcuZiA9IDUuNTVmOwogICB0czZfYXJnLmQgPSA2LjY2OwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0Ny5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0Ny5jCmluZGV4IDhmMmJiZmQuLmJhZGM3ZTAgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDcuYworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3Q3LmMKQEAgLTEzLDcgKzEzLDcgQEAKICAgZG91YmxlIGQ7CiB9IHRlc3Rfc3RydWN0dXJlXzc7CiAKLXN0YXRpYyB0ZXN0X3N0cnVjdHVyZV83IHN0cnVjdDcgKHRlc3Rfc3RydWN0dXJlXzcgdHMpCitzdGF0aWMgdGVzdF9zdHJ1Y3R1cmVfNyBBQklfQVRUUiBzdHJ1Y3Q3ICh0ZXN0X3N0cnVjdHVyZV83IHRzKQogewogICB0cy5mMSArPSAxOwogICB0cy5mMiArPSAxOwpAQCAtNDksNyArNDksNyBAQAogICB2YWx1ZXNbMF0gPSAmdHM3X2FyZzsKICAgCiAgIC8qIEluaXRpYWxpemUgdGhlIGNpZiAqLwotICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAxLCAmdHM3X3R5cGUsIGFyZ3MpID09IEZGSV9PSyk7CisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBBQklfTlVNLCAxLCAmdHM3X3R5cGUsIGFyZ3MpID09IEZGSV9PSyk7CiAgIAogICB0czdfYXJnLmYxID0gNS41NWY7CiAgIHRzN19hcmcuZjIgPSA1NS41ZjsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDguYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDguYwppbmRleCAyNjZlMWYwLi5lZjIwNGVjIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3Q4LmMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0OC5jCkBAIC0xNCw3ICsxNCw3IEBACiAgIGZsb2F0IGY0OwogfSB0ZXN0X3N0cnVjdHVyZV84OwogCi1zdGF0aWMgdGVzdF9zdHJ1Y3R1cmVfOCBzdHJ1Y3Q4ICh0ZXN0X3N0cnVjdHVyZV84IHRzKQorc3RhdGljIHRlc3Rfc3RydWN0dXJlXzggQUJJX0FUVFIgc3RydWN0OCAodGVzdF9zdHJ1Y3R1cmVfOCB0cykKIHsKICAgdHMuZjEgKz0gMTsKICAgdHMuZjIgKz0gMTsKQEAgLTUyLDcgKzUyLDcgQEAKICAgdmFsdWVzWzBdID0gJnRzOF9hcmc7CiAgIAogICAvKiBJbml0aWFsaXplIHRoZSBjaWYgKi8KLSAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMSwgJnRzOF90eXBlLCBhcmdzKSA9PSBGRklfT0spOworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgQUJJX05VTSwgMSwgJnRzOF90eXBlLCBhcmdzKSA9PSBGRklfT0spOwogICAKICAgdHM4X2FyZy5mMSA9IDUuNTVmOwogICB0czhfYXJnLmYyID0gNTUuNWY7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3Q5LmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3Q5LmMKaW5kZXggZWZlYjcxNi4uNGExM2I4MSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0OS5jCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDkuYwpAQCAtMTMsNyArMTMsNyBAQAogICBpbnQgaTsKIH0gdGVzdF9zdHJ1Y3R1cmVfOTsKIAotc3RhdGljIHRlc3Rfc3RydWN0dXJlXzkgc3RydWN0OSAodGVzdF9zdHJ1Y3R1cmVfOSB0cykKK3N0YXRpYyB0ZXN0X3N0cnVjdHVyZV85IEFCSV9BVFRSIHN0cnVjdDkgKHRlc3Rfc3RydWN0dXJlXzkgdHMpCiB7CiAgIHRzLmYgKz0gMTsKICAgdHMuaSArPSAxOwpAQCAtNDcsNyArNDcsNyBAQAogICB2YWx1ZXNbMF0gPSAmdHM5X2FyZzsKICAgCiAgIC8qIEluaXRpYWxpemUgdGhlIGNpZiAqLwotICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAxLCAmdHM5X3R5cGUsIGFyZ3MpID09IEZGSV9PSyk7CisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBBQklfTlVNLCAxLCAmdHM5X3R5cGUsIGFyZ3MpID09IEZGSV9PSyk7CiAgIAogICB0czlfYXJnLmYgPSA1LjU1ZjsKICAgdHM5X2FyZy5pID0gNTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL3Vud2luZHRlc3QuY2MgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC91bndpbmR0ZXN0LmNjCnNpbWlsYXJpdHkgaW5kZXggOTYlCnJlbmFtZSBmcm9tIE1vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL3Vud2luZHRlc3QuY2MKcmVuYW1lIHRvIE1vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3Vud2luZHRlc3QuY2MKaW5kZXggYTc4ZjRlNy4uNjdjZmVmZWMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL3Vud2luZHRlc3QuY2MKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvdW53aW5kdGVzdC5jYwpAQCAtNiwxNyArNiw5IEBACiAKIC8qIHsgZGctZG8gcnVuIH0gKi8KIAotI2luY2x1ZGUgImZmaXRlc3RjeHguaCIKKyNpbmNsdWRlICJmZml0ZXN0LmgiCiAKLSNpZiBkZWZpbmVkIEhBVkVfU1RESU5UX0gKLSNpbmNsdWRlIDxzdGRpbnQuaD4KLSNlbmRpZgotCi0jaWYgZGVmaW5lZCBIQVZFX0lOVFRZUEVTX0gKLSNpbmNsdWRlIDxpbnR0eXBlcy5oPgotI2VuZGlmCi0KLXZvaWQKK3ZvaWQgQUJJX0FUVFIKIGNsb3N1cmVfdGVzdF9mbihmZmlfY2lmKiBjaWYgX19VTlVTRURfXywgdm9pZCogcmVzcCBfX1VOVVNFRF9fLAogCQl2b2lkKiogYXJncyBfX1VOVVNFRF9fLCB2b2lkKiB1c2VyZGF0YSBfX1VOVVNFRF9fKQogewpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvdW53aW5kdGVzdF9mZmlfY2FsbC5jYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3Vud2luZHRlc3RfZmZpX2NhbGwuY2MKc2ltaWxhcml0eSBpbmRleCA5NyUKcmVuYW1lIGZyb20gTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvdW53aW5kdGVzdF9mZmlfY2FsbC5jYwpyZW5hbWUgdG8gTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvdW53aW5kdGVzdF9mZmlfY2FsbC5jYwppbmRleCA1NzE5MWYyLi5lYzYxMTY0IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC91bndpbmR0ZXN0X2ZmaV9jYWxsLmNjCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3Vud2luZHRlc3RfZmZpX2NhbGwuY2MKQEAgLTYsNyArNiw3IEBACiAKIC8qIHsgZGctZG8gcnVuIH0gKi8KIAotI2luY2x1ZGUgImZmaXRlc3RjeHguaCIKKyNpbmNsdWRlICJmZml0ZXN0LmgiCiAKIHN0YXRpYyBpbnQgY2hlY2tpbmcoaW50IGEgX19VTlVTRURfXywgc2hvcnQgYiBfX1VOVVNFRF9fLAogCQkgICAgc2lnbmVkIGNoYXIgYyBfX1VOVVNFRF9fKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvdmFfMS5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvdmFfMS5jCmluZGV4IGNmNGRkODUuLjdmOTY4MDkgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3ZhXzEuYworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC92YV8xLmMKQEAgLTk0LDcgKzk0LDcgQEAKICAgc3RydWN0IGxhcmdlX3RhZyBsMTsKIAogICBpbnQgbjsKLSAgaW50IHJlczsKKyAgZmZpX2FyZyByZXM7CiAKICAgdW5zaWduZWQgY2hhciB1YzsKICAgc2lnbmVkIGNoYXIgc2M7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC92YV9zdHJ1Y3QxLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC92YV9zdHJ1Y3QxLmMKaW5kZXggMTFkMWYxMC4uZTY0NTIwNiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvdmFfc3RydWN0MS5jCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3ZhX3N0cnVjdDEuYwpAQCAtNjEsNyArNjEsNyBAQAogICBzdHJ1Y3QgbGFyZ2VfdGFnIGwxOwogCiAgIGludCBuOwotICBpbnQgcmVzOworICBmZmlfYXJnIHJlczsKIAogICBzX3R5cGUuc2l6ZSA9IDA7CiAgIHNfdHlwZS5hbGlnbm1lbnQgPSAwOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvZmZpdGVzdGN4eC5oIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvZmZpdGVzdGN4eC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNmRhN2VmLi4wMDAwMDAwCi0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL2ZmaXRlc3RjeHguaAorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPGZjbnRsLmg+Ci0jaW5jbHVkZSA8ZmZpLmg+Ci0jaW5jbHVkZSAiZmZpY29uZmlnLmgiCi0KLSNkZWZpbmUgTUFYX0FSR1MgMjU2Ci0KLQotLyogRGVmaW5lIF9fVU5VU0VEX18gdGhhdCBhbHNvIG90aGVyIGNvbXBpbGVycyB0aGFuIGdjYyBjYW4gcnVuIHRoZSB0ZXN0cy4gICovCi0jdW5kZWYgX19VTlVTRURfXwotI2lmIGRlZmluZWQoX19HTlVDX18pCi0jZGVmaW5lIF9fVU5VU0VEX18gX19hdHRyaWJ1dGVfXygoX191bnVzZWRfXykpCi0jZWxzZQotI2RlZmluZSBfX1VOVVNFRF9fCi0jZW5kaWYKLQotI2RlZmluZSBDSEVDSyh4KSAoISh4KSA/IGFib3J0KCkgOiAodm9pZCkwKQotCi0vKiBQcmVmZXIgTUFQX0FOT04oWU1PVVMpIHRvIC9kZXYvemVybywgc2luY2Ugd2UgZG9uJ3QgbmVlZCB0byBrZWVwIGEKLSAgIGZpbGUgb3Blbi4gICovCi0jaWZkZWYgSEFWRV9NTUFQX0FOT04KLSMgdW5kZWYgSEFWRV9NTUFQX0RFVl9aRVJPCi0KLSMgaW5jbHVkZSA8c3lzL21tYW4uaD4KLSMgaWZuZGVmIE1BUF9GQUlMRUQKLSMgIGRlZmluZSBNQVBfRkFJTEVEIC0xCi0jIGVuZGlmCi0jIGlmICFkZWZpbmVkIChNQVBfQU5PTllNT1VTKSAmJiBkZWZpbmVkIChNQVBfQU5PTikKLSMgIGRlZmluZSBNQVBfQU5PTllNT1VTIE1BUF9BTk9OCi0jIGVuZGlmCi0jIGRlZmluZSBVU0lOR19NTUFQCi0KLSNlbmRpZgotCi0jaWZkZWYgSEFWRV9NTUFQX0RFVl9aRVJPCi0KLSMgaW5jbHVkZSA8c3lzL21tYW4uaD4KLSMgaWZuZGVmIE1BUF9GQUlMRUQKLSMgIGRlZmluZSBNQVBfRkFJTEVEIC0xCi0jIGVuZGlmCi0jIGRlZmluZSBVU0lOR19NTUFQCi0KLSNlbmRpZgotCi0KLS8qIE1pbkdXIGtsdWRnZS4gICovCi0jaWZkZWYgX1dJTjY0Ci0jZGVmaW5lIFBSSWRMTCAiSTY0ZCIKLSNkZWZpbmUgUFJJdUxMICJJNjR1IgotI2Vsc2UKLSNkZWZpbmUgUFJJZExMICJsbGQiCi0jZGVmaW5lIFBSSXVMTCAibGx1IgotI2VuZGlmCi0KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL3NwZWNpYWwuZXhwIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvc3BlY2lhbC5leHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxYTVmYTYuLjAwMDAwMDAKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvc3BlY2lhbC5leHAKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0jIENvcHlyaWdodCAoQykgMjAwMywgMjAwNiwgMjAwOSwgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgotIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotIwotIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotIwotIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQotIyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCi0KLWRnLWluaXQKLWxpYmZmaS1pbml0Ci0KLWdsb2JhbCBzcmNkaXIgc3ViZGlyCi0KLWdsb2JhbCBjeHhfb3B0aW9ucwotCi1zZXQgY3h4X29wdGlvbnMgIiAtc2hhcmVkLWxpYmdjYyAtbHN0ZGMrKyIKLQotaWYgeyBbc3RyaW5nIG1hdGNoICR1c2luZ19nY2MgInllcyJdIH0gewotCi0gIGRnLXJ1bnRlc3QgW2xzb3J0IFtnbG9iIC1ub2NvbXBsYWluICRzcmNkaXIvJHN1YmRpci8qLmNjXV0gJGN4eF9vcHRpb25zICItTzAgLVcgLVdhbGwiCi0gIGRnLXJ1bnRlc3QgW2xzb3J0IFtnbG9iIC1ub2NvbXBsYWluICRzcmNkaXIvJHN1YmRpci8qLmNjXV0gJGN4eF9vcHRpb25zICItTzIiCi0gIGRnLXJ1bnRlc3QgW2xzb3J0IFtnbG9iIC1ub2NvbXBsYWluICRzcmNkaXIvJHN1YmRpci8qLmNjXV0gJGN4eF9vcHRpb25zICItTzMiCi0gIGRnLXJ1bnRlc3QgW2xzb3J0IFtnbG9iIC1ub2NvbXBsYWluICRzcmNkaXIvJHN1YmRpci8qLmNjXV0gJGN4eF9vcHRpb25zICItT3MiCi0KLX0KLQotZGctZmluaXNoCi0KLSMgTG9jYWwgVmFyaWFibGVzOgotIyB0Y2wtaW5kZW50LWxldmVsOjQKLSMgRW5kOgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXhpbmZvLnRleCBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGV4aW5mby50ZXgKaW5kZXggYTVhN2IyYi4uODVmMTg0YyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXhpbmZvLnRleAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3RleGluZm8udGV4CkBAIC0zLDExICszLDExIEBACiAlIExvYWQgcGxhaW4gaWYgbmVjZXNzYXJ5LCBpLmUuLCBpZiBydW5uaW5nIHVuZGVyIGluaXRleC4KIFxleHBhbmRhZnRlclxpZnhcY3NuYW1lIGZtdG5hbWVcZW5kY3NuYW1lXHJlbGF4XGlucHV0IHBsYWluXGZpCiAlCi1cZGVmXHRleGluZm92ZXJzaW9uezIwMTItMDYtMDUuMTR9CitcZGVmXHRleGluZm92ZXJzaW9uezIwMTMtMDItMDEuMTF9CiAlCiAlIENvcHlyaWdodCAxOTg1LCAxOTg2LCAxOTg4LCAxOTkwLCAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LAogJSAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LAotJSAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExLCAyMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorJSAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExLCAyMDEyLCAyMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogJQogJSBUaGlzIHRleGluZm8udGV4IGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAlIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC0yNCw3ICsyNCw4IEBACiAlCiAlIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHdoZW4gdGhpcyBmaWxlIGlzIHJlYWQgYnkgVGVYIHdoZW4gcHJvY2Vzc2luZwogJSBhIFRleGluZm8gc291cmNlIGRvY3VtZW50LCB5b3UgbWF5IHVzZSB0aGUgcmVzdWx0IHdpdGhvdXQKLSUgcmVzdHJpY3Rpb24uICAoVGhpcyBoYXMgYmVlbiBvdXIgaW50ZW50IHNpbmNlIFRleGluZm8gd2FzIGludmVudGVkLikKKyUgcmVzdHJpY3Rpb24uIFRoaXMgRXhjZXB0aW9uIGlzIGFuIGFkZGl0aW9uYWwgcGVybWlzc2lvbiB1bmRlciBzZWN0aW9uIDcKKyUgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDMgKCJHUEx2MyIpLgogJQogJSBQbGVhc2UgdHJ5IHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0ZXhpbmZvLnRleCBiZWZvcmUgc3VibWl0dGluZyBidWcKICUgcmVwb3J0czsgeW91IGNhbiBnZXQgdGhlIGxhdGVzdCB2ZXJzaW9uIGZyb206CkBAIC01OTQsNyArNTk1LDcgQEAKIFxkZWZcOntcc3BhY2VmYWN0b3I9MTAwMCB9CiAKICUgQCogZm9yY2VzIGEgbGluZSBicmVhay4KLVxkZWZcKntcaGZpbFxicmVha1xoYm94e31caWdub3Jlc3BhY2VzfQorXGRlZlwqe1x1bnNraXBcaGZpbFxicmVha1xoYm94e31caWdub3Jlc3BhY2VzfQogCiAlIEAvIGFsbG93cyBhIGxpbmUgYnJlYWsuCiBcbGV0XC89XGFsbG93YnJlYWsKQEAgLTIyNzIsOCArMjI3Myw2IEBACiAKIFxnZGVmXG1hcmt1cHNldGNvZGVxdW90ZWxlZnR7XGxldGBcY29kZXF1b3RlbGVmdH0KIFxnZGVmXG1hcmt1cHNldGNvZGVxdW90ZXJpZ2h0e1xsZXQnXGNvZGVxdW90ZXJpZ2h0fQotCi1cZ2RlZlxtYXJrdXBzZXRub2xpZ2F0dXJlc3F1b3RlbGVmdHtcbGV0YFxub2xpZ2F0dXJlc3F1b3RlbGVmdH0KIH0KIAogXGxldFxtYXJrdXBzZXR1cGxxY29kZSBcbWFya3Vwc2V0Y29kZXF1b3RlbGVmdApAQCAtMjI4Miw2ICsyMjgxLDkgQEAKIFxsZXRcbWFya3Vwc2V0dXBscWV4YW1wbGUgXG1hcmt1cHNldGNvZGVxdW90ZWxlZnQKIFxsZXRcbWFya3Vwc2V0dXBycWV4YW1wbGUgXG1hcmt1cHNldGNvZGVxdW90ZXJpZ2h0CiAlCitcbGV0XG1hcmt1cHNldHVwbHFrYmQgICAgIFxtYXJrdXBzZXRjb2RlcXVvdGVsZWZ0CitcbGV0XG1hcmt1cHNldHVwcnFrYmQgICAgIFxtYXJrdXBzZXRjb2RlcXVvdGVyaWdodAorJQogXGxldFxtYXJrdXBzZXR1cGxxc2FtcCBcbWFya3Vwc2V0Y29kZXF1b3RlbGVmdAogXGxldFxtYXJrdXBzZXR1cHJxc2FtcCBcbWFya3Vwc2V0Y29kZXF1b3RlcmlnaHQKICUKQEAgLTIyOTEsOCArMjI5Myw2IEBACiBcbGV0XG1hcmt1cHNldHVwbHF2ZXJiYXRpbSBcbWFya3Vwc2V0Y29kZXF1b3RlbGVmdAogXGxldFxtYXJrdXBzZXR1cHJxdmVyYmF0aW0gXG1hcmt1cHNldGNvZGVxdW90ZXJpZ2h0CiAKLVxsZXRcbWFya3Vwc2V0dXBscWtiZCBcbWFya3Vwc2V0bm9saWdhdHVyZXNxdW90ZWxlZnQKLQogJSBBbGxvdyBhbiBvcHRpb24gdG8gbm90IHVzZSByZWd1bGFyIGRpcmVjdGVkIHJpZ2h0IHF1b3RlL2Fwb3N0cm9waGUKICUgKGNoYXIgMHgyNyksIGJ1dCBpbnN0ZWFkIHRoZSB1bmRpcmVjdGVkIHF1b3RlIGZyb20gY210dCAoY2hhciAweDBkKS4KICUgVGhlIHVuZGlyZWN0ZWQgcXVvdGUgaXMgdWdseSwgc28gZG9uJ3QgbWFrZSBpdCB0aGUgZGVmYXVsdCwgYnV0IGl0CkBAIC0yMzgyLDggKzIzODIsNyBAQAogICBcYWZ0ZXJzbWFydGljCiB9CiAKLSUgbGlrZSBcc21hcnRzbGFudGVkIGV4Y2VwdCB1bmNvbmRpdGlvbmFsbHkgdXNlcyBcdHRzbCwgYW5kIG5vIGljLgotJSBAdmFyIGlzIHNldCB0byB0aGlzIGZvciBkZWZ1biBhcmd1bWVudHMuCislIFVuY29uZGl0aW9uYWwgdXNlIFx0dHNsLCBhbmQgbm8gaWMuICBAdmFyIGlzIHNldCB0byB0aGlzIGZvciBkZWZ1bnMuCiBcZGVmXHR0c2xhbnRlZCMxe3tcdHRzbCAjMX19CiAKICUgQGNpdGUgaXMgbGlrZSBcc21hcnRzbGFudGVkIGV4Y2VwdCB1bmNvbmRpdGlvbmFsbHkgdXNlIFxzbC4gIFdlIG5ldmVyIHdhbnQKQEAgLTI0NDgsMzQgKzI0NDcsMTIgQEAKICUgQHNhbXAuCiBcZGVmXHNhbXAjMXt7XHNldHVwbWFya3Vwc3R5bGV7c2FtcH1cbHFcdGNsb3NleyMxfVxycVxudWxsfX0KIAotJSBkZWZpbml0aW9uIG9mIEBrZXkgdGhhdCBwcm9kdWNlcyBhIGxvemVuZ2UuICBEb2Vzbid0IGFkanVzdCB0byB0ZXh0IHNpemUuCi0lXHNldGZvbnRca2V5cm1ccm1zaGFwZXs4fXsxMDAwfXtPVDF9Ci0lXGZvbnRca2V5c3k9Y21zeTkKLSVcZGVmXGtleSMxe3tca2V5cm1cdGV4dGZvbnQyPVxrZXlzeSBcbGVhdmV2bW9kZVxoYm94eyUKLSUgIFxyYWlzZTAuNHB0XGhib3h7XGFuZ2xlbGVmdH1ca2Vybi0uMDhlbVx2dG9weyUKLSUgICAgXHZib3h7XGhydWxlXGtlcm4tMC40cHQKLSUgICAgIFxoYm94e1xyYWlzZTAuNHB0XGhib3h7XHZwaGFudG9te1xhbmdsZWxlZnR9fSMxfX0lCi0lICAgIFxrZXJuLTAuNHB0XGhydWxlfSUKLSUgIFxrZXJuLS4wNmVtXHJhaXNlMC40cHRcaGJveHtcYW5nbGVyaWdodH19fX0KKyUgQGluZGljYXRldXJsIGlzIFxzYW1wLCB0aGF0IGlzLCB3aXRoIHF1b3Rlcy4KK1xsZXRcaW5kaWNhdGV1cmw9XHNhbXAKIAotJSBkZWZpbml0aW9uIG9mIEBrZXkgd2l0aCBubyBsb3plbmdlLiAgSWYgdGhlIGN1cnJlbnQgZm9udCBpcyBhbHJlYWR5Ci0lIG1vbm9zcGFjZSwgZG9uJ3QgY2hhbmdlIGl0OyB0aGF0IHdheSwgd2UgcmVzcGVjdCBAa2JkaW5wdXRzdHlsZS4gIEJ1dAotJSBpZiBpdCBpc24ndCBtb25vc3BhY2UsIHRoZW4gdXNlIFx0dC4KLSUKLVxkZWZca2V5IzF7e1xzZXR1cG1hcmt1cHN0eWxle2tleX0lCi0gIFxub2h5cGhlbmF0aW9uCi0gIFxpZm1vbm9zcGFjZVxlbHNlXHR0XGZpCi0gICMxfVxudWxsfQotCi0lIGN0cmwgaXMgbm8gbG9uZ2VyIGEgVGV4aW5mbyBjb21tYW5kLgotXGRlZlxjdHJsICMxe3tcdHQgXHJhd2JhY2tzbGFzaCBcaGF0fSMxfQotCi0lIEBmaWxlLCBAb3B0aW9uIGFyZSB0aGUgc2FtZSBhcyBAc2FtcC4KLVxsZXRcZmlsZT1cc2FtcAotXGxldFxvcHRpb249XHNhbXAKLQotJSBAY29kZSBpcyBhIG1vZGlmaWNhdGlvbiBvZiBAdCwKLSUgd2hpY2ggbWFrZXMgc3BhY2VzIHRoZSBzYW1lIHNpemUgYXMgbm9ybWFsIGluIHRoZSBzdXJyb3VuZGluZyB0ZXh0LgorJSBAY29kZSAoYW5kIHNpbWlsYXIpIHByaW50cyBpbiB0eXBld3JpdGVyLCBidXQgd2l0aCBzcGFjZXMgdGhlIHNhbWUKKyUgc2l6ZSBhcyBub3JtYWwgaW4gdGhlIHN1cnJvdW5kaW5nIHRleHQsIHdpdGhvdXQgaHlwaGVuYXRpb24sIGV0Yy4KKyUgVGhpcyBpcyBhIHN1YnJvdXRpbmUgZm9yIHRoYXQuCiBcZGVmXHRjbG9zZSMxeyUKICAgeyUKICAgICAlIENoYW5nZSBub3JtYWwgaW50ZXJ3b3JkIHNwYWNlIHRvIGJlIHNhbWUgYXMgZm9yIHRoZSBjdXJyZW50IGZvbnQuCkBAIC0yNTAwLDcgKzI0NzcsNyBAQAogJSBXZSAqbXVzdCogdHVybiBvbiBoeXBoZW5hdGlvbiBhdCBgLScgYW5kIGBfJyBpbiBAY29kZS4KICUgT3RoZXJ3aXNlLCBpdCBpcyB0b28gaGFyZCB0byBhdm9pZCBvdmVyZnVsbCBoYm94ZXMKICUgaW4gdGhlIEVtYWNzIG1hbnVhbCwgdGhlIExpYnJhcnkgbWFudWFsLCBldGMuCi0KKyUKICUgVW5mb3J0dW5hdGVseSwgVGVYIHVzZXMgb25lIHBhcmFtZXRlciAoXGh5cGhlbmNoYXIpIHRvIGNvbnRyb2wKICUgYm90aCBoeXBoZW5hdGlvbiBhdCAtIGFuZCBoeXBoZW5hdGlvbiB3aXRoaW4gd29yZHMuCiAlIFdlIG11c3QgdGhlcmVmb3JlIHR1cm4gdGhlbSBib3RoIG9mZiAoXHRjbG9zZSBkb2VzIHRoYXQpCkBAIC0yNTE5LDcgKzI0OTYsNyBAQAogICAgICBcbGV0LVxjb2RlZGFzaAogICAgICBcbGV0X1xjb2RldW5kZXIKICAgICBcZWxzZQotICAgICBcbGV0LVxyZWFsZGFzaAorICAgICBcbGV0LVxub3JtYWxkYXNoCiAgICAgIFxsZXRfXHJlYWx1bmRlcgogICAgIFxmaQogICAgIFxjb2RleApAQCAtMjUyOCw3ICsyNTA1LDcgQEAKIAogXGRlZlxjb2RleCAjMXtcdGNsb3NleyMxfVxlbmRncm91cH0KIAotXGRlZlxyZWFsZGFzaHstfQorXGRlZlxub3JtYWxkYXNoey19CiBcZGVmXGNvZGVkYXNoey1cZGlzY3JldGlvbmFyeXt9e317fX0KIFxkZWZcY29kZXVuZGVyeyUKICAgJSB0aGlzIGlzIGFsbCBzbyBAbWF0aHtAY29kZXt2YXJfbmFtZX0rMX0gY2FuIHdvcmsuICBJbiBtYXRoIG1vZGUsIF8KQEAgLTI1NDMsOSArMjUyMCw5IEBACiB9CiAKICUgQW4gYWRkaXRpb25hbCBjb21wbGljYXRpb246IHRoZSBhYm92ZSB3aWxsIGFsbG93IGJyZWFrcyBhZnRlciwgZS5nLiwKLSUgZWFjaCBvZiB0aGUgZm91ciB1bmRlcnNjb3JlcyBpbiBfX3R5cGVvZl9fLiAgVGhpcyBpcyB1bmRlc2lyYWJsZSBpbgotJSBzb21lIG1hbnVhbHMsIGVzcGVjaWFsbHkgaWYgdGhleSBkb24ndCBoYXZlIGxvbmcgaWRlbnRpZmllcnMgaW4KLSUgZ2VuZXJhbC4gIEBhbGxvd2NvZGVicmVha3MgcHJvdmlkZXMgYSB3YXkgdG8gY29udHJvbCB0aGlzLgorJSBlYWNoIG9mIHRoZSBmb3VyIHVuZGVyc2NvcmVzIGluIF9fdHlwZW9mX18uICBUaGlzIGlzIGJhZC4KKyUgQGFsbG93Y29kZWJyZWFrcyBwcm92aWRlcyBhIGRvY3VtZW50LWxldmVsIHdheSB0byB0dXJuIGJyZWFraW5nIGF0IC0KKyUgYW5kIF8gb24gYW5kIG9mZi4KICUKIFxuZXdpZlxpZmFsbG93Y29kZWJyZWFrcyAgXGFsbG93Y29kZWJyZWFrc3RydWUKIApAQCAtMjU2NCw2ICsyNTQxLDEzIEBACiAgIFxmaVxmaQogfQogCislIEZvciBAY29tbWFuZCwgQGVudiwgQGZpbGUsIEBvcHRpb24gcXVvdGVzIHNlZW0gdW5uZWNlc3NhcnksCislIHNvIHVzZSBcY29kZSByYXRoZXIgdGhhbiBcc2FtcC4KK1xsZXRcY29tbWFuZD1cY29kZQorXGxldFxlbnY9XGNvZGUKK1xsZXRcZmlsZT1cY29kZQorXGxldFxvcHRpb249XGNvZGUKKwogJSBAdXJlZiAoYWJicmV2aWF0aW9uIGZvciBgdXJscmVmJykgdGFrZXMgYW4gb3B0aW9uYWwgKGNvbW1hLXNlcGFyYXRlZCkKICUgc2Vjb25kIGFyZ3VtZW50IHNwZWNpZnlpbmcgdGhlIHRleHQgdG8gZGlzcGxheSBhbmQgYW4gb3B0aW9uYWwgdGhpcmQKICUgYXJnIGFzIHRleHQgdG8gZGlzcGxheSBpbnN0ZWFkIG9mIChyYXRoZXIgdGhhbiBpbiBhZGRpdGlvbiB0bykgdGhlIHVybApAQCAtMjcxMCwxMCArMjY5NCw2IEBACiAgIFxsZXRcZW1haWw9XHVyZWYKIFxmaQogCi0lIEBrYmQgaXMgbGlrZSBAY29kZSwgZXhjZXB0IHRoYXQgaWYgdGhlIGFyZ3VtZW50IGlzIGp1c3Qgb25lIEBrZXkgY29tbWFuZCwKLSUgdGhlbiBAa2JkIGhhcyBubyBlZmZlY3QuCi1cZGVmXGtiZCMxe3tcc2V0dXBtYXJrdXBzdHlsZXtrYmR9XGRlZlxsb29reyMxfVxleHBhbmRhZnRlclxrYmRmb29cbG9vaz8/XHBhcn19Ci0KICUgQGtiZGlucHV0c3R5bGUgLS0gYXJnIGlzIGBkaXN0aW5jdCcgKEBrYmQgdXNlcyBzbGFudGVkIHR0eSBmb250IGFsd2F5cyksCiAlICAgYGV4YW1wbGUnIChAa2JkIHVzZXMgdHRzbCBvbmx5IGluc2lkZSBvZiBAZXhhbXBsZSBhbmQgZnJpZW5kcyksCiAlICAgb3IgYGNvZGUnIChAa2JkIHVzZXMgbm9ybWFsIHR0eSBmb250IGFsd2F5cykuCkBAIC0yNzM3LDE2ICsyNzE3LDM2IEBACiAlIERlZmF1bHQgaXMgYGRpc3RpbmN0Jy4KIFxrYmRpbnB1dHN0eWxlIGRpc3RpbmN0CiAKLVxkZWZceGtleXtca2V5fQotXGRlZlxrYmRmb28jMSMyIzNccGFye1xkZWZcb25leyMxfVxkZWZcdGhyZWV7IzN9XGRlZlx0aHJlZXh7Pz99JQotXGlmeFxvbmVceGtleVxpZnhcdGhyZWV4XHRocmVlIFxrZXl7IzJ9JQotXGVsc2V7XHRjbG9zZXtca2JkZm9udFxzZXR1cG1hcmt1cHN0eWxle2tiZH1cbG9va319XGZpCi1cZWxzZXtcdGNsb3Nle1xrYmRmb250XHNldHVwbWFya3Vwc3R5bGV7a2JkfVxsb29rfX1cZml9CislIEBrYmQgaXMgbGlrZSBAY29kZSwgZXhjZXB0IHRoYXQgaWYgdGhlIGFyZ3VtZW50IGlzIGp1c3Qgb25lIEBrZXkgY29tbWFuZCwKKyUgdGhlbiBAa2JkIGhhcyBubyBlZmZlY3QuCitcZGVmXGtiZCMxe3tcZGVmXGxvb2t7IzF9XGV4cGFuZGFmdGVyXGtiZHN1Ylxsb29rPz9ccGFyfX0KIAotJSBGb3IgQGluZGljYXRldXJsLCBAZW52LCBAY29tbWFuZCBxdW90ZXMgc2VlbSB1bm5lY2Vzc2FyeSwgc28gdXNlIFxjb2RlLgotXGxldFxpbmRpY2F0ZXVybD1cY29kZQotXGxldFxlbnY9XGNvZGUKLVxsZXRcY29tbWFuZD1cY29kZQorXGRlZlx4a2V5e1xrZXl9CitcZGVmXGtiZHN1YiMxIzIjM1xwYXJ7JQorICBcZGVmXG9uZXsjMX1cZGVmXHRocmVleyMzfVxkZWZcdGhyZWV4ez8/fSUKKyAgXGlmeFxvbmVceGtleVxpZnhcdGhyZWV4XHRocmVlIFxrZXl7IzJ9JQorICBcZWxzZXtcdGNsb3Nle1xrYmRmb250XHNldHVwbWFya3Vwc3R5bGV7a2JkfVxsb29rfX1cZmkKKyAgXGVsc2V7XHRjbG9zZXtca2JkZm9udFxzZXR1cG1hcmt1cHN0eWxle2tiZH1cbG9va319XGZpCit9CisKKyUgZGVmaW5pdGlvbiBvZiBAa2V5IHRoYXQgcHJvZHVjZXMgYSBsb3plbmdlLiAgRG9lc24ndCBhZGp1c3QgdG8gdGV4dCBzaXplLgorJVxzZXRmb250XGtleXJtXHJtc2hhcGV7OH17MTAwMH17T1QxfQorJVxmb250XGtleXN5PWNtc3k5CislXGRlZlxrZXkjMXt7XGtleXJtXHRleHRmb250Mj1ca2V5c3kgXGxlYXZldm1vZGVcaGJveHslCislICBccmFpc2UwLjRwdFxoYm94e1xhbmdsZWxlZnR9XGtlcm4tLjA4ZW1cdnRvcHslCislICAgIFx2Ym94e1xocnVsZVxrZXJuLTAuNHB0CislICAgICBcaGJveHtccmFpc2UwLjRwdFxoYm94e1x2cGhhbnRvbXtcYW5nbGVsZWZ0fX0jMX19JQorJSAgICBca2Vybi0wLjRwdFxocnVsZX0lCislICBca2Vybi0uMDZlbVxyYWlzZTAuNHB0XGhib3h7XGFuZ2xlcmlnaHR9fX19CisKKyUgZGVmaW5pdGlvbiBvZiBAa2V5IHdpdGggbm8gbG96ZW5nZS4gIElmIHRoZSBjdXJyZW50IGZvbnQgaXMgYWxyZWFkeQorJSBtb25vc3BhY2UsIGRvbid0IGNoYW5nZSBpdDsgdGhhdCB3YXksIHdlIHJlc3BlY3QgQGtiZGlucHV0c3R5bGUuICBCdXQKKyUgaWYgaXQgaXNuJ3QgbW9ub3NwYWNlLCB0aGVuIHVzZSBcdHQuCislCitcZGVmXGtleSMxe3tcc2V0dXBtYXJrdXBzdHlsZXtrZXl9JQorICBcbm9oeXBoZW5hdGlvbgorICBcaWZtb25vc3BhY2VcZWxzZVx0dFxmaQorICAjMX1cbnVsbH0KIAogJSBAY2xpY2tzZXF1ZW5jZXtGaWxlIEBjbGlja3t9IE9wZW4gLi4ufQogXGRlZlxjbGlja3NlcXVlbmNlIzF7XGJlZ2luZ3JvdXAgIzFcZW5kZ3JvdXB9CkBAIC0yODU0LDYgKzI4NTQsOSBAQAogICB9CiB9CiAKKyUgY3RybCBpcyBubyBsb25nZXIgYSBUZXhpbmZvIGNvbW1hbmQsIGJ1dCBsZWF2ZSB0aGlzIGRlZmluaXRpb24gZm9yIGZ1bi4KK1xkZWZcY3RybCAjMXt7XHR0IFxyYXdiYWNrc2xhc2ggXGhhdH0jMX0KKwogJSBAaW5saW5lZm10e0ZNVE5BTUUsUFJPQ0VTU0VELVRFWFR9IGFuZCBAaW5saW5lcmF3e0ZNVE5BTUUsUkFXLVRFWFR9LgogJSBJZ25vcmUgdW5sZXNzIEZNVE5BTUUgPT0gdGV4OyB0aGVuIGl0IGlzIGxpa2UgQGlmdGV4IGFuZCBAdGV4LAogJSBleGNlcHQgc3BlY2lmaWVkIGFzIGEgbm9ybWFsIGJyYWNlZCBhcmcsIHNvIG5vIG5ld2xpbmVzIHRvIHdvcnJ5IGFib3V0LgpAQCAtMzE0NCwxMiArMzE0NywxNyBAQAogICAlIGhvcGVmdWxseSBub2JvZHkgd2lsbCBub3RpY2UvY2FyZS4KICAgXGVkZWZcZWNzaXple1xjc25hbWVcY3VyZm9udHNpemUgZWNzaXplXGVuZGNzbmFtZX0lCiAgIFxlZGVmXG5vbWluYWxzaXple1xjc25hbWVcY3VyZm9udHNpemUgbm9taW5hbHNpemVcZW5kY3NuYW1lfSUKLSAgXGlmeFxjdXJmb250c3R5bGVcYmZzdHlsZW5hbWUKLSAgICAlIGJvbGQ6Ci0gICAgXGZvbnRcdGhpc2VjZm9udCA9IGVjYlxpZnVzaW5naXR7aX17eH1cZWNzaXplIFxzcGFjZSBhdCBcbm9taW5hbHNpemUKKyAgXGlmbW9ub3NwYWNlCisgICAgJSB0eXBld3JpdGVyOgorICAgIFxmb250XHRoaXNlY2ZvbnQgPSBlY3R0XGVjc2l6ZSBcc3BhY2UgYXQgXG5vbWluYWxzaXplCiAgIFxlbHNlCi0gICAgJSByZWd1bGFyOgotICAgIFxmb250XHRoaXNlY2ZvbnQgPSBlY1xpZnVzaW5naXR7dGl9e3JtfVxlY3NpemUgXHNwYWNlIGF0IFxub21pbmFsc2l6ZQorICAgIFxpZnhcY3VyZm9udHN0eWxlXGJmc3R5bGVuYW1lCisgICAgICAlIGJvbGQ6CisgICAgICBcZm9udFx0aGlzZWNmb250ID0gZWNiXGlmdXNpbmdpdHtpfXt4fVxlY3NpemUgXHNwYWNlIGF0IFxub21pbmFsc2l6ZQorICAgIFxlbHNlCisgICAgICAlIHJlZ3VsYXI6CisgICAgICBcZm9udFx0aGlzZWNmb250ID0gZWNcaWZ1c2luZ2l0e3RpfXtybX1cZWNzaXplIFxzcGFjZSBhdCBcbm9taW5hbHNpemUKKyAgICBcZmkKICAgXGZpCiAgIFx0aGlzZWNmb250CiB9CkBAIC0zMjYyLDYgKzMyNzAsMjAgQEAKICAgXGZpbmlzaGVkdGl0bGVwYWdldHJ1ZQogfQogCislIFNldHRpbmdzIHVzZWQgZm9yIHR5cGVzZXR0aW5nIHRpdGxlczogbm8gaHlwaGVuYXRpb24sIG5vIGluZGVudGF0aW9uLAorJSBkb24ndCB3b3JyeSBtdWNoIGFib3V0IHNwYWNpbmcsIHJhZ2dlZCByaWdodC4gIFRoaXMgc2hvdWxkIGJlIHVzZWQKKyUgaW5zaWRlIGEgXHZib3gsIGFuZCBmb250cyBuZWVkIHRvIGJlIHNldCBhcHByb3ByaWF0ZWx5IGZpcnN0LiAgQmVjYXVzZQorJSBpdCBpcyBhbHdheXMgdXNlZCBmb3IgdGl0bGVzLCBub3RoaW5nIGVsc2UsIHdlIGNhbGwgXHJtaXNib2xkLiAgXHBhcgorJSBzaG91bGQgYmUgc3BlY2lmaWVkIGJlZm9yZSB0aGUgZW5kIG9mIHRoZSBcdmJveCwgc2luY2UgYSB2Ym94IGlzIGEgZ3JvdXAuCislIAorXGRlZlxyYWdnZWR0aXRsZXNldHRpbmdzeyUKKyAgXHJtaXNib2xkCisgIFxoeXBoZW5wZW5hbHR5PTEwMDAwCisgIFxwYXJpbmRlbnQ9MHB0CisgIFx0b2xlcmFuY2U9NTAwMAorICBccHRleHJhZ2dlZHJpZ2h0Cit9CisKICUgTWFjcm9zIHRvIGJlIHVzZWQgd2l0aGluIEB0aXRsZXBhZ2U6CiAKIFxsZXRcc3VidGl0bGVybT1cdGVucm0KQEAgLTMyNjksNyArMzI5MSw3IEBACiAKIFxwYXJzZWFyZ2RlZlx0aXRsZXslCiAgIFxjaGVja2Vudlx0aXRsZXBhZ2UKLSAgXGxlZnRsaW5le1x0aXRsZWZvbnRzXHJtaXNib2xkICMxfQorICBcdmJveHtcdGl0bGVmb250cyBccmFnZ2VkdGl0bGVzZXR0aW5ncyAjMVxwYXJ9JQogICAlIHByaW50IGEgcnVsZSBhdCB0aGUgcGFnZSBib3R0b20gYWxzby4KICAgXGZpbmlzaGVkdGl0bGVwYWdlZmFsc2UKICAgXHZza2lwNHB0IFxocnVsZSBoZWlnaHQgNHB0IHdpZHRoIFxoc2l6ZSBcdnNraXA0cHQKQEAgLTQxNjYsNyArNDE4OCw3IEBACiAgICAgJSAuLi4sIGJ1dCB3ZSBtaWdodCBlbmQgdXAgd2l0aCBhY3RpdmUgb25lcyBpbiB0aGUgYXJndW1lbnQgaWYKICAgICAlIHdlJ3JlIGNhbGxlZCBmcm9tIEBjb2RlLCBhcyBAY29kZXtAdmFsdWV7Zm9vLWJhcl99fSwgdGhvdWdoLgogICAgICUgU28gXGxldCB0aGVtIHRvIHRoZWlyIG5vcm1hbCBlcXVpdmFsZW50cy4KLSAgICBcbGV0LVxyZWFsZGFzaCBcbGV0X1xub3JtYWx1bmRlcnNjb3JlCisgICAgXGxldC1cbm9ybWFsZGFzaCBcbGV0X1xub3JtYWx1bmRlcnNjb3JlCiAgIH0KIH0KIApAQCAtNDIwNiw3ICs0MjI4LDcgQEAKIH0KIFxkZWZcaWZzZXRmYWlse1xkb2lnbm9yZXtpZnNldH19CiAKLSUgQGlmY2xlYXIgVkFSIC4uLiBAZW5kIGlmY2xlYXIgcmVhZHMgdGhlIGAuLi4nIGlmZiBWQVIgaGFzIG5ldmVyIGJlZW4KKyUgQGlmY2xlYXIgVkFSIC4uLiBAZW5kIGV4ZWN1dGVzIHRoZSBgLi4uJyBpZmYgVkFSIGhhcyBuZXZlciBiZWVuCiAlIGRlZmluZWQgd2l0aCBAc2V0LCBvciBoYXMgYmVlbiB1bmRlZmluZWQgd2l0aCBAY2xlYXIuCiAlCiAlIFRoZSBgXGVsc2UnIGluc2lkZSB0aGUgYFxkb2lmc2V0JyBwYXJhbWV0ZXIgaXMgYSB0cmljayB0byByZXVzZSB0aGUKQEAgLTQyMTcsNiArNDIzOSwzNSBAQAogXGRlZlxpZmNsZWFye1xwYXJzZWFyZ3tcZG9pZnNldHtcZWxzZSBcbGV0XG5leHQ9XGlmY2xlYXJmYWlsfX19CiBcZGVmXGlmY2xlYXJmYWlse1xkb2lnbm9yZXtpZmNsZWFyfX0KIAorJSBAaWZjb21tYW5kaXNkZWZpbmVkIENNRCAuLi4gQGVuZCBleGVjdXRlcyB0aGUgYC4uLicgaWYgQ01EICh3cml0dGVuCislIHdpdGhvdXQgdGhlIEApIGlzIGluIGZhY3QgZGVmaW5lZC4gIFdlIGNhbiBvbmx5IGZlYXNpYmx5IGNoZWNrIGF0IHRoZQorJSBUZVggbGV2ZWwsIHNvIHNvbWV0aGluZyBsaWtlIGBtYXRoY29kZScgaXMgZ29pbmcgdG8gY29uc2lkZXJlZAorJSBkZWZpbmVkIGV2ZW4gdGhvdWdoIGl0IGlzIG5vdCBhIFRleGluZm8gY29tbWFuZC4KKyUgCitcbWFrZWNvbmR7aWZjb21tYW5kZGVmaW5lZH0KK1xkZWZcaWZjb21tYW5kZGVmaW5lZHtccGFyc2Vhcmd7XGRvaWZjbWRkZWZpbmVke1xsZXRcbmV4dD1caWZjbWRkZWZpbmVkZmFpbH19fQorJQorXGRlZlxkb2lmY21kZGVmaW5lZCMxIzJ7eyUKKyAgICBcbWFrZXZhbHVlZXhwYW5kYWJsZQorICAgIFxsZXRcbmV4dD1cZW1wdHkKKyAgICBcZXhwYW5kYWZ0ZXJcaWZ4XGNzbmFtZSAjMlxlbmRjc25hbWVccmVsYXgKKyAgICAgICMxJSBJZiBub3QgZGVmaW5lZCwgXGxldFxuZXh0IGFzIGFib3ZlLgorICAgIFxmaQorICAgIFxleHBhbmRhZnRlcgorICB9XG5leHQKK30KK1xkZWZcaWZjbWRkZWZpbmVkZmFpbHtcZG9pZ25vcmV7aWZjb21tYW5kZGVmaW5lZH19CisKKyUgQGlmY29tbWFuZG5vdGRlZmluZWQgQ01EIC4uLiBoYW5kbGVkIHNpbWlsYXIgdG8gQGlmY2xlYXIgYWJvdmUuCitcbWFrZWNvbmR7aWZjb21tYW5kbm90ZGVmaW5lZH0KK1xkZWZcaWZjb21tYW5kbm90ZGVmaW5lZHslCisgIFxwYXJzZWFyZ3tcZG9pZmNtZGRlZmluZWR7XGVsc2UgXGxldFxuZXh0PVxpZmNtZG5vdGRlZmluZWRmYWlsfX19CitcZGVmXGlmY21kbm90ZGVmaW5lZGZhaWx7XGRvaWdub3Jle2lmY29tbWFuZG5vdGRlZmluZWR9fQorCislIFNldCB0aGUgYHR4aWNvbW1hbmRjb25kaXRpb25hbHMnIHZhcmlhYmxlLCBzbyBkb2N1bWVudHMgaGF2ZSBhIHdheSB0bworJSB0ZXN0IGlmIHRoZSBAaWZjb21tYW5kLi4uZGVmaW5lZCBjb25kaXRpb25hbHMgYXJlIGF2YWlsYWJsZS4KK1xzZXQgdHhpY29tbWFuZGNvbmRpdGlvbmFscworCiAlIEBkaXJjYXRlZ29yeSBDQVRFR09SWSAgLS0gc3BlY2lmeSBhIGNhdGVnb3J5IG9mIHRoZSBkaXIgZmlsZQogJSB3aGljaCB0aGlzIGZpbGUgc2hvdWxkIGJlbG9uZyB0by4gIElnbm9yZSB0aGlzIGluIFRlWC4KIFxsZXRcZGlyY2F0ZWdvcnk9XGNvbW1lbnQKQEAgLTU1NDMsMTQgKzU1OTQsNiBAQAogCiAlIERlZmluZSBAbWFqb3JoZWFkaW5nLCBAaGVhZGluZyBhbmQgQHN1YmhlYWRpbmcKIAotJSBOT1RFIG9uIHVzZSBvZiBcdmJveCBmb3IgY2hhcHRlciBoZWFkaW5ncywgc2VjdGlvbiBoZWFkaW5ncywgYW5kIHN1Y2g6Ci0lICAgICAgIDEpIFdlIHVzZSBcdmJveCByYXRoZXIgdGhhbiB0aGUgZWFybGllciBcbGluZSB0byBwZXJtaXQKLSUgICAgICAgICAgb3ZlcmxvbmcgaGVhZGluZ3MgdG8gZm9sZC4KLSUgICAgICAgMikgXGh5cGhlbnBlbmFsdHkgaXMgc2V0IHRvIDEwMDAwIGJlY2F1c2UgaHlwaGVuYXRpb24gaW4gYQotJSAgICAgICAgICBoZWFkaW5nIGlzIG9ibm94aW91czsgdGhpcyBmb3JiaWRzIGl0LgotJSAgICAgICAzKSBMaWtld2lzZSwgaGVhZGluZ3MgbG9vayBiZXN0IGlmIG5vIFxwYXJpbmRlbnQgaXMgdXNlZCwgYW5kCi0lICAgICAgICAgIGlmIGp1c3RpZmljYXRpb24gaXMgbm90IGF0dGVtcHRlZC4gIEhlbmNlIFxyYWdnZWRyaWdodC4KLQogXGRlZlxtYWpvcmhlYWRpbmd7JQogICB7XGFkdmFuY2VcY2hhcGhlYWRpbmdza2lwIGJ5IDEwcHQgXGNoYXBicmVhayB9JQogICBccGFyc2VhcmdcY2hhcGhlYWRpbmd6enoKQEAgLTU1NTgsMTAgKzU2MDEsOCBAQAogCiBcZGVmXGNoYXBoZWFkaW5ne1xjaGFwYnJlYWsgXHBhcnNlYXJnXGNoYXBoZWFkaW5nenp6fQogXGRlZlxjaGFwaGVhZGluZ3p6eiMxeyUKLSAge1xjaGFwZm9udHMgXHZib3h7XGh5cGhlbnBlbmFsdHk9MTAwMDBcdG9sZXJhbmNlPTUwMDAKLSAgICAgICAgICAgICAgICAgICAgXHBhcmluZGVudD0wcHRccHRleHJhZ2dlZHJpZ2h0Ci0gICAgICAgICAgICAgICAgICAgIFxybWlzYm9sZCAjMVxoZmlsbH19JQotICBcYmlnc2tpcCBccGFyXHBlbmFsdHkgMjAwXHJlbGF4CisgIFx2Ym94e1xjaGFwZm9udHMgXHJhZ2dlZHRpdGxlc2V0dGluZ3MgIzFccGFyfSUKKyAgXG5vYnJlYWtcYmlnc2tpcCBcbm9icmVhawogICBcc3VwcHJlc3NmaXJzdHBhcmFncmFwaGluZGVudAogfQogCkBAIC01NzIwLDggKzU3NjEsNyBAQAogICAgICUKICAgICAlIFR5cGVzZXQgdGhlIGFjdHVhbCBoZWFkaW5nLgogICAgIFxub2JyZWFrICUgQXZvaWQgcGFnZSBicmVha3MgYXQgdGhlIGludGVybGluZSBnbHVlLgotICAgIFx2Ym94e1xoeXBoZW5wZW5hbHR5PTEwMDAwIFx0b2xlcmFuY2U9NTAwMCBccGFyaW5kZW50PTBwdCBccHRleHJhZ2dlZHJpZ2h0Ci0gICAgICAgICAgXGhhbmdpbmRlbnQ9XHdkMCBcY2VudGVycGFyYW1ldGVyc21heWJlCisgICAgXHZib3h7XHJhZ2dlZHRpdGxlc2V0dGluZ3MgXGhhbmdpbmRlbnQ9XHdkMCBcY2VudGVycGFyYW1ldGVyc21heWJlCiAgICAgICAgICAgXHVuaGJveDAgIzFccGFyfSUKICAgfSUKICAgXG5vYnJlYWtcYmlnc2tpcCAlIG5vIHBhZ2UgYnJlYWsgYWZ0ZXIgYSBjaGFwdGVyIHRpdGxlCkBAIC01NzQzLDE4ICs1NzgzLDE4IEBACiBcZGVmXHNldGNoYXB0ZXJzdHlsZSAjMSB7XGNzbmFtZSBDSEFQRiMxXGVuZGNzbmFtZX0KICUKIFxkZWZcdW5uY2hmb3BlbiAjMXslCi1cY2hhcG9kZHBhZ2Uge1xjaGFwZm9udHMgXHZib3h7XGh5cGhlbnBlbmFsdHk9MTAwMDBcdG9sZXJhbmNlPTUwMDAKLSAgICAgICAgICAgICAgICAgICAgICAgXHBhcmluZGVudD0wcHRccHRleHJhZ2dlZHJpZ2h0Ci0gICAgICAgICAgICAgICAgICAgICAgIFxybWlzYm9sZCAjMVxoZmlsbH19XGJpZ3NraXAgXHBhclxub2JyZWFrCisgIFxjaGFwb2RkcGFnZQorICBcdmJveHtcY2hhcGZvbnRzIFxyYWdnZWR0aXRsZXNldHRpbmdzICMxXHBhcn0lCisgIFxub2JyZWFrXGJpZ3NraXBcbm9icmVhawogfQogXGRlZlxjaGZvcGVuICMxIzJ7XGNoYXBvZGRwYWdlIHtcY2hhcGZvbnRzCiBcdmJveCB0byAzaW57XHZmaWwgXGhib3ggdG9caHNpemV7XGhmaWwgIzJ9IFxoYm94IHRvXGhzaXple1xoZmlsICMxfSBcdmZpbH19JQogXHBhclxwZW5hbHR5IDUwMDAgJQogfQogXGRlZlxjZW50ZXJjaGZvcGVuICMxeyUKLVxjaGFwb2RkcGFnZSB7XGNoYXBmb250cyBcdmJveHtcaHlwaGVucGVuYWx0eT0xMDAwMFx0b2xlcmFuY2U9NTAwMAotICAgICAgICAgICAgICAgICAgICAgICBccGFyaW5kZW50PTBwdAotICAgICAgICAgICAgICAgICAgICAgICBcaGZpbGwge1xybWlzYm9sZCAjMX1caGZpbGx9fVxiaWdza2lwIFxwYXJcbm9icmVhaworICBcY2hhcG9kZHBhZ2UKKyAgXHZib3h7XGNoYXBmb250cyBccmFnZ2VkdGl0bGVzZXR0aW5ncyBcaGZpbGwgIzFcaGZpbGx9JQorICBcbm9icmVha1xiaWdza2lwIFxub2JyZWFrCiB9CiBcZGVmXENIQVBGb3BlbnslCiAgIFxnbG9iYWxcbGV0XGNoYXBtYWNybz1cY2hmb3BlbgpAQCAtNjUyMCwxNiArNjU2MCw5IEBACiBcbWFrZWRpc3BlbnZkZWZ7cXVvdGF0aW9ufXtccXVvdGF0aW9uc3RhcnR9CiAlCiBcZGVmXHF1b3RhdGlvbnN0YXJ0eyUKLSAge1xwYXJza2lwPTBwdCBcYWJvdmVlbnZicmVha30lIGJlY2F1c2UgXGFib3ZlZW52YnJlYWsgaW5zZXJ0cyBccGFyc2tpcAotICBccGFyaW5kZW50PTBwdAotICAlCi0gICUgQGNhcnRvdWNoZSBkZWZpbmVzIFxub25hcnJvd2luZyB0byBpbmhpYml0IG5hcnJvd2luZyBhdCBuZXh0IGxldmVsIGRvd24uCisgIFxpbmRlbnRlZGJsb2Nrc3RhcnQgJSBzYW1lIGFzIFxpbmRlbnRlZGJsb2NrLCBidXQgaW5jcmVhc2UgcmlnaHQgbWFyZ2luIHRvby4KICAgXGlmeFxub25hcnJvd2luZ1xyZWxheAotICAgIFxhZHZhbmNlXGxlZnRza2lwIGJ5IFxsaXNwbmFycm93aW5nCiAgICAgXGFkdmFuY2VccmlnaHRza2lwIGJ5IFxsaXNwbmFycm93aW5nCi0gICAgXGV4ZGVudGFtb3VudCA9IFxsaXNwbmFycm93aW5nCi0gIFxlbHNlCi0gICAgXGxldFxub25hcnJvd2luZyA9IFxyZWxheAogICBcZmkKICAgXHBhcnNlYXJnXHF1b3RhdGlvbmxhYmVsCiB9CkBAIC02NTU1LDYgKzY1ODgsMzIgQEAKICAgXGZpCiB9CiAKKyUgQGluZGVudGVkYmxvY2sgaXMgbGlrZSBAcXVvdGF0aW9uLCBidXQgaW5kZW50cyBvbmx5IG9uIHRoZSBsZWZ0IGFuZAorJSBoYXMgbm8gb3B0aW9uYWwgYXJndW1lbnQuCislIAorXG1ha2VkaXNwZW52ZGVme2luZGVudGVkYmxvY2t9e1xpbmRlbnRlZGJsb2Nrc3RhcnR9CislCitcZGVmXGluZGVudGVkYmxvY2tzdGFydHslCisgIHtccGFyc2tpcD0wcHQgXGFib3ZlZW52YnJlYWt9JSBiZWNhdXNlIFxhYm92ZWVudmJyZWFrIGluc2VydHMgXHBhcnNraXAKKyAgXHBhcmluZGVudD0wcHQKKyAgJQorICAlIEBjYXJ0b3VjaGUgZGVmaW5lcyBcbm9uYXJyb3dpbmcgdG8gaW5oaWJpdCBuYXJyb3dpbmcgYXQgbmV4dCBsZXZlbCBkb3duLgorICBcaWZ4XG5vbmFycm93aW5nXHJlbGF4CisgICAgXGFkdmFuY2VcbGVmdHNraXAgYnkgXGxpc3BuYXJyb3dpbmcKKyAgICBcZXhkZW50YW1vdW50ID0gXGxpc3BuYXJyb3dpbmcKKyAgXGVsc2UKKyAgICBcbGV0XG5vbmFycm93aW5nID0gXHJlbGF4CisgIFxmaQorfQorCislIEtlZXAgYSBub256ZXJvIHBhcnNraXAgZm9yIHRoZSBlbnZpcm9ubWVudCwgc2luY2Ugd2UncmUgZG9pbmcgbm9ybWFsIGZpbGxpbmcuCislCitcZGVmXEVpbmRlbnRlZGJsb2NreyUKKyAgXHBhcgorICB7XHBhcnNraXA9MHB0IFxhZnRlcmVudmJyZWFrfSUKK30KK1xkZWZcRXNtYWxsaW5kZW50ZWRibG9ja3tcRWluZGVudGVkYmxvY2t9CisKIAogJSBMYVRlWC1saWtlIEB2ZXJiYXRpbS4uLkBlbmQgdmVyYmF0aW0gYW5kIEB2ZXJiezxjaGFyPi4uLjxjaGFyPn0KICUgSWYgd2Ugd2FudCB0byBhbGxvdyBhbnkgPGNoYXI+IGFzIGRlbGltaXRlciwKQEAgLTcwMzMsNyArNzA5MiwxMCBAQAogICBcZGYgXHNsIFxoeXBoZW5jaGFyXGZvbnQ9MAogICAlCiAgICUgT24gdGhlIG90aGVyIGhhbmQsIGlmIGFuIGFyZ3VtZW50IGhhcyB0d28gZGFzaGVzIChmb3IgaW5zdGFuY2UpLCB3ZQotICAlIHdhbnQgYSB3YXkgdG8gZ2V0IHR0c2wuICBMZXQncyB0cnkgQHZhciBmb3IgdGhhdC4KKyAgJSB3YW50IGEgd2F5IHRvIGdldCB0dHNsLiAgV2UgdXNlZCB0byByZWNvbW1lbmQgQHZhciBmb3IgdGhhdCwgc28KKyAgJSBsZWF2ZSB0aGUgY29kZSBpbiwgYnV0IGl0J3Mgc3RyYW5nZSBmb3IgQHZhciB0byBsZWFkIHRvIHR5cGV3cml0ZXIuCisgICUgTm93YWRheXMgd2UgcmVjb21tZW5kIEBjb2RlLCBzaW5jZSB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGEgdHRzbCBoeXBoZW4KKyAgJSBhbmQgYSB0dCBoeXBoZW4gaXMgcHJldHR5IHRpbnkuICBAY29kZSBhbHNvIGRpc2FibGVzID9gICFgLgogICBcZGVmXHZhciMjMXt7XHNldHVwbWFya3Vwc3R5bGV7dmFyfVx0dHNsYW50ZWR7IyMxfX19JQogICAjMSUKICAgXHNsXGh5cGhlbmNoYXJcZm9udD00NQpAQCAtOTkzMSwyMiArOTk5MywyNiBAQAogQGdkZWZAb3RoZXJiYWNrc2xhc2h7QGxldFw9QHJlYWxiYWNrc2xhc2h9CiAKICUgU2FtZSBhcyBAdHVybm9mZmFjdGl2ZSBleGNlcHQgb3V0cHV0cyBcIGFzIHtcdHRcY2hhcmBcXH0gaW5zdGVhZCBvZgotJSB0aGUgbGl0ZXJhbCBjaGFyYWN0ZXIgYFwnLgorJSB0aGUgbGl0ZXJhbCBjaGFyYWN0ZXIgYFwnLiAgQWxzbyByZXZlcnQgLSB0byBpdHMgbm9ybWFsIGNoYXJhY3RlciwgaW4KKyUgY2FzZSB0aGUgYWN0aXZlIC0gZnJvbSBjb2RlIGhhcyBzbGlwcGVkIGluLgogJQotQGRlZkBub3JtYWx0dXJub2ZmYWN0aXZleyUKLSAgQGxldCI9QG5vcm1hbGRvdWJsZXF1b3RlCi0gIEBsZXQkPUBub3JtYWxkb2xsYXIgJSQgZm9udC1sb2NrIGZpeAotICBAbGV0Kz1Abm9ybWFscGx1cwotICBAbGV0PD1Abm9ybWFsbGVzcwotICBAbGV0Pj1Abm9ybWFsZ3JlYXRlcgotICBAbGV0XD1Abm9ybWFsYmFja3NsYXNoCi0gIEBsZXRePUBub3JtYWxjYXJldAotICBAbGV0Xz1Abm9ybWFsdW5kZXJzY29yZQotICBAbGV0fD1Abm9ybWFsdmVydGljYWxiYXIKLSAgQGxldH49QG5vcm1hbHRpbGRlCi0gIEBtYXJrdXBzZXR1cGxxZGVmYXVsdAotICBAbWFya3Vwc2V0dXBycWRlZmF1bHQKLSAgQHVuc2Vwc3BhY2VzCit7QGNhdGNvZGVgLSA9IEBhY3RpdmUKKyBAZ2RlZkBub3JtYWx0dXJub2ZmYWN0aXZleyUKKyAgIEBsZXQtPUBub3JtYWxkYXNoCisgICBAbGV0Ij1Abm9ybWFsZG91YmxlcXVvdGUKKyAgIEBsZXQkPUBub3JtYWxkb2xsYXIgJSQgZm9udC1sb2NrIGZpeAorICAgQGxldCs9QG5vcm1hbHBsdXMKKyAgIEBsZXQ8PUBub3JtYWxsZXNzCisgICBAbGV0Pj1Abm9ybWFsZ3JlYXRlcgorICAgQGxldFw9QG5vcm1hbGJhY2tzbGFzaAorICAgQGxldF49QG5vcm1hbGNhcmV0CisgICBAbGV0Xz1Abm9ybWFsdW5kZXJzY29yZQorICAgQGxldHw9QG5vcm1hbHZlcnRpY2FsYmFyCisgICBAbGV0fj1Abm9ybWFsdGlsZGUKKyAgIEBtYXJrdXBzZXR1cGxxZGVmYXVsdAorICAgQG1hcmt1cHNldHVwcnFkZWZhdWx0CisgICBAdW5zZXBzcGFjZXMKKyB9CiB9CiAKICUgTWFrZSBfIGFuZCArIFxvdGhlciBjaGFyYWN0ZXJzLCB0ZW1wb3JhcmlseS4KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmlfbXN2Yy9mZmkuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmlfbXN2Yy9mZmkuYwppbmRleCA2ZTU5NWU5Li43NmNiMDNlIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpX21zdmMvZmZpLmMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaV9tc3ZjL2ZmaS5jCkBAIC0xMDIsNiArMTAyLDE1IEBACiAJICAgICAgRkZJX0FTU0VSVCgwKTsKIAkgICAgfQogCX0KKyNpZmRlZiBfV0lONjQKKyAgICAgIGVsc2UgaWYgKHogPiA4KQorICAgICAgICB7CisgICAgICAgICAgLyogT24gV2luNjQsIGlmIGEgc2luZ2xlIGFyZ3VtZW50IHRha2VzIG1vcmUgdGhhbiA4IGJ5dGVzLAorICAgICAgICAgICAgIHRoZW4gaXQgaXMgYWx3YXlzIHBhc3NlZCBieSByZWZlcmVuY2UuICovCisgICAgICAgICAgKih2b2lkICoqKWFyZ3AgPSAqcF9hcmd2OworICAgICAgICAgIHogPSA4OworICAgICAgICB9CisjZW5kaWYKICAgICAgIGVsc2UKIAl7CiAJICBtZW1jcHkoYXJncCwgKnBfYXJndiwgeik7CkBAIC0xMjQsNyArMTMzLDYgQEAKICAgc3dpdGNoIChjaWYtPnJ0eXBlLT50eXBlKQogICAgIHsKICAgICBjYXNlIEZGSV9UWVBFX1ZPSUQ6Ci0gICAgY2FzZSBGRklfVFlQRV9TVFJVQ1Q6CiAgICAgY2FzZSBGRklfVFlQRV9TSU5UNjQ6CiAgICAgY2FzZSBGRklfVFlQRV9GTE9BVDoKICAgICBjYXNlIEZGSV9UWVBFX0RPVUJMRToKQEAgLTEzMiw2ICsxNDAsMTggQEAKICAgICAgIGNpZi0+ZmxhZ3MgPSAodW5zaWduZWQpIGNpZi0+cnR5cGUtPnR5cGU7CiAgICAgICBicmVhazsKIAorICAgIGNhc2UgRkZJX1RZUEVfU1RSVUNUOgorICAgICAgLyogTVNWQyByZXR1cm5zIHNtYWxsIHN0cnVjdHVyZXMgaW4gcmVnaXN0ZXJzLiAgUHV0IGluIGNpZi0+ZmxhZ3MKKyAgICAgICAgIHRoZSB2YWx1ZSBGRklfVFlQRV9TVFJVQ1Qgb25seSBpZiB0aGUgc3RydWN0dXJlIGlzIGJpZyBlbm91Z2g7CisgICAgICAgICBvdGhlcndpc2UsIHB1dCB0aGUgNC0gb3IgOC1ieXRlcyBpbnRlZ2VyIHR5cGUuICovCisgICAgICBpZiAoY2lmLT5ydHlwZS0+c2l6ZSA8PSA0KQorICAgICAgICBjaWYtPmZsYWdzID0gRkZJX1RZUEVfSU5UOworICAgICAgZWxzZSBpZiAoY2lmLT5ydHlwZS0+c2l6ZSA8PSA4KQorICAgICAgICBjaWYtPmZsYWdzID0gRkZJX1RZUEVfU0lOVDY0OworICAgICAgZWxzZQorICAgICAgICBjaWYtPmZsYWdzID0gRkZJX1RZUEVfU1RSVUNUOworICAgICAgYnJlYWs7CisKICAgICBjYXNlIEZGSV9UWVBFX1VJTlQ2NDoKICNpZmRlZiBfV0lONjQKICAgICBjYXNlIEZGSV9UWVBFX1BPSU5URVI6CkBAIC0yMDEsOCArMjIxLDcgQEAKICNlbHNlCiAgICAgY2FzZSBGRklfU1lTVjoKICAgICAgIC8qQC11c2VkZWZAKi8KLSAgICAgIC8qIEZ1bmN0aW9uIGNhbGwgbmVlZHMgYXQgbGVhc3QgNDAgYnl0ZXMgc3RhY2sgc2l6ZSwgb24gd2luNjQgQU1ENjQgKi8KLSAgICAgIHJldHVybiBmZmlfY2FsbF9BTUQ2NChmZmlfcHJlcF9hcmdzLCAmZWNpZiwgY2lmLT5ieXRlcyA/IGNpZi0+Ynl0ZXMgOiA0MCwKKyAgICAgIHJldHVybiBmZmlfY2FsbF9BTUQ2NChmZmlfcHJlcF9hcmdzLCAmZWNpZiwgY2lmLT5ieXRlcywKIAkJCSAgIGNpZi0+ZmxhZ3MsIGVjaWYucnZhbHVlLCBmbik7CiAgICAgICAvKkA9dXNlZGVmQCovCiAgICAgICBicmVhazsKQEAgLTIyNyw3ICsyNDYsNyBAQAogI2Vsc2UKIHN0YXRpYyB2b2lkIF9fZmFzdGNhbGwKICNlbmRpZgotZmZpX2Nsb3N1cmVfU1lTViAoZmZpX2Nsb3N1cmUgKmNsb3N1cmUsIGludCAqYXJncCkKK2ZmaV9jbG9zdXJlX1NZU1YgKGZmaV9jbG9zdXJlICpjbG9zdXJlLCBjaGFyICphcmdwKQogewogICAvLyB0aGlzIGlzIG91ciByZXR1cm4gdmFsdWUgc3RvcmFnZQogICBsb25nIGRvdWJsZSAgICByZXM7CkBAIC0yMzcsNyArMjU2LDcgQEAKICAgdm9pZCAgICAgICAgICoqYXJnX2FyZWE7CiAgIHVuc2lnbmVkIHNob3J0IHJ0eXBlOwogICB2b2lkICAgICAgICAgICpyZXNwID0gKHZvaWQqKSZyZXM7Ci0gIHZvaWQgKmFyZ3MgPSAmYXJncFsxXTsKKyAgdm9pZCAqYXJncyA9IGFyZ3AgKyBzaXplb2Yodm9pZCopOwogCiAgIGNpZiAgICAgICAgID0gY2xvc3VyZS0+Y2lmOwogICBhcmdfYXJlYSAgICA9ICh2b2lkKiopIGFsbG9jYSAoY2lmLT5uYXJncyAqIHNpemVvZiAodm9pZCopKTsgIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaV9tc3ZjL3ByZXBfY2lmLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpX21zdmMvcHJlcF9jaWYuYwppbmRleCAyNjUwZmEwLi5iMDdhMmU2IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpX21zdmMvcHJlcF9jaWYuYworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpX21zdmMvcHJlcF9jaWYuYwpAQCAtMTE2LDkgKzExNiw5IEBACiAjaWYgIWRlZmluZWQgTTY4SyAmJiAhZGVmaW5lZCBfX3g4Nl82NF9fICYmICFkZWZpbmVkIFMzOTAKICAgLyogTWFrZSBzcGFjZSBmb3IgdGhlIHJldHVybiBzdHJ1Y3R1cmUgcG9pbnRlciAqLwogICBpZiAoY2lmLT5ydHlwZS0+dHlwZSA9PSBGRklfVFlQRV9TVFJVQ1QKLSAgICAgIC8qIE1TVkMgcmV0dXJucyBzbWFsbCBzdHJ1Y3R1cmVzIGluIHJlZ2lzdGVycy4gIEJ1dCB3ZSBoYXZlIGEgZGlmZmVyZW50Ci0gICAgICB3b3JrYXJvdW5kOiBwcmV0ZW5kIGludDMyIG9yIGludDY0IHJldHVybiB0eXBlLCBhbmQgY29udmVydGluZyB0bwotICAgICAgc3RydWN0dXJlIGFmdGVyd2FyZHMuICovCisjaWZkZWYgX1dJTjMyCisgICAgICAmJiAoY2lmLT5ydHlwZS0+c2l6ZSA+IDgpICAvKiBNU1ZDIHJldHVybnMgc21hbGwgc3RydWN0cyBpbiByZWdpc3RlcnMgKi8KKyNlbmRpZgogI2lmZGVmIFNQQVJDCiAgICAgICAmJiAoY2lmLT5hYmkgIT0gRkZJX1Y5IHx8IGNpZi0+cnR5cGUtPnNpemUgPiAzMikKICNlbmRpZgpAQCAtMTQ1LDYgKzE0NSwxMCBAQAogCSAgICAgICYmIGNpZi0+YWJpICE9IEZGSV9WOSkpCiAJYnl0ZXMgKz0gc2l6ZW9mKHZvaWQqKTsKICAgICAgIGVsc2UKKyNlbGlmIGRlZmluZWQgKF9XSU42NCkKKyAgICAgIGlmICgoKnB0ciktPnR5cGUgPT0gRkZJX1RZUEVfU1RSVUNUICYmICgoKnB0ciktPnNpemUgPiA4KSkKKwkgICAgYnl0ZXMgKz0gc2l6ZW9mKHZvaWQqKTsKKyAgICAgIGVsc2UKICNlbmRpZgogCXsKICNpZiAhZGVmaW5lZChfTVNDX1ZFUikgJiYgIWRlZmluZWQoX19NSU5HVzMyX18pCkBAIC0xNjgsNiArMTcyLDEyIEBACiAjZW5kaWYKICAgICB9CiAKKyNpZmRlZiBfV0lONjQKKyAgLyogRnVuY3Rpb24gY2FsbCBuZWVkcyBhdCBsZWFzdCA0MCBieXRlcyBzdGFjayBzaXplLCBvbiB3aW42NCBBTUQ2NCAqLworICBpZiAoYnl0ZXMgPCA0MCkKKyAgICAgIGJ5dGVzID0gNDA7CisjZW5kaWYKKwogICBjaWYtPmJ5dGVzID0gYnl0ZXM7CiAKICAgLyogUGVyZm9ybSBtYWNoaW5lIGRlcGVuZGVudCBjaWYgcHJvY2Vzc2luZyAqLwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaV9tc3ZjL3R5cGVzLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpX21zdmMvdHlwZXMuYwppbmRleCBkZjMyMTkwLi40NDMzYWMyIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpX21zdmMvdHlwZXMuYworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpX21zdmMvdHlwZXMuYwpAQCAtNDMsNyArNDMsNyBAQAogRkZJX0lOVEVHUkFMX1RZUEVERUYoZmxvYXQsIDQsIDQsIEZGSV9UWVBFX0ZMT0FUKTsKIAogI2lmIGRlZmluZWQgQUxQSEEgfHwgZGVmaW5lZCBTUEFSQzY0IHx8IGRlZmluZWQgWDg2XzY0IHx8IGRlZmluZWQgUzM5MFggXAotICAgIHx8IGRlZmluZWQgSUE2NAorICAgIHx8IGRlZmluZWQgSUE2NCB8fCBkZWZpbmVkIF9XSU42NAogCiBGRklfSU5URUdSQUxfVFlQRURFRihwb2ludGVyLCA4LCA4LCBGRklfVFlQRV9QT0lOVEVSKTsKIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaV9vc3gvZmZpLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpX29zeC9mZmkuYwppbmRleCBiZjQyMDkzLi45NjgyNmI1IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpX29zeC9mZmkuYworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpX29zeC9mZmkuYwpAQCAtMzgsMTIgKzM4LDEzIEBACiAvKkBvdXRAKi8JZmZpX3R5cGUqCWFyZykKIHsKIC8qQC11c2VkZWZAKi8KKwlmZmlfdHlwZSoqCXB0cjsKIAogCWlmIChhcmcgPT0gTlVMTCB8fCBhcmctPmVsZW1lbnRzID09IE5VTEwgfHwKIAkJYXJnLT5zaXplICE9IDAgfHwgYXJnLT5hbGlnbm1lbnQgIT0gMCkKIAkJcmV0dXJuIEZGSV9CQURfVFlQRURFRjsKIAotCWZmaV90eXBlKioJcHRyID0gJihhcmctPmVsZW1lbnRzWzBdKTsKKyAgICBwdHIgPSAmKGFyZy0+ZWxlbWVudHNbMF0pOwogCiAJd2hpbGUgKCgqcHRyKSAhPSBOVUxMKQogCXsKQEAgLTEzNSwxNiArMTM2LDE2IEBACiAvKkBkZXBlbmRlbnRAKi8gLypAb3V0QCovIC8qQHBhcnRpYWxAKi8gZmZpX3R5cGUqCXJ0eXBlLCAKIC8qQGRlcGVuZGVudEAqLwkJCWZmaV90eXBlKioJCWF0eXBlcykKIHsKKwl1bnNpZ25lZCBpbnQJYnl0ZXMJPSAwOworCXVuc2lnbmVkIGludAlpOworCWZmaV90eXBlKioJCXB0cjsKKwogCWlmIChjaWYgPT0gTlVMTCkKIAkJcmV0dXJuIEZGSV9CQURfVFlQRURFRjsKIAogCWlmIChhYmkgPD0gRkZJX0ZJUlNUX0FCSSB8fCBhYmkgPiBGRklfREVGQVVMVF9BQkkpCiAJCXJldHVybiBGRklfQkFEX0FCSTsKIAotCXVuc2lnbmVkIGludAlieXRlcwk9IDA7Ci0JdW5zaWduZWQgaW50CWk7Ci0JZmZpX3R5cGUqKgkJcHRyOwotCiAJY2lmLT5hYmkgPSBhYmk7CiAJY2lmLT5hcmdfdHlwZXMgPSBhdHlwZXM7CiAJY2lmLT5uYXJncyA9IG5hcmdzOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaV9vc3gveDg2L2RhcndpbjY0LlMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpX29zeC94ODYvZGFyd2luNjQuUwppbmRleCAxNjVkNDY5Li4xMjg2ZDMzIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpX29zeC94ODYvZGFyd2luNjQuUworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpX29zeC94ODYvZGFyd2luNjQuUwpAQCAtMzUxLDcgKzM1MSw3IEBACiAgLnNldCAgTCRzZXQkMyxMVVcxLUxVVzAKICAubG9uZyBMJHNldCQzCiAKLSAvKiBOZXcgc3RhY2sgZnJhbWUgYmFzZWQgb2ZmIHJicC4gIFRoaXMgaXMgYSBpdHR5IGJpdCBvZiB1bndpbmQKKyAvKiBOZXcgc3RhY2sgZnJhbWUgYmFzZWQgb2ZmIHJicC4gIFRoaXMgaXMgYW4gaXR0eSBiaXQgb2YgdW53aW5kCiAgICAgdHJpY2tlcnkgaW4gdGhhdCB0aGUgQ0ZBICpoYXMqIGNoYW5nZWQuICBUaGVyZSBpcyBubyBlYXN5IHdheQogICAgIHRvIGRlc2NyaWJlIGl0IGNvcnJlY3RseSBvbiBlbnRyeSB0byB0aGUgZnVuY3Rpb24uICBGb3J0dW5hdGVseSwKICAgICBpdCBkb2Vzbid0IG1hdHRlciB0b28gbXVjaCBzaW5jZSBhdCBhbGwgcG9pbnRzIHdlIGNhbiBjb3JyZWN0bHkKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmlfb3N4L3g4Ni94ODYtZmZpNjQuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmlfb3N4L3g4Ni94ODYtZmZpNjQuYwppbmRleCAyYWZmYjE0Li5mMjYxMGMxIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpX29zeC94ODYveDg2LWZmaTY0LmMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaV9vc3gveDg2L3g4Ni1mZmk2NC5jCkBAIC0yMjUsMTQgKzIyNSwxNiBAQAogCQkJLyogTWVyZ2UgdGhlIGZpZWxkcyBvZiBzdHJ1Y3R1cmUuICAqLwogCQkJZm9yIChwdHIgPSB0eXBlLT5lbGVtZW50czsgKnB0ciAhPSBOVUxMOyBwdHIrKykKIAkJCXsKKwkJCQlpbnQgbnVtLCBwb3M7CisKIAkJCQlieXRlX29mZnNldCA9IEFMSUdOKGJ5dGVfb2Zmc2V0LCAoKnB0ciktPmFsaWdubWVudCk7CiAKLQkJCQlpbnQJbnVtID0gY2xhc3NpZnlfYXJndW1lbnQoKnB0ciwgc3ViY2xhc3NlcywgYnl0ZV9vZmZzZXQgJSA4KTsKKwkJCQludW0gPSBjbGFzc2lmeV9hcmd1bWVudCgqcHRyLCBzdWJjbGFzc2VzLCBieXRlX29mZnNldCAlIDgpOwogCiAJCQkJaWYgKG51bSA9PSAwKQogCQkJCQlyZXR1cm4gMDsKIAotCQkJCWludCBwb3MgPSBieXRlX29mZnNldCAvIDg7CisJCQkJcG9zID0gYnl0ZV9vZmZzZXQgLyA4OwogCiAJCQkJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKQogCQkJCXsKQEAgLTU4OSwxMSArNTkxLDEyIEBACiAJdm9pZAkJCSgqZnVuKShmZmlfY2lmKiwgdm9pZCosIHZvaWQqKiwgdm9pZCopLAogCXZvaWQqCQkJdXNlcl9kYXRhKQogeworCQl2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCoJdHJhbXA7CisKIAlpZiAoY2lmLT5hYmkgIT0gRkZJX1VOSVg2NCkKIAkJcmV0dXJuIEZGSV9CQURfQUJJOwogCi0Jdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQqCXRyYW1wID0KLQkJKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0KikmY2xvc3VyZS0+dHJhbXBbMF07CisJdHJhbXAgPSAodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQqKSZjbG9zdXJlLT50cmFtcFswXTsKIAogCXRyYW1wWzBdID0gMHhiYjQ5OwkJLyogbW92IDxjb2RlPiwgJXIxMQkqLwogCSoodm9pZCogdm9sYXRpbGUqKSZ0cmFtcFsxXSA9IGZmaV9jbG9zdXJlX3VuaXg2NDsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9zdGdkaWN0LmMgYi9Nb2R1bGVzL19jdHlwZXMvc3RnZGljdC5jCmluZGV4IDI1ZDk5OTYuLjg3OWFmYjggMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9zdGdkaWN0LmMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL3N0Z2RpY3QuYwpAQCAtNzYsMTQgKzc2LDE4IEBACiAKICAgICBpZiAoc3JjLT5mb3JtYXQpIHsKICAgICAgICAgZHN0LT5mb3JtYXQgPSBQeU1lbV9NYWxsb2Moc3RybGVuKHNyYy0+Zm9ybWF0KSArIDEpOwotICAgICAgICBpZiAoZHN0LT5mb3JtYXQgPT0gTlVMTCkKKyAgICAgICAgaWYgKGRzdC0+Zm9ybWF0ID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KICAgICAgICAgc3RyY3B5KGRzdC0+Zm9ybWF0LCBzcmMtPmZvcm1hdCk7CiAgICAgfQogICAgIGlmIChzcmMtPnNoYXBlKSB7CiAgICAgICAgIGRzdC0+c2hhcGUgPSBQeU1lbV9NYWxsb2Moc2l6ZW9mKFB5X3NzaXplX3QpICogc3JjLT5uZGltKTsKLSAgICAgICAgaWYgKGRzdC0+c2hhcGUgPT0gTlVMTCkKKyAgICAgICAgaWYgKGRzdC0+c2hhcGUgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQogICAgICAgICBtZW1jcHkoZHN0LT5zaGFwZSwgc3JjLT5zaGFwZSwKICAgICAgICAgICAgICAgIHNpemVvZihQeV9zc2l6ZV90KSAqIHNyYy0+bmRpbSk7CiAgICAgfQpAQCAtMzgwLDcgKzM4NCw3IEBACiAgICAgICAgIHVuaW9uX3NpemUgPSAwOwogICAgICAgICB0b3RhbF9hbGlnbiA9IGFsaWduID8gYWxpZ24gOiAxOwogICAgICAgICBzdGdkaWN0LT5mZmlfdHlwZV9wb2ludGVyLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7Ci0gICAgICAgIHN0Z2RpY3QtPmZmaV90eXBlX3BvaW50ZXIuZWxlbWVudHMgPSBQeU1lbV9NYWxsb2Moc2l6ZW9mKGZmaV90eXBlICopICogKGJhc2VkaWN0LT5sZW5ndGggKyBsZW4gKyAxKSk7CisgICAgICAgIHN0Z2RpY3QtPmZmaV90eXBlX3BvaW50ZXIuZWxlbWVudHMgPSBQeU1lbV9OZXcoZmZpX3R5cGUgKiwgYmFzZWRpY3QtPmxlbmd0aCArIGxlbiArIDEpOwogICAgICAgICBpZiAoc3RnZGljdC0+ZmZpX3R5cGVfcG9pbnRlci5lbGVtZW50cyA9PSBOVUxMKSB7CiAgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICAgICAgcmV0dXJuIC0xOwpAQCAtMzk4LDcgKzQwMiw3IEBACiAgICAgICAgIHVuaW9uX3NpemUgPSAwOwogICAgICAgICB0b3RhbF9hbGlnbiA9IDE7CiAgICAgICAgIHN0Z2RpY3QtPmZmaV90eXBlX3BvaW50ZXIudHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKLSAgICAgICAgc3RnZGljdC0+ZmZpX3R5cGVfcG9pbnRlci5lbGVtZW50cyA9IFB5TWVtX01hbGxvYyhzaXplb2YoZmZpX3R5cGUgKikgKiAobGVuICsgMSkpOworICAgICAgICBzdGdkaWN0LT5mZmlfdHlwZV9wb2ludGVyLmVsZW1lbnRzID0gUHlNZW1fTmV3KGZmaV90eXBlICosIGxlbiArIDEpOwogICAgICAgICBpZiAoc3RnZGljdC0+ZmZpX3R5cGVfcG9pbnRlci5lbGVtZW50cyA9PSBOVUxMKSB7CiAgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICAgICAgcmV0dXJuIC0xOwpAQCAtNDE3LDYgKzQyMSw4IEBACiAgICAgICAgICAgIHRoYXQpLiBVc2UgJ0InIGZvciBieXRlcy4gKi8KICAgICAgICAgc3RnZGljdC0+Zm9ybWF0ID0gX2N0eXBlc19hbGxvY19mb3JtYXRfc3RyaW5nKE5VTEwsICJCIik7CiAgICAgfQorICAgIGlmIChzdGdkaWN0LT5mb3JtYXQgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOwogCiAjZGVmaW5lIHJlYWxkaWN0ICgoUHlPYmplY3QgKikmc3RnZGljdC0+ZGljdCkKICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKQEAgLTQ4Myw3ICs0ODksNyBAQAogICAgICAgICAgICAgY2hhciAqZmllbGRmbXQgPSBkaWN0LT5mb3JtYXQgPyBkaWN0LT5mb3JtYXQgOiAiQiI7CiAgICAgICAgICAgICBjaGFyICpmaWVsZG5hbWUgPSBfUHlVbmljb2RlX0FzU3RyaW5nKG5hbWUpOwogICAgICAgICAgICAgY2hhciAqcHRyOwotICAgICAgICAgICAgUHlfc3NpemVfdCBsZW47IAorICAgICAgICAgICAgUHlfc3NpemVfdCBsZW47CiAgICAgICAgICAgICBjaGFyICpidWY7CiAKICAgICAgICAgICAgIGlmIChmaWVsZG5hbWUgPT0gTlVMTCkKQEAgLTUwMyw3ICs1MDksMTIgQEAKICAgICAgICAgICAgIHNwcmludGYoYnVmLCAiJXM6JXM6IiwgZmllbGRmbXQsIGZpZWxkbmFtZSk7CiAKICAgICAgICAgICAgIHB0ciA9IHN0Z2RpY3QtPmZvcm1hdDsKLSAgICAgICAgICAgIHN0Z2RpY3QtPmZvcm1hdCA9IF9jdHlwZXNfYWxsb2NfZm9ybWF0X3N0cmluZyhzdGdkaWN0LT5mb3JtYXQsIGJ1Zik7CisgICAgICAgICAgICBpZiAoZGljdC0+c2hhcGUgIT0gTlVMTCkgeworICAgICAgICAgICAgICAgIHN0Z2RpY3QtPmZvcm1hdCA9IF9jdHlwZXNfYWxsb2NfZm9ybWF0X3N0cmluZ193aXRoX3NoYXBlKAorICAgICAgICAgICAgICAgICAgICBkaWN0LT5uZGltLCBkaWN0LT5zaGFwZSwgc3RnZGljdC0+Zm9ybWF0LCBidWYpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzdGdkaWN0LT5mb3JtYXQgPSBfY3R5cGVzX2FsbG9jX2Zvcm1hdF9zdHJpbmcoc3RnZGljdC0+Zm9ybWF0LCBidWYpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgUHlNZW1fRnJlZShwdHIpOwogICAgICAgICAgICAgUHlNZW1fRnJlZShidWYpOwogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdXJzZXNfcGFuZWwuYyBiL01vZHVsZXMvX2N1cnNlc19wYW5lbC5jCmluZGV4IGY1NjA3MDIuLjg3YjljMDUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N1cnNlc19wYW5lbC5jCisrKyBiL01vZHVsZXMvX2N1cnNlc19wYW5lbC5jCkBAIC0xMTcsNyArMTE3LDcgQEAKIHsKICAgICBsaXN0X29mX3BhbmVscyAqbmV3OwogCi0gICAgaWYgKChuZXcgPSAobGlzdF9vZl9wYW5lbHMgKiltYWxsb2Moc2l6ZW9mKGxpc3Rfb2ZfcGFuZWxzKSkpID09IE5VTEwpIHsKKyAgICBpZiAoKG5ldyA9IChsaXN0X29mX3BhbmVscyAqKVB5TWVtX01hbGxvYyhzaXplb2YobGlzdF9vZl9wYW5lbHMpKSkgPT0gTlVMTCkgewogICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQpAQCAtMTM2LDcgKzEzNiw3IEBACiAgICAgdGVtcCA9IGxvcDsKICAgICBpZiAodGVtcC0+cG8gPT0gcG8pIHsKICAgICAgICAgbG9wID0gdGVtcC0+bmV4dDsKLSAgICAgICAgZnJlZSh0ZW1wKTsKKyAgICAgICAgUHlNZW1fRnJlZSh0ZW1wKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICB3aGlsZSAodGVtcC0+bmV4dCA9PSBOVUxMIHx8IHRlbXAtPm5leHQtPnBvICE9IHBvKSB7CkBAIC0xNDgsNyArMTQ4LDcgQEAKICAgICAgICAgdGVtcCA9IHRlbXAtPm5leHQ7CiAgICAgfQogICAgIG4gPSB0ZW1wLT5uZXh0LT5uZXh0OwotICAgIGZyZWUodGVtcC0+bmV4dCk7CisgICAgUHlNZW1fRnJlZSh0ZW1wLT5uZXh0KTsKICAgICB0ZW1wLT5uZXh0ID0gbjsKICAgICByZXR1cm47CiB9CkBAIC01MTMsNiArNTEzLDggQEAKICAgICAgICAgZ290byBmYWlsOwogCiAgICAgaW1wb3J0X2N1cnNlcygpOworICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICBnb3RvIGZhaWw7CiAKICAgICAvKiBGb3IgZXhjZXB0aW9uIF9jdXJzZXNfcGFuZWwuZXJyb3IgKi8KICAgICBfY3Vyc2VzX3BhbmVsc3RhdGUobSktPlB5Q3Vyc2VzRXJyb3IgPSBQeUVycl9OZXdFeGNlcHRpb24oIl9jdXJzZXNfcGFuZWwuZXJyb3IiLCBOVUxMLCBOVUxMKTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N1cnNlc21vZHVsZS5jIGIvTW9kdWxlcy9fY3Vyc2VzbW9kdWxlLmMKaW5kZXggMTNjZmNmNS4uNWZmY2UyZiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3Vyc2VzbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9fY3Vyc2VzbW9kdWxlLmMKQEAgLTEzNCw2ICsxMzQsMTIgQEAKICNkZWZpbmUgU1RSSUNUX1NZU1ZfQ1VSU0VTCiAjZW5kaWYKIAorLypbY2xpbmljIGlucHV0XQorbW9kdWxlIGN1cnNlcworY2xhc3MgY3Vyc2VzLndpbmRvdyAiUHlDdXJzZXNXaW5kb3dPYmplY3QgKiIgIiZQeUN1cnNlc1dpbmRvd19UeXBlIgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWRhMzlhM2VlNWU2YjRiMGQgaW5wdXQ9ODhjODYwYWJkYmI1MGUwY10qLworCiAvKiBEZWZpbml0aW9uIG9mIGV4Y2VwdGlvbiBjdXJzZXMuZXJyb3IgKi8KIAogc3RhdGljIFB5T2JqZWN0ICpQeUN1cnNlc0Vycm9yOwpAQCAtMTY4LDEwICsxNzQsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIm11c3QgY2FsbCBzdGFydF9jb2xvcigpIGZpcnN0Iik7ICAgICAgIFwKICAgICAgICAgcmV0dXJuIDA7IH0KIAotI2lmbmRlZiBNSU4KLSNkZWZpbmUgTUlOKHgseSkgKCh4KSA8ICh5KSA/ICh4KSA6ICh5KSkKLSNlbmRpZgotCiAvKiBVdGlsaXR5IEZ1bmN0aW9ucyAqLwogCiAvKgpAQCAtNTMzLDcgKzUzNSw3IEBACiAgICAgd28gPSBQeU9iamVjdF9ORVcoUHlDdXJzZXNXaW5kb3dPYmplY3QsICZQeUN1cnNlc1dpbmRvd19UeXBlKTsKICAgICBpZiAod28gPT0gTlVMTCkgcmV0dXJuIE5VTEw7CiAgICAgd28tPndpbiA9IHdpbjsKLSAgICB3by0+ZW5jb2RpbmcgPSBzdHJkdXAoZW5jb2RpbmcpOworICAgIHdvLT5lbmNvZGluZyA9IF9QeU1lbV9TdHJkdXAoZW5jb2RpbmcpOwogICAgIGlmICh3by0+ZW5jb2RpbmcgPT0gTlVMTCkgewogICAgICAgICBQeV9ERUNSRUYod28pOwogICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwpAQCAtNTQ3LDc0ICs1NDksMTQ1IEBACiB7CiAgICAgaWYgKHdvLT53aW4gIT0gc3Rkc2NyKSBkZWx3aW4od28tPndpbik7CiAgICAgaWYgKHdvLT5lbmNvZGluZyAhPSBOVUxMKQotICAgICAgICBmcmVlKHdvLT5lbmNvZGluZyk7CisgICAgICAgIFB5TWVtX0ZyZWUod28tPmVuY29kaW5nKTsKICAgICBQeU9iamVjdF9ERUwod28pOwogfQogCiAvKiBBZGRjaCwgQWRkc3RyLCBBZGRuc3RyICovCiAKKy8qW2NsaW5pYyBpbnB1dF0KKworY3Vyc2VzLndpbmRvdy5hZGRjaAorCisgICAgWworICAgIHk6IGludAorICAgICAgWS1jb29yZGluYXRlLgorICAgIHg6IGludAorICAgICAgWC1jb29yZGluYXRlLgorICAgIF0KKworICAgIGNoOiBvYmplY3QKKyAgICAgIENoYXJhY3RlciB0byBhZGQuCisKKyAgICBbCisgICAgYXR0cjogbG9uZworICAgICAgQXR0cmlidXRlcyBmb3IgdGhlIGNoYXJhY3Rlci4KKyAgICBdCisgICAgLworCitQYWludCBjaGFyYWN0ZXIgY2ggYXQgKHksIHgpIHdpdGggYXR0cmlidXRlcyBhdHRyLgorCitQYWludCBjaGFyYWN0ZXIgY2ggYXQgKHksIHgpIHdpdGggYXR0cmlidXRlcyBhdHRyLAorb3ZlcndyaXRpbmcgYW55IGNoYXJhY3RlciBwcmV2aW91c2x5IHBhaW50ZWQgYXQgdGhhdCBsb2NhdGlvbi4KK0J5IGRlZmF1bHQsIHRoZSBjaGFyYWN0ZXIgcG9zaXRpb24gYW5kIGF0dHJpYnV0ZXMgYXJlIHRoZQorY3VycmVudCBzZXR0aW5ncyBmb3IgdGhlIHdpbmRvdyBvYmplY3QuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK1B5RG9jX1NUUlZBUihjdXJzZXNfd2luZG93X2FkZGNoX19kb2NfXywKKyJhZGRjaChbeSwgeCxdIGNoLCBbYXR0cl0pXG4iCisiUGFpbnQgY2hhcmFjdGVyIGNoIGF0ICh5LCB4KSB3aXRoIGF0dHJpYnV0ZXMgYXR0ci5cbiIKKyJcbiIKKyIgIHlcbiIKKyIgICAgWS1jb29yZGluYXRlLlxuIgorIiAgeFxuIgorIiAgICBYLWNvb3JkaW5hdGUuXG4iCisiICBjaFxuIgorIiAgICBDaGFyYWN0ZXIgdG8gYWRkLlxuIgorIiAgYXR0clxuIgorIiAgICBBdHRyaWJ1dGVzIGZvciB0aGUgY2hhcmFjdGVyLlxuIgorIlxuIgorIlBhaW50IGNoYXJhY3RlciBjaCBhdCAoeSwgeCkgd2l0aCBhdHRyaWJ1dGVzIGF0dHIsXG4iCisib3ZlcndyaXRpbmcgYW55IGNoYXJhY3RlciBwcmV2aW91c2x5IHBhaW50ZWQgYXQgdGhhdCBsb2NhdGlvbi5cbiIKKyJCeSBkZWZhdWx0LCB0aGUgY2hhcmFjdGVyIHBvc2l0aW9uIGFuZCBhdHRyaWJ1dGVzIGFyZSB0aGVcbiIKKyJjdXJyZW50IHNldHRpbmdzIGZvciB0aGUgd2luZG93IG9iamVjdC4iKTsKKworI2RlZmluZSBDVVJTRVNfV0lORE9XX0FERENIX01FVEhPRERFRiAgICBcCisgICAgeyJhZGRjaCIsIChQeUNGdW5jdGlvbiljdXJzZXNfd2luZG93X2FkZGNoLCBNRVRIX1ZBUkFSR1MsIGN1cnNlc193aW5kb3dfYWRkY2hfX2RvY19ffSwKKwogc3RhdGljIFB5T2JqZWN0ICoKLVB5Q3Vyc2VzV2luZG93X0FkZENoKFB5Q3Vyc2VzV2luZG93T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK2N1cnNlc193aW5kb3dfYWRkY2hfaW1wbChQeUN1cnNlc1dpbmRvd09iamVjdCAqc2VsZiwgaW50IGdyb3VwX2xlZnRfMSwgaW50IHksIGludCB4LCBQeU9iamVjdCAqY2gsIGludCBncm91cF9yaWdodF8xLCBsb25nIGF0dHIpOworCitzdGF0aWMgUHlPYmplY3QgKgorY3Vyc2VzX3dpbmRvd19hZGRjaChQeUN1cnNlc1dpbmRvd09iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgaW50IHJ0biwgeCwgeSwgdXNlX3h5ID0gRkFMU0U7Ci0gICAgUHlPYmplY3QgKmNob2JqOworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIGludCBncm91cF9sZWZ0XzEgPSAwOworICAgIGludCB5ID0gMDsKKyAgICBpbnQgeCA9IDA7CisgICAgUHlPYmplY3QgKmNoOworICAgIGludCBncm91cF9yaWdodF8xID0gMDsKKyAgICBsb25nIGF0dHIgPSAwOworCisgICAgc3dpdGNoIChQeVR1cGxlX0dFVF9TSVpFKGFyZ3MpKSB7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTzphZGRjaCIsICZjaCkpCisgICAgICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiT2w6YWRkY2giLCAmY2gsICZhdHRyKSkKKyAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgICAgICBncm91cF9yaWdodF8xID0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImlpTzphZGRjaCIsICZ5LCAmeCwgJmNoKSkKKyAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgICAgICBncm91cF9sZWZ0XzEgPSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaWlPbDphZGRjaCIsICZ5LCAmeCwgJmNoLCAmYXR0cikpCisgICAgICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICAgICAgZ3JvdXBfcmlnaHRfMSA9IDE7CisgICAgICAgICAgICBncm91cF9sZWZ0XzEgPSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAiY3Vyc2VzLndpbmRvdy5hZGRjaCByZXF1aXJlcyAxIHRvIDQgYXJndW1lbnRzIik7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorICAgIHJldHVybl92YWx1ZSA9IGN1cnNlc193aW5kb3dfYWRkY2hfaW1wbChzZWxmLCBncm91cF9sZWZ0XzEsIHksIHgsIGNoLCBncm91cF9yaWdodF8xLCBhdHRyKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorY3Vyc2VzX3dpbmRvd19hZGRjaF9pbXBsKFB5Q3Vyc2VzV2luZG93T2JqZWN0ICpzZWxmLCBpbnQgZ3JvdXBfbGVmdF8xLCBpbnQgeSwgaW50IHgsIFB5T2JqZWN0ICpjaCwgaW50IGdyb3VwX3JpZ2h0XzEsIGxvbmcgYXR0cikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kNGI5N2NjMjg3MDEwYzU0IGlucHV0PTVhNDFlZmIzNGEyZGUzMzhdKi8KK3sKKyAgICBQeUN1cnNlc1dpbmRvd09iamVjdCAqY3dzZWxmID0gKFB5Q3Vyc2VzV2luZG93T2JqZWN0ICopc2VsZjsKKyAgICBpbnQgY29vcmRpbmF0ZXNfZ3JvdXAgPSBncm91cF9sZWZ0XzE7CisgICAgaW50IGF0dHJfZ3JvdXAgPSBncm91cF9yaWdodF8xOworICAgIGludCBydG47CiAgICAgaW50IHR5cGU7Ci0gICAgY2h0eXBlIGNoOworICAgIGNodHlwZSBjY2g7CiAjaWZkZWYgSEFWRV9OQ1VSU0VTVwogICAgIGNjaGFyX3Qgd2NoOwogI2VuZGlmCi0gICAgYXR0cl90IGF0dHIgPSBBX05PUk1BTDsKLSAgICBsb25nIGxhdHRyOwogICAgIGNvbnN0IGNoYXIgKmZ1bmNuYW1lOwogCi0gICAgc3dpdGNoIChQeVR1cGxlX1NpemUoYXJncykpIHsKLSAgICBjYXNlIDE6Ci0gICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTztjaCBvciBpbnQiLCAmY2hvYmopKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgMjoKLSAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPbDtjaCBvciBpbnQsYXR0ciIsICZjaG9iaiwgJmxhdHRyKSkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICBhdHRyID0gbGF0dHI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgMzoKLSAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsImlpTzt5LHgsY2ggb3IgaW50IiwgJnksICZ4LCAmY2hvYmopKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIHVzZV94eSA9IFRSVUU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgNDoKLSAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsImlpT2w7eSx4LGNoIG9yIGludCwgYXR0ciIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmeSwgJngsICZjaG9iaiwgJmxhdHRyKSkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICBhdHRyID0gbGF0dHI7Ci0gICAgICAgIHVzZV94eSA9IFRSVUU7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJhZGRjaCByZXF1aXJlcyAxIHRvIDQgYXJndW1lbnRzIik7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KKyAgICBpZiAoIWF0dHJfZ3JvdXApCisgICAgICBhdHRyID0gQV9OT1JNQUw7CiAKICNpZmRlZiBIQVZFX05DVVJTRVNXCi0gICAgdHlwZSA9IFB5Q3Vyc2VzX0NvbnZlcnRUb0NjaGFyX3Qoc2VsZiwgY2hvYmosICZjaCwgJndjaCk7CisgICAgdHlwZSA9IFB5Q3Vyc2VzX0NvbnZlcnRUb0NjaGFyX3QoY3dzZWxmLCBjaCwgJmNjaCwgJndjaCk7CiAgICAgaWYgKHR5cGUgPT0gMikgewogICAgICAgICBmdW5jbmFtZSA9ICJhZGRfd2NoIjsKICAgICAgICAgd2NoLmF0dHIgPSBhdHRyOwotICAgICAgICBpZiAodXNlX3h5ID09IFRSVUUpCi0gICAgICAgICAgICBydG4gPSBtdndhZGRfd2NoKHNlbGYtPndpbix5LHgsICZ3Y2gpOworICAgICAgICBpZiAoY29vcmRpbmF0ZXNfZ3JvdXApCisgICAgICAgICAgICBydG4gPSBtdndhZGRfd2NoKGN3c2VsZi0+d2luLHkseCwgJndjaCk7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgcnRuID0gd2FkZF93Y2goc2VsZi0+d2luLCAmd2NoKTsKKyAgICAgICAgICAgIHJ0biA9IHdhZGRfd2NoKGN3c2VsZi0+d2luLCAmd2NoKTsKICAgICAgICAgfQogICAgIH0KICAgICBlbHNlCiAjZWxzZQotICAgIHR5cGUgPSBQeUN1cnNlc19Db252ZXJ0VG9DY2hhcl90KHNlbGYsIGNob2JqLCAmY2gpOworICAgIHR5cGUgPSBQeUN1cnNlc19Db252ZXJ0VG9DY2hhcl90KGN3c2VsZiwgY2gsICZjY2gpOwogI2VuZGlmCiAgICAgaWYgKHR5cGUgPT0gMSkgewogICAgICAgICBmdW5jbmFtZSA9ICJhZGRjaCI7Ci0gICAgICAgIGlmICh1c2VfeHkgPT0gVFJVRSkKLSAgICAgICAgICAgIHJ0biA9IG12d2FkZGNoKHNlbGYtPndpbix5LHgsIGNoIHwgYXR0cik7CisgICAgICAgIGlmIChjb29yZGluYXRlc19ncm91cCkKKyAgICAgICAgICAgIHJ0biA9IG12d2FkZGNoKGN3c2VsZi0+d2luLHkseCwgY2NoIHwgYXR0cik7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgcnRuID0gd2FkZGNoKHNlbGYtPndpbiwgY2ggfCBhdHRyKTsKKyAgICAgICAgICAgIHJ0biA9IHdhZGRjaChjd3NlbGYtPndpbiwgY2NoIHwgYXR0cik7CiAgICAgICAgIH0KICAgICB9CiAgICAgZWxzZSB7CkBAIC0xMjEyLDcgKzEyODUsNyBAQAogICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywiaTtuIiwgJm4pKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICAgICAgcnRuMiA9IHdnZXRuc3RyKHNlbGYtPndpbixydG4sTUlOKG4sIDEwMjMpKTsKKyAgICAgICAgcnRuMiA9IHdnZXRuc3RyKHNlbGYtPndpbiwgcnRuLCBQeV9NSU4obiwgMTAyMykpOwogICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogICAgICAgICBicmVhazsKICAgICBjYXNlIDI6CkBAIC0xMjMyLDExICsxMzA1LDExIEBACiAjaWZkZWYgU1RSSUNUX1NZU1ZfQ1VSU0VTCiAgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICAgICAgcnRuMiA9IHdtb3ZlKHNlbGYtPndpbix5LHgpPT1FUlIgPyBFUlIgOgotICAgICAgICB3Z2V0bnN0cihzZWxmLT53aW4sIHJ0biwgTUlOKG4sIDEwMjMpKTsKKyAgICAgICAgd2dldG5zdHIoc2VsZi0+d2luLCBydG4sIFB5X01JTihuLCAxMDIzKSk7CiAgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCiAjZWxzZQogICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgICAgIHJ0bjIgPSBtdndnZXRuc3RyKHNlbGYtPndpbiwgeSwgeCwgcnRuLCBNSU4obiwgMTAyMykpOworICAgICAgICBydG4yID0gbXZ3Z2V0bnN0cihzZWxmLT53aW4sIHksIHgsIHJ0biwgUHlfTUlOKG4sIDEwMjMpKTsKICAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKICNlbmRpZgogICAgICAgICBicmVhazsKQEAgLTEzNzUsNyArMTQ0OCw3IEBACiAgICAgY2FzZSAxOgogICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywiaTtuIiwgJm4pKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIHJ0bjIgPSB3aW5uc3RyKHNlbGYtPndpbixydG4sTUlOKG4sMTAyMykpOworICAgICAgICBydG4yID0gd2lubnN0cihzZWxmLT53aW4sIHJ0biwgUHlfTUlOKG4sIDEwMjMpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSAyOgogICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywiaWk7eSx4IiwmeSwmeCkpCkBAIC0xMzg1LDcgKzE0NTgsNyBAQAogICAgIGNhc2UgMzoKICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpaWk7eSx4LG4iLCAmeSwgJngsICZuKSkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICBydG4yID0gbXZ3aW5uc3RyKHNlbGYtPndpbiwgeSwgeCwgcnRuLCBNSU4obiwxMDIzKSk7CisgICAgICAgIHJ0bjIgPSBtdndpbm5zdHIoc2VsZi0+d2luLCB5LCB4LCBydG4sIFB5X01JTihuLDEwMjMpKTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgImluc3RyIHJlcXVpcmVzIDAgb3IgMyBhcmd1bWVudHMiKTsKQEAgLTE2OTksMjYgKzE3NzIsMjQgQEAKICAgICAvKiBXZSBoYXZlIHRvIHNpbXVsYXRlIHRoaXMgYnkgd3JpdGluZyB0byBhIHRlbXBvcmFyeSBGSUxFKiwKICAgICAgICB0aGVuIHJlYWRpbmcgYmFjaywgdGhlbiB3cml0aW5nIHRvIHRoZSBhcmd1bWVudCBzdHJlYW0uICovCiAgICAgY2hhciBmblsxMDBdOwotICAgIGludCBmZDsKLSAgICBGSUxFICpmcDsKLSAgICBQeU9iamVjdCAqcmVzOworICAgIGludCBmZCA9IC0xOworICAgIEZJTEUgKmZwID0gTlVMTDsKKyAgICBQeU9iamVjdCAqcmVzID0gTlVMTDsKIAogICAgIHN0cmNweShmbiwgIi90bXAvcHkuY3Vyc2VzLnB1dHdpbi5YWFhYWFgiKTsKICAgICBmZCA9IG1rc3RlbXAoZm4pOwogICAgIGlmIChmZCA8IDApCiAgICAgICAgIHJldHVybiBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWUoUHlFeGNfSU9FcnJvciwgZm4pOworICAgIGlmIChfUHlfc2V0X2luaGVyaXRhYmxlKGZkLCAwLCBOVUxMKSA8IDApCisgICAgICAgIGdvdG8gZXhpdDsKICAgICBmcCA9IGZkb3BlbihmZCwgIndiKyIpOwogICAgIGlmIChmcCA9PSBOVUxMKSB7Ci0gICAgICAgIGNsb3NlKGZkKTsKLSAgICAgICAgcmVtb3ZlKGZuKTsKLSAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZShQeUV4Y19JT0Vycm9yLCBmbik7CisgICAgICAgIFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZShQeUV4Y19JT0Vycm9yLCBmbik7CisgICAgICAgIGdvdG8gZXhpdDsKICAgICB9CiAgICAgcmVzID0gUHlDdXJzZXNDaGVja0VSUihwdXR3aW4oc2VsZi0+d2luLCBmcCksICJwdXR3aW4iKTsKLSAgICBpZiAocmVzID09IE5VTEwpIHsKLSAgICAgICAgZmNsb3NlKGZwKTsKLSAgICAgICAgcmVtb3ZlKGZuKTsKLSAgICAgICAgcmV0dXJuIHJlczsKLSAgICB9CisgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICBnb3RvIGV4aXQ7CiAgICAgZnNlZWsoZnAsIDAsIDApOwogICAgIHdoaWxlICgxKSB7CiAgICAgICAgIGNoYXIgYnVmW0JVRlNJWl07CkBAIC0xNzMyLDcgKzE4MDMsMTIgQEAKICAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGZjbG9zZShmcCk7CisKK2V4aXQ6CisgICAgaWYgKGZwICE9IE5VTEwpCisgICAgICAgIGZjbG9zZShmcCk7CisgICAgZWxzZSBpZiAoZmQgIT0gLTEpCisgICAgICAgIGNsb3NlKGZkKTsKICAgICByZW1vdmUoZm4pOwogICAgIHJldHVybiByZXM7CiB9CkBAIC0xOTQzLDIwICsyMDE5LDIwIEBACiAgICAgYXNjaWkgPSBQeVVuaWNvZGVfQXNBU0NJSVN0cmluZyh2YWx1ZSk7CiAgICAgaWYgKGFzY2lpID09IE5VTEwpCiAgICAgICAgIHJldHVybiAtMTsKLSAgICBlbmNvZGluZyA9IHN0cmR1cChQeUJ5dGVzX0FTX1NUUklORyhhc2NpaSkpOworICAgIGVuY29kaW5nID0gX1B5TWVtX1N0cmR1cChQeUJ5dGVzX0FTX1NUUklORyhhc2NpaSkpOwogICAgIFB5X0RFQ1JFRihhc2NpaSk7CiAgICAgaWYgKGVuY29kaW5nID09IE5VTEwpIHsKICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KLSAgICBmcmVlKHNlbGYtPmVuY29kaW5nKTsKKyAgICBQeU1lbV9GcmVlKHNlbGYtPmVuY29kaW5nKTsKICAgICBzZWxmLT5lbmNvZGluZyA9IGVuY29kaW5nOwogICAgIHJldHVybiAwOwogfQogCiAKIHN0YXRpYyBQeU1ldGhvZERlZiBQeUN1cnNlc1dpbmRvd19NZXRob2RzW10gPSB7Ci0gICAgeyJhZGRjaCIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfQWRkQ2gsIE1FVEhfVkFSQVJHU30sCisgICAgQ1VSU0VTX1dJTkRPV19BRERDSF9NRVRIT0RERUYKICAgICB7ImFkZG5zdHIiLCAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19BZGROU3RyLCBNRVRIX1ZBUkFSR1N9LAogICAgIHsiYWRkc3RyIiwgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X0FkZFN0ciwgTUVUSF9WQVJBUkdTfSwKICAgICB7ImF0dHJvZmYiLCAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19BdHRyT2ZmLCBNRVRIX1ZBUkFSR1N9LApAQCAtMjAxMiw4ICsyMDg4LDYgQEAKICAgICB7Im5vZGVsYXkiLCAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19ub2RlbGF5LCBNRVRIX1ZBUkFSR1N9LAogICAgIHsibm90aW1lb3V0IiwgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X25vdGltZW91dCwgTUVUSF9WQVJBUkdTfSwKICAgICB7Im5vdXRyZWZyZXNoIiwgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19Ob091dFJlZnJlc2gsIE1FVEhfVkFSQVJHU30sCi0gICAgLyogQmFja3dhcmQgY29tcGF0aWJpbGl0eSBhbGlhcyAtLSByZW1vdmUgaW4gUHl0aG9uIDIuMyAqLwotICAgIHsibm9vdXRyZWZyZXNoIiwgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X05vT3V0UmVmcmVzaCwgTUVUSF9WQVJBUkdTfSwKICAgICB7Im92ZXJsYXkiLCAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19PdmVybGF5LCBNRVRIX1ZBUkFSR1N9LAogICAgIHsib3ZlcndyaXRlIiwgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X092ZXJ3cml0ZSwKICAgICAgTUVUSF9WQVJBUkdTfSwKQEAgLTIyNTcsMTIgKzIzMzEsMTMgQEAKIFB5Q3Vyc2VzX0dldFdpbihQeUN1cnNlc1dpbmRvd09iamVjdCAqc2VsZiwgUHlPYmplY3QgKnN0cmVhbSkKIHsKICAgICBjaGFyIGZuWzEwMF07Ci0gICAgaW50IGZkOwotICAgIEZJTEUgKmZwOworICAgIGludCBmZCA9IC0xOworICAgIEZJTEUgKmZwID0gTlVMTDsKICAgICBQeU9iamVjdCAqZGF0YTsKICAgICBzaXplX3QgZGF0YWxlbjsKICAgICBXSU5ET1cgKndpbjsKICAgICBfUHlfSURFTlRJRklFUihyZWFkKTsKKyAgICBQeU9iamVjdCAqcmVzID0gTlVMTDsKIAogICAgIFB5Q3Vyc2VzSW5pdGlhbGlzZWQ7CiAKQEAgLTIyNzAsNDQgKzIzNDUsNDcgQEAKICAgICBmZCA9IG1rc3RlbXAoZm4pOwogICAgIGlmIChmZCA8IDApCiAgICAgICAgIHJldHVybiBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWUoUHlFeGNfSU9FcnJvciwgZm4pOworICAgIGlmIChfUHlfc2V0X2luaGVyaXRhYmxlKGZkLCAwLCBOVUxMKSA8IDApCisgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgZnAgPSBmZG9wZW4oZmQsICJ3YisiKTsKICAgICBpZiAoZnAgPT0gTlVMTCkgewotICAgICAgICBjbG9zZShmZCk7Ci0gICAgICAgIHJlbW92ZShmbik7Ci0gICAgICAgIHJldHVybiBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWUoUHlFeGNfSU9FcnJvciwgZm4pOworICAgICAgICBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWUoUHlFeGNfSU9FcnJvciwgZm4pOworICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KKwogICAgIGRhdGEgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKHN0cmVhbSwgJlB5SWRfcmVhZCwgIiIpOwotICAgIGlmIChkYXRhID09IE5VTEwpIHsKLSAgICAgICAgZmNsb3NlKGZwKTsKLSAgICAgICAgcmVtb3ZlKGZuKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQorICAgIGlmIChkYXRhID09IE5VTEwpCisgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgaWYgKCFQeUJ5dGVzX0NoZWNrKGRhdGEpKSB7CiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAiZi5yZWFkKCkgcmV0dXJuZWQgJS4xMDBzIGluc3RlYWQgb2YgYnl0ZXMiLAogICAgICAgICAgICAgICAgICAgICAgZGF0YS0+b2JfdHlwZS0+dHBfbmFtZSk7CiAgICAgICAgIFB5X0RFQ1JFRihkYXRhKTsKLSAgICAgICAgZmNsb3NlKGZwKTsKLSAgICAgICAgcmVtb3ZlKGZuKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQogICAgIGRhdGFsZW4gPSBQeUJ5dGVzX0dFVF9TSVpFKGRhdGEpOwogICAgIGlmIChmd3JpdGUoUHlCeXRlc19BU19TVFJJTkcoZGF0YSksIDEsIGRhdGFsZW4sIGZwKSAhPSBkYXRhbGVuKSB7CiAgICAgICAgIFB5X0RFQ1JFRihkYXRhKTsKLSAgICAgICAgZmNsb3NlKGZwKTsKLSAgICAgICAgcmVtb3ZlKGZuKTsKLSAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZShQeUV4Y19JT0Vycm9yLCBmbik7CisgICAgICAgIFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZShQeUV4Y19JT0Vycm9yLCBmbik7CisgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQogICAgIFB5X0RFQ1JFRihkYXRhKTsKKwogICAgIGZzZWVrKGZwLCAwLCAwKTsKICAgICB3aW4gPSBnZXR3aW4oZnApOwotICAgIGZjbG9zZShmcCk7Ci0gICAgcmVtb3ZlKGZuKTsKICAgICBpZiAod2luID09IE5VTEwpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5Q3Vyc2VzRXJyb3IsIGNhdGNoYWxsX05VTEwpOwotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgZ290byBlcnJvcjsKICAgICB9Ci0gICAgcmV0dXJuIFB5Q3Vyc2VzV2luZG93X05ldyh3aW4sIE5VTEwpOworICAgIHJlcyA9IFB5Q3Vyc2VzV2luZG93X05ldyh3aW4sIE5VTEwpOworCitlcnJvcjoKKyAgICBpZiAoZnAgIT0gTlVMTCkKKyAgICAgICAgZmNsb3NlKGZwKTsKKyAgICBlbHNlIGlmIChmZCAhPSAtMSkKKyAgICAgICAgY2xvc2UoZmQpOworICAgIHJlbW92ZShmbik7CisgICAgcmV0dXJuIHJlczsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTM0MTUsNyArMzQ5Myw3IEBACiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBpZiAoc3RybmNtcChrZXlfbiwiS0VZX0YoIiw2KT09MCkgewogICAgICAgICAgICAgICAgIGNoYXIgKnAxLCAqcDI7Ci0gICAgICAgICAgICAgICAga2V5X24yID0gbWFsbG9jKHN0cmxlbihrZXlfbikrMSk7CisgICAgICAgICAgICAgICAga2V5X24yID0gUHlNZW1fTWFsbG9jKHN0cmxlbihrZXlfbikrMSk7CiAgICAgICAgICAgICAgICAgaWYgKCFrZXlfbjIpIHsKICAgICAgICAgICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0zNDM0LDcgKzM1MTIsNyBAQAogICAgICAgICAgICAgICAgIGtleV9uMiA9IGtleV9uOwogICAgICAgICAgICAgU2V0RGljdEludChrZXlfbjIsa2V5KTsKICAgICAgICAgICAgIGlmIChrZXlfbjIgIT0ga2V5X24pCi0gICAgICAgICAgICAgICAgZnJlZShrZXlfbjIpOworICAgICAgICAgICAgICAgIFB5TWVtX0ZyZWUoa2V5X24yKTsKICAgICAgICAgfQogI2VuZGlmCiAgICAgICAgIFNldERpY3RJbnQoIktFWV9NSU4iLCBLRVlfTUlOKTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2RhdGV0aW1lbW9kdWxlLmMgYi9Nb2R1bGVzL19kYXRldGltZW1vZHVsZS5jCmluZGV4IGZhMjMxZDkuLjYwODRmZmEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2RhdGV0aW1lbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9fZGF0ZXRpbWVtb2R1bGUuYwpAQCAtMTYsNiArMTYsMTIgQEAKICNpbmNsdWRlICJkYXRldGltZS5oIgogI3VuZGVmIFB5X0JVSUxEX0NPUkUKIAorLypbY2xpbmljIGlucHV0XQorbW9kdWxlIGRhdGV0aW1lCitjbGFzcyBkYXRldGltZS5kYXRldGltZSAiUHlEYXRlVGltZV9EYXRlVGltZSAqIiAiJlB5RGF0ZVRpbWVfRGF0ZVRpbWVUeXBlIgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWRhMzlhM2VlNWU2YjRiMGQgaW5wdXQ9NzgxNDJjYjY0YjllOThiY10qLworCiAvKiBXZSByZXF1aXJlIHRoYXQgQyBpbnQgYmUgYXQgbGVhc3QgMzIgYml0cywgYW5kIHVzZSBpbnQgdmlydHVhbGx5CiAgKiBldmVyeXdoZXJlLiAgSW4ganVzdCBhIGZldyBjYXNlcyB3ZSB1c2UgYSB0ZW1wIGxvbmcsIHdoZXJlIGEgUHl0aG9uCiAgKiBBUEkgcmV0dXJucyBhIEMgbG9uZy4gIEluIHN1Y2ggY2FzZXMsIHdlIGhhdmUgdG8gZW5zdXJlIHRoYXQgdGhlCkBAIC0xMDQsNiArMTEwLDExIEBACiBzdGF0aWMgUHlUeXBlT2JqZWN0IFB5RGF0ZVRpbWVfVFpJbmZvVHlwZTsKIHN0YXRpYyBQeVR5cGVPYmplY3QgUHlEYXRlVGltZV9UaW1lWm9uZVR5cGU7CiAKK19QeV9JREVOVElGSUVSKGFzX2ludGVnZXJfcmF0aW8pOworX1B5X0lERU5USUZJRVIoZnJvbXV0Yyk7CitfUHlfSURFTlRJRklFUihpc29mb3JtYXQpOworX1B5X0lERU5USUZJRVIoc3RyZnRpbWUpOworCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIE1hdGggdXRpbGl0aWVzLgogICovCkBAIC0xNDAsMTkgKzE1MSw2IEBACiAgICAgcmV0dXJuIHF1bzsKIH0KIAotLyogUm91bmQgYSBkb3VibGUgdG8gdGhlIG5lYXJlc3QgbG9uZy4gIHx4fCBtdXN0IGJlIHNtYWxsIGVub3VnaCB0byBmaXQKLSAqIGluIGEgQyBsb25nOyB0aGlzIGlzIG5vdCBjaGVja2VkLgotICovCi1zdGF0aWMgbG9uZwotcm91bmRfdG9fbG9uZyhkb3VibGUgeCkKLXsKLSAgICBpZiAoeCA+PSAwLjApCi0gICAgICAgIHggPSBmbG9vcih4ICsgMC41KTsKLSAgICBlbHNlCi0gICAgICAgIHggPSBjZWlsKHggLSAwLjUpOwotICAgIHJldHVybiAobG9uZyl4OwotfQotCiAvKiBOZWFyZXN0IGludGVnZXIgdG8gbSAvIG4gZm9yIGludGVnZXJzIG0gYW5kIG4uIEhhbGYtaW50ZWdlciByZXN1bHRzCiAgKiBhcmUgcm91bmRlZCB0byBldmVuLgogICovCkBAIC02MTUsNyArNjEzLDcgQEAKICAgICAgICAgICAgICAgICBzaXplb2YoX1B5RGF0ZVRpbWVfQmFzZVRpbWUpKTsKICAgICBpZiAoc2VsZiA9PSBOVUxMKQogICAgICAgICByZXR1cm4gKFB5T2JqZWN0ICopUHlFcnJfTm9NZW1vcnkoKTsKLSAgICBQeU9iamVjdF9JTklUKHNlbGYsIHR5cGUpOworICAgICh2b2lkKVB5T2JqZWN0X0lOSVQoc2VsZiwgdHlwZSk7CiAgICAgcmV0dXJuIHNlbGY7CiB9CiAKQEAgLTYzMCw3ICs2MjgsNyBAQAogICAgICAgICAgICAgICAgIHNpemVvZihfUHlEYXRlVGltZV9CYXNlRGF0ZVRpbWUpKTsKICAgICBpZiAoc2VsZiA9PSBOVUxMKQogICAgICAgICByZXR1cm4gKFB5T2JqZWN0ICopUHlFcnJfTm9NZW1vcnkoKTsKLSAgICBQeU9iamVjdF9JTklUKHNlbGYsIHR5cGUpOworICAgICh2b2lkKVB5T2JqZWN0X0lOSVQoc2VsZiwgdHlwZSk7CiAgICAgcmV0dXJuIHNlbGY7CiB9CiAKQEAgLTg5OSwxMSArODk3LDExIEBACiAgICAgICAgIH0KICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIFB5X0RFQ1JFRihvZmZzZXQpOwogICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgInR6aW5mby4lcygpIG11c3QgcmV0dXJuIE5vbmUgb3IgIgogICAgICAgICAgICAgICAgICAgICAgInRpbWVkZWx0YSwgbm90ICclLjIwMHMnIiwKICAgICAgICAgICAgICAgICAgICAgIG5hbWUsIFB5X1RZUEUob2Zmc2V0KS0+dHBfbmFtZSk7CisgICAgICAgIFB5X0RFQ1JFRihvZmZzZXQpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKQEAgLTEyOTAsOCArMTI4OCw2IEBACiAgICAgICAgICAgICBnb3RvIERvbmU7CiAgICAgICAgIGZvcm1hdCA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKFB5Qnl0ZXNfQVNfU1RSSU5HKG5ld2ZtdCkpOwogICAgICAgICBpZiAoZm9ybWF0ICE9IE5VTEwpIHsKLSAgICAgICAgICAgIF9QeV9JREVOVElGSUVSKHN0cmZ0aW1lKTsKLQogICAgICAgICAgICAgcmVzdWx0ID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZCh0aW1lLCAmUHlJZF9zdHJmdGltZSwgIk9PIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0LCB0aW1ldHVwbGUsIE5VTEwpOwogICAgICAgICAgICAgUHlfREVDUkVGKGZvcm1hdCk7CkBAIC0xMzk3LDcgKzEzOTMsNyBAQAogICovCiAKIC8qIENvbnZlcnNpb24gZmFjdG9ycy4gKi8KLXN0YXRpYyBQeU9iamVjdCAqdXNfcGVyX3VzID0gTlVMTDsgICAgICAvKiAxICovCitzdGF0aWMgUHlPYmplY3QgKm9uZSA9IE5VTEw7ICAgICAgLyogMSAqLwogc3RhdGljIFB5T2JqZWN0ICp1c19wZXJfbXMgPSBOVUxMOyAgICAgIC8qIDEwMDAgKi8KIHN0YXRpYyBQeU9iamVjdCAqdXNfcGVyX3NlY29uZCA9IE5VTEw7ICAvKiAxMDAwMDAwICovCiBzdGF0aWMgUHlPYmplY3QgKnVzX3Blcl9taW51dGUgPSBOVUxMOyAgLyogMWU2ICogNjAgYXMgUHl0aG9uIGludCAqLwpAQCAtMTU3OSw3ICsxNTc1LDYgQEAKICAgICBQeU9iamVjdCAqcmVzdWx0ID0gTlVMTDsKICAgICBQeU9iamVjdCAqcHl1c19pbiA9IE5VTEwsICp0ZW1wLCAqcHl1c19vdXQ7CiAgICAgUHlPYmplY3QgKnJhdGlvID0gTlVMTDsKLSAgICBfUHlfSURFTlRJRklFUihhc19pbnRlZ2VyX3JhdGlvKTsKIAogICAgIHB5dXNfaW4gPSBkZWx0YV90b19taWNyb3NlY29uZHMoZGVsdGEpOwogICAgIGlmIChweXVzX2luID09IE5VTEwpCkBAIC0xNjc4LDcgKzE2NzMsNiBAQAogICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBOVUxMOwogICAgIFB5T2JqZWN0ICpweXVzX2luID0gTlVMTCwgKnRlbXAsICpweXVzX291dDsKICAgICBQeU9iamVjdCAqcmF0aW8gPSBOVUxMOwotICAgIF9QeV9JREVOVElGSUVSKGFzX2ludGVnZXJfcmF0aW8pOwogCiAgICAgcHl1c19pbiA9IGRlbHRhX3RvX21pY3Jvc2Vjb25kcyhkZWx0YSk7CiAgICAgaWYgKHB5dXNfaW4gPT0gTlVMTCkKQEAgLTIxMTksNyArMjExMyw3IEBACiAgICAgICAgIGdvdG8gRG9uZQogCiAgICAgaWYgKHVzKSB7Ci0gICAgICAgIHkgPSBhY2N1bSgibWljcm9zZWNvbmRzIiwgeCwgdXMsIHVzX3Blcl91cywgJmxlZnRvdmVyX3VzKTsKKyAgICAgICAgeSA9IGFjY3VtKCJtaWNyb3NlY29uZHMiLCB4LCB1cywgb25lLCAmbGVmdG92ZXJfdXMpOwogICAgICAgICBDTEVBTlVQOwogICAgIH0KICAgICBpZiAobXMpIHsKQEAgLTIxNDgsNyArMjE0MiwzMyBAQAogICAgIH0KICAgICBpZiAobGVmdG92ZXJfdXMpIHsKICAgICAgICAgLyogUm91bmQgdG8gbmVhcmVzdCB3aG9sZSAjIG9mIHVzLCBhbmQgYWRkIGludG8geC4gKi8KLSAgICAgICAgUHlPYmplY3QgKnRlbXAgPSBQeUxvbmdfRnJvbUxvbmcocm91bmRfdG9fbG9uZyhsZWZ0b3Zlcl91cykpOworICAgICAgICBkb3VibGUgd2hvbGVfdXMgPSByb3VuZChsZWZ0b3Zlcl91cyk7CisgICAgICAgIGludCB4X2lzX29kZDsKKyAgICAgICAgUHlPYmplY3QgKnRlbXA7CisKKyAgICAgICAgd2hvbGVfdXMgPSByb3VuZChsZWZ0b3Zlcl91cyk7CisgICAgICAgIGlmIChmYWJzKHdob2xlX3VzIC0gbGVmdG92ZXJfdXMpID09IDAuNSkgeworICAgICAgICAgICAgLyogV2UncmUgZXhhY3RseSBoYWxmd2F5IGJldHdlZW4gdHdvIGludGVnZXJzLiAgSW4gb3JkZXIKKyAgICAgICAgICAgICAqIHRvIGRvIHJvdW5kLWhhbGYtdG8tZXZlbiwgd2UgbXVzdCBkZXRlcm1pbmUgd2hldGhlciB4CisgICAgICAgICAgICAgKiBpcyBvZGQuIE5vdGUgdGhhdCB4IGlzIG9kZCB3aGVuIGl0J3MgbGFzdCBiaXQgaXMgMS4gVGhlCisgICAgICAgICAgICAgKiBjb2RlIGJlbG93IHVzZXMgYml0d2lzZSBhbmQgb3BlcmF0aW9uIHRvIGNoZWNrIHRoZSBsYXN0CisgICAgICAgICAgICAgKiBiaXQuICovCisgICAgICAgICAgICB0ZW1wID0gUHlOdW1iZXJfQW5kKHgsIG9uZSk7ICAvKiB0ZW1wIDwtIHggJiAxICovCisgICAgICAgICAgICBpZiAodGVtcCA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKHgpOworICAgICAgICAgICAgICAgIGdvdG8gRG9uZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHhfaXNfb2RkID0gUHlPYmplY3RfSXNUcnVlKHRlbXApOworICAgICAgICAgICAgUHlfREVDUkVGKHRlbXApOworICAgICAgICAgICAgaWYgKHhfaXNfb2RkID09IC0xKSB7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKHgpOworICAgICAgICAgICAgICAgIGdvdG8gRG9uZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHdob2xlX3VzID0gMi4wICogcm91bmQoKGxlZnRvdmVyX3VzICsgeF9pc19vZGQpICogMC41KSAtIHhfaXNfb2RkOworICAgICAgICB9CisKKyAgICAgICAgdGVtcCA9IFB5TG9uZ19Gcm9tTG9uZygobG9uZyl3aG9sZV91cyk7CisKICAgICAgICAgaWYgKHRlbXAgPT0gTlVMTCkgewogICAgICAgICAgICAgUHlfREVDUkVGKHgpOwogICAgICAgICAgICAgZ290byBEb25lOwpAQCAtMjIzOSwyMiArMjI1OSwxNCBAQAogewogICAgIFB5T2JqZWN0ICp0b3RhbF9zZWNvbmRzOwogICAgIFB5T2JqZWN0ICp0b3RhbF9taWNyb3NlY29uZHM7Ci0gICAgUHlPYmplY3QgKm9uZV9taWxsaW9uOwogCiAgICAgdG90YWxfbWljcm9zZWNvbmRzID0gZGVsdGFfdG9fbWljcm9zZWNvbmRzKChQeURhdGVUaW1lX0RlbHRhICopc2VsZik7CiAgICAgaWYgKHRvdGFsX21pY3Jvc2Vjb25kcyA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIG9uZV9taWxsaW9uID0gUHlMb25nX0Zyb21Mb25nKDEwMDAwMDBMKTsKLSAgICBpZiAob25lX21pbGxpb24gPT0gTlVMTCkgewotICAgICAgICBQeV9ERUNSRUYodG90YWxfbWljcm9zZWNvbmRzKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgdG90YWxfc2Vjb25kcyA9IFB5TnVtYmVyX1RydWVEaXZpZGUodG90YWxfbWljcm9zZWNvbmRzLCBvbmVfbWlsbGlvbik7CisgICAgdG90YWxfc2Vjb25kcyA9IFB5TnVtYmVyX1RydWVEaXZpZGUodG90YWxfbWljcm9zZWNvbmRzLCB1c19wZXJfc2Vjb25kKTsKIAogICAgIFB5X0RFQ1JFRih0b3RhbF9taWNyb3NlY29uZHMpOwotICAgIFB5X0RFQ1JFRihvbmVfbWlsbGlvbik7CiAgICAgcmV0dXJuIHRvdGFsX3NlY29uZHM7CiB9CiAKQEAgLTI0NDcsNyArMjQ1OSw3IEBACiAgICAgc3RydWN0IHRtICp0bTsKICAgICB0aW1lX3QgdDsKIAotICAgIGlmIChfUHlUaW1lX09iamVjdFRvVGltZV90KG9iaiwgJnQpID09IC0xKQorICAgIGlmIChfUHlUaW1lX09iamVjdFRvVGltZV90KG9iaiwgJnQsIF9QeVRpbWVfUk9VTkRfRE9XTikgPT0gLTEpCiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgdG0gPSBsb2NhbHRpbWUoJnQpOwpAQCAtMjYzMCw4ICsyNjQyLDYgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBkYXRlX3N0cihQeURhdGVUaW1lX0RhdGUgKnNlbGYpCiB7Ci0gICAgX1B5X0lERU5USUZJRVIoaXNvZm9ybWF0KTsKLQogICAgIHJldHVybiBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKChQeU9iamVjdCAqKXNlbGYsICZQeUlkX2lzb2Zvcm1hdCwgIigpIik7CiB9CiAKQEAgLTI2NzEsNyArMjY4MSw2IEBACiBkYXRlX2Zvcm1hdChQeURhdGVUaW1lX0RhdGUgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewogICAgIFB5T2JqZWN0ICpmb3JtYXQ7Ci0gICAgX1B5X0lERU5USUZJRVIoc3RyZnRpbWUpOwogCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJVOl9fZm9ybWF0X18iLCAmZm9ybWF0KSkKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0zMDMxLDcgKzMwNDAsNyBAQAogICAgICAgICBnb3RvIEZhaWw7CiAgICAgaWYgKGRzdCA9PSBQeV9Ob25lKQogICAgICAgICBnb3RvIEluY29uc2lzdGVudDsKLSAgICBpZiAoZGVsdGFfYm9vbChkZWx0YSkgIT0gMCkgeworICAgIGlmIChkZWx0YV9ib29sKChQeURhdGVUaW1lX0RlbHRhICopZHN0KSAhPSAwKSB7CiAgICAgICAgIFB5T2JqZWN0ICp0ZW1wID0gcmVzdWx0OwogICAgICAgICByZXN1bHQgPSBhZGRfZGF0ZXRpbWVfdGltZWRlbHRhKChQeURhdGVUaW1lX0RhdGVUaW1lICopcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQeURhdGVUaW1lX0RlbHRhICopZHN0LCAxKTsKQEAgLTMyMTUsMTAgKzMyMjQsMTAgQEAKICAgICBpZiAob3AgIT0gUHlfRVEgJiYgb3AgIT0gUHlfTkUpCiAgICAgICAgIFB5X1JFVFVSTl9OT1RJTVBMRU1FTlRFRDsKICAgICBpZiAoUHlfVFlQRShvdGhlcikgIT0gJlB5RGF0ZVRpbWVfVGltZVpvbmVUeXBlKSB7Ci0JaWYgKG9wID09IFB5X0VRKQotCSAgICBQeV9SRVRVUk5fRkFMU0U7Ci0JZWxzZQotCSAgICBQeV9SRVRVUk5fVFJVRTsKKyAgICAgICAgaWYgKG9wID09IFB5X0VRKQorICAgICAgICAgICAgUHlfUkVUVVJOX0ZBTFNFOworICAgICAgICBlbHNlCisgICAgICAgICAgICBQeV9SRVRVUk5fVFJVRTsKICAgICB9CiAgICAgcmV0dXJuIGRlbHRhX3JpY2hjb21wYXJlKHNlbGYtPm9mZnNldCwgb3RoZXItPm9mZnNldCwgb3ApOwogfQpAQCAtMzU4OCw4ICszNTk3LDYgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiB0aW1lX3N0cihQeURhdGVUaW1lX1RpbWUgKnNlbGYpCiB7Ci0gICAgX1B5X0lERU5USUZJRVIoaXNvZm9ybWF0KTsKLQogICAgIHJldHVybiBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKChQeU9iamVjdCAqKXNlbGYsICZQeUlkX2lzb2Zvcm1hdCwgIigpIik7CiB9CiAKQEAgLTQxMDYsNiArNDExMyw0NCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHppbmZvKTsKIH0KIAorc3RhdGljIHRpbWVfdAorX1B5VGltZV9Eb3VibGVUb1RpbWV0KGRvdWJsZSB4KQoreworICAgIHRpbWVfdCByZXN1bHQ7CisgICAgZG91YmxlIGRpZmY7CisKKyAgICByZXN1bHQgPSAodGltZV90KXg7CisgICAgLyogSG93IG11Y2ggaW5mbyBkaWQgd2UgbG9zZT8gIHRpbWVfdCBtYXkgYmUgYW4gaW50ZWdyYWwgb3IKKyAgICAgKiBmbG9hdGluZyB0eXBlLCBhbmQgd2UgZG9uJ3Qga25vdyB3aGljaC4gIElmIGl0J3MgaW50ZWdyYWwsCisgICAgICogd2UgZG9uJ3Qga25vdyB3aGV0aGVyIEMgdHJ1bmNhdGVzLCByb3VuZHMsIHJldHVybnMgdGhlIGZsb29yLAorICAgICAqIGV0Yy4gIElmIHdlIGxvc3QgYSBzZWNvbmQgb3IgbW9yZSwgdGhlIEMgcm91bmRpbmcgaXMKKyAgICAgKiB1bnJlYXNvbmFibGUsIG9yIHRoZSBpbnB1dCBqdXN0IGRvZXNuJ3QgZml0IGluIGEgdGltZV90OworICAgICAqIGNhbGwgaXQgYW4gZXJyb3IgcmVnYXJkbGVzcy4gIE5vdGUgdGhhdCB0aGUgb3JpZ2luYWwgY2FzdCB0bworICAgICAqIHRpbWVfdCBjYW4gY2F1c2UgYSBDIGVycm9yIHRvbywgYnV0IG5vdGhpbmcgd2UgY2FuIGRvIHRvCisgICAgICogd29ybSBhcm91bmQgdGhhdC4KKyAgICAgKi8KKyAgICBkaWZmID0geCAtIChkb3VibGUpcmVzdWx0OworICAgIGlmIChkaWZmIDw9IC0xLjAgfHwgZGlmZiA+PSAxLjApIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAidGltZXN0YW1wIG91dCBvZiByYW5nZSBmb3IgcGxhdGZvcm0gdGltZV90Iik7CisgICAgICAgIHJlc3VsdCA9ICh0aW1lX3QpLTE7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qIFJvdW5kIGEgZG91YmxlIHRvIHRoZSBuZWFyZXN0IGxvbmcuICB8eHwgbXVzdCBiZSBzbWFsbCBlbm91Z2ggdG8gZml0CisgKiBpbiBhIEMgbG9uZzsgdGhpcyBpcyBub3QgY2hlY2tlZC4KKyAqLworc3RhdGljIGRvdWJsZQorX1B5VGltZV9Sb3VuZEhhbGZFdmVuKGRvdWJsZSB4KQoreworICAgIGRvdWJsZSByb3VuZGVkID0gcm91bmQoeCk7CisgICAgaWYgKGZhYnMoeC1yb3VuZGVkKSA9PSAwLjUpCisgICAgICAgIC8qIGhhbGZ3YXkgY2FzZTogcm91bmQgdG8gZXZlbiAqLworICAgICAgICByb3VuZGVkID0gMi4wKnJvdW5kKHgvMi4wKTsKKyAgICByZXR1cm4gcm91bmRlZDsKK30KKwogLyogSW50ZXJuYWwgaGVscGVyLgogICogQnVpbGQgZGF0ZXRpbWUgZnJvbSBhIFB5dGhvbiB0aW1lc3RhbXAuICBQYXNzIGxvY2FsdGltZSBvciBnbXRpbWUgZm9yIGYsCiAgKiB0byBjb250cm9sIHRoZSBpbnRlcnByZXRhdGlvbiBvZiB0aGUgdGltZXN0YW1wLiAgU2luY2UgYSBkb3VibGUgZG9lc24ndApAQCAtNDExNCwxNSArNDE1OSwzMiBAQAogICogdG8gZ2V0IHRoYXQgbXVjaCBwcmVjaXNpb24gKGUuZy4sIEMgdGltZSgpIGlzbid0IGdvb2QgZW5vdWdoKS4KICAqLwogc3RhdGljIFB5T2JqZWN0ICoKLWRhdGV0aW1lX2Zyb21fdGltZXN0YW1wKFB5T2JqZWN0ICpjbHMsIFRNX0ZVTkMgZiwgUHlPYmplY3QgKnRpbWVzdGFtcCwKK2RhdGV0aW1lX2Zyb21fdGltZXN0YW1wKFB5T2JqZWN0ICpjbHMsIFRNX0ZVTkMgZiwgZG91YmxlIHRpbWVzdGFtcCwKICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICp0emluZm8pCiB7CiAgICAgdGltZV90IHRpbWV0OwotICAgIGxvbmcgdXM7CisgICAgZG91YmxlIGZyYWN0aW9uOworICAgIGludCB1czsKIAotICAgIGlmIChfUHlUaW1lX09iamVjdFRvVGltZXZhbCh0aW1lc3RhbXAsICZ0aW1ldCwgJnVzKSA9PSAtMSkKKyAgICB0aW1ldCA9IF9QeVRpbWVfRG91YmxlVG9UaW1ldCh0aW1lc3RhbXApOworICAgIGlmICh0aW1ldCA9PSAodGltZV90KS0xICYmIFB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIHJldHVybiBkYXRldGltZV9mcm9tX3RpbWV0X2FuZF91cyhjbHMsIGYsIHRpbWV0LCAoaW50KXVzLCB0emluZm8pOworICAgIGZyYWN0aW9uID0gdGltZXN0YW1wIC0gKGRvdWJsZSl0aW1ldDsKKyAgICB1cyA9IChpbnQpX1B5VGltZV9Sb3VuZEhhbGZFdmVuKGZyYWN0aW9uICogMWU2KTsKKyAgICBpZiAodXMgPCAwKSB7CisgICAgICAgIC8qIFRydW5jYXRpb24gdG93YXJkcyB6ZXJvIGlzIG5vdCB3aGF0IHdlIHdhbnRlZAorICAgICAgICAgICBmb3IgbmVnYXRpdmUgbnVtYmVycyAoUHl0aG9uJ3MgbW9kIHNlbWFudGljcykgKi8KKyAgICAgICAgdGltZXQgLT0gMTsKKyAgICAgICAgdXMgKz0gMTAwMDAwMDsKKyAgICB9CisgICAgLyogSWYgdGltZXN0YW1wIGlzIGxlc3MgdGhhbiBvbmUgbWljcm9zZWNvbmQgc21hbGxlciB0aGFuIGEKKyAgICAgKiBmdWxsIHNlY29uZCwgcm91bmQgdXAuIE90aGVyd2lzZSwgVmFsdWVFcnJvcnMgYXJlIHJhaXNlZAorICAgICAqIGZvciBzb21lIGZsb2F0cy4gKi8KKyAgICBpZiAodXMgPT0gMTAwMDAwMCkgeworICAgICAgICB0aW1ldCArPSAxOworICAgICAgICB1cyA9IDA7CisgICAgfQorICAgIHJldHVybiBkYXRldGltZV9mcm9tX3RpbWV0X2FuZF91cyhjbHMsIGYsIHRpbWV0LCB1cywgdHppbmZvKTsKIH0KIAogLyogSW50ZXJuYWwgaGVscGVyLgpAQCAtNDEzOCwzMSArNDIwMCw3MyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0emluZm8pOwogfQogCi0vKiBSZXR1cm4gYmVzdCBwb3NzaWJsZSBsb2NhbCB0aW1lIC0tIHRoaXMgaXNuJ3QgY29uc3RyYWluZWQgYnkgdGhlCi0gKiBwcmVjaXNpb24gb2YgYSB0aW1lc3RhbXAuCi0gKi8KKy8qW2NsaW5pYyBpbnB1dF0KKworQGNsYXNzbWV0aG9kCitkYXRldGltZS5kYXRldGltZS5ub3cKKworICAgIHR6OiBvYmplY3QgPSBOb25lCisgICAgICAgIFRpbWV6b25lIG9iamVjdC4KKworUmV0dXJucyBuZXcgZGF0ZXRpbWUgb2JqZWN0IHJlcHJlc2VudGluZyBjdXJyZW50IHRpbWUgbG9jYWwgdG8gdHouCisKK0lmIG5vIHR6IGlzIHNwZWNpZmllZCwgdXNlcyBsb2NhbCB0aW1lem9uZS4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworUHlEb2NfU1RSVkFSKGRhdGV0aW1lX2RhdGV0aW1lX25vd19fZG9jX18sCisibm93KCR0eXBlLCAvLCB0ej1Ob25lKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJucyBuZXcgZGF0ZXRpbWUgb2JqZWN0IHJlcHJlc2VudGluZyBjdXJyZW50IHRpbWUgbG9jYWwgdG8gdHouXG4iCisiXG4iCisiICB0elxuIgorIiAgICBUaW1lem9uZSBvYmplY3QuXG4iCisiXG4iCisiSWYgbm8gdHogaXMgc3BlY2lmaWVkLCB1c2VzIGxvY2FsIHRpbWV6b25lLiIpOworCisjZGVmaW5lIERBVEVUSU1FX0RBVEVUSU1FX05PV19NRVRIT0RERUYgICAgXAorICAgIHsibm93IiwgKFB5Q0Z1bmN0aW9uKWRhdGV0aW1lX2RhdGV0aW1lX25vdywgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFN8TUVUSF9DTEFTUywgZGF0ZXRpbWVfZGF0ZXRpbWVfbm93X19kb2NfX30sCisKIHN0YXRpYyBQeU9iamVjdCAqCi1kYXRldGltZV9ub3coUHlPYmplY3QgKmNscywgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprdykKK2RhdGV0aW1lX2RhdGV0aW1lX25vd19pbXBsKFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKnR6KTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2RhdGV0aW1lX2RhdGV0aW1lX25vdyhQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIHN0YXRpYyBjaGFyICpfa2V5d29yZHNbXSA9IHsidHoiLCBOVUxMfTsKKyAgICBQeU9iamVjdCAqdHogPSBQeV9Ob25lOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLAorICAgICAgICAifE86bm93IiwgX2tleXdvcmRzLAorICAgICAgICAmdHopKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gZGF0ZXRpbWVfZGF0ZXRpbWVfbm93X2ltcGwodHlwZSwgdHopOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitkYXRldGltZV9kYXRldGltZV9ub3dfaW1wbChQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICp0eikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD01ODNjNTYzN2UzYzg0M2ZhIGlucHV0PTgwZDA5ODY5YzUyNjdkMDBdKi8KIHsKICAgICBQeU9iamVjdCAqc2VsZjsKLSAgICBQeU9iamVjdCAqdHppbmZvID0gUHlfTm9uZTsKLSAgICBzdGF0aWMgY2hhciAqa2V5d29yZHNbXSA9IHsidHoiLCBOVUxMfTsKIAotICAgIGlmICghIFB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrdywgInxPOm5vdyIsIGtleXdvcmRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdHppbmZvKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKGNoZWNrX3R6aW5mb19zdWJjbGFzcyh0emluZm8pIDwgMCkKKyAgICAvKiBSZXR1cm4gYmVzdCBwb3NzaWJsZSBsb2NhbCB0aW1lIC0tIHRoaXMgaXNuJ3QgY29uc3RyYWluZWQgYnkgdGhlCisgICAgICogcHJlY2lzaW9uIG9mIGEgdGltZXN0YW1wLgorICAgICAqLworICAgIGlmIChjaGVja190emluZm9fc3ViY2xhc3ModHopIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBzZWxmID0gZGF0ZXRpbWVfYmVzdF9wb3NzaWJsZShjbHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHppbmZvID09IFB5X05vbmUgPyBsb2NhbHRpbWUgOiBnbXRpbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHppbmZvKTsKLSAgICBpZiAoc2VsZiAhPSBOVUxMICYmIHR6aW5mbyAhPSBQeV9Ob25lKSB7CisgICAgc2VsZiA9IGRhdGV0aW1lX2Jlc3RfcG9zc2libGUoKFB5T2JqZWN0ICopdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eiA9PSBQeV9Ob25lID8gbG9jYWx0aW1lIDogZ210aW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR6KTsKKyAgICBpZiAoc2VsZiAhPSBOVUxMICYmIHR6ICE9IFB5X05vbmUpIHsKICAgICAgICAgLyogQ29udmVydCBVVEMgdG8gdHppbmZvJ3Mgem9uZS4gKi8KICAgICAgICAgUHlPYmplY3QgKnRlbXAgPSBzZWxmOwotICAgICAgICBfUHlfSURFTlRJRklFUihmcm9tdXRjKTsKIAotICAgICAgICBzZWxmID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZCh0emluZm8sICZQeUlkX2Zyb211dGMsICJPIiwgc2VsZik7CisgICAgICAgIHNlbGYgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKHR6LCAmUHlJZF9mcm9tdXRjLCAiTyIsIHNlbGYpOwogICAgICAgICBQeV9ERUNSRUYodGVtcCk7CiAgICAgfQogICAgIHJldHVybiBzZWxmOwpAQCAtNDE4MiwxMSArNDI4NiwxMSBAQAogZGF0ZXRpbWVfZnJvbXRpbWVzdGFtcChQeU9iamVjdCAqY2xzLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3KQogewogICAgIFB5T2JqZWN0ICpzZWxmOwotICAgIFB5T2JqZWN0ICp0aW1lc3RhbXA7CisgICAgZG91YmxlIHRpbWVzdGFtcDsKICAgICBQeU9iamVjdCAqdHppbmZvID0gUHlfTm9uZTsKICAgICBzdGF0aWMgY2hhciAqa2V5d29yZHNbXSA9IHsidGltZXN0YW1wIiwgInR6IiwgTlVMTH07CiAKLSAgICBpZiAoISBQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3csICJPfE86ZnJvbXRpbWVzdGFtcCIsCisgICAgaWYgKCEgUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3LCAiZHxPOmZyb210aW1lc3RhbXAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXl3b3JkcywgJnRpbWVzdGFtcCwgJnR6aW5mbykpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmIChjaGVja190emluZm9fc3ViY2xhc3ModHppbmZvKSA8IDApCkBAIC00MTk5LDcgKzQzMDMsNiBAQAogICAgIGlmIChzZWxmICE9IE5VTEwgJiYgdHppbmZvICE9IFB5X05vbmUpIHsKICAgICAgICAgLyogQ29udmVydCBVVEMgdG8gdHppbmZvJ3Mgem9uZS4gKi8KICAgICAgICAgUHlPYmplY3QgKnRlbXAgPSBzZWxmOwotICAgICAgICBfUHlfSURFTlRJRklFUihmcm9tdXRjKTsKIAogICAgICAgICBzZWxmID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZCh0emluZm8sICZQeUlkX2Zyb211dGMsICJPIiwgc2VsZik7CiAgICAgICAgIFB5X0RFQ1JFRih0ZW1wKTsKQEAgLTQyMTEsMTAgKzQzMTQsMTAgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBkYXRldGltZV91dGNmcm9tdGltZXN0YW1wKFB5T2JqZWN0ICpjbHMsIFB5T2JqZWN0ICphcmdzKQogewotICAgIFB5T2JqZWN0ICp0aW1lc3RhbXA7CisgICAgZG91YmxlIHRpbWVzdGFtcDsKICAgICBQeU9iamVjdCAqcmVzdWx0ID0gTlVMTDsKIAotICAgIGlmIChQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPOnV0Y2Zyb210aW1lc3RhbXAiLCAmdGltZXN0YW1wKSkKKyAgICBpZiAoUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiZDp1dGNmcm9tdGltZXN0YW1wIiwgJnRpbWVzdGFtcCkpCiAgICAgICAgIHJlc3VsdCA9IGRhdGV0aW1lX2Zyb21fdGltZXN0YW1wKGNscywgZ210aW1lLCB0aW1lc3RhbXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X05vbmUpOwogICAgIHJldHVybiByZXN1bHQ7CkBAIC00NDIxLDYgKzQ1MjQsOSBAQAogICAgICAgICAgICAgZGVsdGFfdXMgPSBEQVRFX0dFVF9NSUNST1NFQ09ORChsZWZ0KSAtCiAgICAgICAgICAgICAgICAgICAgICAgIERBVEVfR0VUX01JQ1JPU0VDT05EKHJpZ2h0KTsKICAgICAgICAgICAgIHJlc3VsdCA9IG5ld19kZWx0YShkZWx0YV9kLCBkZWx0YV9zLCBkZWx0YV91cywgMSk7CisgICAgICAgICAgICBpZiAocmVzdWx0ID09IE5VTEwpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisKICAgICAgICAgICAgIGlmIChvZmZkaWZmICE9IE5VTEwpIHsKICAgICAgICAgICAgICAgICBQeU9iamVjdCAqdGVtcCA9IHJlc3VsdDsKICAgICAgICAgICAgICAgICByZXN1bHQgPSBkZWx0YV9zdWJ0cmFjdChyZXN1bHQsIG9mZmRpZmYpOwpAQCAtNDQ4Miw4ICs0NTg4LDYgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBkYXRldGltZV9zdHIoUHlEYXRlVGltZV9EYXRlVGltZSAqc2VsZikKIHsKLSAgICBfUHlfSURFTlRJRklFUihpc29mb3JtYXQpOwotCiAgICAgcmV0dXJuIF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoKFB5T2JqZWN0ICopc2VsZiwgJlB5SWRfaXNvZm9ybWF0LCAiKHMpIiwgIiAiKTsKIH0KIApAQCAtNDc0OSw3ICs0ODUzLDcgQEAKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQogICAgIHJlc3VsdCA9IG5ld190aW1lem9uZShkZWx0YSwgbmFtZW8pOwotICAgIFB5X0RFQ1JFRihuYW1lbyk7CisgICAgUHlfWERFQ1JFRihuYW1lbyk7CiAgIGVycm9yOgogICAgIFB5X0RFQ1JFRihkZWx0YSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTQ3NjIsMTEgKzQ4NjYsMTAgQEAKICAgICBQeU9iamVjdCAqb2Zmc2V0OwogICAgIFB5T2JqZWN0ICp0ZW1wOwogICAgIFB5T2JqZWN0ICp0emluZm8gPSBQeV9Ob25lOwotICAgIF9QeV9JREVOVElGSUVSKGZyb211dGMpOwogICAgIHN0YXRpYyBjaGFyICprZXl3b3Jkc1tdID0geyJ0eiIsIE5VTEx9OwogCiAgICAgaWYgKCEgUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3LCAifE86YXN0aW1lem9uZSIsIGtleXdvcmRzLAotCQkJCSAgICAgICZ0emluZm8pKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdHppbmZvKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBpZiAoY2hlY2tfdHppbmZvX3N1YmNsYXNzKHR6aW5mbykgPT0gLTEpCkBAIC00ODczLDkgKzQ5NzYsMTYgQEAKICAgICAgICAgdGltZS50bV93ZGF5ID0gLTE7CiAgICAgICAgIHRpbWUudG1faXNkc3QgPSAtMTsKICAgICAgICAgdGltZXN0YW1wID0gbWt0aW1lKCZ0aW1lKTsKLSAgICAgICAgLyogUmV0dXJuIHZhbHVlIG9mIC0xIGRvZXMgbm90IG5lY2Vzc2FyaWx5IG1lYW4gYW4gZXJyb3IsIGJ1dCB0bV93ZGF5Ci0gICAgICAgICAqIGNhbm5vdCByZW1haW4gc2V0IHRvIC0xIGlmIG1rdGltZSBzdWNjZWVkZWQuICovCi0gICAgICAgIGlmICh0aW1lc3RhbXAgPT0gKHRpbWVfdCkoLTEpICYmIHRpbWUudG1fd2RheSA9PSAtMSkgeworICAgICAgICBpZiAodGltZXN0YW1wID09ICh0aW1lX3QpKC0xKQorI2lmbmRlZiBfQUlYCisgICAgICAgICAgICAvKiBSZXR1cm4gdmFsdWUgb2YgLTEgZG9lcyBub3QgbmVjZXNzYXJpbHkgbWVhbiBhbiBlcnJvciwKKyAgICAgICAgICAgICAqIGJ1dCB0bV93ZGF5IGNhbm5vdCByZW1haW4gc2V0IHRvIC0xIGlmIG1rdGltZSBzdWNjZWVkZWQuICovCisgICAgICAgICAgICAmJiB0aW1lLnRtX3dkYXkgPT0gLTEKKyNlbHNlCisgICAgICAgICAgICAvKiBvbiBBSVgsIHRtX3dkYXkgaXMgYWx3YXlzIHNldHMsIGV2ZW4gb24gZXJyb3IgKi8KKyNlbmRpZgorICAgICAgICAgICkKKyAgICAgICAgewogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRpbWVzdGFtcCBvdXQgb2YgcmFuZ2UiKTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtNDk4OSw5ICs1MDk5LDcgQEAKIAogICAgIC8qIENsYXNzIG1ldGhvZHM6ICovCiAKLSAgICB7Im5vdyIsICAgICAgICAgKFB5Q0Z1bmN0aW9uKWRhdGV0aW1lX25vdywKLSAgICAgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUyB8IE1FVEhfQ0xBU1MsCi0gICAgIFB5RG9jX1NUUigiW3R6XSAtPiBuZXcgZGF0ZXRpbWUgd2l0aCB0eidzIGxvY2FsIGRheSBhbmQgdGltZS4iKX0sCisgICAgREFURVRJTUVfREFURVRJTUVfTk9XX01FVEhPRERFRgogCiAgICAgeyJ1dGNub3ciLCAgICAgICAgIChQeUNGdW5jdGlvbilkYXRldGltZV91dGNub3csCiAgICAgIE1FVEhfTk9BUkdTIHwgTUVUSF9DTEFTUywKQEAgLTUyOTksOCArNTQwNyw4IEBACiAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIC8qIG1vZHVsZSBpbml0aWFsaXphdGlvbiAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJNSU5ZRUFSIiwgTUlOWUVBUik7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1BWFlFQVIiLCBNQVhZRUFSKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBNSU5ZRUFSKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBNQVhZRUFSKTsKIAogICAgIFB5X0lOQ1JFRigmUHlEYXRlVGltZV9EYXRlVHlwZSk7CiAgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJkYXRlIiwgKFB5T2JqZWN0ICopICZQeURhdGVUaW1lX0RhdGVUeXBlKTsKQEAgLTUzNDQsMTIgKzU0NTIsMTIgQEAKICAgICBhc3NlcnQoREkxMDBZID09IDI1ICogREk0WSAtIDEpOwogICAgIGFzc2VydChESTEwMFkgPT0gZGF5c19iZWZvcmVfeWVhcigxMDArMSkpOwogCi0gICAgdXNfcGVyX3VzID0gUHlMb25nX0Zyb21Mb25nKDEpOworICAgIG9uZSA9IFB5TG9uZ19Gcm9tTG9uZygxKTsKICAgICB1c19wZXJfbXMgPSBQeUxvbmdfRnJvbUxvbmcoMTAwMCk7CiAgICAgdXNfcGVyX3NlY29uZCA9IFB5TG9uZ19Gcm9tTG9uZygxMDAwMDAwKTsKICAgICB1c19wZXJfbWludXRlID0gUHlMb25nX0Zyb21Mb25nKDYwMDAwMDAwKTsKICAgICBzZWNvbmRzX3Blcl9kYXkgPSBQeUxvbmdfRnJvbUxvbmcoMjQgKiAzNjAwKTsKLSAgICBpZiAodXNfcGVyX3VzID09IE5VTEwgfHwgdXNfcGVyX21zID09IE5VTEwgfHwgdXNfcGVyX3NlY29uZCA9PSBOVUxMIHx8CisgICAgaWYgKG9uZSA9PSBOVUxMIHx8IHVzX3Blcl9tcyA9PSBOVUxMIHx8IHVzX3Blcl9zZWNvbmQgPT0gTlVMTCB8fAogICAgICAgICB1c19wZXJfbWludXRlID09IE5VTEwgfHwgc2Vjb25kc19wZXJfZGF5ID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19kYm1tb2R1bGUuYyBiL01vZHVsZXMvX2RibW1vZHVsZS5jCmluZGV4IDgzYzA1MWMuLjkzZWE0MTYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2RibW1vZHVsZS5jCisrKyBiL01vZHVsZXMvX2RibW1vZHVsZS5jCkBAIC0xNCwxMSArMTQsNyBAQAogICovCiAjaWYgZGVmaW5lZChIQVZFX05EQk1fSCkKICNpbmNsdWRlIDxuZGJtLmg+Ci0jaWYgZGVmaW5lZChQWU9TX09TMikgJiYgIWRlZmluZWQoUFlDQ19HQ0MpCi1zdGF0aWMgY2hhciAqd2hpY2hfZGJtID0gIm5kYm0iOwotI2Vsc2UKIHN0YXRpYyBjaGFyICp3aGljaF9kYm0gPSAiR05VIGdkYm0iOyAgLyogRU1YIHBvcnQgb2YgR0RCTSAqLwotI2VuZGlmCiAjZWxpZiBkZWZpbmVkKEhBVkVfR0RCTV9OREJNX0gpCiAjaW5jbHVkZSA8Z2RibS9uZGJtLmg+CiBzdGF0aWMgY2hhciAqd2hpY2hfZGJtID0gIkdOVSBnZGJtIjsKQEAgLTMyLDYgKzI4LDEyIEBACiAjZXJyb3IgIk5vIG5kYm0uaCBhdmFpbGFibGUhIgogI2VuZGlmCiAKKy8qW2NsaW5pYyBpbnB1dF0KK21vZHVsZSBkYm0KK2NsYXNzIGRibS5kYm0gImRibW9iamVjdCAqIiAiJkRibXR5cGUiCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZGEzOWEzZWU1ZTZiNGIwZCBpbnB1dD05MjQ1MDU2NDY4NGE2OWEzXSovCisKIHR5cGVkZWYgc3RydWN0IHsKICAgICBQeU9iamVjdF9IRUFECiAgICAgaW50IGRpX3NpemU7ICAgICAgICAvKiAtMSBtZWFucyByZWNvbXB1dGUgKi8KQEAgLTQ3LDggKzQ5LDE3IEBACiAKIHN0YXRpYyBQeU9iamVjdCAqRGJtRXJyb3I7CiAKKy8qW3B5dGhvbiBpbnB1dF0KK2NsYXNzIGRibW9iamVjdF9jb252ZXJ0ZXIoc2VsZl9jb252ZXJ0ZXIpOgorICAgIHR5cGUgPSAiZGJtb2JqZWN0ICoiCisgICAgZGVmIHByZV9yZW5kZXIoc2VsZik6CisgICAgICAgIHN1cGVyKCkucHJlX3JlbmRlcigpCisgICAgICAgIHNlbGYubmFtZSA9ICdkcCcKK1tweXRob24gc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKy8qW3B5dGhvbiBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kYTM5YTNlZTVlNmI0YjBkIGlucHV0PTZhZDUzNjM1NzkxMzg3OWFdKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKLW5ld2RibW9iamVjdChjaGFyICpmaWxlLCBpbnQgZmxhZ3MsIGludCBtb2RlKQorbmV3ZGJtb2JqZWN0KGNvbnN0IGNoYXIgKmZpbGUsIGludCBmbGFncywgaW50IG1vZGUpCiB7CiAgICAgZGJtb2JqZWN0ICpkcDsKIApAQCAtNTYsNyArNjcsOCBAQAogICAgIGlmIChkcCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBkcC0+ZGlfc2l6ZSA9IC0xOwotICAgIGlmICggKGRwLT5kaV9kYm0gPSBkYm1fb3BlbihmaWxlLCBmbGFncywgbW9kZSkpID09IDAgKSB7CisgICAgLyogU2VlIGlzc3VlICMxOTI5NiAqLworICAgIGlmICggKGRwLT5kaV9kYm0gPSBkYm1fb3BlbigoY2hhciAqKWZpbGUsIGZsYWdzLCBtb2RlKSkgPT0gMCApIHsKICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKERibUVycm9yKTsKICAgICAgICAgUHlfREVDUkVGKGRwKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC02Nyw3ICs3OSw3IEBACiAvKiBNZXRob2RzICovCiAKIHN0YXRpYyB2b2lkCi1kYm1fZGVhbGxvYyhyZWdpc3RlciBkYm1vYmplY3QgKmRwKQorZGJtX2RlYWxsb2MoZGJtb2JqZWN0ICpkcCkKIHsKICAgICBpZiAoIGRwLT5kaV9kYm0gKQogICAgICAgICBkYm1fY2xvc2UoZHAtPmRpX2RibSk7CkBAIC05NSw3ICsxMDcsNyBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotZGJtX3N1YnNjcmlwdChkYm1vYmplY3QgKmRwLCByZWdpc3RlciBQeU9iamVjdCAqa2V5KQorZGJtX3N1YnNjcmlwdChkYm1vYmplY3QgKmRwLCBQeU9iamVjdCAqa2V5KQogewogICAgIGRhdHVtIGRyZWMsIGtyZWM7CiAgICAgUHlfc3NpemVfdCB0bXBfc2l6ZTsKQEAgLTE3MCw3ICsxODIsNyBAQAogfTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLWRibV9fY2xvc2UocmVnaXN0ZXIgZGJtb2JqZWN0ICpkcCwgUHlPYmplY3QgKnVudXNlZCkKK2RibV9fY2xvc2UoZGJtb2JqZWN0ICpkcCwgUHlPYmplY3QgKnVudXNlZCkKIHsKICAgICBpZiAoZHAtPmRpX2RibSkKICAgICAgICAgZGJtX2Nsb3NlKGRwLT5kaV9kYm0pOwpAQCAtMTgwLDkgKzE5Miw5IEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1kYm1fa2V5cyhyZWdpc3RlciBkYm1vYmplY3QgKmRwLCBQeU9iamVjdCAqdW51c2VkKQorZGJtX2tleXMoZGJtb2JqZWN0ICpkcCwgUHlPYmplY3QgKnVudXNlZCkKIHsKLSAgICByZWdpc3RlciBQeU9iamVjdCAqdiwgKml0ZW07CisgICAgUHlPYmplY3QgKnYsICppdGVtOwogICAgIGRhdHVtIGtleTsKICAgICBpbnQgZXJyOwogCkBAIC0yNTIsMzEgKzI2NCw2OCBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzcV9pbnBsYWNlX3JlcGVhdCAqLwogfTsKIAotc3RhdGljIFB5T2JqZWN0ICoKLWRibV9nZXQocmVnaXN0ZXIgZGJtb2JqZWN0ICpkcCwgUHlPYmplY3QgKmFyZ3MpCi17Ci0gICAgZGF0dW0ga2V5LCB2YWw7Ci0gICAgUHlPYmplY3QgKmRlZnZhbHVlID0gUHlfTm9uZTsKLSAgICBjaGFyICp0bXBfcHRyOwotICAgIFB5X3NzaXplX3QgdG1wX3NpemU7CisvKltjbGluaWMgaW5wdXRdCiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjfE86Z2V0IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJnRtcF9wdHIsICZ0bXBfc2l6ZSwgJmRlZnZhbHVlKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAga2V5LmRwdHIgPSB0bXBfcHRyOwotICAgIGtleS5kc2l6ZSA9IHRtcF9zaXplOwotICAgIGNoZWNrX2RibW9iamVjdF9vcGVuKGRwKTsKLSAgICB2YWwgPSBkYm1fZmV0Y2goZHAtPmRpX2RibSwga2V5KTsKLSAgICBpZiAodmFsLmRwdHIgIT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUodmFsLmRwdHIsIHZhbC5kc2l6ZSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIFB5X0lOQ1JFRihkZWZ2YWx1ZSk7Ci0gICAgICAgIHJldHVybiBkZWZ2YWx1ZTsKLSAgICB9CitkYm0uZGJtLmdldAorCisgICAgc2VsZjogZGJtb2JqZWN0CisKKyAgICBrZXk6IHN0cihsZW5ndGg9VHJ1ZSkKKyAgICBkZWZhdWx0OiBvYmplY3QgPSBOb25lCisgICAgLworCitSZXR1cm4gdGhlIHZhbHVlIGZvciBrZXkgaWYgcHJlc2VudCwgb3RoZXJ3aXNlIGRlZmF1bHQuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK1B5RG9jX1NUUlZBUihkYm1fZGJtX2dldF9fZG9jX18sCisiZ2V0KCRzZWxmLCBrZXksIGRlZmF1bHQ9Tm9uZSwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiB0aGUgdmFsdWUgZm9yIGtleSBpZiBwcmVzZW50LCBvdGhlcndpc2UgZGVmYXVsdC4iKTsKKworI2RlZmluZSBEQk1fREJNX0dFVF9NRVRIT0RERUYgICAgXAorICAgIHsiZ2V0IiwgKFB5Q0Z1bmN0aW9uKWRibV9kYm1fZ2V0LCBNRVRIX1ZBUkFSR1MsIGRibV9kYm1fZ2V0X19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitkYm1fZGJtX2dldF9pbXBsKGRibW9iamVjdCAqZHAsIGNvbnN0IGNoYXIgKmtleSwgUHlfc3NpemVfY2xlYW5fdCBrZXlfbGVuZ3RoLCBQeU9iamVjdCAqZGVmYXVsdF92YWx1ZSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitkYm1fZGJtX2dldChkYm1vYmplY3QgKmRwLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBjb25zdCBjaGFyICprZXk7CisgICAgUHlfc3NpemVfY2xlYW5fdCBrZXlfbGVuZ3RoOworICAgIFB5T2JqZWN0ICpkZWZhdWx0X3ZhbHVlID0gUHlfTm9uZTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAicyN8TzpnZXQiLAorICAgICAgICAma2V5LCAma2V5X2xlbmd0aCwgJmRlZmF1bHRfdmFsdWUpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gZGJtX2RibV9nZXRfaW1wbChkcCwga2V5LCBrZXlfbGVuZ3RoLCBkZWZhdWx0X3ZhbHVlKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotZGJtX3NldGRlZmF1bHQocmVnaXN0ZXIgZGJtb2JqZWN0ICpkcCwgUHlPYmplY3QgKmFyZ3MpCitkYm1fZGJtX2dldF9pbXBsKGRibW9iamVjdCAqZHAsIGNvbnN0IGNoYXIgKmtleSwgUHlfc3NpemVfY2xlYW5fdCBrZXlfbGVuZ3RoLCBQeU9iamVjdCAqZGVmYXVsdF92YWx1ZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD00NTJlYTExMzk0ZTdlOTJkIGlucHV0PWFlY2Y1ZWZkMmYyYjFhM2JdKi8KK3sKKyAgICBkYXR1bSBkYm1fa2V5LCB2YWw7CisKKyAgICBkYm1fa2V5LmRwdHIgPSAoY2hhciAqKWtleTsKKyAgICBkYm1fa2V5LmRzaXplID0ga2V5X2xlbmd0aDsKKyAgICBjaGVja19kYm1vYmplY3Rfb3BlbihkcCk7CisgICAgdmFsID0gZGJtX2ZldGNoKGRwLT5kaV9kYm0sIGRibV9rZXkpOworICAgIGlmICh2YWwuZHB0ciAhPSBOVUxMKQorICAgICAgICByZXR1cm4gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZSh2YWwuZHB0ciwgdmFsLmRzaXplKTsKKworICAgIFB5X0lOQ1JFRihkZWZhdWx0X3ZhbHVlKTsKKyAgICByZXR1cm4gZGVmYXVsdF92YWx1ZTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK2RibV9zZXRkZWZhdWx0KGRibW9iamVjdCAqZHAsIFB5T2JqZWN0ICphcmdzKQogewogICAgIGRhdHVtIGtleSwgdmFsOwogICAgIFB5T2JqZWN0ICpkZWZ2YWx1ZSA9IE5VTEw7CkBAIC0zMTcsMTggKzM2NiwzMyBAQAogICAgIHJldHVybiBkZWZ2YWx1ZTsKIH0KIAorc3RhdGljIFB5T2JqZWN0ICoKK2RibV9fZW50ZXJfXyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlfSU5DUkVGKHNlbGYpOworICAgIHJldHVybiBzZWxmOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorZGJtX19leGl0X18oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIF9QeV9JREVOVElGSUVSKGNsb3NlKTsKKyAgICByZXR1cm4gX1B5T2JqZWN0X0NhbGxNZXRob2RJZChzZWxmLCAmUHlJZF9jbG9zZSwgTlVMTCk7Cit9CisKKwogc3RhdGljIFB5TWV0aG9kRGVmIGRibV9tZXRob2RzW10gPSB7CiAgICAgeyJjbG9zZSIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pZGJtX19jbG9zZSwgICAgICAgIE1FVEhfTk9BUkdTLAogICAgICAiY2xvc2UoKVxuQ2xvc2UgdGhlIGRhdGFiYXNlLiJ9LAogICAgIHsia2V5cyIsICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKWRibV9rZXlzLCAgICAgICAgICBNRVRIX05PQVJHUywKICAgICAgImtleXMoKSAtPiBsaXN0XG5SZXR1cm4gYSBsaXN0IG9mIGFsbCBrZXlzIGluIHRoZSBkYXRhYmFzZS4ifSwKLSAgICB7ImdldCIsICAgICAgICAgICAgIChQeUNGdW5jdGlvbilkYm1fZ2V0LCAgICAgICAgICAgTUVUSF9WQVJBUkdTLAotICAgICAiZ2V0KGtleVssIGRlZmF1bHRdKSAtPiB2YWx1ZVxuIgotICAgICAiUmV0dXJuIHRoZSB2YWx1ZSBmb3Iga2V5IGlmIHByZXNlbnQsIG90aGVyd2lzZSBkZWZhdWx0LiJ9LAorICAgIERCTV9EQk1fR0VUX01FVEhPRERFRgogICAgIHsic2V0ZGVmYXVsdCIsICAgICAgKFB5Q0Z1bmN0aW9uKWRibV9zZXRkZWZhdWx0LCAgICBNRVRIX1ZBUkFSR1MsCiAgICAgICJzZXRkZWZhdWx0KGtleVssIGRlZmF1bHRdKSAtPiB2YWx1ZVxuIgogICAgICAiUmV0dXJuIHRoZSB2YWx1ZSBmb3Iga2V5IGlmIHByZXNlbnQsIG90aGVyd2lzZSBkZWZhdWx0LiAgSWYga2V5XG4iCiAgICAgICJpcyBub3QgaW4gdGhlIGRhdGFiYXNlLCBpdCBpcyBpbnNlcnRlZCB3aXRoIGRlZmF1bHQgYXMgdGhlIHZhbHVlLiJ9LAorICAgIHsiX19lbnRlcl9fIiwgZGJtX19lbnRlcl9fLCBNRVRIX05PQVJHUywgTlVMTH0sCisgICAgeyJfX2V4aXRfXyIsICBkYm1fX2V4aXRfXywgTUVUSF9WQVJBUkdTLCBOVUxMfSwKICAgICB7TlVMTCwgICAgICAgICAgICAgIE5VTEx9ICAgICAgICAgICAvKiBzZW50aW5lbCAqLwogfTsKIApAQCAtMzY1LDE2ICs0MjksNzAgQEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIFB5T2JqZWN0ICoKLWRibW9wZW4oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQotewotICAgIGNoYXIgKm5hbWU7Ci0gICAgY2hhciAqZmxhZ3MgPSAiciI7Ci0gICAgaW50IGlmbGFnczsKLSAgICBpbnQgbW9kZSA9IDA2NjY7CisvKltjbGluaWMgaW5wdXRdCiAKLSAgICBpZiAoICFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzfHNpOm9wZW4iLCAmbmFtZSwgJmZsYWdzLCAmbW9kZSkgKQotICAgICAgICByZXR1cm4gTlVMTDsKK2RibS5vcGVuIGFzIGRibW9wZW4KKworICAgIGZpbGVuYW1lOiBzdHIKKyAgICAgICAgVGhlIGZpbGVuYW1lIHRvIG9wZW4uCisKKyAgICBmbGFnczogc3RyPSJyIgorICAgICAgICBIb3cgdG8gb3BlbiB0aGUgZmlsZS4gICJyIiBmb3IgcmVhZGluZywgInciIGZvciB3cml0aW5nLCBldGMuCisKKyAgICBtb2RlOiBpbnQocHlfZGVmYXVsdD0iMG82NjYiKSA9IDBvNjY2CisgICAgICAgIElmIGNyZWF0aW5nIGEgbmV3IGZpbGUsIHRoZSBtb2RlIGJpdHMgZm9yIHRoZSBuZXcgZmlsZQorICAgICAgICAoZS5nLiBvcy5PX1JEV1IpLgorCisgICAgLworCitSZXR1cm4gYSBkYXRhYmFzZSBvYmplY3QuCisKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworUHlEb2NfU1RSVkFSKGRibW9wZW5fX2RvY19fLAorIm9wZW4oJG1vZHVsZSwgZmlsZW5hbWUsIGZsYWdzPVwnclwnLCBtb2RlPTBvNjY2LCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIGEgZGF0YWJhc2Ugb2JqZWN0LlxuIgorIlxuIgorIiAgZmlsZW5hbWVcbiIKKyIgICAgVGhlIGZpbGVuYW1lIHRvIG9wZW4uXG4iCisiICBmbGFnc1xuIgorIiAgICBIb3cgdG8gb3BlbiB0aGUgZmlsZS4gIFwiclwiIGZvciByZWFkaW5nLCBcIndcIiBmb3Igd3JpdGluZywgZXRjLlxuIgorIiAgbW9kZVxuIgorIiAgICBJZiBjcmVhdGluZyBhIG5ldyBmaWxlLCB0aGUgbW9kZSBiaXRzIGZvciB0aGUgbmV3IGZpbGVcbiIKKyIgICAgKGUuZy4gb3MuT19SRFdSKS4iKTsKKworI2RlZmluZSBEQk1PUEVOX01FVEhPRERFRiAgICBcCisgICAgeyJvcGVuIiwgKFB5Q0Z1bmN0aW9uKWRibW9wZW4sIE1FVEhfVkFSQVJHUywgZGJtb3Blbl9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorZGJtb3Blbl9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBjaGFyICpmbGFncywgaW50IG1vZGUpOworCitzdGF0aWMgUHlPYmplY3QgKgorZGJtb3BlbihQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBjb25zdCBjaGFyICpmaWxlbmFtZTsKKyAgICBjb25zdCBjaGFyICpmbGFncyA9ICJyIjsKKyAgICBpbnQgbW9kZSA9IDQzODsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAic3xzaTpvcGVuIiwKKyAgICAgICAgJmZpbGVuYW1lLCAmZmxhZ3MsICZtb2RlKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IGRibW9wZW5faW1wbChtb2R1bGUsIGZpbGVuYW1lLCBmbGFncywgbW9kZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK2RibW9wZW5faW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqZmxhZ3MsIGludCBtb2RlKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTlhN2I3MjVmOWM0ZGNlYzIgaW5wdXQ9NjQ5OWFiMGZhYjEzMzNhY10qLworeworICAgIGludCBpZmxhZ3M7CisKICAgICBpZiAoIHN0cmNtcChmbGFncywgInIiKSA9PSAwICkKICAgICAgICAgaWZsYWdzID0gT19SRE9OTFk7CiAgICAgZWxzZSBpZiAoIHN0cmNtcChmbGFncywgInciKSA9PSAwICkKQEAgLTM5MCwxMyArNTA4LDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAiYXJnIDIgdG8gb3BlbiBzaG91bGQgYmUgJ3InLCAndycsICdjJywgb3IgJ24nIik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICByZXR1cm4gbmV3ZGJtb2JqZWN0KG5hbWUsIGlmbGFncywgbW9kZSk7CisgICAgcmV0dXJuIG5ld2RibW9iamVjdChmaWxlbmFtZSwgaWZsYWdzLCBtb2RlKTsKIH0KIAogc3RhdGljIFB5TWV0aG9kRGVmIGRibW1vZHVsZV9tZXRob2RzW10gPSB7Ci0gICAgeyAib3BlbiIsIChQeUNGdW5jdGlvbilkYm1vcGVuLCBNRVRIX1ZBUkFSR1MsCi0gICAgICAib3BlbihwYXRoWywgZmxhZ1ssIG1vZGVdXSkgLT4gbWFwcGluZ1xuIgotICAgICAgIlJldHVybiBhIGRhdGFiYXNlIG9iamVjdC4ifSwKKyAgICBEQk1PUEVOX01FVEhPRERFRgogICAgIHsgMCwgMCB9LAogfTsKIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fZGVjaW1hbC9fZGVjaW1hbC5jIGIvTW9kdWxlcy9fZGVjaW1hbC9fZGVjaW1hbC5jCmluZGV4IGVhNTI1M2UuLmYwMDA4ODcgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2RlY2ltYWwvX2RlY2ltYWwuYworKysgYi9Nb2R1bGVzL19kZWNpbWFsL19kZWNpbWFsLmMKQEAgLTM5LDggKzM5LDggQEAKICNpbmNsdWRlICJtZW1vcnkuaCIKIAogCi0jaWYgTVBEX01BSk9SX1ZFUlNJT04gIT0gMgotICAjZXJyb3IgImxpYm1wZGVjIG1ham9yIHZlcnNpb24gMiByZXF1aXJlZCIKKyNpZiAhZGVmaW5lZChNUERfVkVSU0lPTl9IRVgpIHx8IE1QRF9WRVJTSU9OX0hFWCA8IDB4MDIwNDAxMDAKKyAgI2Vycm9yICJsaWJtcGRlYyB2ZXJzaW9uID49IDIuNC4xIHJlcXVpcmVkIgogI2VuZGlmCiAKIApAQCAtMzU0Miw3ICszNTQyLDcgQEAKICAgICB9CiB9CiAKLXN0YXRpYyBQeU9iamVjdCAqRGVjaW1hbFR1cGxlID0gTlVMTDsKK3N0YXRpYyBQeVR5cGVPYmplY3QgKkRlY2ltYWxUdXBsZSA9IE5VTEw7CiAvKiBSZXR1cm4gdGhlIERlY2ltYWxUdXBsZSByZXByZXNlbnRhdGlvbiBvZiBhIFB5RGVjT2JqZWN0LiAqLwogc3RhdGljIFB5T2JqZWN0ICoKIFB5RGVjX0FzVHVwbGUoUHlPYmplY3QgKmRlYywgUHlPYmplY3QgKmR1bW15IFVOVVNFRCkKQEAgLTM2MjUsNyArMzYyNSw3IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICByZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKERlY2ltYWxUdXBsZSwKKyAgICByZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKChQeU9iamVjdCAqKURlY2ltYWxUdXBsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ24sIGNvZWZmLCBleHB0LCBOVUxMKTsKIAogb3V0OgpAQCAtNTU2Miw5ICs1NTYyLDE0IEBACiAKICAgICAvKiBEZWNpbWFsVHVwbGUgKi8KICAgICBBU1NJR05fUFRSKGNvbGxlY3Rpb25zLCBQeUltcG9ydF9JbXBvcnRNb2R1bGUoImNvbGxlY3Rpb25zIikpOwotICAgIEFTU0lHTl9QVFIoRGVjaW1hbFR1cGxlLCBQeU9iamVjdF9DYWxsTWV0aG9kKGNvbGxlY3Rpb25zLAorICAgIEFTU0lHTl9QVFIoRGVjaW1hbFR1cGxlLCAoUHlUeXBlT2JqZWN0ICopUHlPYmplY3RfQ2FsbE1ldGhvZChjb2xsZWN0aW9ucywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lZHR1cGxlIiwgIihzcykiLCAiRGVjaW1hbFR1cGxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzaWduIGRpZ2l0cyBleHBvbmVudCIpKTsKKworICAgIEFTU0lHTl9QVFIob2JqLCBQeVVuaWNvZGVfRnJvbVN0cmluZygiZGVjaW1hbCIpKTsKKyAgICBDSEVDS19JTlQoUHlEaWN0X1NldEl0ZW1TdHJpbmcoRGVjaW1hbFR1cGxlLT50cF9kaWN0LCAiX19tb2R1bGVfXyIsIG9iaikpOworICAgIFB5X0NMRUFSKG9iaik7CisKICAgICAvKiBNdXRhYmxlTWFwcGluZyAqLwogICAgIEFTU0lHTl9QVFIoTXV0YWJsZU1hcHBpbmcsIFB5T2JqZWN0X0dldEF0dHJTdHJpbmcoY29sbGVjdGlvbnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTXV0YWJsZU1hcHBpbmciKSk7CkBAIC01NTkxLDcgKzU1OTYsNyBAQAogICAgIENIRUNLX0lOVChQeU1vZHVsZV9BZGRPYmplY3QobSwgIkNvbnRleHQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFB5T2JqZWN0ICopJlB5RGVjQ29udGV4dF9UeXBlKSk7CiAgICAgUHlfSU5DUkVGKERlY2ltYWxUdXBsZSk7Ci0gICAgQ0hFQ0tfSU5UKFB5TW9kdWxlX0FkZE9iamVjdChtLCAiRGVjaW1hbFR1cGxlIiwgRGVjaW1hbFR1cGxlKSk7CisgICAgQ0hFQ0tfSU5UKFB5TW9kdWxlX0FkZE9iamVjdChtLCAiRGVjaW1hbFR1cGxlIiwgKFB5T2JqZWN0ICopRGVjaW1hbFR1cGxlKSk7CiAKIAogICAgIC8qIENyZWF0ZSB0b3AgbGV2ZWwgZXhjZXB0aW9uICovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19kZWNpbWFsL2xpYm1wZGVjL2lvLmMgYi9Nb2R1bGVzL19kZWNpbWFsL2xpYm1wZGVjL2lvLmMKaW5kZXggYjY3MzI0ZC4uYTQ1YTQyOSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fZGVjaW1hbC9saWJtcGRlYy9pby5jCisrKyBiL01vZHVsZXMvX2RlY2ltYWwvbGlibXBkZWMvaW8uYwpAQCAtNDQ2LDcgKzQ0Niw3IEBACiAKICAgICBpZiAobXBkX2lzc3BlY2lhbChkZWMpKSB7CiAKLSAgICAgICAgbWVtID0gc2l6ZW9mICItSW5maW5pdHkiOworICAgICAgICBtZW0gPSBzaXplb2YgIi1JbmZpbml0eSUiOwogICAgICAgICBpZiAobXBkX2lzbmFuKGRlYykgJiYgZGVjLT5sZW4gPiAwKSB7CiAgICAgICAgICAgICAvKiBkaWFnbm9zdGljIGNvZGUgKi8KICAgICAgICAgICAgIG1lbSArPSBkZWMtPmRpZ2l0czsKQEAgLTYwOSwxMCArNjA5LDEwIEBACiAgICAgICAgICAgICAqY3ArKyA9IChmbGFncyZNUERfRk1UX1VQUEVSKSA/ICdFJyA6ICdlJzsKICAgICAgICAgICAgIGNwID0gZXhwX3RvX3N0cmluZyhjcCwgbGRpZ2l0cy1kcGxhY2UpOwogICAgICAgICB9CisgICAgfQogCi0gICAgICAgIGlmIChmbGFncyZNUERfRk1UX1BFUkNFTlQpIHsKLSAgICAgICAgICAgICpjcCsrID0gJyUnOwotICAgICAgICB9CisgICAgaWYgKGZsYWdzJk1QRF9GTVRfUEVSQ0VOVCkgeworICAgICAgICAqY3ArKyA9ICclJzsKICAgICB9CiAKICAgICBhc3NlcnQoY3AgPCBkZWNzdHJpbmcrbWVtKTsKQEAgLTEyNjAsNiArMTI2MCw5IEBACiAgICAgICAgICAgICBzdGFja3NwZWMuYWxpZ24gPSAnPic7CiAgICAgICAgICAgICBzcGVjID0gJnN0YWNrc3BlYzsKICAgICAgICAgfQorICAgICAgICBpZiAodHlwZSA9PSAnJScpIHsKKyAgICAgICAgICAgIGZsYWdzIHw9IE1QRF9GTVRfUEVSQ0VOVDsKKyAgICAgICAgfQogICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgdWludDMyX3Qgd29ya3N0YXR1cyA9IDA7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19kZWNpbWFsL2xpYm1wZGVjL21wZGVjaW1hbC5oIGIvTW9kdWxlcy9fZGVjaW1hbC9saWJtcGRlYy9tcGRlY2ltYWwuaAppbmRleCBiNDMyMzFjLi41Y2E3NDEzIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19kZWNpbWFsL2xpYm1wZGVjL21wZGVjaW1hbC5oCisrKyBiL01vZHVsZXMvX2RlY2ltYWwvbGlibXBkZWMvbXBkZWNpbWFsLmgKQEAgLTEwOCw5ICsxMDgsMTMgQEAKIAogI2RlZmluZSBNUERfTUFKT1JfVkVSU0lPTiAyCiAjZGVmaW5lIE1QRF9NSU5PUl9WRVJTSU9OIDQKLSNkZWZpbmUgTVBEX01JQ1JPX1ZFUlNJT04gMAorI2RlZmluZSBNUERfTUlDUk9fVkVSU0lPTiAxCiAKLSNkZWZpbmUgTVBEX1ZFUlNJT04gIjIuNC4wIgorI2RlZmluZSBNUERfVkVSU0lPTiAiMi40LjEiCisKKyNkZWZpbmUgTVBEX1ZFUlNJT05fSEVYICgoTVBEX01BSk9SX1ZFUlNJT04gPDwgMjQpIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgIChNUERfTUlOT1JfVkVSU0lPTiA8PCAxNikgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgKE1QRF9NSUNST19WRVJTSU9OIDw8ICA4KSkKIAogY29uc3QgY2hhciAqbXBkX3ZlcnNpb24odm9pZCk7CiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2RlY2ltYWwvdGVzdHMvZGVjY2hlY2sucHkgYi9Nb2R1bGVzL19kZWNpbWFsL3Rlc3RzL2RlY2NoZWNrLnB5CmluZGV4IGM0YzVhNDQuLjI3MTM3YjIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2RlY2ltYWwvdGVzdHMvZGVjY2hlY2sucHkKKysrIGIvTW9kdWxlcy9fZGVjaW1hbC90ZXN0cy9kZWNjaGVjay5weQpAQCAtMTI2LDcgKzEyNiw3IEBACiAKICMgRnVuY3Rpb25zIHRoYXQgcmVxdWlyZSBhIHJlc3RyaWN0ZWQgZXhwb25lbnQgcmFuZ2UgZm9yIHJlYXNvbmFibGUgcnVudGltZXMuCiBVbmFyeVJlc3RyaWN0ZWQgPSBbCi0gICdfX2NlaWxfXycsICdfX2Zsb29yX18nLCAnX19pbnRfXycsICdfX2xvbmdfXycsICdfX3RydW5jX18nLAorICAnX19jZWlsX18nLCAnX19mbG9vcl9fJywgJ19faW50X18nLCAnX190cnVuY19fJywKICAgJ3RvX2ludGVncmFsJywgJ3RvX2ludGVncmFsX3ZhbHVlJwogXQogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19kZWNpbWFsL3Rlc3RzL3J1bmFsbC5iYXQgYi9Nb2R1bGVzL19kZWNpbWFsL3Rlc3RzL3J1bmFsbC5iYXQKaW5kZXggNWJjODcyYS4uNTY4ZjkyZiAxMDA3NTUKLS0tIGEvTW9kdWxlcy9fZGVjaW1hbC90ZXN0cy9ydW5hbGwuYmF0CisrKyBiL01vZHVsZXMvX2RlY2ltYWwvdGVzdHMvcnVuYWxsLmJhdApAQCAtMSwxMTEgKzEsMTExIEBACi1ARUNITyBPRkYKLQotcmVtIFRlc3QgYWxsIG1hY2hpbmUgY29uZmlndXJhdGlvbnMsIHB5ZGVidWcsIHJlZmxlYWtzLCByZWxlYXNlIGJ1aWxkLgotCi1jZCAuLlwuLlwuLlwKLQotCi1lY2hvLgotZWNobyAjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLWVjaG8gIyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdWlsZGluZyBQeXRob24KLWVjaG8gIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1lY2hvLgotCi1jYWxsICIlVlMxMDBDT01OVE9PTFMlXC4uXC4uXFZDXHZjdmFyc2FsbC5iYXQiIHg2NAotbXNidWlsZCAvbm9jb25zb2xlbG9nZ2VyIC90YXJnZXQ6Y2xlYW4gUENidWlsZFxwY2J1aWxkLnNsbiAvcDpDb25maWd1cmF0aW9uPVJlbGVhc2UgL3A6UGxhdGZvcm1UYXJnZXQ9eDY0Ci1tc2J1aWxkIC9ub2NvbnNvbGVsb2dnZXIgL3RhcmdldDpjbGVhbiBQQ2J1aWxkXHBjYnVpbGQuc2xuIC9wOkNvbmZpZ3VyYXRpb249RGVidWcgL3A6UGxhdGZvcm1UYXJnZXQ9eDY0Ci1tc2J1aWxkIC9ub2NvbnNvbGVsb2dnZXIgUENidWlsZFxwY2J1aWxkLnNsbiAvcDpDb25maWd1cmF0aW9uPVJlbGVhc2UgL3A6UGxhdGZvcm09eDY0Ci1tc2J1aWxkIC9ub2NvbnNvbGVsb2dnZXIgUENidWlsZFxwY2J1aWxkLnNsbiAvcDpDb25maWd1cmF0aW9uPURlYnVnIC9wOlBsYXRmb3JtPXg2NAotCi1jYWxsICIlVlMxMDBDT01OVE9PTFMlXC4uXC4uXFZDXHZjdmFyc2FsbC5iYXQiIHg4NgotbXNidWlsZCAvbm9jb25zb2xlbG9nZ2VyIFBDYnVpbGRccGNidWlsZC5zbG4gL3A6Q29uZmlndXJhdGlvbj1SZWxlYXNlIC9wOlBsYXRmb3JtPVdpbjMyCi1tc2J1aWxkIC9ub2NvbnNvbGVsb2dnZXIgUENidWlsZFxwY2J1aWxkLnNsbiAvcDpDb25maWd1cmF0aW9uPURlYnVnIC9wOlBsYXRmb3JtPVdpbjMyCi1lY2hvLgotZWNoby4KLQotZWNoby4KLWVjaG8gIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1lY2hvICMgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfZGVjaW1hbDogcGxhdGZvcm09eDY0Ci1lY2hvICMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotZWNoby4KLQotY2QgUENidWlsZFxhbWQ2NAotCi1lY2hvICMgPT09PT09PT09PT09PT09PT09PT0gcmVmbGVhayB0ZXN0cyA9PT09PT09PT09PT09PT09PT09PT09PQotZWNoby4KLXB5dGhvbl9kLmV4ZSAtbSB0ZXN0IC11YWxsIC1SIDI6MiB0ZXN0X2RlY2ltYWwKLWVjaG8uCi1lY2hvLgotCi1lY2hvICMgPT09PT09PT09PT09PT09PT09PT0gcmVndWxhciB0ZXN0cyA9PT09PT09PT09PT09PT09PT09PT09PQotZWNoby4KLXB5dGhvbi5leGUgLW0gdGVzdCAtdWFsbCB0ZXN0X2RlY2ltYWwKLWVjaG8uCi1lY2hvLgotCi1jZCAuLgotCi1lY2hvLgotZWNobyAjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLWVjaG8gIyAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9kZWNpbWFsOiBwbGF0Zm9ybT14ODYKLWVjaG8gIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1lY2hvLgotCi1lY2hvICMgPT09PT09PT09PT09PT09PT09PT0gcmVmbGVhayB0ZXN0cyA9PT09PT09PT09PT09PT09PT09PT09PQotZWNoby4KLXB5dGhvbl9kLmV4ZSAtbSB0ZXN0IC11YWxsIC1SIDI6MiB0ZXN0X2RlY2ltYWwKLWVjaG8uCi1lY2hvLgotCi1lY2hvICMgPT09PT09PT09PT09PT09PT09PT0gcmVndWxhciB0ZXN0cyA9PT09PT09PT09PT09PT09PT09PT09PQotZWNoby4KLXB5dGhvbi5leGUgLW0gdGVzdCAtdWFsbCB0ZXN0X2RlY2ltYWwKLWVjaG8uCi1lY2hvLgotCi1jZCBhbWQ2NAotCi1lY2hvLgotZWNobyAjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLWVjaG8gIyAgICAgICAgICAgICAgICAgICAgICAgICBkZWNjaGVjazogcGxhdGZvcm09eDY0Ci1lY2hvICMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotZWNoby4KLQotZWNobyAjID09PT09PT09PT09PT09PT09PT09IGRlYnVnIGJ1aWxkID09PT09PT09PT09PT09PT09PT09PT09Ci1lY2hvLgotcHl0aG9uX2QuZXhlIC4uXC4uXE1vZHVsZXNcX2RlY2ltYWxcdGVzdHNcZGVjY2hlY2sucHkKLWVjaG8uCi1lY2hvLgotCi1lY2hvICMgPT09PT09PT09PT09PT09PT09PSByZWxlYXNlIGJ1aWxkID09PT09PT09PT09PT09PT09PT09PT0KLWVjaG8uCi1weXRob24uZXhlIC4uXC4uXE1vZHVsZXNcX2RlY2ltYWxcdGVzdHNcZGVjY2hlY2sucHkKLWVjaG8uCi1lY2hvLgotCi1jZCAuLgotCi1lY2hvLgotZWNobyAjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLWVjaG8gIyAgICAgICAgICAgICAgICAgICAgICAgICBkZWNjaGVjazogcGxhdGZvcm09eDg2Ci1lY2hvICMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotZWNoby4KLWVjaG8uCi0KLWVjaG8gIyA9PT09PT09PT09PT09PT09PT09PSBkZWJ1ZyBidWlsZCA9PT09PT09PT09PT09PT09PT09PT09PQotZWNoby4KLXB5dGhvbl9kLmV4ZSAuLlxNb2R1bGVzXF9kZWNpbWFsXHRlc3RzXGRlY2NoZWNrLnB5Ci1lY2hvLgotZWNoby4KLQotZWNobyAjID09PT09PT09PT09PT09PT09PT0gcmVsZWFzZSBidWlsZCA9PT09PT09PT09PT09PT09PT09PT09Ci1lY2hvLgotcHl0aG9uLmV4ZSAuLlxNb2R1bGVzXF9kZWNpbWFsXHRlc3RzXGRlY2NoZWNrLnB5Ci1lY2hvLgotZWNoby4KLQotCi1jZCAuLlxNb2R1bGVzXF9kZWNpbWFsXHRlc3RzCi0KLQotCitARUNITyBPRkYNCisNCityZW0gVGVzdCBhbGwgbWFjaGluZSBjb25maWd1cmF0aW9ucywgcHlkZWJ1ZywgcmVmbGVha3MsIHJlbGVhc2UgYnVpbGQuDQorDQorY2QgLi5cLi5cLi5cDQorDQorDQorZWNoby4NCitlY2hvICMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KK2VjaG8gIyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdWlsZGluZyBQeXRob24NCitlY2hvICMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KK2VjaG8uDQorDQorY2FsbCAiJVZTMTAwQ09NTlRPT0xTJVwuLlwuLlxWQ1x2Y3ZhcnNhbGwuYmF0IiB4NjQNCittc2J1aWxkIC9ub2NvbnNvbGVsb2dnZXIgL3RhcmdldDpjbGVhbiBQQ2J1aWxkXHBjYnVpbGQuc2xuIC9wOkNvbmZpZ3VyYXRpb249UmVsZWFzZSAvcDpQbGF0Zm9ybVRhcmdldD14NjQNCittc2J1aWxkIC9ub2NvbnNvbGVsb2dnZXIgL3RhcmdldDpjbGVhbiBQQ2J1aWxkXHBjYnVpbGQuc2xuIC9wOkNvbmZpZ3VyYXRpb249RGVidWcgL3A6UGxhdGZvcm1UYXJnZXQ9eDY0DQorbXNidWlsZCAvbm9jb25zb2xlbG9nZ2VyIFBDYnVpbGRccGNidWlsZC5zbG4gL3A6Q29uZmlndXJhdGlvbj1SZWxlYXNlIC9wOlBsYXRmb3JtPXg2NA0KK21zYnVpbGQgL25vY29uc29sZWxvZ2dlciBQQ2J1aWxkXHBjYnVpbGQuc2xuIC9wOkNvbmZpZ3VyYXRpb249RGVidWcgL3A6UGxhdGZvcm09eDY0DQorDQorY2FsbCAiJVZTMTAwQ09NTlRPT0xTJVwuLlwuLlxWQ1x2Y3ZhcnNhbGwuYmF0IiB4ODYNCittc2J1aWxkIC9ub2NvbnNvbGVsb2dnZXIgUENidWlsZFxwY2J1aWxkLnNsbiAvcDpDb25maWd1cmF0aW9uPVJlbGVhc2UgL3A6UGxhdGZvcm09V2luMzINCittc2J1aWxkIC9ub2NvbnNvbGVsb2dnZXIgUENidWlsZFxwY2J1aWxkLnNsbiAvcDpDb25maWd1cmF0aW9uPURlYnVnIC9wOlBsYXRmb3JtPVdpbjMyDQorZWNoby4NCitlY2hvLg0KKw0KK2VjaG8uDQorZWNobyAjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCitlY2hvICMgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfZGVjaW1hbDogcGxhdGZvcm09eDY0DQorZWNobyAjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCitlY2hvLg0KKw0KK2NkIFBDYnVpbGRcYW1kNjQNCisNCitlY2hvICMgPT09PT09PT09PT09PT09PT09PT0gcmVmbGVhayB0ZXN0cyA9PT09PT09PT09PT09PT09PT09PT09PQ0KK2VjaG8uDQorcHl0aG9uX2QuZXhlIC1tIHRlc3QgLXVhbGwgLVIgMjoyIHRlc3RfZGVjaW1hbA0KK2VjaG8uDQorZWNoby4NCisNCitlY2hvICMgPT09PT09PT09PT09PT09PT09PT0gcmVndWxhciB0ZXN0cyA9PT09PT09PT09PT09PT09PT09PT09PQ0KK2VjaG8uDQorcHl0aG9uLmV4ZSAtbSB0ZXN0IC11YWxsIHRlc3RfZGVjaW1hbA0KK2VjaG8uDQorZWNoby4NCisNCitjZCAuLg0KKw0KK2VjaG8uDQorZWNobyAjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCitlY2hvICMgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfZGVjaW1hbDogcGxhdGZvcm09eDg2DQorZWNobyAjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCitlY2hvLg0KKw0KK2VjaG8gIyA9PT09PT09PT09PT09PT09PT09PSByZWZsZWFrIHRlc3RzID09PT09PT09PT09PT09PT09PT09PT09DQorZWNoby4NCitweXRob25fZC5leGUgLW0gdGVzdCAtdWFsbCAtUiAyOjIgdGVzdF9kZWNpbWFsDQorZWNoby4NCitlY2hvLg0KKw0KK2VjaG8gIyA9PT09PT09PT09PT09PT09PT09PSByZWd1bGFyIHRlc3RzID09PT09PT09PT09PT09PT09PT09PT09DQorZWNoby4NCitweXRob24uZXhlIC1tIHRlc3QgLXVhbGwgdGVzdF9kZWNpbWFsDQorZWNoby4NCitlY2hvLg0KKw0KK2NkIGFtZDY0DQorDQorZWNoby4NCitlY2hvICMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KK2VjaG8gIyAgICAgICAgICAgICAgICAgICAgICAgICBkZWNjaGVjazogcGxhdGZvcm09eDY0DQorZWNobyAjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCitlY2hvLg0KKw0KK2VjaG8gIyA9PT09PT09PT09PT09PT09PT09PSBkZWJ1ZyBidWlsZCA9PT09PT09PT09PT09PT09PT09PT09PQ0KK2VjaG8uDQorcHl0aG9uX2QuZXhlIC4uXC4uXE1vZHVsZXNcX2RlY2ltYWxcdGVzdHNcZGVjY2hlY2sucHkNCitlY2hvLg0KK2VjaG8uDQorDQorZWNobyAjID09PT09PT09PT09PT09PT09PT0gcmVsZWFzZSBidWlsZCA9PT09PT09PT09PT09PT09PT09PT09DQorZWNoby4NCitweXRob24uZXhlIC4uXC4uXE1vZHVsZXNcX2RlY2ltYWxcdGVzdHNcZGVjY2hlY2sucHkNCitlY2hvLg0KK2VjaG8uDQorDQorY2QgLi4NCisNCitlY2hvLg0KK2VjaG8gIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorZWNobyAjICAgICAgICAgICAgICAgICAgICAgICAgIGRlY2NoZWNrOiBwbGF0Zm9ybT14ODYNCitlY2hvICMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KK2VjaG8uDQorZWNoby4NCisNCitlY2hvICMgPT09PT09PT09PT09PT09PT09PT0gZGVidWcgYnVpbGQgPT09PT09PT09PT09PT09PT09PT09PT0NCitlY2hvLg0KK3B5dGhvbl9kLmV4ZSAuLlxNb2R1bGVzXF9kZWNpbWFsXHRlc3RzXGRlY2NoZWNrLnB5DQorZWNoby4NCitlY2hvLg0KKw0KK2VjaG8gIyA9PT09PT09PT09PT09PT09PT09IHJlbGVhc2UgYnVpbGQgPT09PT09PT09PT09PT09PT09PT09PQ0KK2VjaG8uDQorcHl0aG9uLmV4ZSAuLlxNb2R1bGVzXF9kZWNpbWFsXHRlc3RzXGRlY2NoZWNrLnB5DQorZWNoby4NCitlY2hvLg0KKw0KKw0KK2NkIC4uXE1vZHVsZXNcX2RlY2ltYWxcdGVzdHMNCisNCisNCisNCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19lbGVtZW50dHJlZS5jIGIvTW9kdWxlcy9fZWxlbWVudHRyZWUuYwppbmRleCBmNDU4OTNmLi5jZjgxOWU4IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19lbGVtZW50dHJlZS5jCisrKyBiL01vZHVsZXMvX2VsZW1lbnR0cmVlLmMKQEAgLTEsNjMgKzEsMjIgQEAKLS8qCi0gKiBFbGVtZW50VHJlZQotICogJElkOiBfZWxlbWVudHRyZWUuYyAzNDczIDIwMDktMDEtMTEgMjI6NTM6NTVaIGZyZWRyaWsgJAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogTGljZW5zZWQgdG8gUFNGIHVuZGVyIGEgQ29udHJpYnV0b3IgQWdyZWVtZW50LgorICogU2VlIGh0dHA6Ly93d3cucHl0aG9uLm9yZy9wc2YvbGljZW5zZSBmb3IgbGljZW5zaW5nIGRldGFpbHMuCiAgKgotICogZWxlbWVudHRyZWUgYWNjZWxlcmF0b3IKLSAqCi0gKiBIaXN0b3J5OgotICogMTk5OS0wNi0yMCBmbCAgY3JlYXRlZCAoYXMgcGFydCBvZiBzZ21sb3ApCi0gKiAyMDAxLTA1LTI5IGZsICBlZmZkb20gZWRpdGlvbgotICogMjAwMy0wMi0yNyBmbCAgZWxlbWVudHRyZWUgZWRpdGlvbiAoYWxwaGEpCi0gKiAyMDA0LTA2LTAzIGZsICB1cGRhdGVzIGZvciBlbGVtZW50dHJlZSAxLjIKLSAqIDIwMDUtMDEtMDUgZmwgIG1ham9yIG9wdGltaXphdGlvbiBlZmZvcnQKLSAqIDIwMDUtMDEtMTEgZmwgIGZpcnN0IHB1YmxpYyByZWxlYXNlIChjRWxlbWVudFRyZWUgMC44KQotICogMjAwNS0wMS0xMiBmbCAgc3BsaXQgZWxlbWVudCBvYmplY3QgaW50byBiYXNlIGFuZCBleHRyYXMKLSAqIDIwMDUtMDEtMTMgZmwgIHVzZSB0YWdnZWQgcG9pbnRlcnMgZm9yIHRhaWwvdGV4dCAoY0VsZW1lbnRUcmVlIDAuOSkKLSAqIDIwMDUtMDEtMTcgZmwgIGFkZGVkIHRyZWVidWlsZGVyIGNsb3NlIG1ldGhvZAotICogMjAwNS0wMS0xNyBmbCAgZml4ZWQgY3Jhc2ggaW4gZ2V0Y2hpbGRyZW4KLSAqIDIwMDUtMDEtMTggZmwgIHJlbW92ZWQgb2JzZXJ2ZXIgYXBpLCBhZGRlZCBpdGVycGFyc2UgKGNFbGVtZW50VHJlZSAwLjkuMykKLSAqIDIwMDUtMDEtMjMgZmwgIHJldmlzZWQgaXRlcnBhcnNlIGFwaTsgYWRkZWQgbmFtZXNwYWNlIGV2ZW50IHN1cHBvcnQgKDAuOS44KQotICogMjAwNS0wMS0yNiBmbCAgYWRkZWQgVkVSU0lPTiBtb2R1bGUgcHJvcGVydHkgKGNFbGVtZW50VHJlZSAxLjApCi0gKiAyMDA1LTAxLTI4IGZsICBhZGRlZCByZW1vdmUgbWV0aG9kICgxLjAuMSkKLSAqIDIwMDUtMDMtMDEgZmwgIGFkZGVkIGlzZWxlbWVudCBmdW5jdGlvbjsgZml4ZWQgbWFrZWVsZW1lbnQgYWxpYXNpbmcgKDEuMC4yKQotICogMjAwNS0wMy0xMyBmbCAgZXhwb3J0IENvbW1lbnQgYW5kIFByb2Nlc3NpbmdJbnN0cnVjdGlvbi9QSSBoZWxwZXJzCi0gKiAyMDA1LTAzLTI2IGZsICBhZGRlZCBDb21tZW50IGFuZCBQSSBzdXBwb3J0IHRvIFhNTFBhcnNlcgotICogMjAwNS0wMy0yNyBmbCAgZXZlbnQgb3B0aW1pemF0aW9uczsgY29tcGxhaW4gYWJvdXQgYm9ndXMgZXZlbnRzCi0gKiAyMDA1LTA4LTA4IGZsICBmaXhlZCByZWFkIGVycm9yIGhhbmRsaW5nIGluIHBhcnNlCi0gKiAyMDA1LTA4LTExIGZsICBhZGRlZCBydW50aW1lIHRlc3QgZm9yIGNvcHkgd29ya2Fyb3VuZCAoMS4wLjMpCi0gKiAyMDA1LTEyLTEzIGZsICBhZGRlZCBleHBhdF9jYXBpIHN1cHBvcnQgKGZvciB4bWwuZXRyZWUpICgxLjAuNCkKLSAqIDIwMDUtMTItMTYgZmwgIGFkZGVkIHN1cHBvcnQgZm9yIG5vbi1zdGFuZGFyZCBlbmNvZGluZ3MKLSAqIDIwMDYtMDMtMDggZmwgIGZpeGVkIGEgY291cGxlIG9mIHBvdGVudGlhbCBudWxsLXJlZnMgYW5kIGxlYWtzCi0gKiAyMDA2LTAzLTEyIGZsICBtZXJnZSBpbiAyLjUgc3NpemVfdCBjaGFuZ2VzCi0gKiAyMDA3LTA4LTI1IGZsICBjYWxsIGN1c3RvbSBidWlsZGVyJ3MgY2xvc2UgbWV0aG9kIGZyb20gWE1MUGFyc2VyCi0gKiAyMDA3LTA4LTMxIGZsICBhZGRlZCBpdGVyLCBleHRlbmQgZnJvbSBFVCAxLjMKLSAqIDIwMDctMDktMDEgZmwgIGZpeGVkIFBhcnNlRXJyb3IgZXhjZXB0aW9uLCBzZXRzbGljZSBzb3VyY2UgdHlwZSwgZXRjCi0gKiAyMDA3LTA5LTAzIGZsICBmaXhlZCBoYW5kbGluZyBvZiBuZWdhdGl2ZSBpbnNlcnQgaW5kZXhlcwotICogMjAwNy0wOS0wNCBmbCAgYWRkZWQgaXRlcnRleHQgZnJvbSBFVCAxLjMKLSAqIDIwMDctMDktMDYgZmwgIGFkZGVkIHBvc2l0aW9uIGF0dHJpYnV0ZSB0byBQYXJzZUVycm9yIGV4Y2VwdGlvbgotICogMjAwOC0wNi0wNiBmbCAgZGVsYXkgZXJyb3IgcmVwb3J0aW5nIGluIGl0ZXJwYXJzZSAoZnJvbSBIcnZvamUgTmlrc2ljKQotICoKKyAqIF9lbGVtZW50dHJlZSAtIEMgYWNjZWxlcmF0b3IgZm9yIHhtbC5ldHJlZS5FbGVtZW50VHJlZQogICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMDkgYnkgU2VjcmV0IExhYnMgQUIuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMDkgYnkgRnJlZHJpayBMdW5kaC4KICAqCiAgKiBpbmZvQHB5dGhvbndhcmUuY29tCiAgKiBodHRwOi8vd3d3LnB5dGhvbndhcmUuY29tCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KIAotLyogTGljZW5zZWQgdG8gUFNGIHVuZGVyIGEgQ29udHJpYnV0b3IgQWdyZWVtZW50LiAqLwotLyogU2VlIGh0dHA6Ly93d3cucHl0aG9uLm9yZy9wc2YvbGljZW5zZSBmb3IgbGljZW5zaW5nIGRldGFpbHMuICovCi0KICNpbmNsdWRlICJQeXRob24uaCIKICNpbmNsdWRlICJzdHJ1Y3RtZW1iZXIuaCIKIAotI2RlZmluZSBWRVJTSU9OICIxLjAuNiIKLQogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIGNvbmZpZ3VyYXRpb24gKi8KIAotLyogTGVhdmUgZGVmaW5lZCB0byBpbmNsdWRlIHRoZSBleHBhdC1iYXNlZCBYTUxQYXJzZXIgdHlwZSAqLwotI2RlZmluZSBVU0VfRVhQQVQKLQogLyogQW4gZWxlbWVudCBjYW4gaG9sZCB0aGlzIG1hbnkgY2hpbGRyZW4gd2l0aG91dCBleHRyYSBtZW1vcnkKICAgIGFsbG9jYXRpb25zLiAqLwogI2RlZmluZSBTVEFUSUNfQ0hJTERSRU4gNApAQCAtMTE5LDEwICs3OCw1MSBAQAogc3RhdGljIFB5VHlwZU9iamVjdCBYTUxQYXJzZXJfVHlwZTsKIAogCi0vKiBnbHVlIGZ1bmN0aW9ucyAoc2VlIHRoZSBpbml0IGZ1bmN0aW9uIGZvciBkZXRhaWxzKSAqLwotc3RhdGljIFB5T2JqZWN0KiBlbGVtZW50dHJlZV9wYXJzZWVycm9yX29iajsKLXN0YXRpYyBQeU9iamVjdCogZWxlbWVudHRyZWVfZGVlcGNvcHlfb2JqOwotc3RhdGljIFB5T2JqZWN0KiBlbGVtZW50cGF0aF9vYmo7CisvKiBQZXItbW9kdWxlIHN0YXRlOyBQRVAgMzEyMSAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgIFB5T2JqZWN0ICpwYXJzZWVycm9yX29iajsKKyAgICBQeU9iamVjdCAqZGVlcGNvcHlfb2JqOworICAgIFB5T2JqZWN0ICplbGVtZW50cGF0aF9vYmo7Cit9IGVsZW1lbnR0cmVlc3RhdGU7CisKK3N0YXRpYyBzdHJ1Y3QgUHlNb2R1bGVEZWYgZWxlbWVudHRyZWVtb2R1bGU7CisKKy8qIEdpdmVuIGEgbW9kdWxlIG9iamVjdCAoYXNzdW1lZCB0byBiZSBfZWxlbWVudHRyZWUpLCBnZXQgaXRzIHBlci1tb2R1bGUKKyAqIHN0YXRlLgorICovCisjZGVmaW5lIEVUX1NUQVRFKG1vZCkgKChlbGVtZW50dHJlZXN0YXRlICopIFB5TW9kdWxlX0dldFN0YXRlKG1vZCkpCisKKy8qIEZpbmQgdGhlIG1vZHVsZSBpbnN0YW5jZSBpbXBvcnRlZCBpbiB0aGUgY3VycmVudGx5IHJ1bm5pbmcgc3ViLWludGVycHJldGVyCisgKiBhbmQgZ2V0IGl0cyBzdGF0ZS4KKyAqLworI2RlZmluZSBFVF9TVEFURV9HTE9CQUwgXAorICAgICgoZWxlbWVudHRyZWVzdGF0ZSAqKSBQeU1vZHVsZV9HZXRTdGF0ZShQeVN0YXRlX0ZpbmRNb2R1bGUoJmVsZW1lbnR0cmVlbW9kdWxlKSkpCisKK3N0YXRpYyBpbnQKK2VsZW1lbnR0cmVlX2NsZWFyKFB5T2JqZWN0ICptKQoreworICAgIGVsZW1lbnR0cmVlc3RhdGUgKnN0ID0gRVRfU1RBVEUobSk7CisgICAgUHlfQ0xFQVIoc3QtPnBhcnNlZXJyb3Jfb2JqKTsKKyAgICBQeV9DTEVBUihzdC0+ZGVlcGNvcHlfb2JqKTsKKyAgICBQeV9DTEVBUihzdC0+ZWxlbWVudHBhdGhfb2JqKTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorZWxlbWVudHRyZWVfdHJhdmVyc2UoUHlPYmplY3QgKm0sIHZpc2l0cHJvYyB2aXNpdCwgdm9pZCAqYXJnKQoreworICAgIGVsZW1lbnR0cmVlc3RhdGUgKnN0ID0gRVRfU1RBVEUobSk7CisgICAgUHlfVklTSVQoc3QtPnBhcnNlZXJyb3Jfb2JqKTsKKyAgICBQeV9WSVNJVChzdC0+ZGVlcGNvcHlfb2JqKTsKKyAgICBQeV9WSVNJVChzdC0+ZWxlbWVudHBhdGhfb2JqKTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK2VsZW1lbnR0cmVlX2ZyZWUodm9pZCAqbSkKK3sKKyAgICBlbGVtZW50dHJlZV9jbGVhcigoUHlPYmplY3QgKiltKTsKK30KIAogLyogaGVscGVycyAqLwogCkBAIC0xMzAsMTEgKzEzMCwxMSBAQAogZGVlcGNvcHkoUHlPYmplY3QqIG9iamVjdCwgUHlPYmplY3QqIG1lbW8pCiB7CiAgICAgLyogZG8gYSBkZWVwIGNvcHkgb2YgdGhlIGdpdmVuIG9iamVjdCAqLwotCiAgICAgUHlPYmplY3QqIGFyZ3M7CiAgICAgUHlPYmplY3QqIHJlc3VsdDsKKyAgICBlbGVtZW50dHJlZXN0YXRlICpzdCA9IEVUX1NUQVRFX0dMT0JBTDsKIAotICAgIGlmICghZWxlbWVudHRyZWVfZGVlcGNvcHlfb2JqKSB7CisgICAgaWYgKCFzdC0+ZGVlcGNvcHlfb2JqKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZygKICAgICAgICAgICAgIFB5RXhjX1J1bnRpbWVFcnJvciwKICAgICAgICAgICAgICJkZWVwY29weSBoZWxwZXIgbm90IGZvdW5kIgpAQCAtMTQ1LDcgKzE0NSw3IEBACiAgICAgYXJncyA9IFB5VHVwbGVfUGFjaygyLCBvYmplY3QsIG1lbW8pOwogICAgIGlmICghYXJncykKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgcmVzdWx0ID0gUHlPYmplY3RfQ2FsbE9iamVjdChlbGVtZW50dHJlZV9kZWVwY29weV9vYmosIGFyZ3MpOworICAgIHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxPYmplY3Qoc3QtPmRlZXBjb3B5X29iaiwgYXJncyk7CiAgICAgUHlfREVDUkVGKGFyZ3MpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC0yMjksOCArMjI5LDEwIEBACiBjcmVhdGVfZXh0cmEoRWxlbWVudE9iamVjdCogc2VsZiwgUHlPYmplY3QqIGF0dHJpYikKIHsKICAgICBzZWxmLT5leHRyYSA9IFB5T2JqZWN0X01hbGxvYyhzaXplb2YoRWxlbWVudE9iamVjdEV4dHJhKSk7Ci0gICAgaWYgKCFzZWxmLT5leHRyYSkKKyAgICBpZiAoIXNlbGYtPmV4dHJhKSB7CisgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgIHJldHVybiAtMTsKKyAgICB9CiAKICAgICBpZiAoIWF0dHJpYikKICAgICAgICAgYXR0cmliID0gUHlfTm9uZTsKQEAgLTI4MywxMyArMjg1LDYgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgc2VsZi0+ZXh0cmEgPSBOVUxMOwogCi0gICAgaWYgKGF0dHJpYiAhPSBQeV9Ob25lICYmICFpc19lbXB0eV9kaWN0KGF0dHJpYikpIHsKLSAgICAgICAgaWYgKGNyZWF0ZV9leHRyYShzZWxmLCBhdHRyaWIpIDwgMCkgewotICAgICAgICAgICAgUHlPYmplY3RfRGVsKHNlbGYpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICB9Ci0KICAgICBQeV9JTkNSRUYodGFnKTsKICAgICBzZWxmLT50YWcgPSB0YWc7CiAKQEAgLTMwMyw2ICsyOTgsMTQgQEAKIAogICAgIEFMTE9DKHNpemVvZihFbGVtZW50T2JqZWN0KSwgImNyZWF0ZSBlbGVtZW50Iik7CiAgICAgUHlPYmplY3RfR0NfVHJhY2soc2VsZik7CisKKyAgICBpZiAoYXR0cmliICE9IFB5X05vbmUgJiYgIWlzX2VtcHR5X2RpY3QoYXR0cmliKSkgeworICAgICAgICBpZiAoY3JlYXRlX2V4dHJhKHNlbGYsIGF0dHJpYikgPCAwKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoc2VsZik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgIH0KKwogICAgIHJldHVybiAoUHlPYmplY3QqKSBzZWxmOwogfQogCkBAIC0zNTgsNiArMzYxLDcgQEAKIAogICAgIFB5X0RFQ1JFRihhdHRyaWJfc3RyKTsKIAorICAgIC8qIGF0dHJpYiBjYW4gYmUgTlVMTCBpZiBQeURpY3RfTmV3IGZhaWxlZCAqLwogICAgIGlmIChhdHRyaWIpCiAgICAgICAgIGlmIChQeURpY3RfVXBkYXRlKGF0dHJpYiwga3dkcykgPCAwKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC00MjUsMTYgKzQyOSwxOCBAQAogfQogCiBMT0NBTChpbnQpCi1lbGVtZW50X3Jlc2l6ZShFbGVtZW50T2JqZWN0KiBzZWxmLCBpbnQgZXh0cmEpCitlbGVtZW50X3Jlc2l6ZShFbGVtZW50T2JqZWN0KiBzZWxmLCBQeV9zc2l6ZV90IGV4dHJhKQogewotICAgIGludCBzaXplOworICAgIFB5X3NzaXplX3Qgc2l6ZTsKICAgICBQeU9iamVjdCogKmNoaWxkcmVuOwogCiAgICAgLyogbWFrZSBzdXJlIHNlbGYtPmNoaWxkcmVuIGNhbiBob2xkIHRoZSBnaXZlbiBudW1iZXIgb2YgZXh0cmEKICAgICAgICBlbGVtZW50cy4gIHNldCBhbiBleGNlcHRpb24gYW5kIHJldHVybiAtMSBpZiBhbGxvY2F0aW9uIGZhaWxlZCAqLwogCi0gICAgaWYgKCFzZWxmLT5leHRyYSkKLSAgICAgICAgY3JlYXRlX2V4dHJhKHNlbGYsIE5VTEwpOworICAgIGlmICghc2VsZi0+ZXh0cmEpIHsKKyAgICAgICAgaWYgKGNyZWF0ZV9leHRyYShzZWxmLCBOVUxMKSA8IDApCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgfQogCiAgICAgc2l6ZSA9IHNlbGYtPmV4dHJhLT5sZW5ndGggKyBleHRyYTsKIApAQCAtNDQ3LDYgKzQ1MywxMyBAQAogICAgICAgICAgKiBiZSBzYWZlLgogICAgICAgICAgKi8KICAgICAgICAgc2l6ZSA9IHNpemUgPyBzaXplIDogMTsKKyAgICAgICAgaWYgKChzaXplX3Qpc2l6ZSA+IFBZX1NTSVpFX1RfTUFYL3NpemVvZihQeU9iamVjdCopKQorICAgICAgICAgICAgZ290byBub21lbW9yeTsKKyAgICAgICAgaWYgKHNpemUgPiBJTlRfTUFYKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAidG9vIG1hbnkgY2hpbGRyZW4iKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQogICAgICAgICBpZiAoc2VsZi0+ZXh0cmEtPmNoaWxkcmVuICE9IHNlbGYtPmV4dHJhLT5fY2hpbGRyZW4pIHsKICAgICAgICAgICAgIC8qIENvdmVyaXR5IENJRCAjMTgyIHNpemVfZXJyb3I6IEFsbG9jYXRpbmcgMSBieXRlcyB0byBwb2ludGVyCiAgICAgICAgICAgICAgKiAiY2hpbGRyZW4iLCB3aGljaCBuZWVkcyBhdCBsZWFzdCA0IGJ5dGVzLiBBbHRob3VnaCBpdCdzIGEKQEAgLTU2MSw4ICs1NzQsOSBAQAogICAgIFB5T2JqZWN0KiBhdHRyaWIgPSBOVUxMOwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTyFPfE8hOlN1YkVsZW1lbnQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAmRWxlbWVudF9UeXBlLCAmcGFyZW50LCAmdGFnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmUHlEaWN0X1R5cGUsICZhdHRyaWIpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAmUHlEaWN0X1R5cGUsICZhdHRyaWIpKSB7CiAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAogICAgIGlmIChhdHRyaWIpIHsKICAgICAgICAgLyogYXR0cmliIHBhc3NlZCBhcyBwb3NpdGlvbmFsIGFyZyAqLwpAQCAtNTg2LDggKzYwMCw5IEBACiAgICAgfQogCiAgICAgZWxlbSA9IGNyZWF0ZV9uZXdfZWxlbWVudCh0YWcsIGF0dHJpYik7Ci0KICAgICBQeV9ERUNSRUYoYXR0cmliKTsKKyAgICBpZiAoZWxlbSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGlmIChlbGVtZW50X2FkZF9zdWJlbGVtZW50KHBhcmVudCwgZWxlbSkgPCAwKSB7CiAgICAgICAgIFB5X0RFQ1JFRihlbGVtKTsKQEAgLTY0NSw3ICs2NjAsNiBAQAogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotLyogbWV0aG9kcyAoaW4gYWxwaGFiZXRpY2FsIG9yZGVyKSAqLwogCiBzdGF0aWMgUHlPYmplY3QqCiBlbGVtZW50X2FwcGVuZChFbGVtZW50T2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncykKQEAgLTY4OSw4ICs3MDMsNyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGVsZW1lbnQgPSAoRWxlbWVudE9iamVjdCopIGNyZWF0ZV9uZXdfZWxlbWVudCgKLSAgICAgICAgc2VsZi0+dGFnLCAoc2VsZi0+ZXh0cmEpID8gc2VsZi0+ZXh0cmEtPmF0dHJpYiA6IFB5X05vbmUKLSAgICAgICAgKTsKKyAgICAgICAgc2VsZi0+dGFnLCAoc2VsZi0+ZXh0cmEpID8gc2VsZi0+ZXh0cmEtPmF0dHJpYiA6IFB5X05vbmUpOwogICAgIGlmICghZWxlbWVudCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTcwMyw3ICs3MTYsNiBAQAogICAgIFB5X0lOQ1JFRihKT0lOX09CSihlbGVtZW50LT50YWlsKSk7CiAKICAgICBpZiAoc2VsZi0+ZXh0cmEpIHsKLQogICAgICAgICBpZiAoZWxlbWVudF9yZXNpemUoZWxlbWVudCwgc2VsZi0+ZXh0cmEtPmxlbmd0aCkgPCAwKSB7CiAgICAgICAgICAgICBQeV9ERUNSRUYoZWxlbWVudCk7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTcxNSw3ICs3MjcsNiBAQAogICAgICAgICB9CiAKICAgICAgICAgZWxlbWVudC0+ZXh0cmEtPmxlbmd0aCA9IHNlbGYtPmV4dHJhLT5sZW5ndGg7Ci0KICAgICB9CiAKICAgICByZXR1cm4gKFB5T2JqZWN0KikgZWxlbWVudDsKQEAgLTc3Miw3ICs3ODMsNiBAQAogICAgIGVsZW1lbnQtPnRhaWwgPSBKT0lOX1NFVCh0YWlsLCBKT0lOX0dFVChzZWxmLT50YWlsKSk7CiAKICAgICBpZiAoc2VsZi0+ZXh0cmEpIHsKLQogICAgICAgICBpZiAoZWxlbWVudF9yZXNpemUoZWxlbWVudCwgc2VsZi0+ZXh0cmEtPmxlbmd0aCkgPCAwKQogICAgICAgICAgICAgZ290byBlcnJvcjsKIApAQCAtNzg2LDcgKzc5Niw2IEBACiAgICAgICAgIH0KIAogICAgICAgICBlbGVtZW50LT5leHRyYS0+bGVuZ3RoID0gc2VsZi0+ZXh0cmEtPmxlbmd0aDsKLQogICAgIH0KIAogICAgIC8qIGFkZCBvYmplY3QgdG8gbWVtbyBkaWN0aW9uYXJ5IChzbyBkZWVwY29weSB3b24ndCB2aXNpdCBpdCBhZ2FpbikgKi8KQEAgLTg4Nyw3ICs4OTYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKnRhaWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqY2hpbGRyZW4pCiB7Ci0gICAgUHlfc3NpemVfdCBpLCBuY2hpbGRyZW47CisgICAgaW50IGksIG5jaGlsZHJlbjsKIAogICAgIGlmICghdGFnKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJ0YWcgbWF5IG5vdCBiZSBOVUxMIik7CkBAIC05MTIsMTEgKzkyMSwxOCBAQAogCiAgICAgLyogQ29tcHV0ZSAnbmNoaWxkcmVuJy4gKi8KICAgICBpZiAoY2hpbGRyZW4pIHsKKyAgICAgICAgUHlfc3NpemVfdCBzaXplOwogICAgICAgICBpZiAoIVB5TGlzdF9DaGVjayhjaGlsZHJlbikpIHsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICInX2NoaWxkcmVuJyBpcyBub3QgYSBsaXN0Iik7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQotICAgICAgICBuY2hpbGRyZW4gPSBQeUxpc3RfU2l6ZShjaGlsZHJlbik7CisgICAgICAgIHNpemUgPSBQeUxpc3RfU2l6ZShjaGlsZHJlbik7CisgICAgICAgIC8qIGV4cGF0IGxpbWl0cyBuY2hpbGRyZW4gdG8gaW50ICovCisgICAgICAgIGlmIChzaXplID4gSU5UX01BWCkgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsICJ0b28gbWFueSBjaGlsZHJlbiIpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgbmNoaWxkcmVuID0gKGludClzaXplOwogICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgbmNoaWxkcmVuID0gMDsKQEAgLTEwMzQsNyArMTA1MCw3IEBACiBlbGVtZW50X2V4dGVuZChFbGVtZW50T2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncykKIHsKICAgICBQeU9iamVjdCogc2VxOwotICAgIFB5X3NzaXplX3QgaSwgc2VxbGVuID0gMDsKKyAgICBQeV9zc2l6ZV90IGk7CiAKICAgICBQeU9iamVjdCogc2VxX2luOwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTzpleHRlbmQiLCAmc2VxX2luKSkKQEAgLTEwNDksMjIgKzEwNjUsMjUgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgc2VxbGVuID0gUHlTZXF1ZW5jZV9TaXplKHNlcSk7Ci0gICAgZm9yIChpID0gMDsgaSA8IHNlcWxlbjsgaSsrKSB7CisgICAgZm9yIChpID0gMDsgaSA8IFB5U2VxdWVuY2VfRmFzdF9HRVRfU0laRShzZXEpOyBpKyspIHsKICAgICAgICAgUHlPYmplY3QqIGVsZW1lbnQgPSBQeVNlcXVlbmNlX0Zhc3RfR0VUX0lURU0oc2VxLCBpKTsKLSAgICAgICAgaWYgKCFQeU9iamVjdF9Jc0luc3RhbmNlKGVsZW1lbnQsIChQeU9iamVjdCAqKSZFbGVtZW50X1R5cGUpKSB7Ci0gICAgICAgICAgICBQeV9ERUNSRUYoc2VxKTsKKyAgICAgICAgUHlfSU5DUkVGKGVsZW1lbnQpOworICAgICAgICBpZiAoIVB5T2JqZWN0X1R5cGVDaGVjayhlbGVtZW50LCAoUHlUeXBlT2JqZWN0ICopJkVsZW1lbnRfVHlwZSkpIHsKICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdCgKICAgICAgICAgICAgICAgICBQeUV4Y19UeXBlRXJyb3IsCiAgICAgICAgICAgICAgICAgImV4cGVjdGVkIGFuIEVsZW1lbnQsIG5vdCBcIiUuMjAwc1wiIiwKICAgICAgICAgICAgICAgICBQeV9UWVBFKGVsZW1lbnQpLT50cF9uYW1lKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihzZXEpOworICAgICAgICAgICAgUHlfREVDUkVGKGVsZW1lbnQpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoZWxlbWVudF9hZGRfc3ViZWxlbWVudChzZWxmLCBlbGVtZW50KSA8IDApIHsKICAgICAgICAgICAgIFB5X0RFQ1JFRihzZXEpOworICAgICAgICAgICAgUHlfREVDUkVGKGVsZW1lbnQpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KKyAgICAgICAgUHlfREVDUkVGKGVsZW1lbnQpOwogICAgIH0KIAogICAgIFB5X0RFQ1JFRihzZXEpOwpAQCAtMTA3OSw2ICsxMDk4LDcgQEAKICAgICBQeU9iamVjdCogdGFnOwogICAgIFB5T2JqZWN0KiBuYW1lc3BhY2VzID0gUHlfTm9uZTsKICAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7InBhdGgiLCAibmFtZXNwYWNlcyIsIDB9OworICAgIGVsZW1lbnR0cmVlc3RhdGUgKnN0ID0gRVRfU1RBVEVfR0xPQkFMOwogCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgIk98TzpmaW5kIiwga3dsaXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0YWcsICZuYW1lc3BhY2VzKSkKQEAgLTEwODcsNyArMTEwNyw3IEBACiAgICAgaWYgKGNoZWNrcGF0aCh0YWcpIHx8IG5hbWVzcGFjZXMgIT0gUHlfTm9uZSkgewogICAgICAgICBfUHlfSURFTlRJRklFUihmaW5kKTsKICAgICAgICAgcmV0dXJuIF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoCi0gICAgICAgICAgICBlbGVtZW50cGF0aF9vYmosICZQeUlkX2ZpbmQsICJPT08iLCBzZWxmLCB0YWcsIG5hbWVzcGFjZXMKKyAgICAgICAgICAgIHN0LT5lbGVtZW50cGF0aF9vYmosICZQeUlkX2ZpbmQsICJPT08iLCBzZWxmLCB0YWcsIG5hbWVzcGFjZXMKICAgICAgICAgICAgICk7CiAgICAgfQogCkBAIC0xMDk2LDExICsxMTE2LDE2IEBACiAKICAgICBmb3IgKGkgPSAwOyBpIDwgc2VsZi0+ZXh0cmEtPmxlbmd0aDsgaSsrKSB7CiAgICAgICAgIFB5T2JqZWN0KiBpdGVtID0gc2VsZi0+ZXh0cmEtPmNoaWxkcmVuW2ldOwotICAgICAgICBpZiAoRWxlbWVudF9DaGVja0V4YWN0KGl0ZW0pICYmCi0gICAgICAgICAgICBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2woKChFbGVtZW50T2JqZWN0KilpdGVtKS0+dGFnLCB0YWcsIFB5X0VRKSA9PSAxKSB7Ci0gICAgICAgICAgICBQeV9JTkNSRUYoaXRlbSk7CisgICAgICAgIGludCByYzsKKyAgICAgICAgaWYgKCFFbGVtZW50X0NoZWNrRXhhY3QoaXRlbSkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgUHlfSU5DUkVGKGl0ZW0pOworICAgICAgICByYyA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbCgoKEVsZW1lbnRPYmplY3QqKWl0ZW0pLT50YWcsIHRhZywgUHlfRVEpOworICAgICAgICBpZiAocmMgPiAwKQogICAgICAgICAgICAgcmV0dXJuIGl0ZW07Ci0gICAgICAgIH0KKyAgICAgICAgUHlfREVDUkVGKGl0ZW0pOworICAgICAgICBpZiAocmMgPCAwKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCiAgICAgUHlfUkVUVVJOX05PTkU7CkBAIC0xMTE1LDYgKzExNDAsNyBAQAogICAgIFB5T2JqZWN0KiBuYW1lc3BhY2VzID0gUHlfTm9uZTsKICAgICBfUHlfSURFTlRJRklFUihmaW5kdGV4dCk7CiAgICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJwYXRoIiwgImRlZmF1bHQiLCAibmFtZXNwYWNlcyIsIDB9OworICAgIGVsZW1lbnR0cmVlc3RhdGUgKnN0ID0gRVRfU1RBVEVfR0xPQkFMOwogCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgIk98T086ZmluZHRleHQiLCBrd2xpc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRhZywgJmRlZmF1bHRfdmFsdWUsICZuYW1lc3BhY2VzKSkKQEAgLTExMjIsNyArMTE0OCw3IEBACiAKICAgICBpZiAoY2hlY2twYXRoKHRhZykgfHwgbmFtZXNwYWNlcyAhPSBQeV9Ob25lKQogICAgICAgICByZXR1cm4gX1B5T2JqZWN0X0NhbGxNZXRob2RJZCgKLSAgICAgICAgICAgIGVsZW1lbnRwYXRoX29iaiwgJlB5SWRfZmluZHRleHQsICJPT09PIiwgc2VsZiwgdGFnLCBkZWZhdWx0X3ZhbHVlLCBuYW1lc3BhY2VzCisgICAgICAgICAgICBzdC0+ZWxlbWVudHBhdGhfb2JqLCAmUHlJZF9maW5kdGV4dCwgIk9PT08iLCBzZWxmLCB0YWcsIGRlZmF1bHRfdmFsdWUsIG5hbWVzcGFjZXMKICAgICAgICAgICAgICk7CiAKICAgICBpZiAoIXNlbGYtPmV4dHJhKSB7CkBAIC0xMTMyLDE0ICsxMTU4LDI0IEBACiAKICAgICBmb3IgKGkgPSAwOyBpIDwgc2VsZi0+ZXh0cmEtPmxlbmd0aDsgaSsrKSB7CiAgICAgICAgIEVsZW1lbnRPYmplY3QqIGl0ZW0gPSAoRWxlbWVudE9iamVjdCopIHNlbGYtPmV4dHJhLT5jaGlsZHJlbltpXTsKLSAgICAgICAgaWYgKEVsZW1lbnRfQ2hlY2tFeGFjdChpdGVtKSAmJiAoUHlPYmplY3RfUmljaENvbXBhcmVCb29sKGl0ZW0tPnRhZywgdGFnLCBQeV9FUSkgPT0gMSkpIHsKLQorICAgICAgICBpbnQgcmM7CisgICAgICAgIGlmICghRWxlbWVudF9DaGVja0V4YWN0KGl0ZW0pKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIFB5X0lOQ1JFRihpdGVtKTsKKyAgICAgICAgcmMgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2woaXRlbS0+dGFnLCB0YWcsIFB5X0VRKTsKKyAgICAgICAgaWYgKHJjID4gMCkgewogICAgICAgICAgICAgUHlPYmplY3QqIHRleHQgPSBlbGVtZW50X2dldF90ZXh0KGl0ZW0pOwotICAgICAgICAgICAgaWYgKHRleHQgPT0gUHlfTm9uZSkKKyAgICAgICAgICAgIGlmICh0ZXh0ID09IFB5X05vbmUpIHsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoaXRlbSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9OZXcoMCwgMCk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBQeV9YSU5DUkVGKHRleHQpOworICAgICAgICAgICAgUHlfREVDUkVGKGl0ZW0pOwogICAgICAgICAgICAgcmV0dXJuIHRleHQ7CiAgICAgICAgIH0KKyAgICAgICAgUHlfREVDUkVGKGl0ZW0pOworICAgICAgICBpZiAocmMgPCAwKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCiAgICAgUHlfSU5DUkVGKGRlZmF1bHRfdmFsdWUpOwpAQCAtMTE1NCw2ICsxMTkwLDcgQEAKICAgICBQeU9iamVjdCogdGFnOwogICAgIFB5T2JqZWN0KiBuYW1lc3BhY2VzID0gUHlfTm9uZTsKICAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7InBhdGgiLCAibmFtZXNwYWNlcyIsIDB9OworICAgIGVsZW1lbnR0cmVlc3RhdGUgKnN0ID0gRVRfU1RBVEVfR0xPQkFMOwogCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgIk98TzpmaW5kYWxsIiwga3dsaXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0YWcsICZuYW1lc3BhY2VzKSkKQEAgLTExNjIsNyArMTE5OSw3IEBACiAgICAgaWYgKGNoZWNrcGF0aCh0YWcpIHx8IG5hbWVzcGFjZXMgIT0gUHlfTm9uZSkgewogICAgICAgICBfUHlfSURFTlRJRklFUihmaW5kYWxsKTsKICAgICAgICAgcmV0dXJuIF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoCi0gICAgICAgICAgICBlbGVtZW50cGF0aF9vYmosICZQeUlkX2ZpbmRhbGwsICJPT08iLCBzZWxmLCB0YWcsIG5hbWVzcGFjZXMKKyAgICAgICAgICAgIHN0LT5lbGVtZW50cGF0aF9vYmosICZQeUlkX2ZpbmRhbGwsICJPT08iLCBzZWxmLCB0YWcsIG5hbWVzcGFjZXMKICAgICAgICAgICAgICk7CiAgICAgfQogCkBAIC0xMTc1LDEzICsxMjEyLDE3IEBACiAKICAgICBmb3IgKGkgPSAwOyBpIDwgc2VsZi0+ZXh0cmEtPmxlbmd0aDsgaSsrKSB7CiAgICAgICAgIFB5T2JqZWN0KiBpdGVtID0gc2VsZi0+ZXh0cmEtPmNoaWxkcmVuW2ldOwotICAgICAgICBpZiAoRWxlbWVudF9DaGVja0V4YWN0KGl0ZW0pICYmCi0gICAgICAgICAgICBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2woKChFbGVtZW50T2JqZWN0KilpdGVtKS0+dGFnLCB0YWcsIFB5X0VRKSA9PSAxKSB7Ci0gICAgICAgICAgICBpZiAoUHlMaXN0X0FwcGVuZChvdXQsIGl0ZW0pIDwgMCkgewotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihvdXQpOwotICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgfQorICAgICAgICBpbnQgcmM7CisgICAgICAgIGlmICghRWxlbWVudF9DaGVja0V4YWN0KGl0ZW0pKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIFB5X0lOQ1JFRihpdGVtKTsKKyAgICAgICAgcmMgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2woKChFbGVtZW50T2JqZWN0KilpdGVtKS0+dGFnLCB0YWcsIFB5X0VRKTsKKyAgICAgICAgaWYgKHJjICE9IDAgJiYgKHJjIDwgMCB8fCBQeUxpc3RfQXBwZW5kKG91dCwgaXRlbSkgPCAwKSkgeworICAgICAgICAgICAgUHlfREVDUkVGKGl0ZW0pOworICAgICAgICAgICAgUHlfREVDUkVGKG91dCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQorICAgICAgICBQeV9ERUNSRUYoaXRlbSk7CiAgICAgfQogCiAgICAgcmV0dXJuIG91dDsKQEAgLTExOTQsMTQgKzEyMzUsMTUgQEAKICAgICBQeU9iamVjdCogbmFtZXNwYWNlcyA9IFB5X05vbmU7CiAgICAgX1B5X0lERU5USUZJRVIoaXRlcmZpbmQpOwogICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsicGF0aCIsICJuYW1lc3BhY2VzIiwgMH07CisgICAgZWxlbWVudHRyZWVzdGF0ZSAqc3QgPSBFVF9TVEFURV9HTE9CQUw7CiAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiT3xPOml0ZXJmaW5kIiwga3dsaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0YWcsICZuYW1lc3BhY2VzKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdGFnLCAmbmFtZXNwYWNlcykpIHsKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogCiAgICAgcmV0dXJuIF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoCi0gICAgICAgIGVsZW1lbnRwYXRoX29iaiwgJlB5SWRfaXRlcmZpbmQsICJPT08iLCBzZWxmLCB0YWcsIG5hbWVzcGFjZXMKLSAgICAgICAgKTsKKyAgICAgICAgc3QtPmVsZW1lbnRwYXRoX29iaiwgJlB5SWRfaXRlcmZpbmQsICJPT08iLCBzZWxmLCB0YWcsIG5hbWVzcGFjZXMpOwogfQogCiBzdGF0aWMgUHlPYmplY3QqCkBAIC0xMzEyLDggKzEzNTQsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgJkVsZW1lbnRfVHlwZSwgJmVsZW1lbnQpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGlmICghc2VsZi0+ZXh0cmEpCi0gICAgICAgIGNyZWF0ZV9leHRyYShzZWxmLCBOVUxMKTsKKyAgICBpZiAoIXNlbGYtPmV4dHJhKSB7CisgICAgICAgIGlmIChjcmVhdGVfZXh0cmEoc2VsZiwgTlVMTCkgPCAwKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogCiAgICAgaWYgKGluZGV4IDwgMCkgewogICAgICAgICBpbmRleCArPSBzZWxmLT5leHRyYS0+bGVuZ3RoOwpAQCAtMTM5NSw4ICsxNDM5LDEwIEBACiBlbGVtZW50X3JlbW92ZShFbGVtZW50T2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncykKIHsKICAgICBpbnQgaTsKLQorICAgIGludCByYzsKICAgICBQeU9iamVjdCogZWxlbWVudDsKKyAgICBQeU9iamVjdCogZm91bmQ7CisKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8hOnJlbW92ZSIsICZFbGVtZW50X1R5cGUsICZlbGVtZW50KSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTE0MTIsMTEgKzE0NTgsMTQgQEAKICAgICBmb3IgKGkgPSAwOyBpIDwgc2VsZi0+ZXh0cmEtPmxlbmd0aDsgaSsrKSB7CiAgICAgICAgIGlmIChzZWxmLT5leHRyYS0+Y2hpbGRyZW5baV0gPT0gZWxlbWVudCkKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBpZiAoUHlPYmplY3RfUmljaENvbXBhcmVCb29sKHNlbGYtPmV4dHJhLT5jaGlsZHJlbltpXSwgZWxlbWVudCwgUHlfRVEpID09IDEpCisgICAgICAgIHJjID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKHNlbGYtPmV4dHJhLT5jaGlsZHJlbltpXSwgZWxlbWVudCwgUHlfRVEpOworICAgICAgICBpZiAocmMgPiAwKQogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmIChyYyA8IDApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBpZiAoaSA9PSBzZWxmLT5leHRyYS0+bGVuZ3RoKSB7CisgICAgaWYgKGkgPj0gc2VsZi0+ZXh0cmEtPmxlbmd0aCkgewogICAgICAgICAvKiBlbGVtZW50IGlzIG5vdCBpbiBjaGlsZHJlbiwgc28gcmFpc2UgZXhjZXB0aW9uICovCiAgICAgICAgIFB5RXJyX1NldFN0cmluZygKICAgICAgICAgICAgIFB5RXhjX1ZhbHVlRXJyb3IsCkBAIC0xNDI1LDEzICsxNDc0LDEzIEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIFB5X0RFQ1JFRihzZWxmLT5leHRyYS0+Y2hpbGRyZW5baV0pOworICAgIGZvdW5kID0gc2VsZi0+ZXh0cmEtPmNoaWxkcmVuW2ldOwogCiAgICAgc2VsZi0+ZXh0cmEtPmxlbmd0aC0tOwotCiAgICAgZm9yICg7IGkgPCBzZWxmLT5leHRyYS0+bGVuZ3RoOyBpKyspCiAgICAgICAgIHNlbGYtPmV4dHJhLT5jaGlsZHJlbltpXSA9IHNlbGYtPmV4dHJhLT5jaGlsZHJlbltpKzFdOwogCisgICAgUHlfREVDUkVGKGZvdW5kKTsKICAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIApAQCAtMTQ1NCw4ICsxNTAzLDEwIEBACiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPTzpzZXQiLCAma2V5LCAmdmFsdWUpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGlmICghc2VsZi0+ZXh0cmEpCi0gICAgICAgIGNyZWF0ZV9leHRyYShzZWxmLCBOVUxMKTsKKyAgICBpZiAoIXNlbGYtPmV4dHJhKSB7CisgICAgICAgIGlmIChjcmVhdGVfZXh0cmEoc2VsZiwgTlVMTCkgPCAwKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogCiAgICAgYXR0cmliID0gZWxlbWVudF9nZXRfYXR0cmliKHNlbGYpOwogICAgIGlmICghYXR0cmliKQpAQCAtMTQ2OCwxOCArMTUxOSwxOSBAQAogfQogCiBzdGF0aWMgaW50Ci1lbGVtZW50X3NldGl0ZW0oUHlPYmplY3QqIHNlbGZfLCBQeV9zc2l6ZV90IGluZGV4LCBQeU9iamVjdCogaXRlbSkKK2VsZW1lbnRfc2V0aXRlbShQeU9iamVjdCogc2VsZl8sIFB5X3NzaXplX3QgaW5kZXhfLCBQeU9iamVjdCogaXRlbSkKIHsKICAgICBFbGVtZW50T2JqZWN0KiBzZWxmID0gKEVsZW1lbnRPYmplY3QqKSBzZWxmXzsKLSAgICBpbnQgaTsKKyAgICBpbnQgaSwgaW5kZXg7CiAgICAgUHlPYmplY3QqIG9sZDsKIAotICAgIGlmICghc2VsZi0+ZXh0cmEgfHwgaW5kZXggPCAwIHx8IGluZGV4ID49IHNlbGYtPmV4dHJhLT5sZW5ndGgpIHsKKyAgICBpZiAoIXNlbGYtPmV4dHJhIHx8IGluZGV4XyA8IDAgfHwgaW5kZXhfID49IHNlbGYtPmV4dHJhLT5sZW5ndGgpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKAogICAgICAgICAgICAgUHlFeGNfSW5kZXhFcnJvciwKICAgICAgICAgICAgICJjaGlsZCBhc3NpZ25tZW50IGluZGV4IG91dCBvZiByYW5nZSIpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQorICAgIGluZGV4ID0gKGludClpbmRleF87CiAKICAgICBvbGQgPSBzZWxmLT5leHRyYS0+Y2hpbGRyZW5baW5kZXhdOwogCkBAIC0xNTY4LDE2ICsxNjIwLDE5IEBACiAgICAgICAgIFB5X3NzaXplX3Qgc3RhcnQsIHN0b3AsIHN0ZXAsIHNsaWNlbGVuLCBuZXdsZW4sIGN1ciwgaTsKIAogICAgICAgICBQeU9iamVjdCogcmVjeWNsZSA9IE5VTEw7Ci0gICAgICAgIFB5T2JqZWN0KiBzZXEgPSBOVUxMOworICAgICAgICBQeU9iamVjdCogc2VxOwogCi0gICAgICAgIGlmICghc2VsZi0+ZXh0cmEpCi0gICAgICAgICAgICBjcmVhdGVfZXh0cmEoc2VsZiwgTlVMTCk7CisgICAgICAgIGlmICghc2VsZi0+ZXh0cmEpIHsKKyAgICAgICAgICAgIGlmIChjcmVhdGVfZXh0cmEoc2VsZiwgTlVMTCkgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQogCiAgICAgICAgIGlmIChQeVNsaWNlX0dldEluZGljZXNFeChpdGVtLAogICAgICAgICAgICAgICAgIHNlbGYtPmV4dHJhLT5sZW5ndGgsCiAgICAgICAgICAgICAgICAgJnN0YXJ0LCAmc3RvcCwgJnN0ZXAsICZzbGljZWxlbikgPCAwKSB7CiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KKyAgICAgICAgYXNzZXJ0KHNsaWNlbGVuIDw9IHNlbGYtPmV4dHJhLT5sZW5ndGgpOwogCiAgICAgICAgIGlmICh2YWx1ZSA9PSBOVUxMKSB7CiAgICAgICAgICAgICAvKiBEZWxldGUgc2xpY2UgKi8KQEAgLTE2MzksMjcgKzE2OTQsMjcgQEAKICAgICAgICAgICAgICAgICAgICAgKHNlbGYtPmV4dHJhLT5sZW5ndGggLSBjdXIpICogc2l6ZW9mKFB5T2JqZWN0ICopKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgc2VsZi0+ZXh0cmEtPmxlbmd0aCAtPSBzbGljZWxlbjsKKyAgICAgICAgICAgIHNlbGYtPmV4dHJhLT5sZW5ndGggLT0gKGludClzbGljZWxlbjsKIAogICAgICAgICAgICAgLyogRGlzY2FyZCB0aGUgcmVjeWNsZSBsaXN0IHdpdGggYWxsIHRoZSBkZWxldGVkIHN1Yi1lbGVtZW50cyAqLwogICAgICAgICAgICAgUHlfWERFQ1JFRihyZWN5Y2xlKTsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgLyogQSBuZXcgc2xpY2UgaXMgYWN0dWFsbHkgYmVpbmcgYXNzaWduZWQgKi8KLSAgICAgICAgICAgIHNlcSA9IFB5U2VxdWVuY2VfRmFzdCh2YWx1ZSwgIiIpOwotICAgICAgICAgICAgaWYgKCFzZXEpIHsKLSAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoCi0gICAgICAgICAgICAgICAgICAgIFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkIHNlcXVlbmNlLCBub3QgXCIlLjIwMHNcIiIsIFB5X1RZUEUodmFsdWUpLT50cF9uYW1lCi0gICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbmV3bGVuID0gUHlTZXF1ZW5jZV9TaXplKHNlcSk7CisKKyAgICAgICAgLyogQSBuZXcgc2xpY2UgaXMgYWN0dWFsbHkgYmVpbmcgYXNzaWduZWQgKi8KKyAgICAgICAgc2VxID0gUHlTZXF1ZW5jZV9GYXN0KHZhbHVlLCAiIik7CisgICAgICAgIGlmICghc2VxKSB7CisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoCisgICAgICAgICAgICAgICAgUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICJleHBlY3RlZCBzZXF1ZW5jZSwgbm90IFwiJS4yMDBzXCIiLCBQeV9UWVBFKHZhbHVlKS0+dHBfbmFtZQorICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KKyAgICAgICAgbmV3bGVuID0gUHlTZXF1ZW5jZV9TaXplKHNlcSk7CiAKICAgICAgICAgaWYgKHN0ZXAgIT0gIDEgJiYgbmV3bGVuICE9IHNsaWNlbGVuKQogICAgICAgICB7CisgICAgICAgICAgICBQeV9ERUNSRUYoc2VxKTsKICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLAogICAgICAgICAgICAgICAgICJhdHRlbXB0IHRvIGFzc2lnbiBzZXF1ZW5jZSBvZiBzaXplICV6ZCAiCiAgICAgICAgICAgICAgICAgInRvIGV4dGVuZGVkIHNsaWNlIG9mIHNpemUgJXpkIiwKQEAgLTE2NzEsMTIgKzE3MjYsMTIgQEAKICAgICAgICAgLyogUmVzaXplIGJlZm9yZSBjcmVhdGluZyB0aGUgcmVjeWNsZSBiaW4sIHRvIHByZXZlbnQgcmVmbGVha3MuICovCiAgICAgICAgIGlmIChuZXdsZW4gPiBzbGljZWxlbikgewogICAgICAgICAgICAgaWYgKGVsZW1lbnRfcmVzaXplKHNlbGYsIG5ld2xlbiAtIHNsaWNlbGVuKSA8IDApIHsKLSAgICAgICAgICAgICAgICBpZiAoc2VxKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihzZXEpOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoc2VxKTsKICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KKyAgICAgICAgYXNzZXJ0KG5ld2xlbiAtIHNsaWNlbGVuIDw9IElOVF9NQVggLSBzZWxmLT5leHRyYS0+bGVuZ3RoKTsKKyAgICAgICAgYXNzZXJ0KG5ld2xlbiAtIHNsaWNlbGVuID49IC1zZWxmLT5leHRyYS0+bGVuZ3RoKTsKIAogICAgICAgICBpZiAoc2xpY2VsZW4gPiAwKSB7CiAgICAgICAgICAgICAvKiB0byBhdm9pZCByZWN1cnNpdmUgY2FsbHMgdG8gdGhpcyBtZXRob2QgKHZpYSBkZWNyZWYpLCBtb3ZlCkBAIC0xNjg0LDkgKzE3MzksNyBAQAogICAgICAgICAgICAgICAgd2UncmUgZG9uZSBtb2RpZnlpbmcgdGhlIGVsZW1lbnQgKi8KICAgICAgICAgICAgIHJlY3ljbGUgPSBQeUxpc3RfTmV3KHNsaWNlbGVuKTsKICAgICAgICAgICAgIGlmICghcmVjeWNsZSkgewotICAgICAgICAgICAgICAgIGlmIChzZXEpIHsKLSAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHNlcSk7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihzZXEpOwogICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGZvciAoY3VyID0gc3RhcnQsIGkgPSAwOyBpIDwgc2xpY2VsZW47CkBAIC0xNzEyLDExICsxNzY1LDkgQEAKICAgICAgICAgICAgIHNlbGYtPmV4dHJhLT5jaGlsZHJlbltjdXJdID0gZWxlbWVudDsKICAgICAgICAgfQogCi0gICAgICAgIHNlbGYtPmV4dHJhLT5sZW5ndGggKz0gbmV3bGVuIC0gc2xpY2VsZW47CisgICAgICAgIHNlbGYtPmV4dHJhLT5sZW5ndGggKz0gKGludCkobmV3bGVuIC0gc2xpY2VsZW4pOwogCi0gICAgICAgIGlmIChzZXEpIHsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihzZXEpOwotICAgICAgICB9CisgICAgICAgIFB5X0RFQ1JFRihzZXEpOwogCiAgICAgICAgIC8qIGRpc2NhcmQgdGhlIHJlY3ljbGUgYmluLCBhbmQgZXZlcnl0aGluZyBpbiBpdCAqLwogICAgICAgICBQeV9YREVDUkVGKHJlY3ljbGUpOwpAQCAtMTc4Niw3ICsxODM3LDcgQEAKICAgICAgICAgcmV0dXJuIHJlczsKICAgICB9IGVsc2UgaWYgKHN0cmNtcChuYW1lLCAidGV4dCIpID09IDApIHsKICAgICAgICAgcmVzID0gZWxlbWVudF9nZXRfdGV4dChzZWxmKTsKLSAgICAgICAgUHlfSU5DUkVGKHJlcyk7CisgICAgICAgIFB5X1hJTkNSRUYocmVzKTsKICAgICAgICAgcmV0dXJuIHJlczsKICAgICB9CiAKQEAgLTE4MDEsOCArMTg1MiwxMCBAQAogICAgICAgICByZXMgPSBlbGVtZW50X2dldF90YWlsKHNlbGYpOwogICAgIH0gZWxzZSBpZiAoc3RyY21wKG5hbWUsICJhdHRyaWIiKSA9PSAwKSB7CiAgICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgICAgIGlmICghc2VsZi0+ZXh0cmEpCi0gICAgICAgICAgICBjcmVhdGVfZXh0cmEoc2VsZiwgTlVMTCk7CisgICAgICAgIGlmICghc2VsZi0+ZXh0cmEpIHsKKyAgICAgICAgICAgIGlmIChjcmVhdGVfZXh0cmEoc2VsZiwgTlVMTCkgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CiAgICAgICAgIHJlcyA9IGVsZW1lbnRfZ2V0X2F0dHJpYihzZWxmKTsKICAgICB9CiAKQEAgLTE4MTcsMTIgKzE4NzAsMTggQEAKIGVsZW1lbnRfc2V0YXR0cm8oRWxlbWVudE9iamVjdCogc2VsZiwgUHlPYmplY3QqIG5hbWVvYmosIFB5T2JqZWN0KiB2YWx1ZSkKIHsKICAgICBjaGFyICpuYW1lID0gIiI7CisKKyAgICBpZiAodmFsdWUgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfQXR0cmlidXRlRXJyb3IsCisgICAgICAgICAgICAiY2FuJ3QgZGVsZXRlIGF0dHJpYnV0ZSIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQogICAgIGlmIChQeVVuaWNvZGVfQ2hlY2sobmFtZW9iaikpCiAgICAgICAgIG5hbWUgPSBfUHlVbmljb2RlX0FzU3RyaW5nKG5hbWVvYmopOwotCi0gICAgaWYgKG5hbWUgPT0gTlVMTCkgeworICAgIGlmIChuYW1lID09IE5VTEwpCiAgICAgICAgIHJldHVybiAtMTsKLSAgICB9IGVsc2UgaWYgKHN0cmNtcChuYW1lLCAidGFnIikgPT0gMCkgeworCisgICAgaWYgKHN0cmNtcChuYW1lLCAidGFnIikgPT0gMCkgewogICAgICAgICBQeV9ERUNSRUYoc2VsZi0+dGFnKTsKICAgICAgICAgc2VsZi0+dGFnID0gdmFsdWU7CiAgICAgICAgIFB5X0lOQ1JFRihzZWxmLT50YWcpOwpAQCAtMTgzNSw4ICsxODk0LDEwIEBACiAgICAgICAgIHNlbGYtPnRhaWwgPSB2YWx1ZTsKICAgICAgICAgUHlfSU5DUkVGKHNlbGYtPnRhaWwpOwogICAgIH0gZWxzZSBpZiAoc3RyY21wKG5hbWUsICJhdHRyaWIiKSA9PSAwKSB7Ci0gICAgICAgIGlmICghc2VsZi0+ZXh0cmEpCi0gICAgICAgICAgICBjcmVhdGVfZXh0cmEoc2VsZiwgTlVMTCk7CisgICAgICAgIGlmICghc2VsZi0+ZXh0cmEpIHsKKyAgICAgICAgICAgIGlmIChjcmVhdGVfZXh0cmEoc2VsZiwgTlVMTCkgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQogICAgICAgICBQeV9ERUNSRUYoc2VsZi0+ZXh0cmEtPmF0dHJpYik7CiAgICAgICAgIHNlbGYtPmV4dHJhLT5hdHRyaWIgPSB2YWx1ZTsKICAgICAgICAgUHlfSU5DUkVGKHNlbGYtPmV4dHJhLT5hdHRyaWIpOwpAQCAtMTk5Niw2ICsyMDU3LDcgQEAKICAgICAgKi8KICAgICBFbGVtZW50T2JqZWN0ICpjdXJfcGFyZW50OwogICAgIFB5X3NzaXplX3QgY2hpbGRfaW5kZXg7CisgICAgaW50IHJjOwogCiAgICAgd2hpbGUgKDEpIHsKICAgICAgICAgLyogSGFuZGxlIHRoZSBjYXNlIHJlYWNoZWQgaW4gdGhlIGJlZ2lubmluZyBhbmQgZW5kIG9mIGl0ZXJhdGlvbiwgd2hlcmUKQEAgLTIwMTcsMTQgKzIwNzksMjIgQEAKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBpdC0+cm9vdF9kb25lID0gMTsKLSAgICAgICAgICAgICAgICBpZiAoaXQtPnNvdWdodF90YWcgPT0gUHlfTm9uZSB8fAotICAgICAgICAgICAgICAgICAgICBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2woaXQtPnJvb3RfZWxlbWVudC0+dGFnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXQtPnNvdWdodF90YWcsIFB5X0VRKSA9PSAxKSB7CisgICAgICAgICAgICAgICAgcmMgPSAoaXQtPnNvdWdodF90YWcgPT0gUHlfTm9uZSk7CisgICAgICAgICAgICAgICAgaWYgKCFyYykgeworICAgICAgICAgICAgICAgICAgICByYyA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbChpdC0+cm9vdF9lbGVtZW50LT50YWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0LT5zb3VnaHRfdGFnLCBQeV9FUSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChyYyA8IDApCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHJjKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChpdC0+Z2V0dGV4dCkgewogICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKnRleHQgPSBlbGVtZW50X2dldF90ZXh0KGl0LT5yb290X2VsZW1lbnQpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0ZXh0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFB5T2JqZWN0X0lzVHJ1ZSh0ZXh0KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmMgPSBQeU9iamVjdF9Jc1RydWUodGV4dCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmMgPCAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJjKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfSU5DUkVGKHRleHQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0ZXh0OwogICAgICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMjA1NiwxOCArMjEyNiwyNiBAQAogICAgICAgICAgICAgICAgIFB5T2JqZWN0ICp0ZXh0ID0gZWxlbWVudF9nZXRfdGV4dChjaGlsZCk7CiAgICAgICAgICAgICAgICAgaWYgKCF0ZXh0KQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgICAgICBpZiAoUHlPYmplY3RfSXNUcnVlKHRleHQpKSB7CisgICAgICAgICAgICAgICAgcmMgPSBQeU9iamVjdF9Jc1RydWUodGV4dCk7CisgICAgICAgICAgICAgICAgaWYgKHJjIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICAgICAgaWYgKHJjKSB7CiAgICAgICAgICAgICAgICAgICAgIFB5X0lOQ1JFRih0ZXh0KTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRleHQ7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIGlmIChpdC0+c291Z2h0X3RhZyA9PSBQeV9Ob25lIHx8Ci0gICAgICAgICAgICAgICAgUHlPYmplY3RfUmljaENvbXBhcmVCb29sKGNoaWxkLT50YWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0LT5zb3VnaHRfdGFnLCBQeV9FUSkgPT0gMSkgewotICAgICAgICAgICAgICAgIFB5X0lOQ1JFRihjaGlsZCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIChQeU9iamVjdCAqKWNoaWxkOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByYyA9IChpdC0+c291Z2h0X3RhZyA9PSBQeV9Ob25lKTsKKyAgICAgICAgICAgICAgICBpZiAoIXJjKSB7CisgICAgICAgICAgICAgICAgICAgIHJjID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKGNoaWxkLT50YWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0LT5zb3VnaHRfdGFnLCBQeV9FUSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChyYyA8IDApCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHJjKSB7CisgICAgICAgICAgICAgICAgICAgIFB5X0lOQ1JFRihjaGlsZCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAoUHlPYmplY3QgKiljaGlsZDsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBQeU9iamVjdCAqdGFpbDsKQEAgLTIwODcsOSArMjE2NSwxNCBAQAogICAgICAgICAgICAgICogdGhpcyBpcyBiZWNhdXNlIGl0ZXJ0ZXh0KCkgaXMgc3VwcG9zZWQgdG8gb25seSByZXR1cm4gKmlubmVyKgogICAgICAgICAgICAgICogdGV4dCwgbm90IHRleHQgZm9sbG93aW5nIHRoZSBlbGVtZW50IGl0IGJlZ2FuIGl0ZXJhdGlvbiB3aXRoLgogICAgICAgICAgICAgICovCi0gICAgICAgICAgICBpZiAoaXQtPnBhcmVudF9zdGFjay0+cGFyZW50ICYmIFB5T2JqZWN0X0lzVHJ1ZSh0YWlsKSkgewotICAgICAgICAgICAgICAgIFB5X0lOQ1JFRih0YWlsKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGFpbDsKKyAgICAgICAgICAgIGlmIChpdC0+cGFyZW50X3N0YWNrLT5wYXJlbnQpIHsKKyAgICAgICAgICAgICAgICByYyA9IFB5T2JqZWN0X0lzVHJ1ZSh0YWlsKTsKKyAgICAgICAgICAgICAgICBpZiAocmMgPCAwKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgICAgICBpZiAocmMpIHsKKyAgICAgICAgICAgICAgICAgICAgUHlfSU5DUkVGKHRhaWwpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGFpbDsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0yMTQ3LDM4ICsyMjMwLDQxIEBACiBjcmVhdGVfZWxlbWVudGl0ZXIoRWxlbWVudE9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnRhZywgaW50IGdldHRleHQpCiB7CiAgICAgRWxlbWVudEl0ZXJPYmplY3QgKml0OwotICAgIFB5T2JqZWN0ICpzdGFyID0gTlVMTDsKIAogICAgIGl0ID0gUHlPYmplY3RfR0NfTmV3KEVsZW1lbnRJdGVyT2JqZWN0LCAmRWxlbWVudEl0ZXJfVHlwZSk7CiAgICAgaWYgKCFpdCkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKCEoaXQtPnBhcmVudF9zdGFjayA9IFB5T2JqZWN0X01hbGxvYyhzaXplb2YoUGFyZW50TG9jYXRvcikpKSkgewotICAgICAgICBQeU9iamVjdF9HQ19EZWwoaXQpOwotICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChQeVVuaWNvZGVfQ2hlY2sodGFnKSkgeworICAgICAgICBpZiAoUHlVbmljb2RlX1JFQURZKHRhZykgPCAwKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGlmIChQeVVuaWNvZGVfR0VUX0xFTkdUSCh0YWcpID09IDEgJiYgUHlVbmljb2RlX1JFQURfQ0hBUih0YWcsIDApID09ICcqJykKKyAgICAgICAgICAgIHRhZyA9IFB5X05vbmU7CisgICAgfQorICAgIGVsc2UgaWYgKFB5Qnl0ZXNfQ2hlY2sodGFnKSkgeworICAgICAgICBpZiAoUHlCeXRlc19HRVRfU0laRSh0YWcpID09IDEgJiYgKlB5Qnl0ZXNfQVNfU1RSSU5HKHRhZykgPT0gJyonKQorICAgICAgICAgICAgdGFnID0gUHlfTm9uZTsKICAgICB9CiAKKyAgICBQeV9JTkNSRUYodGFnKTsKKyAgICBpdC0+c291Z2h0X3RhZyA9IHRhZzsKKyAgICBpdC0+cm9vdF9kb25lID0gMDsKKyAgICBpdC0+Z2V0dGV4dCA9IGdldHRleHQ7CisgICAgUHlfSU5DUkVGKHNlbGYpOworICAgIGl0LT5yb290X2VsZW1lbnQgPSBzZWxmOworCisgICAgUHlPYmplY3RfR0NfVHJhY2soaXQpOworCisgICAgaXQtPnBhcmVudF9zdGFjayA9IFB5T2JqZWN0X01hbGxvYyhzaXplb2YoUGFyZW50TG9jYXRvcikpOworICAgIGlmIChpdC0+cGFyZW50X3N0YWNrID09IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKGl0KTsKKyAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogICAgIGl0LT5wYXJlbnRfc3RhY2stPnBhcmVudCA9IE5VTEw7CiAgICAgaXQtPnBhcmVudF9zdGFjay0+Y2hpbGRfaW5kZXggPSAwOwogICAgIGl0LT5wYXJlbnRfc3RhY2stPm5leHQgPSBOVUxMOwogCi0gICAgaWYgKFB5VW5pY29kZV9DaGVjayh0YWcpKQotICAgICAgICBzdGFyID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoIioiKTsKLSAgICBlbHNlIGlmIChQeUJ5dGVzX0NoZWNrKHRhZykpCi0gICAgICAgIHN0YXIgPSBQeUJ5dGVzX0Zyb21TdHJpbmcoIioiKTsKLQotICAgIGlmIChzdGFyICYmIFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbCh0YWcsIHN0YXIsIFB5X0VRKSA9PSAxKQotICAgICAgICB0YWcgPSBQeV9Ob25lOwotCi0gICAgUHlfWERFQ1JFRihzdGFyKTsKLSAgICBpdC0+c291Z2h0X3RhZyA9IHRhZzsKLSAgICBpdC0+cm9vdF9kb25lID0gMDsKLSAgICBpdC0+Z2V0dGV4dCA9IGdldHRleHQ7Ci0gICAgaXQtPnJvb3RfZWxlbWVudCA9IHNlbGY7Ci0KLSAgICBQeV9JTkNSRUYoc2VsZik7Ci0gICAgUHlfSU5DUkVGKHRhZyk7Ci0KLSAgICBQeU9iamVjdF9HQ19UcmFjayhpdCk7CiAgICAgcmV0dXJuIChQeU9iamVjdCAqKWl0OwogfQogCkBAIC0yMzYyLDYgKzI0NDgsMjMgQEAKICAgICB9CiB9CiAKK0xPQ0FMKGludCkKK3RyZWVidWlsZGVyX2FwcGVuZF9ldmVudChUcmVlQnVpbGRlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFjdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqbm9kZSkKK3sKKyAgICBpZiAoYWN0aW9uICE9IE5VTEwpIHsKKyAgICAgICAgUHlPYmplY3QgKnJlcyA9IFB5VHVwbGVfUGFjaygyLCBhY3Rpb24sIG5vZGUpOworICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIGlmIChQeUxpc3RfQXBwZW5kKHNlbGYtPmV2ZW50cywgcmVzKSA8IDApIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihyZXMpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIFB5X0RFQ1JFRihyZXMpOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIGhhbmRsZXJzICovCiAKQEAgLTIzNzEsNiArMjQ3NCw3IEBACiB7CiAgICAgUHlPYmplY3QqIG5vZGU7CiAgICAgUHlPYmplY3QqIHRoaXM7CisgICAgZWxlbWVudHRyZWVzdGF0ZSAqc3QgPSBFVF9TVEFURV9HTE9CQUw7CiAKICAgICBpZiAoc2VsZi0+ZGF0YSkgewogICAgICAgICBpZiAoc2VsZi0+dGhpcyA9PSBzZWxmLT5sYXN0KSB7CkBAIC0yNDAxLDcgKzI1MDUsNyBAQAogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChzZWxmLT5yb290KSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoCi0gICAgICAgICAgICAgICAgZWxlbWVudHRyZWVfcGFyc2VlcnJvcl9vYmosCisgICAgICAgICAgICAgICAgc3QtPnBhcnNlZXJyb3Jfb2JqLAogICAgICAgICAgICAgICAgICJtdWx0aXBsZSBlbGVtZW50cyBvbiB0b3AgbGV2ZWwiCiAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CkBAIC0yNDI4LDE2ICsyNTMyLDggQEAKICAgICBQeV9JTkNSRUYobm9kZSk7CiAgICAgc2VsZi0+bGFzdCA9IG5vZGU7CiAKLSAgICBpZiAoc2VsZi0+c3RhcnRfZXZlbnRfb2JqKSB7Ci0gICAgICAgIFB5T2JqZWN0KiByZXM7Ci0gICAgICAgIFB5T2JqZWN0KiBhY3Rpb24gPSBzZWxmLT5zdGFydF9ldmVudF9vYmo7Ci0gICAgICAgIHJlcyA9IFB5VHVwbGVfUGFjaygyLCBhY3Rpb24sIG5vZGUpOwotICAgICAgICBpZiAocmVzKSB7Ci0gICAgICAgICAgICBQeUxpc3RfQXBwZW5kKHNlbGYtPmV2ZW50cywgcmVzKTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihyZXMpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7IC8qIEZJWE1FOiBwcm9wYWdhdGUgZXJyb3IgKi8KLSAgICB9CisgICAgaWYgKHRyZWVidWlsZGVyX2FwcGVuZF9ldmVudChzZWxmLCBzZWxmLT5zdGFydF9ldmVudF9vYmosIG5vZGUpIDwgMCkKKyAgICAgICAgZ290byBlcnJvcjsKIAogICAgIHJldHVybiBub2RlOwogCkBAIC0yNTE3LDY1ICsyNjEzLDEzIEBACiAgICAgc2VsZi0+bGFzdCA9IHNlbGYtPnRoaXM7CiAgICAgc2VsZi0+dGhpcyA9IGl0ZW07CiAKLSAgICBpZiAoc2VsZi0+ZW5kX2V2ZW50X29iaikgewotICAgICAgICBQeU9iamVjdCogcmVzOwotICAgICAgICBQeU9iamVjdCogYWN0aW9uID0gc2VsZi0+ZW5kX2V2ZW50X29iajsKLSAgICAgICAgUHlPYmplY3QqIG5vZGUgPSAoUHlPYmplY3QqKSBzZWxmLT5sYXN0OwotICAgICAgICByZXMgPSBQeVR1cGxlX1BhY2soMiwgYWN0aW9uLCBub2RlKTsKLSAgICAgICAgaWYgKHJlcykgewotICAgICAgICAgICAgUHlMaXN0X0FwcGVuZChzZWxmLT5ldmVudHMsIHJlcyk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYocmVzKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBQeUVycl9DbGVhcigpOyAvKiBGSVhNRTogcHJvcGFnYXRlIGVycm9yICovCi0gICAgfQorICAgIGlmICh0cmVlYnVpbGRlcl9hcHBlbmRfZXZlbnQoc2VsZiwgc2VsZi0+ZW5kX2V2ZW50X29iaiwgc2VsZi0+bGFzdCkgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIFB5X0lOQ1JFRihzZWxmLT5sYXN0KTsKICAgICByZXR1cm4gKFB5T2JqZWN0Kikgc2VsZi0+bGFzdDsKIH0KIAotTE9DQUwodm9pZCkKLXRyZWVidWlsZGVyX2hhbmRsZV9uYW1lc3BhY2UoVHJlZUJ1aWxkZXJPYmplY3QqIHNlbGYsIGludCBzdGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKnByZWZpeCwgUHlPYmplY3QgKnVyaSkKLXsKLSAgICBQeU9iamVjdCogcmVzOwotICAgIFB5T2JqZWN0KiBhY3Rpb247Ci0gICAgUHlPYmplY3QqIHBhcmNlbDsKLQotICAgIGlmICghc2VsZi0+ZXZlbnRzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoc3RhcnQpIHsKLSAgICAgICAgaWYgKCFzZWxmLT5zdGFydF9uc19ldmVudF9vYmopCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGFjdGlvbiA9IHNlbGYtPnN0YXJ0X25zX2V2ZW50X29iajsKLSAgICAgICAgcGFyY2VsID0gUHlfQnVpbGRWYWx1ZSgiT08iLCBwcmVmaXgsIHVyaSk7Ci0gICAgICAgIGlmICghcGFyY2VsKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBQeV9JTkNSRUYoYWN0aW9uKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoIXNlbGYtPmVuZF9uc19ldmVudF9vYmopCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGFjdGlvbiA9IHNlbGYtPmVuZF9uc19ldmVudF9vYmo7Ci0gICAgICAgIFB5X0lOQ1JFRihhY3Rpb24pOwotICAgICAgICBwYXJjZWwgPSBQeV9Ob25lOwotICAgICAgICBQeV9JTkNSRUYocGFyY2VsKTsKLSAgICB9Ci0KLSAgICByZXMgPSBQeVR1cGxlX05ldygyKTsKLQotICAgIGlmIChyZXMpIHsKLSAgICAgICAgUHlUdXBsZV9TRVRfSVRFTShyZXMsIDAsIGFjdGlvbik7Ci0gICAgICAgIFB5VHVwbGVfU0VUX0lURU0ocmVzLCAxLCBwYXJjZWwpOwotICAgICAgICBQeUxpc3RfQXBwZW5kKHNlbGYtPmV2ZW50cywgcmVzKTsKLSAgICAgICAgUHlfREVDUkVGKHJlcyk7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICBQeV9ERUNSRUYoYWN0aW9uKTsKLSAgICAgICAgUHlfREVDUkVGKHBhcmNlbCk7Ci0gICAgICAgIFB5RXJyX0NsZWFyKCk7IC8qIEZJWE1FOiBwcm9wYWdhdGUgZXJyb3IgKi8KLSAgICB9Ci19Ci0KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiBtZXRob2RzIChpbiBhbHBoYWJldGljYWwgb3JkZXIpICovCiAKQEAgLTI2ODgsMTAgKzI3MzIsMTIgQEAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiAvKiB0aGUgZXhwYXQgaW50ZXJmYWNlICovCiAKLSNpZiBkZWZpbmVkKFVTRV9FWFBBVCkKLQogI2luY2x1ZGUgImV4cGF0LmgiCiAjaW5jbHVkZSAicHlleHBhdC5oIgorCisvKiBUaGUgUHlFeHBhdF9DQVBJIHN0cnVjdHVyZSBpcyBhbiBpbW11dGFibGUgZGlzcGF0Y2ggdGFibGUsIHNvIGl0IGNhbiBiZQorICogY2FjaGVkIGdsb2JhbGx5IHdpdGhvdXQgYmVpbmcgaW4gcGVyLW1vZHVsZSBzdGF0ZS4KKyAqLwogc3RhdGljIHN0cnVjdCBQeUV4cGF0X0NBUEkgKmV4cGF0X2NhcGk7CiAjZGVmaW5lIEVYUEFUKGZ1bmMpIChleHBhdF9jYXBpLT5mdW5jKQogCkBAIC0yNzIwLDcgKzI3NjYsNyBAQAogCiB9IFhNTFBhcnNlck9iamVjdDsKIAotI2RlZmluZSBYTUxQYXJzZXJfQ2hlY2tFeGFjdChvcCkgKFB5X1RZUEUob3ApID09ICZYTUxQYXJzZXJfVHlwZSkKK3N0YXRpYyBQeU9iamVjdCogeG1scGFyc2VyX2RvY3R5cGUoWE1MUGFyc2VyT2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncyk7CiAKIC8qIGhlbHBlcnMgKi8KIApAQCAtMjc1OCw2ICsyODA0LDEwIEBACiAgICAgICAgIGlmIChpICE9IHNpemUpIHsKICAgICAgICAgICAgIC8qIGNvbnZlcnQgdG8gdW5pdmVyc2FsIG5hbWUgKi8KICAgICAgICAgICAgIHRhZyA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgc2l6ZSsxKTsKKyAgICAgICAgICAgIGlmICh0YWcgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihrZXkpOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQogICAgICAgICAgICAgcCA9IFB5Qnl0ZXNfQVNfU1RSSU5HKHRhZyk7CiAgICAgICAgICAgICBwWzBdID0gJ3snOwogICAgICAgICAgICAgbWVtY3B5KHArMSwgc3RyaW5nLCBzaXplKTsKQEAgLTI3OTcsNiArMjg0Nyw3IEBACiBleHBhdF9zZXRfZXJyb3IoZW51bSBYTUxfRXJyb3IgZXJyb3JfY29kZSwgaW50IGxpbmUsIGludCBjb2x1bW4sIGNoYXIgKm1lc3NhZ2UpCiB7CiAgICAgUHlPYmplY3QgKmVycm1zZywgKmVycm9yLCAqcG9zaXRpb24sICpjb2RlOworICAgIGVsZW1lbnR0cmVlc3RhdGUgKnN0ID0gRVRfU1RBVEVfR0xPQkFMOwogCiAgICAgZXJybXNnID0gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIiVzOiBsaW5lICVkLCBjb2x1bW4gJWQiLAogICAgICAgICAgICAgICAgIG1lc3NhZ2UgPyBtZXNzYWdlIDogRVhQQVQoRXJyb3JTdHJpbmcpKGVycm9yX2NvZGUpLApAQCAtMjgwNCw3ICsyODU1LDcgQEAKICAgICBpZiAoZXJybXNnID09IE5VTEwpCiAgICAgICAgIHJldHVybjsKIAotICAgIGVycm9yID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGVsZW1lbnR0cmVlX3BhcnNlZXJyb3Jfb2JqLCAiTyIsIGVycm1zZyk7CisgICAgZXJyb3IgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oc3QtPnBhcnNlZXJyb3Jfb2JqLCAiTyIsIGVycm1zZyk7CiAgICAgUHlfREVDUkVGKGVycm1zZyk7CiAgICAgaWYgKCFlcnJvcikKICAgICAgICAgcmV0dXJuOwpAQCAtMjgzNCw3ICsyODg1LDcgQEAKICAgICB9CiAgICAgUHlfREVDUkVGKHBvc2l0aW9uKTsKIAotICAgIFB5RXJyX1NldE9iamVjdChlbGVtZW50dHJlZV9wYXJzZWVycm9yX29iaiwgZXJyb3IpOworICAgIFB5RXJyX1NldE9iamVjdChzdC0+cGFyc2VlcnJvcl9vYmosIGVycm9yKTsKICAgICBQeV9ERUNSRUYoZXJyb3IpOwogfQogCkBAIC0yODUyLDYgKzI5MDMsOSBAQAogICAgIGlmIChkYXRhX2xlbiA8IDIgfHwgZGF0YV9pblswXSAhPSAnJicpCiAgICAgICAgIHJldHVybjsKIAorICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICByZXR1cm47CisKICAgICBrZXkgPSBQeVVuaWNvZGVfRGVjb2RlVVRGOChkYXRhX2luICsgMSwgZGF0YV9sZW4gLSAyLCAic3RyaWN0Iik7CiAgICAgaWYgKCFrZXkpCiAgICAgICAgIHJldHVybjsKQEAgLTI4OTIsNiArMjk0Niw5IEBACiAgICAgUHlPYmplY3QqIGF0dHJpYjsKICAgICBpbnQgb2s7CiAKKyAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgLyogdGFnIG5hbWUgKi8KICAgICB0YWcgPSBtYWtldW5pdmVyc2FsKHNlbGYsIHRhZ19pbik7CiAgICAgaWYgKCF0YWcpCkBAIC0yOTUwLDYgKzMwMDcsOSBAQAogICAgIFB5T2JqZWN0KiBkYXRhOwogICAgIFB5T2JqZWN0KiByZXM7CiAKKyAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZGF0YSA9IFB5VW5pY29kZV9EZWNvZGVVVEY4KGRhdGFfaW4sIGRhdGFfbGVuLCAic3RyaWN0Iik7CiAgICAgaWYgKCFkYXRhKQogICAgICAgICByZXR1cm47IC8qIHBhcnNlciB3aWxsIGxvb2sgZm9yIGVycm9ycyAqLwpAQCAtMjk3Myw2ICszMDMzLDkgQEAKICAgICBQeU9iamVjdCogdGFnOwogICAgIFB5T2JqZWN0KiByZXMgPSBOVUxMOwogCisgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGlmIChUcmVlQnVpbGRlcl9DaGVja0V4YWN0KHNlbGYtPnRhcmdldCkpCiAgICAgICAgIC8qIHNob3J0Y3V0ICovCiAgICAgICAgIC8qIHRoZSBzdGFuZGFyZCB0cmVlIGJ1aWxkZXIgZG9lc24ndCBsb29rIGF0IHRoZSBlbmQgdGFnICovCkBAIC0yOTk0LDM5ICszMDU3LDM5IEBACiBleHBhdF9zdGFydF9uc19oYW5kbGVyKFhNTFBhcnNlck9iamVjdCogc2VsZiwgY29uc3QgWE1MX0NoYXIqIHByZWZpeCwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWE1MX0NoYXIgKnVyaSkKIHsKLSAgICBQeU9iamVjdCogc3ByZWZpeCA9IE5VTEw7Ci0gICAgUHlPYmplY3QqIHN1cmkgPSBOVUxMOworICAgIFRyZWVCdWlsZGVyT2JqZWN0ICp0YXJnZXQgPSAoVHJlZUJ1aWxkZXJPYmplY3QqKSBzZWxmLT50YXJnZXQ7CisgICAgUHlPYmplY3QgKnBhcmNlbDsKIAotICAgIGlmICh1cmkpCi0gICAgICAgIHN1cmkgPSBQeVVuaWNvZGVfRGVjb2RlVVRGOCh1cmksIHN0cmxlbih1cmkpLCAic3RyaWN0Iik7Ci0gICAgZWxzZQotICAgICAgICBzdXJpID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoIiIpOwotICAgIGlmICghc3VyaSkKKyAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKHByZWZpeCkKLSAgICAgICAgc3ByZWZpeCA9IFB5VW5pY29kZV9EZWNvZGVVVEY4KHByZWZpeCwgc3RybGVuKHByZWZpeCksICJzdHJpY3QiKTsKLSAgICBlbHNlCi0gICAgICAgIHNwcmVmaXggPSBQeVVuaWNvZGVfRnJvbVN0cmluZygiIik7Ci0gICAgaWYgKCFzcHJlZml4KSB7Ci0gICAgICAgIFB5X0RFQ1JFRihzdXJpKTsKKyAgICBpZiAoIXRhcmdldC0+ZXZlbnRzIHx8ICF0YXJnZXQtPnN0YXJ0X25zX2V2ZW50X29iaikKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAotICAgIHRyZWVidWlsZGVyX2hhbmRsZV9uYW1lc3BhY2UoCi0gICAgICAgIChUcmVlQnVpbGRlck9iamVjdCopIHNlbGYtPnRhcmdldCwgMSwgc3ByZWZpeCwgc3VyaQotICAgICAgICApOworICAgIGlmICghdXJpKQorICAgICAgICB1cmkgPSAiIjsKKyAgICBpZiAoIXByZWZpeCkKKyAgICAgICAgcHJlZml4ID0gIiI7CiAKLSAgICBQeV9ERUNSRUYoc3ByZWZpeCk7Ci0gICAgUHlfREVDUkVGKHN1cmkpOworICAgIHBhcmNlbCA9IFB5X0J1aWxkVmFsdWUoInNzIiwgcHJlZml4LCB1cmkpOworICAgIGlmICghcGFyY2VsKQorICAgICAgICByZXR1cm47CisgICAgdHJlZWJ1aWxkZXJfYXBwZW5kX2V2ZW50KHRhcmdldCwgdGFyZ2V0LT5zdGFydF9uc19ldmVudF9vYmosIHBhcmNlbCk7CisgICAgUHlfREVDUkVGKHBhcmNlbCk7CiB9CiAKIHN0YXRpYyB2b2lkCiBleHBhdF9lbmRfbnNfaGFuZGxlcihYTUxQYXJzZXJPYmplY3QqIHNlbGYsIGNvbnN0IFhNTF9DaGFyKiBwcmVmaXhfaW4pCiB7Ci0gICAgdHJlZWJ1aWxkZXJfaGFuZGxlX25hbWVzcGFjZSgKLSAgICAgICAgKFRyZWVCdWlsZGVyT2JqZWN0Kikgc2VsZi0+dGFyZ2V0LCAwLCBOVUxMLCBOVUxMCi0gICAgICAgICk7CisgICAgVHJlZUJ1aWxkZXJPYmplY3QgKnRhcmdldCA9IChUcmVlQnVpbGRlck9iamVjdCopIHNlbGYtPnRhcmdldDsKKworICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIXRhcmdldC0+ZXZlbnRzKQorICAgICAgICByZXR1cm47CisKKyAgICB0cmVlYnVpbGRlcl9hcHBlbmRfZXZlbnQodGFyZ2V0LCB0YXJnZXQtPmVuZF9uc19ldmVudF9vYmosIFB5X05vbmUpOwogfQogCiBzdGF0aWMgdm9pZApAQCAtMzAzNSw2ICszMDk4LDkgQEAKICAgICBQeU9iamVjdCogY29tbWVudDsKICAgICBQeU9iamVjdCogcmVzOwogCisgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGlmIChzZWxmLT5oYW5kbGVfY29tbWVudCkgewogICAgICAgICBjb21tZW50ID0gUHlVbmljb2RlX0RlY29kZVVURjgoY29tbWVudF9pbiwgc3RybGVuKGNvbW1lbnRfaW4pLCAic3RyaWN0Iik7CiAgICAgICAgIGlmIChjb21tZW50KSB7CkBAIC0zMDU3LDYgKzMxMjMsOSBAQAogICAgIFB5T2JqZWN0ICpwYXJzZXJfZG9jdHlwZSA9IE5VTEw7CiAgICAgUHlPYmplY3QgKnJlcyA9IE5VTEw7CiAKKyAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZG9jdHlwZV9uYW1lX29iaiA9IG1ha2V1bml2ZXJzYWwoc2VsZiwgZG9jdHlwZV9uYW1lKTsKICAgICBpZiAoIWRvY3R5cGVfbmFtZV9vYmopCiAgICAgICAgIHJldHVybjsKQEAgLTMwOTAsMjAgKzMxNTksMjEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3R5cGVfbmFtZV9vYmosIHB1YmlkX29iaiwgc3lzaWRfb2JqKTsKICAgICAgICAgUHlfQ0xFQVIocmVzKTsKICAgICB9Ci0KLSAgICAvKiBOb3cgc2VlIGlmIHRoZSBwYXJzZXIgaXRzZWxmIGhhcyBhIGRvY3R5cGUgbWV0aG9kLiBJZiB5ZXMgYW5kIGl0J3MKLSAgICAgKiBhIHN1YmNsYXNzLCBjYWxsIGl0IGJ1dCB3YXJuIGFib3V0IGRlcHJlY2F0aW9uLiBJZiBpdCdzIG5vdCBhIHN1YmNsYXNzCi0gICAgICogKGkuZS4gdmFuaWxsYSBYTUxQYXJzZXIpLCBkbyBub3RoaW5nLgotICAgICAqLwotICAgIHBhcnNlcl9kb2N0eXBlID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhzZWxmX3B5b2JqLCAiZG9jdHlwZSIpOwotICAgIGlmIChwYXJzZXJfZG9jdHlwZSkgewotICAgICAgICBpZiAoIVhNTFBhcnNlcl9DaGVja0V4YWN0KHNlbGZfcHlvYmopKSB7Ci0gICAgICAgICAgICBpZiAoUHlFcnJfV2FybkV4KFB5RXhjX0RlcHJlY2F0aW9uV2FybmluZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGhpcyBtZXRob2Qgb2YgWE1MUGFyc2VyIGlzIGRlcHJlY2F0ZWQuICBEZWZpbmUiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBkb2N0eXBlKCkgbWV0aG9kIG9uIHRoZSBUcmVlQnVpbGRlciB0YXJnZXQuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAxKSA8IDApIHsKKyAgICBlbHNlIHsKKyAgICAgICAgLyogTm93IHNlZSBpZiB0aGUgcGFyc2VyIGl0c2VsZiBoYXMgYSBkb2N0eXBlIG1ldGhvZC4gSWYgeWVzIGFuZCBpdCdzCisgICAgICAgICAqIGEgY3VzdG9tIG1ldGhvZCwgY2FsbCBpdCBidXQgd2FybiBhYm91dCBkZXByZWNhdGlvbi4gSWYgaXQncyBvbmx5CisgICAgICAgICAqIHRoZSB2YW5pbGxhIFhNTFBhcnNlciBtZXRob2QsIGRvIG5vdGhpbmcuCisgICAgICAgICAqLworICAgICAgICBwYXJzZXJfZG9jdHlwZSA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcoc2VsZl9weW9iaiwgImRvY3R5cGUiKTsKKyAgICAgICAgaWYgKHBhcnNlcl9kb2N0eXBlICYmCisgICAgICAgICAgICAhKFB5Q0Z1bmN0aW9uX0NoZWNrKHBhcnNlcl9kb2N0eXBlKSAmJgorICAgICAgICAgICAgICBQeUNGdW5jdGlvbl9HRVRfU0VMRihwYXJzZXJfZG9jdHlwZSkgPT0gc2VsZl9weW9iaiAmJgorICAgICAgICAgICAgICBQeUNGdW5jdGlvbl9HRVRfRlVOQ1RJT04ocGFyc2VyX2RvY3R5cGUpID09CisgICAgICAgICAgICAgICAgICAgIChQeUNGdW5jdGlvbikgeG1scGFyc2VyX2RvY3R5cGUpKSB7CisgICAgICAgICAgICByZXMgPSB4bWxwYXJzZXJfZG9jdHlwZShzZWxmLCBOVUxMKTsKKyAgICAgICAgICAgIGlmICghcmVzKQogICAgICAgICAgICAgICAgIGdvdG8gY2xlYXI7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBQeV9ERUNSRUYocmVzKTsKICAgICAgICAgICAgIHJlcyA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihwYXJzZXJfZG9jdHlwZSwgIk9PTyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdHlwZV9uYW1lX29iaiwgcHViaWRfb2JqLCBzeXNpZF9vYmopOwogICAgICAgICAgICAgUHlfQ0xFQVIocmVzKTsKQEAgLTMxMjUsNiArMzE5NSw5IEBACiAgICAgUHlPYmplY3QqIGRhdGE7CiAgICAgUHlPYmplY3QqIHJlczsKIAorICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICByZXR1cm47CisKICAgICBpZiAoc2VsZi0+aGFuZGxlX3BpKSB7CiAgICAgICAgIHRhcmdldCA9IFB5VW5pY29kZV9EZWNvZGVVVEY4KHRhcmdldF9pbiwgc3RybGVuKHRhcmdldF9pbiksICJzdHJpY3QiKTsKICAgICAgICAgZGF0YSA9IFB5VW5pY29kZV9EZWNvZGVVVEY4KGRhdGFfaW4sIHN0cmxlbihkYXRhX2luKSwgInN0cmljdCIpOwpAQCAtMzI5Nyw2ICszMzcwLDcgQEAKIHsKICAgICBpbnQgb2s7CiAKKyAgICBhc3NlcnQoIVB5RXJyX09jY3VycmVkKCkpOwogICAgIG9rID0gRVhQQVQoUGFyc2UpKHNlbGYtPnBhcnNlciwgZGF0YSwgZGF0YV9sZW4sIGZpbmFsKTsKIAogICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQpAQCAtMzMzMSwxMSArMzQwNSwxNCBAQAogICAgIGlmIChUcmVlQnVpbGRlcl9DaGVja0V4YWN0KHNlbGYtPnRhcmdldCkpIHsKICAgICAgICAgUHlfREVDUkVGKHJlcyk7CiAgICAgICAgIHJldHVybiB0cmVlYnVpbGRlcl9kb25lKChUcmVlQnVpbGRlck9iamVjdCopIHNlbGYtPnRhcmdldCk7Ci0gICAgfSBpZiAoc2VsZi0+aGFuZGxlX2Nsb3NlKSB7CisgICAgfQorICAgIGVsc2UgaWYgKHNlbGYtPmhhbmRsZV9jbG9zZSkgewogICAgICAgICBQeV9ERUNSRUYocmVzKTsKICAgICAgICAgcmV0dXJuIFB5T2JqZWN0X0NhbGxGdW5jdGlvbihzZWxmLT5oYW5kbGVfY2xvc2UsICIiKTsKLSAgICB9IGVsc2UKKyAgICB9CisgICAgZWxzZSB7CiAgICAgICAgIHJldHVybiByZXM7CisgICAgfQogfQogCiBzdGF0aWMgUHlPYmplY3QqCkBAIC0zMzczLDEwICszNDUwLDkgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0KgoteG1scGFyc2VyX3BhcnNlKFhNTFBhcnNlck9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MpCit4bWxwYXJzZXJfcGFyc2Vfd2hvbGUoWE1MUGFyc2VyT2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncykKIHsKLSAgICAvKiAoaW50ZXJuYWwpIHBhcnNlIHVudGlsIGVuZCBvZiBpbnB1dCBzdHJlYW0gKi8KLQorICAgIC8qIChpbnRlcm5hbCkgcGFyc2UgdGhlIHdob2xlIGlucHV0LCB1bnRpbCBlbmQgb2Ygc3RyZWFtICovCiAgICAgUHlPYmplY3QqIHJlYWRlcjsKICAgICBQeU9iamVjdCogYnVmZmVyOwogICAgIFB5T2JqZWN0KiB0ZW1wOwpAQCAtMzQwMyw3ICszNDc5LDcgQEAKIAogICAgICAgICBpZiAoUHlVbmljb2RlX0NoZWNrRXhhY3QoYnVmZmVyKSkgewogICAgICAgICAgICAgLyogQSB1bmljb2RlIG9iamVjdCBpcyBlbmNvZGVkIGludG8gYnl0ZXMgdXNpbmcgVVRGLTggKi8KLSAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfR0VUX1NJWkUoYnVmZmVyKSA9PSAwKSB7CisgICAgICAgICAgICBpZiAoUHlVbmljb2RlX0dFVF9MRU5HVEgoYnVmZmVyKSA9PSAwKSB7CiAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGJ1ZmZlcik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC0zNDIxLDggKzM0OTcsMTQgQEAKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKKyAgICAgICAgaWYgKFB5Qnl0ZXNfR0VUX1NJWkUoYnVmZmVyKSA+IElOVF9NQVgpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihidWZmZXIpOworICAgICAgICAgICAgUHlfREVDUkVGKHJlYWRlcik7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwgInNpemUgZG9lcyBub3QgZml0IGluIGFuIGludCIpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KICAgICAgICAgcmVzID0gZXhwYXRfcGFyc2UoCi0gICAgICAgICAgICBzZWxmLCBQeUJ5dGVzX0FTX1NUUklORyhidWZmZXIpLCBQeUJ5dGVzX0dFVF9TSVpFKGJ1ZmZlciksIDAKKyAgICAgICAgICAgIHNlbGYsIFB5Qnl0ZXNfQVNfU1RSSU5HKGJ1ZmZlciksIChpbnQpUHlCeXRlc19HRVRfU0laRShidWZmZXIpLCAwCiAgICAgICAgICAgICApOwogCiAgICAgICAgIFB5X0RFQ1JFRihidWZmZXIpOwpAQCAtMzQ1MCw2ICszNTMyLDEyIEBACiBzdGF0aWMgUHlPYmplY3QqCiB4bWxwYXJzZXJfZG9jdHlwZShYTUxQYXJzZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogeworICAgIGlmIChQeUVycl9XYXJuRXgoUHlFeGNfRGVwcmVjYXRpb25XYXJuaW5nLAorICAgICAgICAgICAgICAgICAgICAgIlRoaXMgbWV0aG9kIG9mIFhNTFBhcnNlciBpcyBkZXByZWNhdGVkLiAgRGVmaW5lIgorICAgICAgICAgICAgICAgICAgICAgIiBkb2N0eXBlKCkgbWV0aG9kIG9uIHRoZSBUcmVlQnVpbGRlciB0YXJnZXQuIiwKKyAgICAgICAgICAgICAgICAgICAgIDEpIDwgMCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKQEAgLTM0NTcsMTQgKzM1NDUsMTQgQEAKIHhtbHBhcnNlcl9zZXRldmVudHMoWE1MUGFyc2VyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCogYXJncykKIHsKICAgICAvKiBhY3RpdmF0ZSBlbGVtZW50IGV2ZW50IHJlcG9ydGluZyAqLworICAgIFB5X3NzaXplX3QgaSwgc2VxbGVuOworICAgIFRyZWVCdWlsZGVyT2JqZWN0ICp0YXJnZXQ7CiAKLSAgICBQeV9zc2l6ZV90IGk7Ci0gICAgVHJlZUJ1aWxkZXJPYmplY3QqIHRhcmdldDsKLQotICAgIFB5T2JqZWN0KiBldmVudHM7IC8qIGV2ZW50IGNvbGxlY3RvciAqLwotICAgIFB5T2JqZWN0KiBldmVudF9zZXQgPSBQeV9Ob25lOwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTyF8Tzpfc2V0ZXZlbnRzIiwgICZQeUxpc3RfVHlwZSwgJmV2ZW50cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJmV2ZW50X3NldCkpCisgICAgUHlPYmplY3QgKmV2ZW50c19xdWV1ZTsKKyAgICBQeU9iamVjdCAqZXZlbnRzX3RvX3JlcG9ydCA9IFB5X05vbmU7CisgICAgUHlPYmplY3QgKmV2ZW50c19zZXE7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPIXxPOl9zZXRldmVudHMiLCAgJlB5TGlzdF9UeXBlLCAmZXZlbnRzX3F1ZXVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAmZXZlbnRzX3RvX3JlcG9ydCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgaWYgKCFUcmVlQnVpbGRlcl9DaGVja0V4YWN0KHNlbGYtPnRhcmdldCkpIHsKQEAgLTM0NzgsOSArMzU2Niw5IEBACiAKICAgICB0YXJnZXQgPSAoVHJlZUJ1aWxkZXJPYmplY3QqKSBzZWxmLT50YXJnZXQ7CiAKLSAgICBQeV9JTkNSRUYoZXZlbnRzKTsKKyAgICBQeV9JTkNSRUYoZXZlbnRzX3F1ZXVlKTsKICAgICBQeV9YREVDUkVGKHRhcmdldC0+ZXZlbnRzKTsKLSAgICB0YXJnZXQtPmV2ZW50cyA9IGV2ZW50czsKKyAgICB0YXJnZXQtPmV2ZW50cyA9IGV2ZW50c19xdWV1ZTsKIAogICAgIC8qIGNsZWFyIG91dCBleGlzdGluZyBldmVudHMgKi8KICAgICBQeV9DTEVBUih0YXJnZXQtPnN0YXJ0X2V2ZW50X29iaik7CkBAIC0zNDg4LDc1ICszNTc2LDcxIEBACiAgICAgUHlfQ0xFQVIodGFyZ2V0LT5zdGFydF9uc19ldmVudF9vYmopOwogICAgIFB5X0NMRUFSKHRhcmdldC0+ZW5kX25zX2V2ZW50X29iaik7CiAKLSAgICBpZiAoZXZlbnRfc2V0ID09IFB5X05vbmUpIHsKKyAgICBpZiAoZXZlbnRzX3RvX3JlcG9ydCA9PSBQeV9Ob25lKSB7CiAgICAgICAgIC8qIGRlZmF1bHQgaXMgImVuZCIgb25seSAqLwogICAgICAgICB0YXJnZXQtPmVuZF9ldmVudF9vYmogPSBQeVVuaWNvZGVfRnJvbVN0cmluZygiZW5kIik7CiAgICAgICAgIFB5X1JFVFVSTl9OT05FOwogICAgIH0KIAotICAgIGlmICghUHlUdXBsZV9DaGVjayhldmVudF9zZXQpKSAvKiBGSVhNRTogaGFuZGxlIGFyYml0cmFyeSBzZXF1ZW5jZXMgKi8KLSAgICAgICAgZ290byBlcnJvcjsKKyAgICBpZiAoIShldmVudHNfc2VxID0gUHlTZXF1ZW5jZV9GYXN0KGV2ZW50c190b19yZXBvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXZlbnRzIG11c3QgYmUgYSBzZXF1ZW5jZSIpKSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAKLSAgICBmb3IgKGkgPSAwOyBpIDwgUHlUdXBsZV9HRVRfU0laRShldmVudF9zZXQpOyBpKyspIHsKLSAgICAgICAgUHlPYmplY3QqIGl0ZW0gPSBQeVR1cGxlX0dFVF9JVEVNKGV2ZW50X3NldCwgaSk7Ci0gICAgICAgIGNoYXIqIGV2ZW50OwotICAgICAgICBpZiAoUHlVbmljb2RlX0NoZWNrKGl0ZW0pKSB7Ci0gICAgICAgICAgICBldmVudCA9IF9QeVVuaWNvZGVfQXNTdHJpbmcoaXRlbSk7Ci0gICAgICAgICAgICBpZiAoZXZlbnQgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICB9IGVsc2UgaWYgKFB5Qnl0ZXNfQ2hlY2soaXRlbSkpCi0gICAgICAgICAgICBldmVudCA9IFB5Qnl0ZXNfQVNfU1RSSU5HKGl0ZW0pOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgc2VxbGVuID0gUHlTZXF1ZW5jZV9TaXplKGV2ZW50c19zZXEpOworICAgIGZvciAoaSA9IDA7IGkgPCBzZXFsZW47ICsraSkgeworICAgICAgICBQeU9iamVjdCAqZXZlbnRfbmFtZV9vYmogPSBQeVNlcXVlbmNlX0Zhc3RfR0VUX0lURU0oZXZlbnRzX3NlcSwgaSk7CisgICAgICAgIGNoYXIgKmV2ZW50X25hbWUgPSBOVUxMOworICAgICAgICBpZiAoUHlVbmljb2RlX0NoZWNrKGV2ZW50X25hbWVfb2JqKSkgeworICAgICAgICAgICAgZXZlbnRfbmFtZSA9IF9QeVVuaWNvZGVfQXNTdHJpbmcoZXZlbnRfbmFtZV9vYmopOworICAgICAgICB9IGVsc2UgaWYgKFB5Qnl0ZXNfQ2hlY2soZXZlbnRfbmFtZV9vYmopKSB7CisgICAgICAgICAgICBldmVudF9uYW1lID0gUHlCeXRlc19BU19TVFJJTkcoZXZlbnRfbmFtZV9vYmopOwogICAgICAgICB9Ci0gICAgICAgIGlmIChzdHJjbXAoZXZlbnQsICJzdGFydCIpID09IDApIHsKLSAgICAgICAgICAgIFB5X0lOQ1JFRihpdGVtKTsKLSAgICAgICAgICAgIHRhcmdldC0+c3RhcnRfZXZlbnRfb2JqID0gaXRlbTsKLSAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAoZXZlbnQsICJlbmQiKSA9PSAwKSB7Ci0gICAgICAgICAgICBQeV9JTkNSRUYoaXRlbSk7CisKKyAgICAgICAgaWYgKGV2ZW50X25hbWUgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlfREVDUkVGKGV2ZW50c19zZXEpOworICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsICJpbnZhbGlkIGV2ZW50cyBzZXF1ZW5jZSIpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0gZWxzZSBpZiAoc3RyY21wKGV2ZW50X25hbWUsICJzdGFydCIpID09IDApIHsKKyAgICAgICAgICAgIFB5X0lOQ1JFRihldmVudF9uYW1lX29iaik7CisgICAgICAgICAgICB0YXJnZXQtPnN0YXJ0X2V2ZW50X29iaiA9IGV2ZW50X25hbWVfb2JqOworICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcChldmVudF9uYW1lLCAiZW5kIikgPT0gMCkgeworICAgICAgICAgICAgUHlfSU5DUkVGKGV2ZW50X25hbWVfb2JqKTsKICAgICAgICAgICAgIFB5X1hERUNSRUYodGFyZ2V0LT5lbmRfZXZlbnRfb2JqKTsKLSAgICAgICAgICAgIHRhcmdldC0+ZW5kX2V2ZW50X29iaiA9IGl0ZW07Ci0gICAgICAgIH0gZWxzZSBpZiAoc3RyY21wKGV2ZW50LCAic3RhcnQtbnMiKSA9PSAwKSB7Ci0gICAgICAgICAgICBQeV9JTkNSRUYoaXRlbSk7CisgICAgICAgICAgICB0YXJnZXQtPmVuZF9ldmVudF9vYmogPSBldmVudF9uYW1lX29iajsKKyAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAoZXZlbnRfbmFtZSwgInN0YXJ0LW5zIikgPT0gMCkgeworICAgICAgICAgICAgUHlfSU5DUkVGKGV2ZW50X25hbWVfb2JqKTsKICAgICAgICAgICAgIFB5X1hERUNSRUYodGFyZ2V0LT5zdGFydF9uc19ldmVudF9vYmopOwotICAgICAgICAgICAgdGFyZ2V0LT5zdGFydF9uc19ldmVudF9vYmogPSBpdGVtOworICAgICAgICAgICAgdGFyZ2V0LT5zdGFydF9uc19ldmVudF9vYmogPSBldmVudF9uYW1lX29iajsKICAgICAgICAgICAgIEVYUEFUKFNldE5hbWVzcGFjZURlY2xIYW5kbGVyKSgKICAgICAgICAgICAgICAgICBzZWxmLT5wYXJzZXIsCiAgICAgICAgICAgICAgICAgKFhNTF9TdGFydE5hbWVzcGFjZURlY2xIYW5kbGVyKSBleHBhdF9zdGFydF9uc19oYW5kbGVyLAogICAgICAgICAgICAgICAgIChYTUxfRW5kTmFtZXNwYWNlRGVjbEhhbmRsZXIpIGV4cGF0X2VuZF9uc19oYW5kbGVyCiAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAoZXZlbnQsICJlbmQtbnMiKSA9PSAwKSB7Ci0gICAgICAgICAgICBQeV9JTkNSRUYoaXRlbSk7CisgICAgICAgIH0gZWxzZSBpZiAoc3RyY21wKGV2ZW50X25hbWUsICJlbmQtbnMiKSA9PSAwKSB7CisgICAgICAgICAgICBQeV9JTkNSRUYoZXZlbnRfbmFtZV9vYmopOwogICAgICAgICAgICAgUHlfWERFQ1JFRih0YXJnZXQtPmVuZF9uc19ldmVudF9vYmopOwotICAgICAgICAgICAgdGFyZ2V0LT5lbmRfbnNfZXZlbnRfb2JqID0gaXRlbTsKKyAgICAgICAgICAgIHRhcmdldC0+ZW5kX25zX2V2ZW50X29iaiA9IGV2ZW50X25hbWVfb2JqOwogICAgICAgICAgICAgRVhQQVQoU2V0TmFtZXNwYWNlRGVjbEhhbmRsZXIpKAogICAgICAgICAgICAgICAgIHNlbGYtPnBhcnNlciwKICAgICAgICAgICAgICAgICAoWE1MX1N0YXJ0TmFtZXNwYWNlRGVjbEhhbmRsZXIpIGV4cGF0X3N0YXJ0X25zX2hhbmRsZXIsCiAgICAgICAgICAgICAgICAgKFhNTF9FbmROYW1lc3BhY2VEZWNsSGFuZGxlcikgZXhwYXRfZW5kX25zX2hhbmRsZXIKICAgICAgICAgICAgICAgICApOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgUHlFcnJfRm9ybWF0KAotICAgICAgICAgICAgICAgIFB5RXhjX1ZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgInVua25vd24gZXZlbnQgJyVzJyIsIGV2ZW50Ci0gICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihldmVudHNfc2VxKTsKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLCAidW5rbm93biBldmVudCAnJXMnIiwgZXZlbnRfbmFtZSk7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQogICAgIH0KIAorICAgIFB5X0RFQ1JFRihldmVudHNfc2VxKTsKICAgICBQeV9SRVRVUk5fTk9ORTsKLQotICBlcnJvcjoKLSAgICBQeUVycl9TZXRTdHJpbmcoCi0gICAgICAgIFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgImludmFsaWQgZXZlbnQgdHVwbGUiCi0gICAgICAgICk7Ci0gICAgcmV0dXJuIE5VTEw7CiB9CiAKIHN0YXRpYyBQeU1ldGhvZERlZiB4bWxwYXJzZXJfbWV0aG9kc1tdID0gewogICAgIHsiZmVlZCIsIChQeUNGdW5jdGlvbikgeG1scGFyc2VyX2ZlZWQsIE1FVEhfT30sCiAgICAgeyJjbG9zZSIsIChQeUNGdW5jdGlvbikgeG1scGFyc2VyX2Nsb3NlLCBNRVRIX1ZBUkFSR1N9LAotICAgIHsiX3BhcnNlIiwgKFB5Q0Z1bmN0aW9uKSB4bWxwYXJzZXJfcGFyc2UsIE1FVEhfVkFSQVJHU30sCisgICAgeyJfcGFyc2Vfd2hvbGUiLCAoUHlDRnVuY3Rpb24pIHhtbHBhcnNlcl9wYXJzZV93aG9sZSwgTUVUSF9WQVJBUkdTfSwKICAgICB7Il9zZXRldmVudHMiLCAoUHlDRnVuY3Rpb24pIHhtbHBhcnNlcl9zZXRldmVudHMsIE1FVEhfVkFSQVJHU30sCiAgICAgeyJkb2N0eXBlIiwgKFB5Q0Z1bmN0aW9uKSB4bWxwYXJzZXJfZG9jdHlwZSwgTUVUSF9WQVJBUkdTfSwKICAgICB7TlVMTCwgTlVMTH0KQEAgLTM2MjgsOCArMzcxMiw2IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZnJlZSAqLwogfTsKIAotI2VuZGlmCi0KIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiAvKiBweXRob24gbW9kdWxlIGludGVyZmFjZSAqLwogCkBAIC0zNjM5LDIyICszNzIxLDI5IEBACiB9OwogCiAKLXN0YXRpYyBzdHJ1Y3QgUHlNb2R1bGVEZWYgX2VsZW1lbnR0cmVlbW9kdWxlID0gewotICAgICAgICBQeU1vZHVsZURlZl9IRUFEX0lOSVQsCi0gICAgICAgICJfZWxlbWVudHRyZWUiLAotICAgICAgICBOVUxMLAotICAgICAgICAtMSwKLSAgICAgICAgX2Z1bmN0aW9ucywKLSAgICAgICAgTlVMTCwKLSAgICAgICAgTlVMTCwKLSAgICAgICAgTlVMTCwKLSAgICAgICAgTlVMTAorc3RhdGljIHN0cnVjdCBQeU1vZHVsZURlZiBlbGVtZW50dHJlZW1vZHVsZSA9IHsKKyAgICBQeU1vZHVsZURlZl9IRUFEX0lOSVQsCisgICAgIl9lbGVtZW50dHJlZSIsCisgICAgTlVMTCwKKyAgICBzaXplb2YoZWxlbWVudHRyZWVzdGF0ZSksCisgICAgX2Z1bmN0aW9ucywKKyAgICBOVUxMLAorICAgIGVsZW1lbnR0cmVlX3RyYXZlcnNlLAorICAgIGVsZW1lbnR0cmVlX2NsZWFyLAorICAgIGVsZW1lbnR0cmVlX2ZyZWUKIH07CiAKIFB5TU9ESU5JVF9GVU5DCiBQeUluaXRfX2VsZW1lbnR0cmVlKHZvaWQpCiB7CiAgICAgUHlPYmplY3QgKm0sICp0ZW1wOworICAgIGVsZW1lbnR0cmVlc3RhdGUgKnN0OworCisgICAgbSA9IFB5U3RhdGVfRmluZE1vZHVsZSgmZWxlbWVudHRyZWVtb2R1bGUpOworICAgIGlmIChtKSB7CisgICAgICAgIFB5X0lOQ1JFRihtKTsKKyAgICAgICAgcmV0dXJuIG07CisgICAgfQogCiAgICAgLyogSW5pdGlhbGl6ZSBvYmplY3QgdHlwZXMgKi8KICAgICBpZiAoUHlUeXBlX1JlYWR5KCZFbGVtZW50SXRlcl9UeXBlKSA8IDApCkBAIC0zNjYzLDIxICszNzUyLDIwIEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmIChQeVR5cGVfUmVhZHkoJkVsZW1lbnRfVHlwZSkgPCAwKQogICAgICAgICByZXR1cm4gTlVMTDsKLSNpZiBkZWZpbmVkKFVTRV9FWFBBVCkKICAgICBpZiAoUHlUeXBlX1JlYWR5KCZYTUxQYXJzZXJfVHlwZSkgPCAwKQogICAgICAgICByZXR1cm4gTlVMTDsKLSNlbmRpZgogCi0gICAgbSA9IFB5TW9kdWxlX0NyZWF0ZSgmX2VsZW1lbnR0cmVlbW9kdWxlKTsKKyAgICBtID0gUHlNb2R1bGVfQ3JlYXRlKCZlbGVtZW50dHJlZW1vZHVsZSk7CiAgICAgaWYgKCFtKQogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBzdCA9IEVUX1NUQVRFKG0pOwogCiAgICAgaWYgKCEodGVtcCA9IFB5SW1wb3J0X0ltcG9ydE1vZHVsZSgiY29weSIpKSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgZWxlbWVudHRyZWVfZGVlcGNvcHlfb2JqID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyh0ZW1wLCAiZGVlcGNvcHkiKTsKKyAgICBzdC0+ZGVlcGNvcHlfb2JqID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyh0ZW1wLCAiZGVlcGNvcHkiKTsKICAgICBQeV9YREVDUkVGKHRlbXApOwogCi0gICAgaWYgKCEoZWxlbWVudHBhdGhfb2JqID0gUHlJbXBvcnRfSW1wb3J0TW9kdWxlKCJ4bWwuZXRyZWUuRWxlbWVudFBhdGgiKSkpCisgICAgaWYgKCEoc3QtPmVsZW1lbnRwYXRoX29iaiA9IFB5SW1wb3J0X0ltcG9ydE1vZHVsZSgieG1sLmV0cmVlLkVsZW1lbnRQYXRoIikpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIC8qIGxpbmsgYWdhaW5zdCBweWV4cGF0ICovCkBAIC0zNjk3LDExICszNzg1LDExIEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIGVsZW1lbnR0cmVlX3BhcnNlZXJyb3Jfb2JqID0gUHlFcnJfTmV3RXhjZXB0aW9uKAorICAgIHN0LT5wYXJzZWVycm9yX29iaiA9IFB5RXJyX05ld0V4Y2VwdGlvbigKICAgICAgICAgInhtbC5ldHJlZS5FbGVtZW50VHJlZS5QYXJzZUVycm9yIiwgUHlFeGNfU3ludGF4RXJyb3IsIE5VTEwKICAgICAgICAgKTsKLSAgICBQeV9JTkNSRUYoZWxlbWVudHRyZWVfcGFyc2VlcnJvcl9vYmopOwotICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAiUGFyc2VFcnJvciIsIGVsZW1lbnR0cmVlX3BhcnNlZXJyb3Jfb2JqKTsKKyAgICBQeV9JTkNSRUYoc3QtPnBhcnNlZXJyb3Jfb2JqKTsKKyAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgIlBhcnNlRXJyb3IiLCBzdC0+cGFyc2VlcnJvcl9vYmopOwogCiAgICAgUHlfSU5DUkVGKChQeU9iamVjdCAqKSZFbGVtZW50X1R5cGUpOwogICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAiRWxlbWVudCIsIChQeU9iamVjdCAqKSZFbGVtZW50X1R5cGUpOwpAQCAtMzcwOSwxMCArMzc5Nyw4IEBACiAgICAgUHlfSU5DUkVGKChQeU9iamVjdCAqKSZUcmVlQnVpbGRlcl9UeXBlKTsKICAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgIlRyZWVCdWlsZGVyIiwgKFB5T2JqZWN0ICopJlRyZWVCdWlsZGVyX1R5cGUpOwogCi0jaWYgZGVmaW5lZChVU0VfRVhQQVQpCiAgICAgUHlfSU5DUkVGKChQeU9iamVjdCAqKSZYTUxQYXJzZXJfVHlwZSk7CiAgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJYTUxQYXJzZXIiLCAoUHlPYmplY3QgKikmWE1MUGFyc2VyX1R5cGUpOwotI2VuZGlmCiAKICAgICByZXR1cm4gbTsKIH0KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2ZyZWV6ZV9pbXBvcnRsaWIuYyBiL01vZHVsZXMvX2ZyZWV6ZV9pbXBvcnRsaWIuYwppbmRleCA4ZjA3YTg5Li41N2IxYWMwIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19mcmVlemVfaW1wb3J0bGliLmMKKysrIGIvTW9kdWxlcy9fZnJlZXplX2ltcG9ydGxpYi5jCkBAIC0xNyw3ICsxNyw3IEBACiAgICBvZiBmcm96ZW4gbW9kdWxlcyBpbnN0ZWFkLCBsZWZ0IGRlbGliZXJhdGVseSBibGFuayBzbyBhcyB0byBhdm9pZAogICAgdW5pbnRlbnRpb25hbCBpbXBvcnQgb2YgYSBzdGFsZSB2ZXJzaW9uIG9mIF9mcm96ZW5faW1wb3J0bGliLiAqLwogCi1zdGF0aWMgc3RydWN0IF9mcm96ZW4gX1B5SW1wb3J0X0Zyb3plbk1vZHVsZXNbXSA9IHsKK2NvbnN0IHN0YXRpYyBzdHJ1Y3QgX2Zyb3plbiBfUHlJbXBvcnRfRnJvemVuTW9kdWxlc1tdID0gewogICAgIHswLCAwLCAwfSAvKiBzZW50aW5lbCAqLwogfTsKIApAQCAtMjUsNyArMjUsNyBAQAogLyogT24gV2luZG93cywgdGhpcyBsaW5rcyB3aXRoIHRoZSByZWd1bGFyIHB5dGhvblhZLmRsbCwgc28gdGhpcyB2YXJpYWJsZSBjb21lcwogICAgZnJvbSBmcm96ZW4ub2JqLiBJbiB0aGUgTWFrZWZpbGUsIGZyb3plbi5vIGlzIG5vdCBsaW5rZWQgaW50byB0aGlzIGV4ZWN1dGFibGUsCiAgICBzbyB3ZSBkZWZpbmUgdGhlIHZhcmlhYmxlIGhlcmUuICovCi1zdHJ1Y3QgX2Zyb3plbiAqUHlJbXBvcnRfRnJvemVuTW9kdWxlczsKK2NvbnN0IHN0cnVjdCBfZnJvemVuICpQeUltcG9ydF9Gcm96ZW5Nb2R1bGVzOwogI2VuZGlmCiAKIGNvbnN0IGNoYXIgaGVhZGVyW10gPSAiLyogQXV0by1nZW5lcmF0ZWQgYnkgTW9kdWxlcy9fZnJlZXplX2ltcG9ydGxpYi5jICovIjsKQEAgLTEwNiw3ICsxMDYsNyBAQAogICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KICAgICBmcHJpbnRmKG91dGZpbGUsICIlc1xuIiwgaGVhZGVyKTsKLSAgICBmcHJpbnRmKG91dGZpbGUsICJ1bnNpZ25lZCBjaGFyIF9QeV9NX19pbXBvcnRsaWJbXSA9IHtcbiIpOworICAgIGZwcmludGYob3V0ZmlsZSwgImNvbnN0IHVuc2lnbmVkIGNoYXIgX1B5X01fX2ltcG9ydGxpYltdID0ge1xuIik7CiAgICAgZm9yIChuID0gMDsgbiA8IGRhdGFfc2l6ZTsgbiArPSAxNikgewogICAgICAgICBzaXplX3QgaSwgZW5kID0gUHlfTUlOKG4gKyAxNiwgZGF0YV9zaXplKTsKICAgICAgICAgZnByaW50ZihvdXRmaWxlLCAiICAgICIpOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fZnVuY3Rvb2xzbW9kdWxlLmMgYi9Nb2R1bGVzL19mdW5jdG9vbHNtb2R1bGUuYwppbmRleCA1N2RmYmEwLi4yNGRhNjc3IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19mdW5jdG9vbHNtb2R1bGUuYworKysgYi9Nb2R1bGVzL19mdW5jdG9vbHNtb2R1bGUuYwpAQCAtNTQsMTcgKzU0LDEzIEBACiAgICAgICAgIFB5X0RFQ1JFRihwdG8pOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgaWYgKGt3ICE9IE5VTEwpIHsKLSAgICAgICAgcHRvLT5rdyA9IFB5RGljdF9Db3B5KGt3KTsKLSAgICAgICAgaWYgKHB0by0+a3cgPT0gTlVMTCkgewotICAgICAgICAgICAgUHlfREVDUkVGKHB0byk7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIHB0by0+a3cgPSBQeV9Ob25lOwotICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CisgICAgcHRvLT5rdyA9IChrdyAhPSBOVUxMKSA/IFB5RGljdF9Db3B5KGt3KSA6IFB5RGljdF9OZXcoKTsKKyAgICBpZiAocHRvLT5rdyA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRihwdG8pOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKKwogICAgIHB0by0+d2Vha3JlZmxpc3QgPSBOVUxMOwogICAgIHB0by0+ZGljdCA9IE5VTEw7CiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2dkYm1tb2R1bGUuYyBiL01vZHVsZXMvX2dkYm1tb2R1bGUuYwppbmRleCAwYmQ1OWM4Li4yMjllMTZlIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19nZGJtbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9fZ2RibW1vZHVsZS5jCkBAIC03OSw3ICs3OSw3IEBACiAvKiBNZXRob2RzICovCiAKIHN0YXRpYyB2b2lkCi1kYm1fZGVhbGxvYyhyZWdpc3RlciBkYm1vYmplY3QgKmRwKQorZGJtX2RlYWxsb2MoZGJtb2JqZWN0ICpkcCkKIHsKICAgICBpZiAoZHAtPmRpX2RibSkKICAgICAgICAgZ2RibV9jbG9zZShkcC0+ZGlfZGJtKTsKQEAgLTExMiw3ICsxMTIsNyBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotZGJtX3N1YnNjcmlwdChkYm1vYmplY3QgKmRwLCByZWdpc3RlciBQeU9iamVjdCAqa2V5KQorZGJtX3N1YnNjcmlwdChkYm1vYmplY3QgKmRwLCBQeU9iamVjdCAqa2V5KQogewogICAgIFB5T2JqZWN0ICp2OwogICAgIGRhdHVtIGRyZWMsIGtyZWM7CkBAIC0yMzIsNyArMjMyLDcgQEAKIENsb3NlcyB0aGUgZGF0YWJhc2UuIik7CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1kYm1fY2xvc2UocmVnaXN0ZXIgZGJtb2JqZWN0ICpkcCwgUHlPYmplY3QgKnVudXNlZCkKK2RibV9jbG9zZShkYm1vYmplY3QgKmRwLCBQeU9iamVjdCAqdW51c2VkKQogewogICAgIGlmIChkcC0+ZGlfZGJtKQogICAgICAgICBnZGJtX2Nsb3NlKGRwLT5kaV9kYm0pOwpAQCAtMjQ3LDkgKzI0Nyw5IEBACiBHZXQgYSBsaXN0IG9mIGFsbCBrZXlzIGluIHRoZSBkYXRhYmFzZS4iKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLWRibV9rZXlzKHJlZ2lzdGVyIGRibW9iamVjdCAqZHAsIFB5T2JqZWN0ICp1bnVzZWQpCitkYm1fa2V5cyhkYm1vYmplY3QgKmRwLCBQeU9iamVjdCAqdW51c2VkKQogewotICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICp2LCAqaXRlbTsKKyAgICBQeU9iamVjdCAqdiwgKml0ZW07CiAgICAgZGF0dW0ga2V5LCBuZXh0a2V5OwogICAgIGludCBlcnI7CiAKQEAgLTMzNyw5ICszMzcsOSBAQAogcmV0dXJucyB0aGUgc3RhcnRpbmcga2V5LiIpOwogCiBzdGF0aWMgUHlPYmplY3QgKgotZGJtX2ZpcnN0a2V5KHJlZ2lzdGVyIGRibW9iamVjdCAqZHAsIFB5T2JqZWN0ICp1bnVzZWQpCitkYm1fZmlyc3RrZXkoZGJtb2JqZWN0ICpkcCwgUHlPYmplY3QgKnVudXNlZCkKIHsKLSAgICByZWdpc3RlciBQeU9iamVjdCAqdjsKKyAgICBQeU9iamVjdCAqdjsKICAgICBkYXR1bSBrZXk7CiAKICAgICBjaGVja19kYm1vYmplY3Rfb3BlbihkcCk7CkBAIC0zNjcsOSArMzY3LDkgQEAKICAgICAgICAgICBrID0gZGIubmV4dGtleShrKSIpOwogCiBzdGF0aWMgUHlPYmplY3QgKgotZGJtX25leHRrZXkocmVnaXN0ZXIgZGJtb2JqZWN0ICpkcCwgUHlPYmplY3QgKmFyZ3MpCitkYm1fbmV4dGtleShkYm1vYmplY3QgKmRwLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICByZWdpc3RlciBQeU9iamVjdCAqdjsKKyAgICBQeU9iamVjdCAqdjsKICAgICBkYXR1bSBrZXksIG5leHRrZXk7CiAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjOm5leHRrZXkiLCAma2V5LmRwdHIsICZrZXkuZHNpemUpKQpAQCAtMzk2LDcgKzM5Niw3IEBACiBrZXB0IGFuZCByZXVzZWQgYXMgbmV3IChrZXksdmFsdWUpIHBhaXJzIGFyZSBhZGRlZC4iKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLWRibV9yZW9yZ2FuaXplKHJlZ2lzdGVyIGRibW9iamVjdCAqZHAsIFB5T2JqZWN0ICp1bnVzZWQpCitkYm1fcmVvcmdhbml6ZShkYm1vYmplY3QgKmRwLCBQeU9iamVjdCAqdW51c2VkKQogewogICAgIGNoZWNrX2RibW9iamVjdF9vcGVuKGRwKTsKICAgICBlcnJubyA9IDA7CkBAIC00MTcsNyArNDE3LDcgQEAKIGFueSB1bndyaXR0ZW4gZGF0YSB0byBiZSB3cml0dGVuIHRvIHRoZSBkaXNrLiIpOwogCiBzdGF0aWMgUHlPYmplY3QgKgotZGJtX3N5bmMocmVnaXN0ZXIgZGJtb2JqZWN0ICpkcCwgUHlPYmplY3QgKnVudXNlZCkKK2RibV9zeW5jKGRibW9iamVjdCAqZHAsIFB5T2JqZWN0ICp1bnVzZWQpCiB7CiAgICAgY2hlY2tfZGJtb2JqZWN0X29wZW4oZHApOwogICAgIGdkYm1fc3luYyhkcC0+ZGlfZGJtKTsKQEAgLTQyNSw2ICs0MjUsMjAgQEAKICAgICByZXR1cm4gUHlfTm9uZTsKIH0KIAorc3RhdGljIFB5T2JqZWN0ICoKK2RibV9fZW50ZXJfXyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlfSU5DUkVGKHNlbGYpOworICAgIHJldHVybiBzZWxmOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorZGJtX19leGl0X18oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIF9QeV9JREVOVElGSUVSKGNsb3NlKTsKKyAgICByZXR1cm4gX1B5T2JqZWN0X0NhbGxNZXRob2RJZChzZWxmLCAmUHlJZF9jbG9zZSwgTlVMTCk7Cit9CisKIHN0YXRpYyBQeU1ldGhvZERlZiBkYm1fbWV0aG9kc1tdID0gewogICAgIHsiY2xvc2UiLCAgICAgKFB5Q0Z1bmN0aW9uKWRibV9jbG9zZSwgICBNRVRIX05PQVJHUywgZGJtX2Nsb3NlX19kb2NfX30sCiAgICAgeyJrZXlzIiwgICAgICAoUHlDRnVuY3Rpb24pZGJtX2tleXMsICAgIE1FVEhfTk9BUkdTLCBkYm1fa2V5c19fZG9jX199LApAQCAtNDM0LDYgKzQ0OCw4IEBACiAgICAgeyJzeW5jIiwgICAgICAoUHlDRnVuY3Rpb24pZGJtX3N5bmMsICAgIE1FVEhfTk9BUkdTLCBkYm1fc3luY19fZG9jX199LAogICAgIHsiZ2V0IiwgICAgICAgKFB5Q0Z1bmN0aW9uKWRibV9nZXQsICAgICBNRVRIX1ZBUkFSR1MsIGRibV9nZXRfX2RvY19ffSwKICAgICB7InNldGRlZmF1bHQiLChQeUNGdW5jdGlvbilkYm1fc2V0ZGVmYXVsdCxNRVRIX1ZBUkFSR1MsIGRibV9zZXRkZWZhdWx0X19kb2NfX30sCisgICAgeyJfX2VudGVyX18iLCBkYm1fX2VudGVyX18sIE1FVEhfTk9BUkdTLCBOVUxMfSwKKyAgICB7Il9fZXhpdF9fIiwgIGRibV9fZXhpdF9fLCBNRVRIX1ZBUkFSR1MsIE5VTEx9LAogICAgIHtOVUxMLCAgICAgICAgICAgICAgTlVMTH0gICAgICAgICAgIC8qIHNlbnRpbmVsICovCiB9OwogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19nZXN0YWx0LmMgYi9Nb2R1bGVzL19nZXN0YWx0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkMzA2ODMuLjAwMDAwMDAKLS0tIGEvTW9kdWxlcy9fZ2VzdGFsdC5jCisrKyAvZGV2L251bGwKQEAgLTEsODQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi1Db3B5cmlnaHQgMTk5MS0xOTk3IGJ5IFN0aWNodGluZyBNYXRoZW1hdGlzY2ggQ2VudHJ1bSwgQW1zdGVyZGFtLAotVGhlIE5ldGhlcmxhbmRzLgotCi0gICAgICAgICAgICAgICAgICAgICAgICBBbGwgUmlnaHRzIFJlc2VydmVkCi0KLVBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kIGl0cwotZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLAotcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdAotYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluCi1zdXBwb3J0aW5nIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lcyBvZiBTdGljaHRpbmcgTWF0aGVtYXRpc2NoCi1DZW50cnVtIG9yIENXSSBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0bwotZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uCi0KLVNUSUNIVElORyBNQVRIRU1BVElTQ0ggQ0VOVFJVTSBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8KLVRISVMgU09GVFdBUkUsIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQKLUZJVE5FU1MsIElOIE5PIEVWRU5UIFNIQUxMIFNUSUNIVElORyBNQVRIRU1BVElTQ0ggQ0VOVFJVTSBCRSBMSUFCTEUKLUZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCi1XSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KLUFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUCi1PRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgotCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIE1hY2ludG9zaCBHZXN0YWx0IGludGVyZmFjZSAqLwotCi0jaW5jbHVkZSAiUHl0aG9uLmgiCi0KLSNpbmNsdWRlIDxDYXJib24vQ2FyYm9uLmg+Ci0KLS8qIENvbnZlcnQgYSA0LWNoYXIgc3RyaW5nIG9iamVjdCBhcmd1bWVudCB0byBhbiBPU1R5cGUgdmFsdWUgKi8KLXN0YXRpYyBpbnQKLWNvbnZlcnRfdG9fT1NUeXBlKFB5T2JqZWN0ICp2LCBPU1R5cGUgKnByKQotewotICAgIHVpbnQzMl90IHRtcDsKLSAgICBpZiAoIVB5VW5pY29kZV9DaGVjayh2KSB8fCBQeVVuaWNvZGVfR2V0TGVuZ3RoKHYpICE9IDQpIHsKLSAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAiT1NUeXBlIGFyZyBtdXN0IGJlIHN0cmluZyBvZiA0IGNoYXJzIik7Ci0gICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIG1lbWNweSgoY2hhciAqKSZ0bXAsIF9QeVVuaWNvZGVfQXNTdHJpbmcodiksIDQpOwotICAgICpwciA9IChPU1R5cGUpbnRvaGwodG1wKTsKLSAgICByZXR1cm4gMTsKLX0KLQotc3RhdGljIFB5T2JqZWN0ICoKLWdlc3RhbHRfZ2VzdGFsdChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi17Ci0gICAgT1NFcnIgaUVycjsKLSAgICBPU1R5cGUgc2VsZWN0b3I7Ci0gICAgU0ludDMyIHJlc3BvbnNlOwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTyYiLCBjb252ZXJ0X3RvX09TVHlwZSwgJnNlbGVjdG9yKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaUVyciA9IEdlc3RhbHQoc2VsZWN0b3IsICZyZXNwb25zZSk7Ci0gICAgaWYgKGlFcnIgIT0gMCkgewotICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PU0Vycm9yLAotICAgICAgICAgICAgICAgICAgICAibm9uLXplcm8gZXhpdCBjb2RlISIpOwotICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKHJlc3BvbnNlKTsKLX0KLQotc3RhdGljIHN0cnVjdCBQeU1ldGhvZERlZiBnZXN0YWx0X21ldGhvZHNbXSA9IHsKLSAgICB7Imdlc3RhbHQiLCBnZXN0YWx0X2dlc3RhbHQsIE1FVEhfVkFSQVJHU30sCi0gICAge05VTEwsIE5VTEx9IC8qIFNlbnRpbmVsICovCi19OwotCi1zdGF0aWMgc3RydWN0IFB5TW9kdWxlRGVmIGdlc3RhbHRtb2R1bGUgPSB7Ci0gICAgUHlNb2R1bGVEZWZfSEVBRF9JTklULAotICAgICJfZ2VzdGFsdCIsCi0gICAgTlVMTCwKLSAgICAtMSwKLSAgICBnZXN0YWx0X21ldGhvZHMsCi0gICAgTlVMTCwKLSAgICBOVUxMLAotICAgIE5VTEwsCi0gICAgTlVMTAotfTsKLQotUHlNT0RJTklUX0ZVTkMKLVB5SW5pdF9fZ2VzdGFsdCh2b2lkKQotewotICAgIHJldHVybiBQeU1vZHVsZV9DcmVhdGUoJmdlc3RhbHRtb2R1bGUpOwotfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9faGFzaG9wZW5zc2wuYyBiL01vZHVsZXMvX2hhc2hvcGVuc3NsLmMKaW5kZXggM2FiMWMwYy4uNWIwYTdiZSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9faGFzaG9wZW5zc2wuYworKysgYi9Nb2R1bGVzL19oYXNob3BlbnNzbC5jCkBAIC0xNywzNiArMTcsMTYgQEAKICNpbmNsdWRlICJzdHJ1Y3RtZW1iZXIuaCIKICNpbmNsdWRlICJoYXNobGliLmgiCiAKLSNpZmRlZiBXSVRIX1RIUkVBRAotI2luY2x1ZGUgInB5dGhyZWFkLmgiCi0gICAgI2RlZmluZSBFTlRFUl9IQVNITElCKG9iaikgXAotICAgICAgICBpZiAoKG9iaiktPmxvY2spIHsgXAotICAgICAgICAgICAgaWYgKCFQeVRocmVhZF9hY3F1aXJlX2xvY2soKG9iaiktPmxvY2ssIDApKSB7IFwKLSAgICAgICAgICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTIFwKLSAgICAgICAgICAgICAgICBQeVRocmVhZF9hY3F1aXJlX2xvY2soKG9iaiktPmxvY2ssIDEpOyBcCi0gICAgICAgICAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMgXAotICAgICAgICAgICAgfSBcCi0gICAgICAgIH0KLSAgICAjZGVmaW5lIExFQVZFX0hBU0hMSUIob2JqKSBcCi0gICAgICAgIGlmICgob2JqKS0+bG9jaykgeyBcCi0gICAgICAgICAgICBQeVRocmVhZF9yZWxlYXNlX2xvY2soKG9iaiktPmxvY2spOyBcCi0gICAgICAgIH0KLSNlbHNlCi0gICAgI2RlZmluZSBFTlRFUl9IQVNITElCKG9iaikKLSAgICAjZGVmaW5lIExFQVZFX0hBU0hMSUIob2JqKQotI2VuZGlmCiAKIC8qIEVWUCBpcyB0aGUgcHJlZmVycmVkIGludGVyZmFjZSB0byBoYXNoaW5nIGluIE9wZW5TU0wgKi8KICNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorI2luY2x1ZGUgPG9wZW5zc2wvaG1hYy5oPgogLyogV2UgdXNlIHRoZSBvYmplY3QgaW50ZXJmYWNlIHRvIGRpc2NvdmVyIHdoYXQgaGFzaGVzIE9wZW5TU0wgc3VwcG9ydHMuICovCiAjaW5jbHVkZSA8b3BlbnNzbC9vYmplY3RzLmg+CisjaW5jbHVkZSAib3BlbnNzbC9lcnIuaCIKIAogI2RlZmluZSBNVU5DSF9TSVpFIElOVF9NQVgKIAotLyogVE9ETyhncHMpOiBXZSBzaG91bGQgcHJvYmFibHkgbWFrZSB0aGlzIGEgbW9kdWxlIG9yIEVWUG9iamVjdCBhdHRyaWJ1dGUKLSAqIHRvIGFsbG93IHRoZSB1c2VyIHRvIG9wdGltaXplIGJhc2VkIG9uIHRoZSBwbGF0Zm9ybSB0aGV5J3JlIHVzaW5nLiAqLwotI2RlZmluZSBIQVNITElCX0dJTF9NSU5TSVpFIDIwNDgKLQogI2lmbmRlZiBIQVNIX09CSl9DT05TVFJVQ1RPUgogI2RlZmluZSBIQVNIX09CSl9DT05TVFJVQ1RPUiAwCiAjZW5kaWYKQEAgLTQ4OSw2ICs0NjksMjI1IEBACiB9CiAKIAorCisjaWYgKE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIgPj0gMHgxMDAwMDAwMCAmJiAhZGVmaW5lZChPUEVOU1NMX05PX0hNQUMpIFwKKyAgICAgJiYgIWRlZmluZWQoT1BFTlNTTF9OT19TSEEpKQorCisjZGVmaW5lIFBZX1BCS0RGMl9ITUFDIDEKKworLyogSW1wcm92ZWQgaW1wbGVtZW50YXRpb24gb2YgUEtDUzVfUEJLREYyX0hNQUMoKQorICoKKyAqIFBLQ1M1X1BCS0RGMl9ITUFDX2Zhc3QoKSBoYXNoZXMgdGhlIHBhc3N3b3JkIGV4YWN0bHkgb25lIHRpbWUgaW5zdGVhZCBvZgorICogYGl0ZXJgIHRpbWVzLiBUb2RheSAoMjAxMykgdGhlIGl0ZXJhdGlvbiBjb3VudCBpcyB0eXBpY2FsbHkgMTAwLDAwMCBvcgorICogbW9yZS4gVGhlIGltcHJvdmVkIGFsZ29yaXRobSBpcyBub3Qgc3ViamVjdCB0byBhIERlbmlhbC1vZi1TZXJ2aWNlCisgKiB2dWxuZXJhYmlsaXR5IHdpdGggb3Zlcmx5IGxhcmdlIHBhc3N3b3Jkcy4KKyAqCisgKiBBbHNvIE9wZW5TU0wgPCAxLjAgZG9uJ3QgcHJvdmlkZSBQS0NTNV9QQktERjJfSE1BQygpLCBvbmx5CisgKiBQS0NTNV9QQktERjJfU0hBMS4KKyAqLworc3RhdGljIGludAorUEtDUzVfUEJLREYyX0hNQUNfZmFzdChjb25zdCBjaGFyICpwYXNzLCBpbnQgcGFzc2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc2FsdCwgaW50IHNhbHRsZW4sCisgICAgICAgICAgICAgICAgICAgICAgIGludCBpdGVyLCBjb25zdCBFVlBfTUQgKmRpZ2VzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50IGtleWxlbiwgdW5zaWduZWQgY2hhciAqb3V0KQoreworICAgIHVuc2lnbmVkIGNoYXIgZGlndG1wW0VWUF9NQVhfTURfU0laRV0sICpwLCBpdG1wWzRdOworICAgIGludCBjcGxlbiwgaiwgaywgdGtleWxlbiwgbWRsZW47CisgICAgdW5zaWduZWQgbG9uZyBpID0gMTsKKyAgICBITUFDX0NUWCBoY3R4X3RwbCwgaGN0eDsKKworICAgIG1kbGVuID0gRVZQX01EX3NpemUoZGlnZXN0KTsKKyAgICBpZiAobWRsZW4gPCAwKQorICAgICAgICByZXR1cm4gMDsKKworICAgIEhNQUNfQ1RYX2luaXQoJmhjdHhfdHBsKTsKKyAgICBITUFDX0NUWF9pbml0KCZoY3R4KTsKKyAgICBwID0gb3V0OworICAgIHRrZXlsZW4gPSBrZXlsZW47CisgICAgaWYgKCFITUFDX0luaXRfZXgoJmhjdHhfdHBsLCBwYXNzLCBwYXNzbGVuLCBkaWdlc3QsIE5VTEwpKSB7CisgICAgICAgIEhNQUNfQ1RYX2NsZWFudXAoJmhjdHhfdHBsKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHdoaWxlICh0a2V5bGVuKSB7CisgICAgICAgIGlmICh0a2V5bGVuID4gbWRsZW4pCisgICAgICAgICAgICBjcGxlbiA9IG1kbGVuOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjcGxlbiA9IHRrZXlsZW47CisgICAgICAgIC8qIFdlIGFyZSB1bmxpa2VseSB0byBldmVyIHVzZSBtb3JlIHRoYW4gMjU2IGJsb2NrcyAoNTEyMCBiaXRzISkKKyAgICAgICAgICogYnV0IGp1c3QgaW4gY2FzZS4uLgorICAgICAgICAgKi8KKyAgICAgICAgaXRtcFswXSA9ICh1bnNpZ25lZCBjaGFyKSgoaSA+PiAyNCkgJiAweGZmKTsKKyAgICAgICAgaXRtcFsxXSA9ICh1bnNpZ25lZCBjaGFyKSgoaSA+PiAxNikgJiAweGZmKTsKKyAgICAgICAgaXRtcFsyXSA9ICh1bnNpZ25lZCBjaGFyKSgoaSA+PiA4KSAmIDB4ZmYpOworICAgICAgICBpdG1wWzNdID0gKHVuc2lnbmVkIGNoYXIpKGkgJiAweGZmKTsKKyAgICAgICAgaWYgKCFITUFDX0NUWF9jb3B5KCZoY3R4LCAmaGN0eF90cGwpKSB7CisgICAgICAgICAgICBITUFDX0NUWF9jbGVhbnVwKCZoY3R4X3RwbCk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICBpZiAoIUhNQUNfVXBkYXRlKCZoY3R4LCBzYWx0LCBzYWx0bGVuKQorICAgICAgICAgICAgICAgIHx8ICFITUFDX1VwZGF0ZSgmaGN0eCwgaXRtcCwgNCkKKyAgICAgICAgICAgICAgICB8fCAhSE1BQ19GaW5hbCgmaGN0eCwgZGlndG1wLCBOVUxMKSkgeworICAgICAgICAgICAgSE1BQ19DVFhfY2xlYW51cCgmaGN0eF90cGwpOworICAgICAgICAgICAgSE1BQ19DVFhfY2xlYW51cCgmaGN0eCk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICBITUFDX0NUWF9jbGVhbnVwKCZoY3R4KTsKKyAgICAgICAgbWVtY3B5KHAsIGRpZ3RtcCwgY3BsZW4pOworICAgICAgICBmb3IgKGogPSAxOyBqIDwgaXRlcjsgaisrKSB7CisgICAgICAgICAgICBpZiAoIUhNQUNfQ1RYX2NvcHkoJmhjdHgsICZoY3R4X3RwbCkpIHsKKyAgICAgICAgICAgICAgICBITUFDX0NUWF9jbGVhbnVwKCZoY3R4X3RwbCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIUhNQUNfVXBkYXRlKCZoY3R4LCBkaWd0bXAsIG1kbGVuKQorICAgICAgICAgICAgICAgICAgICB8fCAhSE1BQ19GaW5hbCgmaGN0eCwgZGlndG1wLCBOVUxMKSkgeworICAgICAgICAgICAgICAgIEhNQUNfQ1RYX2NsZWFudXAoJmhjdHhfdHBsKTsKKyAgICAgICAgICAgICAgICBITUFDX0NUWF9jbGVhbnVwKCZoY3R4KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEhNQUNfQ1RYX2NsZWFudXAoJmhjdHgpOworICAgICAgICAgICAgZm9yIChrID0gMDsgayA8IGNwbGVuOyBrKyspIHsKKyAgICAgICAgICAgICAgICBwW2tdIF49IGRpZ3RtcFtrXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB0a2V5bGVuLT0gY3BsZW47CisgICAgICAgIGkrKzsKKyAgICAgICAgcCs9IGNwbGVuOworICAgIH0KKyAgICBITUFDX0NUWF9jbGVhbnVwKCZoY3R4X3RwbCk7CisgICAgcmV0dXJuIDE7Cit9CisKKy8qIExDT1ZfRVhDTF9TVEFSVCAqLworc3RhdGljIFB5T2JqZWN0ICoKK19zZXRFeGNlcHRpb24oUHlPYmplY3QgKmV4YykKK3sKKyAgICB1bnNpZ25lZCBsb25nIGVycmNvZGU7CisgICAgY29uc3QgY2hhciAqbGliLCAqZnVuYywgKnJlYXNvbjsKKworICAgIGVycmNvZGUgPSBFUlJfcGVla19sYXN0X2Vycm9yKCk7CisgICAgaWYgKCFlcnJjb2RlKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhleGMsICJ1bmtub3duIHJlYXNvbnMiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIEVSUl9jbGVhcl9lcnJvcigpOworCisgICAgbGliID0gRVJSX2xpYl9lcnJvcl9zdHJpbmcoZXJyY29kZSk7CisgICAgZnVuYyA9IEVSUl9mdW5jX2Vycm9yX3N0cmluZyhlcnJjb2RlKTsKKyAgICByZWFzb24gPSBFUlJfcmVhc29uX2Vycm9yX3N0cmluZyhlcnJjb2RlKTsKKworICAgIGlmIChsaWIgJiYgZnVuYykgeworICAgICAgICBQeUVycl9Gb3JtYXQoZXhjLCAiWyVzOiAlc10gJXMiLCBsaWIsIGZ1bmMsIHJlYXNvbik7CisgICAgfQorICAgIGVsc2UgaWYgKGxpYikgeworICAgICAgICBQeUVycl9Gb3JtYXQoZXhjLCAiWyVzXSAlcyIsIGxpYiwgcmVhc29uKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhleGMsIHJlYXNvbik7CisgICAgfQorICAgIHJldHVybiBOVUxMOworfQorLyogTENPVl9FWENMX1NUT1AgKi8KKworUHlEb2NfU1RSVkFSKHBia2RmMl9obWFjX19kb2NfXywKKyJwYmtkZjJfaG1hYyhoYXNoX25hbWUsIHBhc3N3b3JkLCBzYWx0LCBpdGVyYXRpb25zLCBka2xlbj1Ob25lKSAtPiBrZXlcblwKK1xuXAorUGFzc3dvcmQgYmFzZWQga2V5IGRlcml2YXRpb24gZnVuY3Rpb24gMiAoUEtDUyAjNSB2Mi4wKSB3aXRoIEhNQUMgYXNcblwKK3BzZXVkb3JhbmRvbSBmdW5jdGlvbi4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3Bia2RmMl9obWFjKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZGljdCkKK3sKKyAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7Imhhc2hfbmFtZSIsICJwYXNzd29yZCIsICJzYWx0IiwgIml0ZXJhdGlvbnMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGtsZW4iLCBOVUxMfTsKKyAgICBQeU9iamVjdCAqa2V5X29iaiA9IE5VTEwsICpka2xlbl9vYmogPSBQeV9Ob25lOworICAgIGNoYXIgKm5hbWUsICprZXk7CisgICAgUHlfYnVmZmVyIHBhc3N3b3JkLCBzYWx0OworICAgIGxvbmcgaXRlcmF0aW9ucywgZGtsZW47CisgICAgaW50IHJldHZhbDsKKyAgICBjb25zdCBFVlBfTUQgKmRpZ2VzdDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZGljdCwgInN5KnkqbHxPOnBia2RmMl9obWFjIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrd2xpc3QsICZuYW1lLCAmcGFzc3dvcmQsICZzYWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpdGVyYXRpb25zLCAmZGtsZW5fb2JqKSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBkaWdlc3QgPSBFVlBfZ2V0X2RpZ2VzdGJ5bmFtZShuYW1lKTsKKyAgICBpZiAoZGlnZXN0ID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJ1bnN1cHBvcnRlZCBoYXNoIHR5cGUiKTsKKyAgICAgICAgZ290byBlbmQ7CisgICAgfQorCisgICAgaWYgKHBhc3N3b3JkLmxlbiA+IElOVF9NQVgpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAicGFzc3dvcmQgaXMgdG9vIGxvbmcuIik7CisgICAgICAgIGdvdG8gZW5kOworICAgIH0KKworICAgIGlmIChzYWx0LmxlbiA+IElOVF9NQVgpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAic2FsdCBpcyB0b28gbG9uZy4iKTsKKyAgICAgICAgZ290byBlbmQ7CisgICAgfQorCisgICAgaWYgKGl0ZXJhdGlvbnMgPCAxKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgIml0ZXJhdGlvbiB2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwLiIpOworICAgICAgICBnb3RvIGVuZDsKKyAgICB9CisgICAgaWYgKGl0ZXJhdGlvbnMgPiBJTlRfTUFYKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgIml0ZXJhdGlvbiB2YWx1ZSBpcyB0b28gZ3JlYXQuIik7CisgICAgICAgIGdvdG8gZW5kOworICAgIH0KKworICAgIGlmIChka2xlbl9vYmogPT0gUHlfTm9uZSkgeworICAgICAgICBka2xlbiA9IEVWUF9NRF9zaXplKGRpZ2VzdCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZGtsZW4gPSBQeUxvbmdfQXNMb25nKGRrbGVuX29iaik7CisgICAgICAgIGlmICgoZGtsZW4gPT0gLTEpICYmIFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgICAgIGdvdG8gZW5kOworICAgICAgICB9CisgICAgfQorICAgIGlmIChka2xlbiA8IDEpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAia2V5IGxlbmd0aCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwLiIpOworICAgICAgICBnb3RvIGVuZDsKKyAgICB9CisgICAgaWYgKGRrbGVuID4gSU5UX01BWCkgeworICAgICAgICAvKiBJTlRfTUFYIGlzIGFsd2F5cyBzbWFsbGVyIHRoYW4gZGtMZW4gbWF4ICgyXjMyIC0gMSkgKiBoTGVuICovCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgImtleSBsZW5ndGggaXMgdG9vIGdyZWF0LiIpOworICAgICAgICBnb3RvIGVuZDsKKyAgICB9CisKKyAgICBrZXlfb2JqID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBka2xlbik7CisgICAgaWYgKGtleV9vYmogPT0gTlVMTCkgeworICAgICAgICBnb3RvIGVuZDsKKyAgICB9CisgICAga2V5ID0gUHlCeXRlc19BU19TVFJJTkcoa2V5X29iaik7CisKKyAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgcmV0dmFsID0gUEtDUzVfUEJLREYyX0hNQUNfZmFzdCgoY2hhciopcGFzc3dvcmQuYnVmLCAoaW50KXBhc3N3b3JkLmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyICopc2FsdC5idWYsIChpbnQpc2FsdC5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVyYXRpb25zLCBkaWdlc3QsIGRrbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIgKilrZXkpOworICAgIFB5X0VORF9BTExPV19USFJFQURTCisKKyAgICBpZiAoIXJldHZhbCkgeworICAgICAgICBQeV9DTEVBUihrZXlfb2JqKTsKKyAgICAgICAgX3NldEV4Y2VwdGlvbihQeUV4Y19WYWx1ZUVycm9yKTsKKyAgICAgICAgZ290byBlbmQ7CisgICAgfQorCisgIGVuZDoKKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYXNzd29yZCk7CisgICAgUHlCdWZmZXJfUmVsZWFzZSgmc2FsdCk7CisgICAgcmV0dXJuIGtleV9vYmo7Cit9CisKKyNlbmRpZgorCiAvKiBTdGF0ZSBmb3Igb3VyIGNhbGxiYWNrIGZ1bmN0aW9uIHNvIHRoYXQgaXQgY2FuIGFjY3VtdWxhdGUgYSByZXN1bHQuICovCiB0eXBlZGVmIHN0cnVjdCBfaW50ZXJuYWxfbmFtZV9tYXBwZXJfc3RhdGUgewogICAgIFB5T2JqZWN0ICpzZXQ7CkBAIC01MDcsNyArNzA2LDcgQEAKICAgICBpZiAob3BlbnNzbF9vYmpfbmFtZSA9PSBOVUxMKQogICAgICAgICByZXR1cm47CiAgICAgLyogSWdub3JlIGFsaWFzZWQgbmFtZXMsIHRoZXkgcG9sbHV0ZSB0aGUgbGlzdCBhbmQgT3BlblNTTCBhcHBlYXJzIHRvCi0gICAgICogaGF2ZSBhIGl0cyBvd24gZGVmaW5pdGlvbiBvZiBhbGlhcyBhcyB0aGUgcmVzdWx0aW5nIGxpc3Qgc3RpbGwKKyAgICAgKiBoYXZlIGl0cyBvd24gZGVmaW5pdGlvbiBvZiBhbGlhcyBhcyB0aGUgcmVzdWx0aW5nIGxpc3Qgc3RpbGwKICAgICAgKiBjb250YWlucyBkdXBsaWNhdGUgYW5kIGFsdGVybmF0ZSBuYW1lcyBmb3Igc2V2ZXJhbCBhbGdvcml0aG1zLiAgICAgKi8KICAgICBpZiAob3BlbnNzbF9vYmpfbmFtZS0+YWxpYXMpCiAgICAgICAgIHJldHVybjsKQEAgLTUxNyw5ICs3MTYsOSBAQAogICAgICAgICBzdGF0ZS0+ZXJyb3IgPSAxOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChQeVNldF9BZGQoc3RhdGUtPnNldCwgcHlfbmFtZSkgIT0gMCkgewotICAgICAgICAgICAgUHlfREVDUkVGKHB5X25hbWUpOwogICAgICAgICAgICAgc3RhdGUtPmVycm9yID0gMTsKICAgICAgICAgfQorICAgICAgICBQeV9ERUNSRUYocHlfbmFtZSk7CiAgICAgfQogfQogCkBAIC02MTAsNiArODA5LDEwIEBACiAKIHN0YXRpYyBzdHJ1Y3QgUHlNZXRob2REZWYgRVZQX2Z1bmN0aW9uc1tdID0gewogICAgIHsibmV3IiwgKFB5Q0Z1bmN0aW9uKUVWUF9uZXcsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCBFVlBfbmV3X19kb2NfX30sCisjaWZkZWYgUFlfUEJLREYyX0hNQUMKKyAgICB7InBia2RmMl9obWFjIiwgKFB5Q0Z1bmN0aW9uKXBia2RmMl9obWFjLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywKKyAgICAgcGJrZGYyX2htYWNfX2RvY19ffSwKKyNlbmRpZgogICAgIENPTlNUUlVDVE9SX01FVEhfREVGKG1kNSksCiAgICAgQ09OU1RSVUNUT1JfTUVUSF9ERUYoc2hhMSksCiAjaWZkZWYgX09QRU5TU0xfU1VQUE9SVFNfU0hBMgpAQCAtNjQzLDYgKzg0Niw3IEBACiAgICAgUHlPYmplY3QgKm0sICpvcGVuc3NsX21kX21ldGhfbmFtZXM7CiAKICAgICBPcGVuU1NMX2FkZF9hbGxfZGlnZXN0cygpOworICAgIEVSUl9sb2FkX2NyeXB0b19zdHJpbmdzKCk7CiAKICAgICAvKiBUT0RPIGJ1aWxkIEVWUF9mdW5jdGlvbnMgb3BlbnNzbF8qIGVudHJpZXMgZHluYW1pY2FsbHkgYmFzZWQKICAgICAgKiBvbiB3aGF0IGhhc2hlcyBhcmUgc3VwcG9ydGVkIHJhdGhlciB0aGFuIGxpc3RpbmcgbWFueQpAQCAtNjY3LDEwICs4NzEsOCBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSNpZiBIQVNIX09CSl9DT05TVFJVQ1RPUgotICAgIFB5X0lOQ1JFRigmRVZQdHlwZSk7CisgICAgUHlfSU5DUkVGKChQeU9iamVjdCAqKSZFVlB0eXBlKTsKICAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgIkhBU0giLCAoUHlPYmplY3QgKikmRVZQdHlwZSk7Ci0jZW5kaWYKIAogICAgIC8qIHRoZXNlIGNvbnN0YW50cyBhcmUgdXNlZCBieSB0aGUgY29udmVuaWVuY2UgY29uc3RydWN0b3JzICovCiAgICAgSU5JVF9DT05TVFJVQ1RPUl9DT05TVEFOVFMobWQ1KTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2hlYXBxbW9kdWxlLmMgYi9Nb2R1bGVzL19oZWFwcW1vZHVsZS5jCmluZGV4IGYzNzdlOWMuLjA0ODQ1ZjEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2hlYXBxbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9faGVhcHFtb2R1bGUuYwpAQCAtMTEsMTAgKzExLDkgQEAKIHN0YXRpYyBpbnQKIF9zaWZ0ZG93bihQeUxpc3RPYmplY3QgKmhlYXAsIFB5X3NzaXplX3Qgc3RhcnRwb3MsIFB5X3NzaXplX3QgcG9zKQogewotICAgIFB5T2JqZWN0ICpuZXdpdGVtLCAqcGFyZW50LCAqb2xkaXRlbTsKKyAgICBQeU9iamVjdCAqbmV3aXRlbSwgKnBhcmVudDsKKyAgICBQeV9zc2l6ZV90IHBhcmVudHBvcywgc2l6ZTsKICAgICBpbnQgY21wOwotICAgIFB5X3NzaXplX3QgcGFyZW50cG9zOwotICAgIFB5X3NzaXplX3Qgc2l6ZTsKIAogICAgIGFzc2VydChQeUxpc3RfQ2hlY2soaGVhcCkpOwogICAgIHNpemUgPSBQeUxpc3RfR0VUX1NJWkUoaGVhcCk7CkBAIC0yMywxMDMgKzIyLDc1IEBACiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKLSAgICBuZXdpdGVtID0gUHlMaXN0X0dFVF9JVEVNKGhlYXAsIHBvcyk7Ci0gICAgUHlfSU5DUkVGKG5ld2l0ZW0pOwogICAgIC8qIEZvbGxvdyB0aGUgcGF0aCB0byB0aGUgcm9vdCwgbW92aW5nIHBhcmVudHMgZG93biB1bnRpbCBmaW5kaW5nCiAgICAgICAgYSBwbGFjZSBuZXdpdGVtIGZpdHMuICovCi0gICAgd2hpbGUgKHBvcyA+IHN0YXJ0cG9zKXsKKyAgICBuZXdpdGVtID0gUHlMaXN0X0dFVF9JVEVNKGhlYXAsIHBvcyk7CisgICAgd2hpbGUgKHBvcyA+IHN0YXJ0cG9zKSB7CiAgICAgICAgIHBhcmVudHBvcyA9IChwb3MgLSAxKSA+PiAxOwogICAgICAgICBwYXJlbnQgPSBQeUxpc3RfR0VUX0lURU0oaGVhcCwgcGFyZW50cG9zKTsKICAgICAgICAgY21wID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKG5ld2l0ZW0sIHBhcmVudCwgUHlfTFQpOwotICAgICAgICBpZiAoY21wID09IC0xKSB7Ci0gICAgICAgICAgICBQeV9ERUNSRUYobmV3aXRlbSk7CisgICAgICAgIGlmIChjbXAgPT0gLTEpCiAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KICAgICAgICAgaWYgKHNpemUgIT0gUHlMaXN0X0dFVF9TSVpFKGhlYXApKSB7Ci0gICAgICAgICAgICBQeV9ERUNSRUYobmV3aXRlbSk7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaXN0IGNoYW5nZWQgc2l6ZSBkdXJpbmcgaXRlcmF0aW9uIik7CiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGNtcCA9PSAwKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIFB5X0lOQ1JFRihwYXJlbnQpOwotICAgICAgICBvbGRpdGVtID0gUHlMaXN0X0dFVF9JVEVNKGhlYXAsIHBvcyk7CisgICAgICAgIHBhcmVudCA9IFB5TGlzdF9HRVRfSVRFTShoZWFwLCBwYXJlbnRwb3MpOworICAgICAgICBuZXdpdGVtID0gUHlMaXN0X0dFVF9JVEVNKGhlYXAsIHBvcyk7CisgICAgICAgIFB5TGlzdF9TRVRfSVRFTShoZWFwLCBwYXJlbnRwb3MsIG5ld2l0ZW0pOwogICAgICAgICBQeUxpc3RfU0VUX0lURU0oaGVhcCwgcG9zLCBwYXJlbnQpOwotICAgICAgICBQeV9ERUNSRUYob2xkaXRlbSk7CiAgICAgICAgIHBvcyA9IHBhcmVudHBvczsKLSAgICAgICAgaWYgKHNpemUgIT0gUHlMaXN0X0dFVF9TSVpFKGhlYXApKSB7Ci0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaXN0IGNoYW5nZWQgc2l6ZSBkdXJpbmcgaXRlcmF0aW9uIik7Ci0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KICAgICB9Ci0gICAgUHlfREVDUkVGKFB5TGlzdF9HRVRfSVRFTShoZWFwLCBwb3MpKTsKLSAgICBQeUxpc3RfU0VUX0lURU0oaGVhcCwgcG9zLCBuZXdpdGVtKTsKICAgICByZXR1cm4gMDsKIH0KIAogc3RhdGljIGludAogX3NpZnR1cChQeUxpc3RPYmplY3QgKmhlYXAsIFB5X3NzaXplX3QgcG9zKQogewotICAgIFB5X3NzaXplX3Qgc3RhcnRwb3MsIGVuZHBvcywgY2hpbGRwb3MsIHJpZ2h0cG9zOworICAgIFB5X3NzaXplX3Qgc3RhcnRwb3MsIGVuZHBvcywgY2hpbGRwb3MsIHJpZ2h0cG9zLCBsaW1pdDsKKyAgICBQeU9iamVjdCAqdG1wMSwgKnRtcDI7CiAgICAgaW50IGNtcDsKLSAgICBQeU9iamVjdCAqbmV3aXRlbSwgKnRtcCwgKm9sZGl0ZW07Ci0gICAgUHlfc3NpemVfdCBzaXplOwogCiAgICAgYXNzZXJ0KFB5TGlzdF9DaGVjayhoZWFwKSk7Ci0gICAgc2l6ZSA9IFB5TGlzdF9HRVRfU0laRShoZWFwKTsKLSAgICBlbmRwb3MgPSBzaXplOworICAgIGVuZHBvcyA9IFB5TGlzdF9HRVRfU0laRShoZWFwKTsKICAgICBzdGFydHBvcyA9IHBvczsKICAgICBpZiAocG9zID49IGVuZHBvcykgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfSW5kZXhFcnJvciwgImluZGV4IG91dCBvZiByYW5nZSIpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQotICAgIG5ld2l0ZW0gPSBQeUxpc3RfR0VUX0lURU0oaGVhcCwgcG9zKTsKLSAgICBQeV9JTkNSRUYobmV3aXRlbSk7CiAKICAgICAvKiBCdWJibGUgdXAgdGhlIHNtYWxsZXIgY2hpbGQgdW50aWwgaGl0dGluZyBhIGxlYWYuICovCi0gICAgY2hpbGRwb3MgPSAyKnBvcyArIDE7ICAgIC8qIGxlZnRtb3N0IGNoaWxkIHBvc2l0aW9uICAqLwotICAgIHdoaWxlIChjaGlsZHBvcyA8IGVuZHBvcykgeworICAgIGxpbWl0ID0gZW5kcG9zIC8gMjsgICAgICAgICAgLyogc21hbGxlc3QgcG9zIHRoYXQgaGFzIG5vIGNoaWxkICovCisgICAgd2hpbGUgKHBvcyA8IGxpbWl0KSB7CiAgICAgICAgIC8qIFNldCBjaGlsZHBvcyB0byBpbmRleCBvZiBzbWFsbGVyIGNoaWxkLiAgICovCisgICAgICAgIGNoaWxkcG9zID0gMipwb3MgKyAxOyAgICAvKiBsZWZ0bW9zdCBjaGlsZCBwb3NpdGlvbiAgKi8KICAgICAgICAgcmlnaHRwb3MgPSBjaGlsZHBvcyArIDE7CiAgICAgICAgIGlmIChyaWdodHBvcyA8IGVuZHBvcykgewogICAgICAgICAgICAgY21wID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKAogICAgICAgICAgICAgICAgIFB5TGlzdF9HRVRfSVRFTShoZWFwLCBjaGlsZHBvcyksCiAgICAgICAgICAgICAgICAgUHlMaXN0X0dFVF9JVEVNKGhlYXAsIHJpZ2h0cG9zKSwKICAgICAgICAgICAgICAgICBQeV9MVCk7Ci0gICAgICAgICAgICBpZiAoY21wID09IC0xKSB7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKG5ld2l0ZW0pOworICAgICAgICAgICAgaWYgKGNtcCA9PSAtMSkKICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoY21wID09IDApCiAgICAgICAgICAgICAgICAgY2hpbGRwb3MgPSByaWdodHBvczsKLSAgICAgICAgfQotICAgICAgICBpZiAoc2l6ZSAhPSBQeUxpc3RfR0VUX1NJWkUoaGVhcCkpIHsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihuZXdpdGVtKTsKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpc3QgY2hhbmdlZCBzaXplIGR1cmluZyBpdGVyYXRpb24iKTsKLSAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIGlmIChlbmRwb3MgIT0gUHlMaXN0X0dFVF9TSVpFKGhlYXApKSB7CisgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpc3QgY2hhbmdlZCBzaXplIGR1cmluZyBpdGVyYXRpb24iKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgLyogTW92ZSB0aGUgc21hbGxlciBjaGlsZCB1cC4gKi8KLSAgICAgICAgdG1wID0gUHlMaXN0X0dFVF9JVEVNKGhlYXAsIGNoaWxkcG9zKTsKLSAgICAgICAgUHlfSU5DUkVGKHRtcCk7Ci0gICAgICAgIG9sZGl0ZW0gPSBQeUxpc3RfR0VUX0lURU0oaGVhcCwgcG9zKTsKLSAgICAgICAgUHlMaXN0X1NFVF9JVEVNKGhlYXAsIHBvcywgdG1wKTsKLSAgICAgICAgUHlfREVDUkVGKG9sZGl0ZW0pOworICAgICAgICB0bXAxID0gUHlMaXN0X0dFVF9JVEVNKGhlYXAsIGNoaWxkcG9zKTsKKyAgICAgICAgdG1wMiA9IFB5TGlzdF9HRVRfSVRFTShoZWFwLCBwb3MpOworICAgICAgICBQeUxpc3RfU0VUX0lURU0oaGVhcCwgY2hpbGRwb3MsIHRtcDIpOworICAgICAgICBQeUxpc3RfU0VUX0lURU0oaGVhcCwgcG9zLCB0bXAxKTsKICAgICAgICAgcG9zID0gY2hpbGRwb3M7Ci0gICAgICAgIGNoaWxkcG9zID0gMipwb3MgKyAxOwotICAgICAgICBpZiAoc2l6ZSAhPSBQeUxpc3RfR0VUX1NJWkUoaGVhcCkpIHsKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpc3QgY2hhbmdlZCBzaXplIGR1cmluZyBpdGVyYXRpb24iKTsKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQogICAgIH0KLQotICAgIC8qIFRoZSBsZWFmIGF0IHBvcyBpcyBlbXB0eSBub3cuICBQdXQgbmV3aXRlbSB0aGVyZSwgYW5kIGJ1YmJsZQotICAgICAgIGl0IHVwIHRvIGl0cyBmaW5hbCByZXN0aW5nIHBsYWNlIChieSBzaWZ0aW5nIGl0cyBwYXJlbnRzIGRvd24pLiAqLwotICAgIFB5X0RFQ1JFRihQeUxpc3RfR0VUX0lURU0oaGVhcCwgcG9zKSk7Ci0gICAgUHlMaXN0X1NFVF9JVEVNKGhlYXAsIHBvcywgbmV3aXRlbSk7CisgICAgLyogQnViYmxlIGl0IHVwIHRvIGl0cyBmaW5hbCByZXN0aW5nIHBsYWNlIChieSBzaWZ0aW5nIGl0cyBwYXJlbnRzIGRvd24pLiAqLwogICAgIHJldHVybiBfc2lmdGRvd24oaGVhcCwgc3RhcnRwb3MsIHBvcyk7CiB9CiAKQEAgLTE2OCw3ICsxMzksMTAgQEAKIAogICAgIGxhc3RlbHQgPSBQeUxpc3RfR0VUX0lURU0oaGVhcCwgbi0xKSA7CiAgICAgUHlfSU5DUkVGKGxhc3RlbHQpOwotICAgIFB5TGlzdF9TZXRTbGljZShoZWFwLCBuLTEsIG4sIE5VTEwpOworICAgIGlmIChQeUxpc3RfU2V0U2xpY2UoaGVhcCwgbi0xLCBuLCBOVUxMKSA8IDApIHsKKyAgICAgICAgUHlfREVDUkVGKGxhc3RlbHQpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAgICAgbi0tOwogCiAgICAgaWYgKCFuKQpAQCAtMjUwLDYgKzIyNCwxMSBAQAogICAgICAgICByZXR1cm4gaXRlbTsKICAgICB9CiAKKyAgICBpZiAoUHlMaXN0X0dFVF9TSVpFKGhlYXApID09IDApIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0luZGV4RXJyb3IsICJpbmRleCBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCiAgICAgcmV0dXJuaXRlbSA9IFB5TGlzdF9HRVRfSVRFTShoZWFwLCAwKTsKICAgICBQeV9JTkNSRUYoaXRlbSk7CiAgICAgUHlMaXN0X1NFVF9JVEVNKGhlYXAsIDAsIGl0ZW0pOwpAQCAtNDE2LDcgKzM5NSw3IEBACiBzdGF0aWMgaW50CiBfc2lmdHVwbWF4KFB5TGlzdE9iamVjdCAqaGVhcCwgUHlfc3NpemVfdCBwb3MpCiB7Ci0gICAgUHlfc3NpemVfdCBzdGFydHBvcywgZW5kcG9zLCBjaGlsZHBvcywgcmlnaHRwb3M7CisgICAgUHlfc3NpemVfdCBzdGFydHBvcywgZW5kcG9zLCBjaGlsZHBvcywgcmlnaHRwb3MsIGxpbWl0OwogICAgIGludCBjbXA7CiAgICAgUHlPYmplY3QgKm5ld2l0ZW0sICp0bXA7CiAKQEAgLTQzMSw5ICs0MTAsMTAgQEAKICAgICBQeV9JTkNSRUYobmV3aXRlbSk7CiAKICAgICAvKiBCdWJibGUgdXAgdGhlIHNtYWxsZXIgY2hpbGQgdW50aWwgaGl0dGluZyBhIGxlYWYuICovCi0gICAgY2hpbGRwb3MgPSAyKnBvcyArIDE7ICAgIC8qIGxlZnRtb3N0IGNoaWxkIHBvc2l0aW9uICAqLwotICAgIHdoaWxlIChjaGlsZHBvcyA8IGVuZHBvcykgeworICAgIGxpbWl0ID0gZW5kcG9zIC8gMjsgICAgICAgICAgLyogc21hbGxlc3QgcG9zIHRoYXQgaGFzIG5vIGNoaWxkICovCisgICAgd2hpbGUgKHBvcyA8IGxpbWl0KSB7CiAgICAgICAgIC8qIFNldCBjaGlsZHBvcyB0byBpbmRleCBvZiBzbWFsbGVyIGNoaWxkLiAgICovCisgICAgICAgIGNoaWxkcG9zID0gMipwb3MgKyAxOyAgICAvKiBsZWZ0bW9zdCBjaGlsZCBwb3NpdGlvbiAgKi8KICAgICAgICAgcmlnaHRwb3MgPSBjaGlsZHBvcyArIDE7CiAgICAgICAgIGlmIChyaWdodHBvcyA8IGVuZHBvcykgewogICAgICAgICAgICAgY21wID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKApAQCAtNDUzLDcgKzQzMyw2IEBACiAgICAgICAgIFB5X0RFQ1JFRihQeUxpc3RfR0VUX0lURU0oaGVhcCwgcG9zKSk7CiAgICAgICAgIFB5TGlzdF9TRVRfSVRFTShoZWFwLCBwb3MsIHRtcCk7CiAgICAgICAgIHBvcyA9IGNoaWxkcG9zOwotICAgICAgICBjaGlsZHBvcyA9IDIqcG9zICsgMTsKICAgICB9CiAKICAgICAvKiBUaGUgbGVhZiBhdCBwb3MgaXMgZW1wdHkgbm93LiAgUHV0IG5ld2l0ZW0gdGhlcmUsIGFuZCBidWJibGUKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2lvL19pb21vZHVsZS5jIGIvTW9kdWxlcy9faW8vX2lvbW9kdWxlLmMKaW5kZXggNGE3ZTc1OC4uNDQxMTZkOCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9faW8vX2lvbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9faW8vX2lvbW9kdWxlLmMKQEAgLTc1LDcgKzc1LDcgQEAKICJBbm90aGVyIElPQmFzZSBzdWJjbGFzcywgVGV4dElPQmFzZSwgZGVhbHMgd2l0aCB0aGUgZW5jb2RpbmcgYW5kIGRlY29kaW5nXG4iCiAib2Ygc3RyZWFtcyBpbnRvIHRleHQuIFRleHRJT1dyYXBwZXIsIHdoaWNoIGV4dGVuZHMgaXQsIGlzIGEgYnVmZmVyZWQgdGV4dFxuIgogImludGVyZmFjZSB0byBhIGJ1ZmZlcmVkIHJhdyBzdHJlYW0gKGBCdWZmZXJlZElPQmFzZWApLiBGaW5hbGx5LCBTdHJpbmdJT1xuIgotImlzIGEgaW4tbWVtb3J5IHN0cmVhbSBmb3IgdGV4dC5cbiIKKyJpcyBhbiBpbi1tZW1vcnkgc3RyZWFtIGZvciB0ZXh0LlxuIgogIlxuIgogIkFyZ3VtZW50IG5hbWVzIGFyZSBub3QgcGFydCBvZiB0aGUgc3BlY2lmaWNhdGlvbiwgYW5kIG9ubHkgdGhlIGFyZ3VtZW50c1xuIgogIm9mIG9wZW4oKSBhcmUgaW50ZW5kZWQgdG8gYmUgdXNlZCBhcyBrZXl3b3JkIGFyZ3VtZW50cy5cbiIKQEAgLTEyNiw4ICsxMjYsNyBAQAogIidiJyAgICAgICBiaW5hcnkgbW9kZVxuIgogIid0JyAgICAgICB0ZXh0IG1vZGUgKGRlZmF1bHQpXG4iCiAiJysnICAgICAgIG9wZW4gYSBkaXNrIGZpbGUgZm9yIHVwZGF0aW5nIChyZWFkaW5nIGFuZCB3cml0aW5nKVxuIgotIidVJyAgICAgICB1bml2ZXJzYWwgbmV3bGluZSBtb2RlIChmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk7IHVubmVlZGVkXG4iCi0iICAgICAgICAgIGZvciBuZXcgY29kZSlcbiIKKyInVScgICAgICAgdW5pdmVyc2FsIG5ld2xpbmUgbW9kZSAoZGVwcmVjYXRlZClcbiIKICI9PT09PT09PT0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4iCiAiXG4iCiAiVGhlIGRlZmF1bHQgbW9kZSBpcyAncnQnIChvcGVuIGZvciByZWFkaW5nIHRleHQpLiBGb3IgYmluYXJ5IHJhbmRvbVxuIgpAQCAtMTQzLDYgKzE0MiwxMCBAQAogInJldHVybmVkIGFzIHN0cmluZ3MsIHRoZSBieXRlcyBoYXZpbmcgYmVlbiBmaXJzdCBkZWNvZGVkIHVzaW5nIGFcbiIKICJwbGF0Zm9ybS1kZXBlbmRlbnQgZW5jb2Rpbmcgb3IgdXNpbmcgdGhlIHNwZWNpZmllZCBlbmNvZGluZyBpZiBnaXZlbi5cbiIKICJcbiIKKyInVScgbW9kZSBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIHJhaXNlIGFuIGV4Y2VwdGlvbiBpbiBmdXR1cmUgdmVyc2lvbnNcbiIKKyJvZiBQeXRob24uICBJdCBoYXMgbm8gZWZmZWN0IGluIFB5dGhvbiAzLiAgVXNlIG5ld2xpbmUgdG8gY29udHJvbFxuIgorInVuaXZlcnNhbCBuZXdsaW5lcyBtb2RlLlxuIgorIlxuIgogImJ1ZmZlcmluZyBpcyBhbiBvcHRpb25hbCBpbnRlZ2VyIHVzZWQgdG8gc2V0IHRoZSBidWZmZXJpbmcgcG9saWN5LlxuIgogIlBhc3MgMCB0byBzd2l0Y2ggYnVmZmVyaW5nIG9mZiAob25seSBhbGxvd2VkIGluIGJpbmFyeSBtb2RlKSwgMSB0byBzZWxlY3RcbiIKICJsaW5lIGJ1ZmZlcmluZyAob25seSB1c2FibGUgaW4gdGV4dCBtb2RlKSwgYW5kIGFuIGludGVnZXIgPiAxIHRvIGluZGljYXRlXG4iCkBAIC0yMzIsMTEgKzIzNSwxMiBAQAogICAgIGNoYXIgcmF3bW9kZVs2XSwgKm07CiAgICAgaW50IGxpbmVfYnVmZmVyaW5nLCBpc2F0dHk7CiAKLSAgICBQeU9iamVjdCAqcmF3LCAqbW9kZW9iaiA9IE5VTEwsICpidWZmZXIgPSBOVUxMLCAqd3JhcHBlciA9IE5VTEw7CisgICAgUHlPYmplY3QgKnJhdywgKm1vZGVvYmogPSBOVUxMLCAqYnVmZmVyLCAqd3JhcHBlciwgKnJlc3VsdCA9IE5VTEw7CiAKICAgICBfUHlfSURFTlRJRklFUihpc2F0dHkpOwogICAgIF9QeV9JREVOVElGSUVSKGZpbGVubyk7CiAgICAgX1B5X0lERU5USUZJRVIobW9kZSk7CisgICAgX1B5X0lERU5USUZJRVIoY2xvc2UpOwogCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgIk98c2l6enppTzpvcGVuIiwga3dsaXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmaWxlLCAmbW9kZSwgJmJ1ZmZlcmluZywKQEAgLTMxMCw2ICszMTQsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjYW4ndCB1c2UgVSBhbmQgd3JpdGluZyBtb2RlIGF0IG9uY2UiKTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CisgICAgICAgIGlmIChQeUVycl9XYXJuRXgoUHlFeGNfRGVwcmVjYXRpb25XYXJuaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICInVScgbW9kZSBpcyBkZXByZWNhdGVkIiwgMSkgPCAwKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIHJlYWRpbmcgPSAxOwogICAgIH0KIApAQCAtMzQ4LDYgKzM1NSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJPc2lPIiwgZmlsZSwgcmF3bW9kZSwgY2xvc2VmZCwgb3BlbmVyKTsKICAgICBpZiAocmF3ID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOworICAgIHJlc3VsdCA9IHJhdzsKIAogICAgIG1vZGVvYmogPSBQeVVuaWNvZGVfRnJvbVN0cmluZyhtb2RlKTsKICAgICBpZiAobW9kZW9iaiA9PSBOVUxMKQpAQCAtNDA2LDcgKzQxNCw3IEBACiAgICAgICAgIH0KIAogICAgICAgICBQeV9ERUNSRUYobW9kZW9iaik7Ci0gICAgICAgIHJldHVybiByYXc7CisgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCiAgICAgLyogd3JhcHMgaW50byBhIGJ1ZmZlcmVkIGZpbGUgKi8KQEAgLTQyNywxNSArNDM1LDE2IEBACiAKICAgICAgICAgYnVmZmVyID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKEJ1ZmZlcmVkX2NsYXNzLCAiT2kiLCByYXcsIGJ1ZmZlcmluZyk7CiAgICAgfQotICAgIFB5X0NMRUFSKHJhdyk7CiAgICAgaWYgKGJ1ZmZlciA9PSBOVUxMKQogICAgICAgICBnb3RvIGVycm9yOworICAgIHJlc3VsdCA9IGJ1ZmZlcjsKKyAgICBQeV9ERUNSRUYocmF3KTsKIAogCiAgICAgLyogaWYgYmluYXJ5LCByZXR1cm5zIHRoZSBidWZmZXJlZCBmaWxlICovCiAgICAgaWYgKGJpbmFyeSkgewogICAgICAgICBQeV9ERUNSRUYobW9kZW9iaik7Ci0gICAgICAgIHJldHVybiBidWZmZXI7CisgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCiAgICAgLyogd3JhcHMgaW50byBhIFRleHRJT1dyYXBwZXIgKi8KQEAgLTQ0NCwyMCArNDUzLDI2IEBACiAJCQkJICAgIGJ1ZmZlciwKIAkJCQkgICAgZW5jb2RpbmcsIGVycm9ycywgbmV3bGluZSwKIAkJCQkgICAgbGluZV9idWZmZXJpbmcpOwotICAgIFB5X0NMRUFSKGJ1ZmZlcik7CiAgICAgaWYgKHdyYXBwZXIgPT0gTlVMTCkKICAgICAgICAgZ290byBlcnJvcjsKKyAgICByZXN1bHQgPSB3cmFwcGVyOworICAgIFB5X0RFQ1JFRihidWZmZXIpOwogCiAgICAgaWYgKF9QeU9iamVjdF9TZXRBdHRySWQod3JhcHBlciwgJlB5SWRfbW9kZSwgbW9kZW9iaikgPCAwKQogICAgICAgICBnb3RvIGVycm9yOwogICAgIFB5X0RFQ1JFRihtb2Rlb2JqKTsKLSAgICByZXR1cm4gd3JhcHBlcjsKKyAgICByZXR1cm4gcmVzdWx0OwogCiAgIGVycm9yOgotICAgIFB5X1hERUNSRUYocmF3KTsKKyAgICBpZiAocmVzdWx0ICE9IE5VTEwpIHsKKyAgICAgICAgUHlPYmplY3QgKmV4YywgKnZhbCwgKnRiLCAqY2xvc2VfcmVzdWx0OworICAgICAgICBQeUVycl9GZXRjaCgmZXhjLCAmdmFsLCAmdGIpOworICAgICAgICBjbG9zZV9yZXN1bHQgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKHJlc3VsdCwgJlB5SWRfY2xvc2UsIE5VTEwpOworICAgICAgICBfUHlFcnJfQ2hhaW5FeGNlcHRpb25zKGV4YywgdmFsLCB0Yik7CisgICAgICAgIFB5X1hERUNSRUYoY2xvc2VfcmVzdWx0KTsKKyAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgfQogICAgIFB5X1hERUNSRUYobW9kZW9iaik7Ci0gICAgUHlfWERFQ1JFRihidWZmZXIpOwotICAgIFB5X1hERUNSRUYod3JhcHBlcik7CiAgICAgcmV0dXJuIE5VTEw7CiB9CiAMCkBAIC01MzMsNiArNTQ4LDQ1IEBACiB9CiAKIAorX1B5SU9fU3RhdGUgKgorX1B5SU9fZ2V0X21vZHVsZV9zdGF0ZSh2b2lkKQoreworICAgIFB5T2JqZWN0ICptb2QgPSBQeVN0YXRlX0ZpbmRNb2R1bGUoJl9QeUlPX01vZHVsZSk7CisgICAgX1B5SU9fU3RhdGUgKnN0YXRlOworICAgIGlmIChtb2QgPT0gTlVMTCB8fCAoc3RhdGUgPSBJT19NT0RfU1RBVEUobW9kKSkgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgImNvdWxkIG5vdCBmaW5kIGlvIG1vZHVsZSBzdGF0ZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAiKGludGVycHJldGVyIHNodXRkb3duPykiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJldHVybiBzdGF0ZTsKK30KKworUHlPYmplY3QgKgorX1B5SU9fZ2V0X2xvY2FsZV9tb2R1bGUoX1B5SU9fU3RhdGUgKnN0YXRlKQoreworICAgIFB5T2JqZWN0ICptb2Q7CisgICAgaWYgKHN0YXRlLT5sb2NhbGVfbW9kdWxlICE9IE5VTEwpIHsKKyAgICAgICAgYXNzZXJ0KFB5V2Vha3JlZl9DaGVja1JlZihzdGF0ZS0+bG9jYWxlX21vZHVsZSkpOworICAgICAgICBtb2QgPSBQeVdlYWtyZWZfR0VUX09CSkVDVChzdGF0ZS0+bG9jYWxlX21vZHVsZSk7CisgICAgICAgIGlmIChtb2QgIT0gUHlfTm9uZSkgeworICAgICAgICAgICAgUHlfSU5DUkVGKG1vZCk7CisgICAgICAgICAgICByZXR1cm4gbW9kOworICAgICAgICB9CisgICAgICAgIFB5X0NMRUFSKHN0YXRlLT5sb2NhbGVfbW9kdWxlKTsKKyAgICB9CisgICAgbW9kID0gUHlJbXBvcnRfSW1wb3J0TW9kdWxlKCJfYm9vdGxvY2FsZSIpOworICAgIGlmIChtb2QgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgc3RhdGUtPmxvY2FsZV9tb2R1bGUgPSBQeVdlYWtyZWZfTmV3UmVmKG1vZCwgTlVMTCk7CisgICAgaWYgKHN0YXRlLT5sb2NhbGVfbW9kdWxlID09IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKG1vZCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXR1cm4gbW9kOworfQorCisKIHN0YXRpYyBpbnQKIGlvbW9kdWxlX3RyYXZlcnNlKFB5T2JqZWN0ICptb2QsIHZpc2l0cHJvYyB2aXNpdCwgdm9pZCAqYXJnKSB7CiAgICAgX1B5SU9fU3RhdGUgKnN0YXRlID0gSU9fTU9EX1NUQVRFKG1vZCk7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19pby9faW9tb2R1bGUuaCBiL01vZHVsZXMvX2lvL19pb21vZHVsZS5oCmluZGV4IDBmZTkwYTMuLjE0MGYyNjAgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2lvL19pb21vZHVsZS5oCisrKyBiL01vZHVsZXMvX2lvL19pb21vZHVsZS5oCkBAIC01Miw3ICs1MiwxMiBAQAogICAgd2hpY2ggY2FuIGJlIHNhZmVseSBwdXQgYXNpZGUgdW50aWwgYW5vdGhlciBzZWFyY2guCiAKICAgIE5PVEU6IGZvciBwZXJmb3JtYW5jZSByZWFzb25zLCBgZW5kYCBtdXN0IHBvaW50IHRvIGEgTlVMIGNoYXJhY3RlciAoJ1wwJykuCi0gICBPdGhlcndpc2UsIHRoZSBmdW5jdGlvbiB3aWxsIHNjYW4gZnVydGhlciBhbmQgcmV0dXJuIGdhcmJhZ2UuICovCisgICBPdGhlcndpc2UsIHRoZSBmdW5jdGlvbiB3aWxsIHNjYW4gZnVydGhlciBhbmQgcmV0dXJuIGdhcmJhZ2UuCisKKyAgIFRoZXJlIGFyZSB0aHJlZSBtb2RlcywgaW4gb3JkZXIgb2YgcHJpb3JpdHk6CisgICAqIHRyYW5zbGF0ZWQ6IE9ubHkgZmluZCBcbiAoYXNzdW1lIG5ld2xpbmVzIGFscmVhZHkgdHJhbnNsYXRlZCkKKyAgICogdW5pdmVyc2FsOiBVc2UgdW5pdmVyc2FsIG5ld2xpbmVzIGFsZ29yaXRobQorICAgKiBPdGhlcndpc2UsIHRoZSBsaW5lIGVuZGluZyBpcyBzcGVjaWZpZWQgYnkgcmVhZG5sLCBhIHN0ciBvYmplY3QgKi8KIGV4dGVybiBQeV9zc2l6ZV90IF9QeUlPX2ZpbmRfbGluZV9lbmRpbmcoCiAgICAgaW50IHRyYW5zbGF0ZWQsIGludCB1bml2ZXJzYWwsIFB5T2JqZWN0ICpyZWFkbmwsCiAgICAgaW50IGtpbmQsIGNoYXIgKnN0YXJ0LCBjaGFyICplbmQsIFB5X3NzaXplX3QgKmNvbnN1bWVkKTsKQEAgLTc3LDcgKzgyLDcgQEAKICAgIGxvbmcgd2l0aCAiJWxsZCIgZXZlbiB3aGVuIGJvdGggbG9uZyBhbmQgbG9uZyBsb25nIGhhdmUgdGhlIHNhbWUKICAgIHByZWNpc2lvbi4gKi8KIAotI2lmIGRlZmluZWQoTVNfV0lONjQpIHx8IGRlZmluZWQoTVNfV0lORE9XUykKKyNpZmRlZiBNU19XSU5ET1dTCiAKIC8qIFdpbmRvd3MgdXNlcyBsb25nIGxvbmcgZm9yIG9mZnNldHMgKi8KIHR5cGVkZWYgUFlfTE9OR19MT05HIFB5X29mZl90OwpAQCAtMTM1LDcgKzE0MCwxMCBAQAogfSBfUHlJT19TdGF0ZTsKIAogI2RlZmluZSBJT19NT0RfU1RBVEUobW9kKSAoKF9QeUlPX1N0YXRlICopUHlNb2R1bGVfR2V0U3RhdGUobW9kKSkKLSNkZWZpbmUgSU9fU1RBVEUgSU9fTU9EX1NUQVRFKFB5U3RhdGVfRmluZE1vZHVsZSgmX1B5SU9fTW9kdWxlKSkKKyNkZWZpbmUgSU9fU1RBVEUoKSBfUHlJT19nZXRfbW9kdWxlX3N0YXRlKCkKKworZXh0ZXJuIF9QeUlPX1N0YXRlICpfUHlJT19nZXRfbW9kdWxlX3N0YXRlKHZvaWQpOworZXh0ZXJuIFB5T2JqZWN0ICpfUHlJT19nZXRfbG9jYWxlX21vZHVsZShfUHlJT19TdGF0ZSAqKTsKIAogZXh0ZXJuIFB5T2JqZWN0ICpfUHlJT19zdHJfY2xvc2U7CiBleHRlcm4gUHlPYmplY3QgKl9QeUlPX3N0cl9jbG9zZWQ7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19pby9idWZmZXJlZGlvLmMgYi9Nb2R1bGVzL19pby9idWZmZXJlZGlvLmMKaW5kZXggZWEwMzAyYi4uMzY1YmI4NSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9faW8vYnVmZmVyZWRpby5jCisrKyBiL01vZHVsZXMvX2lvL2J1ZmZlcmVkaW8uYwpAQCAtNTIsNyArNTIsNiBAQAogICAgIFB5X2J1ZmZlciBidWY7CiAgICAgUHlfc3NpemVfdCBsZW47CiAgICAgUHlPYmplY3QgKmRhdGE7Ci0gICAgX1B5X0lERU5USUZJRVIocmVhZCk7CiAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIncqOnJlYWRpbnRvIiwgJmJ1ZikpIHsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC05Miw3ICs5MSw5IEBACiBzdGF0aWMgUHlPYmplY3QgKgogYnVmZmVyZWRpb2Jhc2VfdW5zdXBwb3J0ZWQoY29uc3QgY2hhciAqbWVzc2FnZSkKIHsKLSAgICBQeUVycl9TZXRTdHJpbmcoSU9fU1RBVEUtPnVuc3VwcG9ydGVkX29wZXJhdGlvbiwgbWVzc2FnZSk7CisgICAgX1B5SU9fU3RhdGUgKnN0YXRlID0gSU9fU1RBVEUoKTsKKyAgICBpZiAoc3RhdGUgIT0gTlVMTCkKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKHN0YXRlLT51bnN1cHBvcnRlZF9vcGVyYXRpb24sIG1lc3NhZ2UpOwogICAgIHJldHVybiBOVUxMOwogfQogCkBAIC0xOTAsNyArMTkxLDggQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9nZXRhdHRybyovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc2V0YXR0cm8qLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX2J1ZmZlciovCi0gICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19CQVNFVFlQRSwgIC8qdHBfZmxhZ3MqLworICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfQkFTRVRZUEUKKyAgICAgICAgfCBQeV9UUEZMQUdTX0hBVkVfRklOQUxJWkUsICAvKnRwX2ZsYWdzKi8KICAgICBidWZmZXJlZGlvYmFzZV9kb2MsICAgICAgICAgLyogdHBfZG9jICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3RyYXZlcnNlICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NsZWFyICovCkBAIC0yMDksNiArMjExLDE2IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2luaXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYWxsb2MgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbmV3ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZyZWUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXNfZ2MgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzZXMgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbXJvICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NhY2hlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3N1YmNsYXNzZXMgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3QgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVsICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3ZlcnNpb25fdGFnICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZpbmFsaXplICovCiB9OwogCiAKQEAgLTIyMCw3ICsyMzIsNyBAQAogICAgIGludCBkZXRhY2hlZDsKICAgICBpbnQgcmVhZGFibGU7CiAgICAgaW50IHdyaXRhYmxlOwotICAgIGludCBkZWFsbG9jYXRpbmc7CisgICAgY2hhciBmaW5hbGl6aW5nOwogCiAgICAgLyogVHJ1ZSBpZiB0aGlzIGlzIGEgdmFuaWxsYSBCdWZmZXJlZCBvYmplY3QgKHJhdGhlciB0aGFuIGEgdXNlciBkZXJpdmVkCiAgICAgICAgY2xhc3MpICphbmQqIHRoZSByYXcgc3RyZWFtIGlzIGEgdmFuaWxsYSBGaWxlSU8gb2JqZWN0LiAqLwpAQCAtMjg4LDE0ICszMDAsMzUgQEAKIHN0YXRpYyBpbnQKIF9lbnRlcl9idWZmZXJlZF9idXN5KGJ1ZmZlcmVkICpzZWxmKQogeworICAgIGludCByZWxheF9sb2NraW5nOworICAgIFB5TG9ja1N0YXR1cyBzdDsKICAgICBpZiAoc2VsZi0+b3duZXIgPT0gUHlUaHJlYWRfZ2V0X3RocmVhZF9pZGVudCgpKSB7CiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19SdW50aW1lRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAicmVlbnRyYW50IGNhbGwgaW5zaWRlICVSIiwgc2VsZik7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KKyAgICByZWxheF9sb2NraW5nID0gKF9QeV9GaW5hbGl6aW5nICE9IE5VTEwpOwogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICBQeVRocmVhZF9hY3F1aXJlX2xvY2soc2VsZi0+bG9jaywgMSk7CisgICAgaWYgKCFyZWxheF9sb2NraW5nKQorICAgICAgICBzdCA9IFB5VGhyZWFkX2FjcXVpcmVfbG9jayhzZWxmLT5sb2NrLCAxKTsKKyAgICBlbHNlIHsKKyAgICAgICAgLyogV2hlbiBmaW5hbGl6aW5nLCB3ZSBkb24ndCB3YW50IGEgZGVhZGxvY2sgdG8gaGFwcGVuIHdpdGggZGFlbW9uCisgICAgICAgICAqIHRocmVhZHMgYWJydXB0bHkgc2h1dCBkb3duIHdoaWxlIHRoZXkgb3duZWQgdGhlIGxvY2suCisgICAgICAgICAqIFRoZXJlZm9yZSwgb25seSB3YWl0IGZvciBhIGdyYWNlIHBlcmlvZCAoMSBzLikuCisgICAgICAgICAqIE5vdGUgdGhhdCBub24tZGFlbW9uIHRocmVhZHMgaGF2ZSBhbHJlYWR5IGV4aXRlZCBoZXJlLCBzbyB0aGlzCisgICAgICAgICAqIHNob3VsZG4ndCBhZmZlY3QgY2FyZWZ1bGx5IHdyaXR0ZW4gdGhyZWFkZWQgSS9PIGNvZGUuCisgICAgICAgICAqLworICAgICAgICBzdCA9IFB5VGhyZWFkX2FjcXVpcmVfbG9ja190aW1lZChzZWxmLT5sb2NrLCAxZTYsIDApOworICAgIH0KICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworICAgIGlmIChyZWxheF9sb2NraW5nICYmIHN0ICE9IFBZX0xPQ0tfQUNRVUlSRUQpIHsKKyAgICAgICAgUHlPYmplY3QgKm1zZ29iaiA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0KAorICAgICAgICAgICAgImNvdWxkIG5vdCBhY3F1aXJlIGxvY2sgZm9yICVBIGF0IGludGVycHJldGVyICIKKyAgICAgICAgICAgICJzaHV0ZG93biwgcG9zc2libHkgZHVlIHRvIGRhZW1vbiB0aHJlYWRzIiwKKyAgICAgICAgICAgIChQeU9iamVjdCAqKSBzZWxmKTsKKyAgICAgICAgY2hhciAqbXNnID0gUHlVbmljb2RlX0FzVVRGOChtc2dvYmopOworICAgICAgICBQeV9GYXRhbEVycm9yKG1zZyk7CisgICAgfQogICAgIHJldHVybiAxOwogfQogCkBAIC0zODQsOCArNDE3LDggQEAKIHN0YXRpYyB2b2lkCiBidWZmZXJlZF9kZWFsbG9jKGJ1ZmZlcmVkICpzZWxmKQogewotICAgIHNlbGYtPmRlYWxsb2NhdGluZyA9IDE7Ci0gICAgaWYgKHNlbGYtPm9rICYmIF9QeUlPQmFzZV9maW5hbGl6ZSgoUHlPYmplY3QgKikgc2VsZikgPCAwKQorICAgIHNlbGYtPmZpbmFsaXppbmcgPSAxOworICAgIGlmIChfUHlJT0Jhc2VfZmluYWxpemUoKFB5T2JqZWN0ICopIHNlbGYpIDwgMCkKICAgICAgICAgcmV0dXJuOwogICAgIF9QeU9iamVjdF9HQ19VTlRSQUNLKHNlbGYpOwogICAgIHNlbGYtPm9rID0gMDsKQEAgLTQyOCw4ICs0NjEsNiBAQAogc3RhdGljIGludAogYnVmZmVyZWRfY2xlYXIoYnVmZmVyZWQgKnNlbGYpCiB7Ci0gICAgaWYgKHNlbGYtPm9rICYmIF9QeUlPQmFzZV9maW5hbGl6ZSgoUHlPYmplY3QgKikgc2VsZikgPCAwKQotICAgICAgICByZXR1cm4gLTE7CiAgICAgc2VsZi0+b2sgPSAwOwogICAgIFB5X0NMRUFSKHNlbGYtPnJhdyk7CiAgICAgUHlfQ0xFQVIoc2VsZi0+ZGljdCk7CkBAIC01MDgsNyArNTM5LDcgQEAKICAgICAgICAgZ290byBlbmQ7CiAgICAgfQogCi0gICAgaWYgKHNlbGYtPmRlYWxsb2NhdGluZykgeworICAgIGlmIChzZWxmLT5maW5hbGl6aW5nKSB7CiAgICAgICAgIFB5T2JqZWN0ICpyID0gYnVmZmVyZWRfZGVhbGxvY193YXJuKHNlbGYsIChQeU9iamVjdCAqKSBzZWxmKTsKICAgICAgICAgaWYgKHIpCiAgICAgICAgICAgICBQeV9ERUNSRUYocik7CkBAIC01MjcsMjAgKzU1OCwxNCBAQAogCiAgICAgcmVzID0gUHlPYmplY3RfQ2FsbE1ldGhvZE9iakFyZ3Moc2VsZi0+cmF3LCBfUHlJT19zdHJfY2xvc2UsIE5VTEwpOwogCisgICAgaWYgKHNlbGYtPmJ1ZmZlcikgeworICAgICAgICBQeU1lbV9GcmVlKHNlbGYtPmJ1ZmZlcik7CisgICAgICAgIHNlbGYtPmJ1ZmZlciA9IE5VTEw7CisgICAgfQorCiAgICAgaWYgKGV4YyAhPSBOVUxMKSB7Ci0gICAgICAgIGlmIChyZXMgIT0gTlVMTCkgewotICAgICAgICAgICAgUHlfQ0xFQVIocmVzKTsKLSAgICAgICAgICAgIFB5RXJyX1Jlc3RvcmUoZXhjLCB2YWwsIHRiKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIFB5T2JqZWN0ICp2YWwyOwotICAgICAgICAgICAgUHlfREVDUkVGKGV4Yyk7Ci0gICAgICAgICAgICBQeV9YREVDUkVGKHRiKTsKLSAgICAgICAgICAgIFB5RXJyX0ZldGNoKCZleGMsICZ2YWwyLCAmdGIpOwotICAgICAgICAgICAgUHlFcnJfTm9ybWFsaXplRXhjZXB0aW9uKCZleGMsICZ2YWwyLCAmdGIpOwotICAgICAgICAgICAgUHlFeGNlcHRpb25fU2V0Q29udGV4dCh2YWwyLCB2YWwpOwotICAgICAgICAgICAgUHlFcnJfUmVzdG9yZShleGMsIHZhbDIsIHRiKTsKLSAgICAgICAgfQorICAgICAgICBfUHlFcnJfQ2hhaW5FeGNlcHRpb25zKGV4YywgdmFsLCB0Yik7CisgICAgICAgIFB5X0NMRUFSKHJlcyk7CiAgICAgfQogCiBlbmQ6CkBAIC02NTgsNiArNjgzLDExIEBACiBfc2V0X0Jsb2NraW5nSU9FcnJvcihjaGFyICptc2csIFB5X3NzaXplX3Qgd3JpdHRlbikKIHsKICAgICBQeU9iamVjdCAqZXJyOworI2lmZGVmIFB5X0RFQlVHCisgICAgLyogaW4gZGVidWcgbW9kZSwgUHlFdmFsX0V2YWxGcmFtZUV4KCkgZmFpbHMgd2l0aCBhbiBhc3NlcnRpb24gZXJyb3IKKyAgICAgICBpZiBhbiBleGNlcHRpb24gaXMgc2V0IHdoZW4gaXQgaXMgY2FsbGVkICovCisgICAgUHlFcnJfQ2xlYXIoKTsKKyNlbmRpZgogICAgIGVyciA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihQeUV4Y19CbG9ja2luZ0lPRXJyb3IsICJpc24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJubywgbXNnLCB3cml0dGVuKTsKICAgICBpZiAoZXJyKQpAQCAtODU5LDYgKzg4OSw4IEBACiAgICAgUHlPYmplY3QgKnJlcyA9IE5VTEw7CiAKICAgICBDSEVDS19JTklUSUFMSVpFRChzZWxmKQorICAgIENIRUNLX0NMT1NFRChzZWxmLCAicGVlayBvZiBjbG9zZWQgZmlsZSIpCisKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxuOnBlZWsiLCAmbikpIHsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQpAQCAtOTMzLDYgKzk2NSw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAicmVhZCBsZW5ndGggbXVzdCBiZSBwb3NpdGl2ZSIpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CisKKyAgICBDSEVDS19DTE9TRUQoc2VsZiwgInJlYWQgb2YgY2xvc2VkIGZpbGUiKQorCiAgICAgaWYgKG4gPT0gMCkKICAgICAgICAgcmV0dXJuIFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgMCk7CiAKQEAgLTEzNTAsNyArMTM4NSw3IEBACiAKICAgICBuYW1lb2JqID0gX1B5T2JqZWN0X0dldEF0dHJJZCgoUHlPYmplY3QgKikgc2VsZiwgJlB5SWRfbmFtZSk7CiAgICAgaWYgKG5hbWVvYmogPT0gTlVMTCkgewotICAgICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19BdHRyaWJ1dGVFcnJvcikpCisgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0V4Y2VwdGlvbikpCiAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTE3MzksNiArMTc3NCw3IEBACiAKIHN0YXRpYyBQeU1lbWJlckRlZiBidWZmZXJlZHJlYWRlcl9tZW1iZXJzW10gPSB7CiAgICAgeyJyYXciLCBUX09CSkVDVCwgb2Zmc2V0b2YoYnVmZmVyZWQsIHJhdyksIFJFQURPTkxZfSwKKyAgICB7Il9maW5hbGl6aW5nIiwgVF9CT09MLCBvZmZzZXRvZihidWZmZXJlZCwgZmluYWxpemluZyksIDB9LAogICAgIHtOVUxMfQogfTsKIApAQCAtMTc3MSw3ICsxODA3LDcgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zZXRhdHRybyovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfYnVmZmVyKi8KICAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0JBU0VUWVBFCi0gICAgICAgICAgICB8IFB5X1RQRkxBR1NfSEFWRV9HQywgLyp0cF9mbGFncyovCisgICAgICAgIHwgUHlfVFBGTEFHU19IQVZFX0dDIHwgUHlfVFBGTEFHU19IQVZFX0ZJTkFMSVpFLCAvKnRwX2ZsYWdzKi8KICAgICBidWZmZXJlZHJlYWRlcl9kb2MsICAgICAgICAgLyogdHBfZG9jICovCiAgICAgKHRyYXZlcnNlcHJvYylidWZmZXJlZF90cmF2ZXJzZSwgLyogdHBfdHJhdmVyc2UgKi8KICAgICAoaW5xdWlyeSlidWZmZXJlZF9jbGVhciwgICAgLyogdHBfY2xlYXIgKi8KQEAgLTE3OTAsNiArMTgyNiwxNiBAQAogICAgIChpbml0cHJvYylidWZmZXJlZHJlYWRlcl9pbml0LCAvKiB0cF9pbml0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FsbG9jICovCiAgICAgUHlUeXBlX0dlbmVyaWNOZXcsICAgICAgICAgIC8qIHRwX25ldyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9mcmVlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2lzX2djICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2VzICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ybyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jYWNoZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zdWJjbGFzc2VzICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3dlYWtsaXN0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RlbCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF92ZXJzaW9uX3RhZyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9maW5hbGl6ZSAqLwogfTsKIAwKIApAQCAtMjEyMCw2ICsyMTY2LDcgQEAKIAogc3RhdGljIFB5TWVtYmVyRGVmIGJ1ZmZlcmVkd3JpdGVyX21lbWJlcnNbXSA9IHsKICAgICB7InJhdyIsIFRfT0JKRUNULCBvZmZzZXRvZihidWZmZXJlZCwgcmF3KSwgUkVBRE9OTFl9LAorICAgIHsiX2ZpbmFsaXppbmciLCBUX0JPT0wsIG9mZnNldG9mKGJ1ZmZlcmVkLCBmaW5hbGl6aW5nKSwgMH0sCiAgICAge05VTEx9CiB9OwogCkBAIC0yMTUyLDcgKzIxOTksNyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHJvKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19idWZmZXIqLwogICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfQkFTRVRZUEUKLSAgICAgICAgfCBQeV9UUEZMQUdTX0hBVkVfR0MsICAgLyp0cF9mbGFncyovCisgICAgICAgIHwgUHlfVFBGTEFHU19IQVZFX0dDIHwgUHlfVFBGTEFHU19IQVZFX0ZJTkFMSVpFLCAgIC8qdHBfZmxhZ3MqLwogICAgIGJ1ZmZlcmVkd3JpdGVyX2RvYywgICAgICAgICAvKiB0cF9kb2MgKi8KICAgICAodHJhdmVyc2Vwcm9jKWJ1ZmZlcmVkX3RyYXZlcnNlLCAvKiB0cF90cmF2ZXJzZSAqLwogICAgIChpbnF1aXJ5KWJ1ZmZlcmVkX2NsZWFyLCAgICAvKiB0cF9jbGVhciAqLwpAQCAtMjE3MSw2ICsyMjE4LDE2IEBACiAgICAgKGluaXRwcm9jKWJ1ZmZlcmVkd3JpdGVyX2luaXQsIC8qIHRwX2luaXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYWxsb2MgKi8KICAgICBQeVR5cGVfR2VuZXJpY05ldywgICAgICAgICAgLyogdHBfbmV3ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZyZWUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXNfZ2MgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzZXMgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbXJvICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NhY2hlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3N1YmNsYXNzZXMgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3QgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVsICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3ZlcnNpb25fdGFnICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZpbmFsaXplICovCiB9OwogDAogCkBAIC0yMzM0LDEyICsyMzkxLDE4IEBACiBzdGF0aWMgUHlPYmplY3QgKgogYnVmZmVyZWRyd3BhaXJfY2xvc2UocndwYWlyICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKKyAgICBQeU9iamVjdCAqZXhjID0gTlVMTCwgKnZhbCwgKnRiOwogICAgIFB5T2JqZWN0ICpyZXQgPSBfZm9yd2FyZF9jYWxsKHNlbGYtPndyaXRlciwgJlB5SWRfY2xvc2UsIGFyZ3MpOwogICAgIGlmIChyZXQgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgUHlfREVDUkVGKHJldCk7Ci0KLSAgICByZXR1cm4gX2ZvcndhcmRfY2FsbChzZWxmLT5yZWFkZXIsICZQeUlkX2Nsb3NlLCBhcmdzKTsKKyAgICAgICAgUHlFcnJfRmV0Y2goJmV4YywgJnZhbCwgJnRiKTsKKyAgICBlbHNlCisgICAgICAgIFB5X0RFQ1JFRihyZXQpOworICAgIHJldCA9IF9mb3J3YXJkX2NhbGwoc2VsZi0+cmVhZGVyLCAmUHlJZF9jbG9zZSwgYXJncyk7CisgICAgaWYgKGV4YyAhPSBOVUxMKSB7CisgICAgICAgIF9QeUVycl9DaGFpbkV4Y2VwdGlvbnMoZXhjLCB2YWwsIHRiKTsKKyAgICAgICAgUHlfQ0xFQVIocmV0KTsKKyAgICB9CisgICAgcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTI0MTMsNyArMjQ3Niw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc2V0YXR0cm8qLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX2J1ZmZlciovCiAgICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19CQVNFVFlQRQotICAgICAgICB8IFB5X1RQRkxBR1NfSEFWRV9HQywgICAvKiB0cF9mbGFncyAqLworICAgICAgICB8IFB5X1RQRkxBR1NfSEFWRV9HQyB8IFB5X1RQRkxBR1NfSEFWRV9GSU5BTElaRSwgICAvKiB0cF9mbGFncyAqLwogICAgIGJ1ZmZlcmVkcndwYWlyX2RvYywgICAgICAgICAvKiB0cF9kb2MgKi8KICAgICAodHJhdmVyc2Vwcm9jKWJ1ZmZlcmVkcndwYWlyX3RyYXZlcnNlLCAvKiB0cF90cmF2ZXJzZSAqLwogICAgIChpbnF1aXJ5KWJ1ZmZlcmVkcndwYWlyX2NsZWFyLCAvKiB0cF9jbGVhciAqLwpAQCAtMjQzMiw2ICsyNDk1LDE2IEBACiAgICAgKGluaXRwcm9jKWJ1ZmZlcmVkcndwYWlyX2luaXQsIC8qIHRwX2luaXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYWxsb2MgKi8KICAgICBQeVR5cGVfR2VuZXJpY05ldywgICAgICAgICAgLyogdHBfbmV3ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZyZWUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXNfZ2MgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzZXMgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbXJvICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NhY2hlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3N1YmNsYXNzZXMgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3QgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVsICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3ZlcnNpb25fdGFnICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZpbmFsaXplICovCiB9OwogDAogCkBAIC0yNTE5LDYgKzI1OTIsNyBAQAogCiBzdGF0aWMgUHlNZW1iZXJEZWYgYnVmZmVyZWRyYW5kb21fbWVtYmVyc1tdID0gewogICAgIHsicmF3IiwgVF9PQkpFQ1QsIG9mZnNldG9mKGJ1ZmZlcmVkLCByYXcpLCBSRUFET05MWX0sCisgICAgeyJfZmluYWxpemluZyIsIFRfQk9PTCwgb2Zmc2V0b2YoYnVmZmVyZWQsIGZpbmFsaXppbmcpLCAwfSwKICAgICB7TlVMTH0KIH07CiAKQEAgLTI1NTEsNyArMjYyNSw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc2V0YXR0cm8qLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX2J1ZmZlciovCiAgICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19CQVNFVFlQRQotICAgICAgICB8IFB5X1RQRkxBR1NfSEFWRV9HQywgICAvKnRwX2ZsYWdzKi8KKyAgICAgICAgfCBQeV9UUEZMQUdTX0hBVkVfR0MgfCBQeV9UUEZMQUdTX0hBVkVfRklOQUxJWkUsICAgLyp0cF9mbGFncyovCiAgICAgYnVmZmVyZWRyYW5kb21fZG9jLCAgICAgICAgIC8qIHRwX2RvYyAqLwogICAgICh0cmF2ZXJzZXByb2MpYnVmZmVyZWRfdHJhdmVyc2UsIC8qIHRwX3RyYXZlcnNlICovCiAgICAgKGlucXVpcnkpYnVmZmVyZWRfY2xlYXIsICAgIC8qIHRwX2NsZWFyICovCkBAIC0yNTcwLDQgKzI2NDQsMTQgQEAKICAgICAoaW5pdHByb2MpYnVmZmVyZWRyYW5kb21faW5pdCwgLyogdHBfaW5pdCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hbGxvYyAqLwogICAgIFB5VHlwZV9HZW5lcmljTmV3LCAgICAgICAgICAvKiB0cF9uZXcgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZnJlZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pc19nYyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNlcyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tcm8gKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2FjaGUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc3ViY2xhc3NlcyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZWwgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfdmVyc2lvbl90YWcgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZmluYWxpemUgKi8KIH07CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19pby9ieXRlc2lvLmMgYi9Nb2R1bGVzL19pby9ieXRlc2lvLmMKaW5kZXggNTQ4NDBiYi4uYjU1YWI3MiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9faW8vYnl0ZXNpby5jCisrKyBiL01vZHVsZXMvX2lvL2J5dGVzaW8uYwpAQCAtMjU4LDEwICsyNTgsMTAgQEAKIH0KIAogUHlEb2NfU1RSVkFSKHJlYWRfZG9jLAotInJlYWQoW3NpemVdKSAtPiByZWFkIGF0IG1vc3Qgc2l6ZSBieXRlcywgcmV0dXJuZWQgYXMgYSBzdHJpbmcuXG4iCisicmVhZChbc2l6ZV0pIC0+IHJlYWQgYXQgbW9zdCBzaXplIGJ5dGVzLCByZXR1cm5lZCBhcyBhIGJ5dGVzIG9iamVjdC5cbiIKICJcbiIKICJJZiB0aGUgc2l6ZSBhcmd1bWVudCBpcyBuZWdhdGl2ZSwgcmVhZCB1bnRpbCBFT0YgaXMgcmVhY2hlZC5cbiIKLSJSZXR1cm4gYW4gZW1wdHkgc3RyaW5nIGF0IEVPRi4iKTsKKyJSZXR1cm4gYW4gZW1wdHkgYnl0ZXMgb2JqZWN0IGF0IEVPRi4iKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKIGJ5dGVzaW9fcmVhZChieXRlc2lvICpzZWxmLCBQeU9iamVjdCAqYXJncykKQEAgLTMwNywxMCArMzA3LDEwIEBACiAKIAogUHlEb2NfU1RSVkFSKHJlYWQxX2RvYywKLSJyZWFkMShzaXplKSAtPiByZWFkIGF0IG1vc3Qgc2l6ZSBieXRlcywgcmV0dXJuZWQgYXMgYSBzdHJpbmcuXG4iCisicmVhZDEoc2l6ZSkgLT4gcmVhZCBhdCBtb3N0IHNpemUgYnl0ZXMsIHJldHVybmVkIGFzIGEgYnl0ZXMgb2JqZWN0LlxuIgogIlxuIgogIklmIHRoZSBzaXplIGFyZ3VtZW50IGlzIG5lZ2F0aXZlIG9yIG9taXR0ZWQsIHJlYWQgdW50aWwgRU9GIGlzIHJlYWNoZWQuXG4iCi0iUmV0dXJuIGFuIGVtcHR5IHN0cmluZyBhdCBFT0YuIik7CisiUmV0dXJuIGFuIGVtcHR5IGJ5dGVzIG9iamVjdCBhdCBFT0YuIik7CiAKIHN0YXRpYyBQeU9iamVjdCAqCiBieXRlc2lvX3JlYWQxKGJ5dGVzaW8gKnNlbGYsIFB5T2JqZWN0ICpuKQpAQCAtMzI2LDExICszMjYsMTEgQEAKIH0KIAogUHlEb2NfU1RSVkFSKHJlYWRsaW5lX2RvYywKLSJyZWFkbGluZShbc2l6ZV0pIC0+IG5leHQgbGluZSBmcm9tIHRoZSBmaWxlLCBhcyBhIHN0cmluZy5cbiIKKyJyZWFkbGluZShbc2l6ZV0pIC0+IG5leHQgbGluZSBmcm9tIHRoZSBmaWxlLCBhcyBhIGJ5dGVzIG9iamVjdC5cbiIKICJcbiIKICJSZXRhaW4gbmV3bGluZS4gIEEgbm9uLW5lZ2F0aXZlIHNpemUgYXJndW1lbnQgbGltaXRzIHRoZSBtYXhpbXVtXG4iCiAibnVtYmVyIG9mIGJ5dGVzIHRvIHJldHVybiAoYW4gaW5jb21wbGV0ZSBsaW5lIG1heSBiZSByZXR1cm5lZCB0aGVuKS5cbiIKLSJSZXR1cm4gYW4gZW1wdHkgc3RyaW5nIGF0IEVPRi5cbiIpOworIlJldHVybiBhbiBlbXB0eSBieXRlcyBvYmplY3QgYXQgRU9GLlxuIik7CiAKIHN0YXRpYyBQeU9iamVjdCAqCiBieXRlc2lvX3JlYWRsaW5lKGJ5dGVzaW8gKnNlbGYsIFB5T2JqZWN0ICphcmdzKQpAQCAtNDM3LDE3ICs0MzcsMTggQEAKICJpcyBzZXQgbm90IHRvIGJsb2NrIGFzIGhhcyBubyBkYXRhIHRvIHJlYWQuIik7CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1ieXRlc2lvX3JlYWRpbnRvKGJ5dGVzaW8gKnNlbGYsIFB5T2JqZWN0ICpidWZmZXIpCitieXRlc2lvX3JlYWRpbnRvKGJ5dGVzaW8gKnNlbGYsIFB5T2JqZWN0ICphcmcpCiB7Ci0gICAgdm9pZCAqcmF3X2J1ZmZlcjsKKyAgICBQeV9idWZmZXIgYnVmZmVyOwogICAgIFB5X3NzaXplX3QgbGVuLCBuOwogCiAgICAgQ0hFQ0tfQ0xPU0VEKHNlbGYpOwogCi0gICAgaWYgKFB5T2JqZWN0X0FzV3JpdGVCdWZmZXIoYnVmZmVyLCAmcmF3X2J1ZmZlciwgJmxlbikgPT0gLTEpCisgICAgaWYgKCFQeUFyZ19QYXJzZShhcmcsICJ3KiIsICZidWZmZXIpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIC8qIGFkanVzdCBpbnZhbGlkIHNpemVzICovCisgICAgbGVuID0gYnVmZmVyLmxlbjsKICAgICBuID0gc2VsZi0+c3RyaW5nX3NpemUgLSBzZWxmLT5wb3M7CiAgICAgaWYgKGxlbiA+IG4pIHsKICAgICAgICAgbGVuID0gbjsKQEAgLTQ1NSwxMCArNDU2LDExIEBACiAgICAgICAgICAgICBsZW4gPSAwOwogICAgIH0KIAotICAgIG1lbWNweShyYXdfYnVmZmVyLCBzZWxmLT5idWYgKyBzZWxmLT5wb3MsIGxlbik7CisgICAgbWVtY3B5KGJ1ZmZlci5idWYsIHNlbGYtPmJ1ZiArIHNlbGYtPnBvcywgbGVuKTsKICAgICBhc3NlcnQoc2VsZi0+cG9zICsgbGVuIDwgUFlfU1NJWkVfVF9NQVgpOwogICAgIGFzc2VydChsZW4gPj0gMCk7CiAgICAgc2VsZi0+cG9zICs9IGxlbjsKKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZidWZmZXIpOwogCiAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tU3NpemVfdChsZW4pOwogfQpAQCAtNTI4LDcgKzUzMCw3IEBACiB9CiAKIFB5RG9jX1NUUlZBUihzZWVrX2RvYywKLSJzZWVrKHBvcywgd2hlbmNlPTApIC0+IGludC4gIENoYW5nZSBzdHJlYW0gcG9zaXRpb24uXG4iCisic2Vlayhwb3NbLCB3aGVuY2VdKSAtPiBpbnQuICBDaGFuZ2Ugc3RyZWFtIHBvc2l0aW9uLlxuIgogIlxuIgogIlNlZWsgdG8gYnl0ZSBvZmZzZXQgcG9zIHJlbGF0aXZlIHRvIHBvc2l0aW9uIGluZGljYXRlZCBieSB3aGVuY2U6XG4iCiAiICAgICAwICBTdGFydCBvZiBzdHJlYW0gKHRoZSBkZWZhdWx0KS4gIHBvcyBzaG91bGQgYmUgPj0gMDtcbiIKQEAgLTYxMywxMSArNjE1LDExIEBACiB9CiAKIFB5RG9jX1NUUlZBUih3cml0ZWxpbmVzX2RvYywKLSJ3cml0ZWxpbmVzKHNlcXVlbmNlX29mX3N0cmluZ3MpIC0+IE5vbmUuICBXcml0ZSBzdHJpbmdzIHRvIHRoZSBmaWxlLlxuIgorIndyaXRlbGluZXMobGluZXMpIC0+IE5vbmUuICBXcml0ZSBieXRlcyBvYmplY3RzIHRvIHRoZSBmaWxlLlxuIgogIlxuIgotIk5vdGUgdGhhdCBuZXdsaW5lcyBhcmUgbm90IGFkZGVkLiAgVGhlIHNlcXVlbmNlIGNhbiBiZSBhbnkgaXRlcmFibGVcbiIKLSJvYmplY3QgcHJvZHVjaW5nIHN0cmluZ3MuIFRoaXMgaXMgZXF1aXZhbGVudCB0byBjYWxsaW5nIHdyaXRlKCkgZm9yXG4iCi0iZWFjaCBzdHJpbmcuIik7CisiTm90ZSB0aGF0IG5ld2xpbmVzIGFyZSBub3QgYWRkZWQuICBUaGUgYXJndW1lbnQgY2FuIGJlIGFueSBpdGVyYWJsZVxuIgorIm9iamVjdCBwcm9kdWNpbmcgYnl0ZXMgb2JqZWN0cy4gVGhpcyBpcyBlcXVpdmFsZW50IHRvIGNhbGxpbmcgd3JpdGUoKSBmb3JcbiIKKyJlYWNoIGJ5dGVzIG9iamVjdC4iKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKIGJ5dGVzaW9fd3JpdGVsaW5lcyhieXRlc2lvICpzZWxmLCBQeU9iamVjdCAqdikKQEAgLTY1NSw2ICs2NTcsNyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGJ5dGVzaW9fY2xvc2UoYnl0ZXNpbyAqc2VsZikKIHsKKyAgICBDSEVDS19FWFBPUlRTKHNlbGYpOwogICAgIGlmIChzZWxmLT5idWYgIT0gTlVMTCkgewogICAgICAgICBQeU1lbV9GcmVlKHNlbGYtPmJ1Zik7CiAgICAgICAgIHNlbGYtPmJ1ZiA9IE5VTEw7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19pby9maWxlaW8uYyBiL01vZHVsZXMvX2lvL2ZpbGVpby5jCmluZGV4IGYzY2U3NzYuLjc0NTA4YTcgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2lvL2ZpbGVpby5jCisrKyBiL01vZHVsZXMvX2lvL2ZpbGVpby5jCkBAIC01MiwxMyArNTIsMTUgQEAKICAgICB1bnNpZ25lZCBpbnQgYXBwZW5kaW5nIDogMTsKICAgICBzaWduZWQgaW50IHNlZWthYmxlIDogMjsgLyogLTEgbWVhbnMgdW5rbm93biAqLwogICAgIHVuc2lnbmVkIGludCBjbG9zZWZkIDogMTsKLSAgICB1bnNpZ25lZCBpbnQgZGVhbGxvY2F0aW5nOiAxOworICAgIGNoYXIgZmluYWxpemluZzsKICAgICBQeU9iamVjdCAqd2Vha3JlZmxpc3Q7CiAgICAgUHlPYmplY3QgKmRpY3Q7CiB9IGZpbGVpbzsKIAogUHlUeXBlT2JqZWN0IFB5RmlsZUlPX1R5cGU7CiAKK19QeV9JREVOVElGSUVSKG5hbWUpOworCiAjZGVmaW5lIFB5RmlsZUlPX0NoZWNrKG9wKSAoUHlPYmplY3RfVHlwZUNoZWNrKChvcCksICZQeUZpbGVJT19UeXBlKSkKIAogaW50CkBAIC0xMjQsMjQgKzEyNiwzMSBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGZpbGVpb19jbG9zZShmaWxlaW8gKnNlbGYpCiB7CisgICAgUHlPYmplY3QgKnJlczsKKyAgICBQeU9iamVjdCAqZXhjLCAqdmFsLCAqdGI7CisgICAgaW50IHJjOwogICAgIF9QeV9JREVOVElGSUVSKGNsb3NlKTsKKyAgICByZXMgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKChQeU9iamVjdCopJlB5UmF3SU9CYXNlX1R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUHlJZF9jbG9zZSwgIk8iLCBzZWxmKTsKICAgICBpZiAoIXNlbGYtPmNsb3NlZmQpIHsKICAgICAgICAgc2VsZi0+ZmQgPSAtMTsKLSAgICAgICAgUHlfUkVUVVJOX05PTkU7CisgICAgICAgIHJldHVybiByZXM7CiAgICAgfQotICAgIGlmIChzZWxmLT5kZWFsbG9jYXRpbmcpIHsKKyAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgIFB5RXJyX0ZldGNoKCZleGMsICZ2YWwsICZ0Yik7CisgICAgaWYgKHNlbGYtPmZpbmFsaXppbmcpIHsKICAgICAgICAgUHlPYmplY3QgKnIgPSBmaWxlaW9fZGVhbGxvY193YXJuKHNlbGYsIChQeU9iamVjdCAqKSBzZWxmKTsKICAgICAgICAgaWYgKHIpCiAgICAgICAgICAgICBQeV9ERUNSRUYocik7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CiAgICAgfQotICAgIGVycm5vID0gaW50ZXJuYWxfY2xvc2Uoc2VsZik7Ci0gICAgaWYgKGVycm5vIDwgMCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICByZXR1cm4gX1B5T2JqZWN0X0NhbGxNZXRob2RJZCgoUHlPYmplY3QqKSZQeVJhd0lPQmFzZV9UeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZQeUlkX2Nsb3NlLCAiTyIsIHNlbGYpOworICAgIHJjID0gaW50ZXJuYWxfY2xvc2Uoc2VsZik7CisgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICBfUHlFcnJfQ2hhaW5FeGNlcHRpb25zKGV4YywgdmFsLCB0Yik7CisgICAgaWYgKHJjIDwgMCkKKyAgICAgICAgUHlfQ0xFQVIocmVzKTsKKyAgICByZXR1cm4gcmVzOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtMjA0LDYgKzIxMyw5IEBACiAgICAgcmV0dXJuIDA7CiB9CiAKKyNpZmRlZiBPX0NMT0VYRUMKK2V4dGVybiBpbnQgX1B5X29wZW5fY2xvZXhlY193b3JrczsKKyNlbmRpZgogCiBzdGF0aWMgaW50CiBmaWxlaW9faW5pdChQeU9iamVjdCAqb3NlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKQEAgLTIyMyw2ICsyMzUsMTEgQEAKICAgICBpbnQgZmQgPSAtMTsKICAgICBpbnQgY2xvc2VmZCA9IDE7CiAgICAgaW50IGZkX2lzX293biA9IDA7CisjaWZkZWYgT19DTE9FWEVDCisgICAgaW50ICphdG9taWNfZmxhZ193b3JrcyA9ICZfUHlfb3Blbl9jbG9leGVjX3dvcmtzOworI2VsaWYgIWRlZmluZWQoTVNfV0lORE9XUykKKyAgICBpbnQgKmF0b21pY19mbGFnX3dvcmtzID0gTlVMTDsKKyNlbmRpZgogCiAgICAgYXNzZXJ0KFB5RmlsZUlPX0NoZWNrKG9zZWxmKSk7CiAgICAgaWYgKHNlbGYtPmZkID49IDApIHsKQEAgLTI1MCw3ICsyNjcsNyBAQAogICAgIGlmIChmZCA8IDApIHsKICAgICAgICAgaWYgKCFQeUVycl9PY2N1cnJlZCgpKSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTmVnYXRpdmUgZmlsZWRlc2NyaXB0b3IiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmVnYXRpdmUgZmlsZSBkZXNjcmlwdG9yIik7CiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKQEAgLTI1OCwxNSArMjc1LDE0IEBACiAKICNpZmRlZiBNU19XSU5ET1dTCiAgICAgaWYgKFB5VW5pY29kZV9DaGVjayhuYW1lb2JqKSkgewotICAgICAgICBpbnQgcnYgPSBfUHlVbmljb2RlX0hhc05VTENoYXJzKG5hbWVvYmopOwotICAgICAgICBpZiAocnYpIHsKLSAgICAgICAgICAgIGlmIChydiAhPSAtMSkKLSAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAiZW1iZWRkZWQgTlVMIGNoYXJhY3RlciIpOwotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9Ci0gICAgICAgIHdpZGVuYW1lID0gUHlVbmljb2RlX0FzVW5pY29kZShuYW1lb2JqKTsKKyAgICAgICAgUHlfc3NpemVfdCBsZW5ndGg7CisgICAgICAgIHdpZGVuYW1lID0gUHlVbmljb2RlX0FzVW5pY29kZUFuZFNpemUobmFtZW9iaiwgJmxlbmd0aCk7CiAgICAgICAgIGlmICh3aWRlbmFtZSA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICBpZiAod2NzbGVuKHdpZGVuYW1lKSAhPSBsZW5ndGgpIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJlbWJlZGRlZCBOVUwgY2hhcmFjdGVyIik7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KICAgICB9IGVsc2UKICNlbmRpZgogICAgIGlmIChmZCA8IDApCkBAIC0zNDMsNiArMzU5LDEyIEBACiAgICAgZmxhZ3MgfD0gT19CSU5BUlk7CiAjZW5kaWYKIAorI2lmZGVmIE1TX1dJTkRPV1MKKyAgICBmbGFncyB8PSBPX05PSU5IRVJJVDsKKyNlbGlmIGRlZmluZWQoT19DTE9FWEVDKQorICAgIGZsYWdzIHw9IE9fQ0xPRVhFQzsKKyNlbmRpZgorCiAgICAgaWYgKGZkID49IDApIHsKICAgICAgICAgaWYgKGNoZWNrX2ZkKGZkKSkKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CkBAIC0zNjYsMTAgKzM4OCwxOCBAQAogICAgICAgICAgICAgZWxzZQogI2VuZGlmCiAgICAgICAgICAgICAgICAgc2VsZi0+ZmQgPSBvcGVuKG5hbWUsIGZsYWdzLCAwNjY2KTsKKwogICAgICAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFB5T2JqZWN0ICpmZG9iaiA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVuZXIsICJPaSIsIG5hbWVvYmosIGZsYWdzKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpmZG9iajsKKworI2lmbmRlZiBNU19XSU5ET1dTCisgICAgICAgICAgICAvKiB0aGUgb3BlbmVyIG1heSBjbGVhciB0aGUgYXRvbWljIGZsYWcgKi8KKyAgICAgICAgICAgIGF0b21pY19mbGFnX3dvcmtzID0gTlVMTDsKKyNlbmRpZgorCisgICAgICAgICAgICBmZG9iaiA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihvcGVuZXIsICJPaSIsIG5hbWVvYmosIGZsYWdzKTsKICAgICAgICAgICAgIGlmIChmZG9iaiA9PSBOVUxMKQogICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICBpZiAoIVB5TG9uZ19DaGVjayhmZG9iaikpIHsKQEAgLTM4OCwxNCArNDE4LDE0IEBACiAKICAgICAgICAgZmRfaXNfb3duID0gMTsKICAgICAgICAgaWYgKHNlbGYtPmZkIDwgMCkgewotI2lmZGVmIE1TX1dJTkRPV1MKLSAgICAgICAgICAgIGlmICh3aWRlbmFtZSAhPSBOVUxMKQotICAgICAgICAgICAgICAgIFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZU9iamVjdChQeUV4Y19JT0Vycm9yLCBuYW1lb2JqKTsKLSAgICAgICAgICAgIGVsc2UKLSNlbmRpZgotICAgICAgICAgICAgICAgIFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZShQeUV4Y19JT0Vycm9yLCBuYW1lKTsKKyAgICAgICAgICAgIFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZU9iamVjdChQeUV4Y19PU0Vycm9yLCBuYW1lb2JqKTsKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgIH0KKworI2lmbmRlZiBNU19XSU5ET1dTCisgICAgICAgIGlmIChfUHlfc2V0X2luaGVyaXRhYmxlKHNlbGYtPmZkLCAwLCBhdG9taWNfZmxhZ193b3JrcykgPCAwKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKyNlbmRpZgogICAgIH0KICAgICBpZiAoZGlyY2hlY2soc2VsZiwgbmFtZW9iaikgPCAwKQogICAgICAgICBnb3RvIGVycm9yOwpAQCAtNDA1LDcgKzQzNSw3IEBACiAgICAgX3NldG1vZGUoc2VsZi0+ZmQsIE9fQklOQVJZKTsKICNlbmRpZgogCi0gICAgaWYgKFB5T2JqZWN0X1NldEF0dHJTdHJpbmcoKFB5T2JqZWN0ICopc2VsZiwgIm5hbWUiLCBuYW1lb2JqKSA8IDApCisgICAgaWYgKF9QeU9iamVjdF9TZXRBdHRySWQoKFB5T2JqZWN0ICopc2VsZiwgJlB5SWRfbmFtZSwgbmFtZW9iaikgPCAwKQogICAgICAgICBnb3RvIGVycm9yOwogCiAgICAgaWYgKHNlbGYtPmFwcGVuZGluZykgewpAQCAtNDQ5LDcgKzQ3OSw3IEBACiBzdGF0aWMgdm9pZAogZmlsZWlvX2RlYWxsb2MoZmlsZWlvICpzZWxmKQogewotICAgIHNlbGYtPmRlYWxsb2NhdGluZyA9IDE7CisgICAgc2VsZi0+ZmluYWxpemluZyA9IDE7CiAgICAgaWYgKF9QeUlPQmFzZV9maW5hbGl6ZSgoUHlPYmplY3QgKikgc2VsZikgPCAwKQogICAgICAgICByZXR1cm47CiAgICAgX1B5T2JqZWN0X0dDX1VOVFJBQ0soc2VsZik7CkBAIC00NjksOCArNDk5LDEwIEBACiBzdGF0aWMgUHlPYmplY3QgKgogZXJyX21vZGUoY2hhciAqYWN0aW9uKQogewotICAgIFB5RXJyX0Zvcm1hdChJT19TVEFURS0+dW5zdXBwb3J0ZWRfb3BlcmF0aW9uLAotICAgICAgICAgICAgICAgICAiRmlsZSBub3Qgb3BlbiBmb3IgJXMiLCBhY3Rpb24pOworICAgIF9QeUlPX1N0YXRlICpzdGF0ZSA9IElPX1NUQVRFKCk7CisgICAgaWYgKHN0YXRlICE9IE5VTEwpCisgICAgICAgIFB5RXJyX0Zvcm1hdChzdGF0ZS0+dW5zdXBwb3J0ZWRfb3BlcmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgIkZpbGUgbm90IG9wZW4gZm9yICVzIiwgYWN0aW9uKTsKICAgICByZXR1cm4gTlVMTDsKIH0KIApAQCAtNTM1LDcgKzU2Nyw3IEBACiAgICAgICAgIGxlbiA9IHBidWYubGVuOwogICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgICAgIGVycm5vID0gMDsKLSNpZiBkZWZpbmVkKE1TX1dJTjY0KSB8fCBkZWZpbmVkKE1TX1dJTkRPV1MpCisjaWZkZWYgTVNfV0lORE9XUwogICAgICAgICBpZiAobGVuID4gSU5UX01BWCkKICAgICAgICAgICAgIGxlbiA9IElOVF9NQVg7CiAgICAgICAgIG4gPSByZWFkKHNlbGYtPmZkLCBwYnVmLmJ1ZiwgKGludClsZW4pOwpAQCAtNTU4LDMzICs1OTAsMjcgQEAKICAgICByZXR1cm4gUHlMb25nX0Zyb21Tc2l6ZV90KG4pOwogfQogCisjaWZuZGVmIEhBVkVfRlNUQVQKKworc3RhdGljIFB5T2JqZWN0ICoKK2ZpbGVpb19yZWFkYWxsKGZpbGVpbyAqc2VsZikKK3sKKyAgICBfUHlfSURFTlRJRklFUihyZWFkYWxsKTsKKyAgICByZXR1cm4gX1B5T2JqZWN0X0NhbGxNZXRob2RJZCgoUHlPYmplY3QqKSZQeVJhd0lPQmFzZV9UeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZQeUlkX3JlYWRhbGwsICJPIiwgc2VsZik7Cit9CisKKyNlbHNlCisKIHN0YXRpYyBzaXplX3QKLW5ld19idWZmZXJzaXplKGZpbGVpbyAqc2VsZiwgc2l6ZV90IGN1cnJlbnRzaXplCi0jaWZkZWYgSEFWRV9GU1RBVAotICAgICAgICAgICAgICAgLCBQeV9vZmZfdCBwb3MsIFB5X29mZl90IGVuZAotI2VuZGlmCi0gICAgICAgICAgICAgICApCituZXdfYnVmZmVyc2l6ZShmaWxlaW8gKnNlbGYsIHNpemVfdCBjdXJyZW50c2l6ZSkKIHsKICAgICBzaXplX3QgYWRkZW5kOwotI2lmZGVmIEhBVkVfRlNUQVQKLSAgICBpZiAoZW5kICE9IChQeV9vZmZfdCktMSkgewotICAgICAgICAvKiBGaWxlcyBjbGFpbWluZyBhIHNpemUgc21hbGxlciB0aGFuIFNNQUxMQ0hVTksgbWF5Ci0gICAgICAgICAgIGFjdHVhbGx5IGJlIHN0cmVhbWluZyBwc2V1ZG8tZmlsZXMuIEluIHRoaXMgY2FzZSwgd2UKLSAgICAgICAgICAgYXBwbHkgdGhlIG1vcmUgYWdncmVzc2l2ZSBhbGdvcml0aG0gYmVsb3cuCi0gICAgICAgICovCi0gICAgICAgIGlmIChlbmQgPj0gU01BTExDSFVOSyAmJiBlbmQgPj0gcG9zICYmIHBvcyA+PSAwKSB7Ci0gICAgICAgICAgICAvKiBBZGQgMSBzbyBpZiB0aGUgZmlsZSB3ZXJlIHRvIGdyb3cgd2UnZCBub3RpY2UuICovCi0gICAgICAgICAgICBQeV9vZmZfdCBidWZzaXplID0gY3VycmVudHNpemUgKyBlbmQgLSBwb3MgKyAxOwotICAgICAgICAgICAgaWYgKGJ1ZnNpemUgPCBQWV9TU0laRV9UX01BWCkKLSAgICAgICAgICAgICAgICByZXR1cm4gKHNpemVfdClidWZzaXplOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJldHVybiBQWV9TU0laRV9UX01BWDsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZgorCiAgICAgLyogRXhwYW5kIHRoZSBidWZmZXIgYnkgYW4gYW1vdW50IHByb3BvcnRpb25hbCB0byB0aGUgY3VycmVudCBzaXplLAogICAgICAgIGdpdmluZyB1cyBhbW9ydGl6ZWQgbGluZWFyLXRpbWUgYmVoYXZpb3IuICBGb3IgYmlnZ2VyIHNpemVzLCB1c2UgYQogICAgICAgIGxlc3MtdGhhbi1kb3VibGUgZ3Jvd3RoIGZhY3RvciB0byBhdm9pZCBleGNlc3NpdmUgYWxsb2NhdGlvbi4gKi8KKyAgICBhc3NlcnQoY3VycmVudHNpemUgPD0gUFlfU1NJWkVfVF9NQVgpOwogICAgIGlmIChjdXJyZW50c2l6ZSA+IDY1NTM2KQogICAgICAgICBhZGRlbmQgPSBjdXJyZW50c2l6ZSA+PiAzOwogICAgIGVsc2UKQEAgLTU5OCwyNiArNjI0LDE5IEBACiBzdGF0aWMgUHlPYmplY3QgKgogZmlsZWlvX3JlYWRhbGwoZmlsZWlvICpzZWxmKQogewotI2lmZGVmIEhBVkVfRlNUQVQKICAgICBzdHJ1Y3Qgc3RhdCBzdDsKICAgICBQeV9vZmZfdCBwb3MsIGVuZDsKLSNlbmRpZgogICAgIFB5T2JqZWN0ICpyZXN1bHQ7Ci0gICAgUHlfc3NpemVfdCB0b3RhbCA9IDA7CisgICAgUHlfc3NpemVfdCBieXRlc19yZWFkID0gMDsKICAgICBQeV9zc2l6ZV90IG47Ci0gICAgc2l6ZV90IG5ld3NpemU7CisgICAgc2l6ZV90IGJ1ZnNpemU7CiAKICAgICBpZiAoc2VsZi0+ZmQgPCAwKQogICAgICAgICByZXR1cm4gZXJyX2Nsb3NlZCgpOwogICAgIGlmICghX1B5VmVyaWZ5X2ZkKHNlbGYtPmZkKSkKICAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19JT0Vycm9yKTsKIAotICAgIHJlc3VsdCA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgU01BTExDSFVOSyk7Ci0gICAgaWYgKHJlc3VsdCA9PSBOVUxMKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotI2lmZGVmIEhBVkVfRlNUQVQKLSNpZiBkZWZpbmVkKE1TX1dJTjY0KSB8fCBkZWZpbmVkKE1TX1dJTkRPV1MpCisjaWZkZWYgTVNfV0lORE9XUwogICAgIHBvcyA9IF9sc2Vla2k2NChzZWxmLT5mZCwgMEwsIFNFRUtfQ1VSKTsKICNlbHNlCiAgICAgcG9zID0gbHNlZWsoc2VsZi0+ZmQsIDBMLCBTRUVLX0NVUik7CkBAIC02MjYsNDQgKzY0NSw0NiBAQAogICAgICAgICBlbmQgPSBzdC5zdF9zaXplOwogICAgIGVsc2UKICAgICAgICAgZW5kID0gKFB5X29mZl90KS0xOwotI2VuZGlmCi0gICAgd2hpbGUgKDEpIHsKLSNpZmRlZiBIQVZFX0ZTVEFUCi0gICAgICAgIG5ld3NpemUgPSBuZXdfYnVmZmVyc2l6ZShzZWxmLCB0b3RhbCwgcG9zLCBlbmQpOwotI2Vsc2UKLSAgICAgICAgbmV3c2l6ZSA9IG5ld19idWZmZXJzaXplKHNlbGYsIHRvdGFsKTsKLSNlbmRpZgotICAgICAgICBpZiAobmV3c2l6ZSA+IFBZX1NTSVpFX1RfTUFYIHx8IG5ld3NpemUgPD0gMCkgewotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCi0gICAgICAgICAgICAgICAgInVuYm91bmRlZCByZWFkIHJldHVybmVkIG1vcmUgYnl0ZXMgIgotICAgICAgICAgICAgICAgICJ0aGFuIGEgUHl0aG9uIHN0cmluZyBjYW4gaG9sZCAiKTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KIAotICAgICAgICBpZiAoUHlCeXRlc19HRVRfU0laRShyZXN1bHQpIDwgKFB5X3NzaXplX3QpbmV3c2l6ZSkgewotICAgICAgICAgICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZSgmcmVzdWx0LCBuZXdzaXplKSA8IDApIHsKLSAgICAgICAgICAgICAgICBpZiAodG90YWwgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICBpZiAoZW5kID4gMCAmJiBlbmQgPj0gcG9zICYmIHBvcyA+PSAwICYmIGVuZCAtIHBvcyA8IFBZX1NTSVpFX1RfTUFYKSB7CisgICAgICAgIC8qIFRoaXMgaXMgcHJvYmFibHkgYSByZWFsIGZpbGUsIHNvIHdlIHRyeSB0byBhbGxvY2F0ZSBhCisgICAgICAgICAgIGJ1ZmZlciBvbmUgYnl0ZSBsYXJnZXIgdGhhbiB0aGUgcmVzdCBvZiB0aGUgZmlsZS4gIElmIHRoZQorICAgICAgICAgICBjYWxjdWxhdGlvbiBpcyByaWdodCB0aGVuIHdlIHNob3VsZCBnZXQgRU9GIHdpdGhvdXQgaGF2aW5nCisgICAgICAgICAgIHRvIGVubGFyZ2UgdGhlIGJ1ZmZlci4gKi8KKyAgICAgICAgYnVmc2l6ZSA9IChzaXplX3QpKGVuZCAtIHBvcyArIDEpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJ1ZnNpemUgPSBTTUFMTENIVU5LOworICAgIH0KKworICAgIHJlc3VsdCA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgYnVmc2l6ZSk7CisgICAgaWYgKHJlc3VsdCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHdoaWxlICgxKSB7CisgICAgICAgIGlmIChieXRlc19yZWFkID49IChQeV9zc2l6ZV90KWJ1ZnNpemUpIHsKKyAgICAgICAgICAgIGJ1ZnNpemUgPSBuZXdfYnVmZmVyc2l6ZShzZWxmLCBieXRlc19yZWFkKTsKKyAgICAgICAgICAgIGlmIChidWZzaXplID4gUFlfU1NJWkVfVF9NQVggfHwgYnVmc2l6ZSA8PSAwKSB7CisgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bmJvdW5kZWQgcmVhZCByZXR1cm5lZCBtb3JlIGJ5dGVzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRoYW4gYSBQeXRob24gYnl0ZXMgb2JqZWN0IGNhbiBob2xkIik7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChQeUJ5dGVzX0dFVF9TSVpFKHJlc3VsdCkgPCAoUHlfc3NpemVfdClidWZzaXplKSB7CisgICAgICAgICAgICAgICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZSgmcmVzdWx0LCBidWZzaXplKSA8IDApCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwotICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICAgICAgZXJybm8gPSAwOwotICAgICAgICBuID0gbmV3c2l6ZSAtIHRvdGFsOwotI2lmIGRlZmluZWQoTVNfV0lONjQpIHx8IGRlZmluZWQoTVNfV0lORE9XUykKKyAgICAgICAgbiA9IGJ1ZnNpemUgLSBieXRlc19yZWFkOworI2lmZGVmIE1TX1dJTkRPV1MKICAgICAgICAgaWYgKG4gPiBJTlRfTUFYKQogICAgICAgICAgICAgbiA9IElOVF9NQVg7Ci0gICAgICAgIG4gPSByZWFkKHNlbGYtPmZkLAotICAgICAgICAgICAgICAgICBQeUJ5dGVzX0FTX1NUUklORyhyZXN1bHQpICsgdG90YWwsCi0gICAgICAgICAgICAgICAgIChpbnQpbik7CisgICAgICAgIG4gPSByZWFkKHNlbGYtPmZkLCBQeUJ5dGVzX0FTX1NUUklORyhyZXN1bHQpICsgYnl0ZXNfcmVhZCwgKGludCluKTsKICNlbHNlCi0gICAgICAgIG4gPSByZWFkKHNlbGYtPmZkLAotICAgICAgICAgICAgICAgICBQeUJ5dGVzX0FTX1NUUklORyhyZXN1bHQpICsgdG90YWwsCi0gICAgICAgICAgICAgICAgIG4pOworICAgICAgICBuID0gcmVhZChzZWxmLT5mZCwgUHlCeXRlc19BU19TVFJJTkcocmVzdWx0KSArIGJ5dGVzX3JlYWQsIG4pOwogI2VuZGlmCiAgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCiAgICAgICAgIGlmIChuID09IDApCkBAIC02NzYsOSArNjk3LDkgQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAodG90YWwgPiAwKQotICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgaWYgKGVycm5vID09IEVBR0FJTikgeworICAgICAgICAgICAgICAgIGlmIChieXRlc19yZWFkID4gMCkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CiAgICAgICAgICAgICAgICAgUHlfUkVUVVJOX05PTkU7CiAgICAgICAgICAgICB9CkBAIC02ODYsMjIgKzcwNywxOSBAQAogICAgICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX0lPRXJyb3IpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KLSAgICAgICAgdG90YWwgKz0gbjsKLSNpZmRlZiBIQVZFX0ZTVEFUCisgICAgICAgIGJ5dGVzX3JlYWQgKz0gbjsKICAgICAgICAgcG9zICs9IG47Ci0jZW5kaWYKICAgICB9CiAKLSAgICBpZiAoUHlCeXRlc19HRVRfU0laRShyZXN1bHQpID4gdG90YWwpIHsKLSAgICAgICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZSgmcmVzdWx0LCB0b3RhbCkgPCAwKSB7Ci0gICAgICAgICAgICAvKiBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4sIGJ1dCBqdXN0IGluIGNhc2UgKi8KLSAgICAgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgIGlmIChQeUJ5dGVzX0dFVF9TSVpFKHJlc3VsdCkgPiBieXRlc19yZWFkKSB7CisgICAgICAgIGlmIChfUHlCeXRlc19SZXNpemUoJnJlc3VsdCwgYnl0ZXNfcmVhZCkgPCAwKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorI2VuZGlmIC8qIEhBVkVfRlNUQVQgKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKIGZpbGVpb19yZWFkKGZpbGVpbyAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CkBAIC03MjIsNyArNzQwLDcgQEAKICAgICAgICAgcmV0dXJuIGZpbGVpb19yZWFkYWxsKHNlbGYpOwogICAgIH0KIAotI2lmIGRlZmluZWQoTVNfV0lONjQpIHx8IGRlZmluZWQoTVNfV0lORE9XUykKKyNpZmRlZiBNU19XSU5ET1dTCiAgICAgaWYgKHNpemUgPiBJTlRfTUFYKQogICAgICAgICBzaXplID0gSU5UX01BWDsKICNlbmRpZgpAQCAtNzM0LDcgKzc1Miw3IEBACiAgICAgaWYgKF9QeVZlcmlmeV9mZChzZWxmLT5mZCkpIHsKICAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgICAgICBlcnJubyA9IDA7Ci0jaWYgZGVmaW5lZChNU19XSU42NCkgfHwgZGVmaW5lZChNU19XSU5ET1dTKQorI2lmZGVmIE1TX1dJTkRPV1MKICAgICAgICAgbiA9IHJlYWQoc2VsZi0+ZmQsIHB0ciwgKGludClzaXplKTsKICNlbHNlCiAgICAgICAgIG4gPSByZWFkKHNlbGYtPmZkLCBwdHIsIHNpemUpOwpAQCAtNzU1LDcgKzc3Myw3IEBACiAKICAgICBpZiAobiAhPSBzaXplKSB7CiAgICAgICAgIGlmIChfUHlCeXRlc19SZXNpemUoJmJ5dGVzLCBuKSA8IDApIHsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihieXRlcyk7CisgICAgICAgICAgICBQeV9DTEVBUihieXRlcyk7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQogICAgIH0KQEAgLTc4Miw3ICs4MDAsNyBAQAogICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgICAgIGVycm5vID0gMDsKICAgICAgICAgbGVuID0gcGJ1Zi5sZW47Ci0jaWYgZGVmaW5lZChNU19XSU42NCkgfHwgZGVmaW5lZChNU19XSU5ET1dTKQorI2lmZGVmIE1TX1dJTkRPV1MKICAgICAgICAgaWYgKGxlbiA+IDMyNzY3ICYmIGlzYXR0eShzZWxmLT5mZCkpIHsKICAgICAgICAgICAgIC8qIElzc3VlICMxMTM5NTogdGhlIFdpbmRvd3MgY29uc29sZSByZXR1cm5zIGFuIGVycm9yICgxMjogbm90CiAgICAgICAgICAgICAgICBlbm91Z2ggc3BhY2UgZXJyb3IpIG9uIHdyaXRpbmcgaW50byBzdGRvdXQgaWYgc3Rkb3V0IG1vZGUgaXMKQEAgLTg1NSw3ICs4NzMsNyBAQAogCiAgICAgaWYgKF9QeVZlcmlmeV9mZChmZCkpIHsKICAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotI2lmIGRlZmluZWQoTVNfV0lONjQpIHx8IGRlZmluZWQoTVNfV0lORE9XUykKKyNpZmRlZiBNU19XSU5ET1dTCiAgICAgICAgIHJlcyA9IF9sc2Vla2k2NChmZCwgcG9zLCB3aGVuY2UpOwogI2Vsc2UKICAgICAgICAgcmVzID0gbHNlZWsoZmQsIHBvcywgd2hlbmNlKTsKQEAgLTEwMjgsNyArMTA0Niw2IEBACiBzdGF0aWMgUHlPYmplY3QgKgogZmlsZWlvX3JlcHIoZmlsZWlvICpzZWxmKQogewotICAgIF9QeV9JREVOVElGSUVSKG5hbWUpOwogICAgIFB5T2JqZWN0ICpuYW1lb2JqLCAqcmVzOwogCiAgICAgaWYgKHNlbGYtPmZkIDwgMCkKQEAgLTEwNzYsMTAgKzEwOTMsMTAgQEAKIFB5RG9jX1NUUlZBUihmaWxlaW9fZG9jLAogImZpbGUobmFtZTogc3RyWywgbW9kZTogc3RyXVssIG9wZW5lcjogTm9uZV0pIC0+IGZpbGUgSU8gb2JqZWN0XG4iCiAiXG4iCi0iT3BlbiBhIGZpbGUuICBUaGUgbW9kZSBjYW4gYmUgJ3InLCAndycsICd4JyBvciAnYScgZm9yIHJlYWRpbmcgKGRlZmF1bHQpLFxuIgorIk9wZW4gYSBmaWxlLiAgVGhlIG1vZGUgY2FuIGJlICdyJyAoZGVmYXVsdCksICd3JywgJ3gnIG9yICdhJyBmb3IgcmVhZGluZyxcbiIKICJ3cml0aW5nLCBleGNsdXNpdmUgY3JlYXRpb24gb3IgYXBwZW5kaW5nLiAgVGhlIGZpbGUgd2lsbCBiZSBjcmVhdGVkIGlmIGl0XG4iCiAiZG9lc24ndCBleGlzdCB3aGVuIG9wZW5lZCBmb3Igd3JpdGluZyBvciBhcHBlbmRpbmc7IGl0IHdpbGwgYmUgdHJ1bmNhdGVkXG4iCi0id2hlbiBvcGVuZWQgZm9yIHdyaXRpbmcuICBBIGBGaWxlRXhpc3RzRXJyb3JgIHdpbGwgYmUgcmFpc2VkIGlmIGl0IGFscmVhZHlcbiIKKyJ3aGVuIG9wZW5lZCBmb3Igd3JpdGluZy4gIEEgRmlsZUV4aXN0c0Vycm9yIHdpbGwgYmUgcmFpc2VkIGlmIGl0IGFscmVhZHlcbiIKICJleGlzdHMgd2hlbiBvcGVuZWQgZm9yIGNyZWF0aW5nLiBPcGVuaW5nIGEgZmlsZSBmb3IgY3JlYXRpbmcgaW1wbGllc1xuIgogIndyaXRpbmcgc28gdGhpcyBtb2RlIGJlaGF2ZXMgaW4gYSBzaW1pbGFyIHdheSB0byAndycuQWRkIGEgJysnIHRvIHRoZSBtb2RlXG4iCiAidG8gYWxsb3cgc2ltdWx0YW5lb3VzIHJlYWRpbmcgYW5kIHdyaXRpbmcuIEEgY3VzdG9tIG9wZW5lciBjYW4gYmUgdXNlZCBieVxuIgpAQCAtMTA5Myw0NiArMTExMCw1MSBAQAogIlxuIgogIk9ubHkgbWFrZXMgb25lIHN5c3RlbSBjYWxsLCBzbyBsZXNzIGRhdGEgbWF5IGJlIHJldHVybmVkIHRoYW4gcmVxdWVzdGVkXG4iCiAiSW4gbm9uLWJsb2NraW5nIG1vZGUsIHJldHVybnMgTm9uZSBpZiBubyBkYXRhIGlzIGF2YWlsYWJsZS5cbiIKLSJPbiBlbmQtb2YtZmlsZSwgcmV0dXJucyAnJy4iKTsKKyJSZXR1cm4gYW4gZW1wdHkgYnl0ZXMgb2JqZWN0IGF0IEVPRi4iKTsKIAogUHlEb2NfU1RSVkFSKHJlYWRhbGxfZG9jLAogInJlYWRhbGwoKSAtPiBieXRlcy4gIHJlYWQgYWxsIGRhdGEgZnJvbSB0aGUgZmlsZSwgcmV0dXJuZWQgYXMgYnl0ZXMuXG4iCiAiXG4iCiAiSW4gbm9uLWJsb2NraW5nIG1vZGUsIHJldHVybnMgYXMgbXVjaCBhcyBpcyBpbW1lZGlhdGVseSBhdmFpbGFibGUsXG4iCi0ib3IgTm9uZSBpZiBubyBkYXRhIGlzIGF2YWlsYWJsZS4gIE9uIGVuZC1vZi1maWxlLCByZXR1cm5zICcnLiIpOworIm9yIE5vbmUgaWYgbm8gZGF0YSBpcyBhdmFpbGFibGUuICBSZXR1cm4gYW4gZW1wdHkgYnl0ZXMgb2JqZWN0IGF0IEVPRi4iKTsKIAogUHlEb2NfU1RSVkFSKHdyaXRlX2RvYywKICJ3cml0ZShiOiBieXRlcykgLT4gaW50LiAgV3JpdGUgYnl0ZXMgYiB0byBmaWxlLCByZXR1cm4gbnVtYmVyIHdyaXR0ZW4uXG4iCiAiXG4iCiAiT25seSBtYWtlcyBvbmUgc3lzdGVtIGNhbGwsIHNvIG5vdCBhbGwgb2YgdGhlIGRhdGEgbWF5IGJlIHdyaXR0ZW4uXG4iCi0iVGhlIG51bWJlciBvZiBieXRlcyBhY3R1YWxseSB3cml0dGVuIGlzIHJldHVybmVkLiIpOworIlRoZSBudW1iZXIgb2YgYnl0ZXMgYWN0dWFsbHkgd3JpdHRlbiBpcyByZXR1cm5lZC4gIEluIG5vbi1ibG9ja2luZyBtb2RlLFxuIgorInJldHVybnMgTm9uZSBpZiB0aGUgd3JpdGUgd291bGQgYmxvY2suIgorKTsKIAogUHlEb2NfU1RSVkFSKGZpbGVub19kb2MsCi0iZmlsZW5vKCkgLT4gaW50LiBcImZpbGUgZGVzY3JpcHRvclwiLlxuIgotIlxuIgotIlRoaXMgaXMgbmVlZGVkIGZvciBsb3dlci1sZXZlbCBmaWxlIGludGVyZmFjZXMsIHN1Y2ggdGhlIGZjbnRsIG1vZHVsZS4iKTsKKyJmaWxlbm8oKSAtPiBpbnQuICBSZXR1cm4gdGhlIHVuZGVybHlpbmcgZmlsZSBkZXNjcmlwdG9yIChhbiBpbnRlZ2VyKS4iKTsKIAogUHlEb2NfU1RSVkFSKHNlZWtfZG9jLAotInNlZWsob2Zmc2V0OiBpbnRbLCB3aGVuY2U6IGludF0pIC0+IE5vbmUuICBNb3ZlIHRvIG5ldyBmaWxlIHBvc2l0aW9uLlxuIgorInNlZWsob2Zmc2V0OiBpbnRbLCB3aGVuY2U6IGludF0pIC0+IGludC4gIE1vdmUgdG8gbmV3IGZpbGUgcG9zaXRpb24gYW5kXG4iCisicmV0dXJuIHRoZSBmaWxlIHBvc2l0aW9uLlxuIgogIlxuIgogIkFyZ3VtZW50IG9mZnNldCBpcyBhIGJ5dGUgY291bnQuICBPcHRpb25hbCBhcmd1bWVudCB3aGVuY2UgZGVmYXVsdHMgdG9cbiIKLSIwIChvZmZzZXQgZnJvbSBzdGFydCBvZiBmaWxlLCBvZmZzZXQgc2hvdWxkIGJlID49IDApOyBvdGhlciB2YWx1ZXMgYXJlIDFcbiIKLSIobW92ZSByZWxhdGl2ZSB0byBjdXJyZW50IHBvc2l0aW9uLCBwb3NpdGl2ZSBvciBuZWdhdGl2ZSksIGFuZCAyIChtb3ZlXG4iCi0icmVsYXRpdmUgdG8gZW5kIG9mIGZpbGUsIHVzdWFsbHkgbmVnYXRpdmUsIGFsdGhvdWdoIG1hbnkgcGxhdGZvcm1zIGFsbG93XG4iCi0ic2Vla2luZyBiZXlvbmQgdGhlIGVuZCBvZiBhIGZpbGUpLiIKKyJTRUVLX1NFVCBvciAwIChvZmZzZXQgZnJvbSBzdGFydCBvZiBmaWxlLCBvZmZzZXQgc2hvdWxkIGJlID49IDApOyBvdGhlciB2YWx1ZXNcbiIKKyJhcmUgU0VFS19DVVIgb3IgMSAobW92ZSByZWxhdGl2ZSB0byBjdXJyZW50IHBvc2l0aW9uLCBwb3NpdGl2ZSBvciBuZWdhdGl2ZSksXG4iCisiYW5kIFNFRUtfRU5EIG9yIDIgKG1vdmUgcmVsYXRpdmUgdG8gZW5kIG9mIGZpbGUsIHVzdWFsbHkgbmVnYXRpdmUsIGFsdGhvdWdoXG4iCisibWFueSBwbGF0Zm9ybXMgYWxsb3cgc2Vla2luZyBiZXlvbmQgdGhlIGVuZCBvZiBhIGZpbGUpLlxuIgogIlxuIgogIk5vdGUgdGhhdCBub3QgYWxsIGZpbGUgb2JqZWN0cyBhcmUgc2Vla2FibGUuIik7CiAKICNpZmRlZiBIQVZFX0ZUUlVOQ0FURQogUHlEb2NfU1RSVkFSKHRydW5jYXRlX2RvYywKLSJ0cnVuY2F0ZShbc2l6ZTogaW50XSkgLT4gTm9uZS4gIFRydW5jYXRlIHRoZSBmaWxlIHRvIGF0IG1vc3Qgc2l6ZSBieXRlcy5cbiIKKyJ0cnVuY2F0ZShbc2l6ZTogaW50XSkgLT4gaW50LiAgVHJ1bmNhdGUgdGhlIGZpbGUgdG8gYXQgbW9zdCBzaXplIGJ5dGVzXG4iCisiYW5kIHJldHVybiB0aGUgdHJ1bmNhdGVkIHNpemUuXG4iCiAiXG4iCi0iU2l6ZSBkZWZhdWx0cyB0byB0aGUgY3VycmVudCBmaWxlIHBvc2l0aW9uLCBhcyByZXR1cm5lZCBieSB0ZWxsKCkuIgorIlNpemUgZGVmYXVsdHMgdG8gdGhlIGN1cnJlbnQgZmlsZSBwb3NpdGlvbiwgYXMgcmV0dXJuZWQgYnkgdGVsbCgpLlxuIgogIlRoZSBjdXJyZW50IGZpbGUgcG9zaXRpb24gaXMgY2hhbmdlZCB0byB0aGUgdmFsdWUgb2Ygc2l6ZS4iKTsKICNlbmRpZgogCiBQeURvY19TVFJWQVIodGVsbF9kb2MsCi0idGVsbCgpIC0+IGludC4gIEN1cnJlbnQgZmlsZSBwb3NpdGlvbiIpOworInRlbGwoKSAtPiBpbnQuICBDdXJyZW50IGZpbGUgcG9zaXRpb24uXG4iCisiXG4iCisiQ2FuIHJhaXNlIE9TRXJyb3IgZm9yIG5vbiBzZWVrYWJsZSBmaWxlcy4iCispOwogCiBQeURvY19TVFJWQVIocmVhZGludG9fZG9jLAogInJlYWRpbnRvKCkgLT4gU2FtZSBhcyBSYXdJT0Jhc2UucmVhZGludG8oKS4iKTsKQEAgLTExNDEsMTAgKzExNjMsMTAgQEAKICJjbG9zZSgpIC0+IE5vbmUuICBDbG9zZSB0aGUgZmlsZS5cbiIKICJcbiIKICJBIGNsb3NlZCBmaWxlIGNhbm5vdCBiZSB1c2VkIGZvciBmdXJ0aGVyIEkvTyBvcGVyYXRpb25zLiAgY2xvc2UoKSBtYXkgYmVcbiIKLSJjYWxsZWQgbW9yZSB0aGFuIG9uY2Ugd2l0aG91dCBlcnJvci4gIENoYW5nZXMgdGhlIGZpbGVubyB0byAtMS4iKTsKKyJjYWxsZWQgbW9yZSB0aGFuIG9uY2Ugd2l0aG91dCBlcnJvci4iKTsKIAogUHlEb2NfU1RSVkFSKGlzYXR0eV9kb2MsCi0iaXNhdHR5KCkgLT4gYm9vbC4gIFRydWUgaWYgdGhlIGZpbGUgaXMgY29ubmVjdGVkIHRvIGEgdHR5IGRldmljZS4iKTsKKyJpc2F0dHkoKSAtPiBib29sLiAgVHJ1ZSBpZiB0aGUgZmlsZSBpcyBjb25uZWN0ZWQgdG8gYSBUVFkgZGV2aWNlLiIpOwogCiBQeURvY19TVFJWQVIoc2Vla2FibGVfZG9jLAogInNlZWthYmxlKCkgLT4gYm9vbC4gIFRydWUgaWYgZmlsZSBzdXBwb3J0cyByYW5kb20tYWNjZXNzLiIpOwpAQCAtMTE5OSwxMSArMTIyMSwxNiBAQAogc3RhdGljIFB5R2V0U2V0RGVmIGZpbGVpb19nZXRzZXRsaXN0W10gPSB7CiAgICAgeyJjbG9zZWQiLCAoZ2V0dGVyKWdldF9jbG9zZWQsIE5VTEwsICJUcnVlIGlmIHRoZSBmaWxlIGlzIGNsb3NlZCJ9LAogICAgIHsiY2xvc2VmZCIsIChnZXR0ZXIpZ2V0X2Nsb3NlZmQsIE5VTEwsCi0gICAgICAgICJUcnVlIGlmIHRoZSBmaWxlIGRlc2NyaXB0b3Igd2lsbCBiZSBjbG9zZWQifSwKKyAgICAgICAgIlRydWUgaWYgdGhlIGZpbGUgZGVzY3JpcHRvciB3aWxsIGJlIGNsb3NlZCBieSBjbG9zZSgpLiJ9LAogICAgIHsibW9kZSIsIChnZXR0ZXIpZ2V0X21vZGUsIE5VTEwsICJTdHJpbmcgZ2l2aW5nIHRoZSBmaWxlIG1vZGUifSwKICAgICB7TlVMTH0sCiB9OwogCitzdGF0aWMgUHlNZW1iZXJEZWYgZmlsZWlvX21lbWJlcnNbXSA9IHsKKyAgICB7Il9maW5hbGl6aW5nIiwgVF9CT09MLCBvZmZzZXRvZihmaWxlaW8sIGZpbmFsaXppbmcpLCAwfSwKKyAgICB7TlVMTH0KK307CisKIFB5VHlwZU9iamVjdCBQeUZpbGVJT19UeXBlID0gewogICAgIFB5VmFyT2JqZWN0X0hFQURfSU5JVChOVUxMLCAwKQogICAgICJfaW8uRmlsZUlPIiwKQEAgLTEyMjUsNyArMTI1Miw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zZXRhdHRybyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfYnVmZmVyICovCiAgICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19CQVNFVFlQRQotICAgICAgICAgICAgICAgICAgICB8IFB5X1RQRkxBR1NfSEFWRV9HQywgICAgICAgLyogdHBfZmxhZ3MgKi8KKyAgICAgICAgfCBQeV9UUEZMQUdTX0hBVkVfR0MgfCBQeV9UUEZMQUdTX0hBVkVfRklOQUxJWkUsICAgICAgIC8qIHRwX2ZsYWdzICovCiAgICAgZmlsZWlvX2RvYywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kb2MgKi8KICAgICAodHJhdmVyc2Vwcm9jKWZpbGVpb190cmF2ZXJzZSwgICAgICAgICAgICAgIC8qIHRwX3RyYXZlcnNlICovCiAgICAgKGlucXVpcnkpZmlsZWlvX2NsZWFyLCAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jbGVhciAqLwpAQCAtMTIzNCw3ICsxMjYxLDcgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXJuZXh0ICovCiAgICAgZmlsZWlvX21ldGhvZHMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZXRob2RzICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZW1iZXJzICovCisgICAgZmlsZWlvX21lbWJlcnMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZW1iZXJzICovCiAgICAgZmlsZWlvX2dldHNldGxpc3QsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRzZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2UgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RpY3QgKi8KQEAgLTEyNDUsNCArMTI3MiwxMyBAQAogICAgIFB5VHlwZV9HZW5lcmljQWxsb2MsICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYWxsb2MgKi8KICAgICBmaWxlaW9fbmV3LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX25ldyAqLwogICAgIFB5T2JqZWN0X0dDX0RlbCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZnJlZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXNfZ2MgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2VzICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tcm8gKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NhY2hlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zdWJjbGFzc2VzICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVsICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF92ZXJzaW9uX3RhZyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZmluYWxpemUgKi8KIH07CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19pby9pb2Jhc2UuYyBiL01vZHVsZXMvX2lvL2lvYmFzZS5jCmluZGV4IGUzODQ3M2EuLmVmMDZiNDMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2lvL2lvYmFzZS5jCisrKyBiL01vZHVsZXMvX2lvL2lvYmFzZS5jCkBAIC0xLDkgKzEsOSBAQAogLyoKICAgICBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgSS9PIGFic3RyYWN0IGJhc2UgY2xhc3NlcyBoaWVyYXJjaHkKICAgICBhcyBkZWZpbmVkIGJ5IFBFUCAzMTE2IC0gIk5ldyBJL08iCi0gICAgCisKICAgICBDbGFzc2VzIGRlZmluZWQgaGVyZTogSU9CYXNlLCBSYXdJT0Jhc2UuCi0gICAgCisKICAgICBXcml0dGVuIGJ5IEFtYXVyeSBGb3JnZW90IGQnQXJjIGFuZCBBbnRvaW5lIFBpdHJvdQogKi8KIApAQCAtMTksNyArMTksNyBAQAogCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgUHlPYmplY3RfSEVBRAotICAgIAorCiAgICAgUHlPYmplY3QgKmRpY3Q7CiAgICAgUHlPYmplY3QgKndlYWtyZWZsaXN0OwogfSBpb2Jhc2U7CkBAIC00Miw4ICs0Miw4IEBACiAgICAgImJ5dGVzLiBieXRlYXJyYXlzIGFyZSBhY2NlcHRlZCB0b28sIGFuZCBpbiBzb21lIGNhc2VzIChzdWNoIGFzXG4iCiAgICAgInJlYWRpbnRvKSBuZWVkZWQuIFRleHQgSS9PIGNsYXNzZXMgd29yayB3aXRoIHN0ciBkYXRhLlxuIgogICAgICJcbiIKLSAgICAiTm90ZSB0aGF0IGNhbGxpbmcgYW55IG1ldGhvZCAoZXZlbiBpbnF1aXJpZXMpIG9uIGEgY2xvc2VkIHN0cmVhbSBpc1xuIgotICAgICJ1bmRlZmluZWQuIEltcGxlbWVudGF0aW9ucyBtYXkgcmFpc2UgSU9FcnJvciBpbiB0aGlzIGNhc2UuXG4iCisgICAgIk5vdGUgdGhhdCBjYWxsaW5nIGFueSBtZXRob2QgKGV4Y2VwdCBhZGRpdGlvbmFsIGNhbGxzIHRvIGNsb3NlKCksXG4iCisgICAgIndoaWNoIGFyZSBpZ25vcmVkKSBvbiBhIGNsb3NlZCBzdHJlYW0gc2hvdWxkIHJhaXNlIGEgVmFsdWVFcnJvci5cbiIKICAgICAiXG4iCiAgICAgIklPQmFzZSAoYW5kIGl0cyBzdWJjbGFzc2VzKSBzdXBwb3J0IHRoZSBpdGVyYXRvciBwcm90b2NvbCwgbWVhbmluZ1xuIgogICAgICJ0aGF0IGFuIElPQmFzZSBvYmplY3QgY2FuIGJlIGl0ZXJhdGVkIG92ZXIgeWllbGRpbmcgdGhlIGxpbmVzIGluIGFcbiIKQEAgLTYzLDExICs2MywxNSBAQAogI2RlZmluZSBJU19DTE9TRUQoc2VsZikgXAogICAgIF9QeU9iamVjdF9IYXNBdHRySWQoc2VsZiwgJlB5SWRfX19JT0Jhc2VfY2xvc2VkKQogCitfUHlfSURFTlRJRklFUihyZWFkKTsKKwogLyogSW50ZXJuYWwgbWV0aG9kcyAqLwogc3RhdGljIFB5T2JqZWN0ICoKIGlvYmFzZV91bnN1cHBvcnRlZChjb25zdCBjaGFyICptZXNzYWdlKQogewotICAgIFB5RXJyX1NldFN0cmluZyhJT19TVEFURS0+dW5zdXBwb3J0ZWRfb3BlcmF0aW9uLCBtZXNzYWdlKTsKKyAgICBfUHlJT19TdGF0ZSAqc3RhdGUgPSBJT19TVEFURSgpOworICAgIGlmIChzdGF0ZSAhPSBOVUxMKQorICAgICAgICBQeUVycl9TZXRTdHJpbmcoc3RhdGUtPnVuc3VwcG9ydGVkX29wZXJhdGlvbiwgbWVzc2FnZSk7CiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTE4MCw0MiArMTg0LDQ0IEBACiBpb2Jhc2VfY2xvc2UoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewogICAgIFB5T2JqZWN0ICpyZXM7Ci0gICAgX1B5X0lERU5USUZJRVIoX19JT0Jhc2VfY2xvc2VkKTsKIAogICAgIGlmIChJU19DTE9TRUQoc2VsZikpCiAgICAgICAgIFB5X1JFVFVSTl9OT05FOwogCiAgICAgcmVzID0gUHlPYmplY3RfQ2FsbE1ldGhvZE9iakFyZ3Moc2VsZiwgX1B5SU9fc3RyX2ZsdXNoLCBOVUxMKTsKLSAgICBfUHlPYmplY3RfU2V0QXR0cklkKHNlbGYsICZQeUlkX19fSU9CYXNlX2Nsb3NlZCwgUHlfVHJ1ZSk7Ci0gICAgaWYgKHJlcyA9PSBOVUxMKSB7CisKKyAgICBpZiAoX1B5T2JqZWN0X1NldEF0dHJJZChzZWxmLCAmUHlJZF9fX0lPQmFzZV9jbG9zZWQsIFB5X1RydWUpIDwgMCkgeworICAgICAgICBQeV9YREVDUkVGKHJlcyk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBQeV9YREVDUkVGKHJlcyk7CisKKyAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgUHlfREVDUkVGKHJlcyk7CiAgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKIC8qIEZpbmFsaXphdGlvbiBhbmQgZ2FyYmFnZSBjb2xsZWN0aW9uIHN1cHBvcnQgKi8KIAotaW50Ci1fUHlJT0Jhc2VfZmluYWxpemUoUHlPYmplY3QgKnNlbGYpCitzdGF0aWMgdm9pZAoraW9iYXNlX2ZpbmFsaXplKFB5T2JqZWN0ICpzZWxmKQogewogICAgIFB5T2JqZWN0ICpyZXM7Ci0gICAgUHlPYmplY3QgKnRwLCAqdiwgKnRiOwotICAgIGludCBjbG9zZWQgPSAxOwotICAgIGludCBpc196b21iaWU7CisgICAgUHlPYmplY3QgKmVycm9yX3R5cGUsICplcnJvcl92YWx1ZSwgKmVycm9yX3RyYWNlYmFjazsKKyAgICBpbnQgY2xvc2VkOworICAgIF9QeV9JREVOVElGSUVSKF9maW5hbGl6aW5nKTsKIAotICAgIC8qIElmIF9QeUlPQmFzZV9maW5hbGl6ZSgpIGlzIGNhbGxlZCBmcm9tIGEgZGVzdHJ1Y3Rvciwgd2UgbmVlZCB0bwotICAgICAgIHJlc3VycmVjdCB0aGUgb2JqZWN0IGFzIGNhbGxpbmcgY2xvc2UoKSBjYW4gaW52b2tlIGFyYml0cmFyeSBjb2RlLiAqLwotICAgIGlzX3pvbWJpZSA9IChQeV9SRUZDTlQoc2VsZikgPT0gMCk7Ci0gICAgaWYgKGlzX3pvbWJpZSkgewotICAgICAgICArK1B5X1JFRkNOVChzZWxmKTsKLSAgICB9Ci0gICAgUHlFcnJfRmV0Y2goJnRwLCAmdiwgJnRiKTsKKyAgICAvKiBTYXZlIHRoZSBjdXJyZW50IGV4Y2VwdGlvbiwgaWYgYW55LiAqLworICAgIFB5RXJyX0ZldGNoKCZlcnJvcl90eXBlLCAmZXJyb3JfdmFsdWUsICZlcnJvcl90cmFjZWJhY2spOworCiAgICAgLyogSWYgYGNsb3NlZGAgZG9lc24ndCBleGlzdCBvciBjYW4ndCBiZSBldmFsdWF0ZWQgYXMgYm9vbCwgdGhlbiB0aGUKICAgICAgICBvYmplY3QgaXMgcHJvYmFibHkgaW4gYW4gdW51c2FibGUgc3RhdGUsIHNvIGlnbm9yZS4gKi8KICAgICByZXMgPSBQeU9iamVjdF9HZXRBdHRyKHNlbGYsIF9QeUlPX3N0cl9jbG9zZWQpOwotICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICBpZiAocmVzID09IE5VTEwpIHsKICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgY2xvc2VkID0gLTE7CisgICAgfQogICAgIGVsc2UgewogICAgICAgICBjbG9zZWQgPSBQeU9iamVjdF9Jc1RydWUocmVzKTsKICAgICAgICAgUHlfREVDUkVGKHJlcyk7CkBAIC0yMjMsNiArMjI5LDEwIEBACiAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwogICAgIH0KICAgICBpZiAoY2xvc2VkID09IDApIHsKKyAgICAgICAgLyogU2lnbmFsIGNsb3NlKCkgdGhhdCBpdCB3YXMgY2FsbGVkIGFzIHBhcnQgb2YgdGhlIG9iamVjdAorICAgICAgICAgICBmaW5hbGl6YXRpb24gcHJvY2Vzcy4gKi8KKyAgICAgICAgaWYgKF9QeU9iamVjdF9TZXRBdHRySWQoc2VsZiwgJlB5SWRfX2ZpbmFsaXppbmcsIFB5X1RydWUpKQorICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKICAgICAgICAgcmVzID0gUHlPYmplY3RfQ2FsbE1ldGhvZE9iakFyZ3MoKFB5T2JqZWN0ICopIHNlbGYsIF9QeUlPX3N0cl9jbG9zZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwogICAgICAgICAvKiBTaWxlbmNpbmcgSS9PIGVycm9ycyBpcyBiYWQsIGJ1dCBwcmludGluZyBzcHVyaW91cyB0cmFjZWJhY2tzIGlzCkBAIC0yMzMsMzEgKzI0MywyNSBAQAogICAgICAgICBlbHNlCiAgICAgICAgICAgICBQeV9ERUNSRUYocmVzKTsKICAgICB9Ci0gICAgUHlFcnJfUmVzdG9yZSh0cCwgdiwgdGIpOwotICAgIGlmIChpc196b21iaWUpIHsKLSAgICAgICAgaWYgKC0tUHlfUkVGQ05UKHNlbGYpICE9IDApIHsKLSAgICAgICAgICAgIC8qIFRoZSBvYmplY3QgbGl2ZXMgYWdhaW4uIFRoZSBmb2xsb3dpbmcgY29kZSBpcyB0YWtlbiBmcm9tCi0gICAgICAgICAgICAgICBzbG90X3RwX2RlbCBpbiB0eXBlb2JqZWN0LmMuICovCi0gICAgICAgICAgICBQeV9zc2l6ZV90IHJlZmNudCA9IFB5X1JFRkNOVChzZWxmKTsKLSAgICAgICAgICAgIF9QeV9OZXdSZWZlcmVuY2Uoc2VsZik7Ci0gICAgICAgICAgICBQeV9SRUZDTlQoc2VsZikgPSByZWZjbnQ7Ci0gICAgICAgICAgICAvKiBJZiBQeV9SRUZfREVCVUcsIF9QeV9OZXdSZWZlcmVuY2UgYnVtcGVkIF9QeV9SZWZUb3RhbCwgc28KLSAgICAgICAgICAgICAqIHdlIG5lZWQgdG8gdW5kbyB0aGF0LiAqLwotICAgICAgICAgICAgX1B5X0RFQ19SRUZUT1RBTDsKLSAgICAgICAgICAgIC8qIElmIFB5X1RSQUNFX1JFRlMsIF9QeV9OZXdSZWZlcmVuY2UgcmUtYWRkZWQgc2VsZiB0byB0aGUgb2JqZWN0Ci0gICAgICAgICAgICAgKiBjaGFpbiwgc28gbm8gbW9yZSB0byBkbyB0aGVyZS4KLSAgICAgICAgICAgICAqIElmIENPVU5UX0FMTE9DUywgdGhlIG9yaWdpbmFsIGRlY3JlZiBidW1wZWQgdHBfZnJlZXMsIGFuZAotICAgICAgICAgICAgICogX1B5X05ld1JlZmVyZW5jZSBidW1wZWQgdHBfYWxsb2NzOiAgYm90aCBvZiB0aG9zZSBuZWVkIHRvIGJlCi0gICAgICAgICAgICAgKiB1bmRvbmUuCi0gICAgICAgICAgICAgKi8KLSNpZmRlZiBDT1VOVF9BTExPQ1MKLSAgICAgICAgICAgIC0tUHlfVFlQRShzZWxmKS0+dHBfZnJlZXM7Ci0gICAgICAgICAgICAtLVB5X1RZUEUoc2VsZiktPnRwX2FsbG9jczsKLSNlbmRpZgotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9CisKKyAgICAvKiBSZXN0b3JlIHRoZSBzYXZlZCBleGNlcHRpb24uICovCisgICAgUHlFcnJfUmVzdG9yZShlcnJvcl90eXBlLCBlcnJvcl92YWx1ZSwgZXJyb3JfdHJhY2ViYWNrKTsKK30KKworaW50CitfUHlJT0Jhc2VfZmluYWxpemUoUHlPYmplY3QgKnNlbGYpCit7CisgICAgaW50IGlzX3pvbWJpZTsKKworICAgIC8qIElmIF9QeUlPQmFzZV9maW5hbGl6ZSgpIGlzIGNhbGxlZCBmcm9tIGEgZGVzdHJ1Y3Rvciwgd2UgbmVlZCB0bworICAgICAgIHJlc3VycmVjdCB0aGUgb2JqZWN0IGFzIGNhbGxpbmcgY2xvc2UoKSBjYW4gaW52b2tlIGFyYml0cmFyeSBjb2RlLiAqLworICAgIGlzX3pvbWJpZSA9IChQeV9SRUZDTlQoc2VsZikgPT0gMCk7CisgICAgaWYgKGlzX3pvbWJpZSkKKyAgICAgICAgcmV0dXJuIFB5T2JqZWN0X0NhbGxGaW5hbGl6ZXJGcm9tRGVhbGxvYyhzZWxmKTsKKyAgICBlbHNlIHsKKyAgICAgICAgUHlPYmplY3RfQ2FsbEZpbmFsaXplcihzZWxmKTsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgIHJldHVybiAwOwogfQogCiBzdGF0aWMgaW50CkBAIC0yNzAsOCArMjc0LDYgQEAKIHN0YXRpYyBpbnQKIGlvYmFzZV9jbGVhcihpb2Jhc2UgKnNlbGYpCiB7Ci0gICAgaWYgKF9QeUlPQmFzZV9maW5hbGl6ZSgoUHlPYmplY3QgKikgc2VsZikgPCAwKQotICAgICAgICByZXR1cm4gLTE7CiAgICAgUHlfQ0xFQVIoc2VsZi0+ZGljdCk7CiAgICAgcmV0dXJuIDA7CiB9CkBAIC00NTUsNyArNDU3LDYgQEAKICAgICBpbnQgaGFzX3BlZWsgPSAwOwogICAgIFB5T2JqZWN0ICpidWZmZXIsICpyZXN1bHQ7CiAgICAgUHlfc3NpemVfdCBvbGRfc2l6ZSA9IC0xOwotICAgIF9QeV9JREVOVElGSUVSKHJlYWQpOwogICAgIF9QeV9JREVOVElGSUVSKHBlZWspOwogCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8TyY6cmVhZGxpbmUiLCAmX1B5SU9fQ29udmVydFNzaXplX3QsICZsaW1pdCkpIHsKQEAgLTUzNiw3ICs1MzcsMTAgQEAKICAgICAgICAgfQogCiAgICAgICAgIG9sZF9zaXplID0gUHlCeXRlQXJyYXlfR0VUX1NJWkUoYnVmZmVyKTsKLSAgICAgICAgUHlCeXRlQXJyYXlfUmVzaXplKGJ1ZmZlciwgb2xkX3NpemUgKyBQeUJ5dGVzX0dFVF9TSVpFKGIpKTsKKyAgICAgICAgaWYgKFB5Qnl0ZUFycmF5X1Jlc2l6ZShidWZmZXIsIG9sZF9zaXplICsgUHlCeXRlc19HRVRfU0laRShiKSkgPCAwKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoYik7CisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIH0KICAgICAgICAgbWVtY3B5KFB5Qnl0ZUFycmF5X0FTX1NUUklORyhidWZmZXIpICsgb2xkX3NpemUsCiAgICAgICAgICAgICAgICBQeUJ5dGVzX0FTX1NUUklORyhiKSwgUHlCeXRlc19HRVRfU0laRShiKSk7CiAKQEAgLTc0MSw3ICs3NDUsNyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHJvKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19idWZmZXIqLwogICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfQkFTRVRZUEUKLSAgICAgICAgfCBQeV9UUEZMQUdTX0hBVkVfR0MsICAgLyp0cF9mbGFncyovCisgICAgICAgIHwgUHlfVFBGTEFHU19IQVZFX0dDIHwgUHlfVFBGTEFHU19IQVZFX0ZJTkFMSVpFLCAgIC8qdHBfZmxhZ3MqLwogICAgIGlvYmFzZV9kb2MsICAgICAgICAgICAgICAgICAvKiB0cF9kb2MgKi8KICAgICAodHJhdmVyc2Vwcm9jKWlvYmFzZV90cmF2ZXJzZSwgLyogdHBfdHJhdmVyc2UgKi8KICAgICAoaW5xdWlyeSlpb2Jhc2VfY2xlYXIsICAgICAgLyogdHBfY2xlYXIgKi8KQEAgLTc2MCw2ICs3NjQsMTYgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaW5pdCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hbGxvYyAqLwogICAgIFB5VHlwZV9HZW5lcmljTmV3LCAgICAgICAgICAvKiB0cF9uZXcgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZnJlZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pc19nYyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNlcyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tcm8gKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2FjaGUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc3ViY2xhc3NlcyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZWwgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfdmVyc2lvbl90YWcgKi8KKyAgICAoZGVzdHJ1Y3Rvcilpb2Jhc2VfZmluYWxpemUsIC8qIHRwX2ZpbmFsaXplICovCiB9OwogCiAKQEAgLTgzMSwxMiArODQ1LDExIEBACiAgICAgaW50IHI7CiAgICAgUHlPYmplY3QgKmNodW5rcyA9IFB5TGlzdF9OZXcoMCk7CiAgICAgUHlPYmplY3QgKnJlc3VsdDsKLSAgICAKKwogICAgIGlmIChjaHVua3MgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICB3aGlsZSAoMSkgewotICAgICAgICBfUHlfSURFTlRJRklFUihyZWFkKTsKICAgICAgICAgUHlPYmplY3QgKmRhdGEgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKHNlbGYsICZQeUlkX3JlYWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaSIsIERFRkFVTFRfQlVGRkVSX1NJWkUpOwogICAgICAgICBpZiAoIWRhdGEpIHsKQEAgLTkwNSw3ICs5MTgsNyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2dldGF0dHJvKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zZXRhdHRybyovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfYnVmZmVyKi8KLSAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0JBU0VUWVBFLCAgLyp0cF9mbGFncyovCisgICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19CQVNFVFlQRSB8IFB5X1RQRkxBR1NfSEFWRV9GSU5BTElaRSwgIC8qdHBfZmxhZ3MqLwogICAgIHJhd2lvYmFzZV9kb2MsICAgICAgICAgICAgICAvKiB0cF9kb2MgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfdHJhdmVyc2UgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2xlYXIgKi8KQEAgLTkyNCw0ICs5MzcsMTQgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaW5pdCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hbGxvYyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9uZXcgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZnJlZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pc19nYyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNlcyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tcm8gKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2FjaGUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc3ViY2xhc3NlcyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZWwgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfdmVyc2lvbl90YWcgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZmluYWxpemUgKi8KIH07CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19pby9zdHJpbmdpby5jIGIvTW9kdWxlcy9faW8vc3RyaW5naW8uYwppbmRleCA5ZDczODg0Li45NWZiNzAzIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19pby9zdHJpbmdpby5jCisrKyBiL01vZHVsZXMvX2lvL3N0cmluZ2lvLmMKQEAgLTcxMSw3ICs3MTEsNyBAQAogICAgIC8qIElmIG5ld2xpbmUgPT0gIiIsIHdlIGRvbid0IHRyYW5zbGF0ZSBhbnl0aGluZy4KICAgICAgICBJZiBuZXdsaW5lID09ICJcbiIgb3IgbmV3bGluZSA9PSBOb25lLCB3ZSB0cmFuc2xhdGUgdG8gIlxuIiwgd2hpY2ggaXMKICAgICAgICBhIG5vLW9wLgotICAgICAgIChmb3IgbmV3bGluZSA9PSBOb25lLCBUZXh0SU9XcmFwcGVyIHRyYW5zbGF0ZXMgdG8gb3Muc2VwbGluZSwgYnV0IGl0CisgICAgICAgKGZvciBuZXdsaW5lID09IE5vbmUsIFRleHRJT1dyYXBwZXIgdHJhbnNsYXRlcyB0byBvcy5saW5lc2VwLCBidXQgaXQKICAgICAgICBpcyBwb2ludGxlc3MgZm9yIFN0cmluZ0lPKQogICAgICovCiAgICAgaWYgKG5ld2xpbmUgIT0gTlVMTCAmJiBuZXdsaW5lWzBdID09ICdccicpIHsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2lvL3RleHRpby5jIGIvTW9kdWxlcy9faW8vdGV4dGlvLmMKaW5kZXggZThmOTk4NC4uMGMxYjEzZSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9faW8vdGV4dGlvLmMKKysrIGIvTW9kdWxlcy9faW8vdGV4dGlvLmMKQEAgLTQ1LDcgKzQ1LDkgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBfdW5zdXBwb3J0ZWQoY29uc3QgY2hhciAqbWVzc2FnZSkKIHsKLSAgICBQeUVycl9TZXRTdHJpbmcoSU9fU1RBVEUtPnVuc3VwcG9ydGVkX29wZXJhdGlvbiwgbWVzc2FnZSk7CisgICAgX1B5SU9fU3RhdGUgKnN0YXRlID0gSU9fU1RBVEUoKTsKKyAgICBpZiAoc3RhdGUgIT0gTlVMTCkKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKHN0YXRlLT51bnN1cHBvcnRlZF9vcGVyYXRpb24sIG1lc3NhZ2UpOwogICAgIHJldHVybiBOVUxMOwogfQogCkBAIC0xNzMsNyArMTc1LDggQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9nZXRhdHRybyovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc2V0YXR0cm8qLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX2J1ZmZlciovCi0gICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19CQVNFVFlQRSwgIC8qdHBfZmxhZ3MqLworICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfQkFTRVRZUEUKKyAgICAgICAgfCBQeV9UUEZMQUdTX0hBVkVfRklOQUxJWkUsICAvKnRwX2ZsYWdzKi8KICAgICB0ZXh0aW9iYXNlX2RvYywgICAgICAgICAgICAgLyogdHBfZG9jICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3RyYXZlcnNlICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NsZWFyICovCkBAIC0xOTIsNiArMTk1LDE2IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2luaXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYWxsb2MgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbmV3ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZyZWUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXNfZ2MgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzZXMgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbXJvICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NhY2hlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3N1YmNsYXNzZXMgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3QgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVsICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3ZlcnNpb25fdGFnICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZpbmFsaXplICovCiB9OwogCiAKQEAgLTY5MSw3ICs3MDQsNyBAQAogICAgIGNoYXIgc2Vla2FibGU7CiAgICAgY2hhciBoYXNfcmVhZDE7CiAgICAgY2hhciB0ZWxsaW5nOwotICAgIGNoYXIgZGVhbGxvY2F0aW5nOworICAgIGNoYXIgZmluYWxpemluZzsKICAgICAvKiBTcGVjaWFsaXplZCBlbmNvZGluZyBmdW5jIChzZWUgYmVsb3cpICovCiAgICAgZW5jb2RlZnVuY190IGVuY29kZWZ1bmM7CiAgICAgLyogV2hldGhlciBvciBub3QgaXQncyB0aGUgc3RhcnQgb2YgdGhlIHN0cmVhbSAqLwpAQCAtNzU4LDcgKzc3MSw3IEBACiB7CiAgICAgaWYgKCFzZWxmLT5lbmNvZGluZ19zdGFydF9vZl9zdHJlYW0pIHsKICAgICAgICAgLyogU2tpcCB0aGUgQk9NIGFuZCB1c2UgbmF0aXZlIGJ5dGUgb3JkZXJpbmcgKi8KLSNpZiBkZWZpbmVkKFdPUkRTX0JJR0VORElBTikKKyNpZiBQWV9CSUdfRU5ESUFOCiAgICAgICAgIHJldHVybiB1dGYxNmJlX2VuY29kZShzZWxmLCB0ZXh0KTsKICNlbHNlCiAgICAgICAgIHJldHVybiB1dGYxNmxlX2VuY29kZShzZWxmLCB0ZXh0KTsKQEAgLTc4Nyw3ICs4MDAsNyBAQAogewogICAgIGlmICghc2VsZi0+ZW5jb2Rpbmdfc3RhcnRfb2Zfc3RyZWFtKSB7CiAgICAgICAgIC8qIFNraXAgdGhlIEJPTSBhbmQgdXNlIG5hdGl2ZSBieXRlIG9yZGVyaW5nICovCi0jaWYgZGVmaW5lZChXT1JEU19CSUdFTkRJQU4pCisjaWYgUFlfQklHX0VORElBTgogICAgICAgICByZXR1cm4gdXRmMzJiZV9lbmNvZGUoc2VsZiwgdGV4dCk7CiAjZWxzZQogICAgICAgICByZXR1cm4gdXRmMzJsZV9lbmNvZGUoc2VsZiwgdGV4dCk7CkBAIC04NDEsNyArODU0LDcgQEAKICAgICBjaGFyICplcnJvcnMgPSBOVUxMOwogICAgIGNoYXIgKm5ld2xpbmUgPSBOVUxMOwogICAgIGludCBsaW5lX2J1ZmZlcmluZyA9IDAsIHdyaXRlX3Rocm91Z2ggPSAwOwotICAgIF9QeUlPX1N0YXRlICpzdGF0ZSA9IElPX1NUQVRFOworICAgIF9QeUlPX1N0YXRlICpzdGF0ZSA9IE5VTEw7CiAKICAgICBQeU9iamVjdCAqcmVzOwogICAgIGludCByOwpAQCAtODgwLDYgKzg5Myw5IEBACiAgICAgaWYgKGVuY29kaW5nID09IE5VTEwpIHsKICAgICAgICAgLyogVHJ5IG9zLmRldmljZV9lbmNvZGluZyhmaWxlbm8pICovCiAgICAgICAgIFB5T2JqZWN0ICpmaWxlbm87CisgICAgICAgIHN0YXRlID0gSU9fU1RBVEUoKTsKKyAgICAgICAgaWYgKHN0YXRlID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICBmaWxlbm8gPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKGJ1ZmZlciwgJlB5SWRfZmlsZW5vLCBOVUxMKTsKICAgICAgICAgLyogSWdub3JlIG9ubHkgQXR0cmlidXRlRXJyb3IgYW5kIFVuc3VwcG9ydGVkT3BlcmF0aW9uICovCiAgICAgICAgIGlmIChmaWxlbm8gPT0gTlVMTCkgewpAQCAtOTA2LDM1ICs5MjIsMjkgQEAKICAgICAgICAgfQogICAgIH0KICAgICBpZiAoZW5jb2RpbmcgPT0gTlVMTCAmJiBzZWxmLT5lbmNvZGluZyA9PSBOVUxMKSB7Ci0gICAgICAgIGlmIChzdGF0ZS0+bG9jYWxlX21vZHVsZSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBzdGF0ZS0+bG9jYWxlX21vZHVsZSA9IFB5SW1wb3J0X0ltcG9ydE1vZHVsZSgibG9jYWxlIik7Ci0gICAgICAgICAgICBpZiAoc3RhdGUtPmxvY2FsZV9tb2R1bGUgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICBnb3RvIGNhdGNoX0ltcG9ydEVycm9yOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGdvdG8gdXNlX2xvY2FsZTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICB1c2VfbG9jYWxlOgotICAgICAgICAgICAgc2VsZi0+ZW5jb2RpbmcgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKAotICAgICAgICAgICAgICAgIHN0YXRlLT5sb2NhbGVfbW9kdWxlLCAmUHlJZF9nZXRwcmVmZXJyZWRlbmNvZGluZywgIk8iLCBQeV9GYWxzZSk7Ci0gICAgICAgICAgICBpZiAoc2VsZi0+ZW5jb2RpbmcgPT0gTlVMTCkgewotICAgICAgICAgICAgICBjYXRjaF9JbXBvcnRFcnJvcjoKLSAgICAgICAgICAgICAgICAvKgotICAgICAgICAgICAgICAgICBJbXBvcnRpbmcgbG9jYWxlIGNhbiByYWlzZSBhIEltcG9ydEVycm9yIGJlY2F1c2Ugb2YKLSAgICAgICAgICAgICAgICAgX2Z1bmN0b29scywgYW5kIGxvY2FsZS5nZXRwcmVmZXJyZWRlbmNvZGluZyBjYW4gcmFpc2UgYQotICAgICAgICAgICAgICAgICBJbXBvcnRFcnJvciBpZiBfbG9jYWxlIGlzIG5vdCBhdmFpbGFibGUuICBUaGVzZSB3aWxsIGhhcHBlbgotICAgICAgICAgICAgICAgICBkdXJpbmcgbW9kdWxlIGJ1aWxkaW5nLgotICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfSW1wb3J0RXJyb3IpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYtPmVuY29kaW5nID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoImFzY2lpIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgUHlPYmplY3QgKmxvY2FsZV9tb2R1bGUgPSBfUHlJT19nZXRfbG9jYWxlX21vZHVsZShzdGF0ZSk7CisgICAgICAgIGlmIChsb2NhbGVfbW9kdWxlID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGNhdGNoX0ltcG9ydEVycm9yOworICAgICAgICBzZWxmLT5lbmNvZGluZyA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoCisgICAgICAgICAgICBsb2NhbGVfbW9kdWxlLCAmUHlJZF9nZXRwcmVmZXJyZWRlbmNvZGluZywgIk8iLCBQeV9GYWxzZSk7CisgICAgICAgIFB5X0RFQ1JFRihsb2NhbGVfbW9kdWxlKTsKKyAgICAgICAgaWYgKHNlbGYtPmVuY29kaW5nID09IE5VTEwpIHsKKyAgICAgICAgICBjYXRjaF9JbXBvcnRFcnJvcjoKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgSW1wb3J0aW5nIGxvY2FsZSBjYW4gcmFpc2UgYW4gSW1wb3J0RXJyb3IgYmVjYXVzZSBvZgorICAgICAgICAgICAgIF9mdW5jdG9vbHMsIGFuZCBsb2NhbGUuZ2V0cHJlZmVycmVkZW5jb2RpbmcgY2FuIHJhaXNlIGFuCisgICAgICAgICAgICAgSW1wb3J0RXJyb3IgaWYgX2xvY2FsZSBpcyBub3QgYXZhaWxhYmxlLiAgVGhlc2Ugd2lsbCBoYXBwZW4KKyAgICAgICAgICAgICBkdXJpbmcgbW9kdWxlIGJ1aWxkaW5nLgorICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0ltcG9ydEVycm9yKSkgeworICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgICAgICAgICAgICAgc2VsZi0+ZW5jb2RpbmcgPSBQeVVuaWNvZGVfRnJvbVN0cmluZygiYXNjaWkiKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKCFQeVVuaWNvZGVfQ2hlY2soc2VsZi0+ZW5jb2RpbmcpKQotICAgICAgICAgICAgICAgIFB5X0NMRUFSKHNlbGYtPmVuY29kaW5nKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKCFQeVVuaWNvZGVfQ2hlY2soc2VsZi0+ZW5jb2RpbmcpKQorICAgICAgICAgICAgUHlfQ0xFQVIoc2VsZi0+ZW5jb2RpbmcpOwogICAgIH0KICAgICBpZiAoc2VsZi0+ZW5jb2RpbmcgIT0gTlVMTCkgewogICAgICAgICBlbmNvZGluZyA9IF9QeVVuaWNvZGVfQXNTdHJpbmcoc2VsZi0+ZW5jb2RpbmcpOwpAQCAtMTA1MSw3ICsxMDYxLDcgQEAKICAgICB9CiAKICAgICAvKiBGaW5pc2hlZCBzb3J0aW5nIG91dCB0aGUgY29kZWMgZGV0YWlscyAqLwotICAgIFB5X0RFQ1JFRihjb2RlY19pbmZvKTsKKyAgICBQeV9DTEVBUihjb2RlY19pbmZvKTsKIAogICAgIHNlbGYtPmJ1ZmZlciA9IGJ1ZmZlcjsKICAgICBQeV9JTkNSRUYoYnVmZmVyKTsKQEAgLTExMjIsOCArMTEzMiw2IEBACiBzdGF0aWMgaW50CiBfdGV4dGlvd3JhcHBlcl9jbGVhcih0ZXh0aW8gKnNlbGYpCiB7Ci0gICAgaWYgKHNlbGYtPm9rICYmIF9QeUlPQmFzZV9maW5hbGl6ZSgoUHlPYmplY3QgKikgc2VsZikgPCAwKQotICAgICAgICByZXR1cm4gLTE7CiAgICAgc2VsZi0+b2sgPSAwOwogICAgIFB5X0NMRUFSKHNlbGYtPmJ1ZmZlcik7CiAgICAgUHlfQ0xFQVIoc2VsZi0+ZW5jb2RpbmcpOwpAQCAtMTE0MSw5ICsxMTQ5LDEwIEBACiBzdGF0aWMgdm9pZAogdGV4dGlvd3JhcHBlcl9kZWFsbG9jKHRleHRpbyAqc2VsZikKIHsKLSAgICBzZWxmLT5kZWFsbG9jYXRpbmcgPSAxOwotICAgIGlmIChfdGV4dGlvd3JhcHBlcl9jbGVhcihzZWxmKSA8IDApCisgICAgc2VsZi0+ZmluYWxpemluZyA9IDE7CisgICAgaWYgKF9QeUlPQmFzZV9maW5hbGl6ZSgoUHlPYmplY3QgKikgc2VsZikgPCAwKQogICAgICAgICByZXR1cm47CisgICAgX3RleHRpb3dyYXBwZXJfY2xlYXIoc2VsZik7CiAgICAgX1B5T2JqZWN0X0dDX1VOVFJBQ0soc2VsZik7CiAgICAgaWYgKHNlbGYtPndlYWtyZWZsaXN0ICE9IE5VTEwpCiAgICAgICAgIFB5T2JqZWN0X0NsZWFyV2Vha1JlZnMoKFB5T2JqZWN0ICopc2VsZik7CkBAIC0xMjEwLDI1ICsxMjE5LDI3IEBACiAKICNkZWZpbmUgQ0hFQ0tfSU5JVElBTElaRUQoc2VsZikgXAogICAgIGlmIChzZWxmLT5vayA8PSAwKSB7IFwKLSAgICAgICAgaWYgKHNlbGYtPmRldGFjaGVkKSB7IFwKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCBcCi0gICAgICAgICAgICAgICAgICJ1bmRlcmx5aW5nIGJ1ZmZlciBoYXMgYmVlbiBkZXRhY2hlZCIpOyBcCi0gICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgXAotICAgICAgICAgICAgICAgICJJL08gb3BlcmF0aW9uIG9uIHVuaW5pdGlhbGl6ZWQgb2JqZWN0Iik7IFwKLSAgICAgICAgfSBcCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCBcCisgICAgICAgICAgICAiSS9PIG9wZXJhdGlvbiBvbiB1bmluaXRpYWxpemVkIG9iamVjdCIpOyBcCiAgICAgICAgIHJldHVybiBOVUxMOyBcCiAgICAgfQogCi0jZGVmaW5lIENIRUNLX0lOSVRJQUxJWkVEX0lOVChzZWxmKSBcCisjZGVmaW5lIENIRUNLX0FUVEFDSEVEKHNlbGYpIFwKKyAgICBDSEVDS19JTklUSUFMSVpFRChzZWxmKTsgXAorICAgIGlmIChzZWxmLT5kZXRhY2hlZCkgeyBcCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCBcCisgICAgICAgICAgICAgInVuZGVybHlpbmcgYnVmZmVyIGhhcyBiZWVuIGRldGFjaGVkIik7IFwKKyAgICAgICAgcmV0dXJuIE5VTEw7IFwKKyAgICB9CisKKyNkZWZpbmUgQ0hFQ0tfQVRUQUNIRURfSU5UKHNlbGYpIFwKICAgICBpZiAoc2VsZi0+b2sgPD0gMCkgeyBcCi0gICAgICAgIGlmIChzZWxmLT5kZXRhY2hlZCkgeyBcCi0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgXAotICAgICAgICAgICAgICAgICAidW5kZXJseWluZyBidWZmZXIgaGFzIGJlZW4gZGV0YWNoZWQiKTsgXAotICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsIFwKLSAgICAgICAgICAgICAgICAiSS9PIG9wZXJhdGlvbiBvbiB1bmluaXRpYWxpemVkIG9iamVjdCIpOyBcCi0gICAgICAgIH0gXAorICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgXAorICAgICAgICAgICAgIkkvTyBvcGVyYXRpb24gb24gdW5pbml0aWFsaXplZCBvYmplY3QiKTsgXAorICAgICAgICByZXR1cm4gLTE7IFwKKyAgICB9IGVsc2UgaWYgKHNlbGYtPmRldGFjaGVkKSB7IFwKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsIFwKKyAgICAgICAgICAgICAidW5kZXJseWluZyBidWZmZXIgaGFzIGJlZW4gZGV0YWNoZWQiKTsgXAogICAgICAgICByZXR1cm4gLTE7IFwKICAgICB9CiAKQEAgLTEyMzcsNyArMTI0OCw3IEBACiB0ZXh0aW93cmFwcGVyX2RldGFjaCh0ZXh0aW8gKnNlbGYpCiB7CiAgICAgUHlPYmplY3QgKmJ1ZmZlciwgKnJlczsKLSAgICBDSEVDS19JTklUSUFMSVpFRChzZWxmKTsKKyAgICBDSEVDS19BVFRBQ0hFRChzZWxmKTsKICAgICByZXMgPSBQeU9iamVjdF9DYWxsTWV0aG9kT2JqQXJncygoUHlPYmplY3QgKilzZWxmLCBfUHlJT19zdHJfZmx1c2gsIE5VTEwpOwogICAgIGlmIChyZXMgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0xMjQ1LDcgKzEyNTYsNiBAQAogICAgIGJ1ZmZlciA9IHNlbGYtPmJ1ZmZlcjsKICAgICBzZWxmLT5idWZmZXIgPSBOVUxMOwogICAgIHNlbGYtPmRldGFjaGVkID0gMTsKLSAgICBzZWxmLT5vayA9IDA7CiAgICAgcmV0dXJuIGJ1ZmZlcjsKIH0KIApAQCAtMTI4OCw5ICsxMjk4LDkgQEAKICAgICBQeU9iamVjdCAqYjsKICAgICBQeV9zc2l6ZV90IHRleHRsZW47CiAgICAgaW50IGhhc2xmID0gMDsKLSAgICBpbnQgbmVlZGZsdXNoID0gMDsKKyAgICBpbnQgbmVlZGZsdXNoID0gMCwgdGV4dF9uZWVkZmx1c2ggPSAwOwogCi0gICAgQ0hFQ0tfSU5JVElBTElaRUQoc2VsZik7CisgICAgQ0hFQ0tfQVRUQUNIRUQoc2VsZik7CiAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIlU6d3JpdGUiLCAmdGV4dCkpIHsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0xMzIyLDggKzEzMzIsOCBAQAogICAgIH0KIAogICAgIGlmIChzZWxmLT53cml0ZV90aHJvdWdoKQotICAgICAgICBuZWVkZmx1c2ggPSAxOwotICAgIGVsc2UgaWYgKHNlbGYtPmxpbmVfYnVmZmVyaW5nICYmCisgICAgICAgIHRleHRfbmVlZGZsdXNoID0gMTsKKyAgICBpZiAoc2VsZi0+bGluZV9idWZmZXJpbmcgJiYKICAgICAgICAgKGhhc2xmIHx8CiAgICAgICAgICBQeVVuaWNvZGVfRmluZENoYXIodGV4dCwgJ1xyJywgMCwgUHlVbmljb2RlX0dFVF9MRU5HVEgodGV4dCksIDEpICE9IC0xKSkKICAgICAgICAgbmVlZGZsdXNoID0gMTsKQEAgLTEzNTQsNyArMTM2NCw4IEBACiAgICAgfQogICAgIHNlbGYtPnBlbmRpbmdfYnl0ZXNfY291bnQgKz0gUHlCeXRlc19HRVRfU0laRShiKTsKICAgICBQeV9ERUNSRUYoYik7Ci0gICAgaWYgKHNlbGYtPnBlbmRpbmdfYnl0ZXNfY291bnQgPiBzZWxmLT5jaHVua19zaXplIHx8IG5lZWRmbHVzaCkgeworICAgIGlmIChzZWxmLT5wZW5kaW5nX2J5dGVzX2NvdW50ID4gc2VsZi0+Y2h1bmtfc2l6ZSB8fCBuZWVkZmx1c2ggfHwKKyAgICAgICAgdGV4dF9uZWVkZmx1c2gpIHsKICAgICAgICAgaWYgKF90ZXh0aW93cmFwcGVyX3dyaXRlZmx1c2goc2VsZikgPCAwKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQpAQCAtMTU0Niw3ICsxNTU3LDcgQEAKICAgICBQeV9zc2l6ZV90IG4gPSAtMTsKICAgICBQeU9iamVjdCAqcmVzdWx0ID0gTlVMTCwgKmNodW5rcyA9IE5VTEw7CiAKLSAgICBDSEVDS19JTklUSUFMSVpFRChzZWxmKTsKKyAgICBDSEVDS19BVFRBQ0hFRChzZWxmKTsKIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifE8mOnJlYWQiLCAmX1B5SU9fQ29udmVydFNzaXplX3QsICZuKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0xOTIxLDcgKzE5MzIsNyBAQAogewogICAgIFB5X3NzaXplX3QgbGltaXQgPSAtMTsKIAotICAgIENIRUNLX0lOSVRJQUxJWkVEKHNlbGYpOworICAgIENIRUNLX0FUVEFDSEVEKHNlbGYpOwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifG46cmVhZGxpbmUiLCAmbGltaXQpKSB7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KQEAgLTE5NDcsMTAgKzE5NTgsNyBAQAogCiAjZGVmaW5lIENPT0tJRV9CVUZfTEVOICAgICAgKHNpemVvZihQeV9vZmZfdCkgKyAzICogc2l6ZW9mKGludCkgKyBzaXplb2YoY2hhcikpCiAKLSNpZiBkZWZpbmVkKFdPUkRTX0JJR0VORElBTikKLQotIyBkZWZpbmUgSVNfTElUVExFX0VORElBTiAgIDAKLQorI2lmIFBZX0JJR19FTkRJQU4KIC8qIFdlIHdhbnQgdGhlIGxlYXN0IHNpZ25pZmljYW50IGJ5dGUgb2Ygc3RhcnRfcG9zIHRvIGFsc28gYmUgdGhlIGxlYXN0CiAgICBzaWduaWZpY2FudCBieXRlIG9mIHRoZSBjb29raWUsIHdoaWNoIG1lYW5zIHRoYXQgaW4gYmlnLWVuZGlhbiBtb2RlIHdlCiAgICBtdXN0IGNvcHkgdGhlIGZpZWxkcyBpbiByZXZlcnNlIG9yZGVyLiAqLwpAQCAtMTk2Miw5ICsxOTcwLDYgQEAKICMgZGVmaW5lIE9GRl9ORUVEX0VPRiAgICAgICAwCiAKICNlbHNlCi0KLSMgZGVmaW5lIElTX0xJVFRMRV9FTkRJQU4gICAxCi0KIC8qIExpdHRsZS1lbmRpYW4gbW9kZTogdGhlIGxlYXN0IHNpZ25pZmljYW50IGJ5dGUgb2Ygc3RhcnRfcG9zIHdpbGwKICAgIG5hdHVyYWxseSBlbmQgdXAgdGhlIGxlYXN0IHNpZ25pZmljYW50IGJ5dGUgb2YgdGhlIGNvb2tpZS4gKi8KIApAQCAtMTk4NSw3ICsxOTkwLDcgQEAKICAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgaWYgKF9QeUxvbmdfQXNCeXRlQXJyYXkoY29va2llTG9uZywgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBJU19MSVRUTEVfRU5ESUFOLCAwKSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQWV9MSVRUTEVfRU5ESUFOLCAwKSA8IDApIHsKICAgICAgICAgUHlfREVDUkVGKGNvb2tpZUxvbmcpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQpAQCAtMjAxMSw5ICsyMDE2LDkgQEAKICAgICBtZW1jcHkoYnVmZmVyICsgT0ZGX0NIQVJTX1RPX1NLSVAsICZjb29raWUtPmNoYXJzX3RvX3NraXAsIHNpemVvZihjb29raWUtPmNoYXJzX3RvX3NraXApKTsKICAgICBtZW1jcHkoYnVmZmVyICsgT0ZGX05FRURfRU9GLCAmY29va2llLT5uZWVkX2VvZiwgc2l6ZW9mKGNvb2tpZS0+bmVlZF9lb2YpKTsKIAotICAgIHJldHVybiBfUHlMb25nX0Zyb21CeXRlQXJyYXkoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgSVNfTElUVExFX0VORElBTiwgMCk7CisgICAgcmV0dXJuIF9QeUxvbmdfRnJvbUJ5dGVBcnJheShidWZmZXIsIHNpemVvZihidWZmZXIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFlfTElUVExFX0VORElBTiwgMCk7CiB9Ci0jdW5kZWYgSVNfTElUVExFX0VORElBTgogCiBzdGF0aWMgaW50CiBfdGV4dGlvd3JhcHBlcl9kZWNvZGVyX3NldHN0YXRlKHRleHRpbyAqc2VsZiwgY29va2llX3R5cGUgKmNvb2tpZSkKQEAgLTIwMzcsMTEgKzIwNDIsMTAgQEAKIH0KIAogc3RhdGljIGludAotX3RleHRpb3dyYXBwZXJfZW5jb2Rlcl9zZXRzdGF0ZSh0ZXh0aW8gKnNlbGYsIGNvb2tpZV90eXBlICpjb29raWUpCitfdGV4dGlvd3JhcHBlcl9lbmNvZGVyX3Jlc2V0KHRleHRpbyAqc2VsZiwgaW50IHN0YXJ0X29mX3N0cmVhbSkKIHsKICAgICBQeU9iamVjdCAqcmVzOwotICAgIC8qIFNhbWUgYXMgX3RleHRpb3dyYXBwZXJfZGVjb2Rlcl9zZXRzdGF0ZSgpIGFib3ZlLiAqLwotICAgIGlmIChjb29raWUtPnN0YXJ0X3BvcyA9PSAwICYmIGNvb2tpZS0+ZGVjX2ZsYWdzID09IDApIHsKKyAgICBpZiAoc3RhcnRfb2Zfc3RyZWFtKSB7CiAgICAgICAgIHJlcyA9IFB5T2JqZWN0X0NhbGxNZXRob2RPYmpBcmdzKHNlbGYtPmVuY29kZXIsIF9QeUlPX3N0cl9yZXNldCwgTlVMTCk7CiAgICAgICAgIHNlbGYtPmVuY29kaW5nX3N0YXJ0X29mX3N0cmVhbSA9IDE7CiAgICAgfQpAQCAtMjA1Niw2ICsyMDYwLDE0IEBACiAgICAgcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQKK190ZXh0aW93cmFwcGVyX2VuY29kZXJfc2V0c3RhdGUodGV4dGlvICpzZWxmLCBjb29raWVfdHlwZSAqY29va2llKQoreworICAgIC8qIFNhbWUgYXMgX3RleHRpb3dyYXBwZXJfZGVjb2Rlcl9zZXRzdGF0ZSgpIGFib3ZlLiAqLworICAgIHJldHVybiBfdGV4dGlvd3JhcHBlcl9lbmNvZGVyX3Jlc2V0KAorICAgICAgICBzZWxmLCBjb29raWUtPnN0YXJ0X3BvcyA9PSAwICYmIGNvb2tpZS0+ZGVjX2ZsYWdzID09IDApOworfQorCiBzdGF0aWMgUHlPYmplY3QgKgogdGV4dGlvd3JhcHBlcl9zZWVrKHRleHRpbyAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CkBAIC0yMDY1LDcgKzIwNzcsNyBAQAogICAgIFB5T2JqZWN0ICpyZXM7CiAgICAgaW50IGNtcDsKIAotICAgIENIRUNLX0lOSVRJQUxJWkVEKHNlbGYpOworICAgIENIRUNLX0FUVEFDSEVEKHNlbGYpOwogCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPfGk6c2VlayIsICZjb29raWVPYmosICZ3aGVuY2UpKQogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTIxMjMsNyArMjEzNSwxNyBAQAogICAgICAgICB9CiAKICAgICAgICAgcmVzID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZChzZWxmLT5idWZmZXIsICZQeUlkX3NlZWssICJpaSIsIDAsIDIpOwotICAgICAgICBQeV9YREVDUkVGKGNvb2tpZU9iaik7CisgICAgICAgIFB5X0NMRUFSKGNvb2tpZU9iaik7CisgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgaWYgKHNlbGYtPmVuY29kZXIpIHsKKyAgICAgICAgICAgIC8qIElmIHNlZWsoKSA9PSAwLCB3ZSBhcmUgYXQgdGhlIHN0YXJ0IG9mIHN0cmVhbSwgb3RoZXJ3aXNlIG5vdCAqLworICAgICAgICAgICAgY21wID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKHJlcywgX1B5SU9femVybywgUHlfRVEpOworICAgICAgICAgICAgaWYgKGNtcCA8IDAgfHwgX3RleHRpb3dyYXBwZXJfZW5jb2Rlcl9yZXNldChzZWxmLCBjbXApKSB7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKHJlcyk7CisgICAgICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgICAgIHJldHVybiByZXM7CiAgICAgfQogICAgIGVsc2UgaWYgKHdoZW5jZSAhPSAwKSB7CkBAIC0yMjQ1LDcgKzIyNjcsNyBAQAogICAgIFB5X3NzaXplX3QgZGVjX2J1ZmZlcl9sZW47CiAgICAgaW50IGRlY19mbGFnczsKIAotICAgIENIRUNLX0lOSVRJQUxJWkVEKHNlbGYpOworICAgIENIRUNLX0FUVEFDSEVEKHNlbGYpOwogICAgIENIRUNLX0NMT1NFRChzZWxmKTsKIAogICAgIGlmICghc2VsZi0+c2Vla2FibGUpIHsKQEAgLTIzNjMsNyArMjM4NSw3IEBACiAKICAgICAvKiBOb3RlIG91ciBpbml0aWFsIHN0YXJ0IHBvaW50LiAqLwogICAgIGNvb2tpZS5zdGFydF9wb3MgKz0gc2tpcF9ieXRlczsKLSAgICBjb29raWUuY2hhcnNfdG9fc2tpcCA9IGNoYXJzX3RvX3NraXA7CisgICAgY29va2llLmNoYXJzX3RvX3NraXAgPSBQeV9TQUZFX0RPV05DQVNUKGNoYXJzX3RvX3NraXAsIFB5X3NzaXplX3QsIGludCk7CiAgICAgaWYgKGNoYXJzX3RvX3NraXAgPT0gMCkKICAgICAgICAgZ290byBmaW5hbGx5OwogCkBAIC0yNDMwLDE0ICsyNDUyLDEwIEBACiAgICAgaWYgKHNhdmVkX3N0YXRlKSB7CiAgICAgICAgIFB5T2JqZWN0ICp0eXBlLCAqdmFsdWUsICp0cmFjZWJhY2s7CiAgICAgICAgIFB5RXJyX0ZldGNoKCZ0eXBlLCAmdmFsdWUsICZ0cmFjZWJhY2spOwotCiAgICAgICAgIHJlcyA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoc2VsZi0+ZGVjb2RlciwgJlB5SWRfc2V0c3RhdGUsICIoTykiLCBzYXZlZF9zdGF0ZSk7CisgICAgICAgIF9QeUVycl9DaGFpbkV4Y2VwdGlvbnModHlwZSwgdmFsdWUsIHRyYWNlYmFjayk7CiAgICAgICAgIFB5X0RFQ1JFRihzYXZlZF9zdGF0ZSk7Ci0gICAgICAgIGlmIChyZXMgPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICBQeV9ERUNSRUYocmVzKTsKLQotICAgICAgICBQeUVycl9SZXN0b3JlKHR5cGUsIHZhbHVlLCB0cmFjZWJhY2spOworICAgICAgICBQeV9YREVDUkVGKHJlcyk7CiAgICAgfQogICAgIHJldHVybiBOVUxMOwogfQpAQCAtMjQ0OCw3ICsyNDY2LDcgQEAKICAgICBQeU9iamVjdCAqcG9zID0gUHlfTm9uZTsKICAgICBQeU9iamVjdCAqcmVzOwogCi0gICAgQ0hFQ0tfSU5JVElBTElaRUQoc2VsZikKKyAgICBDSEVDS19BVFRBQ0hFRChzZWxmKQogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifE86dHJ1bmNhdGUiLCAmcG9zKSkgewogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CkBAIC0yNDcxLDkgKzI0ODksMTAgQEAKICAgICByZXMgPSBQeVVuaWNvZGVfRnJvbVN0cmluZygiPF9pby5UZXh0SU9XcmFwcGVyIik7CiAgICAgaWYgKHJlcyA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKKwogICAgIG5hbWVvYmogPSBfUHlPYmplY3RfR2V0QXR0cklkKChQeU9iamVjdCAqKSBzZWxmLCAmUHlJZF9uYW1lKTsKICAgICBpZiAobmFtZW9iaiA9PSBOVUxMKSB7Ci0gICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0F0dHJpYnV0ZUVycm9yKSkKKyAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfRXhjZXB0aW9uKSkKICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CkBAIC0yNDg5LDcgKzI1MDgsNyBAQAogICAgIH0KICAgICBtb2Rlb2JqID0gX1B5T2JqZWN0X0dldEF0dHJJZCgoUHlPYmplY3QgKikgc2VsZiwgJlB5SWRfbW9kZSk7CiAgICAgaWYgKG1vZGVvYmogPT0gTlVMTCkgewotICAgICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19BdHRyaWJ1dGVFcnJvcikpCisgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0V4Y2VwdGlvbikpCiAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBnb3RvIGVycm9yOwpAQCAtMjUxOCwzNSArMjUzNywzNSBAQAogc3RhdGljIFB5T2JqZWN0ICoKIHRleHRpb3dyYXBwZXJfZmlsZW5vKHRleHRpbyAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgQ0hFQ0tfSU5JVElBTElaRUQoc2VsZik7CisgICAgQ0hFQ0tfQVRUQUNIRUQoc2VsZik7CiAgICAgcmV0dXJuIF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoc2VsZi0+YnVmZmVyLCAmUHlJZF9maWxlbm8sIE5VTEwpOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgogdGV4dGlvd3JhcHBlcl9zZWVrYWJsZSh0ZXh0aW8gKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIENIRUNLX0lOSVRJQUxJWkVEKHNlbGYpOworICAgIENIRUNLX0FUVEFDSEVEKHNlbGYpOwogICAgIHJldHVybiBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKHNlbGYtPmJ1ZmZlciwgJlB5SWRfc2Vla2FibGUsIE5VTEwpOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgogdGV4dGlvd3JhcHBlcl9yZWFkYWJsZSh0ZXh0aW8gKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIENIRUNLX0lOSVRJQUxJWkVEKHNlbGYpOworICAgIENIRUNLX0FUVEFDSEVEKHNlbGYpOwogICAgIHJldHVybiBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKHNlbGYtPmJ1ZmZlciwgJlB5SWRfcmVhZGFibGUsIE5VTEwpOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgogdGV4dGlvd3JhcHBlcl93cml0YWJsZSh0ZXh0aW8gKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIENIRUNLX0lOSVRJQUxJWkVEKHNlbGYpOworICAgIENIRUNLX0FUVEFDSEVEKHNlbGYpOwogICAgIHJldHVybiBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKHNlbGYtPmJ1ZmZlciwgJlB5SWRfd3JpdGFibGUsIE5VTEwpOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgogdGV4dGlvd3JhcHBlcl9pc2F0dHkodGV4dGlvICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICBDSEVDS19JTklUSUFMSVpFRChzZWxmKTsKKyAgICBDSEVDS19BVFRBQ0hFRChzZWxmKTsKICAgICByZXR1cm4gX1B5T2JqZWN0X0NhbGxNZXRob2RJZChzZWxmLT5idWZmZXIsICZQeUlkX2lzYXR0eSwgTlVMTCk7CiB9CiAKQEAgLTI1NjEsNyArMjU4MCw3IEBACiBzdGF0aWMgUHlPYmplY3QgKgogdGV4dGlvd3JhcHBlcl9mbHVzaCh0ZXh0aW8gKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIENIRUNLX0lOSVRJQUxJWkVEKHNlbGYpOworICAgIENIRUNLX0FUVEFDSEVEKHNlbGYpOwogICAgIENIRUNLX0NMT1NFRChzZWxmKTsKICAgICBzZWxmLT50ZWxsaW5nID0gc2VsZi0+c2Vla2FibGU7CiAgICAgaWYgKF90ZXh0aW93cmFwcGVyX3dyaXRlZmx1c2goc2VsZikgPCAwKQpAQCAtMjU3NCw3ICsyNTkzLDcgQEAKIHsKICAgICBQeU9iamVjdCAqcmVzOwogICAgIGludCByOwotICAgIENIRUNLX0lOSVRJQUxJWkVEKHNlbGYpOworICAgIENIRUNLX0FUVEFDSEVEKHNlbGYpOwogCiAgICAgcmVzID0gdGV4dGlvd3JhcHBlcl9jbG9zZWRfZ2V0KHNlbGYsIE5VTEwpOwogICAgIGlmIChyZXMgPT0gTlVMTCkKQEAgLTI1ODksNyArMjYwOCw3IEBACiAgICAgfQogICAgIGVsc2UgewogICAgICAgICBQeU9iamVjdCAqZXhjID0gTlVMTCwgKnZhbCwgKnRiOwotICAgICAgICBpZiAoc2VsZi0+ZGVhbGxvY2F0aW5nKSB7CisgICAgICAgIGlmIChzZWxmLT5maW5hbGl6aW5nKSB7CiAgICAgICAgICAgICByZXMgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKHNlbGYtPmJ1ZmZlciwgJlB5SWRfX2RlYWxsb2Nfd2FybiwgIk8iLCBzZWxmKTsKICAgICAgICAgICAgIGlmIChyZXMpCiAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHJlcyk7CkBAIC0yNjA0LDE5ICsyNjIzLDggQEAKIAogICAgICAgICByZXMgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKHNlbGYtPmJ1ZmZlciwgJlB5SWRfY2xvc2UsIE5VTEwpOwogICAgICAgICBpZiAoZXhjICE9IE5VTEwpIHsKLSAgICAgICAgICAgIGlmIChyZXMgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIFB5X0NMRUFSKHJlcyk7Ci0gICAgICAgICAgICAgICAgUHlFcnJfUmVzdG9yZShleGMsIHZhbCwgdGIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgUHlPYmplY3QgKnZhbDI7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKGV4Yyk7Ci0gICAgICAgICAgICAgICAgUHlfWERFQ1JFRih0Yik7Ci0gICAgICAgICAgICAgICAgUHlFcnJfRmV0Y2goJmV4YywgJnZhbDIsICZ0Yik7Ci0gICAgICAgICAgICAgICAgUHlFcnJfTm9ybWFsaXplRXhjZXB0aW9uKCZleGMsICZ2YWwyLCAmdGIpOwotICAgICAgICAgICAgICAgIFB5RXhjZXB0aW9uX1NldENvbnRleHQodmFsMiwgdmFsKTsKLSAgICAgICAgICAgICAgICBQeUVycl9SZXN0b3JlKGV4YywgdmFsMiwgdGIpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgX1B5RXJyX0NoYWluRXhjZXB0aW9ucyhleGMsIHZhbCwgdGIpOworICAgICAgICAgICAgUHlfQ0xFQVIocmVzKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gcmVzOwogICAgIH0KQEAgLTI2MjcsNyArMjYzNSw3IEBACiB7CiAgICAgUHlPYmplY3QgKmxpbmU7CiAKLSAgICBDSEVDS19JTklUSUFMSVpFRChzZWxmKTsKKyAgICBDSEVDS19BVFRBQ0hFRChzZWxmKTsKIAogICAgIHNlbGYtPnRlbGxpbmcgPSAwOwogICAgIGlmIChQeV9UWVBFKHNlbGYpID09ICZQeVRleHRJT1dyYXBwZXJfVHlwZSkgewpAQCAtMjY2MywxNCArMjY3MSwxNCBAQAogc3RhdGljIFB5T2JqZWN0ICoKIHRleHRpb3dyYXBwZXJfbmFtZV9nZXQodGV4dGlvICpzZWxmLCB2b2lkICpjb250ZXh0KQogewotICAgIENIRUNLX0lOSVRJQUxJWkVEKHNlbGYpOworICAgIENIRUNLX0FUVEFDSEVEKHNlbGYpOwogICAgIHJldHVybiBfUHlPYmplY3RfR2V0QXR0cklkKHNlbGYtPmJ1ZmZlciwgJlB5SWRfbmFtZSk7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCiB0ZXh0aW93cmFwcGVyX2Nsb3NlZF9nZXQodGV4dGlvICpzZWxmLCB2b2lkICpjb250ZXh0KQogewotICAgIENIRUNLX0lOSVRJQUxJWkVEKHNlbGYpOworICAgIENIRUNLX0FUVEFDSEVEKHNlbGYpOwogICAgIHJldHVybiBQeU9iamVjdF9HZXRBdHRyKHNlbGYtPmJ1ZmZlciwgX1B5SU9fc3RyX2Nsb3NlZCk7CiB9CiAKQEAgLTI2NzgsNyArMjY4Niw3IEBACiB0ZXh0aW93cmFwcGVyX25ld2xpbmVzX2dldCh0ZXh0aW8gKnNlbGYsIHZvaWQgKmNvbnRleHQpCiB7CiAgICAgUHlPYmplY3QgKnJlczsKLSAgICBDSEVDS19JTklUSUFMSVpFRChzZWxmKTsKKyAgICBDSEVDS19BVFRBQ0hFRChzZWxmKTsKICAgICBpZiAoc2VsZi0+ZGVjb2RlciA9PSBOVUxMKQogICAgICAgICBQeV9SRVRVUk5fTk9ORTsKICAgICByZXMgPSBQeU9iamVjdF9HZXRBdHRyKHNlbGYtPmRlY29kZXIsIF9QeUlPX3N0cl9uZXdsaW5lcyk7CkBAIC0yNzA0LDcgKzI3MTIsNyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIHRleHRpb3dyYXBwZXJfY2h1bmtfc2l6ZV9nZXQodGV4dGlvICpzZWxmLCB2b2lkICpjb250ZXh0KQogewotICAgIENIRUNLX0lOSVRJQUxJWkVEKHNlbGYpOworICAgIENIRUNLX0FUVEFDSEVEKHNlbGYpOwogICAgIHJldHVybiBQeUxvbmdfRnJvbVNzaXplX3Qoc2VsZi0+Y2h1bmtfc2l6ZSk7CiB9CiAKQEAgLTI3MTIsNyArMjcyMCw3IEBACiB0ZXh0aW93cmFwcGVyX2NodW5rX3NpemVfc2V0KHRleHRpbyAqc2VsZiwgUHlPYmplY3QgKmFyZywgdm9pZCAqY29udGV4dCkKIHsKICAgICBQeV9zc2l6ZV90IG47Ci0gICAgQ0hFQ0tfSU5JVElBTElaRURfSU5UKHNlbGYpOworICAgIENIRUNLX0FUVEFDSEVEX0lOVChzZWxmKTsKICAgICBuID0gUHlOdW1iZXJfQXNTc2l6ZV90KGFyZywgUHlFeGNfVmFsdWVFcnJvcik7CiAgICAgaWYgKG4gPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgcmV0dXJuIC0xOwpAQCAtMjc1MCw2ICsyNzU4LDcgQEAKICAgICB7ImVuY29kaW5nIiwgVF9PQkpFQ1QsIG9mZnNldG9mKHRleHRpbywgZW5jb2RpbmcpLCBSRUFET05MWX0sCiAgICAgeyJidWZmZXIiLCBUX09CSkVDVCwgb2Zmc2V0b2YodGV4dGlvLCBidWZmZXIpLCBSRUFET05MWX0sCiAgICAgeyJsaW5lX2J1ZmZlcmluZyIsIFRfQk9PTCwgb2Zmc2V0b2YodGV4dGlvLCBsaW5lX2J1ZmZlcmluZyksIFJFQURPTkxZfSwKKyAgICB7Il9maW5hbGl6aW5nIiwgVF9CT09MLCBvZmZzZXRvZih0ZXh0aW8sIGZpbmFsaXppbmcpLCAwfSwKICAgICB7TlVMTH0KIH07CiAKQEAgLTI3ODYsNyArMjc5NSw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc2V0YXR0cm8qLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX2J1ZmZlciovCiAgICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19CQVNFVFlQRQotICAgICAgICAgICAgfCBQeV9UUEZMQUdTX0hBVkVfR0MsIC8qdHBfZmxhZ3MqLworICAgICAgICB8IFB5X1RQRkxBR1NfSEFWRV9HQyB8IFB5X1RQRkxBR1NfSEFWRV9GSU5BTElaRSwgLyp0cF9mbGFncyovCiAgICAgdGV4dGlvd3JhcHBlcl9kb2MsICAgICAgICAgIC8qIHRwX2RvYyAqLwogICAgICh0cmF2ZXJzZXByb2MpdGV4dGlvd3JhcHBlcl90cmF2ZXJzZSwgLyogdHBfdHJhdmVyc2UgKi8KICAgICAoaW5xdWlyeSl0ZXh0aW93cmFwcGVyX2NsZWFyLCAvKiB0cF9jbGVhciAqLwpAQCAtMjgwNSw0ICsyODE0LDE0IEBACiAgICAgKGluaXRwcm9jKXRleHRpb3dyYXBwZXJfaW5pdCwgLyogdHBfaW5pdCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hbGxvYyAqLwogICAgIFB5VHlwZV9HZW5lcmljTmV3LCAgICAgICAgICAvKiB0cF9uZXcgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZnJlZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pc19nYyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNlcyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tcm8gKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2FjaGUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc3ViY2xhc3NlcyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZWwgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfdmVyc2lvbl90YWcgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZmluYWxpemUgKi8KIH07CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19qc29uLmMgYi9Nb2R1bGVzL19qc29uLmMKaW5kZXggNmRmMDhiNS4uZGRlZDJjOSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fanNvbi5jCisrKyBiL01vZHVsZXMvX2pzb24uYwpAQCAtMiwyMCArMiw2IEBACiAjaW5jbHVkZSAic3RydWN0bWVtYmVyLmgiCiAjaW5jbHVkZSAiYWNjdS5oIgogCi0jaWYgUFlfVkVSU0lPTl9IRVggPCAweDAyMDYwMDAwICYmICFkZWZpbmVkKFB5X1RZUEUpCi0jZGVmaW5lIFB5X1RZUEUob2IpICAgICAoKChQeU9iamVjdCopKG9iKSktPm9iX3R5cGUpCi0jZW5kaWYKLSNpZiBQWV9WRVJTSU9OX0hFWCA8IDB4MDIwNTAwMDAgJiYgIWRlZmluZWQoUFlfU1NJWkVfVF9NSU4pCi10eXBlZGVmIGludCBQeV9zc2l6ZV90OwotI2RlZmluZSBQWV9TU0laRV9UX01BWCBJTlRfTUFYCi0jZGVmaW5lIFBZX1NTSVpFX1RfTUlOIElOVF9NSU4KLSNkZWZpbmUgUHlJbnRfRnJvbVNzaXplX3QgUHlJbnRfRnJvbUxvbmcKLSNkZWZpbmUgUHlJbnRfQXNTc2l6ZV90IFB5SW50X0FzTG9uZwotI2VuZGlmCi0jaWZuZGVmIFB5X0lTX0ZJTklURQotI2RlZmluZSBQeV9JU19GSU5JVEUoWCkgKCFQeV9JU19JTkZJTklUWShYKSAmJiAhUHlfSVNfTkFOKFgpKQotI2VuZGlmCi0KICNpZmRlZiBfX0dOVUNfXwogI2RlZmluZSBVTlVTRUQgX19hdHRyaWJ1dGVfXygoX191bnVzZWRfXykpCiAjZWxzZQpAQCAtMTI5LDMzICsxMTUsMTQgQEAKIHJhaXNlX2Vycm1zZyhjaGFyICptc2csIFB5T2JqZWN0ICpzLCBQeV9zc2l6ZV90IGVuZCk7CiBzdGF0aWMgUHlPYmplY3QgKgogZW5jb2Rlcl9lbmNvZGVfc3RyaW5nKFB5RW5jb2Rlck9iamVjdCAqcywgUHlPYmplY3QgKm9iaik7Ci1zdGF0aWMgaW50Ci1fY29udmVydFB5SW50X0FzU3NpemVfdChQeU9iamVjdCAqbywgUHlfc3NpemVfdCAqc2l6ZV9wdHIpOwogc3RhdGljIFB5T2JqZWN0ICoKLV9jb252ZXJ0UHlJbnRfRnJvbVNzaXplX3QoUHlfc3NpemVfdCAqc2l6ZV9wdHIpOworZW5jb2Rlcl9lbmNvZGVfbG9uZyhQeUVuY29kZXJPYmplY3QqIHMgVU5VU0VELCBQeU9iamVjdCAqb2JqKTsKIHN0YXRpYyBQeU9iamVjdCAqCiBlbmNvZGVyX2VuY29kZV9mbG9hdChQeUVuY29kZXJPYmplY3QgKnMsIFB5T2JqZWN0ICpvYmopOwogCiAjZGVmaW5lIFNfQ0hBUihjKSAoYyA+PSAnICcgJiYgYyA8PSAnficgJiYgYyAhPSAnXFwnICYmIGMgIT0gJyInKQogI2RlZmluZSBJU19XSElURVNQQUNFKGMpICgoKGMpID09ICcgJykgfHwgKChjKSA9PSAnXHQnKSB8fCAoKGMpID09ICdcbicpIHx8ICgoYykgPT0gJ1xyJykpCiAKLXN0YXRpYyBpbnQKLV9jb252ZXJ0UHlJbnRfQXNTc2l6ZV90KFB5T2JqZWN0ICpvLCBQeV9zc2l6ZV90ICpzaXplX3B0cikKLXsKLSAgICAvKiBQeU9iamVjdCB0byBQeV9zc2l6ZV90IGNvbnZlcnRlciAqLwotICAgICpzaXplX3B0ciA9IFB5TG9uZ19Bc1NzaXplX3Qobyk7Ci0gICAgaWYgKCpzaXplX3B0ciA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gMTsKLX0KLQotc3RhdGljIFB5T2JqZWN0ICoKLV9jb252ZXJ0UHlJbnRfRnJvbVNzaXplX3QoUHlfc3NpemVfdCAqc2l6ZV9wdHIpCi17Ci0gICAgLyogUHlfc3NpemVfdCB0byBQeU9iamVjdCBjb252ZXJ0ZXIgKi8KLSAgICByZXR1cm4gUHlMb25nX0Zyb21Tc2l6ZV90KCpzaXplX3B0cik7Ci19Ci0KIHN0YXRpYyBQeV9zc2l6ZV90CiBhc2NpaV9lc2NhcGVfdW5pY2hhcihQeV9VQ1M0IGMsIHVuc2lnbmVkIGNoYXIgKm91dHB1dCwgUHlfc3NpemVfdCBjaGFycykKIHsKQEAgLTE3NCwxNCArMTQxLDEzIEBACiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBpZiAoYyA+PSAweDEwMDAwKSB7CiAgICAgICAgICAgICAgICAgLyogVVRGLTE2IHN1cnJvZ2F0ZSBwYWlyICovCi0gICAgICAgICAgICAgICAgUHlfVUNTNCB2ID0gYyAtIDB4MTAwMDA7Ci0gICAgICAgICAgICAgICAgYyA9IDB4ZDgwMCB8ICgodiA+PiAxMCkgJiAweDNmZik7CisgICAgICAgICAgICAgICAgUHlfVUNTNCB2ID0gUHlfVU5JQ09ERV9ISUdIX1NVUlJPR0FURShjKTsKICAgICAgICAgICAgICAgICBvdXRwdXRbY2hhcnMrK10gPSAndSc7Ci0gICAgICAgICAgICAgICAgb3V0cHV0W2NoYXJzKytdID0gUHlfaGV4ZGlnaXRzWyhjID4+IDEyKSAmIDB4Zl07Ci0gICAgICAgICAgICAgICAgb3V0cHV0W2NoYXJzKytdID0gUHlfaGV4ZGlnaXRzWyhjID4+ICA4KSAmIDB4Zl07Ci0gICAgICAgICAgICAgICAgb3V0cHV0W2NoYXJzKytdID0gUHlfaGV4ZGlnaXRzWyhjID4+ICA0KSAmIDB4Zl07Ci0gICAgICAgICAgICAgICAgb3V0cHV0W2NoYXJzKytdID0gUHlfaGV4ZGlnaXRzWyhjICAgICAgKSAmIDB4Zl07Ci0gICAgICAgICAgICAgICAgYyA9IDB4ZGMwMCB8ICh2ICYgMHgzZmYpOworICAgICAgICAgICAgICAgIG91dHB1dFtjaGFycysrXSA9IFB5X2hleGRpZ2l0c1sodiA+PiAxMikgJiAweGZdOworICAgICAgICAgICAgICAgIG91dHB1dFtjaGFycysrXSA9IFB5X2hleGRpZ2l0c1sodiA+PiAgOCkgJiAweGZdOworICAgICAgICAgICAgICAgIG91dHB1dFtjaGFycysrXSA9IFB5X2hleGRpZ2l0c1sodiA+PiAgNCkgJiAweGZdOworICAgICAgICAgICAgICAgIG91dHB1dFtjaGFycysrXSA9IFB5X2hleGRpZ2l0c1sodiAgICAgICkgJiAweGZdOworICAgICAgICAgICAgICAgIGMgPSBQeV9VTklDT0RFX0xPV19TVVJST0dBVEUoYyk7CiAgICAgICAgICAgICAgICAgb3V0cHV0W2NoYXJzKytdID0gJ1xcJzsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG91dHB1dFtjaGFycysrXSA9ICd1JzsKQEAgLTI3NSwxMyArMjQxLDIzIEBACiAgICAgICAgIGlmIChlcnJtc2dfZm4gPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgcHltc2cgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oZXJybXNnX2ZuLCAiKHpPTyYpIiwgbXNnLCBzLCBfY29udmVydFB5SW50X0Zyb21Tc2l6ZV90LCAmZW5kKTsKKyAgICBweW1zZyA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihlcnJtc2dfZm4sICIoek9uKSIsIG1zZywgcywgZW5kKTsKICAgICBpZiAocHltc2cpIHsKICAgICAgICAgUHlFcnJfU2V0T2JqZWN0KFB5RXhjX1ZhbHVlRXJyb3IsIHB5bXNnKTsKICAgICAgICAgUHlfREVDUkVGKHB5bXNnKTsKICAgICB9CiB9CiAKK3N0YXRpYyB2b2lkCityYWlzZV9zdG9wX2l0ZXJhdGlvbihQeV9zc2l6ZV90IGlkeCkKK3sKKyAgICBQeU9iamVjdCAqdmFsdWUgPSBQeUxvbmdfRnJvbVNzaXplX3QoaWR4KTsKKyAgICBpZiAodmFsdWUgIT0gTlVMTCkgeworICAgICAgICBQeUVycl9TZXRPYmplY3QoUHlFeGNfU3RvcEl0ZXJhdGlvbiwgdmFsdWUpOworICAgICAgICBQeV9ERUNSRUYodmFsdWUpOworICAgIH0KK30KKwogc3RhdGljIFB5T2JqZWN0ICoKIF9idWlsZF9ydmFsX2luZGV4X3R1cGxlKFB5T2JqZWN0ICpydmFsLCBQeV9zc2l6ZV90IGlkeCkgewogICAgIC8qIHJldHVybiAocnZhbCwgaWR4KSB0dXBsZSwgc3RlYWxpbmcgcmVmZXJlbmNlIHRvIHJ2YWwgKi8KQEAgLTMxOCw3ICsyOTQsNyBAQAogICAgICAgICAgICAgfSBcCiAgICAgICAgIH0gXAogICAgICAgICBpZiAoUHlMaXN0X0FwcGVuZChjaHVua3MsIGNodW5rKSkgeyBcCi0gICAgICAgICAgICBQeV9ERUNSRUYoY2h1bmspOyBcCisgICAgICAgICAgICBQeV9DTEVBUihjaHVuayk7IFwKICAgICAgICAgICAgIGdvdG8gYmFpbDsgXAogICAgICAgICB9IFwKICAgICAgICAgUHlfQ0xFQVIoY2h1bmspOyBcCkBAIC0zNTEsNyArMzI3LDcgQEAKICAgICBidWYgPSBQeVVuaWNvZGVfREFUQShweXN0cik7CiAgICAga2luZCA9IFB5VW5pY29kZV9LSU5EKHB5c3RyKTsKIAotICAgIGlmIChlbmQgPCAwIHx8IGxlbiA8PSBlbmQpIHsKKyAgICBpZiAoZW5kIDwgMCB8fCBsZW4gPCBlbmQpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJlbmQgaXMgb3V0IG9mIGJvdW5kcyIpOwogICAgICAgICBnb3RvIGJhaWw7CiAgICAgfQpAQCAtNTIyLDcgKzQ5OCw3IEBACiAgICAgUHlfc3NpemVfdCBlbmQ7CiAgICAgUHlfc3NpemVfdCBuZXh0X2VuZCA9IC0xOwogICAgIGludCBzdHJpY3QgPSAxOwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiT08mfGk6c2NhbnN0cmluZyIsICZweXN0ciwgX2NvbnZlcnRQeUludF9Bc1NzaXplX3QsICZlbmQsICZzdHJpY3QpKSB7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPbnxpOnNjYW5zdHJpbmciLCAmcHlzdHIsICZlbmQsICZzdHJpY3QpKSB7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBpZiAoUHlVbmljb2RlX0NoZWNrKHB5c3RyKSkgewpAQCAtNjE5LDYgKzU5NSw5IEBACiAgICAgaW50IGhhc19wYWlyc19ob29rID0gKHMtPm9iamVjdF9wYWlyc19ob29rICE9IFB5X05vbmUpOwogICAgIFB5X3NzaXplX3QgbmV4dF9pZHg7CiAKKyAgICBpZiAoc3RyaWN0IDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKICAgICBpZiAoUHlVbmljb2RlX1JFQURZKHB5c3RyKSA9PSAtMSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTYzNywxMiArNjE2LDEyIEBACiAgICAgd2hpbGUgKGlkeCA8PSBlbmRfaWR4ICYmIElTX1dISVRFU1BBQ0UoUHlVbmljb2RlX1JFQUQoa2luZCxzdHIsIGlkeCkpKSBpZHgrKzsKIAogICAgIC8qIG9ubHkgbG9vcCBpZiB0aGUgb2JqZWN0IGlzIG5vbi1lbXB0eSAqLwotICAgIGlmIChpZHggPD0gZW5kX2lkeCAmJiBQeVVuaWNvZGVfUkVBRChraW5kLCBzdHIsIGlkeCkgIT0gJ30nKSB7Ci0gICAgICAgIHdoaWxlIChpZHggPD0gZW5kX2lkeCkgeworICAgIGlmIChpZHggPiBlbmRfaWR4IHx8IFB5VW5pY29kZV9SRUFEKGtpbmQsIHN0ciwgaWR4KSAhPSAnfScpIHsKKyAgICAgICAgd2hpbGUgKDEpIHsKICAgICAgICAgICAgIFB5T2JqZWN0ICptZW1va2V5OwogCiAgICAgICAgICAgICAvKiByZWFkIGtleSAqLwotICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9SRUFEKGtpbmQsIHN0ciwgaWR4KSAhPSAnIicpIHsKKyAgICAgICAgICAgIGlmIChpZHggPiBlbmRfaWR4IHx8IFB5VW5pY29kZV9SRUFEKGtpbmQsIHN0ciwgaWR4KSAhPSAnIicpIHsKICAgICAgICAgICAgICAgICByYWlzZV9lcnJtc2coIkV4cGVjdGluZyBwcm9wZXJ0eSBuYW1lIGVuY2xvc2VkIGluIGRvdWJsZSBxdW90ZXMiLCBweXN0ciwgaWR4KTsKICAgICAgICAgICAgICAgICBnb3RvIGJhaWw7CiAgICAgICAgICAgICB9CkBAIC02OTksMTEgKzY3OCw5IEBACiAgICAgICAgICAgICB3aGlsZSAoaWR4IDw9IGVuZF9pZHggJiYgSVNfV0hJVEVTUEFDRShQeVVuaWNvZGVfUkVBRChraW5kLCBzdHIsIGlkeCkpKSBpZHgrKzsKIAogICAgICAgICAgICAgLyogYmFpbCBpZiB0aGUgb2JqZWN0IGlzIGNsb3NlZCBvciB3ZSBkaWRuJ3QgZ2V0IHRoZSAsIGRlbGltaXRlciAqLwotICAgICAgICAgICAgaWYgKGlkeCA+IGVuZF9pZHgpIGJyZWFrOwotICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9SRUFEKGtpbmQsIHN0ciwgaWR4KSA9PSAnfScpIHsKKyAgICAgICAgICAgIGlmIChpZHggPD0gZW5kX2lkeCAmJiBQeVVuaWNvZGVfUkVBRChraW5kLCBzdHIsIGlkeCkgPT0gJ30nKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoUHlVbmljb2RlX1JFQUQoa2luZCwgc3RyLCBpZHgpICE9ICcsJykgeworICAgICAgICAgICAgaWYgKGlkeCA+IGVuZF9pZHggfHwgUHlVbmljb2RlX1JFQUQoa2luZCwgc3RyLCBpZHgpICE9ICcsJykgewogICAgICAgICAgICAgICAgIHJhaXNlX2Vycm1zZygiRXhwZWN0aW5nICcsJyBkZWxpbWl0ZXIiLCBweXN0ciwgaWR4KTsKICAgICAgICAgICAgICAgICBnb3RvIGJhaWw7CiAgICAgICAgICAgICB9CkBAIC03MTQsMTIgKzY5MSw2IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICAvKiB2ZXJpZnkgdGhhdCBpZHggPCBlbmRfaWR4LCBzdHJbaWR4XSBzaG91bGQgYmUgJ30nICovCi0gICAgaWYgKGlkeCA+IGVuZF9pZHggfHwgUHlVbmljb2RlX1JFQUQoa2luZCwgc3RyLCBpZHgpICE9ICd9JykgewotICAgICAgICByYWlzZV9lcnJtc2coIkV4cGVjdGluZyBvYmplY3QiLCBweXN0ciwgZW5kX2lkeCk7Ci0gICAgICAgIGdvdG8gYmFpbDsKLSAgICB9Ci0KICAgICAqbmV4dF9pZHhfcHRyID0gaWR4ICsgMTsKIAogICAgIGlmIChoYXNfcGFpcnNfaG9vaykgewpAQCAtNzcxLDggKzc0Miw4IEBACiAgICAgd2hpbGUgKGlkeCA8PSBlbmRfaWR4ICYmIElTX1dISVRFU1BBQ0UoUHlVbmljb2RlX1JFQUQoa2luZCwgc3RyLCBpZHgpKSkgaWR4Kys7CiAKICAgICAvKiBvbmx5IGxvb3AgaWYgdGhlIGFycmF5IGlzIG5vbi1lbXB0eSAqLwotICAgIGlmIChpZHggPD0gZW5kX2lkeCAmJiBQeVVuaWNvZGVfUkVBRChraW5kLCBzdHIsIGlkeCkgIT0gJ10nKSB7Ci0gICAgICAgIHdoaWxlIChpZHggPD0gZW5kX2lkeCkgeworICAgIGlmIChpZHggPiBlbmRfaWR4IHx8IFB5VW5pY29kZV9SRUFEKGtpbmQsIHN0ciwgaWR4KSAhPSAnXScpIHsKKyAgICAgICAgd2hpbGUgKDEpIHsKIAogICAgICAgICAgICAgLyogcmVhZCBhbnkgSlNPTiB0ZXJtICAqLwogICAgICAgICAgICAgdmFsID0gc2Nhbl9vbmNlX3VuaWNvZGUocywgcHlzdHIsIGlkeCwgJm5leHRfaWR4KTsKQEAgLTc4OSwxMSArNzYwLDkgQEAKICAgICAgICAgICAgIHdoaWxlIChpZHggPD0gZW5kX2lkeCAmJiBJU19XSElURVNQQUNFKFB5VW5pY29kZV9SRUFEKGtpbmQsIHN0ciwgaWR4KSkpIGlkeCsrOwogCiAgICAgICAgICAgICAvKiBiYWlsIGlmIHRoZSBhcnJheSBpcyBjbG9zZWQgb3Igd2UgZGlkbid0IGdldCB0aGUgLCBkZWxpbWl0ZXIgKi8KLSAgICAgICAgICAgIGlmIChpZHggPiBlbmRfaWR4KSBicmVhazsKLSAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfUkVBRChraW5kLCBzdHIsIGlkeCkgPT0gJ10nKSB7CisgICAgICAgICAgICBpZiAoaWR4IDw9IGVuZF9pZHggJiYgUHlVbmljb2RlX1JFQUQoa2luZCwgc3RyLCBpZHgpID09ICddJykKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKFB5VW5pY29kZV9SRUFEKGtpbmQsIHN0ciwgaWR4KSAhPSAnLCcpIHsKKyAgICAgICAgICAgIGlmIChpZHggPiBlbmRfaWR4IHx8IFB5VW5pY29kZV9SRUFEKGtpbmQsIHN0ciwgaWR4KSAhPSAnLCcpIHsKICAgICAgICAgICAgICAgICByYWlzZV9lcnJtc2coIkV4cGVjdGluZyAnLCcgZGVsaW1pdGVyIiwgcHlzdHIsIGlkeCk7CiAgICAgICAgICAgICAgICAgZ290byBiYWlsOwogICAgICAgICAgICAgfQpAQCAtODA2LDcgKzc3NSw3IEBACiAKICAgICAvKiB2ZXJpZnkgdGhhdCBpZHggPCBlbmRfaWR4LCBQeVVuaWNvZGVfUkVBRChraW5kLCBzdHIsIGlkeCkgc2hvdWxkIGJlICddJyAqLwogICAgIGlmIChpZHggPiBlbmRfaWR4IHx8IFB5VW5pY29kZV9SRUFEKGtpbmQsIHN0ciwgaWR4KSAhPSAnXScpIHsKLSAgICAgICAgcmFpc2VfZXJybXNnKCJFeHBlY3Rpbmcgb2JqZWN0IiwgcHlzdHIsIGVuZF9pZHgpOworICAgICAgICByYWlzZV9lcnJtc2coIkV4cGVjdGluZyB2YWx1ZSIsIHB5c3RyLCBlbmRfaWR4KTsKICAgICAgICAgZ290byBiYWlsOwogICAgIH0KICAgICAqbmV4dF9pZHhfcHRyID0gaWR4ICsgMTsKQEAgLTg3NCw3ICs4NDMsNyBAQAogICAgIGlmIChQeVVuaWNvZGVfUkVBRChraW5kLCBzdHIsIGlkeCkgPT0gJy0nKSB7CiAgICAgICAgIGlkeCsrOwogICAgICAgICBpZiAoaWR4ID4gZW5kX2lkeCkgewotICAgICAgICAgICAgUHlFcnJfU2V0Tm9uZShQeUV4Y19TdG9wSXRlcmF0aW9uKTsKKyAgICAgICAgICAgIHJhaXNlX3N0b3BfaXRlcmF0aW9uKHN0YXJ0KTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAgICAgfQpAQCAtODkwLDcgKzg1OSw3IEBACiAgICAgfQogICAgIC8qIG5vIGludGVnZXIgZGlnaXRzLCBlcnJvciAqLwogICAgIGVsc2UgewotICAgICAgICBQeUVycl9TZXROb25lKFB5RXhjX1N0b3BJdGVyYXRpb24pOworICAgICAgICByYWlzZV9zdG9wX2l0ZXJhdGlvbihzdGFydCk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIApAQCAtOTc0LDYgKzk0Myw3IEBACiAgICAgdm9pZCAqc3RyOwogICAgIGludCBraW5kOwogICAgIFB5X3NzaXplX3QgbGVuZ3RoOworICAgIGludCBzdHJpY3Q7CiAKICAgICBpZiAoUHlVbmljb2RlX1JFQURZKHB5c3RyKSA9PSAtMSkKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC05ODcsMTYgKzk1NywxNyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgaWYgKGlkeCA+PSBsZW5ndGgpIHsKLSAgICAgICAgUHlFcnJfU2V0Tm9uZShQeUV4Y19TdG9wSXRlcmF0aW9uKTsKKyAgICAgICAgcmFpc2Vfc3RvcF9pdGVyYXRpb24oaWR4KTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCiAgICAgc3dpdGNoIChQeVVuaWNvZGVfUkVBRChraW5kLCBzdHIsIGlkeCkpIHsKICAgICAgICAgY2FzZSAnIic6CiAgICAgICAgICAgICAvKiBzdHJpbmcgKi8KLSAgICAgICAgICAgIHJldHVybiBzY2Fuc3RyaW5nX3VuaWNvZGUocHlzdHIsIGlkeCArIDEsCi0gICAgICAgICAgICAgICAgUHlPYmplY3RfSXNUcnVlKHMtPnN0cmljdCksCi0gICAgICAgICAgICAgICAgbmV4dF9pZHhfcHRyKTsKKyAgICAgICAgICAgIHN0cmljdCA9IFB5T2JqZWN0X0lzVHJ1ZShzLT5zdHJpY3QpOworICAgICAgICAgICAgaWYgKHN0cmljdCA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICByZXR1cm4gc2NhbnN0cmluZ191bmljb2RlKHB5c3RyLCBpZHggKyAxLCBzdHJpY3QsIG5leHRfaWR4X3B0cik7CiAgICAgICAgIGNhc2UgJ3snOgogICAgICAgICAgICAgLyogb2JqZWN0ICovCiAgICAgICAgICAgICBpZiAoUHlfRW50ZXJSZWN1cnNpdmVDYWxsKCIgd2hpbGUgZGVjb2RpbmcgYSBKU09OIG9iamVjdCAiCkBAIC0xMDg5LDcgKzEwNjAsNyBAQAogICAgIFB5U2Nhbm5lck9iamVjdCAqczsKICAgICBhc3NlcnQoUHlTY2FubmVyX0NoZWNrKHNlbGYpKTsKICAgICBzID0gKFB5U2Nhbm5lck9iamVjdCAqKXNlbGY7Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgIk9PJjpzY2FuX29uY2UiLCBrd2xpc3QsICZweXN0ciwgX2NvbnZlcnRQeUludF9Bc1NzaXplX3QsICZpZHgpKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJPbjpzY2FuX29uY2UiLCBrd2xpc3QsICZweXN0ciwgJmlkeCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgaWYgKFB5VW5pY29kZV9DaGVjayhweXN0cikpIHsKQEAgLTEyNDYsMTYgKzEyMTcsMjUgQEAKIAogICAgIFB5RW5jb2Rlck9iamVjdCAqczsKICAgICBQeU9iamVjdCAqbWFya2VycywgKmRlZmF1bHRmbiwgKmVuY29kZXIsICppbmRlbnQsICprZXlfc2VwYXJhdG9yOwotICAgIFB5T2JqZWN0ICppdGVtX3NlcGFyYXRvciwgKnNvcnRfa2V5cywgKnNraXBrZXlzLCAqYWxsb3dfbmFuOworICAgIFB5T2JqZWN0ICppdGVtX3NlcGFyYXRvciwgKnNvcnRfa2V5cywgKnNraXBrZXlzOworICAgIGludCBhbGxvd19uYW47CiAKICAgICBhc3NlcnQoUHlFbmNvZGVyX0NoZWNrKHNlbGYpKTsKICAgICBzID0gKFB5RW5jb2Rlck9iamVjdCAqKXNlbGY7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiT09PT09PT09POm1ha2VfZW5jb2RlciIsIGt3bGlzdCwKLSAgICAgICAgJm1hcmtlcnMsICZkZWZhdWx0Zm4sICZlbmNvZGVyLCAmaW5kZW50LCAma2V5X3NlcGFyYXRvciwgJml0ZW1fc2VwYXJhdG9yLAorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJPT09PVVVPT3A6bWFrZV9lbmNvZGVyIiwga3dsaXN0LAorICAgICAgICAmbWFya2VycywgJmRlZmF1bHRmbiwgJmVuY29kZXIsICZpbmRlbnQsCisgICAgICAgICZrZXlfc2VwYXJhdG9yLCAmaXRlbV9zZXBhcmF0b3IsCiAgICAgICAgICZzb3J0X2tleXMsICZza2lwa2V5cywgJmFsbG93X25hbikpCiAgICAgICAgIHJldHVybiAtMTsKIAorICAgIGlmIChtYXJrZXJzICE9IFB5X05vbmUgJiYgIVB5RGljdF9DaGVjayhtYXJrZXJzKSkgeworICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgIm1ha2VfZW5jb2RlcigpIGFyZ3VtZW50IDEgbXVzdCBiZSBkaWN0IG9yIE5vbmUsICIKKyAgICAgICAgICAgICAgICAgICAgICJub3QgJS4yMDBzIiwgUHlfVFlQRShtYXJrZXJzKS0+dHBfbmFtZSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKICAgICBzLT5tYXJrZXJzID0gbWFya2VyczsKICAgICBzLT5kZWZhdWx0Zm4gPSBkZWZhdWx0Zm47CiAgICAgcy0+ZW5jb2RlciA9IGVuY29kZXI7CkBAIC0xMjY1LDcgKzEyNDUsNyBAQAogICAgIHMtPnNvcnRfa2V5cyA9IHNvcnRfa2V5czsKICAgICBzLT5za2lwa2V5cyA9IHNraXBrZXlzOwogICAgIHMtPmZhc3RfZW5jb2RlID0gKFB5Q0Z1bmN0aW9uX0NoZWNrKHMtPmVuY29kZXIpICYmIFB5Q0Z1bmN0aW9uX0dldEZ1bmN0aW9uKHMtPmVuY29kZXIpID09IChQeUNGdW5jdGlvbilweV9lbmNvZGVfYmFzZXN0cmluZ19hc2NpaSk7Ci0gICAgcy0+YWxsb3dfbmFuID0gUHlPYmplY3RfSXNUcnVlKGFsbG93X25hbik7CisgICAgcy0+YWxsb3dfbmFuID0gYWxsb3dfbmFuOwogCiAgICAgUHlfSU5DUkVGKHMtPm1hcmtlcnMpOwogICAgIFB5X0lOQ1JFRihzLT5kZWZhdWx0Zm4pOwpAQCAtMTI5MCw4ICsxMjcwLDggQEAKIAogICAgIGFzc2VydChQeUVuY29kZXJfQ2hlY2soc2VsZikpOwogICAgIHMgPSAoUHlFbmNvZGVyT2JqZWN0ICopc2VsZjsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiT08mOl9pdGVyZW5jb2RlIiwga3dsaXN0LAotICAgICAgICAmb2JqLCBfY29udmVydFB5SW50X0FzU3NpemVfdCwgJmluZGVudF9sZXZlbCkpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgIk9uOl9pdGVyZW5jb2RlIiwga3dsaXN0LAorICAgICAgICAmb2JqLCAmaW5kZW50X2xldmVsKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgaWYgKF9QeUFjY3VfSW5pdCgmYWNjKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0xMzM3LDEzICsxMzE3LDQ1IEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCitlbmNvZGVyX2VuY29kZV9sb25nKFB5RW5jb2Rlck9iamVjdCogcyBVTlVTRUQsIFB5T2JqZWN0ICpvYmopCit7CisgICAgLyogUmV0dXJuIHRoZSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIGEgUHlMb25nIGFuZCBQeUxvbmcgc3ViY2xhc3Nlcy4KKyAgICAgICBDYWxscyBpbnQoKSBvbiBQeUxvbmcgc3ViY2xhc3NlcyBpbiBjYXNlIHRoZSBzdHIoKSB3YXMgY2hhbmdlZC4KKyAgICAgICBBZGRlZCBzcGVjaWZpY2FsbHkgdG8gZGVhbCB3aXRoIEludEVudW0uICBTZWUgSXNzdWUxODI2NC4gKi8KKyAgICBQeU9iamVjdCAqZW5jb2RlZCwgKmxvbmdvYmo7CisgICAgaWYgKFB5TG9uZ19DaGVja0V4YWN0KG9iaikpIHsKKyAgICAgICAgZW5jb2RlZCA9IFB5T2JqZWN0X1N0cihvYmopOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgbG9uZ29iaiA9IFB5TnVtYmVyX0xvbmcob2JqKTsKKyAgICAgICAgaWYgKGxvbmdvYmogPT0gTlVMTCkgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKAorICAgICAgICAgICAgICAgICAgICBQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAiVW5hYmxlIHRvIGNvZXJjZSBpbnQgc3ViY2xhc3MgdG8gaW50IgorICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgZW5jb2RlZCA9IFB5T2JqZWN0X1N0cihsb25nb2JqKTsKKyAgICAgICAgUHlfREVDUkVGKGxvbmdvYmopOworICAgIH0KKyAgICByZXR1cm4gZW5jb2RlZDsKK30KKworCitzdGF0aWMgUHlPYmplY3QgKgogZW5jb2Rlcl9lbmNvZGVfZmxvYXQoUHlFbmNvZGVyT2JqZWN0ICpzLCBQeU9iamVjdCAqb2JqKQogewotICAgIC8qIFJldHVybiB0aGUgSlNPTiByZXByZXNlbnRhdGlvbiBvZiBhIFB5RmxvYXQgKi8KKyAgICAvKiBSZXR1cm4gdGhlIEpTT04gcmVwcmVzZW50YXRpb24gb2YgYSBQeUZsb2F0LgorICAgICAgIE1vZGlmaWVkIHRvIGNhbGwgZmxvYXQoKSBvbiBmbG9hdCBzdWJjbGFzc2VzIGluIGNhc2UgdGhlIHN1YmNsYXNzCisgICAgICAgY2hhbmdlcyB0aGUgcmVwci4gIFNlZSBJc3N1ZTE4MjY0LiAgKi8KKyAgICBQeU9iamVjdCAqZW5jb2RlZCwgKmZsb2F0b2JqOwogICAgIGRvdWJsZSBpID0gUHlGbG9hdF9BU19ET1VCTEUob2JqKTsKICAgICBpZiAoIVB5X0lTX0ZJTklURShpKSkgewogICAgICAgICBpZiAoIXMtPmFsbG93X25hbikgewotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJPdXQgb2YgcmFuZ2UgZmxvYXQgdmFsdWVzIGFyZSBub3QgSlNPTiBjb21wbGlhbnQiKTsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZygKKyAgICAgICAgICAgICAgICAgICAgUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgIk91dCBvZiByYW5nZSBmbG9hdCB2YWx1ZXMgYXJlIG5vdCBKU09OIGNvbXBsaWFudCIKKyAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAgICAgICAgIGlmIChpID4gMCkgewpAQCAtMTM1Niw4ICsxMzY4LDI0IEBACiAgICAgICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmcoIk5hTiIpOwogICAgICAgICB9CiAgICAgfQotICAgIC8qIFVzZSBhIGJldHRlciBmbG9hdCBmb3JtYXQgaGVyZT8gKi8KLSAgICByZXR1cm4gUHlPYmplY3RfUmVwcihvYmopOworICAgIC8qIGNvZXJjZSBmbG9hdCBzdWJjbGFzc2VzIHRvIGZsb2F0IChwcmltYXJpbHkgZm9yIEVudW0pICovCisgICAgaWYgKFB5RmxvYXRfQ2hlY2tFeGFjdChvYmopKSB7CisgICAgICAgIC8qIFVzZSBhIGJldHRlciBmbG9hdCBmb3JtYXQgaGVyZT8gKi8KKyAgICAgICAgZW5jb2RlZCA9IFB5T2JqZWN0X1JlcHIob2JqKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGZsb2F0b2JqID0gUHlOdW1iZXJfRmxvYXQob2JqKTsKKyAgICAgICAgaWYgKGZsb2F0b2JqID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZygKKyAgICAgICAgICAgICAgICAgICAgUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgIlVuYWJsZSB0byBjb2VyY2UgZmxvYXQgc3ViY2xhc3MgdG8gZmxvYXQiCisgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBlbmNvZGVkID0gUHlPYmplY3RfUmVwcihmbG9hdG9iaik7CisgICAgICAgIFB5X0RFQ1JFRihmbG9hdG9iaik7CisgICAgfQorICAgIHJldHVybiBlbmNvZGVkOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtMTQwMSw3ICsxNDI5LDcgQEAKICAgICAgICAgcmV0dXJuIF9zdGVhbF9hY2N1bXVsYXRlKGFjYywgZW5jb2RlZCk7CiAgICAgfQogICAgIGVsc2UgaWYgKFB5TG9uZ19DaGVjayhvYmopKSB7Ci0gICAgICAgIFB5T2JqZWN0ICplbmNvZGVkID0gUHlPYmplY3RfU3RyKG9iaik7CisgICAgICAgIFB5T2JqZWN0ICplbmNvZGVkID0gZW5jb2Rlcl9lbmNvZGVfbG9uZyhzLCBvYmopOwogICAgICAgICBpZiAoZW5jb2RlZCA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICByZXR1cm4gX3N0ZWFsX2FjY3VtdWxhdGUoYWNjLCBlbmNvZGVkKTsKQEAgLTE0ODYsNiArMTUxNCw3IEBACiAgICAgUHlPYmplY3QgKml0ZW1zOwogICAgIFB5T2JqZWN0ICppdGVtID0gTlVMTDsKICAgICBpbnQgc2tpcGtleXM7CisgICAgaW50IHNvcnRrZXlzOwogICAgIFB5X3NzaXplX3QgaWR4OwogCiAgICAgaWYgKG9wZW5fZGljdCA9PSBOVUxMIHx8IGNsb3NlX2RpY3QgPT0gTlVMTCB8fCBlbXB0eV9kaWN0ID09IE5VTEwpIHsKQEAgLTE1MzAsMTMgKzE1NTksMTYgQEAKICAgICBpdGVtcyA9IFB5TWFwcGluZ19JdGVtcyhkY3QpOwogICAgIGlmIChpdGVtcyA9PSBOVUxMKQogICAgICAgICBnb3RvIGJhaWw7Ci0gICAgaWYgKFB5T2JqZWN0X0lzVHJ1ZShzLT5zb3J0X2tleXMpICYmIFB5TGlzdF9Tb3J0KGl0ZW1zKSA8IDApCisgICAgc29ydGtleXMgPSBQeU9iamVjdF9Jc1RydWUocy0+c29ydF9rZXlzKTsKKyAgICBpZiAoc29ydGtleXMgPCAwIHx8IChzb3J0a2V5cyAmJiBQeUxpc3RfU29ydChpdGVtcykgPCAwKSkKICAgICAgICAgZ290byBiYWlsOwogICAgIGl0ID0gUHlPYmplY3RfR2V0SXRlcihpdGVtcyk7CiAgICAgUHlfREVDUkVGKGl0ZW1zKTsKICAgICBpZiAoaXQgPT0gTlVMTCkKICAgICAgICAgZ290byBiYWlsOwogICAgIHNraXBrZXlzID0gUHlPYmplY3RfSXNUcnVlKHMtPnNraXBrZXlzKTsKKyAgICBpZiAoc2tpcGtleXMgPCAwKQorICAgICAgICBnb3RvIGJhaWw7CiAgICAgaWR4ID0gMDsKICAgICB3aGlsZSAoKGl0ZW0gPSBQeUl0ZXJfTmV4dChpdCkpICE9IE5VTEwpIHsKICAgICAgICAgUHlPYmplY3QgKmVuY29kZWQsICprZXksICp2YWx1ZTsKQEAgLTE1NjIsOSArMTU5NCwxMCBAQAogICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKICAgICAgICAgfQogICAgICAgICBlbHNlIGlmIChQeUxvbmdfQ2hlY2soa2V5KSkgewotICAgICAgICAgICAga3N0ciA9IFB5T2JqZWN0X1N0cihrZXkpOwotICAgICAgICAgICAgaWYgKGtzdHIgPT0gTlVMTCkKKyAgICAgICAgICAgIGtzdHIgPSBlbmNvZGVyX2VuY29kZV9sb25nKHMsIGtleSk7CisgICAgICAgICAgICBpZiAoa3N0ciA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgZ290byBiYWlsOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKHNraXBrZXlzKSB7CiAgICAgICAgICAgICBQeV9ERUNSRUYoaXRlbSk7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19sb2NhbGVtb2R1bGUuYyBiL01vZHVsZXMvX2xvY2FsZW1vZHVsZS5jCmluZGV4IGNjNjg4YmEuLmIxZDZhZGQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2xvY2FsZW1vZHVsZS5jCisrKyBiL01vZHVsZXMvX2xvY2FsZW1vZHVsZS5jCkBAIC0xNDcsMjYgKzE0NywzNCBAQAogICAgIC8qIGhvcGVmdWxseSwgdGhlIGxvY2FsZWNvbnYgcmVzdWx0IHN1cnZpdmVzIHRoZSBDIGxpYnJhcnkgY2FsbHMKICAgICAgICBpbnZvbHZlZCBoZXJlaW4gKi8KIAorI2RlZmluZSBSRVNVTFQoa2V5LCBvYmopXAorICAgIGRvIHsgXAorICAgICAgICBpZiAob2JqID09IE5VTEwpIFwKKyAgICAgICAgICAgIGdvdG8gZmFpbGVkOyBcCisgICAgICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhyZXN1bHQsIGtleSwgb2JqKSA8IDApIHsgXAorICAgICAgICAgICAgUHlfREVDUkVGKG9iaik7IFwKKyAgICAgICAgICAgIGdvdG8gZmFpbGVkOyBcCisgICAgICAgIH0gXAorICAgICAgICBQeV9ERUNSRUYob2JqKTsgXAorICAgIH0gd2hpbGUgKDApCisKICNkZWZpbmUgUkVTVUxUX1NUUklORyhzKVwKLSAgICB4ID0gUHlVbmljb2RlX0RlY29kZUxvY2FsZShsLT5zLCBOVUxMKTsgICBcCi0gICAgaWYgKCF4KSBnb3RvIGZhaWxlZDtcCi0gICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcocmVzdWx0LCAjcywgeCk7XAotICAgIFB5X1hERUNSRUYoeCkKKyAgICBkbyB7IFwKKyAgICAgICAgeCA9IFB5VW5pY29kZV9EZWNvZGVMb2NhbGUobC0+cywgTlVMTCk7IFwKKyAgICAgICAgUkVTVUxUKCNzLCB4KTsgXAorICAgIH0gd2hpbGUgKDApCiAKICNkZWZpbmUgUkVTVUxUX0lOVChpKVwKLSAgICB4ID0gUHlMb25nX0Zyb21Mb25nKGwtPmkpO1wKLSAgICBpZiAoIXgpIGdvdG8gZmFpbGVkO1wKLSAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhyZXN1bHQsICNpLCB4KTtcCi0gICAgUHlfWERFQ1JFRih4KQorICAgIGRvIHsgXAorICAgICAgICB4ID0gUHlMb25nX0Zyb21Mb25nKGwtPmkpOyBcCisgICAgICAgIFJFU1VMVCgjaSwgeCk7IFwKKyAgICB9IHdoaWxlICgwKQogCiAgICAgLyogTnVtZXJpYyBpbmZvcm1hdGlvbiAqLwogICAgIFJFU1VMVF9TVFJJTkcoZGVjaW1hbF9wb2ludCk7CiAgICAgUkVTVUxUX1NUUklORyh0aG91c2FuZHNfc2VwKTsKICAgICB4ID0gY29weV9ncm91cGluZyhsLT5ncm91cGluZyk7Ci0gICAgaWYgKCF4KQotICAgICAgICBnb3RvIGZhaWxlZDsKLSAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhyZXN1bHQsICJncm91cGluZyIsIHgpOwotICAgIFB5X1hERUNSRUYoeCk7CisgICAgUkVTVUxUKCJncm91cGluZyIsIHgpOwogCiAgICAgLyogTW9uZXRhcnkgaW5mb3JtYXRpb24gKi8KICAgICBSRVNVTFRfU1RSSU5HKGludF9jdXJyX3N5bWJvbCk7CkBAIC0xNzQsMTAgKzE4Miw4IEBACiAgICAgUkVTVUxUX1NUUklORyhtb25fZGVjaW1hbF9wb2ludCk7CiAgICAgUkVTVUxUX1NUUklORyhtb25fdGhvdXNhbmRzX3NlcCk7CiAgICAgeCA9IGNvcHlfZ3JvdXBpbmcobC0+bW9uX2dyb3VwaW5nKTsKLSAgICBpZiAoIXgpCi0gICAgICAgIGdvdG8gZmFpbGVkOwotICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKHJlc3VsdCwgIm1vbl9ncm91cGluZyIsIHgpOwotICAgIFB5X1hERUNSRUYoeCk7CisgICAgUkVTVUxUKCJtb25fZ3JvdXBpbmciLCB4KTsKKwogICAgIFJFU1VMVF9TVFJJTkcocG9zaXRpdmVfc2lnbik7CiAgICAgUkVTVUxUX1NUUklORyhuZWdhdGl2ZV9zaWduKTsKICAgICBSRVNVTFRfSU5UKGludF9mcmFjX2RpZ2l0cyk7CkBAIC0xOTIsNyArMTk4LDYgQEAKIAogICBmYWlsZWQ6CiAgICAgUHlfWERFQ1JFRihyZXN1bHQpOwotICAgIFB5X1hERUNSRUYoeCk7CiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTI0OSw3ICsyNTQsNyBAQAogCiAgICAgLyogYXNzdW1lIG5vIGNoYW5nZSBpbiBzaXplLCBmaXJzdCAqLwogICAgIG4xID0gbjEgKyAxOwotICAgIGJ1ZiA9IFB5TWVtX01hbGxvYyhuMSAqIHNpemVvZih3Y2hhcl90KSk7CisgICAgYnVmID0gUHlNZW1fTmV3KHdjaGFyX3QsIG4xKTsKICAgICBpZiAoIWJ1ZikgewogICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICBnb3RvIGV4aXQ7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19sc3Byb2YuYyBiL01vZHVsZXMvX2xzcHJvZi5jCmluZGV4IDQxNjJiZTguLjAxMzdkOTUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2xzcHJvZi5jCisrKyBiL01vZHVsZXMvX2xzcHJvZi5jCkBAIC0zNiwxMiArMzYsOCBAQAogI2Vycm9yICJUaGlzIG1vZHVsZSByZXF1aXJlcyBnZXR0aW1lb2ZkYXkoKSBvbiBub24tV2luZG93cyBwbGF0Zm9ybXMhIgogI2VuZGlmCiAKLSNpZiAoZGVmaW5lZChQWU9TX09TMikgJiYgZGVmaW5lZChQWUNDX0dDQykpCi0jaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSNlbHNlCiAjaW5jbHVkZSA8c3lzL3Jlc291cmNlLmg+CiAjaW5jbHVkZSA8c3lzL3RpbWVzLmg+Ci0jZW5kaWYKIAogc3RhdGljIFBZX0xPTkdfTE9ORwogaHBUaW1lcih2b2lkKQpAQCAtMjI3LDcgKzIyMyw3IEBACiBuZXdQcm9maWxlckVudHJ5KFByb2ZpbGVyT2JqZWN0ICpwT2JqLCB2b2lkICprZXksIFB5T2JqZWN0ICp1c2VyT2JqKQogewogICAgIFByb2ZpbGVyRW50cnkgKnNlbGY7Ci0gICAgc2VsZiA9IChQcm9maWxlckVudHJ5KikgbWFsbG9jKHNpemVvZihQcm9maWxlckVudHJ5KSk7CisgICAgc2VsZiA9IChQcm9maWxlckVudHJ5KikgUHlNZW1fTWFsbG9jKHNpemVvZihQcm9maWxlckVudHJ5KSk7CiAgICAgaWYgKHNlbGYgPT0gTlVMTCkgewogICAgICAgICBwT2JqLT5mbGFncyB8PSBQT0ZfTk9NRU1PUlk7CiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMjM1LDcgKzIzMSw3IEBACiAgICAgdXNlck9iaiA9IG5vcm1hbGl6ZVVzZXJPYmoodXNlck9iaik7CiAgICAgaWYgKHVzZXJPYmogPT0gTlVMTCkgewogICAgICAgICBQeUVycl9DbGVhcigpOwotICAgICAgICBmcmVlKHNlbGYpOworICAgICAgICBQeU1lbV9GcmVlKHNlbGYpOwogICAgICAgICBwT2JqLT5mbGFncyB8PSBQT0ZfTk9NRU1PUlk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KQEAgLTI2OCw3ICsyNjQsNyBAQAogbmV3U3ViRW50cnkoUHJvZmlsZXJPYmplY3QgKnBPYmosICBQcm9maWxlckVudHJ5ICpjYWxsZXIsIFByb2ZpbGVyRW50cnkqIGVudHJ5KQogewogICAgIFByb2ZpbGVyU3ViRW50cnkgKnNlbGY7Ci0gICAgc2VsZiA9IChQcm9maWxlclN1YkVudHJ5KikgbWFsbG9jKHNpemVvZihQcm9maWxlclN1YkVudHJ5KSk7CisgICAgc2VsZiA9IChQcm9maWxlclN1YkVudHJ5KikgUHlNZW1fTWFsbG9jKHNpemVvZihQcm9maWxlclN1YkVudHJ5KSk7CiAgICAgaWYgKHNlbGYgPT0gTlVMTCkgewogICAgICAgICBwT2JqLT5mbGFncyB8PSBQT0ZfTk9NRU1PUlk7CiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMjg2LDcgKzI4Miw3IEBACiBzdGF0aWMgaW50IGZyZWVTdWJFbnRyeShyb3RhdGluZ19ub2RlX3QgKmhlYWRlciwgdm9pZCAqYXJnKQogewogICAgIFByb2ZpbGVyU3ViRW50cnkgKnN1YmVudHJ5ID0gKFByb2ZpbGVyU3ViRW50cnkqKSBoZWFkZXI7Ci0gICAgZnJlZShzdWJlbnRyeSk7CisgICAgUHlNZW1fRnJlZShzdWJlbnRyeSk7CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTI5NSw3ICsyOTEsNyBAQAogICAgIFByb2ZpbGVyRW50cnkgKmVudHJ5ID0gKFByb2ZpbGVyRW50cnkqKSBoZWFkZXI7CiAgICAgUm90YXRpbmdUcmVlX0VudW0oZW50cnktPmNhbGxzLCBmcmVlU3ViRW50cnksIE5VTEwpOwogICAgIFB5X0RFQ1JFRihlbnRyeS0+dXNlck9iaik7Ci0gICAgZnJlZShlbnRyeSk7CisgICAgUHlNZW1fRnJlZShlbnRyeSk7CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTMwNSwxMyArMzAxLDEzIEBACiAgICAgcE9iai0+cHJvZmlsZXJFbnRyaWVzID0gRU1QVFlfUk9UQVRJTkdfVFJFRTsKICAgICAvKiByZWxlYXNlIHRoZSBtZW1vcnkgaG9sZCBieSB0aGUgUHJvZmlsZXJDb250ZXh0cyAqLwogICAgIGlmIChwT2JqLT5jdXJyZW50UHJvZmlsZXJDb250ZXh0KSB7Ci0gICAgICAgIGZyZWUocE9iai0+Y3VycmVudFByb2ZpbGVyQ29udGV4dCk7CisgICAgICAgIFB5TWVtX0ZyZWUocE9iai0+Y3VycmVudFByb2ZpbGVyQ29udGV4dCk7CiAgICAgICAgIHBPYmotPmN1cnJlbnRQcm9maWxlckNvbnRleHQgPSBOVUxMOwogICAgIH0KICAgICB3aGlsZSAocE9iai0+ZnJlZWxpc3RQcm9maWxlckNvbnRleHQpIHsKICAgICAgICAgUHJvZmlsZXJDb250ZXh0ICpjID0gcE9iai0+ZnJlZWxpc3RQcm9maWxlckNvbnRleHQ7CiAgICAgICAgIHBPYmotPmZyZWVsaXN0UHJvZmlsZXJDb250ZXh0ID0gYy0+cHJldmlvdXM7Ci0gICAgICAgIGZyZWUoYyk7CisgICAgICAgIFB5TWVtX0ZyZWUoYyk7CiAgICAgfQogICAgIHBPYmotPmZyZWVsaXN0UHJvZmlsZXJDb250ZXh0ID0gTlVMTDsKIH0KQEAgLTM5Nyw3ICszOTMsNyBAQAogICAgIGVsc2UgewogICAgICAgICAvKiBmcmVlIGxpc3QgZXhoYXVzdGVkLCBhbGxvY2F0ZSBhIG5ldyBvbmUgKi8KICAgICAgICAgcENvbnRleHQgPSAoUHJvZmlsZXJDb250ZXh0KikKLSAgICAgICAgICAgIG1hbGxvYyhzaXplb2YoUHJvZmlsZXJDb250ZXh0KSk7CisgICAgICAgICAgICBQeU1lbV9NYWxsb2Moc2l6ZW9mKFByb2ZpbGVyQ29udGV4dCkpOwogICAgICAgICBpZiAocENvbnRleHQgPT0gTlVMTCkgewogICAgICAgICAgICAgcE9iai0+ZmxhZ3MgfD0gUE9GX05PTUVNT1JZOwogICAgICAgICAgICAgZ290byByZXN0b3JlUHllcnI7CkBAIC03MDgsNyArNzA0LDcgQEAKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcE9iai0+Y3VycmVudFByb2ZpbGVyQ29udGV4dCA9IHBDb250ZXh0LT5wcmV2aW91czsKICAgICAgICAgaWYgKHBDb250ZXh0KQotICAgICAgICAgICAgZnJlZShwQ29udGV4dCk7CisgICAgICAgICAgICBQeU1lbV9GcmVlKHBDb250ZXh0KTsKICAgICB9CiAKIH0KQEAgLTg3NiwxMCArODcyLDEyIEBACiAgICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgIlByb2ZpbGVyIiwgKFB5T2JqZWN0ICopJlB5UHJvZmlsZXJfVHlwZSk7CiAKICAgICBpZiAoIWluaXRpYWxpemVkKSB7Ci0gICAgICAgIFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUoJlN0YXRzRW50cnlUeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcm9maWxlcl9lbnRyeV9kZXNjKTsKLSAgICAgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZSgmU3RhdHNTdWJFbnRyeVR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByb2ZpbGVyX3N1YmVudHJ5X2Rlc2MpOworICAgICAgICBpZiAoUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZTIoJlN0YXRzRW50cnlUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByb2ZpbGVyX2VudHJ5X2Rlc2MpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBpZiAoUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZTIoJlN0YXRzU3ViRW50cnlUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByb2ZpbGVyX3N1YmVudHJ5X2Rlc2MpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBQeV9JTkNSRUYoKFB5T2JqZWN0KikgJlN0YXRzRW50cnlUeXBlKTsKICAgICBQeV9JTkNSRUYoKFB5T2JqZWN0KikgJlN0YXRzU3ViRW50cnlUeXBlKTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2x6bWFtb2R1bGUuYyBiL01vZHVsZXMvX2x6bWFtb2R1bGUuYwppbmRleCA2NDM2MTYwLi5jNDM2NzZhIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19sem1hbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9fbHptYW1vZHVsZS5jCkBAIC01MSw2ICs1MSw3IEBACiAKIHR5cGVkZWYgc3RydWN0IHsKICAgICBQeU9iamVjdF9IRUFECisgICAgbHptYV9hbGxvY2F0b3IgYWxsb2M7CiAgICAgbHptYV9zdHJlYW0gbHpzOwogICAgIGludCBmbHVzaGVkOwogI2lmZGVmIFdJVEhfVEhSRUFECkBAIC02MCw2ICs2MSw3IEBACiAKIHR5cGVkZWYgc3RydWN0IHsKICAgICBQeU9iamVjdF9IRUFECisgICAgbHptYV9hbGxvY2F0b3IgYWxsb2M7CiAgICAgbHptYV9zdHJlYW0gbHpzOwogICAgIGludCBjaGVjazsKICAgICBjaGFyIGVvZjsKQEAgLTExNyw2ICsxMTksMjIgQEAKICAgICB9CiB9CiAKK3N0YXRpYyB2b2lkKgorUHlMem1hX01hbGxvYyh2b2lkICpvcGFxdWUsIHNpemVfdCBpdGVtcywgc2l6ZV90IHNpemUpCit7CisgICAgaWYgKGl0ZW1zID4gKHNpemVfdClQWV9TU0laRV9UX01BWCAvIHNpemUpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIC8qIFB5TWVtX01hbGxvYygpIGNhbm5vdCBiZSB1c2VkOgorICAgICAgIHRoZSBHSUwgaXMgbm90IGhlbGQgd2hlbiBsem1hX2NvZGUoKSBpcyBjYWxsZWQgKi8KKyAgICByZXR1cm4gUHlNZW1fUmF3TWFsbG9jKGl0ZW1zICogc2l6ZSk7Cit9CisKK3N0YXRpYyB2b2lkCitQeUx6bWFfRnJlZSh2b2lkICpvcGFxdWUsIHZvaWQgKnB0cikKK3sKKyAgICBQeU1lbV9SYXdGcmVlKHB0cik7Cit9CisKICNpZiBCVUZTSVogPCA4MTkyCiAjZGVmaW5lIElOSVRJQUxfQlVGRkVSX1NJWkUgODE5MgogI2Vsc2UKQEAgLTI4MCwzNiArMjk4LDM3IEBACiAgICAgcmV0dXJuIG9wdGlvbnM7CiB9CiAKLXN0YXRpYyB2b2lkICoKLXBhcnNlX2ZpbHRlcl9zcGVjKGx6bWFfZmlsdGVyICpmLCBQeU9iamVjdCAqc3BlYykKK3N0YXRpYyBpbnQKK2x6bWFfZmlsdGVyX2NvbnZlcnRlcihQeU9iamVjdCAqc3BlYywgdm9pZCAqcHRyKQogeworICAgIGx6bWFfZmlsdGVyICpmID0gKGx6bWFfZmlsdGVyICopcHRyOwogICAgIFB5T2JqZWN0ICppZF9vYmo7CiAKICAgICBpZiAoIVB5TWFwcGluZ19DaGVjayhzcGVjKSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgIkZpbHRlciBzcGVjaWZpZXIgbXVzdCBiZSBhIGRpY3Qgb3IgZGljdC1saWtlIG9iamVjdCIpOwotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIGlkX29iaiA9IFB5TWFwcGluZ19HZXRJdGVtU3RyaW5nKHNwZWMsICJpZCIpOwogICAgIGlmIChpZF9vYmogPT0gTlVMTCkgewogICAgICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19LZXlFcnJvcikpCiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRmlsdGVyIHNwZWNpZmllciBtdXN0IGhhdmUgYW4gXCJpZFwiIGVudHJ5Iik7Ci0gICAgICAgIHJldHVybiBOVUxMOworICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgZi0+aWQgPSBQeUxvbmdfQXNVbnNpZ25lZExvbmdMb25nKGlkX29iaik7CiAgICAgUHlfREVDUkVGKGlkX29iaik7CiAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCi0gICAgICAgIHJldHVybiBOVUxMOworICAgICAgICByZXR1cm4gMDsKIAogICAgIHN3aXRjaCAoZi0+aWQpIHsKICAgICAgICAgY2FzZSBMWk1BX0ZJTFRFUl9MWk1BMToKICAgICAgICAgY2FzZSBMWk1BX0ZJTFRFUl9MWk1BMjoKICAgICAgICAgICAgIGYtPm9wdGlvbnMgPSBwYXJzZV9maWx0ZXJfc3BlY19sem1hKHNwZWMpOwotICAgICAgICAgICAgcmV0dXJuIGYtPm9wdGlvbnM7CisgICAgICAgICAgICByZXR1cm4gZi0+b3B0aW9ucyAhPSBOVUxMOwogICAgICAgICBjYXNlIExaTUFfRklMVEVSX0RFTFRBOgogICAgICAgICAgICAgZi0+b3B0aW9ucyA9IHBhcnNlX2ZpbHRlcl9zcGVjX2RlbHRhKHNwZWMpOwotICAgICAgICAgICAgcmV0dXJuIGYtPm9wdGlvbnM7CisgICAgICAgICAgICByZXR1cm4gZi0+b3B0aW9ucyAhPSBOVUxMOwogICAgICAgICBjYXNlIExaTUFfRklMVEVSX1g4NjoKICAgICAgICAgY2FzZSBMWk1BX0ZJTFRFUl9QT1dFUlBDOgogICAgICAgICBjYXNlIExaTUFfRklMVEVSX0lBNjQ6CkBAIC0zMTcsMTAgKzMzNiwxMCBAQAogICAgICAgICBjYXNlIExaTUFfRklMVEVSX0FSTVRIVU1COgogICAgICAgICBjYXNlIExaTUFfRklMVEVSX1NQQVJDOgogICAgICAgICAgICAgZi0+b3B0aW9ucyA9IHBhcnNlX2ZpbHRlcl9zcGVjX2JjaihzcGVjKTsKLSAgICAgICAgICAgIHJldHVybiBmLT5vcHRpb25zOworICAgICAgICAgICAgcmV0dXJuIGYtPm9wdGlvbnMgIT0gTlVMTDsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLCAiSW52YWxpZCBmaWx0ZXIgSUQ6ICVsbHUiLCBmLT5pZCk7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIHJldHVybiAwOwogICAgIH0KIH0KIApAQCAtMzUxLDcgKzM3MCw3IEBACiAgICAgZm9yIChpID0gMDsgaSA8IG51bV9maWx0ZXJzOyBpKyspIHsKICAgICAgICAgaW50IG9rID0gMTsKICAgICAgICAgUHlPYmplY3QgKnNwZWMgPSBQeVNlcXVlbmNlX0dldEl0ZW0oZmlsdGVyc3BlY3MsIGkpOwotICAgICAgICBpZiAoc3BlYyA9PSBOVUxMIHx8IHBhcnNlX2ZpbHRlcl9zcGVjKCZmaWx0ZXJzW2ldLCBzcGVjKSA9PSBOVUxMKQorICAgICAgICBpZiAoc3BlYyA9PSBOVUxMIHx8ICFsem1hX2ZpbHRlcl9jb252ZXJ0ZXIoc3BlYywgJmZpbHRlcnNbaV0pKQogICAgICAgICAgICAgb2sgPSAwOwogICAgICAgICBQeV9YREVDUkVGKHNwZWMpOwogICAgICAgICBpZiAoIW9rKSB7CkBAIC00NTAsNiArNDY5LDM2IEBACiB9CiAKIAorLypbY2xpbmljIGlucHV0XQorb3V0cHV0IHByZXNldCBmaWxlCittb2R1bGUgX2x6bWEKK2NsYXNzIF9sem1hLkxaTUFDb21wcmVzc29yICJDb21wcmVzc29yICoiICImQ29tcHJlc3Nvcl90eXBlIgorY2xhc3MgX2x6bWEuTFpNQURlY29tcHJlc3NvciAiRGVjb21wcmVzc29yICoiICImRGVjb21wcmVzc29yX3R5cGUiCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZGEzOWEzZWU1ZTZiNGIwZCBpbnB1dD1mMTdhZmM3ODY1MjVkNmMyXSovCisKKyNpbmNsdWRlICJjbGluaWMvX2x6bWFtb2R1bGUuYy5oIgorCisvKltweXRob24gaW5wdXRdCisKK2NsYXNzIGx6bWFfdmxpX2NvbnZlcnRlcihDQ29udmVydGVyKToKKyAgICB0eXBlID0gJ2x6bWFfdmxpJworICAgIGNvbnZlcnRlciA9ICdsem1hX3ZsaV9jb252ZXJ0ZXInCisKK2NsYXNzIGx6bWFfZmlsdGVyX2NvbnZlcnRlcihDQ29udmVydGVyKToKKyAgICB0eXBlID0gJ2x6bWFfZmlsdGVyJworICAgIGNvbnZlcnRlciA9ICdsem1hX2ZpbHRlcl9jb252ZXJ0ZXInCisgICAgY19kZWZhdWx0ID0gY19pZ25vcmVkX2RlZmF1bHQgPSAie0xaTUFfVkxJX1VOS05PV04sIE5VTEx9IgorCisgICAgZGVmIGNsZWFudXAoc2VsZik6CisgICAgICAgIG5hbWUgPSBlbnN1cmVfbGVnYWxfY19pZGVudGlmaWVyKHNlbGYubmFtZSkKKyAgICAgICAgcmV0dXJuICgnaWYgKCUobmFtZSlzLmlkICE9IExaTUFfVkxJX1VOS05PV04pXG4nCisgICAgICAgICAgICAgICAgJyAgIFB5TWVtX0ZyZWUoJShuYW1lKXMub3B0aW9ucyk7XG4nKSAlIHsnbmFtZSc6IG5hbWV9CisKK1tweXRob24gc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKy8qW3B5dGhvbiBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kYTM5YTNlZTVlNmI0YjBkIGlucHV0PTc0ZmU3NjMxY2UzNzdhOTRdKi8KKworCiAvKiBMWk1BQ29tcHJlc3NvciBjbGFzcy4gKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTQ5NCw0NCArNTQzLDUxIEBACiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKLVB5RG9jX1NUUlZBUihDb21wcmVzc29yX2NvbXByZXNzX2RvYywKLSJjb21wcmVzcyhkYXRhKSAtPiBieXRlc1xuIgotIlxuIgotIlByb3ZpZGUgZGF0YSB0byB0aGUgY29tcHJlc3NvciBvYmplY3QuIFJldHVybnMgYSBjaHVuayBvZlxuIgotImNvbXByZXNzZWQgZGF0YSBpZiBwb3NzaWJsZSwgb3IgYlwiXCIgb3RoZXJ3aXNlLlxuIgotIlxuIgotIldoZW4geW91IGhhdmUgZmluaXNoZWQgcHJvdmlkaW5nIGRhdGEgdG8gdGhlIGNvbXByZXNzb3IsIGNhbGwgdGhlXG4iCi0iZmx1c2goKSBtZXRob2QgdG8gZmluaXNoIHRoZSBjb252ZXJzaW9uIHByb2Nlc3MuXG4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK19sem1hLkxaTUFDb21wcmVzc29yLmNvbXByZXNzCisKKyAgICBzZWxmOiBzZWxmKHR5cGU9IkNvbXByZXNzb3IgKiIpCisgICAgZGF0YTogUHlfYnVmZmVyCisgICAgLworCitQcm92aWRlIGRhdGEgdG8gdGhlIGNvbXByZXNzb3Igb2JqZWN0LgorCitSZXR1cm5zIGEgY2h1bmsgb2YgY29tcHJlc3NlZCBkYXRhIGlmIHBvc3NpYmxlLCBvciBiJycgb3RoZXJ3aXNlLgorCitXaGVuIHlvdSBoYXZlIGZpbmlzaGVkIHByb3ZpZGluZyBkYXRhIHRvIHRoZSBjb21wcmVzc29yLCBjYWxsIHRoZQorZmx1c2goKSBtZXRob2QgdG8gZmluaXNoIHRoZSBjb21wcmVzc2lvbiBwcm9jZXNzLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotQ29tcHJlc3Nvcl9jb21wcmVzcyhDb21wcmVzc29yICpzZWxmLCBQeU9iamVjdCAqYXJncykKK19sem1hX0xaTUFDb21wcmVzc29yX2NvbXByZXNzX2ltcGwoQ29tcHJlc3NvciAqc2VsZiwgUHlfYnVmZmVyICpkYXRhKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTMxZjYxNTEzNjk2M2UwMGYgaW5wdXQ9OGI2MGNiMTNlMGNlNjQyMF0qLwogewotICAgIFB5X2J1ZmZlciBidWZmZXI7CiAgICAgUHlPYmplY3QgKnJlc3VsdCA9IE5VTEw7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqOmNvbXByZXNzIiwgJmJ1ZmZlcikpCi0gICAgICAgIHJldHVybiBOVUxMOwotCiAgICAgQUNRVUlSRV9MT0NLKHNlbGYpOwogICAgIGlmIChzZWxmLT5mbHVzaGVkKQogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIkNvbXByZXNzb3IgaGFzIGJlZW4gZmx1c2hlZCIpOwogICAgIGVsc2UKLSAgICAgICAgcmVzdWx0ID0gY29tcHJlc3Moc2VsZiwgYnVmZmVyLmJ1ZiwgYnVmZmVyLmxlbiwgTFpNQV9SVU4pOworICAgICAgICByZXN1bHQgPSBjb21wcmVzcyhzZWxmLCBkYXRhLT5idWYsIGRhdGEtPmxlbiwgTFpNQV9SVU4pOwogICAgIFJFTEVBU0VfTE9DSyhzZWxmKTsKLSAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZidWZmZXIpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLVB5RG9jX1NUUlZBUihDb21wcmVzc29yX2ZsdXNoX2RvYywKLSJmbHVzaCgpIC0+IGJ5dGVzXG4iCi0iXG4iCi0iRmluaXNoIHRoZSBjb21wcmVzc2lvbiBwcm9jZXNzLiBSZXR1cm5zIHRoZSBjb21wcmVzc2VkIGRhdGEgbGVmdFxuIgotImluIGludGVybmFsIGJ1ZmZlcnMuXG4iCi0iXG4iCi0iVGhlIGNvbXByZXNzb3Igb2JqZWN0IGNhbm5vdCBiZSB1c2VkIGFmdGVyIHRoaXMgbWV0aG9kIGlzIGNhbGxlZC5cbiIpOworLypbY2xpbmljIGlucHV0XQorX2x6bWEuTFpNQUNvbXByZXNzb3IuZmx1c2gKKworICAgIHNlbGY6IHNlbGYodHlwZT0iQ29tcHJlc3NvciAqIikKKworRmluaXNoIHRoZSBjb21wcmVzc2lvbiBwcm9jZXNzLgorCitSZXR1cm5zIHRoZSBjb21wcmVzc2VkIGRhdGEgbGVmdCBpbiBpbnRlcm5hbCBidWZmZXJzLgorCitUaGUgY29tcHJlc3NvciBvYmplY3QgbWF5IG5vdCBiZSB1c2VkIGFmdGVyIHRoaXMgbWV0aG9kIGlzIGNhbGxlZC4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLUNvbXByZXNzb3JfZmx1c2goQ29tcHJlc3NvciAqc2VsZiwgUHlPYmplY3QgKm5vYXJncykKK19sem1hX0xaTUFDb21wcmVzc29yX2ZsdXNoX2ltcGwoQ29tcHJlc3NvciAqc2VsZikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1mZWMyMWYzZTIyNTA0ZjUwIGlucHV0PTMwNjBmYjI2ZjliNDA0MmNdKi8KIHsKICAgICBQeU9iamVjdCAqcmVzdWx0ID0gTlVMTDsKIApAQCAtNjMyLDYgKzY4OCwzOSBAQAogICAgICAgICByZXR1cm4gMDsKIH0KIAorLypbLWNsaW5pYyBpbnB1dF0KK19sem1hLkxaTUFDb21wcmVzc29yLl9faW5pdF9fCisKKyAgICBzZWxmOiBzZWxmKHR5cGU9IkNvbXByZXNzb3IgKiIpCisgICAgZm9ybWF0OiBpbnQoY19kZWZhdWx0PSJGT1JNQVRfWFoiKSA9IEZPUk1BVF9YWgorICAgICAgICBUaGUgY29udGFpbmVyIGZvcm1hdCB0byB1c2UgZm9yIHRoZSBvdXRwdXQuICBUaGlzIGNhbgorICAgICAgICBiZSBGT1JNQVRfWFogKGRlZmF1bHQpLCBGT1JNQVRfQUxPTkUsIG9yIEZPUk1BVF9SQVcuCisKKyAgICBjaGVjazogaW50KGNfZGVmYXVsdD0iLTEiKSA9IHVuc3BlY2lmaWVkCisgICAgICAgIFRoZSBpbnRlZ3JpdHkgY2hlY2sgdG8gdXNlLiAgRm9yIEZPUk1BVF9YWiwgdGhlIGRlZmF1bHQKKyAgICAgICAgaXMgQ0hFQ0tfQ1JDNjQuICBGT1JNQVRfQUxPTkUgYW5kIEZPUk1BVF9SQVcgZG8gbm90IHN1cG9ydCBpbnRlZ3JpdHkKKyAgICAgICAgY2hlY2tzOyBmb3IgdGhlc2UgZm9ybWF0cywgY2hlY2sgbXVzdCBiZSBvbWl0dGVkLCBvciBiZSBDSEVDS19OT05FLgorCisgICAgcHJlc2V0OiBvYmplY3QgPSBOb25lCisgICAgICAgIElmIHByb3ZpZGVkIHNob3VsZCBiZSBhbiBpbnRlZ2VyIGluIHRoZSByYW5nZSAwLTksIG9wdGlvbmFsbHkKKyAgICAgICAgT1ItZWQgd2l0aCB0aGUgY29uc3RhbnQgUFJFU0VUX0VYVFJFTUUuCisKKyAgICBmaWx0ZXJzOiBvYmplY3QgPSBOb25lCisgICAgICAgIElmIHByb3ZpZGVkIHNob3VsZCBiZSBhIHNlcXVlbmNlIG9mIGRpY3RzLiAgRWFjaCBkaWN0IHNob3VsZAorICAgICAgICBoYXZlIGFuIGVudHJ5IGZvciAiaWQiIGluZGljYXRpbmcgdGhlIElEIG9mIHRoZSBmaWx0ZXIsIHBsdXMKKyAgICAgICAgYWRkaXRpb25hbCBlbnRyaWVzIGZvciBvcHRpb25zIHRvIHRoZSBmaWx0ZXIuCisKK0NyZWF0ZSBhIGNvbXByZXNzb3Igb2JqZWN0IGZvciBjb21wcmVzc2luZyBkYXRhIGluY3JlbWVudGFsbHkuCisKK1RoZSBzZXR0aW5ncyB1c2VkIGJ5IHRoZSBjb21wcmVzc29yIGNhbiBiZSBzcGVjaWZpZWQgZWl0aGVyIGFzIGEKK3ByZXNldCBjb21wcmVzc2lvbiBsZXZlbCAod2l0aCB0aGUgJ3ByZXNldCcgYXJndW1lbnQpLCBvciBpbiBkZXRhaWwKK2FzIGEgY3VzdG9tIGZpbHRlciBjaGFpbiAod2l0aCB0aGUgJ2ZpbHRlcnMnIGFyZ3VtZW50KS4gIEZvciBGT1JNQVRfWFoKK2FuZCBGT1JNQVRfQUxPTkUsIHRoZSBkZWZhdWx0IGlzIHRvIHVzZSB0aGUgUFJFU0VUX0RFRkFVTFQgcHJlc2V0CitsZXZlbC4gIEZvciBGT1JNQVRfUkFXLCB0aGUgY2FsbGVyIG11c3QgYWx3YXlzIHNwZWNpZnkgYSBmaWx0ZXIgY2hhaW47Cit0aGUgcmF3IGNvbXByZXNzb3IgZG9lcyBub3Qgc3VwcG9ydCBwcmVzZXQgY29tcHJlc3Npb24gbGV2ZWxzLgorCitGb3Igb25lLXNob3QgY29tcHJlc3Npb24sIHVzZSB0aGUgY29tcHJlc3MoKSBmdW5jdGlvbiBpbnN0ZWFkLgorWy1jbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIHN0YXRpYyBpbnQKIENvbXByZXNzb3JfaW5pdChDb21wcmVzc29yICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKIHsKQEAgLTY2NCw2ICs3NTMsMTEgQEAKICAgICAgICAgaWYgKCF1aW50MzJfY29udmVydGVyKHByZXNldF9vYmosICZwcmVzZXQpKQogICAgICAgICAgICAgcmV0dXJuIC0xOwogCisgICAgc2VsZi0+YWxsb2Mub3BhcXVlID0gTlVMTDsKKyAgICBzZWxmLT5hbGxvYy5hbGxvYyA9IFB5THptYV9NYWxsb2M7CisgICAgc2VsZi0+YWxsb2MuZnJlZSA9IFB5THptYV9GcmVlOworICAgIHNlbGYtPmx6cy5hbGxvY2F0b3IgPSAmc2VsZi0+YWxsb2M7CisKICNpZmRlZiBXSVRIX1RIUkVBRAogICAgIHNlbGYtPmxvY2sgPSBQeVRocmVhZF9hbGxvY2F0ZV9sb2NrKCk7CiAgICAgaWYgKHNlbGYtPmxvY2sgPT0gTlVMTCkgewpAQCAtNzE2LDEwICs4MTAsOCBAQAogfQogCiBzdGF0aWMgUHlNZXRob2REZWYgQ29tcHJlc3Nvcl9tZXRob2RzW10gPSB7Ci0gICAgeyJjb21wcmVzcyIsIChQeUNGdW5jdGlvbilDb21wcmVzc29yX2NvbXByZXNzLCBNRVRIX1ZBUkFSR1MsCi0gICAgIENvbXByZXNzb3JfY29tcHJlc3NfZG9jfSwKLSAgICB7ImZsdXNoIiwgKFB5Q0Z1bmN0aW9uKUNvbXByZXNzb3JfZmx1c2gsIE1FVEhfTk9BUkdTLAotICAgICBDb21wcmVzc29yX2ZsdXNoX2RvY30sCisgICAgX0xaTUFfTFpNQUNPTVBSRVNTT1JfQ09NUFJFU1NfTUVUSE9EREVGCisgICAgX0xaTUFfTFpNQUNPTVBSRVNTT1JfRkxVU0hfTUVUSE9EREVGCiAgICAgeyJfX2dldHN0YXRlX18iLCAoUHlDRnVuY3Rpb24pQ29tcHJlc3Nvcl9nZXRzdGF0ZSwgTUVUSF9OT0FSR1N9LAogICAgIHtOVUxMfQogfTsKQEAgLTg0OSwzMiArOTQxLDM0IEBACiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKLVB5RG9jX1NUUlZBUihEZWNvbXByZXNzb3JfZGVjb21wcmVzc19kb2MsCi0iZGVjb21wcmVzcyhkYXRhKSAtPiBieXRlc1xuIgotIlxuIgotIlByb3ZpZGUgZGF0YSB0byB0aGUgZGVjb21wcmVzc29yIG9iamVjdC4gUmV0dXJucyBhIGNodW5rIG9mXG4iCi0iZGVjb21wcmVzc2VkIGRhdGEgaWYgcG9zc2libGUsIG9yIGJcIlwiIG90aGVyd2lzZS5cbiIKLSJcbiIKLSJBdHRlbXB0aW5nIHRvIGRlY29tcHJlc3MgZGF0YSBhZnRlciB0aGUgZW5kIG9mIHRoZSBzdHJlYW0gaXNcbiIKLSJyZWFjaGVkIHJhaXNlcyBhbiBFT0ZFcnJvci4gQW55IGRhdGEgZm91bmQgYWZ0ZXIgdGhlIGVuZCBvZiB0aGVcbiIKLSJzdHJlYW0gaXMgaWdub3JlZCwgYW5kIHNhdmVkIGluIHRoZSB1bnVzZWRfZGF0YSBhdHRyaWJ1dGUuXG4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK19sem1hLkxaTUFEZWNvbXByZXNzb3IuZGVjb21wcmVzcworCisgICAgc2VsZjogc2VsZih0eXBlPSJEZWNvbXByZXNzb3IgKiIpCisgICAgZGF0YTogUHlfYnVmZmVyCisgICAgLworCitQcm92aWRlIGRhdGEgdG8gdGhlIGRlY29tcHJlc3NvciBvYmplY3QuCisKK1JldHVybnMgYSBjaHVuayBvZiBkZWNvbXByZXNzZWQgZGF0YSBpZiBwb3NzaWJsZSwgb3IgYicnIG90aGVyd2lzZS4KKworQXR0ZW1wdGluZyB0byBkZWNvbXByZXNzIGRhdGEgYWZ0ZXIgdGhlIGVuZCBvZiBzdHJlYW0gaXMgcmVhY2hlZAorcmFpc2VzIGFuIEVPRkVycm9yLiAgQW55IGRhdGEgZm91bmQgYWZ0ZXIgdGhlIGVuZCBvZiB0aGUgc3RyZWFtCitpcyBpZ25vcmVkIGFuZCBzYXZlZCBpbiB0aGUgdW51c2VkX2RhdGEgYXR0cmlidXRlLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotRGVjb21wcmVzc29yX2RlY29tcHJlc3MoRGVjb21wcmVzc29yICpzZWxmLCBQeU9iamVjdCAqYXJncykKK19sem1hX0xaTUFEZWNvbXByZXNzb3JfZGVjb21wcmVzc19pbXBsKERlY29tcHJlc3NvciAqc2VsZiwgUHlfYnVmZmVyICpkYXRhKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWQ4NmU3OGRhN2ZmMGZmMjEgaW5wdXQ9NTBjNDc2OGI4MjFiZjBlZl0qLwogewotICAgIFB5X2J1ZmZlciBidWZmZXI7CiAgICAgUHlPYmplY3QgKnJlc3VsdCA9IE5VTEw7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqOmRlY29tcHJlc3MiLCAmYnVmZmVyKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KICAgICBBQ1FVSVJFX0xPQ0soc2VsZik7CiAgICAgaWYgKHNlbGYtPmVvZikKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0VPRkVycm9yLCAiQWxyZWFkeSBhdCBlbmQgb2Ygc3RyZWFtIik7CiAgICAgZWxzZQotICAgICAgICByZXN1bHQgPSBkZWNvbXByZXNzKHNlbGYsIGJ1ZmZlci5idWYsIGJ1ZmZlci5sZW4pOworICAgICAgICByZXN1bHQgPSBkZWNvbXByZXNzKHNlbGYsIGRhdGEtPmJ1ZiwgZGF0YS0+bGVuKTsKICAgICBSRUxFQVNFX0xPQ0soc2VsZik7Ci0gICAgUHlCdWZmZXJfUmVsZWFzZSgmYnVmZmVyKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC05MDIsNDMgKzk5Niw2NiBAQAogICAgICAgICByZXR1cm4gMDsKIH0KIAorLypbY2xpbmljIGlucHV0XQorX2x6bWEuTFpNQURlY29tcHJlc3Nvci5fX2luaXRfXworCisgICAgc2VsZjogc2VsZih0eXBlPSJEZWNvbXByZXNzb3IgKiIpCisgICAgZm9ybWF0OiBpbnQoY19kZWZhdWx0PSJGT1JNQVRfQVVUTyIpID0gRk9STUFUX0FVVE8KKyAgICAgICAgU3BlY2lmaWVzIHRoZSBjb250YWluZXIgZm9ybWF0IG9mIHRoZSBpbnB1dCBzdHJlYW0uICBJZiB0aGlzIGlzCisgICAgICAgIEZPUk1BVF9BVVRPICh0aGUgZGVmYXVsdCksIHRoZSBkZWNvbXByZXNzb3Igd2lsbCBhdXRvbWF0aWNhbGx5IGRldGVjdAorICAgICAgICB3aGV0aGVyIHRoZSBpbnB1dCBpcyBGT1JNQVRfWFogb3IgRk9STUFUX0FMT05FLiAgU3RyZWFtcyBjcmVhdGVkIHdpdGgKKyAgICAgICAgRk9STUFUX1JBVyBjYW5ub3QgYmUgYXV0b2RldGVjdGVkLgorCisgICAgbWVtbGltaXQ6IG9iamVjdCA9IE5vbmUKKyAgICAgICAgTGltaXQgdGhlIGFtb3VudCBvZiBtZW1vcnkgdXNlZCBieSB0aGUgZGVjb21wcmVzc29yLiAgVGhpcyB3aWxsIGNhdXNlCisgICAgICAgIGRlY29tcHJlc3Npb24gdG8gZmFpbCBpZiB0aGUgaW5wdXQgY2Fubm90IGJlIGRlY29tcHJlc3NlZCB3aXRoaW4gdGhlCisgICAgICAgIGdpdmVuIGxpbWl0LgorCisgICAgZmlsdGVyczogb2JqZWN0ID0gTm9uZQorICAgICAgICBBIGN1c3RvbSBmaWx0ZXIgY2hhaW4uICBUaGlzIGFyZ3VtZW50IGlzIHJlcXVpcmVkIGZvciBGT1JNQVRfUkFXLCBhbmQKKyAgICAgICAgbm90IGFjY2VwdGVkIHdpdGggYW55IG90aGVyIGZvcm1hdC4gIFdoZW4gcHJvdmlkZWQsIHRoaXMgc2hvdWxkIGJlIGEKKyAgICAgICAgc2VxdWVuY2Ugb2YgZGljdHMsIGVhY2ggaW5kaWNhdGluZyB0aGUgSUQgYW5kIG9wdGlvbnMgZm9yIGEgc2luZ2xlCisgICAgICAgIGZpbHRlci4KKworQ3JlYXRlIGEgZGVjb21wcmVzc29yIG9iamVjdCBmb3IgZGVjb21wcmVzc2luZyBkYXRhIGluY3JlbWVudGFsbHkuCisKK0ZvciBvbmUtc2hvdCBkZWNvbXByZXNzaW9uLCB1c2UgdGhlIGRlY29tcHJlc3MoKSBmdW5jdGlvbiBpbnN0ZWFkLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgaW50Ci1EZWNvbXByZXNzb3JfaW5pdChEZWNvbXByZXNzb3IgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQorX2x6bWFfTFpNQURlY29tcHJlc3Nvcl9fX2luaXRfX19pbXBsKERlY29tcHJlc3NvciAqc2VsZiwgaW50IGZvcm1hdCwgUHlPYmplY3QgKm1lbWxpbWl0LCBQeU9iamVjdCAqZmlsdGVycykKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD05YjExOWY2ZjJjYzJkN2E4IGlucHV0PTQ1OGNhNjEzMmVmMjk4MDFdKi8KIHsKLSAgICBzdGF0aWMgY2hhciAqYXJnX25hbWVzW10gPSB7ImZvcm1hdCIsICJtZW1saW1pdCIsICJmaWx0ZXJzIiwgTlVMTH07CiAgICAgY29uc3QgdWludDMyX3QgZGVjb2Rlcl9mbGFncyA9IExaTUFfVEVMTF9BTllfQ0hFQ0sgfCBMWk1BX1RFTExfTk9fQ0hFQ0s7Ci0gICAgaW50IGZvcm1hdCA9IEZPUk1BVF9BVVRPOwotICAgIHVpbnQ2NF90IG1lbWxpbWl0ID0gVUlOVDY0X01BWDsKLSAgICBQeU9iamVjdCAqbWVtbGltaXRfb2JqID0gUHlfTm9uZTsKLSAgICBQeU9iamVjdCAqZmlsdGVyc3BlY3MgPSBQeV9Ob25lOworICAgIHVpbnQ2NF90IG1lbWxpbWl0XyA9IFVJTlQ2NF9NQVg7CiAgICAgbHptYV9yZXQgbHpyZXQ7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInxpT086TFpNQURlY29tcHJlc3NvciIsIGFyZ19uYW1lcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZm9ybWF0LCAmbWVtbGltaXRfb2JqLCAmZmlsdGVyc3BlY3MpKQotICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICBpZiAobWVtbGltaXRfb2JqICE9IFB5X05vbmUpIHsKKyAgICBpZiAobWVtbGltaXQgIT0gUHlfTm9uZSkgewogICAgICAgICBpZiAoZm9ybWF0ID09IEZPUk1BVF9SQVcpIHsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDYW5ub3Qgc3BlY2lmeSBtZW1vcnkgbGltaXQgd2l0aCBGT1JNQVRfUkFXIik7CiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KLSAgICAgICAgbWVtbGltaXQgPSBQeUxvbmdfQXNVbnNpZ25lZExvbmdMb25nKG1lbWxpbWl0X29iaik7CisgICAgICAgIG1lbWxpbWl0XyA9IFB5TG9uZ19Bc1Vuc2lnbmVkTG9uZ0xvbmcobWVtbGltaXQpOwogICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKLSAgICBpZiAoZm9ybWF0ID09IEZPUk1BVF9SQVcgJiYgZmlsdGVyc3BlY3MgPT0gUHlfTm9uZSkgeworICAgIGlmIChmb3JtYXQgPT0gRk9STUFUX1JBVyAmJiBmaWx0ZXJzID09IFB5X05vbmUpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiTXVzdCBzcGVjaWZ5IGZpbHRlcnMgZm9yIEZPUk1BVF9SQVciKTsKICAgICAgICAgcmV0dXJuIC0xOwotICAgIH0gZWxzZSBpZiAoZm9ybWF0ICE9IEZPUk1BVF9SQVcgJiYgZmlsdGVyc3BlY3MgIT0gUHlfTm9uZSkgeworICAgIH0gZWxzZSBpZiAoZm9ybWF0ICE9IEZPUk1BVF9SQVcgJiYgZmlsdGVycyAhPSBQeV9Ob25lKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgIkNhbm5vdCBzcGVjaWZ5IGZpbHRlcnMgZXhjZXB0IHdpdGggRk9STUFUX1JBVyIpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCisgICAgc2VsZi0+YWxsb2Mub3BhcXVlID0gTlVMTDsKKyAgICBzZWxmLT5hbGxvYy5hbGxvYyA9IFB5THptYV9NYWxsb2M7CisgICAgc2VsZi0+YWxsb2MuZnJlZSA9IFB5THptYV9GcmVlOworICAgIHNlbGYtPmx6cy5hbGxvY2F0b3IgPSAmc2VsZi0+YWxsb2M7CisKICNpZmRlZiBXSVRIX1RIUkVBRAogICAgIHNlbGYtPmxvY2sgPSBQeVRocmVhZF9hbGxvY2F0ZV9sb2NrKCk7CiAgICAgaWYgKHNlbGYtPmxvY2sgPT0gTlVMTCkgewpAQCAtOTU0LDI3ICsxMDcxLDI3IEBACiAKICAgICBzd2l0Y2ggKGZvcm1hdCkgewogICAgICAgICBjYXNlIEZPUk1BVF9BVVRPOgotICAgICAgICAgICAgbHpyZXQgPSBsem1hX2F1dG9fZGVjb2Rlcigmc2VsZi0+bHpzLCBtZW1saW1pdCwgZGVjb2Rlcl9mbGFncyk7CisgICAgICAgICAgICBsenJldCA9IGx6bWFfYXV0b19kZWNvZGVyKCZzZWxmLT5senMsIG1lbWxpbWl0XywgZGVjb2Rlcl9mbGFncyk7CiAgICAgICAgICAgICBpZiAoY2F0Y2hfbHptYV9lcnJvcihsenJldCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICByZXR1cm4gMDsKIAogICAgICAgICBjYXNlIEZPUk1BVF9YWjoKLSAgICAgICAgICAgIGx6cmV0ID0gbHptYV9zdHJlYW1fZGVjb2Rlcigmc2VsZi0+bHpzLCBtZW1saW1pdCwgZGVjb2Rlcl9mbGFncyk7CisgICAgICAgICAgICBsenJldCA9IGx6bWFfc3RyZWFtX2RlY29kZXIoJnNlbGYtPmx6cywgbWVtbGltaXRfLCBkZWNvZGVyX2ZsYWdzKTsKICAgICAgICAgICAgIGlmIChjYXRjaF9sem1hX2Vycm9yKGx6cmV0KSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIHJldHVybiAwOwogCiAgICAgICAgIGNhc2UgRk9STUFUX0FMT05FOgogICAgICAgICAgICAgc2VsZi0+Y2hlY2sgPSBMWk1BX0NIRUNLX05PTkU7Ci0gICAgICAgICAgICBsenJldCA9IGx6bWFfYWxvbmVfZGVjb2Rlcigmc2VsZi0+bHpzLCBtZW1saW1pdCk7CisgICAgICAgICAgICBsenJldCA9IGx6bWFfYWxvbmVfZGVjb2Rlcigmc2VsZi0+bHpzLCBtZW1saW1pdF8pOwogICAgICAgICAgICAgaWYgKGNhdGNoX2x6bWFfZXJyb3IobHpyZXQpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgcmV0dXJuIDA7CiAKICAgICAgICAgY2FzZSBGT1JNQVRfUkFXOgogICAgICAgICAgICAgc2VsZi0+Y2hlY2sgPSBMWk1BX0NIRUNLX05PTkU7Ci0gICAgICAgICAgICBpZiAoRGVjb21wcmVzc29yX2luaXRfcmF3KCZzZWxmLT5senMsIGZpbHRlcnNwZWNzKSA9PSAtMSkKKyAgICAgICAgICAgIGlmIChEZWNvbXByZXNzb3JfaW5pdF9yYXcoJnNlbGYtPmx6cywgZmlsdGVycykgPT0gLTEpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICByZXR1cm4gMDsKIApAQCAtMTAwNiw4ICsxMTIzLDcgQEAKIH0KIAogc3RhdGljIFB5TWV0aG9kRGVmIERlY29tcHJlc3Nvcl9tZXRob2RzW10gPSB7Ci0gICAgeyJkZWNvbXByZXNzIiwgKFB5Q0Z1bmN0aW9uKURlY29tcHJlc3Nvcl9kZWNvbXByZXNzLCBNRVRIX1ZBUkFSR1MsCi0gICAgIERlY29tcHJlc3Nvcl9kZWNvbXByZXNzX2RvY30sCisgICAgX0xaTUFfTFpNQURFQ09NUFJFU1NPUl9ERUNPTVBSRVNTX01FVEhPRERFRgogICAgIHsiX19nZXRzdGF0ZV9fIiwgKFB5Q0Z1bmN0aW9uKURlY29tcHJlc3Nvcl9nZXRzdGF0ZSwgTUVUSF9OT0FSR1N9LAogICAgIHtOVUxMfQogfTsKQEAgLTEwMzEsMjcgKzExNDcsNiBAQAogICAgIHtOVUxMfQogfTsKIAotUHlEb2NfU1RSVkFSKERlY29tcHJlc3Nvcl9kb2MsCi0iTFpNQURlY29tcHJlc3Nvcihmb3JtYXQ9Rk9STUFUX0FVVE8sIG1lbWxpbWl0PU5vbmUsIGZpbHRlcnM9Tm9uZSlcbiIKLSJcbiIKLSJDcmVhdGUgYSBkZWNvbXByZXNzb3Igb2JqZWN0IGZvciBkZWNvbXByZXNzaW5nIGRhdGEgaW5jcmVtZW50YWxseS5cbiIKLSJcbiIKLSJmb3JtYXQgc3BlY2lmaWVzIHRoZSBjb250YWluZXIgZm9ybWF0IG9mIHRoZSBpbnB1dCBzdHJlYW0uIElmIHRoaXMgaXNcbiIKLSJGT1JNQVRfQVVUTyAodGhlIGRlZmF1bHQpLCB0aGUgZGVjb21wcmVzc29yIHdpbGwgYXV0b21hdGljYWxseSBkZXRlY3RcbiIKLSJ3aGV0aGVyIHRoZSBpbnB1dCBpcyBGT1JNQVRfWFogb3IgRk9STUFUX0FMT05FLiBTdHJlYW1zIGNyZWF0ZWQgd2l0aFxuIgotIkZPUk1BVF9SQVcgY2Fubm90IGJlIGF1dG9kZXRlY3RlZC5cbiIKLSJcbiIKLSJtZW1saW1pdCBjYW4gYmUgc3BlY2lmaWVkIHRvIGxpbWl0IHRoZSBhbW91bnQgb2YgbWVtb3J5IHVzZWQgYnkgdGhlXG4iCi0iZGVjb21wcmVzc29yLiBUaGlzIHdpbGwgY2F1c2UgZGVjb21wcmVzc2lvbiB0byBmYWlsIGlmIHRoZSBpbnB1dFxuIgotImNhbm5vdCBiZSBkZWNvbXByZXNzZWQgd2l0aGluIHRoZSBnaXZlbiBsaW1pdC5cbiIKLSJcbiIKLSJmaWx0ZXJzIHNwZWNpZmllcyBhIGN1c3RvbSBmaWx0ZXIgY2hhaW4uIFRoaXMgYXJndW1lbnQgaXMgcmVxdWlyZWQgZm9yXG4iCi0iRk9STUFUX1JBVywgYW5kIG5vdCBhY2NlcHRlZCB3aXRoIGFueSBvdGhlciBmb3JtYXQuIFdoZW4gcHJvdmlkZWQsXG4iCi0idGhpcyBzaG91bGQgYmUgYSBzZXF1ZW5jZSBvZiBkaWN0cywgZWFjaCBpbmRpY2F0aW5nIHRoZSBJRCBhbmQgb3B0aW9uc1xuIgotImZvciBhIHNpbmdsZSBmaWx0ZXIuXG4iCi0iXG4iCi0iRm9yIG9uZS1zaG90IGRlY29tcHJlc3Npb24sIHVzZSB0aGUgZGVjb21wcmVzcygpIGZ1bmN0aW9uIGluc3RlYWQuXG4iKTsKLQogc3RhdGljIFB5VHlwZU9iamVjdCBEZWNvbXByZXNzb3JfdHlwZSA9IHsKICAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoTlVMTCwgMCkKICAgICAiX2x6bWEuTFpNQURlY29tcHJlc3NvciIsICAgICAgICAgICAvKiB0cF9uYW1lICovCkBAIC0xMDczLDcgKzExNjgsNyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3NldGF0dHJvICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfYnVmZmVyICovCiAgICAgUHlfVFBGTEFHU19ERUZBVUxULCAgICAgICAgICAgICAgICAgLyogdHBfZmxhZ3MgKi8KLSAgICBEZWNvbXByZXNzb3JfZG9jLCAgICAgICAgICAgICAgICAgICAvKiB0cF9kb2MgKi8KKyAgICBfbHptYV9MWk1BRGVjb21wcmVzc29yX19faW5pdF9fX19kb2NfXywgIC8qIHRwX2RvYyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3RyYXZlcnNlICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2xlYXIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yaWNoY29tcGFyZSAqLwpAQCAtMTA4OCw3ICsxMTgzLDcgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZXNjcl9nZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZXNjcl9zZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kaWN0b2Zmc2V0ICovCi0gICAgKGluaXRwcm9jKURlY29tcHJlc3Nvcl9pbml0LCAgICAgICAgLyogdHBfaW5pdCAqLworICAgIF9sem1hX0xaTUFEZWNvbXByZXNzb3JfX19pbml0X18sICAgIC8qIHRwX2luaXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hbGxvYyAqLwogICAgIFB5VHlwZV9HZW5lcmljTmV3LCAgICAgICAgICAgICAgICAgIC8qIHRwX25ldyAqLwogfTsKQEAgLTEwOTYsNDggKzExOTEsNDIgQEAKIAogLyogTW9kdWxlLWxldmVsIGZ1bmN0aW9ucy4gKi8KIAotUHlEb2NfU1RSVkFSKGlzX2NoZWNrX3N1cHBvcnRlZF9kb2MsCi0iaXNfY2hlY2tfc3VwcG9ydGVkKGNoZWNrX2lkKSAtPiBib29sXG4iCi0iXG4iCi0iVGVzdCB3aGV0aGVyIHRoZSBnaXZlbiBpbnRlZ3JpdHkgY2hlY2sgaXMgc3VwcG9ydGVkLlxuIgotIlxuIgotIkFsd2F5cyByZXR1cm5zIFRydWUgZm9yIENIRUNLX05PTkUgYW5kIENIRUNLX0NSQzMyLlxuIik7CisvKltjbGluaWMgaW5wdXRdCitfbHptYS5pc19jaGVja19zdXBwb3J0ZWQKKyAgICBjaGVja19pZDogaW50CisgICAgLworCitUZXN0IHdoZXRoZXIgdGhlIGdpdmVuIGludGVncml0eSBjaGVjayBpcyBzdXBwb3J0ZWQuCisKK0Fsd2F5cyByZXR1cm5zIFRydWUgZm9yIENIRUNLX05PTkUgYW5kIENIRUNLX0NSQzMyLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotaXNfY2hlY2tfc3VwcG9ydGVkKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK19sem1hX2lzX2NoZWNrX3N1cHBvcnRlZF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIGludCBjaGVja19pZCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1iYjgyOGU5MGUwMGFkOTZlIGlucHV0PTU1MTgyOTdiOTdiMjMxOGZdKi8KIHsKLSAgICBpbnQgY2hlY2tfaWQ7Ci0KLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImk6aXNfY2hlY2tfc3VwcG9ydGVkIiwgJmNoZWNrX2lkKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KICAgICByZXR1cm4gUHlCb29sX0Zyb21Mb25nKGx6bWFfY2hlY2tfaXNfc3VwcG9ydGVkKGNoZWNrX2lkKSk7CiB9CiAKIAotUHlEb2NfU1RSVkFSKF9lbmNvZGVfZmlsdGVyX3Byb3BlcnRpZXNfZG9jLAotIl9lbmNvZGVfZmlsdGVyX3Byb3BlcnRpZXMoZmlsdGVyKSAtPiBieXRlc1xuIgotIlxuIgotIlJldHVybiBhIGJ5dGVzIG9iamVjdCBlbmNvZGluZyB0aGUgb3B0aW9ucyAocHJvcGVydGllcykgb2YgdGhlIGZpbHRlclxuIgotInNwZWNpZmllZCBieSAqZmlsdGVyKiAoYSBkaWN0KS5cbiIKLSJcbiIKLSJUaGUgcmVzdWx0IGRvZXMgbm90IGluY2x1ZGUgdGhlIGZpbHRlciBJRCBpdHNlbGYsIG9ubHkgdGhlIG9wdGlvbnMuXG4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK19sem1hLl9lbmNvZGVfZmlsdGVyX3Byb3BlcnRpZXMKKyAgICBmaWx0ZXI6IGx6bWFfZmlsdGVyKGNfZGVmYXVsdD0ie0xaTUFfVkxJX1VOS05PV04sIE5VTEx9IikKKyAgICAvCisKK1JldHVybiBhIGJ5dGVzIG9iamVjdCBlbmNvZGluZyB0aGUgb3B0aW9ucyAocHJvcGVydGllcykgb2YgdGhlIGZpbHRlciBzcGVjaWZpZWQgYnkgKmZpbHRlciogKGEgZGljdCkuCisKK1RoZSByZXN1bHQgZG9lcyBub3QgaW5jbHVkZSB0aGUgZmlsdGVyIElEIGl0c2VsZiwgb25seSB0aGUgb3B0aW9ucy4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLV9lbmNvZGVfZmlsdGVyX3Byb3BlcnRpZXMoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorX2x6bWFfX2VuY29kZV9maWx0ZXJfcHJvcGVydGllc19pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIGx6bWFfZmlsdGVyIGZpbHRlcikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1iNWZlNjkwYWNkNmI2MWQxIGlucHV0PWQ0YzY0ZjFiNTU3Yzc3ZDRdKi8KIHsKLSAgICBQeU9iamVjdCAqZmlsdGVyc3BlYzsKLSAgICBsem1hX2ZpbHRlciBmaWx0ZXI7CiAgICAgbHptYV9yZXQgbHpyZXQ7CiAgICAgdWludDMyX3QgZW5jb2RlZF9zaXplOwogICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBOVUxMOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPOl9lbmNvZGVfZmlsdGVyX3Byb3BlcnRpZXMiLCAmZmlsdGVyc3BlYykpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgaWYgKHBhcnNlX2ZpbHRlcl9zcGVjKCZmaWx0ZXIsIGZpbHRlcnNwZWMpID09IE5VTEwpCi0gICAgICAgIHJldHVybiBOVUxMOwotCiAgICAgbHpyZXQgPSBsem1hX3Byb3BlcnRpZXNfc2l6ZSgmZW5jb2RlZF9zaXplLCAmZmlsdGVyKTsKICAgICBpZiAoY2F0Y2hfbHptYV9lcnJvcihsenJldCkpCiAgICAgICAgIGdvdG8gZXJyb3I7CkBAIC0xMTUxLDM3ICsxMjQwLDM2IEBACiAgICAgaWYgKGNhdGNoX2x6bWFfZXJyb3IobHpyZXQpKQogICAgICAgICBnb3RvIGVycm9yOwogCi0gICAgUHlNZW1fRnJlZShmaWx0ZXIub3B0aW9ucyk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIAogZXJyb3I6CiAgICAgUHlfWERFQ1JFRihyZXN1bHQpOwotICAgIFB5TWVtX0ZyZWUoZmlsdGVyLm9wdGlvbnMpOwogICAgIHJldHVybiBOVUxMOwogfQogCiAKLVB5RG9jX1NUUlZBUihfZGVjb2RlX2ZpbHRlcl9wcm9wZXJ0aWVzX2RvYywKLSJfZGVjb2RlX2ZpbHRlcl9wcm9wZXJ0aWVzKGZpbHRlcl9pZCwgZW5jb2RlZF9wcm9wcykgLT4gZGljdFxuIgotIlxuIgotIlJldHVybiBhIGRpY3QgZGVzY3JpYmluZyBhIGZpbHRlciB3aXRoIElEICpmaWx0ZXJfaWQqLCBhbmQgb3B0aW9uc1xuIgotIihwcm9wZXJ0aWVzKSBkZWNvZGVkIGZyb20gdGhlIGJ5dGVzIG9iamVjdCAqZW5jb2RlZF9wcm9wcyouXG4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK19sem1hLl9kZWNvZGVfZmlsdGVyX3Byb3BlcnRpZXMKKyAgICBmaWx0ZXJfaWQ6IGx6bWFfdmxpCisgICAgZW5jb2RlZF9wcm9wczogUHlfYnVmZmVyCisgICAgLworCitSZXR1cm4gYSBieXRlcyBvYmplY3QgZW5jb2RpbmcgdGhlIG9wdGlvbnMgKHByb3BlcnRpZXMpIG9mIHRoZSBmaWx0ZXIgc3BlY2lmaWVkIGJ5ICpmaWx0ZXIqIChhIGRpY3QpLgorCitUaGUgcmVzdWx0IGRvZXMgbm90IGluY2x1ZGUgdGhlIGZpbHRlciBJRCBpdHNlbGYsIG9ubHkgdGhlIG9wdGlvbnMuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1fZGVjb2RlX2ZpbHRlcl9wcm9wZXJ0aWVzKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK19sem1hX19kZWNvZGVfZmlsdGVyX3Byb3BlcnRpZXNfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBsem1hX3ZsaSBmaWx0ZXJfaWQsIFB5X2J1ZmZlciAqZW5jb2RlZF9wcm9wcykKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0yMzVmN2Y1MzQ1ZDQ4NzQ0IGlucHV0PTI0NjQxMDgwMDc4MjE2MGNdKi8KIHsKLSAgICBQeV9idWZmZXIgZW5jb2RlZF9wcm9wczsKICAgICBsem1hX2ZpbHRlciBmaWx0ZXI7CiAgICAgbHptYV9yZXQgbHpyZXQ7CiAgICAgUHlPYmplY3QgKnJlc3VsdCA9IE5VTEw7Ci0KLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8meSo6X2RlY29kZV9maWx0ZXJfcHJvcGVydGllcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGx6bWFfdmxpX2NvbnZlcnRlciwgJmZpbHRlci5pZCwgJmVuY29kZWRfcHJvcHMpKQotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBmaWx0ZXIuaWQgPSBmaWx0ZXJfaWQ7CiAKICAgICBsenJldCA9IGx6bWFfcHJvcGVydGllc19kZWNvZGUoCi0gICAgICAgICAgICAmZmlsdGVyLCBOVUxMLCBlbmNvZGVkX3Byb3BzLmJ1ZiwgZW5jb2RlZF9wcm9wcy5sZW4pOwotICAgIFB5QnVmZmVyX1JlbGVhc2UoJmVuY29kZWRfcHJvcHMpOworICAgICAgICAgICAgJmZpbHRlciwgTlVMTCwgZW5jb2RlZF9wcm9wcy0+YnVmLCBlbmNvZGVkX3Byb3BzLT5sZW4pOwogICAgIGlmIChjYXRjaF9sem1hX2Vycm9yKGx6cmV0KSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTExOTcsMTIgKzEyODUsOSBAQAogLyogTW9kdWxlIGluaXRpYWxpemF0aW9uLiAqLwogCiBzdGF0aWMgUHlNZXRob2REZWYgbW9kdWxlX21ldGhvZHNbXSA9IHsKLSAgICB7ImlzX2NoZWNrX3N1cHBvcnRlZCIsIChQeUNGdW5jdGlvbilpc19jaGVja19zdXBwb3J0ZWQsCi0gICAgIE1FVEhfVkFSQVJHUywgaXNfY2hlY2tfc3VwcG9ydGVkX2RvY30sCi0gICAgeyJfZW5jb2RlX2ZpbHRlcl9wcm9wZXJ0aWVzIiwgKFB5Q0Z1bmN0aW9uKV9lbmNvZGVfZmlsdGVyX3Byb3BlcnRpZXMsCi0gICAgIE1FVEhfVkFSQVJHUywgX2VuY29kZV9maWx0ZXJfcHJvcGVydGllc19kb2N9LAotICAgIHsiX2RlY29kZV9maWx0ZXJfcHJvcGVydGllcyIsIChQeUNGdW5jdGlvbilfZGVjb2RlX2ZpbHRlcl9wcm9wZXJ0aWVzLAotICAgICBNRVRIX1ZBUkFSR1MsIF9kZWNvZGVfZmlsdGVyX3Byb3BlcnRpZXNfZG9jfSwKKyAgICBfTFpNQV9JU19DSEVDS19TVVBQT1JURURfTUVUSE9EREVGCisgICAgX0xaTUFfX0VOQ09ERV9GSUxURVJfUFJPUEVSVElFU19NRVRIT0RERUYKKyAgICBfTFpNQV9fREVDT0RFX0ZJTFRFUl9QUk9QRVJUSUVTX01FVEhPRERFRgogICAgIHtOVUxMfQogfTsKIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fbWF0aC5jIGIvTW9kdWxlcy9fbWF0aC5jCmluZGV4IGExNGZmMDYuLmEwMDIyMDggMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX21hdGguYworKysgYi9Nb2R1bGVzL19tYXRoLmMKQEAgLTI0MCw3ICsyNDAsNyBAQAogICAgICAgICByZXR1cm4geDsKICAgICB9CiAgICAgZWxzZSBpZiAoLTAuNSA8PSB4ICYmIHggPD0gMS4pIHsKLSAgICAgICAgLyogV0FSTklORzogaXQncyBwb3NzaWJsZSB0aGFuIGFuIG92ZXJlYWdlciBjb21waWxlcgorICAgICAgICAvKiBXQVJOSU5HOiBpdCdzIHBvc3NpYmxlIHRoYXQgYW4gb3ZlcmVhZ2VyIGNvbXBpbGVyCiAgICAgICAgICAgIHdpbGwgaW5jb3JyZWN0bHkgb3B0aW1pemUgdGhlIGZvbGxvd2luZyB0d28gbGluZXMKICAgICAgICAgICAgdG8gdGhlIGVxdWl2YWxlbnQgb2YgInJldHVybiBsb2coMS4reCkiLiBJZiB0aGlzCiAgICAgICAgICAgIGhhcHBlbnMsIHRoZW4gcmVzdWx0cyBmcm9tIGxvZzFwIHdpbGwgYmUgaW5hY2N1cmF0ZQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fbXVsdGlwcm9jZXNzaW5nL211bHRpcHJvY2Vzc2luZy5jIGIvTW9kdWxlcy9fbXVsdGlwcm9jZXNzaW5nL211bHRpcHJvY2Vzc2luZy5jCmluZGV4IDk0NjBjODkuLjRhZTYzOGUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX211bHRpcHJvY2Vzc2luZy9tdWx0aXByb2Nlc3NpbmcuYworKysgYi9Nb2R1bGVzL19tdWx0aXByb2Nlc3NpbmcvbXVsdGlwcm9jZXNzaW5nLmMKQEAgLTEwLDI1ICsxMCwyMyBAQAogI2luY2x1ZGUgIm11bHRpcHJvY2Vzc2luZy5oIgogCiAKLVB5T2JqZWN0ICpQcm9jZXNzRXJyb3IsICpCdWZmZXJUb29TaG9ydDsKLQogLyoKICAqIEZ1bmN0aW9uIHdoaWNoIHJhaXNlcyBleGNlcHRpb25zIGJhc2VkIG9uIGVycm9yIGNvZGVzCiAgKi8KIAogUHlPYmplY3QgKgotbXBfU2V0RXJyb3IoUHlPYmplY3QgKlR5cGUsIGludCBudW0pCitfUHlNcF9TZXRFcnJvcihQeU9iamVjdCAqVHlwZSwgaW50IG51bSkKIHsKICAgICBzd2l0Y2ggKG51bSkgewogI2lmZGVmIE1TX1dJTkRPV1MKICAgICBjYXNlIE1QX1NUQU5EQVJEX0VSUk9SOgogICAgICAgICBpZiAoVHlwZSA9PSBOVUxMKQotICAgICAgICAgICAgVHlwZSA9IFB5RXhjX1dpbmRvd3NFcnJvcjsKKyAgICAgICAgICAgIFR5cGUgPSBQeUV4Y19PU0Vycm9yOwogICAgICAgICBQeUVycl9TZXRFeGNGcm9tV2luZG93c0VycihUeXBlLCAwKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBNUF9TT0NLRVRfRVJST1I6CiAgICAgICAgIGlmIChUeXBlID09IE5VTEwpCi0gICAgICAgICAgICBUeXBlID0gUHlFeGNfV2luZG93c0Vycm9yOworICAgICAgICAgICAgVHlwZSA9IFB5RXhjX09TRXJyb3I7CiAgICAgICAgIFB5RXJyX1NldEV4Y0Zyb21XaW5kb3dzRXJyKFR5cGUsIFdTQUdldExhc3RFcnJvcigpKTsKICAgICAgICAgYnJlYWs7CiAjZWxzZSAvKiAhTVNfV0lORE9XUyAqLwpAQCAtMTAxLDEzICs5OSwxNSBAQAogewogICAgIEhBTkRMRSBoYW5kbGU7CiAgICAgUHlfYnVmZmVyIGJ1ZjsKLSAgICBpbnQgcmV0OworICAgIGludCByZXQsIGxlbmd0aDsKIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBGX0hBTkRMRSAieSo6c2VuZCIgLCAmaGFuZGxlLCAmYnVmKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKKyAgICBsZW5ndGggPSAoaW50KVB5X01JTihidWYubGVuLCBJTlRfTUFYKTsKKwogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICByZXQgPSBzZW5kKChTT0NLRVQpIGhhbmRsZSwgYnVmLmJ1ZiwgYnVmLmxlbiwgMCk7CisgICAgcmV0ID0gc2VuZCgoU09DS0VUKSBoYW5kbGUsIGJ1Zi5idWYsIGxlbmd0aCwgMCk7CiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKIAogICAgIFB5QnVmZmVyX1JlbGVhc2UoJmJ1Zik7CkBAIC0xMjgsNiArMTI4LDkgQEAKICAgICB7InJlY3YiLCBtdWx0aXByb2Nlc3NpbmdfcmVjdiwgTUVUSF9WQVJBUkdTLCAiIn0sCiAgICAgeyJzZW5kIiwgbXVsdGlwcm9jZXNzaW5nX3NlbmQsIE1FVEhfVkFSQVJHUywgIiJ9LAogI2VuZGlmCisjaWZuZGVmIFBPU0lYX1NFTUFQSE9SRVNfTk9UX0VOQUJMRUQKKyAgICB7InNlbV91bmxpbmsiLCBfUHlNcF9zZW1fdW5saW5rLCBNRVRIX1ZBUkFSR1MsICIifSwKKyNlbmRpZgogICAgIHtOVUxMfQogfTsKIApAQCAtMTU5LDE5ICsxNjIsMTIgQEAKICAgICBpZiAoIW1vZHVsZSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICAvKiBHZXQgY29weSBvZiBCdWZmZXJUb29TaG9ydCAqLwotICAgIHRlbXAgPSBQeUltcG9ydF9JbXBvcnRNb2R1bGUoIm11bHRpcHJvY2Vzc2luZyIpOwotICAgIGlmICghdGVtcCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgQnVmZmVyVG9vU2hvcnQgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKHRlbXAsICJCdWZmZXJUb29TaG9ydCIpOwotICAgIFB5X1hERUNSRUYodGVtcCk7Ci0KICNpZiBkZWZpbmVkKE1TX1dJTkRPV1MpIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgKGRlZmluZWQoSEFWRV9TRU1fT1BFTikgJiYgIWRlZmluZWQoUE9TSVhfU0VNQVBIT1JFU19OT1RfRU5BQkxFRCkpCi0gICAgLyogQWRkIFNlbUxvY2sgdHlwZSB0byBtb2R1bGUgKi8KLSAgICBpZiAoUHlUeXBlX1JlYWR5KCZTZW1Mb2NrVHlwZSkgPCAwKQorICAgIC8qIEFkZCBfUHlNcF9TZW1Mb2NrIHR5cGUgdG8gbW9kdWxlICovCisgICAgaWYgKFB5VHlwZV9SZWFkeSgmX1B5TXBfU2VtTG9ja1R5cGUpIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgUHlfSU5DUkVGKCZTZW1Mb2NrVHlwZSk7CisgICAgUHlfSU5DUkVGKCZfUHlNcF9TZW1Mb2NrVHlwZSk7CiAgICAgewogICAgICAgICBQeU9iamVjdCAqcHlfc2VtX3ZhbHVlX21heDsKICAgICAgICAgLyogU29tZSBzeXN0ZW1zIGRlZmluZSBTRU1fVkFMVUVfTUFYIGFzIGFuIHVuc2lnbmVkIHZhbHVlIHRoYXQKQEAgLTE4MiwxMCArMTc4LDEwIEBACiAgICAgICAgICAgICBweV9zZW1fdmFsdWVfbWF4ID0gUHlMb25nX0Zyb21Mb25nKFNFTV9WQUxVRV9NQVgpOwogICAgICAgICBpZiAocHlfc2VtX3ZhbHVlX21heCA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKFNlbUxvY2tUeXBlLnRwX2RpY3QsICJTRU1fVkFMVUVfTUFYIiwKKyAgICAgICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoX1B5TXBfU2VtTG9ja1R5cGUudHBfZGljdCwgIlNFTV9WQUxVRV9NQVgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBweV9zZW1fdmFsdWVfbWF4KTsKICAgICB9Ci0gICAgUHlNb2R1bGVfQWRkT2JqZWN0KG1vZHVsZSwgIlNlbUxvY2siLCAoUHlPYmplY3QqKSZTZW1Mb2NrVHlwZSk7CisgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG1vZHVsZSwgIlNlbUxvY2siLCAoUHlPYmplY3QqKSZfUHlNcF9TZW1Mb2NrVHlwZSk7CiAjZW5kaWYKIAogICAgIC8qIEFkZCBjb25maWd1cmF0aW9uIG1hY3JvcyAqLwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fbXVsdGlwcm9jZXNzaW5nL211bHRpcHJvY2Vzc2luZy5oIGIvTW9kdWxlcy9fbXVsdGlwcm9jZXNzaW5nL211bHRpcHJvY2Vzc2luZy5oCmluZGV4IGUzZGU5YmEuLjlhZWVhOGQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX211bHRpcHJvY2Vzc2luZy9tdWx0aXByb2Nlc3NpbmcuaAorKysgYi9Nb2R1bGVzL19tdWx0aXByb2Nlc3NpbmcvbXVsdGlwcm9jZXNzaW5nLmgKQEAgLTkxLDIzICs5MSwxMyBAQAogI2RlZmluZSBNUF9TT0NLRVRfRVJST1IgKC0xMDAyKQogI2RlZmluZSBNUF9FWENFUFRJT05fSEFTX0JFRU5fU0VUICgtMTAwMykKIAotUHlPYmplY3QgKm1wX1NldEVycm9yKFB5T2JqZWN0ICpUeXBlLCBpbnQgbnVtKTsKK1B5T2JqZWN0ICpfUHlNcF9TZXRFcnJvcihQeU9iamVjdCAqVHlwZSwgaW50IG51bSk7CiAKIC8qCiAgKiBFeHRlcm5zIC0gbm90IGFsbCB3aWxsIHJlYWxseSBleGlzdCBvbiBhbGwgcGxhdGZvcm1zCiAgKi8KIAotZXh0ZXJuIFB5T2JqZWN0ICpCdWZmZXJUb29TaG9ydDsKLWV4dGVybiBQeVR5cGVPYmplY3QgU2VtTG9ja1R5cGU7Ci1leHRlcm4gUHlUeXBlT2JqZWN0IFBpcGVDb25uZWN0aW9uVHlwZTsKLQotLyoKLSAqIE1pc2NlbGxhbmVvdXMKLSAqLwotCi0jaWZuZGVmIE1JTgotIyAgZGVmaW5lIE1JTih4LCB5KSAoKHgpIDwgKHkpID8geCA6IHkpCi0jICBkZWZpbmUgTUFYKHgsIHkpICgoeCkgPiAoeSkgPyB4IDogeSkKLSNlbmRpZgorZXh0ZXJuIFB5VHlwZU9iamVjdCBfUHlNcF9TZW1Mb2NrVHlwZTsKK2V4dGVybiBQeU9iamVjdCAqX1B5TXBfc2VtX3VubGluayhQeU9iamVjdCAqaWdub3JlLCBQeU9iamVjdCAqYXJncyk7CiAKICNlbmRpZiAvKiBNVUxUSVBST0NFU1NJTkdfSCAqLwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fbXVsdGlwcm9jZXNzaW5nL3NlbWFwaG9yZS5jIGIvTW9kdWxlcy9fbXVsdGlwcm9jZXNzaW5nL3NlbWFwaG9yZS5jCmluZGV4IDJjMmIwMjAuLmRlODVhOTAgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX211bHRpcHJvY2Vzc2luZy9zZW1hcGhvcmUuYworKysgYi9Nb2R1bGVzL19tdWx0aXByb2Nlc3Npbmcvc2VtYXBob3JlLmMKQEAgLTE4LDYgKzE4LDcgQEAKICAgICBpbnQgY291bnQ7CiAgICAgaW50IG1heHZhbHVlOwogICAgIGludCBraW5kOworICAgIGNoYXIgKm5hbWU7CiB9IFNlbUxvY2tPYmplY3Q7CiAKICNkZWZpbmUgSVNNSU5FKG8pIChvLT5jb3VudCA+IDAgJiYgUHlUaHJlYWRfZ2V0X3RocmVhZF9pZGVudCgpID09IG8tPmxhc3RfdGlkKQpAQCAtNDMsNyArNDQsNyBAQAogewogICAgIGxvbmcgcHJldmlvdXM7CiAKLSAgICBzd2l0Y2ggKFdhaXRGb3JTaW5nbGVPYmplY3QoaGFuZGxlLCAwKSkgeworICAgIHN3aXRjaCAoV2FpdEZvclNpbmdsZU9iamVjdEV4KGhhbmRsZSwgMCwgRkFMU0UpKSB7CiAgICAgY2FzZSBXQUlUX09CSkVDVF8wOgogICAgICAgICBpZiAoIVJlbGVhc2VTZW1hcGhvcmUoaGFuZGxlLCAxLCAmcHJldmlvdXMpKQogICAgICAgICAgICAgcmV0dXJuIE1QX1NUQU5EQVJEX0VSUk9SOwpAQCAtOTksNyArMTAwLDcgQEAKICAgICB9CiAKICAgICAvKiBjaGVjayB3aGV0aGVyIHdlIGNhbiBhY3F1aXJlIHdpdGhvdXQgcmVsZWFzaW5nIHRoZSBHSUwgYW5kIGJsb2NraW5nICovCi0gICAgaWYgKFdhaXRGb3JTaW5nbGVPYmplY3Qoc2VsZi0+aGFuZGxlLCAwKSA9PSBXQUlUX09CSkVDVF8wKSB7CisgICAgaWYgKFdhaXRGb3JTaW5nbGVPYmplY3RFeChzZWxmLT5oYW5kbGUsIDAsIEZBTFNFKSA9PSBXQUlUX09CSkVDVF8wKSB7CiAgICAgICAgIHNlbGYtPmxhc3RfdGlkID0gR2V0Q3VycmVudFRocmVhZElkKCk7CiAgICAgICAgICsrc2VsZi0+Y291bnQ7CiAgICAgICAgIFB5X1JFVFVSTl9UUlVFOwpAQCAtMTE4LDcgKzExOSw3IEBACiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgIGlmIChzaWdpbnRfZXZlbnQgIT0gTlVMTCkKICAgICAgICAgUmVzZXRFdmVudChzaWdpbnRfZXZlbnQpOwotICAgIHJlcyA9IFdhaXRGb3JNdWx0aXBsZU9iamVjdHMobmhhbmRsZXMsIGhhbmRsZXMsIEZBTFNFLCBmdWxsX21zZWNzKTsKKyAgICByZXMgPSBXYWl0Rm9yTXVsdGlwbGVPYmplY3RzRXgobmhhbmRsZXMsIGhhbmRsZXMsIEZBTFNFLCBmdWxsX21zZWNzLCBGQUxTRSk7CiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKIAogICAgIC8qIGhhbmRsZSByZXN1bHQgKi8KQEAgLTIwMCw3ICsyMDEsNyBAQAogI2lmbmRlZiBIQVZFX1NFTV9USU1FRFdBSVQKICMgIGRlZmluZSBzZW1fdGltZWR3YWl0KHNlbSxkZWFkbGluZSkgc2VtX3RpbWVkd2FpdF9zYXZlKHNlbSxkZWFkbGluZSxfc2F2ZSkKIAotaW50CitzdGF0aWMgaW50CiBzZW1fdGltZWR3YWl0X3NhdmUoc2VtX3QgKnNlbSwgc3RydWN0IHRpbWVzcGVjICpkZWFkbGluZSwgUHlUaHJlYWRTdGF0ZSAqX3NhdmUpCiB7CiAgICAgaW50IHJlczsKQEAgLTM5Nyw3ICszOTgsOCBAQAogICovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1uZXdzZW1sb2Nrb2JqZWN0KFB5VHlwZU9iamVjdCAqdHlwZSwgU0VNX0hBTkRMRSBoYW5kbGUsIGludCBraW5kLCBpbnQgbWF4dmFsdWUpCituZXdzZW1sb2Nrb2JqZWN0KFB5VHlwZU9iamVjdCAqdHlwZSwgU0VNX0hBTkRMRSBoYW5kbGUsIGludCBraW5kLCBpbnQgbWF4dmFsdWUsCisgICAgICAgICAgICAgICAgIGNoYXIgKm5hbWUpCiB7CiAgICAgU2VtTG9ja09iamVjdCAqc2VsZjsKIApAQCAtNDA5LDIxICs0MTEsMjIgQEAKICAgICBzZWxmLT5jb3VudCA9IDA7CiAgICAgc2VsZi0+bGFzdF90aWQgPSAwOwogICAgIHNlbGYtPm1heHZhbHVlID0gbWF4dmFsdWU7CisgICAgc2VsZi0+bmFtZSA9IG5hbWU7CiAgICAgcmV0dXJuIChQeU9iamVjdCopc2VsZjsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKIHNlbWxvY2tfbmV3KFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQogewotICAgIGNoYXIgYnVmZmVyWzI1Nl07CiAgICAgU0VNX0hBTkRMRSBoYW5kbGUgPSBTRU1fRkFJTEVEOwotICAgIGludCBraW5kLCBtYXh2YWx1ZSwgdmFsdWU7CisgICAgaW50IGtpbmQsIG1heHZhbHVlLCB2YWx1ZSwgdW5saW5rOwogICAgIFB5T2JqZWN0ICpyZXN1bHQ7Ci0gICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJraW5kIiwgInZhbHVlIiwgIm1heHZhbHVlIiwgTlVMTH07Ci0gICAgc3RhdGljIGludCBjb3VudGVyID0gMDsKKyAgICBjaGFyICpuYW1lLCAqbmFtZV9jb3B5ID0gTlVMTDsKKyAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7ImtpbmQiLCAidmFsdWUiLCAibWF4dmFsdWUiLCAibmFtZSIsICJ1bmxpbmsiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMfTsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJpaWkiLCBrd2xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmtpbmQsICZ2YWx1ZSwgJm1heHZhbHVlKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiaWlpc2kiLCBrd2xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmtpbmQsICZ2YWx1ZSwgJm1heHZhbHVlLCAmbmFtZSwgJnVubGluaykpCiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgaWYgKGtpbmQgIT0gUkVDVVJTSVZFX01VVEVYICYmIGtpbmQgIT0gU0VNQVBIT1JFKSB7CkBAIC00MzEsMTggKzQzNCwyMyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBQeU9TX3NucHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksICIvbXAlbGQtJWQiLCAobG9uZylnZXRwaWQoKSwgY291bnRlcisrKTsKKyAgICBpZiAoIXVubGluaykgeworICAgICAgICBuYW1lX2NvcHkgPSBQeU1lbV9NYWxsb2Moc3RybGVuKG5hbWUpICsgMSk7CisgICAgICAgIGlmIChuYW1lX2NvcHkgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZmFpbHVyZTsKKyAgICAgICAgc3RyY3B5KG5hbWVfY29weSwgbmFtZSk7CisgICAgfQogCiAgICAgU0VNX0NMRUFSX0VSUk9SKCk7Ci0gICAgaGFuZGxlID0gU0VNX0NSRUFURShidWZmZXIsIHZhbHVlLCBtYXh2YWx1ZSk7CisgICAgaGFuZGxlID0gU0VNX0NSRUFURShuYW1lLCB2YWx1ZSwgbWF4dmFsdWUpOwogICAgIC8qIE9uIFdpbmRvd3Mgd2Ugc2hvdWxkIGZhaWwgaWYgR2V0TGFzdEVycm9yKCk9PUVSUk9SX0FMUkVBRFlfRVhJU1RTICovCiAgICAgaWYgKGhhbmRsZSA9PSBTRU1fRkFJTEVEIHx8IFNFTV9HRVRfTEFTVF9FUlJPUigpICE9IDApCiAgICAgICAgIGdvdG8gZmFpbHVyZTsKIAotICAgIGlmIChTRU1fVU5MSU5LKGJ1ZmZlcikgPCAwKQorICAgIGlmICh1bmxpbmsgJiYgU0VNX1VOTElOSyhuYW1lKSA8IDApCiAgICAgICAgIGdvdG8gZmFpbHVyZTsKIAotICAgIHJlc3VsdCA9IG5ld3NlbWxvY2tvYmplY3QodHlwZSwgaGFuZGxlLCBraW5kLCBtYXh2YWx1ZSk7CisgICAgcmVzdWx0ID0gbmV3c2VtbG9ja29iamVjdCh0eXBlLCBoYW5kbGUsIGtpbmQsIG1heHZhbHVlLCBuYW1lX2NvcHkpOwogICAgIGlmICghcmVzdWx0KQogICAgICAgICBnb3RvIGZhaWx1cmU7CiAKQEAgLTQ1MSw3ICs0NTksOCBAQAogICBmYWlsdXJlOgogICAgIGlmIChoYW5kbGUgIT0gU0VNX0ZBSUxFRCkKICAgICAgICAgU0VNX0NMT1NFKGhhbmRsZSk7Ci0gICAgbXBfU2V0RXJyb3IoTlVMTCwgTVBfU1RBTkRBUkRfRVJST1IpOworICAgIFB5TWVtX0ZyZWUobmFtZV9jb3B5KTsKKyAgICBfUHlNcF9TZXRFcnJvcihOVUxMLCBNUF9TVEFOREFSRF9FUlJPUik7CiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTQ2MCwxMiArNDY5LDMwIEBACiB7CiAgICAgU0VNX0hBTkRMRSBoYW5kbGU7CiAgICAgaW50IGtpbmQsIG1heHZhbHVlOworICAgIGNoYXIgKm5hbWUsICpuYW1lX2NvcHkgPSBOVUxMOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIEZfU0VNX0hBTkRMRSAiaWkiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmaGFuZGxlLCAma2luZCwgJm1heHZhbHVlKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgRl9TRU1fSEFORExFICJpaXoiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAmaGFuZGxlLCAma2luZCwgJm1heHZhbHVlLCAmbmFtZSkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgcmV0dXJuIG5ld3NlbWxvY2tvYmplY3QodHlwZSwgaGFuZGxlLCBraW5kLCBtYXh2YWx1ZSk7CisgICAgaWYgKG5hbWUgIT0gTlVMTCkgeworICAgICAgICBuYW1lX2NvcHkgPSBQeU1lbV9NYWxsb2Moc3RybGVuKG5hbWUpICsgMSk7CisgICAgICAgIGlmIChuYW1lX2NvcHkgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICBzdHJjcHkobmFtZV9jb3B5LCBuYW1lKTsKKyAgICB9CisKKyNpZm5kZWYgTVNfV0lORE9XUworICAgIGlmIChuYW1lICE9IE5VTEwpIHsKKyAgICAgICAgaGFuZGxlID0gc2VtX29wZW4obmFtZSwgMCk7CisgICAgICAgIGlmIChoYW5kbGUgPT0gU0VNX0ZBSUxFRCkgeworICAgICAgICAgICAgUHlNZW1fRnJlZShuYW1lX2NvcHkpOworICAgICAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19PU0Vycm9yKTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorCisgICAgcmV0dXJuIG5ld3NlbWxvY2tvYmplY3QodHlwZSwgaGFuZGxlLCBraW5kLCBtYXh2YWx1ZSwgbmFtZV9jb3B5KTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTQ3Myw2ICs1MDAsNyBAQAogewogICAgIGlmIChzZWxmLT5oYW5kbGUgIT0gU0VNX0ZBSUxFRCkKICAgICAgICAgU0VNX0NMT1NFKHNlbGYtPmhhbmRsZSk7CisgICAgUHlNZW1fRnJlZShzZWxmLT5uYW1lKTsKICAgICBQeU9iamVjdF9EZWwoc2VsZik7CiB9CiAKQEAgLTQ5OCw3ICs1MjYsNyBAQAogI2Vsc2UKICAgICBpbnQgc3ZhbDsKICAgICBpZiAoU0VNX0dFVFZBTFVFKHNlbGYtPmhhbmRsZSwgJnN2YWwpIDwgMCkKLSAgICAgICAgcmV0dXJuIG1wX1NldEVycm9yKE5VTEwsIE1QX1NUQU5EQVJEX0VSUk9SKTsKKyAgICAgICAgcmV0dXJuIF9QeU1wX1NldEVycm9yKE5VTEwsIE1QX1NUQU5EQVJEX0VSUk9SKTsKICAgICAvKiBzb21lIHBvc2l4IGltcGxlbWVudGF0aW9ucyB1c2UgbmVnYXRpdmUgbnVtYmVycyB0byBpbmRpY2F0ZQogICAgICAgIHRoZSBudW1iZXIgb2Ygd2FpdGluZyB0aHJlYWRzICovCiAgICAgaWYgKHN2YWwgPCAwKQpAQCAtNTE0LDE2ICs1NDIsMTYgQEAKICAgICBpZiAoc2VtX3RyeXdhaXQoc2VsZi0+aGFuZGxlKSA8IDApIHsKICAgICAgICAgaWYgKGVycm5vID09IEVBR0FJTikKICAgICAgICAgICAgIFB5X1JFVFVSTl9UUlVFOwotICAgICAgICByZXR1cm4gbXBfU2V0RXJyb3IoTlVMTCwgTVBfU1RBTkRBUkRfRVJST1IpOworICAgICAgICByZXR1cm4gX1B5TXBfU2V0RXJyb3IoTlVMTCwgTVBfU1RBTkRBUkRfRVJST1IpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChzZW1fcG9zdChzZWxmLT5oYW5kbGUpIDwgMCkKLSAgICAgICAgICAgIHJldHVybiBtcF9TZXRFcnJvcihOVUxMLCBNUF9TVEFOREFSRF9FUlJPUik7CisgICAgICAgICAgICByZXR1cm4gX1B5TXBfU2V0RXJyb3IoTlVMTCwgTVBfU1RBTkRBUkRfRVJST1IpOwogICAgICAgICBQeV9SRVRVUk5fRkFMU0U7CiAgICAgfQogI2Vsc2UKICAgICBpbnQgc3ZhbDsKICAgICBpZiAoU0VNX0dFVFZBTFVFKHNlbGYtPmhhbmRsZSwgJnN2YWwpIDwgMCkKLSAgICAgICAgcmV0dXJuIG1wX1NldEVycm9yKE5VTEwsIE1QX1NUQU5EQVJEX0VSUk9SKTsKKyAgICAgICAgcmV0dXJuIF9QeU1wX1NldEVycm9yKE5VTEwsIE1QX1NUQU5EQVJEX0VSUk9SKTsKICAgICByZXR1cm4gUHlCb29sX0Zyb21Mb25nKChsb25nKXN2YWwgPT0gMCk7CiAjZW5kaWYKIH0KQEAgLTU3NCw2ICs2MDIsOCBAQAogICAgICAiIn0sCiAgICAgeyJtYXh2YWx1ZSIsIFRfSU5ULCBvZmZzZXRvZihTZW1Mb2NrT2JqZWN0LCBtYXh2YWx1ZSksIFJFQURPTkxZLAogICAgICAiIn0sCisgICAgeyJuYW1lIiwgVF9TVFJJTkcsIG9mZnNldG9mKFNlbUxvY2tPYmplY3QsIG5hbWUpLCBSRUFET05MWSwKKyAgICAgIiJ9LAogICAgIHtOVUxMfQogfTsKIApAQCAtNTgxLDcgKzYxMSw3IEBACiAgKiBTZW1hcGhvcmUgdHlwZQogICovCiAKLVB5VHlwZU9iamVjdCBTZW1Mb2NrVHlwZSA9IHsKK1B5VHlwZU9iamVjdCBfUHlNcF9TZW1Mb2NrVHlwZSA9IHsKICAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoTlVMTCwgMCkKICAgICAvKiB0cF9uYW1lICAgICAgICAgICAqLyAiX211bHRpcHJvY2Vzc2luZy5TZW1Mb2NrIiwKICAgICAvKiB0cF9iYXNpY3NpemUgICAgICAqLyBzaXplb2YoU2VtTG9ja09iamVjdCksCkBAIC02MjEsMyArNjUxLDIzIEBACiAgICAgLyogdHBfYWxsb2MgICAgICAgICAgKi8gMCwKICAgICAvKiB0cF9uZXcgICAgICAgICAgICAqLyBzZW1sb2NrX25ldywKIH07CisKKy8qCisgKiBGdW5jdGlvbiB0byB1bmxpbmsgc2VtYXBob3JlIG5hbWVzCisgKi8KKworUHlPYmplY3QgKgorX1B5TXBfc2VtX3VubGluayhQeU9iamVjdCAqaWdub3JlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBjaGFyICpuYW1lOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzIiwgJm5hbWUpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChTRU1fVU5MSU5LKG5hbWUpIDwgMCkgeworICAgICAgICBfUHlNcF9TZXRFcnJvcihOVUxMLCBNUF9TVEFOREFSRF9FUlJPUik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIFB5X1JFVFVSTl9OT05FOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fb3Bjb2RlLmMgYi9Nb2R1bGVzL19vcGNvZGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZWUzODhmCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fb3Bjb2RlLmMKQEAgLTAsMCArMSwxMDkgQEAKKyNpbmNsdWRlICJQeXRob24uaCIKKyNpbmNsdWRlICJvcGNvZGUuaCIKKworLypbY2xpbmljIGlucHV0XQorbW9kdWxlIF9vcGNvZGUKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kYTM5YTNlZTVlNmI0YjBkIGlucHV0PTExNzQ0MmU2NmViMzc2ZTZdKi8KKworLypbY2xpbmljIGlucHV0XQorCitfb3Bjb2RlLnN0YWNrX2VmZmVjdCAtPiBpbnQKKworICBvcGNvZGU6IGludAorICBvcGFyZzogb2JqZWN0ID0gTm9uZQorICAvCisKK0NvbXB1dGUgdGhlIHN0YWNrIGVmZmVjdCBvZiB0aGUgb3Bjb2RlLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitQeURvY19TVFJWQVIoX29wY29kZV9zdGFja19lZmZlY3RfX2RvY19fLAorInN0YWNrX2VmZmVjdCgkbW9kdWxlLCBvcGNvZGUsIG9wYXJnPU5vbmUsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJDb21wdXRlIHRoZSBzdGFjayBlZmZlY3Qgb2YgdGhlIG9wY29kZS4iKTsKKworI2RlZmluZSBfT1BDT0RFX1NUQUNLX0VGRkVDVF9NRVRIT0RERUYgICAgXAorICAgIHsic3RhY2tfZWZmZWN0IiwgKFB5Q0Z1bmN0aW9uKV9vcGNvZGVfc3RhY2tfZWZmZWN0LCBNRVRIX1ZBUkFSR1MsIF9vcGNvZGVfc3RhY2tfZWZmZWN0X19kb2NfX30sCisKK3N0YXRpYyBpbnQKK19vcGNvZGVfc3RhY2tfZWZmZWN0X2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgaW50IG9wY29kZSwgUHlPYmplY3QgKm9wYXJnKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19vcGNvZGVfc3RhY2tfZWZmZWN0KFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIGludCBvcGNvZGU7CisgICAgUHlPYmplY3QgKm9wYXJnID0gUHlfTm9uZTsKKyAgICBpbnQgX3JldHVybl92YWx1ZTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAiaXxPOnN0YWNrX2VmZmVjdCIsCisgICAgICAgICZvcGNvZGUsICZvcGFyZykpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICBfcmV0dXJuX3ZhbHVlID0gX29wY29kZV9zdGFja19lZmZlY3RfaW1wbChtb2R1bGUsIG9wY29kZSwgb3BhcmcpOworICAgIGlmICgoX3JldHVybl92YWx1ZSA9PSAtMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IFB5TG9uZ19Gcm9tTG9uZygobG9uZylfcmV0dXJuX3ZhbHVlKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitzdGF0aWMgaW50Citfb3Bjb2RlX3N0YWNrX2VmZmVjdF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIGludCBvcGNvZGUsIFB5T2JqZWN0ICpvcGFyZykKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD05ZTExMzNmOGQ1ODdiYzY3IGlucHV0PTJkMGE5ZWU1M2MwNDE4ZjVdKi8KK3sKKyAgICBpbnQgZWZmZWN0OworICAgIGludCBvcGFyZ19pbnQgPSAwOworICAgIGlmIChIQVNfQVJHKG9wY29kZSkpIHsKKyAgICAgICAgaWYgKG9wYXJnID09IFB5X05vbmUpIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAic3RhY2tfZWZmZWN0OiBvcGNvZGUgcmVxdWlyZXMgb3BhcmcgYnV0IG9wYXJnIHdhcyBub3Qgc3BlY2lmaWVkIik7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgb3BhcmdfaW50ID0gKGludClQeUxvbmdfQXNMb25nKG9wYXJnKTsKKyAgICAgICAgaWYgKChvcGFyZ19pbnQgPT0gLTEpICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGVsc2UgaWYgKG9wYXJnICE9IFB5X05vbmUpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgInN0YWNrX2VmZmVjdDogb3Bjb2RlIGRvZXMgbm90IHBlcm1pdCBvcGFyZyBidXQgb3Bhcmcgd2FzIHNwZWNpZmllZCIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGVmZmVjdCA9IFB5Q29tcGlsZV9PcGNvZGVTdGFja0VmZmVjdChvcGNvZGUsIG9wYXJnX2ludCk7CisgICAgaWYgKGVmZmVjdCA9PSBQWV9JTlZBTElEX1NUQUNLX0VGRkVDVCkgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICJpbnZhbGlkIG9wY29kZSBvciBvcGFyZyIpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICByZXR1cm4gZWZmZWN0OworfQorCisKKworCitzdGF0aWMgUHlNZXRob2REZWYKK29wY29kZV9mdW5jdGlvbnNbXSA9ICB7CisgICAgX09QQ09ERV9TVEFDS19FRkZFQ1RfTUVUSE9EREVGCisgICAge05VTEwsIE5VTEwsIDAsIE5VTEx9Cit9OworCisKK3N0YXRpYyBzdHJ1Y3QgUHlNb2R1bGVEZWYgb3Bjb2RlbW9kdWxlID0geworICAgIFB5TW9kdWxlRGVmX0hFQURfSU5JVCwKKyAgICAiX29wY29kZSIsCisgICAgIk9wY29kZSBzdXBwb3J0IG1vZHVsZS4iLAorICAgIC0xLAorICAgIG9wY29kZV9mdW5jdGlvbnMsCisgICAgTlVMTCwKKyAgICBOVUxMLAorICAgIE5VTEwsCisgICAgTlVMTAorfTsKKworUHlNT0RJTklUX0ZVTkMKK1B5SW5pdF9fb3Bjb2RlKHZvaWQpCit7CisgICAgcmV0dXJuIFB5TW9kdWxlX0NyZWF0ZSgmb3Bjb2RlbW9kdWxlKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvb3BlcmF0b3IuYyBiL01vZHVsZXMvX29wZXJhdG9yLmMKc2ltaWxhcml0eSBpbmRleCA5MCUKcmVuYW1lIGZyb20gTW9kdWxlcy9vcGVyYXRvci5jCnJlbmFtZSB0byBNb2R1bGVzL19vcGVyYXRvci5jCmluZGV4IDUxNTZiNmIuLmFkZWI5OWUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvb3BlcmF0b3IuYworKysgYi9Nb2R1bGVzL19vcGVyYXRvci5jCkBAIC0yMDgsNiArMjA4LDMxIEBACiAgICAgcmV0dXJuIChyZXN1bHQgPT0gMCk7CiB9CiAKK1B5RG9jX1NUUlZBUihsZW5ndGhfaGludF9fZG9jX18sCisibGVuZ3RoX2hpbnQob2JqLCBkZWZhdWx0PTApIC0+IGludFxuIgorIlJldHVybiBhbiBlc3RpbWF0ZSBvZiB0aGUgbnVtYmVyIG9mIGl0ZW1zIGluIG9iai5cbiIKKyJUaGlzIGlzIHVzZWZ1bCBmb3IgcHJlc2l6aW5nIGNvbnRhaW5lcnMgd2hlbiBidWlsZGluZyBmcm9tIGFuXG4iCisiaXRlcmFibGUuXG4iCisiXG4iCisiSWYgdGhlIG9iamVjdCBzdXBwb3J0cyBsZW4oKSwgdGhlIHJlc3VsdCB3aWxsIGJlXG4iCisiZXhhY3QuIE90aGVyd2lzZSwgaXQgbWF5IG92ZXItIG9yIHVuZGVyLWVzdGltYXRlIGJ5IGFuXG4iCisiYXJiaXRyYXJ5IGFtb3VudC4gVGhlIHJlc3VsdCB3aWxsIGJlIGFuIGludGVnZXIgPj0gMC4iKTsKKworc3RhdGljIFB5T2JqZWN0ICpsZW5ndGhfaGludChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKm9iajsKKyAgICBQeV9zc2l6ZV90IGRlZmF1bHR2YWx1ZSA9IDAsIHJlczsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk98bjpsZW5ndGhfaGludCIsICZvYmosICZkZWZhdWx0dmFsdWUpKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXMgPSBQeU9iamVjdF9MZW5ndGhIaW50KG9iaiwgZGVmYXVsdHZhbHVlKTsKKyAgICBpZiAocmVzID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJldHVybiBQeUxvbmdfRnJvbVNzaXplX3QocmVzKTsKK30KKworCiBQeURvY19TVFJWQVIoY29tcGFyZV9kaWdlc3RfX2RvY19fLAogImNvbXBhcmVfZGlnZXN0KGEsIGIpIC0+IGJvb2xcbiIKICJcbiIKQEAgLTI1Miw3ICsyNzcsNyBAQAogICAgICAgICBQeV9idWZmZXIgdmlld19hOwogICAgICAgICBQeV9idWZmZXIgdmlld19iOwogCi0gICAgICAgIGlmICgoUHlPYmplY3RfQ2hlY2tCdWZmZXIoYSkgPT0gMCkgJiAoUHlPYmplY3RfQ2hlY2tCdWZmZXIoYikgPT0gMCkpIHsKKyAgICAgICAgaWYgKFB5T2JqZWN0X0NoZWNrQnVmZmVyKGEpID09IDAgJiYgUHlPYmplY3RfQ2hlY2tCdWZmZXIoYikgPT0gMCkgewogICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAidW5zdXBwb3J0ZWQgb3BlcmFuZCB0eXBlcyhzKSBvciBjb21iaW5hdGlvbiBvZiB0eXBlczogIgogICAgICAgICAgICAgICAgICAgICAgICAgICInJS4xMDBzJyBhbmQgJyUuMTAwcyciLApAQCAtMjk3LDE3ICszMjIsMTUgQEAKIC8qIG9wZXJhdG9yIG1ldGhvZHMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogI2RlZmluZSBzcGFtMShPUCxET0MpIHsjT1AsIE9QLCBNRVRIX1ZBUkFSR1MsIFB5RG9jX1NUUihET0MpfSwKLSNkZWZpbmUgc3BhbTIoT1AsQUxUT1AsRE9DKSB7I09QLCBvcF8jI09QLCBNRVRIX1ZBUkFSR1MsIFB5RG9jX1NUUihET0MpfSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgeyNBTFRPUCwgb3BfIyNPUCwgTUVUSF9WQVJBUkdTLCBQeURvY19TVFIoRE9DKX0sCisjZGVmaW5lIHNwYW0yKE9QLERPQykgeyNPUCwgb3BfIyNPUCwgTUVUSF9WQVJBUkdTLCBQeURvY19TVFIoRE9DKX0sCiAjZGVmaW5lIHNwYW0xbyhPUCxET0MpIHsjT1AsIE9QLCBNRVRIX08sIFB5RG9jX1NUUihET0MpfSwKLSNkZWZpbmUgc3BhbTJvKE9QLEFMVE9QLERPQykgeyNPUCwgb3BfIyNPUCwgTUVUSF9PLCBQeURvY19TVFIoRE9DKX0sIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHsjQUxUT1AsIG9wXyMjT1AsIE1FVEhfTywgUHlEb2NfU1RSKERPQyl9LAorI2RlZmluZSBzcGFtMm8oT1AsRE9DKSB7I09QLCBvcF8jI09QLCBNRVRIX08sIFB5RG9jX1NUUihET0MpfSwKIAogc3RhdGljIHN0cnVjdCBQeU1ldGhvZERlZiBvcGVyYXRvcl9tZXRob2RzW10gPSB7CiAKIHNwYW0xbyh0cnV0aCwKICAidHJ1dGgoYSkgLS0gUmV0dXJuIFRydWUgaWYgYSBpcyB0cnVlLCBGYWxzZSBvdGhlcndpc2UuIikKLXNwYW0yKGNvbnRhaW5zLF9fY29udGFpbnNfXywKK3NwYW0yKGNvbnRhaW5zLAogICJjb250YWlucyhhLCBiKSAtLSBTYW1lIGFzIGIgaW4gYSAobm90ZSByZXZlcnNlZCBvcGVyYW5kcykuIikKIHNwYW0xKGluZGV4T2YsCiAgImluZGV4T2YoYSwgYikgLS0gUmV0dXJuIHRoZSBmaXJzdCBpbmRleCBvZiBiIGluIGEuIikKQEAgLTMxNiw1NiArMzM5LDU4IEBACiAKIHNwYW0xKGlzXywgImlzXyhhLCBiKSAtLSBTYW1lIGFzIGEgaXMgYi4iKQogc3BhbTEoaXNfbm90LCAiaXNfbm90KGEsIGIpIC0tIFNhbWUgYXMgYSBpcyBub3QgYi4iKQotc3BhbTJvKGluZGV4LCBfX2luZGV4X18sICJpbmRleChhKSAtLSBTYW1lIGFzIGEuX19pbmRleF9fKCkiKQotc3BhbTIoYWRkLF9fYWRkX18sICJhZGQoYSwgYikgLS0gU2FtZSBhcyBhICsgYi4iKQotc3BhbTIoc3ViLF9fc3ViX18sICJzdWIoYSwgYikgLS0gU2FtZSBhcyBhIC0gYi4iKQotc3BhbTIobXVsLF9fbXVsX18sICJtdWwoYSwgYikgLS0gU2FtZSBhcyBhICogYi4iKQotc3BhbTIoZmxvb3JkaXYsX19mbG9vcmRpdl9fLCAiZmxvb3JkaXYoYSwgYikgLS0gU2FtZSBhcyBhIC8vIGIuIikKLXNwYW0yKHRydWVkaXYsX190cnVlZGl2X18sICJ0cnVlZGl2KGEsIGIpIC0tIFNhbWUgYXMgYSAvIGIuIikKLXNwYW0yKG1vZCxfX21vZF9fLCAibW9kKGEsIGIpIC0tIFNhbWUgYXMgYSAlIGIuIikKLXNwYW0ybyhuZWcsX19uZWdfXywgIm5lZyhhKSAtLSBTYW1lIGFzIC1hLiIpCi1zcGFtMm8ocG9zLF9fcG9zX18sICJwb3MoYSkgLS0gU2FtZSBhcyArYS4iKQotc3BhbTJvKGFicyxfX2Fic19fLCAiYWJzKGEpIC0tIFNhbWUgYXMgYWJzKGEpLiIpCi1zcGFtMm8oaW52LF9faW52X18sICJpbnYoYSkgLS0gU2FtZSBhcyB+YS4iKQotc3BhbTJvKGludmVydCxfX2ludmVydF9fLCAiaW52ZXJ0KGEpIC0tIFNhbWUgYXMgfmEuIikKLXNwYW0yKGxzaGlmdCxfX2xzaGlmdF9fLCAibHNoaWZ0KGEsIGIpIC0tIFNhbWUgYXMgYSA8PCBiLiIpCi1zcGFtMihyc2hpZnQsX19yc2hpZnRfXywgInJzaGlmdChhLCBiKSAtLSBTYW1lIGFzIGEgPj4gYi4iKQotc3BhbTJvKG5vdF8sX19ub3RfXywgIm5vdF8oYSkgLS0gU2FtZSBhcyBub3QgYS4iKQotc3BhbTIoYW5kXyxfX2FuZF9fLCAiYW5kXyhhLCBiKSAtLSBTYW1lIGFzIGEgJiBiLiIpCi1zcGFtMih4b3IsX194b3JfXywgInhvcihhLCBiKSAtLSBTYW1lIGFzIGEgXiBiLiIpCi1zcGFtMihvcl8sX19vcl9fLCAib3JfKGEsIGIpIC0tIFNhbWUgYXMgYSB8IGIuIikKLXNwYW0yKGlhZGQsX19pYWRkX18sICJhID0gaWFkZChhLCBiKSAtLSBTYW1lIGFzIGEgKz0gYi4iKQotc3BhbTIoaXN1YixfX2lzdWJfXywgImEgPSBpc3ViKGEsIGIpIC0tIFNhbWUgYXMgYSAtPSBiLiIpCi1zcGFtMihpbXVsLF9faW11bF9fLCAiYSA9IGltdWwoYSwgYikgLS0gU2FtZSBhcyBhICo9IGIuIikKLXNwYW0yKGlmbG9vcmRpdixfX2lmbG9vcmRpdl9fLCAiYSA9IGlmbG9vcmRpdihhLCBiKSAtLSBTYW1lIGFzIGEgLy89IGIuIikKLXNwYW0yKGl0cnVlZGl2LF9faXRydWVkaXZfXywgImEgPSBpdHJ1ZWRpdihhLCBiKSAtLSBTYW1lIGFzIGEgLz0gYiIpCi1zcGFtMihpbW9kLF9faW1vZF9fLCAiYSA9IGltb2QoYSwgYikgLS0gU2FtZSBhcyBhICU9IGIuIikKLXNwYW0yKGlsc2hpZnQsX19pbHNoaWZ0X18sICJhID0gaWxzaGlmdChhLCBiKSAtLSBTYW1lIGFzIGEgPDw9IGIuIikKLXNwYW0yKGlyc2hpZnQsX19pcnNoaWZ0X18sICJhID0gaXJzaGlmdChhLCBiKSAtLSBTYW1lIGFzIGEgPj49IGIuIikKLXNwYW0yKGlhbmQsX19pYW5kX18sICJhID0gaWFuZChhLCBiKSAtLSBTYW1lIGFzIGEgJj0gYi4iKQotc3BhbTIoaXhvcixfX2l4b3JfXywgImEgPSBpeG9yKGEsIGIpIC0tIFNhbWUgYXMgYSBePSBiLiIpCi1zcGFtMihpb3IsX19pb3JfXywgImEgPSBpb3IoYSwgYikgLS0gU2FtZSBhcyBhIHw9IGIuIikKLXNwYW0yKGNvbmNhdCxfX2NvbmNhdF9fLAorc3BhbTJvKGluZGV4LCAiaW5kZXgoYSkgLS0gU2FtZSBhcyBhLl9faW5kZXhfXygpIikKK3NwYW0yKGFkZCwgImFkZChhLCBiKSAtLSBTYW1lIGFzIGEgKyBiLiIpCitzcGFtMihzdWIsICJzdWIoYSwgYikgLS0gU2FtZSBhcyBhIC0gYi4iKQorc3BhbTIobXVsLCAibXVsKGEsIGIpIC0tIFNhbWUgYXMgYSAqIGIuIikKK3NwYW0yKGZsb29yZGl2LCAiZmxvb3JkaXYoYSwgYikgLS0gU2FtZSBhcyBhIC8vIGIuIikKK3NwYW0yKHRydWVkaXYsICJ0cnVlZGl2KGEsIGIpIC0tIFNhbWUgYXMgYSAvIGIuIikKK3NwYW0yKG1vZCwgIm1vZChhLCBiKSAtLSBTYW1lIGFzIGEgJSBiLiIpCitzcGFtMm8obmVnLCAibmVnKGEpIC0tIFNhbWUgYXMgLWEuIikKK3NwYW0ybyhwb3MsICJwb3MoYSkgLS0gU2FtZSBhcyArYS4iKQorc3BhbTJvKGFicywgImFicyhhKSAtLSBTYW1lIGFzIGFicyhhKS4iKQorc3BhbTJvKGludiwgImludihhKSAtLSBTYW1lIGFzIH5hLiIpCitzcGFtMm8oaW52ZXJ0LCAiaW52ZXJ0KGEpIC0tIFNhbWUgYXMgfmEuIikKK3NwYW0yKGxzaGlmdCwgImxzaGlmdChhLCBiKSAtLSBTYW1lIGFzIGEgPDwgYi4iKQorc3BhbTIocnNoaWZ0LCAicnNoaWZ0KGEsIGIpIC0tIFNhbWUgYXMgYSA+PiBiLiIpCitzcGFtMm8obm90XywgIm5vdF8oYSkgLS0gU2FtZSBhcyBub3QgYS4iKQorc3BhbTIoYW5kXywgImFuZF8oYSwgYikgLS0gU2FtZSBhcyBhICYgYi4iKQorc3BhbTIoeG9yLCAieG9yKGEsIGIpIC0tIFNhbWUgYXMgYSBeIGIuIikKK3NwYW0yKG9yXywgIm9yXyhhLCBiKSAtLSBTYW1lIGFzIGEgfCBiLiIpCitzcGFtMihpYWRkLCAiYSA9IGlhZGQoYSwgYikgLS0gU2FtZSBhcyBhICs9IGIuIikKK3NwYW0yKGlzdWIsICJhID0gaXN1YihhLCBiKSAtLSBTYW1lIGFzIGEgLT0gYi4iKQorc3BhbTIoaW11bCwgImEgPSBpbXVsKGEsIGIpIC0tIFNhbWUgYXMgYSAqPSBiLiIpCitzcGFtMihpZmxvb3JkaXYsICJhID0gaWZsb29yZGl2KGEsIGIpIC0tIFNhbWUgYXMgYSAvLz0gYi4iKQorc3BhbTIoaXRydWVkaXYsICJhID0gaXRydWVkaXYoYSwgYikgLS0gU2FtZSBhcyBhIC89IGIiKQorc3BhbTIoaW1vZCwgImEgPSBpbW9kKGEsIGIpIC0tIFNhbWUgYXMgYSAlPSBiLiIpCitzcGFtMihpbHNoaWZ0LCAiYSA9IGlsc2hpZnQoYSwgYikgLS0gU2FtZSBhcyBhIDw8PSBiLiIpCitzcGFtMihpcnNoaWZ0LCAiYSA9IGlyc2hpZnQoYSwgYikgLS0gU2FtZSBhcyBhID4+PSBiLiIpCitzcGFtMihpYW5kLCAiYSA9IGlhbmQoYSwgYikgLS0gU2FtZSBhcyBhICY9IGIuIikKK3NwYW0yKGl4b3IsICJhID0gaXhvcihhLCBiKSAtLSBTYW1lIGFzIGEgXj0gYi4iKQorc3BhbTIoaW9yLCAiYSA9IGlvcihhLCBiKSAtLSBTYW1lIGFzIGEgfD0gYi4iKQorc3BhbTIoY29uY2F0LAogICJjb25jYXQoYSwgYikgLS0gU2FtZSBhcyBhICsgYiwgZm9yIGEgYW5kIGIgc2VxdWVuY2VzLiIpCi1zcGFtMihpY29uY2F0LF9faWNvbmNhdF9fLAorc3BhbTIoaWNvbmNhdCwKICAiYSA9IGljb25jYXQoYSwgYikgLS0gU2FtZSBhcyBhICs9IGIsIGZvciBhIGFuZCBiIHNlcXVlbmNlcy4iKQotc3BhbTIoZ2V0aXRlbSxfX2dldGl0ZW1fXywKK3NwYW0yKGdldGl0ZW0sCiAgImdldGl0ZW0oYSwgYikgLS0gU2FtZSBhcyBhW2JdLiIpCi1zcGFtMihzZXRpdGVtLF9fc2V0aXRlbV9fLAorc3BhbTIoc2V0aXRlbSwKICAic2V0aXRlbShhLCBiLCBjKSAtLSBTYW1lIGFzIGFbYl0gPSBjLiIpCi1zcGFtMihkZWxpdGVtLF9fZGVsaXRlbV9fLAorc3BhbTIoZGVsaXRlbSwKICAiZGVsaXRlbShhLCBiKSAtLSBTYW1lIGFzIGRlbCBhW2JdLiIpCi1zcGFtMihwb3csX19wb3dfXywgInBvdyhhLCBiKSAtLSBTYW1lIGFzIGEgKiogYi4iKQotc3BhbTIoaXBvdyxfX2lwb3dfXywgImEgPSBpcG93KGEsIGIpIC0tIFNhbWUgYXMgYSAqKj0gYi4iKQotc3BhbTIobHQsX19sdF9fLCAibHQoYSwgYikgLS0gU2FtZSBhcyBhPGIuIikKLXNwYW0yKGxlLF9fbGVfXywgImxlKGEsIGIpIC0tIFNhbWUgYXMgYTw9Yi4iKQotc3BhbTIoZXEsX19lcV9fLCAiZXEoYSwgYikgLS0gU2FtZSBhcyBhPT1iLiIpCi1zcGFtMihuZSxfX25lX18sICJuZShhLCBiKSAtLSBTYW1lIGFzIGEhPWIuIikKLXNwYW0yKGd0LF9fZ3RfXywgImd0KGEsIGIpIC0tIFNhbWUgYXMgYT5iLiIpCi1zcGFtMihnZSxfX2dlX18sICJnZShhLCBiKSAtLSBTYW1lIGFzIGE+PWIuIikKK3NwYW0yKHBvdywgInBvdyhhLCBiKSAtLSBTYW1lIGFzIGEgKiogYi4iKQorc3BhbTIoaXBvdywgImEgPSBpcG93KGEsIGIpIC0tIFNhbWUgYXMgYSAqKj0gYi4iKQorc3BhbTIobHQsICJsdChhLCBiKSAtLSBTYW1lIGFzIGE8Yi4iKQorc3BhbTIobGUsICJsZShhLCBiKSAtLSBTYW1lIGFzIGE8PWIuIikKK3NwYW0yKGVxLCAiZXEoYSwgYikgLS0gU2FtZSBhcyBhPT1iLiIpCitzcGFtMihuZSwgIm5lKGEsIGIpIC0tIFNhbWUgYXMgYSE9Yi4iKQorc3BhbTIoZ3QsICJndChhLCBiKSAtLSBTYW1lIGFzIGE+Yi4iKQorc3BhbTIoZ2UsICJnZShhLCBiKSAtLSBTYW1lIGFzIGE+PWIuIikKIAogICAgIHsiX2NvbXBhcmVfZGlnZXN0IiwgKFB5Q0Z1bmN0aW9uKWNvbXBhcmVfZGlnZXN0LCBNRVRIX1ZBUkFSR1MsCiAgICAgIGNvbXBhcmVfZGlnZXN0X19kb2NfX30sCisgICAgIHsibGVuZ3RoX2hpbnQiLCAoUHlDRnVuY3Rpb24pbGVuZ3RoX2hpbnQsIE1FVEhfVkFSQVJHUywKKyAgICAgbGVuZ3RoX2hpbnRfX2RvY19ffSwKICAgICB7TlVMTCwgICAgICAgICAgICAgIE5VTEx9ICAgICAgICAgICAvKiBzZW50aW5lbCAqLwogCiB9OwpAQCAtODkyLDEyICs5MTcsMTIgQEAKIH07CiAKIAotLyogSW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gZm9yIHRoZSBtb2R1bGUgKCptdXN0KiBiZSBjYWxsZWQgUHlJbml0X29wZXJhdG9yKSAqLworLyogSW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gZm9yIHRoZSBtb2R1bGUgKCptdXN0KiBiZSBjYWxsZWQgUHlJbml0X19vcGVyYXRvcikgKi8KIAogCiBzdGF0aWMgc3RydWN0IFB5TW9kdWxlRGVmIG9wZXJhdG9ybW9kdWxlID0gewogICAgIFB5TW9kdWxlRGVmX0hFQURfSU5JVCwKLSAgICAib3BlcmF0b3IiLAorICAgICJfb3BlcmF0b3IiLAogICAgIG9wZXJhdG9yX2RvYywKICAgICAtMSwKICAgICBvcGVyYXRvcl9tZXRob2RzLApAQCAtOTA4LDcgKzkzMyw3IEBACiB9OwogCiBQeU1PRElOSVRfRlVOQwotUHlJbml0X29wZXJhdG9yKHZvaWQpCitQeUluaXRfX29wZXJhdG9yKHZvaWQpCiB7CiAgICAgUHlPYmplY3QgKm07CiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3BpY2tsZS5jIGIvTW9kdWxlcy9fcGlja2xlLmMKaW5kZXggZWM4YmQ2Yy4uYzM1N2RjYyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fcGlja2xlLmMKKysrIGIvTW9kdWxlcy9fcGlja2xlLmMKQEAgLTQsOSArNCwxOSBAQAogUHlEb2NfU1RSVkFSKHBpY2tsZV9tb2R1bGVfZG9jLAogIk9wdGltaXplZCBDIGltcGxlbWVudGF0aW9uIGZvciB0aGUgUHl0aG9uIHBpY2tsZSBtb2R1bGUuIik7CiAKKy8qW2NsaW5pYyBpbnB1dF0KK291dHB1dCBwcmVzZXQgZmlsZQorbW9kdWxlIF9waWNrbGUKK2NsYXNzIF9waWNrbGUuUGlja2xlciAiUGlja2xlck9iamVjdCAqIiAiJlBpY2tsZXJfVHlwZSIKK2NsYXNzIF9waWNrbGUuUGlja2xlck1lbW9Qcm94eSAiUGlja2xlck1lbW9Qcm94eU9iamVjdCAqIiAiJlBpY2tsZXJNZW1vUHJveHlUeXBlIgorY2xhc3MgX3BpY2tsZS5VbnBpY2tsZXIgIlVucGlja2xlck9iamVjdCAqIiAiJlVucGlja2xlcl9UeXBlIgorY2xhc3MgX3BpY2tsZS5VbnBpY2tsZXJNZW1vUHJveHkgIlVucGlja2xlck1lbW9Qcm94eU9iamVjdCAqIiAiJlVucGlja2xlck1lbW9Qcm94eVR5cGUiCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZGEzOWEzZWU1ZTZiNGIwZCBpbnB1dD0xMWM0NTI0OGE0MWRkM2ZjXSovCisKIC8qIEJ1bXAgdGhpcyB3aGVuIG5ldyBvcGNvZGVzIGFyZSBhZGRlZCB0byB0aGUgcGlja2xlIHByb3RvY29sLiAqLwogZW51bSB7Ci0gICAgSElHSEVTVF9QUk9UT0NPTCA9IDMsCisgICAgSElHSEVTVF9QUk9UT0NPTCA9IDQsCiAgICAgREVGQVVMVF9QUk9UT0NPTCA9IDMKIH07CiAKQEAgLTcxLDE4ICs4MSwyMCBAQAogCiAgICAgLyogUHJvdG9jb2wgMyAoUHl0aG9uIDMueCkgKi8KICAgICBCSU5CWVRFUyAgICAgICA9ICdCJywKLSAgICBTSE9SVF9CSU5CWVRFUyA9ICdDJwotfTsKKyAgICBTSE9SVF9CSU5CWVRFUyA9ICdDJywKIAotLyogVGhlc2UgYXJlbid0IG9wY29kZXMgLS0gdGhleSdyZSB3YXlzIHRvIHBpY2tsZSBib29scyBiZWZvcmUgcHJvdG9jb2wgMgotICogc28gdGhhdCB1bnBpY2tsZXJzIHdyaXR0ZW4gYmVmb3JlIGJvb2xzIHdlcmUgaW50cm9kdWNlZCB1bnBpY2tsZSB0aGVtCi0gKiBhcyBpbnRzLCBidXQgdW5waWNrbGVycyBhZnRlciBjYW4gcmVjb2duaXplIHRoYXQgYm9vbHMgd2VyZSBpbnRlbmRlZC4KLSAqIE5vdGUgdGhhdCBwcm90b2NvbCAyIGFkZGVkIGRpcmVjdCB3YXlzIHRvIHBpY2tsZSBib29scy4KLSAqLwotI3VuZGVmIFRSVUUKLSNkZWZpbmUgVFJVRSAgIkkwMVxuIgotI3VuZGVmIEZBTFNFCi0jZGVmaW5lIEZBTFNFICJJMDBcbiIKKyAgICAvKiBQcm90b2NvbCA0ICovCisgICAgU0hPUlRfQklOVU5JQ09ERSA9ICdceDhjJywKKyAgICBCSU5VTklDT0RFOCAgICAgID0gJ1x4OGQnLAorICAgIEJJTkJZVEVTOCAgICAgICAgPSAnXHg4ZScsCisgICAgRU1QVFlfU0VUICAgICAgICA9ICdceDhmJywKKyAgICBBRERJVEVNUyAgICAgICAgID0gJ1x4OTAnLAorICAgIEZST1pFTlNFVCAgICAgICAgPSAnXHg5MScsCisgICAgTkVXT0JKX0VYICAgICAgICA9ICdceDkyJywKKyAgICBTVEFDS19HTE9CQUwgICAgID0gJ1x4OTMnLAorICAgIE1FTU9JWkUgICAgICAgICAgPSAnXHg5NCcsCisgICAgRlJBTUUgICAgICAgICAgICA9ICdceDk1JworfTsKIAogZW51bSB7CiAgICAvKiBLZWVwIGluIHN5bmNoIHdpdGggcGlja2xlLlBpY2tsZXIuX0JBVENIU0laRS4gIFRoaXMgaXMgaG93IG1hbnkgZWxlbWVudHMKQEAgLTk4LDQ4ICsxMTAsMjQ2IEBACiAgICAgLyogSW5pdGlhbCBzaXplIG9mIHRoZSB3cml0ZSBidWZmZXIgb2YgUGlja2xlci4gKi8KICAgICBXUklURV9CVUZfU0laRSA9IDQwOTYsCiAKLSAgICAvKiBNYXhpbXVtIHNpemUgb2YgdGhlIHdyaXRlIGJ1ZmZlciBvZiBQaWNrbGVyIHdoZW4gcGlja2xpbmcgdG8gYQotICAgICAgIHN0cmVhbS4gIFRoaXMgaXMgaWdub3JlZCBmb3IgaW4tbWVtb3J5IHBpY2tsaW5nLiAqLwotICAgIE1BWF9XUklURV9CVUZfU0laRSA9IDY0ICogMTAyNCwKLQogICAgIC8qIFByZWZldGNoIHNpemUgd2hlbiB1bnBpY2tsaW5nIChkaXNhYmxlZCBvbiB1bnBlZWthYmxlIHN0cmVhbXMpICovCi0gICAgUFJFRkVUQ0ggPSA4MTkyICogMTYKKyAgICBQUkVGRVRDSCA9IDgxOTIgKiAxNiwKKworICAgIEZSQU1FX1NJWkVfVEFSR0VUID0gNjQgKiAxMDI0LAorCisgICAgRlJBTUVfSEVBREVSX1NJWkUgPSA5CiB9OwogCi0vKiBFeGNlcHRpb24gY2xhc3NlcyBmb3IgcGlja2xlLiBUaGVzZSBzaG91bGQgb3ZlcnJpZGUgdGhlIG9uZXMgZGVmaW5lZCBpbgotICAgcGlja2xlLnB5LCB3aGVuIHRoZSBDLW9wdGltaXplZCBQaWNrbGVyIGFuZCBVbnBpY2tsZXIgYXJlIHVzZWQuICovCi1zdGF0aWMgUHlPYmplY3QgKlBpY2tsZUVycm9yID0gTlVMTDsKLXN0YXRpYyBQeU9iamVjdCAqUGlja2xpbmdFcnJvciA9IE5VTEw7Ci1zdGF0aWMgUHlPYmplY3QgKlVucGlja2xpbmdFcnJvciA9IE5VTEw7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotLyogY29weXJlZy5kaXNwYXRjaF90YWJsZSwge3R5cGVfb2JqZWN0OiBwaWNrbGluZ19mdW5jdGlvbn0gKi8KLXN0YXRpYyBQeU9iamVjdCAqZGlzcGF0Y2hfdGFibGUgPSBOVUxMOwotLyogRm9yIEVYVFsxMjRdIG9wY29kZXMuICovCi0vKiBjb3B5cmVnLl9leHRlbnNpb25fcmVnaXN0cnksIHsobW9kdWxlX25hbWUsIGZ1bmN0aW9uX25hbWUpOiBjb2RlfSAqLwotc3RhdGljIFB5T2JqZWN0ICpleHRlbnNpb25fcmVnaXN0cnkgPSBOVUxMOwotLyogY29weXJlZy5faW52ZXJ0ZWRfcmVnaXN0cnksIHtjb2RlOiAobW9kdWxlX25hbWUsIGZ1bmN0aW9uX25hbWUpfSAqLwotc3RhdGljIFB5T2JqZWN0ICppbnZlcnRlZF9yZWdpc3RyeSA9IE5VTEw7Ci0vKiBjb3B5cmVnLl9leHRlbnNpb25fY2FjaGUsIHtjb2RlOiBvYmplY3R9ICovCi1zdGF0aWMgUHlPYmplY3QgKmV4dGVuc2lvbl9jYWNoZSA9IE5VTEw7CisvKiBTdGF0ZSBvZiB0aGUgcGlja2xlIG1vZHVsZSwgcGVyIFBFUCAzMTIxLiAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgIC8qIEV4Y2VwdGlvbiBjbGFzc2VzIGZvciBwaWNrbGUuICovCisgICAgUHlPYmplY3QgKlBpY2tsZUVycm9yOworICAgIFB5T2JqZWN0ICpQaWNrbGluZ0Vycm9yOworICAgIFB5T2JqZWN0ICpVbnBpY2tsaW5nRXJyb3I7CiAKLS8qIF9jb21wYXRfcGlja2xlLk5BTUVfTUFQUElORywgeyhvbGRtb2R1bGUsIG9sZG5hbWUpOiAobmV3bW9kdWxlLCBuZXduYW1lKX0gKi8KLXN0YXRpYyBQeU9iamVjdCAqbmFtZV9tYXBwaW5nXzJ0bzMgPSBOVUxMOwotLyogX2NvbXBhdF9waWNrbGUuSU1QT1JUX01BUFBJTkcsIHtvbGRtb2R1bGU6IG5ld21vZHVsZX0gKi8KLXN0YXRpYyBQeU9iamVjdCAqaW1wb3J0X21hcHBpbmdfMnRvMyA9IE5VTEw7Ci0vKiBTYW1lLCBidXQgd2l0aCBSRVZFUlNFX05BTUVfTUFQUElORyAvIFJFVkVSU0VfSU1QT1JUX01BUFBJTkcgKi8KLXN0YXRpYyBQeU9iamVjdCAqbmFtZV9tYXBwaW5nXzN0bzIgPSBOVUxMOwotc3RhdGljIFB5T2JqZWN0ICppbXBvcnRfbWFwcGluZ18zdG8yID0gTlVMTDsKKyAgICAvKiBjb3B5cmVnLmRpc3BhdGNoX3RhYmxlLCB7dHlwZV9vYmplY3Q6IHBpY2tsaW5nX2Z1bmN0aW9ufSAqLworICAgIFB5T2JqZWN0ICpkaXNwYXRjaF90YWJsZTsKIAotLyogWFhYOiBBcmUgdGhlc2UgcmVhbGx5IG5lc2Nlc3Nhcnk/ICovCi0vKiBBcyB0aGUgbmFtZSBzYXlzLCBhbiBlbXB0eSB0dXBsZS4gKi8KLXN0YXRpYyBQeU9iamVjdCAqZW1wdHlfdHVwbGUgPSBOVUxMOwotLyogRm9yIGxvb2tpbmcgdXAgbmFtZSBwYWlycyBpbiBjb3B5cmVnLl9leHRlbnNpb25fcmVnaXN0cnkuICovCi1zdGF0aWMgUHlPYmplY3QgKnR3b190dXBsZSA9IE5VTEw7CisgICAgLyogRm9yIHRoZSBleHRlbnNpb24gb3Bjb2RlcyBFWFQxLCBFWFQyIGFuZCBFWFQ0LiAqLworCisgICAgLyogY29weXJlZy5fZXh0ZW5zaW9uX3JlZ2lzdHJ5LCB7KG1vZHVsZV9uYW1lLCBmdW5jdGlvbl9uYW1lKTogY29kZX0gKi8KKyAgICBQeU9iamVjdCAqZXh0ZW5zaW9uX3JlZ2lzdHJ5OworICAgIC8qIGNvcHlyZWcuX2V4dGVuc2lvbl9jYWNoZSwge2NvZGU6IG9iamVjdH0gKi8KKyAgICBQeU9iamVjdCAqZXh0ZW5zaW9uX2NhY2hlOworICAgIC8qIGNvcHlyZWcuX2ludmVydGVkX3JlZ2lzdHJ5LCB7Y29kZTogKG1vZHVsZV9uYW1lLCBmdW5jdGlvbl9uYW1lKX0gKi8KKyAgICBQeU9iamVjdCAqaW52ZXJ0ZWRfcmVnaXN0cnk7CisKKyAgICAvKiBJbXBvcnQgbWFwcGluZ3MgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBQeXRob24gMi54ICovCisKKyAgICAvKiBfY29tcGF0X3BpY2tsZS5OQU1FX01BUFBJTkcsCisgICAgICAgeyhvbGRtb2R1bGUsIG9sZG5hbWUpOiAobmV3bW9kdWxlLCBuZXduYW1lKX0gKi8KKyAgICBQeU9iamVjdCAqbmFtZV9tYXBwaW5nXzJ0bzM7CisgICAgLyogX2NvbXBhdF9waWNrbGUuSU1QT1JUX01BUFBJTkcsIHtvbGRtb2R1bGU6IG5ld21vZHVsZX0gKi8KKyAgICBQeU9iamVjdCAqaW1wb3J0X21hcHBpbmdfMnRvMzsKKyAgICAvKiBTYW1lLCBidXQgd2l0aCBSRVZFUlNFX05BTUVfTUFQUElORyAvIFJFVkVSU0VfSU1QT1JUX01BUFBJTkcgKi8KKyAgICBQeU9iamVjdCAqbmFtZV9tYXBwaW5nXzN0bzI7CisgICAgUHlPYmplY3QgKmltcG9ydF9tYXBwaW5nXzN0bzI7CisKKyAgICAvKiBjb2RlY3MuZW5jb2RlLCB1c2VkIGZvciBzYXZpbmcgYnl0ZXMgaW4gb2xkZXIgcHJvdG9jb2xzICovCisgICAgUHlPYmplY3QgKmNvZGVjc19lbmNvZGU7Cit9IFBpY2tsZVN0YXRlOworCisvKiBGb3J3YXJkIGRlY2xhcmF0aW9uIG9mIHRoZSBfcGlja2xlIG1vZHVsZSBkZWZpbml0aW9uLiAqLworc3RhdGljIHN0cnVjdCBQeU1vZHVsZURlZiBfcGlja2xlbW9kdWxlOworCisvKiBHaXZlbiBhIG1vZHVsZSBvYmplY3QsIGdldCBpdHMgcGVyLW1vZHVsZSBzdGF0ZS4gKi8KK3N0YXRpYyBQaWNrbGVTdGF0ZSAqCitfUGlja2xlX0dldFN0YXRlKFB5T2JqZWN0ICptb2R1bGUpCit7CisgICAgcmV0dXJuIChQaWNrbGVTdGF0ZSAqKVB5TW9kdWxlX0dldFN0YXRlKG1vZHVsZSk7Cit9CisKKy8qIEZpbmQgdGhlIG1vZHVsZSBpbnN0YW5jZSBpbXBvcnRlZCBpbiB0aGUgY3VycmVudGx5IHJ1bm5pbmcgc3ViLWludGVycHJldGVyCisgICBhbmQgZ2V0IGl0cyBzdGF0ZS4gKi8KK3N0YXRpYyBQaWNrbGVTdGF0ZSAqCitfUGlja2xlX0dldEdsb2JhbFN0YXRlKHZvaWQpCit7CisgICAgcmV0dXJuIF9QaWNrbGVfR2V0U3RhdGUoUHlTdGF0ZV9GaW5kTW9kdWxlKCZfcGlja2xlbW9kdWxlKSk7Cit9CisKKy8qIENsZWFyIHRoZSBnaXZlbiBwaWNrbGUgbW9kdWxlIHN0YXRlLiAqLworc3RhdGljIHZvaWQKK19QaWNrbGVfQ2xlYXJTdGF0ZShQaWNrbGVTdGF0ZSAqc3QpCit7CisgICAgUHlfQ0xFQVIoc3QtPlBpY2tsZUVycm9yKTsKKyAgICBQeV9DTEVBUihzdC0+UGlja2xpbmdFcnJvcik7CisgICAgUHlfQ0xFQVIoc3QtPlVucGlja2xpbmdFcnJvcik7CisgICAgUHlfQ0xFQVIoc3QtPmRpc3BhdGNoX3RhYmxlKTsKKyAgICBQeV9DTEVBUihzdC0+ZXh0ZW5zaW9uX3JlZ2lzdHJ5KTsKKyAgICBQeV9DTEVBUihzdC0+ZXh0ZW5zaW9uX2NhY2hlKTsKKyAgICBQeV9DTEVBUihzdC0+aW52ZXJ0ZWRfcmVnaXN0cnkpOworICAgIFB5X0NMRUFSKHN0LT5uYW1lX21hcHBpbmdfMnRvMyk7CisgICAgUHlfQ0xFQVIoc3QtPmltcG9ydF9tYXBwaW5nXzJ0bzMpOworICAgIFB5X0NMRUFSKHN0LT5uYW1lX21hcHBpbmdfM3RvMik7CisgICAgUHlfQ0xFQVIoc3QtPmltcG9ydF9tYXBwaW5nXzN0bzIpOworICAgIFB5X0NMRUFSKHN0LT5jb2RlY3NfZW5jb2RlKTsKK30KKworLyogSW5pdGlhbGl6ZSB0aGUgZ2l2ZW4gcGlja2xlIG1vZHVsZSBzdGF0ZS4gKi8KK3N0YXRpYyBpbnQKK19QaWNrbGVfSW5pdFN0YXRlKFBpY2tsZVN0YXRlICpzdCkKK3sKKyAgICBQeU9iamVjdCAqY29weXJlZyA9IE5VTEw7CisgICAgUHlPYmplY3QgKmNvbXBhdF9waWNrbGUgPSBOVUxMOworICAgIFB5T2JqZWN0ICpjb2RlY3MgPSBOVUxMOworCisgICAgY29weXJlZyA9IFB5SW1wb3J0X0ltcG9ydE1vZHVsZSgiY29weXJlZyIpOworICAgIGlmICghY29weXJlZykKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICBzdC0+ZGlzcGF0Y2hfdGFibGUgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKGNvcHlyZWcsICJkaXNwYXRjaF90YWJsZSIpOworICAgIGlmICghc3QtPmRpc3BhdGNoX3RhYmxlKQorICAgICAgICBnb3RvIGVycm9yOworICAgIGlmICghUHlEaWN0X0NoZWNrRXhhY3Qoc3QtPmRpc3BhdGNoX3RhYmxlKSkgeworICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfUnVudGltZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgImNvcHlyZWcuZGlzcGF0Y2hfdGFibGUgc2hvdWxkIGJlIGEgZGljdCwgbm90ICUuMjAwcyIsCisgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKHN0LT5kaXNwYXRjaF90YWJsZSktPnRwX25hbWUpOworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKyAgICBzdC0+ZXh0ZW5zaW9uX3JlZ2lzdHJ5ID0gXAorICAgICAgICBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKGNvcHlyZWcsICJfZXh0ZW5zaW9uX3JlZ2lzdHJ5Iik7CisgICAgaWYgKCFzdC0+ZXh0ZW5zaW9uX3JlZ2lzdHJ5KQorICAgICAgICBnb3RvIGVycm9yOworICAgIGlmICghUHlEaWN0X0NoZWNrRXhhY3Qoc3QtPmV4dGVuc2lvbl9yZWdpc3RyeSkpIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1J1bnRpbWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICJjb3B5cmVnLl9leHRlbnNpb25fcmVnaXN0cnkgc2hvdWxkIGJlIGEgZGljdCwgIgorICAgICAgICAgICAgICAgICAgICAgIm5vdCAlLjIwMHMiLCBQeV9UWVBFKHN0LT5leHRlbnNpb25fcmVnaXN0cnkpLT50cF9uYW1lKTsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisgICAgc3QtPmludmVydGVkX3JlZ2lzdHJ5ID0gXAorICAgICAgICBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKGNvcHlyZWcsICJfaW52ZXJ0ZWRfcmVnaXN0cnkiKTsKKyAgICBpZiAoIXN0LT5pbnZlcnRlZF9yZWdpc3RyeSkKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICBpZiAoIVB5RGljdF9DaGVja0V4YWN0KHN0LT5pbnZlcnRlZF9yZWdpc3RyeSkpIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1J1bnRpbWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICJjb3B5cmVnLl9pbnZlcnRlZF9yZWdpc3RyeSBzaG91bGQgYmUgYSBkaWN0LCAiCisgICAgICAgICAgICAgICAgICAgICAibm90ICUuMjAwcyIsIFB5X1RZUEUoc3QtPmludmVydGVkX3JlZ2lzdHJ5KS0+dHBfbmFtZSk7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorICAgIHN0LT5leHRlbnNpb25fY2FjaGUgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKGNvcHlyZWcsICJfZXh0ZW5zaW9uX2NhY2hlIik7CisgICAgaWYgKCFzdC0+ZXh0ZW5zaW9uX2NhY2hlKQorICAgICAgICBnb3RvIGVycm9yOworICAgIGlmICghUHlEaWN0X0NoZWNrRXhhY3Qoc3QtPmV4dGVuc2lvbl9jYWNoZSkpIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1J1bnRpbWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICJjb3B5cmVnLl9leHRlbnNpb25fY2FjaGUgc2hvdWxkIGJlIGEgZGljdCwgIgorICAgICAgICAgICAgICAgICAgICAgIm5vdCAlLjIwMHMiLCBQeV9UWVBFKHN0LT5leHRlbnNpb25fY2FjaGUpLT50cF9uYW1lKTsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisgICAgUHlfQ0xFQVIoY29weXJlZyk7CisKKyAgICAvKiBMb2FkIHRoZSAyLnggLT4gMy54IHN0ZGxpYiBtb2R1bGUgbWFwcGluZyB0YWJsZXMgKi8KKyAgICBjb21wYXRfcGlja2xlID0gUHlJbXBvcnRfSW1wb3J0TW9kdWxlKCJfY29tcGF0X3BpY2tsZSIpOworICAgIGlmICghY29tcGF0X3BpY2tsZSkKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICBzdC0+bmFtZV9tYXBwaW5nXzJ0bzMgPSBcCisgICAgICAgIFB5T2JqZWN0X0dldEF0dHJTdHJpbmcoY29tcGF0X3BpY2tsZSwgIk5BTUVfTUFQUElORyIpOworICAgIGlmICghc3QtPm5hbWVfbWFwcGluZ18ydG8zKQorICAgICAgICBnb3RvIGVycm9yOworICAgIGlmICghUHlEaWN0X0NoZWNrRXhhY3Qoc3QtPm5hbWVfbWFwcGluZ18ydG8zKSkgeworICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfUnVudGltZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgIl9jb21wYXRfcGlja2xlLk5BTUVfTUFQUElORyBzaG91bGQgYmUgYSBkaWN0LCBub3QgJS4yMDBzIiwKKyAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUoc3QtPm5hbWVfbWFwcGluZ18ydG8zKS0+dHBfbmFtZSk7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorICAgIHN0LT5pbXBvcnRfbWFwcGluZ18ydG8zID0gXAorICAgICAgICBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKGNvbXBhdF9waWNrbGUsICJJTVBPUlRfTUFQUElORyIpOworICAgIGlmICghc3QtPmltcG9ydF9tYXBwaW5nXzJ0bzMpCisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgaWYgKCFQeURpY3RfQ2hlY2tFeGFjdChzdC0+aW1wb3J0X21hcHBpbmdfMnRvMykpIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1J1bnRpbWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICJfY29tcGF0X3BpY2tsZS5JTVBPUlRfTUFQUElORyBzaG91bGQgYmUgYSBkaWN0LCAiCisgICAgICAgICAgICAgICAgICAgICAibm90ICUuMjAwcyIsIFB5X1RZUEUoc3QtPmltcG9ydF9tYXBwaW5nXzJ0bzMpLT50cF9uYW1lKTsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisgICAgLyogLi4uIGFuZCB0aGUgMy54IC0+IDIueCBtYXBwaW5nIHRhYmxlcyAqLworICAgIHN0LT5uYW1lX21hcHBpbmdfM3RvMiA9IFwKKyAgICAgICAgUHlPYmplY3RfR2V0QXR0clN0cmluZyhjb21wYXRfcGlja2xlLCAiUkVWRVJTRV9OQU1FX01BUFBJTkciKTsKKyAgICBpZiAoIXN0LT5uYW1lX21hcHBpbmdfM3RvMikKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICBpZiAoIVB5RGljdF9DaGVja0V4YWN0KHN0LT5uYW1lX21hcHBpbmdfM3RvMikpIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1J1bnRpbWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICJfY29tcGF0X3BpY2tsZS5SRVZFUlNFX05BTUVfTUFQUElORyBzaG91bGQgYmUgYSBkaWN0LCAiCisgICAgICAgICAgICAgICAgICAgICAibm90ICUuMjAwcyIsIFB5X1RZUEUoc3QtPm5hbWVfbWFwcGluZ18zdG8yKS0+dHBfbmFtZSk7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorICAgIHN0LT5pbXBvcnRfbWFwcGluZ18zdG8yID0gXAorICAgICAgICBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKGNvbXBhdF9waWNrbGUsICJSRVZFUlNFX0lNUE9SVF9NQVBQSU5HIik7CisgICAgaWYgKCFzdC0+aW1wb3J0X21hcHBpbmdfM3RvMikKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICBpZiAoIVB5RGljdF9DaGVja0V4YWN0KHN0LT5pbXBvcnRfbWFwcGluZ18zdG8yKSkgeworICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfUnVudGltZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgIl9jb21wYXRfcGlja2xlLlJFVkVSU0VfSU1QT1JUX01BUFBJTkcgc2hvdWxkIGJlIGEgZGljdCwgIgorICAgICAgICAgICAgICAgICAgICAgIm5vdCAlLjIwMHMiLCBQeV9UWVBFKHN0LT5pbXBvcnRfbWFwcGluZ18zdG8yKS0+dHBfbmFtZSk7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorICAgIFB5X0NMRUFSKGNvbXBhdF9waWNrbGUpOworCisgICAgY29kZWNzID0gUHlJbXBvcnRfSW1wb3J0TW9kdWxlKCJjb2RlY3MiKTsKKyAgICBpZiAoY29kZWNzID09IE5VTEwpCisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgc3QtPmNvZGVjc19lbmNvZGUgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKGNvZGVjcywgImVuY29kZSIpOworICAgIGlmIChzdC0+Y29kZWNzX2VuY29kZSA9PSBOVUxMKSB7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorICAgIGlmICghUHlDYWxsYWJsZV9DaGVjayhzdC0+Y29kZWNzX2VuY29kZSkpIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1J1bnRpbWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICJjb2RlY3MuZW5jb2RlIHNob3VsZCBiZSBhIGNhbGxhYmxlLCBub3QgJS4yMDBzIiwKKyAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUoc3QtPmNvZGVjc19lbmNvZGUpLT50cF9uYW1lKTsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisgICAgUHlfQ0xFQVIoY29kZWNzKTsKKworICAgIHJldHVybiAwOworCisgIGVycm9yOgorICAgIFB5X0NMRUFSKGNvcHlyZWcpOworICAgIFB5X0NMRUFSKGNvbXBhdF9waWNrbGUpOworICAgIFB5X0NMRUFSKGNvZGVjcyk7CisgICAgX1BpY2tsZV9DbGVhclN0YXRlKHN0KTsKKyAgICByZXR1cm4gLTE7Cit9CisKKy8qIEhlbHBlciBmb3IgY2FsbGluZyBhIGZ1bmN0aW9uIHdpdGggYSBzaW5nbGUgYXJndW1lbnQgcXVpY2tseS4KKworICAgVGhpcyBmdW5jdGlvbiBzdGVhbHMgdGhlIHJlZmVyZW5jZSBvZiB0aGUgZ2l2ZW4gYXJndW1lbnQuICovCitzdGF0aWMgUHlPYmplY3QgKgorX1BpY2tsZV9GYXN0Q2FsbChQeU9iamVjdCAqZnVuYywgUHlPYmplY3QgKm9iaikKK3sKKyAgICBQeU9iamVjdCAqcmVzdWx0OworICAgIFB5T2JqZWN0ICphcmdfdHVwbGUgPSBQeVR1cGxlX05ldygxKTsKKworICAgIC8qIE5vdGU6IHRoaXMgZnVuY3Rpb24gdXNlZCB0byByZXVzZSB0aGUgYXJndW1lbnQgdHVwbGUuIFRoaXMgdXNlZCB0byBnaXZlCisgICAgICAgYSBzbGlnaHQgcGVyZm9ybWFuY2UgYm9vc3Qgd2l0aCBvbGRlciBwaWNrbGUgaW1wbGVtZW50YXRpb25zIHdoZXJlIG1hbnkKKyAgICAgICB1bmJ1ZmZlcmVkIHJlYWRzIG9jY3VycmVkICh0aHVzIG5lZWRpbmcgbWFueSBmdW5jdGlvbiBjYWxscykuCisKKyAgICAgICBIb3dldmVyLCB0aGlzIG9wdGltaXphdGlvbiB3YXMgcmVtb3ZlZCBiZWNhdXNlIGl0IHdhcyB0b28gY29tcGxpY2F0ZWQKKyAgICAgICB0byBnZXQgcmlnaHQuIEl0IGFidXNlZCB0aGUgQyBBUEkgZm9yIHR1cGxlcyB0byBtdXRhdGUgdGhlbSB3aGljaCBsZWQKKyAgICAgICB0byBzdWJ0bGUgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBjb25jdXJyZW5jeSBidWdzLiBGdXJ0aGVybW9yZSwgdGhlCisgICAgICAgaW50cm9kdWN0aW9uIG9mIHByb3RvY29sIDQgYW5kIHRoZSBwcmVmZXRjaGluZyBvcHRpbWl6YXRpb24gdmlhIHBlZWsoKQorICAgICAgIHNpZ25pZmljYW50bHkgcmVkdWNlZCB0aGUgbnVtYmVyIG9mIGZ1bmN0aW9uIGNhbGxzIHdlIGRvLiBUaHVzLCB0aGUKKyAgICAgICBiZW5lZml0cyBiZWNhbWUgbWFyZ2luYWwgYXQgYmVzdC4gKi8KKworICAgIGlmIChhcmdfdHVwbGUgPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYob2JqKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIFB5VHVwbGVfU0VUX0lURU0oYXJnX3R1cGxlLCAwLCBvYmopOworICAgIHJlc3VsdCA9IFB5T2JqZWN0X0NhbGwoZnVuYywgYXJnX3R1cGxlLCBOVUxMKTsKKyAgICBQeV9DTEVBUihhcmdfdHVwbGUpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiBzdGF0aWMgaW50CiBzdGFja191bmRlcmZsb3codm9pZCkKIHsKLSAgICBQeUVycl9TZXRTdHJpbmcoVW5waWNrbGluZ0Vycm9yLCAidW5waWNrbGluZyBzdGFjayB1bmRlcmZsb3ciKTsKKyAgICBQaWNrbGVTdGF0ZSAqc3QgPSBfUGlja2xlX0dldEdsb2JhbFN0YXRlKCk7CisgICAgUHlFcnJfU2V0U3RyaW5nKHN0LT5VbnBpY2tsaW5nRXJyb3IsICJ1bnBpY2tsaW5nIHN0YWNrIHVuZGVyZmxvdyIpOwogICAgIHJldHVybiAtMTsKIH0KIApAQCAtMTY1LDcgKzM3NSw3IEBACiAgICAgUHlWYXJPYmplY3RfSEVBRF9JTklUKE5VTEwsIDApCiAgICAgIl9waWNrbGUuUGRhdGEiLCAgICAgICAgICAgICAgLyp0cF9uYW1lKi8KICAgICBzaXplb2YoUGRhdGEpLCAgICAgICAgICAgICAgICAvKnRwX2Jhc2ljc2l6ZSovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9pdGVtc2l6ZSovCisgICAgc2l6ZW9mKFB5T2JqZWN0ICopLCAgICAgICAgICAgLyp0cF9pdGVtc2l6ZSovCiAgICAgKGRlc3RydWN0b3IpUGRhdGFfZGVhbGxvYywgICAgLyp0cF9kZWFsbG9jKi8KIH07CiAKQEAgLTIzOSw3ICs0NDksOCBAQAogUGRhdGFfcG9wKFBkYXRhICpzZWxmKQogewogICAgIGlmIChQeV9TSVpFKHNlbGYpID09IDApIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFVucGlja2xpbmdFcnJvciwgImJhZCBwaWNrbGUgZGF0YSIpOworICAgICAgICBQaWNrbGVTdGF0ZSAqc3QgPSBfUGlja2xlX0dldEdsb2JhbFN0YXRlKCk7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhzdC0+VW5waWNrbGluZ0Vycm9yLCAiYmFkIHBpY2tsZSBkYXRhIik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICByZXR1cm4gc2VsZi0+ZGF0YVstLVB5X1NJWkUoc2VsZildOwpAQCAtMzE4LDcgKzUyOSw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpY2tsaW5nLiAqLwogICAgIFB5T2JqZWN0ICpwZXJzX2Z1bmM7ICAgICAgICAvKiBwZXJzaXN0ZW50X2lkKCkgbWV0aG9kLCBjYW4gYmUgTlVMTCAqLwogICAgIFB5T2JqZWN0ICpkaXNwYXRjaF90YWJsZTsgICAvKiBwcml2YXRlIGRpc3BhdGNoX3RhYmxlLCBjYW4gYmUgTlVMTCAqLwotICAgIFB5T2JqZWN0ICphcmc7CiAKICAgICBQeU9iamVjdCAqd3JpdGU7ICAgICAgICAgICAgLyogd3JpdGUoKSBtZXRob2Qgb2YgdGhlIG91dHB1dCBzdHJlYW0uICovCiAgICAgUHlPYmplY3QgKm91dHB1dF9idWZmZXI7ICAgIC8qIFdyaXRlIGludG8gYSBsb2NhbCBieXRlYXJyYXkgYnVmZmVyIGJlZm9yZQpAQCAtMzI3LDcgKzUzNywxMiBAQAogICAgIFB5X3NzaXplX3QgbWF4X291dHB1dF9sZW47ICAvKiBBbGxvY2F0aW9uIHNpemUgb2Ygb3V0cHV0X2J1ZmZlci4gKi8KICAgICBpbnQgcHJvdG87ICAgICAgICAgICAgICAgICAgLyogUGlja2xlIHByb3RvY29sIG51bWJlciwgPj0gMCAqLwogICAgIGludCBiaW47ICAgICAgICAgICAgICAgICAgICAvKiBCb29sZWFuLCB0cnVlIGlmIHByb3RvID4gMCAqLwotICAgIFB5X3NzaXplX3QgYnVmX3NpemU7ICAgICAgICAgICAgICAgLyogU2l6ZSBvZiB0aGUgY3VycmVudCBidWZmZXJlZCBwaWNrbGUgZGF0YSAqLworICAgIGludCBmcmFtaW5nOyAgICAgICAgICAgICAgICAvKiBUcnVlIHdoZW4gZnJhbWluZyBpcyBlbmFibGVkLCBwcm90byA+PSA0ICovCisgICAgUHlfc3NpemVfdCBmcmFtZV9zdGFydDsgICAgIC8qIFBvc2l0aW9uIGluIG91dHB1dF9idWZmZXIgd2hlcmUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIHRoZSBjdXJyZW50IGZyYW1lIGJlZ2lucy4gLTEgaWYgdGhlcmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgbm8gZnJhbWUgY3VycmVudGx5IG9wZW4uICovCisKKyAgICBQeV9zc2l6ZV90IGJ1Zl9zaXplOyAgICAgICAgLyogU2l6ZSBvZiB0aGUgY3VycmVudCBidWZmZXJlZCBwaWNrbGUgZGF0YSAqLwogICAgIGludCBmYXN0OyAgICAgICAgICAgICAgICAgICAvKiBFbmFibGUgZmFzdCBtb2RlIGlmIHNldCB0byBhIHRydWUgdmFsdWUuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBmYXN0IG1vZGUgZGlzYWJsZSB0aGUgdXNhZ2Ugb2YgbWVtbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlcmVmb3JlIHNwZWVkaW5nIHRoZSBwaWNrbGluZyBwcm9jZXNzIGJ5CkBAIC0zNDcsOSArNTYyLDkgQEAKICAgICAvKiBUaGUgdW5waWNrbGVyIG1lbW8gaXMganVzdCBhbiBhcnJheSBvZiBQeU9iamVjdCAqcy4gVXNpbmcgYSBkaWN0CiAgICAgICAgaXMgdW5uZWNlc3NhcnksIHNpbmNlIHRoZSBrZXlzIGFyZSBjb250aWd1b3VzIGludHMuICovCiAgICAgUHlPYmplY3QgKiptZW1vOwotICAgIFB5X3NzaXplX3QgbWVtb19zaXplOworICAgIFB5X3NzaXplX3QgbWVtb19zaXplOyAgICAgICAvKiBDYXBhY2l0eSBvZiB0aGUgbWVtbyBhcnJheSAqLworICAgIFB5X3NzaXplX3QgbWVtb19sZW47ICAgICAgICAvKiBOdW1iZXIgb2Ygb2JqZWN0cyBpbiB0aGUgbWVtbyAqLwogCi0gICAgUHlPYmplY3QgKmFyZzsKICAgICBQeU9iamVjdCAqcGVyc19mdW5jOyAgICAgICAgLyogcGVyc2lzdGVudF9sb2FkKCkgbWV0aG9kLCBjYW4gYmUgTlVMTC4gKi8KIAogICAgIFB5X2J1ZmZlciBidWZmZXI7CkBAIC0zNTgsNiArNTczLDcgQEAKICAgICBQeV9zc2l6ZV90IGlucHV0X2xlbjsKICAgICBQeV9zc2l6ZV90IG5leHRfcmVhZF9pZHg7CiAgICAgUHlfc3NpemVfdCBwcmVmZXRjaGVkX2lkeDsgIC8qIGluZGV4IG9mIGZpcnN0IHByZWZldGNoZWQgYnl0ZSAqLworCiAgICAgUHlPYmplY3QgKnJlYWQ7ICAgICAgICAgICAgIC8qIHJlYWQoKSBtZXRob2Qgb2YgdGhlIGlucHV0IHN0cmVhbS4gKi8KICAgICBQeU9iamVjdCAqcmVhZGxpbmU7ICAgICAgICAgLyogcmVhZGxpbmUoKSBtZXRob2Qgb2YgdGhlIGlucHV0IHN0cmVhbS4gKi8KICAgICBQeU9iamVjdCAqcGVlazsgICAgICAgICAgICAgLyogcGVlaygpIG1ldGhvZCBvZiB0aGUgaW5wdXQgc3RyZWFtLCBvciBOVUxMICovCkBAIC0zNzcsMTIgKzU5MywyMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbmFtZSBvZiBnbG9iYWxzIHBpY2tsZWQgYnkgUHl0aG9uIDIueC4gKi8KIH0gVW5waWNrbGVyT2JqZWN0OwogCit0eXBlZGVmIHN0cnVjdCB7CisgICAgUHlPYmplY3RfSEVBRAorICAgIFBpY2tsZXJPYmplY3QgKnBpY2tsZXI7IC8qIFBpY2tsZXIgd2hvc2UgbWVtbyB0YWJsZSB3ZSdyZSBwcm94eWluZy4gKi8KK30gIFBpY2tsZXJNZW1vUHJveHlPYmplY3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBQeU9iamVjdF9IRUFECisgICAgVW5waWNrbGVyT2JqZWN0ICp1bnBpY2tsZXI7Cit9IFVucGlja2xlck1lbW9Qcm94eU9iamVjdDsKKwogLyogRm9yd2FyZCBkZWNsYXJhdGlvbnMgKi8KIHN0YXRpYyBpbnQgc2F2ZShQaWNrbGVyT2JqZWN0ICosIFB5T2JqZWN0ICosIGludCk7CiBzdGF0aWMgaW50IHNhdmVfcmVkdWNlKFBpY2tsZXJPYmplY3QgKiwgUHlPYmplY3QgKiwgUHlPYmplY3QgKik7CiBzdGF0aWMgUHlUeXBlT2JqZWN0IFBpY2tsZXJfVHlwZTsKIHN0YXRpYyBQeVR5cGVPYmplY3QgVW5waWNrbGVyX1R5cGU7CiAKKyNpbmNsdWRlICJjbGluaWMvX3BpY2tsZS5jLmgiCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgQSBjdXN0b20gaGFzaHRhYmxlIG1hcHBpbmcgdm9pZCogdG8gUHl0aG9uIGludHMuIFRoaXMgaXMgdXNlZCBieSB0aGUgcGlja2xlcgpAQCAtNDM0LDYgKzY2MSw3IEBACiAgICAgbmV3LT5tdF90YWJsZSA9IFB5TWVtX05FVyhQeU1lbW9FbnRyeSwgc2VsZi0+bXRfYWxsb2NhdGVkKTsKICAgICBpZiAobmV3LT5tdF90YWJsZSA9PSBOVUxMKSB7CiAgICAgICAgIFB5TWVtX0ZSRUUobmV3KTsKKyAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIGZvciAoaSA9IDA7IGkgPCBzZWxmLT5tdF9hbGxvY2F0ZWQ7IGkrKykgewpAQCAtNTI3LDcgKzc1NSw3IEBACiAgICAgb2xkdGFibGUgPSBzZWxmLT5tdF90YWJsZTsKICAgICBzZWxmLT5tdF90YWJsZSA9IFB5TWVtX05FVyhQeU1lbW9FbnRyeSwgbmV3X3NpemUpOwogICAgIGlmIChzZWxmLT5tdF90YWJsZSA9PSBOVUxMKSB7Ci0gICAgICAgIFB5TWVtX0ZSRUUob2xkdGFibGUpOworICAgICAgICBzZWxmLT5tdF90YWJsZSA9IG9sZHRhYmxlOwogICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQpAQCAtNjAzLDYwICs4MzEsNiBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotLyogSGVscGVycyBmb3IgY3JlYXRpbmcgdGhlIGFyZ3VtZW50IHR1cGxlIHBhc3NlZCB0byBmdW5jdGlvbnMuIFRoaXMgaGFzIHRoZQotICAgcGVyZm9ybWFuY2UgYWR2YW50YWdlIG9mIGNhbGxpbmcgUHlUdXBsZV9OZXcoKSBvbmx5IG9uY2UuCi0KLSAgIFhYWChhdmFzc2Fsb3R0aSk6IElubGluZSBkaXJlY3RseSBpbiBfUGlja2xlcl9GYXN0Q2FsbCgpIGFuZAotICAgX1VucGlja2xlcl9GYXN0Q2FsbCgpLiAqLwotI2RlZmluZSBBUkdfVFVQKHNlbGYsIG9iaikgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBpZiAoKHNlbGYpLT5hcmcgfHwgKChzZWxmKS0+YXJnPVB5VHVwbGVfTmV3KDEpKSkgeyAgXAotICAgICAgICAgICAgUHlfWERFQ1JFRihQeVR1cGxlX0dFVF9JVEVNKChzZWxmKS0+YXJnLCAwKSk7ICAgXAotICAgICAgICAgICAgUHlUdXBsZV9TRVRfSVRFTSgoc2VsZiktPmFyZywgMCwgKG9iaikpOyAgICAgICAgXAotICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgUHlfREVDUkVGKChvYmopKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gd2hpbGUgKDApCi0KLSNkZWZpbmUgRlJFRV9BUkdfVFVQKHNlbGYpIGRvIHsgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgaWYgKChzZWxmKS0+YXJnLT5vYl9yZWZjbnQgPiAxKSAgICAgICAgIFwKLSAgICAgICAgICAgIFB5X0NMRUFSKChzZWxmKS0+YXJnKTsgICAgICAgICAgICAgIFwKLSAgICB9IHdoaWxlICgwKQotCi0vKiBBIHRlbXBvcmFyeSBjbGVhbmVyIEFQSSBmb3IgZmFzdCBzaW5nbGUgYXJndW1lbnQgZnVuY3Rpb24gY2FsbC4KLQotICAgWFhYOiBEb2VzIGNhY2hpbmcgdGhlIGFyZ3VtZW50IHR1cGxlIHByb3ZpZGVzIGFueSByZWFsIHBlcmZvcm1hbmNlIGJlbmVmaXRzPwotCi0gICBBIHF1aWNrIGJlbmNobWFyaywgb24gYSAyLjBHSHogQXRobG9uNjQgMzIwMCsgcnVubmluZyBMaW51eCAyLjYuMjQgd2l0aAotICAgZ2xpYmMgMi43LCB0ZWxscyBtZSB0aGF0IGl0IHRha2VzIHJvdWdobHkgMjAsMDAwLDAwMCBQeVR1cGxlX05ldygxKSBjYWxscwotICAgd2hlbiB0aGUgdHVwbGUgaXMgcmV0cmlldmVkIGZyb20gdGhlIGZyZWVsaXN0IChpLmUsIGNhbGwgUHlUdXBsZV9OZXcoKSB0aGVuCi0gICBpbW1lZGlhdGVseSBERUNSRUYgaXQpIGFuZCAxLDIwMCwwMDAgY2FsbHMgd2hlbiBhbGxvY2F0aW5nIGJyYW5kIG5ldyB0dXBsZXMKLSAgIChpLmUsIGNhbGwgUHlUdXBsZV9OZXcoKSBhbmQgc3RvcmUgdGhlIHJldHVybmVkIHZhbHVlIGluIGFuIGFycmF5KSwgdG8gc2F2ZQotICAgb25lIHNlY29uZCAod2FsbCBjbG9jayB0aW1lKS4gRWl0aGVyIHdheXMsIHRoZSBsb2FkaW5nIHRpbWUgYSBwaWNrbGUgc3RyZWFtCi0gICBsYXJnZSBlbm91Z2ggdG8gZ2VuZXJhdGUgdGhpcyBudW1iZXIgb2YgY2FsbHMgd291bGQgYmUgbWFzc2l2ZWx5Ci0gICBvdmVyd2hlbG1lZCBieSBvdGhlciBmYWN0b3JzLCBsaWtlIEkvTyB0aHJvdWdocHV0LCB0aGUgR0MgdHJhdmVyc2FsIGFuZAotICAgb2JqZWN0IGFsbG9jYXRpb24gb3ZlcmhlYWQuIFNvLCBJIHJlYWxseSBkb3VidCB0aGVzZSBmdW5jdGlvbnMgcHJvdmlkZSBhbnkKLSAgIHJlYWwgYmVuZWZpdHMuCi0KLSAgIE9uIHRoZSBvdGhlciBoYW5kLCBvcHJvZmlsZSByZXBvcnRzIHRoYXQgcGlja2xlIHNwZW5kcyBhIGxvdCBvZiB0aW1lIGluCi0gICB0aGVzZSBmdW5jdGlvbnMuIEJ1dCwgdGhhdCBpcyBwcm9iYWJseSBtb3JlIHJlbGF0ZWQgdG8gdGhlIGZ1bmN0aW9uIGNhbGwKLSAgIG92ZXJoZWFkLCB0aGFuIHRoZSBhcmd1bWVudCB0dXBsZSBhbGxvY2F0aW9uLgotCi0gICBYWFg6IEFuZCwgd2hhdCBpcyB0aGUgcmVmZXJlbmNlIGJlaGF2aW9yIG9mIHRoZXNlPyBTdGVhbCwgYm9ycm93PyBBdCBmaXJzdAotICAgZ2xhbmNlLCBpdCBzZWVtcyB0byBzdGVhbCB0aGUgcmVmZXJlbmNlIG9mICdhcmcnIGFuZCBib3Jyb3cgdGhlIHJlZmVyZW5jZQotICAgb2YgJ2Z1bmMnLiAqLwotc3RhdGljIFB5T2JqZWN0ICoKLV9QaWNrbGVyX0Zhc3RDYWxsKFBpY2tsZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpmdW5jLCBQeU9iamVjdCAqYXJnKQotewotICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBOVUxMOwotCi0gICAgQVJHX1RVUChzZWxmLCBhcmcpOwotICAgIGlmIChzZWxmLT5hcmcpIHsKLSAgICAgICAgcmVzdWx0ID0gUHlPYmplY3RfQ2FsbChmdW5jLCBzZWxmLT5hcmcsIE5VTEwpOwotICAgICAgICBGUkVFX0FSR19UVVAoc2VsZik7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci19CiAKIHN0YXRpYyBpbnQKIF9QaWNrbGVyX0NsZWFyQnVmZmVyKFBpY2tsZXJPYmplY3QgKnNlbGYpCkBAIC02NjcsMTUgKzg0MSw3MSBAQAogICAgIGlmIChzZWxmLT5vdXRwdXRfYnVmZmVyID09IE5VTEwpCiAgICAgICAgIHJldHVybiAtMTsKICAgICBzZWxmLT5vdXRwdXRfbGVuID0gMDsKKyAgICBzZWxmLT5mcmFtZV9zdGFydCA9IC0xOwogICAgIHJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZAorX3dyaXRlX3NpemU2NChjaGFyICpvdXQsIHNpemVfdCB2YWx1ZSkKK3sKKyAgICBpbnQgaTsKKworICAgIGFzc2VydChzaXplb2Yoc2l6ZV90KSA8PSA4KTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBzaXplb2Yoc2l6ZV90KTsgaSsrKSB7CisgICAgICAgIG91dFtpXSA9ICh1bnNpZ25lZCBjaGFyKSgodmFsdWUgPj4gKDggKiBpKSkgJiAweGZmKTsKKyAgICB9CisgICAgZm9yIChpID0gc2l6ZW9mKHNpemVfdCk7IGkgPCA4OyBpKyspIHsKKyAgICAgICAgb3V0W2ldID0gMDsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCitfUGlja2xlcl9Xcml0ZUZyYW1lSGVhZGVyKFBpY2tsZXJPYmplY3QgKnNlbGYsIGNoYXIgKnFkYXRhLCBzaXplX3QgZnJhbWVfbGVuKQoreworICAgIHFkYXRhWzBdID0gRlJBTUU7CisgICAgX3dyaXRlX3NpemU2NChxZGF0YSArIDEsIGZyYW1lX2xlbik7Cit9CisKK3N0YXRpYyBpbnQKK19QaWNrbGVyX0NvbW1pdEZyYW1lKFBpY2tsZXJPYmplY3QgKnNlbGYpCit7CisgICAgc2l6ZV90IGZyYW1lX2xlbjsKKyAgICBjaGFyICpxZGF0YTsKKworICAgIGlmICghc2VsZi0+ZnJhbWluZyB8fCBzZWxmLT5mcmFtZV9zdGFydCA9PSAtMSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgZnJhbWVfbGVuID0gc2VsZi0+b3V0cHV0X2xlbiAtIHNlbGYtPmZyYW1lX3N0YXJ0IC0gRlJBTUVfSEVBREVSX1NJWkU7CisgICAgcWRhdGEgPSBQeUJ5dGVzX0FTX1NUUklORyhzZWxmLT5vdXRwdXRfYnVmZmVyKSArIHNlbGYtPmZyYW1lX3N0YXJ0OworICAgIF9QaWNrbGVyX1dyaXRlRnJhbWVIZWFkZXIoc2VsZiwgcWRhdGEsIGZyYW1lX2xlbik7CisgICAgc2VsZi0+ZnJhbWVfc3RhcnQgPSAtMTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorX1BpY2tsZXJfT3Bjb2RlQm91bmRhcnkoUGlja2xlck9iamVjdCAqc2VsZikKK3sKKyAgICBQeV9zc2l6ZV90IGZyYW1lX2xlbjsKKworICAgIGlmICghc2VsZi0+ZnJhbWluZyB8fCBzZWxmLT5mcmFtZV9zdGFydCA9PSAtMSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgZnJhbWVfbGVuID0gc2VsZi0+b3V0cHV0X2xlbiAtIHNlbGYtPmZyYW1lX3N0YXJ0IC0gRlJBTUVfSEVBREVSX1NJWkU7CisgICAgaWYgKGZyYW1lX2xlbiA+PSBGUkFNRV9TSVpFX1RBUkdFVCkKKyAgICAgICAgcmV0dXJuIF9QaWNrbGVyX0NvbW1pdEZyYW1lKHNlbGYpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBQeU9iamVjdCAqCiBfUGlja2xlcl9HZXRTdHJpbmcoUGlja2xlck9iamVjdCAqc2VsZikKIHsKICAgICBQeU9iamVjdCAqb3V0cHV0X2J1ZmZlciA9IHNlbGYtPm91dHB1dF9idWZmZXI7CiAKICAgICBhc3NlcnQoc2VsZi0+b3V0cHV0X2J1ZmZlciAhPSBOVUxMKTsKKworICAgIGlmIChfUGlja2xlcl9Db21taXRGcmFtZShzZWxmKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKICAgICBzZWxmLT5vdXRwdXRfYnVmZmVyID0gTlVMTDsKICAgICAvKiBSZXNpemUgZG93biB0byBleGFjdCBzaXplICovCiAgICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZSgmb3V0cHV0X2J1ZmZlciwgc2VsZi0+b3V0cHV0X2xlbikgPCAwKQpAQCAtNjkwLDY3ICs5MjAsNjQgQEAKIAogICAgIGFzc2VydChzZWxmLT53cml0ZSAhPSBOVUxMKTsKIAorICAgIC8qIFRoaXMgd2lsbCBjb21taXQgdGhlIGZyYW1lIGZpcnN0ICovCiAgICAgb3V0cHV0ID0gX1BpY2tsZXJfR2V0U3RyaW5nKHNlbGYpOwogICAgIGlmIChvdXRwdXQgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIC0xOwogCi0gICAgcmVzdWx0ID0gX1BpY2tsZXJfRmFzdENhbGwoc2VsZiwgc2VsZi0+d3JpdGUsIG91dHB1dCk7CisgICAgcmVzdWx0ID0gX1BpY2tsZV9GYXN0Q2FsbChzZWxmLT53cml0ZSwgb3V0cHV0KTsKICAgICBQeV9YREVDUkVGKHJlc3VsdCk7CiAgICAgcmV0dXJuIChyZXN1bHQgPT0gTlVMTCkgPyAtMSA6IDA7CiB9CiAKIHN0YXRpYyBQeV9zc2l6ZV90Ci1fUGlja2xlcl9Xcml0ZShQaWNrbGVyT2JqZWN0ICpzZWxmLCBjb25zdCBjaGFyICpzLCBQeV9zc2l6ZV90IG4pCitfUGlja2xlcl9Xcml0ZShQaWNrbGVyT2JqZWN0ICpzZWxmLCBjb25zdCBjaGFyICpzLCBQeV9zc2l6ZV90IGRhdGFfbGVuKQogewotICAgIFB5X3NzaXplX3QgaSwgcmVxdWlyZWQ7CisgICAgUHlfc3NpemVfdCBpLCBuLCByZXF1aXJlZDsKICAgICBjaGFyICpidWZmZXI7CisgICAgaW50IG5lZWRfbmV3X2ZyYW1lOwogCiAgICAgYXNzZXJ0KHMgIT0gTlVMTCk7CisgICAgbmVlZF9uZXdfZnJhbWUgPSAoc2VsZi0+ZnJhbWluZyAmJiBzZWxmLT5mcmFtZV9zdGFydCA9PSAtMSk7CisKKyAgICBpZiAobmVlZF9uZXdfZnJhbWUpCisgICAgICAgIG4gPSBkYXRhX2xlbiArIEZSQU1FX0hFQURFUl9TSVpFOworICAgIGVsc2UKKyAgICAgICAgbiA9IGRhdGFfbGVuOwogCiAgICAgcmVxdWlyZWQgPSBzZWxmLT5vdXRwdXRfbGVuICsgbjsKICAgICBpZiAocmVxdWlyZWQgPiBzZWxmLT5tYXhfb3V0cHV0X2xlbikgewotICAgICAgICBpZiAoc2VsZi0+d3JpdGUgIT0gTlVMTCAmJiByZXF1aXJlZCA+IE1BWF9XUklURV9CVUZfU0laRSkgewotICAgICAgICAgICAgLyogWFhYIFRoaXMgcmVhbGxvY2F0ZXMgYSBuZXcgYnVmZmVyIGV2ZXJ5IHRpbWUsIHdoaWNoIGlzIGEgYml0Ci0gICAgICAgICAgICAgICB3YXN0ZWZ1bC4gKi8KLSAgICAgICAgICAgIGlmIChfUGlja2xlcl9GbHVzaFRvRmlsZShzZWxmKSA8IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgaWYgKF9QaWNrbGVyX0NsZWFyQnVmZmVyKHNlbGYpIDwgMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIC8qIE1ha2UgcGxhY2UgaW4gYnVmZmVyIGZvciB0aGUgcGlja2xlIGNodW5rICovCisgICAgICAgIGlmIChzZWxmLT5vdXRwdXRfbGVuID49IFBZX1NTSVpFX1RfTUFYIC8gMiAtIG4pIHsKKyAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHNlbGYtPndyaXRlICE9IE5VTEwgJiYgbiA+IE1BWF9XUklURV9CVUZfU0laRSkgewotICAgICAgICAgICAgLyogd2UgYWxyZWFkeSBmbHVzaGVkIGFib3ZlLCBzbyB0aGUgYnVmZmVyIGlzIGVtcHR5ICovCi0gICAgICAgICAgICBQeU9iamVjdCAqcmVzdWx0OwotICAgICAgICAgICAgLyogWFhYIHdlIGNvdWxkIHNwYXJlIGFuIGludGVybWVkaWF0ZSBjb3B5IGFuZCBwYXNzCi0gICAgICAgICAgICAgICBhIG1lbW9yeXZpZXcgaW5zdGVhZCAqLwotICAgICAgICAgICAgUHlPYmplY3QgKm91dHB1dCA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUocywgbik7Ci0gICAgICAgICAgICBpZiAocyA9PSBOVUxMKQotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIHJlc3VsdCA9IF9QaWNrbGVyX0Zhc3RDYWxsKHNlbGYsIHNlbGYtPndyaXRlLCBvdXRwdXQpOwotICAgICAgICAgICAgUHlfWERFQ1JFRihyZXN1bHQpOwotICAgICAgICAgICAgcmV0dXJuIChyZXN1bHQgPT0gTlVMTCkgPyAtMSA6IDA7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBpZiAoc2VsZi0+b3V0cHV0X2xlbiA+PSBQWV9TU0laRV9UX01BWCAvIDIgLSBuKSB7Ci0gICAgICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzZWxmLT5tYXhfb3V0cHV0X2xlbiA9IChzZWxmLT5vdXRwdXRfbGVuICsgbikgLyAyICogMzsKLSAgICAgICAgICAgIGlmIChfUHlCeXRlc19SZXNpemUoJnNlbGYtPm91dHB1dF9idWZmZXIsIHNlbGYtPm1heF9vdXRwdXRfbGVuKSA8IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9CisgICAgICAgIHNlbGYtPm1heF9vdXRwdXRfbGVuID0gKHNlbGYtPm91dHB1dF9sZW4gKyBuKSAvIDIgKiAzOworICAgICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZzZWxmLT5vdXRwdXRfYnVmZmVyLCBzZWxmLT5tYXhfb3V0cHV0X2xlbikgPCAwKQorICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KICAgICBidWZmZXIgPSBQeUJ5dGVzX0FTX1NUUklORyhzZWxmLT5vdXRwdXRfYnVmZmVyKTsKLSAgICBpZiAobiA8IDgpIHsKKyAgICBpZiAobmVlZF9uZXdfZnJhbWUpIHsKKyAgICAgICAgLyogU2V0dXAgbmV3IGZyYW1lICovCisgICAgICAgIFB5X3NzaXplX3QgZnJhbWVfc3RhcnQgPSBzZWxmLT5vdXRwdXRfbGVuOworICAgICAgICBzZWxmLT5mcmFtZV9zdGFydCA9IGZyYW1lX3N0YXJ0OworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgRlJBTUVfSEVBREVSX1NJWkU7IGkrKykgeworICAgICAgICAgICAgLyogV3JpdGUgYW4gaW52YWxpZCB2YWx1ZSwgZm9yIGRlYnVnZ2luZyAqLworICAgICAgICAgICAgYnVmZmVyW2ZyYW1lX3N0YXJ0ICsgaV0gPSAweEZFOworICAgICAgICB9CisgICAgICAgIHNlbGYtPm91dHB1dF9sZW4gKz0gRlJBTUVfSEVBREVSX1NJWkU7CisgICAgfQorICAgIGlmIChkYXRhX2xlbiA8IDgpIHsKICAgICAgICAgLyogVGhpcyBpcyBmYXN0ZXIgdGhhbiBtZW1jcHkgd2hlbiB0aGUgc3RyaW5nIGlzIHNob3J0LiAqLwotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBkYXRhX2xlbjsgaSsrKSB7CiAgICAgICAgICAgICBidWZmZXJbc2VsZi0+b3V0cHV0X2xlbiArIGldID0gc1tpXTsKICAgICAgICAgfQogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgbWVtY3B5KGJ1ZmZlciArIHNlbGYtPm91dHB1dF9sZW4sIHMsIG4pOworICAgICAgICBtZW1jcHkoYnVmZmVyICsgc2VsZi0+b3V0cHV0X2xlbiwgcywgZGF0YV9sZW4pOwogICAgIH0KLSAgICBzZWxmLT5vdXRwdXRfbGVuICs9IG47Ci0gICAgcmV0dXJuIG47CisgICAgc2VsZi0+b3V0cHV0X2xlbiArPSBkYXRhX2xlbjsKKyAgICByZXR1cm4gZGF0YV9sZW47CiB9CiAKIHN0YXRpYyBQaWNrbGVyT2JqZWN0ICoKQEAgLTc2NCwyNSArOTkxLDIzIEBACiAKICAgICBzZWxmLT5wZXJzX2Z1bmMgPSBOVUxMOwogICAgIHNlbGYtPmRpc3BhdGNoX3RhYmxlID0gTlVMTDsKLSAgICBzZWxmLT5hcmcgPSBOVUxMOwogICAgIHNlbGYtPndyaXRlID0gTlVMTDsKICAgICBzZWxmLT5wcm90byA9IDA7CiAgICAgc2VsZi0+YmluID0gMDsKKyAgICBzZWxmLT5mcmFtaW5nID0gMDsKKyAgICBzZWxmLT5mcmFtZV9zdGFydCA9IC0xOwogICAgIHNlbGYtPmZhc3QgPSAwOwogICAgIHNlbGYtPmZhc3RfbmVzdGluZyA9IDA7CiAgICAgc2VsZi0+Zml4X2ltcG9ydHMgPSAwOwogICAgIHNlbGYtPmZhc3RfbWVtbyA9IE5VTEw7Ci0KLSAgICBzZWxmLT5tZW1vID0gUHlNZW1vVGFibGVfTmV3KCk7Ci0gICAgaWYgKHNlbGYtPm1lbW8gPT0gTlVMTCkgewotICAgICAgICBQeV9ERUNSRUYoc2VsZik7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KICAgICBzZWxmLT5tYXhfb3V0cHV0X2xlbiA9IFdSSVRFX0JVRl9TSVpFOwogICAgIHNlbGYtPm91dHB1dF9sZW4gPSAwOworCisgICAgc2VsZi0+bWVtbyA9IFB5TWVtb1RhYmxlX05ldygpOwogICAgIHNlbGYtPm91dHB1dF9idWZmZXIgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi0+bWF4X291dHB1dF9sZW4pOwotICAgIGlmIChzZWxmLT5vdXRwdXRfYnVmZmVyID09IE5VTEwpIHsKKworICAgIGlmIChzZWxmLT5tZW1vID09IE5VTEwgfHwgc2VsZi0+b3V0cHV0X2J1ZmZlciA9PSBOVUxMKSB7CiAgICAgICAgIFB5X0RFQ1JFRihzZWxmKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQpAQCAtNzkwLDM0ICsxMDE1LDI5IEBACiB9CiAKIHN0YXRpYyBpbnQKLV9QaWNrbGVyX1NldFByb3RvY29sKFBpY2tsZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpwcm90b19vYmosCi0gICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqZml4X2ltcG9ydHNfb2JqKQorX1BpY2tsZXJfU2V0UHJvdG9jb2woUGlja2xlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnByb3RvY29sLCBpbnQgZml4X2ltcG9ydHMpCiB7Ci0gICAgbG9uZyBwcm90byA9IDA7Ci0gICAgaW50IGZpeF9pbXBvcnRzOworICAgIGxvbmcgcHJvdG87CiAKLSAgICBpZiAocHJvdG9fb2JqID09IE5VTEwgfHwgcHJvdG9fb2JqID09IFB5X05vbmUpCisgICAgaWYgKHByb3RvY29sID09IE5VTEwgfHwgcHJvdG9jb2wgPT0gUHlfTm9uZSkgewogICAgICAgICBwcm90byA9IERFRkFVTFRfUFJPVE9DT0w7CisgICAgfQogICAgIGVsc2UgewotICAgICAgICBwcm90byA9IFB5TG9uZ19Bc0xvbmcocHJvdG9fb2JqKTsKLSAgICAgICAgaWYgKHByb3RvID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHByb3RvID0gUHlMb25nX0FzTG9uZyhwcm90b2NvbCk7CisgICAgICAgIGlmIChwcm90byA8IDApIHsKKyAgICAgICAgICAgIGlmIChwcm90byA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIHByb3RvID0gSElHSEVTVF9QUk9UT0NPTDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChwcm90byA+IEhJR0hFU1RfUFJPVE9DT0wpIHsKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLCAicGlja2xlIHByb3RvY29sIG11c3QgYmUgPD0gJWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgIEhJR0hFU1RfUFJPVE9DT0wpOwogICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CiAgICAgfQotICAgIGlmIChwcm90byA8IDApCi0gICAgICAgIHByb3RvID0gSElHSEVTVF9QUk9UT0NPTDsKLSAgICBpZiAocHJvdG8gPiBISUdIRVNUX1BST1RPQ09MKSB7Ci0gICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLCAicGlja2xlIHByb3RvY29sIG11c3QgYmUgPD0gJWQiLAotICAgICAgICAgICAgICAgICAgICAgSElHSEVTVF9QUk9UT0NPTCk7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0gICAgZml4X2ltcG9ydHMgPSBQeU9iamVjdF9Jc1RydWUoZml4X2ltcG9ydHNfb2JqKTsKLSAgICBpZiAoZml4X2ltcG9ydHMgPT0gLTEpCi0gICAgICAgIHJldHVybiAtMTsKLQotICAgIHNlbGYtPnByb3RvID0gcHJvdG87CisgICAgc2VsZi0+cHJvdG8gPSAoaW50KXByb3RvOwogICAgIHNlbGYtPmJpbiA9IHByb3RvID4gMDsKICAgICBzZWxmLT5maXhfaW1wb3J0cyA9IGZpeF9pbXBvcnRzICYmIHByb3RvIDwgMzsKLQogICAgIHJldHVybiAwOwogfQogCkBAIC04MzksMjAgKzEwNTksNiBAQAogICAgIHJldHVybiAwOwogfQogCi0vKiBTZWUgZG9jdW1lbnRhdGlvbiBmb3IgX1BpY2tsZXJfRmFzdENhbGwoKS4gKi8KLXN0YXRpYyBQeU9iamVjdCAqCi1fVW5waWNrbGVyX0Zhc3RDYWxsKFVucGlja2xlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmZ1bmMsIFB5T2JqZWN0ICphcmcpCi17Ci0gICAgUHlPYmplY3QgKnJlc3VsdCA9IE5VTEw7Ci0KLSAgICBBUkdfVFVQKHNlbGYsIGFyZyk7Ci0gICAgaWYgKHNlbGYtPmFyZykgewotICAgICAgICByZXN1bHQgPSBQeU9iamVjdF9DYWxsKGZ1bmMsIHNlbGYtPmFyZywgTlVMTCk7Ci0gICAgICAgIEZSRUVfQVJHX1RVUChzZWxmKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQogLyogUmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgaW5wdXQgb24gc3VjY2VzcywgLTEgb24gZmFpbHVyZS4gVGhpcyB0YWtlcyBpdHMKICAgIG93biByZWZlcmVuY2UgdG8gYGlucHV0YC4gKi8KIHN0YXRpYyBQeV9zc2l6ZV90CkBAIC04NzIsMTggKzEwNzgsMjEgQEAKIHN0YXRpYyBpbnQKIF9VbnBpY2tsZXJfU2tpcENvbnN1bWVkKFVucGlja2xlck9iamVjdCAqc2VsZikKIHsKLSAgICBQeV9zc2l6ZV90IGNvbnN1bWVkID0gc2VsZi0+bmV4dF9yZWFkX2lkeCAtIHNlbGYtPnByZWZldGNoZWRfaWR4OworICAgIFB5X3NzaXplX3QgY29uc3VtZWQ7CisgICAgUHlPYmplY3QgKnI7CiAKLSAgICBpZiAoY29uc3VtZWQgPiAwKSB7Ci0gICAgICAgIFB5T2JqZWN0ICpyOwotICAgICAgICBhc3NlcnQoc2VsZi0+cGVlayk7ICAvKiBvdGhlcndpc2Ugd2UgZGlkIHNvbWV0aGluZyB3cm9uZyAqLwotICAgICAgICAvKiBUaGlzIG1ha2VzIGFuIHVzZWxlc3MgY29weS4uLiAqLwotICAgICAgICByID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKHNlbGYtPnJlYWQsICJuIiwgY29uc3VtZWQpOwotICAgICAgICBpZiAociA9PSBOVUxMKQotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBQeV9ERUNSRUYocik7Ci0gICAgICAgIHNlbGYtPnByZWZldGNoZWRfaWR4ID0gc2VsZi0+bmV4dF9yZWFkX2lkeDsKLSAgICB9CisgICAgY29uc3VtZWQgPSBzZWxmLT5uZXh0X3JlYWRfaWR4IC0gc2VsZi0+cHJlZmV0Y2hlZF9pZHg7CisgICAgaWYgKGNvbnN1bWVkIDw9IDApCisgICAgICAgIHJldHVybiAwOworCisgICAgYXNzZXJ0KHNlbGYtPnBlZWspOyAgLyogb3RoZXJ3aXNlIHdlIGRpZCBzb21ldGhpbmcgd3JvbmcgKi8KKyAgICAvKiBUaGlzIG1ha2VzIGFuIHVzZWxlc3MgY29weS4uLiAqLworICAgIHIgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oc2VsZi0+cmVhZCwgIm4iLCBjb25zdW1lZCk7CisgICAgaWYgKHIgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIFB5X0RFQ1JFRihyKTsKKworICAgIHNlbGYtPnByZWZldGNoZWRfaWR4ID0gc2VsZi0+bmV4dF9yZWFkX2lkeDsKICAgICByZXR1cm4gMDsKIH0KIApAQCAtOTA3LDU2ICsxMTE2LDUxIEBACiBfVW5waWNrbGVyX1JlYWRGcm9tRmlsZShVbnBpY2tsZXJPYmplY3QgKnNlbGYsIFB5X3NzaXplX3QgbikKIHsKICAgICBQeU9iamVjdCAqZGF0YTsKLSAgICBQeV9zc2l6ZV90IHJlYWRfc2l6ZSwgcHJlZmV0Y2hlZF9zaXplID0gMDsKKyAgICBQeV9zc2l6ZV90IHJlYWRfc2l6ZTsKIAogICAgIGFzc2VydChzZWxmLT5yZWFkICE9IE5VTEwpOwogCiAgICAgaWYgKF9VbnBpY2tsZXJfU2tpcENvbnN1bWVkKHNlbGYpIDwgMCkKICAgICAgICAgcmV0dXJuIC0xOwogCi0gICAgaWYgKG4gPT0gUkVBRF9XSE9MRV9MSU5FKQorICAgIGlmIChuID09IFJFQURfV0hPTEVfTElORSkgeworICAgICAgICBQeU9iamVjdCAqZW1wdHlfdHVwbGUgPSBQeVR1cGxlX05ldygwKTsKICAgICAgICAgZGF0YSA9IFB5T2JqZWN0X0NhbGwoc2VsZi0+cmVhZGxpbmUsIGVtcHR5X3R1cGxlLCBOVUxMKTsKLSAgICBlbHNlIHsKLSAgICAgICAgUHlPYmplY3QgKmxlbiA9IFB5TG9uZ19Gcm9tU3NpemVfdChuKTsKLSAgICAgICAgaWYgKGxlbiA9PSBOVUxMKQotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBkYXRhID0gX1VucGlja2xlcl9GYXN0Q2FsbChzZWxmLCBzZWxmLT5yZWFkLCBsZW4pOworICAgICAgICBQeV9ERUNSRUYoZW1wdHlfdHVwbGUpOwogICAgIH0KLSAgICBpZiAoZGF0YSA9PSBOVUxMKQotICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICAvKiBQcmVmZXRjaCBzb21lIGRhdGEgd2l0aG91dCBhZHZhbmNpbmcgdGhlIGZpbGUgcG9pbnRlciwgaWYgcG9zc2libGUgKi8KLSAgICBpZiAoc2VsZi0+cGVlaykgewotICAgICAgICBQeU9iamVjdCAqbGVuLCAqcHJlZmV0Y2hlZDsKLSAgICAgICAgbGVuID0gUHlMb25nX0Zyb21Tc2l6ZV90KFBSRUZFVENIKTsKLSAgICAgICAgaWYgKGxlbiA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBQeV9ERUNSRUYoZGF0YSk7Ci0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KLSAgICAgICAgcHJlZmV0Y2hlZCA9IF9VbnBpY2tsZXJfRmFzdENhbGwoc2VsZiwgc2VsZi0+cGVlaywgbGVuKTsKLSAgICAgICAgaWYgKHByZWZldGNoZWQgPT0gTlVMTCkgewotICAgICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfTm90SW1wbGVtZW50ZWRFcnJvcikpIHsKKyAgICBlbHNlIHsKKyAgICAgICAgUHlPYmplY3QgKmxlbjsKKyAgICAgICAgLyogUHJlZmV0Y2ggc29tZSBkYXRhIHdpdGhvdXQgYWR2YW5jaW5nIHRoZSBmaWxlIHBvaW50ZXIsIGlmIHBvc3NpYmxlICovCisgICAgICAgIGlmIChzZWxmLT5wZWVrICYmIG4gPCBQUkVGRVRDSCkgeworICAgICAgICAgICAgbGVuID0gUHlMb25nX0Zyb21Tc2l6ZV90KFBSRUZFVENIKTsKKyAgICAgICAgICAgIGlmIChsZW4gPT0gTlVMTCkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICBkYXRhID0gX1BpY2tsZV9GYXN0Q2FsbChzZWxmLT5wZWVrLCBsZW4pOworICAgICAgICAgICAgaWYgKGRhdGEgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIGlmICghUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19Ob3RJbXBsZW1lbnRlZEVycm9yKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgICAgICAgIC8qIHBlZWsoKSBpcyBwcm9iYWJseSBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBnaXZlbiBmaWxlIG9iamVjdCAqLwogICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CiAgICAgICAgICAgICAgICAgUHlfQ0xFQVIoc2VsZi0+cGVlayk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICByZWFkX3NpemUgPSBfVW5waWNrbGVyX1NldFN0cmluZ0lucHV0KHNlbGYsIGRhdGEpOwogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihkYXRhKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgc2VsZi0+cHJlZmV0Y2hlZF9pZHggPSAwOworICAgICAgICAgICAgICAgIGlmIChuIDw9IHJlYWRfc2l6ZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBhc3NlcnQoUHlCeXRlc19DaGVjayhwcmVmZXRjaGVkKSk7Ci0gICAgICAgICAgICBwcmVmZXRjaGVkX3NpemUgPSBQeUJ5dGVzX0dFVF9TSVpFKHByZWZldGNoZWQpOwotICAgICAgICAgICAgUHlCeXRlc19Db25jYXRBbmREZWwoJmRhdGEsIHByZWZldGNoZWQpOwotICAgICAgICAgICAgaWYgKGRhdGEgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KKyAgICAgICAgbGVuID0gUHlMb25nX0Zyb21Tc2l6ZV90KG4pOworICAgICAgICBpZiAobGVuID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIGRhdGEgPSBfUGlja2xlX0Zhc3RDYWxsKHNlbGYtPnJlYWQsIGxlbik7CiAgICAgfQorICAgIGlmIChkYXRhID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKIAotICAgIHJlYWRfc2l6ZSA9IF9VbnBpY2tsZXJfU2V0U3RyaW5nSW5wdXQoc2VsZiwgZGF0YSkgLSBwcmVmZXRjaGVkX3NpemU7CisgICAgcmVhZF9zaXplID0gX1VucGlja2xlcl9TZXRTdHJpbmdJbnB1dChzZWxmLCBkYXRhKTsKICAgICBQeV9ERUNSRUYoZGF0YSk7Ci0gICAgc2VsZi0+cHJlZmV0Y2hlZF9pZHggPSByZWFkX3NpemU7CiAgICAgcmV0dXJuIHJlYWRfc2l6ZTsKIH0KIApAQCAtOTc4LDYgKzExODIsMTMgQEAKIHsKICAgICBQeV9zc2l6ZV90IG51bV9yZWFkOwogCisgICAgKnMgPSBOVUxMOworICAgIGlmIChzZWxmLT5uZXh0X3JlYWRfaWR4ID4gUFlfU1NJWkVfVF9NQVggLSBuKSB7CisgICAgICAgIFBpY2tsZVN0YXRlICpzdCA9IF9QaWNrbGVfR2V0R2xvYmFsU3RhdGUoKTsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKHN0LT5VbnBpY2tsaW5nRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAicmVhZCB3b3VsZCBvdmVyZmxvdyAoaW52YWxpZCBieXRlY29kZSkiKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KICAgICBpZiAoc2VsZi0+bmV4dF9yZWFkX2lkeCArIG4gPD0gc2VsZi0+aW5wdXRfbGVuKSB7CiAgICAgICAgICpzID0gc2VsZi0+aW5wdXRfYnVmZmVyICsgc2VsZi0+bmV4dF9yZWFkX2lkeDsKICAgICAgICAgc2VsZi0+bmV4dF9yZWFkX2lkeCArPSBuOwpAQCAtMTAwNCw4ICsxMjE1LDEwIEBACiAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipyZXN1bHQpCiB7CiAgICAgY2hhciAqaW5wdXRfbGluZSA9IFB5TWVtX1JlYWxsb2Moc2VsZi0+aW5wdXRfbGluZSwgbGVuICsgMSk7Ci0gICAgaWYgKGlucHV0X2xpbmUgPT0gTlVMTCkKKyAgICBpZiAoaW5wdXRfbGluZSA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgIHJldHVybiAtMTsKKyAgICB9CiAKICAgICBtZW1jcHkoaW5wdXRfbGluZSwgbGluZSwgbGVuKTsKICAgICBpbnB1dF9saW5lW2xlbl0gPSAnXDAnOwpAQCAtMTA5Miw3ICsxMzA1LDEyIEBACiAgICAgUHlfSU5DUkVGKHZhbHVlKTsKICAgICBvbGRfaXRlbSA9IHNlbGYtPm1lbW9baWR4XTsKICAgICBzZWxmLT5tZW1vW2lkeF0gPSB2YWx1ZTsKLSAgICBQeV9YREVDUkVGKG9sZF9pdGVtKTsKKyAgICBpZiAob2xkX2l0ZW0gIT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYob2xkX2l0ZW0pOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgc2VsZi0+bWVtb19sZW4rKzsKKyAgICB9CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTExMDAsOCArMTMxOCwxMCBAQAogX1VucGlja2xlcl9OZXdNZW1vKFB5X3NzaXplX3QgbmV3X3NpemUpCiB7CiAgICAgUHlPYmplY3QgKiptZW1vID0gUHlNZW1fTkVXKFB5T2JqZWN0ICosIG5ld19zaXplKTsKLSAgICBpZiAobWVtbyA9PSBOVUxMKQorICAgIGlmIChtZW1vID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogICAgIG1lbXNldChtZW1vLCAwLCBuZXdfc2l6ZSAqIHNpemVvZihQeU9iamVjdCAqKSk7CiAgICAgcmV0dXJuIG1lbW87CiB9CkBAIC0xMTMyLDIxICsxMzUyLDYgQEAKICAgICBpZiAoc2VsZiA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIHNlbGYtPnN0YWNrID0gKFBkYXRhICopUGRhdGFfTmV3KCk7Ci0gICAgaWYgKHNlbGYtPnN0YWNrID09IE5VTEwpIHsKLSAgICAgICAgUHlfREVDUkVGKHNlbGYpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgbWVtc2V0KCZzZWxmLT5idWZmZXIsIDAsIHNpemVvZihQeV9idWZmZXIpKTsKLQotICAgIHNlbGYtPm1lbW9fc2l6ZSA9IDMyOwotICAgIHNlbGYtPm1lbW8gPSBfVW5waWNrbGVyX05ld01lbW8oc2VsZi0+bWVtb19zaXplKTsKLSAgICBpZiAoc2VsZi0+bWVtbyA9PSBOVUxMKSB7Ci0gICAgICAgIFB5X0RFQ1JFRihzZWxmKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgc2VsZi0+YXJnID0gTlVMTDsKICAgICBzZWxmLT5wZXJzX2Z1bmMgPSBOVUxMOwogICAgIHNlbGYtPmlucHV0X2J1ZmZlciA9IE5VTEw7CiAgICAgc2VsZi0+aW5wdXRfbGluZSA9IE5VTEw7CkBAIC0xMTYzLDYgKzEzNjgsMTYgQEAKICAgICBzZWxmLT5tYXJrc19zaXplID0gMDsKICAgICBzZWxmLT5wcm90byA9IDA7CiAgICAgc2VsZi0+Zml4X2ltcG9ydHMgPSAwOworICAgIG1lbXNldCgmc2VsZi0+YnVmZmVyLCAwLCBzaXplb2YoUHlfYnVmZmVyKSk7CisgICAgc2VsZi0+bWVtb19zaXplID0gMzI7CisgICAgc2VsZi0+bWVtb19sZW4gPSAwOworICAgIHNlbGYtPm1lbW8gPSBfVW5waWNrbGVyX05ld01lbW8oc2VsZi0+bWVtb19zaXplKTsKKyAgICBzZWxmLT5zdGFjayA9IChQZGF0YSAqKVBkYXRhX05ldygpOworCisgICAgaWYgKHNlbGYtPm1lbW8gPT0gTlVMTCB8fCBzZWxmLT5zdGFjayA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRihzZWxmKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogCiAgICAgcmV0dXJuIHNlbGY7CiB9CkBAIC0xMjA5LDggKzE0MjQsOCBAQAogICAgIGlmIChlcnJvcnMgPT0gTlVMTCkKICAgICAgICAgZXJyb3JzID0gInN0cmljdCI7CiAKLSAgICBzZWxmLT5lbmNvZGluZyA9IHN0cmR1cChlbmNvZGluZyk7Ci0gICAgc2VsZi0+ZXJyb3JzID0gc3RyZHVwKGVycm9ycyk7CisgICAgc2VsZi0+ZW5jb2RpbmcgPSBfUHlNZW1fU3RyZHVwKGVuY29kaW5nKTsKKyAgICBzZWxmLT5lcnJvcnMgPSBfUHlNZW1fU3RyZHVwKGVycm9ycyk7CiAgICAgaWYgKHNlbGYtPmVuY29kaW5nID09IE5VTEwgfHwgc2VsZi0+ZXJyb3JzID09IE5VTEwpIHsKICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgcmV0dXJuIC0xOwpAQCAtMTI1Myw3ICsxNDY4LDggQEAKICAgICAgICAgICAgIGxlbiA9IDU7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7IC8qIHVubGlrZWx5ICovCi0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUGlja2xpbmdFcnJvciwKKyAgICAgICAgICAgIFBpY2tsZVN0YXRlICpzdCA9IF9QaWNrbGVfR2V0R2xvYmFsU3RhdGUoKTsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhzdC0+UGlja2xpbmdFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWVtbyBpZCB0b28gbGFyZ2UgZm9yIExPTkdfQklOR0VUIik7CiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KQEAgLTEyNzAsMTI4ICsxNDg2LDE3NSBAQAogc3RhdGljIGludAogbWVtb19wdXQoUGlja2xlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm9iaikKIHsKLSAgICBQeV9zc2l6ZV90IHg7CiAgICAgY2hhciBwZGF0YVszMF07CiAgICAgUHlfc3NpemVfdCBsZW47Ci0gICAgaW50IHN0YXR1cyA9IDA7CisgICAgUHlfc3NpemVfdCBpZHg7CisKKyAgICBjb25zdCBjaGFyIG1lbW9pemVfb3AgPSBNRU1PSVpFOwogCiAgICAgaWYgKHNlbGYtPmZhc3QpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgeCA9IFB5TWVtb1RhYmxlX1NpemUoc2VsZi0+bWVtbyk7Ci0gICAgaWYgKFB5TWVtb1RhYmxlX1NldChzZWxmLT5tZW1vLCBvYmosIHgpIDwgMCkKLSAgICAgICAgZ290byBlcnJvcjsKKyAgICBpZHggPSBQeU1lbW9UYWJsZV9TaXplKHNlbGYtPm1lbW8pOworICAgIGlmIChQeU1lbW9UYWJsZV9TZXQoc2VsZi0+bWVtbywgb2JqLCBpZHgpIDwgMCkKKyAgICAgICAgcmV0dXJuIC0xOwogCi0gICAgaWYgKCFzZWxmLT5iaW4pIHsKKyAgICBpZiAoc2VsZi0+cHJvdG8gPj0gNCkgeworICAgICAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgJm1lbW9pemVfb3AsIDEpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGVsc2UgaWYgKCFzZWxmLT5iaW4pIHsKICAgICAgICAgcGRhdGFbMF0gPSBQVVQ7CiAgICAgICAgIFB5T1Nfc25wcmludGYocGRhdGEgKyAxLCBzaXplb2YocGRhdGEpIC0gMSwKLSAgICAgICAgICAgICAgICAgICAgICAiJSIgUFlfRk9STUFUX1NJWkVfVCAiZFxuIiwgeCk7CisgICAgICAgICAgICAgICAgICAgICAgIiUiIFBZX0ZPUk1BVF9TSVpFX1QgImRcbiIsIGlkeCk7CiAgICAgICAgIGxlbiA9IHN0cmxlbihwZGF0YSk7CiAgICAgfQogICAgIGVsc2UgewotICAgICAgICBpZiAoeCA8IDI1NikgeworICAgICAgICBpZiAoaWR4IDwgMjU2KSB7CiAgICAgICAgICAgICBwZGF0YVswXSA9IEJJTlBVVDsKLSAgICAgICAgICAgIHBkYXRhWzFdID0gKHVuc2lnbmVkIGNoYXIpeDsKKyAgICAgICAgICAgIHBkYXRhWzFdID0gKHVuc2lnbmVkIGNoYXIpaWR4OwogICAgICAgICAgICAgbGVuID0gMjsKICAgICAgICAgfQotICAgICAgICBlbHNlIGlmICh4IDw9IDB4ZmZmZmZmZmZMKSB7CisgICAgICAgIGVsc2UgaWYgKGlkeCA8PSAweGZmZmZmZmZmTCkgewogICAgICAgICAgICAgcGRhdGFbMF0gPSBMT05HX0JJTlBVVDsKLSAgICAgICAgICAgIHBkYXRhWzFdID0gKHVuc2lnbmVkIGNoYXIpKHggJiAweGZmKTsKLSAgICAgICAgICAgIHBkYXRhWzJdID0gKHVuc2lnbmVkIGNoYXIpKCh4ID4+IDgpICYgMHhmZik7Ci0gICAgICAgICAgICBwZGF0YVszXSA9ICh1bnNpZ25lZCBjaGFyKSgoeCA+PiAxNikgJiAweGZmKTsKLSAgICAgICAgICAgIHBkYXRhWzRdID0gKHVuc2lnbmVkIGNoYXIpKCh4ID4+IDI0KSAmIDB4ZmYpOworICAgICAgICAgICAgcGRhdGFbMV0gPSAodW5zaWduZWQgY2hhcikoaWR4ICYgMHhmZik7CisgICAgICAgICAgICBwZGF0YVsyXSA9ICh1bnNpZ25lZCBjaGFyKSgoaWR4ID4+IDgpICYgMHhmZik7CisgICAgICAgICAgICBwZGF0YVszXSA9ICh1bnNpZ25lZCBjaGFyKSgoaWR4ID4+IDE2KSAmIDB4ZmYpOworICAgICAgICAgICAgcGRhdGFbNF0gPSAodW5zaWduZWQgY2hhcikoKGlkeCA+PiAyNCkgJiAweGZmKTsKICAgICAgICAgICAgIGxlbiA9IDU7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7IC8qIHVubGlrZWx5ICovCi0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUGlja2xpbmdFcnJvciwKKyAgICAgICAgICAgIFBpY2tsZVN0YXRlICpzdCA9IF9QaWNrbGVfR2V0R2xvYmFsU3RhdGUoKTsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhzdC0+UGlja2xpbmdFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWVtbyBpZCB0b28gbGFyZ2UgZm9yIExPTkdfQklOUFVUIik7CiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KICAgICB9Ci0KICAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgcGRhdGEsIGxlbikgPCAwKQotICAgICAgICBnb3RvIGVycm9yOworICAgICAgICByZXR1cm4gLTE7CiAKLSAgICBpZiAoMCkgewotICBlcnJvcjoKLSAgICAgICAgc3RhdHVzID0gLTE7Ci0gICAgfQotCi0gICAgcmV0dXJuIHN0YXR1czsKKyAgICByZXR1cm4gMDsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKLXdoaWNobW9kdWxlKFB5T2JqZWN0ICpnbG9iYWwsIFB5T2JqZWN0ICpnbG9iYWxfbmFtZSkKK2dldGF0dHJpYnV0ZShQeU9iamVjdCAqb2JqLCBQeU9iamVjdCAqbmFtZSwgaW50IGFsbG93X3F1YWxuYW1lKSB7CisgICAgUHlPYmplY3QgKmRvdHRlZF9wYXRoOworICAgIFB5X3NzaXplX3QgaTsKKyAgICBfUHlfc3RhdGljX3N0cmluZyhQeUlkX2RvdCwgIi4iKTsKKyAgICBfUHlfc3RhdGljX3N0cmluZyhQeUlkX2xvY2FscywgIjxsb2NhbHM+Iik7CisKKyAgICBkb3R0ZWRfcGF0aCA9IFB5VW5pY29kZV9TcGxpdChuYW1lLCBfUHlVbmljb2RlX0Zyb21JZCgmUHlJZF9kb3QpLCAtMSk7CisgICAgaWYgKGRvdHRlZF9wYXRoID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGFzc2VydChQeV9TSVpFKGRvdHRlZF9wYXRoKSA+PSAxKTsKKyAgICBpZiAoIWFsbG93X3F1YWxuYW1lICYmIFB5X1NJWkUoZG90dGVkX3BhdGgpID4gMSkgeworICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfQXR0cmlidXRlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAiQ2FuJ3QgZ2V0IHF1YWxpZmllZCBhdHRyaWJ1dGUgJVIgb24gJVI7IgorICAgICAgICAgICAgICAgICAgICAgInVzZSBwcm90b2NvbHMgPj0gNCB0byBlbmFibGUgc3VwcG9ydCIsCisgICAgICAgICAgICAgICAgICAgICBuYW1lLCBvYmopOworICAgICAgICBQeV9ERUNSRUYoZG90dGVkX3BhdGgpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgUHlfSU5DUkVGKG9iaik7CisgICAgZm9yIChpID0gMDsgaSA8IFB5X1NJWkUoZG90dGVkX3BhdGgpOyBpKyspIHsKKyAgICAgICAgUHlPYmplY3QgKnN1YnBhdGggPSBQeUxpc3RfR0VUX0lURU0oZG90dGVkX3BhdGgsIGkpOworICAgICAgICBQeU9iamVjdCAqdG1wOworICAgICAgICBQeU9iamVjdCAqcmVzdWx0ID0gUHlVbmljb2RlX1JpY2hDb21wYXJlKAorICAgICAgICAgICAgc3VicGF0aCwgX1B5VW5pY29kZV9Gcm9tSWQoJlB5SWRfbG9jYWxzKSwgUHlfRVEpOworICAgICAgICBpbnQgaXNfZXF1YWwgPSAocmVzdWx0ID09IFB5X1RydWUpOworICAgICAgICBhc3NlcnQoUHlCb29sX0NoZWNrKHJlc3VsdCkpOworICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICAgICAgaWYgKGlzX2VxdWFsKSB7CisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfQXR0cmlidXRlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIkNhbid0IGdldCBsb2NhbCBhdHRyaWJ1dGUgJVIgb24gJVIiLCBuYW1lLCBvYmopOworICAgICAgICAgICAgUHlfREVDUkVGKGRvdHRlZF9wYXRoKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihvYmopOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgdG1wID0gUHlPYmplY3RfR2V0QXR0cihvYmosIHN1YnBhdGgpOworICAgICAgICBQeV9ERUNSRUYob2JqKTsKKyAgICAgICAgaWYgKHRtcCA9PSBOVUxMKSB7CisgICAgICAgICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19BdHRyaWJ1dGVFcnJvcikpIHsKKyAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19BdHRyaWJ1dGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNhbid0IGdldCBhdHRyaWJ1dGUgJVIgb24gJVIiLCBuYW1lLCBvYmopOworICAgICAgICAgICAgfQorICAgICAgICAgICAgUHlfREVDUkVGKGRvdHRlZF9wYXRoKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIG9iaiA9IHRtcDsKKyAgICB9CisgICAgUHlfREVDUkVGKGRvdHRlZF9wYXRoKTsKKyAgICByZXR1cm4gb2JqOworfQorCitzdGF0aWMgUHlPYmplY3QgKgord2hpY2htb2R1bGUoUHlPYmplY3QgKmdsb2JhbCwgUHlPYmplY3QgKmdsb2JhbF9uYW1lLCBpbnQgYWxsb3dfcXVhbG5hbWUpCiB7Ci0gICAgUHlfc3NpemVfdCBpLCBqOwotICAgIHN0YXRpYyBQeU9iamVjdCAqbW9kdWxlX3N0ciA9IE5VTEw7Ci0gICAgc3RhdGljIFB5T2JqZWN0ICptYWluX3N0ciA9IE5VTEw7CiAgICAgUHlPYmplY3QgKm1vZHVsZV9uYW1lOwogICAgIFB5T2JqZWN0ICptb2R1bGVzX2RpY3Q7CiAgICAgUHlPYmplY3QgKm1vZHVsZTsKICAgICBQeU9iamVjdCAqb2JqOworICAgIFB5X3NzaXplX3QgaSwgajsKKyAgICBfUHlfSURFTlRJRklFUihfX21vZHVsZV9fKTsKKyAgICBfUHlfSURFTlRJRklFUihtb2R1bGVzKTsKKyAgICBfUHlfSURFTlRJRklFUihfX21haW5fXyk7CiAKLSAgICBpZiAobW9kdWxlX3N0ciA9PSBOVUxMKSB7Ci0gICAgICAgIG1vZHVsZV9zdHIgPSBQeVVuaWNvZGVfSW50ZXJuRnJvbVN0cmluZygiX19tb2R1bGVfXyIpOwotICAgICAgICBpZiAobW9kdWxlX3N0ciA9PSBOVUxMKQorICAgIG1vZHVsZV9uYW1lID0gX1B5T2JqZWN0X0dldEF0dHJJZChnbG9iYWwsICZQeUlkX19fbW9kdWxlX18pOworCisgICAgaWYgKG1vZHVsZV9uYW1lID09IE5VTEwpIHsKKyAgICAgICAgaWYgKCFQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0F0dHJpYnV0ZUVycm9yKSkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICBtYWluX3N0ciA9IFB5VW5pY29kZV9JbnRlcm5Gcm9tU3RyaW5nKCJfX21haW5fXyIpOwotICAgICAgICBpZiAobWFpbl9zdHIgPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIG1vZHVsZV9uYW1lID0gUHlPYmplY3RfR2V0QXR0cihnbG9iYWwsIG1vZHVsZV9zdHIpOwotCi0gICAgLyogSW4gc29tZSByYXJlIGNhc2VzIChlLmcuLCBib3VuZCBtZXRob2RzIG9mIGV4dGVuc2lvbiB0eXBlcyksCi0gICAgICAgX19tb2R1bGVfXyBjYW4gYmUgTm9uZS4gSWYgaXQgaXMgc28sIHRoZW4gc2VhcmNoIHN5cy5tb2R1bGVzCi0gICAgICAgZm9yIHRoZSBtb2R1bGUgb2YgZ2xvYmFsLiAgKi8KLSAgICBpZiAobW9kdWxlX25hbWUgPT0gUHlfTm9uZSkgewotICAgICAgICBQeV9ERUNSRUYobW9kdWxlX25hbWUpOwotICAgICAgICBnb3RvIHNlYXJjaDsKLSAgICB9Ci0KLSAgICBpZiAobW9kdWxlX25hbWUpIHsKLSAgICAgICAgcmV0dXJuIG1vZHVsZV9uYW1lOwotICAgIH0KLSAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19BdHRyaWJ1dGVFcnJvcikpCiAgICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIC8qIEluIHNvbWUgcmFyZSBjYXNlcyAoZS5nLiwgYm91bmQgbWV0aG9kcyBvZiBleHRlbnNpb24gdHlwZXMpLAorICAgICAgICAgICBfX21vZHVsZV9fIGNhbiBiZSBOb25lLiBJZiBpdCBpcyBzbywgdGhlbiBzZWFyY2ggc3lzLm1vZHVsZXMgZm9yCisgICAgICAgICAgIHRoZSBtb2R1bGUgb2YgZ2xvYmFsLiAqLworICAgICAgICBpZiAobW9kdWxlX25hbWUgIT0gUHlfTm9uZSkKKyAgICAgICAgICAgIHJldHVybiBtb2R1bGVfbmFtZTsKKyAgICAgICAgUHlfQ0xFQVIobW9kdWxlX25hbWUpOworICAgIH0KKyAgICBhc3NlcnQobW9kdWxlX25hbWUgPT0gTlVMTCk7CiAKLSAgc2VhcmNoOgotICAgIG1vZHVsZXNfZGljdCA9IFB5U3lzX0dldE9iamVjdCgibW9kdWxlcyIpOwotICAgIGlmIChtb2R1bGVzX2RpY3QgPT0gTlVMTCkKKyAgICBtb2R1bGVzX2RpY3QgPSBfUHlTeXNfR2V0T2JqZWN0SWQoJlB5SWRfbW9kdWxlcyk7CisgICAgaWYgKG1vZHVsZXNfZGljdCA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsICJ1bmFibGUgdG8gZ2V0IHN5cy5tb2R1bGVzIik7CiAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAogICAgIGkgPSAwOwotICAgIG1vZHVsZV9uYW1lID0gTlVMTDsKICAgICB3aGlsZSAoKGogPSBQeURpY3RfTmV4dChtb2R1bGVzX2RpY3QsICZpLCAmbW9kdWxlX25hbWUsICZtb2R1bGUpKSkgewotICAgICAgICBpZiAoUHlPYmplY3RfUmljaENvbXBhcmVCb29sKG1vZHVsZV9uYW1lLCBtYWluX3N0ciwgUHlfRVEpID09IDEpCisgICAgICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBQeVVuaWNvZGVfUmljaENvbXBhcmUoCisgICAgICAgICAgICBtb2R1bGVfbmFtZSwgX1B5VW5pY29kZV9Gcm9tSWQoJlB5SWRfX19tYWluX18pLCBQeV9FUSk7CisgICAgICAgIGludCBpc19lcXVhbCA9IChyZXN1bHQgPT0gUHlfVHJ1ZSk7CisgICAgICAgIGFzc2VydChQeUJvb2xfQ2hlY2socmVzdWx0KSk7CisgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgICAgICBpZiAoaXNfZXF1YWwpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKG1vZHVsZSA9PSBQeV9Ob25lKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgb2JqID0gUHlPYmplY3RfR2V0QXR0cihtb2R1bGUsIGdsb2JhbF9uYW1lKTsKKyAgICAgICAgb2JqID0gZ2V0YXR0cmlidXRlKG1vZHVsZSwgZ2xvYmFsX25hbWUsIGFsbG93X3F1YWxuYW1lKTsKICAgICAgICAgaWYgKG9iaiA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19BdHRyaWJ1dGVFcnJvcikpCi0gICAgICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKLSAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGlmICghUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19BdHRyaWJ1dGVFcnJvcikpCiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICBQeUVycl9DbGVhcigpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAob2JqICE9IGdsb2JhbCkgeworICAgICAgICBpZiAob2JqID09IGdsb2JhbCkgewogICAgICAgICAgICAgUHlfREVDUkVGKG9iaik7Ci0gICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIFB5X0lOQ1JFRihtb2R1bGVfbmFtZSk7CisgICAgICAgICAgICByZXR1cm4gbW9kdWxlX25hbWU7CiAgICAgICAgIH0KLQogICAgICAgICBQeV9ERUNSRUYob2JqKTsKLSAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgLyogSWYgbm8gbW9kdWxlIGlzIGZvdW5kLCB1c2UgX19tYWluX18uICovCi0gICAgaWYgKCFqKSB7Ci0gICAgICAgIG1vZHVsZV9uYW1lID0gbWFpbl9zdHI7Ci0gICAgfQotCisgICAgbW9kdWxlX25hbWUgPSBfUHlVbmljb2RlX0Zyb21JZCgmUHlJZF9fX21haW5fXyk7CiAgICAgUHlfSU5DUkVGKG1vZHVsZV9uYW1lKTsKICAgICByZXR1cm4gbW9kdWxlX25hbWU7CiB9CkBAIC0xNDIwLDcgKzE2ODMsNyBAQAogICAgICAgICBrZXkgPSBQeUxvbmdfRnJvbVZvaWRQdHIob2JqKTsKICAgICAgICAgaWYgKGtleSA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIGlmIChQeURpY3RfR2V0SXRlbShzZWxmLT5mYXN0X21lbW8sIGtleSkpIHsKKyAgICAgICAgaWYgKFB5RGljdF9HZXRJdGVtV2l0aEVycm9yKHNlbGYtPmZhc3RfbWVtbywga2V5KSkgewogICAgICAgICAgICAgUHlfREVDUkVGKGtleSk7CiAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAiZmFzdCBtb2RlOiBjYW4ndCBwaWNrbGUgY3ljbGljIG9iamVjdHMgIgpAQCAtMTQyOSw2ICsxNjkyLDkgQEAKICAgICAgICAgICAgIHNlbGYtPmZhc3RfbmVzdGluZyA9IC0xOwogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KKyAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CiAgICAgICAgIGlmIChQeURpY3RfU2V0SXRlbShzZWxmLT5mYXN0X21lbW8sIGtleSwgUHlfTm9uZSkgPCAwKSB7CiAgICAgICAgICAgICBQeV9ERUNSRUYoa2V5KTsKICAgICAgICAgICAgIHNlbGYtPmZhc3RfbmVzdGluZyA9IC0xOwpAQCAtMTQ2OCw0NiArMTczNCw1OCBAQAogc3RhdGljIGludAogc2F2ZV9ib29sKFBpY2tsZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpvYmopCiB7Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIgKmJ1ZlsyXSA9IHsgRkFMU0UsIFRSVUUgfTsKLSAgICBjb25zdCBjaGFyIGxlblsyXSA9IHtzaXplb2YoRkFMU0UpIC0gMSwgc2l6ZW9mKFRSVUUpIC0gMX07Ci0gICAgaW50IHAgPSAob2JqID09IFB5X1RydWUpOwotCiAgICAgaWYgKHNlbGYtPnByb3RvID49IDIpIHsKLSAgICAgICAgY29uc3QgY2hhciBib29sX29wID0gcCA/IE5FV1RSVUUgOiBORVdGQUxTRTsKKyAgICAgICAgY29uc3QgY2hhciBib29sX29wID0gKG9iaiA9PSBQeV9UcnVlKSA/IE5FV1RSVUUgOiBORVdGQUxTRTsKICAgICAgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsICZib29sX29wLCAxKSA8IDApCiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgfQotICAgIGVsc2UgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsIGJ1ZltwXSwgbGVuW3BdKSA8IDApCi0gICAgICAgIHJldHVybiAtMTsKLQorICAgIGVsc2UgeworICAgICAgICAvKiBUaGVzZSBhcmVuJ3Qgb3Bjb2RlcyAtLSB0aGV5J3JlIHdheXMgdG8gcGlja2xlIGJvb2xzIGJlZm9yZSBwcm90b2NvbCAyCisgICAgICAgICAqIHNvIHRoYXQgdW5waWNrbGVycyB3cml0dGVuIGJlZm9yZSBib29scyB3ZXJlIGludHJvZHVjZWQgdW5waWNrbGUgdGhlbQorICAgICAgICAgKiBhcyBpbnRzLCBidXQgdW5waWNrbGVycyBhZnRlciBjYW4gcmVjb2duaXplIHRoYXQgYm9vbHMgd2VyZSBpbnRlbmRlZC4KKyAgICAgICAgICogTm90ZSB0aGF0IHByb3RvY29sIDIgYWRkZWQgZGlyZWN0IHdheXMgdG8gcGlja2xlIGJvb2xzLgorICAgICAgICAgKi8KKyAgICAgICAgY29uc3QgY2hhciAqYm9vbF9zdHIgPSAob2JqID09IFB5X1RydWUpID8gIkkwMVxuIiA6ICJJMDBcbiI7CisgICAgICAgIGlmIChfUGlja2xlcl9Xcml0ZShzZWxmLCBib29sX3N0ciwgc3RybGVuKGJvb2xfc3RyKSkgPCAwKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgIH0KICAgICByZXR1cm4gMDsKIH0KIAogc3RhdGljIGludAotc2F2ZV9pbnQoUGlja2xlck9iamVjdCAqc2VsZiwgbG9uZyB4KQorc2F2ZV9sb25nKFBpY2tsZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpvYmopCiB7Ci0gICAgY2hhciBwZGF0YVszMl07Ci0gICAgUHlfc3NpemVfdCBsZW4gPSAwOworICAgIFB5T2JqZWN0ICpyZXByID0gTlVMTDsKKyAgICBQeV9zc2l6ZV90IHNpemU7CisgICAgbG9uZyB2YWw7CisgICAgaW50IHN0YXR1cyA9IDA7CiAKLSAgICBpZiAoIXNlbGYtPmJpbgotI2lmIFNJWkVPRl9MT05HID4gNAotICAgICAgICB8fCB4ID4gMHg3ZmZmZmZmZkwgfHwgeCA8IC0weDgwMDAwMDAwTAotI2VuZGlmCi0gICAgICAgICkgewotICAgICAgICAvKiBUZXh0LW1vZGUgcGlja2xlLCBvciBsb25nIHRvbyBiaWcgdG8gZml0IGluIHRoZSA0LWJ5dGUKLSAgICAgICAgICogc2lnbmVkIEJJTklOVCBmb3JtYXQ6ICBzdG9yZSBhcyBhIHN0cmluZy4KLSAgICAgICAgICovCi0gICAgICAgIHBkYXRhWzBdID0gTE9ORzsgICAgICAgIC8qIHVzZSBMT05HIGZvciBjb25zaXN0ZW5jeSB3aXRoIHBpY2tsZS5weSAqLwotICAgICAgICBQeU9TX3NucHJpbnRmKHBkYXRhICsgMSwgc2l6ZW9mKHBkYXRhKSAtIDEsICIlbGRMXG4iLCB4KTsKLSAgICAgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsIHBkYXRhLCBzdHJsZW4ocGRhdGEpKSA8IDApCi0gICAgICAgICAgICByZXR1cm4gLTE7CisgICAgY29uc3QgY2hhciBsb25nX29wID0gTE9ORzsKKworICAgIHZhbD0gUHlMb25nX0FzTG9uZyhvYmopOworICAgIGlmICh2YWwgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICAvKiBvdXQgb2YgcmFuZ2UgZm9yIGludCBwaWNrbGluZyAqLworICAgICAgICBQeUVycl9DbGVhcigpOwogICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgLyogQmluYXJ5IHBpY2tsZSBhbmQgeCBmaXRzIGluIGEgc2lnbmVkIDQtYnl0ZSBpbnQuICovCi0gICAgICAgIHBkYXRhWzFdID0gKHVuc2lnbmVkIGNoYXIpKHggJiAweGZmKTsKLSAgICAgICAgcGRhdGFbMl0gPSAodW5zaWduZWQgY2hhcikoKHggPj4gOCkgJiAweGZmKTsKLSAgICAgICAgcGRhdGFbM10gPSAodW5zaWduZWQgY2hhcikoKHggPj4gMTYpICYgMHhmZik7Ci0gICAgICAgIHBkYXRhWzRdID0gKHVuc2lnbmVkIGNoYXIpKCh4ID4+IDI0KSAmIDB4ZmYpOworICAgIGVsc2UgaWYgKHNlbGYtPmJpbiAmJgorICAgICAgICAgICAgIChzaXplb2YobG9uZykgPD0gNCB8fAorICAgICAgICAgICAgICAodmFsIDw9IDB4N2ZmZmZmZmZMICYmIHZhbCA+PSAoLTB4N2ZmZmZmZmZMIC0gMSkpKSkgeworICAgICAgICAvKiByZXN1bHQgZml0cyBpbiBhIHNpZ25lZCA0LWJ5dGUgaW50ZWdlci4KKworICAgICAgICAgICBOb3RlOiB3ZSBjYW4ndCB1c2UgLTB4ODAwMDAwMDBMIGluIHRoZSBhYm92ZSBjb25kaXRpb24gYmVjYXVzZSBzb21lCisgICAgICAgICAgIGNvbXBpbGVycyAoZS5nLiwgTVNWQykgd2lsbCBwcm9tb3RlIDB4ODAwMDAwMDBMIHRvIGFuIHVuc2lnbmVkIHR5cGUKKyAgICAgICAgICAgYmVmb3JlIGFwcGx5aW5nIHRoZSB1bmFyeSBtaW51cyB3aGVuIHNpemVvZihsb25nKSA8PSA0LiBUaGUKKyAgICAgICAgICAgcmVzdWx0aW5nIHZhbHVlIHN0YXlzIHVuc2lnbmVkIHdoaWNoIGlzIGNvbW1vbmx5IG5vdCB3aGF0IHdlIHdhbnQsCisgICAgICAgICAgIHNvIE1TVkMgaGFwcGlseSB3YXJucyB1cyBhYm91dCBpdC4gIEhvd2V2ZXIsIHRoYXQgcmVzdWx0IHdvdWxkIGhhdmUKKyAgICAgICAgICAgYmVlbiBmaW5lIGJlY2F1c2Ugd2UgZ3VhcmQgZm9yIHNpemVvZihsb25nKSA8PSA0IHdoaWNoIHR1cm5zIHRoZQorICAgICAgICAgICBjb25kaXRpb24gdHJ1ZSBpbiB0aGF0IHBhcnRpY3VsYXIgY2FzZS4gKi8KKyAgICAgICAgY2hhciBwZGF0YVszMl07CisgICAgICAgIFB5X3NzaXplX3QgbGVuID0gMDsKKworICAgICAgICBwZGF0YVsxXSA9ICh1bnNpZ25lZCBjaGFyKSh2YWwgJiAweGZmKTsKKyAgICAgICAgcGRhdGFbMl0gPSAodW5zaWduZWQgY2hhcikoKHZhbCA+PiA4KSAmIDB4ZmYpOworICAgICAgICBwZGF0YVszXSA9ICh1bnNpZ25lZCBjaGFyKSgodmFsID4+IDE2KSAmIDB4ZmYpOworICAgICAgICBwZGF0YVs0XSA9ICh1bnNpZ25lZCBjaGFyKSgodmFsID4+IDI0KSAmIDB4ZmYpOwogCiAgICAgICAgIGlmICgocGRhdGFbNF0gPT0gMCkgJiYgKHBkYXRhWzNdID09IDApKSB7CiAgICAgICAgICAgICBpZiAocGRhdGFbMl0gPT0gMCkgewpAQCAtMTUyNiwzMSArMTgwNCwxMCBAQAogCiAgICAgICAgIGlmIChfUGlja2xlcl9Xcml0ZShzZWxmLCBwZGF0YSwgbGVuKSA8IDApCiAgICAgICAgICAgICByZXR1cm4gLTE7CisKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLXNhdmVfbG9uZyhQaWNrbGVyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqb2JqKQotewotICAgIFB5T2JqZWN0ICpyZXByID0gTlVMTDsKLSAgICBQeV9zc2l6ZV90IHNpemU7Ci0gICAgbG9uZyB2YWwgPSBQeUxvbmdfQXNMb25nKG9iaik7Ci0gICAgaW50IHN0YXR1cyA9IDA7Ci0KLSAgICBjb25zdCBjaGFyIGxvbmdfb3AgPSBMT05HOwotCi0gICAgaWYgKHZhbCA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKSB7Ci0gICAgICAgIC8qIG91dCBvZiByYW5nZSBmb3IgaW50IHBpY2tsaW5nICovCi0gICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgfQotICAgIGVsc2UKLSNpZiBTSVpFT0ZfTE9ORyA+IDQKLSAgICAgICAgaWYgKHZhbCA8PSAweDdmZmZmZmZmTCAmJiB2YWwgPj0gLTB4ODAwMDAwMDBMKQotI2VuZGlmCi0gICAgICAgICAgICByZXR1cm4gc2F2ZV9pbnQoc2VsZiwgdmFsKTsKLQogICAgIGlmIChzZWxmLT5wcm90byA+PSAyKSB7CiAgICAgICAgIC8qIExpbmVhci10aW1lIHBpY2tsaW5nLiAqLwogICAgICAgICBzaXplX3QgbmJpdHM7CkBAIC0xNzE1LDQwICsxOTcyLDI1IEBACiAgICAgICAgICAgIFB5dGhvbiAyICphbmQqIHRoZSBhcHByb3ByaWF0ZSAnYnl0ZXMnIG9iamVjdCB3aGVuIHVucGlja2xlZAogICAgICAgICAgICB1c2luZyBQeXRob24gMy4gQWdhaW4gdGhpcyBpcyBhIGhhY2sgYW5kIHdlIGRvbid0IG5lZWQgdG8gZG8gdGhpcwogICAgICAgICAgICB3aXRoIG5ld2VyIHByb3RvY29scy4gKi8KLSAgICAgICAgc3RhdGljIFB5T2JqZWN0ICpjb2RlY3NfZW5jb2RlID0gTlVMTDsKICAgICAgICAgUHlPYmplY3QgKnJlZHVjZV92YWx1ZSA9IE5VTEw7CiAgICAgICAgIGludCBzdGF0dXM7CiAKLSAgICAgICAgaWYgKGNvZGVjc19lbmNvZGUgPT0gTlVMTCkgewotICAgICAgICAgICAgUHlPYmplY3QgKmNvZGVjc19tb2R1bGUgPSBQeUltcG9ydF9JbXBvcnRNb2R1bGUoImNvZGVjcyIpOwotICAgICAgICAgICAgaWYgKGNvZGVjc19tb2R1bGUgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNvZGVjc19lbmNvZGUgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKGNvZGVjc19tb2R1bGUsICJlbmNvZGUiKTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihjb2RlY3NfbW9kdWxlKTsKLSAgICAgICAgICAgIGlmIChjb2RlY3NfZW5jb2RlID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQogICAgICAgICBpZiAoUHlCeXRlc19HRVRfU0laRShvYmopID09IDApIHsKICAgICAgICAgICAgIHJlZHVjZV92YWx1ZSA9IFB5X0J1aWxkVmFsdWUoIihPKCkpIiwgKFB5T2JqZWN0KikmUHlCeXRlc19UeXBlKTsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHN0YXRpYyBQeU9iamVjdCAqbGF0aW4xID0gTlVMTDsKKyAgICAgICAgICAgIFBpY2tsZVN0YXRlICpzdCA9IF9QaWNrbGVfR2V0R2xvYmFsU3RhdGUoKTsKICAgICAgICAgICAgIFB5T2JqZWN0ICp1bmljb2RlX3N0ciA9CiAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0RlY29kZUxhdGluMShQeUJ5dGVzX0FTX1NUUklORyhvYmopLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlCeXRlc19HRVRfU0laRShvYmopLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN0cmljdCIpOworICAgICAgICAgICAgX1B5X0lERU5USUZJRVIobGF0aW4xKTsKKwogICAgICAgICAgICAgaWYgKHVuaWNvZGVfc3RyID09IE5VTEwpCiAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgaWYgKGxhdGluMSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgbGF0aW4xID0gUHlVbmljb2RlX0ludGVybkZyb21TdHJpbmcoImxhdGluMSIpOwotICAgICAgICAgICAgICAgIGlmIChsYXRpbjEgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgfQogICAgICAgICAgICAgcmVkdWNlX3ZhbHVlID0gUHlfQnVpbGRWYWx1ZSgiKE8oT08pKSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVjc19lbmNvZGUsIHVuaWNvZGVfc3RyLCBsYXRpbjEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdC0+Y29kZWNzX2VuY29kZSwgdW5pY29kZV9zdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QeVVuaWNvZGVfRnJvbUlkKCZQeUlkX2xhdGluMSkpOwogICAgICAgICAgICAgUHlfREVDUkVGKHVuaWNvZGVfc3RyKTsKICAgICAgICAgfQogCkBAIC0xNzYyLDE0ICsyMDA0LDE0IEBACiAgICAgfQogICAgIGVsc2UgewogICAgICAgICBQeV9zc2l6ZV90IHNpemU7Ci0gICAgICAgIGNoYXIgaGVhZGVyWzVdOworICAgICAgICBjaGFyIGhlYWRlcls5XTsKICAgICAgICAgUHlfc3NpemVfdCBsZW47CiAKICAgICAgICAgc2l6ZSA9IFB5Qnl0ZXNfR0VUX1NJWkUob2JqKTsKICAgICAgICAgaWYgKHNpemUgPCAwKQogICAgICAgICAgICAgcmV0dXJuIC0xOwogCi0gICAgICAgIGlmIChzaXplIDwgMjU2KSB7CisgICAgICAgIGlmIChzaXplIDw9IDB4ZmYpIHsKICAgICAgICAgICAgIGhlYWRlclswXSA9IFNIT1JUX0JJTkJZVEVTOwogICAgICAgICAgICAgaGVhZGVyWzFdID0gKHVuc2lnbmVkIGNoYXIpc2l6ZTsKICAgICAgICAgICAgIGxlbiA9IDI7CkBAIC0xNzgyLDYgKzIwMjQsMTEgQEAKICAgICAgICAgICAgIGhlYWRlcls0XSA9ICh1bnNpZ25lZCBjaGFyKSgoc2l6ZSA+PiAyNCkgJiAweGZmKTsKICAgICAgICAgICAgIGxlbiA9IDU7CiAgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoc2VsZi0+cHJvdG8gPj0gNCkgeworICAgICAgICAgICAgaGVhZGVyWzBdID0gQklOQllURVM4OworICAgICAgICAgICAgX3dyaXRlX3NpemU2NChoZWFkZXIgKyAxLCBzaXplKTsKKyAgICAgICAgICAgIGxlbiA9IDk7CisgICAgICAgIH0KICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2Fubm90IHNlcmlhbGl6ZSBhIGJ5dGVzIG9iamVjdCBsYXJnZXIgdGhhbiA0IEdpQiIpOwpAQCAtMTg2OSw2MyArMjExNiwxMDYgQEAKIH0KIAogc3RhdGljIGludAotc2F2ZV91bmljb2RlKFBpY2tsZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpvYmopCit3cml0ZV91dGY4KFBpY2tsZXJPYmplY3QgKnNlbGYsIGNoYXIgKmRhdGEsIFB5X3NzaXplX3Qgc2l6ZSkKIHsKLSAgICBQeV9zc2l6ZV90IHNpemU7Ci0gICAgUHlPYmplY3QgKmVuY29kZWQgPSBOVUxMOworICAgIGNoYXIgaGVhZGVyWzldOworICAgIFB5X3NzaXplX3QgbGVuOwogCi0gICAgaWYgKHNlbGYtPmJpbikgewotICAgICAgICBjaGFyIHBkYXRhWzVdOwotCi0gICAgICAgIGVuY29kZWQgPSBQeVVuaWNvZGVfQXNFbmNvZGVkU3RyaW5nKG9iaiwgInV0Zi04IiwgInN1cnJvZ2F0ZXBhc3MiKTsKLSAgICAgICAgaWYgKGVuY29kZWQgPT0gTlVMTCkKLSAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0KLSAgICAgICAgc2l6ZSA9IFB5Qnl0ZXNfR0VUX1NJWkUoZW5jb2RlZCk7Ci0gICAgICAgIGlmIChzaXplID4gMHhmZmZmZmZmZkwpIHsKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjYW5ub3Qgc2VyaWFsaXplIGEgc3RyaW5nIGxhcmdlciB0aGFuIDQgR2lCIik7Ci0gICAgICAgICAgICBnb3RvIGVycm9yOyAgICAgICAgICAvKiBzdHJpbmcgdG9vIGxhcmdlICovCi0gICAgICAgIH0KLQotICAgICAgICBwZGF0YVswXSA9IEJJTlVOSUNPREU7Ci0gICAgICAgIHBkYXRhWzFdID0gKHVuc2lnbmVkIGNoYXIpKHNpemUgJiAweGZmKTsKLSAgICAgICAgcGRhdGFbMl0gPSAodW5zaWduZWQgY2hhcikoKHNpemUgPj4gOCkgJiAweGZmKTsKLSAgICAgICAgcGRhdGFbM10gPSAodW5zaWduZWQgY2hhcikoKHNpemUgPj4gMTYpICYgMHhmZik7Ci0gICAgICAgIHBkYXRhWzRdID0gKHVuc2lnbmVkIGNoYXIpKChzaXplID4+IDI0KSAmIDB4ZmYpOwotCi0gICAgICAgIGlmIChfUGlja2xlcl9Xcml0ZShzZWxmLCBwZGF0YSwgNSkgPCAwKQotICAgICAgICAgICAgZ290byBlcnJvcjsKLQotICAgICAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgUHlCeXRlc19BU19TVFJJTkcoZW5jb2RlZCksIHNpemUpIDwgMCkKLSAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgaWYgKHNpemUgPD0gMHhmZiAmJiBzZWxmLT5wcm90byA+PSA0KSB7CisgICAgICAgIGhlYWRlclswXSA9IFNIT1JUX0JJTlVOSUNPREU7CisgICAgICAgIGhlYWRlclsxXSA9ICh1bnNpZ25lZCBjaGFyKShzaXplICYgMHhmZik7CisgICAgICAgIGxlbiA9IDI7CisgICAgfQorICAgIGVsc2UgaWYgKHNpemUgPD0gMHhmZmZmZmZmZlVMKSB7CisgICAgICAgIGhlYWRlclswXSA9IEJJTlVOSUNPREU7CisgICAgICAgIGhlYWRlclsxXSA9ICh1bnNpZ25lZCBjaGFyKShzaXplICYgMHhmZik7CisgICAgICAgIGhlYWRlclsyXSA9ICh1bnNpZ25lZCBjaGFyKSgoc2l6ZSA+PiA4KSAmIDB4ZmYpOworICAgICAgICBoZWFkZXJbM10gPSAodW5zaWduZWQgY2hhcikoKHNpemUgPj4gMTYpICYgMHhmZik7CisgICAgICAgIGhlYWRlcls0XSA9ICh1bnNpZ25lZCBjaGFyKSgoc2l6ZSA+PiAyNCkgJiAweGZmKTsKKyAgICAgICAgbGVuID0gNTsKKyAgICB9CisgICAgZWxzZSBpZiAoc2VsZi0+cHJvdG8gPj0gNCkgeworICAgICAgICBoZWFkZXJbMF0gPSBCSU5VTklDT0RFODsKKyAgICAgICAgX3dyaXRlX3NpemU2NChoZWFkZXIgKyAxLCBzaXplKTsKKyAgICAgICAgbGVuID0gOTsKICAgICB9CiAgICAgZWxzZSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgImNhbm5vdCBzZXJpYWxpemUgYSBzdHJpbmcgbGFyZ2VyIHRoYW4gNEdpQiIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsIGhlYWRlciwgbGVuKSA8IDApCisgICAgICAgIHJldHVybiAtMTsKKyAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgZGF0YSwgc2l6ZSkgPCAwKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAord3JpdGVfdW5pY29kZV9iaW5hcnkoUGlja2xlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm9iaikKK3sKKyAgICBQeU9iamVjdCAqZW5jb2RlZCA9IE5VTEw7CisgICAgUHlfc3NpemVfdCBzaXplOworICAgIGNoYXIgKmRhdGE7CisgICAgaW50IHI7CisKKyAgICBpZiAoUHlVbmljb2RlX1JFQURZKG9iaikpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGRhdGEgPSBQeVVuaWNvZGVfQXNVVEY4QW5kU2l6ZShvYmosICZzaXplKTsKKyAgICBpZiAoZGF0YSAhPSBOVUxMKQorICAgICAgICByZXR1cm4gd3JpdGVfdXRmOChzZWxmLCBkYXRhLCBzaXplKTsKKworICAgIC8qIElzc3VlICM4MzgzOiBmb3Igc3RyaW5ncyB3aXRoIGxvbmUgc3Vycm9nYXRlcywgZmFsbGJhY2sgb24gdGhlCisgICAgICAgInN1cnJvZ2F0ZXBhc3MiIGVycm9yIGhhbmRsZXIuICovCisgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICBlbmNvZGVkID0gUHlVbmljb2RlX0FzRW5jb2RlZFN0cmluZyhvYmosICJ1dGYtOCIsICJzdXJyb2dhdGVwYXNzIik7CisgICAgaWYgKGVuY29kZWQgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgciA9IHdyaXRlX3V0Zjgoc2VsZiwgUHlCeXRlc19BU19TVFJJTkcoZW5jb2RlZCksCisgICAgICAgICAgICAgICAgICAgUHlCeXRlc19HRVRfU0laRShlbmNvZGVkKSk7CisgICAgUHlfREVDUkVGKGVuY29kZWQpOworICAgIHJldHVybiByOworfQorCitzdGF0aWMgaW50CitzYXZlX3VuaWNvZGUoUGlja2xlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm9iaikKK3sKKyAgICBpZiAoc2VsZi0+YmluKSB7CisgICAgICAgIGlmICh3cml0ZV91bmljb2RlX2JpbmFyeShzZWxmLCBvYmopIDwgMCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIFB5T2JqZWN0ICplbmNvZGVkOworICAgICAgICBQeV9zc2l6ZV90IHNpemU7CiAgICAgICAgIGNvbnN0IGNoYXIgdW5pY29kZV9vcCA9IFVOSUNPREU7CiAKICAgICAgICAgZW5jb2RlZCA9IHJhd191bmljb2RlX2VzY2FwZShvYmopOwogICAgICAgICBpZiAoZW5jb2RlZCA9PSBOVUxMKQotICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIHJldHVybiAtMTsKIAotICAgICAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgJnVuaWNvZGVfb3AsIDEpIDwgMCkKLSAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIGlmIChfUGlja2xlcl9Xcml0ZShzZWxmLCAmdW5pY29kZV9vcCwgMSkgPCAwKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoZW5jb2RlZCk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KIAogICAgICAgICBzaXplID0gUHlCeXRlc19HRVRfU0laRShlbmNvZGVkKTsKLSAgICAgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsIFB5Qnl0ZXNfQVNfU1RSSU5HKGVuY29kZWQpLCBzaXplKSA8IDApCi0gICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgUHlCeXRlc19BU19TVFJJTkcoZW5jb2RlZCksIHNpemUpIDwgMCkgeworICAgICAgICAgICAgUHlfREVDUkVGKGVuY29kZWQpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIFB5X0RFQ1JFRihlbmNvZGVkKTsKIAogICAgICAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgIlxuIiwgMSkgPCAwKQotICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAgICAgaWYgKG1lbW9fcHV0KHNlbGYsIG9iaikgPCAwKQotICAgICAgICBnb3RvIGVycm9yOworICAgICAgICByZXR1cm4gLTE7CiAKLSAgICBQeV9ERUNSRUYoZW5jb2RlZCk7CiAgICAgcmV0dXJuIDA7Ci0KLSAgZXJyb3I6Ci0gICAgUHlfWERFQ1JFRihlbmNvZGVkKTsKLSAgICByZXR1cm4gLTE7CiB9CiAKIC8qIEEgaGVscGVyIGZvciBzYXZlX3R1cGxlLiAgUHVzaCB0aGUgbGVuIGVsZW1lbnRzIGluIHR1cGxlIHQgb24gdGhlIHN0YWNrLiAqLwpAQCAtMjU1MywzNCArMjg0MywyNTMgQEAKIH0KIAogc3RhdGljIGludAorc2F2ZV9zZXQoUGlja2xlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm9iaikKK3sKKyAgICBQeU9iamVjdCAqaXRlbTsKKyAgICBpbnQgaTsKKyAgICBQeV9zc2l6ZV90IHNldF9zaXplLCBwcG9zID0gMDsKKyAgICBQeV9oYXNoX3QgaGFzaDsKKworICAgIGNvbnN0IGNoYXIgZW1wdHlfc2V0X29wID0gRU1QVFlfU0VUOworICAgIGNvbnN0IGNoYXIgbWFya19vcCA9IE1BUks7CisgICAgY29uc3QgY2hhciBhZGRpdGVtc19vcCA9IEFERElURU1TOworCisgICAgaWYgKHNlbGYtPnByb3RvIDwgNCkgeworICAgICAgICBQeU9iamVjdCAqaXRlbXM7CisgICAgICAgIFB5T2JqZWN0ICpyZWR1Y2VfdmFsdWU7CisgICAgICAgIGludCBzdGF0dXM7CisKKyAgICAgICAgaXRlbXMgPSBQeVNlcXVlbmNlX0xpc3Qob2JqKTsKKyAgICAgICAgaWYgKGl0ZW1zID09IE5VTEwpIHsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICByZWR1Y2VfdmFsdWUgPSBQeV9CdWlsZFZhbHVlKCIoTyhPKSkiLCAoUHlPYmplY3QqKSZQeVNldF9UeXBlLCBpdGVtcyk7CisgICAgICAgIFB5X0RFQ1JFRihpdGVtcyk7CisgICAgICAgIGlmIChyZWR1Y2VfdmFsdWUgPT0gTlVMTCkgeworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIC8qIHNhdmVfcmVkdWNlKCkgd2lsbCBtZW1vaXplIHRoZSBvYmplY3QgYXV0b21hdGljYWxseS4gKi8KKyAgICAgICAgc3RhdHVzID0gc2F2ZV9yZWR1Y2Uoc2VsZiwgcmVkdWNlX3ZhbHVlLCBvYmopOworICAgICAgICBQeV9ERUNSRUYocmVkdWNlX3ZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisKKyAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgJmVtcHR5X3NldF9vcCwgMSkgPCAwKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBpZiAobWVtb19wdXQoc2VsZiwgb2JqKSA8IDApCisgICAgICAgIHJldHVybiAtMTsKKworICAgIHNldF9zaXplID0gUHlTZXRfR0VUX1NJWkUob2JqKTsKKyAgICBpZiAoc2V0X3NpemUgPT0gMCkKKyAgICAgICAgcmV0dXJuIDA7ICAvKiBub3RoaW5nIHRvIGRvICovCisKKyAgICAvKiBXcml0ZSBpbiBiYXRjaGVzIG9mIEJBVENIU0laRS4gKi8KKyAgICBkbyB7CisgICAgICAgIGkgPSAwOworICAgICAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgJm1hcmtfb3AsIDEpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgd2hpbGUgKF9QeVNldF9OZXh0RW50cnkob2JqLCAmcHBvcywgJml0ZW0sICZoYXNoKSkgeworICAgICAgICAgICAgaWYgKHNhdmUoc2VsZiwgaXRlbSwgMCkgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIGlmICgrK2kgPT0gQkFUQ0hTSVpFKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmIChfUGlja2xlcl9Xcml0ZShzZWxmLCAmYWRkaXRlbXNfb3AsIDEpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgaWYgKFB5U2V0X0dFVF9TSVpFKG9iaikgIT0gc2V0X3NpemUpIHsKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdCgKKyAgICAgICAgICAgICAgICBQeUV4Y19SdW50aW1lRXJyb3IsCisgICAgICAgICAgICAgICAgInNldCBjaGFuZ2VkIHNpemUgZHVyaW5nIGl0ZXJhdGlvbiIpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgfSB3aGlsZSAoaSA9PSBCQVRDSFNJWkUpOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3NhdmVfZnJvemVuc2V0KFBpY2tsZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpvYmopCit7CisgICAgUHlPYmplY3QgKml0ZXI7CisKKyAgICBjb25zdCBjaGFyIG1hcmtfb3AgPSBNQVJLOworICAgIGNvbnN0IGNoYXIgZnJvemVuc2V0X29wID0gRlJPWkVOU0VUOworCisgICAgaWYgKHNlbGYtPmZhc3QgJiYgIWZhc3Rfc2F2ZV9lbnRlcihzZWxmLCBvYmopKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBpZiAoc2VsZi0+cHJvdG8gPCA0KSB7CisgICAgICAgIFB5T2JqZWN0ICppdGVtczsKKyAgICAgICAgUHlPYmplY3QgKnJlZHVjZV92YWx1ZTsKKyAgICAgICAgaW50IHN0YXR1czsKKworICAgICAgICBpdGVtcyA9IFB5U2VxdWVuY2VfTGlzdChvYmopOworICAgICAgICBpZiAoaXRlbXMgPT0gTlVMTCkgeworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIHJlZHVjZV92YWx1ZSA9IFB5X0J1aWxkVmFsdWUoIihPKE8pKSIsIChQeU9iamVjdCopJlB5RnJvemVuU2V0X1R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMpOworICAgICAgICBQeV9ERUNSRUYoaXRlbXMpOworICAgICAgICBpZiAocmVkdWNlX3ZhbHVlID09IE5VTEwpIHsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICAvKiBzYXZlX3JlZHVjZSgpIHdpbGwgbWVtb2l6ZSB0aGUgb2JqZWN0IGF1dG9tYXRpY2FsbHkuICovCisgICAgICAgIHN0YXR1cyA9IHNhdmVfcmVkdWNlKHNlbGYsIHJlZHVjZV92YWx1ZSwgb2JqKTsKKyAgICAgICAgUHlfREVDUkVGKHJlZHVjZV92YWx1ZSk7CisgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgfQorCisgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsICZtYXJrX29wLCAxKSA8IDApCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGl0ZXIgPSBQeU9iamVjdF9HZXRJdGVyKG9iaik7CisgICAgaWYgKGl0ZXIgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGZvciAoOzspIHsKKyAgICAgICAgUHlPYmplY3QgKml0ZW07CisKKyAgICAgICAgaXRlbSA9IFB5SXRlcl9OZXh0KGl0ZXIpOworICAgICAgICBpZiAoaXRlbSA9PSBOVUxMKSB7CisgICAgICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihpdGVyKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAoc2F2ZShzZWxmLCBpdGVtLCAwKSA8IDApIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihpdGVtKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihpdGVyKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBQeV9ERUNSRUYoaXRlbSk7CisgICAgfQorICAgIFB5X0RFQ1JFRihpdGVyKTsKKworICAgIC8qIElmIHRoZSBvYmplY3QgaXMgYWxyZWFkeSBpbiB0aGUgbWVtbywgdGhpcyBtZWFucyBpdCBpcworICAgICAgIHJlY3Vyc2l2ZS4gSW4gdGhpcyBjYXNlLCB0aHJvdyBhd2F5IGV2ZXJ5dGhpbmcgd2UgcHV0IG9uIHRoZQorICAgICAgIHN0YWNrLCBhbmQgZmV0Y2ggdGhlIG9iamVjdCBiYWNrIGZyb20gdGhlIG1lbW8uICovCisgICAgaWYgKFB5TWVtb1RhYmxlX0dldChzZWxmLT5tZW1vLCBvYmopKSB7CisgICAgICAgIGNvbnN0IGNoYXIgcG9wX21hcmtfb3AgPSBQT1BfTUFSSzsKKworICAgICAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgJnBvcF9tYXJrX29wLCAxKSA8IDApCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIGlmIChtZW1vX2dldChzZWxmLCBvYmopIDwgMCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsICZmcm96ZW5zZXRfb3AsIDEpIDwgMCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIGlmIChtZW1vX3B1dChzZWxmLCBvYmopIDwgMCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2ZpeF9pbXBvcnRzKFB5T2JqZWN0ICoqbW9kdWxlX25hbWUsIFB5T2JqZWN0ICoqZ2xvYmFsX25hbWUpCit7CisgICAgUHlPYmplY3QgKmtleTsKKyAgICBQeU9iamVjdCAqaXRlbTsKKyAgICBQaWNrbGVTdGF0ZSAqc3QgPSBfUGlja2xlX0dldEdsb2JhbFN0YXRlKCk7CisKKyAgICBrZXkgPSBQeVR1cGxlX1BhY2soMiwgKm1vZHVsZV9uYW1lLCAqZ2xvYmFsX25hbWUpOworICAgIGlmIChrZXkgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIGl0ZW0gPSBQeURpY3RfR2V0SXRlbVdpdGhFcnJvcihzdC0+bmFtZV9tYXBwaW5nXzN0bzIsIGtleSk7CisgICAgUHlfREVDUkVGKGtleSk7CisgICAgaWYgKGl0ZW0pIHsKKyAgICAgICAgUHlPYmplY3QgKmZpeGVkX21vZHVsZV9uYW1lOworICAgICAgICBQeU9iamVjdCAqZml4ZWRfZ2xvYmFsX25hbWU7CisKKyAgICAgICAgaWYgKCFQeVR1cGxlX0NoZWNrKGl0ZW0pIHx8IFB5VHVwbGVfR0VUX1NJWkUoaXRlbSkgIT0gMikgeworICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1J1bnRpbWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiX2NvbXBhdF9waWNrbGUuUkVWRVJTRV9OQU1FX01BUFBJTkcgdmFsdWVzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAic2hvdWxkIGJlIDItdHVwbGVzLCBub3QgJS4yMDBzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKGl0ZW0pLT50cF9uYW1lKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBmaXhlZF9tb2R1bGVfbmFtZSA9IFB5VHVwbGVfR0VUX0lURU0oaXRlbSwgMCk7CisgICAgICAgIGZpeGVkX2dsb2JhbF9uYW1lID0gUHlUdXBsZV9HRVRfSVRFTShpdGVtLCAxKTsKKyAgICAgICAgaWYgKCFQeVVuaWNvZGVfQ2hlY2soZml4ZWRfbW9kdWxlX25hbWUpIHx8CisgICAgICAgICAgICAhUHlVbmljb2RlX0NoZWNrKGZpeGVkX2dsb2JhbF9uYW1lKSkgeworICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1J1bnRpbWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiX2NvbXBhdF9waWNrbGUuUkVWRVJTRV9OQU1FX01BUFBJTkcgdmFsdWVzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAic2hvdWxkIGJlIHBhaXJzIG9mIHN0ciwgbm90ICglLjIwMHMsICUuMjAwcykiLAorICAgICAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUoZml4ZWRfbW9kdWxlX25hbWUpLT50cF9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUoZml4ZWRfZ2xvYmFsX25hbWUpLT50cF9uYW1lKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCisgICAgICAgIFB5X0NMRUFSKCptb2R1bGVfbmFtZSk7CisgICAgICAgIFB5X0NMRUFSKCpnbG9iYWxfbmFtZSk7CisgICAgICAgIFB5X0lOQ1JFRihmaXhlZF9tb2R1bGVfbmFtZSk7CisgICAgICAgIFB5X0lOQ1JFRihmaXhlZF9nbG9iYWxfbmFtZSk7CisgICAgICAgICptb2R1bGVfbmFtZSA9IGZpeGVkX21vZHVsZV9uYW1lOworICAgICAgICAqZ2xvYmFsX25hbWUgPSBmaXhlZF9nbG9iYWxfbmFtZTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGVsc2UgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGl0ZW0gPSBQeURpY3RfR2V0SXRlbVdpdGhFcnJvcihzdC0+aW1wb3J0X21hcHBpbmdfM3RvMiwgKm1vZHVsZV9uYW1lKTsKKyAgICBpZiAoaXRlbSkgeworICAgICAgICBpZiAoIVB5VW5pY29kZV9DaGVjayhpdGVtKSkgeworICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1J1bnRpbWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiX2NvbXBhdF9waWNrbGUuUkVWRVJTRV9JTVBPUlRfTUFQUElORyB2YWx1ZXMgIgorICAgICAgICAgICAgICAgICAgICAgICAgICJzaG91bGQgYmUgc3RyaW5ncywgbm90ICUuMjAwcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRShpdGVtKS0+dHBfbmFtZSk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgUHlfQ0xFQVIoKm1vZHVsZV9uYW1lKTsKKyAgICAgICAgUHlfSU5DUkVGKGl0ZW0pOworICAgICAgICAqbW9kdWxlX25hbWUgPSBpdGVtOworICAgIH0KKyAgICBlbHNlIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAogc2F2ZV9nbG9iYWwoUGlja2xlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm9iaiwgUHlPYmplY3QgKm5hbWUpCiB7Ci0gICAgc3RhdGljIFB5T2JqZWN0ICpuYW1lX3N0ciA9IE5VTEw7CiAgICAgUHlPYmplY3QgKmdsb2JhbF9uYW1lID0gTlVMTDsKICAgICBQeU9iamVjdCAqbW9kdWxlX25hbWUgPSBOVUxMOwogICAgIFB5T2JqZWN0ICptb2R1bGUgPSBOVUxMOwogICAgIFB5T2JqZWN0ICpjbHM7CisgICAgUGlja2xlU3RhdGUgKnN0ID0gX1BpY2tsZV9HZXRHbG9iYWxTdGF0ZSgpOwogICAgIGludCBzdGF0dXMgPSAwOworICAgIF9QeV9JREVOVElGSUVSKF9fbmFtZV9fKTsKKyAgICBfUHlfSURFTlRJRklFUihfX3F1YWxuYW1lX18pOwogCiAgICAgY29uc3QgY2hhciBnbG9iYWxfb3AgPSBHTE9CQUw7CiAKLSAgICBpZiAobmFtZV9zdHIgPT0gTlVMTCkgewotICAgICAgICBuYW1lX3N0ciA9IFB5VW5pY29kZV9JbnRlcm5Gcm9tU3RyaW5nKCJfX25hbWVfXyIpOwotICAgICAgICBpZiAobmFtZV9zdHIgPT0gTlVMTCkKLSAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgfQotCiAgICAgaWYgKG5hbWUpIHsKKyAgICAgICAgUHlfSU5DUkVGKG5hbWUpOwogICAgICAgICBnbG9iYWxfbmFtZSA9IG5hbWU7Ci0gICAgICAgIFB5X0lOQ1JFRihnbG9iYWxfbmFtZSk7CiAgICAgfQogICAgIGVsc2UgewotICAgICAgICBnbG9iYWxfbmFtZSA9IFB5T2JqZWN0X0dldEF0dHIob2JqLCBuYW1lX3N0cik7Ci0gICAgICAgIGlmIChnbG9iYWxfbmFtZSA9PSBOVUxMKQotICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgaWYgKHNlbGYtPnByb3RvID49IDQpIHsKKyAgICAgICAgICAgIGdsb2JhbF9uYW1lID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX19fcXVhbG5hbWVfXyk7CisgICAgICAgICAgICBpZiAoZ2xvYmFsX25hbWUgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIGlmICghUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19BdHRyaWJ1dGVFcnJvcikpCisgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoZ2xvYmFsX25hbWUgPT0gTlVMTCkgeworICAgICAgICAgICAgZ2xvYmFsX25hbWUgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgJlB5SWRfX19uYW1lX18pOworICAgICAgICAgICAgaWYgKGdsb2JhbF9uYW1lID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQogICAgIH0KIAotICAgIG1vZHVsZV9uYW1lID0gd2hpY2htb2R1bGUob2JqLCBnbG9iYWxfbmFtZSk7CisgICAgbW9kdWxlX25hbWUgPSB3aGljaG1vZHVsZShvYmosIGdsb2JhbF9uYW1lLCBzZWxmLT5wcm90byA+PSA0KTsKICAgICBpZiAobW9kdWxlX25hbWUgPT0gTlVMTCkKICAgICAgICAgZ290byBlcnJvcjsKIApAQCAtMjU5NCwyMSArMzEwMywyMSBAQAogICAgICAgIGV4dHJhIHBhcmFtZXRlcnMgb2YgX19pbXBvcnRfXyB0byBmaXggdGhhdC4gKi8KICAgICBtb2R1bGUgPSBQeUltcG9ydF9JbXBvcnQobW9kdWxlX25hbWUpOwogICAgIGlmIChtb2R1bGUgPT0gTlVMTCkgewotICAgICAgICBQeUVycl9Gb3JtYXQoUGlja2xpbmdFcnJvciwKKyAgICAgICAgUHlFcnJfRm9ybWF0KHN0LT5QaWNrbGluZ0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgIkNhbid0IHBpY2tsZSAlUjogaW1wb3J0IG9mIG1vZHVsZSAlUiBmYWlsZWQiLAogICAgICAgICAgICAgICAgICAgICAgb2JqLCBtb2R1bGVfbmFtZSk7CiAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQotICAgIGNscyA9IFB5T2JqZWN0X0dldEF0dHIobW9kdWxlLCBnbG9iYWxfbmFtZSk7CisgICAgY2xzID0gZ2V0YXR0cmlidXRlKG1vZHVsZSwgZ2xvYmFsX25hbWUsIHNlbGYtPnByb3RvID49IDQpOwogICAgIGlmIChjbHMgPT0gTlVMTCkgewotICAgICAgICBQeUVycl9Gb3JtYXQoUGlja2xpbmdFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICJDYW4ndCBwaWNrbGUgJVI6IGF0dHJpYnV0ZSBsb29rdXAgJVMuJVMgZmFpbGVkIiwKLSAgICAgICAgICAgICAgICAgICAgIG9iaiwgbW9kdWxlX25hbWUsIGdsb2JhbF9uYW1lKTsKKyAgICAgICAgUHlFcnJfRm9ybWF0KHN0LT5QaWNrbGluZ0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgIkNhbid0IHBpY2tsZSAlUjogYXR0cmlidXRlIGxvb2t1cCAlUyBvbiAlUyBmYWlsZWQiLAorICAgICAgICAgICAgICAgICAgICAgb2JqLCBnbG9iYWxfbmFtZSwgbW9kdWxlX25hbWUpOwogICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KICAgICBpZiAoY2xzICE9IG9iaikgewogICAgICAgICBQeV9ERUNSRUYoY2xzKTsKLSAgICAgICAgUHlFcnJfRm9ybWF0KFBpY2tsaW5nRXJyb3IsCisgICAgICAgIFB5RXJyX0Zvcm1hdChzdC0+UGlja2xpbmdFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICJDYW4ndCBwaWNrbGUgJVI6IGl0J3Mgbm90IHRoZSBzYW1lIG9iamVjdCBhcyAlUy4lUyIsCiAgICAgICAgICAgICAgICAgICAgICBvYmosIG1vZHVsZV9uYW1lLCBnbG9iYWxfbmFtZSk7CiAgICAgICAgIGdvdG8gZXJyb3I7CkBAIC0yNjE5LDE4ICszMTI4LDI3IEBACiAgICAgICAgIC8qIFNlZSB3aGV0aGVyIHRoaXMgaXMgaW4gdGhlIGV4dGVuc2lvbiByZWdpc3RyeSwgYW5kIGlmCiAgICAgICAgICAqIHNvIGdlbmVyYXRlIGFuIEVYVCBvcGNvZGUuCiAgICAgICAgICAqLworICAgICAgICBQeU9iamVjdCAqZXh0ZW5zaW9uX2tleTsKICAgICAgICAgUHlPYmplY3QgKmNvZGVfb2JqOyAgICAgIC8qIGV4dGVuc2lvbiBjb2RlIGFzIFB5dGhvbiBvYmplY3QgKi8KICAgICAgICAgbG9uZyBjb2RlOyAgICAgICAgICAgICAgIC8qIGV4dGVuc2lvbiBjb2RlIGFzIEMgdmFsdWUgKi8KICAgICAgICAgY2hhciBwZGF0YVs1XTsKICAgICAgICAgUHlfc3NpemVfdCBuOwogCi0gICAgICAgIFB5VHVwbGVfU0VUX0lURU0odHdvX3R1cGxlLCAwLCBtb2R1bGVfbmFtZSk7Ci0gICAgICAgIFB5VHVwbGVfU0VUX0lURU0odHdvX3R1cGxlLCAxLCBnbG9iYWxfbmFtZSk7Ci0gICAgICAgIGNvZGVfb2JqID0gUHlEaWN0X0dldEl0ZW0oZXh0ZW5zaW9uX3JlZ2lzdHJ5LCB0d29fdHVwbGUpOworICAgICAgICBleHRlbnNpb25fa2V5ID0gUHlUdXBsZV9QYWNrKDIsIG1vZHVsZV9uYW1lLCBnbG9iYWxfbmFtZSk7CisgICAgICAgIGlmIChleHRlbnNpb25fa2V5ID09IE5VTEwpIHsKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KKyAgICAgICAgY29kZV9vYmogPSBQeURpY3RfR2V0SXRlbVdpdGhFcnJvcihzdC0+ZXh0ZW5zaW9uX3JlZ2lzdHJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVuc2lvbl9rZXkpOworICAgICAgICBQeV9ERUNSRUYoZXh0ZW5zaW9uX2tleSk7CiAgICAgICAgIC8qIFRoZSBvYmplY3QgaXMgbm90IHJlZ2lzdGVyZWQgaW4gdGhlIGV4dGVuc2lvbiByZWdpc3RyeS4KICAgICAgICAgICAgVGhpcyBpcyB0aGUgbW9zdCBsaWtlbHkgY29kZSBwYXRoLiAqLwotICAgICAgICBpZiAoY29kZV9vYmogPT0gTlVMTCkKKyAgICAgICAgaWYgKGNvZGVfb2JqID09IE5VTEwpIHsKKyAgICAgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGdvdG8gZ2VuX2dsb2JhbDsKKyAgICAgICAgfQogCiAgICAgICAgIC8qIFhYWDogcGlja2xlLnB5IGRvZXNuJ3QgY2hlY2sgbmVpdGhlciB0aGUgdHlwZSwgbm9yIHRoZSByYW5nZQogICAgICAgICAgICBvZiB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgdGhlIGV4dGVuc2lvbl9yZWdpc3RyeS4gSXQgc2hvdWxkIGZvcgpAQCAtMjYzOCw3ICszMTU2LDcgQEAKIAogICAgICAgICAvKiBWZXJpZnkgY29kZV9vYmogaGFzIHRoZSByaWdodCB0eXBlIGFuZCB2YWx1ZS4gKi8KICAgICAgICAgaWYgKCFQeUxvbmdfQ2hlY2soY29kZV9vYmopKSB7Ci0gICAgICAgICAgICBQeUVycl9Gb3JtYXQoUGlja2xpbmdFcnJvciwKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChzdC0+UGlja2xpbmdFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAiQ2FuJ3QgcGlja2xlICVSOiBleHRlbnNpb24gY29kZSAlUiBpc24ndCBhbiBpbnRlZ2VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICBvYmosIGNvZGVfb2JqKTsKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CkBAIC0yNjQ2LDkgKzMxNjQsOCBAQAogICAgICAgICBjb2RlID0gUHlMb25nX0FTX0xPTkcoY29kZV9vYmopOwogICAgICAgICBpZiAoY29kZSA8PSAwIHx8IGNvZGUgPiAweDdmZmZmZmZmTCkgewogICAgICAgICAgICAgaWYgKCFQeUVycl9PY2N1cnJlZCgpKQotICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQaWNrbGluZ0Vycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ2FuJ3QgcGlja2xlICVSOiBleHRlbnNpb24gY29kZSAlbGQgaXMgb3V0IG9mIHJhbmdlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqLCBjb2RlKTsKKyAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoc3QtPlBpY2tsaW5nRXJyb3IsICJDYW4ndCBwaWNrbGUgJVI6IGV4dGVuc2lvbiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb2RlICVsZCBpcyBvdXQgb2YgcmFuZ2UiLCBvYmosIGNvZGUpOwogICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgfQogCkBAIC0yNjc3LDEyMCArMzE5NCw4NCBAQAogICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIC8qIEdlbmVyYXRlIGEgbm9ybWFsIGdsb2JhbCBvcGNvZGUgaWYgd2UgYXJlIHVzaW5nIGEgcGlja2xlCi0gICAgICAgICAgIHByb3RvY29sIDw9IDIsIG9yIGlmIHRoZSBvYmplY3QgaXMgbm90IHJlZ2lzdGVyZWQgaW4gdGhlCi0gICAgICAgICAgIGV4dGVuc2lvbiByZWdpc3RyeS4gKi8KLSAgICAgICAgUHlPYmplY3QgKmVuY29kZWQ7Ci0gICAgICAgIFB5T2JqZWN0ICooKnVuaWNvZGVfZW5jb2RlcikoUHlPYmplY3QgKik7Ci0KICAgZ2VuX2dsb2JhbDoKLSAgICAgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsICZnbG9iYWxfb3AsIDEpIDwgMCkKLSAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIGlmIChzZWxmLT5wcm90byA+PSA0KSB7CisgICAgICAgICAgICBjb25zdCBjaGFyIHN0YWNrX2dsb2JhbF9vcCA9IFNUQUNLX0dMT0JBTDsKIAotICAgICAgICAvKiBTaW5jZSBQeXRob24gMy4wIG5vdyBzdXBwb3J0cyBub24tQVNDSUkgaWRlbnRpZmllcnMsIHdlIGVuY29kZSBib3RoCi0gICAgICAgICAgIHRoZSBtb2R1bGUgbmFtZSBhbmQgdGhlIGdsb2JhbCBuYW1lIHVzaW5nIFVURi04LiBXZSBkbyBzbyBvbmx5IHdoZW4KLSAgICAgICAgICAgd2UgYXJlIHVzaW5nIHRoZSBwaWNrbGUgcHJvdG9jb2wgbmV3ZXIgdGhhbiB2ZXJzaW9uIDMuIFRoaXMgaXMgdG8KLSAgICAgICAgICAgZW5zdXJlIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciBVbnBpY2tsZXIgcnVubmluZyBvbiBQeXRob24gMi54LiAqLwotICAgICAgICBpZiAoc2VsZi0+cHJvdG8gPj0gMykgewotICAgICAgICAgICAgdW5pY29kZV9lbmNvZGVyID0gUHlVbmljb2RlX0FzVVRGOFN0cmluZzsKKyAgICAgICAgICAgIGlmIChzYXZlKHNlbGYsIG1vZHVsZV9uYW1lLCAwKSA8IDApCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIGlmIChzYXZlKHNlbGYsIGdsb2JhbF9uYW1lLCAwKSA8IDApCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKworICAgICAgICAgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsICZzdGFja19nbG9iYWxfb3AsIDEpIDwgMCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgdW5pY29kZV9lbmNvZGVyID0gUHlVbmljb2RlX0FzQVNDSUlTdHJpbmc7Ci0gICAgICAgIH0KKyAgICAgICAgICAgIC8qIEdlbmVyYXRlIGEgbm9ybWFsIGdsb2JhbCBvcGNvZGUgaWYgd2UgYXJlIHVzaW5nIGEgcGlja2xlCisgICAgICAgICAgICAgICBwcm90b2NvbCA8IDQsIG9yIGlmIHRoZSBvYmplY3QgaXMgbm90IHJlZ2lzdGVyZWQgaW4gdGhlCisgICAgICAgICAgICAgICBleHRlbnNpb24gcmVnaXN0cnkuICovCisgICAgICAgICAgICBQeU9iamVjdCAqZW5jb2RlZDsKKyAgICAgICAgICAgIFB5T2JqZWN0ICooKnVuaWNvZGVfZW5jb2RlcikoUHlPYmplY3QgKik7CiAKLSAgICAgICAgLyogRm9yIHByb3RvY29sIDwgMyBhbmQgaWYgdGhlIHVzZXIgZGlkbid0IHJlcXVlc3QgYWdhaW5zdCBkb2luZyBzbywKLSAgICAgICAgICAgd2UgY29udmVydCBtb2R1bGUgbmFtZXMgdG8gdGhlIG9sZCAyLnggbW9kdWxlIG5hbWVzLiAqLwotICAgICAgICBpZiAoc2VsZi0+Zml4X2ltcG9ydHMpIHsKLSAgICAgICAgICAgIFB5T2JqZWN0ICprZXk7Ci0gICAgICAgICAgICBQeU9iamVjdCAqaXRlbTsKLQotICAgICAgICAgICAga2V5ID0gUHlUdXBsZV9QYWNrKDIsIG1vZHVsZV9uYW1lLCBnbG9iYWxfbmFtZSk7Ci0gICAgICAgICAgICBpZiAoa2V5ID09IE5VTEwpCisgICAgICAgICAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgJmdsb2JhbF9vcCwgMSkgPCAwKQogICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgICAgICBpdGVtID0gUHlEaWN0X0dldEl0ZW1XaXRoRXJyb3IobmFtZV9tYXBwaW5nXzN0bzIsIGtleSk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYoa2V5KTsKLSAgICAgICAgICAgIGlmIChpdGVtKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFQeVR1cGxlX0NoZWNrKGl0ZW0pIHx8IFB5VHVwbGVfR0VUX1NJWkUoaXRlbSkgIT0gMikgewotICAgICAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfUnVudGltZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl9jb21wYXRfcGlja2xlLlJFVkVSU0VfTkFNRV9NQVBQSU5HIHZhbHVlcyAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2hvdWxkIGJlIDItdHVwbGVzLCBub3QgJS4yMDBzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUoaXRlbSktPnRwX25hbWUpOworCisgICAgICAgICAgICAvKiBGb3IgcHJvdG9jb2wgPCAzIGFuZCBpZiB0aGUgdXNlciBkaWRuJ3QgcmVxdWVzdCBhZ2FpbnN0IGRvaW5nCisgICAgICAgICAgICAgICBzbywgd2UgY29udmVydCBtb2R1bGUgbmFtZXMgdG8gdGhlIG9sZCAyLnggbW9kdWxlIG5hbWVzLiAqLworICAgICAgICAgICAgaWYgKHNlbGYtPnByb3RvIDwgMyAmJiBzZWxmLT5maXhfaW1wb3J0cykgeworICAgICAgICAgICAgICAgIGlmIChmaXhfaW1wb3J0cygmbW9kdWxlX25hbWUsICZnbG9iYWxfbmFtZSkgPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIFB5X0NMRUFSKG1vZHVsZV9uYW1lKTsKLSAgICAgICAgICAgICAgICBQeV9DTEVBUihnbG9iYWxfbmFtZSk7Ci0gICAgICAgICAgICAgICAgbW9kdWxlX25hbWUgPSBQeVR1cGxlX0dFVF9JVEVNKGl0ZW0sIDApOwotICAgICAgICAgICAgICAgIGdsb2JhbF9uYW1lID0gUHlUdXBsZV9HRVRfSVRFTShpdGVtLCAxKTsKLSAgICAgICAgICAgICAgICBpZiAoIVB5VW5pY29kZV9DaGVjayhtb2R1bGVfbmFtZSkgfHwKLSAgICAgICAgICAgICAgICAgICAgIVB5VW5pY29kZV9DaGVjayhnbG9iYWxfbmFtZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1J1bnRpbWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJfY29tcGF0X3BpY2tsZS5SRVZFUlNFX05BTUVfTUFQUElORyB2YWx1ZXMgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNob3VsZCBiZSBwYWlycyBvZiBzdHIsIG5vdCAoJS4yMDBzLCAlLjIwMHMpIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUobW9kdWxlX25hbWUpLT50cF9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRShnbG9iYWxfbmFtZSktPnRwX25hbWUpOwotICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBQeV9JTkNSRUYobW9kdWxlX25hbWUpOwotICAgICAgICAgICAgICAgIFB5X0lOQ1JFRihnbG9iYWxfbmFtZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7Ci0gICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaXRlbSA9IFB5RGljdF9HZXRJdGVtV2l0aEVycm9yKGltcG9ydF9tYXBwaW5nXzN0bzIsIG1vZHVsZV9uYW1lKTsKLSAgICAgICAgICAgIGlmIChpdGVtKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFQeVVuaWNvZGVfQ2hlY2soaXRlbSkpIHsKLSAgICAgICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1J1bnRpbWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJfY29tcGF0X3BpY2tsZS5SRVZFUlNFX0lNUE9SVF9NQVBQSU5HIHZhbHVlcyAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2hvdWxkIGJlIHN0cmluZ3MsIG5vdCAlLjIwMHMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRShpdGVtKS0+dHBfbmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIFB5X0NMRUFSKG1vZHVsZV9uYW1lKTsKLSAgICAgICAgICAgICAgICBtb2R1bGVfbmFtZSA9IGl0ZW07Ci0gICAgICAgICAgICAgICAgUHlfSU5DUkVGKG1vZHVsZV9uYW1lKTsKKyAgICAgICAgICAgIC8qIFNpbmNlIFB5dGhvbiAzLjAgbm93IHN1cHBvcnRzIG5vbi1BU0NJSSBpZGVudGlmaWVycywgd2UgZW5jb2RlCisgICAgICAgICAgICAgICBib3RoIHRoZSBtb2R1bGUgbmFtZSBhbmQgdGhlIGdsb2JhbCBuYW1lIHVzaW5nIFVURi04LiBXZSBkbyBzbworICAgICAgICAgICAgICAgb25seSB3aGVuIHdlIGFyZSB1c2luZyB0aGUgcGlja2xlIHByb3RvY29sIG5ld2VyIHRoYW4gdmVyc2lvbgorICAgICAgICAgICAgICAgMy4gVGhpcyBpcyB0byBlbnN1cmUgY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIFVucGlja2xlciBydW5uaW5nCisgICAgICAgICAgICAgICBvbiBQeXRob24gMi54LiAqLworICAgICAgICAgICAgaWYgKHNlbGYtPnByb3RvID09IDMpIHsKKyAgICAgICAgICAgICAgICB1bmljb2RlX2VuY29kZXIgPSBQeVVuaWNvZGVfQXNVVEY4U3RyaW5nOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgdW5pY29kZV9lbmNvZGVyID0gUHlVbmljb2RlX0FzQVNDSUlTdHJpbmc7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbmNvZGVkID0gdW5pY29kZV9lbmNvZGVyKG1vZHVsZV9uYW1lKTsKKyAgICAgICAgICAgIGlmIChlbmNvZGVkID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19Vbmljb2RlRW5jb2RlRXJyb3IpKQorICAgICAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoc3QtPlBpY2tsaW5nRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2FuJ3QgcGlja2xlIG1vZHVsZSBpZGVudGlmaWVyICclUycgdXNpbmcgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBpY2tsZSBwcm90b2NvbCAlaSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVfbmFtZSwgc2VsZi0+cHJvdG8pOwogICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBTYXZlIHRoZSBuYW1lIG9mIHRoZSBtb2R1bGUuICovCi0gICAgICAgIGVuY29kZWQgPSB1bmljb2RlX2VuY29kZXIobW9kdWxlX25hbWUpOwotICAgICAgICBpZiAoZW5jb2RlZCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19Vbmljb2RlRW5jb2RlRXJyb3IpKQotICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQaWNrbGluZ0Vycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2FuJ3QgcGlja2xlIG1vZHVsZSBpZGVudGlmaWVyICclUycgdXNpbmcgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGlja2xlIHByb3RvY29sICVpIiwgbW9kdWxlX25hbWUsIHNlbGYtPnByb3RvKTsKLSAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsIFB5Qnl0ZXNfQVNfU1RSSU5HKGVuY29kZWQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICBQeUJ5dGVzX0dFVF9TSVpFKGVuY29kZWQpKSA8IDApIHsKKyAgICAgICAgICAgIGlmIChfUGlja2xlcl9Xcml0ZShzZWxmLCBQeUJ5dGVzX0FTX1NUUklORyhlbmNvZGVkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUJ5dGVzX0dFVF9TSVpFKGVuY29kZWQpKSA8IDApIHsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZW5jb2RlZCk7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIFB5X0RFQ1JFRihlbmNvZGVkKTsKLSAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgIH0KLSAgICAgICAgUHlfREVDUkVGKGVuY29kZWQpOwotICAgICAgICBpZihfUGlja2xlcl9Xcml0ZShzZWxmLCAiXG4iLCAxKSA8IDApCi0gICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgaWYoX1BpY2tsZXJfV3JpdGUoc2VsZiwgIlxuIiwgMSkgPCAwKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAKLSAgICAgICAgLyogU2F2ZSB0aGUgbmFtZSBvZiB0aGUgbW9kdWxlLiAqLwotICAgICAgICBlbmNvZGVkID0gdW5pY29kZV9lbmNvZGVyKGdsb2JhbF9uYW1lKTsKLSAgICAgICAgaWYgKGVuY29kZWQgPT0gTlVMTCkgewotICAgICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfVW5pY29kZUVuY29kZUVycm9yKSkKLSAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUGlja2xpbmdFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNhbid0IHBpY2tsZSBnbG9iYWwgaWRlbnRpZmllciAnJVMnIHVzaW5nICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBpY2tsZSBwcm90b2NvbCAlaSIsIGdsb2JhbF9uYW1lLCBzZWxmLT5wcm90byk7Ci0gICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICB9Ci0gICAgICAgIGlmIChfUGlja2xlcl9Xcml0ZShzZWxmLCBQeUJ5dGVzX0FTX1NUUklORyhlbmNvZGVkKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgUHlCeXRlc19HRVRfU0laRShlbmNvZGVkKSkgPCAwKSB7CisgICAgICAgICAgICAvKiBTYXZlIHRoZSBuYW1lIG9mIHRoZSBtb2R1bGUuICovCisgICAgICAgICAgICBlbmNvZGVkID0gdW5pY29kZV9lbmNvZGVyKGdsb2JhbF9uYW1lKTsKKyAgICAgICAgICAgIGlmIChlbmNvZGVkID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19Vbmljb2RlRW5jb2RlRXJyb3IpKQorICAgICAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoc3QtPlBpY2tsaW5nRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2FuJ3QgcGlja2xlIGdsb2JhbCBpZGVudGlmaWVyICclUycgdXNpbmcgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBpY2tsZSBwcm90b2NvbCAlaSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWxfbmFtZSwgc2VsZi0+cHJvdG8pOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgUHlCeXRlc19BU19TVFJJTkcoZW5jb2RlZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlCeXRlc19HRVRfU0laRShlbmNvZGVkKSkgPCAwKSB7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGVuY29kZWQpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBQeV9ERUNSRUYoZW5jb2RlZCk7Ci0gICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsICJcbiIsIDEpIDwgMCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICB9Ci0gICAgICAgIFB5X0RFQ1JFRihlbmNvZGVkKTsKLSAgICAgICAgaWYoX1BpY2tsZXJfV3JpdGUoc2VsZiwgIlxuIiwgMSkgPCAwKQotICAgICAgICAgICAgZ290byBlcnJvcjsKLQogICAgICAgICAvKiBNZW1vaXplIHRoZSBvYmplY3QuICovCiAgICAgICAgIGlmIChtZW1vX3B1dChzZWxmLCBvYmopIDwgMCkKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CkBAIC0yODA4LDMwICszMjg5LDYgQEAKIH0KIAogc3RhdGljIGludAotc2F2ZV9lbGxpcHNpcyhQaWNrbGVyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqb2JqKQotewotICAgIFB5T2JqZWN0ICpzdHIgPSBQeVVuaWNvZGVfRnJvbVN0cmluZygiRWxsaXBzaXMiKTsKLSAgICBpbnQgcmVzOwotICAgIGlmIChzdHIgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIHJlcyA9IHNhdmVfZ2xvYmFsKHNlbGYsIFB5X0VsbGlwc2lzLCBzdHIpOwotICAgIFB5X0RFQ1JFRihzdHIpOwotICAgIHJldHVybiByZXM7Ci19Ci0KLXN0YXRpYyBpbnQKLXNhdmVfbm90aW1wbGVtZW50ZWQoUGlja2xlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm9iaikKLXsKLSAgICBQeU9iamVjdCAqc3RyID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoIk5vdEltcGxlbWVudGVkIik7Ci0gICAgaW50IHJlczsKLSAgICBpZiAoc3RyID09IE5VTEwpCi0gICAgICAgIHJldHVybiAtMTsKLSAgICByZXMgPSBzYXZlX2dsb2JhbChzZWxmLCBQeV9Ob3RJbXBsZW1lbnRlZCwgc3RyKTsKLSAgICBQeV9ERUNSRUYoc3RyKTsKLSAgICByZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgaW50CiBzYXZlX3NpbmdsZXRvbl90eXBlKFBpY2tsZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpvYmosIFB5T2JqZWN0ICpzaW5nbGV0b24pCiB7CiAgICAgUHlPYmplY3QgKnJlZHVjZV92YWx1ZTsKQEAgLTI4NzEsNyArMzMyOCw3IEBACiAgICAgY29uc3QgY2hhciBiaW5wZXJzaWRfb3AgPSBCSU5QRVJTSUQ7CiAKICAgICBQeV9JTkNSRUYob2JqKTsKLSAgICBwaWQgPSBfUGlja2xlcl9GYXN0Q2FsbChzZWxmLCBmdW5jLCBvYmopOworICAgIHBpZCA9IF9QaWNrbGVfRmFzdENhbGwoZnVuYywgb2JqKTsKICAgICBpZiAocGlkID09IE5VTEwpCiAgICAgICAgIHJldHVybiAtMTsKIApAQCAtMjkxOSwxNCArMzM3Niw5IEBACiBnZXRfY2xhc3MoUHlPYmplY3QgKm9iaikKIHsKICAgICBQeU9iamVjdCAqY2xzOwotICAgIHN0YXRpYyBQeU9iamVjdCAqc3RyX2NsYXNzOworICAgIF9QeV9JREVOVElGSUVSKF9fY2xhc3NfXyk7CiAKLSAgICBpZiAoc3RyX2NsYXNzID09IE5VTEwpIHsKLSAgICAgICAgc3RyX2NsYXNzID0gUHlVbmljb2RlX0ludGVybkZyb21TdHJpbmcoIl9fY2xhc3NfXyIpOwotICAgICAgICBpZiAoc3RyX2NsYXNzID09IE5VTEwpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgY2xzID0gUHlPYmplY3RfR2V0QXR0cihvYmosIHN0cl9jbGFzcyk7CisgICAgY2xzID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX19fY2xhc3NfXyk7CiAgICAgaWYgKGNscyA9PSBOVUxMKSB7CiAgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0F0dHJpYnV0ZUVycm9yKSkgewogICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKQEAgLTI5NDgsMTcgKzM0MDAsMTggQEAKICAgICBQeU9iamVjdCAqc3RhdGUgPSBOVUxMOwogICAgIFB5T2JqZWN0ICpsaXN0aXRlbXMgPSBQeV9Ob25lOwogICAgIFB5T2JqZWN0ICpkaWN0aXRlbXMgPSBQeV9Ob25lOworICAgIFBpY2tsZVN0YXRlICpzdCA9IF9QaWNrbGVfR2V0R2xvYmFsU3RhdGUoKTsKICAgICBQeV9zc2l6ZV90IHNpemU7Ci0KLSAgICBpbnQgdXNlX25ld29iaiA9IHNlbGYtPnByb3RvID49IDI7CisgICAgaW50IHVzZV9uZXdvYmogPSAwLCB1c2VfbmV3b2JqX2V4ID0gMDsKIAogICAgIGNvbnN0IGNoYXIgcmVkdWNlX29wID0gUkVEVUNFOwogICAgIGNvbnN0IGNoYXIgYnVpbGRfb3AgPSBCVUlMRDsKICAgICBjb25zdCBjaGFyIG5ld29ial9vcCA9IE5FV09CSjsKKyAgICBjb25zdCBjaGFyIG5ld29ial9leF9vcCA9IE5FV09CSl9FWDsKIAogICAgIHNpemUgPSBQeVR1cGxlX1NpemUoYXJncyk7CiAgICAgaWYgKHNpemUgPCAyIHx8IHNpemUgPiA1KSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQaWNrbGluZ0Vycm9yLCAidHVwbGUgcmV0dXJuZWQgYnkgIgorICAgICAgICBQeUVycl9TZXRTdHJpbmcoc3QtPlBpY2tsaW5nRXJyb3IsICJ0dXBsZSByZXR1cm5lZCBieSAiCiAgICAgICAgICAgICAgICAgICAgICAgICAiX19yZWR1Y2VfXyBtdXN0IGNvbnRhaW4gMiB0aHJvdWdoIDUgZWxlbWVudHMiKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KQEAgLTI5NjgsMTIgKzM0MjEsMTIgQEAKICAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgaWYgKCFQeUNhbGxhYmxlX0NoZWNrKGNhbGxhYmxlKSkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUGlja2xpbmdFcnJvciwgImZpcnN0IGl0ZW0gb2YgdGhlIHR1cGxlICIKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKHN0LT5QaWNrbGluZ0Vycm9yLCAiZmlyc3QgaXRlbSBvZiB0aGUgdHVwbGUgIgogICAgICAgICAgICAgICAgICAgICAgICAgInJldHVybmVkIGJ5IF9fcmVkdWNlX18gbXVzdCBiZSBjYWxsYWJsZSIpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogICAgIGlmICghUHlUdXBsZV9DaGVjayhhcmd0dXApKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQaWNrbGluZ0Vycm9yLCAic2Vjb25kIGl0ZW0gb2YgdGhlIHR1cGxlICIKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKHN0LT5QaWNrbGluZ0Vycm9yLCAic2Vjb25kIGl0ZW0gb2YgdGhlIHR1cGxlICIKICAgICAgICAgICAgICAgICAgICAgICAgICJyZXR1cm5lZCBieSBfX3JlZHVjZV9fIG11c3QgYmUgYSB0dXBsZSIpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQpAQCAtMjk4NCw3ICszNDM3LDcgQEAKICAgICBpZiAobGlzdGl0ZW1zID09IFB5X05vbmUpCiAgICAgICAgIGxpc3RpdGVtcyA9IE5VTEw7CiAgICAgZWxzZSBpZiAoIVB5SXRlcl9DaGVjayhsaXN0aXRlbXMpKSB7Ci0gICAgICAgIFB5RXJyX0Zvcm1hdChQaWNrbGluZ0Vycm9yLCAiZm91cnRoIGVsZW1lbnQgb2YgdGhlIHR1cGxlICIKKyAgICAgICAgUHlFcnJfRm9ybWF0KHN0LT5QaWNrbGluZ0Vycm9yLCAiZm91cnRoIGVsZW1lbnQgb2YgdGhlIHR1cGxlICIKICAgICAgICAgICAgICAgICAgICAgICJyZXR1cm5lZCBieSBfX3JlZHVjZV9fIG11c3QgYmUgYW4gaXRlcmF0b3IsIG5vdCAlcyIsCiAgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKGxpc3RpdGVtcyktPnRwX25hbWUpOwogICAgICAgICByZXR1cm4gLTE7CkBAIC0yOTkzLDQwICszNDQ2LDgxIEBACiAgICAgaWYgKGRpY3RpdGVtcyA9PSBQeV9Ob25lKQogICAgICAgICBkaWN0aXRlbXMgPSBOVUxMOwogICAgIGVsc2UgaWYgKCFQeUl0ZXJfQ2hlY2soZGljdGl0ZW1zKSkgewotICAgICAgICBQeUVycl9Gb3JtYXQoUGlja2xpbmdFcnJvciwgImZpZnRoIGVsZW1lbnQgb2YgdGhlIHR1cGxlICIKKyAgICAgICAgUHlFcnJfRm9ybWF0KHN0LT5QaWNrbGluZ0Vycm9yLCAiZmlmdGggZWxlbWVudCBvZiB0aGUgdHVwbGUgIgogICAgICAgICAgICAgICAgICAgICAgInJldHVybmVkIGJ5IF9fcmVkdWNlX18gbXVzdCBiZSBhbiBpdGVyYXRvciwgbm90ICVzIiwKICAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUoZGljdGl0ZW1zKS0+dHBfbmFtZSk7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKLSAgICAvKiBQcm90b2NvbCAyIHNwZWNpYWwgY2FzZTogaWYgY2FsbGFibGUncyBuYW1lIGlzIF9fbmV3b2JqX18sIHVzZQotICAgICAgIE5FV09CSi4gKi8KLSAgICBpZiAodXNlX25ld29iaikgewotICAgICAgICBzdGF0aWMgUHlPYmplY3QgKm5ld29ial9zdHIgPSBOVUxMLCAqbmFtZV9zdHIgPSBOVUxMOworICAgIGlmIChzZWxmLT5wcm90byA+PSAyKSB7CiAgICAgICAgIFB5T2JqZWN0ICpuYW1lOworICAgICAgICBfUHlfSURFTlRJRklFUihfX25hbWVfXyk7CiAKLSAgICAgICAgaWYgKG5ld29ial9zdHIgPT0gTlVMTCkgewotICAgICAgICAgICAgbmV3b2JqX3N0ciA9IFB5VW5pY29kZV9JbnRlcm5Gcm9tU3RyaW5nKCJfX25ld29ial9fIik7Ci0gICAgICAgICAgICBuYW1lX3N0ciA9IFB5VW5pY29kZV9JbnRlcm5Gcm9tU3RyaW5nKCJfX25hbWVfXyIpOwotICAgICAgICAgICAgaWYgKG5ld29ial9zdHIgPT0gTlVMTCB8fCBuYW1lX3N0ciA9PSBOVUxMKQotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQotCi0gICAgICAgIG5hbWUgPSBQeU9iamVjdF9HZXRBdHRyKGNhbGxhYmxlLCBuYW1lX3N0cik7CisgICAgICAgIG5hbWUgPSBfUHlPYmplY3RfR2V0QXR0cklkKGNhbGxhYmxlLCAmUHlJZF9fX25hbWVfXyk7CiAgICAgICAgIGlmIChuYW1lID09IE5VTEwpIHsKLSAgICAgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0F0dHJpYnV0ZUVycm9yKSkKLSAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwotICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgaWYgKCFQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0F0dHJpYnV0ZUVycm9yKSkgewogICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIHVzZV9uZXdvYmogPSAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChzZWxmLT5wcm90byA+PSA0KSB7CisgICAgICAgICAgICBfUHlfSURFTlRJRklFUihfX25ld29ial9leF9fKTsKKyAgICAgICAgICAgIHVzZV9uZXdvYmpfZXggPSBQeVVuaWNvZGVfQ2hlY2sobmFtZSkgJiYKKyAgICAgICAgICAgICAgICBQeVVuaWNvZGVfQ29tcGFyZSgKKyAgICAgICAgICAgICAgICAgICAgbmFtZSwgX1B5VW5pY29kZV9Gcm9tSWQoJlB5SWRfX19uZXdvYmpfZXhfXykpID09IDA7CisgICAgICAgICAgICBQeV9ERUNSRUYobmFtZSk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBfUHlfSURFTlRJRklFUihfX25ld29ial9fKTsKICAgICAgICAgICAgIHVzZV9uZXdvYmogPSBQeVVuaWNvZGVfQ2hlY2sobmFtZSkgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfQ29tcGFyZShuYW1lLCBuZXdvYmpfc3RyKSA9PSAwOworICAgICAgICAgICAgICAgIFB5VW5pY29kZV9Db21wYXJlKAorICAgICAgICAgICAgICAgICAgICBuYW1lLCBfUHlVbmljb2RlX0Zyb21JZCgmUHlJZF9fX25ld29ial9fKSkgPT0gMDsKICAgICAgICAgICAgIFB5X0RFQ1JFRihuYW1lKTsKICAgICAgICAgfQogICAgIH0KLSAgICBpZiAodXNlX25ld29iaikgeworCisgICAgaWYgKHVzZV9uZXdvYmpfZXgpIHsKKyAgICAgICAgUHlPYmplY3QgKmNsczsKKyAgICAgICAgUHlPYmplY3QgKmFyZ3M7CisgICAgICAgIFB5T2JqZWN0ICprd2FyZ3M7CisKKyAgICAgICAgaWYgKFB5X1NJWkUoYXJndHVwKSAhPSAzKSB7CisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoc3QtPlBpY2tsaW5nRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgImxlbmd0aCBvZiB0aGUgTkVXT0JKX0VYIGFyZ3VtZW50IHR1cGxlIG11c3QgYmUgIgorICAgICAgICAgICAgICAgICAgICAgICAgICJleGFjdGx5IDMsIG5vdCAlemQiLCBQeV9TSVpFKGFyZ3R1cCkpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisKKyAgICAgICAgY2xzID0gUHlUdXBsZV9HRVRfSVRFTShhcmd0dXAsIDApOworICAgICAgICBpZiAoIVB5VHlwZV9DaGVjayhjbHMpKSB7CisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoc3QtPlBpY2tsaW5nRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgImZpcnN0IGl0ZW0gZnJvbSBORVdPQkpfRVggYXJndW1lbnQgdHVwbGUgbXVzdCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgImJlIGEgY2xhc3MsIG5vdCAlLjIwMHMiLCBQeV9UWVBFKGNscyktPnRwX25hbWUpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIGFyZ3MgPSBQeVR1cGxlX0dFVF9JVEVNKGFyZ3R1cCwgMSk7CisgICAgICAgIGlmICghUHlUdXBsZV9DaGVjayhhcmdzKSkgeworICAgICAgICAgICAgUHlFcnJfRm9ybWF0KHN0LT5QaWNrbGluZ0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICJzZWNvbmQgaXRlbSBmcm9tIE5FV09CSl9FWCBhcmd1bWVudCB0dXBsZSBtdXN0ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiYmUgYSB0dXBsZSwgbm90ICUuMjAwcyIsIFB5X1RZUEUoYXJncyktPnRwX25hbWUpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIGt3YXJncyA9IFB5VHVwbGVfR0VUX0lURU0oYXJndHVwLCAyKTsKKyAgICAgICAgaWYgKCFQeURpY3RfQ2hlY2soa3dhcmdzKSkgeworICAgICAgICAgICAgUHlFcnJfRm9ybWF0KHN0LT5QaWNrbGluZ0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICJ0aGlyZCBpdGVtIGZyb20gTkVXT0JKX0VYIGFyZ3VtZW50IHR1cGxlIG11c3QgIgorICAgICAgICAgICAgICAgICAgICAgICAgICJiZSBhIGRpY3QsIG5vdCAlLjIwMHMiLCBQeV9UWVBFKGt3YXJncyktPnRwX25hbWUpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNhdmUoc2VsZiwgY2xzLCAwKSA8IDAgfHwKKyAgICAgICAgICAgIHNhdmUoc2VsZiwgYXJncywgMCkgPCAwIHx8CisgICAgICAgICAgICBzYXZlKHNlbGYsIGt3YXJncywgMCkgPCAwIHx8CisgICAgICAgICAgICBfUGlja2xlcl9Xcml0ZShzZWxmLCAmbmV3b2JqX2V4X29wLCAxKSA8IDApIHsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmICh1c2VfbmV3b2JqKSB7CiAgICAgICAgIFB5T2JqZWN0ICpjbHM7CiAgICAgICAgIFB5T2JqZWN0ICpuZXdhcmd0dXA7CiAgICAgICAgIFB5T2JqZWN0ICpvYmpfY2xhc3M7CkBAIC0zMDM0LDEzICszNTI4LDEzIEBACiAKICAgICAgICAgLyogU2FuaXR5IGNoZWNrcy4gKi8KICAgICAgICAgaWYgKFB5X1NJWkUoYXJndHVwKSA8IDEpIHsKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQaWNrbGluZ0Vycm9yLCAiX19uZXdvYmpfXyBhcmdsaXN0IGlzIGVtcHR5Iik7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoc3QtPlBpY2tsaW5nRXJyb3IsICJfX25ld29ial9fIGFyZ2xpc3QgaXMgZW1wdHkiKTsKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQogCiAgICAgICAgIGNscyA9IFB5VHVwbGVfR0VUX0lURU0oYXJndHVwLCAwKTsKICAgICAgICAgaWYgKCFQeVR5cGVfQ2hlY2soY2xzKSkgewotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFBpY2tsaW5nRXJyb3IsICJhcmdzWzBdIGZyb20gIgorICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKHN0LT5QaWNrbGluZ0Vycm9yLCAiYXJnc1swXSBmcm9tICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiX19uZXdvYmpfXyBhcmdzIGlzIG5vdCBhIHR5cGUiKTsKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQpAQCAtMzA1MCw3ICszNTQ0LDcgQEAKICAgICAgICAgICAgIHAgPSBvYmpfY2xhc3MgIT0gY2xzOyAgICAvKiB0cnVlIGlmZiBhIHByb2JsZW0gKi8KICAgICAgICAgICAgIFB5X0RFQ1JFRihvYmpfY2xhc3MpOwogICAgICAgICAgICAgaWYgKHApIHsKLSAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUGlja2xpbmdFcnJvciwgImFyZ3NbMF0gZnJvbSAiCisgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKHN0LT5QaWNrbGluZ0Vycm9yLCAiYXJnc1swXSBmcm9tICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl9fbmV3b2JqX18gYXJncyBoYXMgdGhlIHdyb25nIGNsYXNzIik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgICAgfQpAQCAtMzExMCw4ICszNjA0LDIzIEBACiAgICAgICAgdGhlIGNhbGxlciBkbyBub3Qgd2FudCB0byBtZW1vaXplIHRoZSBvYmplY3QuIE5vdCBwYXJ0aWN1bGFybHkgdXNlZnVsLAogICAgICAgIGJ1dCB0aGF0IGlzIHRvIG1pbWljIHRoZSBiZWhhdmlvciBzYXZlX3JlZHVjZSgpIGluIHBpY2tsZS5weSB3aGVuCiAgICAgICAgb2JqIGlzIE5vbmUuICovCi0gICAgaWYgKG9iaiAmJiBtZW1vX3B1dChzZWxmLCBvYmopIDwgMCkKLSAgICAgICAgcmV0dXJuIC0xOworICAgIGlmIChvYmogIT0gTlVMTCkgeworICAgICAgICAvKiBJZiB0aGUgb2JqZWN0IGlzIGFscmVhZHkgaW4gdGhlIG1lbW8sIHRoaXMgbWVhbnMgaXQgaXMKKyAgICAgICAgICAgcmVjdXJzaXZlLiBJbiB0aGlzIGNhc2UsIHRocm93IGF3YXkgZXZlcnl0aGluZyB3ZSBwdXQgb24gdGhlCisgICAgICAgICAgIHN0YWNrLCBhbmQgZmV0Y2ggdGhlIG9iamVjdCBiYWNrIGZyb20gdGhlIG1lbW8uICovCisgICAgICAgIGlmIChQeU1lbW9UYWJsZV9HZXQoc2VsZi0+bWVtbywgb2JqKSkgeworICAgICAgICAgICAgY29uc3QgY2hhciBwb3Bfb3AgPSBQT1A7CisKKyAgICAgICAgICAgIGlmIChfUGlja2xlcl9Xcml0ZShzZWxmLCAmcG9wX29wLCAxKSA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgaWYgKG1lbW9fZ2V0KHNlbGYsIG9iaikgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAobWVtb19wdXQoc2VsZiwgb2JqKSA8IDApCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgfQogCiAgICAgaWYgKGxpc3RpdGVtcyAmJiBiYXRjaF9saXN0KHNlbGYsIGxpc3RpdGVtcykgPCAwKQogICAgICAgICByZXR1cm4gLTE7CkBAIC0zMTM2LDYgKzM2NDUsOSBAQAogICAgIFB5T2JqZWN0ICpyZWR1Y2VfdmFsdWUgPSBOVUxMOwogICAgIGludCBzdGF0dXMgPSAwOwogCisgICAgaWYgKF9QaWNrbGVyX09wY29kZUJvdW5kYXJ5KHNlbGYpIDwgMCkKKyAgICAgICAgcmV0dXJuIC0xOworCiAgICAgaWYgKFB5X0VudGVyUmVjdXJzaXZlQ2FsbCgiIHdoaWxlIHBpY2tsaW5nIGFuIG9iamVjdCIpKQogICAgICAgICByZXR1cm4gLTE7CiAKQEAgLTMxNjQsMTQgKzM2NzYsNiBAQAogICAgICAgICBzdGF0dXMgPSBzYXZlX25vbmUoc2VsZiwgb2JqKTsKICAgICAgICAgZ290byBkb25lOwogICAgIH0KLSAgICBlbHNlIGlmIChvYmogPT0gUHlfRWxsaXBzaXMpIHsKLSAgICAgICAgc3RhdHVzID0gc2F2ZV9lbGxpcHNpcyhzZWxmLCBvYmopOwotICAgICAgICBnb3RvIGRvbmU7Ci0gICAgfQotICAgIGVsc2UgaWYgKG9iaiA9PSBQeV9Ob3RJbXBsZW1lbnRlZCkgewotICAgICAgICBzdGF0dXMgPSBzYXZlX25vdGltcGxlbWVudGVkKHNlbGYsIG9iaik7Ci0gICAgICAgIGdvdG8gZG9uZTsKLSAgICB9CiAgICAgZWxzZSBpZiAob2JqID09IFB5X0ZhbHNlIHx8IG9iaiA9PSBQeV9UcnVlKSB7CiAgICAgICAgIHN0YXR1cyA9IHNhdmVfYm9vbChzZWxmLCBvYmopOwogICAgICAgICBnb3RvIGRvbmU7CkBAIC0zMjA2LDYgKzM3MTAsMTQgQEAKICAgICAgICAgc3RhdHVzID0gc2F2ZV9kaWN0KHNlbGYsIG9iaik7CiAgICAgICAgIGdvdG8gZG9uZTsKICAgICB9CisgICAgZWxzZSBpZiAodHlwZSA9PSAmUHlTZXRfVHlwZSkgeworICAgICAgICBzdGF0dXMgPSBzYXZlX3NldChzZWxmLCBvYmopOworICAgICAgICBnb3RvIGRvbmU7CisgICAgfQorICAgIGVsc2UgaWYgKHR5cGUgPT0gJlB5RnJvemVuU2V0X1R5cGUpIHsKKyAgICAgICAgc3RhdHVzID0gc2F2ZV9mcm96ZW5zZXQoc2VsZiwgb2JqKTsKKyAgICAgICAgZ290byBkb25lOworICAgIH0KICAgICBlbHNlIGlmICh0eXBlID09ICZQeUxpc3RfVHlwZSkgewogICAgICAgICBzdGF0dXMgPSBzYXZlX2xpc3Qoc2VsZiwgb2JqKTsKICAgICAgICAgZ290byBkb25lOwpAQCAtMzIyMCwxNiArMzczMiw2IEBACiAgICAgfQogICAgIGVsc2UgaWYgKHR5cGUgPT0gJlB5RnVuY3Rpb25fVHlwZSkgewogICAgICAgICBzdGF0dXMgPSBzYXZlX2dsb2JhbChzZWxmLCBvYmosIE5VTEwpOwotICAgICAgICBpZiAoc3RhdHVzIDwgMCAmJiBQeUVycl9FeGNlcHRpb25NYXRjaGVzKFBpY2tsZUVycm9yKSkgewotICAgICAgICAgICAgLyogZmFsbCBiYWNrIHRvIHJlZHVjZSAqLwotICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGdvdG8gZG9uZTsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlmICh0eXBlID09ICZQeUNGdW5jdGlvbl9UeXBlKSB7Ci0gICAgICAgIHN0YXR1cyA9IHNhdmVfZ2xvYmFsKHNlbGYsIG9iaiwgTlVMTCk7CiAgICAgICAgIGdvdG8gZG9uZTsKICAgICB9CiAKQEAgLTMyNDAsMTIgKzM3NDIsMjIgQEAKICAgICAgKiBfX3JlZHVjZV9leF9fIG1ldGhvZCwgb3IgdGhlIG9iamVjdCdzIF9fcmVkdWNlX18gbWV0aG9kLgogICAgICAqLwogICAgIGlmIChzZWxmLT5kaXNwYXRjaF90YWJsZSA9PSBOVUxMKSB7Ci0gICAgICAgIHJlZHVjZV9mdW5jID0gUHlEaWN0X0dldEl0ZW0oZGlzcGF0Y2hfdGFibGUsIChQeU9iamVjdCAqKXR5cGUpOwotICAgICAgICAvKiBQeURpY3RfR2V0SXRlbSgpIHVubGlrZSBQeU9iamVjdF9HZXRJdGVtKCkgYW5kCi0gICAgICAgICAgIFB5T2JqZWN0X0dldEF0dHIoKSByZXR1cm5zIGEgYm9ycm93ZWQgcmVmICovCi0gICAgICAgIFB5X1hJTkNSRUYocmVkdWNlX2Z1bmMpOworICAgICAgICBQaWNrbGVTdGF0ZSAqc3QgPSBfUGlja2xlX0dldEdsb2JhbFN0YXRlKCk7CisgICAgICAgIHJlZHVjZV9mdW5jID0gUHlEaWN0X0dldEl0ZW1XaXRoRXJyb3Ioc3QtPmRpc3BhdGNoX3RhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQeU9iamVjdCAqKXR5cGUpOworICAgICAgICBpZiAocmVkdWNlX2Z1bmMgPT0gTlVMTCkgeworICAgICAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLyogUHlEaWN0X0dldEl0ZW1XaXRoRXJyb3IoKSByZXR1cm5zIGEgYm9ycm93ZWQgcmVmZXJlbmNlLgorICAgICAgICAgICAgICAgSW5jcmVhc2UgdGhlIHJlZmVyZW5jZSBjb3VudCB0byBiZSBjb25zaXN0ZW50IHdpdGgKKyAgICAgICAgICAgICAgIFB5T2JqZWN0X0dldEl0ZW0gYW5kIF9QeU9iamVjdF9HZXRBdHRySWQgdXNlZCBiZWxvdy4gKi8KKyAgICAgICAgICAgIFB5X0lOQ1JFRihyZWR1Y2VfZnVuYyk7CisgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAgICByZWR1Y2VfZnVuYyA9IFB5T2JqZWN0X0dldEl0ZW0oc2VsZi0+ZGlzcGF0Y2hfdGFibGUsIChQeU9iamVjdCAqKXR5cGUpOworICAgICAgICByZWR1Y2VfZnVuYyA9IFB5T2JqZWN0X0dldEl0ZW0oc2VsZi0+ZGlzcGF0Y2hfdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUHlPYmplY3QgKil0eXBlKTsKICAgICAgICAgaWYgKHJlZHVjZV9mdW5jID09IE5VTEwpIHsKICAgICAgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0tleUVycm9yKSkKICAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwpAQCAtMzI1NSwyNSArMzc2NywxNiBAQAogICAgIH0KICAgICBpZiAocmVkdWNlX2Z1bmMgIT0gTlVMTCkgewogICAgICAgICBQeV9JTkNSRUYob2JqKTsKLSAgICAgICAgcmVkdWNlX3ZhbHVlID0gX1BpY2tsZXJfRmFzdENhbGwoc2VsZiwgcmVkdWNlX2Z1bmMsIG9iaik7CisgICAgICAgIHJlZHVjZV92YWx1ZSA9IF9QaWNrbGVfRmFzdENhbGwocmVkdWNlX2Z1bmMsIG9iaik7CiAgICAgfQogICAgIGVsc2UgaWYgKFB5VHlwZV9Jc1N1YnR5cGUodHlwZSwgJlB5VHlwZV9UeXBlKSkgewogICAgICAgICBzdGF0dXMgPSBzYXZlX2dsb2JhbChzZWxmLCBvYmosIE5VTEwpOwogICAgICAgICBnb3RvIGRvbmU7CiAgICAgfQogICAgIGVsc2UgewotICAgICAgICBzdGF0aWMgUHlPYmplY3QgKnJlZHVjZV9zdHIgPSBOVUxMOwotICAgICAgICBzdGF0aWMgUHlPYmplY3QgKnJlZHVjZV9leF9zdHIgPSBOVUxMOworICAgICAgICBfUHlfSURFTlRJRklFUihfX3JlZHVjZV9fKTsKKyAgICAgICAgX1B5X0lERU5USUZJRVIoX19yZWR1Y2VfZXhfXyk7CiAKLSAgICAgICAgLyogQ2FjaGUgdGhlIG5hbWUgb2YgdGhlIHJlZHVjZSBtZXRob2RzLiAqLwotICAgICAgICBpZiAocmVkdWNlX3N0ciA9PSBOVUxMKSB7Ci0gICAgICAgICAgICByZWR1Y2Vfc3RyID0gUHlVbmljb2RlX0ludGVybkZyb21TdHJpbmcoIl9fcmVkdWNlX18iKTsKLSAgICAgICAgICAgIGlmIChyZWR1Y2Vfc3RyID09IE5VTEwpCi0gICAgICAgICAgICAgICAgZ290byBlcnJvcjsKLSAgICAgICAgICAgIHJlZHVjZV9leF9zdHIgPSBQeVVuaWNvZGVfSW50ZXJuRnJvbVN0cmluZygiX19yZWR1Y2VfZXhfXyIpOwotICAgICAgICAgICAgaWYgKHJlZHVjZV9leF9zdHIgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICB9CiAKICAgICAgICAgLyogWFhYOiBJZiB0aGUgX19yZWR1Y2VfXyBtZXRob2QgaXMgZGVmaW5lZCwgX19yZWR1Y2VfZXhfXyBpcwogICAgICAgICAgICBhdXRvbWF0aWNhbGx5IGRlZmluZWQgYXMgX19yZWR1Y2VfXy4gV2hpbGUgdGhpcyBpcyBjb252ZW5pZW50LCB0aGlzCkBAIC0zMjg0LDI2ICszNzg3LDM0IEBACiAgICAgICAgICAgIGRvbid0IGFjdHVhbGx5IGhhdmUgdG8gY2hlY2sgZm9yIGEgX19yZWR1Y2VfXyBtZXRob2QuICovCiAKICAgICAgICAgLyogQ2hlY2sgZm9yIGEgX19yZWR1Y2VfZXhfXyBtZXRob2QuICovCi0gICAgICAgIHJlZHVjZV9mdW5jID0gUHlPYmplY3RfR2V0QXR0cihvYmosIHJlZHVjZV9leF9zdHIpOworICAgICAgICByZWR1Y2VfZnVuYyA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF9fX3JlZHVjZV9leF9fKTsKICAgICAgICAgaWYgKHJlZHVjZV9mdW5jICE9IE5VTEwpIHsKICAgICAgICAgICAgIFB5T2JqZWN0ICpwcm90bzsKICAgICAgICAgICAgIHByb3RvID0gUHlMb25nX0Zyb21Mb25nKHNlbGYtPnByb3RvKTsKICAgICAgICAgICAgIGlmIChwcm90byAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgcmVkdWNlX3ZhbHVlID0gX1BpY2tsZXJfRmFzdENhbGwoc2VsZiwgcmVkdWNlX2Z1bmMsIHByb3RvKTsKKyAgICAgICAgICAgICAgICByZWR1Y2VfdmFsdWUgPSBfUGlja2xlX0Zhc3RDYWxsKHJlZHVjZV9mdW5jLCBwcm90byk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19BdHRyaWJ1dGVFcnJvcikpCisgICAgICAgICAgICBQaWNrbGVTdGF0ZSAqc3QgPSBfUGlja2xlX0dldEdsb2JhbFN0YXRlKCk7CisKKyAgICAgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0F0dHJpYnV0ZUVycm9yKSkgewogICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZ290byBlcnJvcjsKLSAgICAgICAgICAgIC8qIENoZWNrIGZvciBhIF9fcmVkdWNlX18gbWV0aG9kLiAqLwotICAgICAgICAgICAgcmVkdWNlX2Z1bmMgPSBQeU9iamVjdF9HZXRBdHRyKG9iaiwgcmVkdWNlX3N0cik7Ci0gICAgICAgICAgICBpZiAocmVkdWNlX2Z1bmMgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIHJlZHVjZV92YWx1ZSA9IFB5T2JqZWN0X0NhbGwocmVkdWNlX2Z1bmMsIGVtcHR5X3R1cGxlLCBOVUxMKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQaWNrbGluZ0Vycm9yLCAiY2FuJ3QgcGlja2xlICclLjIwMHMnIG9iamVjdDogJVIiLAorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvKiBDaGVjayBmb3IgYSBfX3JlZHVjZV9fIG1ldGhvZC4gKi8KKyAgICAgICAgICAgIHJlZHVjZV9mdW5jID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX19fcmVkdWNlX18pOworICAgICAgICAgICAgaWYgKHJlZHVjZV9mdW5jICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBQeU9iamVjdCAqZW1wdHlfdHVwbGUgPSBQeVR1cGxlX05ldygwKTsKKyAgICAgICAgICAgICAgICByZWR1Y2VfdmFsdWUgPSBQeU9iamVjdF9DYWxsKHJlZHVjZV9mdW5jLCBlbXB0eV90dXBsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihlbXB0eV90dXBsZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoc3QtPlBpY2tsaW5nRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjYW4ndCBwaWNrbGUgJyUuMjAwcycgb2JqZWN0OiAlUiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUtPnRwX25hbWUsIG9iaik7CiAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIH0KQEAgLTMzMTksNyArMzgzMCw4IEBACiAgICAgfQogCiAgICAgaWYgKCFQeVR1cGxlX0NoZWNrKHJlZHVjZV92YWx1ZSkpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFBpY2tsaW5nRXJyb3IsCisgICAgICAgIFBpY2tsZVN0YXRlICpzdCA9IF9QaWNrbGVfR2V0R2xvYmFsU3RhdGUoKTsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKHN0LT5QaWNrbGluZ0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgIl9fcmVkdWNlX18gbXVzdCByZXR1cm4gYSBzdHJpbmcgb3IgdHVwbGUiKTsKICAgICAgICAgZ290byBlcnJvcjsKICAgICB9CkBAIC0zMzMxLDYgKzM4NDMsNyBAQAogICAgICAgICBzdGF0dXMgPSAtMTsKICAgICB9CiAgIGRvbmU6CisKICAgICBQeV9MZWF2ZVJlY3Vyc2l2ZUNhbGwoKTsKICAgICBQeV9YREVDUkVGKHJlZHVjZV9mdW5jKTsKICAgICBQeV9YREVDUkVGKHJlZHVjZV92YWx1ZSk7CkBAIC0zMzUxLDYgKzM4NjQsOCBAQAogICAgICAgICBoZWFkZXJbMV0gPSAodW5zaWduZWQgY2hhcilzZWxmLT5wcm90bzsKICAgICAgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsIGhlYWRlciwgMikgPCAwKQogICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICBpZiAoc2VsZi0+cHJvdG8gPj0gNCkKKyAgICAgICAgICAgIHNlbGYtPmZyYW1pbmcgPSAxOwogICAgIH0KIAogICAgIGlmIChzYXZlKHNlbGYsIG9iaiwgMCkgPCAwIHx8CkBAIC0zMzYwLDE2ICszODc1LDIxIEBACiAgICAgcmV0dXJuIDA7CiB9CiAKLVB5RG9jX1NUUlZBUihQaWNrbGVyX2NsZWFyX21lbW9fZG9jLAotImNsZWFyX21lbW8oKSAtPiBOb25lLiBDbGVhcnMgdGhlIHBpY2tsZXIncyBcIm1lbW9cIi4iCi0iXG4iCi0iVGhlIG1lbW8gaXMgdGhlIGRhdGEgc3RydWN0dXJlIHRoYXQgcmVtZW1iZXJzIHdoaWNoIG9iamVjdHMgdGhlXG4iCi0icGlja2xlciBoYXMgYWxyZWFkeSBzZWVuLCBzbyB0aGF0IHNoYXJlZCBvciByZWN1cnNpdmUgb2JqZWN0cyBhcmVcbiIKLSJwaWNrbGVkIGJ5IHJlZmVyZW5jZSBhbmQgbm90IGJ5IHZhbHVlLiAgVGhpcyBtZXRob2QgaXMgdXNlZnVsIHdoZW5cbiIKLSJyZS11c2luZyBwaWNrbGVycy4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KKworX3BpY2tsZS5QaWNrbGVyLmNsZWFyX21lbW8KKworQ2xlYXJzIHRoZSBwaWNrbGVyJ3MgIm1lbW8iLgorCitUaGUgbWVtbyBpcyB0aGUgZGF0YSBzdHJ1Y3R1cmUgdGhhdCByZW1lbWJlcnMgd2hpY2ggb2JqZWN0cyB0aGUKK3BpY2tsZXIgaGFzIGFscmVhZHkgc2Vlbiwgc28gdGhhdCBzaGFyZWQgb3IgcmVjdXJzaXZlIG9iamVjdHMgYXJlCitwaWNrbGVkIGJ5IHJlZmVyZW5jZSBhbmQgbm90IGJ5IHZhbHVlLiAgVGhpcyBtZXRob2QgaXMgdXNlZnVsIHdoZW4KK3JlLXVzaW5nIHBpY2tsZXJzLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotUGlja2xlcl9jbGVhcl9tZW1vKFBpY2tsZXJPYmplY3QgKnNlbGYpCitfcGlja2xlX1BpY2tsZXJfY2xlYXJfbWVtb19pbXBsKFBpY2tsZXJPYmplY3QgKnNlbGYpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ODY2NWM4NjU4YWFhMDk0YiBpbnB1dD0wMWJkYWQ1MmYzZDkzZTU2XSovCiB7CiAgICAgaWYgKHNlbGYtPm1lbW8pCiAgICAgICAgIFB5TWVtb1RhYmxlX0NsZWFyKHNlbGYtPm1lbW8pOwpAQCAtMzM3NywyNyArMzg5NywzMSBAQAogICAgIFB5X1JFVFVSTl9OT05FOwogfQogCi1QeURvY19TVFJWQVIoUGlja2xlcl9kdW1wX2RvYywKLSJkdW1wKG9iaikgLT4gTm9uZS4gV3JpdGUgYSBwaWNrbGVkIHJlcHJlc2VudGF0aW9uIG9mIG9iaiB0byB0aGUgb3BlbiBmaWxlLiIpOworLypbY2xpbmljIGlucHV0XQorCitfcGlja2xlLlBpY2tsZXIuZHVtcAorCisgIG9iajogb2JqZWN0CisgIC8KKworV3JpdGUgYSBwaWNrbGVkIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiBvYmplY3QgdG8gdGhlIG9wZW4gZmlsZS4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLVBpY2tsZXJfZHVtcChQaWNrbGVyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK19waWNrbGVfUGlja2xlcl9kdW1wKFBpY2tsZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpvYmopCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ODdlY2FkMTI2MWUwMmFjNyBpbnB1dD01NTJlYjFjMGY1MjI2MGQ5XSovCiB7Ci0gICAgUHlPYmplY3QgKm9iajsKLQogICAgIC8qIENoZWNrIHdoZXRoZXIgdGhlIFBpY2tsZXIgd2FzIGluaXRpYWxpemVkIGNvcnJlY3RseSAoaXNzdWUzNjY0KS4KICAgICAgICBEZXZlbG9wZXJzIG9mdGVuIGZvcmdldCB0byBjYWxsIF9faW5pdF9fKCkgaW4gdGhlaXIgc3ViY2xhc3Nlcywgd2hpY2gKICAgICAgICB3b3VsZCB0cmlnZ2VyIGEgc2VnZmF1bHQgd2l0aG91dCB0aGlzIGNoZWNrLiAqLwogICAgIGlmIChzZWxmLT53cml0ZSA9PSBOVUxMKSB7Ci0gICAgICAgIFB5RXJyX0Zvcm1hdChQaWNrbGluZ0Vycm9yLAorICAgICAgICBQaWNrbGVTdGF0ZSAqc3QgPSBfUGlja2xlX0dldEdsb2JhbFN0YXRlKCk7CisgICAgICAgIFB5RXJyX0Zvcm1hdChzdC0+UGlja2xpbmdFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICJQaWNrbGVyLl9faW5pdF9fKCkgd2FzIG5vdCBjYWxsZWQgYnkgJXMuX19pbml0X18oKSIsCiAgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKHNlbGYpLT50cF9uYW1lKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPOmR1bXAiLCAmb2JqKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KICAgICBpZiAoX1BpY2tsZXJfQ2xlYXJCdWZmZXIoc2VsZikgPCAwKQogICAgICAgICByZXR1cm4gTlVMTDsKIApAQCAtMzQxMCwxMSArMzkzNCwzNyBAQAogICAgIFB5X1JFVFVSTl9OT05FOwogfQogCisvKltjbGluaWMgaW5wdXRdCisKK19waWNrbGUuUGlja2xlci5fX3NpemVvZl9fIC0+IFB5X3NzaXplX3QKKworUmV0dXJucyBzaXplIGluIG1lbW9yeSwgaW4gYnl0ZXMuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK3N0YXRpYyBQeV9zc2l6ZV90CitfcGlja2xlX1BpY2tsZXJfX19zaXplb2ZfX19pbXBsKFBpY2tsZXJPYmplY3QgKnNlbGYpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MTA2ZWRiMzEyM2YzMzJlMSBpbnB1dD04Y2JiZWM5YmQ1NTQwZDQyXSovCit7CisgICAgUHlfc3NpemVfdCByZXMsIHM7CisKKyAgICByZXMgPSBzaXplb2YoUGlja2xlck9iamVjdCk7CisgICAgaWYgKHNlbGYtPm1lbW8gIT0gTlVMTCkgeworICAgICAgICByZXMgKz0gc2l6ZW9mKFB5TWVtb1RhYmxlKTsKKyAgICAgICAgcmVzICs9IHNlbGYtPm1lbW8tPm10X2FsbG9jYXRlZCAqIHNpemVvZihQeU1lbW9FbnRyeSk7CisgICAgfQorICAgIGlmIChzZWxmLT5vdXRwdXRfYnVmZmVyICE9IE5VTEwpIHsKKyAgICAgICAgcyA9IF9QeVN5c19HZXRTaXplT2Yoc2VsZi0+b3V0cHV0X2J1ZmZlcik7CisgICAgICAgIGlmIChzID09IC0xKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICByZXMgKz0gczsKKyAgICB9CisgICAgcmV0dXJuIHJlczsKK30KKwogc3RhdGljIHN0cnVjdCBQeU1ldGhvZERlZiBQaWNrbGVyX21ldGhvZHNbXSA9IHsKLSAgICB7ImR1bXAiLCAoUHlDRnVuY3Rpb24pUGlja2xlcl9kdW1wLCBNRVRIX1ZBUkFSR1MsCi0gICAgIFBpY2tsZXJfZHVtcF9kb2N9LAotICAgIHsiY2xlYXJfbWVtbyIsIChQeUNGdW5jdGlvbilQaWNrbGVyX2NsZWFyX21lbW8sIE1FVEhfTk9BUkdTLAotICAgICBQaWNrbGVyX2NsZWFyX21lbW9fZG9jfSwKKyAgICBfUElDS0xFX1BJQ0tMRVJfRFVNUF9NRVRIT0RERUYKKyAgICBfUElDS0xFX1BJQ0tMRVJfQ0xFQVJfTUVNT19NRVRIT0RERUYKKyAgICBfUElDS0xFX1BJQ0tMRVJfX19TSVpFT0ZfX19NRVRIT0RERUYKICAgICB7TlVMTCwgTlVMTH0gICAgICAgICAgICAgICAgLyogc2VudGluZWwgKi8KIH07CiAKQEAgLTM0MjcsNyArMzk3Nyw2IEBACiAgICAgUHlfWERFQ1JFRihzZWxmLT53cml0ZSk7CiAgICAgUHlfWERFQ1JFRihzZWxmLT5wZXJzX2Z1bmMpOwogICAgIFB5X1hERUNSRUYoc2VsZi0+ZGlzcGF0Y2hfdGFibGUpOwotICAgIFB5X1hERUNSRUYoc2VsZi0+YXJnKTsKICAgICBQeV9YREVDUkVGKHNlbGYtPmZhc3RfbWVtbyk7CiAKICAgICBQeU1lbW9UYWJsZV9EZWwoc2VsZi0+bWVtbyk7CkBAIC0zNDQxLDcgKzM5OTAsNiBAQAogICAgIFB5X1ZJU0lUKHNlbGYtPndyaXRlKTsKICAgICBQeV9WSVNJVChzZWxmLT5wZXJzX2Z1bmMpOwogICAgIFB5X1ZJU0lUKHNlbGYtPmRpc3BhdGNoX3RhYmxlKTsKLSAgICBQeV9WSVNJVChzZWxmLT5hcmcpOwogICAgIFB5X1ZJU0lUKHNlbGYtPmZhc3RfbWVtbyk7CiAgICAgcmV0dXJuIDA7CiB9CkBAIC0zNDUzLDcgKzQwMDEsNiBAQAogICAgIFB5X0NMRUFSKHNlbGYtPndyaXRlKTsKICAgICBQeV9DTEVBUihzZWxmLT5wZXJzX2Z1bmMpOwogICAgIFB5X0NMRUFSKHNlbGYtPmRpc3BhdGNoX3RhYmxlKTsKLSAgICBQeV9DTEVBUihzZWxmLT5hcmcpOwogICAgIFB5X0NMRUFSKHNlbGYtPmZhc3RfbWVtbyk7CiAKICAgICBpZiAoc2VsZi0+bWVtbyAhPSBOVUxMKSB7CkBAIC0zNDY1LDQ5ICs0MDEyLDQ2IEBACiB9CiAKIAotUHlEb2NfU1RSVkFSKFBpY2tsZXJfZG9jLAotIlBpY2tsZXIoZmlsZSwgcHJvdG9jb2w9Tm9uZSkiCi0iXG4iCi0iVGhpcyB0YWtlcyBhIGJpbmFyeSBmaWxlIGZvciB3cml0aW5nIGEgcGlja2xlIGRhdGEgc3RyZWFtLlxuIgotIlxuIgotIlRoZSBvcHRpb25hbCBwcm90b2NvbCBhcmd1bWVudCB0ZWxscyB0aGUgcGlja2xlciB0byB1c2UgdGhlXG4iCi0iZ2l2ZW4gcHJvdG9jb2w7IHN1cHBvcnRlZCBwcm90b2NvbHMgYXJlIDAsIDEsIDIsIDMuICBUaGUgZGVmYXVsdFxuIgotInByb3RvY29sIGlzIDM7IGEgYmFja3dhcmQtaW5jb21wYXRpYmxlIHByb3RvY29sIGRlc2lnbmVkIGZvclxuIgotIlB5dGhvbiAzLjAuXG4iCi0iXG4iCi0iU3BlY2lmeWluZyBhIG5lZ2F0aXZlIHByb3RvY29sIHZlcnNpb24gc2VsZWN0cyB0aGUgaGlnaGVzdFxuIgotInByb3RvY29sIHZlcnNpb24gc3VwcG9ydGVkLiAgVGhlIGhpZ2hlciB0aGUgcHJvdG9jb2wgdXNlZCwgdGhlXG4iCi0ibW9yZSByZWNlbnQgdGhlIHZlcnNpb24gb2YgUHl0aG9uIG5lZWRlZCB0byByZWFkIHRoZSBwaWNrbGVcbiIKLSJwcm9kdWNlZC5cbiIKLSJcbiIKLSJUaGUgZmlsZSBhcmd1bWVudCBtdXN0IGhhdmUgYSB3cml0ZSgpIG1ldGhvZCB0aGF0IGFjY2VwdHMgYSBzaW5nbGVcbiIKLSJieXRlcyBhcmd1bWVudC4gSXQgY2FuIHRodXMgYmUgYSBmaWxlIG9iamVjdCBvcGVuZWQgZm9yIGJpbmFyeVxuIgotIndyaXRpbmcsIGEgaW8uQnl0ZXNJTyBpbnN0YW5jZSwgb3IgYW55IG90aGVyIGN1c3RvbSBvYmplY3QgdGhhdFxuIgotIm1lZXRzIHRoaXMgaW50ZXJmYWNlLlxuIgotIlxuIgotIklmIGZpeF9pbXBvcnRzIGlzIFRydWUgYW5kIHByb3RvY29sIGlzIGxlc3MgdGhhbiAzLCBwaWNrbGUgd2lsbCB0cnkgdG9cbiIKLSJtYXAgdGhlIG5ldyBQeXRob24gMy54IG5hbWVzIHRvIHRoZSBvbGQgbW9kdWxlIG5hbWVzIHVzZWQgaW4gUHl0aG9uXG4iCi0iMi54LCBzbyB0aGF0IHRoZSBwaWNrbGUgZGF0YSBzdHJlYW0gaXMgcmVhZGFibGUgd2l0aCBQeXRob24gMi54LlxuIik7CisvKltjbGluaWMgaW5wdXRdCisKK19waWNrbGUuUGlja2xlci5fX2luaXRfXworCisgIGZpbGU6IG9iamVjdAorICBwcm90b2NvbDogb2JqZWN0ID0gTlVMTAorICBmaXhfaW1wb3J0czogYm9vbCA9IFRydWUKKworVGhpcyB0YWtlcyBhIGJpbmFyeSBmaWxlIGZvciB3cml0aW5nIGEgcGlja2xlIGRhdGEgc3RyZWFtLgorCitUaGUgb3B0aW9uYWwgKnByb3RvY29sKiBhcmd1bWVudCB0ZWxscyB0aGUgcGlja2xlciB0byB1c2UgdGhlIGdpdmVuCitwcm90b2NvbDsgc3VwcG9ydGVkIHByb3RvY29scyBhcmUgMCwgMSwgMiwgMyBhbmQgNC4gIFRoZSBkZWZhdWx0Citwcm90b2NvbCBpcyAzOyBhIGJhY2t3YXJkLWluY29tcGF0aWJsZSBwcm90b2NvbCBkZXNpZ25lZCBmb3IgUHl0aG9uIDMuCisKK1NwZWNpZnlpbmcgYSBuZWdhdGl2ZSBwcm90b2NvbCB2ZXJzaW9uIHNlbGVjdHMgdGhlIGhpZ2hlc3QgcHJvdG9jb2wKK3ZlcnNpb24gc3VwcG9ydGVkLiAgVGhlIGhpZ2hlciB0aGUgcHJvdG9jb2wgdXNlZCwgdGhlIG1vcmUgcmVjZW50IHRoZQordmVyc2lvbiBvZiBQeXRob24gbmVlZGVkIHRvIHJlYWQgdGhlIHBpY2tsZSBwcm9kdWNlZC4KKworVGhlICpmaWxlKiBhcmd1bWVudCBtdXN0IGhhdmUgYSB3cml0ZSgpIG1ldGhvZCB0aGF0IGFjY2VwdHMgYSBzaW5nbGUKK2J5dGVzIGFyZ3VtZW50LiBJdCBjYW4gdGh1cyBiZSBhIGZpbGUgb2JqZWN0IG9wZW5lZCBmb3IgYmluYXJ5Cit3cml0aW5nLCBhbiBpby5CeXRlc0lPIGluc3RhbmNlLCBvciBhbnkgb3RoZXIgY3VzdG9tIG9iamVjdCB0aGF0IG1lZXRzCit0aGlzIGludGVyZmFjZS4KKworSWYgKmZpeF9pbXBvcnRzKiBpcyBUcnVlIGFuZCBwcm90b2NvbCBpcyBsZXNzIHRoYW4gMywgcGlja2xlIHdpbGwgdHJ5Cit0byBtYXAgdGhlIG5ldyBQeXRob24gMyBuYW1lcyB0byB0aGUgb2xkIG1vZHVsZSBuYW1lcyB1c2VkIGluIFB5dGhvbgorMiwgc28gdGhhdCB0aGUgcGlja2xlIGRhdGEgc3RyZWFtIGlzIHJlYWRhYmxlIHdpdGggUHl0aG9uIDIuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBpbnQKLVBpY2tsZXJfaW5pdChQaWNrbGVyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCitfcGlja2xlX1BpY2tsZXJfX19pbml0X19faW1wbChQaWNrbGVyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqZmlsZSwgUHlPYmplY3QgKnByb3RvY29sLCBpbnQgZml4X2ltcG9ydHMpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NTZlMjI5ZjNiMWY0MzMyZiBpbnB1dD00ZmFhYmRiYzc2M2MyMzg5XSovCiB7Ci0gICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJmaWxlIiwgInByb3RvY29sIiwgImZpeF9pbXBvcnRzIiwgMH07Ci0gICAgUHlPYmplY3QgKmZpbGU7Ci0gICAgUHlPYmplY3QgKnByb3RvX29iaiA9IE5VTEw7Ci0gICAgUHlPYmplY3QgKmZpeF9pbXBvcnRzID0gUHlfVHJ1ZTsKICAgICBfUHlfSURFTlRJRklFUihwZXJzaXN0ZW50X2lkKTsKICAgICBfUHlfSURFTlRJRklFUihkaXNwYXRjaF90YWJsZSk7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiT3xPTzpQaWNrbGVyIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrd2xpc3QsICZmaWxlLCAmcHJvdG9fb2JqLCAmZml4X2ltcG9ydHMpKQotICAgICAgICByZXR1cm4gLTE7Ci0KICAgICAvKiBJbiBjYXNlIG9mIG11bHRpcGxlIF9faW5pdF9fKCkgY2FsbHMsIGNsZWFyIHByZXZpb3VzIGNvbnRlbnQuICovCiAgICAgaWYgKHNlbGYtPndyaXRlICE9IE5VTEwpCiAgICAgICAgICh2b2lkKVBpY2tsZXJfY2xlYXIoc2VsZik7CiAKLSAgICBpZiAoX1BpY2tsZXJfU2V0UHJvdG9jb2woc2VsZiwgcHJvdG9fb2JqLCBmaXhfaW1wb3J0cykgPCAwKQorICAgIGlmIChfUGlja2xlcl9TZXRQcm90b2NvbChzZWxmLCBwcm90b2NvbCwgZml4X2ltcG9ydHMpIDwgMCkKICAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgaWYgKF9QaWNrbGVyX1NldE91dHB1dFN0cmVhbShzZWxmLCBmaWxlKSA8IDApCkBAIC0zNTI4LDcgKzQwNzIsNiBAQAogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIAotICAgIHNlbGYtPmFyZyA9IE5VTEw7CiAgICAgc2VsZi0+ZmFzdCA9IDA7CiAgICAgc2VsZi0+ZmFzdF9uZXN0aW5nID0gMDsKICAgICBzZWxmLT5mYXN0X21lbW8gPSBOVUxMOwpAQCAtMzU0Niw5ICs0MDg5LDExIEBACiAgICAgICAgIGlmIChzZWxmLT5kaXNwYXRjaF90YWJsZSA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KKwogICAgIHJldHVybiAwOwogfQogCisKIC8qIERlZmluZSBhIHByb3h5IG9iamVjdCBmb3IgdGhlIFBpY2tsZXIncyBpbnRlcm5hbCBtZW1vIG9iamVjdC4gVGhpcyBpcyB0bwogICogYXZvaWQgYnJlYWtpbmcgY29kZSBsaWtlOgogICogIHBpY2tsZXIubWVtby5jbGVhcigpCkBAIC0zNTU5LDI3ICs0MTA0LDMwIEBACiAgKiBpbnRlbnRpb25hbCwgYXMgdGhlc2Ugc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYmxhY2stYm94IGltcGxlbWVudGF0aW9uIGRldGFpbHMuCiAgKi8KIAotdHlwZWRlZiBzdHJ1Y3QgewotICAgIFB5T2JqZWN0X0hFQUQKLSAgICBQaWNrbGVyT2JqZWN0ICpwaWNrbGVyOyAvKiBQaWNrbGVyIHdob3NlIG1lbW8gdGFibGUgd2UncmUgcHJveHlpbmcuICovCi19IFBpY2tsZXJNZW1vUHJveHlPYmplY3Q7CisvKltjbGluaWMgaW5wdXRdCitfcGlja2xlLlBpY2tsZXJNZW1vUHJveHkuY2xlYXIKIAotUHlEb2NfU1RSVkFSKHBtcF9jbGVhcl9kb2MsCi0ibWVtby5jbGVhcigpIC0+IE5vbmUuICBSZW1vdmUgYWxsIGl0ZW1zIGZyb20gbWVtby4iKTsKK1JlbW92ZSBhbGwgaXRlbXMgZnJvbSBtZW1vLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotcG1wX2NsZWFyKFBpY2tsZXJNZW1vUHJveHlPYmplY3QgKnNlbGYpCitfcGlja2xlX1BpY2tsZXJNZW1vUHJveHlfY2xlYXJfaW1wbChQaWNrbGVyTWVtb1Byb3h5T2JqZWN0ICpzZWxmKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTVmYjkzNzBkNDhhZThiMDUgaW5wdXQ9Y2NjMTg2ZGFjZDBmMTQwNV0qLwogewogICAgIGlmIChzZWxmLT5waWNrbGVyLT5tZW1vKQogICAgICAgICBQeU1lbW9UYWJsZV9DbGVhcihzZWxmLT5waWNrbGVyLT5tZW1vKTsKICAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIAotUHlEb2NfU1RSVkFSKHBtcF9jb3B5X2RvYywKLSJtZW1vLmNvcHkoKSAtPiBuZXdfbWVtby4gIENvcHkgdGhlIG1lbW8gdG8gYSBuZXcgb2JqZWN0LiIpOworLypbY2xpbmljIGlucHV0XQorX3BpY2tsZS5QaWNrbGVyTWVtb1Byb3h5LmNvcHkKKworQ29weSB0aGUgbWVtbyB0byBhIG5ldyBvYmplY3QuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1wbXBfY29weShQaWNrbGVyTWVtb1Byb3h5T2JqZWN0ICpzZWxmKQorX3BpY2tsZV9QaWNrbGVyTWVtb1Byb3h5X2NvcHlfaW1wbChQaWNrbGVyTWVtb1Byb3h5T2JqZWN0ICpzZWxmKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWJiODNhOTE5ZDI5MjI1ZWYgaW5wdXQ9YjczMDQzNDg1YWMzMGIzNl0qLwogewogICAgIFB5X3NzaXplX3QgaTsKICAgICBQeU1lbW9UYWJsZSAqbWVtbzsKQEAgLTM2MTYsMTQgKzQxNjQsMTggQEAKICAgICByZXR1cm4gTlVMTDsKIH0KIAotUHlEb2NfU1RSVkFSKHBtcF9yZWR1Y2VfZG9jLAotIm1lbW8uX19yZWR1Y2VfXygpLiBQaWNrbGluZyBzdXBwb3J0LiIpOworLypbY2xpbmljIGlucHV0XQorX3BpY2tsZS5QaWNrbGVyTWVtb1Byb3h5Ll9fcmVkdWNlX18KKworSW1wbGVtZW50IHBpY2tsZSBzdXBwb3J0LgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotcG1wX3JlZHVjZShQaWNrbGVyTWVtb1Byb3h5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK19waWNrbGVfUGlja2xlck1lbW9Qcm94eV9fX3JlZHVjZV9fX2ltcGwoUGlja2xlck1lbW9Qcm94eU9iamVjdCAqc2VsZikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1iZWJiYTExNjg4NjNhYjFkIGlucHV0PTJmN2M1NDBlMjRiN2FhZTRdKi8KIHsKICAgICBQeU9iamVjdCAqcmVkdWNlX3ZhbHVlLCAqZGljdF9hcmdzOwotICAgIFB5T2JqZWN0ICpjb250ZW50cyA9IHBtcF9jb3B5KHNlbGYpOworICAgIFB5T2JqZWN0ICpjb250ZW50cyA9IF9waWNrbGVfUGlja2xlck1lbW9Qcm94eV9jb3B5X2ltcGwoc2VsZik7CiAgICAgaWYgKGNvbnRlbnRzID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCkBAIC0zNjQ2LDkgKzQxOTgsOSBAQAogfQogCiBzdGF0aWMgUHlNZXRob2REZWYgcGlja2xlcnByb3h5X21ldGhvZHNbXSA9IHsKLSAgICB7ImNsZWFyIiwgICAgICAoUHlDRnVuY3Rpb24pcG1wX2NsZWFyLCAgTUVUSF9OT0FSR1MsICBwbXBfY2xlYXJfZG9jfSwKLSAgICB7ImNvcHkiLCAgICAgICAoUHlDRnVuY3Rpb24pcG1wX2NvcHksICAgTUVUSF9OT0FSR1MsICBwbXBfY29weV9kb2N9LAotICAgIHsiX19yZWR1Y2VfXyIsIChQeUNGdW5jdGlvbilwbXBfcmVkdWNlLCBNRVRIX1ZBUkFSR1MsIHBtcF9yZWR1Y2VfZG9jfSwKKyAgICBfUElDS0xFX1BJQ0tMRVJNRU1PUFJPWFlfQ0xFQVJfTUVUSE9EREVGCisgICAgX1BJQ0tMRV9QSUNLTEVSTUVNT1BST1hZX0NPUFlfTUVUSE9EREVGCisgICAgX1BJQ0tMRV9QSUNLTEVSTUVNT1BST1hZX19fUkVEVUNFX19fTUVUSE9EREVGCiAgICAge05VTEwsIE5VTEx9IC8qIHNlbnRpbmVsICovCiB9OwogCkBAIC0zODYwLDcgKzQ0MTIsNyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc2V0YXR0cm8qLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfYnVmZmVyKi8KICAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0JBU0VUWVBFIHwgUHlfVFBGTEFHU19IQVZFX0dDLAotICAgIFBpY2tsZXJfZG9jLCAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZG9jKi8KKyAgICBfcGlja2xlX1BpY2tsZXJfX19pbml0X19fX2RvY19fLCAgICAvKnRwX2RvYyovCiAgICAgKHRyYXZlcnNlcHJvYylQaWNrbGVyX3RyYXZlcnNlLCAgICAgLyp0cF90cmF2ZXJzZSovCiAgICAgKGlucXVpcnkpUGlja2xlcl9jbGVhciwgICAgICAgICAgICAgLyp0cF9jbGVhciovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9yaWNoY29tcGFyZSovCkBAIC0zODc1LDcgKzQ0MjcsNyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZGVzY3JfZ2V0Ki8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2Rlc2NyX3NldCovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9kaWN0b2Zmc2V0Ki8KLSAgICAoaW5pdHByb2MpUGlja2xlcl9pbml0LCAgICAgICAgICAgICAvKnRwX2luaXQqLworICAgIF9waWNrbGVfUGlja2xlcl9fX2luaXRfXywgICAgICAgICAgIC8qdHBfaW5pdCovCiAgICAgUHlUeXBlX0dlbmVyaWNBbGxvYywgICAgICAgICAgICAgICAgLyp0cF9hbGxvYyovCiAgICAgUHlUeXBlX0dlbmVyaWNOZXcsICAgICAgICAgICAgICAgICAgLyp0cF9uZXcqLwogICAgIFB5T2JqZWN0X0dDX0RlbCwgICAgICAgICAgICAgICAgICAgIC8qdHBfZnJlZSovCkBAIC0zOTAxLDggKzQ0NTMsOSBAQAogc3RhdGljIFB5X3NzaXplX3QKIG1hcmtlcihVbnBpY2tsZXJPYmplY3QgKnNlbGYpCiB7CisgICAgUGlja2xlU3RhdGUgKnN0ID0gX1BpY2tsZV9HZXRHbG9iYWxTdGF0ZSgpOwogICAgIGlmIChzZWxmLT5udW1fbWFya3MgPCAxKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhVbnBpY2tsaW5nRXJyb3IsICJjb3VsZCBub3QgZmluZCBNQVJLIik7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhzdC0+VW5waWNrbGluZ0Vycm9yLCAiY291bGQgbm90IGZpbmQgTUFSSyIpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCkBAIC0zOTE5LDcgKzQ0NzIsOCBAQAogc3RhdGljIGludAogYmFkX3JlYWRsaW5lKHZvaWQpCiB7Ci0gICAgUHlFcnJfU2V0U3RyaW5nKFVucGlja2xpbmdFcnJvciwgInBpY2tsZSBkYXRhIHdhcyB0cnVuY2F0ZWQiKTsKKyAgICBQaWNrbGVTdGF0ZSAqc3QgPSBfUGlja2xlX0dldEdsb2JhbFN0YXRlKCk7CisgICAgUHlFcnJfU2V0U3RyaW5nKHN0LT5VbnBpY2tsaW5nRXJyb3IsICJwaWNrbGUgZGF0YSB3YXMgdHJ1bmNhdGVkIik7CiAgICAgcmV0dXJuIC0xOwogfQogCkBAIC0zOTgwLDE3ICs0NTM0LDI1IEBACiAgKiBhcyBhIEMgUHlfc3NpemVfdCwgb3IgLTEgaWYgaXQncyBoaWdoZXIgdGhhbiBQWV9TU0laRV9UX01BWC4KICAqLwogc3RhdGljIFB5X3NzaXplX3QKLWNhbGNfYmluc2l6ZShjaGFyICpieXRlcywgaW50IHNpemUpCitjYWxjX2JpbnNpemUoY2hhciAqYnl0ZXMsIGludCBuYnl0ZXMpCiB7CiAgICAgdW5zaWduZWQgY2hhciAqcyA9ICh1bnNpZ25lZCBjaGFyICopYnl0ZXM7CisgICAgaW50IGk7CiAgICAgc2l6ZV90IHggPSAwOwogCi0gICAgYXNzZXJ0KHNpemUgPT0gNCk7Ci0KLSAgICB4ID0gIChzaXplX3QpIHNbMF07Ci0gICAgeCB8PSAoc2l6ZV90KSBzWzFdIDw8IDg7Ci0gICAgeCB8PSAoc2l6ZV90KSBzWzJdIDw8IDE2OwotICAgIHggfD0gKHNpemVfdCkgc1szXSA8PCAyNDsKKyAgICBpZiAobmJ5dGVzID4gKGludClzaXplb2Yoc2l6ZV90KSkgeworICAgICAgICAvKiBDaGVjayBmb3IgaW50ZWdlciBvdmVyZmxvdy4gIEJJTkJZVEVTOCBhbmQgQklOVU5JQ09ERTggb3Bjb2RlcworICAgICAgICAgKiBoYXZlIDY0LWJpdCBzaXplIHRoYXQgY2FuJ3QgYmUgcmVwcmVzZW50ZWQgb24gMzItYml0IHBsYXRmb3JtLgorICAgICAgICAgKi8KKyAgICAgICAgZm9yIChpID0gKGludClzaXplb2Yoc2l6ZV90KTsgaSA8IG5ieXRlczsgaSsrKSB7CisgICAgICAgICAgICBpZiAoc1tpXSkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgbmJ5dGVzID0gKGludClzaXplb2Yoc2l6ZV90KTsKKyAgICB9CisgICAgZm9yIChpID0gMDsgaSA8IG5ieXRlczsgaSsrKSB7CisgICAgICAgIHggfD0gKHNpemVfdCkgc1tpXSA8PCAoOCAqIGkpOworICAgIH0KIAogICAgIGlmICh4ID4gUFlfU1NJWkVfVF9NQVgpCiAgICAgICAgIHJldHVybiAtMTsKQEAgLTQwMDQsMjEgKzQ1NjYsMjEgQEAKICAqIG9mIHgtcGxhdGZvcm0gYnVncy4KICAqLwogc3RhdGljIGxvbmcKLWNhbGNfYmluaW50KGNoYXIgKmJ5dGVzLCBpbnQgc2l6ZSkKK2NhbGNfYmluaW50KGNoYXIgKmJ5dGVzLCBpbnQgbmJ5dGVzKQogewogICAgIHVuc2lnbmVkIGNoYXIgKnMgPSAodW5zaWduZWQgY2hhciAqKWJ5dGVzOwotICAgIGludCBpID0gc2l6ZTsKKyAgICBpbnQgaTsKICAgICBsb25nIHggPSAwOwogCi0gICAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgewotICAgICAgICB4IHw9IChsb25nKXNbaV0gPDwgKGkgKiA4KTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbmJ5dGVzOyBpKyspIHsKKyAgICAgICAgeCB8PSAobG9uZylzW2ldIDw8ICg4ICogaSk7CiAgICAgfQogCiAgICAgLyogVW5saWtlIEJJTklOVDEgYW5kIEJJTklOVDIsIEJJTklOVCAobW9yZSBhY2N1cmF0ZWx5IEJJTklOVDQpCiAgICAgICogaXMgc2lnbmVkLCBzbyBvbiBhIGJveCB3aXRoIGxvbmdzIGJpZ2dlciB0aGFuIDQgYnl0ZXMgd2UgbmVlZAogICAgICAqIHRvIGV4dGVuZCBhIEJJTklOVCdzIHNpZ24gYml0IHRvIHRoZSBmdWxsIHdpZHRoLgogICAgICAqLwotICAgIGlmIChTSVpFT0ZfTE9ORyA+IDQgJiYgc2l6ZSA9PSA0KSB7CisgICAgaWYgKFNJWkVPRl9MT05HID4gNCAmJiBuYnl0ZXMgPT0gNCkgewogICAgICAgICB4IHw9IC0oeCAmICgxTCA8PCAzMSkpOwogICAgIH0KIApAQCAtNDExNiw4ICs0Njc4LDkgQEAKIAogICAgIHNpemUgPSBjYWxjX2JpbmludChuYnl0ZXMsIHNpemUpOwogICAgIGlmIChzaXplIDwgMCkgeworICAgICAgICBQaWNrbGVTdGF0ZSAqc3QgPSBfUGlja2xlX0dldEdsb2JhbFN0YXRlKCk7CiAgICAgICAgIC8qIENvcnJ1cHQgb3IgaG9zdGlsZSBwaWNrbGUgLS0gd2UgbmV2ZXIgd3JpdGUgb25lIGxpa2UgdGhpcyAqLwotICAgICAgICBQeUVycl9TZXRTdHJpbmcoVW5waWNrbGluZ0Vycm9yLAorICAgICAgICBQeUVycl9TZXRTdHJpbmcoc3QtPlVucGlja2xpbmdFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJMT05HIHBpY2tsZSBoYXMgbmVnYXRpdmUgYnl0ZSBjb3VudCIpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQpAQCAtNDE5MSw3NSArNDc1NCwxMTAgQEAKIGxvYWRfc3RyaW5nKFVucGlja2xlck9iamVjdCAqc2VsZikKIHsKICAgICBQeU9iamVjdCAqYnl0ZXM7Ci0gICAgUHlPYmplY3QgKnN0ciA9IE5VTEw7CisgICAgUHlPYmplY3QgKm9iajsKICAgICBQeV9zc2l6ZV90IGxlbjsKICAgICBjaGFyICpzLCAqcDsKIAogICAgIGlmICgobGVuID0gX1VucGlja2xlcl9SZWFkbGluZShzZWxmLCAmcykpIDwgMCkKICAgICAgICAgcmV0dXJuIC0xOwotICAgIGlmIChsZW4gPCAyKQotICAgICAgICByZXR1cm4gYmFkX3JlYWRsaW5lKCk7Ci0gICAgaWYgKChzID0gc3RyZHVwKHMpKSA9PSBOVUxMKSB7Ci0gICAgICAgIFB5RXJyX05vTWVtb3J5KCk7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0KKyAgICAvKiBTdHJpcCB0aGUgbmV3bGluZSAqLworICAgIGxlbi0tOwogICAgIC8qIFN0cmlwIG91dGVybW9zdCBxdW90ZXMgKi8KLSAgICB3aGlsZSAobGVuID4gMCAmJiBzW2xlbiAtIDFdIDw9ICcgJykKLSAgICAgICAgbGVuLS07Ci0gICAgaWYgKGxlbiA+IDEgJiYgc1swXSA9PSAnIicgJiYgc1tsZW4gLSAxXSA9PSAnIicpIHsKLSAgICAgICAgc1tsZW4gLSAxXSA9ICdcMCc7Ci0gICAgICAgIHAgPSBzICsgMTsKLSAgICAgICAgbGVuIC09IDI7Ci0gICAgfQotICAgIGVsc2UgaWYgKGxlbiA+IDEgJiYgc1swXSA9PSAnXCcnICYmIHNbbGVuIC0gMV0gPT0gJ1wnJykgewotICAgICAgICBzW2xlbiAtIDFdID0gJ1wwJzsKKyAgICBpZiAobGVuID49IDIgJiYgc1swXSA9PSBzW2xlbiAtIDFdICYmIChzWzBdID09ICdcJycgfHwgc1swXSA9PSAnIicpKSB7CiAgICAgICAgIHAgPSBzICsgMTsKICAgICAgICAgbGVuIC09IDI7CiAgICAgfQogICAgIGVsc2UgewotICAgICAgICBmcmVlKHMpOwotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgImluc2VjdXJlIHN0cmluZyBwaWNrbGUiKTsKKyAgICAgICAgUGlja2xlU3RhdGUgKnN0ID0gX1BpY2tsZV9HZXRHbG9iYWxTdGF0ZSgpOworICAgICAgICBQeUVycl9TZXRTdHJpbmcoc3QtPlVucGlja2xpbmdFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJ0aGUgU1RSSU5HIG9wY29kZSBhcmd1bWVudCBtdXN0IGJlIHF1b3RlZCIpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQorICAgIGFzc2VydChsZW4gPj0gMCk7CiAKICAgICAvKiBVc2UgdGhlIFB5Qnl0ZXMgQVBJIHRvIGRlY29kZSB0aGUgc3RyaW5nLCBzaW5jZSB0aGF0IGlzIHdoYXQgaXMgdXNlZAogICAgICAgIHRvIGVuY29kZSwgYW5kIHRoZW4gY29lcmNlIHRoZSByZXN1bHQgdG8gVW5pY29kZS4gKi8KICAgICBieXRlcyA9IFB5Qnl0ZXNfRGVjb2RlRXNjYXBlKHAsIGxlbiwgTlVMTCwgMCwgTlVMTCk7Ci0gICAgZnJlZShzKTsKICAgICBpZiAoYnl0ZXMgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIC0xOwotICAgIHN0ciA9IFB5VW5pY29kZV9Gcm9tRW5jb2RlZE9iamVjdChieXRlcywgc2VsZi0+ZW5jb2RpbmcsIHNlbGYtPmVycm9ycyk7Ci0gICAgUHlfREVDUkVGKGJ5dGVzKTsKLSAgICBpZiAoc3RyID09IE5VTEwpCi0gICAgICAgIHJldHVybiAtMTsKIAotICAgIFBEQVRBX1BVU0goc2VsZi0+c3RhY2ssIHN0ciwgLTEpOworICAgIC8qIExlYXZlIHRoZSBQeXRob24gMi54IHN0cmluZ3MgYXMgYnl0ZXMgaWYgdGhlICplbmNvZGluZyogZ2l2ZW4gdG8gdGhlCisgICAgICAgVW5waWNrbGVyIHdhcyAnYnl0ZXMnLiBPdGhlcndpc2UsIGNvbnZlcnQgdGhlbSB0byB1bmljb2RlLiAqLworICAgIGlmIChzdHJjbXAoc2VsZi0+ZW5jb2RpbmcsICJieXRlcyIpID09IDApIHsKKyAgICAgICAgb2JqID0gYnl0ZXM7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBvYmogPSBQeVVuaWNvZGVfRnJvbUVuY29kZWRPYmplY3QoYnl0ZXMsIHNlbGYtPmVuY29kaW5nLCBzZWxmLT5lcnJvcnMpOworICAgICAgICBQeV9ERUNSRUYoYnl0ZXMpOworICAgICAgICBpZiAob2JqID09IE5VTEwpIHsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFBEQVRBX1BVU0goc2VsZi0+c3RhY2ssIG9iaiwgLTEpOwogICAgIHJldHVybiAwOwogfQogCiBzdGF0aWMgaW50Ci1sb2FkX2JpbmJ5dGVzKFVucGlja2xlck9iamVjdCAqc2VsZikKK2xvYWRfY291bnRlZF9iaW5zdHJpbmcoVW5waWNrbGVyT2JqZWN0ICpzZWxmLCBpbnQgbmJ5dGVzKQogewotICAgIFB5T2JqZWN0ICpieXRlczsKLSAgICBQeV9zc2l6ZV90IHg7CisgICAgUHlPYmplY3QgKm9iajsKKyAgICBQeV9zc2l6ZV90IHNpemU7CiAgICAgY2hhciAqczsKIAotICAgIGlmIChfVW5waWNrbGVyX1JlYWQoc2VsZiwgJnMsIDQpIDwgMCkKKyAgICBpZiAoX1VucGlja2xlcl9SZWFkKHNlbGYsICZzLCBuYnl0ZXMpIDwgMCkKICAgICAgICAgcmV0dXJuIC0xOwogCi0gICAgeCA9IGNhbGNfYmluc2l6ZShzLCA0KTsKLSAgICBpZiAoeCA8IDApIHsKKyAgICBzaXplID0gY2FsY19iaW5zaXplKHMsIG5ieXRlcyk7CisgICAgaWYgKHNpemUgPCAwKSB7CisgICAgICAgIFBpY2tsZVN0YXRlICpzdCA9IF9QaWNrbGVfR2V0R2xvYmFsU3RhdGUoKTsKKyAgICAgICAgUHlFcnJfRm9ybWF0KHN0LT5VbnBpY2tsaW5nRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAiQklOU1RSSU5HIGV4Y2VlZHMgc3lzdGVtJ3MgbWF4aW11bSBzaXplIG9mICV6ZCBieXRlcyIsCisgICAgICAgICAgICAgICAgICAgICBQWV9TU0laRV9UX01BWCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBpZiAoX1VucGlja2xlcl9SZWFkKHNlbGYsICZzLCBzaXplKSA8IDApCisgICAgICAgIHJldHVybiAtMTsKKworICAgIC8qIENvbnZlcnQgUHl0aG9uIDIueCBzdHJpbmdzIHRvIGJ5dGVzIGlmIHRoZSAqZW5jb2RpbmcqIGdpdmVuIHRvIHRoZQorICAgICAgIFVucGlja2xlciB3YXMgJ2J5dGVzJy4gT3RoZXJ3aXNlLCBjb252ZXJ0IHRoZW0gdG8gdW5pY29kZS4gKi8KKyAgICBpZiAoc3RyY21wKHNlbGYtPmVuY29kaW5nLCAiYnl0ZXMiKSA9PSAwKSB7CisgICAgICAgIG9iaiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUocywgc2l6ZSk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBvYmogPSBQeVVuaWNvZGVfRGVjb2RlKHMsIHNpemUsIHNlbGYtPmVuY29kaW5nLCBzZWxmLT5lcnJvcnMpOworICAgIH0KKyAgICBpZiAob2JqID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIFBEQVRBX1BVU0goc2VsZi0+c3RhY2ssIG9iaiwgLTEpOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50Citsb2FkX2NvdW50ZWRfYmluYnl0ZXMoVW5waWNrbGVyT2JqZWN0ICpzZWxmLCBpbnQgbmJ5dGVzKQoreworICAgIFB5T2JqZWN0ICpieXRlczsKKyAgICBQeV9zc2l6ZV90IHNpemU7CisgICAgY2hhciAqczsKKworICAgIGlmIChfVW5waWNrbGVyX1JlYWQoc2VsZiwgJnMsIG5ieXRlcykgPCAwKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBzaXplID0gY2FsY19iaW5zaXplKHMsIG5ieXRlcyk7CisgICAgaWYgKHNpemUgPCAwKSB7CiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19PdmVyZmxvd0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgIkJJTkJZVEVTIGV4Y2VlZHMgc3lzdGVtJ3MgbWF4aW11bSBzaXplIG9mICV6ZCBieXRlcyIsCi0gICAgICAgICAgICAgICAgICAgICBQWV9TU0laRV9UX01BWAotICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgICAgICAgUFlfU1NJWkVfVF9NQVgpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCi0gICAgaWYgKF9VbnBpY2tsZXJfUmVhZChzZWxmLCAmcywgeCkgPCAwKQorICAgIGlmIChfVW5waWNrbGVyX1JlYWQoc2VsZiwgJnMsIHNpemUpIDwgMCkKICAgICAgICAgcmV0dXJuIC0xOwotICAgIGJ5dGVzID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShzLCB4KTsKKworICAgIGJ5dGVzID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShzLCBzaXplKTsKICAgICBpZiAoYnl0ZXMgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIC0xOwogCkBAIC00MjY4LDgyICs0ODY2LDYgQEAKIH0KIAogc3RhdGljIGludAotbG9hZF9zaG9ydF9iaW5ieXRlcyhVbnBpY2tsZXJPYmplY3QgKnNlbGYpCi17Ci0gICAgUHlPYmplY3QgKmJ5dGVzOwotICAgIFB5X3NzaXplX3QgeDsKLSAgICBjaGFyICpzOwotCi0gICAgaWYgKF9VbnBpY2tsZXJfUmVhZChzZWxmLCAmcywgMSkgPCAwKQotICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICB4ID0gKHVuc2lnbmVkIGNoYXIpc1swXTsKLQotICAgIGlmIChfVW5waWNrbGVyX1JlYWQoc2VsZiwgJnMsIHgpIDwgMCkKLSAgICAgICAgcmV0dXJuIC0xOwotCi0gICAgYnl0ZXMgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKHMsIHgpOwotICAgIGlmIChieXRlcyA9PSBOVUxMKQotICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICBQREFUQV9QVVNIKHNlbGYtPnN0YWNrLCBieXRlcywgLTEpOwotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci1sb2FkX2JpbnN0cmluZyhVbnBpY2tsZXJPYmplY3QgKnNlbGYpCi17Ci0gICAgUHlPYmplY3QgKnN0cjsKLSAgICBQeV9zc2l6ZV90IHg7Ci0gICAgY2hhciAqczsKLQotICAgIGlmIChfVW5waWNrbGVyX1JlYWQoc2VsZiwgJnMsIDQpIDwgMCkKLSAgICAgICAgcmV0dXJuIC0xOwotCi0gICAgeCA9IGNhbGNfYmluaW50KHMsIDQpOwotICAgIGlmICh4IDwgMCkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoVW5waWNrbGluZ0Vycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgIkJJTlNUUklORyBwaWNrbGUgaGFzIG5lZ2F0aXZlIGJ5dGUgY291bnQiKTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLQotICAgIGlmIChfVW5waWNrbGVyX1JlYWQoc2VsZiwgJnMsIHgpIDwgMCkKLSAgICAgICAgcmV0dXJuIC0xOwotCi0gICAgLyogQ29udmVydCBQeXRob24gMi54IHN0cmluZ3MgdG8gdW5pY29kZS4gKi8KLSAgICBzdHIgPSBQeVVuaWNvZGVfRGVjb2RlKHMsIHgsIHNlbGYtPmVuY29kaW5nLCBzZWxmLT5lcnJvcnMpOwotICAgIGlmIChzdHIgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIC0xOwotCi0gICAgUERBVEFfUFVTSChzZWxmLT5zdGFjaywgc3RyLCAtMSk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLWxvYWRfc2hvcnRfYmluc3RyaW5nKFVucGlja2xlck9iamVjdCAqc2VsZikKLXsKLSAgICBQeU9iamVjdCAqc3RyOwotICAgIFB5X3NzaXplX3QgeDsKLSAgICBjaGFyICpzOwotCi0gICAgaWYgKF9VbnBpY2tsZXJfUmVhZChzZWxmLCAmcywgMSkgPCAwKQotICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICB4ID0gKHVuc2lnbmVkIGNoYXIpc1swXTsKLQotICAgIGlmIChfVW5waWNrbGVyX1JlYWQoc2VsZiwgJnMsIHgpIDwgMCkKLSAgICAgICAgcmV0dXJuIC0xOwotCi0gICAgLyogQ29udmVydCBQeXRob24gMi54IHN0cmluZ3MgdG8gdW5pY29kZS4gKi8KLSAgICBzdHIgPSBQeVVuaWNvZGVfRGVjb2RlKHMsIHgsIHNlbGYtPmVuY29kaW5nLCBzZWxmLT5lcnJvcnMpOwotICAgIGlmIChzdHIgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIC0xOwotCi0gICAgUERBVEFfUFVTSChzZWxmLT5zdGFjaywgc3RyLCAtMSk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKIGxvYWRfdW5pY29kZShVbnBpY2tsZXJPYmplY3QgKnNlbGYpCiB7CiAgICAgUHlPYmplY3QgKnN0cjsKQEAgLTQzNjQsMjUgKzQ4ODYsMjMgQEAKIH0KIAogc3RhdGljIGludAotbG9hZF9iaW51bmljb2RlKFVucGlja2xlck9iamVjdCAqc2VsZikKK2xvYWRfY291bnRlZF9iaW51bmljb2RlKFVucGlja2xlck9iamVjdCAqc2VsZiwgaW50IG5ieXRlcykKIHsKICAgICBQeU9iamVjdCAqc3RyOwogICAgIFB5X3NzaXplX3Qgc2l6ZTsKICAgICBjaGFyICpzOwogCi0gICAgaWYgKF9VbnBpY2tsZXJfUmVhZChzZWxmLCAmcywgNCkgPCAwKQorICAgIGlmIChfVW5waWNrbGVyX1JlYWQoc2VsZiwgJnMsIG5ieXRlcykgPCAwKQogICAgICAgICByZXR1cm4gLTE7CiAKLSAgICBzaXplID0gY2FsY19iaW5zaXplKHMsIDQpOworICAgIHNpemUgPSBjYWxjX2JpbnNpemUocywgbmJ5dGVzKTsKICAgICBpZiAoc2l6ZSA8IDApIHsKICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX092ZXJmbG93RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAiQklOVU5JQ09ERSBleGNlZWRzIHN5c3RlbSdzIG1heGltdW0gc2l6ZSBvZiAlemQgYnl0ZXMiLAotICAgICAgICAgICAgICAgICAgICAgUFlfU1NJWkVfVF9NQVgKLSAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICAgICAgIFBZX1NTSVpFX1RfTUFYKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIAotCiAgICAgaWYgKF9VbnBpY2tsZXJfUmVhZChzZWxmLCAmcywgc2l6ZSkgPCAwKQogICAgICAgICByZXR1cm4gLTE7CiAKQEAgLTQzOTUsMTUgKzQ5MTUsMTQgQEAKIH0KIAogc3RhdGljIGludAotbG9hZF90dXBsZShVbnBpY2tsZXJPYmplY3QgKnNlbGYpCitsb2FkX2NvdW50ZWRfdHVwbGUoVW5waWNrbGVyT2JqZWN0ICpzZWxmLCBpbnQgbGVuKQogewogICAgIFB5T2JqZWN0ICp0dXBsZTsKLSAgICBQeV9zc2l6ZV90IGk7CiAKLSAgICBpZiAoKGkgPSBtYXJrZXIoc2VsZikpIDwgMCkKLSAgICAgICAgcmV0dXJuIC0xOworICAgIGlmIChQeV9TSVpFKHNlbGYtPnN0YWNrKSA8IGxlbikKKyAgICAgICAgcmV0dXJuIHN0YWNrX3VuZGVyZmxvdygpOwogCi0gICAgdHVwbGUgPSBQZGF0YV9wb3B0dXBsZShzZWxmLT5zdGFjaywgaSk7CisgICAgdHVwbGUgPSBQZGF0YV9wb3B0dXBsZShzZWxmLT5zdGFjaywgUHlfU0laRShzZWxmLT5zdGFjaykgLSBsZW4pOwogICAgIGlmICh0dXBsZSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gLTE7CiAgICAgUERBVEFfUFVTSChzZWxmLT5zdGFjaywgdHVwbGUsIC0xKTsKQEAgLTQ0MTEsMjQgKzQ5MzAsMTQgQEAKIH0KIAogc3RhdGljIGludAotbG9hZF9jb3VudGVkX3R1cGxlKFVucGlja2xlck9iamVjdCAqc2VsZiwgaW50IGxlbikKK2xvYWRfdHVwbGUoVW5waWNrbGVyT2JqZWN0ICpzZWxmKQogewotICAgIFB5T2JqZWN0ICp0dXBsZTsKKyAgICBQeV9zc2l6ZV90IGk7CiAKLSAgICB0dXBsZSA9IFB5VHVwbGVfTmV3KGxlbik7Ci0gICAgaWYgKHR1cGxlID09IE5VTEwpCisgICAgaWYgKChpID0gbWFya2VyKHNlbGYpKSA8IDApCiAgICAgICAgIHJldHVybiAtMTsKIAotICAgIHdoaWxlICgtLWxlbiA+PSAwKSB7Ci0gICAgICAgIFB5T2JqZWN0ICppdGVtOwotCi0gICAgICAgIFBEQVRBX1BPUChzZWxmLT5zdGFjaywgaXRlbSk7Ci0gICAgICAgIGlmIChpdGVtID09IE5VTEwpCi0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIFB5VHVwbGVfU0VUX0lURU0odHVwbGUsIGxlbiwgaXRlbSk7Ci0gICAgfQotICAgIFBEQVRBX1BVU0goc2VsZi0+c3RhY2ssIHR1cGxlLCAtMSk7Ci0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGxvYWRfY291bnRlZF90dXBsZShzZWxmLCBQeV9TSVpFKHNlbGYtPnN0YWNrKSAtIGkpOwogfQogCiBzdGF0aWMgaW50CkBAIC00NDU0LDYgKzQ5NjMsMTcgQEAKIH0KIAogc3RhdGljIGludAorbG9hZF9lbXB0eV9zZXQoVW5waWNrbGVyT2JqZWN0ICpzZWxmKQoreworICAgIFB5T2JqZWN0ICpzZXQ7CisKKyAgICBpZiAoKHNldCA9IFB5U2V0X05ldyhOVUxMKSkgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIFBEQVRBX1BVU0goc2VsZi0+c3RhY2ssIHNldCwgLTEpOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CiBsb2FkX2xpc3QoVW5waWNrbGVyT2JqZWN0ICpzZWxmKQogewogICAgIFB5T2JqZWN0ICpsaXN0OwpAQCAtNDQ5NSw2ICs1MDE1LDI5IEBACiAgICAgcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQKK2xvYWRfZnJvemVuc2V0KFVucGlja2xlck9iamVjdCAqc2VsZikKK3sKKyAgICBQeU9iamVjdCAqaXRlbXM7CisgICAgUHlPYmplY3QgKmZyb3plbnNldDsKKyAgICBQeV9zc2l6ZV90IGk7CisKKyAgICBpZiAoKGkgPSBtYXJrZXIoc2VsZikpIDwgMCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgaXRlbXMgPSBQZGF0YV9wb3B0dXBsZShzZWxmLT5zdGFjaywgaSk7CisgICAgaWYgKGl0ZW1zID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGZyb3plbnNldCA9IFB5RnJvemVuU2V0X05ldyhpdGVtcyk7CisgICAgUHlfREVDUkVGKGl0ZW1zKTsKKyAgICBpZiAoZnJvemVuc2V0ID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIFBEQVRBX1BVU0goc2VsZi0+c3RhY2ssIGZyb3plbnNldCwgLTEpOworICAgIHJldHVybiAwOworfQorCiBzdGF0aWMgUHlPYmplY3QgKgogaW5zdGFudGlhdGUoUHlPYmplY3QgKmNscywgUHlPYmplY3QgKmFyZ3MpCiB7CkBAIC00NTI1LDYgKzUwNjgsOSBAQAogICAgIGlmICgoaSA9IG1hcmtlcihzZWxmKSkgPCAwKQogICAgICAgICByZXR1cm4gLTE7CiAKKyAgICBpZiAoUHlfU0laRShzZWxmLT5zdGFjaykgLSBpIDwgMSkKKyAgICAgICAgcmV0dXJuIHN0YWNrX3VuZGVyZmxvdygpOworCiAgICAgYXJncyA9IFBkYXRhX3BvcHR1cGxlKHNlbGYtPnN0YWNrLCBpICsgMSk7CiAgICAgaWYgKGFyZ3MgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIC0xOwpAQCAtNDU2OSw4ICs1MTE1LDEwIEBACiAgICAgICAgIHJldHVybiAtMTsKIAogICAgIGlmICgobGVuID0gX1VucGlja2xlcl9SZWFkbGluZShzZWxmLCAmcykpID49IDApIHsKLSAgICAgICAgaWYgKGxlbiA8IDIpCisgICAgICAgIGlmIChsZW4gPCAyKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYobW9kdWxlX25hbWUpOwogICAgICAgICAgICAgcmV0dXJuIGJhZF9yZWFkbGluZSgpOworICAgICAgICB9CiAgICAgICAgIGNsYXNzX25hbWUgPSBQeVVuaWNvZGVfRGVjb2RlQVNDSUkocywgbGVuIC0gMSwgInN0cmljdCIpOwogICAgICAgICBpZiAoY2xhc3NfbmFtZSAhPSBOVUxMKSB7CiAgICAgICAgICAgICBjbHMgPSBmaW5kX2NsYXNzKHNlbGYsIG1vZHVsZV9uYW1lLCBjbGFzc19uYW1lKTsKQEAgLTQ2MDIsNiArNTE1MCw3IEBACiAgICAgUHlPYmplY3QgKmNsc3JhdyA9IE5VTEw7CiAgICAgUHlUeXBlT2JqZWN0ICpjbHM7ICAgICAgICAgIC8qIGNsc3JhdyBjYXN0IHRvIGl0cyB0cnVlIHR5cGUgKi8KICAgICBQeU9iamVjdCAqb2JqOworICAgIFBpY2tsZVN0YXRlICpzdCA9IF9QaWNrbGVfR2V0R2xvYmFsU3RhdGUoKTsKIAogICAgIC8qIFN0YWNrIGlzIC4uLiBjbHMgYXJndHVwbGUsIGFuZCB3ZSB3YW50IHRvIGNhbGwKICAgICAgKiBjbHMuX19uZXdfXyhjbHMsICphcmd0dXBsZSkuCkBAIC00NjEwLDcgKzUxNTksOCBAQAogICAgIGlmIChhcmdzID09IE5VTEwpCiAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgaWYgKCFQeVR1cGxlX0NoZWNrKGFyZ3MpKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhVbnBpY2tsaW5nRXJyb3IsICJORVdPQkogZXhwZWN0ZWQgYW4gYXJnICIgInR1cGxlLiIpOworICAgICAgICBQeUVycl9TZXRTdHJpbmcoc3QtPlVucGlja2xpbmdFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJORVdPQkogZXhwZWN0ZWQgYW4gYXJnICIgInR1cGxlLiIpOwogICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KIApAQCAtNDYxOSwxMiArNTE2OSwxMiBAQAogICAgIGlmIChjbHMgPT0gTlVMTCkKICAgICAgICAgZ290byBlcnJvcjsKICAgICBpZiAoIVB5VHlwZV9DaGVjayhjbHMpKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhVbnBpY2tsaW5nRXJyb3IsICJORVdPQkogY2xhc3MgYXJndW1lbnQgIgorICAgICAgICBQeUVycl9TZXRTdHJpbmcoc3QtPlVucGlja2xpbmdFcnJvciwgIk5FV09CSiBjbGFzcyBhcmd1bWVudCAiCiAgICAgICAgICAgICAgICAgICAgICAgICAiaXNuJ3QgYSB0eXBlIG9iamVjdCIpOwogICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KICAgICBpZiAoY2xzLT50cF9uZXcgPT0gTlVMTCkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoVW5waWNrbGluZ0Vycm9yLCAiTkVXT0JKIGNsYXNzIGFyZ3VtZW50ICIKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKHN0LT5VbnBpY2tsaW5nRXJyb3IsICJORVdPQkogY2xhc3MgYXJndW1lbnQgIgogICAgICAgICAgICAgICAgICAgICAgICAgImhhcyBOVUxMIHRwX25ldyIpOwogICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KQEAgLTQ2NDYsNiArNTE5Niw1OCBAQAogfQogCiBzdGF0aWMgaW50Citsb2FkX25ld29ial9leChVbnBpY2tsZXJPYmplY3QgKnNlbGYpCit7CisgICAgUHlPYmplY3QgKmNscywgKmFyZ3MsICprd2FyZ3M7CisgICAgUHlPYmplY3QgKm9iajsKKyAgICBQaWNrbGVTdGF0ZSAqc3QgPSBfUGlja2xlX0dldEdsb2JhbFN0YXRlKCk7CisKKyAgICBQREFUQV9QT1Aoc2VsZi0+c3RhY2ssIGt3YXJncyk7CisgICAgaWYgKGt3YXJncyA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgUERBVEFfUE9QKHNlbGYtPnN0YWNrLCBhcmdzKTsKKyAgICBpZiAoYXJncyA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRihrd2FyZ3MpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIFBEQVRBX1BPUChzZWxmLT5zdGFjaywgY2xzKTsKKyAgICBpZiAoY2xzID09IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKGt3YXJncyk7CisgICAgICAgIFB5X0RFQ1JFRihhcmdzKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGlmICghUHlUeXBlX0NoZWNrKGNscykpIHsKKyAgICAgICAgUHlfREVDUkVGKGt3YXJncyk7CisgICAgICAgIFB5X0RFQ1JFRihhcmdzKTsKKyAgICAgICAgUHlFcnJfRm9ybWF0KHN0LT5VbnBpY2tsaW5nRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAiTkVXT0JKX0VYIGNsYXNzIGFyZ3VtZW50IG11c3QgYmUgYSB0eXBlLCBub3QgJS4yMDBzIiwKKyAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUoY2xzKS0+dHBfbmFtZSk7CisgICAgICAgIFB5X0RFQ1JFRihjbHMpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKCgoUHlUeXBlT2JqZWN0ICopY2xzKS0+dHBfbmV3ID09IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKGt3YXJncyk7CisgICAgICAgIFB5X0RFQ1JFRihhcmdzKTsKKyAgICAgICAgUHlfREVDUkVGKGNscyk7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhzdC0+VW5waWNrbGluZ0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgIk5FV09CSl9FWCBjbGFzcyBhcmd1bWVudCBkb2Vzbid0IGhhdmUgX19uZXdfXyIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIG9iaiA9ICgoUHlUeXBlT2JqZWN0ICopY2xzKS0+dHBfbmV3KChQeVR5cGVPYmplY3QgKiljbHMsIGFyZ3MsIGt3YXJncyk7CisgICAgUHlfREVDUkVGKGt3YXJncyk7CisgICAgUHlfREVDUkVGKGFyZ3MpOworICAgIFB5X0RFQ1JFRihjbHMpOworICAgIGlmIChvYmogPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIFBEQVRBX1BVU0goc2VsZi0+c3RhY2ssIG9iaiwgLTEpOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CiBsb2FkX2dsb2JhbChVbnBpY2tsZXJPYmplY3QgKnNlbGYpCiB7CiAgICAgUHlPYmplY3QgKmdsb2JhbCA9IE5VTEw7CkBAIC00NjgyLDYgKzUyODQsMzIgQEAKIH0KIAogc3RhdGljIGludAorbG9hZF9zdGFja19nbG9iYWwoVW5waWNrbGVyT2JqZWN0ICpzZWxmKQoreworICAgIFB5T2JqZWN0ICpnbG9iYWw7CisgICAgUHlPYmplY3QgKm1vZHVsZV9uYW1lOworICAgIFB5T2JqZWN0ICpnbG9iYWxfbmFtZTsKKworICAgIFBEQVRBX1BPUChzZWxmLT5zdGFjaywgZ2xvYmFsX25hbWUpOworICAgIFBEQVRBX1BPUChzZWxmLT5zdGFjaywgbW9kdWxlX25hbWUpOworICAgIGlmIChtb2R1bGVfbmFtZSA9PSBOVUxMIHx8ICFQeVVuaWNvZGVfQ2hlY2tFeGFjdChtb2R1bGVfbmFtZSkgfHwKKyAgICAgICAgZ2xvYmFsX25hbWUgPT0gTlVMTCB8fCAhUHlVbmljb2RlX0NoZWNrRXhhY3QoZ2xvYmFsX25hbWUpKSB7CisgICAgICAgIFBpY2tsZVN0YXRlICpzdCA9IF9QaWNrbGVfR2V0R2xvYmFsU3RhdGUoKTsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKHN0LT5VbnBpY2tsaW5nRXJyb3IsICJTVEFDS19HTE9CQUwgcmVxdWlyZXMgc3RyIik7CisgICAgICAgIFB5X1hERUNSRUYoZ2xvYmFsX25hbWUpOworICAgICAgICBQeV9YREVDUkVGKG1vZHVsZV9uYW1lKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBnbG9iYWwgPSBmaW5kX2NsYXNzKHNlbGYsIG1vZHVsZV9uYW1lLCBnbG9iYWxfbmFtZSk7CisgICAgUHlfREVDUkVGKGdsb2JhbF9uYW1lKTsKKyAgICBQeV9ERUNSRUYobW9kdWxlX25hbWUpOworICAgIGlmIChnbG9iYWwgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIFBEQVRBX1BVU0goc2VsZi0+c3RhY2ssIGdsb2JhbCwgLTEpOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CiBsb2FkX3BlcnNpZChVbnBpY2tsZXJPYmplY3QgKnNlbGYpCiB7CiAgICAgUHlPYmplY3QgKnBpZDsKQEAgLTQ2OTgsOSArNTMyNiw5IEBACiAgICAgICAgIGlmIChwaWQgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiAtMTsKIAotICAgICAgICAvKiBVZ2guLi4gdGhpcyBkb2VzIG5vdCBsZWFrIHNpbmNlIF9VbnBpY2tsZXJfRmFzdENhbGwoKSBzdGVhbHMgdGhlCi0gICAgICAgICAgIHJlZmVyZW5jZSB0byBwaWQgZmlyc3QuICovCi0gICAgICAgIHBpZCA9IF9VbnBpY2tsZXJfRmFzdENhbGwoc2VsZiwgc2VsZi0+cGVyc19mdW5jLCBwaWQpOworICAgICAgICAvKiBUaGlzIGRvZXMgbm90IGxlYWsgc2luY2UgX1BpY2tsZV9GYXN0Q2FsbCgpIHN0ZWFscyB0aGUgcmVmZXJlbmNlCisgICAgICAgICAgIHRvIHBpZCBmaXJzdC4gKi8KKyAgICAgICAgcGlkID0gX1BpY2tsZV9GYXN0Q2FsbChzZWxmLT5wZXJzX2Z1bmMsIHBpZCk7CiAgICAgICAgIGlmIChwaWQgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiAtMTsKIApAQCAtNDcwOCw3ICs1MzM2LDggQEAKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIGVsc2UgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoVW5waWNrbGluZ0Vycm9yLAorICAgICAgICBQaWNrbGVTdGF0ZSAqc3QgPSBfUGlja2xlX0dldEdsb2JhbFN0YXRlKCk7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhzdC0+VW5waWNrbGluZ0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgIkEgbG9hZCBwZXJzaXN0ZW50IGlkIGluc3RydWN0aW9uIHdhcyBlbmNvdW50ZXJlZCxcbiIKICAgICAgICAgICAgICAgICAgICAgICAgICJidXQgbm8gcGVyc2lzdGVudF9sb2FkIGZ1bmN0aW9uIHdhcyBzcGVjaWZpZWQuIik7CiAgICAgICAgIHJldHVybiAtMTsKQEAgLTQ3MjUsOSArNTM1NCw5IEBACiAgICAgICAgIGlmIChwaWQgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiAtMTsKIAotICAgICAgICAvKiBVZ2guLi4gdGhpcyBkb2VzIG5vdCBsZWFrIHNpbmNlIF9VbnBpY2tsZXJfRmFzdENhbGwoKSBzdGVhbHMgdGhlCisgICAgICAgIC8qIFRoaXMgZG9lcyBub3QgbGVhayBzaW5jZSBfUGlja2xlX0Zhc3RDYWxsKCkgc3RlYWxzIHRoZQogICAgICAgICAgICByZWZlcmVuY2UgdG8gcGlkIGZpcnN0LiAqLwotICAgICAgICBwaWQgPSBfVW5waWNrbGVyX0Zhc3RDYWxsKHNlbGYsIHNlbGYtPnBlcnNfZnVuYywgcGlkKTsKKyAgICAgICAgcGlkID0gX1BpY2tsZV9GYXN0Q2FsbChzZWxmLT5wZXJzX2Z1bmMsIHBpZCk7CiAgICAgICAgIGlmIChwaWQgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiAtMTsKIApAQCAtNDczNSw3ICs1MzY0LDggQEAKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIGVsc2UgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoVW5waWNrbGluZ0Vycm9yLAorICAgICAgICBQaWNrbGVTdGF0ZSAqc3QgPSBfUGlja2xlX0dldEdsb2JhbFN0YXRlKCk7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhzdC0+VW5waWNrbGluZ0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgIkEgbG9hZCBwZXJzaXN0ZW50IGlkIGluc3RydWN0aW9uIHdhcyBlbmNvdW50ZXJlZCxcbiIKICAgICAgICAgICAgICAgICAgICAgICAgICJidXQgbm8gcGVyc2lzdGVudF9sb2FkIGZ1bmN0aW9uIHdhcyBzcGVjaWZpZWQuIik7CiAgICAgICAgIHJldHVybiAtMTsKQEAgLTQ4OTEsNiArNTUyMSw3IEBACiAgICAgUHlPYmplY3QgKm9iajsgICAgICAgICAgICAgIC8qIHRoZSBvYmplY3QgdG8gcHVzaCAqLwogICAgIFB5T2JqZWN0ICpwYWlyOyAgICAgICAgICAgICAvKiAobW9kdWxlX25hbWUsIGNsYXNzX25hbWUpICovCiAgICAgUHlPYmplY3QgKm1vZHVsZV9uYW1lLCAqY2xhc3NfbmFtZTsKKyAgICBQaWNrbGVTdGF0ZSAqc3QgPSBfUGlja2xlX0dldEdsb2JhbFN0YXRlKCk7CiAKICAgICBhc3NlcnQobmJ5dGVzID09IDEgfHwgbmJ5dGVzID09IDIgfHwgbmJ5dGVzID09IDQpOwogICAgIGlmIChfVW5waWNrbGVyX1JlYWQoc2VsZiwgJmNvZGVieXRlcywgbmJ5dGVzKSA8IDApCkBAIC00ODk4LDcgKzU1MjksNyBAQAogICAgIGNvZGUgPSBjYWxjX2JpbmludChjb2RlYnl0ZXMsIG5ieXRlcyk7CiAgICAgaWYgKGNvZGUgPD0gMCkgeyAgICAgICAgICAgIC8qIG5vdGUgdGhhdCAwIGlzIGZvcmJpZGRlbiAqLwogICAgICAgICAvKiBDb3JydXB0IG9yIGhvc3RpbGUgcGlja2xlLiAqLwotICAgICAgICBQeUVycl9TZXRTdHJpbmcoVW5waWNrbGluZ0Vycm9yLCAiRVhUIHNwZWNpZmllcyBjb2RlIDw9IDAiKTsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKHN0LT5VbnBpY2tsaW5nRXJyb3IsICJFWFQgc3BlY2lmaWVzIGNvZGUgPD0gMCIpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCkBAIC00OTA2LDIwICs1NTM3LDI2IEBACiAgICAgcHlfY29kZSA9IFB5TG9uZ19Gcm9tTG9uZyhjb2RlKTsKICAgICBpZiAocHlfY29kZSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gLTE7Ci0gICAgb2JqID0gUHlEaWN0X0dldEl0ZW0oZXh0ZW5zaW9uX2NhY2hlLCBweV9jb2RlKTsKKyAgICBvYmogPSBQeURpY3RfR2V0SXRlbVdpdGhFcnJvcihzdC0+ZXh0ZW5zaW9uX2NhY2hlLCBweV9jb2RlKTsKICAgICBpZiAob2JqICE9IE5VTEwpIHsKICAgICAgICAgLyogQmluZ28uICovCiAgICAgICAgIFB5X0RFQ1JFRihweV9jb2RlKTsKICAgICAgICAgUERBVEFfQVBQRU5EKHNlbGYtPnN0YWNrLCBvYmosIC0xKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQorICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgIFB5X0RFQ1JFRihweV9jb2RlKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KIAogICAgIC8qIExvb2sgdXAgdGhlIChtb2R1bGVfbmFtZSwgY2xhc3NfbmFtZSkgcGFpci4gKi8KLSAgICBwYWlyID0gUHlEaWN0X0dldEl0ZW0oaW52ZXJ0ZWRfcmVnaXN0cnksIHB5X2NvZGUpOworICAgIHBhaXIgPSBQeURpY3RfR2V0SXRlbVdpdGhFcnJvcihzdC0+aW52ZXJ0ZWRfcmVnaXN0cnksIHB5X2NvZGUpOwogICAgIGlmIChwYWlyID09IE5VTEwpIHsKICAgICAgICAgUHlfREVDUkVGKHB5X2NvZGUpOwotICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwgInVucmVnaXN0ZXJlZCBleHRlbnNpb24gIgotICAgICAgICAgICAgICAgICAgICAgImNvZGUgJWxkIiwgY29kZSk7CisgICAgICAgIGlmICghUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsICJ1bnJlZ2lzdGVyZWQgZXh0ZW5zaW9uICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiY29kZSAlbGQiLCBjb2RlKTsKKyAgICAgICAgfQogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogICAgIC8qIFNpbmNlIHRoZSBleHRlbnNpb24gcmVnaXN0cnkgaXMgbWFuaXB1bGFibGUgdmlhIFB5dGhvbiBjb2RlLApAQCAtNDk0MCw3ICs1NTc3LDcgQEAKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KICAgICAvKiBDYWNoZSBjb2RlIC0+IG9iai4gKi8KLSAgICBjb2RlID0gUHlEaWN0X1NldEl0ZW0oZXh0ZW5zaW9uX2NhY2hlLCBweV9jb2RlLCBvYmopOworICAgIGNvZGUgPSBQeURpY3RfU2V0SXRlbShzdC0+ZXh0ZW5zaW9uX2NhY2hlLCBweV9jb2RlLCBvYmopOwogICAgIFB5X0RFQ1JFRihweV9jb2RlKTsKICAgICBpZiAoY29kZSA8IDApIHsKICAgICAgICAgUHlfREVDUkVGKG9iaik7CkBAIC01MDI1LDYgKzU2NjIsMTggQEAKIH0KIAogc3RhdGljIGludAorbG9hZF9tZW1vaXplKFVucGlja2xlck9iamVjdCAqc2VsZikKK3sKKyAgICBQeU9iamVjdCAqdmFsdWU7CisKKyAgICBpZiAoUHlfU0laRShzZWxmLT5zdGFjaykgPD0gMCkKKyAgICAgICAgcmV0dXJuIHN0YWNrX3VuZGVyZmxvdygpOworICAgIHZhbHVlID0gc2VsZi0+c3RhY2stPmRhdGFbUHlfU0laRShzZWxmLT5zdGFjaykgLSAxXTsKKworICAgIHJldHVybiBfVW5waWNrbGVyX01lbW9QdXQoc2VsZiwgc2VsZi0+bWVtb19sZW4sIHZhbHVlKTsKK30KKworc3RhdGljIGludAogZG9fYXBwZW5kKFVucGlja2xlck9iamVjdCAqc2VsZiwgUHlfc3NpemVfdCB4KQogewogICAgIFB5T2JqZWN0ICp2YWx1ZTsKQEAgLTUwNjMsNyArNTcxMiw3IEBACiAgICAgICAgICAgICBQeU9iamVjdCAqcmVzdWx0OwogCiAgICAgICAgICAgICB2YWx1ZSA9IHNlbGYtPnN0YWNrLT5kYXRhW2ldOwotICAgICAgICAgICAgcmVzdWx0ID0gX1VucGlja2xlcl9GYXN0Q2FsbChzZWxmLCBhcHBlbmRfZnVuYywgdmFsdWUpOworICAgICAgICAgICAgcmVzdWx0ID0gX1BpY2tsZV9GYXN0Q2FsbChhcHBlbmRfZnVuYywgdmFsdWUpOwogICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgUGRhdGFfY2xlYXIoc2VsZi0+c3RhY2ssIGkgKyAxKTsKICAgICAgICAgICAgICAgICBQeV9TSVpFKHNlbGYtPnN0YWNrKSA9IHg7CkBAIC01MDgyLDEzICs1NzMxLDE4IEBACiBzdGF0aWMgaW50CiBsb2FkX2FwcGVuZChVbnBpY2tsZXJPYmplY3QgKnNlbGYpCiB7CisgICAgaWYgKFB5X1NJWkUoc2VsZi0+c3RhY2spIC0gMSA8PSAwKQorICAgICAgICByZXR1cm4gc3RhY2tfdW5kZXJmbG93KCk7CiAgICAgcmV0dXJuIGRvX2FwcGVuZChzZWxmLCBQeV9TSVpFKHNlbGYtPnN0YWNrKSAtIDEpOwogfQogCiBzdGF0aWMgaW50CiBsb2FkX2FwcGVuZHMoVW5waWNrbGVyT2JqZWN0ICpzZWxmKQogewotICAgIHJldHVybiBkb19hcHBlbmQoc2VsZiwgbWFya2VyKHNlbGYpKTsKKyAgICBQeV9zc2l6ZV90IGkgPSBtYXJrZXIoc2VsZik7CisgICAgaWYgKGkgPCAwKQorICAgICAgICByZXR1cm4gLTE7CisgICAgcmV0dXJuIGRvX2FwcGVuZChzZWxmLCBpKTsKIH0KIAogc3RhdGljIGludApAQCAtNTEwNSw4ICs1NzU5LDEwIEBACiAgICAgaWYgKGxlbiA9PSB4KSAgLyogbm90aGluZyB0byBkbyAqLwogICAgICAgICByZXR1cm4gMDsKICAgICBpZiAoKGxlbiAtIHgpICUgMiAhPSAwKSB7CisgICAgICAgIFBpY2tsZVN0YXRlICpzdCA9IF9QaWNrbGVfR2V0R2xvYmFsU3RhdGUoKTsKICAgICAgICAgLyogQ3VycnVwdCBvciBob3N0aWxlIHBpY2tsZSAtLSB3ZSBuZXZlciB3cml0ZSBvbmUgbGlrZSB0aGlzLiAqLwotICAgICAgICBQeUVycl9TZXRTdHJpbmcoVW5waWNrbGluZ0Vycm9yLCAib2RkIG51bWJlciBvZiBpdGVtcyBmb3IgU0VUSVRFTVMiKTsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKHN0LT5VbnBpY2tsaW5nRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAib2RkIG51bWJlciBvZiBpdGVtcyBmb3IgU0VUSVRFTVMiKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIApAQCAtNTEzNiw3ICs1NzkyLDY1IEBACiBzdGF0aWMgaW50CiBsb2FkX3NldGl0ZW1zKFVucGlja2xlck9iamVjdCAqc2VsZikKIHsKLSAgICByZXR1cm4gZG9fc2V0aXRlbXMoc2VsZiwgbWFya2VyKHNlbGYpKTsKKyAgICBQeV9zc2l6ZV90IGkgPSBtYXJrZXIoc2VsZik7CisgICAgaWYgKGkgPCAwKQorICAgICAgICByZXR1cm4gLTE7CisgICAgcmV0dXJuIGRvX3NldGl0ZW1zKHNlbGYsIGkpOworfQorCitzdGF0aWMgaW50Citsb2FkX2FkZGl0ZW1zKFVucGlja2xlck9iamVjdCAqc2VsZikKK3sKKyAgICBQeU9iamVjdCAqc2V0OworICAgIFB5X3NzaXplX3QgbWFyaywgbGVuLCBpOworCisgICAgbWFyayA9ICBtYXJrZXIoc2VsZik7CisgICAgaWYgKG1hcmsgPCAwKQorICAgICAgICByZXR1cm4gLTE7CisgICAgbGVuID0gUHlfU0laRShzZWxmLT5zdGFjayk7CisgICAgaWYgKG1hcmsgPiBsZW4gfHwgbWFyayA8PSAwKQorICAgICAgICByZXR1cm4gc3RhY2tfdW5kZXJmbG93KCk7CisgICAgaWYgKGxlbiA9PSBtYXJrKSAgLyogbm90aGluZyB0byBkbyAqLworICAgICAgICByZXR1cm4gMDsKKworICAgIHNldCA9IHNlbGYtPnN0YWNrLT5kYXRhW21hcmsgLSAxXTsKKworICAgIGlmIChQeVNldF9DaGVjayhzZXQpKSB7CisgICAgICAgIFB5T2JqZWN0ICppdGVtczsKKyAgICAgICAgaW50IHN0YXR1czsKKworICAgICAgICBpdGVtcyA9IFBkYXRhX3BvcHR1cGxlKHNlbGYtPnN0YWNrLCBtYXJrKTsKKyAgICAgICAgaWYgKGl0ZW1zID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gLTE7CisKKyAgICAgICAgc3RhdHVzID0gX1B5U2V0X1VwZGF0ZShzZXQsIGl0ZW1zKTsKKyAgICAgICAgUHlfREVDUkVGKGl0ZW1zKTsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIFB5T2JqZWN0ICphZGRfZnVuYzsKKyAgICAgICAgX1B5X0lERU5USUZJRVIoYWRkKTsKKworICAgICAgICBhZGRfZnVuYyA9IF9QeU9iamVjdF9HZXRBdHRySWQoc2V0LCAmUHlJZF9hZGQpOworICAgICAgICBpZiAoYWRkX2Z1bmMgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgZm9yIChpID0gbWFyazsgaSA8IGxlbjsgaSsrKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqcmVzdWx0OworICAgICAgICAgICAgUHlPYmplY3QgKml0ZW07CisKKyAgICAgICAgICAgIGl0ZW0gPSBzZWxmLT5zdGFjay0+ZGF0YVtpXTsKKyAgICAgICAgICAgIHJlc3VsdCA9IF9QaWNrbGVfRmFzdENhbGwoYWRkX2Z1bmMsIGl0ZW0pOworICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgUGRhdGFfY2xlYXIoc2VsZi0+c3RhY2ssIGkgKyAxKTsKKyAgICAgICAgICAgICAgICBQeV9TSVpFKHNlbGYtPnN0YWNrKSA9IG1hcms7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgICAgIH0KKyAgICAgICAgUHlfU0laRShzZWxmLT5zdGFjaykgPSBtYXJrOworICAgIH0KKworICAgIHJldHVybiAwOwogfQogCiBzdGF0aWMgaW50CkBAIC01MTcyLDkgKzU4ODYsNyBAQAogICAgICAgICBQeU9iamVjdCAqcmVzdWx0OwogCiAgICAgICAgIC8qIFRoZSBleHBsaWNpdCBfX3NldHN0YXRlX18gaXMgcmVzcG9uc2libGUgZm9yIGV2ZXJ5dGhpbmcuICovCi0gICAgICAgIC8qIFVnaC4uLiB0aGlzIGRvZXMgbm90IGxlYWsgc2luY2UgX1VucGlja2xlcl9GYXN0Q2FsbCgpIHN0ZWFscyB0aGUKLSAgICAgICAgICAgcmVmZXJlbmNlIHRvIHN0YXRlIGZpcnN0LiAqLwotICAgICAgICByZXN1bHQgPSBfVW5waWNrbGVyX0Zhc3RDYWxsKHNlbGYsIHNldHN0YXRlLCBzdGF0ZSk7CisgICAgICAgIHJlc3VsdCA9IF9QaWNrbGVfRmFzdENhbGwoc2V0c3RhdGUsIHN0YXRlKTsKICAgICAgICAgUHlfREVDUkVGKHNldHN0YXRlKTsKICAgICAgICAgaWYgKHJlc3VsdCA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIC0xOwpAQCAtNTIwNSw3ICs1OTE3LDggQEAKICAgICAgICAgX1B5X0lERU5USUZJRVIoX19kaWN0X18pOwogCiAgICAgICAgIGlmICghUHlEaWN0X0NoZWNrKHN0YXRlKSkgewotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFVucGlja2xpbmdFcnJvciwgInN0YXRlIGlzIG5vdCBhIGRpY3Rpb25hcnkiKTsKKyAgICAgICAgICAgIFBpY2tsZVN0YXRlICpzdCA9IF9QaWNrbGVfR2V0R2xvYmFsU3RhdGUoKTsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhzdC0+VW5waWNrbGluZ0Vycm9yLCAic3RhdGUgaXMgbm90IGEgZGljdGlvbmFyeSIpOwogICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgfQogICAgICAgICBkaWN0ID0gX1B5T2JqZWN0X0dldEF0dHJJZChpbnN0LCAmUHlJZF9fX2RpY3RfXyk7CkBAIC01MjM0LDcgKzU5NDcsOCBAQAogICAgICAgICBQeV9zc2l6ZV90IGk7CiAKICAgICAgICAgaWYgKCFQeURpY3RfQ2hlY2soc2xvdHN0YXRlKSkgewotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFVucGlja2xpbmdFcnJvciwKKyAgICAgICAgICAgIFBpY2tsZVN0YXRlICpzdCA9IF9QaWNrbGVfR2V0R2xvYmFsU3RhdGUoKTsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhzdC0+VW5waWNrbGluZ0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzbG90IHN0YXRlIGlzIG5vdCBhIGRpY3Rpb25hcnkiKTsKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgIH0KQEAgLTUzMzgsMTQgKzYwNTIsMzkgQEAKICAgICByZXR1cm4gLTE7CiB9CiAKK3N0YXRpYyBpbnQKK2xvYWRfZnJhbWUoVW5waWNrbGVyT2JqZWN0ICpzZWxmKQoreworICAgIGNoYXIgKnM7CisgICAgUHlfc3NpemVfdCBmcmFtZV9sZW47CisKKyAgICBpZiAoX1VucGlja2xlcl9SZWFkKHNlbGYsICZzLCA4KSA8IDApCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGZyYW1lX2xlbiA9IGNhbGNfYmluc2l6ZShzLCA4KTsKKyAgICBpZiAoZnJhbWVfbGVuIDwgMCkgeworICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfT3ZlcmZsb3dFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICJGUkFNRSBsZW5ndGggZXhjZWVkcyBzeXN0ZW0ncyBtYXhpbXVtIG9mICV6ZCBieXRlcyIsCisgICAgICAgICAgICAgICAgICAgICBQWV9TU0laRV9UX01BWCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBpZiAoX1VucGlja2xlcl9SZWFkKHNlbGYsICZzLCBmcmFtZV9sZW4pIDwgMCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgLyogUmV3aW5kIHRvIHN0YXJ0IG9mIGZyYW1lICovCisgICAgc2VsZi0+bmV4dF9yZWFkX2lkeCAtPSBmcmFtZV9sZW47CisgICAgcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBQeU9iamVjdCAqCiBsb2FkKFVucGlja2xlck9iamVjdCAqc2VsZikKIHsKLSAgICBQeU9iamVjdCAqZXJyOwogICAgIFB5T2JqZWN0ICp2YWx1ZSA9IE5VTEw7Ci0gICAgY2hhciAqczsKKyAgICBjaGFyICpzID0gTlVMTDsKIAogICAgIHNlbGYtPm51bV9tYXJrcyA9IDA7CisgICAgc2VsZi0+cHJvdG8gPSAwOwogICAgIGlmIChQeV9TSVpFKHNlbGYtPnN0YWNrKSkKICAgICAgICAgUGRhdGFfY2xlYXIoc2VsZi0+c3RhY2ssIDApOwogCkBAIC01MzcxLDEzICs2MTEwLDE2IEBACiAgICAgICAgIE9QX0FSRyhMT05HNCwgbG9hZF9jb3VudGVkX2xvbmcsIDQpCiAgICAgICAgIE9QKEZMT0FULCBsb2FkX2Zsb2F0KQogICAgICAgICBPUChCSU5GTE9BVCwgbG9hZF9iaW5mbG9hdCkKLSAgICAgICAgT1AoQklOQllURVMsIGxvYWRfYmluYnl0ZXMpCi0gICAgICAgIE9QKFNIT1JUX0JJTkJZVEVTLCBsb2FkX3Nob3J0X2JpbmJ5dGVzKQotICAgICAgICBPUChCSU5TVFJJTkcsIGxvYWRfYmluc3RyaW5nKQotICAgICAgICBPUChTSE9SVF9CSU5TVFJJTkcsIGxvYWRfc2hvcnRfYmluc3RyaW5nKQorICAgICAgICBPUF9BUkcoU0hPUlRfQklOQllURVMsIGxvYWRfY291bnRlZF9iaW5ieXRlcywgMSkKKyAgICAgICAgT1BfQVJHKEJJTkJZVEVTLCBsb2FkX2NvdW50ZWRfYmluYnl0ZXMsIDQpCisgICAgICAgIE9QX0FSRyhCSU5CWVRFUzgsIGxvYWRfY291bnRlZF9iaW5ieXRlcywgOCkKKyAgICAgICAgT1BfQVJHKFNIT1JUX0JJTlNUUklORywgbG9hZF9jb3VudGVkX2JpbnN0cmluZywgMSkKKyAgICAgICAgT1BfQVJHKEJJTlNUUklORywgbG9hZF9jb3VudGVkX2JpbnN0cmluZywgNCkKICAgICAgICAgT1AoU1RSSU5HLCBsb2FkX3N0cmluZykKICAgICAgICAgT1AoVU5JQ09ERSwgbG9hZF91bmljb2RlKQotICAgICAgICBPUChCSU5VTklDT0RFLCBsb2FkX2JpbnVuaWNvZGUpCisgICAgICAgIE9QX0FSRyhTSE9SVF9CSU5VTklDT0RFLCBsb2FkX2NvdW50ZWRfYmludW5pY29kZSwgMSkKKyAgICAgICAgT1BfQVJHKEJJTlVOSUNPREUsIGxvYWRfY291bnRlZF9iaW51bmljb2RlLCA0KQorICAgICAgICBPUF9BUkcoQklOVU5JQ09ERTgsIGxvYWRfY291bnRlZF9iaW51bmljb2RlLCA4KQogICAgICAgICBPUF9BUkcoRU1QVFlfVFVQTEUsIGxvYWRfY291bnRlZF90dXBsZSwgMCkKICAgICAgICAgT1BfQVJHKFRVUExFMSwgbG9hZF9jb3VudGVkX3R1cGxlLCAxKQogICAgICAgICBPUF9BUkcoVFVQTEUyLCBsb2FkX2NvdW50ZWRfdHVwbGUsIDIpCkBAIC01Mzg3LDEwICs2MTI5LDE1IEBACiAgICAgICAgIE9QKExJU1QsIGxvYWRfbGlzdCkKICAgICAgICAgT1AoRU1QVFlfRElDVCwgbG9hZF9lbXB0eV9kaWN0KQogICAgICAgICBPUChESUNULCBsb2FkX2RpY3QpCisgICAgICAgIE9QKEVNUFRZX1NFVCwgbG9hZF9lbXB0eV9zZXQpCisgICAgICAgIE9QKEFERElURU1TLCBsb2FkX2FkZGl0ZW1zKQorICAgICAgICBPUChGUk9aRU5TRVQsIGxvYWRfZnJvemVuc2V0KQogICAgICAgICBPUChPQkosIGxvYWRfb2JqKQogICAgICAgICBPUChJTlNULCBsb2FkX2luc3QpCiAgICAgICAgIE9QKE5FV09CSiwgbG9hZF9uZXdvYmopCisgICAgICAgIE9QKE5FV09CSl9FWCwgbG9hZF9uZXdvYmpfZXgpCiAgICAgICAgIE9QKEdMT0JBTCwgbG9hZF9nbG9iYWwpCisgICAgICAgIE9QKFNUQUNLX0dMT0JBTCwgbG9hZF9zdGFja19nbG9iYWwpCiAgICAgICAgIE9QKEFQUEVORCwgbG9hZF9hcHBlbmQpCiAgICAgICAgIE9QKEFQUEVORFMsIGxvYWRfYXBwZW5kcykKICAgICAgICAgT1AoQlVJTEQsIGxvYWRfYnVpbGQpCkBAIC01NDAyLDYgKzYxNDksNyBAQAogICAgICAgICBPUChCSU5QVVQsIGxvYWRfYmlucHV0KQogICAgICAgICBPUChMT05HX0JJTlBVVCwgbG9hZF9sb25nX2JpbnB1dCkKICAgICAgICAgT1AoUFVULCBsb2FkX3B1dCkKKyAgICAgICAgT1AoTUVNT0laRSwgbG9hZF9tZW1vaXplKQogICAgICAgICBPUChQT1AsIGxvYWRfcG9wKQogICAgICAgICBPUChQT1BfTUFSSywgbG9hZF9wb3BfbWFyaykKICAgICAgICAgT1AoU0VUSVRFTSwgbG9hZF9zZXRpdGVtKQpAQCAtNTQxMCw2ICs2MTU4LDcgQEAKICAgICAgICAgT1AoQklOUEVSU0lELCBsb2FkX2JpbnBlcnNpZCkKICAgICAgICAgT1AoUkVEVUNFLCBsb2FkX3JlZHVjZSkKICAgICAgICAgT1AoUFJPVE8sIGxvYWRfcHJvdG8pCisgICAgICAgIE9QKEZSQU1FLCBsb2FkX2ZyYW1lKQogICAgICAgICBPUF9BUkcoRVhUMSwgbG9hZF9leHRlbnNpb24sIDEpCiAgICAgICAgIE9QX0FSRyhFWFQyLCBsb2FkX2V4dGVuc2lvbiwgMikKICAgICAgICAgT1BfQVJHKEVYVDQsIGxvYWRfZXh0ZW5zaW9uLCA0KQpAQCAtNTQyMCw4MSArNjE2OSw5MyBAQAogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGlmIChzWzBdID09ICdcMCcpCisgICAgICAgICAgICBpZiAoc1swXSA9PSAnXDAnKSB7CiAgICAgICAgICAgICAgICAgUHlFcnJfU2V0Tm9uZShQeUV4Y19FT0ZFcnJvcik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFVucGlja2xpbmdFcnJvciwKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIFBpY2tsZVN0YXRlICpzdCA9IF9QaWNrbGVfR2V0R2xvYmFsU3RhdGUoKTsKKyAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoc3QtPlVucGlja2xpbmdFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImludmFsaWQgbG9hZCBrZXksICclYycuIiwgc1swXSk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQogCiAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgIC8qIGFuZCB3ZSBhcmUgZG9uZSEgKi8KICAgICB9CiAKLSAgICBpZiAoX1VucGlja2xlcl9Ta2lwQ29uc3VtZWQoc2VsZikgPCAwKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIC8qIFhYWDogSXQgaXMgbm90IGNsZWFyIHdoYXQgdGhpcyBpcyBhY3R1YWxseSBmb3IuICovCi0gICAgaWYgKChlcnIgPSBQeUVycl9PY2N1cnJlZCgpKSkgewotICAgICAgICBpZiAoZXJyID09IFB5RXhjX0VPRkVycm9yKSB7Ci0gICAgICAgICAgICBQeUVycl9TZXROb25lKFB5RXhjX0VPRkVycm9yKTsKLSAgICAgICAgfQorICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAorICAgIGlmIChfVW5waWNrbGVyX1NraXBDb25zdW1lZChzZWxmKSA8IDApCisgICAgICAgIHJldHVybiBOVUxMOworCiAgICAgUERBVEFfUE9QKHNlbGYtPnN0YWNrLCB2YWx1ZSk7CiAgICAgcmV0dXJuIHZhbHVlOwogfQogCi1QeURvY19TVFJWQVIoVW5waWNrbGVyX2xvYWRfZG9jLAotImxvYWQoKSAtPiBvYmplY3QuIExvYWQgYSBwaWNrbGUuIgotIlxuIgotIlJlYWQgYSBwaWNrbGVkIG9iamVjdCByZXByZXNlbnRhdGlvbiBmcm9tIHRoZSBvcGVuIGZpbGUgb2JqZWN0IGdpdmVuIGluXG4iCi0idGhlIGNvbnN0cnVjdG9yLCBhbmQgcmV0dXJuIHRoZSByZWNvbnN0aXR1dGVkIG9iamVjdCBoaWVyYXJjaHkgc3BlY2lmaWVkXG4iCi0idGhlcmVpbi5cbiIpOworLypbY2xpbmljIGlucHV0XQorCitfcGlja2xlLlVucGlja2xlci5sb2FkCisKK0xvYWQgYSBwaWNrbGUuCisKK1JlYWQgYSBwaWNrbGVkIG9iamVjdCByZXByZXNlbnRhdGlvbiBmcm9tIHRoZSBvcGVuIGZpbGUgb2JqZWN0IGdpdmVuCitpbiB0aGUgY29uc3RydWN0b3IsIGFuZCByZXR1cm4gdGhlIHJlY29uc3RpdHV0ZWQgb2JqZWN0IGhpZXJhcmNoeQorc3BlY2lmaWVkIHRoZXJlaW4uCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1VbnBpY2tsZXJfbG9hZChVbnBpY2tsZXJPYmplY3QgKnNlbGYpCitfcGlja2xlX1VucGlja2xlcl9sb2FkX2ltcGwoVW5waWNrbGVyT2JqZWN0ICpzZWxmKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWZkY2M0ODhhYWQ2NzViMTQgaW5wdXQ9YWNiYjkxYTQyZmE5YjdiOV0qLwogeworICAgIFVucGlja2xlck9iamVjdCAqdW5waWNrbGVyID0gKFVucGlja2xlck9iamVjdCopc2VsZjsKKwogICAgIC8qIENoZWNrIHdoZXRoZXIgdGhlIFVucGlja2xlciB3YXMgaW5pdGlhbGl6ZWQgY29ycmVjdGx5LiBUaGlzIHByZXZlbnRzCiAgICAgICAgc2VnZmF1bHRpbmcgaWYgYSBzdWJjbGFzcyBvdmVycmlkZGVuIF9faW5pdF9fIHdpdGggYSBmdW5jdGlvbiB0aGF0IGRvZXMKICAgICAgICBub3QgY2FsbCBVbnBpY2tsZXIuX19pbml0X18oKS4gSGVyZSwgd2Ugc2ltcGx5IGVuc3VyZSB0aGF0IHNlbGYtPnJlYWQKICAgICAgICBpcyBub3QgTlVMTC4gKi8KLSAgICBpZiAoc2VsZi0+cmVhZCA9PSBOVUxMKSB7Ci0gICAgICAgIFB5RXJyX0Zvcm1hdChVbnBpY2tsaW5nRXJyb3IsCisgICAgaWYgKHVucGlja2xlci0+cmVhZCA9PSBOVUxMKSB7CisgICAgICAgIFBpY2tsZVN0YXRlICpzdCA9IF9QaWNrbGVfR2V0R2xvYmFsU3RhdGUoKTsKKyAgICAgICAgUHlFcnJfRm9ybWF0KHN0LT5VbnBpY2tsaW5nRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAiVW5waWNrbGVyLl9faW5pdF9fKCkgd2FzIG5vdCBjYWxsZWQgYnkgJXMuX19pbml0X18oKSIsCi0gICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKHNlbGYpLT50cF9uYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUodW5waWNrbGVyKS0+dHBfbmFtZSk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIHJldHVybiBsb2FkKHNlbGYpOworICAgIHJldHVybiBsb2FkKHVucGlja2xlcik7CiB9CiAKIC8qIFRoZSBuYW1lIG9mIGZpbmRfY2xhc3MoKSBpcyBtaXNsZWFkaW5nLiBJbiBuZXdlciBwaWNrbGUgcHJvdG9jb2xzLCB0aGlzCiAgICBmdW5jdGlvbiBpcyB1c2VkIGZvciBsb2FkaW5nIGFueSBnbG9iYWwgKGkuZS4sIGZ1bmN0aW9ucyksIG5vdCBqdXN0CiAgICBjbGFzc2VzLiBUaGUgbmFtZSBpcyBrZXB0IG9ubHkgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuICovCiAKLVB5RG9jX1NUUlZBUihVbnBpY2tsZXJfZmluZF9jbGFzc19kb2MsCi0iZmluZF9jbGFzcyhtb2R1bGVfbmFtZSwgZ2xvYmFsX25hbWUpIC0+IG9iamVjdC5cbiIKLSJcbiIKLSJSZXR1cm4gYW4gb2JqZWN0IGZyb20gYSBzcGVjaWZpZWQgbW9kdWxlLCBpbXBvcnRpbmcgdGhlIG1vZHVsZSBpZlxuIgotIm5lY2Vzc2FyeS4gIFN1YmNsYXNzZXMgbWF5IG92ZXJyaWRlIHRoaXMgbWV0aG9kIChlLmcuIHRvIHJlc3RyaWN0XG4iCi0idW5waWNrbGluZyBvZiBhcmJpdHJhcnkgY2xhc3NlcyBhbmQgZnVuY3Rpb25zKS5cbiIKLSJcbiIKLSJUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbmV2ZXIgYSBjbGFzcyBvciBhIGZ1bmN0aW9uIG9iamVjdCBpc1xuIgotIm5lZWRlZC4gIEJvdGggYXJndW1lbnRzIHBhc3NlZCBhcmUgc3RyIG9iamVjdHMuXG4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KKworX3BpY2tsZS5VbnBpY2tsZXIuZmluZF9jbGFzcworCisgIG1vZHVsZV9uYW1lOiBvYmplY3QKKyAgZ2xvYmFsX25hbWU6IG9iamVjdAorICAvCisKK1JldHVybiBhbiBvYmplY3QgZnJvbSBhIHNwZWNpZmllZCBtb2R1bGUuCisKK0lmIG5lY2Vzc2FyeSwgdGhlIG1vZHVsZSB3aWxsIGJlIGltcG9ydGVkLiBTdWJjbGFzc2VzIG1heSBvdmVycmlkZQordGhpcyBtZXRob2QgKGUuZy4gdG8gcmVzdHJpY3QgdW5waWNrbGluZyBvZiBhcmJpdHJhcnkgY2xhc3NlcyBhbmQKK2Z1bmN0aW9ucykuCisKK1RoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuZXZlciBhIGNsYXNzIG9yIGEgZnVuY3Rpb24gb2JqZWN0IGlzCituZWVkZWQuICBCb3RoIGFyZ3VtZW50cyBwYXNzZWQgYXJlIHN0ciBvYmplY3RzLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotVW5waWNrbGVyX2ZpbmRfY2xhc3MoVW5waWNrbGVyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK19waWNrbGVfVW5waWNrbGVyX2ZpbmRfY2xhc3NfaW1wbChVbnBpY2tsZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICptb2R1bGVfbmFtZSwgUHlPYmplY3QgKmdsb2JhbF9uYW1lKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTY0Yzc3NDM3ZTA4OGUxODggaW5wdXQ9ZTJlNmE4NjVkZTA5M2VmNF0qLwogewogICAgIFB5T2JqZWN0ICpnbG9iYWw7CiAgICAgUHlPYmplY3QgKm1vZHVsZXNfZGljdDsKICAgICBQeU9iamVjdCAqbW9kdWxlOwotICAgIFB5T2JqZWN0ICptb2R1bGVfbmFtZSwgKmdsb2JhbF9uYW1lOwotCi0gICAgaWYgKCFQeUFyZ19VbnBhY2tUdXBsZShhcmdzLCAiZmluZF9jbGFzcyIsIDIsIDIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAmbW9kdWxlX25hbWUsICZnbG9iYWxfbmFtZSkpCi0gICAgICAgIHJldHVybiBOVUxMOworICAgIF9QeV9JREVOVElGSUVSKG1vZHVsZXMpOwogCiAgICAgLyogVHJ5IHRvIG1hcCB0aGUgb2xkIG5hbWVzIHVzZWQgaW4gUHl0aG9uIDIueCB0byB0aGUgbmV3IG9uZXMgdXNlZCBpbgogICAgICAgIFB5dGhvbiAzLnguICBXZSBkbyB0aGlzIG9ubHkgd2l0aCBvbGQgcGlja2xlIHByb3RvY29scyBhbmQgd2hlbiB0aGUKQEAgLTU1MDIsMTMgKzYyNjMsMTQgQEAKICAgICBpZiAoc2VsZi0+cHJvdG8gPCAzICYmIHNlbGYtPmZpeF9pbXBvcnRzKSB7CiAgICAgICAgIFB5T2JqZWN0ICprZXk7CiAgICAgICAgIFB5T2JqZWN0ICppdGVtOworICAgICAgICBQaWNrbGVTdGF0ZSAqc3QgPSBfUGlja2xlX0dldEdsb2JhbFN0YXRlKCk7CiAKICAgICAgICAgLyogQ2hlY2sgaWYgdGhlIGdsb2JhbCAoaS5lLiwgYSBmdW5jdGlvbiBvciBhIGNsYXNzKSB3YXMgcmVuYW1lZAogICAgICAgICAgICBvciBtb3ZlZCB0byBhbm90aGVyIG1vZHVsZS4gKi8KICAgICAgICAga2V5ID0gUHlUdXBsZV9QYWNrKDIsIG1vZHVsZV9uYW1lLCBnbG9iYWxfbmFtZSk7CiAgICAgICAgIGlmIChrZXkgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICBpdGVtID0gUHlEaWN0X0dldEl0ZW1XaXRoRXJyb3IobmFtZV9tYXBwaW5nXzJ0bzMsIGtleSk7CisgICAgICAgIGl0ZW0gPSBQeURpY3RfR2V0SXRlbVdpdGhFcnJvcihzdC0+bmFtZV9tYXBwaW5nXzJ0bzMsIGtleSk7CiAgICAgICAgIFB5X0RFQ1JFRihrZXkpOwogICAgICAgICBpZiAoaXRlbSkgewogICAgICAgICAgICAgaWYgKCFQeVR1cGxlX0NoZWNrKGl0ZW0pIHx8IFB5VHVwbGVfR0VUX1NJWkUoaXRlbSkgIT0gMikgewpAQCAtNTUzMiwyNiArNjI5NCwyOSBAQAogICAgICAgICBlbHNlIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQotCi0gICAgICAgIC8qIENoZWNrIGlmIHRoZSBtb2R1bGUgd2FzIHJlbmFtZWQuICovCi0gICAgICAgIGl0ZW0gPSBQeURpY3RfR2V0SXRlbVdpdGhFcnJvcihpbXBvcnRfbWFwcGluZ18ydG8zLCBtb2R1bGVfbmFtZSk7Ci0gICAgICAgIGlmIChpdGVtKSB7Ci0gICAgICAgICAgICBpZiAoIVB5VW5pY29kZV9DaGVjayhpdGVtKSkgewotICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19SdW50aW1lRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJfY29tcGF0X3BpY2tsZS5JTVBPUlRfTUFQUElORyB2YWx1ZXMgc2hvdWxkIGJlICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN0cmluZ3MsIG5vdCAlLjIwMHMiLCBQeV9UWVBFKGl0ZW0pLT50cF9uYW1lKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvKiBDaGVjayBpZiB0aGUgbW9kdWxlIHdhcyByZW5hbWVkLiAqLworICAgICAgICAgICAgaXRlbSA9IFB5RGljdF9HZXRJdGVtV2l0aEVycm9yKHN0LT5pbXBvcnRfbWFwcGluZ18ydG8zLCBtb2R1bGVfbmFtZSk7CisgICAgICAgICAgICBpZiAoaXRlbSkgeworICAgICAgICAgICAgICAgIGlmICghUHlVbmljb2RlX0NoZWNrKGl0ZW0pKSB7CisgICAgICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19SdW50aW1lRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJfY29tcGF0X3BpY2tsZS5JTVBPUlRfTUFQUElORyB2YWx1ZXMgc2hvdWxkIGJlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN0cmluZ3MsIG5vdCAlLjIwMHMiLCBQeV9UWVBFKGl0ZW0pLT50cF9uYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1vZHVsZV9uYW1lID0gaXRlbTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1vZHVsZV9uYW1lID0gaXRlbTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQogICAgIH0KIAotICAgIG1vZHVsZXNfZGljdCA9IFB5U3lzX0dldE9iamVjdCgibW9kdWxlcyIpOwotICAgIGlmIChtb2R1bGVzX2RpY3QgPT0gTlVMTCkKKyAgICBtb2R1bGVzX2RpY3QgPSBfUHlTeXNfR2V0T2JqZWN0SWQoJlB5SWRfbW9kdWxlcyk7CisgICAgaWYgKG1vZHVsZXNfZGljdCA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsICJ1bmFibGUgdG8gZ2V0IHN5cy5tb2R1bGVzIik7CiAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAogICAgIG1vZHVsZSA9IFB5RGljdF9HZXRJdGVtV2l0aEVycm9yKG1vZHVsZXNfZGljdCwgbW9kdWxlX25hbWUpOwogICAgIGlmIChtb2R1bGUgPT0gTlVMTCkgewpAQCAtNTU2MCwyMCArNjMyNSw0NiBAQAogICAgICAgICBtb2R1bGUgPSBQeUltcG9ydF9JbXBvcnQobW9kdWxlX25hbWUpOwogICAgICAgICBpZiAobW9kdWxlID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgZ2xvYmFsID0gUHlPYmplY3RfR2V0QXR0cihtb2R1bGUsIGdsb2JhbF9uYW1lKTsKKyAgICAgICAgZ2xvYmFsID0gZ2V0YXR0cmlidXRlKG1vZHVsZSwgZ2xvYmFsX25hbWUsIHNlbGYtPnByb3RvID49IDQpOwogICAgICAgICBQeV9ERUNSRUYobW9kdWxlKTsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIGdsb2JhbCA9IFB5T2JqZWN0X0dldEF0dHIobW9kdWxlLCBnbG9iYWxfbmFtZSk7CisgICAgICAgIGdsb2JhbCA9IGdldGF0dHJpYnV0ZShtb2R1bGUsIGdsb2JhbF9uYW1lLCBzZWxmLT5wcm90byA+PSA0KTsKICAgICB9CiAgICAgcmV0dXJuIGdsb2JhbDsKIH0KIAorLypbY2xpbmljIGlucHV0XQorCitfcGlja2xlLlVucGlja2xlci5fX3NpemVvZl9fIC0+IFB5X3NzaXplX3QKKworUmV0dXJucyBzaXplIGluIG1lbW9yeSwgaW4gYnl0ZXMuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK3N0YXRpYyBQeV9zc2l6ZV90CitfcGlja2xlX1VucGlja2xlcl9fX3NpemVvZl9fX2ltcGwoVW5waWNrbGVyT2JqZWN0ICpzZWxmKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTExOWQ5ZDAzYWQ0Yzc2NTEgaW5wdXQ9MTMzMzM0NzFmZGVlZGY1ZV0qLworeworICAgIFB5X3NzaXplX3QgcmVzOworCisgICAgcmVzID0gc2l6ZW9mKFVucGlja2xlck9iamVjdCk7CisgICAgaWYgKHNlbGYtPm1lbW8gIT0gTlVMTCkKKyAgICAgICAgcmVzICs9IHNlbGYtPm1lbW9fc2l6ZSAqIHNpemVvZihQeU9iamVjdCAqKTsKKyAgICBpZiAoc2VsZi0+bWFya3MgIT0gTlVMTCkKKyAgICAgICAgcmVzICs9IHNlbGYtPm1hcmtzX3NpemUgKiBzaXplb2YoUHlfc3NpemVfdCk7CisgICAgaWYgKHNlbGYtPmlucHV0X2xpbmUgIT0gTlVMTCkKKyAgICAgICAgcmVzICs9IHN0cmxlbihzZWxmLT5pbnB1dF9saW5lKSArIDE7CisgICAgaWYgKHNlbGYtPmVuY29kaW5nICE9IE5VTEwpCisgICAgICAgIHJlcyArPSBzdHJsZW4oc2VsZi0+ZW5jb2RpbmcpICsgMTsKKyAgICBpZiAoc2VsZi0+ZXJyb3JzICE9IE5VTEwpCisgICAgICAgIHJlcyArPSBzdHJsZW4oc2VsZi0+ZXJyb3JzKSArIDE7CisgICAgcmV0dXJuIHJlczsKK30KKwogc3RhdGljIHN0cnVjdCBQeU1ldGhvZERlZiBVbnBpY2tsZXJfbWV0aG9kc1tdID0gewotICAgIHsibG9hZCIsIChQeUNGdW5jdGlvbilVbnBpY2tsZXJfbG9hZCwgTUVUSF9OT0FSR1MsCi0gICAgIFVucGlja2xlcl9sb2FkX2RvY30sCi0gICAgeyJmaW5kX2NsYXNzIiwgKFB5Q0Z1bmN0aW9uKVVucGlja2xlcl9maW5kX2NsYXNzLCBNRVRIX1ZBUkFSR1MsCi0gICAgIFVucGlja2xlcl9maW5kX2NsYXNzX2RvY30sCisgICAgX1BJQ0tMRV9VTlBJQ0tMRVJfTE9BRF9NRVRIT0RERUYKKyAgICBfUElDS0xFX1VOUElDS0xFUl9GSU5EX0NMQVNTX01FVEhPRERFRgorICAgIF9QSUNLTEVfVU5QSUNLTEVSX19fU0laRU9GX19fTUVUSE9EREVGCiAgICAge05VTEwsIE5VTEx9ICAgICAgICAgICAgICAgIC8qIHNlbnRpbmVsICovCiB9OwogCkBAIC01NTg2LDcgKzYzNzcsNiBAQAogICAgIFB5X1hERUNSRUYoc2VsZi0+cGVlayk7CiAgICAgUHlfWERFQ1JFRihzZWxmLT5zdGFjayk7CiAgICAgUHlfWERFQ1JFRihzZWxmLT5wZXJzX2Z1bmMpOwotICAgIFB5X1hERUNSRUYoc2VsZi0+YXJnKTsKICAgICBpZiAoc2VsZi0+YnVmZmVyLmJ1ZiAhPSBOVUxMKSB7CiAgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnNlbGYtPmJ1ZmZlcik7CiAgICAgICAgIHNlbGYtPmJ1ZmZlci5idWYgPSBOVUxMOwpAQCAtNTU5NSw4ICs2Mzg1LDggQEAKICAgICBfVW5waWNrbGVyX01lbW9DbGVhbnVwKHNlbGYpOwogICAgIFB5TWVtX0ZyZWUoc2VsZi0+bWFya3MpOwogICAgIFB5TWVtX0ZyZWUoc2VsZi0+aW5wdXRfbGluZSk7Ci0gICAgZnJlZShzZWxmLT5lbmNvZGluZyk7Ci0gICAgZnJlZShzZWxmLT5lcnJvcnMpOworICAgIFB5TWVtX0ZyZWUoc2VsZi0+ZW5jb2RpbmcpOworICAgIFB5TWVtX0ZyZWUoc2VsZi0+ZXJyb3JzKTsKIAogICAgIFB5X1RZUEUoc2VsZiktPnRwX2ZyZWUoKFB5T2JqZWN0ICopc2VsZik7CiB9CkBAIC01NjA5LDcgKzYzOTksNiBAQAogICAgIFB5X1ZJU0lUKHNlbGYtPnBlZWspOwogICAgIFB5X1ZJU0lUKHNlbGYtPnN0YWNrKTsKICAgICBQeV9WSVNJVChzZWxmLT5wZXJzX2Z1bmMpOwotICAgIFB5X1ZJU0lUKHNlbGYtPmFyZyk7CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTU2MjEsNyArNjQxMCw2IEBACiAgICAgUHlfQ0xFQVIoc2VsZi0+cGVlayk7CiAgICAgUHlfQ0xFQVIoc2VsZi0+c3RhY2spOwogICAgIFB5X0NMRUFSKHNlbGYtPnBlcnNfZnVuYyk7Ci0gICAgUHlfQ0xFQVIoc2VsZi0+YXJnKTsKICAgICBpZiAoc2VsZi0+YnVmZmVyLmJ1ZiAhPSBOVUxMKSB7CiAgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnNlbGYtPmJ1ZmZlcik7CiAgICAgICAgIHNlbGYtPmJ1ZmZlci5idWYgPSBOVUxMOwpAQCAtNTYzMiw2NiArNjQyMCw1MiBAQAogICAgIHNlbGYtPm1hcmtzID0gTlVMTDsKICAgICBQeU1lbV9GcmVlKHNlbGYtPmlucHV0X2xpbmUpOwogICAgIHNlbGYtPmlucHV0X2xpbmUgPSBOVUxMOwotICAgIGZyZWUoc2VsZi0+ZW5jb2RpbmcpOworICAgIFB5TWVtX0ZyZWUoc2VsZi0+ZW5jb2RpbmcpOwogICAgIHNlbGYtPmVuY29kaW5nID0gTlVMTDsKLSAgICBmcmVlKHNlbGYtPmVycm9ycyk7CisgICAgUHlNZW1fRnJlZShzZWxmLT5lcnJvcnMpOwogICAgIHNlbGYtPmVycm9ycyA9IE5VTEw7CiAKICAgICByZXR1cm4gMDsKIH0KIAotUHlEb2NfU1RSVkFSKFVucGlja2xlcl9kb2MsCi0iVW5waWNrbGVyKGZpbGUsICosIGVuY29kaW5nPSdBU0NJSScsIGVycm9ycz0nc3RyaWN0JykiCi0iXG4iCi0iVGhpcyB0YWtlcyBhIGJpbmFyeSBmaWxlIGZvciByZWFkaW5nIGEgcGlja2xlIGRhdGEgc3RyZWFtLlxuIgotIlxuIgotIlRoZSBwcm90b2NvbCB2ZXJzaW9uIG9mIHRoZSBwaWNrbGUgaXMgZGV0ZWN0ZWQgYXV0b21hdGljYWxseSwgc28gbm9cbiIKLSJwcm90byBhcmd1bWVudCBpcyBuZWVkZWQuXG4iCi0iXG4iCi0iVGhlIGZpbGUtbGlrZSBvYmplY3QgbXVzdCBoYXZlIHR3byBtZXRob2RzLCBhIHJlYWQoKSBtZXRob2RcbiIKLSJ0aGF0IHRha2VzIGFuIGludGVnZXIgYXJndW1lbnQsIGFuZCBhIHJlYWRsaW5lKCkgbWV0aG9kIHRoYXRcbiIKLSJyZXF1aXJlcyBubyBhcmd1bWVudHMuICBCb3RoIG1ldGhvZHMgc2hvdWxkIHJldHVybiBieXRlcy5cbiIKLSJUaHVzIGZpbGUtbGlrZSBvYmplY3QgY2FuIGJlIGEgYmluYXJ5IGZpbGUgb2JqZWN0IG9wZW5lZCBmb3JcbiIKLSJyZWFkaW5nLCBhIEJ5dGVzSU8gb2JqZWN0LCBvciBhbnkgb3RoZXIgY3VzdG9tIG9iamVjdCB0aGF0XG4iCi0ibWVldHMgdGhpcyBpbnRlcmZhY2UuXG4iCi0iXG4iCi0iT3B0aW9uYWwga2V5d29yZCBhcmd1bWVudHMgYXJlICpmaXhfaW1wb3J0cyosICplbmNvZGluZyogYW5kICplcnJvcnMqLFxuIgotIndoaWNoIGFyZSB1c2VkIHRvIGNvbnRyb2wgY29tcGF0aWJsaXR5IHN1cHBvcnQgZm9yIHBpY2tsZSBzdHJlYW1cbiIKLSJnZW5lcmF0ZWQgYnkgUHl0aG9uIDIueC4gIElmICpmaXhfaW1wb3J0cyogaXMgVHJ1ZSwgcGlja2xlIHdpbGwgdHJ5IHRvXG4iCi0ibWFwIHRoZSBvbGQgUHl0aG9uIDIueCBuYW1lcyB0byB0aGUgbmV3IG5hbWVzIHVzZWQgaW4gUHl0aG9uIDMueC4gIFRoZVxuIgotIiplbmNvZGluZyogYW5kICplcnJvcnMqIHRlbGwgcGlja2xlIGhvdyB0byBkZWNvZGUgOC1iaXQgc3RyaW5nXG4iCi0iaW5zdGFuY2VzIHBpY2tsZWQgYnkgUHl0aG9uIDIueDsgdGhlc2UgZGVmYXVsdCB0byAnQVNDSUknIGFuZFxuIgotIidzdHJpY3QnLCByZXNwZWN0aXZlbHkuXG4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KKworX3BpY2tsZS5VbnBpY2tsZXIuX19pbml0X18KKworICBmaWxlOiBvYmplY3QKKyAgKgorICBmaXhfaW1wb3J0czogYm9vbCA9IFRydWUKKyAgZW5jb2Rpbmc6IHN0ciA9ICdBU0NJSScKKyAgZXJyb3JzOiBzdHIgPSAnc3RyaWN0JworCitUaGlzIHRha2VzIGEgYmluYXJ5IGZpbGUgZm9yIHJlYWRpbmcgYSBwaWNrbGUgZGF0YSBzdHJlYW0uCisKK1RoZSBwcm90b2NvbCB2ZXJzaW9uIG9mIHRoZSBwaWNrbGUgaXMgZGV0ZWN0ZWQgYXV0b21hdGljYWxseSwgc28gbm8KK3Byb3RvY29sIGFyZ3VtZW50IGlzIG5lZWRlZC4gIEJ5dGVzIHBhc3QgdGhlIHBpY2tsZWQgb2JqZWN0J3MKK3JlcHJlc2VudGF0aW9uIGFyZSBpZ25vcmVkLgorCitUaGUgYXJndW1lbnQgKmZpbGUqIG11c3QgaGF2ZSB0d28gbWV0aG9kcywgYSByZWFkKCkgbWV0aG9kIHRoYXQgdGFrZXMKK2FuIGludGVnZXIgYXJndW1lbnQsIGFuZCBhIHJlYWRsaW5lKCkgbWV0aG9kIHRoYXQgcmVxdWlyZXMgbm8KK2FyZ3VtZW50cy4gIEJvdGggbWV0aG9kcyBzaG91bGQgcmV0dXJuIGJ5dGVzLiAgVGh1cyAqZmlsZSogY2FuIGJlIGEKK2JpbmFyeSBmaWxlIG9iamVjdCBvcGVuZWQgZm9yIHJlYWRpbmcsIGFuIGlvLkJ5dGVzSU8gb2JqZWN0LCBvciBhbnkKK290aGVyIGN1c3RvbSBvYmplY3QgdGhhdCBtZWV0cyB0aGlzIGludGVyZmFjZS4KKworT3B0aW9uYWwga2V5d29yZCBhcmd1bWVudHMgYXJlICpmaXhfaW1wb3J0cyosICplbmNvZGluZyogYW5kICplcnJvcnMqLAord2hpY2ggYXJlIHVzZWQgdG8gY29udHJvbCBjb21wYXRpYmxpdHkgc3VwcG9ydCBmb3IgcGlja2xlIHN0cmVhbQorZ2VuZXJhdGVkIGJ5IFB5dGhvbiAyLiAgSWYgKmZpeF9pbXBvcnRzKiBpcyBUcnVlLCBwaWNrbGUgd2lsbCB0cnkgdG8KK21hcCB0aGUgb2xkIFB5dGhvbiAyIG5hbWVzIHRvIHRoZSBuZXcgbmFtZXMgdXNlZCBpbiBQeXRob24gMy4gIFRoZQorKmVuY29kaW5nKiBhbmQgKmVycm9ycyogdGVsbCBwaWNrbGUgaG93IHRvIGRlY29kZSA4LWJpdCBzdHJpbmcKK2luc3RhbmNlcyBwaWNrbGVkIGJ5IFB5dGhvbiAyOyB0aGVzZSBkZWZhdWx0IHRvICdBU0NJSScgYW5kICdzdHJpY3QnLAorcmVzcGVjdGl2ZWx5LiAgVGhlICplbmNvZGluZyogY2FuIGJlICdieXRlcycgdG8gcmVhZCB0aGVzZSA4LWJpdAorc3RyaW5nIGluc3RhbmNlcyBhcyBieXRlcyBvYmplY3RzLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgaW50Ci1VbnBpY2tsZXJfaW5pdChVbnBpY2tsZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKK19waWNrbGVfVW5waWNrbGVyX19faW5pdF9fX2ltcGwoVW5waWNrbGVyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqZmlsZSwgaW50IGZpeF9pbXBvcnRzLCBjb25zdCBjaGFyICplbmNvZGluZywgY29uc3QgY2hhciAqZXJyb3JzKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWI5ZWQxZDg0ZDMxNWYzYjUgaW5wdXQ9MDRlY2U2NjFhYTg4NDgzN10qLwogewotICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsiZmlsZSIsICJmaXhfaW1wb3J0cyIsICJlbmNvZGluZyIsICJlcnJvcnMiLCAwfTsKLSAgICBQeU9iamVjdCAqZmlsZTsKLSAgICBQeU9iamVjdCAqZml4X2ltcG9ydHMgPSBQeV9UcnVlOwotICAgIGNoYXIgKmVuY29kaW5nID0gTlVMTDsKLSAgICBjaGFyICplcnJvcnMgPSBOVUxMOwogICAgIF9QeV9JREVOVElGSUVSKHBlcnNpc3RlbnRfbG9hZCk7CiAKLSAgICAvKiBYWFg6IFRoYXQgaXMgYW4gaG9ycmlibGUgZXJyb3IgbWVzc2FnZS4gQnV0LCBJIGRvbid0IGtub3cgaG93IHRvIGRvCi0gICAgICAgYmV0dGVyLi4uICovCi0gICAgaWYgKFB5X1NJWkUoYXJncykgIT0gMSkgewotICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgIiVzIHRha2VzIGV4YWN0bHkgb25lIHBvc2l0aW9uYWwgYXJndW1lbnQgKCV6ZCBnaXZlbikiLAotICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRShzZWxmKS0+dHBfbmFtZSwgUHlfU0laRShhcmdzKSk7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0KLSAgICAvKiBBcmd1bWVudHMgcGFyc2luZyBuZWVkcyB0byBiZSBkb25lIGluIHRoZSBfX2luaXRfXygpIG1ldGhvZCB0byBhbGxvdwotICAgICAgIHN1YmNsYXNzZXMgdG8gZGVmaW5lIHRoZWlyIG93biBfX2luaXRfXygpIG1ldGhvZCwgd2hpY2ggbWF5IChvciBtYXkKLSAgICAgICBub3QpIHN1cHBvcnQgVW5waWNrbGVyIGFyZ3VtZW50cy4gSG93ZXZlciwgdGhpcyBtZWFucyB3ZSBuZWVkIHRvIGJlCi0gICAgICAgZXh0cmEgY2FyZWZ1bCBpbiB0aGUgb3RoZXIgVW5waWNrbGVyIG1ldGhvZHMsIHNpbmNlIGEgc3ViY2xhc3MgY291bGQKLSAgICAgICBmb3JnZXQgdG8gY2FsbCBVbnBpY2tsZXIuX19pbml0X18oKSB0aHVzIGJyZWFraW5nIG91ciBpbnRlcm5hbAotICAgICAgIGludmFyaWFudHMuICovCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgIk98T3NzOlVucGlja2xlciIsIGt3bGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZmlsZSwgJmZpeF9pbXBvcnRzLCAmZW5jb2RpbmcsICZlcnJvcnMpKQotICAgICAgICByZXR1cm4gLTE7Ci0KICAgICAvKiBJbiBjYXNlIG9mIG11bHRpcGxlIF9faW5pdF9fKCkgY2FsbHMsIGNsZWFyIHByZXZpb3VzIGNvbnRlbnQuICovCiAgICAgaWYgKHNlbGYtPnJlYWQgIT0gTlVMTCkKICAgICAgICAgKHZvaWQpVW5waWNrbGVyX2NsZWFyKHNlbGYpOwpAQCAtNTcwMiw3ICs2NDc2LDcgQEAKICAgICBpZiAoX1VucGlja2xlcl9TZXRJbnB1dEVuY29kaW5nKHNlbGYsIGVuY29kaW5nLCBlcnJvcnMpIDwgMCkKICAgICAgICAgcmV0dXJuIC0xOwogCi0gICAgc2VsZi0+Zml4X2ltcG9ydHMgPSBQeU9iamVjdF9Jc1RydWUoZml4X2ltcG9ydHMpOworICAgIHNlbGYtPmZpeF9pbXBvcnRzID0gZml4X2ltcG9ydHM7CiAgICAgaWYgKHNlbGYtPmZpeF9pbXBvcnRzID09IC0xKQogICAgICAgICByZXR1cm4gLTE7CiAKQEAgLTU3MTAsNyArNjQ4NCw3IEBACiAgICAgICAgIHNlbGYtPnBlcnNfZnVuYyA9IF9QeU9iamVjdF9HZXRBdHRySWQoKFB5T2JqZWN0ICopc2VsZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUHlJZF9wZXJzaXN0ZW50X2xvYWQpOwogICAgICAgICBpZiAoc2VsZi0+cGVyc19mdW5jID09IE5VTEwpCi0gICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICByZXR1cm4gMTsKICAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIHNlbGYtPnBlcnNfZnVuYyA9IE5VTEw7CkBAIC01NzE4LDE5ICs2NDkyLDE5IEBACiAKICAgICBzZWxmLT5zdGFjayA9IChQZGF0YSAqKVBkYXRhX05ldygpOwogICAgIGlmIChzZWxmLT5zdGFjayA9PSBOVUxMKQotICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIHJldHVybiAxOwogCiAgICAgc2VsZi0+bWVtb19zaXplID0gMzI7CiAgICAgc2VsZi0+bWVtbyA9IF9VbnBpY2tsZXJfTmV3TWVtbyhzZWxmLT5tZW1vX3NpemUpOwogICAgIGlmIChzZWxmLT5tZW1vID09IE5VTEwpCiAgICAgICAgIHJldHVybiAtMTsKIAotICAgIHNlbGYtPmFyZyA9IE5VTEw7CiAgICAgc2VsZi0+cHJvdG8gPSAwOwogCiAgICAgcmV0dXJuIDA7CiB9CiAKKwogLyogRGVmaW5lIGEgcHJveHkgb2JqZWN0IGZvciB0aGUgVW5waWNrbGVyJ3MgaW50ZXJuYWwgbWVtbyBvYmplY3QuIFRoaXMgaXMgdG8KICAqIGF2b2lkIGJyZWFraW5nIGNvZGUgbGlrZToKICAqICB1bnBpY2tsZXIubWVtby5jbGVhcigpCkBAIC01NzQ0LDE2ICs2NTE4LDE1IEBACiAgKiByZWFsLXdvcmxkIGNvZGUgbGlrZSBjdnMyc3ZuLgogICovCiAKLXR5cGVkZWYgc3RydWN0IHsKLSAgICBQeU9iamVjdF9IRUFECi0gICAgVW5waWNrbGVyT2JqZWN0ICp1bnBpY2tsZXI7Ci19IFVucGlja2xlck1lbW9Qcm94eU9iamVjdDsKKy8qW2NsaW5pYyBpbnB1dF0KK19waWNrbGUuVW5waWNrbGVyTWVtb1Byb3h5LmNsZWFyCiAKLVB5RG9jX1NUUlZBUih1bXBfY2xlYXJfZG9jLAotIm1lbW8uY2xlYXIoKSAtPiBOb25lLiAgUmVtb3ZlIGFsbCBpdGVtcyBmcm9tIG1lbW8uIik7CitSZW1vdmUgYWxsIGl0ZW1zIGZyb20gbWVtby4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLXVtcF9jbGVhcihVbnBpY2tsZXJNZW1vUHJveHlPYmplY3QgKnNlbGYpCitfcGlja2xlX1VucGlja2xlck1lbW9Qcm94eV9jbGVhcl9pbXBsKFVucGlja2xlck1lbW9Qcm94eU9iamVjdCAqc2VsZikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kMjBjZDQzZjRiYTFmYjFmIGlucHV0PWIxZGY3YzUyZTdhZmQ5YmRdKi8KIHsKICAgICBfVW5waWNrbGVyX01lbW9DbGVhbnVwKHNlbGYtPnVucGlja2xlcik7CiAgICAgc2VsZi0+dW5waWNrbGVyLT5tZW1vID0gX1VucGlja2xlcl9OZXdNZW1vKHNlbGYtPnVucGlja2xlci0+bWVtb19zaXplKTsKQEAgLTU3NjIsMTEgKzY1MzUsMTUgQEAKICAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIAotUHlEb2NfU1RSVkFSKHVtcF9jb3B5X2RvYywKLSJtZW1vLmNvcHkoKSAtPiBuZXdfbWVtby4gIENvcHkgdGhlIG1lbW8gdG8gYSBuZXcgb2JqZWN0LiIpOworLypbY2xpbmljIGlucHV0XQorX3BpY2tsZS5VbnBpY2tsZXJNZW1vUHJveHkuY29weQorCitDb3B5IHRoZSBtZW1vIHRvIGEgbmV3IG9iamVjdC4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLXVtcF9jb3B5KFVucGlja2xlck1lbW9Qcm94eU9iamVjdCAqc2VsZikKK19waWNrbGVfVW5waWNrbGVyTWVtb1Byb3h5X2NvcHlfaW1wbChVbnBpY2tsZXJNZW1vUHJveHlPYmplY3QgKnNlbGYpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZTEyYWY3ZTliYzFlNGM3NyBpbnB1dD05Nzc2OTI0N2NlMDMyYzFkXSovCiB7CiAgICAgUHlfc3NpemVfdCBpOwogICAgIFB5T2JqZWN0ICpuZXdfbWVtbyA9IFB5RGljdF9OZXcoKTsKQEAgLTU3OTYsMTUgKzY1NzMsMTkgQEAKICAgICByZXR1cm4gTlVMTDsKIH0KIAotUHlEb2NfU1RSVkFSKHVtcF9yZWR1Y2VfZG9jLAotIm1lbW8uX19yZWR1Y2VfXygpLiBQaWNrbGluZyBzdXBwb3J0LiIpOworLypbY2xpbmljIGlucHV0XQorX3BpY2tsZS5VbnBpY2tsZXJNZW1vUHJveHkuX19yZWR1Y2VfXworCitJbXBsZW1lbnQgcGlja2xpbmcgc3VwcG9ydC4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLXVtcF9yZWR1Y2UoVW5waWNrbGVyTWVtb1Byb3h5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK19waWNrbGVfVW5waWNrbGVyTWVtb1Byb3h5X19fcmVkdWNlX19faW1wbChVbnBpY2tsZXJNZW1vUHJveHlPYmplY3QgKnNlbGYpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NmRhMzRhYzA0OGQ5NGNjYSBpbnB1dD02OTIwODYyNDEzNDA3MTk5XSovCiB7CiAgICAgUHlPYmplY3QgKnJlZHVjZV92YWx1ZTsKICAgICBQeU9iamVjdCAqY29uc3RydWN0b3JfYXJnczsKLSAgICBQeU9iamVjdCAqY29udGVudHMgPSB1bXBfY29weShzZWxmKTsKKyAgICBQeU9iamVjdCAqY29udGVudHMgPSBfcGlja2xlX1VucGlja2xlck1lbW9Qcm94eV9jb3B5X2ltcGwoc2VsZik7CiAgICAgaWYgKGNvbnRlbnRzID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCkBAIC01ODI3LDkgKzY2MDgsOSBAQAogfQogCiBzdGF0aWMgUHlNZXRob2REZWYgdW5waWNrbGVycHJveHlfbWV0aG9kc1tdID0gewotICAgIHsiY2xlYXIiLCAgICAgICAoUHlDRnVuY3Rpb24pdW1wX2NsZWFyLCAgTUVUSF9OT0FSR1MsICB1bXBfY2xlYXJfZG9jfSwKLSAgICB7ImNvcHkiLCAgICAgICAgKFB5Q0Z1bmN0aW9uKXVtcF9jb3B5LCAgIE1FVEhfTk9BUkdTLCAgdW1wX2NvcHlfZG9jfSwKLSAgICB7Il9fcmVkdWNlX18iLCAgKFB5Q0Z1bmN0aW9uKXVtcF9yZWR1Y2UsIE1FVEhfVkFSQVJHUywgdW1wX3JlZHVjZV9kb2N9LAorICAgIF9QSUNLTEVfVU5QSUNLTEVSTUVNT1BST1hZX0NMRUFSX01FVEhPRERFRgorICAgIF9QSUNLTEVfVU5QSUNLTEVSTUVNT1BST1hZX0NPUFlfTUVUSE9EREVGCisgICAgX1BJQ0tMRV9VTlBJQ0tMRVJNRU1PUFJPWFlfX19SRURVQ0VfX19NRVRIT0RERUYKICAgICB7TlVMTCwgTlVMTH0gICAgLyogc2VudGluZWwgKi8KIH07CiAKQEAgLTYwNTMsNyArNjgzNCw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zZXRhdHRybyovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19idWZmZXIqLwogICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfQkFTRVRZUEUgfCBQeV9UUEZMQUdTX0hBVkVfR0MsCi0gICAgVW5waWNrbGVyX2RvYywgICAgICAgICAgICAgICAgICAgICAgLyp0cF9kb2MqLworICAgIF9waWNrbGVfVW5waWNrbGVyX19faW5pdF9fX19kb2NfXywgIC8qdHBfZG9jKi8KICAgICAodHJhdmVyc2Vwcm9jKVVucGlja2xlcl90cmF2ZXJzZSwgICAvKnRwX3RyYXZlcnNlKi8KICAgICAoaW5xdWlyeSlVbnBpY2tsZXJfY2xlYXIsICAgICAgICAgICAvKnRwX2NsZWFyKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3JpY2hjb21wYXJlKi8KQEAgLTYwNjgsNjMgKzY4NDksNTYgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2Rlc2NyX2dldCovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9kZXNjcl9zZXQqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZGljdG9mZnNldCovCi0gICAgKGluaXRwcm9jKVVucGlja2xlcl9pbml0LCAgICAgICAgICAgLyp0cF9pbml0Ki8KKyAgICBfcGlja2xlX1VucGlja2xlcl9fX2luaXRfXywgICAgICAgICAvKnRwX2luaXQqLwogICAgIFB5VHlwZV9HZW5lcmljQWxsb2MsICAgICAgICAgICAgICAgIC8qdHBfYWxsb2MqLwogICAgIFB5VHlwZV9HZW5lcmljTmV3LCAgICAgICAgICAgICAgICAgIC8qdHBfbmV3Ki8KICAgICBQeU9iamVjdF9HQ19EZWwsICAgICAgICAgICAgICAgICAgICAvKnRwX2ZyZWUqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaXNfZ2MqLwogfTsKIAotUHlEb2NfU1RSVkFSKHBpY2tsZV9kdW1wX2RvYywKLSJkdW1wKG9iaiwgZmlsZSwgcHJvdG9jb2w9Tm9uZSwgKiwgZml4X2ltcG9ydHM9VHJ1ZSkgLT4gTm9uZVxuIgotIlxuIgotIldyaXRlIGEgcGlja2xlZCByZXByZXNlbnRhdGlvbiBvZiBvYmogdG8gdGhlIG9wZW4gZmlsZSBvYmplY3QgZmlsZS4gIFRoaXNcbiIKLSJpcyBlcXVpdmFsZW50IHRvIGBgUGlja2xlcihmaWxlLCBwcm90b2NvbCkuZHVtcChvYmopYGAsIGJ1dCBtYXkgYmUgbW9yZVxuIgotImVmZmljaWVudC5cbiIKLSJcbiIKLSJUaGUgb3B0aW9uYWwgcHJvdG9jb2wgYXJndW1lbnQgdGVsbHMgdGhlIHBpY2tsZXIgdG8gdXNlIHRoZSBnaXZlbiBwcm90b2NvbDtcbiIKLSJzdXBwb3J0ZWQgcHJvdG9jb2xzIGFyZSAwLCAxLCAyLCAzLiAgVGhlIGRlZmF1bHQgcHJvdG9jb2wgaXMgMzsgYVxuIgotImJhY2t3YXJkLWluY29tcGF0aWJsZSBwcm90b2NvbCBkZXNpZ25lZCBmb3IgUHl0aG9uIDMuMC5cbiIKLSJcbiIKLSJTcGVjaWZ5aW5nIGEgbmVnYXRpdmUgcHJvdG9jb2wgdmVyc2lvbiBzZWxlY3RzIHRoZSBoaWdoZXN0IHByb3RvY29sIHZlcnNpb25cbiIKLSJzdXBwb3J0ZWQuICBUaGUgaGlnaGVyIHRoZSBwcm90b2NvbCB1c2VkLCB0aGUgbW9yZSByZWNlbnQgdGhlIHZlcnNpb24gb2ZcbiIKLSJQeXRob24gbmVlZGVkIHRvIHJlYWQgdGhlIHBpY2tsZSBwcm9kdWNlZC5cbiIKLSJcbiIKLSJUaGUgZmlsZSBhcmd1bWVudCBtdXN0IGhhdmUgYSB3cml0ZSgpIG1ldGhvZCB0aGF0IGFjY2VwdHMgYSBzaW5nbGUgYnl0ZXNcbiIKLSJhcmd1bWVudC4gIEl0IGNhbiB0aHVzIGJlIGEgZmlsZSBvYmplY3Qgb3BlbmVkIGZvciBiaW5hcnkgd3JpdGluZywgYVxuIgotImlvLkJ5dGVzSU8gaW5zdGFuY2UsIG9yIGFueSBvdGhlciBjdXN0b20gb2JqZWN0IHRoYXQgbWVldHMgdGhpcyBpbnRlcmZhY2UuXG4iCi0iXG4iCi0iSWYgZml4X2ltcG9ydHMgaXMgVHJ1ZSBhbmQgcHJvdG9jb2wgaXMgbGVzcyB0aGFuIDMsIHBpY2tsZSB3aWxsIHRyeSB0b1xuIgotIm1hcCB0aGUgbmV3IFB5dGhvbiAzLnggbmFtZXMgdG8gdGhlIG9sZCBtb2R1bGUgbmFtZXMgdXNlZCBpbiBQeXRob24gMi54LFxuIgotInNvIHRoYXQgdGhlIHBpY2tsZSBkYXRhIHN0cmVhbSBpcyByZWFkYWJsZSB3aXRoIFB5dGhvbiAyLnguXG4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KKworX3BpY2tsZS5kdW1wCisKKyAgb2JqOiBvYmplY3QKKyAgZmlsZTogb2JqZWN0CisgIHByb3RvY29sOiBvYmplY3QgPSBOVUxMCisgICoKKyAgZml4X2ltcG9ydHM6IGJvb2wgPSBUcnVlCisKK1dyaXRlIGEgcGlja2xlZCByZXByZXNlbnRhdGlvbiBvZiBvYmogdG8gdGhlIG9wZW4gZmlsZSBvYmplY3QgZmlsZS4KKworVGhpcyBpcyBlcXVpdmFsZW50IHRvIGBgUGlja2xlcihmaWxlLCBwcm90b2NvbCkuZHVtcChvYmopYGAsIGJ1dCBtYXkKK2JlIG1vcmUgZWZmaWNpZW50LgorCitUaGUgb3B0aW9uYWwgKnByb3RvY29sKiBhcmd1bWVudCB0ZWxscyB0aGUgcGlja2xlciB0byB1c2UgdGhlIGdpdmVuCitwcm90b2NvbCBzdXBwb3J0ZWQgcHJvdG9jb2xzIGFyZSAwLCAxLCAyLCAzIGFuZCA0LiAgVGhlIGRlZmF1bHQKK3Byb3RvY29sIGlzIDM7IGEgYmFja3dhcmQtaW5jb21wYXRpYmxlIHByb3RvY29sIGRlc2lnbmVkIGZvciBQeXRob24gMy4KKworU3BlY2lmeWluZyBhIG5lZ2F0aXZlIHByb3RvY29sIHZlcnNpb24gc2VsZWN0cyB0aGUgaGlnaGVzdCBwcm90b2NvbAordmVyc2lvbiBzdXBwb3J0ZWQuICBUaGUgaGlnaGVyIHRoZSBwcm90b2NvbCB1c2VkLCB0aGUgbW9yZSByZWNlbnQgdGhlCit2ZXJzaW9uIG9mIFB5dGhvbiBuZWVkZWQgdG8gcmVhZCB0aGUgcGlja2xlIHByb2R1Y2VkLgorCitUaGUgKmZpbGUqIGFyZ3VtZW50IG11c3QgaGF2ZSBhIHdyaXRlKCkgbWV0aG9kIHRoYXQgYWNjZXB0cyBhIHNpbmdsZQorYnl0ZXMgYXJndW1lbnQuICBJdCBjYW4gdGh1cyBiZSBhIGZpbGUgb2JqZWN0IG9wZW5lZCBmb3IgYmluYXJ5Cit3cml0aW5nLCBhbiBpby5CeXRlc0lPIGluc3RhbmNlLCBvciBhbnkgb3RoZXIgY3VzdG9tIG9iamVjdCB0aGF0IG1lZXRzCit0aGlzIGludGVyZmFjZS4KKworSWYgKmZpeF9pbXBvcnRzKiBpcyBUcnVlIGFuZCBwcm90b2NvbCBpcyBsZXNzIHRoYW4gMywgcGlja2xlIHdpbGwgdHJ5Cit0byBtYXAgdGhlIG5ldyBQeXRob24gMyBuYW1lcyB0byB0aGUgb2xkIG1vZHVsZSBuYW1lcyB1c2VkIGluIFB5dGhvbgorMiwgc28gdGhhdCB0aGUgcGlja2xlIGRhdGEgc3RyZWFtIGlzIHJlYWRhYmxlIHdpdGggUHl0aG9uIDIuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1waWNrbGVfZHVtcChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQorX3BpY2tsZV9kdW1wX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKm9iaiwgUHlPYmplY3QgKmZpbGUsIFB5T2JqZWN0ICpwcm90b2NvbCwgaW50IGZpeF9pbXBvcnRzKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWE2MDZlNjI2ZDU1Mzg1MGQgaW5wdXQ9ODMwZjhhNjRjZWY2ZjA0Ml0qLwogewotICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsib2JqIiwgImZpbGUiLCAicHJvdG9jb2wiLCAiZml4X2ltcG9ydHMiLCAwfTsKLSAgICBQeU9iamVjdCAqb2JqOwotICAgIFB5T2JqZWN0ICpmaWxlOwotICAgIFB5T2JqZWN0ICpwcm90byA9IE5VTEw7Ci0gICAgUHlPYmplY3QgKmZpeF9pbXBvcnRzID0gUHlfVHJ1ZTsKLSAgICBQaWNrbGVyT2JqZWN0ICpwaWNrbGVyOworICAgIFBpY2tsZXJPYmplY3QgKnBpY2tsZXIgPSBfUGlja2xlcl9OZXcoKTsKIAotICAgIC8qIGZpeF9pbXBvcnRzIGlzIGEga2V5d29yZC1vbmx5IGFyZ3VtZW50LiAgKi8KLSAgICBpZiAoUHlfU0laRShhcmdzKSA+IDMpIHsKLSAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICJwaWNrbGUuZHVtcCgpIHRha2VzIGF0IG1vc3QgMyBwb3NpdGlvbmFsICIKLSAgICAgICAgICAgICAgICAgICAgICJhcmd1bWVudCAoJXpkIGdpdmVuKSIsIFB5X1NJWkUoYXJncykpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiT098T086ZHVtcCIsIGt3bGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb2JqLCAmZmlsZSwgJnByb3RvLCAmZml4X2ltcG9ydHMpKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIHBpY2tsZXIgPSBfUGlja2xlcl9OZXcoKTsKICAgICBpZiAocGlja2xlciA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGlmIChfUGlja2xlcl9TZXRQcm90b2NvbChwaWNrbGVyLCBwcm90bywgZml4X2ltcG9ydHMpIDwgMCkKKyAgICBpZiAoX1BpY2tsZXJfU2V0UHJvdG9jb2wocGlja2xlciwgcHJvdG9jb2wsIGZpeF9pbXBvcnRzKSA8IDApCiAgICAgICAgIGdvdG8gZXJyb3I7CiAKICAgICBpZiAoX1BpY2tsZXJfU2V0T3V0cHV0U3RyZWFtKHBpY2tsZXIsIGZpbGUpIDwgMCkKQEAgLTYxNDQsNTEgKzY5MTgsNDEgQEAKICAgICByZXR1cm4gTlVMTDsKIH0KIAotUHlEb2NfU1RSVkFSKHBpY2tsZV9kdW1wc19kb2MsCi0iZHVtcHMob2JqLCBwcm90b2NvbD1Ob25lLCAqLCBmaXhfaW1wb3J0cz1UcnVlKSAtPiBieXRlc1xuIgotIlxuIgotIlJldHVybiB0aGUgcGlja2xlZCByZXByZXNlbnRhdGlvbiBvZiB0aGUgb2JqZWN0IGFzIGEgYnl0ZXNcbiIKLSJvYmplY3QsIGluc3RlYWQgb2Ygd3JpdGluZyBpdCB0byBhIGZpbGUuXG4iCi0iXG4iCi0iVGhlIG9wdGlvbmFsIHByb3RvY29sIGFyZ3VtZW50IHRlbGxzIHRoZSBwaWNrbGVyIHRvIHVzZSB0aGUgZ2l2ZW4gcHJvdG9jb2w7XG4iCi0ic3VwcG9ydGVkIHByb3RvY29scyBhcmUgMCwgMSwgMiwgMy4gIFRoZSBkZWZhdWx0IHByb3RvY29sIGlzIDM7IGFcbiIKLSJiYWNrd2FyZC1pbmNvbXBhdGlibGUgcHJvdG9jb2wgZGVzaWduZWQgZm9yIFB5dGhvbiAzLjAuXG4iCi0iXG4iCi0iU3BlY2lmeWluZyBhIG5lZ2F0aXZlIHByb3RvY29sIHZlcnNpb24gc2VsZWN0cyB0aGUgaGlnaGVzdCBwcm90b2NvbCB2ZXJzaW9uXG4iCi0ic3VwcG9ydGVkLiAgVGhlIGhpZ2hlciB0aGUgcHJvdG9jb2wgdXNlZCwgdGhlIG1vcmUgcmVjZW50IHRoZSB2ZXJzaW9uIG9mXG4iCi0iUHl0aG9uIG5lZWRlZCB0byByZWFkIHRoZSBwaWNrbGUgcHJvZHVjZWQuXG4iCi0iXG4iCi0iSWYgZml4X2ltcG9ydHMgaXMgVHJ1ZSBhbmQgKnByb3RvY29sKiBpcyBsZXNzIHRoYW4gMywgcGlja2xlIHdpbGwgdHJ5IHRvXG4iCi0ibWFwIHRoZSBuZXcgUHl0aG9uIDMueCBuYW1lcyB0byB0aGUgb2xkIG1vZHVsZSBuYW1lcyB1c2VkIGluIFB5dGhvbiAyLngsXG4iCi0ic28gdGhhdCB0aGUgcGlja2xlIGRhdGEgc3RyZWFtIGlzIHJlYWRhYmxlIHdpdGggUHl0aG9uIDIueC5cbiIpOworLypbY2xpbmljIGlucHV0XQorCitfcGlja2xlLmR1bXBzCisKKyAgb2JqOiBvYmplY3QKKyAgcHJvdG9jb2w6IG9iamVjdCA9IE5VTEwKKyAgKgorICBmaXhfaW1wb3J0czogYm9vbCA9IFRydWUKKworUmV0dXJuIHRoZSBwaWNrbGVkIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBvYmplY3QgYXMgYSBieXRlcyBvYmplY3QuCisKK1RoZSBvcHRpb25hbCAqcHJvdG9jb2wqIGFyZ3VtZW50IHRlbGxzIHRoZSBwaWNrbGVyIHRvIHVzZSB0aGUgZ2l2ZW4KK3Byb3RvY29sOyBzdXBwb3J0ZWQgcHJvdG9jb2xzIGFyZSAwLCAxLCAyLCAzIGFuZCA0LiAgVGhlIGRlZmF1bHQKK3Byb3RvY29sIGlzIDM7IGEgYmFja3dhcmQtaW5jb21wYXRpYmxlIHByb3RvY29sIGRlc2lnbmVkIGZvciBQeXRob24gMy4KKworU3BlY2lmeWluZyBhIG5lZ2F0aXZlIHByb3RvY29sIHZlcnNpb24gc2VsZWN0cyB0aGUgaGlnaGVzdCBwcm90b2NvbAordmVyc2lvbiBzdXBwb3J0ZWQuICBUaGUgaGlnaGVyIHRoZSBwcm90b2NvbCB1c2VkLCB0aGUgbW9yZSByZWNlbnQgdGhlCit2ZXJzaW9uIG9mIFB5dGhvbiBuZWVkZWQgdG8gcmVhZCB0aGUgcGlja2xlIHByb2R1Y2VkLgorCitJZiAqZml4X2ltcG9ydHMqIGlzIFRydWUgYW5kICpwcm90b2NvbCogaXMgbGVzcyB0aGFuIDMsIHBpY2tsZSB3aWxsCit0cnkgdG8gbWFwIHRoZSBuZXcgUHl0aG9uIDMgbmFtZXMgdG8gdGhlIG9sZCBtb2R1bGUgbmFtZXMgdXNlZCBpbgorUHl0aG9uIDIsIHNvIHRoYXQgdGhlIHBpY2tsZSBkYXRhIHN0cmVhbSBpcyByZWFkYWJsZSB3aXRoIFB5dGhvbiAyLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotcGlja2xlX2R1bXBzKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCitfcGlja2xlX2R1bXBzX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKm9iaiwgUHlPYmplY3QgKnByb3RvY29sLCBpbnQgZml4X2ltcG9ydHMpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9Nzc3ZjBkZWVmZTViODhlZSBpbnB1dD0yOTNkYmVkYTE4MTU4MGI3XSovCiB7Ci0gICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJvYmoiLCAicHJvdG9jb2wiLCAiZml4X2ltcG9ydHMiLCAwfTsKLSAgICBQeU9iamVjdCAqb2JqOwotICAgIFB5T2JqZWN0ICpwcm90byA9IE5VTEw7CiAgICAgUHlPYmplY3QgKnJlc3VsdDsKLSAgICBQeU9iamVjdCAqZml4X2ltcG9ydHMgPSBQeV9UcnVlOwotICAgIFBpY2tsZXJPYmplY3QgKnBpY2tsZXI7CisgICAgUGlja2xlck9iamVjdCAqcGlja2xlciA9IF9QaWNrbGVyX05ldygpOwogCi0gICAgLyogZml4X2ltcG9ydHMgaXMgYSBrZXl3b3JkLW9ubHkgYXJndW1lbnQuICAqLwotICAgIGlmIChQeV9TSVpFKGFyZ3MpID4gMikgewotICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgInBpY2tsZS5kdW1wcygpIHRha2VzIGF0IG1vc3QgMiBwb3NpdGlvbmFsICIKLSAgICAgICAgICAgICAgICAgICAgICJhcmd1bWVudCAoJXpkIGdpdmVuKSIsIFB5X1NJWkUoYXJncykpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiT3xPTzpkdW1wcyIsIGt3bGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb2JqLCAmcHJvdG8sICZmaXhfaW1wb3J0cykpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgcGlja2xlciA9IF9QaWNrbGVyX05ldygpOwogICAgIGlmIChwaWNrbGVyID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgaWYgKF9QaWNrbGVyX1NldFByb3RvY29sKHBpY2tsZXIsIHByb3RvLCBmaXhfaW1wb3J0cykgPCAwKQorICAgIGlmIChfUGlja2xlcl9TZXRQcm90b2NvbChwaWNrbGVyLCBwcm90b2NvbCwgZml4X2ltcG9ydHMpIDwgMCkKICAgICAgICAgZ290byBlcnJvcjsKIAogICAgIGlmIChkdW1wKHBpY2tsZXIsIG9iaikgPCAwKQpAQCAtNjIwMyw1NCArNjk2Nyw0OCBAQAogICAgIHJldHVybiBOVUxMOwogfQogCi1QeURvY19TVFJWQVIocGlja2xlX2xvYWRfZG9jLAotImxvYWQoZmlsZSwgKiwgZml4X2ltcG9ydHM9VHJ1ZSwgZW5jb2Rpbmc9J0FTQ0lJJywgZXJyb3JzPSdzdHJpY3QnKSAtPiBvYmplY3RcbiIKLSJcbiIKLSJSZWFkIGEgcGlja2xlZCBvYmplY3QgcmVwcmVzZW50YXRpb24gZnJvbSB0aGUgb3BlbiBmaWxlIG9iamVjdCBmaWxlIGFuZFxuIgotInJldHVybiB0aGUgcmVjb25zdGl0dXRlZCBvYmplY3QgaGllcmFyY2h5IHNwZWNpZmllZCB0aGVyZWluLiAgVGhpcyBpc1xuIgotImVxdWl2YWxlbnQgdG8gYGBVbnBpY2tsZXIoZmlsZSkubG9hZCgpYGAsIGJ1dCBtYXkgYmUgbW9yZSBlZmZpY2llbnQuXG4iCi0iXG4iCi0iVGhlIHByb3RvY29sIHZlcnNpb24gb2YgdGhlIHBpY2tsZSBpcyBkZXRlY3RlZCBhdXRvbWF0aWNhbGx5LCBzbyBubyBwcm90b2NvbFxuIgotImFyZ3VtZW50IGlzIG5lZWRlZC4gIEJ5dGVzIHBhc3QgdGhlIHBpY2tsZWQgb2JqZWN0J3MgcmVwcmVzZW50YXRpb24gYXJlXG4iCi0iaWdub3JlZC5cbiIKLSJcbiIKLSJUaGUgYXJndW1lbnQgZmlsZSBtdXN0IGhhdmUgdHdvIG1ldGhvZHMsIGEgcmVhZCgpIG1ldGhvZCB0aGF0IHRha2VzIGFuXG4iCi0iaW50ZWdlciBhcmd1bWVudCwgYW5kIGEgcmVhZGxpbmUoKSBtZXRob2QgdGhhdCByZXF1aXJlcyBubyBhcmd1bWVudHMuICBCb3RoXG4iCi0ibWV0aG9kcyBzaG91bGQgcmV0dXJuIGJ5dGVzLiAgVGh1cyAqZmlsZSogY2FuIGJlIGEgYmluYXJ5IGZpbGUgb2JqZWN0IG9wZW5lZFxuIgotImZvciByZWFkaW5nLCBhIEJ5dGVzSU8gb2JqZWN0LCBvciBhbnkgb3RoZXIgY3VzdG9tIG9iamVjdCB0aGF0IG1lZXRzIHRoaXNcbiIKLSJpbnRlcmZhY2UuXG4iCi0iXG4iCi0iT3B0aW9uYWwga2V5d29yZCBhcmd1bWVudHMgYXJlIGZpeF9pbXBvcnRzLCBlbmNvZGluZyBhbmQgZXJyb3JzLFxuIgotIndoaWNoIGFyZSB1c2VkIHRvIGNvbnRyb2wgY29tcGF0aWJsaXR5IHN1cHBvcnQgZm9yIHBpY2tsZSBzdHJlYW0gZ2VuZXJhdGVkXG4iCi0iYnkgUHl0aG9uIDIueC4gIElmIGZpeF9pbXBvcnRzIGlzIFRydWUsIHBpY2tsZSB3aWxsIHRyeSB0byBtYXAgdGhlIG9sZFxuIgotIlB5dGhvbiAyLnggbmFtZXMgdG8gdGhlIG5ldyBuYW1lcyB1c2VkIGluIFB5dGhvbiAzLnguICBUaGUgZW5jb2RpbmcgYW5kXG4iCi0iZXJyb3JzIHRlbGwgcGlja2xlIGhvdyB0byBkZWNvZGUgOC1iaXQgc3RyaW5nIGluc3RhbmNlcyBwaWNrbGVkIGJ5IFB5dGhvblxuIgotIjIueDsgdGhlc2UgZGVmYXVsdCB0byAnQVNDSUknIGFuZCAnc3RyaWN0JywgcmVzcGVjdGl2ZWx5LlxuIik7CisvKltjbGluaWMgaW5wdXRdCisKK19waWNrbGUubG9hZAorCisgIGZpbGU6IG9iamVjdAorICAqCisgIGZpeF9pbXBvcnRzOiBib29sID0gVHJ1ZQorICBlbmNvZGluZzogc3RyID0gJ0FTQ0lJJworICBlcnJvcnM6IHN0ciA9ICdzdHJpY3QnCisKK1JlYWQgYW5kIHJldHVybiBhbiBvYmplY3QgZnJvbSB0aGUgcGlja2xlIGRhdGEgc3RvcmVkIGluIGEgZmlsZS4KKworVGhpcyBpcyBlcXVpdmFsZW50IHRvIGBgVW5waWNrbGVyKGZpbGUpLmxvYWQoKWBgLCBidXQgbWF5IGJlIG1vcmUKK2VmZmljaWVudC4KKworVGhlIHByb3RvY29sIHZlcnNpb24gb2YgdGhlIHBpY2tsZSBpcyBkZXRlY3RlZCBhdXRvbWF0aWNhbGx5LCBzbyBubworcHJvdG9jb2wgYXJndW1lbnQgaXMgbmVlZGVkLiAgQnl0ZXMgcGFzdCB0aGUgcGlja2xlZCBvYmplY3QncworcmVwcmVzZW50YXRpb24gYXJlIGlnbm9yZWQuCisKK1RoZSBhcmd1bWVudCAqZmlsZSogbXVzdCBoYXZlIHR3byBtZXRob2RzLCBhIHJlYWQoKSBtZXRob2QgdGhhdCB0YWtlcworYW4gaW50ZWdlciBhcmd1bWVudCwgYW5kIGEgcmVhZGxpbmUoKSBtZXRob2QgdGhhdCByZXF1aXJlcyBubworYXJndW1lbnRzLiAgQm90aCBtZXRob2RzIHNob3VsZCByZXR1cm4gYnl0ZXMuICBUaHVzICpmaWxlKiBjYW4gYmUgYQorYmluYXJ5IGZpbGUgb2JqZWN0IG9wZW5lZCBmb3IgcmVhZGluZywgYW4gaW8uQnl0ZXNJTyBvYmplY3QsIG9yIGFueQorb3RoZXIgY3VzdG9tIG9iamVjdCB0aGF0IG1lZXRzIHRoaXMgaW50ZXJmYWNlLgorCitPcHRpb25hbCBrZXl3b3JkIGFyZ3VtZW50cyBhcmUgKmZpeF9pbXBvcnRzKiwgKmVuY29kaW5nKiBhbmQgKmVycm9ycyosCit3aGljaCBhcmUgdXNlZCB0byBjb250cm9sIGNvbXBhdGlibGl0eSBzdXBwb3J0IGZvciBwaWNrbGUgc3RyZWFtCitnZW5lcmF0ZWQgYnkgUHl0aG9uIDIuICBJZiAqZml4X2ltcG9ydHMqIGlzIFRydWUsIHBpY2tsZSB3aWxsIHRyeSB0bworbWFwIHRoZSBvbGQgUHl0aG9uIDIgbmFtZXMgdG8gdGhlIG5ldyBuYW1lcyB1c2VkIGluIFB5dGhvbiAzLiAgVGhlCisqZW5jb2RpbmcqIGFuZCAqZXJyb3JzKiB0ZWxsIHBpY2tsZSBob3cgdG8gZGVjb2RlIDgtYml0IHN0cmluZworaW5zdGFuY2VzIHBpY2tsZWQgYnkgUHl0aG9uIDI7IHRoZXNlIGRlZmF1bHQgdG8gJ0FTQ0lJJyBhbmQgJ3N0cmljdCcsCityZXNwZWN0aXZlbHkuICBUaGUgKmVuY29kaW5nKiBjYW4gYmUgJ2J5dGVzJyB0byByZWFkIHRoZXNlIDgtYml0CitzdHJpbmcgaW5zdGFuY2VzIGFzIGJ5dGVzIG9iamVjdHMuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1waWNrbGVfbG9hZChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQorX3BpY2tsZV9sb2FkX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmZpbGUsIGludCBmaXhfaW1wb3J0cywgY29uc3QgY2hhciAqZW5jb2RpbmcsIGNvbnN0IGNoYXIgKmVycm9ycykKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD01NjhjNjEzNTZjMTcyNjU0IGlucHV0PTJkZjdjN2ExZTY3NDIyMDRdKi8KIHsKLSAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7ImZpbGUiLCAiZml4X2ltcG9ydHMiLCAiZW5jb2RpbmciLCAiZXJyb3JzIiwgMH07Ci0gICAgUHlPYmplY3QgKmZpbGU7Ci0gICAgUHlPYmplY3QgKmZpeF9pbXBvcnRzID0gUHlfVHJ1ZTsKICAgICBQeU9iamVjdCAqcmVzdWx0OwotICAgIGNoYXIgKmVuY29kaW5nID0gTlVMTDsKLSAgICBjaGFyICplcnJvcnMgPSBOVUxMOwotICAgIFVucGlja2xlck9iamVjdCAqdW5waWNrbGVyOworICAgIFVucGlja2xlck9iamVjdCAqdW5waWNrbGVyID0gX1VucGlja2xlcl9OZXcoKTsKIAotICAgIC8qIGZpeF9pbXBvcnRzLCBlbmNvZGluZyBhbmQgZXJyb3JzIGFyZSBhIGtleXdvcmQtb25seSBhcmd1bWVudC4gICovCi0gICAgaWYgKFB5X1NJWkUoYXJncykgIT0gMSkgewotICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgInBpY2tsZS5sb2FkKCkgdGFrZXMgZXhhY3RseSBvbmUgcG9zaXRpb25hbCAiCi0gICAgICAgICAgICAgICAgICAgICAiYXJndW1lbnQgKCV6ZCBnaXZlbikiLCBQeV9TSVpFKGFyZ3MpKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgIk98T3NzOmxvYWQiLCBrd2xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZpbGUsICZmaXhfaW1wb3J0cywgJmVuY29kaW5nLCAmZXJyb3JzKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICB1bnBpY2tsZXIgPSBfVW5waWNrbGVyX05ldygpOwogICAgIGlmICh1bnBpY2tsZXIgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTYyNjAsOSArNzAxOCw3IEBACiAgICAgaWYgKF9VbnBpY2tsZXJfU2V0SW5wdXRFbmNvZGluZyh1bnBpY2tsZXIsIGVuY29kaW5nLCBlcnJvcnMpIDwgMCkKICAgICAgICAgZ290byBlcnJvcjsKIAotICAgIHVucGlja2xlci0+Zml4X2ltcG9ydHMgPSBQeU9iamVjdF9Jc1RydWUoZml4X2ltcG9ydHMpOwotICAgIGlmICh1bnBpY2tsZXItPmZpeF9pbXBvcnRzID09IC0xKQotICAgICAgICBnb3RvIGVycm9yOworICAgIHVucGlja2xlci0+Zml4X2ltcG9ydHMgPSBmaXhfaW1wb3J0czsKIAogICAgIHJlc3VsdCA9IGxvYWQodW5waWNrbGVyKTsKICAgICBQeV9ERUNSRUYodW5waWNrbGVyKTsKQEAgLTYyNzMsNTkgKzcwMjksNDkgQEAKICAgICByZXR1cm4gTlVMTDsKIH0KIAotUHlEb2NfU1RSVkFSKHBpY2tsZV9sb2Fkc19kb2MsCi0ibG9hZHMoaW5wdXQsICosIGZpeF9pbXBvcnRzPVRydWUsIGVuY29kaW5nPSdBU0NJSScsIGVycm9ycz0nc3RyaWN0JykgLT4gb2JqZWN0XG4iCi0iXG4iCi0iUmVhZCBhIHBpY2tsZWQgb2JqZWN0IGhpZXJhcmNoeSBmcm9tIGEgYnl0ZXMgb2JqZWN0IGFuZCByZXR1cm4gdGhlXG4iCi0icmVjb25zdGl0dXRlZCBvYmplY3QgaGllcmFyY2h5IHNwZWNpZmllZCB0aGVyZWluXG4iCi0iXG4iCi0iVGhlIHByb3RvY29sIHZlcnNpb24gb2YgdGhlIHBpY2tsZSBpcyBkZXRlY3RlZCBhdXRvbWF0aWNhbGx5LCBzbyBubyBwcm90b2NvbFxuIgotImFyZ3VtZW50IGlzIG5lZWRlZC4gIEJ5dGVzIHBhc3QgdGhlIHBpY2tsZWQgb2JqZWN0J3MgcmVwcmVzZW50YXRpb24gYXJlXG4iCi0iaWdub3JlZC5cbiIKLSJcbiIKLSJPcHRpb25hbCBrZXl3b3JkIGFyZ3VtZW50cyBhcmUgZml4X2ltcG9ydHMsIGVuY29kaW5nIGFuZCBlcnJvcnMsIHdoaWNoXG4iCi0iYXJlIHVzZWQgdG8gY29udHJvbCBjb21wYXRpYmxpdHkgc3VwcG9ydCBmb3IgcGlja2xlIHN0cmVhbSBnZW5lcmF0ZWRcbiIKLSJieSBQeXRob24gMi54LiAgSWYgZml4X2ltcG9ydHMgaXMgVHJ1ZSwgcGlja2xlIHdpbGwgdHJ5IHRvIG1hcCB0aGUgb2xkXG4iCi0iUHl0aG9uIDIueCBuYW1lcyB0byB0aGUgbmV3IG5hbWVzIHVzZWQgaW4gUHl0aG9uIDMueC4gIFRoZSBlbmNvZGluZyBhbmRcbiIKLSJlcnJvcnMgdGVsbCBwaWNrbGUgaG93IHRvIGRlY29kZSA4LWJpdCBzdHJpbmcgaW5zdGFuY2VzIHBpY2tsZWQgYnkgUHl0aG9uXG4iCi0iMi54OyB0aGVzZSBkZWZhdWx0IHRvICdBU0NJSScgYW5kICdzdHJpY3QnLCByZXNwZWN0aXZlbHkuXG4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KKworX3BpY2tsZS5sb2FkcworCisgIGRhdGE6IG9iamVjdAorICAqCisgIGZpeF9pbXBvcnRzOiBib29sID0gVHJ1ZQorICBlbmNvZGluZzogc3RyID0gJ0FTQ0lJJworICBlcnJvcnM6IHN0ciA9ICdzdHJpY3QnCisKK1JlYWQgYW5kIHJldHVybiBhbiBvYmplY3QgZnJvbSB0aGUgZ2l2ZW4gcGlja2xlIGRhdGEuCisKK1RoZSBwcm90b2NvbCB2ZXJzaW9uIG9mIHRoZSBwaWNrbGUgaXMgZGV0ZWN0ZWQgYXV0b21hdGljYWxseSwgc28gbm8KK3Byb3RvY29sIGFyZ3VtZW50IGlzIG5lZWRlZC4gIEJ5dGVzIHBhc3QgdGhlIHBpY2tsZWQgb2JqZWN0J3MKK3JlcHJlc2VudGF0aW9uIGFyZSBpZ25vcmVkLgorCitPcHRpb25hbCBrZXl3b3JkIGFyZ3VtZW50cyBhcmUgKmZpeF9pbXBvcnRzKiwgKmVuY29kaW5nKiBhbmQgKmVycm9ycyosCit3aGljaCBhcmUgdXNlZCB0byBjb250cm9sIGNvbXBhdGlibGl0eSBzdXBwb3J0IGZvciBwaWNrbGUgc3RyZWFtCitnZW5lcmF0ZWQgYnkgUHl0aG9uIDIuICBJZiAqZml4X2ltcG9ydHMqIGlzIFRydWUsIHBpY2tsZSB3aWxsIHRyeSB0bworbWFwIHRoZSBvbGQgUHl0aG9uIDIgbmFtZXMgdG8gdGhlIG5ldyBuYW1lcyB1c2VkIGluIFB5dGhvbiAzLiAgVGhlCisqZW5jb2RpbmcqIGFuZCAqZXJyb3JzKiB0ZWxsIHBpY2tsZSBob3cgdG8gZGVjb2RlIDgtYml0IHN0cmluZworaW5zdGFuY2VzIHBpY2tsZWQgYnkgUHl0aG9uIDI7IHRoZXNlIGRlZmF1bHQgdG8gJ0FTQ0lJJyBhbmQgJ3N0cmljdCcsCityZXNwZWN0aXZlbHkuICBUaGUgKmVuY29kaW5nKiBjYW4gYmUgJ2J5dGVzJyB0byByZWFkIHRoZXNlIDgtYml0CitzdHJpbmcgaW5zdGFuY2VzIGFzIGJ5dGVzIG9iamVjdHMuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1waWNrbGVfbG9hZHMoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKK19waWNrbGVfbG9hZHNfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqZGF0YSwgaW50IGZpeF9pbXBvcnRzLCBjb25zdCBjaGFyICplbmNvZGluZywgY29uc3QgY2hhciAqZXJyb3JzKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTBiMzg0NWFkMTEwYjI1MjIgaW5wdXQ9ZjU3ZjBmZGFhMmI0Y2I4Yl0qLwogewotICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsiaW5wdXQiLCAiZml4X2ltcG9ydHMiLCAiZW5jb2RpbmciLCAiZXJyb3JzIiwgMH07Ci0gICAgUHlPYmplY3QgKmlucHV0OwotICAgIFB5T2JqZWN0ICpmaXhfaW1wb3J0cyA9IFB5X1RydWU7CiAgICAgUHlPYmplY3QgKnJlc3VsdDsKLSAgICBjaGFyICplbmNvZGluZyA9IE5VTEw7Ci0gICAgY2hhciAqZXJyb3JzID0gTlVMTDsKLSAgICBVbnBpY2tsZXJPYmplY3QgKnVucGlja2xlcjsKKyAgICBVbnBpY2tsZXJPYmplY3QgKnVucGlja2xlciA9IF9VbnBpY2tsZXJfTmV3KCk7CiAKLSAgICAvKiBmaXhfaW1wb3J0cywgZW5jb2RpbmcgYW5kIGVycm9ycyBhcmUgYSBrZXl3b3JkLW9ubHkgYXJndW1lbnQuICAqLwotICAgIGlmIChQeV9TSVpFKGFyZ3MpICE9IDEpIHsKLSAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICJwaWNrbGUubG9hZHMoKSB0YWtlcyBleGFjdGx5IG9uZSBwb3NpdGlvbmFsICIKLSAgICAgICAgICAgICAgICAgICAgICJhcmd1bWVudCAoJXpkIGdpdmVuKSIsIFB5X1NJWkUoYXJncykpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiT3xPc3M6bG9hZHMiLCBrd2xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmlucHV0LCAmZml4X2ltcG9ydHMsICZlbmNvZGluZywgJmVycm9ycykpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgdW5waWNrbGVyID0gX1VucGlja2xlcl9OZXcoKTsKICAgICBpZiAodW5waWNrbGVyID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgaWYgKF9VbnBpY2tsZXJfU2V0U3RyaW5nSW5wdXQodW5waWNrbGVyLCBpbnB1dCkgPCAwKQorICAgIGlmIChfVW5waWNrbGVyX1NldFN0cmluZ0lucHV0KHVucGlja2xlciwgZGF0YSkgPCAwKQogICAgICAgICBnb3RvIGVycm9yOwogCiAgICAgaWYgKF9VbnBpY2tsZXJfU2V0SW5wdXRFbmNvZGluZyh1bnBpY2tsZXIsIGVuY29kaW5nLCBlcnJvcnMpIDwgMCkKICAgICAgICAgZ290byBlcnJvcjsKIAotICAgIHVucGlja2xlci0+Zml4X2ltcG9ydHMgPSBQeU9iamVjdF9Jc1RydWUoZml4X2ltcG9ydHMpOwotICAgIGlmICh1bnBpY2tsZXItPmZpeF9pbXBvcnRzID09IC0xKQotICAgICAgICBnb3RvIGVycm9yOworICAgIHVucGlja2xlci0+Zml4X2ltcG9ydHMgPSBmaXhfaW1wb3J0czsKIAogICAgIHJlc3VsdCA9IGxvYWQodW5waWNrbGVyKTsKICAgICBQeV9ERUNSRUYodW5waWNrbGVyKTsKQEAgLTYzMzYsMTM5ICs3MDgyLDY5IEBACiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKLQogc3RhdGljIHN0cnVjdCBQeU1ldGhvZERlZiBwaWNrbGVfbWV0aG9kc1tdID0gewotICAgIHsiZHVtcCIsICAoUHlDRnVuY3Rpb24pcGlja2xlX2R1bXAsICBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywKLSAgICAgcGlja2xlX2R1bXBfZG9jfSwKLSAgICB7ImR1bXBzIiwgKFB5Q0Z1bmN0aW9uKXBpY2tsZV9kdW1wcywgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsCi0gICAgIHBpY2tsZV9kdW1wc19kb2N9LAotICAgIHsibG9hZCIsICAoUHlDRnVuY3Rpb24pcGlja2xlX2xvYWQsICBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywKLSAgICAgcGlja2xlX2xvYWRfZG9jfSwKLSAgICB7ImxvYWRzIiwgKFB5Q0Z1bmN0aW9uKXBpY2tsZV9sb2FkcywgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsCi0gICAgIHBpY2tsZV9sb2Fkc19kb2N9LAorICAgIF9QSUNLTEVfRFVNUF9NRVRIT0RERUYKKyAgICBfUElDS0xFX0RVTVBTX01FVEhPRERFRgorICAgIF9QSUNLTEVfTE9BRF9NRVRIT0RERUYKKyAgICBfUElDS0xFX0xPQURTX01FVEhPRERFRgogICAgIHtOVUxMLCBOVUxMfSAvKiBzZW50aW5lbCAqLwogfTsKIAogc3RhdGljIGludAotaW5pdG1vZHVsZSh2b2lkKQorcGlja2xlX2NsZWFyKFB5T2JqZWN0ICptKQogewotICAgIFB5T2JqZWN0ICpjb3B5cmVnID0gTlVMTDsKLSAgICBQeU9iamVjdCAqY29tcGF0X3BpY2tsZSA9IE5VTEw7Ci0KLSAgICAvKiBYWFg6IFdlIHNob3VsZCBlbnN1cmUgdGhhdCB0aGUgdHlwZXMgb2YgdGhlIGRpY3Rpb25hcmllcyBpbXBvcnRlZCBhcmUKLSAgICAgICBleGFjdGx5IFB5RGljdCBvYmplY3RzLiBPdGhlcndpc2UsIGl0IGlzIHBvc3NpYmxlIHRvIGNyYXNoIHRoZSBwaWNrbGUKLSAgICAgICBzaW5jZSB3ZSB1c2UgdGhlIFB5RGljdCBBUEkgZGlyZWN0bHkgdG8gYWNjZXNzIHRoZXNlIGRpY3Rpb25hcmllcy4gKi8KLQotICAgIGNvcHlyZWcgPSBQeUltcG9ydF9JbXBvcnRNb2R1bGUoImNvcHlyZWciKTsKLSAgICBpZiAoIWNvcHlyZWcpCi0gICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgZGlzcGF0Y2hfdGFibGUgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKGNvcHlyZWcsICJkaXNwYXRjaF90YWJsZSIpOwotICAgIGlmICghZGlzcGF0Y2hfdGFibGUpCi0gICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgZXh0ZW5zaW9uX3JlZ2lzdHJ5ID0gXAotICAgICAgICBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKGNvcHlyZWcsICJfZXh0ZW5zaW9uX3JlZ2lzdHJ5Iik7Ci0gICAgaWYgKCFleHRlbnNpb25fcmVnaXN0cnkpCi0gICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgaW52ZXJ0ZWRfcmVnaXN0cnkgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKGNvcHlyZWcsICJfaW52ZXJ0ZWRfcmVnaXN0cnkiKTsKLSAgICBpZiAoIWludmVydGVkX3JlZ2lzdHJ5KQotICAgICAgICBnb3RvIGVycm9yOwotICAgIGV4dGVuc2lvbl9jYWNoZSA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcoY29weXJlZywgIl9leHRlbnNpb25fY2FjaGUiKTsKLSAgICBpZiAoIWV4dGVuc2lvbl9jYWNoZSkKLSAgICAgICAgZ290byBlcnJvcjsKLSAgICBQeV9DTEVBUihjb3B5cmVnKTsKLQotICAgIC8qIExvYWQgdGhlIDIueCAtPiAzLnggc3RkbGliIG1vZHVsZSBtYXBwaW5nIHRhYmxlcyAqLwotICAgIGNvbXBhdF9waWNrbGUgPSBQeUltcG9ydF9JbXBvcnRNb2R1bGUoIl9jb21wYXRfcGlja2xlIik7Ci0gICAgaWYgKCFjb21wYXRfcGlja2xlKQotICAgICAgICBnb3RvIGVycm9yOwotICAgIG5hbWVfbWFwcGluZ18ydG8zID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhjb21wYXRfcGlja2xlLCAiTkFNRV9NQVBQSU5HIik7Ci0gICAgaWYgKCFuYW1lX21hcHBpbmdfMnRvMykKLSAgICAgICAgZ290byBlcnJvcjsKLSAgICBpZiAoIVB5RGljdF9DaGVja0V4YWN0KG5hbWVfbWFwcGluZ18ydG8zKSkgewotICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfUnVudGltZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgIl9jb21wYXRfcGlja2xlLk5BTUVfTUFQUElORyBzaG91bGQgYmUgYSBkaWN0LCBub3QgJS4yMDBzIiwKLSAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUobmFtZV9tYXBwaW5nXzJ0bzMpLT50cF9uYW1lKTsKLSAgICAgICAgZ290byBlcnJvcjsKLSAgICB9Ci0gICAgaW1wb3J0X21hcHBpbmdfMnRvMyA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcoY29tcGF0X3BpY2tsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSU1QT1JUX01BUFBJTkciKTsKLSAgICBpZiAoIWltcG9ydF9tYXBwaW5nXzJ0bzMpCi0gICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgaWYgKCFQeURpY3RfQ2hlY2tFeGFjdChpbXBvcnRfbWFwcGluZ18ydG8zKSkgewotICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfUnVudGltZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgIl9jb21wYXRfcGlja2xlLklNUE9SVF9NQVBQSU5HIHNob3VsZCBiZSBhIGRpY3QsICIKLSAgICAgICAgICAgICAgICAgICAgICJub3QgJS4yMDBzIiwgUHlfVFlQRShpbXBvcnRfbWFwcGluZ18ydG8zKS0+dHBfbmFtZSk7Ci0gICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgfQotICAgIC8qIC4uLiBhbmQgdGhlIDMueCAtPiAyLnggbWFwcGluZyB0YWJsZXMgKi8KLSAgICBuYW1lX21hcHBpbmdfM3RvMiA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcoY29tcGF0X3BpY2tsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJFVkVSU0VfTkFNRV9NQVBQSU5HIik7Ci0gICAgaWYgKCFuYW1lX21hcHBpbmdfM3RvMikKLSAgICAgICAgZ290byBlcnJvcjsKLSAgICBpZiAoIVB5RGljdF9DaGVja0V4YWN0KG5hbWVfbWFwcGluZ18zdG8yKSkgewotICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfUnVudGltZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgIl9jb21wYXRfcGlja2xlLlJFVkVSU0VfTkFNRV9NQVBQSU5HIHNob3VsZCBiZSBhIGRpY3QsICIKLSAgICAgICAgICAgICAgICAgICAgICJub3QgJS4yMDBzIiwgUHlfVFlQRShuYW1lX21hcHBpbmdfM3RvMiktPnRwX25hbWUpOwotICAgICAgICBnb3RvIGVycm9yOwotICAgIH0KLSAgICBpbXBvcnRfbWFwcGluZ18zdG8yID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhjb21wYXRfcGlja2xlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSRVZFUlNFX0lNUE9SVF9NQVBQSU5HIik7Ci0gICAgaWYgKCFpbXBvcnRfbWFwcGluZ18zdG8yKQotICAgICAgICBnb3RvIGVycm9yOwotICAgIGlmICghUHlEaWN0X0NoZWNrRXhhY3QoaW1wb3J0X21hcHBpbmdfM3RvMikpIHsKLSAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1J1bnRpbWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICJfY29tcGF0X3BpY2tsZS5SRVZFUlNFX0lNUE9SVF9NQVBQSU5HIHNob3VsZCBiZSBhIGRpY3QsICIKLSAgICAgICAgICAgICAgICAgICAgICJub3QgJS4yMDBzIiwgUHlfVFlQRShpbXBvcnRfbWFwcGluZ18zdG8yKS0+dHBfbmFtZSk7Ci0gICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgfQotICAgIFB5X0NMRUFSKGNvbXBhdF9waWNrbGUpOwotCi0gICAgZW1wdHlfdHVwbGUgPSBQeVR1cGxlX05ldygwKTsKLSAgICBpZiAoZW1wdHlfdHVwbGUgPT0gTlVMTCkKLSAgICAgICAgZ290byBlcnJvcjsKLSAgICB0d29fdHVwbGUgPSBQeVR1cGxlX05ldygyKTsKLSAgICBpZiAodHdvX3R1cGxlID09IE5VTEwpCi0gICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgLyogV2UgdXNlIHRoaXMgdGVtcCBjb250YWluZXIgd2l0aCBubyByZWdhcmQgdG8gcmVmY291bnRzLCBvciB0bwotICAgICAqIGtlZXBpbmcgY29udGFpbmVlcyBhbGl2ZS4gIEV4ZW1wdCBmcm9tIEdDLCBiZWNhdXNlIHdlIGRvbid0Ci0gICAgICogd2FudCBhbnl0aGluZyBsb29raW5nIGF0IHR3b190dXBsZSgpIGJ5IG1hZ2ljLgotICAgICAqLwotICAgIFB5T2JqZWN0X0dDX1VuVHJhY2sodHdvX3R1cGxlKTsKLQorICAgIF9QaWNrbGVfQ2xlYXJTdGF0ZShfUGlja2xlX0dldFN0YXRlKG0pKTsKICAgICByZXR1cm4gMDsKK30KIAotICBlcnJvcjoKLSAgICBQeV9DTEVBUihjb3B5cmVnKTsKLSAgICBQeV9DTEVBUihkaXNwYXRjaF90YWJsZSk7Ci0gICAgUHlfQ0xFQVIoZXh0ZW5zaW9uX3JlZ2lzdHJ5KTsKLSAgICBQeV9DTEVBUihpbnZlcnRlZF9yZWdpc3RyeSk7Ci0gICAgUHlfQ0xFQVIoZXh0ZW5zaW9uX2NhY2hlKTsKLSAgICBQeV9DTEVBUihjb21wYXRfcGlja2xlKTsKLSAgICBQeV9DTEVBUihuYW1lX21hcHBpbmdfMnRvMyk7Ci0gICAgUHlfQ0xFQVIoaW1wb3J0X21hcHBpbmdfMnRvMyk7Ci0gICAgUHlfQ0xFQVIobmFtZV9tYXBwaW5nXzN0bzIpOwotICAgIFB5X0NMRUFSKGltcG9ydF9tYXBwaW5nXzN0bzIpOwotICAgIFB5X0NMRUFSKGVtcHR5X3R1cGxlKTsKLSAgICBQeV9DTEVBUih0d29fdHVwbGUpOwotICAgIHJldHVybiAtMTsKK3N0YXRpYyB2b2lkCitwaWNrbGVfZnJlZShQeU9iamVjdCAqbSkKK3sKKyAgICBfUGlja2xlX0NsZWFyU3RhdGUoX1BpY2tsZV9HZXRTdGF0ZShtKSk7Cit9CisKK3N0YXRpYyBpbnQKK3BpY2tsZV90cmF2ZXJzZShQeU9iamVjdCAqbSwgdmlzaXRwcm9jIHZpc2l0LCB2b2lkICphcmcpCit7CisgICAgUGlja2xlU3RhdGUgKnN0ID0gX1BpY2tsZV9HZXRTdGF0ZShtKTsKKyAgICBQeV9WSVNJVChzdC0+UGlja2xlRXJyb3IpOworICAgIFB5X1ZJU0lUKHN0LT5QaWNrbGluZ0Vycm9yKTsKKyAgICBQeV9WSVNJVChzdC0+VW5waWNrbGluZ0Vycm9yKTsKKyAgICBQeV9WSVNJVChzdC0+ZGlzcGF0Y2hfdGFibGUpOworICAgIFB5X1ZJU0lUKHN0LT5leHRlbnNpb25fcmVnaXN0cnkpOworICAgIFB5X1ZJU0lUKHN0LT5leHRlbnNpb25fY2FjaGUpOworICAgIFB5X1ZJU0lUKHN0LT5pbnZlcnRlZF9yZWdpc3RyeSk7CisgICAgUHlfVklTSVQoc3QtPm5hbWVfbWFwcGluZ18ydG8zKTsKKyAgICBQeV9WSVNJVChzdC0+aW1wb3J0X21hcHBpbmdfMnRvMyk7CisgICAgUHlfVklTSVQoc3QtPm5hbWVfbWFwcGluZ18zdG8yKTsKKyAgICBQeV9WSVNJVChzdC0+aW1wb3J0X21hcHBpbmdfM3RvMik7CisgICAgUHlfVklTSVQoc3QtPmNvZGVjc19lbmNvZGUpOworICAgIHJldHVybiAwOwogfQogCiBzdGF0aWMgc3RydWN0IFB5TW9kdWxlRGVmIF9waWNrbGVtb2R1bGUgPSB7CiAgICAgUHlNb2R1bGVEZWZfSEVBRF9JTklULAotICAgICJfcGlja2xlIiwKLSAgICBwaWNrbGVfbW9kdWxlX2RvYywKLSAgICAtMSwKLSAgICBwaWNrbGVfbWV0aG9kcywKLSAgICBOVUxMLAotICAgIE5VTEwsCi0gICAgTlVMTCwKLSAgICBOVUxMCisgICAgIl9waWNrbGUiLCAgICAgICAgICAgIC8qIG1fbmFtZSAqLworICAgIHBpY2tsZV9tb2R1bGVfZG9jLCAgICAvKiBtX2RvYyAqLworICAgIHNpemVvZihQaWNrbGVTdGF0ZSksICAvKiBtX3NpemUgKi8KKyAgICBwaWNrbGVfbWV0aG9kcywgICAgICAgLyogbV9tZXRob2RzICovCisgICAgTlVMTCwgICAgICAgICAgICAgICAgIC8qIG1fcmVsb2FkICovCisgICAgcGlja2xlX3RyYXZlcnNlLCAgICAgIC8qIG1fdHJhdmVyc2UgKi8KKyAgICBwaWNrbGVfY2xlYXIsICAgICAgICAgLyogbV9jbGVhciAqLworICAgIChmcmVlZnVuYylwaWNrbGVfZnJlZSAvKiBtX2ZyZWUgKi8KIH07CiAKIFB5TU9ESU5JVF9GVU5DCiBQeUluaXRfX3BpY2tsZSh2b2lkKQogewogICAgIFB5T2JqZWN0ICptOworICAgIFBpY2tsZVN0YXRlICpzdDsKKworICAgIG0gPSBQeVN0YXRlX0ZpbmRNb2R1bGUoJl9waWNrbGVtb2R1bGUpOworICAgIGlmIChtKSB7CisgICAgICAgIFB5X0lOQ1JFRihtKTsKKyAgICAgICAgcmV0dXJuIG07CisgICAgfQogCiAgICAgaWYgKFB5VHlwZV9SZWFkeSgmVW5waWNrbGVyX1R5cGUpIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC02NDkzLDI3ICs3MTY5LDMyIEBACiAgICAgaWYgKFB5TW9kdWxlX0FkZE9iamVjdChtLCAiVW5waWNrbGVyIiwgKFB5T2JqZWN0ICopJlVucGlja2xlcl9UeXBlKSA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwogCisgICAgc3QgPSBfUGlja2xlX0dldFN0YXRlKG0pOworCiAgICAgLyogSW5pdGlhbGl6ZSB0aGUgZXhjZXB0aW9ucy4gKi8KLSAgICBQaWNrbGVFcnJvciA9IFB5RXJyX05ld0V4Y2VwdGlvbigiX3BpY2tsZS5QaWNrbGVFcnJvciIsIE5VTEwsIE5VTEwpOwotICAgIGlmIChQaWNrbGVFcnJvciA9PSBOVUxMKQorICAgIHN0LT5QaWNrbGVFcnJvciA9IFB5RXJyX05ld0V4Y2VwdGlvbigiX3BpY2tsZS5QaWNrbGVFcnJvciIsIE5VTEwsIE5VTEwpOworICAgIGlmIChzdC0+UGlja2xlRXJyb3IgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgUGlja2xpbmdFcnJvciA9IFwKLSAgICAgICAgUHlFcnJfTmV3RXhjZXB0aW9uKCJfcGlja2xlLlBpY2tsaW5nRXJyb3IiLCBQaWNrbGVFcnJvciwgTlVMTCk7Ci0gICAgaWYgKFBpY2tsaW5nRXJyb3IgPT0gTlVMTCkKKyAgICBzdC0+UGlja2xpbmdFcnJvciA9IFwKKyAgICAgICAgUHlFcnJfTmV3RXhjZXB0aW9uKCJfcGlja2xlLlBpY2tsaW5nRXJyb3IiLCBzdC0+UGlja2xlRXJyb3IsIE5VTEwpOworICAgIGlmIChzdC0+UGlja2xpbmdFcnJvciA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBVbnBpY2tsaW5nRXJyb3IgPSBcCi0gICAgICAgIFB5RXJyX05ld0V4Y2VwdGlvbigiX3BpY2tsZS5VbnBpY2tsaW5nRXJyb3IiLCBQaWNrbGVFcnJvciwgTlVMTCk7Ci0gICAgaWYgKFVucGlja2xpbmdFcnJvciA9PSBOVUxMKQorICAgIHN0LT5VbnBpY2tsaW5nRXJyb3IgPSBcCisgICAgICAgIFB5RXJyX05ld0V4Y2VwdGlvbigiX3BpY2tsZS5VbnBpY2tsaW5nRXJyb3IiLCBzdC0+UGlja2xlRXJyb3IsIE5VTEwpOworICAgIGlmIChzdC0+VW5waWNrbGluZ0Vycm9yID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgaWYgKFB5TW9kdWxlX0FkZE9iamVjdChtLCAiUGlja2xlRXJyb3IiLCBQaWNrbGVFcnJvcikgPCAwKQorICAgIFB5X0lOQ1JFRihzdC0+UGlja2xlRXJyb3IpOworICAgIGlmIChQeU1vZHVsZV9BZGRPYmplY3QobSwgIlBpY2tsZUVycm9yIiwgc3QtPlBpY2tsZUVycm9yKSA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmIChQeU1vZHVsZV9BZGRPYmplY3QobSwgIlBpY2tsaW5nRXJyb3IiLCBQaWNrbGluZ0Vycm9yKSA8IDApCisgICAgUHlfSU5DUkVGKHN0LT5QaWNrbGluZ0Vycm9yKTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJQaWNrbGluZ0Vycm9yIiwgc3QtPlBpY2tsaW5nRXJyb3IpIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKFB5TW9kdWxlX0FkZE9iamVjdChtLCAiVW5waWNrbGluZ0Vycm9yIiwgVW5waWNrbGluZ0Vycm9yKSA8IDApCisgICAgUHlfSU5DUkVGKHN0LT5VbnBpY2tsaW5nRXJyb3IpOworICAgIGlmIChQeU1vZHVsZV9BZGRPYmplY3QobSwgIlVucGlja2xpbmdFcnJvciIsIHN0LT5VbnBpY2tsaW5nRXJyb3IpIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBpZiAoaW5pdG1vZHVsZSgpIDwgMCkKKyAgICBpZiAoX1BpY2tsZV9Jbml0U3RhdGUoc3QpIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICByZXR1cm4gbTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3Bvc2l4c3VicHJvY2Vzcy5jIGIvTW9kdWxlcy9fcG9zaXhzdWJwcm9jZXNzLmMKaW5kZXggMDE5NmNhMi4uMTQ5MDIyMyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fcG9zaXhzdWJwcm9jZXNzLmMKKysrIGIvTW9kdWxlcy9fcG9zaXhzdWJwcm9jZXNzLmMKQEAgLTE0LDEwICsxNCwxOSBAQAogI2lmZGVmIEhBVkVfU1lTX1NZU0NBTExfSAogI2luY2x1ZGUgPHN5cy9zeXNjYWxsLmg+CiAjZW5kaWYKKyNpZiBkZWZpbmVkKEhBVkVfU1lTX1JFU09VUkNFX0gpCisjaW5jbHVkZSA8c3lzL3Jlc291cmNlLmg+CisjZW5kaWYKICNpZmRlZiBIQVZFX0RJUkVOVF9ICiAjaW5jbHVkZSA8ZGlyZW50Lmg+CiAjZW5kaWYKIAorI2lmIGRlZmluZWQoX19BTkRST0lEX18pICYmICFkZWZpbmVkKFNZU19nZXRkZW50czY0KQorLyogQW5kcm9pZCBkb2Vzbid0IGV4cG9zZSBzeXNjYWxscywgYWRkIHRoZSBkZWZpbml0aW9uIG1hbnVhbGx5LiAqLworIyBpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyMgZGVmaW5lIFNZU19nZXRkZW50czY0ICBfX05SX2dldGRlbnRzNjQKKyNlbmRpZgorCiAjaWYgZGVmaW5lZChzdW4pCiAvKiByZWFkZGlyNjQgaXMgdXNlZCB0byB3b3JrIGFyb3VuZCBTb2xhcmlzIDkgYnVnIDYzOTU2OTkuICovCiAjIGRlZmluZSByZWFkZGlyIHJlYWRkaXI2NApAQCAtMzUsMjQgKzQ0LDI4IEBACiAjIGRlZmluZSBGRF9ESVIgIi9wcm9jL3NlbGYvZmQiCiAjZW5kaWYKIAotI2RlZmluZSBQT1NJWF9DQUxMKGNhbGwpICAgaWYgKChjYWxsKSA9PSAtMSkgZ290byBlcnJvcgorI2RlZmluZSBQT1NJWF9DQUxMKGNhbGwpICAgZG8geyBpZiAoKGNhbGwpID09IC0xKSBnb3RvIGVycm9yOyB9IHdoaWxlICgwKQogCiAKLS8qIE1heGltdW0gZmlsZSBkZXNjcmlwdG9yLCBpbml0aWFsaXplZCBvbiBtb2R1bGUgbG9hZC4gKi8KLXN0YXRpYyBsb25nIG1heF9mZDsKLQotCi0vKiBHaXZlbiB0aGUgZ2MgbW9kdWxlIGNhbGwgZ2MuZW5hYmxlKCkgYW5kIHJldHVybiAwIG9uIHN1Y2Nlc3MuICovCisvKiBJZiBnYyB3YXMgZGlzYWJsZWQsIGNhbGwgZ2MuZW5hYmxlKCkuICBSZXR1cm4gMCBvbiBzdWNjZXNzLiAqLwogc3RhdGljIGludAotX2VuYWJsZV9nYyhQeU9iamVjdCAqZ2NfbW9kdWxlKQorX2VuYWJsZV9nYyhpbnQgbmVlZF90b19yZWVuYWJsZV9nYywgUHlPYmplY3QgKmdjX21vZHVsZSkKIHsKICAgICBQeU9iamVjdCAqcmVzdWx0OwogICAgIF9QeV9JREVOVElGSUVSKGVuYWJsZSk7CisgICAgUHlPYmplY3QgKmV4Y3R5cGUsICp2YWwsICp0YjsKIAotICAgIHJlc3VsdCA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoZ2NfbW9kdWxlLCAmUHlJZF9lbmFibGUsIE5VTEwpOwotICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgaWYgKG5lZWRfdG9fcmVlbmFibGVfZ2MpIHsKKyAgICAgICAgUHlFcnJfRmV0Y2goJmV4Y3R5cGUsICZ2YWwsICZ0Yik7CisgICAgICAgIHJlc3VsdCA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoZ2NfbW9kdWxlLCAmUHlJZF9lbmFibGUsIE5VTEwpOworICAgICAgICBpZiAoZXhjdHlwZSAhPSBOVUxMKSB7CisgICAgICAgICAgICBQeUVycl9SZXN0b3JlKGV4Y3R5cGUsIHZhbCwgdGIpOworICAgICAgICB9CisgICAgICAgIGlmIChyZXN1bHQgPT0gTlVMTCkgeworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKyAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgfQogICAgIHJldHVybiAwOwogfQogCkBAIC04Nyw3ICsxMDAsNyBAQAogICAgIGlmIChzdGF0KCIvZGV2IiwgJmRldl9zdGF0KSAhPSAwKQogICAgICAgICByZXR1cm4gMDsKICAgICBpZiAoc3RhdChGRF9ESVIsICZkZXZfZmRfc3RhdCkgIT0gMCkKLSAgICAgICAgcmV0dXJuIDA7IAorICAgICAgICByZXR1cm4gMDsKICAgICBpZiAoZGV2X3N0YXQuc3RfZGV2ID09IGRldl9mZF9zdGF0LnN0X2RldikKICAgICAgICAgcmV0dXJuIDA7ICAvKiAvID09IC9kZXYgPT0gL2Rldi9mZCBtZWFucyBpdCBpcyBzdGF0aWMuICNmYWlsICovCiAgICAgcmV0dXJuIDE7CkBAIC0xMzYsMTUgKzE0OSw3MCBAQAogICAgIHJldHVybiAwOwogfQogCitzdGF0aWMgaW50CittYWtlX2luaGVyaXRhYmxlKFB5T2JqZWN0ICpweV9mZHNfdG9fa2VlcCwgaW50IGVycnBpcGVfd3JpdGUpCit7CisgICAgUHlfc3NpemVfdCBpLCBsZW47CiAKLS8qIENsb3NlIGFsbCBmaWxlIGRlc2NyaXB0b3JzIGluIHRoZSByYW5nZSBzdGFydF9mZCBpbmNsdXNpdmUgdG8KLSAqIGVuZF9mZCBleGNsdXNpdmUgZXhjZXB0IGZvciB0aG9zZSBpbiBweV9mZHNfdG9fa2VlcC4gIElmIHRoZQotICogcmFuZ2UgZGVmaW5lZCBieSBbc3RhcnRfZmQsIGVuZF9mZCkgaXMgbGFyZ2UgdGhpcyB3aWxsIHRha2UgYQotICogbG9uZyB0aW1lIGFzIGl0IGNhbGxzIGNsb3NlKCkgb24gRVZFUlkgcG9zc2libGUgZmQuCisgICAgbGVuID0gUHlTZXF1ZW5jZV9MZW5ndGgocHlfZmRzX3RvX2tlZXApOworICAgIGZvciAoaSA9IDA7IGkgPCBsZW47ICsraSkgeworICAgICAgICBQeU9iamVjdCogZmRvYmogPSBQeVNlcXVlbmNlX0Zhc3RfR0VUX0lURU0ocHlfZmRzX3RvX2tlZXAsIGkpOworICAgICAgICBsb25nIGZkID0gUHlMb25nX0FzTG9uZyhmZG9iaik7CisgICAgICAgIGFzc2VydCghUHlFcnJfT2NjdXJyZWQoKSk7CisgICAgICAgIGFzc2VydCgwIDw9IGZkICYmIGZkIDw9IElOVF9NQVgpOworICAgICAgICBpZiAoZmQgPT0gZXJycGlwZV93cml0ZSkgeworICAgICAgICAgICAgLyogZXJycGlwZV93cml0ZSBpcyBwYXJ0IG9mIHB5X2Zkc190b19rZWVwLiBJdCBtdXN0IGJlIGNsb3NlZCBhdAorICAgICAgICAgICAgICAgZXhlYygpLCBidXQga2VwdCBvcGVuIGluIHRoZSBjaGlsZCBwcm9jZXNzIHVudGlsIGV4ZWMoKSBpcworICAgICAgICAgICAgICAgY2FsbGVkLiAqLworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKF9QeV9zZXRfaW5oZXJpdGFibGUoKGludClmZCwgMSwgTlVMTCkgPCAwKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworCisvKiBHZXQgdGhlIG1heGltdW0gZmlsZSBkZXNjcmlwdG9yIHRoYXQgY291bGQgYmUgb3BlbmVkIGJ5IHRoaXMgcHJvY2Vzcy4KKyAqIFRoaXMgZnVuY3Rpb24gaXMgYXN5bmMgc2lnbmFsIHNhZmUgZm9yIHVzZSBiZXR3ZWVuIGZvcmsoKSBhbmQgZXhlYygpLgorICovCitzdGF0aWMgbG9uZworc2FmZV9nZXRfbWF4X2ZkKHZvaWQpCit7CisgICAgbG9uZyBsb2NhbF9tYXhfZmQ7CisjaWYgZGVmaW5lZChfX05ldEJTRF9fKQorICAgIGxvY2FsX21heF9mZCA9IGZjbnRsKDAsIEZfTUFYRkQpOworICAgIGlmIChsb2NhbF9tYXhfZmQgPj0gMCkKKyAgICAgICAgcmV0dXJuIGxvY2FsX21heF9mZDsKKyNlbmRpZgorI2lmIGRlZmluZWQoSEFWRV9TWVNfUkVTT1VSQ0VfSCkgJiYgZGVmaW5lZChfX09wZW5CU0RfXykKKyAgICBzdHJ1Y3QgcmxpbWl0IHJsOworICAgIC8qIE5vdCBvbiB0aGUgUE9TSVggYXN5bmMgc2lnbmFsIHNhZmUgZnVuY3Rpb25zIGxpc3QgYnV0IGxpa2VseQorICAgICAqIHNhZmUuICBUT0RPIC0gU29tZW9uZSBzaG91bGQgYXVkaXQgT3BlbkJTRCB0byBtYWtlIHN1cmUuICovCisgICAgaWYgKGdldHJsaW1pdChSTElNSVRfTk9GSUxFLCAmcmwpID49IDApCisgICAgICAgIHJldHVybiAobG9uZykgcmwucmxpbV9tYXg7CisjZW5kaWYKKyNpZmRlZiBfU0NfT1BFTl9NQVgKKyAgICBsb2NhbF9tYXhfZmQgPSBzeXNjb25mKF9TQ19PUEVOX01BWCk7CisgICAgaWYgKGxvY2FsX21heF9mZCA9PSAtMSkKKyNlbmRpZgorICAgICAgICBsb2NhbF9tYXhfZmQgPSAyNTY7ICAvKiBNYXRjaGVzIGxlZ2FjeSBMaWIvc3VicHJvY2Vzcy5weSBiZWhhdmlvci4gKi8KKyAgICByZXR1cm4gbG9jYWxfbWF4X2ZkOworfQorCisKKy8qIENsb3NlIGFsbCBmaWxlIGRlc2NyaXB0b3JzIGluIHRoZSByYW5nZSBmcm9tIHN0YXJ0X2ZkIGFuZCBoaWdoZXIKKyAqIGV4Y2VwdCBmb3IgdGhvc2UgaW4gcHlfZmRzX3RvX2tlZXAuICBJZiB0aGUgcmFuZ2UgZGVmaW5lZCBieQorICogW3N0YXJ0X2ZkLCBzYWZlX2dldF9tYXhfZmQoKSkgaXMgbGFyZ2UgdGhpcyB3aWxsIHRha2UgYSBsb25nCisgKiB0aW1lIGFzIGl0IGNhbGxzIGNsb3NlKCkgb24gRVZFUlkgcG9zc2libGUgZmQuCisgKgorICogSXQgaXNuJ3QgcG9zc2libGUgdG8ga25vdyBmb3Igc3VyZSB3aGF0IHRoZSBtYXggZmQgdG8gZ28gdXAgdG8KKyAqIGlzIGZvciBwcm9jZXNzZXMgd2l0aCB0aGUgY2FwYWJpbGl0eSBvZiByYWlzaW5nIHRoZWlyIG1heGltdW0uCiAgKi8KIHN0YXRpYyB2b2lkCi1fY2xvc2VfZmRzX2J5X2JydXRlX2ZvcmNlKGludCBzdGFydF9mZCwgaW50IGVuZF9mZCwgUHlPYmplY3QgKnB5X2Zkc190b19rZWVwKQorX2Nsb3NlX2Zkc19ieV9icnV0ZV9mb3JjZShsb25nIHN0YXJ0X2ZkLCBQeU9iamVjdCAqcHlfZmRzX3RvX2tlZXApCiB7CisgICAgbG9uZyBlbmRfZmQgPSBzYWZlX2dldF9tYXhfZmQoKTsKICAgICBQeV9zc2l6ZV90IG51bV9mZHNfdG9fa2VlcCA9IFB5U2VxdWVuY2VfTGVuZ3RoKHB5X2Zkc190b19rZWVwKTsKICAgICBQeV9zc2l6ZV90IGtlZXBfc2VxX2lkeDsKICAgICBpbnQgZmRfbnVtOwpAQCAtMTU3LDEzICsyMjUsMTMgQEAKICAgICAgICAgaWYgKGtlZXBfZmQgPCBzdGFydF9mZCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBmb3IgKGZkX251bSA9IHN0YXJ0X2ZkOyBmZF9udW0gPCBrZWVwX2ZkOyArK2ZkX251bSkgewotICAgICAgICAgICAgd2hpbGUgKGNsb3NlKGZkX251bSkgPCAwICYmIGVycm5vID09IEVJTlRSKTsKKyAgICAgICAgICAgIGNsb3NlKGZkX251bSk7CiAgICAgICAgIH0KICAgICAgICAgc3RhcnRfZmQgPSBrZWVwX2ZkICsgMTsKICAgICB9CiAgICAgaWYgKHN0YXJ0X2ZkIDw9IGVuZF9mZCkgewogICAgICAgICBmb3IgKGZkX251bSA9IHN0YXJ0X2ZkOyBmZF9udW0gPCBlbmRfZmQ7ICsrZmRfbnVtKSB7Ci0gICAgICAgICAgICB3aGlsZSAoY2xvc2UoZmRfbnVtKSA8IDAgJiYgZXJybm8gPT0gRUlOVFIpOworICAgICAgICAgICAgY2xvc2UoZmRfbnVtKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTE4NCw4ICsyNTIsOCBAQAogICAgY2hhciAgICAgICAgICAgZF9uYW1lWzI1Nl07ICAvKiBGaWxlbmFtZSAobnVsbC10ZXJtaW5hdGVkKSAqLwogfTsKIAotLyogQ2xvc2UgYWxsIG9wZW4gZmlsZSBkZXNjcmlwdG9ycyBpbiB0aGUgcmFuZ2Ugc3RhcnRfZmQgaW5jbHVzaXZlIHRvIGVuZF9mZAotICogZXhjbHVzaXZlLiBEbyBub3QgY2xvc2UgYW55IGluIHRoZSBzb3J0ZWQgcHlfZmRzX3RvX2tlZXAgbGlzdC4KKy8qIENsb3NlIGFsbCBvcGVuIGZpbGUgZGVzY3JpcHRvcnMgaW4gdGhlIHJhbmdlIGZyb20gc3RhcnRfZmQgYW5kIGhpZ2hlcgorICogRG8gbm90IGNsb3NlIGFueSBpbiB0aGUgc29ydGVkIHB5X2Zkc190b19rZWVwIGxpc3QuCiAgKgogICogVGhpcyB2ZXJzaW9uIGlzIGFzeW5jIHNpZ25hbCBzYWZlIGFzIGl0IGRvZXMgbm90IG1ha2UgYW55IHVuc2FmZSBDIGxpYnJhcnkKICAqIGNhbGxzLCBtYWxsb2MgY2FsbHMgb3IgaGFuZGxlIGFueSBsb2Nrcy4gIEl0IGlzIF91bmZvcnR1bmF0ZV8gdG8gYmUgZm9yY2VkCkBAIC0yMDAsMjYgKzI2OCwxNCBAQAogICogaXQgd2l0aCBzb21lIGNwcCAjZGVmaW5lIG1hZ2ljIHRvIHdvcmsgb24gb3RoZXIgT1NlcyBhcyB3ZWxsIGlmIHlvdSB3YW50LgogICovCiBzdGF0aWMgdm9pZAotX2Nsb3NlX29wZW5fZmRfcmFuZ2Vfc2FmZShpbnQgc3RhcnRfZmQsIGludCBlbmRfZmQsIFB5T2JqZWN0KiBweV9mZHNfdG9fa2VlcCkKK19jbG9zZV9vcGVuX2Zkc19zYWZlKGludCBzdGFydF9mZCwgUHlPYmplY3QqIHB5X2Zkc190b19rZWVwKQogewogICAgIGludCBmZF9kaXJfZmQ7Ci0gICAgaWYgKHN0YXJ0X2ZkID49IGVuZF9mZCkKLSAgICAgICAgcmV0dXJuOwotI2lmZGVmIE9fQ0xPRVhFQwotICAgIGZkX2Rpcl9mZCA9IG9wZW4oRkRfRElSLCBPX1JET05MWSB8IE9fQ0xPRVhFQywgMCk7Ci0jZWxzZQotICAgIGZkX2Rpcl9mZCA9IG9wZW4oRkRfRElSLCBPX1JET05MWSwgMCk7Ci0jaWZkZWYgRkRfQ0xPRVhFQwotICAgIHsKLSAgICAgICAgaW50IG9sZCA9IGZjbnRsKGZkX2Rpcl9mZCwgRl9HRVRGRCk7Ci0gICAgICAgIGlmIChvbGQgIT0gLTEpCi0gICAgICAgICAgICBmY250bChmZF9kaXJfZmQsIEZfU0VURkQsIG9sZCB8IEZEX0NMT0VYRUMpOwotICAgIH0KLSNlbmRpZgotI2VuZGlmCisKKyAgICBmZF9kaXJfZmQgPSBfUHlfb3BlbihGRF9ESVIsIE9fUkRPTkxZKTsKICAgICBpZiAoZmRfZGlyX2ZkID09IC0xKSB7CiAgICAgICAgIC8qIE5vIHdheSB0byBnZXQgYSBsaXN0IG9mIG9wZW4gZmRzLiAqLwotICAgICAgICBfY2xvc2VfZmRzX2J5X2JydXRlX2ZvcmNlKHN0YXJ0X2ZkLCBlbmRfZmQsIHB5X2Zkc190b19rZWVwKTsKKyAgICAgICAgX2Nsb3NlX2Zkc19ieV9icnV0ZV9mb3JjZShzdGFydF9mZCwgcHlfZmRzX3RvX2tlZXApOwogICAgICAgICByZXR1cm47CiAgICAgfSBlbHNlIHsKICAgICAgICAgY2hhciBidWZmZXJbc2l6ZW9mKHN0cnVjdCBsaW51eF9kaXJlbnQ2NCldOwpAQCAtMjM0LDkgKzI5MCw5IEBACiAgICAgICAgICAgICAgICAgZW50cnkgPSAoc3RydWN0IGxpbnV4X2RpcmVudDY0ICopKGJ1ZmZlciArIG9mZnNldCk7CiAgICAgICAgICAgICAgICAgaWYgKChmZCA9IF9wb3NfaW50X2Zyb21fYXNjaWkoZW50cnktPmRfbmFtZSkpIDwgMCkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7ICAvKiBOb3QgYSBudW1iZXIuICovCi0gICAgICAgICAgICAgICAgaWYgKGZkICE9IGZkX2Rpcl9mZCAmJiBmZCA+PSBzdGFydF9mZCAmJiBmZCA8IGVuZF9mZCAmJgorICAgICAgICAgICAgICAgIGlmIChmZCAhPSBmZF9kaXJfZmQgJiYgZmQgPj0gc3RhcnRfZmQgJiYKICAgICAgICAgICAgICAgICAgICAgIV9pc19mZF9pbl9zb3J0ZWRfZmRfc2VxdWVuY2UoZmQsIHB5X2Zkc190b19rZWVwKSkgewotICAgICAgICAgICAgICAgICAgICB3aGlsZSAoY2xvc2UoZmQpIDwgMCAmJiBlcnJubyA9PSBFSU5UUik7CisgICAgICAgICAgICAgICAgICAgIGNsb3NlKGZkKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTI0NCwxMyArMzAwLDEzIEBACiAgICAgfQogfQogCi0jZGVmaW5lIF9jbG9zZV9vcGVuX2ZkX3JhbmdlIF9jbG9zZV9vcGVuX2ZkX3JhbmdlX3NhZmUKKyNkZWZpbmUgX2Nsb3NlX29wZW5fZmRzIF9jbG9zZV9vcGVuX2Zkc19zYWZlCiAKICNlbHNlICAvKiBOT1QgKGRlZmluZWQoX19saW51eF9fKSAmJiBkZWZpbmVkKEhBVkVfU1lTX1NZU0NBTExfSCkpICovCiAKIAotLyogQ2xvc2UgYWxsIG9wZW4gZmlsZSBkZXNjcmlwdG9ycyBpbiB0aGUgcmFuZ2Ugc3RhcnRfZmQgaW5jbHVzaXZlIHRvIGVuZF9mZAotICogZXhjbHVzaXZlLiBEbyBub3QgY2xvc2UgYW55IGluIHRoZSBzb3J0ZWQgcHlfZmRzX3RvX2tlZXAgbGlzdC4KKy8qIENsb3NlIGFsbCBvcGVuIGZpbGUgZGVzY3JpcHRvcnMgZnJvbSBzdGFydF9mZCBhbmQgaGlnaGVyLgorICogRG8gbm90IGNsb3NlIGFueSBpbiB0aGUgc29ydGVkIHB5X2Zkc190b19rZWVwIGxpc3QuCiAgKgogICogVGhpcyBmdW5jdGlvbiB2aW9sYXRlcyB0aGUgc3RyaWN0IHVzZSBvZiBhc3luYyBzaWduYWwgc2FmZSBmdW5jdGlvbnMuIDooCiAgKiBJdCBjYWxscyBvcGVuZGlyKCksIHJlYWRkaXIoKSBhbmQgY2xvc2VkaXIoKS4gIE9mIHRoZXNlLCB0aGUgb25lIG1vc3QKQEAgLTI2MywyNiArMzE5LDIwIEBACiAgKiAgIGh0dHA6Ly93b21ibGUuZGVjYWRlbnQub3JnLnVrL3JlYWRkaXJfci1hZHZpc29yeS5odG1sCiAgKi8KIHN0YXRpYyB2b2lkCi1fY2xvc2Vfb3Blbl9mZF9yYW5nZV9tYXliZV91bnNhZmUoaW50IHN0YXJ0X2ZkLCBpbnQgZW5kX2ZkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0KiBweV9mZHNfdG9fa2VlcCkKK19jbG9zZV9vcGVuX2Zkc19tYXliZV91bnNhZmUobG9uZyBzdGFydF9mZCwgUHlPYmplY3QqIHB5X2Zkc190b19rZWVwKQogewogICAgIERJUiAqcHJvY19mZF9kaXI7CiAjaWZuZGVmIEhBVkVfRElSRkQKLSAgICB3aGlsZSAoX2lzX2ZkX2luX3NvcnRlZF9mZF9zZXF1ZW5jZShzdGFydF9mZCwgcHlfZmRzX3RvX2tlZXApICYmCi0gICAgICAgICAgIChzdGFydF9mZCA8IGVuZF9mZCkpIHsKKyAgICB3aGlsZSAoX2lzX2ZkX2luX3NvcnRlZF9mZF9zZXF1ZW5jZShzdGFydF9mZCwgcHlfZmRzX3RvX2tlZXApKSB7CiAgICAgICAgICsrc3RhcnRfZmQ7CiAgICAgfQotICAgIGlmIChzdGFydF9mZCA+PSBlbmRfZmQpCi0gICAgICAgIHJldHVybjsKICAgICAvKiBDbG9zZSBvdXIgbG93ZXN0IGZkIGJlZm9yZSB3ZSBjYWxsIG9wZW5kaXIgc28gdGhhdCBpdCBpcyBsaWtlbHkgdG8KICAgICAgKiByZXVzZSB0aGF0IGZkIG90aGVyd2lzZSB3ZSBtaWdodCBjbG9zZSBvcGVuZGlyJ3MgZmlsZSBkZXNjcmlwdG9yIGluCiAgICAgICogb3VyIGxvb3AuICBUaGlzIHRyaWNrIGFzc3VtZXMgdGhhdCBmZCdzIGFyZSBhbGxvY2F0ZWQgb24gYSBsb3dlc3QKICAgICAgKiBhdmFpbGFibGUgYmFzaXMuICovCi0gICAgd2hpbGUgKGNsb3NlKHN0YXJ0X2ZkKSA8IDAgJiYgZXJybm8gPT0gRUlOVFIpOworICAgIGNsb3NlKHN0YXJ0X2ZkKTsKICAgICArK3N0YXJ0X2ZkOwogI2VuZGlmCi0gICAgaWYgKHN0YXJ0X2ZkID49IGVuZF9mZCkKLSAgICAgICAgcmV0dXJuOwogCiAjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKICAgICBpZiAoIV9pc19mZGVzY2ZzX21vdW50ZWRfb25fZGV2X2ZkKCkpCkBAIC0yOTIsNyArMzQyLDcgQEAKICAgICAgICAgcHJvY19mZF9kaXIgPSBvcGVuZGlyKEZEX0RJUik7CiAgICAgaWYgKCFwcm9jX2ZkX2RpcikgewogICAgICAgICAvKiBObyB3YXkgdG8gZ2V0IGEgbGlzdCBvZiBvcGVuIGZkcy4gKi8KLSAgICAgICAgX2Nsb3NlX2Zkc19ieV9icnV0ZV9mb3JjZShzdGFydF9mZCwgZW5kX2ZkLCBweV9mZHNfdG9fa2VlcCk7CisgICAgICAgIF9jbG9zZV9mZHNfYnlfYnJ1dGVfZm9yY2Uoc3RhcnRfZmQsIHB5X2Zkc190b19rZWVwKTsKICAgICB9IGVsc2UgewogICAgICAgICBzdHJ1Y3QgZGlyZW50ICpkaXJfZW50cnk7CiAjaWZkZWYgSEFWRV9ESVJGRApAQCAtMzA1LDIxICszNTUsMjEgQEAKICAgICAgICAgICAgIGludCBmZDsKICAgICAgICAgICAgIGlmICgoZmQgPSBfcG9zX2ludF9mcm9tX2FzY2lpKGRpcl9lbnRyeS0+ZF9uYW1lKSkgPCAwKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAgLyogTm90IGEgbnVtYmVyLiAqLwotICAgICAgICAgICAgaWYgKGZkICE9IGZkX3VzZWRfYnlfb3BlbmRpciAmJiBmZCA+PSBzdGFydF9mZCAmJiBmZCA8IGVuZF9mZCAmJgorICAgICAgICAgICAgaWYgKGZkICE9IGZkX3VzZWRfYnlfb3BlbmRpciAmJiBmZCA+PSBzdGFydF9mZCAmJgogICAgICAgICAgICAgICAgICFfaXNfZmRfaW5fc29ydGVkX2ZkX3NlcXVlbmNlKGZkLCBweV9mZHNfdG9fa2VlcCkpIHsKLSAgICAgICAgICAgICAgICB3aGlsZSAoY2xvc2UoZmQpIDwgMCAmJiBlcnJubyA9PSBFSU5UUik7CisgICAgICAgICAgICAgICAgY2xvc2UoZmQpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZXJybm8gPSAwOwogICAgICAgICB9CiAgICAgICAgIGlmIChlcnJubykgewogICAgICAgICAgICAgLyogcmVhZGRpciBlcnJvciwgcmV2ZXJ0IGJlaGF2aW9yLiBIaWdobHkgVW5saWtlbHkuICovCi0gICAgICAgICAgICBfY2xvc2VfZmRzX2J5X2JydXRlX2ZvcmNlKHN0YXJ0X2ZkLCBlbmRfZmQsIHB5X2Zkc190b19rZWVwKTsKKyAgICAgICAgICAgIF9jbG9zZV9mZHNfYnlfYnJ1dGVfZm9yY2Uoc3RhcnRfZmQsIHB5X2Zkc190b19rZWVwKTsKICAgICAgICAgfQogICAgICAgICBjbG9zZWRpcihwcm9jX2ZkX2Rpcik7CiAgICAgfQogfQogCi0jZGVmaW5lIF9jbG9zZV9vcGVuX2ZkX3JhbmdlIF9jbG9zZV9vcGVuX2ZkX3JhbmdlX21heWJlX3Vuc2FmZQorI2RlZmluZSBfY2xvc2Vfb3Blbl9mZHMgX2Nsb3NlX29wZW5fZmRzX21heWJlX3Vuc2FmZQogCiAjZW5kaWYgIC8qIGVsc2UgTk9UIChkZWZpbmVkKF9fbGludXhfXykgJiYgZGVmaW5lZChIQVZFX1NZU19TWVNDQUxMX0gpKSAqLwogCkBAIC0zNTYsMTYgKzQwNiwxNiBAQAogICAgIC8qIEJ1ZmZlciBsYXJnZSBlbm91Z2ggdG8gaG9sZCBhIGhleCBpbnRlZ2VyLiAgV2UgY2FuJ3QgbWFsbG9jLiAqLwogICAgIGNoYXIgaGV4X2Vycm5vW3NpemVvZihzYXZlZF9lcnJubykqMisxXTsKIAorICAgIGlmIChtYWtlX2luaGVyaXRhYmxlKHB5X2Zkc190b19rZWVwLCBlcnJwaXBlX3dyaXRlKSA8IDApCisgICAgICAgIGdvdG8gZXJyb3I7CisKICAgICAvKiBDbG9zZSBwYXJlbnQncyBwaXBlIGVuZHMuICovCi0gICAgaWYgKHAyY3dyaXRlICE9IC0xKSB7CisgICAgaWYgKHAyY3dyaXRlICE9IC0xKQogICAgICAgICBQT1NJWF9DQUxMKGNsb3NlKHAyY3dyaXRlKSk7Ci0gICAgfQotICAgIGlmIChjMnByZWFkICE9IC0xKSB7CisgICAgaWYgKGMycHJlYWQgIT0gLTEpCiAgICAgICAgIFBPU0lYX0NBTEwoY2xvc2UoYzJwcmVhZCkpOwotICAgIH0KLSAgICBpZiAoZXJycmVhZCAhPSAtMSkgeworICAgIGlmIChlcnJyZWFkICE9IC0xKQogICAgICAgICBQT1NJWF9DQUxMKGNsb3NlKGVycnJlYWQpKTsKLSAgICB9CiAgICAgUE9TSVhfQ0FMTChjbG9zZShlcnJwaXBlX3JlYWQpKTsKIAogICAgIC8qIFdoZW4gZHVwaW5nIGZkcywgaWYgdGhlcmUgYXJpc2VzIGEgc2l0dWF0aW9uIHdoZXJlIG9uZSBvZiB0aGUgZmRzIGlzCkBAIC0zNzksMzggKzQyOSwzNCBAQAogICAgICAgIGR1cDIoKSByZW1vdmVzIHRoZSBDTE9FWEVDIGZsYWcgYnV0IHdlIG11c3QgZG8gaXQgb3Vyc2VsdmVzIGlmIGR1cDIoKQogICAgICAgIHdvdWxkIGJlIGEgbm8tb3AgKGlzc3VlICMxMDgwNikuICovCiAgICAgaWYgKHAyY3JlYWQgPT0gMCkgewotICAgICAgICBpbnQgb2xkID0gZmNudGwocDJjcmVhZCwgRl9HRVRGRCk7Ci0gICAgICAgIGlmIChvbGQgIT0gLTEpCi0gICAgICAgICAgICBmY250bChwMmNyZWFkLCBGX1NFVEZELCBvbGQgJiB+RkRfQ0xPRVhFQyk7Ci0gICAgfSBlbHNlIGlmIChwMmNyZWFkICE9IC0xKSB7CisgICAgICAgIGlmIChfUHlfc2V0X2luaGVyaXRhYmxlKHAyY3JlYWQsIDEsIE5VTEwpIDwgMCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorICAgIGVsc2UgaWYgKHAyY3JlYWQgIT0gLTEpCiAgICAgICAgIFBPU0lYX0NBTEwoZHVwMihwMmNyZWFkLCAwKSk7ICAvKiBzdGRpbiAqLwotICAgIH0KKwogICAgIGlmIChjMnB3cml0ZSA9PSAxKSB7Ci0gICAgICAgIGludCBvbGQgPSBmY250bChjMnB3cml0ZSwgRl9HRVRGRCk7Ci0gICAgICAgIGlmIChvbGQgIT0gLTEpCi0gICAgICAgICAgICBmY250bChjMnB3cml0ZSwgRl9TRVRGRCwgb2xkICYgfkZEX0NMT0VYRUMpOwotICAgIH0gZWxzZSBpZiAoYzJwd3JpdGUgIT0gLTEpIHsKKyAgICAgICAgaWYgKF9QeV9zZXRfaW5oZXJpdGFibGUoYzJwd3JpdGUsIDEsIE5VTEwpIDwgMCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorICAgIGVsc2UgaWYgKGMycHdyaXRlICE9IC0xKQogICAgICAgICBQT1NJWF9DQUxMKGR1cDIoYzJwd3JpdGUsIDEpKTsgIC8qIHN0ZG91dCAqLwotICAgIH0KKwogICAgIGlmIChlcnJ3cml0ZSA9PSAyKSB7Ci0gICAgICAgIGludCBvbGQgPSBmY250bChlcnJ3cml0ZSwgRl9HRVRGRCk7Ci0gICAgICAgIGlmIChvbGQgIT0gLTEpCi0gICAgICAgICAgICBmY250bChlcnJ3cml0ZSwgRl9TRVRGRCwgb2xkICYgfkZEX0NMT0VYRUMpOwotICAgIH0gZWxzZSBpZiAoZXJyd3JpdGUgIT0gLTEpIHsKLSAgICAgICAgUE9TSVhfQ0FMTChkdXAyKGVycndyaXRlLCAyKSk7ICAvKiBzdGRlcnIgKi8KKyAgICAgICAgaWYgKF9QeV9zZXRfaW5oZXJpdGFibGUoZXJyd3JpdGUsIDEsIE5VTEwpIDwgMCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQorICAgIGVsc2UgaWYgKGVycndyaXRlICE9IC0xKQorICAgICAgICBQT1NJWF9DQUxMKGR1cDIoZXJyd3JpdGUsIDIpKTsgIC8qIHN0ZGVyciAqLwogCiAgICAgLyogQ2xvc2UgcGlwZSBmZHMuICBNYWtlIHN1cmUgd2UgZG9uJ3QgY2xvc2UgdGhlIHNhbWUgZmQgbW9yZSB0aGFuICovCiAgICAgLyogb25jZSwgb3Igc3RhbmRhcmQgZmRzLiAqLwotICAgIGlmIChwMmNyZWFkID4gMikgeworICAgIGlmIChwMmNyZWFkID4gMikKICAgICAgICAgUE9TSVhfQ0FMTChjbG9zZShwMmNyZWFkKSk7Ci0gICAgfQotICAgIGlmIChjMnB3cml0ZSA+IDIgJiYgYzJwd3JpdGUgIT0gcDJjcmVhZCkgeworICAgIGlmIChjMnB3cml0ZSA+IDIgJiYgYzJwd3JpdGUgIT0gcDJjcmVhZCkKICAgICAgICAgUE9TSVhfQ0FMTChjbG9zZShjMnB3cml0ZSkpOwotICAgIH0KLSAgICBpZiAoZXJyd3JpdGUgIT0gYzJwd3JpdGUgJiYgZXJyd3JpdGUgIT0gcDJjcmVhZCAmJiBlcnJ3cml0ZSA+IDIpIHsKKyAgICBpZiAoZXJyd3JpdGUgIT0gYzJwd3JpdGUgJiYgZXJyd3JpdGUgIT0gcDJjcmVhZCAmJiBlcnJ3cml0ZSA+IDIpCiAgICAgICAgIFBPU0lYX0NBTEwoY2xvc2UoZXJyd3JpdGUpKTsKLSAgICB9CiAKICAgICBpZiAoY3dkKQogICAgICAgICBQT1NJWF9DQUxMKGNoZGlyKGN3ZCkpOwpAQCAtNDQyLDE0ICs0ODgsOCBAQAogCiAgICAgLyogY2xvc2UgRkRzIGFmdGVyIGV4ZWN1dGluZyBwcmVleGVjX2ZuLCB3aGljaCBtaWdodCBvcGVuIEZEcyAqLwogICAgIGlmIChjbG9zZV9mZHMpIHsKLSAgICAgICAgaW50IGxvY2FsX21heF9mZCA9IG1heF9mZDsKLSNpZiBkZWZpbmVkKF9fTmV0QlNEX18pCi0gICAgICAgIGxvY2FsX21heF9mZCA9IGZjbnRsKDAsIEZfTUFYRkQpOwotICAgICAgICBpZiAobG9jYWxfbWF4X2ZkIDwgMCkKLSAgICAgICAgICAgIGxvY2FsX21heF9mZCA9IG1heF9mZDsKLSNlbmRpZgogICAgICAgICAvKiBUT0RPIEhQLVVYIGNvdWxkIHVzZSBwc3RhdF9nZXRwcm9jKCkgaWYgYW55b25lIGNhcmVzIGFib3V0IGl0LiAqLwotICAgICAgICBfY2xvc2Vfb3Blbl9mZF9yYW5nZSgzLCBsb2NhbF9tYXhfZmQsIHB5X2Zkc190b19rZWVwKTsKKyAgICAgICAgX2Nsb3NlX29wZW5fZmRzKDMsIHB5X2Zkc190b19rZWVwKTsKICAgICB9CiAKICAgICAvKiBUaGlzIGxvb3AgbWF0Y2hlcyB0aGUgTGliL29zLnB5IF9leGVjdnBlKCkncyBQQVRIIHNlYXJjaCB3aGVuICovCkBAIC00OTIsNyArNTMyLDcgQEAKICAgICAgICAgLyogV2UgY2FuJ3QgY2FsbCBzdHJlcnJvcihzYXZlZF9lcnJubykuICBJdCBpcyBub3QgYXN5bmMgc2lnbmFsIHNhZmUuCiAgICAgICAgICAqIFRoZSBwYXJlbnQgcHJvY2VzcyB3aWxsIGxvb2sgdGhlIGVycm9yIG1lc3NhZ2UgdXAuICovCiAgICAgfSBlbHNlIHsKLSAgICAgICAgdW51c2VkID0gd3JpdGUoZXJycGlwZV93cml0ZSwgIlJ1bnRpbWVFcnJvcjowOiIsIDE1KTsKKyAgICAgICAgdW51c2VkID0gd3JpdGUoZXJycGlwZV93cml0ZSwgIlN1YnByb2Nlc3NFcnJvcjowOiIsIDE4KTsKICAgICAgICAgdW51c2VkID0gd3JpdGUoZXJycGlwZV93cml0ZSwgZXJyX21zZywgc3RybGVuKGVycl9tc2cpKTsKICAgICB9CiAgICAgaWYgKHVudXNlZCkgcmV0dXJuOyAgLyogc2lsbHk/IHllcyEgYXZvaWRzIGdjYyBjb21waWxlciB3YXJuaW5nLiAqLwpAQCAtNTE2LDYgKzU1Niw3IEBACiAgICAgaW50IG5lZWRfdG9fcmVlbmFibGVfZ2MgPSAwOwogICAgIGNoYXIgKmNvbnN0ICpleGVjX2FycmF5LCAqY29uc3QgKmFyZ3YgPSBOVUxMLCAqY29uc3QgKmVudnAgPSBOVUxMOwogICAgIFB5X3NzaXplX3QgYXJnX251bTsKKyAgICBpbnQgaW1wb3J0X2xvY2tfaGVsZCA9IDA7CiAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoCiAgICAgICAgICAgICBhcmdzLCAiT09wT09PaWlpaWlpaWlpaU86Zm9ya19leGVjIiwKQEAgLTU0NCw3ICs1ODUsNyBAQAogICAgICAgICBQeU9iamVjdCAqcmVzdWx0OwogICAgICAgICBfUHlfSURFTlRJRklFUihpc2VuYWJsZWQpOwogICAgICAgICBfUHlfSURFTlRJRklFUihkaXNhYmxlKTsKLSAgICAgICAgCisKICAgICAgICAgZ2NfbW9kdWxlID0gUHlJbXBvcnRfSW1wb3J0TW9kdWxlKCJnYyIpOwogICAgICAgICBpZiAoZ2NfbW9kdWxlID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTU2OCwxMCArNjA5LDggQEAKICAgICB9CiAKICAgICBleGVjX2FycmF5ID0gX1B5U2VxdWVuY2VfQnl0ZXNUb0NoYXJwQXJyYXkoZXhlY3V0YWJsZV9saXN0KTsKLSAgICBpZiAoIWV4ZWNfYXJyYXkpIHsKLSAgICAgICAgUHlfWERFQ1JFRihnY19tb2R1bGUpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9CisgICAgaWYgKCFleGVjX2FycmF5KQorICAgICAgICBnb3RvIGNsZWFudXA7CiAKICAgICAvKiBDb252ZXJ0IGFyZ3MgYW5kIGVudiBpbnRvIGFwcHJvcHJpYXRlIGFyZ3VtZW50cyBmb3IgZXhlYygpICovCiAgICAgLyogVGhlc2UgY29udmVyc2lvbnMgYXJlIGRvbmUgaW4gdGhlIHBhcmVudCBwcm9jZXNzIHRvIGF2b2lkIGFsbG9jYXRpbmcKQEAgLTYxMyw2ICs2NTIsNyBAQAogICAgICAgICBpZiAoIXByZWV4ZWNfZm5fYXJnc190dXBsZSkKICAgICAgICAgICAgIGdvdG8gY2xlYW51cDsKICAgICAgICAgX1B5SW1wb3J0X0FjcXVpcmVMb2NrKCk7CisgICAgICAgIGltcG9ydF9sb2NrX2hlbGQgPSAxOwogICAgIH0KIAogICAgIGlmIChjd2Rfb2JqICE9IFB5X05vbmUpIHsKQEAgLTY1OSw3ICs2OTksOSBAQAogICAgICAgICBfUHlJbXBvcnRfUmVsZWFzZUxvY2soKSA8IDAgJiYgIVB5RXJyX09jY3VycmVkKCkpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJub3QgaG9sZGluZyB0aGUgaW1wb3J0IGxvY2siKTsKKyAgICAgICAgcGlkID0gLTE7CiAgICAgfQorICAgIGltcG9ydF9sb2NrX2hlbGQgPSAwOwogCiAgICAgLyogUGFyZW50IHByb2Nlc3MgKi8KICAgICBpZiAoZW52cCkKQEAgLTY2OSw5ICs3MTEsOCBAQAogICAgIF9QeV9GcmVlQ2hhclBBcnJheShleGVjX2FycmF5KTsKIAogICAgIC8qIFJlZW5hYmxlIGdjIGluIHRoZSBwYXJlbnQgcHJvY2VzcyAob3IgaWYgZm9yayBmYWlsZWQpLiAqLwotICAgIGlmIChuZWVkX3RvX3JlZW5hYmxlX2djICYmIF9lbmFibGVfZ2MoZ2NfbW9kdWxlKSkgewotICAgICAgICBQeV9YREVDUkVGKGdjX21vZHVsZSk7Ci0gICAgICAgIHJldHVybiBOVUxMOworICAgIGlmIChfZW5hYmxlX2djKG5lZWRfdG9fcmVlbmFibGVfZ2MsIGdjX21vZHVsZSkpIHsKKyAgICAgICAgcGlkID0gLTE7CiAgICAgfQogICAgIFB5X1hERUNSRUYocHJlZXhlY19mbl9hcmdzX3R1cGxlKTsKICAgICBQeV9YREVDUkVGKGdjX21vZHVsZSk7CkBAIC02ODIsMTggKzcyMywxOCBAQAogICAgIHJldHVybiBQeUxvbmdfRnJvbVBpZChwaWQpOwogCiBjbGVhbnVwOgorICAgIGlmIChpbXBvcnRfbG9ja19oZWxkKQorICAgICAgICBfUHlJbXBvcnRfUmVsZWFzZUxvY2soKTsKICAgICBpZiAoZW52cCkKICAgICAgICAgX1B5X0ZyZWVDaGFyUEFycmF5KGVudnApOwogICAgIGlmIChhcmd2KQogICAgICAgICBfUHlfRnJlZUNoYXJQQXJyYXkoYXJndik7Ci0gICAgX1B5X0ZyZWVDaGFyUEFycmF5KGV4ZWNfYXJyYXkpOworICAgIGlmIChleGVjX2FycmF5KQorICAgICAgICBfUHlfRnJlZUNoYXJQQXJyYXkoZXhlY19hcnJheSk7CiAgICAgUHlfWERFQ1JFRihjb252ZXJ0ZWRfYXJncyk7CiAgICAgUHlfWERFQ1JFRihmYXN0X2FyZ3MpOwogICAgIFB5X1hERUNSRUYocHJlZXhlY19mbl9hcmdzX3R1cGxlKTsKLQotICAgIC8qIFJlZW5hYmxlIGdjIGlmIGl0IHdhcyBkaXNhYmxlZC4gKi8KLSAgICBpZiAobmVlZF90b19yZWVuYWJsZV9nYykKLSAgICAgICAgX2VuYWJsZV9nYyhnY19tb2R1bGUpOworICAgIF9lbmFibGVfZ2MobmVlZF90b19yZWVuYWJsZV9nYywgZ2NfbW9kdWxlKTsKICAgICBQeV9YREVDUkVGKGdjX21vZHVsZSk7CiAgICAgcmV0dXJuIE5VTEw7CiB9CkBAIC03MjEsODggKzc2Miw2IEBACiBSYWlzZXM6IE9ubHkgb24gYW4gZXJyb3IgaW4gdGhlIHBhcmVudCBwcm9jZXNzLlxuXAogIik7CiAKLVB5RG9jX1NUUlZBUihzdWJwcm9jZXNzX2Nsb2V4ZWNfcGlwZV9kb2MsCi0iY2xvZXhlY19waXBlKCkgLT4gKHJlYWRfZW5kLCB3cml0ZV9lbmQpXG5cblwKLUNyZWF0ZSBhIHBpcGUgd2hvc2UgZW5kcyBoYXZlIHRoZSBjbG9leGVjIGZsYWcgc2V0OyB3cml0ZV9lbmQgd2lsbCBiZSA+PSAzLiIpOwotCi1zdGF0aWMgUHlPYmplY3QgKgotc3VicHJvY2Vzc19jbG9leGVjX3BpcGUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpub2FyZ3MpCi17Ci0gICAgaW50IGZkc1syXTsKLSAgICBpbnQgcmVzLCBzYXZlZF9lcnJubzsKLSAgICBsb25nIG9sZGZsYWdzOwotI2lmZGVmIEhBVkVfUElQRTIKLSAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgcmVzID0gcGlwZTIoZmRzLCBPX0NMT0VYRUMpOwotICAgIFB5X0VORF9BTExPV19USFJFQURTCi0gICAgaWYgKHJlcyAhPSAwICYmIGVycm5vID09IEVOT1NZUykKLSAgICB7Ci0jZW5kaWYKLSAgICAgICAgLyogV2UgaG9sZCB0aGUgR0lMIHdoaWNoIG9mZmVycyBzb21lIHByb3RlY3Rpb24gZnJvbSBvdGhlciBjb2RlIGNhbGxpbmcKLSAgICAgICAgICogZm9yaygpIGJlZm9yZSB0aGUgQ0xPRVhFQyBmbGFncyBoYXZlIGJlZW4gc2V0IGJ1dCB3ZSBjYW4ndCBndWFyYW50ZWUKLSAgICAgICAgICogYW55dGhpbmcgd2l0aG91dCBwaXBlMigpLiAqLwotICAgICAgICByZXMgPSBwaXBlKGZkcyk7Ci0KLSAgICAgICAgaWYgKHJlcyA9PSAwKSB7Ci0gICAgICAgICAgICBvbGRmbGFncyA9IGZjbnRsKGZkc1swXSwgRl9HRVRGRCwgMCk7Ci0gICAgICAgICAgICBpZiAob2xkZmxhZ3MgPCAwKSByZXMgPSBvbGRmbGFnczsKLSAgICAgICAgfQotICAgICAgICBpZiAocmVzID09IDApCi0gICAgICAgICAgICByZXMgPSBmY250bChmZHNbMF0sIEZfU0VURkQsIG9sZGZsYWdzIHwgRkRfQ0xPRVhFQyk7Ci0KLSAgICAgICAgaWYgKHJlcyA9PSAwKSB7Ci0gICAgICAgICAgICBvbGRmbGFncyA9IGZjbnRsKGZkc1sxXSwgRl9HRVRGRCwgMCk7Ci0gICAgICAgICAgICBpZiAob2xkZmxhZ3MgPCAwKSByZXMgPSBvbGRmbGFnczsKLSAgICAgICAgfQotICAgICAgICBpZiAocmVzID09IDApCi0gICAgICAgICAgICByZXMgPSBmY250bChmZHNbMV0sIEZfU0VURkQsIG9sZGZsYWdzIHwgRkRfQ0xPRVhFQyk7Ci0jaWZkZWYgSEFWRV9QSVBFMgotICAgIH0KLSNlbmRpZgotICAgIGlmIChyZXMgPT0gMCAmJiBmZHNbMV0gPCAzKSB7Ci0gICAgICAgIC8qIFdlIGFsd2F5cyB3YW50IHRoZSB3cml0ZSBlbmQgb2YgdGhlIHBpcGUgdG8gYXZvaWQgZmRzIDAsIDEgYW5kIDIKLSAgICAgICAgICogYXMgb3VyIGNoaWxkIG1heSBjbGFpbSB0aG9zZSBmb3Igc3RkaW8gY29ubmVjdGlvbnMuICovCi0gICAgICAgIGludCB3cml0ZV9mZCA9IGZkc1sxXTsKLSAgICAgICAgaW50IGZkc190b19jbG9zZVszXSA9IHstMSwgLTEsIC0xfTsKLSAgICAgICAgaW50IGZkc190b19jbG9zZV9pZHggPSAwOwotI2lmZGVmIEZfRFVQRkRfQ0xPRVhFQwotICAgICAgICBmZHNfdG9fY2xvc2VbZmRzX3RvX2Nsb3NlX2lkeCsrXSA9IHdyaXRlX2ZkOwotICAgICAgICB3cml0ZV9mZCA9IGZjbnRsKHdyaXRlX2ZkLCBGX0RVUEZEX0NMT0VYRUMsIDMpOwotICAgICAgICBpZiAod3JpdGVfZmQgPCAwKSAgLyogV2UgZG9uJ3Qgc3VwcG9ydCBGX0RVUEZEX0NMT0VYRUMgLyBvdGhlciBlcnJvciAqLwotI2VuZGlmCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8qIFVzZSBkdXAgYSBmZXcgdGltZXMgdW50aWwgd2UgZ2V0IGEgZGVzaXJhYmxlIGZkLiAqLwotICAgICAgICAgICAgZm9yICg7IGZkc190b19jbG9zZV9pZHggPCAzOyArK2Zkc190b19jbG9zZV9pZHgpIHsKLSAgICAgICAgICAgICAgICBmZHNfdG9fY2xvc2VbZmRzX3RvX2Nsb3NlX2lkeF0gPSB3cml0ZV9mZDsKLSAgICAgICAgICAgICAgICB3cml0ZV9mZCA9IGR1cCh3cml0ZV9mZCk7Ci0gICAgICAgICAgICAgICAgaWYgKHdyaXRlX2ZkID49IDMpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIC8qIFdlIG1heSBkdXAgYSBmZXcgZXh0cmEgdGltZXMgaWYgaXQgcmV0dXJucyBhbiBlcnJvciBidXQKLSAgICAgICAgICAgICAgICAgKiB0aGF0IGlzIG9rYXkuICBSZXBlYXQgY2FsbHMgc2hvdWxkIHJldHVybiB0aGUgc2FtZSBlcnJvci4gKi8KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh3cml0ZV9mZCA8IDApIHJlcyA9IHdyaXRlX2ZkOwotICAgICAgICAgICAgaWYgKHJlcyA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgb2xkZmxhZ3MgPSBmY250bCh3cml0ZV9mZCwgRl9HRVRGRCwgMCk7Ci0gICAgICAgICAgICAgICAgaWYgKG9sZGZsYWdzIDwgMCkgcmVzID0gb2xkZmxhZ3M7Ci0gICAgICAgICAgICAgICAgaWYgKHJlcyA9PSAwKQotICAgICAgICAgICAgICAgICAgICByZXMgPSBmY250bCh3cml0ZV9mZCwgRl9TRVRGRCwgb2xkZmxhZ3MgfCBGRF9DTE9FWEVDKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBzYXZlZF9lcnJubyA9IGVycm5vOwotICAgICAgICAvKiBDbG9zZSBmZHMgd2UgdHJpZWQgZm9yIHRoZSB3cml0ZSBlbmQgdGhhdCB3ZXJlIHRvbyBsb3cuICovCi0gICAgICAgIGZvciAoZmRzX3RvX2Nsb3NlX2lkeD0wOyBmZHNfdG9fY2xvc2VfaWR4IDwgMzsgKytmZHNfdG9fY2xvc2VfaWR4KSB7Ci0gICAgICAgICAgICBpbnQgdGVtcF9mZCA9IGZkc190b19jbG9zZVtmZHNfdG9fY2xvc2VfaWR4XTsKLSAgICAgICAgICAgIHdoaWxlICh0ZW1wX2ZkID49IDAgJiYgY2xvc2UodGVtcF9mZCkgPCAwICYmIGVycm5vID09IEVJTlRSKTsKLSAgICAgICAgfQotICAgICAgICBlcnJubyA9IHNhdmVkX2Vycm5vOyAgLyogcmVwb3J0IGR1cCBvciBmY250bCBlcnJvcnMsIG5vdCBjbG9zZS4gKi8KLSAgICAgICAgZmRzWzFdID0gd3JpdGVfZmQ7Ci0gICAgfSAgLyogZW5kIGlmIHdyaXRlIGZkIHdhcyB0b28gc21hbGwgKi8KLQotICAgIGlmIChyZXMgIT0gMCkKLSAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19PU0Vycm9yKTsKLSAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiKGlpKSIsIGZkc1swXSwgZmRzWzFdKTsKLX0KLQogLyogbW9kdWxlIGxldmVsIGNvZGUgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIFB5RG9jX1NUUlZBUihtb2R1bGVfZG9jLApAQCAtODExLDcgKzc3MCw2IEBACiAKIHN0YXRpYyBQeU1ldGhvZERlZiBtb2R1bGVfbWV0aG9kc1tdID0gewogICAgIHsiZm9ya19leGVjIiwgc3VicHJvY2Vzc19mb3JrX2V4ZWMsIE1FVEhfVkFSQVJHUywgc3VicHJvY2Vzc19mb3JrX2V4ZWNfZG9jfSwKLSAgICB7ImNsb2V4ZWNfcGlwZSIsIHN1YnByb2Nlc3NfY2xvZXhlY19waXBlLCBNRVRIX05PQVJHUywgc3VicHJvY2Vzc19jbG9leGVjX3BpcGVfZG9jfSwKICAgICB7TlVMTCwgTlVMTH0gIC8qIHNlbnRpbmVsICovCiB9OwogCkBAIC04MjcsMTEgKzc4NSw1IEBACiBQeU1PRElOSVRfRlVOQwogUHlJbml0X19wb3NpeHN1YnByb2Nlc3Modm9pZCkKIHsKLSNpZmRlZiBfU0NfT1BFTl9NQVgKLSAgICBtYXhfZmQgPSBzeXNjb25mKF9TQ19PUEVOX01BWCk7Ci0gICAgaWYgKG1heF9mZCA9PSAtMSkKLSNlbmRpZgotICAgICAgICBtYXhfZmQgPSAyNTY7ICAvKiBNYXRjaGVzIExpYi9zdWJwcm9jZXNzLnB5ICovCi0KICAgICByZXR1cm4gUHlNb2R1bGVfQ3JlYXRlKCZfcG9zaXhzdWJwcm9jZXNzbW9kdWxlKTsKIH0KZGlmZiAtLWdpdCBhL01vZHVsZXMvX3JhbmRvbW1vZHVsZS5jIGIvTW9kdWxlcy9fcmFuZG9tbW9kdWxlLmMKaW5kZXggMjFhMmIwOS4uNDE2ZTI2NiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fcmFuZG9tbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9fcmFuZG9tbW9kdWxlLmMKQEAgLTE2OCw5ICsxNjgsOSBAQAogLyogaW5pdF9rZXkgaXMgdGhlIGFycmF5IGZvciBpbml0aWFsaXppbmcga2V5cyAqLwogLyoga2V5X2xlbmd0aCBpcyBpdHMgbGVuZ3RoICovCiBzdGF0aWMgUHlPYmplY3QgKgotaW5pdF9ieV9hcnJheShSYW5kb21PYmplY3QgKnNlbGYsIHVuc2lnbmVkIGxvbmcgaW5pdF9rZXlbXSwgdW5zaWduZWQgbG9uZyBrZXlfbGVuZ3RoKQoraW5pdF9ieV9hcnJheShSYW5kb21PYmplY3QgKnNlbGYsIHVuc2lnbmVkIGxvbmcgaW5pdF9rZXlbXSwgc2l6ZV90IGtleV9sZW5ndGgpCiB7Ci0gICAgdW5zaWduZWQgaW50IGksIGosIGs7ICAgICAgIC8qIHdhcyBzaWduZWQgaW4gdGhlIG9yaWdpbmFsIGNvZGUuIFJESCAxMi8xNi8yMDAyICovCisgICAgc2l6ZV90IGksIGosIGs7ICAgICAgIC8qIHdhcyBzaWduZWQgaW4gdGhlIG9yaWdpbmFsIGNvZGUuIFJESCAxMi8xNi8yMDAyICovCiAgICAgdW5zaWduZWQgbG9uZyAqbXQ7CiAKICAgICBtdCA9IHNlbGYtPnN0YXRlOwpAQCAtMTc5LDcgKzE3OSw3IEBACiAgICAgayA9IChOPmtleV9sZW5ndGggPyBOIDoga2V5X2xlbmd0aCk7CiAgICAgZm9yICg7IGs7IGstLSkgewogICAgICAgICBtdFtpXSA9IChtdFtpXSBeICgobXRbaS0xXSBeIChtdFtpLTFdID4+IDMwKSkgKiAxNjY0NTI1VUwpKQotICAgICAgICAgICAgICAgICArIGluaXRfa2V5W2pdICsgajsgLyogbm9uIGxpbmVhciAqLworICAgICAgICAgICAgICAgICArIGluaXRfa2V5W2pdICsgKHVuc2lnbmVkIGxvbmcpajsgLyogbm9uIGxpbmVhciAqLwogICAgICAgICBtdFtpXSAmPSAweGZmZmZmZmZmVUw7IC8qIGZvciBXT1JEU0laRSA+IDMyIG1hY2hpbmVzICovCiAgICAgICAgIGkrKzsgaisrOwogICAgICAgICBpZiAoaT49TikgeyBtdFswXSA9IG10W04tMV07IGk9MTsgfQpAQCAtMTg3LDcgKzE4Nyw3IEBACiAgICAgfQogICAgIGZvciAoaz1OLTE7IGs7IGstLSkgewogICAgICAgICBtdFtpXSA9IChtdFtpXSBeICgobXRbaS0xXSBeIChtdFtpLTFdID4+IDMwKSkgKiAxNTY2MDgzOTQxVUwpKQotICAgICAgICAgICAgICAgICAtIGk7IC8qIG5vbiBsaW5lYXIgKi8KKyAgICAgICAgICAgICAgICAgLSAodW5zaWduZWQgbG9uZylpOyAvKiBub24gbGluZWFyICovCiAgICAgICAgIG10W2ldICY9IDB4ZmZmZmZmZmZVTDsgLyogZm9yIFdPUkRTSVpFID4gMzIgbWFjaGluZXMgKi8KICAgICAgICAgaSsrOwogICAgICAgICBpZiAoaT49TikgeyBtdFswXSA9IG10W04tMV07IGk9MTsgfQpAQCAtMjA3LDE0ICsyMDcsMTEgQEAKIHJhbmRvbV9zZWVkKFJhbmRvbU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CiAgICAgUHlPYmplY3QgKnJlc3VsdCA9IE5VTEw7ICAgICAgICAgICAgLyogZ3VpbHR5IHVudGlsIHByb3ZlZCBpbm5vY2VudCAqLwotICAgIFB5T2JqZWN0ICptYXNrbG93ZXIgPSBOVUxMOwotICAgIFB5T2JqZWN0ICp0aGlydHl0d28gPSBOVUxMOwogICAgIFB5T2JqZWN0ICpuID0gTlVMTDsKLSAgICB1bnNpZ25lZCBsb25nICpuZXdfa2V5LCAqa2V5ID0gTlVMTDsKLSAgICB1bnNpZ25lZCBsb25nIGtleW1heDsgICAgICAgICAgICAgICAvKiAjIG9mIGFsbG9jYXRlZCBzbG90cyBpbiBrZXkgKi8KLSAgICB1bnNpZ25lZCBsb25nIGtleXVzZWQ7ICAgICAgICAgICAgICAvKiAjIG9mIHVzZWQgc2xvdHMgaW4ga2V5ICovCi0gICAgaW50IGVycjsKLQorICAgIHVuc2lnbmVkIGxvbmcgKmtleSA9IE5VTEw7CisgICAgdW5zaWduZWQgY2hhciAqa2V5X2FzX2J5dGVzID0gTlVMTDsKKyAgICBzaXplX3QgYml0cywga2V5dXNlZCwgaTsKKyAgICBpbnQgcmVzOwogICAgIFB5T2JqZWN0ICphcmcgPSBOVUxMOwogCiAgICAgaWYgKCFQeUFyZ19VbnBhY2tUdXBsZShhcmdzLCAic2VlZCIsIDAsIDEsICZhcmcpKQpAQCAtMjQzLDY5ICsyNDAsNDYgQEAKICAgICBpZiAobiA9PSBOVUxMKQogICAgICAgICBnb3RvIERvbmU7CiAKLSAgICAvKiBOb3cgc3BsaXQgbiBpbnRvIDMyLWJpdCBjaHVua3MsIGZyb20gdGhlIHJpZ2h0LiAgRWFjaCBwaWVjZSBpcwotICAgICAqIHN0b3JlZCBpbnRvIGtleSwgd2hpY2ggaGFzIGEgY2FwYWNpdHkgb2Yga2V5bWF4IGNodW5rcywgb2Ygd2hpY2gKLSAgICAgKiBrZXl1c2VkIGFyZSBmaWxsZWQuICBBbGFzLCB0aGUgcmVwZWF0ZWQgc2hpZnRpbmcgbWFrZXMgdGhpcyBhCi0gICAgICogcXVhZHJhdGljLXRpbWUgYWxnb3JpdGhtOyB3ZSdkIHJlYWxseSBsaWtlIHRvIHVzZQotICAgICAqIF9QeUxvbmdfQXNCeXRlQXJyYXkgaGVyZSwgYnV0IHRoZW4gd2UnZCBoYXZlIHRvIGJyZWFrIGludG8gdGhlCi0gICAgICogbG9uZyByZXByZXNlbnRhdGlvbiB0byBmaWd1cmUgb3V0IGhvdyBiaWcgYW4gYXJyYXkgd2FzIG5lZWRlZAotICAgICAqIGluIGFkdmFuY2UuCi0gICAgICovCi0gICAga2V5bWF4ID0gODsgICAgICAgICAvKiBhcmJpdHJhcnk7IGdyb3dzIGxhdGVyIGlmIG5lZWRlZCAqLwotICAgIGtleXVzZWQgPSAwOwotICAgIGtleSA9ICh1bnNpZ25lZCBsb25nICopUHlNZW1fTWFsbG9jKGtleW1heCAqIHNpemVvZigqa2V5KSk7Ci0gICAgaWYgKGtleSA9PSBOVUxMKQorICAgIC8qIE5vdyBzcGxpdCBuIGludG8gMzItYml0IGNodW5rcywgZnJvbSB0aGUgcmlnaHQuICovCisgICAgYml0cyA9IF9QeUxvbmdfTnVtQml0cyhuKTsKKyAgICBpZiAoYml0cyA9PSAoc2l6ZV90KS0xICYmIFB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgIGdvdG8gRG9uZTsKIAotICAgIG1hc2tsb3dlciA9IFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nKDB4ZmZmZmZmZmZVKTsKLSAgICBpZiAobWFza2xvd2VyID09IE5VTEwpCi0gICAgICAgIGdvdG8gRG9uZTsKLSAgICB0aGlydHl0d28gPSBQeUxvbmdfRnJvbUxvbmcoMzJMKTsKLSAgICBpZiAodGhpcnR5dHdvID09IE5VTEwpCi0gICAgICAgIGdvdG8gRG9uZTsKLSAgICB3aGlsZSAoKGVycj1QeU9iamVjdF9Jc1RydWUobikpKSB7Ci0gICAgICAgIFB5T2JqZWN0ICpuZXduOwotICAgICAgICBQeU9iamVjdCAqcHljaHVuazsKLSAgICAgICAgdW5zaWduZWQgbG9uZyBjaHVuazsKKyAgICAvKiBGaWd1cmUgb3V0IGhvdyBtYW55IDMyLWJpdCBjaHVua3MgdGhpcyBnaXZlcyB1cy4gKi8KKyAgICBrZXl1c2VkID0gYml0cyA9PSAwID8gMSA6IChiaXRzIC0gMSkgLyAzMiArIDE7CiAKLSAgICAgICAgaWYgKGVyciA9PSAtMSkKLSAgICAgICAgICAgIGdvdG8gRG9uZTsKLSAgICAgICAgcHljaHVuayA9IFB5TnVtYmVyX0FuZChuLCBtYXNrbG93ZXIpOwotICAgICAgICBpZiAocHljaHVuayA9PSBOVUxMKQotICAgICAgICAgICAgZ290byBEb25lOwotICAgICAgICBjaHVuayA9IFB5TG9uZ19Bc1Vuc2lnbmVkTG9uZyhweWNodW5rKTsKLSAgICAgICAgUHlfREVDUkVGKHB5Y2h1bmspOwotICAgICAgICBpZiAoY2h1bmsgPT0gKHVuc2lnbmVkIGxvbmcpLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKLSAgICAgICAgICAgIGdvdG8gRG9uZTsKLSAgICAgICAgbmV3biA9IFB5TnVtYmVyX1JzaGlmdChuLCB0aGlydHl0d28pOwotICAgICAgICBpZiAobmV3biA9PSBOVUxMKQotICAgICAgICAgICAgZ290byBEb25lOwotICAgICAgICBQeV9ERUNSRUYobik7Ci0gICAgICAgIG4gPSBuZXduOwotICAgICAgICBpZiAoa2V5dXNlZCA+PSBrZXltYXgpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgYmlnZ2VyID0ga2V5bWF4IDw8IDE7Ci0gICAgICAgICAgICBpZiAoKGJpZ2dlciA+PiAxKSAhPSBrZXltYXggfHwKLSAgICAgICAgICAgICAgICBiaWdnZXIgPiBQWV9TU0laRV9UX01BWCAvIHNpemVvZigqa2V5KSkgewotICAgICAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7Ci0gICAgICAgICAgICAgICAgZ290byBEb25lOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbmV3X2tleSA9ICh1bnNpZ25lZCBsb25nICopUHlNZW1fUmVhbGxvYyhrZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaWdnZXIgKiBzaXplb2YoKmtleSkpOwotICAgICAgICAgICAgaWYgKG5ld19rZXkgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICBnb3RvIERvbmU7Ci0gICAgICAgICAgICBrZXkgPSBuZXdfa2V5OwotICAgICAgICAgICAga2V5bWF4ID0gYmlnZ2VyOwotICAgICAgICB9Ci0gICAgICAgIGFzc2VydChrZXl1c2VkIDwga2V5bWF4KTsKLSAgICAgICAga2V5W2tleXVzZWQrK10gPSBjaHVuazsKKyAgICAvKiBDb252ZXJ0IHNlZWQgdG8gYnl0ZSBzZXF1ZW5jZS4gKi8KKyAgICBrZXlfYXNfYnl0ZXMgPSAodW5zaWduZWQgY2hhciAqKVB5TWVtX01hbGxvYygoc2l6ZV90KTQgKiBrZXl1c2VkKTsKKyAgICBpZiAoa2V5X2FzX2J5dGVzID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgZ290byBEb25lOworICAgIH0KKyAgICByZXMgPSBfUHlMb25nX0FzQnl0ZUFycmF5KChQeUxvbmdPYmplY3QgKiluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5X2FzX2J5dGVzLCBrZXl1c2VkICogNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsICAvKiBsaXR0bGUtZW5kaWFuICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKTsgLyogdW5zaWduZWQgKi8KKyAgICBpZiAocmVzID09IC0xKSB7CisgICAgICAgIFB5TWVtX0ZyZWUoa2V5X2FzX2J5dGVzKTsKKyAgICAgICAgZ290byBEb25lOwogICAgIH0KIAotICAgIGlmIChrZXl1c2VkID09IDApCi0gICAgICAgIGtleVtrZXl1c2VkKytdID0gMFVMOworICAgIC8qIEZpbGwgYXJyYXkgb2YgdW5zaWduZWQgbG9uZ3MgZnJvbSBieXRlIHNlcXVlbmNlLiAqLworICAgIGtleSA9ICh1bnNpZ25lZCBsb25nICopUHlNZW1fTWFsbG9jKHNpemVvZih1bnNpZ25lZCBsb25nKSAqIGtleXVzZWQpOworICAgIGlmIChrZXkgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICBQeU1lbV9GcmVlKGtleV9hc19ieXRlcyk7CisgICAgICAgIGdvdG8gRG9uZTsKKyAgICB9CisgICAgZm9yIChpID0gMDsgaSA8IGtleXVzZWQ7IGkrKykgeworICAgICAgICBrZXlbaV0gPQorICAgICAgICAgICAgKCh1bnNpZ25lZCBsb25nKWtleV9hc19ieXRlc1s0KmkgKyAwXSA8PCAwKSArCisgICAgICAgICAgICAoKHVuc2lnbmVkIGxvbmcpa2V5X2FzX2J5dGVzWzQqaSArIDFdIDw8IDgpICsKKyAgICAgICAgICAgICgodW5zaWduZWQgbG9uZylrZXlfYXNfYnl0ZXNbNCppICsgMl0gPDwgMTYpICsKKyAgICAgICAgICAgICgodW5zaWduZWQgbG9uZylrZXlfYXNfYnl0ZXNbNCppICsgM10gPDwgMjQpOworICAgIH0KKyAgICBQeU1lbV9GcmVlKGtleV9hc19ieXRlcyk7CiAgICAgcmVzdWx0ID0gaW5pdF9ieV9hcnJheShzZWxmLCBrZXksIGtleXVzZWQpOwogRG9uZToKLSAgICBQeV9YREVDUkVGKG1hc2tsb3dlcik7Ci0gICAgUHlfWERFQ1JFRih0aGlydHl0d28pOwogICAgIFB5X1hERUNSRUYobik7CiAgICAgUHlNZW1fRnJlZShrZXkpOwogICAgIHJldHVybiByZXN1bHQ7CkBAIC0zNjYsNiArMzQwLDEwIEBACiAgICAgaW5kZXggPSBQeUxvbmdfQXNMb25nKFB5VHVwbGVfR0VUX0lURU0oc3RhdGUsIGkpKTsKICAgICBpZiAoaW5kZXggPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+IE4pIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJpbnZhbGlkIHN0YXRlIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KICAgICBzZWxmLT5pbmRleCA9IChpbnQpaW5kZXg7CiAKICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CkBAIC0zODksNiArMzY3LDkgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCisgICAgaWYgKGsgPD0gMzIpICAvKiBGYXN0IHBhdGggKi8KKyAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nKGdlbnJhbmRfaW50MzIoc2VsZikgPj4gKDMyIC0gaykpOworCiAgICAgYnl0ZXMgPSAoKGsgLSAxKSAvIDMyICsgMSkgKiA0OwogICAgIGJ5dGVhcnJheSA9ICh1bnNpZ25lZCBjaGFyICopUHlNZW1fTWFsbG9jKGJ5dGVzKTsKICAgICBpZiAoYnl0ZWFycmF5ID09IE5VTEwpIHsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3NxbGl0ZS9jYWNoZS5jIGIvTW9kdWxlcy9fc3FsaXRlL2NhY2hlLmMKaW5kZXggMzY5MzM2My4uMzY4OWE0ZSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fc3FsaXRlL2NhY2hlLmMKKysrIGIvTW9kdWxlcy9fc3FsaXRlL2NhY2hlLmMKQEAgLTIxLDcgKzIxLDYgQEAKICAqIDMuIFRoaXMgbm90aWNlIG1heSBub3QgYmUgcmVtb3ZlZCBvciBhbHRlcmVkIGZyb20gYW55IHNvdXJjZSBkaXN0cmlidXRpb24uCiAgKi8KIAotI2luY2x1ZGUgInNxbGl0ZWNvbXBhdC5oIgogI2luY2x1ZGUgImNhY2hlLmgiCiAjaW5jbHVkZSA8bGltaXRzLmg+CiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3NxbGl0ZS9jb25uZWN0aW9uLmMgYi9Nb2R1bGVzL19zcWxpdGUvY29ubmVjdGlvbi5jCmluZGV4IDhjZjJkNmEuLmQzOTAzMjggMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3NxbGl0ZS9jb25uZWN0aW9uLmMKKysrIGIvTW9kdWxlcy9fc3FsaXRlL2Nvbm5lY3Rpb24uYwpAQCAtMjksNyArMjksNiBAQAogI2luY2x1ZGUgImN1cnNvci5oIgogI2luY2x1ZGUgInByZXBhcmVfcHJvdG9jb2wuaCIKICNpbmNsdWRlICJ1dGlsLmgiCi0jaW5jbHVkZSAic3FsaXRlY29tcGF0LmgiCiAKICNpbmNsdWRlICJweXRocmVhZC5oIgogCkBAIC00Miw2ICs0MSw4IEBACiAjZW5kaWYKICNlbmRpZgogCitfUHlfSURFTlRJRklFUihjdXJzb3IpOworCiBzdGF0aWMgaW50IHB5c3FsaXRlX2Nvbm5lY3Rpb25fc2V0X2lzb2xhdGlvbl9sZXZlbChweXNxbGl0ZV9Db25uZWN0aW9uKiBzZWxmLCBQeU9iamVjdCogaXNvbGF0aW9uX2xldmVsKTsKIHN0YXRpYyB2b2lkIF9weXNxbGl0ZV9kcm9wX3VudXNlZF9jdXJzb3JfcmVmZXJlbmNlcyhweXNxbGl0ZV9Db25uZWN0aW9uKiBzZWxmKTsKIApAQCAtNjAsNyArNjEsMTEgQEAKIAogaW50IHB5c3FsaXRlX2Nvbm5lY3Rpb25faW5pdChweXNxbGl0ZV9Db25uZWN0aW9uKiBzZWxmLCBQeU9iamVjdCogYXJncywgUHlPYmplY3QqIGt3YXJncykKIHsKLSAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7ImRhdGFiYXNlIiwgInRpbWVvdXQiLCAiZGV0ZWN0X3R5cGVzIiwgImlzb2xhdGlvbl9sZXZlbCIsICJjaGVja19zYW1lX3RocmVhZCIsICJmYWN0b3J5IiwgImNhY2hlZF9zdGF0ZW1lbnRzIiwgTlVMTCwgTlVMTH07CisgICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geworICAgICAgICAiZGF0YWJhc2UiLCAidGltZW91dCIsICJkZXRlY3RfdHlwZXMiLCAiaXNvbGF0aW9uX2xldmVsIiwKKyAgICAgICAgImNoZWNrX3NhbWVfdGhyZWFkIiwgImZhY3RvcnkiLCAiY2FjaGVkX3N0YXRlbWVudHMiLCAidXJpIiwKKyAgICAgICAgTlVMTAorICAgIH07CiAKICAgICBjaGFyKiBkYXRhYmFzZTsKICAgICBpbnQgZGV0ZWN0X3R5cGVzID0gMDsKQEAgLTY4LDExICs3MywxNCBAQAogICAgIFB5T2JqZWN0KiBmYWN0b3J5ID0gTlVMTDsKICAgICBpbnQgY2hlY2tfc2FtZV90aHJlYWQgPSAxOwogICAgIGludCBjYWNoZWRfc3RhdGVtZW50cyA9IDEwMDsKKyAgICBpbnQgdXJpID0gMDsKICAgICBkb3VibGUgdGltZW91dCA9IDUuMDsKICAgICBpbnQgcmM7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJzfGRpT2lPaSIsIGt3bGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZGF0YWJhc2UsICZ0aW1lb3V0LCAmZGV0ZWN0X3R5cGVzLCAmaXNvbGF0aW9uX2xldmVsLCAmY2hlY2tfc2FtZV90aHJlYWQsICZmYWN0b3J5LCAmY2FjaGVkX3N0YXRlbWVudHMpKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgInN8ZGlPaU9pcCIsIGt3bGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZGF0YWJhc2UsICZ0aW1lb3V0LCAmZGV0ZWN0X3R5cGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpc29sYXRpb25fbGV2ZWwsICZjaGVja19zYW1lX3RocmVhZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZmFjdG9yeSwgJmNhY2hlZF9zdGF0ZW1lbnRzLCAmdXJpKSkKICAgICB7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CkBAIC05MSw4ICs5OSwxOSBAQAogICAgIFB5X0lOQ1JFRigmUHlVbmljb2RlX1R5cGUpOwogICAgIHNlbGYtPnRleHRfZmFjdG9yeSA9IChQeU9iamVjdCopJlB5VW5pY29kZV9UeXBlOwogCisjaWZkZWYgU1FMSVRFX09QRU5fVVJJCisgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgIHJjID0gc3FsaXRlM19vcGVuX3YyKGRhdGFiYXNlLCAmc2VsZi0+ZGIsCisgICAgICAgICAgICAgICAgICAgICAgICAgU1FMSVRFX09QRU5fUkVBRFdSSVRFIHwgU1FMSVRFX09QRU5fQ1JFQVRFIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAodXJpID8gU1FMSVRFX09QRU5fVVJJIDogMCksIE5VTEwpOworI2Vsc2UKKyAgICBpZiAodXJpKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhweXNxbGl0ZV9Ob3RTdXBwb3J0ZWRFcnJvciwgIlVSSXMgbm90IHN1cHBvcnRlZCIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICByYyA9IHNxbGl0ZTNfb3BlbihkYXRhYmFzZSwgJnNlbGYtPmRiKTsKKyNlbmRpZgogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKICAgICBpZiAocmMgIT0gU1FMSVRFX09LKSB7CkBAIC01MDMsMTMgKzUyMiwyMCBAQAogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICBzcWxpdGUzX3Jlc3VsdF90ZXh0KGNvbnRleHQsIHN0ciwgLTEsIFNRTElURV9UUkFOU0lFTlQpOwogICAgIH0gZWxzZSBpZiAoUHlPYmplY3RfQ2hlY2tCdWZmZXIocHlfdmFsKSkgewotICAgICAgICBjb25zdCBjaGFyKiBidWZmZXI7Ci0gICAgICAgIFB5X3NzaXplX3QgYnVmbGVuOwotICAgICAgICBpZiAoUHlPYmplY3RfQXNDaGFyQnVmZmVyKHB5X3ZhbCwgJmJ1ZmZlciwgJmJ1ZmxlbikgIT0gMCkgewotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJjb3VsZCBub3QgY29udmVydCBCTE9CIHRvIGJ1ZmZlciIpOworICAgICAgICBQeV9idWZmZXIgdmlldzsKKyAgICAgICAgaWYgKFB5T2JqZWN0X0dldEJ1ZmZlcihweV92YWwsICZ2aWV3LCBQeUJVRl9TSU1QTEUpICE9IDApIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb3VsZCBub3QgY29udmVydCBCTE9CIHRvIGJ1ZmZlciIpOwogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9Ci0gICAgICAgIHNxbGl0ZTNfcmVzdWx0X2Jsb2IoY29udGV4dCwgYnVmZmVyLCBidWZsZW4sIFNRTElURV9UUkFOU0lFTlQpOworICAgICAgICBpZiAodmlldy5sZW4gPiBJTlRfTUFYKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQkxPQiBsb25nZXIgdGhhbiBJTlRfTUFYIGJ5dGVzIik7CisgICAgICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2aWV3KTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBzcWxpdGUzX3Jlc3VsdF9ibG9iKGNvbnRleHQsIHZpZXcuYnVmLCAoaW50KXZpZXcubGVuLCBTUUxJVEVfVFJBTlNJRU5UKTsKKyAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmlldyk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KQEAgLTY4Miw2ICs3MDgsOCBAQAogICAgIFB5T2JqZWN0KiogYWdncmVnYXRlX2luc3RhbmNlOwogICAgIF9QeV9JREVOVElGSUVSKGZpbmFsaXplKTsKICAgICBpbnQgb2s7CisgICAgUHlPYmplY3QgKmV4Y2VwdGlvbiwgKnZhbHVlLCAqdGI7CisgICAgaW50IHJlc3RvcmU7CiAKICNpZmRlZiBXSVRIX1RIUkVBRAogICAgIFB5R0lMU3RhdGVfU1RBVEUgdGhyZWFkc3RhdGU7CkBAIC02OTcsNyArNzI1LDEyIEBACiAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQogCisgICAgLyogS2VlcCB0aGUgZXhjZXB0aW9uIChpZiBhbnkpIG9mIHRoZSBsYXN0IGNhbGwgdG8gc3RlcCgpICovCisgICAgUHlFcnJfRmV0Y2goJmV4Y2VwdGlvbiwgJnZhbHVlLCAmdGIpOworICAgIHJlc3RvcmUgPSAxOworCiAgICAgZnVuY3Rpb25fcmVzdWx0ID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZCgqYWdncmVnYXRlX2luc3RhbmNlLCAmUHlJZF9maW5hbGl6ZSwgIiIpOworCiAgICAgUHlfREVDUkVGKCphZ2dyZWdhdGVfaW5zdGFuY2UpOwogCiAgICAgb2sgPSAwOwpAQCAtNzEyLDYgKzc0NSwxNyBAQAogICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKICAgICAgICAgfQogICAgICAgICBfc3FsaXRlM19yZXN1bHRfZXJyb3IoY29udGV4dCwgInVzZXItZGVmaW5lZCBhZ2dyZWdhdGUncyAnZmluYWxpemUnIG1ldGhvZCByYWlzZWQgZXJyb3IiLCAtMSk7CisjaWYgU1FMSVRFX1ZFUlNJT05fTlVNQkVSIDwgMzAwMzAwMworICAgICAgICAvKiB3aXRoIG9sZCBTUUxpdGUgdmVyc2lvbnMsIF9zcWxpdGUzX3Jlc3VsdF9lcnJvcigpIHNldHMgYSBuZXcgUHl0aG9uCisgICAgICAgICAgIGV4Y2VwdGlvbiwgc28gZG9uJ3QgcmVzdG9yZSB0aGUgcHJldmlvdXMgZXhjZXB0aW9uICovCisgICAgICAgIHJlc3RvcmUgPSAwOworI2VuZGlmCisgICAgfQorCisgICAgaWYgKHJlc3RvcmUpIHsKKyAgICAgICAgLyogUmVzdG9yZSB0aGUgZXhjZXB0aW9uIChpZiBhbnkpIG9mIHRoZSBsYXN0IGNhbGwgdG8gc3RlcCgpLAorICAgICAgICAgICBidXQgY2xlYXIgYWxzbyB0aGUgY3VycmVudCBleGNlcHRpb24gaWYgZmluYWxpemUoKSBmYWlsZWQgKi8KKyAgICAgICAgUHlFcnJfUmVzdG9yZShleGNlcHRpb24sIHZhbHVlLCB0Yik7CiAgICAgfQogCiBlcnJvcjoKQEAgLTg2MiwyMiArOTA2LDI5IEBACiAKICAgICBnaWxzdGF0ZSA9IFB5R0lMU3RhdGVfRW5zdXJlKCk7CiAjZW5kaWYKKwogICAgIHJldCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbigoUHlPYmplY3QqKXVzZXJfYXJnLCAiaXNzc3MiLCBhY3Rpb24sIGFyZzEsIGFyZzIsIGRibmFtZSwgYWNjZXNzX2F0dGVtcHRfc291cmNlKTsKIAotICAgIGlmICghcmV0KSB7Ci0gICAgICAgIGlmIChfZW5hYmxlX2NhbGxiYWNrX3RyYWNlYmFja3MpIHsKKyAgICBpZiAocmV0ID09IE5VTEwpIHsKKyAgICAgICAgaWYgKF9lbmFibGVfY2FsbGJhY2tfdHJhY2ViYWNrcykKICAgICAgICAgICAgIFB5RXJyX1ByaW50KCk7Ci0gICAgICAgIH0gZWxzZSB7CisgICAgICAgIGVsc2UKICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgICAgIH0KIAogICAgICAgICByYyA9IFNRTElURV9ERU5ZOwotICAgIH0gZWxzZSB7CisgICAgfQorICAgIGVsc2UgewogICAgICAgICBpZiAoUHlMb25nX0NoZWNrKHJldCkpIHsKICAgICAgICAgICAgIHJjID0gX1B5TG9uZ19Bc0ludChyZXQpOwotICAgICAgICAgICAgaWYgKHJjID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgICBpZiAocmMgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICAgICAgICAgIGlmIChfZW5hYmxlX2NhbGxiYWNrX3RyYWNlYmFja3MpCisgICAgICAgICAgICAgICAgICAgIFB5RXJyX1ByaW50KCk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwogICAgICAgICAgICAgICAgIHJjID0gU1FMSVRFX0RFTlk7Ci0gICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICByYyA9IFNRTElURV9ERU5ZOwogICAgICAgICB9CiAgICAgICAgIFB5X0RFQ1JFRihyZXQpOwpAQCAtMTE5MCw5ICsxMjQxLDggQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPIiwgJnNxbCkpIHsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8iLCAmc3FsKSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQogCiAgICAgX3B5c3FsaXRlX2Ryb3BfdW51c2VkX3N0YXRlbWVudF9yZWZlcmVuY2VzKHNlbGYpOwogCkBAIC0xMjA4LDQzICsxMjU4LDQwIEBACiAgICAgc3RhdGVtZW50LT5pbl93ZWFrcmVmbGlzdCA9IE5VTEw7CiAKICAgICByYyA9IHB5c3FsaXRlX3N0YXRlbWVudF9jcmVhdGUoc3RhdGVtZW50LCBzZWxmLCBzcWwpOwotCiAgICAgaWYgKHJjICE9IFNRTElURV9PSykgewogICAgICAgICBpZiAocmMgPT0gUFlTUUxJVEVfVE9PX01VQ0hfU1FMKSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcocHlzcWxpdGVfV2FybmluZywgIllvdSBjYW4gb25seSBleGVjdXRlIG9uZSBzdGF0ZW1lbnQgYXQgYSB0aW1lLiIpOwogICAgICAgICB9IGVsc2UgaWYgKHJjID09IFBZU1FMSVRFX1NRTF9XUk9OR19UWVBFKSB7Ci0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcocHlzcWxpdGVfV2FybmluZywgIlNRTCBpcyBvZiB3cm9uZyB0eXBlLiBNdXN0IGJlIHN0cmluZyBvciB1bmljb2RlLiIpOworICAgICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfVHlwZUVycm9yKSkKKyAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcocHlzcWxpdGVfV2FybmluZywgIlNRTCBpcyBvZiB3cm9uZyB0eXBlLiBNdXN0IGJlIHN0cmluZy4iKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICh2b2lkKXB5c3FsaXRlX3N0YXRlbWVudF9yZXNldChzdGF0ZW1lbnQpOwogICAgICAgICAgICAgX3B5c3FsaXRlX3NldGVycm9yKHNlbGYtPmRiLCBOVUxMKTsKICAgICAgICAgfQotCi0gICAgICAgIFB5X0NMRUFSKHN0YXRlbWVudCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgd2Vha3JlZiA9IFB5V2Vha3JlZl9OZXdSZWYoKFB5T2JqZWN0KilzdGF0ZW1lbnQsIE5VTEwpOwotICAgICAgICBpZiAoIXdlYWtyZWYpIHsKLSAgICAgICAgICAgIFB5X0NMRUFSKHN0YXRlbWVudCk7Ci0gICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKFB5TGlzdF9BcHBlbmQoc2VsZi0+c3RhdGVtZW50cywgd2Vha3JlZikgIT0gMCkgewotICAgICAgICAgICAgUHlfQ0xFQVIod2Vha3JlZik7Ci0gICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICB9Ci0KLSAgICAgICAgUHlfREVDUkVGKHdlYWtyZWYpOworICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KIAotZXJyb3I6CisgICAgd2Vha3JlZiA9IFB5V2Vha3JlZl9OZXdSZWYoKFB5T2JqZWN0KilzdGF0ZW1lbnQsIE5VTEwpOworICAgIGlmICh3ZWFrcmVmID09IE5VTEwpCisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgaWYgKFB5TGlzdF9BcHBlbmQoc2VsZi0+c3RhdGVtZW50cywgd2Vha3JlZikgIT0gMCkgeworICAgICAgICBQeV9ERUNSRUYod2Vha3JlZik7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorICAgIFB5X0RFQ1JFRih3ZWFrcmVmKTsKKwogICAgIHJldHVybiAoUHlPYmplY3QqKXN0YXRlbWVudDsKKworZXJyb3I6CisgICAgUHlfREVDUkVGKHN0YXRlbWVudCk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKLVB5T2JqZWN0KiBweXNxbGl0ZV9jb25uZWN0aW9uX2V4ZWN1dGUocHlzcWxpdGVfQ29ubmVjdGlvbiogc2VsZiwgUHlPYmplY3QqIGFyZ3MsIFB5T2JqZWN0KiBrd2FyZ3MpCitQeU9iamVjdCogcHlzcWxpdGVfY29ubmVjdGlvbl9leGVjdXRlKHB5c3FsaXRlX0Nvbm5lY3Rpb24qIHNlbGYsIFB5T2JqZWN0KiBhcmdzKQogewogICAgIFB5T2JqZWN0KiBjdXJzb3IgPSAwOwogICAgIFB5T2JqZWN0KiByZXN1bHQgPSAwOwogICAgIFB5T2JqZWN0KiBtZXRob2QgPSAwOwotICAgIF9QeV9JREVOVElGSUVSKGN1cnNvcik7CiAKICAgICBjdXJzb3IgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKChQeU9iamVjdCopc2VsZiwgJlB5SWRfY3Vyc29yLCAiIik7CiAgICAgaWYgKCFjdXJzb3IpIHsKQEAgLTEyNjksMTIgKzEzMTYsMTEgQEAKICAgICByZXR1cm4gY3Vyc29yOwogfQogCi1QeU9iamVjdCogcHlzcWxpdGVfY29ubmVjdGlvbl9leGVjdXRlbWFueShweXNxbGl0ZV9Db25uZWN0aW9uKiBzZWxmLCBQeU9iamVjdCogYXJncywgUHlPYmplY3QqIGt3YXJncykKK1B5T2JqZWN0KiBweXNxbGl0ZV9jb25uZWN0aW9uX2V4ZWN1dGVtYW55KHB5c3FsaXRlX0Nvbm5lY3Rpb24qIHNlbGYsIFB5T2JqZWN0KiBhcmdzKQogewogICAgIFB5T2JqZWN0KiBjdXJzb3IgPSAwOwogICAgIFB5T2JqZWN0KiByZXN1bHQgPSAwOwogICAgIFB5T2JqZWN0KiBtZXRob2QgPSAwOwotICAgIF9QeV9JREVOVElGSUVSKGN1cnNvcik7CiAKICAgICBjdXJzb3IgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKChQeU9iamVjdCopc2VsZiwgJlB5SWRfY3Vyc29yLCAiIik7CiAgICAgaWYgKCFjdXJzb3IpIHsKQEAgLTEyOTksMTIgKzEzNDUsMTEgQEAKICAgICByZXR1cm4gY3Vyc29yOwogfQogCi1QeU9iamVjdCogcHlzcWxpdGVfY29ubmVjdGlvbl9leGVjdXRlc2NyaXB0KHB5c3FsaXRlX0Nvbm5lY3Rpb24qIHNlbGYsIFB5T2JqZWN0KiBhcmdzLCBQeU9iamVjdCoga3dhcmdzKQorUHlPYmplY3QqIHB5c3FsaXRlX2Nvbm5lY3Rpb25fZXhlY3V0ZXNjcmlwdChweXNxbGl0ZV9Db25uZWN0aW9uKiBzZWxmLCBQeU9iamVjdCogYXJncykKIHsKICAgICBQeU9iamVjdCogY3Vyc29yID0gMDsKICAgICBQeU9iamVjdCogcmVzdWx0ID0gMDsKICAgICBQeU9iamVjdCogbWV0aG9kID0gMDsKLSAgICBfUHlfSURFTlRJRklFUihjdXJzb3IpOwogCiAgICAgY3Vyc29yID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZCgoUHlPYmplY3QqKXNlbGYsICZQeUlkX2N1cnNvciwgIiIpOwogICAgIGlmICghY3Vyc29yKSB7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19zcWxpdGUvY3Vyc29yLmMgYi9Nb2R1bGVzL19zcWxpdGUvY3Vyc29yLmMKaW5kZXggMDljMTNkNC4uZGI5NmIwMiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fc3FsaXRlL2N1cnNvci5jCisrKyBiL01vZHVsZXMvX3NxbGl0ZS9jdXJzb3IuYwpAQCAtMjQsNyArMjQsNiBAQAogI2luY2x1ZGUgImN1cnNvci5oIgogI2luY2x1ZGUgIm1vZHVsZS5oIgogI2luY2x1ZGUgInV0aWwuaCIKLSNpbmNsdWRlICJzcWxpdGVjb21wYXQuaCIKIAogUHlPYmplY3QqIHB5c3FsaXRlX2N1cnNvcl9pdGVybmV4dChweXNxbGl0ZV9DdXJzb3IqIHNlbGYpOwogCkBAIC0yOTAsOSArMjg5LDggQEAKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCiAgICAgcm93ID0gUHlUdXBsZV9OZXcobnVtY29scyk7Ci0gICAgaWYgKCFyb3cpIHsKKyAgICBpZiAoIXJvdykKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQogCiAgICAgZm9yIChpID0gMDsgaSA8IG51bWNvbHM7IGkrKykgewogICAgICAgICBpZiAoc2VsZi0+Y29ubmVjdGlvbi0+ZGV0ZWN0X3R5cGVzKSB7CkBAIC0zMTIsMTQgKzMxMCwxMiBAQAogICAgICAgICAgICAgICAgIGNvbnZlcnRlZCA9IFB5X05vbmU7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGl0ZW0gPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKHZhbF9zdHIsIG5ieXRlcyk7Ci0gICAgICAgICAgICAgICAgaWYgKCFpdGVtKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIWl0ZW0pCisgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICAgICAgY29udmVydGVkID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGNvbnZlcnRlciwgIk8iLCBpdGVtKTsKICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoaXRlbSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFjb252ZXJ0ZWQpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWNvbnZlcnRlZCkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwpAQCAtMzM4LDYgKzMzNCwxMSBAQAogICAgICAgICAgICAgICAgIGlmIChzZWxmLT5jb25uZWN0aW9uLT50ZXh0X2ZhY3RvcnkgPT0gKFB5T2JqZWN0KikmUHlVbmljb2RlX1R5cGUpIHsKICAgICAgICAgICAgICAgICAgICAgY29udmVydGVkID0gUHlVbmljb2RlX0Zyb21TdHJpbmdBbmRTaXplKHZhbF9zdHIsIG5ieXRlcyk7CiAgICAgICAgICAgICAgICAgICAgIGlmICghY29udmVydGVkKSB7CisjaWZkZWYgUHlfREVCVUcKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluIGRlYnVnIG1vZGUsIHR5cGVfY2FsbCgpIGZhaWxzIHdpdGggYW4gYXNzZXJ0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciBpZiBhbiBleGNlcHRpb24gaXMgc2V0IHdoZW4gaXQgaXMgY2FsbGVkICovCisgICAgICAgICAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOworI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgICAgICBjb2xuYW1lID0gc3FsaXRlM19jb2x1bW5fbmFtZShzZWxmLT5zdGF0ZW1lbnQtPnN0LCBpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29sbmFtZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG5hbWUgPSAiPHVua25vd24gY29sdW1uIG5hbWU+IjsKQEAgLTM3MCw5ICszNzEsOCBAQAogICAgICAgICAgICAgICAgIG5ieXRlcyA9IHNxbGl0ZTNfY29sdW1uX2J5dGVzKHNlbGYtPnN0YXRlbWVudC0+c3QsIGkpOwogICAgICAgICAgICAgICAgIGJ1ZmZlciA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoCiAgICAgICAgICAgICAgICAgICAgIHNxbGl0ZTNfY29sdW1uX2Jsb2Ioc2VsZi0+c3RhdGVtZW50LT5zdCwgaSksIG5ieXRlcyk7Ci0gICAgICAgICAgICAgICAgaWYgKCFidWZmZXIpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGNvbnZlcnRlZCA9IGJ1ZmZlcjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMzg1LDEyICszODUsMTQgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7Ci0gICAgICAgIFB5X0RFQ1JFRihyb3cpOwotICAgICAgICByb3cgPSBOVUxMOwotICAgIH0KKyAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgZ290byBlcnJvcjsKIAogICAgIHJldHVybiByb3c7CisKK2Vycm9yOgorICAgIFB5X0RFQ1JFRihyb3cpOworICAgIHJldHVybiBOVUxMOwogfQogCiAvKgpAQCAtNjA4LDYgKzYxMCwxMCBAQAogICAgICAgICB3aGlsZSAoMSkgewogICAgICAgICAgICAgLyogQWN0dWFsbHkgZXhlY3V0ZSB0aGUgU1FMIHN0YXRlbWVudC4gKi8KICAgICAgICAgICAgIHJjID0gcHlzcWxpdGVfc3RlcChzZWxmLT5zdGF0ZW1lbnQtPnN0LCBzZWxmLT5jb25uZWN0aW9uKTsKKyAgICAgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgICAgICAgICAgKHZvaWQpcHlzcWxpdGVfc3RhdGVtZW50X3Jlc2V0KHNlbGYtPnN0YXRlbWVudCk7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChyYyA9PSBTUUxJVEVfRE9ORSB8fCAgcmMgPT0gU1FMSVRFX1JPVykgewogICAgICAgICAgICAgICAgIC8qIElmIGl0IHdvcmtlZCwgbGV0J3MgZ2V0IG91dCBvZiB0aGUgbG9vcCAqLwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtNjgxLDYgKzY4Nyw4IEBACiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHNlbGYtPm5leHRfcm93ID0gX3B5c3FsaXRlX2ZldGNoX29uZV9yb3coc2VsZik7CisgICAgICAgICAgICBpZiAoc2VsZi0+bmV4dF9yb3cgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICB9IGVsc2UgaWYgKHJjID09IFNRTElURV9ET05FICYmICFtdWx0aXBsZSkgewogICAgICAgICAgICAgcHlzcWxpdGVfc3RhdGVtZW50X3Jlc2V0KHNlbGYtPnN0YXRlbWVudCk7CiAgICAgICAgICAgICBQeV9DTEVBUihzZWxmLT5zdGF0ZW1lbnQpOwpAQCAtODAzLDcgKzgxMSwxMCBAQAogICAgICAgICByYyA9IFNRTElURV9ST1c7CiAgICAgICAgIHdoaWxlIChyYyA9PSBTUUxJVEVfUk9XKSB7CiAgICAgICAgICAgICByYyA9IHB5c3FsaXRlX3N0ZXAoc3RhdGVtZW50LCBzZWxmLT5jb25uZWN0aW9uKTsKLSAgICAgICAgICAgIC8qIFRPRE86IHdlIHByb2JhYmx5IG5lZWQgbW9yZSBlcnJvciBoYW5kbGluZyBoZXJlICovCisgICAgICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICAgICAgICAgICh2b2lkKXNxbGl0ZTNfZmluYWxpemUoc3RhdGVtZW50KTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgaWYgKHJjICE9IFNRTElURV9ET05FKSB7CkBAIC04NjQsMTAgKzg3NSwxNSBAQAogICAgIH0KIAogICAgIG5leHRfcm93X3R1cGxlID0gc2VsZi0+bmV4dF9yb3c7CisgICAgYXNzZXJ0KG5leHRfcm93X3R1cGxlICE9IE5VTEwpOwogICAgIHNlbGYtPm5leHRfcm93ID0gTlVMTDsKIAogICAgIGlmIChzZWxmLT5yb3dfZmFjdG9yeSAhPSBQeV9Ob25lKSB7CiAgICAgICAgIG5leHRfcm93ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKHNlbGYtPnJvd19mYWN0b3J5LCAiT08iLCBzZWxmLCBuZXh0X3Jvd190dXBsZSk7CisgICAgICAgIGlmIChuZXh0X3JvdyA9PSBOVUxMKSB7CisgICAgICAgICAgICBzZWxmLT5uZXh0X3JvdyA9IG5leHRfcm93X3R1cGxlOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KICAgICAgICAgUHlfREVDUkVGKG5leHRfcm93X3R1cGxlKTsKICAgICB9IGVsc2UgewogICAgICAgICBuZXh0X3JvdyA9IG5leHRfcm93X3R1cGxlOwpAQCAtODc1LDYgKzg5MSwxMSBAQAogCiAgICAgaWYgKHNlbGYtPnN0YXRlbWVudCkgewogICAgICAgICByYyA9IHB5c3FsaXRlX3N0ZXAoc2VsZi0+c3RhdGVtZW50LT5zdCwgc2VsZi0+Y29ubmVjdGlvbik7CisgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgICAgICAodm9pZClweXNxbGl0ZV9zdGF0ZW1lbnRfcmVzZXQoc2VsZi0+c3RhdGVtZW50KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihuZXh0X3Jvdyk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQogICAgICAgICBpZiAocmMgIT0gU1FMSVRFX0RPTkUgJiYgcmMgIT0gU1FMSVRFX1JPVykgewogICAgICAgICAgICAgKHZvaWQpcHlzcWxpdGVfc3RhdGVtZW50X3Jlc2V0KHNlbGYtPnN0YXRlbWVudCk7CiAgICAgICAgICAgICBQeV9ERUNSRUYobmV4dF9yb3cpOwpAQCAtODg0LDYgKzkwNSwxMCBAQAogCiAgICAgICAgIGlmIChyYyA9PSBTUUxJVEVfUk9XKSB7CiAgICAgICAgICAgICBzZWxmLT5uZXh0X3JvdyA9IF9weXNxbGl0ZV9mZXRjaF9vbmVfcm93KHNlbGYpOworICAgICAgICAgICAgaWYgKHNlbGYtPm5leHRfcm93ID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAodm9pZClweXNxbGl0ZV9zdGF0ZW1lbnRfcmVzZXQoc2VsZi0+c3RhdGVtZW50KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fc3FsaXRlL21vZHVsZS5jIGIvTW9kdWxlcy9fc3FsaXRlL21vZHVsZS5jCmluZGV4IGJlYTZkNmEuLjdhN2U4NjAgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3NxbGl0ZS9tb2R1bGUuYworKysgYi9Nb2R1bGVzL19zcWxpdGUvbW9kdWxlLmMKQEAgLTUwLDE5ICs1MCwyNiBAQAogICAgICAqIEMtbGV2ZWwsIHNvIHRoaXMgY29kZSBpcyByZWR1bmRhbnQgd2l0aCB0aGUgb25lIGluIGNvbm5lY3Rpb25faW5pdCBpbgogICAgICAqIGNvbm5lY3Rpb24uYyBhbmQgbXVzdCBhbHdheXMgYmUgY29waWVkIGZyb20gdGhlcmUgLi4uICovCiAKLSAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7ImRhdGFiYXNlIiwgInRpbWVvdXQiLCAiZGV0ZWN0X3R5cGVzIiwgImlzb2xhdGlvbl9sZXZlbCIsICJjaGVja19zYW1lX3RocmVhZCIsICJmYWN0b3J5IiwgImNhY2hlZF9zdGF0ZW1lbnRzIiwgTlVMTCwgTlVMTH07CisgICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geworICAgICAgICAiZGF0YWJhc2UiLCAidGltZW91dCIsICJkZXRlY3RfdHlwZXMiLCAiaXNvbGF0aW9uX2xldmVsIiwKKyAgICAgICAgImNoZWNrX3NhbWVfdGhyZWFkIiwgImZhY3RvcnkiLCAiY2FjaGVkX3N0YXRlbWVudHMiLCAidXJpIiwKKyAgICAgICAgTlVMTAorICAgIH07CiAgICAgY2hhciogZGF0YWJhc2U7CiAgICAgaW50IGRldGVjdF90eXBlcyA9IDA7CiAgICAgUHlPYmplY3QqIGlzb2xhdGlvbl9sZXZlbDsKICAgICBQeU9iamVjdCogZmFjdG9yeSA9IE5VTEw7CiAgICAgaW50IGNoZWNrX3NhbWVfdGhyZWFkID0gMTsKICAgICBpbnQgY2FjaGVkX3N0YXRlbWVudHM7CisgICAgaW50IHVyaSA9IDA7CiAgICAgZG91YmxlIHRpbWVvdXQgPSA1LjA7CiAKICAgICBQeU9iamVjdCogcmVzdWx0OwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAic3xkaU9pT2kiLCBrd2xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRhdGFiYXNlLCAmdGltZW91dCwgJmRldGVjdF90eXBlcywgJmlzb2xhdGlvbl9sZXZlbCwgJmNoZWNrX3NhbWVfdGhyZWFkLCAmZmFjdG9yeSwgJmNhY2hlZF9zdGF0ZW1lbnRzKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJzfGRpT2lPaXAiLCBrd2xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRhdGFiYXNlLCAmdGltZW91dCwgJmRldGVjdF90eXBlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaXNvbGF0aW9uX2xldmVsLCAmY2hlY2tfc2FtZV90aHJlYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZhY3RvcnksICZjYWNoZWRfc3RhdGVtZW50cywgJnVyaSkpCiAgICAgewogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CkBAIC03Nyw3ICs4NCw4IEBACiB9CiAKIFB5RG9jX1NUUlZBUihtb2R1bGVfY29ubmVjdF9kb2MsCi0iY29ubmVjdChkYXRhYmFzZVssIHRpbWVvdXQsIGlzb2xhdGlvbl9sZXZlbCwgZGV0ZWN0X3R5cGVzLCBmYWN0b3J5XSlcblwKKyJjb25uZWN0KGRhdGFiYXNlWywgdGltZW91dCwgZGV0ZWN0X3R5cGVzLCBpc29sYXRpb25fbGV2ZWwsXG5cCisgICAgICAgIGNoZWNrX3NhbWVfdGhyZWFkLCBmYWN0b3J5LCBjYWNoZWRfc3RhdGVtZW50cywgdXJpXSlcblwKIFxuXAogT3BlbnMgYSBjb25uZWN0aW9uIHRvIHRoZSBTUUxpdGUgZGF0YWJhc2UgZmlsZSAqZGF0YWJhc2UqLiBZb3UgY2FuIHVzZVxuXAogXCI6bWVtb3J5OlwiIHRvIG9wZW4gYSBkYXRhYmFzZSBjb25uZWN0aW9uIHRvIGEgZGF0YWJhc2UgdGhhdCByZXNpZGVzIGluXG5cCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19zcWxpdGUvcHJlcGFyZV9wcm90b2NvbC5jIGIvTW9kdWxlcy9fc3FsaXRlL3ByZXBhcmVfcHJvdG9jb2wuYwppbmRleCBmYzY4ODc0Li5mMmM4NWY5IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19zcWxpdGUvcHJlcGFyZV9wcm90b2NvbC5jCisrKyBiL01vZHVsZXMvX3NxbGl0ZS9wcmVwYXJlX3Byb3RvY29sLmMKQEAgLTIxLDcgKzIxLDYgQEAKICAqIDMuIFRoaXMgbm90aWNlIG1heSBub3QgYmUgcmVtb3ZlZCBvciBhbHRlcmVkIGZyb20gYW55IHNvdXJjZSBkaXN0cmlidXRpb24uCiAgKi8KIAotI2luY2x1ZGUgInNxbGl0ZWNvbXBhdC5oIgogI2luY2x1ZGUgInByZXBhcmVfcHJvdG9jb2wuaCIKIAogaW50IHB5c3FsaXRlX3ByZXBhcmVfcHJvdG9jb2xfaW5pdChweXNxbGl0ZV9QcmVwYXJlUHJvdG9jb2wqIHNlbGYsIFB5T2JqZWN0KiBhcmdzLCBQeU9iamVjdCoga3dhcmdzKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fc3FsaXRlL3Jvdy5jIGIvTW9kdWxlcy9fc3FsaXRlL3Jvdy5jCmluZGV4IGI1MDY1OGMuLmVlNzM0NDYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3NxbGl0ZS9yb3cuYworKysgYi9Nb2R1bGVzL19zcWxpdGUvcm93LmMKQEAgLTIzLDcgKzIzLDYgQEAKIAogI2luY2x1ZGUgInJvdy5oIgogI2luY2x1ZGUgImN1cnNvci5oIgotI2luY2x1ZGUgInNxbGl0ZWNvbXBhdC5oIgogCiB2b2lkIHB5c3FsaXRlX3Jvd19kZWFsbG9jKHB5c3FsaXRlX1Jvdyogc2VsZikKIHsKQEAgLTMzLDQyICszMiw1NSBAQAogICAgIFB5X1RZUEUoc2VsZiktPnRwX2ZyZWUoKFB5T2JqZWN0KilzZWxmKTsKIH0KIAotaW50IHB5c3FsaXRlX3Jvd19pbml0KHB5c3FsaXRlX1Jvdyogc2VsZiwgUHlPYmplY3QqIGFyZ3MsIFB5T2JqZWN0KiBrd2FyZ3MpCitzdGF0aWMgUHlPYmplY3QgKgorcHlzcWxpdGVfcm93X25ldyhQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQogeworICAgIHB5c3FsaXRlX1JvdyAqc2VsZjsKICAgICBQeU9iamVjdCogZGF0YTsKICAgICBweXNxbGl0ZV9DdXJzb3IqIGN1cnNvcjsKIAotICAgIHNlbGYtPmRhdGEgPSAwOwotICAgIHNlbGYtPmRlc2NyaXB0aW9uID0gMDsKKyAgICBhc3NlcnQodHlwZSAhPSBOVUxMICYmIHR5cGUtPnRwX2FsbG9jICE9IE5VTEwpOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPTyIsICZjdXJzb3IsICZkYXRhKSkgewotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQorICAgIGlmICghX1B5QXJnX05vS2V5d29yZHMoIlJvdygpIiwga3dhcmdzKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPTyIsICZjdXJzb3IsICZkYXRhKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBpZiAoIVB5T2JqZWN0X0lzSW5zdGFuY2UoKFB5T2JqZWN0KiljdXJzb3IsIChQeU9iamVjdCopJnB5c3FsaXRlX0N1cnNvclR5cGUpKSB7CisgICAgaWYgKCFQeU9iamVjdF9UeXBlQ2hlY2soKFB5T2JqZWN0KiljdXJzb3IsICZweXNxbGl0ZV9DdXJzb3JUeXBlKSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAiaW5zdGFuY2Ugb2YgY3Vyc29yIHJlcXVpcmVkIGZvciBmaXJzdCBhcmd1bWVudCIpOwotICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAogICAgIGlmICghUHlUdXBsZV9DaGVjayhkYXRhKSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAidHVwbGUgcmVxdWlyZWQgZm9yIHNlY29uZCBhcmd1bWVudCIpOwotICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAorICAgIHNlbGYgPSAocHlzcWxpdGVfUm93ICopIHR5cGUtPnRwX2FsbG9jKHR5cGUsIDApOworICAgIGlmIChzZWxmID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCiAgICAgUHlfSU5DUkVGKGRhdGEpOwogICAgIHNlbGYtPmRhdGEgPSBkYXRhOwogCiAgICAgUHlfSU5DUkVGKGN1cnNvci0+ZGVzY3JpcHRpb24pOwogICAgIHNlbGYtPmRlc2NyaXB0aW9uID0gY3Vyc29yLT5kZXNjcmlwdGlvbjsKIAotICAgIHJldHVybiAwOworICAgIHJldHVybiAoUHlPYmplY3QgKikgc2VsZjsKK30KKworUHlPYmplY3QqIHB5c3FsaXRlX3Jvd19pdGVtKHB5c3FsaXRlX1Jvdyogc2VsZiwgUHlfc3NpemVfdCBpZHgpCit7CisgICBQeU9iamVjdCogaXRlbSA9IFB5VHVwbGVfR2V0SXRlbShzZWxmLT5kYXRhLCBpZHgpOworICAgUHlfWElOQ1JFRihpdGVtKTsKKyAgIHJldHVybiBpdGVtOwogfQogCiBQeU9iamVjdCogcHlzcWxpdGVfcm93X3N1YnNjcmlwdChweXNxbGl0ZV9Sb3cqIHNlbGYsIFB5T2JqZWN0KiBpZHgpCiB7Ci0gICAgbG9uZyBfaWR4OworICAgIFB5X3NzaXplX3QgX2lkeDsKICAgICBjaGFyKiBrZXk7Ci0gICAgaW50IG5pdGVtcywgaTsKKyAgICBQeV9zc2l6ZV90IG5pdGVtcywgaTsKICAgICBjaGFyKiBjb21wYXJlX2tleTsKIAogICAgIGNoYXIqIHAxOwpAQCAtNzcsNyArODksMTEgQEAKICAgICBQeU9iamVjdCogaXRlbTsKIAogICAgIGlmIChQeUxvbmdfQ2hlY2soaWR4KSkgewotICAgICAgICBfaWR4ID0gUHlMb25nX0FzTG9uZyhpZHgpOworICAgICAgICBfaWR4ID0gUHlOdW1iZXJfQXNTc2l6ZV90KGlkeCwgUHlFeGNfSW5kZXhFcnJvcik7CisgICAgICAgIGlmIChfaWR4ID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgaWYgKF9pZHggPCAwKQorICAgICAgICAgICBfaWR4ICs9IFB5VHVwbGVfR0VUX1NJWkUoc2VsZi0+ZGF0YSk7CiAgICAgICAgIGl0ZW0gPSBQeVR1cGxlX0dldEl0ZW0oc2VsZi0+ZGF0YSwgX2lkeCk7CiAgICAgICAgIFB5X1hJTkNSRUYoaXRlbSk7CiAgICAgICAgIHJldHVybiBpdGVtOwpAQCAtODksNyArMTA1LDEwIEBACiAgICAgICAgIG5pdGVtcyA9IFB5VHVwbGVfU2l6ZShzZWxmLT5kZXNjcmlwdGlvbik7CiAKICAgICAgICAgZm9yIChpID0gMDsgaSA8IG5pdGVtczsgaSsrKSB7Ci0gICAgICAgICAgICBjb21wYXJlX2tleSA9IF9QeVVuaWNvZGVfQXNTdHJpbmcoUHlUdXBsZV9HRVRfSVRFTShQeVR1cGxlX0dFVF9JVEVNKHNlbGYtPmRlc2NyaXB0aW9uLCBpKSwgMCkpOworICAgICAgICAgICAgUHlPYmplY3QgKm9iajsKKyAgICAgICAgICAgIG9iaiA9IFB5VHVwbGVfR0VUX0lURU0oc2VsZi0+ZGVzY3JpcHRpb24sIGkpOworICAgICAgICAgICAgb2JqID0gUHlUdXBsZV9HRVRfSVRFTShvYmosIDApOworICAgICAgICAgICAgY29tcGFyZV9rZXkgPSBfUHlVbmljb2RlX0FzU3RyaW5nKG9iaik7CiAgICAgICAgICAgICBpZiAoIWNvbXBhcmVfa2V5KSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICB9CkBAIC0xMjEsMTAgKzE0MCwxMiBAQAogCiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19JbmRleEVycm9yLCAiTm8gaXRlbSB3aXRoIHRoYXQga2V5Iik7CiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIH0gZWxzZSBpZiAoUHlTbGljZV9DaGVjayhpZHgpKSB7CisgICAgfQorICAgIGVsc2UgaWYgKFB5U2xpY2VfQ2hlY2soaWR4KSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgInNsaWNlcyBub3QgaW1wbGVtZW50ZWQsIHlldCIpOwogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9IGVsc2UgeworICAgIH0KKyAgICBlbHNlIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0luZGV4RXJyb3IsICJJbmRleCBtdXN0IGJlIGludCBvciBzdHJpbmciKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQpAQCAtMTk0LDYgKzIxNSwxNCBAQAogICAgIC8qIG1wX2Fzc19zdWJzY3JpcHQgKi8gKG9iam9iamFyZ3Byb2MpMCwKIH07CiAKK3N0YXRpYyBQeVNlcXVlbmNlTWV0aG9kcyBweXNxbGl0ZV9yb3dfYXNfc2VxdWVuY2UgPSB7CisgICAvKiBzcV9sZW5ndGggKi8gICAgICAgICAobGVuZnVuYylweXNxbGl0ZV9yb3dfbGVuZ3RoLAorICAgLyogc3FfY29uY2F0ICovICAgICAgICAgMCwKKyAgIC8qIHNxX3JlcGVhdCAqLyAgICAgICAgIDAsCisgICAvKiBzcV9pdGVtICovICAgICAgICAgICAoc3NpemVhcmdmdW5jKXB5c3FsaXRlX3Jvd19pdGVtLAorfTsKKworCiBzdGF0aWMgUHlNZXRob2REZWYgcHlzcWxpdGVfcm93X21ldGhvZHNbXSA9IHsKICAgICB7ImtleXMiLCAoUHlDRnVuY3Rpb24pcHlzcWxpdGVfcm93X2tleXMsIE1FVEhfTk9BUkdTLAogICAgICAgICBQeURvY19TVFIoIlJldHVybnMgdGhlIGtleXMgb2YgdGhlIHJvdy4iKX0sCkBAIC0yMzcsNyArMjY2LDcgQEAKICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVzY3JfZ2V0ICovCiAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Rlc2NyX3NldCAqLwogICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kaWN0b2Zmc2V0ICovCi0gICAgICAgIChpbml0cHJvYylweXNxbGl0ZV9yb3dfaW5pdCwgICAgICAgICAgICAgICAgICAgIC8qIHRwX2luaXQgKi8KKyAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaW5pdCAqLwogICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hbGxvYyAqLwogICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9uZXcgKi8KICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZnJlZSAqLwpAQCAtMjQ1LDcgKzI3NCw4IEBACiAKIGV4dGVybiBpbnQgcHlzcWxpdGVfcm93X3NldHVwX3R5cGVzKHZvaWQpCiB7Ci0gICAgcHlzcWxpdGVfUm93VHlwZS50cF9uZXcgPSBQeVR5cGVfR2VuZXJpY05ldzsKKyAgICBweXNxbGl0ZV9Sb3dUeXBlLnRwX25ldyA9IHB5c3FsaXRlX3Jvd19uZXc7CiAgICAgcHlzcWxpdGVfUm93VHlwZS50cF9hc19tYXBwaW5nID0gJnB5c3FsaXRlX3Jvd19hc19tYXBwaW5nOworICAgIHB5c3FsaXRlX1Jvd1R5cGUudHBfYXNfc2VxdWVuY2UgPSAmcHlzcWxpdGVfcm93X2FzX3NlcXVlbmNlOwogICAgIHJldHVybiBQeVR5cGVfUmVhZHkoJnB5c3FsaXRlX1Jvd1R5cGUpOwogfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fc3FsaXRlL3NxbGl0ZWNvbXBhdC5oIGIvTW9kdWxlcy9fc3FsaXRlL3NxbGl0ZWNvbXBhdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZjIwZjE2Li4wMDAwMDAwCi0tLSBhL01vZHVsZXMvX3NxbGl0ZS9zcWxpdGVjb21wYXQuaAorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8qIHNxbGl0ZWNvbXBhdC5oIC0gY29tcGF0aWJpbGl0eSBtYWNyb3MKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxMCBHZXJoYXJkIEjDpHJpbmcgPGdoQGdoYWVyaW5nLmRlPgotICoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHB5c3FsaXRlLgotICoKLSAqIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgJ2FzLWlzJywgd2l0aG91dCBhbnkgZXhwcmVzcyBvciBpbXBsaWVkCi0gKiB3YXJyYW50eS4gIEluIG5vIGV2ZW50IHdpbGwgdGhlIGF1dGhvcnMgYmUgaGVsZCBsaWFibGUgZm9yIGFueSBkYW1hZ2VzCi0gKiBhcmlzaW5nIGZyb20gdGhlIHVzZSBvZiB0aGlzIHNvZnR3YXJlLgotICoKLSAqIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBhbnlvbmUgdG8gdXNlIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLAotICogaW5jbHVkaW5nIGNvbW1lcmNpYWwgYXBwbGljYXRpb25zLCBhbmQgdG8gYWx0ZXIgaXQgYW5kIHJlZGlzdHJpYnV0ZSBpdAotICogZnJlZWx5LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgotICoKLSAqIDEuIFRoZSBvcmlnaW4gb2YgdGhpcyBzb2Z0d2FyZSBtdXN0IG5vdCBiZSBtaXNyZXByZXNlbnRlZDsgeW91IG11c3Qgbm90Ci0gKiAgICBjbGFpbSB0aGF0IHlvdSB3cm90ZSB0aGUgb3JpZ2luYWwgc29mdHdhcmUuIElmIHlvdSB1c2UgdGhpcyBzb2Z0d2FyZQotICogICAgaW4gYSBwcm9kdWN0LCBhbiBhY2tub3dsZWRnbWVudCBpbiB0aGUgcHJvZHVjdCBkb2N1bWVudGF0aW9uIHdvdWxkIGJlCi0gKiAgICBhcHByZWNpYXRlZCBidXQgaXMgbm90IHJlcXVpcmVkLgotICogMi4gQWx0ZXJlZCBzb3VyY2UgdmVyc2lvbnMgbXVzdCBiZSBwbGFpbmx5IG1hcmtlZCBhcyBzdWNoLCBhbmQgbXVzdCBub3QgYmUKLSAqICAgIG1pc3JlcHJlc2VudGVkIGFzIGJlaW5nIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4KLSAqIDMuIFRoaXMgbm90aWNlIG1heSBub3QgYmUgcmVtb3ZlZCBvciBhbHRlcmVkIGZyb20gYW55IHNvdXJjZSBkaXN0cmlidXRpb24uCi0gKi8KLQotI2luY2x1ZGUgIlB5dGhvbi5oIgotCi0jaWZuZGVmIFBZU1FMSVRFX0NPTVBBVF9ICi0jZGVmaW5lIFBZU1FMSVRFX0NPTVBBVF9ICi0KLS8qIGRlZmluZSBQeV9zc2l6ZV90IGZvciBwcmUtMi41IHZlcnNpb25zIG9mIFB5dGhvbiAqLwotCi0jaWYgUFlfVkVSU0lPTl9IRVggPCAweDAyMDUwMDAwCi10eXBlZGVmIGludCBQeV9zc2l6ZV90OwotdHlwZWRlZiBpbnQgKCpsZW5mdW5jKShQeU9iamVjdCopOwotI2VuZGlmCi0KLQotLyogZGVmaW5lIFB5RGljdF9DaGVja0V4YWN0IGZvciBwcmUtMi40IHZlcnNpb25zIG9mIFB5dGhvbiAqLwotI2lmbmRlZiBQeURpY3RfQ2hlY2tFeGFjdAotI2RlZmluZSBQeURpY3RfQ2hlY2tFeGFjdChvcCkgKChvcCktPm9iX3R5cGUgPT0gJlB5RGljdF9UeXBlKQotI2VuZGlmCi0KLS8qIGRlZmluZSBQeV9DTEVBUiBmb3IgcHJlLTIuNCB2ZXJzaW9ucyBvZiBQeXRob24gKi8KLSNpZm5kZWYgUHlfQ0xFQVIKLSNkZWZpbmUgUHlfQ0xFQVIob3ApCQkJCVwKLSAgICAgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAJXAotICAgICAgICAgICAgICAgIGlmIChvcCkgewkJCVwKLSAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICp0bXAgPSAoUHlPYmplY3QgKikob3ApOwlcCi0gICAgICAgICAgICAgICAgICAgICAgICAob3ApID0gTlVMTDsJCVwKLSAgICAgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih0bXApOwkJXAotICAgICAgICAgICAgICAgIH0JCQkJXAotICAgICAgICB9IHdoaWxlICgwKQotI2VuZGlmCi0KLSNpZm5kZWYgUHlWYXJPYmplY3RfSEVBRF9JTklUCi0jZGVmaW5lIFB5VmFyT2JqZWN0X0hFQURfSU5JVCh0eXBlLCBzaXplKSBcCi0gICAgUHlPYmplY3RfSEVBRF9JTklUKHR5cGUpIHNpemUsCi0jZW5kaWYKLQotI2lmbmRlZiBQeV9UWVBFCi0jZGVmaW5lIFB5X1RZUEUob2IpICgob2IpLT5vYl90eXBlKQotI2VuZGlmCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fc3FsaXRlL3N0YXRlbWVudC5jIGIvTW9kdWxlcy9fc3FsaXRlL3N0YXRlbWVudC5jCmluZGV4IDQ3MWEwNjcuLmU4NzA2MzMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3NxbGl0ZS9zdGF0ZW1lbnQuYworKysgYi9Nb2R1bGVzL19zcWxpdGUvc3RhdGVtZW50LmMKQEAgLTI3LDcgKzI3LDYgQEAKICNpbmNsdWRlICJtaWNyb3Byb3RvY29scy5oIgogI2luY2x1ZGUgInByZXBhcmVfcHJvdG9jb2wuaCIKICNpbmNsdWRlICJ1dGlsLmgiCi0jaW5jbHVkZSAic3FsaXRlY29tcGF0LmgiCiAKIC8qIHByb3RvdHlwZXMgKi8KIHN0YXRpYyBpbnQgcHlzcWxpdGVfY2hlY2tfcmVtYWluaW5nX3NxbChjb25zdCBjaGFyKiB0YWlsKTsKQEAgLTY0LDYgKzYzLDEwIEBACiAgICAgICAgIHJjID0gUFlTUUxJVEVfU1FMX1dST05HX1RZUEU7CiAgICAgICAgIHJldHVybiByYzsKICAgICB9CisgICAgaWYgKHN0cmxlbihzcWxfY3N0cikgIT0gKHNpemVfdClzcWxfY3N0cl9sZW4pIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJ0aGUgcXVlcnkgY29udGFpbnMgYSBudWxsIGNoYXJhY3RlciIpOworICAgICAgICByZXR1cm4gUFlTUUxJVEVfU1FMX1dST05HX1RZUEU7CisgICAgfQogCiAgICAgc2VsZi0+aW5fd2Vha3JlZmxpc3QgPSBOVUxMOwogICAgIFB5X0lOQ1JFRihzcWwpOwpAQCAtOTEsNyArOTQsNiBAQAogaW50IHB5c3FsaXRlX3N0YXRlbWVudF9iaW5kX3BhcmFtZXRlcihweXNxbGl0ZV9TdGF0ZW1lbnQqIHNlbGYsIGludCBwb3MsIFB5T2JqZWN0KiBwYXJhbWV0ZXIpCiB7CiAgICAgaW50IHJjID0gU1FMSVRFX09LOwotICAgIGNvbnN0IGNoYXIqIGJ1ZmZlcjsKICAgICBjaGFyKiBzdHJpbmc7CiAgICAgUHlfc3NpemVfdCBidWZsZW47CiAgICAgcGFyYW1ldGVyX3R5cGUgcGFyYW10eXBlOwpAQCAtMTMzLDE5ICsxMzUsMzEgQEAKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFRZUEVfVU5JQ09ERToKICAgICAgICAgICAgIHN0cmluZyA9IF9QeVVuaWNvZGVfQXNTdHJpbmdBbmRTaXplKHBhcmFtZXRlciwgJmJ1Zmxlbik7Ci0gICAgICAgICAgICBpZiAoc3RyaW5nICE9IE5VTEwpCi0gICAgICAgICAgICAgICAgcmMgPSBzcWxpdGUzX2JpbmRfdGV4dChzZWxmLT5zdCwgcG9zLCBzdHJpbmcsIGJ1ZmxlbiwgU1FMSVRFX1RSQU5TSUVOVCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcmMgPSAtMTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFRZUEVfQlVGRkVSOgotICAgICAgICAgICAgaWYgKFB5T2JqZWN0X0FzQ2hhckJ1ZmZlcihwYXJhbWV0ZXIsICZidWZmZXIsICZidWZsZW4pID09IDApIHsKLSAgICAgICAgICAgICAgICByYyA9IHNxbGl0ZTNfYmluZF9ibG9iKHNlbGYtPnN0LCBwb3MsIGJ1ZmZlciwgYnVmbGVuLCBTUUxJVEVfVFJBTlNJRU5UKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJjb3VsZCBub3QgY29udmVydCBCTE9CIHRvIGJ1ZmZlciIpOwotICAgICAgICAgICAgICAgIHJjID0gLTE7CisgICAgICAgICAgICBpZiAoc3RyaW5nID09IE5VTEwpCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgaWYgKGJ1ZmxlbiA+IElOVF9NQVgpIHsKKyAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN0cmluZyBsb25nZXIgdGhhbiBJTlRfTUFYIGJ5dGVzIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgcmMgPSBzcWxpdGUzX2JpbmRfdGV4dChzZWxmLT5zdCwgcG9zLCBzdHJpbmcsIChpbnQpYnVmbGVuLCBTUUxJVEVfVFJBTlNJRU5UKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFRZUEVfQlVGRkVSOiB7CisgICAgICAgICAgICBQeV9idWZmZXIgdmlldzsKKyAgICAgICAgICAgIGlmIChQeU9iamVjdF9HZXRCdWZmZXIocGFyYW1ldGVyLCAmdmlldywgUHlCVUZfU0lNUExFKSAhPSAwKSB7CisgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJjb3VsZCBub3QgY29udmVydCBCTE9CIHRvIGJ1ZmZlciIpOworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh2aWV3LmxlbiA+IElOVF9NQVgpIHsKKyAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkJMT0IgbG9uZ2VyIHRoYW4gSU5UX01BWCBieXRlcyIpOworICAgICAgICAgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZpZXcpOworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJjID0gc3FsaXRlM19iaW5kX2Jsb2Ioc2VsZi0+c3QsIHBvcywgdmlldy5idWYsIChpbnQpdmlldy5sZW4sIFNRTElURV9UUkFOU0lFTlQpOworICAgICAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmlldyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBjYXNlIFRZUEVfVU5LTk9XTjoKICAgICAgICAgICAgIHJjID0gLTE7CiAgICAgfQpAQCAtMTc3LDcgKzE5MSw3IEBACiAgICAgaW50IGk7CiAgICAgaW50IHJjOwogICAgIGludCBudW1fcGFyYW1zX25lZWRlZDsKLSAgICBpbnQgbnVtX3BhcmFtczsKKyAgICBQeV9zc2l6ZV90IG51bV9wYXJhbXM7CiAKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgbnVtX3BhcmFtc19uZWVkZWQgPSBzcWxpdGUzX2JpbmRfcGFyYW1ldGVyX2NvdW50KHNlbGYtPnN0KTsKQEAgLTE5Myw3ICsyMDcsOSBAQAogICAgICAgICAgICAgbnVtX3BhcmFtcyA9IFB5U2VxdWVuY2VfU2l6ZShwYXJhbWV0ZXJzKTsKICAgICAgICAgfQogICAgICAgICBpZiAobnVtX3BhcmFtcyAhPSBudW1fcGFyYW1zX25lZWRlZCkgewotICAgICAgICAgICAgUHlFcnJfRm9ybWF0KHB5c3FsaXRlX1Byb2dyYW1taW5nRXJyb3IsICJJbmNvcnJlY3QgbnVtYmVyIG9mIGJpbmRpbmdzIHN1cHBsaWVkLiBUaGUgY3VycmVudCBzdGF0ZW1lbnQgdXNlcyAlZCwgYW5kIHRoZXJlIGFyZSAlZCBzdXBwbGllZC4iLAorICAgICAgICAgICAgUHlFcnJfRm9ybWF0KHB5c3FsaXRlX1Byb2dyYW1taW5nRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIkluY29ycmVjdCBudW1iZXIgb2YgYmluZGluZ3Mgc3VwcGxpZWQuIFRoZSBjdXJyZW50ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAic3RhdGVtZW50IHVzZXMgJWQsIGFuZCB0aGVyZSBhcmUgJXpkIHN1cHBsaWVkLiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtX3BhcmFtc19uZWVkZWQsIG51bV9wYXJhbXMpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0yNDksNyArMjY1LDcgQEAKICAgICAgICAgICAgICAgICBjdXJyZW50X3BhcmFtID0gUHlEaWN0X0dldEl0ZW1TdHJpbmcocGFyYW1ldGVycywgYmluZGluZ19uYW1lKTsKICAgICAgICAgICAgICAgICBQeV9YSU5DUkVGKGN1cnJlbnRfcGFyYW0pOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBjdXJyZW50X3BhcmFtID0gUHlNYXBwaW5nX0dldEl0ZW1TdHJpbmcocGFyYW1ldGVycywgKGNoYXIqKWJpbmRpbmdfbmFtZSk7CisgICAgICAgICAgICAgICAgY3VycmVudF9wYXJhbSA9IFB5TWFwcGluZ19HZXRJdGVtU3RyaW5nKHBhcmFtZXRlcnMsIGJpbmRpbmdfbmFtZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoIWN1cnJlbnRfcGFyYW0pIHsKICAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQocHlzcWxpdGVfUHJvZ3JhbW1pbmdFcnJvciwgIllvdSBkaWQgbm90IHN1cHBseSBhIHZhbHVlIGZvciBiaW5kaW5nICVkLiIsIGkpOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fc3FsaXRlL3V0aWwuYyBiL01vZHVsZXMvX3NxbGl0ZS91dGlsLmMKaW5kZXggZDg4YmMzZi4uMzEyZmUzYiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fc3FsaXRlL3V0aWwuYworKysgYi9Nb2R1bGVzL19zcWxpdGUvdXRpbC5jCkBAIC0xMzIsNyArMTMyLDcgQEAKICAgICB9CiAjIGVuZGlmCiAjZW5kaWYKLSAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKHZhbHVlKTsKKyAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKFB5X1NBRkVfRE9XTkNBU1QodmFsdWUsIHNxbGl0ZV9pbnQ2NCwgbG9uZykpOwogfQogCiBzcWxpdGVfaW50NjQKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3NyZS5jIGIvTW9kdWxlcy9fc3JlLmMKaW5kZXggYjEyNThlZS4uZDZmY2RhMSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fc3JlLmMKKysrIGIvTW9kdWxlcy9fc3JlLmMKQEAgLTQsMjQgKzQsMjUgQEAKICAqIHJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRjaGluZyBlbmdpbmUKICAqCiAgKiBwYXJ0aWFsIGhpc3Rvcnk6Ci0gKiAxOTk5LTEwLTI0IGZsICBjcmVhdGVkIChiYXNlZCBvbiBleGlzdGluZyB0ZW1wbGF0ZSBtYXRjaGVyIGNvZGUpCi0gKiAyMDAwLTAzLTA2IGZsICBmaXJzdCBhbHBoYSwgc29ydCBvZgotICogMjAwMC0wOC0wMSBmbCAgZml4ZXMgZm9yIDEuNmIxCi0gKiAyMDAwLTA4LTA3IGZsICB1c2UgUHlPU19DaGVja1N0YWNrKCkgaWYgYXZhaWxhYmxlCi0gKiAyMDAwLTA5LTIwIGZsICBhZGRlZCBleHBhbmQgbWV0aG9kCi0gKiAyMDAxLTAzLTIwIGZsICBsb3RzIG9mIGZpeGVzIGZvciAyLjFiMgotICogMjAwMS0wNC0xNSBmbCAgZXhwb3J0IGNvcHlyaWdodCBhcyBQeXRob24gYXR0cmlidXRlLCBub3QgZ2xvYmFsCi0gKiAyMDAxLTA0LTI4IGZsICBhZGRlZCBfX2NvcHlfXyBtZXRob2RzICh3b3JrIGluIHByb2dyZXNzKQotICogMjAwMS0wNS0xNCBmbCAgZml4ZXMgZm9yIDEuNS4yIGNvbXBhdGliaWxpdHkKLSAqIDIwMDEtMDctMDEgZmwgIGFkZGVkIEJJR0NIQVJTRVQgc3VwcG9ydCAoZnJvbSBNYXJ0aW4gdm9uIExvZXdpcykKLSAqIDIwMDEtMTAtMTggZmwgIGZpeGVkIGdyb3VwIHJlc2V0IGlzc3VlIChmcm9tIE1hdHRoZXcgTXVlbGxlcikKLSAqIDIwMDEtMTAtMjAgZmwgIGFkZGVkIHNwbGl0IHByaW1pdGl2ZTsgcmVlbmFibGUgdW5pY29kZSBmb3IgMS42LzIuMC8yLjEKLSAqIDIwMDEtMTAtMjEgZmwgIGFkZGVkIHN1Yi9zdWJuIHByaW1pdGl2ZQotICogMjAwMS0xMC0yNCBmbCAgYWRkZWQgZmluZGl0ZXIgcHJpbWl0aXZlIChmb3IgMi4yIG9ubHkpCi0gKiAyMDAxLTEyLTA3IGZsICBmaXhlZCBtZW1vcnkgbGVhayBpbiBzdWIvc3VibiAoR3VpZG8gdmFuIFJvc3N1bSkKLSAqIDIwMDItMTEtMDkgZmwgIGZpeGVkIGVtcHR5IHN1Yi9zdWJuIHJldHVybiB0eXBlCi0gKiAyMDAzLTA0LTE4IG12bCBmdWxseSBzdXBwb3J0IDQtYnl0ZSBjb2RlcwotICogMjAwMy0xMC0xNyBnbiAgaW1wbGVtZW50ZWQgbm9uIHJlY3Vyc2l2ZSBzY2hlbWUKKyAqIDE5OTktMTAtMjQgZmwgICBjcmVhdGVkIChiYXNlZCBvbiBleGlzdGluZyB0ZW1wbGF0ZSBtYXRjaGVyIGNvZGUpCisgKiAyMDAwLTAzLTA2IGZsICAgZmlyc3QgYWxwaGEsIHNvcnQgb2YKKyAqIDIwMDAtMDgtMDEgZmwgICBmaXhlcyBmb3IgMS42YjEKKyAqIDIwMDAtMDgtMDcgZmwgICB1c2UgUHlPU19DaGVja1N0YWNrKCkgaWYgYXZhaWxhYmxlCisgKiAyMDAwLTA5LTIwIGZsICAgYWRkZWQgZXhwYW5kIG1ldGhvZAorICogMjAwMS0wMy0yMCBmbCAgIGxvdHMgb2YgZml4ZXMgZm9yIDIuMWIyCisgKiAyMDAxLTA0LTE1IGZsICAgZXhwb3J0IGNvcHlyaWdodCBhcyBQeXRob24gYXR0cmlidXRlLCBub3QgZ2xvYmFsCisgKiAyMDAxLTA0LTI4IGZsICAgYWRkZWQgX19jb3B5X18gbWV0aG9kcyAod29yayBpbiBwcm9ncmVzcykKKyAqIDIwMDEtMDUtMTQgZmwgICBmaXhlcyBmb3IgMS41LjIgY29tcGF0aWJpbGl0eQorICogMjAwMS0wNy0wMSBmbCAgIGFkZGVkIEJJR0NIQVJTRVQgc3VwcG9ydCAoZnJvbSBNYXJ0aW4gdm9uIExvZXdpcykKKyAqIDIwMDEtMTAtMTggZmwgICBmaXhlZCBncm91cCByZXNldCBpc3N1ZSAoZnJvbSBNYXR0aGV3IE11ZWxsZXIpCisgKiAyMDAxLTEwLTIwIGZsICAgYWRkZWQgc3BsaXQgcHJpbWl0aXZlOyByZWVuYWJsZSB1bmljb2RlIGZvciAxLjYvMi4wLzIuMQorICogMjAwMS0xMC0yMSBmbCAgIGFkZGVkIHN1Yi9zdWJuIHByaW1pdGl2ZQorICogMjAwMS0xMC0yNCBmbCAgIGFkZGVkIGZpbmRpdGVyIHByaW1pdGl2ZSAoZm9yIDIuMiBvbmx5KQorICogMjAwMS0xMi0wNyBmbCAgIGZpeGVkIG1lbW9yeSBsZWFrIGluIHN1Yi9zdWJuIChHdWlkbyB2YW4gUm9zc3VtKQorICogMjAwMi0xMS0wOSBmbCAgIGZpeGVkIGVtcHR5IHN1Yi9zdWJuIHJldHVybiB0eXBlCisgKiAyMDAzLTA0LTE4IG12bCAgZnVsbHkgc3VwcG9ydCA0LWJ5dGUgY29kZXMKKyAqIDIwMDMtMTAtMTcgZ24gICBpbXBsZW1lbnRlZCBub24gcmVjdXJzaXZlIHNjaGVtZQorICogMjAxMy0wMi0wNCBtcmFiIGFkZGVkIGZ1bGxtYXRjaCBwcmltaXRpdmUKICAqCiAgKiBDb3B5cmlnaHQgKGMpIDE5OTctMjAwMSBieSBTZWNyZXQgTGFicyBBQi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgpAQCAtMzQsOCArMzUsNiBAQAogICogb3RoZXIgY29tcGF0aWJpbGl0eSB3b3JrLgogICovCiAKLSNpZm5kZWYgU1JFX1JFQ1VSU0lWRQotCiBzdGF0aWMgY2hhciBjb3B5cmlnaHRbXSA9CiAgICAgIiBTUkUgMi4yLjIgQ29weXJpZ2h0IChjKSAxOTk3LTIwMDIgYnkgU2VjcmV0IExhYnMgQUIgIjsKIApAQCAtNDYsNiArNDUsOCBAQAogCiAjaW5jbHVkZSAic3JlLmgiCiAKKyNkZWZpbmUgU1JFX0NPREVfQklUUyAoOCAqIHNpemVvZihTUkVfQ09ERSkpCisKICNpbmNsdWRlIDxjdHlwZS5oPgogCiAvKiBuYW1lIG9mIHRoaXMgbW9kdWxlLCBtaW51cyB0aGUgbGVhZGluZyB1bmRlcnNjb3JlICovCkBAIC01OCw5ICs1OSw2IEBACiAvKiBkZWZpbmluZyB0aGlzIG9uZSBlbmFibGVzIHRyYWNpbmcgKi8KICN1bmRlZiBWRVJCT1NFCiAKLS8qIGRlZmluaW5nIHRoaXMgZW5hYmxlcyB1bmljb2RlIHN1cHBvcnQgKGRlZmF1bHQgdW5kZXIgMS42YTEgYW5kIGxhdGVyKSAqLwotI2RlZmluZSBIQVZFX1VOSUNPREUKLQogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIG9wdGlvbmFsIGZlYXR1cmVzICovCiAKQEAgLTcwLDEwICs2OCw2IEBACiAvKiBlbmFibGVzIGNvcHkvZGVlcGNvcHkgaGFuZGxpbmcgKHdvcmsgaW4gcHJvZ3Jlc3MpICovCiAjdW5kZWYgVVNFX0JVSUxUSU5fQ09QWQogCi0jaWYgUFlfVkVSU0lPTl9IRVggPCAweDAxMDYwMDAwCi0jZGVmaW5lIFB5T2JqZWN0X0RFTChvcCkgUHlNZW1fREVMKChvcCkpCi0jZW5kaWYKLQogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogI2lmIGRlZmluZWQoX01TQ19WRVIpCkBAIC0xNTAsOSArMTQ0LDYgQEAKIC8qIGxvY2FsZS1zcGVjaWZpYyBjaGFyYWN0ZXIgcHJlZGljYXRlcyAqLwogLyogIShjICYgfk4pID09IChjIDwgTisxKSBmb3IgYW55IHVuc2lnbmVkIGMsIHRoaXMgYXZvaWRzCiAgKiB3YXJuaW5ncyB3aGVuIGMncyB0eXBlIHN1cHBvcnRzIG9ubHkgbnVtYmVycyA8IE4rMSAqLwotI2RlZmluZSBTUkVfTE9DX0lTX0RJR0lUKGNoKSAoISgoY2gpICYgfjI1NSkgPyBpc2RpZ2l0KChjaCkpIDogMCkKLSNkZWZpbmUgU1JFX0xPQ19JU19TUEFDRShjaCkgKCEoKGNoKSAmIH4yNTUpID8gaXNzcGFjZSgoY2gpKSA6IDApCi0jZGVmaW5lIFNSRV9MT0NfSVNfTElORUJSRUFLKGNoKSAoKGNoKSA9PSAnXG4nKQogI2RlZmluZSBTUkVfTE9DX0lTX0FMTlVNKGNoKSAoISgoY2gpICYgfjI1NSkgPyBpc2FsbnVtKChjaCkpIDogMCkKICNkZWZpbmUgU1JFX0xPQ19JU19XT1JEKGNoKSAoU1JFX0xPQ19JU19BTE5VTSgoY2gpKSB8fCAoY2gpID09ICdfJykKIApAQCAtMjU2LDEzODAgKzI0NywzMiBAQAogCiAvKiBnZW5lcmF0ZSA4LWJpdCB2ZXJzaW9uICovCiAKLSNkZWZpbmUgU1JFX0NIQVIgdW5zaWduZWQgY2hhcgotI2RlZmluZSBTUkVfQ0hBUkdFVChzdGF0ZSwgYnVmLCBpbmRleCkgKCh1bnNpZ25lZCBjaGFyKilidWYpW2luZGV4XQotI2RlZmluZSBTUkVfQVQgc3JlX2F0Ci0jZGVmaW5lIFNSRV9DT1VOVCBzcmVfY291bnQKLSNkZWZpbmUgU1JFX0NIQVJTRVQgc3JlX2NoYXJzZXQKLSNkZWZpbmUgU1JFX0lORk8gc3JlX2luZm8KLSNkZWZpbmUgU1JFX01BVENIIHNyZV9tYXRjaAotI2RlZmluZSBTUkVfTUFUQ0hfQ09OVEVYVCBzcmVfbWF0Y2hfY29udGV4dAotI2RlZmluZSBTUkVfU0VBUkNIIHNyZV9zZWFyY2gKKyNkZWZpbmUgU1JFX0NIQVIgUHlfVUNTMQorI2RlZmluZSBTSVpFT0ZfU1JFX0NIQVIgMQorI2RlZmluZSBTUkUoRikgc3JlX3VjczFfIyNGCisjaW5jbHVkZSAic3JlX2xpYi5oIgogCi0jZGVmaW5lIFNSRV9SRUNVUlNJVkUKLSNpbmNsdWRlICJfc3JlLmMiCi0jdW5kZWYgU1JFX1JFQ1VSU0lWRQorLyogZ2VuZXJhdGUgMTYtYml0IHVuaWNvZGUgdmVyc2lvbiAqLwogCi0jdW5kZWYgU1JFX1NFQVJDSAotI3VuZGVmIFNSRV9NQVRDSAotI3VuZGVmIFNSRV9NQVRDSF9DT05URVhUCi0jdW5kZWYgU1JFX0lORk8KLSN1bmRlZiBTUkVfQ0hBUlNFVAotI3VuZGVmIFNSRV9DT1VOVAotI3VuZGVmIFNSRV9BVAotI3VuZGVmIFNSRV9DSEFSCi0jdW5kZWYgU1JFX0NIQVJHRVQKKyNkZWZpbmUgU1JFX0NIQVIgUHlfVUNTMgorI2RlZmluZSBTSVpFT0ZfU1JFX0NIQVIgMgorI2RlZmluZSBTUkUoRikgc3JlX3VjczJfIyNGCisjaW5jbHVkZSAic3JlX2xpYi5oIgogCi0vKiBnZW5lcmF0ZSA4LzE2LzMyLWJpdCB1bmljb2RlIHZlcnNpb24gKi8KKy8qIGdlbmVyYXRlIDMyLWJpdCB1bmljb2RlIHZlcnNpb24gKi8KIAotI2RlZmluZSBTUkVfQ0hBUiB2b2lkCi0jZGVmaW5lIFNSRV9DSEFSR0VUKHN0YXRlLCBidWYsIGluZGV4KSBcCi0gICAgKChzdGF0ZS0+Y2hhcnNpemU9PTEpID8gKChQeV9VQ1MxKilidWYpW2luZGV4XSA6IFwKLSAgICAgKHN0YXRlLT5jaGFyc2l6ZT09MikgPyAoKFB5X1VDUzIqKWJ1ZilbaW5kZXhdIDogXAotICAgICAoKFB5X1VDUzQqKWJ1ZilbaW5kZXhdKQotI2RlZmluZSBTUkVfQVQgc3JlX3VhdAotI2RlZmluZSBTUkVfQ09VTlQgc3JlX3Vjb3VudAotI2RlZmluZSBTUkVfQ0hBUlNFVCBzcmVfdWNoYXJzZXQKLSNkZWZpbmUgU1JFX0lORk8gc3JlX3VpbmZvCi0jZGVmaW5lIFNSRV9NQVRDSCBzcmVfdW1hdGNoCi0jZGVmaW5lIFNSRV9NQVRDSF9DT05URVhUIHNyZV91bWF0Y2hfY29udGV4dAotI2RlZmluZSBTUkVfU0VBUkNIIHNyZV91c2VhcmNoCi0KLSNlbmRpZiAvKiBTUkVfUkVDVVJTSVZFICovCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0vKiBTdHJpbmcgbWF0Y2hpbmcgZW5naW5lICovCi0KLS8qIHRoZSBmb2xsb3dpbmcgc2VjdGlvbiBpcyBjb21waWxlZCB0d2ljZSwgd2l0aCBkaWZmZXJlbnQgY2hhcmFjdGVyCi0gICBzZXR0aW5ncyAqLwotCi1MT0NBTChpbnQpCi1TUkVfQVQoU1JFX1NUQVRFKiBzdGF0ZSwgY2hhciogcHRyLCBTUkVfQ09ERSBhdCkKLXsKLSAgICAvKiBjaGVjayBpZiBwb2ludGVyIGlzIGF0IGdpdmVuIHBvc2l0aW9uICovCi0KLSAgICBQeV9zc2l6ZV90IHRoaXNwLCB0aGF0cDsKLQotICAgIHN3aXRjaCAoYXQpIHsKLQotICAgIGNhc2UgU1JFX0FUX0JFR0lOTklORzoKLSAgICBjYXNlIFNSRV9BVF9CRUdJTk5JTkdfU1RSSU5HOgotICAgICAgICByZXR1cm4gKCh2b2lkKikgcHRyID09IHN0YXRlLT5iZWdpbm5pbmcpOwotCi0gICAgY2FzZSBTUkVfQVRfQkVHSU5OSU5HX0xJTkU6Ci0gICAgICAgIHJldHVybiAoKHZvaWQqKSBwdHIgPT0gc3RhdGUtPmJlZ2lubmluZyB8fAotICAgICAgICAgICAgICAgIFNSRV9JU19MSU5FQlJFQUsoKGludCkgU1JFX0NIQVJHRVQoc3RhdGUsIHB0ciwgLTEpKSk7Ci0KLSAgICBjYXNlIFNSRV9BVF9FTkQ6Ci0gICAgICAgIHJldHVybiAoKCh2b2lkKikgKHB0citzdGF0ZS0+Y2hhcnNpemUpID09IHN0YXRlLT5lbmQgJiYKLSAgICAgICAgICAgICAgICAgU1JFX0lTX0xJTkVCUkVBSygoaW50KSBTUkVfQ0hBUkdFVChzdGF0ZSwgcHRyLCAwKSkpIHx8Ci0gICAgICAgICAgICAgICAgKCh2b2lkKikgcHRyID09IHN0YXRlLT5lbmQpKTsKLQotICAgIGNhc2UgU1JFX0FUX0VORF9MSU5FOgotICAgICAgICByZXR1cm4gKCh2b2lkKikgcHRyID09IHN0YXRlLT5lbmQgfHwKLSAgICAgICAgICAgICAgICBTUkVfSVNfTElORUJSRUFLKChpbnQpIFNSRV9DSEFSR0VUKHN0YXRlLCBwdHIsIDApKSk7Ci0KLSAgICBjYXNlIFNSRV9BVF9FTkRfU1RSSU5HOgotICAgICAgICByZXR1cm4gKCh2b2lkKikgcHRyID09IHN0YXRlLT5lbmQpOwotCi0gICAgY2FzZSBTUkVfQVRfQk9VTkRBUlk6Ci0gICAgICAgIGlmIChzdGF0ZS0+YmVnaW5uaW5nID09IHN0YXRlLT5lbmQpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgdGhhdHAgPSAoKHZvaWQqKSBwdHIgPiBzdGF0ZS0+YmVnaW5uaW5nKSA/Ci0gICAgICAgICAgICBTUkVfSVNfV09SRCgoaW50KSBTUkVfQ0hBUkdFVChzdGF0ZSwgcHRyLCAtMSkpIDogMDsKLSAgICAgICAgdGhpc3AgPSAoKHZvaWQqKSBwdHIgPCBzdGF0ZS0+ZW5kKSA/Ci0gICAgICAgICAgICBTUkVfSVNfV09SRCgoaW50KSBTUkVfQ0hBUkdFVChzdGF0ZSwgcHRyLCAwKSkgOiAwOwotICAgICAgICByZXR1cm4gdGhpc3AgIT0gdGhhdHA7Ci0KLSAgICBjYXNlIFNSRV9BVF9OT05fQk9VTkRBUlk6Ci0gICAgICAgIGlmIChzdGF0ZS0+YmVnaW5uaW5nID09IHN0YXRlLT5lbmQpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgdGhhdHAgPSAoKHZvaWQqKSBwdHIgPiBzdGF0ZS0+YmVnaW5uaW5nKSA/Ci0gICAgICAgICAgICBTUkVfSVNfV09SRCgoaW50KSBTUkVfQ0hBUkdFVChzdGF0ZSwgcHRyLCAtMSkpIDogMDsKLSAgICAgICAgdGhpc3AgPSAoKHZvaWQqKSBwdHIgPCBzdGF0ZS0+ZW5kKSA/Ci0gICAgICAgICAgICBTUkVfSVNfV09SRCgoaW50KSBTUkVfQ0hBUkdFVChzdGF0ZSwgcHRyLCAwKSkgOiAwOwotICAgICAgICByZXR1cm4gdGhpc3AgPT0gdGhhdHA7Ci0KLSAgICBjYXNlIFNSRV9BVF9MT0NfQk9VTkRBUlk6Ci0gICAgICAgIGlmIChzdGF0ZS0+YmVnaW5uaW5nID09IHN0YXRlLT5lbmQpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgdGhhdHAgPSAoKHZvaWQqKSBwdHIgPiBzdGF0ZS0+YmVnaW5uaW5nKSA/Ci0gICAgICAgICAgICBTUkVfTE9DX0lTX1dPUkQoKGludCkgU1JFX0NIQVJHRVQoc3RhdGUsIHB0ciwgLTEpKSA6IDA7Ci0gICAgICAgIHRoaXNwID0gKCh2b2lkKikgcHRyIDwgc3RhdGUtPmVuZCkgPwotICAgICAgICAgICAgU1JFX0xPQ19JU19XT1JEKChpbnQpIFNSRV9DSEFSR0VUKHN0YXRlLCBwdHIsIDApKSA6IDA7Ci0gICAgICAgIHJldHVybiB0aGlzcCAhPSB0aGF0cDsKLQotICAgIGNhc2UgU1JFX0FUX0xPQ19OT05fQk9VTkRBUlk6Ci0gICAgICAgIGlmIChzdGF0ZS0+YmVnaW5uaW5nID09IHN0YXRlLT5lbmQpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgdGhhdHAgPSAoKHZvaWQqKSBwdHIgPiBzdGF0ZS0+YmVnaW5uaW5nKSA/Ci0gICAgICAgICAgICBTUkVfTE9DX0lTX1dPUkQoKGludCkgU1JFX0NIQVJHRVQoc3RhdGUsIHB0ciwgLTEpKSA6IDA7Ci0gICAgICAgIHRoaXNwID0gKCh2b2lkKikgcHRyIDwgc3RhdGUtPmVuZCkgPwotICAgICAgICAgICAgU1JFX0xPQ19JU19XT1JEKChpbnQpIFNSRV9DSEFSR0VUKHN0YXRlLCBwdHIsIDApKSA6IDA7Ci0gICAgICAgIHJldHVybiB0aGlzcCA9PSB0aGF0cDsKLQotICAgIGNhc2UgU1JFX0FUX1VOSV9CT1VOREFSWToKLSAgICAgICAgaWYgKHN0YXRlLT5iZWdpbm5pbmcgPT0gc3RhdGUtPmVuZCkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB0aGF0cCA9ICgodm9pZCopIHB0ciA+IHN0YXRlLT5iZWdpbm5pbmcpID8KLSAgICAgICAgICAgIFNSRV9VTklfSVNfV09SRCgoaW50KSBTUkVfQ0hBUkdFVChzdGF0ZSwgcHRyLCAtMSkpIDogMDsKLSAgICAgICAgdGhpc3AgPSAoKHZvaWQqKSBwdHIgPCBzdGF0ZS0+ZW5kKSA/Ci0gICAgICAgICAgICBTUkVfVU5JX0lTX1dPUkQoKGludCkgU1JFX0NIQVJHRVQoc3RhdGUsIHB0ciwgMCkpIDogMDsKLSAgICAgICAgcmV0dXJuIHRoaXNwICE9IHRoYXRwOwotCi0gICAgY2FzZSBTUkVfQVRfVU5JX05PTl9CT1VOREFSWToKLSAgICAgICAgaWYgKHN0YXRlLT5iZWdpbm5pbmcgPT0gc3RhdGUtPmVuZCkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB0aGF0cCA9ICgodm9pZCopIHB0ciA+IHN0YXRlLT5iZWdpbm5pbmcpID8KLSAgICAgICAgICAgIFNSRV9VTklfSVNfV09SRCgoaW50KSBTUkVfQ0hBUkdFVChzdGF0ZSwgcHRyLCAtMSkpIDogMDsKLSAgICAgICAgdGhpc3AgPSAoKHZvaWQqKSBwdHIgPCBzdGF0ZS0+ZW5kKSA/Ci0gICAgICAgICAgICBTUkVfVU5JX0lTX1dPUkQoKGludCkgU1JFX0NIQVJHRVQoc3RhdGUsIHB0ciwgMCkpIDogMDsKLSAgICAgICAgcmV0dXJuIHRoaXNwID09IHRoYXRwOwotCi0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLUxPQ0FMKGludCkKLVNSRV9DSEFSU0VUKFNSRV9DT0RFKiBzZXQsIFNSRV9DT0RFIGNoKQotewotICAgIC8qIGNoZWNrIGlmIGNoYXJhY3RlciBpcyBhIG1lbWJlciBvZiB0aGUgZ2l2ZW4gc2V0ICovCi0KLSAgICBpbnQgb2sgPSAxOwotCi0gICAgZm9yICg7OykgewotICAgICAgICBzd2l0Y2ggKCpzZXQrKykgewotCi0gICAgICAgIGNhc2UgU1JFX09QX0ZBSUxVUkU6Ci0gICAgICAgICAgICByZXR1cm4gIW9rOwotCi0gICAgICAgIGNhc2UgU1JFX09QX0xJVEVSQUw6Ci0gICAgICAgICAgICAvKiA8TElURVJBTD4gPGNvZGU+ICovCi0gICAgICAgICAgICBpZiAoY2ggPT0gc2V0WzBdKQotICAgICAgICAgICAgICAgIHJldHVybiBvazsKLSAgICAgICAgICAgIHNldCsrOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBTUkVfT1BfQ0FURUdPUlk6Ci0gICAgICAgICAgICAvKiA8Q0FURUdPUlk+IDxjb2RlPiAqLwotICAgICAgICAgICAgaWYgKHNyZV9jYXRlZ29yeShzZXRbMF0sIChpbnQpIGNoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gb2s7Ci0gICAgICAgICAgICBzZXQgKz0gMTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgU1JFX09QX0NIQVJTRVQ6Ci0gICAgICAgICAgICBpZiAoc2l6ZW9mKFNSRV9DT0RFKSA9PSAyKSB7Ci0gICAgICAgICAgICAgICAgLyogPENIQVJTRVQ+IDxiaXRtYXA+ICgxNiBiaXRzIHBlciBjb2RlIHdvcmQpICovCi0gICAgICAgICAgICAgICAgaWYgKGNoIDwgMjU2ICYmIChzZXRbY2ggPj4gNF0gJiAoMSA8PCAoY2ggJiAxNSkpKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9rOwotICAgICAgICAgICAgICAgIHNldCArPSAxNjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIC8qIDxDSEFSU0VUPiA8Yml0bWFwPiAoMzIgYml0cyBwZXIgY29kZSB3b3JkKSAqLwotICAgICAgICAgICAgICAgIGlmIChjaCA8IDI1NiAmJiAoc2V0W2NoID4+IDVdICYgKDF1IDw8IChjaCAmIDMxKSkpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2s7Ci0gICAgICAgICAgICAgICAgc2V0ICs9IDg7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFNSRV9PUF9SQU5HRToKLSAgICAgICAgICAgIC8qIDxSQU5HRT4gPGxvd2VyPiA8dXBwZXI+ICovCi0gICAgICAgICAgICBpZiAoc2V0WzBdIDw9IGNoICYmIGNoIDw9IHNldFsxXSkKLSAgICAgICAgICAgICAgICByZXR1cm4gb2s7Ci0gICAgICAgICAgICBzZXQgKz0gMjsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgU1JFX09QX05FR0FURToKLSAgICAgICAgICAgIG9rID0gIW9rOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBTUkVfT1BfQklHQ0hBUlNFVDoKLSAgICAgICAgICAgIC8qIDxCSUdDSEFSU0VUPiA8YmxvY2tjb3VudD4gPDI1NiBibG9ja2luZGljZXM+IDxibG9ja3M+ICovCi0gICAgICAgIHsKLSAgICAgICAgICAgIFB5X3NzaXplX3QgY291bnQsIGJsb2NrOwotICAgICAgICAgICAgY291bnQgPSAqKHNldCsrKTsKLQotICAgICAgICAgICAgaWYgKHNpemVvZihTUkVfQ09ERSkgPT0gMikgewotICAgICAgICAgICAgICAgIGJsb2NrID0gKCh1bnNpZ25lZCBjaGFyKilzZXQpW2NoID4+IDhdOwotICAgICAgICAgICAgICAgIHNldCArPSAxMjg7Ci0gICAgICAgICAgICAgICAgaWYgKHNldFtibG9jayoxNiArICgoY2ggJiAyNTUpPj40KV0gJiAoMSA8PCAoY2ggJiAxNSkpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2s7Ci0gICAgICAgICAgICAgICAgc2V0ICs9IGNvdW50KjE2OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgLyogIShjICYgfk4pID09IChjIDwgTisxKSBmb3IgYW55IHVuc2lnbmVkIGMsIHRoaXMgYXZvaWRzCi0gICAgICAgICAgICAgICAgICogd2FybmluZ3Mgd2hlbiBjJ3MgdHlwZSBzdXBwb3J0cyBvbmx5IG51bWJlcnMgPCBOKzEgKi8KLSAgICAgICAgICAgICAgICBpZiAoIShjaCAmIH42NTUzNSkpCi0gICAgICAgICAgICAgICAgICAgIGJsb2NrID0gKCh1bnNpZ25lZCBjaGFyKilzZXQpW2NoID4+IDhdOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgYmxvY2sgPSAtMTsKLSAgICAgICAgICAgICAgICBzZXQgKz0gNjQ7Ci0gICAgICAgICAgICAgICAgaWYgKGJsb2NrID49MCAmJgotICAgICAgICAgICAgICAgICAgICAoc2V0W2Jsb2NrKjggKyAoKGNoICYgMjU1KT4+NSldICYgKDF1IDw8IChjaCAmIDMxKSkpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2s7Ci0gICAgICAgICAgICAgICAgc2V0ICs9IGNvdW50Kjg7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAvKiBpbnRlcm5hbCBlcnJvciAtLSB0aGVyZSdzIG5vdCBtdWNoIHdlIGNhbiBkbyBhYm91dCBpdAotICAgICAgICAgICAgICAgaGVyZSwgc28gbGV0J3MganVzdCBwcmV0ZW5kIGl0IGRpZG4ndCBtYXRjaC4uLiAqLwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLUxPQ0FMKFB5X3NzaXplX3QpIFNSRV9NQVRDSChTUkVfU1RBVEUqIHN0YXRlLCBTUkVfQ09ERSogcGF0dGVybik7Ci0KLUxPQ0FMKFB5X3NzaXplX3QpCi1TUkVfQ09VTlQoU1JFX1NUQVRFKiBzdGF0ZSwgU1JFX0NPREUqIHBhdHRlcm4sIFB5X3NzaXplX3QgbWF4Y291bnQpCi17Ci0gICAgU1JFX0NPREUgY2hyOwotICAgIGNoYXIqIHB0ciA9IChjaGFyICopc3RhdGUtPnB0cjsKLSAgICBjaGFyKiBlbmQgPSAoY2hhciAqKXN0YXRlLT5lbmQ7Ci0gICAgUHlfc3NpemVfdCBpOwotCi0gICAgLyogYWRqdXN0IGVuZCAqLwotICAgIGlmIChtYXhjb3VudCA8IChlbmQgLSBwdHIpIC8gc3RhdGUtPmNoYXJzaXplICYmIG1heGNvdW50ICE9IFNSRV9NQVhSRVBFQVQpCi0gICAgICAgIGVuZCA9IHB0ciArIG1heGNvdW50KnN0YXRlLT5jaGFyc2l6ZTsKLQotICAgIHN3aXRjaCAocGF0dGVyblswXSkgewotCi0gICAgY2FzZSBTUkVfT1BfSU46Ci0gICAgICAgIC8qIHJlcGVhdGVkIHNldCAqLwotICAgICAgICBUUkFDRSgoInwlcHwlcHxDT1VOVCBJTlxuIiwgcGF0dGVybiwgcHRyKSk7Ci0gICAgICAgIHdoaWxlIChwdHIgPCBlbmQgJiYKLSAgICAgICAgICAgICAgIFNSRV9DSEFSU0VUKHBhdHRlcm4gKyAyLCBTUkVfQ0hBUkdFVChzdGF0ZSwgcHRyLCAwKSkpCi0gICAgICAgICAgICBwdHIgKz0gc3RhdGUtPmNoYXJzaXplOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgU1JFX09QX0FOWToKLSAgICAgICAgLyogcmVwZWF0ZWQgZG90IHdpbGRjYXJkLiAqLwotICAgICAgICBUUkFDRSgoInwlcHwlcHxDT1VOVCBBTllcbiIsIHBhdHRlcm4sIHB0cikpOwotICAgICAgICB3aGlsZSAocHRyIDwgZW5kICYmICFTUkVfSVNfTElORUJSRUFLKFNSRV9DSEFSR0VUKHN0YXRlLCBwdHIsIDApKSkKLSAgICAgICAgICAgIHB0ciArPSBzdGF0ZS0+Y2hhcnNpemU7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTUkVfT1BfQU5ZX0FMTDoKLSAgICAgICAgLyogcmVwZWF0ZWQgZG90IHdpbGRjYXJkLiAgc2tpcCB0byB0aGUgZW5kIG9mIHRoZSB0YXJnZXQKLSAgICAgICAgICAgc3RyaW5nLCBhbmQgYmFja3RyYWNrIGZyb20gdGhlcmUgKi8KLSAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8Q09VTlQgQU5ZX0FMTFxuIiwgcGF0dGVybiwgcHRyKSk7Ci0gICAgICAgIHB0ciA9IGVuZDsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNSRV9PUF9MSVRFUkFMOgotICAgICAgICAvKiByZXBlYXRlZCBsaXRlcmFsICovCi0gICAgICAgIGNociA9IHBhdHRlcm5bMV07Ci0gICAgICAgIFRSQUNFKCgifCVwfCVwfENPVU5UIExJVEVSQUwgJWRcbiIsIHBhdHRlcm4sIHB0ciwgY2hyKSk7Ci0gICAgICAgIHdoaWxlIChwdHIgPCBlbmQgJiYgKFNSRV9DT0RFKSBTUkVfQ0hBUkdFVChzdGF0ZSwgcHRyLCAwKSA9PSBjaHIpCi0gICAgICAgICAgICBwdHIgKz0gc3RhdGUtPmNoYXJzaXplOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgU1JFX09QX0xJVEVSQUxfSUdOT1JFOgotICAgICAgICAvKiByZXBlYXRlZCBsaXRlcmFsICovCi0gICAgICAgIGNociA9IHBhdHRlcm5bMV07Ci0gICAgICAgIFRSQUNFKCgifCVwfCVwfENPVU5UIExJVEVSQUxfSUdOT1JFICVkXG4iLCBwYXR0ZXJuLCBwdHIsIGNocikpOwotICAgICAgICB3aGlsZSAocHRyIDwgZW5kICYmIChTUkVfQ09ERSkgc3RhdGUtPmxvd2VyKFNSRV9DSEFSR0VUKHN0YXRlLCBwdHIsIDApKSA9PSBjaHIpCi0gICAgICAgICAgICBwdHIgKz0gc3RhdGUtPmNoYXJzaXplOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgU1JFX09QX05PVF9MSVRFUkFMOgotICAgICAgICAvKiByZXBlYXRlZCBub24tbGl0ZXJhbCAqLwotICAgICAgICBjaHIgPSBwYXR0ZXJuWzFdOwotICAgICAgICBUUkFDRSgoInwlcHwlcHxDT1VOVCBOT1RfTElURVJBTCAlZFxuIiwgcGF0dGVybiwgcHRyLCBjaHIpKTsKLSAgICAgICAgd2hpbGUgKHB0ciA8IGVuZCAmJiAoU1JFX0NPREUpIFNSRV9DSEFSR0VUKHN0YXRlLCBwdHIsIDApICE9IGNocikKLSAgICAgICAgICAgIHB0ciArPSBzdGF0ZS0+Y2hhcnNpemU7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTUkVfT1BfTk9UX0xJVEVSQUxfSUdOT1JFOgotICAgICAgICAvKiByZXBlYXRlZCBub24tbGl0ZXJhbCAqLwotICAgICAgICBjaHIgPSBwYXR0ZXJuWzFdOwotICAgICAgICBUUkFDRSgoInwlcHwlcHxDT1VOVCBOT1RfTElURVJBTF9JR05PUkUgJWRcbiIsIHBhdHRlcm4sIHB0ciwgY2hyKSk7Ci0gICAgICAgIHdoaWxlIChwdHIgPCBlbmQgJiYgKFNSRV9DT0RFKSBzdGF0ZS0+bG93ZXIoU1JFX0NIQVJHRVQoc3RhdGUsIHB0ciwgMCkpICE9IGNocikKLSAgICAgICAgICAgIHB0ciArPSBzdGF0ZS0+Y2hhcnNpemU7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgZGVmYXVsdDoKLSAgICAgICAgLyogcmVwZWF0ZWQgc2luZ2xlIGNoYXJhY3RlciBwYXR0ZXJuICovCi0gICAgICAgIFRSQUNFKCgifCVwfCVwfENPVU5UIFNVQlBBVFRFUk5cbiIsIHBhdHRlcm4sIHB0cikpOwotICAgICAgICB3aGlsZSAoKGNoYXIqKSBzdGF0ZS0+cHRyIDwgZW5kKSB7Ci0gICAgICAgICAgICBpID0gU1JFX01BVENIKHN0YXRlLCBwYXR0ZXJuKTsKLSAgICAgICAgICAgIGlmIChpIDwgMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gaTsKLSAgICAgICAgICAgIGlmICghaSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBUUkFDRSgoInwlcHwlcHxDT1VOVCAlIiBQWV9GT1JNQVRfU0laRV9UICJkXG4iLCBwYXR0ZXJuLCBwdHIsCi0gICAgICAgICAgICAgICAoKGNoYXIqKXN0YXRlLT5wdHIgLSBwdHIpL3N0YXRlLT5jaGFyc2l6ZSkpOwotICAgICAgICByZXR1cm4gKChjaGFyKilzdGF0ZS0+cHRyIC0gcHRyKS9zdGF0ZS0+Y2hhcnNpemU7Ci0gICAgfQotCi0gICAgVFJBQ0UoKCJ8JXB8JXB8Q09VTlQgJSIgUFlfRk9STUFUX1NJWkVfVCAiZFxuIiwgcGF0dGVybiwgcHRyLAotICAgICAgICAgICAocHRyIC0gKGNoYXIqKSBzdGF0ZS0+cHRyKS9zdGF0ZS0+Y2hhcnNpemUpKTsKLSAgICByZXR1cm4gKHB0ciAtIChjaGFyKikgc3RhdGUtPnB0cikvc3RhdGUtPmNoYXJzaXplOwotfQotCi0jaWYgMCAvKiBub3QgdXNlZCBpbiB0aGlzIHJlbGVhc2UgKi8KLUxPQ0FMKGludCkKLVNSRV9JTkZPKFNSRV9TVEFURSogc3RhdGUsIFNSRV9DT0RFKiBwYXR0ZXJuKQotewotICAgIC8qIGNoZWNrIGlmIGFuIFNSRV9PUF9JTkZPIGJsb2NrIG1hdGNoZXMgYXQgdGhlIGN1cnJlbnQgcG9zaXRpb24uCi0gICAgICAgcmV0dXJucyB0aGUgbnVtYmVyIG9mIFNSRV9DT0RFIG9iamVjdHMgdG8gc2tpcCBpZiBzdWNjZXNzZnVsLCAwCi0gICAgICAgaWYgbm8gbWF0Y2ggKi8KLQotICAgIGNoYXIqIGVuZCA9IHN0YXRlLT5lbmQ7Ci0gICAgY2hhciogcHRyID0gc3RhdGUtPnB0cjsKLSAgICBQeV9zc2l6ZV90IGk7Ci0KLSAgICAvKiBjaGVjayBtaW5pbWFsIGxlbmd0aCAqLwotICAgIGlmIChwYXR0ZXJuWzNdICYmIChlbmQgLSBwdHIpL3N0YXRlLT5jaGFyc2l6ZSA8IHBhdHRlcm5bM10pCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgLyogY2hlY2sga25vd24gcHJlZml4ICovCi0gICAgaWYgKHBhdHRlcm5bMl0gJiBTUkVfSU5GT19QUkVGSVggJiYgcGF0dGVybls1XSA+IDEpIHsKLSAgICAgICAgLyogPGxlbmd0aD4gPHNraXA+IDxwcmVmaXggZGF0YT4gPG92ZXJsYXAgZGF0YT4gKi8KLSAgICAgICAgZm9yIChpID0gMDsgaSA8IHBhdHRlcm5bNV07IGkrKykKLSAgICAgICAgICAgIGlmICgoU1JFX0NPREUpIFNSRV9DSEFSR0VUKHN0YXRlLCBwdHIsIGkpICE9IHBhdHRlcm5bNyArIGldKQotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICByZXR1cm4gcGF0dGVyblswXSArIDIgKiBwYXR0ZXJuWzZdOwotICAgIH0KLSAgICByZXR1cm4gcGF0dGVyblswXTsKLX0KLSNlbmRpZgotCi0vKiBUaGUgbWFjcm9zIGJlbG93IHNob3VsZCBiZSB1c2VkIHRvIHByb3RlY3QgcmVjdXJzaXZlIFNSRV9NQVRDSCgpCi0gKiBjYWxscyB0aGF0ICpmYWlsZWQqIGFuZCBkbyAqbm90KiByZXR1cm4gaW1tZWRpYXRlbHkgKElPVywgdGhvc2UKLSAqIHRoYXQgd2lsbCBiYWNrdHJhY2spLiBFeHBsYWluaW5nOgotICoKLSAqIC0gUmVjdXJzaXZlIFNSRV9NQVRDSCgpIHJldHVybmVkIHRydWU6IHRoYXQncyB1c3VhbGx5IGEgc3VjY2VzcwotICogICAoYmVzaWRlcyBhdHlwaWNhbCBjYXNlcyBsaWtlIEFTU0VSVF9OT1QpLCB0aGVyZWZvcmUgdGhlcmUncyBubwotICogICByZWFzb24gdG8gcmVzdG9yZSBsYXN0bWFyazsKLSAqCi0gKiAtIFJlY3Vyc2l2ZSBTUkVfTUFUQ0goKSByZXR1cm5lZCBmYWxzZSBidXQgdGhlIGN1cnJlbnQgU1JFX01BVENIKCkKLSAqICAgaXMgcmV0dXJuaW5nIHRvIHRoZSBjYWxsZXI6IElmIHRoZSBjdXJyZW50IFNSRV9NQVRDSCgpIGlzIHRoZQotICogICB0b3AgZnVuY3Rpb24gb2YgdGhlIHJlY3Vyc2lvbiwgcmV0dXJuaW5nIGZhbHNlIHdpbGwgYmUgYSBtYXRjaGluZwotICogICBmYWlsdXJlLCBhbmQgaXQgZG9lc24ndCBtYXR0ZXIgd2hlcmUgbGFzdG1hcmsgaXMgcG9pbnRpbmcgdG8uCi0gKiAgIElmIGl0J3MgKm5vdCogdGhlIHRvcCBmdW5jdGlvbiwgaXQgd2lsbCBiZSBhIHJlY3Vyc2l2ZSBTUkVfTUFUQ0goKQotICogICBmYWlsdXJlIGJ5IGl0c2VsZiwgYW5kIHRoZSBjYWxsaW5nIFNSRV9NQVRDSCgpIHdpbGwgaGF2ZSB0byBkZWFsCi0gKiAgIHdpdGggdGhlIGZhaWx1cmUgYnkgdGhlIHNhbWUgcnVsZXMgZXhwbGFpbmVkIGhlcmUgKGl0IHdpbGwgcmVzdG9yZQotICogICBsYXN0bWFyayBieSBpdHNlbGYgaWYgbmVjZXNzYXJ5KTsKLSAqCi0gKiAtIFJlY3Vyc2l2ZSBTUkVfTUFUQ0goKSByZXR1cm5lZCBmYWxzZSwgYW5kIHdpbGwgY29udGludWUgdGhlCi0gKiAgIG91dHNpZGUgJ2ZvcicgbG9vcDogbXVzdCBiZSBwcm90ZWN0ZWQgd2hlbiBicmVha2luZywgc2luY2UgdGhlIG5leHQKLSAqICAgT1AgY291bGQgcG90ZW50aWFsbHkgZGVwZW5kIG9uIGxhc3RtYXJrOwotICoKLSAqIC0gUmVjdXJzaXZlIFNSRV9NQVRDSCgpIHJldHVybmVkIGZhbHNlLCBhbmQgd2lsbCBiZSBjYWxsZWQgYWdhaW4KLSAqICAgaW5zaWRlIGEgbG9jYWwgZm9yL3doaWxlIGxvb3A6IG11c3QgYmUgcHJvdGVjdGVkIGJldHdlZW4gZWFjaAotICogICBsb29wIGl0ZXJhdGlvbiwgc2luY2UgdGhlIHJlY3Vyc2l2ZSBTUkVfTUFUQ0goKSBjb3VsZCBkbyBhbnl0aGluZywKLSAqICAgYW5kIGNvdWxkIHBvdGVudGlhbGx5IGRlcGVuZCBvbiBsYXN0bWFyay4KLSAqCi0gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgY2hlY2sgdGhlIGRpc2N1c3Npb24gYXQgU0YgcGF0Y2ggIzcxMjkwMC4KLSAqLwotI2RlZmluZSBMQVNUTUFSS19TQVZFKCkgICAgIFwKLSAgICBkbyB7IFwKLSAgICAgICAgY3R4LT5sYXN0bWFyayA9IHN0YXRlLT5sYXN0bWFyazsgXAotICAgICAgICBjdHgtPmxhc3RpbmRleCA9IHN0YXRlLT5sYXN0aW5kZXg7IFwKLSAgICB9IHdoaWxlICgwKQotI2RlZmluZSBMQVNUTUFSS19SRVNUT1JFKCkgIFwKLSAgICBkbyB7IFwKLSAgICAgICAgc3RhdGUtPmxhc3RtYXJrID0gY3R4LT5sYXN0bWFyazsgXAotICAgICAgICBzdGF0ZS0+bGFzdGluZGV4ID0gY3R4LT5sYXN0aW5kZXg7IFwKLSAgICB9IHdoaWxlICgwKQotCi0jZGVmaW5lIFJFVFVSTl9FUlJPUihpKSBkbyB7IHJldHVybiBpOyB9IHdoaWxlKDApCi0jZGVmaW5lIFJFVFVSTl9GQUlMVVJFIGRvIHsgcmV0ID0gMDsgZ290byBleGl0OyB9IHdoaWxlKDApCi0jZGVmaW5lIFJFVFVSTl9TVUNDRVNTIGRvIHsgcmV0ID0gMTsgZ290byBleGl0OyB9IHdoaWxlKDApCi0KLSNkZWZpbmUgUkVUVVJOX09OX0VSUk9SKGkpIFwKLSAgICBkbyB7IGlmIChpIDwgMCkgUkVUVVJOX0VSUk9SKGkpOyB9IHdoaWxlICgwKQotI2RlZmluZSBSRVRVUk5fT05fU1VDQ0VTUyhpKSBcCi0gICAgZG8geyBSRVRVUk5fT05fRVJST1IoaSk7IGlmIChpID4gMCkgUkVUVVJOX1NVQ0NFU1M7IH0gd2hpbGUgKDApCi0jZGVmaW5lIFJFVFVSTl9PTl9GQUlMVVJFKGkpIFwKLSAgICBkbyB7IFJFVFVSTl9PTl9FUlJPUihpKTsgaWYgKGkgPT0gMCkgUkVUVVJOX0ZBSUxVUkU7IH0gd2hpbGUgKDApCi0KLSNkZWZpbmUgU0ZZKHgpICN4Ci0KLSNkZWZpbmUgREFUQV9TVEFDS19BTExPQyhzdGF0ZSwgdHlwZSwgcHRyKSBcCi1kbyB7IFwKLSAgICBhbGxvY19wb3MgPSBzdGF0ZS0+ZGF0YV9zdGFja19iYXNlOyBcCi0gICAgVFJBQ0UoKCJhbGxvY2F0aW5nICVzIGluICUiIFBZX0ZPUk1BVF9TSVpFX1QgImQgIiBcCi0gICAgICAgICAgICIoJSIgUFlfRk9STUFUX1NJWkVfVCAiZClcbiIsIFwKLSAgICAgICAgICAgU0ZZKHR5cGUpLCBhbGxvY19wb3MsIHNpemVvZih0eXBlKSkpOyBcCi0gICAgaWYgKHNpemVvZih0eXBlKSA+IHN0YXRlLT5kYXRhX3N0YWNrX3NpemUgLSBhbGxvY19wb3MpIHsgXAotICAgICAgICBpbnQgaiA9IGRhdGFfc3RhY2tfZ3JvdyhzdGF0ZSwgc2l6ZW9mKHR5cGUpKTsgXAotICAgICAgICBpZiAoaiA8IDApIHJldHVybiBqOyBcCi0gICAgICAgIGlmIChjdHhfcG9zICE9IC0xKSBcCi0gICAgICAgICAgICBEQVRBX1NUQUNLX0xPT0tVUF9BVChzdGF0ZSwgU1JFX01BVENIX0NPTlRFWFQsIGN0eCwgY3R4X3Bvcyk7IFwKLSAgICB9IFwKLSAgICBwdHIgPSAodHlwZSopKHN0YXRlLT5kYXRhX3N0YWNrK2FsbG9jX3Bvcyk7IFwKLSAgICBzdGF0ZS0+ZGF0YV9zdGFja19iYXNlICs9IHNpemVvZih0eXBlKTsgXAotfSB3aGlsZSAoMCkKLQotI2RlZmluZSBEQVRBX1NUQUNLX0xPT0tVUF9BVChzdGF0ZSwgdHlwZSwgcHRyLCBwb3MpIFwKLWRvIHsgXAotICAgIFRSQUNFKCgibG9va2luZyB1cCAlcyBhdCAlIiBQWV9GT1JNQVRfU0laRV9UICJkXG4iLCBTRlkodHlwZSksIHBvcykpOyBcCi0gICAgcHRyID0gKHR5cGUqKShzdGF0ZS0+ZGF0YV9zdGFjaytwb3MpOyBcCi19IHdoaWxlICgwKQotCi0jZGVmaW5lIERBVEFfU1RBQ0tfUFVTSChzdGF0ZSwgZGF0YSwgc2l6ZSkgXAotZG8geyBcCi0gICAgVFJBQ0UoKCJjb3B5IGRhdGEgaW4gJXAgdG8gJSIgUFlfRk9STUFUX1NJWkVfVCAiZCAiIFwKLSAgICAgICAgICAgIiglIiBQWV9GT1JNQVRfU0laRV9UICJkKVxuIiwgXAotICAgICAgICAgICBkYXRhLCBzdGF0ZS0+ZGF0YV9zdGFja19iYXNlLCBzaXplKSk7IFwKLSAgICBpZiAoc2l6ZSA+IHN0YXRlLT5kYXRhX3N0YWNrX3NpemUgLSBzdGF0ZS0+ZGF0YV9zdGFja19iYXNlKSB7IFwKLSAgICAgICAgaW50IGogPSBkYXRhX3N0YWNrX2dyb3coc3RhdGUsIHNpemUpOyBcCi0gICAgICAgIGlmIChqIDwgMCkgcmV0dXJuIGo7IFwKLSAgICAgICAgaWYgKGN0eF9wb3MgIT0gLTEpIFwKLSAgICAgICAgICAgIERBVEFfU1RBQ0tfTE9PS1VQX0FUKHN0YXRlLCBTUkVfTUFUQ0hfQ09OVEVYVCwgY3R4LCBjdHhfcG9zKTsgXAotICAgIH0gXAotICAgIG1lbWNweShzdGF0ZS0+ZGF0YV9zdGFjaytzdGF0ZS0+ZGF0YV9zdGFja19iYXNlLCBkYXRhLCBzaXplKTsgXAotICAgIHN0YXRlLT5kYXRhX3N0YWNrX2Jhc2UgKz0gc2l6ZTsgXAotfSB3aGlsZSAoMCkKLQotI2RlZmluZSBEQVRBX1NUQUNLX1BPUChzdGF0ZSwgZGF0YSwgc2l6ZSwgZGlzY2FyZCkgXAotZG8geyBcCi0gICAgVFJBQ0UoKCJjb3B5IGRhdGEgdG8gJXAgZnJvbSAlIiBQWV9GT1JNQVRfU0laRV9UICJkICIgXAotICAgICAgICAgICAiKCUiIFBZX0ZPUk1BVF9TSVpFX1QgImQpXG4iLCBcCi0gICAgICAgICAgIGRhdGEsIHN0YXRlLT5kYXRhX3N0YWNrX2Jhc2Utc2l6ZSwgc2l6ZSkpOyBcCi0gICAgbWVtY3B5KGRhdGEsIHN0YXRlLT5kYXRhX3N0YWNrK3N0YXRlLT5kYXRhX3N0YWNrX2Jhc2Utc2l6ZSwgc2l6ZSk7IFwKLSAgICBpZiAoZGlzY2FyZCkgXAotICAgICAgICBzdGF0ZS0+ZGF0YV9zdGFja19iYXNlIC09IHNpemU7IFwKLX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgREFUQV9TVEFDS19QT1BfRElTQ0FSRChzdGF0ZSwgc2l6ZSkgXAotZG8geyBcCi0gICAgVFJBQ0UoKCJkaXNjYXJkIGRhdGEgZnJvbSAlIiBQWV9GT1JNQVRfU0laRV9UICJkICIgXAotICAgICAgICAgICAiKCUiIFBZX0ZPUk1BVF9TSVpFX1QgImQpXG4iLCBcCi0gICAgICAgICAgIHN0YXRlLT5kYXRhX3N0YWNrX2Jhc2Utc2l6ZSwgc2l6ZSkpOyBcCi0gICAgc3RhdGUtPmRhdGFfc3RhY2tfYmFzZSAtPSBzaXplOyBcCi19IHdoaWxlKDApCi0KLSNkZWZpbmUgREFUQV9QVVNIKHgpIFwKLSAgICBEQVRBX1NUQUNLX1BVU0goc3RhdGUsICh4KSwgc2l6ZW9mKCooeCkpKQotI2RlZmluZSBEQVRBX1BPUCh4KSBcCi0gICAgREFUQV9TVEFDS19QT1Aoc3RhdGUsICh4KSwgc2l6ZW9mKCooeCkpLCAxKQotI2RlZmluZSBEQVRBX1BPUF9ESVNDQVJEKHgpIFwKLSAgICBEQVRBX1NUQUNLX1BPUF9ESVNDQVJEKHN0YXRlLCBzaXplb2YoKih4KSkpCi0jZGVmaW5lIERBVEFfQUxMT0ModCxwKSBcCi0gICAgREFUQV9TVEFDS19BTExPQyhzdGF0ZSwgdCwgcCkKLSNkZWZpbmUgREFUQV9MT09LVVBfQVQodCxwLHBvcykgXAotICAgIERBVEFfU1RBQ0tfTE9PS1VQX0FUKHN0YXRlLHQscCxwb3MpCi0KLSNkZWZpbmUgTUFSS19QVVNIKGxhc3RtYXJrKSBcCi0gICAgZG8gaWYgKGxhc3RtYXJrID4gMCkgeyBcCi0gICAgICAgIGkgPSBsYXN0bWFyazsgLyogY3R4LT5sYXN0bWFyayBtYXkgY2hhbmdlIGlmIHJlYWxsb2NhdGVkICovIFwKLSAgICAgICAgREFUQV9TVEFDS19QVVNIKHN0YXRlLCBzdGF0ZS0+bWFyaywgKGkrMSkqc2l6ZW9mKHZvaWQqKSk7IFwKLSAgICB9IHdoaWxlICgwKQotI2RlZmluZSBNQVJLX1BPUChsYXN0bWFyaykgXAotICAgIGRvIGlmIChsYXN0bWFyayA+IDApIHsgXAotICAgICAgICBEQVRBX1NUQUNLX1BPUChzdGF0ZSwgc3RhdGUtPm1hcmssIChsYXN0bWFyaysxKSpzaXplb2Yodm9pZCopLCAxKTsgXAotICAgIH0gd2hpbGUgKDApCi0jZGVmaW5lIE1BUktfUE9QX0tFRVAobGFzdG1hcmspIFwKLSAgICBkbyBpZiAobGFzdG1hcmsgPiAwKSB7IFwKLSAgICAgICAgREFUQV9TVEFDS19QT1Aoc3RhdGUsIHN0YXRlLT5tYXJrLCAobGFzdG1hcmsrMSkqc2l6ZW9mKHZvaWQqKSwgMCk7IFwKLSAgICB9IHdoaWxlICgwKQotI2RlZmluZSBNQVJLX1BPUF9ESVNDQVJEKGxhc3RtYXJrKSBcCi0gICAgZG8gaWYgKGxhc3RtYXJrID4gMCkgeyBcCi0gICAgICAgIERBVEFfU1RBQ0tfUE9QX0RJU0NBUkQoc3RhdGUsIChsYXN0bWFyaysxKSpzaXplb2Yodm9pZCopKTsgXAotICAgIH0gd2hpbGUgKDApCi0KLSNkZWZpbmUgSlVNUF9OT05FICAgICAgICAgICAgMAotI2RlZmluZSBKVU1QX01BWF9VTlRJTF8xICAgICAxCi0jZGVmaW5lIEpVTVBfTUFYX1VOVElMXzIgICAgIDIKLSNkZWZpbmUgSlVNUF9NQVhfVU5USUxfMyAgICAgMwotI2RlZmluZSBKVU1QX01JTl9VTlRJTF8xICAgICA0Ci0jZGVmaW5lIEpVTVBfTUlOX1VOVElMXzIgICAgIDUKLSNkZWZpbmUgSlVNUF9NSU5fVU5USUxfMyAgICAgNgotI2RlZmluZSBKVU1QX1JFUEVBVCAgICAgICAgICA3Ci0jZGVmaW5lIEpVTVBfUkVQRUFUX09ORV8xICAgIDgKLSNkZWZpbmUgSlVNUF9SRVBFQVRfT05FXzIgICAgOQotI2RlZmluZSBKVU1QX01JTl9SRVBFQVRfT05FICAxMAotI2RlZmluZSBKVU1QX0JSQU5DSCAgICAgICAgICAxMQotI2RlZmluZSBKVU1QX0FTU0VSVCAgICAgICAgICAxMgotI2RlZmluZSBKVU1QX0FTU0VSVF9OT1QgICAgICAxMwotCi0jZGVmaW5lIERPX0pVTVAoanVtcHZhbHVlLCBqdW1wbGFiZWwsIG5leHRwYXR0ZXJuKSBcCi0gICAgREFUQV9BTExPQyhTUkVfTUFUQ0hfQ09OVEVYVCwgbmV4dGN0eCk7IFwKLSAgICBuZXh0Y3R4LT5sYXN0X2N0eF9wb3MgPSBjdHhfcG9zOyBcCi0gICAgbmV4dGN0eC0+anVtcCA9IGp1bXB2YWx1ZTsgXAotICAgIG5leHRjdHgtPnBhdHRlcm4gPSBuZXh0cGF0dGVybjsgXAotICAgIGN0eF9wb3MgPSBhbGxvY19wb3M7IFwKLSAgICBjdHggPSBuZXh0Y3R4OyBcCi0gICAgZ290byBlbnRyYW5jZTsgXAotICAgIGp1bXBsYWJlbDogXAotICAgIHdoaWxlICgwKSAvKiBnY2MgZG9lc24ndCBsaWtlIGxhYmVscyBhdCBlbmQgb2Ygc2NvcGVzICovIFwKLQotdHlwZWRlZiBzdHJ1Y3QgewotICAgIFB5X3NzaXplX3QgbGFzdF9jdHhfcG9zOwotICAgIFB5X3NzaXplX3QganVtcDsKLSAgICBjaGFyKiBwdHI7Ci0gICAgU1JFX0NPREUqIHBhdHRlcm47Ci0gICAgUHlfc3NpemVfdCBjb3VudDsKLSAgICBQeV9zc2l6ZV90IGxhc3RtYXJrOwotICAgIFB5X3NzaXplX3QgbGFzdGluZGV4OwotICAgIHVuaW9uIHsKLSAgICAgICAgU1JFX0NPREUgY2hyOwotICAgICAgICBTUkVfUkVQRUFUKiByZXA7Ci0gICAgfSB1OwotfSBTUkVfTUFUQ0hfQ09OVEVYVDsKLQotLyogY2hlY2sgaWYgc3RyaW5nIG1hdGNoZXMgdGhlIGdpdmVuIHBhdHRlcm4uICByZXR1cm5zIDwwIGZvcgotICAgZXJyb3IsIDAgZm9yIGZhaWx1cmUsIGFuZCAxIGZvciBzdWNjZXNzICovCi1MT0NBTChQeV9zc2l6ZV90KQotU1JFX01BVENIKFNSRV9TVEFURSogc3RhdGUsIFNSRV9DT0RFKiBwYXR0ZXJuKQotewotICAgIGNoYXIqIGVuZCA9IChjaGFyKilzdGF0ZS0+ZW5kOwotICAgIFB5X3NzaXplX3QgYWxsb2NfcG9zLCBjdHhfcG9zID0gLTE7Ci0gICAgUHlfc3NpemVfdCBpLCByZXQgPSAwOwotICAgIFB5X3NzaXplX3QganVtcDsKLSAgICB1bnNpZ25lZCBpbnQgc2lnY291bnQ9MDsKLQotICAgIFNSRV9NQVRDSF9DT05URVhUKiBjdHg7Ci0gICAgU1JFX01BVENIX0NPTlRFWFQqIG5leHRjdHg7Ci0KLSAgICBUUkFDRSgoInwlcHwlcHxFTlRFUlxuIiwgcGF0dGVybiwgc3RhdGUtPnB0cikpOwotCi0gICAgREFUQV9BTExPQyhTUkVfTUFUQ0hfQ09OVEVYVCwgY3R4KTsKLSAgICBjdHgtPmxhc3RfY3R4X3BvcyA9IC0xOwotICAgIGN0eC0+anVtcCA9IEpVTVBfTk9ORTsKLSAgICBjdHgtPnBhdHRlcm4gPSBwYXR0ZXJuOwotICAgIGN0eF9wb3MgPSBhbGxvY19wb3M7Ci0KLWVudHJhbmNlOgotCi0gICAgY3R4LT5wdHIgPSAoY2hhciAqKXN0YXRlLT5wdHI7Ci0KLSAgICBpZiAoY3R4LT5wYXR0ZXJuWzBdID09IFNSRV9PUF9JTkZPKSB7Ci0gICAgICAgIC8qIG9wdGltaXphdGlvbiBpbmZvIGJsb2NrICovCi0gICAgICAgIC8qIDxJTkZPPiA8MT1za2lwPiA8Mj1mbGFncz4gPDM9bWluPiAuLi4gKi8KLSAgICAgICAgaWYgKGN0eC0+cGF0dGVyblszXSAmJiAoZW5kIC0gY3R4LT5wdHIpL3N0YXRlLT5jaGFyc2l6ZSA8IGN0eC0+cGF0dGVyblszXSkgewotICAgICAgICAgICAgVFJBQ0UoKCJyZWplY3QgKGdvdCAlIiBQWV9GT1JNQVRfU0laRV9UICJkIGNoYXJzLCAiCi0gICAgICAgICAgICAgICAgICAgIm5lZWQgJSIgUFlfRk9STUFUX1NJWkVfVCAiZClcbiIsCi0gICAgICAgICAgICAgICAgICAgKGVuZCAtIGN0eC0+cHRyKS9zdGF0ZS0+Y2hhcnNpemUsCi0gICAgICAgICAgICAgICAgICAgKFB5X3NzaXplX3QpIGN0eC0+cGF0dGVyblszXSkpOwotICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7Ci0gICAgICAgIH0KLSAgICAgICAgY3R4LT5wYXR0ZXJuICs9IGN0eC0+cGF0dGVyblsxXSArIDE7Ci0gICAgfQotCi0gICAgZm9yICg7OykgewotICAgICAgICArK3NpZ2NvdW50OwotICAgICAgICBpZiAoKDAgPT0gKHNpZ2NvdW50ICYgMHhmZmYpKSAmJiBQeUVycl9DaGVja1NpZ25hbHMoKSkKLSAgICAgICAgICAgIFJFVFVSTl9FUlJPUihTUkVfRVJST1JfSU5URVJSVVBURUQpOwotCi0gICAgICAgIHN3aXRjaCAoKmN0eC0+cGF0dGVybisrKSB7Ci0KLSAgICAgICAgY2FzZSBTUkVfT1BfTUFSSzoKLSAgICAgICAgICAgIC8qIHNldCBtYXJrICovCi0gICAgICAgICAgICAvKiA8TUFSSz4gPGdpZD4gKi8KLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfE1BUksgJWRcbiIsIGN0eC0+cGF0dGVybiwKLSAgICAgICAgICAgICAgICAgICBjdHgtPnB0ciwgY3R4LT5wYXR0ZXJuWzBdKSk7Ci0gICAgICAgICAgICBpID0gY3R4LT5wYXR0ZXJuWzBdOwotICAgICAgICAgICAgaWYgKGkgJiAxKQotICAgICAgICAgICAgICAgIHN0YXRlLT5sYXN0aW5kZXggPSBpLzIgKyAxOwotICAgICAgICAgICAgaWYgKGkgPiBzdGF0ZS0+bGFzdG1hcmspIHsKLSAgICAgICAgICAgICAgICAvKiBzdGF0ZS0+bGFzdG1hcmsgaXMgdGhlIGhpZ2hlc3QgdmFsaWQgaW5kZXggaW4gdGhlCi0gICAgICAgICAgICAgICAgICAgc3RhdGUtPm1hcmsgYXJyYXkuICBJZiBpdCBpcyBpbmNyZWFzZWQgYnkgbW9yZSB0aGFuIDEsCi0gICAgICAgICAgICAgICAgICAgdGhlIGludGVydmVuaW5nIG1hcmtzIG11c3QgYmUgc2V0IHRvIE5VTEwgdG8gc2lnbmFsCi0gICAgICAgICAgICAgICAgICAgdGhhdCB0aGVzZSBtYXJrcyBoYXZlIG5vdCBiZWVuIGVuY291bnRlcmVkLiAqLwotICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgaiA9IHN0YXRlLT5sYXN0bWFyayArIDE7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKGogPCBpKQotICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+bWFya1tqKytdID0gTlVMTDsKLSAgICAgICAgICAgICAgICBzdGF0ZS0+bGFzdG1hcmsgPSBpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc3RhdGUtPm1hcmtbaV0gPSBjdHgtPnB0cjsKLSAgICAgICAgICAgIGN0eC0+cGF0dGVybisrOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBTUkVfT1BfTElURVJBTDoKLSAgICAgICAgICAgIC8qIG1hdGNoIGxpdGVyYWwgc3RyaW5nICovCi0gICAgICAgICAgICAvKiA8TElURVJBTD4gPGNvZGU+ICovCi0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxMSVRFUkFMICVkXG4iLCBjdHgtPnBhdHRlcm4sCi0gICAgICAgICAgICAgICAgICAgY3R4LT5wdHIsICpjdHgtPnBhdHRlcm4pKTsKLSAgICAgICAgICAgIGlmIChjdHgtPnB0ciA+PSBlbmQgfHwgKFNSRV9DT0RFKSBTUkVfQ0hBUkdFVChzdGF0ZSwgY3R4LT5wdHIsIDApICE9IGN0eC0+cGF0dGVyblswXSkKLSAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKLSAgICAgICAgICAgIGN0eC0+cGF0dGVybisrOwotICAgICAgICAgICAgY3R4LT5wdHIgKz0gc3RhdGUtPmNoYXJzaXplOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBTUkVfT1BfTk9UX0xJVEVSQUw6Ci0gICAgICAgICAgICAvKiBtYXRjaCBhbnl0aGluZyB0aGF0IGlzIG5vdCBsaXRlcmFsIGNoYXJhY3RlciAqLwotICAgICAgICAgICAgLyogPE5PVF9MSVRFUkFMPiA8Y29kZT4gKi8KLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfE5PVF9MSVRFUkFMICVkXG4iLCBjdHgtPnBhdHRlcm4sCi0gICAgICAgICAgICAgICAgICAgY3R4LT5wdHIsICpjdHgtPnBhdHRlcm4pKTsKLSAgICAgICAgICAgIGlmIChjdHgtPnB0ciA+PSBlbmQgfHwgKFNSRV9DT0RFKSBTUkVfQ0hBUkdFVChzdGF0ZSwgY3R4LT5wdHIsIDApID09IGN0eC0+cGF0dGVyblswXSkKLSAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKLSAgICAgICAgICAgIGN0eC0+cGF0dGVybisrOwotICAgICAgICAgICAgY3R4LT5wdHIgKz0gc3RhdGUtPmNoYXJzaXplOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBTUkVfT1BfU1VDQ0VTUzoKLSAgICAgICAgICAgIC8qIGVuZCBvZiBwYXR0ZXJuICovCi0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxTVUNDRVNTXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyKSk7Ci0gICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHI7Ci0gICAgICAgICAgICBSRVRVUk5fU1VDQ0VTUzsKLQotICAgICAgICBjYXNlIFNSRV9PUF9BVDoKLSAgICAgICAgICAgIC8qIG1hdGNoIGF0IGdpdmVuIHBvc2l0aW9uICovCi0gICAgICAgICAgICAvKiA8QVQ+IDxjb2RlPiAqLwotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8QVQgJWRcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIsICpjdHgtPnBhdHRlcm4pKTsKLSAgICAgICAgICAgIGlmICghU1JFX0FUKHN0YXRlLCBjdHgtPnB0ciwgKmN0eC0+cGF0dGVybikpCi0gICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7Ci0gICAgICAgICAgICBjdHgtPnBhdHRlcm4rKzsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgU1JFX09QX0NBVEVHT1JZOgotICAgICAgICAgICAgLyogbWF0Y2ggYXQgZ2l2ZW4gY2F0ZWdvcnkgKi8KLSAgICAgICAgICAgIC8qIDxDQVRFR09SWT4gPGNvZGU+ICovCi0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxDQVRFR09SWSAlZFxuIiwgY3R4LT5wYXR0ZXJuLAotICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyLCAqY3R4LT5wYXR0ZXJuKSk7Ci0gICAgICAgICAgICBpZiAoY3R4LT5wdHIgPj0gZW5kIHx8ICFzcmVfY2F0ZWdvcnkoY3R4LT5wYXR0ZXJuWzBdLCBTUkVfQ0hBUkdFVChzdGF0ZSwgY3R4LT5wdHIsIDApKSkKLSAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKLSAgICAgICAgICAgIGN0eC0+cGF0dGVybisrOwotICAgICAgICAgICAgY3R4LT5wdHIgKz0gc3RhdGUtPmNoYXJzaXplOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBTUkVfT1BfQU5ZOgotICAgICAgICAgICAgLyogbWF0Y2ggYW55dGhpbmcgKGV4Y2VwdCBhIG5ld2xpbmUpICovCi0gICAgICAgICAgICAvKiA8QU5ZPiAqLwotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8QU5ZXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyKSk7Ci0gICAgICAgICAgICAgICAgaWYgKGN0eC0+cHRyID49IGVuZCB8fCBTUkVfSVNfTElORUJSRUFLKFNSRV9DSEFSR0VUKHN0YXRlLCBjdHgtPnB0ciwgMCkpKQotICAgICAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKLSAgICAgICAgICAgIGN0eC0+cHRyICs9IHN0YXRlLT5jaGFyc2l6ZTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgU1JFX09QX0FOWV9BTEw6Ci0gICAgICAgICAgICAvKiBtYXRjaCBhbnl0aGluZyAqLwotICAgICAgICAgICAgLyogPEFOWV9BTEw+ICovCi0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxBTllfQUxMXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyKSk7Ci0gICAgICAgICAgICBpZiAoY3R4LT5wdHIgPj0gZW5kKQotICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOwotICAgICAgICAgICAgY3R4LT5wdHIgKz0gc3RhdGUtPmNoYXJzaXplOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBTUkVfT1BfSU46Ci0gICAgICAgICAgICAvKiBtYXRjaCBzZXQgbWVtYmVyIChvciBub25fbWVtYmVyKSAqLwotICAgICAgICAgICAgLyogPElOPiA8c2tpcD4gPHNldD4gKi8KLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfElOXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyKSk7Ci0gICAgICAgICAgICAgICAgaWYgKGN0eC0+cHRyID49IGVuZCB8fCAhU1JFX0NIQVJTRVQoY3R4LT5wYXR0ZXJuICsgMSwgU1JFX0NIQVJHRVQoc3RhdGUsIGN0eC0+cHRyLCAwKSkpCi0gICAgICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOwotICAgICAgICAgICAgY3R4LT5wYXR0ZXJuICs9IGN0eC0+cGF0dGVyblswXTsKLSAgICAgICAgICAgIGN0eC0+cHRyICs9IHN0YXRlLT5jaGFyc2l6ZTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgU1JFX09QX0xJVEVSQUxfSUdOT1JFOgotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8TElURVJBTF9JR05PUkUgJWRcbiIsCi0gICAgICAgICAgICAgICAgICAgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0ciwgY3R4LT5wYXR0ZXJuWzBdKSk7Ci0gICAgICAgICAgICBpZiAoY3R4LT5wdHIgPj0gZW5kIHx8Ci0gICAgICAgICAgICAgICAgc3RhdGUtPmxvd2VyKFNSRV9DSEFSR0VUKHN0YXRlLCBjdHgtPnB0ciwgMCkpICE9IHN0YXRlLT5sb3dlcigqY3R4LT5wYXR0ZXJuKSkKLSAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKLSAgICAgICAgICAgIGN0eC0+cGF0dGVybisrOwotICAgICAgICAgICAgY3R4LT5wdHIgKz0gc3RhdGUtPmNoYXJzaXplOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBTUkVfT1BfTk9UX0xJVEVSQUxfSUdOT1JFOgotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8Tk9UX0xJVEVSQUxfSUdOT1JFICVkXG4iLAotICAgICAgICAgICAgICAgICAgIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIsICpjdHgtPnBhdHRlcm4pKTsKLSAgICAgICAgICAgIGlmIChjdHgtPnB0ciA+PSBlbmQgfHwKLSAgICAgICAgICAgICAgICBzdGF0ZS0+bG93ZXIoU1JFX0NIQVJHRVQoc3RhdGUsIGN0eC0+cHRyLCAwKSkgPT0gc3RhdGUtPmxvd2VyKCpjdHgtPnBhdHRlcm4pKQotICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOwotICAgICAgICAgICAgY3R4LT5wYXR0ZXJuKys7Ci0gICAgICAgICAgICBjdHgtPnB0ciArPSBzdGF0ZS0+Y2hhcnNpemU7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFNSRV9PUF9JTl9JR05PUkU6Ci0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxJTl9JR05PUkVcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKLSAgICAgICAgICAgIGlmIChjdHgtPnB0ciA+PSBlbmQKLSAgICAgICAgICAgICAgICB8fCAhU1JFX0NIQVJTRVQoY3R4LT5wYXR0ZXJuKzEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChTUkVfQ09ERSlzdGF0ZS0+bG93ZXIoU1JFX0NIQVJHRVQoc3RhdGUsIGN0eC0+cHRyLCAwKSkpKQotICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOwotICAgICAgICAgICAgY3R4LT5wYXR0ZXJuICs9IGN0eC0+cGF0dGVyblswXTsKLSAgICAgICAgICAgIGN0eC0+cHRyICs9IHN0YXRlLT5jaGFyc2l6ZTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgU1JFX09QX0pVTVA6Ci0gICAgICAgIGNhc2UgU1JFX09QX0lORk86Ci0gICAgICAgICAgICAvKiBqdW1wIGZvcndhcmQgKi8KLSAgICAgICAgICAgIC8qIDxKVU1QPiA8b2Zmc2V0PiAqLwotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8SlVNUCAlZFxuIiwgY3R4LT5wYXR0ZXJuLAotICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyLCBjdHgtPnBhdHRlcm5bMF0pKTsKLSAgICAgICAgICAgIGN0eC0+cGF0dGVybiArPSBjdHgtPnBhdHRlcm5bMF07Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFNSRV9PUF9CUkFOQ0g6Ci0gICAgICAgICAgICAvKiBhbHRlcm5hdGlvbiAqLwotICAgICAgICAgICAgLyogPEJSQU5DSD4gPDA9c2tpcD4gY29kZSA8SlVNUD4gLi4uIDxOVUxMPiAqLwotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8QlJBTkNIXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyKSk7Ci0gICAgICAgICAgICBMQVNUTUFSS19TQVZFKCk7Ci0gICAgICAgICAgICBjdHgtPnUucmVwID0gc3RhdGUtPnJlcGVhdDsKLSAgICAgICAgICAgIGlmIChjdHgtPnUucmVwKQotICAgICAgICAgICAgICAgIE1BUktfUFVTSChjdHgtPmxhc3RtYXJrKTsKLSAgICAgICAgICAgIGZvciAoOyBjdHgtPnBhdHRlcm5bMF07IGN0eC0+cGF0dGVybiArPSBjdHgtPnBhdHRlcm5bMF0pIHsKLSAgICAgICAgICAgICAgICBpZiAoY3R4LT5wYXR0ZXJuWzFdID09IFNSRV9PUF9MSVRFUkFMICYmCi0gICAgICAgICAgICAgICAgICAgIChjdHgtPnB0ciA+PSBlbmQgfHwKLSAgICAgICAgICAgICAgICAgICAgIChTUkVfQ09ERSkgU1JFX0NIQVJHRVQoc3RhdGUsIGN0eC0+cHRyLCAwKSAhPSBjdHgtPnBhdHRlcm5bMl0pKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBpZiAoY3R4LT5wYXR0ZXJuWzFdID09IFNSRV9PUF9JTiAmJgotICAgICAgICAgICAgICAgICAgICAoY3R4LT5wdHIgPj0gZW5kIHx8Ci0gICAgICAgICAgICAgICAgICAgICAhU1JFX0NIQVJTRVQoY3R4LT5wYXR0ZXJuICsgMywgKFNSRV9DT0RFKSBTUkVfQ0hBUkdFVChzdGF0ZSwgY3R4LT5wdHIsIDApKSkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKLSAgICAgICAgICAgICAgICBET19KVU1QKEpVTVBfQlJBTkNILCBqdW1wX2JyYW5jaCwgY3R4LT5wYXR0ZXJuKzEpOwotICAgICAgICAgICAgICAgIGlmIChyZXQpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGN0eC0+dS5yZXApCi0gICAgICAgICAgICAgICAgICAgICAgICBNQVJLX1BPUF9ESVNDQVJEKGN0eC0+bGFzdG1hcmspOwotICAgICAgICAgICAgICAgICAgICBSRVRVUk5fT05fRVJST1IocmV0KTsKLSAgICAgICAgICAgICAgICAgICAgUkVUVVJOX1NVQ0NFU1M7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChjdHgtPnUucmVwKQotICAgICAgICAgICAgICAgICAgICBNQVJLX1BPUF9LRUVQKGN0eC0+bGFzdG1hcmspOwotICAgICAgICAgICAgICAgIExBU1RNQVJLX1JFU1RPUkUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChjdHgtPnUucmVwKQotICAgICAgICAgICAgICAgIE1BUktfUE9QX0RJU0NBUkQoY3R4LT5sYXN0bWFyayk7Ci0gICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKLQotICAgICAgICBjYXNlIFNSRV9PUF9SRVBFQVRfT05FOgotICAgICAgICAgICAgLyogbWF0Y2ggcmVwZWF0ZWQgc2VxdWVuY2UgKG1heGltaXppbmcgcmVnZXhwKSAqLwotCi0gICAgICAgICAgICAvKiB0aGlzIG9wZXJhdG9yIG9ubHkgd29ya3MgaWYgdGhlIHJlcGVhdGVkIGl0ZW0gaXMKLSAgICAgICAgICAgICAgIGV4YWN0bHkgb25lIGNoYXJhY3RlciB3aWRlLCBhbmQgd2UncmUgbm90IGFscmVhZHkKLSAgICAgICAgICAgICAgIGNvbGxlY3RpbmcgYmFja3RyYWNraW5nIHBvaW50cy4gIGZvciBvdGhlciBjYXNlcywKLSAgICAgICAgICAgICAgIHVzZSB0aGUgTUFYX1JFUEVBVCBvcGVyYXRvciAqLwotCi0gICAgICAgICAgICAvKiA8UkVQRUFUX09ORT4gPHNraXA+IDwxPW1pbj4gPDI9bWF4PiBpdGVtIDxTVUNDRVNTPiB0YWlsICovCi0KLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfFJFUEVBVF9PTkUgJWQgJWRcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIsCi0gICAgICAgICAgICAgICAgICAgY3R4LT5wYXR0ZXJuWzFdLCBjdHgtPnBhdHRlcm5bMl0pKTsKLQotICAgICAgICAgICAgaWYgKChQeV9zc2l6ZV90KSBjdHgtPnBhdHRlcm5bMV0gPiAoZW5kIC0gY3R4LT5wdHIpIC8gc3RhdGUtPmNoYXJzaXplKQotICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOyAvKiBjYW5ub3QgbWF0Y2ggKi8KLQotICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyOwotCi0gICAgICAgICAgICByZXQgPSBTUkVfQ09VTlQoc3RhdGUsIGN0eC0+cGF0dGVybiszLCBjdHgtPnBhdHRlcm5bMl0pOwotICAgICAgICAgICAgUkVUVVJOX09OX0VSUk9SKHJldCk7Ci0gICAgICAgICAgICBEQVRBX0xPT0tVUF9BVChTUkVfTUFUQ0hfQ09OVEVYVCwgY3R4LCBjdHhfcG9zKTsKLSAgICAgICAgICAgIGN0eC0+Y291bnQgPSByZXQ7Ci0gICAgICAgICAgICBjdHgtPnB0ciArPSBzdGF0ZS0+Y2hhcnNpemUgKiBjdHgtPmNvdW50OwotCi0gICAgICAgICAgICAvKiB3aGVuIHdlIGFycml2ZSBoZXJlLCBjb3VudCBjb250YWlucyB0aGUgbnVtYmVyIG9mCi0gICAgICAgICAgICAgICBtYXRjaGVzLCBhbmQgY3R4LT5wdHIgcG9pbnRzIHRvIHRoZSB0YWlsIG9mIHRoZSB0YXJnZXQKLSAgICAgICAgICAgICAgIHN0cmluZy4gIGNoZWNrIGlmIHRoZSByZXN0IG9mIHRoZSBwYXR0ZXJuIG1hdGNoZXMsCi0gICAgICAgICAgICAgICBhbmQgYmFja3RyYWNrIGlmIG5vdC4gKi8KLQotICAgICAgICAgICAgaWYgKGN0eC0+Y291bnQgPCAoUHlfc3NpemVfdCkgY3R4LT5wYXR0ZXJuWzFdKQotICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOwotCi0gICAgICAgICAgICBpZiAoY3R4LT5wYXR0ZXJuW2N0eC0+cGF0dGVyblswXV0gPT0gU1JFX09QX1NVQ0NFU1MpIHsKLSAgICAgICAgICAgICAgICAvKiB0YWlsIGlzIGVtcHR5LiAgd2UncmUgZmluaXNoZWQgKi8KLSAgICAgICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHI7Ci0gICAgICAgICAgICAgICAgUkVUVVJOX1NVQ0NFU1M7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIExBU1RNQVJLX1NBVkUoKTsKLQotICAgICAgICAgICAgaWYgKGN0eC0+cGF0dGVybltjdHgtPnBhdHRlcm5bMF1dID09IFNSRV9PUF9MSVRFUkFMKSB7Ci0gICAgICAgICAgICAgICAgLyogdGFpbCBzdGFydHMgd2l0aCBhIGxpdGVyYWwuIHNraXAgcG9zaXRpb25zIHdoZXJlCi0gICAgICAgICAgICAgICAgICAgdGhlIHJlc3Qgb2YgdGhlIHBhdHRlcm4gY2Fubm90IHBvc3NpYmx5IG1hdGNoICovCi0gICAgICAgICAgICAgICAgY3R4LT51LmNociA9IGN0eC0+cGF0dGVybltjdHgtPnBhdHRlcm5bMF0rMV07Ci0gICAgICAgICAgICAgICAgZm9yICg7OykgewotICAgICAgICAgICAgICAgICAgICB3aGlsZSAoY3R4LT5jb3VudCA+PSAoUHlfc3NpemVfdCkgY3R4LT5wYXR0ZXJuWzFdICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAoY3R4LT5wdHIgPj0gZW5kIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU1JFX0NIQVJHRVQoc3RhdGUsIGN0eC0+cHRyLCAwKSAhPSBjdHgtPnUuY2hyKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5wdHIgLT0gc3RhdGUtPmNoYXJzaXplOwotICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5jb3VudC0tOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjdHgtPmNvdW50IDwgKFB5X3NzaXplX3QpIGN0eC0+cGF0dGVyblsxXSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHI7Ci0gICAgICAgICAgICAgICAgICAgIERPX0pVTVAoSlVNUF9SRVBFQVRfT05FXzEsIGp1bXBfcmVwZWF0X29uZV8xLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+cGF0dGVybitjdHgtPnBhdHRlcm5bMF0pOwotICAgICAgICAgICAgICAgICAgICBpZiAocmV0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fT05fRVJST1IocmV0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9TVUNDRVNTOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgTEFTVE1BUktfUkVTVE9SRSgpOwotCi0gICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyIC09IHN0YXRlLT5jaGFyc2l6ZTsKLSAgICAgICAgICAgICAgICAgICAgY3R4LT5jb3VudC0tOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvKiBnZW5lcmFsIGNhc2UgKi8KLSAgICAgICAgICAgICAgICB3aGlsZSAoY3R4LT5jb3VudCA+PSAoUHlfc3NpemVfdCkgY3R4LT5wYXR0ZXJuWzFdKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKLSAgICAgICAgICAgICAgICAgICAgRE9fSlVNUChKVU1QX1JFUEVBVF9PTkVfMiwganVtcF9yZXBlYXRfb25lXzIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5wYXR0ZXJuK2N0eC0+cGF0dGVyblswXSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChyZXQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9PTl9FUlJPUihyZXQpOwotICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX1NVQ0NFU1M7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgY3R4LT5wdHIgLT0gc3RhdGUtPmNoYXJzaXplOwotICAgICAgICAgICAgICAgICAgICBjdHgtPmNvdW50LS07Ci0gICAgICAgICAgICAgICAgICAgIExBU1RNQVJLX1JFU1RPUkUoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKLQotICAgICAgICBjYXNlIFNSRV9PUF9NSU5fUkVQRUFUX09ORToKLSAgICAgICAgICAgIC8qIG1hdGNoIHJlcGVhdGVkIHNlcXVlbmNlIChtaW5pbWl6aW5nIHJlZ2V4cCkgKi8KLQotICAgICAgICAgICAgLyogdGhpcyBvcGVyYXRvciBvbmx5IHdvcmtzIGlmIHRoZSByZXBlYXRlZCBpdGVtIGlzCi0gICAgICAgICAgICAgICBleGFjdGx5IG9uZSBjaGFyYWN0ZXIgd2lkZSwgYW5kIHdlJ3JlIG5vdCBhbHJlYWR5Ci0gICAgICAgICAgICAgICBjb2xsZWN0aW5nIGJhY2t0cmFja2luZyBwb2ludHMuICBmb3Igb3RoZXIgY2FzZXMsCi0gICAgICAgICAgICAgICB1c2UgdGhlIE1JTl9SRVBFQVQgb3BlcmF0b3IgKi8KLQotICAgICAgICAgICAgLyogPE1JTl9SRVBFQVRfT05FPiA8c2tpcD4gPDE9bWluPiA8Mj1tYXg+IGl0ZW0gPFNVQ0NFU1M+IHRhaWwgKi8KLQotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8TUlOX1JFUEVBVF9PTkUgJWQgJWRcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIsCi0gICAgICAgICAgICAgICAgICAgY3R4LT5wYXR0ZXJuWzFdLCBjdHgtPnBhdHRlcm5bMl0pKTsKLQotICAgICAgICAgICAgaWYgKChQeV9zc2l6ZV90KSBjdHgtPnBhdHRlcm5bMV0gPiAoZW5kIC0gY3R4LT5wdHIpIC8gc3RhdGUtPmNoYXJzaXplKQotICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOyAvKiBjYW5ub3QgbWF0Y2ggKi8KLQotICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyOwotCi0gICAgICAgICAgICBpZiAoY3R4LT5wYXR0ZXJuWzFdID09IDApCi0gICAgICAgICAgICAgICAgY3R4LT5jb3VudCA9IDA7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAvKiBjb3VudCB1c2luZyBwYXR0ZXJuIG1pbiBhcyB0aGUgbWF4aW11bSAqLwotICAgICAgICAgICAgICAgIHJldCA9IFNSRV9DT1VOVChzdGF0ZSwgY3R4LT5wYXR0ZXJuKzMsIGN0eC0+cGF0dGVyblsxXSk7Ci0gICAgICAgICAgICAgICAgUkVUVVJOX09OX0VSUk9SKHJldCk7Ci0gICAgICAgICAgICAgICAgREFUQV9MT09LVVBfQVQoU1JFX01BVENIX0NPTlRFWFQsIGN0eCwgY3R4X3Bvcyk7Ci0gICAgICAgICAgICAgICAgaWYgKHJldCA8IChQeV9zc2l6ZV90KSBjdHgtPnBhdHRlcm5bMV0pCi0gICAgICAgICAgICAgICAgICAgIC8qIGRpZG4ndCBtYXRjaCBtaW5pbXVtIG51bWJlciBvZiB0aW1lcyAqLwotICAgICAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKLSAgICAgICAgICAgICAgICAvKiBhZHZhbmNlIHBhc3QgbWluaW11bSBtYXRjaGVzIG9mIHJlcGVhdCAqLwotICAgICAgICAgICAgICAgIGN0eC0+Y291bnQgPSByZXQ7Ci0gICAgICAgICAgICAgICAgY3R4LT5wdHIgKz0gc3RhdGUtPmNoYXJzaXplICogY3R4LT5jb3VudDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGN0eC0+cGF0dGVybltjdHgtPnBhdHRlcm5bMF1dID09IFNSRV9PUF9TVUNDRVNTKSB7Ci0gICAgICAgICAgICAgICAgLyogdGFpbCBpcyBlbXB0eS4gIHdlJ3JlIGZpbmlzaGVkICovCi0gICAgICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyOwotICAgICAgICAgICAgICAgIFJFVFVSTl9TVUNDRVNTOwotCi0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8qIGdlbmVyYWwgY2FzZSAqLwotICAgICAgICAgICAgICAgIExBU1RNQVJLX1NBVkUoKTsKLSAgICAgICAgICAgICAgICB3aGlsZSAoKFB5X3NzaXplX3QpY3R4LT5wYXR0ZXJuWzJdID09IFNSRV9NQVhSRVBFQVQKLSAgICAgICAgICAgICAgICAgICAgICAgfHwgY3R4LT5jb3VudCA8PSAoUHlfc3NpemVfdCljdHgtPnBhdHRlcm5bMl0pIHsKLSAgICAgICAgICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyOwotICAgICAgICAgICAgICAgICAgICBET19KVU1QKEpVTVBfTUlOX1JFUEVBVF9PTkUsanVtcF9taW5fcmVwZWF0X29uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgtPnBhdHRlcm4rY3R4LT5wYXR0ZXJuWzBdKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJldCkgewotICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX09OX0VSUk9SKHJldCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fU1VDQ0VTUzsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHI7Ci0gICAgICAgICAgICAgICAgICAgIHJldCA9IFNSRV9DT1VOVChzdGF0ZSwgY3R4LT5wYXR0ZXJuKzMsIDEpOwotICAgICAgICAgICAgICAgICAgICBSRVRVUk5fT05fRVJST1IocmV0KTsKLSAgICAgICAgICAgICAgICAgICAgREFUQV9MT09LVVBfQVQoU1JFX01BVENIX0NPTlRFWFQsIGN0eCwgY3R4X3Bvcyk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChyZXQgPT0gMCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBhc3NlcnQocmV0ID09IDEpOwotICAgICAgICAgICAgICAgICAgICBjdHgtPnB0ciArPSBzdGF0ZS0+Y2hhcnNpemU7Ci0gICAgICAgICAgICAgICAgICAgIGN0eC0+Y291bnQrKzsKLSAgICAgICAgICAgICAgICAgICAgTEFTVE1BUktfUkVTVE9SRSgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOwotCi0gICAgICAgIGNhc2UgU1JFX09QX1JFUEVBVDoKLSAgICAgICAgICAgIC8qIGNyZWF0ZSByZXBlYXQgY29udGV4dC4gIGFsbCB0aGUgaGFyZCB3b3JrIGlzIGRvbmUKLSAgICAgICAgICAgICAgIGJ5IHRoZSBVTlRJTCBvcGVyYXRvciAoTUFYX1VOVElMLCBNSU5fVU5USUwpICovCi0gICAgICAgICAgICAvKiA8UkVQRUFUPiA8c2tpcD4gPDE9bWluPiA8Mj1tYXg+IGl0ZW0gPFVOVElMPiB0YWlsICovCi0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxSRVBFQVQgJWQgJWRcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIsCi0gICAgICAgICAgICAgICAgICAgY3R4LT5wYXR0ZXJuWzFdLCBjdHgtPnBhdHRlcm5bMl0pKTsKLQotICAgICAgICAgICAgLyogaW5zdGFsbCBuZXcgcmVwZWF0IGNvbnRleHQgKi8KLSAgICAgICAgICAgIGN0eC0+dS5yZXAgPSAoU1JFX1JFUEVBVCopIFB5T2JqZWN0X01BTExPQyhzaXplb2YoKmN0eC0+dS5yZXApKTsKLSAgICAgICAgICAgIGlmICghY3R4LT51LnJlcCkgewotICAgICAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7Ci0gICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjdHgtPnUucmVwLT5jb3VudCA9IC0xOwotICAgICAgICAgICAgY3R4LT51LnJlcC0+cGF0dGVybiA9IGN0eC0+cGF0dGVybjsKLSAgICAgICAgICAgIGN0eC0+dS5yZXAtPnByZXYgPSBzdGF0ZS0+cmVwZWF0OwotICAgICAgICAgICAgY3R4LT51LnJlcC0+bGFzdF9wdHIgPSBOVUxMOwotICAgICAgICAgICAgc3RhdGUtPnJlcGVhdCA9IGN0eC0+dS5yZXA7Ci0KLSAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKLSAgICAgICAgICAgIERPX0pVTVAoSlVNUF9SRVBFQVQsIGp1bXBfcmVwZWF0LCBjdHgtPnBhdHRlcm4rY3R4LT5wYXR0ZXJuWzBdKTsKLSAgICAgICAgICAgIHN0YXRlLT5yZXBlYXQgPSBjdHgtPnUucmVwLT5wcmV2OwotICAgICAgICAgICAgUHlPYmplY3RfRlJFRShjdHgtPnUucmVwKTsKLQotICAgICAgICAgICAgaWYgKHJldCkgewotICAgICAgICAgICAgICAgIFJFVFVSTl9PTl9FUlJPUihyZXQpOwotICAgICAgICAgICAgICAgIFJFVFVSTl9TVUNDRVNTOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7Ci0KLSAgICAgICAgY2FzZSBTUkVfT1BfTUFYX1VOVElMOgotICAgICAgICAgICAgLyogbWF4aW1pemluZyByZXBlYXQgKi8KLSAgICAgICAgICAgIC8qIDxSRVBFQVQ+IDxza2lwPiA8MT1taW4+IDwyPW1heD4gaXRlbSA8TUFYX1VOVElMPiB0YWlsICovCi0KLSAgICAgICAgICAgIC8qIEZJWE1FOiB3ZSBwcm9iYWJseSBuZWVkIHRvIGRlYWwgd2l0aCB6ZXJvLXdpZHRoCi0gICAgICAgICAgICAgICBtYXRjaGVzIGluIGhlcmUuLi4gKi8KLQotICAgICAgICAgICAgY3R4LT51LnJlcCA9IHN0YXRlLT5yZXBlYXQ7Ci0gICAgICAgICAgICBpZiAoIWN0eC0+dS5yZXApCi0gICAgICAgICAgICAgICAgUkVUVVJOX0VSUk9SKFNSRV9FUlJPUl9TVEFURSk7Ci0KLSAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKLQotICAgICAgICAgICAgY3R4LT5jb3VudCA9IGN0eC0+dS5yZXAtPmNvdW50KzE7Ci0KLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfE1BWF9VTlRJTCAlIiBQWV9GT1JNQVRfU0laRV9UICJkXG4iLCBjdHgtPnBhdHRlcm4sCi0gICAgICAgICAgICAgICAgICAgY3R4LT5wdHIsIGN0eC0+Y291bnQpKTsKLQotICAgICAgICAgICAgaWYgKGN0eC0+Y291bnQgPCAoUHlfc3NpemVfdCkgY3R4LT51LnJlcC0+cGF0dGVyblsxXSkgewotICAgICAgICAgICAgICAgIC8qIG5vdCBlbm91Z2ggbWF0Y2hlcyAqLwotICAgICAgICAgICAgICAgIGN0eC0+dS5yZXAtPmNvdW50ID0gY3R4LT5jb3VudDsKLSAgICAgICAgICAgICAgICBET19KVU1QKEpVTVBfTUFYX1VOVElMXzEsIGp1bXBfbWF4X3VudGlsXzEsCi0gICAgICAgICAgICAgICAgICAgICAgICBjdHgtPnUucmVwLT5wYXR0ZXJuKzMpOwotICAgICAgICAgICAgICAgIGlmIChyZXQpIHsKLSAgICAgICAgICAgICAgICAgICAgUkVUVVJOX09OX0VSUk9SKHJldCk7Ci0gICAgICAgICAgICAgICAgICAgIFJFVFVSTl9TVUNDRVNTOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjdHgtPnUucmVwLT5jb3VudCA9IGN0eC0+Y291bnQtMTsKLSAgICAgICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHI7Ci0gICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICgoY3R4LT5jb3VudCA8IChQeV9zc2l6ZV90KSBjdHgtPnUucmVwLT5wYXR0ZXJuWzJdIHx8Ci0gICAgICAgICAgICAgICAgY3R4LT51LnJlcC0+cGF0dGVyblsyXSA9PSBTUkVfTUFYUkVQRUFUKSAmJgotICAgICAgICAgICAgICAgIHN0YXRlLT5wdHIgIT0gY3R4LT51LnJlcC0+bGFzdF9wdHIpIHsKLSAgICAgICAgICAgICAgICAvKiB3ZSBtYXkgaGF2ZSBlbm91Z2ggbWF0Y2hlcywgYnV0IGlmIHdlIGNhbgotICAgICAgICAgICAgICAgICAgIG1hdGNoIGFub3RoZXIgaXRlbSwgZG8gc28gKi8KLSAgICAgICAgICAgICAgICBjdHgtPnUucmVwLT5jb3VudCA9IGN0eC0+Y291bnQ7Ci0gICAgICAgICAgICAgICAgTEFTVE1BUktfU0FWRSgpOwotICAgICAgICAgICAgICAgIE1BUktfUFVTSChjdHgtPmxhc3RtYXJrKTsKLSAgICAgICAgICAgICAgICAvKiB6ZXJvLXdpZHRoIG1hdGNoIHByb3RlY3Rpb24gKi8KLSAgICAgICAgICAgICAgICBEQVRBX1BVU0goJmN0eC0+dS5yZXAtPmxhc3RfcHRyKTsKLSAgICAgICAgICAgICAgICBjdHgtPnUucmVwLT5sYXN0X3B0ciA9IHN0YXRlLT5wdHI7Ci0gICAgICAgICAgICAgICAgRE9fSlVNUChKVU1QX01BWF9VTlRJTF8yLCBqdW1wX21heF91bnRpbF8yLAotICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT51LnJlcC0+cGF0dGVybiszKTsKLSAgICAgICAgICAgICAgICBEQVRBX1BPUCgmY3R4LT51LnJlcC0+bGFzdF9wdHIpOwotICAgICAgICAgICAgICAgIGlmIChyZXQpIHsKLSAgICAgICAgICAgICAgICAgICAgTUFSS19QT1BfRElTQ0FSRChjdHgtPmxhc3RtYXJrKTsKLSAgICAgICAgICAgICAgICAgICAgUkVUVVJOX09OX0VSUk9SKHJldCk7Ci0gICAgICAgICAgICAgICAgICAgIFJFVFVSTl9TVUNDRVNTOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBNQVJLX1BPUChjdHgtPmxhc3RtYXJrKTsKLSAgICAgICAgICAgICAgICBMQVNUTUFSS19SRVNUT1JFKCk7Ci0gICAgICAgICAgICAgICAgY3R4LT51LnJlcC0+Y291bnQgPSBjdHgtPmNvdW50LTE7Ci0gICAgICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvKiBjYW5ub3QgbWF0Y2ggbW9yZSByZXBlYXRlZCBpdGVtcyBoZXJlLiAgbWFrZSBzdXJlIHRoZQotICAgICAgICAgICAgICAgdGFpbCBtYXRjaGVzICovCi0gICAgICAgICAgICBzdGF0ZS0+cmVwZWF0ID0gY3R4LT51LnJlcC0+cHJldjsKLSAgICAgICAgICAgIERPX0pVTVAoSlVNUF9NQVhfVU5USUxfMywganVtcF9tYXhfdW50aWxfMywgY3R4LT5wYXR0ZXJuKTsKLSAgICAgICAgICAgIFJFVFVSTl9PTl9TVUNDRVNTKHJldCk7Ci0gICAgICAgICAgICBzdGF0ZS0+cmVwZWF0ID0gY3R4LT51LnJlcDsKLSAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKLSAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOwotCi0gICAgICAgIGNhc2UgU1JFX09QX01JTl9VTlRJTDoKLSAgICAgICAgICAgIC8qIG1pbmltaXppbmcgcmVwZWF0ICovCi0gICAgICAgICAgICAvKiA8UkVQRUFUPiA8c2tpcD4gPDE9bWluPiA8Mj1tYXg+IGl0ZW0gPE1JTl9VTlRJTD4gdGFpbCAqLwotCi0gICAgICAgICAgICBjdHgtPnUucmVwID0gc3RhdGUtPnJlcGVhdDsKLSAgICAgICAgICAgIGlmICghY3R4LT51LnJlcCkKLSAgICAgICAgICAgICAgICBSRVRVUk5fRVJST1IoU1JFX0VSUk9SX1NUQVRFKTsKLQotICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyOwotCi0gICAgICAgICAgICBjdHgtPmNvdW50ID0gY3R4LT51LnJlcC0+Y291bnQrMTsKLQotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8TUlOX1VOVElMICUiIFBZX0ZPUk1BVF9TSVpFX1QgImQgJXBcbiIsIGN0eC0+cGF0dGVybiwKLSAgICAgICAgICAgICAgICAgICBjdHgtPnB0ciwgY3R4LT5jb3VudCwgY3R4LT51LnJlcC0+cGF0dGVybikpOwotCi0gICAgICAgICAgICBpZiAoY3R4LT5jb3VudCA8IChQeV9zc2l6ZV90KSBjdHgtPnUucmVwLT5wYXR0ZXJuWzFdKSB7Ci0gICAgICAgICAgICAgICAgLyogbm90IGVub3VnaCBtYXRjaGVzICovCi0gICAgICAgICAgICAgICAgY3R4LT51LnJlcC0+Y291bnQgPSBjdHgtPmNvdW50OwotICAgICAgICAgICAgICAgIERPX0pVTVAoSlVNUF9NSU5fVU5USUxfMSwganVtcF9taW5fdW50aWxfMSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+dS5yZXAtPnBhdHRlcm4rMyk7Ci0gICAgICAgICAgICAgICAgaWYgKHJldCkgewotICAgICAgICAgICAgICAgICAgICBSRVRVUk5fT05fRVJST1IocmV0KTsKLSAgICAgICAgICAgICAgICAgICAgUkVUVVJOX1NVQ0NFU1M7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGN0eC0+dS5yZXAtPmNvdW50ID0gY3R4LT5jb3VudC0xOwotICAgICAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKLSAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgTEFTVE1BUktfU0FWRSgpOwotCi0gICAgICAgICAgICAvKiBzZWUgaWYgdGhlIHRhaWwgbWF0Y2hlcyAqLwotICAgICAgICAgICAgc3RhdGUtPnJlcGVhdCA9IGN0eC0+dS5yZXAtPnByZXY7Ci0gICAgICAgICAgICBET19KVU1QKEpVTVBfTUlOX1VOVElMXzIsIGp1bXBfbWluX3VudGlsXzIsIGN0eC0+cGF0dGVybik7Ci0gICAgICAgICAgICBpZiAocmV0KSB7Ci0gICAgICAgICAgICAgICAgUkVUVVJOX09OX0VSUk9SKHJldCk7Ci0gICAgICAgICAgICAgICAgUkVUVVJOX1NVQ0NFU1M7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHN0YXRlLT5yZXBlYXQgPSBjdHgtPnUucmVwOwotICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyOwotCi0gICAgICAgICAgICBMQVNUTUFSS19SRVNUT1JFKCk7Ci0KLSAgICAgICAgICAgIGlmICgoY3R4LT5jb3VudCA+PSAoUHlfc3NpemVfdCkgY3R4LT51LnJlcC0+cGF0dGVyblsyXQotICAgICAgICAgICAgICAgICYmIGN0eC0+dS5yZXAtPnBhdHRlcm5bMl0gIT0gU1JFX01BWFJFUEVBVCkgfHwKLSAgICAgICAgICAgICAgICBzdGF0ZS0+cHRyID09IGN0eC0+dS5yZXAtPmxhc3RfcHRyKQotICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOwotCi0gICAgICAgICAgICBjdHgtPnUucmVwLT5jb3VudCA9IGN0eC0+Y291bnQ7Ci0gICAgICAgICAgICAvKiB6ZXJvLXdpZHRoIG1hdGNoIHByb3RlY3Rpb24gKi8KLSAgICAgICAgICAgIERBVEFfUFVTSCgmY3R4LT51LnJlcC0+bGFzdF9wdHIpOwotICAgICAgICAgICAgY3R4LT51LnJlcC0+bGFzdF9wdHIgPSBzdGF0ZS0+cHRyOwotICAgICAgICAgICAgRE9fSlVNUChKVU1QX01JTl9VTlRJTF8zLGp1bXBfbWluX3VudGlsXzMsCi0gICAgICAgICAgICAgICAgICAgIGN0eC0+dS5yZXAtPnBhdHRlcm4rMyk7Ci0gICAgICAgICAgICBEQVRBX1BPUCgmY3R4LT51LnJlcC0+bGFzdF9wdHIpOwotICAgICAgICAgICAgaWYgKHJldCkgewotICAgICAgICAgICAgICAgIFJFVFVSTl9PTl9FUlJPUihyZXQpOwotICAgICAgICAgICAgICAgIFJFVFVSTl9TVUNDRVNTOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY3R4LT51LnJlcC0+Y291bnQgPSBjdHgtPmNvdW50LTE7Ci0gICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHI7Ci0gICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKLQotICAgICAgICBjYXNlIFNSRV9PUF9HUk9VUFJFRjoKLSAgICAgICAgICAgIC8qIG1hdGNoIGJhY2tyZWZlcmVuY2UgKi8KLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEdST1VQUkVGICVkXG4iLCBjdHgtPnBhdHRlcm4sCi0gICAgICAgICAgICAgICAgICAgY3R4LT5wdHIsIGN0eC0+cGF0dGVyblswXSkpOwotICAgICAgICAgICAgaSA9IGN0eC0+cGF0dGVyblswXTsKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IGdyb3VwcmVmID0gaStpOwotICAgICAgICAgICAgICAgIGlmIChncm91cHJlZiA+PSBzdGF0ZS0+bGFzdG1hcmspIHsKLSAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgY2hhciogcCA9IChjaGFyKikgc3RhdGUtPm1hcmtbZ3JvdXByZWZdOwotICAgICAgICAgICAgICAgICAgICBjaGFyKiBlID0gKGNoYXIqKSBzdGF0ZS0+bWFya1tncm91cHJlZisxXTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFwIHx8ICFlIHx8IGUgPCBwKQotICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7Ci0gICAgICAgICAgICAgICAgICAgIHdoaWxlIChwIDwgZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN0eC0+cHRyID49IGVuZCB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNSRV9DSEFSR0VUKHN0YXRlLCBjdHgtPnB0ciwgMCkgIT0gU1JFX0NIQVJHRVQoc3RhdGUsIHAsIDApKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOwotICAgICAgICAgICAgICAgICAgICAgICAgcCArPSBzdGF0ZS0+Y2hhcnNpemU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjdHgtPnB0ciArPSBzdGF0ZS0+Y2hhcnNpemU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjdHgtPnBhdHRlcm4rKzsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgU1JFX09QX0dST1VQUkVGX0lHTk9SRToKLSAgICAgICAgICAgIC8qIG1hdGNoIGJhY2tyZWZlcmVuY2UgKi8KLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEdST1VQUkVGX0lHTk9SRSAlZFxuIiwgY3R4LT5wYXR0ZXJuLAotICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyLCBjdHgtPnBhdHRlcm5bMF0pKTsKLSAgICAgICAgICAgIGkgPSBjdHgtPnBhdHRlcm5bMF07Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgUHlfc3NpemVfdCBncm91cHJlZiA9IGkraTsKLSAgICAgICAgICAgICAgICBpZiAoZ3JvdXByZWYgPj0gc3RhdGUtPmxhc3RtYXJrKSB7Ci0gICAgICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGNoYXIqIHAgPSAoY2hhciopIHN0YXRlLT5tYXJrW2dyb3VwcmVmXTsKLSAgICAgICAgICAgICAgICAgICAgY2hhciogZSA9IChjaGFyKikgc3RhdGUtPm1hcmtbZ3JvdXByZWYrMV07Ci0gICAgICAgICAgICAgICAgICAgIGlmICghcCB8fCAhZSB8fCBlIDwgcCkKLSAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOwotICAgICAgICAgICAgICAgICAgICB3aGlsZSAocCA8IGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdHgtPnB0ciA+PSBlbmQgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+bG93ZXIoU1JFX0NIQVJHRVQoc3RhdGUsIGN0eC0+cHRyLCAwKSkgIT0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+bG93ZXIoU1JFX0NIQVJHRVQoc3RhdGUsIHAsIDApKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHAgKz0gc3RhdGUtPmNoYXJzaXplOwotICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5wdHIgKz0gc3RhdGUtPmNoYXJzaXplOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgY3R4LT5wYXR0ZXJuKys7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFNSRV9PUF9HUk9VUFJFRl9FWElTVFM6Ci0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxHUk9VUFJFRl9FWElTVFMgJWRcbiIsIGN0eC0+cGF0dGVybiwKLSAgICAgICAgICAgICAgICAgICBjdHgtPnB0ciwgY3R4LT5wYXR0ZXJuWzBdKSk7Ci0gICAgICAgICAgICAvKiA8R1JPVVBSRUZfRVhJU1RTPiA8Z3JvdXA+IDxza2lwPiBjb2RleWVzIDxKVU1QPiBjb2Rlbm8gLi4uICovCi0gICAgICAgICAgICBpID0gY3R4LT5wYXR0ZXJuWzBdOwotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgZ3JvdXByZWYgPSBpK2k7Ci0gICAgICAgICAgICAgICAgaWYgKGdyb3VwcmVmID49IHN0YXRlLT5sYXN0bWFyaykgewotICAgICAgICAgICAgICAgICAgICBjdHgtPnBhdHRlcm4gKz0gY3R4LT5wYXR0ZXJuWzFdOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBTUkVfQ0hBUiogcCA9IChTUkVfQ0hBUiopIHN0YXRlLT5tYXJrW2dyb3VwcmVmXTsKLSAgICAgICAgICAgICAgICAgICAgU1JFX0NIQVIqIGUgPSAoU1JFX0NIQVIqKSBzdGF0ZS0+bWFya1tncm91cHJlZisxXTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFwIHx8ICFlIHx8IGUgPCBwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjdHgtPnBhdHRlcm4gKz0gY3R4LT5wYXR0ZXJuWzFdOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjdHgtPnBhdHRlcm4gKz0gMjsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgU1JFX09QX0FTU0VSVDoKLSAgICAgICAgICAgIC8qIGFzc2VydCBzdWJwYXR0ZXJuICovCi0gICAgICAgICAgICAvKiA8QVNTRVJUPiA8c2tpcD4gPGJhY2s+IDxwYXR0ZXJuPiAqLwotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8QVNTRVJUICVkXG4iLCBjdHgtPnBhdHRlcm4sCi0gICAgICAgICAgICAgICAgICAgY3R4LT5wdHIsIGN0eC0+cGF0dGVyblsxXSkpOwotICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyIC0gc3RhdGUtPmNoYXJzaXplICogY3R4LT5wYXR0ZXJuWzFdOwotICAgICAgICAgICAgaWYgKHN0YXRlLT5wdHIgPCBzdGF0ZS0+YmVnaW5uaW5nKQotICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOwotICAgICAgICAgICAgRE9fSlVNUChKVU1QX0FTU0VSVCwganVtcF9hc3NlcnQsIGN0eC0+cGF0dGVybisyKTsKLSAgICAgICAgICAgIFJFVFVSTl9PTl9GQUlMVVJFKHJldCk7Ci0gICAgICAgICAgICBjdHgtPnBhdHRlcm4gKz0gY3R4LT5wYXR0ZXJuWzBdOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBTUkVfT1BfQVNTRVJUX05PVDoKLSAgICAgICAgICAgIC8qIGFzc2VydCBub3Qgc3VicGF0dGVybiAqLwotICAgICAgICAgICAgLyogPEFTU0VSVF9OT1Q+IDxza2lwPiA8YmFjaz4gPHBhdHRlcm4+ICovCi0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxBU1NFUlRfTk9UICVkXG4iLCBjdHgtPnBhdHRlcm4sCi0gICAgICAgICAgICAgICAgICAgY3R4LT5wdHIsIGN0eC0+cGF0dGVyblsxXSkpOwotICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyIC0gc3RhdGUtPmNoYXJzaXplICogY3R4LT5wYXR0ZXJuWzFdOwotICAgICAgICAgICAgaWYgKHN0YXRlLT5wdHIgPj0gc3RhdGUtPmJlZ2lubmluZykgewotICAgICAgICAgICAgICAgIERPX0pVTVAoSlVNUF9BU1NFUlRfTk9ULCBqdW1wX2Fzc2VydF9ub3QsIGN0eC0+cGF0dGVybisyKTsKLSAgICAgICAgICAgICAgICBpZiAocmV0KSB7Ci0gICAgICAgICAgICAgICAgICAgIFJFVFVSTl9PTl9FUlJPUihyZXQpOwotICAgICAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjdHgtPnBhdHRlcm4gKz0gY3R4LT5wYXR0ZXJuWzBdOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBTUkVfT1BfRkFJTFVSRToKLSAgICAgICAgICAgIC8qIGltbWVkaWF0ZSBmYWlsdXJlICovCi0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxGQUlMVVJFXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyKSk7Ci0gICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKLQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8VU5LTk9XTiAlZFxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0ciwKLSAgICAgICAgICAgICAgICAgICBjdHgtPnBhdHRlcm5bLTFdKSk7Ci0gICAgICAgICAgICBSRVRVUk5fRVJST1IoU1JFX0VSUk9SX0lMTEVHQUwpOwotICAgICAgICB9Ci0gICAgfQotCi1leGl0OgotICAgIGN0eF9wb3MgPSBjdHgtPmxhc3RfY3R4X3BvczsKLSAgICBqdW1wID0gY3R4LT5qdW1wOwotICAgIERBVEFfUE9QX0RJU0NBUkQoY3R4KTsKLSAgICBpZiAoY3R4X3BvcyA9PSAtMSkKLSAgICAgICAgcmV0dXJuIHJldDsKLSAgICBEQVRBX0xPT0tVUF9BVChTUkVfTUFUQ0hfQ09OVEVYVCwgY3R4LCBjdHhfcG9zKTsKLQotICAgIHN3aXRjaCAoanVtcCkgewotICAgICAgICBjYXNlIEpVTVBfTUFYX1VOVElMXzI6Ci0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxKVU1QX01BWF9VTlRJTF8yXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyKSk7Ci0gICAgICAgICAgICBnb3RvIGp1bXBfbWF4X3VudGlsXzI7Ci0gICAgICAgIGNhc2UgSlVNUF9NQVhfVU5USUxfMzoKLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEpVTVBfTUFYX1VOVElMXzNcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKLSAgICAgICAgICAgIGdvdG8ganVtcF9tYXhfdW50aWxfMzsKLSAgICAgICAgY2FzZSBKVU1QX01JTl9VTlRJTF8yOgotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8SlVNUF9NSU5fVU5USUxfMlxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOwotICAgICAgICAgICAgZ290byBqdW1wX21pbl91bnRpbF8yOwotICAgICAgICBjYXNlIEpVTVBfTUlOX1VOVElMXzM6Ci0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxKVU1QX01JTl9VTlRJTF8zXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyKSk7Ci0gICAgICAgICAgICBnb3RvIGp1bXBfbWluX3VudGlsXzM7Ci0gICAgICAgIGNhc2UgSlVNUF9CUkFOQ0g6Ci0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxKVU1QX0JSQU5DSFxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOwotICAgICAgICAgICAgZ290byBqdW1wX2JyYW5jaDsKLSAgICAgICAgY2FzZSBKVU1QX01BWF9VTlRJTF8xOgotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8SlVNUF9NQVhfVU5USUxfMVxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOwotICAgICAgICAgICAgZ290byBqdW1wX21heF91bnRpbF8xOwotICAgICAgICBjYXNlIEpVTVBfTUlOX1VOVElMXzE6Ci0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxKVU1QX01JTl9VTlRJTF8xXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyKSk7Ci0gICAgICAgICAgICBnb3RvIGp1bXBfbWluX3VudGlsXzE7Ci0gICAgICAgIGNhc2UgSlVNUF9SRVBFQVQ6Ci0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxKVU1QX1JFUEVBVFxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOwotICAgICAgICAgICAgZ290byBqdW1wX3JlcGVhdDsKLSAgICAgICAgY2FzZSBKVU1QX1JFUEVBVF9PTkVfMToKLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEpVTVBfUkVQRUFUX09ORV8xXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyKSk7Ci0gICAgICAgICAgICBnb3RvIGp1bXBfcmVwZWF0X29uZV8xOwotICAgICAgICBjYXNlIEpVTVBfUkVQRUFUX09ORV8yOgotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8SlVNUF9SRVBFQVRfT05FXzJcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKLSAgICAgICAgICAgIGdvdG8ganVtcF9yZXBlYXRfb25lXzI7Ci0gICAgICAgIGNhc2UgSlVNUF9NSU5fUkVQRUFUX09ORToKLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEpVTVBfTUlOX1JFUEVBVF9PTkVcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKLSAgICAgICAgICAgIGdvdG8ganVtcF9taW5fcmVwZWF0X29uZTsKLSAgICAgICAgY2FzZSBKVU1QX0FTU0VSVDoKLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEpVTVBfQVNTRVJUXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyKSk7Ci0gICAgICAgICAgICBnb3RvIGp1bXBfYXNzZXJ0OwotICAgICAgICBjYXNlIEpVTVBfQVNTRVJUX05PVDoKLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEpVTVBfQVNTRVJUX05PVFxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOwotICAgICAgICAgICAgZ290byBqdW1wX2Fzc2VydF9ub3Q7Ci0gICAgICAgIGNhc2UgSlVNUF9OT05FOgotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8UkVUVVJOICUiIFBZX0ZPUk1BVF9TSVpFX1QgImRcbiIsIGN0eC0+cGF0dGVybiwKLSAgICAgICAgICAgICAgICAgICBjdHgtPnB0ciwgcmV0KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmV0OyAvKiBzaG91bGQgbmV2ZXIgZ2V0IGhlcmUgKi8KLX0KLQotTE9DQUwoUHlfc3NpemVfdCkKLVNSRV9TRUFSQ0goU1JFX1NUQVRFKiBzdGF0ZSwgU1JFX0NPREUqIHBhdHRlcm4pCi17Ci0gICAgY2hhciogcHRyID0gKGNoYXIqKXN0YXRlLT5zdGFydDsKLSAgICBjaGFyKiBlbmQgPSAoY2hhciopc3RhdGUtPmVuZDsKLSAgICBQeV9zc2l6ZV90IHN0YXR1cyA9IDA7Ci0gICAgUHlfc3NpemVfdCBwcmVmaXhfbGVuID0gMDsKLSAgICBQeV9zc2l6ZV90IHByZWZpeF9za2lwID0gMDsKLSAgICBTUkVfQ09ERSogcHJlZml4ID0gTlVMTDsKLSAgICBTUkVfQ09ERSogY2hhcnNldCA9IE5VTEw7Ci0gICAgU1JFX0NPREUqIG92ZXJsYXAgPSBOVUxMOwotICAgIGludCBmbGFncyA9IDA7Ci0KLSAgICBpZiAocGF0dGVyblswXSA9PSBTUkVfT1BfSU5GTykgewotICAgICAgICAvKiBvcHRpbWl6YXRpb24gaW5mbyBibG9jayAqLwotICAgICAgICAvKiA8SU5GTz4gPDE9c2tpcD4gPDI9ZmxhZ3M+IDwzPW1pbj4gPDQ9bWF4PiA8NT1wcmVmaXggaW5mbz4gICovCi0KLSAgICAgICAgZmxhZ3MgPSBwYXR0ZXJuWzJdOwotCi0gICAgICAgIGlmIChwYXR0ZXJuWzNdID4gMSkgewotICAgICAgICAgICAgLyogYWRqdXN0IGVuZCBwb2ludCAoYnV0IG1ha2Ugc3VyZSB3ZSBsZWF2ZSBhdCBsZWFzdCBvbmUKLSAgICAgICAgICAgICAgIGNoYXJhY3RlciBpbiB0aGVyZSwgc28gbGl0ZXJhbCBzZWFyY2ggd2lsbCB3b3JrKSAqLwotICAgICAgICAgICAgZW5kIC09IChwYXR0ZXJuWzNdLTEpICogc3RhdGUtPmNoYXJzaXplOwotICAgICAgICAgICAgaWYgKGVuZCA8PSBwdHIpCi0gICAgICAgICAgICAgICAgZW5kID0gcHRyICsgc3RhdGUtPmNoYXJzaXplOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGZsYWdzICYgU1JFX0lORk9fUFJFRklYKSB7Ci0gICAgICAgICAgICAvKiBwYXR0ZXJuIHN0YXJ0cyB3aXRoIGEga25vd24gcHJlZml4ICovCi0gICAgICAgICAgICAvKiA8bGVuZ3RoPiA8c2tpcD4gPHByZWZpeCBkYXRhPiA8b3ZlcmxhcCBkYXRhPiAqLwotICAgICAgICAgICAgcHJlZml4X2xlbiA9IHBhdHRlcm5bNV07Ci0gICAgICAgICAgICBwcmVmaXhfc2tpcCA9IHBhdHRlcm5bNl07Ci0gICAgICAgICAgICBwcmVmaXggPSBwYXR0ZXJuICsgNzsKLSAgICAgICAgICAgIG92ZXJsYXAgPSBwcmVmaXggKyBwcmVmaXhfbGVuIC0gMTsKLSAgICAgICAgfSBlbHNlIGlmIChmbGFncyAmIFNSRV9JTkZPX0NIQVJTRVQpCi0gICAgICAgICAgICAvKiBwYXR0ZXJuIHN0YXJ0cyB3aXRoIGEgY2hhcmFjdGVyIGZyb20gYSBrbm93biBzZXQgKi8KLSAgICAgICAgICAgIC8qIDxjaGFyc2V0PiAqLwotICAgICAgICAgICAgY2hhcnNldCA9IHBhdHRlcm4gKyA1OwotCi0gICAgICAgIHBhdHRlcm4gKz0gMSArIHBhdHRlcm5bMV07Ci0gICAgfQotCi0gICAgVFJBQ0UoKCJwcmVmaXggPSAlcCAlIiBQWV9GT1JNQVRfU0laRV9UICJkICUiIFBZX0ZPUk1BVF9TSVpFX1QgImRcbiIsCi0gICAgICAgICAgIHByZWZpeCwgcHJlZml4X2xlbiwgcHJlZml4X3NraXApKTsKLSAgICBUUkFDRSgoImNoYXJzZXQgPSAlcFxuIiwgY2hhcnNldCkpOwotCi0jaWYgZGVmaW5lZChVU0VfRkFTVF9TRUFSQ0gpCi0gICAgaWYgKHByZWZpeF9sZW4gPiAxKSB7Ci0gICAgICAgIC8qIHBhdHRlcm4gc3RhcnRzIHdpdGggYSBrbm93biBwcmVmaXguICB1c2UgdGhlIG92ZXJsYXAKLSAgICAgICAgICAgdGFibGUgdG8gc2tpcCBmb3J3YXJkIGFzIGZhc3QgYXMgd2UgcG9zc2libHkgY2FuICovCi0gICAgICAgIFB5X3NzaXplX3QgaSA9IDA7Ci0gICAgICAgIGVuZCA9IChjaGFyICopc3RhdGUtPmVuZDsKLSAgICAgICAgd2hpbGUgKHB0ciA8IGVuZCkgewotICAgICAgICAgICAgZm9yICg7OykgewotICAgICAgICAgICAgICAgIGlmICgoU1JFX0NPREUpIFNSRV9DSEFSR0VUKHN0YXRlLCBwdHIsIDApICE9IHByZWZpeFtpXSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoIWkpCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgaSA9IG92ZXJsYXBbaV07Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCsraSA9PSBwcmVmaXhfbGVuKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvKiBmb3VuZCBhIHBvdGVudGlhbCBtYXRjaCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8U0VBUkNIIFNDQU5cbiIsIHBhdHRlcm4sIHB0cikpOwotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUtPnN0YXJ0ID0gcHRyIC0gKHByZWZpeF9sZW4gLSAxKSAqIHN0YXRlLT5jaGFyc2l6ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBwdHIgLSAocHJlZml4X2xlbiAtIHByZWZpeF9za2lwIC0gMSkgKiBzdGF0ZS0+Y2hhcnNpemU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmxhZ3MgJiBTUkVfSU5GT19MSVRFUkFMKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxOyAvKiB3ZSBnb3QgYWxsIG9mIGl0ICovCi0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSBTUkVfTUFUQ0goc3RhdGUsIHBhdHRlcm4gKyAyKnByZWZpeF9za2lwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgIT0gMCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RhdHVzOwotICAgICAgICAgICAgICAgICAgICAgICAgLyogY2xvc2UgYnV0IG5vIGNpZ2FyIC0tIHRyeSBhZ2FpbiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgaSA9IG92ZXJsYXBbaV07Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgcHRyICs9IHN0YXRlLT5jaGFyc2l6ZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0jZW5kaWYKLQotICAgIGlmIChwYXR0ZXJuWzBdID09IFNSRV9PUF9MSVRFUkFMKSB7Ci0gICAgICAgIC8qIHBhdHRlcm4gc3RhcnRzIHdpdGggYSBsaXRlcmFsIGNoYXJhY3Rlci4gIHRoaXMgaXMgdXNlZAotICAgICAgICAgICBmb3Igc2hvcnQgcHJlZml4ZXMsIGFuZCBpZiBmYXN0IHNlYXJjaCBpcyBkaXNhYmxlZCAqLwotICAgICAgICBTUkVfQ09ERSBjaHIgPSBwYXR0ZXJuWzFdOwotICAgICAgICBlbmQgPSAoY2hhciopc3RhdGUtPmVuZDsKLSAgICAgICAgZm9yICg7OykgewotICAgICAgICAgICAgd2hpbGUgKHB0ciA8IGVuZCAmJiAoU1JFX0NPREUpIFNSRV9DSEFSR0VUKHN0YXRlLCBwdHIsIDApICE9IGNocikKLSAgICAgICAgICAgICAgICBwdHIgKz0gc3RhdGUtPmNoYXJzaXplOwotICAgICAgICAgICAgaWYgKHB0ciA+PSBlbmQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxTRUFSQ0ggTElURVJBTFxuIiwgcGF0dGVybiwgcHRyKSk7Ci0gICAgICAgICAgICBzdGF0ZS0+c3RhcnQgPSBwdHI7Ci0gICAgICAgICAgICBwdHIgKz0gc3RhdGUtPmNoYXJzaXplOwotICAgICAgICAgICAgc3RhdGUtPnB0ciA9IHB0cjsKLSAgICAgICAgICAgIGlmIChmbGFncyAmIFNSRV9JTkZPX0xJVEVSQUwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDE7IC8qIHdlIGdvdCBhbGwgb2YgaXQgKi8KLSAgICAgICAgICAgIHN0YXR1cyA9IFNSRV9NQVRDSChzdGF0ZSwgcGF0dGVybiArIDIpOwotICAgICAgICAgICAgaWYgKHN0YXR1cyAhPSAwKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChjaGFyc2V0KSB7Ci0gICAgICAgIC8qIHBhdHRlcm4gc3RhcnRzIHdpdGggYSBjaGFyYWN0ZXIgZnJvbSBhIGtub3duIHNldCAqLwotICAgICAgICBlbmQgPSAoY2hhciopc3RhdGUtPmVuZDsKLSAgICAgICAgZm9yICg7OykgewotICAgICAgICAgICAgd2hpbGUgKHB0ciA8IGVuZCAmJiAhU1JFX0NIQVJTRVQoY2hhcnNldCwgU1JFX0NIQVJHRVQoc3RhdGUsIHB0ciwgMCkpKQotICAgICAgICAgICAgICAgIHB0ciArPSBzdGF0ZS0+Y2hhcnNpemU7Ci0gICAgICAgICAgICBpZiAocHRyID49IGVuZCkKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfFNFQVJDSCBDSEFSU0VUXG4iLCBwYXR0ZXJuLCBwdHIpKTsKLSAgICAgICAgICAgIHN0YXRlLT5zdGFydCA9IHB0cjsKLSAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBwdHI7Ci0gICAgICAgICAgICBzdGF0dXMgPSBTUkVfTUFUQ0goc3RhdGUsIHBhdHRlcm4pOwotICAgICAgICAgICAgaWYgKHN0YXR1cyAhPSAwKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgcHRyICs9IHN0YXRlLT5jaGFyc2l6ZTsKLSAgICAgICAgfQotICAgIH0gZWxzZQotICAgICAgICAvKiBnZW5lcmFsIGNhc2UgKi8KLSAgICAgICAgd2hpbGUgKHB0ciA8PSBlbmQpIHsKLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfFNFQVJDSFxuIiwgcGF0dGVybiwgcHRyKSk7Ci0gICAgICAgICAgICBzdGF0ZS0+c3RhcnQgPSBzdGF0ZS0+cHRyID0gcHRyOwotICAgICAgICAgICAgcHRyICs9IHN0YXRlLT5jaGFyc2l6ZTsKLSAgICAgICAgICAgIHN0YXR1cyA9IFNSRV9NQVRDSChzdGF0ZSwgcGF0dGVybik7Ci0gICAgICAgICAgICBpZiAoc3RhdHVzICE9IDApCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgIHJldHVybiBzdGF0dXM7Ci19Ci0KLSNpZiAhZGVmaW5lZChTUkVfUkVDVVJTSVZFKQorI2RlZmluZSBTUkVfQ0hBUiBQeV9VQ1M0CisjZGVmaW5lIFNJWkVPRl9TUkVfQ0hBUiA0CisjZGVmaW5lIFNSRShGKSBzcmVfdWNzNF8jI0YKKyNpbmNsdWRlICJzcmVfbGliLmgiCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiBmYWN0b3JpZXMgYW5kIGRlc3RydWN0b3JzICovCiAKIC8qIHNlZSBzcmUuaCBmb3Igb2JqZWN0IGRlY2xhcmF0aW9ucyAqLwotc3RhdGljIFB5T2JqZWN0KnBhdHRlcm5fbmV3X21hdGNoKFBhdHRlcm5PYmplY3QqLCBTUkVfU1RBVEUqLCBpbnQpOworc3RhdGljIFB5T2JqZWN0KnBhdHRlcm5fbmV3X21hdGNoKFBhdHRlcm5PYmplY3QqLCBTUkVfU1RBVEUqLCBQeV9zc2l6ZV90KTsKIHN0YXRpYyBQeU9iamVjdCpwYXR0ZXJuX3NjYW5uZXIoUGF0dGVybk9iamVjdCosIFB5T2JqZWN0KiwgUHlPYmplY3QqIGt3KTsKIAotc3RhdGljIGludAotc3JlX2xpdGVyYWxfdGVtcGxhdGUoaW50IGNoYXJzaXplLCBjaGFyKiBwdHIsIFB5X3NzaXplX3QgbGVuKQotewotICAgIC8qIGNoZWNrIGlmIGdpdmVuIHN0cmluZyBpcyBhIGxpdGVyYWwgdGVtcGxhdGUgKGkuZS4gbm8gZXNjYXBlcykgKi8KLSAgICBzdHJ1Y3QgewotICAgICAgICBpbnQgY2hhcnNpemU7Ci0gICAgfSBzdGF0ZSA9IHsKLSAgICAgICAgY2hhcnNpemUKLSAgICB9OwotICAgIHdoaWxlIChsZW4tLSA+IDApIHsKLSAgICAgICAgaWYgKFNSRV9DSEFSR0VUKCgmc3RhdGUpLCBwdHIsIDApID09ICdcXCcpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgcHRyICs9IGNoYXJzaXplOwotICAgIH0KLSAgICByZXR1cm4gMTsKLX0KLQogc3RhdGljIFB5T2JqZWN0ICoKIHNyZV9jb2Rlc2l6ZShQeU9iamVjdCogc2VsZiwgUHlPYmplY3QgKnVudXNlZCkKIHsKQEAgLTE2NjUsNzIgKzMwOCw0MSBAQAogCiBzdGF0aWMgdm9pZCoKIGdldHN0cmluZyhQeU9iamVjdCogc3RyaW5nLCBQeV9zc2l6ZV90KiBwX2xlbmd0aCwKLSAgICAgICAgICBpbnQqIHBfbG9naWNhbF9jaGFyc2l6ZSwgaW50KiBwX2NoYXJzaXplLAorICAgICAgICAgIGludCogcF9pc2J5dGVzLCBpbnQqIHBfY2hhcnNpemUsCiAgICAgICAgICAgUHlfYnVmZmVyICp2aWV3KQogewogICAgIC8qIGdpdmVuIGEgcHl0aG9uIG9iamVjdCwgcmV0dXJuIGEgZGF0YSBwb2ludGVyLCBhIGxlbmd0aCAoaW4KICAgICAgICBjaGFyYWN0ZXJzKSwgYW5kIGEgY2hhcmFjdGVyIHNpemUuICByZXR1cm4gTlVMTCBpZiB0aGUgb2JqZWN0CiAgICAgICAgaXMgbm90IGEgc3RyaW5nIChvciBub3QgY29tcGF0aWJsZSkgKi8KIAotICAgIFB5QnVmZmVyUHJvY3MgKmJ1ZmZlcjsKLSAgICBQeV9zc2l6ZV90IHNpemUsIGJ5dGVzOwotICAgIGludCBjaGFyc2l6ZTsKLSAgICB2b2lkKiBwdHI7Ci0KICAgICAvKiBVbmljb2RlIG9iamVjdHMgZG8gbm90IHN1cHBvcnQgdGhlIGJ1ZmZlciBBUEkuIFNvLCBnZXQgdGhlIGRhdGEKICAgICAgICBkaXJlY3RseSBpbnN0ZWFkLiAqLwogICAgIGlmIChQeVVuaWNvZGVfQ2hlY2soc3RyaW5nKSkgewogICAgICAgICBpZiAoUHlVbmljb2RlX1JFQURZKHN0cmluZykgPT0gLTEpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgcHRyID0gUHlVbmljb2RlX0RBVEEoc3RyaW5nKTsKICAgICAgICAgKnBfbGVuZ3RoID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoc3RyaW5nKTsKICAgICAgICAgKnBfY2hhcnNpemUgPSBQeVVuaWNvZGVfS0lORChzdHJpbmcpOwotICAgICAgICAqcF9sb2dpY2FsX2NoYXJzaXplID0gNDsKLSAgICAgICAgcmV0dXJuIHB0cjsKKyAgICAgICAgKnBfaXNieXRlcyA9IDA7CisgICAgICAgIHJldHVybiBQeVVuaWNvZGVfREFUQShzdHJpbmcpOwogICAgIH0KIAogICAgIC8qIGdldCBwb2ludGVyIHRvIGJ5dGUgc3RyaW5nIGJ1ZmZlciAqLwotICAgIHZpZXctPmxlbiA9IC0xOwotICAgIGJ1ZmZlciA9IFB5X1RZUEUoc3RyaW5nKS0+dHBfYXNfYnVmZmVyOwotICAgIGlmICghYnVmZmVyIHx8ICFidWZmZXItPmJmX2dldGJ1ZmZlciB8fAotICAgICAgICAoKmJ1ZmZlci0+YmZfZ2V0YnVmZmVyKShzdHJpbmcsIHZpZXcsIFB5QlVGX1NJTVBMRSkgPCAwKSB7Ci0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAiZXhwZWN0ZWQgc3RyaW5nIG9yIGJ1ZmZlciIpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5T2JqZWN0X0dldEJ1ZmZlcihzdHJpbmcsIHZpZXcsIFB5QlVGX1NJTVBMRSkgIT0gMCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAiZXhwZWN0ZWQgc3RyaW5nIG9yIGJ1ZmZlciIpOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICAvKiBkZXRlcm1pbmUgYnVmZmVyIHNpemUgKi8KLSAgICBieXRlcyA9IHZpZXctPmxlbjsKLSAgICBwdHIgPSB2aWV3LT5idWY7CisgICAgKnBfbGVuZ3RoID0gdmlldy0+bGVuOworICAgICpwX2NoYXJzaXplID0gMTsKKyAgICAqcF9pc2J5dGVzID0gMTsKIAotICAgIGlmIChieXRlcyA8IDApIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgImJ1ZmZlciBoYXMgbmVnYXRpdmUgc2l6ZSIpOwotICAgICAgICBnb3RvIGVycjsKKyAgICBpZiAodmlldy0+YnVmID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJCdWZmZXIgaXMgTlVMTCIpOworICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKHZpZXcpOworICAgICAgICB2aWV3LT5idWYgPSBOVUxMOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0KLSAgICAvKiBkZXRlcm1pbmUgY2hhcmFjdGVyIHNpemUgKi8KLSAgICBzaXplID0gUHlPYmplY3RfU2l6ZShzdHJpbmcpOwotCi0gICAgaWYgKFB5Qnl0ZXNfQ2hlY2soc3RyaW5nKSB8fCBieXRlcyA9PSBzaXplKQotICAgICAgICBjaGFyc2l6ZSA9IDE7Ci0gICAgZWxzZSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJidWZmZXIgc2l6ZSBtaXNtYXRjaCIpOwotICAgICAgICBnb3RvIGVycjsKLSAgICB9Ci0KLSAgICAqcF9sZW5ndGggPSBzaXplOwotICAgICpwX2NoYXJzaXplID0gY2hhcnNpemU7Ci0gICAgKnBfbG9naWNhbF9jaGFyc2l6ZSA9IGNoYXJzaXplOwotCi0gICAgaWYgKHB0ciA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQnVmZmVyIGlzIE5VTEwiKTsKLSAgICAgICAgICAgIGdvdG8gZXJyOwotICAgIH0KLSAgICByZXR1cm4gcHRyOwotICBlcnI6Ci0gICAgUHlCdWZmZXJfUmVsZWFzZSh2aWV3KTsKLSAgICB2aWV3LT5idWYgPSBOVUxMOwotICAgIHJldHVybiBOVUxMOworICAgIHJldHVybiB2aWV3LT5idWY7CiB9CiAKIExPQ0FMKFB5T2JqZWN0KikKQEAgLTE3NDAsNyArMzUyLDcgQEAKICAgICAvKiBwcmVwYXJlIHN0YXRlIG9iamVjdCAqLwogCiAgICAgUHlfc3NpemVfdCBsZW5ndGg7Ci0gICAgaW50IGxvZ2ljYWxfY2hhcnNpemUsIGNoYXJzaXplOworICAgIGludCBpc2J5dGVzLCBjaGFyc2l6ZTsKICAgICB2b2lkKiBwdHI7CiAKICAgICBtZW1zZXQoc3RhdGUsIDAsIHNpemVvZihTUkVfU1RBVEUpKTsKQEAgLTE3NDksMTYgKzM2MSwxNiBAQAogICAgIHN0YXRlLT5sYXN0aW5kZXggPSAtMTsKIAogICAgIHN0YXRlLT5idWZmZXIuYnVmID0gTlVMTDsKLSAgICBwdHIgPSBnZXRzdHJpbmcoc3RyaW5nLCAmbGVuZ3RoLCAmbG9naWNhbF9jaGFyc2l6ZSwgJmNoYXJzaXplLCAmc3RhdGUtPmJ1ZmZlcik7CisgICAgcHRyID0gZ2V0c3RyaW5nKHN0cmluZywgJmxlbmd0aCwgJmlzYnl0ZXMsICZjaGFyc2l6ZSwgJnN0YXRlLT5idWZmZXIpOwogICAgIGlmICghcHRyKQogICAgICAgICBnb3RvIGVycjsKIAotICAgIGlmIChsb2dpY2FsX2NoYXJzaXplID09IDEgJiYgcGF0dGVybi0+bG9naWNhbF9jaGFyc2l6ZSA+IDEpIHsKKyAgICBpZiAoaXNieXRlcyAmJiBwYXR0ZXJuLT5pc2J5dGVzID09IDApIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJjYW4ndCB1c2UgYSBzdHJpbmcgcGF0dGVybiBvbiBhIGJ5dGVzLWxpa2Ugb2JqZWN0Iik7CiAgICAgICAgIGdvdG8gZXJyOwogICAgIH0KLSAgICBpZiAobG9naWNhbF9jaGFyc2l6ZSA+IDEgJiYgcGF0dGVybi0+bG9naWNhbF9jaGFyc2l6ZSA9PSAxKSB7CisgICAgaWYgKCFpc2J5dGVzICYmIHBhdHRlcm4tPmlzYnl0ZXMgPiAwKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiY2FuJ3QgdXNlIGEgYnl0ZXMgcGF0dGVybiBvbiBhIHN0cmluZy1saWtlIG9iamVjdCIpOwogICAgICAgICBnb3RvIGVycjsKQEAgLTE3NzUsNyArMzg3LDcgQEAKICAgICBlbHNlIGlmIChlbmQgPiBsZW5ndGgpCiAgICAgICAgIGVuZCA9IGxlbmd0aDsKIAotICAgIHN0YXRlLT5sb2dpY2FsX2NoYXJzaXplID0gbG9naWNhbF9jaGFyc2l6ZTsKKyAgICBzdGF0ZS0+aXNieXRlcyA9IGlzYnl0ZXM7CiAgICAgc3RhdGUtPmNoYXJzaXplID0gY2hhcnNpemU7CiAKICAgICBzdGF0ZS0+YmVnaW5uaW5nID0gcHRyOwpAQCAtMTgxNiw2ICs0MjgsMjQgQEAKICAgICAoKChjaGFyKikobWVtYmVyKSAtIChjaGFyKikoc3RhdGUpLT5iZWdpbm5pbmcpIC8gKHN0YXRlKS0+Y2hhcnNpemUpCiAKIExPQ0FMKFB5T2JqZWN0KikKK2dldHNsaWNlKGludCBpc2J5dGVzLCBjb25zdCB2b2lkICpwdHIsCisgICAgICAgICBQeU9iamVjdCogc3RyaW5nLCBQeV9zc2l6ZV90IHN0YXJ0LCBQeV9zc2l6ZV90IGVuZCkKK3sKKyAgICBpZiAoaXNieXRlcykgeworICAgICAgICBpZiAoUHlCeXRlc19DaGVja0V4YWN0KHN0cmluZykgJiYKKyAgICAgICAgICAgIHN0YXJ0ID09IDAgJiYgZW5kID09IFB5Qnl0ZXNfR0VUX1NJWkUoc3RyaW5nKSkgeworICAgICAgICAgICAgUHlfSU5DUkVGKHN0cmluZyk7CisgICAgICAgICAgICByZXR1cm4gc3RyaW5nOworICAgICAgICB9CisgICAgICAgIHJldHVybiBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKAorICAgICAgICAgICAgICAgIChjb25zdCBjaGFyICopcHRyICsgc3RhcnQsIGVuZCAtIHN0YXJ0KTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHJldHVybiBQeVVuaWNvZGVfU3Vic3RyaW5nKHN0cmluZywgc3RhcnQsIGVuZCk7CisgICAgfQorfQorCitMT0NBTChQeU9iamVjdCopCiBzdGF0ZV9nZXRzbGljZShTUkVfU1RBVEUqIHN0YXRlLCBQeV9zc2l6ZV90IGluZGV4LCBQeU9iamVjdCogc3RyaW5nLCBpbnQgZW1wdHkpCiB7CiAgICAgUHlfc3NpemVfdCBpLCBqOwpAQCAtMTgzNSwxMSArNDY1LDExIEBACiAgICAgICAgIGogPSBTVEFURV9PRkZTRVQoc3RhdGUsIHN0YXRlLT5tYXJrW2luZGV4KzFdKTsKICAgICB9CiAKLSAgICByZXR1cm4gUHlTZXF1ZW5jZV9HZXRTbGljZShzdHJpbmcsIGksIGopOworICAgIHJldHVybiBnZXRzbGljZShzdGF0ZS0+aXNieXRlcywgc3RhdGUtPmJlZ2lubmluZywgc3RyaW5nLCBpLCBqKTsKIH0KIAogc3RhdGljIHZvaWQKLXBhdHRlcm5fZXJyb3IoaW50IHN0YXR1cykKK3BhdHRlcm5fZXJyb3IoUHlfc3NpemVfdCBzdGF0dXMpCiB7CiAgICAgc3dpdGNoIChzdGF0dXMpIHsKICAgICBjYXNlIFNSRV9FUlJPUl9SRUNVUlNJT05fTElNSVQ6CkBAIC0xODY4LDE1ICs0OTgsMzUgQEAKIHsKICAgICBpZiAoc2VsZi0+d2Vha3JlZmxpc3QgIT0gTlVMTCkKICAgICAgICAgUHlPYmplY3RfQ2xlYXJXZWFrUmVmcygoUHlPYmplY3QgKikgc2VsZik7Ci0gICAgaWYgKHNlbGYtPnZpZXcuYnVmKQotICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZzZWxmLT52aWV3KTsKICAgICBQeV9YREVDUkVGKHNlbGYtPnBhdHRlcm4pOwogICAgIFB5X1hERUNSRUYoc2VsZi0+Z3JvdXBpbmRleCk7CiAgICAgUHlfWERFQ1JFRihzZWxmLT5pbmRleGdyb3VwKTsKICAgICBQeU9iamVjdF9ERUwoc2VsZik7CiB9CiAKLXN0YXRpYyBQeU9iamVjdCoKK0xPQ0FMKFB5X3NzaXplX3QpCitzcmVfbWF0Y2goU1JFX1NUQVRFKiBzdGF0ZSwgU1JFX0NPREUqIHBhdHRlcm4sIGludCBtYXRjaF9hbGwpCit7CisgICAgaWYgKHN0YXRlLT5jaGFyc2l6ZSA9PSAxKQorICAgICAgICByZXR1cm4gc3JlX3VjczFfbWF0Y2goc3RhdGUsIHBhdHRlcm4sIG1hdGNoX2FsbCk7CisgICAgaWYgKHN0YXRlLT5jaGFyc2l6ZSA9PSAyKQorICAgICAgICByZXR1cm4gc3JlX3VjczJfbWF0Y2goc3RhdGUsIHBhdHRlcm4sIG1hdGNoX2FsbCk7CisgICAgYXNzZXJ0KHN0YXRlLT5jaGFyc2l6ZSA9PSA0KTsKKyAgICByZXR1cm4gc3JlX3VjczRfbWF0Y2goc3RhdGUsIHBhdHRlcm4sIG1hdGNoX2FsbCk7Cit9CisKK0xPQ0FMKFB5X3NzaXplX3QpCitzcmVfc2VhcmNoKFNSRV9TVEFURSogc3RhdGUsIFNSRV9DT0RFKiBwYXR0ZXJuKQoreworICAgIGlmIChzdGF0ZS0+Y2hhcnNpemUgPT0gMSkKKyAgICAgICAgcmV0dXJuIHNyZV91Y3MxX3NlYXJjaChzdGF0ZSwgcGF0dGVybik7CisgICAgaWYgKHN0YXRlLT5jaGFyc2l6ZSA9PSAyKQorICAgICAgICByZXR1cm4gc3JlX3VjczJfc2VhcmNoKHN0YXRlLCBwYXR0ZXJuKTsKKyAgICBhc3NlcnQoc3RhdGUtPmNoYXJzaXplID09IDQpOworICAgIHJldHVybiBzcmVfdWNzNF9zZWFyY2goc3RhdGUsIHBhdHRlcm4pOworfQorCitzdGF0aWMgUHlPYmplY3QgKgogZml4X3N0cmluZ19wYXJhbShQeU9iamVjdCAqc3RyaW5nLCBQeU9iamVjdCAqc3RyaW5nMiwgY29uc3QgY2hhciAqb2xkbmFtZSkKIHsKICAgICBpZiAoc3RyaW5nMiAhPSBOVUxMKSB7CkBAIC0xOTAwLDE3ICs1NTAsNTQgQEAKICAgICByZXR1cm4gc3RyaW5nOwogfQogCitzdGF0aWMgUHlPYmplY3QgKgorcGF0dGVybl9tYXRjaChQYXR0ZXJuT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK3sKKyAgICBzdGF0aWMgY2hhciAqX2tleXdvcmRzW10gPSB7InN0cmluZyIsICJwb3MiLCAiZW5kcG9zIiwgInBhdHRlcm4iLCBOVUxMfTsKKyAgICBQeU9iamVjdCAqc3RyaW5nID0gTlVMTDsKKyAgICBQeV9zc2l6ZV90IHBvcyA9IDA7CisgICAgUHlfc3NpemVfdCBlbmRwb3MgPSBQWV9TU0laRV9UX01BWDsKKyAgICBQeU9iamVjdCAqcGF0dGVybiA9IE5VTEw7CisgICAgU1JFX1NUQVRFIHN0YXRlOworICAgIFB5X3NzaXplX3Qgc3RhdHVzOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLAorICAgICAgICAifE9ubiRPOm1hdGNoIiwgX2tleXdvcmRzLAorICAgICAgICAmc3RyaW5nLCAmcG9zLCAmZW5kcG9zLCAmcGF0dGVybikpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHN0cmluZyA9IGZpeF9zdHJpbmdfcGFyYW0oc3RyaW5nLCBwYXR0ZXJuLCAicGF0dGVybiIpOworICAgIGlmICghc3RyaW5nKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBzdHJpbmcgPSBzdGF0ZV9pbml0KCZzdGF0ZSwgKFBhdHRlcm5PYmplY3QgKilzZWxmLCBzdHJpbmcsIHBvcywgZW5kcG9zKTsKKyAgICBpZiAoIXN0cmluZykKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBzdGF0ZS5wdHIgPSBzdGF0ZS5zdGFydDsKKworICAgIFRSQUNFKCgifCVwfCVwfE1BVENIXG4iLCBQYXR0ZXJuT2JqZWN0X0dldENvZGUoc2VsZiksIHN0YXRlLnB0cikpOworCisgICAgc3RhdHVzID0gc3JlX21hdGNoKCZzdGF0ZSwgUGF0dGVybk9iamVjdF9HZXRDb2RlKHNlbGYpLCAwKTsKKworICAgIFRSQUNFKCgifCVwfCVwfEVORFxuIiwgUGF0dGVybk9iamVjdF9HZXRDb2RlKHNlbGYpLCBzdGF0ZS5wdHIpKTsKKyAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBzdGF0ZV9maW5pKCZzdGF0ZSk7CisKKyAgICByZXR1cm4gKFB5T2JqZWN0ICopcGF0dGVybl9uZXdfbWF0Y2goc2VsZiwgJnN0YXRlLCBzdGF0dXMpOworfQorCiBzdGF0aWMgUHlPYmplY3QqCi1wYXR0ZXJuX21hdGNoKFBhdHRlcm5PYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzLCBQeU9iamVjdCoga3cpCitwYXR0ZXJuX2Z1bGxtYXRjaChQYXR0ZXJuT2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncywgUHlPYmplY3QqIGt3KQogewogICAgIFNSRV9TVEFURSBzdGF0ZTsKLSAgICBpbnQgc3RhdHVzOworICAgIFB5X3NzaXplX3Qgc3RhdHVzOwogCiAgICAgUHlPYmplY3QgKnN0cmluZyA9IE5VTEwsICpzdHJpbmcyID0gTlVMTDsKICAgICBQeV9zc2l6ZV90IHN0YXJ0ID0gMDsKICAgICBQeV9zc2l6ZV90IGVuZCA9IFBZX1NTSVpFX1RfTUFYOwogICAgIHN0YXRpYyBjaGFyKiBrd2xpc3RbXSA9IHsgInN0cmluZyIsICJwb3MiLCAiZW5kcG9zIiwgInBhdHRlcm4iLCBOVUxMIH07Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3csICJ8T25uJE86bWF0Y2giLCBrd2xpc3QsCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3csICJ8T25uJE86ZnVsbG1hdGNoIiwga3dsaXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdHJpbmcsICZzdGFydCwgJmVuZCwgJnN0cmluZzIpKQogICAgICAgICByZXR1cm4gTlVMTDsKIApAQCAtMTkyNCwxMyArNjExLDkgQEAKIAogICAgIHN0YXRlLnB0ciA9IHN0YXRlLnN0YXJ0OwogCi0gICAgVFJBQ0UoKCJ8JXB8JXB8TUFUQ0hcbiIsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmKSwgc3RhdGUucHRyKSk7CisgICAgVFJBQ0UoKCJ8JXB8JXB8RlVMTE1BVENIXG4iLCBQYXR0ZXJuT2JqZWN0X0dldENvZGUoc2VsZiksIHN0YXRlLnB0cikpOwogCi0gICAgaWYgKHN0YXRlLmxvZ2ljYWxfY2hhcnNpemUgPT0gMSkgewotICAgICAgICBzdGF0dXMgPSBzcmVfbWF0Y2goJnN0YXRlLCBQYXR0ZXJuT2JqZWN0X0dldENvZGUoc2VsZikpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHN0YXR1cyA9IHNyZV91bWF0Y2goJnN0YXRlLCBQYXR0ZXJuT2JqZWN0X0dldENvZGUoc2VsZikpOwotICAgIH0KKyAgICBzdGF0dXMgPSBzcmVfbWF0Y2goJnN0YXRlLCBQYXR0ZXJuT2JqZWN0X0dldENvZGUoc2VsZiksIDEpOwogCiAgICAgVFJBQ0UoKCJ8JXB8JXB8RU5EXG4iLCBQYXR0ZXJuT2JqZWN0X0dldENvZGUoc2VsZiksIHN0YXRlLnB0cikpOwogICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQpAQCAtMTk0NSw3ICs2MjgsNyBAQAogcGF0dGVybl9zZWFyY2goUGF0dGVybk9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MsIFB5T2JqZWN0KiBrdykKIHsKICAgICBTUkVfU1RBVEUgc3RhdGU7Ci0gICAgaW50IHN0YXR1czsKKyAgICBQeV9zc2l6ZV90IHN0YXR1czsKIAogICAgIFB5T2JqZWN0ICpzdHJpbmcgPSBOVUxMLCAqc3RyaW5nMiA9IE5VTEw7CiAgICAgUHlfc3NpemVfdCBzdGFydCA9IDA7CkBAIC0xOTY1LDExICs2NDgsNyBAQAogCiAgICAgVFJBQ0UoKCJ8JXB8JXB8U0VBUkNIXG4iLCBQYXR0ZXJuT2JqZWN0X0dldENvZGUoc2VsZiksIHN0YXRlLnB0cikpOwogCi0gICAgaWYgKHN0YXRlLmxvZ2ljYWxfY2hhcnNpemUgPT0gMSkgewotICAgICAgICBzdGF0dXMgPSBzcmVfc2VhcmNoKCZzdGF0ZSwgUGF0dGVybk9iamVjdF9HZXRDb2RlKHNlbGYpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBzdGF0dXMgPSBzcmVfdXNlYXJjaCgmc3RhdGUsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmKSk7Ci0gICAgfQorICAgIHN0YXR1cyA9IHNyZV9zZWFyY2goJnN0YXRlLCBQYXR0ZXJuT2JqZWN0X0dldENvZGUoc2VsZikpOwogCiAgICAgVFJBQ0UoKCJ8JXB8JXB8RU5EXG4iLCBQYXR0ZXJuT2JqZWN0X0dldENvZGUoc2VsZiksIHN0YXRlLnB0cikpOwogCkBAIC0yMDI5LDU5ICs3MDgsMTEgQEAKICNlbmRpZgogCiBzdGF0aWMgUHlPYmplY3QqCi1qb2luX2xpc3QoUHlPYmplY3QqIGxpc3QsIFB5T2JqZWN0KiBzdHJpbmcpCi17Ci0gICAgLyogam9pbiBsaXN0IGVsZW1lbnRzICovCi0KLSAgICBQeU9iamVjdCogam9pbmVyOwotI2lmIFBZX1ZFUlNJT05fSEVYID49IDB4MDEwNjAwMDAKLSAgICBQeU9iamVjdCogZnVuY3Rpb247Ci0gICAgUHlPYmplY3QqIGFyZ3M7Ci0jZW5kaWYKLSAgICBQeU9iamVjdCogcmVzdWx0OwotCi0gICAgam9pbmVyID0gUHlTZXF1ZW5jZV9HZXRTbGljZShzdHJpbmcsIDAsIDApOwotICAgIGlmICgham9pbmVyKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIGlmIChQeUxpc3RfR0VUX1NJWkUobGlzdCkgPT0gMCkgewotICAgICAgICBQeV9ERUNSRUYobGlzdCk7Ci0gICAgICAgIHJldHVybiBqb2luZXI7Ci0gICAgfQotCi0jaWYgUFlfVkVSU0lPTl9IRVggPj0gMHgwMTA2MDAwMAotICAgIGZ1bmN0aW9uID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhqb2luZXIsICJqb2luIik7Ci0gICAgaWYgKCFmdW5jdGlvbikgewotICAgICAgICBQeV9ERUNSRUYoam9pbmVyKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIGFyZ3MgPSBQeVR1cGxlX05ldygxKTsKLSAgICBpZiAoIWFyZ3MpIHsKLSAgICAgICAgUHlfREVDUkVGKGZ1bmN0aW9uKTsKLSAgICAgICAgUHlfREVDUkVGKGpvaW5lcik7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBQeVR1cGxlX1NFVF9JVEVNKGFyZ3MsIDAsIGxpc3QpOwotICAgIHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxPYmplY3QoZnVuY3Rpb24sIGFyZ3MpOwotICAgIFB5X0RFQ1JFRihhcmdzKTsgLyogYWxzbyByZW1vdmVzIGxpc3QgKi8KLSAgICBQeV9ERUNSRUYoZnVuY3Rpb24pOwotI2Vsc2UKLSAgICByZXN1bHQgPSBjYWxsKAotICAgICAgICAic3RyaW5nIiwgImpvaW4iLAotICAgICAgICBQeVR1cGxlX1BhY2soMiwgbGlzdCwgam9pbmVyKQotICAgICAgICApOwotI2VuZGlmCi0gICAgUHlfREVDUkVGKGpvaW5lcik7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgUHlPYmplY3QqCiBwYXR0ZXJuX2ZpbmRhbGwoUGF0dGVybk9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MsIFB5T2JqZWN0KiBrdykKIHsKICAgICBTUkVfU1RBVEUgc3RhdGU7CiAgICAgUHlPYmplY3QqIGxpc3Q7Ci0gICAgaW50IHN0YXR1czsKKyAgICBQeV9zc2l6ZV90IHN0YXR1czsKICAgICBQeV9zc2l6ZV90IGksIGIsIGU7CiAKICAgICBQeU9iamVjdCAqc3RyaW5nID0gTlVMTCwgKnN0cmluZzIgPSBOVUxMOwpAQCAtMjExNCwxMiArNzQ1LDcgQEAKIAogICAgICAgICBzdGF0ZS5wdHIgPSBzdGF0ZS5zdGFydDsKIAotICAgICAgICBpZiAoc3RhdGUubG9naWNhbF9jaGFyc2l6ZSA9PSAxKSB7Ci0gICAgICAgICAgICBzdGF0dXMgPSBzcmVfc2VhcmNoKCZzdGF0ZSwgUGF0dGVybk9iamVjdF9HZXRDb2RlKHNlbGYpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHN0YXR1cyA9IHNyZV91c2VhcmNoKCZzdGF0ZSwgUGF0dGVybk9iamVjdF9HZXRDb2RlKHNlbGYpKTsKLSAgICAgICAgfQotCisgICAgICAgIHN0YXR1cyA9IHNyZV9zZWFyY2goJnN0YXRlLCBQYXR0ZXJuT2JqZWN0X0dldENvZGUoc2VsZikpOwogICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAKQEAgLTIxMzUsNyArNzYxLDggQEAKICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgYiA9IFNUQVRFX09GRlNFVCgmc3RhdGUsIHN0YXRlLnN0YXJ0KTsKICAgICAgICAgICAgIGUgPSBTVEFURV9PRkZTRVQoJnN0YXRlLCBzdGF0ZS5wdHIpOwotICAgICAgICAgICAgaXRlbSA9IFB5U2VxdWVuY2VfR2V0U2xpY2Uoc3RyaW5nLCBiLCBlKTsKKyAgICAgICAgICAgIGl0ZW0gPSBnZXRzbGljZShzdGF0ZS5pc2J5dGVzLCBzdGF0ZS5iZWdpbm5pbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nLCBiLCBlKTsKICAgICAgICAgICAgIGlmICghaXRlbSkKICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0yMTgxLDcgKzgwOCw2IEBACiAKIH0KIAotI2lmIFBZX1ZFUlNJT05fSEVYID49IDB4MDIwMjAwMDAKIHN0YXRpYyBQeU9iamVjdCoKIHBhdHRlcm5fZmluZGl0ZXIoUGF0dGVybk9iamVjdCogcGF0dGVybiwgUHlPYmplY3QqIGFyZ3MsIFB5T2JqZWN0KiBrdykKIHsKQEAgLTIyMDMsNyArODI5LDYgQEAKIAogICAgIHJldHVybiBpdGVyYXRvcjsKIH0KLSNlbmRpZgogCiBzdGF0aWMgUHlPYmplY3QqCiBwYXR0ZXJuX3NwbGl0KFBhdHRlcm5PYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzLCBQeU9iamVjdCoga3cpCkBAIC0yMjExLDcgKzgzNiw3IEBACiAgICAgU1JFX1NUQVRFIHN0YXRlOwogICAgIFB5T2JqZWN0KiBsaXN0OwogICAgIFB5T2JqZWN0KiBpdGVtOwotICAgIGludCBzdGF0dXM7CisgICAgUHlfc3NpemVfdCBzdGF0dXM7CiAgICAgUHlfc3NpemVfdCBuOwogICAgIFB5X3NzaXplX3QgaTsKICAgICB2b2lkKiBsYXN0OwpAQCAtMjI0NiwxMiArODcxLDcgQEAKIAogICAgICAgICBzdGF0ZS5wdHIgPSBzdGF0ZS5zdGFydDsKIAotICAgICAgICBpZiAoc3RhdGUubG9naWNhbF9jaGFyc2l6ZSA9PSAxKSB7Ci0gICAgICAgICAgICBzdGF0dXMgPSBzcmVfc2VhcmNoKCZzdGF0ZSwgUGF0dGVybk9iamVjdF9HZXRDb2RlKHNlbGYpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHN0YXR1cyA9IHNyZV91c2VhcmNoKCZzdGF0ZSwgUGF0dGVybk9iamVjdF9HZXRDb2RlKHNlbGYpKTsKLSAgICAgICAgfQotCisgICAgICAgIHN0YXR1cyA9IHNyZV9zZWFyY2goJnN0YXRlLCBQYXR0ZXJuT2JqZWN0X0dldENvZGUoc2VsZikpOwogICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAKQEAgLTIyNjMsNyArODgzLDcgQEAKICAgICAgICAgfQogCiAgICAgICAgIGlmIChzdGF0ZS5zdGFydCA9PSBzdGF0ZS5wdHIpIHsKLSAgICAgICAgICAgIGlmIChsYXN0ID09IHN0YXRlLmVuZCkKKyAgICAgICAgICAgIGlmIChsYXN0ID09IHN0YXRlLmVuZCB8fCBzdGF0ZS5wdHIgPT0gc3RhdGUuZW5kKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgLyogc2tpcCBvbmUgY2hhcmFjdGVyICovCiAgICAgICAgICAgICBzdGF0ZS5zdGFydCA9ICh2b2lkKikgKChjaGFyKikgc3RhdGUucHRyICsgc3RhdGUuY2hhcnNpemUpOwpAQCAtMjI3MSw3ICs4OTEsNyBAQAogICAgICAgICB9CiAKICAgICAgICAgLyogZ2V0IHNlZ21lbnQgYmVmb3JlIHRoaXMgbWF0Y2ggKi8KLSAgICAgICAgaXRlbSA9IFB5U2VxdWVuY2VfR2V0U2xpY2UoCisgICAgICAgIGl0ZW0gPSBnZXRzbGljZShzdGF0ZS5pc2J5dGVzLCBzdGF0ZS5iZWdpbm5pbmcsCiAgICAgICAgICAgICBzdHJpbmcsIFNUQVRFX09GRlNFVCgmc3RhdGUsIGxhc3QpLAogICAgICAgICAgICAgU1RBVEVfT0ZGU0VUKCZzdGF0ZSwgc3RhdGUuc3RhcnQpCiAgICAgICAgICAgICApOwpAQCAtMjMwMCw3ICs5MjAsNyBAQAogICAgIH0KIAogICAgIC8qIGdldCBzZWdtZW50IGZvbGxvd2luZyBsYXN0IG1hdGNoIChldmVuIGlmIGVtcHR5KSAqLwotICAgIGl0ZW0gPSBQeVNlcXVlbmNlX0dldFNsaWNlKAorICAgIGl0ZW0gPSBnZXRzbGljZShzdGF0ZS5pc2J5dGVzLCBzdGF0ZS5iZWdpbm5pbmcsCiAgICAgICAgIHN0cmluZywgU1RBVEVfT0ZGU0VUKCZzdGF0ZSwgbGFzdCksIHN0YXRlLmVuZHBvcwogICAgICAgICApOwogICAgIGlmICghaXRlbSkKQEAgLTIzMjYsMTUgKzk0NiwxNiBAQAogewogICAgIFNSRV9TVEFURSBzdGF0ZTsKICAgICBQeU9iamVjdCogbGlzdDsKKyAgICBQeU9iamVjdCogam9pbmVyOwogICAgIFB5T2JqZWN0KiBpdGVtOwogICAgIFB5T2JqZWN0KiBmaWx0ZXI7CiAgICAgUHlPYmplY3QqIGFyZ3M7CiAgICAgUHlPYmplY3QqIG1hdGNoOwogICAgIHZvaWQqIHB0cjsKLSAgICBpbnQgc3RhdHVzOworICAgIFB5X3NzaXplX3Qgc3RhdHVzOwogICAgIFB5X3NzaXplX3QgbjsKICAgICBQeV9zc2l6ZV90IGksIGIsIGU7Ci0gICAgaW50IGxvZ2ljYWxfY2hhcnNpemUsIGNoYXJzaXplOworICAgIGludCBpc2J5dGVzLCBjaGFyc2l6ZTsKICAgICBpbnQgZmlsdGVyX2lzX2NhbGxhYmxlOwogICAgIFB5X2J1ZmZlciB2aWV3OwogCkBAIC0yMzQ3LDEwICs5NjgsMTMgQEAKICAgICAgICAgLyogaWYgbm90IGNhbGxhYmxlLCBjaGVjayBpZiBpdCdzIGEgbGl0ZXJhbCBzdHJpbmcgKi8KICAgICAgICAgaW50IGxpdGVyYWw7CiAgICAgICAgIHZpZXcuYnVmID0gTlVMTDsKLSAgICAgICAgcHRyID0gZ2V0c3RyaW5nKHB0ZW1wbGF0ZSwgJm4sICZsb2dpY2FsX2NoYXJzaXplLCAmY2hhcnNpemUsICZ2aWV3KTsKKyAgICAgICAgcHRyID0gZ2V0c3RyaW5nKHB0ZW1wbGF0ZSwgJm4sICZpc2J5dGVzLCAmY2hhcnNpemUsICZ2aWV3KTsKICAgICAgICAgYiA9IGNoYXJzaXplOwogICAgICAgICBpZiAocHRyKSB7Ci0gICAgICAgICAgICBsaXRlcmFsID0gc3JlX2xpdGVyYWxfdGVtcGxhdGUoYiwgcHRyLCBuKTsKKyAgICAgICAgICAgIGlmIChjaGFyc2l6ZSA9PSAxKQorICAgICAgICAgICAgICAgIGxpdGVyYWwgPSBtZW1jaHIocHRyLCAnXFwnLCBuKSA9PSBOVUxMOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGxpdGVyYWwgPSBQeVVuaWNvZGVfRmluZENoYXIocHRlbXBsYXRlLCAnXFwnLCAwLCBuLCAxKSA9PSAtMTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CiAgICAgICAgICAgICBsaXRlcmFsID0gMDsKQEAgLTIzOTQsMTIgKzEwMTgsNyBAQAogCiAgICAgICAgIHN0YXRlLnB0ciA9IHN0YXRlLnN0YXJ0OwogCi0gICAgICAgIGlmIChzdGF0ZS5sb2dpY2FsX2NoYXJzaXplID09IDEpIHsKLSAgICAgICAgICAgIHN0YXR1cyA9IHNyZV9zZWFyY2goJnN0YXRlLCBQYXR0ZXJuT2JqZWN0X0dldENvZGUoc2VsZikpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc3RhdHVzID0gc3JlX3VzZWFyY2goJnN0YXRlLCBQYXR0ZXJuT2JqZWN0X0dldENvZGUoc2VsZikpOwotICAgICAgICB9Ci0KKyAgICAgICAgc3RhdHVzID0gc3JlX3NlYXJjaCgmc3RhdGUsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmKSk7CiAgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICAgICAgZ290byBlcnJvcjsKIApAQCAtMjQxNSw3ICsxMDM0LDggQEAKIAogICAgICAgICBpZiAoaSA8IGIpIHsKICAgICAgICAgICAgIC8qIGdldCBzZWdtZW50IGJlZm9yZSB0aGlzIG1hdGNoICovCi0gICAgICAgICAgICBpdGVtID0gUHlTZXF1ZW5jZV9HZXRTbGljZShzdHJpbmcsIGksIGIpOworICAgICAgICAgICAgaXRlbSA9IGdldHNsaWNlKHN0YXRlLmlzYnl0ZXMsIHN0YXRlLmJlZ2lubmluZywKKyAgICAgICAgICAgICAgICBzdHJpbmcsIGksIGIpOwogICAgICAgICAgICAgaWYgKCFpdGVtKQogICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICBzdGF0dXMgPSBQeUxpc3RfQXBwZW5kKGxpc3QsIGl0ZW0pOwpAQCAtMjQ2MSw2ICsxMDgxLDggQEAKIAogbmV4dDoKICAgICAgICAgLyogbW92ZSBvbiAqLworICAgICAgICBpZiAoc3RhdGUucHRyID09IHN0YXRlLmVuZCkKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBpZiAoc3RhdGUucHRyID09IHN0YXRlLnN0YXJ0KQogICAgICAgICAgICAgc3RhdGUuc3RhcnQgPSAodm9pZCopICgoY2hhciopIHN0YXRlLnB0ciArIHN0YXRlLmNoYXJzaXplKTsKICAgICAgICAgZWxzZQpAQCAtMjQ3MCw3ICsxMDkyLDggQEAKIAogICAgIC8qIGdldCBzZWdtZW50IGZvbGxvd2luZyBsYXN0IG1hdGNoICovCiAgICAgaWYgKGkgPCBzdGF0ZS5lbmRwb3MpIHsKLSAgICAgICAgaXRlbSA9IFB5U2VxdWVuY2VfR2V0U2xpY2Uoc3RyaW5nLCBpLCBzdGF0ZS5lbmRwb3MpOworICAgICAgICBpdGVtID0gZ2V0c2xpY2Uoc3RhdGUuaXNieXRlcywgc3RhdGUuYmVnaW5uaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nLCBpLCBzdGF0ZS5lbmRwb3MpOwogICAgICAgICBpZiAoIWl0ZW0pCiAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICBzdGF0dXMgPSBQeUxpc3RfQXBwZW5kKGxpc3QsIGl0ZW0pOwpAQCAtMjQ4NCwxMCArMTEwNywyNSBAQAogICAgIFB5X0RFQ1JFRihmaWx0ZXIpOwogCiAgICAgLyogY29udmVydCBsaXN0IHRvIHNpbmdsZSBzdHJpbmcgKGFsc28gcmVtb3ZlcyBsaXN0KSAqLwotICAgIGl0ZW0gPSBqb2luX2xpc3QobGlzdCwgc3RyaW5nKTsKLQotICAgIGlmICghaXRlbSkKKyAgICBqb2luZXIgPSBnZXRzbGljZShzdGF0ZS5pc2J5dGVzLCBzdGF0ZS5iZWdpbm5pbmcsIHN0cmluZywgMCwgMCk7CisgICAgaWYgKCFqb2luZXIpIHsKKyAgICAgICAgUHlfREVDUkVGKGxpc3QpOwogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKFB5TGlzdF9HRVRfU0laRShsaXN0KSA9PSAwKSB7CisgICAgICAgIFB5X0RFQ1JFRihsaXN0KTsKKyAgICAgICAgaXRlbSA9IGpvaW5lcjsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGlmIChzdGF0ZS5pc2J5dGVzKQorICAgICAgICAgICAgaXRlbSA9IF9QeUJ5dGVzX0pvaW4oam9pbmVyLCBsaXN0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaXRlbSA9IFB5VW5pY29kZV9Kb2luKGpvaW5lciwgbGlzdCk7CisgICAgICAgIFB5X0RFQ1JFRihqb2luZXIpOworICAgICAgICBQeV9ERUNSRUYobGlzdCk7CisgICAgICAgIGlmICghaXRlbSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAogICAgIGlmIChzdWJuKQogICAgICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiTm4iLCBpdGVtLCBuKTsKQEAgLTI1ODEsMTAgKzEyMTksOTQgQEAKICNlbmRpZgogfQogCitzdGF0aWMgUHlPYmplY3QgKgorcGF0dGVybl9yZXByKFBhdHRlcm5PYmplY3QgKm9iaikKK3sKKyAgICBzdGF0aWMgY29uc3Qgc3RydWN0IHsKKyAgICAgICAgY29uc3QgY2hhciAqbmFtZTsKKyAgICAgICAgaW50IHZhbHVlOworICAgIH0gZmxhZ19uYW1lc1tdID0geworICAgICAgICB7InJlLlRFTVBMQVRFIiwgU1JFX0ZMQUdfVEVNUExBVEV9LAorICAgICAgICB7InJlLklHTk9SRUNBU0UiLCBTUkVfRkxBR19JR05PUkVDQVNFfSwKKyAgICAgICAgeyJyZS5MT0NBTEUiLCBTUkVfRkxBR19MT0NBTEV9LAorICAgICAgICB7InJlLk1VTFRJTElORSIsIFNSRV9GTEFHX01VTFRJTElORX0sCisgICAgICAgIHsicmUuRE9UQUxMIiwgU1JFX0ZMQUdfRE9UQUxMfSwKKyAgICAgICAgeyJyZS5VTklDT0RFIiwgU1JFX0ZMQUdfVU5JQ09ERX0sCisgICAgICAgIHsicmUuVkVSQk9TRSIsIFNSRV9GTEFHX1ZFUkJPU0V9LAorICAgICAgICB7InJlLkRFQlVHIiwgU1JFX0ZMQUdfREVCVUd9LAorICAgICAgICB7InJlLkFTQ0lJIiwgU1JFX0ZMQUdfQVNDSUl9LAorICAgIH07CisgICAgUHlPYmplY3QgKnJlc3VsdCA9IE5VTEw7CisgICAgUHlPYmplY3QgKmZsYWdfaXRlbXM7CisgICAgaW50IGk7CisgICAgaW50IGZsYWdzID0gb2JqLT5mbGFnczsKKworICAgIC8qIE9taXQgcmUuVU5JQ09ERSBmb3IgdmFsaWQgc3RyaW5nIHBhdHRlcm5zLiAqLworICAgIGlmIChvYmotPmlzYnl0ZXMgPT0gMCAmJgorICAgICAgICAoZmxhZ3MgJiAoU1JFX0ZMQUdfTE9DQUxFfFNSRV9GTEFHX1VOSUNPREV8U1JFX0ZMQUdfQVNDSUkpKSA9PQorICAgICAgICAgU1JFX0ZMQUdfVU5JQ09ERSkKKyAgICAgICAgZmxhZ3MgJj0gflNSRV9GTEFHX1VOSUNPREU7CisKKyAgICBmbGFnX2l0ZW1zID0gUHlMaXN0X05ldygwKTsKKyAgICBpZiAoIWZsYWdfaXRlbXMpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgZm9yIChpID0gMDsgaSA8IFB5X0FSUkFZX0xFTkdUSChmbGFnX25hbWVzKTsgaSsrKSB7CisgICAgICAgIGlmIChmbGFncyAmIGZsYWdfbmFtZXNbaV0udmFsdWUpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICppdGVtID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoZmxhZ19uYW1lc1tpXS5uYW1lKTsKKyAgICAgICAgICAgIGlmICghaXRlbSkKKyAgICAgICAgICAgICAgICBnb3RvIGRvbmU7CisKKyAgICAgICAgICAgIGlmIChQeUxpc3RfQXBwZW5kKGZsYWdfaXRlbXMsIGl0ZW0pIDwgMCkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihpdGVtKTsKKyAgICAgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBQeV9ERUNSRUYoaXRlbSk7CisgICAgICAgICAgICBmbGFncyAmPSB+ZmxhZ19uYW1lc1tpXS52YWx1ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoZmxhZ3MpIHsKKyAgICAgICAgUHlPYmplY3QgKml0ZW0gPSBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiMHgleCIsIGZsYWdzKTsKKyAgICAgICAgaWYgKCFpdGVtKQorICAgICAgICAgICAgZ290byBkb25lOworCisgICAgICAgIGlmIChQeUxpc3RfQXBwZW5kKGZsYWdfaXRlbXMsIGl0ZW0pIDwgMCkgeworICAgICAgICAgICAgUHlfREVDUkVGKGl0ZW0pOworICAgICAgICAgICAgZ290byBkb25lOworICAgICAgICB9CisgICAgICAgIFB5X0RFQ1JFRihpdGVtKTsKKyAgICB9CisKKyAgICBpZiAoUHlMaXN0X1NpemUoZmxhZ19pdGVtcykgPiAwKSB7CisgICAgICAgIFB5T2JqZWN0ICpmbGFnc19yZXN1bHQ7CisgICAgICAgIFB5T2JqZWN0ICpzZXAgPSBQeVVuaWNvZGVfRnJvbVN0cmluZygifCIpOworICAgICAgICBpZiAoIXNlcCkKKyAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAgZmxhZ3NfcmVzdWx0ID0gUHlVbmljb2RlX0pvaW4oc2VwLCBmbGFnX2l0ZW1zKTsKKyAgICAgICAgUHlfREVDUkVGKHNlcCk7CisgICAgICAgIGlmICghZmxhZ3NfcmVzdWx0KQorICAgICAgICAgICAgZ290byBkb25lOworICAgICAgICByZXN1bHQgPSBQeVVuaWNvZGVfRnJvbUZvcm1hdCgicmUuY29tcGlsZSglLjIwMFIsICVTKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iai0+cGF0dGVybiwgZmxhZ3NfcmVzdWx0KTsKKyAgICAgICAgUHlfREVDUkVGKGZsYWdzX3Jlc3VsdCk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICByZXN1bHQgPSBQeVVuaWNvZGVfRnJvbUZvcm1hdCgicmUuY29tcGlsZSglLjIwMFIpIiwgb2JqLT5wYXR0ZXJuKTsKKyAgICB9CisKK2RvbmU6CisgICAgUHlfREVDUkVGKGZsYWdfaXRlbXMpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIFB5RG9jX1NUUlZBUihwYXR0ZXJuX21hdGNoX2RvYywKICJtYXRjaChzdHJpbmdbLCBwb3NbLCBlbmRwb3NdXSkgLT4gbWF0Y2ggb2JqZWN0IG9yIE5vbmUuXG5cCiAgICAgTWF0Y2hlcyB6ZXJvIG9yIG1vcmUgY2hhcmFjdGVycyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzdHJpbmciKTsKIAorUHlEb2NfU1RSVkFSKHBhdHRlcm5fZnVsbG1hdGNoX2RvYywKKyJmdWxsbWF0Y2goc3RyaW5nWywgcG9zWywgZW5kcG9zXV0pIC0+IG1hdGNoIG9iamVjdCBvciBOb25lLlxuXAorICAgIE1hdGNoZXMgYWdhaW5zdCBhbGwgb2YgdGhlIHN0cmluZyIpOworCiBQeURvY19TVFJWQVIocGF0dGVybl9zZWFyY2hfZG9jLAogInNlYXJjaChzdHJpbmdbLCBwb3NbLCBlbmRwb3NdXSkgLT4gbWF0Y2ggb2JqZWN0IG9yIE5vbmUuXG5cCiAgICAgU2NhbiB0aHJvdWdoIHN0cmluZyBsb29raW5nIGZvciBhIG1hdGNoLCBhbmQgcmV0dXJuIGEgY29ycmVzcG9uZGluZ1xuXApAQCAtMjYyMCw2ICsxMzQyLDggQEAKIHN0YXRpYyBQeU1ldGhvZERlZiBwYXR0ZXJuX21ldGhvZHNbXSA9IHsKICAgICB7Im1hdGNoIiwgKFB5Q0Z1bmN0aW9uKSBwYXR0ZXJuX21hdGNoLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywKICAgICAgICAgcGF0dGVybl9tYXRjaF9kb2N9LAorICAgIHsiZnVsbG1hdGNoIiwgKFB5Q0Z1bmN0aW9uKSBwYXR0ZXJuX2Z1bGxtYXRjaCwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsCisgICAgICAgIHBhdHRlcm5fZnVsbG1hdGNoX2RvY30sCiAgICAgeyJzZWFyY2giLCAoUHlDRnVuY3Rpb24pIHBhdHRlcm5fc2VhcmNoLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywKICAgICAgICAgcGF0dGVybl9zZWFyY2hfZG9jfSwKICAgICB7InN1YiIsIChQeUNGdW5jdGlvbikgcGF0dGVybl9zdWIsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLApAQCAtMjYzMCwxMCArMTM1NCw4IEBACiAgICAgICAgIHBhdHRlcm5fc3BsaXRfZG9jfSwKICAgICB7ImZpbmRhbGwiLCAoUHlDRnVuY3Rpb24pIHBhdHRlcm5fZmluZGFsbCwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsCiAgICAgICAgIHBhdHRlcm5fZmluZGFsbF9kb2N9LAotI2lmIFBZX1ZFUlNJT05fSEVYID49IDB4MDIwMjAwMDAKICAgICB7ImZpbmRpdGVyIiwgKFB5Q0Z1bmN0aW9uKSBwYXR0ZXJuX2ZpbmRpdGVyLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywKICAgICAgICAgcGF0dGVybl9maW5kaXRlcl9kb2N9LAotI2VuZGlmCiAgICAgeyJzY2FubmVyIiwgKFB5Q0Z1bmN0aW9uKSBwYXR0ZXJuX3NjYW5uZXIsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTfSwKICAgICB7Il9fY29weV9fIiwgKFB5Q0Z1bmN0aW9uKSBwYXR0ZXJuX2NvcHksIE1FVEhfTk9BUkdTfSwKICAgICB7Il9fZGVlcGNvcHlfXyIsIChQeUNGdW5jdGlvbikgcGF0dGVybl9kZWVwY29weSwgTUVUSF9PfSwKQEAgLTI2NTgsNyArMTM4MCw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0YXR0ciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3NldGF0dHIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yZXNlcnZlZCAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JlcHIgKi8KKyAgICAocmVwcmZ1bmMpcGF0dGVybl9yZXByLCAgICAgICAgICAgICAvKiB0cF9yZXByICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfbnVtYmVyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfc2VxdWVuY2UgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19tYXBwaW5nICovCkBAIC0yNzExLDcgKzE0MzMsNiBAQAogICAgIHNlbGYtPnBhdHRlcm4gPSBOVUxMOwogICAgIHNlbGYtPmdyb3VwaW5kZXggPSBOVUxMOwogICAgIHNlbGYtPmluZGV4Z3JvdXAgPSBOVUxMOwotICAgIHNlbGYtPnZpZXcuYnVmID0gTlVMTDsKIAogICAgIHNlbGYtPmNvZGVzaXplID0gbjsKIApAQCAtMjczMiwxNiArMTQ1MywyMCBAQAogICAgIH0KIAogICAgIGlmIChwYXR0ZXJuID09IFB5X05vbmUpIHsKLSAgICAgICAgc2VsZi0+bG9naWNhbF9jaGFyc2l6ZSA9IC0xOwotICAgICAgICBzZWxmLT5jaGFyc2l6ZSA9IC0xOworICAgICAgICBzZWxmLT5pc2J5dGVzID0gLTE7CiAgICAgfQogICAgIGVsc2UgewogICAgICAgICBQeV9zc2l6ZV90IHBfbGVuZ3RoOwotICAgICAgICBpZiAoIWdldHN0cmluZyhwYXR0ZXJuLCAmcF9sZW5ndGgsICZzZWxmLT5sb2dpY2FsX2NoYXJzaXplLAotICAgICAgICAgICAgICAgICAgICAgICAmc2VsZi0+Y2hhcnNpemUsICZzZWxmLT52aWV3KSkgeworICAgICAgICBpbnQgY2hhcnNpemU7CisgICAgICAgIFB5X2J1ZmZlciB2aWV3OworICAgICAgICB2aWV3LmJ1ZiA9IE5VTEw7CisgICAgICAgIGlmICghZ2V0c3RyaW5nKHBhdHRlcm4sICZwX2xlbmd0aCwgJnNlbGYtPmlzYnl0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICZjaGFyc2l6ZSwgJnZpZXcpKSB7CiAgICAgICAgICAgICBQeV9ERUNSRUYoc2VsZik7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQorICAgICAgICBpZiAodmlldy5idWYpCisgICAgICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2aWV3KTsKICAgICB9CiAKICAgICBQeV9JTkNSRUYocGF0dGVybik7CkBAIC0yODI3LDcgKzE1NTIsNyBAQAogICAgICAgICBza2lwID0gKmNvZGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIFZUUkFDRSgoIiVsdSAoc2tpcCB0byAlcClcbiIsICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKXNraXAsIGNvZGUrc2tpcCkpOyAgICAgICAgXAotICAgICAgICBpZiAoc2tpcC1hZGogPiBlbmQtY29kZSkgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChza2lwLWFkaiA+IChQeV91aW50cHRyX3QpKGVuZCAtIGNvZGUpKSAgICAgIFwKICAgICAgICAgICAgIEZBSUw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBjb2RlKys7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgfSB3aGlsZSAoMCkKQEAgLTI4NTksOCArMTU4NCw4IEBACiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIFNSRV9PUF9DSEFSU0VUOgotICAgICAgICAgICAgb2Zmc2V0ID0gMzIvc2l6ZW9mKFNSRV9DT0RFKTsgLyogMzItYnl0ZSBiaXRtYXAgKi8KLSAgICAgICAgICAgIGlmIChvZmZzZXQgPiBlbmQtY29kZSkKKyAgICAgICAgICAgIG9mZnNldCA9IDI1Ni9TUkVfQ09ERV9CSVRTOyAvKiAyNTYtYml0IGJpdG1hcCAqLworICAgICAgICAgICAgaWYgKG9mZnNldCA+IChQeV91aW50cHRyX3QpKGVuZCAtIGNvZGUpKQogICAgICAgICAgICAgICAgIEZBSUw7CiAgICAgICAgICAgICBjb2RlICs9IG9mZnNldDsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjg2OCw3ICsxNTkzLDcgQEAKICAgICAgICAgY2FzZSBTUkVfT1BfQklHQ0hBUlNFVDoKICAgICAgICAgICAgIEdFVF9BUkc7IC8qIE51bWJlciBvZiBibG9ja3MgKi8KICAgICAgICAgICAgIG9mZnNldCA9IDI1Ni9zaXplb2YoU1JFX0NPREUpOyAvKiAyNTYtYnl0ZSB0YWJsZSAqLwotICAgICAgICAgICAgaWYgKG9mZnNldCA+IGVuZC1jb2RlKQorICAgICAgICAgICAgaWYgKG9mZnNldCA+IChQeV91aW50cHRyX3QpKGVuZCAtIGNvZGUpKQogICAgICAgICAgICAgICAgIEZBSUw7CiAgICAgICAgICAgICAvKiBNYWtlIHN1cmUgdGhhdCBlYWNoIGJ5dGUgcG9pbnRzIHRvIGEgdmFsaWQgYmxvY2sgKi8KICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgewpAQCAtMjg3Niw4ICsxNjAxLDggQEAKICAgICAgICAgICAgICAgICAgICAgRkFJTDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNvZGUgKz0gb2Zmc2V0OwotICAgICAgICAgICAgb2Zmc2V0ID0gYXJnICogMzIvc2l6ZW9mKFNSRV9DT0RFKTsgLyogMzItYnl0ZSBiaXRtYXAgdGltZXMgYXJnICovCi0gICAgICAgICAgICBpZiAob2Zmc2V0ID4gZW5kLWNvZGUpCisgICAgICAgICAgICBvZmZzZXQgPSBhcmcgKiAoMjU2L1NSRV9DT0RFX0JJVFMpOyAvKiAyNTYtYml0IGJpdG1hcCB0aW1lcyBhcmcgKi8KKyAgICAgICAgICAgIGlmIChvZmZzZXQgPiAoUHlfdWludHB0cl90KShlbmQgLSBjb2RlKSkKICAgICAgICAgICAgICAgICBGQUlMOwogICAgICAgICAgICAgY29kZSArPSBvZmZzZXQ7CiAgICAgICAgICAgICBicmVhazsKQEAgLTI5NDAsNyArMTY2NSw3IEBACiAgICAgICAgICAgICAgICBzcmVfbWF0Y2goKSBjb2RlIGlzIHJvYnVzdCBldmVuIGlmIHRoZXkgZG9uJ3QsIGFuZCB0aGUgd29yc3QKICAgICAgICAgICAgICAgIHlvdSBjYW4gZ2V0IGlzIG5vbnNlbnNpY2FsIG1hdGNoIHJlc3VsdHMuICovCiAgICAgICAgICAgICBHRVRfQVJHOwotICAgICAgICAgICAgaWYgKGFyZyA+IDIqZ3JvdXBzKzEpIHsKKyAgICAgICAgICAgIGlmIChhcmcgPiAyICogKHNpemVfdClncm91cHMgKyAxKSB7CiAgICAgICAgICAgICAgICAgVlRSQUNFKCgiYXJnPSVkLCBncm91cHM9JWRcbiIsIChpbnQpYXJnLCAoaW50KWdyb3VwcykpOwogICAgICAgICAgICAgICAgIEZBSUw7CiAgICAgICAgICAgICB9CkBAIC0zMDI4LDExICsxNzUzLDExIEBACiAgICAgICAgICAgICAgICAgICAgIEdFVF9BUkc7IHByZWZpeF9sZW4gPSBhcmc7CiAgICAgICAgICAgICAgICAgICAgIEdFVF9BUkc7CiAgICAgICAgICAgICAgICAgICAgIC8qIEhlcmUgY29tZXMgdGhlIHByZWZpeCBzdHJpbmcgKi8KLSAgICAgICAgICAgICAgICAgICAgaWYgKHByZWZpeF9sZW4gPiBuZXdjb2RlLWNvZGUpCisgICAgICAgICAgICAgICAgICAgIGlmIChwcmVmaXhfbGVuID4gKFB5X3VpbnRwdHJfdCkobmV3Y29kZSAtIGNvZGUpKQogICAgICAgICAgICAgICAgICAgICAgICAgRkFJTDsKICAgICAgICAgICAgICAgICAgICAgY29kZSArPSBwcmVmaXhfbGVuOwogICAgICAgICAgICAgICAgICAgICAvKiBBbmQgaGVyZSBjb21lcyB0aGUgb3ZlcmxhcCB0YWJsZSAqLwotICAgICAgICAgICAgICAgICAgICBpZiAocHJlZml4X2xlbiA+IG5ld2NvZGUtY29kZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHByZWZpeF9sZW4gPiAoUHlfdWludHB0cl90KShuZXdjb2RlIC0gY29kZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBGQUlMOwogICAgICAgICAgICAgICAgICAgICAvKiBFYWNoIG92ZXJsYXAgdmFsdWUgc2hvdWxkIGJlIDwgcHJlZml4X2xlbiAqLwogICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcHJlZml4X2xlbjsgaSsrKSB7CkBAIC0zMTIzLDcgKzE4NDgsNyBAQAogICAgICAgICBjYXNlIFNSRV9PUF9HUk9VUFJFRjoKICAgICAgICAgY2FzZSBTUkVfT1BfR1JPVVBSRUZfSUdOT1JFOgogICAgICAgICAgICAgR0VUX0FSRzsKLSAgICAgICAgICAgIGlmIChhcmcgPj0gZ3JvdXBzKQorICAgICAgICAgICAgaWYgKGFyZyA+PSAoc2l6ZV90KWdyb3VwcykKICAgICAgICAgICAgICAgICBGQUlMOwogICAgICAgICAgICAgYnJlYWs7CiAKQEAgLTMxMzIsNyArMTg1Nyw3IEBACiAgICAgICAgICAgICAgICAnZ3JvdXAnIGlzIGVpdGhlciBhbiBpbnRlZ2VyIGdyb3VwIG51bWJlciBvciBhIGdyb3VwIG5hbWUsCiAgICAgICAgICAgICAgICAndGhlbicgYW5kICdlbHNlJyBhcmUgc3ViLXJlZ2V4ZXMsIGFuZCAnZWxzZScgaXMgb3B0aW9uYWwuICovCiAgICAgICAgICAgICBHRVRfQVJHOwotICAgICAgICAgICAgaWYgKGFyZyA+PSBncm91cHMpCisgICAgICAgICAgICBpZiAoYXJnID49IChzaXplX3QpZ3JvdXBzKQogICAgICAgICAgICAgICAgIEZBSUw7CiAgICAgICAgICAgICBHRVRfU0tJUF9BREooMSk7CiAgICAgICAgICAgICBjb2RlLS07IC8qIFRoZSBza2lwIGlzIHJlbGF0aXZlIHRvIHRoZSBmaXJzdCBhcmchICovCkBAIC0zMTYxLDcgKzE4ODYsNyBAQAogICAgICAgICAgICAgICAgdG8gYWxsb3cgYXJiaXRyYXJ5IGp1bXBzIGFueXdoZXJlIGluIHRoZSBjb2RlOyBzbyB3ZSBqdXN0IGxvb2sKICAgICAgICAgICAgICAgIGZvciBhIEpVTVAgb3Bjb2RlIHByZWNlZGluZyBvdXIgc2tpcCB0YXJnZXQuCiAgICAgICAgICAgICAqLwotICAgICAgICAgICAgaWYgKHNraXAgPj0gMyAmJiBza2lwLTMgPCBlbmQtY29kZSAmJgorICAgICAgICAgICAgaWYgKHNraXAgPj0gMyAmJiBza2lwLTMgPCAoUHlfdWludHB0cl90KShlbmQgLSBjb2RlKSAmJgogICAgICAgICAgICAgICAgIGNvZGVbc2tpcC0zXSA9PSBTUkVfT1BfSlVNUCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBWVFJBQ0UoKCJib3RoIHRoZW4gYW5kIGVsc2UgcGFydHMgcHJlc2VudFxuIikpOwpAQCAtMzI0NSw2ICsxOTcwLDEyIEBACiBzdGF0aWMgUHlPYmplY3QqCiBtYXRjaF9nZXRzbGljZV9ieV9pbmRleChNYXRjaE9iamVjdCogc2VsZiwgUHlfc3NpemVfdCBpbmRleCwgUHlPYmplY3QqIGRlZikKIHsKKyAgICBQeV9zc2l6ZV90IGxlbmd0aDsKKyAgICBpbnQgaXNieXRlcywgY2hhcnNpemU7CisgICAgUHlfYnVmZmVyIHZpZXc7CisgICAgUHlPYmplY3QgKnJlc3VsdDsKKyAgICB2b2lkKiBwdHI7CisKICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHNlbGYtPmdyb3VwcykgewogICAgICAgICAvKiByYWlzZSBJbmRleEVycm9yIGlmIHdlIHdlcmUgZ2l2ZW4gYSBiYWQgZ3JvdXAgbnVtYmVyICovCiAgICAgICAgIFB5RXJyX1NldFN0cmluZygKQEAgLTMyNjIsOSArMTk5MywxNCBAQAogICAgICAgICByZXR1cm4gZGVmOwogICAgIH0KIAotICAgIHJldHVybiBQeVNlcXVlbmNlX0dldFNsaWNlKAotICAgICAgICBzZWxmLT5zdHJpbmcsIHNlbGYtPm1hcmtbaW5kZXhdLCBzZWxmLT5tYXJrW2luZGV4KzFdCi0gICAgICAgICk7CisgICAgcHRyID0gZ2V0c3RyaW5nKHNlbGYtPnN0cmluZywgJmxlbmd0aCwgJmlzYnl0ZXMsICZjaGFyc2l6ZSwgJnZpZXcpOworICAgIGlmIChwdHIgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmVzdWx0ID0gZ2V0c2xpY2UoaXNieXRlcywgcHRyLAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYtPnN0cmluZywgc2VsZi0+bWFya1tpbmRleF0sIHNlbGYtPm1hcmtbaW5kZXgrMV0pOworICAgIGlmIChpc2J5dGVzICYmIHZpZXcuYnVmICE9IE5VTEwpCisgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZpZXcpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIHN0YXRpYyBQeV9zc2l6ZV90CkBAIC0zNjg0LDYgKzI0MjAsMjIgQEAKICAgICAgICAgcmV0dXJuIG1hdGNoX3JlZ3Moc2VsZik7CiB9CiAKK3N0YXRpYyBQeU9iamVjdCAqCittYXRjaF9yZXByKE1hdGNoT2JqZWN0ICpzZWxmKQoreworICAgIFB5T2JqZWN0ICpyZXN1bHQ7CisgICAgUHlPYmplY3QgKmdyb3VwMCA9IG1hdGNoX2dldHNsaWNlX2J5X2luZGV4KHNlbGYsIDAsIFB5X05vbmUpOworICAgIGlmIChncm91cDAgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmVzdWx0ID0gUHlVbmljb2RlX0Zyb21Gb3JtYXQoCisgICAgICAgICAgICAiPCVzIG9iamVjdDsgc3Bhbj0oJWQsICVkKSwgbWF0Y2g9JS41MFI+IiwKKyAgICAgICAgICAgIFB5X1RZUEUoc2VsZiktPnRwX25hbWUsCisgICAgICAgICAgICBzZWxmLT5tYXJrWzBdLCBzZWxmLT5tYXJrWzFdLCBncm91cDApOworICAgIFB5X0RFQ1JFRihncm91cDApOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKwogc3RhdGljIFB5R2V0U2V0RGVmIG1hdGNoX2dldHNldFtdID0gewogICAgIHsibGFzdGluZGV4IiwgKGdldHRlciltYXRjaF9sYXN0aW5kZXhfZ2V0LCAoc2V0dGVyKU5VTEx9LAogICAgIHsibGFzdGdyb3VwIiwgKGdldHRlciltYXRjaF9sYXN0Z3JvdXBfZ2V0LCAoc2V0dGVyKU5VTEx9LApAQCAtMzcxMiw3ICsyNDY0LDcgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0YXR0ciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zZXRhdHRyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3Jlc2VydmVkICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JlcHIgKi8KKyAgICAocmVwcmZ1bmMpbWF0Y2hfcmVwciwgICAgICAgLyogdHBfcmVwciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19udW1iZXIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfc2VxdWVuY2UgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfbWFwcGluZyAqLwpAQCAtMzczNiw3ICsyNDg4LDcgQEAKIH07CiAKIHN0YXRpYyBQeU9iamVjdCoKLXBhdHRlcm5fbmV3X21hdGNoKFBhdHRlcm5PYmplY3QqIHBhdHRlcm4sIFNSRV9TVEFURSogc3RhdGUsIGludCBzdGF0dXMpCitwYXR0ZXJuX25ld19tYXRjaChQYXR0ZXJuT2JqZWN0KiBwYXR0ZXJuLCBTUkVfU1RBVEUqIHN0YXRlLCBQeV9zc2l6ZV90IHN0YXR1cykKIHsKICAgICAvKiBjcmVhdGUgbWF0Y2ggb2JqZWN0IChmcm9tIHN0YXRlIG9iamVjdCkgKi8KIApAQCAtMzgxNSwyNyArMjU2NywzMCBAQAogewogICAgIFNSRV9TVEFURSogc3RhdGUgPSAmc2VsZi0+c3RhdGU7CiAgICAgUHlPYmplY3QqIG1hdGNoOwotICAgIGludCBzdGF0dXM7CisgICAgUHlfc3NpemVfdCBzdGF0dXM7CisKKyAgICBpZiAoc3RhdGUtPnN0YXJ0ID09IE5VTEwpCisgICAgICAgIFB5X1JFVFVSTl9OT05FOwogCiAgICAgc3RhdGVfcmVzZXQoc3RhdGUpOwogCiAgICAgc3RhdGUtPnB0ciA9IHN0YXRlLT5zdGFydDsKIAotICAgIGlmIChzdGF0ZS0+bG9naWNhbF9jaGFyc2l6ZSA9PSAxKSB7Ci0gICAgICAgIHN0YXR1cyA9IHNyZV9tYXRjaChzdGF0ZSwgUGF0dGVybk9iamVjdF9HZXRDb2RlKHNlbGYtPnBhdHRlcm4pKTsKLSAgICB9IGVsc2UgewotICAgICAgICBzdGF0dXMgPSBzcmVfdW1hdGNoKHN0YXRlLCBQYXR0ZXJuT2JqZWN0X0dldENvZGUoc2VsZi0+cGF0dGVybikpOwotICAgIH0KKyAgICBzdGF0dXMgPSBzcmVfbWF0Y2goc3RhdGUsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmLT5wYXR0ZXJuKSwgMCk7CiAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgbWF0Y2ggPSBwYXR0ZXJuX25ld19tYXRjaCgoUGF0dGVybk9iamVjdCopIHNlbGYtPnBhdHRlcm4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUsIHN0YXR1cyk7CiAKLSAgICBpZiAoc3RhdHVzID09IDAgfHwgc3RhdGUtPnB0ciA9PSBzdGF0ZS0+c3RhcnQpCisgICAgaWYgKHN0YXR1cyA9PSAwKQorICAgICAgICBzdGF0ZS0+c3RhcnQgPSBOVUxMOworICAgIGVsc2UgaWYgKHN0YXRlLT5wdHIgIT0gc3RhdGUtPnN0YXJ0KQorICAgICAgICBzdGF0ZS0+c3RhcnQgPSBzdGF0ZS0+cHRyOworICAgIGVsc2UgaWYgKHN0YXRlLT5wdHIgIT0gc3RhdGUtPmVuZCkKICAgICAgICAgc3RhdGUtPnN0YXJ0ID0gKHZvaWQqKSAoKGNoYXIqKSBzdGF0ZS0+cHRyICsgc3RhdGUtPmNoYXJzaXplKTsKICAgICBlbHNlCi0gICAgICAgIHN0YXRlLT5zdGFydCA9IHN0YXRlLT5wdHI7CisgICAgICAgIHN0YXRlLT5zdGFydCA9IE5VTEw7CiAKICAgICByZXR1cm4gbWF0Y2g7CiB9CkBAIC0zODQ2LDI3ICsyNjAxLDMwIEBACiB7CiAgICAgU1JFX1NUQVRFKiBzdGF0ZSA9ICZzZWxmLT5zdGF0ZTsKICAgICBQeU9iamVjdCogbWF0Y2g7Ci0gICAgaW50IHN0YXR1czsKKyAgICBQeV9zc2l6ZV90IHN0YXR1czsKKworICAgIGlmIChzdGF0ZS0+c3RhcnQgPT0gTlVMTCkKKyAgICAgICAgUHlfUkVUVVJOX05PTkU7CiAKICAgICBzdGF0ZV9yZXNldChzdGF0ZSk7CiAKICAgICBzdGF0ZS0+cHRyID0gc3RhdGUtPnN0YXJ0OwogCi0gICAgaWYgKHN0YXRlLT5sb2dpY2FsX2NoYXJzaXplID09IDEpIHsKLSAgICAgICAgc3RhdHVzID0gc3JlX3NlYXJjaChzdGF0ZSwgUGF0dGVybk9iamVjdF9HZXRDb2RlKHNlbGYtPnBhdHRlcm4pKTsKLSAgICB9IGVsc2UgewotICAgICAgICBzdGF0dXMgPSBzcmVfdXNlYXJjaChzdGF0ZSwgUGF0dGVybk9iamVjdF9HZXRDb2RlKHNlbGYtPnBhdHRlcm4pKTsKLSAgICB9CisgICAgc3RhdHVzID0gc3JlX3NlYXJjaChzdGF0ZSwgUGF0dGVybk9iamVjdF9HZXRDb2RlKHNlbGYtPnBhdHRlcm4pKTsKICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBtYXRjaCA9IHBhdHRlcm5fbmV3X21hdGNoKChQYXR0ZXJuT2JqZWN0Kikgc2VsZi0+cGF0dGVybiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSwgc3RhdHVzKTsKIAotICAgIGlmIChzdGF0dXMgPT0gMCB8fCBzdGF0ZS0+cHRyID09IHN0YXRlLT5zdGFydCkKKyAgICBpZiAoc3RhdHVzID09IDApCisgICAgICAgIHN0YXRlLT5zdGFydCA9IE5VTEw7CisgICAgZWxzZSBpZiAoc3RhdGUtPnB0ciAhPSBzdGF0ZS0+c3RhcnQpCisgICAgICAgIHN0YXRlLT5zdGFydCA9IHN0YXRlLT5wdHI7CisgICAgZWxzZSBpZiAoc3RhdGUtPnB0ciAhPSBzdGF0ZS0+ZW5kKQogICAgICAgICBzdGF0ZS0+c3RhcnQgPSAodm9pZCopICgoY2hhciopIHN0YXRlLT5wdHIgKyBzdGF0ZS0+Y2hhcnNpemUpOwogICAgIGVsc2UKLSAgICAgICAgc3RhdGUtPnN0YXJ0ID0gc3RhdGUtPnB0cjsKKyAgICAgICAgc3RhdGUtPnN0YXJ0ID0gTlVMTDsKIAogICAgIHJldHVybiBtYXRjaDsKIH0KQEAgLTQwMTMsNyArMjc3MSw1IEBACiAgICAgcmV0dXJuIG07CiB9CiAKLSNlbmRpZiAvKiAhZGVmaW5lZChTUkVfUkVDVVJTSVZFKSAqLwotCiAvKiB2aW06dHM9NDpzdz00OmV0CiAqLwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fc3NsLmMgYi9Nb2R1bGVzL19zc2wuYwppbmRleCA0OTllOGJhLi5kOTE4NjcxIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19zc2wuYworKysgYi9Nb2R1bGVzL19zc2wuYwpAQCAtMTQsNiArMTQsOCBAQAogICAgICAgIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWU4MTA4I21zZzEwMjg2NyA/CiAqLwogCisjZGVmaW5lIFBZX1NTSVpFX1RfQ0xFQU4KKwogI2luY2x1ZGUgIlB5dGhvbi5oIgogCiAjaWZkZWYgV0lUSF9USFJFQUQKQEAgLTQyLDYgKzQ0LDcwIEBACiAKICNlbmRpZgogCisvKiBJbmNsdWRlIHN5bWJvbHMgZnJvbSBfc29ja2V0IG1vZHVsZSAqLworI2luY2x1ZGUgInNvY2tldG1vZHVsZS5oIgorCitzdGF0aWMgUHlTb2NrZXRNb2R1bGVfQVBJT2JqZWN0IFB5U29ja2V0TW9kdWxlOworCisjaWYgZGVmaW5lZChIQVZFX1BPTExfSCkKKyNpbmNsdWRlIDxwb2xsLmg+CisjZWxpZiBkZWZpbmVkKEhBVkVfU1lTX1BPTExfSCkKKyNpbmNsdWRlIDxzeXMvcG9sbC5oPgorI2VuZGlmCisKKy8qIEluY2x1ZGUgT3BlblNTTCBoZWFkZXIgZmlsZXMgKi8KKyNpbmNsdWRlICJvcGVuc3NsL3JzYS5oIgorI2luY2x1ZGUgIm9wZW5zc2wvY3J5cHRvLmgiCisjaW5jbHVkZSAib3BlbnNzbC94NTA5LmgiCisjaW5jbHVkZSAib3BlbnNzbC94NTA5djMuaCIKKyNpbmNsdWRlICJvcGVuc3NsL3BlbS5oIgorI2luY2x1ZGUgIm9wZW5zc2wvc3NsLmgiCisjaW5jbHVkZSAib3BlbnNzbC9lcnIuaCIKKyNpbmNsdWRlICJvcGVuc3NsL3JhbmQuaCIKKworLyogU1NMIGVycm9yIG9iamVjdCAqLworc3RhdGljIFB5T2JqZWN0ICpQeVNTTEVycm9yT2JqZWN0Oworc3RhdGljIFB5T2JqZWN0ICpQeVNTTFplcm9SZXR1cm5FcnJvck9iamVjdDsKK3N0YXRpYyBQeU9iamVjdCAqUHlTU0xXYW50UmVhZEVycm9yT2JqZWN0Oworc3RhdGljIFB5T2JqZWN0ICpQeVNTTFdhbnRXcml0ZUVycm9yT2JqZWN0Oworc3RhdGljIFB5T2JqZWN0ICpQeVNTTFN5c2NhbGxFcnJvck9iamVjdDsKK3N0YXRpYyBQeU9iamVjdCAqUHlTU0xFT0ZFcnJvck9iamVjdDsKKworLyogRXJyb3IgbWFwcGluZ3MgKi8KK3N0YXRpYyBQeU9iamVjdCAqZXJyX2NvZGVzX3RvX25hbWVzOworc3RhdGljIFB5T2JqZWN0ICplcnJfbmFtZXNfdG9fY29kZXM7CitzdGF0aWMgUHlPYmplY3QgKmxpYl9jb2Rlc190b19uYW1lczsKKworc3RydWN0IHB5X3NzbF9lcnJvcl9jb2RlIHsKKyAgICBjb25zdCBjaGFyICptbmVtb25pYzsKKyAgICBpbnQgbGlicmFyeSwgcmVhc29uOworfTsKK3N0cnVjdCBweV9zc2xfbGlicmFyeV9jb2RlIHsKKyAgICBjb25zdCBjaGFyICpsaWJyYXJ5OworICAgIGludCBjb2RlOworfTsKKworLyogSW5jbHVkZSBnZW5lcmF0ZWQgZGF0YSAoZXJyb3IgY29kZXMpICovCisjaW5jbHVkZSAiX3NzbF9kYXRhLmgiCisKKy8qIE9wZW5zc2wgY29tZXMgd2l0aCBUTFN2MS4xIGFuZCBUTFN2MS4yIGJldHdlZW4gMS4wLjBoIGFuZCAxLjAuMQorICAgIGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvbmV3cy9jaGFuZ2Vsb2cuaHRtbAorICovCisjaWYgT1BFTlNTTF9WRVJTSU9OX05VTUJFUiA+PSAweDEwMDAxMDAwTAorIyBkZWZpbmUgSEFWRV9UTFN2MV8yIDEKKyNlbHNlCisjIGRlZmluZSBIQVZFX1RMU3YxXzIgMAorI2VuZGlmCisKKy8qIFNOSSBzdXBwb3J0IChjbGllbnQtIGFuZCBzZXJ2ZXItc2lkZSkgYXBwZWFyZWQgaW4gT3BlblNTTCAxLjAuMCBhbmQgMC45LjhmCisgKiBUaGlzIGluY2x1ZGVzIHRoZSBTU0xfc2V0X1NTTF9DVFgoKSBmdW5jdGlvbi4KKyAqLworI2lmZGVmIFNTTF9DVFJMX1NFVF9UTFNFWFRfSE9TVE5BTUUKKyMgZGVmaW5lIEhBVkVfU05JIDEKKyNlbHNlCisjIGRlZmluZSBIQVZFX1NOSSAwCisjZW5kaWYKKwogZW51bSBweV9zc2xfZXJyb3IgewogICAgIC8qIHRoZXNlIG1pcnJvciBzc2wuaCAqLwogICAgIFBZX1NTTF9FUlJPUl9OT05FLApAQCAtNzMsNTUgKzEzOSwxNCBAQAogICAgIFBZX1NTTF9WRVJTSU9OX1NTTDIsCiAgICAgUFlfU1NMX1ZFUlNJT05fU1NMMz0xLAogICAgIFBZX1NTTF9WRVJTSU9OX1NTTDIzLAorI2lmIEhBVkVfVExTdjFfMgorICAgIFBZX1NTTF9WRVJTSU9OX1RMUzEsCisgICAgUFlfU1NMX1ZFUlNJT05fVExTMV8xLAorICAgIFBZX1NTTF9WRVJTSU9OX1RMUzFfMgorI2Vsc2UKICAgICBQWV9TU0xfVkVSU0lPTl9UTFMxCi19OwotCi1zdHJ1Y3QgcHlfc3NsX2Vycm9yX2NvZGUgewotICAgIGNvbnN0IGNoYXIgKm1uZW1vbmljOwotICAgIGludCBsaWJyYXJ5LCByZWFzb247Ci19OwotCi1zdHJ1Y3QgcHlfc3NsX2xpYnJhcnlfY29kZSB7Ci0gICAgY29uc3QgY2hhciAqbGlicmFyeTsKLSAgICBpbnQgY29kZTsKLX07Ci0KLS8qIEluY2x1ZGUgc3ltYm9scyBmcm9tIF9zb2NrZXQgbW9kdWxlICovCi0jaW5jbHVkZSAic29ja2V0bW9kdWxlLmgiCi0KLXN0YXRpYyBQeVNvY2tldE1vZHVsZV9BUElPYmplY3QgUHlTb2NrZXRNb2R1bGU7Ci0KLSNpZiBkZWZpbmVkKEhBVkVfUE9MTF9IKQotI2luY2x1ZGUgPHBvbGwuaD4KLSNlbGlmIGRlZmluZWQoSEFWRV9TWVNfUE9MTF9IKQotI2luY2x1ZGUgPHN5cy9wb2xsLmg+CiAjZW5kaWYKLQotLyogSW5jbHVkZSBPcGVuU1NMIGhlYWRlciBmaWxlcyAqLwotI2luY2x1ZGUgIm9wZW5zc2wvcnNhLmgiCi0jaW5jbHVkZSAib3BlbnNzbC9jcnlwdG8uaCIKLSNpbmNsdWRlICJvcGVuc3NsL3g1MDkuaCIKLSNpbmNsdWRlICJvcGVuc3NsL3g1MDl2My5oIgotI2luY2x1ZGUgIm9wZW5zc2wvcGVtLmgiCi0jaW5jbHVkZSAib3BlbnNzbC9zc2wuaCIKLSNpbmNsdWRlICJvcGVuc3NsL2Vyci5oIgotI2luY2x1ZGUgIm9wZW5zc2wvcmFuZC5oIgotCi0vKiBJbmNsdWRlIGdlbmVyYXRlZCBkYXRhIChlcnJvciBjb2RlcykgKi8KLSNpbmNsdWRlICJfc3NsX2RhdGEuaCIKLQotLyogU1NMIGVycm9yIG9iamVjdCAqLwotc3RhdGljIFB5T2JqZWN0ICpQeVNTTEVycm9yT2JqZWN0Owotc3RhdGljIFB5T2JqZWN0ICpQeVNTTFplcm9SZXR1cm5FcnJvck9iamVjdDsKLXN0YXRpYyBQeU9iamVjdCAqUHlTU0xXYW50UmVhZEVycm9yT2JqZWN0Owotc3RhdGljIFB5T2JqZWN0ICpQeVNTTFdhbnRXcml0ZUVycm9yT2JqZWN0Owotc3RhdGljIFB5T2JqZWN0ICpQeVNTTFN5c2NhbGxFcnJvck9iamVjdDsKLXN0YXRpYyBQeU9iamVjdCAqUHlTU0xFT0ZFcnJvck9iamVjdDsKLQotLyogRXJyb3IgbWFwcGluZ3MgKi8KLXN0YXRpYyBQeU9iamVjdCAqZXJyX2NvZGVzX3RvX25hbWVzOwotc3RhdGljIFB5T2JqZWN0ICplcnJfbmFtZXNfdG9fY29kZXM7Ci1zdGF0aWMgUHlPYmplY3QgKmxpYl9jb2Rlc190b19uYW1lczsKK307CiAKICNpZmRlZiBXSVRIX1RIUkVBRAogCkBAIC0xNzMsNiArMTk4LDExIEBACiAjIGRlZmluZSBPUEVOU1NMX05PX0NPTVAKICNlbmRpZgogCisvKiBYNTA5X1ZFUklGWV9QQVJBTSBnb3QgYWRkZWQgdG8gT3BlblNTTCBpbiAwLjkuOCAqLworI2lmIE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIgPj0gMHgwMDkwODAwZkwKKyMgZGVmaW5lIEhBVkVfT1BFTlNTTF9WRVJJRllfUEFSQU0KKyNlbmRpZgorCiAKIHR5cGVkZWYgc3RydWN0IHsKICAgICBQeU9iamVjdF9IRUFECkBAIC0xODEsMTQgKzIxMSwyMCBAQAogICAgIGNoYXIgKm5wbl9wcm90b2NvbHM7CiAgICAgaW50IG5wbl9wcm90b2NvbHNfbGVuOwogI2VuZGlmCisjaWZuZGVmIE9QRU5TU0xfTk9fVExTRVhUCisgICAgUHlPYmplY3QgKnNldF9ob3N0bmFtZTsKKyNlbmRpZgorICAgIGludCBjaGVja19ob3N0bmFtZTsKIH0gUHlTU0xDb250ZXh0OwogCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgUHlPYmplY3RfSEVBRAogICAgIFB5T2JqZWN0ICpTb2NrZXQ7IC8qIHdlYWtyZWYgdG8gc29ja2V0IG9uIHdoaWNoIHdlJ3JlIGxheWVyZWQgKi8KICAgICBTU0wgKnNzbDsKKyAgICBQeVNTTENvbnRleHQgKmN0eDsgLyogd2Vha3JlZiB0byBTU0wgY29udGV4dCAqLwogICAgIFg1MDkgKnBlZXJfY2VydDsKLSAgICBpbnQgc2h1dGRvd25fc2Vlbl96ZXJvOworICAgIGNoYXIgc2h1dGRvd25fc2Vlbl96ZXJvOworICAgIGNoYXIgaGFuZHNoYWtlX2RvbmU7CiAgICAgZW51bSBweV9zc2xfc2VydmVyX29yX2NsaWVudCBzb2NrZXRfdHlwZTsKIH0gUHlTU0xTb2NrZXQ7CiAKQEAgLTMxNiwxNCArMzUyLDE4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYl9vYmosIGVycnN0ciwgbGluZW5vKTsKICAgICBlbHNlCiAgICAgICAgIG1zZyA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0KCIlcyAoX3NzbC5jOiVkKSIsIGVycnN0ciwgbGluZW5vKTsKLQogICAgIGlmIChtc2cgPT0gTlVMTCkKICAgICAgICAgZ290byBmYWlsOworCiAgICAgaW5pdF92YWx1ZSA9IFB5X0J1aWxkVmFsdWUoImlOIiwgc3NsX2Vycm5vLCBtc2cpOworICAgIGlmIChpbml0X3ZhbHVlID09IE5VTEwpCisgICAgICAgIGdvdG8gZmFpbDsKKwogICAgIGVycl92YWx1ZSA9IFB5T2JqZWN0X0NhbGxPYmplY3QodHlwZSwgaW5pdF92YWx1ZSk7CiAgICAgUHlfREVDUkVGKGluaXRfdmFsdWUpOwogICAgIGlmIChlcnJfdmFsdWUgPT0gTlVMTCkKICAgICAgICAgZ290byBmYWlsOworCiAgICAgaWYgKHJlYXNvbl9vYmogPT0gTlVMTCkKICAgICAgICAgcmVhc29uX29iaiA9IFB5X05vbmU7CiAgICAgaWYgKF9QeU9iamVjdF9TZXRBdHRySWQoZXJyX3ZhbHVlLCAmUHlJZF9yZWFzb24sIHJlYXNvbl9vYmopKQpAQCAtNDM3LDExICs0NzcsMTMgQEAKICAqLwogCiBzdGF0aWMgUHlTU0xTb2NrZXQgKgotbmV3UHlTU0xTb2NrZXQoU1NMX0NUWCAqY3R4LCBQeVNvY2tldFNvY2tPYmplY3QgKnNvY2ssCituZXdQeVNTTFNvY2tldChQeVNTTENvbnRleHQgKnNzbGN0eCwgUHlTb2NrZXRTb2NrT2JqZWN0ICpzb2NrLAogICAgICAgICAgICAgICAgZW51bSBweV9zc2xfc2VydmVyX29yX2NsaWVudCBzb2NrZXRfdHlwZSwKICAgICAgICAgICAgICAgIGNoYXIgKnNlcnZlcl9ob3N0bmFtZSkKIHsKICAgICBQeVNTTFNvY2tldCAqc2VsZjsKKyAgICBTU0xfQ1RYICpjdHggPSBzc2xjdHgtPmN0eDsKKyAgICBsb25nIG1vZGU7CiAKICAgICBzZWxmID0gUHlPYmplY3RfTmV3KFB5U1NMU29ja2V0LCAmUHlTU0xTb2NrZXRfVHlwZSk7CiAgICAgaWYgKHNlbGYgPT0gTlVMTCkKQEAgLTQ1MCw3ICs0OTIsMTAgQEAKICAgICBzZWxmLT5wZWVyX2NlcnQgPSBOVUxMOwogICAgIHNlbGYtPnNzbCA9IE5VTEw7CiAgICAgc2VsZi0+U29ja2V0ID0gTlVMTDsKKyAgICBzZWxmLT5jdHggPSBzc2xjdHg7CiAgICAgc2VsZi0+c2h1dGRvd25fc2Vlbl96ZXJvID0gMDsKKyAgICBzZWxmLT5oYW5kc2hha2VfZG9uZSA9IDA7CisgICAgUHlfSU5DUkVGKHNzbGN0eCk7CiAKICAgICAvKiBNYWtlIHN1cmUgdGhlIFNTTCBlcnJvciBzdGF0ZSBpcyBpbml0aWFsaXplZCAqLwogICAgICh2b2lkKSBFUlJfZ2V0X3N0YXRlKCk7CkBAIC00NTksMTIgKzUwNCwxNSBAQAogICAgIFB5U1NMX0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICBzZWxmLT5zc2wgPSBTU0xfbmV3KGN0eCk7CiAgICAgUHlTU0xfRU5EX0FMTE9XX1RIUkVBRFMKLSAgICBTU0xfc2V0X2ZkKHNlbGYtPnNzbCwgc29jay0+c29ja19mZCk7CisgICAgU1NMX3NldF9hcHBfZGF0YShzZWxmLT5zc2wsc2VsZik7CisgICAgU1NMX3NldF9mZChzZWxmLT5zc2wsIFB5X1NBRkVfRE9XTkNBU1Qoc29jay0+c29ja19mZCwgU09DS0VUX1QsIGludCkpOworICAgIG1vZGUgPSBTU0xfTU9ERV9BQ0NFUFRfTU9WSU5HX1dSSVRFX0JVRkZFUjsKICNpZmRlZiBTU0xfTU9ERV9BVVRPX1JFVFJZCi0gICAgU1NMX3NldF9tb2RlKHNlbGYtPnNzbCwgU1NMX01PREVfQVVUT19SRVRSWSk7CisgICAgbW9kZSB8PSBTU0xfTU9ERV9BVVRPX1JFVFJZOwogI2VuZGlmCisgICAgU1NMX3NldF9tb2RlKHNlbGYtPnNzbCwgbW9kZSk7CiAKLSNpZmRlZiBTU0xfQ1RSTF9TRVRfVExTRVhUX0hPU1ROQU1FCisjaWYgSEFWRV9TTkkKICAgICBpZiAoc2VydmVyX2hvc3RuYW1lICE9IE5VTEwpCiAgICAgICAgIFNTTF9zZXRfdGxzZXh0X2hvc3RfbmFtZShzZWxmLT5zc2wsIHNlcnZlcl9ob3N0bmFtZSk7CiAjZW5kaWYKQEAgLTQ4Niw2ICs1MzQsMTAgQEAKIAogICAgIHNlbGYtPnNvY2tldF90eXBlID0gc29ja2V0X3R5cGU7CiAgICAgc2VsZi0+U29ja2V0ID0gUHlXZWFrcmVmX05ld1JlZigoUHlPYmplY3QgKikgc29jaywgTlVMTCk7CisgICAgaWYgKHNlbGYtPlNvY2tldCA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRihzZWxmKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogICAgIHJldHVybiBzZWxmOwogfQogCkBAIC01NTIsNiArNjA0LDcgQEAKICAgICBQeVNTTF9CRUdJTl9BTExPV19USFJFQURTCiAgICAgc2VsZi0+cGVlcl9jZXJ0ID0gU1NMX2dldF9wZWVyX2NlcnRpZmljYXRlKHNlbGYtPnNzbCk7CiAgICAgUHlTU0xfRU5EX0FMTE9XX1RIUkVBRFMKKyAgICBzZWxmLT5oYW5kc2hha2VfZG9uZSA9IDE7CiAKICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CiAgICAgcmV0dXJuIFB5X05vbmU7CkBAIC05MTgsNiArOTcxLDEyNSBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgorX2dldF9haWFfdXJpKFg1MDkgKmNlcnRpZmljYXRlLCBpbnQgbmlkKSB7CisgICAgUHlPYmplY3QgKmxzdCA9IE5VTEwsICpvc3RyID0gTlVMTDsKKyAgICBpbnQgaSwgcmVzdWx0OworICAgIEFVVEhPUklUWV9JTkZPX0FDQ0VTUyAqaW5mbzsKKworICAgIGluZm8gPSBYNTA5X2dldF9leHRfZDJpKGNlcnRpZmljYXRlLCBOSURfaW5mb19hY2Nlc3MsIE5VTEwsIE5VTEwpOworICAgIGlmIChpbmZvID09IE5VTEwpCisgICAgICAgIHJldHVybiBQeV9Ob25lOworICAgIGlmIChza19BQ0NFU1NfREVTQ1JJUFRJT05fbnVtKGluZm8pID09IDApIHsKKyAgICAgICAgQVVUSE9SSVRZX0lORk9fQUNDRVNTX2ZyZWUoaW5mbyk7CisgICAgICAgIHJldHVybiBQeV9Ob25lOworICAgIH0KKworICAgIGlmICgobHN0ID0gUHlMaXN0X05ldygwKSkgPT0gTlVMTCkgeworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgZm9yIChpID0gMDsgaSA8IHNrX0FDQ0VTU19ERVNDUklQVElPTl9udW0oaW5mbyk7IGkrKykgeworICAgICAgICBBQ0NFU1NfREVTQ1JJUFRJT04gKmFkID0gc2tfQUNDRVNTX0RFU0NSSVBUSU9OX3ZhbHVlKGluZm8sIGkpOworICAgICAgICBBU04xX0lBNVNUUklORyAqdXJpOworCisgICAgICAgIGlmICgoT0JKX29iajJuaWQoYWQtPm1ldGhvZCkgIT0gbmlkKSB8fAorICAgICAgICAgICAgICAgIChhZC0+bG9jYXRpb24tPnR5cGUgIT0gR0VOX1VSSSkpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIHVyaSA9IGFkLT5sb2NhdGlvbi0+ZC51bmlmb3JtUmVzb3VyY2VJZGVudGlmaWVyOworICAgICAgICBvc3RyID0gUHlVbmljb2RlX0Zyb21TdHJpbmdBbmRTaXplKChjaGFyICopdXJpLT5kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVyaS0+bGVuZ3RoKTsKKyAgICAgICAgaWYgKG9zdHIgPT0gTlVMTCkgeworICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICB9CisgICAgICAgIHJlc3VsdCA9IFB5TGlzdF9BcHBlbmQobHN0LCBvc3RyKTsKKyAgICAgICAgUHlfREVDUkVGKG9zdHIpOworICAgICAgICBpZiAocmVzdWx0IDwgMCkgeworICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICB9CisgICAgfQorICAgIEFVVEhPUklUWV9JTkZPX0FDQ0VTU19mcmVlKGluZm8pOworCisgICAgLyogY29udmVydCB0byB0dXBsZSBvciBOb25lICovCisgICAgaWYgKFB5TGlzdF9TaXplKGxzdCkgPT0gMCkgeworICAgICAgICBQeV9ERUNSRUYobHN0KTsKKyAgICAgICAgcmV0dXJuIFB5X05vbmU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgUHlPYmplY3QgKnR1cDsKKyAgICAgICAgdHVwID0gUHlMaXN0X0FzVHVwbGUobHN0KTsKKyAgICAgICAgUHlfREVDUkVGKGxzdCk7CisgICAgICAgIHJldHVybiB0dXA7CisgICAgfQorCisgIGZhaWw6CisgICAgQVVUSE9SSVRZX0lORk9fQUNDRVNTX2ZyZWUoaW5mbyk7CisgICAgUHlfWERFQ1JFRihsc3QpOworICAgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorX2dldF9jcmxfZHAoWDUwOSAqY2VydGlmaWNhdGUpIHsKKyAgICBTVEFDS19PRihESVNUX1BPSU5UKSAqZHBzOworICAgIGludCBpLCBqOworICAgIFB5T2JqZWN0ICpsc3QsICpyZXMgPSBOVUxMOworCisjaWYgT1BFTlNTTF9WRVJTSU9OX05VTUJFUiA8IDB4MTAwMDEwMDBMCisgICAgZHBzID0gWDUwOV9nZXRfZXh0X2QyaShjZXJ0aWZpY2F0ZSwgTklEX2NybF9kaXN0cmlidXRpb25fcG9pbnRzLCBOVUxMLCBOVUxMKTsKKyNlbHNlCisgICAgLyogQ2FsbHMgeDUwOXYzX2NhY2hlX2V4dGVuc2lvbnMgYW5kIHNldHMgdXAgY3JsZHAgKi8KKyAgICBYNTA5X2NoZWNrX2NhKGNlcnRpZmljYXRlKTsKKyAgICBkcHMgPSBjZXJ0aWZpY2F0ZS0+Y3JsZHA7CisjZW5kaWYKKworICAgIGlmIChkcHMgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIFB5X05vbmU7CisKKyAgICBsc3QgPSBQeUxpc3RfTmV3KDApOworICAgIGlmIChsc3QgPT0gTlVMTCkKKyAgICAgICAgZ290byBkb25lOworCisgICAgZm9yIChpPTA7IGkgPCBza19ESVNUX1BPSU5UX251bShkcHMpOyBpKyspIHsKKyAgICAgICAgRElTVF9QT0lOVCAqZHA7CisgICAgICAgIFNUQUNLX09GKEdFTkVSQUxfTkFNRSkgKmduczsKKworICAgICAgICBkcCA9IHNrX0RJU1RfUE9JTlRfdmFsdWUoZHBzLCBpKTsKKyAgICAgICAgZ25zID0gZHAtPmRpc3Rwb2ludC0+bmFtZS5mdWxsbmFtZTsKKworICAgICAgICBmb3IgKGo9MDsgaiA8IHNrX0dFTkVSQUxfTkFNRV9udW0oZ25zKTsgaisrKSB7CisgICAgICAgICAgICBHRU5FUkFMX05BTUUgKmduOworICAgICAgICAgICAgQVNOMV9JQTVTVFJJTkcgKnVyaTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpvdXJpOworICAgICAgICAgICAgaW50IGVycjsKKworICAgICAgICAgICAgZ24gPSBza19HRU5FUkFMX05BTUVfdmFsdWUoZ25zLCBqKTsKKyAgICAgICAgICAgIGlmIChnbi0+dHlwZSAhPSBHRU5fVVJJKSB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB1cmkgPSBnbi0+ZC51bmlmb3JtUmVzb3VyY2VJZGVudGlmaWVyOworICAgICAgICAgICAgb3VyaSA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nQW5kU2l6ZSgoY2hhciAqKXVyaS0+ZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJpLT5sZW5ndGgpOworICAgICAgICAgICAgaWYgKG91cmkgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGRvbmU7CisKKyAgICAgICAgICAgIGVyciA9IFB5TGlzdF9BcHBlbmQobHN0LCBvdXJpKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihvdXJpKTsKKyAgICAgICAgICAgIGlmIChlcnIgPCAwKQorICAgICAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIENvbnZlcnQgdG8gdHVwbGUuICovCisgICAgcmVzID0gKFB5TGlzdF9HRVRfU0laRShsc3QpID4gMCkgPyBQeUxpc3RfQXNUdXBsZShsc3QpIDogUHlfTm9uZTsKKworICBkb25lOgorICAgIFB5X1hERUNSRUYobHN0KTsKKyNpZiBPUEVOU1NMX1ZFUlNJT05fTlVNQkVSIDwgMHgxMDAwMTAwMEwKKyAgICBza19ESVNUX1BPSU5UX2ZyZWUoZHBzKTsKKyNlbmRpZgorICAgIHJldHVybiByZXM7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCiBfZGVjb2RlX2NlcnRpZmljYXRlKFg1MDkgKmNlcnRpZmljYXRlKSB7CiAKICAgICBQeU9iamVjdCAqcmV0dmFsID0gTlVMTDsKQEAgLTkyNyw5ICsxMDk5LDEwIEBACiAgICAgUHlPYmplY3QgKmlzc3VlcjsKICAgICBQeU9iamVjdCAqdmVyc2lvbjsKICAgICBQeU9iamVjdCAqc25fb2JqOworICAgIFB5T2JqZWN0ICpvYmo7CiAgICAgQVNOMV9JTlRFR0VSICpzZXJpYWxOdW1iZXI7CiAgICAgY2hhciBidWZbMjA0OF07Ci0gICAgaW50IGxlbjsKKyAgICBpbnQgbGVuLCByZXN1bHQ7CiAgICAgQVNOMV9USU1FICpub3RCZWZvcmUsICpub3RBZnRlcjsKICAgICBQeU9iamVjdCAqcG5vdEJlZm9yZSwgKnBub3RBZnRlcjsKIApAQCAtMTAzNSw2ICsxMjA4LDQxIEBACiAgICAgICAgIFB5X0RFQ1JFRihwZWVyX2FsdF9uYW1lcyk7CiAgICAgfQogCisgICAgLyogQXV0aG9yaXR5IEluZm9ybWF0aW9uIEFjY2VzczogT0NTUCBVUklzICovCisgICAgb2JqID0gX2dldF9haWFfdXJpKGNlcnRpZmljYXRlLCBOSURfYWRfT0NTUCk7CisgICAgaWYgKG9iaiA9PSBOVUxMKSB7CisgICAgICAgIGdvdG8gZmFpbDE7CisgICAgfSBlbHNlIGlmIChvYmogIT0gUHlfTm9uZSkgeworICAgICAgICByZXN1bHQgPSBQeURpY3RfU2V0SXRlbVN0cmluZyhyZXR2YWwsICJPQ1NQIiwgb2JqKTsKKyAgICAgICAgUHlfREVDUkVGKG9iaik7CisgICAgICAgIGlmIChyZXN1bHQgPCAwKSB7CisgICAgICAgICAgICBnb3RvIGZhaWwxOworICAgICAgICB9CisgICAgfQorCisgICAgb2JqID0gX2dldF9haWFfdXJpKGNlcnRpZmljYXRlLCBOSURfYWRfY2FfaXNzdWVycyk7CisgICAgaWYgKG9iaiA9PSBOVUxMKSB7CisgICAgICAgIGdvdG8gZmFpbDE7CisgICAgfSBlbHNlIGlmIChvYmogIT0gUHlfTm9uZSkgeworICAgICAgICByZXN1bHQgPSBQeURpY3RfU2V0SXRlbVN0cmluZyhyZXR2YWwsICJjYUlzc3VlcnMiLCBvYmopOworICAgICAgICBQeV9ERUNSRUYob2JqKTsKKyAgICAgICAgaWYgKHJlc3VsdCA8IDApIHsKKyAgICAgICAgICAgIGdvdG8gZmFpbDE7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBDRFAgKENSTCBkaXN0cmlidXRpb24gcG9pbnRzKSAqLworICAgIG9iaiA9IF9nZXRfY3JsX2RwKGNlcnRpZmljYXRlKTsKKyAgICBpZiAob2JqID09IE5VTEwpIHsKKyAgICAgICAgZ290byBmYWlsMTsKKyAgICB9IGVsc2UgaWYgKG9iaiAhPSBQeV9Ob25lKSB7CisgICAgICAgIHJlc3VsdCA9IFB5RGljdF9TZXRJdGVtU3RyaW5nKHJldHZhbCwgImNybERpc3RyaWJ1dGlvblBvaW50cyIsIG9iaik7CisgICAgICAgIFB5X0RFQ1JFRihvYmopOworICAgICAgICBpZiAocmVzdWx0IDwgMCkgeworICAgICAgICAgICAgZ290byBmYWlsMTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIEJJT19mcmVlKGJpb2J1Zik7CiAgICAgcmV0dXJuIHJldHZhbDsKIApAQCAtMTA0Niw2ICsxMjU0LDI0IEBACiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKK3N0YXRpYyBQeU9iamVjdCAqCitfY2VydGlmaWNhdGVfdG9fZGVyKFg1MDkgKmNlcnRpZmljYXRlKQoreworICAgIHVuc2lnbmVkIGNoYXIgKmJ5dGVzX2J1ZiA9IE5VTEw7CisgICAgaW50IGxlbjsKKyAgICBQeU9iamVjdCAqcmV0dmFsOworCisgICAgYnl0ZXNfYnVmID0gTlVMTDsKKyAgICBsZW4gPSBpMmRfWDUwOShjZXJ0aWZpY2F0ZSwgJmJ5dGVzX2J1Zik7CisgICAgaWYgKGxlbiA8IDApIHsKKyAgICAgICAgX3NldFNTTEVycm9yKE5VTEwsIDAsIF9fRklMRV9fLCBfX0xJTkVfXyk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICAvKiB0aGlzIGlzIGFjdHVhbGx5IGFuIGltbXV0YWJsZSBieXRlcyBzZXF1ZW5jZSAqLworICAgIHJldHZhbCA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoKGNvbnN0IGNoYXIgKikgYnl0ZXNfYnVmLCBsZW4pOworICAgIE9QRU5TU0xfZnJlZShieXRlc19idWYpOworICAgIHJldHVybiByZXR2YWw7Cit9CiAKIHN0YXRpYyBQeU9iamVjdCAqCiBQeVNTTF90ZXN0X2RlY29kZV9jZXJ0aWZpY2F0ZSAoUHlPYmplY3QgKm1vZCwgUHlPYmplY3QgKmFyZ3MpIHsKQEAgLTEwOTEsMzQgKzEzMTcsMjMgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBQeVNTTF9wZWVyY2VydChQeVNTTFNvY2tldCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgUHlPYmplY3QgKnJldHZhbCA9IE5VTEw7Ci0gICAgaW50IGxlbjsKICAgICBpbnQgdmVyaWZpY2F0aW9uOwogICAgIGludCBiaW5hcnlfbW9kZSA9IDA7CiAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxwOnBlZXJfY2VydGlmaWNhdGUiLCAmYmluYXJ5X21vZGUpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAorICAgIGlmICghc2VsZi0+aGFuZHNoYWtlX2RvbmUpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiaGFuZHNoYWtlIG5vdCBkb25lIHlldCIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAgICAgaWYgKCFzZWxmLT5wZWVyX2NlcnQpCiAgICAgICAgIFB5X1JFVFVSTl9OT05FOwogCiAgICAgaWYgKGJpbmFyeV9tb2RlKSB7CiAgICAgICAgIC8qIHJldHVybiBjZXJ0IGluIERFUi1lbmNvZGVkIGZvcm1hdCAqLwotCi0gICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ5dGVzX2J1ZiA9IE5VTEw7Ci0KLSAgICAgICAgYnl0ZXNfYnVmID0gTlVMTDsKLSAgICAgICAgbGVuID0gaTJkX1g1MDkoc2VsZi0+cGVlcl9jZXJ0LCAmYnl0ZXNfYnVmKTsKLSAgICAgICAgaWYgKGxlbiA8IDApIHsKLSAgICAgICAgICAgIFB5U1NMX1NldEVycm9yKHNlbGYsIGxlbiwgX19GSUxFX18sIF9fTElORV9fKTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgICAgIC8qIHRoaXMgaXMgYWN0dWFsbHkgYW4gaW1tdXRhYmxlIGJ5dGVzIHNlcXVlbmNlICovCi0gICAgICAgIHJldHZhbCA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUKLSAgICAgICAgICAoKGNvbnN0IGNoYXIgKikgYnl0ZXNfYnVmLCBsZW4pOwotICAgICAgICBPUEVOU1NMX2ZyZWUoYnl0ZXNfYnVmKTsKLSAgICAgICAgcmV0dXJuIHJldHZhbDsKLQorICAgICAgICByZXR1cm4gX2NlcnRpZmljYXRlX3RvX2RlcihzZWxmLT5wZWVyX2NlcnQpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIHZlcmlmaWNhdGlvbiA9IFNTTF9DVFhfZ2V0X3ZlcmlmeV9tb2RlKFNTTF9nZXRfU1NMX0NUWChzZWxmLT5zc2wpKTsKICAgICAgICAgaWYgKCh2ZXJpZmljYXRpb24gJiBTU0xfVkVSSUZZX1BFRVIpID09IDApCkBAIC0xMjIxLDYgKzE0MzYsNDMgQEAKICNlbmRpZgogfQogCitzdGF0aWMgUHlTU0xDb250ZXh0ICpQeVNTTF9nZXRfY29udGV4dChQeVNTTFNvY2tldCAqc2VsZiwgdm9pZCAqY2xvc3VyZSkgeworICAgIFB5X0lOQ1JFRihzZWxmLT5jdHgpOworICAgIHJldHVybiBzZWxmLT5jdHg7Cit9CisKK3N0YXRpYyBpbnQgUHlTU0xfc2V0X2NvbnRleHQoUHlTU0xTb2NrZXQgKnNlbGYsIFB5T2JqZWN0ICp2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqY2xvc3VyZSkgeworCisgICAgaWYgKFB5T2JqZWN0X1R5cGVDaGVjayh2YWx1ZSwgJlB5U1NMQ29udGV4dF9UeXBlKSkgeworI2lmICFIQVZFX1NOSQorICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfTm90SW1wbGVtZW50ZWRFcnJvciwgInNldHRpbmcgYSBzb2NrZXQncyAiCisgICAgICAgICAgICAgICAgICAgICAgICAiY29udGV4dCBpcyBub3Qgc3VwcG9ydGVkIGJ5IHlvdXIgT3BlblNTTCBsaWJyYXJ5Iik7CisgICAgICAgIHJldHVybiAtMTsKKyNlbHNlCisgICAgICAgIFB5X0lOQ1JFRih2YWx1ZSk7CisgICAgICAgIFB5X0RFQ1JFRihzZWxmLT5jdHgpOworICAgICAgICBzZWxmLT5jdHggPSAoUHlTU0xDb250ZXh0ICopIHZhbHVlOworICAgICAgICBTU0xfc2V0X1NTTF9DVFgoc2VsZi0+c3NsLCBzZWxmLT5jdHgtPmN0eCk7CisjZW5kaWYKKyAgICB9IGVsc2UgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAiVGhlIHZhbHVlIG11c3QgYmUgYSBTU0xDb250ZXh0Iik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworUHlEb2NfU1RSVkFSKFB5U1NMX3NldF9jb250ZXh0X2RvYywKKyJfc2V0dGVyX2NvbnRleHQoY3R4KVxuXAorXAorVGhpcyBjaGFuZ2VzIHRoZSBjb250ZXh0IGFzc29jaWF0ZWQgd2l0aCB0aGUgU1NMU29ja2V0LiBUaGlzIGlzIHR5cGljYWxseVxuXAordXNlZCBmcm9tIHdpdGhpbiBhIGNhbGxiYWNrIGZ1bmN0aW9uIHNldCBieSB0aGUgc2V0X3NlcnZlcm5hbWVfY2FsbGJhY2tcblwKK29uIHRoZSBTU0xDb250ZXh0IHRvIGNoYW5nZSB0aGUgY2VydGlmaWNhdGUgaW5mb3JtYXRpb24gYXNzb2NpYXRlZCB3aXRoIHRoZVxuXAorU1NMU29ja2V0IGJlZm9yZSB0aGUgY3J5cHRvZ3JhcGhpYyBleGNoYW5nZSBoYW5kc2hha2UgbWVzc2FnZXNcbiIpOworCisKKwogc3RhdGljIHZvaWQgUHlTU0xfZGVhbGxvYyhQeVNTTFNvY2tldCAqc2VsZikKIHsKICAgICBpZiAoc2VsZi0+cGVlcl9jZXJ0KSAgICAgICAgLyogUG9zc2libGUgbm90IHRvIGhhdmUgb25lPyAqLwpAQCAtMTIyOCw2ICsxNDgwLDcgQEAKICAgICBpZiAoc2VsZi0+c3NsKQogICAgICAgICBTU0xfZnJlZShzZWxmLT5zc2wpOwogICAgIFB5X1hERUNSRUYoc2VsZi0+U29ja2V0KTsKKyAgICBQeV9YREVDUkVGKHNlbGYtPmN0eCk7CiAgICAgUHlPYmplY3RfRGVsKHNlbGYpOwogfQogCkBAIC0xMjg2LDkgKzE1MzksMTEgQEAKICAgICAvKiBTZWUgaWYgdGhlIHNvY2tldCBpcyByZWFkeSAqLwogICAgIFB5U1NMX0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICBpZiAod3JpdGluZykKLSAgICAgICAgcmMgPSBzZWxlY3Qocy0+c29ja19mZCsxLCBOVUxMLCAmZmRzLCBOVUxMLCAmdHYpOworICAgICAgICByYyA9IHNlbGVjdChQeV9TQUZFX0RPV05DQVNUKHMtPnNvY2tfZmQrMSwgU09DS0VUX1QsIGludCksCisgICAgICAgICAgICAgICAgICAgIE5VTEwsICZmZHMsIE5VTEwsICZ0dik7CiAgICAgZWxzZQotICAgICAgICByYyA9IHNlbGVjdChzLT5zb2NrX2ZkKzEsICZmZHMsIE5VTEwsIE5VTEwsICZ0dik7CisgICAgICAgIHJjID0gc2VsZWN0KFB5X1NBRkVfRE9XTkNBU1Qocy0+c29ja19mZCsxLCBTT0NLRVRfVCwgaW50KSwKKyAgICAgICAgICAgICAgICAgICAgJmZkcywgTlVMTCwgTlVMTCwgJnR2KTsKICAgICBQeVNTTF9FTkRfQUxMT1dfVEhSRUFEUwogCiAjaWZkZWYgSEFWRV9QT0xMCkBAIC0xNDYxLDI2ICsxNzE2LDYgQEAKICAgICBCSU9fc2V0X25iaW8oU1NMX2dldF9yYmlvKHNlbGYtPnNzbCksIG5vbmJsb2NraW5nKTsKICAgICBCSU9fc2V0X25iaW8oU1NMX2dldF93YmlvKHNlbGYtPnNzbCksIG5vbmJsb2NraW5nKTsKIAotICAgIC8qIGZpcnN0IGNoZWNrIGlmIHRoZXJlIGFyZSBieXRlcyByZWFkeSB0byBiZSByZWFkICovCi0gICAgUHlTU0xfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgIGNvdW50ID0gU1NMX3BlbmRpbmcoc2VsZi0+c3NsKTsKLSAgICBQeVNTTF9FTkRfQUxMT1dfVEhSRUFEUwotCi0gICAgaWYgKCFjb3VudCkgewotICAgICAgICBzb2Nrc3RhdGUgPSBjaGVja19zb2NrZXRfYW5kX3dhaXRfZm9yX3RpbWVvdXQoc29jaywgMCk7Ci0gICAgICAgIGlmIChzb2Nrc3RhdGUgPT0gU09DS0VUX0hBU19USU1FRF9PVVQpIHsKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeVNvY2tldE1vZHVsZS50aW1lb3V0X2Vycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUaGUgcmVhZCBvcGVyYXRpb24gdGltZWQgb3V0Iik7Ci0gICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICB9IGVsc2UgaWYgKHNvY2tzdGF0ZSA9PSBTT0NLRVRfVE9PX0xBUkdFX0ZPUl9TRUxFQ1QpIHsKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeVNTTEVycm9yT2JqZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJVbmRlcmx5aW5nIHNvY2tldCB0b28gbGFyZ2UgZm9yIHNlbGVjdCgpLiIpOwotICAgICAgICAgICAgZ290byBlcnJvcjsKLSAgICAgICAgfSBlbHNlIGlmIChzb2Nrc3RhdGUgPT0gU09DS0VUX0hBU19CRUVOX0NMT1NFRCkgewotICAgICAgICAgICAgY291bnQgPSAwOwotICAgICAgICAgICAgZ290byBkb25lOwotICAgICAgICB9Ci0gICAgfQogICAgIGRvIHsKICAgICAgICAgUHlTU0xfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgICAgICBjb3VudCA9IFNTTF9yZWFkKHNlbGYtPnNzbCwgbWVtLCBsZW4pOwpAQCAtMTY2OCw2ICsxOTAzLDEyIEBACiAKICNlbmRpZiAvKiBIQVZFX09QRU5TU0xfRklOSVNIRUQgKi8KIAorc3RhdGljIFB5R2V0U2V0RGVmIHNzbF9nZXRzZXRsaXN0W10gPSB7CisgICAgeyJjb250ZXh0IiwgKGdldHRlcikgUHlTU0xfZ2V0X2NvbnRleHQsCisgICAgICAgICAgICAgICAgKHNldHRlcikgUHlTU0xfc2V0X2NvbnRleHQsIFB5U1NMX3NldF9jb250ZXh0X2RvY30sCisgICAge05VTEx9LCAgICAgICAgICAgIC8qIHNlbnRpbmVsICovCit9OworCiBzdGF0aWMgUHlNZXRob2REZWYgUHlTU0xNZXRob2RzW10gPSB7CiAgICAgeyJkb19oYW5kc2hha2UiLCAoUHlDRnVuY3Rpb24pUHlTU0xfU1NMZG9faGFuZHNoYWtlLCBNRVRIX05PQVJHU30sCiAgICAgeyJ3cml0ZSIsIChQeUNGdW5jdGlvbilQeVNTTF9TU0x3cml0ZSwgTUVUSF9WQVJBUkdTLApAQCAtMTcyMiw2ICsxOTYzLDggQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2l0ZXIqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaXRlcm5leHQqLwogICAgIFB5U1NMTWV0aG9kcywgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfbWV0aG9kcyovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9tZW1iZXJzKi8KKyAgICBzc2xfZ2V0c2V0bGlzdCwgICAgICAgICAgICAgICAgICAgICAvKnRwX2dldHNldCovCiB9OwogCiAKQEAgLTE3NDYsOCArMTk4OSwxNiBAQAogICAgIFB5U1NMX0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICBpZiAocHJvdG9fdmVyc2lvbiA9PSBQWV9TU0xfVkVSU0lPTl9UTFMxKQogICAgICAgICBjdHggPSBTU0xfQ1RYX25ldyhUTFN2MV9tZXRob2QoKSk7CisjaWYgSEFWRV9UTFN2MV8yCisgICAgZWxzZSBpZiAocHJvdG9fdmVyc2lvbiA9PSBQWV9TU0xfVkVSU0lPTl9UTFMxXzEpCisgICAgICAgIGN0eCA9IFNTTF9DVFhfbmV3KFRMU3YxXzFfbWV0aG9kKCkpOworICAgIGVsc2UgaWYgKHByb3RvX3ZlcnNpb24gPT0gUFlfU1NMX1ZFUlNJT05fVExTMV8yKQorICAgICAgICBjdHggPSBTU0xfQ1RYX25ldyhUTFN2MV8yX21ldGhvZCgpKTsKKyNlbmRpZgorI2lmbmRlZiBPUEVOU1NMX05PX1NTTDMKICAgICBlbHNlIGlmIChwcm90b192ZXJzaW9uID09IFBZX1NTTF9WRVJTSU9OX1NTTDMpCiAgICAgICAgIGN0eCA9IFNTTF9DVFhfbmV3KFNTTHYzX21ldGhvZCgpKTsKKyNlbmRpZgogI2lmbmRlZiBPUEVOU1NMX05PX1NTTDIKICAgICBlbHNlIGlmIChwcm90b192ZXJzaW9uID09IFBZX1NTTF9WRVJTSU9OX1NTTDIpCiAgICAgICAgIGN0eCA9IFNTTF9DVFhfbmV3KFNTTHYyX21ldGhvZCgpKTsKQEAgLTE3NzksMjQgKzIwMzAsNzQgQEAKICNpZmRlZiBPUEVOU1NMX05QTl9ORUdPVElBVEVECiAgICAgc2VsZi0+bnBuX3Byb3RvY29scyA9IE5VTEw7CiAjZW5kaWYKKyNpZm5kZWYgT1BFTlNTTF9OT19UTFNFWFQKKyAgICBzZWxmLT5zZXRfaG9zdG5hbWUgPSBOVUxMOworI2VuZGlmCisgICAgLyogRG9uJ3QgY2hlY2sgaG9zdCBuYW1lIGJ5IGRlZmF1bHQgKi8KKyAgICBzZWxmLT5jaGVja19ob3N0bmFtZSA9IDA7CiAgICAgLyogRGVmYXVsdHMgKi8KICAgICBTU0xfQ1RYX3NldF92ZXJpZnkoc2VsZi0+Y3R4LCBTU0xfVkVSSUZZX05PTkUsIE5VTEwpOwogICAgIG9wdGlvbnMgPSBTU0xfT1BfQUxMICYgflNTTF9PUF9ET05UX0lOU0VSVF9FTVBUWV9GUkFHTUVOVFM7CiAgICAgaWYgKHByb3RvX3ZlcnNpb24gIT0gUFlfU1NMX1ZFUlNJT05fU1NMMikKICAgICAgICAgb3B0aW9ucyB8PSBTU0xfT1BfTk9fU1NMdjI7CisgICAgaWYgKHByb3RvX3ZlcnNpb24gIT0gUFlfU1NMX1ZFUlNJT05fU1NMMykKKyAgICAgICAgb3B0aW9ucyB8PSBTU0xfT1BfTk9fU1NMdjM7CiAgICAgU1NMX0NUWF9zZXRfb3B0aW9ucyhzZWxmLT5jdHgsIG9wdGlvbnMpOwogCisjaWZuZGVmIE9QRU5TU0xfTk9fRUNESAorICAgIC8qIEFsbG93IGF1dG9tYXRpYyBFQ0RIIGN1cnZlIHNlbGVjdGlvbiAob24gT3BlblNTTCAxLjAuMispLCBvciB1c2UKKyAgICAgICBwcmltZTI1NnYxIGJ5IGRlZmF1bHQuICBUaGlzIGlzIEFwYWNoZSBtb2Rfc3NsJ3MgaW5pdGlhbGl6YXRpb24KKyAgICAgICBwb2xpY3ksIHNvIHdlIHNob3VsZCBiZSBzYWZlLiAqLworI2lmIGRlZmluZWQoU1NMX0NUWF9zZXRfZWNkaF9hdXRvKQorICAgIFNTTF9DVFhfc2V0X2VjZGhfYXV0byhzZWxmLT5jdHgsIDEpOworI2Vsc2UKKyAgICB7CisgICAgICAgIEVDX0tFWSAqa2V5ID0gRUNfS0VZX25ld19ieV9jdXJ2ZV9uYW1lKE5JRF9YOV82Ml9wcmltZTI1NnYxKTsKKyAgICAgICAgU1NMX0NUWF9zZXRfdG1wX2VjZGgoc2VsZi0+Y3R4LCBrZXkpOworICAgICAgICBFQ19LRVlfZnJlZShrZXkpOworICAgIH0KKyNlbmRpZgorI2VuZGlmCisKICNkZWZpbmUgU0lEX0NUWCAiUHl0aG9uIgogICAgIFNTTF9DVFhfc2V0X3Nlc3Npb25faWRfY29udGV4dChzZWxmLT5jdHgsIChjb25zdCB1bnNpZ25lZCBjaGFyICopIFNJRF9DVFgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihTSURfQ1RYKSk7CiAjdW5kZWYgU0lEX0NUWAogCisjaWZkZWYgWDUwOV9WX0ZMQUdfVFJVU1RFRF9GSVJTVAorICAgIHsKKyAgICAgICAgLyogSW1wcm92ZSB0cnVzdCBjaGFpbiBidWlsZGluZyB3aGVuIGNyb3NzLXNpZ25lZCBpbnRlcm1lZGlhdGUKKyAgICAgICAgICAgY2VydGlmaWNhdGVzIGFyZSBwcmVzZW50LiBTZWUgaHR0cHM6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUyMzQ3Ni4gKi8KKyAgICAgICAgWDUwOV9TVE9SRSAqc3RvcmUgPSBTU0xfQ1RYX2dldF9jZXJ0X3N0b3JlKHNlbGYtPmN0eCk7CisgICAgICAgIFg1MDlfU1RPUkVfc2V0X2ZsYWdzKHN0b3JlLCBYNTA5X1ZfRkxBR19UUlVTVEVEX0ZJUlNUKTsKKyAgICB9CisjZW5kaWYKKwogICAgIHJldHVybiAoUHlPYmplY3QgKilzZWxmOwogfQogCitzdGF0aWMgaW50Citjb250ZXh0X3RyYXZlcnNlKFB5U1NMQ29udGV4dCAqc2VsZiwgdmlzaXRwcm9jIHZpc2l0LCB2b2lkICphcmcpCit7CisjaWZuZGVmIE9QRU5TU0xfTk9fVExTRVhUCisgICAgUHlfVklTSVQoc2VsZi0+c2V0X2hvc3RuYW1lKTsKKyNlbmRpZgorICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50Citjb250ZXh0X2NsZWFyKFB5U1NMQ29udGV4dCAqc2VsZikKK3sKKyNpZm5kZWYgT1BFTlNTTF9OT19UTFNFWFQKKyAgICBQeV9DTEVBUihzZWxmLT5zZXRfaG9zdG5hbWUpOworI2VuZGlmCisgICAgcmV0dXJuIDA7Cit9CisKIHN0YXRpYyB2b2lkCiBjb250ZXh0X2RlYWxsb2MoUHlTU0xDb250ZXh0ICpzZWxmKQogeworICAgIGNvbnRleHRfY2xlYXIoc2VsZik7CiAgICAgU1NMX0NUWF9mcmVlKHNlbGYtPmN0eCk7CiAjaWZkZWYgT1BFTlNTTF9OUE5fTkVHT1RJQVRFRAogICAgIFB5TWVtX0ZyZWUoc2VsZi0+bnBuX3Byb3RvY29scyk7CkBAIC0xOTQzLDEwICsyMjQ0LDU2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAiaW52YWxpZCB2YWx1ZSBmb3IgdmVyaWZ5X21vZGUiKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KKyAgICBpZiAobW9kZSA9PSBTU0xfVkVSSUZZX05PTkUgJiYgc2VsZi0+Y2hlY2tfaG9zdG5hbWUpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiQ2Fubm90IHNldCB2ZXJpZnlfbW9kZSB0byBDRVJUX05PTkUgd2hlbiAiCisgICAgICAgICAgICAgICAgICAgICAgICAiY2hlY2tfaG9zdG5hbWUgaXMgZW5hYmxlZC4iKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KICAgICBTU0xfQ1RYX3NldF92ZXJpZnkoc2VsZi0+Y3R4LCBtb2RlLCBOVUxMKTsKICAgICByZXR1cm4gMDsKIH0KIAorI2lmZGVmIEhBVkVfT1BFTlNTTF9WRVJJRllfUEFSQU0KK3N0YXRpYyBQeU9iamVjdCAqCitnZXRfdmVyaWZ5X2ZsYWdzKFB5U1NMQ29udGV4dCAqc2VsZiwgdm9pZCAqYykKK3sKKyAgICBYNTA5X1NUT1JFICpzdG9yZTsKKyAgICB1bnNpZ25lZCBsb25nIGZsYWdzOworCisgICAgc3RvcmUgPSBTU0xfQ1RYX2dldF9jZXJ0X3N0b3JlKHNlbGYtPmN0eCk7CisgICAgZmxhZ3MgPSBYNTA5X1ZFUklGWV9QQVJBTV9nZXRfZmxhZ3Moc3RvcmUtPnBhcmFtKTsKKyAgICByZXR1cm4gUHlMb25nX0Zyb21VbnNpZ25lZExvbmcoZmxhZ3MpOworfQorCitzdGF0aWMgaW50CitzZXRfdmVyaWZ5X2ZsYWdzKFB5U1NMQ29udGV4dCAqc2VsZiwgUHlPYmplY3QgKmFyZywgdm9pZCAqYykKK3sKKyAgICBYNTA5X1NUT1JFICpzdG9yZTsKKyAgICB1bnNpZ25lZCBsb25nIG5ld19mbGFncywgZmxhZ3MsIHNldCwgY2xlYXI7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlKGFyZywgImsiLCAmbmV3X2ZsYWdzKSkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIHN0b3JlID0gU1NMX0NUWF9nZXRfY2VydF9zdG9yZShzZWxmLT5jdHgpOworICAgIGZsYWdzID0gWDUwOV9WRVJJRllfUEFSQU1fZ2V0X2ZsYWdzKHN0b3JlLT5wYXJhbSk7CisgICAgY2xlYXIgPSBmbGFncyAmIH5uZXdfZmxhZ3M7CisgICAgc2V0ID0gfmZsYWdzICYgbmV3X2ZsYWdzOworICAgIGlmIChjbGVhcikgeworICAgICAgICBpZiAoIVg1MDlfVkVSSUZZX1BBUkFNX2NsZWFyX2ZsYWdzKHN0b3JlLT5wYXJhbSwgY2xlYXIpKSB7CisgICAgICAgICAgICBfc2V0U1NMRXJyb3IoTlVMTCwgMCwgX19GSUxFX18sIF9fTElORV9fKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoc2V0KSB7CisgICAgICAgIGlmICghWDUwOV9WRVJJRllfUEFSQU1fc2V0X2ZsYWdzKHN0b3JlLT5wYXJhbSwgc2V0KSkgeworICAgICAgICAgICAgX3NldFNTTEVycm9yKE5VTEwsIDAsIF9fRklMRV9fLCBfX0xJTkVfXyk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisjZW5kaWYKKwogc3RhdGljIFB5T2JqZWN0ICoKIGdldF9vcHRpb25zKFB5U1NMQ29udGV4dCAqc2VsZiwgdm9pZCAqYykKIHsKQEAgLTE5NzYsNiArMjMyMywzMCBAQAogICAgIHJldHVybiAwOwogfQogCitzdGF0aWMgUHlPYmplY3QgKgorZ2V0X2NoZWNrX2hvc3RuYW1lKFB5U1NMQ29udGV4dCAqc2VsZiwgdm9pZCAqYykKK3sKKyAgICByZXR1cm4gUHlCb29sX0Zyb21Mb25nKHNlbGYtPmNoZWNrX2hvc3RuYW1lKTsKK30KKworc3RhdGljIGludAorc2V0X2NoZWNrX2hvc3RuYW1lKFB5U1NMQ29udGV4dCAqc2VsZiwgUHlPYmplY3QgKmFyZywgdm9pZCAqYykKK3sKKyAgICBpbnQgY2hlY2tfaG9zdG5hbWU7CisgICAgaWYgKCFQeUFyZ19QYXJzZShhcmcsICJwIiwgJmNoZWNrX2hvc3RuYW1lKSkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIGlmIChjaGVja19ob3N0bmFtZSAmJgorICAgICAgICAgICAgU1NMX0NUWF9nZXRfdmVyaWZ5X21vZGUoc2VsZi0+Y3R4KSA9PSBTU0xfVkVSSUZZX05PTkUpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiY2hlY2tfaG9zdG5hbWUgbmVlZHMgYSBTU0wgY29udGV4dCB3aXRoIGVpdGhlciAiCisgICAgICAgICAgICAgICAgICAgICAgICAiQ0VSVF9PUFRJT05BTCBvciBDRVJUX1JFUVVJUkVEIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgc2VsZi0+Y2hlY2tfaG9zdG5hbWUgPSBjaGVja19ob3N0bmFtZTsKKyAgICByZXR1cm4gMDsKK30KKworCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgUHlUaHJlYWRTdGF0ZSAqdGhyZWFkX3N0YXRlOwogICAgIFB5T2JqZWN0ICpjYWxsYWJsZTsKQEAgLTIwMjAsOCArMjM5MSw4IEBACiAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQogCi0gICAgZnJlZShwd19pbmZvLT5wYXNzd29yZCk7Ci0gICAgcHdfaW5mby0+cGFzc3dvcmQgPSBtYWxsb2Moc2l6ZSk7CisgICAgUHlNZW1fRnJlZShwd19pbmZvLT5wYXNzd29yZCk7CisgICAgcHdfaW5mby0+cGFzc3dvcmQgPSBQeU1lbV9NYWxsb2Moc2l6ZSk7CiAgICAgaWYgKCFwd19pbmZvLT5wYXNzd29yZCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfTWVtb3J5RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAidW5hYmxlIHRvIGFsbG9jYXRlIHBhc3N3b3JkIGJ1ZmZlciIpOwpAQCAtMjE2NSw3MiArMjUzNiwyMTIgQEAKICAgICB9CiAgICAgU1NMX0NUWF9zZXRfZGVmYXVsdF9wYXNzd2RfY2Ioc2VsZi0+Y3R4LCBvcmlnX3Bhc3N3ZF9jYik7CiAgICAgU1NMX0NUWF9zZXRfZGVmYXVsdF9wYXNzd2RfY2JfdXNlcmRhdGEoc2VsZi0+Y3R4LCBvcmlnX3Bhc3N3ZF91c2VyZGF0YSk7Ci0gICAgZnJlZShwd19pbmZvLnBhc3N3b3JkKTsKKyAgICBQeU1lbV9GcmVlKHB3X2luZm8ucGFzc3dvcmQpOwogICAgIFB5X1JFVFVSTl9OT05FOwogCiBlcnJvcjoKICAgICBTU0xfQ1RYX3NldF9kZWZhdWx0X3Bhc3N3ZF9jYihzZWxmLT5jdHgsIG9yaWdfcGFzc3dkX2NiKTsKICAgICBTU0xfQ1RYX3NldF9kZWZhdWx0X3Bhc3N3ZF9jYl91c2VyZGF0YShzZWxmLT5jdHgsIG9yaWdfcGFzc3dkX3VzZXJkYXRhKTsKLSAgICBmcmVlKHB3X2luZm8ucGFzc3dvcmQpOworICAgIFB5TWVtX0ZyZWUocHdfaW5mby5wYXNzd29yZCk7CiAgICAgUHlfWERFQ1JFRihrZXlmaWxlX2J5dGVzKTsKICAgICBQeV9YREVDUkVGKGNlcnRmaWxlX2J5dGVzKTsKICAgICByZXR1cm4gTlVMTDsKIH0KIAorLyogaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9uLCByZXR1cm5zIC0xIG9uIGVycm9yCisgKi8KK3N0YXRpYyBpbnQKK19hZGRfY2FfY2VydHMoUHlTU0xDb250ZXh0ICpzZWxmLCB2b2lkICpkYXRhLCBQeV9zc2l6ZV90IGxlbiwKKyAgICAgICAgICAgICAgaW50IGZpbGV0eXBlKQoreworICAgIEJJTyAqYmlvYnVmID0gTlVMTDsKKyAgICBYNTA5X1NUT1JFICpzdG9yZTsKKyAgICBpbnQgcmV0dmFsID0gMCwgZXJyLCBsb2FkZWQgPSAwOworCisgICAgYXNzZXJ0KGZpbGV0eXBlID09IFNTTF9GSUxFVFlQRV9BU04xIHx8IGZpbGV0eXBlID09IFNTTF9GSUxFVFlQRV9QRU0pOworCisgICAgaWYgKGxlbiA8PSAwKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgIkVtcHR5IGNlcnRpZmljYXRlIGRhdGEiKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0gZWxzZSBpZiAobGVuID4gSU5UX01BWCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJDZXJ0aWZpY2F0ZSBkYXRhIGlzIHRvbyBsb25nLiIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgYmlvYnVmID0gQklPX25ld19tZW1fYnVmKGRhdGEsIChpbnQpbGVuKTsKKyAgICBpZiAoYmlvYnVmID09IE5VTEwpIHsKKyAgICAgICAgX3NldFNTTEVycm9yKCJDYW4ndCBhbGxvY2F0ZSBidWZmZXIiLCAwLCBfX0ZJTEVfXywgX19MSU5FX18pOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgc3RvcmUgPSBTU0xfQ1RYX2dldF9jZXJ0X3N0b3JlKHNlbGYtPmN0eCk7CisgICAgYXNzZXJ0KHN0b3JlICE9IE5VTEwpOworCisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgWDUwOSAqY2VydCA9IE5VTEw7CisgICAgICAgIGludCByOworCisgICAgICAgIGlmIChmaWxldHlwZSA9PSBTU0xfRklMRVRZUEVfQVNOMSkgeworICAgICAgICAgICAgY2VydCA9IGQyaV9YNTA5X2JpbyhiaW9idWYsIE5VTEwpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgY2VydCA9IFBFTV9yZWFkX2Jpb19YNTA5KGJpb2J1ZiwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLT5jdHgtPmRlZmF1bHRfcGFzc3dkX2NhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYtPmN0eC0+ZGVmYXVsdF9wYXNzd2RfY2FsbGJhY2tfdXNlcmRhdGEpOworICAgICAgICB9CisgICAgICAgIGlmIChjZXJ0ID09IE5VTEwpIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHIgPSBYNTA5X1NUT1JFX2FkZF9jZXJ0KHN0b3JlLCBjZXJ0KTsKKyAgICAgICAgWDUwOV9mcmVlKGNlcnQpOworICAgICAgICBpZiAoIXIpIHsKKyAgICAgICAgICAgIGVyciA9IEVSUl9wZWVrX2xhc3RfZXJyb3IoKTsKKyAgICAgICAgICAgIGlmICgoRVJSX0dFVF9MSUIoZXJyKSA9PSBFUlJfTElCX1g1MDkpICYmCisgICAgICAgICAgICAgICAgKEVSUl9HRVRfUkVBU09OKGVycikgPT0gWDUwOV9SX0NFUlRfQUxSRUFEWV9JTl9IQVNIX1RBQkxFKSkgeworICAgICAgICAgICAgICAgIC8qIGNlcnQgYWxyZWFkeSBpbiBoYXNoIHRhYmxlLCBub3QgYW4gZXJyb3IgKi8KKyAgICAgICAgICAgICAgICBFUlJfY2xlYXJfZXJyb3IoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgbG9hZGVkKys7CisgICAgfQorCisgICAgZXJyID0gRVJSX3BlZWtfbGFzdF9lcnJvcigpOworICAgIGlmICgoZmlsZXR5cGUgPT0gU1NMX0ZJTEVUWVBFX0FTTjEpICYmCisgICAgICAgICAgICAobG9hZGVkID4gMCkgJiYKKyAgICAgICAgICAgIChFUlJfR0VUX0xJQihlcnIpID09IEVSUl9MSUJfQVNOMSkgJiYKKyAgICAgICAgICAgIChFUlJfR0VUX1JFQVNPTihlcnIpID09IEFTTjFfUl9IRUFERVJfVE9PX0xPTkcpKSB7CisgICAgICAgIC8qIEVPRiBBU04xIGZpbGUsIG5vdCBhbiBlcnJvciAqLworICAgICAgICBFUlJfY2xlYXJfZXJyb3IoKTsKKyAgICAgICAgcmV0dmFsID0gMDsKKyAgICB9IGVsc2UgaWYgKChmaWxldHlwZSA9PSBTU0xfRklMRVRZUEVfUEVNKSAmJgorICAgICAgICAgICAgICAgICAgIChsb2FkZWQgPiAwKSAmJgorICAgICAgICAgICAgICAgICAgIChFUlJfR0VUX0xJQihlcnIpID09IEVSUl9MSUJfUEVNKSAmJgorICAgICAgICAgICAgICAgICAgIChFUlJfR0VUX1JFQVNPTihlcnIpID09IFBFTV9SX05PX1NUQVJUX0xJTkUpKSB7CisgICAgICAgIC8qIEVPRiBQRU0gZmlsZSwgbm90IGFuIGVycm9yICovCisgICAgICAgIEVSUl9jbGVhcl9lcnJvcigpOworICAgICAgICByZXR2YWwgPSAwOworICAgIH0gZWxzZSB7CisgICAgICAgIF9zZXRTU0xFcnJvcihOVUxMLCAwLCBfX0ZJTEVfXywgX19MSU5FX18pOworICAgICAgICByZXR2YWwgPSAtMTsKKyAgICB9CisKKyAgICBCSU9fZnJlZShiaW9idWYpOworICAgIHJldHVybiByZXR2YWw7Cit9CisKKwogc3RhdGljIFB5T2JqZWN0ICoKIGxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhQeVNTTENvbnRleHQgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKIHsKLSAgICBjaGFyICprd2xpc3RbXSA9IHsiY2FmaWxlIiwgImNhcGF0aCIsIE5VTEx9OwotICAgIFB5T2JqZWN0ICpjYWZpbGUgPSBOVUxMLCAqY2FwYXRoID0gTlVMTDsKKyAgICBjaGFyICprd2xpc3RbXSA9IHsiY2FmaWxlIiwgImNhcGF0aCIsICJjYWRhdGEiLCBOVUxMfTsKKyAgICBQeU9iamVjdCAqY2FmaWxlID0gTlVMTCwgKmNhcGF0aCA9IE5VTEwsICpjYWRhdGEgPSBOVUxMOwogICAgIFB5T2JqZWN0ICpjYWZpbGVfYnl0ZXMgPSBOVUxMLCAqY2FwYXRoX2J5dGVzID0gTlVMTDsKICAgICBjb25zdCBjaGFyICpjYWZpbGVfYnVmID0gTlVMTCwgKmNhcGF0aF9idWYgPSBOVUxMOwotICAgIGludCByOworICAgIGludCByID0gMCwgb2sgPSAxOwogCiAgICAgZXJybm8gPSAwOwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsCi0gICAgICAgICJ8T086bG9hZF92ZXJpZnlfbG9jYXRpb25zIiwga3dsaXN0LAotICAgICAgICAmY2FmaWxlLCAmY2FwYXRoKSkKKyAgICAgICAgInxPT086bG9hZF92ZXJpZnlfbG9jYXRpb25zIiwga3dsaXN0LAorICAgICAgICAmY2FmaWxlLCAmY2FwYXRoLCAmY2FkYXRhKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CisKICAgICBpZiAoY2FmaWxlID09IFB5X05vbmUpCiAgICAgICAgIGNhZmlsZSA9IE5VTEw7CiAgICAgaWYgKGNhcGF0aCA9PSBQeV9Ob25lKQogICAgICAgICBjYXBhdGggPSBOVUxMOwotICAgIGlmIChjYWZpbGUgPT0gTlVMTCAmJiBjYXBhdGggPT0gTlVMTCkgeworICAgIGlmIChjYWRhdGEgPT0gUHlfTm9uZSkKKyAgICAgICAgY2FkYXRhID0gTlVMTDsKKworICAgIGlmIChjYWZpbGUgPT0gTlVMTCAmJiBjYXBhdGggPT0gTlVMTCAmJiBjYWRhdGEgPT0gTlVMTCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgImNhZmlsZSBhbmQgY2FwYXRoIGNhbm5vdCBiZSBib3RoIG9taXR0ZWQiKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICAgICAgICAgICAgICAiY2FmaWxlLCBjYXBhdGggYW5kIGNhZGF0YSBjYW5ub3QgYmUgYWxsIG9taXR0ZWQiKTsKKyAgICAgICAgZ290byBlcnJvcjsKICAgICB9CiAgICAgaWYgKGNhZmlsZSAmJiAhUHlVbmljb2RlX0ZTQ29udmVydGVyKGNhZmlsZSwgJmNhZmlsZV9ieXRlcykpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJjYWZpbGUgc2hvdWxkIGJlIGEgdmFsaWQgZmlsZXN5c3RlbSBwYXRoIik7Ci0gICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KICAgICBpZiAoY2FwYXRoICYmICFQeVVuaWNvZGVfRlNDb252ZXJ0ZXIoY2FwYXRoLCAmY2FwYXRoX2J5dGVzKSkgewotICAgICAgICBQeV9YREVDUkVGKGNhZmlsZV9ieXRlcyk7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiY2FwYXRoIHNob3VsZCBiZSBhIHZhbGlkIGZpbGVzeXN0ZW0gcGF0aCIpOwotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgZ290byBlcnJvcjsKICAgICB9Ci0gICAgaWYgKGNhZmlsZSkKLSAgICAgICAgY2FmaWxlX2J1ZiA9IFB5Qnl0ZXNfQVNfU1RSSU5HKGNhZmlsZV9ieXRlcyk7Ci0gICAgaWYgKGNhcGF0aCkKLSAgICAgICAgY2FwYXRoX2J1ZiA9IFB5Qnl0ZXNfQVNfU1RSSU5HKGNhcGF0aF9ieXRlcyk7Ci0gICAgUHlTU0xfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgIHIgPSBTU0xfQ1RYX2xvYWRfdmVyaWZ5X2xvY2F0aW9ucyhzZWxmLT5jdHgsIGNhZmlsZV9idWYsIGNhcGF0aF9idWYpOwotICAgIFB5U1NMX0VORF9BTExPV19USFJFQURTCisKKyAgICAvKiB2YWxpZGF0YSBjYWRhdGEgdHlwZSBhbmQgbG9hZCBjYWRhdGEgKi8KKyAgICBpZiAoY2FkYXRhKSB7CisgICAgICAgIFB5X2J1ZmZlciBidWY7CisgICAgICAgIFB5T2JqZWN0ICpjYWRhdGFfYXNjaWkgPSBOVUxMOworCisgICAgICAgIGlmIChQeU9iamVjdF9HZXRCdWZmZXIoY2FkYXRhLCAmYnVmLCBQeUJVRl9TSU1QTEUpID09IDApIHsKKyAgICAgICAgICAgIGlmICghUHlCdWZmZXJfSXNDb250aWd1b3VzKCZidWYsICdDJykgfHwgYnVmLm5kaW0gPiAxKSB7CisgICAgICAgICAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmYnVmKTsKKyAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2FkYXRhIHNob3VsZCBiZSBhIGNvbnRpZ3VvdXMgYnVmZmVyIHdpdGggIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYSBzaW5nbGUgZGltZW5zaW9uIik7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHIgPSBfYWRkX2NhX2NlcnRzKHNlbGYsIGJ1Zi5idWYsIGJ1Zi5sZW4sIFNTTF9GSUxFVFlQRV9BU04xKTsKKyAgICAgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmJ1Zik7CisgICAgICAgICAgICBpZiAociA9PSAtMSkgeworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICAgICAgY2FkYXRhX2FzY2lpID0gUHlVbmljb2RlX0FzQVNDSUlTdHJpbmcoY2FkYXRhKTsKKyAgICAgICAgICAgIGlmIChjYWRhdGFfYXNjaWkgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjYWRhdGEgc2hvdWxkIGJlIGFuIEFTQ0lJIHN0cmluZyBvciBhICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJ5dGVzLWxpa2Ugb2JqZWN0Iik7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHIgPSBfYWRkX2NhX2NlcnRzKHNlbGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUJ5dGVzX0FTX1NUUklORyhjYWRhdGFfYXNjaWkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlCeXRlc19HRVRfU0laRShjYWRhdGFfYXNjaWkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1NMX0ZJTEVUWVBFX1BFTSk7CisgICAgICAgICAgICBQeV9ERUNSRUYoY2FkYXRhX2FzY2lpKTsKKyAgICAgICAgICAgIGlmIChyID09IC0xKSB7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIGxvYWQgY2FmaWxlIG9yIGNhcGF0aCAqLworICAgIGlmIChjYWZpbGUgfHwgY2FwYXRoKSB7CisgICAgICAgIGlmIChjYWZpbGUpCisgICAgICAgICAgICBjYWZpbGVfYnVmID0gUHlCeXRlc19BU19TVFJJTkcoY2FmaWxlX2J5dGVzKTsKKyAgICAgICAgaWYgKGNhcGF0aCkKKyAgICAgICAgICAgIGNhcGF0aF9idWYgPSBQeUJ5dGVzX0FTX1NUUklORyhjYXBhdGhfYnl0ZXMpOworICAgICAgICBQeVNTTF9CRUdJTl9BTExPV19USFJFQURTCisgICAgICAgIHIgPSBTU0xfQ1RYX2xvYWRfdmVyaWZ5X2xvY2F0aW9ucyhzZWxmLT5jdHgsIGNhZmlsZV9idWYsIGNhcGF0aF9idWYpOworICAgICAgICBQeVNTTF9FTkRfQUxMT1dfVEhSRUFEUworICAgICAgICBpZiAociAhPSAxKSB7CisgICAgICAgICAgICBvayA9IDA7CisgICAgICAgICAgICBpZiAoZXJybm8gIT0gMCkgeworICAgICAgICAgICAgICAgIEVSUl9jbGVhcl9lcnJvcigpOworICAgICAgICAgICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19JT0Vycm9yKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIF9zZXRTU0xFcnJvcihOVUxMLCAwLCBfX0ZJTEVfXywgX19MSU5FX18pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQorICAgIH0KKyAgICBnb3RvIGVuZDsKKworICBlcnJvcjoKKyAgICBvayA9IDA7CisgIGVuZDoKICAgICBQeV9YREVDUkVGKGNhZmlsZV9ieXRlcyk7CiAgICAgUHlfWERFQ1JFRihjYXBhdGhfYnl0ZXMpOwotICAgIGlmIChyICE9IDEpIHsKLSAgICAgICAgaWYgKGVycm5vICE9IDApIHsKLSAgICAgICAgICAgIEVSUl9jbGVhcl9lcnJvcigpOwotICAgICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX0lPRXJyb3IpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgX3NldFNTTEVycm9yKE5VTEwsIDAsIF9fRklMRV9fLCBfX0xJTkVfXyk7Ci0gICAgICAgIH0KKyAgICBpZiAob2spIHsKKyAgICAgICAgUHlfUkVUVVJOX05PTkU7CisgICAgfSBlbHNlIHsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIFB5X1JFVFVSTl9OT05FOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtMjIzOSw3ICsyNzUwLDcgQEAKICAgICBGSUxFICpmOwogICAgIERIICpkaDsKIAotICAgIGYgPSBfUHlfZm9wZW4oZmlsZXBhdGgsICJyYiIpOworICAgIGYgPSBfUHlfZm9wZW5fb2JqKGZpbGVwYXRoLCAicmIiKTsKICAgICBpZiAoZiA9PSBOVUxMKSB7CiAgICAgICAgIGlmICghUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgICAgIFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZU9iamVjdChQeUV4Y19PU0Vycm9yLCBmaWxlcGF0aCk7CkBAIC0yMjg3LDE1ICsyNzk4LDkgQEAKICAgICAgICAgICAgICZzb2NrLCAmc2VydmVyX3NpZGUsCiAgICAgICAgICAgICAiaWRuYSIsICZob3N0bmFtZSkpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSNpZm5kZWYgU1NMX0NUUkxfU0VUX1RMU0VYVF9IT1NUTkFNRQotICAgICAgICBQeU1lbV9GcmVlKGhvc3RuYW1lKTsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJzZXJ2ZXJfaG9zdG5hbWUgaXMgbm90IHN1cHBvcnRlZCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAiYnkgeW91ciBPcGVuU1NMIGxpYnJhcnkiKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0jZW5kaWYKICAgICB9CiAKLSAgICByZXMgPSAoUHlPYmplY3QgKikgbmV3UHlTU0xTb2NrZXQoc2VsZi0+Y3R4LCBzb2NrLCBzZXJ2ZXJfc2lkZSwKKyAgICByZXMgPSAoUHlPYmplY3QgKikgbmV3UHlTU0xTb2NrZXQoc2VsZiwgc29jaywgc2VydmVyX3NpZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvc3RuYW1lKTsKICAgICBpZiAoaG9zdG5hbWUgIT0gTlVMTCkKICAgICAgICAgUHlNZW1fRnJlZShob3N0bmFtZSk7CkBAIC0yMzgwLDkgKzI4ODUsMjU5IEBACiB9CiAjZW5kaWYKIAorI2lmIEhBVkVfU05JICYmICFkZWZpbmVkKE9QRU5TU0xfTk9fVExTRVhUKQorc3RhdGljIGludAorX3NlcnZlcm5hbWVfY2FsbGJhY2soU1NMICpzLCBpbnQgKmFsLCB2b2lkICphcmdzKQoreworICAgIGludCByZXQ7CisgICAgUHlTU0xDb250ZXh0ICpzc2xfY3R4ID0gKFB5U1NMQ29udGV4dCAqKSBhcmdzOworICAgIFB5U1NMU29ja2V0ICpzc2w7CisgICAgUHlPYmplY3QgKnNlcnZlcm5hbWVfbzsKKyAgICBQeU9iamVjdCAqc2VydmVybmFtZV9pZG5hOworICAgIFB5T2JqZWN0ICpyZXN1bHQ7CisgICAgLyogVGhlIGhpZ2gtbGV2ZWwgc3NsLlNTTFNvY2tldCBvYmplY3QgKi8KKyAgICBQeU9iamVjdCAqc3NsX3NvY2tldDsKKyAgICBjb25zdCBjaGFyICpzZXJ2ZXJuYW1lID0gU1NMX2dldF9zZXJ2ZXJuYW1lKHMsIFRMU0VYVF9OQU1FVFlQRV9ob3N0X25hbWUpOworI2lmZGVmIFdJVEhfVEhSRUFECisgICAgUHlHSUxTdGF0ZV9TVEFURSBnc3RhdGUgPSBQeUdJTFN0YXRlX0Vuc3VyZSgpOworI2VuZGlmCisKKyAgICBpZiAoc3NsX2N0eC0+c2V0X2hvc3RuYW1lID09IE5VTEwpIHsKKyAgICAgICAgLyogcmVtb3ZlIHJhY2UgY29uZGl0aW9uIGluIHRoaXMgdGhlIGNhbGwgYmFjayB3aGlsZSBpZiByZW1vdmluZyB0aGUKKyAgICAgICAgICogY2FsbGJhY2sgaXMgaW4gcHJvZ3Jlc3MgKi8KKyNpZmRlZiBXSVRIX1RIUkVBRAorICAgICAgICBQeUdJTFN0YXRlX1JlbGVhc2UoZ3N0YXRlKTsKKyNlbmRpZgorICAgICAgICByZXR1cm4gU1NMX1RMU0VYVF9FUlJfT0s7CisgICAgfQorCisgICAgc3NsID0gU1NMX2dldF9hcHBfZGF0YShzKTsKKyAgICBhc3NlcnQoUHlTU0xTb2NrZXRfQ2hlY2soc3NsKSk7CisgICAgc3NsX3NvY2tldCA9IFB5V2Vha3JlZl9HZXRPYmplY3Qoc3NsLT5Tb2NrZXQpOworICAgIFB5X0lOQ1JFRihzc2xfc29ja2V0KTsKKyAgICBpZiAoc3NsX3NvY2tldCA9PSBQeV9Ob25lKSB7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorCisgICAgaWYgKHNlcnZlcm5hbWUgPT0gTlVMTCkgeworICAgICAgICByZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKHNzbF9jdHgtPnNldF9ob3N0bmFtZSwgc3NsX3NvY2tldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9Ob25lLCBzc2xfY3R4LCBOVUxMKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHNlcnZlcm5hbWVfbyA9IFB5Qnl0ZXNfRnJvbVN0cmluZyhzZXJ2ZXJuYW1lKTsKKyAgICAgICAgaWYgKHNlcnZlcm5hbWVfbyA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeUVycl9Xcml0ZVVucmFpc2FibGUoKFB5T2JqZWN0ICopIHNzbF9jdHgpOworICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQorICAgICAgICBzZXJ2ZXJuYW1lX2lkbmEgPSBQeVVuaWNvZGVfRnJvbUVuY29kZWRPYmplY3Qoc2VydmVybmFtZV9vLCAiaWRuYSIsIE5VTEwpOworICAgICAgICBpZiAoc2VydmVybmFtZV9pZG5hID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5RXJyX1dyaXRlVW5yYWlzYWJsZShzZXJ2ZXJuYW1lX28pOworICAgICAgICAgICAgUHlfREVDUkVGKHNlcnZlcm5hbWVfbyk7CisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICB9CisgICAgICAgIFB5X0RFQ1JFRihzZXJ2ZXJuYW1lX28pOworICAgICAgICByZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKHNzbF9jdHgtPnNldF9ob3N0bmFtZSwgc3NsX3NvY2tldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJuYW1lX2lkbmEsIHNzbF9jdHgsIE5VTEwpOworICAgICAgICBQeV9ERUNSRUYoc2VydmVybmFtZV9pZG5hKTsKKyAgICB9CisgICAgUHlfREVDUkVGKHNzbF9zb2NrZXQpOworCisgICAgaWYgKHJlc3VsdCA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX1dyaXRlVW5yYWlzYWJsZShzc2xfY3R4LT5zZXRfaG9zdG5hbWUpOworICAgICAgICAqYWwgPSBTU0xfQURfSEFORFNIQUtFX0ZBSUxVUkU7CisgICAgICAgIHJldCA9IFNTTF9UTFNFWFRfRVJSX0FMRVJUX0ZBVEFMOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKHJlc3VsdCAhPSBQeV9Ob25lKSB7CisgICAgICAgICAgICAqYWwgPSAoaW50KSBQeUxvbmdfQXNMb25nKHJlc3VsdCk7CisgICAgICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICAgICAgICAgIFB5RXJyX1dyaXRlVW5yYWlzYWJsZShyZXN1bHQpOworICAgICAgICAgICAgICAgICphbCA9IFNTTF9BRF9JTlRFUk5BTF9FUlJPUjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldCA9IFNTTF9UTFNFWFRfRVJSX0FMRVJUX0ZBVEFMOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcmV0ID0gU1NMX1RMU0VYVF9FUlJfT0s7CisgICAgICAgIH0KKyAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgfQorCisjaWZkZWYgV0lUSF9USFJFQUQKKyAgICBQeUdJTFN0YXRlX1JlbGVhc2UoZ3N0YXRlKTsKKyNlbmRpZgorICAgIHJldHVybiByZXQ7CisKK2Vycm9yOgorICAgIFB5X0RFQ1JFRihzc2xfc29ja2V0KTsKKyAgICAqYWwgPSBTU0xfQURfSU5URVJOQUxfRVJST1I7CisgICAgcmV0ID0gU1NMX1RMU0VYVF9FUlJfQUxFUlRfRkFUQUw7CisjaWZkZWYgV0lUSF9USFJFQUQKKyAgICBQeUdJTFN0YXRlX1JlbGVhc2UoZ3N0YXRlKTsKKyNlbmRpZgorICAgIHJldHVybiByZXQ7Cit9CisjZW5kaWYKKworUHlEb2NfU1RSVkFSKFB5U1NMX3NldF9zZXJ2ZXJuYW1lX2NhbGxiYWNrX2RvYywKKyJzZXRfc2VydmVybmFtZV9jYWxsYmFjayhtZXRob2QpXG5cCitcblwKK1RoaXMgc2V0cyBhIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBjYWxsZWQgd2hlbiBhIHNlcnZlciBuYW1lIGlzIHByb3ZpZGVkIGJ5XG5cCit0aGUgU1NML1RMUyBjbGllbnQgaW4gdGhlIFNOSSBleHRlbnNpb24uXG5cCitcblwKK0lmIHRoZSBhcmd1bWVudCBpcyBOb25lIHRoZW4gdGhlIGNhbGxiYWNrIGlzIGRpc2FibGVkLiBUaGUgbWV0aG9kIGlzIGNhbGxlZFxuXAord2l0aCB0aGUgU1NMU29ja2V0LCB0aGUgc2VydmVyIG5hbWUgYXMgYSBzdHJpbmcsIGFuZCB0aGUgU1NMQ29udGV4dCBvYmplY3QuXG5cCitTZWUgUkZDIDYwNjYgZm9yIGRldGFpbHMgb2YgdGhlIFNOSSBleHRlbnNpb24uIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitzZXRfc2VydmVybmFtZV9jYWxsYmFjayhQeVNTTENvbnRleHQgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworI2lmIEhBVkVfU05JICYmICFkZWZpbmVkKE9QRU5TU0xfTk9fVExTRVhUKQorICAgIFB5T2JqZWN0ICpjYjsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTyIsICZjYikpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgUHlfQ0xFQVIoc2VsZi0+c2V0X2hvc3RuYW1lKTsKKyAgICBpZiAoY2IgPT0gUHlfTm9uZSkgeworICAgICAgICBTU0xfQ1RYX3NldF90bHNleHRfc2VydmVybmFtZV9jYWxsYmFjayhzZWxmLT5jdHgsIE5VTEwpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKCFQeUNhbGxhYmxlX0NoZWNrKGNiKSkgeworICAgICAgICAgICAgU1NMX0NUWF9zZXRfdGxzZXh0X3NlcnZlcm5hbWVfY2FsbGJhY2soc2VsZi0+Y3R4LCBOVUxMKTsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vdCBhIGNhbGxhYmxlIG9iamVjdCIpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgUHlfSU5DUkVGKGNiKTsKKyAgICAgICAgc2VsZi0+c2V0X2hvc3RuYW1lID0gY2I7CisgICAgICAgIFNTTF9DVFhfc2V0X3Rsc2V4dF9zZXJ2ZXJuYW1lX2NhbGxiYWNrKHNlbGYtPmN0eCwgX3NlcnZlcm5hbWVfY2FsbGJhY2spOworICAgICAgICBTU0xfQ1RYX3NldF90bHNleHRfc2VydmVybmFtZV9hcmcoc2VsZi0+Y3R4LCBzZWxmKTsKKyAgICB9CisgICAgUHlfUkVUVVJOX05PTkU7CisjZWxzZQorICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19Ob3RJbXBsZW1lbnRlZEVycm9yLAorICAgICAgICAgICAgICAgICAgICAiVGhlIFRMUyBleHRlbnNpb24gc2VydmVybmFtZSBjYWxsYmFjaywgIgorICAgICAgICAgICAgICAgICAgICAiU1NMX0NUWF9zZXRfdGxzZXh0X3NlcnZlcm5hbWVfY2FsbGJhY2ssICIKKyAgICAgICAgICAgICAgICAgICAgImlzIG5vdCBpbiB0aGUgY3VycmVudCBPcGVuU1NMIGxpYnJhcnkuIik7CisgICAgcmV0dXJuIE5VTEw7CisjZW5kaWYKK30KKworUHlEb2NfU1RSVkFSKFB5U1NMX2dldF9zdGF0c19kb2MsCisiY2VydF9zdG9yZV9zdGF0cygpIC0+IHsnY3JsJzogaW50LCAneDUwOV9jYSc6IGludCwgJ3g1MDknOiBpbnR9XG5cCitcblwKK1JldHVybnMgcXVhbnRpdGllcyBvZiBsb2FkZWQgWC41MDkgY2VydGlmaWNhdGVzLiBYLjUwOSBjZXJ0aWZpY2F0ZXMgd2l0aCBhXG5cCitDQSBleHRlbnNpb24gYW5kIGNlcnRpZmljYXRlIHJldm9jYXRpb24gbGlzdHMgaW5zaWRlIHRoZSBjb250ZXh0J3MgY2VydFxuXAorc3RvcmUuXG5cCitOT1RFOiBDZXJ0aWZpY2F0ZXMgaW4gYSBjYXBhdGggZGlyZWN0b3J5IGFyZW4ndCBsb2FkZWQgdW5sZXNzIHRoZXkgaGF2ZVxuXAorYmVlbiB1c2VkIGF0IGxlYXN0IG9uY2UuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitjZXJ0X3N0b3JlX3N0YXRzKFB5U1NMQ29udGV4dCAqc2VsZikKK3sKKyAgICBYNTA5X1NUT1JFICpzdG9yZTsKKyAgICBYNTA5X09CSkVDVCAqb2JqOworICAgIGludCB4NTA5ID0gMCwgY3JsID0gMCwgcGtleSA9IDAsIGNhID0gMCwgaTsKKworICAgIHN0b3JlID0gU1NMX0NUWF9nZXRfY2VydF9zdG9yZShzZWxmLT5jdHgpOworICAgIGZvciAoaSA9IDA7IGkgPCBza19YNTA5X09CSkVDVF9udW0oc3RvcmUtPm9ianMpOyBpKyspIHsKKyAgICAgICAgb2JqID0gc2tfWDUwOV9PQkpFQ1RfdmFsdWUoc3RvcmUtPm9ianMsIGkpOworICAgICAgICBzd2l0Y2ggKG9iai0+dHlwZSkgeworICAgICAgICAgICAgY2FzZSBYNTA5X0xVX1g1MDk6CisgICAgICAgICAgICAgICAgeDUwOSsrOworICAgICAgICAgICAgICAgIGlmIChYNTA5X2NoZWNrX2NhKG9iai0+ZGF0YS54NTA5KSkgeworICAgICAgICAgICAgICAgICAgICBjYSsrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgWDUwOV9MVV9DUkw6CisgICAgICAgICAgICAgICAgY3JsKys7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFg1MDlfTFVfUEtFWToKKyAgICAgICAgICAgICAgICBwa2V5Kys7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIC8qIElnbm9yZSBYNTA5X0xVX0ZBSUwsIFg1MDlfTFVfUkVUUlksIFg1MDlfTFVfUEtFWS4KKyAgICAgICAgICAgICAgICAgKiBBcyBmYXIgYXMgSSBjYW4gdGVsbCB0aGV5IGFyZSBpbnRlcm5hbCBzdGF0ZXMgYW5kIG5ldmVyCisgICAgICAgICAgICAgICAgICogc3RvcmVkIGluIGEgY2VydCBzdG9yZSAqLworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJ7c2lzaXNpfSIsICJ4NTA5IiwgeDUwOSwgImNybCIsIGNybCwKKyAgICAgICAgIng1MDlfY2EiLCBjYSk7Cit9CisKK1B5RG9jX1NUUlZBUihQeVNTTF9nZXRfY2FfY2VydHNfZG9jLAorImdldF9jYV9jZXJ0cyhiaW5hcnlfZm9ybT1GYWxzZSkgLT4gbGlzdCBvZiBsb2FkZWQgY2VydGlmaWNhdGVcblwKK1xuXAorUmV0dXJucyBhIGxpc3Qgb2YgZGljdHMgd2l0aCBpbmZvcm1hdGlvbiBvZiBsb2FkZWQgQ0EgY2VydHMuIElmIHRoZVxuXAorb3B0aW9uYWwgYXJndW1lbnQgaXMgVHJ1ZSwgcmV0dXJucyBhIERFUi1lbmNvZGVkIGNvcHkgb2YgdGhlIENBIGNlcnRpZmljYXRlLlxuXAorTk9URTogQ2VydGlmaWNhdGVzIGluIGEgY2FwYXRoIGRpcmVjdG9yeSBhcmVuJ3QgbG9hZGVkIHVubGVzcyB0aGV5IGhhdmVcblwKK2JlZW4gdXNlZCBhdCBsZWFzdCBvbmNlLiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorZ2V0X2NhX2NlcnRzKFB5U1NMQ29udGV4dCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQoreworICAgIGNoYXIgKmt3bGlzdFtdID0geyJiaW5hcnlfZm9ybSIsIE5VTEx9OworICAgIFg1MDlfU1RPUkUgKnN0b3JlOworICAgIFB5T2JqZWN0ICpjaSA9IE5VTEwsICpybGlzdCA9IE5VTEw7CisgICAgaW50IGk7CisgICAgaW50IGJpbmFyeV9tb2RlID0gMDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJ8cDpnZXRfY2FfY2VydHMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt3bGlzdCwgJmJpbmFyeV9tb2RlKSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBpZiAoKHJsaXN0ID0gUHlMaXN0X05ldygwKSkgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBzdG9yZSA9IFNTTF9DVFhfZ2V0X2NlcnRfc3RvcmUoc2VsZi0+Y3R4KTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgc2tfWDUwOV9PQkpFQ1RfbnVtKHN0b3JlLT5vYmpzKTsgaSsrKSB7CisgICAgICAgIFg1MDlfT0JKRUNUICpvYmo7CisgICAgICAgIFg1MDkgKmNlcnQ7CisKKyAgICAgICAgb2JqID0gc2tfWDUwOV9PQkpFQ1RfdmFsdWUoc3RvcmUtPm9ianMsIGkpOworICAgICAgICBpZiAob2JqLT50eXBlICE9IFg1MDlfTFVfWDUwOSkgeworICAgICAgICAgICAgLyogbm90IGEgeDUwOSBjZXJ0ICovCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICAvKiBDQSBmb3IgYW55IHB1cnBvc2UgKi8KKyAgICAgICAgY2VydCA9IG9iai0+ZGF0YS54NTA5OworICAgICAgICBpZiAoIVg1MDlfY2hlY2tfY2EoY2VydCkpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmIChiaW5hcnlfbW9kZSkgeworICAgICAgICAgICAgY2kgPSBfY2VydGlmaWNhdGVfdG9fZGVyKGNlcnQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgY2kgPSBfZGVjb2RlX2NlcnRpZmljYXRlKGNlcnQpOworICAgICAgICB9CisgICAgICAgIGlmIChjaSA9PSBOVUxMKSB7CisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICB9CisgICAgICAgIGlmIChQeUxpc3RfQXBwZW5kKHJsaXN0LCBjaSkgPT0gLTEpIHsKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KKyAgICAgICAgUHlfQ0xFQVIoY2kpOworICAgIH0KKyAgICByZXR1cm4gcmxpc3Q7CisKKyAgZXJyb3I6CisgICAgUHlfWERFQ1JFRihjaSk7CisgICAgUHlfWERFQ1JFRihybGlzdCk7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKKwogc3RhdGljIFB5R2V0U2V0RGVmIGNvbnRleHRfZ2V0c2V0bGlzdFtdID0geworICAgIHsiY2hlY2tfaG9zdG5hbWUiLCAoZ2V0dGVyKSBnZXRfY2hlY2tfaG9zdG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgIChzZXR0ZXIpIHNldF9jaGVja19ob3N0bmFtZSwgTlVMTH0sCiAgICAgeyJvcHRpb25zIiwgKGdldHRlcikgZ2V0X29wdGlvbnMsCiAgICAgICAgICAgICAgICAgKHNldHRlcikgc2V0X29wdGlvbnMsIE5VTEx9LAorI2lmZGVmIEhBVkVfT1BFTlNTTF9WRVJJRllfUEFSQU0KKyAgICB7InZlcmlmeV9mbGFncyIsIChnZXR0ZXIpIGdldF92ZXJpZnlfZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAoc2V0dGVyKSBzZXRfdmVyaWZ5X2ZsYWdzLCBOVUxMfSwKKyNlbmRpZgogICAgIHsidmVyaWZ5X21vZGUiLCAoZ2V0dGVyKSBnZXRfdmVyaWZ5X21vZGUsCiAgICAgICAgICAgICAgICAgICAgIChzZXR0ZXIpIHNldF92ZXJpZnlfbW9kZSwgTlVMTH0sCiAgICAge05VTEx9LCAgICAgICAgICAgIC8qIHNlbnRpbmVsICovCkBAIC0yNDA5LDYgKzMxNjQsMTIgQEAKICAgICB7InNldF9lY2RoX2N1cnZlIiwgKFB5Q0Z1bmN0aW9uKSBzZXRfZWNkaF9jdXJ2ZSwKICAgICAgICAgICAgICAgICAgICAgICAgTUVUSF9PLCBOVUxMfSwKICNlbmRpZgorICAgIHsic2V0X3NlcnZlcm5hbWVfY2FsbGJhY2siLCAoUHlDRnVuY3Rpb24pIHNldF9zZXJ2ZXJuYW1lX2NhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1MsIFB5U1NMX3NldF9zZXJ2ZXJuYW1lX2NhbGxiYWNrX2RvY30sCisgICAgeyJjZXJ0X3N0b3JlX3N0YXRzIiwgKFB5Q0Z1bmN0aW9uKSBjZXJ0X3N0b3JlX3N0YXRzLAorICAgICAgICAgICAgICAgICAgICBNRVRIX05PQVJHUywgUHlTU0xfZ2V0X3N0YXRzX2RvY30sCisgICAgeyJnZXRfY2FfY2VydHMiLCAoUHlDRnVuY3Rpb24pIGdldF9jYV9jZXJ0cywKKyAgICAgICAgICAgICAgICAgICAgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywgUHlTU0xfZ2V0X2NhX2NlcnRzX2RvY30sCiAgICAge05VTEwsIE5VTEx9ICAgICAgICAvKiBzZW50aW5lbCAqLwogfTsKIApAQCAtMjQzMiwxMCArMzE5MywxMCBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2dldGF0dHJvKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zZXRhdHRybyovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfYnVmZmVyKi8KLSAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0JBU0VUWVBFLCAgLyp0cF9mbGFncyovCisgICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19CQVNFVFlQRSB8IFB5X1RQRkxBR1NfSEFWRV9HQywgLyp0cF9mbGFncyovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZG9jKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF90cmF2ZXJzZSovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfY2xlYXIqLworICAgICh0cmF2ZXJzZXByb2MpIGNvbnRleHRfdHJhdmVyc2UsICAgICAgICAgICAvKnRwX3RyYXZlcnNlKi8KKyAgICAoaW5xdWlyeSkgY29udGV4dF9jbGVhciwgICAgICAgICAgICAgICAgICAgLyp0cF9jbGVhciovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfcmljaGNvbXBhcmUqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3dlYWtsaXN0b2Zmc2V0Ki8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9pdGVyKi8KQEAgLTI0NjIsMTIgKzMyMjMsMTcgQEAKIFB5U1NMX1JBTkRfYWRkKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBjaGFyICpidWY7Ci0gICAgaW50IGxlbjsKKyAgICBQeV9zc2l6ZV90IGxlbiwgd3JpdHRlbjsKICAgICBkb3VibGUgZW50cm9weTsKIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyNkOlJBTkRfYWRkIiwgJmJ1ZiwgJmxlbiwgJmVudHJvcHkpKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBSQU5EX2FkZChidWYsIGxlbiwgZW50cm9weSk7CisgICAgZG8geworICAgICAgICB3cml0dGVuID0gUHlfTUlOKGxlbiwgSU5UX01BWCk7CisgICAgICAgIFJBTkRfYWRkKGJ1ZiwgKGludCl3cml0dGVuLCBlbnRyb3B5KTsKKyAgICAgICAgYnVmICs9IHdyaXR0ZW47CisgICAgICAgIGxlbiAtPSB3cml0dGVuOworICAgIH0gd2hpbGUgKGxlbik7CiAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwogICAgIHJldHVybiBQeV9Ob25lOwogfQpAQCAtMjU1OSw2ICszMzI1LDcgQEAKIEl0IGlzIG5lY2Vzc2FyeSB0byBzZWVkIHRoZSBQUk5HIHdpdGggUkFORF9hZGQoKSBvbiBzb21lIHBsYXRmb3JtcyBiZWZvcmVcblwKIHVzaW5nIHRoZSBzc2woKSBmdW5jdGlvbi4iKTsKIAorI2lmZGVmIEhBVkVfUkFORF9FR0QKIHN0YXRpYyBQeU9iamVjdCAqCiBQeVNTTF9SQU5EX2VnZChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CkBAIC0yNTg2LDExICszMzUzLDM4OSBAQAogUXVlcmllcyB0aGUgZW50cm9weSBnYXRoZXIgZGFlbW9uIChFR0QpIG9uIHRoZSBzb2NrZXQgbmFtZWQgYnkgJ3BhdGgnLlxuXAogUmV0dXJucyBudW1iZXIgb2YgYnl0ZXMgcmVhZC4gIFJhaXNlcyBTU0xFcnJvciBpZiBjb25uZWN0aW9uIHRvIEVHRFxuXAogZmFpbHMgb3IgaWYgaXQgZG9lcyBub3QgcHJvdmlkZSBlbm91Z2ggZGF0YSB0byBzZWVkIFBSTkcuIik7CisjZW5kaWYgLyogSEFWRV9SQU5EX0VHRCAqLwogCiAjZW5kaWYgLyogSEFWRV9PUEVOU1NMX1JBTkQgKi8KIAogCitQeURvY19TVFJWQVIoUHlTU0xfZ2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzX2RvYywKKyJnZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHMoKSAtPiB0dXBsZVxuXAorXG5cCitSZXR1cm4gc2VhcmNoIHBhdGhzIGFuZCBlbnZpcm9ubWVudCB2YXJzIHRoYXQgYXJlIHVzZWQgYnkgU1NMQ29udGV4dCdzXG5cCitzZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHMoKSB0byBsb2FkIGRlZmF1bHQgQ0FzLiBUaGUgdmFsdWVzIGFyZVxuXAorJ2NlcnRfZmlsZV9lbnYnLCAnY2VydF9maWxlJywgJ2NlcnRfZGlyX2VudicsICdjZXJ0X2RpcicuIik7CiAKK3N0YXRpYyBQeU9iamVjdCAqCitQeVNTTF9nZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHMoUHlPYmplY3QgKnNlbGYpCit7CisgICAgUHlPYmplY3QgKm9maWxlX2VudiA9IE5VTEw7CisgICAgUHlPYmplY3QgKm9maWxlID0gTlVMTDsKKyAgICBQeU9iamVjdCAqb2Rpcl9lbnYgPSBOVUxMOworICAgIFB5T2JqZWN0ICpvZGlyID0gTlVMTDsKKworI2RlZmluZSBDT05WRVJUKGluZm8sIHRhcmdldCkgeyBcCisgICAgICAgIGNvbnN0IGNoYXIgKnRtcCA9IChpbmZvKTsgXAorICAgICAgICB0YXJnZXQgPSBOVUxMOyBcCisgICAgICAgIGlmICghdG1wKSB7IFB5X0lOQ1JFRihQeV9Ob25lKTsgdGFyZ2V0ID0gUHlfTm9uZTsgfSBcCisgICAgICAgIGVsc2UgaWYgKCh0YXJnZXQgPSBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0KHRtcCkpID09IE5VTEwpIHsgXAorICAgICAgICAgICAgdGFyZ2V0ID0gUHlCeXRlc19Gcm9tU3RyaW5nKHRtcCk7IH0gXAorICAgICAgICBpZiAoIXRhcmdldCkgZ290byBlcnJvcjsgXAorICAgIH0KKworICAgIENPTlZFUlQoWDUwOV9nZXRfZGVmYXVsdF9jZXJ0X2ZpbGVfZW52KCksIG9maWxlX2Vudik7CisgICAgQ09OVkVSVChYNTA5X2dldF9kZWZhdWx0X2NlcnRfZmlsZSgpLCBvZmlsZSk7CisgICAgQ09OVkVSVChYNTA5X2dldF9kZWZhdWx0X2NlcnRfZGlyX2VudigpLCBvZGlyX2Vudik7CisgICAgQ09OVkVSVChYNTA5X2dldF9kZWZhdWx0X2NlcnRfZGlyKCksIG9kaXIpOworI3VuZGVmIENPTlZFUlQKKworICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJOTk5OIiwgb2ZpbGVfZW52LCBvZmlsZSwgb2Rpcl9lbnYsIG9kaXIpOworCisgIGVycm9yOgorICAgIFB5X1hERUNSRUYob2ZpbGVfZW52KTsKKyAgICBQeV9YREVDUkVGKG9maWxlKTsKKyAgICBQeV9YREVDUkVGKG9kaXJfZW52KTsKKyAgICBQeV9YREVDUkVGKG9kaXIpOworICAgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgUHlPYmplY3QqCithc24xb2JqMnB5KEFTTjFfT0JKRUNUICpvYmopCit7CisgICAgaW50IG5pZDsKKyAgICBjb25zdCBjaGFyICpsbiwgKnNuOworICAgIGNoYXIgYnVmWzEwMF07CisgICAgUHlfc3NpemVfdCBidWZsZW47CisKKyAgICBuaWQgPSBPQkpfb2JqMm5pZChvYmopOworICAgIGlmIChuaWQgPT0gTklEX3VuZGVmKSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLCAiVW5rbm93biBvYmplY3QiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHNuID0gT0JKX25pZDJzbihuaWQpOworICAgIGxuID0gT0JKX25pZDJsbihuaWQpOworICAgIGJ1ZmxlbiA9IE9CSl9vYmoydHh0KGJ1Ziwgc2l6ZW9mKGJ1ZiksIG9iaiwgMSk7CisgICAgaWYgKGJ1ZmxlbiA8IDApIHsKKyAgICAgICAgX3NldFNTTEVycm9yKE5VTEwsIDAsIF9fRklMRV9fLCBfX0xJTkVfXyk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAoYnVmbGVuKSB7CisgICAgICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJpc3NzIyIsIG5pZCwgc24sIGxuLCBidWYsIGJ1Zmxlbik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoImlzc08iLCBuaWQsIHNuLCBsbiwgUHlfTm9uZSk7CisgICAgfQorfQorCitQeURvY19TVFJWQVIoUHlTU0xfdHh0Mm9ial9kb2MsCisidHh0Mm9iaih0eHQsIG5hbWU9RmFsc2UpIC0+IChuaWQsIHNob3J0bmFtZSwgbG9uZ25hbWUsIG9pZClcblwKK1xuXAorTG9va3VwIE5JRCwgc2hvcnQgbmFtZSwgbG9uZyBuYW1lIGFuZCBPSUQgb2YgYW4gQVNOMV9PQkpFQ1QuIEJ5IGRlZmF1bHRcblwKK29iamVjdHMgYXJlIGxvb2tlZCB1cCBieSBPSUQuIFdpdGggbmFtZT1UcnVlIHNob3J0IGFuZCBsb25nIG5hbWUgYXJlIGFsc29cblwKK21hdGNoZWQuIik7CisKK3N0YXRpYyBQeU9iamVjdCoKK1B5U1NMX3R4dDJvYmooUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKK3sKKyAgICBjaGFyICprd2xpc3RbXSA9IHsidHh0IiwgIm5hbWUiLCBOVUxMfTsKKyAgICBQeU9iamVjdCAqcmVzdWx0ID0gTlVMTDsKKyAgICBjaGFyICp0eHQ7CisgICAgaW50IG5hbWUgPSAwOworICAgIEFTTjFfT0JKRUNUICpvYmo7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAic3xwOnR4dDJvYmoiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt3bGlzdCwgJnR4dCwgJm5hbWUpKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBvYmogPSBPQkpfdHh0Mm9iaih0eHQsIG5hbWUgPyAwIDogMSk7CisgICAgaWYgKG9iaiA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLCAidW5rbm93biBvYmplY3QgJyUuMTAwcyciLCB0eHQpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcmVzdWx0ID0gYXNuMW9iajJweShvYmopOworICAgIEFTTjFfT0JKRUNUX2ZyZWUob2JqKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitQeURvY19TVFJWQVIoUHlTU0xfbmlkMm9ial9kb2MsCisibmlkMm9iaihuaWQpIC0+IChuaWQsIHNob3J0bmFtZSwgbG9uZ25hbWUsIG9pZClcblwKK1xuXAorTG9va3VwIE5JRCwgc2hvcnQgbmFtZSwgbG9uZyBuYW1lIGFuZCBPSUQgb2YgYW4gQVNOMV9PQkpFQ1QgYnkgTklELiIpOworCitzdGF0aWMgUHlPYmplY3QqCitQeVNTTF9uaWQyb2JqKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmVzdWx0ID0gTlVMTDsKKyAgICBpbnQgbmlkOworICAgIEFTTjFfT0JKRUNUICpvYmo7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImk6bmlkMm9iaiIsICZuaWQpKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAobmlkIDwgTklEX3VuZGVmKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiTklEIG11c3QgYmUgcG9zaXRpdmUuIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBvYmogPSBPQkpfbmlkMm9iaihuaWQpOworICAgIGlmIChvYmogPT0gTlVMTCkgeworICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwgInVua25vd24gTklEICVpIiwgbmlkKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJlc3VsdCA9IGFzbjFvYmoycHkob2JqKTsKKyAgICBBU04xX09CSkVDVF9mcmVlKG9iaik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworI2lmZGVmIF9NU0NfVkVSCisKK3N0YXRpYyBQeU9iamVjdCoKK2NlcnRFbmNvZGluZ1R5cGUoRFdPUkQgZW5jb2RpbmdUeXBlKQoreworICAgIHN0YXRpYyBQeU9iamVjdCAqeDUwOV9hc24gPSBOVUxMOworICAgIHN0YXRpYyBQeU9iamVjdCAqcGtjc183X2FzbiA9IE5VTEw7CisKKyAgICBpZiAoeDUwOV9hc24gPT0gTlVMTCkgeworICAgICAgICB4NTA5X2FzbiA9IFB5VW5pY29kZV9JbnRlcm5Gcm9tU3RyaW5nKCJ4NTA5X2FzbiIpOworICAgICAgICBpZiAoeDUwOV9hc24gPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAocGtjc183X2FzbiA9PSBOVUxMKSB7CisgICAgICAgIHBrY3NfN19hc24gPSBQeVVuaWNvZGVfSW50ZXJuRnJvbVN0cmluZygicGtjc183X2FzbiIpOworICAgICAgICBpZiAocGtjc183X2FzbiA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHN3aXRjaChlbmNvZGluZ1R5cGUpIHsKKyAgICBjYXNlIFg1MDlfQVNOX0VOQ09ESU5HOgorICAgICAgICBQeV9JTkNSRUYoeDUwOV9hc24pOworICAgICAgICByZXR1cm4geDUwOV9hc247CisgICAgY2FzZSBQS0NTXzdfQVNOX0VOQ09ESU5HOgorICAgICAgICBQeV9JTkNSRUYocGtjc183X2Fzbik7CisgICAgICAgIHJldHVybiBwa2NzXzdfYXNuOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoZW5jb2RpbmdUeXBlKTsKKyAgICB9Cit9CisKK3N0YXRpYyBQeU9iamVjdCoKK3BhcnNlS2V5VXNhZ2UoUENDRVJUX0NPTlRFWFQgcENlcnRDdHgsIERXT1JEIGZsYWdzKQoreworICAgIENFUlRfRU5IS0VZX1VTQUdFICp1c2FnZTsKKyAgICBEV09SRCBzaXplLCBlcnJvciwgaTsKKyAgICBQeU9iamVjdCAqcmV0dmFsOworCisgICAgaWYgKCFDZXJ0R2V0RW5oYW5jZWRLZXlVc2FnZShwQ2VydEN0eCwgZmxhZ3MsIE5VTEwsICZzaXplKSkgeworICAgICAgICBlcnJvciA9IEdldExhc3RFcnJvcigpOworICAgICAgICBpZiAoZXJyb3IgPT0gQ1JZUFRfRV9OT1RfRk9VTkQpIHsKKyAgICAgICAgICAgIFB5X1JFVFVSTl9UUlVFOworICAgICAgICB9CisgICAgICAgIHJldHVybiBQeUVycl9TZXRGcm9tV2luZG93c0VycihlcnJvcik7CisgICAgfQorCisgICAgdXNhZ2UgPSAoQ0VSVF9FTkhLRVlfVVNBR0UqKVB5TWVtX01hbGxvYyhzaXplKTsKKyAgICBpZiAodXNhZ2UgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKKyAgICB9CisKKyAgICAvKiBOb3cgZ2V0IHRoZSBhY3R1YWwgZW5oYW5jZWQgdXNhZ2UgcHJvcGVydHkgKi8KKyAgICBpZiAoIUNlcnRHZXRFbmhhbmNlZEtleVVzYWdlKHBDZXJ0Q3R4LCBmbGFncywgdXNhZ2UsICZzaXplKSkgeworICAgICAgICBQeU1lbV9GcmVlKHVzYWdlKTsKKyAgICAgICAgZXJyb3IgPSBHZXRMYXN0RXJyb3IoKTsKKyAgICAgICAgaWYgKGVycm9yID09IENSWVBUX0VfTk9UX0ZPVU5EKSB7CisgICAgICAgICAgICBQeV9SRVRVUk5fVFJVRTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoZXJyb3IpOworICAgIH0KKyAgICByZXR2YWwgPSBQeVNldF9OZXcoTlVMTCk7CisgICAgaWYgKHJldHZhbCA9PSBOVUxMKSB7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorICAgIGZvciAoaSA9IDA7IGkgPCB1c2FnZS0+Y1VzYWdlSWRlbnRpZmllcjsgKytpKSB7CisgICAgICAgIGlmICh1c2FnZS0+cmdwc3pVc2FnZUlkZW50aWZpZXJbaV0pIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpvaWQ7CisgICAgICAgICAgICBpbnQgZXJyOworICAgICAgICAgICAgb2lkID0gUHlVbmljb2RlX0Zyb21TdHJpbmcodXNhZ2UtPnJncHN6VXNhZ2VJZGVudGlmaWVyW2ldKTsKKyAgICAgICAgICAgIGlmIChvaWQgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIFB5X0NMRUFSKHJldHZhbCk7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVyciA9IFB5U2V0X0FkZChyZXR2YWwsIG9pZCk7CisgICAgICAgICAgICBQeV9ERUNSRUYob2lkKTsKKyAgICAgICAgICAgIGlmIChlcnIgPT0gLTEpIHsKKyAgICAgICAgICAgICAgICBQeV9DTEVBUihyZXR2YWwpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgIGVycm9yOgorICAgIFB5TWVtX0ZyZWUodXNhZ2UpOworICAgIHJldHVybiByZXR2YWw7Cit9CisKK1B5RG9jX1NUUlZBUihQeVNTTF9lbnVtX2NlcnRpZmljYXRlc19kb2MsCisiZW51bV9jZXJ0aWZpY2F0ZXMoc3RvcmVfbmFtZSkgLT4gW11cblwKK1xuXAorUmV0cmlldmUgY2VydGlmaWNhdGVzIGZyb20gV2luZG93cycgY2VydCBzdG9yZS4gc3RvcmVfbmFtZSBtYXkgYmUgb25lIG9mXG5cCisnQ0EnLCAnUk9PVCcgb3IgJ01ZJy4gVGhlIHN5c3RlbSBtYXkgcHJvdmlkZSBtb3JlIGNlcnQgc3RvcmFnZXMsIHRvby5cblwKK1RoZSBmdW5jdGlvbiByZXR1cm5zIGEgbGlzdCBvZiAoYnl0ZXMsIGVuY29kaW5nX3R5cGUsIHRydXN0KSB0dXBsZXMuIFRoZVxuXAorZW5jb2RpbmdfdHlwZSBmbGFnIGNhbiBiZSBpbnRlcnByZXRlZCB3aXRoIFg1MDlfQVNOX0VOQ09ESU5HIG9yXG5cCitQS0NTXzdfQVNOX0VOQ09ESU5HLiBUaGUgdHJ1c3Qgc2V0dGluZyBpcyBlaXRoZXIgYSBzZXQgb2YgT0lEcyBvciB0aGVcblwKK2Jvb2xlYW4gVHJ1ZS4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK1B5U1NMX2VudW1fY2VydGlmaWNhdGVzKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCit7CisgICAgY2hhciAqa3dsaXN0W10gPSB7InN0b3JlX25hbWUiLCBOVUxMfTsKKyAgICBjaGFyICpzdG9yZV9uYW1lOworICAgIEhDRVJUU1RPUkUgaFN0b3JlID0gTlVMTDsKKyAgICBQQ0NFUlRfQ09OVEVYVCBwQ2VydEN0eCA9IE5VTEw7CisgICAgUHlPYmplY3QgKmtleXVzYWdlID0gTlVMTCwgKmNlcnQgPSBOVUxMLCAqZW5jID0gTlVMTCwgKnR1cCA9IE5VTEw7CisgICAgUHlPYmplY3QgKnJlc3VsdCA9IE5VTEw7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiczplbnVtX2NlcnRpZmljYXRlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3dsaXN0LCAmc3RvcmVfbmFtZSkpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJlc3VsdCA9IFB5TGlzdF9OZXcoMCk7CisgICAgaWYgKHJlc3VsdCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBoU3RvcmUgPSBDZXJ0T3BlblN5c3RlbVN0b3JlKChIQ1JZUFRQUk9WKU5VTEwsIHN0b3JlX25hbWUpOworICAgIGlmIChoU3RvcmUgPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKEdldExhc3RFcnJvcigpKTsKKyAgICB9CisKKyAgICB3aGlsZSAocENlcnRDdHggPSBDZXJ0RW51bUNlcnRpZmljYXRlc0luU3RvcmUoaFN0b3JlLCBwQ2VydEN0eCkpIHsKKyAgICAgICAgY2VydCA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoKGNvbnN0IGNoYXIqKXBDZXJ0Q3R4LT5wYkNlcnRFbmNvZGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQ2VydEN0eC0+Y2JDZXJ0RW5jb2RlZCk7CisgICAgICAgIGlmICghY2VydCkgeworICAgICAgICAgICAgUHlfQ0xFQVIocmVzdWx0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmICgoZW5jID0gY2VydEVuY29kaW5nVHlwZShwQ2VydEN0eC0+ZHdDZXJ0RW5jb2RpbmdUeXBlKSkgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlfQ0xFQVIocmVzdWx0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGtleXVzYWdlID0gcGFyc2VLZXlVc2FnZShwQ2VydEN0eCwgQ0VSVF9GSU5EX1BST1BfT05MWV9FTkhLRVlfVVNBR0VfRkxBRyk7CisgICAgICAgIGlmIChrZXl1c2FnZSA9PSBQeV9UcnVlKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoa2V5dXNhZ2UpOworICAgICAgICAgICAga2V5dXNhZ2UgPSBwYXJzZUtleVVzYWdlKHBDZXJ0Q3R4LCBDRVJUX0ZJTkRfRVhUX09OTFlfRU5IS0VZX1VTQUdFX0ZMQUcpOworICAgICAgICB9CisgICAgICAgIGlmIChrZXl1c2FnZSA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeV9DTEVBUihyZXN1bHQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCh0dXAgPSBQeVR1cGxlX05ldygzKSkgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlfQ0xFQVIocmVzdWx0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIFB5VHVwbGVfU0VUX0lURU0odHVwLCAwLCBjZXJ0KTsKKyAgICAgICAgY2VydCA9IE5VTEw7CisgICAgICAgIFB5VHVwbGVfU0VUX0lURU0odHVwLCAxLCBlbmMpOworICAgICAgICBlbmMgPSBOVUxMOworICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKHR1cCwgMiwga2V5dXNhZ2UpOworICAgICAgICBrZXl1c2FnZSA9IE5VTEw7CisgICAgICAgIGlmIChQeUxpc3RfQXBwZW5kKHJlc3VsdCwgdHVwKSA8IDApIHsKKyAgICAgICAgICAgIFB5X0NMRUFSKHJlc3VsdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBQeV9DTEVBUih0dXApOworICAgIH0KKyAgICBpZiAocENlcnRDdHgpIHsKKyAgICAgICAgLyogbG9vcCBlbmRlZCB3aXRoIGFuIGVycm9yLCBuZWVkIHRvIGNsZWFuIHVwIGNvbnRleHQgbWFudWFsbHkgKi8KKyAgICAgICAgQ2VydEZyZWVDZXJ0aWZpY2F0ZUNvbnRleHQocENlcnRDdHgpOworICAgIH0KKworICAgIC8qIEluIGVycm9yIGNhc2VzIGNlcnQsIGVuYyBhbmQgdHVwIG1heSBub3QgYmUgTlVMTCAqLworICAgIFB5X1hERUNSRUYoY2VydCk7CisgICAgUHlfWERFQ1JFRihlbmMpOworICAgIFB5X1hERUNSRUYoa2V5dXNhZ2UpOworICAgIFB5X1hERUNSRUYodHVwKTsKKworICAgIGlmICghQ2VydENsb3NlU3RvcmUoaFN0b3JlLCAwKSkgeworICAgICAgICAvKiBUaGlzIGVycm9yIGNhc2UgbWlnaHQgc2hhZG93IGFub3RoZXIgZXhjZXB0aW9uLiovCisgICAgICAgIFB5X1hERUNSRUYocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKEdldExhc3RFcnJvcigpKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworUHlEb2NfU1RSVkFSKFB5U1NMX2VudW1fY3Jsc19kb2MsCisiZW51bV9jcmxzKHN0b3JlX25hbWUpIC0+IFtdXG5cCitcblwKK1JldHJpZXZlIENSTHMgZnJvbSBXaW5kb3dzJyBjZXJ0IHN0b3JlLiBzdG9yZV9uYW1lIG1heSBiZSBvbmUgb2ZcblwKKydDQScsICdST09UJyBvciAnTVknLiBUaGUgc3lzdGVtIG1heSBwcm92aWRlIG1vcmUgY2VydCBzdG9yYWdlcywgdG9vLlxuXAorVGhlIGZ1bmN0aW9uIHJldHVybnMgYSBsaXN0IG9mIChieXRlcywgZW5jb2RpbmdfdHlwZSkgdHVwbGVzLiBUaGVcblwKK2VuY29kaW5nX3R5cGUgZmxhZyBjYW4gYmUgaW50ZXJwcmV0ZWQgd2l0aCBYNTA5X0FTTl9FTkNPRElORyBvclxuXAorUEtDU183X0FTTl9FTkNPRElORy4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK1B5U1NMX2VudW1fY3JscyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQoreworICAgIGNoYXIgKmt3bGlzdFtdID0geyJzdG9yZV9uYW1lIiwgTlVMTH07CisgICAgY2hhciAqc3RvcmVfbmFtZTsKKyAgICBIQ0VSVFNUT1JFIGhTdG9yZSA9IE5VTEw7CisgICAgUENDUkxfQ09OVEVYVCBwQ3JsQ3R4ID0gTlVMTDsKKyAgICBQeU9iamVjdCAqY3JsID0gTlVMTCwgKmVuYyA9IE5VTEwsICp0dXAgPSBOVUxMOworICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBOVUxMOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgInM6ZW51bV9jcmxzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrd2xpc3QsICZzdG9yZV9uYW1lKSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcmVzdWx0ID0gUHlMaXN0X05ldygwKTsKKyAgICBpZiAocmVzdWx0ID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGhTdG9yZSA9IENlcnRPcGVuU3lzdGVtU3RvcmUoKEhDUllQVFBST1YpTlVMTCwgc3RvcmVfbmFtZSk7CisgICAgaWYgKGhTdG9yZSA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoR2V0TGFzdEVycm9yKCkpOworICAgIH0KKworICAgIHdoaWxlIChwQ3JsQ3R4ID0gQ2VydEVudW1DUkxzSW5TdG9yZShoU3RvcmUsIHBDcmxDdHgpKSB7CisgICAgICAgIGNybCA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoKGNvbnN0IGNoYXIqKXBDcmxDdHgtPnBiQ3JsRW5jb2RlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcENybEN0eC0+Y2JDcmxFbmNvZGVkKTsKKyAgICAgICAgaWYgKCFjcmwpIHsKKyAgICAgICAgICAgIFB5X0NMRUFSKHJlc3VsdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAoKGVuYyA9IGNlcnRFbmNvZGluZ1R5cGUocENybEN0eC0+ZHdDZXJ0RW5jb2RpbmdUeXBlKSkgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlfQ0xFQVIocmVzdWx0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmICgodHVwID0gUHlUdXBsZV9OZXcoMikpID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5X0NMRUFSKHJlc3VsdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKHR1cCwgMCwgY3JsKTsKKyAgICAgICAgY3JsID0gTlVMTDsKKyAgICAgICAgUHlUdXBsZV9TRVRfSVRFTSh0dXAsIDEsIGVuYyk7CisgICAgICAgIGVuYyA9IE5VTEw7CisKKyAgICAgICAgaWYgKFB5TGlzdF9BcHBlbmQocmVzdWx0LCB0dXApIDwgMCkgeworICAgICAgICAgICAgUHlfQ0xFQVIocmVzdWx0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIFB5X0NMRUFSKHR1cCk7CisgICAgfQorICAgIGlmIChwQ3JsQ3R4KSB7CisgICAgICAgIC8qIGxvb3AgZW5kZWQgd2l0aCBhbiBlcnJvciwgbmVlZCB0byBjbGVhbiB1cCBjb250ZXh0IG1hbnVhbGx5ICovCisgICAgICAgIENlcnRGcmVlQ1JMQ29udGV4dChwQ3JsQ3R4KTsKKyAgICB9CisKKyAgICAvKiBJbiBlcnJvciBjYXNlcyBjZXJ0LCBlbmMgYW5kIHR1cCBtYXkgbm90IGJlIE5VTEwgKi8KKyAgICBQeV9YREVDUkVGKGNybCk7CisgICAgUHlfWERFQ1JFRihlbmMpOworICAgIFB5X1hERUNSRUYodHVwKTsKKworICAgIGlmICghQ2VydENsb3NlU3RvcmUoaFN0b3JlLCAwKSkgeworICAgICAgICAvKiBUaGlzIGVycm9yIGNhc2UgbWlnaHQgc2hhZG93IGFub3RoZXIgZXhjZXB0aW9uLiovCisgICAgICAgIFB5X1hERUNSRUYocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKEdldExhc3RFcnJvcigpKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworI2VuZGlmIC8qIF9NU0NfVkVSICovCiAKIC8qIExpc3Qgb2YgZnVuY3Rpb25zIGV4cG9ydGVkIGJ5IHRoaXMgbW9kdWxlLiAqLwogCkBAIC0yNjA0LDExICszNzQ5LDI1IEBACiAgICAgIFB5U1NMX1JBTkRfYnl0ZXNfZG9jfSwKICAgICB7IlJBTkRfcHNldWRvX2J5dGVzIiwgICBQeVNTTF9SQU5EX3BzZXVkb19ieXRlcywgTUVUSF9WQVJBUkdTLAogICAgICBQeVNTTF9SQU5EX3BzZXVkb19ieXRlc19kb2N9LAorI2lmZGVmIEhBVkVfUkFORF9FR0QKICAgICB7IlJBTkRfZWdkIiwgICAgICAgICAgICBQeVNTTF9SQU5EX2VnZCwgTUVUSF9WQVJBUkdTLAogICAgICBQeVNTTF9SQU5EX2VnZF9kb2N9LAorI2VuZGlmCiAgICAgeyJSQU5EX3N0YXR1cyIsICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5U1NMX1JBTkRfc3RhdHVzLCBNRVRIX05PQVJHUywKICAgICAgUHlTU0xfUkFORF9zdGF0dXNfZG9jfSwKICNlbmRpZgorICAgIHsiZ2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzIiwgKFB5Q0Z1bmN0aW9uKVB5U1NMX2dldF9kZWZhdWx0X3ZlcmlmeV9wYXRocywKKyAgICAgTUVUSF9OT0FSR1MsIFB5U1NMX2dldF9kZWZhdWx0X3ZlcmlmeV9wYXRoc19kb2N9LAorI2lmZGVmIF9NU0NfVkVSCisgICAgeyJlbnVtX2NlcnRpZmljYXRlcyIsIChQeUNGdW5jdGlvbilQeVNTTF9lbnVtX2NlcnRpZmljYXRlcywKKyAgICAgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywgUHlTU0xfZW51bV9jZXJ0aWZpY2F0ZXNfZG9jfSwKKyAgICB7ImVudW1fY3JscyIsIChQeUNGdW5jdGlvbilQeVNTTF9lbnVtX2NybHMsCisgICAgIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsIFB5U1NMX2VudW1fY3Jsc19kb2N9LAorI2VuZGlmCisgICAgeyJ0eHQyb2JqIiwgKFB5Q0Z1bmN0aW9uKVB5U1NMX3R4dDJvYmosCisgICAgIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsIFB5U1NMX3R4dDJvYmpfZG9jfSwKKyAgICB7Im5pZDJvYmoiLCAoUHlDRnVuY3Rpb24pUHlTU0xfbmlkMm9iaiwKKyAgICAgTUVUSF9WQVJBUkdTLCBQeVNTTF9uaWQyb2JqX2RvY30sCiAgICAge05VTEwsICAgICAgICAgICAgICAgICAgTlVMTH0gICAgICAgICAgICAvKiBTZW50aW5lbCAqLwogfTsKIApAQCAtMjY2OSwxMCArMzgyOCwxMSBAQAogCiAgICAgaWYgKF9zc2xfbG9ja3MgPT0gTlVMTCkgewogICAgICAgICBfc3NsX2xvY2tzX2NvdW50ID0gQ1JZUFRPX251bV9sb2NrcygpOwotICAgICAgICBfc3NsX2xvY2tzID0gKFB5VGhyZWFkX3R5cGVfbG9jayAqKQotICAgICAgICAgICAgbWFsbG9jKHNpemVvZihQeVRocmVhZF90eXBlX2xvY2spICogX3NzbF9sb2Nrc19jb3VudCk7Ci0gICAgICAgIGlmIChfc3NsX2xvY2tzID09IE5VTEwpCisgICAgICAgIF9zc2xfbG9ja3MgPSBQeU1lbV9OZXcoUHlUaHJlYWRfdHlwZV9sb2NrLCBfc3NsX2xvY2tzX2NvdW50KTsKKyAgICAgICAgaWYgKF9zc2xfbG9ja3MgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CiAgICAgICAgIG1lbXNldChfc3NsX2xvY2tzLCAwLAogICAgICAgICAgICAgICAgc2l6ZW9mKFB5VGhyZWFkX3R5cGVfbG9jaykgKiBfc3NsX2xvY2tzX2NvdW50KTsKICAgICAgICAgZm9yIChpID0gMDsgIGkgPCBfc3NsX2xvY2tzX2NvdW50OyAgaSsrKSB7CkBAIC0yNjgyLDcgKzM4NDIsNyBAQAogICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7ICBqIDwgaTsgIGorKykgewogICAgICAgICAgICAgICAgICAgICBQeVRocmVhZF9mcmVlX2xvY2soX3NzbF9sb2Nrc1tqXSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGZyZWUoX3NzbF9sb2Nrcyk7CisgICAgICAgICAgICAgICAgUHlNZW1fRnJlZShfc3NsX2xvY2tzKTsKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMjgzNiwxOCArMzk5Niw5MCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBZX1NTTF9DRVJUX09QVElPTkFMKTsKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQ0VSVF9SRVFVSVJFRCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFlfU1NMX0NFUlRfUkVRVUlSRUQpOworICAgIC8qIENSTCB2ZXJpZmljYXRpb24gZm9yIHZlcmlmaWNhdGlvbl9mbGFncyAqLworICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJWRVJJRllfREVGQVVMVCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCk7CisgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlZFUklGWV9DUkxfQ0hFQ0tfTEVBRiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWDUwOV9WX0ZMQUdfQ1JMX0NIRUNLKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVkVSSUZZX0NSTF9DSEVDS19DSEFJTiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWDUwOV9WX0ZMQUdfQ1JMX0NIRUNLfFg1MDlfVl9GTEFHX0NSTF9DSEVDS19BTEwpOworICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJWRVJJRllfWDUwOV9TVFJJQ1QiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFg1MDlfVl9GTEFHX1g1MDlfU1RSSUNUKTsKKyNpZmRlZiBYNTA5X1ZfRkxBR19UUlVTVEVEX0ZJUlNUCisgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlZFUklGWV9YNTA5X1RSVVNURURfRklSU1QiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFg1MDlfVl9GTEFHX1RSVVNURURfRklSU1QpOworI2VuZGlmCisKKyAgICAvKiBBbGVydCBEZXNjcmlwdGlvbnMgZnJvbSBzc2wuaCAqLworICAgIC8qIG5vdGUgUkVTRVJWRUQgY29uc3RhbnRzIG5vIGxvbmdlciBpbnRlbmRlZCBmb3IgdXNlIGhhdmUgYmVlbiByZW1vdmVkICovCisgICAgLyogaHR0cDovL3d3dy5pYW5hLm9yZy9hc3NpZ25tZW50cy90bHMtcGFyYW1ldGVycy90bHMtcGFyYW1ldGVycy54bWwjdGxzLXBhcmFtZXRlcnMtNiAqLworCisjZGVmaW5lIEFERF9BRF9DT05TVEFOVChzKSBcCisgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFMRVJUX0RFU0NSSVBUSU9OXyIjcywgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNTTF9BRF8jI3MpCisKKyAgICBBRERfQURfQ09OU1RBTlQoQ0xPU0VfTk9USUZZKTsKKyAgICBBRERfQURfQ09OU1RBTlQoVU5FWFBFQ1RFRF9NRVNTQUdFKTsKKyAgICBBRERfQURfQ09OU1RBTlQoQkFEX1JFQ09SRF9NQUMpOworICAgIEFERF9BRF9DT05TVEFOVChSRUNPUkRfT1ZFUkZMT1cpOworICAgIEFERF9BRF9DT05TVEFOVChERUNPTVBSRVNTSU9OX0ZBSUxVUkUpOworICAgIEFERF9BRF9DT05TVEFOVChIQU5EU0hBS0VfRkFJTFVSRSk7CisgICAgQUREX0FEX0NPTlNUQU5UKEJBRF9DRVJUSUZJQ0FURSk7CisgICAgQUREX0FEX0NPTlNUQU5UKFVOU1VQUE9SVEVEX0NFUlRJRklDQVRFKTsKKyAgICBBRERfQURfQ09OU1RBTlQoQ0VSVElGSUNBVEVfUkVWT0tFRCk7CisgICAgQUREX0FEX0NPTlNUQU5UKENFUlRJRklDQVRFX0VYUElSRUQpOworICAgIEFERF9BRF9DT05TVEFOVChDRVJUSUZJQ0FURV9VTktOT1dOKTsKKyAgICBBRERfQURfQ09OU1RBTlQoSUxMRUdBTF9QQVJBTUVURVIpOworICAgIEFERF9BRF9DT05TVEFOVChVTktOT1dOX0NBKTsKKyAgICBBRERfQURfQ09OU1RBTlQoQUNDRVNTX0RFTklFRCk7CisgICAgQUREX0FEX0NPTlNUQU5UKERFQ09ERV9FUlJPUik7CisgICAgQUREX0FEX0NPTlNUQU5UKERFQ1JZUFRfRVJST1IpOworICAgIEFERF9BRF9DT05TVEFOVChQUk9UT0NPTF9WRVJTSU9OKTsKKyAgICBBRERfQURfQ09OU1RBTlQoSU5TVUZGSUNJRU5UX1NFQ1VSSVRZKTsKKyAgICBBRERfQURfQ09OU1RBTlQoSU5URVJOQUxfRVJST1IpOworICAgIEFERF9BRF9DT05TVEFOVChVU0VSX0NBTkNFTExFRCk7CisgICAgQUREX0FEX0NPTlNUQU5UKE5PX1JFTkVHT1RJQVRJT04pOworICAgIC8qIE5vdCBhbGwgY29uc3RhbnRzIGFyZSBpbiBvbGQgT3BlblNTTCB2ZXJzaW9ucyAqLworI2lmZGVmIFNTTF9BRF9VTlNVUFBPUlRFRF9FWFRFTlNJT04KKyAgICBBRERfQURfQ09OU1RBTlQoVU5TVVBQT1JURURfRVhURU5TSU9OKTsKKyNlbmRpZgorI2lmZGVmIFNTTF9BRF9DRVJUSUZJQ0FURV9VTk9CVEFJTkFCTEUKKyAgICBBRERfQURfQ09OU1RBTlQoQ0VSVElGSUNBVEVfVU5PQlRBSU5BQkxFKTsKKyNlbmRpZgorI2lmZGVmIFNTTF9BRF9VTlJFQ09HTklaRURfTkFNRQorICAgIEFERF9BRF9DT05TVEFOVChVTlJFQ09HTklaRURfTkFNRSk7CisjZW5kaWYKKyNpZmRlZiBTU0xfQURfQkFEX0NFUlRJRklDQVRFX1NUQVRVU19SRVNQT05TRQorICAgIEFERF9BRF9DT05TVEFOVChCQURfQ0VSVElGSUNBVEVfU1RBVFVTX1JFU1BPTlNFKTsKKyNlbmRpZgorI2lmZGVmIFNTTF9BRF9CQURfQ0VSVElGSUNBVEVfSEFTSF9WQUxVRQorICAgIEFERF9BRF9DT05TVEFOVChCQURfQ0VSVElGSUNBVEVfSEFTSF9WQUxVRSk7CisjZW5kaWYKKyNpZmRlZiBTU0xfQURfVU5LTk9XTl9QU0tfSURFTlRJVFkKKyAgICBBRERfQURfQ09OU1RBTlQoVU5LTk9XTl9QU0tfSURFTlRJVFkpOworI2VuZGlmCisKKyN1bmRlZiBBRERfQURfQ09OU1RBTlQKIAogICAgIC8qIHByb3RvY29sIHZlcnNpb25zICovCiAjaWZuZGVmIE9QRU5TU0xfTk9fU1NMMgogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQUk9UT0NPTF9TU0x2MiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFlfU1NMX1ZFUlNJT05fU1NMMik7CiAjZW5kaWYKKyNpZm5kZWYgT1BFTlNTTF9OT19TU0wzCiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBST1RPQ09MX1NTTHYzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQWV9TU0xfVkVSU0lPTl9TU0wzKTsKKyNlbmRpZgogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQUk9UT0NPTF9TU0x2MjMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBZX1NTTF9WRVJTSU9OX1NTTDIzKTsKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUFJPVE9DT0xfVExTdjEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBZX1NTTF9WRVJTSU9OX1RMUzEpOworI2lmIEhBVkVfVExTdjFfMgorICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQUk9UT0NPTF9UTFN2MV8xIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQWV9TU0xfVkVSU0lPTl9UTFMxXzEpOworICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQUk9UT0NPTF9UTFN2MV8yIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQWV9TU0xfVkVSU0lPTl9UTFMxXzIpOworI2VuZGlmCiAKICAgICAvKiBwcm90b2NvbCBvcHRpb25zICovCiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk9QX0FMTCIsCkBAIC0yODU1LDYgKzQwODcsMTAgQEAKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiT1BfTk9fU1NMdjIiLCBTU0xfT1BfTk9fU1NMdjIpOwogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJPUF9OT19TU0x2MyIsIFNTTF9PUF9OT19TU0x2Myk7CiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk9QX05PX1RMU3YxIiwgU1NMX09QX05PX1RMU3YxKTsKKyNpZiBIQVZFX1RMU3YxXzIKKyAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiT1BfTk9fVExTdjFfMSIsIFNTTF9PUF9OT19UTFN2MV8xKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiT1BfTk9fVExTdjFfMiIsIFNTTF9PUF9OT19UTFN2MV8yKTsKKyNlbmRpZgogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJPUF9DSVBIRVJfU0VSVkVSX1BSRUZFUkVOQ0UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNTTF9PUF9DSVBIRVJfU0VSVkVSX1BSRUZFUkVOQ0UpOwogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJPUF9TSU5HTEVfREhfVVNFIiwgU1NMX09QX1NJTkdMRV9ESF9VU0UpOwpAQCAtMjg2Niw3ICs0MTAyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTU0xfT1BfTk9fQ09NUFJFU1NJT04pOwogI2VuZGlmCiAKLSNpZmRlZiBTU0xfQ1RSTF9TRVRfVExTRVhUX0hPU1ROQU1FCisjaWYgSEFWRV9TTkkKICAgICByID0gUHlfVHJ1ZTsKICNlbHNlCiAgICAgciA9IFB5X0ZhbHNlOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fc3NsX2RhdGEuaCBiL01vZHVsZXMvX3NzbF9kYXRhLmgKaW5kZXggODFhOGQ3Yi4uODUxNjViOSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fc3NsX2RhdGEuaAorKysgYi9Nb2R1bGVzL19zc2xfZGF0YS5oCkBAIC0xLDUgKzEsNSBAQAogLyogRmlsZSBnZW5lcmF0ZWQgYnkgVG9vbHMvc3NsL21ha2Vfc3NsX2RhdGEucHkgKi8KLS8qIEdlbmVyYXRlZCBvbiAyMDEyLTA1LTE2VDIzOjU2OjQwLjk4MTM4MiAqLworLyogR2VuZXJhdGVkIG9uIDIwMTUtMDEtMTdUMjA6MzM6NDMuMzc3NDUzICovCiAKIHN0YXRpYyBzdHJ1Y3QgcHlfc3NsX2xpYnJhcnlfY29kZSBsaWJyYXJ5X2NvZGVzW10gPSB7CiAgICAgeyJQRU0iLCBFUlJfTElCX1BFTX0sCkBAIC0xNzksNiArMTc5LDExIEBACiAgICNlbHNlCiAgICAgeyJCQURfQ0hFQ0tTVU0iLCBFUlJfTElCX1NTTCwgMTA0fSwKICAgI2VuZGlmCisgICNpZmRlZiBTU0xfUl9CQURfREFUQQorICAgIHsiQkFEX0RBVEEiLCBFUlJfTElCX1NTTCwgU1NMX1JfQkFEX0RBVEF9LAorICAjZWxzZQorICAgIHsiQkFEX0RBVEEiLCBFUlJfTElCX1NTTCwgMzkwfSwKKyAgI2VuZGlmCiAgICNpZmRlZiBTU0xfUl9CQURfREFUQV9SRVRVUk5FRF9CWV9DQUxMQkFDSwogICAgIHsiQkFEX0RBVEFfUkVUVVJORURfQllfQ0FMTEJBQ0siLCBFUlJfTElCX1NTTCwgU1NMX1JfQkFEX0RBVEFfUkVUVVJORURfQllfQ0FMTEJBQ0t9LAogICAjZWxzZQpAQCAtMzA5LDYgKzMxNCw0NiBAQAogICAjZWxzZQogICAgIHsiQkFEX1NJR05BVFVSRSIsIEVSUl9MSUJfU1NMLCAxMjN9LAogICAjZW5kaWYKKyAgI2lmZGVmIFNTTF9SX0JBRF9TUlBfQV9MRU5HVEgKKyAgICB7IkJBRF9TUlBfQV9MRU5HVEgiLCBFUlJfTElCX1NTTCwgU1NMX1JfQkFEX1NSUF9BX0xFTkdUSH0sCisgICNlbHNlCisgICAgeyJCQURfU1JQX0FfTEVOR1RIIiwgRVJSX0xJQl9TU0wsIDM0N30sCisgICNlbmRpZgorICAjaWZkZWYgU1NMX1JfQkFEX1NSUF9CX0xFTkdUSAorICAgIHsiQkFEX1NSUF9CX0xFTkdUSCIsIEVSUl9MSUJfU1NMLCBTU0xfUl9CQURfU1JQX0JfTEVOR1RIfSwKKyAgI2Vsc2UKKyAgICB7IkJBRF9TUlBfQl9MRU5HVEgiLCBFUlJfTElCX1NTTCwgMzQ4fSwKKyAgI2VuZGlmCisgICNpZmRlZiBTU0xfUl9CQURfU1JQX0dfTEVOR1RICisgICAgeyJCQURfU1JQX0dfTEVOR1RIIiwgRVJSX0xJQl9TU0wsIFNTTF9SX0JBRF9TUlBfR19MRU5HVEh9LAorICAjZWxzZQorICAgIHsiQkFEX1NSUF9HX0xFTkdUSCIsIEVSUl9MSUJfU1NMLCAzNDl9LAorICAjZW5kaWYKKyAgI2lmZGVmIFNTTF9SX0JBRF9TUlBfTl9MRU5HVEgKKyAgICB7IkJBRF9TUlBfTl9MRU5HVEgiLCBFUlJfTElCX1NTTCwgU1NMX1JfQkFEX1NSUF9OX0xFTkdUSH0sCisgICNlbHNlCisgICAgeyJCQURfU1JQX05fTEVOR1RIIiwgRVJSX0xJQl9TU0wsIDM1MH0sCisgICNlbmRpZgorICAjaWZkZWYgU1NMX1JfQkFEX1NSUF9QQVJBTUVURVJTCisgICAgeyJCQURfU1JQX1BBUkFNRVRFUlMiLCBFUlJfTElCX1NTTCwgU1NMX1JfQkFEX1NSUF9QQVJBTUVURVJTfSwKKyAgI2Vsc2UKKyAgICB7IkJBRF9TUlBfUEFSQU1FVEVSUyIsIEVSUl9MSUJfU1NMLCAzNzF9LAorICAjZW5kaWYKKyAgI2lmZGVmIFNTTF9SX0JBRF9TUlBfU19MRU5HVEgKKyAgICB7IkJBRF9TUlBfU19MRU5HVEgiLCBFUlJfTElCX1NTTCwgU1NMX1JfQkFEX1NSUF9TX0xFTkdUSH0sCisgICNlbHNlCisgICAgeyJCQURfU1JQX1NfTEVOR1RIIiwgRVJSX0xJQl9TU0wsIDM1MX0sCisgICNlbmRpZgorICAjaWZkZWYgU1NMX1JfQkFEX1NSVFBfTUtJX1ZBTFVFCisgICAgeyJCQURfU1JUUF9NS0lfVkFMVUUiLCBFUlJfTElCX1NTTCwgU1NMX1JfQkFEX1NSVFBfTUtJX1ZBTFVFfSwKKyAgI2Vsc2UKKyAgICB7IkJBRF9TUlRQX01LSV9WQUxVRSIsIEVSUl9MSUJfU1NMLCAzNTJ9LAorICAjZW5kaWYKKyAgI2lmZGVmIFNTTF9SX0JBRF9TUlRQX1BST1RFQ1RJT05fUFJPRklMRV9MSVNUCisgICAgeyJCQURfU1JUUF9QUk9URUNUSU9OX1BST0ZJTEVfTElTVCIsIEVSUl9MSUJfU1NMLCBTU0xfUl9CQURfU1JUUF9QUk9URUNUSU9OX1BST0ZJTEVfTElTVH0sCisgICNlbHNlCisgICAgeyJCQURfU1JUUF9QUk9URUNUSU9OX1BST0ZJTEVfTElTVCIsIEVSUl9MSUJfU1NMLCAzNTN9LAorICAjZW5kaWYKICAgI2lmZGVmIFNTTF9SX0JBRF9TU0xfRklMRVRZUEUKICAgICB7IkJBRF9TU0xfRklMRVRZUEUiLCBFUlJfTElCX1NTTCwgU1NMX1JfQkFEX1NTTF9GSUxFVFlQRX0sCiAgICNlbHNlCkBAIC0zMjQsNiArMzY5LDExIEBACiAgICNlbHNlCiAgICAgeyJCQURfU1RBVEUiLCBFUlJfTElCX1NTTCwgMTI2fSwKICAgI2VuZGlmCisgICNpZmRlZiBTU0xfUl9CQURfVkFMVUUKKyAgICB7IkJBRF9WQUxVRSIsIEVSUl9MSUJfU1NMLCBTU0xfUl9CQURfVkFMVUV9LAorICAjZWxzZQorICAgIHsiQkFEX1ZBTFVFIiwgRVJSX0xJQl9TU0wsIDM4NH0sCisgICNlbmRpZgogICAjaWZkZWYgU1NMX1JfQkFEX1dSSVRFX1JFVFJZCiAgICAgeyJCQURfV1JJVEVfUkVUUlkiLCBFUlJfTElCX1NTTCwgU1NMX1JfQkFEX1dSSVRFX1JFVFJZfSwKICAgI2Vsc2UKQEAgLTM1NCw2ICs0MDQsMTYgQEAKICAgI2Vsc2UKICAgICB7IkNBX0ROX1RPT19MT05HIiwgRVJSX0xJQl9TU0wsIDEzMn0sCiAgICNlbmRpZgorICAjaWZkZWYgU1NMX1JfQ0FfS0VZX1RPT19TTUFMTAorICAgIHsiQ0FfS0VZX1RPT19TTUFMTCIsIEVSUl9MSUJfU1NMLCBTU0xfUl9DQV9LRVlfVE9PX1NNQUxMfSwKKyAgI2Vsc2UKKyAgICB7IkNBX0tFWV9UT09fU01BTEwiLCBFUlJfTElCX1NTTCwgMzk3fSwKKyAgI2VuZGlmCisgICNpZmRlZiBTU0xfUl9DQV9NRF9UT09fV0VBSworICAgIHsiQ0FfTURfVE9PX1dFQUsiLCBFUlJfTElCX1NTTCwgU1NMX1JfQ0FfTURfVE9PX1dFQUt9LAorICAjZWxzZQorICAgIHsiQ0FfTURfVE9PX1dFQUsiLCBFUlJfTElCX1NTTCwgMzk4fSwKKyAgI2VuZGlmCiAgICNpZmRlZiBTU0xfUl9DQ1NfUkVDRUlWRURfRUFSTFkKICAgICB7IkNDU19SRUNFSVZFRF9FQVJMWSIsIEVSUl9MSUJfU1NMLCBTU0xfUl9DQ1NfUkVDRUlWRURfRUFSTFl9LAogICAjZWxzZQpAQCAtMzY0LDYgKzQyNCwxMSBAQAogICAjZWxzZQogICAgIHsiQ0VSVElGSUNBVEVfVkVSSUZZX0ZBSUxFRCIsIEVSUl9MSUJfU1NMLCAxMzR9LAogICAjZW5kaWYKKyAgI2lmZGVmIFNTTF9SX0NFUlRfQ0JfRVJST1IKKyAgICB7IkNFUlRfQ0JfRVJST1IiLCBFUlJfTElCX1NTTCwgU1NMX1JfQ0VSVF9DQl9FUlJPUn0sCisgICNlbHNlCisgICAgeyJDRVJUX0NCX0VSUk9SIiwgRVJSX0xJQl9TU0wsIDM3N30sCisgICNlbmRpZgogICAjaWZkZWYgU1NMX1JfQ0VSVF9MRU5HVEhfTUlTTUFUQ0gKICAgICB7IkNFUlRfTEVOR1RIX01JU01BVENIIiwgRVJSX0xJQl9TU0wsIFNTTF9SX0NFUlRfTEVOR1RIX01JU01BVENIfSwKICAgI2Vsc2UKQEAgLTQ1NCw2ICs1MTksMTEgQEAKICAgI2Vsc2UKICAgICB7IkRFQ1JZUFRJT05fRkFJTEVEX09SX0JBRF9SRUNPUkRfTUFDIiwgRVJSX0xJQl9TU0wsIDI4MX0sCiAgICNlbmRpZgorICAjaWZkZWYgU1NMX1JfREhfS0VZX1RPT19TTUFMTAorICAgIHsiREhfS0VZX1RPT19TTUFMTCIsIEVSUl9MSUJfU1NMLCBTU0xfUl9ESF9LRVlfVE9PX1NNQUxMfSwKKyAgI2Vsc2UKKyAgICB7IkRIX0tFWV9UT09fU01BTEwiLCBFUlJfTElCX1NTTCwgMzk0fSwKKyAgI2VuZGlmCiAgICNpZmRlZiBTU0xfUl9ESF9QVUJMSUNfVkFMVUVfTEVOR1RIX0lTX1dST05HCiAgICAgeyJESF9QVUJMSUNfVkFMVUVfTEVOR1RIX0lTX1dST05HIiwgRVJSX0xJQl9TU0wsIFNTTF9SX0RIX1BVQkxJQ19WQUxVRV9MRU5HVEhfSVNfV1JPTkd9LAogICAjZWxzZQpAQCAtNDk0LDExICs1NjQsMjYgQEAKICAgI2Vsc2UKICAgICB7IkVDQ19DRVJUX1NIT1VMRF9IQVZFX1NIQTFfU0lHTkFUVVJFIiwgRVJSX0xJQl9TU0wsIDMyM30sCiAgICNlbmRpZgorICAjaWZkZWYgU1NMX1JfRUNESF9SRVFVSVJFRF9GT1JfU1VJVEVCX01PREUKKyAgICB7IkVDREhfUkVRVUlSRURfRk9SX1NVSVRFQl9NT0RFIiwgRVJSX0xJQl9TU0wsIFNTTF9SX0VDREhfUkVRVUlSRURfRk9SX1NVSVRFQl9NT0RFfSwKKyAgI2Vsc2UKKyAgICB7IkVDREhfUkVRVUlSRURfRk9SX1NVSVRFQl9NT0RFIiwgRVJSX0xJQl9TU0wsIDM3NH0sCisgICNlbmRpZgogICAjaWZkZWYgU1NMX1JfRUNHUk9VUF9UT09fTEFSR0VfRk9SX0NJUEhFUgogICAgIHsiRUNHUk9VUF9UT09fTEFSR0VfRk9SX0NJUEhFUiIsIEVSUl9MSUJfU1NMLCBTU0xfUl9FQ0dST1VQX1RPT19MQVJHRV9GT1JfQ0lQSEVSfSwKICAgI2Vsc2UKICAgICB7IkVDR1JPVVBfVE9PX0xBUkdFX0ZPUl9DSVBIRVIiLCBFUlJfTElCX1NTTCwgMzEwfSwKICAgI2VuZGlmCisgICNpZmRlZiBTU0xfUl9FRV9LRVlfVE9PX1NNQUxMCisgICAgeyJFRV9LRVlfVE9PX1NNQUxMIiwgRVJSX0xJQl9TU0wsIFNTTF9SX0VFX0tFWV9UT09fU01BTEx9LAorICAjZWxzZQorICAgIHsiRUVfS0VZX1RPT19TTUFMTCIsIEVSUl9MSUJfU1NMLCAzOTl9LAorICAjZW5kaWYKKyAgI2lmZGVmIFNTTF9SX0VNUFRZX1NSVFBfUFJPVEVDVElPTl9QUk9GSUxFX0xJU1QKKyAgICB7IkVNUFRZX1NSVFBfUFJPVEVDVElPTl9QUk9GSUxFX0xJU1QiLCBFUlJfTElCX1NTTCwgU1NMX1JfRU1QVFlfU1JUUF9QUk9URUNUSU9OX1BST0ZJTEVfTElTVH0sCisgICNlbHNlCisgICAgeyJFTVBUWV9TUlRQX1BST1RFQ1RJT05fUFJPRklMRV9MSVNUIiwgRVJSX0xJQl9TU0wsIDM1NH0sCisgICNlbmRpZgogICAjaWZkZWYgU1NMX1JfRU5DUllQVEVEX0xFTkdUSF9UT09fTE9ORwogICAgIHsiRU5DUllQVEVEX0xFTkdUSF9UT09fTE9ORyIsIEVSUl9MSUJfU1NMLCBTU0xfUl9FTkNSWVBURURfTEVOR1RIX1RPT19MT05HfSwKICAgI2Vsc2UKQEAgLTUyOSw2ICs2MTQsMTYgQEAKICAgI2Vsc2UKICAgICB7IkdPVF9BX0ZJTl9CRUZPUkVfQV9DQ1MiLCBFUlJfTElCX1NTTCwgMTU0fSwKICAgI2VuZGlmCisgICNpZmRlZiBTU0xfUl9HT1RfTkVYVF9QUk9UT19CRUZPUkVfQV9DQ1MKKyAgICB7IkdPVF9ORVhUX1BST1RPX0JFRk9SRV9BX0NDUyIsIEVSUl9MSUJfU1NMLCBTU0xfUl9HT1RfTkVYVF9QUk9UT19CRUZPUkVfQV9DQ1N9LAorICAjZWxzZQorICAgIHsiR09UX05FWFRfUFJPVE9fQkVGT1JFX0FfQ0NTIiwgRVJSX0xJQl9TU0wsIDM1NX0sCisgICNlbmRpZgorICAjaWZkZWYgU1NMX1JfR09UX05FWFRfUFJPVE9fV0lUSE9VVF9FWFRFTlNJT04KKyAgICB7IkdPVF9ORVhUX1BST1RPX1dJVEhPVVRfRVhURU5TSU9OIiwgRVJSX0xJQl9TU0wsIFNTTF9SX0dPVF9ORVhUX1BST1RPX1dJVEhPVVRfRVhURU5TSU9OfSwKKyAgI2Vsc2UKKyAgICB7IkdPVF9ORVhUX1BST1RPX1dJVEhPVVRfRVhURU5TSU9OIiwgRVJSX0xJQl9TU0wsIDM1Nn0sCisgICNlbmRpZgogICAjaWZkZWYgU1NMX1JfSFRUUFNfUFJPWFlfUkVRVUVTVAogICAgIHsiSFRUUFNfUFJPWFlfUkVRVUVTVCIsIEVSUl9MSUJfU1NMLCBTU0xfUl9IVFRQU19QUk9YWV9SRVFVRVNUfSwKICAgI2Vsc2UKQEAgLTU0NCw2ICs2MzksMTYgQEAKICAgI2Vsc2UKICAgICB7IklMTEVHQUxfUEFERElORyIsIEVSUl9MSUJfU1NMLCAyODN9LAogICAjZW5kaWYKKyAgI2lmZGVmIFNTTF9SX0lMTEVHQUxfU1VJVEVCX0RJR0VTVAorICAgIHsiSUxMRUdBTF9TVUlURUJfRElHRVNUIiwgRVJSX0xJQl9TU0wsIFNTTF9SX0lMTEVHQUxfU1VJVEVCX0RJR0VTVH0sCisgICNlbHNlCisgICAgeyJJTExFR0FMX1NVSVRFQl9ESUdFU1QiLCBFUlJfTElCX1NTTCwgMzgwfSwKKyAgI2VuZGlmCisgICNpZmRlZiBTU0xfUl9JTkFQUFJPUFJJQVRFX0ZBTExCQUNLCisgICAgeyJJTkFQUFJPUFJJQVRFX0ZBTExCQUNLIiwgRVJSX0xJQl9TU0wsIFNTTF9SX0lOQVBQUk9QUklBVEVfRkFMTEJBQ0t9LAorICAjZWxzZQorICAgIHsiSU5BUFBST1BSSUFURV9GQUxMQkFDSyIsIEVSUl9MSUJfU1NMLCAzNzN9LAorICAjZW5kaWYKICAgI2lmZGVmIFNTTF9SX0lOQ09OU0lTVEVOVF9DT01QUkVTU0lPTgogICAgIHsiSU5DT05TSVNURU5UX0NPTVBSRVNTSU9OIiwgRVJSX0xJQl9TU0wsIFNTTF9SX0lOQ09OU0lTVEVOVF9DT01QUkVTU0lPTn0sCiAgICNlbHNlCkBAIC01NjQsMTEgKzY2OSwyNiBAQAogICAjZWxzZQogICAgIHsiSU5WQUxJRF9DT01QUkVTU0lPTl9BTEdPUklUSE0iLCBFUlJfTElCX1NTTCwgMzQxfSwKICAgI2VuZGlmCisgICNpZmRlZiBTU0xfUl9JTlZBTElEX05VTExfQ01EX05BTUUKKyAgICB7IklOVkFMSURfTlVMTF9DTURfTkFNRSIsIEVSUl9MSUJfU1NMLCBTU0xfUl9JTlZBTElEX05VTExfQ01EX05BTUV9LAorICAjZWxzZQorICAgIHsiSU5WQUxJRF9OVUxMX0NNRF9OQU1FIiwgRVJSX0xJQl9TU0wsIDM4NX0sCisgICNlbmRpZgogICAjaWZkZWYgU1NMX1JfSU5WQUxJRF9QVVJQT1NFCiAgICAgeyJJTlZBTElEX1BVUlBPU0UiLCBFUlJfTElCX1NTTCwgU1NMX1JfSU5WQUxJRF9QVVJQT1NFfSwKICAgI2Vsc2UKICAgICB7IklOVkFMSURfUFVSUE9TRSIsIEVSUl9MSUJfU1NMLCAyNzh9LAogICAjZW5kaWYKKyAgI2lmZGVmIFNTTF9SX0lOVkFMSURfU0VSVkVSSU5GT19EQVRBCisgICAgeyJJTlZBTElEX1NFUlZFUklORk9fREFUQSIsIEVSUl9MSUJfU1NMLCBTU0xfUl9JTlZBTElEX1NFUlZFUklORk9fREFUQX0sCisgICNlbHNlCisgICAgeyJJTlZBTElEX1NFUlZFUklORk9fREFUQSIsIEVSUl9MSUJfU1NMLCAzODh9LAorICAjZW5kaWYKKyAgI2lmZGVmIFNTTF9SX0lOVkFMSURfU1JQX1VTRVJOQU1FCisgICAgeyJJTlZBTElEX1NSUF9VU0VSTkFNRSIsIEVSUl9MSUJfU1NMLCBTU0xfUl9JTlZBTElEX1NSUF9VU0VSTkFNRX0sCisgICNlbHNlCisgICAgeyJJTlZBTElEX1NSUF9VU0VSTkFNRSIsIEVSUl9MSUJfU1NMLCAzNTd9LAorICAjZW5kaWYKICAgI2lmZGVmIFNTTF9SX0lOVkFMSURfU1RBVFVTX1JFU1BPTlNFCiAgICAgeyJJTlZBTElEX1NUQVRVU19SRVNQT05TRSIsIEVSUl9MSUJfU1NMLCBTU0xfUl9JTlZBTElEX1NUQVRVU19SRVNQT05TRX0sCiAgICNlbHNlCkBAIC02ODksNiArODA5LDE2IEBACiAgICNlbHNlCiAgICAgeyJNSVNTSU5HX0RTQV9TSUdOSU5HX0NFUlQiLCBFUlJfTElCX1NTTCwgMTY1fSwKICAgI2VuZGlmCisgICNpZmRlZiBTU0xfUl9NSVNTSU5HX0VDREhfQ0VSVAorICAgIHsiTUlTU0lOR19FQ0RIX0NFUlQiLCBFUlJfTElCX1NTTCwgU1NMX1JfTUlTU0lOR19FQ0RIX0NFUlR9LAorICAjZWxzZQorICAgIHsiTUlTU0lOR19FQ0RIX0NFUlQiLCBFUlJfTElCX1NTTCwgMzgyfSwKKyAgI2VuZGlmCisgICNpZmRlZiBTU0xfUl9NSVNTSU5HX0VDRFNBX1NJR05JTkdfQ0VSVAorICAgIHsiTUlTU0lOR19FQ0RTQV9TSUdOSU5HX0NFUlQiLCBFUlJfTElCX1NTTCwgU1NMX1JfTUlTU0lOR19FQ0RTQV9TSUdOSU5HX0NFUlR9LAorICAjZWxzZQorICAgIHsiTUlTU0lOR19FQ0RTQV9TSUdOSU5HX0NFUlQiLCBFUlJfTElCX1NTTCwgMzgxfSwKKyAgI2VuZGlmCiAgICNpZmRlZiBTU0xfUl9NSVNTSU5HX0VYUE9SVF9UTVBfREhfS0VZCiAgICAgeyJNSVNTSU5HX0VYUE9SVF9UTVBfREhfS0VZIiwgRVJSX0xJQl9TU0wsIFNTTF9SX01JU1NJTkdfRVhQT1JUX1RNUF9ESF9LRVl9LAogICAjZWxzZQpAQCAtNzE0LDYgKzg0NCwxMSBAQAogICAjZWxzZQogICAgIHsiTUlTU0lOR19SU0FfU0lHTklOR19DRVJUIiwgRVJSX0xJQl9TU0wsIDE3MH0sCiAgICNlbmRpZgorICAjaWZkZWYgU1NMX1JfTUlTU0lOR19TUlBfUEFSQU0KKyAgICB7Ik1JU1NJTkdfU1JQX1BBUkFNIiwgRVJSX0xJQl9TU0wsIFNTTF9SX01JU1NJTkdfU1JQX1BBUkFNfSwKKyAgI2Vsc2UKKyAgICB7Ik1JU1NJTkdfU1JQX1BBUkFNIiwgRVJSX0xJQl9TU0wsIDM1OH0sCisgICNlbmRpZgogICAjaWZkZWYgU1NMX1JfTUlTU0lOR19UTVBfREhfS0VZCiAgICAgeyJNSVNTSU5HX1RNUF9ESF9LRVkiLCBFUlJfTElCX1NTTCwgU1NMX1JfTUlTU0lOR19UTVBfREhfS0VZfSwKICAgI2Vsc2UKQEAgLTczOSw2ICs4NzQsMTEgQEAKICAgI2Vsc2UKICAgICB7Ik1JU1NJTkdfVkVSSUZZX01FU1NBR0UiLCBFUlJfTElCX1NTTCwgMTc0fSwKICAgI2VuZGlmCisgICNpZmRlZiBTU0xfUl9NVUxUSVBMRV9TR0NfUkVTVEFSVFMKKyAgICB7Ik1VTFRJUExFX1NHQ19SRVNUQVJUUyIsIEVSUl9MSUJfU1NMLCBTU0xfUl9NVUxUSVBMRV9TR0NfUkVTVEFSVFN9LAorICAjZWxzZQorICAgIHsiTVVMVElQTEVfU0dDX1JFU1RBUlRTIiwgRVJSX0xJQl9TU0wsIDM0Nn0sCisgICNlbmRpZgogICAjaWZkZWYgU1NMX1JfTk9OX1NTTFYyX0lOSVRJQUxfUEFDS0VUCiAgICAgeyJOT05fU1NMVjJfSU5JVElBTF9QQUNLRVQiLCBFUlJfTElCX1NTTCwgU1NMX1JfTk9OX1NTTFYyX0lOSVRJQUxfUEFDS0VUfSwKICAgI2Vsc2UKQEAgLTgxOSw2ICs5NTksMTEgQEAKICAgI2Vsc2UKICAgICB7Ik5PX01FVEhPRF9TUEVDSUZJRUQiLCBFUlJfTElCX1NTTCwgMTg4fSwKICAgI2VuZGlmCisgICNpZmRlZiBTU0xfUl9OT19QRU1fRVhURU5TSU9OUworICAgIHsiTk9fUEVNX0VYVEVOU0lPTlMiLCBFUlJfTElCX1NTTCwgU1NMX1JfTk9fUEVNX0VYVEVOU0lPTlN9LAorICAjZWxzZQorICAgIHsiTk9fUEVNX0VYVEVOU0lPTlMiLCBFUlJfTElCX1NTTCwgMzg5fSwKKyAgI2VuZGlmCiAgICNpZmRlZiBTU0xfUl9OT19QUklWQVRFS0VZCiAgICAgeyJOT19QUklWQVRFS0VZIiwgRVJSX0xJQl9TU0wsIFNTTF9SX05PX1BSSVZBVEVLRVl9LAogICAjZWxzZQpAQCAtODU0LDYgKzk5OSwxNiBAQAogICAjZWxzZQogICAgIHsiTk9fU0hBUkVEX0NJUEhFUiIsIEVSUl9MSUJfU1NMLCAxOTN9LAogICAjZW5kaWYKKyAgI2lmZGVmIFNTTF9SX05PX1NIQVJFRF9TSUdBVFVSRV9BTEdPUklUSE1TCisgICAgeyJOT19TSEFSRURfU0lHQVRVUkVfQUxHT1JJVEhNUyIsIEVSUl9MSUJfU1NMLCBTU0xfUl9OT19TSEFSRURfU0lHQVRVUkVfQUxHT1JJVEhNU30sCisgICNlbHNlCisgICAgeyJOT19TSEFSRURfU0lHQVRVUkVfQUxHT1JJVEhNUyIsIEVSUl9MSUJfU1NMLCAzNzZ9LAorICAjZW5kaWYKKyAgI2lmZGVmIFNTTF9SX05PX1NSVFBfUFJPRklMRVMKKyAgICB7Ik5PX1NSVFBfUFJPRklMRVMiLCBFUlJfTElCX1NTTCwgU1NMX1JfTk9fU1JUUF9QUk9GSUxFU30sCisgICNlbHNlCisgICAgeyJOT19TUlRQX1BST0ZJTEVTIiwgRVJSX0xJQl9TU0wsIDM1OX0sCisgICNlbmRpZgogICAjaWZkZWYgU1NMX1JfTk9fVkVSSUZZX0NBTExCQUNLCiAgICAgeyJOT19WRVJJRllfQ0FMTEJBQ0siLCBFUlJfTElCX1NTTCwgU1NMX1JfTk9fVkVSSUZZX0NBTExCQUNLfSwKICAgI2Vsc2UKQEAgLTg3OSw2ICsxMDM0LDE2IEBACiAgICNlbHNlCiAgICAgeyJPTERfU0VTU0lPTl9DT01QUkVTU0lPTl9BTEdPUklUSE1fTk9UX1JFVFVSTkVEIiwgRVJSX0xJQl9TU0wsIDM0NH0sCiAgICNlbmRpZgorICAjaWZkZWYgU1NMX1JfT05MWV9EVExTXzFfMl9BTExPV0VEX0lOX1NVSVRFQl9NT0RFCisgICAgeyJPTkxZX0RUTFNfMV8yX0FMTE9XRURfSU5fU1VJVEVCX01PREUiLCBFUlJfTElCX1NTTCwgU1NMX1JfT05MWV9EVExTXzFfMl9BTExPV0VEX0lOX1NVSVRFQl9NT0RFfSwKKyAgI2Vsc2UKKyAgICB7Ik9OTFlfRFRMU18xXzJfQUxMT1dFRF9JTl9TVUlURUJfTU9ERSIsIEVSUl9MSUJfU1NMLCAzODd9LAorICAjZW5kaWYKKyAgI2lmZGVmIFNTTF9SX09OTFlfVExTXzFfMl9BTExPV0VEX0lOX1NVSVRFQl9NT0RFCisgICAgeyJPTkxZX1RMU18xXzJfQUxMT1dFRF9JTl9TVUlURUJfTU9ERSIsIEVSUl9MSUJfU1NMLCBTU0xfUl9PTkxZX1RMU18xXzJfQUxMT1dFRF9JTl9TVUlURUJfTU9ERX0sCisgICNlbHNlCisgICAgeyJPTkxZX1RMU18xXzJfQUxMT1dFRF9JTl9TVUlURUJfTU9ERSIsIEVSUl9MSUJfU1NMLCAzNzl9LAorICAjZW5kaWYKICAgI2lmZGVmIFNTTF9SX09OTFlfVExTX0FMTE9XRURfSU5fRklQU19NT0RFCiAgICAgeyJPTkxZX1RMU19BTExPV0VEX0lOX0ZJUFNfTU9ERSIsIEVSUl9MSUJfU1NMLCBTU0xfUl9PTkxZX1RMU19BTExPV0VEX0lOX0ZJUFNfTU9ERX0sCiAgICNlbHNlCkBAIC05MzQsNiArMTA5OSwxNiBAQAogICAjZWxzZQogICAgIHsiUEVFUl9FUlJPUl9VTlNVUFBPUlRFRF9DRVJUSUZJQ0FURV9UWVBFIiwgRVJSX0xJQl9TU0wsIDIwNH0sCiAgICNlbmRpZgorICAjaWZkZWYgU1NMX1JfUEVNX05BTUVfQkFEX1BSRUZJWAorICAgIHsiUEVNX05BTUVfQkFEX1BSRUZJWCIsIEVSUl9MSUJfU1NMLCBTU0xfUl9QRU1fTkFNRV9CQURfUFJFRklYfSwKKyAgI2Vsc2UKKyAgICB7IlBFTV9OQU1FX0JBRF9QUkVGSVgiLCBFUlJfTElCX1NTTCwgMzkxfSwKKyAgI2VuZGlmCisgICNpZmRlZiBTU0xfUl9QRU1fTkFNRV9UT09fU0hPUlQKKyAgICB7IlBFTV9OQU1FX1RPT19TSE9SVCIsIEVSUl9MSUJfU1NMLCBTU0xfUl9QRU1fTkFNRV9UT09fU0hPUlR9LAorICAjZWxzZQorICAgIHsiUEVNX05BTUVfVE9PX1NIT1JUIiwgRVJSX0xJQl9TU0wsIDM5Mn0sCisgICNlbmRpZgogICAjaWZkZWYgU1NMX1JfUFJFX01BQ19MRU5HVEhfVE9PX0xPTkcKICAgICB7IlBSRV9NQUNfTEVOR1RIX1RPT19MT05HIiwgRVJSX0xJQl9TU0wsIFNTTF9SX1BSRV9NQUNfTEVOR1RIX1RPT19MT05HfSwKICAgI2Vsc2UKQEAgLTEwNjksMTEgKzEyNDQsMzYgQEAKICAgI2Vsc2UKICAgICB7IlNIT1JUX1JFQUQiLCBFUlJfTElCX1NTTCwgMjE5fSwKICAgI2VuZGlmCisgICNpZmRlZiBTU0xfUl9TSUdOQVRVUkVfQUxHT1JJVEhNU19FUlJPUgorICAgIHsiU0lHTkFUVVJFX0FMR09SSVRITVNfRVJST1IiLCBFUlJfTElCX1NTTCwgU1NMX1JfU0lHTkFUVVJFX0FMR09SSVRITVNfRVJST1J9LAorICAjZWxzZQorICAgIHsiU0lHTkFUVVJFX0FMR09SSVRITVNfRVJST1IiLCBFUlJfTElCX1NTTCwgMzYwfSwKKyAgI2VuZGlmCiAgICNpZmRlZiBTU0xfUl9TSUdOQVRVUkVfRk9SX05PTl9TSUdOSU5HX0NFUlRJRklDQVRFCiAgICAgeyJTSUdOQVRVUkVfRk9SX05PTl9TSUdOSU5HX0NFUlRJRklDQVRFIiwgRVJSX0xJQl9TU0wsIFNTTF9SX1NJR05BVFVSRV9GT1JfTk9OX1NJR05JTkdfQ0VSVElGSUNBVEV9LAogICAjZWxzZQogICAgIHsiU0lHTkFUVVJFX0ZPUl9OT05fU0lHTklOR19DRVJUSUZJQ0FURSIsIEVSUl9MSUJfU1NMLCAyMjB9LAogICAjZW5kaWYKKyAgI2lmZGVmIFNTTF9SX1NSUF9BX0NBTEMKKyAgICB7IlNSUF9BX0NBTEMiLCBFUlJfTElCX1NTTCwgU1NMX1JfU1JQX0FfQ0FMQ30sCisgICNlbHNlCisgICAgeyJTUlBfQV9DQUxDIiwgRVJSX0xJQl9TU0wsIDM2MX0sCisgICNlbmRpZgorICAjaWZkZWYgU1NMX1JfU1JUUF9DT1VMRF9OT1RfQUxMT0NBVEVfUFJPRklMRVMKKyAgICB7IlNSVFBfQ09VTERfTk9UX0FMTE9DQVRFX1BST0ZJTEVTIiwgRVJSX0xJQl9TU0wsIFNTTF9SX1NSVFBfQ09VTERfTk9UX0FMTE9DQVRFX1BST0ZJTEVTfSwKKyAgI2Vsc2UKKyAgICB7IlNSVFBfQ09VTERfTk9UX0FMTE9DQVRFX1BST0ZJTEVTIiwgRVJSX0xJQl9TU0wsIDM2Mn0sCisgICNlbmRpZgorICAjaWZkZWYgU1NMX1JfU1JUUF9QUk9URUNUSU9OX1BST0ZJTEVfTElTVF9UT09fTE9ORworICAgIHsiU1JUUF9QUk9URUNUSU9OX1BST0ZJTEVfTElTVF9UT09fTE9ORyIsIEVSUl9MSUJfU1NMLCBTU0xfUl9TUlRQX1BST1RFQ1RJT05fUFJPRklMRV9MSVNUX1RPT19MT05HfSwKKyAgI2Vsc2UKKyAgICB7IlNSVFBfUFJPVEVDVElPTl9QUk9GSUxFX0xJU1RfVE9PX0xPTkciLCBFUlJfTElCX1NTTCwgMzYzfSwKKyAgI2VuZGlmCisgICNpZmRlZiBTU0xfUl9TUlRQX1VOS05PV05fUFJPVEVDVElPTl9QUk9GSUxFCisgICAgeyJTUlRQX1VOS05PV05fUFJPVEVDVElPTl9QUk9GSUxFIiwgRVJSX0xJQl9TU0wsIFNTTF9SX1NSVFBfVU5LTk9XTl9QUk9URUNUSU9OX1BST0ZJTEV9LAorICAjZWxzZQorICAgIHsiU1JUUF9VTktOT1dOX1BST1RFQ1RJT05fUFJPRklMRSIsIEVSUl9MSUJfU1NMLCAzNjR9LAorICAjZW5kaWYKICAgI2lmZGVmIFNTTF9SX1NTTDIzX0RPSU5HX1NFU1NJT05fSURfUkVVU0UKICAgICB7IlNTTDIzX0RPSU5HX1NFU1NJT05fSURfUkVVU0UiLCBFUlJfTElCX1NTTCwgU1NMX1JfU1NMMjNfRE9JTkdfU0VTU0lPTl9JRF9SRVVTRX0sCiAgICNlbHNlCkBAIC0xMTc5LDYgKzEzNzksMTEgQEAKICAgI2Vsc2UKICAgICB7IlNTTF9MSUJSQVJZX0hBU19OT19DSVBIRVJTIiwgRVJSX0xJQl9TU0wsIDIzMH0sCiAgICNlbmRpZgorICAjaWZkZWYgU1NMX1JfU1NMX05FR0FUSVZFX0xFTkdUSAorICAgIHsiU1NMX05FR0FUSVZFX0xFTkdUSCIsIEVSUl9MSUJfU1NMLCBTU0xfUl9TU0xfTkVHQVRJVkVfTEVOR1RIfSwKKyAgI2Vsc2UKKyAgICB7IlNTTF9ORUdBVElWRV9MRU5HVEgiLCBFUlJfTElCX1NTTCwgMzcyfSwKKyAgI2VuZGlmCiAgICNpZmRlZiBTU0xfUl9TU0xfU0VTU0lPTl9JRF9DQUxMQkFDS19GQUlMRUQKICAgICB7IlNTTF9TRVNTSU9OX0lEX0NBTExCQUNLX0ZBSUxFRCIsIEVSUl9MSUJfU1NMLCBTU0xfUl9TU0xfU0VTU0lPTl9JRF9DQUxMQkFDS19GQUlMRUR9LAogICAjZWxzZQpAQCAtMTIyOSw2ICsxNDM0LDExIEBACiAgICNlbHNlCiAgICAgeyJUTFNWMV9BTEVSVF9FWFBPUlRfUkVTVFJJQ1RJT04iLCBFUlJfTElCX1NTTCwgMTA2MH0sCiAgICNlbmRpZgorICAjaWZkZWYgU1NMX1JfVExTVjFfQUxFUlRfSU5BUFBST1BSSUFURV9GQUxMQkFDSworICAgIHsiVExTVjFfQUxFUlRfSU5BUFBST1BSSUFURV9GQUxMQkFDSyIsIEVSUl9MSUJfU1NMLCBTU0xfUl9UTFNWMV9BTEVSVF9JTkFQUFJPUFJJQVRFX0ZBTExCQUNLfSwKKyAgI2Vsc2UKKyAgICB7IlRMU1YxX0FMRVJUX0lOQVBQUk9QUklBVEVfRkFMTEJBQ0siLCBFUlJfTElCX1NTTCwgMTA4Nn0sCisgICNlbmRpZgogICAjaWZkZWYgU1NMX1JfVExTVjFfQUxFUlRfSU5TVUZGSUNJRU5UX1NFQ1VSSVRZCiAgICAgeyJUTFNWMV9BTEVSVF9JTlNVRkZJQ0lFTlRfU0VDVVJJVFkiLCBFUlJfTElCX1NTTCwgU1NMX1JfVExTVjFfQUxFUlRfSU5TVUZGSUNJRU5UX1NFQ1VSSVRZfSwKICAgI2Vsc2UKQEAgLTEyOTQsNiArMTUwNCwyMSBAQAogICAjZWxzZQogICAgIHsiVExTX0NMSUVOVF9DRVJUX1JFUV9XSVRIX0FOT05fQ0lQSEVSIiwgRVJSX0xJQl9TU0wsIDIzMn0sCiAgICNlbmRpZgorICAjaWZkZWYgU1NMX1JfVExTX0hFQVJUQkVBVF9QRUVSX0RPRVNOVF9BQ0NFUFQKKyAgICB7IlRMU19IRUFSVEJFQVRfUEVFUl9ET0VTTlRfQUNDRVBUIiwgRVJSX0xJQl9TU0wsIFNTTF9SX1RMU19IRUFSVEJFQVRfUEVFUl9ET0VTTlRfQUNDRVBUfSwKKyAgI2Vsc2UKKyAgICB7IlRMU19IRUFSVEJFQVRfUEVFUl9ET0VTTlRfQUNDRVBUIiwgRVJSX0xJQl9TU0wsIDM2NX0sCisgICNlbmRpZgorICAjaWZkZWYgU1NMX1JfVExTX0hFQVJUQkVBVF9QRU5ESU5HCisgICAgeyJUTFNfSEVBUlRCRUFUX1BFTkRJTkciLCBFUlJfTElCX1NTTCwgU1NMX1JfVExTX0hFQVJUQkVBVF9QRU5ESU5HfSwKKyAgI2Vsc2UKKyAgICB7IlRMU19IRUFSVEJFQVRfUEVORElORyIsIEVSUl9MSUJfU1NMLCAzNjZ9LAorICAjZW5kaWYKKyAgI2lmZGVmIFNTTF9SX1RMU19JTExFR0FMX0VYUE9SVEVSX0xBQkVMCisgICAgeyJUTFNfSUxMRUdBTF9FWFBPUlRFUl9MQUJFTCIsIEVSUl9MSUJfU1NMLCBTU0xfUl9UTFNfSUxMRUdBTF9FWFBPUlRFUl9MQUJFTH0sCisgICNlbHNlCisgICAgeyJUTFNfSUxMRUdBTF9FWFBPUlRFUl9MQUJFTCIsIEVSUl9MSUJfU1NMLCAzNjd9LAorICAjZW5kaWYKICAgI2lmZGVmIFNTTF9SX1RMU19JTlZBTElEX0VDUE9JTlRGT1JNQVRfTElTVAogICAgIHsiVExTX0lOVkFMSURfRUNQT0lOVEZPUk1BVF9MSVNUIiwgRVJSX0xJQl9TU0wsIFNTTF9SX1RMU19JTlZBTElEX0VDUE9JTlRGT1JNQVRfTElTVH0sCiAgICNlbHNlCkBAIC0xMzk5LDYgKzE2MjQsMTYgQEAKICAgI2Vsc2UKICAgICB7IlVOS05PV05fQ0lQSEVSX1RZUEUiLCBFUlJfTElCX1NTTCwgMjQ5fSwKICAgI2VuZGlmCisgICNpZmRlZiBTU0xfUl9VTktOT1dOX0NNRF9OQU1FCisgICAgeyJVTktOT1dOX0NNRF9OQU1FIiwgRVJSX0xJQl9TU0wsIFNTTF9SX1VOS05PV05fQ01EX05BTUV9LAorICAjZWxzZQorICAgIHsiVU5LTk9XTl9DTURfTkFNRSIsIEVSUl9MSUJfU1NMLCAzODZ9LAorICAjZW5kaWYKKyAgI2lmZGVmIFNTTF9SX1VOS05PV05fRElHRVNUCisgICAgeyJVTktOT1dOX0RJR0VTVCIsIEVSUl9MSUJfU1NMLCBTU0xfUl9VTktOT1dOX0RJR0VTVH0sCisgICNlbHNlCisgICAgeyJVTktOT1dOX0RJR0VTVCIsIEVSUl9MSUJfU1NMLCAzNjh9LAorICAjZW5kaWYKICAgI2lmZGVmIFNTTF9SX1VOS05PV05fS0VZX0VYQ0hBTkdFX1RZUEUKICAgICB7IlVOS05PV05fS0VZX0VYQ0hBTkdFX1RZUEUiLCBFUlJfTElCX1NTTCwgU1NMX1JfVU5LTk9XTl9LRVlfRVhDSEFOR0VfVFlQRX0sCiAgICNlbHNlCkBAIC0xNDY5LDE2ICsxNzA0LDM2IEBACiAgICNlbHNlCiAgICAgeyJVTlNVUFBPUlRFRF9TVEFUVVNfVFlQRSIsIEVSUl9MSUJfU1NMLCAzMjl9LAogICAjZW5kaWYKKyAgI2lmZGVmIFNTTF9SX1VTRV9TUlRQX05PVF9ORUdPVElBVEVECisgICAgeyJVU0VfU1JUUF9OT1RfTkVHT1RJQVRFRCIsIEVSUl9MSUJfU1NMLCBTU0xfUl9VU0VfU1JUUF9OT1RfTkVHT1RJQVRFRH0sCisgICNlbHNlCisgICAgeyJVU0VfU1JUUF9OT1RfTkVHT1RJQVRFRCIsIEVSUl9MSUJfU1NMLCAzNjl9LAorICAjZW5kaWYKKyAgI2lmZGVmIFNTTF9SX1ZFUlNJT05fVE9PX0xPVworICAgIHsiVkVSU0lPTl9UT09fTE9XIiwgRVJSX0xJQl9TU0wsIFNTTF9SX1ZFUlNJT05fVE9PX0xPV30sCisgICNlbHNlCisgICAgeyJWRVJTSU9OX1RPT19MT1ciLCBFUlJfTElCX1NTTCwgMzk2fSwKKyAgI2VuZGlmCiAgICNpZmRlZiBTU0xfUl9XUklURV9CSU9fTk9UX1NFVAogICAgIHsiV1JJVEVfQklPX05PVF9TRVQiLCBFUlJfTElCX1NTTCwgU1NMX1JfV1JJVEVfQklPX05PVF9TRVR9LAogICAjZWxzZQogICAgIHsiV1JJVEVfQklPX05PVF9TRVQiLCBFUlJfTElCX1NTTCwgMjYwfSwKICAgI2VuZGlmCisgICNpZmRlZiBTU0xfUl9XUk9OR19DRVJUSUZJQ0FURV9UWVBFCisgICAgeyJXUk9OR19DRVJUSUZJQ0FURV9UWVBFIiwgRVJSX0xJQl9TU0wsIFNTTF9SX1dST05HX0NFUlRJRklDQVRFX1RZUEV9LAorICAjZWxzZQorICAgIHsiV1JPTkdfQ0VSVElGSUNBVEVfVFlQRSIsIEVSUl9MSUJfU1NMLCAzODN9LAorICAjZW5kaWYKICAgI2lmZGVmIFNTTF9SX1dST05HX0NJUEhFUl9SRVRVUk5FRAogICAgIHsiV1JPTkdfQ0lQSEVSX1JFVFVSTkVEIiwgRVJSX0xJQl9TU0wsIFNTTF9SX1dST05HX0NJUEhFUl9SRVRVUk5FRH0sCiAgICNlbHNlCiAgICAgeyJXUk9OR19DSVBIRVJfUkVUVVJORUQiLCBFUlJfTElCX1NTTCwgMjYxfSwKICAgI2VuZGlmCisgICNpZmRlZiBTU0xfUl9XUk9OR19DVVJWRQorICAgIHsiV1JPTkdfQ1VSVkUiLCBFUlJfTElCX1NTTCwgU1NMX1JfV1JPTkdfQ1VSVkV9LAorICAjZWxzZQorICAgIHsiV1JPTkdfQ1VSVkUiLCBFUlJfTElCX1NTTCwgMzc4fSwKKyAgI2VuZGlmCiAgICNpZmRlZiBTU0xfUl9XUk9OR19NRVNTQUdFX1RZUEUKICAgICB7IldST05HX01FU1NBR0VfVFlQRSIsIEVSUl9MSUJfU1NMLCBTU0xfUl9XUk9OR19NRVNTQUdFX1RZUEV9LAogICAjZWxzZQpAQCAtMTQ5OSw2ICsxNzU0LDExIEBACiAgICNlbHNlCiAgICAgeyJXUk9OR19TSUdOQVRVUkVfU0laRSIsIEVSUl9MSUJfU1NMLCAyNjV9LAogICAjZW5kaWYKKyAgI2lmZGVmIFNTTF9SX1dST05HX1NJR05BVFVSRV9UWVBFCisgICAgeyJXUk9OR19TSUdOQVRVUkVfVFlQRSIsIEVSUl9MSUJfU1NMLCBTU0xfUl9XUk9OR19TSUdOQVRVUkVfVFlQRX0sCisgICNlbHNlCisgICAgeyJXUk9OR19TSUdOQVRVUkVfVFlQRSIsIEVSUl9MSUJfU1NMLCAzNzB9LAorICAjZW5kaWYKICAgI2lmZGVmIFNTTF9SX1dST05HX1NTTF9WRVJTSU9OCiAgICAgeyJXUk9OR19TU0xfVkVSU0lPTiIsIEVSUl9MSUJfU1NMLCBTU0xfUl9XUk9OR19TU0xfVkVSU0lPTn0sCiAgICNlbHNlCkBAIC0xNTE5LDYgKzE3NzksMTEgQEAKICAgI2Vsc2UKICAgICB7Ilg1MDlfVkVSSUZJQ0FUSU9OX1NFVFVQX1BST0JMRU1TIiwgRVJSX0xJQl9TU0wsIDI2OX0sCiAgICNlbmRpZgorICAjaWZkZWYgWDUwOV9SX0FLSURfTUlTTUFUQ0gKKyAgICB7IkFLSURfTUlTTUFUQ0giLCBFUlJfTElCX1g1MDksIFg1MDlfUl9BS0lEX01JU01BVENIfSwKKyAgI2Vsc2UKKyAgICB7IkFLSURfTUlTTUFUQ0giLCBFUlJfTElCX1g1MDksIDExMH0sCisgICNlbmRpZgogICAjaWZkZWYgWDUwOV9SX0JBRF9YNTA5X0ZJTEVUWVBFCiAgICAgeyJCQURfWDUwOV9GSUxFVFlQRSIsIEVSUl9MSUJfWDUwOSwgWDUwOV9SX0JBRF9YNTA5X0ZJTEVUWVBFfSwKICAgI2Vsc2UKQEAgLTE1MzksMTEgKzE4MDQsMjYgQEAKICAgI2Vsc2UKICAgICB7IkNFUlRfQUxSRUFEWV9JTl9IQVNIX1RBQkxFIiwgRVJSX0xJQl9YNTA5LCAxMDF9LAogICAjZW5kaWYKKyAgI2lmZGVmIFg1MDlfUl9DUkxfQUxSRUFEWV9ERUxUQQorICAgIHsiQ1JMX0FMUkVBRFlfREVMVEEiLCBFUlJfTElCX1g1MDksIFg1MDlfUl9DUkxfQUxSRUFEWV9ERUxUQX0sCisgICNlbHNlCisgICAgeyJDUkxfQUxSRUFEWV9ERUxUQSIsIEVSUl9MSUJfWDUwOSwgMTI3fSwKKyAgI2VuZGlmCisgICNpZmRlZiBYNTA5X1JfQ1JMX1ZFUklGWV9GQUlMVVJFCisgICAgeyJDUkxfVkVSSUZZX0ZBSUxVUkUiLCBFUlJfTElCX1g1MDksIFg1MDlfUl9DUkxfVkVSSUZZX0ZBSUxVUkV9LAorICAjZWxzZQorICAgIHsiQ1JMX1ZFUklGWV9GQUlMVVJFIiwgRVJSX0xJQl9YNTA5LCAxMzF9LAorICAjZW5kaWYKICAgI2lmZGVmIFg1MDlfUl9FUlJfQVNOMV9MSUIKICAgICB7IkVSUl9BU04xX0xJQiIsIEVSUl9MSUJfWDUwOSwgWDUwOV9SX0VSUl9BU04xX0xJQn0sCiAgICNlbHNlCiAgICAgeyJFUlJfQVNOMV9MSUIiLCBFUlJfTElCX1g1MDksIDEwMn0sCiAgICNlbmRpZgorICAjaWZkZWYgWDUwOV9SX0lEUF9NSVNNQVRDSAorICAgIHsiSURQX01JU01BVENIIiwgRVJSX0xJQl9YNTA5LCBYNTA5X1JfSURQX01JU01BVENIfSwKKyAgI2Vsc2UKKyAgICB7IklEUF9NSVNNQVRDSCIsIEVSUl9MSUJfWDUwOSwgMTI4fSwKKyAgI2VuZGlmCiAgICNpZmRlZiBYNTA5X1JfSU5WQUxJRF9ESVJFQ1RPUlkKICAgICB7IklOVkFMSURfRElSRUNUT1JZIiwgRVJSX0xJQl9YNTA5LCBYNTA5X1JfSU5WQUxJRF9ESVJFQ1RPUll9LAogICAjZWxzZQpAQCAtMTU1OSw2ICsxODM5LDExIEBACiAgICNlbHNlCiAgICAgeyJJTlZBTElEX1RSVVNUIiwgRVJSX0xJQl9YNTA5LCAxMjN9LAogICAjZW5kaWYKKyAgI2lmZGVmIFg1MDlfUl9JU1NVRVJfTUlTTUFUQ0gKKyAgICB7IklTU1VFUl9NSVNNQVRDSCIsIEVSUl9MSUJfWDUwOSwgWDUwOV9SX0lTU1VFUl9NSVNNQVRDSH0sCisgICNlbHNlCisgICAgeyJJU1NVRVJfTUlTTUFUQ0giLCBFUlJfTElCX1g1MDksIDEyOX0sCisgICNlbmRpZgogICAjaWZkZWYgWDUwOV9SX0tFWV9UWVBFX01JU01BVENICiAgICAgeyJLRVlfVFlQRV9NSVNNQVRDSCIsIEVSUl9MSUJfWDUwOSwgWDUwOV9SX0tFWV9UWVBFX01JU01BVENIfSwKICAgI2Vsc2UKQEAgLTE1ODQsMTEgKzE4NjksMjEgQEAKICAgI2Vsc2UKICAgICB7Ik1FVEhPRF9OT1RfU1VQUE9SVEVEIiwgRVJSX0xJQl9YNTA5LCAxMjR9LAogICAjZW5kaWYKKyAgI2lmZGVmIFg1MDlfUl9ORVdFUl9DUkxfTk9UX05FV0VSCisgICAgeyJORVdFUl9DUkxfTk9UX05FV0VSIiwgRVJSX0xJQl9YNTA5LCBYNTA5X1JfTkVXRVJfQ1JMX05PVF9ORVdFUn0sCisgICNlbHNlCisgICAgeyJORVdFUl9DUkxfTk9UX05FV0VSIiwgRVJSX0xJQl9YNTA5LCAxMzJ9LAorICAjZW5kaWYKICAgI2lmZGVmIFg1MDlfUl9OT19DRVJUX1NFVF9GT1JfVVNfVE9fVkVSSUZZCiAgICAgeyJOT19DRVJUX1NFVF9GT1JfVVNfVE9fVkVSSUZZIiwgRVJSX0xJQl9YNTA5LCBYNTA5X1JfTk9fQ0VSVF9TRVRfRk9SX1VTX1RPX1ZFUklGWX0sCiAgICNlbHNlCiAgICAgeyJOT19DRVJUX1NFVF9GT1JfVVNfVE9fVkVSSUZZIiwgRVJSX0xJQl9YNTA5LCAxMDV9LAogICAjZW5kaWYKKyAgI2lmZGVmIFg1MDlfUl9OT19DUkxfTlVNQkVSCisgICAgeyJOT19DUkxfTlVNQkVSIiwgRVJSX0xJQl9YNTA5LCBYNTA5X1JfTk9fQ1JMX05VTUJFUn0sCisgICNlbHNlCisgICAgeyJOT19DUkxfTlVNQkVSIiwgRVJSX0xJQl9YNTA5LCAxMzB9LAorICAjZW5kaWYKICAgI2lmZGVmIFg1MDlfUl9QVUJMSUNfS0VZX0RFQ09ERV9FUlJPUgogICAgIHsiUFVCTElDX0tFWV9ERUNPREVfRVJST1IiLCBFUlJfTElCX1g1MDksIFg1MDlfUl9QVUJMSUNfS0VZX0RFQ09ERV9FUlJPUn0sCiAgICNlbHNlCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19zdGF0LmMgYi9Nb2R1bGVzL19zdGF0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTMwMWZhOAotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX3N0YXQuYwpAQCAtMCwwICsxLDU2MyBAQAorLyogc3RhdC5oIGludGVyZmFjZQorICoKKyAqIFRoZSBtb2R1bGUgZGVmaW5lcyBhbGwgU19JRiosIFNfSSosIFVGXyosIFNGXyogYW5kIFNUXyogY29uc3RhbnRzIHRvCisgKiBzZW5zaWJsZSBkZWZhdWx0IHZhbHVlcyBhcyB3ZWxsIGFzIGRlZmluZXMgU19JUyooKSBtYWNyb3MgaW4gb3JkZXIgdG8ga2VlcAorICogYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBvbGQgc3RhdC5weSBtb2R1bGUuCisgKgorICogTmV3IGNvbnN0YW50cyBhbmQgbWFjcm9zIHN1Y2ggYXMgU19JRkRPT1IgLyBTX0lTRE9PUigpIGFyZSBhbHdheXMgZGVmaW5lZAorICogYXMgaW50IDAuCisgKgorICogTk9URTogUE9TSVggb25seSBkZWZpbmVzIHRoZSB2YWx1ZXMgb2YgdGhlIFNfSSogcGVybWlzc2lvbiBiaXRzLgorICoKKyAqLworCisjZGVmaW5lIFBZX1NTSVpFX1RfQ0xFQU4KKyNpbmNsdWRlICJQeXRob24uaCIKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmIC8qIEhBVkVfU1lTX1RZUEVTX0ggKi8KKworI2lmZGVmIEhBVkVfU1lTX1NUQVRfSAorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjZW5kaWYgLyogSEFWRV9TWVNfU1RBVF9IICovCisKKyNpZmRlZiBNU19XSU5ET1dTCit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IG1vZGVfdDsKKyNlbmRpZgorCisvKiBGcm9tIFB5dGhvbidzIHN0YXQucHkgKi8KKyNpZm5kZWYgU19JTU9ERQorIyAgZGVmaW5lIFNfSU1PREUgMDc3NzcKKyNlbmRpZgorCisvKiBTX0lGWFhYIGNvbnN0YW50cyAoZmlsZSB0eXBlcykKKyAqCisgKiBPbmx5IHRoZSBuYW1lcyBhcmUgZGVmaW5lZCBieSBQT1NJWCBidXQgbm90IHRoZWlyIHZhbHVlLiBBbGwgY29tbW9uIGZpbGUKKyAqIHR5cGVzIHNlZW1zIHRvIGhhdmUgdGhlIHNhbWUgbnVtZXJpYyB2YWx1ZSBvbiBhbGwgcGxhdGZvcm1zLCB0aG91Z2guCisgKgorICogcHlwb3J0LmggZ3VhcmFudGVlcyBTX0lGTVQsIFNfSUZESVIsIFNfSUZDSFIsIFNfSUZSRUcgYW5kIFNfSUZMTksKKyAqLworCisjaWZuZGVmIFNfSUZCTEsKKyMgIGRlZmluZSBTX0lGQkxLIDAwNjAwMDAKKyNlbmRpZgorCisjaWZuZGVmIFNfSUZJRk8KKyMgIGRlZmluZSBTX0lGSUZPIDAwMTAwMDAKKyNlbmRpZgorCisjaWZuZGVmIFNfSUZTT0NLCisjICBkZWZpbmUgU19JRlNPQ0sgMDE0MDAwMAorI2VuZGlmCisKKyNpZm5kZWYgU19JRkRPT1IKKyMgIGRlZmluZSBTX0lGRE9PUiAwCisjZW5kaWYKKworI2lmbmRlZiBTX0lGUE9SVAorIyAgZGVmaW5lIFNfSUZQT1JUIDAKKyNlbmRpZgorCisjaWZuZGVmIFNfSUZXSFQKKyMgIGRlZmluZSBTX0lGV0hUIDAKKyNlbmRpZgorCisKKy8qIFNfSVNYWFgoKQorICogcHlwb3J0LmggZGVmaW5lcyBTX0lTRElSKCksIFNfSVNSRUcoKSBhbmQgU19JU0NIUigpCisgKi8KKworI2lmbmRlZiBTX0lTQkxLCisjICBkZWZpbmUgU19JU0JMSyhtb2RlKSAoKChtb2RlKSAmIFNfSUZNVCkgPT0gU19JRkJMSykKKyNlbmRpZgorCisjaWZuZGVmIFNfSVNGSUZPCisjICBkZWZpbmUgU19JU0ZJRk8obW9kZSkgKCgobW9kZSkgJiBTX0lGTVQpID09IFNfSUZJRk8pCisjZW5kaWYKKworI2lmbmRlZiBTX0lTTE5LCisjICBkZWZpbmUgU19JU0xOSyhtb2RlKSAoKChtb2RlKSAmIFNfSUZNVCkgPT0gU19JRkxOSykKKyNlbmRpZgorCisjaWZuZGVmIFNfSVNTT0NLCisjICBkZWZpbmUgU19JU1NPQ0sobW9kZSkgKCgobW9kZSkgJiBTX0lGTVQpID09IFNfSUZTT0NLKQorI2VuZGlmCisKKyNpZm5kZWYgU19JU0RPT1IKKyMgIGRlZmluZSBTX0lTRE9PUihtb2RlKSAwCisjZW5kaWYKKworI2lmbmRlZiBTX0lTUE9SVAorIyAgZGVmaW5lIFNfSVNQT1JUKG1vZGUpIDAKKyNlbmRpZgorCisjaWZuZGVmIFNfSVNXSFQKKyMgIGRlZmluZSBTX0lTV0hUKG1vZGUpIDAKKyNlbmRpZgorCisKKy8qIFNfSSogZmlsZSBwZXJtaXNzaW9uCisgKgorICogVGhlIHBlcm1pc3Npb24gYml0IHZhbHVlIGFyZSBkZWZpbmVkIGJ5IFBPU0lYIHN0YW5kYXJkcy4KKyAqLworI2lmbmRlZiBTX0lTVUlECisjICBkZWZpbmUgU19JU1VJRCAwNDAwMAorI2VuZGlmCisKKyNpZm5kZWYgU19JU0dJRAorIyAgZGVmaW5lIFNfSVNHSUQgMDIwMDAKKyNlbmRpZgorCisvKiB3aGF0IGlzIFNfRU5GTVQ/ICovCisjaWZuZGVmIFNfRU5GTVQKKyMgIGRlZmluZSBTX0VORk1UIFNfSVNHSUQKKyNlbmRpZgorCisjaWZuZGVmIFNfSVNWVFgKKyMgIGRlZmluZSBTX0lTVlRYIDAxMDAwCisjZW5kaWYKKworI2lmbmRlZiBTX0lSRUFECisjICBkZWZpbmUgU19JUkVBRCAwMDQwMAorI2VuZGlmCisKKyNpZm5kZWYgU19JV1JJVEUKKyMgIGRlZmluZSBTX0lXUklURSAwMDIwMAorI2VuZGlmCisKKyNpZm5kZWYgU19JRVhFQworIyAgZGVmaW5lIFNfSUVYRUMgMDAxMDAKKyNlbmRpZgorCisjaWZuZGVmIFNfSVJXWFUKKyMgIGRlZmluZSBTX0lSV1hVIDAwNzAwCisjZW5kaWYKKworI2lmbmRlZiBTX0lSVVNSCisjICBkZWZpbmUgU19JUlVTUiAwMDQwMAorI2VuZGlmCisKKyNpZm5kZWYgU19JV1VTUgorIyAgZGVmaW5lIFNfSVdVU1IgMDAyMDAKKyNlbmRpZgorCisjaWZuZGVmIFNfSVhVU1IKKyMgIGRlZmluZSBTX0lYVVNSIDAwMTAwCisjZW5kaWYKKworI2lmbmRlZiBTX0lSV1hHCisjICBkZWZpbmUgU19JUldYRyAwMDA3MAorI2VuZGlmCisKKyNpZm5kZWYgU19JUkdSUAorIyAgZGVmaW5lIFNfSVJHUlAgMDAwNDAKKyNlbmRpZgorCisjaWZuZGVmIFNfSVdHUlAKKyMgIGRlZmluZSBTX0lXR1JQIDAwMDIwCisjZW5kaWYKKworI2lmbmRlZiBTX0lYR1JQCisjICBkZWZpbmUgU19JWEdSUCAwMDAxMAorI2VuZGlmCisKKyNpZm5kZWYgU19JUldYTworIyAgZGVmaW5lIFNfSVJXWE8gMDAwMDcKKyNlbmRpZgorCisjaWZuZGVmIFNfSVJPVEgKKyMgIGRlZmluZSBTX0lST1RIIDAwMDA0CisjZW5kaWYKKworI2lmbmRlZiBTX0lXT1RICisjICBkZWZpbmUgU19JV09USCAwMDAwMgorI2VuZGlmCisKKyNpZm5kZWYgU19JWE9USAorIyAgZGVmaW5lIFNfSVhPVEggMDAwMDEKKyNlbmRpZgorCisKKy8qIE5hbWVzIGZvciBmaWxlIGZsYWdzICovCisjaWZuZGVmIFVGX05PRFVNUAorIyAgZGVmaW5lIFVGX05PRFVNUCAweDAwMDAwMDAxCisjZW5kaWYKKworI2lmbmRlZiBVRl9JTU1VVEFCTEUKKyMgIGRlZmluZSBVRl9JTU1VVEFCTEUgMHgwMDAwMDAwMgorI2VuZGlmCisKKyNpZm5kZWYgVUZfQVBQRU5ECisjICBkZWZpbmUgVUZfQVBQRU5EIDB4MDAwMDAwMDQKKyNlbmRpZgorCisjaWZuZGVmIFVGX09QQVFVRQorIyAgZGVmaW5lIFVGX09QQVFVRSAweDAwMDAwMDA4CisjZW5kaWYKKworI2lmbmRlZiBVRl9OT1VOTElOSworIyAgZGVmaW5lIFVGX05PVU5MSU5LIDB4MDAwMDAwMTAKKyNlbmRpZgorCisjaWZuZGVmIFVGX0NPTVBSRVNTRUQKKyMgIGRlZmluZSBVRl9DT01QUkVTU0VEIDB4MDAwMDAwMjAKKyNlbmRpZgorCisjaWZuZGVmIFVGX0hJRERFTgorIyAgZGVmaW5lIFVGX0hJRERFTiAweDAwMDA4MDAwCisjZW5kaWYKKworI2lmbmRlZiBTRl9BUkNISVZFRAorIyAgZGVmaW5lIFNGX0FSQ0hJVkVEIDB4MDAwMTAwMDAKKyNlbmRpZgorCisjaWZuZGVmIFNGX0lNTVVUQUJMRQorIyAgZGVmaW5lIFNGX0lNTVVUQUJMRSAweDAwMDIwMDAwCisjZW5kaWYKKworI2lmbmRlZiBTRl9BUFBFTkQKKyMgIGRlZmluZSBTRl9BUFBFTkQgMHgwMDA0MDAwMAorI2VuZGlmCisKKyNpZm5kZWYgU0ZfTk9VTkxJTksKKyMgIGRlZmluZSBTRl9OT1VOTElOSyAweDAwMTAwMDAwCisjZW5kaWYKKworI2lmbmRlZiBTRl9TTkFQU0hPVAorIyAgZGVmaW5lIFNGX1NOQVBTSE9UIDB4MDAyMDAwMDAKKyNlbmRpZgorCitzdGF0aWMgbW9kZV90CitfUHlMb25nX0FzTW9kZV90KFB5T2JqZWN0ICpvcCkKK3sKKyAgICB1bnNpZ25lZCBsb25nIHZhbHVlOworICAgIG1vZGVfdCBtb2RlOworCisgICAgdmFsdWUgPSBQeUxvbmdfQXNVbnNpZ25lZExvbmcob3ApOworICAgIGlmICgodmFsdWUgPT0gKHVuc2lnbmVkIGxvbmcpLTEpICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybiAobW9kZV90KS0xOworCisgICAgbW9kZSA9IChtb2RlX3QpdmFsdWU7CisgICAgaWYgKCh1bnNpZ25lZCBsb25nKW1vZGUgIT0gdmFsdWUpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsICJtb2RlIG91dCBvZiByYW5nZSIpOworICAgICAgICByZXR1cm4gKG1vZGVfdCktMTsKKyAgICB9CisgICAgcmV0dXJuIG1vZGU7Cit9CisKKworI2RlZmluZSBzdGF0X1NfSVNGVU5DKGlzZnVuYywgZG9jKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHN0YXRpYyBQeU9iamVjdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHN0YXRfICMjaXNmdW5jIChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm9tb2RlKSAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIG1vZGVfdCBtb2RlID0gX1B5TG9uZ19Bc01vZGVfdChvbW9kZSk7ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBpZiAoKG1vZGUgPT0gKG1vZGVfdCktMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkgICAgICAgICAgIFwKKyAgICAgICAgICAgcmV0dXJuIE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICByZXR1cm4gUHlCb29sX0Zyb21Mb25nKGlzZnVuYyhtb2RlKSk7ICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBQeURvY19TVFJWQVIoc3RhdF8gIyMgaXNmdW5jICMjIF9kb2MsIGRvYykKKworc3RhdF9TX0lTRlVOQyhTX0lTRElSLAorICAgICJTX0lTRElSKG1vZGUpIC0+IGJvb2xcblxuIgorICAgICJSZXR1cm4gVHJ1ZSBpZiBtb2RlIGlzIGZyb20gYSBkaXJlY3RvcnkuIik7CisKK3N0YXRfU19JU0ZVTkMoU19JU0NIUiwKKyAgICAiU19JU0NIUihtb2RlKSAtPiBib29sXG5cbiIKKyAgICAiUmV0dXJuIFRydWUgaWYgbW9kZSBpcyBmcm9tIGEgY2hhcmFjdGVyIHNwZWNpYWwgZGV2aWNlIGZpbGUuIik7CisKK3N0YXRfU19JU0ZVTkMoU19JU0JMSywKKyAgICAiU19JU0JMSyhtb2RlKSAtPiBib29sXG5cbiIKKyAgICAiUmV0dXJuIFRydWUgaWYgbW9kZSBpcyBmcm9tIGEgYmxvY2sgc3BlY2lhbCBkZXZpY2UgZmlsZS4iKTsKKworc3RhdF9TX0lTRlVOQyhTX0lTUkVHLAorICAgICJTX0lTUkVHKG1vZGUpIC0+IGJvb2xcblxuIgorICAgICJSZXR1cm4gVHJ1ZSBpZiBtb2RlIGlzIGZyb20gYSByZWd1bGFyIGZpbGUuIik7CisKK3N0YXRfU19JU0ZVTkMoU19JU0ZJRk8sCisgICAgIlNfSVNGSUZPKG1vZGUpIC0+IGJvb2xcblxuIgorICAgICJSZXR1cm4gVHJ1ZSBpZiBtb2RlIGlzIGZyb20gYSBGSUZPIChuYW1lZCBwaXBlKS4iKTsKKworc3RhdF9TX0lTRlVOQyhTX0lTTE5LLAorICAgICJTX0lTTE5LKG1vZGUpIC0+IGJvb2xcblxuIgorICAgICJSZXR1cm4gVHJ1ZSBpZiBtb2RlIGlzIGZyb20gYSBzeW1ib2xpYyBsaW5rLiIpOworCitzdGF0X1NfSVNGVU5DKFNfSVNTT0NLLAorICAgICJTX0lTU09DSyhtb2RlKSAtPiBib29sXG5cbiIKKyAgICAiUmV0dXJuIFRydWUgaWYgbW9kZSBpcyBmcm9tIGEgc29ja2V0LiIpOworCitzdGF0X1NfSVNGVU5DKFNfSVNET09SLAorICAgICJTX0lTRE9PUihtb2RlKSAtPiBib29sXG5cbiIKKyAgICAiUmV0dXJuIFRydWUgaWYgbW9kZSBpcyBmcm9tIGEgZG9vci4iKTsKKworc3RhdF9TX0lTRlVOQyhTX0lTUE9SVCwKKyAgICAiU19JU1BPUlQobW9kZSkgLT4gYm9vbFxuXG4iCisgICAgIlJldHVybiBUcnVlIGlmIG1vZGUgaXMgZnJvbSBhbiBldmVudCBwb3J0LiIpOworCitzdGF0X1NfSVNGVU5DKFNfSVNXSFQsCisgICAgIlNfSVNXSFQobW9kZSkgLT4gYm9vbFxuXG4iCisgICAgIlJldHVybiBUcnVlIGlmIG1vZGUgaXMgZnJvbSBhIHdoaXRlb3V0LiIpOworCisKK1B5RG9jX1NUUlZBUihzdGF0X1NfSU1PREVfZG9jLAorIlJldHVybiB0aGUgcG9ydGlvbiBvZiB0aGUgZmlsZSdzIG1vZGUgdGhhdCBjYW4gYmUgc2V0IGJ5IG9zLmNobW9kKCkuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitzdGF0X1NfSU1PREUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpvbW9kZSkKK3sKKyAgICBtb2RlX3QgbW9kZSA9IF9QeUxvbmdfQXNNb2RlX3Qob21vZGUpOworICAgIGlmICgobW9kZSA9PSAobW9kZV90KS0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gUHlMb25nX0Zyb21VbnNpZ25lZExvbmcobW9kZSAmIFNfSU1PREUpOworfQorCisKK1B5RG9jX1NUUlZBUihzdGF0X1NfSUZNVF9kb2MsCisiUmV0dXJuIHRoZSBwb3J0aW9uIG9mIHRoZSBmaWxlJ3MgbW9kZSB0aGF0IGRlc2NyaWJlcyB0aGUgZmlsZSB0eXBlLiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorc3RhdF9TX0lGTVQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpvbW9kZSkKK3sKKyAgICBtb2RlX3QgbW9kZSA9IF9QeUxvbmdfQXNNb2RlX3Qob21vZGUpOworICAgIGlmICgobW9kZSA9PSAobW9kZV90KS0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gUHlMb25nX0Zyb21VbnNpZ25lZExvbmcobW9kZSAmIFNfSUZNVCk7Cit9CisKKy8qIGZpbGUgdHlwZSBjaGFycyBhY2NvcmRpbmcgdG8KKyAgIGh0dHA6Ly9lbi53aWtpYm9va3Mub3JnL3dpa2kvQ19Qcm9ncmFtbWluZy9QT1NJWF9SZWZlcmVuY2Uvc3lzL3N0YXQuaCAqLworCitzdGF0aWMgY2hhcgorZmlsZXR5cGUobW9kZV90IG1vZGUpCit7CisgICAgLyogY29tbW9uIGNhc2VzIGZpcnN0ICovCisgICAgaWYgKFNfSVNSRUcobW9kZSkpICByZXR1cm4gJy0nOworICAgIGlmIChTX0lTRElSKG1vZGUpKSAgcmV0dXJuICdkJzsKKyAgICBpZiAoU19JU0xOSyhtb2RlKSkgIHJldHVybiAnbCc7CisgICAgLyogc3BlY2lhbCBmaWxlcyAqLworICAgIGlmIChTX0lTQkxLKG1vZGUpKSAgcmV0dXJuICdiJzsKKyAgICBpZiAoU19JU0NIUihtb2RlKSkgIHJldHVybiAnYyc7CisgICAgaWYgKFNfSVNGSUZPKG1vZGUpKSByZXR1cm4gJ3AnOworICAgIGlmIChTX0lTU09DSyhtb2RlKSkgcmV0dXJuICdzJzsKKyAgICAvKiBub24tc3RhbmRhcmQgdHlwZXMgKi8KKyAgICBpZiAoU19JU0RPT1IobW9kZSkpIHJldHVybiAnRCc7CisgICAgaWYgKFNfSVNQT1JUKG1vZGUpKSByZXR1cm4gJ1AnOworICAgIGlmIChTX0lTV0hUKG1vZGUpKSAgcmV0dXJuICd3JzsKKyAgICAvKiB1bmtub3duICovCisgICAgcmV0dXJuICc/JzsKK30KKworc3RhdGljIHZvaWQKK2ZpbGVwZXJtKG1vZGVfdCBtb2RlLCBjaGFyICpidWYpCit7CisgICAgYnVmWzBdID0gbW9kZSAmIFNfSVJVU1IgPyAncicgOiAnLSc7CisgICAgYnVmWzFdID0gbW9kZSAmIFNfSVdVU1IgPyAndycgOiAnLSc7CisgICAgaWYgKG1vZGUgJiBTX0lTVUlEKSB7CisgICAgICAgIGJ1ZlsyXSA9IG1vZGUgJiBTX0lYVVNSID8gJ3MnIDogJ1MnOworICAgIH0gZWxzZSB7CisgICAgICAgIGJ1ZlsyXSA9IG1vZGUgJiBTX0lYVVNSID8gJ3gnIDogJy0nOworICAgIH0KKyAgICBidWZbM10gPSBtb2RlICYgU19JUkdSUCA/ICdyJyA6ICctJzsKKyAgICBidWZbNF0gPSBtb2RlICYgU19JV0dSUCA/ICd3JyA6ICctJzsKKyAgICBpZiAobW9kZSAmIFNfSVNHSUQpIHsKKyAgICAgICAgYnVmWzVdID0gbW9kZSAmIFNfSVhHUlAgPyAncycgOiAnUyc7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYnVmWzVdID0gbW9kZSAmIFNfSVhHUlAgPyAneCcgOiAnLSc7CisgICAgfQorICAgIGJ1Zls2XSA9IG1vZGUgJiBTX0lST1RIID8gJ3InIDogJy0nOworICAgIGJ1Zls3XSA9IG1vZGUgJiBTX0lXT1RIID8gJ3cnIDogJy0nOworICAgIGlmIChtb2RlICYgU19JU1ZUWCkgeworICAgICAgICBidWZbOF0gPSBtb2RlICYgU19JWE9USCA/ICd0JyA6ICdUJzsKKyAgICB9IGVsc2UgeworICAgICAgICBidWZbOF0gPSBtb2RlICYgU19JWE9USCA/ICd4JyA6ICctJzsKKyAgICB9Cit9CisKK1B5RG9jX1NUUlZBUihzdGF0X2ZpbGVtb2RlX2RvYywKKyJDb252ZXJ0IGEgZmlsZSdzIG1vZGUgdG8gYSBzdHJpbmcgb2YgdGhlIGZvcm0gJy1yd3hyd3hyd3gnIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitzdGF0X2ZpbGVtb2RlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqb21vZGUpCit7CisgICAgY2hhciBidWZbMTBdOworICAgIG1vZGVfdCBtb2RlOworCisgICAgbW9kZSA9IF9QeUxvbmdfQXNNb2RlX3Qob21vZGUpOworICAgIGlmICgobW9kZSA9PSAobW9kZV90KS0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGJ1ZlswXSA9IGZpbGV0eXBlKG1vZGUpOworICAgIGZpbGVwZXJtKG1vZGUsICZidWZbMV0pOworICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZ0FuZFNpemUoYnVmLCAxMCk7Cit9CisKKworc3RhdGljIFB5TWV0aG9kRGVmIHN0YXRfbWV0aG9kc1tdID0geworICAgIHsiU19JU0RJUiIsICAgICAgICAgc3RhdF9TX0lTRElSLCAgTUVUSF9PLCBzdGF0X1NfSVNESVJfZG9jfSwKKyAgICB7IlNfSVNDSFIiLCAgICAgICAgIHN0YXRfU19JU0NIUiwgIE1FVEhfTywgc3RhdF9TX0lTQ0hSX2RvY30sCisgICAgeyJTX0lTQkxLIiwgICAgICAgICBzdGF0X1NfSVNCTEssICBNRVRIX08sIHN0YXRfU19JU0JMS19kb2N9LAorICAgIHsiU19JU1JFRyIsICAgICAgICAgc3RhdF9TX0lTUkVHLCAgTUVUSF9PLCBzdGF0X1NfSVNSRUdfZG9jfSwKKyAgICB7IlNfSVNGSUZPIiwgICAgICAgIHN0YXRfU19JU0ZJRk8sIE1FVEhfTywgc3RhdF9TX0lTRklGT19kb2N9LAorICAgIHsiU19JU0xOSyIsICAgICAgICAgc3RhdF9TX0lTTE5LLCAgTUVUSF9PLCBzdGF0X1NfSVNMTktfZG9jfSwKKyAgICB7IlNfSVNTT0NLIiwgICAgICAgIHN0YXRfU19JU1NPQ0ssIE1FVEhfTywgc3RhdF9TX0lTU09DS19kb2N9LAorICAgIHsiU19JU0RPT1IiLCAgICAgICAgc3RhdF9TX0lTRE9PUiwgTUVUSF9PLCBzdGF0X1NfSVNET09SX2RvY30sCisgICAgeyJTX0lTUE9SVCIsICAgICAgICBzdGF0X1NfSVNQT1JULCBNRVRIX08sIHN0YXRfU19JU1BPUlRfZG9jfSwKKyAgICB7IlNfSVNXSFQiLCAgICAgICAgIHN0YXRfU19JU1dIVCwgIE1FVEhfTywgc3RhdF9TX0lTV0hUX2RvY30sCisgICAgeyJTX0lNT0RFIiwgICAgICAgICBzdGF0X1NfSU1PREUsICBNRVRIX08sIHN0YXRfU19JTU9ERV9kb2N9LAorICAgIHsiU19JRk1UIiwgICAgICAgICAgc3RhdF9TX0lGTVQsICAgTUVUSF9PLCBzdGF0X1NfSUZNVF9kb2N9LAorICAgIHsiZmlsZW1vZGUiLCAgICAgICAgc3RhdF9maWxlbW9kZSwgTUVUSF9PLCBzdGF0X2ZpbGVtb2RlX2RvY30sCisgICAge05VTEwsICAgICAgICAgICAgICBOVUxMfSAgICAgICAgICAgLyogc2VudGluZWwgKi8KK307CisKKworUHlEb2NfU1RSVkFSKG1vZHVsZV9kb2MsCisiU19JRk1UXzogZmlsZSB0eXBlIGJpdHNcblwKK1NfSUZESVI6IGRpcmVjdG9yeVxuXAorU19JRkNIUjogY2hhcmFjdGVyIGRldmljZVxuXAorU19JRkJMSzogYmxvY2sgZGV2aWNlXG5cCitTX0lGUkVHOiByZWd1bGFyIGZpbGVcblwKK1NfSUZJRk86IGZpZm8gKG5hbWVkIHBpcGUpXG5cCitTX0lGTE5LOiBzeW1ib2xpYyBsaW5rXG5cCitTX0lGU09DSzogc29ja2V0IGZpbGVcblwKK1NfSUZET09SOiBkb29yXG5cCitTX0lGUE9SVDogZXZlbnQgcG9ydFxuXAorU19JRldIVDogd2hpdGVvdXRcblwKK1xuIgorCisiU19JU1VJRDogc2V0IFVJRCBiaXRcblwKK1NfSVNHSUQ6IHNldCBHSUQgYml0XG5cCitTX0VORk1UOiBmaWxlIGxvY2tpbmcgZW5mb3JjZW1lbnRcblwKK1NfSVNWVFg6IHN0aWNreSBiaXRcblwKK1NfSVJFQUQ6IFVuaXggVjcgc3lub255bSBmb3IgU19JUlVTUlxuXAorU19JV1JJVEU6IFVuaXggVjcgc3lub255bSBmb3IgU19JV1VTUlxuXAorU19JRVhFQzogVW5peCBWNyBzeW5vbnltIGZvciBTX0lYVVNSXG5cCitTX0lSV1hVOiBtYXNrIGZvciBvd25lciBwZXJtaXNzaW9uc1xuXAorU19JUlVTUjogcmVhZCBieSBvd25lclxuXAorU19JV1VTUjogd3JpdGUgYnkgb3duZXJcblwKK1NfSVhVU1I6IGV4ZWN1dGUgYnkgb3duZXJcblwKK1NfSVJXWEc6IG1hc2sgZm9yIGdyb3VwIHBlcm1pc3Npb25zXG5cCitTX0lSR1JQOiByZWFkIGJ5IGdyb3VwXG5cCitTX0lXR1JQOiB3cml0ZSBieSBncm91cFxuXAorU19JWEdSUDogZXhlY3V0ZSBieSBncm91cFxuXAorU19JUldYTzogbWFzayBmb3Igb3RoZXJzIChub3QgaW4gZ3JvdXApIHBlcm1pc3Npb25zXG5cCitTX0lST1RIOiByZWFkIGJ5IG90aGVyc1xuXAorU19JV09USDogd3JpdGUgYnkgb3RoZXJzXG5cCitTX0lYT1RIOiBleGVjdXRlIGJ5IG90aGVyc1xuXAorXG4iCisKKyJVRl9OT0RVTVA6IGRvIG5vdCBkdW1wIGZpbGVcblwKK1VGX0lNTVVUQUJMRTogZmlsZSBtYXkgbm90IGJlIGNoYW5nZWRcblwKK1VGX0FQUEVORDogZmlsZSBtYXkgb25seSBiZSBhcHBlbmRlZCB0b1xuXAorVUZfT1BBUVVFOiBkaXJlY3RvcnkgaXMgb3BhcXVlIHdoZW4gdmlld2VkIHRocm91Z2ggYSB1bmlvbiBzdGFja1xuXAorVUZfTk9VTkxJTks6IGZpbGUgbWF5IG5vdCBiZSByZW5hbWVkIG9yIGRlbGV0ZWRcblwKK1VGX0NPTVBSRVNTRUQ6IE9TIFg6IGZpbGUgaXMgaGZzLWNvbXByZXNzZWRcblwKK1VGX0hJRERFTjogT1MgWDogZmlsZSBzaG91bGQgbm90IGJlIGRpc3BsYXllZFxuXAorU0ZfQVJDSElWRUQ6IGZpbGUgbWF5IGJlIGFyY2hpdmVkXG5cCitTRl9JTU1VVEFCTEU6IGZpbGUgbWF5IG5vdCBiZSBjaGFuZ2VkXG5cCitTRl9BUFBFTkQ6IGZpbGUgbWF5IG9ubHkgYmUgYXBwZW5kZWQgdG9cblwKK1NGX05PVU5MSU5LOiBmaWxlIG1heSBub3QgYmUgcmVuYW1lZCBvciBkZWxldGVkXG5cCitTRl9TTkFQU0hPVDogZmlsZSBpcyBhIHNuYXBzaG90IGZpbGVcblwKK1xuIgorCisiU1RfTU9ERVxuXAorU1RfSU5PXG5cCitTVF9ERVZcblwKK1NUX05MSU5LXG5cCitTVF9VSURcblwKK1NUX0dJRFxuXAorU1RfU0laRVxuXAorU1RfQVRJTUVcblwKK1NUX01USU1FXG5cCitTVF9DVElNRVxuXAorIik7CisKKworc3RhdGljIHN0cnVjdCBQeU1vZHVsZURlZiBzdGF0bW9kdWxlID0geworICAgIFB5TW9kdWxlRGVmX0hFQURfSU5JVCwKKyAgICAiX3N0YXQiLAorICAgIG1vZHVsZV9kb2MsCisgICAgLTEsCisgICAgc3RhdF9tZXRob2RzLAorICAgIE5VTEwsCisgICAgTlVMTCwKKyAgICBOVUxMLAorICAgIE5VTEwKK307CisKK1B5TU9ESU5JVF9GVU5DCitQeUluaXRfX3N0YXQodm9pZCkKK3sKKyAgICBQeU9iamVjdCAqbTsKKyAgICBtID0gUHlNb2R1bGVfQ3JlYXRlKCZzdGF0bW9kdWxlKTsKKyAgICBpZiAobSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTX0lGRElSKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNfSUZDSFIpKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU19JRkJMSykpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTX0lGUkVHKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNfSUZJRk8pKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU19JRkxOSykpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTX0lGU09DSykpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTX0lGRE9PUikpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTX0lGUE9SVCkpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTX0lGV0hUKSkgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU19JU1VJRCkpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTX0lTR0lEKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNfSVNWVFgpKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU19FTkZNVCkpIHJldHVybiBOVUxMOworCisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNfSVJFQUQpKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU19JV1JJVEUpKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU19JRVhFQykpIHJldHVybiBOVUxMOworCisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNfSVJXWFUpKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU19JUlVTUikpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTX0lXVVNSKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNfSVhVU1IpKSByZXR1cm4gTlVMTDsKKworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTX0lSV1hHKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNfSVJHUlApKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU19JV0dSUCkpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTX0lYR1JQKSkgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU19JUldYTykpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTX0lST1RIKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNfSVdPVEgpKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU19JWE9USCkpIHJldHVybiBOVUxMOworCisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFVGX05PRFVNUCkpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBVRl9JTU1VVEFCTEUpKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVUZfQVBQRU5EKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFVGX09QQVFVRSkpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBVRl9OT1VOTElOSykpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBVRl9DT01QUkVTU0VEKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFVGX0hJRERFTikpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTRl9BUkNISVZFRCkpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTRl9JTU1VVEFCTEUpKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU0ZfQVBQRU5EKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNGX05PVU5MSU5LKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNGX1NOQVBTSE9UKSkgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNUX01PREUiLCAwKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTVF9JTk8iLCAxKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTVF9ERVYiLCAyKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTVF9OTElOSyIsIDMpKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNUX1VJRCIsIDQpKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNUX0dJRCIsIDUpKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNUX1NJWkUiLCA2KSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTVF9BVElNRSIsIDcpKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNUX01USU1FIiwgOCkpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU1RfQ1RJTUUiLCA5KSkgcmV0dXJuIE5VTEw7CisKKyAgICByZXR1cm4gbTsKK30KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3N0cnVjdC5jIGIvTW9kdWxlcy9fc3RydWN0LmMKaW5kZXggYTI0ODc1My4uYWQ5OTU5ZSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fc3RydWN0LmMKKysrIGIvTW9kdWxlcy9fc3RydWN0LmMKQEAgLTI2LDYgKzI2LDcgQEAKICAgICBjb25zdCBzdHJ1Y3QgX2Zvcm1hdGRlZiAqZm10ZGVmOwogICAgIFB5X3NzaXplX3Qgb2Zmc2V0OwogICAgIFB5X3NzaXplX3Qgc2l6ZTsKKyAgICBQeV9zc2l6ZV90IHJlcGVhdDsKIH0gZm9ybWF0Y29kZTsKIAogLyogU3RydWN0IG9iamVjdCBpbnRlcmZhY2UgKi8KQEAgLTExOTksMTIgKzEyMDAsMTEgQEAKICAgICBjYXNlICchJzogLyogTmV0d29yayBieXRlIG9yZGVyIGlzIGJpZy1lbmRpYW4gKi8KICAgICAgICAgcmV0dXJuIGJpZ2VuZGlhbl90YWJsZTsKICAgICBjYXNlICc9JzogeyAvKiBIb3N0IGJ5dGUgb3JkZXIgLS0gZGlmZmVyZW50IGZyb20gbmF0aXZlIGluIGFsaWdubWVudCEgKi8KLSAgICAgICAgaW50IG4gPSAxOwotICAgICAgICBjaGFyICpwID0gKGNoYXIgKikgJm47Ci0gICAgICAgIGlmICgqcCA9PSAxKQotICAgICAgICAgICAgcmV0dXJuIGxpbGVuZGlhbl90YWJsZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIGJpZ2VuZGlhbl90YWJsZTsKKyNpZiBQWV9MSVRUTEVfRU5ESUFOCisgICAgICAgIHJldHVybiBsaWxlbmRpYW5fdGFibGU7CisjZWxzZQorICAgICAgICByZXR1cm4gYmlnZW5kaWFuX3RhYmxlOworI2VuZGlmCiAgICAgfQogICAgIGRlZmF1bHQ6CiAgICAgICAgIC0tKnBmbXQ7IC8qIEJhY2sgb3V0IG9mIHBvaW50ZXIgaW5jcmVtZW50ICovCkBAIC0xMjQ4LDYgKzEyNDgsOSBAQAogICAgIHJldHVybiBzaXplOwogfQogCisvKgorICogU3RydWN0IG9iamVjdCBpbXBsZW1lbnRhdGlvbi4KKyAqLwogCiAvKiBjYWxjdWxhdGUgdGhlIHNpemUgb2YgYSBmb3JtYXQgc3RyaW5nICovCiAKQEAgLTEyNjEsNyArMTI2NCw3IEBACiAgICAgY29uc3QgY2hhciAqczsKICAgICBjb25zdCBjaGFyICpmbXQ7CiAgICAgY2hhciBjOwotICAgIFB5X3NzaXplX3Qgc2l6ZSwgbGVuLCBudW0sIGl0ZW1zaXplOworICAgIFB5X3NzaXplX3Qgc2l6ZSwgbGVuLCBuY29kZXMsIG51bSwgaXRlbXNpemU7CiAKICAgICBmbXQgPSBQeUJ5dGVzX0FTX1NUUklORyhzZWxmLT5zX2Zvcm1hdCk7CiAKQEAgLTEyNzAsNiArMTI3Myw3IEBACiAgICAgcyA9IGZtdDsKICAgICBzaXplID0gMDsKICAgICBsZW4gPSAwOworICAgIG5jb2RlcyA9IDA7CiAgICAgd2hpbGUgKChjID0gKnMrKykgIT0gJ1wwJykgewogICAgICAgICBpZiAoUHlfSVNTUEFDRShQeV9DSEFSTUFTSyhjKSkpCiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTEyOTksOSArMTMwMyw5IEBACiAKICAgICAgICAgc3dpdGNoIChjKSB7CiAgICAgICAgICAgICBjYXNlICdzJzogLyogZmFsbCB0aHJvdWdoICovCi0gICAgICAgICAgICBjYXNlICdwJzogbGVuKys7IGJyZWFrOworICAgICAgICAgICAgY2FzZSAncCc6IGxlbisrOyBuY29kZXMrKzsgYnJlYWs7CiAgICAgICAgICAgICBjYXNlICd4JzogYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OiBsZW4gKz0gbnVtOyBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6IGxlbiArPSBudW07IGlmIChudW0pIG5jb2RlcysrOyBicmVhazsKICAgICAgICAgfQogCiAgICAgICAgIGl0ZW1zaXplID0gZS0+c2l6ZTsKQEAgLTEzMTYsMTQgKzEzMjAsMTQgQEAKICAgICB9CiAKICAgICAvKiBjaGVjayBmb3Igb3ZlcmZsb3cgKi8KLSAgICBpZiAoKGxlbiArIDEpID4gKFBZX1NTSVpFX1RfTUFYIC8gc2l6ZW9mKGZvcm1hdGNvZGUpKSkgeworICAgIGlmICgobmNvZGVzICsgMSkgPiAoUFlfU1NJWkVfVF9NQVggLyBzaXplb2YoZm9ybWF0Y29kZSkpKSB7CiAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKICAgICBzZWxmLT5zX3NpemUgPSBzaXplOwogICAgIHNlbGYtPnNfbGVuID0gbGVuOwotICAgIGNvZGVzID0gUHlNZW1fTUFMTE9DKChsZW4gKyAxKSAqIHNpemVvZihmb3JtYXRjb2RlKSk7CisgICAgY29kZXMgPSBQeU1lbV9NQUxMT0MoKG5jb2RlcyArIDEpICogc2l6ZW9mKGZvcm1hdGNvZGUpKTsKICAgICBpZiAoY29kZXMgPT0gTlVMTCkgewogICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICByZXR1cm4gLTE7CkBAIC0xMzU1LDIzICsxMzU5LDI0IEBACiAgICAgICAgICAgICBjb2Rlcy0+b2Zmc2V0ID0gc2l6ZTsKICAgICAgICAgICAgIGNvZGVzLT5zaXplID0gbnVtOwogICAgICAgICAgICAgY29kZXMtPmZtdGRlZiA9IGU7CisgICAgICAgICAgICBjb2Rlcy0+cmVwZWF0ID0gMTsKICAgICAgICAgICAgIGNvZGVzKys7CiAgICAgICAgICAgICBzaXplICs9IG51bTsKICAgICAgICAgfSBlbHNlIGlmIChjID09ICd4JykgewogICAgICAgICAgICAgc2l6ZSArPSBudW07Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB3aGlsZSAoLS1udW0gPj0gMCkgewotICAgICAgICAgICAgICAgIGNvZGVzLT5vZmZzZXQgPSBzaXplOwotICAgICAgICAgICAgICAgIGNvZGVzLT5zaXplID0gZS0+c2l6ZTsKLSAgICAgICAgICAgICAgICBjb2Rlcy0+Zm10ZGVmID0gZTsKLSAgICAgICAgICAgICAgICBjb2RlcysrOwotICAgICAgICAgICAgICAgIHNpemUgKz0gZS0+c2l6ZTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChudW0pIHsKKyAgICAgICAgICAgIGNvZGVzLT5vZmZzZXQgPSBzaXplOworICAgICAgICAgICAgY29kZXMtPnNpemUgPSBlLT5zaXplOworICAgICAgICAgICAgY29kZXMtPmZtdGRlZiA9IGU7CisgICAgICAgICAgICBjb2Rlcy0+cmVwZWF0ID0gbnVtOworICAgICAgICAgICAgY29kZXMrKzsKKyAgICAgICAgICAgIHNpemUgKz0gZS0+c2l6ZSAqIG51bTsKICAgICAgICAgfQogICAgIH0KICAgICBjb2Rlcy0+Zm10ZGVmID0gTlVMTDsKICAgICBjb2Rlcy0+b2Zmc2V0ID0gc2l6ZTsKICAgICBjb2Rlcy0+c2l6ZSA9IDA7CisgICAgY29kZXMtPnJlcGVhdCA9IDA7CiAKICAgICByZXR1cm4gMDsKIApAQCAtMTQ2MCwyMiArMTQ2NSwyNiBAQAogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGZvciAoY29kZSA9IHNvc2VsZi0+c19jb2RlczsgY29kZS0+Zm10ZGVmICE9IE5VTEw7IGNvZGUrKykgewotICAgICAgICBQeU9iamVjdCAqdjsKICAgICAgICAgY29uc3QgZm9ybWF0ZGVmICplID0gY29kZS0+Zm10ZGVmOwogICAgICAgICBjb25zdCBjaGFyICpyZXMgPSBzdGFydGZyb20gKyBjb2RlLT5vZmZzZXQ7Ci0gICAgICAgIGlmIChlLT5mb3JtYXQgPT0gJ3MnKSB7Ci0gICAgICAgICAgICB2ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShyZXMsIGNvZGUtPnNpemUpOwotICAgICAgICB9IGVsc2UgaWYgKGUtPmZvcm1hdCA9PSAncCcpIHsKLSAgICAgICAgICAgIFB5X3NzaXplX3QgbiA9ICoodW5zaWduZWQgY2hhciopcmVzOwotICAgICAgICAgICAgaWYgKG4gPj0gY29kZS0+c2l6ZSkKLSAgICAgICAgICAgICAgICBuID0gY29kZS0+c2l6ZSAtIDE7Ci0gICAgICAgICAgICB2ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShyZXMgKyAxLCBuKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHYgPSBlLT51bnBhY2socmVzLCBlKTsKKyAgICAgICAgUHlfc3NpemVfdCBqID0gY29kZS0+cmVwZWF0OworICAgICAgICB3aGlsZSAoai0tKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqdjsKKyAgICAgICAgICAgIGlmIChlLT5mb3JtYXQgPT0gJ3MnKSB7CisgICAgICAgICAgICAgICAgdiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUocmVzLCBjb2RlLT5zaXplKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoZS0+Zm9ybWF0ID09ICdwJykgeworICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgbiA9ICoodW5zaWduZWQgY2hhciopcmVzOworICAgICAgICAgICAgICAgIGlmIChuID49IGNvZGUtPnNpemUpCisgICAgICAgICAgICAgICAgICAgIG4gPSBjb2RlLT5zaXplIC0gMTsKKyAgICAgICAgICAgICAgICB2ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShyZXMgKyAxLCBuKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdiA9IGUtPnVucGFjayhyZXMsIGUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHYgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKHJlc3VsdCwgaSsrLCB2KTsKKyAgICAgICAgICAgIHJlcyArPSBjb2RlLT5zaXplOwogICAgICAgICB9Ci0gICAgICAgIGlmICh2ID09IE5VTEwpCi0gICAgICAgICAgICBnb3RvIGZhaWw7Ci0gICAgICAgIFB5VHVwbGVfU0VUX0lURU0ocmVzdWx0LCBpKyssIHYpOwogICAgIH0KIAogICAgIHJldHVybiByZXN1bHQ7CkBAIC0xNTU3LDYgKzE1NjYsMTQyIEBACiB9CiAKIAorLyogVW5wYWNrIGl0ZXJhdG9yIHR5cGUgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIFB5T2JqZWN0X0hFQUQKKyAgICBQeVN0cnVjdE9iamVjdCAqc287CisgICAgUHlfYnVmZmVyIGJ1ZjsKKyAgICBQeV9zc2l6ZV90IGluZGV4OworfSB1bnBhY2tpdGVyb2JqZWN0OworCitzdGF0aWMgdm9pZAordW5wYWNraXRlcl9kZWFsbG9jKHVucGFja2l0ZXJvYmplY3QgKnNlbGYpCit7CisgICAgUHlfWERFQ1JFRihzZWxmLT5zbyk7CisgICAgUHlCdWZmZXJfUmVsZWFzZSgmc2VsZi0+YnVmKTsKKyAgICBQeU9iamVjdF9HQ19EZWwoc2VsZik7Cit9CisKK3N0YXRpYyBpbnQKK3VucGFja2l0ZXJfdHJhdmVyc2UodW5wYWNraXRlcm9iamVjdCAqc2VsZiwgdmlzaXRwcm9jIHZpc2l0LCB2b2lkICphcmcpCit7CisgICAgUHlfVklTSVQoc2VsZi0+c28pOworICAgIFB5X1ZJU0lUKHNlbGYtPmJ1Zi5vYmopOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgUHlPYmplY3QgKgordW5wYWNraXRlcl9sZW4odW5wYWNraXRlcm9iamVjdCAqc2VsZikKK3sKKyAgICBQeV9zc2l6ZV90IGxlbjsKKyAgICBpZiAoc2VsZi0+c28gPT0gTlVMTCkKKyAgICAgICAgbGVuID0gMDsKKyAgICBlbHNlCisgICAgICAgIGxlbiA9IChzZWxmLT5idWYubGVuIC0gc2VsZi0+aW5kZXgpIC8gc2VsZi0+c28tPnNfc2l6ZTsKKyAgICByZXR1cm4gUHlMb25nX0Zyb21Tc2l6ZV90KGxlbik7Cit9CisKK3N0YXRpYyBQeU1ldGhvZERlZiB1bnBhY2tpdGVyX21ldGhvZHNbXSA9IHsKKyAgICB7Il9fbGVuZ3RoX2hpbnRfXyIsIChQeUNGdW5jdGlvbikgdW5wYWNraXRlcl9sZW4sIE1FVEhfTk9BUkdTLCBOVUxMfSwKKyAgICB7TlVMTCwgICAgICAgICAgICAgIE5VTEx9ICAgICAgICAgICAvKiBzZW50aW5lbCAqLworfTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3VucGFja2l0ZXJfaXRlcm5leHQodW5wYWNraXRlcm9iamVjdCAqc2VsZikKK3sKKyAgICBQeU9iamVjdCAqcmVzdWx0OworICAgIGlmIChzZWxmLT5zbyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoc2VsZi0+aW5kZXggPj0gc2VsZi0+YnVmLmxlbikgeworICAgICAgICAvKiBJdGVyYXRvciBleGhhdXN0ZWQgKi8KKyAgICAgICAgUHlfQ0xFQVIoc2VsZi0+c28pOworICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZzZWxmLT5idWYpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgYXNzZXJ0KHNlbGYtPmluZGV4ICsgc2VsZi0+c28tPnNfc2l6ZSA8PSBzZWxmLT5idWYubGVuKTsKKyAgICByZXN1bHQgPSBzX3VucGFja19pbnRlcm5hbChzZWxmLT5zbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciopIHNlbGYtPmJ1Zi5idWYgKyBzZWxmLT5pbmRleCk7CisgICAgc2VsZi0+aW5kZXggKz0gc2VsZi0+c28tPnNfc2l6ZTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgUHlUeXBlT2JqZWN0IHVucGFja2l0ZXJfdHlwZSA9IHsKKyAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoJlB5VHlwZV9UeXBlLCAwKQorICAgICJ1bnBhY2tfaXRlcmF0b3IiLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbmFtZSAqLworICAgIHNpemVvZih1bnBhY2tpdGVyb2JqZWN0KSwgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzaWNzaXplICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVtc2l6ZSAqLworICAgIChkZXN0cnVjdG9yKXVucGFja2l0ZXJfZGVhbGxvYywgICAgICAgICAgICAgLyogdHBfZGVhbGxvYyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcHJpbnQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldGF0dHIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3NldGF0dHIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3Jlc2VydmVkICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yZXByICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19udW1iZXIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX3NlcXVlbmNlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19tYXBwaW5nICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9oYXNoICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jYWxsICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zdHIgKi8KKyAgICBQeU9iamVjdF9HZW5lcmljR2V0QXR0ciwgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldGF0dHJvICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zZXRhdHRybyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfYnVmZmVyICovCisgICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19IQVZFX0dDLCAgICAvKiB0cF9mbGFncyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZG9jICovCisgICAgKHRyYXZlcnNlcHJvYyl1bnBhY2tpdGVyX3RyYXZlcnNlLCAgICAgICAgICAvKiB0cF90cmF2ZXJzZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2xlYXIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JpY2hjb21wYXJlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLworICAgIFB5T2JqZWN0X1NlbGZJdGVyLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlciAqLworICAgIChpdGVybmV4dGZ1bmMpdW5wYWNraXRlcl9pdGVybmV4dCwgICAgICAgICAgLyogdHBfaXRlcm5leHQgKi8KKyAgICB1bnBhY2tpdGVyX21ldGhvZHMgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KK307CisKK1B5RG9jX1NUUlZBUihzX2l0ZXJfdW5wYWNrX19kb2NfXywKKyJTLml0ZXJfdW5wYWNrKGJ1ZmZlcikgLT4gaXRlcmF0b3IodjEsIHYyLCAuLi4pXG5cCitcblwKK1JldHVybiBhbiBpdGVyYXRvciB5aWVsZGluZyB0dXBsZXMgdW5wYWNrZWQgZnJvbSB0aGUgZ2l2ZW4gYnl0ZXNcblwKK3NvdXJjZSwgbGlrZSBhIHJlcGVhdGVkIGludm9jYXRpb24gb2YgdW5wYWNrX2Zyb20oKS4gIFJlcXVpcmVzXG5cCit0aGF0IHRoZSBieXRlcyBsZW5ndGggYmUgYSBtdWx0aXBsZSBvZiB0aGUgc3RydWN0IHNpemUuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitzX2l0ZXJfdW5wYWNrKFB5T2JqZWN0ICpfc28sIFB5T2JqZWN0ICppbnB1dCkKK3sKKyAgICBQeVN0cnVjdE9iamVjdCAqc28gPSAoUHlTdHJ1Y3RPYmplY3QgKikgX3NvOworICAgIHVucGFja2l0ZXJvYmplY3QgKnNlbGY7CisKKyAgICBhc3NlcnQoUHlTdHJ1Y3RfQ2hlY2soX3NvKSk7CisgICAgYXNzZXJ0KHNvLT5zX2NvZGVzICE9IE5VTEwpOworCisgICAgaWYgKHNvLT5zX3NpemUgPT0gMCkgeworICAgICAgICBQeUVycl9Gb3JtYXQoU3RydWN0RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAiY2Fubm90IGl0ZXJhdGl2ZWx5IHVucGFjayB3aXRoIGEgc3RydWN0IG9mIGxlbmd0aCAwIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHNlbGYgPSAodW5wYWNraXRlcm9iamVjdCAqKSBQeVR5cGVfR2VuZXJpY0FsbG9jKCZ1bnBhY2tpdGVyX3R5cGUsIDApOworICAgIGlmIChzZWxmID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKFB5T2JqZWN0X0dldEJ1ZmZlcihpbnB1dCwgJnNlbGYtPmJ1ZiwgUHlCVUZfU0lNUExFKSA8IDApIHsKKyAgICAgICAgUHlfREVDUkVGKHNlbGYpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKHNlbGYtPmJ1Zi5sZW4gJSBzby0+c19zaXplICE9IDApIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFN0cnVjdEVycm9yLAorICAgICAgICAgICAgICAgICAgICAgIml0ZXJhdGl2ZSB1bnBhY2tpbmcgcmVxdWlyZXMgYSBieXRlcyBsZW5ndGggIgorICAgICAgICAgICAgICAgICAgICAgIm11bHRpcGxlIG9mICV6ZCIsCisgICAgICAgICAgICAgICAgICAgICBzby0+c19zaXplKTsKKyAgICAgICAgUHlfREVDUkVGKHNlbGYpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgUHlfSU5DUkVGKHNvKTsKKyAgICBzZWxmLT5zbyA9IHNvOworICAgIHNlbGYtPmluZGV4ID0gMDsKKyAgICByZXR1cm4gKFB5T2JqZWN0ICopIHNlbGY7Cit9CisKKwogLyoKICAqIEd1dHMgb2YgdGhlIHBhY2sgZnVuY3Rpb24uCiAgKgpAQCAtMTU3OCw2MiArMTcyMyw2NyBAQAogICAgIG1lbXNldChidWYsICdcMCcsIHNvc2VsZi0+c19zaXplKTsKICAgICBpID0gb2Zmc2V0OwogICAgIGZvciAoY29kZSA9IHNvc2VsZi0+c19jb2RlczsgY29kZS0+Zm10ZGVmICE9IE5VTEw7IGNvZGUrKykgewotICAgICAgICBQeV9zc2l6ZV90IG47Ci0gICAgICAgIFB5T2JqZWN0ICp2ID0gUHlUdXBsZV9HRVRfSVRFTShhcmdzLCBpKyspOwogICAgICAgICBjb25zdCBmb3JtYXRkZWYgKmUgPSBjb2RlLT5mbXRkZWY7CiAgICAgICAgIGNoYXIgKnJlcyA9IGJ1ZiArIGNvZGUtPm9mZnNldDsKLSAgICAgICAgaWYgKGUtPmZvcm1hdCA9PSAncycpIHsKLSAgICAgICAgICAgIGludCBpc3N0cmluZzsKLSAgICAgICAgICAgIHZvaWQgKnA7Ci0gICAgICAgICAgICBpc3N0cmluZyA9IFB5Qnl0ZXNfQ2hlY2sodik7Ci0gICAgICAgICAgICBpZiAoIWlzc3RyaW5nICYmICFQeUJ5dGVBcnJheV9DaGVjayh2KSkgewotICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhTdHJ1Y3RFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFyZ3VtZW50IGZvciAncycgbXVzdCBiZSBhIGJ5dGVzIG9iamVjdCIpOwotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChpc3N0cmluZykgewotICAgICAgICAgICAgICAgIG4gPSBQeUJ5dGVzX0dFVF9TSVpFKHYpOwotICAgICAgICAgICAgICAgIHAgPSBQeUJ5dGVzX0FTX1NUUklORyh2KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIG4gPSBQeUJ5dGVBcnJheV9HRVRfU0laRSh2KTsKLSAgICAgICAgICAgICAgICBwID0gUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHYpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG4gPiBjb2RlLT5zaXplKQotICAgICAgICAgICAgICAgIG4gPSBjb2RlLT5zaXplOwotICAgICAgICAgICAgaWYgKG4gPiAwKQotICAgICAgICAgICAgICAgIG1lbWNweShyZXMsIHAsIG4pOwotICAgICAgICB9IGVsc2UgaWYgKGUtPmZvcm1hdCA9PSAncCcpIHsKLSAgICAgICAgICAgIGludCBpc3N0cmluZzsKLSAgICAgICAgICAgIHZvaWQgKnA7Ci0gICAgICAgICAgICBpc3N0cmluZyA9IFB5Qnl0ZXNfQ2hlY2sodik7Ci0gICAgICAgICAgICBpZiAoIWlzc3RyaW5nICYmICFQeUJ5dGVBcnJheV9DaGVjayh2KSkgewotICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhTdHJ1Y3RFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFyZ3VtZW50IGZvciAncCcgbXVzdCBiZSBhIGJ5dGVzIG9iamVjdCIpOwotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChpc3N0cmluZykgewotICAgICAgICAgICAgICAgIG4gPSBQeUJ5dGVzX0dFVF9TSVpFKHYpOwotICAgICAgICAgICAgICAgIHAgPSBQeUJ5dGVzX0FTX1NUUklORyh2KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIG4gPSBQeUJ5dGVBcnJheV9HRVRfU0laRSh2KTsKLSAgICAgICAgICAgICAgICBwID0gUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHYpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG4gPiAoY29kZS0+c2l6ZSAtIDEpKQotICAgICAgICAgICAgICAgIG4gPSBjb2RlLT5zaXplIC0gMTsKLSAgICAgICAgICAgIGlmIChuID4gMCkKLSAgICAgICAgICAgICAgICBtZW1jcHkocmVzICsgMSwgcCwgbik7Ci0gICAgICAgICAgICBpZiAobiA+IDI1NSkKLSAgICAgICAgICAgICAgICBuID0gMjU1OwotICAgICAgICAgICAgKnJlcyA9IFB5X1NBRkVfRE9XTkNBU1QobiwgUHlfc3NpemVfdCwgdW5zaWduZWQgY2hhcik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoZS0+cGFjayhyZXMsIHYsIGUpIDwgMCkgewotICAgICAgICAgICAgICAgIGlmIChQeUxvbmdfQ2hlY2sodikgJiYgUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19PdmVyZmxvd0Vycm9yKSkKKyAgICAgICAgUHlfc3NpemVfdCBqID0gY29kZS0+cmVwZWF0OworICAgICAgICB3aGlsZSAoai0tKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqdiA9IFB5VHVwbGVfR0VUX0lURU0oYXJncywgaSsrKTsKKyAgICAgICAgICAgIGlmIChlLT5mb3JtYXQgPT0gJ3MnKSB7CisgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBuOworICAgICAgICAgICAgICAgIGludCBpc3N0cmluZzsKKyAgICAgICAgICAgICAgICB2b2lkICpwOworICAgICAgICAgICAgICAgIGlzc3RyaW5nID0gUHlCeXRlc19DaGVjayh2KTsKKyAgICAgICAgICAgICAgICBpZiAoIWlzc3RyaW5nICYmICFQeUJ5dGVBcnJheV9DaGVjayh2KSkgewogICAgICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoU3RydWN0RXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW50IHRvbyBsYXJnZSB0byBjb252ZXJ0Iik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFyZ3VtZW50IGZvciAncycgbXVzdCBiZSBhIGJ5dGVzIG9iamVjdCIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChpc3N0cmluZykgeworICAgICAgICAgICAgICAgICAgICBuID0gUHlCeXRlc19HRVRfU0laRSh2KTsKKyAgICAgICAgICAgICAgICAgICAgcCA9IFB5Qnl0ZXNfQVNfU1RSSU5HKHYpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbiA9IFB5Qnl0ZUFycmF5X0dFVF9TSVpFKHYpOworICAgICAgICAgICAgICAgICAgICBwID0gUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHYpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAobiA+IGNvZGUtPnNpemUpCisgICAgICAgICAgICAgICAgICAgIG4gPSBjb2RlLT5zaXplOworICAgICAgICAgICAgICAgIGlmIChuID4gMCkKKyAgICAgICAgICAgICAgICAgICAgbWVtY3B5KHJlcywgcCwgbik7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGUtPmZvcm1hdCA9PSAncCcpIHsKKyAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IG47CisgICAgICAgICAgICAgICAgaW50IGlzc3RyaW5nOworICAgICAgICAgICAgICAgIHZvaWQgKnA7CisgICAgICAgICAgICAgICAgaXNzdHJpbmcgPSBQeUJ5dGVzX0NoZWNrKHYpOworICAgICAgICAgICAgICAgIGlmICghaXNzdHJpbmcgJiYgIVB5Qnl0ZUFycmF5X0NoZWNrKHYpKSB7CisgICAgICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhTdHJ1Y3RFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhcmd1bWVudCBmb3IgJ3AnIG11c3QgYmUgYSBieXRlcyBvYmplY3QiKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoaXNzdHJpbmcpIHsKKyAgICAgICAgICAgICAgICAgICAgbiA9IFB5Qnl0ZXNfR0VUX1NJWkUodik7CisgICAgICAgICAgICAgICAgICAgIHAgPSBQeUJ5dGVzX0FTX1NUUklORyh2KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIG4gPSBQeUJ5dGVBcnJheV9HRVRfU0laRSh2KTsKKyAgICAgICAgICAgICAgICAgICAgcCA9IFB5Qnl0ZUFycmF5X0FTX1NUUklORyh2KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKG4gPiAoY29kZS0+c2l6ZSAtIDEpKQorICAgICAgICAgICAgICAgICAgICBuID0gY29kZS0+c2l6ZSAtIDE7CisgICAgICAgICAgICAgICAgaWYgKG4gPiAwKQorICAgICAgICAgICAgICAgICAgICBtZW1jcHkocmVzICsgMSwgcCwgbik7CisgICAgICAgICAgICAgICAgaWYgKG4gPiAyNTUpCisgICAgICAgICAgICAgICAgICAgIG4gPSAyNTU7CisgICAgICAgICAgICAgICAgKnJlcyA9IFB5X1NBRkVfRE9XTkNBU1QobiwgUHlfc3NpemVfdCwgdW5zaWduZWQgY2hhcik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChlLT5wYWNrKHJlcywgdiwgZSkgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChQeUxvbmdfQ2hlY2sodikgJiYgUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19PdmVyZmxvd0Vycm9yKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhTdHJ1Y3RFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW50IHRvbyBsYXJnZSB0byBjb252ZXJ0Iik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CisgICAgICAgICAgICByZXMgKz0gY29kZS0+c2l6ZTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTY5Miw4ICsxODQyLDggQEAKIHNfcGFja19pbnRvKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBQeVN0cnVjdE9iamVjdCAqc29zZWxmOwotICAgIGNoYXIgKmJ1ZmZlcjsKLSAgICBQeV9zc2l6ZV90IGJ1ZmZlcl9sZW4sIG9mZnNldDsKKyAgICBQeV9idWZmZXIgYnVmZmVyOworICAgIFB5X3NzaXplX3Qgb2Zmc2V0OwogCiAgICAgLyogVmFsaWRhdGUgYXJndW1lbnRzLiAgKzEgaXMgZm9yIHRoZSBmaXJzdCBhcmcgYXMgYnVmZmVyLiAqLwogICAgIHNvc2VsZiA9IChQeVN0cnVjdE9iamVjdCAqKXNlbGY7CkBAIC0xNzE4LDM0ICsxODY4LDM3IEBACiAgICAgfQogCiAgICAgLyogRXh0cmFjdCBhIHdyaXRhYmxlIG1lbW9yeSBidWZmZXIgZnJvbSB0aGUgZmlyc3QgYXJndW1lbnQgKi8KLSAgICBpZiAoIFB5T2JqZWN0X0FzV3JpdGVCdWZmZXIoUHlUdXBsZV9HRVRfSVRFTShhcmdzLCAwKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiopJmJ1ZmZlciwgJmJ1ZmZlcl9sZW4pID09IC0xICkgeworICAgIGlmICghUHlBcmdfUGFyc2UoUHlUdXBsZV9HRVRfSVRFTShhcmdzLCAwKSwgIncqIiwgJmJ1ZmZlcikpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBhc3NlcnQoIGJ1ZmZlcl9sZW4gPj0gMCApOworICAgIGFzc2VydChidWZmZXIubGVuID49IDApOwogCiAgICAgLyogRXh0cmFjdCB0aGUgb2Zmc2V0IGZyb20gdGhlIGZpcnN0IGFyZ3VtZW50ICovCiAgICAgb2Zmc2V0ID0gUHlOdW1iZXJfQXNTc2l6ZV90KFB5VHVwbGVfR0VUX0lURU0oYXJncywgMSksIFB5RXhjX0luZGV4RXJyb3IpOwotICAgIGlmIChvZmZzZXQgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICBpZiAob2Zmc2V0ID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmYnVmZmVyKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogCiAgICAgLyogU3VwcG9ydCBuZWdhdGl2ZSBvZmZzZXRzLiAqLwogICAgIGlmIChvZmZzZXQgPCAwKQotICAgICAgICBvZmZzZXQgKz0gYnVmZmVyX2xlbjsKKyAgICAgICAgb2Zmc2V0ICs9IGJ1ZmZlci5sZW47CiAKICAgICAvKiBDaGVjayBib3VuZGFyaWVzICovCi0gICAgaWYgKG9mZnNldCA8IDAgfHwgKGJ1ZmZlcl9sZW4gLSBvZmZzZXQpIDwgc29zZWxmLT5zX3NpemUpIHsKKyAgICBpZiAob2Zmc2V0IDwgMCB8fCAoYnVmZmVyLmxlbiAtIG9mZnNldCkgPCBzb3NlbGYtPnNfc2l6ZSkgewogICAgICAgICBQeUVycl9Gb3JtYXQoU3RydWN0RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAicGFja19pbnRvIHJlcXVpcmVzIGEgYnVmZmVyIG9mIGF0IGxlYXN0ICV6ZCBieXRlcyIsCiAgICAgICAgICAgICAgICAgICAgICBzb3NlbGYtPnNfc2l6ZSk7CisgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmJ1ZmZlcik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAogICAgIC8qIENhbGwgdGhlIGd1dHMgKi8KLSAgICBpZiAoIHNfcGFja19pbnRlcm5hbChzb3NlbGYsIGFyZ3MsIDIsIGJ1ZmZlciArIG9mZnNldCkgIT0gMCApIHsKKyAgICBpZiAoc19wYWNrX2ludGVybmFsKHNvc2VsZiwgYXJncywgMiwgKGNoYXIqKWJ1ZmZlci5idWYgKyBvZmZzZXQpICE9IDApIHsKKyAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmYnVmZmVyKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCisgICAgUHlCdWZmZXJfUmVsZWFzZSgmYnVmZmVyKTsKICAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIApAQCAtMTc2OSwxNCArMTkyMiwxOCBAQAogc19zaXplb2YoUHlTdHJ1Y3RPYmplY3QgKnNlbGYsIHZvaWQgKnVudXNlZCkKIHsKICAgICBQeV9zc2l6ZV90IHNpemU7CisgICAgZm9ybWF0Y29kZSAqY29kZTsKIAotICAgIHNpemUgPSBzaXplb2YoUHlTdHJ1Y3RPYmplY3QpICsgc2l6ZW9mKGZvcm1hdGNvZGUpICogKHNlbGYtPnNfbGVuICsgMSk7CisgICAgc2l6ZSA9IHNpemVvZihQeVN0cnVjdE9iamVjdCkgKyBzaXplb2YoZm9ybWF0Y29kZSk7CisgICAgZm9yIChjb2RlID0gc2VsZi0+c19jb2RlczsgY29kZS0+Zm10ZGVmICE9IE5VTEw7IGNvZGUrKykKKyAgICAgICAgc2l6ZSArPSBzaXplb2YoZm9ybWF0Y29kZSk7CiAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tU3NpemVfdChzaXplKTsKIH0KIAogLyogTGlzdCBvZiBmdW5jdGlvbnMgKi8KIAogc3RhdGljIHN0cnVjdCBQeU1ldGhvZERlZiBzX21ldGhvZHNbXSA9IHsKKyAgICB7Iml0ZXJfdW5wYWNrIiwgICAgIHNfaXRlcl91bnBhY2ssICBNRVRIX08sIHNfaXRlcl91bnBhY2tfX2RvY19ffSwKICAgICB7InBhY2siLCAgICAgICAgICAgIHNfcGFjaywgICAgICAgICBNRVRIX1ZBUkFSR1MsIHNfcGFja19fZG9jX199LAogICAgIHsicGFja19pbnRvIiwgICAgICAgc19wYWNrX2ludG8sICAgIE1FVEhfVkFSQVJHUywgc19wYWNrX2ludG9fX2RvY19ffSwKICAgICB7InVucGFjayIsICAgICAgICAgIHNfdW5wYWNrLCAgICAgICBNRVRIX08sIHNfdW5wYWNrX19kb2NfX30sCkBAIC0yMDI2LDkgKzIxODMsMzQgQEAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCitQeURvY19TVFJWQVIoaXRlcl91bnBhY2tfZG9jLAorIml0ZXJfdW5wYWNrKGZtdCwgYnVmZmVyKSAtPiBpdGVyYXRvcih2MSwgdjIsIC4uLilcblwKK1xuXAorUmV0dXJuIGFuIGl0ZXJhdG9yIHlpZWxkaW5nIHR1cGxlcyB1bnBhY2tlZCBmcm9tIHRoZSBnaXZlbiBieXRlc1xuXAorc291cmNlIGFjY29yZGluZyB0byB0aGUgZm9ybWF0IHN0cmluZywgbGlrZSBhIHJlcGVhdGVkIGludm9jYXRpb24gb2ZcblwKK3VucGFja19mcm9tKCkuICBSZXF1aXJlcyB0aGF0IHRoZSBieXRlcyBsZW5ndGggYmUgYSBtdWx0aXBsZSBvZiB0aGVcblwKK2Zvcm1hdCBzdHJ1Y3Qgc2l6ZS4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2l0ZXJfdW5wYWNrKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqc19vYmplY3QsICpmbXQsICppbnB1dCwgKnJlc3VsdDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiT086aXRlcl91bnBhY2siLCAmZm10LCAmaW5wdXQpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHNfb2JqZWN0ID0gY2FjaGVfc3RydWN0KGZtdCk7CisgICAgaWYgKHNfb2JqZWN0ID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHJlc3VsdCA9IHNfaXRlcl91bnBhY2soc19vYmplY3QsIGlucHV0KTsKKyAgICBQeV9ERUNSRUYoc19vYmplY3QpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgUHlNZXRob2REZWYgbW9kdWxlX2Z1bmN0aW9uc1tdID0gewogICAgIHsiX2NsZWFyY2FjaGUiLCAgICAgKFB5Q0Z1bmN0aW9uKWNsZWFyY2FjaGUsICAgICAgICBNRVRIX05PQVJHUywgICAgY2xlYXJjYWNoZV9kb2N9LAogICAgIHsiY2FsY3NpemUiLCAgICAgICAgY2FsY3NpemUsICAgICAgIE1FVEhfTywgY2FsY3NpemVfZG9jfSwKKyAgICB7Iml0ZXJfdW5wYWNrIiwgICAgIGl0ZXJfdW5wYWNrLCAgICBNRVRIX1ZBUkFSR1MsICAgaXRlcl91bnBhY2tfZG9jfSwKICAgICB7InBhY2siLCAgICAgICAgICAgIHBhY2ssICAgICAgICAgICBNRVRIX1ZBUkFSR1MsICAgcGFja19kb2N9LAogICAgIHsicGFja19pbnRvIiwgICAgICAgcGFja19pbnRvLCAgICAgIE1FVEhfVkFSQVJHUywgICBwYWNrX2ludG9fZG9jfSwKICAgICB7InVucGFjayIsICAgICAgICAgIHVucGFjaywgTUVUSF9WQVJBUkdTLCAgIHVucGFja19kb2N9LApAQCAtMjA5OCwxMyArMjI4MCwxMyBAQAogCiAgICAgLyogQ2hlY2sgZW5kaWFuIGFuZCBzd2FwIGluIGZhc3RlciBmdW5jdGlvbnMgKi8KICAgICB7Ci0gICAgICAgIGludCBvbmUgPSAxOwogICAgICAgICBmb3JtYXRkZWYgKm5hdGl2ZSA9IG5hdGl2ZV90YWJsZTsKICAgICAgICAgZm9ybWF0ZGVmICpvdGhlciwgKnB0cjsKLSAgICAgICAgaWYgKChpbnQpKih1bnNpZ25lZCBjaGFyKikmb25lKQotICAgICAgICAgICAgb3RoZXIgPSBsaWxlbmRpYW5fdGFibGU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG90aGVyID0gYmlnZW5kaWFuX3RhYmxlOworI2lmIFBZX0xJVFRMRV9FTkRJQU4KKyAgICAgICAgb3RoZXIgPSBsaWxlbmRpYW5fdGFibGU7CisjZWxzZQorICAgICAgICBvdGhlciA9IGJpZ2VuZGlhbl90YWJsZTsKKyNlbmRpZgogICAgICAgICAvKiBTY2FuIHRocm91Z2ggdGhlIG5hdGl2ZSB0YWJsZSwgZmluZCBhIG1hdGNoaW5nCiAgICAgICAgICAgIGVudHJ5IGluIHRoZSBlbmRpYW4gdGFibGUgYW5kIHN3YXAgaW4gdGhlCiAgICAgICAgICAgIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbnMgd2hlbmV2ZXIgcG9zc2libGUKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3Rlc3RidWZmZXIuYyBiL01vZHVsZXMvX3Rlc3RidWZmZXIuYwppbmRleCAzMTY2NjZlLi4xNzZkZjdjIDEwMDY0NAotLS0gYS9Nb2R1bGVzL190ZXN0YnVmZmVyLmMKKysrIGIvTW9kdWxlcy9fdGVzdGJ1ZmZlci5jCkBAIC04NTAsNyArODUwLDcgQEAKICAgICBQeV9zc2l6ZV90ICpkZXN0OwogICAgIFB5X3NzaXplX3QgeCwgaTsKIAotICAgIGRlc3QgPSBQeU1lbV9NYWxsb2MobGVuICogKHNpemVvZiAqZGVzdCkpOworICAgIGRlc3QgPSBQeU1lbV9OZXcoUHlfc3NpemVfdCwgbGVuKTsKICAgICBpZiAoZGVzdCA9PSBOVUxMKSB7CiAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMTgxNSw3ICsxODE1LDcgQEAKICAgICAgICAgaWYgKGluaXRfc2xpY2UoYmFzZSwga2V5LCAwKSA8IDApCiAgICAgICAgICAgICBnb3RvIGVycl9vY2N1cnJlZDsKICAgICB9Ci0gICAgZWxzZSBpZiBQeVR1cGxlX0NoZWNrKGtleSkgeworICAgIGVsc2UgaWYgKFB5VHVwbGVfQ2hlY2soa2V5KSkgewogICAgICAgICAvKiBtdWx0aS1kaW1lbnNpb25hbCBzbGljZSAqLwogICAgICAgICBQeU9iamVjdCAqdHVwbGUgPSBrZXk7CiAgICAgICAgIFB5X3NzaXplX3QgaSwgbjsKQEAgLTI4MzcsMzYgKzI4MzcsMzYgQEAKICAgICBpZiAoc2ltcGxlX2Zvcm1hdCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJORF9NQVhfTkRJTSIsIE5EX01BWF9ORElNKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTkRfVkFSRVhQT1JUIiwgTkRfVkFSRVhQT1JUKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTkRfV1JJVEFCTEUiLCBORF9XUklUQUJMRSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk5EX0ZPUlRSQU4iLCBORF9GT1JUUkFOKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTkRfU0NBTEFSIiwgTkRfU0NBTEFSKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTkRfUElMIiwgTkRfUElMKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTkRfR0VUQlVGX0ZBSUwiLCBORF9HRVRCVUZfRkFJTCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk5EX0dFVEJVRl9VTkRFRklORUQiLCBORF9HRVRCVUZfVU5ERUZJTkVEKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTkRfUkVESVJFQ1QiLCBORF9SRURJUkVDVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTkRfTUFYX05ESU0pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE5EX1ZBUkVYUE9SVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTkRfV1JJVEFCTEUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE5EX0ZPUlRSQU4pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE5EX1NDQUxBUik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTkRfUElMKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBORF9HRVRCVUZfRkFJTCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTkRfR0VUQlVGX1VOREVGSU5FRCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTkRfUkVESVJFQ1QpOwogCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlB5QlVGX1NJTVBMRSIsIFB5QlVGX1NJTVBMRSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlB5QlVGX1dSSVRBQkxFIiwgUHlCVUZfV1JJVEFCTEUpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQeUJVRl9GT1JNQVQiLCBQeUJVRl9GT1JNQVQpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQeUJVRl9ORCIsIFB5QlVGX05EKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUHlCVUZfU1RSSURFUyIsIFB5QlVGX1NUUklERVMpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQeUJVRl9JTkRJUkVDVCIsIFB5QlVGX0lORElSRUNUKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUHlCVUZfQ19DT05USUdVT1VTIiwgUHlCVUZfQ19DT05USUdVT1VTKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUHlCVUZfRl9DT05USUdVT1VTIiwgUHlCVUZfRl9DT05USUdVT1VTKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUHlCVUZfQU5ZX0NPTlRJR1VPVVMiLCBQeUJVRl9BTllfQ09OVElHVU9VUyk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlB5QlVGX0ZVTEwiLCBQeUJVRl9GVUxMKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUHlCVUZfRlVMTF9STyIsIFB5QlVGX0ZVTExfUk8pOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQeUJVRl9SRUNPUkRTIiwgUHlCVUZfUkVDT1JEUyk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlB5QlVGX1JFQ09SRFNfUk8iLCBQeUJVRl9SRUNPUkRTX1JPKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUHlCVUZfU1RSSURFRCIsIFB5QlVGX1NUUklERUQpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQeUJVRl9TVFJJREVEX1JPIiwgUHlCVUZfU1RSSURFRF9STyk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlB5QlVGX0NPTlRJRyIsIFB5QlVGX0NPTlRJRyk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlB5QlVGX0NPTlRJR19STyIsIFB5QlVGX0NPTlRJR19STyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUHlCVUZfU0lNUExFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQeUJVRl9XUklUQUJMRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUHlCVUZfRk9STUFUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQeUJVRl9ORCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUHlCVUZfU1RSSURFUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUHlCVUZfSU5ESVJFQ1QpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFB5QlVGX0NfQ09OVElHVU9VUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUHlCVUZfRl9DT05USUdVT1VTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQeUJVRl9BTllfQ09OVElHVU9VUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUHlCVUZfRlVMTCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUHlCVUZfRlVMTF9STyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUHlCVUZfUkVDT1JEUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUHlCVUZfUkVDT1JEU19STyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUHlCVUZfU1RSSURFRCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUHlCVUZfU1RSSURFRF9STyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUHlCVUZfQ09OVElHKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQeUJVRl9DT05USUdfUk8pOwogCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlB5QlVGX1JFQUQiLCBQeUJVRl9SRUFEKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUHlCVUZfV1JJVEUiLCBQeUJVRl9XUklURSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUHlCVUZfUkVBRCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUHlCVUZfV1JJVEUpOwogCiAgICAgcmV0dXJuIG07CiB9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL190ZXN0Y2FwaW1vZHVsZS5jIGIvTW9kdWxlcy9fdGVzdGNhcGltb2R1bGUuYwppbmRleCA5MWYyOTFhLi44ZWJlOTcwIDEwMDY0NAotLS0gYS9Nb2R1bGVzL190ZXN0Y2FwaW1vZHVsZS5jCisrKyBiL01vZHVsZXMvX3Rlc3RjYXBpbW9kdWxlLmMKQEAgLTExLDYgKzExLDcgQEAKICNpbmNsdWRlIDxmbG9hdC5oPgogI2luY2x1ZGUgInN0cnVjdG1lbWJlci5oIgogI2luY2x1ZGUgImRhdGV0aW1lLmgiCisjaW5jbHVkZSAibWFyc2hhbC5oIgogCiAjaWZkZWYgV0lUSF9USFJFQUQKICNpbmNsdWRlICJweXRocmVhZC5oIgpAQCAtNjUsNiArNjYsNjkgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0KgordGVzdF9zaXplb2ZfY190eXBlcyhQeU9iamVjdCAqc2VsZikKK3sKKyNkZWZpbmUgQ0hFQ0tfU0laRU9GKFRZUEUsIEVYUEVDVEVEKSAgICAgICAgIFwKKyAgICBpZiAoRVhQRUNURUQgIT0gc2l6ZW9mKFRZUEUpKSAgeyAgICAgICAgIFwKKyAgICAgICAgUHlFcnJfRm9ybWF0KFRlc3RFcnJvciwgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICJzaXplb2YoJXMpID0gJXUgaW5zdGVhZCBvZiAldSIsIFwKKyAgICAgICAgICAgICNUWVBFLCBzaXplb2YoVFlQRSksIEVYUEVDVEVEKTsgIFwKKyAgICAgICAgcmV0dXJuIChQeU9iamVjdCopTlVMTDsgICAgICAgICAgICAgIFwKKyAgICB9CisjZGVmaW5lIElTX1NJR05FRChUWVBFKSAoKChUWVBFKS0xKSA8IChUWVBFKTApCisjZGVmaW5lIENIRUNLX1NJR05ORVNTKFRZUEUsIFNJR05FRCkgICAgICAgICBcCisgICAgaWYgKElTX1NJR05FRChUWVBFKSAhPSBTSUdORUQpIHsgICAgICAgICBcCisgICAgICAgIFB5RXJyX0Zvcm1hdChUZXN0RXJyb3IsICAgICAgICAgICAgICBcCisgICAgICAgICAgICAiJXMgc2lnbm5lc3MgaXMsIGluc3RlYWQgb2YgJWkiLCAgXAorICAgICAgICAgICAgI1RZUEUsIElTX1NJR05FRChUWVBFKSwgU0lHTkVEKTsgXAorICAgICAgICByZXR1cm4gKFB5T2JqZWN0KilOVUxMOyAgICAgICAgICAgICAgXAorICAgIH0KKworICAgIC8qIGludGVnZXIgdHlwZXMgKi8KKyAgICBDSEVDS19TSVpFT0YoUHlfVUNTMSwgMSk7CisgICAgQ0hFQ0tfU0laRU9GKFB5X1VDUzIsIDIpOworICAgIENIRUNLX1NJWkVPRihQeV9VQ1M0LCA0KTsKKyAgICBDSEVDS19TSUdOTkVTUyhQeV9VQ1MxLCAwKTsKKyAgICBDSEVDS19TSUdOTkVTUyhQeV9VQ1MyLCAwKTsKKyAgICBDSEVDS19TSUdOTkVTUyhQeV9VQ1M0LCAwKTsKKyNpZmRlZiBIQVZFX0lOVDMyX1QKKyAgICBDSEVDS19TSVpFT0YoUFlfSU5UMzJfVCwgNCk7CisgICAgQ0hFQ0tfU0lHTk5FU1MoUFlfSU5UMzJfVCwgMSk7CisjZW5kaWYKKyNpZmRlZiBIQVZFX1VJTlQzMl9UCisgICAgQ0hFQ0tfU0laRU9GKFBZX1VJTlQzMl9ULCA0KTsKKyAgICBDSEVDS19TSUdOTkVTUyhQWV9VSU5UMzJfVCwgMCk7CisjZW5kaWYKKyNpZmRlZiBIQVZFX0lOVDY0X1QKKyAgICBDSEVDS19TSVpFT0YoUFlfSU5UNjRfVCwgOCk7CisgICAgQ0hFQ0tfU0lHTk5FU1MoUFlfSU5UNjRfVCwgMSk7CisjZW5kaWYKKyNpZmRlZiBIQVZFX1VJTlQ2NF9UCisgICAgQ0hFQ0tfU0laRU9GKFBZX1VJTlQ2NF9ULCA4KTsKKyAgICBDSEVDS19TSUdOTkVTUyhQWV9VSU5UNjRfVCwgMCk7CisjZW5kaWYKKworICAgIC8qIHBvaW50ZXIvc2l6ZSB0eXBlcyAqLworICAgIENIRUNLX1NJWkVPRihzaXplX3QsIHNpemVvZih2b2lkICopKTsKKyAgICBDSEVDS19TSUdOTkVTUyhzaXplX3QsIDApOworICAgIENIRUNLX1NJWkVPRihQeV9zc2l6ZV90LCBzaXplb2Yodm9pZCAqKSk7CisgICAgQ0hFQ0tfU0lHTk5FU1MoUHlfc3NpemVfdCwgMSk7CisKKyAgICBDSEVDS19TSVpFT0YoUHlfdWludHB0cl90LCBzaXplb2Yodm9pZCAqKSk7CisgICAgQ0hFQ0tfU0lHTk5FU1MoUHlfdWludHB0cl90LCAwKTsKKyAgICBDSEVDS19TSVpFT0YoUHlfaW50cHRyX3QsIHNpemVvZih2b2lkICopKTsKKyAgICBDSEVDS19TSUdOTkVTUyhQeV9pbnRwdHJfdCwgMSk7CisKKyAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CisgICAgcmV0dXJuIFB5X05vbmU7CisKKyN1bmRlZiBJU19TSUdORUQKKyN1bmRlZiBDSEVDS19TSUdORVNTCisjdW5kZWYgQ0hFQ0tfU0laRU9GCit9CisKKworc3RhdGljIFB5T2JqZWN0KgogdGVzdF9saXN0X2FwaShQeU9iamVjdCAqc2VsZikKIHsKICAgICBQeU9iamVjdCogbGlzdDsKQEAgLTE0MjQsNiArMTQ4OCwyMCBAQAogICAgIGVsc2UKICAgICAgICAgcmV0dXJuIHJhaXNlVGVzdEVycm9yKCJ0ZXN0X3dpZGVjaGFyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQeVVuaWNvZGVfRnJvbVVuaWNvZGUoTFwiXFxVMDAxMTAwMDBcIiwgMSkgZGlkbid0IGZhaWwiKTsKKworICAgIHdpZGUgPSBQeVVuaWNvZGVfRnJvbVVuaWNvZGUoTlVMTCwgMSk7CisgICAgaWYgKHdpZGUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgUHlVbmljb2RlX0FTX1VOSUNPREUod2lkZSlbMF0gPSBpbnZhbGlkWzBdOworICAgIGlmIChfUHlVbmljb2RlX1JlYWR5KHdpZGUpIDwgMCkgeworICAgICAgICBQeV9ERUNSRUYod2lkZSk7CisgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBQeV9ERUNSRUYod2lkZSk7CisgICAgICAgIHJldHVybiByYWlzZVRlc3RFcnJvcigidGVzdF93aWRlY2hhciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUHlVbmljb2RlX1JlYWR5KCkgZGlkbid0IGZhaWwiKTsKKyAgICB9CiAjZW5kaWYKIAogICAgIFB5X1JFVFVSTl9OT05FOwpAQCAtMTQzOCw3ICsxNTE2LDcgQEAKIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiVW4iLCAmdW5pY29kZSwgJmJ1ZmxlbikpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGJ1ZmZlciA9IFB5TWVtX01hbGxvYyhidWZsZW4gKiBzaXplb2Yod2NoYXJfdCkpOworICAgIGJ1ZmZlciA9IFB5TWVtX05ldyh3Y2hhcl90LCBidWZsZW4pOwogICAgIGlmIChidWZmZXIgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7CiAKQEAgLTE3MDYsNiArMTc4NCwxOCBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgorc2V0X2Vycm5vKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBpbnQgbmV3X2Vycm5vOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpOnNldF9lcnJubyIsICZuZXdfZXJybm8pKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGVycm5vID0gbmV3X2Vycm5vOworICAgIFB5X1JFVFVSTl9OT05FOworfQorCitzdGF0aWMgUHlPYmplY3QgKgogdGVzdF9zZXRfZXhjX2luZm8oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewogICAgIFB5T2JqZWN0ICpvcmlnX2V4YzsKQEAgLTIzOTAsNiArMjQ4MCw1NiBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICByZXR1cm4gUHlNZW1vcnlWaWV3X0Zyb21CdWZmZXIoJmluZm8pOwogfQorIAorc3RhdGljIFB5T2JqZWN0ICoKK3Rlc3RfZnJvbV9jb250aWd1b3VzKFB5T2JqZWN0KiBzZWxmLCBQeU9iamVjdCAqbm9hcmdzKQoreworICAgIGludCBkYXRhWzldID0gey0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xfTsKKyAgICBpbnQgaW5pdFs1XSA9IHswLCAxLCAyLCAzLCA0fTsKKyAgICBQeV9zc2l6ZV90IGl0ZW1zaXplID0gc2l6ZW9mKGludCk7CisgICAgUHlfc3NpemVfdCBzaGFwZSA9IDU7CisgICAgUHlfc3NpemVfdCBzdHJpZGVzID0gMiAqIGl0ZW1zaXplOworICAgIFB5X2J1ZmZlciB2aWV3ID0geworICAgICAgICBkYXRhLAorICAgICAgICBOVUxMLAorICAgICAgICA1ICogaXRlbXNpemUsCisgICAgICAgIGl0ZW1zaXplLAorICAgICAgICAxLAorICAgICAgICAxLAorICAgICAgICBOVUxMLAorICAgICAgICAmc2hhcGUsCisgICAgICAgICZzdHJpZGVzLAorICAgICAgICBOVUxMLAorICAgICAgICBOVUxMCisgICAgfTsKKyAgICBpbnQgKnB0cjsKKyAgICBpbnQgaTsKKworICAgIFB5QnVmZmVyX0Zyb21Db250aWd1b3VzKCZ2aWV3LCBpbml0LCB2aWV3LmxlbiwgJ0MnKTsKKyAgICBwdHIgPSB2aWV3LmJ1ZjsKKyAgICBmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKSB7CisgICAgICAgIGlmIChwdHJbMippXSAhPSBpKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoVGVzdEVycm9yLAorICAgICAgICAgICAgICAgICJ0ZXN0X2Zyb21fY29udGlndW91czogaW5jb3JyZWN0IHJlc3VsdCIpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2aWV3LmJ1ZiA9ICZkYXRhWzhdOworICAgIHZpZXcuc3RyaWRlc1swXSA9IC0yICogaXRlbXNpemU7CisKKyAgICBQeUJ1ZmZlcl9Gcm9tQ29udGlndW91cygmdmlldywgaW5pdCwgdmlldy5sZW4sICdDJyk7CisgICAgcHRyID0gdmlldy5idWY7CisgICAgZm9yIChpID0gMDsgaSA8IDU7IGkrKykgeworICAgICAgICBpZiAoKihwdHItMippKSAhPSBpKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoVGVzdEVycm9yLAorICAgICAgICAgICAgICAgICJ0ZXN0X2Zyb21fY29udGlndW91czogaW5jb3JyZWN0IHJlc3VsdCIpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KIAogLyogVGVzdCB0aGF0IHRoZSBmYXRhbCBlcnJvciBmcm9tIG5vdCBoYXZpbmcgYSBjdXJyZW50IHRocmVhZCBkb2Vzbid0CiAgICBjYXVzZSBhbiBpbmZpbml0ZSBsb29wLiAgUnVuIHZpYSBMaWIvdGVzdC90ZXN0X2NhcGkucHkgKi8KQEAgLTI0MzksMTQgKzI1NzksMjcgQEAKICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKHIpOwogfQogCitzdGF0aWMgaW50CitjaGVja190aW1lX3JvdW5kaW5nKGludCByb3VuZCkKK3sKKyAgICBpZiAocm91bmQgIT0gX1B5VGltZV9ST1VORF9ET1dOICYmIHJvdW5kICE9IF9QeVRpbWVfUk9VTkRfVVApIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJpbnZhbGlkIHJvdW5kaW5nIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBQeU9iamVjdCAqCiB0ZXN0X3B5dGltZV9vYmplY3RfdG9fdGltZV90KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBQeU9iamVjdCAqb2JqOwogICAgIHRpbWVfdCBzZWM7Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPOnB5dGltZV9vYmplY3RfdG9fdGltZV90IiwgJm9iaikpCisgICAgaW50IHJvdW5kOworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiT2k6cHl0aW1lX29iamVjdF90b190aW1lX3QiLCAmb2JqLCAmcm91bmQpKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAoX1B5VGltZV9PYmplY3RUb1RpbWVfdChvYmosICZzZWMpID09IC0xKQorICAgIGlmIChjaGVja190aW1lX3JvdW5kaW5nKHJvdW5kKSA8IDApCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmIChfUHlUaW1lX09iamVjdFRvVGltZV90KG9iaiwgJnNlYywgcm91bmQpID09IC0xKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICByZXR1cm4gX1B5TG9uZ19Gcm9tVGltZV90KHNlYyk7CiB9CkBAIC0yNDU3LDkgKzI2MTAsMTIgQEAKICAgICBQeU9iamVjdCAqb2JqOwogICAgIHRpbWVfdCBzZWM7CiAgICAgbG9uZyB1c2VjOwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTzpweXRpbWVfb2JqZWN0X3RvX3RpbWV2YWwiLCAmb2JqKSkKKyAgICBpbnQgcm91bmQ7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPaTpweXRpbWVfb2JqZWN0X3RvX3RpbWV2YWwiLCAmb2JqLCAmcm91bmQpKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAoX1B5VGltZV9PYmplY3RUb1RpbWV2YWwob2JqLCAmc2VjLCAmdXNlYykgPT0gLTEpCisgICAgaWYgKGNoZWNrX3RpbWVfcm91bmRpbmcocm91bmQpIDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKF9QeVRpbWVfT2JqZWN0VG9UaW1ldmFsKG9iaiwgJnNlYywgJnVzZWMsIHJvdW5kKSA9PSAtMSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIk5sIiwgX1B5TG9uZ19Gcm9tVGltZV90KHNlYyksIHVzZWMpOwogfQpAQCAtMjQ3MCwxMyArMjYyNiwzNTQgQEAKICAgICBQeU9iamVjdCAqb2JqOwogICAgIHRpbWVfdCBzZWM7CiAgICAgbG9uZyBuc2VjOwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTzpweXRpbWVfb2JqZWN0X3RvX3RpbWVzcGVjIiwgJm9iaikpCisgICAgaW50IHJvdW5kOworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiT2k6cHl0aW1lX29iamVjdF90b190aW1lc3BlYyIsICZvYmosICZyb3VuZCkpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmIChfUHlUaW1lX09iamVjdFRvVGltZXNwZWMob2JqLCAmc2VjLCAmbnNlYykgPT0gLTEpCisgICAgaWYgKGNoZWNrX3RpbWVfcm91bmRpbmcocm91bmQpIDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKF9QeVRpbWVfT2JqZWN0VG9UaW1lc3BlYyhvYmosICZzZWMsICZuc2VjLCByb3VuZCkgPT0gLTEpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJObCIsIF9QeUxvbmdfRnJvbVRpbWVfdChzZWMpLCBuc2VjKTsKIH0KIAorc3RhdGljIHZvaWQKK3Nsb3RfdHBfZGVsKFB5T2JqZWN0ICpzZWxmKQoreworICAgIF9QeV9JREVOVElGSUVSKF9fdHBfZGVsX18pOworICAgIFB5T2JqZWN0ICpkZWwsICpyZXM7CisgICAgUHlPYmplY3QgKmVycm9yX3R5cGUsICplcnJvcl92YWx1ZSwgKmVycm9yX3RyYWNlYmFjazsKKworICAgIC8qIFRlbXBvcmFyaWx5IHJlc3VycmVjdCB0aGUgb2JqZWN0LiAqLworICAgIGFzc2VydChzZWxmLT5vYl9yZWZjbnQgPT0gMCk7CisgICAgc2VsZi0+b2JfcmVmY250ID0gMTsKKworICAgIC8qIFNhdmUgdGhlIGN1cnJlbnQgZXhjZXB0aW9uLCBpZiBhbnkuICovCisgICAgUHlFcnJfRmV0Y2goJmVycm9yX3R5cGUsICZlcnJvcl92YWx1ZSwgJmVycm9yX3RyYWNlYmFjayk7CisKKyAgICAvKiBFeGVjdXRlIF9fZGVsX18gbWV0aG9kLCBpZiBhbnkuICovCisgICAgZGVsID0gX1B5T2JqZWN0X0xvb2t1cFNwZWNpYWwoc2VsZiwgJlB5SWRfX190cF9kZWxfXyk7CisgICAgaWYgKGRlbCAhPSBOVUxMKSB7CisgICAgICAgIHJlcyA9IFB5RXZhbF9DYWxsT2JqZWN0KGRlbCwgTlVMTCk7CisgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgICAgIFB5RXJyX1dyaXRlVW5yYWlzYWJsZShkZWwpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBQeV9ERUNSRUYocmVzKTsKKyAgICAgICAgUHlfREVDUkVGKGRlbCk7CisgICAgfQorCisgICAgLyogUmVzdG9yZSB0aGUgc2F2ZWQgZXhjZXB0aW9uLiAqLworICAgIFB5RXJyX1Jlc3RvcmUoZXJyb3JfdHlwZSwgZXJyb3JfdmFsdWUsIGVycm9yX3RyYWNlYmFjayk7CisKKyAgICAvKiBVbmRvIHRoZSB0ZW1wb3JhcnkgcmVzdXJyZWN0aW9uOyBjYW4ndCB1c2UgREVDUkVGIGhlcmUsIGl0IHdvdWxkCisgICAgICogY2F1c2UgYSByZWN1cnNpdmUgY2FsbC4KKyAgICAgKi8KKyAgICBhc3NlcnQoc2VsZi0+b2JfcmVmY250ID4gMCk7CisgICAgaWYgKC0tc2VsZi0+b2JfcmVmY250ID09IDApCisgICAgICAgIHJldHVybjsgICAgICAgICAvKiB0aGlzIGlzIHRoZSBub3JtYWwgcGF0aCBvdXQgKi8KKworICAgIC8qIF9fZGVsX18gcmVzdXJyZWN0ZWQgaXQhICBNYWtlIGl0IGxvb2sgbGlrZSB0aGUgb3JpZ2luYWwgUHlfREVDUkVGCisgICAgICogbmV2ZXIgaGFwcGVuZWQuCisgICAgICovCisgICAgeworICAgICAgICBQeV9zc2l6ZV90IHJlZmNudCA9IHNlbGYtPm9iX3JlZmNudDsKKyAgICAgICAgX1B5X05ld1JlZmVyZW5jZShzZWxmKTsKKyAgICAgICAgc2VsZi0+b2JfcmVmY250ID0gcmVmY250OworICAgIH0KKyAgICBhc3NlcnQoIVB5VHlwZV9JU19HQyhQeV9UWVBFKHNlbGYpKSB8fAorICAgICAgICAgICBfUHlfQVNfR0Moc2VsZiktPmdjLmdjX3JlZnMgIT0gX1B5R0NfUkVGU19VTlRSQUNLRUQpOworICAgIC8qIElmIFB5X1JFRl9ERUJVRywgX1B5X05ld1JlZmVyZW5jZSBidW1wZWQgX1B5X1JlZlRvdGFsLCBzbworICAgICAqIHdlIG5lZWQgdG8gdW5kbyB0aGF0LiAqLworICAgIF9QeV9ERUNfUkVGVE9UQUw7CisgICAgLyogSWYgUHlfVFJBQ0VfUkVGUywgX1B5X05ld1JlZmVyZW5jZSByZS1hZGRlZCBzZWxmIHRvIHRoZSBvYmplY3QKKyAgICAgKiBjaGFpbiwgc28gbm8gbW9yZSB0byBkbyB0aGVyZS4KKyAgICAgKiBJZiBDT1VOVF9BTExPQ1MsIHRoZSBvcmlnaW5hbCBkZWNyZWYgYnVtcGVkIHRwX2ZyZWVzLCBhbmQKKyAgICAgKiBfUHlfTmV3UmVmZXJlbmNlIGJ1bXBlZCB0cF9hbGxvY3M6ICBib3RoIG9mIHRob3NlIG5lZWQgdG8gYmUKKyAgICAgKiB1bmRvbmUuCisgICAgICovCisjaWZkZWYgQ09VTlRfQUxMT0NTCisgICAgLS1QeV9UWVBFKHNlbGYpLT50cF9mcmVlczsKKyAgICAtLVB5X1RZUEUoc2VsZiktPnRwX2FsbG9jczsKKyNlbmRpZgorfQorCitzdGF0aWMgUHlPYmplY3QgKgord2l0aF90cF9kZWwoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpvYmo7CisgICAgUHlUeXBlT2JqZWN0ICp0cDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTzp3aXRoX3RwX2RlbCIsICZvYmopKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB0cCA9IChQeVR5cGVPYmplY3QgKikgb2JqOworICAgIGlmICghUHlUeXBlX0NoZWNrKG9iaikgfHwgIVB5VHlwZV9IYXNGZWF0dXJlKHRwLCBQeV9UUEZMQUdTX0hFQVBUWVBFKSkgeworICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgImhlYXAgdHlwZSBleHBlY3RlZCwgZ290ICVSIiwgb2JqKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHRwLT50cF9kZWwgPSBzbG90X3RwX2RlbDsKKyAgICBQeV9JTkNSRUYob2JqKTsKKyAgICByZXR1cm4gb2JqOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorX3Rlc3RfaW5jcmVmKFB5T2JqZWN0ICpvYikKK3sKKyAgICBQeV9JTkNSRUYob2IpOworICAgIHJldHVybiBvYjsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK3Rlc3RfeGluY3JlZl9kb2VzbnRfbGVhayhQeU9iamVjdCAqb2IpCit7CisgICAgUHlPYmplY3QgKm9iaiA9IFB5TG9uZ19Gcm9tTG9uZygwKTsKKyAgICBQeV9YSU5DUkVGKF90ZXN0X2luY3JlZihvYmopKTsKKyAgICBQeV9ERUNSRUYob2JqKTsKKyAgICBQeV9ERUNSRUYob2JqKTsKKyAgICBQeV9ERUNSRUYob2JqKTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK3Rlc3RfaW5jcmVmX2RvZXNudF9sZWFrKFB5T2JqZWN0ICpvYikKK3sKKyAgICBQeU9iamVjdCAqb2JqID0gUHlMb25nX0Zyb21Mb25nKDApOworICAgIFB5X0lOQ1JFRihfdGVzdF9pbmNyZWYob2JqKSk7CisgICAgUHlfREVDUkVGKG9iaik7CisgICAgUHlfREVDUkVGKG9iaik7CisgICAgUHlfREVDUkVGKG9iaik7CisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCit0ZXN0X3hkZWNyZWZfZG9lc250X2xlYWsoUHlPYmplY3QgKm9iKQoreworICAgIFB5X1hERUNSRUYoUHlMb25nX0Zyb21Mb25nKDApKTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK3Rlc3RfZGVjcmVmX2RvZXNudF9sZWFrKFB5T2JqZWN0ICpvYikKK3sKKyAgICBQeV9ERUNSRUYoUHlMb25nX0Zyb21Mb25nKDApKTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK3Rlc3RfaW5jcmVmX2RlY3JlZl9BUEkoUHlPYmplY3QgKm9iKQoreworICAgIFB5T2JqZWN0ICpvYmogPSBQeUxvbmdfRnJvbUxvbmcoMCk7CisgICAgUHlfSW5jUmVmKG9iaik7CisgICAgUHlfRGVjUmVmKG9iaik7CisgICAgUHlfRGVjUmVmKG9iaik7CisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCit0ZXN0X3B5bWVtX2FsbG9jMChQeU9iamVjdCAqc2VsZikKK3sKKyAgICB2b2lkICpwdHI7CisKKyAgICBwdHIgPSBQeU1lbV9NYWxsb2MoMCk7CisgICAgaWYgKHB0ciA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsICJQeU1lbV9NYWxsb2MoMCkgcmV0dXJucyBOVUxMIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBQeU1lbV9GcmVlKHB0cik7CisKKyAgICBwdHIgPSBQeU9iamVjdF9NYWxsb2MoMCk7CisgICAgaWYgKHB0ciA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsICJQeU9iamVjdF9NYWxsb2MoMCkgcmV0dXJucyBOVUxMIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBQeU9iamVjdF9GcmVlKHB0cik7CisKKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIFB5TWVtQWxsb2NhdG9yIGFsbG9jOworCisgICAgc2l6ZV90IG1hbGxvY19zaXplOworICAgIHZvaWQgKnJlYWxsb2NfcHRyOworICAgIHNpemVfdCByZWFsbG9jX25ld19zaXplOworICAgIHZvaWQgKmZyZWVfcHRyOworfSBhbGxvY19ob29rX3Q7CisKK3N0YXRpYyB2b2lkKiBob29rX21hbGxvYyAodm9pZCogY3R4LCBzaXplX3Qgc2l6ZSkKK3sKKyAgICBhbGxvY19ob29rX3QgKmhvb2sgPSAoYWxsb2NfaG9va190ICopY3R4OworICAgIGhvb2stPm1hbGxvY19zaXplID0gc2l6ZTsKKyAgICByZXR1cm4gaG9vay0+YWxsb2MubWFsbG9jKGhvb2stPmFsbG9jLmN0eCwgc2l6ZSk7Cit9CisKK3N0YXRpYyB2b2lkKiBob29rX3JlYWxsb2MgKHZvaWQqIGN0eCwgdm9pZCogcHRyLCBzaXplX3QgbmV3X3NpemUpCit7CisgICAgYWxsb2NfaG9va190ICpob29rID0gKGFsbG9jX2hvb2tfdCAqKWN0eDsKKyAgICBob29rLT5yZWFsbG9jX3B0ciA9IHB0cjsKKyAgICBob29rLT5yZWFsbG9jX25ld19zaXplID0gbmV3X3NpemU7CisgICAgcmV0dXJuIGhvb2stPmFsbG9jLnJlYWxsb2MoaG9vay0+YWxsb2MuY3R4LCBwdHIsIG5ld19zaXplKTsKK30KKworc3RhdGljIHZvaWQgaG9va19mcmVlICh2b2lkICpjdHgsIHZvaWQgKnB0cikKK3sKKyAgICBhbGxvY19ob29rX3QgKmhvb2sgPSAoYWxsb2NfaG9va190ICopY3R4OworICAgIGhvb2stPmZyZWVfcHRyID0gcHRyOworICAgIGhvb2stPmFsbG9jLmZyZWUoaG9vay0+YWxsb2MuY3R4LCBwdHIpOworfQorCitzdGF0aWMgUHlPYmplY3QgKgordGVzdF9zZXRhbGxvY2F0b3JzKFB5TWVtQWxsb2NhdG9yRG9tYWluIGRvbWFpbikKK3sKKyAgICBQeU9iamVjdCAqcmVzID0gTlVMTDsKKyAgICBjb25zdCBjaGFyICplcnJvcl9tc2c7CisgICAgYWxsb2NfaG9va190IGhvb2s7CisgICAgUHlNZW1BbGxvY2F0b3IgYWxsb2M7CisgICAgc2l6ZV90IHNpemUsIHNpemUyOworICAgIHZvaWQgKnB0ciwgKnB0cjI7CisKKyAgICBob29rLm1hbGxvY19zaXplID0gMDsKKyAgICBob29rLnJlYWxsb2NfcHRyID0gTlVMTDsKKyAgICBob29rLnJlYWxsb2NfbmV3X3NpemUgPSAwOworICAgIGhvb2suZnJlZV9wdHIgPSBOVUxMOworCisgICAgYWxsb2MuY3R4ID0gJmhvb2s7CisgICAgYWxsb2MubWFsbG9jID0gJmhvb2tfbWFsbG9jOworICAgIGFsbG9jLnJlYWxsb2MgPSAmaG9va19yZWFsbG9jOworICAgIGFsbG9jLmZyZWUgPSAmaG9va19mcmVlOworICAgIFB5TWVtX0dldEFsbG9jYXRvcihkb21haW4sICZob29rLmFsbG9jKTsKKyAgICBQeU1lbV9TZXRBbGxvY2F0b3IoZG9tYWluLCAmYWxsb2MpOworCisgICAgc2l6ZSA9IDQyOworICAgIHN3aXRjaChkb21haW4pCisgICAgeworICAgIGNhc2UgUFlNRU1fRE9NQUlOX1JBVzogcHRyID0gUHlNZW1fUmF3TWFsbG9jKHNpemUpOyBicmVhazsKKyAgICBjYXNlIFBZTUVNX0RPTUFJTl9NRU06IHB0ciA9IFB5TWVtX01hbGxvYyhzaXplKTsgYnJlYWs7CisgICAgY2FzZSBQWU1FTV9ET01BSU5fT0JKOiBwdHIgPSBQeU9iamVjdF9NYWxsb2Moc2l6ZSk7IGJyZWFrOworICAgIGRlZmF1bHQ6IHB0ciA9IE5VTEw7IGJyZWFrOworICAgIH0KKworICAgIGlmIChwdHIgPT0gTlVMTCkgeworICAgICAgICBlcnJvcl9tc2cgPSAibWFsbG9jIGZhaWxlZCI7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBpZiAoaG9vay5tYWxsb2Nfc2l6ZSAhPSBzaXplKSB7CisgICAgICAgIGVycm9yX21zZyA9ICJtYWxsb2MgaW52YWxpZCBzaXplIjsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIHNpemUyID0gMjAwOworICAgIHN3aXRjaChkb21haW4pCisgICAgeworICAgIGNhc2UgUFlNRU1fRE9NQUlOX1JBVzogcHRyMiA9IFB5TWVtX1Jhd1JlYWxsb2MocHRyLCBzaXplMik7IGJyZWFrOworICAgIGNhc2UgUFlNRU1fRE9NQUlOX01FTTogcHRyMiA9IFB5TWVtX1JlYWxsb2MocHRyLCBzaXplMik7IGJyZWFrOworICAgIGNhc2UgUFlNRU1fRE9NQUlOX09CSjogcHRyMiA9IFB5T2JqZWN0X1JlYWxsb2MocHRyLCBzaXplMik7IGJyZWFrOworICAgIGRlZmF1bHQ6IHB0cjIgPSBOVUxMOyBicmVhazsKKyAgICB9CisKKyAgICBpZiAocHRyMiA9PSBOVUxMKSB7CisgICAgICAgIGVycm9yX21zZyA9ICJyZWFsbG9jIGZhaWxlZCI7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBpZiAoaG9vay5yZWFsbG9jX3B0ciAhPSBwdHIKKyAgICAgICAgfHwgaG9vay5yZWFsbG9jX25ld19zaXplICE9IHNpemUyKSB7CisgICAgICAgIGVycm9yX21zZyA9ICJyZWFsbG9jIGludmFsaWQgcGFyYW1ldGVycyI7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBzd2l0Y2goZG9tYWluKQorICAgIHsKKyAgICBjYXNlIFBZTUVNX0RPTUFJTl9SQVc6IFB5TWVtX1Jhd0ZyZWUocHRyMik7IGJyZWFrOworICAgIGNhc2UgUFlNRU1fRE9NQUlOX01FTTogUHlNZW1fRnJlZShwdHIyKTsgYnJlYWs7CisgICAgY2FzZSBQWU1FTV9ET01BSU5fT0JKOiBQeU9iamVjdF9GcmVlKHB0cjIpOyBicmVhazsKKyAgICB9CisKKyAgICBpZiAoaG9vay5mcmVlX3B0ciAhPSBwdHIyKSB7CisgICAgICAgIGVycm9yX21zZyA9ICJmcmVlIGludmFsaWQgcG9pbnRlciI7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CisgICAgcmVzID0gUHlfTm9uZTsKKyAgICBnb3RvIGZpbmFsbHk7CisKK2ZhaWw6CisgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwgZXJyb3JfbXNnKTsKKworZmluYWxseToKKyAgICBQeU1lbV9TZXRBbGxvY2F0b3IoZG9tYWluLCAmaG9vay5hbGxvYyk7CisgICAgcmV0dXJuIHJlczsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK3Rlc3RfcHltZW1fc2V0cmF3YWxsb2NhdG9ycyhQeU9iamVjdCAqc2VsZikKK3sKKyAgICByZXR1cm4gdGVzdF9zZXRhbGxvY2F0b3JzKFBZTUVNX0RPTUFJTl9SQVcpOworfQorCitzdGF0aWMgUHlPYmplY3QgKgordGVzdF9weW1lbV9zZXRhbGxvY2F0b3JzKFB5T2JqZWN0ICpzZWxmKQoreworICAgIHJldHVybiB0ZXN0X3NldGFsbG9jYXRvcnMoUFlNRU1fRE9NQUlOX01FTSk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCit0ZXN0X3B5b2JqZWN0X3NldGFsbG9jYXRvcnMoUHlPYmplY3QgKnNlbGYpCit7CisgICAgcmV0dXJuIHRlc3Rfc2V0YWxsb2NhdG9ycyhQWU1FTV9ET01BSU5fT0JKKTsKK30KKworUHlEb2NfU1RSVkFSKGRvY3N0cmluZ19lbXB0eSwKKyIiCispOworCitQeURvY19TVFJWQVIoZG9jc3RyaW5nX25vX3NpZ25hdHVyZSwKKyJUaGlzIGRvY3N0cmluZyBoYXMgbm8gc2lnbmF0dXJlLiIKKyk7CisKK1B5RG9jX1NUUlZBUihkb2NzdHJpbmdfd2l0aF9pbnZhbGlkX3NpZ25hdHVyZSwKKyJkb2NzdHJpbmdfd2l0aF9pbnZhbGlkX3NpZ25hdHVyZSgkbW9kdWxlLCAvLCBib28pXG4iCisiXG4iCisiVGhpcyBkb2NzdHJpbmcgaGFzIGFuIGludmFsaWQgc2lnbmF0dXJlLiIKKyk7CisKK1B5RG9jX1NUUlZBUihkb2NzdHJpbmdfd2l0aF9pbnZhbGlkX3NpZ25hdHVyZTIsCisiZG9jc3RyaW5nX3dpdGhfaW52YWxpZF9zaWduYXR1cmUyKCRtb2R1bGUsIC8sIGJvbylcbiIKKyJcbiIKKyItLVxuIgorIlxuIgorIlRoaXMgZG9jc3RyaW5nIGFsc28gaGFzIGFuIGludmFsaWQgc2lnbmF0dXJlLiIKKyk7CisKK1B5RG9jX1NUUlZBUihkb2NzdHJpbmdfd2l0aF9zaWduYXR1cmUsCisiZG9jc3RyaW5nX3dpdGhfc2lnbmF0dXJlKCRtb2R1bGUsIC8sIHNpZylcbiIKKyItLVxuIgorIlxuIgorIlRoaXMgZG9jc3RyaW5nIGhhcyBhIHZhbGlkIHNpZ25hdHVyZS4iCispOworCitQeURvY19TVFJWQVIoZG9jc3RyaW5nX3dpdGhfc2lnbmF0dXJlX2FuZF9leHRyYV9uZXdsaW5lcywKKyJkb2NzdHJpbmdfd2l0aF9zaWduYXR1cmVfYW5kX2V4dHJhX25ld2xpbmVzKCRtb2R1bGUsIC8sIHBhcmFtZXRlcilcbiIKKyItLVxuIgorIlxuIgorIlxuIgorIlRoaXMgZG9jc3RyaW5nIGhhcyBhIHZhbGlkIHNpZ25hdHVyZSBhbmQgc29tZSBleHRyYSBuZXdsaW5lcy4iCispOworCitQeURvY19TVFJWQVIoZG9jc3RyaW5nX3dpdGhfc2lnbmF0dXJlX3dpdGhfZGVmYXVsdHMsCisiZG9jc3RyaW5nX3dpdGhfc2lnbmF0dXJlX3dpdGhfZGVmYXVsdHMobW9kdWxlLCBzPSdhdm9jYWRvJyxcbiIKKyIgICAgICAgIGI9YidieXRlcycsIGQ9My4xNCwgaT0zNSwgbj1Ob25lLCB0PVRydWUsIGY9RmFsc2UsXG4iCisiICAgICAgICBsb2NhbD10aGVfbnVtYmVyX3RocmVlLCBzeXM9c3lzLm1heHNpemUsXG4iCisiICAgICAgICBleHA9c3lzLm1heHNpemUgLSAxKVxuIgorIi0tXG4iCisiXG4iCisiXG4iCisiXG4iCisiVGhpcyBkb2NzdHJpbmcgaGFzIGEgdmFsaWQgc2lnbmF0dXJlIHdpdGggcGFyYW1ldGVycyxcbiIKKyJhbmQgdGhlIHBhcmFtZXRlcnMgdGFrZSBkZWZhdWx0cyBvZiB2YXJ5aW5nIHR5cGVzLiIKKyk7CisKICNpZmRlZiBXSVRIX1RIUkVBRAogdHlwZWRlZiBzdHJ1Y3QgewogICAgIFB5VGhyZWFkX3R5cGVfbG9jayBzdGFydF9ldmVudDsKQEAgLTI1NjYsMTYgKzMwNjMsMTc2IEBACiB9CiAjZW5kaWYgICAvKiBXSVRIX1RIUkVBRCAqLwogCisvKiBtYXJzaGFsICovCisKK3N0YXRpYyBQeU9iamVjdCoKK3B5bWFyc2hhbF93cml0ZV9sb25nX3RvX2ZpbGUoUHlPYmplY3QqIHNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIGxvbmcgdmFsdWU7CisgICAgY2hhciAqZmlsZW5hbWU7CisgICAgaW50IHZlcnNpb247CisgICAgRklMRSAqZnA7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImxzaTpweW1hcnNoYWxfd3JpdGVfbG9uZ190b19maWxlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJnZhbHVlLCAmZmlsZW5hbWUsICZ2ZXJzaW9uKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBmcCA9IGZvcGVuKGZpbGVuYW1lLCAid2IiKTsKKyAgICBpZiAoZnAgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIFB5TWFyc2hhbF9Xcml0ZUxvbmdUb0ZpbGUodmFsdWUsIGZwLCB2ZXJzaW9uKTsKKworICAgIGZjbG9zZShmcCk7CisgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIFB5X1JFVFVSTl9OT05FOworfQorCitzdGF0aWMgUHlPYmplY3QqCitweW1hcnNoYWxfd3JpdGVfb2JqZWN0X3RvX2ZpbGUoUHlPYmplY3QqIHNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpvYmo7CisgICAgY2hhciAqZmlsZW5hbWU7CisgICAgaW50IHZlcnNpb247CisgICAgRklMRSAqZnA7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk9zaTpweW1hcnNoYWxfd3JpdGVfb2JqZWN0X3RvX2ZpbGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAmb2JqLCAmZmlsZW5hbWUsICZ2ZXJzaW9uKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBmcCA9IGZvcGVuKGZpbGVuYW1lLCAid2IiKTsKKyAgICBpZiAoZnAgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIFB5TWFyc2hhbF9Xcml0ZU9iamVjdFRvRmlsZShvYmosIGZwLCB2ZXJzaW9uKTsKKworICAgIGZjbG9zZShmcCk7CisgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIFB5X1JFVFVSTl9OT05FOworfQorCitzdGF0aWMgUHlPYmplY3QqCitweW1hcnNoYWxfcmVhZF9zaG9ydF9mcm9tX2ZpbGUoUHlPYmplY3QqIHNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIGludCB2YWx1ZTsKKyAgICBsb25nIHBvczsKKyAgICBjaGFyICpmaWxlbmFtZTsKKyAgICBGSUxFICpmcDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiczpweW1hcnNoYWxfcmVhZF9zaG9ydF9mcm9tX2ZpbGUiLCAmZmlsZW5hbWUpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGZwID0gZm9wZW4oZmlsZW5hbWUsICJyYiIpOworICAgIGlmIChmcCA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19PU0Vycm9yKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgdmFsdWUgPSBQeU1hcnNoYWxfUmVhZFNob3J0RnJvbUZpbGUoZnApOworICAgIHBvcyA9IGZ0ZWxsKGZwKTsKKworICAgIGZjbG9zZShmcCk7CisgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJpbCIsIHZhbHVlLCBwb3MpOworfQorCitzdGF0aWMgUHlPYmplY3QqCitweW1hcnNoYWxfcmVhZF9sb25nX2Zyb21fZmlsZShQeU9iamVjdCogc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgbG9uZyB2YWx1ZSwgcG9zOworICAgIGNoYXIgKmZpbGVuYW1lOworICAgIEZJTEUgKmZwOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzOnB5bWFyc2hhbF9yZWFkX2xvbmdfZnJvbV9maWxlIiwgJmZpbGVuYW1lKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBmcCA9IGZvcGVuKGZpbGVuYW1lLCAicmIiKTsKKyAgICBpZiAoZnAgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHZhbHVlID0gUHlNYXJzaGFsX1JlYWRMb25nRnJvbUZpbGUoZnApOworICAgIHBvcyA9IGZ0ZWxsKGZwKTsKKworICAgIGZjbG9zZShmcCk7CisgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJsbCIsIHZhbHVlLCBwb3MpOworfQorCitzdGF0aWMgUHlPYmplY3QqCitweW1hcnNoYWxfcmVhZF9sYXN0X29iamVjdF9mcm9tX2ZpbGUoUHlPYmplY3QqIHNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpvYmo7CisgICAgbG9uZyBwb3M7CisgICAgY2hhciAqZmlsZW5hbWU7CisgICAgRklMRSAqZnA7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInM6cHltYXJzaGFsX3JlYWRfbGFzdF9vYmplY3RfZnJvbV9maWxlIiwgJmZpbGVuYW1lKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBmcCA9IGZvcGVuKGZpbGVuYW1lLCAicmIiKTsKKyAgICBpZiAoZnAgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIG9iaiA9IFB5TWFyc2hhbF9SZWFkTGFzdE9iamVjdEZyb21GaWxlKGZwKTsKKyAgICBwb3MgPSBmdGVsbChmcCk7CisKKyAgICBmY2xvc2UoZnApOworICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJObCIsIG9iaiwgcG9zKTsKK30KKworc3RhdGljIFB5T2JqZWN0KgorcHltYXJzaGFsX3JlYWRfb2JqZWN0X2Zyb21fZmlsZShQeU9iamVjdCogc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKm9iajsKKyAgICBsb25nIHBvczsKKyAgICBjaGFyICpmaWxlbmFtZTsKKyAgICBGSUxFICpmcDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiczpweW1hcnNoYWxfcmVhZF9vYmplY3RfZnJvbV9maWxlIiwgJmZpbGVuYW1lKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBmcCA9IGZvcGVuKGZpbGVuYW1lLCAicmIiKTsKKyAgICBpZiAoZnAgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIG9iaiA9IFB5TWFyc2hhbF9SZWFkT2JqZWN0RnJvbUZpbGUoZnApOworICAgIHBvcyA9IGZ0ZWxsKGZwKTsKKworICAgIGZjbG9zZShmcCk7CisgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIk5sIiwgb2JqLCBwb3MpOworfQorCiAKIHN0YXRpYyBQeU1ldGhvZERlZiBUZXN0TWV0aG9kc1tdID0gewogICAgIHsicmFpc2VfZXhjZXB0aW9uIiwgICAgICAgICByYWlzZV9leGNlcHRpb24sICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1N9LAogICAgIHsicmFpc2VfbWVtb3J5ZXJyb3IiLCAgIChQeUNGdW5jdGlvbilyYWlzZV9tZW1vcnllcnJvciwgIE1FVEhfTk9BUkdTfSwKKyAgICB7InNldF9lcnJubyIsICAgICAgICAgICAgICAgc2V0X2Vycm5vLCAgICAgICAgICAgICAgICAgICAgICAgTUVUSF9WQVJBUkdTfSwKICAgICB7InRlc3RfY29uZmlnIiwgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKXRlc3RfY29uZmlnLCAgICAgICAgTUVUSF9OT0FSR1N9LAorICAgIHsidGVzdF9zaXplb2ZfY190eXBlcyIsICAgICAoUHlDRnVuY3Rpb24pdGVzdF9zaXplb2ZfY190eXBlcywgTUVUSF9OT0FSR1N9LAogICAgIHsidGVzdF9kYXRldGltZV9jYXBpIiwgIHRlc3RfZGF0ZXRpbWVfY2FwaSwgICAgICAgICAgICAgIE1FVEhfTk9BUkdTfSwKICAgICB7InRlc3RfbGlzdF9hcGkiLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKXRlc3RfbGlzdF9hcGksICAgICAgTUVUSF9OT0FSR1N9LAogICAgIHsidGVzdF9kaWN0X2l0ZXJhdGlvbiIsICAgICAoUHlDRnVuY3Rpb24pdGVzdF9kaWN0X2l0ZXJhdGlvbixNRVRIX05PQVJHU30sCiAgICAgeyJ0ZXN0X2xhenlfaGFzaF9pbmhlcml0YW5jZSIsICAgICAgKFB5Q0Z1bmN0aW9uKXRlc3RfbGF6eV9oYXNoX2luaGVyaXRhbmNlLE1FVEhfTk9BUkdTfSwKICAgICB7InRlc3RfbG9uZ19hcGkiLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKXRlc3RfbG9uZ19hcGksICAgICAgTUVUSF9OT0FSR1N9LAorICAgIHsidGVzdF94aW5jcmVmX2RvZXNudF9sZWFrIiwoUHlDRnVuY3Rpb24pdGVzdF94aW5jcmVmX2RvZXNudF9sZWFrLCAgICAgIE1FVEhfTk9BUkdTfSwKKyAgICB7InRlc3RfaW5jcmVmX2RvZXNudF9sZWFrIiwgKFB5Q0Z1bmN0aW9uKXRlc3RfaW5jcmVmX2RvZXNudF9sZWFrLCAgICAgIE1FVEhfTk9BUkdTfSwKKyAgICB7InRlc3RfeGRlY3JlZl9kb2VzbnRfbGVhayIsKFB5Q0Z1bmN0aW9uKXRlc3RfeGRlY3JlZl9kb2VzbnRfbGVhaywgICAgICBNRVRIX05PQVJHU30sCisgICAgeyJ0ZXN0X2RlY3JlZl9kb2VzbnRfbGVhayIsIChQeUNGdW5jdGlvbil0ZXN0X2RlY3JlZl9kb2VzbnRfbGVhaywgICAgICBNRVRIX05PQVJHU30sCisgICAgeyJ0ZXN0X2luY3JlZl9kZWNyZWZfQVBJIiwgIChQeUNGdW5jdGlvbil0ZXN0X2luY3JlZl9kZWNyZWZfQVBJLCAgICAgICBNRVRIX05PQVJHU30sCiAgICAgeyJ0ZXN0X2xvbmdfYW5kX292ZXJmbG93IiwgKFB5Q0Z1bmN0aW9uKXRlc3RfbG9uZ19hbmRfb3ZlcmZsb3csCiAgICAgIE1FVEhfTk9BUkdTfSwKICAgICB7InRlc3RfbG9uZ19hc19kb3VibGUiLCAgICAgKFB5Q0Z1bmN0aW9uKXRlc3RfbG9uZ19hc19kb3VibGUsTUVUSF9OT0FSR1N9LApAQCAtMjU5MSw2ICszMjQ4LDcgQEAKICAgICB7InRlc3Rfc3RyaW5nX3RvX2RvdWJsZSIsIChQeUNGdW5jdGlvbil0ZXN0X3N0cmluZ190b19kb3VibGUsIE1FVEhfTk9BUkdTfSwKICAgICB7InRlc3RfdW5pY29kZV9jb21wYXJlX3dpdGhfYXNjaWkiLCAoUHlDRnVuY3Rpb24pdGVzdF91bmljb2RlX2NvbXBhcmVfd2l0aF9hc2NpaSwgTUVUSF9OT0FSR1N9LAogICAgIHsidGVzdF9jYXBzdWxlIiwgKFB5Q0Z1bmN0aW9uKXRlc3RfY2Fwc3VsZSwgTUVUSF9OT0FSR1N9LAorICAgIHsidGVzdF9mcm9tX2NvbnRpZ3VvdXMiLCAoUHlDRnVuY3Rpb24pdGVzdF9mcm9tX2NvbnRpZ3VvdXMsIE1FVEhfTk9BUkdTfSwKICAgICB7ImdldGFyZ3NfdHVwbGUiLCAgICAgICAgICAgZ2V0YXJnc190dXBsZSwgICAgICAgICAgICAgICAgICAgTUVUSF9WQVJBUkdTfSwKICAgICB7ImdldGFyZ3Nfa2V5d29yZHMiLCAoUHlDRnVuY3Rpb24pZ2V0YXJnc19rZXl3b3JkcywKICAgICAgIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTfSwKQEAgLTI2NjMsMTAgKzMzMjEsNTQgQEAKICAgICB7InB5dGltZV9vYmplY3RfdG9fdGltZV90IiwgdGVzdF9weXRpbWVfb2JqZWN0X3RvX3RpbWVfdCwgIE1FVEhfVkFSQVJHU30sCiAgICAgeyJweXRpbWVfb2JqZWN0X3RvX3RpbWV2YWwiLCB0ZXN0X3B5dGltZV9vYmplY3RfdG9fdGltZXZhbCwgIE1FVEhfVkFSQVJHU30sCiAgICAgeyJweXRpbWVfb2JqZWN0X3RvX3RpbWVzcGVjIiwgdGVzdF9weXRpbWVfb2JqZWN0X3RvX3RpbWVzcGVjLCAgTUVUSF9WQVJBUkdTfSwKKyAgICB7IndpdGhfdHBfZGVsIiwgICAgICAgICAgICAgd2l0aF90cF9kZWwsICAgICAgICAgICAgICAgICAgICAgTUVUSF9WQVJBUkdTfSwKKyAgICB7InRlc3RfcHltZW1fYWxsb2MwIiwKKyAgICAgKFB5Q0Z1bmN0aW9uKXRlc3RfcHltZW1fYWxsb2MwLCBNRVRIX05PQVJHU30sCisgICAgeyJ0ZXN0X3B5bWVtX3NldHJhd2FsbG9jYXRvcnMiLAorICAgICAoUHlDRnVuY3Rpb24pdGVzdF9weW1lbV9zZXRyYXdhbGxvY2F0b3JzLCBNRVRIX05PQVJHU30sCisgICAgeyJ0ZXN0X3B5bWVtX3NldGFsbG9jYXRvcnMiLAorICAgICAoUHlDRnVuY3Rpb24pdGVzdF9weW1lbV9zZXRhbGxvY2F0b3JzLCBNRVRIX05PQVJHU30sCisgICAgeyJ0ZXN0X3B5b2JqZWN0X3NldGFsbG9jYXRvcnMiLAorICAgICAoUHlDRnVuY3Rpb24pdGVzdF9weW9iamVjdF9zZXRhbGxvY2F0b3JzLCBNRVRIX05PQVJHU30sCisgICAgeyJub19kb2NzdHJpbmciLAorICAgICAgICAoUHlDRnVuY3Rpb24pdGVzdF93aXRoX2RvY3N0cmluZywgTUVUSF9OT0FSR1N9LAorICAgIHsiZG9jc3RyaW5nX2VtcHR5IiwKKyAgICAgICAgKFB5Q0Z1bmN0aW9uKXRlc3Rfd2l0aF9kb2NzdHJpbmcsIE1FVEhfTk9BUkdTLAorICAgICAgICBkb2NzdHJpbmdfZW1wdHl9LAorICAgIHsiZG9jc3RyaW5nX25vX3NpZ25hdHVyZSIsCisgICAgICAgIChQeUNGdW5jdGlvbil0ZXN0X3dpdGhfZG9jc3RyaW5nLCBNRVRIX05PQVJHUywKKyAgICAgICAgZG9jc3RyaW5nX25vX3NpZ25hdHVyZX0sCisgICAgeyJkb2NzdHJpbmdfd2l0aF9pbnZhbGlkX3NpZ25hdHVyZSIsCisgICAgICAgIChQeUNGdW5jdGlvbil0ZXN0X3dpdGhfZG9jc3RyaW5nLCBNRVRIX05PQVJHUywKKyAgICAgICAgZG9jc3RyaW5nX3dpdGhfaW52YWxpZF9zaWduYXR1cmV9LAorICAgIHsiZG9jc3RyaW5nX3dpdGhfaW52YWxpZF9zaWduYXR1cmUyIiwKKyAgICAgICAgKFB5Q0Z1bmN0aW9uKXRlc3Rfd2l0aF9kb2NzdHJpbmcsIE1FVEhfTk9BUkdTLAorICAgICAgICBkb2NzdHJpbmdfd2l0aF9pbnZhbGlkX3NpZ25hdHVyZTJ9LAorICAgIHsiZG9jc3RyaW5nX3dpdGhfc2lnbmF0dXJlIiwKKyAgICAgICAgKFB5Q0Z1bmN0aW9uKXRlc3Rfd2l0aF9kb2NzdHJpbmcsIE1FVEhfTk9BUkdTLAorICAgICAgICBkb2NzdHJpbmdfd2l0aF9zaWduYXR1cmV9LAorICAgIHsiZG9jc3RyaW5nX3dpdGhfc2lnbmF0dXJlX2FuZF9leHRyYV9uZXdsaW5lcyIsCisgICAgICAgIChQeUNGdW5jdGlvbil0ZXN0X3dpdGhfZG9jc3RyaW5nLCBNRVRIX05PQVJHUywKKyAgICAgICAgZG9jc3RyaW5nX3dpdGhfc2lnbmF0dXJlX2FuZF9leHRyYV9uZXdsaW5lc30sCisgICAgeyJkb2NzdHJpbmdfd2l0aF9zaWduYXR1cmVfd2l0aF9kZWZhdWx0cyIsCisgICAgICAgIChQeUNGdW5jdGlvbil0ZXN0X3dpdGhfZG9jc3RyaW5nLCBNRVRIX05PQVJHUywKKyAgICAgICAgZG9jc3RyaW5nX3dpdGhfc2lnbmF0dXJlX3dpdGhfZGVmYXVsdHN9LAogI2lmZGVmIFdJVEhfVEhSRUFECiAgICAgeyJjYWxsX2luX3RlbXBvcmFyeV9jX3RocmVhZCIsIGNhbGxfaW5fdGVtcG9yYXJ5X2NfdGhyZWFkLCBNRVRIX08sCiAgICAgIFB5RG9jX1NUUigic2V0X2Vycm9yX2NsYXNzKGVycm9yX2NsYXNzKSAtPiBOb25lIil9LAogI2VuZGlmCisgICAgeyJweW1hcnNoYWxfd3JpdGVfbG9uZ190b19maWxlIiwKKyAgICAgICAgcHltYXJzaGFsX3dyaXRlX2xvbmdfdG9fZmlsZSwgTUVUSF9WQVJBUkdTfSwKKyAgICB7InB5bWFyc2hhbF93cml0ZV9vYmplY3RfdG9fZmlsZSIsCisgICAgICAgIHB5bWFyc2hhbF93cml0ZV9vYmplY3RfdG9fZmlsZSwgTUVUSF9WQVJBUkdTfSwKKyAgICB7InB5bWFyc2hhbF9yZWFkX3Nob3J0X2Zyb21fZmlsZSIsCisgICAgICAgIHB5bWFyc2hhbF9yZWFkX3Nob3J0X2Zyb21fZmlsZSwgTUVUSF9WQVJBUkdTfSwKKyAgICB7InB5bWFyc2hhbF9yZWFkX2xvbmdfZnJvbV9maWxlIiwKKyAgICAgICAgcHltYXJzaGFsX3JlYWRfbG9uZ19mcm9tX2ZpbGUsIE1FVEhfVkFSQVJHU30sCisgICAgeyJweW1hcnNoYWxfcmVhZF9sYXN0X29iamVjdF9mcm9tX2ZpbGUiLAorICAgICAgICBweW1hcnNoYWxfcmVhZF9sYXN0X29iamVjdF9mcm9tX2ZpbGUsIE1FVEhfVkFSQVJHU30sCisgICAgeyJweW1hcnNoYWxfcmVhZF9vYmplY3RfZnJvbV9maWxlIiwKKyAgICAgICAgcHltYXJzaGFsX3JlYWRfb2JqZWN0X2Zyb21fZmlsZSwgTUVUSF9WQVJBUkdTfSwKICAgICB7TlVMTCwgTlVMTH0gLyogc2VudGluZWwgKi8KIH07CiAKQEAgLTI4ODEsNiArMzU4Myw4IEBACiAgICAgUHlfSU5DUkVGKCZQeUluc3RhbmNlTWV0aG9kX1R5cGUpOwogICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAiaW5zdGFuY2VtZXRob2QiLCAoUHlPYmplY3QgKikmUHlJbnN0YW5jZU1ldGhvZF9UeXBlKTsKIAorICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJ0aGVfbnVtYmVyX3RocmVlIiwgMyk7CisKICAgICBUZXN0RXJyb3IgPSBQeUVycl9OZXdFeGNlcHRpb24oIl90ZXN0Y2FwaS5lcnJvciIsIE5VTEwsIE5VTEwpOwogICAgIFB5X0lOQ1JFRihUZXN0RXJyb3IpOwogICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAiZXJyb3IiLCBUZXN0RXJyb3IpOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fdGVzdGVtYmVkLmMgYi9Nb2R1bGVzL190ZXN0ZW1iZWQuYwppbmRleCA1MWI0MzlmLi5hMjFkMjUxIDEwMDY0NAotLS0gYS9Nb2R1bGVzL190ZXN0ZW1iZWQuYworKysgYi9Nb2R1bGVzL190ZXN0ZW1iZWQuYwpAQCAtMSw3ICsxLDI2IEBACiAjaW5jbHVkZSA8UHl0aG9uLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KIAotdm9pZCBwcmludF9zdWJpbnRlcnAodm9pZCkKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEVtYmVkZGVkIGludGVycHJldGVyIHRlc3RzIHRoYXQgbmVlZCBhIGN1c3RvbSBleGUKKyAqCisgKiBFeGVjdXRlZCB2aWEgJ0VtYmVkZGluZ1Rlc3RzJyBpbiBMaWIvdGVzdC90ZXN0X2NhcGkucHkKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB2b2lkIF90ZXN0ZW1iZWRfUHlfSW5pdGlhbGl6ZSh2b2lkKQoreworICAgIC8qIEhBQ0s6IHRoZSAiLi8iIGF0IGZyb250IGF2b2lkcyBhIHNlYXJjaCBhbG9uZyB0aGUgUEFUSCBpbgorICAgICAgIE1vZHVsZXMvZ2V0cGF0aC5jICovCisgICAgUHlfU2V0UHJvZ3JhbU5hbWUoTCIuL190ZXN0ZW1iZWQiKTsKKyAgICBQeV9Jbml0aWFsaXplKCk7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBUZXN0IHJlcGVhdGVkIGluaXRhbGlzYXRpb24gYW5kIHN1YmludGVycHJldGVycworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdm9pZCBwcmludF9zdWJpbnRlcnAodm9pZCkKIHsKICAgICAvKiBKdXN0IG91dHB1dCBzb21lIGRlYnVnIHN0dWZmICovCiAgICAgUHlUaHJlYWRTdGF0ZSAqdHMgPSBQeVRocmVhZFN0YXRlX0dldCgpOwpAQCAtMTQsNyArMzMsNyBAQAogICAgICk7CiB9CiAKLWludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCitzdGF0aWMgdm9pZCB0ZXN0X3JlcGVhdGVkX2luaXRfYW5kX3N1YmludGVycHJldGVycyh2b2lkKQogewogICAgIFB5VGhyZWFkU3RhdGUgKm1haW5zdGF0ZSwgKnN1YnN0YXRlOwogI2lmZGVmIFdJVEhfVEhSRUFECkBAIC0yNCwxMCArNDMsNyBAQAogCiAgICAgZm9yIChpPTA7IGk8MzsgaSsrKSB7CiAgICAgICAgIHByaW50ZigiLS0tIFBhc3MgJWQgLS0tXG4iLCBpKTsKLSAgICAgICAgLyogSEFDSzogdGhlICIuLyIgYXQgZnJvbnQgYXZvaWRzIGEgc2VhcmNoIGFsb25nIHRoZSBQQVRIIGluCi0gICAgICAgICAgIE1vZHVsZXMvZ2V0cGF0aC5jICovCi0gICAgICAgIFB5X1NldFByb2dyYW1OYW1lKEwiLi9fdGVzdGVtYmVkIik7Ci0gICAgICAgIFB5X0luaXRpYWxpemUoKTsKKyAgICAgICAgX3Rlc3RlbWJlZF9QeV9Jbml0aWFsaXplKCk7CiAgICAgICAgIG1haW5zdGF0ZSA9IFB5VGhyZWFkU3RhdGVfR2V0KCk7CiAKICNpZmRlZiBXSVRIX1RIUkVBRApAQCAtNTQsNSArNzAsNzEgQEAKICAgICAgICAgUHlFdmFsX1Jlc3RvcmVUaHJlYWQobWFpbnN0YXRlKTsKICAgICAgICAgUHlfRmluYWxpemUoKTsKICAgICB9Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVGVzdCBmb3JjaW5nIGEgcGFydGljdWxhciBJTyBlbmNvZGluZworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdm9pZCBjaGVja19zdGRpb19kZXRhaWxzKGNvbnN0IGNoYXIgKmVuY29kaW5nLCBjb25zdCBjaGFyICogZXJyb3JzKQoreworICAgIC8qIE91dHB1dCBpbmZvIGZvciB0aGUgdGVzdCBjYXNlIHRvIGNoZWNrICovCisgICAgaWYgKGVuY29kaW5nKSB7CisgICAgICAgIHByaW50ZigiRXhwZWN0ZWQgZW5jb2Rpbmc6ICVzXG4iLCBlbmNvZGluZyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcHJpbnRmKCJFeHBlY3RlZCBlbmNvZGluZzogZGVmYXVsdFxuIik7CisgICAgfQorICAgIGlmIChlcnJvcnMpIHsKKyAgICAgICAgcHJpbnRmKCJFeHBlY3RlZCBlcnJvcnM6ICVzXG4iLCBlcnJvcnMpOworICAgIH0gZWxzZSB7CisgICAgICAgIHByaW50ZigiRXhwZWN0ZWQgZXJyb3JzOiBkZWZhdWx0XG4iKTsKKyAgICB9CisgICAgZmZsdXNoKHN0ZG91dCk7CisgICAgLyogRm9yY2UgdGhlIGdpdmVuIElPIGVuY29kaW5nICovCisgICAgUHlfU2V0U3RhbmRhcmRTdHJlYW1FbmNvZGluZyhlbmNvZGluZywgZXJyb3JzKTsKKyAgICBfdGVzdGVtYmVkX1B5X0luaXRpYWxpemUoKTsKKyAgICBQeVJ1bl9TaW1wbGVTdHJpbmcoCisgICAgICAgICJpbXBvcnQgc3lzOyIKKyAgICAgICAgInByaW50KCdzdGRpbjogezAuZW5jb2Rpbmd9OnswLmVycm9yc30nLmZvcm1hdChzeXMuc3RkaW4pKTsiCisgICAgICAgICJwcmludCgnc3Rkb3V0OiB7MC5lbmNvZGluZ306ezAuZXJyb3JzfScuZm9ybWF0KHN5cy5zdGRvdXQpKTsiCisgICAgICAgICJwcmludCgnc3RkZXJyOiB7MC5lbmNvZGluZ306ezAuZXJyb3JzfScuZm9ybWF0KHN5cy5zdGRlcnIpKTsiCisgICAgICAgICJzeXMuc3Rkb3V0LmZsdXNoKCkiCisgICAgKTsKKyAgICBQeV9GaW5hbGl6ZSgpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X2ZvcmNlZF9pb19lbmNvZGluZyh2b2lkKQoreworICAgIC8qIENoZWNrIHZhcmlvdXMgY29tYmluYXRpb25zICovCisgICAgcHJpbnRmKCItLS0gVXNlIGRlZmF1bHRzIC0tLVxuIik7CisgICAgY2hlY2tfc3RkaW9fZGV0YWlscyhOVUxMLCBOVUxMKTsKKyAgICBwcmludGYoIi0tLSBTZXQgZXJyb3JzIG9ubHkgLS0tXG4iKTsKKyAgICBjaGVja19zdGRpb19kZXRhaWxzKE5VTEwsICJzdXJyb2dhdGVlc2NhcGUiKTsKKyAgICBwcmludGYoIi0tLSBTZXQgZW5jb2Rpbmcgb25seSAtLS1cbiIpOworICAgIGNoZWNrX3N0ZGlvX2RldGFpbHMoImxhdGluLTEiLCBOVUxMKTsKKyAgICBwcmludGYoIi0tLSBTZXQgZW5jb2RpbmcgYW5kIGVycm9ycyAtLS1cbiIpOworICAgIGNoZWNrX3N0ZGlvX2RldGFpbHMoImxhdGluLTEiLCAic3Vycm9nYXRlZXNjYXBlIik7CisKKyAgICAvKiBDaGVjayBjYWxsaW5nIGFmdGVyIGluaXRpYWxpemF0aW9uIGZhaWxzICovCisgICAgUHlfSW5pdGlhbGl6ZSgpOworCisgICAgaWYgKFB5X1NldFN0YW5kYXJkU3RyZWFtRW5jb2RpbmcoTlVMTCwgTlVMTCkgPT0gMCkgeworICAgICAgICBwcmludGYoIlVuZXhwZWN0ZWQgc3VjY2VzcyBjYWxsaW5nIFB5X1NldFN0YW5kYXJkU3RyZWFtRW5jb2RpbmciKTsKKyAgICB9CisgICAgUHlfRmluYWxpemUoKTsKK30KKworLyogRGlmZmVyZW50IGVtYmVkZGluZyB0ZXN0cyAqLworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKworICAgIC8qIFRPRE86IENoZWNrIHRoZSBhcmd1bWVudCBzdHJpbmcgdG8gYWxsb3cgZm9yIG1vcmUgdGVzdCBjYXNlcyAqLworICAgIGlmIChhcmdjID4gMSkgeworICAgICAgICAvKiBGb3Igbm93OiBhc3N1bWUgImZvcmNlZF9pb19lbmNvZGluZyAqLworICAgICAgICB0ZXN0X2ZvcmNlZF9pb19lbmNvZGluZygpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8qIFJ1biB0aGUgb3JpZ2luYWwgZW1iZWRkaW5nIHRlc3QgY2FzZSBieSBkZWZhdWx0ICovCisgICAgICAgIHRlc3RfcmVwZWF0ZWRfaW5pdF9hbmRfc3ViaW50ZXJwcmV0ZXJzKCk7CisgICAgfQogICAgIHJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fdGVzdGltcG9ydG11bHRpcGxlLmMgYi9Nb2R1bGVzL190ZXN0aW1wb3J0bXVsdGlwbGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xY2FlYjY2Ci0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fdGVzdGltcG9ydG11bHRpcGxlLmMKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIEMgZXh0ZW5zaW9ucyBtb2R1bGUgdG8gdGVzdCBpbXBvcnRpbmcgbXVsdGlwbGUgbW9kdWxlcyBmcm9tIG9uZSBjb21waWxlZAorICogZmlsZSAoaXNzdWUxNjQyMSkuIFRoaXMgZmlsZSBkZWZpbmVzIDMgbW9kdWxlcyAoX3Rlc3RpbXBvcnRtb2R1bGUsCisgKiBmb28sIGJhciksIG9ubHkgdGhlIGZpcnN0IG9uZSBpcyBjYWxsZWQgdGhlIHNhbWUgYXMgdGhlIGNvbXBpbGVkIGZpbGUuCisgKi8KKyNpbmNsdWRlPFB5dGhvbi5oPgorCitzdGF0aWMgc3RydWN0IFB5TW9kdWxlRGVmIF90ZXN0aW1wb3J0bXVsdGlwbGUgPSB7CisgICAgUHlNb2R1bGVEZWZfSEVBRF9JTklULAorICAgICJfdGVzdGltcG9ydG11bHRpcGxlIiwKKyAgICAiX3Rlc3RpbXBvcnRtdWx0aXBsZSBkb2MiLAorICAgIC0xLAorICAgIE5VTEwsCisgICAgTlVMTCwKKyAgICBOVUxMLAorICAgIE5VTEwsCisgICAgTlVMTAorfTsKKworUHlNT0RJTklUX0ZVTkMgUHlJbml0X190ZXN0aW1wb3J0bXVsdGlwbGUodm9pZCkKK3sKKyAgICByZXR1cm4gUHlNb2R1bGVfQ3JlYXRlKCZfdGVzdGltcG9ydG11bHRpcGxlKTsKK30KKworc3RhdGljIHN0cnVjdCBQeU1vZHVsZURlZiBfZm9vbW9kdWxlID0geworICAgIFB5TW9kdWxlRGVmX0hFQURfSU5JVCwKKyAgICAiX3Rlc3RpbXBvcnRtdWx0aXBsZV9mb28iLAorICAgICJfdGVzdGltcG9ydG11bHRpcGxlX2ZvbyBkb2MiLAorICAgIC0xLAorICAgIE5VTEwsCisgICAgTlVMTCwKKyAgICBOVUxMLAorICAgIE5VTEwsCisgICAgTlVMTAorfTsKKworUHlNT0RJTklUX0ZVTkMgUHlJbml0X190ZXN0aW1wb3J0bXVsdGlwbGVfZm9vKHZvaWQpCit7CisgICAgcmV0dXJuIFB5TW9kdWxlX0NyZWF0ZSgmX2Zvb21vZHVsZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgUHlNb2R1bGVEZWYgX2Jhcm1vZHVsZSA9IHsKKyAgICBQeU1vZHVsZURlZl9IRUFEX0lOSVQsCisgICAgIl90ZXN0aW1wb3J0bXVsdGlwbGVfYmFyIiwKKyAgICAiX3Rlc3RpbXBvcnRtdWx0aXBsZV9iYXIgZG9jIiwKKyAgICAtMSwKKyAgICBOVUxMLAorICAgIE5VTEwsCisgICAgTlVMTCwKKyAgICBOVUxMLAorICAgIE5VTEwKK307CisKK1B5TU9ESU5JVF9GVU5DIFB5SW5pdF9fdGVzdGltcG9ydG11bHRpcGxlX2Jhcih2b2lkKXsKKyAgICByZXR1cm4gUHlNb2R1bGVfQ3JlYXRlKCZfYmFybW9kdWxlKTsKK30KKwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fdGhyZWFkbW9kdWxlLmMgYi9Nb2R1bGVzL190aHJlYWRtb2R1bGUuYwppbmRleCBkMWRjNjFkLi5mODBmNzZhIDEwMDY0NAotLS0gYS9Nb2R1bGVzL190aHJlYWRtb2R1bGUuYworKysgYi9Nb2R1bGVzL190aHJlYWRtb2R1bGUuYwpAQCAtMTcsNiArMTcsOCBAQAogc3RhdGljIGxvbmcgbmJfdGhyZWFkcyA9IDA7CiBzdGF0aWMgUHlPYmplY3QgKnN0cl9kaWN0OwogCitfUHlfSURFTlRJRklFUihzdGRlcnIpOworCiAvKiBMb2NrIG9iamVjdHMgKi8KIAogdHlwZWRlZiBzdHJ1Y3QgewpAQCAtNjgsNyArNzAsNyBAQAogICAgICAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgICAgICAgICAgciA9IFB5VGhyZWFkX2FjcXVpcmVfbG9ja190aW1lZChsb2NrLCBtaWNyb3NlY29uZHMsIDEpOwogICAgICAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLSAgICAgICAgfSAKKyAgICAgICAgfQogCiAgICAgICAgIGlmIChyID09IFBZX0xPQ0tfSU5UUikgewogICAgICAgICAgICAgLyogUnVuIHNpZ25hbCBoYW5kbGVycyBpZiB3ZSB3ZXJlIGludGVycnVwdGVkLiAgUHJvcGFnYXRlCkBAIC0yNTUsMTQgKzI1NywxNyBAQAogc3RhdGljIHZvaWQKIHJsb2NrX2RlYWxsb2MocmxvY2tvYmplY3QgKnNlbGYpCiB7Ci0gICAgYXNzZXJ0KHNlbGYtPnJsb2NrX2xvY2spOwogICAgIGlmIChzZWxmLT5pbl93ZWFrcmVmbGlzdCAhPSBOVUxMKQogICAgICAgICBQeU9iamVjdF9DbGVhcldlYWtSZWZzKChQeU9iamVjdCAqKSBzZWxmKTsKLSAgICAvKiBVbmxvY2sgdGhlIGxvY2sgc28gaXQncyBzYWZlIHRvIGZyZWUgaXQgKi8KLSAgICBpZiAoc2VsZi0+cmxvY2tfY291bnQgPiAwKQotICAgICAgICBQeVRocmVhZF9yZWxlYXNlX2xvY2soc2VsZi0+cmxvY2tfbG9jayk7CisgICAgLyogc2VsZi0+cmxvY2tfbG9jayBjYW4gYmUgTlVMTCBpZiBQeVRocmVhZF9hbGxvY2F0ZV9sb2NrKCkgZmFpbGVkCisgICAgICAgaW4gcmxvY2tfbmV3KCkgKi8KKyAgICBpZiAoc2VsZi0+cmxvY2tfbG9jayAhPSBOVUxMKSB7CisgICAgICAgIC8qIFVubG9jayB0aGUgbG9jayBzbyBpdCdzIHNhZmUgdG8gZnJlZSBpdCAqLworICAgICAgICBpZiAoc2VsZi0+cmxvY2tfY291bnQgPiAwKQorICAgICAgICAgICAgUHlUaHJlYWRfcmVsZWFzZV9sb2NrKHNlbGYtPnJsb2NrX2xvY2spOwogCi0gICAgUHlUaHJlYWRfZnJlZV9sb2NrKHNlbGYtPnJsb2NrX2xvY2spOworICAgICAgICBQeVRocmVhZF9mcmVlX2xvY2soc2VsZi0+cmxvY2tfbG9jayk7CisgICAgfQogICAgIFB5X1RZUEUoc2VsZiktPnRwX2ZyZWUoc2VsZik7CiB9CiAKQEAgLTM3NCwxMyArMzc5LDEzIEBACiB0byBiZSBhdmFpbGFibGUgZm9yIG90aGVyIHRocmVhZHMuIik7CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1ybG9ja19hY3F1aXJlX3Jlc3RvcmUocmxvY2tvYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmcpCitybG9ja19hY3F1aXJlX3Jlc3RvcmUocmxvY2tvYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewogICAgIGxvbmcgb3duZXI7CiAgICAgdW5zaWduZWQgbG9uZyBjb3VudDsKICAgICBpbnQgciA9IDE7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJnLCAia2w6X2FjcXVpcmVfcmVzdG9yZSIsICZjb3VudCwgJm93bmVyKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIihrbCk6X2FjcXVpcmVfcmVzdG9yZSIsICZjb3VudCwgJm93bmVyKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBpZiAoIVB5VGhyZWFkX2FjcXVpcmVfbG9jayhzZWxmLT5ybG9ja19sb2NrLCAwKSkgewpAQCAtNDUyLDE1ICs0NTcsMTYgQEAKIAogICAgIHNlbGYgPSAocmxvY2tvYmplY3QgKikgdHlwZS0+dHBfYWxsb2ModHlwZSwgMCk7CiAgICAgaWYgKHNlbGYgIT0gTlVMTCkgewotICAgICAgICBzZWxmLT5ybG9ja19sb2NrID0gUHlUaHJlYWRfYWxsb2NhdGVfbG9jaygpOwotICAgICAgICBpZiAoc2VsZi0+cmxvY2tfbG9jayA9PSBOVUxMKSB7Ci0gICAgICAgICAgICB0eXBlLT50cF9mcmVlKHNlbGYpOwotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFRocmVhZEVycm9yLCAiY2FuJ3QgYWxsb2NhdGUgbG9jayIpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KICAgICAgICAgc2VsZi0+aW5fd2Vha3JlZmxpc3QgPSBOVUxMOwogICAgICAgICBzZWxmLT5ybG9ja19vd25lciA9IDA7CiAgICAgICAgIHNlbGYtPnJsb2NrX2NvdW50ID0gMDsKKworICAgICAgICBzZWxmLT5ybG9ja19sb2NrID0gUHlUaHJlYWRfYWxsb2NhdGVfbG9jaygpOworICAgICAgICBpZiAoc2VsZi0+cmxvY2tfbG9jayA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoc2VsZik7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoVGhyZWFkRXJyb3IsICJjYW4ndCBhbGxvY2F0ZSBsb2NrIik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQogICAgIH0KIAogICAgIHJldHVybiAoUHlPYmplY3QgKikgc2VsZjsKQEAgLTQ4Miw3ICs0ODgsNyBAQAogICAgIHsiX2lzX293bmVkIiwgICAgIChQeUNGdW5jdGlvbilybG9ja19pc19vd25lZCwKICAgICAgTUVUSF9OT0FSR1MsIHJsb2NrX2lzX293bmVkX2RvY30sCiAgICAgeyJfYWNxdWlyZV9yZXN0b3JlIiwgKFB5Q0Z1bmN0aW9uKXJsb2NrX2FjcXVpcmVfcmVzdG9yZSwKLSAgICAgTUVUSF9PLCBybG9ja19hY3F1aXJlX3Jlc3RvcmVfZG9jfSwKKyAgICAgTUVUSF9WQVJBUkdTLCBybG9ja19hY3F1aXJlX3Jlc3RvcmVfZG9jfSwKICAgICB7Il9yZWxlYXNlX3NhdmUiLCAoUHlDRnVuY3Rpb24pcmxvY2tfcmVsZWFzZV9zYXZlLAogICAgICBNRVRIX05PQVJHUywgcmxvY2tfcmVsZWFzZV9zYXZlX2RvY30sCiAgICAgeyJfX2VudGVyX18iLCAgICAoUHlDRnVuY3Rpb24pcmxvY2tfYWNxdWlyZSwKQEAgLTcxMiwxMiArNzE4LDE4IEBACiAgICAgICAgICJfbG9jYWxkdW1teV9kZXN0cm95ZWQiLCAoUHlDRnVuY3Rpb24pIF9sb2NhbGR1bW15X2Rlc3Ryb3llZCwgTUVUSF9PCiAgICAgfTsKIAotICAgIGlmICh0eXBlLT50cF9pbml0ID09IFB5QmFzZU9iamVjdF9UeXBlLnRwX2luaXQKLSAgICAgICAgJiYgKChhcmdzICYmIFB5T2JqZWN0X0lzVHJ1ZShhcmdzKSkKLSAgICAgICAgfHwgKGt3ICYmIFB5T2JqZWN0X0lzVHJ1ZShrdykpKSkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgIkluaXRpYWxpemF0aW9uIGFyZ3VtZW50cyBhcmUgbm90IHN1cHBvcnRlZCIpOwotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAodHlwZS0+dHBfaW5pdCA9PSBQeUJhc2VPYmplY3RfVHlwZS50cF9pbml0KSB7CisgICAgICAgIGludCByYyA9IDA7CisgICAgICAgIGlmIChhcmdzICE9IE5VTEwpCisgICAgICAgICAgICByYyA9IFB5T2JqZWN0X0lzVHJ1ZShhcmdzKTsKKyAgICAgICAgaWYgKHJjID09IDAgJiYga3cgIT0gTlVMTCkKKyAgICAgICAgICAgIHJjID0gUHlPYmplY3RfSXNUcnVlKGt3KTsKKyAgICAgICAgaWYgKHJjICE9IDApIHsKKyAgICAgICAgICAgIGlmIChyYyA+IDApCisgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIkluaXRpYWxpemF0aW9uIGFyZ3VtZW50cyBhcmUgbm90IHN1cHBvcnRlZCIpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KICAgICB9CiAKICAgICBzZWxmID0gKGxvY2Fsb2JqZWN0ICopdHlwZS0+dHBfYWxsb2ModHlwZSwgMCk7CkBAIC03NDEsNyArNzUzLDcgQEAKICAgICB3ciA9IFB5V2Vha3JlZl9OZXdSZWYoKFB5T2JqZWN0ICopIHNlbGYsIE5VTEwpOwogICAgIGlmICh3ciA9PSBOVUxMKQogICAgICAgICBnb3RvIGVycjsKLSAgICBzZWxmLT53cl9jYWxsYmFjayA9IFB5Q0Z1bmN0aW9uX05ldygmd3JfY2FsbGJhY2tfZGVmLCB3cik7CisgICAgc2VsZi0+d3JfY2FsbGJhY2sgPSBQeUNGdW5jdGlvbl9OZXdFeCgmd3JfY2FsbGJhY2tfZGVmLCB3ciwgTlVMTCk7CiAgICAgUHlfREVDUkVGKHdyKTsKICAgICBpZiAoc2VsZi0+d3JfY2FsbGJhY2sgPT0gTlVMTCkKICAgICAgICAgZ290byBlcnI7CkBAIC0xMDAxLDcgKzEwMTMsNyBAQAogICAgICAgICAgICAgUHlTeXNfV3JpdGVTdGRlcnIoCiAgICAgICAgICAgICAgICAgIlVuaGFuZGxlZCBleGNlcHRpb24gaW4gdGhyZWFkIHN0YXJ0ZWQgYnkgIik7CiAgICAgICAgICAgICBQeUVycl9GZXRjaCgmZXhjLCAmdmFsdWUsICZ0Yik7Ci0gICAgICAgICAgICBmaWxlID0gUHlTeXNfR2V0T2JqZWN0KCJzdGRlcnIiKTsKKyAgICAgICAgICAgIGZpbGUgPSBfUHlTeXNfR2V0T2JqZWN0SWQoJlB5SWRfc3RkZXJyKTsKICAgICAgICAgICAgIGlmIChmaWxlICE9IE5VTEwgJiYgZmlsZSAhPSBQeV9Ob25lKQogICAgICAgICAgICAgICAgIFB5RmlsZV9Xcml0ZU9iamVjdChib290LT5mdW5jLCBmaWxlLCAwKTsKICAgICAgICAgICAgIGVsc2UKQEAgLTExNzIsNiArMTE4NCw2NiBAQAogVGhpcyBmdW5jdGlvbiBpcyBtZWFudCBmb3IgaW50ZXJuYWwgYW5kIHNwZWNpYWxpemVkIHB1cnBvc2VzIG9ubHkuXG5cCiBJbiBtb3N0IGFwcGxpY2F0aW9ucyBgdGhyZWFkaW5nLmVudW1lcmF0ZSgpYCBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkLiIpOwogCitzdGF0aWMgdm9pZAorcmVsZWFzZV9zZW50aW5lbCh2b2lkICp3cikKK3sKKyAgICAvKiBUcmlja3k6IHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlIGN1cnJlbnQgdGhyZWFkIHN0YXRlCisgICAgICAgaXMgYmVpbmcgZGVsZXRlZC4gIFRoZXJlZm9yZSwgb25seSBzaW1wbGUgQyBjb2RlIGNhbiBzYWZlbHkKKyAgICAgICBleGVjdXRlIGhlcmUuICovCisgICAgUHlPYmplY3QgKm9iaiA9IFB5V2Vha3JlZl9HRVRfT0JKRUNUKHdyKTsKKyAgICBsb2Nrb2JqZWN0ICpsb2NrOworICAgIGlmIChvYmogIT0gUHlfTm9uZSkgeworICAgICAgICBhc3NlcnQoUHlfVFlQRShvYmopID09ICZMb2NrdHlwZSk7CisgICAgICAgIGxvY2sgPSAobG9ja29iamVjdCAqKSBvYmo7CisgICAgICAgIGlmIChsb2NrLT5sb2NrZWQpIHsKKyAgICAgICAgICAgIFB5VGhyZWFkX3JlbGVhc2VfbG9jayhsb2NrLT5sb2NrX2xvY2spOworICAgICAgICAgICAgbG9jay0+bG9ja2VkID0gMDsKKyAgICAgICAgfQorICAgIH0KKyAgICAvKiBEZWFsbG9jYXRpbmcgYSB3ZWFrcmVmIHdpdGggYSBOVUxMIGNhbGxiYWNrIG9ubHkgY2FsbHMKKyAgICAgICBQeU9iamVjdF9HQ19EZWwoKSwgd2hpY2ggY2FuJ3QgY2FsbCBhbnkgUHl0aG9uIGNvZGUuICovCisgICAgUHlfREVDUkVGKHdyKTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK3RocmVhZF9fc2V0X3NlbnRpbmVsKFB5T2JqZWN0ICpzZWxmKQoreworICAgIFB5T2JqZWN0ICp3cjsKKyAgICBQeVRocmVhZFN0YXRlICp0c3RhdGUgPSBQeVRocmVhZFN0YXRlX0dldCgpOworICAgIGxvY2tvYmplY3QgKmxvY2s7CisKKyAgICBpZiAodHN0YXRlLT5vbl9kZWxldGVfZGF0YSAhPSBOVUxMKSB7CisgICAgICAgIC8qIFdlIG11c3Qgc3VwcG9ydCB0aGUgcmUtY3JlYXRpb24gb2YgdGhlIGxvY2sgZnJvbSBhCisgICAgICAgICAgIGZvcmsoKWVkIGNoaWxkLiAqLworICAgICAgICBhc3NlcnQodHN0YXRlLT5vbl9kZWxldGUgPT0gJnJlbGVhc2Vfc2VudGluZWwpOworICAgICAgICB3ciA9IChQeU9iamVjdCAqKSB0c3RhdGUtPm9uX2RlbGV0ZV9kYXRhOworICAgICAgICB0c3RhdGUtPm9uX2RlbGV0ZSA9IE5VTEw7CisgICAgICAgIHRzdGF0ZS0+b25fZGVsZXRlX2RhdGEgPSBOVUxMOworICAgICAgICBQeV9ERUNSRUYod3IpOworICAgIH0KKyAgICBsb2NrID0gbmV3bG9ja29iamVjdCgpOworICAgIGlmIChsb2NrID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIC8qIFRoZSBsb2NrIGlzIG93bmVkIGJ5IHdob2V2ZXIgY2FsbGVkIF9zZXRfc2VudGluZWwoKSwgYnV0IHRoZSB3ZWFrcmVmCisgICAgICAgaGFuZ3MgdG8gdGhlIHRocmVhZCBzdGF0ZS4gKi8KKyAgICB3ciA9IFB5V2Vha3JlZl9OZXdSZWYoKFB5T2JqZWN0ICopIGxvY2ssIE5VTEwpOworICAgIGlmICh3ciA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRihsb2NrKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHRzdGF0ZS0+b25fZGVsZXRlX2RhdGEgPSAodm9pZCAqKSB3cjsKKyAgICB0c3RhdGUtPm9uX2RlbGV0ZSA9ICZyZWxlYXNlX3NlbnRpbmVsOworICAgIHJldHVybiAoUHlPYmplY3QgKikgbG9jazsKK30KKworUHlEb2NfU1RSVkFSKF9zZXRfc2VudGluZWxfZG9jLAorIl9zZXRfc2VudGluZWwoKSAtPiBsb2NrXG5cCitcblwKK1NldCBhIHNlbnRpbmVsIGxvY2sgdGhhdCB3aWxsIGJlIHJlbGVhc2VkIHdoZW4gdGhlIGN1cnJlbnQgdGhyZWFkXG5cCitzdGF0ZSBpcyBmaW5hbGl6ZWQgKGFmdGVyIGl0IGlzIHVudGllZCBmcm9tIHRoZSBpbnRlcnByZXRlcikuXG5cCitcblwKK1RoaXMgaXMgYSBwcml2YXRlIEFQSSBmb3IgdGhlIHRocmVhZGluZyBtb2R1bGUuIik7CisKIHN0YXRpYyBQeU9iamVjdCAqCiB0aHJlYWRfc3RhY2tfc2l6ZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CkBAIC0xMjQ3LDYgKzEzMTksOCBAQAogICAgICBNRVRIX05PQVJHUywgX2NvdW50X2RvY30sCiAgICAgeyJzdGFja19zaXplIiwgICAgICAgICAgICAgIChQeUNGdW5jdGlvbil0aHJlYWRfc3RhY2tfc2l6ZSwKICAgICAgTUVUSF9WQVJBUkdTLCBzdGFja19zaXplX2RvY30sCisgICAgeyJfc2V0X3NlbnRpbmVsIiwgICAgICAgICAgIChQeUNGdW5jdGlvbil0aHJlYWRfX3NldF9zZW50aW5lbCwKKyAgICAgTUVUSF9OT0FSR1MsIF9zZXRfc2VudGluZWxfZG9jfSwKICAgICB7TlVMTCwgICAgICAgICAgICAgICAgICAgICAgTlVMTH0gICAgICAgICAgIC8qIHNlbnRpbmVsICovCiB9OwogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL190a2ludGVyLmMgYi9Nb2R1bGVzL190a2ludGVyLmMKaW5kZXggMjYyZDY3OS4uNTIwMjViYiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fdGtpbnRlci5jCisrKyBiL01vZHVsZXMvX3RraW50ZXIuYwpAQCAtMzQsNyArMzQsNyBAQAogI2VuZGlmCiAKICNkZWZpbmUgQ0hFQ0tfU0laRShzaXplLCBlbGVtc2l6ZSkgXAotICAgICgoc2l6ZV90KShzaXplKSA8PSBQeV9NQVgoKHNpemVfdClJTlRfTUFYLCBVSU5UX01BWCAvIChzaXplX3QpKGVsZW1zaXplKSkpCisgICAgKChzaXplX3QpKHNpemUpIDw9IFB5X01JTigoc2l6ZV90KUlOVF9NQVgsIFVJTlRfTUFYIC8gKHNpemVfdCkoZWxlbXNpemUpKSkKIAogLyogU3RhcnRpbmcgd2l0aCBUY2wgOC40LCBtYW55IEFQSXMgb2ZmZXIgY29uc3QtY29ycmVjdG5lc3MuICBVbmZvcnR1bmF0ZWx5LAogICAgbWFraW5nIF90a2ludGVyIGNvcnJlY3QgZm9yIHRoaXMgQVBJIG1lYW5zIHRvIGJyZWFrIGVhcmxpZXIKQEAgLTY1LDEwICs2NSwxNiBAQAogI2RlZmluZSBDT05TVAogI2VuZGlmCiAKLSNpZiBUS19WRVJTSU9OX0hFWCA8IDB4MDgwMzAxMDIKKyNpZiBUS19IRVhfVkVSU0lPTiA8IDB4MDgwMzAyMDEKICNlcnJvciAiVGsgb2xkZXIgdGhhbiA4LjMuMSBub3Qgc3VwcG9ydGVkIgogI2VuZGlmCiAKKyNpZiBUS19IRVhfVkVSU0lPTiA+PSAweDA4MDUwMjA4ICYmIFRLX0hFWF9WRVJTSU9OIDwgMHgwODA2MDAwMCB8fCBcCisgICAgVEtfSEVYX1ZFUlNJT04gPj0gMHgwODA2MDIwMAorI2RlZmluZSBIQVZFX0xJQlRPTU1BTVRICisjaW5jbHVkZSA8dGNsVG9tTWF0aC5oPgorI2VuZGlmCisKICNpZiAhKGRlZmluZWQoTVNfV0lORE9XUykgfHwgZGVmaW5lZChfX0NZR1dJTl9fKSkKICNkZWZpbmUgSEFWRV9DUkVBVEVGSUxFSEFORExFUgogI2VuZGlmCkBAIC0xMTQsNTIgKzEyMCw2MCBAQAogCiAvKiBUaGUgdGhyZWFkaW5nIHNpdHVhdGlvbiBpcyBjb21wbGljYXRlZC4gIFRjbCBpcyBub3QgdGhyZWFkLXNhZmUsIGV4Y2VwdAogICAgd2hlbiBjb25maWd1cmVkIHdpdGggLS1lbmFibGUtdGhyZWFkcy4KLSAgIFNvIHdlIG5lZWQgdG8gdXNlIGEgbG9jayBhcm91bmQgYWxsIHVzZXMgb2YgVGNsLiAgUHJldmlvdXNseSwgdGhlIFB5dGhvbgotICAgaW50ZXJwcmV0ZXIgbG9jayB3YXMgdXNlZCBmb3IgdGhpcy4gIEhvd2V2ZXIsIHRoaXMgY2F1c2VzIHByb2JsZW1zIHdoZW4KLSAgIG90aGVyIFB5dGhvbiB0aHJlYWRzIG5lZWQgdG8gcnVuIHdoaWxlIFRjbCBpcyBibG9ja2VkIHdhaXRpbmcgZm9yIGV2ZW50cy4KIAotICAgVG8gc29sdmUgdGhpcyBwcm9ibGVtLCBhIHNlcGFyYXRlIGxvY2sgZm9yIFRjbCBpcyBpbnRyb2R1Y2VkLiAgSG9sZGluZyBpdAotICAgaXMgaW5jb21wYXRpYmxlIHdpdGggaG9sZGluZyBQeXRob24ncyBpbnRlcnByZXRlciBsb2NrLiAgVGhlIGZvbGxvd2luZyBmb3VyCi0gICBtYWNyb3MgbWFuaXB1bGF0ZSBib3RoIGxvY2tzIHRvZ2V0aGVyLgorICAgU28gd2UgbmVlZCB0byB1c2UgYSBsb2NrIGFyb3VuZCBhbGwgdXNlcyBvZiBUY2wuICBQcmV2aW91c2x5LCB0aGUKKyAgIFB5dGhvbiBpbnRlcnByZXRlciBsb2NrIHdhcyB1c2VkIGZvciB0aGlzLiAgSG93ZXZlciwgdGhpcyBjYXVzZXMKKyAgIHByb2JsZW1zIHdoZW4gb3RoZXIgUHl0aG9uIHRocmVhZHMgbmVlZCB0byBydW4gd2hpbGUgVGNsIGlzIGJsb2NrZWQKKyAgIHdhaXRpbmcgZm9yIGV2ZW50cy4KIAotICAgRU5URVJfVENMIGFuZCBMRUFWRV9UQ0wgYXJlIGJyYWNrZXRzLCBqdXN0IGxpa2UgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUyBhbmQKLSAgIFB5X0VORF9BTExPV19USFJFQURTLiAgVGhleSBzaG91bGQgYmUgdXNlZCB3aGVuZXZlciBhIGNhbGwgaW50byBUY2wgaXMgbWFkZQotICAgdGhhdCBjb3VsZCBjYWxsIGFuIGV2ZW50IGhhbmRsZXIsIG9yIG90aGVyd2lzZSBhZmZlY3QgdGhlIHN0YXRlIG9mIGEgVGNsCi0gICBpbnRlcnByZXRlci4gIFRoZXNlIGFzc3VtZSB0aGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGhhcyB0aGUgUHl0aG9uCi0gICBpbnRlcnByZXRlciBsb2NrOyBpbnNpZGUgdGhlIGJyYWNrZXRzLCB0aGUgUHl0aG9uIGludGVycHJldGVyIGxvY2sgaGFzIGJlZW4KLSAgIHJlbGVhc2VkIGFuZCB0aGUgbG9jayBmb3IgVGNsIGhhcyBiZWVuIGFjcXVpcmVkLgorICAgVG8gc29sdmUgdGhpcyBwcm9ibGVtLCBhIHNlcGFyYXRlIGxvY2sgZm9yIFRjbCBpcyBpbnRyb2R1Y2VkLgorICAgSG9sZGluZyBpdCBpcyBpbmNvbXBhdGlibGUgd2l0aCBob2xkaW5nIFB5dGhvbidzIGludGVycHJldGVyIGxvY2suCisgICBUaGUgZm9sbG93aW5nIGZvdXIgbWFjcm9zIG1hbmlwdWxhdGUgYm90aCBsb2NrcyB0b2dldGhlci4KIAotICAgU29tZXRpbWVzLCBpdCBpcyBuZWNlc3NhcnkgdG8gaGF2ZSBib3RoIHRoZSBQeXRob24gbG9jayBhbmQgdGhlIFRjbCBsb2NrLgotICAgKEZvciBleGFtcGxlLCB3aGVuIHRyYW5zZmVycmluZyBkYXRhIGZyb20gdGhlIFRjbCBpbnRlcnByZXRlciByZXN1bHQgdG8gYQotICAgUHl0aG9uIHN0cmluZyBvYmplY3QuKSAgVGhpcyBjYW4gYmUgZG9uZSBieSB1c2luZyBkaWZmZXJlbnQgbWFjcm9zIHRvIGNsb3NlCi0gICB0aGUgRU5URVJfVENMIGJsb2NrOiBFTlRFUl9PVkVSTEFQIHJlYWNxdWlyZXMgdGhlIFB5dGhvbiBsb2NrIChhbmQgcmVzdG9yZXMKLSAgIHRoZSB0aHJlYWQgc3RhdGUpIGJ1dCBkb2Vzbid0IHJlbGVhc2UgdGhlIFRjbCBsb2NrOyBMRUFWRV9PVkVSTEFQX1RDTAotICAgcmVsZWFzZXMgdGhlIFRjbCBsb2NrLgorICAgRU5URVJfVENMIGFuZCBMRUFWRV9UQ0wgYXJlIGJyYWNrZXRzLCBqdXN0IGxpa2UKKyAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMgYW5kIFB5X0VORF9BTExPV19USFJFQURTLiAgVGhleSBzaG91bGQgYmUKKyAgIHVzZWQgd2hlbmV2ZXIgYSBjYWxsIGludG8gVGNsIGlzIG1hZGUgdGhhdCBjb3VsZCBjYWxsIGFuIGV2ZW50CisgICBoYW5kbGVyLCBvciBvdGhlcndpc2UgYWZmZWN0IHRoZSBzdGF0ZSBvZiBhIFRjbCBpbnRlcnByZXRlci4gIFRoZXNlCisgICBhc3N1bWUgdGhhdCB0aGUgc3Vycm91bmRpbmcgY29kZSBoYXMgdGhlIFB5dGhvbiBpbnRlcnByZXRlciBsb2NrOworICAgaW5zaWRlIHRoZSBicmFja2V0cywgdGhlIFB5dGhvbiBpbnRlcnByZXRlciBsb2NrIGhhcyBiZWVuIHJlbGVhc2VkCisgICBhbmQgdGhlIGxvY2sgZm9yIFRjbCBoYXMgYmVlbiBhY3F1aXJlZC4KKworICAgU29tZXRpbWVzLCBpdCBpcyBuZWNlc3NhcnkgdG8gaGF2ZSBib3RoIHRoZSBQeXRob24gbG9jayBhbmQgdGhlIFRjbAorICAgbG9jay4gIChGb3IgZXhhbXBsZSwgd2hlbiB0cmFuc2ZlcnJpbmcgZGF0YSBmcm9tIHRoZSBUY2wKKyAgIGludGVycHJldGVyIHJlc3VsdCB0byBhIFB5dGhvbiBzdHJpbmcgb2JqZWN0LikgIFRoaXMgY2FuIGJlIGRvbmUgYnkKKyAgIHVzaW5nIGRpZmZlcmVudCBtYWNyb3MgdG8gY2xvc2UgdGhlIEVOVEVSX1RDTCBibG9jazogRU5URVJfT1ZFUkxBUAorICAgcmVhY3F1aXJlcyB0aGUgUHl0aG9uIGxvY2sgKGFuZCByZXN0b3JlcyB0aGUgdGhyZWFkIHN0YXRlKSBidXQKKyAgIGRvZXNuJ3QgcmVsZWFzZSB0aGUgVGNsIGxvY2s7IExFQVZFX09WRVJMQVBfVENMIHJlbGVhc2VzIHRoZSBUY2wKKyAgIGxvY2suCiAKICAgIEJ5IGNvbnRyYXN0LCBFTlRFUl9QWVRIT04gYW5kIExFQVZFX1BZVEhPTiBhcmUgdXNlZCBpbiBUY2wgZXZlbnQKLSAgIGhhbmRsZXJzIHdoZW4gdGhlIGhhbmRsZXIgbmVlZHMgdG8gdXNlIFB5dGhvbi4gIFN1Y2ggZXZlbnQgaGFuZGxlcnMgYXJlCi0gICBlbnRlcmVkIHdoaWxlIHRoZSBsb2NrIGZvciBUY2wgaXMgaGVsZDsgdGhlIGV2ZW50IGhhbmRsZXIgcHJlc3VtYWJseSBuZWVkcwotICAgdG8gdXNlIFB5dGhvbi4gIEVOVEVSX1BZVEhPTiByZWxlYXNlcyB0aGUgbG9jayBmb3IgVGNsIGFuZCBhY3F1aXJlcwotICAgdGhlIFB5dGhvbiBpbnRlcnByZXRlciBsb2NrLCByZXN0b3JpbmcgdGhlIGFwcHJvcHJpYXRlIHRocmVhZCBzdGF0ZSwgYW5kCi0gICBMRUFWRV9QWVRIT04gcmVsZWFzZXMgdGhlIFB5dGhvbiBpbnRlcnByZXRlciBsb2NrIGFuZCByZS1hY3F1aXJlcyB0aGUgbG9jawotICAgZm9yIFRjbC4gIEl0IGlzIG9rYXkgZm9yIEVOVEVSX1RDTC9MRUFWRV9UQ0wgcGFpcnMgdG8gYmUgY29udGFpbmVkIGluc2lkZQotICAgdGhlIGNvZGUgYmV0d2VlbiBFTlRFUl9QWVRIT04gYW5kIExFQVZFX1BZVEhPTi4KKyAgIGhhbmRsZXJzIHdoZW4gdGhlIGhhbmRsZXIgbmVlZHMgdG8gdXNlIFB5dGhvbi4gIFN1Y2ggZXZlbnQgaGFuZGxlcnMKKyAgIGFyZSBlbnRlcmVkIHdoaWxlIHRoZSBsb2NrIGZvciBUY2wgaXMgaGVsZDsgdGhlIGV2ZW50IGhhbmRsZXIKKyAgIHByZXN1bWFibHkgbmVlZHMgdG8gdXNlIFB5dGhvbi4gIEVOVEVSX1BZVEhPTiByZWxlYXNlcyB0aGUgbG9jayBmb3IKKyAgIFRjbCBhbmQgYWNxdWlyZXMgdGhlIFB5dGhvbiBpbnRlcnByZXRlciBsb2NrLCByZXN0b3JpbmcgdGhlCisgICBhcHByb3ByaWF0ZSB0aHJlYWQgc3RhdGUsIGFuZCBMRUFWRV9QWVRIT04gcmVsZWFzZXMgdGhlIFB5dGhvbgorICAgaW50ZXJwcmV0ZXIgbG9jayBhbmQgcmUtYWNxdWlyZXMgdGhlIGxvY2sgZm9yIFRjbC4gIEl0IGlzIG9rYXkgZm9yCisgICBFTlRFUl9UQ0wvTEVBVkVfVENMIHBhaXJzIHRvIGJlIGNvbnRhaW5lZCBpbnNpZGUgdGhlIGNvZGUgYmV0d2VlbgorICAgRU5URVJfUFlUSE9OIGFuZCBMRUFWRV9QWVRIT04uCiAKLSAgIFRoZXNlIGxvY2tzIGV4cGFuZCB0byBzZXZlcmFsIHN0YXRlbWVudHMgYW5kIGJyYWNrZXRzOyB0aGV5IHNob3VsZCBub3QgYmUKLSAgIHVzZWQgaW4gYnJhbmNoZXMgb2YgaWYgc3RhdGVtZW50cyBhbmQgdGhlIGxpa2UuCisgICBUaGVzZSBsb2NrcyBleHBhbmQgdG8gc2V2ZXJhbCBzdGF0ZW1lbnRzIGFuZCBicmFja2V0czsgdGhleSBzaG91bGQKKyAgIG5vdCBiZSB1c2VkIGluIGJyYW5jaGVzIG9mIGlmIHN0YXRlbWVudHMgYW5kIHRoZSBsaWtlLgogCi0gICBJZiBUY2wgaXMgdGhyZWFkZWQsIHRoaXMgYXBwcm9hY2ggd29uJ3Qgd29yayBhbnltb3JlLiBUaGUgVGNsIGludGVycHJldGVyIGlzCi0gICBvbmx5IHZhbGlkIGluIHRoZSB0aHJlYWQgdGhhdCBjcmVhdGVkIGl0LCBhbmQgYWxsIFRrIGFjdGl2aXR5IG11c3QgaGFwcGVuIGluIHRoaXMKLSAgIHRocmVhZCwgYWxzby4gVGhhdCBtZWFucyB0aGF0IHRoZSBtYWlubG9vcCBtdXN0IGJlIGludm9rZWQgaW4gdGhlIHRocmVhZCB0aGF0Ci0gICBjcmVhdGVkIHRoZSBpbnRlcnByZXRlci4gSW52b2tpbmcgY29tbWFuZHMgZnJvbSBvdGhlciB0aHJlYWRzIGlzIHBvc3NpYmxlOwotICAgX3RraW50ZXIgd2lsbCBxdWV1ZSBhbiBldmVudCBmb3IgdGhlIGludGVycHJldGVyIHRocmVhZCwgd2hpY2ggd2lsbCB0aGVuCi0gICBleGVjdXRlIHRoZSBjb21tYW5kIGFuZCBwYXNzIGJhY2sgdGhlIHJlc3VsdC4gSWYgdGhlIG1haW4gdGhyZWFkIGlzIG5vdCBpbiB0aGUKLSAgIG1haW5sb29wLCBhbmQgaW52b2tpbmcgY29tbWFuZHMgY2F1c2VzIGFuIGV4Y2VwdGlvbjsgaWYgdGhlIG1haW4gbG9vcCBpcyBydW5uaW5nCi0gICBidXQgbm90IHByb2Nlc3NpbmcgZXZlbnRzLCB0aGUgY29tbWFuZCBpbnZvY2F0aW9uIHdpbGwgYmxvY2suCisgICBJZiBUY2wgaXMgdGhyZWFkZWQsIHRoaXMgYXBwcm9hY2ggd29uJ3Qgd29yayBhbnltb3JlLiBUaGUgVGNsCisgICBpbnRlcnByZXRlciBpcyBvbmx5IHZhbGlkIGluIHRoZSB0aHJlYWQgdGhhdCBjcmVhdGVkIGl0LCBhbmQgYWxsIFRrCisgICBhY3Rpdml0eSBtdXN0IGhhcHBlbiBpbiB0aGlzIHRocmVhZCwgYWxzby4gVGhhdCBtZWFucyB0aGF0IHRoZQorICAgbWFpbmxvb3AgbXVzdCBiZSBpbnZva2VkIGluIHRoZSB0aHJlYWQgdGhhdCBjcmVhdGVkIHRoZQorICAgaW50ZXJwcmV0ZXIuIEludm9raW5nIGNvbW1hbmRzIGZyb20gb3RoZXIgdGhyZWFkcyBpcyBwb3NzaWJsZTsKKyAgIF90a2ludGVyIHdpbGwgcXVldWUgYW4gZXZlbnQgZm9yIHRoZSBpbnRlcnByZXRlciB0aHJlYWQsIHdoaWNoIHdpbGwKKyAgIHRoZW4gZXhlY3V0ZSB0aGUgY29tbWFuZCBhbmQgcGFzcyBiYWNrIHRoZSByZXN1bHQuIElmIHRoZSBtYWluCisgICB0aHJlYWQgaXMgbm90IGluIHRoZSBtYWlubG9vcCwgYW5kIGludm9raW5nIGNvbW1hbmRzIGNhdXNlcyBhbgorICAgZXhjZXB0aW9uOyBpZiB0aGUgbWFpbiBsb29wIGlzIHJ1bm5pbmcgYnV0IG5vdCBwcm9jZXNzaW5nIGV2ZW50cywKKyAgIHRoZSBjb21tYW5kIGludm9jYXRpb24gd2lsbCBibG9jay4KIAotICAgSW4gYWRkaXRpb24sIGZvciBhIHRocmVhZGVkIFRjbCwgYSBzaW5nbGUgZ2xvYmFsIHRjbF90c3RhdGUgd29uJ3QgYmUgc3VmZmljaWVudAotICAgYW55bW9yZSwgc2luY2UgbXVsdGlwbGUgVGNsIGludGVycHJldGVycyBtYXkgc2ltdWx0YW5lb3VzbHkgZGlzcGF0Y2ggaW4gZGlmZmVyZW50Ci0gICB0aHJlYWRzLiBTbyB3ZSB1c2UgdGhlIFRjbCBUTFMgQVBJLgorICAgSW4gYWRkaXRpb24sIGZvciBhIHRocmVhZGVkIFRjbCwgYSBzaW5nbGUgZ2xvYmFsIHRjbF90c3RhdGUgd29uJ3QKKyAgIGJlIHN1ZmZpY2llbnQgYW55bW9yZSwgc2luY2UgbXVsdGlwbGUgVGNsIGludGVycHJldGVycyBtYXkKKyAgIHNpbXVsdGFuZW91c2x5IGRpc3BhdGNoIGluIGRpZmZlcmVudCB0aHJlYWRzLiBTbyB3ZSB1c2UgdGhlIFRjbCBUTFMKKyAgIEFQSS4KIAogKi8KIApAQCAtMTY4LDcgKzE4Miw4IEBACiAjaWZkZWYgVENMX1RIUkVBRFMKIHN0YXRpYyBUY2xfVGhyZWFkRGF0YUtleSBzdGF0ZV9rZXk7CiB0eXBlZGVmIFB5VGhyZWFkU3RhdGUgKlRocmVhZFNwZWNpZmljRGF0YTsKLSNkZWZpbmUgdGNsX3RzdGF0ZSAoKihQeVRocmVhZFN0YXRlKiopVGNsX0dldFRocmVhZERhdGEoJnN0YXRlX2tleSwgc2l6ZW9mKFB5VGhyZWFkU3RhdGUqKSkpCisjZGVmaW5lIHRjbF90c3RhdGUgXAorICAgICgqKFB5VGhyZWFkU3RhdGUqKilUY2xfR2V0VGhyZWFkRGF0YSgmc3RhdGVfa2V5LCBzaXplb2YoUHlUaHJlYWRTdGF0ZSopKSkKICNlbHNlCiBzdGF0aWMgUHlUaHJlYWRTdGF0ZSAqdGNsX3RzdGF0ZSA9IE5VTEw7CiAjZW5kaWYKQEAgLTE3OCw3ICsxOTMsOCBAQAogICAgICAgICBpZih0Y2xfbG9jaylQeVRocmVhZF9hY3F1aXJlX2xvY2sodGNsX2xvY2ssIDEpOyB0Y2xfdHN0YXRlID0gdHN0YXRlOwogCiAjZGVmaW5lIExFQVZFX1RDTCBcCi0gICAgdGNsX3RzdGF0ZSA9IE5VTEw7IGlmKHRjbF9sb2NrKVB5VGhyZWFkX3JlbGVhc2VfbG9jayh0Y2xfbG9jayk7IFB5X0VORF9BTExPV19USFJFQURTfQorICAgIHRjbF90c3RhdGUgPSBOVUxMOyBcCisgICAgaWYodGNsX2xvY2spUHlUaHJlYWRfcmVsZWFzZV9sb2NrKHRjbF9sb2NrKTsgUHlfRU5EX0FMTE9XX1RIUkVBRFN9CiAKICNkZWZpbmUgRU5URVJfT1ZFUkxBUCBcCiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKQEAgLTE4OCw3ICsyMDQsOCBAQAogCiAjZGVmaW5lIEVOVEVSX1BZVEhPTiBcCiAgICAgeyBQeVRocmVhZFN0YXRlICp0c3RhdGUgPSB0Y2xfdHN0YXRlOyB0Y2xfdHN0YXRlID0gTlVMTDsgXAotICAgICAgICBpZih0Y2xfbG9jaylQeVRocmVhZF9yZWxlYXNlX2xvY2sodGNsX2xvY2spOyBQeUV2YWxfUmVzdG9yZVRocmVhZCgodHN0YXRlKSk7IH0KKyAgICAgICAgaWYodGNsX2xvY2spIFwKKyAgICAgICAgICBQeVRocmVhZF9yZWxlYXNlX2xvY2sodGNsX2xvY2spOyBQeUV2YWxfUmVzdG9yZVRocmVhZCgodHN0YXRlKSk7IH0KIAogI2RlZmluZSBMRUFWRV9QWVRIT04gXAogICAgIHsgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlID0gUHlFdmFsX1NhdmVUaHJlYWQoKTsgXApAQCAtMTk3LDcgKzIxNCw4IEBACiAjZGVmaW5lIENIRUNLX1RDTF9BUFBBUlRNRU5UIFwKICAgICBpZiAoKChUa2FwcE9iamVjdCAqKXNlbGYpLT50aHJlYWRlZCAmJiBcCiAgICAgICAgICgoVGthcHBPYmplY3QgKilzZWxmKS0+dGhyZWFkX2lkICE9IFRjbF9HZXRDdXJyZW50VGhyZWFkKCkpIHsgXAotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLCAiQ2FsbGluZyBUY2wgZnJvbSBkaWZmZXJlbnQgYXBwYXJ0bWVudCIpOyBcCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICJDYWxsaW5nIFRjbCBmcm9tIGRpZmZlcmVudCBhcHBhcnRtZW50Iik7IFwKICAgICAgICAgcmV0dXJuIDA7IFwKICAgICB9CiAKQEAgLTIxOSw3ICsyMzcsNyBAQAogCiAvKioqKiBUa2FwcCBPYmplY3QgRGVjbGFyYXRpb24gKioqKi8KIAotc3RhdGljIFB5VHlwZU9iamVjdCBUa2FwcF9UeXBlOworc3RhdGljIFB5T2JqZWN0ICpUa2FwcF9UeXBlOwogCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgUHlPYmplY3RfSEVBRApAQCAtMjMwLDE2ICsyNDgsMTggQEAKICAgICBpbnQgZGlzcGF0Y2hpbmc7CiAgICAgLyogV2UgY2Fubm90IGluY2x1ZGUgdGNsSW50LmgsIGFzIHRoaXMgaXMgaW50ZXJuYWwuCiAgICAgICAgU28gd2UgY2FjaGUgaW50ZXJlc3RpbmcgdHlwZXMgaGVyZS4gKi8KLSAgICBUY2xfT2JqVHlwZSAqQm9vbGVhblR5cGU7Ci0gICAgVGNsX09ialR5cGUgKkJ5dGVBcnJheVR5cGU7Ci0gICAgVGNsX09ialR5cGUgKkRvdWJsZVR5cGU7Ci0gICAgVGNsX09ialR5cGUgKkludFR5cGU7Ci0gICAgVGNsX09ialR5cGUgKkxpc3RUeXBlOwotICAgIFRjbF9PYmpUeXBlICpQcm9jQm9keVR5cGU7Ci0gICAgVGNsX09ialR5cGUgKlN0cmluZ1R5cGU7CisgICAgY29uc3QgVGNsX09ialR5cGUgKk9sZEJvb2xlYW5UeXBlOworICAgIGNvbnN0IFRjbF9PYmpUeXBlICpCb29sZWFuVHlwZTsKKyAgICBjb25zdCBUY2xfT2JqVHlwZSAqQnl0ZUFycmF5VHlwZTsKKyAgICBjb25zdCBUY2xfT2JqVHlwZSAqRG91YmxlVHlwZTsKKyAgICBjb25zdCBUY2xfT2JqVHlwZSAqSW50VHlwZTsKKyAgICBjb25zdCBUY2xfT2JqVHlwZSAqV2lkZUludFR5cGU7CisgICAgY29uc3QgVGNsX09ialR5cGUgKkJpZ251bVR5cGU7CisgICAgY29uc3QgVGNsX09ialR5cGUgKkxpc3RUeXBlOworICAgIGNvbnN0IFRjbF9PYmpUeXBlICpQcm9jQm9keVR5cGU7CisgICAgY29uc3QgVGNsX09ialR5cGUgKlN0cmluZ1R5cGU7CiB9IFRrYXBwT2JqZWN0OwogCi0jZGVmaW5lIFRrYXBwX0NoZWNrKHYpIChQeV9UWVBFKHYpID09ICZUa2FwcF9UeXBlKQogI2RlZmluZSBUa2FwcF9JbnRlcnAodikgKCgoVGthcHBPYmplY3QgKikgKHYpKS0+aW50ZXJwKQogI2RlZmluZSBUa2FwcF9SZXN1bHQodikgVGNsX0dldFN0cmluZ1Jlc3VsdChUa2FwcF9JbnRlcnAodikpCiAKQEAgLTMxMiwxMTAgKzMzMiw5IEBACiAjZW5kaWYgLyogV0lUSF9USFJFQUQgKi8KIAogCi1zdGF0aWMgY2hhciAqCi1Bc1N0cmluZyhQeU9iamVjdCAqdmFsdWUsIFB5T2JqZWN0ICp0bXApCi17Ci0gICAgaWYgKFB5Qnl0ZXNfQ2hlY2sodmFsdWUpKQotICAgICAgICByZXR1cm4gUHlCeXRlc19Bc1N0cmluZyh2YWx1ZSk7Ci0gICAgZWxzZSBpZiAoUHlVbmljb2RlX0NoZWNrKHZhbHVlKSkKLSAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9Bc1VURjgodmFsdWUpOwotICAgIGVsc2UgewotICAgICAgICBQeU9iamVjdCAqdiA9IFB5T2JqZWN0X1N0cih2YWx1ZSk7Ci0gICAgICAgIGlmICh2ID09IE5VTEwpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgaWYgKFB5TGlzdF9BcHBlbmQodG1wLCB2KSAhPSAwKSB7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgIHJldHVybiBQeVVuaWNvZGVfQXNVVEY4KHYpOwotICAgIH0KLX0KLQotCiAKICNkZWZpbmUgQVJHU1ogNjQKIAotc3RhdGljIGNoYXIgKgotTWVyZ2UoUHlPYmplY3QgKmFyZ3MpCi17Ci0gICAgUHlPYmplY3QgKnRtcCA9IE5VTEw7Ci0gICAgY2hhciAqYXJndlN0b3JlW0FSR1NaXTsKLSAgICBjaGFyICoqYXJndiA9IE5VTEw7Ci0gICAgaW50IGZ2U3RvcmVbQVJHU1pdOwotICAgIGludCAqZnYgPSBOVUxMOwotICAgIFB5X3NzaXplX3QgYXJnYyA9IDAsIGZ2YyA9IDAsIGk7Ci0gICAgY2hhciAqcmVzID0gTlVMTDsKLQotICAgIGlmICghKHRtcCA9IFB5TGlzdF9OZXcoMCkpKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIGFyZ3YgPSBhcmd2U3RvcmU7Ci0gICAgZnYgPSBmdlN0b3JlOwotCi0gICAgaWYgKGFyZ3MgPT0gTlVMTCkKLSAgICAgICAgYXJnYyA9IDA7Ci0KLSAgICBlbHNlIGlmICghUHlUdXBsZV9DaGVjayhhcmdzKSkgewotICAgICAgICBhcmdjID0gMTsKLSAgICAgICAgZnZbMF0gPSAwOwotICAgICAgICBpZiAoIShhcmd2WzBdID0gQXNTdHJpbmcoYXJncywgdG1wKSkpCi0gICAgICAgICAgICBnb3RvIGZpbmFsbHk7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICBhcmdjID0gUHlUdXBsZV9TaXplKGFyZ3MpOwotCi0gICAgICAgIGlmIChhcmdjID4gQVJHU1opIHsKLSAgICAgICAgICAgIGlmICghQ0hFQ0tfU0laRShhcmdjLCBzaXplb2YoY2hhciAqKSkpIHsKLSAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwgInR1cGxlIGlzIHRvbyBsb25nIik7Ci0gICAgICAgICAgICAgICAgZ290byBmaW5hbGx5OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYXJndiA9IChjaGFyICoqKWNrYWxsb2MoKHNpemVfdClhcmdjICogc2l6ZW9mKGNoYXIgKikpOwotICAgICAgICAgICAgZnYgPSAoaW50ICopY2thbGxvYygoc2l6ZV90KWFyZ2MgKiBzaXplb2YoaW50KSk7Ci0gICAgICAgICAgICBpZiAoYXJndiA9PSBOVUxMIHx8IGZ2ID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwotICAgICAgICAgICAgICAgIGdvdG8gZmluYWxseTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyspIHsKLSAgICAgICAgICAgIFB5T2JqZWN0ICp2ID0gUHlUdXBsZV9HZXRJdGVtKGFyZ3MsIGkpOwotICAgICAgICAgICAgaWYgKFB5VHVwbGVfQ2hlY2sodikpIHsKLSAgICAgICAgICAgICAgICBmdltpXSA9IDE7Ci0gICAgICAgICAgICAgICAgaWYgKCEoYXJndltpXSA9IE1lcmdlKHYpKSkKLSAgICAgICAgICAgICAgICAgICAgZ290byBmaW5hbGx5OwotICAgICAgICAgICAgICAgIGZ2YysrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAodiA9PSBQeV9Ob25lKSB7Ci0gICAgICAgICAgICAgICAgYXJnYyA9IGk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBmdltpXSA9IDA7Ci0gICAgICAgICAgICAgICAgaWYgKCEoYXJndltpXSA9IEFzU3RyaW5nKHYsIHRtcCkpKQotICAgICAgICAgICAgICAgICAgICBnb3RvIGZpbmFsbHk7Ci0gICAgICAgICAgICAgICAgZnZjKys7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmVzID0gVGNsX01lcmdlKGFyZ2MsIGFyZ3YpOwotICAgIGlmIChyZXMgPT0gTlVMTCkKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFRraW50ZXJfVGNsRXJyb3IsICJtZXJnZSBmYWlsZWQiKTsKLQotICBmaW5hbGx5OgotICAgIGZvciAoaSA9IDA7IGkgPCBmdmM7IGkrKykKLSAgICAgICAgaWYgKGZ2W2ldKSB7Ci0gICAgICAgICAgICBja2ZyZWUoYXJndltpXSk7Ci0gICAgICAgIH0KLSAgICBpZiAoYXJndiAhPSBhcmd2U3RvcmUpCi0gICAgICAgIGNrZnJlZShGUkVFQ0FTVCBhcmd2KTsKLSAgICBpZiAoZnYgIT0gZnZTdG9yZSkKLSAgICAgICAgY2tmcmVlKEZSRUVDQVNUIGZ2KTsKLQotICAgIFB5X0RFQ1JFRih0bXApOwotICAgIHJldHVybiByZXM7Ci19Ci0KIAogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtNDI5LDggKzM0OCwxMCBAQAogICAgICAgICAgICAgY29uc3QgY2hhciAqZSA9IHMgKyBzaXplOwogICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKICAgICAgICAgICAgIHEgPSBidWYgPSAoY2hhciAqKVB5TWVtX01hbGxvYyhzaXplKTsKLSAgICAgICAgICAgIGlmIChidWYgPT0gTlVMTCkKKyAgICAgICAgICAgIGlmIChidWYgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICB3aGlsZSAocyAhPSBlKSB7CiAgICAgICAgICAgICAgICAgaWYgKHMgKyAxICE9IGUgJiYgc1swXSA9PSAnXHhjMCcgJiYgc1sxXSA9PSAnXHg4MCcpIHsKICAgICAgICAgICAgICAgICAgICAgKnErKyA9ICdcMCc7CkBAIC00NzEsOCArMzkyLDcgQEAKICAgICBQeU9iamVjdCAqdjsKIAogICAgIGlmIChsaXN0ID09IE5VTEwpIHsKLSAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwotICAgICAgICByZXR1cm4gUHlfTm9uZTsKKyAgICAgICAgUHlfUkVUVVJOX05PTkU7CiAgICAgfQogCiAgICAgaWYgKFRjbF9TcGxpdExpc3QoKFRjbF9JbnRlcnAgKilOVUxMLCBsaXN0LCAmYXJnYywgJmFyZ3YpICE9IFRDTF9PSykgewpAQCAtNTA0LDkgKzQyNCw5IEBACiAgICAgcmV0dXJuIHY7CiB9CiAKLS8qIEluIHNvbWUgY2FzZXMsIFRjbCB3aWxsIHN0aWxsIHJldHVybiBzdHJpbmdzIHRoYXQgYXJlIHN1cHBvc2VkIHRvIGJlCi0gICBsaXN0cy4gU3BsaXRPYmogd2Fsa3MgdGhyb3VnaCBhIG5lc3RlZCB0dXBsZSwgZmluZGluZyBzdHJpbmcgb2JqZWN0cyB0aGF0Ci0gICBuZWVkIHRvIGJlIHNwbGl0LiAqLworLyogSW4gc29tZSBjYXNlcywgVGNsIHdpbGwgc3RpbGwgcmV0dXJuIHN0cmluZ3MgdGhhdCBhcmUgc3VwcG9zZWQgdG8KKyAgIGJlIGxpc3RzLiBTcGxpdE9iaiB3YWxrcyB0aHJvdWdoIGEgbmVzdGVkIHR1cGxlLCBmaW5kaW5nIHN0cmluZworICAgb2JqZWN0cyB0aGF0IG5lZWQgdG8gYmUgc3BsaXQuICovCiAKIHN0YXRpYyBQeU9iamVjdCAqCiBTcGxpdE9iaihQeU9iamVjdCAqYXJnKQpAQCAtNjM4LDkgKzU1OCwxMCBAQAogICAgIFRrYXBwT2JqZWN0ICp2OwogICAgIGNoYXIgKmFyZ3YwOwogCi0gICAgdiA9IFB5T2JqZWN0X05ldyhUa2FwcE9iamVjdCwgJlRrYXBwX1R5cGUpOworICAgIHYgPSBQeU9iamVjdF9OZXcoVGthcHBPYmplY3QsIChQeVR5cGVPYmplY3QgKikgVGthcHBfVHlwZSk7CiAgICAgaWYgKHYgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgUHlfSU5DUkVGKFRrYXBwX1R5cGUpOwogCiAgICAgdi0+aW50ZXJwID0gVGNsX0NyZWF0ZUludGVycCgpOwogICAgIHYtPndhbnRvYmplY3RzID0gd2FudG9iamVjdHM7CkBAIC02NTEsNyArNTcyLDggQEAKIAogI2lmbmRlZiBUQ0xfVEhSRUFEUwogICAgIGlmICh2LT50aHJlYWRlZCkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLCAiVGNsIGlzIHRocmVhZGVkIGJ1dCBfdGtpbnRlciBpcyBub3QiKTsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJUY2wgaXMgdGhyZWFkZWQgYnV0IF90a2ludGVyIGlzIG5vdCIpOwogICAgICAgICBQeV9ERUNSRUYodik7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KQEAgLTY2NCwxMCArNTg2LDEzIEBACiAgICAgfQogI2VuZGlmCiAKLSAgICB2LT5Cb29sZWFuVHlwZSA9IFRjbF9HZXRPYmpUeXBlKCJib29sZWFuIik7CisgICAgdi0+T2xkQm9vbGVhblR5cGUgPSBUY2xfR2V0T2JqVHlwZSgiYm9vbGVhbiIpOworICAgIHYtPkJvb2xlYW5UeXBlID0gVGNsX0dldE9ialR5cGUoImJvb2xlYW5TdHJpbmciKTsKICAgICB2LT5CeXRlQXJyYXlUeXBlID0gVGNsX0dldE9ialR5cGUoImJ5dGVhcnJheSIpOwogICAgIHYtPkRvdWJsZVR5cGUgPSBUY2xfR2V0T2JqVHlwZSgiZG91YmxlIik7CiAgICAgdi0+SW50VHlwZSA9IFRjbF9HZXRPYmpUeXBlKCJpbnQiKTsKKyAgICB2LT5XaWRlSW50VHlwZSA9IFRjbF9HZXRPYmpUeXBlKCJ3aWRlSW50Iik7CisgICAgdi0+QmlnbnVtVHlwZSA9IFRjbF9HZXRPYmpUeXBlKCJiaWdudW0iKTsKICAgICB2LT5MaXN0VHlwZSA9IFRjbF9HZXRPYmpUeXBlKCJsaXN0Iik7CiAgICAgdi0+UHJvY0JvZHlUeXBlID0gVGNsX0dldE9ialR5cGUoInByb2Nib2R5Iik7CiAgICAgdi0+U3RyaW5nVHlwZSA9IFRjbF9HZXRPYmpUeXBlKCJzdHJpbmciKTsKQEAgLTY4NSw3ICs2MTAsNyBAQAogICAgICAgICBUY2xfU2V0VmFyKHYtPmludGVycCwgInRjbF9pbnRlcmFjdGl2ZSIsICIwIiwgVENMX0dMT0JBTF9PTkxZKTsKIAogICAgIC8qIFRoaXMgaXMgdXNlZCB0byBnZXQgdGhlIGFwcGxpY2F0aW9uIGNsYXNzIGZvciBUayA0LjEgYW5kIHVwICovCi0gICAgYXJndjAgPSAoY2hhciopY2thbGxvYyhzdHJsZW4oY2xhc3NOYW1lKSArIDEpOworICAgIGFyZ3YwID0gKGNoYXIqKWF0dGVtcHRja2FsbG9jKHN0cmxlbihjbGFzc05hbWUpICsgMSk7CiAgICAgaWYgKCFhcmd2MCkgewogICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICBQeV9ERUNSRUYodik7CkBAIC03MTksNyArNjQ0LDcgQEAKICAgICAgICAgaWYgKHVzZSkKICAgICAgICAgICAgIGxlbiArPSBzdHJsZW4odXNlKSArIHNpemVvZiAiLXVzZSAiOwogCi0gICAgICAgIGFyZ3MgPSAoY2hhciopY2thbGxvYyhsZW4pOworICAgICAgICBhcmdzID0gKGNoYXIqKWF0dGVtcHRja2FsbG9jKGxlbik7CiAgICAgICAgIGlmICghYXJncykgewogICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKQEAgLTc4OCwxNiArNzEzLDE3IEBACiAgICAgUHlPYmplY3QgKnN0cmluZzsgLyogVGhpcyBjYW5ub3QgY2F1c2UgY3ljbGVzLiAqLwogfSBQeVRjbE9iamVjdDsKIAotc3RhdGljIFB5VHlwZU9iamVjdCBQeVRjbE9iamVjdF9UeXBlOwotI2RlZmluZSBQeVRjbE9iamVjdF9DaGVjayh2KSAgICAoKHYpLT5vYl90eXBlID09ICZQeVRjbE9iamVjdF9UeXBlKQorc3RhdGljIFB5T2JqZWN0ICpQeVRjbE9iamVjdF9UeXBlOworI2RlZmluZSBQeVRjbE9iamVjdF9DaGVjayh2KSAoKHYpLT5vYl90eXBlID09IChQeVR5cGVPYmplY3QgKikgUHlUY2xPYmplY3RfVHlwZSkKIAogc3RhdGljIFB5T2JqZWN0ICoKIG5ld1B5VGNsT2JqZWN0KFRjbF9PYmogKmFyZykKIHsKICAgICBQeVRjbE9iamVjdCAqc2VsZjsKLSAgICBzZWxmID0gUHlPYmplY3RfTmV3KFB5VGNsT2JqZWN0LCAmUHlUY2xPYmplY3RfVHlwZSk7CisgICAgc2VsZiA9IFB5T2JqZWN0X05ldyhQeVRjbE9iamVjdCwgKFB5VHlwZU9iamVjdCAqKSBQeVRjbE9iamVjdF9UeXBlKTsKICAgICBpZiAoc2VsZiA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBQeV9JTkNSRUYoUHlUY2xPYmplY3RfVHlwZSk7CiAgICAgVGNsX0luY3JSZWZDb3VudChhcmcpOwogICAgIHNlbGYtPnZhbHVlID0gYXJnOwogICAgIHNlbGYtPnN0cmluZyA9IE5VTEw7CkBAIC04MDcsOSArNzMzLDExIEBACiBzdGF0aWMgdm9pZAogUHlUY2xPYmplY3RfZGVhbGxvYyhQeVRjbE9iamVjdCAqc2VsZikKIHsKKyAgICBQeU9iamVjdCAqdHAgPSAoUHlPYmplY3QgKikgUHlfVFlQRShzZWxmKTsKICAgICBUY2xfRGVjclJlZkNvdW50KHNlbGYtPnZhbHVlKTsKICAgICBQeV9YREVDUkVGKHNlbGYtPnN0cmluZyk7CiAgICAgUHlPYmplY3RfRGVsKHNlbGYpOworICAgIFB5X0RFQ1JFRih0cCk7CiB9CiAKIHN0YXRpYyBjaGFyKgpAQCAtODQ4LDggKzc3NiwxMyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIFB5VGNsT2JqZWN0X3JlcHIoUHlUY2xPYmplY3QgKnNlbGYpCiB7Ci0gICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tRm9ybWF0KCI8JXMgb2JqZWN0IGF0ICVwPiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYtPnZhbHVlLT50eXBlUHRyLT5uYW1lLCBzZWxmLT52YWx1ZSk7CisgICAgUHlPYmplY3QgKnJlcHIsICpzdHIgPSBQeVRjbE9iamVjdF9zdHIoc2VsZiwgTlVMTCk7CisgICAgaWYgKHN0ciA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICByZXByID0gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIjwlcyBvYmplY3Q6ICVSPiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYtPnZhbHVlLT50eXBlUHRyLT5uYW1lLCBzdHIpOworICAgIFB5X0RFQ1JFRihzdHIpOworICAgIHJldHVybiByZXByOwogfQogCiAjZGVmaW5lIFRFU1RfQ09ORChjb25kKSAoKGNvbmQpID8gUHlfVHJ1ZSA6IFB5X0ZhbHNlKQpAQCAtOTIzLDgxICs4NTYsMTMyIEBACiAgICAgezB9LAogfTsKIAotc3RhdGljIFB5VHlwZU9iamVjdCBQeVRjbE9iamVjdF9UeXBlID0gewotICAgIFB5VmFyT2JqZWN0X0hFQURfSU5JVChOVUxMLCAwKQotICAgICJfdGtpbnRlci5UY2xfT2JqIiwgICAgICAgICAgICAgICAgIC8qdHBfbmFtZSovCi0gICAgc2l6ZW9mKFB5VGNsT2JqZWN0KSwgICAgICAgICAgICAgICAgLyp0cF9iYXNpY3NpemUqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaXRlbXNpemUqLwotICAgIC8qIG1ldGhvZHMgKi8KLSAgICAoZGVzdHJ1Y3RvcilQeVRjbE9iamVjdF9kZWFsbG9jLC8qdHBfZGVhbGxvYyovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9wcmludCovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9nZXRhdHRyKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHIqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfcmVzZXJ2ZWQqLwotICAgIChyZXByZnVuYylQeVRjbE9iamVjdF9yZXByLCAgICAgICAgIC8qdHBfcmVwciovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19udW1iZXIqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfc2VxdWVuY2UqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfbWFwcGluZyovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9oYXNoKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2NhbGwqLwotICAgIChyZXByZnVuYylQeVRjbE9iamVjdF9zdHIsICAgICAgICAgIC8qdHBfc3RyKi8KLSAgICBQeU9iamVjdF9HZW5lcmljR2V0QXR0ciwgICAgICAgICAgICAvKnRwX2dldGF0dHJvKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHJvKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX2J1ZmZlciovCi0gICAgUHlfVFBGTEFHU19ERUZBVUxULCAgICAgICAgICAgICAgICAgLyp0cF9mbGFncyovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9kb2MqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfdHJhdmVyc2UqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfY2xlYXIqLwotICAgIFB5VGNsT2JqZWN0X3JpY2hjb21wYXJlLCAgICAgICAgICAgIC8qdHBfcmljaGNvbXBhcmUqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfd2Vha2xpc3RvZmZzZXQqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaXRlciovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9pdGVybmV4dCovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9tZXRob2RzKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX21lbWJlcnMqLwotICAgIFB5VGNsT2JqZWN0X2dldHNldGxpc3QsICAgICAgICAgICAgIC8qdHBfZ2V0c2V0Ki8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2Jhc2UqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZGljdCovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9kZXNjcl9nZXQqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZGVzY3Jfc2V0Ki8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2RpY3RvZmZzZXQqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaW5pdCovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hbGxvYyovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9uZXcqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZnJlZSovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9pc19nYyovCitzdGF0aWMgUHlUeXBlX1Nsb3QgUHlUY2xPYmplY3RfVHlwZV9zbG90c1tdID0geworICAgIHtQeV90cF9kZWFsbG9jLCAoZGVzdHJ1Y3RvcilQeVRjbE9iamVjdF9kZWFsbG9jfSwKKyAgICB7UHlfdHBfcmVwciwgKHJlcHJmdW5jKVB5VGNsT2JqZWN0X3JlcHJ9LAorICAgIHtQeV90cF9zdHIsIChyZXByZnVuYylQeVRjbE9iamVjdF9zdHJ9LAorICAgIHtQeV90cF9nZXRhdHRybywgUHlPYmplY3RfR2VuZXJpY0dldEF0dHJ9LAorICAgIHtQeV90cF9yaWNoY29tcGFyZSwgUHlUY2xPYmplY3RfcmljaGNvbXBhcmV9LAorICAgIHtQeV90cF9nZXRzZXQsIFB5VGNsT2JqZWN0X2dldHNldGxpc3R9LAorICAgIHswLCAwfQogfTsKIAorc3RhdGljIFB5VHlwZV9TcGVjIFB5VGNsT2JqZWN0X1R5cGVfc3BlYyA9IHsKKyAgICAiX3RraW50ZXIuVGNsX09iaiIsCisgICAgc2l6ZW9mKFB5VGNsT2JqZWN0KSwKKyAgICAwLAorICAgIFB5X1RQRkxBR1NfREVGQVVMVCwKKyAgICBQeVRjbE9iamVjdF9UeXBlX3Nsb3RzLAorfTsKKworCisjaWYgUFlfU0laRV9NQVggPiBJTlRfTUFYCisjZGVmaW5lIENIRUNLX1NUUklOR19MRU5HVEgocykgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChzICE9IE5VTEwgJiYgc3RybGVuKHMpID49IElOVF9NQVgpIHsgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwgInN0cmluZyBpcyB0b28gbG9uZyIpOyBcCisgICAgICAgICAgICByZXR1cm4gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0gfSB3aGlsZSgwKQorI2Vsc2UKKyNkZWZpbmUgQ0hFQ0tfU1RSSU5HX0xFTkdUSChzKQorI2VuZGlmCisKKyNpZmRlZiBIQVZFX0xJQlRPTU1BTVRICitzdGF0aWMgVGNsX09iaioKK2FzQmlnbnVtT2JqKFB5T2JqZWN0ICp2YWx1ZSkKK3sKKyAgICBUY2xfT2JqICpyZXN1bHQ7CisgICAgaW50IG5lZzsKKyAgICBQeU9iamVjdCAqaGV4c3RyOworICAgIGNoYXIgKmhleGNoYXJzOworICAgIG1wX2ludCBiaWdWYWx1ZTsKKworICAgIG5lZyA9IFB5X1NJWkUodmFsdWUpIDwgMDsKKyAgICBoZXhzdHIgPSBfUHlMb25nX0Zvcm1hdCh2YWx1ZSwgMTYpOworICAgIGlmIChoZXhzdHIgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaGV4Y2hhcnMgPSBQeVVuaWNvZGVfQXNVVEY4KGhleHN0cik7CisgICAgaWYgKGhleGNoYXJzID09IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKGhleHN0cik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBoZXhjaGFycyArPSBuZWcgKyAyOyAvKiBza2lwIHNpZ24gYW5kICIweCIgKi8KKyAgICBtcF9pbml0KCZiaWdWYWx1ZSk7CisgICAgaWYgKG1wX3JlYWRfcmFkaXgoJmJpZ1ZhbHVlLCBoZXhjaGFycywgMTYpICE9IE1QX09LQVkpIHsKKyAgICAgICAgbXBfY2xlYXIoJmJpZ1ZhbHVlKTsKKyAgICAgICAgUHlfREVDUkVGKGhleHN0cik7CisgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBQeV9ERUNSRUYoaGV4c3RyKTsKKyAgICBiaWdWYWx1ZS5zaWduID0gbmVnID8gTVBfTkVHIDogTVBfWlBPUzsKKyAgICByZXN1bHQgPSBUY2xfTmV3QmlnbnVtT2JqKCZiaWdWYWx1ZSk7CisgICAgbXBfY2xlYXIoJmJpZ1ZhbHVlKTsKKyAgICBpZiAocmVzdWx0ID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisjZW5kaWYKKwogc3RhdGljIFRjbF9PYmoqCiBBc09iaihQeU9iamVjdCAqdmFsdWUpCiB7CiAgICAgVGNsX09iaiAqcmVzdWx0OwotICAgIGxvbmcgbG9uZ1ZhbDsKLSAgICBpbnQgb3ZlcmZsb3c7CiAKICAgICBpZiAoUHlCeXRlc19DaGVjayh2YWx1ZSkpCi0gICAgICAgIHJldHVybiBUY2xfTmV3U3RyaW5nT2JqKFB5Qnl0ZXNfQVNfU1RSSU5HKHZhbHVlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlCeXRlc19HRVRfU0laRSh2YWx1ZSkpOwotICAgIGVsc2UgaWYgKFB5Qm9vbF9DaGVjayh2YWx1ZSkpCisgICAgICAgIHJldHVybiBUY2xfTmV3Qnl0ZUFycmF5T2JqKCh1bnNpZ25lZCBjaGFyICopUHlCeXRlc19BU19TVFJJTkcodmFsdWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUJ5dGVzX0dFVF9TSVpFKHZhbHVlKSk7CisKKyAgICBpZiAoUHlCb29sX0NoZWNrKHZhbHVlKSkKICAgICAgICAgcmV0dXJuIFRjbF9OZXdCb29sZWFuT2JqKFB5T2JqZWN0X0lzVHJ1ZSh2YWx1ZSkpOwotICAgIGVsc2UgaWYgKFB5TG9uZ19DaGVja0V4YWN0KHZhbHVlKSAmJgotICAgICAgICAgICAgICgobG9uZ1ZhbCA9IFB5TG9uZ19Bc0xvbmdBbmRPdmVyZmxvdyh2YWx1ZSwgJm92ZXJmbG93KSksCi0gICAgICAgICAgICAgICFvdmVyZmxvdykpIHsKKworICAgIGlmIChQeUxvbmdfQ2hlY2tFeGFjdCh2YWx1ZSkpIHsKKyAgICAgICAgaW50IG92ZXJmbG93OworICAgICAgICBsb25nIGxvbmdWYWx1ZTsKKyNpZmRlZiBUQ0xfV0lERV9JTlRfVFlQRQorICAgICAgICBUY2xfV2lkZUludCB3aWRlVmFsdWU7CisjZW5kaWYKKyAgICAgICAgbG9uZ1ZhbHVlID0gUHlMb25nX0FzTG9uZ0FuZE92ZXJmbG93KHZhbHVlLCAmb3ZlcmZsb3cpOworICAgICAgICBpZiAoIW92ZXJmbG93KSB7CisgICAgICAgICAgICByZXR1cm4gVGNsX05ld0xvbmdPYmoobG9uZ1ZhbHVlKTsKKyAgICAgICAgfQogICAgICAgICAvKiBJZiB0aGVyZSBpcyBhbiBvdmVyZmxvdyBpbiB0aGUgbG9uZyBjb252ZXJzaW9uLAorICAgICAgICAgICBmYWxsIHRocm91Z2ggdG8gd2lkZUludCBoYW5kbGluZy4gKi8KKyNpZmRlZiBUQ0xfV0lERV9JTlRfVFlQRQorICAgICAgICBpZiAoX1B5TG9uZ19Bc0J5dGVBcnJheSgoUHlMb25nT2JqZWN0ICopdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyICopKHZvaWQgKikmd2lkZVZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yod2lkZVZhbHVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFlfTElUVExFX0VORElBTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2lnbmVkICovIDEpID09IDApIHsKKyAgICAgICAgICAgIHJldHVybiBUY2xfTmV3V2lkZUludE9iaih3aWRlVmFsdWUpOworICAgICAgICB9CisgICAgICAgIFB5RXJyX0NsZWFyKCk7CisjZW5kaWYKKyAgICAgICAgLyogSWYgdGhlcmUgaXMgYW4gb3ZlcmZsb3cgaW4gdGhlIHdpZGVJbnQgY29udmVyc2lvbiwKKyAgICAgICAgICAgZmFsbCB0aHJvdWdoIHRvIGJpZ251bSBoYW5kbGluZy4gKi8KKyNpZmRlZiBIQVZFX0xJQlRPTU1BTVRICisgICAgICAgIHJldHVybiBhc0JpZ251bU9iaih2YWx1ZSk7CisjZW5kaWYKKyAgICAgICAgLyogSWYgdGhlcmUgaXMgbm8gd2lkZUludCBvciBiaWdudW0gc3VwcG9ydCwKICAgICAgICAgICAgZmFsbCB0aHJvdWdoIHRvIGRlZmF1bHQgb2JqZWN0IGhhbmRsaW5nLiAqLwotICAgICAgICByZXR1cm4gVGNsX05ld0xvbmdPYmoobG9uZ1ZhbCk7CiAgICAgfQotICAgIGVsc2UgaWYgKFB5RmxvYXRfQ2hlY2sodmFsdWUpKQorCisgICAgaWYgKFB5RmxvYXRfQ2hlY2sodmFsdWUpKQogICAgICAgICByZXR1cm4gVGNsX05ld0RvdWJsZU9iaihQeUZsb2F0X0FTX0RPVUJMRSh2YWx1ZSkpOwotICAgIGVsc2UgaWYgKFB5VHVwbGVfQ2hlY2sodmFsdWUpKSB7CisKKyAgICBpZiAoUHlUdXBsZV9DaGVjayh2YWx1ZSkpIHsKICAgICAgICAgVGNsX09iaiAqKmFyZ3Y7CiAgICAgICAgIFB5X3NzaXplX3Qgc2l6ZSwgaTsKIAogICAgICAgICBzaXplID0gUHlUdXBsZV9TaXplKHZhbHVlKTsKKyAgICAgICAgaWYgKHNpemUgPT0gMCkKKyAgICAgICAgICAgIHJldHVybiBUY2xfTmV3TGlzdE9iaigwLCBOVUxMKTsKICAgICAgICAgaWYgKCFDSEVDS19TSVpFKHNpemUsIHNpemVvZihUY2xfT2JqICopKSkgewogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsICJ0dXBsZSBpcyB0b28gbG9uZyIpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KLSAgICAgICAgYXJndiA9IChUY2xfT2JqICoqKSBja2FsbG9jKCgoc2l6ZV90KXNpemUpICogc2l6ZW9mKFRjbF9PYmogKikpOworICAgICAgICBhcmd2ID0gKFRjbF9PYmogKiopIGF0dGVtcHRja2FsbG9jKCgoc2l6ZV90KXNpemUpICogc2l6ZW9mKFRjbF9PYmogKikpOwogICAgICAgICBpZighYXJndikKICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykKQEAgLTEwMDYsNyArOTkwLDggQEAKICAgICAgICAgY2tmcmVlKEZSRUVDQVNUIGFyZ3YpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KLSAgICBlbHNlIGlmIChQeVVuaWNvZGVfQ2hlY2sodmFsdWUpKSB7CisKKyAgICBpZiAoUHlVbmljb2RlX0NoZWNrKHZhbHVlKSkgewogICAgICAgICB2b2lkICppbmJ1ZjsKICAgICAgICAgUHlfc3NpemVfdCBzaXplOwogICAgICAgICBpbnQga2luZDsKQEAgLTEwMTksNiArMTAwNCw4IEBACiAKICAgICAgICAgaW5idWYgPSBQeVVuaWNvZGVfREFUQSh2YWx1ZSk7CiAgICAgICAgIHNpemUgPSBQeVVuaWNvZGVfR0VUX0xFTkdUSCh2YWx1ZSk7CisgICAgICAgIGlmIChzaXplID09IDApCisgICAgICAgICAgICByZXR1cm4gVGNsX05ld1VuaWNvZGVPYmooKGNvbnN0IHZvaWQgKikiIiwgMCk7CiAgICAgICAgIGlmICghQ0hFQ0tfU0laRShzaXplLCBzaXplb2YoVGNsX1VuaUNoYXIpKSkgewogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsICJzdHJpbmcgaXMgdG9vIGxvbmciKTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMTAyNyw3ICsxMDE0LDcgQEAKICAgICAgICAgaWYgKGtpbmQgPT0gc2l6ZW9mKFRjbF9VbmlDaGFyKSkKICAgICAgICAgICAgIHJldHVybiBUY2xfTmV3VW5pY29kZU9iaihpbmJ1Ziwgc2l6ZSk7CiAgICAgICAgIGFsbG9jc2l6ZSA9ICgoc2l6ZV90KXNpemUpICogc2l6ZW9mKFRjbF9VbmlDaGFyKTsKLSAgICAgICAgb3V0YnVmID0gKFRjbF9VbmlDaGFyKilja2FsbG9jKGFsbG9jc2l6ZSk7CisgICAgICAgIG91dGJ1ZiA9IChUY2xfVW5pQ2hhciopYXR0ZW1wdGNrYWxsb2MoYWxsb2NzaXplKTsKICAgICAgICAgLyogRWxzZSBvdmVyZmxvdyBvY2N1cnJlZCwgYW5kIHdlIHRha2UgdGhlIG5leHQgZXhpdCAqLwogICAgICAgICBpZiAoIW91dGJ1ZikgewogICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKQEAgLTEwNTQsMTIgKzEwNDEsMTQgQEAKICAgICAgICAgY2tmcmVlKEZSRUVDQVNUIG91dGJ1Zik7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQotICAgIGVsc2UgaWYoUHlUY2xPYmplY3RfQ2hlY2sodmFsdWUpKSB7CisKKyAgICBpZiAoUHlUY2xPYmplY3RfQ2hlY2sodmFsdWUpKSB7CiAgICAgICAgIFRjbF9PYmogKnYgPSAoKFB5VGNsT2JqZWN0Kil2YWx1ZSktPnZhbHVlOwogICAgICAgICBUY2xfSW5jclJlZkNvdW50KHYpOwogICAgICAgICByZXR1cm4gdjsKICAgICB9Ci0gICAgZWxzZSB7CisKKyAgICB7CiAgICAgICAgIFB5T2JqZWN0ICp2ID0gUHlPYmplY3RfU3RyKHZhbHVlKTsKICAgICAgICAgaWYgKCF2KQogICAgICAgICAgICAgcmV0dXJuIDA7CkBAIC0xMDY5LDIwICsxMDU4LDg1IEBACiAgICAgfQogfQogCitzdGF0aWMgUHlPYmplY3QgKgorZnJvbUJvb2xlYW4oUHlPYmplY3QqIHRrYXBwLCBUY2xfT2JqICp2YWx1ZSkKK3sKKyAgICBpbnQgYm9vbFZhbHVlOworICAgIGlmIChUY2xfR2V0Qm9vbGVhbkZyb21PYmooVGthcHBfSW50ZXJwKHRrYXBwKSwgdmFsdWUsICZib29sVmFsdWUpID09IFRDTF9FUlJPUikKKyAgICAgICAgcmV0dXJuIFRraW50ZXJfRXJyb3IodGthcHApOworICAgIHJldHVybiBQeUJvb2xfRnJvbUxvbmcoYm9vbFZhbHVlKTsKK30KKworI2lmZGVmIFRDTF9XSURFX0lOVF9UWVBFCitzdGF0aWMgUHlPYmplY3QqCitmcm9tV2lkZUludE9iaihQeU9iamVjdCogdGthcHAsIFRjbF9PYmogKnZhbHVlKQoreworICAgICAgICBUY2xfV2lkZUludCB3aWRlVmFsdWU7CisgICAgICAgIGlmIChUY2xfR2V0V2lkZUludEZyb21PYmooVGthcHBfSW50ZXJwKHRrYXBwKSwgdmFsdWUsICZ3aWRlVmFsdWUpID09IFRDTF9PSykgeworI2lmZGVmIEhBVkVfTE9OR19MT05HCisgICAgICAgICAgICBpZiAoc2l6ZW9mKHdpZGVWYWx1ZSkgPD0gU0laRU9GX0xPTkdfTE9ORykKKyAgICAgICAgICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nTG9uZyh3aWRlVmFsdWUpOworI2VuZGlmCisgICAgICAgICAgICByZXR1cm4gX1B5TG9uZ19Gcm9tQnl0ZUFycmF5KCh1bnNpZ25lZCBjaGFyICopKHZvaWQgKikmd2lkZVZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yod2lkZVZhbHVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFlfTElUVExFX0VORElBTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2lnbmVkICovIDEpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBOVUxMOworfQorI2VuZGlmCisKKyNpZmRlZiBIQVZFX0xJQlRPTU1BTVRICitzdGF0aWMgUHlPYmplY3QqCitmcm9tQmlnbnVtT2JqKFB5T2JqZWN0KiB0a2FwcCwgVGNsX09iaiAqdmFsdWUpCit7CisgICAgbXBfaW50IGJpZ1ZhbHVlOworICAgIHVuc2lnbmVkIGxvbmcgbnVtQnl0ZXM7CisgICAgdW5zaWduZWQgY2hhciAqYnl0ZXM7CisgICAgUHlPYmplY3QgKnJlczsKKworICAgIGlmIChUY2xfR2V0QmlnbnVtRnJvbU9iaihUa2FwcF9JbnRlcnAodGthcHApLCB2YWx1ZSwgJmJpZ1ZhbHVlKSAhPSBUQ0xfT0spCisgICAgICAgIHJldHVybiBUa2ludGVyX0Vycm9yKHRrYXBwKTsKKyAgICBudW1CeXRlcyA9IG1wX3Vuc2lnbmVkX2Jpbl9zaXplKCZiaWdWYWx1ZSk7CisgICAgYnl0ZXMgPSBQeU1lbV9NYWxsb2MobnVtQnl0ZXMpOworICAgIGlmIChieXRlcyA9PSBOVUxMKSB7CisgICAgICAgIG1wX2NsZWFyKCZiaWdWYWx1ZSk7CisgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOworICAgIH0KKyAgICBpZiAobXBfdG9fdW5zaWduZWRfYmluX24oJmJpZ1ZhbHVlLCBieXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm51bUJ5dGVzKSAhPSBNUF9PS0FZKSB7CisgICAgICAgIG1wX2NsZWFyKCZiaWdWYWx1ZSk7CisgICAgICAgIFB5TWVtX0ZyZWUoYnl0ZXMpOworICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKKyAgICB9CisgICAgcmVzID0gX1B5TG9uZ19Gcm9tQnl0ZUFycmF5KGJ5dGVzLCBudW1CeXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYmlnLWVuZGlhbiAqLyAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB1bnNpZ25lZCAqLyAwKTsKKyAgICBQeU1lbV9GcmVlKGJ5dGVzKTsKKyAgICBpZiAocmVzICE9IE5VTEwgJiYgYmlnVmFsdWUuc2lnbiA9PSBNUF9ORUcpIHsKKyAgICAgICAgUHlPYmplY3QgKnJlczIgPSBQeU51bWJlcl9OZWdhdGl2ZShyZXMpOworICAgICAgICBQeV9ERUNSRUYocmVzKTsKKyAgICAgICAgcmVzID0gcmVzMjsKKyAgICB9CisgICAgbXBfY2xlYXIoJmJpZ1ZhbHVlKTsKKyAgICByZXR1cm4gcmVzOworfQorI2VuZGlmCisKIHN0YXRpYyBQeU9iamVjdCoKIEZyb21PYmooUHlPYmplY3QqIHRrYXBwLCBUY2xfT2JqICp2YWx1ZSkKIHsKICAgICBQeU9iamVjdCAqcmVzdWx0ID0gTlVMTDsKICAgICBUa2FwcE9iamVjdCAqYXBwID0gKFRrYXBwT2JqZWN0Kil0a2FwcDsKKyAgICBUY2xfSW50ZXJwICppbnRlcnAgPSBUa2FwcF9JbnRlcnAodGthcHApOwogCiAgICAgaWYgKHZhbHVlLT50eXBlUHRyID09IE5VTEwpIHsKICAgICAgICAgcmV0dXJuIHVuaWNvZGVGcm9tVGNsU3RyaW5nQW5kU2l6ZSh2YWx1ZS0+Ynl0ZXMsIHZhbHVlLT5sZW5ndGgpOwogICAgIH0KIAotICAgIGlmICh2YWx1ZS0+dHlwZVB0ciA9PSBhcHAtPkJvb2xlYW5UeXBlKSB7Ci0gICAgICAgIHJlc3VsdCA9IHZhbHVlLT5pbnRlcm5hbFJlcC5sb25nVmFsdWUgPyBQeV9UcnVlIDogUHlfRmFsc2U7Ci0gICAgICAgIFB5X0lOQ1JFRihyZXN1bHQpOwotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIGlmICh2YWx1ZS0+dHlwZVB0ciA9PSBhcHAtPkJvb2xlYW5UeXBlIHx8CisgICAgICAgIHZhbHVlLT50eXBlUHRyID09IGFwcC0+T2xkQm9vbGVhblR5cGUpIHsKKyAgICAgICAgcmV0dXJuIGZyb21Cb29sZWFuKHRrYXBwLCB2YWx1ZSk7CiAgICAgfQogCiAgICAgaWYgKHZhbHVlLT50eXBlUHRyID09IGFwcC0+Qnl0ZUFycmF5VHlwZSkgewpAQCAtMTA5NiwyNCArMTE1MCw0NyBAQAogICAgIH0KIAogICAgIGlmICh2YWx1ZS0+dHlwZVB0ciA9PSBhcHAtPkludFR5cGUpIHsKLSAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZyh2YWx1ZS0+aW50ZXJuYWxSZXAubG9uZ1ZhbHVlKTsKKyAgICAgICAgbG9uZyBsb25nVmFsdWU7CisgICAgICAgIGlmIChUY2xfR2V0TG9uZ0Zyb21PYmooaW50ZXJwLCB2YWx1ZSwgJmxvbmdWYWx1ZSkgPT0gVENMX09LKQorICAgICAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZyhsb25nVmFsdWUpOworICAgICAgICAvKiBJZiB0aGVyZSBpcyBhbiBlcnJvciBpbiB0aGUgbG9uZyBjb252ZXJzaW9uLAorICAgICAgICAgICBmYWxsIHRocm91Z2ggdG8gd2lkZUludCBoYW5kbGluZy4gKi8KICAgICB9CiAKKyNpZmRlZiBUQ0xfV0lERV9JTlRfVFlQRQorICAgIGlmICh2YWx1ZS0+dHlwZVB0ciA9PSBhcHAtPkludFR5cGUgfHwKKyAgICAgICAgdmFsdWUtPnR5cGVQdHIgPT0gYXBwLT5XaWRlSW50VHlwZSkgeworICAgICAgICByZXN1bHQgPSBmcm9tV2lkZUludE9iaih0a2FwcCwgdmFsdWUpOworICAgICAgICBpZiAocmVzdWx0ICE9IE5VTEwgfHwgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIFRjbF9SZXNldFJlc3VsdChpbnRlcnApOworICAgICAgICAvKiBJZiB0aGVyZSBpcyBhbiBlcnJvciBpbiB0aGUgd2lkZUludCBjb252ZXJzaW9uLAorICAgICAgICAgICBmYWxsIHRocm91Z2ggdG8gYmlnbnVtIGhhbmRsaW5nLiAqLworICAgIH0KKyNlbmRpZgorCisjaWZkZWYgSEFWRV9MSUJUT01NQU1USAorICAgIGlmICh2YWx1ZS0+dHlwZVB0ciA9PSBhcHAtPkludFR5cGUgfHwKKyAgICAgICAgdmFsdWUtPnR5cGVQdHIgPT0gYXBwLT5XaWRlSW50VHlwZSB8fAorICAgICAgICB2YWx1ZS0+dHlwZVB0ciA9PSBhcHAtPkJpZ251bVR5cGUpIHsKKyAgICAgICAgcmV0dXJuIGZyb21CaWdudW1PYmoodGthcHAsIHZhbHVlKTsKKyAgICB9CisjZW5kaWYKKwogICAgIGlmICh2YWx1ZS0+dHlwZVB0ciA9PSBhcHAtPkxpc3RUeXBlKSB7CiAgICAgICAgIGludCBzaXplOwogICAgICAgICBpbnQgaSwgc3RhdHVzOwogICAgICAgICBQeU9iamVjdCAqZWxlbTsKICAgICAgICAgVGNsX09iaiAqdGNsX2VsZW07CiAKLSAgICAgICAgc3RhdHVzID0gVGNsX0xpc3RPYmpMZW5ndGgoVGthcHBfSW50ZXJwKHRrYXBwKSwgdmFsdWUsICZzaXplKTsKKyAgICAgICAgc3RhdHVzID0gVGNsX0xpc3RPYmpMZW5ndGgoaW50ZXJwLCB2YWx1ZSwgJnNpemUpOwogICAgICAgICBpZiAoc3RhdHVzID09IFRDTF9FUlJPUikKICAgICAgICAgICAgIHJldHVybiBUa2ludGVyX0Vycm9yKHRrYXBwKTsKICAgICAgICAgcmVzdWx0ID0gUHlUdXBsZV9OZXcoc2l6ZSk7CiAgICAgICAgIGlmICghcmVzdWx0KQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLSAgICAgICAgICAgIHN0YXR1cyA9IFRjbF9MaXN0T2JqSW5kZXgoVGthcHBfSW50ZXJwKHRrYXBwKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUsIGksICZ0Y2xfZWxlbSk7CisgICAgICAgICAgICBzdGF0dXMgPSBUY2xfTGlzdE9iakluZGV4KGludGVycCwgdmFsdWUsIGksICZ0Y2xfZWxlbSk7CiAgICAgICAgICAgICBpZiAoc3RhdHVzID09IFRDTF9FUlJPUikgewogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOwogICAgICAgICAgICAgICAgIHJldHVybiBUa2ludGVyX0Vycm9yKHRrYXBwKTsKQEAgLTExMzgsNiArMTIxNSwyNCBAQAogICAgICAgICAgICAgVGNsX0dldENoYXJMZW5ndGgodmFsdWUpKTsKICAgICB9CiAKKyNpZiBUS19IRVhfVkVSU0lPTiA+PSAweDA4MDUwMDAwCisgICAgaWYgKGFwcC0+Qm9vbGVhblR5cGUgPT0gTlVMTCAmJgorICAgICAgICBzdHJjbXAodmFsdWUtPnR5cGVQdHItPm5hbWUsICJib29sZWFuU3RyaW5nIikgPT0gMCkgeworICAgICAgICAvKiBib29sZWFuU3RyaW5nIHR5cGUgaXMgbm90IHJlZ2lzdGVyZWQgaW4gVGNsICovCisgICAgICAgIGFwcC0+Qm9vbGVhblR5cGUgPSB2YWx1ZS0+dHlwZVB0cjsKKyAgICAgICAgcmV0dXJuIGZyb21Cb29sZWFuKHRrYXBwLCB2YWx1ZSk7CisgICAgfQorI2VuZGlmCisKKyNpZmRlZiBIQVZFX0xJQlRPTU1BTVRICisgICAgaWYgKGFwcC0+QmlnbnVtVHlwZSA9PSBOVUxMICYmCisgICAgICAgIHN0cmNtcCh2YWx1ZS0+dHlwZVB0ci0+bmFtZSwgImJpZ251bSIpID09IDApIHsKKyAgICAgICAgLyogYmlnbnVtIHR5cGUgaXMgbm90IHJlZ2lzdGVyZWQgaW4gVGNsICovCisgICAgICAgIGFwcC0+QmlnbnVtVHlwZSA9IHZhbHVlLT50eXBlUHRyOworICAgICAgICByZXR1cm4gZnJvbUJpZ251bU9iaih0a2FwcCwgdmFsdWUpOworICAgIH0KKyNlbmRpZgorCiAgICAgcmV0dXJuIG5ld1B5VGNsT2JqZWN0KHZhbHVlKTsKIH0KIApAQCAtMTE5Miw3ICsxMjg3LDcgQEAKICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwgInR1cGxlIGlzIHRvbyBsb25nIik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBvYmp2ID0gKFRjbF9PYmogKiopY2thbGxvYygoKHNpemVfdClvYmpjKSAqIHNpemVvZihUY2xfT2JqICopKTsKKyAgICAgICAgICAgIG9ianYgPSAoVGNsX09iaiAqKilhdHRlbXB0Y2thbGxvYygoKHNpemVfdClvYmpjKSAqIHNpemVvZihUY2xfT2JqICopKTsKICAgICAgICAgICAgIGlmIChvYmp2ID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICAgICAgICAgIG9iamMgPSAwOwpAQCAtMTMyOCw3ICsxNDIzLDExIEBACiAgICAgICAgIFB5T2JqZWN0ICpleGNfdHlwZSwgKmV4Y192YWx1ZSwgKmV4Y190YjsKICAgICAgICAgaWYgKCFXYWl0Rm9yTWFpbmxvb3Aoc2VsZikpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgZXYgPSAoVGthcHBfQ2FsbEV2ZW50Kilja2FsbG9jKHNpemVvZihUa2FwcF9DYWxsRXZlbnQpKTsKKyAgICAgICAgZXYgPSAoVGthcHBfQ2FsbEV2ZW50KilhdHRlbXB0Y2thbGxvYyhzaXplb2YoVGthcHBfQ2FsbEV2ZW50KSk7CisgICAgICAgIGlmIChldiA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KICAgICAgICAgZXYtPmV2LnByb2MgPSAoVGNsX0V2ZW50UHJvYyopVGthcHBfQ2FsbFByb2M7CiAgICAgICAgIGV2LT5zZWxmID0gc2VsZjsKICAgICAgICAgZXYtPmFyZ3MgPSBhcmdzOwpAQCAtMTM3Niw0MiArMTQ3NSw2IEBACiAKIAogc3RhdGljIFB5T2JqZWN0ICoKLVRrYXBwX0dsb2JhbENhbGwoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQotewotICAgIC8qIENvdWxkIGRvIHRoZSBzYW1lIGhlcmUgYXMgZm9yIFRrYXBwX0NhbGwoKSwgYnV0IHRoaXMgaXMgbm90IHVzZWQKLSAgICAgICBtdWNoLCBzbyBJIGNhbid0IGJlIGJvdGhlcmVkLiAgVW5mb3J0dW5hdGVseSBUY2wgZG9lc24ndCBleHBvcnQgYQotICAgICAgIHdheSBmb3IgdGhlIHVzZXIgdG8gZG8gd2hhdCBhbGwgaXRzIEdsb2JhbCogdmFyaWFudHMgZG8gKHNhdmUgYW5kCi0gICAgICAgcmVzZXQgdGhlIHNjb3BlIHBvaW50ZXIsIGNhbGwgdGhlIGxvY2FsIHZlcnNpb24sIHJlc3RvcmUgdGhlIHNhdmVkCi0gICAgICAgc2NvcGUgcG9pbnRlcikuICovCi0KLSAgICBjaGFyICpjbWQ7Ci0gICAgUHlPYmplY3QgKnJlcyA9IE5VTEw7Ci0KLSAgICBpZiAoUHlFcnJfV2FybkV4KFB5RXhjX0RlcHJlY2F0aW9uV2FybmluZywKLSAgICAgICAgICAgICAgICAgICAgICJnbG9iYWxjYWxsIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiAzLjQiLAotICAgICAgICAgICAgICAgICAgICAgMSkgPCAwKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIENIRUNLX1RDTF9BUFBBUlRNRU5UOwotCi0gICAgY21kICA9IE1lcmdlKGFyZ3MpOwotICAgIGlmIChjbWQpIHsKLSAgICAgICAgaW50IGVycjsKLSAgICAgICAgRU5URVJfVENMCi0gICAgICAgIGVyciA9IFRjbF9HbG9iYWxFdmFsKFRrYXBwX0ludGVycChzZWxmKSwgY21kKTsKLSAgICAgICAgRU5URVJfT1ZFUkxBUAotICAgICAgICBpZiAoZXJyID09IFRDTF9FUlJPUikKLSAgICAgICAgICAgIHJlcyA9IFRraW50ZXJfRXJyb3Ioc2VsZik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJlcyA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKFRrYXBwX1Jlc3VsdChzZWxmKSk7Ci0gICAgICAgIExFQVZFX09WRVJMQVBfVENMCi0gICAgICAgIGNrZnJlZShjbWQpOwotICAgIH0KLQotICAgIHJldHVybiByZXM7Ci19Ci0KLXN0YXRpYyBQeU9iamVjdCAqCiBUa2FwcF9FdmFsKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBjaGFyICpzY3JpcHQ7CkBAIC0xNDIxLDYgKzE0ODQsNyBAQAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiczpldmFsIiwgJnNjcmlwdCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCisgICAgQ0hFQ0tfU1RSSU5HX0xFTkdUSChzY3JpcHQpOwogICAgIENIRUNLX1RDTF9BUFBBUlRNRU5UOwogCiAgICAgRU5URVJfVENMCkBAIC0xNDM1LDM0ICsxNDk5LDYgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKLVRrYXBwX0dsb2JhbEV2YWwoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQotewotICAgIGNoYXIgKnNjcmlwdDsKLSAgICBQeU9iamVjdCAqcmVzID0gTlVMTDsKLSAgICBpbnQgZXJyOwotCi0gICAgaWYgKFB5RXJyX1dhcm5FeChQeUV4Y19EZXByZWNhdGlvbldhcm5pbmcsCi0gICAgICAgICAgICAgICAgICAgICAiZ2xvYmFsZXZhbCBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gMy40IiwKLSAgICAgICAgICAgICAgICAgICAgIDEpIDwgMCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInM6Z2xvYmFsZXZhbCIsICZzY3JpcHQpKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIENIRUNLX1RDTF9BUFBBUlRNRU5UOwotCi0gICAgRU5URVJfVENMCi0gICAgZXJyID0gVGNsX0dsb2JhbEV2YWwoVGthcHBfSW50ZXJwKHNlbGYpLCBzY3JpcHQpOwotICAgIEVOVEVSX09WRVJMQVAKLSAgICBpZiAoZXJyID09IFRDTF9FUlJPUikKLSAgICAgICAgcmVzID0gVGtpbnRlcl9FcnJvcihzZWxmKTsKLSAgICBlbHNlCi0gICAgICAgIHJlcyA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKFRrYXBwX1Jlc3VsdChzZWxmKSk7Ci0gICAgTEVBVkVfT1ZFUkxBUF9UQ0wKLSAgICByZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgUHlPYmplY3QgKgogVGthcHBfRXZhbEZpbGUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewogICAgIGNoYXIgKmZpbGVOYW1lOwpAQCAtMTQ3Miw2ICsxNTA4LDcgQEAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInM6ZXZhbGZpbGUiLCAmZmlsZU5hbWUpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAorICAgIENIRUNLX1NUUklOR19MRU5HVEgoZmlsZU5hbWUpOwogICAgIENIRUNLX1RDTF9BUFBBUlRNRU5UOwogCiAgICAgRU5URVJfVENMCkBAIC0xNDkyLDkgKzE1MjksMTAgQEAKICAgICBQeU9iamVjdCAqcmVzID0gTlVMTDsKICAgICBpbnQgZXJyOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzIiwgJnNjcmlwdCkpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzOnJlY29yZCIsICZzY3JpcHQpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAorICAgIENIRUNLX1NUUklOR19MRU5HVEgoc2NyaXB0KTsKICAgICBDSEVDS19UQ0xfQVBQQVJUTUVOVDsKIAogICAgIEVOVEVSX1RDTApAQCAtMTUxNSwxNCArMTU1MywxNCBAQAogCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzOmFkZGVycm9yaW5mbyIsICZtc2cpKQogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBDSEVDS19TVFJJTkdfTEVOR1RIKG1zZyk7CiAgICAgQ0hFQ0tfVENMX0FQUEFSVE1FTlQ7CiAKICAgICBFTlRFUl9UQ0wKICAgICBUY2xfQWRkRXJyb3JJbmZvKFRrYXBwX0ludGVycChzZWxmKSwgbXNnKTsKICAgICBMRUFWRV9UQ0wKIAotICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICByZXR1cm4gUHlfTm9uZTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIAogCkBAIC0xNjQwLDggKzE2NzgsMTEgQEAKICAgICAgICAgaWYgKCFXYWl0Rm9yTWFpbmxvb3Aoc2VsZikpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgICAgICBldiA9IChWYXJFdmVudCopY2thbGxvYyhzaXplb2YoVmFyRXZlbnQpKTsKLQorICAgICAgICBldiA9IChWYXJFdmVudCopYXR0ZW1wdGNrYWxsb2Moc2l6ZW9mKFZhckV2ZW50KSk7CisgICAgICAgIGlmIChldiA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KICAgICAgICAgZXYtPnNlbGYgPSBzZWxmcHRyOwogICAgICAgICBldi0+YXJncyA9IGFyZ3M7CiAgICAgICAgIGV2LT5mbGFncyA9IGZsYWdzOwpAQCAtMTY5OSw2ICsxNzQwLDggQEAKICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzc086c2V0dmFyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYW1lMSwgJm5hbWUyLCAmbmV3VmFsdWUpKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIENIRUNLX1NUUklOR19MRU5HVEgobmFtZTEpOworICAgICAgICBDSEVDS19TVFJJTkdfTEVOR1RIKG5hbWUyKTsKICAgICAgICAgLyogWFhYIG11c3QgaG9sZCB0Y2wgbG9jayBhbHJlYWR5Pz8/ICovCiAgICAgICAgIG5ld3ZhbCA9IEFzT2JqKG5ld1ZhbHVlKTsKICAgICAgICAgRU5URVJfVENMCkBAIC0xNzQ0LDExICsxNzg3LDEzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcm5hbWVfY29udmVydGVyLCAmbmFtZTEsICZuYW1lMikpCiAgICAgICAgIHJldHVybiBOVUxMOwogCisgICAgQ0hFQ0tfU1RSSU5HX0xFTkdUSChuYW1lMik7CiAgICAgRU5URVJfVENMCiAgICAgdHJlcyA9IFRjbF9HZXRWYXIyRXgoVGthcHBfSW50ZXJwKHNlbGYpLCBuYW1lMSwgbmFtZTIsIGZsYWdzKTsKICAgICBFTlRFUl9PVkVSTEFQCiAgICAgaWYgKHRyZXMgPT0gTlVMTCkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoVGtpbnRlcl9UY2xFcnJvciwgVGNsX0dldFN0cmluZ1Jlc3VsdChUa2FwcF9JbnRlcnAoc2VsZikpKTsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFRraW50ZXJfVGNsRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICBUY2xfR2V0U3RyaW5nUmVzdWx0KFRrYXBwX0ludGVycChzZWxmKSkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmICgoKFRrYXBwT2JqZWN0KilzZWxmKS0+d2FudG9iamVjdHMpIHsKICAgICAgICAgICAgIHJlcyA9IEZyb21PYmooc2VsZiwgdHJlcyk7CkBAIC0xNzg1LDYgKzE4MzAsOCBAQAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAic3xzOnVuc2V0dmFyIiwgJm5hbWUxLCAmbmFtZTIpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAorICAgIENIRUNLX1NUUklOR19MRU5HVEgobmFtZTEpOworICAgIENIRUNLX1NUUklOR19MRU5HVEgobmFtZTIpOwogICAgIEVOVEVSX1RDTAogICAgIGNvZGUgPSBUY2xfVW5zZXRWYXIyKFRrYXBwX0ludGVycChzZWxmKSwgbmFtZTEsIG5hbWUyLCBmbGFncyk7CiAgICAgRU5URVJfT1ZFUkxBUApAQCAtMTgwNyw3ICsxODU0LDggQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBUa2FwcF9HbG9iYWxVbnNldFZhcihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgcmV0dXJuIHZhcl9pbnZva2UoVW5zZXRWYXIsIHNlbGYsIGFyZ3MsIFRDTF9MRUFWRV9FUlJfTVNHIHwgVENMX0dMT0JBTF9PTkxZKTsKKyAgICByZXR1cm4gdmFyX2ludm9rZShVbnNldFZhciwgc2VsZiwgYXJncywKKyAgICAgICAgICAgICAgICAgICAgICBUQ0xfTEVBVkVfRVJSX01TRyB8IFRDTF9HTE9CQUxfT05MWSk7CiB9CiAKIApAQCAtMTgxOCw3ICsxODY2LDEyIEBACiBUa2FwcF9HZXRJbnQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewogICAgIGNoYXIgKnM7Ci0gICAgaW50IHY7CisjaWYgZGVmaW5lZChUQ0xfV0lERV9JTlRfVFlQRSkgfHwgZGVmaW5lZChIQVZFX0xJQlRPTU1BTVRIKQorICAgIFRjbF9PYmogKnZhbHVlOworICAgIFB5T2JqZWN0ICpyZXN1bHQ7CisjZWxzZQorICAgIGludCBpbnRWYWx1ZTsKKyNlbmRpZgogCiAgICAgaWYgKFB5VHVwbGVfU2l6ZShhcmdzKSA9PSAxKSB7CiAgICAgICAgIFB5T2JqZWN0KiBvID0gUHlUdXBsZV9HZXRJdGVtKGFyZ3MsIDApOwpAQCAtMTgyOSw5ICsxODgyLDMwIEBACiAgICAgfQogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiczpnZXRpbnQiLCAmcykpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmIChUY2xfR2V0SW50KFRrYXBwX0ludGVycChzZWxmKSwgcywgJnYpID09IFRDTF9FUlJPUikKKyAgICBDSEVDS19TVFJJTkdfTEVOR1RIKHMpOworI2lmIGRlZmluZWQoVENMX1dJREVfSU5UX1RZUEUpIHx8IGRlZmluZWQoSEFWRV9MSUJUT01NQU1USCkKKyAgICB2YWx1ZSA9IFRjbF9OZXdTdHJpbmdPYmoocywgLTEpOworICAgIGlmICh2YWx1ZSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gVGtpbnRlcl9FcnJvcihzZWxmKTsKLSAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiaSIsIHYpOworICAgIC8qIERvbid0IHVzZSBUY2xfR2V0SW50KCkgYmVjYXVzZSBpdCByZXR1cm5zIGFtYmlndW91cyByZXN1bHQgZm9yIHZhbHVlCisgICAgICAgaW4gcmFuZ2VzIC0yKiozMi4uLTIqKjMxLTEgYW5kIDIqKjMxLi4yKiozMi0xIChvbiAzMi1iaXQgcGxhdGZvcm0pLgorCisgICAgICAgUHJlZmVyIGJpZ251bSBiZWNhdXNlIFRjbF9HZXRXaWRlSW50RnJvbU9iaiByZXR1cm5zIGFtYmlndW91cyByZXN1bHQgZm9yCisgICAgICAgdmFsdWUgaW4gcmFuZ2VzIC0yKio2NC4uLTIqKjYzLTEgYW5kIDIqKjYzLi4yKio2NC0xIChvbiAzMi1iaXQgcGxhdGZvcm0pLgorICAgICAqLworI2lmZGVmIEhBVkVfTElCVE9NTUFNVEgKKyAgICByZXN1bHQgPSBmcm9tQmlnbnVtT2JqKHNlbGYsIHZhbHVlKTsKKyNlbHNlCisgICAgcmVzdWx0ID0gZnJvbVdpZGVJbnRPYmooc2VsZiwgdmFsdWUpOworI2VuZGlmCisgICAgVGNsX0RlY3JSZWZDb3VudCh2YWx1ZSk7CisgICAgaWYgKHJlc3VsdCAhPSBOVUxMIHx8IFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIGlmIChUY2xfR2V0SW50KFRrYXBwX0ludGVycChzZWxmKSwgcywgJmludFZhbHVlKSA9PSBUQ0xfT0spCisgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoaW50VmFsdWUpOworI2VuZGlmCisgICAgcmV0dXJuIFRraW50ZXJfRXJyb3Ioc2VsZik7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC0xODQ5LDI2ICsxOTIzLDMzIEBACiAgICAgfQogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiczpnZXRkb3VibGUiLCAmcykpCiAgICAgICAgIHJldHVybiBOVUxMOworICAgIENIRUNLX1NUUklOR19MRU5HVEgocyk7CiAgICAgaWYgKFRjbF9HZXREb3VibGUoVGthcHBfSW50ZXJwKHNlbGYpLCBzLCAmdikgPT0gVENMX0VSUk9SKQogICAgICAgICByZXR1cm4gVGtpbnRlcl9FcnJvcihzZWxmKTsKICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiZCIsIHYpOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotVGthcHBfR2V0Qm9vbGVhbihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitUa2FwcF9HZXRCb29sZWFuKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJnKQogewogICAgIGNoYXIgKnM7CiAgICAgaW50IHY7CiAKLSAgICBpZiAoUHlUdXBsZV9TaXplKGFyZ3MpID09IDEpIHsKLSAgICAgICAgUHlPYmplY3QgKm8gPSBQeVR1cGxlX0dldEl0ZW0oYXJncywgMCk7Ci0gICAgICAgIGlmIChQeUxvbmdfQ2hlY2sobykpIHsKLSAgICAgICAgICAgIFB5X0lOQ1JFRihvKTsKLSAgICAgICAgICAgIHJldHVybiBvOwotICAgICAgICB9CisgICAgaWYgKFB5TG9uZ19DaGVjayhhcmcpKSB7IC8qIGludCBvciBib29sICovCisgICAgICAgIHJldHVybiBQeUJvb2xfRnJvbUxvbmcoUHlfU0laRShhcmcpICE9IDApOwogICAgIH0KLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInM6Z2V0Ym9vbGVhbiIsICZzKSkKKworICAgIGlmIChQeVRjbE9iamVjdF9DaGVjayhhcmcpKSB7CisgICAgICAgIGlmIChUY2xfR2V0Qm9vbGVhbkZyb21PYmooVGthcHBfSW50ZXJwKHNlbGYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUHlUY2xPYmplY3QqKWFyZyktPnZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ2KSA9PSBUQ0xfRVJST1IpCisgICAgICAgICAgICByZXR1cm4gVGtpbnRlcl9FcnJvcihzZWxmKTsKKyAgICAgICAgcmV0dXJuIFB5Qm9vbF9Gcm9tTG9uZyh2KTsKKyAgICB9CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlKGFyZywgInM6Z2V0Ym9vbGVhbiIsICZzKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgQ0hFQ0tfU1RSSU5HX0xFTkdUSChzKTsKICAgICBpZiAoVGNsX0dldEJvb2xlYW4oVGthcHBfSW50ZXJwKHNlbGYpLCBzLCAmdikgPT0gVENMX0VSUk9SKQogICAgICAgICByZXR1cm4gVGtpbnRlcl9FcnJvcihzZWxmKTsKICAgICByZXR1cm4gUHlCb29sX0Zyb21Mb25nKHYpOwpAQCAtMTg4NCw2ICsxOTY1LDcgQEAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInM6ZXhwcnN0cmluZyIsICZzKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKKyAgICBDSEVDS19TVFJJTkdfTEVOR1RIKHMpOwogICAgIENIRUNLX1RDTF9BUFBBUlRNRU5UOwogCiAgICAgRU5URVJfVENMCkBAIC0xOTA4LDYgKzE5OTAsNyBAQAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiczpleHBybG9uZyIsICZzKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKKyAgICBDSEVDS19TVFJJTkdfTEVOR1RIKHMpOwogICAgIENIRUNLX1RDTF9BUFBBUlRNRU5UOwogCiAgICAgRU5URVJfVENMCkBAIC0xOTMxLDYgKzIwMTQsNyBAQAogCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzOmV4cHJkb3VibGUiLCAmcykpCiAgICAgICAgIHJldHVybiBOVUxMOworICAgIENIRUNLX1NUUklOR19MRU5HVEgocyk7CiAgICAgQ0hFQ0tfVENMX0FQUEFSVE1FTlQ7CiAgICAgUHlGUEVfU1RBUlRfUFJPVEVDVCgiVGthcHBfRXhwckRvdWJsZSIsIHJldHVybiAwKQogICAgIEVOVEVSX1RDTApAQCAtMTk1NSw2ICsyMDM5LDcgQEAKIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiczpleHByYm9vbGVhbiIsICZzKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgQ0hFQ0tfU1RSSU5HX0xFTkdUSChzKTsKICAgICBDSEVDS19UQ0xfQVBQQVJUTUVOVDsKICAgICBFTlRFUl9UQ0wKICAgICByZXR2YWwgPSBUY2xfRXhwckJvb2xlYW4oVGthcHBfSW50ZXJwKHNlbGYpLCBzLCAmdik7CkBAIC0yMDA3LDYgKzIwOTIsNyBAQAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiZXQ6c3BsaXRsaXN0IiwgInV0Zi04IiwgJmxpc3QpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAorICAgIENIRUNLX1NUUklOR19MRU5HVEgobGlzdCk7CiAgICAgaWYgKFRjbF9TcGxpdExpc3QoVGthcHBfSW50ZXJwKHNlbGYpLCBsaXN0LAogICAgICAgICAgICAgICAgICAgICAgICZhcmdjLCAmYXJndikgPT0gVENMX0VSUk9SKSAgewogICAgICAgICBQeU1lbV9GcmVlKGxpc3QpOwpAQCAtMjA2OCwzMiArMjE1NCwxMiBAQAogCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJldDpzcGxpdCIsICJ1dGYtOCIsICZsaXN0KSkKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgQ0hFQ0tfU1RSSU5HX0xFTkdUSChsaXN0KTsKICAgICB2ID0gU3BsaXQobGlzdCk7CiAgICAgUHlNZW1fRnJlZShsaXN0KTsKICAgICByZXR1cm4gdjsKIH0KIAotc3RhdGljIFB5T2JqZWN0ICoKLVRrYXBwX01lcmdlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKLXsKLSAgICBjaGFyICpzOwotICAgIFB5T2JqZWN0ICpyZXMgPSBOVUxMOwotCi0gICAgaWYgKFB5RXJyX1dhcm5FeChQeUV4Y19EZXByZWNhdGlvbldhcm5pbmcsCi0gICAgICAgICAgICAgICAgICAgICAibWVyZ2UgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIDMuNCIsCi0gICAgICAgICAgICAgICAgICAgICAxKSA8IDApCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcyA9IE1lcmdlKGFyZ3MpOwotCi0gICAgaWYgKHMpIHsKLSAgICAgICAgcmVzID0gUHlVbmljb2RlX0Zyb21TdHJpbmcocyk7Ci0gICAgICAgIGNrZnJlZShzKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzOwotfQotCiAKIAogLyoqIFRjbCBDb21tYW5kICoqLwpAQCAtMjIyMCw2ICsyMjg2LDcgQEAKIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAic086Y3JlYXRlY29tbWFuZCIsICZjbWROYW1lLCAmZnVuYykpCiAgICAgICAgIHJldHVybiBOVUxMOworICAgIENIRUNLX1NUUklOR19MRU5HVEgoY21kTmFtZSk7CiAgICAgaWYgKCFQeUNhbGxhYmxlX0NoZWNrKGZ1bmMpKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJjb21tYW5kIG5vdCBjYWxsYWJsZSIpOwogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTIyNDEsNyArMjMwOCwxMiBAQAogI2lmZGVmIFdJVEhfVEhSRUFECiAgICAgaWYgKHNlbGYtPnRocmVhZGVkICYmIHNlbGYtPnRocmVhZF9pZCAhPSBUY2xfR2V0Q3VycmVudFRocmVhZCgpKSB7CiAgICAgICAgIFRjbF9Db25kaXRpb24gY29uZCA9IE5VTEw7Ci0gICAgICAgIENvbW1hbmRFdmVudCAqZXYgPSAoQ29tbWFuZEV2ZW50Kilja2FsbG9jKHNpemVvZihDb21tYW5kRXZlbnQpKTsKKyAgICAgICAgQ29tbWFuZEV2ZW50ICpldiA9IChDb21tYW5kRXZlbnQqKWF0dGVtcHRja2FsbG9jKHNpemVvZihDb21tYW5kRXZlbnQpKTsKKyAgICAgICAgaWYgKGV2ID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgICAgICBQeU1lbV9ERUwoZGF0YSk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQogICAgICAgICBldi0+ZXYucHJvYyA9IChUY2xfRXZlbnRQcm9jKilUa2FwcF9Db21tYW5kUHJvYzsKICAgICAgICAgZXYtPmludGVycCA9IHNlbGYtPmludGVycDsKICAgICAgICAgZXYtPmNyZWF0ZSA9IDE7CkBAIC0yMjY3LDggKzIzMzksNyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgcmV0dXJuIFB5X05vbmU7CisgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKIApAQCAtMjI4MiwxMiArMjM1MywxNyBAQAogCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzOmRlbGV0ZWNvbW1hbmQiLCAmY21kTmFtZSkpCiAgICAgICAgIHJldHVybiBOVUxMOworICAgIENIRUNLX1NUUklOR19MRU5HVEgoY21kTmFtZSk7CiAKICNpZmRlZiBXSVRIX1RIUkVBRAogICAgIGlmIChzZWxmLT50aHJlYWRlZCAmJiBzZWxmLT50aHJlYWRfaWQgIT0gVGNsX0dldEN1cnJlbnRUaHJlYWQoKSkgewogICAgICAgICBUY2xfQ29uZGl0aW9uIGNvbmQgPSBOVUxMOwogICAgICAgICBDb21tYW5kRXZlbnQgKmV2OwotICAgICAgICBldiA9IChDb21tYW5kRXZlbnQqKWNrYWxsb2Moc2l6ZW9mKENvbW1hbmRFdmVudCkpOworICAgICAgICBldiA9IChDb21tYW5kRXZlbnQqKWF0dGVtcHRja2FsbG9jKHNpemVvZihDb21tYW5kRXZlbnQpKTsKKyAgICAgICAgaWYgKGV2ID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQogICAgICAgICBldi0+ZXYucHJvYyA9IChUY2xfRXZlbnRQcm9jKilUa2FwcF9Db21tYW5kUHJvYzsKICAgICAgICAgZXYtPmludGVycCA9IHNlbGYtPmludGVycDsKICAgICAgICAgZXYtPmNyZWF0ZSA9IDA7CkBAIC0yMzA5LDggKzIzODUsNyBAQAogICAgICAgICBQeUVycl9TZXRTdHJpbmcoVGtpbnRlcl9UY2xFcnJvciwgImNhbid0IGRlbGV0ZSBUY2wgY29tbWFuZCIpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgUHlfSU5DUkVGKFB5X05vbmUpOwotICAgIHJldHVybiBQeV9Ob25lOworICAgIFB5X1JFVFVSTl9OT05FOwogfQogCiAKQEAgLTI0MTQsOCArMjQ4OSw3IEBACiAgICAgRU5URVJfVENMCiAgICAgVGNsX0NyZWF0ZUZpbGVIYW5kbGVyKHRmaWxlLCBtYXNrLCBGaWxlSGFuZGxlciwgKENsaWVudERhdGEpIGRhdGEpOwogICAgIExFQVZFX1RDTAotICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICByZXR1cm4gUHlfTm9uZTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTI0MzksMTUgKzI1MTMsMTQgQEAKICAgICBFTlRFUl9UQ0wKICAgICBUY2xfRGVsZXRlRmlsZUhhbmRsZXIodGZpbGUpOwogICAgIExFQVZFX1RDTAotICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICByZXR1cm4gUHlfTm9uZTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKIH0KICNlbmRpZiAvKiBIQVZFX0NSRUFURUZJTEVIQU5ETEVSICovCiAKIAogLyoqKiogVGt0dCBPYmplY3QgKHRpbWVyIHRva2VuKSAqKioqLwogCi1zdGF0aWMgUHlUeXBlT2JqZWN0IFRrdHRfVHlwZTsKK3N0YXRpYyBQeU9iamVjdCAqVGt0dF9UeXBlOwogCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgUHlPYmplY3RfSEVBRApAQCAtMjQ3Miw4ICsyNTQ1LDcgQEAKICAgICAgICAgUHlfREVDUkVGKGZ1bmMpOwogICAgICAgICBQeV9ERUNSRUYodik7IC8qIFNlZSBUa3R0X05ldygpICovCiAgICAgfQotICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICByZXR1cm4gUHlfTm9uZTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIAogc3RhdGljIFB5TWV0aG9kRGVmIFRrdHRfbWV0aG9kc1tdID0KQEAgLTI0ODcsOSArMjU1OSwxMCBAQAogewogICAgIFRrdHRPYmplY3QgKnY7CiAKLSAgICB2ID0gUHlPYmplY3RfTmV3KFRrdHRPYmplY3QsICZUa3R0X1R5cGUpOworICAgIHYgPSBQeU9iamVjdF9OZXcoVGt0dE9iamVjdCwgKFB5VHlwZU9iamVjdCAqKSBUa3R0X1R5cGUpOwogICAgIGlmICh2ID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOworICAgIFB5X0lOQ1JFRihUa3R0X1R5cGUpOwogCiAgICAgUHlfSU5DUkVGKGZ1bmMpOwogICAgIHYtPnRva2VuID0gTlVMTDsKQEAgLTI1MDUsMTAgKzI1NzgsMTIgQEAKIHsKICAgICBUa3R0T2JqZWN0ICp2ID0gKFRrdHRPYmplY3QgKilzZWxmOwogICAgIFB5T2JqZWN0ICpmdW5jID0gdi0+ZnVuYzsKKyAgICBQeU9iamVjdCAqdHAgPSAoUHlPYmplY3QgKikgUHlfVFlQRShzZWxmKTsKIAogICAgIFB5X1hERUNSRUYoZnVuYyk7CiAKICAgICBQeU9iamVjdF9EZWwoc2VsZik7CisgICAgUHlfREVDUkVGKHRwKTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTI1MjAsMzggKzI1OTUsMjAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdi0+ZnVuYyA9PSBOVUxMID8gIiwgaGFuZGxlciBkZWxldGVkIiA6ICIiKTsKIH0KIAotc3RhdGljIFB5VHlwZU9iamVjdCBUa3R0X1R5cGUgPQotewotICAgIFB5VmFyT2JqZWN0X0hFQURfSU5JVChOVUxMLCAwKQotICAgICJ0a3RpbWVydG9rZW4iLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9uYW1lICovCi0gICAgc2l6ZW9mKFRrdHRPYmplY3QpLCAgICAgICAgICAgICAgICAgICAgICAvKnRwX2Jhc2ljc2l6ZSAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9pdGVtc2l6ZSAqLwotICAgIFRrdHRfRGVhbGxvYywgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9kZWFsbG9jICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3ByaW50ICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2dldGF0dHIgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc2V0YXR0ciAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9yZXNlcnZlZCAqLwotICAgIFRrdHRfUmVwciwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9yZXByICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX251bWJlciAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19zZXF1ZW5jZSAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19tYXBwaW5nICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2hhc2ggKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfY2FsbCovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3N0ciovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2dldGF0dHJvKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc2V0YXR0cm8qLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19idWZmZXIqLwotICAgIFB5X1RQRkxBR1NfREVGQVVMVCwgICAgICAgICAgICAgICAgICAgICAgLyp0cF9mbGFncyovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2RvYyovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3RyYXZlcnNlKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfY2xlYXIqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9yaWNoY29tcGFyZSovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3dlYWtsaXN0b2Zmc2V0Ki8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaXRlciovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2l0ZXJuZXh0Ki8KLSAgICBUa3R0X21ldGhvZHMsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfbWV0aG9kcyovCitzdGF0aWMgUHlUeXBlX1Nsb3QgVGt0dF9UeXBlX3Nsb3RzW10gPSB7CisgICAge1B5X3RwX2RlYWxsb2MsIFRrdHRfRGVhbGxvY30sCisgICAge1B5X3RwX3JlcHIsIFRrdHRfUmVwcn0sCisgICAge1B5X3RwX21ldGhvZHMsIFRrdHRfbWV0aG9kc30sCisgICAgezAsIDB9CiB9OwogCitzdGF0aWMgUHlUeXBlX1NwZWMgVGt0dF9UeXBlX3NwZWMgPSB7CisgICAgIl90a2ludGVyLnRrdGltZXJ0b2tlbiIsCisgICAgc2l6ZW9mKFRrdHRPYmplY3QpLAorICAgIDAsCisgICAgUHlfVFBGTEFHU19ERUZBVUxULAorICAgIFRrdHRfVHlwZV9zbG90cywKK307CiAKIAogLyoqIFRpbWVyIEhhbmRsZXIgKiovCkBAIC0yNjczLDggKzI3MzAsNyBAQAogICAgICAgICBleGNJbkNtZCA9IHZhbEluQ21kID0gdHJiSW5DbWQgPSBOVUxMOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgUHlfSU5DUkVGKFB5X05vbmUpOwotICAgIHJldHVybiBQeV9Ob25lOworICAgIFB5X1JFVFVSTl9OT05FOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtMjcwMCw4ICsyNzU2LDcgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBxdWl0TWFpbkxvb3AgPSAxOwotICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICByZXR1cm4gUHlfTm9uZTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTI3NTEsMTUgKzI4MDYsMTUgQEAKICAgICB9CiAgICAgaWYgKF90a19leGlzdHMgPT0gTlVMTCB8fCBzdHJjbXAoX3RrX2V4aXN0cywgIjEiKSAhPSAwKSAgICAgewogICAgICAgICBpZiAoVGtfSW5pdChpbnRlcnApICAgICAgICAgICAgID09IFRDTF9FUlJPUikgewotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFRraW50ZXJfVGNsRXJyb3IsIFRjbF9HZXRTdHJpbmdSZXN1bHQoVGthcHBfSW50ZXJwKHNlbGYpKSk7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoVGtpbnRlcl9UY2xFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUY2xfR2V0U3RyaW5nUmVzdWx0KFRrYXBwX0ludGVycChzZWxmKSkpOwogI2lmZGVmIFRLSU5URVJfUFJPVEVDVF9MT0FEVEsKICAgICAgICAgICAgIHRrX2xvYWRfZmFpbGVkID0gMTsKICNlbmRpZgogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KICAgICB9Ci0gICAgUHlfSU5DUkVGKFB5X05vbmUpOwotICAgIHJldHVybiBQeV9Ob25lOworICAgIFB5X1JFVFVSTl9OT05FOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtMjc3Myw4ICsyODI4LDcgQEAKICAgICAgICAgcmV0dXJuIFB5Qm9vbF9Gcm9tTG9uZygoKFRrYXBwT2JqZWN0KilzZWxmKS0+d2FudG9iamVjdHMpOwogICAgICgoVGthcHBPYmplY3QqKXNlbGYpLT53YW50b2JqZWN0cyA9IHdhbnRvYmplY3RzOwogCi0gICAgUHlfSU5DUkVGKFB5X05vbmUpOwotICAgIHJldHVybiBQeV9Ob25lOworICAgIFB5X1JFVFVSTl9OT05FOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtMjc4Myw4ICsyODM3LDcgQEAKIAogICAgICgoVGthcHBPYmplY3QqKXNlbGYpLT5kaXNwYXRjaGluZyA9IDE7CiAKLSAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgcmV0dXJuIFB5X05vbmU7CisgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKIApAQCAtMjc5NSw5ICsyODQ4LDcgQEAKICAgICB7IndpbGxkaXNwYXRjaCIsICAgICAgIFRrYXBwX1dpbGxEaXNwYXRjaCwgTUVUSF9OT0FSR1N9LAogICAgIHsid2FudG9iamVjdHMiLCAgICAgICAgICAgIFRrYXBwX1dhbnRPYmplY3RzLCBNRVRIX1ZBUkFSR1N9LAogICAgIHsiY2FsbCIsICAgICAgICAgICAgICAgICAgIFRrYXBwX0NhbGwsIE1FVEhfVkFSQVJHU30sCi0gICAgeyJnbG9iYWxjYWxsIiwgICAgICAgICAgICAgVGthcHBfR2xvYmFsQ2FsbCwgTUVUSF9WQVJBUkdTfSwKICAgICB7ImV2YWwiLCAgICAgICAgICAgICAgICAgICBUa2FwcF9FdmFsLCBNRVRIX1ZBUkFSR1N9LAotICAgIHsiZ2xvYmFsZXZhbCIsICAgICAgICAgICAgIFRrYXBwX0dsb2JhbEV2YWwsIE1FVEhfVkFSQVJHU30sCiAgICAgeyJldmFsZmlsZSIsICAgICAgICAgICAgICAgVGthcHBfRXZhbEZpbGUsIE1FVEhfVkFSQVJHU30sCiAgICAgeyJyZWNvcmQiLCAgICAgICAgICAgICAgICAgVGthcHBfUmVjb3JkLCBNRVRIX1ZBUkFSR1N9LAogICAgIHsiYWRkZXJyb3JpbmZvIiwgICAgICAgVGthcHBfQWRkRXJyb3JJbmZvLCBNRVRIX1ZBUkFSR1N9LApAQCAtMjgwOSwxNCArMjg2MCwxMyBAQAogICAgIHsiZ2xvYmFsdW5zZXR2YXIiLCAgICAgVGthcHBfR2xvYmFsVW5zZXRWYXIsIE1FVEhfVkFSQVJHU30sCiAgICAgeyJnZXRpbnQiLCAgICAgICAgICAgICAgICAgVGthcHBfR2V0SW50LCBNRVRIX1ZBUkFSR1N9LAogICAgIHsiZ2V0ZG91YmxlIiwgICAgICAgICAgICAgIFRrYXBwX0dldERvdWJsZSwgTUVUSF9WQVJBUkdTfSwKLSAgICB7ImdldGJvb2xlYW4iLCAgICAgICAgICAgICBUa2FwcF9HZXRCb29sZWFuLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsiZ2V0Ym9vbGVhbiIsICAgICAgICAgICAgIFRrYXBwX0dldEJvb2xlYW4sIE1FVEhfT30sCiAgICAgeyJleHByc3RyaW5nIiwgICAgICAgICAgICAgVGthcHBfRXhwclN0cmluZywgTUVUSF9WQVJBUkdTfSwKICAgICB7ImV4cHJsb25nIiwgICAgICAgICAgICAgICBUa2FwcF9FeHByTG9uZywgTUVUSF9WQVJBUkdTfSwKICAgICB7ImV4cHJkb3VibGUiLCAgICAgICAgICAgICBUa2FwcF9FeHByRG91YmxlLCBNRVRIX1ZBUkFSR1N9LAogICAgIHsiZXhwcmJvb2xlYW4iLCAgICAgICAgVGthcHBfRXhwckJvb2xlYW4sIE1FVEhfVkFSQVJHU30sCiAgICAgeyJzcGxpdGxpc3QiLCAgICAgICAgICAgICAgVGthcHBfU3BsaXRMaXN0LCBNRVRIX1ZBUkFSR1N9LAogICAgIHsic3BsaXQiLCAgICAgICAgICAgICAgICAgIFRrYXBwX1NwbGl0LCBNRVRIX1ZBUkFSR1N9LAotICAgIHsibWVyZ2UiLCAgICAgICAgICAgICAgICAgIFRrYXBwX01lcmdlLCBNRVRIX1ZBUkFSR1N9LAogICAgIHsiY3JlYXRlY29tbWFuZCIsICAgICAgVGthcHBfQ3JlYXRlQ29tbWFuZCwgTUVUSF9WQVJBUkdTfSwKICAgICB7ImRlbGV0ZWNvbW1hbmQiLCAgICAgIFRrYXBwX0RlbGV0ZUNvbW1hbmQsIE1FVEhfVkFSQVJHU30sCiAjaWZkZWYgSEFWRV9DUkVBVEVGSUxFSEFORExFUgpAQCAtMjgzOSw0NCArMjg4OSwyOSBAQAogc3RhdGljIHZvaWQKIFRrYXBwX0RlYWxsb2MoUHlPYmplY3QgKnNlbGYpCiB7CisgICAgUHlPYmplY3QgKnRwID0gKFB5T2JqZWN0ICopIFB5X1RZUEUoc2VsZik7CiAgICAgLypDSEVDS19UQ0xfQVBQQVJUTUVOVDsqLwogICAgIEVOVEVSX1RDTAogICAgIFRjbF9EZWxldGVJbnRlcnAoVGthcHBfSW50ZXJwKHNlbGYpKTsKICAgICBMRUFWRV9UQ0wKICAgICBQeU9iamVjdF9EZWwoc2VsZik7CisgICAgUHlfREVDUkVGKHRwKTsKICAgICBEaXNhYmxlRXZlbnRIb29rKCk7CiB9CiAKLXN0YXRpYyBQeVR5cGVPYmplY3QgVGthcHBfVHlwZSA9Ci17Ci0gICAgUHlWYXJPYmplY3RfSEVBRF9JTklUKE5VTEwsIDApCi0gICAgInRrYXBwIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX25hbWUgKi8KLSAgICBzaXplb2YoVGthcHBPYmplY3QpLCAgICAgICAgICAgICAgICAgICAgIC8qdHBfYmFzaWNzaXplICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2l0ZW1zaXplICovCi0gICAgVGthcHBfRGVhbGxvYywgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2RlYWxsb2MgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfcHJpbnQgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZ2V0YXR0ciAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zZXRhdHRyICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3Jlc2VydmVkICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3JlcHIgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfbnVtYmVyICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX3NlcXVlbmNlICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX21hcHBpbmcgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaGFzaCAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9jYWxsKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc3RyKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZ2V0YXR0cm8qLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zZXRhdHRybyovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX2J1ZmZlciovCi0gICAgUHlfVFBGTEFHU19ERUZBVUxULCAgICAgICAgICAgICAgICAgICAgICAvKnRwX2ZsYWdzKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZG9jKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfdHJhdmVyc2UqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9jbGVhciovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3JpY2hjb21wYXJlKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfd2Vha2xpc3RvZmZzZXQqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9pdGVyKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaXRlcm5leHQqLwotICAgIFRrYXBwX21ldGhvZHMsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9tZXRob2RzKi8KK3N0YXRpYyBQeVR5cGVfU2xvdCBUa2FwcF9UeXBlX3Nsb3RzW10gPSB7CisgICAge1B5X3RwX2RlYWxsb2MsIFRrYXBwX0RlYWxsb2N9LAorICAgIHtQeV90cF9tZXRob2RzLCBUa2FwcF9tZXRob2RzfSwKKyAgICB7MCwgMH0KK307CisKKworc3RhdGljIFB5VHlwZV9TcGVjIFRrYXBwX1R5cGVfc3BlYyA9IHsKKyAgICAiX3RraW50ZXIudGthcHAiLAorICAgIHNpemVvZihUa2FwcE9iamVjdCksCisgICAgMCwKKyAgICBQeV9UUEZMQUdTX0RFRkFVTFQsCisgICAgVGthcHBfVHlwZV9zbG90cywKIH07CiAKIApAQCAtMzAxNCw5ICszMDQ5LDEzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICZpbnRlcmFjdGl2ZSwgJndhbnRvYmplY3RzLCAmd2FudFRrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAmc3luYywgJnVzZSkpCiAgICAgICAgIHJldHVybiBOVUxMOworICAgIENIRUNLX1NUUklOR19MRU5HVEgoc2NyZWVuTmFtZSk7CisgICAgQ0hFQ0tfU1RSSU5HX0xFTkdUSChiYXNlTmFtZSk7CisgICAgQ0hFQ0tfU1RSSU5HX0xFTkdUSChjbGFzc05hbWUpOworICAgIENIRUNLX1NUUklOR19MRU5HVEgodXNlKTsKIAogICAgIHJldHVybiAoUHlPYmplY3QgKikgVGthcHBfTmV3KHNjcmVlbk5hbWUsIGNsYXNzTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmFjdGl2ZSwgd2FudG9iamVjdHMsICAgICB3YW50VGssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJhY3RpdmUsIHdhbnRvYmplY3RzLCB3YW50VGssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3luYywgdXNlKTsKIH0KIApAQCAtMzAzMiw4ICszMDcxLDcgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIFRraW50ZXJfYnVzeXdhaXRpbnRlcnZhbCA9IG5ld192YWw7Ci0gICAgUHlfSU5DUkVGKFB5X05vbmUpOwotICAgIHJldHVybiBQeV9Ob25lOworICAgIFB5X1JFVFVSTl9OT05FOwogfQogCiBzdGF0aWMgY2hhciBzZXRidXN5d2FpdGludGVydmFsX2RvY1tdID0KQEAgLTMxNjYsMjcgKzMyMDQsNiBAQAogfQogCiAKLS8qIGFsbCBlcnJvcnMgd2lsbCBiZSBjaGVja2VkIGluIG9uZSBmZWxsIHN3b29wIGluIGluaXRfdGtpbnRlcigpICovCi1zdGF0aWMgdm9pZAotaW5zX2xvbmcoUHlPYmplY3QgKmQsIGNoYXIgKm5hbWUsIGxvbmcgdmFsKQotewotICAgIFB5T2JqZWN0ICp2ID0gUHlMb25nX0Zyb21Mb25nKHZhbCk7Ci0gICAgaWYgKHYpIHsKLSAgICAgICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgbmFtZSwgdik7Ci0gICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICB9Ci19Ci1zdGF0aWMgdm9pZAotaW5zX3N0cmluZyhQeU9iamVjdCAqZCwgY2hhciAqbmFtZSwgY2hhciAqdmFsKQotewotICAgIFB5T2JqZWN0ICp2ID0gUHlVbmljb2RlX0Zyb21TdHJpbmcodmFsKTsKLSAgICBpZiAodikgewotICAgICAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhkLCBuYW1lLCB2KTsKLSAgICAgICAgUHlfREVDUkVGKHYpOwotICAgIH0KLX0KLQotCiBzdGF0aWMgc3RydWN0IFB5TW9kdWxlRGVmIF90a2ludGVybW9kdWxlID0gewogICAgIFB5TW9kdWxlRGVmX0hFQURfSU5JVCwKICAgICAiX3RraW50ZXIiLApAQCAtMzIwMiw0NSArMzIxOSwxMTEgQEAKIFB5TU9ESU5JVF9GVU5DCiBQeUluaXRfX3RraW50ZXIodm9pZCkKIHsKLSAgICBQeU9iamVjdCAqbSwgKmQsICp1ZXhlLCAqY2V4ZTsKLQotICAgIGlmIChQeVR5cGVfUmVhZHkoJlRrYXBwX1R5cGUpIDwgMCkKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgIFB5T2JqZWN0ICptLCAqdWV4ZSwgKmNleGUsICpvOwogCiAjaWZkZWYgV0lUSF9USFJFQUQKICAgICB0Y2xfbG9jayA9IFB5VGhyZWFkX2FsbG9jYXRlX2xvY2soKTsKKyAgICBpZiAodGNsX2xvY2sgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAjZW5kaWYKIAogICAgIG0gPSBQeU1vZHVsZV9DcmVhdGUoJl90a2ludGVybW9kdWxlKTsKICAgICBpZiAobSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGQgPSBQeU1vZHVsZV9HZXREaWN0KG0pOwotICAgIFRraW50ZXJfVGNsRXJyb3IgPSBQeUVycl9OZXdFeGNlcHRpb24oIl90a2ludGVyLlRjbEVycm9yIiwgTlVMTCwgTlVMTCk7Ci0gICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgIlRjbEVycm9yIiwgVGtpbnRlcl9UY2xFcnJvcik7Ci0KLSAgICBpbnNfbG9uZyhkLCAiUkVBREFCTEUiLCBUQ0xfUkVBREFCTEUpOwotICAgIGluc19sb25nKGQsICJXUklUQUJMRSIsIFRDTF9XUklUQUJMRSk7Ci0gICAgaW5zX2xvbmcoZCwgIkVYQ0VQVElPTiIsIFRDTF9FWENFUFRJT04pOwotICAgIGluc19sb25nKGQsICJXSU5ET1dfRVZFTlRTIiwgVENMX1dJTkRPV19FVkVOVFMpOwotICAgIGluc19sb25nKGQsICJGSUxFX0VWRU5UUyIsIFRDTF9GSUxFX0VWRU5UUyk7Ci0gICAgaW5zX2xvbmcoZCwgIlRJTUVSX0VWRU5UUyIsIFRDTF9USU1FUl9FVkVOVFMpOwotICAgIGluc19sb25nKGQsICJJRExFX0VWRU5UUyIsIFRDTF9JRExFX0VWRU5UUyk7Ci0gICAgaW5zX2xvbmcoZCwgIkFMTF9FVkVOVFMiLCBUQ0xfQUxMX0VWRU5UUyk7Ci0gICAgaW5zX2xvbmcoZCwgIkRPTlRfV0FJVCIsIFRDTF9ET05UX1dBSVQpOwotICAgIGluc19zdHJpbmcoZCwgIlRLX1ZFUlNJT04iLCBUS19WRVJTSU9OKTsKLSAgICBpbnNfc3RyaW5nKGQsICJUQ0xfVkVSU0lPTiIsIFRDTF9WRVJTSU9OKTsKLQotICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJUa2FwcFR5cGUiLCAoUHlPYmplY3QgKikmVGthcHBfVHlwZSk7Ci0KLSAgICBpZiAoUHlUeXBlX1JlYWR5KCZUa3R0X1R5cGUpIDwgMCkgeworICAgIG8gPSBQeUVycl9OZXdFeGNlcHRpb24oIl90a2ludGVyLlRjbEVycm9yIiwgTlVMTCwgTlVMTCk7CisgICAgaWYgKG8gPT0gTlVMTCkgewogICAgICAgICBQeV9ERUNSRUYobSk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAiVGt0dFR5cGUiLCAoUHlPYmplY3QgKikmVGt0dF9UeXBlKTsKKyAgICBQeV9JTkNSRUYobyk7CisgICAgaWYgKFB5TW9kdWxlX0FkZE9iamVjdChtLCAiVGNsRXJyb3IiLCBvKSkgeworICAgICAgICBQeV9ERUNSRUYobyk7CisgICAgICAgIFB5X0RFQ1JFRihtKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIFRraW50ZXJfVGNsRXJyb3IgPSBvOwogCi0gICAgUHlfVFlQRSgmUHlUY2xPYmplY3RfVHlwZSkgPSAmUHlUeXBlX1R5cGU7Ci0gICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgIlRjbF9PYmoiLCAoUHlPYmplY3QgKikmUHlUY2xPYmplY3RfVHlwZSk7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSRUFEQUJMRSIsIFRDTF9SRUFEQUJMRSkpIHsKKyAgICAgICAgUHlfREVDUkVGKG0pOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJXUklUQUJMRSIsIFRDTF9XUklUQUJMRSkpIHsKKyAgICAgICAgUHlfREVDUkVGKG0pOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJFWENFUFRJT04iLCBUQ0xfRVhDRVBUSU9OKSkgeworICAgICAgICBQeV9ERUNSRUYobSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIldJTkRPV19FVkVOVFMiLCBUQ0xfV0lORE9XX0VWRU5UUykpIHsKKyAgICAgICAgUHlfREVDUkVGKG0pOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJGSUxFX0VWRU5UUyIsIFRDTF9GSUxFX0VWRU5UUykpIHsKKyAgICAgICAgUHlfREVDUkVGKG0pOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUSU1FUl9FVkVOVFMiLCBUQ0xfVElNRVJfRVZFTlRTKSkgeworICAgICAgICBQeV9ERUNSRUYobSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklETEVfRVZFTlRTIiwgVENMX0lETEVfRVZFTlRTKSkgeworICAgICAgICBQeV9ERUNSRUYobSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFMTF9FVkVOVFMiLCBUQ0xfQUxMX0VWRU5UUykpIHsKKyAgICAgICAgUHlfREVDUkVGKG0pOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJET05UX1dBSVQiLCBUQ0xfRE9OVF9XQUlUKSkgeworICAgICAgICBQeV9ERUNSRUYobSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAoUHlNb2R1bGVfQWRkU3RyaW5nQ29uc3RhbnQobSwgIlRLX1ZFUlNJT04iLCBUS19WRVJTSU9OKSkgeworICAgICAgICBQeV9ERUNSRUYobSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAoUHlNb2R1bGVfQWRkU3RyaW5nQ29uc3RhbnQobSwgIlRDTF9WRVJTSU9OIiwgVENMX1ZFUlNJT04pKSB7CisgICAgICAgIFB5X0RFQ1JFRihtKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgbyA9IFB5VHlwZV9Gcm9tU3BlYygmVGthcHBfVHlwZV9zcGVjKTsKKyAgICBpZiAobyA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRihtKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmIChQeU1vZHVsZV9BZGRPYmplY3QobSwgIlRrYXBwVHlwZSIsIG8pKSB7CisgICAgICAgIFB5X0RFQ1JFRihvKTsKKyAgICAgICAgUHlfREVDUkVGKG0pOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgVGthcHBfVHlwZSA9IG87CisKKyAgICBvID0gUHlUeXBlX0Zyb21TcGVjKCZUa3R0X1R5cGVfc3BlYyk7CisgICAgaWYgKG8gPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYobSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAoUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJUa3R0VHlwZSIsIG8pKSB7CisgICAgICAgIFB5X0RFQ1JFRihvKTsKKyAgICAgICAgUHlfREVDUkVGKG0pOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgVGt0dF9UeXBlID0gbzsKKworICAgIG8gPSBQeVR5cGVfRnJvbVNwZWMoJlB5VGNsT2JqZWN0X1R5cGVfc3BlYyk7CisgICAgaWYgKG8gPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYobSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAoUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJUY2xfT2JqIiwgbykpIHsKKyAgICAgICAgUHlfREVDUkVGKG8pOworICAgICAgICBQeV9ERUNSRUYobSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBQeVRjbE9iamVjdF9UeXBlID0gbzsKIAogI2lmZGVmIFRLX0FRVUEKICAgICAvKiBUa19NYWNPU1hTZXR1cFRrTm90aWZpZXIgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIFRjbCdzIHN1YnN5c3RlbXMKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3RyYWNlbWFsbG9jLmMgYi9Nb2R1bGVzL190cmFjZW1hbGxvYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwOWY0ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL190cmFjZW1hbGxvYy5jCkBAIC0wLDAgKzEsMTQyOSBAQAorI2luY2x1ZGUgIlB5dGhvbi5oIgorI2luY2x1ZGUgImhhc2h0YWJsZS5oIgorI2luY2x1ZGUgImZyYW1lb2JqZWN0LmgiCisjaW5jbHVkZSAicHl0aHJlYWQuaCIKKyNpbmNsdWRlICJvc2RlZnMuaCIKKworLyogVHJhY2UgbWVtb3J5IGJsb2NrcyBhbGxvY2F0ZWQgYnkgUHlNZW1fUmF3TWFsbG9jKCkgKi8KKyNkZWZpbmUgVFJBQ0VfUkFXX01BTExPQworCisvKiBGb3J3YXJkIGRlY2xhcmF0aW9uICovCitzdGF0aWMgdm9pZCB0cmFjZW1hbGxvY19zdG9wKHZvaWQpOworc3RhdGljIHZvaWQqIHJhd19tYWxsb2Moc2l6ZV90IHNpemUpOworc3RhdGljIHZvaWQgcmF3X2ZyZWUodm9pZCAqcHRyKTsKKworI2lmZGVmIFB5X0RFQlVHCisjICBkZWZpbmUgVFJBQ0VfREVCVUcKKyNlbmRpZgorCisjZGVmaW5lIF9TVFIoVkFMKSAjVkFMCisjZGVmaW5lIFNUUihWQUwpIF9TVFIoVkFMKQorCisvKiBQcm90ZWN0ZWQgYnkgdGhlIEdJTCAqLworc3RhdGljIHN0cnVjdCB7CisgICAgUHlNZW1BbGxvY2F0b3IgbWVtOworICAgIFB5TWVtQWxsb2NhdG9yIHJhdzsKKyAgICBQeU1lbUFsbG9jYXRvciBvYmo7Cit9IGFsbG9jYXRvcnM7CisKK3N0YXRpYyBzdHJ1Y3QgeworICAgIC8qIE1vZHVsZSBpbml0aWFsaXplZD8KKyAgICAgICBWYXJpYWJsZSBwcm90ZWN0ZWQgYnkgdGhlIEdJTCAqLworICAgIGVudW0geworICAgICAgICBUUkFDRU1BTExPQ19OT1RfSU5JVElBTElaRUQsCisgICAgICAgIFRSQUNFTUFMTE9DX0lOSVRJQUxJWkVELAorICAgICAgICBUUkFDRU1BTExPQ19GSU5BTElaRUQKKyAgICB9IGluaXRpYWxpemVkOworCisgICAgLyogSXMgdHJhY2VtYWxsb2MgdHJhY2luZyBtZW1vcnkgYWxsb2NhdGlvbnM/CisgICAgICAgVmFyaWFibGUgcHJvdGVjdGVkIGJ5IHRoZSBHSUwgKi8KKyAgICBpbnQgdHJhY2luZzsKKworICAgIC8qIGxpbWl0IG9mIHRoZSBudW1iZXIgb2YgZnJhbWVzIGluIGEgdHJhY2ViYWNrLCAxIGJ5IGRlZmF1bHQuCisgICAgICAgVmFyaWFibGUgcHJvdGVjdGVkIGJ5IHRoZSBHSUwuICovCisgICAgaW50IG1heF9uZnJhbWU7Cit9IHRyYWNlbWFsbG9jX2NvbmZpZyA9IHtUUkFDRU1BTExPQ19OT1RfSU5JVElBTElaRUQsIDAsIDF9OworCisjaWYgZGVmaW5lZChUUkFDRV9SQVdfTUFMTE9DKSAmJiBkZWZpbmVkKFdJVEhfVEhSRUFEKQorLyogVGhpcyBsb2NrIGlzIG5lZWRlZCBiZWNhdXNlIHRyYWNlbWFsbG9jX2ZyZWUoKSBpcyBjYWxsZWQgd2l0aG91dAorICAgdGhlIEdJTCBoZWxkIGZyb20gUHlNZW1fUmF3RnJlZSgpLiBJdCBjYW5ub3QgYWNxdWlyZSB0aGUgbG9jayBiZWNhdXNlIGl0CisgICB3b3VsZCBpbnRyb2R1Y2UgYSBkZWFkbG9jayBpbiBQeVRocmVhZFN0YXRlX0RlbGV0ZUN1cnJlbnQoKS4gKi8KK3N0YXRpYyBQeVRocmVhZF90eXBlX2xvY2sgdGFibGVzX2xvY2s7CisjICBkZWZpbmUgVEFCTEVTX0xPQ0soKSBQeVRocmVhZF9hY3F1aXJlX2xvY2sodGFibGVzX2xvY2ssIDEpCisjICBkZWZpbmUgVEFCTEVTX1VOTE9DSygpIFB5VGhyZWFkX3JlbGVhc2VfbG9jayh0YWJsZXNfbG9jaykKKyNlbHNlCisgICAvKiB2YXJpYWJsZXMgYXJlIHByb3RlY3RlZCBieSB0aGUgR0lMICovCisjICBkZWZpbmUgVEFCTEVTX0xPQ0soKQorIyAgZGVmaW5lIFRBQkxFU19VTkxPQ0soKQorI2VuZGlmCisKKy8qIFBhY2sgdGhlIGZyYW1lX3Qgc3RydWN0dXJlIHRvIHJlZHVjZSB0aGUgbWVtb3J5IGZvb3RwcmludCBvbiA2NC1iaXQKKyAgIGFyY2hpdGVjdHVyZXM6IDEyIGJ5dGVzIGluc3RlYWQgb2YgMTYuIFRoaXMgb3B0aW1pemF0aW9uIG1pZ2h0IHByb2R1Y2UKKyAgIFNJR0JVUyBvbiBhcmNoaXRlY3R1cmVzIG5vdCBzdXBwb3J0aW5nIHVuYWxpZ25lZCBtZW1vcnkgYWNjZXNzZXMgKDY0LWJpdAorICAgTUlQUyBDUFU/KTogb24gc3VjaCBhcmNoaXRlY3R1cmUsIHRoZSBzdHJ1Y3R1cmUgbXVzdCBub3QgYmUgcGFja2VkLiAqLwordHlwZWRlZiBzdHJ1Y3QKKyNpZmRlZiBfX0dOVUNfXworX19hdHRyaWJ1dGVfXygocGFja2VkKSkKKyNlbGlmIGRlZmluZWQoX01TQ19WRVIpCitfZGVjbHNwZWMoYWxpZ24oNCkpCisjZW5kaWYKK3sKKyAgICBQeU9iamVjdCAqZmlsZW5hbWU7CisgICAgaW50IGxpbmVubzsKK30gZnJhbWVfdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIFB5X3VoYXNoX3QgaGFzaDsKKyAgICBpbnQgbmZyYW1lOworICAgIGZyYW1lX3QgZnJhbWVzWzFdOworfSB0cmFjZWJhY2tfdDsKKworI2RlZmluZSBUUkFDRUJBQ0tfU0laRShORlJBTUUpIFwKKyAgICAgICAgKHNpemVvZih0cmFjZWJhY2tfdCkgKyBzaXplb2YoZnJhbWVfdCkgKiAoTkZSQU1FIC0gMSkpCisKKyNkZWZpbmUgTUFYX05GUkFNRSBcCisgICAgICAgICgoSU5UX01BWCAtIHNpemVvZih0cmFjZWJhY2tfdCkpIC8gc2l6ZW9mKGZyYW1lX3QpICsgMSkKKworc3RhdGljIFB5T2JqZWN0ICp1bmtub3duX2ZpbGVuYW1lID0gTlVMTDsKK3N0YXRpYyB0cmFjZWJhY2tfdCB0cmFjZW1hbGxvY19lbXB0eV90cmFjZWJhY2s7CisKKy8qIFRyYWNlIG9mIGEgbWVtb3J5IGJsb2NrICovCit0eXBlZGVmIHN0cnVjdCB7CisgICAgLyogU2l6ZSBvZiB0aGUgbWVtb3J5IGJsb2NrIGluIGJ5dGVzICovCisgICAgc2l6ZV90IHNpemU7CisKKyAgICAvKiBUcmFjZWJhY2sgd2hlcmUgdGhlIG1lbW9yeSBibG9jayB3YXMgYWxsb2NhdGVkICovCisgICAgdHJhY2ViYWNrX3QgKnRyYWNlYmFjazsKK30gdHJhY2VfdDsKKworLyogU2l6ZSBpbiBieXRlcyBvZiBjdXJyZW50bHkgdHJhY2VkIG1lbW9yeS4KKyAgIFByb3RlY3RlZCBieSBUQUJMRVNfTE9DSygpLiAqLworc3RhdGljIHNpemVfdCB0cmFjZW1hbGxvY190cmFjZWRfbWVtb3J5ID0gMDsKKworLyogUGVhayBzaXplIGluIGJ5dGVzIG9mIHRyYWNlZCBtZW1vcnkuCisgICBQcm90ZWN0ZWQgYnkgVEFCTEVTX0xPQ0soKS4gKi8KK3N0YXRpYyBzaXplX3QgdHJhY2VtYWxsb2NfcGVha190cmFjZWRfbWVtb3J5ID0gMDsKKworLyogSGFzaCB0YWJsZSB1c2VkIGFzIGEgc2V0IHRvIGludGVybiBmaWxlbmFtZXM6CisgICBQeU9iamVjdCogPT4gUHlPYmplY3QqLgorICAgUHJvdGVjdGVkIGJ5IHRoZSBHSUwgKi8KK3N0YXRpYyBfUHlfaGFzaHRhYmxlX3QgKnRyYWNlbWFsbG9jX2ZpbGVuYW1lcyA9IE5VTEw7CisKKy8qIEJ1ZmZlciB0byBzdG9yZSBhIG5ldyB0cmFjZWJhY2sgaW4gdHJhY2ViYWNrX25ldygpLgorICAgUHJvdGVjdGVkIGJ5IHRoZSBHSUwuICovCitzdGF0aWMgdHJhY2ViYWNrX3QgKnRyYWNlbWFsbG9jX3RyYWNlYmFjayA9IE5VTEw7CisKKy8qIEhhc2ggdGFibGUgdXNlZCBhcyBhIHNldCB0byBpbnRlcm4gdHJhY2ViYWNrczoKKyAgIHRyYWNlYmFja190KiA9PiB0cmFjZWJhY2tfdCoKKyAgIFByb3RlY3RlZCBieSB0aGUgR0lMICovCitzdGF0aWMgX1B5X2hhc2h0YWJsZV90ICp0cmFjZW1hbGxvY190cmFjZWJhY2tzID0gTlVMTDsKKworLyogcG9pbnRlciAodm9pZCopID0+IHRyYWNlICh0cmFjZV90KS4KKyAgIFByb3RlY3RlZCBieSBUQUJMRVNfTE9DSygpLiAqLworc3RhdGljIF9QeV9oYXNodGFibGVfdCAqdHJhY2VtYWxsb2NfdHJhY2VzID0gTlVMTDsKKworI2lmZGVmIFRSQUNFX0RFQlVHCitzdGF0aWMgdm9pZAordHJhY2VtYWxsb2NfZXJyb3IoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisgICAgdmFfbGlzdCBhcDsKKyAgICBmcHJpbnRmKHN0ZGVyciwgInRyYWNlbWFsbG9jOiAiKTsKKyAgICB2YV9zdGFydChhcCwgZm9ybWF0KTsKKyAgICB2ZnByaW50ZihzdGRlcnIsIGZvcm1hdCwgYXApOworICAgIHZhX2VuZChhcCk7CisgICAgZnByaW50ZihzdGRlcnIsICJcbiIpOworICAgIGZmbHVzaChzdGRlcnIpOworfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKFdJVEhfVEhSRUFEKSAmJiBkZWZpbmVkKFRSQUNFX1JBV19NQUxMT0MpCisjZGVmaW5lIFJFRU5UUkFOVF9USFJFQURMT0NBTAorCisvKiBJZiB5b3VyIE9TIGRvZXMgbm90IHByb3ZpZGUgbmF0aXZlIHRocmVhZCBsb2NhbCBzdG9yYWdlLCB5b3UgY2FuIGltcGxlbWVudAorICAgaXQgbWFudWFsbHkgdXNpbmcgYSBsb2NrLiBGdW5jdGlvbnMgb2YgdGhyZWFkLmMgY2Fubm90IGJlIHVzZWQgYmVjYXVzZQorICAgdGhleSB1c2UgUHlNZW1fUmF3TWFsbG9jKCkgd2hpY2ggbGVhZHMgdG8gYSByZWVudHJhbnQgY2FsbC4gKi8KKyNpZiAhKGRlZmluZWQoX1BPU0lYX1RIUkVBRFMpIHx8IGRlZmluZWQoTlRfVEhSRUFEUykpCisjICBlcnJvciAibmVlZCBuYXRpdmUgdGhyZWFkIGxvY2FsIHN0b3JhZ2UgKFRMUykiCisjZW5kaWYKKworc3RhdGljIGludCB0cmFjZW1hbGxvY19yZWVudHJhbnRfa2V5OworCisvKiBBbnkgbm9uLU5VTEwgcG9pbnRlciBjYW4gYmUgdXNlZCAqLworI2RlZmluZSBSRUVOVFJBTlQgUHlfVHJ1ZQorCitzdGF0aWMgaW50CitnZXRfcmVlbnRyYW50KHZvaWQpCit7CisgICAgdm9pZCAqcHRyID0gUHlUaHJlYWRfZ2V0X2tleV92YWx1ZSh0cmFjZW1hbGxvY19yZWVudHJhbnRfa2V5KTsKKyAgICBpZiAocHRyICE9IE5VTEwpIHsKKyAgICAgICAgYXNzZXJ0KHB0ciA9PSBSRUVOVFJBTlQpOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisgICAgZWxzZQorICAgICAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK3NldF9yZWVudHJhbnQoaW50IHJlZW50cmFudCkKK3sKKyAgICBhc3NlcnQocmVlbnRyYW50ID09IDAgfHwgcmVlbnRyYW50ID09IDEpOworICAgIGlmIChyZWVudHJhbnQpIHsKKyAgICAgICAgYXNzZXJ0KFB5VGhyZWFkX2dldF9rZXlfdmFsdWUodHJhY2VtYWxsb2NfcmVlbnRyYW50X2tleSkgPT0gTlVMTCk7CisgICAgICAgIFB5VGhyZWFkX3NldF9rZXlfdmFsdWUodHJhY2VtYWxsb2NfcmVlbnRyYW50X2tleSwgUkVFTlRSQU5UKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGFzc2VydChQeVRocmVhZF9nZXRfa2V5X3ZhbHVlKHRyYWNlbWFsbG9jX3JlZW50cmFudF9rZXkpID09IFJFRU5UUkFOVCk7CisgICAgICAgIFB5VGhyZWFkX3NldF9rZXlfdmFsdWUodHJhY2VtYWxsb2NfcmVlbnRyYW50X2tleSwgTlVMTCk7CisgICAgfQorfQorCisjZWxzZQorCisvKiBXSVRIX1RIUkVBRCBub3QgZGVmaW5lZDogUHl0aG9uIGNvbXBpbGVkIHdpdGhvdXQgdGhyZWFkcywKKyAgIG9yIFRSQUNFX1JBV19NQUxMT0Mgbm90IGRlZmluZWQ6IHZhcmlhYmxlIHByb3RlY3RlZCBieSB0aGUgR0lMICovCitzdGF0aWMgaW50IHRyYWNlbWFsbG9jX3JlZW50cmFudCA9IDA7CisKK3N0YXRpYyBpbnQKK2dldF9yZWVudHJhbnQodm9pZCkKK3sKKyAgICByZXR1cm4gdHJhY2VtYWxsb2NfcmVlbnRyYW50OworfQorCitzdGF0aWMgdm9pZAorc2V0X3JlZW50cmFudChpbnQgcmVlbnRyYW50KQoreworICAgIGFzc2VydCghcmVlbnRyYW50IHx8ICFnZXRfcmVlbnRyYW50KCkpOworICAgIHRyYWNlbWFsbG9jX3JlZW50cmFudCA9IHJlZW50cmFudDsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50CitoYXNodGFibGVfY29tcGFyZV91bmljb2RlKGNvbnN0IHZvaWQgKmtleSwgY29uc3QgX1B5X2hhc2h0YWJsZV9lbnRyeV90ICplbnRyeSkKK3sKKyAgICBpZiAoa2V5ICE9IE5VTEwgJiYgZW50cnktPmtleSAhPSBOVUxMKQorICAgICAgICByZXR1cm4gKFB5VW5pY29kZV9Db21wYXJlKChQeU9iamVjdCAqKWtleSwgKFB5T2JqZWN0ICopZW50cnktPmtleSkgPT0gMCk7CisgICAgZWxzZQorICAgICAgICByZXR1cm4ga2V5ID09IGVudHJ5LT5rZXk7Cit9CisKK3N0YXRpYyBfUHlfaGFzaHRhYmxlX2FsbG9jYXRvcl90IGhhc2h0YWJsZV9hbGxvYyA9IHttYWxsb2MsIGZyZWV9OworCitzdGF0aWMgX1B5X2hhc2h0YWJsZV90ICoKK2hhc2h0YWJsZV9uZXcoc2l6ZV90IGRhdGFfc2l6ZSwKKyAgICAgICAgICAgICAgX1B5X2hhc2h0YWJsZV9oYXNoX2Z1bmMgaGFzaF9mdW5jLAorICAgICAgICAgICAgICBfUHlfaGFzaHRhYmxlX2NvbXBhcmVfZnVuYyBjb21wYXJlX2Z1bmMpCit7CisgICAgcmV0dXJuIF9QeV9oYXNodGFibGVfbmV3X2Z1bGwoZGF0YV9zaXplLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hfZnVuYywgY29tcGFyZV9mdW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwsIE5VTEwsICZoYXNodGFibGVfYWxsb2MpOworfQorCitzdGF0aWMgdm9pZCoKK3Jhd19tYWxsb2Moc2l6ZV90IHNpemUpCit7CisgICAgcmV0dXJuIGFsbG9jYXRvcnMucmF3Lm1hbGxvYyhhbGxvY2F0b3JzLnJhdy5jdHgsIHNpemUpOworfQorCitzdGF0aWMgdm9pZAorcmF3X2ZyZWUodm9pZCAqcHRyKQoreworICAgIGFsbG9jYXRvcnMucmF3LmZyZWUoYWxsb2NhdG9ycy5yYXcuY3R4LCBwdHIpOworfQorCitzdGF0aWMgUHlfdWhhc2hfdAoraGFzaHRhYmxlX2hhc2hfdHJhY2ViYWNrKGNvbnN0IHZvaWQgKmtleSkKK3sKKyAgICBjb25zdCB0cmFjZWJhY2tfdCAqdHJhY2ViYWNrID0ga2V5OworICAgIHJldHVybiB0cmFjZWJhY2stPmhhc2g7Cit9CisKK3N0YXRpYyBpbnQKK2hhc2h0YWJsZV9jb21wYXJlX3RyYWNlYmFjayhjb25zdCB0cmFjZWJhY2tfdCAqdHJhY2ViYWNrMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfUHlfaGFzaHRhYmxlX2VudHJ5X3QgKmhlKQoreworICAgIGNvbnN0IHRyYWNlYmFja190ICp0cmFjZWJhY2syID0gaGUtPmtleTsKKyAgICBjb25zdCBmcmFtZV90ICpmcmFtZTEsICpmcmFtZTI7CisgICAgaW50IGk7CisKKyAgICBpZiAodHJhY2ViYWNrMS0+bmZyYW1lICE9IHRyYWNlYmFjazItPm5mcmFtZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBmb3IgKGk9MDsgaSA8IHRyYWNlYmFjazEtPm5mcmFtZTsgaSsrKSB7CisgICAgICAgIGZyYW1lMSA9ICZ0cmFjZWJhY2sxLT5mcmFtZXNbaV07CisgICAgICAgIGZyYW1lMiA9ICZ0cmFjZWJhY2syLT5mcmFtZXNbaV07CisKKyAgICAgICAgaWYgKGZyYW1lMS0+bGluZW5vICE9IGZyYW1lMi0+bGluZW5vKQorICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgaWYgKGZyYW1lMS0+ZmlsZW5hbWUgIT0gZnJhbWUyLT5maWxlbmFtZSkgeworICAgICAgICAgICAgYXNzZXJ0KFB5VW5pY29kZV9Db21wYXJlKGZyYW1lMS0+ZmlsZW5hbWUsIGZyYW1lMi0+ZmlsZW5hbWUpICE9IDApOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkCit0cmFjZW1hbGxvY19nZXRfZnJhbWUoUHlGcmFtZU9iamVjdCAqcHlmcmFtZSwgZnJhbWVfdCAqZnJhbWUpCit7CisgICAgUHlDb2RlT2JqZWN0ICpjb2RlOworICAgIFB5T2JqZWN0ICpmaWxlbmFtZTsKKyAgICBfUHlfaGFzaHRhYmxlX2VudHJ5X3QgKmVudHJ5OworCisgICAgZnJhbWUtPmZpbGVuYW1lID0gdW5rbm93bl9maWxlbmFtZTsKKyAgICBmcmFtZS0+bGluZW5vID0gUHlGcmFtZV9HZXRMaW5lTnVtYmVyKHB5ZnJhbWUpOworICAgIGFzc2VydChmcmFtZS0+bGluZW5vID49IDApOworICAgIGlmIChmcmFtZS0+bGluZW5vIDwgMCkKKyAgICAgICAgZnJhbWUtPmxpbmVubyA9IDA7CisKKyAgICBjb2RlID0gcHlmcmFtZS0+Zl9jb2RlOworICAgIGlmIChjb2RlID09IE5VTEwpIHsKKyNpZmRlZiBUUkFDRV9ERUJVRworICAgICAgICB0cmFjZW1hbGxvY19lcnJvcigiZmFpbGVkIHRvIGdldCB0aGUgY29kZSBvYmplY3Qgb2YgdGhlIGZyYW1lIik7CisjZW5kaWYKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChjb2RlLT5jb19maWxlbmFtZSA9PSBOVUxMKSB7CisjaWZkZWYgVFJBQ0VfREVCVUcKKyAgICAgICAgdHJhY2VtYWxsb2NfZXJyb3IoImZhaWxlZCB0byBnZXQgdGhlIGZpbGVuYW1lIG9mIHRoZSBjb2RlIG9iamVjdCIpOworI2VuZGlmCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBmaWxlbmFtZSA9IGNvZGUtPmNvX2ZpbGVuYW1lOworICAgIGFzc2VydChmaWxlbmFtZSAhPSBOVUxMKTsKKyAgICBpZiAoZmlsZW5hbWUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFQeVVuaWNvZGVfQ2hlY2soZmlsZW5hbWUpKSB7CisjaWZkZWYgVFJBQ0VfREVCVUcKKyAgICAgICAgdHJhY2VtYWxsb2NfZXJyb3IoImZpbGVuYW1lIGlzIG5vdCBhbiB1bmljb2RlIHN0cmluZyIpOworI2VuZGlmCisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKCFQeVVuaWNvZGVfSVNfUkVBRFkoZmlsZW5hbWUpKSB7CisgICAgICAgIC8qIERvbid0IG1ha2UgYSBVbmljb2RlIHN0cmluZyByZWFkeSB0byBhdm9pZCByZWVudHJhbnQgY2FsbHMKKyAgICAgICAgICAgdG8gdHJhY2VtYWxsb2NfbWFsbG9jKCkgb3IgdHJhY2VtYWxsb2NfcmVhbGxvYygpICovCisjaWZkZWYgVFJBQ0VfREVCVUcKKyAgICAgICAgdHJhY2VtYWxsb2NfZXJyb3IoImZpbGVuYW1lIGlzIG5vdCBhIHJlYWR5IHVuaWNvZGUgc3RyaW5nIik7CisjZW5kaWYKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8qIGludGVybiB0aGUgZmlsZW5hbWUgKi8KKyAgICBlbnRyeSA9IF9QeV9oYXNodGFibGVfZ2V0X2VudHJ5KHRyYWNlbWFsbG9jX2ZpbGVuYW1lcywgZmlsZW5hbWUpOworICAgIGlmIChlbnRyeSAhPSBOVUxMKSB7CisgICAgICAgIGZpbGVuYW1lID0gKFB5T2JqZWN0ICopZW50cnktPmtleTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIC8qIHRyYWNlbWFsbG9jX2ZpbGVuYW1lcyBpcyByZXNwb25zaWJsZSB0byBrZWVwIGEgcmVmZXJlbmNlCisgICAgICAgICAgIHRvIHRoZSBmaWxlbmFtZSAqLworICAgICAgICBQeV9JTkNSRUYoZmlsZW5hbWUpOworICAgICAgICBpZiAoX1B5X2hhc2h0YWJsZV9zZXQodHJhY2VtYWxsb2NfZmlsZW5hbWVzLCBmaWxlbmFtZSwgTlVMTCwgMCkgPCAwKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoZmlsZW5hbWUpOworI2lmZGVmIFRSQUNFX0RFQlVHCisgICAgICAgICAgICB0cmFjZW1hbGxvY19lcnJvcigiZmFpbGVkIHRvIGludGVybiB0aGUgZmlsZW5hbWUiKTsKKyNlbmRpZgorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgLyogdGhlIHRyYWNlbWFsbG9jX2ZpbGVuYW1lcyB0YWJsZSBrZWVwcyBhIHJlZmVyZW5jZSB0byB0aGUgZmlsZW5hbWUgKi8KKyAgICBmcmFtZS0+ZmlsZW5hbWUgPSBmaWxlbmFtZTsKK30KKworc3RhdGljIFB5X3VoYXNoX3QKK3RyYWNlYmFja19oYXNoKHRyYWNlYmFja190ICp0cmFjZWJhY2spCit7CisgICAgLyogY29kZSBiYXNlZCBvbiB0dXBsZWhhc2goKSBvZiBPYmplY3RzL3R1cGxlb2JqZWN0LmMgKi8KKyAgICBQeV91aGFzaF90IHgsIHk7ICAvKiBVbnNpZ25lZCBmb3IgZGVmaW5lZCBvdmVyZmxvdyBiZWhhdmlvci4gKi8KKyAgICBpbnQgbGVuID0gdHJhY2ViYWNrLT5uZnJhbWU7CisgICAgUHlfdWhhc2hfdCBtdWx0ID0gX1B5SEFTSF9NVUxUSVBMSUVSOworICAgIGZyYW1lX3QgKmZyYW1lOworCisgICAgeCA9IDB4MzQ1Njc4VUw7CisgICAgZnJhbWUgPSB0cmFjZWJhY2stPmZyYW1lczsKKyAgICB3aGlsZSAoLS1sZW4gPj0gMCkgeworICAgICAgICB5ID0gKFB5X3VoYXNoX3QpUHlPYmplY3RfSGFzaChmcmFtZS0+ZmlsZW5hbWUpOworICAgICAgICB5IF49IChQeV91aGFzaF90KWZyYW1lLT5saW5lbm87CisgICAgICAgIGZyYW1lKys7CisKKyAgICAgICAgeCA9ICh4IF4geSkgKiBtdWx0OworICAgICAgICAvKiB0aGUgY2FzdCBtaWdodCB0cnVuY2F0ZSBsZW47IHRoYXQgZG9lc24ndCBjaGFuZ2UgaGFzaCBzdGFiaWxpdHkgKi8KKyAgICAgICAgbXVsdCArPSAoUHlfdWhhc2hfdCkoODI1MjBVTCArIGxlbiArIGxlbik7CisgICAgfQorICAgIHggKz0gOTc1MzFVTDsKKyAgICByZXR1cm4geDsKK30KKworc3RhdGljIHZvaWQKK3RyYWNlYmFja19nZXRfZnJhbWVzKHRyYWNlYmFja190ICp0cmFjZWJhY2spCit7CisgICAgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlOworICAgIFB5RnJhbWVPYmplY3QgKnB5ZnJhbWU7CisKKyNpZmRlZiBXSVRIX1RIUkVBRAorICAgIHRzdGF0ZSA9IFB5R0lMU3RhdGVfR2V0VGhpc1RocmVhZFN0YXRlKCk7CisjZWxzZQorICAgIHRzdGF0ZSA9IFB5VGhyZWFkU3RhdGVfR2V0KCk7CisjZW5kaWYKKyAgICBpZiAodHN0YXRlID09IE5VTEwpIHsKKyNpZmRlZiBUUkFDRV9ERUJVRworICAgICAgICB0cmFjZW1hbGxvY19lcnJvcigiZmFpbGVkIHRvIGdldCB0aGUgY3VycmVudCB0aHJlYWQgc3RhdGUiKTsKKyNlbmRpZgorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZm9yIChweWZyYW1lID0gdHN0YXRlLT5mcmFtZTsgcHlmcmFtZSAhPSBOVUxMOyBweWZyYW1lID0gcHlmcmFtZS0+Zl9iYWNrKSB7CisgICAgICAgIHRyYWNlbWFsbG9jX2dldF9mcmFtZShweWZyYW1lLCAmdHJhY2ViYWNrLT5mcmFtZXNbdHJhY2ViYWNrLT5uZnJhbWVdKTsKKyAgICAgICAgYXNzZXJ0KHRyYWNlYmFjay0+ZnJhbWVzW3RyYWNlYmFjay0+bmZyYW1lXS5maWxlbmFtZSAhPSBOVUxMKTsKKyAgICAgICAgYXNzZXJ0KHRyYWNlYmFjay0+ZnJhbWVzW3RyYWNlYmFjay0+bmZyYW1lXS5saW5lbm8gPj0gMCk7CisgICAgICAgIHRyYWNlYmFjay0+bmZyYW1lKys7CisgICAgICAgIGlmICh0cmFjZWJhY2stPm5mcmFtZSA9PSB0cmFjZW1hbGxvY19jb25maWcubWF4X25mcmFtZSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHRyYWNlYmFja190ICoKK3RyYWNlYmFja19uZXcodm9pZCkKK3sKKyAgICB0cmFjZWJhY2tfdCAqdHJhY2ViYWNrOworICAgIF9QeV9oYXNodGFibGVfZW50cnlfdCAqZW50cnk7CisKKyNpZmRlZiBXSVRIX1RIUkVBRAorICAgIGFzc2VydChQeUdJTFN0YXRlX0NoZWNrKCkpOworI2VuZGlmCisKKyAgICAvKiBnZXQgZnJhbWVzICovCisgICAgdHJhY2ViYWNrID0gdHJhY2VtYWxsb2NfdHJhY2ViYWNrOworICAgIHRyYWNlYmFjay0+bmZyYW1lID0gMDsKKyAgICB0cmFjZWJhY2tfZ2V0X2ZyYW1lcyh0cmFjZWJhY2spOworICAgIGlmICh0cmFjZWJhY2stPm5mcmFtZSA9PSAwKQorICAgICAgICByZXR1cm4gJnRyYWNlbWFsbG9jX2VtcHR5X3RyYWNlYmFjazsKKyAgICB0cmFjZWJhY2stPmhhc2ggPSB0cmFjZWJhY2tfaGFzaCh0cmFjZWJhY2spOworCisgICAgLyogaW50ZXJuIHRoZSB0cmFjZWJhY2sgKi8KKyAgICBlbnRyeSA9IF9QeV9oYXNodGFibGVfZ2V0X2VudHJ5KHRyYWNlbWFsbG9jX3RyYWNlYmFja3MsIHRyYWNlYmFjayk7CisgICAgaWYgKGVudHJ5ICE9IE5VTEwpIHsKKyAgICAgICAgdHJhY2ViYWNrID0gKHRyYWNlYmFja190ICopZW50cnktPmtleTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHRyYWNlYmFja190ICpjb3B5OworICAgICAgICBzaXplX3QgdHJhY2ViYWNrX3NpemU7CisKKyAgICAgICAgdHJhY2ViYWNrX3NpemUgPSBUUkFDRUJBQ0tfU0laRSh0cmFjZWJhY2stPm5mcmFtZSk7CisKKyAgICAgICAgY29weSA9IHJhd19tYWxsb2ModHJhY2ViYWNrX3NpemUpOworICAgICAgICBpZiAoY29weSA9PSBOVUxMKSB7CisjaWZkZWYgVFJBQ0VfREVCVUcKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jX2Vycm9yKCJmYWlsZWQgdG8gaW50ZXJuIHRoZSB0cmFjZWJhY2s6IG1hbGxvYyBmYWlsZWQiKTsKKyNlbmRpZgorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgbWVtY3B5KGNvcHksIHRyYWNlYmFjaywgdHJhY2ViYWNrX3NpemUpOworCisgICAgICAgIGlmIChfUHlfaGFzaHRhYmxlX3NldCh0cmFjZW1hbGxvY190cmFjZWJhY2tzLCBjb3B5LCBOVUxMLCAwKSA8IDApIHsKKyAgICAgICAgICAgIHJhd19mcmVlKGNvcHkpOworI2lmZGVmIFRSQUNFX0RFQlVHCisgICAgICAgICAgICB0cmFjZW1hbGxvY19lcnJvcigiZmFpbGVkIHRvIGludGVybiB0aGUgdHJhY2ViYWNrOiBwdXRkYXRhIGZhaWxlZCIpOworI2VuZGlmCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICB0cmFjZWJhY2sgPSBjb3B5OworICAgIH0KKyAgICByZXR1cm4gdHJhY2ViYWNrOworfQorCitzdGF0aWMgaW50Cit0cmFjZW1hbGxvY19hZGRfdHJhY2Uodm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSkKK3sKKyAgICB0cmFjZWJhY2tfdCAqdHJhY2ViYWNrOworICAgIHRyYWNlX3QgdHJhY2U7CisgICAgaW50IHJlczsKKworI2lmZGVmIFdJVEhfVEhSRUFECisgICAgYXNzZXJ0KFB5R0lMU3RhdGVfQ2hlY2soKSk7CisjZW5kaWYKKworICAgIHRyYWNlYmFjayA9IHRyYWNlYmFja19uZXcoKTsKKyAgICBpZiAodHJhY2ViYWNrID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIHRyYWNlLnNpemUgPSBzaXplOworICAgIHRyYWNlLnRyYWNlYmFjayA9IHRyYWNlYmFjazsKKworICAgIHJlcyA9IF9QeV9IQVNIVEFCTEVfU0VUKHRyYWNlbWFsbG9jX3RyYWNlcywgcHRyLCB0cmFjZSk7CisgICAgaWYgKHJlcyA9PSAwKSB7CisgICAgICAgIGFzc2VydCh0cmFjZW1hbGxvY190cmFjZWRfbWVtb3J5IDw9IFBZX1NJWkVfTUFYIC0gc2l6ZSk7CisgICAgICAgIHRyYWNlbWFsbG9jX3RyYWNlZF9tZW1vcnkgKz0gc2l6ZTsKKyAgICAgICAgaWYgKHRyYWNlbWFsbG9jX3RyYWNlZF9tZW1vcnkgPiB0cmFjZW1hbGxvY19wZWFrX3RyYWNlZF9tZW1vcnkpCisgICAgICAgICAgICB0cmFjZW1hbGxvY19wZWFrX3RyYWNlZF9tZW1vcnkgPSB0cmFjZW1hbGxvY190cmFjZWRfbWVtb3J5OworICAgIH0KKworICAgIHJldHVybiByZXM7Cit9CisKK3N0YXRpYyB2b2lkCit0cmFjZW1hbGxvY19yZW1vdmVfdHJhY2Uodm9pZCAqcHRyKQoreworICAgIHRyYWNlX3QgdHJhY2U7CisKKyAgICBpZiAoX1B5X2hhc2h0YWJsZV9wb3AodHJhY2VtYWxsb2NfdHJhY2VzLCBwdHIsICZ0cmFjZSwgc2l6ZW9mKHRyYWNlKSkpIHsKKyAgICAgICAgYXNzZXJ0KHRyYWNlbWFsbG9jX3RyYWNlZF9tZW1vcnkgPj0gdHJhY2Uuc2l6ZSk7CisgICAgICAgIHRyYWNlbWFsbG9jX3RyYWNlZF9tZW1vcnkgLT0gdHJhY2Uuc2l6ZTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkKgordHJhY2VtYWxsb2NfbWFsbG9jKHZvaWQgKmN0eCwgc2l6ZV90IHNpemUpCit7CisgICAgUHlNZW1BbGxvY2F0b3IgKmFsbG9jID0gKFB5TWVtQWxsb2NhdG9yICopY3R4OworICAgIHZvaWQgKnB0cjsKKworICAgIHB0ciA9IGFsbG9jLT5tYWxsb2MoYWxsb2MtPmN0eCwgc2l6ZSk7CisgICAgaWYgKHB0ciA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIFRBQkxFU19MT0NLKCk7CisgICAgaWYgKHRyYWNlbWFsbG9jX2FkZF90cmFjZShwdHIsIHNpemUpIDwgMCkgeworICAgICAgICAvKiBGYWlsZWQgdG8gYWxsb2NhdGUgYSB0cmFjZSBmb3IgdGhlIG5ldyBtZW1vcnkgYmxvY2sgKi8KKyAgICAgICAgVEFCTEVTX1VOTE9DSygpOworICAgICAgICBhbGxvYy0+ZnJlZShhbGxvYy0+Y3R4LCBwdHIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgVEFCTEVTX1VOTE9DSygpOworICAgIHJldHVybiBwdHI7Cit9CisKK3N0YXRpYyB2b2lkKgordHJhY2VtYWxsb2NfcmVhbGxvYyh2b2lkICpjdHgsIHZvaWQgKnB0ciwgc2l6ZV90IG5ld19zaXplKQoreworICAgIFB5TWVtQWxsb2NhdG9yICphbGxvYyA9IChQeU1lbUFsbG9jYXRvciAqKWN0eDsKKyAgICB2b2lkICpwdHIyOworCisgICAgcHRyMiA9IGFsbG9jLT5yZWFsbG9jKGFsbG9jLT5jdHgsIHB0ciwgbmV3X3NpemUpOworICAgIGlmIChwdHIyID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKHB0ciAhPSBOVUxMKSB7CisgICAgICAgIC8qIGFuIGV4aXN0aW5nIG1lbW9yeSBibG9jayBoYXMgYmVlbiByZXNpemVkICovCisKKyAgICAgICAgVEFCTEVTX0xPQ0soKTsKKyAgICAgICAgdHJhY2VtYWxsb2NfcmVtb3ZlX3RyYWNlKHB0cik7CisKKyAgICAgICAgaWYgKHRyYWNlbWFsbG9jX2FkZF90cmFjZShwdHIyLCBuZXdfc2l6ZSkgPCAwKSB7CisgICAgICAgICAgICAvKiBNZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQuIFRoZSBlcnJvciBjYW5ub3QgYmUgcmVwb3J0ZWQgdG8KKyAgICAgICAgICAgICAgIHRoZSBjYWxsZXIsIGJlY2F1c2UgcmVhbGxvYygpIG1heSBhbHJlYWR5IGhhdmUgc2hyaW5rZWQgdGhlCisgICAgICAgICAgICAgICBtZW1vcnkgYmxvY2sgYW5kIHNvIHJlbW92ZWQgYnl0ZXMuCisKKyAgICAgICAgICAgICAgIFRoaXMgY2FzZSBpcyB2ZXJ5IHVubGlrZWx5OiBhbiBoYXNoIGVudHJ5IGhhcyBqdXN0IGJlZW4KKyAgICAgICAgICAgICAgIHJlbGVhc2VkLCBzbyB0aGUgaGFzaCB0YWJsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdCBvbmUgZnJlZSBlbnRyeS4KKworICAgICAgICAgICAgICAgVGhlIEdJTCBhbmQgdGhlIHRhYmxlIGxvY2sgZW5zdXJlcyB0aGF0IG9ubHkgb25lIHRocmVhZCBpcworICAgICAgICAgICAgICAgYWxsb2NhdGluZyBtZW1vcnkuICovCisgICAgICAgICAgICBhc3NlcnQoMCAmJiAic2hvdWxkIG5ldmVyIGhhcHBlbiIpOworICAgICAgICB9CisgICAgICAgIFRBQkxFU19VTkxPQ0soKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIC8qIG5ldyBhbGxvY2F0aW9uICovCisKKyAgICAgICAgVEFCTEVTX0xPQ0soKTsKKyAgICAgICAgaWYgKHRyYWNlbWFsbG9jX2FkZF90cmFjZShwdHIyLCBuZXdfc2l6ZSkgPCAwKSB7CisgICAgICAgICAgICAvKiBGYWlsZWQgdG8gYWxsb2NhdGUgYSB0cmFjZSBmb3IgdGhlIG5ldyBtZW1vcnkgYmxvY2sgKi8KKyAgICAgICAgICAgIFRBQkxFU19VTkxPQ0soKTsKKyAgICAgICAgICAgIGFsbG9jLT5mcmVlKGFsbG9jLT5jdHgsIHB0cjIpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgVEFCTEVTX1VOTE9DSygpOworICAgIH0KKyAgICByZXR1cm4gcHRyMjsKK30KKworc3RhdGljIHZvaWQKK3RyYWNlbWFsbG9jX2ZyZWUodm9pZCAqY3R4LCB2b2lkICpwdHIpCit7CisgICAgUHlNZW1BbGxvY2F0b3IgKmFsbG9jID0gKFB5TWVtQWxsb2NhdG9yICopY3R4OworCisgICAgaWYgKHB0ciA9PSBOVUxMKQorICAgICAgICByZXR1cm47CisKKyAgICAgLyogR0lMIGNhbm5vdCBiZSBsb2NrZWQgaW4gUHlNZW1fUmF3RnJlZSgpIGJlY2F1c2UgaXQgd291bGQgaW50cm9kdWNlCisgICAgICAgIGEgZGVhZGxvY2sgaW4gUHlUaHJlYWRTdGF0ZV9EZWxldGVDdXJyZW50KCkuICovCisKKyAgICBhbGxvYy0+ZnJlZShhbGxvYy0+Y3R4LCBwdHIpOworCisgICAgVEFCTEVTX0xPQ0soKTsKKyAgICB0cmFjZW1hbGxvY19yZW1vdmVfdHJhY2UocHRyKTsKKyAgICBUQUJMRVNfVU5MT0NLKCk7Cit9CisKK3N0YXRpYyB2b2lkKgordHJhY2VtYWxsb2NfbWFsbG9jX2dpbCh2b2lkICpjdHgsIHNpemVfdCBzaXplKQoreworICAgIHZvaWQgKnB0cjsKKworICAgIGlmIChnZXRfcmVlbnRyYW50KCkpIHsKKyAgICAgICAgUHlNZW1BbGxvY2F0b3IgKmFsbG9jID0gKFB5TWVtQWxsb2NhdG9yICopY3R4OworICAgICAgICByZXR1cm4gYWxsb2MtPm1hbGxvYyhhbGxvYy0+Y3R4LCBzaXplKTsKKyAgICB9CisKKyAgICAvKiBJZ25vcmUgcmVlbnRyYW50IGNhbGwuIFB5T2JqZXRfTWFsbG9jKCkgY2FsbHMgUHlNZW1fTWFsbG9jKCkgZm9yCisgICAgICAgYWxsb2NhdGlvbnMgbGFyZ2VyIHRoYW4gNTEyIGJ5dGVzLCBkb24ndCB0cmFjZSB0aGUgc2FtZSBtZW1vcnkKKyAgICAgICBhbGxvY2F0aW9uIHR3aWNlLiAqLworICAgIHNldF9yZWVudHJhbnQoMSk7CisKKyAgICBwdHIgPSB0cmFjZW1hbGxvY19tYWxsb2MoY3R4LCBzaXplKTsKKworICAgIHNldF9yZWVudHJhbnQoMCk7CisgICAgcmV0dXJuIHB0cjsKK30KKworc3RhdGljIHZvaWQqCit0cmFjZW1hbGxvY19yZWFsbG9jX2dpbCh2b2lkICpjdHgsIHZvaWQgKnB0ciwgc2l6ZV90IG5ld19zaXplKQoreworICAgIHZvaWQgKnB0cjI7CisKKyAgICBpZiAoZ2V0X3JlZW50cmFudCgpKSB7CisgICAgICAgIC8qIFJlZW50cmFudCBjYWxsIHRvIFB5TWVtX1JlYWxsb2MoKSBhbmQgUHlNZW1fUmF3UmVhbGxvYygpLgorICAgICAgICAgICBFeGFtcGxlOiBQeU1lbV9SYXdSZWFsbG9jKCkgaXMgY2FsbGVkIGludGVybmFsbHkgYnkgcHltYWxsb2MKKyAgICAgICAgICAgKF9QeU9iamVjdF9NYWxsb2MoKSBhbmQgIF9QeU9iamVjdF9SZWFsbG9jKCkpIHRvIGFsbG9jYXRlIGEgbmV3CisgICAgICAgICAgIGFyZW5hIChuZXdfYXJlbmEoKSkuICovCisgICAgICAgIFB5TWVtQWxsb2NhdG9yICphbGxvYyA9IChQeU1lbUFsbG9jYXRvciAqKWN0eDsKKworICAgICAgICBwdHIyID0gYWxsb2MtPnJlYWxsb2MoYWxsb2MtPmN0eCwgcHRyLCBuZXdfc2l6ZSk7CisgICAgICAgIGlmIChwdHIyICE9IE5VTEwgJiYgcHRyICE9IE5VTEwpIHsKKyAgICAgICAgICAgIFRBQkxFU19MT0NLKCk7CisgICAgICAgICAgICB0cmFjZW1hbGxvY19yZW1vdmVfdHJhY2UocHRyKTsKKyAgICAgICAgICAgIFRBQkxFU19VTkxPQ0soKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcHRyMjsKKyAgICB9CisKKyAgICAvKiBJZ25vcmUgcmVlbnRyYW50IGNhbGwuIFB5T2JqZXRfUmVhbGxvYygpIGNhbGxzIFB5TWVtX1JlYWxsb2MoKSBmb3IKKyAgICAgICBhbGxvY2F0aW9ucyBsYXJnZXIgdGhhbiA1MTIgYnl0ZXMuIERvbid0IHRyYWNlIHRoZSBzYW1lIG1lbW9yeQorICAgICAgIGFsbG9jYXRpb24gdHdpY2UuICovCisgICAgc2V0X3JlZW50cmFudCgxKTsKKworICAgIHB0cjIgPSB0cmFjZW1hbGxvY19yZWFsbG9jKGN0eCwgcHRyLCBuZXdfc2l6ZSk7CisKKyAgICBzZXRfcmVlbnRyYW50KDApOworICAgIHJldHVybiBwdHIyOworfQorCisjaWZkZWYgVFJBQ0VfUkFXX01BTExPQworc3RhdGljIHZvaWQqCit0cmFjZW1hbGxvY19yYXdfbWFsbG9jKHZvaWQgKmN0eCwgc2l6ZV90IHNpemUpCit7CisjaWZkZWYgV0lUSF9USFJFQUQKKyAgICBQeUdJTFN0YXRlX1NUQVRFIGdpbF9zdGF0ZTsKKyNlbmRpZgorICAgIHZvaWQgKnB0cjsKKworICAgIGlmIChnZXRfcmVlbnRyYW50KCkpIHsKKyAgICAgICAgUHlNZW1BbGxvY2F0b3IgKmFsbG9jID0gKFB5TWVtQWxsb2NhdG9yICopY3R4OworICAgICAgICByZXR1cm4gYWxsb2MtPm1hbGxvYyhhbGxvYy0+Y3R4LCBzaXplKTsKKyAgICB9CisKKyAgICAvKiBJZ25vcmUgcmVlbnRyYW50IGNhbGwuIFB5R0lMU3RhdGVfRW5zdXJlKCkgbWF5IGNhbGwgUHlNZW1fUmF3TWFsbG9jKCkKKyAgICAgICBpbmRpcmVjdGx5IHdoaWNoIHdvdWxkIGNhbGwgUHlHSUxTdGF0ZV9FbnN1cmUoKSBpZiByZWVudHJhbnQgYXJlIG5vdAorICAgICAgIGRpc2FibGVkLiAqLworICAgIHNldF9yZWVudHJhbnQoMSk7CisKKyNpZmRlZiBXSVRIX1RIUkVBRAorICAgIGdpbF9zdGF0ZSA9IFB5R0lMU3RhdGVfRW5zdXJlKCk7CisgICAgcHRyID0gdHJhY2VtYWxsb2NfbWFsbG9jKGN0eCwgc2l6ZSk7CisgICAgUHlHSUxTdGF0ZV9SZWxlYXNlKGdpbF9zdGF0ZSk7CisjZWxzZQorICAgIHB0ciA9IHRyYWNlbWFsbG9jX21hbGxvYyhjdHgsIHNpemUpOworI2VuZGlmCisKKyAgICBzZXRfcmVlbnRyYW50KDApOworICAgIHJldHVybiBwdHI7Cit9CisKK3N0YXRpYyB2b2lkKgordHJhY2VtYWxsb2NfcmF3X3JlYWxsb2Modm9pZCAqY3R4LCB2b2lkICpwdHIsIHNpemVfdCBuZXdfc2l6ZSkKK3sKKyNpZmRlZiBXSVRIX1RIUkVBRAorICAgIFB5R0lMU3RhdGVfU1RBVEUgZ2lsX3N0YXRlOworI2VuZGlmCisgICAgdm9pZCAqcHRyMjsKKworICAgIGlmIChnZXRfcmVlbnRyYW50KCkpIHsKKyAgICAgICAgLyogUmVlbnRyYW50IGNhbGwgdG8gUHlNZW1fUmF3UmVhbGxvYygpLiAqLworICAgICAgICBQeU1lbUFsbG9jYXRvciAqYWxsb2MgPSAoUHlNZW1BbGxvY2F0b3IgKiljdHg7CisKKyAgICAgICAgcHRyMiA9IGFsbG9jLT5yZWFsbG9jKGFsbG9jLT5jdHgsIHB0ciwgbmV3X3NpemUpOworCisgICAgICAgIGlmIChwdHIyICE9IE5VTEwgJiYgcHRyICE9IE5VTEwpIHsKKyAgICAgICAgICAgIFRBQkxFU19MT0NLKCk7CisgICAgICAgICAgICB0cmFjZW1hbGxvY19yZW1vdmVfdHJhY2UocHRyKTsKKyAgICAgICAgICAgIFRBQkxFU19VTkxPQ0soKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcHRyMjsKKyAgICB9CisKKyAgICAvKiBJZ25vcmUgcmVlbnRyYW50IGNhbGwuIFB5R0lMU3RhdGVfRW5zdXJlKCkgbWF5IGNhbGwgUHlNZW1fUmF3TWFsbG9jKCkKKyAgICAgICBpbmRpcmVjdGx5IHdoaWNoIHdvdWxkIGNhbGwgUHlHSUxTdGF0ZV9FbnN1cmUoKSBpZiByZWVudHJhbnQgY2FsbHMgYXJlCisgICAgICAgbm90IGRpc2FibGVkLiAqLworICAgIHNldF9yZWVudHJhbnQoMSk7CisKKyNpZmRlZiBXSVRIX1RIUkVBRAorICAgIGdpbF9zdGF0ZSA9IFB5R0lMU3RhdGVfRW5zdXJlKCk7CisgICAgcHRyMiA9IHRyYWNlbWFsbG9jX3JlYWxsb2MoY3R4LCBwdHIsIG5ld19zaXplKTsKKyAgICBQeUdJTFN0YXRlX1JlbGVhc2UoZ2lsX3N0YXRlKTsKKyNlbHNlCisgICAgcHRyMiA9IHRyYWNlbWFsbG9jX3JlYWxsb2MoY3R4LCBwdHIsIG5ld19zaXplKTsKKyNlbmRpZgorCisgICAgc2V0X3JlZW50cmFudCgwKTsKKyAgICByZXR1cm4gcHRyMjsKK30KKyNlbmRpZiAgIC8qIFRSQUNFX1JBV19NQUxMT0MgKi8KKworc3RhdGljIGludAordHJhY2VtYWxsb2NfY2xlYXJfZmlsZW5hbWUoX1B5X2hhc2h0YWJsZV9lbnRyeV90ICplbnRyeSwgdm9pZCAqdXNlcl9kYXRhKQoreworICAgIFB5T2JqZWN0ICpmaWxlbmFtZSA9IChQeU9iamVjdCAqKWVudHJ5LT5rZXk7CisgICAgUHlfREVDUkVGKGZpbGVuYW1lKTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAordHJhY2ViYWNrX2ZyZWVfdHJhY2ViYWNrKF9QeV9oYXNodGFibGVfZW50cnlfdCAqZW50cnksIHZvaWQgKnVzZXJfZGF0YSkKK3sKKyAgICB0cmFjZWJhY2tfdCAqdHJhY2ViYWNrID0gKHRyYWNlYmFja190ICopZW50cnktPmtleTsKKyAgICByYXdfZnJlZSh0cmFjZWJhY2spOworICAgIHJldHVybiAwOworfQorCisvKiByZWVudHJhbnQgZmxhZyBtdXN0IGJlIHNldCB0byBjYWxsIHRoaXMgZnVuY3Rpb24gYW5kIEdJTCBtdXN0IGJlIGhlbGQgKi8KK3N0YXRpYyB2b2lkCit0cmFjZW1hbGxvY19jbGVhcl90cmFjZXModm9pZCkKK3sKKyNpZmRlZiBXSVRIX1RIUkVBRAorICAgIC8qIFRoZSBHSUwgcHJvdGVjdHMgdmFyaWFibGVzIGFnYWludCBjb25jdXJyZW50IGFjY2VzcyAqLworICAgIGFzc2VydChQeUdJTFN0YXRlX0NoZWNrKCkpOworI2VuZGlmCisKKyAgICAvKiBEaXNhYmxlIGFsc28gcmVlbnRyYW50IGNhbGxzIHRvIHRyYWNlbWFsbG9jX21hbGxvYygpIHRvIG5vdCBhZGQgYSBuZXcKKyAgICAgICB0cmFjZSB3aGlsZSB3ZSBhcmUgY2xlYXJpbmcgdHJhY2VzICovCisgICAgYXNzZXJ0KGdldF9yZWVudHJhbnQoKSk7CisKKyAgICBUQUJMRVNfTE9DSygpOworICAgIF9QeV9oYXNodGFibGVfY2xlYXIodHJhY2VtYWxsb2NfdHJhY2VzKTsKKyAgICB0cmFjZW1hbGxvY190cmFjZWRfbWVtb3J5ID0gMDsKKyAgICB0cmFjZW1hbGxvY19wZWFrX3RyYWNlZF9tZW1vcnkgPSAwOworICAgIFRBQkxFU19VTkxPQ0soKTsKKworICAgIF9QeV9oYXNodGFibGVfZm9yZWFjaCh0cmFjZW1hbGxvY190cmFjZWJhY2tzLCB0cmFjZWJhY2tfZnJlZV90cmFjZWJhY2ssIE5VTEwpOworICAgIF9QeV9oYXNodGFibGVfY2xlYXIodHJhY2VtYWxsb2NfdHJhY2ViYWNrcyk7CisKKyAgICBfUHlfaGFzaHRhYmxlX2ZvcmVhY2godHJhY2VtYWxsb2NfZmlsZW5hbWVzLCB0cmFjZW1hbGxvY19jbGVhcl9maWxlbmFtZSwgTlVMTCk7CisgICAgX1B5X2hhc2h0YWJsZV9jbGVhcih0cmFjZW1hbGxvY19maWxlbmFtZXMpOworfQorCitzdGF0aWMgaW50Cit0cmFjZW1hbGxvY19pbml0KHZvaWQpCit7CisgICAgaWYgKHRyYWNlbWFsbG9jX2NvbmZpZy5pbml0aWFsaXplZCA9PSBUUkFDRU1BTExPQ19GSU5BTElaRUQpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJ0aGUgdHJhY2VtYWxsb2MgbW9kdWxlIGhhcyBiZWVuIHVubG9hZGVkIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBpZiAodHJhY2VtYWxsb2NfY29uZmlnLmluaXRpYWxpemVkID09IFRSQUNFTUFMTE9DX0lOSVRJQUxJWkVEKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFB5TWVtX0dldEFsbG9jYXRvcihQWU1FTV9ET01BSU5fUkFXLCAmYWxsb2NhdG9ycy5yYXcpOworCisjaWZkZWYgUkVFTlRSQU5UX1RIUkVBRExPQ0FMCisgICAgdHJhY2VtYWxsb2NfcmVlbnRyYW50X2tleSA9IFB5VGhyZWFkX2NyZWF0ZV9rZXkoKTsKKyAgICBpZiAodHJhY2VtYWxsb2NfcmVlbnRyYW50X2tleSA9PSAtMSkgeworI2lmZGVmIE1TX1dJTkRPV1MKKyAgICAgICAgUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoMCk7CisjZWxzZQorICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyNlbmRpZgorCisjaWYgZGVmaW5lZChXSVRIX1RIUkVBRCkgJiYgZGVmaW5lZChUUkFDRV9SQVdfTUFMTE9DKQorICAgIGlmICh0YWJsZXNfbG9jayA9PSBOVUxMKSB7CisgICAgICAgIHRhYmxlc19sb2NrID0gUHlUaHJlYWRfYWxsb2NhdGVfbG9jaygpOworICAgICAgICBpZiAodGFibGVzX2xvY2sgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwgImNhbm5vdCBhbGxvY2F0ZSBsb2NrIik7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKworICAgIHRyYWNlbWFsbG9jX2ZpbGVuYW1lcyA9IGhhc2h0YWJsZV9uZXcoMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfUHlfaGFzaHRhYmxlX2hhc2hfZnVuYylQeU9iamVjdF9IYXNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaHRhYmxlX2NvbXBhcmVfdW5pY29kZSk7CisKKyAgICB0cmFjZW1hbGxvY190cmFjZWJhY2tzID0gaGFzaHRhYmxlX25ldygwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfUHlfaGFzaHRhYmxlX2hhc2hfZnVuYyloYXNodGFibGVfaGFzaF90cmFjZWJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9QeV9oYXNodGFibGVfY29tcGFyZV9mdW5jKWhhc2h0YWJsZV9jb21wYXJlX3RyYWNlYmFjayk7CisKKyAgICB0cmFjZW1hbGxvY190cmFjZXMgPSBoYXNodGFibGVfbmV3KHNpemVvZih0cmFjZV90KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QeV9oYXNodGFibGVfaGFzaF9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUHlfaGFzaHRhYmxlX2NvbXBhcmVfZGlyZWN0KTsKKworICAgIGlmICh0cmFjZW1hbGxvY19maWxlbmFtZXMgPT0gTlVMTCB8fCB0cmFjZW1hbGxvY190cmFjZWJhY2tzID09IE5VTEwKKyAgICAgICAgfHwgdHJhY2VtYWxsb2NfdHJhY2VzID09IE5VTEwpCisgICAgeworICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgdW5rbm93bl9maWxlbmFtZSA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCI8dW5rbm93bj4iKTsKKyAgICBpZiAodW5rbm93bl9maWxlbmFtZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisgICAgUHlVbmljb2RlX0ludGVybkluUGxhY2UoJnVua25vd25fZmlsZW5hbWUpOworCisgICAgdHJhY2VtYWxsb2NfZW1wdHlfdHJhY2ViYWNrLm5mcmFtZSA9IDE7CisgICAgLyogYm9ycm93ZWQgcmVmZXJlbmNlICovCisgICAgdHJhY2VtYWxsb2NfZW1wdHlfdHJhY2ViYWNrLmZyYW1lc1swXS5maWxlbmFtZSA9IHVua25vd25fZmlsZW5hbWU7CisgICAgdHJhY2VtYWxsb2NfZW1wdHlfdHJhY2ViYWNrLmZyYW1lc1swXS5saW5lbm8gPSAwOworICAgIHRyYWNlbWFsbG9jX2VtcHR5X3RyYWNlYmFjay5oYXNoID0gdHJhY2ViYWNrX2hhc2goJnRyYWNlbWFsbG9jX2VtcHR5X3RyYWNlYmFjayk7CisKKyAgICAvKiBEaXNhYmxlIHRyYWNpbmcgYWxsb2NhdGlvbnMgdW50aWwgaG9va3MgYXJlIGluc3RhbGxlZC4gU2V0CisgICAgICAgYWxzbyB0aGUgcmVlbnRyYW50IGZsYWcgdG8gZGV0ZWN0IGJ1Z3M6IGZhaWwgd2l0aCBhbiBhc3NlcnRpb24gZXJyb3IKKyAgICAgICBpZiBzZXRfcmVlbnRyYW50KDEpIGlzIGNhbGxlZCB3aGlsZSB0cmFjaW5nIGlzIGRpc2FibGVkLiAqLworICAgIHNldF9yZWVudHJhbnQoMSk7CisKKyAgICB0cmFjZW1hbGxvY19jb25maWcuaW5pdGlhbGl6ZWQgPSBUUkFDRU1BTExPQ19JTklUSUFMSVpFRDsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK3RyYWNlbWFsbG9jX2RlaW5pdCh2b2lkKQoreworICAgIGlmICh0cmFjZW1hbGxvY19jb25maWcuaW5pdGlhbGl6ZWQgIT0gVFJBQ0VNQUxMT0NfSU5JVElBTElaRUQpCisgICAgICAgIHJldHVybjsKKyAgICB0cmFjZW1hbGxvY19jb25maWcuaW5pdGlhbGl6ZWQgPSBUUkFDRU1BTExPQ19GSU5BTElaRUQ7CisKKyAgICB0cmFjZW1hbGxvY19zdG9wKCk7CisKKyAgICAvKiBkZXN0cm95IGhhc2ggdGFibGVzICovCisgICAgX1B5X2hhc2h0YWJsZV9kZXN0cm95KHRyYWNlbWFsbG9jX3RyYWNlcyk7CisgICAgX1B5X2hhc2h0YWJsZV9kZXN0cm95KHRyYWNlbWFsbG9jX3RyYWNlYmFja3MpOworICAgIF9QeV9oYXNodGFibGVfZGVzdHJveSh0cmFjZW1hbGxvY19maWxlbmFtZXMpOworCisjaWYgZGVmaW5lZChXSVRIX1RIUkVBRCkgJiYgZGVmaW5lZChUUkFDRV9SQVdfTUFMTE9DKQorICAgIGlmICh0YWJsZXNfbG9jayAhPSBOVUxMKSB7CisgICAgICAgIFB5VGhyZWFkX2ZyZWVfbG9jayh0YWJsZXNfbG9jayk7CisgICAgICAgIHRhYmxlc19sb2NrID0gTlVMTDsKKyAgICB9CisjZW5kaWYKKworI2lmZGVmIFJFRU5UUkFOVF9USFJFQURMT0NBTAorICAgIFB5VGhyZWFkX2RlbGV0ZV9rZXkodHJhY2VtYWxsb2NfcmVlbnRyYW50X2tleSk7CisjZW5kaWYKKworICAgIFB5X1hERUNSRUYodW5rbm93bl9maWxlbmFtZSk7Cit9CisKK3N0YXRpYyBpbnQKK3RyYWNlbWFsbG9jX3N0YXJ0KGludCBtYXhfbmZyYW1lKQoreworICAgIFB5TWVtQWxsb2NhdG9yIGFsbG9jOworICAgIHNpemVfdCBzaXplOworCisgICAgaWYgKHRyYWNlbWFsbG9jX2luaXQoKSA8IDApCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGlmICh0cmFjZW1hbGxvY19jb25maWcudHJhY2luZykgeworICAgICAgICAvKiBob29rIGFscmVhZHkgaW5zdGFsbGVkOiBkbyBub3RoaW5nICovCisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGFzc2VydCgxIDw9IG1heF9uZnJhbWUgJiYgbWF4X25mcmFtZSA8PSBNQVhfTkZSQU1FKTsKKyAgICB0cmFjZW1hbGxvY19jb25maWcubWF4X25mcmFtZSA9IG1heF9uZnJhbWU7CisKKyAgICAvKiBhbGxvY2F0ZSBhIGJ1ZmZlciB0byBzdG9yZSBhIG5ldyB0cmFjZWJhY2sgKi8KKyAgICBzaXplID0gVFJBQ0VCQUNLX1NJWkUobWF4X25mcmFtZSk7CisgICAgYXNzZXJ0KHRyYWNlbWFsbG9jX3RyYWNlYmFjayA9PSBOVUxMKTsKKyAgICB0cmFjZW1hbGxvY190cmFjZWJhY2sgPSByYXdfbWFsbG9jKHNpemUpOworICAgIGlmICh0cmFjZW1hbGxvY190cmFjZWJhY2sgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisjaWZkZWYgVFJBQ0VfUkFXX01BTExPQworICAgIGFsbG9jLm1hbGxvYyA9IHRyYWNlbWFsbG9jX3Jhd19tYWxsb2M7CisgICAgYWxsb2MucmVhbGxvYyA9IHRyYWNlbWFsbG9jX3Jhd19yZWFsbG9jOworICAgIGFsbG9jLmZyZWUgPSB0cmFjZW1hbGxvY19mcmVlOworCisgICAgYWxsb2MuY3R4ID0gJmFsbG9jYXRvcnMucmF3OworICAgIFB5TWVtX0dldEFsbG9jYXRvcihQWU1FTV9ET01BSU5fUkFXLCAmYWxsb2NhdG9ycy5yYXcpOworICAgIFB5TWVtX1NldEFsbG9jYXRvcihQWU1FTV9ET01BSU5fUkFXLCAmYWxsb2MpOworI2VuZGlmCisKKyAgICBhbGxvYy5tYWxsb2MgPSB0cmFjZW1hbGxvY19tYWxsb2NfZ2lsOworICAgIGFsbG9jLnJlYWxsb2MgPSB0cmFjZW1hbGxvY19yZWFsbG9jX2dpbDsKKyAgICBhbGxvYy5mcmVlID0gdHJhY2VtYWxsb2NfZnJlZTsKKworICAgIGFsbG9jLmN0eCA9ICZhbGxvY2F0b3JzLm1lbTsKKyAgICBQeU1lbV9HZXRBbGxvY2F0b3IoUFlNRU1fRE9NQUlOX01FTSwgJmFsbG9jYXRvcnMubWVtKTsKKyAgICBQeU1lbV9TZXRBbGxvY2F0b3IoUFlNRU1fRE9NQUlOX01FTSwgJmFsbG9jKTsKKworICAgIGFsbG9jLmN0eCA9ICZhbGxvY2F0b3JzLm9iajsKKyAgICBQeU1lbV9HZXRBbGxvY2F0b3IoUFlNRU1fRE9NQUlOX09CSiwgJmFsbG9jYXRvcnMub2JqKTsKKyAgICBQeU1lbV9TZXRBbGxvY2F0b3IoUFlNRU1fRE9NQUlOX09CSiwgJmFsbG9jKTsKKworICAgIC8qIGV2ZXJ5dGhpbmcgaXMgcmVhZHk6IHN0YXJ0IHRyYWNpbmcgUHl0aG9uIG1lbW9yeSBhbGxvY2F0aW9ucyAqLworICAgIHRyYWNlbWFsbG9jX2NvbmZpZy50cmFjaW5nID0gMTsKKyAgICBzZXRfcmVlbnRyYW50KDApOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCit0cmFjZW1hbGxvY19zdG9wKHZvaWQpCit7CisgICAgaWYgKCF0cmFjZW1hbGxvY19jb25maWcudHJhY2luZykKKyAgICAgICAgcmV0dXJuOworCisgICAgLyogc3RvcCB0cmFjaW5nIFB5dGhvbiBtZW1vcnkgYWxsb2NhdGlvbnMgKi8KKyAgICB0cmFjZW1hbGxvY19jb25maWcudHJhY2luZyA9IDA7CisKKyAgICAvKiBzZXQgdGhlIHJlZW50cmFudCBmbGFnIHRvIGRldGVjdCBidWdzOiBmYWlsIHdpdGggYW4gYXNzZXJ0aW9uIGVycm9yIGlmCisgICAgICAgc2V0X3JlZW50cmFudCgxKSBpcyBjYWxsZWQgd2hpbGUgdHJhY2luZyBpcyBkaXNhYmxlZC4gKi8KKyAgICBzZXRfcmVlbnRyYW50KDEpOworCisgICAgLyogdW5yZWdpc3RlciB0aGUgaG9vayBvbiBtZW1vcnkgYWxsb2NhdG9ycyAqLworI2lmZGVmIFRSQUNFX1JBV19NQUxMT0MKKyAgICBQeU1lbV9TZXRBbGxvY2F0b3IoUFlNRU1fRE9NQUlOX1JBVywgJmFsbG9jYXRvcnMucmF3KTsKKyNlbmRpZgorICAgIFB5TWVtX1NldEFsbG9jYXRvcihQWU1FTV9ET01BSU5fTUVNLCAmYWxsb2NhdG9ycy5tZW0pOworICAgIFB5TWVtX1NldEFsbG9jYXRvcihQWU1FTV9ET01BSU5fT0JKLCAmYWxsb2NhdG9ycy5vYmopOworCisgICAgLyogcmVsZWFzZSBtZW1vcnkgKi8KKyAgICB0cmFjZW1hbGxvY19jbGVhcl90cmFjZXMoKTsKKyAgICByYXdfZnJlZSh0cmFjZW1hbGxvY190cmFjZWJhY2spOworICAgIHRyYWNlbWFsbG9jX3RyYWNlYmFjayA9IE5VTEw7Cit9CisKK3N0YXRpYyBQeU9iamVjdCoKK2xpbmVub19hc19vYmooaW50IGxpbmVubykKK3sKKyAgICBpZiAobGluZW5vID49IDApCisgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcobGluZW5vKTsKKyAgICBlbHNlCisgICAgICAgIFB5X1JFVFVSTl9OT05FOworfQorCitQeURvY19TVFJWQVIodHJhY2VtYWxsb2NfaXNfdHJhY2luZ19kb2MsCisgICAgImlzX3RyYWNpbmcoKS0+Ym9vbFxuIgorICAgICJcbiIKKyAgICAiVHJ1ZSBpZiB0aGUgdHJhY2VtYWxsb2MgbW9kdWxlIGlzIHRyYWNpbmcgUHl0aG9uIG1lbW9yeSBhbGxvY2F0aW9ucyxcbiIKKyAgICAiRmFsc2Ugb3RoZXJ3aXNlLiIpOworCitzdGF0aWMgUHlPYmplY3QqCitweV90cmFjZW1hbGxvY19pc190cmFjaW5nKFB5T2JqZWN0ICpzZWxmKQoreworICAgIHJldHVybiBQeUJvb2xfRnJvbUxvbmcodHJhY2VtYWxsb2NfY29uZmlnLnRyYWNpbmcpOworfQorCitQeURvY19TVFJWQVIodHJhY2VtYWxsb2NfY2xlYXJfdHJhY2VzX2RvYywKKyAgICAiY2xlYXJfdHJhY2VzKClcbiIKKyAgICAiXG4iCisgICAgIkNsZWFyIHRyYWNlcyBvZiBtZW1vcnkgYmxvY2tzIGFsbG9jYXRlZCBieSBQeXRob24uIik7CisKK3N0YXRpYyBQeU9iamVjdCoKK3B5X3RyYWNlbWFsbG9jX2NsZWFyX3RyYWNlcyhQeU9iamVjdCAqc2VsZikKK3sKKyAgICBpZiAoIXRyYWNlbWFsbG9jX2NvbmZpZy50cmFjaW5nKQorICAgICAgICBQeV9SRVRVUk5fTk9ORTsKKworICAgIHNldF9yZWVudHJhbnQoMSk7CisgICAgdHJhY2VtYWxsb2NfY2xlYXJfdHJhY2VzKCk7CisgICAgc2V0X3JlZW50cmFudCgwKTsKKworICAgIFB5X1JFVFVSTl9OT05FOworfQorCitzdGF0aWMgUHlPYmplY3QqCitmcmFtZV90b19weW9iamVjdChmcmFtZV90ICpmcmFtZSkKK3sKKyAgICBQeU9iamVjdCAqZnJhbWVfb2JqLCAqbGluZW5vX29iajsKKworICAgIGZyYW1lX29iaiA9IFB5VHVwbGVfTmV3KDIpOworICAgIGlmIChmcmFtZV9vYmogPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoZnJhbWUtPmZpbGVuYW1lID09IE5VTEwpCisgICAgICAgIGZyYW1lLT5maWxlbmFtZSA9IFB5X05vbmU7CisgICAgUHlfSU5DUkVGKGZyYW1lLT5maWxlbmFtZSk7CisgICAgUHlUdXBsZV9TRVRfSVRFTShmcmFtZV9vYmosIDAsIGZyYW1lLT5maWxlbmFtZSk7CisKKyAgICBhc3NlcnQoZnJhbWUtPmxpbmVubyA+PSAwKTsKKyAgICBsaW5lbm9fb2JqID0gbGluZW5vX2FzX29iaihmcmFtZS0+bGluZW5vKTsKKyAgICBpZiAobGluZW5vX29iaiA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRihmcmFtZV9vYmopOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgUHlUdXBsZV9TRVRfSVRFTShmcmFtZV9vYmosIDEsIGxpbmVub19vYmopOworCisgICAgcmV0dXJuIGZyYW1lX29iajsKK30KKworc3RhdGljIFB5T2JqZWN0KgordHJhY2ViYWNrX3RvX3B5b2JqZWN0KHRyYWNlYmFja190ICp0cmFjZWJhY2ssIF9QeV9oYXNodGFibGVfdCAqaW50ZXJuX3RhYmxlKQoreworICAgIGludCBpOworICAgIFB5T2JqZWN0ICpmcmFtZXMsICpmcmFtZTsKKworICAgIGlmIChpbnRlcm5fdGFibGUgIT0gTlVMTCkgeworICAgICAgICBpZiAoX1B5X0hBU0hUQUJMRV9HRVQoaW50ZXJuX3RhYmxlLCB0cmFjZWJhY2ssIGZyYW1lcykpIHsKKyAgICAgICAgICAgIFB5X0lOQ1JFRihmcmFtZXMpOworICAgICAgICAgICAgcmV0dXJuIGZyYW1lczsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZyYW1lcyA9IFB5VHVwbGVfTmV3KHRyYWNlYmFjay0+bmZyYW1lKTsKKyAgICBpZiAoZnJhbWVzID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgZm9yIChpPTA7IGkgPCB0cmFjZWJhY2stPm5mcmFtZTsgaSsrKSB7CisgICAgICAgIGZyYW1lID0gZnJhbWVfdG9fcHlvYmplY3QoJnRyYWNlYmFjay0+ZnJhbWVzW2ldKTsKKyAgICAgICAgaWYgKGZyYW1lID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihmcmFtZXMpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgUHlUdXBsZV9TRVRfSVRFTShmcmFtZXMsIGksIGZyYW1lKTsKKyAgICB9CisKKyAgICBpZiAoaW50ZXJuX3RhYmxlICE9IE5VTEwpIHsKKyAgICAgICAgaWYgKF9QeV9IQVNIVEFCTEVfU0VUKGludGVybl90YWJsZSwgdHJhY2ViYWNrLCBmcmFtZXMpIDwgMCkgeworICAgICAgICAgICAgUHlfREVDUkVGKGZyYW1lcyk7CisgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgLyogaW50ZXJuX3RhYmxlIGtlZXBzIGEgbmV3IHJlZmVyZW5jZSB0byBmcmFtZXMgKi8KKyAgICAgICAgUHlfSU5DUkVGKGZyYW1lcyk7CisgICAgfQorICAgIHJldHVybiBmcmFtZXM7Cit9CisKK3N0YXRpYyBQeU9iamVjdCoKK3RyYWNlX3RvX3B5b2JqZWN0KHRyYWNlX3QgKnRyYWNlLCBfUHlfaGFzaHRhYmxlX3QgKmludGVybl90cmFjZWJhY2tzKQoreworICAgIFB5T2JqZWN0ICp0cmFjZV9vYmogPSBOVUxMOworICAgIFB5T2JqZWN0ICpzaXplLCAqdHJhY2ViYWNrOworCisgICAgdHJhY2Vfb2JqID0gUHlUdXBsZV9OZXcoMik7CisgICAgaWYgKHRyYWNlX29iaiA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHNpemUgPSBQeUxvbmdfRnJvbVNpemVfdCh0cmFjZS0+c2l6ZSk7CisgICAgaWYgKHNpemUgPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYodHJhY2Vfb2JqKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIFB5VHVwbGVfU0VUX0lURU0odHJhY2Vfb2JqLCAwLCBzaXplKTsKKworICAgIHRyYWNlYmFjayA9IHRyYWNlYmFja190b19weW9iamVjdCh0cmFjZS0+dHJhY2ViYWNrLCBpbnRlcm5fdHJhY2ViYWNrcyk7CisgICAgaWYgKHRyYWNlYmFjayA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRih0cmFjZV9vYmopOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgUHlUdXBsZV9TRVRfSVRFTSh0cmFjZV9vYmosIDEsIHRyYWNlYmFjayk7CisKKyAgICByZXR1cm4gdHJhY2Vfb2JqOworfQorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgX1B5X2hhc2h0YWJsZV90ICp0cmFjZXM7CisgICAgX1B5X2hhc2h0YWJsZV90ICp0cmFjZWJhY2tzOworICAgIFB5T2JqZWN0ICpsaXN0OworfSBnZXRfdHJhY2VzX3Q7CisKK3N0YXRpYyBpbnQKK3RyYWNlbWFsbG9jX2dldF90cmFjZXNfZmlsbChfUHlfaGFzaHRhYmxlX2VudHJ5X3QgKmVudHJ5LCB2b2lkICp1c2VyX2RhdGEpCit7CisgICAgZ2V0X3RyYWNlc190ICpnZXRfdHJhY2VzID0gdXNlcl9kYXRhOworICAgIHRyYWNlX3QgKnRyYWNlOworICAgIFB5T2JqZWN0ICp0cmFjZW1hbGxvY19vYmo7CisgICAgaW50IHJlczsKKworICAgIHRyYWNlID0gKHRyYWNlX3QgKilfUHlfSEFTSFRBQkxFX0VOVFJZX0RBVEEoZW50cnkpOworCisgICAgdHJhY2VtYWxsb2Nfb2JqID0gdHJhY2VfdG9fcHlvYmplY3QodHJhY2UsIGdldF90cmFjZXMtPnRyYWNlYmFja3MpOworICAgIGlmICh0cmFjZW1hbGxvY19vYmogPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIDE7CisKKyAgICByZXMgPSBQeUxpc3RfQXBwZW5kKGdldF90cmFjZXMtPmxpc3QsIHRyYWNlbWFsbG9jX29iaik7CisgICAgUHlfREVDUkVGKHRyYWNlbWFsbG9jX29iaik7CisgICAgaWYgKHJlcyA8IDApCisgICAgICAgIHJldHVybiAxOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3RyYWNlbWFsbG9jX3B5b2JqZWN0X2RlY3JlZl9jYihfUHlfaGFzaHRhYmxlX2VudHJ5X3QgKmVudHJ5LCB2b2lkICp1c2VyX2RhdGEpCit7CisgICAgUHlPYmplY3QgKm9iaiA9IChQeU9iamVjdCAqKV9QeV9IQVNIVEFCTEVfRU5UUllfREFUQV9BU19WT0lEX1AoZW50cnkpOworICAgIFB5X0RFQ1JFRihvYmopOworICAgIHJldHVybiAwOworfQorCitQeURvY19TVFJWQVIodHJhY2VtYWxsb2NfZ2V0X3RyYWNlc19kb2MsCisgICAgIl9nZXRfdHJhY2VzKCkgLT4gbGlzdFxuIgorICAgICJcbiIKKyAgICAiR2V0IHRyYWNlcyBvZiBhbGwgbWVtb3J5IGJsb2NrcyBhbGxvY2F0ZWQgYnkgUHl0aG9uLlxuIgorICAgICJSZXR1cm4gYSBsaXN0IG9mIChzaXplOiBpbnQsIHRyYWNlYmFjazogdHVwbGUpIHR1cGxlcy5cbiIKKyAgICAidHJhY2ViYWNrIGlzIGEgdHVwbGUgb2YgKGZpbGVuYW1lOiBzdHIsIGxpbmVubzogaW50KSB0dXBsZXMuXG4iCisgICAgIlxuIgorICAgICJSZXR1cm4gYW4gZW1wdHkgbGlzdCBpZiB0aGUgdHJhY2VtYWxsb2MgbW9kdWxlIGlzIGRpc2FibGVkLiIpOworCitzdGF0aWMgUHlPYmplY3QqCitweV90cmFjZW1hbGxvY19nZXRfdHJhY2VzKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqb2JqKQoreworICAgIGdldF90cmFjZXNfdCBnZXRfdHJhY2VzOworICAgIGludCBlcnI7CisKKyAgICBnZXRfdHJhY2VzLnRyYWNlcyA9IE5VTEw7CisgICAgZ2V0X3RyYWNlcy50cmFjZWJhY2tzID0gTlVMTDsKKyAgICBnZXRfdHJhY2VzLmxpc3QgPSBQeUxpc3RfTmV3KDApOworICAgIGlmIChnZXRfdHJhY2VzLmxpc3QgPT0gTlVMTCkKKyAgICAgICAgZ290byBlcnJvcjsKKworICAgIGlmICghdHJhY2VtYWxsb2NfY29uZmlnLnRyYWNpbmcpCisgICAgICAgIHJldHVybiBnZXRfdHJhY2VzLmxpc3Q7CisKKyAgICAvKiB0aGUgdHJhY2ViYWNrIGhhc2ggdGFibGUgaXMgdXNlZCB0ZW1wb3JhcmlseSB0byBpbnRlcm4gdHJhY2ViYWNrIHR1cGxlCisgICAgICAgb2YgKGZpbGVuYW1lLCBsaW5lbm8pIHR1cGxlcyAqLworICAgIGdldF90cmFjZXMudHJhY2ViYWNrcyA9IGhhc2h0YWJsZV9uZXcoc2l6ZW9mKFB5T2JqZWN0ICopLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1B5X2hhc2h0YWJsZV9oYXNoX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QeV9oYXNodGFibGVfY29tcGFyZV9kaXJlY3QpOworICAgIGlmIChnZXRfdHJhY2VzLnRyYWNlYmFja3MgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKworICAgIFRBQkxFU19MT0NLKCk7CisgICAgZ2V0X3RyYWNlcy50cmFjZXMgPSBfUHlfaGFzaHRhYmxlX2NvcHkodHJhY2VtYWxsb2NfdHJhY2VzKTsKKyAgICBUQUJMRVNfVU5MT0NLKCk7CisKKyAgICBpZiAoZ2V0X3RyYWNlcy50cmFjZXMgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKworICAgIHNldF9yZWVudHJhbnQoMSk7CisgICAgZXJyID0gX1B5X2hhc2h0YWJsZV9mb3JlYWNoKGdldF90cmFjZXMudHJhY2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjZW1hbGxvY19nZXRfdHJhY2VzX2ZpbGwsICZnZXRfdHJhY2VzKTsKKyAgICBzZXRfcmVlbnRyYW50KDApOworICAgIGlmIChlcnIpCisgICAgICAgIGdvdG8gZXJyb3I7CisKKyAgICBnb3RvIGZpbmFsbHk7CisKK2Vycm9yOgorICAgIFB5X0NMRUFSKGdldF90cmFjZXMubGlzdCk7CisKK2ZpbmFsbHk6CisgICAgaWYgKGdldF90cmFjZXMudHJhY2ViYWNrcyAhPSBOVUxMKSB7CisgICAgICAgIF9QeV9oYXNodGFibGVfZm9yZWFjaChnZXRfdHJhY2VzLnRyYWNlYmFja3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2VtYWxsb2NfcHlvYmplY3RfZGVjcmVmX2NiLCBOVUxMKTsKKyAgICAgICAgX1B5X2hhc2h0YWJsZV9kZXN0cm95KGdldF90cmFjZXMudHJhY2ViYWNrcyk7CisgICAgfQorICAgIGlmIChnZXRfdHJhY2VzLnRyYWNlcyAhPSBOVUxMKQorICAgICAgICBfUHlfaGFzaHRhYmxlX2Rlc3Ryb3koZ2V0X3RyYWNlcy50cmFjZXMpOworCisgICAgcmV0dXJuIGdldF90cmFjZXMubGlzdDsKK30KKworUHlEb2NfU1RSVkFSKHRyYWNlbWFsbG9jX2dldF9vYmplY3RfdHJhY2ViYWNrX2RvYywKKyAgICAiX2dldF9vYmplY3RfdHJhY2ViYWNrKG9iailcbiIKKyAgICAiXG4iCisgICAgIkdldCB0aGUgdHJhY2ViYWNrIHdoZXJlIHRoZSBQeXRob24gb2JqZWN0IG9iaiB3YXMgYWxsb2NhdGVkLlxuIgorICAgICJSZXR1cm4gYSB0dXBsZSBvZiAoZmlsZW5hbWU6IHN0ciwgbGluZW5vOiBpbnQpIHR1cGxlcy5cbiIKKyAgICAiXG4iCisgICAgIlJldHVybiBOb25lIGlmIHRoZSB0cmFjZW1hbGxvYyBtb2R1bGUgaXMgZGlzYWJsZWQgb3IgZGlkIG5vdFxuIgorICAgICJ0cmFjZSB0aGUgYWxsb2NhdGlvbiBvZiB0aGUgb2JqZWN0LiIpOworCitzdGF0aWMgUHlPYmplY3QqCitweV90cmFjZW1hbGxvY19nZXRfb2JqZWN0X3RyYWNlYmFjayhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm9iaikKK3sKKyAgICBQeVR5cGVPYmplY3QgKnR5cGU7CisgICAgdm9pZCAqcHRyOworICAgIHRyYWNlX3QgdHJhY2U7CisgICAgaW50IGZvdW5kOworCisgICAgaWYgKCF0cmFjZW1hbGxvY19jb25maWcudHJhY2luZykKKyAgICAgICAgUHlfUkVUVVJOX05PTkU7CisKKyAgICB0eXBlID0gUHlfVFlQRShvYmopOworICAgIGlmIChQeVR5cGVfSVNfR0ModHlwZSkpCisgICAgICAgIHB0ciA9ICh2b2lkICopKChjaGFyICopb2JqIC0gc2l6ZW9mKFB5R0NfSGVhZCkpOworICAgIGVsc2UKKyAgICAgICAgcHRyID0gKHZvaWQgKilvYmo7CisKKyAgICBUQUJMRVNfTE9DSygpOworICAgIGZvdW5kID0gX1B5X0hBU0hUQUJMRV9HRVQodHJhY2VtYWxsb2NfdHJhY2VzLCBwdHIsIHRyYWNlKTsKKyAgICBUQUJMRVNfVU5MT0NLKCk7CisKKyAgICBpZiAoIWZvdW5kKQorICAgICAgICBQeV9SRVRVUk5fTk9ORTsKKworICAgIHJldHVybiB0cmFjZWJhY2tfdG9fcHlvYmplY3QodHJhY2UudHJhY2ViYWNrLCBOVUxMKTsKK30KKworUHlEb2NfU1RSVkFSKHRyYWNlbWFsbG9jX3N0YXJ0X2RvYywKKyAgICAic3RhcnQobmZyYW1lOiBpbnQ9MSlcbiIKKyAgICAiXG4iCisgICAgIlN0YXJ0IHRyYWNpbmcgUHl0aG9uIG1lbW9yeSBhbGxvY2F0aW9ucy4gU2V0IGFsc28gdGhlIG1heGltdW0gbnVtYmVyIFxuIgorICAgICJvZiBmcmFtZXMgc3RvcmVkIGluIHRoZSB0cmFjZWJhY2sgb2YgYSB0cmFjZSB0byBuZnJhbWUuIik7CisKK3N0YXRpYyBQeU9iamVjdCoKK3B5X3RyYWNlbWFsbG9jX3N0YXJ0KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeV9zc2l6ZV90IG5mcmFtZSA9IDE7CisgICAgaW50IG5mcmFtZV9pbnQ7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxuOnN0YXJ0IiwgJm5mcmFtZSkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKG5mcmFtZSA8IDEgfHwgbmZyYW1lID4gTUFYX05GUkFNRSkgeworICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICJ0aGUgbnVtYmVyIG9mIGZyYW1lcyBtdXN0IGJlIGluIHJhbmdlIFsxOyAlaV0iLAorICAgICAgICAgICAgICAgICAgICAgKGludClNQVhfTkZSQU1FKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIG5mcmFtZV9pbnQgPSBQeV9TQUZFX0RPV05DQVNUKG5mcmFtZSwgUHlfc3NpemVfdCwgaW50KTsKKworICAgIGlmICh0cmFjZW1hbGxvY19zdGFydChuZnJhbWVfaW50KSA8IDApCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKK1B5RG9jX1NUUlZBUih0cmFjZW1hbGxvY19zdG9wX2RvYywKKyAgICAic3RvcCgpXG4iCisgICAgIlxuIgorICAgICJTdG9wIHRyYWNpbmcgUHl0aG9uIG1lbW9yeSBhbGxvY2F0aW9ucyBhbmQgY2xlYXIgdHJhY2VzXG4iCisgICAgIm9mIG1lbW9yeSBibG9ja3MgYWxsb2NhdGVkIGJ5IFB5dGhvbi4iKTsKKworc3RhdGljIFB5T2JqZWN0KgorcHlfdHJhY2VtYWxsb2Nfc3RvcChQeU9iamVjdCAqc2VsZikKK3sKKyAgICB0cmFjZW1hbGxvY19zdG9wKCk7CisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKK1B5RG9jX1NUUlZBUih0cmFjZW1hbGxvY19nZXRfdHJhY2ViYWNrX2xpbWl0X2RvYywKKyAgICAiZ2V0X3RyYWNlYmFja19saW1pdCgpIC0+IGludFxuIgorICAgICJcbiIKKyAgICAiR2V0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBmcmFtZXMgc3RvcmVkIGluIHRoZSB0cmFjZWJhY2tcbiIKKyAgICAib2YgYSB0cmFjZS5cbiIKKyAgICAiXG4iCisgICAgIkJ5IGRlZmF1bHQsIGEgdHJhY2Ugb2YgYW4gYWxsb2NhdGVkIG1lbW9yeSBibG9jayBvbmx5IHN0b3Jlc1xuIgorICAgICJ0aGUgbW9zdCByZWNlbnQgZnJhbWU6IHRoZSBsaW1pdCBpcyAxLiIpOworCitzdGF0aWMgUHlPYmplY3QqCitweV90cmFjZW1hbGxvY19nZXRfdHJhY2ViYWNrX2xpbWl0KFB5T2JqZWN0ICpzZWxmKQoreworICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcodHJhY2VtYWxsb2NfY29uZmlnLm1heF9uZnJhbWUpOworfQorCitQeURvY19TVFJWQVIodHJhY2VtYWxsb2NfZ2V0X3RyYWNlbWFsbG9jX21lbW9yeV9kb2MsCisgICAgImdldF90cmFjZW1hbGxvY19tZW1vcnkoKSAtPiBpbnRcbiIKKyAgICAiXG4iCisgICAgIkdldCB0aGUgbWVtb3J5IHVzYWdlIGluIGJ5dGVzIG9mIHRoZSB0cmFjZW1hbGxvYyBtb2R1bGVcbiIKKyAgICAidXNlZCBpbnRlcm5hbGx5IHRvIHRyYWNlIG1lbW9yeSBhbGxvY2F0aW9ucy4iKTsKKworc3RhdGljIFB5T2JqZWN0KgordHJhY2VtYWxsb2NfZ2V0X3RyYWNlbWFsbG9jX21lbW9yeShQeU9iamVjdCAqc2VsZikKK3sKKyAgICBzaXplX3Qgc2l6ZTsKKyAgICBQeU9iamVjdCAqc2l6ZV9vYmo7CisKKyAgICBzaXplID0gX1B5X2hhc2h0YWJsZV9zaXplKHRyYWNlbWFsbG9jX3RyYWNlYmFja3MpOworICAgIHNpemUgKz0gX1B5X2hhc2h0YWJsZV9zaXplKHRyYWNlbWFsbG9jX2ZpbGVuYW1lcyk7CisKKyAgICBUQUJMRVNfTE9DSygpOworICAgIHNpemUgKz0gX1B5X2hhc2h0YWJsZV9zaXplKHRyYWNlbWFsbG9jX3RyYWNlcyk7CisgICAgVEFCTEVTX1VOTE9DSygpOworCisgICAgc2l6ZV9vYmogPSBQeUxvbmdfRnJvbVNpemVfdChzaXplKTsKKyAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiTiIsIHNpemVfb2JqKTsKK30KKworUHlEb2NfU1RSVkFSKHRyYWNlbWFsbG9jX2dldF90cmFjZWRfbWVtb3J5X2RvYywKKyAgICAiZ2V0X3RyYWNlZF9tZW1vcnkoKSAtPiAoaW50LCBpbnQpXG4iCisgICAgIlxuIgorICAgICJHZXQgdGhlIGN1cnJlbnQgc2l6ZSBhbmQgcGVhayBzaXplIG9mIG1lbW9yeSBibG9ja3MgdHJhY2VkXG4iCisgICAgImJ5IHRoZSB0cmFjZW1hbGxvYyBtb2R1bGUgYXMgYSB0dXBsZTogKGN1cnJlbnQ6IGludCwgcGVhazogaW50KS4iKTsKKworc3RhdGljIFB5T2JqZWN0KgordHJhY2VtYWxsb2NfZ2V0X3RyYWNlZF9tZW1vcnkoUHlPYmplY3QgKnNlbGYpCit7CisgICAgUHlfc3NpemVfdCBzaXplLCBwZWFrX3NpemU7CisgICAgUHlPYmplY3QgKnNpemVfb2JqLCAqcGVha19zaXplX29iajsKKworICAgIGlmICghdHJhY2VtYWxsb2NfY29uZmlnLnRyYWNpbmcpCisgICAgICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJpaSIsIDAsIDApOworCisgICAgVEFCTEVTX0xPQ0soKTsKKyAgICBzaXplID0gdHJhY2VtYWxsb2NfdHJhY2VkX21lbW9yeTsKKyAgICBwZWFrX3NpemUgPSB0cmFjZW1hbGxvY19wZWFrX3RyYWNlZF9tZW1vcnk7CisgICAgVEFCTEVTX1VOTE9DSygpOworCisgICAgc2l6ZV9vYmogPSBQeUxvbmdfRnJvbVNpemVfdChzaXplKTsKKyAgICBwZWFrX3NpemVfb2JqID0gUHlMb25nX0Zyb21TaXplX3QocGVha19zaXplKTsKKyAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiTk4iLCBzaXplX29iaiwgcGVha19zaXplX29iaik7Cit9CisKK3N0YXRpYyBQeU1ldGhvZERlZiBtb2R1bGVfbWV0aG9kc1tdID0geworICAgIHsiaXNfdHJhY2luZyIsIChQeUNGdW5jdGlvbilweV90cmFjZW1hbGxvY19pc190cmFjaW5nLAorICAgICBNRVRIX05PQVJHUywgdHJhY2VtYWxsb2NfaXNfdHJhY2luZ19kb2N9LAorICAgIHsiY2xlYXJfdHJhY2VzIiwgKFB5Q0Z1bmN0aW9uKXB5X3RyYWNlbWFsbG9jX2NsZWFyX3RyYWNlcywKKyAgICAgTUVUSF9OT0FSR1MsIHRyYWNlbWFsbG9jX2NsZWFyX3RyYWNlc19kb2N9LAorICAgIHsiX2dldF90cmFjZXMiLCAoUHlDRnVuY3Rpb24pcHlfdHJhY2VtYWxsb2NfZ2V0X3RyYWNlcywKKyAgICAgTUVUSF9OT0FSR1MsIHRyYWNlbWFsbG9jX2dldF90cmFjZXNfZG9jfSwKKyAgICB7Il9nZXRfb2JqZWN0X3RyYWNlYmFjayIsIChQeUNGdW5jdGlvbilweV90cmFjZW1hbGxvY19nZXRfb2JqZWN0X3RyYWNlYmFjaywKKyAgICAgTUVUSF9PLCB0cmFjZW1hbGxvY19nZXRfb2JqZWN0X3RyYWNlYmFja19kb2N9LAorICAgIHsic3RhcnQiLCAoUHlDRnVuY3Rpb24pcHlfdHJhY2VtYWxsb2Nfc3RhcnQsCisgICAgICBNRVRIX1ZBUkFSR1MsIHRyYWNlbWFsbG9jX3N0YXJ0X2RvY30sCisgICAgeyJzdG9wIiwgKFB5Q0Z1bmN0aW9uKXB5X3RyYWNlbWFsbG9jX3N0b3AsCisgICAgICBNRVRIX05PQVJHUywgdHJhY2VtYWxsb2Nfc3RvcF9kb2N9LAorICAgIHsiZ2V0X3RyYWNlYmFja19saW1pdCIsIChQeUNGdW5jdGlvbilweV90cmFjZW1hbGxvY19nZXRfdHJhY2ViYWNrX2xpbWl0LAorICAgICBNRVRIX05PQVJHUywgdHJhY2VtYWxsb2NfZ2V0X3RyYWNlYmFja19saW1pdF9kb2N9LAorICAgIHsiZ2V0X3RyYWNlbWFsbG9jX21lbW9yeSIsIChQeUNGdW5jdGlvbil0cmFjZW1hbGxvY19nZXRfdHJhY2VtYWxsb2NfbWVtb3J5LAorICAgICBNRVRIX05PQVJHUywgdHJhY2VtYWxsb2NfZ2V0X3RyYWNlbWFsbG9jX21lbW9yeV9kb2N9LAorICAgIHsiZ2V0X3RyYWNlZF9tZW1vcnkiLCAoUHlDRnVuY3Rpb24pdHJhY2VtYWxsb2NfZ2V0X3RyYWNlZF9tZW1vcnksCisgICAgIE1FVEhfTk9BUkdTLCB0cmFjZW1hbGxvY19nZXRfdHJhY2VkX21lbW9yeV9kb2N9LAorCisgICAgLyogc2VudGluZWwgKi8KKyAgICB7TlVMTCwgTlVMTH0KK307CisKK1B5RG9jX1NUUlZBUihtb2R1bGVfZG9jLAorIkRlYnVnIG1vZHVsZSB0byB0cmFjZSBtZW1vcnkgYmxvY2tzIGFsbG9jYXRlZCBieSBQeXRob24uIik7CisKK3N0YXRpYyBzdHJ1Y3QgUHlNb2R1bGVEZWYgbW9kdWxlX2RlZiA9IHsKKyAgICBQeU1vZHVsZURlZl9IRUFEX0lOSVQsCisgICAgIl90cmFjZW1hbGxvYyIsCisgICAgbW9kdWxlX2RvYywKKyAgICAwLCAvKiBub24tbmVnYXRpdmUgc2l6ZSB0byBiZSBhYmxlIHRvIHVubG9hZCB0aGUgbW9kdWxlICovCisgICAgbW9kdWxlX21ldGhvZHMsCisgICAgTlVMTCwKK307CisKK1B5TU9ESU5JVF9GVU5DCitQeUluaXRfX3RyYWNlbWFsbG9jKHZvaWQpCit7CisgICAgUHlPYmplY3QgKm07CisgICAgbSA9IFB5TW9kdWxlX0NyZWF0ZSgmbW9kdWxlX2RlZik7CisgICAgaWYgKG0gPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAodHJhY2VtYWxsb2NfaW5pdCgpIDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICByZXR1cm4gbTsKK30KKworc3RhdGljIGludAorcGFyc2Vfc3lzX3hvcHRpb25zKFB5T2JqZWN0ICp2YWx1ZSkKK3sKKyAgICBQeU9iamVjdCAqdmFsdWVsb25nOworICAgIGxvbmcgbmZyYW1lOworCisgICAgaWYgKHZhbHVlID09IFB5X1RydWUpCisgICAgICAgIHJldHVybiAxOworCisgICAgYXNzZXJ0KFB5VW5pY29kZV9DaGVjayh2YWx1ZSkpOworICAgIGlmIChQeVVuaWNvZGVfR2V0TGVuZ3RoKHZhbHVlKSA9PSAwKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICB2YWx1ZWxvbmcgPSBQeUxvbmdfRnJvbVVuaWNvZGVPYmplY3QodmFsdWUsIDEwKTsKKyAgICBpZiAodmFsdWVsb25nID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIG5mcmFtZSA9IFB5TG9uZ19Bc0xvbmcodmFsdWVsb25nKTsKKyAgICBQeV9ERUNSRUYodmFsdWVsb25nKTsKKyAgICBpZiAobmZyYW1lID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGlmIChuZnJhbWUgPCAxIHx8IG5mcmFtZSA+IE1BWF9ORlJBTUUpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIHJldHVybiBQeV9TQUZFX0RPV05DQVNUKG5mcmFtZSwgbG9uZywgaW50KTsKK30KKworaW50CitfUHlUcmFjZU1hbGxvY19Jbml0KHZvaWQpCit7CisgICAgY2hhciAqcDsKKyAgICBpbnQgbmZyYW1lOworCisjaWZkZWYgV0lUSF9USFJFQUQKKyAgICBhc3NlcnQoUHlHSUxTdGF0ZV9DaGVjaygpKTsKKyNlbmRpZgorCisgICAgaWYgKChwID0gUHlfR0VURU5WKCJQWVRIT05UUkFDRU1BTExPQyIpKSAmJiAqcCAhPSAnXDAnKSB7CisgICAgICAgIGNoYXIgKmVuZHB0ciA9IHA7CisgICAgICAgIGxvbmcgdmFsdWU7CisKKyAgICAgICAgZXJybm8gPSAwOworICAgICAgICB2YWx1ZSA9IHN0cnRvbChwLCAmZW5kcHRyLCAxMCk7CisgICAgICAgIGlmICgqZW5kcHRyICE9ICdcMCcKKyAgICAgICAgICAgIHx8IHZhbHVlIDwgMQorICAgICAgICAgICAgfHwgdmFsdWUgPiBNQVhfTkZSQU1FCisgICAgICAgICAgICB8fCBlcnJubyA9PSBFUkFOR0UpCisgICAgICAgIHsKKyAgICAgICAgICAgIFB5X0ZhdGFsRXJyb3IoIlBZVEhPTlRSQUNFTUFMTE9DOiBpbnZhbGlkIG51bWJlciBvZiBmcmFtZXMiKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCisgICAgICAgIG5mcmFtZSA9IChpbnQpdmFsdWU7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBQeU9iamVjdCAqeG9wdGlvbnMsICprZXksICp2YWx1ZTsKKworICAgICAgICB4b3B0aW9ucyA9IFB5U3lzX0dldFhPcHRpb25zKCk7CisgICAgICAgIGlmICh4b3B0aW9ucyA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIC0xOworCisgICAgICAgIGtleSA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCJ0cmFjZW1hbGxvYyIpOworICAgICAgICBpZiAoa2V5ID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gLTE7CisKKyAgICAgICAgdmFsdWUgPSBQeURpY3RfR2V0SXRlbVdpdGhFcnJvcih4b3B0aW9ucywga2V5KTsKKyAgICAgICAgUHlfREVDUkVGKGtleSk7CisgICAgICAgIGlmICh2YWx1ZSA9PSBOVUxMKSB7CisgICAgICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisKKyAgICAgICAgICAgIC8qIC1YIHRyYWNlbWFsbG9jIGlzIG5vdCB1c2VkICovCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorCisgICAgICAgIG5mcmFtZSA9IHBhcnNlX3N5c194b3B0aW9ucyh2YWx1ZSk7CisgICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7CisgICAgICAgIGlmIChuZnJhbWUgPCAwKSB7CisgICAgICAgICAgICBQeV9GYXRhbEVycm9yKCItWCB0cmFjZW1hbGxvYz1ORlJBTUU6IGludmFsaWQgbnVtYmVyIG9mIGZyYW1lcyIpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRyYWNlbWFsbG9jX3N0YXJ0KG5mcmFtZSk7Cit9CisKK3ZvaWQKK19QeVRyYWNlTWFsbG9jX0Zpbmkodm9pZCkKK3sKKyNpZmRlZiBXSVRIX1RIUkVBRAorICAgIGFzc2VydChQeUdJTFN0YXRlX0NoZWNrKCkpOworI2VuZGlmCisgICAgdHJhY2VtYWxsb2NfZGVpbml0KCk7Cit9CisKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3dlYWtyZWYuYyBiL01vZHVsZXMvX3dlYWtyZWYuYwppbmRleCA4ODk5NWI4Li5kYTU4OTMxIDEwMDY0NAotLS0gYS9Nb2R1bGVzL193ZWFrcmVmLmMKKysrIGIvTW9kdWxlcy9fd2Vha3JlZi5jCkBAIC00LDI1ICs0LDU5IEBACiAjZGVmaW5lIEdFVF9XRUFLUkVGU19MSVNUUFRSKG8pIFwKICAgICAgICAgKChQeVdlYWtSZWZlcmVuY2UgKiopIFB5T2JqZWN0X0dFVF9XRUFLUkVGU19MSVNUUFRSKG8pKQogCisvKltjbGluaWMgaW5wdXRdCittb2R1bGUgX3dlYWtyZWYKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kYTM5YTNlZTVlNmI0YjBkIGlucHV0PWZmZWM3M2I4NTg0NjU5NmRdKi8KIAotUHlEb2NfU1RSVkFSKHdlYWtyZWZfZ2V0d2Vha3JlZmNvdW50X19kb2NfXywKLSJnZXR3ZWFrcmVmY291bnQob2JqZWN0KSAtLSByZXR1cm4gdGhlIG51bWJlciBvZiB3ZWFrIHJlZmVyZW5jZXNcbiIKLSJ0byAnb2JqZWN0Jy4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KKworX3dlYWtyZWYuZ2V0d2Vha3JlZmNvdW50IC0+IFB5X3NzaXplX3QKKworICBvYmplY3Q6IG9iamVjdAorICAvCisKK1JldHVybiB0aGUgbnVtYmVyIG9mIHdlYWsgcmVmZXJlbmNlcyB0byAnb2JqZWN0Jy4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworUHlEb2NfU1RSVkFSKF93ZWFrcmVmX2dldHdlYWtyZWZjb3VudF9fZG9jX18sCisiZ2V0d2Vha3JlZmNvdW50KCRtb2R1bGUsIG9iamVjdCwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiB0aGUgbnVtYmVyIG9mIHdlYWsgcmVmZXJlbmNlcyB0byBcJ29iamVjdFwnLiIpOworCisjZGVmaW5lIF9XRUFLUkVGX0dFVFdFQUtSRUZDT1VOVF9NRVRIT0RERUYgICAgXAorICAgIHsiZ2V0d2Vha3JlZmNvdW50IiwgKFB5Q0Z1bmN0aW9uKV93ZWFrcmVmX2dldHdlYWtyZWZjb3VudCwgTUVUSF9PLCBfd2Vha3JlZl9nZXR3ZWFrcmVmY291bnRfX2RvY19ffSwKKworc3RhdGljIFB5X3NzaXplX3QKK193ZWFrcmVmX2dldHdlYWtyZWZjb3VudF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICpvYmplY3QpOwogCiBzdGF0aWMgUHlPYmplY3QgKgotd2Vha3JlZl9nZXR3ZWFrcmVmY291bnQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpvYmplY3QpCitfd2Vha3JlZl9nZXR3ZWFrcmVmY291bnQoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKm9iamVjdCkKIHsKLSAgICBQeU9iamVjdCAqcmVzdWx0ID0gTlVMTDsKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9zc2l6ZV90IF9yZXR1cm5fdmFsdWU7CiAKLSAgICBpZiAoUHlUeXBlX1NVUFBPUlRTX1dFQUtSRUZTKFB5X1RZUEUob2JqZWN0KSkpIHsKLSAgICAgICAgUHlXZWFrUmVmZXJlbmNlICoqbGlzdCA9IEdFVF9XRUFLUkVGU19MSVNUUFRSKG9iamVjdCk7CisgICAgX3JldHVybl92YWx1ZSA9IF93ZWFrcmVmX2dldHdlYWtyZWZjb3VudF9pbXBsKG1vZHVsZSwgb2JqZWN0KTsKKyAgICBpZiAoKF9yZXR1cm5fdmFsdWUgPT0gLTEpICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBQeUxvbmdfRnJvbVNzaXplX3QoX3JldHVybl92YWx1ZSk7CiAKLSAgICAgICAgcmVzdWx0ID0gUHlMb25nX0Zyb21Tc2l6ZV90KF9QeVdlYWtyZWZfR2V0V2Vha3JlZkNvdW50KCpsaXN0KSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgICAgcmVzdWx0ID0gUHlMb25nX0Zyb21Mb25nKDApOworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQogCi0gICAgcmV0dXJuIHJlc3VsdDsKK3N0YXRpYyBQeV9zc2l6ZV90Citfd2Vha3JlZl9nZXR3ZWFrcmVmY291bnRfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqb2JqZWN0KQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTAzMmVlZGJmZDdkNjllMTAgaW5wdXQ9Y2VkYjY5NzExYjZhMjUwN10qLworeworICAgIFB5V2Vha1JlZmVyZW5jZSAqKmxpc3Q7CisKKyAgICBpZiAoIVB5VHlwZV9TVVBQT1JUU19XRUFLUkVGUyhQeV9UWVBFKG9iamVjdCkpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGxpc3QgPSBHRVRfV0VBS1JFRlNfTElTVFBUUihvYmplY3QpOworICAgIHJldHVybiBfUHlXZWFrcmVmX0dldFdlYWtyZWZDb3VudCgqbGlzdCk7CiB9CiAKIApAQCAtNzgsOCArMTEyLDcgQEAKIAogc3RhdGljIFB5TWV0aG9kRGVmCiB3ZWFrcmVmX2Z1bmN0aW9uc1tdID0gIHsKLSAgICB7ImdldHdlYWtyZWZjb3VudCIsIHdlYWtyZWZfZ2V0d2Vha3JlZmNvdW50LCAgICAgICAgTUVUSF9PLAotICAgICB3ZWFrcmVmX2dldHdlYWtyZWZjb3VudF9fZG9jX199LAorICAgIF9XRUFLUkVGX0dFVFdFQUtSRUZDT1VOVF9NRVRIT0RERUYKICAgICB7ImdldHdlYWtyZWZzIiwgICAgIHdlYWtyZWZfZ2V0d2Vha3JlZnMsICAgICAgICAgICAgTUVUSF9PLAogICAgICB3ZWFrcmVmX2dldHdlYWtyZWZzX19kb2NfX30sCiAgICAgeyJwcm94eSIsICAgICAgICAgICB3ZWFrcmVmX3Byb3h5LCAgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHUywKQEAgLTEwNiw3ICsxMzksNyBAQAogICAgIFB5T2JqZWN0ICptOwogCiAgICAgbSA9IFB5TW9kdWxlX0NyZWF0ZSgmd2Vha3JlZm1vZHVsZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgaWYgKG0gIT0gTlVMTCkgewogICAgICAgICBQeV9JTkNSRUYoJl9QeVdlYWtyZWZfUmVmVHlwZSk7CiAgICAgICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAicmVmIiwKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3dpbmFwaS5jIGIvTW9kdWxlcy9fd2luYXBpLmMKaW5kZXggNTI1N2ExZS4uZDQ3MmM5ZSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fd2luYXBpLmMKKysrIGIvTW9kdWxlcy9fd2luYXBpLmMKQEAgLTYyLDYgKzYyLDggQEAKIAogI2RlZmluZSBUX0hBTkRMRSBUX1BPSU5URVIKIAorI2RlZmluZSBEV09SRF9NQVggNDI5NDk2NzI5NVUKKwogLyogR3JhYiBDYW5jZWxJb0V4IGR5bmFtaWNhbGx5IGZyb20ga2VybmVsMzIgKi8KIHN0YXRpYyBpbnQgaGFzX0NhbmNlbElvRXggPSAtMTsKIHN0YXRpYyBCT09MIChDQUxMQkFDSyAqUHlfQ2FuY2VsSW9FeCkoSEFORExFLCBMUE9WRVJMQVBQRUQpOwpAQCAtMTA1LDE3ICsxMDcsMzcgQEAKIHsKICAgICBEV09SRCBieXRlczsKICAgICBpbnQgZXJyID0gR2V0TGFzdEVycm9yKCk7CisKICAgICBpZiAoc2VsZi0+cGVuZGluZykgewotICAgICAgICAvKiBtYWtlIGl0IGEgcHJvZ3JhbW1pbmcgZXJyb3IgdG8gZGVhbGxvY2F0ZSB3aGlsZSBvcGVyYXRpb24KLSAgICAgICAgICAgaXMgcGVuZGluZywgZXZlbiBpZiB3ZSBjYW4gc2FmZWx5IGNhbmNlbCBpdCAqLwogICAgICAgICBpZiAoY2hlY2tfQ2FuY2VsSW9FeCgpICYmCi0gICAgICAgICAgICAgICAgUHlfQ2FuY2VsSW9FeChzZWxmLT5oYW5kbGUsICZzZWxmLT5vdmVybGFwcGVkKSkKLSAgICAgICAgICAgIEdldE92ZXJsYXBwZWRSZXN1bHQoc2VsZi0+aGFuZGxlLCAmc2VsZi0+b3ZlcmxhcHBlZCwgJmJ5dGVzLCBUUlVFKTsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJJL08gb3BlcmF0aW9ucyBzdGlsbCBpbiBmbGlnaHQgd2hpbGUgZGVzdHJveWluZyAiCi0gICAgICAgICAgICAgICAgICAgICAgICAiT3ZlcmxhcHBlZCBvYmplY3QsIHRoZSBwcm9jZXNzIG1heSBjcmFzaCIpOwotICAgICAgICBQeUVycl9Xcml0ZVVucmFpc2FibGUoTlVMTCk7CisgICAgICAgICAgICBQeV9DYW5jZWxJb0V4KHNlbGYtPmhhbmRsZSwgJnNlbGYtPm92ZXJsYXBwZWQpICYmCisgICAgICAgICAgICBHZXRPdmVybGFwcGVkUmVzdWx0KHNlbGYtPmhhbmRsZSwgJnNlbGYtPm92ZXJsYXBwZWQsICZieXRlcywgVFJVRSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIFRoZSBvcGVyYXRpb24gaXMgbm8gbG9uZ2VyIHBlbmRpbmcgLS0gbm90aGluZyB0byBkby4gKi8KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChfUHlfRmluYWxpemluZyA9PSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBUaGUgb3BlcmF0aW9uIGlzIHN0aWxsIHBlbmRpbmcgLS0gZ2l2ZSBhIHdhcm5pbmcuICBUaGlzCisgICAgICAgICAgICAgICB3aWxsIHByb2JhYmx5IG9ubHkgaGFwcGVuIG9uIFdpbmRvd3MgWFAuICovCisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJL08gb3BlcmF0aW9ucyBzdGlsbCBpbiBmbGlnaHQgd2hpbGUgZGVzdHJveWluZyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk92ZXJsYXBwZWQgb2JqZWN0LCB0aGUgcHJvY2VzcyBtYXkgY3Jhc2giKTsKKyAgICAgICAgICAgIFB5RXJyX1dyaXRlVW5yYWlzYWJsZShOVUxMKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIFRoZSBvcGVyYXRpb24gaXMgc3RpbGwgcGVuZGluZywgYnV0IHRoZSBwcm9jZXNzIGlzCisgICAgICAgICAgICAgICBwcm9iYWJseSBhYm91dCB0byBleGl0LCBzbyB3ZSBuZWVkIG5vdCB3b3JyeSB0b28gbXVjaAorICAgICAgICAgICAgICAgYWJvdXQgbWVtb3J5IGxlYWtzLiAgTGVha2luZyBzZWxmIHByZXZlbnRzIGEgcG90ZW50aWFsCisgICAgICAgICAgICAgICBjcmFzaC4gIFRoaXMgY2FuIGhhcHBlbiB3aGVuIGEgZGFlbW9uIHRocmVhZCBpcyBjbGVhbmVkCisgICAgICAgICAgICAgICB1cCBhdCBleGl0IC0tIHNlZSAjMTk1NjUuICBXZSBvbmx5IGV4cGVjdCB0byBnZXQgaGVyZQorICAgICAgICAgICAgICAgb24gV2luZG93cyBYUC4gKi8KKyAgICAgICAgICAgIENsb3NlSGFuZGxlKHNlbGYtPm92ZXJsYXBwZWQuaEV2ZW50KTsKKyAgICAgICAgICAgIFNldExhc3RFcnJvcihlcnIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAgfQorCiAgICAgQ2xvc2VIYW5kbGUoc2VsZi0+b3ZlcmxhcHBlZC5oRXZlbnQpOwogICAgIFNldExhc3RFcnJvcihlcnIpOwogICAgIGlmIChzZWxmLT53cml0ZV9idWZmZXIub2JqKQpAQCAtMTE1Miw3ICsxMTc0LDcgQEAKICAgICBIQU5ETEUgaGFuZGxlOwogICAgIFB5X2J1ZmZlciBfYnVmLCAqYnVmOwogICAgIFB5T2JqZWN0ICpidWZvYmo7Ci0gICAgRFdPUkQgd3JpdHRlbjsKKyAgICBEV09SRCBsZW4sIHdyaXR0ZW47CiAgICAgQk9PTCByZXQ7CiAgICAgaW50IHVzZV9vdmVybGFwcGVkID0gMDsKICAgICBEV09SRCBlcnI7CkBAIC0xMTgwLDcgKzEyMDIsOCBAQAogICAgIH0KIAogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICByZXQgPSBXcml0ZUZpbGUoaGFuZGxlLCBidWYtPmJ1ZiwgYnVmLT5sZW4sICZ3cml0dGVuLAorICAgIGxlbiA9IChEV09SRClQeV9NSU4oYnVmLT5sZW4sIERXT1JEX01BWCk7CisgICAgcmV0ID0gV3JpdGVGaWxlKGhhbmRsZSwgYnVmLT5idWYsIGxlbiwgJndyaXR0ZW4sCiAgICAgICAgICAgICAgICAgICAgIG92ZXJsYXBwZWQgPyAmb3ZlcmxhcHBlZC0+b3ZlcmxhcHBlZCA6IE5VTEwpOwogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKQEAgLTEzMzAsNiArMTM1Myw3IEBACiAgICAgV0lOQVBJX0NPTlNUQU5UKEZfRFdPUkQsIFNUSUxMX0FDVElWRSk7CiAgICAgV0lOQVBJX0NPTlNUQU5UKEZfRFdPUkQsIFNXX0hJREUpOwogICAgIFdJTkFQSV9DT05TVEFOVChGX0RXT1JELCBXQUlUX09CSkVDVF8wKTsKKyAgICBXSU5BUElfQ09OU1RBTlQoRl9EV09SRCwgV0FJVF9BQkFORE9ORURfMCk7CiAgICAgV0lOQVBJX0NPTlNUQU5UKEZfRFdPUkQsIFdBSVRfVElNRU9VVCk7CiAKICAgICBXSU5BUElfQ09OU1RBTlQoImkiLCBOVUxMKTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvYXJyYXltb2R1bGUuYyBiL01vZHVsZXMvYXJyYXltb2R1bGUuYwppbmRleCAzYWJhOWFkLi41YWIxYWI2IDEwMDY0NAotLS0gYS9Nb2R1bGVzL2FycmF5bW9kdWxlLmMKKysrIGIvTW9kdWxlcy9hcnJheW1vZHVsZS5jCkBAIC01MTMsNyArNTEzLDcgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBnZXRhcnJheWl0ZW0oUHlPYmplY3QgKm9wLCBQeV9zc2l6ZV90IGkpCiB7Ci0gICAgcmVnaXN0ZXIgYXJyYXlvYmplY3QgKmFwOworICAgIGFycmF5b2JqZWN0ICphcDsKICAgICBhc3NlcnQoYXJyYXlfQ2hlY2sob3ApKTsKICAgICBhcCA9IChhcnJheW9iamVjdCAqKW9wOwogICAgIGFzc2VydChpPj0wICYmIGk8UHlfU0laRShhcCkpOwpAQCAtOTY4LDggKzk2OCwxMyBAQAogICAgIFB5X3NzaXplX3QgaTsKIAogICAgIGZvciAoaSA9IDA7IGkgPCBQeV9TSVpFKHNlbGYpOyBpKyspIHsKLSAgICAgICAgUHlPYmplY3QgKnNlbGZpID0gZ2V0YXJyYXlpdGVtKChQeU9iamVjdCAqKXNlbGYsIGkpOwotICAgICAgICBpbnQgY21wID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKHNlbGZpLCB2LCBQeV9FUSk7CisgICAgICAgIFB5T2JqZWN0ICpzZWxmaTsKKyAgICAgICAgaW50IGNtcDsKKworICAgICAgICBzZWxmaSA9IGdldGFycmF5aXRlbSgoUHlPYmplY3QgKilzZWxmLCBpKTsKKyAgICAgICAgaWYgKHNlbGZpID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgY21wID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKHNlbGZpLCB2LCBQeV9FUSk7CiAgICAgICAgIFB5X0RFQ1JFRihzZWxmaSk7CiAgICAgICAgIGlmIChjbXAgPiAwKQogICAgICAgICAgICAgY291bnQrKzsKQEAgLTk5MCw4ICs5OTUsMTMgQEAKICAgICBQeV9zc2l6ZV90IGk7CiAKICAgICBmb3IgKGkgPSAwOyBpIDwgUHlfU0laRShzZWxmKTsgaSsrKSB7Ci0gICAgICAgIFB5T2JqZWN0ICpzZWxmaSA9IGdldGFycmF5aXRlbSgoUHlPYmplY3QgKilzZWxmLCBpKTsKLSAgICAgICAgaW50IGNtcCA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbChzZWxmaSwgdiwgUHlfRVEpOworICAgICAgICBQeU9iamVjdCAqc2VsZmk7CisgICAgICAgIGludCBjbXA7CisKKyAgICAgICAgc2VsZmkgPSBnZXRhcnJheWl0ZW0oKFB5T2JqZWN0ICopc2VsZiwgaSk7CisgICAgICAgIGlmIChzZWxmaSA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGNtcCA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbChzZWxmaSwgdiwgUHlfRVEpOwogICAgICAgICBQeV9ERUNSRUYoc2VsZmkpOwogICAgICAgICBpZiAoY21wID4gMCkgewogICAgICAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZygobG9uZylpKTsKQEAgLTEwMTYsNiArMTAyNiw4IEBACiAKICAgICBmb3IgKGkgPSAwLCBjbXAgPSAwIDsgY21wID09IDAgJiYgaSA8IFB5X1NJWkUoc2VsZik7IGkrKykgewogICAgICAgICBQeU9iamVjdCAqc2VsZmkgPSBnZXRhcnJheWl0ZW0oKFB5T2JqZWN0ICopc2VsZiwgaSk7CisgICAgICAgIGlmIChzZWxmaSA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICBjbXAgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2woc2VsZmksIHYsIFB5X0VRKTsKICAgICAgICAgUHlfREVDUkVGKHNlbGZpKTsKICAgICB9CkBAIC0xMDI4LDggKzEwNDAsMTMgQEAKICAgICBpbnQgaTsKIAogICAgIGZvciAoaSA9IDA7IGkgPCBQeV9TSVpFKHNlbGYpOyBpKyspIHsKLSAgICAgICAgUHlPYmplY3QgKnNlbGZpID0gZ2V0YXJyYXlpdGVtKChQeU9iamVjdCAqKXNlbGYsaSk7Ci0gICAgICAgIGludCBjbXAgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2woc2VsZmksIHYsIFB5X0VRKTsKKyAgICAgICAgUHlPYmplY3QgKnNlbGZpOworICAgICAgICBpbnQgY21wOworCisgICAgICAgIHNlbGZpID0gZ2V0YXJyYXlpdGVtKChQeU9iamVjdCAqKXNlbGYsaSk7CisgICAgICAgIGlmIChzZWxmaSA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGNtcCA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbChzZWxmaSwgdiwgUHlfRVEpOwogICAgICAgICBQeV9ERUNSRUYoc2VsZmkpOwogICAgICAgICBpZiAoY21wID4gMCkgewogICAgICAgICAgICAgaWYgKGFycmF5X2Fzc19zbGljZShzZWxmLCBpLCBpKzEsCkBAIC0xMDY4LDcgKzEwODUsOSBAQAogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfSW5kZXhFcnJvciwgInBvcCBpbmRleCBvdXQgb2YgcmFuZ2UiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIHYgPSBnZXRhcnJheWl0ZW0oKFB5T2JqZWN0ICopc2VsZixpKTsKKyAgICB2ID0gZ2V0YXJyYXlpdGVtKChQeU9iamVjdCAqKXNlbGYsIGkpOworICAgIGlmICh2ID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmIChhcnJheV9hc3Nfc2xpY2Uoc2VsZiwgaSwgaSsxLCAoUHlPYmplY3QgKilOVUxMKSAhPSAwKSB7CiAgICAgICAgIFB5X0RFQ1JFRih2KTsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0xMTE0LDEzICsxMTMzLDI1IEBACiBzdGF0aWMgUHlPYmplY3QgKgogYXJyYXlfYnVmZmVyX2luZm8oYXJyYXlvYmplY3QgKnNlbGYsIFB5T2JqZWN0ICp1bnVzZWQpCiB7Ci0gICAgUHlPYmplY3QqIHJldHZhbCA9IE5VTEw7CisgICAgUHlPYmplY3QgKnJldHZhbCA9IE5VTEwsICp2OworCiAgICAgcmV0dmFsID0gUHlUdXBsZV9OZXcoMik7CiAgICAgaWYgKCFyZXR2YWwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgUHlUdXBsZV9TRVRfSVRFTShyZXR2YWwsIDAsIFB5TG9uZ19Gcm9tVm9pZFB0cihzZWxmLT5vYl9pdGVtKSk7Ci0gICAgUHlUdXBsZV9TRVRfSVRFTShyZXR2YWwsIDEsIFB5TG9uZ19Gcm9tTG9uZygobG9uZykoUHlfU0laRShzZWxmKSkpKTsKKyAgICB2ID0gUHlMb25nX0Zyb21Wb2lkUHRyKHNlbGYtPm9iX2l0ZW0pOworICAgIGlmICh2ID09IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKHJldHZhbCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBQeVR1cGxlX1NFVF9JVEVNKHJldHZhbCwgMCwgdik7CisKKyAgICB2ID0gUHlMb25nX0Zyb21Mb25nKChsb25nKShQeV9TSVpFKHNlbGYpKSk7CisgICAgaWYgKHYgPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYocmV0dmFsKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIFB5VHVwbGVfU0VUX0lURU0ocmV0dmFsLCAxLCB2KTsKIAogICAgIHJldHVybiByZXR2YWw7CiB9CkBAIC0xMjA2LDggKzEyMzcsOCBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGFycmF5X3JldmVyc2UoYXJyYXlvYmplY3QgKnNlbGYsIFB5T2JqZWN0ICp1bnVzZWQpCiB7Ci0gICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBpdGVtc2l6ZSA9IHNlbGYtPm9iX2Rlc2NyLT5pdGVtc2l6ZTsKLSAgICByZWdpc3RlciBjaGFyICpwLCAqcTsKKyAgICBQeV9zc2l6ZV90IGl0ZW1zaXplID0gc2VsZi0+b2JfZGVzY3ItPml0ZW1zaXplOworICAgIGNoYXIgKnAsICpxOwogICAgIC8qIGxpdHRsZSBidWZmZXIgdG8gaG9sZCBpdGVtcyB3aGlsZSBzd2FwcGluZyAqLwogICAgIGNoYXIgdG1wWzI1Nl07ICAgICAgLyogOCBpcyBwcm9iYWJseSBlbm91Z2ggLS0gYnV0IHdoeSBza2ltcCAqLwogICAgIGFzc2VydCgoc2l6ZV90KWl0ZW1zaXplIDw9IHNpemVvZih0bXApKTsKQEAgLTEzODYsMTMgKzE0MTcsMTYgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgZm9yIChpID0gMDsgaSA8IFB5X1NJWkUoc2VsZik7IGkrKykgewogICAgICAgICBQeU9iamVjdCAqdiA9IGdldGFycmF5aXRlbSgoUHlPYmplY3QgKilzZWxmLCBpKTsKLSAgICAgICAgaWYgKHYgPT0gTlVMTCkgewotICAgICAgICAgICAgUHlfREVDUkVGKGxpc3QpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICAgICAgUHlMaXN0X1NldEl0ZW0obGlzdCwgaSwgdik7CisgICAgICAgIGlmICh2ID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICBpZiAoUHlMaXN0X1NldEl0ZW0obGlzdCwgaSwgdikgPCAwKQorICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICB9CiAgICAgcmV0dXJuIGxpc3Q7CisKK2Vycm9yOgorICAgIFB5X0RFQ1JFRihsaXN0KTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogUHlEb2NfU1RSVkFSKHRvbGlzdF9kb2MsCkBAIC0xNDA3LDE0ICsxNDQxLDE0IEBACiAgICAgUHlfc3NpemVfdCBuOwogICAgIGlmIChidWZmZXItPml0ZW1zaXplICE9IDEpIHsKICAgICAgICAgUHlCdWZmZXJfUmVsZWFzZShidWZmZXIpOwotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAic3RyaW5nL2J1ZmZlciBvZiBieXRlcyByZXF1aXJlZC4iKTsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgImEgYnl0ZXMtbGlrZSBvYmplY3QgaXMgcmVxdWlyZWQiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIG4gPSBidWZmZXItPmxlbjsKICAgICBpZiAobiAlIGl0ZW1zaXplICE9IDApIHsKICAgICAgICAgUHlCdWZmZXJfUmVsZWFzZShidWZmZXIpOwogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAic3RyaW5nIGxlbmd0aCBub3QgYSBtdWx0aXBsZSBvZiBpdGVtIHNpemUiKTsKKyAgICAgICAgICAgICAgICAgICAiYnl0ZXMgbGVuZ3RoIG5vdCBhIG11bHRpcGxlIG9mIGl0ZW0gc2l6ZSIpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgbiA9IG4gLyBpdGVtc2l6ZTsKQEAgLTE2NjQsMTEgKzE2OTgsOCBAQAogc3RhdGljIGVudW0gbWFjaGluZV9mb3JtYXRfY29kZQogdHlwZWNvZGVfdG9fbWZvcm1hdF9jb2RlKGNoYXIgdHlwZWNvZGUpCiB7Ci0jaWZkZWYgV09SRFNfQklHRU5ESUFOCi0gICAgY29uc3QgaW50IGlzX2JpZ19lbmRpYW4gPSAxOwotI2Vsc2UKLSAgICBjb25zdCBpbnQgaXNfYmlnX2VuZGlhbiA9IDA7Ci0jZW5kaWYKKyAgICBjb25zdCBpbnQgaXNfYmlnX2VuZGlhbiA9IFBZX0JJR19FTkRJQU47CisKICAgICBzaXplX3QgaW50c2l6ZTsKICAgICBpbnQgaXNfc2lnbmVkOwogCkBAIC0yNDg3LDYgKzI1MTgsMjAgQEAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIkN8TzphcnJheSIsICZjLCAmaW5pdGlhbCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCisgICAgaWYgKGluaXRpYWwgJiYgYyAhPSAndScpIHsKKyAgICAgICAgaWYgKFB5VW5pY29kZV9DaGVjayhpbml0aWFsKSkgeworICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwgImNhbm5vdCB1c2UgYSBzdHIgdG8gaW5pdGlhbGl6ZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgImFuIGFycmF5IHdpdGggdHlwZWNvZGUgJyVjJyIsIGMpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoYXJyYXlfQ2hlY2soaW5pdGlhbCkgJiYKKyAgICAgICAgICAgICAgICAgKChhcnJheW9iamVjdCopaW5pdGlhbCktPm9iX2Rlc2NyLT50eXBlY29kZSA9PSAndScpIHsKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsICJjYW5ub3QgdXNlIGEgdW5pY29kZSBhcnJheSB0byAiCisgICAgICAgICAgICAgICAgICAgICAgICAgImluaXRpYWxpemUgYW4gYXJyYXkgd2l0aCB0eXBlY29kZSAnJWMnIiwgYyk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgIH0KKwogICAgIGlmICghKGluaXRpYWwgPT0gTlVMTCB8fCBQeUxpc3RfQ2hlY2soaW5pdGlhbCkKICAgICAgICAgICB8fCBQeUJ5dGVBcnJheV9DaGVjayhpbml0aWFsKQogICAgICAgICAgIHx8IFB5Qnl0ZXNfQ2hlY2soaW5pdGlhbCkKQEAgLTI1ODMsNyArMjYyOCw3IEBACiAgICAgICAgICAgICAgICAgICAgIHNlbGYtPmFsbG9jYXRlZCA9IFB5X1NJWkUoc2VsZik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoaW5pdGlhbCAhPSBOVUxMICYmIGFycmF5X0NoZWNrKGluaXRpYWwpKSB7CisgICAgICAgICAgICBlbHNlIGlmIChpbml0aWFsICE9IE5VTEwgJiYgYXJyYXlfQ2hlY2soaW5pdGlhbCkgJiYgbGVuID4gMCkgewogICAgICAgICAgICAgICAgIGFycmF5b2JqZWN0ICpzZWxmID0gKGFycmF5b2JqZWN0ICopYTsKICAgICAgICAgICAgICAgICBhcnJheW9iamVjdCAqb3RoZXIgPSAoYXJyYXlvYmplY3QgKilpbml0aWFsOwogICAgICAgICAgICAgICAgIG1lbWNweShzZWxmLT5vYl9pdGVtLCBvdGhlci0+b2JfaXRlbSwgbGVuICogb3RoZXItPm9iX2Rlc2NyLT5pdGVtc2l6ZSk7CkBAIC0yNjEzLDkgKzI2NTgsMTkgQEAKICJUaGlzIG1vZHVsZSBkZWZpbmVzIGFuIG9iamVjdCB0eXBlIHdoaWNoIGNhbiBlZmZpY2llbnRseSByZXByZXNlbnRcblwKIGFuIGFycmF5IG9mIGJhc2ljIHZhbHVlczogY2hhcmFjdGVycywgaW50ZWdlcnMsIGZsb2F0aW5nIHBvaW50XG5cCiBudW1iZXJzLiAgQXJyYXlzIGFyZSBzZXF1ZW5jZSB0eXBlcyBhbmQgYmVoYXZlIHZlcnkgbXVjaCBsaWtlIGxpc3RzLFxuXAotZXhjZXB0IHRoYXQgdGhlIHR5cGUgb2Ygb2JqZWN0cyBzdG9yZWQgaW4gdGhlbSBpcyBjb25zdHJhaW5lZC4gIFRoZVxuXAotdHlwZSBpcyBzcGVjaWZpZWQgYXQgb2JqZWN0IGNyZWF0aW9uIHRpbWUgYnkgdXNpbmcgYSB0eXBlIGNvZGUsIHdoaWNoXG5cCi1pcyBhIHNpbmdsZSBjaGFyYWN0ZXIuICBUaGUgZm9sbG93aW5nIHR5cGUgY29kZXMgYXJlIGRlZmluZWQ6XG5cCitleGNlcHQgdGhhdCB0aGUgdHlwZSBvZiBvYmplY3RzIHN0b3JlZCBpbiB0aGVtIGlzIGNvbnN0cmFpbmVkLlxuIik7CisKK1B5RG9jX1NUUlZBUihhcnJheXR5cGVfZG9jLAorImFycmF5KHR5cGVjb2RlIFssIGluaXRpYWxpemVyXSkgLT4gYXJyYXlcblwKK1xuXAorUmV0dXJuIGEgbmV3IGFycmF5IHdob3NlIGl0ZW1zIGFyZSByZXN0cmljdGVkIGJ5IHR5cGVjb2RlLCBhbmRcblwKK2luaXRpYWxpemVkIGZyb20gdGhlIG9wdGlvbmFsIGluaXRpYWxpemVyIHZhbHVlLCB3aGljaCBtdXN0IGJlIGEgbGlzdCxcblwKK3N0cmluZyBvciBpdGVyYWJsZSBvdmVyIGVsZW1lbnRzIG9mIHRoZSBhcHByb3ByaWF0ZSB0eXBlLlxuXAorXG5cCitBcnJheXMgcmVwcmVzZW50IGJhc2ljIHZhbHVlcyBhbmQgYmVoYXZlIHZlcnkgbXVjaCBsaWtlIGxpc3RzLCBleGNlcHRcblwKK3RoZSB0eXBlIG9mIG9iamVjdHMgc3RvcmVkIGluIHRoZW0gaXMgY29uc3RyYWluZWQuIFRoZSB0eXBlIGlzIHNwZWNpZmllZFxuXAorYXQgb2JqZWN0IGNyZWF0aW9uIHRpbWUgYnkgdXNpbmcgYSB0eXBlIGNvZGUsIHdoaWNoIGlzIGEgc2luZ2xlIGNoYXJhY3Rlci5cblwKK1RoZSBmb2xsb3dpbmcgdHlwZSBjb2RlcyBhcmUgZGVmaW5lZDpcblwKIFxuXAogICAgIFR5cGUgY29kZSAgIEMgVHlwZSAgICAgICAgICAgICBNaW5pbXVtIHNpemUgaW4gYnl0ZXMgXG5cCiAgICAgJ2InICAgICAgICAgc2lnbmVkIGludGVnZXIgICAgIDEgXG5cCkBAIC0yNjM5LDIxICsyNjk0LDYgQEAKIEMgY29tcGlsZXIgdXNlZCB0byBidWlsZCBQeXRob24gc3VwcG9ydHMgJ2xvbmcgbG9uZycsIG9yLCBvbiBXaW5kb3dzLCBcblwKICdfX2ludDY0Jy5cblwKIFxuXAotVGhlIGNvbnN0cnVjdG9yIGlzOlxuXAotXG5cCi1hcnJheSh0eXBlY29kZSBbLCBpbml0aWFsaXplcl0pIC0tIGNyZWF0ZSBhIG5ldyBhcnJheVxuXAotIik7Ci0KLVB5RG9jX1NUUlZBUihhcnJheXR5cGVfZG9jLAotImFycmF5KHR5cGVjb2RlIFssIGluaXRpYWxpemVyXSkgLT4gYXJyYXlcblwKLVxuXAotUmV0dXJuIGEgbmV3IGFycmF5IHdob3NlIGl0ZW1zIGFyZSByZXN0cmljdGVkIGJ5IHR5cGVjb2RlLCBhbmRcblwKLWluaXRpYWxpemVkIGZyb20gdGhlIG9wdGlvbmFsIGluaXRpYWxpemVyIHZhbHVlLCB3aGljaCBtdXN0IGJlIGEgbGlzdCxcblwKLXN0cmluZyBvciBpdGVyYWJsZSBvdmVyIGVsZW1lbnRzIG9mIHRoZSBhcHByb3ByaWF0ZSB0eXBlLlxuXAotXG5cCi1BcnJheXMgcmVwcmVzZW50IGJhc2ljIHZhbHVlcyBhbmQgYmVoYXZlIHZlcnkgbXVjaCBsaWtlIGxpc3RzLCBleGNlcHRcblwKLXRoZSB0eXBlIG9mIG9iamVjdHMgc3RvcmVkIGluIHRoZW0gaXMgY29uc3RyYWluZWQuXG5cCi1cblwKIE1ldGhvZHM6XG5cCiBcblwKIGFwcGVuZCgpIC0tIGFwcGVuZCBhIG5ldyBpdGVtIHRvIHRoZSBlbmQgb2YgdGhlIGFycmF5XG5cCmRpZmYgLS1naXQgYS9Nb2R1bGVzL2F0ZXhpdG1vZHVsZS5jIGIvTW9kdWxlcy9hdGV4aXRtb2R1bGUuYwppbmRleCBmNjhkODA0Li5iOWMzNDRhIDEwMDY0NAotLS0gYS9Nb2R1bGVzL2F0ZXhpdG1vZHVsZS5jCisrKyBiL01vZHVsZXMvYXRleGl0bW9kdWxlLmMKQEAgLTEwLDggKzEwLDYgQEAKIAogLyogRm9yd2FyZCBkZWNsYXJhdGlvbiAoZm9yIGF0ZXhpdF9jbGVhbnVwKSAqLwogc3RhdGljIFB5T2JqZWN0ICphdGV4aXRfY2xlYXIoUHlPYmplY3QqLCBQeU9iamVjdCopOwotLyogRm9yd2FyZCBkZWNsYXJhdGlvbiAoZm9yIGF0ZXhpdF9jYWxsZnVuY3MpICovCi1zdGF0aWMgdm9pZCBhdGV4aXRfY2xlYW51cChQeU9iamVjdCopOwogLyogRm9yd2FyZCBkZWNsYXJhdGlvbiBvZiBtb2R1bGUgb2JqZWN0ICovCiBzdGF0aWMgc3RydWN0IFB5TW9kdWxlRGVmIGF0ZXhpdG1vZHVsZTsKIApAQCAtMzMsNiArMzEsMzUgQEAKICNkZWZpbmUgR0VUX0FURVhJVF9TVEFURShtb2QpICgoYXRleGl0bW9kdWxlX3N0YXRlKilQeU1vZHVsZV9HZXRTdGF0ZShtb2QpKQogCiAKK3N0YXRpYyB2b2lkCithdGV4aXRfZGVsZXRlX2NiKGF0ZXhpdG1vZHVsZV9zdGF0ZSAqbW9kc3RhdGUsIGludCBpKQoreworICAgIGF0ZXhpdF9jYWxsYmFjayAqY2I7CisKKyAgICBjYiA9IG1vZHN0YXRlLT5hdGV4aXRfY2FsbGJhY2tzW2ldOworICAgIG1vZHN0YXRlLT5hdGV4aXRfY2FsbGJhY2tzW2ldID0gTlVMTDsKKyAgICBQeV9ERUNSRUYoY2ItPmZ1bmMpOworICAgIFB5X0RFQ1JFRihjYi0+YXJncyk7CisgICAgUHlfWERFQ1JFRihjYi0+a3dhcmdzKTsKKyAgICBQeU1lbV9GcmVlKGNiKTsKK30KKworLyogQ2xlYXIgYWxsIGNhbGxiYWNrcyB3aXRob3V0IGNhbGxpbmcgdGhlbSAqLworc3RhdGljIHZvaWQKK2F0ZXhpdF9jbGVhbnVwKGF0ZXhpdG1vZHVsZV9zdGF0ZSAqbW9kc3RhdGUpCit7CisgICAgYXRleGl0X2NhbGxiYWNrICpjYjsKKyAgICBpbnQgaTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbW9kc3RhdGUtPm5jYWxsYmFja3M7IGkrKykgeworICAgICAgICBjYiA9IG1vZHN0YXRlLT5hdGV4aXRfY2FsbGJhY2tzW2ldOworICAgICAgICBpZiAoY2IgPT0gTlVMTCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGF0ZXhpdF9kZWxldGVfY2IobW9kc3RhdGUsIGkpOworICAgIH0KKyAgICBtb2RzdGF0ZS0+bmNhbGxiYWNrcyA9IDA7Cit9CisKIC8qIEluc3RhbGxlZCBpbnRvIHB5dGhvbnJ1bi5jJ3MgYXRleGl0IG1lY2hhbmlzbSAqLwogCiBzdGF0aWMgdm9pZApAQCAtNzgsMzQgKzEwNSwxMiBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgYXRleGl0X2NsZWFudXAobW9kdWxlKTsKKyAgICBhdGV4aXRfY2xlYW51cChtb2RzdGF0ZSk7CiAKICAgICBpZiAoZXhjX3R5cGUpCiAgICAgICAgIFB5RXJyX1Jlc3RvcmUoZXhjX3R5cGUsIGV4Y192YWx1ZSwgZXhjX3RiKTsKIH0KIAotc3RhdGljIHZvaWQKLWF0ZXhpdF9kZWxldGVfY2IoUHlPYmplY3QgKnNlbGYsIGludCBpKQotewotICAgIGF0ZXhpdG1vZHVsZV9zdGF0ZSAqbW9kc3RhdGU7Ci0gICAgYXRleGl0X2NhbGxiYWNrICpjYjsKLQotICAgIG1vZHN0YXRlID0gR0VUX0FURVhJVF9TVEFURShzZWxmKTsKLSAgICBjYiA9IG1vZHN0YXRlLT5hdGV4aXRfY2FsbGJhY2tzW2ldOwotICAgIG1vZHN0YXRlLT5hdGV4aXRfY2FsbGJhY2tzW2ldID0gTlVMTDsKLSAgICBQeV9ERUNSRUYoY2ItPmZ1bmMpOwotICAgIFB5X0RFQ1JFRihjYi0+YXJncyk7Ci0gICAgUHlfWERFQ1JFRihjYi0+a3dhcmdzKTsKLSAgICBQeU1lbV9GcmVlKGNiKTsKLX0KLQotc3RhdGljIHZvaWQKLWF0ZXhpdF9jbGVhbnVwKFB5T2JqZWN0ICpzZWxmKQotewotICAgIFB5T2JqZWN0ICpyID0gYXRleGl0X2NsZWFyKHNlbGYsIE5VTEwpOwotICAgIFB5X0RFQ1JFRihyKTsKLX0KLQogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiAvKiBNb2R1bGUgbWV0aG9kcy4gKi8KIApAQCAtMTk0LDIxICsxOTksNTAgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBhdGV4aXRfY2xlYXIoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICp1bnVzZWQpCiB7CisgICAgYXRleGl0X2NsZWFudXAoR0VUX0FURVhJVF9TVEFURShzZWxmKSk7CisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKK1B5RG9jX1NUUlZBUihhdGV4aXRfbmNhbGxiYWNrc19fZG9jX18sCisiX25jYWxsYmFja3MoKSAtPiBpbnRcblwKK1xuXAorUmV0dXJuIHRoZSBudW1iZXIgb2YgcmVnaXN0ZXJlZCBleGl0IGZ1bmN0aW9ucy4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2F0ZXhpdF9uY2FsbGJhY2tzKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqdW51c2VkKQorewogICAgIGF0ZXhpdG1vZHVsZV9zdGF0ZSAqbW9kc3RhdGU7Ci0gICAgYXRleGl0X2NhbGxiYWNrICpjYjsKLSAgICBpbnQgaTsKIAogICAgIG1vZHN0YXRlID0gR0VUX0FURVhJVF9TVEFURShzZWxmKTsKIAorICAgIHJldHVybiBQeUxvbmdfRnJvbVNzaXplX3QobW9kc3RhdGUtPm5jYWxsYmFja3MpOworfQorCitzdGF0aWMgaW50CithdGV4aXRfbV90cmF2ZXJzZShQeU9iamVjdCAqc2VsZiwgdmlzaXRwcm9jIHZpc2l0LCB2b2lkICphcmcpCit7CisgICAgaW50IGk7CisgICAgYXRleGl0bW9kdWxlX3N0YXRlICptb2RzdGF0ZTsKKworICAgIG1vZHN0YXRlID0gR0VUX0FURVhJVF9TVEFURShzZWxmKTsKICAgICBmb3IgKGkgPSAwOyBpIDwgbW9kc3RhdGUtPm5jYWxsYmFja3M7IGkrKykgewotICAgICAgICBjYiA9IG1vZHN0YXRlLT5hdGV4aXRfY2FsbGJhY2tzW2ldOworICAgICAgICBhdGV4aXRfY2FsbGJhY2sgKmNiID0gbW9kc3RhdGUtPmF0ZXhpdF9jYWxsYmFja3NbaV07CiAgICAgICAgIGlmIChjYiA9PSBOVUxMKQogICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgYXRleGl0X2RlbGV0ZV9jYihzZWxmLCBpKTsKKyAgICAgICAgUHlfVklTSVQoY2ItPmZ1bmMpOworICAgICAgICBQeV9WSVNJVChjYi0+YXJncyk7CisgICAgICAgIFB5X1ZJU0lUKGNiLT5rd2FyZ3MpOwogICAgIH0KLSAgICBtb2RzdGF0ZS0+bmNhbGxiYWNrcyA9IDA7Ci0gICAgUHlfUkVUVVJOX05PTkU7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2F0ZXhpdF9tX2NsZWFyKFB5T2JqZWN0ICpzZWxmKQoreworICAgIGF0ZXhpdG1vZHVsZV9zdGF0ZSAqbW9kc3RhdGU7CisgICAgbW9kc3RhdGUgPSBHRVRfQVRFWElUX1NUQVRFKHNlbGYpOworICAgIGF0ZXhpdF9jbGVhbnVwKG1vZHN0YXRlKTsKKyAgICByZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTIxNiwxMyArMjUwLDE0IEBACiB7CiAgICAgYXRleGl0bW9kdWxlX3N0YXRlICptb2RzdGF0ZTsKICAgICBtb2RzdGF0ZSA9IEdFVF9BVEVYSVRfU1RBVEUobSk7CisgICAgYXRleGl0X2NsZWFudXAobW9kc3RhdGUpOwogICAgIFB5TWVtX0ZyZWUobW9kc3RhdGUtPmF0ZXhpdF9jYWxsYmFja3MpOwogfQogCiBQeURvY19TVFJWQVIoYXRleGl0X3VucmVnaXN0ZXJfX2RvY19fLAogInVucmVnaXN0ZXIoZnVuYykgLT4gTm9uZVxuXAogXG5cCi1VbnJlZ2lzdGVyIGEgZXhpdCBmdW5jdGlvbiB3aGljaCB3YXMgcHJldmlvdXNseSByZWdpc3RlcmVkIHVzaW5nXG5cCitVbnJlZ2lzdGVyIGFuIGV4aXQgZnVuY3Rpb24gd2hpY2ggd2FzIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCB1c2luZ1xuXAogYXRleGl0LnJlZ2lzdGVyXG5cCiBcblwKICAgICBmdW5jIC0gZnVuY3Rpb24gdG8gYmUgdW5yZWdpc3RlcmVkIik7CkBAIC0yNDYsNyArMjgxLDcgQEAKICAgICAgICAgaWYgKGVxIDwgMCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICBpZiAoZXEpCi0gICAgICAgICAgICBhdGV4aXRfZGVsZXRlX2NiKHNlbGYsIGkpOworICAgICAgICAgICAgYXRleGl0X2RlbGV0ZV9jYihtb2RzdGF0ZSwgaSk7CiAgICAgfQogICAgIFB5X1JFVFVSTl9OT05FOwogfQpAQCAtMjYwLDYgKzI5NSw4IEBACiAgICAgICAgIGF0ZXhpdF91bnJlZ2lzdGVyX19kb2NfX30sCiAgICAgeyJfcnVuX2V4aXRmdW5jcyIsIChQeUNGdW5jdGlvbikgYXRleGl0X3J1bl9leGl0ZnVuY3MsIE1FVEhfTk9BUkdTLAogICAgICAgICBhdGV4aXRfcnVuX2V4aXRmdW5jc19fZG9jX199LAorICAgIHsiX25jYWxsYmFja3MiLCAoUHlDRnVuY3Rpb24pIGF0ZXhpdF9uY2FsbGJhY2tzLCBNRVRIX05PQVJHUywKKyAgICAgICAgYXRleGl0X25jYWxsYmFja3NfX2RvY19ffSwKICAgICB7TlVMTCwgTlVMTH0gICAgICAgIC8qIHNlbnRpbmVsICovCiB9OwogCkBAIC0yNzUsMTUgKzMxMiwxNSBAQAogCiAKIHN0YXRpYyBzdHJ1Y3QgUHlNb2R1bGVEZWYgYXRleGl0bW9kdWxlID0gewotCVB5TW9kdWxlRGVmX0hFQURfSU5JVCwKLQkiYXRleGl0IiwKLQlhdGV4aXRfX2RvY19fLAotCXNpemVvZihhdGV4aXRtb2R1bGVfc3RhdGUpLAotCWF0ZXhpdF9tZXRob2RzLAotCU5VTEwsCi0JTlVMTCwKLQlOVUxMLAotCShmcmVlZnVuYylhdGV4aXRfZnJlZQorICAgIFB5TW9kdWxlRGVmX0hFQURfSU5JVCwKKyAgICAiYXRleGl0IiwKKyAgICBhdGV4aXRfX2RvY19fLAorICAgIHNpemVvZihhdGV4aXRtb2R1bGVfc3RhdGUpLAorICAgIGF0ZXhpdF9tZXRob2RzLAorICAgIE5VTEwsCisgICAgYXRleGl0X21fdHJhdmVyc2UsCisgICAgYXRleGl0X21fY2xlYXIsCisgICAgKGZyZWVmdW5jKWF0ZXhpdF9mcmVlCiB9OwogCiBQeU1PRElOSVRfRlVOQwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9hdWRpb29wLmMgYi9Nb2R1bGVzL2F1ZGlvb3AuYwppbmRleCAzZjA0NzYyLi45YTVkOGMxIDEwMDY0NAotLS0gYS9Nb2R1bGVzL2F1ZGlvb3AuYworKysgYi9Nb2R1bGVzL2F1ZGlvb3AuYwpAQCAtNSwxOCArNSw2IEBACiAKICNpbmNsdWRlICJQeXRob24uaCIKIAotI2lmIFNJWkVPRl9JTlQgPT0gNAotdHlwZWRlZiBpbnQgUHlfSW50MzI7Ci10eXBlZGVmIHVuc2lnbmVkIGludCBQeV9VSW50MzI7Ci0jZWxzZQotI2lmIFNJWkVPRl9MT05HID09IDQKLXR5cGVkZWYgbG9uZyBQeV9JbnQzMjsKLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBQeV9VSW50MzI7Ci0jZWxzZQotI2Vycm9yICJObyA0LWJ5dGUgaW50ZWdyYWwgdHlwZSIKLSNlbmRpZgotI2VuZGlmCi0KIHR5cGVkZWYgc2hvcnQgUHlJbnQxNjsKIAogI2lmIGRlZmluZWQoX19DSEFSX1VOU0lHTkVEX18pCkBAIC0zOCw3ICsyNiw3IEBACiAgICAgICAgIHZhbCA9IG1heHZhbDsKICAgICBlbHNlIGlmICh2YWwgPCBtaW52YWwgKyAxKQogICAgICAgICB2YWwgPSBtaW52YWw7Ci0gICAgcmV0dXJuIHZhbDsKKyAgICByZXR1cm4gKGludCl2YWw7CiB9CiAKIApAQCAtMTI0LDcgKzExMiw3IEBACiAKIC8qCiAgKiBsaW5lYXIydWxhdygpIGFjY2VwdHMgYSAxNC1iaXQgc2lnbmVkIGludGVnZXIgYW5kIGVuY29kZXMgaXQgYXMgdS1sYXcgZGF0YQotICogc3RvcmVkIGluIGEgdW5zaWduZWQgY2hhci4gIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdpdGgKKyAqIHN0b3JlZCBpbiBhbiB1bnNpZ25lZCBjaGFyLiAgVGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBiZSBjYWxsZWQgd2l0aAogICogdGhlIGRhdGEgc2hpZnRlZCBzdWNoIHRoYXQgaXQgb25seSBjb250YWlucyBpbmZvcm1hdGlvbiBpbiB0aGUgbG93ZXIKICAqIDE0LWJpdHMuCiAgKgpAQCAtMTYxLDkgKzE0OSw2IEBACiAgICAgUHlJbnQxNiAgICAgICAgIHNlZzsKICAgICB1bnNpZ25lZCBjaGFyICAgdXZhbDsKIAotICAgIC8qIFRoZSBvcmlnaW5hbCBzb3ggY29kZSBkb2VzIHRoaXMgaW4gdGhlIGNhbGxpbmcgZnVuY3Rpb24sIG5vdCBoZXJlICovCi0gICAgcGNtX3ZhbCA9IHBjbV92YWwgPj4gMjsKLQogICAgIC8qIHUtbGF3IGludmVydHMgYWxsIGJpdHMgKi8KICAgICAvKiBHZXQgdGhlIHNpZ24gYW5kIHRoZSBtYWduaXR1ZGUgb2YgdGhlIHZhbHVlLiAqLwogICAgIGlmIChwY21fdmFsIDwgMCkgewpAQCAtMjMzLDcgKzIxOCw3IEBACiAKIC8qCiAgKiBsaW5lYXIyYWxhdygpIGFjY2VwdHMgYW4gMTMtYml0IHNpZ25lZCBpbnRlZ2VyIGFuZCBlbmNvZGVzIGl0IGFzIEEtbGF3IGRhdGEKLSAqIHN0b3JlZCBpbiBhIHVuc2lnbmVkIGNoYXIuICBUaGlzIGZ1bmN0aW9uIHNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aXRoCisgKiBzdG9yZWQgaW4gYW4gdW5zaWduZWQgY2hhci4gIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdpdGgKICAqIHRoZSBkYXRhIHNoaWZ0ZWQgc3VjaCB0aGF0IGl0IG9ubHkgY29udGFpbnMgaW5mb3JtYXRpb24gaW4gdGhlIGxvd2VyCiAgKiAxMy1iaXRzLgogICoKQEAgLTI1OCw5ICsyNDMsNiBAQAogICAgIHNob3J0ICAgICAgICAgICBzZWc7CiAgICAgdW5zaWduZWQgY2hhciAgIGF2YWw7CiAKLSAgICAvKiBUaGUgb3JpZ2luYWwgc294IGNvZGUgZG9lcyB0aGlzIGluIHRoZSBjYWxsaW5nIGZ1bmN0aW9uLCBub3QgaGVyZSAqLwotICAgIHBjbV92YWwgPSBwY21fdmFsID4+IDM7Ci0KICAgICAvKiBBLWxhdyB1c2luZyBldmVuIGJpdCBpbnZlcnNpb24gKi8KICAgICBpZiAocGNtX3ZhbCA+PSAwKSB7CiAgICAgICAgIG1hc2sgPSAweEQ1OyAgICAgICAgICAgIC8qIHNpZ24gKDd0aCkgYml0ID0gMSAqLwpAQCAtMzA1LDE5ICsyODcsOTEgQEAKICAgICAxNTI4OSwgMTY4MTgsIDE4NTAwLCAyMDM1MCwgMjIzODUsIDI0NjIzLCAyNzA4NiwgMjk3OTQsIDMyNzY3CiB9OwogCi0jZGVmaW5lIENIQVJQKGNwLCBpKSAoKHNpZ25lZCBjaGFyICopKGNwK2kpKQotI2RlZmluZSBTSE9SVFAoY3AsIGkpICgoc2hvcnQgKikoY3AraSkpCi0jZGVmaW5lIExPTkdQKGNwLCBpKSAoKFB5X0ludDMyICopKGNwK2kpKQorI2RlZmluZSBHRVRJTlRYKFQsIGNwLCBpKSAgKCooVCAqKSgodW5zaWduZWQgY2hhciAqKShjcCkgKyAoaSkpKQorI2RlZmluZSBTRVRJTlRYKFQsIGNwLCBpLCB2YWwpICBkbyB7ICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICooVCAqKSgodW5zaWduZWQgY2hhciAqKShjcCkgKyAoaSkpID0gKFQpKHZhbCk7IFwKKyAgICB9IHdoaWxlICgwKQogCiAKKyNkZWZpbmUgR0VUSU5UOChjcCwgaSkgICAgICAgICAgR0VUSU5UWChzaWduZWQgY2hhciwgKGNwKSwgKGkpKQorI2RlZmluZSBHRVRJTlQxNihjcCwgaSkgICAgICAgICBHRVRJTlRYKHNob3J0LCAoY3ApLCAoaSkpCisjZGVmaW5lIEdFVElOVDMyKGNwLCBpKSAgICAgICAgIEdFVElOVFgoUFlfSU5UMzJfVCwgKGNwKSwgKGkpKQorCisjaWYgV09SRFNfQklHRU5ESUFOCisjZGVmaW5lIEdFVElOVDI0KGNwLCBpKSAgKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKCh1bnNpZ25lZCBjaGFyICopKGNwKSArIChpKSlbMl0gKyAgICAgICAgICAgICAgXAorICAgICAgICAoKCh1bnNpZ25lZCBjaGFyICopKGNwKSArIChpKSlbMV0gPDwgOCkgKyAgICAgICBcCisgICAgICAgICgoKHNpZ25lZCBjaGFyICopKGNwKSArIChpKSlbMF0gPDwgMTYpICkKKyNlbHNlCisjZGVmaW5lIEdFVElOVDI0KGNwLCBpKSAgKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKCh1bnNpZ25lZCBjaGFyICopKGNwKSArIChpKSlbMF0gKyAgICAgICAgICAgICAgXAorICAgICAgICAoKCh1bnNpZ25lZCBjaGFyICopKGNwKSArIChpKSlbMV0gPDwgOCkgKyAgICAgICBcCisgICAgICAgICgoKHNpZ25lZCBjaGFyICopKGNwKSArIChpKSlbMl0gPDwgMTYpICkKKyNlbmRpZgorCisKKyNkZWZpbmUgU0VUSU5UOChjcCwgaSwgdmFsKSAgICAgU0VUSU5UWChzaWduZWQgY2hhciwgKGNwKSwgKGkpLCAodmFsKSkKKyNkZWZpbmUgU0VUSU5UMTYoY3AsIGksIHZhbCkgICAgU0VUSU5UWChzaG9ydCwgKGNwKSwgKGkpLCAodmFsKSkKKyNkZWZpbmUgU0VUSU5UMzIoY3AsIGksIHZhbCkgICAgU0VUSU5UWChQWV9JTlQzMl9ULCAoY3ApLCAoaSksICh2YWwpKQorCisjaWYgV09SRFNfQklHRU5ESUFOCisjZGVmaW5lIFNFVElOVDI0KGNwLCBpLCB2YWwpICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAoKHVuc2lnbmVkIGNoYXIgKikoY3ApICsgKGkpKVsyXSA9IChpbnQpKHZhbCk7ICAgICAgICAgIFwKKyAgICAgICAgKCh1bnNpZ25lZCBjaGFyICopKGNwKSArIChpKSlbMV0gPSAoaW50KSh2YWwpID4+IDg7ICAgICBcCisgICAgICAgICgoc2lnbmVkIGNoYXIgKikoY3ApICsgKGkpKVswXSA9IChpbnQpKHZhbCkgPj4gMTY7ICAgICAgXAorICAgIH0gd2hpbGUgKDApCisjZWxzZQorI2RlZmluZSBTRVRJTlQyNChjcCwgaSwgdmFsKSAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKCh1bnNpZ25lZCBjaGFyICopKGNwKSArIChpKSlbMF0gPSAoaW50KSh2YWwpOyAgICAgICAgICBcCisgICAgICAgICgodW5zaWduZWQgY2hhciAqKShjcCkgKyAoaSkpWzFdID0gKGludCkodmFsKSA+PiA4OyAgICAgXAorICAgICAgICAoKHNpZ25lZCBjaGFyICopKGNwKSArIChpKSlbMl0gPSAoaW50KSh2YWwpID4+IDE2OyAgICAgIFwKKyAgICB9IHdoaWxlICgwKQorI2VuZGlmCisKKworI2RlZmluZSBHRVRSQVdTQU1QTEUoc2l6ZSwgY3AsIGkpICAoICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIChzaXplID09IDEpID8gKGludClHRVRJTlQ4KChjcCksIChpKSkgOiAgICAgICAgIFwKKyAgICAgICAgKHNpemUgPT0gMikgPyAoaW50KUdFVElOVDE2KChjcCksIChpKSkgOiAgICAgICAgXAorICAgICAgICAoc2l6ZSA9PSAzKSA/IChpbnQpR0VUSU5UMjQoKGNwKSwgKGkpKSA6ICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgKGludClHRVRJTlQzMigoY3ApLCAoaSkpKQorCisjZGVmaW5lIFNFVFJBV1NBTVBMRShzaXplLCBjcCwgaSwgdmFsKSAgZG8geyAgICBcCisgICAgICAgIGlmIChzaXplID09IDEpICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBTRVRJTlQ4KChjcCksIChpKSwgKHZhbCkpOyAgICAgICAgICBcCisgICAgICAgIGVsc2UgaWYgKHNpemUgPT0gMikgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBTRVRJTlQxNigoY3ApLCAoaSksICh2YWwpKTsgICAgICAgICBcCisgICAgICAgIGVsc2UgaWYgKHNpemUgPT0gMykgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBTRVRJTlQyNCgoY3ApLCAoaSksICh2YWwpKTsgICAgICAgICBcCisgICAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBTRVRJTlQzMigoY3ApLCAoaSksICh2YWwpKTsgICAgICAgICBcCisgICAgfSB3aGlsZSgwKQorCisKKyNkZWZpbmUgR0VUU0FNUExFMzIoc2l6ZSwgY3AsIGkpICAoICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAoc2l6ZSA9PSAxKSA/IChpbnQpR0VUSU5UOCgoY3ApLCAoaSkpIDw8IDI0IDogICBcCisgICAgICAgIChzaXplID09IDIpID8gKGludClHRVRJTlQxNigoY3ApLCAoaSkpIDw8IDE2IDogIFwKKyAgICAgICAgKHNpemUgPT0gMykgPyAoaW50KUdFVElOVDI0KChjcCksIChpKSkgPDwgOCA6ICAgXAorICAgICAgICAgICAgICAgICAgICAgIChpbnQpR0VUSU5UMzIoKGNwKSwgKGkpKSkKKworI2RlZmluZSBTRVRTQU1QTEUzMihzaXplLCBjcCwgaSwgdmFsKSAgZG8geyAgICAgXAorICAgICAgICBpZiAoc2l6ZSA9PSAxKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgU0VUSU5UOCgoY3ApLCAoaSksICh2YWwpID4+IDI0KTsgICAgXAorICAgICAgICBlbHNlIGlmIChzaXplID09IDIpICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgU0VUSU5UMTYoKGNwKSwgKGkpLCAodmFsKSA+PiAxNik7ICAgXAorICAgICAgICBlbHNlIGlmIChzaXplID09IDMpICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgU0VUSU5UMjQoKGNwKSwgKGkpLCAodmFsKSA+PiA4KTsgICAgXAorICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgU0VUSU5UMzIoKGNwKSwgKGkpLCAodmFsKSk7ICAgICAgICAgXAorICAgIH0gd2hpbGUoMCkKKwogCiBzdGF0aWMgUHlPYmplY3QgKkF1ZGlvb3BFcnJvcjsKIAogc3RhdGljIGludAogYXVkaW9vcF9jaGVja19zaXplKGludCBzaXplKQogewotICAgIGlmIChzaXplICE9IDEgJiYgc2l6ZSAhPSAyICYmIHNpemUgIT0gNCkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoQXVkaW9vcEVycm9yLCAiU2l6ZSBzaG91bGQgYmUgMSwgMiBvciA0Iik7CisgICAgaWYgKHNpemUgPCAxIHx8IHNpemUgPiA0KSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhBdWRpb29wRXJyb3IsICJTaXplIHNob3VsZCBiZSAxLCAyLCAzIG9yIDQiKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIGVsc2UKQEAgLTMzNiw0MyArMzkwLDYwIEBACiAgICAgcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBQeU9iamVjdCAqCi1hdWRpb29wX2dldHNhbXBsZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi17Ci0gICAgc2lnbmVkIGNoYXIgKmNwOwotICAgIFB5X3NzaXplX3QgbGVuLCBpOwotICAgIGludCBzaXplLCB2YWwgPSAwOworLypbY2xpbmljIGlucHV0XQorb3V0cHV0IHByZXNldCBmaWxlCittb2R1bGUgYXVkaW9vcAorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWRhMzlhM2VlNWU2YjRiMGQgaW5wdXQ9NTYxOWY5MzVmMjY5MTk5YV0qLwogCi0gICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyNpbjpnZXRzYW1wbGUiLCAmY3AsICZsZW4sICZzaXplLCAmaSkgKQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfcGFyYW1ldGVycyhsZW4sIHNpemUpKQorLypbY2xpbmljIGlucHV0XQorYXVkaW9vcC5nZXRzYW1wbGUKKworICAgIGZyYWdtZW50OiBQeV9idWZmZXIKKyAgICB3aWR0aDogaW50CisgICAgaW5kZXg6IFB5X3NzaXplX3QKKyAgICAvCisKK1JldHVybiB0aGUgdmFsdWUgb2Ygc2FtcGxlIGluZGV4IGZyb20gdGhlIGZyYWdtZW50LgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitzdGF0aWMgUHlPYmplY3QgKgorYXVkaW9vcF9nZXRzYW1wbGVfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgsIFB5X3NzaXplX3QgaW5kZXgpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZjQ0ODI0OTdlNmY2ZTc4ZiBpbnB1dD04OGVkYmUyODcxMzkzNTQ5XSovCit7CisgICAgaW50IHZhbDsKKworICAgIGlmICghYXVkaW9vcF9jaGVja19wYXJhbWV0ZXJzKGZyYWdtZW50LT5sZW4sIHdpZHRoKSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKCBpIDwgMCB8fCBpID49IGxlbi9zaXplICkgeworICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gZnJhZ21lbnQtPmxlbi93aWR0aCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoQXVkaW9vcEVycm9yLCAiSW5kZXggb3V0IG9mIHJhbmdlIik7Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgaWYgKCBzaXplID09IDEgKSAgICAgIHZhbCA9IChpbnQpKkNIQVJQKGNwLCBpKTsKLSAgICBlbHNlIGlmICggc2l6ZSA9PSAyICkgdmFsID0gKGludCkqU0hPUlRQKGNwLCBpKjIpOwotICAgIGVsc2UgaWYgKCBzaXplID09IDQgKSB2YWwgPSAoaW50KSpMT05HUChjcCwgaSo0KTsKKyAgICB2YWwgPSBHRVRSQVdTQU1QTEUod2lkdGgsIGZyYWdtZW50LT5idWYsIGluZGV4KndpZHRoKTsKICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKHZhbCk7CiB9CiAKKy8qW2NsaW5pYyBpbnB1dF0KK2F1ZGlvb3AubWF4CisKKyAgICBmcmFnbWVudDogUHlfYnVmZmVyCisgICAgd2lkdGg6IGludAorICAgIC8KKworUmV0dXJuIHRoZSBtYXhpbXVtIG9mIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiBhbGwgc2FtcGxlcyBpbiBhIGZyYWdtZW50LgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotYXVkaW9vcF9tYXgoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorYXVkaW9vcF9tYXhfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ODUwNDdlZTEwMDFmMjMwNSBpbnB1dD0zMmJlYTVlYTBhYzhjMjIzXSovCiB7Ci0gICAgc2lnbmVkIGNoYXIgKmNwOwotICAgIFB5X3NzaXplX3QgbGVuLCBpOwotICAgIGludCBzaXplLCB2YWwgPSAwOworICAgIFB5X3NzaXplX3QgaTsKICAgICB1bnNpZ25lZCBpbnQgYWJzdmFsLCBtYXggPSAwOwogCi0gICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyNpOm1heCIsICZjcCwgJmxlbiwgJnNpemUpICkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKCFhdWRpb29wX2NoZWNrX3BhcmFtZXRlcnMobGVuLCBzaXplKSkKKyAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfcGFyYW1ldGVycyhmcmFnbWVudC0+bGVuLCB3aWR0aCkpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGZvciAoIGk9MDsgaTxsZW47IGkrPSBzaXplKSB7Ci0gICAgICAgIGlmICggc2l6ZSA9PSAxICkgICAgICB2YWwgPSAoaW50KSpDSEFSUChjcCwgaSk7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDIgKSB2YWwgPSAoaW50KSpTSE9SVFAoY3AsIGkpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSA0ICkgdmFsID0gKGludCkqTE9OR1AoY3AsIGkpOworICAgIGZvciAoaSA9IDA7IGkgPCBmcmFnbWVudC0+bGVuOyBpICs9IHdpZHRoKSB7CisgICAgICAgIGludCB2YWwgPSBHRVRSQVdTQU1QTEUod2lkdGgsIGZyYWdtZW50LT5idWYsIGkpOwogICAgICAgICBpZiAodmFsIDwgMCkgYWJzdmFsID0gKC12YWwpOwogICAgICAgICBlbHNlIGFic3ZhbCA9IHZhbDsKICAgICAgICAgaWYgKGFic3ZhbCA+IG1heCkgbWF4ID0gYWJzdmFsOwpAQCAtMzgwLDgyICs0NTEsOTYgQEAKICAgICByZXR1cm4gUHlMb25nX0Zyb21VbnNpZ25lZExvbmcobWF4KTsKIH0KIAorLypbY2xpbmljIGlucHV0XQorYXVkaW9vcC5taW5tYXgKKworICAgIGZyYWdtZW50OiBQeV9idWZmZXIKKyAgICB3aWR0aDogaW50CisgICAgLworCitSZXR1cm4gdGhlIG1pbmltdW0gYW5kIG1heGltdW0gdmFsdWVzIG9mIGFsbCBzYW1wbGVzIGluIHRoZSBzb3VuZCBmcmFnbWVudC4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKLWF1ZGlvb3BfbWlubWF4KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK2F1ZGlvb3BfbWlubWF4X2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwgaW50IHdpZHRoKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWFlOGY1NTEzYzY0ZmQ1NjkgaW5wdXQ9ODk4NDhlOWI5MjdhMDY5Nl0qLwogewotICAgIHNpZ25lZCBjaGFyICpjcDsKLSAgICBQeV9zc2l6ZV90IGxlbiwgaTsKLSAgICBpbnQgc2l6ZSwgdmFsID0gMDsKKyAgICBQeV9zc2l6ZV90IGk7CiAgICAgLyogLTEgdHJpY2sgYmVsb3cgaXMgbmVlZGVkIG9uIFdpbmRvd3MgdG8gc3VwcG9ydCAtMHg4MDAwMDAwMCB3aXRob3V0CiAgICAgYSB3YXJuaW5nICovCiAgICAgaW50IG1pbiA9IDB4N2ZmZmZmZmYsIG1heCA9IC0weDdGRkZGRkZGLTE7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjaTptaW5tYXgiLCAmY3AsICZsZW4sICZzaXplKSkKKyAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfcGFyYW1ldGVycyhmcmFnbWVudC0+bGVuLCB3aWR0aCkpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmICghYXVkaW9vcF9jaGVja19wYXJhbWV0ZXJzKGxlbiwgc2l6ZSkpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkgKz0gc2l6ZSkgewotICAgICAgICBpZiAoc2l6ZSA9PSAxKSB2YWwgPSAoaW50KSAqQ0hBUlAoY3AsIGkpOwotICAgICAgICBlbHNlIGlmIChzaXplID09IDIpIHZhbCA9IChpbnQpICpTSE9SVFAoY3AsIGkpOwotICAgICAgICBlbHNlIGlmIChzaXplID09IDQpIHZhbCA9IChpbnQpICpMT05HUChjcCwgaSk7CisgICAgZm9yIChpID0gMDsgaSA8IGZyYWdtZW50LT5sZW47IGkgKz0gd2lkdGgpIHsKKyAgICAgICAgaW50IHZhbCA9IEdFVFJBV1NBTVBMRSh3aWR0aCwgZnJhZ21lbnQtPmJ1ZiwgaSk7CiAgICAgICAgIGlmICh2YWwgPiBtYXgpIG1heCA9IHZhbDsKICAgICAgICAgaWYgKHZhbCA8IG1pbikgbWluID0gdmFsOwogICAgIH0KICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiKGlpKSIsIG1pbiwgbWF4KTsKIH0KIAotc3RhdGljIFB5T2JqZWN0ICoKLWF1ZGlvb3BfYXZnKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKLXsKLSAgICBzaWduZWQgY2hhciAqY3A7Ci0gICAgUHlfc3NpemVfdCBsZW4sIGk7Ci0gICAgaW50IHNpemUsIHZhbCA9IDA7Ci0gICAgZG91YmxlIGF2ZyA9IDAuMDsKKy8qW2NsaW5pYyBpbnB1dF0KK2F1ZGlvb3AuYXZnCiAKLSAgICBpZiAoICFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzI2k6YXZnIiwgJmNwLCAmbGVuLCAmc2l6ZSkgKQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfcGFyYW1ldGVycyhsZW4sIHNpemUpKQorICAgIGZyYWdtZW50OiBQeV9idWZmZXIKKyAgICB3aWR0aDogaW50CisgICAgLworCitSZXR1cm4gdGhlIGF2ZXJhZ2Ugb3ZlciBhbGwgc2FtcGxlcyBpbiB0aGUgZnJhZ21lbnQuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK3N0YXRpYyBQeU9iamVjdCAqCithdWRpb29wX2F2Z19pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIGludCB3aWR0aCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD03ZmNjZDY0NWM5NWY0ODYwIGlucHV0PTExMTQ0OTNjNzYxMTMzNGRdKi8KK3sKKyAgICBQeV9zc2l6ZV90IGk7CisgICAgaW50IGF2ZzsKKyAgICBkb3VibGUgc3VtID0gMC4wOworCisgICAgaWYgKCFhdWRpb29wX2NoZWNrX3BhcmFtZXRlcnMoZnJhZ21lbnQtPmxlbiwgd2lkdGgpKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBmb3IgKCBpPTA7IGk8bGVuOyBpKz0gc2l6ZSkgewotICAgICAgICBpZiAoIHNpemUgPT0gMSApICAgICAgdmFsID0gKGludCkqQ0hBUlAoY3AsIGkpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSAyICkgdmFsID0gKGludCkqU0hPUlRQKGNwLCBpKTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gNCApIHZhbCA9IChpbnQpKkxPTkdQKGNwLCBpKTsKLSAgICAgICAgYXZnICs9IHZhbDsKLSAgICB9Ci0gICAgaWYgKCBsZW4gPT0gMCApCi0gICAgICAgIHZhbCA9IDA7CisgICAgZm9yIChpID0gMDsgaSA8IGZyYWdtZW50LT5sZW47IGkgKz0gd2lkdGgpCisgICAgICAgIHN1bSArPSBHRVRSQVdTQU1QTEUod2lkdGgsIGZyYWdtZW50LT5idWYsIGkpOworICAgIGlmIChmcmFnbWVudC0+bGVuID09IDApCisgICAgICAgIGF2ZyA9IDA7CiAgICAgZWxzZQotICAgICAgICB2YWwgPSAoaW50KWZsb29yKGF2ZyAvIChkb3VibGUpKGxlbi9zaXplKSk7Ci0gICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZyh2YWwpOworICAgICAgICBhdmcgPSAoaW50KWZsb29yKHN1bSAvIChkb3VibGUpKGZyYWdtZW50LT5sZW4vd2lkdGgpKTsKKyAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKGF2Zyk7CiB9CiAKKy8qW2NsaW5pYyBpbnB1dF0KK2F1ZGlvb3Aucm1zCisKKyAgICBmcmFnbWVudDogUHlfYnVmZmVyCisgICAgd2lkdGg6IGludAorICAgIC8KKworUmV0dXJuIHRoZSByb290LW1lYW4tc3F1YXJlIG9mIHRoZSBmcmFnbWVudCwgaS5lLiBzcXJ0KHN1bShTX2leMikvbikuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi1hdWRpb29wX3JtcyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCithdWRpb29wX3Jtc19pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIGludCB3aWR0aCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD03YjM5ODcwMmM4MWI3MDlkIGlucHV0PTRjYzU3YzZjOTQyMTlkNzhdKi8KIHsKLSAgICBzaWduZWQgY2hhciAqY3A7Ci0gICAgUHlfc3NpemVfdCBsZW4sIGk7Ci0gICAgaW50IHNpemUsIHZhbCA9IDA7CisgICAgUHlfc3NpemVfdCBpOwogICAgIHVuc2lnbmVkIGludCByZXM7CiAgICAgZG91YmxlIHN1bV9zcXVhcmVzID0gMC4wOwogCi0gICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyNpOnJtcyIsICZjcCwgJmxlbiwgJnNpemUpICkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKCFhdWRpb29wX2NoZWNrX3BhcmFtZXRlcnMobGVuLCBzaXplKSkKKyAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfcGFyYW1ldGVycyhmcmFnbWVudC0+bGVuLCB3aWR0aCkpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGZvciAoIGk9MDsgaTxsZW47IGkrPSBzaXplKSB7Ci0gICAgICAgIGlmICggc2l6ZSA9PSAxICkgICAgICB2YWwgPSAoaW50KSpDSEFSUChjcCwgaSk7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDIgKSB2YWwgPSAoaW50KSpTSE9SVFAoY3AsIGkpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSA0ICkgdmFsID0gKGludCkqTE9OR1AoY3AsIGkpOwotICAgICAgICBzdW1fc3F1YXJlcyArPSAoZG91YmxlKXZhbCooZG91YmxlKXZhbDsKKyAgICBmb3IgKGkgPSAwOyBpIDwgZnJhZ21lbnQtPmxlbjsgaSArPSB3aWR0aCkgeworICAgICAgICBkb3VibGUgdmFsID0gR0VUUkFXU0FNUExFKHdpZHRoLCBmcmFnbWVudC0+YnVmLCBpKTsKKyAgICAgICAgc3VtX3NxdWFyZXMgKz0gdmFsKnZhbDsKICAgICB9Ci0gICAgaWYgKCBsZW4gPT0gMCApCisgICAgaWYgKGZyYWdtZW50LT5sZW4gPT0gMCkKICAgICAgICAgcmVzID0gMDsKICAgICBlbHNlCi0gICAgICAgIHJlcyA9ICh1bnNpZ25lZCBpbnQpc3FydChzdW1fc3F1YXJlcyAvIChkb3VibGUpKGxlbi9zaXplKSk7CisgICAgICAgIHJlcyA9ICh1bnNpZ25lZCBpbnQpc3FydChzdW1fc3F1YXJlcyAvIChkb3VibGUpKGZyYWdtZW50LT5sZW4vd2lkdGgpKTsKICAgICByZXR1cm4gUHlMb25nX0Zyb21VbnNpZ25lZExvbmcocmVzKTsKIH0KIAotc3RhdGljIGRvdWJsZSBfc3VtMihzaG9ydCAqYSwgc2hvcnQgKmIsIFB5X3NzaXplX3QgbGVuKQorc3RhdGljIGRvdWJsZSBfc3VtMihjb25zdCBzaG9ydCAqYSwgY29uc3Qgc2hvcnQgKmIsIFB5X3NzaXplX3QgbGVuKQogewogICAgIFB5X3NzaXplX3QgaTsKICAgICBkb3VibGUgc3VtID0gMC4wOwpAQCAtNDk4LDMyICs1ODMsMzggQEAKICoqIHN1bV9yaSBpcyBjYWxjdWxhdGVkIG9uY2UsIHN1bV9haWpfMiBpcyB1cGRhdGVkIGVhY2ggc3RlcCBhbmQgc3VtX2Fpal9yaQogKiogaXMgY29tcGxldGVseSByZWNhbGN1bGF0ZWQgZWFjaCBzdGVwLgogKi8KKy8qW2NsaW5pYyBpbnB1dF0KK2F1ZGlvb3AuZmluZGZpdAorCisgICAgZnJhZ21lbnQ6IFB5X2J1ZmZlcgorICAgIHJlZmVyZW5jZTogUHlfYnVmZmVyCisgICAgLworCitUcnkgdG8gbWF0Y2ggcmVmZXJlbmNlIGFzIHdlbGwgYXMgcG9zc2libGUgdG8gYSBwb3J0aW9uIG9mIGZyYWdtZW50LgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotYXVkaW9vcF9maW5kZml0KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK2F1ZGlvb3BfZmluZGZpdF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIFB5X2J1ZmZlciAqcmVmZXJlbmNlKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTUwNWZkMDRkNDI0NGRiMzEgaW5wdXQ9NjJjMzA1NjA1ZTE4M2M5YV0qLwogewotICAgIHNob3J0ICpjcDEsICpjcDI7CisgICAgY29uc3Qgc2hvcnQgKmNwMSwgKmNwMjsKICAgICBQeV9zc2l6ZV90IGxlbjEsIGxlbjI7CiAgICAgUHlfc3NpemVfdCBqLCBiZXN0X2o7CiAgICAgZG91YmxlIGFqX20xLCBhal9sbTE7CiAgICAgZG91YmxlIHN1bV9yaV8yLCBzdW1fYWlqXzIsIHN1bV9haWpfcmksIHJlc3VsdCwgYmVzdF9yZXN1bHQsIGZhY3RvcjsKIAotICAgIC8qIFBhc3NpbmcgYSBzaG9ydCoqIGZvciBhbiAncycgYXJndW1lbnQgaXMgY29ycmVjdCBvbmx5Ci0gICAgICAgaWYgdGhlIHN0cmluZyBjb250ZW50cyBpcyBhbGlnbmVkIGZvciBpbnRlcnByZXRhdGlvbgotICAgICAgIGFzIHNob3J0W10uIER1ZSB0byB0aGUgZGVmaW5pdGlvbiBvZiBQeUJ5dGVzT2JqZWN0LAotICAgICAgIHRoaXMgaXMgY3VycmVudGx5IChQeXRob24gMi42KSB0aGUgY2FzZS4gKi8KLSAgICBpZiAoICFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzI3MjOmZpbmRmaXQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIqKikmY3AxLCAmbGVuMSwgKGNoYXIqKikmY3AyLCAmbGVuMikgKQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoIGxlbjEgJiAxIHx8IGxlbjIgJiAxICkgeworICAgIGlmIChmcmFnbWVudC0+bGVuICYgMSB8fCByZWZlcmVuY2UtPmxlbiAmIDEpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKEF1ZGlvb3BFcnJvciwgIlN0cmluZ3Mgc2hvdWxkIGJlIGV2ZW4tc2l6ZWQiKTsKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBsZW4xID4+PSAxOwotICAgIGxlbjIgPj49IDE7CisgICAgY3AxID0gKGNvbnN0IHNob3J0ICopZnJhZ21lbnQtPmJ1ZjsKKyAgICBsZW4xID0gZnJhZ21lbnQtPmxlbiA+PiAxOworICAgIGNwMiA9IChjb25zdCBzaG9ydCAqKXJlZmVyZW5jZS0+YnVmOworICAgIGxlbjIgPSByZWZlcmVuY2UtPmxlbiA+PiAxOwogCi0gICAgaWYgKCBsZW4xIDwgbGVuMiApIHsKKyAgICBpZiAobGVuMSA8IGxlbjIpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKEF1ZGlvb3BFcnJvciwgIkZpcnN0IHNhbXBsZSBzaG91bGQgYmUgbG9uZ2VyIik7Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgc3VtX3JpXzIgPSBfc3VtMihjcDIsIGNwMiwgbGVuMik7CiAgICAgc3VtX2Fpal8yID0gX3N1bTIoY3AxLCBjcDEsIGxlbjIpOwpAQCAtNTYwLDI3ICs2NTEsMzcgQEAKICoqIGZpbmRmYWN0b3IgZmluZHMgYSBmYWN0b3IgZiBzbyB0aGF0IHRoZSBlbmVyZ3kgaW4gQS1mQiBpcyBtaW5pbWFsLgogKiogU2VlIHRoZSBjb21tZW50IGZvciBmaW5kZml0IGZvciBkZXRhaWxzLgogKi8KKy8qW2NsaW5pYyBpbnB1dF0KK2F1ZGlvb3AuZmluZGZhY3RvcgorCisgICAgZnJhZ21lbnQ6IFB5X2J1ZmZlcgorICAgIHJlZmVyZW5jZTogUHlfYnVmZmVyCisgICAgLworCitSZXR1cm4gYSBmYWN0b3IgRiBzdWNoIHRoYXQgcm1zKGFkZChmcmFnbWVudCwgbXVsKHJlZmVyZW5jZSwgLUYpKSkgaXMgbWluaW1hbC4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKLWF1ZGlvb3BfZmluZGZhY3RvcihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCithdWRpb29wX2ZpbmRmYWN0b3JfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBQeV9idWZmZXIgKnJlZmVyZW5jZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kZGYzNWExZTU3NTc1Y2U0IGlucHV0PTgxNjY4MDMwMWQwMTJiMjFdKi8KIHsKLSAgICBzaG9ydCAqY3AxLCAqY3AyOwotICAgIFB5X3NzaXplX3QgbGVuMSwgbGVuMjsKKyAgICBjb25zdCBzaG9ydCAqY3AxLCAqY3AyOworICAgIFB5X3NzaXplX3QgbGVuOwogICAgIGRvdWJsZSBzdW1fcmlfMiwgc3VtX2Fpal9yaSwgcmVzdWx0OwogCi0gICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyNzIzpmaW5kZmFjdG9yIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyKiopJmNwMSwgJmxlbjEsIChjaGFyKiopJmNwMiwgJmxlbjIpICkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKCBsZW4xICYgMSB8fCBsZW4yICYgMSApIHsKKyAgICBpZiAoZnJhZ21lbnQtPmxlbiAmIDEgfHwgcmVmZXJlbmNlLT5sZW4gJiAxKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhBdWRpb29wRXJyb3IsICJTdHJpbmdzIHNob3VsZCBiZSBldmVuLXNpemVkIik7Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgaWYgKCBsZW4xICE9IGxlbjIgKSB7CisgICAgaWYgKGZyYWdtZW50LT5sZW4gIT0gcmVmZXJlbmNlLT5sZW4pIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKEF1ZGlvb3BFcnJvciwgIlNhbXBsZXMgc2hvdWxkIGJlIHNhbWUgc2l6ZSIpOwotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIGxlbjIgPj49IDE7Ci0gICAgc3VtX3JpXzIgPSBfc3VtMihjcDIsIGNwMiwgbGVuMik7Ci0gICAgc3VtX2Fpal9yaSA9IF9zdW0yKGNwMSwgY3AyLCBsZW4yKTsKKyAgICBjcDEgPSAoY29uc3Qgc2hvcnQgKilmcmFnbWVudC0+YnVmOworICAgIGNwMiA9IChjb25zdCBzaG9ydCAqKXJlZmVyZW5jZS0+YnVmOworICAgIGxlbiA9IGZyYWdtZW50LT5sZW4gPj4gMTsKKyAgICBzdW1fcmlfMiA9IF9zdW0yKGNwMiwgY3AyLCBsZW4pOworICAgIHN1bV9haWpfcmkgPSBfc3VtMihjcDEsIGNwMiwgbGVuKTsKIAogICAgIHJlc3VsdCA9IHN1bV9haWpfcmkgLyBzdW1fcmlfMjsKIApAQCAtNTkxLDM3ICs2OTIsNDYgQEAKICoqIGZpbmRtYXggcmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG4tc2l6ZWQgc2VnbWVudCBvZiB0aGUgaW5wdXQgc2FtcGxlCiAqKiB0aGF0IGNvbnRhaW5zIHRoZSBtb3N0IGVuZXJneS4KICovCisvKltjbGluaWMgaW5wdXRdCithdWRpb29wLmZpbmRtYXgKKworICAgIGZyYWdtZW50OiBQeV9idWZmZXIKKyAgICBsZW5ndGg6IFB5X3NzaXplX3QKKyAgICAvCisKK1NlYXJjaCBmcmFnbWVudCBmb3IgYSBzbGljZSBvZiBzcGVjaWZpZWQgbnVtYmVyIG9mIHNhbXBsZXMgd2l0aCBtYXhpbXVtIGVuZXJneS4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKLWF1ZGlvb3BfZmluZG1heChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCithdWRpb29wX2ZpbmRtYXhfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBQeV9zc2l6ZV90IGxlbmd0aCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0yMWQwYzJhMWU1NjU1MTM0IGlucHV0PTJmMzA0ODAxZWQ0MjM4M2NdKi8KIHsKLSAgICBzaG9ydCAqY3AxOwotICAgIFB5X3NzaXplX3QgbGVuMSwgbGVuMjsKKyAgICBjb25zdCBzaG9ydCAqY3AxOworICAgIFB5X3NzaXplX3QgbGVuMTsKICAgICBQeV9zc2l6ZV90IGosIGJlc3RfajsKICAgICBkb3VibGUgYWpfbTEsIGFqX2xtMTsKICAgICBkb3VibGUgcmVzdWx0LCBiZXN0X3Jlc3VsdDsKIAotICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjbjpmaW5kbWF4IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyKiopJmNwMSwgJmxlbjEsICZsZW4yKSApCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmICggbGVuMSAmIDEgKSB7CisgICAgaWYgKGZyYWdtZW50LT5sZW4gJiAxKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhBdWRpb29wRXJyb3IsICJTdHJpbmdzIHNob3VsZCBiZSBldmVuLXNpemVkIik7Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgbGVuMSA+Pj0gMTsKKyAgICBjcDEgPSAoY29uc3Qgc2hvcnQgKilmcmFnbWVudC0+YnVmOworICAgIGxlbjEgPSBmcmFnbWVudC0+bGVuID4+IDE7CiAKLSAgICBpZiAoIGxlbjIgPCAwIHx8IGxlbjEgPCBsZW4yICkgeworICAgIGlmIChsZW5ndGggPCAwIHx8IGxlbjEgPCBsZW5ndGgpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKEF1ZGlvb3BFcnJvciwgIklucHV0IHNhbXBsZSBzaG91bGQgYmUgbG9uZ2VyIik7Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICByZXN1bHQgPSBfc3VtMihjcDEsIGNwMSwgbGVuMik7CisgICAgcmVzdWx0ID0gX3N1bTIoY3AxLCBjcDEsIGxlbmd0aCk7CiAKICAgICBiZXN0X3Jlc3VsdCA9IHJlc3VsdDsKICAgICBiZXN0X2ogPSAwOwogCi0gICAgZm9yICggaj0xOyBqPD1sZW4xLWxlbjI7IGorKykgeworICAgIGZvciAoIGo9MTsgajw9bGVuMS1sZW5ndGg7IGorKykgewogICAgICAgICBhal9tMSA9IChkb3VibGUpY3AxW2otMV07Ci0gICAgICAgIGFqX2xtMSA9IChkb3VibGUpY3AxW2orbGVuMi0xXTsKKyAgICAgICAgYWpfbG0xID0gKGRvdWJsZSljcDFbaitsZW5ndGgtMV07CiAKICAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICsgYWpfbG0xKmFqX2xtMSAtIGFqX20xKmFqX20xOwogCkBAIC02MzUsMzEgKzc0NSwzNCBAQAogICAgIHJldHVybiBQeUxvbmdfRnJvbVNzaXplX3QoYmVzdF9qKTsKIH0KIAorLypbY2xpbmljIGlucHV0XQorYXVkaW9vcC5hdmdwcAorCisgICAgZnJhZ21lbnQ6IFB5X2J1ZmZlcgorICAgIHdpZHRoOiBpbnQKKyAgICAvCisKK1JldHVybiB0aGUgYXZlcmFnZSBwZWFrLXBlYWsgdmFsdWUgb3ZlciBhbGwgc2FtcGxlcyBpbiB0aGUgZnJhZ21lbnQuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi1hdWRpb29wX2F2Z3BwKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK2F1ZGlvb3BfYXZncHBfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MDZjODM4MGZkNmUzNDIwNyBpbnB1dD0wYjNjY2VlYWU0MjBhN2Q5XSovCiB7Ci0gICAgc2lnbmVkIGNoYXIgKmNwOwotICAgIFB5X3NzaXplX3QgbGVuLCBpOwotICAgIGludCBzaXplLCB2YWwgPSAwLCBwcmV2dmFsID0gMCwgcHJldmV4dHJlbWV2YWxpZCA9IDAsCi0gICAgICAgIHByZXZleHRyZW1lID0gMDsKKyAgICBQeV9zc2l6ZV90IGk7CisgICAgaW50IHByZXZ2YWwsIHByZXZleHRyZW1ldmFsaWQgPSAwLCBwcmV2ZXh0cmVtZSA9IDA7CiAgICAgZG91YmxlIHN1bSA9IDAuMDsKICAgICB1bnNpZ25lZCBpbnQgYXZnOwogICAgIGludCBkaWZmLCBwcmV2ZGlmZiwgbmV4dHJlbWUgPSAwOwogCi0gICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyNpOmF2Z3BwIiwgJmNwLCAmbGVuLCAmc2l6ZSkgKQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfcGFyYW1ldGVycyhsZW4sIHNpemUpKQorICAgIGlmICghYXVkaW9vcF9jaGVja19wYXJhbWV0ZXJzKGZyYWdtZW50LT5sZW4sIHdpZHRoKSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKGxlbiA8PSBzaXplKQorICAgIGlmIChmcmFnbWVudC0+bGVuIDw9IHdpZHRoKQogICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKDApOwotICAgIGlmICggc2l6ZSA9PSAxICkgICAgICBwcmV2dmFsID0gKGludCkqQ0hBUlAoY3AsIDApOwotICAgIGVsc2UgaWYgKCBzaXplID09IDIgKSBwcmV2dmFsID0gKGludCkqU0hPUlRQKGNwLCAwKTsKLSAgICBlbHNlIGlmICggc2l6ZSA9PSA0ICkgcHJldnZhbCA9IChpbnQpKkxPTkdQKGNwLCAwKTsKKyAgICBwcmV2dmFsID0gR0VUUkFXU0FNUExFKHdpZHRoLCBmcmFnbWVudC0+YnVmLCAwKTsKICAgICBwcmV2ZGlmZiA9IDE3OyAvKiBBbnl0aGluZyAhPSAwLCAxICovCi0gICAgZm9yICggaT1zaXplOyBpPGxlbjsgaSs9IHNpemUpIHsKLSAgICAgICAgaWYgKCBzaXplID09IDEgKSAgICAgIHZhbCA9IChpbnQpKkNIQVJQKGNwLCBpKTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gMiApIHZhbCA9IChpbnQpKlNIT1JUUChjcCwgaSk7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDQgKSB2YWwgPSAoaW50KSpMT05HUChjcCwgaSk7CisgICAgZm9yIChpID0gd2lkdGg7IGkgPCBmcmFnbWVudC0+bGVuOyBpICs9IHdpZHRoKSB7CisgICAgICAgIGludCB2YWwgPSBHRVRSQVdTQU1QTEUod2lkdGgsIGZyYWdtZW50LT5idWYsIGkpOwogICAgICAgICBpZiAodmFsICE9IHByZXZ2YWwpIHsKICAgICAgICAgICAgIGRpZmYgPSB2YWwgPCBwcmV2dmFsOwogICAgICAgICAgICAgaWYgKHByZXZkaWZmID09ICFkaWZmKSB7CkBAIC02NjcsNyArNzgwLDEyIEBACiAgICAgICAgICAgICAgICAgKiogZXh0cmVtZSB2YWx1ZSBhbmQgcmVtZW1iZXIuCiAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICBpZiAocHJldmV4dHJlbWV2YWxpZCkgewotICAgICAgICAgICAgICAgICAgICBzdW0gKz0gZmFicygoZG91YmxlKXByZXZ2YWwgLSAoZG91YmxlKXByZXZleHRyZW1lKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZ2YWwgPCBwcmV2ZXh0cmVtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1bSArPSAoZG91YmxlKSgodW5zaWduZWQgaW50KXByZXZleHRyZW1lIC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgaW50KXByZXZ2YWwpOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBzdW0gKz0gKGRvdWJsZSkoKHVuc2lnbmVkIGludClwcmV2dmFsIC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgaW50KXByZXZleHRyZW1lKTsKICAgICAgICAgICAgICAgICAgICAgbmV4dHJlbWUrKzsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgcHJldmV4dHJlbWV2YWxpZCA9IDE7CkBAIC02ODQsMzAgKzgwMiwzMyBAQAogICAgIHJldHVybiBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZyhhdmcpOwogfQogCisvKltjbGluaWMgaW5wdXRdCithdWRpb29wLm1heHBwCisKKyAgICBmcmFnbWVudDogUHlfYnVmZmVyCisgICAgd2lkdGg6IGludAorICAgIC8KKworUmV0dXJuIHRoZSBtYXhpbXVtIHBlYWstcGVhayB2YWx1ZSBpbiB0aGUgc291bmQgZnJhZ21lbnQuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi1hdWRpb29wX21heHBwKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK2F1ZGlvb3BfbWF4cHBfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YzMwMGMwYmQ3ZTg1MzVjMCBpbnB1dD02NzFhMTNlMTUxOGY4MGExXSovCiB7Ci0gICAgc2lnbmVkIGNoYXIgKmNwOwotICAgIFB5X3NzaXplX3QgbGVuLCBpOwotICAgIGludCBzaXplLCB2YWwgPSAwLCBwcmV2dmFsID0gMCwgcHJldmV4dHJlbWV2YWxpZCA9IDAsCi0gICAgICAgIHByZXZleHRyZW1lID0gMDsKKyAgICBQeV9zc2l6ZV90IGk7CisgICAgaW50IHByZXZ2YWwsIHByZXZleHRyZW1ldmFsaWQgPSAwLCBwcmV2ZXh0cmVtZSA9IDA7CiAgICAgdW5zaWduZWQgaW50IG1heCA9IDAsIGV4dHJlbWVkaWZmOwogICAgIGludCBkaWZmLCBwcmV2ZGlmZjsKIAotICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjaTptYXhwcCIsICZjcCwgJmxlbiwgJnNpemUpICkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKCFhdWRpb29wX2NoZWNrX3BhcmFtZXRlcnMobGVuLCBzaXplKSkKKyAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfcGFyYW1ldGVycyhmcmFnbWVudC0+bGVuLCB3aWR0aCkpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmIChsZW4gPD0gc2l6ZSkKKyAgICBpZiAoZnJhZ21lbnQtPmxlbiA8PSB3aWR0aCkKICAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZygwKTsKLSAgICBpZiAoIHNpemUgPT0gMSApICAgICAgcHJldnZhbCA9IChpbnQpKkNIQVJQKGNwLCAwKTsKLSAgICBlbHNlIGlmICggc2l6ZSA9PSAyICkgcHJldnZhbCA9IChpbnQpKlNIT1JUUChjcCwgMCk7Ci0gICAgZWxzZSBpZiAoIHNpemUgPT0gNCApIHByZXZ2YWwgPSAoaW50KSpMT05HUChjcCwgMCk7CisgICAgcHJldnZhbCA9IEdFVFJBV1NBTVBMRSh3aWR0aCwgZnJhZ21lbnQtPmJ1ZiwgMCk7CiAgICAgcHJldmRpZmYgPSAxNzsgLyogQW55dGhpbmcgIT0gMCwgMSAqLwotICAgIGZvciAoIGk9c2l6ZTsgaTxsZW47IGkrPSBzaXplKSB7Ci0gICAgICAgIGlmICggc2l6ZSA9PSAxICkgICAgICB2YWwgPSAoaW50KSpDSEFSUChjcCwgaSk7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDIgKSB2YWwgPSAoaW50KSpTSE9SVFAoY3AsIGkpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSA0ICkgdmFsID0gKGludCkqTE9OR1AoY3AsIGkpOworICAgIGZvciAoaSA9IHdpZHRoOyBpIDwgZnJhZ21lbnQtPmxlbjsgaSArPSB3aWR0aCkgeworICAgICAgICBpbnQgdmFsID0gR0VUUkFXU0FNUExFKHdpZHRoLCBmcmFnbWVudC0+YnVmLCBpKTsKICAgICAgICAgaWYgKHZhbCAhPSBwcmV2dmFsKSB7CiAgICAgICAgICAgICBkaWZmID0gdmFsIDwgcHJldnZhbDsKICAgICAgICAgICAgIGlmIChwcmV2ZGlmZiA9PSAhZGlmZikgewpAQCAtNzM0LDIwOSArODU1LDIxMiBAQAogICAgIHJldHVybiBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZyhtYXgpOwogfQogCisvKltjbGluaWMgaW5wdXRdCithdWRpb29wLmNyb3NzCisKKyAgICBmcmFnbWVudDogUHlfYnVmZmVyCisgICAgd2lkdGg6IGludAorICAgIC8KKworUmV0dXJuIHRoZSBudW1iZXIgb2YgemVybyBjcm9zc2luZ3MgaW4gdGhlIGZyYWdtZW50IHBhc3NlZCBhcyBhbiBhcmd1bWVudC4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKLWF1ZGlvb3BfY3Jvc3MoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorYXVkaW9vcF9jcm9zc19pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIGludCB3aWR0aCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD05OWU2NTcyZDdkN2NkYmYxIGlucHV0PWIxYjNmMTViODNmNmI0MWFdKi8KIHsKLSAgICBzaWduZWQgY2hhciAqY3A7Ci0gICAgUHlfc3NpemVfdCBsZW4sIGk7Ci0gICAgaW50IHNpemUsIHZhbCA9IDA7CisgICAgUHlfc3NpemVfdCBpOwogICAgIGludCBwcmV2dmFsOwogICAgIFB5X3NzaXplX3QgbmNyb3NzOwogCi0gICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyNpOmNyb3NzIiwgJmNwLCAmbGVuLCAmc2l6ZSkgKQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfcGFyYW1ldGVycyhsZW4sIHNpemUpKQorICAgIGlmICghYXVkaW9vcF9jaGVja19wYXJhbWV0ZXJzKGZyYWdtZW50LT5sZW4sIHdpZHRoKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgbmNyb3NzID0gLTE7CiAgICAgcHJldnZhbCA9IDE3OyAvKiBBbnl0aGluZyA8PiAwLDEgKi8KLSAgICBmb3IgKCBpPTA7IGk8bGVuOyBpKz0gc2l6ZSkgewotICAgICAgICBpZiAoIHNpemUgPT0gMSApICAgICAgdmFsID0gKChpbnQpKkNIQVJQKGNwLCBpKSkgPj4gNzsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gMiApIHZhbCA9ICgoaW50KSpTSE9SVFAoY3AsIGkpKSA+PiAxNTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gNCApIHZhbCA9ICgoaW50KSpMT05HUChjcCwgaSkpID4+IDMxOwotICAgICAgICB2YWwgPSB2YWwgJiAxOwotICAgICAgICBpZiAoIHZhbCAhPSBwcmV2dmFsICkgbmNyb3NzKys7CisgICAgZm9yIChpID0gMDsgaSA8IGZyYWdtZW50LT5sZW47IGkgKz0gd2lkdGgpIHsKKyAgICAgICAgaW50IHZhbCA9IEdFVFJBV1NBTVBMRSh3aWR0aCwgZnJhZ21lbnQtPmJ1ZiwgaSkgPCAwOworICAgICAgICBpZiAodmFsICE9IHByZXZ2YWwpIG5jcm9zcysrOwogICAgICAgICBwcmV2dmFsID0gdmFsOwogICAgIH0KICAgICByZXR1cm4gUHlMb25nX0Zyb21Tc2l6ZV90KG5jcm9zcyk7CiB9CiAKKy8qW2NsaW5pYyBpbnB1dF0KK2F1ZGlvb3AubXVsCisKKyAgICBmcmFnbWVudDogUHlfYnVmZmVyCisgICAgd2lkdGg6IGludAorICAgIGZhY3RvcjogZG91YmxlCisgICAgLworCitSZXR1cm4gYSBmcmFnbWVudCB0aGF0IGhhcyBhbGwgc2FtcGxlcyBpbiB0aGUgb3JpZ2luYWwgZnJhZ21lbnQgbXVsdGlwbGllZCBieSB0aGUgZmxvYXRpbmctcG9pbnQgdmFsdWUgZmFjdG9yLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotYXVkaW9vcF9tdWwoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorYXVkaW9vcF9tdWxfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgsIGRvdWJsZSBmYWN0b3IpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YTY5N2ViYmQ1ODUyZDM4ZiBpbnB1dD1jNzI2NjY3YmFhMTU3ZDNjXSovCiB7Ci0gICAgc2lnbmVkIGNoYXIgKmNwLCAqbmNwOwotICAgIFB5X3NzaXplX3QgbGVuLCBpOwotICAgIGludCBzaXplLCB2YWwgPSAwOwotICAgIGRvdWJsZSBmYWN0b3IsIGZ2YWwsIG1heHZhbCwgbWludmFsOworICAgIHNpZ25lZCBjaGFyICpuY3A7CisgICAgUHlfc3NpemVfdCBpOworICAgIGRvdWJsZSBtYXh2YWwsIG1pbnZhbDsKICAgICBQeU9iamVjdCAqcnY7CiAKLSAgICBpZiAoICFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzI2lkOm11bCIsICZjcCwgJmxlbiwgJnNpemUsICZmYWN0b3IgKSApCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmICghYXVkaW9vcF9jaGVja19wYXJhbWV0ZXJzKGxlbiwgc2l6ZSkpCisgICAgaWYgKCFhdWRpb29wX2NoZWNrX3BhcmFtZXRlcnMoZnJhZ21lbnQtPmxlbiwgd2lkdGgpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIG1heHZhbCA9IChkb3VibGUpIG1heHZhbHNbc2l6ZV07Ci0gICAgbWludmFsID0gKGRvdWJsZSkgbWludmFsc1tzaXplXTsKKyAgICBtYXh2YWwgPSAoZG91YmxlKSBtYXh2YWxzW3dpZHRoXTsKKyAgICBtaW52YWwgPSAoZG91YmxlKSBtaW52YWxzW3dpZHRoXTsKIAotICAgIHJ2ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBsZW4pOwotICAgIGlmICggcnYgPT0gMCApCi0gICAgICAgIHJldHVybiAwOworICAgIHJ2ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBmcmFnbWVudC0+bGVuKTsKKyAgICBpZiAocnYgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgbmNwID0gKHNpZ25lZCBjaGFyICopUHlCeXRlc19Bc1N0cmluZyhydik7CiAKLQotICAgIGZvciAoIGk9MDsgaSA8IGxlbjsgaSArPSBzaXplICkgewotICAgICAgICBpZiAoIHNpemUgPT0gMSApICAgICAgdmFsID0gKGludCkqQ0hBUlAoY3AsIGkpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSAyICkgdmFsID0gKGludCkqU0hPUlRQKGNwLCBpKTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gNCApIHZhbCA9IChpbnQpKkxPTkdQKGNwLCBpKTsKLSAgICAgICAgZnZhbCA9IChkb3VibGUpdmFsKmZhY3RvcjsKLSAgICAgICAgdmFsID0gKGludClmbG9vcihmYm91bmQoZnZhbCwgbWludmFsLCBtYXh2YWwpKTsKLSAgICAgICAgaWYgKCBzaXplID09IDEgKSAgICAgICpDSEFSUChuY3AsIGkpID0gKHNpZ25lZCBjaGFyKXZhbDsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gMiApICpTSE9SVFAobmNwLCBpKSA9IChzaG9ydCl2YWw7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDQgKSAqTE9OR1AobmNwLCBpKSA9IChQeV9JbnQzMil2YWw7CisgICAgZm9yIChpID0gMDsgaSA8IGZyYWdtZW50LT5sZW47IGkgKz0gd2lkdGgpIHsKKyAgICAgICAgZG91YmxlIHZhbCA9IEdFVFJBV1NBTVBMRSh3aWR0aCwgZnJhZ21lbnQtPmJ1ZiwgaSk7CisgICAgICAgIHZhbCAqPSBmYWN0b3I7CisgICAgICAgIHZhbCA9IGZsb29yKGZib3VuZCh2YWwsIG1pbnZhbCwgbWF4dmFsKSk7CisgICAgICAgIFNFVFJBV1NBTVBMRSh3aWR0aCwgbmNwLCBpLCAoaW50KXZhbCk7CiAgICAgfQogICAgIHJldHVybiBydjsKIH0KIAorLypbY2xpbmljIGlucHV0XQorYXVkaW9vcC50b21vbm8KKworICAgIGZyYWdtZW50OiBQeV9idWZmZXIKKyAgICB3aWR0aDogaW50CisgICAgbGZhY3RvcjogZG91YmxlCisgICAgcmZhY3RvcjogZG91YmxlCisgICAgLworCitDb252ZXJ0IGEgc3RlcmVvIGZyYWdtZW50IHRvIGEgbW9ubyBmcmFnbWVudC4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKLWF1ZGlvb3BfdG9tb25vKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK2F1ZGlvb3BfdG9tb25vX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwgaW50IHdpZHRoLCBkb3VibGUgbGZhY3RvciwgZG91YmxlIHJmYWN0b3IpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NDM2ZTc3MTA1MjE2NjFkZCBpbnB1dD1jNGVjOTQ5YjNmNGRkZGZhXSovCiB7Ci0gICAgUHlfYnVmZmVyIHBjcDsKICAgICBzaWduZWQgY2hhciAqY3AsICpuY3A7CiAgICAgUHlfc3NpemVfdCBsZW4sIGk7Ci0gICAgaW50IHNpemUsIHZhbDEgPSAwLCB2YWwyID0gMDsKLSAgICBkb3VibGUgZmFjMSwgZmFjMiwgZnZhbCwgbWF4dmFsLCBtaW52YWw7CisgICAgZG91YmxlIG1heHZhbCwgbWludmFsOwogICAgIFB5T2JqZWN0ICpydjsKIAotICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMqaWRkOnRvbW9ubyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAmcGNwLCAmc2l6ZSwgJmZhYzEsICZmYWMyICkgKQotICAgICAgICByZXR1cm4gMDsKLSAgICBjcCA9IHBjcC5idWY7Ci0gICAgbGVuID0gcGNwLmxlbjsKLSAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfcGFyYW1ldGVycyhsZW4sIHNpemUpKSB7Ci0gICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBjcCk7CisgICAgY3AgPSBmcmFnbWVudC0+YnVmOworICAgIGxlbiA9IGZyYWdtZW50LT5sZW47CisgICAgaWYgKCFhdWRpb29wX2NoZWNrX3BhcmFtZXRlcnMobGVuLCB3aWR0aCkpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBpZiAoKChsZW4gLyBzaXplKSAmIDEpICE9IDApIHsKKyAgICBpZiAoKChsZW4gLyB3aWR0aCkgJiAxKSAhPSAwKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhBdWRpb29wRXJyb3IsICJub3QgYSB3aG9sZSBudW1iZXIgb2YgZnJhbWVzIik7Ci0gICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBjcCk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIG1heHZhbCA9IChkb3VibGUpIG1heHZhbHNbc2l6ZV07Ci0gICAgbWludmFsID0gKGRvdWJsZSkgbWludmFsc1tzaXplXTsKKyAgICBtYXh2YWwgPSAoZG91YmxlKSBtYXh2YWxzW3dpZHRoXTsKKyAgICBtaW52YWwgPSAoZG91YmxlKSBtaW52YWxzW3dpZHRoXTsKIAogICAgIHJ2ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBsZW4vMik7Ci0gICAgaWYgKCBydiA9PSAwICkgewotICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwY3ApOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9CisgICAgaWYgKHJ2ID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOwogICAgIG5jcCA9IChzaWduZWQgY2hhciAqKVB5Qnl0ZXNfQXNTdHJpbmcocnYpOwogCi0KLSAgICBmb3IgKCBpPTA7IGkgPCBsZW47IGkgKz0gc2l6ZSoyICkgewotICAgICAgICBpZiAoIHNpemUgPT0gMSApICAgICAgdmFsMSA9IChpbnQpKkNIQVJQKGNwLCBpKTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gMiApIHZhbDEgPSAoaW50KSpTSE9SVFAoY3AsIGkpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSA0ICkgdmFsMSA9IChpbnQpKkxPTkdQKGNwLCBpKTsKLSAgICAgICAgaWYgKCBzaXplID09IDEgKSAgICAgIHZhbDIgPSAoaW50KSpDSEFSUChjcCwgaSsxKTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gMiApIHZhbDIgPSAoaW50KSpTSE9SVFAoY3AsIGkrMik7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDQgKSB2YWwyID0gKGludCkqTE9OR1AoY3AsIGkrNCk7Ci0gICAgICAgIGZ2YWwgPSAoZG91YmxlKXZhbDEqZmFjMSArIChkb3VibGUpdmFsMipmYWMyOwotICAgICAgICB2YWwxID0gKGludClmbG9vcihmYm91bmQoZnZhbCwgbWludmFsLCBtYXh2YWwpKTsKLSAgICAgICAgaWYgKCBzaXplID09IDEgKSAgICAgICpDSEFSUChuY3AsIGkvMikgPSAoc2lnbmVkIGNoYXIpdmFsMTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gMiApICpTSE9SVFAobmNwLCBpLzIpID0gKHNob3J0KXZhbDE7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDQgKSAqTE9OR1AobmNwLCBpLzIpPSAoUHlfSW50MzIpdmFsMTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpICs9IHdpZHRoKjIpIHsKKyAgICAgICAgZG91YmxlIHZhbDEgPSBHRVRSQVdTQU1QTEUod2lkdGgsIGNwLCBpKTsKKyAgICAgICAgZG91YmxlIHZhbDIgPSBHRVRSQVdTQU1QTEUod2lkdGgsIGNwLCBpICsgd2lkdGgpOworICAgICAgICBkb3VibGUgdmFsID0gdmFsMSpsZmFjdG9yICsgdmFsMipyZmFjdG9yOworICAgICAgICB2YWwgPSBmbG9vcihmYm91bmQodmFsLCBtaW52YWwsIG1heHZhbCkpOworICAgICAgICBTRVRSQVdTQU1QTEUod2lkdGgsIG5jcCwgaS8yLCB2YWwpOwogICAgIH0KLSAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwY3ApOwogICAgIHJldHVybiBydjsKIH0KIAorLypbY2xpbmljIGlucHV0XQorYXVkaW9vcC50b3N0ZXJlbworCisgICAgZnJhZ21lbnQ6IFB5X2J1ZmZlcgorICAgIHdpZHRoOiBpbnQKKyAgICBsZmFjdG9yOiBkb3VibGUKKyAgICByZmFjdG9yOiBkb3VibGUKKyAgICAvCisKK0dlbmVyYXRlIGEgc3RlcmVvIGZyYWdtZW50IGZyb20gYSBtb25vIGZyYWdtZW50LgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotYXVkaW9vcF90b3N0ZXJlbyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCithdWRpb29wX3Rvc3RlcmVvX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwgaW50IHdpZHRoLCBkb3VibGUgbGZhY3RvciwgZG91YmxlIHJmYWN0b3IpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NmZmNTA2ODFjODdmNGMxYyBpbnB1dD0yN2I2Mzk1ZWJmZGZmMzdhXSovCiB7Ci0gICAgc2lnbmVkIGNoYXIgKmNwLCAqbmNwOwotICAgIFB5X3NzaXplX3QgbGVuLCBpOwotICAgIGludCBzaXplLCB2YWwxLCB2YWwyLCB2YWwgPSAwOwotICAgIGRvdWJsZSBmYWMxLCBmYWMyLCBmdmFsLCBtYXh2YWwsIG1pbnZhbDsKKyAgICBzaWduZWQgY2hhciAqbmNwOworICAgIFB5X3NzaXplX3QgaTsKKyAgICBkb3VibGUgbWF4dmFsLCBtaW52YWw7CiAgICAgUHlPYmplY3QgKnJ2OwogCi0gICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyNpZGQ6dG9zdGVyZW8iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNwLCAmbGVuLCAmc2l6ZSwgJmZhYzEsICZmYWMyICkgKQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfcGFyYW1ldGVycyhsZW4sIHNpemUpKQorICAgIGlmICghYXVkaW9vcF9jaGVja19wYXJhbWV0ZXJzKGZyYWdtZW50LT5sZW4sIHdpZHRoKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBtYXh2YWwgPSAoZG91YmxlKSBtYXh2YWxzW3NpemVdOwotICAgIG1pbnZhbCA9IChkb3VibGUpIG1pbnZhbHNbc2l6ZV07CisgICAgbWF4dmFsID0gKGRvdWJsZSkgbWF4dmFsc1t3aWR0aF07CisgICAgbWludmFsID0gKGRvdWJsZSkgbWludmFsc1t3aWR0aF07CiAKLSAgICBpZiAobGVuID4gUFlfU1NJWkVfVF9NQVgvMikgeworICAgIGlmIChmcmFnbWVudC0+bGVuID4gUFlfU1NJWkVfVF9NQVgvMikgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfTWVtb3J5RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAibm90IGVub3VnaCBtZW1vcnkgZm9yIG91dHB1dCBidWZmZXIiKTsKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIHJ2ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBsZW4qMik7Ci0gICAgaWYgKCBydiA9PSAwICkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgcnYgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGZyYWdtZW50LT5sZW4qMik7CisgICAgaWYgKHJ2ID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOwogICAgIG5jcCA9IChzaWduZWQgY2hhciAqKVB5Qnl0ZXNfQXNTdHJpbmcocnYpOwogCi0KLSAgICBmb3IgKCBpPTA7IGkgPCBsZW47IGkgKz0gc2l6ZSApIHsKLSAgICAgICAgaWYgKCBzaXplID09IDEgKSAgICAgIHZhbCA9IChpbnQpKkNIQVJQKGNwLCBpKTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gMiApIHZhbCA9IChpbnQpKlNIT1JUUChjcCwgaSk7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDQgKSB2YWwgPSAoaW50KSpMT05HUChjcCwgaSk7Ci0KLSAgICAgICAgZnZhbCA9IChkb3VibGUpdmFsKmZhYzE7Ci0gICAgICAgIHZhbDEgPSAoaW50KWZsb29yKGZib3VuZChmdmFsLCBtaW52YWwsIG1heHZhbCkpOwotCi0gICAgICAgIGZ2YWwgPSAoZG91YmxlKXZhbCpmYWMyOwotICAgICAgICB2YWwyID0gKGludClmbG9vcihmYm91bmQoZnZhbCwgbWludmFsLCBtYXh2YWwpKTsKLQotICAgICAgICBpZiAoIHNpemUgPT0gMSApICAgICAgKkNIQVJQKG5jcCwgaSoyKSA9IChzaWduZWQgY2hhcil2YWwxOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSAyICkgKlNIT1JUUChuY3AsIGkqMikgPSAoc2hvcnQpdmFsMTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gNCApICpMT05HUChuY3AsIGkqMikgPSAoUHlfSW50MzIpdmFsMTsKLQotICAgICAgICBpZiAoIHNpemUgPT0gMSApICAgICAgKkNIQVJQKG5jcCwgaSoyKzEpID0gKHNpZ25lZCBjaGFyKXZhbDI7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDIgKSAqU0hPUlRQKG5jcCwgaSoyKzIpID0gKHNob3J0KXZhbDI7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDQgKSAqTE9OR1AobmNwLCBpKjIrNCkgPSAoUHlfSW50MzIpdmFsMjsKKyAgICBmb3IgKGkgPSAwOyBpIDwgZnJhZ21lbnQtPmxlbjsgaSArPSB3aWR0aCkgeworICAgICAgICBkb3VibGUgdmFsID0gR0VUUkFXU0FNUExFKHdpZHRoLCBmcmFnbWVudC0+YnVmLCBpKTsKKyAgICAgICAgaW50IHZhbDEgPSAoaW50KWZsb29yKGZib3VuZCh2YWwqbGZhY3RvciwgbWludmFsLCBtYXh2YWwpKTsKKyAgICAgICAgaW50IHZhbDIgPSAoaW50KWZsb29yKGZib3VuZCh2YWwqcmZhY3RvciwgbWludmFsLCBtYXh2YWwpKTsKKyAgICAgICAgU0VUUkFXU0FNUExFKHdpZHRoLCBuY3AsIGkqMiwgdmFsMSk7CisgICAgICAgIFNFVFJBV1NBTVBMRSh3aWR0aCwgbmNwLCBpKjIgKyB3aWR0aCwgdmFsMik7CiAgICAgfQogICAgIHJldHVybiBydjsKIH0KIAorLypbY2xpbmljIGlucHV0XQorYXVkaW9vcC5hZGQKKworICAgIGZyYWdtZW50MTogUHlfYnVmZmVyCisgICAgZnJhZ21lbnQyOiBQeV9idWZmZXIKKyAgICB3aWR0aDogaW50CisgICAgLworCitSZXR1cm4gYSBmcmFnbWVudCB3aGljaCBpcyB0aGUgYWRkaXRpb24gb2YgdGhlIHR3byBzYW1wbGVzIHBhc3NlZCBhcyBwYXJhbWV0ZXJzLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotYXVkaW9vcF9hZGQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorYXVkaW9vcF9hZGRfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50MSwgUHlfYnVmZmVyICpmcmFnbWVudDIsIGludCB3aWR0aCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1mOTIxOGJmOWVhNzVjM2YxIGlucHV0PTRhOGQ0YmFlNGMxNjA1YzddKi8KIHsKLSAgICBzaWduZWQgY2hhciAqY3AxLCAqY3AyLCAqbmNwOwotICAgIFB5X3NzaXplX3QgbGVuMSwgbGVuMiwgaTsKLSAgICBpbnQgc2l6ZSwgdmFsMSA9IDAsIHZhbDIgPSAwLCBtaW52YWwsIG1heHZhbCwgbmV3dmFsOworICAgIHNpZ25lZCBjaGFyICpuY3A7CisgICAgUHlfc3NpemVfdCBpOworICAgIGludCBtaW52YWwsIG1heHZhbCwgbmV3dmFsOwogICAgIFB5T2JqZWN0ICpydjsKIAotICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjcyNpOmFkZCIsCi0gICAgICAgICAgICAgICAgICAgICAgJmNwMSwgJmxlbjEsICZjcDIsICZsZW4yLCAmc2l6ZSApICkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKCFhdWRpb29wX2NoZWNrX3BhcmFtZXRlcnMobGVuMSwgc2l6ZSkpCisgICAgaWYgKCFhdWRpb29wX2NoZWNrX3BhcmFtZXRlcnMoZnJhZ21lbnQxLT5sZW4sIHdpZHRoKSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKCBsZW4xICE9IGxlbjIgKSB7CisgICAgaWYgKGZyYWdtZW50MS0+bGVuICE9IGZyYWdtZW50Mi0+bGVuKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhBdWRpb29wRXJyb3IsICJMZW5ndGhzIHNob3VsZCBiZSB0aGUgc2FtZSIpOwotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgbWF4dmFsID0gbWF4dmFsc1tzaXplXTsKLSAgICBtaW52YWwgPSBtaW52YWxzW3NpemVdOworICAgIG1heHZhbCA9IG1heHZhbHNbd2lkdGhdOworICAgIG1pbnZhbCA9IG1pbnZhbHNbd2lkdGhdOwogCi0gICAgcnYgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGxlbjEpOwotICAgIGlmICggcnYgPT0gMCApCi0gICAgICAgIHJldHVybiAwOworICAgIHJ2ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBmcmFnbWVudDEtPmxlbik7CisgICAgaWYgKHJ2ID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOwogICAgIG5jcCA9IChzaWduZWQgY2hhciAqKVB5Qnl0ZXNfQXNTdHJpbmcocnYpOwogCi0gICAgZm9yICggaT0wOyBpIDwgbGVuMTsgaSArPSBzaXplICkgewotICAgICAgICBpZiAoIHNpemUgPT0gMSApICAgICAgdmFsMSA9IChpbnQpKkNIQVJQKGNwMSwgaSk7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDIgKSB2YWwxID0gKGludCkqU0hPUlRQKGNwMSwgaSk7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDQgKSB2YWwxID0gKGludCkqTE9OR1AoY3AxLCBpKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgZnJhZ21lbnQxLT5sZW47IGkgKz0gd2lkdGgpIHsKKyAgICAgICAgaW50IHZhbDEgPSBHRVRSQVdTQU1QTEUod2lkdGgsIGZyYWdtZW50MS0+YnVmLCBpKTsKKyAgICAgICAgaW50IHZhbDIgPSBHRVRSQVdTQU1QTEUod2lkdGgsIGZyYWdtZW50Mi0+YnVmLCBpKTsKIAotICAgICAgICBpZiAoIHNpemUgPT0gMSApICAgICAgdmFsMiA9IChpbnQpKkNIQVJQKGNwMiwgaSk7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDIgKSB2YWwyID0gKGludCkqU0hPUlRQKGNwMiwgaSk7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDQgKSB2YWwyID0gKGludCkqTE9OR1AoY3AyLCBpKTsKLQotICAgICAgICBpZiAoc2l6ZSA8IDQpIHsKKyAgICAgICAgaWYgKHdpZHRoIDwgNCkgewogICAgICAgICAgICAgbmV3dmFsID0gdmFsMSArIHZhbDI7CiAgICAgICAgICAgICAvKiB0cnVuY2F0ZSBpbiBjYXNlIG9mIG92ZXJmbG93ICovCiAgICAgICAgICAgICBpZiAobmV3dmFsID4gbWF4dmFsKQpAQCAtOTUwLDEyMyArMTA3NCwxNzUgQEAKICAgICAgICAgICAgIG5ld3ZhbCA9IChpbnQpZmxvb3IoZmJvdW5kKGZ2YWwsIG1pbnZhbCwgbWF4dmFsKSk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoIHNpemUgPT0gMSApICAgICAgKkNIQVJQKG5jcCwgaSkgPSAoc2lnbmVkIGNoYXIpbmV3dmFsOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSAyICkgKlNIT1JUUChuY3AsIGkpID0gKHNob3J0KW5ld3ZhbDsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gNCApICpMT05HUChuY3AsIGkpID0gKFB5X0ludDMyKW5ld3ZhbDsKKyAgICAgICAgU0VUUkFXU0FNUExFKHdpZHRoLCBuY3AsIGksIG5ld3ZhbCk7CiAgICAgfQogICAgIHJldHVybiBydjsKIH0KIAorLypbY2xpbmljIGlucHV0XQorYXVkaW9vcC5iaWFzCisKKyAgICBmcmFnbWVudDogUHlfYnVmZmVyCisgICAgd2lkdGg6IGludAorICAgIGJpYXM6IGludAorICAgIC8KKworUmV0dXJuIGEgZnJhZ21lbnQgdGhhdCBpcyB0aGUgb3JpZ2luYWwgZnJhZ21lbnQgd2l0aCBhIGJpYXMgYWRkZWQgdG8gZWFjaCBzYW1wbGUuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi1hdWRpb29wX2JpYXMoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorYXVkaW9vcF9iaWFzX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwgaW50IHdpZHRoLCBpbnQgYmlhcykKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD04ZWM4MGIzZjVkNTEwYTUxIGlucHV0PTJiNWNjZTVjM2JiNDgzOGNdKi8KIHsKLSAgICBzaWduZWQgY2hhciAqY3AsICpuY3A7Ci0gICAgUHlfc3NpemVfdCBsZW4sIGk7Ci0gICAgaW50IHNpemUsIGJpYXM7CisgICAgc2lnbmVkIGNoYXIgKm5jcDsKKyAgICBQeV9zc2l6ZV90IGk7CiAgICAgdW5zaWduZWQgaW50IHZhbCA9IDAsIG1hc2s7CiAgICAgUHlPYmplY3QgKnJ2OwogCi0gICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyNpaTpiaWFzIiwKLSAgICAgICAgICAgICAgICAgICAgICAmY3AsICZsZW4sICZzaXplICwgJmJpYXMpICkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfcGFyYW1ldGVycyhsZW4sIHNpemUpKQorICAgIGlmICghYXVkaW9vcF9jaGVja19wYXJhbWV0ZXJzKGZyYWdtZW50LT5sZW4sIHdpZHRoKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBydiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgbGVuKTsKLSAgICBpZiAoIHJ2ID09IDAgKQotICAgICAgICByZXR1cm4gMDsKKyAgICBydiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgZnJhZ21lbnQtPmxlbik7CisgICAgaWYgKHJ2ID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOwogICAgIG5jcCA9IChzaWduZWQgY2hhciAqKVB5Qnl0ZXNfQXNTdHJpbmcocnYpOwogCi0gICAgbWFzayA9IG1hc2tzW3NpemVdOworICAgIG1hc2sgPSBtYXNrc1t3aWR0aF07CiAKLSAgICBmb3IgKCBpPTA7IGkgPCBsZW47IGkgKz0gc2l6ZSApIHsKLSAgICAgICAgaWYgKCBzaXplID09IDEgKSAgICAgIHZhbCA9ICh1bnNpZ25lZCBpbnQpKHVuc2lnbmVkIGNoYXIpKkNIQVJQKGNwLCBpKTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gMiApIHZhbCA9ICh1bnNpZ25lZCBpbnQpKHVuc2lnbmVkIHNob3J0KSpTSE9SVFAoY3AsIGkpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSA0ICkgdmFsID0gKHVuc2lnbmVkIGludCkoUHlfVUludDMyKSpMT05HUChjcCwgaSk7CisgICAgZm9yIChpID0gMDsgaSA8IGZyYWdtZW50LT5sZW47IGkgKz0gd2lkdGgpIHsKKyAgICAgICAgaWYgKHdpZHRoID09IDEpCisgICAgICAgICAgICB2YWwgPSBHRVRJTlRYKHVuc2lnbmVkIGNoYXIsIGZyYWdtZW50LT5idWYsIGkpOworICAgICAgICBlbHNlIGlmICh3aWR0aCA9PSAyKQorICAgICAgICAgICAgdmFsID0gR0VUSU5UWCh1bnNpZ25lZCBzaG9ydCwgZnJhZ21lbnQtPmJ1ZiwgaSk7CisgICAgICAgIGVsc2UgaWYgKHdpZHRoID09IDMpCisgICAgICAgICAgICB2YWwgPSAoKHVuc2lnbmVkIGludClHRVRJTlQyNChmcmFnbWVudC0+YnVmLCBpKSkgJiAweGZmZmZmZnU7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgYXNzZXJ0KHdpZHRoID09IDQpOworICAgICAgICAgICAgdmFsID0gR0VUSU5UWChQWV9VSU5UMzJfVCwgZnJhZ21lbnQtPmJ1ZiwgaSk7CisgICAgICAgIH0KIAogICAgICAgICB2YWwgKz0gKHVuc2lnbmVkIGludCliaWFzOwogICAgICAgICAvKiB3cmFwIGFyb3VuZCBpbiBjYXNlIG9mIG92ZXJmbG93ICovCiAgICAgICAgIHZhbCAmPSBtYXNrOwogCi0gICAgICAgIGlmICggc2l6ZSA9PSAxICkgICAgICAqQ0hBUlAobmNwLCBpKSA9IChzaWduZWQgY2hhcikodW5zaWduZWQgY2hhcil2YWw7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDIgKSAqU0hPUlRQKG5jcCwgaSkgPSAoc2hvcnQpKHVuc2lnbmVkIHNob3J0KXZhbDsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gNCApICpMT05HUChuY3AsIGkpID0gKFB5X0ludDMyKShQeV9VSW50MzIpdmFsOworICAgICAgICBpZiAod2lkdGggPT0gMSkKKyAgICAgICAgICAgIFNFVElOVFgodW5zaWduZWQgY2hhciwgbmNwLCBpLCB2YWwpOworICAgICAgICBlbHNlIGlmICh3aWR0aCA9PSAyKQorICAgICAgICAgICAgU0VUSU5UWCh1bnNpZ25lZCBzaG9ydCwgbmNwLCBpLCB2YWwpOworICAgICAgICBlbHNlIGlmICh3aWR0aCA9PSAzKQorICAgICAgICAgICAgU0VUSU5UMjQobmNwLCBpLCAoaW50KXZhbCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgYXNzZXJ0KHdpZHRoID09IDQpOworICAgICAgICAgICAgU0VUSU5UWChQWV9VSU5UMzJfVCwgbmNwLCBpLCB2YWwpOworICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiBydjsKIH0KIAorLypbY2xpbmljIGlucHV0XQorYXVkaW9vcC5yZXZlcnNlCisKKyAgICBmcmFnbWVudDogUHlfYnVmZmVyCisgICAgd2lkdGg6IGludAorICAgIC8KKworUmV2ZXJzZSB0aGUgc2FtcGxlcyBpbiBhIGZyYWdtZW50IGFuZCByZXR1cm5zIHRoZSBtb2RpZmllZCBmcmFnbWVudC4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKLWF1ZGlvb3BfcmV2ZXJzZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCithdWRpb29wX3JldmVyc2VfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NmVjM2M5MTMzN2Y1OTI1ZSBpbnB1dD02NjhmODkwY2Y5ZjlkMjI1XSovCiB7Ci0gICAgc2lnbmVkIGNoYXIgKmNwOwogICAgIHVuc2lnbmVkIGNoYXIgKm5jcDsKLSAgICBQeV9zc2l6ZV90IGxlbiwgaSwgajsKLSAgICBpbnQgc2l6ZSwgdmFsID0gMDsKKyAgICBQeV9zc2l6ZV90IGk7CiAgICAgUHlPYmplY3QgKnJ2OwogCi0gICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyNpOnJldmVyc2UiLAotICAgICAgICAgICAgICAgICAgICAgICZjcCwgJmxlbiwgJnNpemUpICkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfcGFyYW1ldGVycyhsZW4sIHNpemUpKQorICAgIGlmICghYXVkaW9vcF9jaGVja19wYXJhbWV0ZXJzKGZyYWdtZW50LT5sZW4sIHdpZHRoKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBydiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgbGVuKTsKLSAgICBpZiAoIHJ2ID09IDAgKQotICAgICAgICByZXR1cm4gMDsKKyAgICBydiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgZnJhZ21lbnQtPmxlbik7CisgICAgaWYgKHJ2ID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOwogICAgIG5jcCA9ICh1bnNpZ25lZCBjaGFyICopUHlCeXRlc19Bc1N0cmluZyhydik7CiAKLSAgICBmb3IgKCBpPTA7IGkgPCBsZW47IGkgKz0gc2l6ZSApIHsKLSAgICAgICAgaWYgKCBzaXplID09IDEgKSAgICAgIHZhbCA9ICgoaW50KSpDSEFSUChjcCwgaSkpIDw8IDI0OwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSAyICkgdmFsID0gKChpbnQpKlNIT1JUUChjcCwgaSkpIDw8IDE2OwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSA0ICkgdmFsID0gKGludCkqTE9OR1AoY3AsIGkpOwotCi0gICAgICAgIGogPSBsZW4gLSBpIC0gc2l6ZTsKLQotICAgICAgICBpZiAoIHNpemUgPT0gMSApICAgICAgKkNIQVJQKG5jcCwgaikgPSAoc2lnbmVkIGNoYXIpKHZhbCA+PiAyNCk7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDIgKSAqU0hPUlRQKG5jcCwgaikgPSAoc2hvcnQpKHZhbCA+PiAxNik7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDQgKSAqTE9OR1AobmNwLCBqKSA9IChQeV9JbnQzMil2YWw7CisgICAgZm9yIChpID0gMDsgaSA8IGZyYWdtZW50LT5sZW47IGkgKz0gd2lkdGgpIHsKKyAgICAgICAgaW50IHZhbCA9IEdFVFJBV1NBTVBMRSh3aWR0aCwgZnJhZ21lbnQtPmJ1ZiwgaSk7CisgICAgICAgIFNFVFJBV1NBTVBMRSh3aWR0aCwgbmNwLCBmcmFnbWVudC0+bGVuIC0gaSAtIHdpZHRoLCB2YWwpOwogICAgIH0KICAgICByZXR1cm4gcnY7CiB9CiAKKy8qW2NsaW5pYyBpbnB1dF0KK2F1ZGlvb3AuYnl0ZXN3YXAKKworICAgIGZyYWdtZW50OiBQeV9idWZmZXIKKyAgICB3aWR0aDogaW50CisgICAgLworCitDb252ZXJ0IGJpZy1lbmRpYW4gc2FtcGxlcyB0byBsaXR0bGUtZW5kaWFuIGFuZCB2aWNlIHZlcnNhLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotYXVkaW9vcF9saW4ybGluKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK2F1ZGlvb3BfYnl0ZXN3YXBfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YmZlNGFhNTg0YjdhM2Y1YiBpbnB1dD1mYWU3NjExY2VmZmE1YzgyXSovCiB7Ci0gICAgc2lnbmVkIGNoYXIgKmNwOwogICAgIHVuc2lnbmVkIGNoYXIgKm5jcDsKLSAgICBQeV9zc2l6ZV90IGxlbiwgaSwgajsKLSAgICBpbnQgc2l6ZSwgc2l6ZTIsIHZhbCA9IDA7CisgICAgUHlfc3NpemVfdCBpOwogICAgIFB5T2JqZWN0ICpydjsKIAotICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjaWk6bGluMmxpbiIsCi0gICAgICAgICAgICAgICAgICAgICAgJmNwLCAmbGVuLCAmc2l6ZSwgJnNpemUyKSApCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKCFhdWRpb29wX2NoZWNrX3BhcmFtZXRlcnMobGVuLCBzaXplKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKCFhdWRpb29wX2NoZWNrX3NpemUoc2l6ZTIpKQorICAgIGlmICghYXVkaW9vcF9jaGVja19wYXJhbWV0ZXJzKGZyYWdtZW50LT5sZW4sIHdpZHRoKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBpZiAobGVuL3NpemUgPiBQWV9TU0laRV9UX01BWC9zaXplMikgeworICAgIHJ2ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBmcmFnbWVudC0+bGVuKTsKKyAgICBpZiAocnYgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgbmNwID0gKHVuc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FzU3RyaW5nKHJ2KTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBmcmFnbWVudC0+bGVuOyBpICs9IHdpZHRoKSB7CisgICAgICAgIGludCBqOworICAgICAgICBmb3IgKGogPSAwOyBqIDwgd2lkdGg7IGorKykKKyAgICAgICAgICAgIG5jcFtpICsgd2lkdGggLSAxIC0gal0gPSAoKHVuc2lnbmVkIGNoYXIgKilmcmFnbWVudC0+YnVmKVtpICsgal07CisgICAgfQorICAgIHJldHVybiBydjsKK30KKworLypbY2xpbmljIGlucHV0XQorYXVkaW9vcC5saW4ybGluCisKKyAgICBmcmFnbWVudDogUHlfYnVmZmVyCisgICAgd2lkdGg6IGludAorICAgIG5ld3dpZHRoOiBpbnQKKyAgICAvCisKK0NvbnZlcnQgc2FtcGxlcyBiZXR3ZWVuIDEtLCAyLSwgMy0gYW5kIDQtYnl0ZSBmb3JtYXRzLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitzdGF0aWMgUHlPYmplY3QgKgorYXVkaW9vcF9saW4ybGluX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwgaW50IHdpZHRoLCBpbnQgbmV3d2lkdGgpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9M2Y5NDY4YTc0NDcyYTkzZSBpbnB1dD01Y2UwOGM4YWEyZjI0ZDk2XSovCit7CisgICAgdW5zaWduZWQgY2hhciAqbmNwOworICAgIFB5X3NzaXplX3QgaSwgajsKKyAgICBQeU9iamVjdCAqcnY7CisKKyAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfcGFyYW1ldGVycyhmcmFnbWVudC0+bGVuLCB3aWR0aCkpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmICghYXVkaW9vcF9jaGVja19zaXplKG5ld3dpZHRoKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoZnJhZ21lbnQtPmxlbi93aWR0aCA+IFBZX1NTSVpFX1RfTUFYL25ld3dpZHRoKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19NZW1vcnlFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJub3QgZW5vdWdoIG1lbW9yeSBmb3Igb3V0cHV0IGJ1ZmZlciIpOwotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIHJ2ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCAobGVuL3NpemUpKnNpemUyKTsKLSAgICBpZiAoIHJ2ID09IDAgKQotICAgICAgICByZXR1cm4gMDsKKyAgICBydiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgKGZyYWdtZW50LT5sZW4vd2lkdGgpKm5ld3dpZHRoKTsKKyAgICBpZiAocnYgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgbmNwID0gKHVuc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FzU3RyaW5nKHJ2KTsKIAotICAgIGZvciAoIGk9MCwgaj0wOyBpIDwgbGVuOyBpICs9IHNpemUsIGogKz0gc2l6ZTIgKSB7Ci0gICAgICAgIGlmICggc2l6ZSA9PSAxICkgICAgICB2YWwgPSAoKGludCkqQ0hBUlAoY3AsIGkpKSA8PCAyNDsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gMiApIHZhbCA9ICgoaW50KSpTSE9SVFAoY3AsIGkpKSA8PCAxNjsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gNCApIHZhbCA9IChpbnQpKkxPTkdQKGNwLCBpKTsKLQotICAgICAgICBpZiAoIHNpemUyID09IDEgKSAgKkNIQVJQKG5jcCwgaikgPSAoc2lnbmVkIGNoYXIpKHZhbCA+PiAyNCk7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplMiA9PSAyICkgKlNIT1JUUChuY3AsIGopID0gKHNob3J0KSh2YWwgPj4gMTYpOwotICAgICAgICBlbHNlIGlmICggc2l6ZTIgPT0gNCApICpMT05HUChuY3AsIGopID0gKFB5X0ludDMyKXZhbDsKKyAgICBmb3IgKGkgPSBqID0gMDsgaSA8IGZyYWdtZW50LT5sZW47IGkgKz0gd2lkdGgsIGogKz0gbmV3d2lkdGgpIHsKKyAgICAgICAgaW50IHZhbCA9IEdFVFNBTVBMRTMyKHdpZHRoLCBmcmFnbWVudC0+YnVmLCBpKTsKKyAgICAgICAgU0VUU0FNUExFMzIobmV3d2lkdGgsIG5jcCwgaiwgdmFsKTsKICAgICB9CiAgICAgcmV0dXJuIHJ2OwogfQpAQCAtMTA4MiwyOSArMTI1OCwzOSBAQAogICAgIHJldHVybiBhOwogfQogCisvKltjbGluaWMgaW5wdXRdCithdWRpb29wLnJhdGVjdgorCisgICAgZnJhZ21lbnQ6IFB5X2J1ZmZlcgorICAgIHdpZHRoOiBpbnQKKyAgICBuY2hhbm5lbHM6IGludAorICAgIGlucmF0ZTogaW50CisgICAgb3V0cmF0ZTogaW50CisgICAgc3RhdGU6IG9iamVjdAorICAgIHdlaWdodEE6IGludCA9IDEKKyAgICB3ZWlnaHRCOiBpbnQgPSAwCisgICAgLworCitDb252ZXJ0IHRoZSBmcmFtZSByYXRlIG9mIHRoZSBpbnB1dCBmcmFnbWVudC4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKLWF1ZGlvb3BfcmF0ZWN2KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK2F1ZGlvb3BfcmF0ZWN2X2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwgaW50IHdpZHRoLCBpbnQgbmNoYW5uZWxzLCBpbnQgaW5yYXRlLCBpbnQgb3V0cmF0ZSwgUHlPYmplY3QgKnN0YXRlLCBpbnQgd2VpZ2h0QSwgaW50IHdlaWdodEIpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NTU4NWRkZGM0YjVmZjIzNiBpbnB1dD1hZmYzYWNkYzk0NDc2MTkxXSovCiB7CiAgICAgY2hhciAqY3AsICpuY3A7CiAgICAgUHlfc3NpemVfdCBsZW47Ci0gICAgaW50IHNpemUsIG5jaGFubmVscywgaW5yYXRlLCBvdXRyYXRlLCB3ZWlnaHRBLCB3ZWlnaHRCOwogICAgIGludCBjaGFuLCBkLCAqcHJldl9pLCAqY3VyX2ksIGN1cl9vOwotICAgIFB5T2JqZWN0ICpzdGF0ZSwgKnNhbXBzLCAqc3RyLCAqcnYgPSBOVUxMOworICAgIFB5T2JqZWN0ICpzYW1wcywgKnN0ciwgKnJ2ID0gTlVMTDsKICAgICBpbnQgYnl0ZXNfcGVyX2ZyYW1lOwogCi0gICAgd2VpZ2h0QSA9IDE7Ci0gICAgd2VpZ2h0QiA9IDA7Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzI2lpaWlPfGlpOnJhdGVjdiIsICZjcCwgJmxlbiwgJnNpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZuY2hhbm5lbHMsICZpbnJhdGUsICZvdXRyYXRlLCAmc3RhdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZ3ZWlnaHRBLCAmd2VpZ2h0QikpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmICghYXVkaW9vcF9jaGVja19zaXplKHNpemUpKQorICAgIGlmICghYXVkaW9vcF9jaGVja19zaXplKHdpZHRoKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgaWYgKG5jaGFubmVscyA8IDEpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKEF1ZGlvb3BFcnJvciwgIiMgb2YgY2hhbm5lbHMgc2hvdWxkIGJlID49IDEiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIGlmIChzaXplID4gSU5UX01BWCAvIG5jaGFubmVscykgeworICAgIGlmICh3aWR0aCA+IElOVF9NQVggLyBuY2hhbm5lbHMpIHsKICAgICAgICAgLyogVGhpcyBvdmVyZmxvdyB0ZXN0IGlzIHJpZ29yb3VzbHkgY29ycmVjdCBiZWNhdXNlCiAgICAgICAgICAgIGJvdGggbXVsdGlwbGljYW5kcyBhcmUgPj0gMS4gIFVzZSB0aGUgYXJndW1lbnQgbmFtZXMKICAgICAgICAgICAgZnJvbSB0aGUgZG9jcyBmb3IgdGhlIGVycm9yIG1zZy4gKi8KQEAgLTExMTIsMTMgKzEyOTgsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICJ3aWR0aCAqIG5jaGFubmVscyB0b28gYmlnIGZvciBhIEMgaW50Iik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBieXRlc19wZXJfZnJhbWUgPSBzaXplICogbmNoYW5uZWxzOworICAgIGJ5dGVzX3Blcl9mcmFtZSA9IHdpZHRoICogbmNoYW5uZWxzOwogICAgIGlmICh3ZWlnaHRBIDwgMSB8fCB3ZWlnaHRCIDwgMCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoQXVkaW9vcEVycm9yLAogICAgICAgICAgICAgIndlaWdodEEgc2hvdWxkIGJlID49IDEsIHdlaWdodEIgc2hvdWxkIGJlID49IDAiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIGlmIChsZW4gJSBieXRlc19wZXJfZnJhbWUgIT0gMCkgeworICAgIGFzc2VydChmcmFnbWVudC0+bGVuID49IDApOworICAgIGlmIChmcmFnbWVudC0+bGVuICUgYnl0ZXNfcGVyX2ZyYW1lICE9IDApIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKEF1ZGlvb3BFcnJvciwgIm5vdCBhIHdob2xlIG51bWJlciBvZiBmcmFtZXMiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQpAQCAtMTEzMywyMSArMTMyMCwyMSBAQAogICAgIC8qIGRpdmlkZSB3ZWlnaHRBIGFuZCB3ZWlnaHRCIGJ5IHRoZWlyIGdyZWF0ZXN0IGNvbW1vbiBkaXZpc29yICovCiAgICAgZCA9IGdjZCh3ZWlnaHRBLCB3ZWlnaHRCKTsKICAgICB3ZWlnaHRBIC89IGQ7Ci0gICAgd2VpZ2h0QSAvPSBkOworICAgIHdlaWdodEIgLz0gZDsKIAogICAgIGlmICgoc2l6ZV90KW5jaGFubmVscyA+IFBZX1NJWkVfTUFYL3NpemVvZihpbnQpKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19NZW1vcnlFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJub3QgZW5vdWdoIG1lbW9yeSBmb3Igb3V0cHV0IGJ1ZmZlciIpOwotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIHByZXZfaSA9IChpbnQgKikgbWFsbG9jKG5jaGFubmVscyAqIHNpemVvZihpbnQpKTsKLSAgICBjdXJfaSA9IChpbnQgKikgbWFsbG9jKG5jaGFubmVscyAqIHNpemVvZihpbnQpKTsKKyAgICBwcmV2X2kgPSAoaW50ICopIFB5TWVtX01hbGxvYyhuY2hhbm5lbHMgKiBzaXplb2YoaW50KSk7CisgICAgY3VyX2kgPSAoaW50ICopIFB5TWVtX01hbGxvYyhuY2hhbm5lbHMgKiBzaXplb2YoaW50KSk7CiAgICAgaWYgKHByZXZfaSA9PSBOVUxMIHx8IGN1cl9pID09IE5VTEwpIHsKICAgICAgICAgKHZvaWQpIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgIGdvdG8gZXhpdDsKICAgICB9CiAKLSAgICBsZW4gLz0gYnl0ZXNfcGVyX2ZyYW1lOyAvKiAjIG9mIGZyYW1lcyAqLworICAgIGxlbiA9IGZyYWdtZW50LT5sZW4gLyBieXRlc19wZXJfZnJhbWU7IC8qICMgb2YgZnJhbWVzICovCiAKICAgICBpZiAoc3RhdGUgPT0gUHlfTm9uZSkgewogICAgICAgICBkID0gLW91dHJhdGU7CkBAIC0xMTg0LDcgKzEzNzEsNyBAQAogICAgICAgICAgICBjYXNlIGNlaWxpbmcobGVuL2lucmF0ZSkgKiBvdXRyYXRlLiAqLwogCiAgICAgICAgIC8qIGNvbXB1dGUgY2VpbGluZyhsZW4vaW5yYXRlKSB3aXRob3V0IG92ZXJmbG93ICovCi0gICAgICAgIFB5X3NzaXplX3QgcSA9IGxlbiA+IDAgPyAxICsgKGxlbiAtIDEpIC8gaW5yYXRlIDogMDsKKyAgICAgICAgUHlfc3NpemVfdCBxID0gMSArIChsZW4gLSAxKSAvIGlucmF0ZTsKICAgICAgICAgaWYgKG91dHJhdGUgPiBQWV9TU0laRV9UX01BWCAvIHEgLyBieXRlc19wZXJfZnJhbWUpCiAgICAgICAgICAgICBzdHIgPSBOVUxMOwogICAgICAgICBlbHNlCkBAIC0xMTk3LDYgKzEzODQsNyBAQAogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogICAgIG5jcCA9IFB5Qnl0ZXNfQXNTdHJpbmcoc3RyKTsKKyAgICBjcCA9IGZyYWdtZW50LT5idWY7CiAKICAgICBmb3IgKDs7KSB7CiAgICAgICAgIHdoaWxlIChkIDwgMCkgewpAQCAtMTIyNywxMyArMTQxNSw4IEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBmb3IgKGNoYW4gPSAwOyBjaGFuIDwgbmNoYW5uZWxzOyBjaGFuKyspIHsKICAgICAgICAgICAgICAgICBwcmV2X2lbY2hhbl0gPSBjdXJfaVtjaGFuXTsKLSAgICAgICAgICAgICAgICBpZiAoc2l6ZSA9PSAxKQotICAgICAgICAgICAgICAgICAgICBjdXJfaVtjaGFuXSA9ICgoaW50KSpDSEFSUChjcCwgMCkpIDw8IDI0OwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNpemUgPT0gMikKLSAgICAgICAgICAgICAgICAgICAgY3VyX2lbY2hhbl0gPSAoKGludCkqU0hPUlRQKGNwLCAwKSkgPDwgMTY7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoc2l6ZSA9PSA0KQotICAgICAgICAgICAgICAgICAgICBjdXJfaVtjaGFuXSA9IChpbnQpKkxPTkdQKGNwLCAwKTsKLSAgICAgICAgICAgICAgICBjcCArPSBzaXplOworICAgICAgICAgICAgICAgIGN1cl9pW2NoYW5dID0gR0VUU0FNUExFMzIod2lkdGgsIGNwLCAwKTsKKyAgICAgICAgICAgICAgICBjcCArPSB3aWR0aDsKICAgICAgICAgICAgICAgICAvKiBpbXBsZW1lbnRzIGEgc2ltcGxlIGRpZ2l0YWwgZmlsdGVyICovCiAgICAgICAgICAgICAgICAgY3VyX2lbY2hhbl0gPSAoaW50KSgKICAgICAgICAgICAgICAgICAgICAgKChkb3VibGUpd2VpZ2h0QSAqIChkb3VibGUpY3VyX2lbY2hhbl0gKwpAQCAtMTI0OCwyMDYgKzE0MzEsMjI5IEBACiAgICAgICAgICAgICAgICAgY3VyX28gPSAoaW50KSgoKGRvdWJsZSlwcmV2X2lbY2hhbl0gKiAoZG91YmxlKWQgKwogICAgICAgICAgICAgICAgICAgICAgICAgIChkb3VibGUpY3VyX2lbY2hhbl0gKiAoZG91YmxlKShvdXRyYXRlIC0gZCkpIC8KICAgICAgICAgICAgICAgICAgICAgKGRvdWJsZSlvdXRyYXRlKTsKLSAgICAgICAgICAgICAgICBpZiAoc2l6ZSA9PSAxKQotICAgICAgICAgICAgICAgICAgICAqQ0hBUlAobmNwLCAwKSA9IChzaWduZWQgY2hhcikoY3VyX28gPj4gMjQpOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNpemUgPT0gMikKLSAgICAgICAgICAgICAgICAgICAgKlNIT1JUUChuY3AsIDApID0gKHNob3J0KShjdXJfbyA+PiAxNik7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoc2l6ZSA9PSA0KQotICAgICAgICAgICAgICAgICAgICAqTE9OR1AobmNwLCAwKSA9IChQeV9JbnQzMikoY3VyX28pOwotICAgICAgICAgICAgICAgIG5jcCArPSBzaXplOworICAgICAgICAgICAgICAgIFNFVFNBTVBMRTMyKHdpZHRoLCBuY3AsIDAsIGN1cl9vKTsKKyAgICAgICAgICAgICAgICBuY3AgKz0gd2lkdGg7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBkIC09IGlucmF0ZTsKICAgICAgICAgfQogICAgIH0KICAgZXhpdDoKLSAgICBpZiAocHJldl9pICE9IE5VTEwpCi0gICAgICAgIGZyZWUocHJldl9pKTsKLSAgICBpZiAoY3VyX2kgIT0gTlVMTCkKLSAgICAgICAgZnJlZShjdXJfaSk7CisgICAgUHlNZW1fRnJlZShwcmV2X2kpOworICAgIFB5TWVtX0ZyZWUoY3VyX2kpOwogICAgIHJldHVybiBydjsKIH0KIAorLypbY2xpbmljIGlucHV0XQorYXVkaW9vcC5saW4ydWxhdworCisgICAgZnJhZ21lbnQ6IFB5X2J1ZmZlcgorICAgIHdpZHRoOiBpbnQKKyAgICAvCisKK0NvbnZlcnQgc2FtcGxlcyBpbiB0aGUgYXVkaW8gZnJhZ21lbnQgdG8gdS1MQVcgZW5jb2RpbmcuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi1hdWRpb29wX2xpbjJ1bGF3KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK2F1ZGlvb3BfbGluMnVsYXdfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MjYyNjNjYzg3N2M1ZTFiYyBpbnB1dD0yNDUwZDFiODcwYjZiYWMyXSovCiB7Ci0gICAgc2lnbmVkIGNoYXIgKmNwOwogICAgIHVuc2lnbmVkIGNoYXIgKm5jcDsKLSAgICBQeV9zc2l6ZV90IGxlbiwgaTsKLSAgICBpbnQgc2l6ZSwgdmFsID0gMDsKKyAgICBQeV9zc2l6ZV90IGk7CiAgICAgUHlPYmplY3QgKnJ2OwogCi0gICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyNpOmxpbjJ1bGF3IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICZjcCwgJmxlbiwgJnNpemUpICkKLSAgICAgICAgcmV0dXJuIDAgOwotCi0gICAgaWYgKCFhdWRpb29wX2NoZWNrX3BhcmFtZXRlcnMobGVuLCBzaXplKSkKKyAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfcGFyYW1ldGVycyhmcmFnbWVudC0+bGVuLCB3aWR0aCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgcnYgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGxlbi9zaXplKTsKLSAgICBpZiAoIHJ2ID09IDAgKQotICAgICAgICByZXR1cm4gMDsKKyAgICBydiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgZnJhZ21lbnQtPmxlbi93aWR0aCk7CisgICAgaWYgKHJ2ID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOwogICAgIG5jcCA9ICh1bnNpZ25lZCBjaGFyICopUHlCeXRlc19Bc1N0cmluZyhydik7CiAKLSAgICBmb3IgKCBpPTA7IGkgPCBsZW47IGkgKz0gc2l6ZSApIHsKLSAgICAgICAgaWYgKCBzaXplID09IDEgKSAgICAgIHZhbCA9ICgoaW50KSpDSEFSUChjcCwgaSkpIDw8IDg7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDIgKSB2YWwgPSAoaW50KSpTSE9SVFAoY3AsIGkpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSA0ICkgdmFsID0gKChpbnQpKkxPTkdQKGNwLCBpKSkgPj4gMTY7Ci0KLSAgICAgICAgKm5jcCsrID0gc3RfMTRsaW5lYXIydWxhdyh2YWwpOworICAgIGZvciAoaSA9IDA7IGkgPCBmcmFnbWVudC0+bGVuOyBpICs9IHdpZHRoKSB7CisgICAgICAgIGludCB2YWwgPSBHRVRTQU1QTEUzMih3aWR0aCwgZnJhZ21lbnQtPmJ1ZiwgaSk7CisgICAgICAgICpuY3ArKyA9IHN0XzE0bGluZWFyMnVsYXcodmFsID4+IDE4KTsKICAgICB9CiAgICAgcmV0dXJuIHJ2OwogfQogCisvKltjbGluaWMgaW5wdXRdCithdWRpb29wLnVsYXcybGluCisKKyAgICBmcmFnbWVudDogUHlfYnVmZmVyCisgICAgd2lkdGg6IGludAorICAgIC8KKworQ29udmVydCBzb3VuZCBmcmFnbWVudHMgaW4gdS1MQVcgZW5jb2RpbmcgdG8gbGluZWFybHkgZW5jb2RlZCBzb3VuZCBmcmFnbWVudHMuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi1hdWRpb29wX3VsYXcybGluKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK2F1ZGlvb3BfdWxhdzJsaW5faW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9OTg2NGNiMzRlM2ExZDg3NiBpbnB1dD00NWQ1M2RkY2U1YmU3ZDA2XSovCiB7CiAgICAgdW5zaWduZWQgY2hhciAqY3A7Ci0gICAgdW5zaWduZWQgY2hhciBjdmFsOwogICAgIHNpZ25lZCBjaGFyICpuY3A7Ci0gICAgUHlfc3NpemVfdCBsZW4sIGk7Ci0gICAgaW50IHNpemUsIHZhbDsKKyAgICBQeV9zc2l6ZV90IGk7CiAgICAgUHlPYmplY3QgKnJ2OwogCi0gICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyNpOnVsYXcybGluIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICZjcCwgJmxlbiwgJnNpemUpICkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfc2l6ZShzaXplKSkKKyAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfc2l6ZSh3aWR0aCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgaWYgKGxlbiA+IFBZX1NTSVpFX1RfTUFYL3NpemUpIHsKKyAgICBpZiAoZnJhZ21lbnQtPmxlbiA+IFBZX1NTSVpFX1RfTUFYL3dpZHRoKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19NZW1vcnlFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJub3QgZW5vdWdoIG1lbW9yeSBmb3Igb3V0cHV0IGJ1ZmZlciIpOwotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIHJ2ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBsZW4qc2l6ZSk7Ci0gICAgaWYgKCBydiA9PSAwICkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgcnYgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGZyYWdtZW50LT5sZW4qd2lkdGgpOworICAgIGlmIChydiA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKICAgICBuY3AgPSAoc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FzU3RyaW5nKHJ2KTsKIAotICAgIGZvciAoIGk9MDsgaSA8IGxlbipzaXplOyBpICs9IHNpemUgKSB7Ci0gICAgICAgIGN2YWwgPSAqY3ArKzsKLSAgICAgICAgdmFsID0gc3RfdWxhdzJsaW5lYXIxNihjdmFsKTsKLQotICAgICAgICBpZiAoIHNpemUgPT0gMSApICAgICAgKkNIQVJQKG5jcCwgaSkgPSAoc2lnbmVkIGNoYXIpKHZhbCA+PiA4KTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gMiApICpTSE9SVFAobmNwLCBpKSA9IChzaG9ydCkodmFsKTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gNCApICpMT05HUChuY3AsIGkpID0gKFB5X0ludDMyKSh2YWw8PDE2KTsKKyAgICBjcCA9IGZyYWdtZW50LT5idWY7CisgICAgZm9yIChpID0gMDsgaSA8IGZyYWdtZW50LT5sZW4qd2lkdGg7IGkgKz0gd2lkdGgpIHsKKyAgICAgICAgaW50IHZhbCA9IHN0X3VsYXcybGluZWFyMTYoKmNwKyspIDw8IDE2OworICAgICAgICBTRVRTQU1QTEUzMih3aWR0aCwgbmNwLCBpLCB2YWwpOwogICAgIH0KICAgICByZXR1cm4gcnY7CiB9CiAKKy8qW2NsaW5pYyBpbnB1dF0KK2F1ZGlvb3AubGluMmFsYXcKKworICAgIGZyYWdtZW50OiBQeV9idWZmZXIKKyAgICB3aWR0aDogaW50CisgICAgLworCitDb252ZXJ0IHNhbXBsZXMgaW4gdGhlIGF1ZGlvIGZyYWdtZW50IHRvIGEtTEFXIGVuY29kaW5nLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotYXVkaW9vcF9saW4yYWxhdyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCithdWRpb29wX2xpbjJhbGF3X2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwgaW50IHdpZHRoKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWQ1YmYxNGJkMGZlNmZkY2QgaW5wdXQ9ZmZiMWVmOGJiMzlkYTk0NV0qLwogewotICAgIHNpZ25lZCBjaGFyICpjcDsKICAgICB1bnNpZ25lZCBjaGFyICpuY3A7Ci0gICAgUHlfc3NpemVfdCBsZW4sIGk7Ci0gICAgaW50IHNpemUsIHZhbCA9IDA7CisgICAgUHlfc3NpemVfdCBpOwogICAgIFB5T2JqZWN0ICpydjsKIAotICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjaTpsaW4yYWxhdyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAmY3AsICZsZW4sICZzaXplKSApCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKCFhdWRpb29wX2NoZWNrX3BhcmFtZXRlcnMobGVuLCBzaXplKSkKKyAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfcGFyYW1ldGVycyhmcmFnbWVudC0+bGVuLCB3aWR0aCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgcnYgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGxlbi9zaXplKTsKLSAgICBpZiAoIHJ2ID09IDAgKQotICAgICAgICByZXR1cm4gMDsKKyAgICBydiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgZnJhZ21lbnQtPmxlbi93aWR0aCk7CisgICAgaWYgKHJ2ID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOwogICAgIG5jcCA9ICh1bnNpZ25lZCBjaGFyICopUHlCeXRlc19Bc1N0cmluZyhydik7CiAKLSAgICBmb3IgKCBpPTA7IGkgPCBsZW47IGkgKz0gc2l6ZSApIHsKLSAgICAgICAgaWYgKCBzaXplID09IDEgKSAgICAgIHZhbCA9ICgoaW50KSpDSEFSUChjcCwgaSkpIDw8IDg7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDIgKSB2YWwgPSAoaW50KSpTSE9SVFAoY3AsIGkpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSA0ICkgdmFsID0gKChpbnQpKkxPTkdQKGNwLCBpKSkgPj4gMTY7Ci0KLSAgICAgICAgKm5jcCsrID0gc3RfbGluZWFyMmFsYXcodmFsKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgZnJhZ21lbnQtPmxlbjsgaSArPSB3aWR0aCkgeworICAgICAgICBpbnQgdmFsID0gR0VUU0FNUExFMzIod2lkdGgsIGZyYWdtZW50LT5idWYsIGkpOworICAgICAgICAqbmNwKysgPSBzdF9saW5lYXIyYWxhdyh2YWwgPj4gMTkpOwogICAgIH0KICAgICByZXR1cm4gcnY7CiB9CiAKKy8qW2NsaW5pYyBpbnB1dF0KK2F1ZGlvb3AuYWxhdzJsaW4KKworICAgIGZyYWdtZW50OiBQeV9idWZmZXIKKyAgICB3aWR0aDogaW50CisgICAgLworCitDb252ZXJ0IHNvdW5kIGZyYWdtZW50cyBpbiBhLUxBVyBlbmNvZGluZyB0byBsaW5lYXJseSBlbmNvZGVkIHNvdW5kIGZyYWdtZW50cy4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKLWF1ZGlvb3BfYWxhdzJsaW4oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorYXVkaW9vcF9hbGF3Mmxpbl9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIGludCB3aWR0aCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kMmI2MDRkZGQwMzZlMWNkIGlucHV0PTQxNDA2MjYwNDZjZDE3NzJdKi8KIHsKICAgICB1bnNpZ25lZCBjaGFyICpjcDsKLSAgICB1bnNpZ25lZCBjaGFyIGN2YWw7CiAgICAgc2lnbmVkIGNoYXIgKm5jcDsKLSAgICBQeV9zc2l6ZV90IGxlbiwgaTsKLSAgICBpbnQgc2l6ZSwgdmFsOworICAgIFB5X3NzaXplX3QgaTsKKyAgICBpbnQgdmFsOwogICAgIFB5T2JqZWN0ICpydjsKIAotICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjaTphbGF3MmxpbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAmY3AsICZsZW4sICZzaXplKSApCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKCFhdWRpb29wX2NoZWNrX3NpemUoc2l6ZSkpCisgICAgaWYgKCFhdWRpb29wX2NoZWNrX3NpemUod2lkdGgpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGlmIChsZW4gPiBQWV9TU0laRV9UX01BWC9zaXplKSB7CisgICAgaWYgKGZyYWdtZW50LT5sZW4gPiBQWV9TU0laRV9UX01BWC93aWR0aCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfTWVtb3J5RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAibm90IGVub3VnaCBtZW1vcnkgZm9yIG91dHB1dCBidWZmZXIiKTsKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBydiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgbGVuKnNpemUpOwotICAgIGlmICggcnYgPT0gMCApCi0gICAgICAgIHJldHVybiAwOworICAgIHJ2ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBmcmFnbWVudC0+bGVuKndpZHRoKTsKKyAgICBpZiAocnYgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgbmNwID0gKHNpZ25lZCBjaGFyICopUHlCeXRlc19Bc1N0cmluZyhydik7CisgICAgY3AgPSBmcmFnbWVudC0+YnVmOwogCi0gICAgZm9yICggaT0wOyBpIDwgbGVuKnNpemU7IGkgKz0gc2l6ZSApIHsKLSAgICAgICAgY3ZhbCA9ICpjcCsrOwotICAgICAgICB2YWwgPSBzdF9hbGF3MmxpbmVhcjE2KGN2YWwpOwotCi0gICAgICAgIGlmICggc2l6ZSA9PSAxICkgICAgICAqQ0hBUlAobmNwLCBpKSA9IChzaWduZWQgY2hhcikodmFsID4+IDgpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSAyICkgKlNIT1JUUChuY3AsIGkpID0gKHNob3J0KSh2YWwpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSA0ICkgKkxPTkdQKG5jcCwgaSkgPSAoUHlfSW50MzIpKHZhbDw8MTYpOworICAgIGZvciAoaSA9IDA7IGkgPCBmcmFnbWVudC0+bGVuKndpZHRoOyBpICs9IHdpZHRoKSB7CisgICAgICAgIHZhbCA9IHN0X2FsYXcybGluZWFyMTYoKmNwKyspIDw8IDE2OworICAgICAgICBTRVRTQU1QTEUzMih3aWR0aCwgbmNwLCBpLCB2YWwpOwogICAgIH0KICAgICByZXR1cm4gcnY7CiB9CiAKKy8qW2NsaW5pYyBpbnB1dF0KK2F1ZGlvb3AubGluMmFkcGNtCisKKyAgICBmcmFnbWVudDogUHlfYnVmZmVyCisgICAgd2lkdGg6IGludAorICAgIHN0YXRlOiBvYmplY3QKKyAgICAvCisKK0NvbnZlcnQgc2FtcGxlcyB0byA0IGJpdCBJbnRlbC9EVkkgQURQQ00gZW5jb2RpbmcuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi1hdWRpb29wX2xpbjJhZHBjbShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCithdWRpb29wX2xpbjJhZHBjbV9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIGludCB3aWR0aCwgUHlPYmplY3QgKnN0YXRlKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTQ2NTRjMjlkMjczMWZhZmUgaW5wdXQ9MTI5MTlkNTQ5YjkwYzkwYV0qLwogewotICAgIHNpZ25lZCBjaGFyICpjcDsKICAgICBzaWduZWQgY2hhciAqbmNwOwotICAgIFB5X3NzaXplX3QgbGVuLCBpOwotICAgIGludCBzaXplLCB2YWwgPSAwLCBzdGVwLCB2YWxwcmVkLCBkZWx0YSwKKyAgICBQeV9zc2l6ZV90IGk7CisgICAgaW50IHN0ZXAsIHZhbHByZWQsIGRlbHRhLAogICAgICAgICBpbmRleCwgc2lnbiwgdnBkaWZmLCBkaWZmOwotICAgIFB5T2JqZWN0ICpydiwgKnN0YXRlLCAqc3RyOworICAgIFB5T2JqZWN0ICpydiA9IE5VTEwsICpzdHI7CiAgICAgaW50IG91dHB1dGJ1ZmZlciA9IDAsIGJ1ZmZlcnN0ZXA7CiAKLSAgICBpZiAoICFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzI2lPOmxpbjJhZHBjbSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAmY3AsICZsZW4sICZzaXplLCAmc3RhdGUpICkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfcGFyYW1ldGVycyhsZW4sIHNpemUpKQorICAgIGlmICghYXVkaW9vcF9jaGVja19wYXJhbWV0ZXJzKGZyYWdtZW50LT5sZW4sIHdpZHRoKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBzdHIgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGxlbi8oc2l6ZSoyKSk7Ci0gICAgaWYgKCBzdHIgPT0gMCApCi0gICAgICAgIHJldHVybiAwOwotICAgIG5jcCA9IChzaWduZWQgY2hhciAqKVB5Qnl0ZXNfQXNTdHJpbmcoc3RyKTsKLQogICAgIC8qIERlY29kZSBzdGF0ZSwgc2hvdWxkIGhhdmUgKHZhbHVlLCBzdGVwKSAqLwogICAgIGlmICggc3RhdGUgPT0gUHlfTm9uZSApIHsKICAgICAgICAgLyogRmlyc3QgdGltZSwgaXQgc2VlbXMuIFNldCBkZWZhdWx0cyAqLwogICAgICAgICB2YWxwcmVkID0gMDsKICAgICAgICAgaW5kZXggPSAwOwotICAgIH0gZWxzZSBpZiAoICFQeUFyZ19QYXJzZVR1cGxlKHN0YXRlLCAiaWkiLCAmdmFscHJlZCwgJmluZGV4KSApCi0gICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBlbHNlIGlmICghUHlUdXBsZV9DaGVjayhzdGF0ZSkpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgInN0YXRlIG11c3QgYmUgYSB0dXBsZSBvciBOb25lIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBlbHNlIGlmICghUHlBcmdfUGFyc2VUdXBsZShzdGF0ZSwgImlpIiwgJnZhbHByZWQsICZpbmRleCkpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGVsc2UgaWYgKHZhbHByZWQgPj0gMHg4MDAwIHx8IHZhbHByZWQgPCAtMHg4MDAwIHx8CisgICAgICAgICAgICAgKHNpemVfdClpbmRleCA+PSBQeV9BUlJBWV9MRU5HVEgoc3RlcHNpemVUYWJsZSkpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJiYWQgc3RhdGUiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgc3RyID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBmcmFnbWVudC0+bGVuLyh3aWR0aCoyKSk7CisgICAgaWYgKHN0ciA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBuY3AgPSAoc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FzU3RyaW5nKHN0cik7CiAKICAgICBzdGVwID0gc3RlcHNpemVUYWJsZVtpbmRleF07CiAgICAgYnVmZmVyc3RlcCA9IDE7CiAKLSAgICBmb3IgKCBpPTA7IGkgPCBsZW47IGkgKz0gc2l6ZSApIHsKLSAgICAgICAgaWYgKCBzaXplID09IDEgKSAgICAgIHZhbCA9ICgoaW50KSpDSEFSUChjcCwgaSkpIDw8IDg7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDIgKSB2YWwgPSAoaW50KSpTSE9SVFAoY3AsIGkpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSA0ICkgdmFsID0gKChpbnQpKkxPTkdQKGNwLCBpKSkgPj4gMTY7CisgICAgZm9yIChpID0gMDsgaSA8IGZyYWdtZW50LT5sZW47IGkgKz0gd2lkdGgpIHsKKyAgICAgICAgaW50IHZhbCA9IEdFVFNBTVBMRTMyKHdpZHRoLCBmcmFnbWVudC0+YnVmLCBpKSA+PiAxNjsKIAogICAgICAgICAvKiBTdGVwIDEgLSBjb21wdXRlIGRpZmZlcmVuY2Ugd2l0aCBwcmV2aW91cyB2YWx1ZSAqLwotICAgICAgICBkaWZmID0gdmFsIC0gdmFscHJlZDsKLSAgICAgICAgc2lnbiA9IChkaWZmIDwgMCkgPyA4IDogMDsKLSAgICAgICAgaWYgKCBzaWduICkgZGlmZiA9ICgtZGlmZik7CisgICAgICAgIGlmICh2YWwgPCB2YWxwcmVkKSB7CisgICAgICAgICAgICBkaWZmID0gdmFscHJlZCAtIHZhbDsKKyAgICAgICAgICAgIHNpZ24gPSA4OworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZGlmZiA9IHZhbCAtIHZhbHByZWQ7CisgICAgICAgICAgICBzaWduID0gMDsKKyAgICAgICAgfQogCiAgICAgICAgIC8qIFN0ZXAgMiAtIERpdmlkZSBhbmQgY2xhbXAgKi8KICAgICAgICAgLyogTm90ZToKQEAgLTE1MTEsMjEgKzE3MTcsMjkgQEAKICAgICByZXR1cm4gcnY7CiB9CiAKKy8qW2NsaW5pYyBpbnB1dF0KK2F1ZGlvb3AuYWRwY20ybGluCisKKyAgICBmcmFnbWVudDogUHlfYnVmZmVyCisgICAgd2lkdGg6IGludAorICAgIHN0YXRlOiBvYmplY3QKKyAgICAvCisKK0RlY29kZSBhbiBJbnRlbC9EVkkgQURQQ00gY29kZWQgZnJhZ21lbnQgdG8gYSBsaW5lYXIgZnJhZ21lbnQuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi1hdWRpb29wX2FkcGNtMmxpbihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCithdWRpb29wX2FkcGNtMmxpbl9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIGludCB3aWR0aCwgUHlPYmplY3QgKnN0YXRlKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTM3MTk2NWNkY2MwYWE2OWIgaW5wdXQ9ZjUyMjExNDRmNWNhOWVmMF0qLwogewogICAgIHNpZ25lZCBjaGFyICpjcDsKICAgICBzaWduZWQgY2hhciAqbmNwOwotICAgIFB5X3NzaXplX3QgbGVuLCBpOwotICAgIGludCBzaXplLCB2YWxwcmVkLCBzdGVwLCBkZWx0YSwgaW5kZXgsIHNpZ24sIHZwZGlmZjsKLSAgICBQeU9iamVjdCAqcnYsICpzdHIsICpzdGF0ZTsKKyAgICBQeV9zc2l6ZV90IGksIG91dGxlbjsKKyAgICBpbnQgdmFscHJlZCwgc3RlcCwgZGVsdGEsIGluZGV4LCBzaWduLCB2cGRpZmY7CisgICAgUHlPYmplY3QgKnJ2LCAqc3RyOwogICAgIGludCBpbnB1dGJ1ZmZlciA9IDAsIGJ1ZmZlcnN0ZXA7CiAKLSAgICBpZiAoICFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzI2lPOmFkcGNtMmxpbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAmY3AsICZsZW4sICZzaXplLCAmc3RhdGUpICkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfc2l6ZShzaXplKSkKKyAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfc2l6ZSh3aWR0aCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgLyogRGVjb2RlIHN0YXRlLCBzaG91bGQgaGF2ZSAodmFsdWUsIHN0ZXApICovCkBAIC0xNTMzLDIzICsxNzQ3LDM2IEBACiAgICAgICAgIC8qIEZpcnN0IHRpbWUsIGl0IHNlZW1zLiBTZXQgZGVmYXVsdHMgKi8KICAgICAgICAgdmFscHJlZCA9IDA7CiAgICAgICAgIGluZGV4ID0gMDsKLSAgICB9IGVsc2UgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShzdGF0ZSwgImlpIiwgJnZhbHByZWQsICZpbmRleCkgKQotICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgZWxzZSBpZiAoIVB5VHVwbGVfQ2hlY2soc3RhdGUpKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJzdGF0ZSBtdXN0IGJlIGEgdHVwbGUgb3IgTm9uZSIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgZWxzZSBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoc3RhdGUsICJpaSIsICZ2YWxwcmVkLCAmaW5kZXgpKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBlbHNlIGlmICh2YWxwcmVkID49IDB4ODAwMCB8fCB2YWxwcmVkIDwgLTB4ODAwMCB8fAorICAgICAgICAgICAgIChzaXplX3QpaW5kZXggPj0gUHlfQVJSQVlfTEVOR1RIKHN0ZXBzaXplVGFibGUpKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiYmFkIHN0YXRlIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAotICAgIGlmIChsZW4gPiAoUFlfU1NJWkVfVF9NQVgvMikvc2l6ZSkgeworICAgIGlmIChmcmFnbWVudC0+bGVuID4gKFBZX1NTSVpFX1RfTUFYLzIpL3dpZHRoKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19NZW1vcnlFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJub3QgZW5vdWdoIG1lbW9yeSBmb3Igb3V0cHV0IGJ1ZmZlciIpOwotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIHN0ciA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgbGVuKnNpemUqMik7Ci0gICAgaWYgKCBzdHIgPT0gMCApCi0gICAgICAgIHJldHVybiAwOworICAgIG91dGxlbiA9IGZyYWdtZW50LT5sZW4qd2lkdGgqMjsKKyAgICBzdHIgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIG91dGxlbik7CisgICAgaWYgKHN0ciA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKICAgICBuY3AgPSAoc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FzU3RyaW5nKHN0cik7CisgICAgY3AgPSBmcmFnbWVudC0+YnVmOwogCiAgICAgc3RlcCA9IHN0ZXBzaXplVGFibGVbaW5kZXhdOwogICAgIGJ1ZmZlcnN0ZXAgPSAwOwogCi0gICAgZm9yICggaT0wOyBpIDwgbGVuKnNpemUqMjsgaSArPSBzaXplICkgeworICAgIGZvciAoaSA9IDA7IGkgPCBvdXRsZW47IGkgKz0gd2lkdGgpIHsKICAgICAgICAgLyogU3RlcCAxIC0gZ2V0IHRoZSBkZWx0YSB2YWx1ZSBhbmQgY29tcHV0ZSBuZXh0IGluZGV4ICovCiAgICAgICAgIGlmICggYnVmZmVyc3RlcCApIHsKICAgICAgICAgICAgIGRlbHRhID0gaW5wdXRidWZmZXIgJiAweGY7CkBAIC0xNTk0LDkgKzE4MjEsNyBAQAogICAgICAgICBzdGVwID0gc3RlcHNpemVUYWJsZVtpbmRleF07CiAKICAgICAgICAgLyogU3RlcCA2IC0gT3V0cHV0IHZhbHVlICovCi0gICAgICAgIGlmICggc2l6ZSA9PSAxICkgKkNIQVJQKG5jcCwgaSkgPSAoc2lnbmVkIGNoYXIpKHZhbHByZWQgPj4gOCk7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDIgKSAqU0hPUlRQKG5jcCwgaSkgPSAoc2hvcnQpKHZhbHByZWQpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSA0ICkgKkxPTkdQKG5jcCwgaSkgPSAoUHlfSW50MzIpKHZhbHByZWQ8PDE2KTsKKyAgICAgICAgU0VUU0FNUExFMzIod2lkdGgsIG5jcCwgaSwgdmFscHJlZCA8PCAxNik7CiAgICAgfQogCiAgICAgcnYgPSBQeV9CdWlsZFZhbHVlKCIoTyhpaSkpIiwgc3RyLCB2YWxwcmVkLCBpbmRleCk7CkBAIC0xNjA0LDMyICsxODI5LDM1IEBACiAgICAgcmV0dXJuIHJ2OwogfQogCisjaW5jbHVkZSAiY2xpbmljL2F1ZGlvb3AuYy5oIgorCiBzdGF0aWMgUHlNZXRob2REZWYgYXVkaW9vcF9tZXRob2RzW10gPSB7Ci0gICAgeyAibWF4IiwgYXVkaW9vcF9tYXgsIE1FVEhfVkFSQVJHUyB9LAotICAgIHsgIm1pbm1heCIsIGF1ZGlvb3BfbWlubWF4LCBNRVRIX1ZBUkFSR1MgfSwKLSAgICB7ICJhdmciLCBhdWRpb29wX2F2ZywgTUVUSF9WQVJBUkdTIH0sCi0gICAgeyAibWF4cHAiLCBhdWRpb29wX21heHBwLCBNRVRIX1ZBUkFSR1MgfSwKLSAgICB7ICJhdmdwcCIsIGF1ZGlvb3BfYXZncHAsIE1FVEhfVkFSQVJHUyB9LAotICAgIHsgInJtcyIsIGF1ZGlvb3Bfcm1zLCBNRVRIX1ZBUkFSR1MgfSwKLSAgICB7ICJmaW5kZml0IiwgYXVkaW9vcF9maW5kZml0LCBNRVRIX1ZBUkFSR1MgfSwKLSAgICB7ICJmaW5kbWF4IiwgYXVkaW9vcF9maW5kbWF4LCBNRVRIX1ZBUkFSR1MgfSwKLSAgICB7ICJmaW5kZmFjdG9yIiwgYXVkaW9vcF9maW5kZmFjdG9yLCBNRVRIX1ZBUkFSR1MgfSwKLSAgICB7ICJjcm9zcyIsIGF1ZGlvb3BfY3Jvc3MsIE1FVEhfVkFSQVJHUyB9LAotICAgIHsgIm11bCIsIGF1ZGlvb3BfbXVsLCBNRVRIX1ZBUkFSR1MgfSwKLSAgICB7ICJhZGQiLCBhdWRpb29wX2FkZCwgTUVUSF9WQVJBUkdTIH0sCi0gICAgeyAiYmlhcyIsIGF1ZGlvb3BfYmlhcywgTUVUSF9WQVJBUkdTIH0sCi0gICAgeyAidWxhdzJsaW4iLCBhdWRpb29wX3VsYXcybGluLCBNRVRIX1ZBUkFSR1MgfSwKLSAgICB7ICJsaW4ydWxhdyIsIGF1ZGlvb3BfbGluMnVsYXcsIE1FVEhfVkFSQVJHUyB9LAotICAgIHsgImFsYXcybGluIiwgYXVkaW9vcF9hbGF3MmxpbiwgTUVUSF9WQVJBUkdTIH0sCi0gICAgeyAibGluMmFsYXciLCBhdWRpb29wX2xpbjJhbGF3LCBNRVRIX1ZBUkFSR1MgfSwKLSAgICB7ICJsaW4ybGluIiwgYXVkaW9vcF9saW4ybGluLCBNRVRIX1ZBUkFSR1MgfSwKLSAgICB7ICJhZHBjbTJsaW4iLCBhdWRpb29wX2FkcGNtMmxpbiwgTUVUSF9WQVJBUkdTIH0sCi0gICAgeyAibGluMmFkcGNtIiwgYXVkaW9vcF9saW4yYWRwY20sIE1FVEhfVkFSQVJHUyB9LAotICAgIHsgInRvbW9ubyIsIGF1ZGlvb3BfdG9tb25vLCBNRVRIX1ZBUkFSR1MgfSwKLSAgICB7ICJ0b3N0ZXJlbyIsIGF1ZGlvb3BfdG9zdGVyZW8sIE1FVEhfVkFSQVJHUyB9LAotICAgIHsgImdldHNhbXBsZSIsIGF1ZGlvb3BfZ2V0c2FtcGxlLCBNRVRIX1ZBUkFSR1MgfSwKLSAgICB7ICJyZXZlcnNlIiwgYXVkaW9vcF9yZXZlcnNlLCBNRVRIX1ZBUkFSR1MgfSwKLSAgICB7ICJyYXRlY3YiLCBhdWRpb29wX3JhdGVjdiwgTUVUSF9WQVJBUkdTIH0sCisgICAgQVVESU9PUF9NQVhfTUVUSE9EREVGCisgICAgQVVESU9PUF9NSU5NQVhfTUVUSE9EREVGCisgICAgQVVESU9PUF9BVkdfTUVUSE9EREVGCisgICAgQVVESU9PUF9NQVhQUF9NRVRIT0RERUYKKyAgICBBVURJT09QX0FWR1BQX01FVEhPRERFRgorICAgIEFVRElPT1BfUk1TX01FVEhPRERFRgorICAgIEFVRElPT1BfRklOREZJVF9NRVRIT0RERUYKKyAgICBBVURJT09QX0ZJTkRNQVhfTUVUSE9EREVGCisgICAgQVVESU9PUF9GSU5ERkFDVE9SX01FVEhPRERFRgorICAgIEFVRElPT1BfQ1JPU1NfTUVUSE9EREVGCisgICAgQVVESU9PUF9NVUxfTUVUSE9EREVGCisgICAgQVVESU9PUF9BRERfTUVUSE9EREVGCisgICAgQVVESU9PUF9CSUFTX01FVEhPRERFRgorICAgIEFVRElPT1BfVUxBVzJMSU5fTUVUSE9EREVGCisgICAgQVVESU9PUF9MSU4yVUxBV19NRVRIT0RERUYKKyAgICBBVURJT09QX0FMQVcyTElOX01FVEhPRERFRgorICAgIEFVRElPT1BfTElOMkFMQVdfTUVUSE9EREVGCisgICAgQVVESU9PUF9MSU4yTElOX01FVEhPRERFRgorICAgIEFVRElPT1BfQURQQ00yTElOX01FVEhPRERFRgorICAgIEFVRElPT1BfTElOMkFEUENNX01FVEhPRERFRgorICAgIEFVRElPT1BfVE9NT05PX01FVEhPRERFRgorICAgIEFVRElPT1BfVE9TVEVSRU9fTUVUSE9EREVGCisgICAgQVVESU9PUF9HRVRTQU1QTEVfTUVUSE9EREVGCisgICAgQVVESU9PUF9SRVZFUlNFX01FVEhPRERFRgorICAgIEFVRElPT1BfQllURVNXQVBfTUVUSE9EREVGCisgICAgQVVESU9PUF9SQVRFQ1ZfTUVUSE9EREVGCiAgICAgeyAwLCAgICAgICAgICAwIH0KIH07CiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvYmluYXNjaWkuYyBiL01vZHVsZXMvYmluYXNjaWkuYwppbmRleCBhODRiYWRjNy4uZWExNGQzYyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9iaW5hc2NpaS5jCisrKyBiL01vZHVsZXMvYmluYXNjaWkuYwpAQCAtMTgzLDYgKzE4MywyNyBAQAogICAgIDB4NmUxNywgMHg3ZTM2LCAweDRlNTUsIDB4NWU3NCwgMHgyZTkzLCAweDNlYjIsIDB4MGVkMSwgMHgxZWYwLAogfTsKIAorLypbY2xpbmljIGlucHV0XQorb3V0cHV0IHByZXNldCBmaWxlCittb2R1bGUgYmluYXNjaWkKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kYTM5YTNlZTVlNmI0YjBkIGlucHV0PTQ0YzZmODQwY2U3MDhmMGNdKi8KKworLypbcHl0aG9uIGlucHV0XQorCitjbGFzcyBhc2NpaV9idWZmZXJfY29udmVydGVyKENDb252ZXJ0ZXIpOgorICAgIHR5cGUgPSAnUHlfYnVmZmVyJworICAgIGNvbnZlcnRlciA9ICdhc2NpaV9idWZmZXJfY29udmVydGVyJworICAgIGltcGxfYnlfcmVmZXJlbmNlID0gVHJ1ZQorICAgIGNfZGVmYXVsdCA9ICJ7TlVMTCwgTlVMTH0iCisKKyAgICBkZWYgY2xlYW51cChzZWxmKToKKyAgICAgICAgbmFtZSA9IHNlbGYubmFtZQorICAgICAgICByZXR1cm4gIiIuam9pbihbImlmICgiLCBuYW1lLCAiLm9iailcbiAgIFB5QnVmZmVyX1JlbGVhc2UoJiIsIG5hbWUsICIpO1xuIl0pCisKK1tweXRob24gc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKy8qW3B5dGhvbiBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kYTM5YTNlZTVlNmI0YjBkIGlucHV0PTNlYjdiNjM2MTBkYTkyY2RdKi8KKwogc3RhdGljIGludAogYXNjaWlfYnVmZmVyX2NvbnZlcnRlcihQeU9iamVjdCAqYXJnLCBQeV9idWZmZXIgKmJ1ZikKIHsKQEAgLTIwNywyNiArMjI4LDM0IEBACiAgICAgaWYgKFB5T2JqZWN0X0dldEJ1ZmZlcihhcmcsIGJ1ZiwgUHlCVUZfU0lNUExFKSAhPSAwKSB7CiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAiYXJndW1lbnQgc2hvdWxkIGJlIGJ5dGVzLCBidWZmZXIgb3IgQVNDSUkgc3RyaW5nLCAiCi0gICAgICAgICAgICAgICAgICAgICAibm90ICVSIiwgUHlfVFlQRShhcmcpKTsKKyAgICAgICAgICAgICAgICAgICAgICJub3QgJyUuMTAwcyciLCBQeV9UWVBFKGFyZyktPnRwX25hbWUpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgaWYgKCFQeUJ1ZmZlcl9Jc0NvbnRpZ3VvdXMoYnVmLCAnQycpKSB7CiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAiYXJndW1lbnQgc2hvdWxkIGJlIGEgY29udGlndW91cyBidWZmZXIsICIKLSAgICAgICAgICAgICAgICAgICAgICJub3QgJVIiLCBQeV9UWVBFKGFyZykpOworICAgICAgICAgICAgICAgICAgICAgIm5vdCAnJS4xMDBzJyIsIFB5X1RZUEUoYXJnKS0+dHBfbmFtZSk7CiAgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoYnVmKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIHJldHVybiBQeV9DTEVBTlVQX1NVUFBPUlRFRDsKIH0KIAorI2luY2x1ZGUgImNsaW5pYy9iaW5hc2NpaS5jLmgiCiAKLVB5RG9jX1NUUlZBUihkb2NfYTJiX3V1LCAiKGFzY2lpKSAtPiBiaW4uIERlY29kZSBhIGxpbmUgb2YgdXVlbmNvZGVkIGRhdGEiKTsKKy8qW2NsaW5pYyBpbnB1dF0KK2JpbmFzY2lpLmEyYl91dQorCisgICAgZGF0YTogYXNjaWlfYnVmZmVyCisgICAgLworCitEZWNvZGUgYSBsaW5lIG9mIHV1ZW5jb2RlZCBkYXRhLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotYmluYXNjaWlfYTJiX3V1KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK2JpbmFzY2lpX2EyYl91dV9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZGF0YSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD01Nzc5ZjM5YjBiNDg0NTlmIGlucHV0PTdjYWZlYWY3M2RmNjNkMWNdKi8KIHsKLSAgICBQeV9idWZmZXIgcGFzY2lpOwogICAgIHVuc2lnbmVkIGNoYXIgKmFzY2lpX2RhdGEsICpiaW5fZGF0YTsKICAgICBpbnQgbGVmdGJpdHMgPSAwOwogICAgIHVuc2lnbmVkIGNoYXIgdGhpc19jaDsKQEAgLTIzNCwxMCArMjYzLDggQEAKICAgICBQeU9iamVjdCAqcnY7CiAgICAgUHlfc3NpemVfdCBhc2NpaV9sZW4sIGJpbl9sZW47CiAKLSAgICBpZiAoICFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPJjphMmJfdXUiLCBhc2NpaV9idWZmZXJfY29udmVydGVyLCAmcGFzY2lpKSApCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGFzY2lpX2RhdGEgPSBwYXNjaWkuYnVmOwotICAgIGFzY2lpX2xlbiA9IHBhc2NpaS5sZW47CisgICAgYXNjaWlfZGF0YSA9IGRhdGEtPmJ1ZjsKKyAgICBhc2NpaV9sZW4gPSBkYXRhLT5sZW47CiAKICAgICBhc3NlcnQoYXNjaWlfbGVuID49IDApOwogCkBAIC0yNDYsMTAgKzI3Myw4IEBACiAgICAgYXNjaWlfbGVuLS07CiAKICAgICAvKiBBbGxvY2F0ZSB0aGUgYnVmZmVyICovCi0gICAgaWYgKCAocnY9UHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBiaW5fbGVuKSkgPT0gTlVMTCApIHsKLSAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGFzY2lpKTsKKyAgICBpZiAoIChydj1QeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGJpbl9sZW4pKSA9PSBOVUxMICkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQogICAgIGJpbl9kYXRhID0gKHVuc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FTX1NUUklORyhydik7CiAKICAgICBmb3IoIDsgYmluX2xlbiA+IDAgOyBhc2NpaV9sZW4tLSwgYXNjaWlfZGF0YSsrICkgewpAQCAtMjY5LDcgKzI5NCw2IEBACiAgICAgICAgICAgICAqLwogICAgICAgICAgICAgaWYgKCB0aGlzX2NoIDwgJyAnIHx8IHRoaXNfY2ggPiAoJyAnICsgNjQpKSB7CiAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKEVycm9yLCAiSWxsZWdhbCBjaGFyIik7Ci0gICAgICAgICAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGFzY2lpKTsKICAgICAgICAgICAgICAgICBQeV9ERUNSRUYocnYpOwogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgfQpAQCAtMjk4LDIxICszMjIsMjYgQEAKICAgICAgICAgaWYgKCB0aGlzX2NoICE9ICcgJyAmJiB0aGlzX2NoICE9ICcgJys2NCAmJgogICAgICAgICAgICAgIHRoaXNfY2ggIT0gJ1xuJyAmJiB0aGlzX2NoICE9ICdccicgKSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoRXJyb3IsICJUcmFpbGluZyBnYXJiYWdlIik7Ci0gICAgICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYXNjaWkpOwogICAgICAgICAgICAgUHlfREVDUkVGKHJ2KTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAgICAgfQotICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBhc2NpaSk7CiAgICAgcmV0dXJuIHJ2OwogfQogCi1QeURvY19TVFJWQVIoZG9jX2IyYV91dSwgIihiaW4pIC0+IGFzY2lpLiBVdWVuY29kZSBsaW5lIG9mIGRhdGEiKTsKKy8qW2NsaW5pYyBpbnB1dF0KK2JpbmFzY2lpLmIyYV91dQorCisgICAgZGF0YTogUHlfYnVmZmVyCisgICAgLworCitVdWVuY29kZSBsaW5lIG9mIGRhdGEuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1iaW5hc2NpaV9iMmFfdXUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorYmluYXNjaWlfYjJhX3V1X2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpkYXRhKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTE4MTAyMWI2OWJiOWE0MTQgaW5wdXQ9MDBmZGY0NThjZThiNDY1Yl0qLwogewotICAgIFB5X2J1ZmZlciBwYmluOwogICAgIHVuc2lnbmVkIGNoYXIgKmFzY2lpX2RhdGEsICpiaW5fZGF0YTsKICAgICBpbnQgbGVmdGJpdHMgPSAwOwogICAgIHVuc2lnbmVkIGNoYXIgdGhpc19jaDsKQEAgLTMyMCwyMiArMzQ5LDE3IEBACiAgICAgUHlPYmplY3QgKnJ2OwogICAgIFB5X3NzaXplX3QgYmluX2xlbjsKIAotICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqOmIyYV91dSIsICZwYmluKSApCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGJpbl9kYXRhID0gcGJpbi5idWY7Ci0gICAgYmluX2xlbiA9IHBiaW4ubGVuOworICAgIGJpbl9kYXRhID0gZGF0YS0+YnVmOworICAgIGJpbl9sZW4gPSBkYXRhLT5sZW47CiAgICAgaWYgKCBiaW5fbGVuID4gNDUgKSB7CiAgICAgICAgIC8qIFRoZSA0NSBpcyBhIGxpbWl0IHRoYXQgYXBwZWFycyBpbiBhbGwgdXVlbmNvZGUncyAqLwogICAgICAgICBQeUVycl9TZXRTdHJpbmcoRXJyb3IsICJBdCBtb3N0IDQ1IGJ5dGVzIGF0IG9uY2UiKTsKLSAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGJpbik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAogICAgIC8qIFdlJ3JlIGxhenkgYW5kIGFsbG9jYXRlIHRvIG11Y2ggKGZpeGVkIHVwIGxhdGVyKSAqLwotICAgIGlmICggKHJ2PVB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgMiArIChiaW5fbGVuKzIpLzMqNCkpID09IE5VTEwgKSB7Ci0gICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBiaW4pOworICAgIGlmICggKHJ2PVB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgMiArIChiaW5fbGVuKzIpLzMqNCkpID09IE5VTEwgKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9CiAgICAgYXNjaWlfZGF0YSA9ICh1bnNpZ25lZCBjaGFyICopUHlCeXRlc19BU19TVFJJTkcocnYpOwogCiAgICAgLyogU3RvcmUgdGhlIGxlbmd0aCAqLwpAQCAtMzYxLDEwICszODUsOCBAQAogICAgIGlmIChfUHlCeXRlc19SZXNpemUoJnJ2LAogICAgICAgICAgICAgICAgICAgICAgICAoYXNjaWlfZGF0YSAtCiAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgY2hhciAqKVB5Qnl0ZXNfQVNfU1RSSU5HKHJ2KSkpIDwgMCkgewotICAgICAgICBQeV9ERUNSRUYocnYpOwotICAgICAgICBydiA9IE5VTEw7CisgICAgICAgIFB5X0NMRUFSKHJ2KTsKICAgICB9Ci0gICAgUHlCdWZmZXJfUmVsZWFzZSgmcGJpbik7CiAgICAgcmV0dXJuIHJ2OwogfQogCkBAIC0zOTQsMTIgKzQxNiwxOSBAQAogICAgIHJldHVybiByZXQ7CiB9CiAKLVB5RG9jX1NUUlZBUihkb2NfYTJiX2Jhc2U2NCwgIihhc2NpaSkgLT4gYmluLiBEZWNvZGUgYSBsaW5lIG9mIGJhc2U2NCBkYXRhIik7CisvKltjbGluaWMgaW5wdXRdCitiaW5hc2NpaS5hMmJfYmFzZTY0CisKKyAgICBkYXRhOiBhc2NpaV9idWZmZXIKKyAgICAvCisKK0RlY29kZSBhIGxpbmUgb2YgYmFzZTY0IGRhdGEuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1iaW5hc2NpaV9hMmJfYmFzZTY0KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK2JpbmFzY2lpX2EyYl9iYXNlNjRfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmRhdGEpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9M2UzNTFiNzAyYmVkNTZkMiBpbnB1dD01ODcyYWNmNmUxY2FjMjQzXSovCiB7Ci0gICAgUHlfYnVmZmVyIHBhc2NpaTsKICAgICB1bnNpZ25lZCBjaGFyICphc2NpaV9kYXRhLCAqYmluX2RhdGE7CiAgICAgaW50IGxlZnRiaXRzID0gMDsKICAgICB1bnNpZ25lZCBjaGFyIHRoaXNfY2g7CkBAIC00MDgsMjUgKzQzNywxOSBAQAogICAgIFB5X3NzaXplX3QgYXNjaWlfbGVuLCBiaW5fbGVuOwogICAgIGludCBxdWFkX3BvcyA9IDA7CiAKLSAgICBpZiAoICFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPJjphMmJfYmFzZTY0IiwgYXNjaWlfYnVmZmVyX2NvbnZlcnRlciwgJnBhc2NpaSkgKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBhc2NpaV9kYXRhID0gcGFzY2lpLmJ1ZjsKLSAgICBhc2NpaV9sZW4gPSBwYXNjaWkubGVuOworICAgIGFzY2lpX2RhdGEgPSBkYXRhLT5idWY7CisgICAgYXNjaWlfbGVuID0gZGF0YS0+bGVuOwogCiAgICAgYXNzZXJ0KGFzY2lpX2xlbiA+PSAwKTsKIAotICAgIGlmIChhc2NpaV9sZW4gPiBQWV9TU0laRV9UX01BWCAtIDMpIHsKLSAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGFzY2lpKTsKKyAgICBpZiAoYXNjaWlfbGVuID4gUFlfU1NJWkVfVF9NQVggLSAzKQogICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKLSAgICB9CiAKICAgICBiaW5fbGVuID0gKChhc2NpaV9sZW4rMykvNCkqMzsgLyogVXBwZXIgYm91bmQsIGNvcnJlY3RlZCBsYXRlciAqLwogCiAgICAgLyogQWxsb2NhdGUgdGhlIGJ1ZmZlciAqLwotICAgIGlmICggKHJ2PVB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgYmluX2xlbikpID09IE5VTEwgKSB7Ci0gICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBhc2NpaSk7CisgICAgaWYgKCAocnY9UHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBiaW5fbGVuKSkgPT0gTlVMTCApCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KICAgICBiaW5fZGF0YSA9ICh1bnNpZ25lZCBjaGFyICopUHlCeXRlc19BU19TVFJJTkcocnYpOwogICAgIGJpbl9sZW4gPSAwOwogCkBAIC00NzksNyArNTAyLDYgQEAKICAgICB9CiAKICAgICBpZiAobGVmdGJpdHMgIT0gMCkgewotICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYXNjaWkpOwogICAgICAgICBQeUVycl9TZXRTdHJpbmcoRXJyb3IsICJJbmNvcnJlY3QgcGFkZGluZyIpOwogICAgICAgICBQeV9ERUNSRUYocnYpOwogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTQ5MSwyNCArNTEzLDMwIEBACiAgICAgKi8KICAgICBpZiAoYmluX2xlbiA+IDApIHsKICAgICAgICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZSgmcnYsIGJpbl9sZW4pIDwgMCkgewotICAgICAgICAgICAgUHlfREVDUkVGKHJ2KTsKLSAgICAgICAgICAgIHJ2ID0gTlVMTDsKKyAgICAgICAgICAgIFB5X0NMRUFSKHJ2KTsKICAgICAgICAgfQogICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgUHlfREVDUkVGKHJ2KTsKICAgICAgICAgcnYgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKCIiLCAwKTsKICAgICB9Ci0gICAgUHlCdWZmZXJfUmVsZWFzZSgmcGFzY2lpKTsKICAgICByZXR1cm4gcnY7CiB9CiAKLVB5RG9jX1NUUlZBUihkb2NfYjJhX2Jhc2U2NCwgIihiaW4pIC0+IGFzY2lpLiBCYXNlNjQtY29kZSBsaW5lIG9mIGRhdGEiKTsKKworLypbY2xpbmljIGlucHV0XQorYmluYXNjaWkuYjJhX2Jhc2U2NAorCisgICAgZGF0YTogUHlfYnVmZmVyCisgICAgLworCitCYXNlNjQtY29kZSBsaW5lIG9mIGRhdGEuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1iaW5hc2NpaV9iMmFfYmFzZTY0KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK2JpbmFzY2lpX2IyYV9iYXNlNjRfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmRhdGEpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9M2NkNjFmYmVlMjkxMzI4NSBpbnB1dD0xNGVjNGU0NzM3MTE3NGE5XSovCiB7Ci0gICAgUHlfYnVmZmVyIHBidWY7CiAgICAgdW5zaWduZWQgY2hhciAqYXNjaWlfZGF0YSwgKmJpbl9kYXRhOwogICAgIGludCBsZWZ0Yml0cyA9IDA7CiAgICAgdW5zaWduZWQgY2hhciB0aGlzX2NoOwpAQCAtNTE2LDI2ICs1NDQsMjEgQEAKICAgICBQeU9iamVjdCAqcnY7CiAgICAgUHlfc3NpemVfdCBiaW5fbGVuOwogCi0gICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAieSo6YjJhX2Jhc2U2NCIsICZwYnVmKSApCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGJpbl9kYXRhID0gcGJ1Zi5idWY7Ci0gICAgYmluX2xlbiA9IHBidWYubGVuOworICAgIGJpbl9kYXRhID0gZGF0YS0+YnVmOworICAgIGJpbl9sZW4gPSBkYXRhLT5sZW47CiAKICAgICBhc3NlcnQoYmluX2xlbiA+PSAwKTsKIAogICAgIGlmICggYmluX2xlbiA+IEJBU0U2NF9NQVhCSU4gKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhFcnJvciwgIlRvbyBtdWNoIGRhdGEgZm9yIGJhc2U2NCBsaW5lIik7Ci0gICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBidWYpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKICAgICAvKiBXZSdyZSBsYXp5IGFuZCBhbGxvY2F0ZSB0b28gbXVjaCAoZml4ZWQgdXAgbGF0ZXIpLgogICAgICAgICIrMyIgbGVhdmVzIHJvb20gZm9yIHVwIHRvIHR3byBwYWQgY2hhcmFjdGVycyBhbmQgYSB0cmFpbGluZwogICAgICAgIG5ld2xpbmUuICBOb3RlIHRoYXQgJ2InIGdldHMgZW5jb2RlZCBhcyAnWWc9PVxuJyAoMSBpbiwgNSBvdXQpLiAqLwotICAgIGlmICggKHJ2PVB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgYmluX2xlbioyICsgMykpID09IE5VTEwgKSB7Ci0gICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBidWYpOworICAgIGlmICggKHJ2PVB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgYmluX2xlbioyICsgMykpID09IE5VTEwgKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9CiAgICAgYXNjaWlfZGF0YSA9ICh1bnNpZ25lZCBjaGFyICopUHlCeXRlc19BU19TVFJJTkcocnYpOwogCiAgICAgZm9yKCA7IGJpbl9sZW4gPiAwIDsgYmluX2xlbi0tLCBiaW5fZGF0YSsrICkgewpAQCAtNTYzLDE5ICs1ODYsMjQgQEAKICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZydiwKICAgICAgICAgICAgICAgICAgICAgICAgKGFzY2lpX2RhdGEgLQogICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FTX1NUUklORyhydikpKSA8IDApIHsKLSAgICAgICAgUHlfREVDUkVGKHJ2KTsKLSAgICAgICAgcnYgPSBOVUxMOworICAgICAgICBQeV9DTEVBUihydik7CiAgICAgfQotICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBidWYpOwogICAgIHJldHVybiBydjsKIH0KIAotUHlEb2NfU1RSVkFSKGRvY19hMmJfaHF4LCAiYXNjaWkgLT4gYmluLCBkb25lLiBEZWNvZGUgLmhxeCBjb2RpbmciKTsKKy8qW2NsaW5pYyBpbnB1dF0KK2JpbmFzY2lpLmEyYl9ocXgKKworICAgIGRhdGE6IGFzY2lpX2J1ZmZlcgorICAgIC8KKworRGVjb2RlIC5ocXggY29kaW5nLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotYmluYXNjaWlfYTJiX2hxeChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitiaW5hc2NpaV9hMmJfaHF4X2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpkYXRhKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTYwYmNkYmJkMjhiMTA1Y2QgaW5wdXQ9MGQ5MTRjNjgwZTBlZWQ1NV0qLwogewotICAgIFB5X2J1ZmZlciBwYXNjaWk7CiAgICAgdW5zaWduZWQgY2hhciAqYXNjaWlfZGF0YSwgKmJpbl9kYXRhOwogICAgIGludCBsZWZ0Yml0cyA9IDA7CiAgICAgdW5zaWduZWQgY2hhciB0aGlzX2NoOwpAQCAtNTg0LDI1ICs2MTIsMTkgQEAKICAgICBQeV9zc2l6ZV90IGxlbjsKICAgICBpbnQgZG9uZSA9IDA7CiAKLSAgICBpZiAoICFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPJjphMmJfaHF4IiwgYXNjaWlfYnVmZmVyX2NvbnZlcnRlciwgJnBhc2NpaSkgKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBhc2NpaV9kYXRhID0gcGFzY2lpLmJ1ZjsKLSAgICBsZW4gPSBwYXNjaWkubGVuOworICAgIGFzY2lpX2RhdGEgPSBkYXRhLT5idWY7CisgICAgbGVuID0gZGF0YS0+bGVuOwogCiAgICAgYXNzZXJ0KGxlbiA+PSAwKTsKIAotICAgIGlmIChsZW4gPiBQWV9TU0laRV9UX01BWCAtIDIpIHsKLSAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGFzY2lpKTsKKyAgICBpZiAobGVuID4gUFlfU1NJWkVfVF9NQVggLSAyKQogICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKLSAgICB9CiAKICAgICAvKiBBbGxvY2F0ZSBhIHN0cmluZyB0aGF0IGlzIHRvbyBiaWcgKGZpeGVkIGxhdGVyKQogICAgICAgIEFkZCB0d28gdG8gdGhlIGluaXRpYWwgbGVuZ3RoIHRvIHByZXZlbnQgaW50ZXJuaW5nIHdoaWNoCiAgICAgICAgd291bGQgcHJlY2x1ZGUgc3Vic2VxdWVudCByZXNpemluZy4gICovCi0gICAgaWYgKCAocnY9UHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBsZW4rMikpID09IE5VTEwgKSB7Ci0gICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBhc2NpaSk7CisgICAgaWYgKCAocnY9UHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBsZW4rMikpID09IE5VTEwgKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9CiAgICAgYmluX2RhdGEgPSAodW5zaWduZWQgY2hhciAqKVB5Qnl0ZXNfQVNfU1RSSU5HKHJ2KTsKIAogICAgIGZvciggOyBsZW4gPiAwIDsgbGVuLS0sIGFzY2lpX2RhdGErKyApIHsKQEAgLTYxMiw3ICs2MzQsNiBAQAogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGlmICggdGhpc19jaCA9PSBGQUlMICkgewogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKEVycm9yLCAiSWxsZWdhbCBjaGFyIik7Ci0gICAgICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYXNjaWkpOwogICAgICAgICAgICAgUHlfREVDUkVGKHJ2KTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CkBAIC02MzUsNTUgKzY1Niw1MyBAQAogICAgIGlmICggbGVmdGJpdHMgJiYgIWRvbmUgKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhJbmNvbXBsZXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgIlN0cmluZyBoYXMgaW5jb21wbGV0ZSBudW1iZXIgb2YgYnl0ZXMiKTsKLSAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGFzY2lpKTsKICAgICAgICAgUHlfREVDUkVGKHJ2KTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIGlmIChfUHlCeXRlc19SZXNpemUoJnJ2LAogICAgICAgICAgICAgICAgICAgICAgICAoYmluX2RhdGEgLQogICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FTX1NUUklORyhydikpKSA8IDApIHsKLSAgICAgICAgUHlfREVDUkVGKHJ2KTsKLSAgICAgICAgcnYgPSBOVUxMOworICAgICAgICBQeV9DTEVBUihydik7CiAgICAgfQogICAgIGlmIChydikgewogICAgICAgICBQeU9iamVjdCAqcnJ2ID0gUHlfQnVpbGRWYWx1ZSgiT2kiLCBydiwgZG9uZSk7Ci0gICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBhc2NpaSk7CiAgICAgICAgIFB5X0RFQ1JFRihydik7CiAgICAgICAgIHJldHVybiBycnY7CiAgICAgfQogCi0gICAgUHlCdWZmZXJfUmVsZWFzZSgmcGFzY2lpKTsKICAgICByZXR1cm4gTlVMTDsKIH0KIAotUHlEb2NfU1RSVkFSKGRvY19ybGVjb2RlX2hxeCwgIkJpbmhleCBSTEUtY29kZSBiaW5hcnkgZGF0YSIpOworCisvKltjbGluaWMgaW5wdXRdCitiaW5hc2NpaS5ybGVjb2RlX2hxeAorCisgICAgZGF0YTogUHlfYnVmZmVyCisgICAgLworCitCaW5oZXggUkxFLWNvZGUgYmluYXJ5IGRhdGEuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1iaW5hc2NpaV9ybGVjb2RlX2hxeChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitiaW5hc2NpaV9ybGVjb2RlX2hxeF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZGF0YSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0wOTA1ZGEzNDRkYmYwNjQ4IGlucHV0PWUxZjE3MTI0NDdhODJiMDldKi8KIHsKLSAgICBQeV9idWZmZXIgcGJ1ZjsKICAgICB1bnNpZ25lZCBjaGFyICppbl9kYXRhLCAqb3V0X2RhdGE7CiAgICAgUHlPYmplY3QgKnJ2OwogICAgIHVuc2lnbmVkIGNoYXIgY2g7CiAgICAgUHlfc3NpemVfdCBpbiwgaW5lbmQsIGxlbjsKIAotICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqOnJsZWNvZGVfaHF4IiwgJnBidWYpICkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaW5fZGF0YSA9IHBidWYuYnVmOwotICAgIGxlbiA9IHBidWYubGVuOworICAgIGluX2RhdGEgPSBkYXRhLT5idWY7CisgICAgbGVuID0gZGF0YS0+bGVuOwogCiAgICAgYXNzZXJ0KGxlbiA+PSAwKTsKIAotICAgIGlmIChsZW4gPiBQWV9TU0laRV9UX01BWCAvIDIgLSAyKSB7Ci0gICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBidWYpOworICAgIGlmIChsZW4gPiBQWV9TU0laRV9UX01BWCAvIDIgLSAyKQogICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKLSAgICB9CiAKICAgICAvKiBXb3JzdCBjYXNlOiBvdXRwdXQgaXMgdHdpY2UgYXMgYmlnIGFzIGlucHV0IChmaXhlZCBsYXRlcikgKi8KLSAgICBpZiAoIChydj1QeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGxlbioyKzIpKSA9PSBOVUxMICkgewotICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYnVmKTsKKyAgICBpZiAoIChydj1QeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGxlbioyKzIpKSA9PSBOVUxMICkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQogICAgIG91dF9kYXRhID0gKHVuc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FTX1NUUklORyhydik7CiAKICAgICBmb3IoIGluPTA7IGluPGxlbjsgaW4rKykgewpAQCAtNzEzLDE5ICs3MzIsMjUgQEAKICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZydiwKICAgICAgICAgICAgICAgICAgICAgICAgKG91dF9kYXRhIC0KICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyICopUHlCeXRlc19BU19TVFJJTkcocnYpKSkgPCAwKSB7Ci0gICAgICAgIFB5X0RFQ1JFRihydik7Ci0gICAgICAgIHJ2ID0gTlVMTDsKKyAgICAgICAgUHlfQ0xFQVIocnYpOwogICAgIH0KLSAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYnVmKTsKICAgICByZXR1cm4gcnY7CiB9CiAKLVB5RG9jX1NUUlZBUihkb2NfYjJhX2hxeCwgIkVuY29kZSAuaHF4IGRhdGEiKTsKKworLypbY2xpbmljIGlucHV0XQorYmluYXNjaWkuYjJhX2hxeAorCisgICAgZGF0YTogUHlfYnVmZmVyCisgICAgLworCitFbmNvZGUgLmhxeCBkYXRhLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotYmluYXNjaWlfYjJhX2hxeChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitiaW5hc2NpaV9iMmFfaHF4X2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpkYXRhKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTVhOTg3ODEwZDVlM2NkYmIgaW5wdXQ9OTU5NmViZTAxOWZlMTJiYV0qLwogewotICAgIFB5X2J1ZmZlciBwYmluOwogICAgIHVuc2lnbmVkIGNoYXIgKmFzY2lpX2RhdGEsICpiaW5fZGF0YTsKICAgICBpbnQgbGVmdGJpdHMgPSAwOwogICAgIHVuc2lnbmVkIGNoYXIgdGhpc19jaDsKQEAgLTczMywyMyArNzU4LDE3IEBACiAgICAgUHlPYmplY3QgKnJ2OwogICAgIFB5X3NzaXplX3QgbGVuOwogCi0gICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAieSo6YjJhX2hxeCIsICZwYmluKSApCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGJpbl9kYXRhID0gcGJpbi5idWY7Ci0gICAgbGVuID0gcGJpbi5sZW47CisgICAgYmluX2RhdGEgPSBkYXRhLT5idWY7CisgICAgbGVuID0gZGF0YS0+bGVuOwogCiAgICAgYXNzZXJ0KGxlbiA+PSAwKTsKIAotICAgIGlmIChsZW4gPiBQWV9TU0laRV9UX01BWCAvIDIgLSAyKSB7Ci0gICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBiaW4pOworICAgIGlmIChsZW4gPiBQWV9TU0laRV9UX01BWCAvIDIgLSAyKQogICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKLSAgICB9CiAKICAgICAvKiBBbGxvY2F0ZSBhIGJ1ZmZlciB0aGF0IGlzIGF0IGxlYXN0IGxhcmdlIGVub3VnaCAqLwotICAgIGlmICggKHJ2PVB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgbGVuKjIrMikpID09IE5VTEwgKSB7Ci0gICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBiaW4pOworICAgIGlmICggKHJ2PVB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgbGVuKjIrMikpID09IE5VTEwgKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9CiAgICAgYXNjaWlfZGF0YSA9ICh1bnNpZ25lZCBjaGFyICopUHlCeXRlc19BU19TVFJJTkcocnYpOwogCiAgICAgZm9yKCA7IGxlbiA+IDAgOyBsZW4tLSwgYmluX2RhdGErKyApIHsKQEAgLTc3MCw0NyArNzg5LDQ1IEBACiAgICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZSgmcnYsCiAgICAgICAgICAgICAgICAgICAgICAgIChhc2NpaV9kYXRhIC0KICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyICopUHlCeXRlc19BU19TVFJJTkcocnYpKSkgPCAwKSB7Ci0gICAgICAgIFB5X0RFQ1JFRihydik7Ci0gICAgICAgIHJ2ID0gTlVMTDsKKyAgICAgICAgUHlfQ0xFQVIocnYpOwogICAgIH0KLSAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYmluKTsKICAgICByZXR1cm4gcnY7CiB9CiAKLVB5RG9jX1NUUlZBUihkb2NfcmxlZGVjb2RlX2hxeCwgIkRlY29kZSBoZXhiaW4gUkxFLWNvZGVkIHN0cmluZyIpOworCisvKltjbGluaWMgaW5wdXRdCitiaW5hc2NpaS5ybGVkZWNvZGVfaHF4CisKKyAgICBkYXRhOiBQeV9idWZmZXIKKyAgICAvCisKK0RlY29kZSBoZXhiaW4gUkxFLWNvZGVkIHN0cmluZy4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLWJpbmFzY2lpX3JsZWRlY29kZV9ocXgoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorYmluYXNjaWlfcmxlZGVjb2RlX2hxeF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZGF0YSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1mN2FmZDg5Yjc4OTk0NmFiIGlucHV0PTU0Y2RkNDlmYzAxNDQwMmNdKi8KIHsKLSAgICBQeV9idWZmZXIgcGluOwogICAgIHVuc2lnbmVkIGNoYXIgKmluX2RhdGEsICpvdXRfZGF0YTsKICAgICB1bnNpZ25lZCBjaGFyIGluX2J5dGUsIGluX3JlcGVhdDsKICAgICBQeU9iamVjdCAqcnY7CiAgICAgUHlfc3NpemVfdCBpbl9sZW4sIG91dF9sZW4sIG91dF9sZW5fbGVmdDsKIAotICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqOnJsZWRlY29kZV9ocXgiLCAmcGluKSApCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGluX2RhdGEgPSBwaW4uYnVmOwotICAgIGluX2xlbiA9IHBpbi5sZW47CisgICAgaW5fZGF0YSA9IGRhdGEtPmJ1ZjsKKyAgICBpbl9sZW4gPSBkYXRhLT5sZW47CiAKICAgICBhc3NlcnQoaW5fbGVuID49IDApOwogCiAgICAgLyogRW1wdHkgc3RyaW5nIGlzIGEgc3BlY2lhbCBjYXNlICovCi0gICAgaWYgKCBpbl9sZW4gPT0gMCApIHsKLSAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGluKTsKKyAgICBpZiAoIGluX2xlbiA9PSAwICkKICAgICAgICAgcmV0dXJuIFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoIiIsIDApOwotICAgIH0KLSAgICBlbHNlIGlmIChpbl9sZW4gPiBQWV9TU0laRV9UX01BWCAvIDIpIHsKLSAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGluKTsKKyAgICBlbHNlIGlmIChpbl9sZW4gPiBQWV9TU0laRV9UX01BWCAvIDIpCiAgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOwotICAgIH0KIAogICAgIC8qIEFsbG9jYXRlIGEgYnVmZmVyIG9mIHJlYXNvbmFibGUgc2l6ZS4gUmVzaXplZCB3aGVuIG5lZWRlZCAqLwogICAgIG91dF9sZW4gPSBpbl9sZW4qMjsKLSAgICBpZiAoIChydj1QeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIG91dF9sZW4pKSA9PSBOVUxMICkgewotICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwaW4pOworICAgIGlmICggKHJ2PVB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgb3V0X2xlbikpID09IE5VTEwgKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9CiAgICAgb3V0X2xlbl9sZWZ0ID0gb3V0X2xlbjsKICAgICBvdXRfZGF0YSA9ICh1bnNpZ25lZCBjaGFyICopUHlCeXRlc19BU19TVFJJTkcocnYpOwogCkBAIC04MjMsNyArODQwLDYgQEAKICAgICAgICAgICAgICBpZiAoIC0taW5fbGVuIDwgMCApIHsgXAogICAgICAgICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoSW5jb21wbGV0ZSwgIiIpOyBcCiAgICAgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihydik7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGluKTsgXAogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsgXAogICAgICAgICAgICAgIH0gXAogICAgICAgICAgICAgIGIgPSAqaW5fZGF0YSsrOyBcCkBAIC04MzQsNyArODUwLDcgQEAKICAgICAgICAgICAgICBpZiAoIC0tb3V0X2xlbl9sZWZ0IDwgMCApIHsgXAogICAgICAgICAgICAgICAgICAgICAgIGlmICggb3V0X2xlbiA+IFBZX1NTSVpFX1RfTUFYIC8gMikgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7IFwKICAgICAgICAgICAgICAgICAgICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZydiwgMipvdXRfbGVuKSA8IDApIFwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsgUHlfREVDUkVGKHJ2KTsgUHlCdWZmZXJfUmVsZWFzZSgmcGluKTsgcmV0dXJuIE5VTEw7IH0gXAorICAgICAgICAgICAgICAgICAgICAgICAgeyBQeV9YREVDUkVGKHJ2KTsgcmV0dXJuIE5VTEw7IH0gXAogICAgICAgICAgICAgICAgICAgICAgIG91dF9kYXRhID0gKHVuc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FTX1NUUklORyhydikgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgb3V0X2xlbjsgXAogICAgICAgICAgICAgICAgICAgICAgIG91dF9sZW5fbGVmdCA9IG91dF9sZW4tMTsgXApAQCAtODU2LDcgKzg3Miw2IEBACiAgICAgICAgICAgICAqKiBvZiB0aGUgc3RyaW5nIG9ubHkpLiBUaGlzIGlzIGEgcHJvZ3JhbW1lciBlcnJvci4KICAgICAgICAgICAgICovCiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoRXJyb3IsICJPcnBoYW5lZCBSTEUgY29kZSBhdCBzdGFydCIpOwotICAgICAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGluKTsKICAgICAgICAgICAgIFB5X0RFQ1JFRihydik7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQpAQCAtODg3LDYwICs5MDIsNDEgQEAKICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZydiwKICAgICAgICAgICAgICAgICAgICAgICAgKG91dF9kYXRhIC0KICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyICopUHlCeXRlc19BU19TVFJJTkcocnYpKSkgPCAwKSB7Ci0gICAgICAgIFB5X0RFQ1JFRihydik7Ci0gICAgICAgIHJ2ID0gTlVMTDsKKyAgICAgICAgUHlfQ0xFQVIocnYpOwogICAgIH0KLSAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwaW4pOwogICAgIHJldHVybiBydjsKIH0KIAotUHlEb2NfU1RSVkFSKGRvY19jcmNfaHF4LAotIihkYXRhLCBvbGRjcmMpIC0+IG5ld2NyYy4gQ29tcHV0ZSBocXggQ1JDIGluY3JlbWVudGFsbHkiKTsKIAotc3RhdGljIFB5T2JqZWN0ICoKLWJpbmFzY2lpX2NyY19ocXgoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorLypbY2xpbmljIGlucHV0XQorYmluYXNjaWkuY3JjX2hxeCAtPiB1bnNpZ25lZF9pbnQKKworICAgIGRhdGE6IFB5X2J1ZmZlcgorICAgIGNyYzogdW5zaWduZWRfaW50KGJpdHdpc2U9VHJ1ZSkKKyAgICAvCisKK0NvbXB1dGUgaHF4IENSQyBpbmNyZW1lbnRhbGx5LgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitzdGF0aWMgdW5zaWduZWQgaW50CitiaW5hc2NpaV9jcmNfaHF4X2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpkYXRhLCB1bnNpZ25lZCBpbnQgY3JjKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTE2N2MyZGFjNjI2MjU3MTcgaW5wdXQ9YWRkOGM1MzcxMmNjY2VkYV0qLwogewotICAgIFB5X2J1ZmZlciBwaW47CiAgICAgdW5zaWduZWQgY2hhciAqYmluX2RhdGE7Ci0gICAgdW5zaWduZWQgaW50IGNyYzsKICAgICBQeV9zc2l6ZV90IGxlbjsKIAotICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqaTpjcmNfaHF4IiwgJnBpbiwgJmNyYykgKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBiaW5fZGF0YSA9IHBpbi5idWY7Ci0gICAgbGVuID0gcGluLmxlbjsKKyAgICBjcmMgJj0gMHhmZmZmOworICAgIGJpbl9kYXRhID0gZGF0YS0+YnVmOworICAgIGxlbiA9IGRhdGEtPmxlbjsKIAogICAgIHdoaWxlKGxlbi0tID4gMCkgewotICAgICAgICBjcmM9KChjcmM8PDgpJjB4ZmYwMCleY3JjdGFiX2hxeFsoKGNyYz4+OCkmMHhmZileKmJpbl9kYXRhKytdOworICAgICAgICBjcmMgPSAoKGNyYzw8OCkmMHhmZjAwKSBeIGNyY3RhYl9ocXhbKGNyYz4+OCleKmJpbl9kYXRhKytdOwogICAgIH0KIAotICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBpbik7Ci0gICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoImkiLCBjcmMpOworICAgIHJldHVybiBjcmM7CiB9CiAKLVB5RG9jX1NUUlZBUihkb2NfY3JjMzIsCi0iKGRhdGEsIG9sZGNyYyA9IDApIC0+IG5ld2NyYy4gQ29tcHV0ZSBDUkMtMzIgaW5jcmVtZW50YWxseSIpOwotCi0jaWZkZWYgVVNFX1pMSUJfQ1JDMzIKLS8qIFRoaXMgd2FzIHRha2VuIGZyb20gemxpYm1vZHVsZS5jIFB5WmxpYl9jcmMzMiAoYnV0IGlzIFBZX1NTSVpFX1RfQ0xFQU4pICovCi1zdGF0aWMgUHlPYmplY3QgKgotYmluYXNjaWlfY3JjMzIoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQotewotICAgIHVuc2lnbmVkIGludCBjcmMzMnZhbCA9IDA7ICAvKiBjcmMzMigwTCwgWl9OVUxMLCAwKSAqLwotICAgIFB5X2J1ZmZlciBwYnVmOwotICAgIEJ5dGUgKmJ1ZjsKLSAgICBQeV9zc2l6ZV90IGxlbjsKLSAgICBpbnQgc2lnbmVkX3ZhbDsKLQotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAieSp8STpjcmMzMiIsICZwYnVmLCAmY3JjMzJ2YWwpKQotICAgIHJldHVybiBOVUxMOwotICAgIGJ1ZiA9IChCeXRlKilwYnVmLmJ1ZjsKLSAgICBsZW4gPSBwYnVmLmxlbjsKLSAgICBzaWduZWRfdmFsID0gY3JjMzIoY3JjMzJ2YWwsIGJ1ZiwgbGVuKTsKLSAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYnVmKTsKLSAgICByZXR1cm4gUHlMb25nX0Zyb21VbnNpZ25lZExvbmcoc2lnbmVkX3ZhbCAmIDB4ZmZmZmZmZmZVKTsKLX0KLSNlbHNlICAvKiBVU0VfWkxJQl9DUkMzMiAqLworI2lmbmRlZiBVU0VfWkxJQl9DUkMzMgogLyogIENyYyAtIDMyIEJJVCBBTlNJIFgzLjY2IENSQyBjaGVja3N1bSBmaWxlcwogICAgIEFsc28ga25vd24gYXM6IElTTyAzMzA3CiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqfApAQCAtMTA1OCwyMCArMTA1NCw0MiBAQAogMHg1ZDY4MWIwMlUsIDB4MmE2ZjJiOTRVLCAweGI0MGJiZTM3VSwgMHhjMzBjOGVhMVUsIDB4NWEwNWRmMWJVLAogMHgyZDAyZWY4ZFUKIH07CisjZW5kaWYgIC8qIFVTRV9aTElCX0NSQzMyICovCiAKLXN0YXRpYyBQeU9iamVjdCAqCi1iaW5hc2NpaV9jcmMzMihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCisvKltjbGluaWMgaW5wdXRdCitiaW5hc2NpaS5jcmMzMiAtPiB1bnNpZ25lZF9pbnQKKworICAgIGRhdGE6IFB5X2J1ZmZlcgorICAgIGNyYzogdW5zaWduZWRfaW50KGJpdHdpc2U9VHJ1ZSkgPSAwCisgICAgLworCitDb21wdXRlIENSQy0zMiBpbmNyZW1lbnRhbGx5LgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitzdGF0aWMgdW5zaWduZWQgaW50CitiaW5hc2NpaV9jcmMzMl9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZGF0YSwgdW5zaWduZWQgaW50IGNyYykKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD02MjBhOTYxNjQzMzkzYzRmIGlucHV0PWJiZTM0MGJjOTlkMjVhYThdKi8KKworI2lmZGVmIFVTRV9aTElCX0NSQzMyCisvKiBUaGlzIHdhcyB0YWtlbiBmcm9tIHpsaWJtb2R1bGUuYyBQeVpsaWJfY3JjMzIgKGJ1dCBpcyBQWV9TU0laRV9UX0NMRUFOKSAqLworeworICAgIEJ5dGUgKmJ1ZjsKKyAgICBQeV9zc2l6ZV90IGxlbjsKKyAgICBpbnQgc2lnbmVkX3ZhbDsKKworICAgIGJ1ZiA9IChCeXRlKilkYXRhLT5idWY7CisgICAgbGVuID0gZGF0YS0+bGVuOworICAgIHNpZ25lZF92YWwgPSBjcmMzMihjcmMsIGJ1ZiwgbGVuKTsKKyAgICByZXR1cm4gKHVuc2lnbmVkIGludClzaWduZWRfdmFsICYgMHhmZmZmZmZmZlU7Cit9CisjZWxzZSAgLyogVVNFX1pMSUJfQ1JDMzIgKi8KIHsgLyogQnkgSmltIEFobHN0cm9tOyBBbGwgcmlnaHRzIHRyYW5zZmVycmVkIHRvIENOUkkgKi8KLSAgICBQeV9idWZmZXIgcGJpbjsKICAgICB1bnNpZ25lZCBjaGFyICpiaW5fZGF0YTsKLSAgICB1bnNpZ25lZCBpbnQgY3JjID0gMDsgICAgICAgLyogaW5pdGlhbCB2YWx1ZSBvZiBDUkMgKi8KICAgICBQeV9zc2l6ZV90IGxlbjsKICAgICB1bnNpZ25lZCBpbnQgcmVzdWx0OwogCi0gICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAieSp8STpjcmMzMiIsICZwYmluLCAmY3JjKSApCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGJpbl9kYXRhID0gcGJpbi5idWY7Ci0gICAgbGVuID0gcGJpbi5sZW47CisgICAgYmluX2RhdGEgPSBkYXRhLT5idWY7CisgICAgbGVuID0gZGF0YS0+bGVuOwogCiAgICAgY3JjID0gfiBjcmM7CiAgICAgd2hpbGUgKGxlbi0tID4gMCkgewpAQCAtMTA4MCwzOCArMTA5OCw0MiBAQAogICAgIH0KIAogICAgIHJlc3VsdCA9IChjcmMgXiAweEZGRkZGRkZGKTsKLSAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYmluKTsKLSAgICByZXR1cm4gUHlMb25nX0Zyb21VbnNpZ25lZExvbmcocmVzdWx0ICYgMHhmZmZmZmZmZik7CisgICAgcmV0dXJuIHJlc3VsdCAmIDB4ZmZmZmZmZmY7CiB9CiAjZW5kaWYgIC8qIFVTRV9aTElCX0NSQzMyICovCiAKKy8qW2NsaW5pYyBpbnB1dF0KK2JpbmFzY2lpLmIyYV9oZXgKKworICAgIGRhdGE6IFB5X2J1ZmZlcgorICAgIC8KKworSGV4YWRlY2ltYWwgcmVwcmVzZW50YXRpb24gb2YgYmluYXJ5IGRhdGEuCisKK1RoZSByZXR1cm4gdmFsdWUgaXMgYSBieXRlcyBvYmplY3QuICBUaGlzIGZ1bmN0aW9uIGlzIGFsc28KK2F2YWlsYWJsZSBhcyAiaGV4bGlmeSgpIi4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLWJpbmFzY2lpX2hleGxpZnkoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorYmluYXNjaWlfYjJhX2hleF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZGF0YSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0xNzkzMTg5MjJjMmY4ZmRhIGlucHV0PTk2NDIzY2ZhMjk5ZmYzYjFdKi8KIHsKLSAgICBQeV9idWZmZXIgcGFyZzsKICAgICBjaGFyKiBhcmdidWY7CiAgICAgUHlfc3NpemVfdCBhcmdsZW47CiAgICAgUHlPYmplY3QgKnJldHZhbDsKICAgICBjaGFyKiByZXRidWY7CiAgICAgUHlfc3NpemVfdCBpLCBqOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ5KjpiMmFfaGV4IiwgJnBhcmcpKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBhcmdidWYgPSBwYXJnLmJ1ZjsKLSAgICBhcmdsZW4gPSBwYXJnLmxlbjsKKyAgICBhcmdidWYgPSBkYXRhLT5idWY7CisgICAgYXJnbGVuID0gZGF0YS0+bGVuOwogCiAgICAgYXNzZXJ0KGFyZ2xlbiA+PSAwKTsKLSAgICBpZiAoYXJnbGVuID4gUFlfU1NJWkVfVF9NQVggLyAyKSB7Ci0gICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBhcmcpOworICAgIGlmIChhcmdsZW4gPiBQWV9TU0laRV9UX01BWCAvIDIpCiAgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOwotICAgIH0KIAogICAgIHJldHZhbCA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgYXJnbGVuKjIpOwotICAgIGlmICghcmV0dmFsKSB7Ci0gICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBhcmcpOworICAgIGlmICghcmV0dmFsKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9CiAgICAgcmV0YnVmID0gUHlCeXRlc19BU19TVFJJTkcocmV0dmFsKTsKIAogICAgIC8qIG1ha2UgaGV4IHZlcnNpb24gb2Ygc3RyaW5nLCB0YWtlbiBmcm9tIHNoYW1vZHVsZS5jICovCkBAIC0xMTIyLDE2ICsxMTQ0LDIzIEBACiAgICAgICAgIGMgPSBhcmdidWZbaV0gJiAweGY7CiAgICAgICAgIHJldGJ1ZltqKytdID0gUHlfaGV4ZGlnaXRzW2NdOwogICAgIH0KLSAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYXJnKTsKICAgICByZXR1cm4gcmV0dmFsOwogfQogCi1QeURvY19TVFJWQVIoZG9jX2hleGxpZnksCi0iYjJhX2hleChkYXRhKSAtPiBzOyBIZXhhZGVjaW1hbCByZXByZXNlbnRhdGlvbiBvZiBiaW5hcnkgZGF0YS5cblwKLVxuXAotVGhlIHJldHVybiB2YWx1ZSBpcyBhIGJ5dGVzIG9iamVjdC4gIFRoaXMgZnVuY3Rpb24gaXMgYWxzb1xuXAotYXZhaWxhYmxlIGFzIFwiaGV4bGlmeSgpXCIuIik7CisvKltjbGluaWMgaW5wdXRdCitiaW5hc2NpaS5oZXhsaWZ5ID0gYmluYXNjaWkuYjJhX2hleAogCitIZXhhZGVjaW1hbCByZXByZXNlbnRhdGlvbiBvZiBiaW5hcnkgZGF0YS4KKworVGhlIHJldHVybiB2YWx1ZSBpcyBhIGJ5dGVzIG9iamVjdC4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworc3RhdGljIFB5T2JqZWN0ICoKK2JpbmFzY2lpX2hleGxpZnlfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmRhdGEpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NjA5ODQ0MDA5MWZiNjFkYyBpbnB1dD0yZTNhZmFlN2YwODNmMDYxXSovCit7CisgICAgcmV0dXJuIGJpbmFzY2lpX2IyYV9oZXhfaW1wbChtb2R1bGUsIGRhdGEpOworfQogCiBzdGF0aWMgaW50CiB0b19pbnQoaW50IGMpCkBAIC0xMTQ4LDIwICsxMTc3LDMwIEBACiB9CiAKIAorLypbY2xpbmljIGlucHV0XQorYmluYXNjaWkuYTJiX2hleAorCisgICAgaGV4c3RyOiBhc2NpaV9idWZmZXIKKyAgICAvCisKK0JpbmFyeSBkYXRhIG9mIGhleGFkZWNpbWFsIHJlcHJlc2VudGF0aW9uLgorCitoZXhzdHIgbXVzdCBjb250YWluIGFuIGV2ZW4gbnVtYmVyIG9mIGhleCBkaWdpdHMgKHVwcGVyIG9yIGxvd2VyIGNhc2UpLgorVGhpcyBmdW5jdGlvbiBpcyBhbHNvIGF2YWlsYWJsZSBhcyAidW5oZXhsaWZ5KCkiLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotYmluYXNjaWlfdW5oZXhsaWZ5KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK2JpbmFzY2lpX2EyYl9oZXhfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmhleHN0cikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kNjFkYTQ1MmI1YzZkMjkwIGlucHV0PTllMWU3ZjJmOTRkYjI0ZmRdKi8KIHsKLSAgICBQeV9idWZmZXIgcGFyZzsKICAgICBjaGFyKiBhcmdidWY7CiAgICAgUHlfc3NpemVfdCBhcmdsZW47CiAgICAgUHlPYmplY3QgKnJldHZhbDsKICAgICBjaGFyKiByZXRidWY7CiAgICAgUHlfc3NpemVfdCBpLCBqOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPJjphMmJfaGV4IiwgYXNjaWlfYnVmZmVyX2NvbnZlcnRlciwgJnBhcmcpKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBhcmdidWYgPSBwYXJnLmJ1ZjsKLSAgICBhcmdsZW4gPSBwYXJnLmxlbjsKKyAgICBhcmdidWYgPSBoZXhzdHItPmJ1ZjsKKyAgICBhcmdsZW4gPSBoZXhzdHItPmxlbjsKIAogICAgIGFzc2VydChhcmdsZW4gPj0gMCk7CiAKQEAgLTExNzAsMTYgKzEyMDksMTMgQEAKICAgICAgKiByYWlzZSBhbiBleGNlcHRpb24uCiAgICAgICovCiAgICAgaWYgKGFyZ2xlbiAlIDIpIHsKLSAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGFyZyk7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhFcnJvciwgIk9kZC1sZW5ndGggc3RyaW5nIik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAogICAgIHJldHZhbCA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgKGFyZ2xlbi8yKSk7Ci0gICAgaWYgKCFyZXR2YWwpIHsKLSAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGFyZyk7CisgICAgaWYgKCFyZXR2YWwpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KICAgICByZXRidWYgPSBQeUJ5dGVzX0FTX1NUUklORyhyZXR2YWwpOwogCiAgICAgZm9yIChpPWo9MDsgaSA8IGFyZ2xlbjsgaSArPSAyKSB7CkBAIC0xMTkyLDIwICsxMjI4LDI3IEBACiAgICAgICAgIH0KICAgICAgICAgcmV0YnVmW2orK10gPSAodG9wIDw8IDQpICsgYm90OwogICAgIH0KLSAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYXJnKTsKICAgICByZXR1cm4gcmV0dmFsOwogCiAgIGZpbmFsbHk6Ci0gICAgUHlCdWZmZXJfUmVsZWFzZSgmcGFyZyk7CiAgICAgUHlfREVDUkVGKHJldHZhbCk7CiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKLVB5RG9jX1NUUlZBUihkb2NfdW5oZXhsaWZ5LAotImEyYl9oZXgoaGV4c3RyKSAtPiBzOyBCaW5hcnkgZGF0YSBvZiBoZXhhZGVjaW1hbCByZXByZXNlbnRhdGlvbi5cblwKLVxuXAotaGV4c3RyIG11c3QgY29udGFpbiBhbiBldmVuIG51bWJlciBvZiBoZXggZGlnaXRzICh1cHBlciBvciBsb3dlciBjYXNlKS5cblwKLVRoaXMgZnVuY3Rpb24gaXMgYWxzbyBhdmFpbGFibGUgYXMgXCJ1bmhleGxpZnkoKVwiIik7CisvKltjbGluaWMgaW5wdXRdCitiaW5hc2NpaS51bmhleGxpZnkgPSBiaW5hc2NpaS5hMmJfaGV4CisKK0JpbmFyeSBkYXRhIG9mIGhleGFkZWNpbWFsIHJlcHJlc2VudGF0aW9uLgorCitoZXhzdHIgbXVzdCBjb250YWluIGFuIGV2ZW4gbnVtYmVyIG9mIGhleCBkaWdpdHMgKHVwcGVyIG9yIGxvd2VyIGNhc2UpLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitzdGF0aWMgUHlPYmplY3QgKgorYmluYXNjaWlfdW5oZXhsaWZ5X2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpoZXhzdHIpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MTdjZWM3NTQ0NDk5ODAzZSBpbnB1dD1kZDhjMDEyNzI1ZjQ2MmRhXSovCit7CisgICAgcmV0dXJuIGJpbmFzY2lpX2EyYl9oZXhfaW1wbChtb2R1bGUsIGhleHN0cik7Cit9CiAKIHN0YXRpYyBpbnQgdGFibGVfaGV4WzEyOF0gPSB7CiAgIC0xLC0xLC0xLC0xLCAtMSwtMSwtMSwtMSwgLTEsLTEsLTEsLTEsIC0xLC0xLC0xLC0xLApAQCAtMTIyMiwyNSArMTI2NSwyOCBAQAogCiAjZGVmaW5lIE1BWExJTkVTSVpFIDc2CiAKLVB5RG9jX1NUUlZBUihkb2NfYTJiX3FwLCAiRGVjb2RlIGEgc3RyaW5nIG9mIHFwLWVuY29kZWQgZGF0YSIpOwogCi1zdGF0aWMgUHlPYmplY3QqCi1iaW5hc2NpaV9hMmJfcXAoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQorLypbY2xpbmljIGlucHV0XQorYmluYXNjaWkuYTJiX3FwCisKKyAgICBkYXRhOiBhc2NpaV9idWZmZXIKKyAgICBoZWFkZXI6IGludChjX2RlZmF1bHQ9IjAiKSA9IEZhbHNlCisKK0RlY29kZSBhIHN0cmluZyBvZiBxcC1lbmNvZGVkIGRhdGEuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK3N0YXRpYyBQeU9iamVjdCAqCitiaW5hc2NpaV9hMmJfcXBfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmRhdGEsIGludCBoZWFkZXIpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YTQ0ZWY4ODI3MDM1MjExNCBpbnB1dD01MTg3YTBkM2Q4ZTU0ZjNiXSovCiB7CiAgICAgUHlfc3NpemVfdCBpbiwgb3V0OwogICAgIGNoYXIgY2g7Ci0gICAgUHlfYnVmZmVyIHBkYXRhOwotICAgIHVuc2lnbmVkIGNoYXIgKmRhdGEsICpvZGF0YTsKKyAgICB1bnNpZ25lZCBjaGFyICphc2NpaV9kYXRhLCAqb2RhdGE7CiAgICAgUHlfc3NpemVfdCBkYXRhbGVuID0gMDsKICAgICBQeU9iamVjdCAqcnY7Ci0gICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJkYXRhIiwgImhlYWRlciIsIE5VTEx9OwotICAgIGludCBoZWFkZXIgPSAwOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiTyZ8aTphMmJfcXAiLCBrd2xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNjaWlfYnVmZmVyX2NvbnZlcnRlciwgJnBkYXRhLCAmaGVhZGVyKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgZGF0YSA9IHBkYXRhLmJ1ZjsKLSAgICBkYXRhbGVuID0gcGRhdGEubGVuOworICAgIGFzY2lpX2RhdGEgPSBkYXRhLT5idWY7CisgICAgZGF0YWxlbiA9IGRhdGEtPmxlbjsKIAogICAgIC8qIFdlIGFsbG9jYXRlIHRoZSBvdXRwdXQgc2FtZSBzaXplIGFzIGlucHV0LCB0aGlzIGlzIG92ZXJraWxsLgogICAgICAqIFRoZSBwcmV2aW91cyBpbXBsZW1lbnRhdGlvbiB1c2VkIGNhbGxvYygpIHNvIHdlJ2xsIHplcm8gb3V0IHRoZQpAQCAtMTI0OCw3ICsxMjk0LDYgQEAKICAgICAgKi8KICAgICBvZGF0YSA9ICh1bnNpZ25lZCBjaGFyICopIFB5TWVtX01hbGxvYyhkYXRhbGVuKTsKICAgICBpZiAob2RhdGEgPT0gTlVMTCkgewotICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwZGF0YSk7CiAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KQEAgLTEyNTYsMzEgKzEzMDEsMzEgQEAKIAogICAgIGluID0gb3V0ID0gMDsKICAgICB3aGlsZSAoaW4gPCBkYXRhbGVuKSB7Ci0gICAgICAgIGlmIChkYXRhW2luXSA9PSAnPScpIHsKKyAgICAgICAgaWYgKGFzY2lpX2RhdGFbaW5dID09ICc9JykgewogICAgICAgICAgICAgaW4rKzsKICAgICAgICAgICAgIGlmIChpbiA+PSBkYXRhbGVuKSBicmVhazsKICAgICAgICAgICAgIC8qIFNvZnQgbGluZSBicmVha3MgKi8KLSAgICAgICAgICAgIGlmICgoZGF0YVtpbl0gPT0gJ1xuJykgfHwgKGRhdGFbaW5dID09ICdccicpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGRhdGFbaW5dICE9ICdcbicpIHsKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGluIDwgZGF0YWxlbiAmJiBkYXRhW2luXSAhPSAnXG4nKSBpbisrOworICAgICAgICAgICAgaWYgKChhc2NpaV9kYXRhW2luXSA9PSAnXG4nKSB8fCAoYXNjaWlfZGF0YVtpbl0gPT0gJ1xyJykpIHsKKyAgICAgICAgICAgICAgICBpZiAoYXNjaWlfZGF0YVtpbl0gIT0gJ1xuJykgeworICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaW4gPCBkYXRhbGVuICYmIGFzY2lpX2RhdGFbaW5dICE9ICdcbicpIGluKys7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmIChpbiA8IGRhdGFsZW4pIGluKys7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChkYXRhW2luXSA9PSAnPScpIHsKKyAgICAgICAgICAgIGVsc2UgaWYgKGFzY2lpX2RhdGFbaW5dID09ICc9JykgewogICAgICAgICAgICAgICAgIC8qIGJyb2tlbiBjYXNlIGZyb20gYnJva2VuIHB5dGhvbiBxcCAqLwogICAgICAgICAgICAgICAgIG9kYXRhW291dCsrXSA9ICc9JzsKICAgICAgICAgICAgICAgICBpbisrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoKChkYXRhW2luXSA+PSAnQScgJiYgZGF0YVtpbl0gPD0gJ0YnKSB8fAotICAgICAgICAgICAgICAgICAgICAgIChkYXRhW2luXSA+PSAnYScgJiYgZGF0YVtpbl0gPD0gJ2YnKSB8fAotICAgICAgICAgICAgICAgICAgICAgIChkYXRhW2luXSA+PSAnMCcgJiYgZGF0YVtpbl0gPD0gJzknKSkgJiYKLSAgICAgICAgICAgICAgICAgICAgICgoZGF0YVtpbisxXSA+PSAnQScgJiYgZGF0YVtpbisxXSA8PSAnRicpIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgKGRhdGFbaW4rMV0gPj0gJ2EnICYmIGRhdGFbaW4rMV0gPD0gJ2YnKSB8fAotICAgICAgICAgICAgICAgICAgICAgIChkYXRhW2luKzFdID49ICcwJyAmJiBkYXRhW2luKzFdIDw9ICc5JykpKSB7CisgICAgICAgICAgICBlbHNlIGlmICgoKGFzY2lpX2RhdGFbaW5dID49ICdBJyAmJiBhc2NpaV9kYXRhW2luXSA8PSAnRicpIHx8CisgICAgICAgICAgICAgICAgICAgICAgKGFzY2lpX2RhdGFbaW5dID49ICdhJyAmJiBhc2NpaV9kYXRhW2luXSA8PSAnZicpIHx8CisgICAgICAgICAgICAgICAgICAgICAgKGFzY2lpX2RhdGFbaW5dID49ICcwJyAmJiBhc2NpaV9kYXRhW2luXSA8PSAnOScpKSAmJgorICAgICAgICAgICAgICAgICAgICAgKChhc2NpaV9kYXRhW2luKzFdID49ICdBJyAmJiBhc2NpaV9kYXRhW2luKzFdIDw9ICdGJykgfHwKKyAgICAgICAgICAgICAgICAgICAgICAoYXNjaWlfZGF0YVtpbisxXSA+PSAnYScgJiYgYXNjaWlfZGF0YVtpbisxXSA8PSAnZicpIHx8CisgICAgICAgICAgICAgICAgICAgICAgKGFzY2lpX2RhdGFbaW4rMV0gPj0gJzAnICYmIGFzY2lpX2RhdGFbaW4rMV0gPD0gJzknKSkpIHsKICAgICAgICAgICAgICAgICAvKiBoZXh2YWwgKi8KLSAgICAgICAgICAgICAgICBjaCA9IGhleHZhbChkYXRhW2luXSkgPDwgNDsKKyAgICAgICAgICAgICAgICBjaCA9IGhleHZhbChhc2NpaV9kYXRhW2luXSkgPDwgNDsKICAgICAgICAgICAgICAgICBpbisrOwotICAgICAgICAgICAgICAgIGNoIHw9IGhleHZhbChkYXRhW2luXSk7CisgICAgICAgICAgICAgICAgY2ggfD0gaGV4dmFsKGFzY2lpX2RhdGFbaW5dKTsKICAgICAgICAgICAgICAgICBpbisrOwogICAgICAgICAgICAgICAgIG9kYXRhW291dCsrXSA9IGNoOwogICAgICAgICAgICAgfQpAQCAtMTI4OCwyMiArMTMzMywyMCBAQAogICAgICAgICAgICAgICBvZGF0YVtvdXQrK10gPSAnPSc7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoaGVhZGVyICYmIGRhdGFbaW5dID09ICdfJykgeworICAgICAgICBlbHNlIGlmIChoZWFkZXIgJiYgYXNjaWlfZGF0YVtpbl0gPT0gJ18nKSB7CiAgICAgICAgICAgICBvZGF0YVtvdXQrK10gPSAnICc7CiAgICAgICAgICAgICBpbisrOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgb2RhdGFbb3V0XSA9IGRhdGFbaW5dOworICAgICAgICAgICAgb2RhdGFbb3V0XSA9IGFzY2lpX2RhdGFbaW5dOwogICAgICAgICAgICAgaW4rKzsKICAgICAgICAgICAgIG91dCsrOwogICAgICAgICB9CiAgICAgfQogICAgIGlmICgocnYgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKChjaGFyICopb2RhdGEsIG91dCkpID09IE5VTEwpIHsKLSAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGRhdGEpOwogICAgICAgICBQeU1lbV9GcmVlKG9kYXRhKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBkYXRhKTsKICAgICBQeU1lbV9GcmVlKG9kYXRhKTsKICAgICByZXR1cm4gcnY7CiB9CkBAIC0xMzE5LDYyICsxMzYyLDYyIEBACiAgICAgcmV0dXJuIDA7CiB9CiAKLVB5RG9jX1NUUlZBUihkb2NfYjJhX3FwLAotImIyYV9xcChkYXRhLCBxdW90ZXRhYnM9MCwgaXN0ZXh0PTEsIGhlYWRlcj0wKSAtPiBzOyBcblwKLSBFbmNvZGUgYSBzdHJpbmcgdXNpbmcgcXVvdGVkLXByaW50YWJsZSBlbmNvZGluZy4gXG5cCi1cblwKLU9uIGVuY29kaW5nLCB3aGVuIGlzdGV4dCBpcyBzZXQsIG5ld2xpbmVzIGFyZSBub3QgZW5jb2RlZCwgYW5kIHdoaXRlIFxuXAotc3BhY2UgYXQgZW5kIG9mIGxpbmVzIGlzLiAgV2hlbiBpc3RleHQgaXMgbm90IHNldCwgXFxyIGFuZCBcXG4gKENSL0xGKSBhcmUgXG5cCi1ib3RoIGVuY29kZWQuICBXaGVuIHF1b3RldGFicyBpcyBzZXQsIHNwYWNlIGFuZCB0YWJzIGFyZSBlbmNvZGVkLiIpOwotCiAvKiBYWFg6IFRoaXMgaXMgcmlkaWN1bG91c2x5IGNvbXBsaWNhdGVkIHRvIGJlIGJhY2t3YXJkIGNvbXBhdGlibGUKICAqIChtb3N0bHkpIHdpdGggdGhlIHF1b3ByaSBtb2R1bGUuICBJdCBkb2Vzbid0IHJlLWNyZWF0ZSB0aGUgcXVvcHJpCiAgKiBtb2R1bGUgYnVnIHdoZXJlIHRleHQgZW5kaW5nIGluIENSTEYgaGFzIHRoZSBDUiBlbmNvZGVkICovCi1zdGF0aWMgUHlPYmplY3QqCi1iaW5hc2NpaV9iMmFfcXAgKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKKworLypbY2xpbmljIGlucHV0XQorYmluYXNjaWkuYjJhX3FwCisKKyAgICBkYXRhOiBQeV9idWZmZXIKKyAgICBxdW90ZXRhYnM6IGludChjX2RlZmF1bHQ9IjAiKSA9IEZhbHNlCisgICAgaXN0ZXh0OiBpbnQoY19kZWZhdWx0PSIxIikgPSBUcnVlCisgICAgaGVhZGVyOiBpbnQoY19kZWZhdWx0PSIwIikgPSBGYWxzZQorCitFbmNvZGUgYSBzdHJpbmcgdXNpbmcgcXVvdGVkLXByaW50YWJsZSBlbmNvZGluZy4KKworT24gZW5jb2RpbmcsIHdoZW4gaXN0ZXh0IGlzIHNldCwgbmV3bGluZXMgYXJlIG5vdCBlbmNvZGVkLCBhbmQgd2hpdGUKK3NwYWNlIGF0IGVuZCBvZiBsaW5lcyBpcy4gIFdoZW4gaXN0ZXh0IGlzIG5vdCBzZXQsIFxyIGFuZCBcbiAoQ1IvTEYpCithcmUgYm90aCBlbmNvZGVkLiAgV2hlbiBxdW90ZXRhYnMgaXMgc2V0LCBzcGFjZSBhbmQgdGFicyBhcmUgZW5jb2RlZC4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworc3RhdGljIFB5T2JqZWN0ICoKK2JpbmFzY2lpX2IyYV9xcF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZGF0YSwgaW50IHF1b3RldGFicywgaW50IGlzdGV4dCwgaW50IGhlYWRlcikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1mZjI5OTFiYTY0MGZmZjNlIGlucHV0PTdmMmE5YWFhMDA4ZTkyYjJdKi8KIHsKICAgICBQeV9zc2l6ZV90IGluLCBvdXQ7Ci0gICAgUHlfYnVmZmVyIHBkYXRhOwotICAgIHVuc2lnbmVkIGNoYXIgKmRhdGEsICpvZGF0YTsKKyAgICB1bnNpZ25lZCBjaGFyICpkYXRhYnVmLCAqb2RhdGE7CiAgICAgUHlfc3NpemVfdCBkYXRhbGVuID0gMCwgb2RhdGFsZW4gPSAwOwogICAgIFB5T2JqZWN0ICpydjsKICAgICB1bnNpZ25lZCBpbnQgbGluZWxlbiA9IDA7Ci0gICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJkYXRhIiwgInF1b3RldGFicyIsICJpc3RleHQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGVhZGVyIiwgTlVMTH07Ci0gICAgaW50IGlzdGV4dCA9IDE7Ci0gICAgaW50IHF1b3RldGFicyA9IDA7Ci0gICAgaW50IGhlYWRlciA9IDA7CiAgICAgdW5zaWduZWQgY2hhciBjaDsKICAgICBpbnQgY3JsZiA9IDA7CiAgICAgdW5zaWduZWQgY2hhciAqcDsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgInkqfGlpaSIsIGt3bGlzdCwgJnBkYXRhLAotICAgICAgICAgICZxdW90ZXRhYnMsICZpc3RleHQsICZoZWFkZXIpKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBkYXRhID0gcGRhdGEuYnVmOwotICAgIGRhdGFsZW4gPSBwZGF0YS5sZW47CisgICAgZGF0YWJ1ZiA9IGRhdGEtPmJ1ZjsKKyAgICBkYXRhbGVuID0gZGF0YS0+bGVuOwogCiAgICAgLyogU2VlIGlmIHRoaXMgc3RyaW5nIGlzIHVzaW5nIENSTEYgbGluZSBlbmRzICovCiAgICAgLyogWFhYOiB0aGlzIGZ1bmN0aW9uIGhhcyB0aGUgc2lkZSBlZmZlY3Qgb2YgY29udmVydGluZyBhbGwgb2YKICAgICAgKiB0aGUgZW5kIG9mIGxpbmVzIHRvIGJlIHRoZSBzYW1lIGRlcGVuZGluZyBvbiB0aGlzIGRldGVjdGlvbgogICAgICAqIGhlcmUgKi8KLSAgICBwID0gKHVuc2lnbmVkIGNoYXIgKikgbWVtY2hyKGRhdGEsICdcbicsIGRhdGFsZW4pOwotICAgIGlmICgocCAhPSBOVUxMKSAmJiAocCA+IGRhdGEpICYmICgqKHAtMSkgPT0gJ1xyJykpCisgICAgcCA9ICh1bnNpZ25lZCBjaGFyICopIG1lbWNocihkYXRhYnVmLCAnXG4nLCBkYXRhbGVuKTsKKyAgICBpZiAoKHAgIT0gTlVMTCkgJiYgKHAgPiBkYXRhYnVmKSAmJiAoKihwLTEpID09ICdccicpKQogICAgICAgICBjcmxmID0gMTsKIAogICAgIC8qIEZpcnN0LCBzY2FuIHRvIHNlZSBob3cgbWFueSBjaGFyYWN0ZXJzIG5lZWQgdG8gYmUgZW5jb2RlZCAqLwogICAgIGluID0gMDsKICAgICB3aGlsZSAoaW4gPCBkYXRhbGVuKSB7Ci0gICAgICAgIGlmICgoZGF0YVtpbl0gPiAxMjYpIHx8Ci0gICAgICAgICAgICAoZGF0YVtpbl0gPT0gJz0nKSB8fAotICAgICAgICAgICAgKGhlYWRlciAmJiBkYXRhW2luXSA9PSAnXycpIHx8Ci0gICAgICAgICAgICAoKGRhdGFbaW5dID09ICcuJykgJiYgKGxpbmVsZW4gPT0gMCkgJiYKLSAgICAgICAgICAgICAoZGF0YVtpbisxXSA9PSAnXG4nIHx8IGRhdGFbaW4rMV0gPT0gJ1xyJyB8fCBkYXRhW2luKzFdID09IDApKSB8fAotICAgICAgICAgICAgKCFpc3RleHQgJiYgKChkYXRhW2luXSA9PSAnXHInKSB8fCAoZGF0YVtpbl0gPT0gJ1xuJykpKSB8fAotICAgICAgICAgICAgKChkYXRhW2luXSA9PSAnXHQnIHx8IGRhdGFbaW5dID09ICcgJykgJiYgKGluICsgMSA9PSBkYXRhbGVuKSkgfHwKLSAgICAgICAgICAgICgoZGF0YVtpbl0gPCAzMykgJiYKLSAgICAgICAgICAgICAoZGF0YVtpbl0gIT0gJ1xyJykgJiYgKGRhdGFbaW5dICE9ICdcbicpICYmCi0gICAgICAgICAgICAgKHF1b3RldGFicyB8fCAoKGRhdGFbaW5dICE9ICdcdCcpICYmIChkYXRhW2luXSAhPSAnICcpKSkpKQorICAgICAgICBpZiAoKGRhdGFidWZbaW5dID4gMTI2KSB8fAorICAgICAgICAgICAgKGRhdGFidWZbaW5dID09ICc9JykgfHwKKyAgICAgICAgICAgIChoZWFkZXIgJiYgZGF0YWJ1Zltpbl0gPT0gJ18nKSB8fAorICAgICAgICAgICAgKChkYXRhYnVmW2luXSA9PSAnLicpICYmIChsaW5lbGVuID09IDApICYmCisgICAgICAgICAgICAgKGRhdGFidWZbaW4rMV0gPT0gJ1xuJyB8fCBkYXRhYnVmW2luKzFdID09ICdccicgfHwgZGF0YWJ1ZltpbisxXSA9PSAwKSkgfHwKKyAgICAgICAgICAgICghaXN0ZXh0ICYmICgoZGF0YWJ1Zltpbl0gPT0gJ1xyJykgfHwgKGRhdGFidWZbaW5dID09ICdcbicpKSkgfHwKKyAgICAgICAgICAgICgoZGF0YWJ1Zltpbl0gPT0gJ1x0JyB8fCBkYXRhYnVmW2luXSA9PSAnICcpICYmIChpbiArIDEgPT0gZGF0YWxlbikpIHx8CisgICAgICAgICAgICAoKGRhdGFidWZbaW5dIDwgMzMpICYmCisgICAgICAgICAgICAgKGRhdGFidWZbaW5dICE9ICdccicpICYmIChkYXRhYnVmW2luXSAhPSAnXG4nKSAmJgorICAgICAgICAgICAgIChxdW90ZXRhYnMgfHwgKChkYXRhYnVmW2luXSAhPSAnXHQnKSAmJiAoZGF0YWJ1Zltpbl0gIT0gJyAnKSkpKSkKICAgICAgICAgewogICAgICAgICAgICAgaWYgKChsaW5lbGVuICsgMykgPj0gTUFYTElORVNJWkUpIHsKICAgICAgICAgICAgICAgICBsaW5lbGVuID0gMDsKQEAgLTEzODksMjYgKzE0MzIsMjYgQEAKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIGlmIChpc3RleHQgJiYKLSAgICAgICAgICAgICAgICAoKGRhdGFbaW5dID09ICdcbicpIHx8Ci0gICAgICAgICAgICAgICAgICgoaW4rMSA8IGRhdGFsZW4pICYmIChkYXRhW2luXSA9PSAnXHInKSAmJgotICAgICAgICAgICAgICAgICAoZGF0YVtpbisxXSA9PSAnXG4nKSkpKQorICAgICAgICAgICAgICAgICgoZGF0YWJ1Zltpbl0gPT0gJ1xuJykgfHwKKyAgICAgICAgICAgICAgICAgKChpbisxIDwgZGF0YWxlbikgJiYgKGRhdGFidWZbaW5dID09ICdccicpICYmCisgICAgICAgICAgICAgICAgIChkYXRhYnVmW2luKzFdID09ICdcbicpKSkpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgbGluZWxlbiA9IDA7CiAgICAgICAgICAgICAgICAgLyogUHJvdGVjdCBhZ2FpbnN0IHdoaXRlc3BhY2Ugb24gZW5kIG9mIGxpbmUgKi8KLSAgICAgICAgICAgICAgICBpZiAoaW4gJiYgKChkYXRhW2luLTFdID09ICcgJykgfHwgKGRhdGFbaW4tMV0gPT0gJ1x0JykpKQorICAgICAgICAgICAgICAgIGlmIChpbiAmJiAoKGRhdGFidWZbaW4tMV0gPT0gJyAnKSB8fCAoZGF0YWJ1Zltpbi0xXSA9PSAnXHQnKSkpCiAgICAgICAgICAgICAgICAgICAgIG9kYXRhbGVuICs9IDI7CiAgICAgICAgICAgICAgICAgaWYgKGNybGYpCiAgICAgICAgICAgICAgICAgICAgIG9kYXRhbGVuICs9IDI7CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBvZGF0YWxlbiArPSAxOwotICAgICAgICAgICAgICAgIGlmIChkYXRhW2luXSA9PSAnXHInKQorICAgICAgICAgICAgICAgIGlmIChkYXRhYnVmW2luXSA9PSAnXHInKQogICAgICAgICAgICAgICAgICAgICBpbiArPSAyOwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgaW4rKzsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIGlmICgoaW4gKyAxICE9IGRhdGFsZW4pICYmCi0gICAgICAgICAgICAgICAgICAgIChkYXRhW2luKzFdICE9ICdcbicpICYmCisgICAgICAgICAgICAgICAgICAgIChkYXRhYnVmW2luKzFdICE9ICdcbicpICYmCiAgICAgICAgICAgICAgICAgICAgIChsaW5lbGVuICsgMSkgPj0gTUFYTElORVNJWkUpIHsKICAgICAgICAgICAgICAgICAgICAgbGluZWxlbiA9IDA7CiAgICAgICAgICAgICAgICAgICAgIGlmIChjcmxmKQpAQCAtMTQyOSw3ICsxNDcyLDYgQEAKICAgICAgKi8KICAgICBvZGF0YSA9ICh1bnNpZ25lZCBjaGFyICopIFB5TWVtX01hbGxvYyhvZGF0YWxlbik7CiAgICAgaWYgKG9kYXRhID09IE5VTEwpIHsKLSAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGRhdGEpOwogICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CkBAIC0xNDM3LDE3ICsxNDc5LDE3IEBACiAKICAgICBpbiA9IG91dCA9IGxpbmVsZW4gPSAwOwogICAgIHdoaWxlIChpbiA8IGRhdGFsZW4pIHsKLSAgICAgICAgaWYgKChkYXRhW2luXSA+IDEyNikgfHwKLSAgICAgICAgICAgIChkYXRhW2luXSA9PSAnPScpIHx8Ci0gICAgICAgICAgICAoaGVhZGVyICYmIGRhdGFbaW5dID09ICdfJykgfHwKLSAgICAgICAgICAgICgoZGF0YVtpbl0gPT0gJy4nKSAmJiAobGluZWxlbiA9PSAwKSAmJgotICAgICAgICAgICAgIChkYXRhW2luKzFdID09ICdcbicgfHwgZGF0YVtpbisxXSA9PSAnXHInIHx8IGRhdGFbaW4rMV0gPT0gMCkpIHx8Ci0gICAgICAgICAgICAoIWlzdGV4dCAmJiAoKGRhdGFbaW5dID09ICdccicpIHx8IChkYXRhW2luXSA9PSAnXG4nKSkpIHx8Ci0gICAgICAgICAgICAoKGRhdGFbaW5dID09ICdcdCcgfHwgZGF0YVtpbl0gPT0gJyAnKSAmJiAoaW4gKyAxID09IGRhdGFsZW4pKSB8fAotICAgICAgICAgICAgKChkYXRhW2luXSA8IDMzKSAmJgotICAgICAgICAgICAgIChkYXRhW2luXSAhPSAnXHInKSAmJiAoZGF0YVtpbl0gIT0gJ1xuJykgJiYKKyAgICAgICAgaWYgKChkYXRhYnVmW2luXSA+IDEyNikgfHwKKyAgICAgICAgICAgIChkYXRhYnVmW2luXSA9PSAnPScpIHx8CisgICAgICAgICAgICAoaGVhZGVyICYmIGRhdGFidWZbaW5dID09ICdfJykgfHwKKyAgICAgICAgICAgICgoZGF0YWJ1Zltpbl0gPT0gJy4nKSAmJiAobGluZWxlbiA9PSAwKSAmJgorICAgICAgICAgICAgIChkYXRhYnVmW2luKzFdID09ICdcbicgfHwgZGF0YWJ1ZltpbisxXSA9PSAnXHInIHx8IGRhdGFidWZbaW4rMV0gPT0gMCkpIHx8CisgICAgICAgICAgICAoIWlzdGV4dCAmJiAoKGRhdGFidWZbaW5dID09ICdccicpIHx8IChkYXRhYnVmW2luXSA9PSAnXG4nKSkpIHx8CisgICAgICAgICAgICAoKGRhdGFidWZbaW5dID09ICdcdCcgfHwgZGF0YWJ1Zltpbl0gPT0gJyAnKSAmJiAoaW4gKyAxID09IGRhdGFsZW4pKSB8fAorICAgICAgICAgICAgKChkYXRhYnVmW2luXSA8IDMzKSAmJgorICAgICAgICAgICAgIChkYXRhYnVmW2luXSAhPSAnXHInKSAmJiAoZGF0YWJ1Zltpbl0gIT0gJ1xuJykgJiYKICAgICAgICAgICAgICAocXVvdGV0YWJzIHx8Ci0gICAgICAgICAgICAoIXF1b3RldGFicyAmJiAoKGRhdGFbaW5dICE9ICdcdCcpICYmIChkYXRhW2luXSAhPSAnICcpKSkpKSkKKyAgICAgICAgICAgICghcXVvdGV0YWJzICYmICgoZGF0YWJ1Zltpbl0gIT0gJ1x0JykgJiYgKGRhdGFidWZbaW5dICE9ICcgJykpKSkpKQogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoKGxpbmVsZW4gKyAzICk+PSBNQVhMSU5FU0laRSkgewogICAgICAgICAgICAgICAgIG9kYXRhW291dCsrXSA9ICc9JzsKQEAgLTE0NTYsMTYgKzE0OTgsMTYgQEAKICAgICAgICAgICAgICAgICBsaW5lbGVuID0gMDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG9kYXRhW291dCsrXSA9ICc9JzsKLSAgICAgICAgICAgIHRvX2hleChkYXRhW2luXSwgJm9kYXRhW291dF0pOworICAgICAgICAgICAgdG9faGV4KGRhdGFidWZbaW5dLCAmb2RhdGFbb3V0XSk7CiAgICAgICAgICAgICBvdXQgKz0gMjsKICAgICAgICAgICAgIGluKys7CiAgICAgICAgICAgICBsaW5lbGVuICs9IDM7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBpZiAoaXN0ZXh0ICYmCi0gICAgICAgICAgICAgICAgKChkYXRhW2luXSA9PSAnXG4nKSB8fAotICAgICAgICAgICAgICAgICAoKGluKzEgPCBkYXRhbGVuKSAmJiAoZGF0YVtpbl0gPT0gJ1xyJykgJiYKLSAgICAgICAgICAgICAgICAgKGRhdGFbaW4rMV0gPT0gJ1xuJykpKSkKKyAgICAgICAgICAgICAgICAoKGRhdGFidWZbaW5dID09ICdcbicpIHx8CisgICAgICAgICAgICAgICAgICgoaW4rMSA8IGRhdGFsZW4pICYmIChkYXRhYnVmW2luXSA9PSAnXHInKSAmJgorICAgICAgICAgICAgICAgICAoZGF0YWJ1ZltpbisxXSA9PSAnXG4nKSkpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGxpbmVsZW4gPSAwOwogICAgICAgICAgICAgICAgIC8qIFByb3RlY3QgYWdhaW5zdCB3aGl0ZXNwYWNlIG9uIGVuZCBvZiBsaW5lICovCkBAIC0xNDc4LDE0ICsxNTIwLDE0IEBACiAKICAgICAgICAgICAgICAgICBpZiAoY3JsZikgb2RhdGFbb3V0KytdID0gJ1xyJzsKICAgICAgICAgICAgICAgICBvZGF0YVtvdXQrK10gPSAnXG4nOwotICAgICAgICAgICAgICAgIGlmIChkYXRhW2luXSA9PSAnXHInKQorICAgICAgICAgICAgICAgIGlmIChkYXRhYnVmW2luXSA9PSAnXHInKQogICAgICAgICAgICAgICAgICAgICBpbiArPSAyOwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgaW4rKzsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIGlmICgoaW4gKyAxICE9IGRhdGFsZW4pICYmCi0gICAgICAgICAgICAgICAgICAgIChkYXRhW2luKzFdICE9ICdcbicpICYmCisgICAgICAgICAgICAgICAgICAgIChkYXRhYnVmW2luKzFdICE9ICdcbicpICYmCiAgICAgICAgICAgICAgICAgICAgIChsaW5lbGVuICsgMSkgPj0gTUFYTElORVNJWkUpIHsKICAgICAgICAgICAgICAgICAgICAgb2RhdGFbb3V0KytdID0gJz0nOwogICAgICAgICAgICAgICAgICAgICBpZiAoY3JsZikgb2RhdGFbb3V0KytdID0gJ1xyJzsKQEAgLTE0OTMsMjIgKzE1MzUsMjAgQEAKICAgICAgICAgICAgICAgICAgICAgbGluZWxlbiA9IDA7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGxpbmVsZW4rKzsKLSAgICAgICAgICAgICAgICBpZiAoaGVhZGVyICYmIGRhdGFbaW5dID09ICcgJykgeworICAgICAgICAgICAgICAgIGlmIChoZWFkZXIgJiYgZGF0YWJ1Zltpbl0gPT0gJyAnKSB7CiAgICAgICAgICAgICAgICAgICAgIG9kYXRhW291dCsrXSA9ICdfJzsKICAgICAgICAgICAgICAgICAgICAgaW4rKzsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIG9kYXRhW291dCsrXSA9IGRhdGFbaW4rK107CisgICAgICAgICAgICAgICAgICAgIG9kYXRhW291dCsrXSA9IGRhdGFidWZbaW4rK107CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogICAgIGlmICgocnYgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKChjaGFyICopb2RhdGEsIG91dCkpID09IE5VTEwpIHsKLSAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGRhdGEpOwogICAgICAgICBQeU1lbV9GcmVlKG9kYXRhKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBkYXRhKTsKICAgICBQeU1lbV9GcmVlKG9kYXRhKTsKICAgICByZXR1cm4gcnY7CiB9CkBAIC0xNTE2LDI1ICsxNTU2LDIyIEBACiAvKiBMaXN0IG9mIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHRoZSBtb2R1bGUgKi8KIAogc3RhdGljIHN0cnVjdCBQeU1ldGhvZERlZiBiaW5hc2NpaV9tb2R1bGVfbWV0aG9kc1tdID0gewotICAgIHsiYTJiX3V1IiwgICAgIGJpbmFzY2lpX2EyYl91dSwgICAgIE1FVEhfVkFSQVJHUywgZG9jX2EyYl91dX0sCi0gICAgeyJiMmFfdXUiLCAgICAgYmluYXNjaWlfYjJhX3V1LCAgICAgTUVUSF9WQVJBUkdTLCBkb2NfYjJhX3V1fSwKLSAgICB7ImEyYl9iYXNlNjQiLCBiaW5hc2NpaV9hMmJfYmFzZTY0LCBNRVRIX1ZBUkFSR1MsIGRvY19hMmJfYmFzZTY0fSwKLSAgICB7ImIyYV9iYXNlNjQiLCBiaW5hc2NpaV9iMmFfYmFzZTY0LCBNRVRIX1ZBUkFSR1MsIGRvY19iMmFfYmFzZTY0fSwKLSAgICB7ImEyYl9ocXgiLCAgICBiaW5hc2NpaV9hMmJfaHF4LCAgICBNRVRIX1ZBUkFSR1MsIGRvY19hMmJfaHF4fSwKLSAgICB7ImIyYV9ocXgiLCAgICBiaW5hc2NpaV9iMmFfaHF4LCAgICBNRVRIX1ZBUkFSR1MsIGRvY19iMmFfaHF4fSwKLSAgICB7ImIyYV9oZXgiLCAgICBiaW5hc2NpaV9oZXhsaWZ5LCAgICBNRVRIX1ZBUkFSR1MsIGRvY19oZXhsaWZ5fSwKLSAgICB7ImEyYl9oZXgiLCAgICBiaW5hc2NpaV91bmhleGxpZnksICBNRVRIX1ZBUkFSR1MsIGRvY191bmhleGxpZnl9LAotICAgIHsiaGV4bGlmeSIsICAgIGJpbmFzY2lpX2hleGxpZnksICAgIE1FVEhfVkFSQVJHUywgZG9jX2hleGxpZnl9LAotICAgIHsidW5oZXhsaWZ5IiwgIGJpbmFzY2lpX3VuaGV4bGlmeSwgIE1FVEhfVkFSQVJHUywgZG9jX3VuaGV4bGlmeX0sCi0gICAgeyJybGVjb2RlX2hxeCIsICAgYmluYXNjaWlfcmxlY29kZV9ocXgsIE1FVEhfVkFSQVJHUywgZG9jX3JsZWNvZGVfaHF4fSwKLSAgICB7InJsZWRlY29kZV9ocXgiLCBiaW5hc2NpaV9ybGVkZWNvZGVfaHF4LCBNRVRIX1ZBUkFSR1MsCi0gICAgIGRvY19ybGVkZWNvZGVfaHF4fSwKLSAgICB7ImNyY19ocXgiLCAgICBiaW5hc2NpaV9jcmNfaHF4LCAgICBNRVRIX1ZBUkFSR1MsIGRvY19jcmNfaHF4fSwKLSAgICB7ImNyYzMyIiwgICAgICBiaW5hc2NpaV9jcmMzMiwgICAgICBNRVRIX1ZBUkFSR1MsIGRvY19jcmMzMn0sCi0gICAgeyJhMmJfcXAiLCAoUHlDRnVuY3Rpb24pYmluYXNjaWlfYTJiX3FwLCBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLAotICAgICAgZG9jX2EyYl9xcH0sCi0gICAgeyJiMmFfcXAiLCAoUHlDRnVuY3Rpb24pYmluYXNjaWlfYjJhX3FwLCBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLAotICAgICAgZG9jX2IyYV9xcH0sCisgICAgQklOQVNDSUlfQTJCX1VVX01FVEhPRERFRgorICAgIEJJTkFTQ0lJX0IyQV9VVV9NRVRIT0RERUYKKyAgICBCSU5BU0NJSV9BMkJfQkFTRTY0X01FVEhPRERFRgorICAgIEJJTkFTQ0lJX0IyQV9CQVNFNjRfTUVUSE9EREVGCisgICAgQklOQVNDSUlfQTJCX0hRWF9NRVRIT0RERUYKKyAgICBCSU5BU0NJSV9CMkFfSFFYX01FVEhPRERFRgorICAgIEJJTkFTQ0lJX0EyQl9IRVhfTUVUSE9EREVGCisgICAgQklOQVNDSUlfQjJBX0hFWF9NRVRIT0RERUYKKyAgICBCSU5BU0NJSV9IRVhMSUZZX01FVEhPRERFRgorICAgIEJJTkFTQ0lJX1VOSEVYTElGWV9NRVRIT0RERUYKKyAgICBCSU5BU0NJSV9STEVDT0RFX0hRWF9NRVRIT0RERUYKKyAgICBCSU5BU0NJSV9STEVERUNPREVfSFFYX01FVEhPRERFRgorICAgIEJJTkFTQ0lJX0NSQ19IUVhfTUVUSE9EREVGCisgICAgQklOQVNDSUlfQ1JDMzJfTUVUSE9EREVGCisgICAgQklOQVNDSUlfQTJCX1FQX01FVEhPRERFRgorICAgIEJJTkFTQ0lJX0IyQV9RUF9NRVRIT0RERUYKICAgICB7TlVMTCwgTlVMTH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNlbnRpbmVsICovCiB9OwogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL2Nqa2NvZGVjcy9fY29kZWNzX2NuLmMgYi9Nb2R1bGVzL2Nqa2NvZGVjcy9fY29kZWNzX2NuLmMKaW5kZXggOWU5ZTk2Yy4uMWEwNzBmMiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9jamtjb2RlY3MvX2NvZGVjc19jbi5jCisrKyBiL01vZHVsZXMvY2prY29kZWNzL19jb2RlY3NfY24uYwpAQCAtMTUsNyArMTUsNyBAQAogI3VuZGVmIGh6CiAjZW5kaWYKIAotLyogR0JLIGFuZCBHQjIzMTIgbWFwIGRpZmZlcmVudGx5IGluIGZldyBjb2RlcG9pbnRzIHRoYXQgYXJlIGxpc3RlZCBiZWxvdzoKKy8qIEdCSyBhbmQgR0IyMzEyIG1hcCBkaWZmZXJlbnRseSBpbiBmZXcgY29kZSBwb2ludHMgdGhhdCBhcmUgbGlzdGVkIGJlbG93OgogICoKICAqICAgICAgICAgICAgICBnYjIzMTIgICAgICAgICAgICAgICAgICAgICAgICAgIGdiawogICogQTFBNCAgICAgICAgIFUrMzBGQiBLQVRBS0FOQSBNSURETEUgRE9UICAgICAgVSswMEI3IE1JRERMRSBET1QKQEAgLTIzLDE4ICsyMywzMyBAQAogICogQTg0NCAgICAgICAgIHVuZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgVSsyMDE1IEhPUklaT05UQUwgQkFSCiAgKi8KIAotI2RlZmluZSBHQktfREVDT0RFKGRjMSwgZGMyLCBhc3NpKSBcCi0gICAgaWYgKChkYzEpID09IDB4YTEgJiYgKGRjMikgPT0gMHhhYSkgKGFzc2kpID0gMHgyMDE0OyBcCi0gICAgZWxzZSBpZiAoKGRjMSkgPT0gMHhhOCAmJiAoZGMyKSA9PSAweDQ0KSAoYXNzaSkgPSAweDIwMTU7IFwKLSAgICBlbHNlIGlmICgoZGMxKSA9PSAweGExICYmIChkYzIpID09IDB4YTQpIChhc3NpKSA9IDB4MDBiNzsgXAotICAgIGVsc2UgVFJZTUFQX0RFQyhnYjIzMTIsIGFzc2ksIGRjMSBeIDB4ODAsIGRjMiBeIDB4ODApOyBcCi0gICAgZWxzZSBUUllNQVBfREVDKGdia2V4dCwgYXNzaSwgZGMxLCBkYzIpOworI2RlZmluZSBHQktfREVDT0RFKGRjMSwgZGMyLCB3cml0ZXIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKChkYzEpID09IDB4YTEgJiYgKGRjMikgPT0gMHhhYSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgT1VUQ0hBUigweDIwMTQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZWxzZSBpZiAoKGRjMSkgPT0gMHhhOCAmJiAoZGMyKSA9PSAweDQ0KSB7ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgT1VUQ0hBUigweDIwMTUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZWxzZSBpZiAoKGRjMSkgPT0gMHhhMSAmJiAoZGMyKSA9PSAweGE0KSB7ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgT1VUQ0hBUigweDAwYjcpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZWxzZSBpZiAoVFJZTUFQX0RFQyhnYjIzMTIsIGRlY29kZWQsIGRjMSBeIDB4ODAsIGRjMiBeIDB4ODApKSB7IFwKKyAgICAgICAgT1VUQ0hBUihkZWNvZGVkKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZWxzZSBpZiAoVFJZTUFQX0RFQyhnYmtleHQsIGRlY29kZWQsIGRjMSwgZGMyKSkgeyAgICAgICAgICAgICAgIFwKKyAgICAgICAgT1VUQ0hBUihkZWNvZGVkKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0KIAotI2RlZmluZSBHQktfRU5DT0RFKGNvZGUsIGFzc2kpIFwKLSAgICBpZiAoKGNvZGUpID09IDB4MjAxNCkgKGFzc2kpID0gMHhhMWFhOyBcCi0gICAgZWxzZSBpZiAoKGNvZGUpID09IDB4MjAxNSkgKGFzc2kpID0gMHhhODQ0OyBcCi0gICAgZWxzZSBpZiAoKGNvZGUpID09IDB4MDBiNykgKGFzc2kpID0gMHhhMWE0OyBcCi0gICAgZWxzZSBpZiAoKGNvZGUpICE9IDB4MzBmYiAmJiBUUllNQVBfRU5DX0NPTkQoZ2Jjb21tb24sIGFzc2ksIGNvZGUpKTsKKyNkZWZpbmUgR0JLX0VOQ09ERShjb2RlLCBhc3NpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmICgoY29kZSkgPT0gMHgyMDE0KSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIChhc3NpKSA9IDB4YTFhYTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IGVsc2UgaWYgKChjb2RlKSA9PSAweDIwMTUpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAoYXNzaSkgPSAweGE4NDQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSBlbHNlIGlmICgoY29kZSkgPT0gMHgwMGI3KSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKGFzc2kpID0gMHhhMWE0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gZWxzZSBpZiAoKGNvZGUpICE9IDB4MzBmYiAmJiBUUllNQVBfRU5DKGdiY29tbW9uLCBhc3NpLCBjb2RlKSkgeyBcCisgICAgICAgIDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9CiAKIC8qCiAgKiBHQjIzMTIgY29kZWMKQEAgLTQyLDI3ICs1NywzMSBAQAogCiBFTkNPREVSKGdiMjMxMikKIHsKLSAgICB3aGlsZSAoaW5sZWZ0ID4gMCkgewotICAgICAgICBQeV9VTklDT0RFIGMgPSBJTjE7CisgICAgd2hpbGUgKCppbnBvcyA8IGlubGVuKSB7CisgICAgICAgIFB5X1VDUzQgYyA9IElOQ0hBUjE7CiAgICAgICAgIERCQ0hBUiBjb2RlOwogCiAgICAgICAgIGlmIChjIDwgMHg4MCkgewotICAgICAgICAgICAgV1JJVEUxKCh1bnNpZ25lZCBjaGFyKWMpCi0gICAgICAgICAgICBORVhUKDEsIDEpCisgICAgICAgICAgICBXUklURUJZVEUxKCh1bnNpZ25lZCBjaGFyKWMpOworICAgICAgICAgICAgTkVYVCgxLCAxKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAgICAgIFVDUzRJTlZBTElEKGMpCiAKLSAgICAgICAgUkVRVUlSRV9PVVRCVUYoMikKLSAgICAgICAgVFJZTUFQX0VOQyhnYmNvbW1vbiwgY29kZSwgYyk7Ci0gICAgICAgIGVsc2UgcmV0dXJuIDE7CisgICAgICAgIGlmIChjID4gMHhGRkZGKQorICAgICAgICAgICAgcmV0dXJuIDE7CisKKyAgICAgICAgUkVRVUlSRV9PVVRCVUYoMik7CisgICAgICAgIGlmIChUUllNQVBfRU5DKGdiY29tbW9uLCBjb2RlLCBjKSkKKyAgICAgICAgICAgIDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIDE7CiAKICAgICAgICAgaWYgKGNvZGUgJiAweDgwMDApIC8qIE1TQiBzZXQ6IEdCSyAqLwogICAgICAgICAgICAgcmV0dXJuIDE7CiAKLSAgICAgICAgT1VUMSgoY29kZSA+PiA4KSB8IDB4ODApCi0gICAgICAgIE9VVDIoKGNvZGUgJiAweEZGKSB8IDB4ODApCi0gICAgICAgIE5FWFQoMSwgMikKKyAgICAgICAgT1VUQllURTEoKGNvZGUgPj4gOCkgfCAweDgwKTsKKyAgICAgICAgT1VUQllURTIoKGNvZGUgJiAweEZGKSB8IDB4ODApOworICAgICAgICBORVhUKDEsIDIpOwogICAgIH0KIAogICAgIHJldHVybiAwOwpAQCAtNzIsMjAgKzkxLDIxIEBACiB7CiAgICAgd2hpbGUgKGlubGVmdCA+IDApIHsKICAgICAgICAgdW5zaWduZWQgY2hhciBjID0gKippbmJ1ZjsKLQotICAgICAgICBSRVFVSVJFX09VVEJVRigxKQorICAgICAgICBQeV9VQ1M0IGRlY29kZWQ7CiAKICAgICAgICAgaWYgKGMgPCAweDgwKSB7Ci0gICAgICAgICAgICBPVVQxKGMpCi0gICAgICAgICAgICBORVhUKDEsIDEpCisgICAgICAgICAgICBPVVRDSEFSKGMpOworICAgICAgICAgICAgTkVYVF9JTigxKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgUkVRVUlSRV9JTkJVRigyKQotICAgICAgICBUUllNQVBfREVDKGdiMjMxMiwgKipvdXRidWYsIGMgXiAweDgwLCBJTjIgXiAweDgwKSB7Ci0gICAgICAgICAgICBORVhUKDIsIDEpCisgICAgICAgIFJFUVVJUkVfSU5CVUYoMik7CisgICAgICAgIGlmIChUUllNQVBfREVDKGdiMjMxMiwgZGVjb2RlZCwgYyBeIDB4ODAsIElOQllURTIgXiAweDgwKSkgeworICAgICAgICAgICAgT1VUQ0hBUihkZWNvZGVkKTsKKyAgICAgICAgICAgIE5FWFRfSU4oMik7CiAgICAgICAgIH0KLSAgICAgICAgZWxzZSByZXR1cm4gMTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgfQogCiAgICAgcmV0dXJuIDA7CkBAIC05OCwyOCArMTE4LDMxIEBACiAKIEVOQ09ERVIoZ2JrKQogewotICAgIHdoaWxlIChpbmxlZnQgPiAwKSB7Ci0gICAgICAgIFB5X1VOSUNPREUgYyA9IElOMTsKKyAgICB3aGlsZSAoKmlucG9zIDwgaW5sZW4pIHsKKyAgICAgICAgUHlfVUNTNCBjID0gSU5DSEFSMTsKICAgICAgICAgREJDSEFSIGNvZGU7CiAKICAgICAgICAgaWYgKGMgPCAweDgwKSB7Ci0gICAgICAgICAgICBXUklURTEoKHVuc2lnbmVkIGNoYXIpYykKLSAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgIFdSSVRFQllURTEoKHVuc2lnbmVkIGNoYXIpYyk7CisgICAgICAgICAgICBORVhUKDEsIDEpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAgVUNTNElOVkFMSUQoYykKIAotICAgICAgICBSRVFVSVJFX09VVEJVRigyKQorICAgICAgICBpZiAoYyA+IDB4RkZGRikKKyAgICAgICAgICAgIHJldHVybiAxOworCisgICAgICAgIFJFUVVJUkVfT1VUQlVGKDIpOwogCiAgICAgICAgIEdCS19FTkNPREUoYywgY29kZSkKLSAgICAgICAgZWxzZSByZXR1cm4gMTsKLQotICAgICAgICBPVVQxKChjb2RlID4+IDgpIHwgMHg4MCkKLSAgICAgICAgaWYgKGNvZGUgJiAweDgwMDApCi0gICAgICAgICAgICBPVVQyKChjb2RlICYgMHhGRikpIC8qIE1TQiBzZXQ6IEdCSyAqLwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBPVVQyKChjb2RlICYgMHhGRikgfCAweDgwKSAvKiBNU0IgdW5zZXQ6IEdCMjMxMiAqLwotICAgICAgICBORVhUKDEsIDIpCisgICAgICAgICAgICByZXR1cm4gMTsKKworICAgICAgICBPVVRCWVRFMSgoY29kZSA+PiA4KSB8IDB4ODApOworICAgICAgICBpZiAoY29kZSAmIDB4ODAwMCkKKyAgICAgICAgICAgIE9VVEJZVEUyKChjb2RlICYgMHhGRikpOyAvKiBNU0Igc2V0OiBHQksgKi8KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgT1VUQllURTIoKGNvZGUgJiAweEZGKSB8IDB4ODApOyAvKiBNU0IgdW5zZXQ6IEdCMjMxMiAqLworICAgICAgICBORVhUKDEsIDIpOwogICAgIH0KIAogICAgIHJldHVybiAwOwpAQCAtMTI4LDIyICsxNTEsMjIgQEAKIERFQ09ERVIoZ2JrKQogewogICAgIHdoaWxlIChpbmxlZnQgPiAwKSB7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9IElOMTsKLQotICAgICAgICBSRVFVSVJFX09VVEJVRigxKQorICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSBJTkJZVEUxOworICAgICAgICBQeV9VQ1M0IGRlY29kZWQ7CiAKICAgICAgICAgaWYgKGMgPCAweDgwKSB7Ci0gICAgICAgICAgICBPVVQxKGMpCi0gICAgICAgICAgICBORVhUKDEsIDEpCisgICAgICAgICAgICBPVVRDSEFSKGMpOworICAgICAgICAgICAgTkVYVF9JTigxKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgUkVRVUlSRV9JTkJVRigyKQorICAgICAgICBSRVFVSVJFX0lOQlVGKDIpOwogCi0gICAgICAgIEdCS19ERUNPREUoYywgSU4yLCAqKm91dGJ1ZikKLSAgICAgICAgZWxzZSByZXR1cm4gMTsKKyAgICAgICAgR0JLX0RFQ09ERShjLCBJTkJZVEUyLCB3cml0ZXIpCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiAxOwogCi0gICAgICAgIE5FWFQoMiwgMSkKKyAgICAgICAgTkVYVF9JTigyKTsKICAgICB9CiAKICAgICByZXR1cm4gMDsKQEAgLTE1Niw3MiArMTc5LDYzIEBACiAKIEVOQ09ERVIoZ2IxODAzMCkKIHsKLSAgICB3aGlsZSAoaW5sZWZ0ID4gMCkgewotICAgICAgICB1Y3M0X3QgYyA9IElOMTsKKyAgICB3aGlsZSAoKmlucG9zIDwgaW5sZW4pIHsKKyAgICAgICAgUHlfVUNTNCBjID0gSU5DSEFSMTsKICAgICAgICAgREJDSEFSIGNvZGU7CiAKICAgICAgICAgaWYgKGMgPCAweDgwKSB7Ci0gICAgICAgICAgICBXUklURTEoYykKLSAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgIFdSSVRFQllURTEoYyk7CisgICAgICAgICAgICBORVhUKDEsIDEpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBERUNPREVfU1VSUk9HQVRFKGMpCi0gICAgICAgIGlmIChjID4gMHgxMEZGRkYpCi0jaWYgUHlfVU5JQ09ERV9TSVpFID09IDIKLSAgICAgICAgICAgIHJldHVybiAyOyAvKiBzdXJyb2dhdGVzIHBhaXIgKi8KLSNlbHNlCi0gICAgICAgICAgICByZXR1cm4gMTsKLSNlbmRpZgotICAgICAgICBlbHNlIGlmIChjID49IDB4MTAwMDApIHsKLSAgICAgICAgICAgIHVjczRfdCB0YyA9IGMgLSAweDEwMDAwOworICAgICAgICBpZiAoYyA+PSAweDEwMDAwKSB7CisgICAgICAgICAgICBQeV9VQ1M0IHRjID0gYyAtIDB4MTAwMDA7CisgICAgICAgICAgICBhc3NlcnQgKGMgPD0gMHgxMEZGRkYpOwogCi0gICAgICAgICAgICBSRVFVSVJFX09VVEJVRig0KQorICAgICAgICAgICAgUkVRVUlSRV9PVVRCVUYoNCk7CiAKLSAgICAgICAgICAgIE9VVDQoKHVuc2lnbmVkIGNoYXIpKHRjICUgMTApICsgMHgzMCkKKyAgICAgICAgICAgIE9VVEJZVEU0KCh1bnNpZ25lZCBjaGFyKSh0YyAlIDEwKSArIDB4MzApOwogICAgICAgICAgICAgdGMgLz0gMTA7Ci0gICAgICAgICAgICBPVVQzKCh1bnNpZ25lZCBjaGFyKSh0YyAlIDEyNikgKyAweDgxKQorICAgICAgICAgICAgT1VUQllURTMoKHVuc2lnbmVkIGNoYXIpKHRjICUgMTI2KSArIDB4ODEpOwogICAgICAgICAgICAgdGMgLz0gMTI2OwotICAgICAgICAgICAgT1VUMigodW5zaWduZWQgY2hhcikodGMgJSAxMCkgKyAweDMwKQorICAgICAgICAgICAgT1VUQllURTIoKHVuc2lnbmVkIGNoYXIpKHRjICUgMTApICsgMHgzMCk7CiAgICAgICAgICAgICB0YyAvPSAxMDsKLSAgICAgICAgICAgIE9VVDEoKHVuc2lnbmVkIGNoYXIpKHRjICsgMHg5MCkpCisgICAgICAgICAgICBPVVRCWVRFMSgodW5zaWduZWQgY2hhcikodGMgKyAweDkwKSk7CiAKLSNpZiBQeV9VTklDT0RFX1NJWkUgPT0gMgotICAgICAgICAgICAgTkVYVCgyLCA0KSAvKiBzdXJyb2dhdGVzIHBhaXIgKi8KLSNlbHNlCi0gICAgICAgICAgICBORVhUKDEsIDQpCi0jZW5kaWYKKyAgICAgICAgICAgIE5FWFQoMSwgNCk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIFJFUVVJUkVfT1VUQlVGKDIpCisgICAgICAgIFJFUVVJUkVfT1VUQlVGKDIpOwogCiAgICAgICAgIEdCS19FTkNPREUoYywgY29kZSkKLSAgICAgICAgZWxzZSBUUllNQVBfRU5DKGdiMTgwMzBleHQsIGNvZGUsIGMpOworICAgICAgICBlbHNlIGlmIChUUllNQVBfRU5DKGdiMTgwMzBleHQsIGNvZGUsIGMpKQorICAgICAgICAgICAgOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBfZ2IxODAzMF90b191bmlibXBfcmFuZ2VzICp1dHJyYW5nZTsKIAotICAgICAgICAgICAgUkVRVUlSRV9PVVRCVUYoNCkKKyAgICAgICAgICAgIFJFUVVJUkVfT1VUQlVGKDQpOwogCiAgICAgICAgICAgICBmb3IgKHV0cnJhbmdlID0gZ2IxODAzMF90b191bmlibXBfcmFuZ2VzOwogICAgICAgICAgICAgICAgICB1dHJyYW5nZS0+Zmlyc3QgIT0gMDsKICAgICAgICAgICAgICAgICAgdXRycmFuZ2UrKykKICAgICAgICAgICAgICAgICBpZiAodXRycmFuZ2UtPmZpcnN0IDw9IGMgJiYKICAgICAgICAgICAgICAgICAgICAgYyA8PSB1dHJyYW5nZS0+bGFzdCkgewotICAgICAgICAgICAgICAgICAgICBQeV9VTklDT0RFIHRjOworICAgICAgICAgICAgICAgICAgICBQeV9VQ1M0IHRjOwogCiAgICAgICAgICAgICAgICAgICAgIHRjID0gYyAtIHV0cnJhbmdlLT5maXJzdCArCiAgICAgICAgICAgICAgICAgICAgICAgICAgdXRycmFuZ2UtPmJhc2U7CiAKLSAgICAgICAgICAgICAgICAgICAgT1VUNCgodW5zaWduZWQgY2hhcikodGMgJSAxMCkgKyAweDMwKQorICAgICAgICAgICAgICAgICAgICBPVVRCWVRFNCgodW5zaWduZWQgY2hhcikodGMgJSAxMCkgKyAweDMwKTsKICAgICAgICAgICAgICAgICAgICAgdGMgLz0gMTA7Ci0gICAgICAgICAgICAgICAgICAgIE9VVDMoKHVuc2lnbmVkIGNoYXIpKHRjICUgMTI2KSArIDB4ODEpCisgICAgICAgICAgICAgICAgICAgIE9VVEJZVEUzKCh1bnNpZ25lZCBjaGFyKSh0YyAlIDEyNikgKyAweDgxKTsKICAgICAgICAgICAgICAgICAgICAgdGMgLz0gMTI2OwotICAgICAgICAgICAgICAgICAgICBPVVQyKCh1bnNpZ25lZCBjaGFyKSh0YyAlIDEwKSArIDB4MzApCisgICAgICAgICAgICAgICAgICAgIE9VVEJZVEUyKCh1bnNpZ25lZCBjaGFyKSh0YyAlIDEwKSArIDB4MzApOwogICAgICAgICAgICAgICAgICAgICB0YyAvPSAxMDsKLSAgICAgICAgICAgICAgICAgICAgT1VUMSgodW5zaWduZWQgY2hhcil0YyArIDB4ODEpCisgICAgICAgICAgICAgICAgICAgIE9VVEJZVEUxKCh1bnNpZ25lZCBjaGFyKXRjICsgMHg4MSk7CiAKLSAgICAgICAgICAgICAgICAgICAgTkVYVCgxLCA0KQorICAgICAgICAgICAgICAgICAgICBORVhUKDEsIDQpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAKQEAgLTIzMCwxMyArMjQ0LDEzIEBACiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIE9VVDEoKGNvZGUgPj4gOCkgfCAweDgwKQorICAgICAgICBPVVRCWVRFMSgoY29kZSA+PiA4KSB8IDB4ODApOwogICAgICAgICBpZiAoY29kZSAmIDB4ODAwMCkKLSAgICAgICAgICAgIE9VVDIoKGNvZGUgJiAweEZGKSkgLyogTVNCIHNldDogR0JLIG9yIEdCMTgwMzBleHQgKi8KKyAgICAgICAgICAgIE9VVEJZVEUyKChjb2RlICYgMHhGRikpOyAvKiBNU0Igc2V0OiBHQksgb3IgR0IxODAzMGV4dCAqLwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBPVVQyKChjb2RlICYgMHhGRikgfCAweDgwKSAvKiBNU0IgdW5zZXQ6IEdCMjMxMiAqLworICAgICAgICAgICAgT1VUQllURTIoKGNvZGUgJiAweEZGKSB8IDB4ODApOyAvKiBNU0IgdW5zZXQ6IEdCMjMxMiAqLwogCi0gICAgICAgIE5FWFQoMSwgMikKKyAgICAgICAgTkVYVCgxLCAyKTsKICAgICB9CiAKICAgICByZXR1cm4gMDsKQEAgLTI0NSw2MSArMjU5LDYyIEBACiBERUNPREVSKGdiMTgwMzApCiB7CiAgICAgd2hpbGUgKGlubGVmdCA+IDApIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciBjID0gSU4xLCBjMjsKLQotICAgICAgICBSRVFVSVJFX09VVEJVRigxKQorICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSBJTkJZVEUxLCBjMjsKKyAgICAgICAgUHlfVUNTNCBkZWNvZGVkOwogCiAgICAgICAgIGlmIChjIDwgMHg4MCkgewotICAgICAgICAgICAgT1VUMShjKQotICAgICAgICAgICAgTkVYVCgxLCAxKQorICAgICAgICAgICAgT1VUQ0hBUihjKTsKKyAgICAgICAgICAgIE5FWFRfSU4oMSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIFJFUVVJUkVfSU5CVUYoMikKKyAgICAgICAgUkVRVUlSRV9JTkJVRigyKTsKIAotICAgICAgICBjMiA9IElOMjsKKyAgICAgICAgYzIgPSBJTkJZVEUyOwogICAgICAgICBpZiAoYzIgPj0gMHgzMCAmJiBjMiA8PSAweDM5KSB7IC8qIDQgYnl0ZXMgc2VxICovCiAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgX2diMTgwMzBfdG9fdW5pYm1wX3JhbmdlcyAqdXRyOwogICAgICAgICAgICAgdW5zaWduZWQgY2hhciBjMywgYzQ7Ci0gICAgICAgICAgICB1Y3M0X3QgbHNlcTsKKyAgICAgICAgICAgIFB5X1VDUzQgbHNlcTsKIAotICAgICAgICAgICAgUkVRVUlSRV9JTkJVRig0KQotICAgICAgICAgICAgYzMgPSBJTjM7Ci0gICAgICAgICAgICBjNCA9IElONDsKKyAgICAgICAgICAgIFJFUVVJUkVfSU5CVUYoNCk7CisgICAgICAgICAgICBjMyA9IElOQllURTM7CisgICAgICAgICAgICBjNCA9IElOQllURTQ7CiAgICAgICAgICAgICBpZiAoYyA8IDB4ODEgfHwgYzMgPCAweDgxIHx8IGM0IDwgMHgzMCB8fCBjNCA+IDB4MzkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgICAgICBjIC09IDB4ODE7ICBjMiAtPSAweDMwOwogICAgICAgICAgICAgYzMgLT0gMHg4MTsgYzQgLT0gMHgzMDsKIAogICAgICAgICAgICAgaWYgKGMgPCA0KSB7IC8qIFUrMDA4MCAtIFUrRkZGRiAqLwotICAgICAgICAgICAgICAgIGxzZXEgPSAoKHVjczRfdCljICogMTAgKyBjMikgKiAxMjYwICsKLSAgICAgICAgICAgICAgICAgICAgKHVjczRfdCljMyAqIDEwICsgYzQ7CisgICAgICAgICAgICAgICAgbHNlcSA9ICgoUHlfVUNTNCljICogMTAgKyBjMikgKiAxMjYwICsKKyAgICAgICAgICAgICAgICAgICAgKFB5X1VDUzQpYzMgKiAxMCArIGM0OwogICAgICAgICAgICAgICAgIGlmIChsc2VxIDwgMzk0MjApIHsKICAgICAgICAgICAgICAgICAgICAgZm9yICh1dHIgPSBnYjE4MDMwX3RvX3VuaWJtcF9yYW5nZXM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgbHNlcSA+PSAodXRyICsgMSktPmJhc2U7CiAgICAgICAgICAgICAgICAgICAgICAgICAgdXRyKyspIDsKLSAgICAgICAgICAgICAgICAgICAgT1VUMSh1dHItPmZpcnN0IC0gdXRyLT5iYXNlICsgbHNlcSkKLSAgICAgICAgICAgICAgICAgICAgTkVYVCg0LCAxKQorICAgICAgICAgICAgICAgICAgICBPVVRDSEFSKHV0ci0+Zmlyc3QgLSB1dHItPmJhc2UgKyBsc2VxKTsKKyAgICAgICAgICAgICAgICAgICAgTkVYVF9JTig0KTsKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSBpZiAoYyA+PSAxNSkgeyAvKiBVKzEwMDAwIC0gVSsxMEZGRkYgKi8KLSAgICAgICAgICAgICAgICBsc2VxID0gMHgxMDAwMCArICgoKHVjczRfdCljLTE1KSAqIDEwICsgYzIpCi0gICAgICAgICAgICAgICAgICAgICogMTI2MCArICh1Y3M0X3QpYzMgKiAxMCArIGM0OworICAgICAgICAgICAgICAgIGxzZXEgPSAweDEwMDAwICsgKCgoUHlfVUNTNCljLTE1KSAqIDEwICsgYzIpCisgICAgICAgICAgICAgICAgICAgICogMTI2MCArIChQeV9VQ1M0KWMzICogMTAgKyBjNDsKICAgICAgICAgICAgICAgICBpZiAobHNlcSA8PSAweDEwRkZGRikgewotICAgICAgICAgICAgICAgICAgICBXUklURVVDUzQobHNlcSk7Ci0gICAgICAgICAgICAgICAgICAgIE5FWFRfSU4oNCkKKyAgICAgICAgICAgICAgICAgICAgT1VUQ0hBUihsc2VxKTsKKyAgICAgICAgICAgICAgICAgICAgTkVYVF9JTig0KTsKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgIH0KIAotICAgICAgICBHQktfREVDT0RFKGMsIGMyLCAqKm91dGJ1ZikKLSAgICAgICAgZWxzZSBUUllNQVBfREVDKGdiMTgwMzBleHQsICoqb3V0YnVmLCBjLCBjMik7Ci0gICAgICAgIGVsc2UgcmV0dXJuIDE7CisgICAgICAgIEdCS19ERUNPREUoYywgYzIsIHdyaXRlcikKKyAgICAgICAgZWxzZSBpZiAoVFJZTUFQX0RFQyhnYjE4MDMwZXh0LCBkZWNvZGVkLCBjLCBjMikpCisgICAgICAgICAgICBPVVRDSEFSKGRlY29kZWQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gMTsKIAotICAgICAgICBORVhUKDIsIDEpCisgICAgICAgIE5FWFRfSU4oMik7CiAgICAgfQogCiAgICAgcmV0dXJuIDA7CkBAIC0zMTksNDggKzMzNCw1MSBAQAogRU5DT0RFUl9SRVNFVChoeikKIHsKICAgICBpZiAoc3RhdGUtPmkgIT0gMCkgewotICAgICAgICBXUklURTIoJ34nLCAnfScpCisgICAgICAgIFdSSVRFQllURTIoJ34nLCAnfScpOwogICAgICAgICBzdGF0ZS0+aSA9IDA7Ci0gICAgICAgIE5FWFRfT1VUKDIpCisgICAgICAgIE5FWFRfT1VUKDIpOwogICAgIH0KICAgICByZXR1cm4gMDsKIH0KIAogRU5DT0RFUihoeikKIHsKLSAgICB3aGlsZSAoaW5sZWZ0ID4gMCkgewotICAgICAgICBQeV9VTklDT0RFIGMgPSBJTjE7CisgICAgd2hpbGUgKCppbnBvcyA8IGlubGVuKSB7CisgICAgICAgIFB5X1VDUzQgYyA9IElOQ0hBUjE7CiAgICAgICAgIERCQ0hBUiBjb2RlOwogCiAgICAgICAgIGlmIChjIDwgMHg4MCkgewogICAgICAgICAgICAgaWYgKHN0YXRlLT5pID09IDApIHsKLSAgICAgICAgICAgICAgICBXUklURTEoKHVuc2lnbmVkIGNoYXIpYykKLSAgICAgICAgICAgICAgICBORVhUKDEsIDEpCisgICAgICAgICAgICAgICAgV1JJVEVCWVRFMSgodW5zaWduZWQgY2hhciljKTsKKyAgICAgICAgICAgICAgICBORVhUKDEsIDEpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgV1JJVEUzKCd+JywgJ30nLCAodW5zaWduZWQgY2hhciljKQotICAgICAgICAgICAgICAgIE5FWFQoMSwgMykKKyAgICAgICAgICAgICAgICBXUklURUJZVEUzKCd+JywgJ30nLCAodW5zaWduZWQgY2hhciljKTsKKyAgICAgICAgICAgICAgICBORVhUKDEsIDMpOwogICAgICAgICAgICAgICAgIHN0YXRlLT5pID0gMDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgVUNTNElOVkFMSUQoYykKKyAgICAgICAgaWYgKGMgPiAweEZGRkYpCisgICAgICAgICAgICByZXR1cm4gMTsKIAotICAgICAgICBUUllNQVBfRU5DKGdiY29tbW9uLCBjb2RlLCBjKTsKLSAgICAgICAgZWxzZSByZXR1cm4gMTsKKyAgICAgICAgaWYgKFRSWU1BUF9FTkMoZ2Jjb21tb24sIGNvZGUsIGMpKQorICAgICAgICAgICAgOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gMTsKIAogICAgICAgICBpZiAoY29kZSAmIDB4ODAwMCkgLyogTVNCIHNldDogR0JLICovCiAgICAgICAgICAgICByZXR1cm4gMTsKIAogICAgICAgICBpZiAoc3RhdGUtPmkgPT0gMCkgewotICAgICAgICAgICAgV1JJVEU0KCd+JywgJ3snLCBjb2RlID4+IDgsIGNvZGUgJiAweGZmKQotICAgICAgICAgICAgTkVYVCgxLCA0KQorICAgICAgICAgICAgV1JJVEVCWVRFNCgnficsICd7JywgY29kZSA+PiA4LCBjb2RlICYgMHhmZik7CisgICAgICAgICAgICBORVhUKDEsIDQpOwogICAgICAgICAgICAgc3RhdGUtPmkgPSAxOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgV1JJVEUyKGNvZGUgPj4gOCwgY29kZSAmIDB4ZmYpCi0gICAgICAgICAgICBORVhUKDEsIDIpCisgICAgICAgICAgICBXUklURUJZVEUyKGNvZGUgPj4gOCwgY29kZSAmIDB4ZmYpOworICAgICAgICAgICAgTkVYVCgxLCAyKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMzgyLDE1ICs0MDAsMTYgQEAKIERFQ09ERVIoaHopCiB7CiAgICAgd2hpbGUgKGlubGVmdCA+IDApIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciBjID0gSU4xOworICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSBJTkJZVEUxOworICAgICAgICBQeV9VQ1M0IGRlY29kZWQ7CiAKICAgICAgICAgaWYgKGMgPT0gJ34nKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGMyID0gSU4yOworICAgICAgICAgICAgdW5zaWduZWQgY2hhciBjMiA9IElOQllURTI7CiAKLSAgICAgICAgICAgIFJFUVVJUkVfSU5CVUYoMikKKyAgICAgICAgICAgIFJFUVVJUkVfSU5CVUYoMik7CiAgICAgICAgICAgICBpZiAoYzIgPT0gJ34nKSB7Ci0gICAgICAgICAgICAgICAgV1JJVEUxKCd+JykKLSAgICAgICAgICAgICAgICBORVhUKDIsIDEpCisgICAgICAgICAgICAgICAgT1VUQ0hBUignficpOworICAgICAgICAgICAgICAgIE5FWFRfSU4oMik7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIGlmIChjMiA9PSAneycgJiYgc3RhdGUtPmkgPT0gMCkKQEAgLTQwMSw3ICs0MjAsNyBAQAogICAgICAgICAgICAgICAgIDsgLyogbGluZS1jb250aW51YXRpb24gKi8KICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgICAgIE5FWFQoMiwgMCk7CisgICAgICAgICAgICBORVhUX0lOKDIpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIApAQCAtNDA5LDE0ICs0MjgsMTQgQEAKICAgICAgICAgICAgIHJldHVybiAxOwogCiAgICAgICAgIGlmIChzdGF0ZS0+aSA9PSAwKSB7IC8qIEFTQ0lJIG1vZGUgKi8KLSAgICAgICAgICAgIFdSSVRFMShjKQotICAgICAgICAgICAgTkVYVCgxLCAxKQorICAgICAgICAgICAgT1VUQ0hBUihjKTsKKyAgICAgICAgICAgIE5FWFRfSU4oMSk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7IC8qIEdCIG1vZGUgKi8KLSAgICAgICAgICAgIFJFUVVJUkVfSU5CVUYoMikKLSAgICAgICAgICAgIFJFUVVJUkVfT1VUQlVGKDEpCi0gICAgICAgICAgICBUUllNQVBfREVDKGdiMjMxMiwgKipvdXRidWYsIGMsIElOMikgewotICAgICAgICAgICAgICAgIE5FWFQoMiwgMSkKKyAgICAgICAgICAgIFJFUVVJUkVfSU5CVUYoMik7CisgICAgICAgICAgICBpZiAoVFJZTUFQX0RFQyhnYjIzMTIsIGRlY29kZWQsIGMsIElOQllURTIpKSB7CisgICAgICAgICAgICAgICAgT1VUQ0hBUihkZWNvZGVkKTsKKyAgICAgICAgICAgICAgICBORVhUX0lOKDIpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHJldHVybiAxOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9jamtjb2RlY3MvX2NvZGVjc19oay5jIGIvTW9kdWxlcy9jamtjb2RlY3MvX2NvZGVjc19oay5jCmluZGV4IGQzYWQwNGIuLjRmMjE1NjkgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvY2prY29kZWNzL19jb2RlY3NfaGsuYworKysgYi9Nb2R1bGVzL2Nqa2NvZGVjcy9fY29kZWNzX2hrLmMKQEAgLTM4LDM1ICszOCwzOSBAQAogCiBFTkNPREVSKGJpZzVoa3NjcykKIHsKLSAgICB3aGlsZSAoaW5sZWZ0ID4gMCkgewotICAgICAgICB1Y3M0X3QgYyA9ICoqaW5idWY7CisgICAgd2hpbGUgKCppbnBvcyA8IGlubGVuKSB7CisgICAgICAgIFB5X1VDUzQgYyA9IElOQ0hBUjE7CiAgICAgICAgIERCQ0hBUiBjb2RlOwogICAgICAgICBQeV9zc2l6ZV90IGluc2l6ZTsKIAogICAgICAgICBpZiAoYyA8IDB4ODApIHsKLSAgICAgICAgICAgIFJFUVVJUkVfT1VUQlVGKDEpCisgICAgICAgICAgICBSRVFVSVJFX09VVEJVRigxKTsKICAgICAgICAgICAgICoqb3V0YnVmID0gKHVuc2lnbmVkIGNoYXIpYzsKLSAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgIE5FWFQoMSwgMSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIERFQ09ERV9TVVJST0dBVEUoYykKLSAgICAgICAgaW5zaXplID0gR0VUX0lOU0laRShjKTsKLQotICAgICAgICBSRVFVSVJFX09VVEJVRigyKQorICAgICAgICBpbnNpemUgPSAxOworICAgICAgICBSRVFVSVJFX09VVEJVRigyKTsKIAogICAgICAgICBpZiAoYyA8IDB4MTAwMDApIHsKLSAgICAgICAgICAgIFRSWU1BUF9FTkMoYmlnNWhrc2NzX2JtcCwgY29kZSwgYykgeworICAgICAgICAgICAgaWYgKFRSWU1BUF9FTkMoYmlnNWhrc2NzX2JtcCwgY29kZSwgYykpIHsKICAgICAgICAgICAgICAgICBpZiAoY29kZSA9PSBNVUxUSUMpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlubGVmdCA+PSAyICYmCisgICAgICAgICAgICAgICAgICAgIFB5X1VDUzQgYzI7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbmxlbiAtICppbnBvcyA+PSAyKQorICAgICAgICAgICAgICAgICAgICAgICAgYzIgPSBJTkNIQVIyOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBjMiA9IDA7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlubGVuIC0gKmlucG9zID49IDIgJiYKICAgICAgICAgICAgICAgICAgICAgICAgICgoYyAmIDB4ZmZkZikgPT0gMHgwMGNhKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgKCgoKmluYnVmKVsxXSAmIDB4ZmZmNykgPT0gMHgwMzA0KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgKChjMiAmIDB4ZmZmNykgPT0gMHgwMzA0KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgY29kZSA9IGJpZzVoa3Njc19wYWlyZW5jX3RhYmxlWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoYyA+PiA0KSB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKmluYnVmKVsxXSA+PiAzKSkgJiAzXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGMyID4+IDMpKSAmIDNdOwogICAgICAgICAgICAgICAgICAgICAgICAgaW5zaXplID0gMjsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChpbmxlZnQgPCAyICYmCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlubGVuIC0gKmlucG9zIDwgMiAmJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhKGZsYWdzICYgTUJFTkNfRkxVU0gpKQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE1CRVJSX1RPT0ZFVzsKICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CkBAIC03NywyMSArODEsMjUgQEAKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgVFJZTUFQX0VOQyhiaWc1LCBjb2RlLCBjKTsKLSAgICAgICAgICAgIGVsc2UgcmV0dXJuIDE7CisgICAgICAgICAgICBlbHNlIGlmIChUUllNQVBfRU5DKGJpZzUsIGNvZGUsIGMpKQorICAgICAgICAgICAgICAgIDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgfQogICAgICAgICBlbHNlIGlmIChjIDwgMHgyMDAwMCkKICAgICAgICAgICAgIHJldHVybiBpbnNpemU7CiAgICAgICAgIGVsc2UgaWYgKGMgPCAweDMwMDAwKSB7Ci0gICAgICAgICAgICBUUllNQVBfRU5DKGJpZzVoa3Njc19ub25ibXAsIGNvZGUsIGMgJiAweGZmZmYpOwotICAgICAgICAgICAgZWxzZSByZXR1cm4gaW5zaXplOworICAgICAgICAgICAgaWYgKFRSWU1BUF9FTkMoYmlnNWhrc2NzX25vbmJtcCwgY29kZSwgYyAmIDB4ZmZmZikpCisgICAgICAgICAgICAgICAgOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiBpbnNpemU7CiAgICAgICAgIH0KICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmV0dXJuIGluc2l6ZTsKIAotICAgICAgICBPVVQxKGNvZGUgPj4gOCkKLSAgICAgICAgT1VUMihjb2RlICYgMHhGRikKLSAgICAgICAgTkVYVChpbnNpemUsIDIpCisgICAgICAgIE9VVEJZVEUxKGNvZGUgPj4gOCk7CisgICAgICAgIE9VVEJZVEUyKGNvZGUgJiAweEZGKTsKKyAgICAgICAgTkVYVChpbnNpemUsIDIpOwogICAgIH0KIAogICAgIHJldHVybiAwOwpAQCAtMTAyLDMzICsxMTAsMzIgQEAKIERFQ09ERVIoYmlnNWhrc2NzKQogewogICAgIHdoaWxlIChpbmxlZnQgPiAwKSB7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9IElOMTsKLSAgICAgICAgdWNzNF90IGRlY29kZWQ7Ci0KLSAgICAgICAgUkVRVUlSRV9PVVRCVUYoMSkKKyAgICAgICAgdW5zaWduZWQgY2hhciBjID0gSU5CWVRFMTsKKyAgICAgICAgUHlfVUNTNCBkZWNvZGVkOwogCiAgICAgICAgIGlmIChjIDwgMHg4MCkgewotICAgICAgICAgICAgT1VUMShjKQotICAgICAgICAgICAgTkVYVCgxLCAxKQorICAgICAgICAgICAgT1VUQ0hBUihjKTsKKyAgICAgICAgICAgIE5FWFRfSU4oMSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIFJFUVVJUkVfSU5CVUYoMikKKyAgICAgICAgUkVRVUlSRV9JTkJVRigyKTsKIAotICAgICAgICBpZiAoMHhjNiA+IGMgfHwgYyA+IDB4YzggfHwgKGMgPCAweGM3ICYmIElOMiA8IDB4YTEpKSB7Ci0gICAgICAgICAgICBUUllNQVBfREVDKGJpZzUsICoqb3V0YnVmLCBjLCBJTjIpIHsKLSAgICAgICAgICAgICAgICBORVhUKDIsIDEpCisgICAgICAgIGlmICgweGM2ID4gYyB8fCBjID4gMHhjOCB8fCAoYyA8IDB4YzcgJiYgSU5CWVRFMiA8IDB4YTEpKSB7CisgICAgICAgICAgICBpZiAoVFJZTUFQX0RFQyhiaWc1LCBkZWNvZGVkLCBjLCBJTkJZVEUyKSkgeworICAgICAgICAgICAgICAgIE9VVENIQVIoZGVjb2RlZCk7CisgICAgICAgICAgICAgICAgTkVYVF9JTigyKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIFRSWU1BUF9ERUMoYmlnNWhrc2NzLCBkZWNvZGVkLCBjLCBJTjIpCisgICAgICAgIGlmIChUUllNQVBfREVDKGJpZzVoa3NjcywgZGVjb2RlZCwgYywgSU5CWVRFMikpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGludCBzID0gQkgyUyhjLCBJTjIpOworICAgICAgICAgICAgaW50IHMgPSBCSDJTKGMsIElOQllURTIpOwogICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaGludGJhc2U7CiAKICAgICAgICAgICAgIGFzc2VydCgweDg3IDw9IGMgJiYgYyA8PSAweGZlKTsKLSAgICAgICAgICAgIGFzc2VydCgweDQwIDw9IElOMiAmJiBJTjIgPD0gMHhmZSk7CisgICAgICAgICAgICBhc3NlcnQoMHg0MCA8PSBJTkJZVEUyICYmIElOQllURTIgPD0gMHhmZSk7CiAKICAgICAgICAgICAgIGlmIChCSDJTKDB4ODcsIDB4NDApIDw9IHMgJiYgcyA8PSBCSDJTKDB4YTAsIDB4ZmUpKSB7CiAgICAgICAgICAgICAgICAgICAgIGhpbnRiYXNlID0gYmlnNWhrc2NzX3BoaW50XzA7CkBAIC0xNDYsMjUgKzE1MywyNSBAQAogICAgICAgICAgICAgICAgICAgICByZXR1cm4gTUJFUlJfSU5URVJOQUw7CiAKICAgICAgICAgICAgIGlmIChoaW50YmFzZVtzID4+IDNdICYgKDEgPDwgKHMgJiA3KSkpIHsKLSAgICAgICAgICAgICAgICAgICAgV1JJVEVVQ1M0KGRlY29kZWQgfCAweDIwMDAwKQotICAgICAgICAgICAgICAgICAgICBORVhUX0lOKDIpCisgICAgICAgICAgICAgICAgICAgIE9VVENIQVIoZGVjb2RlZCB8IDB4MjAwMDApOworICAgICAgICAgICAgICAgICAgICBORVhUX0lOKDIpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIE9VVDEoZGVjb2RlZCkKLSAgICAgICAgICAgICAgICAgICAgTkVYVCgyLCAxKQorICAgICAgICAgICAgICAgICAgICBPVVRDSEFSKGRlY29kZWQpOworICAgICAgICAgICAgICAgICAgICBORVhUX0lOKDIpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBzd2l0Y2ggKChjIDw8IDgpIHwgSU4yKSB7Ci0gICAgICAgIGNhc2UgMHg4ODYyOiBXUklURTIoMHgwMGNhLCAweDAzMDQpOyBicmVhazsKLSAgICAgICAgY2FzZSAweDg4NjQ6IFdSSVRFMigweDAwY2EsIDB4MDMwYyk7IGJyZWFrOwotICAgICAgICBjYXNlIDB4ODhhMzogV1JJVEUyKDB4MDBlYSwgMHgwMzA0KTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgMHg4OGE1OiBXUklURTIoMHgwMGVhLCAweDAzMGMpOyBicmVhazsKKyAgICAgICAgc3dpdGNoICgoYyA8PCA4KSB8IElOQllURTIpIHsKKyAgICAgICAgY2FzZSAweDg4NjI6IE9VVENIQVIyKDB4MDBjYSwgMHgwMzA0KTsgYnJlYWs7CisgICAgICAgIGNhc2UgMHg4ODY0OiBPVVRDSEFSMigweDAwY2EsIDB4MDMwYyk7IGJyZWFrOworICAgICAgICBjYXNlIDB4ODhhMzogT1VUQ0hBUjIoMHgwMGVhLCAweDAzMDQpOyBicmVhazsKKyAgICAgICAgY2FzZSAweDg4YTU6IE9VVENIQVIyKDB4MDBlYSwgMHgwMzBjKTsgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6IHJldHVybiAxOwogICAgICAgICB9CiAKLSAgICAgICAgTkVYVCgyLCAyKSAvKiBhbGwgZGVjb2RlZCBjb2RlcG9pbnRzIGFyZSBwYWlycywgYWJvdmUuICovCisgICAgICAgIE5FWFRfSU4oMik7IC8qIGFsbCBkZWNvZGVkIGNvZGUgcG9pbnRzIGFyZSBwYWlycywgYWJvdmUuICovCiAgICAgfQogCiAgICAgcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL2Nqa2NvZGVjcy9fY29kZWNzX2lzbzIwMjIuYyBiL01vZHVsZXMvY2prY29kZWNzL19jb2RlY3NfaXNvMjAyMi5jCmluZGV4IGNiYzE1NDIuLjVjNDAxYWEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvY2prY29kZWNzL19jb2RlY3NfaXNvMjAyMi5jCisrKyBiL01vZHVsZXMvY2prY29kZWNzL19jb2RlY3NfaXNvMjAyMi5jCkBAIC03Myw3ICs3Myw3IEBACiAjZGVmaW5lIEZfU0hJRlRFRCAgICAgICAgICAgICAgIDB4MDEKICNkZWZpbmUgRl9FU0NUSFJPVUdIT1VUICAgICAgICAgMHgwMgogCi0jZGVmaW5lIFNUQVRFX1NFVEcoZG4sIHYpICAgICAgICgoc3RhdGUpLT5jW2RuXSkgPSAodik7CisjZGVmaW5lIFNUQVRFX1NFVEcoZG4sIHYpICAgICAgIGRvIHsgKChzdGF0ZSktPmNbZG5dKSA9ICh2KTsgfSB3aGlsZSAoMCkKICNkZWZpbmUgU1RBVEVfR0VURyhkbikgICAgICAgICAgKChzdGF0ZSktPmNbZG5dKQogCiAjZGVmaW5lIFNUQVRFX0cwICAgICAgICAgICAgICAgIFNUQVRFX0dFVEcoMCkKQEAgLTg1LDEwICs4NSwxMCBAQAogI2RlZmluZSBTVEFURV9TRVRHMih2KSAgICAgICAgICBTVEFURV9TRVRHKDIsIHYpCiAjZGVmaW5lIFNUQVRFX1NFVEczKHYpICAgICAgICAgIFNUQVRFX1NFVEcoMywgdikKIAotI2RlZmluZSBTVEFURV9TRVRGTEFHKGYpICAgICAgICAoKHN0YXRlKS0+Y1s0XSkgfD0gKGYpOworI2RlZmluZSBTVEFURV9TRVRGTEFHKGYpICAgICAgICBkbyB7ICgoc3RhdGUpLT5jWzRdKSB8PSAoZik7IH0gd2hpbGUgKDApCiAjZGVmaW5lIFNUQVRFX0dFVEZMQUcoZikgICAgICAgICgoc3RhdGUpLT5jWzRdICYgKGYpKQotI2RlZmluZSBTVEFURV9DTEVBUkZMQUcoZikgICAgICAoKHN0YXRlKS0+Y1s0XSkgJj0gfihmKTsKLSNkZWZpbmUgU1RBVEVfQ0xFQVJGTEFHUygpICAgICAgKChzdGF0ZSktPmNbNF0pID0gMDsKKyNkZWZpbmUgU1RBVEVfQ0xFQVJGTEFHKGYpICAgICAgZG8geyAoKHN0YXRlKS0+Y1s0XSkgJj0gfihmKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgU1RBVEVfQ0xFQVJGTEFHUygpICAgICAgZG8geyAoKHN0YXRlKS0+Y1s0XSkgPSAwOyB9IHdoaWxlICgwKQogCiAjZGVmaW5lIElTTzIwMjJfQ09ORklHICAgICAgICAgICgoY29uc3Qgc3RydWN0IGlzbzIwMjJfY29uZmlnICopY29uZmlnKQogI2RlZmluZSBDT05GSUdfSVNTRVQoZmxhZykgICAgICAoSVNPMjAyMl9DT05GSUctPmZsYWdzICYgKGZsYWcpKQpAQCAtMTAyLDggKzEwMiw4IEBACiAvKi0qLSBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMgLSotKi8KIAogdHlwZWRlZiBpbnQgKCppc28yMDIyX2luaXRfZnVuYykodm9pZCk7Ci10eXBlZGVmIHVjczRfdCAoKmlzbzIwMjJfZGVjb2RlX2Z1bmMpKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpOwotdHlwZWRlZiBEQkNIQVIgKCppc28yMDIyX2VuY29kZV9mdW5jKShjb25zdCB1Y3M0X3QgKmRhdGEsIFB5X3NzaXplX3QgKmxlbmd0aCk7Cit0eXBlZGVmIFB5X1VDUzQgKCppc28yMDIyX2RlY29kZV9mdW5jKShjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKTsKK3R5cGVkZWYgREJDSEFSICgqaXNvMjAyMl9lbmNvZGVfZnVuYykoY29uc3QgUHlfVUNTNCAqZGF0YSwgUHlfc3NpemVfdCAqbGVuZ3RoKTsKIAogc3RydWN0IGlzbzIwMjJfZGVzaWduYXRpb24gewogICAgIHVuc2lnbmVkIGNoYXIgbWFyazsKQEAgLTEzMiw1MyArMTMyLDUyIEBACiAKIEVOQ09ERVJfSU5JVChpc28yMDIyKQogewotICAgIFNUQVRFX0NMRUFSRkxBR1MoKQotICAgIFNUQVRFX1NFVEcwKENIQVJTRVRfQVNDSUkpCi0gICAgU1RBVEVfU0VURzEoQ0hBUlNFVF9BU0NJSSkKKyAgICBTVEFURV9DTEVBUkZMQUdTKCk7CisgICAgU1RBVEVfU0VURzAoQ0hBUlNFVF9BU0NJSSk7CisgICAgU1RBVEVfU0VURzEoQ0hBUlNFVF9BU0NJSSk7CiAgICAgcmV0dXJuIDA7CiB9CiAKIEVOQ09ERVJfUkVTRVQoaXNvMjAyMikKIHsKICAgICBpZiAoU1RBVEVfR0VURkxBRyhGX1NISUZURUQpKSB7Ci0gICAgICAgIFdSSVRFMShTSSkKLSAgICAgICAgTkVYVF9PVVQoMSkKLSAgICAgICAgU1RBVEVfQ0xFQVJGTEFHKEZfU0hJRlRFRCkKKyAgICAgICAgV1JJVEVCWVRFMShTSSk7CisgICAgICAgIE5FWFRfT1VUKDEpOworICAgICAgICBTVEFURV9DTEVBUkZMQUcoRl9TSElGVEVEKTsKICAgICB9CiAgICAgaWYgKFNUQVRFX0cwICE9IENIQVJTRVRfQVNDSUkpIHsKLSAgICAgICAgV1JJVEUzKEVTQywgJygnLCAnQicpCi0gICAgICAgIE5FWFRfT1VUKDMpCi0gICAgICAgIFNUQVRFX1NFVEcwKENIQVJTRVRfQVNDSUkpCisgICAgICAgIFdSSVRFQllURTMoRVNDLCAnKCcsICdCJyk7CisgICAgICAgIE5FWFRfT1VUKDMpOworICAgICAgICBTVEFURV9TRVRHMChDSEFSU0VUX0FTQ0lJKTsKICAgICB9CiAgICAgcmV0dXJuIDA7CiB9CiAKIEVOQ09ERVIoaXNvMjAyMikKIHsKLSAgICB3aGlsZSAoaW5sZWZ0ID4gMCkgeworICAgIHdoaWxlICgqaW5wb3MgPCBpbmxlbikgewogICAgICAgICBjb25zdCBzdHJ1Y3QgaXNvMjAyMl9kZXNpZ25hdGlvbiAqZHNnOwogICAgICAgICBEQkNIQVIgZW5jb2RlZDsKLSAgICAgICAgdWNzNF90IGMgPSAqKmluYnVmOworICAgICAgICBQeV9VQ1M0IGMgPSBJTkNIQVIxOwogICAgICAgICBQeV9zc2l6ZV90IGluc2l6ZTsKIAogICAgICAgICBpZiAoYyA8IDB4ODApIHsKICAgICAgICAgICAgIGlmIChTVEFURV9HMCAhPSBDSEFSU0VUX0FTQ0lJKSB7Ci0gICAgICAgICAgICAgICAgV1JJVEUzKEVTQywgJygnLCAnQicpCi0gICAgICAgICAgICAgICAgU1RBVEVfU0VURzAoQ0hBUlNFVF9BU0NJSSkKLSAgICAgICAgICAgICAgICBORVhUX09VVCgzKQorICAgICAgICAgICAgICAgIFdSSVRFQllURTMoRVNDLCAnKCcsICdCJyk7CisgICAgICAgICAgICAgICAgU1RBVEVfU0VURzAoQ0hBUlNFVF9BU0NJSSk7CisgICAgICAgICAgICAgICAgTkVYVF9PVVQoMyk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoU1RBVEVfR0VURkxBRyhGX1NISUZURUQpKSB7Ci0gICAgICAgICAgICAgICAgV1JJVEUxKFNJKQotICAgICAgICAgICAgICAgIFNUQVRFX0NMRUFSRkxBRyhGX1NISUZURUQpCi0gICAgICAgICAgICAgICAgTkVYVF9PVVQoMSkKKyAgICAgICAgICAgICAgICBXUklURUJZVEUxKFNJKTsKKyAgICAgICAgICAgICAgICBTVEFURV9DTEVBUkZMQUcoRl9TSElGVEVEKTsKKyAgICAgICAgICAgICAgICBORVhUX09VVCgxKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFdSSVRFMSgodW5zaWduZWQgY2hhciljKQotICAgICAgICAgICAgTkVYVCgxLCAxKQorICAgICAgICAgICAgV1JJVEVCWVRFMSgodW5zaWduZWQgY2hhciljKTsKKyAgICAgICAgICAgIE5FWFQoMSwgMSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIERFQ09ERV9TVVJST0dBVEUoYykKLSAgICAgICAgaW5zaXplID0gR0VUX0lOU0laRShjKTsKKyAgICAgICAgaW5zaXplID0gMTsKIAogICAgICAgICBlbmNvZGVkID0gTUFQX1VOTUFQUEFCTEU7CiAgICAgICAgIGZvciAoZHNnID0gQ09ORklHX0RFU0lHTkFUSU9OUzsgZHNnLT5tYXJrOyBkc2crKykgewpAQCAtMTg3LDI0ICsxODYsMTQgQEAKICAgICAgICAgICAgIGlmIChlbmNvZGVkID09IE1BUF9NVUxUSVBMRV9BVkFJTCkgewogICAgICAgICAgICAgICAgIC8qIHRoaXMgaW1wbGVtZW50YXRpb24gd29uJ3Qgd29yayBmb3IgcGFpcgogICAgICAgICAgICAgICAgICAqIG9mIG5vbi1ibXAgY2hhcmFjdGVycy4gKi8KLSAgICAgICAgICAgICAgICBpZiAoaW5sZWZ0IDwgMikgeworICAgICAgICAgICAgICAgIGlmIChpbmxlbiAtICppbnBvcyA8IDIpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKCEoZmxhZ3MgJiBNQkVOQ19GTFVTSCkpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTUJFUlJfVE9PRkVXOwogICAgICAgICAgICAgICAgICAgICBsZW5ndGggPSAtMTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBsZW5ndGggPSAyOwotI2lmIFB5X1VOSUNPREVfU0laRSA9PSAyCi0gICAgICAgICAgICAgICAgaWYgKGxlbmd0aCA9PSAyKSB7Ci0gICAgICAgICAgICAgICAgICAgIHVjczRfdCB1NGluWzJdOwotICAgICAgICAgICAgICAgICAgICB1NGluWzBdID0gKHVjczRfdClJTjE7Ci0gICAgICAgICAgICAgICAgICAgIHU0aW5bMV0gPSAodWNzNF90KUlOMjsKLSAgICAgICAgICAgICAgICAgICAgZW5jb2RlZCA9IGRzZy0+ZW5jb2Rlcih1NGluLCAmbGVuZ3RoKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZW5jb2RlZCA9IGRzZy0+ZW5jb2RlcigmYywgJmxlbmd0aCk7Ci0jZWxzZQogICAgICAgICAgICAgICAgIGVuY29kZWQgPSBkc2ctPmVuY29kZXIoJmMsICZsZW5ndGgpOwotI2VuZGlmCiAgICAgICAgICAgICAgICAgaWYgKGVuY29kZWQgIT0gTUFQX1VOTUFQUEFCTEUpIHsKICAgICAgICAgICAgICAgICAgICAgaW5zaXplID0gbGVuZ3RoOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTIyMSw0NyArMjEwLDQ2IEBACiAgICAgICAgIHN3aXRjaCAoZHNnLT5wbGFuZSkgewogICAgICAgICBjYXNlIDA6IC8qIEcwICovCiAgICAgICAgICAgICBpZiAoU1RBVEVfR0VURkxBRyhGX1NISUZURUQpKSB7Ci0gICAgICAgICAgICAgICAgV1JJVEUxKFNJKQotICAgICAgICAgICAgICAgIFNUQVRFX0NMRUFSRkxBRyhGX1NISUZURUQpCi0gICAgICAgICAgICAgICAgTkVYVF9PVVQoMSkKKyAgICAgICAgICAgICAgICBXUklURUJZVEUxKFNJKTsKKyAgICAgICAgICAgICAgICBTVEFURV9DTEVBUkZMQUcoRl9TSElGVEVEKTsKKyAgICAgICAgICAgICAgICBORVhUX09VVCgxKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChTVEFURV9HMCAhPSBkc2ctPm1hcmspIHsKICAgICAgICAgICAgICAgICBpZiAoZHNnLT53aWR0aCA9PSAxKSB7Ci0gICAgICAgICAgICAgICAgICAgIFdSSVRFMyhFU0MsICcoJywgRVNDTUFSSyhkc2ctPm1hcmspKQotICAgICAgICAgICAgICAgICAgICBTVEFURV9TRVRHMChkc2ctPm1hcmspCi0gICAgICAgICAgICAgICAgICAgIE5FWFRfT1VUKDMpCisgICAgICAgICAgICAgICAgICAgIFdSSVRFQllURTMoRVNDLCAnKCcsIEVTQ01BUksoZHNnLT5tYXJrKSk7CisgICAgICAgICAgICAgICAgICAgIFNUQVRFX1NFVEcwKGRzZy0+bWFyayk7CisgICAgICAgICAgICAgICAgICAgIE5FWFRfT1VUKDMpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBlbHNlIGlmIChkc2ctPm1hcmsgPT0gQ0hBUlNFVF9KSVNYMDIwOCkgewotICAgICAgICAgICAgICAgICAgICBXUklURTMoRVNDLCAnJCcsIEVTQ01BUksoZHNnLT5tYXJrKSkKLSAgICAgICAgICAgICAgICAgICAgU1RBVEVfU0VURzAoZHNnLT5tYXJrKQotICAgICAgICAgICAgICAgICAgICBORVhUX09VVCgzKQorICAgICAgICAgICAgICAgICAgICBXUklURUJZVEUzKEVTQywgJyQnLCBFU0NNQVJLKGRzZy0+bWFyaykpOworICAgICAgICAgICAgICAgICAgICBTVEFURV9TRVRHMChkc2ctPm1hcmspOworICAgICAgICAgICAgICAgICAgICBORVhUX09VVCgzKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIFdSSVRFNChFU0MsICckJywgJygnLAotICAgICAgICAgICAgICAgICAgICAgICAgRVNDTUFSSyhkc2ctPm1hcmspKQotICAgICAgICAgICAgICAgICAgICBTVEFURV9TRVRHMChkc2ctPm1hcmspCi0gICAgICAgICAgICAgICAgICAgIE5FWFRfT1VUKDQpCisgICAgICAgICAgICAgICAgICAgIFdSSVRFQllURTQoRVNDLCAnJCcsICcoJywKKyAgICAgICAgICAgICAgICAgICAgICAgIEVTQ01BUksoZHNnLT5tYXJrKSk7CisgICAgICAgICAgICAgICAgICAgIFNUQVRFX1NFVEcwKGRzZy0+bWFyayk7CisgICAgICAgICAgICAgICAgICAgIE5FWFRfT1VUKDQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIDE6IC8qIEcxICovCiAgICAgICAgICAgICBpZiAoU1RBVEVfRzEgIT0gZHNnLT5tYXJrKSB7CiAgICAgICAgICAgICAgICAgaWYgKGRzZy0+d2lkdGggPT0gMSkgewotICAgICAgICAgICAgICAgICAgICBXUklURTMoRVNDLCAnKScsIEVTQ01BUksoZHNnLT5tYXJrKSkKLSAgICAgICAgICAgICAgICAgICAgU1RBVEVfU0VURzEoZHNnLT5tYXJrKQotICAgICAgICAgICAgICAgICAgICBORVhUX09VVCgzKQorICAgICAgICAgICAgICAgICAgICBXUklURUJZVEUzKEVTQywgJyknLCBFU0NNQVJLKGRzZy0+bWFyaykpOworICAgICAgICAgICAgICAgICAgICBTVEFURV9TRVRHMShkc2ctPm1hcmspOworICAgICAgICAgICAgICAgICAgICBORVhUX09VVCgzKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIFdSSVRFNChFU0MsICckJywgJyknLAotICAgICAgICAgICAgICAgICAgICAgICAgRVNDTUFSSyhkc2ctPm1hcmspKQotICAgICAgICAgICAgICAgICAgICBTVEFURV9TRVRHMShkc2ctPm1hcmspCi0gICAgICAgICAgICAgICAgICAgIE5FWFRfT1VUKDQpCisgICAgICAgICAgICAgICAgICAgIFdSSVRFQllURTQoRVNDLCAnJCcsICcpJywgRVNDTUFSSyhkc2ctPm1hcmspKTsKKyAgICAgICAgICAgICAgICAgICAgU1RBVEVfU0VURzEoZHNnLT5tYXJrKTsKKyAgICAgICAgICAgICAgICAgICAgTkVYVF9PVVQoNCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKCFTVEFURV9HRVRGTEFHKEZfU0hJRlRFRCkpIHsKLSAgICAgICAgICAgICAgICBXUklURTEoU08pCi0gICAgICAgICAgICAgICAgU1RBVEVfU0VURkxBRyhGX1NISUZURUQpCi0gICAgICAgICAgICAgICAgTkVYVF9PVVQoMSkKKyAgICAgICAgICAgICAgICBXUklURUJZVEUxKFNPKTsKKyAgICAgICAgICAgICAgICBTVEFURV9TRVRGTEFHKEZfU0hJRlRFRCk7CisgICAgICAgICAgICAgICAgTkVYVF9PVVQoMSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDogLyogRzIgYW5kIEczIGlzIG5vdCBzdXBwb3J0ZWQ6IG5vIGVuY29kaW5nIGluCkBAIC0yNzAsMTQgKzI1OCwxNCBAQAogICAgICAgICB9CiAKICAgICAgICAgaWYgKGRzZy0+d2lkdGggPT0gMSkgewotICAgICAgICAgICAgV1JJVEUxKCh1bnNpZ25lZCBjaGFyKWVuY29kZWQpCi0gICAgICAgICAgICBORVhUX09VVCgxKQorICAgICAgICAgICAgV1JJVEVCWVRFMSgodW5zaWduZWQgY2hhcillbmNvZGVkKTsKKyAgICAgICAgICAgIE5FWFRfT1VUKDEpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgV1JJVEUyKGVuY29kZWQgPj4gOCwgZW5jb2RlZCAmIDB4ZmYpCi0gICAgICAgICAgICBORVhUX09VVCgyKQorICAgICAgICAgICAgV1JJVEVCWVRFMihlbmNvZGVkID4+IDgsIGVuY29kZWQgJiAweGZmKTsKKyAgICAgICAgICAgIE5FWFRfT1VUKDIpOwogICAgICAgICB9Ci0gICAgICAgIE5FWFRfSU4oaW5zaXplKQorICAgICAgICBORVhUX0lOQ0hBUihpbnNpemUpOwogICAgIH0KIAogICAgIHJldHVybiAwOwpAQCAtMjg1LDE3ICsyNzMsMTcgQEAKIAogREVDT0RFUl9JTklUKGlzbzIwMjIpCiB7Ci0gICAgU1RBVEVfQ0xFQVJGTEFHUygpCi0gICAgU1RBVEVfU0VURzAoQ0hBUlNFVF9BU0NJSSkKLSAgICBTVEFURV9TRVRHMShDSEFSU0VUX0FTQ0lJKQotICAgIFNUQVRFX1NFVEcyKENIQVJTRVRfQVNDSUkpCisgICAgU1RBVEVfQ0xFQVJGTEFHUygpOworICAgIFNUQVRFX1NFVEcwKENIQVJTRVRfQVNDSUkpOworICAgIFNUQVRFX1NFVEcxKENIQVJTRVRfQVNDSUkpOworICAgIFNUQVRFX1NFVEcyKENIQVJTRVRfQVNDSUkpOwogICAgIHJldHVybiAwOwogfQogCiBERUNPREVSX1JFU0VUKGlzbzIwMjIpCiB7Ci0gICAgU1RBVEVfU0VURzAoQ0hBUlNFVF9BU0NJSSkKLSAgICBTVEFURV9DTEVBUkZMQUcoRl9TSElGVEVEKQorICAgIFNUQVRFX1NFVEcwKENIQVJTRVRfQVNDSUkpOworICAgIFNUQVRFX0NMRUFSRkxBRyhGX1NISUZURUQpOwogICAgIHJldHVybiAwOwogfQogCkBAIC0zMTQsOCArMzAyLDkgQEAKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKENPTkZJR19JU1NFVChVU0VfSklTWDAyMDhfRVhUKSAmJiBpKzEgPCAqaW5sZWZ0ICYmCi0gICAgICAgICAgICAgICAgICgqaW5idWYpW2ldID09ICcmJyAmJiAoKmluYnVmKVtpKzFdID09ICdAJykKKyAgICAgICAgICAgICAgICAgKCppbmJ1ZilbaV0gPT0gJyYnICYmICgqaW5idWYpW2krMV0gPT0gJ0AnKSB7CiAgICAgICAgICAgICBpICs9IDI7CisgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAoaSA+PSBNQVhfRVNDU0VRTEVOKQpAQCAtMzIzLDI3ICszMTIsMzMgQEAKIAogICAgIHN3aXRjaCAoZXNjbGVuKSB7CiAgICAgY2FzZSAzOgotICAgICAgICBpZiAoSU4yID09ICckJykgewotICAgICAgICAgICAgY2hhcnNldCA9IElOMyB8IENIQVJTRVRfREJDUzsKKyAgICAgICAgaWYgKElOQllURTIgPT0gJyQnKSB7CisgICAgICAgICAgICBjaGFyc2V0ID0gSU5CWVRFMyB8IENIQVJTRVRfREJDUzsKICAgICAgICAgICAgIGRlc2lnbmF0aW9uID0gMDsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGNoYXJzZXQgPSBJTjM7Ci0gICAgICAgICAgICBpZiAoSU4yID09ICcoJykgZGVzaWduYXRpb24gPSAwOwotICAgICAgICAgICAgZWxzZSBpZiAoSU4yID09ICcpJykgZGVzaWduYXRpb24gPSAxOwotICAgICAgICAgICAgZWxzZSBpZiAoQ09ORklHX0lTU0VUKFVTRV9HMikgJiYgSU4yID09ICcuJykKKyAgICAgICAgICAgIGNoYXJzZXQgPSBJTkJZVEUzOworICAgICAgICAgICAgaWYgKElOQllURTIgPT0gJygnKQorICAgICAgICAgICAgICAgIGRlc2lnbmF0aW9uID0gMDsKKyAgICAgICAgICAgIGVsc2UgaWYgKElOQllURTIgPT0gJyknKQorICAgICAgICAgICAgICAgIGRlc2lnbmF0aW9uID0gMTsKKyAgICAgICAgICAgIGVsc2UgaWYgKENPTkZJR19JU1NFVChVU0VfRzIpICYmIElOQllURTIgPT0gJy4nKQogICAgICAgICAgICAgICAgIGRlc2lnbmF0aW9uID0gMjsKLSAgICAgICAgICAgIGVsc2UgcmV0dXJuIDM7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIDM7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSA0OgotICAgICAgICBpZiAoSU4yICE9ICckJykKKyAgICAgICAgaWYgKElOQllURTIgIT0gJyQnKQogICAgICAgICAgICAgcmV0dXJuIDQ7CiAKLSAgICAgICAgY2hhcnNldCA9IElONCB8IENIQVJTRVRfREJDUzsKLSAgICAgICAgaWYgKElOMyA9PSAnKCcpIGRlc2lnbmF0aW9uID0gMDsKLSAgICAgICAgZWxzZSBpZiAoSU4zID09ICcpJykgZGVzaWduYXRpb24gPSAxOwotICAgICAgICBlbHNlIHJldHVybiA0OworICAgICAgICBjaGFyc2V0ID0gSU5CWVRFNCB8IENIQVJTRVRfREJDUzsKKyAgICAgICAgaWYgKElOQllURTMgPT0gJygnKQorICAgICAgICAgICAgZGVzaWduYXRpb24gPSAwOworICAgICAgICBlbHNlIGlmIChJTkJZVEUzID09ICcpJykKKyAgICAgICAgICAgIGRlc2lnbmF0aW9uID0gMTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIDQ7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgNjogLyogZGVzaWduYXRpb24gd2l0aCBwcmVmaXggKi8KICAgICAgICAgaWYgKENPTkZJR19JU1NFVChVU0VfSklTWDAyMDhfRVhUKSAmJgpAQCAtMzYzLDU4ICszNTgsNjUgQEAKICAgICBpZiAoY2hhcnNldCAhPSBDSEFSU0VUX0FTQ0lJKSB7CiAgICAgICAgIGNvbnN0IHN0cnVjdCBpc28yMDIyX2Rlc2lnbmF0aW9uICpkc2c7CiAKLSAgICAgICAgZm9yIChkc2cgPSBDT05GSUdfREVTSUdOQVRJT05TOyBkc2ctPm1hcms7IGRzZysrKQorICAgICAgICBmb3IgKGRzZyA9IENPTkZJR19ERVNJR05BVElPTlM7IGRzZy0+bWFyazsgZHNnKyspIHsKICAgICAgICAgICAgIGlmIChkc2ctPm1hcmsgPT0gY2hhcnNldCkKICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBpZiAoIWRzZy0+bWFyaykKICAgICAgICAgICAgIHJldHVybiBlc2NsZW47CiAgICAgfQogCi0gICAgU1RBVEVfU0VURyhkZXNpZ25hdGlvbiwgY2hhcnNldCkKKyAgICBTVEFURV9TRVRHKGRlc2lnbmF0aW9uLCBjaGFyc2V0KTsKICAgICAqaW5sZWZ0IC09IGVzY2xlbjsKICAgICAoKmluYnVmKSArPSBlc2NsZW47CiAgICAgcmV0dXJuIDA7CiB9CiAKLSNkZWZpbmUgSVNPODg1OV83X0RFQ09ERShjLCBhc3NpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoKGMpIDwgMHhhMCkgKGFzc2kpID0gKGMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBlbHNlIGlmICgoYykgPCAweGMwICYmICgweDI4OGYzYmM5TCAmICgxTCA8PCAoKGMpLTB4YTApKSkpICAgICAgICAgIFwKLSAgICAgICAgKGFzc2kpID0gKGMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBlbHNlIGlmICgoYykgPj0gMHhiNCAmJiAoYykgPD0gMHhmZSAmJiAoKGMpID49IDB4ZDQgfHwgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAoMHhiZmZmZmQ3N0wgJiAoMUwgPDwgKChjKS0weGI0KSkpKSkgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgKGFzc2kpID0gMHgwMmQwICsgKGMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBlbHNlIGlmICgoYykgPT0gMHhhMSkgKGFzc2kpID0gMHgyMDE4OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBlbHNlIGlmICgoYykgPT0gMHhhMikgKGFzc2kpID0gMHgyMDE5OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBlbHNlIGlmICgoYykgPT0gMHhhZikgKGFzc2kpID0gMHgyMDE1OworI2RlZmluZSBJU084ODU5XzdfREVDT0RFKGMsIHdyaXRlcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoKGMpIDwgMHhhMCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIE9VVENIQVIoYyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gZWxzZSBpZiAoKGMpIDwgMHhjMCAmJiAoMHgyODhmM2JjOUwgJiAoMUwgPDwgKChjKS0weGEwKSkpKSB7IFwKKyAgICAgICAgT1VUQ0hBUihjKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSBlbHNlIGlmICgoYykgPj0gMHhiNCAmJiAoYykgPD0gMHhmZSAmJiAoKGMpID49IDB4ZDQgfHwgICAgICAgXAorICAgICAgICAgICAgICgweGJmZmZmZDc3TCAmICgxTCA8PCAoKGMpLTB4YjQpKSkpKSB7ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgT1VUQ0hBUigweDAyZDAgKyAoYykpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSBlbHNlIGlmICgoYykgPT0gMHhhMSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBPVVRDSEFSKDB4MjAxOCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IGVsc2UgaWYgKChjKSA9PSAweGEyKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIE9VVENIQVIoMHgyMDE5KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gZWxzZSBpZiAoKGMpID09IDB4YWYpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgT1VUQ0hBUigweDIwMTUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfQogCiBzdGF0aWMgUHlfc3NpemVfdAogaXNvMjAyMnByb2Nlc3NnMihjb25zdCB2b2lkICpjb25maWcsIE11bHRpYnl0ZUNvZGVjX1N0YXRlICpzdGF0ZSwKICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqKmluYnVmLCBQeV9zc2l6ZV90ICppbmxlZnQsCi0gICAgICAgICAgICAgICAgIFB5X1VOSUNPREUgKipvdXRidWYsIFB5X3NzaXplX3QgKm91dGxlZnQpCisgICAgICAgICAgICAgICAgIF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlcikKIHsKICAgICAvKiBub3Qgd3JpdHRlbiB0byB1c2UgZW5jb2RlciwgZGVjb2RlciBmdW5jdGlvbnMgYmVjYXVzZSBvbmx5IGZldwogICAgICAqIGVuY29kaW5ncyB1c2UgRzIgZGVzaWduYXRpb25zIGluIENKS0NvZGVjcyAqLwogICAgIGlmIChTVEFURV9HMiA9PSBDSEFSU0VUX0lTTzg4NTlfMSkgewotICAgICAgICBpZiAoSU4zIDwgMHg4MCkKLSAgICAgICAgICAgIE9VVDEoSU4zICsgMHg4MCkKKyAgICAgICAgaWYgKElOQllURTMgPCAweDgwKQorICAgICAgICAgICAgT1VUQ0hBUihJTkJZVEUzICsgMHg4MCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJldHVybiAzOwogICAgIH0KICAgICBlbHNlIGlmIChTVEFURV9HMiA9PSBDSEFSU0VUX0lTTzg4NTlfNykgewotICAgICAgICBJU084ODU5XzdfREVDT0RFKElOMyBeIDB4ODAsICoqb3V0YnVmKQotICAgICAgICBlbHNlIHJldHVybiAzOworICAgICAgICBJU084ODU5XzdfREVDT0RFKElOQllURTMgXiAweDgwLCB3cml0ZXIpCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiAzOwogICAgIH0KICAgICBlbHNlIGlmIChTVEFURV9HMiA9PSBDSEFSU0VUX0FTQ0lJKSB7Ci0gICAgICAgIGlmIChJTjMgJiAweDgwKSByZXR1cm4gMzsKLSAgICAgICAgZWxzZSAqKm91dGJ1ZiA9IElOMzsKKyAgICAgICAgaWYgKElOQllURTMgJiAweDgwKQorICAgICAgICAgICAgcmV0dXJuIDM7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIE9VVENIQVIoSU5CWVRFMyk7CiAgICAgfQogICAgIGVsc2UKICAgICAgICAgcmV0dXJuIE1CRVJSX0lOVEVSTkFMOwogCiAgICAgKCppbmJ1ZikgKz0gMzsKICAgICAqaW5sZWZ0IC09IDM7Ci0gICAgKCpvdXRidWYpICs9IDE7Ci0gICAgKm91dGxlZnQgLT0gMTsKICAgICByZXR1cm4gMDsKIH0KIApAQCAtNDIzLDU4ICs0MjUsNTggQEAKICAgICBjb25zdCBzdHJ1Y3QgaXNvMjAyMl9kZXNpZ25hdGlvbiAqZHNnY2FjaGUgPSBOVUxMOwogCiAgICAgd2hpbGUgKGlubGVmdCA+IDApIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciBjID0gSU4xOworICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSBJTkJZVEUxOwogICAgICAgICBQeV9zc2l6ZV90IGVycjsKIAogICAgICAgICBpZiAoU1RBVEVfR0VURkxBRyhGX0VTQ1RIUk9VR0hPVVQpKSB7CiAgICAgICAgICAgICAvKiBFU0MgdGhyb3VnaG91dCBtb2RlOgogICAgICAgICAgICAgICogZm9yIG5vbi1pc28yMDIyIGVzY2FwZSBzZXF1ZW5jZXMgKi8KLSAgICAgICAgICAgIFdSSVRFMShjKSAvKiBhc3N1bWUgYXMgSVNPLTg4NTktMSAqLwotICAgICAgICAgICAgTkVYVCgxLCAxKQorICAgICAgICAgICAgT1VUQ0hBUihjKTsgLyogYXNzdW1lIGFzIElTTy04ODU5LTEgKi8KKyAgICAgICAgICAgIE5FWFRfSU4oMSk7CiAgICAgICAgICAgICBpZiAoSVNfRVNDRU5EKGMpKSB7Ci0gICAgICAgICAgICAgICAgU1RBVEVfQ0xFQVJGTEFHKEZfRVNDVEhST1VHSE9VVCkKKyAgICAgICAgICAgICAgICBTVEFURV9DTEVBUkZMQUcoRl9FU0NUSFJPVUdIT1VUKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKICAgICAgICAgc3dpdGNoIChjKSB7CiAgICAgICAgIGNhc2UgRVNDOgotICAgICAgICAgICAgUkVRVUlSRV9JTkJVRigyKQotICAgICAgICAgICAgaWYgKElTX0lTTzIwMjJFU0MoSU4yKSkgeworICAgICAgICAgICAgUkVRVUlSRV9JTkJVRigyKTsKKyAgICAgICAgICAgIGlmIChJU19JU08yMDIyRVNDKElOQllURTIpKSB7CiAgICAgICAgICAgICAgICAgZXJyID0gaXNvMjAyMnByb2Nlc3Nlc2MoY29uZmlnLCBzdGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmJ1ZiwgJmlubGVmdCk7CiAgICAgICAgICAgICAgICAgaWYgKGVyciAhPSAwKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoQ09ORklHX0lTU0VUKFVTRV9HMikgJiYgSU4yID09ICdOJykgey8qIFNTMiAqLwotICAgICAgICAgICAgICAgIFJFUVVJUkVfSU5CVUYoMykKKyAgICAgICAgICAgIGVsc2UgaWYgKENPTkZJR19JU1NFVChVU0VfRzIpICYmIElOQllURTIgPT0gJ04nKSB7LyogU1MyICovCisgICAgICAgICAgICAgICAgUkVRVUlSRV9JTkJVRigzKTsKICAgICAgICAgICAgICAgICBlcnIgPSBpc28yMDIycHJvY2Vzc2cyKGNvbmZpZywgc3RhdGUsCi0gICAgICAgICAgICAgICAgICAgIGluYnVmLCAmaW5sZWZ0LCBvdXRidWYsICZvdXRsZWZ0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluYnVmLCAmaW5sZWZ0LCB3cml0ZXIpOwogICAgICAgICAgICAgICAgIGlmIChlcnIgIT0gMCkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIFdSSVRFMShFU0MpCi0gICAgICAgICAgICAgICAgU1RBVEVfU0VURkxBRyhGX0VTQ1RIUk9VR0hPVVQpCi0gICAgICAgICAgICAgICAgTkVYVCgxLCAxKQorICAgICAgICAgICAgICAgIE9VVENIQVIoRVNDKTsKKyAgICAgICAgICAgICAgICBTVEFURV9TRVRGTEFHKEZfRVNDVEhST1VHSE9VVCk7CisgICAgICAgICAgICAgICAgTkVYVF9JTigxKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFNJOgogICAgICAgICAgICAgaWYgKENPTkZJR19JU1NFVChOT19TSElGVCkpCiAgICAgICAgICAgICAgICAgZ290byBieXBhc3M7Ci0gICAgICAgICAgICBTVEFURV9DTEVBUkZMQUcoRl9TSElGVEVEKQotICAgICAgICAgICAgTkVYVF9JTigxKQorICAgICAgICAgICAgU1RBVEVfQ0xFQVJGTEFHKEZfU0hJRlRFRCk7CisgICAgICAgICAgICBORVhUX0lOKDEpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgU086CiAgICAgICAgICAgICBpZiAoQ09ORklHX0lTU0VUKE5PX1NISUZUKSkKICAgICAgICAgICAgICAgICBnb3RvIGJ5cGFzczsKLSAgICAgICAgICAgIFNUQVRFX1NFVEZMQUcoRl9TSElGVEVEKQotICAgICAgICAgICAgTkVYVF9JTigxKQorICAgICAgICAgICAgU1RBVEVfU0VURkxBRyhGX1NISUZURUQpOworICAgICAgICAgICAgTkVYVF9JTigxKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIExGOgotICAgICAgICAgICAgU1RBVEVfQ0xFQVJGTEFHKEZfU0hJRlRFRCkKLSAgICAgICAgICAgIFdSSVRFMShMRikKLSAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgIFNUQVRFX0NMRUFSRkxBRyhGX1NISUZURUQpOworICAgICAgICAgICAgT1VUQ0hBUihMRik7CisgICAgICAgICAgICBORVhUX0lOKDEpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBpZiAoYyA8IDB4MjApIC8qIEMwICovCkBAIC00ODQsNyArNDg2LDcgQEAKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBpc28yMDIyX2Rlc2lnbmF0aW9uICpkc2c7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBjaGFyc2V0OwotICAgICAgICAgICAgICAgIHVjczRfdCBkZWNvZGVkOworICAgICAgICAgICAgICAgIFB5X1VDUzQgZGVjb2RlZDsKIAogICAgICAgICAgICAgICAgIGlmIChTVEFURV9HRVRGTEFHKEZfU0hJRlRFRCkpCiAgICAgICAgICAgICAgICAgICAgIGNoYXJzZXQgPSBTVEFURV9HMTsKQEAgLTQ5Miw0MyArNDk0LDQ0IEBACiAgICAgICAgICAgICAgICAgICAgIGNoYXJzZXQgPSBTVEFURV9HMDsKIAogICAgICAgICAgICAgICAgIGlmIChjaGFyc2V0ID09IENIQVJTRVRfQVNDSUkpIHsKLWJ5cGFzczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXUklURTEoYykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVhUKDEsIDEpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZHNnY2FjaGUgIT0gTlVMTCAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHNnY2FjaGUtPm1hcmsgPT0gY2hhcnNldCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc2cgPSBkc2djYWNoZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChkc2cgPSBDT05GSUdfREVTSUdOQVRJT05TOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHNnLT5tYXJrICE9IGNoYXJzZXQKLSNpZmRlZiBQeV9ERUJVRwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgZHNnLT5tYXJrICE9ICdcMCcKLSNlbmRpZgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgO2RzZysrKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbm9vcCAqLzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoZHNnLT5tYXJrICE9ICdcMCcpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzZ2NhY2hlID0gZHNnOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVRVUlSRV9JTkJVRihkc2ctPndpZHRoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNvZGVkID0gZHNnLT5kZWNvZGVyKCppbmJ1Zik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZWNvZGVkID09IE1BUF9VTk1BUFBBQkxFKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkc2ctPndpZHRoOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZWNvZGVkIDwgMHgxMDAwMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdSSVRFMShkZWNvZGVkKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FWFRfT1VUKDEpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZGVjb2RlZCA8IDB4MzAwMDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXUklURVVDUzQoZGVjb2RlZCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsgLyogSklTIFggMDIxMyBwYWlycyAqLwotICAgICAgICAgICAgICAgICAgICBXUklURTIoZGVjb2RlZCA+PiAxNiwgZGVjb2RlZCAmIDB4ZmZmZikKLSAgICAgICAgICAgICAgICAgICAgTkVYVF9PVVQoMikKK2J5cGFzczoKKyAgICAgICAgICAgICAgICAgICAgT1VUQ0hBUihjKTsKKyAgICAgICAgICAgICAgICAgICAgTkVYVF9JTigxKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIE5FWFRfSU4oZHNnLT53aWR0aCkKKworICAgICAgICAgICAgICAgIGlmIChkc2djYWNoZSAhPSBOVUxMICYmCisgICAgICAgICAgICAgICAgICAgIGRzZ2NhY2hlLT5tYXJrID09IGNoYXJzZXQpCisgICAgICAgICAgICAgICAgICAgICAgICBkc2cgPSBkc2djYWNoZTsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChkc2cgPSBDT05GSUdfREVTSUdOQVRJT05TOworICAgICAgICAgICAgICAgICAgICAgICAgIGRzZy0+bWFyayAhPSBjaGFyc2V0CisjaWZkZWYgUHlfREVCVUcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBkc2ctPm1hcmsgIT0gJ1wwJworI2VuZGlmCisgICAgICAgICAgICAgICAgICAgICAgICAgOyBkc2crKykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgLyogbm9vcCAqLworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGFzc2VydChkc2ctPm1hcmsgIT0gJ1wwJyk7CisgICAgICAgICAgICAgICAgICAgIGRzZ2NhY2hlID0gZHNnOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIFJFUVVJUkVfSU5CVUYoZHNnLT53aWR0aCk7CisgICAgICAgICAgICAgICAgZGVjb2RlZCA9IGRzZy0+ZGVjb2RlcigqaW5idWYpOworICAgICAgICAgICAgICAgIGlmIChkZWNvZGVkID09IE1BUF9VTk1BUFBBQkxFKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZHNnLT53aWR0aDsKKworICAgICAgICAgICAgICAgIGlmIChkZWNvZGVkIDwgMHgxMDAwMCkgeworICAgICAgICAgICAgICAgICAgICBPVVRDSEFSKGRlY29kZWQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChkZWNvZGVkIDwgMHgzMDAwMCkgeworICAgICAgICAgICAgICAgICAgICBPVVRDSEFSKGRlY29kZWQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsgLyogSklTIFggMDIxMyBwYWlycyAqLworICAgICAgICAgICAgICAgICAgICBPVVRDSEFSMihkZWNvZGVkID4+IDE2LCBkZWNvZGVkICYgMHhmZmZmKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgTkVYVF9JTihkc2ctPndpZHRoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC01NzcsMjUgKzU4MCwyNiBAQAogICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMgdWNzNF90CitzdGF0aWMgUHlfVUNTNAoga3N4MTAwMV9kZWNvZGVyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpCiB7Ci0gICAgdWNzNF90IHU7Ci0gICAgVFJZTUFQX0RFQyhrc3gxMDAxLCB1LCBkYXRhWzBdLCBkYXRhWzFdKQorICAgIFB5X1VDUzQgdTsKKyAgICBpZiAoVFJZTUFQX0RFQyhrc3gxMDAxLCB1LCBkYXRhWzBdLCBkYXRhWzFdKSkKICAgICAgICAgcmV0dXJuIHU7CiAgICAgZWxzZQogICAgICAgICByZXR1cm4gTUFQX1VOTUFQUEFCTEU7CiB9CiAKIHN0YXRpYyBEQkNIQVIKLWtzeDEwMDFfZW5jb2Rlcihjb25zdCB1Y3M0X3QgKmRhdGEsIFB5X3NzaXplX3QgKmxlbmd0aCkKK2tzeDEwMDFfZW5jb2Rlcihjb25zdCBQeV9VQ1M0ICpkYXRhLCBQeV9zc2l6ZV90ICpsZW5ndGgpCiB7CiAgICAgREJDSEFSIGNvZGVkOwogICAgIGFzc2VydCgqbGVuZ3RoID09IDEpOwogICAgIGlmICgqZGF0YSA8IDB4MTAwMDApIHsKLSAgICAgICAgVFJZTUFQX0VOQyhjcDk0OSwgY29kZWQsICpkYXRhKQorICAgICAgICBpZiAoVFJZTUFQX0VOQyhjcDk0OSwgY29kZWQsICpkYXRhKSkgewogICAgICAgICAgICAgaWYgKCEoY29kZWQgJiAweDgwMDApKQogICAgICAgICAgICAgICAgIHJldHVybiBjb2RlZDsKKyAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gTUFQX1VOTUFQUEFCTEU7CiB9CkBAIC02MTMsMjcgKzYxNywyNyBAQAogICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMgdWNzNF90CitzdGF0aWMgUHlfVUNTNAogamlzeDAyMDhfZGVjb2Rlcihjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKQogewotICAgIHVjczRfdCB1OworICAgIFB5X1VDUzQgdTsKICAgICBpZiAoZGF0YVswXSA9PSAweDIxICYmIGRhdGFbMV0gPT0gMHg0MCkgLyogRi9XIFJFVkVSU0UgU09MSURVUyAqLwogICAgICAgICByZXR1cm4gMHhmZjNjOwotICAgIGVsc2UgVFJZTUFQX0RFQyhqaXN4MDIwOCwgdSwgZGF0YVswXSwgZGF0YVsxXSkKKyAgICBlbHNlIGlmIChUUllNQVBfREVDKGppc3gwMjA4LCB1LCBkYXRhWzBdLCBkYXRhWzFdKSkKICAgICAgICAgcmV0dXJuIHU7CiAgICAgZWxzZQogICAgICAgICByZXR1cm4gTUFQX1VOTUFQUEFCTEU7CiB9CiAKIHN0YXRpYyBEQkNIQVIKLWppc3gwMjA4X2VuY29kZXIoY29uc3QgdWNzNF90ICpkYXRhLCBQeV9zc2l6ZV90ICpsZW5ndGgpCitqaXN4MDIwOF9lbmNvZGVyKGNvbnN0IFB5X1VDUzQgKmRhdGEsIFB5X3NzaXplX3QgKmxlbmd0aCkKIHsKICAgICBEQkNIQVIgY29kZWQ7CiAgICAgYXNzZXJ0KCpsZW5ndGggPT0gMSk7CiAgICAgaWYgKCpkYXRhIDwgMHgxMDAwMCkgewogICAgICAgICBpZiAoKmRhdGEgPT0gMHhmZjNjKSAvKiBGL1cgUkVWRVJTRSBTT0xJRFVTICovCiAgICAgICAgICAgICByZXR1cm4gMHgyMTQwOwotICAgICAgICBlbHNlIFRSWU1BUF9FTkMoamlzeGNvbW1vbiwgY29kZWQsICpkYXRhKSB7CisgICAgICAgIGVsc2UgaWYgKFRSWU1BUF9FTkMoamlzeGNvbW1vbiwgY29kZWQsICpkYXRhKSkgewogICAgICAgICAgICAgaWYgKCEoY29kZWQgJiAweDgwMDApKQogICAgICAgICAgICAgICAgIHJldHVybiBjb2RlZDsKICAgICAgICAgfQpAQCAtNjU0LDIzICs2NTgsMjMgQEAKICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIHVjczRfdAorc3RhdGljIFB5X1VDUzQKIGppc3gwMjEyX2RlY29kZXIoY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSkKIHsKLSAgICB1Y3M0X3QgdTsKLSAgICBUUllNQVBfREVDKGppc3gwMjEyLCB1LCBkYXRhWzBdLCBkYXRhWzFdKQorICAgIFB5X1VDUzQgdTsKKyAgICBpZiAoVFJZTUFQX0RFQyhqaXN4MDIxMiwgdSwgZGF0YVswXSwgZGF0YVsxXSkpCiAgICAgICAgIHJldHVybiB1OwogICAgIGVsc2UKICAgICAgICAgcmV0dXJuIE1BUF9VTk1BUFBBQkxFOwogfQogCiBzdGF0aWMgREJDSEFSCi1qaXN4MDIxMl9lbmNvZGVyKGNvbnN0IHVjczRfdCAqZGF0YSwgUHlfc3NpemVfdCAqbGVuZ3RoKQoramlzeDAyMTJfZW5jb2Rlcihjb25zdCBQeV9VQ1M0ICpkYXRhLCBQeV9zc2l6ZV90ICpsZW5ndGgpCiB7CiAgICAgREJDSEFSIGNvZGVkOwogICAgIGFzc2VydCgqbGVuZ3RoID09IDEpOwogICAgIGlmICgqZGF0YSA8IDB4MTAwMDApIHsKLSAgICAgICAgVFJZTUFQX0VOQyhqaXN4Y29tbW9uLCBjb2RlZCwgKmRhdGEpIHsKKyAgICAgICAgaWYgKFRSWU1BUF9FTkMoamlzeGNvbW1vbiwgY29kZWQsICpkYXRhKSkgewogICAgICAgICAgICAgaWYgKGNvZGVkICYgMHg4MDAwKQogICAgICAgICAgICAgICAgIHJldHVybiBjb2RlZCAmIDB4N2ZmZjsKICAgICAgICAgfQpAQCAtNzA1LDMwICs3MDksMzQgQEAKIH0KIAogI2RlZmluZSBjb25maWcgKCh2b2lkICopMjAwMCkKLXN0YXRpYyB1Y3M0X3QKK3N0YXRpYyBQeV9VQ1M0CiBqaXN4MDIxM18yMDAwXzFfZGVjb2Rlcihjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKQogewotICAgIHVjczRfdCB1OworICAgIFB5X1VDUzQgdTsKICAgICBFTVVMQVRFX0pJU1gwMjEzXzIwMDBfREVDT0RFX1BMQU5FMSh1LCBkYXRhWzBdLCBkYXRhWzFdKQogICAgIGVsc2UgaWYgKGRhdGFbMF0gPT0gMHgyMSAmJiBkYXRhWzFdID09IDB4NDApIC8qIEYvVyBSRVZFUlNFIFNPTElEVVMgKi8KICAgICAgICAgcmV0dXJuIDB4ZmYzYzsKLSAgICBlbHNlIFRSWU1BUF9ERUMoamlzeDAyMDgsIHUsIGRhdGFbMF0sIGRhdGFbMV0pOwotICAgIGVsc2UgVFJZTUFQX0RFQyhqaXN4MDIxM18xX2JtcCwgdSwgZGF0YVswXSwgZGF0YVsxXSk7Ci0gICAgZWxzZSBUUllNQVBfREVDKGppc3gwMjEzXzFfZW1wLCB1LCBkYXRhWzBdLCBkYXRhWzFdKQorICAgIGVsc2UgaWYgKFRSWU1BUF9ERUMoamlzeDAyMDgsIHUsIGRhdGFbMF0sIGRhdGFbMV0pKQorICAgICAgICA7CisgICAgZWxzZSBpZiAoVFJZTUFQX0RFQyhqaXN4MDIxM18xX2JtcCwgdSwgZGF0YVswXSwgZGF0YVsxXSkpCisgICAgICAgIDsKKyAgICBlbHNlIGlmIChUUllNQVBfREVDKGppc3gwMjEzXzFfZW1wLCB1LCBkYXRhWzBdLCBkYXRhWzFdKSkKICAgICAgICAgdSB8PSAweDIwMDAwOwotICAgIGVsc2UgVFJZTUFQX0RFQyhqaXN4MDIxM19wYWlyLCB1LCBkYXRhWzBdLCBkYXRhWzFdKTsKKyAgICBlbHNlIGlmIChUUllNQVBfREVDKGppc3gwMjEzX3BhaXIsIHUsIGRhdGFbMF0sIGRhdGFbMV0pKQorICAgICAgICA7CiAgICAgZWxzZQogICAgICAgICByZXR1cm4gTUFQX1VOTUFQUEFCTEU7CiAgICAgcmV0dXJuIHU7CiB9CiAKLXN0YXRpYyB1Y3M0X3QKK3N0YXRpYyBQeV9VQ1M0CiBqaXN4MDIxM18yMDAwXzJfZGVjb2Rlcihjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKQogewotICAgIHVjczRfdCB1OwotICAgIEVNVUxBVEVfSklTWDAyMTNfMjAwMF9ERUNPREVfUExBTkUyKHUsIGRhdGFbMF0sIGRhdGFbMV0pCi0gICAgVFJZTUFQX0RFQyhqaXN4MDIxM18yX2JtcCwgdSwgZGF0YVswXSwgZGF0YVsxXSk7Ci0gICAgZWxzZSBUUllNQVBfREVDKGppc3gwMjEzXzJfZW1wLCB1LCBkYXRhWzBdLCBkYXRhWzFdKQorICAgIFB5X1VDUzQgdTsKKyAgICBFTVVMQVRFX0pJU1gwMjEzXzIwMDBfREVDT0RFX1BMQU5FMl9DSEFSKHUsIGRhdGFbMF0sIGRhdGFbMV0pCisgICAgaWYgKFRSWU1BUF9ERUMoamlzeDAyMTNfMl9ibXAsIHUsIGRhdGFbMF0sIGRhdGFbMV0pKQorICAgICAgICA7CisgICAgZWxzZSBpZiAoVFJZTUFQX0RFQyhqaXN4MDIxM18yX2VtcCwgdSwgZGF0YVswXSwgZGF0YVsxXSkpCiAgICAgICAgIHUgfD0gMHgyMDAwMDsKICAgICBlbHNlCiAgICAgICAgIHJldHVybiBNQVBfVU5NQVBQQUJMRTsKQEAgLTczNiwyOCArNzQ0LDMyIEBACiB9CiAjdW5kZWYgY29uZmlnCiAKLXN0YXRpYyB1Y3M0X3QKK3N0YXRpYyBQeV9VQ1M0CiBqaXN4MDIxM18yMDA0XzFfZGVjb2Rlcihjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKQogewotICAgIHVjczRfdCB1OworICAgIFB5X1VDUzQgdTsKICAgICBpZiAoZGF0YVswXSA9PSAweDIxICYmIGRhdGFbMV0gPT0gMHg0MCkgLyogRi9XIFJFVkVSU0UgU09MSURVUyAqLwogICAgICAgICByZXR1cm4gMHhmZjNjOwotICAgIGVsc2UgVFJZTUFQX0RFQyhqaXN4MDIwOCwgdSwgZGF0YVswXSwgZGF0YVsxXSk7Ci0gICAgZWxzZSBUUllNQVBfREVDKGppc3gwMjEzXzFfYm1wLCB1LCBkYXRhWzBdLCBkYXRhWzFdKTsKLSAgICBlbHNlIFRSWU1BUF9ERUMoamlzeDAyMTNfMV9lbXAsIHUsIGRhdGFbMF0sIGRhdGFbMV0pCisgICAgZWxzZSBpZiAoVFJZTUFQX0RFQyhqaXN4MDIwOCwgdSwgZGF0YVswXSwgZGF0YVsxXSkpCisgICAgICAgIDsKKyAgICBlbHNlIGlmIChUUllNQVBfREVDKGppc3gwMjEzXzFfYm1wLCB1LCBkYXRhWzBdLCBkYXRhWzFdKSkKKyAgICAgICAgOworICAgIGVsc2UgaWYgKFRSWU1BUF9ERUMoamlzeDAyMTNfMV9lbXAsIHUsIGRhdGFbMF0sIGRhdGFbMV0pKQogICAgICAgICB1IHw9IDB4MjAwMDA7Ci0gICAgZWxzZSBUUllNQVBfREVDKGppc3gwMjEzX3BhaXIsIHUsIGRhdGFbMF0sIGRhdGFbMV0pOworICAgIGVsc2UgaWYgKFRSWU1BUF9ERUMoamlzeDAyMTNfcGFpciwgdSwgZGF0YVswXSwgZGF0YVsxXSkpCisgICAgICAgIDsKICAgICBlbHNlCiAgICAgICAgIHJldHVybiBNQVBfVU5NQVBQQUJMRTsKICAgICByZXR1cm4gdTsKIH0KIAotc3RhdGljIHVjczRfdAorc3RhdGljIFB5X1VDUzQKIGppc3gwMjEzXzIwMDRfMl9kZWNvZGVyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpCiB7Ci0gICAgdWNzNF90IHU7Ci0gICAgVFJZTUFQX0RFQyhqaXN4MDIxM18yX2JtcCwgdSwgZGF0YVswXSwgZGF0YVsxXSk7Ci0gICAgZWxzZSBUUllNQVBfREVDKGppc3gwMjEzXzJfZW1wLCB1LCBkYXRhWzBdLCBkYXRhWzFdKQorICAgIFB5X1VDUzQgdTsKKyAgICBpZiAoVFJZTUFQX0RFQyhqaXN4MDIxM18yX2JtcCwgdSwgZGF0YVswXSwgZGF0YVsxXSkpCisgICAgICAgIDsKKyAgICBlbHNlIGlmIChUUllNQVBfREVDKGppc3gwMjEzXzJfZW1wLCB1LCBkYXRhWzBdLCBkYXRhWzFdKSkKICAgICAgICAgdSB8PSAweDIwMDAwOwogICAgIGVsc2UKICAgICAgICAgcmV0dXJuIE1BUF9VTk1BUFBBQkxFOwpAQCAtNzY1LDcgKzc3Nyw3IEBACiB9CiAKIHN0YXRpYyBEQkNIQVIKLWppc3gwMjEzX2VuY29kZXIoY29uc3QgdWNzNF90ICpkYXRhLCBQeV9zc2l6ZV90ICpsZW5ndGgsIHZvaWQgKmNvbmZpZykKK2ppc3gwMjEzX2VuY29kZXIoY29uc3QgUHlfVUNTNCAqZGF0YSwgUHlfc3NpemVfdCAqbGVuZ3RoLCB2b2lkICpjb25maWcpCiB7CiAgICAgREJDSEFSIGNvZGVkOwogCkBAIC03NzQsMjggKzc4NiwyOCBAQAogICAgICAgICBpZiAoKmRhdGEgPj0gMHgxMDAwMCkgewogICAgICAgICAgICAgaWYgKCgqZGF0YSkgPj4gMTYgPT0gMHgyMDAwMCA+PiAxNikgewogICAgICAgICAgICAgICAgIEVNVUxBVEVfSklTWDAyMTNfMjAwMF9FTkNPREVfRU1QKGNvZGVkLCAqZGF0YSkKLSAgICAgICAgICAgICAgICBlbHNlIFRSWU1BUF9FTkMoamlzeDAyMTNfZW1wLCBjb2RlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCpkYXRhKSAmIDB4ZmZmZikKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChUUllNQVBfRU5DKGppc3gwMjEzX2VtcCwgY29kZWQsICgqZGF0YSkgJiAweGZmZmYpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29kZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gTUFQX1VOTUFQUEFCTEU7CiAgICAgICAgIH0KIAogICAgICAgICBFTVVMQVRFX0pJU1gwMjEzXzIwMDBfRU5DT0RFX0JNUChjb2RlZCwgKmRhdGEpCi0gICAgICAgIGVsc2UgVFJZTUFQX0VOQyhqaXN4MDIxM19ibXAsIGNvZGVkLCAqZGF0YSkgeworICAgICAgICBlbHNlIGlmIChUUllNQVBfRU5DKGppc3gwMjEzX2JtcCwgY29kZWQsICpkYXRhKSkgewogICAgICAgICAgICAgaWYgKGNvZGVkID09IE1VTFRJQykKICAgICAgICAgICAgICAgICByZXR1cm4gTUFQX01VTFRJUExFX0FWQUlMOwogICAgICAgICB9Ci0gICAgICAgIGVsc2UgVFJZTUFQX0VOQyhqaXN4Y29tbW9uLCBjb2RlZCwgKmRhdGEpIHsKKyAgICAgICAgZWxzZSBpZiAoVFJZTUFQX0VOQyhqaXN4Y29tbW9uLCBjb2RlZCwgKmRhdGEpKSB7CiAgICAgICAgICAgICBpZiAoY29kZWQgJiAweDgwMDApCiAgICAgICAgICAgICAgICAgcmV0dXJuIE1BUF9VTk1BUFBBQkxFOwogICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJldHVybiBNQVBfVU5NQVBQQUJMRTsKICAgICAgICAgcmV0dXJuIGNvZGVkOworCiAgICAgY2FzZSAyOiAvKiBzZWNvbmQgY2hhcmFjdGVyIG9mIHVuaWNvZGUgcGFpciAqLwogICAgICAgICBjb2RlZCA9IGZpbmRfcGFpcmVuY21hcCgodWNzMl90KWRhdGFbMF0sICh1Y3MyX3QpZGF0YVsxXSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGppc3gwMjEzX3BhaXJfZW5jbWFwLCBKSVNYMDIxM19FTkNQQUlSUyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppc3gwMjEzX3BhaXJfZW5jbWFwLCBKSVNYMDIxM19FTkNQQUlSUyk7CiAgICAgICAgIGlmIChjb2RlZCA9PSBEQkNJTlYpIHsKICAgICAgICAgICAgICpsZW5ndGggPSAxOwogICAgICAgICAgICAgY29kZWQgPSBmaW5kX3BhaXJlbmNtYXAoKHVjczJfdClkYXRhWzBdLCAwLApAQCAtODA1LDIxICs4MTcsMjQgQEAKICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXR1cm4gY29kZWQ7CisKICAgICBjYXNlIC0xOiAvKiBmbHVzaCB1bnRlcm1pbmF0ZWQgKi8KICAgICAgICAgKmxlbmd0aCA9IDE7CiAgICAgICAgIGNvZGVkID0gZmluZF9wYWlyZW5jbWFwKCh1Y3MyX3QpZGF0YVswXSwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGppc3gwMjEzX3BhaXJfZW5jbWFwLCBKSVNYMDIxM19FTkNQQUlSUyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppc3gwMjEzX3BhaXJfZW5jbWFwLCBKSVNYMDIxM19FTkNQQUlSUyk7CiAgICAgICAgIGlmIChjb2RlZCA9PSBEQkNJTlYpCiAgICAgICAgICAgICByZXR1cm4gTUFQX1VOTUFQUEFCTEU7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJldHVybiBjb2RlZDsKKyAgICAgICAgYnJlYWs7CisKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gTUFQX1VOTUFQUEFCTEU7CiAgICAgfQogfQogCiBzdGF0aWMgREJDSEFSCi1qaXN4MDIxM18yMDAwXzFfZW5jb2Rlcihjb25zdCB1Y3M0X3QgKmRhdGEsIFB5X3NzaXplX3QgKmxlbmd0aCkKK2ppc3gwMjEzXzIwMDBfMV9lbmNvZGVyKGNvbnN0IFB5X1VDUzQgKmRhdGEsIFB5X3NzaXplX3QgKmxlbmd0aCkKIHsKICAgICBEQkNIQVIgY29kZWQgPSBqaXN4MDIxM19lbmNvZGVyKGRhdGEsIGxlbmd0aCwgKHZvaWQgKikyMDAwKTsKICAgICBpZiAoY29kZWQgPT0gTUFQX1VOTUFQUEFCTEUgfHwgY29kZWQgPT0gTUFQX01VTFRJUExFX0FWQUlMKQpAQCAtODMxLDcgKzg0Niw3IEBACiB9CiAKIHN0YXRpYyBEQkNIQVIKLWppc3gwMjEzXzIwMDBfMV9lbmNvZGVyX3BhaXJvbmx5KGNvbnN0IHVjczRfdCAqZGF0YSwgUHlfc3NpemVfdCAqbGVuZ3RoKQoramlzeDAyMTNfMjAwMF8xX2VuY29kZXJfcGFpcm9ubHkoY29uc3QgUHlfVUNTNCAqZGF0YSwgUHlfc3NpemVfdCAqbGVuZ3RoKQogewogICAgIERCQ0hBUiBjb2RlZDsKICAgICBQeV9zc2l6ZV90IGlsZW5ndGggPSAqbGVuZ3RoOwpAQCAtODU0LDcgKzg2OSw3IEBACiB9CiAKIHN0YXRpYyBEQkNIQVIKLWppc3gwMjEzXzIwMDBfMl9lbmNvZGVyKGNvbnN0IHVjczRfdCAqZGF0YSwgUHlfc3NpemVfdCAqbGVuZ3RoKQoramlzeDAyMTNfMjAwMF8yX2VuY29kZXIoY29uc3QgUHlfVUNTNCAqZGF0YSwgUHlfc3NpemVfdCAqbGVuZ3RoKQogewogICAgIERCQ0hBUiBjb2RlZCA9IGppc3gwMjEzX2VuY29kZXIoZGF0YSwgbGVuZ3RoLCAodm9pZCAqKTIwMDApOwogICAgIGlmIChjb2RlZCA9PSBNQVBfVU5NQVBQQUJMRSB8fCBjb2RlZCA9PSBNQVBfTVVMVElQTEVfQVZBSUwpCkBAIC04NjYsNyArODgxLDcgQEAKIH0KIAogc3RhdGljIERCQ0hBUgotamlzeDAyMTNfMjAwNF8xX2VuY29kZXIoY29uc3QgdWNzNF90ICpkYXRhLCBQeV9zc2l6ZV90ICpsZW5ndGgpCitqaXN4MDIxM18yMDA0XzFfZW5jb2Rlcihjb25zdCBQeV9VQ1M0ICpkYXRhLCBQeV9zc2l6ZV90ICpsZW5ndGgpCiB7CiAgICAgREJDSEFSIGNvZGVkID0gamlzeDAyMTNfZW5jb2RlcihkYXRhLCBsZW5ndGgsIE5VTEwpOwogICAgIGlmIChjb2RlZCA9PSBNQVBfVU5NQVBQQUJMRSB8fCBjb2RlZCA9PSBNQVBfTVVMVElQTEVfQVZBSUwpCkBAIC04NzgsNyArODkzLDcgQEAKIH0KIAogc3RhdGljIERCQ0hBUgotamlzeDAyMTNfMjAwNF8xX2VuY29kZXJfcGFpcm9ubHkoY29uc3QgdWNzNF90ICpkYXRhLCBQeV9zc2l6ZV90ICpsZW5ndGgpCitqaXN4MDIxM18yMDA0XzFfZW5jb2Rlcl9wYWlyb25seShjb25zdCBQeV9VQ1M0ICpkYXRhLCBQeV9zc2l6ZV90ICpsZW5ndGgpCiB7CiAgICAgREJDSEFSIGNvZGVkOwogICAgIFB5X3NzaXplX3QgaWxlbmd0aCA9ICpsZW5ndGg7CkBAIC05MDEsNyArOTE2LDcgQEAKIH0KIAogc3RhdGljIERCQ0hBUgotamlzeDAyMTNfMjAwNF8yX2VuY29kZXIoY29uc3QgdWNzNF90ICpkYXRhLCBQeV9zc2l6ZV90ICpsZW5ndGgpCitqaXN4MDIxM18yMDA0XzJfZW5jb2Rlcihjb25zdCBQeV9VQ1M0ICpkYXRhLCBQeV9zc2l6ZV90ICpsZW5ndGgpCiB7CiAgICAgREJDSEFSIGNvZGVkID0gamlzeDAyMTNfZW5jb2RlcihkYXRhLCBsZW5ndGgsIE5VTEwpOwogICAgIGlmIChjb2RlZCA9PSBNQVBfVU5NQVBQQUJMRSB8fCBjb2RlZCA9PSBNQVBfTVVMVElQTEVfQVZBSUwpCkBAIC05MTIsMzkgKzkyNyw0MyBAQAogICAgICAgICByZXR1cm4gTUFQX1VOTUFQUEFCTEU7CiB9CiAKLXN0YXRpYyB1Y3M0X3QKK3N0YXRpYyBQeV9VQ1M0CiBqaXN4MDIwMV9yX2RlY29kZXIoY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSkKIHsKLSAgICB1Y3M0X3QgdTsKLSAgICBKSVNYMDIwMV9SX0RFQ09ERSgqZGF0YSwgdSkKLSAgICBlbHNlIHJldHVybiBNQVBfVU5NQVBQQUJMRTsKKyAgICBQeV9VQ1M0IHU7CisgICAgSklTWDAyMDFfUl9ERUNPREVfQ0hBUigqZGF0YSwgdSkKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBNQVBfVU5NQVBQQUJMRTsKICAgICByZXR1cm4gdTsKIH0KIAogc3RhdGljIERCQ0hBUgotamlzeDAyMDFfcl9lbmNvZGVyKGNvbnN0IHVjczRfdCAqZGF0YSwgUHlfc3NpemVfdCAqbGVuZ3RoKQoramlzeDAyMDFfcl9lbmNvZGVyKGNvbnN0IFB5X1VDUzQgKmRhdGEsIFB5X3NzaXplX3QgKmxlbmd0aCkKIHsKICAgICBEQkNIQVIgY29kZWQ7CiAgICAgSklTWDAyMDFfUl9FTkNPREUoKmRhdGEsIGNvZGVkKQotICAgIGVsc2UgcmV0dXJuIE1BUF9VTk1BUFBBQkxFOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIE1BUF9VTk1BUFBBQkxFOwogICAgIHJldHVybiBjb2RlZDsKIH0KIAotc3RhdGljIHVjczRfdAorc3RhdGljIFB5X1VDUzQKIGppc3gwMjAxX2tfZGVjb2Rlcihjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKQogewotICAgIHVjczRfdCB1OwotICAgIEpJU1gwMjAxX0tfREVDT0RFKCpkYXRhIF4gMHg4MCwgdSkKLSAgICBlbHNlIHJldHVybiBNQVBfVU5NQVBQQUJMRTsKKyAgICBQeV9VQ1M0IHU7CisgICAgSklTWDAyMDFfS19ERUNPREVfQ0hBUigqZGF0YSBeIDB4ODAsIHUpCisgICAgZWxzZQorICAgICAgICByZXR1cm4gTUFQX1VOTUFQUEFCTEU7CiAgICAgcmV0dXJuIHU7CiB9CiAKIHN0YXRpYyBEQkNIQVIKLWppc3gwMjAxX2tfZW5jb2Rlcihjb25zdCB1Y3M0X3QgKmRhdGEsIFB5X3NzaXplX3QgKmxlbmd0aCkKK2ppc3gwMjAxX2tfZW5jb2Rlcihjb25zdCBQeV9VQ1M0ICpkYXRhLCBQeV9zc2l6ZV90ICpsZW5ndGgpCiB7CiAgICAgREJDSEFSIGNvZGVkOwogICAgIEpJU1gwMjAxX0tfRU5DT0RFKCpkYXRhLCBjb2RlZCkKLSAgICBlbHNlIHJldHVybiBNQVBfVU5NQVBQQUJMRTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBNQVBfVU5NQVBQQUJMRTsKICAgICByZXR1cm4gY29kZWQgLSAweDgwOwogfQogCkBAIC05NjEsMjMgKzk4MCwyMyBAQAogICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMgdWNzNF90CitzdGF0aWMgUHlfVUNTNAogZ2IyMzEyX2RlY29kZXIoY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSkKIHsKLSAgICB1Y3M0X3QgdTsKLSAgICBUUllNQVBfREVDKGdiMjMxMiwgdSwgZGF0YVswXSwgZGF0YVsxXSkKKyAgICBQeV9VQ1M0IHU7CisgICAgaWYgKFRSWU1BUF9ERUMoZ2IyMzEyLCB1LCBkYXRhWzBdLCBkYXRhWzFdKSkKICAgICAgICAgcmV0dXJuIHU7CiAgICAgZWxzZQogICAgICAgICByZXR1cm4gTUFQX1VOTUFQUEFCTEU7CiB9CiAKIHN0YXRpYyBEQkNIQVIKLWdiMjMxMl9lbmNvZGVyKGNvbnN0IHVjczRfdCAqZGF0YSwgUHlfc3NpemVfdCAqbGVuZ3RoKQorZ2IyMzEyX2VuY29kZXIoY29uc3QgUHlfVUNTNCAqZGF0YSwgUHlfc3NpemVfdCAqbGVuZ3RoKQogewogICAgIERCQ0hBUiBjb2RlZDsKICAgICBhc3NlcnQoKmxlbmd0aCA9PSAxKTsKICAgICBpZiAoKmRhdGEgPCAweDEwMDAwKSB7Ci0gICAgICAgIFRSWU1BUF9FTkMoZ2Jjb21tb24sIGNvZGVkLCAqZGF0YSkgeworICAgICAgICBpZiAoVFJZTUFQX0VOQyhnYmNvbW1vbiwgY29kZWQsICpkYXRhKSkgewogICAgICAgICAgICAgaWYgKCEoY29kZWQgJiAweDgwMDApKQogICAgICAgICAgICAgICAgIHJldHVybiBjb2RlZDsKICAgICAgICAgfQpAQCAtOTg2LDE0ICsxMDA1LDE0IEBACiB9CiAKIAotc3RhdGljIHVjczRfdAorc3RhdGljIFB5X1VDUzQKIGR1bW15X2RlY29kZXIoY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSkKIHsKICAgICByZXR1cm4gTUFQX1VOTUFQUEFCTEU7CiB9CiAKIHN0YXRpYyBEQkNIQVIKLWR1bW15X2VuY29kZXIoY29uc3QgdWNzNF90ICpkYXRhLCBQeV9zc2l6ZV90ICpsZW5ndGgpCitkdW1teV9lbmNvZGVyKGNvbnN0IFB5X1VDUzQgKmRhdGEsIFB5X3NzaXplX3QgKmxlbmd0aCkKIHsKICAgICByZXR1cm4gTUFQX1VOTUFQUEFCTEU7CiB9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL2Nqa2NvZGVjcy9fY29kZWNzX2pwLmMgYi9Nb2R1bGVzL2Nqa2NvZGVjcy9fY29kZWNzX2pwLmMKaW5kZXggYTUwMDY5Ni4uMmM3Nzg4YSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9jamtjb2RlY3MvX2NvZGVjc19qcC5jCisrKyBiL01vZHVsZXMvY2prY29kZWNzL19jb2RlY3NfanAuYwpAQCAtMTksNDAgKzE5LDQxIEBACiAKIEVOQ09ERVIoY3A5MzIpCiB7Ci0gICAgd2hpbGUgKGlubGVmdCA+IDApIHsKLSAgICAgICAgUHlfVU5JQ09ERSBjID0gSU4xOworICAgIHdoaWxlICgqaW5wb3MgPCBpbmxlbikgeworICAgICAgICBQeV9VQ1M0IGMgPSBJTkNIQVIxOwogICAgICAgICBEQkNIQVIgY29kZTsKICAgICAgICAgdW5zaWduZWQgY2hhciBjMSwgYzI7CiAKICAgICAgICAgaWYgKGMgPD0gMHg4MCkgewotICAgICAgICAgICAgV1JJVEUxKCh1bnNpZ25lZCBjaGFyKWMpCi0gICAgICAgICAgICBORVhUKDEsIDEpCisgICAgICAgICAgICBXUklURUJZVEUxKCh1bnNpZ25lZCBjaGFyKWMpOworICAgICAgICAgICAgTkVYVCgxLCAxKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKGMgPj0gMHhmZjYxICYmIGMgPD0gMHhmZjlmKSB7Ci0gICAgICAgICAgICBXUklURTEoYyAtIDB4ZmVjMCkKLSAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgIFdSSVRFQllURTEoYyAtIDB4ZmVjMCk7CisgICAgICAgICAgICBORVhUKDEsIDEpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoYyA+PSAweGY4ZjAgJiYgYyA8PSAweGY4ZjMpIHsKICAgICAgICAgICAgIC8qIFdpbmRvd3MgY29tcGF0aWJpbGl0eSAqLwotICAgICAgICAgICAgUkVRVUlSRV9PVVRCVUYoMSkKKyAgICAgICAgICAgIFJFUVVJUkVfT1VUQlVGKDEpOwogICAgICAgICAgICAgaWYgKGMgPT0gMHhmOGYwKQotICAgICAgICAgICAgICAgIE9VVDEoMHhhMCkKKyAgICAgICAgICAgICAgICBPVVRCWVRFMSgweGEwKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBPVVQxKGMgLSAweGZlZjEgKyAweGZkKQotICAgICAgICAgICAgTkVYVCgxLCAxKQorICAgICAgICAgICAgICAgIE9VVEJZVEUxKGMgLSAweGZlZjEgKyAweGZkKTsKKyAgICAgICAgICAgIE5FWFQoMSwgMSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIFVDUzRJTlZBTElEKGMpCi0gICAgICAgIFJFUVVJUkVfT1VUQlVGKDIpCisgICAgICAgIGlmIChjID4gMHhGRkZGKQorICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIFJFUVVJUkVfT1VUQlVGKDIpOwogCi0gICAgICAgIFRSWU1BUF9FTkMoY3A5MzJleHQsIGNvZGUsIGMpIHsKLSAgICAgICAgICAgIE9VVDEoY29kZSA+PiA4KQotICAgICAgICAgICAgT1VUMihjb2RlICYgMHhmZikKKyAgICAgICAgaWYgKFRSWU1BUF9FTkMoY3A5MzJleHQsIGNvZGUsIGMpKSB7CisgICAgICAgICAgICBPVVRCWVRFMShjb2RlID4+IDgpOworICAgICAgICAgICAgT1VUQllURTIoY29kZSAmIDB4ZmYpOwogICAgICAgICB9Ci0gICAgICAgIGVsc2UgVFJZTUFQX0VOQyhqaXN4Y29tbW9uLCBjb2RlLCBjKSB7CisgICAgICAgIGVsc2UgaWYgKFRSWU1BUF9FTkMoamlzeGNvbW1vbiwgY29kZSwgYykpIHsKICAgICAgICAgICAgIGlmIChjb2RlICYgMHg4MDAwKSAvKiBNU0Igc2V0OiBKSVMgWCAwMjEyICovCiAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAKQEAgLTYxLDIwICs2MiwyMCBAQAogICAgICAgICAgICAgYzIgPSBjb2RlICYgMHhmZjsKICAgICAgICAgICAgIGMyID0gKCgoYzEgLSAweDIxKSAmIDEpID8gMHg1ZSA6IDApICsgKGMyIC0gMHgyMSk7CiAgICAgICAgICAgICBjMSA9IChjMSAtIDB4MjEpID4+IDE7Ci0gICAgICAgICAgICBPVVQxKGMxIDwgMHgxZiA/IGMxICsgMHg4MSA6IGMxICsgMHhjMSkKLSAgICAgICAgICAgIE9VVDIoYzIgPCAweDNmID8gYzIgKyAweDQwIDogYzIgKyAweDQxKQorICAgICAgICAgICAgT1VUQllURTEoYzEgPCAweDFmID8gYzEgKyAweDgxIDogYzEgKyAweGMxKTsKKyAgICAgICAgICAgIE9VVEJZVEUyKGMyIDwgMHgzZiA/IGMyICsgMHg0MCA6IGMyICsgMHg0MSk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoYyA+PSAweGUwMDAgJiYgYyA8IDB4ZTc1OCkgewogICAgICAgICAgICAgLyogVXNlci1kZWZpbmVkIGFyZWEgKi8KLSAgICAgICAgICAgIGMxID0gKFB5X1VOSUNPREUpKGMgLSAweGUwMDApIC8gMTg4OwotICAgICAgICAgICAgYzIgPSAoUHlfVU5JQ09ERSkoYyAtIDB4ZTAwMCkgJSAxODg7Ci0gICAgICAgICAgICBPVVQxKGMxICsgMHhmMCkKLSAgICAgICAgICAgIE9VVDIoYzIgPCAweDNmID8gYzIgKyAweDQwIDogYzIgKyAweDQxKQorICAgICAgICAgICAgYzEgPSAoUHlfVUNTNCkoYyAtIDB4ZTAwMCkgLyAxODg7CisgICAgICAgICAgICBjMiA9IChQeV9VQ1M0KShjIC0gMHhlMDAwKSAlIDE4ODsKKyAgICAgICAgICAgIE9VVEJZVEUxKGMxICsgMHhmMCk7CisgICAgICAgICAgICBPVVRCWVRFMihjMiA8IDB4M2YgPyBjMiArIDB4NDAgOiBjMiArIDB4NDEpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJldHVybiAxOwogCi0gICAgICAgIE5FWFQoMSwgMikKKyAgICAgICAgTkVYVCgxLCAyKTsKICAgICB9CiAKICAgICByZXR1cm4gMDsKQEAgLTgzLDMzICs4NCwzNCBAQAogREVDT0RFUihjcDkzMikKIHsKICAgICB3aGlsZSAoaW5sZWZ0ID4gMCkgewotICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSBJTjEsIGMyOworICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSBJTkJZVEUxLCBjMjsKKyAgICAgICAgUHlfVUNTNCBkZWNvZGVkOwogCi0gICAgICAgIFJFUVVJUkVfT1VUQlVGKDEpCiAgICAgICAgIGlmIChjIDw9IDB4ODApIHsKLSAgICAgICAgICAgIE9VVDEoYykKLSAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgIE9VVENIQVIoYyk7CisgICAgICAgICAgICBORVhUX0lOKDEpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoYyA+PSAweGEwICYmIGMgPD0gMHhkZikgewogICAgICAgICAgICAgaWYgKGMgPT0gMHhhMCkKLSAgICAgICAgICAgICAgICBPVVQxKDB4ZjhmMCkgLyogaGFsZi13aWR0aCBrYXRha2FuYSAqLworICAgICAgICAgICAgICAgIE9VVENIQVIoMHhmOGYwKTsgLyogaGFsZi13aWR0aCBrYXRha2FuYSAqLwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIE9VVDEoMHhmZWMwICsgYykKLSAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgICAgICBPVVRDSEFSKDB4ZmVjMCArIGMpOworICAgICAgICAgICAgTkVYVF9JTigxKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKGMgPj0gMHhmZC8qICYmIGMgPD0gMHhmZiovKSB7CiAgICAgICAgICAgICAvKiBXaW5kb3dzIGNvbXBhdGliaWxpdHkgKi8KLSAgICAgICAgICAgIE9VVDEoMHhmOGYxIC0gMHhmZCArIGMpCi0gICAgICAgICAgICBORVhUKDEsIDEpCisgICAgICAgICAgICBPVVRDSEFSKDB4ZjhmMSAtIDB4ZmQgKyBjKTsKKyAgICAgICAgICAgIE5FWFRfSU4oMSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIFJFUVVJUkVfSU5CVUYoMikKLSAgICAgICAgYzIgPSBJTjI7CisgICAgICAgIFJFUVVJUkVfSU5CVUYoMik7CisgICAgICAgIGMyID0gSU5CWVRFMjsKIAotICAgICAgICBUUllNQVBfREVDKGNwOTMyZXh0LCAqKm91dGJ1ZiwgYywgYzIpOworICAgICAgICBpZiAoVFJZTUFQX0RFQyhjcDkzMmV4dCwgZGVjb2RlZCwgYywgYzIpKQorICAgICAgICAgICAgT1VUQ0hBUihkZWNvZGVkKTsKICAgICAgICAgZWxzZSBpZiAoKGMgPj0gMHg4MSAmJiBjIDw9IDB4OWYpIHx8IChjID49IDB4ZTAgJiYgYyA8PSAweGVhKSl7CiAgICAgICAgICAgICBpZiAoYzIgPCAweDQwIHx8IChjMiA+IDB4N2UgJiYgYzIgPCAweDgwKSB8fCBjMiA+IDB4ZmMpCiAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CkBAIC0xMTksMjEgKzEyMSwyMyBAQAogICAgICAgICAgICAgYyA9ICgyICogYyArIChjMiA8IDB4NWUgPyAwIDogMSkgKyAweDIxKTsKICAgICAgICAgICAgIGMyID0gKGMyIDwgMHg1ZSA/IGMyIDogYzIgLSAweDVlKSArIDB4MjE7CiAKLSAgICAgICAgICAgIFRSWU1BUF9ERUMoamlzeDAyMDgsICoqb3V0YnVmLCBjLCBjMik7Ci0gICAgICAgICAgICBlbHNlIHJldHVybiAxOworICAgICAgICAgICAgaWYgKFRSWU1BUF9ERUMoamlzeDAyMDgsIGRlY29kZWQsIGMsIGMyKSkKKyAgICAgICAgICAgICAgICBPVVRDSEFSKGRlY29kZWQpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKGMgPj0gMHhmMCAmJiBjIDw9IDB4ZjkpIHsKICAgICAgICAgICAgIGlmICgoYzIgPj0gMHg0MCAmJiBjMiA8PSAweDdlKSB8fAogICAgICAgICAgICAgICAgIChjMiA+PSAweDgwICYmIGMyIDw9IDB4ZmMpKQotICAgICAgICAgICAgICAgIE9VVDEoMHhlMDAwICsgMTg4ICogKGMgLSAweGYwKSArCi0gICAgICAgICAgICAgICAgICAgICAoYzIgPCAweDgwID8gYzIgLSAweDQwIDogYzIgLSAweDQxKSkKKyAgICAgICAgICAgICAgICBPVVRDSEFSKDB4ZTAwMCArIDE4OCAqIChjIC0gMHhmMCkgKworICAgICAgICAgICAgICAgICAgICAoYzIgPCAweDgwID8gYzIgLSAweDQwIDogYzIgLSAweDQxKSk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgIH0KICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmV0dXJuIDE7CiAKLSAgICAgICAgTkVYVCgyLCAxKQorICAgICAgICBORVhUX0lOKDIpOwogICAgIH0KIAogICAgIHJldHVybiAwOwpAQCAtMTQ2LDI1ICsxNTAsMjQgQEAKIAogRU5DT0RFUihldWNfamlzXzIwMDQpCiB7Ci0gICAgd2hpbGUgKGlubGVmdCA+IDApIHsKLSAgICAgICAgdWNzNF90IGMgPSBJTjE7CisgICAgd2hpbGUgKCppbnBvcyA8IGlubGVuKSB7CisgICAgICAgIFB5X1VDUzQgYyA9IElOQ0hBUjE7CiAgICAgICAgIERCQ0hBUiBjb2RlOwogICAgICAgICBQeV9zc2l6ZV90IGluc2l6ZTsKIAogICAgICAgICBpZiAoYyA8IDB4ODApIHsKLSAgICAgICAgICAgIFdSSVRFMShjKQotICAgICAgICAgICAgTkVYVCgxLCAxKQorICAgICAgICAgICAgV1JJVEVCWVRFMShjKTsKKyAgICAgICAgICAgIE5FWFQoMSwgMSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIERFQ09ERV9TVVJST0dBVEUoYykKLSAgICAgICAgaW5zaXplID0gR0VUX0lOU0laRShjKTsKKyAgICAgICAgaW5zaXplID0gMTsKIAogICAgICAgICBpZiAoYyA8PSAweEZGRkYpIHsKICAgICAgICAgICAgIEVNVUxBVEVfSklTWDAyMTNfMjAwMF9FTkNPREVfQk1QKGNvZGUsIGMpCi0gICAgICAgICAgICBlbHNlIFRSWU1BUF9FTkMoamlzeDAyMTNfYm1wLCBjb2RlLCBjKSB7CisgICAgICAgICAgICBlbHNlIGlmIChUUllNQVBfRU5DKGppc3gwMjEzX2JtcCwgY29kZSwgYykpIHsKICAgICAgICAgICAgICAgICBpZiAoY29kZSA9PSBNVUxUSUMpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlubGVmdCA8IDIpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlubGVuIC0gKmlucG9zIDwgMikgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZsYWdzICYgTUJFTkNfRkxVU0gpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlID0gZmluZF9wYWlyZW5jbWFwKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWNzMl90KWMsIDAsCkBAIC0xNzcsOCArMTgwLDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTUJFUlJfVE9PRkVXOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgUHlfVUNTNCBjMiA9IElOQ0hBUjI7CiAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlID0gZmluZF9wYWlyZW5jbWFwKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1Y3MyX3QpYywgKCppbmJ1ZilbMV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVjczJfdCljLCBjMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaXN4MDIxM19wYWlyX2VuY21hcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKSVNYMDIxM19FTkNQQUlSUyk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29kZSA9PSBEQkNJTlYpIHsKQEAgLTE5MywxMSArMTk3LDEyIEBACiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIFRSWU1BUF9FTkMoamlzeGNvbW1vbiwgY29kZSwgYyk7CisgICAgICAgICAgICBlbHNlIGlmIChUUllNQVBfRU5DKGppc3hjb21tb24sIGNvZGUsIGMpKQorICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgIGVsc2UgaWYgKGMgPj0gMHhmZjYxICYmIGMgPD0gMHhmZjlmKSB7CiAgICAgICAgICAgICAgICAgLyogSklTIFggMDIwMSBoYWxmLXdpZHRoIGthdGFrYW5hICovCi0gICAgICAgICAgICAgICAgV1JJVEUyKDB4OGUsIGMgLSAweGZlYzApCi0gICAgICAgICAgICAgICAgTkVYVCgxLCAyKQorICAgICAgICAgICAgICAgIFdSSVRFQllURTIoMHg4ZSwgYyAtIDB4ZmVjMCk7CisgICAgICAgICAgICAgICAgTkVYVCgxLCAyKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgaWYgKGMgPT0gMHhmZjNjKQpAQCAtMjExLDIwICsyMTYsMjIgQEAKICAgICAgICAgfQogICAgICAgICBlbHNlIGlmIChjID4+IDE2ID09IEVNUEJBU0UgPj4gMTYpIHsKICAgICAgICAgICAgIEVNVUxBVEVfSklTWDAyMTNfMjAwMF9FTkNPREVfRU1QKGNvZGUsIGMpCi0gICAgICAgICAgICBlbHNlIFRSWU1BUF9FTkMoamlzeDAyMTNfZW1wLCBjb2RlLCBjICYgMHhmZmZmKTsKLSAgICAgICAgICAgIGVsc2UgcmV0dXJuIGluc2l6ZTsKKyAgICAgICAgICAgIGVsc2UgaWYgKFRSWU1BUF9FTkMoamlzeDAyMTNfZW1wLCBjb2RlLCBjICYgMHhmZmZmKSkKKyAgICAgICAgICAgICAgICA7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIGluc2l6ZTsKICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXR1cm4gaW5zaXplOwogCiAgICAgICAgIGlmIChjb2RlICYgMHg4MDAwKSB7CiAgICAgICAgICAgICAvKiBDb2Rlc2V0IDIgKi8KLSAgICAgICAgICAgIFdSSVRFMygweDhmLCBjb2RlID4+IDgsIChjb2RlICYgMHhGRikgfCAweDgwKQotICAgICAgICAgICAgTkVYVChpbnNpemUsIDMpCisgICAgICAgICAgICBXUklURUJZVEUzKDB4OGYsIGNvZGUgPj4gOCwgKGNvZGUgJiAweEZGKSB8IDB4ODApOworICAgICAgICAgICAgTkVYVChpbnNpemUsIDMpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLyogQ29kZXNldCAxICovCi0gICAgICAgICAgICBXUklURTIoKGNvZGUgPj4gOCkgfCAweDgwLCAoY29kZSAmIDB4RkYpIHwgMHg4MCkKLSAgICAgICAgICAgIE5FWFQoaW5zaXplLCAyKQorICAgICAgICAgICAgV1JJVEVCWVRFMigoY29kZSA+PiA4KSB8IDB4ODAsIChjb2RlICYgMHhGRikgfCAweDgwKTsKKyAgICAgICAgICAgIE5FWFQoaW5zaXplLCAyKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjM0LDE0ICsyNDEsMTIgQEAKIERFQ09ERVIoZXVjX2ppc18yMDA0KQogewogICAgIHdoaWxlIChpbmxlZnQgPiAwKSB7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9IElOMTsKLSAgICAgICAgdWNzNF90IGNvZGU7Ci0KLSAgICAgICAgUkVRVUlSRV9PVVRCVUYoMSkKKyAgICAgICAgdW5zaWduZWQgY2hhciBjID0gSU5CWVRFMTsKKyAgICAgICAgUHlfVUNTNCBjb2RlLCBkZWNvZGVkOwogCiAgICAgICAgIGlmIChjIDwgMHg4MCkgewotICAgICAgICAgICAgT1VUMShjKQotICAgICAgICAgICAgTkVYVCgxLCAxKQorICAgICAgICAgICAgT1VUQ0hBUihjKTsKKyAgICAgICAgICAgIE5FWFRfSU4oMSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCkBAIC0yNDksMTEgKzI1NCwxMSBAQAogICAgICAgICAgICAgLyogSklTIFggMDIwMSBoYWxmLXdpZHRoIGthdGFrYW5hICovCiAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGMyOwogCi0gICAgICAgICAgICBSRVFVSVJFX0lOQlVGKDIpCi0gICAgICAgICAgICBjMiA9IElOMjsKKyAgICAgICAgICAgIFJFUVVJUkVfSU5CVUYoMik7CisgICAgICAgICAgICBjMiA9IElOQllURTI7CiAgICAgICAgICAgICBpZiAoYzIgPj0gMHhhMSAmJiBjMiA8PSAweGRmKSB7Ci0gICAgICAgICAgICAgICAgT1VUMSgweGZlYzAgKyBjMikKLSAgICAgICAgICAgICAgICBORVhUKDIsIDEpCisgICAgICAgICAgICAgICAgT1VUQ0hBUigweGZlYzAgKyBjMik7CisgICAgICAgICAgICAgICAgTkVYVF9JTigyKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICByZXR1cm4gMTsKQEAgLTI2MSw0NyArMjY2LDU1IEBACiAgICAgICAgIGVsc2UgaWYgKGMgPT0gMHg4ZikgewogICAgICAgICAgICAgdW5zaWduZWQgY2hhciBjMiwgYzM7CiAKLSAgICAgICAgICAgIFJFUVVJUkVfSU5CVUYoMykKLSAgICAgICAgICAgIGMyID0gSU4yIF4gMHg4MDsKLSAgICAgICAgICAgIGMzID0gSU4zIF4gMHg4MDsKKyAgICAgICAgICAgIFJFUVVJUkVfSU5CVUYoMyk7CisgICAgICAgICAgICBjMiA9IElOQllURTIgXiAweDgwOworICAgICAgICAgICAgYzMgPSBJTkJZVEUzIF4gMHg4MDsKIAogICAgICAgICAgICAgLyogSklTIFggMDIxMyBQbGFuZSAyIG9yIEpJUyBYIDAyMTIgKHNlZSBOT1RFUykgKi8KLSAgICAgICAgICAgIEVNVUxBVEVfSklTWDAyMTNfMjAwMF9ERUNPREVfUExBTkUyKCoqb3V0YnVmLCBjMiwgYzMpCi0gICAgICAgICAgICBlbHNlIFRSWU1BUF9ERUMoamlzeDAyMTNfMl9ibXAsICoqb3V0YnVmLCBjMiwgYzMpIDsKLSAgICAgICAgICAgIGVsc2UgVFJZTUFQX0RFQyhqaXN4MDIxM18yX2VtcCwgY29kZSwgYzIsIGMzKSB7Ci0gICAgICAgICAgICAgICAgV1JJVEVVQ1M0KEVNUEJBU0UgfCBjb2RlKQotICAgICAgICAgICAgICAgIE5FWFRfSU4oMykKKyAgICAgICAgICAgIEVNVUxBVEVfSklTWDAyMTNfMjAwMF9ERUNPREVfUExBTkUyKHdyaXRlciwgYzIsIGMzKQorICAgICAgICAgICAgZWxzZSBpZiAoVFJZTUFQX0RFQyhqaXN4MDIxM18yX2JtcCwgZGVjb2RlZCwgYzIsIGMzKSkKKyAgICAgICAgICAgICAgICBPVVRDSEFSKGRlY29kZWQpOworICAgICAgICAgICAgZWxzZSBpZiAoVFJZTUFQX0RFQyhqaXN4MDIxM18yX2VtcCwgY29kZSwgYzIsIGMzKSkgeworICAgICAgICAgICAgICAgIE9VVENIQVIoRU1QQkFTRSB8IGNvZGUpOworICAgICAgICAgICAgICAgIE5FWFRfSU4oMyk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIFRSWU1BUF9ERUMoamlzeDAyMTIsICoqb3V0YnVmLCBjMiwgYzMpIDsKLSAgICAgICAgICAgIGVsc2UgcmV0dXJuIDE7Ci0gICAgICAgICAgICBORVhUKDMsIDEpCisgICAgICAgICAgICBlbHNlIGlmIChUUllNQVBfREVDKGppc3gwMjEyLCBkZWNvZGVkLCBjMiwgYzMpKQorICAgICAgICAgICAgICAgIE9VVENIQVIoZGVjb2RlZCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICBORVhUX0lOKDMpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgdW5zaWduZWQgY2hhciBjMjsKIAotICAgICAgICAgICAgUkVRVUlSRV9JTkJVRigyKQorICAgICAgICAgICAgUkVRVUlSRV9JTkJVRigyKTsKICAgICAgICAgICAgIGMgXj0gMHg4MDsKLSAgICAgICAgICAgIGMyID0gSU4yIF4gMHg4MDsKKyAgICAgICAgICAgIGMyID0gSU5CWVRFMiBeIDB4ODA7CiAKICAgICAgICAgICAgIC8qIEpJUyBYIDAyMTMgUGxhbmUgMSAqLwotICAgICAgICAgICAgRU1VTEFURV9KSVNYMDIxM18yMDAwX0RFQ09ERV9QTEFORTEoKipvdXRidWYsIGMsIGMyKQotICAgICAgICAgICAgZWxzZSBpZiAoYyA9PSAweDIxICYmIGMyID09IDB4NDApICoqb3V0YnVmID0gMHhmZjNjOwotICAgICAgICAgICAgZWxzZSBpZiAoYyA9PSAweDIyICYmIGMyID09IDB4MzIpICoqb3V0YnVmID0gMHhmZjVlOwotICAgICAgICAgICAgZWxzZSBUUllNQVBfREVDKGppc3gwMjA4LCAqKm91dGJ1ZiwgYywgYzIpOwotICAgICAgICAgICAgZWxzZSBUUllNQVBfREVDKGppc3gwMjEzXzFfYm1wLCAqKm91dGJ1ZiwgYywgYzIpOwotICAgICAgICAgICAgZWxzZSBUUllNQVBfREVDKGppc3gwMjEzXzFfZW1wLCBjb2RlLCBjLCBjMikgewotICAgICAgICAgICAgICAgIFdSSVRFVUNTNChFTVBCQVNFIHwgY29kZSkKLSAgICAgICAgICAgICAgICBORVhUX0lOKDIpCisgICAgICAgICAgICBFTVVMQVRFX0pJU1gwMjEzXzIwMDBfREVDT0RFX1BMQU5FMSh3cml0ZXIsIGMsIGMyKQorICAgICAgICAgICAgZWxzZSBpZiAoYyA9PSAweDIxICYmIGMyID09IDB4NDApCisgICAgICAgICAgICAgICAgT1VUQ0hBUigweGZmM2MpOworICAgICAgICAgICAgZWxzZSBpZiAoYyA9PSAweDIyICYmIGMyID09IDB4MzIpCisgICAgICAgICAgICAgICAgT1VUQ0hBUigweGZmNWUpOworICAgICAgICAgICAgZWxzZSBpZiAoVFJZTUFQX0RFQyhqaXN4MDIwOCwgZGVjb2RlZCwgYywgYzIpKQorICAgICAgICAgICAgICAgIE9VVENIQVIoZGVjb2RlZCk7CisgICAgICAgICAgICBlbHNlIGlmIChUUllNQVBfREVDKGppc3gwMjEzXzFfYm1wLCBkZWNvZGVkLCBjLCBjMikpCisgICAgICAgICAgICAgICAgT1VUQ0hBUihkZWNvZGVkKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKFRSWU1BUF9ERUMoamlzeDAyMTNfMV9lbXAsIGNvZGUsIGMsIGMyKSkgeworICAgICAgICAgICAgICAgIE9VVENIQVIoRU1QQkFTRSB8IGNvZGUpOworICAgICAgICAgICAgICAgIE5FWFRfSU4oMik7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIFRSWU1BUF9ERUMoamlzeDAyMTNfcGFpciwgY29kZSwgYywgYzIpIHsKLSAgICAgICAgICAgICAgICBXUklURTIoY29kZSA+PiAxNiwgY29kZSAmIDB4ZmZmZikKLSAgICAgICAgICAgICAgICBORVhUKDIsIDIpCisgICAgICAgICAgICBlbHNlIGlmIChUUllNQVBfREVDKGppc3gwMjEzX3BhaXIsIGNvZGUsIGMsIGMyKSkgeworICAgICAgICAgICAgICAgIE9VVENIQVIyKGNvZGUgPj4gMTYsIGNvZGUgJiAweGZmZmYpOworICAgICAgICAgICAgICAgIE5FWFRfSU4oMik7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHJldHVybiAxOwotICAgICAgICAgICAgTkVYVCgyLCAxKQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgTkVYVF9JTigyKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMzE1LDM1ICszMjgsMzcgQEAKIAogRU5DT0RFUihldWNfanApCiB7Ci0gICAgd2hpbGUgKGlubGVmdCA+IDApIHsKLSAgICAgICAgUHlfVU5JQ09ERSBjID0gSU4xOworICAgIHdoaWxlICgqaW5wb3MgPCBpbmxlbikgeworICAgICAgICBQeV9VQ1M0IGMgPSBJTkNIQVIxOwogICAgICAgICBEQkNIQVIgY29kZTsKIAogICAgICAgICBpZiAoYyA8IDB4ODApIHsKLSAgICAgICAgICAgIFdSSVRFMSgodW5zaWduZWQgY2hhciljKQotICAgICAgICAgICAgTkVYVCgxLCAxKQorICAgICAgICAgICAgV1JJVEVCWVRFMSgodW5zaWduZWQgY2hhciljKTsKKyAgICAgICAgICAgIE5FWFQoMSwgMSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIFVDUzRJTlZBTElEKGMpCisgICAgICAgIGlmIChjID4gMHhGRkZGKQorICAgICAgICAgICAgcmV0dXJuIDE7CiAKLSAgICAgICAgVFJZTUFQX0VOQyhqaXN4Y29tbW9uLCBjb2RlLCBjKTsKKyAgICAgICAgaWYgKFRSWU1BUF9FTkMoamlzeGNvbW1vbiwgY29kZSwgYykpCisgICAgICAgICAgICA7CiAgICAgICAgIGVsc2UgaWYgKGMgPj0gMHhmZjYxICYmIGMgPD0gMHhmZjlmKSB7CiAgICAgICAgICAgICAvKiBKSVMgWCAwMjAxIGhhbGYtd2lkdGgga2F0YWthbmEgKi8KLSAgICAgICAgICAgIFdSSVRFMigweDhlLCBjIC0gMHhmZWMwKQotICAgICAgICAgICAgTkVYVCgxLCAyKQorICAgICAgICAgICAgV1JJVEVCWVRFMigweDhlLCBjIC0gMHhmZWMwKTsKKyAgICAgICAgICAgIE5FWFQoMSwgMik7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogI2lmbmRlZiBTVFJJQ1RfQlVJTEQKICAgICAgICAgZWxzZSBpZiAoYyA9PSAweGZmM2MpIC8qIEZVTEwtV0lEVEggUkVWRVJTRSBTT0xJRFVTICovCiAgICAgICAgICAgICBjb2RlID0gMHgyMTQwOwogICAgICAgICBlbHNlIGlmIChjID09IDB4YTUpIHsgLyogWUVOIFNJR04gKi8KLSAgICAgICAgICAgIFdSSVRFMSgweDVjKTsKLSAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgIFdSSVRFQllURTEoMHg1Yyk7CisgICAgICAgICAgICBORVhUKDEsIDEpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0gZWxzZSBpZiAoYyA9PSAweDIwM2UpIHsgLyogT1ZFUkxJTkUgKi8KLSAgICAgICAgICAgIFdSSVRFMSgweDdlKTsKLSAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgIFdSSVRFQllURTEoMHg3ZSk7CisgICAgICAgICAgICBORVhUKDEsIDEpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICNlbmRpZgpAQCAtMzUyLDEyICszNjcsMTIgQEAKIAogICAgICAgICBpZiAoY29kZSAmIDB4ODAwMCkgewogICAgICAgICAgICAgLyogSklTIFggMDIxMiAqLwotICAgICAgICAgICAgV1JJVEUzKDB4OGYsIGNvZGUgPj4gOCwgKGNvZGUgJiAweEZGKSB8IDB4ODApCi0gICAgICAgICAgICBORVhUKDEsIDMpCisgICAgICAgICAgICBXUklURUJZVEUzKDB4OGYsIGNvZGUgPj4gOCwgKGNvZGUgJiAweEZGKSB8IDB4ODApOworICAgICAgICAgICAgTkVYVCgxLCAzKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8qIEpJUyBYIDAyMDggKi8KLSAgICAgICAgICAgIFdSSVRFMigoY29kZSA+PiA4KSB8IDB4ODAsIChjb2RlICYgMHhGRikgfCAweDgwKQotICAgICAgICAgICAgTkVYVCgxLCAyKQorICAgICAgICAgICAgV1JJVEVCWVRFMigoY29kZSA+PiA4KSB8IDB4ODAsIChjb2RlICYgMHhGRikgfCAweDgwKTsKKyAgICAgICAgICAgIE5FWFQoMSwgMik7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTM2NywxMyArMzgyLDEyIEBACiBERUNPREVSKGV1Y19qcCkKIHsKICAgICB3aGlsZSAoaW5sZWZ0ID4gMCkgewotICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSBJTjE7Ci0KLSAgICAgICAgUkVRVUlSRV9PVVRCVUYoMSkKKyAgICAgICAgdW5zaWduZWQgY2hhciBjID0gSU5CWVRFMTsKKyAgICAgICAgUHlfVUNTNCBkZWNvZGVkOwogCiAgICAgICAgIGlmIChjIDwgMHg4MCkgewotICAgICAgICAgICAgT1VUMShjKQotICAgICAgICAgICAgTkVYVCgxLCAxKQorICAgICAgICAgICAgT1VUQ0hBUihjKTsKKyAgICAgICAgICAgIE5FWFRfSU4oMSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCkBAIC0zODEsMTEgKzM5NSwxMSBAQAogICAgICAgICAgICAgLyogSklTIFggMDIwMSBoYWxmLXdpZHRoIGthdGFrYW5hICovCiAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGMyOwogCi0gICAgICAgICAgICBSRVFVSVJFX0lOQlVGKDIpCi0gICAgICAgICAgICBjMiA9IElOMjsKKyAgICAgICAgICAgIFJFUVVJUkVfSU5CVUYoMik7CisgICAgICAgICAgICBjMiA9IElOQllURTI7CiAgICAgICAgICAgICBpZiAoYzIgPj0gMHhhMSAmJiBjMiA8PSAweGRmKSB7Ci0gICAgICAgICAgICAgICAgT1VUMSgweGZlYzAgKyBjMikKLSAgICAgICAgICAgICAgICBORVhUKDIsIDEpCisgICAgICAgICAgICAgICAgT1VUQ0hBUigweGZlYzAgKyBjMik7CisgICAgICAgICAgICAgICAgTkVYVF9JTigyKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICByZXR1cm4gMTsKQEAgLTM5MywxMiArNDA3LDEzIEBACiAgICAgICAgIGVsc2UgaWYgKGMgPT0gMHg4ZikgewogICAgICAgICAgICAgdW5zaWduZWQgY2hhciBjMiwgYzM7CiAKLSAgICAgICAgICAgIFJFUVVJUkVfSU5CVUYoMykKLSAgICAgICAgICAgIGMyID0gSU4yOwotICAgICAgICAgICAgYzMgPSBJTjM7CisgICAgICAgICAgICBSRVFVSVJFX0lOQlVGKDMpOworICAgICAgICAgICAgYzIgPSBJTkJZVEUyOworICAgICAgICAgICAgYzMgPSBJTkJZVEUzOwogICAgICAgICAgICAgLyogSklTIFggMDIxMiAqLwotICAgICAgICAgICAgVFJZTUFQX0RFQyhqaXN4MDIxMiwgKipvdXRidWYsIGMyIF4gMHg4MCwgYzMgXiAweDgwKSB7Ci0gICAgICAgICAgICAgICAgTkVYVCgzLCAxKQorICAgICAgICAgICAgaWYgKFRSWU1BUF9ERUMoamlzeDAyMTIsIGRlY29kZWQsIGMyIF4gMHg4MCwgYzMgXiAweDgwKSkgeworICAgICAgICAgICAgICAgIE9VVENIQVIoZGVjb2RlZCk7CisgICAgICAgICAgICAgICAgTkVYVF9JTigzKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICByZXR1cm4gMTsKQEAgLTQwNiwxOSArNDIxLDIwIEBACiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgdW5zaWduZWQgY2hhciBjMjsKIAotICAgICAgICAgICAgUkVRVUlSRV9JTkJVRigyKQotICAgICAgICAgICAgYzIgPSBJTjI7CisgICAgICAgICAgICBSRVFVSVJFX0lOQlVGKDIpOworICAgICAgICAgICAgYzIgPSBJTkJZVEUyOwogICAgICAgICAgICAgLyogSklTIFggMDIwOCAqLwogI2lmbmRlZiBTVFJJQ1RfQlVJTEQKICAgICAgICAgICAgIGlmIChjID09IDB4YTEgJiYgYzIgPT0gMHhjMCkKICAgICAgICAgICAgICAgICAvKiBGVUxMLVdJRFRIIFJFVkVSU0UgU09MSURVUyAqLwotICAgICAgICAgICAgICAgICoqb3V0YnVmID0gMHhmZjNjOworICAgICAgICAgICAgICAgIE9VVENIQVIoMHhmZjNjKTsKICAgICAgICAgICAgIGVsc2UKICNlbmRpZgotICAgICAgICAgICAgICAgIFRSWU1BUF9ERUMoamlzeDAyMDgsICoqb3V0YnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgYyBeIDB4ODAsIGMyIF4gMHg4MCkgOwotICAgICAgICAgICAgZWxzZSByZXR1cm4gMTsKLSAgICAgICAgICAgIE5FWFQoMiwgMSkKKyAgICAgICAgICAgIGlmIChUUllNQVBfREVDKGppc3gwMjA4LCBkZWNvZGVkLCBjIF4gMHg4MCwgYzIgXiAweDgwKSkKKyAgICAgICAgICAgICAgICBPVVRDSEFSKGRlY29kZWQpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgTkVYVF9JTigyKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNDMyLDM0ICs0NDgsNDAgQEAKIAogRU5DT0RFUihzaGlmdF9qaXMpCiB7Ci0gICAgd2hpbGUgKGlubGVmdCA+IDApIHsKLSAgICAgICAgUHlfVU5JQ09ERSBjID0gSU4xOworICAgIHdoaWxlICgqaW5wb3MgPCBpbmxlbikgeworICAgICAgICBQeV9VQ1M0IGMgPSBJTkNIQVIxOwogICAgICAgICBEQkNIQVIgY29kZTsKICAgICAgICAgdW5zaWduZWQgY2hhciBjMSwgYzI7CiAKICNpZmRlZiBTVFJJQ1RfQlVJTEQKICAgICAgICAgSklTWDAyMDFfUl9FTkNPREUoYywgY29kZSkKICNlbHNlCi0gICAgICAgIGlmIChjIDwgMHg4MCkgY29kZSA9IGM7Ci0gICAgICAgIGVsc2UgaWYgKGMgPT0gMHgwMGE1KSBjb2RlID0gMHg1YzsgLyogWUVOIFNJR04gKi8KLSAgICAgICAgZWxzZSBpZiAoYyA9PSAweDIwM2UpIGNvZGUgPSAweDdlOyAvKiBPVkVSTElORSAqLworICAgICAgICBpZiAoYyA8IDB4ODApCisgICAgICAgICAgICBjb2RlID0gYzsKKyAgICAgICAgZWxzZSBpZiAoYyA9PSAweDAwYTUpCisgICAgICAgICAgICBjb2RlID0gMHg1YzsgLyogWUVOIFNJR04gKi8KKyAgICAgICAgZWxzZSBpZiAoYyA9PSAweDIwM2UpCisgICAgICAgICAgICBjb2RlID0gMHg3ZTsgLyogT1ZFUkxJTkUgKi8KICNlbmRpZgogICAgICAgICBlbHNlIEpJU1gwMjAxX0tfRU5DT0RFKGMsIGNvZGUpCi0gICAgICAgIGVsc2UgVUNTNElOVkFMSUQoYykKLSAgICAgICAgZWxzZSBjb2RlID0gTk9DSEFSOworICAgICAgICBlbHNlIGlmIChjID4gMHhGRkZGKQorICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNvZGUgPSBOT0NIQVI7CiAKICAgICAgICAgaWYgKGNvZGUgPCAweDgwIHx8IChjb2RlID49IDB4YTEgJiYgY29kZSA8PSAweGRmKSkgewotICAgICAgICAgICAgUkVRVUlSRV9PVVRCVUYoMSkKKyAgICAgICAgICAgIFJFUVVJUkVfT1VUQlVGKDEpOwogCi0gICAgICAgICAgICBPVVQxKCh1bnNpZ25lZCBjaGFyKWNvZGUpCi0gICAgICAgICAgICBORVhUKDEsIDEpCisgICAgICAgICAgICBPVVRCWVRFMSgodW5zaWduZWQgY2hhciljb2RlKTsKKyAgICAgICAgICAgIE5FWFQoMSwgMSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIFJFUVVJUkVfT1VUQlVGKDIpCisgICAgICAgIFJFUVVJUkVfT1VUQlVGKDIpOwogCiAgICAgICAgIGlmIChjb2RlID09IE5PQ0hBUikgewotICAgICAgICAgICAgVFJZTUFQX0VOQyhqaXN4Y29tbW9uLCBjb2RlLCBjKTsKKyAgICAgICAgICAgIGlmIChUUllNQVBfRU5DKGppc3hjb21tb24sIGNvZGUsIGMpKQorICAgICAgICAgICAgICAgIDsKICNpZm5kZWYgU1RSSUNUX0JVSUxECiAgICAgICAgICAgICBlbHNlIGlmIChjID09IDB4ZmYzYykKICAgICAgICAgICAgICAgICBjb2RlID0gMHgyMTQwOyAvKiBGVUxMLVdJRFRIIFJFVkVSU0UgU09MSURVUyAqLwpAQCAtNDc1LDkgKzQ5Nyw5IEBACiAgICAgICAgIGMyID0gY29kZSAmIDB4ZmY7CiAgICAgICAgIGMyID0gKCgoYzEgLSAweDIxKSAmIDEpID8gMHg1ZSA6IDApICsgKGMyIC0gMHgyMSk7CiAgICAgICAgIGMxID0gKGMxIC0gMHgyMSkgPj4gMTsKLSAgICAgICAgT1VUMShjMSA8IDB4MWYgPyBjMSArIDB4ODEgOiBjMSArIDB4YzEpCi0gICAgICAgIE9VVDIoYzIgPCAweDNmID8gYzIgKyAweDQwIDogYzIgKyAweDQxKQotICAgICAgICBORVhUKDEsIDIpCisgICAgICAgIE9VVEJZVEUxKGMxIDwgMHgxZiA/IGMxICsgMHg4MSA6IGMxICsgMHhjMSk7CisgICAgICAgIE9VVEJZVEUyKGMyIDwgMHgzZiA/IGMyICsgMHg0MCA6IGMyICsgMHg0MSk7CisgICAgICAgIE5FWFQoMSwgMik7CiAgICAgfQogCiAgICAgcmV0dXJuIDA7CkBAIC00ODYsMjEgKzUwOCwyMSBAQAogREVDT0RFUihzaGlmdF9qaXMpCiB7CiAgICAgd2hpbGUgKGlubGVmdCA+IDApIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciBjID0gSU4xOwotCi0gICAgICAgIFJFUVVJUkVfT1VUQlVGKDEpCisgICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9IElOQllURTE7CisgICAgICAgIFB5X1VDUzQgZGVjb2RlZDsKIAogI2lmZGVmIFNUUklDVF9CVUlMRAotICAgICAgICBKSVNYMDIwMV9SX0RFQ09ERShjLCAqKm91dGJ1ZikKKyAgICAgICAgSklTWDAyMDFfUl9ERUNPREUoYywgd3JpdGVyKQogI2Vsc2UKLSAgICAgICAgaWYgKGMgPCAweDgwKSAqKm91dGJ1ZiA9IGM7CisgICAgICAgIGlmIChjIDwgMHg4MCkKKyAgICAgICAgICAgIE9VVENIQVIoYyk7CiAjZW5kaWYKLSAgICAgICAgZWxzZSBKSVNYMDIwMV9LX0RFQ09ERShjLCAqKm91dGJ1ZikKKyAgICAgICAgZWxzZSBKSVNYMDIwMV9LX0RFQ09ERShjLCB3cml0ZXIpCiAgICAgICAgIGVsc2UgaWYgKChjID49IDB4ODEgJiYgYyA8PSAweDlmKSB8fCAoYyA+PSAweGUwICYmIGMgPD0gMHhlYSkpewogICAgICAgICAgICAgdW5zaWduZWQgY2hhciBjMSwgYzI7CiAKLSAgICAgICAgICAgIFJFUVVJUkVfSU5CVUYoMikKLSAgICAgICAgICAgIGMyID0gSU4yOworICAgICAgICAgICAgUkVRVUlSRV9JTkJVRigyKTsKKyAgICAgICAgICAgIGMyID0gSU5CWVRFMjsKICAgICAgICAgICAgIGlmIChjMiA8IDB4NDAgfHwgKGMyID4gMHg3ZSAmJiBjMiA8IDB4ODApIHx8IGMyID4gMHhmYykKICAgICAgICAgICAgICAgICByZXR1cm4gMTsKIApAQCAtNTEyLDEzICs1MzQsMTQgQEAKICNpZm5kZWYgU1RSSUNUX0JVSUxECiAgICAgICAgICAgICBpZiAoYzEgPT0gMHgyMSAmJiBjMiA9PSAweDQwKSB7CiAgICAgICAgICAgICAgICAgLyogRlVMTC1XSURUSCBSRVZFUlNFIFNPTElEVVMgKi8KLSAgICAgICAgICAgICAgICBPVVQxKDB4ZmYzYykKLSAgICAgICAgICAgICAgICBORVhUKDIsIDEpCisgICAgICAgICAgICAgICAgT1VUQ0hBUigweGZmM2MpOworICAgICAgICAgICAgICAgIE5FWFRfSU4oMik7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAjZW5kaWYKLSAgICAgICAgICAgIFRSWU1BUF9ERUMoamlzeDAyMDgsICoqb3V0YnVmLCBjMSwgYzIpIHsKLSAgICAgICAgICAgICAgICBORVhUKDIsIDEpCisgICAgICAgICAgICBpZiAoVFJZTUFQX0RFQyhqaXN4MDIwOCwgZGVjb2RlZCwgYzEsIGMyKSkgeworICAgICAgICAgICAgICAgIE9VVENIQVIoZGVjb2RlZCk7CisgICAgICAgICAgICAgICAgTkVYVF9JTigyKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UKQEAgLTUyNyw3ICs1NTAsNyBAQAogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXR1cm4gMTsKIAotICAgICAgICBORVhUKDEsIDEpIC8qIEpJUyBYIDAyMDEgKi8KKyAgICAgICAgTkVYVF9JTigxKTsgLyogSklTIFggMDIwMSAqLwogICAgIH0KIAogICAgIHJldHVybiAwOwpAQCAtNTQwLDMwICs1NjMsMjkgQEAKIAogRU5DT0RFUihzaGlmdF9qaXNfMjAwNCkKIHsKLSAgICB3aGlsZSAoaW5sZWZ0ID4gMCkgewotICAgICAgICB1Y3M0X3QgYyA9IElOMTsKKyAgICB3aGlsZSAoKmlucG9zIDwgaW5sZW4pIHsKKyAgICAgICAgUHlfVUNTNCBjID0gSU5DSEFSMTsKICAgICAgICAgREJDSEFSIGNvZGUgPSBOT0NIQVI7CiAgICAgICAgIGludCBjMSwgYzI7CiAgICAgICAgIFB5X3NzaXplX3QgaW5zaXplOwogCiAgICAgICAgIEpJU1gwMjAxX0VOQ09ERShjLCBjb2RlKQotICAgICAgICBlbHNlIERFQ09ERV9TVVJST0dBVEUoYykKIAogICAgICAgICBpZiAoY29kZSA8IDB4ODAgfHwgKGNvZGUgPj0gMHhhMSAmJiBjb2RlIDw9IDB4ZGYpKSB7Ci0gICAgICAgICAgICBXUklURTEoKHVuc2lnbmVkIGNoYXIpY29kZSkKLSAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgIFdSSVRFQllURTEoKHVuc2lnbmVkIGNoYXIpY29kZSk7CisgICAgICAgICAgICBORVhUKDEsIDEpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBSRVFVSVJFX09VVEJVRigyKQotICAgICAgICBpbnNpemUgPSBHRVRfSU5TSVpFKGMpOworICAgICAgICBSRVFVSVJFX09VVEJVRigyKTsKKyAgICAgICAgaW5zaXplID0gMTsKIAogICAgICAgICBpZiAoY29kZSA9PSBOT0NIQVIpIHsKICAgICAgICAgICAgIGlmIChjIDw9IDB4ZmZmZikgewogICAgICAgICAgICAgICAgIEVNVUxBVEVfSklTWDAyMTNfMjAwMF9FTkNPREVfQk1QKGNvZGUsIGMpCi0gICAgICAgICAgICAgICAgZWxzZSBUUllNQVBfRU5DKGppc3gwMjEzX2JtcCwgY29kZSwgYykgeworICAgICAgICAgICAgICAgIGVsc2UgaWYgKFRSWU1BUF9FTkMoamlzeDAyMTNfYm1wLCBjb2RlLCBjKSkgewogICAgICAgICAgICAgICAgICAgICBpZiAoY29kZSA9PSBNVUxUSUMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmxlZnQgPCAyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5sZW4gLSAqaW5wb3MgPCAyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZsYWdzICYgTUJFTkNfRkxVU0gpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlID0gZmluZF9wYWlyZW5jbWFwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWNzMl90KWMsIDAsCkBAIC01NzYsOCArNTk4LDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE1CRVJSX1RPT0ZFVzsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X1VDUzQgY2gyID0gSU5DSEFSMjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlID0gZmluZF9wYWlyZW5jbWFwKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWNzMl90KWMsIElOMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVjczJfdCljLCBjaDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaXN4MDIxM19wYWlyX2VuY21hcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSklTWDAyMTNfRU5DUEFJUlMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2RlID09IERCQ0lOVikgewpAQCAtNTkzLDE3ICs2MTYsMjAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIFRSWU1BUF9FTkMoamlzeGNvbW1vbiwgY29kZSwgYykgeworICAgICAgICAgICAgICAgIGVsc2UgaWYgKFRSWU1BUF9FTkMoamlzeGNvbW1vbiwgY29kZSwgYykpIHsKICAgICAgICAgICAgICAgICAgICAgLyogYWJhbmRvbiBKSVMgWCAwMjEyIGNvZGVzICovCiAgICAgICAgICAgICAgICAgICAgIGlmIChjb2RlICYgMHg4MDAwKQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgcmV0dXJuIDE7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgaWYgKGMgPj4gMTYgPT0gRU1QQkFTRSA+PiAxNikgewogICAgICAgICAgICAgICAgIEVNVUxBVEVfSklTWDAyMTNfMjAwMF9FTkNPREVfRU1QKGNvZGUsIGMpCi0gICAgICAgICAgICAgICAgZWxzZSBUUllNQVBfRU5DKGppc3gwMjEzX2VtcCwgY29kZSwgYyYweGZmZmYpOwotICAgICAgICAgICAgICAgIGVsc2UgcmV0dXJuIGluc2l6ZTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChUUllNQVBfRU5DKGppc3gwMjEzX2VtcCwgY29kZSwgYyYweGZmZmYpKQorICAgICAgICAgICAgICAgICAgICA7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5zaXplOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHJldHVybiBpbnNpemU7CkBAIC02MTIsMjAgKzYzOCwyNyBAQAogICAgICAgICBjMSA9IGNvZGUgPj4gODsKICAgICAgICAgYzIgPSAoY29kZSAmIDB4ZmYpIC0gMHgyMTsKIAotICAgICAgICBpZiAoYzEgJiAweDgwKSB7IC8qIFBsYW5lIDIgKi8KLSAgICAgICAgICAgIGlmIChjMSA+PSAweGVlKSBjMSAtPSAweDg3OwotICAgICAgICAgICAgZWxzZSBpZiAoYzEgPj0gMHhhYyB8fCBjMSA9PSAweGE4KSBjMSAtPSAweDQ5OwotICAgICAgICAgICAgZWxzZSBjMSAtPSAweDQzOworICAgICAgICBpZiAoYzEgJiAweDgwKSB7CisgICAgICAgICAgICAvKiBQbGFuZSAyICovCisgICAgICAgICAgICBpZiAoYzEgPj0gMHhlZSkKKyAgICAgICAgICAgICAgICBjMSAtPSAweDg3OworICAgICAgICAgICAgZWxzZSBpZiAoYzEgPj0gMHhhYyB8fCBjMSA9PSAweGE4KQorICAgICAgICAgICAgICAgIGMxIC09IDB4NDk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYzEgLT0gMHg0MzsKICAgICAgICAgfQotICAgICAgICBlbHNlIC8qIFBsYW5lIDEgKi8KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvKiBQbGFuZSAxICovCiAgICAgICAgICAgICBjMSAtPSAweDIxOworICAgICAgICB9CiAKLSAgICAgICAgaWYgKGMxICYgMSkgYzIgKz0gMHg1ZTsKKyAgICAgICAgaWYgKGMxICYgMSkKKyAgICAgICAgICAgIGMyICs9IDB4NWU7CiAgICAgICAgIGMxID4+PSAxOwotICAgICAgICBPVVQxKGMxICsgKGMxIDwgMHgxZiA/IDB4ODEgOiAweGMxKSkKLSAgICAgICAgT1VUMihjMiArIChjMiA8IDB4M2YgPyAweDQwIDogMHg0MSkpCisgICAgICAgIE9VVEJZVEUxKGMxICsgKGMxIDwgMHgxZiA/IDB4ODEgOiAweGMxKSk7CisgICAgICAgIE9VVEJZVEUyKGMyICsgKGMyIDwgMHgzZiA/IDB4NDAgOiAweDQxKSk7CiAKLSAgICAgICAgTkVYVChpbnNpemUsIDIpCisgICAgICAgIE5FWFQoaW5zaXplLCAyKTsKICAgICB9CiAKICAgICByZXR1cm4gMDsKQEAgLTYzNCwxNiArNjY3LDE1IEBACiBERUNPREVSKHNoaWZ0X2ppc18yMDA0KQogewogICAgIHdoaWxlIChpbmxlZnQgPiAwKSB7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9IElOMTsKKyAgICAgICAgdW5zaWduZWQgY2hhciBjID0gSU5CWVRFMTsKIAotICAgICAgICBSRVFVSVJFX09VVEJVRigxKQotICAgICAgICBKSVNYMDIwMV9ERUNPREUoYywgKipvdXRidWYpCisgICAgICAgIEpJU1gwMjAxX0RFQ09ERShjLCB3cml0ZXIpCiAgICAgICAgIGVsc2UgaWYgKChjID49IDB4ODEgJiYgYyA8PSAweDlmKSB8fCAoYyA+PSAweGUwICYmIGMgPD0gMHhmYykpewogICAgICAgICAgICAgdW5zaWduZWQgY2hhciBjMSwgYzI7Ci0gICAgICAgICAgICB1Y3M0X3QgY29kZTsKKyAgICAgICAgICAgIFB5X1VDUzQgY29kZSwgZGVjb2RlZDsKIAotICAgICAgICAgICAgUkVRVUlSRV9JTkJVRigyKQotICAgICAgICAgICAgYzIgPSBJTjI7CisgICAgICAgICAgICBSRVFVSVJFX0lOQlVGKDIpOworICAgICAgICAgICAgYzIgPSBJTkJZVEUyOwogICAgICAgICAgICAgaWYgKGMyIDwgMHg0MCB8fCAoYzIgPiAweDdlICYmIGMyIDwgMHg4MCkgfHwgYzIgPiAweGZjKQogICAgICAgICAgICAgICAgIHJldHVybiAxOwogCkBAIC02NTQsNTAgKzY4Niw0NyBAQAogCiAgICAgICAgICAgICBpZiAoYzEgPCAweDVlKSB7IC8qIFBsYW5lIDEgKi8KICAgICAgICAgICAgICAgICBjMSArPSAweDIxOwotICAgICAgICAgICAgICAgIEVNVUxBVEVfSklTWDAyMTNfMjAwMF9ERUNPREVfUExBTkUxKCoqb3V0YnVmLAorICAgICAgICAgICAgICAgIEVNVUxBVEVfSklTWDAyMTNfMjAwMF9ERUNPREVfUExBTkUxKHdyaXRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYzEsIGMyKQotICAgICAgICAgICAgICAgIGVsc2UgVFJZTUFQX0RFQyhqaXN4MDIwOCwgKipvdXRidWYsIGMxLCBjMikgewotICAgICAgICAgICAgICAgICAgICBORVhUX09VVCgxKQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIFRSWU1BUF9ERUMoamlzeDAyMTNfMV9ibXAsICoqb3V0YnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjMSwgYzIpIHsKLSAgICAgICAgICAgICAgICAgICAgTkVYVF9PVVQoMSkKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBUUllNQVBfREVDKGppc3gwMjEzXzFfZW1wLCBjb2RlLCBjMSwgYzIpIHsKLSAgICAgICAgICAgICAgICAgICAgV1JJVEVVQ1M0KEVNUEJBU0UgfCBjb2RlKQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIFRSWU1BUF9ERUMoamlzeDAyMTNfcGFpciwgY29kZSwgYzEsIGMyKSB7Ci0gICAgICAgICAgICAgICAgICAgIFdSSVRFMihjb2RlID4+IDE2LCBjb2RlICYgMHhmZmZmKQotICAgICAgICAgICAgICAgICAgICBORVhUX09VVCgyKQotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChUUllNQVBfREVDKGppc3gwMjA4LCBkZWNvZGVkLCBjMSwgYzIpKQorICAgICAgICAgICAgICAgICAgICBPVVRDSEFSKGRlY29kZWQpOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKFRSWU1BUF9ERUMoamlzeDAyMTNfMV9ibXAsIGRlY29kZWQsIGMxLCBjMikpCisgICAgICAgICAgICAgICAgICAgIE9VVENIQVIoZGVjb2RlZCk7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoVFJZTUFQX0RFQyhqaXN4MDIxM18xX2VtcCwgY29kZSwgYzEsIGMyKSkKKyAgICAgICAgICAgICAgICAgICAgT1VUQ0hBUihFTVBCQVNFIHwgY29kZSk7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoVFJZTUFQX0RFQyhqaXN4MDIxM19wYWlyLCBjb2RlLCBjMSwgYzIpKQorICAgICAgICAgICAgICAgICAgICBPVVRDSEFSMihjb2RlID4+IDE2LCBjb2RlICYgMHhmZmZmKTsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICAgICAgICAgIE5FWFRfSU4oMikKKyAgICAgICAgICAgICAgICBORVhUX0lOKDIpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSB7IC8qIFBsYW5lIDIgKi8KLSAgICAgICAgICAgICAgICBpZiAoYzEgPj0gMHg2NykgYzEgKz0gMHgwNzsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChjMSA+PSAweDYzIHx8IGMxID09IDB4NWYpIGMxIC09IDB4Mzc7Ci0gICAgICAgICAgICAgICAgZWxzZSBjMSAtPSAweDNkOworICAgICAgICAgICAgICAgIGlmIChjMSA+PSAweDY3KQorICAgICAgICAgICAgICAgICAgICBjMSArPSAweDA3OworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGMxID49IDB4NjMgfHwgYzEgPT0gMHg1ZikKKyAgICAgICAgICAgICAgICAgICAgYzEgLT0gMHgzNzsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGMxIC09IDB4M2Q7CiAKLSAgICAgICAgICAgICAgICBFTVVMQVRFX0pJU1gwMjEzXzIwMDBfREVDT0RFX1BMQU5FMigqKm91dGJ1ZiwKKyAgICAgICAgICAgICAgICBFTVVMQVRFX0pJU1gwMjEzXzIwMDBfREVDT0RFX1BMQU5FMih3cml0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMxLCBjMikKLSAgICAgICAgICAgICAgICBlbHNlIFRSWU1BUF9ERUMoamlzeDAyMTNfMl9ibXAsICoqb3V0YnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjMSwgYzIpIDsKLSAgICAgICAgICAgICAgICBlbHNlIFRSWU1BUF9ERUMoamlzeDAyMTNfMl9lbXAsIGNvZGUsIGMxLCBjMikgewotICAgICAgICAgICAgICAgICAgICBXUklURVVDUzQoRU1QQkFTRSB8IGNvZGUpCi0gICAgICAgICAgICAgICAgICAgIE5FWFRfSU4oMikKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChUUllNQVBfREVDKGppc3gwMjEzXzJfYm1wLCBkZWNvZGVkLCBjMSwgYzIpKQorICAgICAgICAgICAgICAgICAgICBPVVRDSEFSKGRlY29kZWQpOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKFRSWU1BUF9ERUMoamlzeDAyMTNfMl9lbXAsIGNvZGUsIGMxLCBjMikpIHsKKyAgICAgICAgICAgICAgICAgICAgT1VUQ0hBUihFTVBCQVNFIHwgY29kZSk7CisgICAgICAgICAgICAgICAgICAgIE5FWFRfSU4oMik7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICAgICAgICAgIE5FWFQoMiwgMSkKKyAgICAgICAgICAgICAgICBORVhUX0lOKDIpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmV0dXJuIDE7CiAKLSAgICAgICAgTkVYVCgxLCAxKSAvKiBKSVMgWCAwMjAxICovCisgICAgICAgIE5FWFRfSU4oMSk7IC8qIEpJUyBYIDAyMDEgKi8KICAgICB9CiAKICAgICByZXR1cm4gMDsKZGlmZiAtLWdpdCBhL01vZHVsZXMvY2prY29kZWNzL19jb2RlY3Nfa3IuYyBiL01vZHVsZXMvY2prY29kZWNzL19jb2RlY3Nfa3IuYwppbmRleCBmNTY5N2RkLi42ZDZhY2I1IDEwMDY0NAotLS0gYS9Nb2R1bGVzL2Nqa2NvZGVjcy9fY29kZWNzX2tyLmMKKysrIGIvTW9kdWxlcy9jamtjb2RlY3MvX2NvZGVjc19rci5jCkBAIC0zMyw1MSArMzMsNTYgQEAKIAogRU5DT0RFUihldWNfa3IpCiB7Ci0gICAgd2hpbGUgKGlubGVmdCA+IDApIHsKLSAgICAgICAgUHlfVU5JQ09ERSBjID0gSU4xOworICAgIHdoaWxlICgqaW5wb3MgPCBpbmxlbikgeworICAgICAgICBQeV9VQ1M0IGMgPSBJTkNIQVIxOwogICAgICAgICBEQkNIQVIgY29kZTsKIAogICAgICAgICBpZiAoYyA8IDB4ODApIHsKLSAgICAgICAgICAgIFdSSVRFMSgodW5zaWduZWQgY2hhciljKQotICAgICAgICAgICAgTkVYVCgxLCAxKQorICAgICAgICAgICAgV1JJVEVCWVRFMSgodW5zaWduZWQgY2hhciljKTsKKyAgICAgICAgICAgIE5FWFQoMSwgMSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICBVQ1M0SU5WQUxJRChjKQogCi0gICAgICAgIFJFUVVJUkVfT1VUQlVGKDIpCi0gICAgICAgIFRSWU1BUF9FTkMoY3A5NDksIGNvZGUsIGMpOwotICAgICAgICBlbHNlIHJldHVybiAxOworICAgICAgICBpZiAoYyA+IDB4RkZGRikKKyAgICAgICAgICAgIHJldHVybiAxOworCisgICAgICAgIFJFUVVJUkVfT1VUQlVGKDIpOworICAgICAgICBpZiAoVFJZTUFQX0VOQyhjcDk0OSwgY29kZSwgYykpCisgICAgICAgICAgICA7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiAxOwogCiAgICAgICAgIGlmICgoY29kZSAmIDB4ODAwMCkgPT0gMCkgewogICAgICAgICAgICAgLyogS1MgWCAxMDAxIGNvZGVkIGNoYXJhY3RlciAqLwotICAgICAgICAgICAgT1VUMSgoY29kZSA+PiA4KSB8IDB4ODApCi0gICAgICAgICAgICBPVVQyKChjb2RlICYgMHhGRikgfCAweDgwKQotICAgICAgICAgICAgTkVYVCgxLCAyKQorICAgICAgICAgICAgT1VUQllURTEoKGNvZGUgPj4gOCkgfCAweDgwKTsKKyAgICAgICAgICAgIE9VVEJZVEUyKChjb2RlICYgMHhGRikgfCAweDgwKTsKKyAgICAgICAgICAgIE5FWFQoMSwgMik7CiAgICAgICAgIH0KLSAgICAgICAgZWxzZSB7ICAgICAgICAgIC8qIE1hcHBpbmcgaXMgZm91bmQgaW4gQ1A5NDkgZXh0ZW5zaW9uLAotICAgICAgICAgICAgICAgICAqIGJ1dCB3ZSBlbmNvZGUgaXQgaW4gS1MgWCAxMDAxOjE5OTggQW5uZXggMywKLSAgICAgICAgICAgICAgICAgKiBtYWtlLXVwIHNlcXVlbmNlIGZvciBFVUMtS1IuICovCisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLyogTWFwcGluZyBpcyBmb3VuZCBpbiBDUDk0OSBleHRlbnNpb24sCisgICAgICAgICAgICAgICBidXQgd2UgZW5jb2RlIGl0IGluIEtTIFggMTAwMToxOTk4IEFubmV4IDMsCisgICAgICAgICAgICAgICBtYWtlLXVwIHNlcXVlbmNlIGZvciBFVUMtS1IuICovCiAKLSAgICAgICAgICAgIFJFUVVJUkVfT1VUQlVGKDgpCisgICAgICAgICAgICBSRVFVSVJFX09VVEJVRig4KTsKIAogICAgICAgICAgICAgLyogc3lsbGFibGUgY29tcG9zaXRpb24gcHJlY2VkZW5jZSAqLwotICAgICAgICAgICAgT1VUMShFVUNLUl9KQU1PX0ZJUlNUQllURSkKLSAgICAgICAgICAgIE9VVDIoRVVDS1JfSkFNT19GSUxMRVIpCisgICAgICAgICAgICBPVVRCWVRFMShFVUNLUl9KQU1PX0ZJUlNUQllURSk7CisgICAgICAgICAgICBPVVRCWVRFMihFVUNLUl9KQU1PX0ZJTExFUik7CiAKLSAgICAgICAgICAgIC8qIEFsbCBjb2RlcG9pbnRzIGluIENQOTQ5IGV4dGVuc2lvbiBhcmUgaW4gdW5pY29kZQorICAgICAgICAgICAgLyogQWxsIGNvZGUgcG9pbnRzIGluIENQOTQ5IGV4dGVuc2lvbiBhcmUgaW4gdW5pY29kZQogICAgICAgICAgICAgICogSGFuZ3VsIFN5bGxhYmxlIGFyZWEuICovCiAgICAgICAgICAgICBhc3NlcnQoMHhhYzAwIDw9IGMgJiYgYyA8PSAweGQ3YTMpOwogICAgICAgICAgICAgYyAtPSAweGFjMDA7CiAKLSAgICAgICAgICAgIE9VVDMoRVVDS1JfSkFNT19GSVJTVEJZVEUpCi0gICAgICAgICAgICBPVVQ0KHUyY2drX2Nob3Nlb25nW2MgLyA1ODhdKQotICAgICAgICAgICAgTkVYVF9PVVQoNCkKKyAgICAgICAgICAgIE9VVEJZVEUzKEVVQ0tSX0pBTU9fRklSU1RCWVRFKTsKKyAgICAgICAgICAgIE9VVEJZVEU0KHUyY2drX2Nob3Nlb25nW2MgLyA1ODhdKTsKKyAgICAgICAgICAgIE5FWFRfT1VUKDQpOwogCi0gICAgICAgICAgICBPVVQxKEVVQ0tSX0pBTU9fRklSU1RCWVRFKQotICAgICAgICAgICAgT1VUMih1MmNna19qdW5nc2VvbmdbKGMgLyAyOCkgJSAyMV0pCi0gICAgICAgICAgICBPVVQzKEVVQ0tSX0pBTU9fRklSU1RCWVRFKQotICAgICAgICAgICAgT1VUNCh1MmNna19qb25nc2VvbmdbYyAlIDI4XSkKLSAgICAgICAgICAgIE5FWFQoMSwgNCkKKyAgICAgICAgICAgIE9VVEJZVEUxKEVVQ0tSX0pBTU9fRklSU1RCWVRFKTsKKyAgICAgICAgICAgIE9VVEJZVEUyKHUyY2drX2p1bmdzZW9uZ1soYyAvIDI4KSAlIDIxXSk7CisgICAgICAgICAgICBPVVRCWVRFMyhFVUNLUl9KQU1PX0ZJUlNUQllURSk7CisgICAgICAgICAgICBPVVRCWVRFNCh1MmNna19qb25nc2VvbmdbYyAlIDI4XSk7CisgICAgICAgICAgICBORVhUKDEsIDQpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xMDIsMjQgKzEwNywyMyBAQAogREVDT0RFUihldWNfa3IpCiB7CiAgICAgd2hpbGUgKGlubGVmdCA+IDApIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciBjID0gSU4xOwotCi0gICAgICAgIFJFUVVJUkVfT1VUQlVGKDEpCisgICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9IElOQllURTE7CisgICAgICAgIFB5X1VDUzQgZGVjb2RlZDsKIAogICAgICAgICBpZiAoYyA8IDB4ODApIHsKLSAgICAgICAgICAgIE9VVDEoYykKLSAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgIE9VVENIQVIoYyk7CisgICAgICAgICAgICBORVhUX0lOKDEpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBSRVFVSVJFX0lOQlVGKDIpCisgICAgICAgIFJFUVVJUkVfSU5CVUYoMik7CiAKICAgICAgICAgaWYgKGMgPT0gRVVDS1JfSkFNT19GSVJTVEJZVEUgJiYKLSAgICAgICAgICAgIElOMiA9PSBFVUNLUl9KQU1PX0ZJTExFUikgeworICAgICAgICAgICAgSU5CWVRFMiA9PSBFVUNLUl9KQU1PX0ZJTExFUikgewogICAgICAgICAgICAgLyogS1MgWCAxMDAxOjE5OTggQW5uZXggMyBtYWtlLXVwIHNlcXVlbmNlICovCiAgICAgICAgICAgICBEQkNIQVIgY2hvLCBqdW5nLCBqb25nOwogCi0gICAgICAgICAgICBSRVFVSVJFX0lOQlVGKDgpCisgICAgICAgICAgICBSRVFVSVJFX0lOQlVGKDgpOwogICAgICAgICAgICAgaWYgKCgqaW5idWYpWzJdICE9IEVVQ0tSX0pBTU9fRklSU1RCWVRFIHx8CiAgICAgICAgICAgICAgICAgKCppbmJ1ZilbNF0gIT0gRVVDS1JfSkFNT19GSVJTVEJZVEUgfHwKICAgICAgICAgICAgICAgICAoKmluYnVmKVs2XSAhPSBFVUNLUl9KQU1PX0ZJUlNUQllURSkKQEAgLTE0NSwxMSArMTQ5LDEyIEBACiAgICAgICAgICAgICBpZiAoY2hvID09IE5PTkUgfHwganVuZyA9PSBOT05FIHx8IGpvbmcgPT0gTk9ORSkKICAgICAgICAgICAgICAgICByZXR1cm4gMTsKIAotICAgICAgICAgICAgT1VUMSgweGFjMDAgKyBjaG8qNTg4ICsganVuZyoyOCArIGpvbmcpOwotICAgICAgICAgICAgTkVYVCg4LCAxKQorICAgICAgICAgICAgT1VUQ0hBUigweGFjMDAgKyBjaG8qNTg4ICsganVuZyoyOCArIGpvbmcpOworICAgICAgICAgICAgTkVYVF9JTig4KTsKICAgICAgICAgfQotICAgICAgICBlbHNlIFRSWU1BUF9ERUMoa3N4MTAwMSwgKipvdXRidWYsIGMgXiAweDgwLCBJTjIgXiAweDgwKSB7Ci0gICAgICAgICAgICBORVhUKDIsIDEpCisgICAgICAgIGVsc2UgaWYgKFRSWU1BUF9ERUMoa3N4MTAwMSwgZGVjb2RlZCwgYyBeIDB4ODAsIElOQllURTIgXiAweDgwKSkgeworICAgICAgICAgICAgT1VUQ0hBUihkZWNvZGVkKTsKKyAgICAgICAgICAgIE5FWFRfSU4oMik7CiAgICAgICAgIH0KICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmV0dXJuIDE7CkBAIC0xNjYsMjcgKzE3MSwzMSBAQAogCiBFTkNPREVSKGNwOTQ5KQogewotICAgIHdoaWxlIChpbmxlZnQgPiAwKSB7Ci0gICAgICAgIFB5X1VOSUNPREUgYyA9IElOMTsKKyAgICB3aGlsZSAoKmlucG9zIDwgaW5sZW4pIHsKKyAgICAgICAgUHlfVUNTNCBjID0gSU5DSEFSMTsKICAgICAgICAgREJDSEFSIGNvZGU7CiAKICAgICAgICAgaWYgKGMgPCAweDgwKSB7Ci0gICAgICAgICAgICBXUklURTEoKHVuc2lnbmVkIGNoYXIpYykKLSAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgIFdSSVRFQllURTEoKHVuc2lnbmVkIGNoYXIpYyk7CisgICAgICAgICAgICBORVhUKDEsIDEpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAgVUNTNElOVkFMSUQoYykKIAotICAgICAgICBSRVFVSVJFX09VVEJVRigyKQotICAgICAgICBUUllNQVBfRU5DKGNwOTQ5LCBjb2RlLCBjKTsKLSAgICAgICAgZWxzZSByZXR1cm4gMTsKKyAgICAgICAgaWYgKGMgPiAweEZGRkYpCisgICAgICAgICAgICByZXR1cm4gMTsKIAotICAgICAgICBPVVQxKChjb2RlID4+IDgpIHwgMHg4MCkKLSAgICAgICAgaWYgKGNvZGUgJiAweDgwMDApCi0gICAgICAgICAgICBPVVQyKGNvZGUgJiAweEZGKSAvKiBNU0Igc2V0OiBDUDk0OSAqLworICAgICAgICBSRVFVSVJFX09VVEJVRigyKTsKKyAgICAgICAgaWYgKFRSWU1BUF9FTkMoY3A5NDksIGNvZGUsIGMpKQorICAgICAgICAgICAgOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBPVVQyKChjb2RlICYgMHhGRikgfCAweDgwKSAvKiBNU0IgdW5zZXQ6IGtzIHggMTAwMSAqLwotICAgICAgICBORVhUKDEsIDIpCisgICAgICAgICAgICByZXR1cm4gMTsKKworICAgICAgICBPVVRCWVRFMSgoY29kZSA+PiA4KSB8IDB4ODApOworICAgICAgICBpZiAoY29kZSAmIDB4ODAwMCkKKyAgICAgICAgICAgIE9VVEJZVEUyKGNvZGUgJiAweEZGKTsgLyogTVNCIHNldDogQ1A5NDkgKi8KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgT1VUQllURTIoKGNvZGUgJiAweEZGKSB8IDB4ODApOyAvKiBNU0IgdW5zZXQ6IGtzIHggMTAwMSAqLworICAgICAgICBORVhUKDEsIDIpOwogICAgIH0KIAogICAgIHJldHVybiAwOwpAQCAtMTk1LDIyICsyMDQsMjQgQEAKIERFQ09ERVIoY3A5NDkpCiB7CiAgICAgd2hpbGUgKGlubGVmdCA+IDApIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciBjID0gSU4xOwotCi0gICAgICAgIFJFUVVJUkVfT1VUQlVGKDEpCisgICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9IElOQllURTE7CisgICAgICAgIFB5X1VDUzQgZGVjb2RlZDsKIAogICAgICAgICBpZiAoYyA8IDB4ODApIHsKLSAgICAgICAgICAgIE9VVDEoYykKLSAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgIE9VVENIQVIoYyk7CisgICAgICAgICAgICBORVhUX0lOKDEpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBSRVFVSVJFX0lOQlVGKDIpCi0gICAgICAgIFRSWU1BUF9ERUMoa3N4MTAwMSwgKipvdXRidWYsIGMgXiAweDgwLCBJTjIgXiAweDgwKTsKLSAgICAgICAgZWxzZSBUUllNQVBfREVDKGNwOTQ5ZXh0LCAqKm91dGJ1ZiwgYywgSU4yKTsKLSAgICAgICAgZWxzZSByZXR1cm4gMTsKKyAgICAgICAgUkVRVUlSRV9JTkJVRigyKTsKKyAgICAgICAgaWYgKFRSWU1BUF9ERUMoa3N4MTAwMSwgZGVjb2RlZCwgYyBeIDB4ODAsIElOQllURTIgXiAweDgwKSkKKyAgICAgICAgICAgIE9VVENIQVIoZGVjb2RlZCk7CisgICAgICAgIGVsc2UgaWYgKFRSWU1BUF9ERUMoY3A5NDlleHQsIGRlY29kZWQsIGMsIElOQllURTIpKQorICAgICAgICAgICAgT1VUQ0hBUihkZWNvZGVkKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIDE7CiAKLSAgICAgICAgTkVYVCgyLCAxKQorICAgICAgICBORVhUX0lOKDIpOwogICAgIH0KIAogICAgIHJldHVybiAwOwpAQCAtMjUwLDE4ICsyNjEsMjAgQEAKIAogRU5DT0RFUihqb2hhYikKIHsKLSAgICB3aGlsZSAoaW5sZWZ0ID4gMCkgewotICAgICAgICBQeV9VTklDT0RFIGMgPSBJTjE7CisgICAgd2hpbGUgKCppbnBvcyA8IGlubGVuKSB7CisgICAgICAgIFB5X1VDUzQgYyA9IElOQ0hBUjE7CiAgICAgICAgIERCQ0hBUiBjb2RlOwogCiAgICAgICAgIGlmIChjIDwgMHg4MCkgewotICAgICAgICAgICAgV1JJVEUxKCh1bnNpZ25lZCBjaGFyKWMpCi0gICAgICAgICAgICBORVhUKDEsIDEpCisgICAgICAgICAgICBXUklURUJZVEUxKCh1bnNpZ25lZCBjaGFyKWMpOworICAgICAgICAgICAgTkVYVCgxLCAxKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAgICAgIFVDUzRJTlZBTElEKGMpCiAKLSAgICAgICAgUkVRVUlSRV9PVVRCVUYoMikKKyAgICAgICAgaWYgKGMgPiAweEZGRkYpCisgICAgICAgICAgICByZXR1cm4gMTsKKworICAgICAgICBSRVFVSVJFX09VVEJVRigyKTsKIAogICAgICAgICBpZiAoYyA+PSAweGFjMDAgJiYgYyA8PSAweGQ3YTMpIHsKICAgICAgICAgICAgIGMgLT0gMHhhYzAwOwpAQCAtMjcyLDcgKzI4NSw3IEBACiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoYyA+PSAweDMxMzEgJiYgYyA8PSAweDMxNjMpCiAgICAgICAgICAgICBjb2RlID0gdTJqb2hhYmphbW9bYyAtIDB4MzEzMV07Ci0gICAgICAgIGVsc2UgVFJZTUFQX0VOQyhjcDk0OSwgY29kZSwgYykgeworICAgICAgICBlbHNlIGlmIChUUllNQVBfRU5DKGNwOTQ5LCBjb2RlLCBjKSkgewogICAgICAgICAgICAgdW5zaWduZWQgY2hhciBjMSwgYzIsIHQyOwogICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgdDE7CiAKQEAgLTI4NSw5ICsyOTgsOSBAQAogICAgICAgICAgICAgICAgIHQxID0gKGMxIDwgMHg0YSA/IChjMSAtIDB4MjEgKyAweDFiMikgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAoYzEgLSAweDIxICsgMHgxOTcpKTsKICAgICAgICAgICAgICAgICB0MiA9ICgodDEgJiAxKSA/IDB4NWUgOiAwKSArIChjMiAtIDB4MjEpOwotICAgICAgICAgICAgICAgIE9VVDEodDEgPj4gMSkKLSAgICAgICAgICAgICAgICBPVVQyKHQyIDwgMHg0ZSA/IHQyICsgMHgzMSA6IHQyICsgMHg0MykKLSAgICAgICAgICAgICAgICBORVhUKDEsIDIpCisgICAgICAgICAgICAgICAgT1VUQllURTEodDEgPj4gMSk7CisgICAgICAgICAgICAgICAgT1VUQllURTIodDIgPCAweDRlID8gdDIgKyAweDMxIDogdDIgKyAweDQzKTsKKyAgICAgICAgICAgICAgICBORVhUKDEsIDIpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZQpAQCAtMjk2LDkgKzMwOSw5IEBACiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJldHVybiAxOwogCi0gICAgICAgIE9VVDEoY29kZSA+PiA4KQotICAgICAgICBPVVQyKGNvZGUgJiAweGZmKQotICAgICAgICBORVhUKDEsIDIpCisgICAgICAgIE9VVEJZVEUxKGNvZGUgPj4gOCk7CisgICAgICAgIE9VVEJZVEUyKGNvZGUgJiAweGZmKTsKKyAgICAgICAgTkVYVCgxLCAyKTsKICAgICB9CiAKICAgICByZXR1cm4gMDsKQEAgLTM0OCwxOCArMzYxLDE3IEBACiBERUNPREVSKGpvaGFiKQogewogICAgIHdoaWxlIChpbmxlZnQgPiAwKSB7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgICAgYyA9IElOMSwgYzI7Ci0KLSAgICAgICAgUkVRVUlSRV9PVVRCVUYoMSkKKyAgICAgICAgdW5zaWduZWQgY2hhciBjID0gSU5CWVRFMSwgYzI7CisgICAgICAgIFB5X1VDUzQgZGVjb2RlZDsKIAogICAgICAgICBpZiAoYyA8IDB4ODApIHsKLSAgICAgICAgICAgIE9VVDEoYykKLSAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgIE9VVENIQVIoYyk7CisgICAgICAgICAgICBORVhUX0lOKDEpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBSRVFVSVJFX0lOQlVGKDIpCi0gICAgICAgIGMyID0gSU4yOworICAgICAgICBSRVFVSVJFX0lOQlVGKDIpOworICAgICAgICBjMiA9IElOQllURTI7CiAKICAgICAgICAgaWYgKGMgPCAweGQ4KSB7CiAgICAgICAgICAgICAvKiBqb2hhYiBoYW5ndWwgKi8KQEAgLTM4MSwzMyArMzkzLDMzIEBACiAgICAgICAgICAgICBpZiAoaV9jaG8gPT0gRklMTCkgewogICAgICAgICAgICAgICAgIGlmIChpX2p1bmcgPT0gRklMTCkgewogICAgICAgICAgICAgICAgICAgICBpZiAoaV9qb25nID09IEZJTEwpCi0gICAgICAgICAgICAgICAgICAgICAgICBPVVQxKDB4MzAwMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIE9VVENIQVIoMHgzMDAwKTsKICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgT1VUMSgweDMxMDAgfAotICAgICAgICAgICAgICAgICAgICAgICAgICBqb2hhYmphbW9fam9uZ3Nlb25nW2Nfam9uZ10pCisgICAgICAgICAgICAgICAgICAgICAgICBPVVRDSEFSKDB4MzEwMCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgam9oYWJqYW1vX2pvbmdzZW9uZ1tjX2pvbmddKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChpX2pvbmcgPT0gRklMTCkKLSAgICAgICAgICAgICAgICAgICAgICAgIE9VVDEoMHgzMTAwIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgam9oYWJqYW1vX2p1bmdzZW9uZ1tjX2p1bmddKQorICAgICAgICAgICAgICAgICAgICAgICAgT1VUQ0hBUigweDMxMDAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpvaGFiamFtb19qdW5nc2VvbmdbY19qdW5nXSk7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgaWYgKGlfanVuZyA9PSBGSUxMKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChpX2pvbmcgPT0gRklMTCkKLSAgICAgICAgICAgICAgICAgICAgICAgIE9VVDEoMHgzMTAwIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgam9oYWJqYW1vX2Nob3Nlb25nW2NfY2hvXSkKKyAgICAgICAgICAgICAgICAgICAgICAgIE9VVENIQVIoMHgzMTAwIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqb2hhYmphbW9fY2hvc2VvbmdbY19jaG9dKTsKICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgT1VUMSgweGFjMDAgKwotICAgICAgICAgICAgICAgICAgICAgICAgIGlfY2hvICogNTg4ICsKLSAgICAgICAgICAgICAgICAgICAgICAgICBpX2p1bmcgKiAyOCArCi0gICAgICAgICAgICAgICAgICAgICAgICAgKGlfam9uZyA9PSBGSUxMID8gMCA6IGlfam9uZykpCisgICAgICAgICAgICAgICAgICAgIE9VVENIQVIoMHhhYzAwICsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlfY2hvICogNTg4ICsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlfanVuZyAqIDI4ICsKKyAgICAgICAgICAgICAgICAgICAgICAgIChpX2pvbmcgPT0gRklMTCA/IDAgOiBpX2pvbmcpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIE5FWFQoMiwgMSkKKyAgICAgICAgICAgIE5FWFRfSU4oMik7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvKiBLUyBYIDEwMDEgZXhjZXB0IGhhbmd1bCBqYW1vcyBhbmQgc3lsbGFibGVzICovCiAgICAgICAgICAgICBpZiAoYyA9PSAweGRmIHx8IGMgPiAweGY5IHx8CkBAIC00MjQsOSArNDM2LDEzIEBACiAgICAgICAgICAgICAgICAgdDEgPSB0MSArICh0MiA8IDB4NWUgPyAwIDogMSkgKyAweDIxOwogICAgICAgICAgICAgICAgIHQyID0gKHQyIDwgMHg1ZSA/IHQyIDogdDIgLSAweDVlKSArIDB4MjE7CiAKLSAgICAgICAgICAgICAgICBUUllNQVBfREVDKGtzeDEwMDEsICoqb3V0YnVmLCB0MSwgdDIpOwotICAgICAgICAgICAgICAgIGVsc2UgcmV0dXJuIDE7Ci0gICAgICAgICAgICAgICAgTkVYVCgyLCAxKQorICAgICAgICAgICAgICAgIGlmIChUUllNQVBfREVDKGtzeDEwMDEsIGRlY29kZWQsIHQxLCB0MikpIHsKKyAgICAgICAgICAgICAgICAgICAgT1VUQ0hBUihkZWNvZGVkKTsKKyAgICAgICAgICAgICAgICAgICAgTkVYVF9JTigyKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL01vZHVsZXMvY2prY29kZWNzL19jb2RlY3NfdHcuYyBiL01vZHVsZXMvY2prY29kZWNzL19jb2RlY3NfdHcuYwppbmRleCA5MTYyOThkLi43MjJiMjZiIDEwMDY0NAotLS0gYS9Nb2R1bGVzL2Nqa2NvZGVjcy9fY29kZWNzX3R3LmMKKysrIGIvTW9kdWxlcy9jamtjb2RlY3MvX2NvZGVjc190dy5jCkBAIC0xMywyNiArMTMsMzAgQEAKIAogRU5DT0RFUihiaWc1KQogewotICAgIHdoaWxlIChpbmxlZnQgPiAwKSB7Ci0gICAgICAgIFB5X1VOSUNPREUgYyA9ICoqaW5idWY7CisgICAgd2hpbGUgKCppbnBvcyA8IGlubGVuKSB7CisgICAgICAgIFB5X1VDUzQgYyA9IElOQ0hBUjE7CiAgICAgICAgIERCQ0hBUiBjb2RlOwogCiAgICAgICAgIGlmIChjIDwgMHg4MCkgewotICAgICAgICAgICAgUkVRVUlSRV9PVVRCVUYoMSkKKyAgICAgICAgICAgIFJFUVVJUkVfT1VUQlVGKDEpOwogICAgICAgICAgICAgKipvdXRidWYgPSAodW5zaWduZWQgY2hhciljOwotICAgICAgICAgICAgTkVYVCgxLCAxKQorICAgICAgICAgICAgTkVYVCgxLCAxKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAgICAgIFVDUzRJTlZBTElEKGMpCiAKLSAgICAgICAgUkVRVUlSRV9PVVRCVUYoMikKKyAgICAgICAgaWYgKGMgPiAweEZGRkYpCisgICAgICAgICAgICByZXR1cm4gMTsKIAotICAgICAgICBUUllNQVBfRU5DKGJpZzUsIGNvZGUsIGMpOwotICAgICAgICBlbHNlIHJldHVybiAxOworICAgICAgICBSRVFVSVJFX09VVEJVRigyKTsKIAotICAgICAgICBPVVQxKGNvZGUgPj4gOCkKLSAgICAgICAgT1VUMihjb2RlICYgMHhGRikKLSAgICAgICAgTkVYVCgxLCAyKQorICAgICAgICBpZiAoVFJZTUFQX0VOQyhiaWc1LCBjb2RlLCBjKSkKKyAgICAgICAgICAgIDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIDE7CisKKyAgICAgICAgT1VUQllURTEoY29kZSA+PiA4KTsKKyAgICAgICAgT1VUQllURTIoY29kZSAmIDB4RkYpOworICAgICAgICBORVhUKDEsIDIpOwogICAgIH0KIAogICAgIHJldHVybiAwOwpAQCAtNDEsMTkgKzQ1LDE5IEBACiBERUNPREVSKGJpZzUpCiB7CiAgICAgd2hpbGUgKGlubGVmdCA+IDApIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciBjID0gSU4xOwotCi0gICAgICAgIFJFUVVJUkVfT1VUQlVGKDEpCisgICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9IElOQllURTE7CisgICAgICAgIFB5X1VDUzQgZGVjb2RlZDsKIAogICAgICAgICBpZiAoYyA8IDB4ODApIHsKLSAgICAgICAgICAgIE9VVDEoYykKLSAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgIE9VVENIQVIoYyk7CisgICAgICAgICAgICBORVhUX0lOKDEpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBSRVFVSVJFX0lOQlVGKDIpCi0gICAgICAgIFRSWU1BUF9ERUMoYmlnNSwgKipvdXRidWYsIGMsIElOMikgewotICAgICAgICAgICAgTkVYVCgyLCAxKQorICAgICAgICBSRVFVSVJFX0lOQlVGKDIpOworICAgICAgICBpZiAoVFJZTUFQX0RFQyhiaWc1LCBkZWNvZGVkLCBjLCBJTkJZVEUyKSkgeworICAgICAgICAgICAgT1VUQ0hBUihkZWNvZGVkKTsKKyAgICAgICAgICAgIE5FWFRfSU4oMik7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSByZXR1cm4gMTsKICAgICB9CkBAIC02OCwyNSArNzIsMzAgQEAKIAogRU5DT0RFUihjcDk1MCkKIHsKLSAgICB3aGlsZSAoaW5sZWZ0ID4gMCkgewotICAgICAgICBQeV9VTklDT0RFIGMgPSBJTjE7CisgICAgd2hpbGUgKCppbnBvcyA8IGlubGVuKSB7CisgICAgICAgIFB5X1VDUzQgYyA9IElOQ0hBUjE7CiAgICAgICAgIERCQ0hBUiBjb2RlOwogCiAgICAgICAgIGlmIChjIDwgMHg4MCkgewotICAgICAgICAgICAgV1JJVEUxKCh1bnNpZ25lZCBjaGFyKWMpCi0gICAgICAgICAgICBORVhUKDEsIDEpCisgICAgICAgICAgICBXUklURUJZVEUxKCh1bnNpZ25lZCBjaGFyKWMpOworICAgICAgICAgICAgTkVYVCgxLCAxKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAgICAgIFVDUzRJTlZBTElEKGMpCiAKLSAgICAgICAgUkVRVUlSRV9PVVRCVUYoMikKLSAgICAgICAgVFJZTUFQX0VOQyhjcDk1MGV4dCwgY29kZSwgYyk7Ci0gICAgICAgIGVsc2UgVFJZTUFQX0VOQyhiaWc1LCBjb2RlLCBjKTsKLSAgICAgICAgZWxzZSByZXR1cm4gMTsKKyAgICAgICAgaWYgKGMgPiAweEZGRkYpCisgICAgICAgICAgICByZXR1cm4gMTsKIAotICAgICAgICBPVVQxKGNvZGUgPj4gOCkKLSAgICAgICAgT1VUMihjb2RlICYgMHhGRikKLSAgICAgICAgTkVYVCgxLCAyKQorICAgICAgICBSRVFVSVJFX09VVEJVRigyKTsKKyAgICAgICAgaWYgKFRSWU1BUF9FTkMoY3A5NTBleHQsIGNvZGUsIGMpKQorICAgICAgICAgICAgOworICAgICAgICBlbHNlIGlmIChUUllNQVBfRU5DKGJpZzUsIGNvZGUsIGMpKQorICAgICAgICAgICAgOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gMTsKKworICAgICAgICBPVVRCWVRFMShjb2RlID4+IDgpOworICAgICAgICBPVVRCWVRFMihjb2RlICYgMHhGRik7CisgICAgICAgIE5FWFQoMSwgMik7CiAgICAgfQogCiAgICAgcmV0dXJuIDA7CkBAIC05NSwyMyArMTA0LDI1IEBACiBERUNPREVSKGNwOTUwKQogewogICAgIHdoaWxlIChpbmxlZnQgPiAwKSB7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9IElOMTsKLQotICAgICAgICBSRVFVSVJFX09VVEJVRigxKQorICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSBJTkJZVEUxOworICAgICAgICBQeV9VQ1M0IGRlY29kZWQ7CiAKICAgICAgICAgaWYgKGMgPCAweDgwKSB7Ci0gICAgICAgICAgICBPVVQxKGMpCi0gICAgICAgICAgICBORVhUKDEsIDEpCisgICAgICAgICAgICBPVVRDSEFSKGMpOworICAgICAgICAgICAgTkVYVF9JTigxKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgUkVRVUlSRV9JTkJVRigyKQorICAgICAgICBSRVFVSVJFX0lOQlVGKDIpOwogCi0gICAgICAgIFRSWU1BUF9ERUMoY3A5NTBleHQsICoqb3V0YnVmLCBjLCBJTjIpOwotICAgICAgICBlbHNlIFRSWU1BUF9ERUMoYmlnNSwgKipvdXRidWYsIGMsIElOMik7Ci0gICAgICAgIGVsc2UgcmV0dXJuIDE7CisgICAgICAgIGlmIChUUllNQVBfREVDKGNwOTUwZXh0LCBkZWNvZGVkLCBjLCBJTkJZVEUyKSkKKyAgICAgICAgICAgIE9VVENIQVIoZGVjb2RlZCk7CisgICAgICAgIGVsc2UgaWYgKFRSWU1BUF9ERUMoYmlnNSwgZGVjb2RlZCwgYywgSU5CWVRFMikpCisgICAgICAgICAgICBPVVRDSEFSKGRlY29kZWQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gMTsKIAotICAgICAgICBORVhUKDIsIDEpCisgICAgICAgIE5FWFRfSU4oMik7CiAgICAgfQogCiAgICAgcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL2Nqa2NvZGVjcy9hbGdfamlzeDAyMDEuaCBiL01vZHVsZXMvY2prY29kZWNzL2FsZ19qaXN4MDIwMS5oCmluZGV4IDBiYzdkYjUuLjMwMzRiNWEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvY2prY29kZWNzL2FsZ19qaXN4MDIwMS5oCisrKyBiL01vZHVsZXMvY2prY29kZWNzL2FsZ19qaXN4MDIwMS5oCkBAIC0xLDI0ICsxLDY1IEBACiAjZGVmaW5lIEpJU1gwMjAxX1JfRU5DT0RFKGMsIGFzc2kpICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoKGMpIDwgMHg4MCAmJiAoYykgIT0gMHg1YyAmJiAoYykgIT0gMHg3ZSkgICAgICAgXAorICAgIGlmICgoYykgPCAweDgwICYmIChjKSAhPSAweDVjICYmIChjKSAhPSAweDdlKSB7ICAgICBcCiAgICAgICAgIChhc3NpKSA9IChjKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBlbHNlIGlmICgoYykgPT0gMHgwMGE1KSAoYXNzaSkgPSAweDVjOyAgICAgICAgICAgICAgXAotICAgIGVsc2UgaWYgKChjKSA9PSAweDIwM2UpIChhc3NpKSA9IDB4N2U7CisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBlbHNlIGlmICgoYykgPT0gMHgwMGE1KSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAoYXNzaSkgPSAweDVjOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBlbHNlIGlmICgoYykgPT0gMHgyMDNlKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAoYXNzaSkgPSAweDdlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfQorCiAjZGVmaW5lIEpJU1gwMjAxX0tfRU5DT0RFKGMsIGFzc2kpICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoKGMpID49IDB4ZmY2MSAmJiAoYykgPD0gMHhmZjlmKSAgICAgICAgICAgICAgICAgXAotICAgICAgICAoYXNzaSkgPSAoYykgLSAweGZlYzA7CisgICAgaWYgKChjKSA+PSAweGZmNjEgJiYgKGMpIDw9IDB4ZmY5ZikgeyAgICAgICAgICAgICAgIFwKKyAgICAgICAgKGFzc2kpID0gKGMpIC0gMHhmZWMwOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0KKwogI2RlZmluZSBKSVNYMDIwMV9FTkNPREUoYywgYXNzaSkgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgSklTWDAyMDFfUl9FTkNPREUoYywgYXNzaSkgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBlbHNlIEpJU1gwMjAxX0tfRU5DT0RFKGMsIGFzc2kpCiAKLSNkZWZpbmUgSklTWDAyMDFfUl9ERUNPREUoYywgYXNzaSkgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmICgoYykgPCAweDVjKSAoYXNzaSkgPSAoYyk7ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZWxzZSBpZiAoKGMpID09IDB4NWMpIChhc3NpKSA9IDB4MDBhNTsgICAgICAgICAgICAgIFwKLSAgICBlbHNlIGlmICgoYykgPCAweDdlKSAoYXNzaSkgPSAoYyk7ICAgICAgICAgICAgICAgICAgXAotICAgIGVsc2UgaWYgKChjKSA9PSAweDdlKSAoYXNzaSkgPSAweDIwM2U7ICAgICAgICAgICAgICBcCi0gICAgZWxzZSBpZiAoKGMpID09IDB4N2YpIChhc3NpKSA9IDB4N2Y7Ci0jZGVmaW5lIEpJU1gwMjAxX0tfREVDT0RFKGMsIGFzc2kpICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoKGMpID49IDB4YTEgJiYgKGMpIDw9IDB4ZGYpICAgICAgICAgICAgICAgICAgICAgXAotICAgIChhc3NpKSA9IDB4ZmVjMCArIChjKTsKLSNkZWZpbmUgSklTWDAyMDFfREVDT0RFKGMsIGFzc2kpICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIEpJU1gwMjAxX1JfREVDT0RFKGMsIGFzc2kpICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZWxzZSBKSVNYMDIwMV9LX0RFQ09ERShjLCBhc3NpKQorI2RlZmluZSBKSVNYMDIwMV9SX0RFQ09ERV9DSEFSKGMsIGFzc2kpICAgICAgICAgICAgICAgICBcCisgICAgaWYgKChjKSA8IDB4NWMpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKGFzc2kpID0gKGMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZWxzZSBpZiAoKGMpID09IDB4NWMpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKGFzc2kpID0gMHgwMGE1OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZWxzZSBpZiAoKGMpIDwgMHg3ZSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKGFzc2kpID0gKGMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZWxzZSBpZiAoKGMpID09IDB4N2UpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKGFzc2kpID0gMHgyMDNlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZWxzZSBpZiAoKGMpID09IDB4N2YpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKGFzc2kpID0gMHg3ZjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0KKworI2RlZmluZSBKSVNYMDIwMV9SX0RFQ09ERShjLCB3cml0ZXIpICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKChjKSA8IDB4NWMpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgT1VUQ0hBUihjKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZWxzZSBpZiAoKGMpID09IDB4NWMpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgT1VUQ0hBUigweDAwYTUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZWxzZSBpZiAoKGMpIDwgMHg3ZSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgT1VUQ0hBUihjKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZWxzZSBpZiAoKGMpID09IDB4N2UpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgT1VUQ0hBUigweDIwM2UpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZWxzZSBpZiAoKGMpID09IDB4N2YpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgT1VUQ0hBUigweDdmKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0KKworI2RlZmluZSBKSVNYMDIwMV9LX0RFQ09ERShjLCB3cml0ZXIpICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKChjKSA+PSAweGExICYmIChjKSA8PSAweGRmKSB7ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgT1VUQ0hBUigweGZlYzAgKyAoYykpOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0KKyNkZWZpbmUgSklTWDAyMDFfS19ERUNPREVfQ0hBUihjLCBhc3NpKSAgICAgICAgICAgICAgICAgXAorICAgIGlmICgoYykgPj0gMHhhMSAmJiAoYykgPD0gMHhkZikgeyAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIChhc3NpKSA9IDB4ZmVjMCArIChjKTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9CisjZGVmaW5lIEpJU1gwMjAxX0RFQ09ERShjLCB3cml0ZXIpICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBKSVNYMDIwMV9SX0RFQ09ERShjLCB3cml0ZXIpICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGVsc2UgSklTWDAyMDFfS19ERUNPREUoYywgd3JpdGVyKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9jamtjb2RlY3MvY2prY29kZWNzLmggYi9Nb2R1bGVzL2Nqa2NvZGVjcy9jamtjb2RlY3MuaAppbmRleCBhYjA2ODJhLi5kMTVjY2ZiIDEwMDY0NAotLS0gYS9Nb2R1bGVzL2Nqa2NvZGVjcy9jamtjb2RlY3MuaAorKysgYi9Nb2R1bGVzL2Nqa2NvZGVjcy9jamtjb2RlY3MuaApAQCAtMTIsMTAgKzEyLDEwIEBACiAjaW5jbHVkZSAibXVsdGlieXRlY29kZWMuaCIKIAogCi0vKiBhIHVuaWNvZGUgInVuZGVmaW5lZCIgY29kZXBvaW50ICovCisvKiBhIHVuaWNvZGUgInVuZGVmaW5lZCIgY29kZSBwb2ludCAqLwogI2RlZmluZSBVTklJTlYgIDB4RkZGRQogCi0vKiBpbnRlcm5hbC11c2UgREJDUyBjb2RlcG9pbnRzIHdoaWNoIGFyZW4ndCB1c2VkIGJ5IGFueSBjaGFyc2V0cyAqLworLyogaW50ZXJuYWwtdXNlIERCQ1MgY29kZSBwb2ludHMgd2hpY2ggYXJlbid0IHVzZWQgYnkgYW55IGNoYXJzZXRzICovCiAjZGVmaW5lIE5PQ0hBUiAgMHhGRkZGCiAjZGVmaW5lIE1VTFRJQyAgMHhGRkZFCiAjZGVmaW5lIERCQ0lOViAgMHhGRkZECkBAIC0zMyw3ICszMyw3IEBACiB0eXBlZGVmIHN0cnVjdCBkYmNzX2luZGV4IGRlY29kZV9tYXA7CiAKIHN0cnVjdCB3aWRlZGJjc19pbmRleCB7Ci0gICAgY29uc3QgdWNzNF90ICptYXA7CisgICAgY29uc3QgUHlfVUNTNCAqbWFwOwogICAgIHVuc2lnbmVkIGNoYXIgYm90dG9tLCB0b3A7CiB9OwogdHlwZWRlZiBzdHJ1Y3Qgd2lkZWRiY3NfaW5kZXggd2lkZWRlY29kZV9tYXA7CkBAIC01Niw3ICs1Niw3IEBACiB9OwogCiBzdHJ1Y3QgcGFpcl9lbmNvZGVtYXAgewotICAgIHVjczRfdCB1bmlzZXE7CisgICAgUHlfVUNTNCB1bmlzZXE7CiAgICAgREJDSEFSIGNvZGU7CiB9OwogCkBAIC03Miw3ICs3Miw4IEBACiAjZGVmaW5lIEVOQ09ERVIoZW5jb2RpbmcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgc3RhdGljIFB5X3NzaXplX3QgZW5jb2RpbmcjI19lbmNvZGUoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIE11bHRpYnl0ZUNvZGVjX1N0YXRlICpzdGF0ZSwgY29uc3Qgdm9pZCAqY29uZmlnLCAgICAgICAgICAgICAgICBcCi0gICAgICAgIGNvbnN0IFB5X1VOSUNPREUgKippbmJ1ZiwgUHlfc3NpemVfdCBpbmxlZnQsICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGludCBraW5kLCB2b2lkICpkYXRhLCAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBQeV9zc2l6ZV90ICppbnBvcywgUHlfc3NpemVfdCBpbmxlbiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICB1bnNpZ25lZCBjaGFyICoqb3V0YnVmLCBQeV9zc2l6ZV90IG91dGxlZnQsIGludCBmbGFncykKICNkZWZpbmUgRU5DT0RFUl9SRVNFVChlbmNvZGluZykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBzdGF0aWMgUHlfc3NpemVfdCBlbmNvZGluZyMjX2VuY29kZV9yZXNldCggICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTg2LDEyMCArODcsMTE4IEBACiAgICAgc3RhdGljIFB5X3NzaXplX3QgZW5jb2RpbmcjI19kZWNvZGUoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIE11bHRpYnl0ZUNvZGVjX1N0YXRlICpzdGF0ZSwgY29uc3Qgdm9pZCAqY29uZmlnLCAgICAgICAgICAgICAgICBcCiAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKippbmJ1ZiwgUHlfc3NpemVfdCBpbmxlZnQsICAgICAgICAgICAgICAgICBcCi0gICAgICAgIFB5X1VOSUNPREUgKipvdXRidWYsIFB5X3NzaXplX3Qgb3V0bGVmdCkKKyAgICAgICAgX1B5VW5pY29kZVdyaXRlciAqd3JpdGVyKQogI2RlZmluZSBERUNPREVSX1JFU0VUKGVuY29kaW5nKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIHN0YXRpYyBQeV9zc2l6ZV90IGVuY29kaW5nIyNfZGVjb2RlX3Jlc2V0KCAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBNdWx0aWJ5dGVDb2RlY19TdGF0ZSAqc3RhdGUsIGNvbnN0IHZvaWQgKmNvbmZpZykKIAotI2lmIFB5X1VOSUNPREVfU0laRSA9PSA0Ci0jZGVmaW5lIFVDUzRJTlZBTElEKGNvZGUpICAgICAgIFwKLSAgICBpZiAoKGNvZGUpID4gMHhGRkZGKSAgICAgICAgXAotICAgIHJldHVybiAxOwotI2Vsc2UKLSNkZWZpbmUgVUNTNElOVkFMSUQoY29kZSkgICAgICAgXAotICAgIGlmICgwKSA7Ci0jZW5kaWYKLQogI2RlZmluZSBORVhUX0lOKGkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICgqaW5idWYpICs9IChpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIChpbmxlZnQpIC09IChpKTsKKyAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKCppbmJ1ZikgKz0gKGkpOyAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKGlubGVmdCkgLT0gKGkpOyAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlICgwKQorI2RlZmluZSBORVhUX0lOQ0hBUihpKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAoKmlucG9zKSArPSAoaSk7ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKDApCiAjZGVmaW5lIE5FWFRfT1VUKG8pICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgKCpvdXRidWYpICs9IChvKTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgKG91dGxlZnQpIC09IChvKTsKKyAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKCpvdXRidWYpICs9IChvKTsgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKG91dGxlZnQpIC09IChvKTsgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlICgwKQogI2RlZmluZSBORVhUKGksIG8pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIE5FWFRfSU4oaSkgTkVYVF9PVVQobykKKyAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgTkVYVF9JTkNIQVIoaSk7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgTkVYVF9PVVQobyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlICgwKQogCiAjZGVmaW5lIFJFUVVJUkVfSU5CVUYobikgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYgKGlubGVmdCA8IChuKSkgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHJldHVybiBNQkVSUl9UT09GRVc7CisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChpbmxlZnQgPCAobikpICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICByZXR1cm4gTUJFUlJfVE9PRkVXOyAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoMCkKKwogI2RlZmluZSBSRVFVSVJFX09VVEJVRihuKSAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmIChvdXRsZWZ0IDwgKG4pKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICByZXR1cm4gTUJFUlJfVE9PU01BTEw7CisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChvdXRsZWZ0IDwgKG4pKSAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICByZXR1cm4gTUJFUlJfVE9PU01BTEw7ICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoMCkKIAotI2RlZmluZSBJTjEgKCgqaW5idWYpWzBdKQotI2RlZmluZSBJTjIgKCgqaW5idWYpWzFdKQotI2RlZmluZSBJTjMgKCgqaW5idWYpWzJdKQotI2RlZmluZSBJTjQgKCgqaW5idWYpWzNdKQorI2RlZmluZSBJTkJZVEUxICgoKmluYnVmKVswXSkKKyNkZWZpbmUgSU5CWVRFMiAoKCppbmJ1ZilbMV0pCisjZGVmaW5lIElOQllURTMgKCgqaW5idWYpWzJdKQorI2RlZmluZSBJTkJZVEU0ICgoKmluYnVmKVszXSkKIAotI2RlZmluZSBPVVQxKGMpICgoKm91dGJ1ZilbMF0pID0gKGMpOwotI2RlZmluZSBPVVQyKGMpICgoKm91dGJ1ZilbMV0pID0gKGMpOwotI2RlZmluZSBPVVQzKGMpICgoKm91dGJ1ZilbMl0pID0gKGMpOwotI2RlZmluZSBPVVQ0KGMpICgoKm91dGJ1ZilbM10pID0gKGMpOworI2RlZmluZSBJTkNIQVIxIChQeVVuaWNvZGVfUkVBRChraW5kLCBkYXRhLCAqaW5wb3MpKQorI2RlZmluZSBJTkNIQVIyIChQeVVuaWNvZGVfUkVBRChraW5kLCBkYXRhLCAqaW5wb3MgKyAxKSkKIAotI2RlZmluZSBXUklURTEoYzEpICAgICAgICAgICAgICBcCi0gICAgUkVRVUlSRV9PVVRCVUYoMSkgICAgICAgICAgIFwKLSAgICAoKm91dGJ1ZilbMF0gPSAoYzEpOwotI2RlZmluZSBXUklURTIoYzEsIGMyKSAgICAgICAgICBcCi0gICAgUkVRVUlSRV9PVVRCVUYoMikgICAgICAgICAgIFwKLSAgICAoKm91dGJ1ZilbMF0gPSAoYzEpOyAgICAgICAgXAotICAgICgqb3V0YnVmKVsxXSA9IChjMik7Ci0jZGVmaW5lIFdSSVRFMyhjMSwgYzIsIGMzKSAgICAgIFwKLSAgICBSRVFVSVJFX09VVEJVRigzKSAgICAgICAgICAgXAotICAgICgqb3V0YnVmKVswXSA9IChjMSk7ICAgICAgICBcCi0gICAgKCpvdXRidWYpWzFdID0gKGMyKTsgICAgICAgIFwKLSAgICAoKm91dGJ1ZilbMl0gPSAoYzMpOwotI2RlZmluZSBXUklURTQoYzEsIGMyLCBjMywgYzQpICBcCi0gICAgUkVRVUlSRV9PVVRCVUYoNCkgICAgICAgICAgIFwKLSAgICAoKm91dGJ1ZilbMF0gPSAoYzEpOyAgICAgICAgXAotICAgICgqb3V0YnVmKVsxXSA9IChjMik7ICAgICAgICBcCi0gICAgKCpvdXRidWYpWzJdID0gKGMzKTsgICAgICAgIFwKLSAgICAoKm91dGJ1ZilbM10gPSAoYzQpOworI2RlZmluZSBPVVRDSEFSKGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUNoYXIod3JpdGVyLCAoYykpIDwgMCkgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgcmV0dXJuIE1CRVJSX0VYQ0VQVElPTjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlICgwKQogCi0jaWYgUHlfVU5JQ09ERV9TSVpFID09IDIKLSMgZGVmaW5lIFdSSVRFVUNTNChjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgUkVRVUlSRV9PVVRCVUYoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICgqb3V0YnVmKVswXSA9IDB4ZDgwMCArICgoKGMpIC0gMHgxMDAwMCkgPj4gMTApOyAgICAgICAgICAgIFwKLSAgICAoKm91dGJ1ZilbMV0gPSAweGRjMDAgKyAoKChjKSAtIDB4MTAwMDApICYgMHgzZmYpOyAgICAgICAgICBcCi0gICAgTkVYVF9PVVQoMikKLSNlbHNlCi0jIGRlZmluZSBXUklURVVDUzQoYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIFJFUVVJUkVfT1VUQlVGKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAqKm91dGJ1ZiA9IChQeV9VTklDT0RFKShjKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgTkVYVF9PVVQoMSkKLSNlbmRpZgorI2RlZmluZSBPVVRDSEFSMihjMSwgYzIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBQeV9VQ1M0IF9jMSA9IChjMSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBQeV9VQ1M0IF9jMiA9IChjMik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9QcmVwYXJlKHdyaXRlciwgMiwgUHlfTUFYKF9jMSwgYzIpKSA8IDApICAgICAgXAorICAgICAgICAgICAgcmV0dXJuIE1CRVJSX0VYQ0VQVElPTjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBQeVVuaWNvZGVfV1JJVEUod3JpdGVyLT5raW5kLCB3cml0ZXItPmRhdGEsIHdyaXRlci0+cG9zLCBfYzEpOyAgICAgXAorICAgICAgICBQeVVuaWNvZGVfV1JJVEUod3JpdGVyLT5raW5kLCB3cml0ZXItPmRhdGEsIHdyaXRlci0+cG9zICsgMSwgX2MyKTsgXAorICAgICAgICB3cml0ZXItPnBvcyArPSAyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgT1VUQllURTEoYykgXAorICAgIGRvIHsgKCgqb3V0YnVmKVswXSkgPSAoYyk7IH0gd2hpbGUgKDApCisjZGVmaW5lIE9VVEJZVEUyKGMpIFwKKyAgICBkbyB7ICgoKm91dGJ1ZilbMV0pID0gKGMpOyB9IHdoaWxlICgwKQorI2RlZmluZSBPVVRCWVRFMyhjKSBcCisgICAgZG8geyAoKCpvdXRidWYpWzJdKSA9IChjKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgT1VUQllURTQoYykgXAorICAgIGRvIHsgKCgqb3V0YnVmKVszXSkgPSAoYyk7IH0gd2hpbGUgKDApCisKKyNkZWZpbmUgV1JJVEVCWVRFMShjMSkgICAgICAgICAgICAgIFwKKyAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgUkVRVUlSRV9PVVRCVUYoMSk7ICAgICAgICAgIFwKKyAgICAgICAgKCpvdXRidWYpWzBdID0gKGMxKTsgICAgICAgIFwKKyAgICB9IHdoaWxlICgwKQorI2RlZmluZSBXUklURUJZVEUyKGMxLCBjMikgICAgICAgICAgXAorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBSRVFVSVJFX09VVEJVRigyKTsgICAgICAgICAgXAorICAgICAgICAoKm91dGJ1ZilbMF0gPSAoYzEpOyAgICAgICAgXAorICAgICAgICAoKm91dGJ1ZilbMV0gPSAoYzIpOyAgICAgICAgXAorICAgIH0gd2hpbGUgKDApCisjZGVmaW5lIFdSSVRFQllURTMoYzEsIGMyLCBjMykgICAgICBcCisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIFJFUVVJUkVfT1VUQlVGKDMpOyAgICAgICAgICBcCisgICAgICAgICgqb3V0YnVmKVswXSA9IChjMSk7ICAgICAgICBcCisgICAgICAgICgqb3V0YnVmKVsxXSA9IChjMik7ICAgICAgICBcCisgICAgICAgICgqb3V0YnVmKVsyXSA9IChjMyk7ICAgICAgICBcCisgICAgfSB3aGlsZSAoMCkKKyNkZWZpbmUgV1JJVEVCWVRFNChjMSwgYzIsIGMzLCBjNCkgIFwKKyAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgUkVRVUlSRV9PVVRCVUYoNCk7ICAgICAgICAgIFwKKyAgICAgICAgKCpvdXRidWYpWzBdID0gKGMxKTsgICAgICAgIFwKKyAgICAgICAgKCpvdXRidWYpWzFdID0gKGMyKTsgICAgICAgIFwKKyAgICAgICAgKCpvdXRidWYpWzJdID0gKGMzKTsgICAgICAgIFwKKyAgICAgICAgKCpvdXRidWYpWzNdID0gKGM0KTsgICAgICAgIFwKKyAgICB9IHdoaWxlICgwKQogCiAjZGVmaW5lIF9UUllNQVBfRU5DKG0sIGFzc2ksIHZhbCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICgobSktPm1hcCAhPSBOVUxMICYmICh2YWwpID49IChtKS0+Ym90dG9tICYmICAgICAgICAgICAgICAgIFwKICAgICAgICAgKHZhbCk8PSAobSktPnRvcCAmJiAoKGFzc2kpID0gKG0pLT5tYXBbKHZhbCkgLSAgICAgICAgICBcCiAgICAgICAgIChtKS0+Ym90dG9tXSkgIT0gTk9DSEFSKQotI2RlZmluZSBUUllNQVBfRU5DX0NPTkQoY2hhcnNldCwgYXNzaSwgdW5pKSAgICAgICAgICAgICAgICAgICAgIFwKKyNkZWZpbmUgVFJZTUFQX0VOQyhjaGFyc2V0LCBhc3NpLCB1bmkpICAgICAgICAgICAgICAgICAgICAgXAogICAgIF9UUllNQVBfRU5DKCZjaGFyc2V0IyNfZW5jbWFwWyh1bmkpID4+IDhdLCBhc3NpLCAodW5pKSAmIDB4ZmYpCi0jZGVmaW5lIFRSWU1BUF9FTkMoY2hhcnNldCwgYXNzaSwgdW5pKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmIFRSWU1BUF9FTkNfQ09ORChjaGFyc2V0LCBhc3NpLCB1bmkpCiAKLSNkZWZpbmUgX1RSWU1BUF9ERUMobSwgYXNzaSwgdmFsKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgKChtKS0+bWFwICE9IE5VTEwgJiYgKHZhbCkgPj0gKG0pLT5ib3R0b20gJiYgICAgICAgICAgICAgICAgXAotICAgICAgICAodmFsKTw9IChtKS0+dG9wICYmICgoYXNzaSkgPSAobSktPm1hcFsodmFsKSAtICAgICAgICAgIFwKLSAgICAgICAgKG0pLT5ib3R0b21dKSAhPSBVTklJTlYpCi0jZGVmaW5lIFRSWU1BUF9ERUMoY2hhcnNldCwgYXNzaSwgYzEsIGMyKSAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmIF9UUllNQVBfREVDKCZjaGFyc2V0IyNfZGVjbWFwW2MxXSwgYXNzaSwgYzIpCi0KLSNkZWZpbmUgX1RSWU1BUF9FTkNfTVBMQU5FKG0sIGFzc3BsYW5lLCBhc3NoaSwgYXNzbG8sIHZhbCkgICAgICBcCi0gICAgKChtKS0+bWFwICE9IE5VTEwgJiYgKHZhbCkgPj0gKG0pLT5ib3R0b20gJiYgICAgICAgICAgICAgICAgXAotICAgICAgICAodmFsKTw9IChtKS0+dG9wICYmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgKChhc3NwbGFuZSkgPSAobSktPm1hcFsoKHZhbCkgLSAobSktPmJvdHRvbSkqM10pICE9IDAgJiYgXAotICAgICAgICAoKChhc3NoaSkgPSAobSktPm1hcFsoKHZhbCkgLSAobSktPmJvdHRvbSkqMyArIDFdKSwgMSkgJiYgXAotICAgICAgICAoKChhc3NsbykgPSAobSktPm1hcFsoKHZhbCkgLSAobSktPmJvdHRvbSkqMyArIDJdKSwgMSkpCi0jZGVmaW5lIFRSWU1BUF9FTkNfTVBMQU5FKGNoYXJzZXQsIGFzc3BsYW5lLCBhc3NoaSwgYXNzbG8sIHVuaSkgXAotICAgIGlmIF9UUllNQVBfRU5DX01QTEFORSgmY2hhcnNldCMjX2VuY21hcFsodW5pKSA+PiA4XSwgXAotICAgICAgICAgICAgICAgICAgICAgICBhc3NwbGFuZSwgYXNzaGksIGFzc2xvLCAodW5pKSAmIDB4ZmYpCi0jZGVmaW5lIFRSWU1BUF9ERUNfTVBMQU5FKGNoYXJzZXQsIGFzc2ksIHBsYW5lLCBjMSwgYzIpICAgICAgICAgXAotICAgIGlmIF9UUllNQVBfREVDKCZjaGFyc2V0IyNfZGVjbWFwW3BsYW5lXVtjMV0sIGFzc2ksIGMyKQotCi0jaWYgUHlfVU5JQ09ERV9TSVpFID09IDIKLSNkZWZpbmUgREVDT0RFX1NVUlJPR0FURShjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYgKGMgPj4gMTAgPT0gMHhkODAwID4+IDEwKSB7IC8qIGhpZ2ggc3Vycm9nYXRlICovICAgICAgICAgXAotICAgICAgICBSRVFVSVJFX0lOQlVGKDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgaWYgKElOMiA+PiAxMCA9PSAweGRjMDAgPj4gMTApIHsgLyogbG93IHN1cnJvZ2F0ZSAqLyBcCi0gICAgICAgICAgICBjID0gMHgxMDAwMCArICgodWNzNF90KShjIC0gMHhkODAwKSA8PCAxMCkgKyBcCi0gICAgICAgICAgICAoKHVjczRfdCkoSU4yKSAtIDB4ZGMwMCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9Ci0jZGVmaW5lIEdFVF9JTlNJWkUoYykgICAoKGMpID4gMHhmZmZmID8gMiA6IDEpCi0jZWxzZQotI2RlZmluZSBERUNPREVfU1VSUk9HQVRFKGMpIHs7fQotI2RlZmluZSBHRVRfSU5TSVpFKGMpICAgMQotI2VuZGlmCisjZGVmaW5lIF9UUllNQVBfREVDKG0sIGFzc2ksIHZhbCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoKG0pLT5tYXAgIT0gTlVMTCAmJiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICh2YWwpID49IChtKS0+Ym90dG9tICYmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAodmFsKTw9IChtKS0+dG9wICYmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgKChhc3NpKSA9IChtKS0+bWFwWyh2YWwpIC0gKG0pLT5ib3R0b21dKSAhPSBVTklJTlYpCisjZGVmaW5lIFRSWU1BUF9ERUMoY2hhcnNldCwgYXNzaSwgYzEsIGMyKSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfVFJZTUFQX0RFQygmY2hhcnNldCMjX2RlY21hcFtjMV0sIGFzc2ksIGMyKQogCiAjZGVmaW5lIEJFR0lOX01BUFBJTkdTX0xJU1Qgc3RhdGljIGNvbnN0IHN0cnVjdCBkYmNzX21hcCBfbWFwcGluZ19saXN0W10gPSB7CiAjZGVmaW5lIE1BUFBJTkdfRU5DT05MWShlbmMpIHsjZW5jLCAodm9pZCopZW5jIyNfZW5jbWFwLCBOVUxMfSwKQEAgLTMyNCw3ICszMjMsNyBAQAogICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBwYWlyX2VuY29kZW1hcCAqaGF5c3RhY2ssIGludCBoYXlzdGFja3NpemUpCiB7CiAgICAgaW50IHBvcywgbWluLCBtYXg7Ci0gICAgdWNzNF90IHZhbHVlID0gYm9keSA8PCAxNiB8IG1vZGlmaWVyOworICAgIFB5X1VDUzQgdmFsdWUgPSBib2R5IDw8IDE2IHwgbW9kaWZpZXI7CiAKICAgICBtaW4gPSAwOwogICAgIG1heCA9IGhheXN0YWNrc2l6ZTsKQEAgLTM1OSw3ICszNTgsNyBAQAogewogICAgIFB5T2JqZWN0ICpvLCAqbW9kOwogCi0gICAgbW9kID0gUHlJbXBvcnRfSW1wb3J0TW9kdWxlKChjaGFyICopbW9kbmFtZSk7CisgICAgbW9kID0gUHlJbXBvcnRfSW1wb3J0TW9kdWxlKG1vZG5hbWUpOwogICAgIGlmIChtb2QgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIC0xOwogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL2Nqa2NvZGVjcy9lbXVfamlzeDAyMTNfMjAwMC5oIGIvTW9kdWxlcy9jamtjb2RlY3MvZW11X2ppc3gwMjEzXzIwMDAuaAppbmRleCA0MjI3ZmIyLi5hNWQ1YTcwIDEwMDY0NAotLS0gYS9Nb2R1bGVzL2Nqa2NvZGVjcy9lbXVfamlzeDAyMTNfMjAwMC5oCisrKyBiL01vZHVsZXMvY2prY29kZWNzL2VtdV9qaXN4MDIxM18yMDAwLmgKQEAgLTIsNyArMiw3IEBACiAgKiBzdGFuZGFyZHMuICovCiAKICNpZm5kZWYgRU1VTEFURV9KSVNYMDIxM18yMDAwX0VOQ09ERV9JTlZBTElECi0jZGVmaW5lIEVNVUxBVEVfSklTWDAyMTNfMjAwMF9FTkNPREVfSU5WQUxJRCAxCisjICBkZWZpbmUgRU1VTEFURV9KSVNYMDIxM18yMDAwX0VOQ09ERV9JTlZBTElEIDEKICNlbmRpZgogCiAjZGVmaW5lIEVNVUxBVEVfSklTWDAyMTNfMjAwMF9FTkNPREVfQk1QKGFzc2ksIGMpICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC0xMSwxNyArMTEsMjAgQEAKICAgICAgICAgICAgICAgICAgICAgKGMpID09IDB4NTI1RCB8fCAoYykgPT0gMHg1NDFFIHx8ICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICAgICAgKGMpID09IDB4NTY1MyB8fCAoYykgPT0gMHg1OUY4IHx8ICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICAgICAgKGMpID09IDB4NUM1QiB8fCAoYykgPT0gMHg1RTc3IHx8ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgKGMpID09IDB4NzYyNiB8fCAoYykgPT0gMHg3RTZCKSkgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgKGMpID09IDB4NzYyNiB8fCAoYykgPT0gMHg3RTZCKSkgeyAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgcmV0dXJuIEVNVUxBVEVfSklTWDAyMTNfMjAwMF9FTkNPREVfSU5WQUxJRDsgICAgICAgICAgICAgICAgICAgIFwKLSAgICBlbHNlIGlmIChjb25maWcgPT0gKHZvaWQgKikyMDAwICYmIChjKSA9PSAweDlCMUQpICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBlbHNlIGlmIChjb25maWcgPT0gKHZvaWQgKikyMDAwICYmIChjKSA9PSAweDlCMUQpIHsgICAgICAgICAgICAgICAgIFwKICAgICAgICAgKGFzc2kpID0gMHg4MDAwIHwgMHg3ZDNiOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9CiAKICNkZWZpbmUgRU1VTEFURV9KSVNYMDIxM18yMDAwX0VOQ09ERV9FTVAoYXNzaSwgYykgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoY29uZmlnID09ICh2b2lkICopMjAwMCAmJiAoYykgPT0gMHgyMEI5RikgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgcmV0dXJuIEVNVUxBVEVfSklTWDAyMTNfMjAwMF9FTkNPREVfSU5WQUxJRDsKKyAgICBpZiAoY29uZmlnID09ICh2b2lkICopMjAwMCAmJiAoYykgPT0gMHgyMEI5RikgeyAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcmV0dXJuIEVNVUxBVEVfSklTWDAyMTNfMjAwMF9FTkNPREVfSU5WQUxJRDsgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9CiAKICNpZm5kZWYgRU1VTEFURV9KSVNYMDIxM18yMDAwX0RFQ09ERV9JTlZBTElECi0jZGVmaW5lIEVNVUxBVEVfSklTWDAyMTNfMjAwMF9ERUNPREVfSU5WQUxJRCAyCisjICBkZWZpbmUgRU1VTEFURV9KSVNYMDIxM18yMDAwX0RFQ09ERV9JTlZBTElEIDIKICNlbmRpZgogCiAjZGVmaW5lIEVNVUxBVEVfSklTWDAyMTNfMjAwMF9ERUNPREVfUExBTkUxKGFzc2ksIGMxLCBjMikgICAgICAgICAgICAgICBcCkBAIC0zNSw5ICszOCwxNyBAQAogICAgICAgICAgICAgICAgICAgICAgKChjMSkgPT0gMHg3RSAmJiAoYzIpID09IDB4N0IpIHx8ICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICAgKChjMSkgPT0gMHg3RSAmJiAoYzIpID09IDB4N0MpIHx8ICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICAgKChjMSkgPT0gMHg3RSAmJiAoYzIpID09IDB4N0QpIHx8ICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgKChjMSkgPT0gMHg3RSAmJiAoYzIpID09IDB4N0UpKSkgICAgICAgICAgICAgICAgICAgXAotICAgICAgICByZXR1cm4gRU1VTEFURV9KSVNYMDIxM18yMDAwX0RFQ09ERV9JTlZBTElEOworICAgICAgICAgICAgICAgICAgICAgKChjMSkgPT0gMHg3RSAmJiAoYzIpID09IDB4N0UpKSkgeyAgICAgICAgICAgICAgICAgXAorICAgICAgICByZXR1cm4gRU1VTEFURV9KSVNYMDIxM18yMDAwX0RFQ09ERV9JTlZBTElEOyAgICAgICAgICAgICAgICAgICAgXAorICAgIH0KIAotI2RlZmluZSBFTVVMQVRFX0pJU1gwMjEzXzIwMDBfREVDT0RFX1BMQU5FMihhc3NpLCBjMSwgYzIpICAgICAgICAgICAgICAgXAotICAgIGlmIChjb25maWcgPT0gKHZvaWQgKikyMDAwICYmIChjMSkgPT0gMHg3RCAmJiAoYzIpID09IDB4M0IpICAgICAgICAgXAotICAgICAgICAoYXNzaSkgPSAweDlCMUQ7CisjZGVmaW5lIEVNVUxBVEVfSklTWDAyMTNfMjAwMF9ERUNPREVfUExBTkUyKHdyaXRlciwgYzEsIGMyKSAgICAgICAgICAgICBcCisgICAgaWYgKGNvbmZpZyA9PSAodm9pZCAqKTIwMDAgJiYgKGMxKSA9PSAweDdEICYmIChjMikgPT0gMHgzQikgeyAgICAgICBcCisgICAgICAgIE9VVENIQVIoMHg5QjFEKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfQorCisjZGVmaW5lIEVNVUxBVEVfSklTWDAyMTNfMjAwMF9ERUNPREVfUExBTkUyX0NIQVIoYXNzaSwgYzEsIGMyKSAgICAgICAgICBcCisgICAgaWYgKGNvbmZpZyA9PSAodm9pZCAqKTIwMDAgJiYgKGMxKSA9PSAweDdEICYmIChjMikgPT0gMHgzQikgeyAgICAgICBcCisgICAgICAgIChhc3NpKSA9IDB4OUIxRDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfQorCmRpZmYgLS1naXQgYS9Nb2R1bGVzL2Nqa2NvZGVjcy9tYXBwaW5nc19jbi5oIGIvTW9kdWxlcy9jamtjb2RlY3MvbWFwcGluZ3NfY24uaAppbmRleCBhNmRjZWJmLi4xZjhjMjk5IDEwMDY0NAotLS0gYS9Nb2R1bGVzL2Nqa2NvZGVjcy9tYXBwaW5nc19jbi5oCisrKyBiL01vZHVsZXMvY2prY29kZWNzL21hcHBpbmdzX2NuLmgKQEAgLTQwNDksNyArNDA0OSw3IEBACiAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBfZ2IxODAzMF90b191bmlibXBfcmFuZ2VzIHsKLSAgICBQeV9VTklDT0RFICAgZmlyc3QsIGxhc3Q7CisgICAgUHlfVUNTNCAgIGZpcnN0LCBsYXN0OwogICAgIERCQ0hBUiAgICAgICBiYXNlOwogfSBnYjE4MDMwX3RvX3VuaWJtcF9yYW5nZXNbXSA9IHsKIHsxMjgsMTYzLDB9LHsxNjUsMTY2LDM2fSx7MTY5LDE3NSwzOH0sezE3OCwxODIsNDV9LHsxODQsMjE0LDUwfSx7MjE2LDIyMyw4MX0sewpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9jamtjb2RlY3MvbWFwcGluZ3NfamlzeDAyMTNfcGFpci5oIGIvTW9kdWxlcy9jamtjb2RlY3MvbWFwcGluZ3NfamlzeDAyMTNfcGFpci5oCmluZGV4IGVkYThlOWUuLjcyOWU0YmMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvY2prY29kZWNzL21hcHBpbmdzX2ppc3gwMjEzX3BhaXIuaAorKysgYi9Nb2R1bGVzL2Nqa2NvZGVjcy9tYXBwaW5nc19qaXN4MDIxM19wYWlyLmgKQEAgLTMsNyArMyw3IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IHdpZGVkYmNzX2luZGV4ICpqaXN4MDIxM19wYWlyX2RlY21hcDsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGFpcl9lbmNvZGVtYXAgKmppc3gwMjEzX3BhaXJfZW5jbWFwOwogI2Vsc2UKLXN0YXRpYyBjb25zdCB1Y3M0X3QgX19qaXN4MDIxM19wYWlyX2RlY21hcFs0OV0gPSB7CitzdGF0aWMgY29uc3QgUHlfVUNTNCBfX2ppc3gwMjEzX3BhaXJfZGVjbWFwWzQ5XSA9IHsKIDgxMDIzNDAxMCw4MTAzNjUwODIsODEwNDk2MTU0LDgxMDYyNzIyNiw4MTA3NTgyOTgsODE2NTI1NDY2LDgxNjY1NjUzOCwKIDgxNjc4NzYxMCw4MTY5MTg2ODIsODE3MDQ5NzU0LDgxNzU3NDA0Miw4MTgxNjM4NjYsODE4NDI2MDEwLDgzODI4MzQxOCwKIDE1MDc0MDQ4LFUsVSxVLDM5MDYwMjI0LDM5MDYwMjI1LDQyNzMwMjQwLDQyNzMwMjQxLDM5Mzg3OTA0LDM5Mzg3OTA1LDM5NDUzNDQwLApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9jamtjb2RlY3MvbXVsdGlieXRlY29kZWMuYyBiL01vZHVsZXMvY2prY29kZWNzL211bHRpYnl0ZWNvZGVjLmMKaW5kZXggYzAzMmNkYi4uZTBkOWI2NyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9jamtjb2RlY3MvbXVsdGlieXRlY29kZWMuYworKysgYi9Nb2R1bGVzL2Nqa2NvZGVjcy9tdWx0aWJ5dGVjb2RlYy5jCkBAIC0xMCwxNSArMTAsMTYgQEAKICNpbmNsdWRlICJtdWx0aWJ5dGVjb2RlYy5oIgogCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgY29uc3QgUHlfVU5JQ09ERSAgICAqaW5idWYsICppbmJ1Zl90b3AsICppbmJ1Zl9lbmQ7CisgICAgUHlPYmplY3QgICAgICAgICAgICAqaW5vYmo7CisgICAgUHlfc3NpemVfdCAgICAgICAgICBpbnBvcywgaW5sZW47CiAgICAgdW5zaWduZWQgY2hhciAgICAgICAqb3V0YnVmLCAqb3V0YnVmX2VuZDsKICAgICBQeU9iamVjdCAgICAgICAgICAgICpleGNvYmosICpvdXRvYmo7CiB9IE11bHRpYnl0ZUVuY29kZUJ1ZmZlcjsKIAogdHlwZWRlZiBzdHJ1Y3QgewogICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluYnVmLCAqaW5idWZfdG9wLCAqaW5idWZfZW5kOwotICAgIFB5X1VOSUNPREUgICAgICAgICAgKm91dGJ1ZiwgKm91dGJ1Zl9lbmQ7Ci0gICAgUHlPYmplY3QgICAgICAgICAgICAqZXhjb2JqLCAqb3V0b2JqOworICAgIFB5T2JqZWN0ICAgICAgICAgICAgKmV4Y29iajsKKyAgICBfUHlVbmljb2RlV3JpdGVyICAgIHdyaXRlcjsKIH0gTXVsdGlieXRlRGVjb2RlQnVmZmVyOwogCiBQeURvY19TVFJWQVIoTXVsdGlieXRlQ29kZWNfRW5jb2RlX19kb2NfXywKQEAgLTQ1LDExICs0NiwxMyBAQAogc3RhdGljIGNoYXIgKnN0cmVhbWt3YXJnbGlzdFtdID0geyJzdHJlYW0iLCAiZXJyb3JzIiwgTlVMTH07CiAKIHN0YXRpYyBQeU9iamVjdCAqbXVsdGlieXRlY29kZWNfZW5jb2RlKE11bHRpYnl0ZUNvZGVjICosCi0gICAgICAgICAgICAgICAgTXVsdGlieXRlQ29kZWNfU3RhdGUgKiwgY29uc3QgUHlfVU5JQ09ERSAqKiwgUHlfc3NpemVfdCwKKyAgICAgICAgICAgICAgICBNdWx0aWJ5dGVDb2RlY19TdGF0ZSAqLCBQeU9iamVjdCAqLCBQeV9zc2l6ZV90ICosCiAgICAgICAgICAgICAgICAgUHlPYmplY3QgKiwgaW50KTsKIAogI2RlZmluZSBNQkVOQ19SRVNFVCAgICAgTUJFTkNfTUFYPDwxIC8qIHJlc2V0IGFmdGVyIGFuIGVuY29kaW5nIHNlc3Npb24gKi8KIAorX1B5X0lERU5USUZJRVIod3JpdGUpOworCiBzdGF0aWMgUHlPYmplY3QgKgogbWFrZV90dXBsZShQeU9iamVjdCAqb2JqZWN0LCBQeV9zc2l6ZV90IGxlbikKIHsKQEAgLTE3OSw4ICsxODIsMTAgQEAKICAgICBvcmdzaXplID0gUHlCeXRlc19HRVRfU0laRShidWYtPm91dG9iaik7CiAgICAgaW5jc2l6ZSA9IChlc2l6ZSA8IChvcmdzaXplID4+IDEpID8gKG9yZ3NpemUgPj4gMSkgfCAxIDogZXNpemUpOwogCi0gICAgaWYgKG9yZ3NpemUgPiBQWV9TU0laRV9UX01BWCAtIGluY3NpemUpCisgICAgaWYgKG9yZ3NpemUgPiBQWV9TU0laRV9UX01BWCAtIGluY3NpemUpIHsKKyAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgcmV0dXJuIC0xOworICAgIH0KIAogICAgIGlmIChfUHlCeXRlc19SZXNpemUoJmJ1Zi0+b3V0b2JqLCBvcmdzaXplICsgaW5jc2l6ZSkgPT0gLTEpCiAgICAgICAgIHJldHVybiAtMTsKQEAgLTE5MSwzNCArMTk2LDExIEBACiAKICAgICByZXR1cm4gMDsKIH0KLSNkZWZpbmUgUkVRVUlSRV9FTkNPREVCVUZGRVIoYnVmLCBzKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoKHMpIDwgMSB8fCAoYnVmKS0+b3V0YnVmICsgKHMpID4gKGJ1ZiktPm91dGJ1Zl9lbmQpICAgICAgICAgICAgIFwKKyNkZWZpbmUgUkVRVUlSRV9FTkNPREVCVUZGRVIoYnVmLCBzKSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoKHMpIDwgMCB8fCAocykgPiAoYnVmKS0+b3V0YnVmX2VuZCAtIChidWYpLT5vdXRidWYpICAgICAgICAgICAgIFwKICAgICAgICAgaWYgKGV4cGFuZF9lbmNvZGVidWZmZXIoYnVmLCBzKSA9PSAtMSkgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgIGdvdG8gZXJyb3JleGl0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLX0KLQotc3RhdGljIGludAotZXhwYW5kX2RlY29kZWJ1ZmZlcihNdWx0aWJ5dGVEZWNvZGVCdWZmZXIgKmJ1ZiwgUHlfc3NpemVfdCBlc2l6ZSkKLXsKLSAgICBQeV9zc2l6ZV90IG9yZ3Bvcywgb3Jnc2l6ZTsKLQotICAgIG9yZ3BvcyA9IChQeV9zc2l6ZV90KShidWYtPm91dGJ1ZiAtIFB5VW5pY29kZV9BU19VTklDT0RFKGJ1Zi0+b3V0b2JqKSk7Ci0gICAgb3Jnc2l6ZSA9IFB5VW5pY29kZV9HRVRfU0laRShidWYtPm91dG9iaik7Ci0gICAgaWYgKFB5VW5pY29kZV9SZXNpemUoJmJ1Zi0+b3V0b2JqLCBvcmdzaXplICsgKAotICAgICAgICBlc2l6ZSA8IChvcmdzaXplID4+IDEpID8gKG9yZ3NpemUgPj4gMSkgfCAxIDogZXNpemUpKSA9PSAtMSkKLSAgICAgICAgcmV0dXJuIC0xOwotCi0gICAgYnVmLT5vdXRidWYgPSBQeVVuaWNvZGVfQVNfVU5JQ09ERShidWYtPm91dG9iaikgKyBvcmdwb3M7Ci0gICAgYnVmLT5vdXRidWZfZW5kID0gUHlVbmljb2RlX0FTX1VOSUNPREUoYnVmLT5vdXRvYmopCi0gICAgICAgICAgICAgICAgICAgICAgKyBQeVVuaWNvZGVfR0VUX1NJWkUoYnVmLT5vdXRvYmopOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0jZGVmaW5lIFJFUVVJUkVfREVDT0RFQlVGRkVSKGJ1ZiwgcykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYgKChzKSA8IDEgfHwgKGJ1ZiktPm91dGJ1ZiArIChzKSA+IChidWYpLT5vdXRidWZfZW5kKSAgICAgICAgICAgICBcCi0gICAgICAgIGlmIChleHBhbmRfZGVjb2RlYnVmZmVyKGJ1ZiwgcykgPT0gLTEpICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBnb3RvIGVycm9yZXhpdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19Cit9IHdoaWxlKDApCiAKIAogLyoqCkBAIC0yNDcsNyArMjI5LDcgQEAKICAgICAgICAgICAgIHJldHVybiAwOyAvKiByZXRyeSBpdCAqLwogICAgICAgICBjYXNlIE1CRVJSX1RPT0ZFVzoKICAgICAgICAgICAgIHJlYXNvbiA9ICJpbmNvbXBsZXRlIG11bHRpYnl0ZSBzZXF1ZW5jZSI7Ci0gICAgICAgICAgICBlc2l6ZSA9IChQeV9zc2l6ZV90KShidWYtPmluYnVmX2VuZCAtIGJ1Zi0+aW5idWYpOworICAgICAgICAgICAgZXNpemUgPSAoUHlfc3NpemVfdClidWYtPmlucG9zOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTUJFUlJfSU5URVJOQUw6CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLApAQCAtMjYxLDE0ICsyNDMsMjQgQEAKICAgICB9CiAKICAgICBpZiAoZXJyb3JzID09IEVSUk9SX1JFUExBQ0UpIHsKLSAgICAgICAgY29uc3QgUHlfVU5JQ09ERSByZXBsY2hhciA9ICc/JywgKmluYnVmID0gJnJlcGxjaGFyOworICAgICAgICBQeU9iamVjdCAqcmVwbGNoYXI7CiAgICAgICAgIFB5X3NzaXplX3QgcjsKKyAgICAgICAgUHlfc3NpemVfdCBpbnBvczsKKyAgICAgICAgaW50IGtpbmQ7CisgICAgICAgIHZvaWQgKmRhdGE7CiAKKyAgICAgICAgcmVwbGNoYXIgPSBQeVVuaWNvZGVfRnJvbU9yZGluYWwoJz8nKTsKKyAgICAgICAgaWYgKHJlcGxjaGFyID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGVycm9yZXhpdDsKKyAgICAgICAga2luZCA9IFB5VW5pY29kZV9LSU5EKHJlcGxjaGFyKTsKKyAgICAgICAgZGF0YSA9IFB5VW5pY29kZV9EQVRBKHJlcGxjaGFyKTsKKworICAgICAgICBpbnBvcyA9IDA7CiAgICAgICAgIGZvciAoOzspIHsKLSAgICAgICAgICAgIFB5X3NzaXplX3Qgb3V0bGVmdDsKKyAgICAgICAgICAgIFB5X3NzaXplX3Qgb3V0bGVmdCA9IChQeV9zc2l6ZV90KShidWYtPm91dGJ1Zl9lbmQgLSBidWYtPm91dGJ1Zik7CiAKLSAgICAgICAgICAgIG91dGxlZnQgPSAoUHlfc3NpemVfdCkoYnVmLT5vdXRidWZfZW5kIC0gYnVmLT5vdXRidWYpOwotICAgICAgICAgICAgciA9IGNvZGVjLT5lbmNvZGUoc3RhdGUsIGNvZGVjLT5jb25maWcsICZpbmJ1ZiwgMSwKKyAgICAgICAgICAgIHIgPSBjb2RlYy0+ZW5jb2RlKHN0YXRlLCBjb2RlYy0+Y29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2luZCwgZGF0YSwgJmlucG9zLCAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJ1Zi0+b3V0YnVmLCBvdXRsZWZ0LCAwKTsKICAgICAgICAgICAgIGlmIChyID09IE1CRVJSX1RPT1NNQUxMKSB7CiAgICAgICAgICAgICAgICAgUkVRVUlSRV9FTkNPREVCVUZGRVIoYnVmLCAtMSk7CkBAIC0yNzgsMjUgKzI3MCwyNyBAQAogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKKyAgICAgICAgUHlfREVDUkVGKHJlcGxjaGFyKTsKKwogICAgICAgICBpZiAociAhPSAwKSB7CiAgICAgICAgICAgICBSRVFVSVJFX0VOQ09ERUJVRkZFUihidWYsIDEpOwogICAgICAgICAgICAgKmJ1Zi0+b3V0YnVmKysgPSAnPyc7CiAgICAgICAgIH0KICAgICB9CiAgICAgaWYgKGVycm9ycyA9PSBFUlJPUl9JR05PUkUgfHwgZXJyb3JzID09IEVSUk9SX1JFUExBQ0UpIHsKLSAgICAgICAgYnVmLT5pbmJ1ZiArPSBlc2l6ZTsKKyAgICAgICAgYnVmLT5pbnBvcyArPSBlc2l6ZTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgc3RhcnQgPSAoUHlfc3NpemVfdCkoYnVmLT5pbmJ1ZiAtIGJ1Zi0+aW5idWZfdG9wKTsKKyAgICBzdGFydCA9IChQeV9zc2l6ZV90KWJ1Zi0+aW5wb3M7CiAgICAgZW5kID0gc3RhcnQgKyBlc2l6ZTsKIAogICAgIC8qIHVzZSBjYWNoZWQgZXhjZXB0aW9uIG9iamVjdCBpZiBhdmFpbGFibGUgKi8KICAgICBpZiAoYnVmLT5leGNvYmogPT0gTlVMTCkgewotICAgICAgICBidWYtPmV4Y29iaiA9IFB5VW5pY29kZUVuY29kZUVycm9yX0NyZWF0ZShjb2RlYy0+ZW5jb2RpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICBidWYtPmluYnVmX3RvcCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGJ1Zi0+aW5idWZfZW5kIC0gYnVmLT5pbmJ1Zl90b3AsCi0gICAgICAgICAgICAgICAgICAgICAgICBzdGFydCwgZW5kLCByZWFzb24pOworICAgICAgICBidWYtPmV4Y29iaiA9ICBQeU9iamVjdF9DYWxsRnVuY3Rpb24oUHlFeGNfVW5pY29kZUVuY29kZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNPbm5zIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVjLT5lbmNvZGluZywgYnVmLT5pbm9iaiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0LCBlbmQsIHJlYXNvbik7CiAgICAgICAgIGlmIChidWYtPmV4Y29iaiA9PSBOVUxMKQogICAgICAgICAgICAgZ290byBlcnJvcmV4aXQ7CiAgICAgfQpAQCAtMzI1LDEwICszMTksMTAgQEAKICAgICB9CiAKICAgICBpZiAoUHlVbmljb2RlX0NoZWNrKHRvYmopKSB7Ci0gICAgICAgIGNvbnN0IFB5X1VOSUNPREUgKnVyYXcgPSBQeVVuaWNvZGVfQVNfVU5JQ09ERSh0b2JqKTsKKyAgICAgICAgUHlfc3NpemVfdCBpbnBvczsKIAotICAgICAgICByZXRzdHIgPSBtdWx0aWJ5dGVjb2RlY19lbmNvZGUoY29kZWMsIHN0YXRlLCAmdXJhdywKLSAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9HRVRfU0laRSh0b2JqKSwgRVJST1JfU1RSSUNULAorICAgICAgICByZXRzdHIgPSBtdWx0aWJ5dGVjb2RlY19lbmNvZGUoY29kZWMsIHN0YXRlLCB0b2JqLAorICAgICAgICAgICAgICAgICAgICAgICAgJmlucG9zLCBFUlJPUl9TVFJJQ1QsCiAgICAgICAgICAgICAgICAgICAgICAgICBNQkVOQ19GTFVTSCk7CiAgICAgICAgIGlmIChyZXRzdHIgPT0gTlVMTCkKICAgICAgICAgICAgIGdvdG8gZXJyb3JleGl0OwpAQCAtMzQwLDIyICszMzQsMjMgQEAKIAogICAgIGFzc2VydChQeUJ5dGVzX0NoZWNrKHJldHN0cikpOwogICAgIHJldHN0cnNpemUgPSBQeUJ5dGVzX0dFVF9TSVpFKHJldHN0cik7Ci0gICAgUkVRVUlSRV9FTkNPREVCVUZGRVIoYnVmLCByZXRzdHJzaXplKTsKLQotICAgIG1lbWNweShidWYtPm91dGJ1ZiwgUHlCeXRlc19BU19TVFJJTkcocmV0c3RyKSwgcmV0c3Ryc2l6ZSk7Ci0gICAgYnVmLT5vdXRidWYgKz0gcmV0c3Ryc2l6ZTsKKyAgICBpZiAocmV0c3Ryc2l6ZSA+IDApIHsKKyAgICAgICAgUkVRVUlSRV9FTkNPREVCVUZGRVIoYnVmLCByZXRzdHJzaXplKTsKKyAgICAgICAgbWVtY3B5KGJ1Zi0+b3V0YnVmLCBQeUJ5dGVzX0FTX1NUUklORyhyZXRzdHIpLCByZXRzdHJzaXplKTsKKyAgICAgICAgYnVmLT5vdXRidWYgKz0gcmV0c3Ryc2l6ZTsKKyAgICB9CiAKICAgICBuZXdwb3MgPSBQeUxvbmdfQXNTc2l6ZV90KFB5VHVwbGVfR0VUX0lURU0ocmV0b2JqLCAxKSk7CiAgICAgaWYgKG5ld3BvcyA8IDAgJiYgIVB5RXJyX09jY3VycmVkKCkpCi0gICAgICAgIG5ld3BvcyArPSAoUHlfc3NpemVfdCkoYnVmLT5pbmJ1Zl9lbmQgLSBidWYtPmluYnVmX3RvcCk7Ci0gICAgaWYgKG5ld3BvcyA8IDAgfHwgYnVmLT5pbmJ1Zl90b3AgKyBuZXdwb3MgPiBidWYtPmluYnVmX2VuZCkgeworICAgICAgICBuZXdwb3MgKz0gKFB5X3NzaXplX3QpYnVmLT5pbmxlbjsKKyAgICBpZiAobmV3cG9zIDwgMCB8fCBuZXdwb3MgPiBidWYtPmlubGVuKSB7CiAgICAgICAgIFB5RXJyX0NsZWFyKCk7CiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19JbmRleEVycm9yLAogICAgICAgICAgICAgICAgICAgICAgInBvc2l0aW9uICV6ZCBmcm9tIGVycm9yIGhhbmRsZXIgb3V0IG9mIGJvdW5kcyIsCiAgICAgICAgICAgICAgICAgICAgICBuZXdwb3MpOwogICAgICAgICBnb3RvIGVycm9yZXhpdDsKICAgICB9Ci0gICAgYnVmLT5pbmJ1ZiA9IGJ1Zi0+aW5idWZfdG9wICsgbmV3cG9zOworICAgIGJ1Zi0+aW5wb3MgPSBuZXdwb3M7CiAKICAgICBQeV9ERUNSRUYocmV0b2JqKTsKICAgICBQeV9ERUNSRUYocmV0c3RyKTsKQEAgLTM3NCw3ICszNjksNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmVycm9ycywgUHlfc3NpemVfdCBlKQogewogICAgIFB5T2JqZWN0ICpyZXRvYmogPSBOVUxMLCAqcmV0dW5pID0gTlVMTDsKLSAgICBQeV9zc2l6ZV90IHJldHVuaXNpemUsIG5ld3BvczsKKyAgICBQeV9zc2l6ZV90IG5ld3BvczsKICAgICBjb25zdCBjaGFyICpyZWFzb247CiAgICAgUHlfc3NpemVfdCBlc2l6ZSwgc3RhcnQsIGVuZDsKIApAQCAtMzg1LDcgKzM4MCw2IEBACiAgICAgZWxzZSB7CiAgICAgICAgIHN3aXRjaCAoZSkgewogICAgICAgICBjYXNlIE1CRVJSX1RPT1NNQUxMOgotICAgICAgICAgICAgUkVRVUlSRV9ERUNPREVCVUZGRVIoYnVmLCAtMSk7CiAgICAgICAgICAgICByZXR1cm4gMDsgLyogcmV0cnkgaXQgKi8KICAgICAgICAgY2FzZSBNQkVSUl9UT09GRVc6CiAgICAgICAgICAgICByZWFzb24gPSAiaW5jb21wbGV0ZSBtdWx0aWJ5dGUgc2VxdWVuY2UiOwpAQCAtMzk1LDYgKzM4OSw4IEBACiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnRlcm5hbCBjb2RlYyBlcnJvciIpOwogICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICBjYXNlIE1CRVJSX0VYQ0VQVElPTjoKKyAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVua25vd24gcnVudGltZSBlcnJvciIpOwpAQCAtNDAzLDggKzM5OSw5IEBACiAgICAgfQogCiAgICAgaWYgKGVycm9ycyA9PSBFUlJPUl9SRVBMQUNFKSB7Ci0gICAgICAgIFJFUVVJUkVfREVDT0RFQlVGRkVSKGJ1ZiwgMSk7Ci0gICAgICAgICpidWYtPm91dGJ1ZisrID0gUHlfVU5JQ09ERV9SRVBMQUNFTUVOVF9DSEFSQUNURVI7CisgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcigmYnVmLT53cml0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9VTklDT0RFX1JFUExBQ0VNRU5UX0NIQVJBQ1RFUikgPCAwKQorICAgICAgICAgICAgZ290byBlcnJvcmV4aXQ7CiAgICAgfQogICAgIGlmIChlcnJvcnMgPT0gRVJST1JfSUdOT1JFIHx8IGVycm9ycyA9PSBFUlJPUl9SRVBMQUNFKSB7CiAgICAgICAgIGJ1Zi0+aW5idWYgKz0gZXNpemU7CkBAIC00NDcsMTUgKzQ0NCw4IEBACiAgICAgICAgIGdvdG8gZXJyb3JleGl0OwogICAgIH0KIAotICAgIGlmIChQeVVuaWNvZGVfQXNVbmljb2RlKHJldHVuaSkgPT0gTlVMTCkKKyAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZVN0cigmYnVmLT53cml0ZXIsIHJldHVuaSkgPCAwKQogICAgICAgICBnb3RvIGVycm9yZXhpdDsKLSAgICByZXR1bmlzaXplID0gUHlVbmljb2RlX0dFVF9TSVpFKHJldHVuaSk7Ci0gICAgaWYgKHJldHVuaXNpemUgPiAwKSB7Ci0gICAgICAgIFJFUVVJUkVfREVDT0RFQlVGRkVSKGJ1ZiwgcmV0dW5pc2l6ZSk7Ci0gICAgICAgIG1lbWNweSgoY2hhciAqKWJ1Zi0+b3V0YnVmLCBQeVVuaWNvZGVfQVNfVU5JQ09ERShyZXR1bmkpLAotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dW5pc2l6ZSAqIFB5X1VOSUNPREVfU0laRSk7Ci0gICAgICAgIGJ1Zi0+b3V0YnVmICs9IHJldHVuaXNpemU7Ci0gICAgfQogCiAgICAgbmV3cG9zID0gUHlMb25nX0FzU3NpemVfdChQeVR1cGxlX0dFVF9JVEVNKHJldG9iaiwgMSkpOwogICAgIGlmIChuZXdwb3MgPCAwICYmICFQeUVycl9PY2N1cnJlZCgpKQpAQCAtNDc5LDE5ICs0NjksMjkgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBtdWx0aWJ5dGVjb2RlY19lbmNvZGUoTXVsdGlieXRlQ29kZWMgKmNvZGVjLAogICAgICAgICAgICAgICAgICAgICAgIE11bHRpYnl0ZUNvZGVjX1N0YXRlICpzdGF0ZSwKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBQeV9VTklDT0RFICoqZGF0YSwgUHlfc3NpemVfdCBkYXRhbGVuLAorICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICp0ZXh0LCBQeV9zc2l6ZV90ICppbnBvc190LAogICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICplcnJvcnMsIGludCBmbGFncykKIHsKICAgICBNdWx0aWJ5dGVFbmNvZGVCdWZmZXIgYnVmOwogICAgIFB5X3NzaXplX3QgZmluYWxzaXplLCByID0gMDsKKyAgICBQeV9zc2l6ZV90IGRhdGFsZW47CisgICAgaW50IGtpbmQ7CisgICAgdm9pZCAqZGF0YTsKKworICAgIGlmIChQeVVuaWNvZGVfUkVBRFkodGV4dCkgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBkYXRhbGVuID0gUHlVbmljb2RlX0dFVF9MRU5HVEgodGV4dCk7CiAKICAgICBpZiAoZGF0YWxlbiA9PSAwICYmICEoZmxhZ3MgJiBNQkVOQ19SRVNFVCkpCiAgICAgICAgIHJldHVybiBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIDApOwogCiAgICAgYnVmLmV4Y29iaiA9IE5VTEw7CiAgICAgYnVmLm91dG9iaiA9IE5VTEw7Ci0gICAgYnVmLmluYnVmID0gYnVmLmluYnVmX3RvcCA9ICpkYXRhOwotICAgIGJ1Zi5pbmJ1Zl9lbmQgPSBidWYuaW5idWZfdG9wICsgZGF0YWxlbjsKKyAgICBidWYuaW5vYmogPSB0ZXh0OyAgIC8qIGJvcnJvd2VkIHJlZmVyZW5jZSAqLworICAgIGJ1Zi5pbnBvcyA9IDA7CisgICAgYnVmLmlubGVuID0gZGF0YWxlbjsKKyAgICBraW5kID0gUHlVbmljb2RlX0tJTkQoYnVmLmlub2JqKTsKKyAgICBkYXRhID0gUHlVbmljb2RlX0RBVEEoYnVmLmlub2JqKTsKIAogICAgIGlmIChkYXRhbGVuID4gKFBZX1NTSVpFX1RfTUFYIC0gMTYpIC8gMikgewogICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwpAQCAtNTA0LDE0ICs1MDQsMTQgQEAKICAgICBidWYub3V0YnVmID0gKHVuc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FTX1NUUklORyhidWYub3V0b2JqKTsKICAgICBidWYub3V0YnVmX2VuZCA9IGJ1Zi5vdXRidWYgKyBQeUJ5dGVzX0dFVF9TSVpFKGJ1Zi5vdXRvYmopOwogCi0gICAgd2hpbGUgKGJ1Zi5pbmJ1ZiA8IGJ1Zi5pbmJ1Zl9lbmQpIHsKLSAgICAgICAgUHlfc3NpemVfdCBpbmxlZnQsIG91dGxlZnQ7Ci0KKyAgICB3aGlsZSAoYnVmLmlucG9zIDwgYnVmLmlubGVuKSB7CiAgICAgICAgIC8qIHdlIGRvbid0IHJldXNlIGlubGVmdCBhbmQgb3V0bGVmdCBoZXJlLgogICAgICAgICAgKiBlcnJvciBjYWxsYmFja3MgY2FuIHJlbG9jYXRlIHRoZSBjdXJzb3IgYW55d2hlcmUgb24gYnVmZmVyKi8KLSAgICAgICAgaW5sZWZ0ID0gKFB5X3NzaXplX3QpKGJ1Zi5pbmJ1Zl9lbmQgLSBidWYuaW5idWYpOwotICAgICAgICBvdXRsZWZ0ID0gKFB5X3NzaXplX3QpKGJ1Zi5vdXRidWZfZW5kIC0gYnVmLm91dGJ1Zik7Ci0gICAgICAgIHIgPSBjb2RlYy0+ZW5jb2RlKHN0YXRlLCBjb2RlYy0+Y29uZmlnLCAmYnVmLmluYnVmLCBpbmxlZnQsCisgICAgICAgIFB5X3NzaXplX3Qgb3V0bGVmdCA9IChQeV9zc2l6ZV90KShidWYub3V0YnVmX2VuZCAtIGJ1Zi5vdXRidWYpOworCisgICAgICAgIHIgPSBjb2RlYy0+ZW5jb2RlKHN0YXRlLCBjb2RlYy0+Y29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgICAgICBraW5kLCBkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAmYnVmLmlucG9zLCBidWYuaW5sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICZidWYub3V0YnVmLCBvdXRsZWZ0LCBmbGFncyk7CiAgICAgICAgIGlmICgociA9PSAwKSB8fCAociA9PSBNQkVSUl9UT09GRVcgJiYgIShmbGFncyAmIE1CRU5DX0ZMVVNIKSkpCiAgICAgICAgICAgICBicmVhazsKQEAgLTU0Miw3ICs1NDIsOCBAQAogICAgICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZidWYub3V0b2JqLCBmaW5hbHNpemUpID09IC0xKQogICAgICAgICAgICAgZ290byBlcnJvcmV4aXQ7CiAKLSAgICAqZGF0YSA9IGJ1Zi5pbmJ1ZjsKKyAgICBpZiAoaW5wb3NfdCkKKyAgICAgICAgKmlucG9zX3QgPSBidWYuaW5wb3M7CiAgICAgUHlfWERFQ1JFRihidWYuZXhjb2JqKTsKICAgICByZXR1cm4gYnVmLm91dG9iajsKIApAQCAtNTU3LDcgKzU1OCw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCiB7CiAgICAgTXVsdGlieXRlQ29kZWNfU3RhdGUgc3RhdGU7Ci0gICAgUHlfVU5JQ09ERSAqZGF0YTsKICAgICBQeU9iamVjdCAqZXJyb3JjYiwgKnIsICphcmcsICp1Y3Z0OwogICAgIGNvbnN0IGNoYXIgKmVycm9ycyA9IE5VTEw7CiAgICAgUHlfc3NpemVfdCBkYXRhbGVuOwpAQCAtNTgwLDExICs1ODAsMTEgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIGRhdGEgPSBQeVVuaWNvZGVfQXNVbmljb2RlQW5kU2l6ZShhcmcsICZkYXRhbGVuKTsKLSAgICBpZiAoZGF0YSA9PSBOVUxMKSB7CisgICAgaWYgKFB5VW5pY29kZV9SRUFEWShhcmcpIDwgMCkgewogICAgICAgICBQeV9YREVDUkVGKHVjdnQpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CisgICAgZGF0YWxlbiA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKGFyZyk7CiAKICAgICBlcnJvcmNiID0gaW50ZXJuYWxfZXJyb3JfY2FsbGJhY2soZXJyb3JzKTsKICAgICBpZiAoZXJyb3JjYiA9PSBOVUxMKSB7CkBAIC01OTYsNyArNTk2LDcgQEAKICAgICAgICAgc2VsZi0+Y29kZWMtPmVuY2luaXQoJnN0YXRlLCBzZWxmLT5jb2RlYy0+Y29uZmlnKSAhPSAwKQogICAgICAgICBnb3RvIGVycm9yZXhpdDsKICAgICByID0gbXVsdGlieXRlY29kZWNfZW5jb2RlKHNlbGYtPmNvZGVjLCAmc3RhdGUsCi0gICAgICAgICAgICAgICAgICAgIChjb25zdCBQeV9VTklDT0RFICoqKSZkYXRhLCBkYXRhbGVuLCBlcnJvcmNiLAorICAgICAgICAgICAgICAgICAgICBhcmcsIE5VTEwsIGVycm9yY2IsCiAgICAgICAgICAgICAgICAgICAgIE1CRU5DX0ZMVVNIIHwgTUJFTkNfUkVTRVQpOwogICAgIGlmIChyID09IE5VTEwpCiAgICAgICAgIGdvdG8gZXJyb3JleGl0OwpAQCAtNjE3LDEwICs2MTcsMTAgQEAKIHsKICAgICBNdWx0aWJ5dGVDb2RlY19TdGF0ZSBzdGF0ZTsKICAgICBNdWx0aWJ5dGVEZWNvZGVCdWZmZXIgYnVmOwotICAgIFB5T2JqZWN0ICplcnJvcmNiOworICAgIFB5T2JqZWN0ICplcnJvcmNiLCAqcmVzOwogICAgIFB5X2J1ZmZlciBwZGF0YTsKICAgICBjb25zdCBjaGFyICpkYXRhLCAqZXJyb3JzID0gTlVMTDsKLSAgICBQeV9zc2l6ZV90IGRhdGFsZW4sIGZpbmFsc2l6ZTsKKyAgICBQeV9zc2l6ZV90IGRhdGFsZW47CiAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJ5Knx6OmRlY29kZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZWNrd2FyZ2xpc3QsICZwZGF0YSwgJmVycm9ycykpCkBAIC02NDAsMjkgKzY0MCwyMyBAQAogICAgICAgICByZXR1cm4gbWFrZV90dXBsZShQeVVuaWNvZGVfTmV3KDAsIDApLCAwKTsKICAgICB9CiAKKyAgICBfUHlVbmljb2RlV3JpdGVyX0luaXQoJmJ1Zi53cml0ZXIpOworICAgIGJ1Zi53cml0ZXIubWluX2xlbmd0aCA9IGRhdGFsZW47CiAgICAgYnVmLmV4Y29iaiA9IE5VTEw7CiAgICAgYnVmLmluYnVmID0gYnVmLmluYnVmX3RvcCA9ICh1bnNpZ25lZCBjaGFyICopZGF0YTsKICAgICBidWYuaW5idWZfZW5kID0gYnVmLmluYnVmX3RvcCArIGRhdGFsZW47Ci0gICAgYnVmLm91dG9iaiA9IFB5VW5pY29kZV9Gcm9tVW5pY29kZShOVUxMLCBkYXRhbGVuKTsKLSAgICBpZiAoYnVmLm91dG9iaiA9PSBOVUxMKQotICAgICAgICBnb3RvIGVycm9yZXhpdDsKLSAgICBidWYub3V0YnVmID0gUHlVbmljb2RlX0FTX1VOSUNPREUoYnVmLm91dG9iaik7Ci0gICAgaWYgKGJ1Zi5vdXRidWYgPT0gTlVMTCkKLSAgICAgICAgZ290byBlcnJvcmV4aXQ7Ci0gICAgYnVmLm91dGJ1Zl9lbmQgPSBidWYub3V0YnVmICsgUHlVbmljb2RlX0dFVF9TSVpFKGJ1Zi5vdXRvYmopOwogCiAgICAgaWYgKHNlbGYtPmNvZGVjLT5kZWNpbml0ICE9IE5VTEwgJiYKICAgICAgICAgc2VsZi0+Y29kZWMtPmRlY2luaXQoJnN0YXRlLCBzZWxmLT5jb2RlYy0+Y29uZmlnKSAhPSAwKQogICAgICAgICBnb3RvIGVycm9yZXhpdDsKIAogICAgIHdoaWxlIChidWYuaW5idWYgPCBidWYuaW5idWZfZW5kKSB7Ci0gICAgICAgIFB5X3NzaXplX3QgaW5sZWZ0LCBvdXRsZWZ0LCByOworICAgICAgICBQeV9zc2l6ZV90IGlubGVmdCwgcjsKIAogICAgICAgICBpbmxlZnQgPSAoUHlfc3NpemVfdCkoYnVmLmluYnVmX2VuZCAtIGJ1Zi5pbmJ1Zik7Ci0gICAgICAgIG91dGxlZnQgPSAoUHlfc3NpemVfdCkoYnVmLm91dGJ1Zl9lbmQgLSBidWYub3V0YnVmKTsKIAogICAgICAgICByID0gc2VsZi0+Y29kZWMtPmRlY29kZSgmc3RhdGUsIHNlbGYtPmNvZGVjLT5jb25maWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAmYnVmLmluYnVmLCBpbmxlZnQsICZidWYub3V0YnVmLCBvdXRsZWZ0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICZidWYuaW5idWYsIGlubGVmdCwgJmJ1Zi53cml0ZXIpOwogICAgICAgICBpZiAociA9PSAwKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGVsc2UgaWYgKG11bHRpYnl0ZWNvZGVjX2RlY2Vycm9yKHNlbGYtPmNvZGVjLCAmc3RhdGUsCkBAIC02NzAsMjMgKzY2NCwyMCBAQAogICAgICAgICAgICAgZ290byBlcnJvcmV4aXQ7CiAgICAgfQogCi0gICAgZmluYWxzaXplID0gKFB5X3NzaXplX3QpKGJ1Zi5vdXRidWYgLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfQVNfVU5JQ09ERShidWYub3V0b2JqKSk7Ci0KLSAgICBpZiAoZmluYWxzaXplICE9IFB5VW5pY29kZV9HRVRfU0laRShidWYub3V0b2JqKSkKLSAgICAgICAgaWYgKFB5VW5pY29kZV9SZXNpemUoJmJ1Zi5vdXRvYmosIGZpbmFsc2l6ZSkgPT0gLTEpCi0gICAgICAgICAgICBnb3RvIGVycm9yZXhpdDsKKyAgICByZXMgPSBfUHlVbmljb2RlV3JpdGVyX0ZpbmlzaCgmYnVmLndyaXRlcik7CisgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICBnb3RvIGVycm9yZXhpdDsKIAogICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBkYXRhKTsKICAgICBQeV9YREVDUkVGKGJ1Zi5leGNvYmopOwogICAgIEVSUk9SX0RFQ1JFRihlcnJvcmNiKTsKLSAgICByZXR1cm4gbWFrZV90dXBsZShidWYub3V0b2JqLCBkYXRhbGVuKTsKKyAgICByZXR1cm4gbWFrZV90dXBsZShyZXMsIGRhdGFsZW4pOwogCiBlcnJvcmV4aXQ6CiAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGRhdGEpOwogICAgIEVSUk9SX0RFQ1JFRihlcnJvcmNiKTsKICAgICBQeV9YREVDUkVGKGJ1Zi5leGNvYmopOwotICAgIFB5X1hERUNSRUYoYnVmLm91dG9iaik7CisgICAgX1B5VW5pY29kZVdyaXRlcl9EZWFsbG9jKCZidWYud3JpdGVyKTsKIAogICAgIHJldHVybiBOVUxMOwogfQpAQCAtNzUyLDkgKzc0Myw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqdW5pc3RyLCBpbnQgZmluYWwpCiB7CiAgICAgUHlPYmplY3QgKnVjdnQsICpyID0gTlVMTDsKLSAgICBQeV9VTklDT0RFICppbmJ1ZiwgKmluYnVmX2VuZCwgKmluYnVmX3RtcCA9IE5VTEw7Ci0gICAgUHlfc3NpemVfdCBkYXRhbGVuLCBvcmlncGVuZGluZzsKLSAgICB3Y2hhcl90ICpkYXRhOworICAgIFB5T2JqZWN0ICppbmJ1ZiA9IE5VTEw7CisgICAgUHlfc3NpemVfdCBpbnBvcywgZGF0YWxlbjsKKyAgICBQeU9iamVjdCAqb3JpZ3BlbmRpbmcgPSBOVUxMOwogCiAgICAgaWYgKFB5VW5pY29kZV9DaGVjayh1bmlzdHIpKQogICAgICAgICB1Y3Z0ID0gTlVMTDsKQEAgLTc3MCw2OSArNzYxLDY2IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBkYXRhID0gUHlVbmljb2RlX0FzVW5pY29kZUFuZFNpemUodW5pc3RyLCAmZGF0YWxlbik7Ci0gICAgaWYgKGRhdGEgPT0gTlVMTCkKLSAgICAgICAgZ290byBlcnJvcmV4aXQ7Ci0gICAgb3JpZ3BlbmRpbmcgPSBjdHgtPnBlbmRpbmdzaXplOworICAgIGlmIChjdHgtPnBlbmRpbmcpIHsKKyAgICAgICAgUHlPYmplY3QgKmluYnVmX3RtcDsKIAotICAgIGlmIChvcmlncGVuZGluZyA+IDApIHsKLSAgICAgICAgaWYgKGRhdGFsZW4gPiBQWV9TU0laRV9UX01BWCAtIGN0eC0+cGVuZGluZ3NpemUpIHsKLSAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7Ci0gICAgICAgICAgICAvKiBpbmJ1Zl90bXAgPT0gTlVMTCAqLwotICAgICAgICAgICAgZ290byBlcnJvcmV4aXQ7Ci0gICAgICAgIH0KLSAgICAgICAgaW5idWZfdG1wID0gUHlNZW1fTmV3KFB5X1VOSUNPREUsIGRhdGFsZW4gKyBjdHgtPnBlbmRpbmdzaXplKTsKKyAgICAgICAgUHlfSU5DUkVGKGN0eC0+cGVuZGluZyk7CisgICAgICAgIG9yaWdwZW5kaW5nID0gY3R4LT5wZW5kaW5nOworCisgICAgICAgIFB5X0lOQ1JFRihjdHgtPnBlbmRpbmcpOworICAgICAgICBpbmJ1Zl90bXAgPSBjdHgtPnBlbmRpbmc7CisgICAgICAgIFB5VW5pY29kZV9BcHBlbmQoJmluYnVmX3RtcCwgdW5pc3RyKTsKICAgICAgICAgaWYgKGluYnVmX3RtcCA9PSBOVUxMKQogICAgICAgICAgICAgZ290byBlcnJvcmV4aXQ7Ci0gICAgICAgIG1lbWNweShpbmJ1Zl90bXAsIGN0eC0+cGVuZGluZywKLSAgICAgICAgICAgIFB5X1VOSUNPREVfU0laRSAqIGN0eC0+cGVuZGluZ3NpemUpOwotICAgICAgICBtZW1jcHkoaW5idWZfdG1wICsgY3R4LT5wZW5kaW5nc2l6ZSwKLSAgICAgICAgICAgIFB5VW5pY29kZV9BU19VTklDT0RFKHVuaXN0ciksCi0gICAgICAgICAgICBQeV9VTklDT0RFX1NJWkUgKiBkYXRhbGVuKTsKLSAgICAgICAgZGF0YWxlbiArPSBjdHgtPnBlbmRpbmdzaXplOwotICAgICAgICBjdHgtPnBlbmRpbmdzaXplID0gMDsKKyAgICAgICAgUHlfQ0xFQVIoY3R4LT5wZW5kaW5nKTsKICAgICAgICAgaW5idWYgPSBpbmJ1Zl90bXA7CiAgICAgfQotICAgIGVsc2UKLSAgICAgICAgaW5idWYgPSAoUHlfVU5JQ09ERSAqKVB5VW5pY29kZV9BU19VTklDT0RFKHVuaXN0cik7CisgICAgZWxzZSB7CisgICAgICAgIG9yaWdwZW5kaW5nID0gTlVMTDsKIAotICAgIGluYnVmX2VuZCA9IGluYnVmICsgZGF0YWxlbjsKKyAgICAgICAgUHlfSU5DUkVGKHVuaXN0cik7CisgICAgICAgIGluYnVmID0gdW5pc3RyOworICAgIH0KKyAgICBpZiAoUHlVbmljb2RlX1JFQURZKGluYnVmKSA8IDApCisgICAgICAgIGdvdG8gZXJyb3JleGl0OworICAgIGlucG9zID0gMDsKKyAgICBkYXRhbGVuID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoaW5idWYpOwogCiAgICAgciA9IG11bHRpYnl0ZWNvZGVjX2VuY29kZShjdHgtPmNvZGVjLCAmY3R4LT5zdGF0ZSwKLSAgICAgICAgICAgICAgICAgICAgKGNvbnN0IFB5X1VOSUNPREUgKiopJmluYnVmLCBkYXRhbGVuLAotICAgICAgICAgICAgICAgICAgICBjdHgtPmVycm9ycywgZmluYWwgPyBNQkVOQ19GTFVTSCB8IE1CRU5DX1JFU0VUIDogMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmJ1ZiwgJmlucG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5lcnJvcnMsIGZpbmFsID8gTUJFTkNfRkxVU0ggfCBNQkVOQ19SRVNFVCA6IDApOwogICAgIGlmIChyID09IE5VTEwpIHsKICAgICAgICAgLyogcmVjb3ZlciB0aGUgb3JpZ2luYWwgcGVuZGluZyBidWZmZXIgKi8KLSAgICAgICAgaWYgKG9yaWdwZW5kaW5nID4gMCkKLSAgICAgICAgICAgIG1lbWNweShjdHgtPnBlbmRpbmcsIGluYnVmX3RtcCwKLSAgICAgICAgICAgICAgICBQeV9VTklDT0RFX1NJWkUgKiBvcmlncGVuZGluZyk7Ci0gICAgICAgIGN0eC0+cGVuZGluZ3NpemUgPSBvcmlncGVuZGluZzsKKyAgICAgICAgUHlfQ0xFQVIoY3R4LT5wZW5kaW5nKTsKKyAgICAgICAgY3R4LT5wZW5kaW5nID0gb3JpZ3BlbmRpbmc7CisgICAgICAgIG9yaWdwZW5kaW5nID0gTlVMTDsKICAgICAgICAgZ290byBlcnJvcmV4aXQ7CiAgICAgfQorICAgIFB5X1hERUNSRUYob3JpZ3BlbmRpbmcpOwogCi0gICAgaWYgKGluYnVmIDwgaW5idWZfZW5kKSB7Ci0gICAgICAgIGN0eC0+cGVuZGluZ3NpemUgPSAoUHlfc3NpemVfdCkoaW5idWZfZW5kIC0gaW5idWYpOwotICAgICAgICBpZiAoY3R4LT5wZW5kaW5nc2l6ZSA+IE1BWEVOQ1BFTkRJTkcpIHsKKyAgICBpZiAoaW5wb3MgPCBkYXRhbGVuKSB7CisgICAgICAgIGlmIChkYXRhbGVuIC0gaW5wb3MgPiBNQVhFTkNQRU5ESU5HKSB7CiAgICAgICAgICAgICAvKiBub3JtYWwgY29kZWNzIGNhbid0IHJlYWNoIGhlcmUgKi8KLSAgICAgICAgICAgIGN0eC0+cGVuZGluZ3NpemUgPSAwOwogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1VuaWNvZGVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGVuZGluZyBidWZmZXIgb3ZlcmZsb3ciKTsKICAgICAgICAgICAgIGdvdG8gZXJyb3JleGl0OwogICAgICAgICB9Ci0gICAgICAgIG1lbWNweShjdHgtPnBlbmRpbmcsIGluYnVmLAotICAgICAgICAgICAgY3R4LT5wZW5kaW5nc2l6ZSAqIFB5X1VOSUNPREVfU0laRSk7CisgICAgICAgIGN0eC0+cGVuZGluZyA9IFB5VW5pY29kZV9TdWJzdHJpbmcoaW5idWYsIGlucG9zLCBkYXRhbGVuKTsKKyAgICAgICAgaWYgKGN0eC0+cGVuZGluZyA9PSBOVUxMKSB7CisgICAgICAgICAgICAvKiBub3JtYWwgY29kZWNzIGNhbid0IHJlYWNoIGhlcmUgKi8KKyAgICAgICAgICAgIGdvdG8gZXJyb3JleGl0OworICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKGluYnVmX3RtcCAhPSBOVUxMKQotICAgICAgICBQeU1lbV9EZWwoaW5idWZfdG1wKTsKKyAgICBQeV9ERUNSRUYoaW5idWYpOwogICAgIFB5X1hERUNSRUYodWN2dCk7CiAgICAgcmV0dXJuIHI7CiAKIGVycm9yZXhpdDoKLSAgICBpZiAoaW5idWZfdG1wICE9IE5VTEwpCi0gICAgICAgIFB5TWVtX0RlbChpbmJ1Zl90bXApOwogICAgIFB5X1hERUNSRUYocik7CiAgICAgUHlfWERFQ1JFRih1Y3Z0KTsKKyAgICBQeV9YREVDUkVGKG9yaWdwZW5kaW5nKTsKKyAgICBQeV9YREVDUkVGKGluYnVmKTsKICAgICByZXR1cm4gTlVMTDsKIH0KIApAQCAtODU5LDE3ICs4NDcsNyBAQAogewogICAgIGJ1Zi0+aW5idWYgPSBidWYtPmluYnVmX3RvcCA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopZGF0YTsKICAgICBidWYtPmluYnVmX2VuZCA9IGJ1Zi0+aW5idWZfdG9wICsgc2l6ZTsKLSAgICBpZiAoYnVmLT5vdXRvYmogPT0gTlVMTCkgeyAvKiBvbmx5IGlmIG91dG9iaiBpcyBub3QgYWxsb2NhdGVkIHlldCAqLwotICAgICAgICBidWYtPm91dG9iaiA9IFB5VW5pY29kZV9Gcm9tVW5pY29kZShOVUxMLCBzaXplKTsKLSAgICAgICAgaWYgKGJ1Zi0+b3V0b2JqID09IE5VTEwpCi0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIGJ1Zi0+b3V0YnVmID0gUHlVbmljb2RlX0FzVW5pY29kZShidWYtPm91dG9iaik7Ci0gICAgICAgIGlmIChidWYtPm91dGJ1ZiA9PSBOVUxMKQotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBidWYtPm91dGJ1Zl9lbmQgPSBidWYtPm91dGJ1ZiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9HRVRfU0laRShidWYtPm91dG9iaik7Ci0gICAgfQotCisgICAgYnVmLT53cml0ZXIubWluX2xlbmd0aCArPSBzaXplOwogICAgIHJldHVybiAwOwogfQogCkBAIC04NzgsMTQgKzg1NiwxMyBAQAogICAgICAgICAgICAgICAgICAgICBNdWx0aWJ5dGVEZWNvZGVCdWZmZXIgKmJ1ZikKIHsKICAgICB3aGlsZSAoYnVmLT5pbmJ1ZiA8IGJ1Zi0+aW5idWZfZW5kKSB7Ci0gICAgICAgIFB5X3NzaXplX3QgaW5sZWZ0LCBvdXRsZWZ0OworICAgICAgICBQeV9zc2l6ZV90IGlubGVmdDsKICAgICAgICAgUHlfc3NpemVfdCByOwogCiAgICAgICAgIGlubGVmdCA9IChQeV9zc2l6ZV90KShidWYtPmluYnVmX2VuZCAtIGJ1Zi0+aW5idWYpOwotICAgICAgICBvdXRsZWZ0ID0gKFB5X3NzaXplX3QpKGJ1Zi0+b3V0YnVmX2VuZCAtIGJ1Zi0+b3V0YnVmKTsKIAogICAgICAgICByID0gY3R4LT5jb2RlYy0+ZGVjb2RlKCZjdHgtPnN0YXRlLCBjdHgtPmNvZGVjLT5jb25maWcsCi0gICAgICAgICAgICAmYnVmLT5pbmJ1ZiwgaW5sZWZ0LCAmYnVmLT5vdXRidWYsIG91dGxlZnQpOworICAgICAgICAgICAgJmJ1Zi0+aW5idWYsIGlubGVmdCwgJmJ1Zi0+d3JpdGVyKTsKICAgICAgICAgaWYgKHIgPT0gMCB8fCByID09IE1CRVJSX1RPT0ZFVykKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBlbHNlIGlmIChtdWx0aWJ5dGVjb2RlY19kZWNlcnJvcihjdHgtPmNvZGVjLCAmY3R4LT5zdGF0ZSwKQEAgLTkyNyw3ICs5MDQsNyBAQAogICAgICAgICBpZiAociAhPSAwKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIHNlbGYtPnBlbmRpbmdzaXplID0gMDsKKyAgICBQeV9DTEVBUihzZWxmLT5wZW5kaW5nKTsKICAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIApAQCAtOTYzLDcgKzk0MCw3IEBACiAgICAgfQogCiAgICAgc2VsZi0+Y29kZWMgPSAoKE11bHRpYnl0ZUNvZGVjT2JqZWN0ICopY29kZWMpLT5jb2RlYzsKLSAgICBzZWxmLT5wZW5kaW5nc2l6ZSA9IDA7CisgICAgc2VsZi0+cGVuZGluZyA9IE5VTEw7CiAgICAgc2VsZi0+ZXJyb3JzID0gaW50ZXJuYWxfZXJyb3JfY2FsbGJhY2soZXJyb3JzKTsKICAgICBpZiAoc2VsZi0+ZXJyb3JzID09IE5VTEwpCiAgICAgICAgIGdvdG8gZXJyb3JleGl0OwpAQCAtMTA1OCw4ICsxMDM1LDkgQEAKICAgICBNdWx0aWJ5dGVEZWNvZGVCdWZmZXIgYnVmOwogICAgIGNoYXIgKmRhdGEsICp3ZGF0YSA9IE5VTEw7CiAgICAgUHlfYnVmZmVyIHBkYXRhOwotICAgIFB5X3NzaXplX3Qgd3NpemUsIGZpbmFsc2l6ZSA9IDAsIHNpemUsIG9yaWdwZW5kaW5nOworICAgIFB5X3NzaXplX3Qgd3NpemUsIHNpemUsIG9yaWdwZW5kaW5nOwogICAgIGludCBmaW5hbCA9IDA7CisgICAgUHlPYmplY3QgKnJlczsKIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgInkqfGk6ZGVjb2RlIiwKICAgICAgICAgICAgICAgICAgICAgaW5jcmVtZW50YWxrd2FyZ2xpc3QsICZwZGF0YSwgJmZpbmFsKSkKQEAgLTEwNjcsNyArMTA0NSw4IEBACiAgICAgZGF0YSA9IHBkYXRhLmJ1ZjsKICAgICBzaXplID0gcGRhdGEubGVuOwogCi0gICAgYnVmLm91dG9iaiA9IGJ1Zi5leGNvYmogPSBOVUxMOworICAgIF9QeVVuaWNvZGVXcml0ZXJfSW5pdCgmYnVmLndyaXRlcik7CisgICAgYnVmLmV4Y29iaiA9IE5VTEw7CiAgICAgb3JpZ3BlbmRpbmcgPSBzZWxmLT5wZW5kaW5nc2l6ZTsKIAogICAgIGlmIChzZWxmLT5wZW5kaW5nc2l6ZSA9PSAwKSB7CkBAIC0xMDgxLDggKzEwNjAsMTAgQEAKICAgICAgICAgfQogICAgICAgICB3c2l6ZSA9IHNpemUgKyBzZWxmLT5wZW5kaW5nc2l6ZTsKICAgICAgICAgd2RhdGEgPSBQeU1lbV9NYWxsb2Mod3NpemUpOwotICAgICAgICBpZiAod2RhdGEgPT0gTlVMTCkKKyAgICAgICAgaWYgKHdkYXRhID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgICAgICBnb3RvIGVycm9yZXhpdDsKKyAgICAgICAgfQogICAgICAgICBtZW1jcHkod2RhdGEsIHNlbGYtPnBlbmRpbmcsIHNlbGYtPnBlbmRpbmdzaXplKTsKICAgICAgICAgbWVtY3B5KHdkYXRhICsgc2VsZi0+cGVuZGluZ3NpemUsIGRhdGEsIHNpemUpOwogICAgICAgICBzZWxmLT5wZW5kaW5nc2l6ZSA9IDA7CkBAIC0xMTA5LDIzICsxMDkwLDIyIEBACiAgICAgICAgICAgICBnb3RvIGVycm9yZXhpdDsKICAgICB9CiAKLSAgICBmaW5hbHNpemUgPSAoUHlfc3NpemVfdCkoYnVmLm91dGJ1ZiAtIFB5VW5pY29kZV9BU19VTklDT0RFKGJ1Zi5vdXRvYmopKTsKLSAgICBpZiAoZmluYWxzaXplICE9IFB5VW5pY29kZV9HRVRfU0laRShidWYub3V0b2JqKSkKLSAgICAgICAgaWYgKFB5VW5pY29kZV9SZXNpemUoJmJ1Zi5vdXRvYmosIGZpbmFsc2l6ZSkgPT0gLTEpCi0gICAgICAgICAgICBnb3RvIGVycm9yZXhpdDsKKyAgICByZXMgPSBfUHlVbmljb2RlV3JpdGVyX0ZpbmlzaCgmYnVmLndyaXRlcik7CisgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICBnb3RvIGVycm9yZXhpdDsKIAogICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBkYXRhKTsKICAgICBpZiAod2RhdGEgIT0gZGF0YSkKICAgICAgICAgUHlNZW1fRGVsKHdkYXRhKTsKICAgICBQeV9YREVDUkVGKGJ1Zi5leGNvYmopOwotICAgIHJldHVybiBidWYub3V0b2JqOworICAgIHJldHVybiByZXM7CiAKIGVycm9yZXhpdDoKICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwZGF0YSk7CiAgICAgaWYgKHdkYXRhICE9IE5VTEwgJiYgd2RhdGEgIT0gZGF0YSkKICAgICAgICAgUHlNZW1fRGVsKHdkYXRhKTsKICAgICBQeV9YREVDUkVGKGJ1Zi5leGNvYmopOwotICAgIFB5X1hERUNSRUYoYnVmLm91dG9iaik7CisgICAgX1B5VW5pY29kZVdyaXRlcl9EZWFsbG9jKCZidWYud3JpdGVyKTsKICAgICByZXR1cm4gTlVMTDsKIH0KIApAQCAtMTI2NSwxMyArMTI0NSwxNCBAQAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbWV0aG9kLCBQeV9zc2l6ZV90IHNpemVoaW50KQogewogICAgIE11bHRpYnl0ZURlY29kZUJ1ZmZlciBidWY7Ci0gICAgUHlPYmplY3QgKmNyZXM7Ci0gICAgUHlfc3NpemVfdCByc2l6ZSwgZmluYWxzaXplID0gMDsKKyAgICBQeU9iamVjdCAqY3JlcywgKnJlczsKKyAgICBQeV9zc2l6ZV90IHJzaXplOwogCiAgICAgaWYgKHNpemVoaW50ID09IDApCiAgICAgICAgIHJldHVybiBQeVVuaWNvZGVfTmV3KDAsIDApOwogCi0gICAgYnVmLm91dG9iaiA9IGJ1Zi5leGNvYmogPSBOVUxMOworICAgIF9QeVVuaWNvZGVXcml0ZXJfSW5pdCgmYnVmLndyaXRlcik7CisgICAgYnVmLmV4Y29iaiA9IE5VTEw7CiAgICAgY3JlcyA9IE5VTEw7CiAKICAgICBmb3IgKDs7KSB7CkBAIC0xMzAzLDE5ICsxMjg0LDE5IEBACiAgICAgICAgICAgICBpZiAoUHlCeXRlc19HRVRfU0laRShjcmVzKSA+IFBZX1NTSVpFX1RfTUFYIC0gc2VsZi0+cGVuZGluZ3NpemUpIHsKICAgICAgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICAgICAgICAgIGdvdG8gZXJyb3JleGl0OwotICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHJzaXplID0gUHlCeXRlc19HRVRfU0laRShjcmVzKSArIHNlbGYtPnBlbmRpbmdzaXplOwotICAgICAgICAgICAgICAgICAgICBjdHIgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIHJzaXplKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGN0ciA9PSBOVUxMKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3JleGl0OwotICAgICAgICAgICAgICAgICAgICBjdHJkYXRhID0gUHlCeXRlc19BU19TVFJJTkcoY3RyKTsKLSAgICAgICAgICAgICAgICAgICAgbWVtY3B5KGN0cmRhdGEsIHNlbGYtPnBlbmRpbmcsIHNlbGYtPnBlbmRpbmdzaXplKTsKLSAgICAgICAgICAgICAgICAgICAgbWVtY3B5KGN0cmRhdGEgKyBzZWxmLT5wZW5kaW5nc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUJ5dGVzX0FTX1NUUklORyhjcmVzKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUJ5dGVzX0dFVF9TSVpFKGNyZXMpKTsKLSAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGNyZXMpOwotICAgICAgICAgICAgICAgICAgICBjcmVzID0gY3RyOwotICAgICAgICAgICAgICAgICAgICBzZWxmLT5wZW5kaW5nc2l6ZSA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByc2l6ZSA9IFB5Qnl0ZXNfR0VUX1NJWkUoY3JlcykgKyBzZWxmLT5wZW5kaW5nc2l6ZTsKKyAgICAgICAgICAgIGN0ciA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgcnNpemUpOworICAgICAgICAgICAgaWYgKGN0ciA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3JleGl0OworICAgICAgICAgICAgY3RyZGF0YSA9IFB5Qnl0ZXNfQVNfU1RSSU5HKGN0cik7CisgICAgICAgICAgICBtZW1jcHkoY3RyZGF0YSwgc2VsZi0+cGVuZGluZywgc2VsZi0+cGVuZGluZ3NpemUpOworICAgICAgICAgICAgbWVtY3B5KGN0cmRhdGEgKyBzZWxmLT5wZW5kaW5nc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgUHlCeXRlc19BU19TVFJJTkcoY3JlcyksCisgICAgICAgICAgICAgICAgICAgIFB5Qnl0ZXNfR0VUX1NJWkUoY3JlcykpOworICAgICAgICAgICAgUHlfREVDUkVGKGNyZXMpOworICAgICAgICAgICAgY3JlcyA9IGN0cjsKKyAgICAgICAgICAgIHNlbGYtPnBlbmRpbmdzaXplID0gMDsKICAgICAgICAgfQogCiAgICAgICAgIHJzaXplID0gUHlCeXRlc19HRVRfU0laRShjcmVzKTsKQEAgLTEzNDAsMjkgKzEzMjEsMjcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGVycm9yZXhpdDsKICAgICAgICAgfQogCi0gICAgICAgIGZpbmFsc2l6ZSA9IChQeV9zc2l6ZV90KShidWYub3V0YnVmIC0KLSAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9BU19VTklDT0RFKGJ1Zi5vdXRvYmopKTsKICAgICAgICAgUHlfREVDUkVGKGNyZXMpOwogICAgICAgICBjcmVzID0gTlVMTDsKIAotICAgICAgICBpZiAoc2l6ZWhpbnQgPCAwIHx8IGZpbmFsc2l6ZSAhPSAwIHx8IHJzaXplID09IDApCisgICAgICAgIGlmIChzaXplaGludCA8IDAgfHwgYnVmLndyaXRlci5wb3MgIT0gMCB8fCByc2l6ZSA9PSAwKQogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgc2l6ZWhpbnQgPSAxOyAvKiByZWFkIDEgbW9yZSBieXRlIGFuZCByZXRyeSAqLwogICAgIH0KIAotICAgIGlmIChmaW5hbHNpemUgIT0gUHlVbmljb2RlX0dFVF9TSVpFKGJ1Zi5vdXRvYmopKQotICAgICAgICBpZiAoUHlVbmljb2RlX1Jlc2l6ZSgmYnVmLm91dG9iaiwgZmluYWxzaXplKSA9PSAtMSkKLSAgICAgICAgICAgIGdvdG8gZXJyb3JleGl0OworICAgIHJlcyA9IF9QeVVuaWNvZGVXcml0ZXJfRmluaXNoKCZidWYud3JpdGVyKTsKKyAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgIGdvdG8gZXJyb3JleGl0OwogCiAgICAgUHlfWERFQ1JFRihjcmVzKTsKICAgICBQeV9YREVDUkVGKGJ1Zi5leGNvYmopOwotICAgIHJldHVybiBidWYub3V0b2JqOworICAgIHJldHVybiByZXM7CiAKIGVycm9yZXhpdDoKICAgICBQeV9YREVDUkVGKGNyZXMpOwogICAgIFB5X1hERUNSRUYoYnVmLmV4Y29iaik7Ci0gICAgUHlfWERFQ1JFRihidWYub3V0b2JqKTsKKyAgICBfUHlVbmljb2RlV3JpdGVyX0RlYWxsb2MoJmJ1Zi53cml0ZXIpOwogICAgIHJldHVybiBOVUxMOwogfQogCkBAIC0xNTk1LDcgKzE1NzQsNiBAQAogICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICp1bmlzdHIpCiB7CiAgICAgUHlPYmplY3QgKnN0ciwgKndyOwotICAgIF9QeV9JREVOVElGSUVSKHdyaXRlKTsKIAogICAgIHN0ciA9IGVuY29kZXJfZW5jb2RlX3N0YXRlZnVsKFNUQVRFRlVMX0VDVFgoc2VsZiksIHVuaXN0ciwgMCk7CiAgICAgaWYgKHN0ciA9PSBOVUxMKQpAQCAtMTY0OSwyNSArMTYyNywyNSBAQAogc3RhdGljIFB5T2JqZWN0ICoKIG1ic3RyZWFtd3JpdGVyX3Jlc2V0KE11bHRpYnl0ZVN0cmVhbVdyaXRlck9iamVjdCAqc2VsZikKIHsKLSAgICBjb25zdCBQeV9VTklDT0RFICpwZW5kaW5nOwogICAgIFB5T2JqZWN0ICpwd3J0OwogCi0gICAgcGVuZGluZyA9IHNlbGYtPnBlbmRpbmc7CisgICAgaWYgKCFzZWxmLT5wZW5kaW5nKQorICAgICAgICBQeV9SRVRVUk5fTk9ORTsKKwogICAgIHB3cnQgPSBtdWx0aWJ5dGVjb2RlY19lbmNvZGUoc2VsZi0+Y29kZWMsICZzZWxmLT5zdGF0ZSwKLSAgICAgICAgICAgICAgICAgICAgJnBlbmRpbmcsIHNlbGYtPnBlbmRpbmdzaXplLCBzZWxmLT5lcnJvcnMsCisgICAgICAgICAgICAgICAgICAgIHNlbGYtPnBlbmRpbmcsIE5VTEwsIHNlbGYtPmVycm9ycywKICAgICAgICAgICAgICAgICAgICAgTUJFTkNfRkxVU0ggfCBNQkVOQ19SRVNFVCk7CiAgICAgLyogc29tZSBwZW5kaW5nIGJ1ZmZlciBjYW4gYmUgdHJ1bmNhdGVkIHdoZW4gVW5pY29kZUVuY29kZUVycm9yIGlzCiAgICAgICogcmFpc2VkIG9uICdzdHJpY3QnIG1vZGUuIGJ1dCwgJ3Jlc2V0JyBtZXRob2QgaXMgZGVzaWduZWQgdG8KICAgICAgKiByZXNldCB0aGUgcGVuZGluZyBidWZmZXIgb3Igc3RhdGVzIHNvIGZhaWxlZCBzdHJpbmcgc2VxdWVuY2UKICAgICAgKiBvdWdodCB0byBiZSBtaXNzZWQgKi8KLSAgICBzZWxmLT5wZW5kaW5nc2l6ZSA9IDA7CisgICAgUHlfQ0xFQVIoc2VsZi0+cGVuZGluZyk7CiAgICAgaWYgKHB3cnQgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBhc3NlcnQoUHlCeXRlc19DaGVjayhwd3J0KSk7CiAgICAgaWYgKFB5Qnl0ZXNfU2l6ZShwd3J0KSA+IDApIHsKICAgICAgICAgUHlPYmplY3QgKndyOwotICAgICAgICBfUHlfSURFTlRJRklFUih3cml0ZSk7CiAKICAgICAgICAgd3IgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKHNlbGYtPnN0cmVhbSwgJlB5SWRfd3JpdGUsICJPIiwgcHdydCk7CiAgICAgICAgIGlmICh3ciA9PSBOVUxMKSB7CkBAIC0xNzA2LDcgKzE2ODQsNyBAQAogICAgIHNlbGYtPmNvZGVjID0gKChNdWx0aWJ5dGVDb2RlY09iamVjdCAqKWNvZGVjKS0+Y29kZWM7CiAgICAgc2VsZi0+c3RyZWFtID0gc3RyZWFtOwogICAgIFB5X0lOQ1JFRihzdHJlYW0pOwotICAgIHNlbGYtPnBlbmRpbmdzaXplID0gMDsKKyAgICBzZWxmLT5wZW5kaW5nID0gTlVMTDsKICAgICBzZWxmLT5lcnJvcnMgPSBpbnRlcm5hbF9lcnJvcl9jYWxsYmFjayhlcnJvcnMpOwogICAgIGlmIChzZWxmLT5lcnJvcnMgPT0gTlVMTCkKICAgICAgICAgZ290byBlcnJvcmV4aXQ7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL2Nqa2NvZGVjcy9tdWx0aWJ5dGVjb2RlYy5oIGIvTW9kdWxlcy9jamtjb2RlY3MvbXVsdGlieXRlY29kZWMuaAppbmRleCAxYjZlZjU1Li41YjhjMjIyIDEwMDY0NAotLS0gYS9Nb2R1bGVzL2Nqa2NvZGVjcy9tdWx0aWJ5dGVjb2RlYy5oCisrKyBiL01vZHVsZXMvY2prY29kZWNzL211bHRpYnl0ZWNvZGVjLmgKQEAgLTEwLDEyICsxMCw2IEBACiBleHRlcm4gIkMiIHsKICNlbmRpZgogCi0jaWZkZWYgdWludDMyX3QKLXR5cGVkZWYgdWludDMyX3QgdWNzNF90OwotI2Vsc2UKLXR5cGVkZWYgdW5zaWduZWQgaW50IHVjczRfdDsKLSNlbmRpZgotCiAjaWZkZWYgdWludDE2X3QKIHR5cGVkZWYgdWludDE2X3QgdWNzMl90LCBEQkNIQVI7CiAjZWxzZQpAQCAtMjcsMTMgKzIxLDE0IEBACiAgICAgaW50IGk7CiAgICAgdW5zaWduZWQgY2hhciBjWzhdOwogICAgIHVjczJfdCB1Mls0XTsKLSAgICB1Y3M0X3QgdTRbMl07CisgICAgUHlfVUNTNCB1NFsyXTsKIH0gTXVsdGlieXRlQ29kZWNfU3RhdGU7CiAKIHR5cGVkZWYgaW50ICgqbWJjb2RlY19pbml0KShjb25zdCB2b2lkICpjb25maWcpOwogdHlwZWRlZiBQeV9zc2l6ZV90ICgqbWJlbmNvZGVfZnVuYykoTXVsdGlieXRlQ29kZWNfU3RhdGUgKnN0YXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqY29uZmlnLAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUHlfVU5JQ09ERSAqKmluYnVmLCBQeV9zc2l6ZV90IGlubGVmdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBraW5kLCB2b2lkICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCAqaW5wb3MsIFB5X3NzaXplX3QgaW5sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICoqb3V0YnVmLCBQeV9zc2l6ZV90IG91dGxlZnQsCiAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmxhZ3MpOwogdHlwZWRlZiBpbnQgKCptYmVuY29kZWluaXRfZnVuYykoTXVsdGlieXRlQ29kZWNfU3RhdGUgKnN0YXRlLApAQCAtNDQsNyArMzksNyBAQAogdHlwZWRlZiBQeV9zc2l6ZV90ICgqbWJkZWNvZGVfZnVuYykoTXVsdGlieXRlQ29kZWNfU3RhdGUgKnN0YXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqY29uZmlnLAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqKmluYnVmLCBQeV9zc2l6ZV90IGlubGVmdCwKLSAgICAgICAgICAgICAgICAgICAgICAgIFB5X1VOSUNPREUgKipvdXRidWYsIFB5X3NzaXplX3Qgb3V0bGVmdCk7CisgICAgICAgICAgICAgICAgICAgICAgICBfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIpOwogdHlwZWRlZiBpbnQgKCptYmRlY29kZWluaXRfZnVuYykoTXVsdGlieXRlQ29kZWNfU3RhdGUgKnN0YXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqY29uZmlnKTsKIHR5cGVkZWYgUHlfc3NpemVfdCAoKm1iZGVjb2RlcmVzZXRfZnVuYykoTXVsdGlieXRlQ29kZWNfU3RhdGUgKnN0YXRlLApAQCAtODEsOCArNzYsNyBAQAogI2RlZmluZSBNQVhFTkNQRU5ESU5HICAgMgogI2RlZmluZSBfTXVsdGlieXRlU3RhdGVmdWxFbmNvZGVyX0hFQUQgICAgICAgICAgXAogICAgIF9NdWx0aWJ5dGVTdGF0ZWZ1bENvZGVjX0hFQUQgICAgICAgICAgICAgICAgXAotICAgIFB5X1VOSUNPREUgcGVuZGluZ1tNQVhFTkNQRU5ESU5HXTsgICAgICAgICAgXAotICAgIFB5X3NzaXplX3QgcGVuZGluZ3NpemU7CisgICAgUHlPYmplY3QgKnBlbmRpbmc7CiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgX011bHRpYnl0ZVN0YXRlZnVsRW5jb2Rlcl9IRUFECiB9IE11bHRpYnl0ZVN0YXRlZnVsRW5jb2RlckNvbnRleHQ7CkBAIC0xMTgsMTYgKzExMiwxNyBAQAogI2RlZmluZSBNQkVSUl9UT09TTUFMTCAgICAgICAgICAoLTEpIC8qIGluc3VmZmljaWVudCBvdXRwdXQgYnVmZmVyIHNwYWNlICovCiAjZGVmaW5lIE1CRVJSX1RPT0ZFVyAgICAgICAgICAgICgtMikgLyogaW5jb21wbGV0ZSBpbnB1dCBidWZmZXIgKi8KICNkZWZpbmUgTUJFUlJfSU5URVJOQUwgICAgICAgICAgKC0zKSAvKiBpbnRlcm5hbCBydW50aW1lIGVycm9yICovCisjZGVmaW5lIE1CRVJSX0VYQ0VQVElPTiAgICAgICAgICgtNCkgLyogYW4gZXhjZXB0aW9uIGhhcyBiZWVuIHJhaXNlZCAqLwogCiAjZGVmaW5lIEVSUk9SX1NUUklDVCAgICAgICAgICAgIChQeU9iamVjdCAqKSgxKQogI2RlZmluZSBFUlJPUl9JR05PUkUgICAgICAgICAgICAoUHlPYmplY3QgKikoMikKICNkZWZpbmUgRVJST1JfUkVQTEFDRSAgICAgICAgICAgKFB5T2JqZWN0ICopKDMpCiAjZGVmaW5lIEVSUk9SX0lTQ1VTVE9NKHApICAgICAgICgocCkgPCBFUlJPUl9TVFJJQ1QgfHwgRVJST1JfUkVQTEFDRSA8IChwKSkKLSNkZWZpbmUgRVJST1JfREVDUkVGKHApIGRvIHsgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAocCAhPSBOVUxMICYmIEVSUk9SX0lTQ1VTVE9NKHApKSB7ICAgICAgIFwKLSAgICAgICAgUHlfREVDUkVGKHApOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLX0gd2hpbGUgKDApOworI2RlZmluZSBFUlJPUl9ERUNSRUYocCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChwICE9IE5VTEwgJiYgRVJST1JfSVNDVVNUT00ocCkpICAgICAgICAgXAorICAgICAgICAgICAgUHlfREVDUkVGKHApOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlICgwKTsKIAogI2RlZmluZSBNQkVOQ19GTFVTSCAgICAgICAgICAgICAweDAwMDEgLyogZW5jb2RlIGFsbCBjaGFyYWN0ZXJzIGVuY29kYWJsZSAqLwogI2RlZmluZSBNQkVOQ19NQVggICAgICAgICAgICAgICBNQkVOQ19GTFVTSApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9jbGluaWMvX2J6Mm1vZHVsZS5jLmggYi9Nb2R1bGVzL2NsaW5pYy9fYnoybW9kdWxlLmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTIwMWEwCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9jbGluaWMvX2J6Mm1vZHVsZS5jLmgKQEAgLTAsMCArMSwxNjIgQEAKKy8qW2NsaW5pYyBpbnB1dF0KK3ByZXNlcnZlCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK1B5RG9jX1NUUlZBUihfYnoyX0JaMkNvbXByZXNzb3JfY29tcHJlc3NfX2RvY19fLAorImNvbXByZXNzKCRzZWxmLCBkYXRhLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUHJvdmlkZSBkYXRhIHRvIHRoZSBjb21wcmVzc29yIG9iamVjdC5cbiIKKyJcbiIKKyJSZXR1cm5zIGEgY2h1bmsgb2YgY29tcHJlc3NlZCBkYXRhIGlmIHBvc3NpYmxlLCBvciBiXCdcJyBvdGhlcndpc2UuXG4iCisiXG4iCisiV2hlbiB5b3UgaGF2ZSBmaW5pc2hlZCBwcm92aWRpbmcgZGF0YSB0byB0aGUgY29tcHJlc3NvciwgY2FsbCB0aGVcbiIKKyJmbHVzaCgpIG1ldGhvZCB0byBmaW5pc2ggdGhlIGNvbXByZXNzaW9uIHByb2Nlc3MuIik7CisKKyNkZWZpbmUgX0JaMl9CWjJDT01QUkVTU09SX0NPTVBSRVNTX01FVEhPRERFRiAgICBcCisgICAgeyJjb21wcmVzcyIsIChQeUNGdW5jdGlvbilfYnoyX0JaMkNvbXByZXNzb3JfY29tcHJlc3MsIE1FVEhfVkFSQVJHUywgX2J6Ml9CWjJDb21wcmVzc29yX2NvbXByZXNzX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfYnoyX0JaMkNvbXByZXNzb3JfY29tcHJlc3NfaW1wbChCWjJDb21wcmVzc29yICpzZWxmLCBQeV9idWZmZXIgKmRhdGEpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2J6Ml9CWjJDb21wcmVzc29yX2NvbXByZXNzKEJaMkNvbXByZXNzb3IgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X2J1ZmZlciBkYXRhID0ge05VTEwsIE5VTEx9OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJ5Kjpjb21wcmVzcyIsCisgICAgICAgICZkYXRhKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9iejJfQloyQ29tcHJlc3Nvcl9jb21wcmVzc19pbXBsKHNlbGYsICZkYXRhKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBkYXRhICovCisgICAgaWYgKGRhdGEub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmRhdGEpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKF9iejJfQloyQ29tcHJlc3Nvcl9mbHVzaF9fZG9jX18sCisiZmx1c2goJHNlbGYsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJGaW5pc2ggdGhlIGNvbXByZXNzaW9uIHByb2Nlc3MuXG4iCisiXG4iCisiUmV0dXJucyB0aGUgY29tcHJlc3NlZCBkYXRhIGxlZnQgaW4gaW50ZXJuYWwgYnVmZmVycy5cbiIKKyJcbiIKKyJUaGUgY29tcHJlc3NvciBvYmplY3QgbWF5IG5vdCBiZSB1c2VkIGFmdGVyIHRoaXMgbWV0aG9kIGlzIGNhbGxlZC4iKTsKKworI2RlZmluZSBfQloyX0JaMkNPTVBSRVNTT1JfRkxVU0hfTUVUSE9EREVGICAgIFwKKyAgICB7ImZsdXNoIiwgKFB5Q0Z1bmN0aW9uKV9iejJfQloyQ29tcHJlc3Nvcl9mbHVzaCwgTUVUSF9OT0FSR1MsIF9iejJfQloyQ29tcHJlc3Nvcl9mbHVzaF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX2J6Ml9CWjJDb21wcmVzc29yX2ZsdXNoX2ltcGwoQloyQ29tcHJlc3NvciAqc2VsZik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfYnoyX0JaMkNvbXByZXNzb3JfZmx1c2goQloyQ29tcHJlc3NvciAqc2VsZiwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKK3sKKyAgICByZXR1cm4gX2J6Ml9CWjJDb21wcmVzc29yX2ZsdXNoX2ltcGwoc2VsZik7Cit9CisKK1B5RG9jX1NUUlZBUihfYnoyX0JaMkNvbXByZXNzb3JfX19pbml0X19fX2RvY19fLAorIkJaMkNvbXByZXNzb3IoY29tcHJlc3NsZXZlbD05LCAvKVxuIgorIi0tXG4iCisiXG4iCisiQ3JlYXRlIGEgY29tcHJlc3NvciBvYmplY3QgZm9yIGNvbXByZXNzaW5nIGRhdGEgaW5jcmVtZW50YWxseS5cbiIKKyJcbiIKKyIgIGNvbXByZXNzbGV2ZWxcbiIKKyIgICAgQ29tcHJlc3Npb24gbGV2ZWwsIGFzIGEgbnVtYmVyIGJldHdlZW4gMSBhbmQgOS5cbiIKKyJcbiIKKyJGb3Igb25lLXNob3QgY29tcHJlc3Npb24sIHVzZSB0aGUgY29tcHJlc3MoKSBmdW5jdGlvbiBpbnN0ZWFkLiIpOworCitzdGF0aWMgaW50CitfYnoyX0JaMkNvbXByZXNzb3JfX19pbml0X19faW1wbChCWjJDb21wcmVzc29yICpzZWxmLCBpbnQgY29tcHJlc3NsZXZlbCk7CisKK3N0YXRpYyBpbnQKK19iejJfQloyQ29tcHJlc3Nvcl9fX2luaXRfXyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgaW50IHJldHVybl92YWx1ZSA9IC0xOworICAgIGludCBjb21wcmVzc2xldmVsID0gOTsKKworICAgIGlmICgoUHlfVFlQRShzZWxmKSA9PSAmQloyQ29tcHJlc3Nvcl9UeXBlKSAmJgorICAgICAgICAhX1B5QXJnX05vS2V5d29yZHMoIkJaMkNvbXByZXNzb3IiLCBrd2FyZ3MpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJ8aTpCWjJDb21wcmVzc29yIiwKKyAgICAgICAgJmNvbXByZXNzbGV2ZWwpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX2J6Ml9CWjJDb21wcmVzc29yX19faW5pdF9fX2ltcGwoKEJaMkNvbXByZXNzb3IgKilzZWxmLCBjb21wcmVzc2xldmVsKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoX2J6Ml9CWjJEZWNvbXByZXNzb3JfZGVjb21wcmVzc19fZG9jX18sCisiZGVjb21wcmVzcygkc2VsZiwgZGF0YSwgLylcbiIKKyItLVxuIgorIlxuIgorIlByb3ZpZGUgZGF0YSB0byB0aGUgZGVjb21wcmVzc29yIG9iamVjdC5cbiIKKyJcbiIKKyJSZXR1cm5zIGEgY2h1bmsgb2YgZGVjb21wcmVzc2VkIGRhdGEgaWYgcG9zc2libGUsIG9yIGJcJ1wnIG90aGVyd2lzZS5cbiIKKyJcbiIKKyJBdHRlbXB0aW5nIHRvIGRlY29tcHJlc3MgZGF0YSBhZnRlciB0aGUgZW5kIG9mIHN0cmVhbSBpcyByZWFjaGVkXG4iCisicmFpc2VzIGFuIEVPRkVycm9yLiAgQW55IGRhdGEgZm91bmQgYWZ0ZXIgdGhlIGVuZCBvZiB0aGUgc3RyZWFtXG4iCisiaXMgaWdub3JlZCBhbmQgc2F2ZWQgaW4gdGhlIHVudXNlZF9kYXRhIGF0dHJpYnV0ZS4iKTsKKworI2RlZmluZSBfQloyX0JaMkRFQ09NUFJFU1NPUl9ERUNPTVBSRVNTX01FVEhPRERFRiAgICBcCisgICAgeyJkZWNvbXByZXNzIiwgKFB5Q0Z1bmN0aW9uKV9iejJfQloyRGVjb21wcmVzc29yX2RlY29tcHJlc3MsIE1FVEhfVkFSQVJHUywgX2J6Ml9CWjJEZWNvbXByZXNzb3JfZGVjb21wcmVzc19fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX2J6Ml9CWjJEZWNvbXByZXNzb3JfZGVjb21wcmVzc19pbXBsKEJaMkRlY29tcHJlc3NvciAqc2VsZiwgUHlfYnVmZmVyICpkYXRhKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19iejJfQloyRGVjb21wcmVzc29yX2RlY29tcHJlc3MoQloyRGVjb21wcmVzc29yICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9idWZmZXIgZGF0YSA9IHtOVUxMLCBOVUxMfTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAieSo6ZGVjb21wcmVzcyIsCisgICAgICAgICZkYXRhKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9iejJfQloyRGVjb21wcmVzc29yX2RlY29tcHJlc3NfaW1wbChzZWxmLCAmZGF0YSk7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgZGF0YSAqLworICAgIGlmIChkYXRhLm9iaikKKyAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZkYXRhKTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihfYnoyX0JaMkRlY29tcHJlc3Nvcl9fX2luaXRfX19fZG9jX18sCisiQloyRGVjb21wcmVzc29yKClcbiIKKyItLVxuIgorIlxuIgorIkNyZWF0ZSBhIGRlY29tcHJlc3NvciBvYmplY3QgZm9yIGRlY29tcHJlc3NpbmcgZGF0YSBpbmNyZW1lbnRhbGx5LlxuIgorIlxuIgorIkZvciBvbmUtc2hvdCBkZWNvbXByZXNzaW9uLCB1c2UgdGhlIGRlY29tcHJlc3MoKSBmdW5jdGlvbiBpbnN0ZWFkLiIpOworCitzdGF0aWMgaW50CitfYnoyX0JaMkRlY29tcHJlc3Nvcl9fX2luaXRfX19pbXBsKEJaMkRlY29tcHJlc3NvciAqc2VsZik7CisKK3N0YXRpYyBpbnQKK19iejJfQloyRGVjb21wcmVzc29yX19faW5pdF9fKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK3sKKyAgICBpbnQgcmV0dXJuX3ZhbHVlID0gLTE7CisKKyAgICBpZiAoKFB5X1RZUEUoc2VsZikgPT0gJkJaMkRlY29tcHJlc3Nvcl9UeXBlKSAmJgorICAgICAgICAhX1B5QXJnX05vUG9zaXRpb25hbCgiQloyRGVjb21wcmVzc29yIiwgYXJncykpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICBpZiAoKFB5X1RZUEUoc2VsZikgPT0gJkJaMkRlY29tcHJlc3Nvcl9UeXBlKSAmJgorICAgICAgICAhX1B5QXJnX05vS2V5d29yZHMoIkJaMkRlY29tcHJlc3NvciIsIGt3YXJncykpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfYnoyX0JaMkRlY29tcHJlc3Nvcl9fX2luaXRfX19pbXBsKChCWjJEZWNvbXByZXNzb3IgKilzZWxmKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTIxY2E0NDA1NTE5YTA5MzEgaW5wdXQ9YTkwNDkwNTQwMTNhMWI3N10qLwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9jbGluaWMvX2x6bWFtb2R1bGUuYy5oIGIvTW9kdWxlcy9jbGluaWMvX2x6bWFtb2R1bGUuYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxYWQ4ODIKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL2NsaW5pYy9fbHptYW1vZHVsZS5jLmgKQEAgLTAsMCArMSwyNDUgQEAKKy8qW2NsaW5pYyBpbnB1dF0KK3ByZXNlcnZlCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK1B5RG9jX1NUUlZBUihfbHptYV9MWk1BQ29tcHJlc3Nvcl9jb21wcmVzc19fZG9jX18sCisiY29tcHJlc3MoJHNlbGYsIGRhdGEsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJQcm92aWRlIGRhdGEgdG8gdGhlIGNvbXByZXNzb3Igb2JqZWN0LlxuIgorIlxuIgorIlJldHVybnMgYSBjaHVuayBvZiBjb21wcmVzc2VkIGRhdGEgaWYgcG9zc2libGUsIG9yIGJcJ1wnIG90aGVyd2lzZS5cbiIKKyJcbiIKKyJXaGVuIHlvdSBoYXZlIGZpbmlzaGVkIHByb3ZpZGluZyBkYXRhIHRvIHRoZSBjb21wcmVzc29yLCBjYWxsIHRoZVxuIgorImZsdXNoKCkgbWV0aG9kIHRvIGZpbmlzaCB0aGUgY29tcHJlc3Npb24gcHJvY2Vzcy4iKTsKKworI2RlZmluZSBfTFpNQV9MWk1BQ09NUFJFU1NPUl9DT01QUkVTU19NRVRIT0RERUYgICAgXAorICAgIHsiY29tcHJlc3MiLCAoUHlDRnVuY3Rpb24pX2x6bWFfTFpNQUNvbXByZXNzb3JfY29tcHJlc3MsIE1FVEhfVkFSQVJHUywgX2x6bWFfTFpNQUNvbXByZXNzb3JfY29tcHJlc3NfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19sem1hX0xaTUFDb21wcmVzc29yX2NvbXByZXNzX2ltcGwoQ29tcHJlc3NvciAqc2VsZiwgUHlfYnVmZmVyICpkYXRhKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19sem1hX0xaTUFDb21wcmVzc29yX2NvbXByZXNzKENvbXByZXNzb3IgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X2J1ZmZlciBkYXRhID0ge05VTEwsIE5VTEx9OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJ5Kjpjb21wcmVzcyIsCisgICAgICAgICZkYXRhKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9sem1hX0xaTUFDb21wcmVzc29yX2NvbXByZXNzX2ltcGwoc2VsZiwgJmRhdGEpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIGRhdGEgKi8KKyAgICBpZiAoZGF0YS5vYmopCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmZGF0YSk7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoX2x6bWFfTFpNQUNvbXByZXNzb3JfZmx1c2hfX2RvY19fLAorImZsdXNoKCRzZWxmLCAvKVxuIgorIi0tXG4iCisiXG4iCisiRmluaXNoIHRoZSBjb21wcmVzc2lvbiBwcm9jZXNzLlxuIgorIlxuIgorIlJldHVybnMgdGhlIGNvbXByZXNzZWQgZGF0YSBsZWZ0IGluIGludGVybmFsIGJ1ZmZlcnMuXG4iCisiXG4iCisiVGhlIGNvbXByZXNzb3Igb2JqZWN0IG1heSBub3QgYmUgdXNlZCBhZnRlciB0aGlzIG1ldGhvZCBpcyBjYWxsZWQuIik7CisKKyNkZWZpbmUgX0xaTUFfTFpNQUNPTVBSRVNTT1JfRkxVU0hfTUVUSE9EREVGICAgIFwKKyAgICB7ImZsdXNoIiwgKFB5Q0Z1bmN0aW9uKV9sem1hX0xaTUFDb21wcmVzc29yX2ZsdXNoLCBNRVRIX05PQVJHUywgX2x6bWFfTFpNQUNvbXByZXNzb3JfZmx1c2hfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19sem1hX0xaTUFDb21wcmVzc29yX2ZsdXNoX2ltcGwoQ29tcHJlc3NvciAqc2VsZik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfbHptYV9MWk1BQ29tcHJlc3Nvcl9mbHVzaChDb21wcmVzc29yICpzZWxmLCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQoreworICAgIHJldHVybiBfbHptYV9MWk1BQ29tcHJlc3Nvcl9mbHVzaF9pbXBsKHNlbGYpOworfQorCitQeURvY19TVFJWQVIoX2x6bWFfTFpNQURlY29tcHJlc3Nvcl9kZWNvbXByZXNzX19kb2NfXywKKyJkZWNvbXByZXNzKCRzZWxmLCBkYXRhLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUHJvdmlkZSBkYXRhIHRvIHRoZSBkZWNvbXByZXNzb3Igb2JqZWN0LlxuIgorIlxuIgorIlJldHVybnMgYSBjaHVuayBvZiBkZWNvbXByZXNzZWQgZGF0YSBpZiBwb3NzaWJsZSwgb3IgYlwnXCcgb3RoZXJ3aXNlLlxuIgorIlxuIgorIkF0dGVtcHRpbmcgdG8gZGVjb21wcmVzcyBkYXRhIGFmdGVyIHRoZSBlbmQgb2Ygc3RyZWFtIGlzIHJlYWNoZWRcbiIKKyJyYWlzZXMgYW4gRU9GRXJyb3IuICBBbnkgZGF0YSBmb3VuZCBhZnRlciB0aGUgZW5kIG9mIHRoZSBzdHJlYW1cbiIKKyJpcyBpZ25vcmVkIGFuZCBzYXZlZCBpbiB0aGUgdW51c2VkX2RhdGEgYXR0cmlidXRlLiIpOworCisjZGVmaW5lIF9MWk1BX0xaTUFERUNPTVBSRVNTT1JfREVDT01QUkVTU19NRVRIT0RERUYgICAgXAorICAgIHsiZGVjb21wcmVzcyIsIChQeUNGdW5jdGlvbilfbHptYV9MWk1BRGVjb21wcmVzc29yX2RlY29tcHJlc3MsIE1FVEhfVkFSQVJHUywgX2x6bWFfTFpNQURlY29tcHJlc3Nvcl9kZWNvbXByZXNzX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfbHptYV9MWk1BRGVjb21wcmVzc29yX2RlY29tcHJlc3NfaW1wbChEZWNvbXByZXNzb3IgKnNlbGYsIFB5X2J1ZmZlciAqZGF0YSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfbHptYV9MWk1BRGVjb21wcmVzc29yX2RlY29tcHJlc3MoRGVjb21wcmVzc29yICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9idWZmZXIgZGF0YSA9IHtOVUxMLCBOVUxMfTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAieSo6ZGVjb21wcmVzcyIsCisgICAgICAgICZkYXRhKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9sem1hX0xaTUFEZWNvbXByZXNzb3JfZGVjb21wcmVzc19pbXBsKHNlbGYsICZkYXRhKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBkYXRhICovCisgICAgaWYgKGRhdGEub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmRhdGEpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKF9sem1hX0xaTUFEZWNvbXByZXNzb3JfX19pbml0X19fX2RvY19fLAorIkxaTUFEZWNvbXByZXNzb3IoZm9ybWF0PUZPUk1BVF9BVVRPLCBtZW1saW1pdD1Ob25lLCBmaWx0ZXJzPU5vbmUpXG4iCisiLS1cbiIKKyJcbiIKKyJDcmVhdGUgYSBkZWNvbXByZXNzb3Igb2JqZWN0IGZvciBkZWNvbXByZXNzaW5nIGRhdGEgaW5jcmVtZW50YWxseS5cbiIKKyJcbiIKKyIgIGZvcm1hdFxuIgorIiAgICBTcGVjaWZpZXMgdGhlIGNvbnRhaW5lciBmb3JtYXQgb2YgdGhlIGlucHV0IHN0cmVhbS4gIElmIHRoaXMgaXNcbiIKKyIgICAgRk9STUFUX0FVVE8gKHRoZSBkZWZhdWx0KSwgdGhlIGRlY29tcHJlc3NvciB3aWxsIGF1dG9tYXRpY2FsbHkgZGV0ZWN0XG4iCisiICAgIHdoZXRoZXIgdGhlIGlucHV0IGlzIEZPUk1BVF9YWiBvciBGT1JNQVRfQUxPTkUuICBTdHJlYW1zIGNyZWF0ZWQgd2l0aFxuIgorIiAgICBGT1JNQVRfUkFXIGNhbm5vdCBiZSBhdXRvZGV0ZWN0ZWQuXG4iCisiICBtZW1saW1pdFxuIgorIiAgICBMaW1pdCB0aGUgYW1vdW50IG9mIG1lbW9yeSB1c2VkIGJ5IHRoZSBkZWNvbXByZXNzb3IuICBUaGlzIHdpbGwgY2F1c2VcbiIKKyIgICAgZGVjb21wcmVzc2lvbiB0byBmYWlsIGlmIHRoZSBpbnB1dCBjYW5ub3QgYmUgZGVjb21wcmVzc2VkIHdpdGhpbiB0aGVcbiIKKyIgICAgZ2l2ZW4gbGltaXQuXG4iCisiICBmaWx0ZXJzXG4iCisiICAgIEEgY3VzdG9tIGZpbHRlciBjaGFpbi4gIFRoaXMgYXJndW1lbnQgaXMgcmVxdWlyZWQgZm9yIEZPUk1BVF9SQVcsIGFuZFxuIgorIiAgICBub3QgYWNjZXB0ZWQgd2l0aCBhbnkgb3RoZXIgZm9ybWF0LiAgV2hlbiBwcm92aWRlZCwgdGhpcyBzaG91bGQgYmUgYVxuIgorIiAgICBzZXF1ZW5jZSBvZiBkaWN0cywgZWFjaCBpbmRpY2F0aW5nIHRoZSBJRCBhbmQgb3B0aW9ucyBmb3IgYSBzaW5nbGVcbiIKKyIgICAgZmlsdGVyLlxuIgorIlxuIgorIkZvciBvbmUtc2hvdCBkZWNvbXByZXNzaW9uLCB1c2UgdGhlIGRlY29tcHJlc3MoKSBmdW5jdGlvbiBpbnN0ZWFkLiIpOworCitzdGF0aWMgaW50CitfbHptYV9MWk1BRGVjb21wcmVzc29yX19faW5pdF9fX2ltcGwoRGVjb21wcmVzc29yICpzZWxmLCBpbnQgZm9ybWF0LCBQeU9iamVjdCAqbWVtbGltaXQsIFB5T2JqZWN0ICpmaWx0ZXJzKTsKKworc3RhdGljIGludAorX2x6bWFfTFpNQURlY29tcHJlc3Nvcl9fX2luaXRfXyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgaW50IHJldHVybl92YWx1ZSA9IC0xOworICAgIHN0YXRpYyBjaGFyICpfa2V5d29yZHNbXSA9IHsiZm9ybWF0IiwgIm1lbWxpbWl0IiwgImZpbHRlcnMiLCBOVUxMfTsKKyAgICBpbnQgZm9ybWF0ID0gRk9STUFUX0FVVE87CisgICAgUHlPYmplY3QgKm1lbWxpbWl0ID0gUHlfTm9uZTsKKyAgICBQeU9iamVjdCAqZmlsdGVycyA9IFB5X05vbmU7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsCisgICAgICAgICJ8aU9POkxaTUFEZWNvbXByZXNzb3IiLCBfa2V5d29yZHMsCisgICAgICAgICZmb3JtYXQsICZtZW1saW1pdCwgJmZpbHRlcnMpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX2x6bWFfTFpNQURlY29tcHJlc3Nvcl9fX2luaXRfX19pbXBsKChEZWNvbXByZXNzb3IgKilzZWxmLCBmb3JtYXQsIG1lbWxpbWl0LCBmaWx0ZXJzKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoX2x6bWFfaXNfY2hlY2tfc3VwcG9ydGVkX19kb2NfXywKKyJpc19jaGVja19zdXBwb3J0ZWQoJG1vZHVsZSwgY2hlY2tfaWQsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJUZXN0IHdoZXRoZXIgdGhlIGdpdmVuIGludGVncml0eSBjaGVjayBpcyBzdXBwb3J0ZWQuXG4iCisiXG4iCisiQWx3YXlzIHJldHVybnMgVHJ1ZSBmb3IgQ0hFQ0tfTk9ORSBhbmQgQ0hFQ0tfQ1JDMzIuIik7CisKKyNkZWZpbmUgX0xaTUFfSVNfQ0hFQ0tfU1VQUE9SVEVEX01FVEhPRERFRiAgICBcCisgICAgeyJpc19jaGVja19zdXBwb3J0ZWQiLCAoUHlDRnVuY3Rpb24pX2x6bWFfaXNfY2hlY2tfc3VwcG9ydGVkLCBNRVRIX1ZBUkFSR1MsIF9sem1hX2lzX2NoZWNrX3N1cHBvcnRlZF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX2x6bWFfaXNfY2hlY2tfc3VwcG9ydGVkX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgaW50IGNoZWNrX2lkKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19sem1hX2lzX2NoZWNrX3N1cHBvcnRlZChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBpbnQgY2hlY2tfaWQ7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgImk6aXNfY2hlY2tfc3VwcG9ydGVkIiwKKyAgICAgICAgJmNoZWNrX2lkKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9sem1hX2lzX2NoZWNrX3N1cHBvcnRlZF9pbXBsKG1vZHVsZSwgY2hlY2tfaWQpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihfbHptYV9fZW5jb2RlX2ZpbHRlcl9wcm9wZXJ0aWVzX19kb2NfXywKKyJfZW5jb2RlX2ZpbHRlcl9wcm9wZXJ0aWVzKCRtb2R1bGUsIGZpbHRlciwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiBhIGJ5dGVzIG9iamVjdCBlbmNvZGluZyB0aGUgb3B0aW9ucyAocHJvcGVydGllcykgb2YgdGhlIGZpbHRlciBzcGVjaWZpZWQgYnkgKmZpbHRlciogKGEgZGljdCkuXG4iCisiXG4iCisiVGhlIHJlc3VsdCBkb2VzIG5vdCBpbmNsdWRlIHRoZSBmaWx0ZXIgSUQgaXRzZWxmLCBvbmx5IHRoZSBvcHRpb25zLiIpOworCisjZGVmaW5lIF9MWk1BX19FTkNPREVfRklMVEVSX1BST1BFUlRJRVNfTUVUSE9EREVGICAgIFwKKyAgICB7Il9lbmNvZGVfZmlsdGVyX3Byb3BlcnRpZXMiLCAoUHlDRnVuY3Rpb24pX2x6bWFfX2VuY29kZV9maWx0ZXJfcHJvcGVydGllcywgTUVUSF9WQVJBUkdTLCBfbHptYV9fZW5jb2RlX2ZpbHRlcl9wcm9wZXJ0aWVzX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfbHptYV9fZW5jb2RlX2ZpbHRlcl9wcm9wZXJ0aWVzX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgbHptYV9maWx0ZXIgZmlsdGVyKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19sem1hX19lbmNvZGVfZmlsdGVyX3Byb3BlcnRpZXMoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgbHptYV9maWx0ZXIgZmlsdGVyID0ge0xaTUFfVkxJX1VOS05PV04sIE5VTEx9OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJPJjpfZW5jb2RlX2ZpbHRlcl9wcm9wZXJ0aWVzIiwKKyAgICAgICAgbHptYV9maWx0ZXJfY29udmVydGVyLCAmZmlsdGVyKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9sem1hX19lbmNvZGVfZmlsdGVyX3Byb3BlcnRpZXNfaW1wbChtb2R1bGUsIGZpbHRlcik7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgZmlsdGVyICovCisgICAgaWYgKGZpbHRlci5pZCAhPSBMWk1BX1ZMSV9VTktOT1dOKQorICAgICAgIFB5TWVtX0ZyZWUoZmlsdGVyLm9wdGlvbnMpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKF9sem1hX19kZWNvZGVfZmlsdGVyX3Byb3BlcnRpZXNfX2RvY19fLAorIl9kZWNvZGVfZmlsdGVyX3Byb3BlcnRpZXMoJG1vZHVsZSwgZmlsdGVyX2lkLCBlbmNvZGVkX3Byb3BzLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIGEgYnl0ZXMgb2JqZWN0IGVuY29kaW5nIHRoZSBvcHRpb25zIChwcm9wZXJ0aWVzKSBvZiB0aGUgZmlsdGVyIHNwZWNpZmllZCBieSAqZmlsdGVyKiAoYSBkaWN0KS5cbiIKKyJcbiIKKyJUaGUgcmVzdWx0IGRvZXMgbm90IGluY2x1ZGUgdGhlIGZpbHRlciBJRCBpdHNlbGYsIG9ubHkgdGhlIG9wdGlvbnMuIik7CisKKyNkZWZpbmUgX0xaTUFfX0RFQ09ERV9GSUxURVJfUFJPUEVSVElFU19NRVRIT0RERUYgICAgXAorICAgIHsiX2RlY29kZV9maWx0ZXJfcHJvcGVydGllcyIsIChQeUNGdW5jdGlvbilfbHptYV9fZGVjb2RlX2ZpbHRlcl9wcm9wZXJ0aWVzLCBNRVRIX1ZBUkFSR1MsIF9sem1hX19kZWNvZGVfZmlsdGVyX3Byb3BlcnRpZXNfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19sem1hX19kZWNvZGVfZmlsdGVyX3Byb3BlcnRpZXNfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBsem1hX3ZsaSBmaWx0ZXJfaWQsIFB5X2J1ZmZlciAqZW5jb2RlZF9wcm9wcyk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfbHptYV9fZGVjb2RlX2ZpbHRlcl9wcm9wZXJ0aWVzKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIGx6bWFfdmxpIGZpbHRlcl9pZDsKKyAgICBQeV9idWZmZXIgZW5jb2RlZF9wcm9wcyA9IHtOVUxMLCBOVUxMfTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAiTyZ5KjpfZGVjb2RlX2ZpbHRlcl9wcm9wZXJ0aWVzIiwKKyAgICAgICAgbHptYV92bGlfY29udmVydGVyLCAmZmlsdGVyX2lkLCAmZW5jb2RlZF9wcm9wcykpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfbHptYV9fZGVjb2RlX2ZpbHRlcl9wcm9wZXJ0aWVzX2ltcGwobW9kdWxlLCBmaWx0ZXJfaWQsICZlbmNvZGVkX3Byb3BzKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBlbmNvZGVkX3Byb3BzICovCisgICAgaWYgKGVuY29kZWRfcHJvcHMub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmVuY29kZWRfcHJvcHMpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD04MDhmZWM4MjE2YWM3MTJiIGlucHV0PWE5MDQ5MDU0MDEzYTFiNzddKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvY2xpbmljL19waWNrbGUuYy5oIGIvTW9kdWxlcy9jbGluaWMvX3BpY2tsZS5jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBjNTRkMgotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvY2xpbmljL19waWNrbGUuYy5oCkBAIC0wLDAgKzEsNTQ1IEBACisvKltjbGluaWMgaW5wdXRdCitwcmVzZXJ2ZQorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitQeURvY19TVFJWQVIoX3BpY2tsZV9QaWNrbGVyX2NsZWFyX21lbW9fX2RvY19fLAorImNsZWFyX21lbW8oJHNlbGYsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJDbGVhcnMgdGhlIHBpY2tsZXJcJ3MgXCJtZW1vXCIuXG4iCisiXG4iCisiVGhlIG1lbW8gaXMgdGhlIGRhdGEgc3RydWN0dXJlIHRoYXQgcmVtZW1iZXJzIHdoaWNoIG9iamVjdHMgdGhlXG4iCisicGlja2xlciBoYXMgYWxyZWFkeSBzZWVuLCBzbyB0aGF0IHNoYXJlZCBvciByZWN1cnNpdmUgb2JqZWN0cyBhcmVcbiIKKyJwaWNrbGVkIGJ5IHJlZmVyZW5jZSBhbmQgbm90IGJ5IHZhbHVlLiAgVGhpcyBtZXRob2QgaXMgdXNlZnVsIHdoZW5cbiIKKyJyZS11c2luZyBwaWNrbGVycy4iKTsKKworI2RlZmluZSBfUElDS0xFX1BJQ0tMRVJfQ0xFQVJfTUVNT19NRVRIT0RERUYgICAgXAorICAgIHsiY2xlYXJfbWVtbyIsIChQeUNGdW5jdGlvbilfcGlja2xlX1BpY2tsZXJfY2xlYXJfbWVtbywgTUVUSF9OT0FSR1MsIF9waWNrbGVfUGlja2xlcl9jbGVhcl9tZW1vX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfcGlja2xlX1BpY2tsZXJfY2xlYXJfbWVtb19pbXBsKFBpY2tsZXJPYmplY3QgKnNlbGYpOworCitzdGF0aWMgUHlPYmplY3QgKgorX3BpY2tsZV9QaWNrbGVyX2NsZWFyX21lbW8oUGlja2xlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKK3sKKyAgICByZXR1cm4gX3BpY2tsZV9QaWNrbGVyX2NsZWFyX21lbW9faW1wbChzZWxmKTsKK30KKworUHlEb2NfU1RSVkFSKF9waWNrbGVfUGlja2xlcl9kdW1wX19kb2NfXywKKyJkdW1wKCRzZWxmLCBvYmosIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJXcml0ZSBhIHBpY2tsZWQgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIG9iamVjdCB0byB0aGUgb3BlbiBmaWxlLiIpOworCisjZGVmaW5lIF9QSUNLTEVfUElDS0xFUl9EVU1QX01FVEhPRERFRiAgICBcCisgICAgeyJkdW1wIiwgKFB5Q0Z1bmN0aW9uKV9waWNrbGVfUGlja2xlcl9kdW1wLCBNRVRIX08sIF9waWNrbGVfUGlja2xlcl9kdW1wX19kb2NfX30sCisKK1B5RG9jX1NUUlZBUihfcGlja2xlX1BpY2tsZXJfX19zaXplb2ZfX19fZG9jX18sCisiX19zaXplb2ZfXygkc2VsZiwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybnMgc2l6ZSBpbiBtZW1vcnksIGluIGJ5dGVzLiIpOworCisjZGVmaW5lIF9QSUNLTEVfUElDS0xFUl9fX1NJWkVPRl9fX01FVEhPRERFRiAgICBcCisgICAgeyJfX3NpemVvZl9fIiwgKFB5Q0Z1bmN0aW9uKV9waWNrbGVfUGlja2xlcl9fX3NpemVvZl9fLCBNRVRIX05PQVJHUywgX3BpY2tsZV9QaWNrbGVyX19fc2l6ZW9mX19fX2RvY19ffSwKKworc3RhdGljIFB5X3NzaXplX3QKK19waWNrbGVfUGlja2xlcl9fX3NpemVvZl9fX2ltcGwoUGlja2xlck9iamVjdCAqc2VsZik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfcGlja2xlX1BpY2tsZXJfX19zaXplb2ZfXyhQaWNrbGVyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X3NzaXplX3QgX3JldHVybl92YWx1ZTsKKworICAgIF9yZXR1cm5fdmFsdWUgPSBfcGlja2xlX1BpY2tsZXJfX19zaXplb2ZfX19pbXBsKHNlbGYpOworICAgIGlmICgoX3JldHVybl92YWx1ZSA9PSAtMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IFB5TG9uZ19Gcm9tU3NpemVfdChfcmV0dXJuX3ZhbHVlKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoX3BpY2tsZV9QaWNrbGVyX19faW5pdF9fX19kb2NfXywKKyJQaWNrbGVyKGZpbGUsIHByb3RvY29sPU5vbmUsIGZpeF9pbXBvcnRzPVRydWUpXG4iCisiLS1cbiIKKyJcbiIKKyJUaGlzIHRha2VzIGEgYmluYXJ5IGZpbGUgZm9yIHdyaXRpbmcgYSBwaWNrbGUgZGF0YSBzdHJlYW0uXG4iCisiXG4iCisiVGhlIG9wdGlvbmFsICpwcm90b2NvbCogYXJndW1lbnQgdGVsbHMgdGhlIHBpY2tsZXIgdG8gdXNlIHRoZSBnaXZlblxuIgorInByb3RvY29sOyBzdXBwb3J0ZWQgcHJvdG9jb2xzIGFyZSAwLCAxLCAyLCAzIGFuZCA0LiAgVGhlIGRlZmF1bHRcbiIKKyJwcm90b2NvbCBpcyAzOyBhIGJhY2t3YXJkLWluY29tcGF0aWJsZSBwcm90b2NvbCBkZXNpZ25lZCBmb3IgUHl0aG9uIDMuXG4iCisiXG4iCisiU3BlY2lmeWluZyBhIG5lZ2F0aXZlIHByb3RvY29sIHZlcnNpb24gc2VsZWN0cyB0aGUgaGlnaGVzdCBwcm90b2NvbFxuIgorInZlcnNpb24gc3VwcG9ydGVkLiAgVGhlIGhpZ2hlciB0aGUgcHJvdG9jb2wgdXNlZCwgdGhlIG1vcmUgcmVjZW50IHRoZVxuIgorInZlcnNpb24gb2YgUHl0aG9uIG5lZWRlZCB0byByZWFkIHRoZSBwaWNrbGUgcHJvZHVjZWQuXG4iCisiXG4iCisiVGhlICpmaWxlKiBhcmd1bWVudCBtdXN0IGhhdmUgYSB3cml0ZSgpIG1ldGhvZCB0aGF0IGFjY2VwdHMgYSBzaW5nbGVcbiIKKyJieXRlcyBhcmd1bWVudC4gSXQgY2FuIHRodXMgYmUgYSBmaWxlIG9iamVjdCBvcGVuZWQgZm9yIGJpbmFyeVxuIgorIndyaXRpbmcsIGFuIGlvLkJ5dGVzSU8gaW5zdGFuY2UsIG9yIGFueSBvdGhlciBjdXN0b20gb2JqZWN0IHRoYXQgbWVldHNcbiIKKyJ0aGlzIGludGVyZmFjZS5cbiIKKyJcbiIKKyJJZiAqZml4X2ltcG9ydHMqIGlzIFRydWUgYW5kIHByb3RvY29sIGlzIGxlc3MgdGhhbiAzLCBwaWNrbGUgd2lsbCB0cnlcbiIKKyJ0byBtYXAgdGhlIG5ldyBQeXRob24gMyBuYW1lcyB0byB0aGUgb2xkIG1vZHVsZSBuYW1lcyB1c2VkIGluIFB5dGhvblxuIgorIjIsIHNvIHRoYXQgdGhlIHBpY2tsZSBkYXRhIHN0cmVhbSBpcyByZWFkYWJsZSB3aXRoIFB5dGhvbiAyLiIpOworCitzdGF0aWMgaW50CitfcGlja2xlX1BpY2tsZXJfX19pbml0X19faW1wbChQaWNrbGVyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqZmlsZSwgUHlPYmplY3QgKnByb3RvY29sLCBpbnQgZml4X2ltcG9ydHMpOworCitzdGF0aWMgaW50CitfcGlja2xlX1BpY2tsZXJfX19pbml0X18oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQoreworICAgIGludCByZXR1cm5fdmFsdWUgPSAtMTsKKyAgICBzdGF0aWMgY2hhciAqX2tleXdvcmRzW10gPSB7ImZpbGUiLCAicHJvdG9jb2wiLCAiZml4X2ltcG9ydHMiLCBOVUxMfTsKKyAgICBQeU9iamVjdCAqZmlsZTsKKyAgICBQeU9iamVjdCAqcHJvdG9jb2wgPSBOVUxMOworICAgIGludCBmaXhfaW1wb3J0cyA9IDE7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsCisgICAgICAgICJPfE9wOlBpY2tsZXIiLCBfa2V5d29yZHMsCisgICAgICAgICZmaWxlLCAmcHJvdG9jb2wsICZmaXhfaW1wb3J0cykpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfcGlja2xlX1BpY2tsZXJfX19pbml0X19faW1wbCgoUGlja2xlck9iamVjdCAqKXNlbGYsIGZpbGUsIHByb3RvY29sLCBmaXhfaW1wb3J0cyk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKF9waWNrbGVfUGlja2xlck1lbW9Qcm94eV9jbGVhcl9fZG9jX18sCisiY2xlYXIoJHNlbGYsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZW1vdmUgYWxsIGl0ZW1zIGZyb20gbWVtby4iKTsKKworI2RlZmluZSBfUElDS0xFX1BJQ0tMRVJNRU1PUFJPWFlfQ0xFQVJfTUVUSE9EREVGICAgIFwKKyAgICB7ImNsZWFyIiwgKFB5Q0Z1bmN0aW9uKV9waWNrbGVfUGlja2xlck1lbW9Qcm94eV9jbGVhciwgTUVUSF9OT0FSR1MsIF9waWNrbGVfUGlja2xlck1lbW9Qcm94eV9jbGVhcl9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX3BpY2tsZV9QaWNrbGVyTWVtb1Byb3h5X2NsZWFyX2ltcGwoUGlja2xlck1lbW9Qcm94eU9iamVjdCAqc2VsZik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfcGlja2xlX1BpY2tsZXJNZW1vUHJveHlfY2xlYXIoUGlja2xlck1lbW9Qcm94eU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKK3sKKyAgICByZXR1cm4gX3BpY2tsZV9QaWNrbGVyTWVtb1Byb3h5X2NsZWFyX2ltcGwoc2VsZik7Cit9CisKK1B5RG9jX1NUUlZBUihfcGlja2xlX1BpY2tsZXJNZW1vUHJveHlfY29weV9fZG9jX18sCisiY29weSgkc2VsZiwgLylcbiIKKyItLVxuIgorIlxuIgorIkNvcHkgdGhlIG1lbW8gdG8gYSBuZXcgb2JqZWN0LiIpOworCisjZGVmaW5lIF9QSUNLTEVfUElDS0xFUk1FTU9QUk9YWV9DT1BZX01FVEhPRERFRiAgICBcCisgICAgeyJjb3B5IiwgKFB5Q0Z1bmN0aW9uKV9waWNrbGVfUGlja2xlck1lbW9Qcm94eV9jb3B5LCBNRVRIX05PQVJHUywgX3BpY2tsZV9QaWNrbGVyTWVtb1Byb3h5X2NvcHlfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19waWNrbGVfUGlja2xlck1lbW9Qcm94eV9jb3B5X2ltcGwoUGlja2xlck1lbW9Qcm94eU9iamVjdCAqc2VsZik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfcGlja2xlX1BpY2tsZXJNZW1vUHJveHlfY29weShQaWNrbGVyTWVtb1Byb3h5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQoreworICAgIHJldHVybiBfcGlja2xlX1BpY2tsZXJNZW1vUHJveHlfY29weV9pbXBsKHNlbGYpOworfQorCitQeURvY19TVFJWQVIoX3BpY2tsZV9QaWNrbGVyTWVtb1Byb3h5X19fcmVkdWNlX19fX2RvY19fLAorIl9fcmVkdWNlX18oJHNlbGYsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJJbXBsZW1lbnQgcGlja2xlIHN1cHBvcnQuIik7CisKKyNkZWZpbmUgX1BJQ0tMRV9QSUNLTEVSTUVNT1BST1hZX19fUkVEVUNFX19fTUVUSE9EREVGICAgIFwKKyAgICB7Il9fcmVkdWNlX18iLCAoUHlDRnVuY3Rpb24pX3BpY2tsZV9QaWNrbGVyTWVtb1Byb3h5X19fcmVkdWNlX18sIE1FVEhfTk9BUkdTLCBfcGlja2xlX1BpY2tsZXJNZW1vUHJveHlfX19yZWR1Y2VfX19fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX3BpY2tsZV9QaWNrbGVyTWVtb1Byb3h5X19fcmVkdWNlX19faW1wbChQaWNrbGVyTWVtb1Byb3h5T2JqZWN0ICpzZWxmKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19waWNrbGVfUGlja2xlck1lbW9Qcm94eV9fX3JlZHVjZV9fKFBpY2tsZXJNZW1vUHJveHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpQeV9VTlVTRUQoaWdub3JlZCkpCit7CisgICAgcmV0dXJuIF9waWNrbGVfUGlja2xlck1lbW9Qcm94eV9fX3JlZHVjZV9fX2ltcGwoc2VsZik7Cit9CisKK1B5RG9jX1NUUlZBUihfcGlja2xlX1VucGlja2xlcl9sb2FkX19kb2NfXywKKyJsb2FkKCRzZWxmLCAvKVxuIgorIi0tXG4iCisiXG4iCisiTG9hZCBhIHBpY2tsZS5cbiIKKyJcbiIKKyJSZWFkIGEgcGlja2xlZCBvYmplY3QgcmVwcmVzZW50YXRpb24gZnJvbSB0aGUgb3BlbiBmaWxlIG9iamVjdCBnaXZlblxuIgorImluIHRoZSBjb25zdHJ1Y3RvciwgYW5kIHJldHVybiB0aGUgcmVjb25zdGl0dXRlZCBvYmplY3QgaGllcmFyY2h5XG4iCisic3BlY2lmaWVkIHRoZXJlaW4uIik7CisKKyNkZWZpbmUgX1BJQ0tMRV9VTlBJQ0tMRVJfTE9BRF9NRVRIT0RERUYgICAgXAorICAgIHsibG9hZCIsIChQeUNGdW5jdGlvbilfcGlja2xlX1VucGlja2xlcl9sb2FkLCBNRVRIX05PQVJHUywgX3BpY2tsZV9VbnBpY2tsZXJfbG9hZF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX3BpY2tsZV9VbnBpY2tsZXJfbG9hZF9pbXBsKFVucGlja2xlck9iamVjdCAqc2VsZik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfcGlja2xlX1VucGlja2xlcl9sb2FkKFVucGlja2xlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKK3sKKyAgICByZXR1cm4gX3BpY2tsZV9VbnBpY2tsZXJfbG9hZF9pbXBsKHNlbGYpOworfQorCitQeURvY19TVFJWQVIoX3BpY2tsZV9VbnBpY2tsZXJfZmluZF9jbGFzc19fZG9jX18sCisiZmluZF9jbGFzcygkc2VsZiwgbW9kdWxlX25hbWUsIGdsb2JhbF9uYW1lLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIGFuIG9iamVjdCBmcm9tIGEgc3BlY2lmaWVkIG1vZHVsZS5cbiIKKyJcbiIKKyJJZiBuZWNlc3NhcnksIHRoZSBtb2R1bGUgd2lsbCBiZSBpbXBvcnRlZC4gU3ViY2xhc3NlcyBtYXkgb3ZlcnJpZGVcbiIKKyJ0aGlzIG1ldGhvZCAoZS5nLiB0byByZXN0cmljdCB1bnBpY2tsaW5nIG9mIGFyYml0cmFyeSBjbGFzc2VzIGFuZFxuIgorImZ1bmN0aW9ucykuXG4iCisiXG4iCisiVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW5ldmVyIGEgY2xhc3Mgb3IgYSBmdW5jdGlvbiBvYmplY3QgaXNcbiIKKyJuZWVkZWQuICBCb3RoIGFyZ3VtZW50cyBwYXNzZWQgYXJlIHN0ciBvYmplY3RzLiIpOworCisjZGVmaW5lIF9QSUNLTEVfVU5QSUNLTEVSX0ZJTkRfQ0xBU1NfTUVUSE9EREVGICAgIFwKKyAgICB7ImZpbmRfY2xhc3MiLCAoUHlDRnVuY3Rpb24pX3BpY2tsZV9VbnBpY2tsZXJfZmluZF9jbGFzcywgTUVUSF9WQVJBUkdTLCBfcGlja2xlX1VucGlja2xlcl9maW5kX2NsYXNzX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfcGlja2xlX1VucGlja2xlcl9maW5kX2NsYXNzX2ltcGwoVW5waWNrbGVyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqbW9kdWxlX25hbWUsIFB5T2JqZWN0ICpnbG9iYWxfbmFtZSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfcGlja2xlX1VucGlja2xlcl9maW5kX2NsYXNzKFVucGlja2xlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlPYmplY3QgKm1vZHVsZV9uYW1lOworICAgIFB5T2JqZWN0ICpnbG9iYWxfbmFtZTsKKworICAgIGlmICghUHlBcmdfVW5wYWNrVHVwbGUoYXJncywgImZpbmRfY2xhc3MiLAorICAgICAgICAyLCAyLAorICAgICAgICAmbW9kdWxlX25hbWUsICZnbG9iYWxfbmFtZSkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfcGlja2xlX1VucGlja2xlcl9maW5kX2NsYXNzX2ltcGwoc2VsZiwgbW9kdWxlX25hbWUsIGdsb2JhbF9uYW1lKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoX3BpY2tsZV9VbnBpY2tsZXJfX19zaXplb2ZfX19fZG9jX18sCisiX19zaXplb2ZfXygkc2VsZiwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybnMgc2l6ZSBpbiBtZW1vcnksIGluIGJ5dGVzLiIpOworCisjZGVmaW5lIF9QSUNLTEVfVU5QSUNLTEVSX19fU0laRU9GX19fTUVUSE9EREVGICAgIFwKKyAgICB7Il9fc2l6ZW9mX18iLCAoUHlDRnVuY3Rpb24pX3BpY2tsZV9VbnBpY2tsZXJfX19zaXplb2ZfXywgTUVUSF9OT0FSR1MsIF9waWNrbGVfVW5waWNrbGVyX19fc2l6ZW9mX19fX2RvY19ffSwKKworc3RhdGljIFB5X3NzaXplX3QKK19waWNrbGVfVW5waWNrbGVyX19fc2l6ZW9mX19faW1wbChVbnBpY2tsZXJPYmplY3QgKnNlbGYpOworCitzdGF0aWMgUHlPYmplY3QgKgorX3BpY2tsZV9VbnBpY2tsZXJfX19zaXplb2ZfXyhVbnBpY2tsZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpQeV9VTlVTRUQoaWdub3JlZCkpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfc3NpemVfdCBfcmV0dXJuX3ZhbHVlOworCisgICAgX3JldHVybl92YWx1ZSA9IF9waWNrbGVfVW5waWNrbGVyX19fc2l6ZW9mX19faW1wbChzZWxmKTsKKyAgICBpZiAoKF9yZXR1cm5fdmFsdWUgPT0gLTEpICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBQeUxvbmdfRnJvbVNzaXplX3QoX3JldHVybl92YWx1ZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKF9waWNrbGVfVW5waWNrbGVyX19faW5pdF9fX19kb2NfXywKKyJVbnBpY2tsZXIoZmlsZSwgKiwgZml4X2ltcG9ydHM9VHJ1ZSwgZW5jb2Rpbmc9XCdBU0NJSVwnLCBlcnJvcnM9XCdzdHJpY3RcJylcbiIKKyItLVxuIgorIlxuIgorIlRoaXMgdGFrZXMgYSBiaW5hcnkgZmlsZSBmb3IgcmVhZGluZyBhIHBpY2tsZSBkYXRhIHN0cmVhbS5cbiIKKyJcbiIKKyJUaGUgcHJvdG9jb2wgdmVyc2lvbiBvZiB0aGUgcGlja2xlIGlzIGRldGVjdGVkIGF1dG9tYXRpY2FsbHksIHNvIG5vXG4iCisicHJvdG9jb2wgYXJndW1lbnQgaXMgbmVlZGVkLiAgQnl0ZXMgcGFzdCB0aGUgcGlja2xlZCBvYmplY3RcJ3NcbiIKKyJyZXByZXNlbnRhdGlvbiBhcmUgaWdub3JlZC5cbiIKKyJcbiIKKyJUaGUgYXJndW1lbnQgKmZpbGUqIG11c3QgaGF2ZSB0d28gbWV0aG9kcywgYSByZWFkKCkgbWV0aG9kIHRoYXQgdGFrZXNcbiIKKyJhbiBpbnRlZ2VyIGFyZ3VtZW50LCBhbmQgYSByZWFkbGluZSgpIG1ldGhvZCB0aGF0IHJlcXVpcmVzIG5vXG4iCisiYXJndW1lbnRzLiAgQm90aCBtZXRob2RzIHNob3VsZCByZXR1cm4gYnl0ZXMuICBUaHVzICpmaWxlKiBjYW4gYmUgYVxuIgorImJpbmFyeSBmaWxlIG9iamVjdCBvcGVuZWQgZm9yIHJlYWRpbmcsIGFuIGlvLkJ5dGVzSU8gb2JqZWN0LCBvciBhbnlcbiIKKyJvdGhlciBjdXN0b20gb2JqZWN0IHRoYXQgbWVldHMgdGhpcyBpbnRlcmZhY2UuXG4iCisiXG4iCisiT3B0aW9uYWwga2V5d29yZCBhcmd1bWVudHMgYXJlICpmaXhfaW1wb3J0cyosICplbmNvZGluZyogYW5kICplcnJvcnMqLFxuIgorIndoaWNoIGFyZSB1c2VkIHRvIGNvbnRyb2wgY29tcGF0aWJsaXR5IHN1cHBvcnQgZm9yIHBpY2tsZSBzdHJlYW1cbiIKKyJnZW5lcmF0ZWQgYnkgUHl0aG9uIDIuICBJZiAqZml4X2ltcG9ydHMqIGlzIFRydWUsIHBpY2tsZSB3aWxsIHRyeSB0b1xuIgorIm1hcCB0aGUgb2xkIFB5dGhvbiAyIG5hbWVzIHRvIHRoZSBuZXcgbmFtZXMgdXNlZCBpbiBQeXRob24gMy4gIFRoZVxuIgorIiplbmNvZGluZyogYW5kICplcnJvcnMqIHRlbGwgcGlja2xlIGhvdyB0byBkZWNvZGUgOC1iaXQgc3RyaW5nXG4iCisiaW5zdGFuY2VzIHBpY2tsZWQgYnkgUHl0aG9uIDI7IHRoZXNlIGRlZmF1bHQgdG8gXCdBU0NJSVwnIGFuZCBcJ3N0cmljdFwnLFxuIgorInJlc3BlY3RpdmVseS4gIFRoZSAqZW5jb2RpbmcqIGNhbiBiZSBcJ2J5dGVzXCcgdG8gcmVhZCB0aGVzZSA4LWJpdFxuIgorInN0cmluZyBpbnN0YW5jZXMgYXMgYnl0ZXMgb2JqZWN0cy4iKTsKKworc3RhdGljIGludAorX3BpY2tsZV9VbnBpY2tsZXJfX19pbml0X19faW1wbChVbnBpY2tsZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpmaWxlLCBpbnQgZml4X2ltcG9ydHMsIGNvbnN0IGNoYXIgKmVuY29kaW5nLCBjb25zdCBjaGFyICplcnJvcnMpOworCitzdGF0aWMgaW50CitfcGlja2xlX1VucGlja2xlcl9fX2luaXRfXyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgaW50IHJldHVybl92YWx1ZSA9IC0xOworICAgIHN0YXRpYyBjaGFyICpfa2V5d29yZHNbXSA9IHsiZmlsZSIsICJmaXhfaW1wb3J0cyIsICJlbmNvZGluZyIsICJlcnJvcnMiLCBOVUxMfTsKKyAgICBQeU9iamVjdCAqZmlsZTsKKyAgICBpbnQgZml4X2ltcG9ydHMgPSAxOworICAgIGNvbnN0IGNoYXIgKmVuY29kaW5nID0gIkFTQ0lJIjsKKyAgICBjb25zdCBjaGFyICplcnJvcnMgPSAic3RyaWN0IjsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywKKyAgICAgICAgIk98JHBzczpVbnBpY2tsZXIiLCBfa2V5d29yZHMsCisgICAgICAgICZmaWxlLCAmZml4X2ltcG9ydHMsICZlbmNvZGluZywgJmVycm9ycykpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfcGlja2xlX1VucGlja2xlcl9fX2luaXRfX19pbXBsKChVbnBpY2tsZXJPYmplY3QgKilzZWxmLCBmaWxlLCBmaXhfaW1wb3J0cywgZW5jb2RpbmcsIGVycm9ycyk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKF9waWNrbGVfVW5waWNrbGVyTWVtb1Byb3h5X2NsZWFyX19kb2NfXywKKyJjbGVhcigkc2VsZiwgLylcbiIKKyItLVxuIgorIlxuIgorIlJlbW92ZSBhbGwgaXRlbXMgZnJvbSBtZW1vLiIpOworCisjZGVmaW5lIF9QSUNLTEVfVU5QSUNLTEVSTUVNT1BST1hZX0NMRUFSX01FVEhPRERFRiAgICBcCisgICAgeyJjbGVhciIsIChQeUNGdW5jdGlvbilfcGlja2xlX1VucGlja2xlck1lbW9Qcm94eV9jbGVhciwgTUVUSF9OT0FSR1MsIF9waWNrbGVfVW5waWNrbGVyTWVtb1Byb3h5X2NsZWFyX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfcGlja2xlX1VucGlja2xlck1lbW9Qcm94eV9jbGVhcl9pbXBsKFVucGlja2xlck1lbW9Qcm94eU9iamVjdCAqc2VsZik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfcGlja2xlX1VucGlja2xlck1lbW9Qcm94eV9jbGVhcihVbnBpY2tsZXJNZW1vUHJveHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpQeV9VTlVTRUQoaWdub3JlZCkpCit7CisgICAgcmV0dXJuIF9waWNrbGVfVW5waWNrbGVyTWVtb1Byb3h5X2NsZWFyX2ltcGwoc2VsZik7Cit9CisKK1B5RG9jX1NUUlZBUihfcGlja2xlX1VucGlja2xlck1lbW9Qcm94eV9jb3B5X19kb2NfXywKKyJjb3B5KCRzZWxmLCAvKVxuIgorIi0tXG4iCisiXG4iCisiQ29weSB0aGUgbWVtbyB0byBhIG5ldyBvYmplY3QuIik7CisKKyNkZWZpbmUgX1BJQ0tMRV9VTlBJQ0tMRVJNRU1PUFJPWFlfQ09QWV9NRVRIT0RERUYgICAgXAorICAgIHsiY29weSIsIChQeUNGdW5jdGlvbilfcGlja2xlX1VucGlja2xlck1lbW9Qcm94eV9jb3B5LCBNRVRIX05PQVJHUywgX3BpY2tsZV9VbnBpY2tsZXJNZW1vUHJveHlfY29weV9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX3BpY2tsZV9VbnBpY2tsZXJNZW1vUHJveHlfY29weV9pbXBsKFVucGlja2xlck1lbW9Qcm94eU9iamVjdCAqc2VsZik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfcGlja2xlX1VucGlja2xlck1lbW9Qcm94eV9jb3B5KFVucGlja2xlck1lbW9Qcm94eU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKK3sKKyAgICByZXR1cm4gX3BpY2tsZV9VbnBpY2tsZXJNZW1vUHJveHlfY29weV9pbXBsKHNlbGYpOworfQorCitQeURvY19TVFJWQVIoX3BpY2tsZV9VbnBpY2tsZXJNZW1vUHJveHlfX19yZWR1Y2VfX19fZG9jX18sCisiX19yZWR1Y2VfXygkc2VsZiwgLylcbiIKKyItLVxuIgorIlxuIgorIkltcGxlbWVudCBwaWNrbGluZyBzdXBwb3J0LiIpOworCisjZGVmaW5lIF9QSUNLTEVfVU5QSUNLTEVSTUVNT1BST1hZX19fUkVEVUNFX19fTUVUSE9EREVGICAgIFwKKyAgICB7Il9fcmVkdWNlX18iLCAoUHlDRnVuY3Rpb24pX3BpY2tsZV9VbnBpY2tsZXJNZW1vUHJveHlfX19yZWR1Y2VfXywgTUVUSF9OT0FSR1MsIF9waWNrbGVfVW5waWNrbGVyTWVtb1Byb3h5X19fcmVkdWNlX19fX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19waWNrbGVfVW5waWNrbGVyTWVtb1Byb3h5X19fcmVkdWNlX19faW1wbChVbnBpY2tsZXJNZW1vUHJveHlPYmplY3QgKnNlbGYpOworCitzdGF0aWMgUHlPYmplY3QgKgorX3BpY2tsZV9VbnBpY2tsZXJNZW1vUHJveHlfX19yZWR1Y2VfXyhVbnBpY2tsZXJNZW1vUHJveHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpQeV9VTlVTRUQoaWdub3JlZCkpCit7CisgICAgcmV0dXJuIF9waWNrbGVfVW5waWNrbGVyTWVtb1Byb3h5X19fcmVkdWNlX19faW1wbChzZWxmKTsKK30KKworUHlEb2NfU1RSVkFSKF9waWNrbGVfZHVtcF9fZG9jX18sCisiZHVtcCgkbW9kdWxlLCAvLCBvYmosIGZpbGUsIHByb3RvY29sPU5vbmUsICosIGZpeF9pbXBvcnRzPVRydWUpXG4iCisiLS1cbiIKKyJcbiIKKyJXcml0ZSBhIHBpY2tsZWQgcmVwcmVzZW50YXRpb24gb2Ygb2JqIHRvIHRoZSBvcGVuIGZpbGUgb2JqZWN0IGZpbGUuXG4iCisiXG4iCisiVGhpcyBpcyBlcXVpdmFsZW50IHRvIGBgUGlja2xlcihmaWxlLCBwcm90b2NvbCkuZHVtcChvYmopYGAsIGJ1dCBtYXlcbiIKKyJiZSBtb3JlIGVmZmljaWVudC5cbiIKKyJcbiIKKyJUaGUgb3B0aW9uYWwgKnByb3RvY29sKiBhcmd1bWVudCB0ZWxscyB0aGUgcGlja2xlciB0byB1c2UgdGhlIGdpdmVuXG4iCisicHJvdG9jb2wgc3VwcG9ydGVkIHByb3RvY29scyBhcmUgMCwgMSwgMiwgMyBhbmQgNC4gIFRoZSBkZWZhdWx0XG4iCisicHJvdG9jb2wgaXMgMzsgYSBiYWNrd2FyZC1pbmNvbXBhdGlibGUgcHJvdG9jb2wgZGVzaWduZWQgZm9yIFB5dGhvbiAzLlxuIgorIlxuIgorIlNwZWNpZnlpbmcgYSBuZWdhdGl2ZSBwcm90b2NvbCB2ZXJzaW9uIHNlbGVjdHMgdGhlIGhpZ2hlc3QgcHJvdG9jb2xcbiIKKyJ2ZXJzaW9uIHN1cHBvcnRlZC4gIFRoZSBoaWdoZXIgdGhlIHByb3RvY29sIHVzZWQsIHRoZSBtb3JlIHJlY2VudCB0aGVcbiIKKyJ2ZXJzaW9uIG9mIFB5dGhvbiBuZWVkZWQgdG8gcmVhZCB0aGUgcGlja2xlIHByb2R1Y2VkLlxuIgorIlxuIgorIlRoZSAqZmlsZSogYXJndW1lbnQgbXVzdCBoYXZlIGEgd3JpdGUoKSBtZXRob2QgdGhhdCBhY2NlcHRzIGEgc2luZ2xlXG4iCisiYnl0ZXMgYXJndW1lbnQuICBJdCBjYW4gdGh1cyBiZSBhIGZpbGUgb2JqZWN0IG9wZW5lZCBmb3IgYmluYXJ5XG4iCisid3JpdGluZywgYW4gaW8uQnl0ZXNJTyBpbnN0YW5jZSwgb3IgYW55IG90aGVyIGN1c3RvbSBvYmplY3QgdGhhdCBtZWV0c1xuIgorInRoaXMgaW50ZXJmYWNlLlxuIgorIlxuIgorIklmICpmaXhfaW1wb3J0cyogaXMgVHJ1ZSBhbmQgcHJvdG9jb2wgaXMgbGVzcyB0aGFuIDMsIHBpY2tsZSB3aWxsIHRyeVxuIgorInRvIG1hcCB0aGUgbmV3IFB5dGhvbiAzIG5hbWVzIHRvIHRoZSBvbGQgbW9kdWxlIG5hbWVzIHVzZWQgaW4gUHl0aG9uXG4iCisiMiwgc28gdGhhdCB0aGUgcGlja2xlIGRhdGEgc3RyZWFtIGlzIHJlYWRhYmxlIHdpdGggUHl0aG9uIDIuIik7CisKKyNkZWZpbmUgX1BJQ0tMRV9EVU1QX01FVEhPRERFRiAgICBcCisgICAgeyJkdW1wIiwgKFB5Q0Z1bmN0aW9uKV9waWNrbGVfZHVtcCwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIF9waWNrbGVfZHVtcF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX3BpY2tsZV9kdW1wX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKm9iaiwgUHlPYmplY3QgKmZpbGUsIFB5T2JqZWN0ICpwcm90b2NvbCwgaW50IGZpeF9pbXBvcnRzKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19waWNrbGVfZHVtcChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBzdGF0aWMgY2hhciAqX2tleXdvcmRzW10gPSB7Im9iaiIsICJmaWxlIiwgInByb3RvY29sIiwgImZpeF9pbXBvcnRzIiwgTlVMTH07CisgICAgUHlPYmplY3QgKm9iajsKKyAgICBQeU9iamVjdCAqZmlsZTsKKyAgICBQeU9iamVjdCAqcHJvdG9jb2wgPSBOVUxMOworICAgIGludCBmaXhfaW1wb3J0cyA9IDE7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsCisgICAgICAgICJPT3xPJHA6ZHVtcCIsIF9rZXl3b3JkcywKKyAgICAgICAgJm9iaiwgJmZpbGUsICZwcm90b2NvbCwgJmZpeF9pbXBvcnRzKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9waWNrbGVfZHVtcF9pbXBsKG1vZHVsZSwgb2JqLCBmaWxlLCBwcm90b2NvbCwgZml4X2ltcG9ydHMpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihfcGlja2xlX2R1bXBzX19kb2NfXywKKyJkdW1wcygkbW9kdWxlLCAvLCBvYmosIHByb3RvY29sPU5vbmUsICosIGZpeF9pbXBvcnRzPVRydWUpXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gdGhlIHBpY2tsZWQgcmVwcmVzZW50YXRpb24gb2YgdGhlIG9iamVjdCBhcyBhIGJ5dGVzIG9iamVjdC5cbiIKKyJcbiIKKyJUaGUgb3B0aW9uYWwgKnByb3RvY29sKiBhcmd1bWVudCB0ZWxscyB0aGUgcGlja2xlciB0byB1c2UgdGhlIGdpdmVuXG4iCisicHJvdG9jb2w7IHN1cHBvcnRlZCBwcm90b2NvbHMgYXJlIDAsIDEsIDIsIDMgYW5kIDQuICBUaGUgZGVmYXVsdFxuIgorInByb3RvY29sIGlzIDM7IGEgYmFja3dhcmQtaW5jb21wYXRpYmxlIHByb3RvY29sIGRlc2lnbmVkIGZvciBQeXRob24gMy5cbiIKKyJcbiIKKyJTcGVjaWZ5aW5nIGEgbmVnYXRpdmUgcHJvdG9jb2wgdmVyc2lvbiBzZWxlY3RzIHRoZSBoaWdoZXN0IHByb3RvY29sXG4iCisidmVyc2lvbiBzdXBwb3J0ZWQuICBUaGUgaGlnaGVyIHRoZSBwcm90b2NvbCB1c2VkLCB0aGUgbW9yZSByZWNlbnQgdGhlXG4iCisidmVyc2lvbiBvZiBQeXRob24gbmVlZGVkIHRvIHJlYWQgdGhlIHBpY2tsZSBwcm9kdWNlZC5cbiIKKyJcbiIKKyJJZiAqZml4X2ltcG9ydHMqIGlzIFRydWUgYW5kICpwcm90b2NvbCogaXMgbGVzcyB0aGFuIDMsIHBpY2tsZSB3aWxsXG4iCisidHJ5IHRvIG1hcCB0aGUgbmV3IFB5dGhvbiAzIG5hbWVzIHRvIHRoZSBvbGQgbW9kdWxlIG5hbWVzIHVzZWQgaW5cbiIKKyJQeXRob24gMiwgc28gdGhhdCB0aGUgcGlja2xlIGRhdGEgc3RyZWFtIGlzIHJlYWRhYmxlIHdpdGggUHl0aG9uIDIuIik7CisKKyNkZWZpbmUgX1BJQ0tMRV9EVU1QU19NRVRIT0RERUYgICAgXAorICAgIHsiZHVtcHMiLCAoUHlDRnVuY3Rpb24pX3BpY2tsZV9kdW1wcywgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIF9waWNrbGVfZHVtcHNfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19waWNrbGVfZHVtcHNfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqb2JqLCBQeU9iamVjdCAqcHJvdG9jb2wsIGludCBmaXhfaW1wb3J0cyk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfcGlja2xlX2R1bXBzKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIHN0YXRpYyBjaGFyICpfa2V5d29yZHNbXSA9IHsib2JqIiwgInByb3RvY29sIiwgImZpeF9pbXBvcnRzIiwgTlVMTH07CisgICAgUHlPYmplY3QgKm9iajsKKyAgICBQeU9iamVjdCAqcHJvdG9jb2wgPSBOVUxMOworICAgIGludCBmaXhfaW1wb3J0cyA9IDE7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsCisgICAgICAgICJPfE8kcDpkdW1wcyIsIF9rZXl3b3JkcywKKyAgICAgICAgJm9iaiwgJnByb3RvY29sLCAmZml4X2ltcG9ydHMpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX3BpY2tsZV9kdW1wc19pbXBsKG1vZHVsZSwgb2JqLCBwcm90b2NvbCwgZml4X2ltcG9ydHMpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihfcGlja2xlX2xvYWRfX2RvY19fLAorImxvYWQoJG1vZHVsZSwgLywgZmlsZSwgKiwgZml4X2ltcG9ydHM9VHJ1ZSwgZW5jb2Rpbmc9XCdBU0NJSVwnLFxuIgorIiAgICAgZXJyb3JzPVwnc3RyaWN0XCcpXG4iCisiLS1cbiIKKyJcbiIKKyJSZWFkIGFuZCByZXR1cm4gYW4gb2JqZWN0IGZyb20gdGhlIHBpY2tsZSBkYXRhIHN0b3JlZCBpbiBhIGZpbGUuXG4iCisiXG4iCisiVGhpcyBpcyBlcXVpdmFsZW50IHRvIGBgVW5waWNrbGVyKGZpbGUpLmxvYWQoKWBgLCBidXQgbWF5IGJlIG1vcmVcbiIKKyJlZmZpY2llbnQuXG4iCisiXG4iCisiVGhlIHByb3RvY29sIHZlcnNpb24gb2YgdGhlIHBpY2tsZSBpcyBkZXRlY3RlZCBhdXRvbWF0aWNhbGx5LCBzbyBub1xuIgorInByb3RvY29sIGFyZ3VtZW50IGlzIG5lZWRlZC4gIEJ5dGVzIHBhc3QgdGhlIHBpY2tsZWQgb2JqZWN0XCdzXG4iCisicmVwcmVzZW50YXRpb24gYXJlIGlnbm9yZWQuXG4iCisiXG4iCisiVGhlIGFyZ3VtZW50ICpmaWxlKiBtdXN0IGhhdmUgdHdvIG1ldGhvZHMsIGEgcmVhZCgpIG1ldGhvZCB0aGF0IHRha2VzXG4iCisiYW4gaW50ZWdlciBhcmd1bWVudCwgYW5kIGEgcmVhZGxpbmUoKSBtZXRob2QgdGhhdCByZXF1aXJlcyBub1xuIgorImFyZ3VtZW50cy4gIEJvdGggbWV0aG9kcyBzaG91bGQgcmV0dXJuIGJ5dGVzLiAgVGh1cyAqZmlsZSogY2FuIGJlIGFcbiIKKyJiaW5hcnkgZmlsZSBvYmplY3Qgb3BlbmVkIGZvciByZWFkaW5nLCBhbiBpby5CeXRlc0lPIG9iamVjdCwgb3IgYW55XG4iCisib3RoZXIgY3VzdG9tIG9iamVjdCB0aGF0IG1lZXRzIHRoaXMgaW50ZXJmYWNlLlxuIgorIlxuIgorIk9wdGlvbmFsIGtleXdvcmQgYXJndW1lbnRzIGFyZSAqZml4X2ltcG9ydHMqLCAqZW5jb2RpbmcqIGFuZCAqZXJyb3JzKixcbiIKKyJ3aGljaCBhcmUgdXNlZCB0byBjb250cm9sIGNvbXBhdGlibGl0eSBzdXBwb3J0IGZvciBwaWNrbGUgc3RyZWFtXG4iCisiZ2VuZXJhdGVkIGJ5IFB5dGhvbiAyLiAgSWYgKmZpeF9pbXBvcnRzKiBpcyBUcnVlLCBwaWNrbGUgd2lsbCB0cnkgdG9cbiIKKyJtYXAgdGhlIG9sZCBQeXRob24gMiBuYW1lcyB0byB0aGUgbmV3IG5hbWVzIHVzZWQgaW4gUHl0aG9uIDMuICBUaGVcbiIKKyIqZW5jb2RpbmcqIGFuZCAqZXJyb3JzKiB0ZWxsIHBpY2tsZSBob3cgdG8gZGVjb2RlIDgtYml0IHN0cmluZ1xuIgorImluc3RhbmNlcyBwaWNrbGVkIGJ5IFB5dGhvbiAyOyB0aGVzZSBkZWZhdWx0IHRvIFwnQVNDSUlcJyBhbmQgXCdzdHJpY3RcJyxcbiIKKyJyZXNwZWN0aXZlbHkuICBUaGUgKmVuY29kaW5nKiBjYW4gYmUgXCdieXRlc1wnIHRvIHJlYWQgdGhlc2UgOC1iaXRcbiIKKyJzdHJpbmcgaW5zdGFuY2VzIGFzIGJ5dGVzIG9iamVjdHMuIik7CisKKyNkZWZpbmUgX1BJQ0tMRV9MT0FEX01FVEhPRERFRiAgICBcCisgICAgeyJsb2FkIiwgKFB5Q0Z1bmN0aW9uKV9waWNrbGVfbG9hZCwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIF9waWNrbGVfbG9hZF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX3BpY2tsZV9sb2FkX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmZpbGUsIGludCBmaXhfaW1wb3J0cywgY29uc3QgY2hhciAqZW5jb2RpbmcsIGNvbnN0IGNoYXIgKmVycm9ycyk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfcGlja2xlX2xvYWQoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgc3RhdGljIGNoYXIgKl9rZXl3b3Jkc1tdID0geyJmaWxlIiwgImZpeF9pbXBvcnRzIiwgImVuY29kaW5nIiwgImVycm9ycyIsIE5VTEx9OworICAgIFB5T2JqZWN0ICpmaWxlOworICAgIGludCBmaXhfaW1wb3J0cyA9IDE7CisgICAgY29uc3QgY2hhciAqZW5jb2RpbmcgPSAiQVNDSUkiOworICAgIGNvbnN0IGNoYXIgKmVycm9ycyA9ICJzdHJpY3QiOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLAorICAgICAgICAiT3wkcHNzOmxvYWQiLCBfa2V5d29yZHMsCisgICAgICAgICZmaWxlLCAmZml4X2ltcG9ydHMsICZlbmNvZGluZywgJmVycm9ycykpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfcGlja2xlX2xvYWRfaW1wbChtb2R1bGUsIGZpbGUsIGZpeF9pbXBvcnRzLCBlbmNvZGluZywgZXJyb3JzKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoX3BpY2tsZV9sb2Fkc19fZG9jX18sCisibG9hZHMoJG1vZHVsZSwgLywgZGF0YSwgKiwgZml4X2ltcG9ydHM9VHJ1ZSwgZW5jb2Rpbmc9XCdBU0NJSVwnLFxuIgorIiAgICAgIGVycm9ycz1cJ3N0cmljdFwnKVxuIgorIi0tXG4iCisiXG4iCisiUmVhZCBhbmQgcmV0dXJuIGFuIG9iamVjdCBmcm9tIHRoZSBnaXZlbiBwaWNrbGUgZGF0YS5cbiIKKyJcbiIKKyJUaGUgcHJvdG9jb2wgdmVyc2lvbiBvZiB0aGUgcGlja2xlIGlzIGRldGVjdGVkIGF1dG9tYXRpY2FsbHksIHNvIG5vXG4iCisicHJvdG9jb2wgYXJndW1lbnQgaXMgbmVlZGVkLiAgQnl0ZXMgcGFzdCB0aGUgcGlja2xlZCBvYmplY3RcJ3NcbiIKKyJyZXByZXNlbnRhdGlvbiBhcmUgaWdub3JlZC5cbiIKKyJcbiIKKyJPcHRpb25hbCBrZXl3b3JkIGFyZ3VtZW50cyBhcmUgKmZpeF9pbXBvcnRzKiwgKmVuY29kaW5nKiBhbmQgKmVycm9ycyosXG4iCisid2hpY2ggYXJlIHVzZWQgdG8gY29udHJvbCBjb21wYXRpYmxpdHkgc3VwcG9ydCBmb3IgcGlja2xlIHN0cmVhbVxuIgorImdlbmVyYXRlZCBieSBQeXRob24gMi4gIElmICpmaXhfaW1wb3J0cyogaXMgVHJ1ZSwgcGlja2xlIHdpbGwgdHJ5IHRvXG4iCisibWFwIHRoZSBvbGQgUHl0aG9uIDIgbmFtZXMgdG8gdGhlIG5ldyBuYW1lcyB1c2VkIGluIFB5dGhvbiAzLiAgVGhlXG4iCisiKmVuY29kaW5nKiBhbmQgKmVycm9ycyogdGVsbCBwaWNrbGUgaG93IHRvIGRlY29kZSA4LWJpdCBzdHJpbmdcbiIKKyJpbnN0YW5jZXMgcGlja2xlZCBieSBQeXRob24gMjsgdGhlc2UgZGVmYXVsdCB0byBcJ0FTQ0lJXCcgYW5kIFwnc3RyaWN0XCcsXG4iCisicmVzcGVjdGl2ZWx5LiAgVGhlICplbmNvZGluZyogY2FuIGJlIFwnYnl0ZXNcJyB0byByZWFkIHRoZXNlIDgtYml0XG4iCisic3RyaW5nIGluc3RhbmNlcyBhcyBieXRlcyBvYmplY3RzLiIpOworCisjZGVmaW5lIF9QSUNLTEVfTE9BRFNfTUVUSE9EREVGICAgIFwKKyAgICB7ImxvYWRzIiwgKFB5Q0Z1bmN0aW9uKV9waWNrbGVfbG9hZHMsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCBfcGlja2xlX2xvYWRzX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfcGlja2xlX2xvYWRzX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmRhdGEsIGludCBmaXhfaW1wb3J0cywgY29uc3QgY2hhciAqZW5jb2RpbmcsIGNvbnN0IGNoYXIgKmVycm9ycyk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfcGlja2xlX2xvYWRzKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIHN0YXRpYyBjaGFyICpfa2V5d29yZHNbXSA9IHsiZGF0YSIsICJmaXhfaW1wb3J0cyIsICJlbmNvZGluZyIsICJlcnJvcnMiLCBOVUxMfTsKKyAgICBQeU9iamVjdCAqZGF0YTsKKyAgICBpbnQgZml4X2ltcG9ydHMgPSAxOworICAgIGNvbnN0IGNoYXIgKmVuY29kaW5nID0gIkFTQ0lJIjsKKyAgICBjb25zdCBjaGFyICplcnJvcnMgPSAic3RyaWN0IjsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywKKyAgICAgICAgIk98JHBzczpsb2FkcyIsIF9rZXl3b3JkcywKKyAgICAgICAgJmRhdGEsICZmaXhfaW1wb3J0cywgJmVuY29kaW5nLCAmZXJyb3JzKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9waWNrbGVfbG9hZHNfaW1wbChtb2R1bGUsIGRhdGEsIGZpeF9pbXBvcnRzLCBlbmNvZGluZywgZXJyb3JzKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTFiYTIxMDE1MmUyMjYxZDggaW5wdXQ9YTkwNDkwNTQwMTNhMWI3N10qLwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9jbGluaWMvYXVkaW9vcC5jLmggYi9Nb2R1bGVzL2NsaW5pYy9hdWRpb29wLmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGVmNWUyCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9jbGluaWMvYXVkaW9vcC5jLmgKQEAgLTAsMCArMSw4ODkgQEAKKy8qW2NsaW5pYyBpbnB1dF0KK3ByZXNlcnZlCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK1B5RG9jX1NUUlZBUihhdWRpb29wX2dldHNhbXBsZV9fZG9jX18sCisiZ2V0c2FtcGxlKCRtb2R1bGUsIGZyYWdtZW50LCB3aWR0aCwgaW5kZXgsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gdGhlIHZhbHVlIG9mIHNhbXBsZSBpbmRleCBmcm9tIHRoZSBmcmFnbWVudC4iKTsKKworI2RlZmluZSBBVURJT09QX0dFVFNBTVBMRV9NRVRIT0RERUYgICAgXAorICAgIHsiZ2V0c2FtcGxlIiwgKFB5Q0Z1bmN0aW9uKWF1ZGlvb3BfZ2V0c2FtcGxlLCBNRVRIX1ZBUkFSR1MsIGF1ZGlvb3BfZ2V0c2FtcGxlX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCithdWRpb29wX2dldHNhbXBsZV9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIGludCB3aWR0aCwgUHlfc3NpemVfdCBpbmRleCk7CisKK3N0YXRpYyBQeU9iamVjdCAqCithdWRpb29wX2dldHNhbXBsZShQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9idWZmZXIgZnJhZ21lbnQgPSB7TlVMTCwgTlVMTH07CisgICAgaW50IHdpZHRoOworICAgIFB5X3NzaXplX3QgaW5kZXg7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgInkqaW46Z2V0c2FtcGxlIiwKKyAgICAgICAgJmZyYWdtZW50LCAmd2lkdGgsICZpbmRleCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBhdWRpb29wX2dldHNhbXBsZV9pbXBsKG1vZHVsZSwgJmZyYWdtZW50LCB3aWR0aCwgaW5kZXgpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIGZyYWdtZW50ICovCisgICAgaWYgKGZyYWdtZW50Lm9iaikKKyAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZmcmFnbWVudCk7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoYXVkaW9vcF9tYXhfX2RvY19fLAorIm1heCgkbW9kdWxlLCBmcmFnbWVudCwgd2lkdGgsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gdGhlIG1heGltdW0gb2YgdGhlIGFic29sdXRlIHZhbHVlIG9mIGFsbCBzYW1wbGVzIGluIGEgZnJhZ21lbnQuIik7CisKKyNkZWZpbmUgQVVESU9PUF9NQVhfTUVUSE9EREVGICAgIFwKKyAgICB7Im1heCIsIChQeUNGdW5jdGlvbilhdWRpb29wX21heCwgTUVUSF9WQVJBUkdTLCBhdWRpb29wX21heF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorYXVkaW9vcF9tYXhfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgpOworCitzdGF0aWMgUHlPYmplY3QgKgorYXVkaW9vcF9tYXgoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfYnVmZmVyIGZyYWdtZW50ID0ge05VTEwsIE5VTEx9OworICAgIGludCB3aWR0aDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAieSppOm1heCIsCisgICAgICAgICZmcmFnbWVudCwgJndpZHRoKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IGF1ZGlvb3BfbWF4X2ltcGwobW9kdWxlLCAmZnJhZ21lbnQsIHdpZHRoKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBmcmFnbWVudCAqLworICAgIGlmIChmcmFnbWVudC5vYmopCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmZnJhZ21lbnQpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKGF1ZGlvb3BfbWlubWF4X19kb2NfXywKKyJtaW5tYXgoJG1vZHVsZSwgZnJhZ21lbnQsIHdpZHRoLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIHZhbHVlcyBvZiBhbGwgc2FtcGxlcyBpbiB0aGUgc291bmQgZnJhZ21lbnQuIik7CisKKyNkZWZpbmUgQVVESU9PUF9NSU5NQVhfTUVUSE9EREVGICAgIFwKKyAgICB7Im1pbm1heCIsIChQeUNGdW5jdGlvbilhdWRpb29wX21pbm1heCwgTUVUSF9WQVJBUkdTLCBhdWRpb29wX21pbm1heF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorYXVkaW9vcF9taW5tYXhfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgpOworCitzdGF0aWMgUHlPYmplY3QgKgorYXVkaW9vcF9taW5tYXgoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfYnVmZmVyIGZyYWdtZW50ID0ge05VTEwsIE5VTEx9OworICAgIGludCB3aWR0aDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAieSppOm1pbm1heCIsCisgICAgICAgICZmcmFnbWVudCwgJndpZHRoKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IGF1ZGlvb3BfbWlubWF4X2ltcGwobW9kdWxlLCAmZnJhZ21lbnQsIHdpZHRoKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBmcmFnbWVudCAqLworICAgIGlmIChmcmFnbWVudC5vYmopCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmZnJhZ21lbnQpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKGF1ZGlvb3BfYXZnX19kb2NfXywKKyJhdmcoJG1vZHVsZSwgZnJhZ21lbnQsIHdpZHRoLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIHRoZSBhdmVyYWdlIG92ZXIgYWxsIHNhbXBsZXMgaW4gdGhlIGZyYWdtZW50LiIpOworCisjZGVmaW5lIEFVRElPT1BfQVZHX01FVEhPRERFRiAgICBcCisgICAgeyJhdmciLCAoUHlDRnVuY3Rpb24pYXVkaW9vcF9hdmcsIE1FVEhfVkFSQVJHUywgYXVkaW9vcF9hdmdfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK2F1ZGlvb3BfYXZnX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwgaW50IHdpZHRoKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2F1ZGlvb3BfYXZnKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X2J1ZmZlciBmcmFnbWVudCA9IHtOVUxMLCBOVUxMfTsKKyAgICBpbnQgd2lkdGg7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgInkqaTphdmciLAorICAgICAgICAmZnJhZ21lbnQsICZ3aWR0aCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBhdWRpb29wX2F2Z19pbXBsKG1vZHVsZSwgJmZyYWdtZW50LCB3aWR0aCk7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgZnJhZ21lbnQgKi8KKyAgICBpZiAoZnJhZ21lbnQub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmZyYWdtZW50KTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihhdWRpb29wX3Jtc19fZG9jX18sCisicm1zKCRtb2R1bGUsIGZyYWdtZW50LCB3aWR0aCwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiB0aGUgcm9vdC1tZWFuLXNxdWFyZSBvZiB0aGUgZnJhZ21lbnQsIGkuZS4gc3FydChzdW0oU19pXjIpL24pLiIpOworCisjZGVmaW5lIEFVRElPT1BfUk1TX01FVEhPRERFRiAgICBcCisgICAgeyJybXMiLCAoUHlDRnVuY3Rpb24pYXVkaW9vcF9ybXMsIE1FVEhfVkFSQVJHUywgYXVkaW9vcF9ybXNfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK2F1ZGlvb3Bfcm1zX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwgaW50IHdpZHRoKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2F1ZGlvb3Bfcm1zKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X2J1ZmZlciBmcmFnbWVudCA9IHtOVUxMLCBOVUxMfTsKKyAgICBpbnQgd2lkdGg7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgInkqaTpybXMiLAorICAgICAgICAmZnJhZ21lbnQsICZ3aWR0aCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBhdWRpb29wX3Jtc19pbXBsKG1vZHVsZSwgJmZyYWdtZW50LCB3aWR0aCk7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgZnJhZ21lbnQgKi8KKyAgICBpZiAoZnJhZ21lbnQub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmZyYWdtZW50KTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihhdWRpb29wX2ZpbmRmaXRfX2RvY19fLAorImZpbmRmaXQoJG1vZHVsZSwgZnJhZ21lbnQsIHJlZmVyZW5jZSwgLylcbiIKKyItLVxuIgorIlxuIgorIlRyeSB0byBtYXRjaCByZWZlcmVuY2UgYXMgd2VsbCBhcyBwb3NzaWJsZSB0byBhIHBvcnRpb24gb2YgZnJhZ21lbnQuIik7CisKKyNkZWZpbmUgQVVESU9PUF9GSU5ERklUX01FVEhPRERFRiAgICBcCisgICAgeyJmaW5kZml0IiwgKFB5Q0Z1bmN0aW9uKWF1ZGlvb3BfZmluZGZpdCwgTUVUSF9WQVJBUkdTLCBhdWRpb29wX2ZpbmRmaXRfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK2F1ZGlvb3BfZmluZGZpdF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIFB5X2J1ZmZlciAqcmVmZXJlbmNlKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2F1ZGlvb3BfZmluZGZpdChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9idWZmZXIgZnJhZ21lbnQgPSB7TlVMTCwgTlVMTH07CisgICAgUHlfYnVmZmVyIHJlZmVyZW5jZSA9IHtOVUxMLCBOVUxMfTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAieSp5KjpmaW5kZml0IiwKKyAgICAgICAgJmZyYWdtZW50LCAmcmVmZXJlbmNlKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IGF1ZGlvb3BfZmluZGZpdF9pbXBsKG1vZHVsZSwgJmZyYWdtZW50LCAmcmVmZXJlbmNlKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBmcmFnbWVudCAqLworICAgIGlmIChmcmFnbWVudC5vYmopCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmZnJhZ21lbnQpOworICAgIC8qIENsZWFudXAgZm9yIHJlZmVyZW5jZSAqLworICAgIGlmIChyZWZlcmVuY2Uub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnJlZmVyZW5jZSk7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoYXVkaW9vcF9maW5kZmFjdG9yX19kb2NfXywKKyJmaW5kZmFjdG9yKCRtb2R1bGUsIGZyYWdtZW50LCByZWZlcmVuY2UsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gYSBmYWN0b3IgRiBzdWNoIHRoYXQgcm1zKGFkZChmcmFnbWVudCwgbXVsKHJlZmVyZW5jZSwgLUYpKSkgaXMgbWluaW1hbC4iKTsKKworI2RlZmluZSBBVURJT09QX0ZJTkRGQUNUT1JfTUVUSE9EREVGICAgIFwKKyAgICB7ImZpbmRmYWN0b3IiLCAoUHlDRnVuY3Rpb24pYXVkaW9vcF9maW5kZmFjdG9yLCBNRVRIX1ZBUkFSR1MsIGF1ZGlvb3BfZmluZGZhY3Rvcl9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorYXVkaW9vcF9maW5kZmFjdG9yX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwgUHlfYnVmZmVyICpyZWZlcmVuY2UpOworCitzdGF0aWMgUHlPYmplY3QgKgorYXVkaW9vcF9maW5kZmFjdG9yKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X2J1ZmZlciBmcmFnbWVudCA9IHtOVUxMLCBOVUxMfTsKKyAgICBQeV9idWZmZXIgcmVmZXJlbmNlID0ge05VTEwsIE5VTEx9OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJ5KnkqOmZpbmRmYWN0b3IiLAorICAgICAgICAmZnJhZ21lbnQsICZyZWZlcmVuY2UpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gYXVkaW9vcF9maW5kZmFjdG9yX2ltcGwobW9kdWxlLCAmZnJhZ21lbnQsICZyZWZlcmVuY2UpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIGZyYWdtZW50ICovCisgICAgaWYgKGZyYWdtZW50Lm9iaikKKyAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZmcmFnbWVudCk7CisgICAgLyogQ2xlYW51cCBmb3IgcmVmZXJlbmNlICovCisgICAgaWYgKHJlZmVyZW5jZS5vYmopCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcmVmZXJlbmNlKTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihhdWRpb29wX2ZpbmRtYXhfX2RvY19fLAorImZpbmRtYXgoJG1vZHVsZSwgZnJhZ21lbnQsIGxlbmd0aCwgLylcbiIKKyItLVxuIgorIlxuIgorIlNlYXJjaCBmcmFnbWVudCBmb3IgYSBzbGljZSBvZiBzcGVjaWZpZWQgbnVtYmVyIG9mIHNhbXBsZXMgd2l0aCBtYXhpbXVtIGVuZXJneS4iKTsKKworI2RlZmluZSBBVURJT09QX0ZJTkRNQVhfTUVUSE9EREVGICAgIFwKKyAgICB7ImZpbmRtYXgiLCAoUHlDRnVuY3Rpb24pYXVkaW9vcF9maW5kbWF4LCBNRVRIX1ZBUkFSR1MsIGF1ZGlvb3BfZmluZG1heF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorYXVkaW9vcF9maW5kbWF4X2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwgUHlfc3NpemVfdCBsZW5ndGgpOworCitzdGF0aWMgUHlPYmplY3QgKgorYXVkaW9vcF9maW5kbWF4KFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X2J1ZmZlciBmcmFnbWVudCA9IHtOVUxMLCBOVUxMfTsKKyAgICBQeV9zc2l6ZV90IGxlbmd0aDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAieSpuOmZpbmRtYXgiLAorICAgICAgICAmZnJhZ21lbnQsICZsZW5ndGgpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gYXVkaW9vcF9maW5kbWF4X2ltcGwobW9kdWxlLCAmZnJhZ21lbnQsIGxlbmd0aCk7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgZnJhZ21lbnQgKi8KKyAgICBpZiAoZnJhZ21lbnQub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmZyYWdtZW50KTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihhdWRpb29wX2F2Z3BwX19kb2NfXywKKyJhdmdwcCgkbW9kdWxlLCBmcmFnbWVudCwgd2lkdGgsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gdGhlIGF2ZXJhZ2UgcGVhay1wZWFrIHZhbHVlIG92ZXIgYWxsIHNhbXBsZXMgaW4gdGhlIGZyYWdtZW50LiIpOworCisjZGVmaW5lIEFVRElPT1BfQVZHUFBfTUVUSE9EREVGICAgIFwKKyAgICB7ImF2Z3BwIiwgKFB5Q0Z1bmN0aW9uKWF1ZGlvb3BfYXZncHAsIE1FVEhfVkFSQVJHUywgYXVkaW9vcF9hdmdwcF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorYXVkaW9vcF9hdmdwcF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIGludCB3aWR0aCk7CisKK3N0YXRpYyBQeU9iamVjdCAqCithdWRpb29wX2F2Z3BwKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X2J1ZmZlciBmcmFnbWVudCA9IHtOVUxMLCBOVUxMfTsKKyAgICBpbnQgd2lkdGg7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgInkqaTphdmdwcCIsCisgICAgICAgICZmcmFnbWVudCwgJndpZHRoKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IGF1ZGlvb3BfYXZncHBfaW1wbChtb2R1bGUsICZmcmFnbWVudCwgd2lkdGgpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIGZyYWdtZW50ICovCisgICAgaWYgKGZyYWdtZW50Lm9iaikKKyAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZmcmFnbWVudCk7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoYXVkaW9vcF9tYXhwcF9fZG9jX18sCisibWF4cHAoJG1vZHVsZSwgZnJhZ21lbnQsIHdpZHRoLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIHRoZSBtYXhpbXVtIHBlYWstcGVhayB2YWx1ZSBpbiB0aGUgc291bmQgZnJhZ21lbnQuIik7CisKKyNkZWZpbmUgQVVESU9PUF9NQVhQUF9NRVRIT0RERUYgICAgXAorICAgIHsibWF4cHAiLCAoUHlDRnVuY3Rpb24pYXVkaW9vcF9tYXhwcCwgTUVUSF9WQVJBUkdTLCBhdWRpb29wX21heHBwX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCithdWRpb29wX21heHBwX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwgaW50IHdpZHRoKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2F1ZGlvb3BfbWF4cHAoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfYnVmZmVyIGZyYWdtZW50ID0ge05VTEwsIE5VTEx9OworICAgIGludCB3aWR0aDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAieSppOm1heHBwIiwKKyAgICAgICAgJmZyYWdtZW50LCAmd2lkdGgpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gYXVkaW9vcF9tYXhwcF9pbXBsKG1vZHVsZSwgJmZyYWdtZW50LCB3aWR0aCk7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgZnJhZ21lbnQgKi8KKyAgICBpZiAoZnJhZ21lbnQub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmZyYWdtZW50KTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihhdWRpb29wX2Nyb3NzX19kb2NfXywKKyJjcm9zcygkbW9kdWxlLCBmcmFnbWVudCwgd2lkdGgsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gdGhlIG51bWJlciBvZiB6ZXJvIGNyb3NzaW5ncyBpbiB0aGUgZnJhZ21lbnQgcGFzc2VkIGFzIGFuIGFyZ3VtZW50LiIpOworCisjZGVmaW5lIEFVRElPT1BfQ1JPU1NfTUVUSE9EREVGICAgIFwKKyAgICB7ImNyb3NzIiwgKFB5Q0Z1bmN0aW9uKWF1ZGlvb3BfY3Jvc3MsIE1FVEhfVkFSQVJHUywgYXVkaW9vcF9jcm9zc19fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorYXVkaW9vcF9jcm9zc19pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIGludCB3aWR0aCk7CisKK3N0YXRpYyBQeU9iamVjdCAqCithdWRpb29wX2Nyb3NzKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X2J1ZmZlciBmcmFnbWVudCA9IHtOVUxMLCBOVUxMfTsKKyAgICBpbnQgd2lkdGg7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgInkqaTpjcm9zcyIsCisgICAgICAgICZmcmFnbWVudCwgJndpZHRoKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IGF1ZGlvb3BfY3Jvc3NfaW1wbChtb2R1bGUsICZmcmFnbWVudCwgd2lkdGgpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIGZyYWdtZW50ICovCisgICAgaWYgKGZyYWdtZW50Lm9iaikKKyAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZmcmFnbWVudCk7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoYXVkaW9vcF9tdWxfX2RvY19fLAorIm11bCgkbW9kdWxlLCBmcmFnbWVudCwgd2lkdGgsIGZhY3RvciwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiBhIGZyYWdtZW50IHRoYXQgaGFzIGFsbCBzYW1wbGVzIGluIHRoZSBvcmlnaW5hbCBmcmFnbWVudCBtdWx0aXBsaWVkIGJ5IHRoZSBmbG9hdGluZy1wb2ludCB2YWx1ZSBmYWN0b3IuIik7CisKKyNkZWZpbmUgQVVESU9PUF9NVUxfTUVUSE9EREVGICAgIFwKKyAgICB7Im11bCIsIChQeUNGdW5jdGlvbilhdWRpb29wX211bCwgTUVUSF9WQVJBUkdTLCBhdWRpb29wX211bF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorYXVkaW9vcF9tdWxfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgsIGRvdWJsZSBmYWN0b3IpOworCitzdGF0aWMgUHlPYmplY3QgKgorYXVkaW9vcF9tdWwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfYnVmZmVyIGZyYWdtZW50ID0ge05VTEwsIE5VTEx9OworICAgIGludCB3aWR0aDsKKyAgICBkb3VibGUgZmFjdG9yOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJ5KmlkOm11bCIsCisgICAgICAgICZmcmFnbWVudCwgJndpZHRoLCAmZmFjdG9yKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IGF1ZGlvb3BfbXVsX2ltcGwobW9kdWxlLCAmZnJhZ21lbnQsIHdpZHRoLCBmYWN0b3IpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIGZyYWdtZW50ICovCisgICAgaWYgKGZyYWdtZW50Lm9iaikKKyAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZmcmFnbWVudCk7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoYXVkaW9vcF90b21vbm9fX2RvY19fLAorInRvbW9ubygkbW9kdWxlLCBmcmFnbWVudCwgd2lkdGgsIGxmYWN0b3IsIHJmYWN0b3IsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJDb252ZXJ0IGEgc3RlcmVvIGZyYWdtZW50IHRvIGEgbW9ubyBmcmFnbWVudC4iKTsKKworI2RlZmluZSBBVURJT09QX1RPTU9OT19NRVRIT0RERUYgICAgXAorICAgIHsidG9tb25vIiwgKFB5Q0Z1bmN0aW9uKWF1ZGlvb3BfdG9tb25vLCBNRVRIX1ZBUkFSR1MsIGF1ZGlvb3BfdG9tb25vX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCithdWRpb29wX3RvbW9ub19pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIGludCB3aWR0aCwgZG91YmxlIGxmYWN0b3IsIGRvdWJsZSByZmFjdG9yKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2F1ZGlvb3BfdG9tb25vKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X2J1ZmZlciBmcmFnbWVudCA9IHtOVUxMLCBOVUxMfTsKKyAgICBpbnQgd2lkdGg7CisgICAgZG91YmxlIGxmYWN0b3I7CisgICAgZG91YmxlIHJmYWN0b3I7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgInkqaWRkOnRvbW9ubyIsCisgICAgICAgICZmcmFnbWVudCwgJndpZHRoLCAmbGZhY3RvciwgJnJmYWN0b3IpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gYXVkaW9vcF90b21vbm9faW1wbChtb2R1bGUsICZmcmFnbWVudCwgd2lkdGgsIGxmYWN0b3IsIHJmYWN0b3IpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIGZyYWdtZW50ICovCisgICAgaWYgKGZyYWdtZW50Lm9iaikKKyAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZmcmFnbWVudCk7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoYXVkaW9vcF90b3N0ZXJlb19fZG9jX18sCisidG9zdGVyZW8oJG1vZHVsZSwgZnJhZ21lbnQsIHdpZHRoLCBsZmFjdG9yLCByZmFjdG9yLCAvKVxuIgorIi0tXG4iCisiXG4iCisiR2VuZXJhdGUgYSBzdGVyZW8gZnJhZ21lbnQgZnJvbSBhIG1vbm8gZnJhZ21lbnQuIik7CisKKyNkZWZpbmUgQVVESU9PUF9UT1NURVJFT19NRVRIT0RERUYgICAgXAorICAgIHsidG9zdGVyZW8iLCAoUHlDRnVuY3Rpb24pYXVkaW9vcF90b3N0ZXJlbywgTUVUSF9WQVJBUkdTLCBhdWRpb29wX3Rvc3RlcmVvX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCithdWRpb29wX3Rvc3RlcmVvX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwgaW50IHdpZHRoLCBkb3VibGUgbGZhY3RvciwgZG91YmxlIHJmYWN0b3IpOworCitzdGF0aWMgUHlPYmplY3QgKgorYXVkaW9vcF90b3N0ZXJlbyhQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9idWZmZXIgZnJhZ21lbnQgPSB7TlVMTCwgTlVMTH07CisgICAgaW50IHdpZHRoOworICAgIGRvdWJsZSBsZmFjdG9yOworICAgIGRvdWJsZSByZmFjdG9yOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJ5KmlkZDp0b3N0ZXJlbyIsCisgICAgICAgICZmcmFnbWVudCwgJndpZHRoLCAmbGZhY3RvciwgJnJmYWN0b3IpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gYXVkaW9vcF90b3N0ZXJlb19pbXBsKG1vZHVsZSwgJmZyYWdtZW50LCB3aWR0aCwgbGZhY3RvciwgcmZhY3Rvcik7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgZnJhZ21lbnQgKi8KKyAgICBpZiAoZnJhZ21lbnQub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmZyYWdtZW50KTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihhdWRpb29wX2FkZF9fZG9jX18sCisiYWRkKCRtb2R1bGUsIGZyYWdtZW50MSwgZnJhZ21lbnQyLCB3aWR0aCwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiBhIGZyYWdtZW50IHdoaWNoIGlzIHRoZSBhZGRpdGlvbiBvZiB0aGUgdHdvIHNhbXBsZXMgcGFzc2VkIGFzIHBhcmFtZXRlcnMuIik7CisKKyNkZWZpbmUgQVVESU9PUF9BRERfTUVUSE9EREVGICAgIFwKKyAgICB7ImFkZCIsIChQeUNGdW5jdGlvbilhdWRpb29wX2FkZCwgTUVUSF9WQVJBUkdTLCBhdWRpb29wX2FkZF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorYXVkaW9vcF9hZGRfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50MSwgUHlfYnVmZmVyICpmcmFnbWVudDIsIGludCB3aWR0aCk7CisKK3N0YXRpYyBQeU9iamVjdCAqCithdWRpb29wX2FkZChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9idWZmZXIgZnJhZ21lbnQxID0ge05VTEwsIE5VTEx9OworICAgIFB5X2J1ZmZlciBmcmFnbWVudDIgPSB7TlVMTCwgTlVMTH07CisgICAgaW50IHdpZHRoOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJ5KnkqaTphZGQiLAorICAgICAgICAmZnJhZ21lbnQxLCAmZnJhZ21lbnQyLCAmd2lkdGgpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gYXVkaW9vcF9hZGRfaW1wbChtb2R1bGUsICZmcmFnbWVudDEsICZmcmFnbWVudDIsIHdpZHRoKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBmcmFnbWVudDEgKi8KKyAgICBpZiAoZnJhZ21lbnQxLm9iaikKKyAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZmcmFnbWVudDEpOworICAgIC8qIENsZWFudXAgZm9yIGZyYWdtZW50MiAqLworICAgIGlmIChmcmFnbWVudDIub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmZyYWdtZW50Mik7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoYXVkaW9vcF9iaWFzX19kb2NfXywKKyJiaWFzKCRtb2R1bGUsIGZyYWdtZW50LCB3aWR0aCwgYmlhcywgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiBhIGZyYWdtZW50IHRoYXQgaXMgdGhlIG9yaWdpbmFsIGZyYWdtZW50IHdpdGggYSBiaWFzIGFkZGVkIHRvIGVhY2ggc2FtcGxlLiIpOworCisjZGVmaW5lIEFVRElPT1BfQklBU19NRVRIT0RERUYgICAgXAorICAgIHsiYmlhcyIsIChQeUNGdW5jdGlvbilhdWRpb29wX2JpYXMsIE1FVEhfVkFSQVJHUywgYXVkaW9vcF9iaWFzX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCithdWRpb29wX2JpYXNfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgsIGludCBiaWFzKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2F1ZGlvb3BfYmlhcyhQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9idWZmZXIgZnJhZ21lbnQgPSB7TlVMTCwgTlVMTH07CisgICAgaW50IHdpZHRoOworICAgIGludCBiaWFzOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJ5KmlpOmJpYXMiLAorICAgICAgICAmZnJhZ21lbnQsICZ3aWR0aCwgJmJpYXMpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gYXVkaW9vcF9iaWFzX2ltcGwobW9kdWxlLCAmZnJhZ21lbnQsIHdpZHRoLCBiaWFzKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBmcmFnbWVudCAqLworICAgIGlmIChmcmFnbWVudC5vYmopCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmZnJhZ21lbnQpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKGF1ZGlvb3BfcmV2ZXJzZV9fZG9jX18sCisicmV2ZXJzZSgkbW9kdWxlLCBmcmFnbWVudCwgd2lkdGgsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXZlcnNlIHRoZSBzYW1wbGVzIGluIGEgZnJhZ21lbnQgYW5kIHJldHVybnMgdGhlIG1vZGlmaWVkIGZyYWdtZW50LiIpOworCisjZGVmaW5lIEFVRElPT1BfUkVWRVJTRV9NRVRIT0RERUYgICAgXAorICAgIHsicmV2ZXJzZSIsIChQeUNGdW5jdGlvbilhdWRpb29wX3JldmVyc2UsIE1FVEhfVkFSQVJHUywgYXVkaW9vcF9yZXZlcnNlX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCithdWRpb29wX3JldmVyc2VfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgpOworCitzdGF0aWMgUHlPYmplY3QgKgorYXVkaW9vcF9yZXZlcnNlKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X2J1ZmZlciBmcmFnbWVudCA9IHtOVUxMLCBOVUxMfTsKKyAgICBpbnQgd2lkdGg7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgInkqaTpyZXZlcnNlIiwKKyAgICAgICAgJmZyYWdtZW50LCAmd2lkdGgpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gYXVkaW9vcF9yZXZlcnNlX2ltcGwobW9kdWxlLCAmZnJhZ21lbnQsIHdpZHRoKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBmcmFnbWVudCAqLworICAgIGlmIChmcmFnbWVudC5vYmopCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmZnJhZ21lbnQpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKGF1ZGlvb3BfYnl0ZXN3YXBfX2RvY19fLAorImJ5dGVzd2FwKCRtb2R1bGUsIGZyYWdtZW50LCB3aWR0aCwgLylcbiIKKyItLVxuIgorIlxuIgorIkNvbnZlcnQgYmlnLWVuZGlhbiBzYW1wbGVzIHRvIGxpdHRsZS1lbmRpYW4gYW5kIHZpY2UgdmVyc2EuIik7CisKKyNkZWZpbmUgQVVESU9PUF9CWVRFU1dBUF9NRVRIT0RERUYgICAgXAorICAgIHsiYnl0ZXN3YXAiLCAoUHlDRnVuY3Rpb24pYXVkaW9vcF9ieXRlc3dhcCwgTUVUSF9WQVJBUkdTLCBhdWRpb29wX2J5dGVzd2FwX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCithdWRpb29wX2J5dGVzd2FwX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwgaW50IHdpZHRoKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2F1ZGlvb3BfYnl0ZXN3YXAoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfYnVmZmVyIGZyYWdtZW50ID0ge05VTEwsIE5VTEx9OworICAgIGludCB3aWR0aDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAieSppOmJ5dGVzd2FwIiwKKyAgICAgICAgJmZyYWdtZW50LCAmd2lkdGgpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gYXVkaW9vcF9ieXRlc3dhcF9pbXBsKG1vZHVsZSwgJmZyYWdtZW50LCB3aWR0aCk7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgZnJhZ21lbnQgKi8KKyAgICBpZiAoZnJhZ21lbnQub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmZyYWdtZW50KTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihhdWRpb29wX2xpbjJsaW5fX2RvY19fLAorImxpbjJsaW4oJG1vZHVsZSwgZnJhZ21lbnQsIHdpZHRoLCBuZXd3aWR0aCwgLylcbiIKKyItLVxuIgorIlxuIgorIkNvbnZlcnQgc2FtcGxlcyBiZXR3ZWVuIDEtLCAyLSwgMy0gYW5kIDQtYnl0ZSBmb3JtYXRzLiIpOworCisjZGVmaW5lIEFVRElPT1BfTElOMkxJTl9NRVRIT0RERUYgICAgXAorICAgIHsibGluMmxpbiIsIChQeUNGdW5jdGlvbilhdWRpb29wX2xpbjJsaW4sIE1FVEhfVkFSQVJHUywgYXVkaW9vcF9saW4ybGluX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCithdWRpb29wX2xpbjJsaW5faW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgsIGludCBuZXd3aWR0aCk7CisKK3N0YXRpYyBQeU9iamVjdCAqCithdWRpb29wX2xpbjJsaW4oUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfYnVmZmVyIGZyYWdtZW50ID0ge05VTEwsIE5VTEx9OworICAgIGludCB3aWR0aDsKKyAgICBpbnQgbmV3d2lkdGg7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgInkqaWk6bGluMmxpbiIsCisgICAgICAgICZmcmFnbWVudCwgJndpZHRoLCAmbmV3d2lkdGgpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gYXVkaW9vcF9saW4ybGluX2ltcGwobW9kdWxlLCAmZnJhZ21lbnQsIHdpZHRoLCBuZXd3aWR0aCk7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgZnJhZ21lbnQgKi8KKyAgICBpZiAoZnJhZ21lbnQub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmZyYWdtZW50KTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihhdWRpb29wX3JhdGVjdl9fZG9jX18sCisicmF0ZWN2KCRtb2R1bGUsIGZyYWdtZW50LCB3aWR0aCwgbmNoYW5uZWxzLCBpbnJhdGUsIG91dHJhdGUsIHN0YXRlLFxuIgorIiAgICAgICB3ZWlnaHRBPTEsIHdlaWdodEI9MCwgLylcbiIKKyItLVxuIgorIlxuIgorIkNvbnZlcnQgdGhlIGZyYW1lIHJhdGUgb2YgdGhlIGlucHV0IGZyYWdtZW50LiIpOworCisjZGVmaW5lIEFVRElPT1BfUkFURUNWX01FVEhPRERFRiAgICBcCisgICAgeyJyYXRlY3YiLCAoUHlDRnVuY3Rpb24pYXVkaW9vcF9yYXRlY3YsIE1FVEhfVkFSQVJHUywgYXVkaW9vcF9yYXRlY3ZfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK2F1ZGlvb3BfcmF0ZWN2X2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwgaW50IHdpZHRoLCBpbnQgbmNoYW5uZWxzLCBpbnQgaW5yYXRlLCBpbnQgb3V0cmF0ZSwgUHlPYmplY3QgKnN0YXRlLCBpbnQgd2VpZ2h0QSwgaW50IHdlaWdodEIpOworCitzdGF0aWMgUHlPYmplY3QgKgorYXVkaW9vcF9yYXRlY3YoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfYnVmZmVyIGZyYWdtZW50ID0ge05VTEwsIE5VTEx9OworICAgIGludCB3aWR0aDsKKyAgICBpbnQgbmNoYW5uZWxzOworICAgIGludCBpbnJhdGU7CisgICAgaW50IG91dHJhdGU7CisgICAgUHlPYmplY3QgKnN0YXRlOworICAgIGludCB3ZWlnaHRBID0gMTsKKyAgICBpbnQgd2VpZ2h0QiA9IDA7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgInkqaWlpaU98aWk6cmF0ZWN2IiwKKyAgICAgICAgJmZyYWdtZW50LCAmd2lkdGgsICZuY2hhbm5lbHMsICZpbnJhdGUsICZvdXRyYXRlLCAmc3RhdGUsICZ3ZWlnaHRBLCAmd2VpZ2h0QikpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBhdWRpb29wX3JhdGVjdl9pbXBsKG1vZHVsZSwgJmZyYWdtZW50LCB3aWR0aCwgbmNoYW5uZWxzLCBpbnJhdGUsIG91dHJhdGUsIHN0YXRlLCB3ZWlnaHRBLCB3ZWlnaHRCKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBmcmFnbWVudCAqLworICAgIGlmIChmcmFnbWVudC5vYmopCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmZnJhZ21lbnQpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKGF1ZGlvb3BfbGluMnVsYXdfX2RvY19fLAorImxpbjJ1bGF3KCRtb2R1bGUsIGZyYWdtZW50LCB3aWR0aCwgLylcbiIKKyItLVxuIgorIlxuIgorIkNvbnZlcnQgc2FtcGxlcyBpbiB0aGUgYXVkaW8gZnJhZ21lbnQgdG8gdS1MQVcgZW5jb2RpbmcuIik7CisKKyNkZWZpbmUgQVVESU9PUF9MSU4yVUxBV19NRVRIT0RERUYgICAgXAorICAgIHsibGluMnVsYXciLCAoUHlDRnVuY3Rpb24pYXVkaW9vcF9saW4ydWxhdywgTUVUSF9WQVJBUkdTLCBhdWRpb29wX2xpbjJ1bGF3X19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCithdWRpb29wX2xpbjJ1bGF3X2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwgaW50IHdpZHRoKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2F1ZGlvb3BfbGluMnVsYXcoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfYnVmZmVyIGZyYWdtZW50ID0ge05VTEwsIE5VTEx9OworICAgIGludCB3aWR0aDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAieSppOmxpbjJ1bGF3IiwKKyAgICAgICAgJmZyYWdtZW50LCAmd2lkdGgpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gYXVkaW9vcF9saW4ydWxhd19pbXBsKG1vZHVsZSwgJmZyYWdtZW50LCB3aWR0aCk7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgZnJhZ21lbnQgKi8KKyAgICBpZiAoZnJhZ21lbnQub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmZyYWdtZW50KTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihhdWRpb29wX3VsYXcybGluX19kb2NfXywKKyJ1bGF3MmxpbigkbW9kdWxlLCBmcmFnbWVudCwgd2lkdGgsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJDb252ZXJ0IHNvdW5kIGZyYWdtZW50cyBpbiB1LUxBVyBlbmNvZGluZyB0byBsaW5lYXJseSBlbmNvZGVkIHNvdW5kIGZyYWdtZW50cy4iKTsKKworI2RlZmluZSBBVURJT09QX1VMQVcyTElOX01FVEhPRERFRiAgICBcCisgICAgeyJ1bGF3MmxpbiIsIChQeUNGdW5jdGlvbilhdWRpb29wX3VsYXcybGluLCBNRVRIX1ZBUkFSR1MsIGF1ZGlvb3BfdWxhdzJsaW5fX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK2F1ZGlvb3BfdWxhdzJsaW5faW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgpOworCitzdGF0aWMgUHlPYmplY3QgKgorYXVkaW9vcF91bGF3MmxpbihQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9idWZmZXIgZnJhZ21lbnQgPSB7TlVMTCwgTlVMTH07CisgICAgaW50IHdpZHRoOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJ5Kmk6dWxhdzJsaW4iLAorICAgICAgICAmZnJhZ21lbnQsICZ3aWR0aCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBhdWRpb29wX3VsYXcybGluX2ltcGwobW9kdWxlLCAmZnJhZ21lbnQsIHdpZHRoKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBmcmFnbWVudCAqLworICAgIGlmIChmcmFnbWVudC5vYmopCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmZnJhZ21lbnQpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKGF1ZGlvb3BfbGluMmFsYXdfX2RvY19fLAorImxpbjJhbGF3KCRtb2R1bGUsIGZyYWdtZW50LCB3aWR0aCwgLylcbiIKKyItLVxuIgorIlxuIgorIkNvbnZlcnQgc2FtcGxlcyBpbiB0aGUgYXVkaW8gZnJhZ21lbnQgdG8gYS1MQVcgZW5jb2RpbmcuIik7CisKKyNkZWZpbmUgQVVESU9PUF9MSU4yQUxBV19NRVRIT0RERUYgICAgXAorICAgIHsibGluMmFsYXciLCAoUHlDRnVuY3Rpb24pYXVkaW9vcF9saW4yYWxhdywgTUVUSF9WQVJBUkdTLCBhdWRpb29wX2xpbjJhbGF3X19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCithdWRpb29wX2xpbjJhbGF3X2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwgaW50IHdpZHRoKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2F1ZGlvb3BfbGluMmFsYXcoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfYnVmZmVyIGZyYWdtZW50ID0ge05VTEwsIE5VTEx9OworICAgIGludCB3aWR0aDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAieSppOmxpbjJhbGF3IiwKKyAgICAgICAgJmZyYWdtZW50LCAmd2lkdGgpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gYXVkaW9vcF9saW4yYWxhd19pbXBsKG1vZHVsZSwgJmZyYWdtZW50LCB3aWR0aCk7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgZnJhZ21lbnQgKi8KKyAgICBpZiAoZnJhZ21lbnQub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmZyYWdtZW50KTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihhdWRpb29wX2FsYXcybGluX19kb2NfXywKKyJhbGF3MmxpbigkbW9kdWxlLCBmcmFnbWVudCwgd2lkdGgsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJDb252ZXJ0IHNvdW5kIGZyYWdtZW50cyBpbiBhLUxBVyBlbmNvZGluZyB0byBsaW5lYXJseSBlbmNvZGVkIHNvdW5kIGZyYWdtZW50cy4iKTsKKworI2RlZmluZSBBVURJT09QX0FMQVcyTElOX01FVEhPRERFRiAgICBcCisgICAgeyJhbGF3MmxpbiIsIChQeUNGdW5jdGlvbilhdWRpb29wX2FsYXcybGluLCBNRVRIX1ZBUkFSR1MsIGF1ZGlvb3BfYWxhdzJsaW5fX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK2F1ZGlvb3BfYWxhdzJsaW5faW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgpOworCitzdGF0aWMgUHlPYmplY3QgKgorYXVkaW9vcF9hbGF3MmxpbihQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9idWZmZXIgZnJhZ21lbnQgPSB7TlVMTCwgTlVMTH07CisgICAgaW50IHdpZHRoOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJ5Kmk6YWxhdzJsaW4iLAorICAgICAgICAmZnJhZ21lbnQsICZ3aWR0aCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBhdWRpb29wX2FsYXcybGluX2ltcGwobW9kdWxlLCAmZnJhZ21lbnQsIHdpZHRoKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBmcmFnbWVudCAqLworICAgIGlmIChmcmFnbWVudC5vYmopCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmZnJhZ21lbnQpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKGF1ZGlvb3BfbGluMmFkcGNtX19kb2NfXywKKyJsaW4yYWRwY20oJG1vZHVsZSwgZnJhZ21lbnQsIHdpZHRoLCBzdGF0ZSwgLylcbiIKKyItLVxuIgorIlxuIgorIkNvbnZlcnQgc2FtcGxlcyB0byA0IGJpdCBJbnRlbC9EVkkgQURQQ00gZW5jb2RpbmcuIik7CisKKyNkZWZpbmUgQVVESU9PUF9MSU4yQURQQ01fTUVUSE9EREVGICAgIFwKKyAgICB7ImxpbjJhZHBjbSIsIChQeUNGdW5jdGlvbilhdWRpb29wX2xpbjJhZHBjbSwgTUVUSF9WQVJBUkdTLCBhdWRpb29wX2xpbjJhZHBjbV9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorYXVkaW9vcF9saW4yYWRwY21faW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgsIFB5T2JqZWN0ICpzdGF0ZSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCithdWRpb29wX2xpbjJhZHBjbShQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9idWZmZXIgZnJhZ21lbnQgPSB7TlVMTCwgTlVMTH07CisgICAgaW50IHdpZHRoOworICAgIFB5T2JqZWN0ICpzdGF0ZTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAieSppTzpsaW4yYWRwY20iLAorICAgICAgICAmZnJhZ21lbnQsICZ3aWR0aCwgJnN0YXRlKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IGF1ZGlvb3BfbGluMmFkcGNtX2ltcGwobW9kdWxlLCAmZnJhZ21lbnQsIHdpZHRoLCBzdGF0ZSk7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgZnJhZ21lbnQgKi8KKyAgICBpZiAoZnJhZ21lbnQub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmZyYWdtZW50KTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihhdWRpb29wX2FkcGNtMmxpbl9fZG9jX18sCisiYWRwY20ybGluKCRtb2R1bGUsIGZyYWdtZW50LCB3aWR0aCwgc3RhdGUsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJEZWNvZGUgYW4gSW50ZWwvRFZJIEFEUENNIGNvZGVkIGZyYWdtZW50IHRvIGEgbGluZWFyIGZyYWdtZW50LiIpOworCisjZGVmaW5lIEFVRElPT1BfQURQQ00yTElOX01FVEhPRERFRiAgICBcCisgICAgeyJhZHBjbTJsaW4iLCAoUHlDRnVuY3Rpb24pYXVkaW9vcF9hZHBjbTJsaW4sIE1FVEhfVkFSQVJHUywgYXVkaW9vcF9hZHBjbTJsaW5fX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK2F1ZGlvb3BfYWRwY20ybGluX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwgaW50IHdpZHRoLCBQeU9iamVjdCAqc3RhdGUpOworCitzdGF0aWMgUHlPYmplY3QgKgorYXVkaW9vcF9hZHBjbTJsaW4oUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfYnVmZmVyIGZyYWdtZW50ID0ge05VTEwsIE5VTEx9OworICAgIGludCB3aWR0aDsKKyAgICBQeU9iamVjdCAqc3RhdGU7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgInkqaU86YWRwY20ybGluIiwKKyAgICAgICAgJmZyYWdtZW50LCAmd2lkdGgsICZzdGF0ZSkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBhdWRpb29wX2FkcGNtMmxpbl9pbXBsKG1vZHVsZSwgJmZyYWdtZW50LCB3aWR0aCwgc3RhdGUpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIGZyYWdtZW50ICovCisgICAgaWYgKGZyYWdtZW50Lm9iaikKKyAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZmcmFnbWVudCk7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWJlODQwYmJhNWQ0MGMyY2UgaW5wdXQ9YTkwNDkwNTQwMTNhMWI3N10qLwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9jbGluaWMvYmluYXNjaWkuYy5oIGIvTW9kdWxlcy9jbGluaWMvYmluYXNjaWkuYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmNjQ2ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL2NsaW5pYy9iaW5hc2NpaS5jLmgKQEAgLTAsMCArMSw1NDYgQEAKKy8qW2NsaW5pYyBpbnB1dF0KK3ByZXNlcnZlCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK1B5RG9jX1NUUlZBUihiaW5hc2NpaV9hMmJfdXVfX2RvY19fLAorImEyYl91dSgkbW9kdWxlLCBkYXRhLCAvKVxuIgorIi0tXG4iCisiXG4iCisiRGVjb2RlIGEgbGluZSBvZiB1dWVuY29kZWQgZGF0YS4iKTsKKworI2RlZmluZSBCSU5BU0NJSV9BMkJfVVVfTUVUSE9EREVGICAgIFwKKyAgICB7ImEyYl91dSIsIChQeUNGdW5jdGlvbiliaW5hc2NpaV9hMmJfdXUsIE1FVEhfVkFSQVJHUywgYmluYXNjaWlfYTJiX3V1X19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitiaW5hc2NpaV9hMmJfdXVfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmRhdGEpOworCitzdGF0aWMgUHlPYmplY3QgKgorYmluYXNjaWlfYTJiX3V1KFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X2J1ZmZlciBkYXRhID0ge05VTEwsIE5VTEx9OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJPJjphMmJfdXUiLAorICAgICAgICBhc2NpaV9idWZmZXJfY29udmVydGVyLCAmZGF0YSkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBiaW5hc2NpaV9hMmJfdXVfaW1wbChtb2R1bGUsICZkYXRhKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBkYXRhICovCisgICAgaWYgKGRhdGEub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmRhdGEpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKGJpbmFzY2lpX2IyYV91dV9fZG9jX18sCisiYjJhX3V1KCRtb2R1bGUsIGRhdGEsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJVdWVuY29kZSBsaW5lIG9mIGRhdGEuIik7CisKKyNkZWZpbmUgQklOQVNDSUlfQjJBX1VVX01FVEhPRERFRiAgICBcCisgICAgeyJiMmFfdXUiLCAoUHlDRnVuY3Rpb24pYmluYXNjaWlfYjJhX3V1LCBNRVRIX1ZBUkFSR1MsIGJpbmFzY2lpX2IyYV91dV9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorYmluYXNjaWlfYjJhX3V1X2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpkYXRhKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2JpbmFzY2lpX2IyYV91dShQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9idWZmZXIgZGF0YSA9IHtOVUxMLCBOVUxMfTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAieSo6YjJhX3V1IiwKKyAgICAgICAgJmRhdGEpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gYmluYXNjaWlfYjJhX3V1X2ltcGwobW9kdWxlLCAmZGF0YSk7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgZGF0YSAqLworICAgIGlmIChkYXRhLm9iaikKKyAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZkYXRhKTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihiaW5hc2NpaV9hMmJfYmFzZTY0X19kb2NfXywKKyJhMmJfYmFzZTY0KCRtb2R1bGUsIGRhdGEsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJEZWNvZGUgYSBsaW5lIG9mIGJhc2U2NCBkYXRhLiIpOworCisjZGVmaW5lIEJJTkFTQ0lJX0EyQl9CQVNFNjRfTUVUSE9EREVGICAgIFwKKyAgICB7ImEyYl9iYXNlNjQiLCAoUHlDRnVuY3Rpb24pYmluYXNjaWlfYTJiX2Jhc2U2NCwgTUVUSF9WQVJBUkdTLCBiaW5hc2NpaV9hMmJfYmFzZTY0X19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitiaW5hc2NpaV9hMmJfYmFzZTY0X2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpkYXRhKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2JpbmFzY2lpX2EyYl9iYXNlNjQoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfYnVmZmVyIGRhdGEgPSB7TlVMTCwgTlVMTH07CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgIk8mOmEyYl9iYXNlNjQiLAorICAgICAgICBhc2NpaV9idWZmZXJfY29udmVydGVyLCAmZGF0YSkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBiaW5hc2NpaV9hMmJfYmFzZTY0X2ltcGwobW9kdWxlLCAmZGF0YSk7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgZGF0YSAqLworICAgIGlmIChkYXRhLm9iaikKKyAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZkYXRhKTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihiaW5hc2NpaV9iMmFfYmFzZTY0X19kb2NfXywKKyJiMmFfYmFzZTY0KCRtb2R1bGUsIGRhdGEsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJCYXNlNjQtY29kZSBsaW5lIG9mIGRhdGEuIik7CisKKyNkZWZpbmUgQklOQVNDSUlfQjJBX0JBU0U2NF9NRVRIT0RERUYgICAgXAorICAgIHsiYjJhX2Jhc2U2NCIsIChQeUNGdW5jdGlvbiliaW5hc2NpaV9iMmFfYmFzZTY0LCBNRVRIX1ZBUkFSR1MsIGJpbmFzY2lpX2IyYV9iYXNlNjRfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK2JpbmFzY2lpX2IyYV9iYXNlNjRfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmRhdGEpOworCitzdGF0aWMgUHlPYmplY3QgKgorYmluYXNjaWlfYjJhX2Jhc2U2NChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9idWZmZXIgZGF0YSA9IHtOVUxMLCBOVUxMfTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAieSo6YjJhX2Jhc2U2NCIsCisgICAgICAgICZkYXRhKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IGJpbmFzY2lpX2IyYV9iYXNlNjRfaW1wbChtb2R1bGUsICZkYXRhKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBkYXRhICovCisgICAgaWYgKGRhdGEub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmRhdGEpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKGJpbmFzY2lpX2EyYl9ocXhfX2RvY19fLAorImEyYl9ocXgoJG1vZHVsZSwgZGF0YSwgLylcbiIKKyItLVxuIgorIlxuIgorIkRlY29kZSAuaHF4IGNvZGluZy4iKTsKKworI2RlZmluZSBCSU5BU0NJSV9BMkJfSFFYX01FVEhPRERFRiAgICBcCisgICAgeyJhMmJfaHF4IiwgKFB5Q0Z1bmN0aW9uKWJpbmFzY2lpX2EyYl9ocXgsIE1FVEhfVkFSQVJHUywgYmluYXNjaWlfYTJiX2hxeF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorYmluYXNjaWlfYTJiX2hxeF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZGF0YSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitiaW5hc2NpaV9hMmJfaHF4KFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X2J1ZmZlciBkYXRhID0ge05VTEwsIE5VTEx9OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJPJjphMmJfaHF4IiwKKyAgICAgICAgYXNjaWlfYnVmZmVyX2NvbnZlcnRlciwgJmRhdGEpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gYmluYXNjaWlfYTJiX2hxeF9pbXBsKG1vZHVsZSwgJmRhdGEpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIGRhdGEgKi8KKyAgICBpZiAoZGF0YS5vYmopCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmZGF0YSk7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoYmluYXNjaWlfcmxlY29kZV9ocXhfX2RvY19fLAorInJsZWNvZGVfaHF4KCRtb2R1bGUsIGRhdGEsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJCaW5oZXggUkxFLWNvZGUgYmluYXJ5IGRhdGEuIik7CisKKyNkZWZpbmUgQklOQVNDSUlfUkxFQ09ERV9IUVhfTUVUSE9EREVGICAgIFwKKyAgICB7InJsZWNvZGVfaHF4IiwgKFB5Q0Z1bmN0aW9uKWJpbmFzY2lpX3JsZWNvZGVfaHF4LCBNRVRIX1ZBUkFSR1MsIGJpbmFzY2lpX3JsZWNvZGVfaHF4X19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitiaW5hc2NpaV9ybGVjb2RlX2hxeF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZGF0YSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitiaW5hc2NpaV9ybGVjb2RlX2hxeChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9idWZmZXIgZGF0YSA9IHtOVUxMLCBOVUxMfTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAieSo6cmxlY29kZV9ocXgiLAorICAgICAgICAmZGF0YSkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBiaW5hc2NpaV9ybGVjb2RlX2hxeF9pbXBsKG1vZHVsZSwgJmRhdGEpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIGRhdGEgKi8KKyAgICBpZiAoZGF0YS5vYmopCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmZGF0YSk7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoYmluYXNjaWlfYjJhX2hxeF9fZG9jX18sCisiYjJhX2hxeCgkbW9kdWxlLCBkYXRhLCAvKVxuIgorIi0tXG4iCisiXG4iCisiRW5jb2RlIC5ocXggZGF0YS4iKTsKKworI2RlZmluZSBCSU5BU0NJSV9CMkFfSFFYX01FVEhPRERFRiAgICBcCisgICAgeyJiMmFfaHF4IiwgKFB5Q0Z1bmN0aW9uKWJpbmFzY2lpX2IyYV9ocXgsIE1FVEhfVkFSQVJHUywgYmluYXNjaWlfYjJhX2hxeF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorYmluYXNjaWlfYjJhX2hxeF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZGF0YSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitiaW5hc2NpaV9iMmFfaHF4KFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X2J1ZmZlciBkYXRhID0ge05VTEwsIE5VTEx9OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJ5KjpiMmFfaHF4IiwKKyAgICAgICAgJmRhdGEpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gYmluYXNjaWlfYjJhX2hxeF9pbXBsKG1vZHVsZSwgJmRhdGEpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIGRhdGEgKi8KKyAgICBpZiAoZGF0YS5vYmopCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmZGF0YSk7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoYmluYXNjaWlfcmxlZGVjb2RlX2hxeF9fZG9jX18sCisicmxlZGVjb2RlX2hxeCgkbW9kdWxlLCBkYXRhLCAvKVxuIgorIi0tXG4iCisiXG4iCisiRGVjb2RlIGhleGJpbiBSTEUtY29kZWQgc3RyaW5nLiIpOworCisjZGVmaW5lIEJJTkFTQ0lJX1JMRURFQ09ERV9IUVhfTUVUSE9EREVGICAgIFwKKyAgICB7InJsZWRlY29kZV9ocXgiLCAoUHlDRnVuY3Rpb24pYmluYXNjaWlfcmxlZGVjb2RlX2hxeCwgTUVUSF9WQVJBUkdTLCBiaW5hc2NpaV9ybGVkZWNvZGVfaHF4X19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitiaW5hc2NpaV9ybGVkZWNvZGVfaHF4X2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpkYXRhKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2JpbmFzY2lpX3JsZWRlY29kZV9ocXgoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfYnVmZmVyIGRhdGEgPSB7TlVMTCwgTlVMTH07CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgInkqOnJsZWRlY29kZV9ocXgiLAorICAgICAgICAmZGF0YSkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBiaW5hc2NpaV9ybGVkZWNvZGVfaHF4X2ltcGwobW9kdWxlLCAmZGF0YSk7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgZGF0YSAqLworICAgIGlmIChkYXRhLm9iaikKKyAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZkYXRhKTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihiaW5hc2NpaV9jcmNfaHF4X19kb2NfXywKKyJjcmNfaHF4KCRtb2R1bGUsIGRhdGEsIGNyYywgLylcbiIKKyItLVxuIgorIlxuIgorIkNvbXB1dGUgaHF4IENSQyBpbmNyZW1lbnRhbGx5LiIpOworCisjZGVmaW5lIEJJTkFTQ0lJX0NSQ19IUVhfTUVUSE9EREVGICAgIFwKKyAgICB7ImNyY19ocXgiLCAoUHlDRnVuY3Rpb24pYmluYXNjaWlfY3JjX2hxeCwgTUVUSF9WQVJBUkdTLCBiaW5hc2NpaV9jcmNfaHF4X19kb2NfX30sCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK2JpbmFzY2lpX2NyY19ocXhfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmRhdGEsIHVuc2lnbmVkIGludCBjcmMpOworCitzdGF0aWMgUHlPYmplY3QgKgorYmluYXNjaWlfY3JjX2hxeChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9idWZmZXIgZGF0YSA9IHtOVUxMLCBOVUxMfTsKKyAgICB1bnNpZ25lZCBpbnQgY3JjOworICAgIHVuc2lnbmVkIGludCBfcmV0dXJuX3ZhbHVlOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJ5Kkk6Y3JjX2hxeCIsCisgICAgICAgICZkYXRhLCAmY3JjKSkKKyAgICAgICAgZ290byBleGl0OworICAgIF9yZXR1cm5fdmFsdWUgPSBiaW5hc2NpaV9jcmNfaHF4X2ltcGwobW9kdWxlLCAmZGF0YSwgY3JjKTsKKyAgICBpZiAoKF9yZXR1cm5fdmFsdWUgPT0gLTEpICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZygodW5zaWduZWQgbG9uZylfcmV0dXJuX3ZhbHVlKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBkYXRhICovCisgICAgaWYgKGRhdGEub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmRhdGEpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKGJpbmFzY2lpX2NyYzMyX19kb2NfXywKKyJjcmMzMigkbW9kdWxlLCBkYXRhLCBjcmM9MCwgLylcbiIKKyItLVxuIgorIlxuIgorIkNvbXB1dGUgQ1JDLTMyIGluY3JlbWVudGFsbHkuIik7CisKKyNkZWZpbmUgQklOQVNDSUlfQ1JDMzJfTUVUSE9EREVGICAgIFwKKyAgICB7ImNyYzMyIiwgKFB5Q0Z1bmN0aW9uKWJpbmFzY2lpX2NyYzMyLCBNRVRIX1ZBUkFSR1MsIGJpbmFzY2lpX2NyYzMyX19kb2NfX30sCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK2JpbmFzY2lpX2NyYzMyX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpkYXRhLCB1bnNpZ25lZCBpbnQgY3JjKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2JpbmFzY2lpX2NyYzMyKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X2J1ZmZlciBkYXRhID0ge05VTEwsIE5VTEx9OworICAgIHVuc2lnbmVkIGludCBjcmMgPSAwOworICAgIHVuc2lnbmVkIGludCBfcmV0dXJuX3ZhbHVlOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJ5KnxJOmNyYzMyIiwKKyAgICAgICAgJmRhdGEsICZjcmMpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgX3JldHVybl92YWx1ZSA9IGJpbmFzY2lpX2NyYzMyX2ltcGwobW9kdWxlLCAmZGF0YSwgY3JjKTsKKyAgICBpZiAoKF9yZXR1cm5fdmFsdWUgPT0gLTEpICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZygodW5zaWduZWQgbG9uZylfcmV0dXJuX3ZhbHVlKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBkYXRhICovCisgICAgaWYgKGRhdGEub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmRhdGEpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKGJpbmFzY2lpX2IyYV9oZXhfX2RvY19fLAorImIyYV9oZXgoJG1vZHVsZSwgZGF0YSwgLylcbiIKKyItLVxuIgorIlxuIgorIkhleGFkZWNpbWFsIHJlcHJlc2VudGF0aW9uIG9mIGJpbmFyeSBkYXRhLlxuIgorIlxuIgorIlRoZSByZXR1cm4gdmFsdWUgaXMgYSBieXRlcyBvYmplY3QuICBUaGlzIGZ1bmN0aW9uIGlzIGFsc29cbiIKKyJhdmFpbGFibGUgYXMgXCJoZXhsaWZ5KClcIi4iKTsKKworI2RlZmluZSBCSU5BU0NJSV9CMkFfSEVYX01FVEhPRERFRiAgICBcCisgICAgeyJiMmFfaGV4IiwgKFB5Q0Z1bmN0aW9uKWJpbmFzY2lpX2IyYV9oZXgsIE1FVEhfVkFSQVJHUywgYmluYXNjaWlfYjJhX2hleF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorYmluYXNjaWlfYjJhX2hleF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZGF0YSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitiaW5hc2NpaV9iMmFfaGV4KFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X2J1ZmZlciBkYXRhID0ge05VTEwsIE5VTEx9OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJ5KjpiMmFfaGV4IiwKKyAgICAgICAgJmRhdGEpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gYmluYXNjaWlfYjJhX2hleF9pbXBsKG1vZHVsZSwgJmRhdGEpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIGRhdGEgKi8KKyAgICBpZiAoZGF0YS5vYmopCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmZGF0YSk7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoYmluYXNjaWlfaGV4bGlmeV9fZG9jX18sCisiaGV4bGlmeSgkbW9kdWxlLCBkYXRhLCAvKVxuIgorIi0tXG4iCisiXG4iCisiSGV4YWRlY2ltYWwgcmVwcmVzZW50YXRpb24gb2YgYmluYXJ5IGRhdGEuXG4iCisiXG4iCisiVGhlIHJldHVybiB2YWx1ZSBpcyBhIGJ5dGVzIG9iamVjdC4iKTsKKworI2RlZmluZSBCSU5BU0NJSV9IRVhMSUZZX01FVEhPRERFRiAgICBcCisgICAgeyJoZXhsaWZ5IiwgKFB5Q0Z1bmN0aW9uKWJpbmFzY2lpX2hleGxpZnksIE1FVEhfVkFSQVJHUywgYmluYXNjaWlfaGV4bGlmeV9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorYmluYXNjaWlfaGV4bGlmeV9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZGF0YSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitiaW5hc2NpaV9oZXhsaWZ5KFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X2J1ZmZlciBkYXRhID0ge05VTEwsIE5VTEx9OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJ5KjpoZXhsaWZ5IiwKKyAgICAgICAgJmRhdGEpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gYmluYXNjaWlfaGV4bGlmeV9pbXBsKG1vZHVsZSwgJmRhdGEpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIGRhdGEgKi8KKyAgICBpZiAoZGF0YS5vYmopCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmZGF0YSk7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoYmluYXNjaWlfYTJiX2hleF9fZG9jX18sCisiYTJiX2hleCgkbW9kdWxlLCBoZXhzdHIsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJCaW5hcnkgZGF0YSBvZiBoZXhhZGVjaW1hbCByZXByZXNlbnRhdGlvbi5cbiIKKyJcbiIKKyJoZXhzdHIgbXVzdCBjb250YWluIGFuIGV2ZW4gbnVtYmVyIG9mIGhleCBkaWdpdHMgKHVwcGVyIG9yIGxvd2VyIGNhc2UpLlxuIgorIlRoaXMgZnVuY3Rpb24gaXMgYWxzbyBhdmFpbGFibGUgYXMgXCJ1bmhleGxpZnkoKVwiLiIpOworCisjZGVmaW5lIEJJTkFTQ0lJX0EyQl9IRVhfTUVUSE9EREVGICAgIFwKKyAgICB7ImEyYl9oZXgiLCAoUHlDRnVuY3Rpb24pYmluYXNjaWlfYTJiX2hleCwgTUVUSF9WQVJBUkdTLCBiaW5hc2NpaV9hMmJfaGV4X19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitiaW5hc2NpaV9hMmJfaGV4X2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpoZXhzdHIpOworCitzdGF0aWMgUHlPYmplY3QgKgorYmluYXNjaWlfYTJiX2hleChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9idWZmZXIgaGV4c3RyID0ge05VTEwsIE5VTEx9OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJPJjphMmJfaGV4IiwKKyAgICAgICAgYXNjaWlfYnVmZmVyX2NvbnZlcnRlciwgJmhleHN0cikpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBiaW5hc2NpaV9hMmJfaGV4X2ltcGwobW9kdWxlLCAmaGV4c3RyKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBoZXhzdHIgKi8KKyAgICBpZiAoaGV4c3RyLm9iaikKKyAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZoZXhzdHIpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKGJpbmFzY2lpX3VuaGV4bGlmeV9fZG9jX18sCisidW5oZXhsaWZ5KCRtb2R1bGUsIGhleHN0ciwgLylcbiIKKyItLVxuIgorIlxuIgorIkJpbmFyeSBkYXRhIG9mIGhleGFkZWNpbWFsIHJlcHJlc2VudGF0aW9uLlxuIgorIlxuIgorImhleHN0ciBtdXN0IGNvbnRhaW4gYW4gZXZlbiBudW1iZXIgb2YgaGV4IGRpZ2l0cyAodXBwZXIgb3IgbG93ZXIgY2FzZSkuIik7CisKKyNkZWZpbmUgQklOQVNDSUlfVU5IRVhMSUZZX01FVEhPRERFRiAgICBcCisgICAgeyJ1bmhleGxpZnkiLCAoUHlDRnVuY3Rpb24pYmluYXNjaWlfdW5oZXhsaWZ5LCBNRVRIX1ZBUkFSR1MsIGJpbmFzY2lpX3VuaGV4bGlmeV9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorYmluYXNjaWlfdW5oZXhsaWZ5X2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpoZXhzdHIpOworCitzdGF0aWMgUHlPYmplY3QgKgorYmluYXNjaWlfdW5oZXhsaWZ5KFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X2J1ZmZlciBoZXhzdHIgPSB7TlVMTCwgTlVMTH07CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgIk8mOnVuaGV4bGlmeSIsCisgICAgICAgIGFzY2lpX2J1ZmZlcl9jb252ZXJ0ZXIsICZoZXhzdHIpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gYmluYXNjaWlfdW5oZXhsaWZ5X2ltcGwobW9kdWxlLCAmaGV4c3RyKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBoZXhzdHIgKi8KKyAgICBpZiAoaGV4c3RyLm9iaikKKyAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZoZXhzdHIpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKGJpbmFzY2lpX2EyYl9xcF9fZG9jX18sCisiYTJiX3FwKCRtb2R1bGUsIC8sIGRhdGEsIGhlYWRlcj1GYWxzZSlcbiIKKyItLVxuIgorIlxuIgorIkRlY29kZSBhIHN0cmluZyBvZiBxcC1lbmNvZGVkIGRhdGEuIik7CisKKyNkZWZpbmUgQklOQVNDSUlfQTJCX1FQX01FVEhPRERFRiAgICBcCisgICAgeyJhMmJfcXAiLCAoUHlDRnVuY3Rpb24pYmluYXNjaWlfYTJiX3FwLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywgYmluYXNjaWlfYTJiX3FwX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitiaW5hc2NpaV9hMmJfcXBfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmRhdGEsIGludCBoZWFkZXIpOworCitzdGF0aWMgUHlPYmplY3QgKgorYmluYXNjaWlfYTJiX3FwKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIHN0YXRpYyBjaGFyICpfa2V5d29yZHNbXSA9IHsiZGF0YSIsICJoZWFkZXIiLCBOVUxMfTsKKyAgICBQeV9idWZmZXIgZGF0YSA9IHtOVUxMLCBOVUxMfTsKKyAgICBpbnQgaGVhZGVyID0gMDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywKKyAgICAgICAgIk8mfGk6YTJiX3FwIiwgX2tleXdvcmRzLAorICAgICAgICBhc2NpaV9idWZmZXJfY29udmVydGVyLCAmZGF0YSwgJmhlYWRlcikpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBiaW5hc2NpaV9hMmJfcXBfaW1wbChtb2R1bGUsICZkYXRhLCBoZWFkZXIpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIGRhdGEgKi8KKyAgICBpZiAoZGF0YS5vYmopCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmZGF0YSk7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoYmluYXNjaWlfYjJhX3FwX19kb2NfXywKKyJiMmFfcXAoJG1vZHVsZSwgLywgZGF0YSwgcXVvdGV0YWJzPUZhbHNlLCBpc3RleHQ9VHJ1ZSwgaGVhZGVyPUZhbHNlKVxuIgorIi0tXG4iCisiXG4iCisiRW5jb2RlIGEgc3RyaW5nIHVzaW5nIHF1b3RlZC1wcmludGFibGUgZW5jb2RpbmcuXG4iCisiXG4iCisiT24gZW5jb2RpbmcsIHdoZW4gaXN0ZXh0IGlzIHNldCwgbmV3bGluZXMgYXJlIG5vdCBlbmNvZGVkLCBhbmQgd2hpdGVcbiIKKyJzcGFjZSBhdCBlbmQgb2YgbGluZXMgaXMuICBXaGVuIGlzdGV4dCBpcyBub3Qgc2V0LCBcXHIgYW5kIFxcbiAoQ1IvTEYpXG4iCisiYXJlIGJvdGggZW5jb2RlZC4gIFdoZW4gcXVvdGV0YWJzIGlzIHNldCwgc3BhY2UgYW5kIHRhYnMgYXJlIGVuY29kZWQuIik7CisKKyNkZWZpbmUgQklOQVNDSUlfQjJBX1FQX01FVEhPRERFRiAgICBcCisgICAgeyJiMmFfcXAiLCAoUHlDRnVuY3Rpb24pYmluYXNjaWlfYjJhX3FwLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywgYmluYXNjaWlfYjJhX3FwX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitiaW5hc2NpaV9iMmFfcXBfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmRhdGEsIGludCBxdW90ZXRhYnMsIGludCBpc3RleHQsIGludCBoZWFkZXIpOworCitzdGF0aWMgUHlPYmplY3QgKgorYmluYXNjaWlfYjJhX3FwKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIHN0YXRpYyBjaGFyICpfa2V5d29yZHNbXSA9IHsiZGF0YSIsICJxdW90ZXRhYnMiLCAiaXN0ZXh0IiwgImhlYWRlciIsIE5VTEx9OworICAgIFB5X2J1ZmZlciBkYXRhID0ge05VTEwsIE5VTEx9OworICAgIGludCBxdW90ZXRhYnMgPSAwOworICAgIGludCBpc3RleHQgPSAxOworICAgIGludCBoZWFkZXIgPSAwOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLAorICAgICAgICAieSp8aWlpOmIyYV9xcCIsIF9rZXl3b3JkcywKKyAgICAgICAgJmRhdGEsICZxdW90ZXRhYnMsICZpc3RleHQsICZoZWFkZXIpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gYmluYXNjaWlfYjJhX3FwX2ltcGwobW9kdWxlLCAmZGF0YSwgcXVvdGV0YWJzLCBpc3RleHQsIGhlYWRlcik7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgZGF0YSAqLworICAgIGlmIChkYXRhLm9iaikKKyAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZkYXRhKTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MjI3NjFiMzZmNGY5ZTViYiBpbnB1dD1hOTA0OTA1NDAxM2ExYjc3XSovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL2NsaW5pYy96bGlibW9kdWxlLmMuaCBiL01vZHVsZXMvY2xpbmljL3psaWJtb2R1bGUuYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1NGE4MDUKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL2NsaW5pYy96bGlibW9kdWxlLmMuaApAQCAtMCwwICsxLDQ1MyBAQAorLypbY2xpbmljIGlucHV0XQorcHJlc2VydmUKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworUHlEb2NfU1RSVkFSKHpsaWJfY29tcHJlc3NfX2RvY19fLAorImNvbXByZXNzKCRtb2R1bGUsIGJ5dGVzLCBsZXZlbD1aX0RFRkFVTFRfQ09NUFJFU1NJT04sIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm5zIGEgYnl0ZXMgb2JqZWN0IGNvbnRhaW5pbmcgY29tcHJlc3NlZCBkYXRhLlxuIgorIlxuIgorIiAgYnl0ZXNcbiIKKyIgICAgQmluYXJ5IGRhdGEgdG8gYmUgY29tcHJlc3NlZC5cbiIKKyIgIGxldmVsXG4iCisiICAgIENvbXByZXNzaW9uIGxldmVsLCBpbiAwLTkuIik7CisKKyNkZWZpbmUgWkxJQl9DT01QUkVTU19NRVRIT0RERUYgICAgXAorICAgIHsiY29tcHJlc3MiLCAoUHlDRnVuY3Rpb24pemxpYl9jb21wcmVzcywgTUVUSF9WQVJBUkdTLCB6bGliX2NvbXByZXNzX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCit6bGliX2NvbXByZXNzX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpieXRlcywgaW50IGxldmVsKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3psaWJfY29tcHJlc3MoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfYnVmZmVyIGJ5dGVzID0ge05VTEwsIE5VTEx9OworICAgIGludCBsZXZlbCA9IFpfREVGQVVMVF9DT01QUkVTU0lPTjsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAieSp8aTpjb21wcmVzcyIsCisgICAgICAgICZieXRlcywgJmxldmVsKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IHpsaWJfY29tcHJlc3NfaW1wbChtb2R1bGUsICZieXRlcywgbGV2ZWwpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIGJ5dGVzICovCisgICAgaWYgKGJ5dGVzLm9iaikKKyAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZieXRlcyk7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoemxpYl9kZWNvbXByZXNzX19kb2NfXywKKyJkZWNvbXByZXNzKCRtb2R1bGUsIGRhdGEsIHdiaXRzPU1BWF9XQklUUywgYnVmc2l6ZT1ERUZfQlVGX1NJWkUsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm5zIGEgYnl0ZXMgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHVuY29tcHJlc3NlZCBkYXRhLlxuIgorIlxuIgorIiAgZGF0YVxuIgorIiAgICBDb21wcmVzc2VkIGRhdGEuXG4iCisiICB3Yml0c1xuIgorIiAgICBUaGUgd2luZG93IGJ1ZmZlciBzaXplLlxuIgorIiAgYnVmc2l6ZVxuIgorIiAgICBUaGUgaW5pdGlhbCBvdXRwdXQgYnVmZmVyIHNpemUuIik7CisKKyNkZWZpbmUgWkxJQl9ERUNPTVBSRVNTX01FVEhPRERFRiAgICBcCisgICAgeyJkZWNvbXByZXNzIiwgKFB5Q0Z1bmN0aW9uKXpsaWJfZGVjb21wcmVzcywgTUVUSF9WQVJBUkdTLCB6bGliX2RlY29tcHJlc3NfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK3psaWJfZGVjb21wcmVzc19pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZGF0YSwgaW50IHdiaXRzLCB1bnNpZ25lZCBpbnQgYnVmc2l6ZSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCit6bGliX2RlY29tcHJlc3MoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfYnVmZmVyIGRhdGEgPSB7TlVMTCwgTlVMTH07CisgICAgaW50IHdiaXRzID0gTUFYX1dCSVRTOworICAgIHVuc2lnbmVkIGludCBidWZzaXplID0gREVGX0JVRl9TSVpFOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJ5KnxpTyY6ZGVjb21wcmVzcyIsCisgICAgICAgICZkYXRhLCAmd2JpdHMsIHVpbnRfY29udmVydGVyLCAmYnVmc2l6ZSkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSB6bGliX2RlY29tcHJlc3NfaW1wbChtb2R1bGUsICZkYXRhLCB3Yml0cywgYnVmc2l6ZSk7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgZGF0YSAqLworICAgIGlmIChkYXRhLm9iaikKKyAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZkYXRhKTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUih6bGliX2NvbXByZXNzb2JqX19kb2NfXywKKyJjb21wcmVzc29iaigkbW9kdWxlLCAvLCBsZXZlbD1aX0RFRkFVTFRfQ09NUFJFU1NJT04sIG1ldGhvZD1ERUZMQVRFRCxcbiIKKyIgICAgICAgICAgICB3Yml0cz1NQVhfV0JJVFMsIG1lbUxldmVsPURFRl9NRU1fTEVWRUwsXG4iCisiICAgICAgICAgICAgc3RyYXRlZ3k9Wl9ERUZBVUxUX1NUUkFURUdZLCB6ZGljdD1Ob25lKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIGEgY29tcHJlc3NvciBvYmplY3QuXG4iCisiXG4iCisiICBsZXZlbFxuIgorIiAgICBUaGUgY29tcHJlc3Npb24gbGV2ZWwgKGFuIGludGVnZXIgaW4gdGhlIHJhbmdlIDAtOTsgZGVmYXVsdCBpcyA2KS5cbiIKKyIgICAgSGlnaGVyIGNvbXByZXNzaW9uIGxldmVscyBhcmUgc2xvd2VyLCBidXQgcHJvZHVjZSBzbWFsbGVyIHJlc3VsdHMuXG4iCisiICBtZXRob2RcbiIKKyIgICAgVGhlIGNvbXByZXNzaW9uIGFsZ29yaXRobS4gIElmIGdpdmVuLCB0aGlzIG11c3QgYmUgREVGTEFURUQuXG4iCisiICB3Yml0c1xuIgorIiAgICBUaGUgYmFzZSB0d28gbG9nYXJpdGhtIG9mIHRoZSB3aW5kb3cgc2l6ZSAocmFuZ2U6IDguLjE1KS5cbiIKKyIgIG1lbUxldmVsXG4iCisiICAgIENvbnRyb2xzIHRoZSBhbW91bnQgb2YgbWVtb3J5IHVzZWQgZm9yIGludGVybmFsIGNvbXByZXNzaW9uIHN0YXRlLlxuIgorIiAgICBWYWxpZCB2YWx1ZXMgcmFuZ2UgZnJvbSAxIHRvIDkuICBIaWdoZXIgdmFsdWVzIHJlc3VsdCBpbiBoaWdoZXIgbWVtb3J5XG4iCisiICAgIHVzYWdlLCBmYXN0ZXIgY29tcHJlc3Npb24sIGFuZCBzbWFsbGVyIG91dHB1dC5cbiIKKyIgIHN0cmF0ZWd5XG4iCisiICAgIFVzZWQgdG8gdHVuZSB0aGUgY29tcHJlc3Npb24gYWxnb3JpdGhtLiAgUG9zc2libGUgdmFsdWVzIGFyZVxuIgorIiAgICBaX0RFRkFVTFRfU1RSQVRFR1ksIFpfRklMVEVSRUQsIGFuZCBaX0hVRkZNQU5fT05MWS5cbiIKKyIgIHpkaWN0XG4iCisiICAgIFRoZSBwcmVkZWZpbmVkIGNvbXByZXNzaW9uIGRpY3Rpb25hcnkgLSBhIHNlcXVlbmNlIG9mIGJ5dGVzXG4iCisiICAgIGNvbnRhaW5pbmcgc3Vic2VxdWVuY2VzIHRoYXQgYXJlIGxpa2VseSB0byBvY2N1ciBpbiB0aGUgaW5wdXQgZGF0YS4iKTsKKworI2RlZmluZSBaTElCX0NPTVBSRVNTT0JKX01FVEhPRERFRiAgICBcCisgICAgeyJjb21wcmVzc29iaiIsIChQeUNGdW5jdGlvbil6bGliX2NvbXByZXNzb2JqLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywgemxpYl9jb21wcmVzc29ial9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgoremxpYl9jb21wcmVzc29ial9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIGludCBsZXZlbCwgaW50IG1ldGhvZCwgaW50IHdiaXRzLCBpbnQgbWVtTGV2ZWwsIGludCBzdHJhdGVneSwgUHlfYnVmZmVyICp6ZGljdCk7CisKK3N0YXRpYyBQeU9iamVjdCAqCit6bGliX2NvbXByZXNzb2JqKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIHN0YXRpYyBjaGFyICpfa2V5d29yZHNbXSA9IHsibGV2ZWwiLCAibWV0aG9kIiwgIndiaXRzIiwgIm1lbUxldmVsIiwgInN0cmF0ZWd5IiwgInpkaWN0IiwgTlVMTH07CisgICAgaW50IGxldmVsID0gWl9ERUZBVUxUX0NPTVBSRVNTSU9OOworICAgIGludCBtZXRob2QgPSBERUZMQVRFRDsKKyAgICBpbnQgd2JpdHMgPSBNQVhfV0JJVFM7CisgICAgaW50IG1lbUxldmVsID0gREVGX01FTV9MRVZFTDsKKyAgICBpbnQgc3RyYXRlZ3kgPSBaX0RFRkFVTFRfU1RSQVRFR1k7CisgICAgUHlfYnVmZmVyIHpkaWN0ID0ge05VTEwsIE5VTEx9OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLAorICAgICAgICAifGlpaWlpeSo6Y29tcHJlc3NvYmoiLCBfa2V5d29yZHMsCisgICAgICAgICZsZXZlbCwgJm1ldGhvZCwgJndiaXRzLCAmbWVtTGV2ZWwsICZzdHJhdGVneSwgJnpkaWN0KSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IHpsaWJfY29tcHJlc3NvYmpfaW1wbChtb2R1bGUsIGxldmVsLCBtZXRob2QsIHdiaXRzLCBtZW1MZXZlbCwgc3RyYXRlZ3ksICZ6ZGljdCk7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgemRpY3QgKi8KKyAgICBpZiAoemRpY3Qub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnpkaWN0KTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUih6bGliX2RlY29tcHJlc3NvYmpfX2RvY19fLAorImRlY29tcHJlc3NvYmooJG1vZHVsZSwgLywgd2JpdHM9TUFYX1dCSVRTLCB6ZGljdD1iXCdcJylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiBhIGRlY29tcHJlc3NvciBvYmplY3QuXG4iCisiXG4iCisiICB3Yml0c1xuIgorIiAgICBUaGUgd2luZG93IGJ1ZmZlciBzaXplLlxuIgorIiAgemRpY3RcbiIKKyIgICAgVGhlIHByZWRlZmluZWQgY29tcHJlc3Npb24gZGljdGlvbmFyeS4gIFRoaXMgbXVzdCBiZSB0aGUgc2FtZVxuIgorIiAgICBkaWN0aW9uYXJ5IGFzIHVzZWQgYnkgdGhlIGNvbXByZXNzb3IgdGhhdCBwcm9kdWNlZCB0aGUgaW5wdXQgZGF0YS4iKTsKKworI2RlZmluZSBaTElCX0RFQ09NUFJFU1NPQkpfTUVUSE9EREVGICAgIFwKKyAgICB7ImRlY29tcHJlc3NvYmoiLCAoUHlDRnVuY3Rpb24pemxpYl9kZWNvbXByZXNzb2JqLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywgemxpYl9kZWNvbXByZXNzb2JqX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCit6bGliX2RlY29tcHJlc3NvYmpfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBpbnQgd2JpdHMsIFB5T2JqZWN0ICp6ZGljdCk7CisKK3N0YXRpYyBQeU9iamVjdCAqCit6bGliX2RlY29tcHJlc3NvYmooUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgc3RhdGljIGNoYXIgKl9rZXl3b3Jkc1tdID0geyJ3Yml0cyIsICJ6ZGljdCIsIE5VTEx9OworICAgIGludCB3Yml0cyA9IE1BWF9XQklUUzsKKyAgICBQeU9iamVjdCAqemRpY3QgPSBOVUxMOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLAorICAgICAgICAifGlPOmRlY29tcHJlc3NvYmoiLCBfa2V5d29yZHMsCisgICAgICAgICZ3Yml0cywgJnpkaWN0KSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IHpsaWJfZGVjb21wcmVzc29ial9pbXBsKG1vZHVsZSwgd2JpdHMsIHpkaWN0KTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoemxpYl9Db21wcmVzc19jb21wcmVzc19fZG9jX18sCisiY29tcHJlc3MoJHNlbGYsIGRhdGEsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm5zIGEgYnl0ZXMgb2JqZWN0IGNvbnRhaW5pbmcgY29tcHJlc3NlZCBkYXRhLlxuIgorIlxuIgorIiAgZGF0YVxuIgorIiAgICBCaW5hcnkgZGF0YSB0byBiZSBjb21wcmVzc2VkLlxuIgorIlxuIgorIkFmdGVyIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiwgc29tZSBvZiB0aGUgaW5wdXQgZGF0YSBtYXkgc3RpbGxcbiIKKyJiZSBzdG9yZWQgaW4gaW50ZXJuYWwgYnVmZmVycyBmb3IgbGF0ZXIgcHJvY2Vzc2luZy5cbiIKKyJDYWxsIHRoZSBmbHVzaCgpIG1ldGhvZCB0byBjbGVhciB0aGVzZSBidWZmZXJzLiIpOworCisjZGVmaW5lIFpMSUJfQ09NUFJFU1NfQ09NUFJFU1NfTUVUSE9EREVGICAgIFwKKyAgICB7ImNvbXByZXNzIiwgKFB5Q0Z1bmN0aW9uKXpsaWJfQ29tcHJlc3NfY29tcHJlc3MsIE1FVEhfVkFSQVJHUywgemxpYl9Db21wcmVzc19jb21wcmVzc19fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgoremxpYl9Db21wcmVzc19jb21wcmVzc19pbXBsKGNvbXBvYmplY3QgKnNlbGYsIFB5X2J1ZmZlciAqZGF0YSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCit6bGliX0NvbXByZXNzX2NvbXByZXNzKGNvbXBvYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X2J1ZmZlciBkYXRhID0ge05VTEwsIE5VTEx9OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJ5Kjpjb21wcmVzcyIsCisgICAgICAgICZkYXRhKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IHpsaWJfQ29tcHJlc3NfY29tcHJlc3NfaW1wbChzZWxmLCAmZGF0YSk7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgZGF0YSAqLworICAgIGlmIChkYXRhLm9iaikKKyAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZkYXRhKTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUih6bGliX0RlY29tcHJlc3NfZGVjb21wcmVzc19fZG9jX18sCisiZGVjb21wcmVzcygkc2VsZiwgZGF0YSwgbWF4X2xlbmd0aD0wLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIGEgYnl0ZXMgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGRlY29tcHJlc3NlZCB2ZXJzaW9uIG9mIHRoZSBkYXRhLlxuIgorIlxuIgorIiAgZGF0YVxuIgorIiAgICBUaGUgYmluYXJ5IGRhdGEgdG8gZGVjb21wcmVzcy5cbiIKKyIgIG1heF9sZW5ndGhcbiIKKyIgICAgVGhlIG1heGltdW0gYWxsb3dhYmxlIGxlbmd0aCBvZiB0aGUgZGVjb21wcmVzc2VkIGRhdGEuXG4iCisiICAgIFVuY29uc3VtZWQgaW5wdXQgZGF0YSB3aWxsIGJlIHN0b3JlZCBpblxuIgorIiAgICB0aGUgdW5jb25zdW1lZF90YWlsIGF0dHJpYnV0ZS5cbiIKKyJcbiIKKyJBZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24sIHNvbWUgb2YgdGhlIGlucHV0IGRhdGEgbWF5IHN0aWxsIGJlIHN0b3JlZCBpblxuIgorImludGVybmFsIGJ1ZmZlcnMgZm9yIGxhdGVyIHByb2Nlc3NpbmcuXG4iCisiQ2FsbCB0aGUgZmx1c2goKSBtZXRob2QgdG8gY2xlYXIgdGhlc2UgYnVmZmVycy4iKTsKKworI2RlZmluZSBaTElCX0RFQ09NUFJFU1NfREVDT01QUkVTU19NRVRIT0RERUYgICAgXAorICAgIHsiZGVjb21wcmVzcyIsIChQeUNGdW5jdGlvbil6bGliX0RlY29tcHJlc3NfZGVjb21wcmVzcywgTUVUSF9WQVJBUkdTLCB6bGliX0RlY29tcHJlc3NfZGVjb21wcmVzc19fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgoremxpYl9EZWNvbXByZXNzX2RlY29tcHJlc3NfaW1wbChjb21wb2JqZWN0ICpzZWxmLCBQeV9idWZmZXIgKmRhdGEsIHVuc2lnbmVkIGludCBtYXhfbGVuZ3RoKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3psaWJfRGVjb21wcmVzc19kZWNvbXByZXNzKGNvbXBvYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X2J1ZmZlciBkYXRhID0ge05VTEwsIE5VTEx9OworICAgIHVuc2lnbmVkIGludCBtYXhfbGVuZ3RoID0gMDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAieSp8TyY6ZGVjb21wcmVzcyIsCisgICAgICAgICZkYXRhLCB1aW50X2NvbnZlcnRlciwgJm1heF9sZW5ndGgpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gemxpYl9EZWNvbXByZXNzX2RlY29tcHJlc3NfaW1wbChzZWxmLCAmZGF0YSwgbWF4X2xlbmd0aCk7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgZGF0YSAqLworICAgIGlmIChkYXRhLm9iaikKKyAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZkYXRhKTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUih6bGliX0NvbXByZXNzX2ZsdXNoX19kb2NfXywKKyJmbHVzaCgkc2VsZiwgbW9kZT16bGliLlpfRklOSVNILCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIGEgYnl0ZXMgb2JqZWN0IGNvbnRhaW5pbmcgYW55IHJlbWFpbmluZyBjb21wcmVzc2VkIGRhdGEuXG4iCisiXG4iCisiICBtb2RlXG4iCisiICAgIE9uZSBvZiB0aGUgY29uc3RhbnRzIFpfU1lOQ19GTFVTSCwgWl9GVUxMX0ZMVVNILCBaX0ZJTklTSC5cbiIKKyIgICAgSWYgbW9kZSA9PSBaX0ZJTklTSCwgdGhlIGNvbXByZXNzb3Igb2JqZWN0IGNhbiBubyBsb25nZXIgYmVcbiIKKyIgICAgdXNlZCBhZnRlciBjYWxsaW5nIHRoZSBmbHVzaCgpIG1ldGhvZC4gIE90aGVyd2lzZSwgbW9yZSBkYXRhXG4iCisiICAgIGNhbiBzdGlsbCBiZSBjb21wcmVzc2VkLiIpOworCisjZGVmaW5lIFpMSUJfQ09NUFJFU1NfRkxVU0hfTUVUSE9EREVGICAgIFwKKyAgICB7ImZsdXNoIiwgKFB5Q0Z1bmN0aW9uKXpsaWJfQ29tcHJlc3NfZmx1c2gsIE1FVEhfVkFSQVJHUywgemxpYl9Db21wcmVzc19mbHVzaF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgoremxpYl9Db21wcmVzc19mbHVzaF9pbXBsKGNvbXBvYmplY3QgKnNlbGYsIGludCBtb2RlKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3psaWJfQ29tcHJlc3NfZmx1c2goY29tcG9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgaW50IG1vZGUgPSBaX0ZJTklTSDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAifGk6Zmx1c2giLAorICAgICAgICAmbW9kZSkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSB6bGliX0NvbXByZXNzX2ZsdXNoX2ltcGwoc2VsZiwgbW9kZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworI2lmIGRlZmluZWQoSEFWRV9aTElCX0NPUFkpCisKK1B5RG9jX1NUUlZBUih6bGliX0NvbXByZXNzX2NvcHlfX2RvY19fLAorImNvcHkoJHNlbGYsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gYSBjb3B5IG9mIHRoZSBjb21wcmVzc2lvbiBvYmplY3QuIik7CisKKyNkZWZpbmUgWkxJQl9DT01QUkVTU19DT1BZX01FVEhPRERFRiAgICBcCisgICAgeyJjb3B5IiwgKFB5Q0Z1bmN0aW9uKXpsaWJfQ29tcHJlc3NfY29weSwgTUVUSF9OT0FSR1MsIHpsaWJfQ29tcHJlc3NfY29weV9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgoremxpYl9Db21wcmVzc19jb3B5X2ltcGwoY29tcG9iamVjdCAqc2VsZik7CisKK3N0YXRpYyBQeU9iamVjdCAqCit6bGliX0NvbXByZXNzX2NvcHkoY29tcG9iamVjdCAqc2VsZiwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKK3sKKyAgICByZXR1cm4gemxpYl9Db21wcmVzc19jb3B5X2ltcGwoc2VsZik7Cit9CisKKyNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfWkxJQl9DT1BZKSAqLworCisjaWZuZGVmIFpMSUJfQ09NUFJFU1NfQ09QWV9NRVRIT0RERUYKKyAgICAjZGVmaW5lIFpMSUJfQ09NUFJFU1NfQ09QWV9NRVRIT0RERUYKKyNlbmRpZiAvKiAhZGVmaW5lZChaTElCX0NPTVBSRVNTX0NPUFlfTUVUSE9EREVGKSAqLworCisjaWYgZGVmaW5lZChIQVZFX1pMSUJfQ09QWSkKKworUHlEb2NfU1RSVkFSKHpsaWJfRGVjb21wcmVzc19jb3B5X19kb2NfXywKKyJjb3B5KCRzZWxmLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIGEgY29weSBvZiB0aGUgZGVjb21wcmVzc2lvbiBvYmplY3QuIik7CisKKyNkZWZpbmUgWkxJQl9ERUNPTVBSRVNTX0NPUFlfTUVUSE9EREVGICAgIFwKKyAgICB7ImNvcHkiLCAoUHlDRnVuY3Rpb24pemxpYl9EZWNvbXByZXNzX2NvcHksIE1FVEhfTk9BUkdTLCB6bGliX0RlY29tcHJlc3NfY29weV9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgoremxpYl9EZWNvbXByZXNzX2NvcHlfaW1wbChjb21wb2JqZWN0ICpzZWxmKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3psaWJfRGVjb21wcmVzc19jb3B5KGNvbXBvYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpQeV9VTlVTRUQoaWdub3JlZCkpCit7CisgICAgcmV0dXJuIHpsaWJfRGVjb21wcmVzc19jb3B5X2ltcGwoc2VsZik7Cit9CisKKyNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfWkxJQl9DT1BZKSAqLworCisjaWZuZGVmIFpMSUJfREVDT01QUkVTU19DT1BZX01FVEhPRERFRgorICAgICNkZWZpbmUgWkxJQl9ERUNPTVBSRVNTX0NPUFlfTUVUSE9EREVGCisjZW5kaWYgLyogIWRlZmluZWQoWkxJQl9ERUNPTVBSRVNTX0NPUFlfTUVUSE9EREVGKSAqLworCitQeURvY19TVFJWQVIoemxpYl9EZWNvbXByZXNzX2ZsdXNoX19kb2NfXywKKyJmbHVzaCgkc2VsZiwgbGVuZ3RoPXpsaWIuREVGX0JVRl9TSVpFLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIGEgYnl0ZXMgb2JqZWN0IGNvbnRhaW5pbmcgYW55IHJlbWFpbmluZyBkZWNvbXByZXNzZWQgZGF0YS5cbiIKKyJcbiIKKyIgIGxlbmd0aFxuIgorIiAgICB0aGUgaW5pdGlhbCBzaXplIG9mIHRoZSBvdXRwdXQgYnVmZmVyLiIpOworCisjZGVmaW5lIFpMSUJfREVDT01QUkVTU19GTFVTSF9NRVRIT0RERUYgICAgXAorICAgIHsiZmx1c2giLCAoUHlDRnVuY3Rpb24pemxpYl9EZWNvbXByZXNzX2ZsdXNoLCBNRVRIX1ZBUkFSR1MsIHpsaWJfRGVjb21wcmVzc19mbHVzaF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgoremxpYl9EZWNvbXByZXNzX2ZsdXNoX2ltcGwoY29tcG9iamVjdCAqc2VsZiwgdW5zaWduZWQgaW50IGxlbmd0aCk7CisKK3N0YXRpYyBQeU9iamVjdCAqCit6bGliX0RlY29tcHJlc3NfZmx1c2goY29tcG9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgdW5zaWduZWQgaW50IGxlbmd0aCA9IERFRl9CVUZfU0laRTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAifE8mOmZsdXNoIiwKKyAgICAgICAgdWludF9jb252ZXJ0ZXIsICZsZW5ndGgpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gemxpYl9EZWNvbXByZXNzX2ZsdXNoX2ltcGwoc2VsZiwgbGVuZ3RoKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoemxpYl9hZGxlcjMyX19kb2NfXywKKyJhZGxlcjMyKCRtb2R1bGUsIGRhdGEsIHZhbHVlPTEsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJDb21wdXRlIGFuIEFkbGVyLTMyIGNoZWNrc3VtIG9mIGRhdGEuXG4iCisiXG4iCisiICB2YWx1ZVxuIgorIiAgICBTdGFydGluZyB2YWx1ZSBvZiB0aGUgY2hlY2tzdW0uXG4iCisiXG4iCisiVGhlIHJldHVybmVkIGNoZWNrc3VtIGlzIGFuIGludGVnZXIuIik7CisKKyNkZWZpbmUgWkxJQl9BRExFUjMyX01FVEhPRERFRiAgICBcCisgICAgeyJhZGxlcjMyIiwgKFB5Q0Z1bmN0aW9uKXpsaWJfYWRsZXIzMiwgTUVUSF9WQVJBUkdTLCB6bGliX2FkbGVyMzJfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK3psaWJfYWRsZXIzMl9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZGF0YSwgdW5zaWduZWQgaW50IHZhbHVlKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3psaWJfYWRsZXIzMihQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9idWZmZXIgZGF0YSA9IHtOVUxMLCBOVUxMfTsKKyAgICB1bnNpZ25lZCBpbnQgdmFsdWUgPSAxOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJ5KnxJOmFkbGVyMzIiLAorICAgICAgICAmZGF0YSwgJnZhbHVlKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IHpsaWJfYWRsZXIzMl9pbXBsKG1vZHVsZSwgJmRhdGEsIHZhbHVlKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBkYXRhICovCisgICAgaWYgKGRhdGEub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmRhdGEpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKHpsaWJfY3JjMzJfX2RvY19fLAorImNyYzMyKCRtb2R1bGUsIGRhdGEsIHZhbHVlPTAsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJDb21wdXRlIGEgQ1JDLTMyIGNoZWNrc3VtIG9mIGRhdGEuXG4iCisiXG4iCisiICB2YWx1ZVxuIgorIiAgICBTdGFydGluZyB2YWx1ZSBvZiB0aGUgY2hlY2tzdW0uXG4iCisiXG4iCisiVGhlIHJldHVybmVkIGNoZWNrc3VtIGlzIGFuIGludGVnZXIuIik7CisKKyNkZWZpbmUgWkxJQl9DUkMzMl9NRVRIT0RERUYgICAgXAorICAgIHsiY3JjMzIiLCAoUHlDRnVuY3Rpb24pemxpYl9jcmMzMiwgTUVUSF9WQVJBUkdTLCB6bGliX2NyYzMyX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCit6bGliX2NyYzMyX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpkYXRhLCB1bnNpZ25lZCBpbnQgdmFsdWUpOworCitzdGF0aWMgUHlPYmplY3QgKgoremxpYl9jcmMzMihQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9idWZmZXIgZGF0YSA9IHtOVUxMLCBOVUxMfTsKKyAgICB1bnNpZ25lZCBpbnQgdmFsdWUgPSAwOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJ5KnxJOmNyYzMyIiwKKyAgICAgICAgJmRhdGEsICZ2YWx1ZSkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSB6bGliX2NyYzMyX2ltcGwobW9kdWxlLCAmZGF0YSwgdmFsdWUpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIGRhdGEgKi8KKyAgICBpZiAoZGF0YS5vYmopCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmZGF0YSk7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWJjOTQ3MzcyMWNhN2M5NjIgaW5wdXQ9YTkwNDkwNTQwMTNhMWI3N10qLwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9jbWF0aG1vZHVsZS5jIGIvTW9kdWxlcy9jbWF0aG1vZHVsZS5jCmluZGV4IDM2YmY0YTEuLmIzNDFjMzQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvY21hdGhtb2R1bGUuYworKysgYi9Nb2R1bGVzL2NtYXRobW9kdWxlLmMKQEAgLTE5Miw3ICsxOTIsNyBAQAogUHlEb2NfU1RSVkFSKGNfYWNvc2hfZG9jLAogImFjb3NoKHgpXG4iCiAiXG4iCi0iUmV0dXJuIHRoZSBoeXBlcmJvbGljIGFyY2Nvc2luZSBvZiB4LiIpOworIlJldHVybiB0aGUgaW52ZXJzZSBoeXBlcmJvbGljIGNvc2luZSBvZiB4LiIpOwogCiAKIHN0YXRpYyBQeV9jb21wbGV4CkBAIC0yNDksNyArMjQ5LDcgQEAKIFB5RG9jX1NUUlZBUihjX2FzaW5oX2RvYywKICJhc2luaCh4KVxuIgogIlxuIgotIlJldHVybiB0aGUgaHlwZXJib2xpYyBhcmMgc2luZSBvZiB4LiIpOworIlJldHVybiB0aGUgaW52ZXJzZSBoeXBlcmJvbGljIHNpbmUgb2YgeC4iKTsKIAogCiBzdGF0aWMgUHlfY29tcGxleApAQCAtMzUzLDcgKzM1Myw3IEBACiBQeURvY19TVFJWQVIoY19hdGFuaF9kb2MsCiAiYXRhbmgoeClcbiIKICJcbiIKLSJSZXR1cm4gdGhlIGh5cGVyYm9saWMgYXJjIHRhbmdlbnQgb2YgeC4iKTsKKyJSZXR1cm4gdGhlIGludmVyc2UgaHlwZXJib2xpYyB0YW5nZW50IG9mIHguIik7CiAKIAogc3RhdGljIFB5X2NvbXBsZXgKQEAgLTk0MSw5ICs5NDEsMTAgQEAKICAgICBkb3VibGUgciwgcGhpOwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiRDpwb2xhciIsICZ6KSkKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgZXJybm8gPSAwOwogICAgIFB5RlBFX1NUQVJUX1BST1RFQ1QoInBvbGFyIGZ1bmN0aW9uIiwgcmV0dXJuIDApCiAgICAgcGhpID0gY19hdGFuMih6KTsgLyogc2hvdWxkIG5vdCBjYXVzZSBhbnkgZXhjZXB0aW9uICovCi0gICAgciA9IGNfYWJzKHopOyAvKiBzZXRzIGVycm5vIHRvIEVSQU5HRSBvbiBvdmVyZmxvdzsgIG90aGVyd2lzZSAwICovCisgICAgciA9IGNfYWJzKHopOyAvKiBzZXRzIGVycm5vIHRvIEVSQU5HRSBvbiBvdmVyZmxvdyAqLwogICAgIFB5RlBFX0VORF9QUk9URUNUKHIpCiAgICAgaWYgKGVycm5vICE9IDApCiAgICAgICAgIHJldHVybiBtYXRoX2Vycm9yKCk7CkBAIC0xMDYwLDcgKzEwNjEsNyBAQAogY21hdGhfaXNpbmYoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewogICAgIFB5X2NvbXBsZXggejsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIkQ6aXNuYW4iLCAmeikpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJEOmlzaW5mIiwgJnopKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICByZXR1cm4gUHlCb29sX0Zyb21Mb25nKFB5X0lTX0lORklOSVRZKHoucmVhbCkgfHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X0lTX0lORklOSVRZKHouaW1hZykpOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9leHBhdC9weWV4cGF0bnMuaCBiL01vZHVsZXMvZXhwYXQvcHlleHBhdG5zLmgKaW5kZXggMmYyZjRmOS4uOTk5YzVjNyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9leHBhdC9weWV4cGF0bnMuaAorKysgYi9Nb2R1bGVzL2V4cGF0L3B5ZXhwYXRucy5oCkBAIC0yMSw3ICsyMSw3IEBACiAgKgogICoKICAqIFRoZSBTb2x1dGlvbjoKLSAqIFByZWZpeCBhbGwgYSBleHBvcnRlZCBzeW1ib2xzIHdpdGggIlB5RXhwYXRfIi4gVGhpcyBpcyBzaW1pbGFyIHRvCisgKiBQcmVmaXggYWxsIGV4cG9ydGVkIHN5bWJvbHMgd2l0aCAiUHlFeHBhdF8iLiBUaGlzIGlzIHNpbWlsYXIgdG8KICAqIHdoYXQgTW96aWxsYSBkb2VzIGZvciBzb21lIGNvbW1vbiBsaWJzOgogICogaHR0cDovL2x4ci5tb3ppbGxhLm9yZy9zZWFtb25rZXkvc291cmNlL21vZHVsZXMvbGliaW1nL3BuZy9tb3pwbmdjb25mLmgjMTE1CiAgKgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9leHBhdC94bWxwYXJzZS5jIGIvTW9kdWxlcy9leHBhdC94bWxwYXJzZS5jCmluZGV4IGYzNWFhMzYuLjBhYzAzMTcgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvZXhwYXQveG1scGFyc2UuYworKysgYi9Nb2R1bGVzL2V4cGF0L3htbHBhcnNlLmMKQEAgLTIsMTIgKzIsNiBAQAogICAgU2VlIHRoZSBmaWxlIENPUFlJTkcgZm9yIGNvcHlpbmcgcGVybWlzc2lvbi4KICovCiAKLSNpbmNsdWRlIDxzdGRkZWYuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4gICAgICAgICAgICAgICAgICAgICAvKiBtZW1zZXQoKSwgbWVtY3B5KCkgKi8KLSNpbmNsdWRlIDxhc3NlcnQuaD4KLSNpbmNsdWRlIDxsaW1pdHMuaD4gICAgICAgICAgICAgICAgICAgICAvKiBVSU5UX01BWCAqLwotI2luY2x1ZGUgPHRpbWUuaD4gICAgICAgICAgICAgICAgICAgICAgIC8qIHRpbWUoKSAqLwotCiAjZGVmaW5lIFhNTF9CVUlMRElOR19FWFBBVCAxCiAKICNpZmRlZiBDT01QSUxFRF9GUk9NX0RTUApAQCAtMjIsNiArMTYsMTIgQEAKICNpbmNsdWRlIDxleHBhdF9jb25maWcuaD4KICNlbmRpZiAvKiBuZGVmIENPTVBJTEVEX0ZST01fRFNQICovCiAKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4gICAgICAgICAgICAgICAgICAgICAvKiBtZW1zZXQoKSwgbWVtY3B5KCkgKi8KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4gICAgICAgICAgICAgICAgICAgICAvKiBVSU5UX01BWCAqLworI2luY2x1ZGUgPHRpbWUuaD4gICAgICAgICAgICAgICAgICAgICAgIC8qIHRpbWUoKSAqLworCiAjaW5jbHVkZSAiYXNjaWkuaCIKICNpbmNsdWRlICJleHBhdC5oIgogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL2V4cGF0L3htbHJvbGUuYyBiL01vZHVsZXMvZXhwYXQveG1scm9sZS5jCmluZGV4IDQ0NzcyZTIuLjlhOGY4NWQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvZXhwYXQveG1scm9sZS5jCisrKyBiL01vZHVsZXMvZXhwYXQveG1scm9sZS5jCkBAIC0yLDggKzIsNiBAQAogICAgU2VlIHRoZSBmaWxlIENPUFlJTkcgZm9yIGNvcHlpbmcgcGVybWlzc2lvbi4KICovCiAKLSNpbmNsdWRlIDxzdGRkZWYuaD4KLQogI2lmZGVmIENPTVBJTEVEX0ZST01fRFNQCiAjaW5jbHVkZSAid2luY29uZmlnLmgiCiAjZWxpZiBkZWZpbmVkKE1BQ09TX0NMQVNTSUMpCkBAIC0xOCw2ICsxNiw4IEBACiAjZW5kaWYKICNlbmRpZiAvKiBuZGVmIENPTVBJTEVEX0ZST01fRFNQICovCiAKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKwogI2luY2x1ZGUgImV4cGF0X2V4dGVybmFsLmgiCiAjaW5jbHVkZSAiaW50ZXJuYWwuaCIKICNpbmNsdWRlICJ4bWxyb2xlLmgiCmRpZmYgLS1naXQgYS9Nb2R1bGVzL2V4cGF0L3htbHRvay5jIGIvTW9kdWxlcy9leHBhdC94bWx0b2suYwppbmRleCBiOWNkN2E0Li5mZDZiZjdhIDEwMDY0NAotLS0gYS9Nb2R1bGVzL2V4cGF0L3htbHRvay5jCisrKyBiL01vZHVsZXMvZXhwYXQveG1sdG9rLmMKQEAgLTIsOCArMiw2IEBACiAgICBTZWUgdGhlIGZpbGUgQ09QWUlORyBmb3IgY29weWluZyBwZXJtaXNzaW9uLgogKi8KIAotI2luY2x1ZGUgPHN0ZGRlZi5oPgotCiAjaWZkZWYgQ09NUElMRURfRlJPTV9EU1AKICNpbmNsdWRlICJ3aW5jb25maWcuaCIKICNlbGlmIGRlZmluZWQoTUFDT1NfQ0xBU1NJQykKQEAgLTE4LDYgKzE2LDggQEAKICNlbmRpZgogI2VuZGlmIC8qIG5kZWYgQ09NUElMRURfRlJPTV9EU1AgKi8KIAorI2luY2x1ZGUgPHN0ZGRlZi5oPgorCiAjaW5jbHVkZSAiZXhwYXRfZXh0ZXJuYWwuaCIKICNpbmNsdWRlICJpbnRlcm5hbC5oIgogI2luY2x1ZGUgInhtbHRvay5oIgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9mYXVsdGhhbmRsZXIuYyBiL01vZHVsZXMvZmF1bHRoYW5kbGVyLmMKaW5kZXggNjgwZjYzMC4uMTQ5M2Y4ZCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9mYXVsdGhhbmRsZXIuYworKysgYi9Nb2R1bGVzL2ZhdWx0aGFuZGxlci5jCkBAIC0yMiw3ICsyMiwxNCBAQAogIyAgZGVmaW5lIEZBVUxUSEFORExFUl9VU0VSCiAjZW5kaWYKIAotI2RlZmluZSBQVVRTKGZkLCBzdHIpIHdyaXRlKGZkLCBzdHIsIHN0cmxlbihzdHIpKQorLyogY2FzdCBzaXplX3QgdG8gaW50IGJlY2F1c2Ugd3JpdGUoKSB0YWtlcyBhbiBpbnQgb24gV2luZG93cworICAgKGFueXdheSwgdGhlIGxlbmd0aCBpcyBzbWFsbGVyIHRoYW4gMzAgY2hhcmFjdGVycykgKi8KKyNkZWZpbmUgUFVUUyhmZCwgc3RyKSB3cml0ZShmZCwgc3RyLCAoaW50KXN0cmxlbihzdHIpKQorCitfUHlfSURFTlRJRklFUihlbmFibGUpOworX1B5X0lERU5USUZJRVIoZmlsZW5vKTsKK19QeV9JREVOVElGSUVSKGZsdXNoKTsKK19QeV9JREVOVElGSUVSKHN0ZGVycik7CiAKICNpZmRlZiBIQVZFX1NJR0FDVElPTgogdHlwZWRlZiBzdHJ1Y3Qgc2lnYWN0aW9uIF9QeV9zaWdoYW5kbGVyX3Q7CkBAIC03OSw5ICs4Niw2IEBACiBzdGF0aWMgdXNlcl9zaWduYWxfdCAqdXNlcl9zaWduYWxzOwogCiAvKiB0aGUgZm9sbG93aW5nIG1hY3JvcyBjb21lIGZyb20gUHl0aG9uOiBNb2R1bGVzL3NpZ25hbG1vZHVsZS5jICovCi0jaWYgZGVmaW5lZChQWU9TX09TMikgJiYgIWRlZmluZWQoUFlDQ19HQ0MpCi0jZGVmaW5lIE5TSUcgMTIKLSNlbmRpZgogI2lmbmRlZiBOU0lHCiAjIGlmIGRlZmluZWQoX05TSUcpCiAjICBkZWZpbmUgTlNJRyBfTlNJRyAgICAgICAgICAgIC8qIEZvciBCU0QvU3lzViAqLwpAQCAtMTMxLDE3ICsxMzUsMTkgQEAKIGZhdWx0aGFuZGxlcl9nZXRfZmlsZW5vKFB5T2JqZWN0ICpmaWxlLCBpbnQgKnBfZmQpCiB7CiAgICAgUHlPYmplY3QgKnJlc3VsdDsKLSAgICBfUHlfSURFTlRJRklFUihmaWxlbm8pOwotICAgIF9QeV9JREVOVElGSUVSKGZsdXNoKTsKICAgICBsb25nIGZkX2xvbmc7CiAgICAgaW50IGZkOwogCiAgICAgaWYgKGZpbGUgPT0gTlVMTCB8fCBmaWxlID09IFB5X05vbmUpIHsKLSAgICAgICAgZmlsZSA9IFB5U3lzX0dldE9iamVjdCgic3RkZXJyIik7CisgICAgICAgIGZpbGUgPSBfUHlTeXNfR2V0T2JqZWN0SWQoJlB5SWRfc3RkZXJyKTsKICAgICAgICAgaWYgKGZpbGUgPT0gTlVMTCkgewogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwgInVuYWJsZSB0byBnZXQgc3lzLnN0ZGVyciIpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KKyAgICAgICAgaWYgKGZpbGUgPT0gUHlfTm9uZSkgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwgInN5cy5zdGRlcnIgaXMgTm9uZSIpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KICAgICB9CiAKICAgICByZXN1bHQgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKGZpbGUsICZQeUlkX2ZpbGVubywgIiIpOwpAQCAtNDQ4LDcgKzQ1NCw3IEBACiAgICAgICAgIC8qIGdldCB0aGUgdGhyZWFkIGhvbGRpbmcgdGhlIEdJTCwgTlVMTCBpZiBubyB0aHJlYWQgaG9sZCB0aGUgR0lMICovCiAgICAgICAgIGN1cnJlbnQgPSBfUHlfYXRvbWljX2xvYWRfcmVsYXhlZCgmX1B5VGhyZWFkU3RhdGVfQ3VycmVudCk7CiAKLSAgICAgICAgd3JpdGUodGhyZWFkLmZkLCB0aHJlYWQuaGVhZGVyLCB0aHJlYWQuaGVhZGVyX2xlbik7CisgICAgICAgIHdyaXRlKHRocmVhZC5mZCwgdGhyZWFkLmhlYWRlciwgKGludCl0aHJlYWQuaGVhZGVyX2xlbik7CiAKICAgICAgICAgZXJybXNnID0gX1B5X0R1bXBUcmFjZWJhY2tUaHJlYWRzKHRocmVhZC5mZCwgdGhyZWFkLmludGVycCwgY3VycmVudCk7CiAgICAgICAgIG9rID0gKGVycm1zZyA9PSBOVUxMKTsKQEAgLTQ3Niw3ICs0ODIsNyBAQAogCiAgICAgUHlfQ0xFQVIodGhyZWFkLmZpbGUpOwogICAgIGlmICh0aHJlYWQuaGVhZGVyKSB7Ci0gICAgICAgIGZyZWUodGhyZWFkLmhlYWRlcik7CisgICAgICAgIFB5TWVtX0ZyZWUodGhyZWFkLmhlYWRlcik7CiAgICAgICAgIHRocmVhZC5oZWFkZXIgPSBOVUxMOwogICAgIH0KIH0KQEAgLTUwNSw3ICs1MTEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICJUaW1lb3V0ICglbHU6JTAybHU6JTAybHUpIVxuIiwKICAgICAgICAgICAgICAgICAgICAgICBob3VyLCBtaW4sIHNlYyk7CiAKLSAgICByZXR1cm4gc3RyZHVwKGJ1ZmZlcik7CisgICAgcmV0dXJuIF9QeU1lbV9TdHJkdXAoYnVmZmVyKTsKIH0KIAogc3RhdGljIFB5T2JqZWN0KgpAQCAtNTcxLDcgKzU3Nyw3IEBACiAgICAgaWYgKFB5VGhyZWFkX3N0YXJ0X25ld190aHJlYWQoZmF1bHRoYW5kbGVyX3RocmVhZCwgTlVMTCkgPT0gLTEpIHsKICAgICAgICAgUHlUaHJlYWRfcmVsZWFzZV9sb2NrKHRocmVhZC5ydW5uaW5nKTsKICAgICAgICAgUHlfQ0xFQVIodGhyZWFkLmZpbGUpOwotICAgICAgICBmcmVlKGhlYWRlcik7CisgICAgICAgIFB5TWVtX0ZyZWUoaGVhZGVyKTsKICAgICAgICAgdGhyZWFkLmhlYWRlciA9IE5VTEw7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAidW5hYmxlIHRvIHN0YXJ0IHdhdGNoZG9nIHRocmVhZCIpOwpAQCAtNzMwLDkgKzczNiwxMCBAQAogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGlmICh1c2VyX3NpZ25hbHMgPT0gTlVMTCkgewotICAgICAgICB1c2VyX3NpZ25hbHMgPSBjYWxsb2MoTlNJRywgc2l6ZW9mKHVzZXJfc2lnbmFsX3QpKTsKKyAgICAgICAgdXNlcl9zaWduYWxzID0gUHlNZW1fTWFsbG9jKE5TSUcgKiBzaXplb2YodXNlcl9zaWduYWxfdCkpOwogICAgICAgICBpZiAodXNlcl9zaWduYWxzID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgbWVtc2V0KHVzZXJfc2lnbmFscywgMCwgTlNJRyAqIHNpemVvZih1c2VyX3NpZ25hbF90KSk7CiAgICAgfQogICAgIHVzZXIgPSAmdXNlcl9zaWduYWxzW3NpZ251bV07CiAKQEAgLTgwMiwyMyArODA5LDE1IEBACiB7CiAgICAgdm9sYXRpbGUgaW50ICp4OwogICAgIHZvbGF0aWxlIGludCB5OwotICAgIGludCByZWxlYXNlX2dpbCA9IDA7Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8aTpfcmVhZF9udWxsIiwgJnJlbGVhc2VfZ2lsKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICB4ID0gTlVMTDsKLSAgICBpZiAocmVsZWFzZV9naWwpIHsKLSAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgICAgICB5ID0gKng7Ci0gICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCi0gICAgfSBlbHNlCi0gICAgICAgIHkgPSAqeDsKKyAgICB5ID0gKng7CiAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZyh5KTsKIAogfQogCi1zdGF0aWMgUHlPYmplY3QgKgotZmF1bHRoYW5kbGVyX3NpZ3NlZ3YoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorc3RhdGljIHZvaWQKK2ZhdWx0aGFuZGxlcl9yYWlzZV9zaWdzZWd2KHZvaWQpCiB7CiAjaWYgZGVmaW5lZChNU19XSU5ET1dTKQogICAgIC8qIEZvciBTSUdTRUdWLCBmYXVsdGhhbmRsZXJfZmF0YWxfZXJyb3IoKSByZXN0b3JlcyB0aGUgcHJldmlvdXMgc2lnbmFsCkBAIC04MzcsNiArODM2LDIyIEBACiAjZWxzZQogICAgIHJhaXNlKFNJR1NFR1YpOwogI2VuZGlmCit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitmYXVsdGhhbmRsZXJfc2lnc2VndihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgaW50IHJlbGVhc2VfZ2lsID0gMDsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxpOl9yZWFkX251bGwiLCAmcmVsZWFzZV9naWwpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChyZWxlYXNlX2dpbCkgeworICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgICAgIGZhdWx0aGFuZGxlcl9yYWlzZV9zaWdzZWd2KCk7CisgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCisgICAgfSBlbHNlIHsKKyAgICAgICAgZmF1bHRoYW5kbGVyX3JhaXNlX3NpZ3NlZ3YoKTsKKyAgICB9CiAgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKQEAgLTg5NiwxMiArOTExLDE5IEBACiB9CiAKICNpZiBkZWZpbmVkKEhBVkVfU0lHQUxUU1RBQ0spICYmIGRlZmluZWQoSEFWRV9TSUdBQ1RJT04pCi1zdGF0aWMgdm9pZCoKLXN0YWNrX292ZXJmbG93KHZvaWQgKm1pbl9zcCwgdm9pZCAqbWF4X3NwLCBzaXplX3QgKmRlcHRoKQorI2lmZGVmIF9fSU5URUxfQ09NUElMRVIKKyAgIC8qIElzc3VlICMyMzY1NDogVHVybiBvZmYgSUNDJ3MgdGFpbCBjYWxsIG9wdGltaXphdGlvbiBmb3IgdGhlCisgICAgKiBzdGFja19vdmVyZmxvdyBnZW5lcmF0b3IuIElDQyB0dXJucyB0aGUgcmVjdXJzaXZlIHRhaWwgY2FsbCBpbnRvCisgICAgKiBhIGxvb3AuICovCisjICBwcmFnbWEgaW50ZWwgb3B0aW1pemF0aW9uX2xldmVsIDAKKyNlbmRpZgorc3RhdGljCitQeV91aW50cHRyX3QKK3N0YWNrX292ZXJmbG93KFB5X3VpbnRwdHJfdCBtaW5fc3AsIFB5X3VpbnRwdHJfdCBtYXhfc3AsIHNpemVfdCAqZGVwdGgpCiB7CiAgICAgLyogYWxsb2NhdGUgNDA5NiBieXRlcyBvbiB0aGUgc3RhY2sgYXQgZWFjaCBjYWxsICovCiAgICAgdW5zaWduZWQgY2hhciBidWZmZXJbNDA5Nl07Ci0gICAgdm9pZCAqc3AgPSAmYnVmZmVyOworICAgIFB5X3VpbnRwdHJfdCBzcCA9IChQeV91aW50cHRyX3QpJmJ1ZmZlcjsKICAgICAqZGVwdGggKz0gMTsKICAgICBpZiAoc3AgPCBtaW5fc3AgfHwgbWF4X3NwIDwgc3ApCiAgICAgICAgIHJldHVybiBzcDsKQEAgLTkxNCw3ICs5MzYsOCBAQAogZmF1bHRoYW5kbGVyX3N0YWNrX292ZXJmbG93KFB5T2JqZWN0ICpzZWxmKQogewogICAgIHNpemVfdCBkZXB0aCwgc2l6ZTsKLSAgICBjaGFyICpzcCA9IChjaGFyICopJmRlcHRoLCAqc3RvcDsKKyAgICBQeV91aW50cHRyX3Qgc3AgPSAoUHlfdWludHB0cl90KSZkZXB0aDsKKyAgICBQeV91aW50cHRyX3Qgc3RvcDsKIAogICAgIGRlcHRoID0gMDsKICAgICBzdG9wID0gc3RhY2tfb3ZlcmZsb3coc3AgLSBTVEFDS19PVkVSRkxPV19NQVhfU0laRSwKQEAgLTk5NiwxMiArMTAxOSwxMiBAQAogICAgICAgICAgICAgICAgICInc2lnbnVtJyByZWdpc3RlcmVkIGJ5IHJlZ2lzdGVyKCkiKX0sCiAjZW5kaWYKIAotICAgIHsiX3JlYWRfbnVsbCIsIGZhdWx0aGFuZGxlcl9yZWFkX251bGwsIE1FVEhfVkFSQVJHUywKLSAgICAgUHlEb2NfU1RSKCJfcmVhZF9udWxsKHJlbGVhc2VfZ2lsPUZhbHNlKTogcmVhZCBmcm9tIE5VTEwsIHJhaXNlICIKKyAgICB7Il9yZWFkX251bGwiLCBmYXVsdGhhbmRsZXJfcmVhZF9udWxsLCBNRVRIX05PQVJHUywKKyAgICAgUHlEb2NfU1RSKCJfcmVhZF9udWxsKCk6IHJlYWQgZnJvbSBOVUxMLCByYWlzZSAiCiAgICAgICAgICAgICAgICAiYSBTSUdTRUdWIG9yIFNJR0JVUyBzaWduYWwgZGVwZW5kaW5nIG9uIHRoZSBwbGF0Zm9ybSIpfSwKICAgICB7Il9zaWdzZWd2IiwgZmF1bHRoYW5kbGVyX3NpZ3NlZ3YsIE1FVEhfVkFSQVJHUywKLSAgICAgUHlEb2NfU1RSKCJfc2lnc2VndigpOiByYWlzZSBhIFNJR1NFR1Ygc2lnbmFsIil9LAotICAgIHsiX3NpZ2FicnQiLCBmYXVsdGhhbmRsZXJfc2lnYWJydCwgTUVUSF9WQVJBUkdTLAorICAgICBQeURvY19TVFIoIl9zaWdzZWd2KHJlbGVhc2VfZ2lsPUZhbHNlKTogcmFpc2UgYSBTSUdTRUdWIHNpZ25hbCIpfSwKKyAgICB7Il9zaWdhYnJ0IiwgZmF1bHRoYW5kbGVyX3NpZ2FicnQsIE1FVEhfTk9BUkdTLAogICAgICBQeURvY19TVFIoIl9zaWdhYnJ0KCk6IHJhaXNlIGEgU0lHQUJSVCBzaWduYWwiKX0sCiAgICAgeyJfc2lnZnBlIiwgKFB5Q0Z1bmN0aW9uKWZhdWx0aGFuZGxlcl9zaWdmcGUsIE1FVEhfTk9BUkdTLAogICAgICBQeURvY19TVFIoIl9zaWdmcGUoKTogcmFpc2UgYSBTSUdGUEUgc2lnbmFsIil9LApAQCAtMTA0Nyw5ICsxMDcwLDExIEBACiBmYXVsdGhhbmRsZXJfZW52X29wdGlvbnModm9pZCkKIHsKICAgICBQeU9iamVjdCAqeG9wdGlvbnMsICprZXksICptb2R1bGUsICpyZXM7Ci0gICAgX1B5X0lERU5USUZJRVIoZW5hYmxlKTsKKyAgICBjaGFyICpwOwogCi0gICAgaWYgKCFQeV9HRVRFTlYoIlBZVEhPTkZBVUxUSEFORExFUiIpKSB7CisgICAgaWYgKCEoKHAgPSBQeV9HRVRFTlYoIlBZVEhPTkZBVUxUSEFORExFUiIpKSAmJiAqcCAhPSAnXDAnKSkgeworICAgICAgICAvKiBQWVRIT05GQVVMVEhBTkRMRVIgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgbWlzc2luZworICAgICAgICAgICBvciBhbiBlbXB0eSBzdHJpbmcgKi8KICAgICAgICAgaW50IGhhc19rZXk7CiAKICAgICAgICAgeG9wdGlvbnMgPSBQeVN5c19HZXRYT3B0aW9ucygpOwpAQCAtMTA2Miw4ICsxMDg3LDggQEAKIAogICAgICAgICBoYXNfa2V5ID0gUHlEaWN0X0NvbnRhaW5zKHhvcHRpb25zLCBrZXkpOwogICAgICAgICBQeV9ERUNSRUYoa2V5KTsKLSAgICAgICAgaWYgKCFoYXNfa2V5KQotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGlmIChoYXNfa2V5IDw9IDApCisgICAgICAgICAgICByZXR1cm4gaGFzX2tleTsKICAgICB9CiAKICAgICBtb2R1bGUgPSBQeUltcG9ydF9JbXBvcnRNb2R1bGUoImZhdWx0aGFuZGxlciIpOwpAQCAtMTEzNyw3ICsxMTYyLDcgQEAKICAgICBpZiAodXNlcl9zaWduYWxzICE9IE5VTEwpIHsKICAgICAgICAgZm9yIChzaWdudW09MDsgc2lnbnVtIDwgTlNJRzsgc2lnbnVtKyspCiAgICAgICAgICAgICBmYXVsdGhhbmRsZXJfdW5yZWdpc3RlcigmdXNlcl9zaWduYWxzW3NpZ251bV0sIHNpZ251bSk7Ci0gICAgICAgIGZyZWUodXNlcl9zaWduYWxzKTsKKyAgICAgICAgUHlNZW1fRnJlZSh1c2VyX3NpZ25hbHMpOwogICAgICAgICB1c2VyX3NpZ25hbHMgPSBOVUxMOwogICAgIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9mY250bG1vZHVsZS5jIGIvTW9kdWxlcy9mY250bG1vZHVsZS5jCmluZGV4IDY3NjkwOTguLjkzMjU5NDAgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvZmNudGxtb2R1bGUuYworKysgYi9Nb2R1bGVzL2ZjbnRsbW9kdWxlLmMKQEAgLTM0LDcgKzM0LDcgQEAKIHsKICAgICBpbnQgZmQ7CiAgICAgaW50IGNvZGU7Ci0gICAgbG9uZyBhcmc7CisgICAgaW50IGFyZzsKICAgICBpbnQgcmV0OwogICAgIGNoYXIgKnN0cjsKICAgICBQeV9zc2l6ZV90IGxlbjsKQEAgLTYxLDcgKzYxLDcgQEAKICAgICBQeUVycl9DbGVhcigpOwogICAgIGFyZyA9IDA7CiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCi0gICAgICAgICAiTyZpfGw7ZmNudGwgcmVxdWlyZXMgYSBmaWxlIG9yIGZpbGUgZGVzY3JpcHRvciwiCisgICAgICAgICAiTyZpfEk7ZmNudGwgcmVxdWlyZXMgYSBmaWxlIG9yIGZpbGUgZGVzY3JpcHRvciwiCiAgICAgICAgICAiIGFuIGludGVnZXIgYW5kIG9wdGlvbmFsbHkgYSB0aGlyZCBpbnRlZ2VyIG9yIGEgc3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udl9kZXNjcmlwdG9yLCAmZmQsICZjb2RlLCAmYXJnKSkgewogICAgICAgcmV0dXJuIE5VTEw7CkBAIC0yMDgsMTEgKzIwOCw3IEBACiAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotI2lmZGVmIF9fVk1TCi0gICAgcmV0ID0gaW9jdGwoZmQsIGNvZGUsICh2b2lkICopYXJnKTsKLSNlbHNlCiAgICAgcmV0ID0gaW9jdGwoZmQsIGNvZGUsIGFyZyk7Ci0jZW5kaWYKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogICAgIGlmIChyZXQgPCAwKSB7CiAgICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19JT0Vycm9yKTsKQEAgLTMyNywxMSArMzIzLDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgJmxlbm9iaiwgJnN0YXJ0b2JqLCAmd2hlbmNlKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKSAmJiBkZWZpbmVkKFBZQ0NfR0NDKQotICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19Ob3RJbXBsZW1lbnRlZEVycm9yLAotICAgICAgICAgICAgICAgICAgICAibG9ja2Ygbm90IHN1cHBvcnRlZCBvbiBPUy8yIChFTVgpIik7Ci0gICAgcmV0dXJuIE5VTEw7Ci0jZWxzZQogI2lmbmRlZiBMT0NLX1NICiAjZGVmaW5lIExPQ0tfU0ggICAgICAgICAxICAgICAgIC8qIHNoYXJlZCBsb2NrICovCiAjZGVmaW5lIExPQ0tfRVggICAgICAgICAyICAgICAgIC8qIGV4Y2x1c2l2ZSBsb2NrICovCkBAIC0zODUsNyArMzc2LDYgQEAKICAgICB9CiAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwogICAgIHJldHVybiBQeV9Ob25lOwotI2VuZGlmICAvKiBkZWZpbmVkKFBZT1NfT1MyKSAmJiBkZWZpbmVkKFBZQ0NfR0NDKSAqLwogfQogCiBQeURvY19TVFJWQVIobG9ja2ZfZG9jLApAQCAtNDMyLDE4OCArNDIyLDE3OSBAQAogCiAvKiBNb2R1bGUgaW5pdGlhbGlzYXRpb24gKi8KIAotc3RhdGljIGludAotaW5zKFB5T2JqZWN0KiBkLCBjaGFyKiBzeW1ib2wsIGxvbmcgdmFsdWUpCi17Ci0gICAgUHlPYmplY3QqIHYgPSBQeUxvbmdfRnJvbUxvbmcodmFsdWUpOwotICAgIGlmICghdiB8fCBQeURpY3RfU2V0SXRlbVN0cmluZyhkLCBzeW1ib2wsIHYpIDwgMCkKLSAgICAgICAgcmV0dXJuIC0xOwotCi0gICAgUHlfREVDUkVGKHYpOwotICAgIHJldHVybiAwOwotfQotCi0jZGVmaW5lIElOUyh4KSBpZiAoaW5zKGQsICN4LCAobG9uZyl4KSkgcmV0dXJuIC0xCiAKIHN0YXRpYyBpbnQKLWFsbF9pbnMoUHlPYmplY3QqIGQpCithbGxfaW5zKFB5T2JqZWN0KiBtKQogewotICAgIGlmIChpbnMoZCwgIkxPQ0tfU0giLCAobG9uZylMT0NLX1NIKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMoZCwgIkxPQ0tfRVgiLCAobG9uZylMT0NLX0VYKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMoZCwgIkxPQ0tfTkIiLCAobG9uZylMT0NLX05CKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMoZCwgIkxPQ0tfVU4iLCAobG9uZylMT0NLX1VOKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0NLX1NIKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0NLX0VYKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0NLX05CKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0NLX1VOKSkgcmV0dXJuIC0xOwogLyogR05VIGV4dGVuc2lvbnMsIGFzIG9mIGdsaWJjIDIuMi40ICovCiAjaWZkZWYgTE9DS19NQU5ECi0gICAgaWYgKGlucyhkLCAiTE9DS19NQU5EIiwgKGxvbmcpTE9DS19NQU5EKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0NLX01BTkQpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBMT0NLX1JFQUQKLSAgICBpZiAoaW5zKGQsICJMT0NLX1JFQUQiLCAobG9uZylMT0NLX1JFQUQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPQ0tfUkVBRCkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIExPQ0tfV1JJVEUKLSAgICBpZiAoaW5zKGQsICJMT0NLX1dSSVRFIiwgKGxvbmcpTE9DS19XUklURSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9DS19XUklURSkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIExPQ0tfUlcKLSAgICBpZiAoaW5zKGQsICJMT0NLX1JXIiwgKGxvbmcpTE9DS19SVykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9DS19SVykpIHJldHVybiAtMTsKICNlbmRpZgogCiAjaWZkZWYgRl9EVVBGRAotICAgIGlmIChpbnMoZCwgIkZfRFVQRkQiLCAobG9uZylGX0RVUEZEKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGX0RVUEZEKSkgcmV0dXJuIC0xOworI2VuZGlmCisjaWZkZWYgRl9EVVBGRF9DTE9FWEVDCisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZfRFVQRkRfQ0xPRVhFQykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIEZfR0VURkQKLSAgICBpZiAoaW5zKGQsICJGX0dFVEZEIiwgKGxvbmcpRl9HRVRGRCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRl9HRVRGRCkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIEZfU0VURkQKLSAgICBpZiAoaW5zKGQsICJGX1NFVEZEIiwgKGxvbmcpRl9TRVRGRCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRl9TRVRGRCkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIEZfR0VURkwKLSAgICBpZiAoaW5zKGQsICJGX0dFVEZMIiwgKGxvbmcpRl9HRVRGTCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRl9HRVRGTCkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIEZfU0VURkwKLSAgICBpZiAoaW5zKGQsICJGX1NFVEZMIiwgKGxvbmcpRl9TRVRGTCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRl9TRVRGTCkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIEZfR0VUTEsKLSAgICBpZiAoaW5zKGQsICJGX0dFVExLIiwgKGxvbmcpRl9HRVRMSykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRl9HRVRMSykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIEZfU0VUTEsKLSAgICBpZiAoaW5zKGQsICJGX1NFVExLIiwgKGxvbmcpRl9TRVRMSykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRl9TRVRMSykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIEZfU0VUTEtXCi0gICAgaWYgKGlucyhkLCAiRl9TRVRMS1ciLCAobG9uZylGX1NFVExLVykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRl9TRVRMS1cpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBGX0dFVE9XTgotICAgIGlmIChpbnMoZCwgIkZfR0VUT1dOIiwgKGxvbmcpRl9HRVRPV04pKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZfR0VUT1dOKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgRl9TRVRPV04KLSAgICBpZiAoaW5zKGQsICJGX1NFVE9XTiIsIChsb25nKUZfU0VUT1dOKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGX1NFVE9XTikpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIEZfR0VUU0lHCi0gICAgaWYgKGlucyhkLCAiRl9HRVRTSUciLCAobG9uZylGX0dFVFNJRykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRl9HRVRTSUcpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBGX1NFVFNJRwotICAgIGlmIChpbnMoZCwgIkZfU0VUU0lHIiwgKGxvbmcpRl9TRVRTSUcpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZfU0VUU0lHKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgRl9SRExDSwotICAgIGlmIChpbnMoZCwgIkZfUkRMQ0siLCAobG9uZylGX1JETENLKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGX1JETENLKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgRl9XUkxDSwotICAgIGlmIChpbnMoZCwgIkZfV1JMQ0siLCAobG9uZylGX1dSTENLKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGX1dSTENLKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgRl9VTkxDSwotICAgIGlmIChpbnMoZCwgIkZfVU5MQ0siLCAobG9uZylGX1VOTENLKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGX1VOTENLKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAvKiBMRlMgY29uc3RhbnRzICovCiAjaWZkZWYgRl9HRVRMSzY0Ci0gICAgaWYgKGlucyhkLCAiRl9HRVRMSzY0IiwgKGxvbmcpRl9HRVRMSzY0KSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGX0dFVExLNjQpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBGX1NFVExLNjQKLSAgICBpZiAoaW5zKGQsICJGX1NFVExLNjQiLCAobG9uZylGX1NFVExLNjQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZfU0VUTEs2NCkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIEZfU0VUTEtXNjQKLSAgICBpZiAoaW5zKGQsICJGX1NFVExLVzY0IiwgKGxvbmcpRl9TRVRMS1c2NCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRl9TRVRMS1c2NCkpIHJldHVybiAtMTsKICNlbmRpZgogLyogR05VIGV4dGVuc2lvbnMsIGFzIG9mIGdsaWJjIDIuMi40LiAqLwogI2lmZGVmIEZBU1lOQwotICAgIGlmIChpbnMoZCwgIkZBU1lOQyIsIChsb25nKUZBU1lOQykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRkFTWU5DKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgRl9TRVRMRUFTRQotICAgIGlmIChpbnMoZCwgIkZfU0VUTEVBU0UiLCAobG9uZylGX1NFVExFQVNFKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGX1NFVExFQVNFKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgRl9HRVRMRUFTRQotICAgIGlmIChpbnMoZCwgIkZfR0VUTEVBU0UiLCAobG9uZylGX0dFVExFQVNFKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGX0dFVExFQVNFKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgRl9OT1RJRlkKLSAgICBpZiAoaW5zKGQsICJGX05PVElGWSIsIChsb25nKUZfTk9USUZZKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGX05PVElGWSkpIHJldHVybiAtMTsKICNlbmRpZgogLyogT2xkIEJTRCBmbG9jaygpLiAqLwogI2lmZGVmIEZfRVhMQ0sKLSAgICBpZiAoaW5zKGQsICJGX0VYTENLIiwgKGxvbmcpRl9FWExDSykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRl9FWExDSykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIEZfU0hMQ0sKLSAgICBpZiAoaW5zKGQsICJGX1NITENLIiwgKGxvbmcpRl9TSExDSykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRl9TSExDSykpIHJldHVybiAtMTsKICNlbmRpZgogCiAvKiBPUyBYIHNwZWNpZmljcyAqLwogI2lmZGVmIEZfRlVMTEZTWU5DCi0gICAgaWYgKGlucyhkLCAiRl9GVUxMRlNZTkMiLCAobG9uZylGX0ZVTExGU1lOQykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRl9GVUxMRlNZTkMpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBGX05PQ0FDSEUKLSAgICBpZiAoaW5zKGQsICJGX05PQ0FDSEUiLCAobG9uZylGX05PQ0FDSEUpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZfTk9DQUNIRSkpIHJldHVybiAtMTsKICNlbmRpZgogCiAvKiBGb3IgRl97R0VUfFNFVH1GTCAqLwogI2lmZGVmIEZEX0NMT0VYRUMKLSAgICBpZiAoaW5zKGQsICJGRF9DTE9FWEVDIiwgKGxvbmcpRkRfQ0xPRVhFQykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRkRfQ0xPRVhFQykpIHJldHVybiAtMTsKICNlbmRpZgogCiAvKiBGb3IgRl9OT1RJRlkgKi8KICNpZmRlZiBETl9BQ0NFU1MKLSAgICBpZiAoaW5zKGQsICJETl9BQ0NFU1MiLCAobG9uZylETl9BQ0NFU1MpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEROX0FDQ0VTUykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIEROX01PRElGWQotICAgIGlmIChpbnMoZCwgIkROX01PRElGWSIsIChsb25nKUROX01PRElGWSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRE5fTU9ESUZZKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgRE5fQ1JFQVRFCi0gICAgaWYgKGlucyhkLCAiRE5fQ1JFQVRFIiwgKGxvbmcpRE5fQ1JFQVRFKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBETl9DUkVBVEUpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBETl9ERUxFVEUKLSAgICBpZiAoaW5zKGQsICJETl9ERUxFVEUiLCAobG9uZylETl9ERUxFVEUpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEROX0RFTEVURSkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIEROX1JFTkFNRQotICAgIGlmIChpbnMoZCwgIkROX1JFTkFNRSIsIChsb25nKUROX1JFTkFNRSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRE5fUkVOQU1FKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgRE5fQVRUUklCCi0gICAgaWYgKGlucyhkLCAiRE5fQVRUUklCIiwgKGxvbmcpRE5fQVRUUklCKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBETl9BVFRSSUIpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBETl9NVUxUSVNIT1QKLSAgICBpZiAoaW5zKGQsICJETl9NVUxUSVNIT1QiLCAobG9uZylETl9NVUxUSVNIT1QpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEROX01VTFRJU0hPVCkpIHJldHVybiAtMTsKICNlbmRpZgogCiAjaWZkZWYgSEFWRV9TVFJPUFRTX0gKICAgICAvKiBVbml4IDk4IGd1YXJhbnRlZXMgdGhhdCB0aGVzZSBhcmUgaW4gc3Ryb3B0cy5oLiAqLwotICAgIElOUyhJX1BVU0gpOwotICAgIElOUyhJX1BPUCk7Ci0gICAgSU5TKElfTE9PSyk7Ci0gICAgSU5TKElfRkxVU0gpOwotICAgIElOUyhJX0ZMVVNIQkFORCk7Ci0gICAgSU5TKElfU0VUU0lHKTsKLSAgICBJTlMoSV9HRVRTSUcpOwotICAgIElOUyhJX0ZJTkQpOwotICAgIElOUyhJX1BFRUspOwotICAgIElOUyhJX1NSRE9QVCk7Ci0gICAgSU5TKElfR1JET1BUKTsKLSAgICBJTlMoSV9OUkVBRCk7Ci0gICAgSU5TKElfRkRJTlNFUlQpOwotICAgIElOUyhJX1NUUik7Ci0gICAgSU5TKElfU1dST1BUKTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSV9QVVNIKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJX1BPUCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSV9MT09LKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJX0ZMVVNIKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJX0ZMVVNIQkFORCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSV9TRVRTSUcpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElfR0VUU0lHKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJX0ZJTkQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElfUEVFSykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSV9TUkRPUFQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElfR1JET1BUKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJX05SRUFEKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJX0ZESU5TRVJUKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJX1NUUikpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSV9TV1JPUFQpKSByZXR1cm4gLTE7CiAjaWZkZWYgSV9HV1JPUFQKICAgICAvKiBkZXNwaXRlIHRoZSBjb21tZW50IGFib3ZlLCBvbGQtaXNoIGdsaWJjcyBtaXNzIGEgY291cGxlLi4uICovCi0gICAgSU5TKElfR1dST1BUKTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSV9HV1JPUFQpKSByZXR1cm4gLTE7CiAjZW5kaWYKLSAgICBJTlMoSV9TRU5ERkQpOwotICAgIElOUyhJX1JFQ1ZGRCk7Ci0gICAgSU5TKElfTElTVCk7Ci0gICAgSU5TKElfQVRNQVJLKTsKLSAgICBJTlMoSV9DS0JBTkQpOwotICAgIElOUyhJX0dFVEJBTkQpOwotICAgIElOUyhJX0NBTlBVVCk7Ci0gICAgSU5TKElfU0VUQ0xUSU1FKTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSV9TRU5ERkQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElfUkVDVkZEKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJX0xJU1QpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElfQVRNQVJLKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJX0NLQkFORCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSV9HRVRCQU5EKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJX0NBTlBVVCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSV9TRVRDTFRJTUUpKSByZXR1cm4gLTE7CiAjaWZkZWYgSV9HRVRDTFRJTUUKLSAgICBJTlMoSV9HRVRDTFRJTUUpOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJX0dFVENMVElNRSkpIHJldHVybiAtMTsKICNlbmRpZgotICAgIElOUyhJX0xJTkspOwotICAgIElOUyhJX1VOTElOSyk7Ci0gICAgSU5TKElfUExJTkspOwotICAgIElOUyhJX1BVTkxJTkspOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJX0xJTkspKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElfVU5MSU5LKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJX1BMSU5LKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJX1BVTkxJTkspKSByZXR1cm4gLTE7CiAjZW5kaWYKIAogICAgIHJldHVybiAwOwpAQCAtNjM1LDcgKzYxNiw3IEBACiBQeU1PRElOSVRfRlVOQwogUHlJbml0X2ZjbnRsKHZvaWQpCiB7Ci0gICAgUHlPYmplY3QgKm0sICpkOworICAgIFB5T2JqZWN0ICptOwogCiAgICAgLyogQ3JlYXRlIHRoZSBtb2R1bGUgYW5kIGFkZCB0aGUgZnVuY3Rpb25zIGFuZCBkb2N1bWVudGF0aW9uICovCiAgICAgbSA9IFB5TW9kdWxlX0NyZWF0ZSgmZmNudGxtb2R1bGUpOwpAQCAtNjQzLDcgKzYyNCw4IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgLyogQWRkIHNvbWUgc3ltYm9saWMgY29uc3RhbnRzIHRvIHRoZSBtb2R1bGUgKi8KLSAgICBkID0gUHlNb2R1bGVfR2V0RGljdChtKTsKLSAgICBhbGxfaW5zKGQpOworICAgIGlmIChhbGxfaW5zKG0pIDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKICAgICByZXR1cm4gbTsKIH0KZGlmZiAtLWdpdCBhL01vZHVsZXMvZnBlY3RsbW9kdWxlLmMgYi9Nb2R1bGVzL2ZwZWN0bG1vZHVsZS5jCmluZGV4IDZhZjJmODIuLjA1MmI4MzQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvZnBlY3RsbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9mcGVjdGxtb2R1bGUuYwpAQCAtNzAsMTAgKzcwLDYgQEAKIAogI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCiAjICBpbmNsdWRlIDxpZWVlZnAuaD4KLSNlbGlmIGRlZmluZWQoX19WTVMpCi0jZGVmaW5lIF9fTkVXX1NUQVJMRVQKLSNpbmNsdWRlIDxzdGFybGV0Lmg+Ci0jaW5jbHVkZSA8aWVlZWRlZi5oPgogI2VuZGlmCiAKICNpZm5kZWYgV0FOVF9TSUdGUEVfSEFORExFUgpAQCAtMTgyLDIzICsxNzgsNiBAQAogICAgIGllZWVfc2V0X2ZwX2NvbnRyb2woZnBfY29udHJvbCk7CiAgICAgUHlPU19zZXRzaWcoU0lHRlBFLCBoYW5kbGVyKTsKIAotLyotLSBERUMgQUxQSEEgVk1TIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSNlbGlmIGRlZmluZWQoX19BTFBIQSkgJiYgZGVmaW5lZChfX1ZNUykKLSAgICAgICAgSUVFRSBjbHJtc2s7Ci0gICAgICAgIElFRUUgc2V0bXNrOwotICAgICAgICBjbHJtc2suaWVlZSRxX2ZsYWdzID0KLSAgICAgICAgICAgICAgICBJRUVFJE1fVFJBUF9FTkFCTEVfVU5GIHwgIElFRUUkTV9UUkFQX0VOQUJMRV9JTkUgfAotICAgICAgICAgICAgICAgICBJRUVFJE1fTUFQX1VNWjsKLSAgICAgICAgc2V0bXNrLmllZWUkcV9mbGFncyA9Ci0gICAgICAgICAgICAgICAgSUVFRSRNX1RSQVBfRU5BQkxFX0lOViB8IElFRUUkTV9UUkFQX0VOQUJMRV9EWkUgfAotICAgICAgICAgICAgICAgIElFRUUkTV9UUkFQX0VOQUJMRV9PVkY7Ci0gICAgICAgIHN5cyRpZWVlX3NldF9mcF9jb250cm9sKCZjbHJtc2ssICZzZXRtc2ssIDApOwotICAgICAgICBQeU9TX3NldHNpZyhTSUdGUEUsIGhhbmRsZXIpOwotCi0vKi0tIEhQIElBNjQgVk1TIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSNlbGlmIGRlZmluZWQoX19pYTY0KSAmJiBkZWZpbmVkKF9fVk1TKQotICAgIFB5T1Nfc2V0c2lnKFNJR0ZQRSwgaGFuZGxlcik7Ci0KIC8qLS0gQ3JheSBVbmljb3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAjZWxpZiBkZWZpbmVkKGNyYXkpCiAgICAgLyogVU5JQ09TIGRlbGl2ZXJzIFNJR0ZQRSBieSBkZWZhdWx0LCBidXQgbm8gbWF0aGVyciAqLwpAQCAtMjUxLDE0ICsyMzAsNiBAQAogI2lmZGVmIF9fRnJlZUJTRF9fCiAgICAgZnByZXNldHN0aWNreShmcGdldHN0aWNreSgpKTsKICAgICBmcHNldG1hc2soMCk7Ci0jZWxpZiBkZWZpbmVkKF9fVk1TKQotICAgICAgICBJRUVFIGNscm1zazsKLSAgICAgICAgIGNscm1zay5pZWVlJHFfZmxhZ3MgPQotICAgICAgICAgICAgICAgIElFRUUkTV9UUkFQX0VOQUJMRV9VTkYgfCAgSUVFRSRNX1RSQVBfRU5BQkxFX0lORSB8Ci0gICAgICAgICAgICAgICAgSUVFRSRNX01BUF9VTVogfCBJRUVFJE1fVFJBUF9FTkFCTEVfSU5WIHwKLSAgICAgICAgICAgICAgICBJRUVFJE1fVFJBUF9FTkFCTEVfRFpFIHwgSUVFRSRNX1RSQVBfRU5BQkxFX09WRiB8Ci0gICAgICAgICAgICAgICAgSUVFRSRNX0lOSEVSSVQ7Ci0gICAgICAgIHN5cyRpZWVlX3NldF9mcF9jb250cm9sKCZjbHJtc2ssIDAsIDApOwogI2Vsc2UKICAgICBmcHV0cygiT3BlcmF0aW9uIG5vdCBpbXBsZW1lbnRlZFxuIiwgc3RkZXJyKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9nY21vZHVsZS5jIGIvTW9kdWxlcy9nY21vZHVsZS5jCmluZGV4IGM2NmRkMzguLjliYjM2NjYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvZ2Ntb2R1bGUuYworKysgYi9Nb2R1bGVzL2djbW9kdWxlLmMKQEAgLTE2OCw2ICsxNjgsMTggQEAKIHN0YXRpYyBpbnQgZGVidWc7CiBzdGF0aWMgUHlPYmplY3QgKnRtb2QgPSBOVUxMOwogCisvKiBSdW5uaW5nIHN0YXRzIHBlciBnZW5lcmF0aW9uICovCitzdHJ1Y3QgZ2NfZ2VuZXJhdGlvbl9zdGF0cyB7CisgICAgLyogdG90YWwgbnVtYmVyIG9mIGNvbGxlY3Rpb25zICovCisgICAgUHlfc3NpemVfdCBjb2xsZWN0aW9uczsKKyAgICAvKiB0b3RhbCBudW1iZXIgb2YgY29sbGVjdGVkIG9iamVjdHMgKi8KKyAgICBQeV9zc2l6ZV90IGNvbGxlY3RlZDsKKyAgICAvKiB0b3RhbCBudW1iZXIgb2YgdW5jb2xsZWN0YWJsZSBvYmplY3RzIChwdXQgaW50byBnYy5nYXJiYWdlKSAqLworICAgIFB5X3NzaXplX3QgdW5jb2xsZWN0YWJsZTsKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ2NfZ2VuZXJhdGlvbl9zdGF0cyBnZW5lcmF0aW9uX3N0YXRzW05VTV9HRU5FUkFUSU9OU107CisKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIGdjX3JlZnMgdmFsdWVzLgogCkBAIC0yMTEsMTAgKzIyMywxMCBAQAogI2RlZmluZSBHQ19SRUFDSEFCTEUgICAgICAgICAgICAgICAgICAgIF9QeUdDX1JFRlNfUkVBQ0hBQkxFCiAjZGVmaW5lIEdDX1RFTlRBVElWRUxZX1VOUkVBQ0hBQkxFICAgICAgX1B5R0NfUkVGU19URU5UQVRJVkVMWV9VTlJFQUNIQUJMRQogCi0jZGVmaW5lIElTX1RSQUNLRUQobykgKChBU19HQyhvKSktPmdjLmdjX3JlZnMgIT0gR0NfVU5UUkFDS0VEKQotI2RlZmluZSBJU19SRUFDSEFCTEUobykgKChBU19HQyhvKSktPmdjLmdjX3JlZnMgPT0gR0NfUkVBQ0hBQkxFKQorI2RlZmluZSBJU19UUkFDS0VEKG8pIChfUHlHQ19SRUZTKG8pICE9IEdDX1VOVFJBQ0tFRCkKKyNkZWZpbmUgSVNfUkVBQ0hBQkxFKG8pIChfUHlHQ19SRUZTKG8pID09IEdDX1JFQUNIQUJMRSkKICNkZWZpbmUgSVNfVEVOVEFUSVZFTFlfVU5SRUFDSEFCTEUobykgKCBcCi0gICAgKEFTX0dDKG8pKS0+Z2MuZ2NfcmVmcyA9PSBHQ19URU5UQVRJVkVMWV9VTlJFQUNIQUJMRSkKKyAgICBfUHlHQ19SRUZTKG8pID09IEdDX1RFTlRBVElWRUxZX1VOUkVBQ0hBQkxFKQogCiAvKioqIGxpc3QgZnVuY3Rpb25zICoqKi8KIApAQCAtMzI5LDggKzM0MSw4IEBACiB7CiAgICAgUHlHQ19IZWFkICpnYyA9IGNvbnRhaW5lcnMtPmdjLmdjX25leHQ7CiAgICAgZm9yICg7IGdjICE9IGNvbnRhaW5lcnM7IGdjID0gZ2MtPmdjLmdjX25leHQpIHsKLSAgICAgICAgYXNzZXJ0KGdjLT5nYy5nY19yZWZzID09IEdDX1JFQUNIQUJMRSk7Ci0gICAgICAgIGdjLT5nYy5nY19yZWZzID0gUHlfUkVGQ05UKEZST01fR0MoZ2MpKTsKKyAgICAgICAgYXNzZXJ0KF9QeUdDSGVhZF9SRUZTKGdjKSA9PSBHQ19SRUFDSEFCTEUpOworICAgICAgICBfUHlHQ0hlYWRfU0VUX1JFRlMoZ2MsIFB5X1JFRkNOVChGUk9NX0dDKGdjKSkpOwogICAgICAgICAvKiBQeXRob24ncyBjeWNsaWMgZ2Mgc2hvdWxkIG5ldmVyIHNlZSBhbiBpbmNvbWluZyByZWZjb3VudAogICAgICAgICAgKiBvZiAwOiAgaWYgc29tZXRoaW5nIGRlY3JlZidlZCB0byAwLCBpdCBzaG91bGQgaGF2ZSBiZWVuCiAgICAgICAgICAqIGRlYWxsb2NhdGVkIGltbWVkaWF0ZWx5IGF0IHRoYXQgdGltZS4KQEAgLTM0OSw3ICszNjEsNyBAQAogICAgICAgICAgKiBzbyBzZXJpb3VzIHRoYXQgbWF5YmUgdGhpcyBzaG91bGQgYmUgYSByZWxlYXNlLWJ1aWxkCiAgICAgICAgICAqIGNoZWNrIGluc3RlYWQgb2YgYW4gYXNzZXJ0PwogICAgICAgICAgKi8KLSAgICAgICAgYXNzZXJ0KGdjLT5nYy5nY19yZWZzICE9IDApOworICAgICAgICBhc3NlcnQoX1B5R0NIZWFkX1JFRlMoZ2MpICE9IDApOwogICAgIH0KIH0KIApAQCAtMzY0LDkgKzM3Niw5IEBACiAgICAgICAgICAqIGdlbmVyYXRpb24gYmVpbmcgY29sbGVjdGVkLCB3aGljaCBjYW4gYmUgcmVjb2duaXplZAogICAgICAgICAgKiBiZWNhdXNlIG9ubHkgdGhleSBoYXZlIHBvc2l0aXZlIGdjX3JlZnMuCiAgICAgICAgICAqLwotICAgICAgICBhc3NlcnQoZ2MtPmdjLmdjX3JlZnMgIT0gMCk7IC8qIGVsc2UgcmVmY291bnQgd2FzIHRvbyBzbWFsbCAqLwotICAgICAgICBpZiAoZ2MtPmdjLmdjX3JlZnMgPiAwKQotICAgICAgICAgICAgZ2MtPmdjLmdjX3JlZnMtLTsKKyAgICAgICAgYXNzZXJ0KF9QeUdDSGVhZF9SRUZTKGdjKSAhPSAwKTsgLyogZWxzZSByZWZjb3VudCB3YXMgdG9vIHNtYWxsICovCisgICAgICAgIGlmIChfUHlHQ0hlYWRfUkVGUyhnYykgPiAwKQorICAgICAgICAgICAgX1B5R0NIZWFkX0RFQ1JFRihnYyk7CiAgICAgfQogICAgIHJldHVybiAwOwogfQpAQCAtMzk1LDcgKzQwNyw3IEBACiB7CiAgICAgaWYgKFB5T2JqZWN0X0lTX0dDKG9wKSkgewogICAgICAgICBQeUdDX0hlYWQgKmdjID0gQVNfR0Mob3ApOwotICAgICAgICBjb25zdCBQeV9zc2l6ZV90IGdjX3JlZnMgPSBnYy0+Z2MuZ2NfcmVmczsKKyAgICAgICAgY29uc3QgUHlfc3NpemVfdCBnY19yZWZzID0gX1B5R0NIZWFkX1JFRlMoZ2MpOwogCiAgICAgICAgIGlmIChnY19yZWZzID09IDApIHsKICAgICAgICAgICAgIC8qIFRoaXMgaXMgaW4gbW92ZV91bnJlYWNoYWJsZSdzICd5b3VuZycgbGlzdCwgYnV0CkBAIC00MDMsNyArNDE1LDcgQEAKICAgICAgICAgICAgICAqIHdlIG5lZWQgdG8gZG8gaXMgdGVsbCBtb3ZlX3VucmVhY2hhYmxlIHRoYXQgaXQncwogICAgICAgICAgICAgICogcmVhY2hhYmxlLgogICAgICAgICAgICAgICovCi0gICAgICAgICAgICBnYy0+Z2MuZ2NfcmVmcyA9IDE7CisgICAgICAgICAgICBfUHlHQ0hlYWRfU0VUX1JFRlMoZ2MsIDEpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKGdjX3JlZnMgPT0gR0NfVEVOVEFUSVZFTFlfVU5SRUFDSEFCTEUpIHsKICAgICAgICAgICAgIC8qIFRoaXMgaGFkIGdjX3JlZnMgPSAwIHdoZW4gbW92ZV91bnJlYWNoYWJsZSBnb3QKQEAgLTQxMyw3ICs0MjUsNyBAQAogICAgICAgICAgICAgICogYWdhaW4uCiAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgIGdjX2xpc3RfbW92ZShnYywgcmVhY2hhYmxlKTsKLSAgICAgICAgICAgIGdjLT5nYy5nY19yZWZzID0gMTsKKyAgICAgICAgICAgIF9QeUdDSGVhZF9TRVRfUkVGUyhnYywgMSk7CiAgICAgICAgIH0KICAgICAgICAgLyogRWxzZSB0aGVyZSdzIG5vdGhpbmcgdG8gZG8uCiAgICAgICAgICAqIElmIGdjX3JlZnMgPiAwLCBpdCBtdXN0IGJlIGluIG1vdmVfdW5yZWFjaGFibGUncyAneW91bmcnCkBAIC00NTcsNyArNDY5LDcgQEAKICAgICB3aGlsZSAoZ2MgIT0geW91bmcpIHsKICAgICAgICAgUHlHQ19IZWFkICpuZXh0OwogCi0gICAgICAgIGlmIChnYy0+Z2MuZ2NfcmVmcykgeworICAgICAgICBpZiAoX1B5R0NIZWFkX1JFRlMoZ2MpKSB7CiAgICAgICAgICAgICAvKiBnYyBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBmcm9tIG91dHNpZGUgdGhlCiAgICAgICAgICAgICAgKiBvcmlnaW5hbCAneW91bmcnLiAgTWFyayBpdCBhcyBzdWNoLCBhbmQgdHJhdmVyc2UKICAgICAgICAgICAgICAqIGl0cyBwb2ludGVycyB0byBmaW5kIGFueSBvdGhlciBvYmplY3RzIHRoYXQgbWF5CkBAIC00NjgsOCArNDgwLDggQEAKICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgUHlPYmplY3QgKm9wID0gRlJPTV9HQyhnYyk7CiAgICAgICAgICAgICB0cmF2ZXJzZXByb2MgdHJhdmVyc2UgPSBQeV9UWVBFKG9wKS0+dHBfdHJhdmVyc2U7Ci0gICAgICAgICAgICBhc3NlcnQoZ2MtPmdjLmdjX3JlZnMgPiAwKTsKLSAgICAgICAgICAgIGdjLT5nYy5nY19yZWZzID0gR0NfUkVBQ0hBQkxFOworICAgICAgICAgICAgYXNzZXJ0KF9QeUdDSGVhZF9SRUZTKGdjKSA+IDApOworICAgICAgICAgICAgX1B5R0NIZWFkX1NFVF9SRUZTKGdjLCBHQ19SRUFDSEFCTEUpOwogICAgICAgICAgICAgKHZvaWQpIHRyYXZlcnNlKG9wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2aXNpdHByb2MpdmlzaXRfcmVhY2hhYmxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICopeW91bmcpOwpAQCAtNDg4LDcgKzUwMCw3IEBACiAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgIG5leHQgPSBnYy0+Z2MuZ2NfbmV4dDsKICAgICAgICAgICAgIGdjX2xpc3RfbW92ZShnYywgdW5yZWFjaGFibGUpOwotICAgICAgICAgICAgZ2MtPmdjLmdjX3JlZnMgPSBHQ19URU5UQVRJVkVMWV9VTlJFQUNIQUJMRTsKKyAgICAgICAgICAgIF9QeUdDSGVhZF9TRVRfUkVGUyhnYywgR0NfVEVOVEFUSVZFTFlfVU5SRUFDSEFCTEUpOwogICAgICAgICB9CiAgICAgICAgIGdjID0gbmV4dDsKICAgICB9CkBAIC01MDgsMjIgKzUyMCwxOSBAQAogICAgIH0KIH0KIAotLyogUmV0dXJuIHRydWUgaWYgb2JqZWN0IGhhcyBhIGZpbmFsaXphdGlvbiBtZXRob2QuICovCisvKiBSZXR1cm4gdHJ1ZSBpZiBvYmplY3QgaGFzIGEgcHJlLVBFUCA0NDIgZmluYWxpemF0aW9uIG1ldGhvZC4gKi8KIHN0YXRpYyBpbnQKLWhhc19maW5hbGl6ZXIoUHlPYmplY3QgKm9wKQoraGFzX2xlZ2FjeV9maW5hbGl6ZXIoUHlPYmplY3QgKm9wKQogewotICAgIGlmIChQeUdlbl9DaGVja0V4YWN0KG9wKSkKLSAgICAgICAgcmV0dXJuIFB5R2VuX05lZWRzRmluYWxpemluZygoUHlHZW5PYmplY3QgKilvcCk7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gb3AtPm9iX3R5cGUtPnRwX2RlbCAhPSBOVUxMOworICAgIHJldHVybiBvcC0+b2JfdHlwZS0+dHBfZGVsICE9IE5VTEw7CiB9CiAKLS8qIE1vdmUgdGhlIG9iamVjdHMgaW4gdW5yZWFjaGFibGUgd2l0aCBfX2RlbF9fIG1ldGhvZHMgaW50byBgZmluYWxpemVyc2AuCisvKiBNb3ZlIHRoZSBvYmplY3RzIGluIHVucmVhY2hhYmxlIHdpdGggdHBfZGVsIHNsb3RzIGludG8gYGZpbmFsaXplcnNgLgogICogT2JqZWN0cyBtb3ZlZCBpbnRvIGBmaW5hbGl6ZXJzYCBoYXZlIGdjX3JlZnMgc2V0IHRvIEdDX1JFQUNIQUJMRTsgdGhlCiAgKiBvYmplY3RzIHJlbWFpbmluZyBpbiB1bnJlYWNoYWJsZSBhcmUgbGVmdCBhdCBHQ19URU5UQVRJVkVMWV9VTlJFQUNIQUJMRS4KICAqLwogc3RhdGljIHZvaWQKLW1vdmVfZmluYWxpemVycyhQeUdDX0hlYWQgKnVucmVhY2hhYmxlLCBQeUdDX0hlYWQgKmZpbmFsaXplcnMpCittb3ZlX2xlZ2FjeV9maW5hbGl6ZXJzKFB5R0NfSGVhZCAqdW5yZWFjaGFibGUsIFB5R0NfSGVhZCAqZmluYWxpemVycykKIHsKICAgICBQeUdDX0hlYWQgKmdjOwogICAgIFB5R0NfSGVhZCAqbmV4dDsKQEAgLTUzNywxNCArNTQ2LDE0IEBACiAgICAgICAgIGFzc2VydChJU19URU5UQVRJVkVMWV9VTlJFQUNIQUJMRShvcCkpOwogICAgICAgICBuZXh0ID0gZ2MtPmdjLmdjX25leHQ7CiAKLSAgICAgICAgaWYgKGhhc19maW5hbGl6ZXIob3ApKSB7CisgICAgICAgIGlmIChoYXNfbGVnYWN5X2ZpbmFsaXplcihvcCkpIHsKICAgICAgICAgICAgIGdjX2xpc3RfbW92ZShnYywgZmluYWxpemVycyk7Ci0gICAgICAgICAgICBnYy0+Z2MuZ2NfcmVmcyA9IEdDX1JFQUNIQUJMRTsKKyAgICAgICAgICAgIF9QeUdDSGVhZF9TRVRfUkVGUyhnYywgR0NfUkVBQ0hBQkxFKTsKICAgICAgICAgfQogICAgIH0KIH0KIAotLyogQSB0cmF2ZXJzYWwgY2FsbGJhY2sgZm9yIG1vdmVfZmluYWxpemVyX3JlYWNoYWJsZS4gKi8KKy8qIEEgdHJhdmVyc2FsIGNhbGxiYWNrIGZvciBtb3ZlX2xlZ2FjeV9maW5hbGl6ZXJfcmVhY2hhYmxlLiAqLwogc3RhdGljIGludAogdmlzaXRfbW92ZShQeU9iamVjdCAqb3AsIFB5R0NfSGVhZCAqdG9saXN0KQogewpAQCAtNTUyLDcgKzU2MSw3IEBACiAgICAgICAgIGlmIChJU19URU5UQVRJVkVMWV9VTlJFQUNIQUJMRShvcCkpIHsKICAgICAgICAgICAgIFB5R0NfSGVhZCAqZ2MgPSBBU19HQyhvcCk7CiAgICAgICAgICAgICBnY19saXN0X21vdmUoZ2MsIHRvbGlzdCk7Ci0gICAgICAgICAgICBnYy0+Z2MuZ2NfcmVmcyA9IEdDX1JFQUNIQUJMRTsKKyAgICAgICAgICAgIF9QeUdDSGVhZF9TRVRfUkVGUyhnYywgR0NfUkVBQ0hBQkxFKTsKICAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gMDsKQEAgLTU2Miw3ICs1NzEsNyBAQAogICogaW50byBmaW5hbGl6ZXJzIHNldC4KICAqLwogc3RhdGljIHZvaWQKLW1vdmVfZmluYWxpemVyX3JlYWNoYWJsZShQeUdDX0hlYWQgKmZpbmFsaXplcnMpCittb3ZlX2xlZ2FjeV9maW5hbGl6ZXJfcmVhY2hhYmxlKFB5R0NfSGVhZCAqZmluYWxpemVycykKIHsKICAgICB0cmF2ZXJzZXByb2MgdHJhdmVyc2U7CiAgICAgUHlHQ19IZWFkICpnYyA9IGZpbmFsaXplcnMtPmdjLmdjX25leHQ7CkBAIC03MzUsNyArNzQ0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgbXNnLCBQeV9UWVBFKG9wKS0+dHBfbmFtZSwgb3ApOwogfQogCi0vKiBIYW5kbGUgdW5jb2xsZWN0YWJsZSBnYXJiYWdlIChjeWNsZXMgd2l0aCBmaW5hbGl6ZXJzLCBhbmQgc3R1ZmYgcmVhY2hhYmxlCisvKiBIYW5kbGUgdW5jb2xsZWN0YWJsZSBnYXJiYWdlIChjeWNsZXMgd2l0aCB0cF9kZWwgc2xvdHMsIGFuZCBzdHVmZiByZWFjaGFibGUKICAqIG9ubHkgZnJvbSBzdWNoIGN5Y2xlcykuCiAgKiBJZiBERUJVR19TQVZFQUxMLCBhbGwgb2JqZWN0cyBpbiBmaW5hbGl6ZXJzIGFyZSBhcHBlbmRlZCB0byB0aGUgbW9kdWxlCiAgKiBnYXJiYWdlIGxpc3QgKGEgUHl0aG9uIGxpc3QpLCBlbHNlIG9ubHkgdGhlIG9iamVjdHMgaW4gZmluYWxpemVycyB3aXRoCkBAIC03NDUsNyArNzU0LDcgQEAKICAqIFRoZSBmaW5hbGl6ZXJzIGxpc3QgaXMgbWFkZSBlbXB0eSBvbiBhIHN1Y2Nlc3NmdWwgcmV0dXJuLgogICovCiBzdGF0aWMgaW50Ci1oYW5kbGVfZmluYWxpemVycyhQeUdDX0hlYWQgKmZpbmFsaXplcnMsIFB5R0NfSGVhZCAqb2xkKQoraGFuZGxlX2xlZ2FjeV9maW5hbGl6ZXJzKFB5R0NfSGVhZCAqZmluYWxpemVycywgUHlHQ19IZWFkICpvbGQpCiB7CiAgICAgUHlHQ19IZWFkICpnYyA9IGZpbmFsaXplcnMtPmdjLmdjX25leHQ7CiAKQEAgLTc1Nyw3ICs3NjYsNyBAQAogICAgIGZvciAoOyBnYyAhPSBmaW5hbGl6ZXJzOyBnYyA9IGdjLT5nYy5nY19uZXh0KSB7CiAgICAgICAgIFB5T2JqZWN0ICpvcCA9IEZST01fR0MoZ2MpOwogCi0gICAgICAgIGlmICgoZGVidWcgJiBERUJVR19TQVZFQUxMKSB8fCBoYXNfZmluYWxpemVyKG9wKSkgeworICAgICAgICBpZiAoKGRlYnVnICYgREVCVUdfU0FWRUFMTCkgfHwgaGFzX2xlZ2FjeV9maW5hbGl6ZXIob3ApKSB7CiAgICAgICAgICAgICBpZiAoUHlMaXN0X0FwcGVuZChnYXJiYWdlLCBvcCkgPCAwKQogICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQpAQCAtNzY3LDYgKzc3Niw3NCBAQAogICAgIHJldHVybiAwOwogfQogCisvKiBSdW4gZmlyc3QtdGltZSBmaW5hbGl6ZXJzIChpZiBhbnkpIG9uIGFsbCB0aGUgb2JqZWN0cyBpbiBjb2xsZWN0YWJsZS4KKyAqIE5vdGUgdGhhdCB0aGlzIG1heSByZW1vdmUgc29tZSAob3IgZXZlbiBhbGwpIG9mIHRoZSBvYmplY3RzIGZyb20gdGhlCisgKiBsaXN0LCBkdWUgdG8gcmVmY291bnRzIGZhbGxpbmcgdG8gMC4KKyAqLworc3RhdGljIHZvaWQKK2ZpbmFsaXplX2dhcmJhZ2UoUHlHQ19IZWFkICpjb2xsZWN0YWJsZSkKK3sKKyAgICBkZXN0cnVjdG9yIGZpbmFsaXplOworICAgIFB5R0NfSGVhZCBzZWVuOworCisgICAgLyogV2hpbGUgd2UncmUgZ29pbmcgdGhyb3VnaCB0aGUgbG9vcCwgYGZpbmFsaXplKG9wKWAgbWF5IGNhdXNlIG9wLCBvcgorICAgICAqIG90aGVyIG9iamVjdHMsIHRvIGJlIHJlY2xhaW1lZCB2aWEgcmVmY291bnRzIGZhbGxpbmcgdG8gemVyby4gIFNvCisgICAgICogdGhlcmUncyBsaXR0bGUgd2UgY2FuIHJlbHkgb24gYWJvdXQgdGhlIHN0cnVjdHVyZSBvZiB0aGUgaW5wdXQKKyAgICAgKiBgY29sbGVjdGFibGVgIGxpc3QgYWNyb3NzIGl0ZXJhdGlvbnMuICBGb3Igc2FmZXR5LCB3ZSBhbHdheXMgdGFrZSB0aGUKKyAgICAgKiBmaXJzdCBvYmplY3QgaW4gdGhhdCBsaXN0IGFuZCBtb3ZlIGl0IHRvIGEgdGVtcG9yYXJ5IGBzZWVuYCBsaXN0LgorICAgICAqIElmIG9iamVjdHMgdmFuaXNoIGZyb20gdGhlIGBjb2xsZWN0YWJsZWAgYW5kIGBzZWVuYCBsaXN0cyB3ZSBkb24ndAorICAgICAqIGNhcmUuCisgICAgICovCisgICAgZ2NfbGlzdF9pbml0KCZzZWVuKTsKKworICAgIHdoaWxlICghZ2NfbGlzdF9pc19lbXB0eShjb2xsZWN0YWJsZSkpIHsKKyAgICAgICAgUHlHQ19IZWFkICpnYyA9IGNvbGxlY3RhYmxlLT5nYy5nY19uZXh0OworICAgICAgICBQeU9iamVjdCAqb3AgPSBGUk9NX0dDKGdjKTsKKyAgICAgICAgZ2NfbGlzdF9tb3ZlKGdjLCAmc2Vlbik7CisgICAgICAgIGlmICghX1B5R0NIZWFkX0ZJTkFMSVpFRChnYykgJiYKKyAgICAgICAgICAgICAgICBQeVR5cGVfSGFzRmVhdHVyZShQeV9UWVBFKG9wKSwgUHlfVFBGTEFHU19IQVZFX0ZJTkFMSVpFKSAmJgorICAgICAgICAgICAgICAgIChmaW5hbGl6ZSA9IFB5X1RZUEUob3ApLT50cF9maW5hbGl6ZSkgIT0gTlVMTCkgeworICAgICAgICAgICAgX1B5R0NIZWFkX1NFVF9GSU5BTElaRUQoZ2MsIDEpOworICAgICAgICAgICAgUHlfSU5DUkVGKG9wKTsKKyAgICAgICAgICAgIGZpbmFsaXplKG9wKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihvcCk7CisgICAgICAgIH0KKyAgICB9CisgICAgZ2NfbGlzdF9tZXJnZSgmc2VlbiwgY29sbGVjdGFibGUpOworfQorCisvKiBXYWxrIHRoZSBjb2xsZWN0YWJsZSBsaXN0IGFuZCBjaGVjayB0aGF0IHRoZXkgYXJlIHJlYWxseSB1bnJlYWNoYWJsZQorICAgZnJvbSB0aGUgb3V0c2lkZSAoc29tZSBvYmplY3RzIGNvdWxkIGhhdmUgYmVlbiByZXN1cnJlY3RlZCBieSBhCisgICBmaW5hbGl6ZXIpLiAqLworc3RhdGljIGludAorY2hlY2tfZ2FyYmFnZShQeUdDX0hlYWQgKmNvbGxlY3RhYmxlKQoreworICAgIFB5R0NfSGVhZCAqZ2M7CisgICAgZm9yIChnYyA9IGNvbGxlY3RhYmxlLT5nYy5nY19uZXh0OyBnYyAhPSBjb2xsZWN0YWJsZTsKKyAgICAgICAgIGdjID0gZ2MtPmdjLmdjX25leHQpIHsKKyAgICAgICAgX1B5R0NIZWFkX1NFVF9SRUZTKGdjLCBQeV9SRUZDTlQoRlJPTV9HQyhnYykpKTsKKyAgICAgICAgYXNzZXJ0KF9QeUdDSGVhZF9SRUZTKGdjKSAhPSAwKTsKKyAgICB9CisgICAgc3VidHJhY3RfcmVmcyhjb2xsZWN0YWJsZSk7CisgICAgZm9yIChnYyA9IGNvbGxlY3RhYmxlLT5nYy5nY19uZXh0OyBnYyAhPSBjb2xsZWN0YWJsZTsKKyAgICAgICAgIGdjID0gZ2MtPmdjLmdjX25leHQpIHsKKyAgICAgICAgYXNzZXJ0KF9QeUdDSGVhZF9SRUZTKGdjKSA+PSAwKTsKKyAgICAgICAgaWYgKF9QeUdDSGVhZF9SRUZTKGdjKSAhPSAwKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK3Jldml2ZV9nYXJiYWdlKFB5R0NfSGVhZCAqY29sbGVjdGFibGUpCit7CisgICAgUHlHQ19IZWFkICpnYzsKKyAgICBmb3IgKGdjID0gY29sbGVjdGFibGUtPmdjLmdjX25leHQ7IGdjICE9IGNvbGxlY3RhYmxlOworICAgICAgICAgZ2MgPSBnYy0+Z2MuZ2NfbmV4dCkgeworICAgICAgICBfUHlHQ0hlYWRfU0VUX1JFRlMoZ2MsIEdDX1JFQUNIQUJMRSk7CisgICAgfQorfQorCiAvKiBCcmVhayByZWZlcmVuY2UgY3ljbGVzIGJ5IGNsZWFyaW5nIHRoZSBjb250YWluZXJzIGludm9sdmVkLiAgVGhpcyBpcwogICogdHJpY2t5IGJ1c2luZXNzIGFzIHRoZSBsaXN0cyBjYW4gYmUgY2hhbmdpbmcgYW5kIHdlIGRvbid0IGtub3cgd2hpY2gKICAqIG9iamVjdHMgbWF5IGJlIGZyZWVkLiAgSXQgaXMgcG9zc2libGUgSSBzY3Jld2VkIHNvbWV0aGluZyB1cCBoZXJlLgpAQCAtNzgwLDcgKzg1Nyw2IEBACiAgICAgICAgIFB5R0NfSGVhZCAqZ2MgPSBjb2xsZWN0YWJsZS0+Z2MuZ2NfbmV4dDsKICAgICAgICAgUHlPYmplY3QgKm9wID0gRlJPTV9HQyhnYyk7CiAKLSAgICAgICAgYXNzZXJ0KElTX1RFTlRBVElWRUxZX1VOUkVBQ0hBQkxFKG9wKSk7CiAgICAgICAgIGlmIChkZWJ1ZyAmIERFQlVHX1NBVkVBTEwpIHsKICAgICAgICAgICAgIFB5TGlzdF9BcHBlbmQoZ2FyYmFnZSwgb3ApOwogICAgICAgICB9CkBAIC03OTQsNyArODcwLDcgQEAKICAgICAgICAgaWYgKGNvbGxlY3RhYmxlLT5nYy5nY19uZXh0ID09IGdjKSB7CiAgICAgICAgICAgICAvKiBvYmplY3QgaXMgc3RpbGwgYWxpdmUsIG1vdmUgaXQsIGl0IG1heSBkaWUgbGF0ZXIgKi8KICAgICAgICAgICAgIGdjX2xpc3RfbW92ZShnYywgb2xkKTsKLSAgICAgICAgICAgIGdjLT5nYy5nY19yZWZzID0gR0NfUkVBQ0hBQkxFOworICAgICAgICAgICAgX1B5R0NIZWFkX1NFVF9SRUZTKGdjLCBHQ19SRUFDSEFCTEUpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtODQxLDcgKzkxNyw4IEBACiAvKiBUaGlzIGlzIHRoZSBtYWluIGZ1bmN0aW9uLiAgUmVhZCB0aGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoZQogICogY29sbGVjdGlvbiBwcm9jZXNzIHdvcmtzLiAqLwogc3RhdGljIFB5X3NzaXplX3QKLWNvbGxlY3QoaW50IGdlbmVyYXRpb24sIFB5X3NzaXplX3QgKm5fY29sbGVjdGVkLCBQeV9zc2l6ZV90ICpuX3VuY29sbGVjdGFibGUpCitjb2xsZWN0KGludCBnZW5lcmF0aW9uLCBQeV9zc2l6ZV90ICpuX2NvbGxlY3RlZCwgUHlfc3NpemVfdCAqbl91bmNvbGxlY3RhYmxlLAorICAgICAgICBpbnQgbm9mYWlsKQogewogICAgIGludCBpOwogICAgIFB5X3NzaXplX3QgbSA9IDA7IC8qICMgb2JqZWN0cyBjb2xsZWN0ZWQgKi8KQEAgLTg1Miw2ICs5MjksNyBAQAogICAgIFB5R0NfSGVhZCBmaW5hbGl6ZXJzOyAgLyogb2JqZWN0cyB3aXRoLCAmIHJlYWNoYWJsZSBmcm9tLCBfX2RlbF9fICovCiAgICAgUHlHQ19IZWFkICpnYzsKICAgICBkb3VibGUgdDEgPSAwLjA7CisgICAgc3RydWN0IGdjX2dlbmVyYXRpb25fc3RhdHMgKnN0YXRzID0gJmdlbmVyYXRpb25fc3RhdHNbZ2VuZXJhdGlvbl07CiAKICAgICBpZiAoZGVidWcgJiBERUJVR19TVEFUUykgewogICAgICAgICBQeVN5c19Xcml0ZVN0ZGVycigiZ2M6IGNvbGxlY3RpbmcgZ2VuZXJhdGlvbiAlZC4uLlxuIiwKQEAgLTkxNSwxOSArOTkzLDE1IEBACiAgICAgfQogCiAgICAgLyogQWxsIG9iamVjdHMgaW4gdW5yZWFjaGFibGUgYXJlIHRyYXNoLCBidXQgb2JqZWN0cyByZWFjaGFibGUgZnJvbQotICAgICAqIGZpbmFsaXplcnMgY2FuJ3Qgc2FmZWx5IGJlIGRlbGV0ZWQuICBQeXRob24gcHJvZ3JhbW1lcnMgc2hvdWxkIHRha2UKLSAgICAgKiBjYXJlIG5vdCB0byBjcmVhdGUgc3VjaCB0aGluZ3MuICBGb3IgUHl0aG9uLCBmaW5hbGl6ZXJzIG1lYW5zCi0gICAgICogaW5zdGFuY2Ugb2JqZWN0cyB3aXRoIF9fZGVsX18gbWV0aG9kcy4gIFdlYWtyZWZzIHdpdGggY2FsbGJhY2tzCi0gICAgICogY2FuIGFsc28gY2FsbCBhcmJpdHJhcnkgUHl0aG9uIGNvZGUgYnV0IHRoZXkgd2lsbCBiZSBkZWFsdCB3aXRoIGJ5Ci0gICAgICogaGFuZGxlX3dlYWtyZWZzKCkuCisgICAgICogbGVnYWN5IGZpbmFsaXplcnMgKGUuZy4gdHBfZGVsKSBjYW4ndCBzYWZlbHkgYmUgZGVsZXRlZC4KICAgICAgKi8KICAgICBnY19saXN0X2luaXQoJmZpbmFsaXplcnMpOwotICAgIG1vdmVfZmluYWxpemVycygmdW5yZWFjaGFibGUsICZmaW5hbGl6ZXJzKTsKLSAgICAvKiBmaW5hbGl6ZXJzIGNvbnRhaW5zIHRoZSB1bnJlYWNoYWJsZSBvYmplY3RzIHdpdGggYSBmaW5hbGl6ZXI7CisgICAgbW92ZV9sZWdhY3lfZmluYWxpemVycygmdW5yZWFjaGFibGUsICZmaW5hbGl6ZXJzKTsKKyAgICAvKiBmaW5hbGl6ZXJzIGNvbnRhaW5zIHRoZSB1bnJlYWNoYWJsZSBvYmplY3RzIHdpdGggYSBsZWdhY3kgZmluYWxpemVyOwogICAgICAqIHVucmVhY2hhYmxlIG9iamVjdHMgcmVhY2hhYmxlICpmcm9tKiB0aG9zZSBhcmUgYWxzbyB1bmNvbGxlY3RhYmxlLAogICAgICAqIGFuZCB3ZSBtb3ZlIHRob3NlIGludG8gdGhlIGZpbmFsaXplcnMgbGlzdCB0b28uCiAgICAgICovCi0gICAgbW92ZV9maW5hbGl6ZXJfcmVhY2hhYmxlKCZmaW5hbGl6ZXJzKTsKKyAgICBtb3ZlX2xlZ2FjeV9maW5hbGl6ZXJfcmVhY2hhYmxlKCZmaW5hbGl6ZXJzKTsKIAogICAgIC8qIENvbGxlY3Qgc3RhdGlzdGljcyBvbiBjb2xsZWN0YWJsZSBvYmplY3RzIGZvdW5kIGFuZCBwcmludAogICAgICAqIGRlYnVnZ2luZyBpbmZvcm1hdGlvbi4KQEAgLTk0MywxMSArMTAxNywyMCBAQAogICAgIC8qIENsZWFyIHdlYWtyZWZzIGFuZCBpbnZva2UgY2FsbGJhY2tzIGFzIG5lY2Vzc2FyeS4gKi8KICAgICBtICs9IGhhbmRsZV93ZWFrcmVmcygmdW5yZWFjaGFibGUsIG9sZCk7CiAKLSAgICAvKiBDYWxsIHRwX2NsZWFyIG9uIG9iamVjdHMgaW4gdGhlIHVucmVhY2hhYmxlIHNldC4gIFRoaXMgd2lsbCBjYXVzZQotICAgICAqIHRoZSByZWZlcmVuY2UgY3ljbGVzIHRvIGJlIGJyb2tlbi4gIEl0IG1heSBhbHNvIGNhdXNlIHNvbWUgb2JqZWN0cwotICAgICAqIGluIGZpbmFsaXplcnMgdG8gYmUgZnJlZWQuCi0gICAgICovCi0gICAgZGVsZXRlX2dhcmJhZ2UoJnVucmVhY2hhYmxlLCBvbGQpOworICAgIC8qIENhbGwgdHBfZmluYWxpemUgb24gb2JqZWN0cyB3aGljaCBoYXZlIG9uZS4gKi8KKyAgICBmaW5hbGl6ZV9nYXJiYWdlKCZ1bnJlYWNoYWJsZSk7CisKKyAgICBpZiAoY2hlY2tfZ2FyYmFnZSgmdW5yZWFjaGFibGUpKSB7CisgICAgICAgIHJldml2ZV9nYXJiYWdlKCZ1bnJlYWNoYWJsZSk7CisgICAgICAgIGdjX2xpc3RfbWVyZ2UoJnVucmVhY2hhYmxlLCBvbGQpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgLyogQ2FsbCB0cF9jbGVhciBvbiBvYmplY3RzIGluIHRoZSB1bnJlYWNoYWJsZSBzZXQuICBUaGlzIHdpbGwgY2F1c2UKKyAgICAgICAgICogdGhlIHJlZmVyZW5jZSBjeWNsZXMgdG8gYmUgYnJva2VuLiAgSXQgbWF5IGFsc28gY2F1c2Ugc29tZSBvYmplY3RzCisgICAgICAgICAqIGluIGZpbmFsaXplcnMgdG8gYmUgZnJlZWQuCisgICAgICAgICAqLworICAgICAgICBkZWxldGVfZ2FyYmFnZSgmdW5yZWFjaGFibGUsIG9sZCk7CisgICAgfQogCiAgICAgLyogQ29sbGVjdCBzdGF0aXN0aWNzIG9uIHVuY29sbGVjdGFibGUgb2JqZWN0cyBmb3VuZCBhbmQgcHJpbnQKICAgICAgKiBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24uICovCkBAIC05NzgsNyArMTA2MSw3IEBACiAgICAgICogcmVhY2hhYmxlIGxpc3Qgb2YgZ2FyYmFnZS4gIFRoZSBwcm9ncmFtbWVyIGhhcyB0byBkZWFsIHdpdGgKICAgICAgKiB0aGlzIGlmIHRoZXkgaW5zaXN0IG9uIGNyZWF0aW5nIHRoaXMgdHlwZSBvZiBzdHJ1Y3R1cmUuCiAgICAgICovCi0gICAgKHZvaWQpaGFuZGxlX2ZpbmFsaXplcnMoJmZpbmFsaXplcnMsIG9sZCk7CisgICAgKHZvaWQpaGFuZGxlX2xlZ2FjeV9maW5hbGl6ZXJzKCZmaW5hbGl6ZXJzLCBvbGQpOwogCiAgICAgLyogQ2xlYXIgZnJlZSBsaXN0IG9ubHkgZHVyaW5nIHRoZSBjb2xsZWN0aW9uIG9mIHRoZSBoaWdoZXN0CiAgICAgICogZ2VuZXJhdGlvbiAqLwpAQCAtOTg3LDE2ICsxMDcwLDI1IEBACiAgICAgfQogCiAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKLSAgICAgICAgaWYgKGdjX3N0ciA9PSBOVUxMKQotICAgICAgICAgICAgZ2Nfc3RyID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoImdhcmJhZ2UgY29sbGVjdGlvbiIpOwotICAgICAgICBQeUVycl9Xcml0ZVVucmFpc2FibGUoZ2Nfc3RyKTsKLSAgICAgICAgUHlfRmF0YWxFcnJvcigidW5leHBlY3RlZCBleGNlcHRpb24gZHVyaW5nIGdhcmJhZ2UgY29sbGVjdGlvbiIpOworICAgICAgICBpZiAobm9mYWlsKSB7CisgICAgICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaWYgKGdjX3N0ciA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdjX3N0ciA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCJnYXJiYWdlIGNvbGxlY3Rpb24iKTsKKyAgICAgICAgICAgIFB5RXJyX1dyaXRlVW5yYWlzYWJsZShnY19zdHIpOworICAgICAgICAgICAgUHlfRmF0YWxFcnJvcigidW5leHBlY3RlZCBleGNlcHRpb24gZHVyaW5nIGdhcmJhZ2UgY29sbGVjdGlvbiIpOworICAgICAgICB9CiAgICAgfQogCisgICAgLyogVXBkYXRlIHN0YXRzICovCiAgICAgaWYgKG5fY29sbGVjdGVkKQogICAgICAgICAqbl9jb2xsZWN0ZWQgPSBtOwogICAgIGlmIChuX3VuY29sbGVjdGFibGUpCiAgICAgICAgICpuX3VuY29sbGVjdGFibGUgPSBuOworICAgIHN0YXRzLT5jb2xsZWN0aW9ucysrOworICAgIHN0YXRzLT5jb2xsZWN0ZWQgKz0gbTsKKyAgICBzdGF0cy0+dW5jb2xsZWN0YWJsZSArPSBuOwogICAgIHJldHVybiBuK207CiB9CiAKQEAgLTEwNDUsNyArMTEzNyw3IEBACiB7CiAgICAgUHlfc3NpemVfdCByZXN1bHQsIGNvbGxlY3RlZCwgdW5jb2xsZWN0YWJsZTsKICAgICBpbnZva2VfZ2NfY2FsbGJhY2soInN0YXJ0IiwgZ2VuZXJhdGlvbiwgMCwgMCk7Ci0gICAgcmVzdWx0ID0gY29sbGVjdChnZW5lcmF0aW9uLCAmY29sbGVjdGVkLCAmdW5jb2xsZWN0YWJsZSk7CisgICAgcmVzdWx0ID0gY29sbGVjdChnZW5lcmF0aW9uLCAmY29sbGVjdGVkLCAmdW5jb2xsZWN0YWJsZSwgMCk7CiAgICAgaW52b2tlX2djX2NhbGxiYWNrKCJzdG9wIiwgZ2VuZXJhdGlvbiwgY29sbGVjdGVkLCB1bmNvbGxlY3RhYmxlKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtMTM0Myw2ICsxNDM1LDUyIEBACiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorUHlEb2NfU1RSVkFSKGdjX2dldF9zdGF0c19fZG9jX18sCisiZ2V0X3N0YXRzKCkgLT4gWy4uLl1cbiIKKyJcbiIKKyJSZXR1cm4gYSBsaXN0IG9mIGRpY3Rpb25hcmllcyBjb250YWluaW5nIHBlci1nZW5lcmF0aW9uIHN0YXRpc3RpY3MuXG4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2djX2dldF9zdGF0cyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm5vYXJncykKK3sKKyAgICBpbnQgaTsKKyAgICBQeU9iamVjdCAqcmVzdWx0OworICAgIHN0cnVjdCBnY19nZW5lcmF0aW9uX3N0YXRzIHN0YXRzW05VTV9HRU5FUkFUSU9OU10sICpzdDsKKworICAgIC8qIFRvIGdldCBjb25zaXN0ZW50IHZhbHVlcyBkZXNwaXRlIGFsbG9jYXRpb25zIHdoaWxlIGNvbnN0cnVjdGluZworICAgICAgIHRoZSByZXN1bHQgbGlzdCwgd2UgdXNlIGEgc25hcHNob3Qgb2YgdGhlIHJ1bm5pbmcgc3RhdHMuICovCisgICAgZm9yIChpID0gMDsgaSA8IE5VTV9HRU5FUkFUSU9OUzsgaSsrKSB7CisgICAgICAgIHN0YXRzW2ldID0gZ2VuZXJhdGlvbl9zdGF0c1tpXTsKKyAgICB9CisKKyAgICByZXN1bHQgPSBQeUxpc3RfTmV3KDApOworICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgTlVNX0dFTkVSQVRJT05TOyBpKyspIHsKKyAgICAgICAgUHlPYmplY3QgKmRpY3Q7CisgICAgICAgIHN0ID0gJnN0YXRzW2ldOworICAgICAgICBkaWN0ID0gUHlfQnVpbGRWYWx1ZSgie3Nuc25zbn0iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29sbGVjdGlvbnMiLCBzdC0+Y29sbGVjdGlvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb2xsZWN0ZWQiLCBzdC0+Y29sbGVjdGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidW5jb2xsZWN0YWJsZSIsIHN0LT51bmNvbGxlY3RhYmxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgaWYgKGRpY3QgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIGlmIChQeUxpc3RfQXBwZW5kKHJlc3VsdCwgZGljdCkpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihkaWN0KTsKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KKyAgICAgICAgUHlfREVDUkVGKGRpY3QpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworCitlcnJvcjoKKyAgICBQeV9YREVDUkVGKHJlc3VsdCk7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKKwogUHlEb2NfU1RSVkFSKGdjX2lzX3RyYWNrZWRfX2RvY19fLAogImlzX3RyYWNrZWQob2JqKSAtPiBib29sXG4iCiAiXG4iCkBAIC0xMzcyLDYgKzE1MTAsNyBAQAogImlzZW5hYmxlZCgpIC0tIFJldHVybnMgdHJ1ZSBpZiBhdXRvbWF0aWMgY29sbGVjdGlvbiBpcyBlbmFibGVkLlxuIgogImNvbGxlY3QoKSAtLSBEbyBhIGZ1bGwgY29sbGVjdGlvbiByaWdodCBub3cuXG4iCiAiZ2V0X2NvdW50KCkgLS0gUmV0dXJuIHRoZSBjdXJyZW50IGNvbGxlY3Rpb24gY291bnRzLlxuIgorImdldF9zdGF0cygpIC0tIFJldHVybiBsaXN0IG9mIGRpY3Rpb25hcmllcyBjb250YWluaW5nIHBlci1nZW5lcmF0aW9uIHN0YXRzLlxuIgogInNldF9kZWJ1ZygpIC0tIFNldCBkZWJ1Z2dpbmcgZmxhZ3MuXG4iCiAiZ2V0X2RlYnVnKCkgLS0gR2V0IGRlYnVnZ2luZyBmbGFncy5cbiIKICJzZXRfdGhyZXNob2xkKCkgLS0gU2V0IHRoZSBjb2xsZWN0aW9uIHRocmVzaG9sZHMuXG4iCkBAIC0xMzkzLDYgKzE1MzIsNyBAQAogICAgIHsiY29sbGVjdCIsICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKWdjX2NvbGxlY3QsCiAgICAgICAgIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsICAgICAgICAgICBnY19jb2xsZWN0X19kb2NfX30sCiAgICAgeyJnZXRfb2JqZWN0cyIsICAgIGdjX2dldF9vYmplY3RzLE1FVEhfTk9BUkdTLCAgZ2NfZ2V0X29iamVjdHNfX2RvY19ffSwKKyAgICB7ImdldF9zdGF0cyIsICAgICAgZ2NfZ2V0X3N0YXRzLCBNRVRIX05PQVJHUywgZ2NfZ2V0X3N0YXRzX19kb2NfX30sCiAgICAgeyJpc190cmFja2VkIiwgICAgIGdjX2lzX3RyYWNrZWQsIE1FVEhfTywgICAgICAgZ2NfaXNfdHJhY2tlZF9fZG9jX199LAogICAgIHsiZ2V0X3JlZmVycmVycyIsICBnY19nZXRfcmVmZXJyZXJzLCBNRVRIX1ZBUkFSR1MsCiAgICAgICAgIGdjX2dldF9yZWZlcnJlcnNfX2RvY19ffSwKQEAgLTE0ODAsOCArMTYyMCwyOSBAQAogICAgIHJldHVybiBuOwogfQogCitQeV9zc2l6ZV90CitfUHlHQ19Db2xsZWN0Tm9GYWlsKHZvaWQpCit7CisgICAgUHlfc3NpemVfdCBuOworCisgICAgLyogSWRlYWxseSwgdGhpcyBmdW5jdGlvbiBpcyBvbmx5IGNhbGxlZCBvbiBpbnRlcnByZXRlciBzaHV0ZG93biwKKyAgICAgICBhbmQgdGhlcmVmb3JlIG5vdCByZWN1cnNpdmVseS4gIFVuZm9ydHVuYXRlbHksIHdoZW4gdGhlcmUgYXJlIGRhZW1vbgorICAgICAgIHRocmVhZHMsIGEgZGFlbW9uIHRocmVhZCBjYW4gc3RhcnQgYSBjeWNsaWMgZ2FyYmFnZSBjb2xsZWN0aW9uCisgICAgICAgZHVyaW5nIGludGVycHJldGVyIHNodXRkb3duIChhbmQgdGhlbiBuZXZlciBmaW5pc2ggaXQpLgorICAgICAgIFNlZSBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlODcxMyNtc2cxOTUxNzggZm9yIGFuIGV4YW1wbGUuCisgICAgICAgKi8KKyAgICBpZiAoY29sbGVjdGluZykKKyAgICAgICAgbiA9IDA7CisgICAgZWxzZSB7CisgICAgICAgIGNvbGxlY3RpbmcgPSAxOworICAgICAgICBuID0gY29sbGVjdChOVU1fR0VORVJBVElPTlMgLSAxLCBOVUxMLCBOVUxMLCAxKTsKKyAgICAgICAgY29sbGVjdGluZyA9IDA7CisgICAgfQorICAgIHJldHVybiBuOworfQorCiB2b2lkCi1fUHlHQ19GaW5pKHZvaWQpCitfUHlHQ19EdW1wU2h1dGRvd25TdGF0cyh2b2lkKQogewogICAgIGlmICghKGRlYnVnICYgREVCVUdfU0FWRUFMTCkKICAgICAgICAgJiYgZ2FyYmFnZSAhPSBOVUxMICYmIFB5TGlzdF9HRVRfU0laRShnYXJiYWdlKSA+IDApIHsKQEAgLTE0OTIsOCArMTY1MywxMiBAQAogICAgICAgICBlbHNlCiAgICAgICAgICAgICBtZXNzYWdlID0gImdjOiAlemQgdW5jb2xsZWN0YWJsZSBvYmplY3RzIGF0ICIgXAogICAgICAgICAgICAgICAgICJzaHV0ZG93bjsgdXNlIGdjLnNldF9kZWJ1ZyhnYy5ERUJVR19VTkNPTExFQ1RBQkxFKSB0byBsaXN0IHRoZW0iOwotICAgICAgICBpZiAoUHlFcnJfV2FybkZvcm1hdChQeUV4Y19SZXNvdXJjZVdhcm5pbmcsIDAsIG1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5TGlzdF9HRVRfU0laRShnYXJiYWdlKSkgPCAwKQorICAgICAgICAvKiBQeUVycl9XYXJuRm9ybWF0IGRvZXMgdG9vIG1hbnkgdGhpbmdzIGFuZCB3ZSBhcmUgYXQgc2h1dGRvd24sCisgICAgICAgICAgIHRoZSB3YXJuaW5ncyBtb2R1bGUncyBkZXBlbmRlbmNpZXMgKGUuZy4gbGluZWNhY2hlKSBtYXkgYmUgZ29uZQorICAgICAgICAgICBhbHJlYWR5LiAqLworICAgICAgICBpZiAoUHlFcnJfV2FybkV4cGxpY2l0Rm9ybWF0KFB5RXhjX1Jlc291cmNlV2FybmluZywgImdjIiwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZ2MiLCBOVUxMLCBtZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5TGlzdF9HRVRfU0laRShnYXJiYWdlKSkpCiAgICAgICAgICAgICBQeUVycl9Xcml0ZVVucmFpc2FibGUoTlVMTCk7CiAgICAgICAgIGlmIChkZWJ1ZyAmIERFQlVHX1VOQ09MTEVDVEFCTEUpIHsKICAgICAgICAgICAgIFB5T2JqZWN0ICpyZXByID0gTlVMTCwgKmJ5dGVzID0gTlVMTDsKQEAgLTE1MDIsNyArMTY2Nyw3IEBACiAgICAgICAgICAgICAgICAgUHlFcnJfV3JpdGVVbnJhaXNhYmxlKGdhcmJhZ2UpOwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgUHlTeXNfV3JpdGVTdGRlcnIoCi0gICAgICAgICAgICAgICAgICAgICIgICAgJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICIgICAgICAlc1xuIiwKICAgICAgICAgICAgICAgICAgICAgUHlCeXRlc19BU19TVFJJTkcoYnl0ZXMpCiAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICB9CkBAIC0xNTEwLDcgKzE2NzUsMTMgQEAKICAgICAgICAgICAgIFB5X1hERUNSRUYoYnl0ZXMpOwogICAgICAgICB9CiAgICAgfQorfQorCit2b2lkCitfUHlHQ19GaW5pKHZvaWQpCit7CiAgICAgUHlfQ0xFQVIoY2FsbGJhY2tzKTsKKyAgICBQeV9DTEVBUih0bW9kKTsKIH0KIAogLyogZm9yIGRlYnVnZ2luZyAqLwpAQCAtMTU1NSw3ICsxNzI2LDggQEAKICAgICAgICAgc2l6ZW9mKFB5R0NfSGVhZCkgKyBiYXNpY3NpemUpOwogICAgIGlmIChnID09IE5VTEwpCiAgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOwotICAgIGctPmdjLmdjX3JlZnMgPSBHQ19VTlRSQUNLRUQ7CisgICAgZy0+Z2MuZ2NfcmVmcyA9IDA7CisgICAgX1B5R0NIZWFkX1NFVF9SRUZTKGcsIEdDX1VOVFJBQ0tFRCk7CiAgICAgZ2VuZXJhdGlvbnNbMF0uY291bnQrKzsgLyogbnVtYmVyIG9mIGFsbG9jYXRlZCBHQyBvYmplY3RzICovCiAgICAgaWYgKGdlbmVyYXRpb25zWzBdLmNvdW50ID4gZ2VuZXJhdGlvbnNbMF0udGhyZXNob2xkICYmCiAgICAgICAgIGVuYWJsZWQgJiYKQEAgLTE1ODIsOCArMTc1NCwxNSBAQAogUHlWYXJPYmplY3QgKgogX1B5T2JqZWN0X0dDX05ld1ZhcihQeVR5cGVPYmplY3QgKnRwLCBQeV9zc2l6ZV90IG5pdGVtcykKIHsKLSAgICBjb25zdCBzaXplX3Qgc2l6ZSA9IF9QeU9iamVjdF9WQVJfU0laRSh0cCwgbml0ZW1zKTsKLSAgICBQeVZhck9iamVjdCAqb3AgPSAoUHlWYXJPYmplY3QgKikgX1B5T2JqZWN0X0dDX01hbGxvYyhzaXplKTsKKyAgICBzaXplX3Qgc2l6ZTsKKyAgICBQeVZhck9iamVjdCAqb3A7CisKKyAgICBpZiAobml0ZW1zIDwgMCkgeworICAgICAgICBQeUVycl9CYWRJbnRlcm5hbENhbGwoKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHNpemUgPSBfUHlPYmplY3RfVkFSX1NJWkUodHAsIG5pdGVtcyk7CisgICAgb3AgPSAoUHlWYXJPYmplY3QgKikgX1B5T2JqZWN0X0dDX01hbGxvYyhzaXplKTsKICAgICBpZiAob3AgIT0gTlVMTCkKICAgICAgICAgb3AgPSBQeU9iamVjdF9JTklUX1ZBUihvcCwgdHAsIG5pdGVtcyk7CiAgICAgcmV0dXJuIG9wOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9nZXRwYXRoLmMgYi9Nb2R1bGVzL2dldHBhdGguYwppbmRleCBmZjE0ZmRkLi4xM2UzODE3IDEwMDY0NAotLS0gYS9Nb2R1bGVzL2dldHBhdGguYworKysgYi9Nb2R1bGVzL2dldHBhdGguYwpAQCAtMTEwLDExICsxMTAsNyBAQAogI2VuZGlmCiAKICNpZm5kZWYgUFJFRklYCi0jICBpZmRlZiBfX1ZNUwotIyAgICBkZWZpbmUgUFJFRklYICIiCi0jICBlbHNlCi0jICAgIGRlZmluZSBQUkVGSVggIi91c3IvbG9jYWwiCi0jICBlbmRpZgorIyAgZGVmaW5lIFBSRUZJWCAiL3Vzci9sb2NhbCIKICNlbmRpZgogCiAjaWZuZGVmIEVYRUNfUFJFRklYCkBAIC0xMzQsOCArMTMwLDYgQEAKIHN0YXRpYyB3Y2hhcl90IGV4ZWNfcHJlZml4W01BWFBBVEhMRU4rMV07CiBzdGF0aWMgd2NoYXJfdCBwcm9ncGF0aFtNQVhQQVRITEVOKzFdOwogc3RhdGljIHdjaGFyX3QgKm1vZHVsZV9zZWFyY2hfcGF0aCA9IE5VTEw7Ci1zdGF0aWMgaW50IG1vZHVsZV9zZWFyY2hfcGF0aF9tYWxsb2NlZCA9IDA7Ci1zdGF0aWMgd2NoYXJfdCAqbGliX3B5dGhvbiA9IEwibGliL3B5dGhvbiIgVkVSU0lPTjsKIAogc3RhdGljIHZvaWQKIHJlZHVjZSh3Y2hhcl90ICpkaXIpCkBAIC0zMTcsNyArMzExLDggQEAKICAgIGJ5dGVzIGxvbmcuCiAqLwogc3RhdGljIGludAotc2VhcmNoX2Zvcl9wcmVmaXgod2NoYXJfdCAqYXJndjBfcGF0aCwgd2NoYXJfdCAqaG9tZSwgd2NoYXJfdCAqX3ByZWZpeCkKK3NlYXJjaF9mb3JfcHJlZml4KHdjaGFyX3QgKmFyZ3YwX3BhdGgsIHdjaGFyX3QgKmhvbWUsIHdjaGFyX3QgKl9wcmVmaXgsCisgICAgICAgICAgICAgICAgICB3Y2hhcl90ICpsaWJfcHl0aG9uKQogewogICAgIHNpemVfdCBuOwogICAgIHdjaGFyX3QgKnZwYXRoOwpAQCAtMzQ2LDcgKzM0MSw3IEBACiAgICAgICAgICAgICB3Y3NuY3B5KHByZWZpeCwgYXJndjBfcGF0aCwgTUFYUEFUSExFTik7CiAgICAgICAgICAgICBwcmVmaXhbTUFYUEFUSExFTl0gPSBMJ1wwJzsKICAgICAgICAgICAgIGpvaW5wYXRoKHByZWZpeCwgdnBhdGgpOwotICAgICAgICAgICAgUHlNZW1fRnJlZSh2cGF0aCk7CisgICAgICAgICAgICBQeU1lbV9SYXdGcmVlKHZwYXRoKTsKICAgICAgICAgICAgIGpvaW5wYXRoKHByZWZpeCwgTCJMaWIiKTsKICAgICAgICAgICAgIGpvaW5wYXRoKHByZWZpeCwgTEFORE1BUkspOwogICAgICAgICAgICAgaWYgKGlzbW9kdWxlKHByZWZpeCkpCkBAIC0zODMsNyArMzc4LDggQEAKICAgIE1BWFBBVEhMRU4gYnl0ZXMgbG9uZy4KICovCiBzdGF0aWMgaW50Ci1zZWFyY2hfZm9yX2V4ZWNfcHJlZml4KHdjaGFyX3QgKmFyZ3YwX3BhdGgsIHdjaGFyX3QgKmhvbWUsIHdjaGFyX3QgKl9leGVjX3ByZWZpeCkKK3NlYXJjaF9mb3JfZXhlY19wcmVmaXgod2NoYXJfdCAqYXJndjBfcGF0aCwgd2NoYXJfdCAqaG9tZSwKKyAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqX2V4ZWNfcHJlZml4LCB3Y2hhcl90ICpsaWJfcHl0aG9uKQogewogICAgIHNpemVfdCBuOwogCkBAIC00OTMsMTIgKzQ4OSwxNCBAQAogICAgIGNoYXIgZXhlY3BhdGhbTUFYUEFUSExFTisxXTsKICNlbmRpZgogICAgIHdjaGFyX3QgKl9weXRob25wYXRoLCAqX3ByZWZpeCwgKl9leGVjX3ByZWZpeDsKKyAgICB3Y2hhcl90ICpsaWJfcHl0aG9uOwogCiAgICAgX3B5dGhvbnBhdGggPSBfUHlfY2hhcjJ3Y2hhcihQWVRIT05QQVRILCBOVUxMKTsKICAgICBfcHJlZml4ID0gX1B5X2NoYXIyd2NoYXIoUFJFRklYLCBOVUxMKTsKICAgICBfZXhlY19wcmVmaXggPSBfUHlfY2hhcjJ3Y2hhcihFWEVDX1BSRUZJWCwgTlVMTCk7CisgICAgbGliX3B5dGhvbiA9IF9QeV9jaGFyMndjaGFyKCJsaWIvcHl0aG9uIiBWRVJTSU9OLCBOVUxMKTsKIAotICAgIGlmICghX3B5dGhvbnBhdGggfHwgIV9wcmVmaXggfHwgIV9leGVjX3ByZWZpeCkgeworICAgIGlmICghX3B5dGhvbnBhdGggfHwgIV9wcmVmaXggfHwgIV9leGVjX3ByZWZpeCB8fCAhbGliX3B5dGhvbikgewogICAgICAgICBQeV9GYXRhbEVycm9yKAogICAgICAgICAgICAgIlVuYWJsZSB0byBkZWNvZGUgcGF0aCB2YXJpYWJsZXMgaW4gZ2V0cGF0aC5jOiAiCiAgICAgICAgICAgICAibWVtb3J5IGVycm9yIik7CkBAIC01NjIsOCArNTYwLDcgQEAKICAgICB9CiAgICAgZWxzZQogICAgICAgICBwcm9ncGF0aFswXSA9ICdcMCc7Ci0gICAgaWYgKHBhdGhfYnVmZmVyICE9IE5VTEwpCi0gICAgICAgIFB5TWVtX0ZyZWUocGF0aF9idWZmZXIpOworICAgIFB5TWVtX1Jhd0ZyZWUocGF0aF9idWZmZXIpOwogICAgIGlmIChwcm9ncGF0aFswXSAhPSBTRVAgJiYgcHJvZ3BhdGhbMF0gIT0gJ1wwJykKICAgICAgICAgYWJzb2x1dGl6ZShwcm9ncGF0aCk7CiAgICAgd2NzbmNweShhcmd2MF9wYXRoLCBwcm9ncGF0aCwgTUFYUEFUSExFTik7CkBAIC02MDUsNyArNjAyLDcgQEAKICAgICAgICAgICAgIC8qIFVzZSB0aGUgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkgYXMgdGhlIHByb2dwYXRoICovCiAgICAgICAgICAgICB3Y3NuY3B5KGFyZ3YwX3BhdGgsIHdidWYsIE1BWFBBVEhMRU4pOwogICAgICAgICB9Ci0gICAgICAgIFB5TWVtX0ZyZWUod2J1Zik7CisgICAgICAgIFB5TWVtX1Jhd0ZyZWUod2J1Zik7CiAgICAgfQogI2VuZGlmCiAKQEAgLTY2Nyw3ICs2NjQsOCBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKCEocGZvdW5kID0gc2VhcmNoX2Zvcl9wcmVmaXgoYXJndjBfcGF0aCwgaG9tZSwgX3ByZWZpeCkpKSB7CisgICAgcGZvdW5kID0gc2VhcmNoX2Zvcl9wcmVmaXgoYXJndjBfcGF0aCwgaG9tZSwgX3ByZWZpeCwgbGliX3B5dGhvbik7CisgICAgaWYgKCFwZm91bmQpIHsKICAgICAgICAgaWYgKCFQeV9Gcm96ZW5GbGFnKQogICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsCiAgICAgICAgICAgICAgICAgIkNvdWxkIG5vdCBmaW5kIHBsYXRmb3JtIGluZGVwZW5kZW50IGxpYnJhcmllcyA8cHJlZml4PlxuIik7CkBAIC02OTAsNyArNjg4LDkgQEAKICAgICB6aXBfcGF0aFtidWZzeiAtIDZdID0gVkVSU0lPTlswXTsKICAgICB6aXBfcGF0aFtidWZzeiAtIDVdID0gVkVSU0lPTlsyXTsKIAotICAgIGlmICghKGVmb3VuZCA9IHNlYXJjaF9mb3JfZXhlY19wcmVmaXgoYXJndjBfcGF0aCwgaG9tZSwgX2V4ZWNfcHJlZml4KSkpIHsKKyAgICBlZm91bmQgPSBzZWFyY2hfZm9yX2V4ZWNfcHJlZml4KGFyZ3YwX3BhdGgsIGhvbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZXhlY19wcmVmaXgsIGxpYl9weXRob24pOworICAgIGlmICghZWZvdW5kKSB7CiAgICAgICAgIGlmICghUHlfRnJvemVuRmxhZykKICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLAogICAgICAgICAgICAgICAgICJDb3VsZCBub3QgZmluZCBwbGF0Zm9ybSBkZXBlbmRlbnQgbGlicmFyaWVzIDxleGVjX3ByZWZpeD5cbiIpOwpAQCAtNzA3LDEzICs3MDcsMTEgQEAKICAgICAgKi8KICAgICBidWZzeiA9IDA7CiAKLSAgICBpZiAoX3J0cHlwYXRoKSB7CisgICAgaWYgKF9ydHB5cGF0aCAmJiBfcnRweXBhdGhbMF0gIT0gJ1wwJykgewogICAgICAgICBzaXplX3QgcnRweXBhdGhfbGVuOwogICAgICAgICBydHB5cGF0aCA9IF9QeV9jaGFyMndjaGFyKF9ydHB5cGF0aCwgJnJ0cHlwYXRoX2xlbik7CiAgICAgICAgIGlmIChydHB5cGF0aCAhPSBOVUxMKQogICAgICAgICAgICAgYnVmc3ogKz0gcnRweXBhdGhfbGVuICsgMTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgX3J0cHlwYXRoID0gTlVMTDsKICAgICB9CiAKICAgICBkZWZwYXRoID0gX3B5dGhvbnBhdGg7CkBAIC03MzcsNjAgKzczNSw1NSBAQAogICAgIGJ1ZnN6ICs9IHdjc2xlbih6aXBfcGF0aCkgKyAxOwogICAgIGJ1ZnN6ICs9IHdjc2xlbihleGVjX3ByZWZpeCkgKyAxOwogCi0gICAgYnVmID0gKHdjaGFyX3QgKilQeU1lbV9NYWxsb2MoYnVmc3oqc2l6ZW9mKHdjaGFyX3QpKTsKLQorICAgIGJ1ZiA9IFB5TWVtX05ldyh3Y2hhcl90LCBidWZzeik7CiAgICAgaWYgKGJ1ZiA9PSBOVUxMKSB7Ci0gICAgICAgIC8qIFdlIGNhbid0IGV4aXQsIHNvIHByaW50IGEgd2FybmluZyBhbmQgbGltcCBhbG9uZyAqLwotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIk5vdCBlbm91Z2ggbWVtb3J5IGZvciBkeW5hbWljIFBZVEhPTlBBVEguXG4iKTsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJVc2luZyBkZWZhdWx0IHN0YXRpYyBQWVRIT05QQVRILlxuIik7Ci0gICAgICAgIG1vZHVsZV9zZWFyY2hfcGF0aCA9IEwiIiBQWVRIT05QQVRIOworICAgICAgICBQeV9GYXRhbEVycm9yKAorICAgICAgICAgICAgIk5vdCBlbm91Z2ggbWVtb3J5IGZvciBkeW5hbWljIFBZVEhPTlBBVEgiKTsKICAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIC8qIFJ1bi10aW1lIHZhbHVlIG9mICRQWVRIT05QQVRIIGdvZXMgZmlyc3QgKi8KLSAgICAgICAgaWYgKHJ0cHlwYXRoKSB7Ci0gICAgICAgICAgICB3Y3NjcHkoYnVmLCBydHB5cGF0aCk7Ci0gICAgICAgICAgICB3Y3NjYXQoYnVmLCBkZWxpbWl0ZXIpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGJ1ZlswXSA9ICdcMCc7CiAKLSAgICAgICAgLyogTmV4dCBpcyB0aGUgZGVmYXVsdCB6aXAgcGF0aCAqLwotICAgICAgICB3Y3NjYXQoYnVmLCB6aXBfcGF0aCk7CisgICAgLyogUnVuLXRpbWUgdmFsdWUgb2YgJFBZVEhPTlBBVEggZ29lcyBmaXJzdCAqLworICAgIGlmIChydHB5cGF0aCkgeworICAgICAgICB3Y3NjcHkoYnVmLCBydHB5cGF0aCk7CiAgICAgICAgIHdjc2NhdChidWYsIGRlbGltaXRlcik7Ci0KLSAgICAgICAgLyogTmV4dCBnb2VzIG1lcmdlIG9mIGNvbXBpbGUtdGltZSAkUFlUSE9OUEFUSCB3aXRoCi0gICAgICAgICAqIGR5bmFtaWNhbGx5IGxvY2F0ZWQgcHJlZml4LgotICAgICAgICAgKi8KLSAgICAgICAgZGVmcGF0aCA9IF9weXRob25wYXRoOwotICAgICAgICB3aGlsZSAoMSkgewotICAgICAgICAgICAgd2NoYXJfdCAqZGVsaW0gPSB3Y3NjaHIoZGVmcGF0aCwgREVMSU0pOwotCi0gICAgICAgICAgICBpZiAoZGVmcGF0aFswXSAhPSBTRVApIHsKLSAgICAgICAgICAgICAgICB3Y3NjYXQoYnVmLCBwcmVmaXgpOwotICAgICAgICAgICAgICAgIHdjc2NhdChidWYsIHNlcGFyYXRvcik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChkZWxpbSkgewotICAgICAgICAgICAgICAgIHNpemVfdCBsZW4gPSBkZWxpbSAtIGRlZnBhdGggKyAxOwotICAgICAgICAgICAgICAgIHNpemVfdCBlbmQgPSB3Y3NsZW4oYnVmKSArIGxlbjsKLSAgICAgICAgICAgICAgICB3Y3NuY2F0KGJ1ZiwgZGVmcGF0aCwgbGVuKTsKLSAgICAgICAgICAgICAgICAqKGJ1ZiArIGVuZCkgPSAnXDAnOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgd2NzY2F0KGJ1ZiwgZGVmcGF0aCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBkZWZwYXRoID0gZGVsaW0gKyAxOwotICAgICAgICB9Ci0gICAgICAgIHdjc2NhdChidWYsIGRlbGltaXRlcik7Ci0KLSAgICAgICAgLyogRmluYWxseSwgb24gZ29lcyB0aGUgZGlyZWN0b3J5IGZvciBkeW5hbWljLWxvYWQgbW9kdWxlcyAqLwotICAgICAgICB3Y3NjYXQoYnVmLCBleGVjX3ByZWZpeCk7Ci0KLSAgICAgICAgLyogQW5kIHB1Ymxpc2ggdGhlIHJlc3VsdHMgKi8KLSAgICAgICAgbW9kdWxlX3NlYXJjaF9wYXRoID0gYnVmOwotICAgICAgICBtb2R1bGVfc2VhcmNoX3BhdGhfbWFsbG9jZWQgPSAxOwogICAgIH0KKyAgICBlbHNlCisgICAgICAgIGJ1ZlswXSA9ICdcMCc7CisKKyAgICAvKiBOZXh0IGlzIHRoZSBkZWZhdWx0IHppcCBwYXRoICovCisgICAgd2NzY2F0KGJ1ZiwgemlwX3BhdGgpOworICAgIHdjc2NhdChidWYsIGRlbGltaXRlcik7CisKKyAgICAvKiBOZXh0IGdvZXMgbWVyZ2Ugb2YgY29tcGlsZS10aW1lICRQWVRIT05QQVRIIHdpdGgKKyAgICAgKiBkeW5hbWljYWxseSBsb2NhdGVkIHByZWZpeC4KKyAgICAgKi8KKyAgICBkZWZwYXRoID0gX3B5dGhvbnBhdGg7CisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgd2NoYXJfdCAqZGVsaW0gPSB3Y3NjaHIoZGVmcGF0aCwgREVMSU0pOworCisgICAgICAgIGlmIChkZWZwYXRoWzBdICE9IFNFUCkgeworICAgICAgICAgICAgd2NzY2F0KGJ1ZiwgcHJlZml4KTsKKyAgICAgICAgICAgIHdjc2NhdChidWYsIHNlcGFyYXRvcik7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZGVsaW0pIHsKKyAgICAgICAgICAgIHNpemVfdCBsZW4gPSBkZWxpbSAtIGRlZnBhdGggKyAxOworICAgICAgICAgICAgc2l6ZV90IGVuZCA9IHdjc2xlbihidWYpICsgbGVuOworICAgICAgICAgICAgd2NzbmNhdChidWYsIGRlZnBhdGgsIGxlbik7CisgICAgICAgICAgICAqKGJ1ZiArIGVuZCkgPSAnXDAnOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgd2NzY2F0KGJ1ZiwgZGVmcGF0aCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBkZWZwYXRoID0gZGVsaW0gKyAxOworICAgIH0KKyAgICB3Y3NjYXQoYnVmLCBkZWxpbWl0ZXIpOworCisgICAgLyogRmluYWxseSwgb24gZ29lcyB0aGUgZGlyZWN0b3J5IGZvciBkeW5hbWljLWxvYWQgbW9kdWxlcyAqLworICAgIHdjc2NhdChidWYsIGV4ZWNfcHJlZml4KTsKKworICAgIC8qIEFuZCBwdWJsaXNoIHRoZSByZXN1bHRzICovCisgICAgbW9kdWxlX3NlYXJjaF9wYXRoID0gYnVmOwogCiAgICAgLyogUmVkdWNlIHByZWZpeCBhbmQgZXhlY19wcmVmaXggdG8gdGhlaXIgZXNzZW5jZSwKICAgICAgKiBlLmcuIC91c3IvbG9jYWwvbGliL3B5dGhvbjEuNSBpcyByZWR1Y2VkIHRvIC91c3IvbG9jYWwuCkBAIC04MTgsMTEgKzgxMSwxMSBAQAogICAgIGVsc2UKICAgICAgICAgd2NzbmNweShleGVjX3ByZWZpeCwgX2V4ZWNfcHJlZml4LCBNQVhQQVRITEVOKTsKIAotICAgIFB5TWVtX0ZyZWUoX3B5dGhvbnBhdGgpOwotICAgIFB5TWVtX0ZyZWUoX3ByZWZpeCk7Ci0gICAgUHlNZW1fRnJlZShfZXhlY19wcmVmaXgpOwotICAgIGlmIChydHB5cGF0aCAhPSBOVUxMKQotICAgICAgICBQeU1lbV9GcmVlKHJ0cHlwYXRoKTsKKyAgICBQeU1lbV9SYXdGcmVlKF9weXRob25wYXRoKTsKKyAgICBQeU1lbV9SYXdGcmVlKF9wcmVmaXgpOworICAgIFB5TWVtX1Jhd0ZyZWUoX2V4ZWNfcHJlZml4KTsKKyAgICBQeU1lbV9SYXdGcmVlKGxpYl9weXRob24pOworICAgIFB5TWVtX1Jhd0ZyZWUocnRweXBhdGgpOwogfQogCiAKQEAgLTgzMSwxOCArODI0LDE1IEBACiBQeV9TZXRQYXRoKGNvbnN0IHdjaGFyX3QgKnBhdGgpCiB7CiAgICAgaWYgKG1vZHVsZV9zZWFyY2hfcGF0aCAhPSBOVUxMKSB7Ci0gICAgICAgIGlmIChtb2R1bGVfc2VhcmNoX3BhdGhfbWFsbG9jZWQpCi0gICAgICAgICAgICBQeU1lbV9GcmVlKG1vZHVsZV9zZWFyY2hfcGF0aCk7CisgICAgICAgIFB5TWVtX1Jhd0ZyZWUobW9kdWxlX3NlYXJjaF9wYXRoKTsKICAgICAgICAgbW9kdWxlX3NlYXJjaF9wYXRoID0gTlVMTDsKLSAgICAgICAgbW9kdWxlX3NlYXJjaF9wYXRoX21hbGxvY2VkID0gMDsKICAgICB9CiAgICAgaWYgKHBhdGggIT0gTlVMTCkgewogICAgICAgICBleHRlcm4gd2NoYXJfdCAqUHlfR2V0UHJvZ3JhbU5hbWUodm9pZCk7CiAgICAgICAgIHdjaGFyX3QgKnByb2cgPSBQeV9HZXRQcm9ncmFtTmFtZSgpOwogICAgICAgICB3Y3NuY3B5KHByb2dwYXRoLCBwcm9nLCBNQVhQQVRITEVOKTsKICAgICAgICAgZXhlY19wcmVmaXhbMF0gPSBwcmVmaXhbMF0gPSBMJ1wwJzsKLSAgICAgICAgbW9kdWxlX3NlYXJjaF9wYXRoID0gUHlNZW1fTWFsbG9jKCh3Y3NsZW4ocGF0aCkgKyAxKSAqIHNpemVvZih3Y2hhcl90KSk7Ci0gICAgICAgIG1vZHVsZV9zZWFyY2hfcGF0aF9tYWxsb2NlZCA9IDE7CisgICAgICAgIG1vZHVsZV9zZWFyY2hfcGF0aCA9IFB5TWVtX1Jhd01hbGxvYygod2NzbGVuKHBhdGgpICsgMSkgKiBzaXplb2Yod2NoYXJfdCkpOwogICAgICAgICBpZiAobW9kdWxlX3NlYXJjaF9wYXRoICE9IE5VTEwpCiAgICAgICAgICAgICB3Y3NjcHkobW9kdWxlX3NlYXJjaF9wYXRoLCBwYXRoKTsKICAgICB9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL2dycG1vZHVsZS5jIGIvTW9kdWxlcy9ncnBtb2R1bGUuYwppbmRleCAwNDJjZjA1Li5kYTc4MjUzIDEwMDY0NAotLS0gYS9Nb2R1bGVzL2dycG1vZHVsZS5jCisrKyBiL01vZHVsZXMvZ3JwbW9kdWxlLmMKQEAgLTU4LDE3ICs1OCwxMiBAQAogCiAjZGVmaW5lIFNFVChpLHZhbCkgUHlTdHJ1Y3RTZXF1ZW5jZV9TRVRfSVRFTSh2LCBpLCB2YWwpCiAgICAgU0VUKHNldEluZGV4KyssIFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQocC0+Z3JfbmFtZSkpOwotI2lmZGVmIF9fVk1TCi0gICAgU0VUKHNldEluZGV4KyssIFB5X05vbmUpOwotICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSNlbHNlCiAgICAgaWYgKHAtPmdyX3Bhc3N3ZCkKICAgICAgICAgICAgIFNFVChzZXRJbmRleCsrLCBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0KHAtPmdyX3Bhc3N3ZCkpOwogICAgIGVsc2UgewogICAgICAgICAgICAgU0VUKHNldEluZGV4KyssIFB5X05vbmUpOwogICAgICAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwogICAgIH0KLSNlbmRpZgogICAgIFNFVChzZXRJbmRleCsrLCBfUHlMb25nX0Zyb21HaWQocC0+Z3JfZ2lkKSk7CiAgICAgU0VUKHNldEluZGV4KyssIHcpOwogI3VuZGVmIFNFVApAQCAtMTU3LDExICsxNTIsMTEgQEAKIAogc3RhdGljIFB5TWV0aG9kRGVmIGdycF9tZXRob2RzW10gPSB7CiAgICAgeyJnZXRncmdpZCIsICAgICAgICBncnBfZ2V0Z3JnaWQsICAgTUVUSF9PLAotICAgICAiZ2V0Z3JnaWQoaWQpIC0+IHR1cGxlXG5cCisgICAgICJnZXRncmdpZChpZCkgLT4gKGdyX25hbWUsZ3JfcGFzc3dkLGdyX2dpZCxncl9tZW0pXG5cCiBSZXR1cm4gdGhlIGdyb3VwIGRhdGFiYXNlIGVudHJ5IGZvciB0aGUgZ2l2ZW4gbnVtZXJpYyBncm91cCBJRC4gIElmXG5cCiBpZCBpcyBub3QgdmFsaWQsIHJhaXNlIEtleUVycm9yLiJ9LAogICAgIHsiZ2V0Z3JuYW0iLCAgICAgICAgZ3JwX2dldGdybmFtLCAgIE1FVEhfVkFSQVJHUywKLSAgICAgImdldGdybmFtKG5hbWUpIC0+IHR1cGxlXG5cCisgICAgICJnZXRncm5hbShuYW1lKSAtPiAoZ3JfbmFtZSxncl9wYXNzd2QsZ3JfZ2lkLGdyX21lbSlcblwKIFJldHVybiB0aGUgZ3JvdXAgZGF0YWJhc2UgZW50cnkgZm9yIHRoZSBnaXZlbiBncm91cCBuYW1lLiAgSWZcblwKIG5hbWUgaXMgbm90IHZhbGlkLCByYWlzZSBLZXlFcnJvci4ifSwKICAgICB7ImdldGdyYWxsIiwgICAgICAgIGdycF9nZXRncmFsbCwgICBNRVRIX05PQVJHUywKQEAgLTE3OCwxMCArMTczLDEwIEBACiBHcm91cCBlbnRyaWVzIGFyZSByZXBvcnRlZCBhcyA0LXR1cGxlcyBjb250YWluaW5nIHRoZSBmb2xsb3dpbmcgZmllbGRzXG5cCiBmcm9tIHRoZSBncm91cCBkYXRhYmFzZSwgaW4gb3JkZXI6XG5cCiBcblwKLSAgbmFtZSAgIC0gbmFtZSBvZiB0aGUgZ3JvdXBcblwKLSAgcGFzc3dkIC0gZ3JvdXAgcGFzc3dvcmQgKGVuY3J5cHRlZCk7IG9mdGVuIGVtcHR5XG5cCi0gIGdpZCAgICAtIG51bWVyaWMgSUQgb2YgdGhlIGdyb3VwXG5cCi0gIG1lbSAgICAtIGxpc3Qgb2YgbWVtYmVyc1xuXAorICBncl9uYW1lICAgLSBuYW1lIG9mIHRoZSBncm91cFxuXAorICBncl9wYXNzd2QgLSBncm91cCBwYXNzd29yZCAoZW5jcnlwdGVkKTsgb2Z0ZW4gZW1wdHlcblwKKyAgZ3JfZ2lkICAgIC0gbnVtZXJpYyBJRCBvZiB0aGUgZ3JvdXBcblwKKyAgZ3JfbWVtICAgIC0gbGlzdCBvZiBtZW1iZXJzXG5cCiBcblwKIFRoZSBnaWQgaXMgYW4gaW50ZWdlciwgbmFtZSBhbmQgcGFzc3dvcmQgYXJlIHN0cmluZ3MuICAoTm90ZSB0aGF0IG1vc3RcblwKIHVzZXJzIGFyZSBub3QgZXhwbGljaXRseSBsaXN0ZWQgYXMgbWVtYmVycyBvZiB0aGUgZ3JvdXBzIHRoZXkgYXJlIGluXG5cCkBAIC0yMTAsOSArMjA1LDE0IEBACiAgICAgaWYgKG0gPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgZCA9IFB5TW9kdWxlX0dldERpY3QobSk7Ci0gICAgaWYgKCFpbml0aWFsaXplZCkKLSAgICAgICAgICAgIFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUoJlN0cnVjdEdycFR5cGUsICZzdHJ1Y3RfZ3JvdXBfdHlwZV9kZXNjKTsKLSAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAic3RydWN0X2dyb3VwIiwgKFB5T2JqZWN0ICopICZTdHJ1Y3RHcnBUeXBlKTsKKyAgICBpZiAoIWluaXRpYWxpemVkKSB7CisgICAgICAgIGlmIChQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlMigmU3RydWN0R3JwVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdHJ1Y3RfZ3JvdXBfdHlwZV9kZXNjKSA8IDApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJzdHJ1Y3RfZ3JvdXAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUHlPYmplY3QgKikmU3RydWN0R3JwVHlwZSkgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpbml0aWFsaXplZCA9IDE7CiAgICAgcmV0dXJuIG07CiB9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL2hhc2hsaWIuaCBiL01vZHVsZXMvaGFzaGxpYi5oCmluZGV4IDQ1OTkxNDYuLjM1ODA0NTMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvaGFzaGxpYi5oCisrKyBiL01vZHVsZXMvaGFzaGxpYi5oCkBAIC0yNiwzICsyNiwzNiBAQAogICAgICAgICAgICAgcmV0dXJuIE5VTEw7IFwKICAgICAgICAgfSBcCiAgICAgfSB3aGlsZSgwKTsKKworLyoKKyAqIEhlbHBlciBjb2RlIHRvIHN5bmNocm9uaXplIGFjY2VzcyB0byB0aGUgaGFzaCBvYmplY3Qgd2hlbiB0aGUgR0lMIGlzCisgKiByZWxlYXNlZCBhcm91bmQgYSBDUFUgY29uc3VtaW5nIGhhc2hsaWIgb3BlcmF0aW9uLiBBbGwgY29kZSBwYXRocyB0aGF0CisgKiBhY2Nlc3MgYSBtdXRhYmxlIHBhcnQgb2Ygb2JqIG11c3QgYmUgZW5jbG9zZWQgaW4gYW4gRU5URVJfSEFTSExJQiAvCisgKiBMRUFWRV9IQVNITElCIGJsb2NrIG9yIGV4cGxpY2l0bHkgYWNxdWlyZSBhbmQgcmVsZWFzZSB0aGUgbG9jayBpbnNpZGUKKyAqIGEgUFlfQkVHSU4gLyBFTkRfQUxMT1dfVEhSRUFEUyBibG9jayBpZiB0aGV5IHdpc2ggdG8gcmVsZWFzZSB0aGUgR0lMIGZvcgorICogYW4gb3BlcmF0aW9uLgorICovCisKKyNpZmRlZiBXSVRIX1RIUkVBRAorI2luY2x1ZGUgInB5dGhyZWFkLmgiCisgICAgI2RlZmluZSBFTlRFUl9IQVNITElCKG9iaikgXAorICAgICAgICBpZiAoKG9iaiktPmxvY2spIHsgXAorICAgICAgICAgICAgaWYgKCFQeVRocmVhZF9hY3F1aXJlX2xvY2soKG9iaiktPmxvY2ssIDApKSB7IFwKKyAgICAgICAgICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTIFwKKyAgICAgICAgICAgICAgICBQeVRocmVhZF9hY3F1aXJlX2xvY2soKG9iaiktPmxvY2ssIDEpOyBcCisgICAgICAgICAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMgXAorICAgICAgICAgICAgfSBcCisgICAgICAgIH0KKyAgICAjZGVmaW5lIExFQVZFX0hBU0hMSUIob2JqKSBcCisgICAgICAgIGlmICgob2JqKS0+bG9jaykgeyBcCisgICAgICAgICAgICBQeVRocmVhZF9yZWxlYXNlX2xvY2soKG9iaiktPmxvY2spOyBcCisgICAgICAgIH0KKyNlbHNlCisgICAgI2RlZmluZSBFTlRFUl9IQVNITElCKG9iaikKKyAgICAjZGVmaW5lIExFQVZFX0hBU0hMSUIob2JqKQorI2VuZGlmCisKKy8qIFRPRE8oZ3BzKTogV2Ugc2hvdWxkIHByb2JhYmx5IG1ha2UgdGhpcyBhIG1vZHVsZSBvciBFVlBvYmplY3QgYXR0cmlidXRlCisgKiB0byBhbGxvdyB0aGUgdXNlciB0byBvcHRpbWl6ZSBiYXNlZCBvbiB0aGUgcGxhdGZvcm0gdGhleSdyZSB1c2luZy4gKi8KKyNkZWZpbmUgSEFTSExJQl9HSUxfTUlOU0laRSAyMDQ4CisKZGlmZiAtLWdpdCBhL01vZHVsZXMvaGFzaHRhYmxlLmMgYi9Nb2R1bGVzL2hhc2h0YWJsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzM2YzMTMKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL2hhc2h0YWJsZS5jCkBAIC0wLDAgKzEsNTE5IEBACisvKiBUaGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIGhhc2ggdGFibGUgKF9QeV9oYXNodGFibGVfdCkgaXMgYmFzZWQgb24gdGhlIGNmdWhhc2gKKyAgIHByb2plY3Q6CisgICBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2xpYmNmdS8KKworICAgQ29weXJpZ2h0IG9mIGNmdWhhc2g6CisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBDcmVhdGlvbiBkYXRlOiAyMDA1LTA2LTI0IDIxOjIyOjQwCisgICBBdXRob3JzOiBEb24KKyAgIENoYW5nZSBsb2c6CisKKyAgIENvcHlyaWdodCAoYykgMjAwNSBEb24gT3dlbnMKKyAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgIFRoaXMgY29kZSBpcyByZWxlYXNlZCB1bmRlciB0aGUgQlNEIGxpY2Vuc2U6CisKKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgICBhcmUgbWV0OgorCisgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisKKyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAgICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBhdXRob3Igbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAgICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAgICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICAgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAgIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAgIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgICAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAgIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICAgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICAgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICAgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KKworI2luY2x1ZGUgIlB5dGhvbi5oIgorI2luY2x1ZGUgImhhc2h0YWJsZS5oIgorCisjZGVmaW5lIEhBU0hUQUJMRV9NSU5fU0laRSAxNgorI2RlZmluZSBIQVNIVEFCTEVfSElHSCAwLjUwCisjZGVmaW5lIEhBU0hUQUJMRV9MT1cgMC4xMAorI2RlZmluZSBIQVNIVEFCTEVfUkVIQVNIX0ZBQ1RPUiAyLjAgLyAoSEFTSFRBQkxFX0xPVyArIEhBU0hUQUJMRV9ISUdIKQorCisjZGVmaW5lIEJVQ0tFVFNfSEVBRChTTElTVCkgXAorICAgICAgICAoKF9QeV9oYXNodGFibGVfZW50cnlfdCAqKV9QeV9TTElTVF9IRUFEKCYoU0xJU1QpKSkKKyNkZWZpbmUgVEFCTEVfSEVBRChIVCwgQlVDS0VUKSBcCisgICAgICAgICgoX1B5X2hhc2h0YWJsZV9lbnRyeV90ICopX1B5X1NMSVNUX0hFQUQoJihIVCktPmJ1Y2tldHNbQlVDS0VUXSkpCisjZGVmaW5lIEVOVFJZX05FWFQoRU5UUlkpIFwKKyAgICAgICAgKChfUHlfaGFzaHRhYmxlX2VudHJ5X3QgKilfUHlfU0xJU1RfSVRFTV9ORVhUKEVOVFJZKSkKKyNkZWZpbmUgSEFTSFRBQkxFX0lURU1fU0laRShIVCkgXAorICAgICAgICAoc2l6ZW9mKF9QeV9oYXNodGFibGVfZW50cnlfdCkgKyAoSFQpLT5kYXRhX3NpemUpCisKKy8qIEZvcndhcmQgZGVjbGFyYXRpb24gKi8KK3N0YXRpYyB2b2lkIGhhc2h0YWJsZV9yZWhhc2goX1B5X2hhc2h0YWJsZV90ICpodCk7CisKK3N0YXRpYyB2b2lkCitfUHlfc2xpc3RfaW5pdChfUHlfc2xpc3RfdCAqbGlzdCkKK3sKKyAgICBsaXN0LT5oZWFkID0gTlVMTDsKK30KKworc3RhdGljIHZvaWQKK19QeV9zbGlzdF9wcmVwZW5kKF9QeV9zbGlzdF90ICpsaXN0LCBfUHlfc2xpc3RfaXRlbV90ICppdGVtKQoreworICAgIGl0ZW0tPm5leHQgPSBsaXN0LT5oZWFkOworICAgIGxpc3QtPmhlYWQgPSBpdGVtOworfQorCitzdGF0aWMgdm9pZAorX1B5X3NsaXN0X3JlbW92ZShfUHlfc2xpc3RfdCAqbGlzdCwgX1B5X3NsaXN0X2l0ZW1fdCAqcHJldmlvdXMsCisgICAgICAgICAgICAgICAgIF9QeV9zbGlzdF9pdGVtX3QgKml0ZW0pCit7CisgICAgaWYgKHByZXZpb3VzICE9IE5VTEwpCisgICAgICAgIHByZXZpb3VzLT5uZXh0ID0gaXRlbS0+bmV4dDsKKyAgICBlbHNlCisgICAgICAgIGxpc3QtPmhlYWQgPSBpdGVtLT5uZXh0OworfQorCitQeV91aGFzaF90CitfUHlfaGFzaHRhYmxlX2hhc2hfaW50KGNvbnN0IHZvaWQgKmtleSkKK3sKKyAgICByZXR1cm4gKFB5X3VoYXNoX3Qpa2V5OworfQorCitQeV91aGFzaF90CitfUHlfaGFzaHRhYmxlX2hhc2hfcHRyKGNvbnN0IHZvaWQgKmtleSkKK3sKKyAgICByZXR1cm4gKFB5X3VoYXNoX3QpX1B5X0hhc2hQb2ludGVyKCh2b2lkICopa2V5KTsKK30KKworaW50CitfUHlfaGFzaHRhYmxlX2NvbXBhcmVfZGlyZWN0KGNvbnN0IHZvaWQgKmtleSwgY29uc3QgX1B5X2hhc2h0YWJsZV9lbnRyeV90ICplbnRyeSkKK3sKKyAgICByZXR1cm4gZW50cnktPmtleSA9PSBrZXk7Cit9CisKKy8qIG1ha2VzIHN1cmUgdGhlIHJlYWwgc2l6ZSBvZiB0aGUgYnVja2V0cyBhcnJheSBpcyBhIHBvd2VyIG9mIDIgKi8KK3N0YXRpYyBzaXplX3QKK3JvdW5kX3NpemUoc2l6ZV90IHMpCit7CisgICAgc2l6ZV90IGk7CisgICAgaWYgKHMgPCBIQVNIVEFCTEVfTUlOX1NJWkUpCisgICAgICAgIHJldHVybiBIQVNIVEFCTEVfTUlOX1NJWkU7CisgICAgaSA9IDE7CisgICAgd2hpbGUgKGkgPCBzKQorICAgICAgICBpIDw8PSAxOworICAgIHJldHVybiBpOworfQorCitfUHlfaGFzaHRhYmxlX3QgKgorX1B5X2hhc2h0YWJsZV9uZXdfZnVsbChzaXplX3QgZGF0YV9zaXplLCBzaXplX3QgaW5pdF9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICBfUHlfaGFzaHRhYmxlX2hhc2hfZnVuYyBoYXNoX2Z1bmMsCisgICAgICAgICAgICAgICAgICAgICAgIF9QeV9oYXNodGFibGVfY29tcGFyZV9mdW5jIGNvbXBhcmVfZnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgX1B5X2hhc2h0YWJsZV9jb3B5X2RhdGFfZnVuYyBjb3B5X2RhdGFfZnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgX1B5X2hhc2h0YWJsZV9mcmVlX2RhdGFfZnVuYyBmcmVlX2RhdGFfZnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgX1B5X2hhc2h0YWJsZV9nZXRfZGF0YV9zaXplX2Z1bmMgZ2V0X2RhdGFfc2l6ZV9mdW5jLAorICAgICAgICAgICAgICAgICAgICAgICBfUHlfaGFzaHRhYmxlX2FsbG9jYXRvcl90ICphbGxvY2F0b3IpCit7CisgICAgX1B5X2hhc2h0YWJsZV90ICpodDsKKyAgICBzaXplX3QgYnVja2V0c19zaXplOworICAgIF9QeV9oYXNodGFibGVfYWxsb2NhdG9yX3QgYWxsb2M7CisKKyAgICBpZiAoYWxsb2NhdG9yID09IE5VTEwpIHsKKyAgICAgICAgYWxsb2MubWFsbG9jID0gUHlNZW1fUmF3TWFsbG9jOworICAgICAgICBhbGxvYy5mcmVlID0gUHlNZW1fUmF3RnJlZTsKKyAgICB9CisgICAgZWxzZQorICAgICAgICBhbGxvYyA9ICphbGxvY2F0b3I7CisKKyAgICBodCA9IChfUHlfaGFzaHRhYmxlX3QgKilhbGxvYy5tYWxsb2Moc2l6ZW9mKF9QeV9oYXNodGFibGVfdCkpOworICAgIGlmIChodCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gaHQ7CisKKyAgICBodC0+bnVtX2J1Y2tldHMgPSByb3VuZF9zaXplKGluaXRfc2l6ZSk7CisgICAgaHQtPmVudHJpZXMgPSAwOworICAgIGh0LT5kYXRhX3NpemUgPSBkYXRhX3NpemU7CisKKyAgICBidWNrZXRzX3NpemUgPSBodC0+bnVtX2J1Y2tldHMgKiBzaXplb2YoaHQtPmJ1Y2tldHNbMF0pOworICAgIGh0LT5idWNrZXRzID0gYWxsb2MubWFsbG9jKGJ1Y2tldHNfc2l6ZSk7CisgICAgaWYgKGh0LT5idWNrZXRzID09IE5VTEwpIHsKKyAgICAgICAgYWxsb2MuZnJlZShodCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBtZW1zZXQoaHQtPmJ1Y2tldHMsIDAsIGJ1Y2tldHNfc2l6ZSk7CisKKyAgICBodC0+aGFzaF9mdW5jID0gaGFzaF9mdW5jOworICAgIGh0LT5jb21wYXJlX2Z1bmMgPSBjb21wYXJlX2Z1bmM7CisgICAgaHQtPmNvcHlfZGF0YV9mdW5jID0gY29weV9kYXRhX2Z1bmM7CisgICAgaHQtPmZyZWVfZGF0YV9mdW5jID0gZnJlZV9kYXRhX2Z1bmM7CisgICAgaHQtPmdldF9kYXRhX3NpemVfZnVuYyA9IGdldF9kYXRhX3NpemVfZnVuYzsKKyAgICBodC0+YWxsb2MgPSBhbGxvYzsKKyAgICByZXR1cm4gaHQ7Cit9CisKK19QeV9oYXNodGFibGVfdCAqCitfUHlfaGFzaHRhYmxlX25ldyhzaXplX3QgZGF0YV9zaXplLAorICAgICAgICAgICAgICAgICAgX1B5X2hhc2h0YWJsZV9oYXNoX2Z1bmMgaGFzaF9mdW5jLAorICAgICAgICAgICAgICAgICAgX1B5X2hhc2h0YWJsZV9jb21wYXJlX2Z1bmMgY29tcGFyZV9mdW5jKQoreworICAgIHJldHVybiBfUHlfaGFzaHRhYmxlX25ld19mdWxsKGRhdGFfc2l6ZSwgSEFTSFRBQkxFX01JTl9TSVpFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hfZnVuYywgY29tcGFyZV9mdW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpOworfQorCitzaXplX3QKK19QeV9oYXNodGFibGVfc2l6ZShfUHlfaGFzaHRhYmxlX3QgKmh0KQoreworICAgIHNpemVfdCBzaXplOworICAgIHNpemVfdCBodjsKKworICAgIHNpemUgPSBzaXplb2YoX1B5X2hhc2h0YWJsZV90KTsKKworICAgIC8qIGJ1Y2tldHMgKi8KKyAgICBzaXplICs9IGh0LT5udW1fYnVja2V0cyAqIHNpemVvZihfUHlfaGFzaHRhYmxlX2VudHJ5X3QgKik7CisKKyAgICAvKiBlbnRyaWVzICovCisgICAgc2l6ZSArPSBodC0+ZW50cmllcyAqIEhBU0hUQUJMRV9JVEVNX1NJWkUoaHQpOworCisgICAgLyogZGF0YSBsaW5rZWQgZnJvbSBlbnRyaWVzICovCisgICAgaWYgKGh0LT5nZXRfZGF0YV9zaXplX2Z1bmMpIHsKKyAgICAgICAgZm9yIChodiA9IDA7IGh2IDwgaHQtPm51bV9idWNrZXRzOyBodisrKSB7CisgICAgICAgICAgICBfUHlfaGFzaHRhYmxlX2VudHJ5X3QgKmVudHJ5OworCisgICAgICAgICAgICBmb3IgKGVudHJ5ID0gVEFCTEVfSEVBRChodCwgaHYpOyBlbnRyeTsgZW50cnkgPSBFTlRSWV9ORVhUKGVudHJ5KSkgeworICAgICAgICAgICAgICAgIHZvaWQgKmRhdGE7CisKKyAgICAgICAgICAgICAgICBkYXRhID0gX1B5X0hBU0hUQUJMRV9FTlRSWV9EQVRBX0FTX1ZPSURfUChlbnRyeSk7CisgICAgICAgICAgICAgICAgc2l6ZSArPSBodC0+Z2V0X2RhdGFfc2l6ZV9mdW5jKGRhdGEpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBzaXplOworfQorCisjaWZkZWYgUHlfREVCVUcKK3ZvaWQKK19QeV9oYXNodGFibGVfcHJpbnRfc3RhdHMoX1B5X2hhc2h0YWJsZV90ICpodCkKK3sKKyAgICBzaXplX3Qgc2l6ZTsKKyAgICBzaXplX3QgY2hhaW5fbGVuLCBtYXhfY2hhaW5fbGVuLCB0b3RhbF9jaGFpbl9sZW4sIG5jaGFpbnM7CisgICAgX1B5X2hhc2h0YWJsZV9lbnRyeV90ICplbnRyeTsKKyAgICBzaXplX3QgaHY7CisgICAgZG91YmxlIGxvYWQ7CisKKyAgICBzaXplID0gX1B5X2hhc2h0YWJsZV9zaXplKGh0KTsKKworICAgIGxvYWQgPSAoZG91YmxlKWh0LT5lbnRyaWVzIC8gaHQtPm51bV9idWNrZXRzOworCisgICAgbWF4X2NoYWluX2xlbiA9IDA7CisgICAgdG90YWxfY2hhaW5fbGVuID0gMDsKKyAgICBuY2hhaW5zID0gMDsKKyAgICBmb3IgKGh2ID0gMDsgaHYgPCBodC0+bnVtX2J1Y2tldHM7IGh2KyspIHsKKyAgICAgICAgZW50cnkgPSBUQUJMRV9IRUFEKGh0LCBodik7CisgICAgICAgIGlmIChlbnRyeSAhPSBOVUxMKSB7CisgICAgICAgICAgICBjaGFpbl9sZW4gPSAwOworICAgICAgICAgICAgZm9yICg7IGVudHJ5OyBlbnRyeSA9IEVOVFJZX05FWFQoZW50cnkpKSB7CisgICAgICAgICAgICAgICAgY2hhaW5fbGVuKys7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoY2hhaW5fbGVuID4gbWF4X2NoYWluX2xlbikKKyAgICAgICAgICAgICAgICBtYXhfY2hhaW5fbGVuID0gY2hhaW5fbGVuOworICAgICAgICAgICAgdG90YWxfY2hhaW5fbGVuICs9IGNoYWluX2xlbjsKKyAgICAgICAgICAgIG5jaGFpbnMrKzsKKyAgICAgICAgfQorICAgIH0KKyAgICBwcmludGYoImhhc2ggdGFibGUgJXA6IGVudHJpZXM9JSIKKyAgICAgICAgICAgUFlfRk9STUFUX1NJWkVfVCAidS8lIiBQWV9GT1JNQVRfU0laRV9UICJ1ICglLjBmJSUpLCAiLAorICAgICAgICAgICBodCwgaHQtPmVudHJpZXMsIGh0LT5udW1fYnVja2V0cywgbG9hZCAqIDEwMC4wKTsKKyAgICBpZiAobmNoYWlucykKKyAgICAgICAgcHJpbnRmKCJhdmdfY2hhaW5fbGVuPSUuMWYsICIsIChkb3VibGUpdG90YWxfY2hhaW5fbGVuIC8gbmNoYWlucyk7CisgICAgcHJpbnRmKCJtYXhfY2hhaW5fbGVuPSUiIFBZX0ZPUk1BVF9TSVpFX1QgInUsICUiIFBZX0ZPUk1BVF9TSVpFX1QgInUga0JcbiIsCisgICAgICAgICAgIG1heF9jaGFpbl9sZW4sIHNpemUgLyAxMDI0KTsKK30KKyNlbmRpZgorCisvKiBHZXQgYW4gZW50cnkuIFJldHVybiBOVUxMIGlmIHRoZSBrZXkgZG9lcyBub3QgZXhpc3QuICovCitfUHlfaGFzaHRhYmxlX2VudHJ5X3QgKgorX1B5X2hhc2h0YWJsZV9nZXRfZW50cnkoX1B5X2hhc2h0YWJsZV90ICpodCwgY29uc3Qgdm9pZCAqa2V5KQoreworICAgIFB5X3VoYXNoX3Qga2V5X2hhc2g7CisgICAgc2l6ZV90IGluZGV4OworICAgIF9QeV9oYXNodGFibGVfZW50cnlfdCAqZW50cnk7CisKKyAgICBrZXlfaGFzaCA9IGh0LT5oYXNoX2Z1bmMoa2V5KTsKKyAgICBpbmRleCA9IGtleV9oYXNoICYgKGh0LT5udW1fYnVja2V0cyAtIDEpOworCisgICAgZm9yIChlbnRyeSA9IFRBQkxFX0hFQUQoaHQsIGluZGV4KTsgZW50cnkgIT0gTlVMTDsgZW50cnkgPSBFTlRSWV9ORVhUKGVudHJ5KSkgeworICAgICAgICBpZiAoZW50cnktPmtleV9oYXNoID09IGtleV9oYXNoICYmIGh0LT5jb21wYXJlX2Z1bmMoa2V5LCBlbnRyeSkpCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gZW50cnk7Cit9CisKK3N0YXRpYyBpbnQKK19oYXNodGFibGVfcG9wX2VudHJ5KF9QeV9oYXNodGFibGVfdCAqaHQsIGNvbnN0IHZvaWQgKmtleSwgdm9pZCAqZGF0YSwgc2l6ZV90IGRhdGFfc2l6ZSkKK3sKKyAgICBQeV91aGFzaF90IGtleV9oYXNoOworICAgIHNpemVfdCBpbmRleDsKKyAgICBfUHlfaGFzaHRhYmxlX2VudHJ5X3QgKmVudHJ5LCAqcHJldmlvdXM7CisKKyAgICBrZXlfaGFzaCA9IGh0LT5oYXNoX2Z1bmMoa2V5KTsKKyAgICBpbmRleCA9IGtleV9oYXNoICYgKGh0LT5udW1fYnVja2V0cyAtIDEpOworCisgICAgcHJldmlvdXMgPSBOVUxMOworICAgIGZvciAoZW50cnkgPSBUQUJMRV9IRUFEKGh0LCBpbmRleCk7IGVudHJ5ICE9IE5VTEw7IGVudHJ5ID0gRU5UUllfTkVYVChlbnRyeSkpIHsKKyAgICAgICAgaWYgKGVudHJ5LT5rZXlfaGFzaCA9PSBrZXlfaGFzaCAmJiBodC0+Y29tcGFyZV9mdW5jKGtleSwgZW50cnkpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHByZXZpb3VzID0gZW50cnk7CisgICAgfQorCisgICAgaWYgKGVudHJ5ID09IE5VTEwpCisgICAgICAgIHJldHVybiAwOworCisgICAgX1B5X3NsaXN0X3JlbW92ZSgmaHQtPmJ1Y2tldHNbaW5kZXhdLCAoX1B5X3NsaXN0X2l0ZW1fdCAqKXByZXZpb3VzLAorICAgICAgICAgICAgICAgICAgICAgKF9QeV9zbGlzdF9pdGVtX3QgKillbnRyeSk7CisgICAgaHQtPmVudHJpZXMtLTsKKworICAgIGlmIChkYXRhICE9IE5VTEwpCisgICAgICAgIF9QeV9IQVNIVEFCTEVfRU5UUllfUkVBRF9EQVRBKGh0LCBkYXRhLCBkYXRhX3NpemUsIGVudHJ5KTsKKyAgICBodC0+YWxsb2MuZnJlZShlbnRyeSk7CisKKyAgICBpZiAoKGZsb2F0KWh0LT5lbnRyaWVzIC8gKGZsb2F0KWh0LT5udW1fYnVja2V0cyA8IEhBU0hUQUJMRV9MT1cpCisgICAgICAgIGhhc2h0YWJsZV9yZWhhc2goaHQpOworICAgIHJldHVybiAxOworfQorCisvKiBBZGQgYSBuZXcgZW50cnkgdG8gdGhlIGhhc2guIFRoZSBrZXkgbXVzdCBub3QgYmUgcHJlc2VudCBpbiB0aGUgaGFzaCB0YWJsZS4KKyAgIFJldHVybiAwIG9uIHN1Y2Nlc3MsIC0xIG9uIG1lbW9yeSBlcnJvci4gKi8KK2ludAorX1B5X2hhc2h0YWJsZV9zZXQoX1B5X2hhc2h0YWJsZV90ICpodCwgY29uc3Qgdm9pZCAqa2V5LAorICAgICAgICAgICAgICAgICAgdm9pZCAqZGF0YSwgc2l6ZV90IGRhdGFfc2l6ZSkKK3sKKyAgICBQeV91aGFzaF90IGtleV9oYXNoOworICAgIHNpemVfdCBpbmRleDsKKyAgICBfUHlfaGFzaHRhYmxlX2VudHJ5X3QgKmVudHJ5OworCisgICAgYXNzZXJ0KGRhdGEgIT0gTlVMTCB8fCBkYXRhX3NpemUgPT0gMCk7CisjaWZuZGVmIE5ERUJVRworICAgIC8qIERvbid0IHdyaXRlIHRoZSBhc3NlcnRpb24gb24gYSBzaW5nbGUgbGluZSBiZWNhdXNlIGl0IGlzIGludGVyZXN0aW5nCisgICAgICAgdG8ga25vdyB0aGUgZHVwbGljYXRlZCBlbnRyeSBpZiB0aGUgYXNzZXJ0aW9uIGZhaWxlZC4gVGhlIGVudHJ5IGNhbgorICAgICAgIGJlIHJlYWQgdXNpbmcgYSBkZWJ1Z2dlci4gKi8KKyAgICBlbnRyeSA9IF9QeV9oYXNodGFibGVfZ2V0X2VudHJ5KGh0LCBrZXkpOworICAgIGFzc2VydChlbnRyeSA9PSBOVUxMKTsKKyNlbmRpZgorCisgICAga2V5X2hhc2ggPSBodC0+aGFzaF9mdW5jKGtleSk7CisgICAgaW5kZXggPSBrZXlfaGFzaCAmIChodC0+bnVtX2J1Y2tldHMgLSAxKTsKKworICAgIGVudHJ5ID0gaHQtPmFsbG9jLm1hbGxvYyhIQVNIVEFCTEVfSVRFTV9TSVpFKGh0KSk7CisgICAgaWYgKGVudHJ5ID09IE5VTEwpIHsKKyAgICAgICAgLyogbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkICovCisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBlbnRyeS0+a2V5ID0gKHZvaWQgKilrZXk7CisgICAgZW50cnktPmtleV9oYXNoID0ga2V5X2hhc2g7CisKKyAgICBhc3NlcnQoZGF0YV9zaXplID09IGh0LT5kYXRhX3NpemUpOworICAgIG1lbWNweShfUHlfSEFTSFRBQkxFX0VOVFJZX0RBVEEoZW50cnkpLCBkYXRhLCBkYXRhX3NpemUpOworCisgICAgX1B5X3NsaXN0X3ByZXBlbmQoJmh0LT5idWNrZXRzW2luZGV4XSwgKF9QeV9zbGlzdF9pdGVtX3QqKWVudHJ5KTsKKyAgICBodC0+ZW50cmllcysrOworCisgICAgaWYgKChmbG9hdClodC0+ZW50cmllcyAvIChmbG9hdClodC0+bnVtX2J1Y2tldHMgPiBIQVNIVEFCTEVfSElHSCkKKyAgICAgICAgaGFzaHRhYmxlX3JlaGFzaChodCk7CisgICAgcmV0dXJuIDA7Cit9CisKKy8qIEdldCBkYXRhIGZyb20gYW4gZW50cnkuIENvcHkgZW50cnkgZGF0YSBpbnRvIGRhdGEgYW5kIHJldHVybiAxIGlmIHRoZSBlbnRyeQorICAgZXhpc3RzLCByZXR1cm4gMCBpZiB0aGUgZW50cnkgZG9lcyBub3QgZXhpc3QuICovCitpbnQKK19QeV9oYXNodGFibGVfZ2V0KF9QeV9oYXNodGFibGVfdCAqaHQsIGNvbnN0IHZvaWQgKmtleSwgdm9pZCAqZGF0YSwgc2l6ZV90IGRhdGFfc2l6ZSkKK3sKKyAgICBfUHlfaGFzaHRhYmxlX2VudHJ5X3QgKmVudHJ5OworCisgICAgYXNzZXJ0KGRhdGEgIT0gTlVMTCk7CisKKyAgICBlbnRyeSA9IF9QeV9oYXNodGFibGVfZ2V0X2VudHJ5KGh0LCBrZXkpOworICAgIGlmIChlbnRyeSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gMDsKKyAgICBfUHlfSEFTSFRBQkxFX0VOVFJZX1JFQURfREFUQShodCwgZGF0YSwgZGF0YV9zaXplLCBlbnRyeSk7CisgICAgcmV0dXJuIDE7Cit9CisKK2ludAorX1B5X2hhc2h0YWJsZV9wb3AoX1B5X2hhc2h0YWJsZV90ICpodCwgY29uc3Qgdm9pZCAqa2V5LCB2b2lkICpkYXRhLCBzaXplX3QgZGF0YV9zaXplKQoreworICAgIGFzc2VydChkYXRhICE9IE5VTEwpOworICAgIGFzc2VydChodC0+ZnJlZV9kYXRhX2Z1bmMgPT0gTlVMTCk7CisgICAgcmV0dXJuIF9oYXNodGFibGVfcG9wX2VudHJ5KGh0LCBrZXksIGRhdGEsIGRhdGFfc2l6ZSk7Cit9CisKKy8qIERlbGV0ZSBhbiBlbnRyeS4gVGhlIGVudHJ5IG11c3QgZXhpc3QuICovCit2b2lkCitfUHlfaGFzaHRhYmxlX2RlbGV0ZShfUHlfaGFzaHRhYmxlX3QgKmh0LCBjb25zdCB2b2lkICprZXkpCit7CisjaWZuZGVmIE5ERUJVRworICAgIGludCBmb3VuZCA9IF9oYXNodGFibGVfcG9wX2VudHJ5KGh0LCBrZXksIE5VTEwsIDApOworICAgIGFzc2VydChmb3VuZCk7CisjZWxzZQorICAgICh2b2lkKV9oYXNodGFibGVfcG9wX2VudHJ5KGh0LCBrZXksIE5VTEwsIDApOworI2VuZGlmCit9CisKKy8qIFByb3RvdHlwZSBmb3IgYSBwb2ludGVyIHRvIGEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGZvcmVhY2gKKyAgIGtleS92YWx1ZSBwYWlyIGluIHRoZSBoYXNoIGJ5IGhhc2h0YWJsZV9mb3JlYWNoKCkuICBJdGVyYXRpb24KKyAgIHN0b3BzIGlmIGEgbm9uLXplcm8gdmFsdWUgaXMgcmV0dXJuZWQuICovCitpbnQKK19QeV9oYXNodGFibGVfZm9yZWFjaChfUHlfaGFzaHRhYmxlX3QgKmh0LAorICAgICAgICAgICAgICAgICAgICAgIGludCAoKmZ1bmMpIChfUHlfaGFzaHRhYmxlX2VudHJ5X3QgKmVudHJ5LCB2b2lkICphcmcpLAorICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmFyZykKK3sKKyAgICBfUHlfaGFzaHRhYmxlX2VudHJ5X3QgKmVudHJ5OworICAgIHNpemVfdCBodjsKKworICAgIGZvciAoaHYgPSAwOyBodiA8IGh0LT5udW1fYnVja2V0czsgaHYrKykgeworICAgICAgICBmb3IgKGVudHJ5ID0gVEFCTEVfSEVBRChodCwgaHYpOyBlbnRyeTsgZW50cnkgPSBFTlRSWV9ORVhUKGVudHJ5KSkgeworICAgICAgICAgICAgaW50IHJlcyA9IGZ1bmMoZW50cnksIGFyZyk7CisgICAgICAgICAgICBpZiAocmVzKQorICAgICAgICAgICAgICAgIHJldHVybiByZXM7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitoYXNodGFibGVfcmVoYXNoKF9QeV9oYXNodGFibGVfdCAqaHQpCit7CisgICAgc2l6ZV90IGJ1Y2tldHNfc2l6ZSwgbmV3X3NpemUsIGJ1Y2tldDsKKyAgICBfUHlfc2xpc3RfdCAqb2xkX2J1Y2tldHMgPSBOVUxMOworICAgIHNpemVfdCBvbGRfbnVtX2J1Y2tldHM7CisKKyAgICBuZXdfc2l6ZSA9IHJvdW5kX3NpemUoKHNpemVfdCkoaHQtPmVudHJpZXMgKiBIQVNIVEFCTEVfUkVIQVNIX0ZBQ1RPUikpOworICAgIGlmIChuZXdfc2l6ZSA9PSBodC0+bnVtX2J1Y2tldHMpCisgICAgICAgIHJldHVybjsKKworICAgIG9sZF9udW1fYnVja2V0cyA9IGh0LT5udW1fYnVja2V0czsKKworICAgIGJ1Y2tldHNfc2l6ZSA9IG5ld19zaXplICogc2l6ZW9mKGh0LT5idWNrZXRzWzBdKTsKKyAgICBvbGRfYnVja2V0cyA9IGh0LT5idWNrZXRzOworICAgIGh0LT5idWNrZXRzID0gaHQtPmFsbG9jLm1hbGxvYyhidWNrZXRzX3NpemUpOworICAgIGlmIChodC0+YnVja2V0cyA9PSBOVUxMKSB7CisgICAgICAgIC8qIGNhbmNlbCByZWhhc2ggb24gbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZSAqLworICAgICAgICBodC0+YnVja2V0cyA9IG9sZF9idWNrZXRzIDsKKyAgICAgICAgLyogbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkICovCisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbWVtc2V0KGh0LT5idWNrZXRzLCAwLCBidWNrZXRzX3NpemUpOworCisgICAgaHQtPm51bV9idWNrZXRzID0gbmV3X3NpemU7CisKKyAgICBmb3IgKGJ1Y2tldCA9IDA7IGJ1Y2tldCA8IG9sZF9udW1fYnVja2V0czsgYnVja2V0KyspIHsKKyAgICAgICAgX1B5X2hhc2h0YWJsZV9lbnRyeV90ICplbnRyeSwgKm5leHQ7CisgICAgICAgIGZvciAoZW50cnkgPSBCVUNLRVRTX0hFQUQob2xkX2J1Y2tldHNbYnVja2V0XSk7IGVudHJ5ICE9IE5VTEw7IGVudHJ5ID0gbmV4dCkgeworICAgICAgICAgICAgc2l6ZV90IGVudHJ5X2luZGV4OworCisgICAgICAgICAgICBhc3NlcnQoaHQtPmhhc2hfZnVuYyhlbnRyeS0+a2V5KSA9PSBlbnRyeS0+a2V5X2hhc2gpOworICAgICAgICAgICAgbmV4dCA9IEVOVFJZX05FWFQoZW50cnkpOworICAgICAgICAgICAgZW50cnlfaW5kZXggPSBlbnRyeS0+a2V5X2hhc2ggJiAobmV3X3NpemUgLSAxKTsKKworICAgICAgICAgICAgX1B5X3NsaXN0X3ByZXBlbmQoJmh0LT5idWNrZXRzW2VudHJ5X2luZGV4XSwgKF9QeV9zbGlzdF9pdGVtX3QqKWVudHJ5KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGh0LT5hbGxvYy5mcmVlKG9sZF9idWNrZXRzKTsKK30KKwordm9pZAorX1B5X2hhc2h0YWJsZV9jbGVhcihfUHlfaGFzaHRhYmxlX3QgKmh0KQoreworICAgIF9QeV9oYXNodGFibGVfZW50cnlfdCAqZW50cnksICpuZXh0OworICAgIHNpemVfdCBpOworCisgICAgZm9yIChpPTA7IGkgPCBodC0+bnVtX2J1Y2tldHM7IGkrKykgeworICAgICAgICBmb3IgKGVudHJ5ID0gVEFCTEVfSEVBRChodCwgaSk7IGVudHJ5ICE9IE5VTEw7IGVudHJ5ID0gbmV4dCkgeworICAgICAgICAgICAgbmV4dCA9IEVOVFJZX05FWFQoZW50cnkpOworICAgICAgICAgICAgaWYgKGh0LT5mcmVlX2RhdGFfZnVuYykKKyAgICAgICAgICAgICAgICBodC0+ZnJlZV9kYXRhX2Z1bmMoX1B5X0hBU0hUQUJMRV9FTlRSWV9EQVRBX0FTX1ZPSURfUChlbnRyeSkpOworICAgICAgICAgICAgaHQtPmFsbG9jLmZyZWUoZW50cnkpOworICAgICAgICB9CisgICAgICAgIF9QeV9zbGlzdF9pbml0KCZodC0+YnVja2V0c1tpXSk7CisgICAgfQorICAgIGh0LT5lbnRyaWVzID0gMDsKKyAgICBoYXNodGFibGVfcmVoYXNoKGh0KTsKK30KKwordm9pZAorX1B5X2hhc2h0YWJsZV9kZXN0cm95KF9QeV9oYXNodGFibGVfdCAqaHQpCit7CisgICAgc2l6ZV90IGk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgaHQtPm51bV9idWNrZXRzOyBpKyspIHsKKyAgICAgICAgX1B5X3NsaXN0X2l0ZW1fdCAqZW50cnkgPSBodC0+YnVja2V0c1tpXS5oZWFkOworICAgICAgICB3aGlsZSAoZW50cnkpIHsKKyAgICAgICAgICAgIF9QeV9zbGlzdF9pdGVtX3QgKmVudHJ5X25leHQgPSBlbnRyeS0+bmV4dDsKKyAgICAgICAgICAgIGlmIChodC0+ZnJlZV9kYXRhX2Z1bmMpCisgICAgICAgICAgICAgICAgaHQtPmZyZWVfZGF0YV9mdW5jKF9QeV9IQVNIVEFCTEVfRU5UUllfREFUQV9BU19WT0lEX1AoZW50cnkpKTsKKyAgICAgICAgICAgIGh0LT5hbGxvYy5mcmVlKGVudHJ5KTsKKyAgICAgICAgICAgIGVudHJ5ID0gZW50cnlfbmV4dDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGh0LT5hbGxvYy5mcmVlKGh0LT5idWNrZXRzKTsKKyAgICBodC0+YWxsb2MuZnJlZShodCk7Cit9CisKKy8qIFJldHVybiBhIGNvcHkgb2YgdGhlIGhhc2ggdGFibGUgKi8KK19QeV9oYXNodGFibGVfdCAqCitfUHlfaGFzaHRhYmxlX2NvcHkoX1B5X2hhc2h0YWJsZV90ICpzcmMpCit7CisgICAgX1B5X2hhc2h0YWJsZV90ICpkc3Q7CisgICAgX1B5X2hhc2h0YWJsZV9lbnRyeV90ICplbnRyeTsKKyAgICBzaXplX3QgYnVja2V0OworICAgIGludCBlcnI7CisgICAgdm9pZCAqZGF0YSwgKm5ld19kYXRhOworCisgICAgZHN0ID0gX1B5X2hhc2h0YWJsZV9uZXdfZnVsbChzcmMtPmRhdGFfc2l6ZSwgc3JjLT5udW1fYnVja2V0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmMtPmhhc2hfZnVuYywgc3JjLT5jb21wYXJlX2Z1bmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjLT5jb3B5X2RhdGFfZnVuYywgc3JjLT5mcmVlX2RhdGFfZnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmMtPmdldF9kYXRhX3NpemVfZnVuYywgJnNyYy0+YWxsb2MpOworICAgIGlmIChkc3QgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBmb3IgKGJ1Y2tldD0wOyBidWNrZXQgPCBzcmMtPm51bV9idWNrZXRzOyBidWNrZXQrKykgeworICAgICAgICBlbnRyeSA9IFRBQkxFX0hFQUQoc3JjLCBidWNrZXQpOworICAgICAgICBmb3IgKDsgZW50cnk7IGVudHJ5ID0gRU5UUllfTkVYVChlbnRyeSkpIHsKKyAgICAgICAgICAgIGlmIChzcmMtPmNvcHlfZGF0YV9mdW5jKSB7CisgICAgICAgICAgICAgICAgZGF0YSA9IF9QeV9IQVNIVEFCTEVfRU5UUllfREFUQV9BU19WT0lEX1AoZW50cnkpOworICAgICAgICAgICAgICAgIG5ld19kYXRhID0gc3JjLT5jb3B5X2RhdGFfZnVuYyhkYXRhKTsKKyAgICAgICAgICAgICAgICBpZiAobmV3X2RhdGEgIT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgZXJyID0gX1B5X2hhc2h0YWJsZV9zZXQoZHN0LCBlbnRyeS0+a2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZXdfZGF0YSwgc3JjLT5kYXRhX3NpemUpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgZXJyID0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGRhdGEgPSBfUHlfSEFTSFRBQkxFX0VOVFJZX0RBVEEoZW50cnkpOworICAgICAgICAgICAgICAgIGVyciA9IF9QeV9oYXNodGFibGVfc2V0KGRzdCwgZW50cnktPmtleSwgZGF0YSwgc3JjLT5kYXRhX3NpemUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGVycikgeworICAgICAgICAgICAgICAgIF9QeV9oYXNodGFibGVfZGVzdHJveShkc3QpOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBkc3Q7Cit9CisKZGlmZiAtLWdpdCBhL01vZHVsZXMvaGFzaHRhYmxlLmggYi9Nb2R1bGVzL2hhc2h0YWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5Zjk5OTMKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL2hhc2h0YWJsZS5oCkBAIC0wLDAgKzEsMTI4IEBACisjaWZuZGVmIFB5X0hBU0hUQUJMRV9ICisjZGVmaW5lIFB5X0hBU0hUQUJMRV9ICisKKy8qIFRoZSB3aG9sZSBBUEkgaXMgcHJpdmF0ZSAqLworI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQorCit0eXBlZGVmIHN0cnVjdCBfUHlfc2xpc3RfaXRlbV9zIHsKKyAgICBzdHJ1Y3QgX1B5X3NsaXN0X2l0ZW1fcyAqbmV4dDsKK30gX1B5X3NsaXN0X2l0ZW1fdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIF9QeV9zbGlzdF9pdGVtX3QgKmhlYWQ7Cit9IF9QeV9zbGlzdF90OworCisjZGVmaW5lIF9QeV9TTElTVF9JVEVNX05FWFQoSVRFTSkgKCgoX1B5X3NsaXN0X2l0ZW1fdCAqKUlURU0pLT5uZXh0KQorCisjZGVmaW5lIF9QeV9TTElTVF9IRUFEKFNMSVNUKSAoKChfUHlfc2xpc3RfdCAqKVNMSVNUKS0+aGVhZCkKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIC8qIHVzZWQgYnkgX1B5X2hhc2h0YWJsZV90LmJ1Y2tldHMgdG8gbGluayBlbnRyaWVzICovCisgICAgX1B5X3NsaXN0X2l0ZW1fdCBfUHlfc2xpc3RfaXRlbTsKKworICAgIGNvbnN0IHZvaWQgKmtleTsKKyAgICBQeV91aGFzaF90IGtleV9oYXNoOworCisgICAgLyogZGF0YSBmb2xsb3dzICovCit9IF9QeV9oYXNodGFibGVfZW50cnlfdDsKKworI2RlZmluZSBfUHlfSEFTSFRBQkxFX0VOVFJZX0RBVEEoRU5UUlkpIFwKKyAgICAgICAgKChjaGFyICopKEVOVFJZKSArIHNpemVvZihfUHlfaGFzaHRhYmxlX2VudHJ5X3QpKQorCisjZGVmaW5lIF9QeV9IQVNIVEFCTEVfRU5UUllfREFUQV9BU19WT0lEX1AoRU5UUlkpIFwKKyAgICAgICAgKCoodm9pZCAqKilfUHlfSEFTSFRBQkxFX0VOVFJZX0RBVEEoRU5UUlkpKQorCisjZGVmaW5lIF9QeV9IQVNIVEFCTEVfRU5UUllfUkVBRF9EQVRBKFRBQkxFLCBEQVRBLCBEQVRBX1NJWkUsIEVOVFJZKSBcCisgICAgZG8geyBcCisgICAgICAgIGFzc2VydCgoREFUQV9TSVpFKSA9PSAoVEFCTEUpLT5kYXRhX3NpemUpOyBcCisgICAgICAgIG1lbWNweShEQVRBLCBfUHlfSEFTSFRBQkxFX0VOVFJZX0RBVEEoRU5UUlkpLCBEQVRBX1NJWkUpOyBcCisgICAgfSB3aGlsZSAoMCkKKwordHlwZWRlZiBQeV91aGFzaF90ICgqX1B5X2hhc2h0YWJsZV9oYXNoX2Z1bmMpIChjb25zdCB2b2lkICprZXkpOwordHlwZWRlZiBpbnQgKCpfUHlfaGFzaHRhYmxlX2NvbXBhcmVfZnVuYykgKGNvbnN0IHZvaWQgKmtleSwgY29uc3QgX1B5X2hhc2h0YWJsZV9lbnRyeV90ICpoZSk7Cit0eXBlZGVmIHZvaWQqICgqX1B5X2hhc2h0YWJsZV9jb3B5X2RhdGFfZnVuYykodm9pZCAqZGF0YSk7Cit0eXBlZGVmIHZvaWQgKCpfUHlfaGFzaHRhYmxlX2ZyZWVfZGF0YV9mdW5jKSh2b2lkICpkYXRhKTsKK3R5cGVkZWYgc2l6ZV90ICgqX1B5X2hhc2h0YWJsZV9nZXRfZGF0YV9zaXplX2Z1bmMpKHZvaWQgKmRhdGEpOworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgLyogYWxsb2NhdGUgYSBtZW1vcnkgYmxvY2sgKi8KKyAgICB2b2lkKiAoKm1hbGxvYykgKHNpemVfdCBzaXplKTsKKworICAgIC8qIHJlbGVhc2UgYSBtZW1vcnkgYmxvY2sgKi8KKyAgICB2b2lkICgqZnJlZSkgKHZvaWQgKnB0cik7Cit9IF9QeV9oYXNodGFibGVfYWxsb2NhdG9yX3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBzaXplX3QgbnVtX2J1Y2tldHM7CisgICAgc2l6ZV90IGVudHJpZXM7IC8qIFRvdGFsIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSB0YWJsZS4gKi8KKyAgICBfUHlfc2xpc3RfdCAqYnVja2V0czsKKyAgICBzaXplX3QgZGF0YV9zaXplOworCisgICAgX1B5X2hhc2h0YWJsZV9oYXNoX2Z1bmMgaGFzaF9mdW5jOworICAgIF9QeV9oYXNodGFibGVfY29tcGFyZV9mdW5jIGNvbXBhcmVfZnVuYzsKKyAgICBfUHlfaGFzaHRhYmxlX2NvcHlfZGF0YV9mdW5jIGNvcHlfZGF0YV9mdW5jOworICAgIF9QeV9oYXNodGFibGVfZnJlZV9kYXRhX2Z1bmMgZnJlZV9kYXRhX2Z1bmM7CisgICAgX1B5X2hhc2h0YWJsZV9nZXRfZGF0YV9zaXplX2Z1bmMgZ2V0X2RhdGFfc2l6ZV9mdW5jOworICAgIF9QeV9oYXNodGFibGVfYWxsb2NhdG9yX3QgYWxsb2M7Cit9IF9QeV9oYXNodGFibGVfdDsKKworLyogaGFzaCBhbmQgY29tcGFyZSBmdW5jdGlvbnMgZm9yIGludGVnZXJzIGFuZCBwb2ludGVycyAqLworUHlBUElfRlVOQyhQeV91aGFzaF90KSBfUHlfaGFzaHRhYmxlX2hhc2hfcHRyKGNvbnN0IHZvaWQgKmtleSk7CitQeUFQSV9GVU5DKFB5X3VoYXNoX3QpIF9QeV9oYXNodGFibGVfaGFzaF9pbnQoY29uc3Qgdm9pZCAqa2V5KTsKK1B5QVBJX0ZVTkMoaW50KSBfUHlfaGFzaHRhYmxlX2NvbXBhcmVfZGlyZWN0KGNvbnN0IHZvaWQgKmtleSwgY29uc3QgX1B5X2hhc2h0YWJsZV9lbnRyeV90ICplbnRyeSk7CisKK1B5QVBJX0ZVTkMoX1B5X2hhc2h0YWJsZV90ICopIF9QeV9oYXNodGFibGVfbmV3KAorICAgIHNpemVfdCBkYXRhX3NpemUsCisgICAgX1B5X2hhc2h0YWJsZV9oYXNoX2Z1bmMgaGFzaF9mdW5jLAorICAgIF9QeV9oYXNodGFibGVfY29tcGFyZV9mdW5jIGNvbXBhcmVfZnVuYyk7CitQeUFQSV9GVU5DKF9QeV9oYXNodGFibGVfdCAqKSBfUHlfaGFzaHRhYmxlX25ld19mdWxsKAorICAgIHNpemVfdCBkYXRhX3NpemUsCisgICAgc2l6ZV90IGluaXRfc2l6ZSwKKyAgICBfUHlfaGFzaHRhYmxlX2hhc2hfZnVuYyBoYXNoX2Z1bmMsCisgICAgX1B5X2hhc2h0YWJsZV9jb21wYXJlX2Z1bmMgY29tcGFyZV9mdW5jLAorICAgIF9QeV9oYXNodGFibGVfY29weV9kYXRhX2Z1bmMgY29weV9kYXRhX2Z1bmMsCisgICAgX1B5X2hhc2h0YWJsZV9mcmVlX2RhdGFfZnVuYyBmcmVlX2RhdGFfZnVuYywKKyAgICBfUHlfaGFzaHRhYmxlX2dldF9kYXRhX3NpemVfZnVuYyBnZXRfZGF0YV9zaXplX2Z1bmMsCisgICAgX1B5X2hhc2h0YWJsZV9hbGxvY2F0b3JfdCAqYWxsb2NhdG9yKTsKK1B5QVBJX0ZVTkMoX1B5X2hhc2h0YWJsZV90ICopIF9QeV9oYXNodGFibGVfY29weShfUHlfaGFzaHRhYmxlX3QgKnNyYyk7CitQeUFQSV9GVU5DKHZvaWQpIF9QeV9oYXNodGFibGVfY2xlYXIoX1B5X2hhc2h0YWJsZV90ICpodCk7CitQeUFQSV9GVU5DKHZvaWQpIF9QeV9oYXNodGFibGVfZGVzdHJveShfUHlfaGFzaHRhYmxlX3QgKmh0KTsKKwordHlwZWRlZiBpbnQgKCpfUHlfaGFzaHRhYmxlX2ZvcmVhY2hfZnVuYykgKF9QeV9oYXNodGFibGVfZW50cnlfdCAqZW50cnksIHZvaWQgKmFyZyk7CisKK1B5QVBJX0ZVTkMoaW50KSBfUHlfaGFzaHRhYmxlX2ZvcmVhY2goCisgICAgX1B5X2hhc2h0YWJsZV90ICpodCwKKyAgICBfUHlfaGFzaHRhYmxlX2ZvcmVhY2hfZnVuYyBmdW5jLCB2b2lkICphcmcpOworUHlBUElfRlVOQyhzaXplX3QpIF9QeV9oYXNodGFibGVfc2l6ZShfUHlfaGFzaHRhYmxlX3QgKmh0KTsKKworUHlBUElfRlVOQyhfUHlfaGFzaHRhYmxlX2VudHJ5X3QqKSBfUHlfaGFzaHRhYmxlX2dldF9lbnRyeSgKKyAgICBfUHlfaGFzaHRhYmxlX3QgKmh0LAorICAgIGNvbnN0IHZvaWQgKmtleSk7CitQeUFQSV9GVU5DKGludCkgX1B5X2hhc2h0YWJsZV9zZXQoCisgICAgX1B5X2hhc2h0YWJsZV90ICpodCwKKyAgICBjb25zdCB2b2lkICprZXksCisgICAgdm9pZCAqZGF0YSwKKyAgICBzaXplX3QgZGF0YV9zaXplKTsKK1B5QVBJX0ZVTkMoaW50KSBfUHlfaGFzaHRhYmxlX2dldCgKKyAgICBfUHlfaGFzaHRhYmxlX3QgKmh0LAorICAgIGNvbnN0IHZvaWQgKmtleSwKKyAgICB2b2lkICpkYXRhLAorICAgIHNpemVfdCBkYXRhX3NpemUpOworUHlBUElfRlVOQyhpbnQpIF9QeV9oYXNodGFibGVfcG9wKAorICAgIF9QeV9oYXNodGFibGVfdCAqaHQsCisgICAgY29uc3Qgdm9pZCAqa2V5LAorICAgIHZvaWQgKmRhdGEsCisgICAgc2l6ZV90IGRhdGFfc2l6ZSk7CitQeUFQSV9GVU5DKHZvaWQpIF9QeV9oYXNodGFibGVfZGVsZXRlKAorICAgIF9QeV9oYXNodGFibGVfdCAqaHQsCisgICAgY29uc3Qgdm9pZCAqa2V5KTsKKworI2RlZmluZSBfUHlfSEFTSFRBQkxFX1NFVChUQUJMRSwgS0VZLCBEQVRBKSBcCisgICAgX1B5X2hhc2h0YWJsZV9zZXQoVEFCTEUsIEtFWSwgJihEQVRBKSwgc2l6ZW9mKERBVEEpKQorCisjZGVmaW5lIF9QeV9IQVNIVEFCTEVfR0VUKFRBQkxFLCBLRVksIERBVEEpIFwKKyAgICBfUHlfaGFzaHRhYmxlX2dldChUQUJMRSwgS0VZLCAmKERBVEEpLCBzaXplb2YoREFUQSkpCisKKyNlbmRpZiAgIC8qIFB5X0xJTUlURURfQVBJICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9pdGVydG9vbHNtb2R1bGUuYyBiL01vZHVsZXMvaXRlcnRvb2xzbW9kdWxlLmMKaW5kZXggNTdhMzk4Zi4uYjg2ZTc0ZCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9pdGVydG9vbHNtb2R1bGUuYworKysgYi9Nb2R1bGVzL2l0ZXJ0b29sc21vZHVsZS5jCkBAIC00MDEsNyArNDAxLDcgQEAKIHR5cGVkZWYgc3RydWN0IHsKICAgICBQeU9iamVjdF9IRUFECiAgICAgUHlPYmplY3QgKml0OwotICAgIGludCBudW1yZWFkOworICAgIGludCBudW1yZWFkOyAgLyogMCA8PSBudW1yZWFkIDw9IExJTktDRUxMUyAqLwogICAgIFB5T2JqZWN0ICpuZXh0bGluazsKICAgICBQeU9iamVjdCAqKHZhbHVlc1tMSU5LQ0VMTFNdKTsKIH0gdGVlZGF0YW9iamVjdDsKQEAgLTQwOSw3ICs0MDksNyBAQAogdHlwZWRlZiBzdHJ1Y3QgewogICAgIFB5T2JqZWN0X0hFQUQKICAgICB0ZWVkYXRhb2JqZWN0ICpkYXRhb2JqOwotICAgIGludCBpbmRleDsKKyAgICBpbnQgaW5kZXg7ICAgIC8qIDAgPD0gaW5kZXggPD0gTElOS0NFTExTICovCiAgICAgUHlPYmplY3QgKndlYWtyZWZsaXN0OwogfSB0ZWVvYmplY3Q7CiAKQEAgLTE0OTIsMTkgKzE0OTIsMjIgQEAKICAgICBQeV9zc2l6ZV90IG9sZG5leHQ7CiAgICAgUHlPYmplY3QgKigqaXRlcm5leHQpKFB5T2JqZWN0ICopOwogCisgICAgaWYgKGl0ID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCiAgICAgaXRlcm5leHQgPSAqUHlfVFlQRShpdCktPnRwX2l0ZXJuZXh0OwogICAgIHdoaWxlIChsei0+Y250IDwgbHotPm5leHQpIHsKICAgICAgICAgaXRlbSA9IGl0ZXJuZXh0KGl0KTsKICAgICAgICAgaWYgKGl0ZW0gPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgZ290byBlbXB0eTsKICAgICAgICAgUHlfREVDUkVGKGl0ZW0pOwogICAgICAgICBsei0+Y250Kys7CiAgICAgfQogICAgIGlmIChzdG9wICE9IC0xICYmIGx6LT5jbnQgPj0gc3RvcCkKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGdvdG8gZW1wdHk7CiAgICAgaXRlbSA9IGl0ZXJuZXh0KGl0KTsKICAgICBpZiAoaXRlbSA9PSBOVUxMKQotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgZ290byBlbXB0eTsKICAgICBsei0+Y250Kys7CiAgICAgb2xkbmV4dCA9IGx6LT5uZXh0OwogICAgIC8qIFRoZSAoc2l6ZV90KSBjYXN0IGJlbG93IGF2b2lkcyB0aGUgZGFuZ2VyIG9mIHVuZGVmaW5lZApAQCAtMTUxMyw2ICsxNTE2LDEwIEBACiAgICAgaWYgKGx6LT5uZXh0IDwgb2xkbmV4dCB8fCAoc3RvcCAhPSAtMSAmJiBsei0+bmV4dCA+IHN0b3ApKQogICAgICAgICBsei0+bmV4dCA9IHN0b3A7CiAgICAgcmV0dXJuIGl0ZW07CisKK2VtcHR5OgorICAgIFB5X0NMRUFSKGx6LT5pdCk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC0xNTIyLDYgKzE1MjksMTggQEAKICAgICAgKiB0aGVuICdzZXRzdGF0ZScgd2l0aCB0aGUgbmV4dCBhbmQgY291bnQKICAgICAgKi8KICAgICBQeU9iamVjdCAqc3RvcDsKKyAgICBpZiAobHotPml0ID09IE5VTEwpIHsKKyAgICAgICAgUHlPYmplY3QgKmVtcHR5X2xpc3Q7CisgICAgICAgIFB5T2JqZWN0ICplbXB0eV9pdDsKKyAgICAgICAgZW1wdHlfbGlzdCA9IFB5TGlzdF9OZXcoMCk7CisgICAgICAgIGlmIChlbXB0eV9saXN0ID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgZW1wdHlfaXQgPSBQeU9iamVjdF9HZXRJdGVyKGVtcHR5X2xpc3QpOworICAgICAgICBQeV9ERUNSRUYoZW1wdHlfbGlzdCk7CisgICAgICAgIGlmIChlbXB0eV9pdCA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJPKE5uKW4iLCBQeV9UWVBFKGx6KSwgZW1wdHlfaXQsIDAsIDApOworICAgIH0KICAgICBpZiAobHotPnN0b3AgPT0gLTEpIHsKICAgICAgICAgc3RvcCA9IFB5X05vbmU7CiAgICAgICAgIFB5X0lOQ1JFRihzdG9wKTsKQEAgLTE3MDYsNyArMTcyNSw3IEBACiAic3Rhcm1hcChmdW5jdGlvbiwgc2VxdWVuY2UpIC0tPiBzdGFybWFwIG9iamVjdFxuXAogXG5cCiBSZXR1cm4gYW4gaXRlcmF0b3Igd2hvc2UgdmFsdWVzIGFyZSByZXR1cm5lZCBmcm9tIHRoZSBmdW5jdGlvbiBldmFsdWF0ZWRcblwKLXdpdGggYSBhcmd1bWVudCB0dXBsZSB0YWtlbiBmcm9tIHRoZSBnaXZlbiBzZXF1ZW5jZS4iKTsKK3dpdGggYW4gYXJndW1lbnQgdHVwbGUgdGFrZW4gZnJvbSB0aGUgZ2l2ZW4gc2VxdWVuY2UuIik7CiAKIHN0YXRpYyBQeVR5cGVPYmplY3Qgc3Rhcm1hcF90eXBlID0gewogICAgIFB5VmFyT2JqZWN0X0hFQURfSU5JVChOVUxMLCAwKQpAQCAtMjA2NSw2ICsyMDg0LDE4IEBACiAgICAgUHlfVFlQRShseiktPnRwX2ZyZWUobHopOwogfQogCitzdGF0aWMgUHlPYmplY3QgKgorcHJvZHVjdF9zaXplb2YocHJvZHVjdG9iamVjdCAqbHosIHZvaWQgKnVudXNlZCkKK3sKKyAgICBQeV9zc2l6ZV90IHJlczsKKworICAgIHJlcyA9IHNpemVvZihwcm9kdWN0b2JqZWN0KTsKKyAgICByZXMgKz0gUHlUdXBsZV9HRVRfU0laRShsei0+cG9vbHMpICogc2l6ZW9mKFB5X3NzaXplX3QpOworICAgIHJldHVybiBQeUxvbmdfRnJvbVNzaXplX3QocmVzKTsKK30KKworUHlEb2NfU1RSVkFSKHNpemVvZl9kb2MsICJSZXR1cm5zIHNpemUgaW4gbWVtb3J5LCBpbiBieXRlcy4iKTsKKwogc3RhdGljIGludAogcHJvZHVjdF90cmF2ZXJzZShwcm9kdWN0b2JqZWN0ICpseiwgdmlzaXRwcm9jIHZpc2l0LCB2b2lkICphcmcpCiB7CkBAIC0yMjQyLDYgKzIyNzMsOCBAQAogICAgICByZWR1Y2VfZG9jfSwKICAgICB7Il9fc2V0c3RhdGVfXyIsICAgIChQeUNGdW5jdGlvbilwcm9kdWN0X3NldHN0YXRlLCAgICBNRVRIX08sCiAgICAgIHNldHN0YXRlX2RvY30sCisgICAgeyJfX3NpemVvZl9fIiwgICAgICAoUHlDRnVuY3Rpb24pcHJvZHVjdF9zaXplb2YsICAgICAgTUVUSF9OT0FSR1MsCisgICAgIHNpemVvZl9kb2N9LAogICAgIHtOVUxMLCAgICAgICAgICAgICAgTlVMTH0gICAvKiBzZW50aW5lbCAqLwogfTsKIApAQCAtMjM4Miw2ICsyNDE1LDE2IEBACiAgICAgUHlfVFlQRShjbyktPnRwX2ZyZWUoY28pOwogfQogCitzdGF0aWMgUHlPYmplY3QgKgorY29tYmluYXRpb25zX3NpemVvZihjb21iaW5hdGlvbnNvYmplY3QgKmNvLCB2b2lkICp1bnVzZWQpCit7CisgICAgUHlfc3NpemVfdCByZXM7CisKKyAgICByZXMgPSBzaXplb2YoY29tYmluYXRpb25zb2JqZWN0KTsKKyAgICByZXMgKz0gY28tPnIgKiBzaXplb2YoUHlfc3NpemVfdCk7CisgICAgcmV0dXJuIFB5TG9uZ19Gcm9tU3NpemVfdChyZXMpOworfQorCiBzdGF0aWMgaW50CiBjb21iaW5hdGlvbnNfdHJhdmVyc2UoY29tYmluYXRpb25zb2JqZWN0ICpjbywgdmlzaXRwcm9jIHZpc2l0LCB2b2lkICphcmcpCiB7CkBAIC0yNTUzLDYgKzI1OTYsOCBAQAogICAgICByZWR1Y2VfZG9jfSwKICAgICB7Il9fc2V0c3RhdGVfXyIsICAgIChQeUNGdW5jdGlvbiljb21iaW5hdGlvbnNfc2V0c3RhdGUsICAgIE1FVEhfTywKICAgICAgc2V0c3RhdGVfZG9jfSwKKyAgICB7Il9fc2l6ZW9mX18iLCAgICAgIChQeUNGdW5jdGlvbiljb21iaW5hdGlvbnNfc2l6ZW9mLCAgICAgIE1FVEhfTk9BUkdTLAorICAgICBzaXplb2ZfZG9jfSwKICAgICB7TlVMTCwgICAgICAgICAgICAgIE5VTEx9ICAgLyogc2VudGluZWwgKi8KIH07CiAKQEAgLTI3MTEsNiArMjc1NiwxNiBAQAogICAgIFB5X1RZUEUoY28pLT50cF9mcmVlKGNvKTsKIH0KIAorc3RhdGljIFB5T2JqZWN0ICoKK2N3cl9zaXplb2YoY3dyb2JqZWN0ICpjbywgdm9pZCAqdW51c2VkKQoreworICAgIFB5X3NzaXplX3QgcmVzOworCisgICAgcmVzID0gc2l6ZW9mKGN3cm9iamVjdCk7CisgICAgcmVzICs9IGNvLT5yICogc2l6ZW9mKFB5X3NzaXplX3QpOworICAgIHJldHVybiBQeUxvbmdfRnJvbVNzaXplX3QocmVzKTsKK30KKwogc3RhdGljIGludAogY3dyX3RyYXZlcnNlKGN3cm9iamVjdCAqY28sIHZpc2l0cHJvYyB2aXNpdCwgdm9pZCAqYXJnKQogewpAQCAtMjc0MCwxMSArMjc5NSwxMyBAQAogICAgICAgICBpZiAocmVzdWx0ID09IE5VTEwpCiAgICAgICAgICAgICBnb3RvIGVtcHR5OwogICAgICAgICBjby0+cmVzdWx0ID0gcmVzdWx0OwotICAgICAgICBlbGVtID0gUHlUdXBsZV9HRVRfSVRFTShwb29sLCAwKTsKLSAgICAgICAgZm9yIChpPTA7IGk8ciA7IGkrKykgewotICAgICAgICAgICAgYXNzZXJ0KGluZGljZXNbaV0gPT0gMCk7Ci0gICAgICAgICAgICBQeV9JTkNSRUYoZWxlbSk7Ci0gICAgICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKHJlc3VsdCwgaSwgZWxlbSk7CisgICAgICAgIGlmIChuID4gMCkgeworICAgICAgICAgICAgZWxlbSA9IFB5VHVwbGVfR0VUX0lURU0ocG9vbCwgMCk7CisgICAgICAgICAgICBmb3IgKGk9MDsgaTxyIDsgaSsrKSB7CisgICAgICAgICAgICAgICAgYXNzZXJ0KGluZGljZXNbaV0gPT0gMCk7CisgICAgICAgICAgICAgICAgUHlfSU5DUkVGKGVsZW0pOworICAgICAgICAgICAgICAgIFB5VHVwbGVfU0VUX0lURU0ocmVzdWx0LCBpLCBlbGVtKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIC8qIENvcHkgdGhlIHByZXZpb3VzIHJlc3VsdCB0dXBsZSBvciByZS11c2UgaXQgaWYgYXZhaWxhYmxlICovCkBAIC0yODcwLDYgKzI5MjcsOCBAQAogICAgICByZWR1Y2VfZG9jfSwKICAgICB7Il9fc2V0c3RhdGVfXyIsICAgIChQeUNGdW5jdGlvbiljd3Jfc2V0c3RhdGUsICAgIE1FVEhfTywKICAgICAgc2V0c3RhdGVfZG9jfSwKKyAgICB7Il9fc2l6ZW9mX18iLCAgICAgIChQeUNGdW5jdGlvbiljd3Jfc2l6ZW9mLCAgICAgIE1FVEhfTk9BUkdTLAorICAgICBzaXplb2ZfZG9jfSwKICAgICB7TlVMTCwgICAgICAgICAgICAgIE5VTEx9ICAgLyogc2VudGluZWwgKi8KIH07CiAKQEAgLTI5MzYsMTggKzI5OTUsMTggQEAKICAgICBjeWNsZXMgPSByYW5nZShuLXIrMSwgbisxKVs6Oi0xXQogICAgIHlpZWxkIHR1cGxlKHBvb2xbaV0gZm9yIGkgaW4gaW5kaWNlc1s6cl0pCiAgICAgd2hpbGUgbjoKLSAgICBmb3IgaSBpbiByZXZlcnNlZChyYW5nZShyKSk6Ci0gICAgICAgIGN5Y2xlc1tpXSAtPSAxCi0gICAgICAgIGlmIGN5Y2xlc1tpXSA9PSAwOgotICAgICAgICBpbmRpY2VzW2k6XSA9IGluZGljZXNbaSsxOl0gKyBpbmRpY2VzW2k6aSsxXQotICAgICAgICBjeWNsZXNbaV0gPSBuIC0gaQorICAgICAgICBmb3IgaSBpbiByZXZlcnNlZChyYW5nZShyKSk6CisgICAgICAgICAgICBjeWNsZXNbaV0gLT0gMQorICAgICAgICAgICAgaWYgY3ljbGVzW2ldID09IDA6CisgICAgICAgICAgICAgICAgaW5kaWNlc1tpOl0gPSBpbmRpY2VzW2krMTpdICsgaW5kaWNlc1tpOmkrMV0KKyAgICAgICAgICAgICAgICBjeWNsZXNbaV0gPSBuIC0gaQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBqID0gY3ljbGVzW2ldCisgICAgICAgICAgICAgICAgaW5kaWNlc1tpXSwgaW5kaWNlc1stal0gPSBpbmRpY2VzWy1qXSwgaW5kaWNlc1tpXQorICAgICAgICAgICAgICAgIHlpZWxkIHR1cGxlKHBvb2xbaV0gZm9yIGkgaW4gaW5kaWNlc1s6cl0pCisgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgZWxzZToKLSAgICAgICAgaiA9IGN5Y2xlc1tpXQotICAgICAgICBpbmRpY2VzW2ldLCBpbmRpY2VzWy1qXSA9IGluZGljZXNbLWpdLCBpbmRpY2VzW2ldCi0gICAgICAgIHlpZWxkIHR1cGxlKHBvb2xbaV0gZm9yIGkgaW4gaW5kaWNlc1s6cl0pCi0gICAgICAgIGJyZWFrCi0gICAgZWxzZToKLSAgICAgICAgcmV0dXJuCisgICAgICAgICAgICByZXR1cm4KICovCiAKIHR5cGVkZWYgc3RydWN0IHsKQEAgLTMwNDYsNiArMzEwNSwxNyBAQAogICAgIFB5X1RZUEUocG8pLT50cF9mcmVlKHBvKTsKIH0KIAorc3RhdGljIFB5T2JqZWN0ICoKK3Blcm11dGF0aW9uc19zaXplb2YocGVybXV0YXRpb25zb2JqZWN0ICpwbywgdm9pZCAqdW51c2VkKQoreworICAgIFB5X3NzaXplX3QgcmVzOworCisgICAgcmVzID0gc2l6ZW9mKHBlcm11dGF0aW9uc29iamVjdCk7CisgICAgcmVzICs9IFB5VHVwbGVfR0VUX1NJWkUocG8tPnBvb2wpICogc2l6ZW9mKFB5X3NzaXplX3QpOworICAgIHJlcyArPSBwby0+ciAqIHNpemVvZihQeV9zc2l6ZV90KTsKKyAgICByZXR1cm4gUHlMb25nX0Zyb21Tc2l6ZV90KHJlcyk7Cit9CisKIHN0YXRpYyBpbnQKIHBlcm11dGF0aW9uc190cmF2ZXJzZShwZXJtdXRhdGlvbnNvYmplY3QgKnBvLCB2aXNpdHByb2MgdmlzaXQsIHZvaWQgKmFyZykKIHsKQEAgLTMyNTEsNiArMzMyMSw4IEBACiAgICAgIHJlZHVjZV9kb2N9LAogICAgIHsiX19zZXRzdGF0ZV9fIiwgICAgKFB5Q0Z1bmN0aW9uKXBlcm11dGF0aW9uc19zZXRzdGF0ZSwgICAgTUVUSF9PLAogICAgICBzZXRzdGF0ZV9kb2N9LAorICAgIHsiX19zaXplb2ZfXyIsICAgICAgKFB5Q0Z1bmN0aW9uKXBlcm11dGF0aW9uc19zaXplb2YsICAgICAgTUVUSF9OT0FSR1MsCisgICAgIHNpemVvZl9kb2N9LAogICAgIHtOVUxMLCAgICAgICAgICAgICAgTlVMTH0gICAvKiBzZW50aW5lbCAqLwogfTsKIApAQCAtNDA1NSwxNCArNDEyNywxNyBAQAogewogICAgIHJlcGVhdG9iamVjdCAqcm87CiAgICAgUHlPYmplY3QgKmVsZW1lbnQ7Ci0gICAgUHlfc3NpemVfdCBjbnQgPSAtMTsKKyAgICBQeV9zc2l6ZV90IGNudCA9IC0xLCBuX2t3ZHMgPSAwOwogICAgIHN0YXRpYyBjaGFyICprd2FyZ3NbXSA9IHsib2JqZWN0IiwgInRpbWVzIiwgTlVMTH07CiAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiT3xuOnJlcGVhdCIsIGt3YXJncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZWxlbWVudCwgJmNudCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgaWYgKFB5VHVwbGVfU2l6ZShhcmdzKSA9PSAyICYmIGNudCA8IDApCisgICAgaWYgKGt3ZHMgIT0gTlVMTCkKKyAgICAgICAgbl9rd2RzID0gUHlEaWN0X1NpemUoa3dkcyk7CisgICAgLyogRG9lcyB1c2VyIHN1cHBseSB0aW1lcyBhcmd1bWVudD8gKi8KKyAgICBpZiAoKFB5VHVwbGVfU2l6ZShhcmdzKSArIG5fa3dkcyA9PSAyKSAmJiBjbnQgPCAwKQogICAgICAgICBjbnQgPSAwOwogCiAgICAgcm8gPSAocmVwZWF0b2JqZWN0ICopdHlwZS0+dHBfYWxsb2ModHlwZSwgMCk7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL21haW4uYyBiL01vZHVsZXMvbWFpbi5jCmluZGV4IDNjZmM5YzMuLjg3YTIxZDcgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvbWFpbi5jCisrKyBiL01vZHVsZXMvbWFpbi5jCkBAIC01LDExICs1LDYgQEAKIAogI2luY2x1ZGUgPGxvY2FsZS5oPgogCi0jaWZkZWYgX19WTVMKLSNlcnJvciAiUEVQIDExOiBWTVMgaXMgbm93IHVuc3VwcG9ydGVkLCBjb2RlIHdpbGwgYmUgcmVtb3ZlZCBpbiBQeXRob24gMy40IgotI2luY2x1ZGUgPHVuaXhsaWIuaD4KLSNlbmRpZgotCiAjaWYgZGVmaW5lZChNU19XSU5ET1dTKSB8fCBkZWZpbmVkKF9fQ1lHV0lOX18pCiAjaW5jbHVkZSA8d2luZG93cy5oPgogI2lmZGVmIEhBVkVfRkNOVExfSApAQCAtMjIsMTUgKzE3LDExIEBACiAjaW5jbHVkZSA8Y3J0ZGJnLmg+CiAjZW5kaWYKIAotI2lmIChkZWZpbmVkKFBZT1NfT1MyKSAmJiAhZGVmaW5lZChQWUNDX0dDQykpIHx8IGRlZmluZWQoTVNfV0lORE9XUykKKyNpZiBkZWZpbmVkKE1TX1dJTkRPV1MpCiAjZGVmaW5lIFBZVEhPTkhPTUVIRUxQICI8cHJlZml4PlxcbGliIgogI2Vsc2UKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKSAmJiBkZWZpbmVkKFBZQ0NfR0NDKQotI2RlZmluZSBQWVRIT05IT01FSEVMUCAiPHByZWZpeD4vTGliIgotI2Vsc2UKICNkZWZpbmUgUFlUSE9OSE9NRUhFTFAgIjxwcmVmaXg+L3B5dGhvblguWCIKICNlbmRpZgotI2VuZGlmCiAKICNpbmNsdWRlICJweWdldG9wdC5oIgogCkBAIC00Nyw3ICszOCw3IEBACiBzdGF0aWMgaW50ICBvcmlnX2FyZ2M7CiAKIC8qIGNvbW1hbmQgbGluZSBvcHRpb25zICovCi0jZGVmaW5lIEJBU0VfT1BUUyBMImJCYzpkRWhpSm06T3FSc1N0dXZWVzp4WDo/IgorI2RlZmluZSBCQVNFX09QVFMgTCJiQmM6ZEVoaUlKbTpPcVJzU3R1dlZXOnhYOj8iCiAKICNkZWZpbmUgUFJPR1JBTV9PUFRTIEJBU0VfT1BUUwogCkBAIC02OSw2ICs2MCw3IEBACiBzdGF0aWMgY2hhciAqdXNhZ2VfMiA9ICJcCiAtaSAgICAgOiBpbnNwZWN0IGludGVyYWN0aXZlbHkgYWZ0ZXIgcnVubmluZyBzY3JpcHQ7IGZvcmNlcyBhIHByb21wdCBldmVuXG5cCiAgICAgICAgICBpZiBzdGRpbiBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgYSB0ZXJtaW5hbDsgYWxzbyBQWVRIT05JTlNQRUNUPXhcblwKKy1JICAgICA6IGlzb2xhdGUgUHl0aG9uIGZyb20gdGhlIHVzZXIncyBlbnZpcm9ubWVudCAoaW1wbGllcyAtRSBhbmQgLXMpXG5cCiAtbSBtb2QgOiBydW4gbGlicmFyeSBtb2R1bGUgYXMgYSBzY3JpcHQgKHRlcm1pbmF0ZXMgb3B0aW9uIGxpc3QpXG5cCiAtTyAgICAgOiBvcHRpbWl6ZSBnZW5lcmF0ZWQgYnl0ZWNvZGUgc2xpZ2h0bHk7IGFsc28gUFlUSE9OT1BUSU1JWkU9eFxuXAogLU9PICAgIDogcmVtb3ZlIGRvYy1zdHJpbmdzIGluIGFkZGl0aW9uIHRvIHRoZSAtTyBvcHRpbWl6YXRpb25zXG5cCkBAIC0xMjcsMjYgKzExOSwxNCBAQAogICAgICAgICBmcHJpbnRmKGYsIHVzYWdlXzUsIERFTElNLCBQWVRIT05IT01FSEVMUCk7CiAgICAgICAgIGZwdXRzKHVzYWdlXzYsIGYpOwogICAgIH0KLSNpZiBkZWZpbmVkKF9fVk1TKQotICAgIGlmIChleGl0Y29kZSA9PSAwKSB7Ci0gICAgICAgIC8qIHN1cHByZXNzICdlcnJvcicgbWVzc2FnZSAqLwotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIC8qIFNUUyRNX0lOSElCX01TRyArIFNTJF9BQk9SVCAqLwotICAgICAgICByZXR1cm4gMHgxMDAwMDAyYzsKLSAgICB9Ci0jZWxzZQogICAgIHJldHVybiBleGl0Y29kZTsKLSNlbmRpZgotICAgIC8qTk9UUkVBQ0hFRCovCiB9CiAKIHN0YXRpYyB2b2lkIFJ1blN0YXJ0dXBGaWxlKFB5Q29tcGlsZXJGbGFncyAqY2YpCiB7CiAgICAgY2hhciAqc3RhcnR1cCA9IFB5X0dFVEVOVigiUFlUSE9OU1RBUlRVUCIpOwogICAgIGlmIChzdGFydHVwICE9IE5VTEwgJiYgc3RhcnR1cFswXSAhPSAnXDAnKSB7Ci0gICAgICAgIEZJTEUgKmZwID0gZm9wZW4oc3RhcnR1cCwgInIiKTsKKyAgICAgICAgRklMRSAqZnAgPSBfUHlfZm9wZW4oc3RhcnR1cCwgInIiKTsKICAgICAgICAgaWYgKGZwICE9IE5VTEwpIHsKICAgICAgICAgICAgICh2b2lkKSBQeVJ1bl9TaW1wbGVGaWxlRXhGbGFncyhmcCwgc3RhcnR1cCwgMCwgY2YpOwogICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKQEAgLTE2NSw2ICsxNDUsMzIgQEAKICAgICB9CiB9CiAKK3N0YXRpYyB2b2lkIFJ1bkludGVyYWN0aXZlSG9vayh2b2lkKQoreworICAgIFB5T2JqZWN0ICpzeXMsICpob29rLCAqcmVzdWx0OworICAgIHN5cyA9IFB5SW1wb3J0X0ltcG9ydE1vZHVsZSgic3lzIik7CisgICAgaWYgKHN5cyA9PSBOVUxMKQorICAgICAgICBnb3RvIGVycm9yOworICAgIGhvb2sgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKHN5cywgIl9faW50ZXJhY3RpdmVob29rX18iKTsKKyAgICBQeV9ERUNSRUYoc3lzKTsKKyAgICBpZiAoaG9vayA9PSBOVUxMKQorICAgICAgICBQeUVycl9DbGVhcigpOworICAgIGVsc2UgeworICAgICAgICByZXN1bHQgPSBQeU9iamVjdF9DYWxsT2JqZWN0KGhvb2ssIE5VTEwpOworICAgICAgICBQeV9ERUNSRUYoaG9vayk7CisgICAgICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgIH0KKyAgICByZXR1cm47CisKK2Vycm9yOgorICAgIFB5U3lzX1dyaXRlU3RkZXJyKCJGYWlsZWQgY2FsbGluZyBzeXMuX19pbnRlcmFjdGl2ZWhvb2tfX1xuIik7CisgICAgUHlFcnJfUHJpbnQoKTsKKyAgICBQeUVycl9DbGVhcigpOworfQorCiAKIHN0YXRpYyBpbnQgUnVuTW9kdWxlKHdjaGFyX3QgKm1vZG5hbWUsIGludCBzZXRfYXJndjApCiB7CkBAIC0xNzIsMTcgKzE3OCwyMCBAQAogICAgIHJ1bnB5ID0gUHlJbXBvcnRfSW1wb3J0TW9kdWxlKCJydW5weSIpOwogICAgIGlmIChydW5weSA9PSBOVUxMKSB7CiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGQgbm90IGltcG9ydCBydW5weSBtb2R1bGVcbiIpOworICAgICAgICBQeUVycl9QcmludCgpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogICAgIHJ1bm1vZHVsZSA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcocnVucHksICJfcnVuX21vZHVsZV9hc19tYWluIik7CiAgICAgaWYgKHJ1bm1vZHVsZSA9PSBOVUxMKSB7CiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGQgbm90IGFjY2VzcyBydW5weS5fcnVuX21vZHVsZV9hc19tYWluXG4iKTsKKyAgICAgICAgUHlFcnJfUHJpbnQoKTsKICAgICAgICAgUHlfREVDUkVGKHJ1bnB5KTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KICAgICBtb2R1bGUgPSBQeVVuaWNvZGVfRnJvbVdpZGVDaGFyKG1vZG5hbWUsIHdjc2xlbihtb2RuYW1lKSk7CiAgICAgaWYgKG1vZHVsZSA9PSBOVUxMKSB7CiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGQgbm90IGNvbnZlcnQgbW9kdWxlIG5hbWUgdG8gdW5pY29kZVxuIik7CisgICAgICAgIFB5RXJyX1ByaW50KCk7CiAgICAgICAgIFB5X0RFQ1JFRihydW5weSk7CiAgICAgICAgIFB5X0RFQ1JFRihydW5tb2R1bGUpOwogICAgICAgICByZXR1cm4gLTE7CkBAIC0xOTEsNiArMjAwLDcgQEAKICAgICBpZiAocnVuYXJncyA9PSBOVUxMKSB7CiAgICAgICAgIGZwcmludGYoc3RkZXJyLAogICAgICAgICAgICAgIkNvdWxkIG5vdCBjcmVhdGUgYXJndW1lbnRzIGZvciBydW5weS5fcnVuX21vZHVsZV9hc19tYWluXG4iKTsKKyAgICAgICAgUHlFcnJfUHJpbnQoKTsKICAgICAgICAgUHlfREVDUkVGKHJ1bnB5KTsKICAgICAgICAgUHlfREVDUkVGKHJ1bm1vZHVsZSk7CiAgICAgICAgIFB5X0RFQ1JFRihtb2R1bGUpOwpAQCAtMjM1LDggKzI0NSwxMCBAQAogICAgIC8qIGFyZ3YwIGlzIHVzYWJsZSBhcyBhbiBpbXBvcnQgc291cmNlLCBzbyBwdXQgaXQgaW4gc3lzLnBhdGhbMF0KICAgICAgICBhbmQgaW1wb3J0IF9fbWFpbl9fICovCiAgICAgc3lzX3BhdGggPSBQeVN5c19HZXRPYmplY3QoInBhdGgiKTsKLSAgICBpZiAoc3lzX3BhdGggPT0gTlVMTCkKKyAgICBpZiAoc3lzX3BhdGggPT0gTlVMTCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLCAidW5hYmxlIHRvIGdldCBzeXMucGF0aCIpOwogICAgICAgICBnb3RvIGVycm9yOworICAgIH0KICAgICBpZiAoUHlMaXN0X1NldEl0ZW0oc3lzX3BhdGgsIDAsIGFyZ3YwKSkgewogICAgICAgICBhcmd2MCA9IE5VTEw7CiAgICAgICAgIGdvdG8gZXJyb3I7CkBAIC0zNjYsNyArMzc4LDcgQEAKICAgICAgICAgICAgICAgIGNvbW1hbmQgdG8gaW50ZXJwcmV0LiAqLwogCiAgICAgICAgICAgICBsZW4gPSB3Y3NsZW4oX1B5T1Nfb3B0YXJnKSArIDEgKyAxOwotICAgICAgICAgICAgY29tbWFuZCA9ICh3Y2hhcl90ICopbWFsbG9jKHNpemVvZih3Y2hhcl90KSAqIGxlbik7CisgICAgICAgICAgICBjb21tYW5kID0gKHdjaGFyX3QgKilQeU1lbV9SYXdNYWxsb2Moc2l6ZW9mKHdjaGFyX3QpICogbGVuKTsKICAgICAgICAgICAgIGlmIChjb21tYW5kID09IE5VTEwpCiAgICAgICAgICAgICAgICAgUHlfRmF0YWxFcnJvcigKICAgICAgICAgICAgICAgICAgICAibm90IGVub3VnaCBtZW1vcnkgdG8gY29weSAtYyBhcmd1bWVudCIpOwpAQCAtMzk4LDYgKzQxMCwxMiBAQAogICAgICAgICAgICAgUHlfSW50ZXJhY3RpdmVGbGFnKys7CiAgICAgICAgICAgICBicmVhazsKIAorICAgICAgICBjYXNlICdJJzoKKyAgICAgICAgICAgIFB5X0lzb2xhdGVkRmxhZysrOworICAgICAgICAgICAgUHlfTm9Vc2VyU2l0ZURpcmVjdG9yeSsrOworICAgICAgICAgICAgUHlfSWdub3JlRW52aXJvbm1lbnRGbGFnKys7CisgICAgICAgICAgICBicmVhazsKKwogICAgICAgICAvKiBjYXNlICdKJzogcmVzZXJ2ZWQgZm9yIEp5dGhvbiAqLwogCiAgICAgICAgIGNhc2UgJ08nOgpAQCAtNDc1LDcgKzQ5Myw3IEBACiAgICAgICAgIHJldHVybiB1c2FnZSgwLCBhcmd2WzBdKTsKIAogICAgIGlmICh2ZXJzaW9uKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiUHl0aG9uICVzXG4iLCBQWV9WRVJTSU9OKTsKKyAgICAgICAgcHJpbnRmKCJQeXRob24gJXNcbiIsIFBZX1ZFUlNJT04pOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKQEAgLTQ5NSw3ICs1MTMsNyBAQAogICAgICAgICAqd3AgIT0gTCdcMCcpIHsKICAgICAgICAgd2NoYXJfdCAqYnVmLCAqd2FybmluZzsKIAotICAgICAgICBidWYgPSAod2NoYXJfdCAqKW1hbGxvYygod2NzbGVuKHdwKSArIDEpICogc2l6ZW9mKHdjaGFyX3QpKTsKKyAgICAgICAgYnVmID0gKHdjaGFyX3QgKilQeU1lbV9SYXdNYWxsb2MoKHdjc2xlbih3cCkgKyAxKSAqIHNpemVvZih3Y2hhcl90KSk7CiAgICAgICAgIGlmIChidWYgPT0gTlVMTCkKICAgICAgICAgICAgIFB5X0ZhdGFsRXJyb3IoCiAgICAgICAgICAgICAgICAibm90IGVub3VnaCBtZW1vcnkgdG8gY29weSBQWVRIT05XQVJOSU5HUyIpOwpAQCAtNTA1LDcgKzUyMyw3IEBACiAgICAgICAgICAgICAgd2FybmluZyA9IHdjc3RvayhOVUxMLCBMIiwiKSkgewogICAgICAgICAgICAgUHlTeXNfQWRkV2Fybk9wdGlvbih3YXJuaW5nKTsKICAgICAgICAgfQotICAgICAgICBmcmVlKGJ1Zik7CisgICAgICAgIFB5TWVtX1Jhd0ZyZWUoYnVmKTsKICAgICB9CiAjZWxzZQogICAgIGlmICgocCA9IFB5X0dFVEVOVigiUFlUSE9OV0FSTklOR1MiKSkgJiYgKnAgIT0gJ1wwJykgewpAQCAtNTE0LDEyICs1MzIsMTIgQEAKIAogICAgICAgICAvKiBzZXR0bGUgZm9yIHN0cnRvayBoZXJlIGFzIHRoZXJlJ3Mgbm8gb25lIHN0YW5kYXJkCiAgICAgICAgICAgIEM4OSB3Y3N0b2sgKi8KLSAgICAgICAgYnVmID0gKGNoYXIgKiltYWxsb2Moc3RybGVuKHApICsgMSk7CisgICAgICAgIGJ1ZiA9IChjaGFyICopUHlNZW1fUmF3TWFsbG9jKHN0cmxlbihwKSArIDEpOwogICAgICAgICBpZiAoYnVmID09IE5VTEwpCiAgICAgICAgICAgICBQeV9GYXRhbEVycm9yKAogICAgICAgICAgICAgICAgIm5vdCBlbm91Z2ggbWVtb3J5IHRvIGNvcHkgUFlUSE9OV0FSTklOR1MiKTsKICAgICAgICAgc3RyY3B5KGJ1ZiwgcCk7Ci0gICAgICAgIG9sZGxvYyA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7CisgICAgICAgIG9sZGxvYyA9IF9QeU1lbV9SYXdTdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOwogICAgICAgICBzZXRsb2NhbGUoTENfQUxMLCAiIik7CiAgICAgICAgIGZvciAocCA9IHN0cnRvayhidWYsICIsIik7IHAgIT0gTlVMTDsgcCA9IHN0cnRvayhOVUxMLCAiLCIpKSB7CiAjaWZkZWYgX19BUFBMRV9fCkBAIC01MzcsMjIgKzU1NSwxNSBAQAogICAgICAgICAgICAgUHlfREVDUkVGKHVuaWNvZGUpOwogICAgICAgICB9CiAgICAgICAgIHNldGxvY2FsZShMQ19BTEwsIG9sZGxvYyk7Ci0gICAgICAgIGZyZWUob2xkbG9jKTsKLSAgICAgICAgZnJlZShidWYpOworICAgICAgICBQeU1lbV9SYXdGcmVlKG9sZGxvYyk7CisgICAgICAgIFB5TWVtX1Jhd0ZyZWUoYnVmKTsKICAgICB9CiAjZW5kaWYKIAogICAgIGlmIChjb21tYW5kID09IE5VTEwgJiYgbW9kdWxlID09IE5VTEwgJiYgX1B5T1Nfb3B0aW5kIDwgYXJnYyAmJgogICAgICAgICB3Y3NjbXAoYXJndltfUHlPU19vcHRpbmRdLCBMIi0iKSAhPSAwKQogICAgIHsKLSNpZmRlZiBfX1ZNUwotICAgICAgICBmaWxlbmFtZSA9IGRlY2MkdHJhbnNsYXRlX3Ztcyhhcmd2W19QeU9TX29wdGluZF0pOwotICAgICAgICBpZiAoZmlsZW5hbWUgPT0gKGNoYXIgKikwIHx8IGZpbGVuYW1lID09IChjaGFyICopLTEpCi0gICAgICAgICAgICBmaWxlbmFtZSA9IGFyZ3ZbX1B5T1Nfb3B0aW5kXTsKLQotI2Vsc2UKICAgICAgICAgZmlsZW5hbWUgPSBhcmd2W19QeU9TX29wdGluZF07Ci0jZW5kaWYKICAgICB9CiAKICAgICBzdGRpbl9pc19pbnRlcmFjdGl2ZSA9IFB5X0ZkSXNJbnRlcmFjdGl2ZShzdGRpbiwgKGNoYXIgKikwKTsKQEAgLTU4OCwxMSArNTk5LDYgQEAKICNlbmRpZiAvKiAhTVNfV0lORE9XUyAqLwogICAgICAgICAvKiBMZWF2ZSBzdGRlcnIgYWxvbmUgLSBpdCBzaG91bGQgYmUgdW5idWZmZXJlZCBhbnl3YXkuICovCiAgICAgfQotI2lmZGVmIF9fVk1TCi0gICAgZWxzZSB7Ci0gICAgICAgIHNldHZidWYgKHN0ZG91dCwgKGNoYXIgKilOVUxMLCBfSU9MQkYsIEJVRlNJWik7Ci0gICAgfQotI2VuZGlmIC8qIF9fVk1TICovCiAKICNpZmRlZiBfX0FQUExFX18KICAgICAvKiBPbiBNYWNPUyBYLCB3aGVuIHRoZSBQeXRob24gaW50ZXJwcmV0ZXIgaXMgZW1iZWRkZWQgaW4gYW4KQEAgLTYwOCw3ICs2MTQsNyBAQAogICAgICAgICB3Y2hhcl90KiBidWZmZXI7CiAgICAgICAgIHNpemVfdCBsZW4gPSBzdHJsZW4ocCkgKyAxOwogCi0gICAgICAgIGJ1ZmZlciA9IG1hbGxvYyhsZW4gKiBzaXplb2Yod2NoYXJfdCkpOworICAgICAgICBidWZmZXIgPSBQeU1lbV9SYXdNYWxsb2MobGVuICogc2l6ZW9mKHdjaGFyX3QpKTsKICAgICAgICAgaWYgKGJ1ZmZlciA9PSBOVUxMKSB7CiAgICAgICAgICAgICBQeV9GYXRhbEVycm9yKAogICAgICAgICAgICAgICAgIm5vdCBlbm91Z2ggbWVtb3J5IHRvIGNvcHkgUFlUSE9ORVhFQ1VUQUJMRSIpOwpAQCAtNjgyLDcgKzY4OCw3IEBACiAKICAgICBpZiAoY29tbWFuZCkgewogICAgICAgICBzdHMgPSBydW5fY29tbWFuZChjb21tYW5kLCAmY2YpOwotICAgICAgICBmcmVlKGNvbW1hbmQpOworICAgICAgICBQeU1lbV9SYXdGcmVlKGNvbW1hbmQpOwogICAgIH0gZWxzZSBpZiAobW9kdWxlKSB7CiAgICAgICAgIHN0cyA9IChSdW5Nb2R1bGUobW9kdWxlLCAxKSAhPSAwKTsKICAgICB9CkBAIC02OTEsNiArNjk3LDcgQEAKICAgICAgICAgaWYgKGZpbGVuYW1lID09IE5VTEwgJiYgc3RkaW5faXNfaW50ZXJhY3RpdmUpIHsKICAgICAgICAgICAgIFB5X0luc3BlY3RGbGFnID0gMDsgLyogZG8gZXhpdCBvbiBTeXN0ZW1FeGl0ICovCiAgICAgICAgICAgICBSdW5TdGFydHVwRmlsZSgmY2YpOworICAgICAgICAgICAgUnVuSW50ZXJhY3RpdmVIb29rKCk7CiAgICAgICAgIH0KICAgICAgICAgLyogWFhYICovCiAKQEAgLTc1Niw2ICs3NjMsNyBAQAogICAgIGlmIChQeV9JbnNwZWN0RmxhZyAmJiBzdGRpbl9pc19pbnRlcmFjdGl2ZSAmJgogICAgICAgICAoZmlsZW5hbWUgIT0gTlVMTCB8fCBjb21tYW5kICE9IE5VTEwgfHwgbW9kdWxlICE9IE5VTEwpKSB7CiAgICAgICAgIFB5X0luc3BlY3RGbGFnID0gMDsKKyAgICAgICAgUnVuSW50ZXJhY3RpdmVIb29rKCk7CiAgICAgICAgIC8qIFhYWCAqLwogICAgICAgICBzdHMgPSBQeVJ1bl9BbnlGaWxlRmxhZ3Moc3RkaW4sICI8c3RkaW4+IiwgJmNmKSAhPSAwOwogICAgIH0KZGlmZiAtLWdpdCBhL01vZHVsZXMvbWFrZXNldHVwIGIvTW9kdWxlcy9tYWtlc2V0dXAKaW5kZXggNDBkZmE5ZC4uOGI1Y2MyOCAxMDA3NTUKLS0tIGEvTW9kdWxlcy9tYWtlc2V0dXAKKysrIGIvTW9kdWxlcy9tYWtlc2V0dXAKQEAgLTIxNyw3ICsyMTcsNyBAQAogCQkJKikgc3JjPSckKHNyY2RpcikvJyIkc3JjZGlyLyRzcmMiOzsKIAkJCWVzYWMKIAkJCWNhc2UgJGRvY29uZmlnIGluCi0JCQlubykJY2M9IiRjYyBcJChDQ1NIQVJFRCkgXCQoQ0ZMQUdTKSBcJChDUFBGTEFHUykiOzsKKwkJCW5vKQljYz0iJGNjIFwkKENDU0hBUkVEKSBcJChQWV9DRkxBR1MpIFwkKFBZX0NQUEZMQUdTKSI7OwogCQkJKikKIAkJCQljYz0iJGNjIFwkKFBZX0NPUkVfQ0ZMQUdTKSI7OwogCQkJZXNhYwpAQCAtMjI5LDExICsyMjksNyBAQAogCQllc2FjCiAJCWZvciBtb2QgaW4gJG1vZHMKIAkJZG8KLQkJCWNhc2UgJG9ianMgaW4KLQkJCSokbW9kLm8qKQliYXNlPSRtb2Q7OwotCQkJKikJCWJhc2U9JHttb2R9bW9kdWxlOzsKLQkJCWVzYWMKLQkJCWZpbGU9IiRzcmNkaXIvJGJhc2VcJChTTykiCisJCQlmaWxlPSIkc3JjZGlyLyRtb2RcJChFWFRfU1VGRklYKSIKIAkJCWNhc2UgJGRvY29uZmlnIGluCiAJCQlubykJU0hBUkVETU9EUz0iJFNIQVJFRE1PRFMgJGZpbGUiOzsKIAkJCWVzYWMKZGlmZiAtLWdpdCBhL01vZHVsZXMvbWF0aG1vZHVsZS5jIGIvTW9kdWxlcy9tYXRobW9kdWxlLmMKaW5kZXggN2YwOTRmZi4uMjQzZTJhMyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9tYXRobW9kdWxlLmMKKysrIGIvTW9kdWxlcy9tYXRobW9kdWxlLmMKQEAgLTg3MywxOCArODczLDE4IEBACiBGVU5DMShhY29zLCBhY29zLCAwLAogICAgICAgImFjb3MoeClcblxuUmV0dXJuIHRoZSBhcmMgY29zaW5lIChtZWFzdXJlZCBpbiByYWRpYW5zKSBvZiB4LiIpCiBGVU5DMShhY29zaCwgbV9hY29zaCwgMCwKLSAgICAgICJhY29zaCh4KVxuXG5SZXR1cm4gdGhlIGh5cGVyYm9saWMgYXJjIGNvc2luZSAobWVhc3VyZWQgaW4gcmFkaWFucykgb2YgeC4iKQorICAgICAgImFjb3NoKHgpXG5cblJldHVybiB0aGUgaW52ZXJzZSBoeXBlcmJvbGljIGNvc2luZSBvZiB4LiIpCiBGVU5DMShhc2luLCBhc2luLCAwLAogICAgICAgImFzaW4oeClcblxuUmV0dXJuIHRoZSBhcmMgc2luZSAobWVhc3VyZWQgaW4gcmFkaWFucykgb2YgeC4iKQogRlVOQzEoYXNpbmgsIG1fYXNpbmgsIDAsCi0gICAgICAiYXNpbmgoeClcblxuUmV0dXJuIHRoZSBoeXBlcmJvbGljIGFyYyBzaW5lIChtZWFzdXJlZCBpbiByYWRpYW5zKSBvZiB4LiIpCisgICAgICAiYXNpbmgoeClcblxuUmV0dXJuIHRoZSBpbnZlcnNlIGh5cGVyYm9saWMgc2luZSBvZiB4LiIpCiBGVU5DMShhdGFuLCBhdGFuLCAwLAogICAgICAgImF0YW4oeClcblxuUmV0dXJuIHRoZSBhcmMgdGFuZ2VudCAobWVhc3VyZWQgaW4gcmFkaWFucykgb2YgeC4iKQogRlVOQzIoYXRhbjIsIG1fYXRhbjIsCiAgICAgICAiYXRhbjIoeSwgeClcblxuUmV0dXJuIHRoZSBhcmMgdGFuZ2VudCAobWVhc3VyZWQgaW4gcmFkaWFucykgb2YgeS94LlxuIgogICAgICAgIlVubGlrZSBhdGFuKHkveCksIHRoZSBzaWducyBvZiBib3RoIHggYW5kIHkgYXJlIGNvbnNpZGVyZWQuIikKIEZVTkMxKGF0YW5oLCBtX2F0YW5oLCAwLAotICAgICAgImF0YW5oKHgpXG5cblJldHVybiB0aGUgaHlwZXJib2xpYyBhcmMgdGFuZ2VudCAobWVhc3VyZWQgaW4gcmFkaWFucykgb2YgeC4iKQorICAgICAgImF0YW5oKHgpXG5cblJldHVybiB0aGUgaW52ZXJzZSBoeXBlcmJvbGljIHRhbmdlbnQgb2YgeC4iKQogCiBzdGF0aWMgUHlPYmplY3QgKiBtYXRoX2NlaWwoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpudW1iZXIpIHsKICAgICBfUHlfSURFTlRJRklFUihfX2NlaWxfXyk7CkBAIC05OTIsNyArOTkyLDcgQEAKICAgIE5vdGUgNDogQSBzaW1pbGFyIGltcGxlbWVudGF0aW9uIGlzIGluIE1vZHVsZXMvY21hdGhtb2R1bGUuYy4KICAgIEJlIHN1cmUgdG8gdXBkYXRlIGJvdGggd2hlbiBtYWtpbmcgY2hhbmdlcy4KIAotICAgTm90ZSA1OiBUaGUgc2lnbmF0dXJlIG9mIG1hdGguZnN1bSgpIGRpZmZlcnMgZnJvbSBfX2J1aWx0aW5fXy5zdW0oKQorICAgTm90ZSA1OiBUaGUgc2lnbmF0dXJlIG9mIG1hdGguZnN1bSgpIGRpZmZlcnMgZnJvbSBidWlsdGlucy5zdW0oKQogICAgYmVjYXVzZSB0aGUgc3RhcnQgYXJndW1lbnQgZG9lc24ndCBtYWtlIHNlbnNlIGluIHRoZSBjb250ZXh0IG9mCiAgICBhY2N1cmF0ZSBzdW1tYXRpb24uICBTaW5jZSB0aGUgcGFydGlhbHMgdGFibGUgaXMgY29sbGFwc2VkIGJlZm9yZQogICAgcmV0dXJuaW5nIGEgcmVzdWx0LCBzdW0oc2VxMiwgc3RhcnQ9c3VtKHNlcTEpKSBtYXkgbm90IGVxdWFsIHRoZQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9tZDVtb2R1bGUuYyBiL01vZHVsZXMvbWQ1bW9kdWxlLmMKaW5kZXggMTJlMTg3Yy4uNWNiM2QzNiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9tZDVtb2R1bGUuYworKysgYi9Nb2R1bGVzL21kNW1vZHVsZS5jCkBAIC05MSwxMCArOTEsNiBAQAogICAgICAgICh5KVszXSA9ICh1bnNpZ25lZCBjaGFyKSgoKHgpPj4yNCkmMjU1KTsgKHkpWzJdID0gKHVuc2lnbmVkIGNoYXIpKCgoeCk+PjE2KSYyNTUpOyAgIFwKICAgICAgICAoeSlbMV0gPSAodW5zaWduZWQgY2hhcikoKCh4KT4+OCkmMjU1KTsgKHkpWzBdID0gKHVuc2lnbmVkIGNoYXIpKCh4KSYyNTUpOyB9CiAKLSNpZm5kZWYgTUlOCi0gICAjZGVmaW5lIE1JTih4LCB5KSAoICgoeCk8KHkpKT8oeCk6KHkpICkKLSNlbmRpZgotCiAKIC8qIE1ENSBtYWNyb3MgKi8KIApAQCAtMjQ0LDkgKzI0MCw5IEBACiAgICAgICAgICAgIGluICAgICAgICAgICAgICs9IE1ENV9CTE9DS1NJWkU7CiAgICAgICAgICAgIGlubGVuICAgICAgICAgIC09IE1ENV9CTE9DS1NJWkU7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgIG4gPSBNSU4oaW5sZW4sIChQeV9zc2l6ZV90KShNRDVfQkxPQ0tTSVpFIC0gbWQ1LT5jdXJsZW4pKTsKKyAgICAgICAgICAgbiA9IFB5X01JTihpbmxlbiwgKFB5X3NzaXplX3QpKE1ENV9CTE9DS1NJWkUgLSBtZDUtPmN1cmxlbikpOwogICAgICAgICAgICBtZW1jcHkobWQ1LT5idWYgKyBtZDUtPmN1cmxlbiwgaW4sIChzaXplX3Qpbik7Ci0gICAgICAgICAgIG1kNS0+Y3VybGVuICAgICs9IG47CisgICAgICAgICAgIG1kNS0+Y3VybGVuICAgICs9IChNRDVfSU5UMzIpbjsKICAgICAgICAgICAgaW4gICAgICAgICAgICAgKz0gbjsKICAgICAgICAgICAgaW5sZW4gICAgICAgICAgLT0gbjsKICAgICAgICAgICAgaWYgKG1kNS0+Y3VybGVuID09IE1ENV9CTE9DS1NJWkUpIHsKQEAgLTQ0Myw3ICs0MzksNyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIE1ENV9nZXRfbmFtZShQeU9iamVjdCAqc2VsZiwgdm9pZCAqY2xvc3VyZSkKIHsKLSAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmdBbmRTaXplKCJNRDUiLCAzKTsKKyAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmdBbmRTaXplKCJtZDUiLCAzKTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTU3Niw4ICs1NzIsMTcgQEAKIFB5TU9ESU5JVF9GVU5DCiBQeUluaXRfX21kNSh2b2lkKQogeworICAgIFB5T2JqZWN0ICptOworCiAgICAgUHlfVFlQRSgmTUQ1dHlwZSkgPSAmUHlUeXBlX1R5cGU7CiAgICAgaWYgKFB5VHlwZV9SZWFkeSgmTUQ1dHlwZSkgPCAwKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICByZXR1cm4gUHlNb2R1bGVfQ3JlYXRlKCZfbWQ1bW9kdWxlKTsKKworICAgIG0gPSBQeU1vZHVsZV9DcmVhdGUoJl9tZDVtb2R1bGUpOworICAgIGlmIChtID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgUHlfSU5DUkVGKChQeU9iamVjdCAqKSZNRDV0eXBlKTsKKyAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgIk1ENVR5cGUiLCAoUHlPYmplY3QgKikmTUQ1dHlwZSk7CisgICAgcmV0dXJuIG07CiB9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL21tYXBtb2R1bGUuYyBiL01vZHVsZXMvbW1hcG1vZHVsZS5jCmluZGV4IDExMDdlYjguLmEwY2NlZWIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvbW1hcG1vZHVsZS5jCisrKyBiL01vZHVsZXMvbW1hcG1vZHVsZS5jCkBAIC0yMCwxMiArMjAsMTMgQEAKIAogI2RlZmluZSBQWV9TU0laRV9UX0NMRUFOCiAjaW5jbHVkZSA8UHl0aG9uLmg+CisjaW5jbHVkZSAic3RydWN0bWVtYmVyLmgiCiAKICNpZm5kZWYgTVNfV0lORE9XUwogI2RlZmluZSBVTklYCi0jIGlmZGVmIF9fQVBQTEVfXworIyBpZmRlZiBIQVZFX0ZDTlRMX0gKICMgIGluY2x1ZGUgPGZjbnRsLmg+Ci0jIGVuZGlmCisjIGVuZGlmIC8qIEhBVkVfRkNOVExfSCAqLwogI2VuZGlmCiAKICNpZmRlZiBNU19XSU5ET1dTCkBAIC0xMDgsNiArMTA5LDcgQEAKICAgICBpbnQgZmQ7CiAjZW5kaWYKIAorICAgIFB5T2JqZWN0ICp3ZWFrcmVmbGlzdDsKICAgICBhY2Nlc3NfbW9kZSBhY2Nlc3M7CiB9IG1tYXBfb2JqZWN0OwogCkBAIC0xMzQsNiArMTM2LDggQEAKICAgICB9CiAjZW5kaWYgLyogVU5JWCAqLwogCisgICAgaWYgKG1fb2JqLT53ZWFrcmVmbGlzdCAhPSBOVUxMKQorICAgICAgICBQeU9iamVjdF9DbGVhcldlYWtSZWZzKChQeU9iamVjdCAqKSBtX29iaik7CiAgICAgUHlfVFlQRShtX29iaiktPnRwX2ZyZWUoKFB5T2JqZWN0KiltX29iaik7CiB9CiAKQEAgLTcwNSw2ICs3MDksMTkgQEAKICAgICByZXR1cm4gX1B5T2JqZWN0X0NhbGxNZXRob2RJZChzZWxmLCAmUHlJZF9jbG9zZSwgTlVMTCk7CiB9CiAKKyNpZmRlZiBNU19XSU5ET1dTCitzdGF0aWMgUHlPYmplY3QgKgorbW1hcF9fc2l6ZW9mX19tZXRob2QobW1hcF9vYmplY3QgKnNlbGYsIHZvaWQgKnVudXNlZCkKK3sKKyAgICBQeV9zc2l6ZV90IHJlczsKKworICAgIHJlcyA9IHNpemVvZihtbWFwX29iamVjdCk7CisgICAgaWYgKHNlbGYtPnRhZ25hbWUpCisgICAgICAgIHJlcyArPSBzdHJsZW4oc2VsZi0+dGFnbmFtZSkgKyAxOworICAgIHJldHVybiBQeUxvbmdfRnJvbVNzaXplX3QocmVzKTsKK30KKyNlbmRpZgorCiBzdGF0aWMgc3RydWN0IFB5TWV0aG9kRGVmIG1tYXBfb2JqZWN0X21ldGhvZHNbXSA9IHsKICAgICB7ImNsb3NlIiwgICAgICAgICAgIChQeUNGdW5jdGlvbikgbW1hcF9jbG9zZV9tZXRob2QsICAgICAgICBNRVRIX05PQVJHU30sCiAgICAgeyJmaW5kIiwgICAgICAgICAgICAoUHlDRnVuY3Rpb24pIG1tYXBfZmluZF9tZXRob2QsICAgICAgICAgTUVUSF9WQVJBUkdTfSwKQEAgLTcyMiw2ICs3MzksOSBAQAogICAgIHsid3JpdGVfYnl0ZSIsICAgICAgKFB5Q0Z1bmN0aW9uKSBtbWFwX3dyaXRlX2J5dGVfbWV0aG9kLCAgIE1FVEhfVkFSQVJHU30sCiAgICAgeyJfX2VudGVyX18iLCAgICAgICAoUHlDRnVuY3Rpb24pIG1tYXBfX2VudGVyX19tZXRob2QsICAgICAgTUVUSF9OT0FSR1N9LAogICAgIHsiX19leGl0X18iLCAgICAgICAgKFB5Q0Z1bmN0aW9uKSBtbWFwX19leGl0X19tZXRob2QsICAgICAgIE1FVEhfVkFSQVJHU30sCisjaWZkZWYgTVNfV0lORE9XUworICAgIHsiX19zaXplb2ZfXyIsICAgICAgKFB5Q0Z1bmN0aW9uKSBtbWFwX19zaXplb2ZfX21ldGhvZCwgICAgIE1FVEhfTk9BUkdTfSwKKyNlbmRpZgogICAgIHtOVUxMLCAgICAgICAgIE5VTEx9ICAgICAgIC8qIHNlbnRpbmVsICovCiB9OwogCkBAIC0xMDMyLDcgKzEwNTIsNyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfdHJhdmVyc2UgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NsZWFyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yaWNoY29tcGFyZSAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3RvZmZzZXQgKi8KKyAgICBvZmZzZXRvZihtbWFwX29iamVjdCwgd2Vha3JlZmxpc3QpLCAgICAgICAgIC8qIHRwX3dlYWtsaXN0b2Zmc2V0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVybmV4dCAqLwogICAgIG1tYXBfb2JqZWN0X21ldGhvZHMsICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWV0aG9kcyAqLwpAQCAtMTE1NCwxMiArMTE3NCw2IEBACiAgICAgICAgICh2b2lkKWZjbnRsKGZkLCBGX0ZVTExGU1lOQyk7CiAjZW5kaWYKICNpZmRlZiBIQVZFX0ZTVEFUCi0jICBpZmRlZiBfX1ZNUwotICAgIC8qIG9uIE9wZW5WTVMgd2UgbXVzdCBlbnN1cmUgdGhhdCBhbGwgYnl0ZXMgYXJlIHdyaXR0ZW4gdG8gdGhlIGZpbGUgKi8KLSAgICBpZiAoZmQgIT0gLTEpIHsKLSAgICAgICAgZnN5bmMoZmQpOwotICAgIH0KLSMgIGVuZGlmCiAgICAgaWYgKGZkICE9IC0xICYmIGZzdGF0KGZkLCAmc3QpID09IDAgJiYgU19JU1JFRyhzdC5zdF9tb2RlKSkgewogICAgICAgICBpZiAobWFwX3NpemUgPT0gMCkgewogICAgICAgICAgICAgaWYgKHN0LnN0X3NpemUgPT0gMCkgewpAQCAtMTE5MCw2ICsxMjA0LDcgQEAKICAgICBtX29iai0+ZGF0YSA9IE5VTEw7CiAgICAgbV9vYmotPnNpemUgPSAoc2l6ZV90KSBtYXBfc2l6ZTsKICAgICBtX29iai0+cG9zID0gKHNpemVfdCkgMDsKKyAgICBtX29iai0+d2Vha3JlZmxpc3QgPSBOVUxMOwogICAgIG1fb2JqLT5leHBvcnRzID0gMDsKICAgICBtX29iai0+b2Zmc2V0ID0gb2Zmc2V0OwogICAgIGlmIChmZCA9PSAtMSkgewpAQCAtMTIwMywxOCArMTIxOCwxOCBAQAogICAgICAgICBmbGFncyB8PSBNQVBfQU5PTllNT1VTOwogI2Vsc2UKICAgICAgICAgLyogU1ZSNCBtZXRob2QgdG8gbWFwIGFub255bW91cyBtZW1vcnkgaXMgdG8gb3BlbiAvZGV2L3plcm8gKi8KLSAgICAgICAgZmQgPSBkZXZ6ZXJvID0gb3BlbigiL2Rldi96ZXJvIiwgT19SRFdSKTsKKyAgICAgICAgZmQgPSBkZXZ6ZXJvID0gX1B5X29wZW4oIi9kZXYvemVybyIsIE9fUkRXUik7CiAgICAgICAgIGlmIChkZXZ6ZXJvID09IC0xKSB7CiAgICAgICAgICAgICBQeV9ERUNSRUYobV9vYmopOwogICAgICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KICNlbmRpZgotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1fb2JqLT5mZCA9IGR1cChmZCk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBtX29iai0+ZmQgPSBfUHlfZHVwKGZkKTsKICAgICAgICAgaWYgKG1fb2JqLT5mZCA9PSAtMSkgewogICAgICAgICAgICAgUHlfREVDUkVGKG1fb2JqKTsKLSAgICAgICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19PU0Vycm9yKTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAgICAgfQpAQCAtMTM5NCw2ICsxNDA5LDcgQEAKICAgICAvKiBzZXQgdGhlIGluaXRpYWwgcG9zaXRpb24gKi8KICAgICBtX29iai0+cG9zID0gKHNpemVfdCkgMDsKIAorICAgIG1fb2JqLT53ZWFrcmVmbGlzdCA9IE5VTEw7CiAgICAgbV9vYmotPmV4cG9ydHMgPSAwOwogICAgIC8qIHNldCB0aGUgdGFnIG5hbWUgKi8KICAgICBpZiAodGFnbmFtZSAhPSBOVUxMICYmICp0YWduYW1lICE9ICdcMCcpIHsKZGlmZiAtLWdpdCBhL01vZHVsZXMvb3NzYXVkaW9kZXYuYyBiL01vZHVsZXMvb3NzYXVkaW9kZXYuYwppbmRleCA4MTdlMjA0Li4yZDBkZDA5IDEwMDY0NAotLS0gYS9Nb2R1bGVzL29zc2F1ZGlvZGV2LmMKKysrIGIvTW9kdWxlcy9vc3NhdWRpb2Rldi5jCkBAIC0xMTUsNyArMTE1LDkgQEAKICAgICAgICBvbmUgb3BlbiBhdCBhIHRpbWUuICBUaGlzIGRvZXMgKm5vdCogYWZmZWN0IGxhdGVyIEkvTzsgT1NTCiAgICAgICAgcHJvdmlkZXMgYSBzcGVjaWFsIGlvY3RsKCkgZm9yIG5vbi1ibG9ja2luZyByZWFkL3dyaXRlLCB3aGljaCBpcwogICAgICAgIGV4cG9zZWQgdmlhIG9zc19ub25ibG9jaygpIGJlbG93LiAqLwotICAgIGlmICgoZmQgPSBvcGVuKGRldmljZW5hbWUsIGltb2RlfE9fTk9OQkxPQ0spKSA9PSAtMSkgeworICAgIGZkID0gX1B5X29wZW4oZGV2aWNlbmFtZSwgaW1vZGV8T19OT05CTE9DSyk7CisKKyAgICBpZiAoZmQgPT0gLTEpIHsKICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lKFB5RXhjX0lPRXJyb3IsIGRldmljZW5hbWUpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CkBAIC0xNzcsNyArMTc5LDggQEAKICAgICAgICAgICAgIGRldmljZW5hbWUgPSAiL2Rldi9taXhlciI7CiAgICAgfQogCi0gICAgaWYgKChmZCA9IG9wZW4oZGV2aWNlbmFtZSwgT19SRFdSKSkgPT0gLTEpIHsKKyAgICBmZCA9IF9QeV9vcGVuKGRldmljZW5hbWUsIE9fUkRXUik7CisgICAgaWYgKGZkID09IC0xKSB7CiAgICAgICAgIFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZShQeUV4Y19JT0Vycm9yLCBkZXZpY2VuYW1lKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQpAQCAtMjQ1LDcgKzI0OCw3IEBACiAgICAgaW50IGFyZzsKIAogICAgIGFzc2VydChzdHJsZW4oZm5hbWUpIDw9IDMwKTsKLSAgICBzdHJjYXQoYXJnZm10LCBmbmFtZSk7CisgICAgc3RybmNhdChhcmdmbXQsIGZuYW1lLCAzMCk7CiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIGFyZ2ZtdCwgJmFyZykpCiAgICAgICAgIHJldHVybiBOVUxMOwogCkBAIC0yNzAsNyArMjczLDcgQEAKICAgICBpbnQgYXJnID0gMDsKIAogICAgIGFzc2VydChzdHJsZW4oZm5hbWUpIDw9IDMwKTsKLSAgICBzdHJjYXQoYXJnZm10LCBmbmFtZSk7CisgICAgc3RybmNhdChhcmdmbXQsIGZuYW1lLCAzMCk7CiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIGFyZ2ZtdCwgJmFyZykpCiAgICAgICAgIHJldHVybiBOVUxMOwogCkBAIC0yOTAsNyArMjkzLDcgQEAKICAgICBpbnQgcnY7CiAKICAgICBhc3NlcnQoc3RybGVuKGZuYW1lKSA8PSAzMCk7Ci0gICAgc3RyY2F0KGFyZ2ZtdCwgZm5hbWUpOworICAgIHN0cm5jYXQoYXJnZm10LCBmbmFtZSwgMzApOwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBhcmdmbXQpKQogICAgICAgICByZXR1cm4gTlVMTDsKIApAQCAtODkxLDcgKzg5NCw3IEBACiAgICAgLyogQWxpYXNlcyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgKi8KICAgICB7ICJmbHVzaCIsICAgICAgICAgIChQeUNGdW5jdGlvbilvc3Nfc3luYywgTUVUSF9WQVJBUkdTIH0sCiAKLSAgICAvKiBTdXBwb3J0IGZvciB0aGUgY29udGV4dCBtYW5hZ2VyIHByb3RvY29sICovCisgICAgLyogU3VwcG9ydCBmb3IgdGhlIGNvbnRleHQgbWFuYWdlbWVudCBwcm90b2NvbCAqLwogICAgIHsgIl9fZW50ZXJfXyIsICAgICAgb3NzX3NlbGYsIE1FVEhfTk9BUkdTIH0sCiAgICAgeyAiX19leGl0X18iLCAgICAgICBvc3NfZXhpdCwgTUVUSF9WQVJBUkdTIH0sCiAKQEAgLTkwMyw3ICs5MDYsNyBAQAogICAgIHsgImNsb3NlIiwgICAgICAgICAgKFB5Q0Z1bmN0aW9uKW9zc19taXhlcl9jbG9zZSwgTUVUSF9OT0FSR1MgfSwKICAgICB7ICJmaWxlbm8iLCAgICAgICAgIChQeUNGdW5jdGlvbilvc3NfbWl4ZXJfZmlsZW5vLCBNRVRIX05PQVJHUyB9LAogCi0gICAgLyogU3VwcG9ydCBmb3IgdGhlIGNvbnRleHQgbWFuYWdlciBwcm90b2NvbCAqLworICAgIC8qIFN1cHBvcnQgZm9yIHRoZSBjb250ZXh0IG1hbmFnZW1lbnQgcHJvdG9jb2wgKi8KICAgICB7ICJfX2VudGVyX18iLCAgICAgIG9zc19zZWxmLCBNRVRIX05PQVJHUyB9LAogICAgIHsgIl9fZXhpdF9fIiwgICAgICAgb3NzX2V4aXQsIE1FVEhfVkFSQVJHUyB9LAogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL292ZXJsYXBwZWQuYyBiL01vZHVsZXMvb3ZlcmxhcHBlZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmNzdjODgKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL292ZXJsYXBwZWQuYwpAQCAtMCwwICsxLDEzMzcgQEAKKy8qCisgKiBTdXBwb3J0IGZvciBvdmVybGFwcGVkIElPCisgKgorICogU29tZSBjb2RlIGJvcnJvd2VkIGZyb20gTW9kdWxlcy9fd2luYXBpLmMgb2YgQ1B5dGhvbgorICovCisKKy8qIFhYWCBjaGVjayBvdmVyZmxvdyBhbmQgRFdPUkQgPC0+IFB5X3NzaXplX3QgY29udmVyc2lvbnMKKyAgIENoZWNrIGl0ZW1zaXplICovCisKKyNpbmNsdWRlICJQeXRob24uaCIKKyNpbmNsdWRlICJzdHJ1Y3RtZW1iZXIuaCIKKworI2RlZmluZSBXSU5ET1dTX0xFQU5fQU5EX01FQU4KKyNpbmNsdWRlIDx3aW5zb2NrMi5oPgorI2luY2x1ZGUgPHdzMnRjcGlwLmg+CisjaW5jbHVkZSA8bXN3c29jay5oPgorCisjaWYgZGVmaW5lZChNU19XSU4zMikgJiYgIWRlZmluZWQoTVNfV0lONjQpCisjICBkZWZpbmUgRl9QT0lOVEVSICJrIgorIyAgZGVmaW5lIFRfUE9JTlRFUiBUX1VMT05HCisjZWxzZQorIyAgZGVmaW5lIEZfUE9JTlRFUiAiSyIKKyMgIGRlZmluZSBUX1BPSU5URVIgVF9VTE9OR0xPTkcKKyNlbmRpZgorCisjZGVmaW5lIEZfSEFORExFIEZfUE9JTlRFUgorI2RlZmluZSBGX1VMT05HX1BUUiBGX1BPSU5URVIKKyNkZWZpbmUgRl9EV09SRCAiayIKKyNkZWZpbmUgRl9CT09MICJpIgorI2RlZmluZSBGX1VJTlQgIkkiCisKKyNkZWZpbmUgVF9IQU5ETEUgVF9QT0lOVEVSCisKK2VudW0ge1RZUEVfTk9ORSwgVFlQRV9OT1RfU1RBUlRFRCwgVFlQRV9SRUFELCBUWVBFX1dSSVRFLCBUWVBFX0FDQ0VQVCwKKyAgICAgIFRZUEVfQ09OTkVDVCwgVFlQRV9ESVNDT05ORUNULCBUWVBFX0NPTk5FQ1RfTkFNRURfUElQRSwKKyAgICAgIFRZUEVfV0FJVF9OQU1FRF9QSVBFX0FORF9DT05ORUNUfTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIFB5T2JqZWN0X0hFQUQKKyAgICBPVkVSTEFQUEVEIG92ZXJsYXBwZWQ7CisgICAgLyogRm9yIGNvbnZlbmllbmNlLCB3ZSBzdG9yZSB0aGUgZmlsZSBoYW5kbGUgdG9vICovCisgICAgSEFORExFIGhhbmRsZTsKKyAgICAvKiBFcnJvciByZXR1cm5lZCBieSBsYXN0IG1ldGhvZCBjYWxsICovCisgICAgRFdPUkQgZXJyb3I7CisgICAgLyogVHlwZSBvZiBvcGVyYXRpb24gKi8KKyAgICBEV09SRCB0eXBlOworICAgIHVuaW9uIHsKKyAgICAgICAgLyogQnVmZmVyIHVzZWQgZm9yIHJlYWRpbmc6IFRZUEVfUkVBRCBhbmQgVFlQRV9BQ0NFUFQgKi8KKyAgICAgICAgUHlPYmplY3QgKnJlYWRfYnVmZmVyOworICAgICAgICAvKiBCdWZmZXIgdXNlZCBmb3Igd3JpdGluZzogVFlQRV9XUklURSAqLworICAgICAgICBQeV9idWZmZXIgd3JpdGVfYnVmZmVyOworICAgIH07Cit9IE92ZXJsYXBwZWRPYmplY3Q7CisKKy8qCisgKiBNYXAgV2luZG93cyBlcnJvciBjb2RlcyB0byBzdWJjbGFzc2VzIG9mIE9TRXJyb3IKKyAqLworCitzdGF0aWMgUHlPYmplY3QgKgorU2V0RnJvbVdpbmRvd3NFcnIoRFdPUkQgZXJyKQoreworICAgIFB5T2JqZWN0ICpleGNlcHRpb25fdHlwZTsKKworICAgIGlmIChlcnIgPT0gMCkKKyAgICAgICAgZXJyID0gR2V0TGFzdEVycm9yKCk7CisgICAgc3dpdGNoIChlcnIpIHsKKyAgICAgICAgY2FzZSBFUlJPUl9DT05ORUNUSU9OX1JFRlVTRUQ6CisgICAgICAgICAgICBleGNlcHRpb25fdHlwZSA9IFB5RXhjX0Nvbm5lY3Rpb25SZWZ1c2VkRXJyb3I7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFUlJPUl9DT05ORUNUSU9OX0FCT1JURUQ6CisgICAgICAgICAgICBleGNlcHRpb25fdHlwZSA9IFB5RXhjX0Nvbm5lY3Rpb25BYm9ydGVkRXJyb3I7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGV4Y2VwdGlvbl90eXBlID0gUHlFeGNfT1NFcnJvcjsKKyAgICB9CisgICAgcmV0dXJuIFB5RXJyX1NldEV4Y0Zyb21XaW5kb3dzRXJyKGV4Y2VwdGlvbl90eXBlLCBlcnIpOworfQorCisvKgorICogU29tZSBmdW5jdGlvbnMgc2hvdWxkIGJlIGxvYWRlZCBhdCBydW50aW1lCisgKi8KKworc3RhdGljIExQRk5fQUNDRVBURVggUHlfQWNjZXB0RXggPSBOVUxMOworc3RhdGljIExQRk5fQ09OTkVDVEVYIFB5X0Nvbm5lY3RFeCA9IE5VTEw7CitzdGF0aWMgTFBGTl9ESVNDT05ORUNURVggUHlfRGlzY29ubmVjdEV4ID0gTlVMTDsKK3N0YXRpYyBCT09MIChDQUxMQkFDSyAqUHlfQ2FuY2VsSW9FeCkoSEFORExFLCBMUE9WRVJMQVBQRUQpID0gTlVMTDsKKworI2RlZmluZSBHRVRfV1NBX1BPSU5URVIocywgeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIChTT0NLRVRfRVJST1IgIT0gV1NBSW9jdGwocywgU0lPX0dFVF9FWFRFTlNJT05fRlVOQ1RJT05fUE9JTlRFUiwgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkd1aWQjI3gsIHNpemVvZihHdWlkIyN4KSwgJlB5XyMjeCwgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKFB5XyMjeCksICZkd0J5dGVzLCBOVUxMLCBOVUxMKSkKKworc3RhdGljIGludAoraW5pdGlhbGl6ZV9mdW5jdGlvbl9wb2ludGVycyh2b2lkKQoreworICAgIEdVSUQgR3VpZEFjY2VwdEV4ID0gV1NBSURfQUNDRVBURVg7CisgICAgR1VJRCBHdWlkQ29ubmVjdEV4ID0gV1NBSURfQ09OTkVDVEVYOworICAgIEdVSUQgR3VpZERpc2Nvbm5lY3RFeCA9IFdTQUlEX0RJU0NPTk5FQ1RFWDsKKyAgICBISU5TVEFOQ0UgaEtlcm5lbDMyOworICAgIFNPQ0tFVCBzOworICAgIERXT1JEIGR3Qnl0ZXM7CisKKyAgICBzID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1RDUCk7CisgICAgaWYgKHMgPT0gSU5WQUxJRF9TT0NLRVQpIHsKKyAgICAgICAgU2V0RnJvbVdpbmRvd3NFcnIoV1NBR2V0TGFzdEVycm9yKCkpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKCFHRVRfV1NBX1BPSU5URVIocywgQWNjZXB0RXgpIHx8CisgICAgICAgICFHRVRfV1NBX1BPSU5URVIocywgQ29ubmVjdEV4KSB8fAorICAgICAgICAhR0VUX1dTQV9QT0lOVEVSKHMsIERpc2Nvbm5lY3RFeCkpCisgICAgeworICAgICAgICBjbG9zZXNvY2tldChzKTsKKyAgICAgICAgU2V0RnJvbVdpbmRvd3NFcnIoV1NBR2V0TGFzdEVycm9yKCkpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgY2xvc2Vzb2NrZXQocyk7CisKKyAgICAvKiBPbiBXaW5YUCB3ZSB3aWxsIGhhdmUgUHlfQ2FuY2VsSW9FeCA9PSBOVUxMICovCisgICAgaEtlcm5lbDMyID0gR2V0TW9kdWxlSGFuZGxlKCJLRVJORUwzMiIpOworICAgICooRkFSUFJPQyAqKSZQeV9DYW5jZWxJb0V4ID0gR2V0UHJvY0FkZHJlc3MoaEtlcm5lbDMyLCAiQ2FuY2VsSW9FeCIpOworICAgIHJldHVybiAwOworfQorCisvKgorICogQ29tcGxldGlvbiBwb3J0IHN0dWZmCisgKi8KKworUHlEb2NfU1RSVkFSKAorICAgIENyZWF0ZUlvQ29tcGxldGlvblBvcnRfZG9jLAorICAgICJDcmVhdGVJb0NvbXBsZXRpb25Qb3J0KGhhbmRsZSwgcG9ydCwga2V5LCBjb25jdXJyZW5jeSkgLT4gcG9ydFxuXG4iCisgICAgIkNyZWF0ZSBhIGNvbXBsZXRpb24gcG9ydCBvciByZWdpc3RlciBhIGhhbmRsZSB3aXRoIGEgcG9ydC4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK292ZXJsYXBwZWRfQ3JlYXRlSW9Db21wbGV0aW9uUG9ydChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgSEFORExFIEZpbGVIYW5kbGU7CisgICAgSEFORExFIEV4aXN0aW5nQ29tcGxldGlvblBvcnQ7CisgICAgVUxPTkdfUFRSIENvbXBsZXRpb25LZXk7CisgICAgRFdPUkQgTnVtYmVyT2ZDb25jdXJyZW50VGhyZWFkczsKKyAgICBIQU5ETEUgcmV0OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIEZfSEFORExFIEZfSEFORExFIEZfVUxPTkdfUFRSIEZfRFdPUkQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZGaWxlSGFuZGxlLCAmRXhpc3RpbmdDb21wbGV0aW9uUG9ydCwgJkNvbXBsZXRpb25LZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICZOdW1iZXJPZkNvbmN1cnJlbnRUaHJlYWRzKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgcmV0ID0gQ3JlYXRlSW9Db21wbGV0aW9uUG9ydChGaWxlSGFuZGxlLCBFeGlzdGluZ0NvbXBsZXRpb25Qb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tcGxldGlvbktleSwgTnVtYmVyT2ZDb25jdXJyZW50VGhyZWFkcyk7CisgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKworICAgIGlmIChyZXQgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIFNldEZyb21XaW5kb3dzRXJyKDApOworICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKEZfSEFORExFLCByZXQpOworfQorCitQeURvY19TVFJWQVIoCisgICAgR2V0UXVldWVkQ29tcGxldGlvblN0YXR1c19kb2MsCisgICAgIkdldFF1ZXVlZENvbXBsZXRpb25TdGF0dXMocG9ydCwgbXNlY3MpIC0+IChlcnIsIGJ5dGVzLCBrZXksIGFkZHJlc3MpXG5cbiIKKyAgICAiR2V0IGEgbWVzc2FnZSBmcm9tIGNvbXBsZXRpb24gcG9ydC4gIFdhaXQgZm9yIHVwIHRvIG1zZWNzIG1pbGxpc2Vjb25kcy4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK292ZXJsYXBwZWRfR2V0UXVldWVkQ29tcGxldGlvblN0YXR1cyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgSEFORExFIENvbXBsZXRpb25Qb3J0ID0gTlVMTDsKKyAgICBEV09SRCBOdW1iZXJPZkJ5dGVzID0gMDsKKyAgICBVTE9OR19QVFIgQ29tcGxldGlvbktleSA9IDA7CisgICAgT1ZFUkxBUFBFRCAqT3ZlcmxhcHBlZCA9IE5VTEw7CisgICAgRFdPUkQgTWlsbGlzZWNvbmRzOworICAgIERXT1JEIGVycjsKKyAgICBCT09MIHJldDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBGX0hBTkRMRSBGX0RXT1JELAorICAgICAgICAgICAgICAgICAgICAgICAgICAmQ29tcGxldGlvblBvcnQsICZNaWxsaXNlY29uZHMpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICByZXQgPSBHZXRRdWV1ZWRDb21wbGV0aW9uU3RhdHVzKENvbXBsZXRpb25Qb3J0LCAmTnVtYmVyT2ZCeXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZDb21wbGV0aW9uS2V5LCAmT3ZlcmxhcHBlZCwgTWlsbGlzZWNvbmRzKTsKKyAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworCisgICAgZXJyID0gcmV0ID8gRVJST1JfU1VDQ0VTUyA6IEdldExhc3RFcnJvcigpOworICAgIGlmIChPdmVybGFwcGVkID09IE5VTEwpIHsKKyAgICAgICAgaWYgKGVyciA9PSBXQUlUX1RJTUVPVVQpCisgICAgICAgICAgICBQeV9SRVRVUk5fTk9ORTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIFNldEZyb21XaW5kb3dzRXJyKGVycik7CisgICAgfQorICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKEZfRFdPUkQgRl9EV09SRCBGX1VMT05HX1BUUiBGX1BPSU5URVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgZXJyLCBOdW1iZXJPZkJ5dGVzLCBDb21wbGV0aW9uS2V5LCBPdmVybGFwcGVkKTsKK30KKworUHlEb2NfU1RSVkFSKAorICAgIFBvc3RRdWV1ZWRDb21wbGV0aW9uU3RhdHVzX2RvYywKKyAgICAiUG9zdFF1ZXVlZENvbXBsZXRpb25TdGF0dXMocG9ydCwgYnl0ZXMsIGtleSwgYWRkcmVzcykgLT4gTm9uZVxuXG4iCisgICAgIlBvc3QgYSBtZXNzYWdlIHRvIGNvbXBsZXRpb24gcG9ydC4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK292ZXJsYXBwZWRfUG9zdFF1ZXVlZENvbXBsZXRpb25TdGF0dXMoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIEhBTkRMRSBDb21wbGV0aW9uUG9ydDsKKyAgICBEV09SRCBOdW1iZXJPZkJ5dGVzOworICAgIFVMT05HX1BUUiBDb21wbGV0aW9uS2V5OworICAgIE9WRVJMQVBQRUQgKk92ZXJsYXBwZWQ7CisgICAgQk9PTCByZXQ7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgRl9IQU5ETEUgRl9EV09SRCBGX1VMT05HX1BUUiBGX1BPSU5URVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZDb21wbGV0aW9uUG9ydCwgJk51bWJlck9mQnl0ZXMsICZDb21wbGV0aW9uS2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAmT3ZlcmxhcHBlZCkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgIHJldCA9IFBvc3RRdWV1ZWRDb21wbGV0aW9uU3RhdHVzKENvbXBsZXRpb25Qb3J0LCBOdW1iZXJPZkJ5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbXBsZXRpb25LZXksIE92ZXJsYXBwZWQpOworICAgIFB5X0VORF9BTExPV19USFJFQURTCisKKyAgICBpZiAoIXJldCkKKyAgICAgICAgcmV0dXJuIFNldEZyb21XaW5kb3dzRXJyKDApOworICAgIFB5X1JFVFVSTl9OT05FOworfQorCisvKgorICogV2FpdCBmb3IgYSBoYW5kbGUKKyAqLworCitzdHJ1Y3QgUG9zdENhbGxiYWNrRGF0YSB7CisgICAgSEFORExFIENvbXBsZXRpb25Qb3J0OworICAgIExQT1ZFUkxBUFBFRCBPdmVybGFwcGVkOworfTsKKworc3RhdGljIFZPSUQgQ0FMTEJBQ0sKK1Bvc3RUb1F1ZXVlQ2FsbGJhY2soUFZPSUQgbHBQYXJhbWV0ZXIsIEJPT0wgVGltZXJPcldhaXRGaXJlZCkKK3sKKyAgICBzdHJ1Y3QgUG9zdENhbGxiYWNrRGF0YSAqcCA9IChzdHJ1Y3QgUG9zdENhbGxiYWNrRGF0YSopIGxwUGFyYW1ldGVyOworCisgICAgUG9zdFF1ZXVlZENvbXBsZXRpb25TdGF0dXMocC0+Q29tcGxldGlvblBvcnQsIFRpbWVyT3JXYWl0RmlyZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgcC0+T3ZlcmxhcHBlZCk7CisgICAgLyogaWdub3JlIHBvc3NpYmxlIGVycm9yISAqLworICAgIFB5TWVtX0ZyZWUocCk7Cit9CisKK1B5RG9jX1NUUlZBUigKKyAgICBSZWdpc3RlcldhaXRXaXRoUXVldWVfZG9jLAorICAgICJSZWdpc3RlcldhaXRXaXRoUXVldWUoT2JqZWN0LCBDb21wbGV0aW9uUG9ydCwgT3ZlcmxhcHBlZCwgVGltZW91dClcbiIKKyAgICAiICAgIC0+IFdhaXRIYW5kbGVcblxuIgorICAgICJSZWdpc3RlciB3YWl0IGZvciBPYmplY3Q7IHdoZW4gY29tcGxldGUgQ29tcGxldGlvblBvcnQgaXMgbm90aWZpZWQuXG4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK292ZXJsYXBwZWRfUmVnaXN0ZXJXYWl0V2l0aFF1ZXVlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBIQU5ETEUgTmV3V2FpdE9iamVjdDsKKyAgICBIQU5ETEUgT2JqZWN0OworICAgIFVMT05HIE1pbGxpc2Vjb25kczsKKyAgICBzdHJ1Y3QgUG9zdENhbGxiYWNrRGF0YSBkYXRhLCAqcGRhdGE7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgRl9IQU5ETEUgRl9IQU5ETEUgRl9QT0lOVEVSIEZfRFdPUkQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZPYmplY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZkYXRhLkNvbXBsZXRpb25Qb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAmZGF0YS5PdmVybGFwcGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAmTWlsbGlzZWNvbmRzKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBwZGF0YSA9IFB5TWVtX01hbGxvYyhzaXplb2Yoc3RydWN0IFBvc3RDYWxsYmFja0RhdGEpKTsKKyAgICBpZiAocGRhdGEgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIFNldEZyb21XaW5kb3dzRXJyKDApOworCisgICAgKnBkYXRhID0gZGF0YTsKKworICAgIGlmICghUmVnaXN0ZXJXYWl0Rm9yU2luZ2xlT2JqZWN0KAorICAgICAgICAgICAgJk5ld1dhaXRPYmplY3QsIE9iamVjdCwgKFdBSVRPUlRJTUVSQ0FMTEJBQ0spUG9zdFRvUXVldWVDYWxsYmFjaywKKyAgICAgICAgICAgIHBkYXRhLCBNaWxsaXNlY29uZHMsCisgICAgICAgICAgICBXVF9FWEVDVVRFSU5XQUlUVEhSRUFEIHwgV1RfRVhFQ1VURU9OTFlPTkNFKSkKKyAgICB7CisgICAgICAgIFB5TWVtX0ZyZWUocGRhdGEpOworICAgICAgICByZXR1cm4gU2V0RnJvbVdpbmRvd3NFcnIoMCk7CisgICAgfQorCisgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoRl9IQU5ETEUsIE5ld1dhaXRPYmplY3QpOworfQorCitQeURvY19TVFJWQVIoCisgICAgVW5yZWdpc3RlcldhaXRfZG9jLAorICAgICJVbnJlZ2lzdGVyV2FpdChXYWl0SGFuZGxlKSAtPiBOb25lXG5cbiIKKyAgICAiVW5yZWdpc3RlciB3YWl0IGhhbmRsZS5cbiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3ZlcmxhcHBlZF9VbnJlZ2lzdGVyV2FpdChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgSEFORExFIFdhaXRIYW5kbGU7CisgICAgQk9PTCByZXQ7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgRl9IQU5ETEUsICZXYWl0SGFuZGxlKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgcmV0ID0gVW5yZWdpc3RlcldhaXQoV2FpdEhhbmRsZSk7CisgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKworICAgIGlmICghcmV0KQorICAgICAgICByZXR1cm4gU2V0RnJvbVdpbmRvd3NFcnIoMCk7CisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKK1B5RG9jX1NUUlZBUigKKyAgICBVbnJlZ2lzdGVyV2FpdEV4X2RvYywKKyAgICAiVW5yZWdpc3RlcldhaXRFeChXYWl0SGFuZGxlLCBFdmVudCkgLT4gTm9uZVxuXG4iCisgICAgIlVucmVnaXN0ZXIgd2FpdCBoYW5kbGUuXG4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK292ZXJsYXBwZWRfVW5yZWdpc3RlcldhaXRFeChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgSEFORExFIFdhaXRIYW5kbGUsIEV2ZW50OworICAgIEJPT0wgcmV0OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIEZfSEFORExFIEZfSEFORExFLCAmV2FpdEhhbmRsZSwgJkV2ZW50KSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgcmV0ID0gVW5yZWdpc3RlcldhaXRFeChXYWl0SGFuZGxlLCBFdmVudCk7CisgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKworICAgIGlmICghcmV0KQorICAgICAgICByZXR1cm4gU2V0RnJvbVdpbmRvd3NFcnIoMCk7CisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKKy8qCisgKiBFdmVudCBmdW5jdGlvbnMgLS0gY3VycmVudGx5IG9ubHkgdXNlZCBieSB0ZXN0cworICovCisKK1B5RG9jX1NUUlZBUigKKyAgICBDcmVhdGVFdmVudF9kb2MsCisgICAgIkNyZWF0ZUV2ZW50KEV2ZW50QXR0cmlidXRlcywgTWFudWFsUmVzZXQsIEluaXRpYWxTdGF0ZSwgTmFtZSkiCisgICAgIiAtPiBIYW5kbGVcblxuIgorICAgICJDcmVhdGUgYW4gZXZlbnQuICBFdmVudEF0dHJpYnV0ZXMgbXVzdCBiZSBOb25lLlxuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitvdmVybGFwcGVkX0NyZWF0ZUV2ZW50KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqRXZlbnRBdHRyaWJ1dGVzOworICAgIEJPT0wgTWFudWFsUmVzZXQ7CisgICAgQk9PTCBJbml0aWFsU3RhdGU7CisgICAgUHlfVU5JQ09ERSAqTmFtZTsKKyAgICBIQU5ETEUgRXZlbnQ7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8iIEZfQk9PTCBGX0JPT0wgIloiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAmRXZlbnRBdHRyaWJ1dGVzLCAmTWFudWFsUmVzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZJbml0aWFsU3RhdGUsICZOYW1lKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoRXZlbnRBdHRyaWJ1dGVzICE9IFB5X05vbmUpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJFdmVudEF0dHJpYnV0ZXMgbXVzdCBiZSBOb25lIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICBFdmVudCA9IENyZWF0ZUV2ZW50VyhOVUxMLCBNYW51YWxSZXNldCwgSW5pdGlhbFN0YXRlLCBOYW1lKTsKKyAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworCisgICAgaWYgKEV2ZW50ID09IE5VTEwpCisgICAgICAgIHJldHVybiBTZXRGcm9tV2luZG93c0VycigwKTsKKyAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZShGX0hBTkRMRSwgRXZlbnQpOworfQorCitQeURvY19TVFJWQVIoCisgICAgU2V0RXZlbnRfZG9jLAorICAgICJTZXRFdmVudChIYW5kbGUpIC0+IE5vbmVcblxuIgorICAgICJTZXQgZXZlbnQuXG4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK292ZXJsYXBwZWRfU2V0RXZlbnQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIEhBTkRMRSBIYW5kbGU7CisgICAgQk9PTCByZXQ7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgRl9IQU5ETEUsICZIYW5kbGUpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICByZXQgPSBTZXRFdmVudChIYW5kbGUpOworICAgIFB5X0VORF9BTExPV19USFJFQURTCisKKyAgICBpZiAoIXJldCkKKyAgICAgICAgcmV0dXJuIFNldEZyb21XaW5kb3dzRXJyKDApOworICAgIFB5X1JFVFVSTl9OT05FOworfQorCitQeURvY19TVFJWQVIoCisgICAgUmVzZXRFdmVudF9kb2MsCisgICAgIlJlc2V0RXZlbnQoSGFuZGxlKSAtPiBOb25lXG5cbiIKKyAgICAiUmVzZXQgZXZlbnQuXG4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK292ZXJsYXBwZWRfUmVzZXRFdmVudChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgSEFORExFIEhhbmRsZTsKKyAgICBCT09MIHJldDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBGX0hBTkRMRSwgJkhhbmRsZSkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgIHJldCA9IFJlc2V0RXZlbnQoSGFuZGxlKTsKKyAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworCisgICAgaWYgKCFyZXQpCisgICAgICAgIHJldHVybiBTZXRGcm9tV2luZG93c0VycigwKTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKworLyoKKyAqIEJpbmQgc29ja2V0IGhhbmRsZSB0byBsb2NhbCBwb3J0IHdpdGhvdXQgZG9pbmcgc2xvdyBnZXRhZGRyaW5mbygpCisgKi8KKworUHlEb2NfU1RSVkFSKAorICAgIEJpbmRMb2NhbF9kb2MsCisgICAgIkJpbmRMb2NhbChoYW5kbGUsIGZhbWlseSkgLT4gTm9uZVxuXG4iCisgICAgIkJpbmQgYSBzb2NrZXQgaGFuZGxlIHRvIGFuIGFyYml0cmFyeSBsb2NhbCBwb3J0LlxuIgorICAgICJmYW1pbHkgc2hvdWxkIEFGX0lORVQgb3IgQUZfSU5FVDYuXG4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK292ZXJsYXBwZWRfQmluZExvY2FsKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBTT0NLRVQgU29ja2V0OworICAgIGludCBGYW1pbHk7CisgICAgQk9PTCByZXQ7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgRl9IQU5ETEUgImkiLCAmU29ja2V0LCAmRmFtaWx5KSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoRmFtaWx5ID09IEFGX0lORVQpIHsKKyAgICAgICAgc3RydWN0IHNvY2thZGRyX2luIGFkZHI7CisgICAgICAgIG1lbXNldCgmYWRkciwgMCwgc2l6ZW9mKGFkZHIpKTsKKyAgICAgICAgYWRkci5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyAgICAgICAgYWRkci5zaW5fcG9ydCA9IDA7CisgICAgICAgIGFkZHIuc2luX2FkZHIuU191bi5TX2FkZHIgPSBJTkFERFJfQU5ZOworICAgICAgICByZXQgPSBiaW5kKFNvY2tldCwgKFNPQ0tBRERSKikmYWRkciwgc2l6ZW9mKGFkZHIpKSAhPSBTT0NLRVRfRVJST1I7CisgICAgfSBlbHNlIGlmIChGYW1pbHkgPT0gQUZfSU5FVDYpIHsKKyAgICAgICAgc3RydWN0IHNvY2thZGRyX2luNiBhZGRyOworICAgICAgICBtZW1zZXQoJmFkZHIsIDAsIHNpemVvZihhZGRyKSk7CisgICAgICAgIGFkZHIuc2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKKyAgICAgICAgYWRkci5zaW42X3BvcnQgPSAwOworICAgICAgICBhZGRyLnNpbjZfYWRkciA9IGluNmFkZHJfYW55OworICAgICAgICByZXQgPSBiaW5kKFNvY2tldCwgKFNPQ0tBRERSKikmYWRkciwgc2l6ZW9mKGFkZHIpKSAhPSBTT0NLRVRfRVJST1I7CisgICAgfSBlbHNlIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJleHBlY3RlZCB0dXBsZSBvZiBsZW5ndGggMiBvciA0Iik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGlmICghcmV0KQorICAgICAgICByZXR1cm4gU2V0RnJvbVdpbmRvd3NFcnIoV1NBR2V0TGFzdEVycm9yKCkpOworICAgIFB5X1JFVFVSTl9OT05FOworfQorCisvKgorICogV2luZG93cyBlcXVpdmFsZW50IG9mIG9zLnN0cmVycm9yKCkgLS0gY29tcGFyZSBfY3R5cGVzL2NhbGxwcm9jLmMKKyAqLworCitQeURvY19TVFJWQVIoCisgICAgRm9ybWF0TWVzc2FnZV9kb2MsCisgICAgIkZvcm1hdE1lc3NhZ2UoZXJyb3JfY29kZSkgLT4gZXJyb3JfbWVzc2FnZVxuXG4iCisgICAgIlJldHVybiBlcnJvciBtZXNzYWdlIGZvciBhbiBlcnJvciBjb2RlLiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3ZlcmxhcHBlZF9Gb3JtYXRNZXNzYWdlKFB5T2JqZWN0ICppZ25vcmUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIERXT1JEIGNvZGUsIG47CisgICAgV0NIQVIgKmxwTXNnQnVmOworICAgIFB5T2JqZWN0ICpyZXM7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgRl9EV09SRCwgJmNvZGUpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIG4gPSBGb3JtYXRNZXNzYWdlVyhGT1JNQVRfTUVTU0FHRV9BTExPQ0FURV9CVUZGRVIgfAorICAgICAgICAgICAgICAgICAgICAgICBGT1JNQVRfTUVTU0FHRV9GUk9NX1NZU1RFTSwKKyAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgTUFLRUxBTkdJRChMQU5HX05FVVRSQUwsIFNVQkxBTkdfREVGQVVMVCksCisgICAgICAgICAgICAgICAgICAgICAgIChMUFdTVFIpICZscE1zZ0J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisgICAgaWYgKG4pIHsKKyAgICAgICAgd2hpbGUgKGlzd3NwYWNlKGxwTXNnQnVmW24tMV0pKQorICAgICAgICAgICAgLS1uOworICAgICAgICBscE1zZ0J1ZltuXSA9IEwnXDAnOworICAgICAgICByZXMgPSBQeV9CdWlsZFZhbHVlKCJ1IiwgbHBNc2dCdWYpOworICAgIH0gZWxzZSB7CisgICAgICAgIHJlcyA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0KCJ1bmtub3duIGVycm9yIGNvZGUgJXUiLCBjb2RlKTsKKyAgICB9CisgICAgTG9jYWxGcmVlKGxwTXNnQnVmKTsKKyAgICByZXR1cm4gcmVzOworfQorCisKKy8qCisgKiBNYXJrIG9wZXJhdGlvbiBhcyBjb21wbGV0ZWQgLSB1c2VkIHdoZW4gcmVhZGluZyBwcm9kdWNlcyBFUlJPUl9CUk9LRU5fUElQRQorICovCisKK3N0YXRpYyB2b2lkCittYXJrX2FzX2NvbXBsZXRlZChPVkVSTEFQUEVEICpvdikKK3sKKyAgICBvdi0+SW50ZXJuYWwgPSAwOworICAgIGlmIChvdi0+aEV2ZW50ICE9IE5VTEwpCisgICAgICAgIFNldEV2ZW50KG92LT5oRXZlbnQpOworfQorCisvKgorICogQSBQeXRob24gb2JqZWN0IHdyYXBwaW5nIGFuIE9WRVJMQVBQRUQgc3RydWN0dXJlIGFuZCBvdGhlciB1c2VmdWwgZGF0YQorICogZm9yIG92ZXJsYXBwZWQgSS9PCisgKi8KKworUHlEb2NfU1RSVkFSKAorICAgIE92ZXJsYXBwZWRfZG9jLAorICAgICJPdmVybGFwcGVkIG9iamVjdCIpOworCitzdGF0aWMgUHlPYmplY3QgKgorT3ZlcmxhcHBlZF9uZXcoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCit7CisgICAgT3ZlcmxhcHBlZE9iamVjdCAqc2VsZjsKKyAgICBIQU5ETEUgZXZlbnQgPSBJTlZBTElEX0hBTkRMRV9WQUxVRTsKKyAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7ImV2ZW50IiwgTlVMTH07CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAifCIgRl9IQU5ETEUsIGt3bGlzdCwgJmV2ZW50KSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoZXZlbnQgPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpIHsKKyAgICAgICAgZXZlbnQgPSBDcmVhdGVFdmVudChOVUxMLCBUUlVFLCBGQUxTRSwgTlVMTCk7CisgICAgICAgIGlmIChldmVudCA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIFNldEZyb21XaW5kb3dzRXJyKDApOworICAgIH0KKworICAgIHNlbGYgPSBQeU9iamVjdF9OZXcoT3ZlcmxhcHBlZE9iamVjdCwgdHlwZSk7CisgICAgaWYgKHNlbGYgPT0gTlVMTCkgeworICAgICAgICBpZiAoZXZlbnQgIT0gTlVMTCkKKyAgICAgICAgICAgIENsb3NlSGFuZGxlKGV2ZW50KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgc2VsZi0+aGFuZGxlID0gTlVMTDsKKyAgICBzZWxmLT5lcnJvciA9IDA7CisgICAgc2VsZi0+dHlwZSA9IFRZUEVfTk9ORTsKKyAgICBzZWxmLT5yZWFkX2J1ZmZlciA9IE5VTEw7CisgICAgbWVtc2V0KCZzZWxmLT5vdmVybGFwcGVkLCAwLCBzaXplb2YoT1ZFUkxBUFBFRCkpOworICAgIG1lbXNldCgmc2VsZi0+d3JpdGVfYnVmZmVyLCAwLCBzaXplb2YoUHlfYnVmZmVyKSk7CisgICAgaWYgKGV2ZW50KQorICAgICAgICBzZWxmLT5vdmVybGFwcGVkLmhFdmVudCA9IGV2ZW50OworICAgIHJldHVybiAoUHlPYmplY3QgKilzZWxmOworfQorCitzdGF0aWMgdm9pZAorT3ZlcmxhcHBlZF9kZWFsbG9jKE92ZXJsYXBwZWRPYmplY3QgKnNlbGYpCit7CisgICAgRFdPUkQgYnl0ZXM7CisgICAgRFdPUkQgb2xkZXJyID0gR2V0TGFzdEVycm9yKCk7CisgICAgQk9PTCB3YWl0ID0gRkFMU0U7CisgICAgQk9PTCByZXQ7CisKKyAgICBpZiAoIUhhc092ZXJsYXBwZWRJb0NvbXBsZXRlZCgmc2VsZi0+b3ZlcmxhcHBlZCkgJiYKKyAgICAgICAgc2VsZi0+dHlwZSAhPSBUWVBFX05PVF9TVEFSVEVEKQorICAgIHsKKyAgICAgICAgaWYgKFB5X0NhbmNlbElvRXggJiYgUHlfQ2FuY2VsSW9FeChzZWxmLT5oYW5kbGUsICZzZWxmLT5vdmVybGFwcGVkKSkKKyAgICAgICAgICAgIHdhaXQgPSBUUlVFOworCisgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICAgICAgcmV0ID0gR2V0T3ZlcmxhcHBlZFJlc3VsdChzZWxmLT5oYW5kbGUsICZzZWxmLT5vdmVybGFwcGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZieXRlcywgd2FpdCk7CisgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCisKKyAgICAgICAgc3dpdGNoIChyZXQgPyBFUlJPUl9TVUNDRVNTIDogR2V0TGFzdEVycm9yKCkpIHsKKyAgICAgICAgICAgIGNhc2UgRVJST1JfU1VDQ0VTUzoKKyAgICAgICAgICAgIGNhc2UgRVJST1JfTk9UX0ZPVU5EOgorICAgICAgICAgICAgY2FzZSBFUlJPUl9PUEVSQVRJT05fQUJPUlRFRDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KAorICAgICAgICAgICAgICAgICAgICBQeUV4Y19SdW50aW1lRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICIlUiBzdGlsbCBoYXMgcGVuZGluZyBvcGVyYXRpb24gYXQgIgorICAgICAgICAgICAgICAgICAgICAiZGVhbGxvY2F0aW9uLCB0aGUgcHJvY2VzcyBtYXkgY3Jhc2giLCBzZWxmKTsKKyAgICAgICAgICAgICAgICBQeUVycl9Xcml0ZVVucmFpc2FibGUoTlVMTCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoc2VsZi0+b3ZlcmxhcHBlZC5oRXZlbnQgIT0gTlVMTCkKKyAgICAgICAgQ2xvc2VIYW5kbGUoc2VsZi0+b3ZlcmxhcHBlZC5oRXZlbnQpOworCisgICAgc3dpdGNoIChzZWxmLT50eXBlKSB7CisgICAgY2FzZSBUWVBFX1JFQUQ6CisgICAgY2FzZSBUWVBFX0FDQ0VQVDoKKyAgICAgICAgUHlfQ0xFQVIoc2VsZi0+cmVhZF9idWZmZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFRZUEVfV1JJVEU6CisgICAgICAgIGlmIChzZWxmLT53cml0ZV9idWZmZXIub2JqKQorICAgICAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmc2VsZi0+d3JpdGVfYnVmZmVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIFB5T2JqZWN0X0RlbChzZWxmKTsKKyAgICBTZXRMYXN0RXJyb3Iob2xkZXJyKTsKK30KKworUHlEb2NfU1RSVkFSKAorICAgIE92ZXJsYXBwZWRfY2FuY2VsX2RvYywKKyAgICAiY2FuY2VsKCkgLT4gTm9uZVxuXG4iCisgICAgIkNhbmNlbCBvdmVybGFwcGVkIG9wZXJhdGlvbiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorT3ZlcmxhcHBlZF9jYW5jZWwoT3ZlcmxhcHBlZE9iamVjdCAqc2VsZikKK3sKKyAgICBCT09MIHJldCA9IFRSVUU7CisKKyAgICBpZiAoc2VsZi0+dHlwZSA9PSBUWVBFX05PVF9TVEFSVEVECisgICAgICAgIHx8IHNlbGYtPnR5cGUgPT0gVFlQRV9XQUlUX05BTUVEX1BJUEVfQU5EX0NPTk5FQ1QpCisgICAgICAgIFB5X1JFVFVSTl9OT05FOworCisgICAgaWYgKCFIYXNPdmVybGFwcGVkSW9Db21wbGV0ZWQoJnNlbGYtPm92ZXJsYXBwZWQpKSB7CisgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICAgICAgaWYgKFB5X0NhbmNlbElvRXgpCisgICAgICAgICAgICByZXQgPSBQeV9DYW5jZWxJb0V4KHNlbGYtPmhhbmRsZSwgJnNlbGYtPm92ZXJsYXBwZWQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXQgPSBDYW5jZWxJbyhzZWxmLT5oYW5kbGUpOworICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworICAgIH0KKworICAgIC8qIENhbmNlbElvRXggcmV0dXJucyBFUlJPUl9OT1RfRk9VTkQgaWYgdGhlIEkvTyBjb21wbGV0ZWQgaW4tYmV0d2VlbiAqLworICAgIGlmICghcmV0ICYmIEdldExhc3RFcnJvcigpICE9IEVSUk9SX05PVF9GT1VORCkKKyAgICAgICAgcmV0dXJuIFNldEZyb21XaW5kb3dzRXJyKDApOworICAgIFB5X1JFVFVSTl9OT05FOworfQorCitQeURvY19TVFJWQVIoCisgICAgT3ZlcmxhcHBlZF9nZXRyZXN1bHRfZG9jLAorICAgICJnZXRyZXN1bHQod2FpdD1GYWxzZSkgLT4gcmVzdWx0XG5cbiIKKyAgICAiUmV0cmlldmUgcmVzdWx0IG9mIG9wZXJhdGlvbi4gIElmIHdhaXQgaXMgdHJ1ZSB0aGVuIGl0IGJsb2Nrc1xuIgorICAgICJ1bnRpbCB0aGUgb3BlcmF0aW9uIGlzIGZpbmlzaGVkLiAgSWYgd2FpdCBpcyBmYWxzZSBhbmQgdGhlXG4iCisgICAgIm9wZXJhdGlvbiBpcyBzdGlsbCBwZW5kaW5nIHRoZW4gYW4gZXJyb3IgaXMgcmFpc2VkLiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorT3ZlcmxhcHBlZF9nZXRyZXN1bHQoT3ZlcmxhcHBlZE9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgQk9PTCB3YWl0ID0gRkFMU0U7CisgICAgRFdPUkQgdHJhbnNmZXJyZWQgPSAwOworICAgIEJPT0wgcmV0OworICAgIERXT1JEIGVycjsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifCIgRl9CT09MLCAmd2FpdCkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKHNlbGYtPnR5cGUgPT0gVFlQRV9OT05FKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAib3BlcmF0aW9uIG5vdCB5ZXQgYXR0ZW1wdGVkIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGlmIChzZWxmLT50eXBlID09IFRZUEVfTk9UX1NUQVJURUQpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJvcGVyYXRpb24gZmFpbGVkIHRvIHN0YXJ0Iik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICByZXQgPSBHZXRPdmVybGFwcGVkUmVzdWx0KHNlbGYtPmhhbmRsZSwgJnNlbGYtPm92ZXJsYXBwZWQsICZ0cmFuc2ZlcnJlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhaXQpOworICAgIFB5X0VORF9BTExPV19USFJFQURTCisKKyAgICBzZWxmLT5lcnJvciA9IGVyciA9IHJldCA/IEVSUk9SX1NVQ0NFU1MgOiBHZXRMYXN0RXJyb3IoKTsKKyAgICBzd2l0Y2ggKGVycikgeworICAgICAgICBjYXNlIEVSUk9SX1NVQ0NFU1M6CisgICAgICAgIGNhc2UgRVJST1JfTU9SRV9EQVRBOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRVJST1JfQlJPS0VOX1BJUEU6CisgICAgICAgICAgICBpZiAoKHNlbGYtPnR5cGUgPT0gVFlQRV9SRUFEIHx8IHNlbGYtPnR5cGUgPT0gVFlQRV9BQ0NFUFQpICYmIHNlbGYtPnJlYWRfYnVmZmVyICE9IE5VTEwpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAvKiBmYWxsIHRocm91Z2ggKi8KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBTZXRGcm9tV2luZG93c0VycihlcnIpOworICAgIH0KKworICAgIHN3aXRjaCAoc2VsZi0+dHlwZSkgeworICAgICAgICBjYXNlIFRZUEVfUkVBRDoKKyAgICAgICAgICAgIGFzc2VydChQeUJ5dGVzX0NoZWNrRXhhY3Qoc2VsZi0+cmVhZF9idWZmZXIpKTsKKyAgICAgICAgICAgIGlmICh0cmFuc2ZlcnJlZCAhPSBQeUJ5dGVzX0dFVF9TSVpFKHNlbGYtPnJlYWRfYnVmZmVyKSAmJgorICAgICAgICAgICAgICAgIF9QeUJ5dGVzX1Jlc2l6ZSgmc2VsZi0+cmVhZF9idWZmZXIsIHRyYW5zZmVycmVkKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIFB5X0lOQ1JFRihzZWxmLT5yZWFkX2J1ZmZlcik7CisgICAgICAgICAgICByZXR1cm4gc2VsZi0+cmVhZF9idWZmZXI7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21VbnNpZ25lZExvbmcoKHVuc2lnbmVkIGxvbmcpIHRyYW5zZmVycmVkKTsKKyAgICB9Cit9CisKK1B5RG9jX1NUUlZBUigKKyAgICBPdmVybGFwcGVkX1JlYWRGaWxlX2RvYywKKyAgICAiUmVhZEZpbGUoaGFuZGxlLCBzaXplKSAtPiBPdmVybGFwcGVkW21lc3NhZ2VdXG5cbiIKKyAgICAiU3RhcnQgb3ZlcmxhcHBlZCByZWFkIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitPdmVybGFwcGVkX1JlYWRGaWxlKE92ZXJsYXBwZWRPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIEhBTkRMRSBoYW5kbGU7CisgICAgRFdPUkQgc2l6ZTsKKyAgICBEV09SRCBucmVhZDsKKyAgICBQeU9iamVjdCAqYnVmOworICAgIEJPT0wgcmV0OworICAgIERXT1JEIGVycjsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBGX0hBTkRMRSBGX0RXT1JELCAmaGFuZGxlLCAmc2l6ZSkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKHNlbGYtPnR5cGUgIT0gVFlQRV9OT05FKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAib3BlcmF0aW9uIGFscmVhZHkgYXR0ZW1wdGVkIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworI2lmIFNJWkVPRl9TSVpFX1QgPD0gU0laRU9GX0xPTkcKKyAgICBzaXplID0gUHlfTUlOKHNpemUsIChEV09SRClQWV9TU0laRV9UX01BWCk7CisjZW5kaWYKKyAgICBidWYgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIFB5X01BWChzaXplLCAxKSk7CisgICAgaWYgKGJ1ZiA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHNlbGYtPnR5cGUgPSBUWVBFX1JFQUQ7CisgICAgc2VsZi0+aGFuZGxlID0gaGFuZGxlOworICAgIHNlbGYtPnJlYWRfYnVmZmVyID0gYnVmOworCisgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgIHJldCA9IFJlYWRGaWxlKGhhbmRsZSwgUHlCeXRlc19BU19TVFJJTkcoYnVmKSwgc2l6ZSwgJm5yZWFkLAorICAgICAgICAgICAgICAgICAgICZzZWxmLT5vdmVybGFwcGVkKTsKKyAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworCisgICAgc2VsZi0+ZXJyb3IgPSBlcnIgPSByZXQgPyBFUlJPUl9TVUNDRVNTIDogR2V0TGFzdEVycm9yKCk7CisgICAgc3dpdGNoIChlcnIpIHsKKyAgICAgICAgY2FzZSBFUlJPUl9CUk9LRU5fUElQRToKKyAgICAgICAgICAgIG1hcmtfYXNfY29tcGxldGVkKCZzZWxmLT5vdmVybGFwcGVkKTsKKyAgICAgICAgICAgIHJldHVybiBTZXRGcm9tV2luZG93c0VycihlcnIpOworICAgICAgICBjYXNlIEVSUk9SX1NVQ0NFU1M6CisgICAgICAgIGNhc2UgRVJST1JfTU9SRV9EQVRBOgorICAgICAgICBjYXNlIEVSUk9SX0lPX1BFTkRJTkc6CisgICAgICAgICAgICBQeV9SRVRVUk5fTk9ORTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHNlbGYtPnR5cGUgPSBUWVBFX05PVF9TVEFSVEVEOworICAgICAgICAgICAgcmV0dXJuIFNldEZyb21XaW5kb3dzRXJyKGVycik7CisgICAgfQorfQorCitQeURvY19TVFJWQVIoCisgICAgT3ZlcmxhcHBlZF9XU0FSZWN2X2RvYywKKyAgICAiUmVjdkZpbGUoaGFuZGxlLCBzaXplLCBmbGFncykgLT4gT3ZlcmxhcHBlZFttZXNzYWdlXVxuXG4iCisgICAgIlN0YXJ0IG92ZXJsYXBwZWQgcmVjZWl2ZSIpOworCitzdGF0aWMgUHlPYmplY3QgKgorT3ZlcmxhcHBlZF9XU0FSZWN2KE92ZXJsYXBwZWRPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIEhBTkRMRSBoYW5kbGU7CisgICAgRFdPUkQgc2l6ZTsKKyAgICBEV09SRCBmbGFncyA9IDA7CisgICAgRFdPUkQgbnJlYWQ7CisgICAgUHlPYmplY3QgKmJ1ZjsKKyAgICBXU0FCVUYgd3NhYnVmOworICAgIGludCByZXQ7CisgICAgRFdPUkQgZXJyOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIEZfSEFORExFIEZfRFdPUkQgInwiIEZfRFdPUkQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZoYW5kbGUsICZzaXplLCAmZmxhZ3MpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChzZWxmLT50eXBlICE9IFRZUEVfTk9ORSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIm9wZXJhdGlvbiBhbHJlYWR5IGF0dGVtcHRlZCIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyNpZiBTSVpFT0ZfU0laRV9UIDw9IFNJWkVPRl9MT05HCisgICAgc2l6ZSA9IFB5X01JTihzaXplLCAoRFdPUkQpUFlfU1NJWkVfVF9NQVgpOworI2VuZGlmCisgICAgYnVmID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBQeV9NQVgoc2l6ZSwgMSkpOworICAgIGlmIChidWYgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBzZWxmLT50eXBlID0gVFlQRV9SRUFEOworICAgIHNlbGYtPmhhbmRsZSA9IGhhbmRsZTsKKyAgICBzZWxmLT5yZWFkX2J1ZmZlciA9IGJ1ZjsKKyAgICB3c2FidWYubGVuID0gc2l6ZTsKKyAgICB3c2FidWYuYnVmID0gUHlCeXRlc19BU19TVFJJTkcoYnVmKTsKKworICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICByZXQgPSBXU0FSZWN2KChTT0NLRVQpaGFuZGxlLCAmd3NhYnVmLCAxLCAmbnJlYWQsICZmbGFncywKKyAgICAgICAgICAgICAgICAgICZzZWxmLT5vdmVybGFwcGVkLCBOVUxMKTsKKyAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworCisgICAgc2VsZi0+ZXJyb3IgPSBlcnIgPSAocmV0IDwgMCA/IFdTQUdldExhc3RFcnJvcigpIDogRVJST1JfU1VDQ0VTUyk7CisgICAgc3dpdGNoIChlcnIpIHsKKyAgICAgICAgY2FzZSBFUlJPUl9CUk9LRU5fUElQRToKKyAgICAgICAgICAgIG1hcmtfYXNfY29tcGxldGVkKCZzZWxmLT5vdmVybGFwcGVkKTsKKyAgICAgICAgICAgIHJldHVybiBTZXRGcm9tV2luZG93c0VycihlcnIpOworICAgICAgICBjYXNlIEVSUk9SX1NVQ0NFU1M6CisgICAgICAgIGNhc2UgRVJST1JfTU9SRV9EQVRBOgorICAgICAgICBjYXNlIEVSUk9SX0lPX1BFTkRJTkc6CisgICAgICAgICAgICBQeV9SRVRVUk5fTk9ORTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHNlbGYtPnR5cGUgPSBUWVBFX05PVF9TVEFSVEVEOworICAgICAgICAgICAgcmV0dXJuIFNldEZyb21XaW5kb3dzRXJyKGVycik7CisgICAgfQorfQorCitQeURvY19TVFJWQVIoCisgICAgT3ZlcmxhcHBlZF9Xcml0ZUZpbGVfZG9jLAorICAgICJXcml0ZUZpbGUoaGFuZGxlLCBidWYpIC0+IE92ZXJsYXBwZWRbYnl0ZXNfdHJhbnNmZXJyZWRdXG5cbiIKKyAgICAiU3RhcnQgb3ZlcmxhcHBlZCB3cml0ZSIpOworCitzdGF0aWMgUHlPYmplY3QgKgorT3ZlcmxhcHBlZF9Xcml0ZUZpbGUoT3ZlcmxhcHBlZE9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgSEFORExFIGhhbmRsZTsKKyAgICBQeU9iamVjdCAqYnVmb2JqOworICAgIERXT1JEIHdyaXR0ZW47CisgICAgQk9PTCByZXQ7CisgICAgRFdPUkQgZXJyOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIEZfSEFORExFICJPIiwgJmhhbmRsZSwgJmJ1Zm9iaikpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKHNlbGYtPnR5cGUgIT0gVFlQRV9OT05FKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAib3BlcmF0aW9uIGFscmVhZHkgYXR0ZW1wdGVkIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGlmICghUHlBcmdfUGFyc2UoYnVmb2JqLCAieSoiLCAmc2VsZi0+d3JpdGVfYnVmZmVyKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyNpZiBTSVpFT0ZfU0laRV9UID4gU0laRU9GX0xPTkcKKyAgICBpZiAoc2VsZi0+d3JpdGVfYnVmZmVyLmxlbiA+IChQeV9zc2l6ZV90KVVMT05HX01BWCkgeworICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZzZWxmLT53cml0ZV9idWZmZXIpOworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgImJ1ZmZlciB0byBsYXJnZSIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisjZW5kaWYKKworICAgIHNlbGYtPnR5cGUgPSBUWVBFX1dSSVRFOworICAgIHNlbGYtPmhhbmRsZSA9IGhhbmRsZTsKKworICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICByZXQgPSBXcml0ZUZpbGUoaGFuZGxlLCBzZWxmLT53cml0ZV9idWZmZXIuYnVmLAorICAgICAgICAgICAgICAgICAgICAoRFdPUkQpc2VsZi0+d3JpdGVfYnVmZmVyLmxlbiwKKyAgICAgICAgICAgICAgICAgICAgJndyaXR0ZW4sICZzZWxmLT5vdmVybGFwcGVkKTsKKyAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworCisgICAgc2VsZi0+ZXJyb3IgPSBlcnIgPSByZXQgPyBFUlJPUl9TVUNDRVNTIDogR2V0TGFzdEVycm9yKCk7CisgICAgc3dpdGNoIChlcnIpIHsKKyAgICAgICAgY2FzZSBFUlJPUl9TVUNDRVNTOgorICAgICAgICBjYXNlIEVSUk9SX0lPX1BFTkRJTkc6CisgICAgICAgICAgICBQeV9SRVRVUk5fTk9ORTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHNlbGYtPnR5cGUgPSBUWVBFX05PVF9TVEFSVEVEOworICAgICAgICAgICAgcmV0dXJuIFNldEZyb21XaW5kb3dzRXJyKGVycik7CisgICAgfQorfQorCitQeURvY19TVFJWQVIoCisgICAgT3ZlcmxhcHBlZF9XU0FTZW5kX2RvYywKKyAgICAiV1NBU2VuZChoYW5kbGUsIGJ1ZiwgZmxhZ3MpIC0+IE92ZXJsYXBwZWRbYnl0ZXNfdHJhbnNmZXJyZWRdXG5cbiIKKyAgICAiU3RhcnQgb3ZlcmxhcHBlZCBzZW5kIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitPdmVybGFwcGVkX1dTQVNlbmQoT3ZlcmxhcHBlZE9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgSEFORExFIGhhbmRsZTsKKyAgICBQeU9iamVjdCAqYnVmb2JqOworICAgIERXT1JEIGZsYWdzOworICAgIERXT1JEIHdyaXR0ZW47CisgICAgV1NBQlVGIHdzYWJ1ZjsKKyAgICBpbnQgcmV0OworICAgIERXT1JEIGVycjsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBGX0hBTkRMRSAiTyIgRl9EV09SRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJmhhbmRsZSwgJmJ1Zm9iaiwgJmZsYWdzKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoc2VsZi0+dHlwZSAhPSBUWVBFX05PTkUpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJvcGVyYXRpb24gYWxyZWFkeSBhdHRlbXB0ZWQiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgaWYgKCFQeUFyZ19QYXJzZShidWZvYmosICJ5KiIsICZzZWxmLT53cml0ZV9idWZmZXIpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworI2lmIFNJWkVPRl9TSVpFX1QgPiBTSVpFT0ZfTE9ORworICAgIGlmIChzZWxmLT53cml0ZV9idWZmZXIubGVuID4gKFB5X3NzaXplX3QpVUxPTkdfTUFYKSB7CisgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnNlbGYtPndyaXRlX2J1ZmZlcik7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiYnVmZmVyIHRvIGxhcmdlIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyNlbmRpZgorCisgICAgc2VsZi0+dHlwZSA9IFRZUEVfV1JJVEU7CisgICAgc2VsZi0+aGFuZGxlID0gaGFuZGxlOworICAgIHdzYWJ1Zi5sZW4gPSAoRFdPUkQpc2VsZi0+d3JpdGVfYnVmZmVyLmxlbjsKKyAgICB3c2FidWYuYnVmID0gc2VsZi0+d3JpdGVfYnVmZmVyLmJ1ZjsKKworICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICByZXQgPSBXU0FTZW5kKChTT0NLRVQpaGFuZGxlLCAmd3NhYnVmLCAxLCAmd3JpdHRlbiwgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAmc2VsZi0+b3ZlcmxhcHBlZCwgTlVMTCk7CisgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKworICAgIHNlbGYtPmVycm9yID0gZXJyID0gKHJldCA8IDAgPyBXU0FHZXRMYXN0RXJyb3IoKSA6IEVSUk9SX1NVQ0NFU1MpOworICAgIHN3aXRjaCAoZXJyKSB7CisgICAgICAgIGNhc2UgRVJST1JfU1VDQ0VTUzoKKyAgICAgICAgY2FzZSBFUlJPUl9JT19QRU5ESU5HOgorICAgICAgICAgICAgUHlfUkVUVVJOX05PTkU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBzZWxmLT50eXBlID0gVFlQRV9OT1RfU1RBUlRFRDsKKyAgICAgICAgICAgIHJldHVybiBTZXRGcm9tV2luZG93c0VycihlcnIpOworICAgIH0KK30KKworUHlEb2NfU1RSVkFSKAorICAgIE92ZXJsYXBwZWRfQWNjZXB0RXhfZG9jLAorICAgICJBY2NlcHRFeChsaXN0ZW5faGFuZGxlLCBhY2NlcHRfaGFuZGxlKSAtPiBPdmVybGFwcGVkW2FkZHJlc3NfYXNfYnl0ZXNdXG5cbiIKKyAgICAiU3RhcnQgb3ZlcmxhcHBlZCB3YWl0IGZvciBjbGllbnQgdG8gY29ubmVjdCIpOworCitzdGF0aWMgUHlPYmplY3QgKgorT3ZlcmxhcHBlZF9BY2NlcHRFeChPdmVybGFwcGVkT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBTT0NLRVQgTGlzdGVuU29ja2V0OworICAgIFNPQ0tFVCBBY2NlcHRTb2NrZXQ7CisgICAgRFdPUkQgQnl0ZXNSZWNlaXZlZDsKKyAgICBEV09SRCBzaXplOworICAgIFB5T2JqZWN0ICpidWY7CisgICAgQk9PTCByZXQ7CisgICAgRFdPUkQgZXJyOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIEZfSEFORExFIEZfSEFORExFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAmTGlzdGVuU29ja2V0LCAmQWNjZXB0U29ja2V0KSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoc2VsZi0+dHlwZSAhPSBUWVBFX05PTkUpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJvcGVyYXRpb24gYWxyZWFkeSBhdHRlbXB0ZWQiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgc2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSArIDE2OworICAgIGJ1ZiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgc2l6ZSoyKTsKKyAgICBpZiAoIWJ1ZikKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBzZWxmLT50eXBlID0gVFlQRV9BQ0NFUFQ7CisgICAgc2VsZi0+aGFuZGxlID0gKEhBTkRMRSlMaXN0ZW5Tb2NrZXQ7CisgICAgc2VsZi0+cmVhZF9idWZmZXIgPSBidWY7CisKKyAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgcmV0ID0gUHlfQWNjZXB0RXgoTGlzdGVuU29ja2V0LCBBY2NlcHRTb2NrZXQsIFB5Qnl0ZXNfQVNfU1RSSU5HKGJ1ZiksCisgICAgICAgICAgICAgICAgICAgICAgMCwgc2l6ZSwgc2l6ZSwgJkJ5dGVzUmVjZWl2ZWQsICZzZWxmLT5vdmVybGFwcGVkKTsKKyAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworCisgICAgc2VsZi0+ZXJyb3IgPSBlcnIgPSByZXQgPyBFUlJPUl9TVUNDRVNTIDogV1NBR2V0TGFzdEVycm9yKCk7CisgICAgc3dpdGNoIChlcnIpIHsKKyAgICAgICAgY2FzZSBFUlJPUl9TVUNDRVNTOgorICAgICAgICBjYXNlIEVSUk9SX0lPX1BFTkRJTkc6CisgICAgICAgICAgICBQeV9SRVRVUk5fTk9ORTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHNlbGYtPnR5cGUgPSBUWVBFX05PVF9TVEFSVEVEOworICAgICAgICAgICAgcmV0dXJuIFNldEZyb21XaW5kb3dzRXJyKGVycik7CisgICAgfQorfQorCisKK3N0YXRpYyBpbnQKK3BhcnNlX2FkZHJlc3MoUHlPYmplY3QgKm9iaiwgU09DS0FERFIgKkFkZHJlc3MsIGludCBMZW5ndGgpCit7CisgICAgY2hhciAqSG9zdDsKKyAgICB1bnNpZ25lZCBzaG9ydCBQb3J0OworICAgIHVuc2lnbmVkIGxvbmcgRmxvd0luZm87CisgICAgdW5zaWduZWQgbG9uZyBTY29wZUlkOworCisgICAgbWVtc2V0KEFkZHJlc3MsIDAsIExlbmd0aCk7CisKKyAgICBpZiAoUHlBcmdfUGFyc2VUdXBsZShvYmosICJzSCIsICZIb3N0LCAmUG9ydCkpCisgICAgeworICAgICAgICBBZGRyZXNzLT5zYV9mYW1pbHkgPSBBRl9JTkVUOworICAgICAgICBpZiAoV1NBU3RyaW5nVG9BZGRyZXNzQShIb3N0LCBBRl9JTkVULCBOVUxMLCBBZGRyZXNzLCAmTGVuZ3RoKSA8IDApIHsKKyAgICAgICAgICAgIFNldEZyb21XaW5kb3dzRXJyKFdTQUdldExhc3RFcnJvcigpKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICAoKFNPQ0tBRERSX0lOKilBZGRyZXNzKS0+c2luX3BvcnQgPSBodG9ucyhQb3J0KTsKKyAgICAgICAgcmV0dXJuIExlbmd0aDsKKyAgICB9CisgICAgZWxzZSBpZiAoUHlBcmdfUGFyc2VUdXBsZShvYmosICJzSGtrIiwgJkhvc3QsICZQb3J0LCAmRmxvd0luZm8sICZTY29wZUlkKSkKKyAgICB7CisgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgICAgIEFkZHJlc3MtPnNhX2ZhbWlseSA9IEFGX0lORVQ2OworICAgICAgICBpZiAoV1NBU3RyaW5nVG9BZGRyZXNzQShIb3N0LCBBRl9JTkVUNiwgTlVMTCwgQWRkcmVzcywgJkxlbmd0aCkgPCAwKSB7CisgICAgICAgICAgICBTZXRGcm9tV2luZG93c0VycihXU0FHZXRMYXN0RXJyb3IoKSk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgKChTT0NLQUREUl9JTjYqKUFkZHJlc3MpLT5zaW42X3BvcnQgPSBodG9ucyhQb3J0KTsKKyAgICAgICAgKChTT0NLQUREUl9JTjYqKUFkZHJlc3MpLT5zaW42X2Zsb3dpbmZvID0gRmxvd0luZm87CisgICAgICAgICgoU09DS0FERFJfSU42KilBZGRyZXNzKS0+c2luNl9zY29wZV9pZCA9IFNjb3BlSWQ7CisgICAgICAgIHJldHVybiBMZW5ndGg7CisgICAgfQorCisgICAgcmV0dXJuIC0xOworfQorCisKK1B5RG9jX1NUUlZBUigKKyAgICBPdmVybGFwcGVkX0Nvbm5lY3RFeF9kb2MsCisgICAgIkNvbm5lY3RFeChjbGllbnRfaGFuZGxlLCBhZGRyZXNzX2FzX2J5dGVzKSAtPiBPdmVybGFwcGVkW05vbmVdXG5cbiIKKyAgICAiU3RhcnQgb3ZlcmxhcHBlZCBjb25uZWN0LiAgY2xpZW50X2hhbmRsZSBzaG91bGQgYmUgdW5ib3VuZC4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK092ZXJsYXBwZWRfQ29ubmVjdEV4KE92ZXJsYXBwZWRPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFNPQ0tFVCBDb25uZWN0U29ja2V0OworICAgIFB5T2JqZWN0ICpBZGRyZXNzT2JqOworICAgIGNoYXIgQWRkcmVzc0J1ZltzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNildOworICAgIFNPQ0tBRERSICpBZGRyZXNzID0gKFNPQ0tBRERSKilBZGRyZXNzQnVmOworICAgIGludCBMZW5ndGg7CisgICAgQk9PTCByZXQ7CisgICAgRFdPUkQgZXJyOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIEZfSEFORExFICJPIiwgJkNvbm5lY3RTb2NrZXQsICZBZGRyZXNzT2JqKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoc2VsZi0+dHlwZSAhPSBUWVBFX05PTkUpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJvcGVyYXRpb24gYWxyZWFkeSBhdHRlbXB0ZWQiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgTGVuZ3RoID0gc2l6ZW9mKEFkZHJlc3NCdWYpOworICAgIExlbmd0aCA9IHBhcnNlX2FkZHJlc3MoQWRkcmVzc09iaiwgQWRkcmVzcywgTGVuZ3RoKTsKKyAgICBpZiAoTGVuZ3RoIDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBzZWxmLT50eXBlID0gVFlQRV9DT05ORUNUOworICAgIHNlbGYtPmhhbmRsZSA9IChIQU5ETEUpQ29ubmVjdFNvY2tldDsKKworICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICByZXQgPSBQeV9Db25uZWN0RXgoQ29ubmVjdFNvY2tldCwgQWRkcmVzcywgTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwLCBOVUxMLCAmc2VsZi0+b3ZlcmxhcHBlZCk7CisgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKworICAgIHNlbGYtPmVycm9yID0gZXJyID0gcmV0ID8gRVJST1JfU1VDQ0VTUyA6IFdTQUdldExhc3RFcnJvcigpOworICAgIHN3aXRjaCAoZXJyKSB7CisgICAgICAgIGNhc2UgRVJST1JfU1VDQ0VTUzoKKyAgICAgICAgY2FzZSBFUlJPUl9JT19QRU5ESU5HOgorICAgICAgICAgICAgUHlfUkVUVVJOX05PTkU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBzZWxmLT50eXBlID0gVFlQRV9OT1RfU1RBUlRFRDsKKyAgICAgICAgICAgIHJldHVybiBTZXRGcm9tV2luZG93c0VycihlcnIpOworICAgIH0KK30KKworUHlEb2NfU1RSVkFSKAorICAgIE92ZXJsYXBwZWRfRGlzY29ubmVjdEV4X2RvYywKKyAgICAiRGlzY29ubmVjdEV4KGhhbmRsZSwgZmxhZ3MpIC0+IE92ZXJsYXBwZWRbTm9uZV1cblxuIgorICAgICJTdGFydCBvdmVybGFwcGVkIGNvbm5lY3QuICBjbGllbnRfaGFuZGxlIHNob3VsZCBiZSB1bmJvdW5kLiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorT3ZlcmxhcHBlZF9EaXNjb25uZWN0RXgoT3ZlcmxhcHBlZE9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgU09DS0VUIFNvY2tldDsKKyAgICBEV09SRCBmbGFnczsKKyAgICBCT09MIHJldDsKKyAgICBEV09SRCBlcnI7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgRl9IQU5ETEUgRl9EV09SRCwgJlNvY2tldCwgJmZsYWdzKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoc2VsZi0+dHlwZSAhPSBUWVBFX05PTkUpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJvcGVyYXRpb24gYWxyZWFkeSBhdHRlbXB0ZWQiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgc2VsZi0+dHlwZSA9IFRZUEVfRElTQ09OTkVDVDsKKyAgICBzZWxmLT5oYW5kbGUgPSAoSEFORExFKVNvY2tldDsKKworICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICByZXQgPSBQeV9EaXNjb25uZWN0RXgoU29ja2V0LCAmc2VsZi0+b3ZlcmxhcHBlZCwgZmxhZ3MsIDApOworICAgIFB5X0VORF9BTExPV19USFJFQURTCisKKyAgICBzZWxmLT5lcnJvciA9IGVyciA9IHJldCA/IEVSUk9SX1NVQ0NFU1MgOiBXU0FHZXRMYXN0RXJyb3IoKTsKKyAgICBzd2l0Y2ggKGVycikgeworICAgICAgICBjYXNlIEVSUk9SX1NVQ0NFU1M6CisgICAgICAgIGNhc2UgRVJST1JfSU9fUEVORElORzoKKyAgICAgICAgICAgIFB5X1JFVFVSTl9OT05FOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgc2VsZi0+dHlwZSA9IFRZUEVfTk9UX1NUQVJURUQ7CisgICAgICAgICAgICByZXR1cm4gU2V0RnJvbVdpbmRvd3NFcnIoZXJyKTsKKyAgICB9Cit9CisKK1B5RG9jX1NUUlZBUigKKyAgICBPdmVybGFwcGVkX0Nvbm5lY3ROYW1lZFBpcGVfZG9jLAorICAgICJDb25uZWN0TmFtZWRQaXBlKGhhbmRsZSkgLT4gT3ZlcmxhcHBlZFtOb25lXVxuXG4iCisgICAgIlN0YXJ0IG92ZXJsYXBwZWQgd2FpdCBmb3IgYSBjbGllbnQgdG8gY29ubmVjdC4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK092ZXJsYXBwZWRfQ29ubmVjdE5hbWVkUGlwZShPdmVybGFwcGVkT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBIQU5ETEUgUGlwZTsKKyAgICBCT09MIHJldDsKKyAgICBEV09SRCBlcnI7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgRl9IQU5ETEUsICZQaXBlKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoc2VsZi0+dHlwZSAhPSBUWVBFX05PTkUpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJvcGVyYXRpb24gYWxyZWFkeSBhdHRlbXB0ZWQiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgc2VsZi0+dHlwZSA9IFRZUEVfQ09OTkVDVF9OQU1FRF9QSVBFOworICAgIHNlbGYtPmhhbmRsZSA9IFBpcGU7CisKKyAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgcmV0ID0gQ29ubmVjdE5hbWVkUGlwZShQaXBlLCAmc2VsZi0+b3ZlcmxhcHBlZCk7CisgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKworICAgIHNlbGYtPmVycm9yID0gZXJyID0gcmV0ID8gRVJST1JfU1VDQ0VTUyA6IEdldExhc3RFcnJvcigpOworICAgIHN3aXRjaCAoZXJyKSB7CisgICAgICAgIGNhc2UgRVJST1JfUElQRV9DT05ORUNURUQ6CisgICAgICAgICAgICBtYXJrX2FzX2NvbXBsZXRlZCgmc2VsZi0+b3ZlcmxhcHBlZCk7CisgICAgICAgICAgICBQeV9SRVRVUk5fVFJVRTsKKyAgICAgICAgY2FzZSBFUlJPUl9TVUNDRVNTOgorICAgICAgICBjYXNlIEVSUk9SX0lPX1BFTkRJTkc6CisgICAgICAgICAgICBQeV9SRVRVUk5fRkFMU0U7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBzZWxmLT50eXBlID0gVFlQRV9OT1RfU1RBUlRFRDsKKyAgICAgICAgICAgIHJldHVybiBTZXRGcm9tV2luZG93c0VycihlcnIpOworICAgIH0KK30KKworUHlEb2NfU1RSVkFSKAorICAgIENvbm5lY3RQaXBlX2RvYywKKyAgICAiQ29ubmVjdFBpcGUoYWRkcikgLT4gcGlwZV9oYW5kbGVcblxuIgorICAgICJDb25uZWN0IHRvIHRoZSBwaXBlIGZvciBhc3luY2hyb25vdXMgSS9PIChvdmVybGFwcGVkKS4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK0Nvbm5lY3RQaXBlKE92ZXJsYXBwZWRPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpBZGRyZXNzT2JqOworICAgIHdjaGFyX3QgKkFkZHJlc3M7CisgICAgSEFORExFIFBpcGVIYW5kbGU7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIlUiLCAgJkFkZHJlc3NPYmopKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIEFkZHJlc3MgPSBQeVVuaWNvZGVfQXNXaWRlQ2hhclN0cmluZyhBZGRyZXNzT2JqLCBOVUxMKTsKKyAgICBpZiAoQWRkcmVzcyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICBQaXBlSGFuZGxlID0gQ3JlYXRlRmlsZVcoQWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0VORVJJQ19SRUFEIHwgR0VORVJJQ19XUklURSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgTlVMTCwgT1BFTl9FWElTVElORywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRklMRV9GTEFHX09WRVJMQVBQRUQsIE5VTEwpOworICAgIFB5X0VORF9BTExPV19USFJFQURTCisKKyAgICBQeU1lbV9GcmVlKEFkZHJlc3MpOworICAgIGlmIChQaXBlSGFuZGxlID09IElOVkFMSURfSEFORExFX1ZBTFVFKQorICAgICAgICByZXR1cm4gU2V0RnJvbVdpbmRvd3NFcnIoMCk7CisgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoRl9IQU5ETEUsIFBpcGVIYW5kbGUpOworfQorCitzdGF0aWMgUHlPYmplY3QqCitPdmVybGFwcGVkX2dldGFkZHJlc3MoT3ZlcmxhcHBlZE9iamVjdCAqc2VsZikKK3sKKyAgICByZXR1cm4gUHlMb25nX0Zyb21Wb2lkUHRyKCZzZWxmLT5vdmVybGFwcGVkKTsKK30KKworc3RhdGljIFB5T2JqZWN0KgorT3ZlcmxhcHBlZF9nZXRwZW5kaW5nKE92ZXJsYXBwZWRPYmplY3QgKnNlbGYpCit7CisgICAgcmV0dXJuIFB5Qm9vbF9Gcm9tTG9uZyghSGFzT3ZlcmxhcHBlZElvQ29tcGxldGVkKCZzZWxmLT5vdmVybGFwcGVkKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi0+dHlwZSAhPSBUWVBFX05PVF9TVEFSVEVEKTsKK30KKworc3RhdGljIFB5TWV0aG9kRGVmIE92ZXJsYXBwZWRfbWV0aG9kc1tdID0geworICAgIHsiZ2V0cmVzdWx0IiwgKFB5Q0Z1bmN0aW9uKSBPdmVybGFwcGVkX2dldHJlc3VsdCwKKyAgICAgTUVUSF9WQVJBUkdTLCBPdmVybGFwcGVkX2dldHJlc3VsdF9kb2N9LAorICAgIHsiY2FuY2VsIiwgKFB5Q0Z1bmN0aW9uKSBPdmVybGFwcGVkX2NhbmNlbCwKKyAgICAgTUVUSF9OT0FSR1MsIE92ZXJsYXBwZWRfY2FuY2VsX2RvY30sCisgICAgeyJSZWFkRmlsZSIsIChQeUNGdW5jdGlvbikgT3ZlcmxhcHBlZF9SZWFkRmlsZSwKKyAgICAgTUVUSF9WQVJBUkdTLCBPdmVybGFwcGVkX1JlYWRGaWxlX2RvY30sCisgICAgeyJXU0FSZWN2IiwgKFB5Q0Z1bmN0aW9uKSBPdmVybGFwcGVkX1dTQVJlY3YsCisgICAgIE1FVEhfVkFSQVJHUywgT3ZlcmxhcHBlZF9XU0FSZWN2X2RvY30sCisgICAgeyJXcml0ZUZpbGUiLCAoUHlDRnVuY3Rpb24pIE92ZXJsYXBwZWRfV3JpdGVGaWxlLAorICAgICBNRVRIX1ZBUkFSR1MsIE92ZXJsYXBwZWRfV3JpdGVGaWxlX2RvY30sCisgICAgeyJXU0FTZW5kIiwgKFB5Q0Z1bmN0aW9uKSBPdmVybGFwcGVkX1dTQVNlbmQsCisgICAgIE1FVEhfVkFSQVJHUywgT3ZlcmxhcHBlZF9XU0FTZW5kX2RvY30sCisgICAgeyJBY2NlcHRFeCIsIChQeUNGdW5jdGlvbikgT3ZlcmxhcHBlZF9BY2NlcHRFeCwKKyAgICAgTUVUSF9WQVJBUkdTLCBPdmVybGFwcGVkX0FjY2VwdEV4X2RvY30sCisgICAgeyJDb25uZWN0RXgiLCAoUHlDRnVuY3Rpb24pIE92ZXJsYXBwZWRfQ29ubmVjdEV4LAorICAgICBNRVRIX1ZBUkFSR1MsIE92ZXJsYXBwZWRfQ29ubmVjdEV4X2RvY30sCisgICAgeyJEaXNjb25uZWN0RXgiLCAoUHlDRnVuY3Rpb24pIE92ZXJsYXBwZWRfRGlzY29ubmVjdEV4LAorICAgICBNRVRIX1ZBUkFSR1MsIE92ZXJsYXBwZWRfRGlzY29ubmVjdEV4X2RvY30sCisgICAgeyJDb25uZWN0TmFtZWRQaXBlIiwgKFB5Q0Z1bmN0aW9uKSBPdmVybGFwcGVkX0Nvbm5lY3ROYW1lZFBpcGUsCisgICAgIE1FVEhfVkFSQVJHUywgT3ZlcmxhcHBlZF9Db25uZWN0TmFtZWRQaXBlX2RvY30sCisgICAge05VTEx9Cit9OworCitzdGF0aWMgUHlNZW1iZXJEZWYgT3ZlcmxhcHBlZF9tZW1iZXJzW10gPSB7CisgICAgeyJlcnJvciIsIFRfVUxPTkcsCisgICAgIG9mZnNldG9mKE92ZXJsYXBwZWRPYmplY3QsIGVycm9yKSwKKyAgICAgUkVBRE9OTFksICJFcnJvciBmcm9tIGxhc3Qgb3BlcmF0aW9uIn0sCisgICAgeyJldmVudCIsIFRfSEFORExFLAorICAgICBvZmZzZXRvZihPdmVybGFwcGVkT2JqZWN0LCBvdmVybGFwcGVkKSArIG9mZnNldG9mKE9WRVJMQVBQRUQsIGhFdmVudCksCisgICAgIFJFQURPTkxZLCAiT3ZlcmxhcHBlZCBldmVudCBoYW5kbGUifSwKKyAgICB7TlVMTH0KK307CisKK3N0YXRpYyBQeUdldFNldERlZiBPdmVybGFwcGVkX2dldHNldHNbXSA9IHsKKyAgICB7ImFkZHJlc3MiLCAoZ2V0dGVyKU92ZXJsYXBwZWRfZ2V0YWRkcmVzcywgTlVMTCwKKyAgICAgIkFkZHJlc3Mgb2Ygb3ZlcmxhcHBlZCBzdHJ1Y3R1cmUifSwKKyAgICB7InBlbmRpbmciLCAoZ2V0dGVyKU92ZXJsYXBwZWRfZ2V0cGVuZGluZywgTlVMTCwKKyAgICAgIldoZXRoZXIgdGhlIG9wZXJhdGlvbiBpcyBwZW5kaW5nIn0sCisgICAge05VTEx9LAorfTsKKworUHlUeXBlT2JqZWN0IE92ZXJsYXBwZWRUeXBlID0geworICAgIFB5VmFyT2JqZWN0X0hFQURfSU5JVChOVUxMLCAwKQorICAgIC8qIHRwX25hbWUgICAgICAgICAgICovICJfb3ZlcmxhcHBlZC5PdmVybGFwcGVkIiwKKyAgICAvKiB0cF9iYXNpY3NpemUgICAgICAqLyBzaXplb2YoT3ZlcmxhcHBlZE9iamVjdCksCisgICAgLyogdHBfaXRlbXNpemUgICAgICAgKi8gMCwKKyAgICAvKiB0cF9kZWFsbG9jICAgICAgICAqLyAoZGVzdHJ1Y3RvcikgT3ZlcmxhcHBlZF9kZWFsbG9jLAorICAgIC8qIHRwX3ByaW50ICAgICAgICAgICovIDAsCisgICAgLyogdHBfZ2V0YXR0ciAgICAgICAgKi8gMCwKKyAgICAvKiB0cF9zZXRhdHRyICAgICAgICAqLyAwLAorICAgIC8qIHRwX3Jlc2VydmVkICAgICAgICovIDAsCisgICAgLyogdHBfcmVwciAgICAgICAgICAgKi8gMCwKKyAgICAvKiB0cF9hc19udW1iZXIgICAgICAqLyAwLAorICAgIC8qIHRwX2FzX3NlcXVlbmNlICAgICovIDAsCisgICAgLyogdHBfYXNfbWFwcGluZyAgICAgKi8gMCwKKyAgICAvKiB0cF9oYXNoICAgICAgICAgICAqLyAwLAorICAgIC8qIHRwX2NhbGwgICAgICAgICAgICovIDAsCisgICAgLyogdHBfc3RyICAgICAgICAgICAgKi8gMCwKKyAgICAvKiB0cF9nZXRhdHRybyAgICAgICAqLyAwLAorICAgIC8qIHRwX3NldGF0dHJvICAgICAgICovIDAsCisgICAgLyogdHBfYXNfYnVmZmVyICAgICAgKi8gMCwKKyAgICAvKiB0cF9mbGFncyAgICAgICAgICAqLyBQeV9UUEZMQUdTX0RFRkFVTFQsCisgICAgLyogdHBfZG9jICAgICAgICAgICAgKi8gIk9WRVJMQVBQRUQgc3RydWN0dXJlIHdyYXBwZXIiLAorICAgIC8qIHRwX3RyYXZlcnNlICAgICAgICovIDAsCisgICAgLyogdHBfY2xlYXIgICAgICAgICAgKi8gMCwKKyAgICAvKiB0cF9yaWNoY29tcGFyZSAgICAqLyAwLAorICAgIC8qIHRwX3dlYWtsaXN0b2Zmc2V0ICovIDAsCisgICAgLyogdHBfaXRlciAgICAgICAgICAgKi8gMCwKKyAgICAvKiB0cF9pdGVybmV4dCAgICAgICAqLyAwLAorICAgIC8qIHRwX21ldGhvZHMgICAgICAgICovIE92ZXJsYXBwZWRfbWV0aG9kcywKKyAgICAvKiB0cF9tZW1iZXJzICAgICAgICAqLyBPdmVybGFwcGVkX21lbWJlcnMsCisgICAgLyogdHBfZ2V0c2V0ICAgICAgICAgKi8gT3ZlcmxhcHBlZF9nZXRzZXRzLAorICAgIC8qIHRwX2Jhc2UgICAgICAgICAgICovIDAsCisgICAgLyogdHBfZGljdCAgICAgICAgICAgKi8gMCwKKyAgICAvKiB0cF9kZXNjcl9nZXQgICAgICAqLyAwLAorICAgIC8qIHRwX2Rlc2NyX3NldCAgICAgICovIDAsCisgICAgLyogdHBfZGljdG9mZnNldCAgICAgKi8gMCwKKyAgICAvKiB0cF9pbml0ICAgICAgICAgICAqLyAwLAorICAgIC8qIHRwX2FsbG9jICAgICAgICAgICovIDAsCisgICAgLyogdHBfbmV3ICAgICAgICAgICAgKi8gT3ZlcmxhcHBlZF9uZXcsCit9OworCitzdGF0aWMgUHlNZXRob2REZWYgb3ZlcmxhcHBlZF9mdW5jdGlvbnNbXSA9IHsKKyAgICB7IkNyZWF0ZUlvQ29tcGxldGlvblBvcnQiLCBvdmVybGFwcGVkX0NyZWF0ZUlvQ29tcGxldGlvblBvcnQsCisgICAgIE1FVEhfVkFSQVJHUywgQ3JlYXRlSW9Db21wbGV0aW9uUG9ydF9kb2N9LAorICAgIHsiR2V0UXVldWVkQ29tcGxldGlvblN0YXR1cyIsIG92ZXJsYXBwZWRfR2V0UXVldWVkQ29tcGxldGlvblN0YXR1cywKKyAgICAgTUVUSF9WQVJBUkdTLCBHZXRRdWV1ZWRDb21wbGV0aW9uU3RhdHVzX2RvY30sCisgICAgeyJQb3N0UXVldWVkQ29tcGxldGlvblN0YXR1cyIsIG92ZXJsYXBwZWRfUG9zdFF1ZXVlZENvbXBsZXRpb25TdGF0dXMsCisgICAgIE1FVEhfVkFSQVJHUywgUG9zdFF1ZXVlZENvbXBsZXRpb25TdGF0dXNfZG9jfSwKKyAgICB7IkZvcm1hdE1lc3NhZ2UiLCBvdmVybGFwcGVkX0Zvcm1hdE1lc3NhZ2UsCisgICAgIE1FVEhfVkFSQVJHUywgRm9ybWF0TWVzc2FnZV9kb2N9LAorICAgIHsiQmluZExvY2FsIiwgb3ZlcmxhcHBlZF9CaW5kTG9jYWwsCisgICAgIE1FVEhfVkFSQVJHUywgQmluZExvY2FsX2RvY30sCisgICAgeyJSZWdpc3RlcldhaXRXaXRoUXVldWUiLCBvdmVybGFwcGVkX1JlZ2lzdGVyV2FpdFdpdGhRdWV1ZSwKKyAgICAgTUVUSF9WQVJBUkdTLCBSZWdpc3RlcldhaXRXaXRoUXVldWVfZG9jfSwKKyAgICB7IlVucmVnaXN0ZXJXYWl0Iiwgb3ZlcmxhcHBlZF9VbnJlZ2lzdGVyV2FpdCwKKyAgICAgTUVUSF9WQVJBUkdTLCBVbnJlZ2lzdGVyV2FpdF9kb2N9LAorICAgIHsiVW5yZWdpc3RlcldhaXRFeCIsIG92ZXJsYXBwZWRfVW5yZWdpc3RlcldhaXRFeCwKKyAgICAgTUVUSF9WQVJBUkdTLCBVbnJlZ2lzdGVyV2FpdEV4X2RvY30sCisgICAgeyJDcmVhdGVFdmVudCIsIG92ZXJsYXBwZWRfQ3JlYXRlRXZlbnQsCisgICAgIE1FVEhfVkFSQVJHUywgQ3JlYXRlRXZlbnRfZG9jfSwKKyAgICB7IlNldEV2ZW50Iiwgb3ZlcmxhcHBlZF9TZXRFdmVudCwKKyAgICAgTUVUSF9WQVJBUkdTLCBTZXRFdmVudF9kb2N9LAorICAgIHsiUmVzZXRFdmVudCIsIG92ZXJsYXBwZWRfUmVzZXRFdmVudCwKKyAgICAgTUVUSF9WQVJBUkdTLCBSZXNldEV2ZW50X2RvY30sCisgICAgeyJDb25uZWN0UGlwZSIsCisgICAgIChQeUNGdW5jdGlvbikgQ29ubmVjdFBpcGUsCisgICAgIE1FVEhfVkFSQVJHUywgQ29ubmVjdFBpcGVfZG9jfSwKKyAgICB7TlVMTH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgUHlNb2R1bGVEZWYgb3ZlcmxhcHBlZF9tb2R1bGUgPSB7CisgICAgUHlNb2R1bGVEZWZfSEVBRF9JTklULAorICAgICJfb3ZlcmxhcHBlZCIsCisgICAgTlVMTCwKKyAgICAtMSwKKyAgICBvdmVybGFwcGVkX2Z1bmN0aW9ucywKKyAgICBOVUxMLAorICAgIE5VTEwsCisgICAgTlVMTCwKKyAgICBOVUxMCit9OworCisjZGVmaW5lIFdJTkFQSV9DT05TVEFOVChmbXQsIGNvbikgXAorICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICNjb24sIFB5X0J1aWxkVmFsdWUoZm10LCBjb24pKQorCitQeU1PRElOSVRfRlVOQworUHlJbml0X19vdmVybGFwcGVkKHZvaWQpCit7CisgICAgUHlPYmplY3QgKm0sICpkOworCisgICAgLyogRW5zdXJlIFdTQVN0YXJ0dXAoKSBjYWxsZWQgYmVmb3JlIGluaXRpYWxpemluZyBmdW5jdGlvbiBwb2ludGVycyAqLworICAgIG0gPSBQeUltcG9ydF9JbXBvcnRNb2R1bGUoIl9zb2NrZXQiKTsKKyAgICBpZiAoIW0pCisgICAgICAgIHJldHVybiBOVUxMOworICAgIFB5X0RFQ1JFRihtKTsKKworICAgIGlmIChpbml0aWFsaXplX2Z1bmN0aW9uX3BvaW50ZXJzKCkgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChQeVR5cGVfUmVhZHkoJk92ZXJsYXBwZWRUeXBlKSA8IDApCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgbSA9IFB5TW9kdWxlX0NyZWF0ZSgmb3ZlcmxhcHBlZF9tb2R1bGUpOworICAgIGlmIChQeU1vZHVsZV9BZGRPYmplY3QobSwgIk92ZXJsYXBwZWQiLCAoUHlPYmplY3QgKikmT3ZlcmxhcHBlZFR5cGUpIDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBkID0gUHlNb2R1bGVfR2V0RGljdChtKTsKKworICAgIFdJTkFQSV9DT05TVEFOVChGX0RXT1JELCAgRVJST1JfSU9fUEVORElORyk7CisgICAgV0lOQVBJX0NPTlNUQU5UKEZfRFdPUkQsICBFUlJPUl9ORVROQU1FX0RFTEVURUQpOworICAgIFdJTkFQSV9DT05TVEFOVChGX0RXT1JELCAgRVJST1JfU0VNX1RJTUVPVVQpOworICAgIFdJTkFQSV9DT05TVEFOVChGX0RXT1JELCAgRVJST1JfUElQRV9CVVNZKTsKKyAgICBXSU5BUElfQ09OU1RBTlQoRl9EV09SRCwgIElORklOSVRFKTsKKyAgICBXSU5BUElfQ09OU1RBTlQoRl9IQU5ETEUsIElOVkFMSURfSEFORExFX1ZBTFVFKTsKKyAgICBXSU5BUElfQ09OU1RBTlQoRl9IQU5ETEUsIE5VTEwpOworICAgIFdJTkFQSV9DT05TVEFOVChGX0RXT1JELCAgU09fVVBEQVRFX0FDQ0VQVF9DT05URVhUKTsKKyAgICBXSU5BUElfQ09OU1RBTlQoRl9EV09SRCwgIFNPX1VQREFURV9DT05ORUNUX0NPTlRFWFQpOworICAgIFdJTkFQSV9DT05TVEFOVChGX0RXT1JELCAgVEZfUkVVU0VfU09DS0VUKTsKKworICAgIHJldHVybiBtOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9wYXJzZXJtb2R1bGUuYyBiL01vZHVsZXMvcGFyc2VybW9kdWxlLmMKaW5kZXggZTU5ODA0Ni4uMzZlOTg5MyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9wYXJzZXJtb2R1bGUuYworKysgYi9Nb2R1bGVzL3BhcnNlcm1vZHVsZS5jCkBAIC04Myw1NCArODMsNzggQEAKICAgICAgICAgICAgaW50IGxpbmVubywgICAgICAgICAgICAgICAgICAvKiBpbmNsdWRlIGxpbmUgbnVtYmVycz8gICAgICAgICAqLwogICAgICAgICAgICBpbnQgY29sX29mZnNldCkgICAgICAgICAgICAgIC8qIGluY2x1ZGUgY29sdW1uIG9mZnNldHM/ICAgICAgICovCiB7CisgICAgUHlPYmplY3QgKnJlc3VsdCA9IE5VTEwsICp3OworCiAgICAgaWYgKG4gPT0gTlVMTCkgewogICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgICAgIHJldHVybiAoUHlfTm9uZSk7CisgICAgICAgIHJldHVybiBQeV9Ob25lOwogICAgIH0KKwogICAgIGlmIChJU05PTlRFUk1JTkFMKFRZUEUobikpKSB7CiAgICAgICAgIGludCBpOwotICAgICAgICBQeU9iamVjdCAqdjsKLSAgICAgICAgUHlPYmplY3QgKnc7CiAKLSAgICAgICAgdiA9IG1rc2VxKDEgKyBOQ0gobikgKyAoVFlQRShuKSA9PSBlbmNvZGluZ19kZWNsKSk7Ci0gICAgICAgIGlmICh2ID09IE5VTEwpCi0gICAgICAgICAgICByZXR1cm4gKHYpOworICAgICAgICByZXN1bHQgPSBta3NlcSgxICsgTkNIKG4pICsgKFRZUEUobikgPT0gZW5jb2RpbmdfZGVjbCkpOworICAgICAgICBpZiAocmVzdWx0ID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGVycm9yOworCiAgICAgICAgIHcgPSBQeUxvbmdfRnJvbUxvbmcoVFlQRShuKSk7Ci0gICAgICAgIGlmICh3ID09IE5VTEwpIHsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIHJldHVybiAoKFB5T2JqZWN0KikgTlVMTCk7Ci0gICAgICAgIH0KLSAgICAgICAgKHZvaWQpIGFkZGVsZW0odiwgMCwgdyk7CisgICAgICAgIGlmICh3ID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAodm9pZCkgYWRkZWxlbShyZXN1bHQsIDAsIHcpOworCiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBOQ0gobik7IGkrKykgewogICAgICAgICAgICAgdyA9IG5vZGUydHVwbGUoQ0hJTEQobiwgaSksIG1rc2VxLCBhZGRlbGVtLCBsaW5lbm8sIGNvbF9vZmZzZXQpOwotICAgICAgICAgICAgaWYgKHcgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gKChQeU9iamVjdCopIE5VTEwpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgKHZvaWQpIGFkZGVsZW0odiwgaSsxLCB3KTsKKyAgICAgICAgICAgIGlmICh3ID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICh2b2lkKSBhZGRlbGVtKHJlc3VsdCwgaSsxLCB3KTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChUWVBFKG4pID09IGVuY29kaW5nX2RlY2wpCi0gICAgICAgICAgICAodm9pZCkgYWRkZWxlbSh2LCBpKzEsIFB5VW5pY29kZV9Gcm9tU3RyaW5nKFNUUihuKSkpOwotICAgICAgICByZXR1cm4gKHYpOworICAgICAgICBpZiAoVFlQRShuKSA9PSBlbmNvZGluZ19kZWNsKSB7CisgICAgICAgICAgICB3ID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoU1RSKG4pKTsKKyAgICAgICAgICAgIGlmICh3ID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICh2b2lkKSBhZGRlbGVtKHJlc3VsdCwgaSsxLCB3KTsKKyAgICAgICAgfQogICAgIH0KICAgICBlbHNlIGlmIChJU1RFUk1JTkFMKFRZUEUobikpKSB7Ci0gICAgICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBta3NlcSgyICsgbGluZW5vICsgY29sX29mZnNldCk7Ci0gICAgICAgIGlmIChyZXN1bHQgIT0gTlVMTCkgewotICAgICAgICAgICAgKHZvaWQpIGFkZGVsZW0ocmVzdWx0LCAwLCBQeUxvbmdfRnJvbUxvbmcoVFlQRShuKSkpOwotICAgICAgICAgICAgKHZvaWQpIGFkZGVsZW0ocmVzdWx0LCAxLCBQeVVuaWNvZGVfRnJvbVN0cmluZyhTVFIobikpKTsKLSAgICAgICAgICAgIGlmIChsaW5lbm8gPT0gMSkKLSAgICAgICAgICAgICAgICAodm9pZCkgYWRkZWxlbShyZXN1bHQsIDIsIFB5TG9uZ19Gcm9tTG9uZyhuLT5uX2xpbmVubykpOwotICAgICAgICAgICAgaWYgKGNvbF9vZmZzZXQgPT0gMSkKLSAgICAgICAgICAgICAgICAodm9pZCkgYWRkZWxlbShyZXN1bHQsIDMsIFB5TG9uZ19Gcm9tTG9uZyhuLT5uX2NvbF9vZmZzZXQpKTsKKyAgICAgICAgcmVzdWx0ID0gbWtzZXEoMiArIGxpbmVubyArIGNvbF9vZmZzZXQpOworICAgICAgICBpZiAocmVzdWx0ID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGVycm9yOworCisgICAgICAgIHcgPSBQeUxvbmdfRnJvbUxvbmcoVFlQRShuKSk7CisgICAgICAgIGlmICh3ID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAodm9pZCkgYWRkZWxlbShyZXN1bHQsIDAsIHcpOworCisgICAgICAgIHcgPSBQeVVuaWNvZGVfRnJvbVN0cmluZyhTVFIobikpOworICAgICAgICBpZiAodyA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgKHZvaWQpIGFkZGVsZW0ocmVzdWx0LCAxLCB3KTsKKworICAgICAgICBpZiAobGluZW5vID09IDEpIHsKKyAgICAgICAgICAgIHcgPSBQeUxvbmdfRnJvbUxvbmcobi0+bl9saW5lbm8pOworICAgICAgICAgICAgaWYgKHcgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgKHZvaWQpIGFkZGVsZW0ocmVzdWx0LCAyLCB3KTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gKHJlc3VsdCk7CisKKyAgICAgICAgaWYgKGNvbF9vZmZzZXQgPT0gMSkgeworICAgICAgICAgICAgdyA9IFB5TG9uZ19Gcm9tTG9uZyhuLT5uX2NvbF9vZmZzZXQpOworICAgICAgICAgICAgaWYgKHcgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgKHZvaWQpIGFkZGVsZW0ocmVzdWx0LCAzLCB3KTsKKyAgICAgICAgfQogICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1N5c3RlbUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgInVucmVjb2duaXplZCBwYXJzZSB0cmVlIG5vZGUgdHlwZSIpOwogICAgICAgICByZXR1cm4gKChQeU9iamVjdCopIE5VTEwpOwogICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworCitlcnJvcjoKKyAgICBQeV9YREVDUkVGKHJlc3VsdCk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAvKgogICogIEVuZCBvZiBtYXRlcmlhbCBjb3B5cmlnaHRlZCBieSBTdGljaHRpbmcgTWF0aGVtYXRpc2NoIENlbnRydW0uCkBAIC00NTMsMzMgKzQ3Nyw0NiBAQAogc3RhdGljIFB5T2JqZWN0KgogcGFyc2VyX2NvbXBpbGVzdChQeVNUX09iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprdykKIHsKLSAgICBQeU9iamVjdCogICAgIHJlcyA9IDA7Ci0gICAgUHlBcmVuYSogICAgICBhcmVuYTsKKyAgICBQeU9iamVjdCogICAgIHJlcyA9IE5VTEw7CisgICAgUHlBcmVuYSogICAgICBhcmVuYSA9IE5VTEw7CiAgICAgbW9kX3R5ICAgICAgICBtb2Q7Ci0gICAgY2hhciogICAgICAgICBzdHIgPSAiPHN5bnRheC10cmVlPiI7CisgICAgUHlPYmplY3QqICAgICBmaWxlbmFtZSA9IE5VTEw7CiAgICAgaW50IG9rOwogCiAgICAgc3RhdGljIGNoYXIgKmtleXdvcmRzW10gPSB7InN0IiwgImZpbGVuYW1lIiwgTlVMTH07CiAKICAgICBpZiAoc2VsZiA9PSBOVUxMIHx8IFB5TW9kdWxlX0NoZWNrKHNlbGYpKQotICAgICAgICBvayA9IFB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrdywgIk8hfHM6Y29tcGlsZXN0Iiwga2V5d29yZHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZQeVNUX1R5cGUsICZzZWxmLCAmc3RyKTsKKyAgICAgICAgb2sgPSBQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3csICJPIXxPJjpjb21waWxlc3QiLCBrZXl3b3JkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlB5U1RfVHlwZSwgJnNlbGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9GU0RlY29kZXIsICZmaWxlbmFtZSk7CiAgICAgZWxzZQotICAgICAgICBvayA9IFB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrdywgInxzOmNvbXBpbGUiLCAma2V5d29yZHNbMV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdHIpOworICAgICAgICBvayA9IFB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrdywgInxPJjpjb21waWxlIiwgJmtleXdvcmRzWzFdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfRlNEZWNvZGVyLCAmZmlsZW5hbWUpOworICAgIGlmICghb2spCisgICAgICAgIGdvdG8gZXJyb3I7CiAKLSAgICBpZiAob2spIHsKLSAgICAgICAgYXJlbmEgPSBQeUFyZW5hX05ldygpOwotICAgICAgICBpZiAoYXJlbmEpIHsKLSAgICAgICAgICAgbW9kID0gUHlBU1RfRnJvbU5vZGUoc2VsZi0+c3Rfbm9kZSwgJihzZWxmLT5zdF9mbGFncyksIHN0ciwgYXJlbmEpOwotICAgICAgICAgICBpZiAobW9kKSB7Ci0gICAgICAgICAgICAgICByZXMgPSAoUHlPYmplY3QgKilQeUFTVF9Db21waWxlKG1vZCwgc3RyLCAmKHNlbGYtPnN0X2ZsYWdzKSwgYXJlbmEpOwotICAgICAgICAgICB9Ci0gICAgICAgICAgIFB5QXJlbmFfRnJlZShhcmVuYSk7Ci0gICAgICAgIH0KKyAgICBpZiAoZmlsZW5hbWUgPT0gTlVMTCkgeworICAgICAgICBmaWxlbmFtZSA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCI8c3ludGF4LXRyZWU+Iik7CisgICAgICAgIGlmIChmaWxlbmFtZSA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICB9CiAKLSAgICByZXR1cm4gKHJlcyk7CisgICAgYXJlbmEgPSBQeUFyZW5hX05ldygpOworICAgIGlmICghYXJlbmEpCisgICAgICAgIGdvdG8gZXJyb3I7CisKKyAgICBtb2QgPSBQeUFTVF9Gcm9tTm9kZU9iamVjdChzZWxmLT5zdF9ub2RlLCAmc2VsZi0+c3RfZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUsIGFyZW5hKTsKKyAgICBpZiAoIW1vZCkKKyAgICAgICAgZ290byBlcnJvcjsKKworICAgIHJlcyA9IChQeU9iamVjdCAqKVB5QVNUX0NvbXBpbGVPYmplY3QobW9kLCBmaWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzZWxmLT5zdF9mbGFncywgLTEsIGFyZW5hKTsKK2Vycm9yOgorICAgIFB5X1hERUNSRUYoZmlsZW5hbWUpOworICAgIGlmIChhcmVuYSAhPSBOVUxMKQorICAgICAgICBQeUFyZW5hX0ZyZWUoYXJlbmEpOworICAgIHJldHVybiByZXM7CiB9CiAKIApAQCAtODA5LDggKzg0NiwxMyBAQAogICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgc3RybiA9IChjaGFyICopUHlPYmplY3RfTUFMTE9DKGxlbiArIDEpOwotICAgICAgICAgICAgaWYgKHN0cm4gIT0gTlVMTCkKLSAgICAgICAgICAgICAgICAodm9pZCkgbWVtY3B5KHN0cm4sIHRlbXBfc3RyLCBsZW4gKyAxKTsKKyAgICAgICAgICAgIGlmIChzdHJuID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYodGVtcCk7CisgICAgICAgICAgICAgICAgUHlfWERFQ1JFRihlbGVtKTsKKyAgICAgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgKHZvaWQpIG1lbWNweShzdHJuLCB0ZW1wX3N0ciwgbGVuICsgMSk7CiAgICAgICAgICAgICBQeV9ERUNSRUYodGVtcCk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoIUlTTk9OVEVSTUlOQUwodHlwZSkpIHsKQEAgLTg3MCw3ICs5MTIsNyBAQAogICAgICAgICAgKiAgVGhlIHR1cGxlIGlzIHNpbXBsZSwgYnV0IGl0IGRvZXNuJ3Qgc3RhcnQgd2l0aCBhIHN0YXJ0IHN5bWJvbC4KICAgICAgICAgICogIFJhaXNlIGFuIGV4Y2VwdGlvbiBub3cgYW5kIGJlIGRvbmUgd2l0aCBpdC4KICAgICAgICAgICovCi0gICAgICAgIHR1cGxlID0gUHlfQnVpbGRWYWx1ZSgib3MiLCB0dXBsZSwKKyAgICAgICAgdHVwbGUgPSBQeV9CdWlsZFZhbHVlKCJPcyIsIHR1cGxlLAogICAgICAgICAgICAgICAgICAgICAiSWxsZWdhbCBzeW50YXgtdHJlZTsgY2Fubm90IHN0YXJ0IHdpdGggdGVybWluYWwgc3ltYm9sLiIpOwogICAgICAgICBQeUVycl9TZXRPYmplY3QocGFyc2VyX2Vycm9yLCB0dXBsZSk7CiAgICAgICAgIFB5X1hERUNSRUYodHVwbGUpOwpAQCAtOTA2LDggKzk0OCwxNCBAQAogICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgcmVzLT5uX3N0ciA9IChjaGFyICopUHlPYmplY3RfTUFMTE9DKGxlbiArIDEpOwotICAgICAgICAgICAgICAgIGlmIChyZXMtPm5fc3RyICE9IE5VTEwgJiYgdGVtcCAhPSBOVUxMKQotICAgICAgICAgICAgICAgICAgICAodm9pZCkgbWVtY3B5KHJlcy0+bl9zdHIsIHRlbXAsIGxlbiArIDEpOworICAgICAgICAgICAgICAgIGlmIChyZXMtPm5fc3RyID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHJlcyk7CisgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihlbmNvZGluZyk7CisgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih0dXBsZSk7CisgICAgICAgICAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAodm9pZCkgbWVtY3B5KHJlcy0+bl9zdHIsIHRlbXAsIGxlbiArIDEpOwogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihlbmNvZGluZyk7CiAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHR1cGxlKTsKICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL01vZHVsZXMvcG9zaXhtb2R1bGUuYyBiL01vZHVsZXMvcG9zaXhtb2R1bGUuYwppbmRleCA3NjdhNjY1Li43YzkzN2UwIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3Bvc2l4bW9kdWxlLmMKKysrIGIvTW9kdWxlcy9wb3NpeG1vZHVsZS5jCkBAIC0xLDE1ICsxLDE0IEBACiAKIC8qIFBPU0lYIG1vZHVsZSBpbXBsZW1lbnRhdGlvbiAqLwogCi0vKiBUaGlzIGZpbGUgaXMgYWxzbyB1c2VkIGZvciBXaW5kb3dzIE5UL01TLVdpbiBhbmQgT1MvMi4gIEluIHRoYXQgY2FzZSB0aGUKLSAgIG1vZHVsZSBhY3R1YWxseSBjYWxscyBpdHNlbGYgJ250JyBvciAnb3MyJywgbm90ICdwb3NpeCcsIGFuZCBhIGZldworLyogVGhpcyBmaWxlIGlzIGFsc28gdXNlZCBmb3IgV2luZG93cyBOVC9NUy1XaW4uICBJbiB0aGF0IGNhc2UgdGhlCisgICBtb2R1bGUgYWN0dWFsbHkgY2FsbHMgaXRzZWxmICdudCcsIG5vdCAncG9zaXgnLCBhbmQgYSBmZXcKICAgIGZ1bmN0aW9ucyBhcmUgZWl0aGVyIHVuaW1wbGVtZW50ZWQgb3IgaW1wbGVtZW50ZWQgZGlmZmVyZW50bHkuICBUaGUgc291cmNlCiAgICBhc3N1bWVzIHRoYXQgZm9yIFdpbmRvd3MgTlQsIHRoZSBtYWNybyAnTVNfV0lORE9XUycgaXMgZGVmaW5lZCBpbmRlcGVuZGVudAogICAgb2YgdGhlIGNvbXBpbGVyIHVzZWQuICBEaWZmZXJlbnQgY29tcGlsZXJzIGRlZmluZSB0aGVpciBvd24gZmVhdHVyZQotICAgdGVzdCBtYWNybywgZS5nLiAnX19CT1JMQU5EQ19fJyBvciAnX01TQ19WRVInLiAgRm9yIE9TLzIsIHRoZSBjb21waWxlcgotICAgaW5kZXBlbmRlbnQgbWFjcm8gUFlPU19PUzIgc2hvdWxkIGJlIGRlZmluZWQuICBPbiBPUy8yIHRoZSBkZWZhdWx0Ci0gICBjb21waWxlciBpcyBhc3N1bWVkIHRvIGJlIElCTSdzIFZpc3VhbEFnZSBDKysgKFZBQ1BQKS4gIFBZQ0NfR0NDIGlzIHVzZWQKLSAgIGFzIHRoZSBjb21waWxlciBzcGVjaWZpYyBtYWNybyBmb3IgdGhlIEVNWCBwb3J0IG9mIGdjYyB0byBPUy8yLiAqLworICAgdGVzdCBtYWNybywgZS5nLiAnX19CT1JMQU5EQ19fJyBvciAnX01TQ19WRVInLiAqLworCisKIAogI2lmZGVmIF9fQVBQTEVfXwogICAgLyoKQEAgLTMwLDExICsyOSw2IEBACiAjaW5jbHVkZSAicG9zaXhtb2R1bGUuaCIKICNlbmRpZgogCi0jaWYgZGVmaW5lZChfX1ZNUykKLSMgICAgZXJyb3IgIlBFUCAxMTogVk1TIGlzIG5vdyB1bnN1cHBvcnRlZCwgY29kZSB3aWxsIGJlIHJlbW92ZWQgaW4gUHl0aG9uIDMuNCIKLSMgICAgaW5jbHVkZSA8dW5peGlvLmg+Ci0jZW5kaWYgLyogZGVmaW5lZChfX1ZNUykgKi8KLQogI2lmZGVmIF9fY3BsdXNwbHVzCiBleHRlcm4gIkMiIHsKICNlbmRpZgpAQCAtNDYsMjIgKzQwLDYgQEAKIGNvcnJlc3BvbmRpbmcgVW5peCBtYW51YWwgZW50cmllcyBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBjYWxscy4iKTsKIAogCi0jaWYgZGVmaW5lZChQWU9TX09TMikKLSNlcnJvciAiUEVQIDExOiBPUy8yIGlzIG5vdyB1bnN1cHBvcnRlZCwgY29kZSB3aWxsIGJlIHJlbW92ZWQgaW4gUHl0aG9uIDMuNCIKLSNkZWZpbmUgIElOQ0xfRE9TCi0jZGVmaW5lICBJTkNMX0RPU0VSUk9SUwotI2RlZmluZSAgSU5DTF9ET1NQUk9DRVNTCi0jZGVmaW5lICBJTkNMX05PUE1BUEkKLSNpbmNsdWRlIDxvczIuaD4KLSNpZiBkZWZpbmVkKFBZQ0NfR0NDKQotI2luY2x1ZGUgPGN0eXBlLmg+Ci0jaW5jbHVkZSA8aW8uaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHByb2Nlc3MuaD4KLSNlbmRpZgotI2luY2x1ZGUgIm9zZGVmcy5oIgotI2VuZGlmCi0KICNpZmRlZiBIQVZFX1NZU19VSU9fSAogI2luY2x1ZGUgPHN5cy91aW8uaD4KICNlbmRpZgpAQCAtMTE0LDcgKzkyLDcgQEAKICN1bmRlZiBIQVZFX1NDSEVEX1NFVEFGRklOSVRZCiAjZW5kaWYKIAotI2lmIGRlZmluZWQoSEFWRV9TWVNfWEFUVFJfSCkgJiYgZGVmaW5lZChfX0dMSUJDX18pCisjaWYgZGVmaW5lZChIQVZFX1NZU19YQVRUUl9IKSAmJiBkZWZpbmVkKF9fR0xJQkNfXykgJiYgIWRlZmluZWQoX19GcmVlQlNEX2tlcm5lbF9fKSAmJiAhZGVmaW5lZChfX0dOVV9fKQogI2RlZmluZSBVU0VfWEFUVFJTCiAjZW5kaWYKIApAQCAtMTMyLDYgKzExMCwxOCBAQAogI2luY2x1ZGUgPGRsZmNuLmg+CiAjZW5kaWYKIAorI2lmZGVmIF9faHB1eAorI2luY2x1ZGUgPHN5cy9tcGN0bC5oPgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fRHJhZ29uRmx5X18pIHx8IFwKKyAgICBkZWZpbmVkKF9fT3BlbkJTRF9fKSAgIHx8IFwKKyAgICBkZWZpbmVkKF9fRnJlZUJTRF9fKSAgIHx8IFwKKyAgICBkZWZpbmVkKF9fTmV0QlNEX18pICAgIHx8IFwKKyAgICBkZWZpbmVkKF9fQVBQTEVfXykKKyNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+CisjZW5kaWYKKwogI2lmIGRlZmluZWQoTVNfV0lORE9XUykKICMgIGRlZmluZSBURVJNU0laRV9VU0VfQ09OSU8KICNlbGlmIGRlZmluZWQoSEFWRV9TWVNfSU9DVExfSCkKQEAgLTE0NiwyOSArMTM2LDE5IEBACiAKIC8qIFZhcmlvdXMgY29tcGlsZXJzIGhhdmUgb25seSBjZXJ0YWluIHBvc2l4IGZ1bmN0aW9ucyAqLwogLyogWFhYIEdvc2ggSSB3aXNoIHRoZXNlIHdlcmUgYWxsIG1vdmVkIGludG8gcHljb25maWcuaCAqLwotI2lmIGRlZmluZWQoUFlDQ19WQUNQUCkgJiYgZGVmaW5lZChQWU9TX09TMikKLSNpbmNsdWRlIDxwcm9jZXNzLmg+Ci0jZWxzZQogI2lmIGRlZmluZWQoX19XQVRDT01DX18pICYmICFkZWZpbmVkKF9fUU5YX18pICAgICAgICAgICAvKiBXYXRjb20gY29tcGlsZXIgKi8KLSNkZWZpbmUgSEFWRV9HRVRDV0QgICAgIDEKICNkZWZpbmUgSEFWRV9PUEVORElSICAgIDEKICNkZWZpbmUgSEFWRV9TWVNURU0gICAgIDEKLSNpZiBkZWZpbmVkKF9fT1MyX18pCi0jZGVmaW5lIEhBVkVfRVhFQ1YgICAgICAxCi0jZGVmaW5lIEhBVkVfV0FJVCAgICAgICAxCi0jZW5kaWYKICNpbmNsdWRlIDxwcm9jZXNzLmg+CiAjZWxzZQogI2lmZGVmIF9fQk9STEFORENfXyAgICAgICAgICAgICAvKiBCb3JsYW5kIGNvbXBpbGVyICovCiAjZGVmaW5lIEhBVkVfRVhFQ1YgICAgICAxCi0jZGVmaW5lIEhBVkVfR0VUQ1dEICAgICAxCiAjZGVmaW5lIEhBVkVfT1BFTkRJUiAgICAxCiAjZGVmaW5lIEhBVkVfUElQRSAgICAgICAxCiAjZGVmaW5lIEhBVkVfU1lTVEVNICAgICAxCiAjZGVmaW5lIEhBVkVfV0FJVCAgICAgICAxCiAjZWxzZQogI2lmZGVmIF9NU0NfVkVSICAgICAgICAgLyogTWljcm9zb2Z0IGNvbXBpbGVyICovCi0jZGVmaW5lIEhBVkVfR0VUQ1dEICAgICAxCiAjZGVmaW5lIEhBVkVfR0VUUFBJRCAgICAxCiAjZGVmaW5lIEhBVkVfR0VUTE9HSU4gICAxCiAjZGVmaW5lIEhBVkVfU1BBV05WICAgICAxCkBAIC0xNzksMTYgKzE1OSwxMiBAQAogI2RlZmluZSBIQVZFX0ZTWU5DICAgICAgMQogI2RlZmluZSBmc3luYyBfY29tbWl0CiAjZWxzZQotI2lmIGRlZmluZWQoUFlPU19PUzIpICYmIGRlZmluZWQoUFlDQ19HQ0MpIHx8IGRlZmluZWQoX19WTVMpCi0vKiBFdmVyeXRoaW5nIG5lZWRlZCBpcyBkZWZpbmVkIGluIFBDL29zMmVteC9weWNvbmZpZy5oIG9yIHZtcy9weWNvbmZpZy5oICovCi0jZWxzZSAgICAgICAgICAgICAgICAgICAvKiBhbGwgb3RoZXIgY29tcGlsZXJzICovCiAvKiBVbml4IGZ1bmN0aW9ucyB0aGF0IHRoZSBjb25maWd1cmUgc2NyaXB0IGRvZXNuJ3QgY2hlY2sgZm9yICovCiAjZGVmaW5lIEhBVkVfRVhFQ1YgICAgICAxCiAjZGVmaW5lIEhBVkVfRk9SSyAgICAgICAxCiAjaWYgZGVmaW5lZChfX1VTTENfXykgJiYgZGVmaW5lZChfX1NDT19WRVJTSU9OX18pICAgICAgIC8qIFNDTyBVREsgQ29tcGlsZXIgKi8KICNkZWZpbmUgSEFWRV9GT1JLMSAgICAgIDEKICNlbmRpZgotI2RlZmluZSBIQVZFX0dFVENXRCAgICAgMQogI2RlZmluZSBIQVZFX0dFVEVHSUQgICAgMQogI2RlZmluZSBIQVZFX0dFVEVVSUQgICAgMQogI2RlZmluZSBIQVZFX0dFVEdJRCAgICAgMQpAQCAtMjAwLDE0ICsxNzYsMTUgQEAKICNkZWZpbmUgSEFWRV9TWVNURU0gICAgIDEKICNkZWZpbmUgSEFWRV9XQUlUICAgICAgIDEKICNkZWZpbmUgSEFWRV9UVFlOQU1FICAgIDEKLSNlbmRpZiAgLyogUFlPU19PUzIgJiYgUFlDQ19HQ0MgJiYgX19WTVMgKi8KICNlbmRpZiAgLyogX01TQ19WRVIgKi8KICNlbmRpZiAgLyogX19CT1JMQU5EQ19fICovCiAjZW5kaWYgIC8qICEgX19XQVRDT01DX18gfHwgX19RTlhfXyAqLwotI2VuZGlmIC8qICEgX19JQk1DX18gKi8KIAogCi0KKy8qW2NsaW5pYyBpbnB1dF0KK21vZHVsZSBvcworW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWRhMzlhM2VlNWU2YjRiMGQgaW5wdXQ9OGNmZjA5NmQxMTMzMjg4Zl0qLwogCiAjaWZuZGVmIF9NU0NfVkVSCiAKQEAgLTMzNSwxMCArMzEyLDYgQEAKICNlbmRpZgogI2VuZGlmIC8qIF9NU0NfVkVSICovCiAKLSNpZiBkZWZpbmVkKFBZQ0NfVkFDUFApICYmIGRlZmluZWQoUFlPU19PUzIpCi0jaW5jbHVkZSA8aW8uaD4KLSNlbmRpZiAvKiBPUzIgKi8KLQogI2lmbmRlZiBNQVhQQVRITEVOCiAjaWYgZGVmaW5lZChQQVRIX01BWCkgJiYgUEFUSF9NQVggPiAxMDI0CiAjZGVmaW5lIE1BWFBBVEhMRU4gUEFUSF9NQVgKQEAgLTM4MCw3ICszNTMsNyBAQAogI3VuZGVmIFNUQVQKICN1bmRlZiBGU1RBVAogI3VuZGVmIFNUUlVDVF9TVEFUCi0jaWYgZGVmaW5lZChNU19XSU42NCkgfHwgZGVmaW5lZChNU19XSU5ET1dTKQorI2lmZGVmIE1TX1dJTkRPV1MKICMgICAgICAgZGVmaW5lIFNUQVQgd2luMzJfc3RhdAogIyAgICAgICBkZWZpbmUgTFNUQVQgd2luMzJfbHN0YXQKICMgICAgICAgZGVmaW5lIEZTVEFUIHdpbjMyX2ZzdGF0CkBAIC00MDMsNiArMzc2LDggQEAKICNlbmRpZgogI2VuZGlmCiAKKyNkZWZpbmUgRFdPUkRfTUFYIDQyOTQ5NjcyOTVVCisKIAogI2lmZGVmIE1TX1dJTkRPV1MKIHN0YXRpYyBpbnQKQEAgLTQzNiwxMTMgKzQxMSwyNDEgQEAKIGludAogX1B5X1VpZF9Db252ZXJ0ZXIoUHlPYmplY3QgKm9iaiwgdm9pZCAqcCkKIHsKKyAgICB1aWRfdCB1aWQ7CisgICAgUHlPYmplY3QgKmluZGV4OwogICAgIGludCBvdmVyZmxvdzsKICAgICBsb25nIHJlc3VsdDsKLSAgICBpZiAoUHlGbG9hdF9DaGVjayhvYmopKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAiaW50ZWdlciBhcmd1bWVudCBleHBlY3RlZCwgZ290IGZsb2F0Iik7CisgICAgdW5zaWduZWQgbG9uZyB1cmVzdWx0OworCisgICAgaW5kZXggPSBQeU51bWJlcl9JbmRleChvYmopOworICAgIGlmIChpbmRleCA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAidWlkIHNob3VsZCBiZSBpbnRlZ2VyLCBub3QgJS4yMDBzIiwKKyAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUob2JqKS0+dHBfbmFtZSk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICByZXN1bHQgPSBQeUxvbmdfQXNMb25nQW5kT3ZlcmZsb3cob2JqLCAmb3ZlcmZsb3cpOwotICAgIGlmIChvdmVyZmxvdyA8IDApCi0gICAgICAgIGdvdG8gT3ZlcmZsb3dEb3duOwotICAgIGlmICghb3ZlcmZsb3cgJiYgcmVzdWx0ID09IC0xKSB7Ci0gICAgICAgIC8qIGVycm9yIG9yIC0xICovCi0gICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICoodWlkX3QgKilwID0gKHVpZF90KS0xOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgLyogdW5zaWduZWQgdWlkX3QgKi8KLSAgICAgICAgdW5zaWduZWQgbG9uZyB1cmVzdWx0OwotICAgICAgICBpZiAob3ZlcmZsb3cgPiAwKSB7Ci0gICAgICAgICAgICB1cmVzdWx0ID0gUHlMb25nX0FzVW5zaWduZWRMb25nKG9iaik7Ci0gICAgICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgewotICAgICAgICAgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX092ZXJmbG93RXJyb3IpKQotICAgICAgICAgICAgICAgICAgICBnb3RvIE92ZXJmbG93VXA7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoKHVpZF90KXVyZXN1bHQgPT0gKHVpZF90KS0xKQotICAgICAgICAgICAgICAgIGdvdG8gT3ZlcmZsb3dVcDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChyZXN1bHQgPCAwKQotICAgICAgICAgICAgICAgIGdvdG8gT3ZlcmZsb3dEb3duOwotICAgICAgICAgICAgdXJlc3VsdCA9IHJlc3VsdDsKKworICAgIC8qCisgICAgICogSGFuZGxpbmcgdWlkX3QgaXMgY29tcGxpY2F0ZWQgZm9yIHR3byByZWFzb25zOgorICAgICAqICAqIEFsdGhvdWdoIHVpZF90IGlzIChhbHdheXM/KSB1bnNpZ25lZCwgaXQgc3RpbGwKKyAgICAgKiAgICBhY2NlcHRzIC0xLgorICAgICAqICAqIFdlIGRvbid0IGtub3cgaXRzIHNpemUgaW4gYWR2YW5jZS0taXQgbWF5IGJlCisgICAgICogICAgYmlnZ2VyIHRoYW4gYW4gaW50LCBvciBpdCBtYXkgYmUgc21hbGxlciB0aGFuCisgICAgICogICAgYSBsb25nLgorICAgICAqCisgICAgICogU28gYSBiaXQgb2YgZGVmZW5zaXZlIHByb2dyYW1taW5nIGlzIGluIG9yZGVyLgorICAgICAqIFN0YXJ0IHdpdGggaW50ZXJwcmV0aW5nIHRoZSB2YWx1ZSBwYXNzZWQKKyAgICAgKiBpbiBhcyBhIHNpZ25lZCBsb25nIGFuZCBzZWUgaWYgaXQgd29ya3MuCisgICAgICovCisKKyAgICByZXN1bHQgPSBQeUxvbmdfQXNMb25nQW5kT3ZlcmZsb3coaW5kZXgsICZvdmVyZmxvdyk7CisKKyAgICBpZiAoIW92ZXJmbG93KSB7CisgICAgICAgIHVpZCA9ICh1aWRfdClyZXN1bHQ7CisKKyAgICAgICAgaWYgKHJlc3VsdCA9PSAtMSkgeworICAgICAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICAgICAgLyogSXQncyBhIGxlZ2l0aW1hdGUgLTEsIHdlJ3JlIGRvbmUuICovCisgICAgICAgICAgICBnb3RvIHN1Y2Nlc3M7CiAgICAgICAgIH0KKworICAgICAgICAvKiBBbnkgb3RoZXIgbmVnYXRpdmUgbnVtYmVyIGlzIGRpc2FsbG93ZWQuICovCisgICAgICAgIGlmIChyZXN1bHQgPCAwKQorICAgICAgICAgICAgZ290byB1bmRlcmZsb3c7CisKKyAgICAgICAgLyogRW5zdXJlIHRoZSB2YWx1ZSB3YXNuJ3QgdHJ1bmNhdGVkLiAqLwogICAgICAgICBpZiAoc2l6ZW9mKHVpZF90KSA8IHNpemVvZihsb25nKSAmJgotICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpKHVpZF90KXVyZXN1bHQgIT0gdXJlc3VsdCkKLSAgICAgICAgICAgIGdvdG8gT3ZlcmZsb3dVcDsKLSAgICAgICAgKih1aWRfdCAqKXAgPSAodWlkX3QpdXJlc3VsdDsKKyAgICAgICAgICAgIChsb25nKXVpZCAhPSByZXN1bHQpCisgICAgICAgICAgICBnb3RvIHVuZGVyZmxvdzsKKyAgICAgICAgZ290byBzdWNjZXNzOwogICAgIH0KKworICAgIGlmIChvdmVyZmxvdyA8IDApCisgICAgICAgIGdvdG8gdW5kZXJmbG93OworCisgICAgLyoKKyAgICAgKiBPa2F5LCB0aGUgdmFsdWUgb3ZlcmZsb3dlZCBhIHNpZ25lZCBsb25nLiAgSWYgaXQKKyAgICAgKiBmaXRzIGluIGFuICp1bnNpZ25lZCogbG9uZywgaXQgbWF5IHN0aWxsIGJlIG9rYXksCisgICAgICogYXMgdWlkX3QgbWF5IGJlIHVuc2lnbmVkIGxvbmcgb24gdGhpcyBwbGF0Zm9ybS4KKyAgICAgKi8KKyAgICB1cmVzdWx0ID0gUHlMb25nX0FzVW5zaWduZWRMb25nKGluZGV4KTsKKyAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19PdmVyZmxvd0Vycm9yKSkKKyAgICAgICAgICAgIGdvdG8gb3ZlcmZsb3c7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICB1aWQgPSAodWlkX3QpdXJlc3VsdDsKKworICAgIC8qCisgICAgICogSWYgdWlkID09ICh1aWRfdCktMSwgdGhlIHVzZXIgYWN0dWFsbHkgcGFzc2VkIGluIFVMT05HX01BWCwKKyAgICAgKiBidXQgdGhpcyB2YWx1ZSB3b3VsZCBnZXQgaW50ZXJwcmV0ZWQgYXMgKHVpZF90KS0xICBieSBjaG93bgorICAgICAqIGFuZCBpdHMgc2libGluZ3MuICAgVGhhdCdzIG5vdCB3aGF0IHRoZSB1c2VyIG1lYW50ISAgU28gd2UKKyAgICAgKiB0aHJvdyBhbiBvdmVyZmxvdyBleGNlcHRpb24gaW5zdGVhZC4gICAoV2UgYWxyZWFkeQorICAgICAqIGhhbmRsZWQgYSByZWFsIC0xIHdpdGggUHlMb25nX0FzTG9uZ0FuZE92ZXJmbG93KCkgYWJvdmUuKQorICAgICAqLworICAgIGlmICh1aWQgPT0gKHVpZF90KS0xKQorICAgICAgICBnb3RvIG92ZXJmbG93OworCisgICAgLyogRW5zdXJlIHRoZSB2YWx1ZSB3YXNuJ3QgdHJ1bmNhdGVkLiAqLworICAgIGlmIChzaXplb2YodWlkX3QpIDwgc2l6ZW9mKGxvbmcpICYmCisgICAgICAgICh1bnNpZ25lZCBsb25nKXVpZCAhPSB1cmVzdWx0KQorICAgICAgICBnb3RvIG92ZXJmbG93OworICAgIC8qIGZhbGx0aHJvdWdoICovCisKK3N1Y2Nlc3M6CisgICAgUHlfREVDUkVGKGluZGV4KTsKKyAgICAqKHVpZF90ICopcCA9IHVpZDsKICAgICByZXR1cm4gMTsKIAotT3ZlcmZsb3dEb3duOgordW5kZXJmbG93OgogICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAotICAgICAgICAgICAgICAgICAgICAidXNlciBpZCBpcyBsZXNzIHRoYW4gbWluaW11bSIpOwotICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgICAgICAidWlkIGlzIGxlc3MgdGhhbiBtaW5pbXVtIik7CisgICAgZ290byBmYWlsOwogCi1PdmVyZmxvd1VwOgorb3ZlcmZsb3c6CiAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICJ1c2VyIGlkIGlzIGdyZWF0ZXIgdGhhbiBtYXhpbXVtIik7CisgICAgICAgICAgICAgICAgICAgICJ1aWQgaXMgZ3JlYXRlciB0aGFuIG1heGltdW0iKTsKKyAgICAvKiBmYWxsdGhyb3VnaCAqLworCitmYWlsOgorICAgIFB5X0RFQ1JFRihpbmRleCk7CiAgICAgcmV0dXJuIDA7CiB9CiAKIGludAogX1B5X0dpZF9Db252ZXJ0ZXIoUHlPYmplY3QgKm9iaiwgdm9pZCAqcCkKIHsKKyAgICBnaWRfdCBnaWQ7CisgICAgUHlPYmplY3QgKmluZGV4OwogICAgIGludCBvdmVyZmxvdzsKICAgICBsb25nIHJlc3VsdDsKLSAgICBpZiAoUHlGbG9hdF9DaGVjayhvYmopKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAiaW50ZWdlciBhcmd1bWVudCBleHBlY3RlZCwgZ290IGZsb2F0Iik7CisgICAgdW5zaWduZWQgbG9uZyB1cmVzdWx0OworCisgICAgaW5kZXggPSBQeU51bWJlcl9JbmRleChvYmopOworICAgIGlmIChpbmRleCA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAiZ2lkIHNob3VsZCBiZSBpbnRlZ2VyLCBub3QgJS4yMDBzIiwKKyAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUob2JqKS0+dHBfbmFtZSk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICByZXN1bHQgPSBQeUxvbmdfQXNMb25nQW5kT3ZlcmZsb3cob2JqLCAmb3ZlcmZsb3cpOwotICAgIGlmIChvdmVyZmxvdyA8IDApCi0gICAgICAgIGdvdG8gT3ZlcmZsb3dEb3duOwotICAgIGlmICghb3ZlcmZsb3cgJiYgcmVzdWx0ID09IC0xKSB7Ci0gICAgICAgIC8qIGVycm9yIG9yIC0xICovCi0gICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICooZ2lkX3QgKilwID0gKGdpZF90KS0xOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgLyogdW5zaWduZWQgZ2lkX3QgKi8KLSAgICAgICAgdW5zaWduZWQgbG9uZyB1cmVzdWx0OwotICAgICAgICBpZiAob3ZlcmZsb3cgPiAwKSB7Ci0gICAgICAgICAgICB1cmVzdWx0ID0gUHlMb25nX0FzVW5zaWduZWRMb25nKG9iaik7Ci0gICAgICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgewotICAgICAgICAgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX092ZXJmbG93RXJyb3IpKQotICAgICAgICAgICAgICAgICAgICBnb3RvIE92ZXJmbG93VXA7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoKGdpZF90KXVyZXN1bHQgPT0gKGdpZF90KS0xKQotICAgICAgICAgICAgICAgIGdvdG8gT3ZlcmZsb3dVcDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChyZXN1bHQgPCAwKQotICAgICAgICAgICAgICAgIGdvdG8gT3ZlcmZsb3dEb3duOwotICAgICAgICAgICAgdXJlc3VsdCA9IHJlc3VsdDsKKworICAgIC8qCisgICAgICogSGFuZGxpbmcgZ2lkX3QgaXMgY29tcGxpY2F0ZWQgZm9yIHR3byByZWFzb25zOgorICAgICAqICAqIEFsdGhvdWdoIGdpZF90IGlzIChhbHdheXM/KSB1bnNpZ25lZCwgaXQgc3RpbGwKKyAgICAgKiAgICBhY2NlcHRzIC0xLgorICAgICAqICAqIFdlIGRvbid0IGtub3cgaXRzIHNpemUgaW4gYWR2YW5jZS0taXQgbWF5IGJlCisgICAgICogICAgYmlnZ2VyIHRoYW4gYW4gaW50LCBvciBpdCBtYXkgYmUgc21hbGxlciB0aGFuCisgICAgICogICAgYSBsb25nLgorICAgICAqCisgICAgICogU28gYSBiaXQgb2YgZGVmZW5zaXZlIHByb2dyYW1taW5nIGlzIGluIG9yZGVyLgorICAgICAqIFN0YXJ0IHdpdGggaW50ZXJwcmV0aW5nIHRoZSB2YWx1ZSBwYXNzZWQKKyAgICAgKiBpbiBhcyBhIHNpZ25lZCBsb25nIGFuZCBzZWUgaWYgaXQgd29ya3MuCisgICAgICovCisKKyAgICByZXN1bHQgPSBQeUxvbmdfQXNMb25nQW5kT3ZlcmZsb3coaW5kZXgsICZvdmVyZmxvdyk7CisKKyAgICBpZiAoIW92ZXJmbG93KSB7CisgICAgICAgIGdpZCA9IChnaWRfdClyZXN1bHQ7CisKKyAgICAgICAgaWYgKHJlc3VsdCA9PSAtMSkgeworICAgICAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICAgICAgLyogSXQncyBhIGxlZ2l0aW1hdGUgLTEsIHdlJ3JlIGRvbmUuICovCisgICAgICAgICAgICBnb3RvIHN1Y2Nlc3M7CiAgICAgICAgIH0KKworICAgICAgICAvKiBBbnkgb3RoZXIgbmVnYXRpdmUgbnVtYmVyIGlzIGRpc2FsbG93ZWQuICovCisgICAgICAgIGlmIChyZXN1bHQgPCAwKSB7CisgICAgICAgICAgICBnb3RvIHVuZGVyZmxvdzsKKyAgICAgICAgfQorCisgICAgICAgIC8qIEVuc3VyZSB0aGUgdmFsdWUgd2Fzbid0IHRydW5jYXRlZC4gKi8KICAgICAgICAgaWYgKHNpemVvZihnaWRfdCkgPCBzaXplb2YobG9uZykgJiYKLSAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKShnaWRfdCl1cmVzdWx0ICE9IHVyZXN1bHQpCi0gICAgICAgICAgICBnb3RvIE92ZXJmbG93VXA7Ci0gICAgICAgICooZ2lkX3QgKilwID0gKGdpZF90KXVyZXN1bHQ7CisgICAgICAgICAgICAobG9uZylnaWQgIT0gcmVzdWx0KQorICAgICAgICAgICAgZ290byB1bmRlcmZsb3c7CisgICAgICAgIGdvdG8gc3VjY2VzczsKICAgICB9CisKKyAgICBpZiAob3ZlcmZsb3cgPCAwKQorICAgICAgICBnb3RvIHVuZGVyZmxvdzsKKworICAgIC8qCisgICAgICogT2theSwgdGhlIHZhbHVlIG92ZXJmbG93ZWQgYSBzaWduZWQgbG9uZy4gIElmIGl0CisgICAgICogZml0cyBpbiBhbiAqdW5zaWduZWQqIGxvbmcsIGl0IG1heSBzdGlsbCBiZSBva2F5LAorICAgICAqIGFzIGdpZF90IG1heSBiZSB1bnNpZ25lZCBsb25nIG9uIHRoaXMgcGxhdGZvcm0uCisgICAgICovCisgICAgdXJlc3VsdCA9IFB5TG9uZ19Bc1Vuc2lnbmVkTG9uZyhpbmRleCk7CisgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfT3ZlcmZsb3dFcnJvcikpCisgICAgICAgICAgICBnb3RvIG92ZXJmbG93OworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgZ2lkID0gKGdpZF90KXVyZXN1bHQ7CisKKyAgICAvKgorICAgICAqIElmIGdpZCA9PSAoZ2lkX3QpLTEsIHRoZSB1c2VyIGFjdHVhbGx5IHBhc3NlZCBpbiBVTE9OR19NQVgsCisgICAgICogYnV0IHRoaXMgdmFsdWUgd291bGQgZ2V0IGludGVycHJldGVkIGFzIChnaWRfdCktMSAgYnkgY2hvd24KKyAgICAgKiBhbmQgaXRzIHNpYmxpbmdzLiAgIFRoYXQncyBub3Qgd2hhdCB0aGUgdXNlciBtZWFudCEgIFNvIHdlCisgICAgICogdGhyb3cgYW4gb3ZlcmZsb3cgZXhjZXB0aW9uIGluc3RlYWQuICAgKFdlIGFscmVhZHkKKyAgICAgKiBoYW5kbGVkIGEgcmVhbCAtMSB3aXRoIFB5TG9uZ19Bc0xvbmdBbmRPdmVyZmxvdygpIGFib3ZlLikKKyAgICAgKi8KKyAgICBpZiAoZ2lkID09IChnaWRfdCktMSkKKyAgICAgICAgZ290byBvdmVyZmxvdzsKKworICAgIC8qIEVuc3VyZSB0aGUgdmFsdWUgd2Fzbid0IHRydW5jYXRlZC4gKi8KKyAgICBpZiAoc2l6ZW9mKGdpZF90KSA8IHNpemVvZihsb25nKSAmJgorICAgICAgICAodW5zaWduZWQgbG9uZylnaWQgIT0gdXJlc3VsdCkKKyAgICAgICAgZ290byBvdmVyZmxvdzsKKyAgICAvKiBmYWxsdGhyb3VnaCAqLworCitzdWNjZXNzOgorICAgIFB5X0RFQ1JFRihpbmRleCk7CisgICAgKihnaWRfdCAqKXAgPSBnaWQ7CiAgICAgcmV0dXJuIDE7CiAKLU92ZXJmbG93RG93bjoKK3VuZGVyZmxvdzoKICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgImdyb3VwIGlkIGlzIGxlc3MgdGhhbiBtaW5pbXVtIik7Ci0gICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgICAgICJnaWQgaXMgbGVzcyB0aGFuIG1pbmltdW0iKTsKKyAgICBnb3RvIGZhaWw7CiAKLU92ZXJmbG93VXA6CitvdmVyZmxvdzoKICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgImdyb3VwIGlkIGlzIGdyZWF0ZXIgdGhhbiBtYXhpbXVtIik7CisgICAgICAgICAgICAgICAgICAgICJnaWQgaXMgZ3JlYXRlciB0aGFuIG1heGltdW0iKTsKKyAgICAvKiBmYWxsdGhyb3VnaCAqLworCitmYWlsOgorICAgIFB5X0RFQ1JFRihpbmRleCk7CiAgICAgcmV0dXJuIDA7CiB9CiAjZW5kaWYgLyogTVNfV0lORE9XUyAqLwogCiAKKyNpZmRlZiBIQVZFX0xPTkdfTE9ORworIyAgZGVmaW5lIF9QeUxvbmdfRnJvbURldiBQeUxvbmdfRnJvbUxvbmdMb25nCisjZWxzZQorIyAgZGVmaW5lIF9QeUxvbmdfRnJvbURldiBQeUxvbmdfRnJvbUxvbmcKKyNlbmRpZgorCisKKyNpZiBkZWZpbmVkKEhBVkVfTUtOT0QpICYmIGRlZmluZWQoSEFWRV9NQUtFREVWKQorc3RhdGljIGludAorX1B5X0Rldl9Db252ZXJ0ZXIoUHlPYmplY3QgKm9iaiwgdm9pZCAqcCkKK3sKKyNpZmRlZiBIQVZFX0xPTkdfTE9ORworICAgICooKGRldl90ICopcCkgPSBQeUxvbmdfQXNVbnNpZ25lZExvbmdMb25nKG9iaik7CisjZWxzZQorICAgICooKGRldl90ICopcCkgPSBQeUxvbmdfQXNVbnNpZ25lZExvbmcob2JqKTsKKyNlbmRpZgorICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gMTsKK30KKyNlbmRpZiAvKiBIQVZFX01LTk9EICYmIEhBVkVfTUFLRURFViAqLworCisKICNpZmRlZiBBVF9GRENXRAogLyoKICAqIFdoeSB0aGUgKGludCkgY2FzdD8gIFNvbGFyaXMgMTAgZGVmaW5lcyBBVF9GRENXRCBhcyAweGZmZDE5NTUzICgtMzA0MTk2NSk7CkBAIC01NjAsMjUgKzY2MywyOSBAQAogX2ZkX2NvbnZlcnRlcihQeU9iamVjdCAqbywgaW50ICpwLCBjb25zdCBjaGFyICphbGxvd2VkKQogewogICAgIGludCBvdmVyZmxvdzsKLSAgICBsb25nIGxvbmdfdmFsdWUgPSBQeUxvbmdfQXNMb25nQW5kT3ZlcmZsb3cobywgJm92ZXJmbG93KTsKLSAgICBpZiAoUHlGbG9hdF9DaGVjayhvKSB8fAotICAgICAgICAobG9uZ192YWx1ZSA9PSAtMSAmJiAhb3ZlcmZsb3cgJiYgUHlFcnJfT2NjdXJyZWQoKSkpIHsKLSAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICBsb25nIGxvbmdfdmFsdWU7CisKKyAgICBQeU9iamVjdCAqaW5kZXggPSBQeU51bWJlcl9JbmRleChvKTsKKyAgICBpZiAoaW5kZXggPT0gTlVMTCkgewogICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgImFyZ3VtZW50IHNob3VsZCBiZSAlcywgbm90ICUuMjAwcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICBhbGxvd2VkLCBQeV9UWVBFKG8pLT50cF9uYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICJhcmd1bWVudCBzaG91bGQgYmUgJXMsIG5vdCAlLjIwMHMiLAorICAgICAgICAgICAgICAgICAgICAgYWxsb3dlZCwgUHlfVFlQRShvKS0+dHBfbmFtZSk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KKworICAgIGxvbmdfdmFsdWUgPSBQeUxvbmdfQXNMb25nQW5kT3ZlcmZsb3coaW5kZXgsICZvdmVyZmxvdyk7CisgICAgUHlfREVDUkVGKGluZGV4KTsKICAgICBpZiAob3ZlcmZsb3cgPiAwIHx8IGxvbmdfdmFsdWUgPiBJTlRfTUFYKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgInNpZ25lZCBpbnRlZ2VyIGlzIGdyZWF0ZXIgdGhhbiBtYXhpbXVtIik7CisgICAgICAgICAgICAgICAgICAgICAgICAiZmQgaXMgZ3JlYXRlciB0aGFuIG1heGltdW0iKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIGlmIChvdmVyZmxvdyA8IDAgfHwgbG9uZ192YWx1ZSA8IElOVF9NSU4pIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAic2lnbmVkIGludGVnZXIgaXMgbGVzcyB0aGFuIG1pbmltdW0iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICJmZCBpcyBsZXNzIHRoYW4gbWluaW11bSIpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CisKICAgICAqcCA9IChpbnQpbG9uZ192YWx1ZTsKICAgICByZXR1cm4gMTsKIH0KQEAgLTYyNiw3ICs3MzMsNyBAQAogICogICBwYXRoLmZ1bmN0aW9uX25hbWUKICAqICAgICBJZiBub24tTlVMTCwgcGF0aF9jb252ZXJ0ZXIgd2lsbCB1c2UgdGhhdCBhcyB0aGUgbmFtZQogICogICAgIG9mIHRoZSBmdW5jdGlvbiBpbiBlcnJvciBtZXNzYWdlcy4KLSAqICAgICAoSWYgcGF0aC5hcmd1bWVudF9uYW1lIGlzIE5VTEwgaXQgb21pdHMgdGhlIGZ1bmN0aW9uIG5hbWUuKQorICogICAgIChJZiBwYXRoLmZ1bmN0aW9uX25hbWUgaXMgTlVMTCBpdCBvbWl0cyB0aGUgZnVuY3Rpb24gbmFtZS4pCiAgKiAgIHBhdGguYXJndW1lbnRfbmFtZQogICogICAgIElmIG5vbi1OVUxMLCBwYXRoX2NvbnZlcnRlciB3aWxsIHVzZSB0aGF0IGFzIHRoZSBuYW1lCiAgKiAgICAgb2YgdGhlIHBhcmFtZXRlciBpbiBlcnJvciBtZXNzYWdlcy4KQEAgLTY3OCw4ICs3ODUsOCBAQAogICogcGF0aF9jbGVhbnVwKCkuICBIb3dldmVyIGl0IGlzIHNhZmUgdG8gZG8gc28uKQogICovCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgY2hhciAqZnVuY3Rpb25fbmFtZTsKLSAgICBjaGFyICphcmd1bWVudF9uYW1lOworICAgIGNvbnN0IGNoYXIgKmZ1bmN0aW9uX25hbWU7CisgICAgY29uc3QgY2hhciAqYXJndW1lbnRfbmFtZTsKICAgICBpbnQgbnVsbGFibGU7CiAgICAgaW50IGFsbG93X2ZkOwogICAgIHdjaGFyX3QgKndpZGU7CkBAIC02OTAsNiArNzk3LDkgQEAKICAgICBQeU9iamVjdCAqY2xlYW51cDsKIH0gcGF0aF90OwogCisjZGVmaW5lIFBBVEhfVF9JTklUSUFMSVpFKGZ1bmN0aW9uX25hbWUsIG51bGxhYmxlLCBhbGxvd19mZCkgXAorICAgIHtmdW5jdGlvbl9uYW1lLCBOVUxMLCBudWxsYWJsZSwgYWxsb3dfZmQsIE5VTEwsIE5VTEwsIDAsIDAsIE5VTEwsIE5VTEx9CisKIHN0YXRpYyB2b2lkCiBwYXRoX2NsZWFudXAocGF0aF90ICpwYXRoKSB7CiAgICAgaWYgKHBhdGgtPmNsZWFudXApIHsKQEAgLTczNywxNSArODQ3LDE5IEBACiAgICAgaWYgKHVuaWNvZGUpIHsKICNpZmRlZiBNU19XSU5ET1dTCiAgICAgICAgIHdjaGFyX3QgKndpZGU7Ci0gICAgICAgIGxlbmd0aCA9IFB5VW5pY29kZV9HRVRfU0laRSh1bmljb2RlKTsKKworICAgICAgICB3aWRlID0gUHlVbmljb2RlX0FzVW5pY29kZUFuZFNpemUodW5pY29kZSwgJmxlbmd0aCk7CisgICAgICAgIGlmICghd2lkZSkgeworICAgICAgICAgICAgUHlfREVDUkVGKHVuaWNvZGUpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KICAgICAgICAgaWYgKGxlbmd0aCA+IDMyNzY3KSB7CiAgICAgICAgICAgICBGT1JNQVRfRVhDRVBUSU9OKFB5RXhjX1ZhbHVlRXJyb3IsICIlcyB0b28gbG9uZyBmb3IgV2luZG93cyIpOwogICAgICAgICAgICAgUHlfREVDUkVGKHVuaWNvZGUpOwogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KLQotICAgICAgICB3aWRlID0gUHlVbmljb2RlX0FzVW5pY29kZSh1bmljb2RlKTsKLSAgICAgICAgaWYgKCF3aWRlKSB7CisgICAgICAgIGlmICh3Y3NsZW4od2lkZSkgIT0gbGVuZ3RoKSB7CisgICAgICAgICAgICBGT1JNQVRfRVhDRVBUSU9OKFB5RXhjX1R5cGVFcnJvciwgImVtYmVkZGVkIG51bGwgY2hhcmFjdGVyIik7CiAgICAgICAgICAgICBQeV9ERUNSRUYodW5pY29kZSk7CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQpAQCAtODAzLDcgKzkxNyw3IEBACiAKICAgICBsZW5ndGggPSBQeUJ5dGVzX0dFVF9TSVpFKGJ5dGVzKTsKICNpZmRlZiBNU19XSU5ET1dTCi0gICAgaWYgKGxlbmd0aCA+IE1BWF9QQVRIKSB7CisgICAgaWYgKGxlbmd0aCA+IE1BWF9QQVRILTEpIHsKICAgICAgICAgRk9STUFUX0VYQ0VQVElPTihQeUV4Y19WYWx1ZUVycm9yLCAiJXMgdG9vIGxvbmcgZm9yIFdpbmRvd3MiKTsKICAgICAgICAgUHlfREVDUkVGKGJ5dGVzKTsKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xMTA0LDEwICsxMjE4LDYgQEAKICNlbHNlCiAgICAgY2hhciAqKmU7CiAjZW5kaWYKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKQotICAgIEFQSVJFVCByYzsKLSAgICBjaGFyICAgYnVmZmVyWzEwMjRdOyAvKiBPUy8yIFByb3ZpZGVzIGEgRG9jdW1lbnRlZCBNYXggb2YgMTAyNCBDaGFycyAqLwotI2VuZGlmCiAKICAgICBkID0gUHlEaWN0X05ldygpOwogICAgIGlmIChkID09IE5VTEwpCkBAIC0xMTc2LDIwICsxMjg2LDYgQEAKICAgICAgICAgUHlfREVDUkVGKHYpOwogICAgIH0KICNlbmRpZgotI2lmIGRlZmluZWQoUFlPU19PUzIpCi0gICAgcmMgPSBEb3NRdWVyeUV4dExJQlBBVEgoYnVmZmVyLCBCRUdJTl9MSUJQQVRIKTsKLSAgICBpZiAocmMgPT0gTk9fRVJST1IpIHsgLyogKG5vdCBhIHR5cGUsIGVudm5hbWUgaXMgTk9UICdCRUdJTl9MSUJQQVRIJykgKi8KLSAgICAgICAgUHlPYmplY3QgKnYgPSBQeUJ5dGVzX0Zyb21TdHJpbmcoYnVmZmVyKTsKLSAgICAgICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgIkJFR0lOTElCUEFUSCIsIHYpOwotICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgfQotICAgIHJjID0gRG9zUXVlcnlFeHRMSUJQQVRIKGJ1ZmZlciwgRU5EX0xJQlBBVEgpOwotICAgIGlmIChyYyA9PSBOT19FUlJPUikgeyAvKiAobm90IGEgdHlwbywgZW52bmFtZSBpcyBOT1QgJ0VORF9MSUJQQVRIJykgKi8KLSAgICAgICAgUHlPYmplY3QgKnYgPSBQeUJ5dGVzX0Zyb21TdHJpbmcoYnVmZmVyKTsKLSAgICAgICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgIkVORExJQlBBVEgiLCB2KTsKLSAgICAgICAgUHlfREVDUkVGKHYpOwotICAgIH0KLSNlbmRpZgogICAgIHJldHVybiBkOwogfQogCkBAIC0xMjAwLDI1ICsxMjk2LDYgQEAKIHsKICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOwogfQotc3RhdGljIFB5T2JqZWN0ICoKLXBvc2l4X2Vycm9yX3dpdGhfZmlsZW5hbWUoY2hhciogbmFtZSkKLXsKLSAgICByZXR1cm4gUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lKFB5RXhjX09TRXJyb3IsIG5hbWUpOwotfQotCi0KLXN0YXRpYyBQeU9iamVjdCAqCi1wb3NpeF9lcnJvcl93aXRoX2FsbG9jYXRlZF9maWxlbmFtZShQeU9iamVjdCogbmFtZSkKLXsKLSAgICBQeU9iamVjdCAqbmFtZV9zdHIsICpyYzsKLSAgICBuYW1lX3N0ciA9IFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHRBbmRTaXplKFB5Qnl0ZXNfQXNTdHJpbmcobmFtZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUJ5dGVzX0dFVF9TSVpFKG5hbWUpKTsKLSAgICBQeV9ERUNSRUYobmFtZSk7Ci0gICAgcmMgPSBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWVPYmplY3QoUHlFeGNfT1NFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lX3N0cik7Ci0gICAgUHlfWERFQ1JFRihuYW1lX3N0cik7Ci0gICAgcmV0dXJuIHJjOwotfQogCiAjaWZkZWYgTVNfV0lORE9XUwogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTEyMzcsMjQgKzEzMTQsMTMgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKLXdpbjMyX2Vycm9yX3VuaWNvZGUoY2hhciogZnVuY3Rpb24sIHdjaGFyX3QqIGZpbGVuYW1lKQotewotICAgIC8qIFhYWCAtIHNlZSB3aW4zMl9lcnJvciBmb3IgY29tbWVudHMgb24gJ2Z1bmN0aW9uJyAqLwotICAgIGVycm5vID0gR2V0TGFzdEVycm9yKCk7Ci0gICAgaWYgKGZpbGVuYW1lKQotICAgICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnJXaXRoVW5pY29kZUZpbGVuYW1lKGVycm5vLCBmaWxlbmFtZSk7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoZXJybm8pOwotfQotCi1zdGF0aWMgUHlPYmplY3QgKgogd2luMzJfZXJyb3Jfb2JqZWN0KGNoYXIqIGZ1bmN0aW9uLCBQeU9iamVjdCogZmlsZW5hbWUpCiB7CiAgICAgLyogWFhYIC0gc2VlIHdpbjMyX2Vycm9yIGZvciBjb21tZW50cyBvbiAnZnVuY3Rpb24nICovCiAgICAgZXJybm8gPSBHZXRMYXN0RXJyb3IoKTsKICAgICBpZiAoZmlsZW5hbWUpCiAgICAgICAgIHJldHVybiBQeUVycl9TZXRFeGNGcm9tV2luZG93c0VycldpdGhGaWxlbmFtZU9iamVjdCgKLSAgICAgICAgICAgICAgICAgICAgUHlFeGNfV2luZG93c0Vycm9yLAorICAgICAgICAgICAgICAgICAgICBQeUV4Y19PU0Vycm9yLAogICAgICAgICAgICAgICAgICAgICBlcnJubywKICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUpOwogICAgIGVsc2UKQEAgLTEyNjMsMTA4ICsxMzI5LDMwIEBACiAKICNlbmRpZiAvKiBNU19XSU5ET1dTICovCiAKLS8qCi0gKiBTb21lIGZ1bmN0aW9ucyByZXR1cm4gV2luMzIgZXJyb3JzLCBvdGhlcnMgb25seSBldmVyIHVzZSBwb3NpeF9lcnJvcgotICogKHRoaXMgaXMgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggZXhjZXB0aW9ucykKLSAqLwogc3RhdGljIFB5T2JqZWN0ICoKLXBhdGhfcG9zaXhfZXJyb3IoY2hhciAqZnVuY3Rpb25fbmFtZSwgcGF0aF90ICpwYXRoKQotewotICAgIGlmIChwYXRoLT5uYXJyb3cpCi0gICAgICAgIHJldHVybiBwb3NpeF9lcnJvcl93aXRoX2ZpbGVuYW1lKHBhdGgtPm5hcnJvdyk7Ci0gICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7Ci19Ci0KLXN0YXRpYyBQeU9iamVjdCAqCi1wYXRoX2Vycm9yKGNoYXIgKmZ1bmN0aW9uX25hbWUsIHBhdGhfdCAqcGF0aCkKK3BhdGhfZXJyb3IocGF0aF90ICpwYXRoKQogewogI2lmZGVmIE1TX1dJTkRPV1MKLSAgICBpZiAocGF0aC0+bmFycm93KQotICAgICAgICByZXR1cm4gd2luMzJfZXJyb3IoZnVuY3Rpb25fbmFtZSwgcGF0aC0+bmFycm93KTsKLSAgICBpZiAocGF0aC0+d2lkZSkKLSAgICAgICAgcmV0dXJuIHdpbjMyX2Vycm9yX3VuaWNvZGUoZnVuY3Rpb25fbmFtZSwgcGF0aC0+d2lkZSk7Ci0gICAgcmV0dXJuIHdpbjMyX2Vycm9yKGZ1bmN0aW9uX25hbWUsIE5VTEwpOworICAgIHJldHVybiBQeUVycl9TZXRFeGNGcm9tV2luZG93c0VycldpdGhGaWxlbmFtZU9iamVjdChQeUV4Y19PU0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBwYXRoLT5vYmplY3QpOwogI2Vsc2UKLSAgICByZXR1cm4gcGF0aF9wb3NpeF9lcnJvcihmdW5jdGlvbl9uYW1lLCBwYXRoKTsKKyAgICByZXR1cm4gUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lT2JqZWN0KFB5RXhjX09TRXJyb3IsIHBhdGgtPm9iamVjdCk7CiAjZW5kaWYKIH0KIAotI2lmIGRlZmluZWQoUFlPU19PUzIpCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICBIZWxwZXIgRnVuY3Rpb24gdG8gVHJpbSBhbmQgRm9ybWF0IE9TLzIgTWVzc2FnZXMKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIHZvaWQKLW9zMl9mb3JtYXRtc2coY2hhciAqbXNnYnVmLCBpbnQgbXNnbGVuLCBjaGFyICpyZWFzb24pCi17Ci0gICAgbXNnYnVmW21zZ2xlbl0gPSAnXDAnOyAvKiBPUy8yIERvZXNuJ3QgR3VhcmFudGVlIGEgVGVybWluYXRvciAqLwotCi0gICAgaWYgKHN0cmxlbihtc2didWYpID4gMCkgeyAvKiBJZiBOb24tRW1wdHkgTXNnLCBUcmltIENSTEYgKi8KLSAgICAgICAgY2hhciAqbGFzdGMgPSAmbXNnYnVmWyBzdHJsZW4obXNnYnVmKS0xIF07Ci0KLSAgICAgICAgd2hpbGUgKGxhc3RjID4gbXNnYnVmICYmIFB5X0lTU1BBQ0UoUHlfQ0hBUk1BU0soKmxhc3RjKSkpCi0gICAgICAgICAgICAqbGFzdGMtLSA9ICdcMCc7IC8qIFRyaW0gVHJhaWxpbmcgV2hpdGVzcGFjZSAoQ1JMRikgKi8KLSAgICB9Ci0KLSAgICAvKiBBZGQgT3B0aW9uYWwgUmVhc29uIFRleHQgKi8KLSAgICBpZiAocmVhc29uKSB7Ci0gICAgICAgIHN0cmNhdChtc2didWYsICIgOiAiKTsKLSAgICAgICAgc3RyY2F0KG1zZ2J1ZiwgcmVhc29uKTsKLSAgICB9Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgICBEZWNvZGUgYW4gT1MvMiBPcGVyYXRpbmcgU3lzdGVtIEVycm9yIENvZGUKLSAqCi0gKiBBIGNvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIGxvb2t1cCBhbiBPUy8yIGVycm9yIGNvZGUgYW5kIHJldHVybiBhCi0gKiB0ZXh0IG1lc3NhZ2Ugd2UgY2FuIHVzZSB0byByYWlzZSBhIFB5dGhvbiBleGNlcHRpb24uCi0gKgotICogTm90ZXM6Ci0gKiAgIFRoZSBtZXNzYWdlcyBmb3IgZXJyb3JzIHJldHVybmVkIGZyb20gdGhlIE9TLzIga2VybmVsIHJlc2lkZSBpbgotICogICB0aGUgZmlsZSBPU08wMDEuTVNHIGluIHRoZSBcT1MyIGRpcmVjdG9yeSBoaWVyYXJjaHkuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgY2hhciAqCi1vczJfc3RyZXJyb3IoY2hhciAqbXNnYnVmLCBpbnQgbXNnYnVmbGVuLCBpbnQgZXJyb3Jjb2RlLCBjaGFyICpyZWFzb24pCi17Ci0gICAgQVBJUkVUIHJjOwotICAgIFVMT05HICBtc2dsZW47Ci0KLSAgICAvKiBSZXRyaWV2ZSBLZXJuZWwtUmVsYXRlZCBFcnJvciBNZXNzYWdlIGZyb20gT1NPMDAxLk1TRyBGaWxlICovCi0gICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgIHJjID0gRG9zR2V0TWVzc2FnZShOVUxMLCAwLCBtc2didWYsIG1zZ2J1ZmxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgZXJyb3Jjb2RlLCAib3NvMDAxLm1zZyIsICZtc2dsZW4pOwotICAgIFB5X0VORF9BTExPV19USFJFQURTCi0KLSAgICBpZiAocmMgPT0gTk9fRVJST1IpCi0gICAgICAgIG9zMl9mb3JtYXRtc2cobXNnYnVmLCBtc2dsZW4sIHJlYXNvbik7Ci0gICAgZWxzZQotICAgICAgICBQeU9TX3NucHJpbnRmKG1zZ2J1ZiwgbXNnYnVmbGVuLAotICAgICAgICAgICAgICAgICAgICAgICJ1bmtub3duIE9TIGVycm9yICMlZCIsIGVycm9yY29kZSk7Ci0KLSAgICByZXR1cm4gbXNnYnVmOwotfQotCi0vKiBTZXQgYW4gT1MvMi1zcGVjaWZpYyBlcnJvciBhbmQgcmV0dXJuIE5VTEwuICBPUy8yIGtlcm5lbAotICAgZXJyb3JzIGFyZSBub3QgaW4gYSBnbG9iYWwgdmFyaWFibGUgZS5nLiAnZXJybm8nIG5vciBhcmUKLSAgIHRoZXkgY29uZ3J1ZW50IHdpdGggcG9zaXggZXJyb3IgbnVtYmVycy4gKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLW9zMl9lcnJvcihpbnQgY29kZSkKK3BhdGhfZXJyb3IyKHBhdGhfdCAqcGF0aCwgcGF0aF90ICpwYXRoMikKIHsKLSAgICBjaGFyIHRleHRbMTAyNF07Ci0gICAgUHlPYmplY3QgKnY7Ci0KLSAgICBvczJfc3RyZXJyb3IodGV4dCwgc2l6ZW9mKHRleHQpLCBjb2RlLCAiIik7Ci0KLSAgICB2ID0gUHlfQnVpbGRWYWx1ZSgiKGlzKSIsIGNvZGUsIHRleHQpOwotICAgIGlmICh2ICE9IE5VTEwpIHsKLSAgICAgICAgUHlFcnJfU2V0T2JqZWN0KFB5RXhjX09TRXJyb3IsIHYpOwotICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgfQotICAgIHJldHVybiBOVUxMOyAvKiBTaWduYWwgdG8gUHl0aG9uIHRoYXQgYW4gRXhjZXB0aW9uIGlzIFBlbmRpbmcgKi8KKyNpZmRlZiBNU19XSU5ET1dTCisgICAgcmV0dXJuIFB5RXJyX1NldEV4Y0Zyb21XaW5kb3dzRXJyV2l0aEZpbGVuYW1lT2JqZWN0cyhQeUV4Y19PU0Vycm9yLAorICAgICAgICAgICAgMCwgcGF0aC0+b2JqZWN0LCBwYXRoMi0+b2JqZWN0KTsKKyNlbHNlCisgICAgcmV0dXJuIFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZU9iamVjdHMoUHlFeGNfT1NFcnJvciwKKyAgICAgICAgcGF0aC0+b2JqZWN0LCBwYXRoMi0+b2JqZWN0KTsKKyNlbmRpZgogfQogCi0jZW5kaWYgLyogT1MyICovCiAKIC8qIFBPU0lYIGdlbmVyaWMgbWV0aG9kcyAqLwogCkBAIC0xMzg4LDY1ICsxMzc2LDMxIEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1wb3NpeF8xc3RyKFB5T2JqZWN0ICphcmdzLCBjaGFyICpmb3JtYXQsIGludCAoKmZ1bmMpKGNvbnN0IGNoYXIqKSkKK3Bvc2l4XzFzdHIoY29uc3QgY2hhciAqZnVuY19uYW1lLCBQeU9iamVjdCAqYXJncywgY2hhciAqZm9ybWF0LAorICAgICAgICAgICBpbnQgKCpmdW5jKShjb25zdCBjaGFyKikpCiB7Ci0gICAgUHlPYmplY3QgKm9wYXRoMSA9IE5VTEw7Ci0gICAgY2hhciAqcGF0aDE7CisgICAgcGF0aF90IHBhdGg7CiAgICAgaW50IHJlczsKKyAgICBtZW1zZXQoJnBhdGgsIDAsIHNpemVvZihwYXRoKSk7CisgICAgcGF0aC5mdW5jdGlvbl9uYW1lID0gZnVuY19uYW1lOwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9GU0NvbnZlcnRlciwgJm9wYXRoMSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhfY29udmVydGVyLCAmcGF0aCkpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIHBhdGgxID0gUHlCeXRlc19Bc1N0cmluZyhvcGF0aDEpOwogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICByZXMgPSAoKmZ1bmMpKHBhdGgxKTsKKyAgICByZXMgPSAoKmZ1bmMpKHBhdGgubmFycm93KTsKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotICAgIGlmIChyZXMgPCAwKQotICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3Jfd2l0aF9hbGxvY2F0ZWRfZmlsZW5hbWUob3BhdGgxKTsKLSAgICBQeV9ERUNSRUYob3BhdGgxKTsKKyAgICBpZiAocmVzIDwgMCkgeworICAgICAgICBwYXRoX2Vycm9yKCZwYXRoKTsKKyAgICAgICAgcGF0aF9jbGVhbnVwKCZwYXRoKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHBhdGhfY2xlYW51cCgmcGF0aCk7CiAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwogICAgIHJldHVybiBQeV9Ob25lOwogfQogCiAKICNpZmRlZiBNU19XSU5ET1dTCi1zdGF0aWMgUHlPYmplY3QqCi13aW4zMl8xc3RyKFB5T2JqZWN0KiBhcmdzLCBjaGFyKiBmdW5jLAotICAgICAgICAgICBjaGFyKiBmb3JtYXQsIEJPT0wgKF9fc3RkY2FsbCAqZnVuY0EpKExQQ1NUUiksCi0gICAgICAgICAgIGNoYXIqIHdmb3JtYXQsIEJPT0wgKF9fc3RkY2FsbCAqZnVuY1cpKExQV1NUUikpCi17Ci0gICAgUHlPYmplY3QgKnVuaTsKLSAgICBjb25zdCBjaGFyICphbnNpOwotICAgIEJPT0wgcmVzdWx0OwotCi0gICAgaWYgKFB5QXJnX1BhcnNlVHVwbGUoYXJncywgd2Zvcm1hdCwgJnVuaSkpCi0gICAgewotICAgICAgICB3Y2hhcl90ICp3c3RyID0gUHlVbmljb2RlX0FzVW5pY29kZSh1bmkpOwotICAgICAgICBpZiAod3N0ciA9PSBOVUxMKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICAgICAgcmVzdWx0ID0gZnVuY1cod3N0cik7Ci0gICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCi0gICAgICAgIGlmICghcmVzdWx0KQotICAgICAgICAgICAgcmV0dXJuIHdpbjMyX2Vycm9yX29iamVjdChmdW5jLCB1bmkpOwotICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgICAgIHJldHVybiBQeV9Ob25lOwotICAgIH0KLSAgICBQeUVycl9DbGVhcigpOwotCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIGZvcm1hdCwgJmFuc2kpKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAod2luMzJfd2Fybl9ieXRlc19hcGkoKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgIHJlc3VsdCA9IGZ1bmNBKGFuc2kpOwotICAgIFB5X0VORF9BTExPV19USFJFQURTCi0gICAgaWYgKCFyZXN1bHQpCi0gICAgICAgIHJldHVybiB3aW4zMl9lcnJvcihmdW5jLCBhbnNpKTsKLSAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgcmV0dXJuIFB5X05vbmU7Ci0KLX0KLQogLyogVGhpcyBpcyBhIHJlaW1wbGVtZW50YXRpb24gb2YgdGhlIEMgbGlicmFyeSdzIGNoZGlyIGZ1bmN0aW9uLAogICAgYnV0IG9uZSB0aGF0IHByb2R1Y2VzIFdpbjMyIGVycm9ycyBpbnN0ZWFkIG9mIERPUyBlcnJvciBjb2Rlcy4KICAgIGNoZGlyIGlzIGVzc2VudGlhbGx5IGEgd3JhcHBlciBhcm91bmQgU2V0Q3VycmVudERpcmVjdG9yeTsgaG93ZXZlciwKQEAgLTE0NTUsMTggKzE0MDksMTggQEAKIHN0YXRpYyBCT09MIF9fc3RkY2FsbAogd2luMzJfY2hkaXIoTFBDU1RSIHBhdGgpCiB7Ci0gICAgY2hhciBuZXdfcGF0aFtNQVhfUEFUSCsxXTsKKyAgICBjaGFyIG5ld19wYXRoW01BWF9QQVRIXTsKICAgICBpbnQgcmVzdWx0OwogICAgIGNoYXIgZW52WzRdID0gIj14OiI7CiAKICAgICBpZighU2V0Q3VycmVudERpcmVjdG9yeUEocGF0aCkpCiAgICAgICAgIHJldHVybiBGQUxTRTsKLSAgICByZXN1bHQgPSBHZXRDdXJyZW50RGlyZWN0b3J5QShNQVhfUEFUSCsxLCBuZXdfcGF0aCk7CisgICAgcmVzdWx0ID0gR2V0Q3VycmVudERpcmVjdG9yeUEoUHlfQVJSQVlfTEVOR1RIKG5ld19wYXRoKSwgbmV3X3BhdGgpOwogICAgIGlmICghcmVzdWx0KQogICAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgLyogSW4gdGhlIEFOU0kgQVBJLCB0aGVyZSBzaG91bGQgbm90IGJlIGFueSBwYXRocyBsb25nZXIKLSAgICAgICB0aGFuIE1BWF9QQVRILiAqLwotICAgIGFzc2VydChyZXN1bHQgPD0gTUFYX1BBVEgrMSk7CisgICAgICAgdGhhbiBNQVhfUEFUSC0xIChub3QgaW5jbHVkaW5nIHRoZSBmaW5hbCBudWxsIGNoYXJhY3RlcikuICovCisgICAgYXNzZXJ0KHJlc3VsdCA8IFB5X0FSUkFZX0xFTkdUSChuZXdfcGF0aCkpOwogICAgIGlmIChzdHJuY21wKG5ld19wYXRoLCAiXFxcXCIsIDIpID09IDAgfHwKICAgICAgICAgc3RybmNtcChuZXdfcGF0aCwgIi8vIiwgMikgPT0gMCkKICAgICAgICAgLyogVU5DIHBhdGgsIG5vdGhpbmcgdG8gZG8uICovCkBAIC0xNDgwLDI0ICsxNDM0LDI0IEBACiBzdGF0aWMgQk9PTCBfX3N0ZGNhbGwKIHdpbjMyX3djaGRpcihMUENXU1RSIHBhdGgpCiB7Ci0gICAgd2NoYXJfdCBfbmV3X3BhdGhbTUFYX1BBVEgrMV0sICpuZXdfcGF0aCA9IF9uZXdfcGF0aDsKKyAgICB3Y2hhcl90IF9uZXdfcGF0aFtNQVhfUEFUSF0sICpuZXdfcGF0aCA9IF9uZXdfcGF0aDsKICAgICBpbnQgcmVzdWx0OwogICAgIHdjaGFyX3QgZW52WzRdID0gTCI9eDoiOwogCiAgICAgaWYoIVNldEN1cnJlbnREaXJlY3RvcnlXKHBhdGgpKQogICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgcmVzdWx0ID0gR2V0Q3VycmVudERpcmVjdG9yeVcoTUFYX1BBVEgrMSwgbmV3X3BhdGgpOworICAgIHJlc3VsdCA9IEdldEN1cnJlbnREaXJlY3RvcnlXKFB5X0FSUkFZX0xFTkdUSChuZXdfcGF0aCksIG5ld19wYXRoKTsKICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgIGlmIChyZXN1bHQgPiBNQVhfUEFUSCsxKSB7Ci0gICAgICAgIG5ld19wYXRoID0gbWFsbG9jKHJlc3VsdCAqIHNpemVvZih3Y2hhcl90KSk7CisgICAgaWYgKHJlc3VsdCA+IFB5X0FSUkFZX0xFTkdUSChuZXdfcGF0aCkpIHsKKyAgICAgICAgbmV3X3BhdGggPSBQeU1lbV9SYXdNYWxsb2MocmVzdWx0ICogc2l6ZW9mKHdjaGFyX3QpKTsKICAgICAgICAgaWYgKCFuZXdfcGF0aCkgewogICAgICAgICAgICAgU2V0TGFzdEVycm9yKEVSUk9SX09VVE9GTUVNT1JZKTsKICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKICAgICAgICAgfQogICAgICAgICByZXN1bHQgPSBHZXRDdXJyZW50RGlyZWN0b3J5VyhyZXN1bHQsIG5ld19wYXRoKTsKICAgICAgICAgaWYgKCFyZXN1bHQpIHsKLSAgICAgICAgICAgIGZyZWUobmV3X3BhdGgpOworICAgICAgICAgICAgUHlNZW1fUmF3RnJlZShuZXdfcGF0aCk7CiAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgICAgIH0KICAgICB9CkBAIC0xNTA4LDcgKzE0NjIsNyBAQAogICAgIGVudlsxXSA9IG5ld19wYXRoWzBdOwogICAgIHJlc3VsdCA9IFNldEVudmlyb25tZW50VmFyaWFibGVXKGVudiwgbmV3X3BhdGgpOwogICAgIGlmIChuZXdfcGF0aCAhPSBfbmV3X3BhdGgpCi0gICAgICAgIGZyZWUobmV3X3BhdGgpOworICAgICAgICBQeU1lbV9SYXdGcmVlKG5ld19wYXRoKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogI2VuZGlmCkBAIC0xNTIzLDEzICsxNDc3LDEzIEBACiAjZGVmaW5lIEhBVkVfU1RBVF9OU0VDIDEKIAogc3RydWN0IHdpbjMyX3N0YXR7Ci0gICAgaW50IHN0X2RldjsKKyAgICB1bnNpZ25lZCBsb25nIHN0X2RldjsKICAgICBfX2ludDY0IHN0X2lubzsKICAgICB1bnNpZ25lZCBzaG9ydCBzdF9tb2RlOwogICAgIGludCBzdF9ubGluazsKICAgICBpbnQgc3RfdWlkOwogICAgIGludCBzdF9naWQ7Ci0gICAgaW50IHN0X3JkZXY7CisgICAgdW5zaWduZWQgbG9uZyBzdF9yZGV2OwogICAgIF9faW50NjQgc3Rfc2l6ZTsKICAgICB0aW1lX3Qgc3RfYXRpbWU7CiAgICAgaW50IHN0X2F0aW1lX25zZWM7CkBAIC0xNTg4LDYgKzE1NDIsOCBAQAogICAgIG1lbXNldChyZXN1bHQsIDAsIHNpemVvZigqcmVzdWx0KSk7CiAgICAgcmVzdWx0LT5zdF9tb2RlID0gYXR0cmlidXRlc190b19tb2RlKGluZm8tPmR3RmlsZUF0dHJpYnV0ZXMpOwogICAgIHJlc3VsdC0+c3Rfc2l6ZSA9ICgoKF9faW50NjQpaW5mby0+bkZpbGVTaXplSGlnaCk8PDMyKSArIGluZm8tPm5GaWxlU2l6ZUxvdzsKKyAgICByZXN1bHQtPnN0X2RldiA9IGluZm8tPmR3Vm9sdW1lU2VyaWFsTnVtYmVyOworICAgIHJlc3VsdC0+c3RfcmRldiA9IHJlc3VsdC0+c3RfZGV2OwogICAgIEZJTEVfVElNRV90b190aW1lX3RfbnNlYygmaW5mby0+ZnRDcmVhdGlvblRpbWUsICZyZXN1bHQtPnN0X2N0aW1lLCAmcmVzdWx0LT5zdF9jdGltZV9uc2VjKTsKICAgICBGSUxFX1RJTUVfdG9fdGltZV90X25zZWMoJmluZm8tPmZ0TGFzdFdyaXRlVGltZSwgJnJlc3VsdC0+c3RfbXRpbWUsICZyZXN1bHQtPnN0X210aW1lX25zZWMpOwogICAgIEZJTEVfVElNRV90b190aW1lX3RfbnNlYygmaW5mby0+ZnRMYXN0QWNjZXNzVGltZSwgJnJlc3VsdC0+c3RfYXRpbWUsICZyZXN1bHQtPnN0X2F0aW1lX25zZWMpOwpAQCAtMTU5NSw5ICsxNTUxLDkgQEAKICAgICByZXN1bHQtPnN0X2lubyA9ICgoKF9faW50NjQpaW5mby0+bkZpbGVJbmRleEhpZ2gpPDwzMikgKyBpbmZvLT5uRmlsZUluZGV4TG93OwogICAgIGlmIChyZXBhcnNlX3RhZyA9PSBJT19SRVBBUlNFX1RBR19TWU1MSU5LKSB7CiAgICAgICAgIC8qIGZpcnN0IGNsZWFyIHRoZSBTX0lGTVQgYml0cyAqLwotICAgICAgICByZXN1bHQtPnN0X21vZGUgXj0gKHJlc3VsdC0+c3RfbW9kZSAmIDAxNzAwMDApOworICAgICAgICByZXN1bHQtPnN0X21vZGUgXj0gKHJlc3VsdC0+c3RfbW9kZSAmIFNfSUZNVCk7CiAgICAgICAgIC8qIG5vdyBzZXQgdGhlIGJpdHMgdGhhdCBtYWtlIHRoaXMgYSBzeW1saW5rICovCi0gICAgICAgIHJlc3VsdC0+c3RfbW9kZSB8PSAwMTIwMDAwOworICAgICAgICByZXN1bHQtPnN0X21vZGUgfD0gU19JRkxOSzsKICAgICB9CiAKICAgICByZXR1cm4gMDsKQEAgLTE2NTAsNyArMTYwNiw3IEBACiB9CiAKIC8qIEdyYWIgR2V0RmluYWxQYXRoTmFtZUJ5SGFuZGxlIGR5bmFtaWNhbGx5IGZyb20ga2VybmVsMzIgKi8KLXN0YXRpYyBpbnQgaGFzX0dldEZpbmFsUGF0aE5hbWVCeUhhbmRsZSA9IDA7CitzdGF0aWMgaW50IGhhc19HZXRGaW5hbFBhdGhOYW1lQnlIYW5kbGUgPSAtMTsKIHN0YXRpYyBEV09SRCAoQ0FMTEJBQ0sgKlB5X0dldEZpbmFsUGF0aE5hbWVCeUhhbmRsZVcpKEhBTkRMRSwgTFBXU1RSLCBEV09SRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERXT1JEKTsKIHN0YXRpYyBpbnQKQEAgLTE2NjEsNyArMTYxNyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEV09SRCk7CiAKICAgICAvKiBvbmx5IHJlY2hlY2sgKi8KLSAgICBpZiAoIWhhc19HZXRGaW5hbFBhdGhOYW1lQnlIYW5kbGUpCisgICAgaWYgKC0xID09IGhhc19HZXRGaW5hbFBhdGhOYW1lQnlIYW5kbGUpCiAgICAgewogICAgICAgICBoS2VybmVsMzIgPSBHZXRNb2R1bGVIYW5kbGVXKEwiS0VSTkVMMzIiKTsKICAgICAgICAgKihGQVJQUk9DKikmUHlfR2V0RmluYWxQYXRoTmFtZUJ5SGFuZGxlQSA9IEdldFByb2NBZGRyZXNzKGhLZXJuZWwzMiwKQEAgLTE2ODcsNyArMTY0Myw3IEBACiAgICAgaWYoIWJ1Zl9zaXplKQogICAgICAgICByZXR1cm4gRkFMU0U7CiAKLSAgICBidWYgPSAod2NoYXJfdCAqKW1hbGxvYygoYnVmX3NpemUrMSkqc2l6ZW9mKHdjaGFyX3QpKTsKKyAgICBidWYgPSBQeU1lbV9OZXcod2NoYXJfdCwgYnVmX3NpemUrMSk7CiAgICAgaWYgKCFidWYpIHsKICAgICAgICAgU2V0TGFzdEVycm9yKEVSUk9SX09VVE9GTUVNT1JZKTsKICAgICAgICAgcmV0dXJuIEZBTFNFOwpAQCAtMTY5NywxMiArMTY1MywxMiBAQAogICAgICAgICAgICAgICAgICAgICAgICBidWYsIGJ1Zl9zaXplLCBWT0xVTUVfTkFNRV9ET1MpOwogCiAgICAgaWYoIXJlc3VsdF9sZW5ndGgpIHsKLSAgICAgICAgZnJlZShidWYpOworICAgICAgICBQeU1lbV9GcmVlKGJ1Zik7CiAgICAgICAgIHJldHVybiBGQUxTRTsKICAgICB9CiAKICAgICBpZighQ2xvc2VIYW5kbGUoaGRsKSkgewotICAgICAgICBmcmVlKGJ1Zik7CisgICAgICAgIFB5TWVtX0ZyZWUoYnVmKTsKICAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgIH0KIApAQCAtMTc5Myw3ICsxNzQ5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgICAgICAgICAgICAgY29kZSA9IHdpbjMyX3hzdGF0X2ltcGxfdyh0YXJnZXRfcGF0aCwgcmVzdWx0LCBGQUxTRSk7Ci0gICAgICAgICAgICAgICAgZnJlZSh0YXJnZXRfcGF0aCk7CisgICAgICAgICAgICAgICAgUHlNZW1fRnJlZSh0YXJnZXRfcGF0aCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGNvZGU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZQpAQCAtMTg4OSw3ICsxODQ1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgICAgICAgICAgICAgY29kZSA9IHdpbjMyX3hzdGF0X2ltcGxfdyh0YXJnZXRfcGF0aCwgcmVzdWx0LCBGQUxTRSk7Ci0gICAgICAgICAgICAgICAgZnJlZSh0YXJnZXRfcGF0aCk7CisgICAgICAgICAgICAgICAgUHlNZW1fRnJlZSh0YXJnZXRfcGF0aCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGNvZGU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZQpAQCAtMjI4OCwxMSArMjI0NCwxMCBAQAogI2Vsc2UKICAgICBQeVN0cnVjdFNlcXVlbmNlX1NFVF9JVEVNKHYsIDEsIFB5TG9uZ19Gcm9tTG9uZygobG9uZylzdC0+c3RfaW5vKSk7CiAjZW5kaWYKLSNpZiBkZWZpbmVkKEhBVkVfTE9OR19MT05HKSAmJiAhZGVmaW5lZChNU19XSU5ET1dTKQotICAgIFB5U3RydWN0U2VxdWVuY2VfU0VUX0lURU0odiwgMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5TG9uZ19Gcm9tTG9uZ0xvbmcoKFBZX0xPTkdfTE9ORylzdC0+c3RfZGV2KSk7CisjaWZkZWYgTVNfV0lORE9XUworICAgIFB5U3RydWN0U2VxdWVuY2VfU0VUX0lURU0odiwgMiwgUHlMb25nX0Zyb21VbnNpZ25lZExvbmcoc3QtPnN0X2RldikpOwogI2Vsc2UKLSAgICBQeVN0cnVjdFNlcXVlbmNlX1NFVF9JVEVNKHYsIDIsIFB5TG9uZ19Gcm9tTG9uZygobG9uZylzdC0+c3RfZGV2KSk7CisgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9TRVRfSVRFTSh2LCAyLCBfUHlMb25nX0Zyb21EZXYoc3QtPnN0X2RldikpOwogI2VuZGlmCiAgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9TRVRfSVRFTSh2LCAzLCBQeUxvbmdfRnJvbUxvbmcoKGxvbmcpc3QtPnN0X25saW5rKSk7CiAjaWYgZGVmaW5lZChNU19XSU5ET1dTKQpAQCAtMjQyMyw1MyArMjM3OCwxNTggQEAKICAgICAgICAgcmVzdWx0ID0gU1RBVChwYXRoLT5uYXJyb3csICZzdCk7CiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKIAotICAgIGlmIChyZXN1bHQgIT0gMCkKLSAgICAgICAgcmV0dXJuIHBhdGhfZXJyb3IoInN0YXQiLCBwYXRoKTsKKyAgICBpZiAocmVzdWx0ICE9IDApIHsKKyAgICAgICAgcmV0dXJuIHBhdGhfZXJyb3IocGF0aCk7CisgICAgfQogCiAgICAgcmV0dXJuIF9weXN0YXRfZnJvbXN0cnVjdHN0YXQoJnN0KTsKIH0KIAotUHlEb2NfU1RSVkFSKHBvc2l4X3N0YXRfX2RvY19fLAotInN0YXQocGF0aCwgKiwgZGlyX2ZkPU5vbmUsIGZvbGxvd19zeW1saW5rcz1UcnVlKSAtPiBzdGF0IHJlc3VsdFxuXG5cCi1QZXJmb3JtIGEgc3RhdCBzeXN0ZW0gY2FsbCBvbiB0aGUgZ2l2ZW4gcGF0aC5cblwKLVxuXAotcGF0aCBtYXkgYmUgc3BlY2lmaWVkIGFzIGVpdGhlciBhIHN0cmluZyBvciBhcyBhbiBvcGVuIGZpbGUgZGVzY3JpcHRvci5cblwKLVxuXAotSWYgZGlyX2ZkIGlzIG5vdCBOb25lLCBpdCBzaG91bGQgYmUgYSBmaWxlIGRlc2NyaXB0b3Igb3BlbiB0byBhIGRpcmVjdG9yeSxcblwKLSAgYW5kIHBhdGggc2hvdWxkIGJlIHJlbGF0aXZlOyBwYXRoIHdpbGwgdGhlbiBiZSByZWxhdGl2ZSB0byB0aGF0IGRpcmVjdG9yeS5cblwKLSAgZGlyX2ZkIG1heSBub3QgYmUgc3VwcG9ydGVkIG9uIHlvdXIgcGxhdGZvcm07IGlmIGl0IGlzIHVuYXZhaWxhYmxlLCB1c2luZ1xuXAotICBpdCB3aWxsIHJhaXNlIGEgTm90SW1wbGVtZW50ZWRFcnJvci5cblwKLUlmIGZvbGxvd19zeW1saW5rcyBpcyBGYWxzZSwgYW5kIHRoZSBsYXN0IGVsZW1lbnQgb2YgdGhlIHBhdGggaXMgYSBzeW1ib2xpY1xuXAotICBsaW5rLCBzdGF0IHdpbGwgZXhhbWluZSB0aGUgc3ltYm9saWMgbGluayBpdHNlbGYgaW5zdGVhZCBvZiB0aGUgZmlsZSB0aGVcblwKLSAgbGluayBwb2ludHMgdG8uXG5cCi1JdCBpcyBhbiBlcnJvciB0byB1c2UgZGlyX2ZkIG9yIGZvbGxvd19zeW1saW5rcyB3aGVuIHNwZWNpZnlpbmcgcGF0aCBhc1xuXAotICBhbiBvcGVuIGZpbGUgZGVzY3JpcHRvci4iKTsKKyNpZmRlZiBIQVZFX0ZTVEFUQVQKKyAgICAjZGVmaW5lIE9TX1NUQVRfRElSX0ZEX0NPTlZFUlRFUiBkaXJfZmRfY29udmVydGVyCisjZWxzZQorICAgICNkZWZpbmUgT1NfU1RBVF9ESVJfRkRfQ09OVkVSVEVSIGRpcl9mZF91bmF2YWlsYWJsZQorI2VuZGlmCisKKworLypbcHl0aG9uIGlucHV0XQorCitjbGFzcyBwYXRoX3RfY29udmVydGVyKENDb252ZXJ0ZXIpOgorCisgICAgdHlwZSA9ICJwYXRoX3QiCisgICAgaW1wbF9ieV9yZWZlcmVuY2UgPSBUcnVlCisgICAgcGFyc2VfYnlfcmVmZXJlbmNlID0gVHJ1ZQorCisgICAgY29udmVydGVyID0gJ3BhdGhfY29udmVydGVyJworCisgICAgZGVmIGNvbnZlcnRlcl9pbml0KHNlbGYsICosIGFsbG93X2ZkPUZhbHNlLCBudWxsYWJsZT1GYWxzZSk6CisgICAgICAgICMgcmlnaHQgbm93IHBhdGhfdCBkb2Vzbid0IHN1cHBvcnQgZGVmYXVsdCB2YWx1ZXMuCisgICAgICAgICMgdG8gc3VwcG9ydCBhIGRlZmF1bHQgdmFsdWUsIHlvdSdsbCBuZWVkIHRvIG92ZXJyaWRlIGluaXRpYWxpemUoKS4KKyAgICAgICAgaWYgc2VsZi5kZWZhdWx0IGlzIG5vdCB1bnNwZWNpZmllZDoKKyAgICAgICAgICAgIGZhaWwoIkNhbid0IHNwZWNpZnkgYSBkZWZhdWx0IHRvIHRoZSBwYXRoX3QgY29udmVydGVyISIpCisKKyAgICAgICAgaWYgc2VsZi5jX2RlZmF1bHQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBmYWlsKCJDYW4ndCBzcGVjaWZ5IGEgY19kZWZhdWx0IHRvIHRoZSBwYXRoX3QgY29udmVydGVyISIpCisKKyAgICAgICAgc2VsZi5udWxsYWJsZSA9IG51bGxhYmxlCisgICAgICAgIHNlbGYuYWxsb3dfZmQgPSBhbGxvd19mZAorCisgICAgZGVmIHByZV9yZW5kZXIoc2VsZik6CisgICAgICAgIGRlZiBzdHJpZnkodmFsdWUpOgorICAgICAgICAgICAgcmV0dXJuIHN0cihpbnQoYm9vbCh2YWx1ZSkpKQorCisgICAgICAgICMgYWRkIHNlbGYucHlfbmFtZSBoZXJlIHdoZW4gbWVyZ2luZyB3aXRoIHBvc2l4bW9kdWxlIGNvbnZlcnNpb24KKyAgICAgICAgc2VsZi5jX2RlZmF1bHQgPSAnUEFUSF9UX0lOSVRJQUxJWkUoInt9Iiwge30sIHt9KScuZm9ybWF0KAorICAgICAgICAgICAgc2VsZi5mdW5jdGlvbi5uYW1lLAorICAgICAgICAgICAgc3RyaWZ5KHNlbGYubnVsbGFibGUpLAorICAgICAgICAgICAgc3RyaWZ5KHNlbGYuYWxsb3dfZmQpLAorICAgICAgICAgICAgKQorCisgICAgZGVmIGNsZWFudXAoc2VsZik6CisgICAgICAgIHJldHVybiAicGF0aF9jbGVhbnVwKCYiICsgc2VsZi5uYW1lICsgIik7XG4iCisKKworY2xhc3MgZGlyX2ZkX2NvbnZlcnRlcihDQ29udmVydGVyKToKKyAgICB0eXBlID0gJ2ludCcKKyAgICBjb252ZXJ0ZXIgPSAnT1NfU1RBVF9ESVJfRkRfQ09OVkVSVEVSJworCisgICAgZGVmIGNvbnZlcnRlcl9pbml0KHNlbGYpOgorICAgICAgICBpZiBzZWxmLmRlZmF1bHQgaW4gKHVuc3BlY2lmaWVkLCBOb25lKToKKyAgICAgICAgICAgIHNlbGYuY19kZWZhdWx0ID0gJ0RFRkFVTFRfRElSX0ZEJworCisKK1tweXRob24gc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKy8qW3B5dGhvbiBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kYTM5YTNlZTVlNmI0YjBkIGlucHV0PTVjOWY0NTZmNTMyNDRmYzNdKi8KKworLypbY2xpbmljIGlucHV0XQorCitvcy5zdGF0CisKKyAgICBwYXRoIDogcGF0aF90KGFsbG93X2ZkPVRydWUpCisgICAgICAgIFBhdGggdG8gYmUgZXhhbWluZWQ7IGNhbiBiZSBzdHJpbmcsIGJ5dGVzLCBvciBvcGVuLWZpbGUtZGVzY3JpcHRvciBpbnQuCisKKyAgICAqCisKKyAgICBkaXJfZmQgOiBkaXJfZmQgPSBOb25lCisgICAgICAgIElmIG5vdCBOb25lLCBpdCBzaG91bGQgYmUgYSBmaWxlIGRlc2NyaXB0b3Igb3BlbiB0byBhIGRpcmVjdG9yeSwKKyAgICAgICAgYW5kIHBhdGggc2hvdWxkIGJlIGEgcmVsYXRpdmUgc3RyaW5nOyBwYXRoIHdpbGwgdGhlbiBiZSByZWxhdGl2ZSB0bworICAgICAgICB0aGF0IGRpcmVjdG9yeS4KKworICAgIGZvbGxvd19zeW1saW5rczogYm9vbCA9IFRydWUKKyAgICAgICAgSWYgRmFsc2UsIGFuZCB0aGUgbGFzdCBlbGVtZW50IG9mIHRoZSBwYXRoIGlzIGEgc3ltYm9saWMgbGluaywKKyAgICAgICAgc3RhdCB3aWxsIGV4YW1pbmUgdGhlIHN5bWJvbGljIGxpbmsgaXRzZWxmIGluc3RlYWQgb2YgdGhlIGZpbGUKKyAgICAgICAgdGhlIGxpbmsgcG9pbnRzIHRvLgorCitQZXJmb3JtIGEgc3RhdCBzeXN0ZW0gY2FsbCBvbiB0aGUgZ2l2ZW4gcGF0aC4KKworZGlyX2ZkIGFuZCBmb2xsb3dfc3ltbGlua3MgbWF5IG5vdCBiZSBpbXBsZW1lbnRlZAorICBvbiB5b3VyIHBsYXRmb3JtLiAgSWYgdGhleSBhcmUgdW5hdmFpbGFibGUsIHVzaW5nIHRoZW0gd2lsbCByYWlzZSBhCisgIE5vdEltcGxlbWVudGVkRXJyb3IuCisKK0l0J3MgYW4gZXJyb3IgdG8gdXNlIGRpcl9mZCBvciBmb2xsb3dfc3ltbGlua3Mgd2hlbiBzcGVjaWZ5aW5nIHBhdGggYXMKKyAgYW4gb3BlbiBmaWxlIGRlc2NyaXB0b3IuCisKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworUHlEb2NfU1RSVkFSKG9zX3N0YXRfX2RvY19fLAorInN0YXQoJG1vZHVsZSwgLywgcGF0aCwgKiwgZGlyX2ZkPU5vbmUsIGZvbGxvd19zeW1saW5rcz1UcnVlKVxuIgorIi0tXG4iCisiXG4iCisiUGVyZm9ybSBhIHN0YXQgc3lzdGVtIGNhbGwgb24gdGhlIGdpdmVuIHBhdGguXG4iCisiXG4iCisiICBwYXRoXG4iCisiICAgIFBhdGggdG8gYmUgZXhhbWluZWQ7IGNhbiBiZSBzdHJpbmcsIGJ5dGVzLCBvciBvcGVuLWZpbGUtZGVzY3JpcHRvciBpbnQuXG4iCisiICBkaXJfZmRcbiIKKyIgICAgSWYgbm90IE5vbmUsIGl0IHNob3VsZCBiZSBhIGZpbGUgZGVzY3JpcHRvciBvcGVuIHRvIGEgZGlyZWN0b3J5LFxuIgorIiAgICBhbmQgcGF0aCBzaG91bGQgYmUgYSByZWxhdGl2ZSBzdHJpbmc7IHBhdGggd2lsbCB0aGVuIGJlIHJlbGF0aXZlIHRvXG4iCisiICAgIHRoYXQgZGlyZWN0b3J5LlxuIgorIiAgZm9sbG93X3N5bWxpbmtzXG4iCisiICAgIElmIEZhbHNlLCBhbmQgdGhlIGxhc3QgZWxlbWVudCBvZiB0aGUgcGF0aCBpcyBhIHN5bWJvbGljIGxpbmssXG4iCisiICAgIHN0YXQgd2lsbCBleGFtaW5lIHRoZSBzeW1ib2xpYyBsaW5rIGl0c2VsZiBpbnN0ZWFkIG9mIHRoZSBmaWxlXG4iCisiICAgIHRoZSBsaW5rIHBvaW50cyB0by5cbiIKKyJcbiIKKyJkaXJfZmQgYW5kIGZvbGxvd19zeW1saW5rcyBtYXkgbm90IGJlIGltcGxlbWVudGVkXG4iCisiICBvbiB5b3VyIHBsYXRmb3JtLiAgSWYgdGhleSBhcmUgdW5hdmFpbGFibGUsIHVzaW5nIHRoZW0gd2lsbCByYWlzZSBhXG4iCisiICBOb3RJbXBsZW1lbnRlZEVycm9yLlxuIgorIlxuIgorIkl0XCdzIGFuIGVycm9yIHRvIHVzZSBkaXJfZmQgb3IgZm9sbG93X3N5bWxpbmtzIHdoZW4gc3BlY2lmeWluZyBwYXRoIGFzXG4iCisiICBhbiBvcGVuIGZpbGUgZGVzY3JpcHRvci4iKTsKKworI2RlZmluZSBPU19TVEFUX01FVEhPRERFRiAgICBcCisgICAgeyJzdGF0IiwgKFB5Q0Z1bmN0aW9uKW9zX3N0YXQsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCBvc19zdGF0X19kb2NfX30sCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1wb3NpeF9zdGF0KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK29zX3N0YXRfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBwYXRoX3QgKnBhdGgsIGludCBkaXJfZmQsIGludCBmb2xsb3dfc3ltbGlua3MpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3Nfc3RhdChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKIHsKLSAgICBzdGF0aWMgY2hhciAqa2V5d29yZHNbXSA9IHsicGF0aCIsICJkaXJfZmQiLCAiZm9sbG93X3N5bWxpbmtzIiwgTlVMTH07Ci0gICAgcGF0aF90IHBhdGg7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgc3RhdGljIGNoYXIgKl9rZXl3b3Jkc1tdID0geyJwYXRoIiwgImRpcl9mZCIsICJmb2xsb3dfc3ltbGlua3MiLCBOVUxMfTsKKyAgICBwYXRoX3QgcGF0aCA9IFBBVEhfVF9JTklUSUFMSVpFKCJzdGF0IiwgMCwgMSk7CiAgICAgaW50IGRpcl9mZCA9IERFRkFVTFRfRElSX0ZEOwogICAgIGludCBmb2xsb3dfc3ltbGlua3MgPSAxOwotICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWU7CiAKLSAgICBtZW1zZXQoJnBhdGgsIDAsIHNpemVvZihwYXRoKSk7Ci0gICAgcGF0aC5hbGxvd19mZCA9IDE7Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiTyZ8JE8mcDpzdGF0Iiwga2V5d29yZHMsCi0gICAgICAgIHBhdGhfY29udmVydGVyLCAmcGF0aCwKLSNpZmRlZiBIQVZFX0ZTVEFUQVQKLSAgICAgICAgZGlyX2ZkX2NvbnZlcnRlciwgJmRpcl9mZCwKLSNlbHNlCi0gICAgICAgIGRpcl9mZF91bmF2YWlsYWJsZSwgJmRpcl9mZCwKLSNlbmRpZgotICAgICAgICAmZm9sbG93X3N5bWxpbmtzKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgcmV0dXJuX3ZhbHVlID0gcG9zaXhfZG9fc3RhdCgic3RhdCIsICZwYXRoLCBkaXJfZmQsIGZvbGxvd19zeW1saW5rcyk7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLAorICAgICAgICAiTyZ8JE8mcDpzdGF0IiwgX2tleXdvcmRzLAorICAgICAgICBwYXRoX2NvbnZlcnRlciwgJnBhdGgsIE9TX1NUQVRfRElSX0ZEX0NPTlZFUlRFUiwgJmRpcl9mZCwgJmZvbGxvd19zeW1saW5rcykpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBvc19zdGF0X2ltcGwobW9kdWxlLCAmcGF0aCwgZGlyX2ZkLCBmb2xsb3dfc3ltbGlua3MpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIHBhdGggKi8KICAgICBwYXRoX2NsZWFudXAoJnBhdGgpOworCiAgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKIH0KIAorc3RhdGljIFB5T2JqZWN0ICoKK29zX3N0YXRfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBwYXRoX3QgKnBhdGgsIGludCBkaXJfZmQsIGludCBmb2xsb3dfc3ltbGlua3MpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZjFkY2FhNWUyNGRiOTg4MiBpbnB1dD01YWUxNTViZDQ3NWZkMjBhXSovCit7CisgICAgcmV0dXJuIHBvc2l4X2RvX3N0YXQoInN0YXQiLCBwYXRoLCBkaXJfZmQsIGZvbGxvd19zeW1saW5rcyk7Cit9CisKIFB5RG9jX1NUUlZBUihwb3NpeF9sc3RhdF9fZG9jX18sCiAibHN0YXQocGF0aCwgKiwgZGlyX2ZkPU5vbmUpIC0+IHN0YXQgcmVzdWx0XG5cblwKIExpa2Ugc3RhdCgpLCBidXQgZG8gbm90IGZvbGxvdyBzeW1ib2xpYyBsaW5rcy5cblwKQEAgLTI0ODUsNiArMjU0NSw3IEBACiAgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZTsKIAogICAgIG1lbXNldCgmcGF0aCwgMCwgc2l6ZW9mKHBhdGgpKTsKKyAgICBwYXRoLmZ1bmN0aW9uX25hbWUgPSAibHN0YXQiOwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgIk8mfCRPJjpsc3RhdCIsIGtleXdvcmRzLAogICAgICAgICBwYXRoX2NvbnZlcnRlciwgJnBhdGgsCiAjaWZkZWYgSEFWRV9GU1RBVEFUCkBAIC0yNDk0LDQ0ICsyNTU1LDEyMiBAQAogI2VuZGlmCiAgICAgICAgICkpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIHJldHVybl92YWx1ZSA9IHBvc2l4X2RvX3N0YXQoInN0YXQiLCAmcGF0aCwgZGlyX2ZkLCBmb2xsb3dfc3ltbGlua3MpOworICAgIHJldHVybl92YWx1ZSA9IHBvc2l4X2RvX3N0YXQoImxzdGF0IiwgJnBhdGgsIGRpcl9mZCwgZm9sbG93X3N5bWxpbmtzKTsKICAgICBwYXRoX2NsZWFudXAoJnBhdGgpOwogICAgIHJldHVybiByZXR1cm5fdmFsdWU7CiB9CiAKLVB5RG9jX1NUUlZBUihwb3NpeF9hY2Nlc3NfX2RvY19fLAotImFjY2VzcyhwYXRoLCBtb2RlLCAqLCBkaXJfZmQ9Tm9uZSwgZWZmZWN0aXZlX2lkcz1GYWxzZSxcCi0gZm9sbG93X3N5bWxpbmtzPVRydWUpXG5cblwKLVVzZSB0aGUgcmVhbCB1aWQvZ2lkIHRvIHRlc3QgZm9yIGFjY2VzcyB0byBhIHBhdGguICBSZXR1cm5zIFRydWUgaWYgZ3JhbnRlZCxcblwKLUZhbHNlIG90aGVyd2lzZS5cblwKLVxuXAotSWYgZGlyX2ZkIGlzIG5vdCBOb25lLCBpdCBzaG91bGQgYmUgYSBmaWxlIGRlc2NyaXB0b3Igb3BlbiB0byBhIGRpcmVjdG9yeSxcblwKLSAgYW5kIHBhdGggc2hvdWxkIGJlIHJlbGF0aXZlOyBwYXRoIHdpbGwgdGhlbiBiZSByZWxhdGl2ZSB0byB0aGF0IGRpcmVjdG9yeS5cblwKLUlmIGVmZmVjdGl2ZV9pZHMgaXMgVHJ1ZSwgYWNjZXNzIHdpbGwgdXNlIHRoZSBlZmZlY3RpdmUgdWlkL2dpZCBpbnN0ZWFkIG9mXG5cCi0gIHRoZSByZWFsIHVpZC9naWQuXG5cCi1JZiBmb2xsb3dfc3ltbGlua3MgaXMgRmFsc2UsIGFuZCB0aGUgbGFzdCBlbGVtZW50IG9mIHRoZSBwYXRoIGlzIGEgc3ltYm9saWNcblwKLSAgbGluaywgYWNjZXNzIHdpbGwgZXhhbWluZSB0aGUgc3ltYm9saWMgbGluayBpdHNlbGYgaW5zdGVhZCBvZiB0aGUgZmlsZSB0aGVcblwKLSAgbGluayBwb2ludHMgdG8uXG5cCi1kaXJfZmQsIGVmZmVjdGl2ZV9pZHMsIGFuZCBmb2xsb3dfc3ltbGlua3MgbWF5IG5vdCBiZSBpbXBsZW1lbnRlZFxuXAotICBvbiB5b3VyIHBsYXRmb3JtLiAgSWYgdGhleSBhcmUgdW5hdmFpbGFibGUsIHVzaW5nIHRoZW0gd2lsbCByYWlzZSBhXG5cCi0gIE5vdEltcGxlbWVudGVkRXJyb3IuXG5cCi1cblwKLU5vdGUgdGhhdCBtb3N0IG9wZXJhdGlvbnMgd2lsbCB1c2UgdGhlIGVmZmVjdGl2ZSB1aWQvZ2lkLCB0aGVyZWZvcmUgdGhpc1xuXAotICByb3V0aW5lIGNhbiBiZSB1c2VkIGluIGEgc3VpZC9zZ2lkIGVudmlyb25tZW50IHRvIHRlc3QgaWYgdGhlIGludm9raW5nIHVzZXJcblwKLSAgaGFzIHRoZSBzcGVjaWZpZWQgYWNjZXNzIHRvIHRoZSBwYXRoLlxuXAotVGhlIG1vZGUgYXJndW1lbnQgY2FuIGJlIEZfT0sgdG8gdGVzdCBleGlzdGVuY2UsIG9yIHRoZSBpbmNsdXNpdmUtT1JcblwKLSAgb2YgUl9PSywgV19PSywgYW5kIFhfT0suIik7CisKKyNpZmRlZiBIQVZFX0ZBQ0NFU1NBVAorICAgICNkZWZpbmUgT1NfQUNDRVNTX0RJUl9GRF9DT05WRVJURVIgZGlyX2ZkX2NvbnZlcnRlcgorI2Vsc2UKKyAgICAjZGVmaW5lIE9TX0FDQ0VTU19ESVJfRkRfQ09OVkVSVEVSIGRpcl9mZF91bmF2YWlsYWJsZQorI2VuZGlmCisvKltjbGluaWMgaW5wdXRdCitvcy5hY2Nlc3MKKworICAgIHBhdGg6IHBhdGhfdChhbGxvd19mZD1UcnVlKQorICAgICAgICBQYXRoIHRvIGJlIHRlc3RlZDsgY2FuIGJlIHN0cmluZywgYnl0ZXMsIG9yIG9wZW4tZmlsZS1kZXNjcmlwdG9yIGludC4KKworICAgIG1vZGU6IGludAorICAgICAgICBPcGVyYXRpbmctc3lzdGVtIG1vZGUgYml0ZmllbGQuICBDYW4gYmUgRl9PSyB0byB0ZXN0IGV4aXN0ZW5jZSwKKyAgICAgICAgb3IgdGhlIGluY2x1c2l2ZS1PUiBvZiBSX09LLCBXX09LLCBhbmQgWF9PSy4KKworICAgICoKKworICAgIGRpcl9mZCA6IGRpcl9mZCA9IE5vbmUKKyAgICAgICAgSWYgbm90IE5vbmUsIGl0IHNob3VsZCBiZSBhIGZpbGUgZGVzY3JpcHRvciBvcGVuIHRvIGEgZGlyZWN0b3J5LAorICAgICAgICBhbmQgcGF0aCBzaG91bGQgYmUgcmVsYXRpdmU7IHBhdGggd2lsbCB0aGVuIGJlIHJlbGF0aXZlIHRvIHRoYXQKKyAgICAgICAgZGlyZWN0b3J5LgorCisgICAgZWZmZWN0aXZlX2lkczogYm9vbCA9IEZhbHNlCisgICAgICAgIElmIFRydWUsIGFjY2VzcyB3aWxsIHVzZSB0aGUgZWZmZWN0aXZlIHVpZC9naWQgaW5zdGVhZCBvZgorICAgICAgICB0aGUgcmVhbCB1aWQvZ2lkLgorCisgICAgZm9sbG93X3N5bWxpbmtzOiBib29sID0gVHJ1ZQorICAgICAgICBJZiBGYWxzZSwgYW5kIHRoZSBsYXN0IGVsZW1lbnQgb2YgdGhlIHBhdGggaXMgYSBzeW1ib2xpYyBsaW5rLAorICAgICAgICBhY2Nlc3Mgd2lsbCBleGFtaW5lIHRoZSBzeW1ib2xpYyBsaW5rIGl0c2VsZiBpbnN0ZWFkIG9mIHRoZSBmaWxlCisgICAgICAgIHRoZSBsaW5rIHBvaW50cyB0by4KKworVXNlIHRoZSByZWFsIHVpZC9naWQgdG8gdGVzdCBmb3IgYWNjZXNzIHRvIGEgcGF0aC4KKwore3BhcmFtZXRlcnN9CitkaXJfZmQsIGVmZmVjdGl2ZV9pZHMsIGFuZCBmb2xsb3dfc3ltbGlua3MgbWF5IG5vdCBiZSBpbXBsZW1lbnRlZAorICBvbiB5b3VyIHBsYXRmb3JtLiAgSWYgdGhleSBhcmUgdW5hdmFpbGFibGUsIHVzaW5nIHRoZW0gd2lsbCByYWlzZSBhCisgIE5vdEltcGxlbWVudGVkRXJyb3IuCisKK05vdGUgdGhhdCBtb3N0IG9wZXJhdGlvbnMgd2lsbCB1c2UgdGhlIGVmZmVjdGl2ZSB1aWQvZ2lkLCB0aGVyZWZvcmUgdGhpcworICByb3V0aW5lIGNhbiBiZSB1c2VkIGluIGEgc3VpZC9zZ2lkIGVudmlyb25tZW50IHRvIHRlc3QgaWYgdGhlIGludm9raW5nIHVzZXIKKyAgaGFzIHRoZSBzcGVjaWZpZWQgYWNjZXNzIHRvIHRoZSBwYXRoLgorCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK1B5RG9jX1NUUlZBUihvc19hY2Nlc3NfX2RvY19fLAorImFjY2VzcygkbW9kdWxlLCAvLCBwYXRoLCBtb2RlLCAqLCBkaXJfZmQ9Tm9uZSwgZWZmZWN0aXZlX2lkcz1GYWxzZSxcbiIKKyIgICAgICAgZm9sbG93X3N5bWxpbmtzPVRydWUpXG4iCisiLS1cbiIKKyJcbiIKKyJVc2UgdGhlIHJlYWwgdWlkL2dpZCB0byB0ZXN0IGZvciBhY2Nlc3MgdG8gYSBwYXRoLlxuIgorIlxuIgorIiAgcGF0aFxuIgorIiAgICBQYXRoIHRvIGJlIHRlc3RlZDsgY2FuIGJlIHN0cmluZywgYnl0ZXMsIG9yIG9wZW4tZmlsZS1kZXNjcmlwdG9yIGludC5cbiIKKyIgIG1vZGVcbiIKKyIgICAgT3BlcmF0aW5nLXN5c3RlbSBtb2RlIGJpdGZpZWxkLiAgQ2FuIGJlIEZfT0sgdG8gdGVzdCBleGlzdGVuY2UsXG4iCisiICAgIG9yIHRoZSBpbmNsdXNpdmUtT1Igb2YgUl9PSywgV19PSywgYW5kIFhfT0suXG4iCisiICBkaXJfZmRcbiIKKyIgICAgSWYgbm90IE5vbmUsIGl0IHNob3VsZCBiZSBhIGZpbGUgZGVzY3JpcHRvciBvcGVuIHRvIGEgZGlyZWN0b3J5LFxuIgorIiAgICBhbmQgcGF0aCBzaG91bGQgYmUgcmVsYXRpdmU7IHBhdGggd2lsbCB0aGVuIGJlIHJlbGF0aXZlIHRvIHRoYXRcbiIKKyIgICAgZGlyZWN0b3J5LlxuIgorIiAgZWZmZWN0aXZlX2lkc1xuIgorIiAgICBJZiBUcnVlLCBhY2Nlc3Mgd2lsbCB1c2UgdGhlIGVmZmVjdGl2ZSB1aWQvZ2lkIGluc3RlYWQgb2ZcbiIKKyIgICAgdGhlIHJlYWwgdWlkL2dpZC5cbiIKKyIgIGZvbGxvd19zeW1saW5rc1xuIgorIiAgICBJZiBGYWxzZSwgYW5kIHRoZSBsYXN0IGVsZW1lbnQgb2YgdGhlIHBhdGggaXMgYSBzeW1ib2xpYyBsaW5rLFxuIgorIiAgICBhY2Nlc3Mgd2lsbCBleGFtaW5lIHRoZSBzeW1ib2xpYyBsaW5rIGl0c2VsZiBpbnN0ZWFkIG9mIHRoZSBmaWxlXG4iCisiICAgIHRoZSBsaW5rIHBvaW50cyB0by5cbiIKKyJcbiIKKyJkaXJfZmQsIGVmZmVjdGl2ZV9pZHMsIGFuZCBmb2xsb3dfc3ltbGlua3MgbWF5IG5vdCBiZSBpbXBsZW1lbnRlZFxuIgorIiAgb24geW91ciBwbGF0Zm9ybS4gIElmIHRoZXkgYXJlIHVuYXZhaWxhYmxlLCB1c2luZyB0aGVtIHdpbGwgcmFpc2UgYVxuIgorIiAgTm90SW1wbGVtZW50ZWRFcnJvci5cbiIKKyJcbiIKKyJOb3RlIHRoYXQgbW9zdCBvcGVyYXRpb25zIHdpbGwgdXNlIHRoZSBlZmZlY3RpdmUgdWlkL2dpZCwgdGhlcmVmb3JlIHRoaXNcbiIKKyIgIHJvdXRpbmUgY2FuIGJlIHVzZWQgaW4gYSBzdWlkL3NnaWQgZW52aXJvbm1lbnQgdG8gdGVzdCBpZiB0aGUgaW52b2tpbmcgdXNlclxuIgorIiAgaGFzIHRoZSBzcGVjaWZpZWQgYWNjZXNzIHRvIHRoZSBwYXRoLiIpOworCisjZGVmaW5lIE9TX0FDQ0VTU19NRVRIT0RERUYgICAgXAorICAgIHsiYWNjZXNzIiwgKFB5Q0Z1bmN0aW9uKW9zX2FjY2VzcywgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIG9zX2FjY2Vzc19fZG9jX199LAogCiBzdGF0aWMgUHlPYmplY3QgKgotcG9zaXhfYWNjZXNzKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK29zX2FjY2Vzc19pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIHBhdGhfdCAqcGF0aCwgaW50IG1vZGUsIGludCBkaXJfZmQsIGludCBlZmZlY3RpdmVfaWRzLCBpbnQgZm9sbG93X3N5bWxpbmtzKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK29zX2FjY2VzcyhQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKIHsKLSAgICBzdGF0aWMgY2hhciAqa2V5d29yZHNbXSA9IHsicGF0aCIsICJtb2RlIiwgImRpcl9mZCIsICJlZmZlY3RpdmVfaWRzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZvbGxvd19zeW1saW5rcyIsIE5VTEx9OwotICAgIHBhdGhfdCBwYXRoOworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIHN0YXRpYyBjaGFyICpfa2V5d29yZHNbXSA9IHsicGF0aCIsICJtb2RlIiwgImRpcl9mZCIsICJlZmZlY3RpdmVfaWRzIiwgImZvbGxvd19zeW1saW5rcyIsIE5VTEx9OworICAgIHBhdGhfdCBwYXRoID0gUEFUSF9UX0lOSVRJQUxJWkUoImFjY2VzcyIsIDAsIDEpOwogICAgIGludCBtb2RlOwogICAgIGludCBkaXJfZmQgPSBERUZBVUxUX0RJUl9GRDsKICAgICBpbnQgZWZmZWN0aXZlX2lkcyA9IDA7CiAgICAgaW50IGZvbGxvd19zeW1saW5rcyA9IDE7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsCisgICAgICAgICJPJml8JE8mcHA6YWNjZXNzIiwgX2tleXdvcmRzLAorICAgICAgICBwYXRoX2NvbnZlcnRlciwgJnBhdGgsICZtb2RlLCBPU19TVEFUX0RJUl9GRF9DT05WRVJURVIsICZkaXJfZmQsICZlZmZlY3RpdmVfaWRzLCAmZm9sbG93X3N5bWxpbmtzKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IG9zX2FjY2Vzc19pbXBsKG1vZHVsZSwgJnBhdGgsIG1vZGUsIGRpcl9mZCwgZWZmZWN0aXZlX2lkcywgZm9sbG93X3N5bWxpbmtzKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBwYXRoICovCisgICAgcGF0aF9jbGVhbnVwKCZwYXRoKTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19hY2Nlc3NfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBwYXRoX3QgKnBhdGgsIGludCBtb2RlLCBpbnQgZGlyX2ZkLCBpbnQgZWZmZWN0aXZlX2lkcywgaW50IGZvbGxvd19zeW1saW5rcykKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1hNmVkNGYxNTFiZTlkZjBmIGlucHV0PTJlMmU3NTk0MzcxZjViN2VdKi8KK3sKICAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKIAogI2lmZGVmIE1TX1dJTkRPV1MKQEAgLTI1NDAsMTcgKzI2NzksNiBAQAogICAgIGludCByZXN1bHQ7CiAjZW5kaWYKIAotICAgIG1lbXNldCgmcGF0aCwgMCwgc2l6ZW9mKHBhdGgpKTsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJPJml8JE8mcHA6YWNjZXNzIiwga2V5d29yZHMsCi0gICAgICAgIHBhdGhfY29udmVydGVyLCAmcGF0aCwgJm1vZGUsCi0jaWZkZWYgSEFWRV9GQUNDRVNTQVQKLSAgICAgICAgZGlyX2ZkX2NvbnZlcnRlciwgJmRpcl9mZCwKLSNlbHNlCi0gICAgICAgIGRpcl9mZF91bmF2YWlsYWJsZSwgJmRpcl9mZCwKLSNlbmRpZgotICAgICAgICAmZWZmZWN0aXZlX2lkcywgJmZvbGxvd19zeW1saW5rcykpCi0gICAgICAgIHJldHVybiBOVUxMOwotCiAjaWZuZGVmIEhBVkVfRkFDQ0VTU0FUCiAgICAgaWYgKGZvbGxvd19zeW1saW5rc19zcGVjaWZpZWQoImFjY2VzcyIsIGZvbGxvd19zeW1saW5rcykpCiAgICAgICAgIGdvdG8gZXhpdDsKQEAgLTI1NjMsMTAgKzI2OTEsMTAgQEAKIAogI2lmZGVmIE1TX1dJTkRPV1MKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgaWYgKHBhdGgud2lkZSAhPSBOVUxMKQotICAgICAgICBhdHRyID0gR2V0RmlsZUF0dHJpYnV0ZXNXKHBhdGgud2lkZSk7CisgICAgaWYgKHBhdGgtPndpZGUgIT0gTlVMTCkKKyAgICAgICAgYXR0ciA9IEdldEZpbGVBdHRyaWJ1dGVzVyhwYXRoLT53aWRlKTsKICAgICBlbHNlCi0gICAgICAgIGF0dHIgPSBHZXRGaWxlQXR0cmlidXRlc0EocGF0aC5uYXJyb3cpOworICAgICAgICBhdHRyID0gR2V0RmlsZUF0dHJpYnV0ZXNBKHBhdGgtPm5hcnJvdyk7CiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKIAogICAgIC8qCkBAIC0yNTc4LDcgKzI3MDYsNyBAQAogICAgICAqIChEaXJlY3RvcmllcyBjYW5ub3QgYmUgcmVhZC1vbmx5IG9uIFdpbmRvd3MuKQogICAgICovCiAgICAgcmV0dXJuX3ZhbHVlID0gUHlCb29sX0Zyb21Mb25nKAotICAgICAgICAoYXR0ciAhPSAweEZGRkZGRkZGKSAmJgorICAgICAgICAoYXR0ciAhPSBJTlZBTElEX0ZJTEVfQVRUUklCVVRFUykgJiYKICAgICAgICAgICAgICghKG1vZGUgJiAyKSB8fAogICAgICAgICAgICAgIShhdHRyICYgRklMRV9BVFRSSUJVVEVfUkVBRE9OTFkpIHx8CiAgICAgICAgICAgICAoYXR0ciAmIEZJTEVfQVRUUklCVVRFX0RJUkVDVE9SWSkpKTsKQEAgLTI1OTQsMTEgKzI3MjIsMTEgQEAKICAgICAgICAgICAgIGZsYWdzIHw9IEFUX1NZTUxJTktfTk9GT0xMT1c7CiAgICAgICAgIGlmIChlZmZlY3RpdmVfaWRzKQogICAgICAgICAgICAgZmxhZ3MgfD0gQVRfRUFDQ0VTUzsKLSAgICAgICAgcmVzdWx0ID0gZmFjY2Vzc2F0KGRpcl9mZCwgcGF0aC5uYXJyb3csIG1vZGUsIGZsYWdzKTsKKyAgICAgICAgcmVzdWx0ID0gZmFjY2Vzc2F0KGRpcl9mZCwgcGF0aC0+bmFycm93LCBtb2RlLCBmbGFncyk7CiAgICAgfQogICAgIGVsc2UKICNlbmRpZgotICAgICAgICByZXN1bHQgPSBhY2Nlc3MocGF0aC5uYXJyb3csIG1vZGUpOworICAgICAgICByZXN1bHQgPSBhY2Nlc3MocGF0aC0+bmFycm93LCBtb2RlKTsKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogICAgIHJldHVybl92YWx1ZSA9IFB5Qm9vbF9Gcm9tTG9uZyghcmVzdWx0KTsKICNlbmRpZgpAQCAtMjYwNiw3ICsyNzM0LDYgQEAKICNpZm5kZWYgSEFWRV9GQUNDRVNTQVQKIGV4aXQ6CiAjZW5kaWYKLSAgICBwYXRoX2NsZWFudXAoJnBhdGgpOwogICAgIHJldHVybiByZXR1cm5fdmFsdWU7CiB9CiAKQEAgLTI2MjMsMzUgKzI3NTAsNjggQEAKICNkZWZpbmUgWF9PSyAxCiAjZW5kaWYKIAorCiAjaWZkZWYgSEFWRV9UVFlOQU1FCi1QeURvY19TVFJWQVIocG9zaXhfdHR5bmFtZV9fZG9jX18sCi0idHR5bmFtZShmZCkgLT4gc3RyaW5nXG5cblwKLVJldHVybiB0aGUgbmFtZSBvZiB0aGUgdGVybWluYWwgZGV2aWNlIGNvbm5lY3RlZCB0byAnZmQnLiIpOworCisvKltjbGluaWMgaW5wdXRdCitvcy50dHluYW1lIC0+IERlY29kZUZTRGVmYXVsdAorCisgICAgZmQ6IGludAorICAgICAgICBJbnRlZ2VyIGZpbGUgZGVzY3JpcHRvciBoYW5kbGUuCisKKyAgICAvCisKK1JldHVybiB0aGUgbmFtZSBvZiB0aGUgdGVybWluYWwgZGV2aWNlIGNvbm5lY3RlZCB0byAnZmQnLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitQeURvY19TVFJWQVIob3NfdHR5bmFtZV9fZG9jX18sCisidHR5bmFtZSgkbW9kdWxlLCBmZCwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiB0aGUgbmFtZSBvZiB0aGUgdGVybWluYWwgZGV2aWNlIGNvbm5lY3RlZCB0byBcJ2ZkXCcuXG4iCisiXG4iCisiICBmZFxuIgorIiAgICBJbnRlZ2VyIGZpbGUgZGVzY3JpcHRvciBoYW5kbGUuIik7CisKKyNkZWZpbmUgT1NfVFRZTkFNRV9NRVRIT0RERUYgICAgXAorICAgIHsidHR5bmFtZSIsIChQeUNGdW5jdGlvbilvc190dHluYW1lLCBNRVRIX1ZBUkFSR1MsIG9zX3R0eW5hbWVfX2RvY19ffSwKKworc3RhdGljIGNoYXIgKgorb3NfdHR5bmFtZV9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIGludCBmZCk7CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1wb3NpeF90dHluYW1lKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK29zX3R0eW5hbWUoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgaW50IGlkOworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIGludCBmZDsKKyAgICBjaGFyICpfcmV0dXJuX3ZhbHVlOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJpOnR0eW5hbWUiLAorICAgICAgICAmZmQpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgX3JldHVybl92YWx1ZSA9IG9zX3R0eW5hbWVfaW1wbChtb2R1bGUsIGZkKTsKKyAgICBpZiAoX3JldHVybl92YWx1ZSA9PSBOVUxMKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdChfcmV0dXJuX3ZhbHVlKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitzdGF0aWMgY2hhciAqCitvc190dHluYW1lX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgaW50IGZkKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWNlZTdiYzRjZmZlYzAxYTIgaW5wdXQ9NWY3MmNhODNlNzZiM2I0NV0qLworewogICAgIGNoYXIgKnJldDsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaTp0dHluYW1lIiwgJmlkKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSNpZiBkZWZpbmVkKF9fVk1TKQotICAgIC8qIGZpbGUgZGVzY3JpcHRvciAwIG9ubHksIHRoZSBkZWZhdWx0IGlucHV0IGRldmljZSAoc3RkaW4pICovCi0gICAgaWYgKGlkID09IDApIHsKLSAgICAgICAgcmV0ID0gdHR5bmFtZSgpOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgcmV0ID0gTlVMTDsKLSAgICB9Ci0jZWxzZQotICAgIHJldCA9IHR0eW5hbWUoaWQpOwotI2VuZGlmCisgICAgcmV0ID0gdHR5bmFtZShmZCk7CiAgICAgaWYgKHJldCA9PSBOVUxMKQotICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKLSAgICByZXR1cm4gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdChyZXQpOworICAgICAgICBwb3NpeF9lcnJvcigpOworICAgIHJldHVybiByZXQ7CiB9CisjZWxzZQorI2RlZmluZSBPU19UVFlOQU1FX01FVEhPRERFRgogI2VuZGlmCiAKICNpZmRlZiBIQVZFX0NURVJNSUQKQEAgLTI2OTMsNiArMjg1Myw3IEBACiAgICAgc3RhdGljIGNoYXIgKmtleXdvcmRzW10gPSB7InBhdGgiLCBOVUxMfTsKIAogICAgIG1lbXNldCgmcGF0aCwgMCwgc2l6ZW9mKHBhdGgpKTsKKyAgICBwYXRoLmZ1bmN0aW9uX25hbWUgPSAiY2hkaXIiOwogI2lmZGVmIEhBVkVfRkNIRElSCiAgICAgcGF0aC5hbGxvd19mZCA9IDE7CiAjZW5kaWYKQEAgLTI3MDgsOCArMjg2OSw2IEBACiAgICAgZWxzZQogICAgICAgICByZXN1bHQgPSB3aW4zMl9jaGRpcihwYXRoLm5hcnJvdyk7CiAgICAgcmVzdWx0ID0gIXJlc3VsdDsgLyogb24gdW5peCwgc3VjY2VzcyA9IDAsIG9uIHdpbmRvd3MsIHN1Y2Nlc3MgPSAhMCAqLwotI2VsaWYgZGVmaW5lZChQWU9TX09TMikgJiYgZGVmaW5lZChQWUNDX0dDQykKLSAgICByZXN1bHQgPSBfY2hkaXIyKHBhdGgubmFycm93KTsKICNlbHNlCiAjaWZkZWYgSEFWRV9GQ0hESVIKICAgICBpZiAocGF0aC5mZCAhPSAtMSkKQEAgLTI3MjEsNyArMjg4MCw3IEBACiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKIAogICAgIGlmIChyZXN1bHQpIHsKLSAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9lcnJvcigiY2hkaXIiLCAmcGF0aCk7CisgICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfZXJyb3IoJnBhdGgpOwogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogCkBAIC0yNzg1LDYgKzI5NDQsNyBAQAogI2VuZGlmCiAKICAgICBtZW1zZXQoJnBhdGgsIDAsIHNpemVvZihwYXRoKSk7CisgICAgcGF0aC5mdW5jdGlvbl9uYW1lID0gImNobW9kIjsKICNpZmRlZiBIQVZFX0ZDSE1PRAogICAgIHBhdGguYWxsb3dfZmQgPSAxOwogI2VuZGlmCkBAIC0yODEwLDcgKzI5NzAsNyBAQAogICAgICAgICBhdHRyID0gR2V0RmlsZUF0dHJpYnV0ZXNXKHBhdGgud2lkZSk7CiAgICAgZWxzZQogICAgICAgICBhdHRyID0gR2V0RmlsZUF0dHJpYnV0ZXNBKHBhdGgubmFycm93KTsKLSAgICBpZiAoYXR0ciA9PSAweEZGRkZGRkZGKQorICAgIGlmIChhdHRyID09IElOVkFMSURfRklMRV9BVFRSSUJVVEVTKQogICAgICAgICByZXN1bHQgPSAwOwogICAgIGVsc2UgewogICAgICAgICBpZiAobW9kZSAmIF9TX0lXUklURSkKQEAgLTI4MjUsNyArMjk4NSw3IEBACiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKIAogICAgIGlmICghcmVzdWx0KSB7Ci0gICAgICAgIHJldHVybl92YWx1ZSA9IHdpbjMyX2Vycm9yX29iamVjdCgiY2htb2QiLCBwYXRoLm9iamVjdCk7CisgICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfZXJyb3IoJnBhdGgpOwogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogI2Vsc2UgLyogTVNfV0lORE9XUyAqLwpAQCAtMjg3OSw3ICszMDM5LDcgQEAKICAgICAgICAgfQogICAgICAgICBlbHNlCiAjZW5kaWYKLSAgICAgICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfZXJyb3IoImNobW9kIiwgJnBhdGgpOworICAgICAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9lcnJvcigmcGF0aCk7CiAgICAgICAgIGdvdG8gZXhpdDsKICAgICB9CiAjZW5kaWYKQEAgLTI5MjMsMjAgKzMwODMsMjMgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBwb3NpeF9sY2htb2QoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIFB5T2JqZWN0ICpvcGF0aDsKLSAgICBjaGFyICpwYXRoOworICAgIHBhdGhfdCBwYXRoOwogICAgIGludCBpOwogICAgIGludCByZXM7Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPJmk6bGNobW9kIiwgUHlVbmljb2RlX0ZTQ29udmVydGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmb3BhdGgsICZpKSkKKyAgICBtZW1zZXQoJnBhdGgsIDAsIHNpemVvZihwYXRoKSk7CisgICAgcGF0aC5mdW5jdGlvbl9uYW1lID0gImxjaG1vZCI7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPJmk6bGNobW9kIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aF9jb252ZXJ0ZXIsICZwYXRoLCAmaSkpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIHBhdGggPSBQeUJ5dGVzX0FzU3RyaW5nKG9wYXRoKTsKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgcmVzID0gbGNobW9kKHBhdGgsIGkpOworICAgIHJlcyA9IGxjaG1vZChwYXRoLm5hcnJvdywgaSk7CiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLSAgICBpZiAocmVzIDwgMCkKLSAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yX3dpdGhfYWxsb2NhdGVkX2ZpbGVuYW1lKG9wYXRoKTsKLSAgICBQeV9ERUNSRUYob3BhdGgpOworICAgIGlmIChyZXMgPCAwKSB7CisgICAgICAgIHBhdGhfZXJyb3IoJnBhdGgpOworICAgICAgICBwYXRoX2NsZWFudXAoJnBhdGgpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcGF0aF9jbGVhbnVwKCZwYXRoKTsKICAgICBQeV9SRVRVUk5fTk9ORTsKIH0KICNlbmRpZiAvKiBIQVZFX0xDSE1PRCAqLwpAQCAtMjk2NCw2ICszMTI3LDcgQEAKICAgICBzdGF0aWMgY2hhciAqa2V5d29yZHNbXSA9IHsicGF0aCIsICJmbGFncyIsICJmb2xsb3dfc3ltbGlua3MiLCBOVUxMfTsKIAogICAgIG1lbXNldCgmcGF0aCwgMCwgc2l6ZW9mKHBhdGgpKTsKKyAgICBwYXRoLmZ1bmN0aW9uX25hbWUgPSAiY2hmbGFncyI7CiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiTyZrfCRpOmNoZmxhZ3MiLCBrZXl3b3JkcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aF9jb252ZXJ0ZXIsICZwYXRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAmZmxhZ3MsICZmb2xsb3dfc3ltbGlua3MpKQpAQCAtMjk4NCw3ICszMTQ4LDcgQEAKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCiAgICAgaWYgKHJlc3VsdCkgewotICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX3Bvc2l4X2Vycm9yKCJjaGZsYWdzIiwgJnBhdGgpOworICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX2Vycm9yKCZwYXRoKTsKICAgICAgICAgZ290byBleGl0OwogICAgIH0KIApAQCAtMzAwNywyMiArMzE3MSwyNCBAQAogc3RhdGljIFB5T2JqZWN0ICoKIHBvc2l4X2xjaGZsYWdzKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICBQeU9iamVjdCAqb3BhdGg7Ci0gICAgY2hhciAqcGF0aDsKKyAgICBwYXRoX3QgcGF0aDsKICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwogICAgIGludCByZXM7CisgICAgbWVtc2V0KCZwYXRoLCAwLCBzaXplb2YocGF0aCkpOworICAgIHBhdGguZnVuY3Rpb25fbmFtZSA9ICJsY2hmbGFncyI7CiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPJms6bGNoZmxhZ3MiLAotICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfRlNDb252ZXJ0ZXIsICZvcGF0aCwgJmZsYWdzKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aF9jb252ZXJ0ZXIsICZwYXRoLCAmZmxhZ3MpKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBwYXRoID0gUHlCeXRlc19Bc1N0cmluZyhvcGF0aCk7CiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgIHJlcyA9IGxjaGZsYWdzKHBhdGgsIGZsYWdzKTsKKyAgICByZXMgPSBsY2hmbGFncyhwYXRoLm5hcnJvdywgZmxhZ3MpOwogICAgIFB5X0VORF9BTExPV19USFJFQURTCi0gICAgaWYgKHJlcyA8IDApCi0gICAgICAgIHJldHVybiBwb3NpeF9lcnJvcl93aXRoX2FsbG9jYXRlZF9maWxlbmFtZShvcGF0aCk7Ci0gICAgUHlfREVDUkVGKG9wYXRoKTsKLSAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgcmV0dXJuIFB5X05vbmU7CisgICAgaWYgKHJlcyA8IDApIHsKKyAgICAgICAgcGF0aF9lcnJvcigmcGF0aCk7CisgICAgICAgIHBhdGhfY2xlYW51cCgmcGF0aCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBwYXRoX2NsZWFudXAoJnBhdGgpOworICAgIFB5X1JFVFVSTl9OT05FOwogfQogI2VuZGlmIC8qIEhBVkVfTENIRkxBR1MgKi8KIApAQCAtMzAzNCw3ICszMjAwLDcgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBwb3NpeF9jaHJvb3QoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIHJldHVybiBwb3NpeF8xc3RyKGFyZ3MsICJPJjpjaHJvb3QiLCBjaHJvb3QpOworICAgIHJldHVybiBwb3NpeF8xc3RyKCJjaHJvb3QiLCBhcmdzLCAiTyY6Y2hyb290IiwgY2hyb290KTsKIH0KICNlbmRpZgogCkBAIC0zMTE2LDYgKzMyODIsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmb2xsb3dfc3ltbGlua3MiLCBOVUxMfTsKIAogICAgIG1lbXNldCgmcGF0aCwgMCwgc2l6ZW9mKHBhdGgpKTsKKyAgICBwYXRoLmZ1bmN0aW9uX25hbWUgPSAiY2hvd24iOwogI2lmZGVmIEhBVkVfRkNIT1dOCiAgICAgcGF0aC5hbGxvd19mZCA9IDE7CiAjZW5kaWYKQEAgLTMxNzMsNyArMzM0MCw3IEBACiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKIAogICAgIGlmIChyZXN1bHQpIHsKLSAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9wb3NpeF9lcnJvcigiY2hvd24iLCAmcGF0aCk7CisgICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfZXJyb3IoJnBhdGgpOwogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogCkBAIC0zMjIyLDQ5ICszMzg5LDU0IEBACiBzdGF0aWMgUHlPYmplY3QgKgogcG9zaXhfbGNob3duKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICBQeU9iamVjdCAqb3BhdGg7Ci0gICAgY2hhciAqcGF0aDsKKyAgICBwYXRoX3QgcGF0aDsKICAgICB1aWRfdCB1aWQ7CiAgICAgZ2lkX3QgZ2lkOwogICAgIGludCByZXM7CisgICAgbWVtc2V0KCZwYXRoLCAwLCBzaXplb2YocGF0aCkpOworICAgIHBhdGguZnVuY3Rpb25fbmFtZSA9ICJsY2hvd24iOwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTyZPJk8mOmxjaG93biIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9GU0NvbnZlcnRlciwgJm9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoX2NvbnZlcnRlciwgJnBhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QeV9VaWRfQ29udmVydGVyLCAmdWlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfUHlfR2lkX0NvbnZlcnRlciwgJmdpZCkpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIHBhdGggPSBQeUJ5dGVzX0FzU3RyaW5nKG9wYXRoKTsKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgcmVzID0gbGNob3duKHBhdGgsIHVpZCwgZ2lkKTsKKyAgICByZXMgPSBsY2hvd24ocGF0aC5uYXJyb3csIHVpZCwgZ2lkKTsKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotICAgIGlmIChyZXMgPCAwKQotICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3Jfd2l0aF9hbGxvY2F0ZWRfZmlsZW5hbWUob3BhdGgpOwotICAgIFB5X0RFQ1JFRihvcGF0aCk7CisgICAgaWYgKHJlcyA8IDApIHsKKyAgICAgICAgcGF0aF9lcnJvcigmcGF0aCk7CisgICAgICAgIHBhdGhfY2xlYW51cCgmcGF0aCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBwYXRoX2NsZWFudXAoJnBhdGgpOwogICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKICAgICByZXR1cm4gUHlfTm9uZTsKIH0KICNlbmRpZiAvKiBIQVZFX0xDSE9XTiAqLwogCiAKLSNpZmRlZiBIQVZFX0dFVENXRAogc3RhdGljIFB5T2JqZWN0ICoKIHBvc2l4X2dldGN3ZChpbnQgdXNlX2J5dGVzKQogewotICAgIGNoYXIgYnVmWzEwMjZdOwotICAgIGNoYXIgKnJlczsKKyAgICBjaGFyICpidWYsICp0bXBidWY7CisgICAgY2hhciAqY3dkOworICAgIGNvbnN0IHNpemVfdCBjaHVuayA9IDEwMjQ7CisgICAgc2l6ZV90IGJ1ZmxlbiA9IDA7CisgICAgUHlPYmplY3QgKm9iajsKIAogI2lmZGVmIE1TX1dJTkRPV1MKICAgICBpZiAoIXVzZV9ieXRlcykgewotICAgICAgICB3Y2hhcl90IHdidWZbMTAyNl07CisgICAgICAgIHdjaGFyX3Qgd2J1ZltNQVhQQVRITEVOXTsKICAgICAgICAgd2NoYXJfdCAqd2J1ZjIgPSB3YnVmOwogICAgICAgICBQeU9iamVjdCAqcmVzb2JqOwogICAgICAgICBEV09SRCBsZW47CiAgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICAgICAgbGVuID0gR2V0Q3VycmVudERpcmVjdG9yeVcoc2l6ZW9mIHdidWYvIHNpemVvZiB3YnVmWzBdLCB3YnVmKTsKKyAgICAgICAgbGVuID0gR2V0Q3VycmVudERpcmVjdG9yeVcoUHlfQVJSQVlfTEVOR1RIKHdidWYpLCB3YnVmKTsKICAgICAgICAgLyogSWYgdGhlIGJ1ZmZlciBpcyBsYXJnZSBlbm91Z2gsIGxlbiBkb2VzIG5vdCBpbmNsdWRlIHRoZQogICAgICAgICAgICB0ZXJtaW5hdGluZyBcMC4gSWYgdGhlIGJ1ZmZlciBpcyB0b28gc21hbGwsIGxlbiBpbmNsdWRlcwogICAgICAgICAgICB0aGUgc3BhY2UgbmVlZGVkIGZvciB0aGUgdGVybWluYXRvci4gKi8KLSAgICAgICAgaWYgKGxlbiA+PSBzaXplb2Ygd2J1Zi8gc2l6ZW9mIHdidWZbMF0pIHsKLSAgICAgICAgICAgIHdidWYyID0gbWFsbG9jKGxlbiAqIHNpemVvZih3Y2hhcl90KSk7CisgICAgICAgIGlmIChsZW4gPj0gUHlfQVJSQVlfTEVOR1RIKHdidWYpKSB7CisgICAgICAgICAgICB3YnVmMiA9IFB5TWVtX1Jhd01hbGxvYyhsZW4gKiBzaXplb2Yod2NoYXJfdCkpOwogICAgICAgICAgICAgaWYgKHdidWYyKQogICAgICAgICAgICAgICAgIGxlbiA9IEdldEN1cnJlbnREaXJlY3RvcnlXKGxlbiwgd2J1ZjIpOwogICAgICAgICB9CkBAIC0zMjc0LDExICszNDQ2LDEzIEBACiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQogICAgICAgICBpZiAoIWxlbikgewotICAgICAgICAgICAgaWYgKHdidWYyICE9IHdidWYpIGZyZWUod2J1ZjIpOwotICAgICAgICAgICAgcmV0dXJuIHdpbjMyX2Vycm9yKCJnZXRjd2R1IiwgTlVMTCk7CisgICAgICAgICAgICBpZiAod2J1ZjIgIT0gd2J1ZikKKyAgICAgICAgICAgICAgICBQeU1lbV9SYXdGcmVlKHdidWYyKTsKKyAgICAgICAgICAgIHJldHVybiBQeUVycl9TZXRGcm9tV2luZG93c0VycigwKTsKICAgICAgICAgfQogICAgICAgICByZXNvYmogPSBQeVVuaWNvZGVfRnJvbVdpZGVDaGFyKHdidWYyLCBsZW4pOwotICAgICAgICBpZiAod2J1ZjIgIT0gd2J1ZikgZnJlZSh3YnVmMik7CisgICAgICAgIGlmICh3YnVmMiAhPSB3YnVmKQorICAgICAgICAgICAgUHlNZW1fUmF3RnJlZSh3YnVmMik7CiAgICAgICAgIHJldHVybiByZXNvYmo7CiAgICAgfQogCkBAIC0zMjg2LDE4ICszNDYwLDMxIEBACiAgICAgICAgIHJldHVybiBOVUxMOwogI2VuZGlmCiAKKyAgICBidWYgPSBjd2QgPSBOVUxMOwogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKSAmJiBkZWZpbmVkKFBZQ0NfR0NDKQotICAgIHJlcyA9IF9nZXRjd2QyKGJ1Ziwgc2l6ZW9mIGJ1Zik7Ci0jZWxzZQotICAgIHJlcyA9IGdldGN3ZChidWYsIHNpemVvZiBidWYpOwotI2VuZGlmCisgICAgZG8geworICAgICAgICBidWZsZW4gKz0gY2h1bms7CisgICAgICAgIHRtcGJ1ZiA9IFB5TWVtX1Jhd1JlYWxsb2MoYnVmLCBidWZsZW4pOworICAgICAgICBpZiAodG1wYnVmID09IE5VTEwpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBidWYgPSB0bXBidWY7CisgICAgICAgIGN3ZCA9IGdldGN3ZChidWYsIGJ1Zmxlbik7CisgICAgfSB3aGlsZSAoY3dkID09IE5VTEwgJiYgZXJybm8gPT0gRVJBTkdFKTsKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotICAgIGlmIChyZXMgPT0gTlVMTCkKKworICAgIGlmIChjd2QgPT0gTlVMTCkgeworICAgICAgICBQeU1lbV9SYXdGcmVlKGJ1Zik7CiAgICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOworICAgIH0KKwogICAgIGlmICh1c2VfYnl0ZXMpCi0gICAgICAgIHJldHVybiBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKGJ1Ziwgc3RybGVuKGJ1ZikpOwotICAgIHJldHVybiBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0KGJ1Zik7CisgICAgICAgIG9iaiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoYnVmLCBzdHJsZW4oYnVmKSk7CisgICAgZWxzZQorICAgICAgICBvYmogPSBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0KGJ1Zik7CisgICAgUHlNZW1fUmF3RnJlZShidWYpOworCisgICAgcmV0dXJuIG9iajsKIH0KIAogUHlEb2NfU1RSVkFSKHBvc2l4X2dldGN3ZF9fZG9jX18sCkBAIC0zMzE5LDcgKzM1MDYsNiBAQAogewogICAgIHJldHVybiBwb3NpeF9nZXRjd2QoMSk7CiB9Ci0jZW5kaWYKIAogI2lmICgoIWRlZmluZWQoSEFWRV9MSU5LKSkgJiYgZGVmaW5lZChNU19XSU5ET1dTKSkKICNkZWZpbmUgSEFWRV9MSU5LIDEKQEAgLTMzNTgsNiArMzU0NCw4IEBACiAKICAgICBtZW1zZXQoJnNyYywgMCwgc2l6ZW9mKHNyYykpOwogICAgIG1lbXNldCgmZHN0LCAwLCBzaXplb2YoZHN0KSk7CisgICAgc3JjLmZ1bmN0aW9uX25hbWUgPSAibGluayI7CisgICAgZHN0LmZ1bmN0aW9uX25hbWUgPSAibGluayI7CiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiTyZPJnxPJk8mcDpsaW5rIiwga2V5d29yZHMsCiAgICAgICAgICAgICBwYXRoX2NvbnZlcnRlciwgJnNyYywKICAgICAgICAgICAgIHBhdGhfY29udmVydGVyLCAmZHN0LApAQCAtMzM4OCw3ICszNTc2LDcgQEAKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCiAgICAgaWYgKCFyZXN1bHQpIHsKLSAgICAgICAgcmV0dXJuX3ZhbHVlID0gd2luMzJfZXJyb3Jfb2JqZWN0KCJsaW5rIiwgZHN0Lm9iamVjdCk7CisgICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfZXJyb3IyKCZzcmMsICZkc3QpOwogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogI2Vsc2UKQEAgLTM0MDYsNyArMzU5NCw3IEBACiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKIAogICAgIGlmIChyZXN1bHQpIHsKLSAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9lcnJvcigibGluayIsICZkc3QpOworICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX2Vycm9yMigmc3JjLCAmZHN0KTsKICAgICAgICAgZ290byBleGl0OwogICAgIH0KICNlbmRpZgpAQCAtMzQzNiw3MiArMzYyNCwzNSBAQAogICB0aGUgZmlsZSBkZXNjcmlwdG9yIG11c3QgcmVmZXIgdG8gYSBkaXJlY3RvcnkuXG5cCiAgIElmIHRoaXMgZnVuY3Rpb25hbGl0eSBpcyB1bmF2YWlsYWJsZSwgdXNpbmcgaXQgcmFpc2VzIE5vdEltcGxlbWVudGVkRXJyb3IuIik7CiAKLXN0YXRpYyBQeU9iamVjdCAqCi1wb3NpeF9saXN0ZGlyKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKLXsKLSAgICBwYXRoX3QgcGF0aDsKLSAgICBQeU9iamVjdCAqbGlzdCA9IE5VTEw7Ci0gICAgc3RhdGljIGNoYXIgKmtleXdvcmRzW10gPSB7InBhdGgiLCBOVUxMfTsKLSNpZmRlZiBIQVZFX0ZET1BFTkRJUgotICAgIGludCBmZCA9IC0xOwotI2VuZGlmIC8qIEhBVkVfRkRPUEVORElSICovCi0KICNpZiBkZWZpbmVkKE1TX1dJTkRPV1MpICYmICFkZWZpbmVkKEhBVkVfT1BFTkRJUikKK3N0YXRpYyBQeU9iamVjdCAqCitfbGlzdGRpcl93aW5kb3dzX25vX29wZW5kaXIocGF0aF90ICpwYXRoLCBQeU9iamVjdCAqbGlzdCkKK3sKKyAgICBzdGF0aWMgY2hhciAqa2V5d29yZHNbXSA9IHsicGF0aCIsIE5VTEx9OwogICAgIFB5T2JqZWN0ICp2OwogICAgIEhBTkRMRSBoRmluZEZpbGUgPSBJTlZBTElEX0hBTkRMRV9WQUxVRTsKICAgICBCT09MIHJlc3VsdDsKICAgICBXSU4zMl9GSU5EX0RBVEEgRmlsZURhdGE7Ci0gICAgY2hhciBuYW1lYnVmW01BWF9QQVRIKzVdOyAvKiBPdmVyYWxsb2NhdGUgZm9yIFxcKi4qXDAgKi8KKyAgICBjaGFyIG5hbWVidWZbTUFYX1BBVEgrNF07IC8qIE92ZXJhbGxvY2F0ZSBmb3IgIlwqLioiICovCiAgICAgY2hhciAqYnVmcHRyID0gbmFtZWJ1ZjsKICAgICAvKiBvbmx5IGNsYWltIHRvIGhhdmUgc3BhY2UgZm9yIE1BWF9QQVRIICovCi0gICAgUHlfc3NpemVfdCBsZW4gPSBzaXplb2YobmFtZWJ1ZiktNTsKKyAgICBQeV9zc2l6ZV90IGxlbiA9IFB5X0FSUkFZX0xFTkdUSChuYW1lYnVmKS00OwogICAgIFB5T2JqZWN0ICpwbyA9IE5VTEw7CiAgICAgd2NoYXJfdCAqd25hbWVidWYgPSBOVUxMOwotI2VsaWYgZGVmaW5lZChQWU9TX09TMikKLSNpZm5kZWYgTUFYX1BBVEgKLSNkZWZpbmUgTUFYX1BBVEggICAgQ0NITUFYUEFUSAotI2VuZGlmCi0gICAgY2hhciAqcHQ7Ci0gICAgUHlPYmplY3QgKnY7Ci0gICAgY2hhciBuYW1lYnVmW01BWF9QQVRIKzVdOwotICAgIEhESVIgIGhkaXIgPSAxOwotICAgIFVMT05HIHNyY2hjbnQgPSAxOwotICAgIEZJTEVGSU5EQlVGMyAgIGVwOwotICAgIEFQSVJFVCByYzsKLSNlbHNlCi0gICAgUHlPYmplY3QgKnY7Ci0gICAgRElSICpkaXJwID0gTlVMTDsKLSAgICBzdHJ1Y3QgZGlyZW50ICplcDsKLSAgICBpbnQgcmV0dXJuX3N0cjsgLyogaWYgZmFsc2UsIHJldHVybiBieXRlcyAqLwotI2VuZGlmCiAKLSAgICBtZW1zZXQoJnBhdGgsIDAsIHNpemVvZihwYXRoKSk7Ci0gICAgcGF0aC5udWxsYWJsZSA9IDE7Ci0jaWZkZWYgSEFWRV9GRE9QRU5ESVIKLSAgICBwYXRoLmFsbG93X2ZkID0gMTsKLSAgICBwYXRoLmZkID0gLTE7Ci0jZW5kaWYKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJ8TyY6bGlzdGRpciIsIGtleXdvcmRzLAotICAgICAgICBwYXRoX2NvbnZlcnRlciwgJnBhdGgKLSAgICAgICAgKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICAvKiBYWFggU2hvdWxkIHJlZG8gdGhpcyBwdXR0aW5nIHRoZSAobm93IGZvdXIpIHZlcnNpb25zIG9mIG9wZW5kaXIKLSAgICAgICBpbiBzZXBhcmF0ZSBmaWxlcyBpbnN0ZWFkIG9mIGhhdmluZyB0aGVtIGFsbCBoZXJlLi4uICovCi0jaWYgZGVmaW5lZChNU19XSU5ET1dTKSAmJiAhZGVmaW5lZChIQVZFX09QRU5ESVIpCi0gICAgaWYgKCFwYXRoLm5hcnJvdykgeworICAgIGlmICghcGF0aC0+bmFycm93KSB7CiAgICAgICAgIFdJTjMyX0ZJTkRfREFUQVcgd0ZpbGVEYXRhOwogICAgICAgICB3Y2hhcl90ICpwb193Y2hhcnM7CiAKLSAgICAgICAgaWYgKCFwYXRoLndpZGUpIHsgLyogRGVmYXVsdCBhcmc6ICIuIiAqLworICAgICAgICBpZiAoIXBhdGgtPndpZGUpIHsgLyogRGVmYXVsdCBhcmc6ICIuIiAqLwogICAgICAgICAgICAgcG9fd2NoYXJzID0gTCIuIjsKICAgICAgICAgICAgIGxlbiA9IDE7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwb193Y2hhcnMgPSBwYXRoLndpZGU7Ci0gICAgICAgICAgICBsZW4gPSB3Y3NsZW4ocGF0aC53aWRlKTsKKyAgICAgICAgICAgIHBvX3djaGFycyA9IHBhdGgtPndpZGU7CisgICAgICAgICAgICBsZW4gPSB3Y3NsZW4ocGF0aC0+d2lkZSk7CiAgICAgICAgIH0KICAgICAgICAgLyogVGhlICs1IGlzIHNvIHdlIGNhbiBhcHBlbmQgIlxcKi4qXDAiICovCi0gICAgICAgIHduYW1lYnVmID0gbWFsbG9jKChsZW4gKyA1KSAqIHNpemVvZih3Y2hhcl90KSk7CisgICAgICAgIHduYW1lYnVmID0gUHlNZW1fTmV3KHdjaGFyX3QsIGxlbiArIDUpOwogICAgICAgICBpZiAoIXduYW1lYnVmKSB7CiAgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICAgICAgZ290byBleGl0OwpAQCAtMzUwOSw4ICszNjYwLDggQEAKICAgICAgICAgd2NzY3B5KHduYW1lYnVmLCBwb193Y2hhcnMpOwogICAgICAgICBpZiAobGVuID4gMCkgewogICAgICAgICAgICAgd2NoYXJfdCB3Y2ggPSB3bmFtZWJ1ZltsZW4tMV07Ci0gICAgICAgICAgICBpZiAod2NoICE9IEwnLycgJiYgd2NoICE9IEwnXFwnICYmIHdjaCAhPSBMJzonKQotICAgICAgICAgICAgICAgIHduYW1lYnVmW2xlbisrXSA9IEwnXFwnOworICAgICAgICAgICAgaWYgKHdjaCAhPSBTRVAgJiYgd2NoICE9IEFMVFNFUCAmJiB3Y2ggIT0gTCc6JykKKyAgICAgICAgICAgICAgICB3bmFtZWJ1ZltsZW4rK10gPSBTRVA7CiAgICAgICAgICAgICB3Y3NjcHkod25hbWVidWYgKyBsZW4sIEwiKi4qIik7CiAgICAgICAgIH0KICAgICAgICAgaWYgKChsaXN0ID0gUHlMaXN0X05ldygwKSkgPT0gTlVMTCkgewpAQCAtMzUyNCw4ICszNjc1LDcgQEAKICAgICAgICAgICAgIGlmIChlcnJvciA9PSBFUlJPUl9GSUxFX05PVF9GT1VORCkKICAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CiAgICAgICAgICAgICBQeV9ERUNSRUYobGlzdCk7Ci0gICAgICAgICAgICBsaXN0ID0gTlVMTDsKLSAgICAgICAgICAgIHdpbjMyX2Vycm9yX3VuaWNvZGUoIkZpbmRGaXJzdEZpbGVXIiwgd25hbWVidWYpOworICAgICAgICAgICAgbGlzdCA9IHBhdGhfZXJyb3IocGF0aCk7CiAgICAgICAgICAgICBnb3RvIGV4aXQ7CiAgICAgICAgIH0KICAgICAgICAgZG8gewpAQCAtMzU1NCwxOSArMzcwNCwxOSBAQAogICAgICAgICAgICAgICAgaXQgZ290IHRvIHRoZSBlbmQgb2YgdGhlIGRpcmVjdG9yeS4gKi8KICAgICAgICAgICAgIGlmICghcmVzdWx0ICYmIEdldExhc3RFcnJvcigpICE9IEVSUk9SX05PX01PUkVfRklMRVMpIHsKICAgICAgICAgICAgICAgICBQeV9ERUNSRUYobGlzdCk7Ci0gICAgICAgICAgICAgICAgbGlzdCA9IHdpbjMyX2Vycm9yX3VuaWNvZGUoIkZpbmROZXh0RmlsZVciLCB3bmFtZWJ1Zik7CisgICAgICAgICAgICAgICAgbGlzdCA9IHBhdGhfZXJyb3IocGF0aCk7CiAgICAgICAgICAgICAgICAgZ290byBleGl0OwogICAgICAgICAgICAgfQogICAgICAgICB9IHdoaWxlIChyZXN1bHQgPT0gVFJVRSk7CiAKICAgICAgICAgZ290byBleGl0OwogICAgIH0KLSAgICBzdHJjcHkobmFtZWJ1ZiwgcGF0aC5uYXJyb3cpOwotICAgIGxlbiA9IHBhdGgubGVuZ3RoOworICAgIHN0cmNweShuYW1lYnVmLCBwYXRoLT5uYXJyb3cpOworICAgIGxlbiA9IHBhdGgtPmxlbmd0aDsKICAgICBpZiAobGVuID4gMCkgewogICAgICAgICBjaGFyIGNoID0gbmFtZWJ1ZltsZW4tMV07Ci0gICAgICAgIGlmIChjaCAhPSBTRVAgJiYgY2ggIT0gQUxUU0VQICYmIGNoICE9ICc6JykKLSAgICAgICAgICAgIG5hbWVidWZbbGVuKytdID0gJy8nOworICAgICAgICBpZiAoY2ggIT0gJ1xcJyAmJiBjaCAhPSAnLycgJiYgY2ggIT0gJzonKQorICAgICAgICAgICAgbmFtZWJ1ZltsZW4rK10gPSAnXFwnOwogICAgICAgICBzdHJjcHkobmFtZWJ1ZiArIGxlbiwgIiouKiIpOwogICAgIH0KIApAQCAtMzU4MSw3ICszNzMxLDcgQEAKICAgICAgICAgaWYgKGVycm9yID09IEVSUk9SX0ZJTEVfTk9UX0ZPVU5EKQogICAgICAgICAgICAgZ290byBleGl0OwogICAgICAgICBQeV9ERUNSRUYobGlzdCk7Ci0gICAgICAgIGxpc3QgPSB3aW4zMl9lcnJvcigiRmluZEZpcnN0RmlsZSIsIG5hbWVidWYpOworICAgICAgICBsaXN0ID0gcGF0aF9lcnJvcihwYXRoKTsKICAgICAgICAgZ290byBleGl0OwogICAgIH0KICAgICBkbyB7CkBAIC0zNjA5LDcgKzM3NTksNyBAQAogICAgICAgICAgICBpdCBnb3QgdG8gdGhlIGVuZCBvZiB0aGUgZGlyZWN0b3J5LiAqLwogICAgICAgICBpZiAoIXJlc3VsdCAmJiBHZXRMYXN0RXJyb3IoKSAhPSBFUlJPUl9OT19NT1JFX0ZJTEVTKSB7CiAgICAgICAgICAgICBQeV9ERUNSRUYobGlzdCk7Ci0gICAgICAgICAgICBsaXN0ID0gd2luMzJfZXJyb3IoIkZpbmROZXh0RmlsZSIsIG5hbWVidWYpOworICAgICAgICAgICAgbGlzdCA9IHBhdGhfZXJyb3IocGF0aCk7CiAgICAgICAgICAgICBnb3RvIGV4aXQ7CiAgICAgICAgIH0KICAgICB9IHdoaWxlIChyZXN1bHQgPT0gVFJVRSk7CkBAIC0zNjE5LDkyICszNzY5LDM1IEBACiAgICAgICAgIGlmIChGaW5kQ2xvc2UoaEZpbmRGaWxlKSA9PSBGQUxTRSkgewogICAgICAgICAgICAgaWYgKGxpc3QgIT0gTlVMTCkgewogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihsaXN0KTsKLSAgICAgICAgICAgICAgICBsaXN0ID0gd2luMzJfZXJyb3Jfb2JqZWN0KCJGaW5kQ2xvc2UiLCBwYXRoLm9iamVjdCk7CisgICAgICAgICAgICAgICAgbGlzdCA9IHBhdGhfZXJyb3IocGF0aCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgaWYgKHduYW1lYnVmKQotICAgICAgICBmcmVlKHduYW1lYnVmKTsKLSAgICBwYXRoX2NsZWFudXAoJnBhdGgpOworICAgIFB5TWVtX0ZyZWUod25hbWVidWYpOwogCiAgICAgcmV0dXJuIGxpc3Q7Cit9ICAvKiBlbmQgb2YgX2xpc3RkaXJfd2luZG93c19ub19vcGVuZGlyICovCiAKLSNlbGlmIGRlZmluZWQoUFlPU19PUzIpCi0gICAgaWYgKHBhdGgubGVuZ3RoID49IE1BWF9QQVRIKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAicGF0aCB0b28gbG9uZyIpOwotICAgICAgICBnb3RvIGV4aXQ7Ci0gICAgfQotICAgIHN0cmNweShuYW1lYnVmLCBwYXRoLm5hcnJvdyk7Ci0gICAgZm9yIChwdCA9IG5hbWVidWY7ICpwdDsgcHQrKykKLSAgICAgICAgaWYgKCpwdCA9PSBBTFRTRVApCi0gICAgICAgICAgICAqcHQgPSBTRVA7Ci0gICAgaWYgKG5hbWVidWZbbGVuLTFdICE9IFNFUCkKLSAgICAgICAgbmFtZWJ1ZltsZW4rK10gPSBTRVA7Ci0gICAgc3RyY3B5KG5hbWVidWYgKyBsZW4sICIqLioiKTsKKyNlbHNlICAvKiB0aHVzIFBPU0lYLCBpZTogbm90IChNU19XSU5ET1dTIGFuZCBub3QgSEFWRV9PUEVORElSKSAqLwogCi0gICAgaWYgKChsaXN0ID0gUHlMaXN0X05ldygwKSkgPT0gTlVMTCkgewotICAgICAgICBnb3RvIGV4aXQ7Ci0gICAgfQotCi0gICAgcmMgPSBEb3NGaW5kRmlyc3QobmFtZWJ1ZiwgICAgICAgICAvKiBXaWxkY2FyZCBQYXR0ZXJuIHRvIE1hdGNoICovCi0gICAgICAgICAgICAgICAgICAgICAgJmhkaXIsICAgICAgICAgICAvKiBIYW5kbGUgdG8gVXNlIFdoaWxlIFNlYXJjaCBEaXJlY3RvcnkgKi8KLSAgICAgICAgICAgICAgICAgICAgICBGSUxFX1JFQURPTkxZIHwgRklMRV9ISURERU4gfCBGSUxFX1NZU1RFTSB8IEZJTEVfRElSRUNUT1JZLAotICAgICAgICAgICAgICAgICAgICAgICZlcCwgc2l6ZW9mKGVwKSwgLyogU3RydWN0dXJlIHRvIFJlY2VpdmUgRGlyZWN0b3J5IEVudHJ5ICovCi0gICAgICAgICAgICAgICAgICAgICAgJnNyY2hjbnQsICAgICAgICAvKiBNYXggYW5kIEFjdHVhbCBDb3VudCBvZiBFbnRyaWVzIFBlciBJdGVyYXRpb24gKi8KLSAgICAgICAgICAgICAgICAgICAgICBGSUxfU1RBTkRBUkQpOyAgIC8qIEZvcm1hdCBvZiBFbnRyeSAoRUFzIG9yIE5vdCkgKi8KLQotICAgIGlmIChyYyAhPSBOT19FUlJPUikgewotICAgICAgICBlcnJubyA9IEVOT0VOVDsKLSAgICAgICAgUHlfREVDUkVGKGxpc3QpOwotICAgICAgICBsaXN0ID0gcG9zaXhfZXJyb3Jfd2l0aF9maWxlbmFtZShwYXRoLm5hcnJvdyk7Ci0gICAgICAgIGdvdG8gZXhpdDsKLSAgICB9Ci0KLSAgICBpZiAoc3JjaGNudCA+IDApIHsgLyogSWYgRGlyZWN0b3J5IGlzIE5PVCBUb3RhbGx5IEVtcHR5LCAqLwotICAgICAgICBkbyB7Ci0gICAgICAgICAgICBpZiAoZXAuYWNoTmFtZVswXSA9PSAnLicKLSAgICAgICAgICAgICYmIChlcC5hY2hOYW1lWzFdID09ICdcMCcgfHwgKGVwLmFjaE5hbWVbMV0gPT0gJy4nICYmIGVwLmFjaE5hbWVbMl0gPT0gJ1wwJykpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAvKiBTa2lwIE92ZXIgIi4iIGFuZCAiLi4iIE5hbWVzICovCi0KLSAgICAgICAgICAgIHN0cmNweShuYW1lYnVmLCBlcC5hY2hOYW1lKTsKLQotICAgICAgICAgICAgLyogTGVhdmUgQ2FzZSBvZiBOYW1lIEFsb25lIC0tIEluIE5hdGl2ZSBGb3JtICovCi0gICAgICAgICAgICAvKiAoUmVtb3ZlZCBGb3JjZWQgTG93ZXJjYXNpbmcgQ29kZSkgKi8KLQotICAgICAgICAgICAgdiA9IFB5Qnl0ZXNfRnJvbVN0cmluZyhuYW1lYnVmKTsKLSAgICAgICAgICAgIGlmICh2ID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYobGlzdCk7Ci0gICAgICAgICAgICAgICAgbGlzdCA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoUHlMaXN0X0FwcGVuZChsaXN0LCB2KSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihsaXN0KTsKLSAgICAgICAgICAgICAgICBsaXN0ID0gTlVMTDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgfSB3aGlsZSAoRG9zRmluZE5leHQoaGRpciwgJmVwLCBzaXplb2YoZXApLCAmc3JjaGNudCkgPT0gTk9fRVJST1IgJiYgc3JjaGNudCA+IDApOwotICAgIH0KLQotZXhpdDoKLSAgICBwYXRoX2NsZWFudXAoJnBhdGgpOwotCi0gICAgcmV0dXJuIGxpc3Q7Ci0jZWxzZQorc3RhdGljIFB5T2JqZWN0ICoKK19wb3NpeF9saXN0ZGlyKHBhdGhfdCAqcGF0aCwgUHlPYmplY3QgKmxpc3QpCit7CisgICAgUHlPYmplY3QgKnY7CisgICAgRElSICpkaXJwID0gTlVMTDsKKyAgICBzdHJ1Y3QgZGlyZW50ICplcDsKKyAgICBpbnQgcmV0dXJuX3N0cjsgLyogaWYgZmFsc2UsIHJldHVybiBieXRlcyAqLworI2lmZGVmIEhBVkVfRkRPUEVORElSCisgICAgaW50IGZkID0gLTE7CisjZW5kaWYKIAogICAgIGVycm5vID0gMDsKICNpZmRlZiBIQVZFX0ZET1BFTkRJUgotICAgIGlmIChwYXRoLmZkICE9IC0xKSB7CisgICAgaWYgKHBhdGgtPmZkICE9IC0xKSB7CiAgICAgICAgIC8qIGNsb3NlZGlyKCkgY2xvc2VzIHRoZSBGRCwgc28gd2UgZHVwbGljYXRlIGl0ICovCi0gICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICAgICAgZmQgPSBkdXAocGF0aC5mZCk7Ci0gICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCi0KLSAgICAgICAgaWYgKGZkID09IC0xKSB7Ci0gICAgICAgICAgICBsaXN0ID0gcG9zaXhfZXJyb3IoKTsKLSAgICAgICAgICAgIGdvdG8gZXhpdDsKLSAgICAgICAgfQorICAgICAgICBmZCA9IF9QeV9kdXAocGF0aC0+ZmQpOworICAgICAgICBpZiAoZmQgPT0gLTEpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgICAgICByZXR1cm5fc3RyID0gMTsKIApAQCAtMzcxNiwxMCArMzgwOSwxMCBAQAogI2VuZGlmCiAgICAgewogICAgICAgICBjaGFyICpuYW1lOwotICAgICAgICBpZiAocGF0aC5uYXJyb3cpIHsKLSAgICAgICAgICAgIG5hbWUgPSBwYXRoLm5hcnJvdzsKKyAgICAgICAgaWYgKHBhdGgtPm5hcnJvdykgeworICAgICAgICAgICAgbmFtZSA9IHBhdGgtPm5hcnJvdzsKICAgICAgICAgICAgIC8qIG9ubHkgcmV0dXJuIGJ5dGVzIGlmIHRoZXkgc3BlY2lmaWVkIGEgYnl0ZXMgb2JqZWN0ICovCi0gICAgICAgICAgICByZXR1cm5fc3RyID0gIShQeUJ5dGVzX0NoZWNrKHBhdGgub2JqZWN0KSk7CisgICAgICAgICAgICByZXR1cm5fc3RyID0gIShQeUJ5dGVzX0NoZWNrKHBhdGgtPm9iamVjdCkpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgbmFtZSA9ICIuIjsKQEAgLTM3MzIsMTQgKzM4MjUsMTQgQEAKICAgICB9CiAKICAgICBpZiAoZGlycCA9PSBOVUxMKSB7Ci0gICAgICAgIGxpc3QgPSBwYXRoX2Vycm9yKCJsaXN0ZGlyIiwgJnBhdGgpOworICAgICAgICBsaXN0ID0gcGF0aF9lcnJvcihwYXRoKTsKICNpZmRlZiBIQVZFX0ZET1BFTkRJUgogICAgICAgICBpZiAoZmQgIT0gLTEpIHsKICAgICAgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICAgICAgICAgIGNsb3NlKGZkKTsKICAgICAgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCiAgICAgICAgIH0KLSNlbmRpZiAvKiBIQVZFX0ZET1BFTkRJUiAqLworI2VuZGlmCiAgICAgICAgIGdvdG8gZXhpdDsKICAgICB9CiAgICAgaWYgKChsaXN0ID0gUHlMaXN0X05ldygwKSkgPT0gTlVMTCkgewpAQCAtMzc1NSw3ICszODQ4LDcgQEAKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGxpc3QpOwotICAgICAgICAgICAgICAgIGxpc3QgPSBwYXRoX2Vycm9yKCJsaXN0ZGlyIiwgJnBhdGgpOworICAgICAgICAgICAgICAgIGxpc3QgPSBwYXRoX2Vycm9yKHBhdGgpOwogICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMzc4NSwxNyArMzg3OCw0NCBAQAogI2lmZGVmIEhBVkVfRkRPUEVORElSCiAgICAgICAgIGlmIChmZCA+IC0xKQogICAgICAgICAgICAgcmV3aW5kZGlyKGRpcnApOwotI2VuZGlmIC8qIEhBVkVfRkRPUEVORElSICovCisjZW5kaWYKICAgICAgICAgY2xvc2VkaXIoZGlycCk7CiAgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCiAgICAgfQogCi0gICAgcGF0aF9jbGVhbnVwKCZwYXRoKTsKLQogICAgIHJldHVybiBsaXN0OworfSAgLyogZW5kIG9mIF9wb3NpeF9saXN0ZGlyICovCisjZW5kaWYgIC8qIHdoaWNoIE9TICovCiAKLSNlbmRpZiAvKiB3aGljaCBPUyAqLwotfSAgLyogZW5kIG9mIHBvc2l4X2xpc3RkaXIgKi8KK3N0YXRpYyBQeU9iamVjdCAqCitwb3NpeF9saXN0ZGlyKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK3sKKyAgICBwYXRoX3QgcGF0aDsKKyAgICBQeU9iamVjdCAqbGlzdCA9IE5VTEw7CisgICAgc3RhdGljIGNoYXIgKmtleXdvcmRzW10gPSB7InBhdGgiLCBOVUxMfTsKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlOworCisgICAgbWVtc2V0KCZwYXRoLCAwLCBzaXplb2YocGF0aCkpOworICAgIHBhdGguZnVuY3Rpb25fbmFtZSA9ICJsaXN0ZGlyIjsKKyAgICBwYXRoLm51bGxhYmxlID0gMTsKKyNpZmRlZiBIQVZFX0ZET1BFTkRJUgorICAgIHBhdGguYWxsb3dfZmQgPSAxOworICAgIHBhdGguZmQgPSAtMTsKKyNlbmRpZgorCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAifE8mOmxpc3RkaXIiLCBrZXl3b3JkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoX2NvbnZlcnRlciwgJnBhdGgpKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworI2lmIGRlZmluZWQoTVNfV0lORE9XUykgJiYgIWRlZmluZWQoSEFWRV9PUEVORElSKQorICAgIHJldHVybl92YWx1ZSA9IF9saXN0ZGlyX3dpbmRvd3Nfbm9fb3BlbmRpcigmcGF0aCwgbGlzdCk7CisjZWxzZQorICAgIHJldHVybl92YWx1ZSA9IF9wb3NpeF9saXN0ZGlyKCZwYXRoLCBsaXN0KTsKKyNlbmRpZgorICAgIHBhdGhfY2xlYW51cCgmcGF0aCk7CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KIAogI2lmZGVmIE1TX1dJTkRPV1MKIC8qIEEgaGVscGVyIGZ1bmN0aW9uIGZvciBhYnNwYXRoIG9uIHdpbjMyICovCkBAIC0zODAzLDE0ICszOTIzLDE0IEBACiBwb3NpeF9fZ2V0ZnVsbHBhdGhuYW1lKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBjb25zdCBjaGFyICpwYXRoOwotICAgIGNoYXIgb3V0YnVmW01BWF9QQVRIKjJdOworICAgIGNoYXIgb3V0YnVmW01BWF9QQVRIXTsKICAgICBjaGFyICp0ZW1wOwogICAgIFB5T2JqZWN0ICpwbzsKIAogICAgIGlmIChQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJVfDpfZ2V0ZnVsbHBhdGhuYW1lIiwgJnBvKSkKICAgICB7CiAgICAgICAgIHdjaGFyX3QgKndwYXRoOwotICAgICAgICB3Y2hhcl90IHdvdXRidWZbTUFYX1BBVEgqMl0sICp3b3V0YnVmcCA9IHdvdXRidWY7CisgICAgICAgIHdjaGFyX3Qgd291dGJ1ZltNQVhfUEFUSF0sICp3b3V0YnVmcCA9IHdvdXRidWY7CiAgICAgICAgIHdjaGFyX3QgKnd0ZW1wOwogICAgICAgICBEV09SRCByZXN1bHQ7CiAgICAgICAgIFB5T2JqZWN0ICp2OwpAQCAtMzgyMiw3ICszOTQyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9BUlJBWV9MRU5HVEgod291dGJ1ZiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd291dGJ1ZiwgJnd0ZW1wKTsKICAgICAgICAgaWYgKHJlc3VsdCA+IFB5X0FSUkFZX0xFTkdUSCh3b3V0YnVmKSkgewotICAgICAgICAgICAgd291dGJ1ZnAgPSBtYWxsb2MocmVzdWx0ICogc2l6ZW9mKHdjaGFyX3QpKTsKKyAgICAgICAgICAgIHdvdXRidWZwID0gUHlNZW1fTmV3KHdjaGFyX3QsIHJlc3VsdCk7CiAgICAgICAgICAgICBpZiAoIXdvdXRidWZwKQogICAgICAgICAgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICAgICAgcmVzdWx0ID0gR2V0RnVsbFBhdGhOYW1lVyh3cGF0aCwgcmVzdWx0LCB3b3V0YnVmcCwgJnd0ZW1wKTsKQEAgLTM4MzIsNyArMzk1Miw3IEBACiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHYgPSB3aW4zMl9lcnJvcl9vYmplY3QoIkdldEZ1bGxQYXRoTmFtZVciLCBwbyk7CiAgICAgICAgIGlmICh3b3V0YnVmcCAhPSB3b3V0YnVmKQotICAgICAgICAgICAgZnJlZSh3b3V0YnVmcCk7CisgICAgICAgICAgICBQeU1lbV9GcmVlKHdvdXRidWZwKTsKICAgICAgICAgcmV0dXJuIHY7CiAgICAgfQogICAgIC8qIERyb3AgdGhlIGFyZ3VtZW50IHBhcnNpbmcgZXJyb3IgYXMgbmFycm93IHN0cmluZ3MKQEAgLTM5MDIsNyArNDAyMiw3IEBACiAgICAgaWYoIWJ1Zl9zaXplKQogICAgICAgICByZXR1cm4gd2luMzJfZXJyb3Jfb2JqZWN0KCJHZXRGaW5hbFBhdGhOYW1lQnlIYW5kbGUiLCBwbyk7CiAKLSAgICB0YXJnZXRfcGF0aCA9ICh3Y2hhcl90ICopbWFsbG9jKChidWZfc2l6ZSsxKSpzaXplb2Yod2NoYXJfdCkpOworICAgIHRhcmdldF9wYXRoID0gUHlNZW1fTmV3KHdjaGFyX3QsIGJ1Zl9zaXplKzEpOwogICAgIGlmKCF0YXJnZXRfcGF0aCkKICAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7CiAKQEAgLTM5MTYsMzYgKzQwMzYsMTEgQEAKIAogICAgIHRhcmdldF9wYXRoW3Jlc3VsdF9sZW5ndGhdID0gMDsKICAgICByZXN1bHQgPSBQeVVuaWNvZGVfRnJvbVdpZGVDaGFyKHRhcmdldF9wYXRoLCByZXN1bHRfbGVuZ3RoKTsKLSAgICBmcmVlKHRhcmdldF9wYXRoKTsKKyAgICBQeU1lbV9GcmVlKHRhcmdldF9wYXRoKTsKICAgICByZXR1cm4gcmVzdWx0OwogCiB9IC8qIGVuZCBvZiBwb3NpeF9fZ2V0ZmluYWxwYXRobmFtZSAqLwogCi1zdGF0aWMgUHlPYmplY3QgKgotcG9zaXhfX2dldGZpbGVpbmZvcm1hdGlvbihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi17Ci0gICAgSEFORExFIGhGaWxlOwotICAgIEJZX0hBTkRMRV9GSUxFX0lORk9STUFUSU9OIGluZm87Ci0gICAgaW50IGZkOwotCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpOl9nZXRmaWxlaW5mb3JtYXRpb24iLCAmZmQpKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIGlmICghX1B5VmVyaWZ5X2ZkKGZkKSkKLSAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7Ci0KLSAgICBoRmlsZSA9IChIQU5ETEUpX2dldF9vc2ZoYW5kbGUoZmQpOwotICAgIGlmIChoRmlsZSA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkKLSAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7Ci0KLSAgICBpZiAoIUdldEZpbGVJbmZvcm1hdGlvbkJ5SGFuZGxlKGhGaWxlLCAmaW5mbykpCi0gICAgICAgIHJldHVybiB3aW4zMl9lcnJvcigiX2dldGZpbGVpbmZvcm1hdGlvbiIsIE5VTEwpOwotCi0gICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoImlpaSIsIGluZm8uZHdWb2x1bWVTZXJpYWxOdW1iZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8ubkZpbGVJbmRleEhpZ2gsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8ubkZpbGVJbmRleExvdyk7Ci19Ci0KIFB5RG9jX1NUUlZBUihwb3NpeF9faXNkaXJfX2RvY19fLAogIlJldHVybiB0cnVlIGlmIHRoZSBwYXRobmFtZSByZWZlcnMgdG8gYW4gZXhpc3RpbmcgZGlyZWN0b3J5LiIpOwogCkBAIC0zOTg0LDYgKzQwNzksNTUgQEAKICAgICBlbHNlCiAgICAgICAgIFB5X1JFVFVSTl9GQUxTRTsKIH0KKworUHlEb2NfU1RSVkFSKHBvc2l4X19nZXR2b2x1bWVwYXRobmFtZV9fZG9jX18sCisiUmV0dXJuIHZvbHVtZSBtb3VudCBwb2ludCBvZiB0aGUgc3BlY2lmaWVkIHBhdGguIik7CisKKy8qIEEgaGVscGVyIGZ1bmN0aW9uIGZvciBpc21vdW50IG9uIHdpbmRvd3MgKi8KK3N0YXRpYyBQeU9iamVjdCAqCitwb3NpeF9fZ2V0dm9sdW1lcGF0aG5hbWUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpwbywgKnJlc3VsdDsKKyAgICB3Y2hhcl90ICpwYXRoLCAqbW91bnRwYXRoPU5VTEw7CisgICAgc2l6ZV90IGJ1ZmxlbjsKKyAgICBCT09MIHJldDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiVXw6X2dldHZvbHVtZXBhdGhuYW1lIiwgJnBvKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcGF0aCA9IFB5VW5pY29kZV9Bc1VuaWNvZGVBbmRTaXplKHBvLCAmYnVmbGVuKTsKKyAgICBpZiAocGF0aCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBidWZsZW4gKz0gMTsKKworICAgIC8qIFZvbHVtZSBwYXRoIHNob3VsZCBiZSBzaG9ydGVyIHRoYW4gZW50aXJlIHBhdGggKi8KKyAgICBidWZsZW4gPSBQeV9NQVgoYnVmbGVuLCBNQVhfUEFUSCk7CisKKyAgICBpZiAoYnVmbGVuID4gRFdPUkRfTUFYKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLCAicGF0aCB0b28gbG9uZyIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBtb3VudHBhdGggPSBQeU1lbV9OZXcod2NoYXJfdCwgYnVmbGVuKTsKKyAgICBpZiAobW91bnRwYXRoID09IE5VTEwpCisgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOworCisgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgIHJldCA9IEdldFZvbHVtZVBhdGhOYW1lVyhwYXRoLCBtb3VudHBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X1NBRkVfRE9XTkNBU1QoYnVmbGVuLCBzaXplX3QsIERXT1JEKSk7CisgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKworICAgIGlmICghcmV0KSB7CisgICAgICAgIHJlc3VsdCA9IHdpbjMyX2Vycm9yX29iamVjdCgiX2dldHZvbHVtZXBhdGhuYW1lIiwgcG8pOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorICAgIHJlc3VsdCA9IFB5VW5pY29kZV9Gcm9tV2lkZUNoYXIobW91bnRwYXRoLCB3Y3NsZW4obW91bnRwYXRoKSk7CisKK2V4aXQ6CisgICAgUHlNZW1fRnJlZShtb3VudHBhdGgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisvKiBlbmQgb2YgcG9zaXhfX2dldHZvbHVtZXBhdGhuYW1lICovCisKICNlbmRpZiAvKiBNU19XSU5ET1dTICovCiAKIFB5RG9jX1NUUlZBUihwb3NpeF9ta2Rpcl9fZG9jX18sCkBAIC00MDA4LDYgKzQxNTIsNyBAQAogICAgIGludCByZXN1bHQ7CiAKICAgICBtZW1zZXQoJnBhdGgsIDAsIHNpemVvZihwYXRoKSk7CisgICAgcGF0aC5mdW5jdGlvbl9uYW1lID0gIm1rZGlyIjsKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJPJnxpJE8mOm1rZGlyIiwga2V5d29yZHMsCiAgICAgICAgIHBhdGhfY29udmVydGVyLCAmcGF0aCwgJm1vZGUsCiAjaWZkZWYgSEFWRV9NS0RJUkFUCkBAIC00MDI3LDcgKzQxNzIsNyBAQAogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKICAgICBpZiAoIXJlc3VsdCkgewotICAgICAgICByZXR1cm5fdmFsdWUgPSB3aW4zMl9lcnJvcl9vYmplY3QoIm1rZGlyIiwgcGF0aC5vYmplY3QpOworICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX2Vycm9yKCZwYXRoKTsKICAgICAgICAgZ290byBleGl0OwogICAgIH0KICNlbHNlCkBAIC00MDQ0LDcgKzQxODksNyBAQAogI2VuZGlmCiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKICAgICBpZiAocmVzdWx0IDwgMCkgewotICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX2Vycm9yKCJta2RpciIsICZwYXRoKTsKKyAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9lcnJvcigmcGF0aCk7CiAgICAgICAgIGdvdG8gZXhpdDsKICAgICB9CiAjZW5kaWYKQEAgLTQxNjIsNiArNDMwNyw4IEBACiAKICAgICBtZW1zZXQoJnNyYywgMCwgc2l6ZW9mKHNyYykpOwogICAgIG1lbXNldCgmZHN0LCAwLCBzaXplb2YoZHN0KSk7CisgICAgc3JjLmZ1bmN0aW9uX25hbWUgPSBmdW5jdGlvbl9uYW1lOworICAgIGRzdC5mdW5jdGlvbl9uYW1lID0gZnVuY3Rpb25fbmFtZTsKICAgICBzdHJjcHkoZm9ybWF0LCAiTyZPJnwkTyZPJjoiKTsKICAgICBzdHJjYXQoZm9ybWF0LCBmdW5jdGlvbl9uYW1lKTsKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsIGZvcm1hdCwga2V5d29yZHMsCkBAIC00MTk1LDcgKzQzNDIsNyBAQAogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKICAgICBpZiAoIXJlc3VsdCkgewotICAgICAgICByZXR1cm5fdmFsdWUgPSB3aW4zMl9lcnJvcl9vYmplY3QoZnVuY3Rpb25fbmFtZSwgZHN0Lm9iamVjdCk7CisgICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfZXJyb3IyKCZzcmMsICZkc3QpOwogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogCkBAIC00MjEwLDcgKzQzNTcsNyBAQAogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKICAgICBpZiAocmVzdWx0KSB7Ci0gICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfZXJyb3IoZnVuY3Rpb25fbmFtZSwgJmRzdCk7CisgICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfZXJyb3IyKCZzcmMsICZkc3QpOwogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogI2VuZGlmCkBAIC00Mjc0LDYgKzQ0MjEsNyBAQAogICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOwogCiAgICAgbWVtc2V0KCZwYXRoLCAwLCBzaXplb2YocGF0aCkpOworICAgIHBhdGguZnVuY3Rpb25fbmFtZSA9ICJybWRpciI7CiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiTyZ8JE8mOnJtZGlyIiwga2V5d29yZHMsCiAgICAgICAgICAgICBwYXRoX2NvbnZlcnRlciwgJnBhdGgsCiAjaWZkZWYgSEFWRV9VTkxJTktBVApAQCAtNDMwMiw3ICs0NDUwLDcgQEAKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCiAgICAgaWYgKHJlc3VsdCkgewotICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX2Vycm9yKCJybWRpciIsICZwYXRoKTsKKyAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9lcnJvcigmcGF0aCk7CiAgICAgICAgIGdvdG8gZXhpdDsKICAgICB9CiAKQEAgLTQ0MzAsNiArNDU3OCw3IEBACiAgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CiAKICAgICBtZW1zZXQoJnBhdGgsIDAsIHNpemVvZihwYXRoKSk7CisgICAgcGF0aC5mdW5jdGlvbl9uYW1lID0gInVubGluayI7CiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiTyZ8JE8mOnVubGluayIsIGtleXdvcmRzLAogICAgICAgICAgICAgcGF0aF9jb252ZXJ0ZXIsICZwYXRoLAogI2lmZGVmIEhBVkVfVU5MSU5LQVQKQEAgLTQ0NTgsNyArNDYwNyw3IEBACiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKIAogICAgIGlmIChyZXN1bHQpIHsKLSAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9lcnJvcigidW5saW5rIiwgJnBhdGgpOworICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX2Vycm9yKCZwYXRoKTsKICAgICAgICAgZ290byBleGl0OwogICAgIH0KIApAQCAtNDU0Niw3ICs0Njk1LDcgQEAKIAogCiBQeURvY19TVFJWQVIocG9zaXhfdXRpbWVfX2RvY19fLAotInV0aW1lKHBhdGgsIHRpbWVzPU5vbmUsICosIG5zPU5vbmUsIGRpcl9mZD1Ob25lLCBmb2xsb3dfc3ltbGlua3M9VHJ1ZSlcblwKKyJ1dGltZShwYXRoLCB0aW1lcz1Ob25lLCAqWywgbnNdLCBkaXJfZmQ9Tm9uZSwgZm9sbG93X3N5bWxpbmtzPVRydWUpXG5cCiBTZXQgdGhlIGFjY2VzcyBhbmQgbW9kaWZpZWQgdGltZSBvZiBwYXRoLlxuXAogXG5cCiBwYXRoIG1heSBhbHdheXMgYmUgc3BlY2lmaWVkIGFzIGEgc3RyaW5nLlxuXApAQCAtNDU1NSwxMCArNDcwNCwxMCBAQAogXG5cCiBJZiB0aW1lcyBpcyBub3QgTm9uZSwgaXQgbXVzdCBiZSBhIHR1cGxlIChhdGltZSwgbXRpbWUpO1xuXAogICAgIGF0aW1lIGFuZCBtdGltZSBzaG91bGQgYmUgZXhwcmVzc2VkIGFzIGZsb2F0IHNlY29uZHMgc2luY2UgdGhlIGVwb2NoLlxuXAotSWYgbnMgaXMgbm90IE5vbmUsIGl0IG11c3QgYmUgYSB0dXBsZSAoYXRpbWVfbnMsIG10aW1lX25zKTtcblwKK0lmIG5zIGlzIHNwZWNpZmllZCwgaXQgbXVzdCBiZSBhIHR1cGxlIChhdGltZV9ucywgbXRpbWVfbnMpO1xuXAogICAgIGF0aW1lX25zIGFuZCBtdGltZV9ucyBzaG91bGQgYmUgZXhwcmVzc2VkIGFzIGludGVnZXIgbmFub3NlY29uZHNcblwKICAgICBzaW5jZSB0aGUgZXBvY2guXG5cCi1JZiBib3RoIHRpbWVzIGFuZCBucyBhcmUgTm9uZSwgdXRpbWUgdXNlcyB0aGUgY3VycmVudCB0aW1lLlxuXAorSWYgdGltZXMgaXMgTm9uZSBhbmQgbnMgaXMgdW5zcGVjaWZpZWQsIHV0aW1lIHVzZXMgdGhlIGN1cnJlbnQgdGltZS5cblwKIFNwZWNpZnlpbmcgdHVwbGVzIGZvciBib3RoIHRpbWVzIGFuZCBucyBpcyBhbiBlcnJvci5cblwKIFxuXAogSWYgZGlyX2ZkIGlzIG5vdCBOb25lLCBpdCBzaG91bGQgYmUgYSBmaWxlIGRlc2NyaXB0b3Igb3BlbiB0byBhIGRpcmVjdG9yeSxcblwKQEAgLTQ1ODAsNjQgKzQ3MjksNjIgQEAKIH0gdXRpbWVfdDsKIAogLyoKLSAqIHRoZXNlIG1hY3JvcyBhc3N1bWUgdGhhdCAidXRpbWUiIGlzIGEgcG9pbnRlciB0byBhIHV0aW1lX3QKKyAqIHRoZXNlIG1hY3JvcyBhc3N1bWUgdGhhdCAidXQiIGlzIGEgcG9pbnRlciB0byBhIHV0aW1lX3QKICAqIHRoZXkgYWxzbyBpbnRlbnRpb25hbGx5IGxlYWsgdGhlIGRlY2xhcmF0aW9uIG9mIGEgcG9pbnRlciBuYW1lZCAidGltZSIKICAqLwogI2RlZmluZSBVVElNRV9UT19USU1FU1BFQyBcCiAgICAgc3RydWN0IHRpbWVzcGVjIHRzWzJdOyBcCiAgICAgc3RydWN0IHRpbWVzcGVjICp0aW1lOyBcCi0gICAgaWYgKHV0aW1lLT5ub3cpIFwKKyAgICBpZiAodXQtPm5vdykgXAogICAgICAgICB0aW1lID0gTlVMTDsgXAogICAgIGVsc2UgeyBcCi0gICAgICAgIHRzWzBdLnR2X3NlYyA9IHV0aW1lLT5hdGltZV9zOyBcCi0gICAgICAgIHRzWzBdLnR2X25zZWMgPSB1dGltZS0+YXRpbWVfbnM7IFwKLSAgICAgICAgdHNbMV0udHZfc2VjID0gdXRpbWUtPm10aW1lX3M7IFwKLSAgICAgICAgdHNbMV0udHZfbnNlYyA9IHV0aW1lLT5tdGltZV9uczsgXAorICAgICAgICB0c1swXS50dl9zZWMgPSB1dC0+YXRpbWVfczsgXAorICAgICAgICB0c1swXS50dl9uc2VjID0gdXQtPmF0aW1lX25zOyBcCisgICAgICAgIHRzWzFdLnR2X3NlYyA9IHV0LT5tdGltZV9zOyBcCisgICAgICAgIHRzWzFdLnR2X25zZWMgPSB1dC0+bXRpbWVfbnM7IFwKICAgICAgICAgdGltZSA9IHRzOyBcCiAgICAgfSBcCiAKICNkZWZpbmUgVVRJTUVfVE9fVElNRVZBTCBcCiAgICAgc3RydWN0IHRpbWV2YWwgdHZbMl07IFwKICAgICBzdHJ1Y3QgdGltZXZhbCAqdGltZTsgXAotICAgIGlmICh1dGltZS0+bm93KSBcCisgICAgaWYgKHV0LT5ub3cpIFwKICAgICAgICAgdGltZSA9IE5VTEw7IFwKICAgICBlbHNlIHsgXAotICAgICAgICB0dlswXS50dl9zZWMgPSB1dGltZS0+YXRpbWVfczsgXAotICAgICAgICB0dlswXS50dl91c2VjID0gdXRpbWUtPmF0aW1lX25zIC8gMTAwMDsgXAotICAgICAgICB0dlsxXS50dl9zZWMgPSB1dGltZS0+bXRpbWVfczsgXAotICAgICAgICB0dlsxXS50dl91c2VjID0gdXRpbWUtPm10aW1lX25zIC8gMTAwMDsgXAorICAgICAgICB0dlswXS50dl9zZWMgPSB1dC0+YXRpbWVfczsgXAorICAgICAgICB0dlswXS50dl91c2VjID0gdXQtPmF0aW1lX25zIC8gMTAwMDsgXAorICAgICAgICB0dlsxXS50dl9zZWMgPSB1dC0+bXRpbWVfczsgXAorICAgICAgICB0dlsxXS50dl91c2VjID0gdXQtPm10aW1lX25zIC8gMTAwMDsgXAogICAgICAgICB0aW1lID0gdHY7IFwKICAgICB9IFwKIAogI2RlZmluZSBVVElNRV9UT19VVElNQlVGIFwKLSAgICBzdHJ1Y3QgdXRpbWJ1ZiB1WzJdOyBcCisgICAgc3RydWN0IHV0aW1idWYgdTsgXAogICAgIHN0cnVjdCB1dGltYnVmICp0aW1lOyBcCi0gICAgaWYgKHV0aW1lLT5ub3cpIFwKKyAgICBpZiAodXQtPm5vdykgXAogICAgICAgICB0aW1lID0gTlVMTDsgXAogICAgIGVsc2UgeyBcCi0gICAgICAgIHUuYWN0aW1lID0gdXRpbWUtPmF0aW1lX3M7IFwKLSAgICAgICAgdS5tb2R0aW1lID0gdXRpbWUtPm10aW1lX3M7IFwKLSAgICAgICAgdGltZSA9IHU7IFwKKyAgICAgICAgdS5hY3RpbWUgPSB1dC0+YXRpbWVfczsgXAorICAgICAgICB1Lm1vZHRpbWUgPSB1dC0+bXRpbWVfczsgXAorICAgICAgICB0aW1lID0gJnU7IFwKICAgICB9CiAKICNkZWZpbmUgVVRJTUVfVE9fVElNRV9UIFwKICAgICB0aW1lX3QgdGltZXRbMl07IFwKLSAgICBzdHJ1Y3QgdGltZXQgdGltZTsgXAotICAgIGlmICh1dGltZS0+bm93KSBcCisgICAgdGltZV90ICp0aW1lOyBcCisgICAgaWYgKHV0LT5ub3cpIFwKICAgICAgICAgdGltZSA9IE5VTEw7IFwKICAgICBlbHNlIHsgXAotICAgICAgICB0aW1ldFswXSA9IHV0aW1lLT5hdGltZV9zOyBcCi0gICAgICAgIHRpbWV0WzFdID0gdXRpbWUtPm10aW1lX3M7IFwKLSAgICAgICAgdGltZSA9ICZ0aW1ldDsgXAorICAgICAgICB0aW1ldFswXSA9IHV0LT5hdGltZV9zOyBcCisgICAgICAgIHRpbWV0WzFdID0gdXQtPm10aW1lX3M7IFwKKyAgICAgICAgdGltZSA9IHRpbWV0OyBcCiAgICAgfSBcCiAKIAotI2RlZmluZSBVVElNRV9IQVZFX0RJUl9GRCAoZGVmaW5lZChIQVZFX0ZVVElNRVNBVCkgfHwgZGVmaW5lZChIQVZFX1VUSU1FTlNBVCkpCi0KLSNpZiBVVElNRV9IQVZFX0RJUl9GRAorI2lmIGRlZmluZWQoSEFWRV9GVVRJTUVTQVQpIHx8IGRlZmluZWQoSEFWRV9VVElNRU5TQVQpCiAKIHN0YXRpYyBpbnQKLXV0aW1lX2Rpcl9mZCh1dGltZV90ICp1dGltZSwgaW50IGRpcl9mZCwgY2hhciAqcGF0aCwgaW50IGZvbGxvd19zeW1saW5rcykKK3V0aW1lX2Rpcl9mZCh1dGltZV90ICp1dCwgaW50IGRpcl9mZCwgY2hhciAqcGF0aCwgaW50IGZvbGxvd19zeW1saW5rcykKIHsKICNpZmRlZiBIQVZFX1VUSU1FTlNBVAogICAgIGludCBmbGFncyA9IGZvbGxvd19zeW1saW5rcyA/IDAgOiBBVF9TWU1MSU5LX05PRk9MTE9XOwpAQCAtNDY1NywxMiArNDgwNCwxMCBAQAogCiAjZW5kaWYKIAotI2RlZmluZSBVVElNRV9IQVZFX0ZEIChkZWZpbmVkKEhBVkVfRlVUSU1FUykgfHwgZGVmaW5lZChIQVZFX0ZVVElNRU5TKSkKLQotI2lmIFVUSU1FX0hBVkVfRkQKKyNpZiBkZWZpbmVkKEhBVkVfRlVUSU1FUykgfHwgZGVmaW5lZChIQVZFX0ZVVElNRU5TKQogCiBzdGF0aWMgaW50Ci11dGltZV9mZCh1dGltZV90ICp1dGltZSwgaW50IGZkKQordXRpbWVfZmQodXRpbWVfdCAqdXQsIGludCBmZCkKIHsKICNpZmRlZiBIQVZFX0ZVVElNRU5TCiAgICAgVVRJTUVfVE9fVElNRVNQRUM7CkBAIC00NjgyLDcgKzQ4MjcsNyBAQAogI2lmIFVUSU1FX0hBVkVfTk9GT0xMT1dfU1lNTElOS1MKIAogc3RhdGljIGludAotdXRpbWVfbm9mb2xsb3dfc3ltbGlua3ModXRpbWVfdCAqdXRpbWUsIGNoYXIgKnBhdGgpCit1dGltZV9ub2ZvbGxvd19zeW1saW5rcyh1dGltZV90ICp1dCwgY2hhciAqcGF0aCkKIHsKICNpZmRlZiBIQVZFX1VUSU1FTlNBVAogICAgIFVUSU1FX1RPX1RJTUVTUEVDOwpAQCAtNDY5OCw3ICs0ODQzLDcgQEAKICNpZm5kZWYgTVNfV0lORE9XUwogCiBzdGF0aWMgaW50Ci11dGltZV9kZWZhdWx0KHV0aW1lX3QgKnV0aW1lLCBjaGFyICpwYXRoKQordXRpbWVfZGVmYXVsdCh1dGltZV90ICp1dCwgY2hhciAqcGF0aCkKIHsKICNpZmRlZiBIQVZFX1VUSU1FTlNBVAogICAgIFVUSU1FX1RPX1RJTUVTUEVDOwpAQCAtNDc2MSwxNSArNDkwNiwxNiBAQAogICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOwogCiAgICAgbWVtc2V0KCZwYXRoLCAwLCBzaXplb2YocGF0aCkpOworICAgIHBhdGguZnVuY3Rpb25fbmFtZSA9ICJ1dGltZSI7CiAgICAgbWVtc2V0KCZ1dGltZSwgMCwgc2l6ZW9mKHV0aW1lX3QpKTsKLSNpZiBVVElNRV9IQVZFX0ZECisjaWYgZGVmaW5lZChIQVZFX0ZVVElNRVMpIHx8IGRlZmluZWQoSEFWRV9GVVRJTUVOUykKICAgICBwYXRoLmFsbG93X2ZkID0gMTsKICNlbmRpZgogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywKICAgICAgICAgICAgICJPJnxPJE9PJnA6dXRpbWUiLCBrZXl3b3JkcywKICAgICAgICAgICAgIHBhdGhfY29udmVydGVyLCAmcGF0aCwKICAgICAgICAgICAgICZ0aW1lcywgJm5zLAotI2lmIFVUSU1FX0hBVkVfRElSX0ZECisjaWYgZGVmaW5lZChIQVZFX0ZVVElNRVNBVCkgfHwgZGVmaW5lZChIQVZFX1VUSU1FTlNBVCkKICAgICAgICAgICAgIGRpcl9mZF9jb252ZXJ0ZXIsICZkaXJfZmQsCiAjZWxzZQogICAgICAgICAgICAgZGlyX2ZkX3VuYXZhaWxhYmxlLCAmZGlyX2ZkLApAQCAtNDc5Niw5ICs0OTQyLDkgQEAKICAgICAgICAgfQogICAgICAgICB1dGltZS5ub3cgPSAwOwogICAgICAgICBpZiAoX1B5VGltZV9PYmplY3RUb1RpbWVzcGVjKFB5VHVwbGVfR0VUX0lURU0odGltZXMsIDApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhX3NlYywgJmFfbnNlYykgPT0gLTEgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYV9zZWMsICZhX25zZWMsIF9QeVRpbWVfUk9VTkRfRE9XTikgPT0gLTEgfHwKICAgICAgICAgICAgIF9QeVRpbWVfT2JqZWN0VG9UaW1lc3BlYyhQeVR1cGxlX0dFVF9JVEVNKHRpbWVzLCAxKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbV9zZWMsICZtX25zZWMpID09IC0xKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1fc2VjLCAmbV9uc2VjLCBfUHlUaW1lX1JPVU5EX0RPV04pID09IC0xKSB7CiAgICAgICAgICAgICBnb3RvIGV4aXQ7CiAgICAgICAgIH0KICAgICAgICAgdXRpbWUuYXRpbWVfcyA9IGFfc2VjOwpAQCAtNDg1NiwxOCArNTAwMiwxMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEVfRkxBR19CQUNLVVBfU0VNQU5USUNTLCBOVUxMKTsKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogICAgIGlmIChoRmlsZSA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgewotICAgICAgICB3aW4zMl9lcnJvcl9vYmplY3QoInV0aW1lIiwgcGF0aC5vYmplY3QpOworICAgICAgICBwYXRoX2Vycm9yKCZwYXRoKTsKICAgICAgICAgZ290byBleGl0OwogICAgIH0KIAogICAgIGlmICh1dGltZS5ub3cpIHsKLSAgICAgICAgU1lTVEVNVElNRSBub3c7Ci0gICAgICAgIEdldFN5c3RlbVRpbWUoJm5vdyk7Ci0gICAgICAgIGlmICghU3lzdGVtVGltZVRvRmlsZVRpbWUoJm5vdywgJm10aW1lKSB8fAotICAgICAgICAgICAgIVN5c3RlbVRpbWVUb0ZpbGVUaW1lKCZub3csICZhdGltZSkpIHsKLSAgICAgICAgICAgIHdpbjMyX2Vycm9yKCJ1dGltZSIsIE5VTEwpOwotICAgICAgICAgICAgZ290byBleGl0OwotICAgICAgICB9CisgICAgICAgIEdldFN5c3RlbVRpbWVBc0ZpbGVUaW1lKCZtdGltZSk7CisgICAgICAgIGF0aW1lID0gbXRpbWU7CiAgICAgfQogICAgIGVsc2UgewogICAgICAgICB0aW1lX3RfdG9fRklMRV9USU1FKHV0aW1lLmF0aW1lX3MsIHV0aW1lLmF0aW1lX25zLCAmYXRpbWUpOwpAQCAtNDg3OCw3ICs1MDE5LDcgQEAKICAgICAgICAgICAgYXMgdGhhdCBtYXkgY29uZnVzZSB0aGUgdXNlciBpbnRvIGJlbGlldmluZyB0aGF0CiAgICAgICAgICAgIHNvbWV0aGluZyBpcyB3cm9uZyB3aXRoIHRoZSBmaWxlLCB3aGVuIGl0IGFsc28KICAgICAgICAgICAgY291bGQgYmUgdGhlIHRpbWUgc3RhbXAgdGhhdCBnaXZlcyBhIHByb2JsZW0uICovCi0gICAgICAgIHdpbjMyX2Vycm9yKCJ1dGltZSIsIE5VTEwpOworICAgICAgICBQeUVycl9TZXRGcm9tV2luZG93c0VycigwKTsKICAgICAgICAgZ290byBleGl0OwogICAgIH0KICNlbHNlIC8qIE1TX1dJTkRPV1MgKi8KQEAgLTQ4OTAsMTMgKzUwMzEsMTMgQEAKICAgICBlbHNlCiAjZW5kaWYKIAotI2lmIFVUSU1FX0hBVkVfRElSX0ZECisjaWYgZGVmaW5lZChIQVZFX0ZVVElNRVNBVCkgfHwgZGVmaW5lZChIQVZFX1VUSU1FTlNBVCkKICAgICBpZiAoKGRpcl9mZCAhPSBERUZBVUxUX0RJUl9GRCkgfHwgKCFmb2xsb3dfc3ltbGlua3MpKQogICAgICAgICByZXN1bHQgPSB1dGltZV9kaXJfZmQoJnV0aW1lLCBkaXJfZmQsIHBhdGgubmFycm93LCBmb2xsb3dfc3ltbGlua3MpOwogICAgIGVsc2UKICNlbmRpZgogCi0jaWYgVVRJTUVfSEFWRV9GRAorI2lmIGRlZmluZWQoSEFWRV9GVVRJTUVTKSB8fCBkZWZpbmVkKEhBVkVfRlVUSU1FTlMpCiAgICAgaWYgKHBhdGguZmQgIT0gLTEpCiAgICAgICAgIHJlc3VsdCA9IHV0aW1lX2ZkKCZ1dGltZSwgcGF0aC5mZCk7CiAgICAgZWxzZQpAQCAtNDk2MSw4ICs1MTAyLDEwIEBACiAgICAgICAgIHJldHVybiAwOwogICAgIHNpemUgPSBQeUJ5dGVzX0dFVF9TSVpFKGJ5dGVzKTsKICAgICAqb3V0ID0gUHlNZW1fTWFsbG9jKHNpemUrMSk7Ci0gICAgaWYgKCEqb3V0KQorICAgIGlmICghKm91dCkgeworICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICByZXR1cm4gMDsKKyAgICB9CiAgICAgbWVtY3B5KCpvdXQsIFB5Qnl0ZXNfQXNTdHJpbmcoYnl0ZXMpLCBzaXplKzEpOwogICAgIFB5X0RFQ1JFRihieXRlcyk7CiAgICAgcmV0dXJuIDE7CkBAIC00OTkwLDggKzUxMzMsMTAgQEAKICAgICB9CiAgICAgZW52YyA9IDA7CiAgICAga2V5cyA9IFB5TWFwcGluZ19LZXlzKGVudik7CisgICAgaWYgKCFrZXlzKQorICAgICAgICBnb3RvIGVycm9yOwogICAgIHZhbHMgPSBQeU1hcHBpbmdfVmFsdWVzKGVudik7Ci0gICAgaWYgKCFrZXlzIHx8ICF2YWxzKQorICAgIGlmICghdmFscykKICAgICAgICAgZ290byBlcnJvcjsKICAgICBpZiAoIVB5TGlzdF9DaGVjayhrZXlzKSB8fCAhUHlMaXN0X0NoZWNrKHZhbHMpKSB7CiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCkBAIC01MDEyLDEwICs1MTU3LDYgQEAKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgIH0KIAotI2lmIGRlZmluZWQoUFlPU19PUzIpCi0gICAgICAgIC8qIE9taXQgUHNldWRvLUVudiBWYXJzIHRoYXQgV291bGQgQ29uZnVzZSBQcm9ncmFtcyBpZiBQYXNzZWQgT24gKi8KLSAgICAgICAgaWYgKHN0cmljbXAoaywgIkJFR0lOTElCUEFUSCIpICE9IDAgJiYgc3RyaWNtcChrLCAiRU5ETElCUEFUSCIpICE9IDApIHsKLSNlbmRpZgogICAgICAgICBrID0gUHlCeXRlc19Bc1N0cmluZyhrZXkyKTsKICAgICAgICAgdiA9IFB5Qnl0ZXNfQXNTdHJpbmcodmFsMik7CiAgICAgICAgIGxlbiA9IFB5Qnl0ZXNfR0VUX1NJWkUoa2V5MikgKyBQeUJ5dGVzX0dFVF9TSVpFKHZhbDIpICsgMjsKQEAgLTUwMzEsOSArNTE3Miw2IEBACiAgICAgICAgIGVudmxpc3RbZW52YysrXSA9IHA7CiAgICAgICAgIFB5X0RFQ1JFRihrZXkyKTsKICAgICAgICAgUHlfREVDUkVGKHZhbDIpOwotI2lmIGRlZmluZWQoUFlPU19PUzIpCi0gICAgICAgIH0KLSNlbmRpZgogICAgIH0KICAgICBQeV9ERUNSRUYodmFscyk7CiAgICAgUHlfREVDUkVGKGtleXMpOwpAQCAtNTE1OSw2ICs1Mjk3LDcgQEAKICAgICAgICBsaWtlIHBvc2l4LmVudmlyb24uICovCiAKICAgICBtZW1zZXQoJnBhdGgsIDAsIHNpemVvZihwYXRoKSk7CisgICAgcGF0aC5mdW5jdGlvbl9uYW1lID0gImV4ZWN2ZSI7CiAjaWZkZWYgSEFWRV9GRVhFQ1ZFCiAgICAgcGF0aC5hbGxvd19mZCA9IDE7CiAjZW5kaWYKQEAgLTUxOTgsNyArNTMzNyw3IEBACiAKICAgICAvKiBJZiB3ZSBnZXQgaGVyZSBpdCdzIGRlZmluaXRlbHkgYW4gZXJyb3IgKi8KIAotICAgIHBhdGhfcG9zaXhfZXJyb3IoImV4ZWN2ZSIsICZwYXRoKTsKKyAgICBwYXRoX2Vycm9yKCZwYXRoKTsKIAogICAgIHdoaWxlICgtLWVudmMgPj0gMCkKICAgICAgICAgUHlNZW1fREVMKGVudmxpc3RbZW52Y10pOwpAQCAtNTI3NCwxOCArNTQxMywxMiBAQAogICAgIH0KICAgICBhcmd2bGlzdFthcmdjXSA9IE5VTEw7CiAKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKSAmJiBkZWZpbmVkKFBZQ0NfR0NDKQotICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICBzcGF3bnZhbCA9IHNwYXdudihtb2RlLCBwYXRoLCBhcmd2bGlzdCk7Ci0gICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLSNlbHNlCiAgICAgaWYgKG1vZGUgPT0gX09MRF9QX09WRVJMQVkpCiAgICAgICAgIG1vZGUgPSBfUF9PVkVSTEFZOwogCiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgIHNwYXdudmFsID0gX3NwYXdudihtb2RlLCBwYXRoLCBhcmd2bGlzdCk7CiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLSNlbmRpZgogCiAgICAgZnJlZV9zdHJpbmdfYXJyYXkoYXJndmxpc3QsIGFyZ2MpOwogICAgIFB5X0RFQ1JFRihvcGF0aCk7CkBAIC01MjkzLDExICs1NDI2LDcgQEAKICAgICBpZiAoc3Bhd252YWwgPT0gLTEpCiAgICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOwogICAgIGVsc2UKLSNpZiBTSVpFT0ZfTE9ORyA9PSBTSVpFT0ZfVk9JRF9QCi0gICAgICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJsIiwgKGxvbmcpIHNwYXdudmFsKTsKLSNlbHNlCi0gICAgICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJMIiwgKFBZX0xPTkdfTE9ORykgc3Bhd252YWwpOwotI2VuZGlmCisgICAgICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKF9QeV9QQVJTRV9JTlRQVFIsIHNwYXdudmFsKTsKIH0KIAogCkBAIC01MzczLDI3ICs1NTAyLDE3IEBACiAgICAgaWYgKGVudmxpc3QgPT0gTlVMTCkKICAgICAgICAgZ290byBmYWlsXzE7CiAKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKSAmJiBkZWZpbmVkKFBZQ0NfR0NDKQotICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICBzcGF3bnZhbCA9IHNwYXdudmUobW9kZSwgcGF0aCwgYXJndmxpc3QsIGVudmxpc3QpOwotICAgIFB5X0VORF9BTExPV19USFJFQURTCi0jZWxzZQogICAgIGlmIChtb2RlID09IF9PTERfUF9PVkVSTEFZKQogICAgICAgICBtb2RlID0gX1BfT1ZFUkxBWTsKIAogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICBzcGF3bnZhbCA9IF9zcGF3bnZlKG1vZGUsIHBhdGgsIGFyZ3ZsaXN0LCBlbnZsaXN0KTsKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotI2VuZGlmCiAKICAgICBpZiAoc3Bhd252YWwgPT0gLTEpCiAgICAgICAgICh2b2lkKSBwb3NpeF9lcnJvcigpOwogICAgIGVsc2UKLSNpZiBTSVpFT0ZfTE9ORyA9PSBTSVpFT0ZfVk9JRF9QCi0gICAgICAgIHJlcyA9IFB5X0J1aWxkVmFsdWUoImwiLCAobG9uZykgc3Bhd252YWwpOwotI2Vsc2UKLSAgICAgICAgcmVzID0gUHlfQnVpbGRWYWx1ZSgiTCIsIChQWV9MT05HX0xPTkcpIHNwYXdudmFsKTsKLSNlbmRpZgorICAgICAgICByZXMgPSBQeV9CdWlsZFZhbHVlKF9QeV9QQVJTRV9JTlRQVFIsIHNwYXdudmFsKTsKIAogICAgIHdoaWxlICgtLWVudmMgPj0gMCkKICAgICAgICAgUHlNZW1fREVMKGVudmxpc3RbZW52Y10pOwpAQCAtNTQwNSwxODMgKzU1MjQsNiBAQAogICAgIHJldHVybiByZXM7CiB9CiAKLS8qIE9TLzIgc3VwcG9ydHMgc3Bhd252cCAmIHNwYXdudnBlIG5hdGl2ZWx5ICovCi0jaWYgZGVmaW5lZChQWU9TX09TMikKLVB5RG9jX1NUUlZBUihwb3NpeF9zcGF3bnZwX19kb2NfXywKLSJzcGF3bnZwKG1vZGUsIGZpbGUsIGFyZ3MpXG5cblwKLUV4ZWN1dGUgdGhlIHByb2dyYW0gJ2ZpbGUnIGluIGEgbmV3IHByb2Nlc3MsIHVzaW5nIHRoZSBlbnZpcm9ubWVudFxuXAotc2VhcmNoIHBhdGggdG8gZmluZCB0aGUgZmlsZS5cblwKLVxuXAotICAgIG1vZGU6IG1vZGUgb2YgcHJvY2VzcyBjcmVhdGlvblxuXAotICAgIGZpbGU6IGV4ZWN1dGFibGUgZmlsZSBuYW1lXG5cCi0gICAgYXJnczogdHVwbGUgb3IgbGlzdCBvZiBzdHJpbmdzIik7Ci0KLXN0YXRpYyBQeU9iamVjdCAqCi1wb3NpeF9zcGF3bnZwKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKLXsKLSAgICBQeU9iamVjdCAqb3BhdGg7Ci0gICAgY2hhciAqcGF0aDsKLSAgICBQeU9iamVjdCAqYXJndjsKLSAgICBjaGFyICoqYXJndmxpc3Q7Ci0gICAgaW50IG1vZGUsIGksIGFyZ2M7Ci0gICAgUHlfaW50cHRyX3Qgc3Bhd252YWw7Ci0gICAgUHlPYmplY3QgKigqZ2V0aXRlbSkoUHlPYmplY3QgKiwgUHlfc3NpemVfdCk7Ci0KLSAgICAvKiBzcGF3bnZwIGhhcyB0aHJlZSBhcmd1bWVudHM6IChtb2RlLCBwYXRoLCBhcmd2KSwgd2hlcmUKLSAgICAgICBhcmd2IGlzIGEgbGlzdCBvciB0dXBsZSBvZiBzdHJpbmdzLiAqLwotCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpTyZPOnNwYXdudnAiLCAmbW9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0ZTQ29udmVydGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmb3BhdGgsICZhcmd2KSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgcGF0aCA9IFB5Qnl0ZXNfQXNTdHJpbmcob3BhdGgpOwotICAgIGlmIChQeUxpc3RfQ2hlY2soYXJndikpIHsKLSAgICAgICAgYXJnYyA9IFB5TGlzdF9TaXplKGFyZ3YpOwotICAgICAgICBnZXRpdGVtID0gUHlMaXN0X0dldEl0ZW07Ci0gICAgfQotICAgIGVsc2UgaWYgKFB5VHVwbGVfQ2hlY2soYXJndikpIHsKLSAgICAgICAgYXJnYyA9IFB5VHVwbGVfU2l6ZShhcmd2KTsKLSAgICAgICAgZ2V0aXRlbSA9IFB5VHVwbGVfR2V0SXRlbTsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAic3Bhd252cCgpIGFyZyAyIG11c3QgYmUgYSB0dXBsZSBvciBsaXN0Iik7Ci0gICAgICAgIFB5X0RFQ1JFRihvcGF0aCk7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIGFyZ3ZsaXN0ID0gUHlNZW1fTkVXKGNoYXIgKiwgYXJnYysxKTsKLSAgICBpZiAoYXJndmxpc3QgPT0gTlVMTCkgewotICAgICAgICBQeV9ERUNSRUYob3BhdGgpOwotICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKLSAgICB9Ci0gICAgZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKykgewotICAgICAgICBpZiAoIWZzY29udmVydF9zdHJkdXAoKCpnZXRpdGVtKShhcmd2LCBpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhcmd2bGlzdFtpXSkpIHsKLSAgICAgICAgICAgIGZyZWVfc3RyaW5nX2FycmF5KGFyZ3ZsaXN0LCBpKTsKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZygKLSAgICAgICAgICAgICAgICBQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgInNwYXdudnAoKSBhcmcgMiBtdXN0IGNvbnRhaW4gb25seSBzdHJpbmdzIik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYob3BhdGgpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgYXJndmxpc3RbYXJnY10gPSBOVUxMOwotCi0gICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotI2lmIGRlZmluZWQoUFlDQ19HQ0MpCi0gICAgc3Bhd252YWwgPSBzcGF3bnZwKG1vZGUsIHBhdGgsIGFyZ3ZsaXN0KTsKLSNlbHNlCi0gICAgc3Bhd252YWwgPSBfc3Bhd252cChtb2RlLCBwYXRoLCBhcmd2bGlzdCk7Ci0jZW5kaWYKLSAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotCi0gICAgZnJlZV9zdHJpbmdfYXJyYXkoYXJndmxpc3QsIGFyZ2MpOwotICAgIFB5X0RFQ1JFRihvcGF0aCk7Ci0KLSAgICBpZiAoc3Bhd252YWwgPT0gLTEpCi0gICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoImwiLCAobG9uZykgc3Bhd252YWwpOwotfQotCi0KLVB5RG9jX1NUUlZBUihwb3NpeF9zcGF3bnZwZV9fZG9jX18sCi0ic3Bhd252cGUobW9kZSwgZmlsZSwgYXJncywgZW52KVxuXG5cCi1FeGVjdXRlIHRoZSBwcm9ncmFtICdmaWxlJyBpbiBhIG5ldyBwcm9jZXNzLCB1c2luZyB0aGUgZW52aXJvbm1lbnRcblwKLXNlYXJjaCBwYXRoIHRvIGZpbmQgdGhlIGZpbGUuXG5cCi1cblwKLSAgICBtb2RlOiBtb2RlIG9mIHByb2Nlc3MgY3JlYXRpb25cblwKLSAgICBmaWxlOiBleGVjdXRhYmxlIGZpbGUgbmFtZVxuXAotICAgIGFyZ3M6IHR1cGxlIG9yIGxpc3Qgb2YgYXJndW1lbnRzXG5cCi0gICAgZW52OiBkaWN0aW9uYXJ5IG9mIHN0cmluZ3MgbWFwcGluZyB0byBzdHJpbmdzIik7Ci0KLXN0YXRpYyBQeU9iamVjdCAqCi1wb3NpeF9zcGF3bnZwZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi17Ci0gICAgUHlPYmplY3QgKm9wYXRoOwotICAgIGNoYXIgKnBhdGg7Ci0gICAgUHlPYmplY3QgKmFyZ3YsICplbnY7Ci0gICAgY2hhciAqKmFyZ3ZsaXN0OwotICAgIGNoYXIgKiplbnZsaXN0OwotICAgIFB5T2JqZWN0ICpyZXM9TlVMTDsKLSAgICBpbnQgbW9kZTsKLSAgICBQeV9zc2l6ZV90IGFyZ2MsIGksIGVudmM7Ci0gICAgUHlfaW50cHRyX3Qgc3Bhd252YWw7Ci0gICAgUHlPYmplY3QgKigqZ2V0aXRlbSkoUHlPYmplY3QgKiwgUHlfc3NpemVfdCk7Ci0gICAgaW50IGxhc3RhcmcgPSAwOwotCi0gICAgLyogc3Bhd252cGUgaGFzIGZvdXIgYXJndW1lbnRzOiAobW9kZSwgcGF0aCwgYXJndiwgZW52KSwgd2hlcmUKLSAgICAgICBhcmd2IGlzIGEgbGlzdCBvciB0dXBsZSBvZiBzdHJpbmdzIGFuZCBlbnYgaXMgYSBkaWN0aW9uYXJ5Ci0gICAgICAgbGlrZSBwb3NpeC5lbnZpcm9uLiAqLwotCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpZXRPTzpzcGF3bnZwZSIsICZtb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfRlNDb252ZXJ0ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZvcGF0aCwgJmFyZ3YsICZlbnYpKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBwYXRoID0gUHlCeXRlc19Bc1N0cmluZyhvcGF0aCk7Ci0gICAgaWYgKFB5TGlzdF9DaGVjayhhcmd2KSkgewotICAgICAgICBhcmdjID0gUHlMaXN0X1NpemUoYXJndik7Ci0gICAgICAgIGdldGl0ZW0gPSBQeUxpc3RfR2V0SXRlbTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoUHlUdXBsZV9DaGVjayhhcmd2KSkgewotICAgICAgICBhcmdjID0gUHlUdXBsZV9TaXplKGFyZ3YpOwotICAgICAgICBnZXRpdGVtID0gUHlUdXBsZV9HZXRJdGVtOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJzcGF3bnZwZSgpIGFyZyAyIG11c3QgYmUgYSB0dXBsZSBvciBsaXN0Iik7Ci0gICAgICAgIGdvdG8gZmFpbF8wOwotICAgIH0KLSAgICBpZiAoIVB5TWFwcGluZ19DaGVjayhlbnYpKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAic3Bhd252cGUoKSBhcmcgMyBtdXN0IGJlIGEgbWFwcGluZyBvYmplY3QiKTsKLSAgICAgICAgZ290byBmYWlsXzA7Ci0gICAgfQotCi0gICAgYXJndmxpc3QgPSBQeU1lbV9ORVcoY2hhciAqLCBhcmdjKzEpOwotICAgIGlmIChhcmd2bGlzdCA9PSBOVUxMKSB7Ci0gICAgICAgIFB5RXJyX05vTWVtb3J5KCk7Ci0gICAgICAgIGdvdG8gZmFpbF8wOwotICAgIH0KLSAgICBmb3IgKGkgPSAwOyBpIDwgYXJnYzsgaSsrKSB7Ci0gICAgICAgIGlmICghZnNjb252ZXJ0X3N0cmR1cCgoKmdldGl0ZW0pKGFyZ3YsIGkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFyZ3ZsaXN0W2ldKSkKLSAgICAgICAgewotICAgICAgICAgICAgbGFzdGFyZyA9IGk7Ci0gICAgICAgICAgICBnb3RvIGZhaWxfMTsKLSAgICAgICAgfQotICAgIH0KLSAgICBsYXN0YXJnID0gYXJnYzsKLSAgICBhcmd2bGlzdFthcmdjXSA9IE5VTEw7Ci0KLSAgICBlbnZsaXN0ID0gcGFyc2VfZW52bGlzdChlbnYsICZlbnZjKTsKLSAgICBpZiAoZW52bGlzdCA9PSBOVUxMKQotICAgICAgICBnb3RvIGZhaWxfMTsKLQotICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSNpZiBkZWZpbmVkKFBZQ0NfR0NDKQotICAgIHNwYXdudmFsID0gc3Bhd252cGUobW9kZSwgcGF0aCwgYXJndmxpc3QsIGVudmxpc3QpOwotI2Vsc2UKLSAgICBzcGF3bnZhbCA9IF9zcGF3bnZwZShtb2RlLCBwYXRoLCBhcmd2bGlzdCwgZW52bGlzdCk7Ci0jZW5kaWYKLSAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotCi0gICAgaWYgKHNwYXdudmFsID09IC0xKQotICAgICAgICAodm9pZCkgcG9zaXhfZXJyb3IoKTsKLSAgICBlbHNlCi0gICAgICAgIHJlcyA9IFB5X0J1aWxkVmFsdWUoImwiLCAobG9uZykgc3Bhd252YWwpOwotCi0gICAgd2hpbGUgKC0tZW52YyA+PSAwKQotICAgICAgICBQeU1lbV9ERUwoZW52bGlzdFtlbnZjXSk7Ci0gICAgUHlNZW1fREVMKGVudmxpc3QpOwotICBmYWlsXzE6Ci0gICAgZnJlZV9zdHJpbmdfYXJyYXkoYXJndmxpc3QsIGxhc3RhcmcpOwotICBmYWlsXzA6Ci0gICAgUHlfREVDUkVGKG9wYXRoKTsKLSAgICByZXR1cm4gcmVzOwotfQotI2VuZGlmIC8qIFBZT1NfT1MyICovCiAjZW5kaWYgLyogSEFWRV9TUEFXTlYgKi8KIAogCkBAIC02MDg0LDcgKzYwMjYsNyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIHBvc2l4X29wZW5wdHkoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpub2FyZ3MpCiB7Ci0gICAgaW50IG1hc3Rlcl9mZCwgc2xhdmVfZmQ7CisgICAgaW50IG1hc3Rlcl9mZCA9IC0xLCBzbGF2ZV9mZCA9IC0xOwogI2lmbmRlZiBIQVZFX09QRU5QVFkKICAgICBjaGFyICogc2xhdmVfbmFtZTsKICNlbmRpZgpAQCAtNjA5NywzNyArNjAzOSw1NiBAQAogCiAjaWZkZWYgSEFWRV9PUEVOUFRZCiAgICAgaWYgKG9wZW5wdHkoJm1hc3Rlcl9mZCwgJnNsYXZlX2ZkLCBOVUxMLCBOVUxMLCBOVUxMKSAhPSAwKQotICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKKyAgICAgICAgZ290byBwb3NpeF9lcnJvcjsKKworICAgIGlmIChfUHlfc2V0X2luaGVyaXRhYmxlKG1hc3Rlcl9mZCwgMCwgTlVMTCkgPCAwKQorICAgICAgICBnb3RvIGVycm9yOworICAgIGlmIChfUHlfc2V0X2luaGVyaXRhYmxlKHNsYXZlX2ZkLCAwLCBOVUxMKSA8IDApCisgICAgICAgIGdvdG8gZXJyb3I7CisKICNlbGlmIGRlZmluZWQoSEFWRV9fR0VUUFRZKQogICAgIHNsYXZlX25hbWUgPSBfZ2V0cHR5KCZtYXN0ZXJfZmQsIE9fUkRXUiwgMDY2NiwgMCk7CiAgICAgaWYgKHNsYXZlX25hbWUgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CisgICAgICAgIGdvdG8gcG9zaXhfZXJyb3I7CisgICAgaWYgKF9QeV9zZXRfaW5oZXJpdGFibGUobWFzdGVyX2ZkLCAwLCBOVUxMKSA8IDApCisgICAgICAgIGdvdG8gZXJyb3I7CiAKLSAgICBzbGF2ZV9mZCA9IG9wZW4oc2xhdmVfbmFtZSwgT19SRFdSKTsKKyAgICBzbGF2ZV9mZCA9IF9QeV9vcGVuKHNsYXZlX25hbWUsIE9fUkRXUik7CiAgICAgaWYgKHNsYXZlX2ZkIDwgMCkKLSAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CisgICAgICAgIGdvdG8gcG9zaXhfZXJyb3I7CisKICNlbHNlCiAgICAgbWFzdGVyX2ZkID0gb3BlbihERVZfUFRZX0ZJTEUsIE9fUkRXUiB8IE9fTk9DVFRZKTsgLyogb3BlbiBtYXN0ZXIgKi8KICAgICBpZiAobWFzdGVyX2ZkIDwgMCkKLSAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CisgICAgICAgIGdvdG8gcG9zaXhfZXJyb3I7CisKICAgICBzaWdfc2F2ZWQgPSBQeU9TX3NldHNpZyhTSUdDSExELCBTSUdfREZMKTsKKwogICAgIC8qIGNoYW5nZSBwZXJtaXNzaW9uIG9mIHNsYXZlICovCiAgICAgaWYgKGdyYW50cHQobWFzdGVyX2ZkKSA8IDApIHsKICAgICAgICAgUHlPU19zZXRzaWcoU0lHQ0hMRCwgc2lnX3NhdmVkKTsKLSAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CisgICAgICAgIGdvdG8gcG9zaXhfZXJyb3I7CiAgICAgfQorCiAgICAgLyogdW5sb2NrIHNsYXZlICovCiAgICAgaWYgKHVubG9ja3B0KG1hc3Rlcl9mZCkgPCAwKSB7CiAgICAgICAgIFB5T1Nfc2V0c2lnKFNJR0NITEQsIHNpZ19zYXZlZCk7Ci0gICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOworICAgICAgICBnb3RvIHBvc2l4X2Vycm9yOwogICAgIH0KKwogICAgIFB5T1Nfc2V0c2lnKFNJR0NITEQsIHNpZ19zYXZlZCk7CisKICAgICBzbGF2ZV9uYW1lID0gcHRzbmFtZShtYXN0ZXJfZmQpOyAvKiBnZXQgbmFtZSBvZiBzbGF2ZSAqLwogICAgIGlmIChzbGF2ZV9uYW1lID09IE5VTEwpCi0gICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOwotICAgIHNsYXZlX2ZkID0gb3BlbihzbGF2ZV9uYW1lLCBPX1JEV1IgfCBPX05PQ1RUWSk7IC8qIG9wZW4gc2xhdmUgKi8KKyAgICAgICAgZ290byBwb3NpeF9lcnJvcjsKKworICAgIHNsYXZlX2ZkID0gX1B5X29wZW4oc2xhdmVfbmFtZSwgT19SRFdSIHwgT19OT0NUVFkpOyAvKiBvcGVuIHNsYXZlICovCiAgICAgaWYgKHNsYXZlX2ZkIDwgMCkKLSAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CisgICAgICAgIGdvdG8gcG9zaXhfZXJyb3I7CisKKyAgICBpZiAoX1B5X3NldF9pbmhlcml0YWJsZShtYXN0ZXJfZmQsIDAsIE5VTEwpIDwgMCkKKyAgICAgICAgZ290byBwb3NpeF9lcnJvcjsKKwogI2lmICFkZWZpbmVkKF9fQ1lHV0lOX18pICYmICFkZWZpbmVkKEhBVkVfREVWX1BUQykKICAgICBpb2N0bChzbGF2ZV9mZCwgSV9QVVNILCAicHRlbSIpOyAvKiBwdXNoIHB0ZW0gKi8KICAgICBpb2N0bChzbGF2ZV9mZCwgSV9QVVNILCAibGR0ZXJtIik7IC8qIHB1c2ggbGR0ZXJtICovCkBAIC02MTM5LDYgKzYxMDAsMTYgQEAKIAogICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCIoaWkpIiwgbWFzdGVyX2ZkLCBzbGF2ZV9mZCk7CiAKK3Bvc2l4X2Vycm9yOgorICAgIHBvc2l4X2Vycm9yKCk7CisjaWYgZGVmaW5lZChIQVZFX09QRU5QVFkpIHx8IGRlZmluZWQoSEFWRV9fR0VUUFRZKQorZXJyb3I6CisjZW5kaWYKKyAgICBpZiAobWFzdGVyX2ZkICE9IC0xKQorICAgICAgICBjbG9zZShtYXN0ZXJfZmQpOworICAgIGlmIChzbGF2ZV9mZCAhPSAtMSkKKyAgICAgICAgY2xvc2Uoc2xhdmVfZmQpOworICAgIHJldHVybiBOVUxMOwogfQogI2VuZGlmIC8qIGRlZmluZWQoSEFWRV9PUEVOUFRZKSB8fCBkZWZpbmVkKEhBVkVfX0dFVFBUWSkgfHwgZGVmaW5lZChIQVZFX0RFVl9QVE1YKSAqLwogCkBAIC02MjYzLDkgKzYyMzQsOSBAQAogI2VuZGlmCiAKICNpZmRlZiBfX0FQUExFX18KLSAgICBncm91cHMgPSBQeU1lbV9NYWxsb2Mobmdyb3VwcyAqIHNpemVvZihpbnQpKTsKKyAgICBncm91cHMgPSBQeU1lbV9OZXcoaW50LCBuZ3JvdXBzKTsKICNlbHNlCi0gICAgZ3JvdXBzID0gUHlNZW1fTWFsbG9jKG5ncm91cHMgKiBzaXplb2YoZ2lkX3QpKTsKKyAgICBncm91cHMgPSBQeU1lbV9OZXcoZ2lkX3QsIG5ncm91cHMpOwogI2VuZGlmCiAgICAgaWYgKGdyb3VwcyA9PSBOVUxMKQogICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKQEAgLTYzNDMsNyArNjMxNCw3IEBACiAgICAgICAgIC8qIGdyb3VwcyB3aWxsIGZpdCBpbiBleGlzdGluZyBhcnJheSAqLwogICAgICAgICBhbHRfZ3JvdXBsaXN0ID0gZ3JvdXBsaXN0OwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGFsdF9ncm91cGxpc3QgPSBQeU1lbV9NYWxsb2MobiAqIHNpemVvZihnaWRfdCkpOworICAgICAgICBhbHRfZ3JvdXBsaXN0ID0gUHlNZW1fTmV3KGdpZF90LCBuKTsKICAgICAgICAgaWYgKGFsdF9ncm91cGxpc3QgPT0gTlVMTCkgewogICAgICAgICAgICAgZXJybm8gPSBFSU5WQUw7CiAgICAgICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKQEAgLTYzNjksNyArNjM0MCw3IEBACiAgICAgICAgICAgICAgICAgLyogQXZvaWQgbWFsbG9jKDApICovCiAgICAgICAgICAgICAgICAgYWx0X2dyb3VwbGlzdCA9IGdyb3VwbGlzdDsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgYWx0X2dyb3VwbGlzdCA9IFB5TWVtX01hbGxvYyhuICogc2l6ZW9mKGdpZF90KSk7CisgICAgICAgICAgICAgICAgYWx0X2dyb3VwbGlzdCA9IFB5TWVtX05ldyhnaWRfdCwgbik7CiAgICAgICAgICAgICAgICAgaWYgKGFsdF9ncm91cGxpc3QgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgICAgICBlcnJubyA9IEVJTlZBTDsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CkBAIC02NjMxLDIzICs2NjAyLDggQEAKICAgICBpbnQgc2lnOwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBfUHlfUEFSU0VfUElEICJpOmtpbGwiLCAmcGlkLCAmc2lnKSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0jaWYgZGVmaW5lZChQWU9TX09TMikgJiYgIWRlZmluZWQoUFlDQ19HQ0MpCi0gICAgaWYgKHNpZyA9PSBYQ1BUX1NJR05BTF9JTlRSIHx8IHNpZyA9PSBYQ1BUX1NJR05BTF9CUkVBSykgewotICAgICAgICBBUElSRVQgcmM7Ci0gICAgICAgIGlmICgocmMgPSBEb3NTZW5kU2lnbmFsRXhjZXB0aW9uKHBpZCwgc2lnKSkgIT0gTk9fRVJST1IpCi0gICAgICAgICAgICByZXR1cm4gb3MyX2Vycm9yKHJjKTsKLQotICAgIH0gZWxzZSBpZiAoc2lnID09IFhDUFRfU0lHTkFMX0tJTExQUk9DKSB7Ci0gICAgICAgIEFQSVJFVCByYzsKLSAgICAgICAgaWYgKChyYyA9IERvc0tpbGxQcm9jZXNzKERLUF9QUk9DRVNTLCBwaWQpKSAhPSBOT19FUlJPUikKLSAgICAgICAgICAgIHJldHVybiBvczJfZXJyb3IocmMpOwotCi0gICAgfSBlbHNlCi0gICAgICAgIHJldHVybiBOVUxMOyAvKiBVbnJlY29nbml6ZWQgU2lnbmFsIFJlcXVlc3RlZCAqLwotI2Vsc2UKICAgICBpZiAoa2lsbChwaWQsIHNpZykgPT0gLTEpCiAgICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOwotI2VuZGlmCiAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwogICAgIHJldHVybiBQeV9Ob25lOwogfQpAQCAtNjY4NSwxNiArNjY0MSwxNyBAQAogd2luMzJfa2lsbChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CiAgICAgUHlPYmplY3QgKnJlc3VsdDsKLSAgICBEV09SRCBwaWQsIHNpZywgZXJyOworICAgIHBpZF90IHBpZDsKKyAgICBEV09SRCBzaWcsIGVycjsKICAgICBIQU5ETEUgaGFuZGxlOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJrazpraWxsIiwgJnBpZCwgJnNpZykpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIF9QeV9QQVJTRV9QSUQgIms6a2lsbCIsICZwaWQsICZzaWcpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIC8qIENvbnNvbGUgcHJvY2Vzc2VzIHdoaWNoIHNoYXJlIGEgY29tbW9uIGNvbnNvbGUgY2FuIGJlIHNlbnQgQ1RSTCtDIG9yCiAgICAgICAgQ1RSTCtCUkVBSyBldmVudHMsIHByb3ZpZGVkIHRoZXkgaGFuZGxlIHNhaWQgZXZlbnRzLiAqLwogICAgIGlmIChzaWcgPT0gQ1RSTF9DX0VWRU5UIHx8IHNpZyA9PSBDVFJMX0JSRUFLX0VWRU5UKSB7Ci0gICAgICAgIGlmIChHZW5lcmF0ZUNvbnNvbGVDdHJsRXZlbnQoc2lnLCBwaWQpID09IDApIHsKKyAgICAgICAgaWYgKEdlbmVyYXRlQ29uc29sZUN0cmxFdmVudChzaWcsIChEV09SRClwaWQpID09IDApIHsKICAgICAgICAgICAgIGVyciA9IEdldExhc3RFcnJvcigpOwogICAgICAgICAgICAgUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoZXJyKTsKICAgICAgICAgfQpAQCAtNjcwNCw3ICs2NjYxLDcgQEAKIAogICAgIC8qIElmIHRoZSBzaWduYWwgaXMgb3V0c2lkZSBvZiB3aGF0IEdlbmVyYXRlQ29uc29sZUN0cmxFdmVudCBjYW4gdXNlLAogICAgICAgIGF0dGVtcHQgdG8gb3BlbiBhbmQgdGVybWluYXRlIHRoZSBwcm9jZXNzLiAqLwotICAgIGhhbmRsZSA9IE9wZW5Qcm9jZXNzKFBST0NFU1NfQUxMX0FDQ0VTUywgRkFMU0UsIHBpZCk7CisgICAgaGFuZGxlID0gT3BlblByb2Nlc3MoUFJPQ0VTU19BTExfQUNDRVNTLCBGQUxTRSwgKERXT1JEKXBpZCk7CiAgICAgaWYgKGhhbmRsZSA9PSBOVUxMKSB7CiAgICAgICAgIGVyciA9IEdldExhc3RFcnJvcigpOwogICAgICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoZXJyKTsKQEAgLTcxMTAsNyArNzA2Nyw3IEBACiAgICAgUHlfaW50cHRyX3QgcGlkOwogICAgIGludCBzdGF0dXMsIG9wdGlvbnM7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgX1B5X1BBUlNFX1BJRCAiaTp3YWl0cGlkIiwgJnBpZCwgJm9wdGlvbnMpKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBfUHlfUEFSU0VfSU5UUFRSICJpOndhaXRwaWQiLCAmcGlkLCAmb3B0aW9ucykpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICBwaWQgPSBfY3dhaXQoJnN0YXR1cywgcGlkLCBvcHRpb25zKTsKQEAgLTcxMTksNyArNzA3Niw3IEBACiAgICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOwogCiAgICAgLyogc2hpZnQgdGhlIHN0YXR1cyBsZWZ0IGEgYnl0ZSBzbyB0aGlzIGlzIG1vcmUgbGlrZSB0aGUgUE9TSVggd2FpdHBpZCAqLwotICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJOaSIsIFB5TG9uZ19Gcm9tUGlkKHBpZCksIHN0YXR1cyA8PCA4KTsKKyAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZShfUHlfUEFSU0VfSU5UUFRSICJpIiwgcGlkLCBzdGF0dXMgPDwgOCk7CiB9CiAjZW5kaWYgLyogSEFWRV9XQUlUUElEIHx8IEhBVkVfQ1dBSVQgKi8KIApAQCAtNzE3MCw2ICs3MTI3LDcgQEAKICAgICBzdGF0aWMgY2hhciAqa2V5d29yZHNbXSA9IHsicGF0aCIsICJkaXJfZmQiLCBOVUxMfTsKIAogICAgIG1lbXNldCgmcGF0aCwgMCwgc2l6ZW9mKHBhdGgpKTsKKyAgICBwYXRoLmZ1bmN0aW9uX25hbWUgPSAicmVhZGxpbmsiOwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgIk8mfCRPJjpyZWFkbGluayIsIGtleXdvcmRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoX2NvbnZlcnRlciwgJnBhdGgsCiAjaWZkZWYgSEFWRV9SRUFETElOS0FUCkBAIC03MTkwLDcgKzcxNDgsNyBAQAogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKICAgICBpZiAobGVuZ3RoIDwgMCkgewotICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX3Bvc2l4X2Vycm9yKCJyZWFkbGluayIsICZwYXRoKTsKKyAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9lcnJvcigmcGF0aCk7CiAgICAgICAgIGdvdG8gZXhpdDsKICAgICB9CiAKQEAgLTcyMjYsOCArNzE4NCw5IEBACiAvKiBHcmFiIENyZWF0ZVN5bWJvbGljTGlua1cgZHluYW1pY2FsbHkgZnJvbSBrZXJuZWwzMiAqLwogc3RhdGljIERXT1JEIChDQUxMQkFDSyAqUHlfQ3JlYXRlU3ltYm9saWNMaW5rVykoTFBXU1RSLCBMUFdTVFIsIERXT1JEKSA9IE5VTEw7CiBzdGF0aWMgRFdPUkQgKENBTExCQUNLICpQeV9DcmVhdGVTeW1ib2xpY0xpbmtBKShMUFNUUiwgTFBTVFIsIERXT1JEKSA9IE5VTEw7CisKIHN0YXRpYyBpbnQKLWNoZWNrX0NyZWF0ZVN5bWJvbGljTGluaygpCitjaGVja19DcmVhdGVTeW1ib2xpY0xpbmsodm9pZCkKIHsKICAgICBISU5TVEFOQ0UgaEtlcm5lbDMyOwogICAgIC8qIG9ubHkgcmVjaGVjayAqLwpAQCAtNzI0MSw1NSArNzIwMCw1NyBAQAogICAgIHJldHVybiAoUHlfQ3JlYXRlU3ltYm9saWNMaW5rVyAmJiBQeV9DcmVhdGVTeW1ib2xpY0xpbmtBKTsKIH0KIAotdm9pZCBfZGlybmFtZVcoV0NIQVIgKnBhdGgpIHsKLSAgICAvKiBSZW1vdmUgdGhlIGxhc3QgcG9ydGlvbiBvZiB0aGUgcGF0aCAqLwotCisvKiBSZW1vdmUgdGhlIGxhc3QgcG9ydGlvbiBvZiB0aGUgcGF0aCAqLworc3RhdGljIHZvaWQKK19kaXJuYW1lVyhXQ0hBUiAqcGF0aCkKK3sKICAgICBXQ0hBUiAqcHRyOwogCiAgICAgLyogd2FsayB0aGUgcGF0aCBmcm9tIHRoZSBlbmQgdW50aWwgYSBiYWNrc2xhc2ggaXMgZW5jb3VudGVyZWQgKi8KLSAgICBmb3IocHRyID0gcGF0aCArIHdjc2xlbihwYXRoKTsgcHRyICE9IHBhdGg7IHB0ci0tKQotICAgIHsKLSAgICAgICAgaWYoKnB0ciA9PSAqTCJcXCIgfHwgKnB0ciA9PSAqTCIvIikgeworICAgIGZvcihwdHIgPSBwYXRoICsgd2NzbGVuKHBhdGgpOyBwdHIgIT0gcGF0aDsgcHRyLS0pIHsKKyAgICAgICAgaWYgKCpwdHIgPT0gTCdcXCcgfHwgKnB0ciA9PSBMJy8nKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KICAgICB9CiAgICAgKnB0ciA9IDA7CiB9CiAKLXZvaWQgX2Rpcm5hbWVBKGNoYXIgKnBhdGgpIHsKLSAgICAvKiBSZW1vdmUgdGhlIGxhc3QgcG9ydGlvbiBvZiB0aGUgcGF0aCAqLwotCisvKiBSZW1vdmUgdGhlIGxhc3QgcG9ydGlvbiBvZiB0aGUgcGF0aCAqLworc3RhdGljIHZvaWQKK19kaXJuYW1lQShjaGFyICpwYXRoKQorewogICAgIGNoYXIgKnB0cjsKIAogICAgIC8qIHdhbGsgdGhlIHBhdGggZnJvbSB0aGUgZW5kIHVudGlsIGEgYmFja3NsYXNoIGlzIGVuY291bnRlcmVkICovCi0gICAgZm9yKHB0ciA9IHBhdGggKyBzdHJsZW4ocGF0aCk7IHB0ciAhPSBwYXRoOyBwdHItLSkKLSAgICB7Ci0gICAgICAgIGlmKCpwdHIgPT0gJ1xcJyB8fCAqcHRyID09ICcvJykgeworICAgIGZvcihwdHIgPSBwYXRoICsgc3RybGVuKHBhdGgpOyBwdHIgIT0gcGF0aDsgcHRyLS0pIHsKKyAgICAgICAgaWYgKCpwdHIgPT0gJ1xcJyB8fCAqcHRyID09ICcvJykKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CiAgICAgfQogICAgICpwdHIgPSAwOwogfQogCi1pbnQgX2lzX2Fic1coV0NIQVIgKnBhdGgpIHsKLSAgICAvKiBJcyB0aGlzIHBhdGggYWJzb2x1dGU/ICovCi0KKy8qIElzIHRoaXMgcGF0aCBhYnNvbHV0ZT8gKi8KK3N0YXRpYyBpbnQKK19pc19hYnNXKGNvbnN0IFdDSEFSICpwYXRoKQorewogICAgIHJldHVybiBwYXRoWzBdID09IEwnXFwnIHx8IHBhdGhbMF0gPT0gTCcvJyB8fCBwYXRoWzFdID09IEwnOic7CiAKIH0KIAotaW50IF9pc19hYnNBKGNoYXIgKnBhdGgpIHsKLSAgICAvKiBJcyB0aGlzIHBhdGggYWJzb2x1dGU/ICovCi0KKy8qIElzIHRoaXMgcGF0aCBhYnNvbHV0ZT8gKi8KK3N0YXRpYyBpbnQKK19pc19hYnNBKGNvbnN0IGNoYXIgKnBhdGgpCit7CiAgICAgcmV0dXJuIHBhdGhbMF0gPT0gJ1xcJyB8fCBwYXRoWzBdID09ICcvJyB8fCBwYXRoWzFdID09ICc6JzsKIAogfQogCi12b2lkIF9qb2luVyhXQ0hBUiAqZGVzdF9wYXRoLCBjb25zdCBXQ0hBUiAqcm9vdCwgY29uc3QgV0NIQVIgKnJlc3QpIHsKLSAgICAvKiBqb2luIHJvb3QgYW5kIHJlc3Qgd2l0aCBhIGJhY2tzbGFzaCAqLwotICAgIGludCByb290X2xlbjsKKy8qIGpvaW4gcm9vdCBhbmQgcmVzdCB3aXRoIGEgYmFja3NsYXNoICovCitzdGF0aWMgdm9pZAorX2pvaW5XKFdDSEFSICpkZXN0X3BhdGgsIGNvbnN0IFdDSEFSICpyb290LCBjb25zdCBXQ0hBUiAqcmVzdCkKK3sKKyAgICBzaXplX3Qgcm9vdF9sZW47CiAKLSAgICBpZihfaXNfYWJzVyhyZXN0KSkgeworICAgIGlmIChfaXNfYWJzVyhyZXN0KSkgewogICAgICAgICB3Y3NjcHkoZGVzdF9wYXRoLCByZXN0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTcyOTgsMTcgKzcyNTksMTkgQEAKIAogICAgIHdjc2NweShkZXN0X3BhdGgsIHJvb3QpOwogICAgIGlmKHJvb3RfbGVuKSB7Ci0gICAgICAgIGRlc3RfcGF0aFtyb290X2xlbl0gPSAqTCJcXCI7Ci0gICAgICAgIHJvb3RfbGVuICs9IDE7CisgICAgICAgIGRlc3RfcGF0aFtyb290X2xlbl0gPSBMJ1xcJzsKKyAgICAgICAgcm9vdF9sZW4rKzsKICAgICB9CiAgICAgd2NzY3B5KGRlc3RfcGF0aCtyb290X2xlbiwgcmVzdCk7CiB9CiAKLXZvaWQgX2pvaW5BKGNoYXIgKmRlc3RfcGF0aCwgY29uc3QgY2hhciAqcm9vdCwgY29uc3QgY2hhciAqcmVzdCkgewotICAgIC8qIGpvaW4gcm9vdCBhbmQgcmVzdCB3aXRoIGEgYmFja3NsYXNoICovCi0gICAgaW50IHJvb3RfbGVuOworLyogam9pbiByb290IGFuZCByZXN0IHdpdGggYSBiYWNrc2xhc2ggKi8KK3N0YXRpYyB2b2lkCitfam9pbkEoY2hhciAqZGVzdF9wYXRoLCBjb25zdCBjaGFyICpyb290LCBjb25zdCBjaGFyICpyZXN0KQoreworICAgIHNpemVfdCByb290X2xlbjsKIAotICAgIGlmKF9pc19hYnNBKHJlc3QpKSB7CisgICAgaWYgKF9pc19hYnNBKHJlc3QpKSB7CiAgICAgICAgIHN0cmNweShkZXN0X3BhdGgsIHJlc3QpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNzMxOCwxNCArNzI4MSwxNSBAQAogICAgIHN0cmNweShkZXN0X3BhdGgsIHJvb3QpOwogICAgIGlmKHJvb3RfbGVuKSB7CiAgICAgICAgIGRlc3RfcGF0aFtyb290X2xlbl0gPSAnXFwnOwotICAgICAgICByb290X2xlbiArPSAxOworICAgICAgICByb290X2xlbisrOwogICAgIH0KICAgICBzdHJjcHkoZGVzdF9wYXRoK3Jvb3RfbGVuLCByZXN0KTsKIH0KIAotaW50IF9jaGVja19kaXJXKFdDSEFSICpzcmMsIFdDSEFSICpkZXN0KQorLyogUmV0dXJuIFRydWUgaWYgdGhlIHBhdGggYXQgc3JjIHJlbGF0aXZlIHRvIGRlc3QgaXMgYSBkaXJlY3RvcnkgKi8KK3N0YXRpYyBpbnQKK19jaGVja19kaXJXKFdDSEFSICpzcmMsIFdDSEFSICpkZXN0KQogewotICAgIC8qIFJldHVybiBUcnVlIGlmIHRoZSBwYXRoIGF0IHNyYyByZWxhdGl2ZSB0byBkZXN0IGlzIGEgZGlyZWN0b3J5ICovCiAgICAgV0lOMzJfRklMRV9BVFRSSUJVVEVfREFUQSBzcmNfaW5mbzsKICAgICBXQ0hBUiBkZXN0X3BhcmVudFtNQVhfUEFUSF07CiAgICAgV0NIQVIgc3JjX3Jlc29sdmVkW01BWF9QQVRIXSA9IEwiIjsKQEAgLTczNDEsMTggKzczMDUsMTkgQEAKICAgICApOwogfQogCi1pbnQgX2NoZWNrX2RpckEoY2hhciAqc3JjLCBjaGFyICpkZXN0KQorLyogUmV0dXJuIFRydWUgaWYgdGhlIHBhdGggYXQgc3JjIHJlbGF0aXZlIHRvIGRlc3QgaXMgYSBkaXJlY3RvcnkgKi8KK3N0YXRpYyBpbnQKK19jaGVja19kaXJBKGNoYXIgKnNyYywgY2hhciAqZGVzdCkKIHsKLSAgICAvKiBSZXR1cm4gVHJ1ZSBpZiB0aGUgcGF0aCBhdCBzcmMgcmVsYXRpdmUgdG8gZGVzdCBpcyBhIGRpcmVjdG9yeSAqLwogICAgIFdJTjMyX0ZJTEVfQVRUUklCVVRFX0RBVEEgc3JjX2luZm87CiAgICAgY2hhciBkZXN0X3BhcmVudFtNQVhfUEFUSF07CiAgICAgY2hhciBzcmNfcmVzb2x2ZWRbTUFYX1BBVEhdID0gIiI7CiAKICAgICAvKiBkZXN0X3BhcmVudCA9IG9zLnBhdGguZGlybmFtZShkZXN0KSAqLwogICAgIHN0cmNweShkZXN0X3BhcmVudCwgZGVzdCk7Ci0gICAgX2Rpcm5hbWVXKGRlc3RfcGFyZW50KTsKKyAgICBfZGlybmFtZUEoZGVzdF9wYXJlbnQpOwogICAgIC8qIHNyY19yZXNvbHZlZCA9IG9zLnBhdGguam9pbihkZXN0X3BhcmVudCwgc3JjKSAqLwotICAgIF9qb2luVyhzcmNfcmVzb2x2ZWQsIGRlc3RfcGFyZW50LCBzcmMpOworICAgIF9qb2luQShzcmNfcmVzb2x2ZWQsIGRlc3RfcGFyZW50LCBzcmMpOwogICAgIHJldHVybiAoCiAgICAgICAgIEdldEZpbGVBdHRyaWJ1dGVzRXhBKHNyY19yZXNvbHZlZCwgR2V0RmlsZUV4SW5mb1N0YW5kYXJkLCAmc3JjX2luZm8pCiAgICAgICAgICYmIHNyY19pbmZvLmR3RmlsZUF0dHJpYnV0ZXMgJiBGSUxFX0FUVFJJQlVURV9ESVJFQ1RPUlkKQEAgLTczNzgsOCArNzM0MywxMCBAQAogI2VuZGlmCiAKICAgICBtZW1zZXQoJnNyYywgMCwgc2l6ZW9mKHNyYykpOworICAgIHNyYy5mdW5jdGlvbl9uYW1lID0gInN5bWxpbmsiOwogICAgIHNyYy5hcmd1bWVudF9uYW1lID0gInNyYyI7CiAgICAgbWVtc2V0KCZkc3QsIDAsIHNpemVvZihkc3QpKTsKKyAgICBkc3QuZnVuY3Rpb25fbmFtZSA9ICJzeW1saW5rIjsKICAgICBkc3QuYXJndW1lbnRfbmFtZSA9ICJkc3QiOwogCiAjaWZkZWYgTVNfV0lORE9XUwpAQCAtNzQzMiw3ICs3Mzk5LDcgQEAKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCiAgICAgaWYgKCFyZXN1bHQpIHsKLSAgICAgICAgcmV0dXJuX3ZhbHVlID0gd2luMzJfZXJyb3Jfb2JqZWN0KCJzeW1saW5rIiwgc3JjLm9iamVjdCk7CisgICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfZXJyb3IyKCZzcmMsICZkc3QpOwogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogCkBAIC03NDQ4LDcgKzc0MTUsNyBAQAogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKICAgICBpZiAocmVzdWx0KSB7Ci0gICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfZXJyb3IoInN5bWxpbmsiLCAmZHN0KTsKKyAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9lcnJvcjIoJnNyYywgJmRzdCk7CiAgICAgICAgIGdvdG8gZXhpdDsKICAgICB9CiAjZW5kaWYKQEAgLTc2MTAsMzEgKzc1NzcsNyBAQAogdGltZXMuICBUaGUgb2JqZWN0IGJlaGF2ZXMgbGlrZSBhIG5hbWVkIHR1cGxlIHdpdGggdGhlc2UgZmllbGRzOlxuXAogICAodXRpbWUsIHN0aW1lLCBjdXRpbWUsIGNzdGltZSwgZWxhcHNlZF90aW1lKSIpOwogCi0jaWYgZGVmaW5lZChQWUNDX1ZBQ1BQKSAmJiBkZWZpbmVkKFBZT1NfT1MyKQotc3RhdGljIGxvbmcKLXN5c3RlbV91cHRpbWUodm9pZCkKLXsKLSAgICBVTE9ORyAgICAgdmFsdWUgPSAwOwotCi0gICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgIERvc1F1ZXJ5U3lzSW5mbyhRU1ZfTVNfQ09VTlQsIFFTVl9NU19DT1VOVCwgJnZhbHVlLCBzaXplb2YodmFsdWUpKTsKLSAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotCi0gICAgcmV0dXJuIHZhbHVlOwotfQotCi1zdGF0aWMgUHlPYmplY3QgKgotcG9zaXhfdGltZXMoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpub2FyZ3MpCi17Ci0gICAgLyogQ3VycmVudGx5IE9ubHkgVXB0aW1lIGlzIFByb3ZpZGVkIC0tIE90aGVycyBMYXRlciAqLwotICAgIHJldHVybiBidWlsZF90aW1lc19yZXN1bHQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgKGRvdWJsZSkwIC8qIHQudG1zX3V0aW1lIC8gSFogKi8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgKGRvdWJsZSkwIC8qIHQudG1zX3N0aW1lIC8gSFogKi8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgKGRvdWJsZSkwIC8qIHQudG1zX2N1dGltZSAvIEhaICovLAotICAgICAgICAgICAgICAgICAgICAgICAgIChkb3VibGUpMCAvKiB0LnRtc19jc3RpbWUgLyBIWiAqLywKLSAgICAgICAgICAgICAgICAgICAgICAgICAoZG91YmxlKXN5c3RlbV91cHRpbWUoKSAvIDEwMDApOwotfQotI2VsaWYgZGVmaW5lZChNU19XSU5ET1dTKQorI2lmIGRlZmluZWQoTVNfV0lORE9XUykKIHN0YXRpYyBQeU9iamVjdCAqCiBwb3NpeF90aW1lcyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm5vYXJncykKIHsKQEAgLTc2NTYsNyArNzU5OSw3IEBACiAgICAgICAgIChkb3VibGUpMCwKICAgICAgICAgKGRvdWJsZSkwKTsKIH0KLSNlbHNlIC8qIE5laXRoZXIgV2luZG93cyBub3IgT1MvMiAqLworI2Vsc2UgLyogTm90IFdpbmRvd3MgKi8KICNkZWZpbmUgTkVFRF9USUNLU19QRVJfU0VDT05ECiBzdGF0aWMgbG9uZyB0aWNrc19wZXJfc2Vjb25kID0gLTE7CiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtNzc3Niw2ICs3NzE5LDEwIEBACiAKIC8qIEZ1bmN0aW9ucyBhY3Rpbmcgb24gZmlsZSBkZXNjcmlwdG9ycyAqLwogCisjaWZkZWYgT19DTE9FWEVDCitleHRlcm4gaW50IF9QeV9vcGVuX2Nsb2V4ZWNfd29ya3M7CisjZW5kaWYKKwogUHlEb2NfU1RSVkFSKHBvc2l4X29wZW5fX2RvY19fLAogIm9wZW4ocGF0aCwgZmxhZ3MsIG1vZGU9MG83NzcsICosIGRpcl9mZD1Ob25lKVxuXG5cCiBPcGVuIGEgZmlsZSBmb3IgbG93IGxldmVsIElPLiAgUmV0dXJucyBhIGZpbGUgaGFuZGxlIChpbnRlZ2VyKS5cblwKQEAgLTc3OTUsOCArNzc0MiwxNCBAQAogICAgIGludCBmZDsKICAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKICAgICBzdGF0aWMgY2hhciAqa2V5d29yZHNbXSA9IHsicGF0aCIsICJmbGFncyIsICJtb2RlIiwgImRpcl9mZCIsIE5VTEx9OworI2lmZGVmIE9fQ0xPRVhFQworICAgIGludCAqYXRvbWljX2ZsYWdfd29ya3MgPSAmX1B5X29wZW5fY2xvZXhlY193b3JrczsKKyNlbGlmICFkZWZpbmVkKE1TX1dJTkRPV1MpCisgICAgaW50ICphdG9taWNfZmxhZ193b3JrcyA9IE5VTEw7CisjZW5kaWYKIAogICAgIG1lbXNldCgmcGF0aCwgMCwgc2l6ZW9mKHBhdGgpKTsKKyAgICBwYXRoLmZ1bmN0aW9uX25hbWUgPSAib3BlbiI7CiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiTyZpfGkkTyY6b3BlbiIsIGtleXdvcmRzLAogICAgICAgICBwYXRoX2NvbnZlcnRlciwgJnBhdGgsCiAgICAgICAgICZmbGFncywgJm1vZGUsCkBAIC03ODA4LDYgKzc3NjEsMTIgQEAKICAgICAgICAgKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgZmxhZ3MgfD0gT19OT0lOSEVSSVQ7CisjZWxpZiBkZWZpbmVkKE9fQ0xPRVhFQykKKyAgICBmbGFncyB8PSBPX0NMT0VYRUM7CisjZW5kaWYKKwogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICNpZmRlZiBNU19XSU5ET1dTCiAgICAgaWYgKHBhdGgud2lkZSkKQEAgLTc4MjMsMTYgKzc3ODIsMTcgQEAKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCiAgICAgaWYgKGZkID09IC0xKSB7Ci0jaWZkZWYgTVNfV0lORE9XUwotICAgICAgICAvKiBmb3JjZSB1c2Ugb2YgcG9zaXhfZXJyb3IgaGVyZSBmb3IgZXhhY3QgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgKi8KLSAgICAgICAgaWYgKHBhdGgud2lkZSkKLSAgICAgICAgICAgIHJldHVybl92YWx1ZSA9IHBvc2l4X2Vycm9yKCk7Ci0gICAgICAgIGVsc2UKLSNlbmRpZgotICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX2Vycm9yKCJvcGVuIiwgJnBhdGgpOworICAgICAgICBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWVPYmplY3QoUHlFeGNfT1NFcnJvciwgcGF0aC5vYmplY3QpOwogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogCisjaWZuZGVmIE1TX1dJTkRPV1MKKyAgICBpZiAoX1B5X3NldF9pbmhlcml0YWJsZShmZCwgMCwgYXRvbWljX2ZsYWdfd29ya3MpIDwgMCkgeworICAgICAgICBjbG9zZShmZCk7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisjZW5kaWYKKwogICAgIHJldHVybl92YWx1ZSA9IFB5TG9uZ19Gcm9tTG9uZygobG9uZylmZCk7CiAKIGV4aXQ6CkBAIC03ODkzLDEzICs3ODUzLDE0IEBACiBwb3NpeF9kdXAoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewogICAgIGludCBmZDsKKwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaTpkdXAiLCAmZmQpKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAoIV9QeVZlcmlmeV9mZChmZCkpCi0gICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOwotICAgIGZkID0gZHVwKGZkKTsKLSAgICBpZiAoZmQgPCAwKQotICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKKworICAgIGZkID0gX1B5X2R1cChmZCk7CisgICAgaWYgKGZkID09IC0xKQorICAgICAgICByZXR1cm4gTlVMTDsKKwogICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoKGxvbmcpZmQpOwogfQogCkBAIC03OTA5LDE2ICs3ODcwLDgyIEBACiBEdXBsaWNhdGUgZmlsZSBkZXNjcmlwdG9yLiIpOwogCiBzdGF0aWMgUHlPYmplY3QgKgotcG9zaXhfZHVwMihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitwb3NpeF9kdXAyKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKIHsKLSAgICBpbnQgZmQsIGZkMiwgcmVzOwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaWk6ZHVwMiIsICZmZCwgJmZkMikpCisgICAgc3RhdGljIGNoYXIgKmtleXdvcmRzW10gPSB7ImZkIiwgImZkMiIsICJpbmhlcml0YWJsZSIsIE5VTEx9OworICAgIGludCBmZCwgZmQyOworICAgIGludCBpbmhlcml0YWJsZSA9IDE7CisgICAgaW50IHJlczsKKyNpZiBkZWZpbmVkKEhBVkVfRFVQMykgJiYgXAorICAgICEoZGVmaW5lZChIQVZFX0ZDTlRMX0gpICYmIGRlZmluZWQoRl9EVVAyRkRfQ0xPRVhFQykpCisgICAgLyogZHVwMygpIGlzIGF2YWlsYWJsZSBvbiBMaW51eCAyLjYuMjcrIGFuZCBnbGliYyAyLjkgKi8KKyAgICBpbnQgZHVwM193b3JrcyA9IC0xOworI2VuZGlmCisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJpaXxpOmR1cDIiLCBrZXl3b3JkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZmQsICZmZDIsICZpbmhlcml0YWJsZSkpCiAgICAgICAgIHJldHVybiBOVUxMOworCiAgICAgaWYgKCFfUHlWZXJpZnlfZmRfZHVwMihmZCwgZmQyKSkKICAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CisKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgIHJlcyA9IGR1cDIoZmQsIGZkMik7CisgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKICAgICBpZiAocmVzIDwgMCkKICAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CisKKyAgICAvKiBDaGFyYWN0ZXIgZmlsZXMgbGlrZSBjb25zb2xlIGNhbm5vdCBiZSBtYWtlIG5vbi1pbmhlcml0YWJsZSAqLworICAgIGlmICghaW5oZXJpdGFibGUgJiYgX1B5X3NldF9pbmhlcml0YWJsZShmZDIsIDAsIE5VTEwpIDwgMCkgeworICAgICAgICBjbG9zZShmZDIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyNlbGlmIGRlZmluZWQoSEFWRV9GQ05UTF9IKSAmJiBkZWZpbmVkKEZfRFVQMkZEX0NMT0VYRUMpCisgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgIGlmICghaW5oZXJpdGFibGUpCisgICAgICAgIHJlcyA9IGZjbnRsKGZkLCBGX0RVUDJGRF9DTE9FWEVDLCBmZDIpOworICAgIGVsc2UKKyAgICAgICAgcmVzID0gZHVwMihmZCwgZmQyKTsKKyAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworICAgIGlmIChyZXMgPCAwKQorICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKKworI2Vsc2UKKworI2lmZGVmIEhBVkVfRFVQMworICAgIGlmICghaW5oZXJpdGFibGUgJiYgZHVwM193b3JrcyAhPSAwKSB7CisgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICAgICAgcmVzID0gZHVwMyhmZCwgZmQyLCBPX0NMT0VYRUMpOworICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworICAgICAgICBpZiAocmVzIDwgMCkgeworICAgICAgICAgICAgaWYgKGR1cDNfd29ya3MgPT0gLTEpCisgICAgICAgICAgICAgICAgZHVwM193b3JrcyA9IChlcnJubyAhPSBFTk9TWVMpOworICAgICAgICAgICAgaWYgKGR1cDNfd29ya3MpCisgICAgICAgICAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoaW5oZXJpdGFibGUgfHwgZHVwM193b3JrcyA9PSAwKQorICAgIHsKKyNlbmRpZgorICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgICAgIHJlcyA9IGR1cDIoZmQsIGZkMik7CisgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCisgICAgICAgIGlmIChyZXMgPCAwKQorICAgICAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CisKKyAgICAgICAgaWYgKCFpbmhlcml0YWJsZSAmJiBfUHlfc2V0X2luaGVyaXRhYmxlKGZkMiwgMCwgTlVMTCkgPCAwKSB7CisgICAgICAgICAgICBjbG9zZShmZDIpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyNpZmRlZiBIQVZFX0RVUDMKKyAgICB9CisjZW5kaWYKKworI2VuZGlmCisKICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CiAgICAgcmV0dXJuIFB5X05vbmU7CiB9CkBAIC03OTYyLDcgKzc5ODksNyBAQAogcG9zaXhfbHNlZWsoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewogICAgIGludCBmZCwgaG93OwotI2lmIGRlZmluZWQoTVNfV0lONjQpIHx8IGRlZmluZWQoTVNfV0lORE9XUykKKyNpZmRlZiBNU19XSU5ET1dTCiAgICAgUFlfTE9OR19MT05HIHBvcywgcmVzOwogI2Vsc2UKICAgICBvZmZfdCBwb3MsIHJlczsKQEAgLTc5OTAsNyArODAxNyw3IEBACiAgICAgaWYgKCFfUHlWZXJpZnlfZmQoZmQpKQogICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0jaWYgZGVmaW5lZChNU19XSU42NCkgfHwgZGVmaW5lZChNU19XSU5ET1dTKQorI2lmZGVmIE1TX1dJTkRPV1MKICAgICByZXMgPSBfbHNlZWtpNjQoZmQsIHBvcywgaG93KTsKICNlbHNlCiAgICAgcmVzID0gbHNlZWsoZmQsIHBvcywgaG93KTsKQEAgLTgyMDIsNyArODIyOSw3IEBACiAgICAgfQogICAgIGxlbiA9IHBidWYubGVuOwogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSNpZiBkZWZpbmVkKE1TX1dJTjY0KSB8fCBkZWZpbmVkKE1TX1dJTkRPV1MpCisjaWZkZWYgTVNfV0lORE9XUwogICAgIGlmIChsZW4gPiBJTlRfTUFYKQogICAgICAgICBsZW4gPSBJTlRfTUFYOwogICAgIHNpemUgPSB3cml0ZShmZCwgcGJ1Zi5idWYsIChpbnQpbGVuKTsKQEAgLTgyMTgsMTAgKzgyNDUsMTAgQEAKIAogI2lmZGVmIEhBVkVfU0VOREZJTEUKIFB5RG9jX1NUUlZBUihwb3NpeF9zZW5kZmlsZV9fZG9jX18sCi0ic2VuZGZpbGUob3V0LCBpbiwgb2Zmc2V0LCBuYnl0ZXMpIC0+IGJ5dGVzd3JpdHRlblxuXAotc2VuZGZpbGUob3V0LCBpbiwgb2Zmc2V0LCBuYnl0ZXMsIGhlYWRlcnM9Tm9uZSwgdHJhaWxlcnM9Tm9uZSwgZmxhZ3M9MClcblwKKyJzZW5kZmlsZShvdXQsIGluLCBvZmZzZXQsIGNvdW50KSAtPiBieXRlc3dyaXR0ZW5cblwKK3NlbmRmaWxlKG91dCwgaW4sIG9mZnNldCwgY291bnRbLCBoZWFkZXJzXVssIHRyYWlsZXJzXSwgZmxhZ3M9MClcblwKICAgICAgICAgICAgIC0+IGJ5dGVzd3JpdHRlblxuXAotQ29weSBuYnl0ZXMgYnl0ZXMgZnJvbSBmaWxlIGRlc2NyaXB0b3IgaW4gdG8gZmlsZSBkZXNjcmlwdG9yIG91dC4iKTsKK0NvcHkgY291bnQgYnl0ZXMgZnJvbSBmaWxlIGRlc2NyaXB0b3IgaW4gdG8gZmlsZSBkZXNjcmlwdG9yIG91dC4iKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKIHBvc2l4X3NlbmRmaWxlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZGljdCkKQEAgLTgyMzksMTIgKzgyNjYsMTQgQEAKICAgICBvZmZfdCBzYnl0ZXM7CiAgICAgc3RydWN0IHNmX2hkdHIgc2Y7CiAgICAgaW50IGZsYWdzID0gMDsKLSAgICBzZi5oZWFkZXJzID0gTlVMTDsKLSAgICBzZi50cmFpbGVycyA9IE5VTEw7CisgICAgLyogQmV3YXJlIHRoYXQgImluIiBjbGFzaGVzIHdpdGggUHl0aG9uJ3Mgb3duICJpbiIgb3BlcmF0b3Iga2V5d29yZCAqLwogICAgIHN0YXRpYyBjaGFyICprZXl3b3Jkc1tdID0geyJvdXQiLCAiaW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib2Zmc2V0IiwgImNvdW50IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhlYWRlcnMiLCAidHJhaWxlcnMiLCAiZmxhZ3MiLCBOVUxMfTsKIAorICAgIHNmLmhlYWRlcnMgPSBOVUxMOworICAgIHNmLnRyYWlsZXJzID0gTlVMTDsKKwogI2lmZGVmIF9fQVBQTEVfXwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZGljdCwgImlpTyZPJnxPT2k6c2VuZGZpbGUiLAogICAgICAgICBrZXl3b3JkcywgJm91dCwgJmluLCBfcGFyc2Vfb2ZmX3QsICZvZmZzZXQsIF9wYXJzZV9vZmZfdCwgJnNieXRlcywKQEAgLTgyNTcsNyArODI4Niw3IEBACiAgICAgaWYgKGhlYWRlcnMgIT0gTlVMTCkgewogICAgICAgICBpZiAoIVB5U2VxdWVuY2VfQ2hlY2soaGVhZGVycykpIHsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgInNlbmRmaWxlKCkgaGVhZGVycyBtdXN0IGJlIGEgc2VxdWVuY2Ugb3IgTm9uZSIpOworICAgICAgICAgICAgICAgICJzZW5kZmlsZSgpIGhlYWRlcnMgbXVzdCBiZSBhIHNlcXVlbmNlIik7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIFB5X3NzaXplX3QgaSA9IDA7IC8qIEF2b2lkIHVuaW5pdGlhbGl6ZWQgd2FybmluZyAqLwpAQCAtODI3NCw3ICs4MzAzLDcgQEAKICAgICBpZiAodHJhaWxlcnMgIT0gTlVMTCkgewogICAgICAgICBpZiAoIVB5U2VxdWVuY2VfQ2hlY2sodHJhaWxlcnMpKSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICJzZW5kZmlsZSgpIHRyYWlsZXJzIG11c3QgYmUgYSBzZXF1ZW5jZSBvciBOb25lIik7CisgICAgICAgICAgICAgICAgInNlbmRmaWxlKCkgdHJhaWxlcnMgbXVzdCBiZSBhIHNlcXVlbmNlIik7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIFB5X3NzaXplX3QgaSA9IDA7IC8qIEF2b2lkIHVuaW5pdGlhbGl6ZWQgd2FybmluZyAqLwpAQCAtODM2OCwxNiArODM5NywxMiBAQAogICAgIGludCByZXM7CiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpOmZzdGF0IiwgJmZkKSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0jaWZkZWYgX19WTVMKLSAgICAvKiBvbiBPcGVuVk1TIHdlIG11c3QgZW5zdXJlIHRoYXQgYWxsIGJ5dGVzIGFyZSB3cml0dGVuIHRvIHRoZSBmaWxlICovCi0gICAgZnN5bmMoZmQpOwotI2VuZGlmCiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgIHJlcyA9IEZTVEFUKGZkLCAmc3QpOwogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAgICAgaWYgKHJlcyAhPSAwKSB7CiAjaWZkZWYgTVNfV0lORE9XUwotICAgICAgICByZXR1cm4gd2luMzJfZXJyb3IoImZzdGF0IiwgTlVMTCk7CisgICAgICAgIHJldHVybiBQeUVycl9TZXRGcm9tV2luZG93c0VycigwKTsKICNlbHNlCiAgICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOwogI2VuZGlmCkBAIC04NDEwLDM1ICs4NDM1LDY5IEBACiBzdGF0aWMgUHlPYmplY3QgKgogcG9zaXhfcGlwZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm5vYXJncykKIHsKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKQotICAgIEhGSUxFIHJlYWQsIHdyaXRlOwotICAgIEFQSVJFVCByYzsKLQotICAgIHJjID0gRG9zQ3JlYXRlUGlwZSggJnJlYWQsICZ3cml0ZSwgNDA5Nik7Ci0gICAgaWYgKHJjICE9IE5PX0VSUk9SKQotICAgICAgICByZXR1cm4gb3MyX2Vycm9yKHJjKTsKLQotICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCIoaWkpIiwgcmVhZCwgd3JpdGUpOwotI2Vsc2UKLSNpZiAhZGVmaW5lZChNU19XSU5ET1dTKQogICAgIGludCBmZHNbMl07Ci0gICAgaW50IHJlczsKLSAgICByZXMgPSBwaXBlKGZkcyk7Ci0gICAgaWYgKHJlcyAhPSAwKQotICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKLSAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiKGlpKSIsIGZkc1swXSwgZmRzWzFdKTsKLSNlbHNlIC8qIE1TX1dJTkRPV1MgKi8KKyNpZmRlZiBNU19XSU5ET1dTCiAgICAgSEFORExFIHJlYWQsIHdyaXRlOwotICAgIGludCByZWFkX2ZkLCB3cml0ZV9mZDsKKyAgICBTRUNVUklUWV9BVFRSSUJVVEVTIGF0dHI7CiAgICAgQk9PTCBvazsKLSAgICBvayA9IENyZWF0ZVBpcGUoJnJlYWQsICZ3cml0ZSwgTlVMTCwgMCk7Ci0gICAgaWYgKCFvaykKLSAgICAgICAgcmV0dXJuIHdpbjMyX2Vycm9yKCJDcmVhdGVQaXBlIiwgTlVMTCk7Ci0gICAgcmVhZF9mZCA9IF9vcGVuX29zZmhhbmRsZSgoUHlfaW50cHRyX3QpcmVhZCwgMCk7Ci0gICAgd3JpdGVfZmQgPSBfb3Blbl9vc2ZoYW5kbGUoKFB5X2ludHB0cl90KXdyaXRlLCAxKTsKLSAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiKGlpKSIsIHJlYWRfZmQsIHdyaXRlX2ZkKTsKLSNlbmRpZiAvKiBNU19XSU5ET1dTICovCisjZWxzZQorICAgIGludCByZXM7CiAjZW5kaWYKKworI2lmZGVmIE1TX1dJTkRPV1MKKyAgICBhdHRyLm5MZW5ndGggPSBzaXplb2YoYXR0cik7CisgICAgYXR0ci5scFNlY3VyaXR5RGVzY3JpcHRvciA9IE5VTEw7CisgICAgYXR0ci5iSW5oZXJpdEhhbmRsZSA9IEZBTFNFOworCisgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgIG9rID0gQ3JlYXRlUGlwZSgmcmVhZCwgJndyaXRlLCAmYXR0ciwgMCk7CisgICAgaWYgKG9rKSB7CisgICAgICAgIGZkc1swXSA9IF9vcGVuX29zZmhhbmRsZSgoUHlfaW50cHRyX3QpcmVhZCwgX09fUkRPTkxZKTsKKyAgICAgICAgZmRzWzFdID0gX29wZW5fb3NmaGFuZGxlKChQeV9pbnRwdHJfdCl3cml0ZSwgX09fV1JPTkxZKTsKKyAgICAgICAgaWYgKGZkc1swXSA9PSAtMSB8fCBmZHNbMV0gPT0gLTEpIHsKKyAgICAgICAgICAgIENsb3NlSGFuZGxlKHJlYWQpOworICAgICAgICAgICAgQ2xvc2VIYW5kbGUod3JpdGUpOworICAgICAgICAgICAgb2sgPSAwOworICAgICAgICB9CisgICAgfQorICAgIFB5X0VORF9BTExPV19USFJFQURTCisKKyAgICBpZiAoIW9rKQorICAgICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoMCk7CisjZWxzZQorCisjaWZkZWYgSEFWRV9QSVBFMgorICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICByZXMgPSBwaXBlMihmZHMsIE9fQ0xPRVhFQyk7CisgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKworICAgIGlmIChyZXMgIT0gMCAmJiBlcnJubyA9PSBFTk9TWVMpCisgICAgeworI2VuZGlmCisgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICAgICAgcmVzID0gcGlwZShmZHMpOworICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworCisgICAgICAgIGlmIChyZXMgPT0gMCkgeworICAgICAgICAgICAgaWYgKF9QeV9zZXRfaW5oZXJpdGFibGUoZmRzWzBdLCAwLCBOVUxMKSA8IDApIHsKKyAgICAgICAgICAgICAgICBjbG9zZShmZHNbMF0pOworICAgICAgICAgICAgICAgIGNsb3NlKGZkc1sxXSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoX1B5X3NldF9pbmhlcml0YWJsZShmZHNbMV0sIDAsIE5VTEwpIDwgMCkgeworICAgICAgICAgICAgICAgIGNsb3NlKGZkc1swXSk7CisgICAgICAgICAgICAgICAgY2xvc2UoZmRzWzFdKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorI2lmZGVmIEhBVkVfUElQRTIKKyAgICB9CisjZW5kaWYKKworICAgIGlmIChyZXMgIT0gMCkKKyAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19PU0Vycm9yKTsKKyNlbmRpZiAvKiAhTVNfV0lORE9XUyAqLworICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCIoaWkpIiwgZmRzWzBdLCBmZHNbMV0pOwogfQogI2VuZGlmICAvKiBIQVZFX1BJUEUgKi8KIApAQCAtODU5Nyw5ICs4NjU2LDkgQEAKIAogI2lmIGRlZmluZWQoSEFWRV9NS05PRCkgJiYgZGVmaW5lZChIQVZFX01BS0VERVYpCiBQeURvY19TVFJWQVIocG9zaXhfbWtub2RfX2RvY19fLAotIm1rbm9kKGZpbGVuYW1lLCBtb2RlPTBvNjAwLCBkZXZpY2U9MCwgKiwgZGlyX2ZkPU5vbmUpXG5cblwKKyJta25vZChwYXRoLCBtb2RlPTBvNjAwLCBkZXZpY2U9MCwgKiwgZGlyX2ZkPU5vbmUpXG5cblwKIENyZWF0ZSBhIGZpbGVzeXN0ZW0gbm9kZSAoZmlsZSwgZGV2aWNlIHNwZWNpYWwgZmlsZSBvciBuYW1lZCBwaXBlKVxuXAotbmFtZWQgZmlsZW5hbWUuIG1vZGUgc3BlY2lmaWVzIGJvdGggdGhlIHBlcm1pc3Npb25zIHRvIHVzZSBhbmQgdGhlXG5cCituYW1lZCBwYXRoLiBtb2RlIHNwZWNpZmllcyBib3RoIHRoZSBwZXJtaXNzaW9ucyB0byB1c2UgYW5kIHRoZVxuXAogdHlwZSBvZiBub2RlIHRvIGJlIGNyZWF0ZWQsIGJlaW5nIGNvbWJpbmVkIChiaXR3aXNlIE9SKSB3aXRoIG9uZSBvZlxuXAogU19JRlJFRywgU19JRkNIUiwgU19JRkJMSywgYW5kIFNfSUZJRk8uIEZvciBTX0lGQ0hSIGFuZCBTX0lGQkxLLFxuXAogZGV2aWNlIGRlZmluZXMgdGhlIG5ld2x5IGNyZWF0ZWQgZGV2aWNlIHNwZWNpYWwgZmlsZSAocHJvYmFibHkgdXNpbmdcblwKQEAgLTg2MTYsMTYgKzg2NzUsMTYgQEAKIHsKICAgICBwYXRoX3QgcGF0aDsKICAgICBpbnQgbW9kZSA9IDA2NjY7Ci0gICAgaW50IGRldmljZSA9IDA7CisgICAgZGV2X3QgZGV2aWNlID0gMDsKICAgICBpbnQgZGlyX2ZkID0gREVGQVVMVF9ESVJfRkQ7CiAgICAgaW50IHJlc3VsdDsKICAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKICAgICBzdGF0aWMgY2hhciAqa2V5d29yZHNbXSA9IHsicGF0aCIsICJtb2RlIiwgImRldmljZSIsICJkaXJfZmQiLCBOVUxMfTsKIAogICAgIG1lbXNldCgmcGF0aCwgMCwgc2l6ZW9mKHBhdGgpKTsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJPJnxpaSRPJjpta25vZCIsIGtleXdvcmRzLAorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgIk8mfGlPJiRPJjpta25vZCIsIGtleXdvcmRzLAogICAgICAgICBwYXRoX2NvbnZlcnRlciwgJnBhdGgsCi0gICAgICAgICZtb2RlLCAmZGV2aWNlLAorICAgICAgICAmbW9kZSwgX1B5X0Rldl9Db252ZXJ0ZXIsICZkZXZpY2UsCiAjaWZkZWYgSEFWRV9NS05PREFUCiAgICAgICAgIGRpcl9mZF9jb252ZXJ0ZXIsICZkaXJfZmQKICNlbHNlCkBAIC04NjY1LDggKzg3MjQsOCBAQAogc3RhdGljIFB5T2JqZWN0ICoKIHBvc2l4X21ham9yKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICBpbnQgZGV2aWNlOwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaTptYWpvciIsICZkZXZpY2UpKQorICAgIGRldl90IGRldmljZTsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8mOm1ham9yIiwgX1B5X0Rldl9Db252ZXJ0ZXIsICZkZXZpY2UpKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKChsb25nKW1ham9yKGRldmljZSkpOwogfQpAQCAtODY3OCw4ICs4NzM3LDggQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBwb3NpeF9taW5vcihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgaW50IGRldmljZTsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImk6bWlub3IiLCAmZGV2aWNlKSkKKyAgICBkZXZfdCBkZXZpY2U7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPJjptaW5vciIsIF9QeV9EZXZfQ29udmVydGVyLCAmZGV2aWNlKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZygobG9uZyltaW5vcihkZXZpY2UpKTsKIH0KQEAgLTg2OTQsNyArODc1Myw3IEBACiAgICAgaW50IG1ham9yLCBtaW5vcjsKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImlpOm1ha2VkZXYiLCAmbWFqb3IsICZtaW5vcikpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoKGxvbmcpbWFrZWRldihtYWpvciwgbWlub3IpKTsKKyAgICByZXR1cm4gX1B5TG9uZ19Gcm9tRGV2KG1ha2VkZXYobWFqb3IsIG1pbm9yKSk7CiB9CiAjZW5kaWYgLyogZGV2aWNlIG1hY3JvcyAqLwogCkBAIC04NzQxLDYgKzg4MDAsNyBAQAogICAgIHN0YXRpYyBjaGFyICprZXl3b3Jkc1tdID0geyJwYXRoIiwgImxlbmd0aCIsIE5VTEx9OwogCiAgICAgbWVtc2V0KCZwYXRoLCAwLCBzaXplb2YocGF0aCkpOworICAgIHBhdGguZnVuY3Rpb25fbmFtZSA9ICJ0cnVuY2F0ZSI7CiAjaWZkZWYgSEFWRV9GVFJVTkNBVEUKICAgICBwYXRoLmFsbG93X2ZkID0gMTsKICNlbmRpZgpAQCAtODc1OCw3ICs4ODE4LDcgQEAKICAgICAgICAgcmVzID0gdHJ1bmNhdGUocGF0aC5uYXJyb3csIGxlbmd0aCk7CiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKICAgICBpZiAocmVzIDwgMCkKLSAgICAgICAgcmVzdWx0ID0gcGF0aF9wb3NpeF9lcnJvcigidHJ1bmNhdGUiLCAmcGF0aCk7CisgICAgICAgIHJlc3VsdCA9IHBhdGhfZXJyb3IoJnBhdGgpOwogICAgIGVsc2UgewogICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CiAgICAgICAgIHJlc3VsdCA9IFB5X05vbmU7CkBAIC04NzY4LDcgKzg4MjgsMTUgQEAKIH0KICNlbmRpZgogCi0jaWZkZWYgSEFWRV9QT1NJWF9GQUxMT0NBVEUKKy8qIElzc3VlICMyMjM5NjogT24gMzItYml0IEFJWCBwbGF0Zm9ybSwgdGhlIHByb3RvdHlwZXMgb2Ygb3MucG9zaXhfZmFkdmlzZSgpCisgICBhbmQgb3MucG9zaXhfZmFsbG9jYXRlKCkgaW4gc3lzdGVtIGhlYWRlcnMgYXJlIHdyb25nIGlmIF9MQVJHRV9GSUxFUyBpcworICAgZGVmaW5lZCwgd2hpY2ggaXMgdGhlIGNhc2UgaW4gUHl0aG9uIG9uIEFJWC4gQUlYIGJ1ZyByZXBvcnQ6CisgICBodHRwOi8vd3d3LTAxLmlibS5jb20vc3VwcG9ydC9kb2N2aWV3Lndzcz91aWQ9aXNnMUlWNTYxNzAgKi8KKyNpZiBkZWZpbmVkKF9BSVgpICYmIGRlZmluZWQoX0xBUkdFX0ZJTEVTKSAmJiAhZGVmaW5lZChfXzY0QklUX18pCisjICBkZWZpbmUgUE9TSVhfRkFEVklTRV9BSVhfQlVHCisjZW5kaWYKKworI2lmIGRlZmluZWQoSEFWRV9QT1NJWF9GQUxMT0NBVEUpICYmICFkZWZpbmVkKFBPU0lYX0ZBRFZJU0VfQUlYX0JVRykKIFB5RG9jX1NUUlZBUihwb3NpeF9wb3NpeF9mYWxsb2NhdGVfX2RvY19fLAogInBvc2l4X2ZhbGxvY2F0ZShmZCwgb2Zmc2V0LCBsZW4pXG5cblwKIEVuc3VyZXMgdGhhdCBlbm91Z2ggZGlzayBzcGFjZSBpcyBhbGxvY2F0ZWQgZm9yIHRoZSBmaWxlIHNwZWNpZmllZCBieSBmZFxuXApAQCAtODc5NSw3ICs4ODYzLDcgQEAKIH0KICNlbmRpZgogCi0jaWZkZWYgSEFWRV9QT1NJWF9GQURWSVNFCisjaWYgZGVmaW5lZChIQVZFX1BPU0lYX0ZBRFZJU0UpICYmICFkZWZpbmVkKFBPU0lYX0ZBRFZJU0VfQUlYX0JVRykKIFB5RG9jX1NUUlZBUihwb3NpeF9wb3NpeF9mYWR2aXNlX19kb2NfXywKICJwb3NpeF9mYWR2aXNlKGZkLCBvZmZzZXQsIGxlbiwgYWR2aWNlKVxuXG5cCiBBbm5vdW5jZXMgYW4gaW50ZW50aW9uIHRvIGFjY2VzcyBkYXRhIGluIGEgc3BlY2lmaWMgcGF0dGVybiB0aHVzIGFsbG93aW5nXG5cCkBAIC05MTgxLDYgKzkyNDksMTAgQEAKICAgICBQeVN0cnVjdFNlcXVlbmNlX1NFVF9JVEVNKHYsIDgsIFB5TG9uZ19Gcm9tTG9uZygobG9uZykgc3QuZl9mbGFnKSk7CiAgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9TRVRfSVRFTSh2LCA5LCBQeUxvbmdfRnJvbUxvbmcoKGxvbmcpIHN0LmZfbmFtZW1heCkpOwogI2VuZGlmCisgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgUHlfREVDUkVGKHYpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAKICAgICByZXR1cm4gdjsKIH0KQEAgLTkyMzAsNiArOTMwMiw3IEBACiAgICAgc3RydWN0IHN0YXR2ZnMgc3Q7CiAKICAgICBtZW1zZXQoJnBhdGgsIDAsIHNpemVvZihwYXRoKSk7CisgICAgcGF0aC5mdW5jdGlvbl9uYW1lID0gInN0YXR2ZnMiOwogI2lmZGVmIEhBVkVfRlNUQVRWRlMKICAgICBwYXRoLmFsbG93X2ZkID0gMTsKICNlbmRpZgpAQCAtOTI1Niw3ICs5MzI5LDcgQEAKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCiAgICAgaWYgKHJlc3VsdCkgewotICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX3Bvc2l4X2Vycm9yKCJzdGF0dmZzIiwgJnBhdGgpOworICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX2Vycm9yKCZwYXRoKTsKICAgICAgICAgZ290byBleGl0OwogICAgIH0KIApAQCAtOTQ5Myw2ICs5NTY2LDcgQEAKICAgICBzdGF0aWMgY2hhciAqa2V5d29yZHNbXSA9IHsicGF0aCIsICJuYW1lIiwgTlVMTH07CiAKICAgICBtZW1zZXQoJnBhdGgsIDAsIHNpemVvZihwYXRoKSk7CisgICAgcGF0aC5mdW5jdGlvbl9uYW1lID0gInBhdGhjb25mIjsKICNpZmRlZiBIQVZFX0ZQQVRIQ09ORgogICAgIHBhdGguYWxsb3dfZmQgPSAxOwogI2VuZGlmCkBAIC05NTEzLDcgKzk1ODcsNyBAQAogICAgICAgICAgICAgLyogY291bGQgYmUgYSBwYXRoIG9yIG5hbWUgcHJvYmxlbSAqLwogICAgICAgICAgICAgcG9zaXhfZXJyb3IoKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgcmVzdWx0ID0gcGF0aF9wb3NpeF9lcnJvcigicGF0aGNvbmYiLCAmcGF0aCk7CisgICAgICAgICAgICByZXN1bHQgPSBwYXRoX2Vycm9yKCZwYXRoKTsKICAgICB9CiAgICAgZWxzZQogICAgICAgICByZXN1bHQgPSBQeUxvbmdfRnJvbUxvbmcobGltaXQpOwpAQCAtOTY5NSw3ICs5NzY5LDcgQEAKICAgICBQeU9iamVjdCAqcmVzdWx0ID0gTlVMTDsKICAgICBpbnQgbmFtZTsKICAgICBjaGFyIGJ1ZmZlclsyNTVdOwotICAgIGludCBsZW47CisgICAgc2l6ZV90IGxlbjsKIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTyY6Y29uZnN0ciIsIGNvbnZfY29uZnN0cl9jb25mbmFtZSwgJm5hbWUpKQogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTk3MTIsNyArOTc4Niw3IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoKHVuc2lnbmVkIGludClsZW4gPj0gc2l6ZW9mKGJ1ZmZlcikpIHsKKyAgICBpZiAobGVuID49IHNpemVvZihidWZmZXIpKSB7CiAgICAgICAgIGNoYXIgKmJ1ZiA9IFB5TWVtX01hbGxvYyhsZW4pOwogICAgICAgICBpZiAoYnVmID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKQEAgLTEwMjQyLDcgKzEwMzE2LDcgQEAKICAgICBpbnQgbmFtZTsKIAogICAgIGlmIChQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPJjpzeXNjb25mIiwgY29udl9zeXNjb25mX2NvbmZuYW1lLCAmbmFtZSkpIHsKLSAgICAgICAgaW50IHZhbHVlOworICAgICAgICBsb25nIHZhbHVlOwogCiAgICAgICAgIGVycm5vID0gMDsKICAgICAgICAgdmFsdWUgPSBzeXNjb25mKG5hbWUpOwpAQCAtMTAyNTcsNyArMTAzMzEsNyBAQAogCiAKIC8qIFRoaXMgY29kZSBpcyB1c2VkIHRvIGVuc3VyZSB0aGF0IHRoZSB0YWJsZXMgb2YgY29uZmlndXJhdGlvbiB2YWx1ZSBuYW1lcwotICogYXJlIGluIHNvcnRlZCBvcmRlciBhcyByZXF1aXJlZCBieSBjb252X2NvbmZuYW1lKCksIGFuZCBhbHNvIHRvIGJ1aWxkIHRoZQorICogYXJlIGluIHNvcnRlZCBvcmRlciBhcyByZXF1aXJlZCBieSBjb252X2NvbmZuYW1lKCksIGFuZCBhbHNvIHRvIGJ1aWxkCiAgKiB0aGUgZXhwb3J0ZWQgZGljdGlvbmFyaWVzIHRoYXQgYXJlIHVzZWQgdG8gcHVibGlzaCBpbmZvcm1hdGlvbiBhYm91dCB0aGUKICAqIG5hbWVzIGF2YWlsYWJsZSBvbiB0aGUgaG9zdCBwbGF0Zm9ybS4KICAqCkBAIC0xMDU3Miw2ICsxMDY0Niw4IEBACiAKICAgICBtZW1zZXQoJnBhdGgsIDAsIHNpemVvZihwYXRoKSk7CiAgICAgbWVtc2V0KCZhdHRyaWJ1dGUsIDAsIHNpemVvZihhdHRyaWJ1dGUpKTsKKyAgICBwYXRoLmZ1bmN0aW9uX25hbWUgPSAiZ2V0eGF0dHIiOworICAgIGF0dHJpYnV0ZS5mdW5jdGlvbl9uYW1lID0gImdldHhhdHRyIjsKICAgICBwYXRoLmFsbG93X2ZkID0gMTsKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJPJk8mfCRwOmdldHhhdHRyIiwga2V5d29yZHMsCiAgICAgICAgIHBhdGhfY29udmVydGVyLCAmcGF0aCwKQEAgLTEwNTg4LDcgKzEwNjY0LDcgQEAKICAgICAgICAgc3RhdGljIFB5X3NzaXplX3QgYnVmZmVyX3NpemVzW10gPSB7MTI4LCBYQVRUUl9TSVpFX01BWCwgMH07CiAgICAgICAgIFB5X3NzaXplX3QgYnVmZmVyX3NpemUgPSBidWZmZXJfc2l6ZXNbaV07CiAgICAgICAgIGlmICghYnVmZmVyX3NpemUpIHsKLSAgICAgICAgICAgIHBhdGhfZXJyb3IoImdldHhhdHRyIiwgJnBhdGgpOworICAgICAgICAgICAgcGF0aF9lcnJvcigmcGF0aCk7CiAgICAgICAgICAgICBnb3RvIGV4aXQ7CiAgICAgICAgIH0KICAgICAgICAgYnVmZmVyID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBidWZmZXJfc2l6ZSk7CkBAIC0xMDYxMCw3ICsxMDY4Niw3IEBACiAgICAgICAgICAgICBidWZmZXIgPSBOVUxMOwogICAgICAgICAgICAgaWYgKGVycm5vID09IEVSQU5HRSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHBhdGhfZXJyb3IoImdldHhhdHRyIiwgJnBhdGgpOworICAgICAgICAgICAgcGF0aF9lcnJvcigmcGF0aCk7CiAgICAgICAgICAgICBnb3RvIGV4aXQ7CiAgICAgICAgIH0KIApAQCAtMTA2NDksNiArMTA3MjUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmbGFncyIsICJmb2xsb3dfc3ltbGlua3MiLCBOVUxMfTsKIAogICAgIG1lbXNldCgmcGF0aCwgMCwgc2l6ZW9mKHBhdGgpKTsKKyAgICBwYXRoLmZ1bmN0aW9uX25hbWUgPSAic2V0eGF0dHIiOwogICAgIHBhdGguYWxsb3dfZmQgPSAxOwogICAgIG1lbXNldCgmYXR0cmlidXRlLCAwLCBzaXplb2YoYXR0cmlidXRlKSk7CiAgICAgbWVtc2V0KCZ2YWx1ZSwgMCwgc2l6ZW9mKHZhbHVlKSk7CkBAIC0xMDY3Niw3ICsxMDc1Myw3IEBACiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFM7CiAKICAgICBpZiAocmVzdWx0KSB7Ci0gICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfZXJyb3IoInNldHhhdHRyIiwgJnBhdGgpOworICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX2Vycm9yKCZwYXRoKTsKICAgICAgICAgZ290byBleGl0OwogICAgIH0KIApAQCAtMTA3MTAsNyArMTA3ODcsOSBAQAogICAgIHN0YXRpYyBjaGFyICprZXl3b3Jkc1tdID0geyJwYXRoIiwgImF0dHJpYnV0ZSIsICJmb2xsb3dfc3ltbGlua3MiLCBOVUxMfTsKIAogICAgIG1lbXNldCgmcGF0aCwgMCwgc2l6ZW9mKHBhdGgpKTsKKyAgICBwYXRoLmZ1bmN0aW9uX25hbWUgPSAicmVtb3ZleGF0dHIiOwogICAgIG1lbXNldCgmYXR0cmlidXRlLCAwLCBzaXplb2YoYXR0cmlidXRlKSk7CisgICAgYXR0cmlidXRlLmZ1bmN0aW9uX25hbWUgPSAicmVtb3ZleGF0dHIiOwogICAgIHBhdGguYWxsb3dfZmQgPSAxOwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgIk8mTyZ8JHA6cmVtb3ZleGF0dHIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleXdvcmRzLApAQCAtMTA3MzIsNyArMTA4MTEsNyBAQAogICAgIFB5X0VORF9BTExPV19USFJFQURTOwogCiAgICAgaWYgKHJlc3VsdCkgewotICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX2Vycm9yKCJyZW1vdmV4YXR0ciIsICZwYXRoKTsKKyAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9lcnJvcigmcGF0aCk7CiAgICAgICAgIGdvdG8gZXhpdDsKICAgICB9CiAKQEAgLTEwNzY4LDYgKzEwODQ3LDcgQEAKICAgICBzdGF0aWMgY2hhciAqa2V5d29yZHNbXSA9IHsicGF0aCIsICJmb2xsb3dfc3ltbGlua3MiLCBOVUxMfTsKIAogICAgIG1lbXNldCgmcGF0aCwgMCwgc2l6ZW9mKHBhdGgpKTsKKyAgICBwYXRoLmZ1bmN0aW9uX25hbWUgPSAibGlzdHhhdHRyIjsKICAgICBwYXRoLmFsbG93X2ZkID0gMTsKICAgICBwYXRoLmZkID0gLTE7CiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAifE8mJHA6bGlzdHhhdHRyIiwga2V5d29yZHMsCkBAIC0xMDc4Niw3ICsxMDg2Niw3IEBACiAgICAgICAgIFB5X3NzaXplX3QgYnVmZmVyX3NpemUgPSBidWZmZXJfc2l6ZXNbaV07CiAgICAgICAgIGlmICghYnVmZmVyX3NpemUpIHsKICAgICAgICAgICAgIC8qIEVSQU5HRSAqLwotICAgICAgICAgICAgcGF0aF9lcnJvcigibGlzdHhhdHRyIiwgJnBhdGgpOworICAgICAgICAgICAgcGF0aF9lcnJvcigmcGF0aCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBidWZmZXIgPSBQeU1lbV9NQUxMT0MoYnVmZmVyX3NpemUpOwpAQCAtMTA4MTAsNyArMTA4OTAsNyBAQAogICAgICAgICAgICAgICAgIGJ1ZmZlciA9IE5VTEw7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBwYXRoX2Vycm9yKCJsaXN0eGF0dHIiLCAmcGF0aCk7CisgICAgICAgICAgICBwYXRoX2Vycm9yKCZwYXRoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKQEAgLTEwOTg4LDE0ICsxMTA2OCwxNTQgQEAKIH0KICNlbmRpZiAvKiBkZWZpbmVkKFRFUk1TSVpFX1VTRV9DT05JTykgfHwgZGVmaW5lZChURVJNU0laRV9VU0VfSU9DVEwpICovCiAKK1B5RG9jX1NUUlZBUihwb3NpeF9jcHVfY291bnRfX2RvY19fLAorImNwdV9jb3VudCgpIC0+IGludGVnZXJcblxuXAorUmV0dXJuIHRoZSBudW1iZXIgb2YgQ1BVcyBpbiB0aGUgc3lzdGVtLCBvciBOb25lIGlmIHRoaXMgdmFsdWUgY2Fubm90IGJlXG5cCitlc3RhYmxpc2hlZC4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3Bvc2l4X2NwdV9jb3VudChQeU9iamVjdCAqc2VsZikKK3sKKyAgICBpbnQgbmNwdSA9IDA7CisjaWZkZWYgTVNfV0lORE9XUworICAgIFNZU1RFTV9JTkZPIHN5c2luZm87CisgICAgR2V0U3lzdGVtSW5mbygmc3lzaW5mbyk7CisgICAgbmNwdSA9IHN5c2luZm8uZHdOdW1iZXJPZlByb2Nlc3NvcnM7CisjZWxpZiBkZWZpbmVkKF9faHB1eCkKKyAgICBuY3B1ID0gbXBjdGwoTVBDX0dFVE5VTVNQVVMsIE5VTEwsIE5VTEwpOworI2VsaWYgZGVmaW5lZChIQVZFX1NZU0NPTkYpICYmIGRlZmluZWQoX1NDX05QUk9DRVNTT1JTX09OTE4pCisgICAgbmNwdSA9IHN5c2NvbmYoX1NDX05QUk9DRVNTT1JTX09OTE4pOworI2VsaWYgZGVmaW5lZChfX0RyYWdvbkZseV9fKSB8fCBcCisgICAgICBkZWZpbmVkKF9fT3BlbkJTRF9fKSAgIHx8IFwKKyAgICAgIGRlZmluZWQoX19GcmVlQlNEX18pICAgfHwgXAorICAgICAgZGVmaW5lZChfX05ldEJTRF9fKSAgICB8fCBcCisgICAgICBkZWZpbmVkKF9fQVBQTEVfXykKKyAgICBpbnQgbWliWzJdOworICAgIHNpemVfdCBsZW4gPSBzaXplb2YobmNwdSk7CisgICAgbWliWzBdID0gQ1RMX0hXOworICAgIG1pYlsxXSA9IEhXX05DUFU7CisgICAgaWYgKHN5c2N0bChtaWIsIDIsICZuY3B1LCAmbGVuLCBOVUxMLCAwKSAhPSAwKQorICAgICAgICBuY3B1ID0gMDsKKyNlbmRpZgorICAgIGlmIChuY3B1ID49IDEpCisgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcobmNwdSk7CisgICAgZWxzZQorICAgICAgICBQeV9SRVRVUk5fTk9ORTsKK30KKworUHlEb2NfU1RSVkFSKGdldF9pbmhlcml0YWJsZV9fZG9jX18sCisgICAgImdldF9pbmhlcml0YWJsZShmZCkgLT4gYm9vbFxuIiBcCisgICAgIlxuIiBcCisgICAgIkdldCB0aGUgY2xvc2Utb24tZXhlIGZsYWcgb2YgdGhlIHNwZWNpZmllZCBmaWxlIGRlc2NyaXB0b3IuIik7CisKK3N0YXRpYyBQeU9iamVjdCoKK3Bvc2l4X2dldF9pbmhlcml0YWJsZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgaW50IGZkOworICAgIGludCBpbmhlcml0YWJsZTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaTpnZXRfaW5oZXJpdGFibGUiLCAmZmQpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmICghX1B5VmVyaWZ5X2ZkKGZkKSkKKyAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CisKKyAgICBpbmhlcml0YWJsZSA9IF9QeV9nZXRfaW5oZXJpdGFibGUoZmQpOworICAgIGlmIChpbmhlcml0YWJsZSA8IDApCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHJldHVybiBQeUJvb2xfRnJvbUxvbmcoaW5oZXJpdGFibGUpOworfQorCitQeURvY19TVFJWQVIoc2V0X2luaGVyaXRhYmxlX19kb2NfXywKKyAgICAic2V0X2luaGVyaXRhYmxlKGZkLCBpbmhlcml0YWJsZSlcbiIgXAorICAgICJcbiIgXAorICAgICJTZXQgdGhlIGluaGVyaXRhYmxlIGZsYWcgb2YgdGhlIHNwZWNpZmllZCBmaWxlIGRlc2NyaXB0b3IuIik7CisKK3N0YXRpYyBQeU9iamVjdCoKK3Bvc2l4X3NldF9pbmhlcml0YWJsZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgaW50IGZkLCBpbmhlcml0YWJsZTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaWk6c2V0X2luaGVyaXRhYmxlIiwgJmZkLCAmaW5oZXJpdGFibGUpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmICghX1B5VmVyaWZ5X2ZkKGZkKSkKKyAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CisKKyAgICBpZiAoX1B5X3NldF9pbmhlcml0YWJsZShmZCwgaW5oZXJpdGFibGUsIE5VTEwpIDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKKworI2lmZGVmIE1TX1dJTkRPV1MKK1B5RG9jX1NUUlZBUihnZXRfaGFuZGxlX2luaGVyaXRhYmxlX19kb2NfXywKKyAgICAiZ2V0X2hhbmRsZV9pbmhlcml0YWJsZShmZCkgLT4gYm9vbFxuIiBcCisgICAgIlxuIiBcCisgICAgIkdldCB0aGUgY2xvc2Utb24tZXhlIGZsYWcgb2YgdGhlIHNwZWNpZmllZCBmaWxlIGRlc2NyaXB0b3IuIik7CisKK3N0YXRpYyBQeU9iamVjdCoKK3Bvc2l4X2dldF9oYW5kbGVfaW5oZXJpdGFibGUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5X2ludHB0cl90IGhhbmRsZTsKKyAgICBEV09SRCBmbGFnczsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBfUHlfUEFSU0VfSU5UUFRSICI6Z2V0X2hhbmRsZV9pbmhlcml0YWJsZSIsICZoYW5kbGUpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmICghR2V0SGFuZGxlSW5mb3JtYXRpb24oKEhBTkRMRSloYW5kbGUsICZmbGFncykpIHsKKyAgICAgICAgUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoMCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHJldHVybiBQeUJvb2xfRnJvbUxvbmcoZmxhZ3MgJiBIQU5ETEVfRkxBR19JTkhFUklUKTsKK30KKworUHlEb2NfU1RSVkFSKHNldF9oYW5kbGVfaW5oZXJpdGFibGVfX2RvY19fLAorICAgICJzZXRfaGFuZGxlX2luaGVyaXRhYmxlKGZkLCBpbmhlcml0YWJsZSlcbiIgXAorICAgICJcbiIgXAorICAgICJTZXQgdGhlIGluaGVyaXRhYmxlIGZsYWcgb2YgdGhlIHNwZWNpZmllZCBoYW5kbGUuIik7CisKK3N0YXRpYyBQeU9iamVjdCoKK3Bvc2l4X3NldF9oYW5kbGVfaW5oZXJpdGFibGUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIGludCBpbmhlcml0YWJsZSA9IDE7CisgICAgUHlfaW50cHRyX3QgaGFuZGxlOworICAgIERXT1JEIGZsYWdzOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIF9QeV9QQVJTRV9JTlRQVFIgImk6c2V0X2hhbmRsZV9pbmhlcml0YWJsZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZoYW5kbGUsICZpbmhlcml0YWJsZSkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKGluaGVyaXRhYmxlKQorICAgICAgICBmbGFncyA9IEhBTkRMRV9GTEFHX0lOSEVSSVQ7CisgICAgZWxzZQorICAgICAgICBmbGFncyA9IDA7CisgICAgaWYgKCFTZXRIYW5kbGVJbmZvcm1hdGlvbigoSEFORExFKWhhbmRsZSwgSEFORExFX0ZMQUdfSU5IRVJJVCwgZmxhZ3MpKSB7CisgICAgICAgIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKDApOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisjZW5kaWYgICAvKiBNU19XSU5ET1dTICovCisKKworLypbY2xpbmljIGlucHV0XQorZHVtcCBidWZmZXIKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworI2lmbmRlZiBPU19UVFlOQU1FX01FVEhPRERFRgorICAgICNkZWZpbmUgT1NfVFRZTkFNRV9NRVRIT0RERUYKKyNlbmRpZiAvKiAhZGVmaW5lZChPU19UVFlOQU1FX01FVEhPRERFRikgKi8KKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD01ZDA3MWJiYzhmNDllYTEyIGlucHV0PTUyNGNlMmUwMjFlNGViYTZdKi8KKwogCiBzdGF0aWMgUHlNZXRob2REZWYgcG9zaXhfbWV0aG9kc1tdID0gewotICAgIHsiYWNjZXNzIiwgICAgICAgICAgKFB5Q0Z1bmN0aW9uKXBvc2l4X2FjY2VzcywKLSAgICAgICAgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsCi0gICAgICAgICAgICAgICAgICAgICAgICBwb3NpeF9hY2Nlc3NfX2RvY19ffSwKLSNpZmRlZiBIQVZFX1RUWU5BTUUKLSAgICB7InR0eW5hbWUiLCAgICAgICAgIHBvc2l4X3R0eW5hbWUsIE1FVEhfVkFSQVJHUywgcG9zaXhfdHR5bmFtZV9fZG9jX199LAotI2VuZGlmCisKKyAgICBPU19TVEFUX01FVEhPRERFRgorICAgIE9TX0FDQ0VTU19NRVRIT0RERUYKKyAgICBPU19UVFlOQU1FX01FVEhPRERFRgorCiAgICAgeyJjaGRpciIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pcG9zaXhfY2hkaXIsCiAgICAgICAgICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLAogICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXhfY2hkaXJfX2RvY19ffSwKQEAgLTExMDMzLDEyICsxMTI1MywxMCBAQAogI2lmZGVmIEhBVkVfQ1RFUk1JRAogICAgIHsiY3Rlcm1pZCIsICAgICAgICAgcG9zaXhfY3Rlcm1pZCwgTUVUSF9OT0FSR1MsIHBvc2l4X2N0ZXJtaWRfX2RvY19ffSwKICNlbmRpZgotI2lmZGVmIEhBVkVfR0VUQ1dECiAgICAgeyJnZXRjd2QiLCAgICAgICAgICAoUHlDRnVuY3Rpb24pcG9zaXhfZ2V0Y3dkX3VuaWNvZGUsCiAgICAgTUVUSF9OT0FSR1MsIHBvc2l4X2dldGN3ZF9fZG9jX199LAogICAgIHsiZ2V0Y3dkYiIsICAgICAgICAgKFB5Q0Z1bmN0aW9uKXBvc2l4X2dldGN3ZF9ieXRlcywKICAgICBNRVRIX05PQVJHUywgcG9zaXhfZ2V0Y3dkYl9fZG9jX199LAotI2VuZGlmCiAjaWYgZGVmaW5lZChIQVZFX0xJTkspIHx8IGRlZmluZWQoTVNfV0lORE9XUykKICAgICB7ImxpbmsiLCAgICAgICAgICAgIChQeUNGdW5jdGlvbilwb3NpeF9saW5rLAogICAgICAgICAgICAgICAgICAgICAgICAgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywKQEAgLTExMDgxLDkgKzExMjk5LDYgQEAKICAgICB7InJtZGlyIiwgICAgICAgICAgIChQeUNGdW5jdGlvbilwb3NpeF9ybWRpciwKICAgICAgICAgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsCiAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpeF9ybWRpcl9fZG9jX199LAotICAgIHsic3RhdCIsICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKXBvc2l4X3N0YXQsCi0gICAgICAgICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLAotICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXhfc3RhdF9fZG9jX199LAogICAgIHsic3RhdF9mbG9hdF90aW1lcyIsIHN0YXRfZmxvYXRfdGltZXMsIE1FVEhfVkFSQVJHUywgc3RhdF9mbG9hdF90aW1lc19fZG9jX199LAogI2lmIGRlZmluZWQoSEFWRV9TWU1MSU5LKQogICAgIHsic3ltbGluayIsICAgICAgICAgKFB5Q0Z1bmN0aW9uKXBvc2l4X3N5bWxpbmssCkBAIC0xMTExOCwxMCArMTEzMzMsNiBAQAogI2lmZGVmIEhBVkVfU1BBV05WCiAgICAgeyJzcGF3bnYiLCAgICAgICAgICBwb3NpeF9zcGF3bnYsIE1FVEhfVkFSQVJHUywgcG9zaXhfc3Bhd252X19kb2NfX30sCiAgICAgeyJzcGF3bnZlIiwgICAgICAgICBwb3NpeF9zcGF3bnZlLCBNRVRIX1ZBUkFSR1MsIHBvc2l4X3NwYXdudmVfX2RvY19ffSwKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKQotICAgIHsic3Bhd252cCIsICAgICAgICAgcG9zaXhfc3Bhd252cCwgTUVUSF9WQVJBUkdTLCBwb3NpeF9zcGF3bnZwX19kb2NfX30sCi0gICAgeyJzcGF3bnZwZSIsICAgICAgICBwb3NpeF9zcGF3bnZwZSwgTUVUSF9WQVJBUkdTLCBwb3NpeF9zcGF3bnZwZV9fZG9jX199LAotI2VuZGlmIC8qIFBZT1NfT1MyICovCiAjZW5kaWYgLyogSEFWRV9TUEFXTlYgKi8KICNpZmRlZiBIQVZFX0ZPUksxCiAgICAgeyJmb3JrMSIsICAgICAgIHBvc2l4X2ZvcmsxLCBNRVRIX05PQVJHUywgcG9zaXhfZm9yazFfX2RvY19ffSwKQEAgLTExMjY5LDcgKzExNDgwLDggQEAKICAgICB7ImNsb3NlcmFuZ2UiLCAgICAgIHBvc2l4X2Nsb3NlcmFuZ2UsIE1FVEhfVkFSQVJHUywgcG9zaXhfY2xvc2VyYW5nZV9fZG9jX199LAogICAgIHsiZGV2aWNlX2VuY29kaW5nIiwgZGV2aWNlX2VuY29kaW5nLCBNRVRIX1ZBUkFSR1MsIGRldmljZV9lbmNvZGluZ19fZG9jX199LAogICAgIHsiZHVwIiwgICAgICAgICAgICAgcG9zaXhfZHVwLCBNRVRIX1ZBUkFSR1MsIHBvc2l4X2R1cF9fZG9jX199LAotICAgIHsiZHVwMiIsICAgICAgICAgICAgcG9zaXhfZHVwMiwgTUVUSF9WQVJBUkdTLCBwb3NpeF9kdXAyX19kb2NfX30sCisgICAgeyJkdXAyIiwgICAgICAgICAgICAoUHlDRnVuY3Rpb24pcG9zaXhfZHVwMiwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsIHBvc2l4X2R1cDJfX2RvY19ffSwKICNpZmRlZiBIQVZFX0xPQ0tGCiAgICAgeyJsb2NrZiIsICAgICAgICAgICBwb3NpeF9sb2NrZiwgTUVUSF9WQVJBUkdTLCBwb3NpeF9sb2NrZl9fZG9jX199LAogI2VuZGlmCkBAIC0xMTMyMywxMCArMTE1MzUsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsCiAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpeF90cnVuY2F0ZV9fZG9jX199LAogI2VuZGlmCi0jaWZkZWYgSEFWRV9QT1NJWF9GQUxMT0NBVEUKKyNpZiBkZWZpbmVkKEhBVkVfUE9TSVhfRkFMTE9DQVRFKSAmJiAhZGVmaW5lZChQT1NJWF9GQURWSVNFX0FJWF9CVUcpCiAgICAgeyJwb3NpeF9mYWxsb2NhdGUiLCBwb3NpeF9wb3NpeF9mYWxsb2NhdGUsIE1FVEhfVkFSQVJHUywgcG9zaXhfcG9zaXhfZmFsbG9jYXRlX19kb2NfX30sCiAjZW5kaWYKLSNpZmRlZiBIQVZFX1BPU0lYX0ZBRFZJU0UKKyNpZiBkZWZpbmVkKEhBVkVfUE9TSVhfRkFEVklTRSkgJiYgIWRlZmluZWQoUE9TSVhfRkFEVklTRV9BSVhfQlVHKQogICAgIHsicG9zaXhfZmFkdmlzZSIsICAgcG9zaXhfcG9zaXhfZmFkdmlzZSwgTUVUSF9WQVJBUkdTLCBwb3NpeF9wb3NpeF9mYWR2aXNlX19kb2NfX30sCiAjZW5kaWYKICNpZmRlZiBIQVZFX1BVVEVOVgpAQCAtMTE0MDAsOSArMTE2MTIsOSBAQAogI2lmZGVmIE1TX1dJTkRPV1MKICAgICB7Il9nZXRmdWxscGF0aG5hbWUiLCAgICAgICAgcG9zaXhfX2dldGZ1bGxwYXRobmFtZSwgTUVUSF9WQVJBUkdTLCBOVUxMfSwKICAgICB7Il9nZXRmaW5hbHBhdGhuYW1lIiwgICAgICAgcG9zaXhfX2dldGZpbmFscGF0aG5hbWUsIE1FVEhfVkFSQVJHUywgTlVMTH0sCi0gICAgeyJfZ2V0ZmlsZWluZm9ybWF0aW9uIiwgICAgIHBvc2l4X19nZXRmaWxlaW5mb3JtYXRpb24sIE1FVEhfVkFSQVJHUywgTlVMTH0sCiAgICAgeyJfaXNkaXIiLCAgICAgICAgICAgICAgICAgIHBvc2l4X19pc2RpciwgTUVUSF9WQVJBUkdTLCBwb3NpeF9faXNkaXJfX2RvY19ffSwKICAgICB7Il9nZXRkaXNrdXNhZ2UiLCAgICAgICAgICAgd2luMzJfX2dldGRpc2t1c2FnZSwgTUVUSF9WQVJBUkdTLCB3aW4zMl9fZ2V0ZGlza3VzYWdlX19kb2NfX30sCisgICAgeyJfZ2V0dm9sdW1lcGF0aG5hbWUiLCAgICAgIHBvc2l4X19nZXR2b2x1bWVwYXRobmFtZSwgTUVUSF9WQVJBUkdTLCBwb3NpeF9fZ2V0dm9sdW1lcGF0aG5hbWVfX2RvY19ffSwKICNlbmRpZgogI2lmZGVmIEhBVkVfR0VUTE9BREFWRwogICAgIHsiZ2V0bG9hZGF2ZyIsICAgICAgcG9zaXhfZ2V0bG9hZGF2ZywgTUVUSF9OT0FSR1MsIHBvc2l4X2dldGxvYWRhdmdfX2RvY19ffSwKQEAgLTExNDM4LDY5ICsxMTY1MCwyMCBAQAogI2lmIGRlZmluZWQoVEVSTVNJWkVfVVNFX0NPTklPKSB8fCBkZWZpbmVkKFRFUk1TSVpFX1VTRV9JT0NUTCkKICAgICB7ImdldF90ZXJtaW5hbF9zaXplIiwgZ2V0X3Rlcm1pbmFsX3NpemUsIE1FVEhfVkFSQVJHUywgdGVybXNpemVfX2RvY19ffSwKICNlbmRpZgorICAgIHsiY3B1X2NvdW50IiwgKFB5Q0Z1bmN0aW9uKXBvc2l4X2NwdV9jb3VudCwKKyAgICAgICAgICAgICAgICAgIE1FVEhfTk9BUkdTLCBwb3NpeF9jcHVfY291bnRfX2RvY19ffSwKKyAgICB7ImdldF9pbmhlcml0YWJsZSIsIHBvc2l4X2dldF9pbmhlcml0YWJsZSwgTUVUSF9WQVJBUkdTLCBnZXRfaW5oZXJpdGFibGVfX2RvY19ffSwKKyAgICB7InNldF9pbmhlcml0YWJsZSIsIHBvc2l4X3NldF9pbmhlcml0YWJsZSwgTUVUSF9WQVJBUkdTLCBzZXRfaW5oZXJpdGFibGVfX2RvY19ffSwKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgeyJnZXRfaGFuZGxlX2luaGVyaXRhYmxlIiwgcG9zaXhfZ2V0X2hhbmRsZV9pbmhlcml0YWJsZSwKKyAgICAgTUVUSF9WQVJBUkdTLCBnZXRfaGFuZGxlX2luaGVyaXRhYmxlX19kb2NfX30sCisgICAgeyJzZXRfaGFuZGxlX2luaGVyaXRhYmxlIiwgcG9zaXhfc2V0X2hhbmRsZV9pbmhlcml0YWJsZSwKKyAgICAgTUVUSF9WQVJBUkdTLCBzZXRfaGFuZGxlX2luaGVyaXRhYmxlX19kb2NfX30sCisjZW5kaWYKICAgICB7TlVMTCwgICAgICAgICAgICAgIE5VTEx9ICAgICAgICAgICAgLyogU2VudGluZWwgKi8KIH07CiAKIAotc3RhdGljIGludAotaW5zKFB5T2JqZWN0ICptb2R1bGUsIGNoYXIgKnN5bWJvbCwgbG9uZyB2YWx1ZSkKLXsKLSAgICByZXR1cm4gUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobW9kdWxlLCBzeW1ib2wsIHZhbHVlKTsKLX0KLQotI2lmIGRlZmluZWQoUFlPU19PUzIpCi0vKiBJbnNlcnQgUGxhdGZvcm0tU3BlY2lmaWMgQ29uc3RhbnQgVmFsdWVzIChTdHJpbmdzICYgTnVtYmVycykgb2YgQ29tbW9uIFVzZSAqLwotc3RhdGljIGludCBpbnNlcnR2YWx1ZXMoUHlPYmplY3QgKm1vZHVsZSkKLXsKLSAgICBBUElSRVQgICAgcmM7Ci0gICAgVUxPTkcgICAgIHZhbHVlc1tRU1ZfTUFYKzFdOwotICAgIFB5T2JqZWN0ICp2OwotICAgIGNoYXIgICAgICp2ZXIsIHRtcFs1MF07Ci0KLSAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgcmMgPSBEb3NRdWVyeVN5c0luZm8oMUwsIFFTVl9NQVgsICZ2YWx1ZXNbMV0sIHNpemVvZihVTE9ORykgKiBRU1ZfTUFYKTsKLSAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotCi0gICAgaWYgKHJjICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgIG9zMl9lcnJvcihyYyk7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0KLSAgICBpZiAoaW5zKG1vZHVsZSwgIm1lbWluc3RhbGxlZCIsIHZhbHVlc1tRU1ZfVE9UUEhZU01FTV0pKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhtb2R1bGUsICJtZW1rZXJuZWwiLCAgICB2YWx1ZXNbUVNWX1RPVFJFU01FTV0pKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhtb2R1bGUsICJtZW12aXJ0dWFsIiwgICB2YWx1ZXNbUVNWX1RPVEFWQUlMTUVNXSkpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKG1vZHVsZSwgIm1heHBhdGhsZW4iLCAgIHZhbHVlc1tRU1ZfTUFYX1BBVEhfTEVOR1RIXSkpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKG1vZHVsZSwgIm1heG5hbWVsZW4iLCAgIHZhbHVlc1tRU1ZfTUFYX0NPTVBfTEVOR1RIXSkpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKG1vZHVsZSwgInJldmlzaW9uIiwgICAgIHZhbHVlc1tRU1ZfVkVSU0lPTl9SRVZJU0lPTl0pKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhtb2R1bGUsICJ0aW1lc2xpY2UiLCAgICB2YWx1ZXNbUVNWX01JTl9TTElDRV0pKSByZXR1cm4gLTE7Ci0KLSAgICBzd2l0Y2ggKHZhbHVlc1tRU1ZfVkVSU0lPTl9NSU5PUl0pIHsKLSAgICBjYXNlIDA6ICB2ZXIgPSAiMi4wMCI7IGJyZWFrOwotICAgIGNhc2UgMTA6IHZlciA9ICIyLjEwIjsgYnJlYWs7Ci0gICAgY2FzZSAxMTogdmVyID0gIjIuMTEiOyBicmVhazsKLSAgICBjYXNlIDMwOiB2ZXIgPSAiMy4wMCI7IGJyZWFrOwotICAgIGNhc2UgNDA6IHZlciA9ICI0LjAwIjsgYnJlYWs7Ci0gICAgY2FzZSA1MDogdmVyID0gIjUuMDAiOyBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBQeU9TX3NucHJpbnRmKHRtcCwgc2l6ZW9mKHRtcCksCi0gICAgICAgICAgICAgICAgICAgICAgIiVkLSVkIiwgdmFsdWVzW1FTVl9WRVJTSU9OX01BSk9SXSwKLSAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbUVNWX1ZFUlNJT05fTUlOT1JdKTsKLSAgICAgICAgdmVyID0gJnRtcFswXTsKLSAgICB9Ci0KLSAgICAvKiBBZGQgSW5kaWNhdG9yIG9mIHRoZSBWZXJzaW9uIG9mIHRoZSBPcGVyYXRpbmcgU3lzdGVtICovCi0gICAgaWYgKFB5TW9kdWxlX0FkZFN0cmluZ0NvbnN0YW50KG1vZHVsZSwgInZlcnNpb24iLCB0bXApIDwgMCkKLSAgICAgICAgcmV0dXJuIC0xOwotCi0gICAgLyogQWRkIEluZGljYXRvciBvZiBXaGljaCBEcml2ZSB3YXMgVXNlZCB0byBCb290IHRoZSBTeXN0ZW0gKi8KLSAgICB0bXBbMF0gPSAnQScgKyB2YWx1ZXNbUVNWX0JPT1RfRFJJVkVdIC0gMTsKLSAgICB0bXBbMV0gPSAnOic7Ci0gICAgdG1wWzJdID0gJ1wwJzsKLQotICAgIHJldHVybiBQeU1vZHVsZV9BZGRTdHJpbmdDb25zdGFudChtb2R1bGUsICJib290ZHJpdmUiLCB0bXApOwotfQotI2VuZGlmCi0KICNpZiBkZWZpbmVkKEhBVkVfU1lNTElOSykgJiYgZGVmaW5lZChNU19XSU5ET1dTKQogc3RhdGljIGludAogZW5hYmxlX3N5bWxpbmsoKQpAQCAtMTE1MzEsNDAxICsxMTY5NCw0MTAgQEAKICNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfU1lNTElOSykgJiYgZGVmaW5lZChNU19XSU5ET1dTKSAqLwogCiBzdGF0aWMgaW50Ci1hbGxfaW5zKFB5T2JqZWN0ICpkKQorYWxsX2lucyhQeU9iamVjdCAqbSkKIHsKICNpZmRlZiBGX09LCi0gICAgaWYgKGlucyhkLCAiRl9PSyIsIChsb25nKUZfT0spKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZfT0spKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBSX09LCi0gICAgaWYgKGlucyhkLCAiUl9PSyIsIChsb25nKVJfT0spKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJfT0spKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBXX09LCi0gICAgaWYgKGlucyhkLCAiV19PSyIsIChsb25nKVdfT0spKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFdfT0spKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBYX09LCi0gICAgaWYgKGlucyhkLCAiWF9PSyIsIChsb25nKVhfT0spKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFhfT0spKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBOR1JPVVBTX01BWAotICAgIGlmIChpbnMoZCwgIk5HUk9VUFNfTUFYIiwgKGxvbmcpTkdST1VQU19NQVgpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE5HUk9VUFNfTUFYKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgVE1QX01BWAotICAgIGlmIChpbnMoZCwgIlRNUF9NQVgiLCAobG9uZylUTVBfTUFYKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUTVBfTUFYKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgV0NPTlRJTlVFRAotICAgIGlmIChpbnMoZCwgIldDT05USU5VRUQiLCAobG9uZylXQ09OVElOVUVEKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBXQ09OVElOVUVEKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgV05PSEFORwotICAgIGlmIChpbnMoZCwgIldOT0hBTkciLCAobG9uZylXTk9IQU5HKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBXTk9IQU5HKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgV1VOVFJBQ0VECi0gICAgaWYgKGlucyhkLCAiV1VOVFJBQ0VEIiwgKGxvbmcpV1VOVFJBQ0VEKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBXVU5UUkFDRUQpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBPX1JET05MWQotICAgIGlmIChpbnMoZCwgIk9fUkRPTkxZIiwgKGxvbmcpT19SRE9OTFkpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fUkRPTkxZKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgT19XUk9OTFkKLSAgICBpZiAoaW5zKGQsICJPX1dST05MWSIsIChsb25nKU9fV1JPTkxZKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX1dST05MWSkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIE9fUkRXUgotICAgIGlmIChpbnMoZCwgIk9fUkRXUiIsIChsb25nKU9fUkRXUikpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19SRFdSKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgT19OREVMQVkKLSAgICBpZiAoaW5zKGQsICJPX05ERUxBWSIsIChsb25nKU9fTkRFTEFZKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX05ERUxBWSkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIE9fTk9OQkxPQ0sKLSAgICBpZiAoaW5zKGQsICJPX05PTkJMT0NLIiwgKGxvbmcpT19OT05CTE9DSykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19OT05CTE9DSykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIE9fQVBQRU5ECi0gICAgaWYgKGlucyhkLCAiT19BUFBFTkQiLCAobG9uZylPX0FQUEVORCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19BUFBFTkQpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBPX0RTWU5DCi0gICAgaWYgKGlucyhkLCAiT19EU1lOQyIsIChsb25nKU9fRFNZTkMpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fRFNZTkMpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBPX1JTWU5DCi0gICAgaWYgKGlucyhkLCAiT19SU1lOQyIsIChsb25nKU9fUlNZTkMpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fUlNZTkMpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBPX1NZTkMKLSAgICBpZiAoaW5zKGQsICJPX1NZTkMiLCAobG9uZylPX1NZTkMpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fU1lOQykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIE9fTk9DVFRZCi0gICAgaWYgKGlucyhkLCAiT19OT0NUVFkiLCAobG9uZylPX05PQ1RUWSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19OT0NUVFkpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBPX0NSRUFUCi0gICAgaWYgKGlucyhkLCAiT19DUkVBVCIsIChsb25nKU9fQ1JFQVQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fQ1JFQVQpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBPX0VYQ0wKLSAgICBpZiAoaW5zKGQsICJPX0VYQ0wiLCAobG9uZylPX0VYQ0wpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fRVhDTCkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIE9fVFJVTkMKLSAgICBpZiAoaW5zKGQsICJPX1RSVU5DIiwgKGxvbmcpT19UUlVOQykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19UUlVOQykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIE9fQklOQVJZCi0gICAgaWYgKGlucyhkLCAiT19CSU5BUlkiLCAobG9uZylPX0JJTkFSWSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19CSU5BUlkpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBPX1RFWFQKLSAgICBpZiAoaW5zKGQsICJPX1RFWFQiLCAobG9uZylPX1RFWFQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fVEVYVCkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIE9fWEFUVFIKLSAgICBpZiAoaW5zKGQsICJPX1hBVFRSIiwgKGxvbmcpT19YQVRUUikpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19YQVRUUikpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIE9fTEFSR0VGSUxFCi0gICAgaWYgKGlucyhkLCAiT19MQVJHRUZJTEUiLCAobG9uZylPX0xBUkdFRklMRSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19MQVJHRUZJTEUpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBPX1NITE9DSwotICAgIGlmIChpbnMoZCwgIk9fU0hMT0NLIiwgKGxvbmcpT19TSExPQ0spKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fU0hMT0NLKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgT19FWExPQ0sKLSAgICBpZiAoaW5zKGQsICJPX0VYTE9DSyIsIChsb25nKU9fRVhMT0NLKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX0VYTE9DSykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIE9fRVhFQwotICAgIGlmIChpbnMoZCwgIk9fRVhFQyIsIChsb25nKU9fRVhFQykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19FWEVDKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgT19TRUFSQ0gKLSAgICBpZiAoaW5zKGQsICJPX1NFQVJDSCIsIChsb25nKU9fU0VBUkNIKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX1NFQVJDSCkpIHJldHVybiAtMTsKKyNlbmRpZgorI2lmZGVmIE9fUEFUSAorICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX1BBVEgpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBPX1RUWV9JTklUCi0gICAgaWYgKGlucyhkLCAiT19UVFlfSU5JVCIsIChsb25nKU9fVFRZX0lOSVQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fVFRZX0lOSVQpKSByZXR1cm4gLTE7CisjZW5kaWYKKyNpZmRlZiBPX1RNUEZJTEUKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19UTVBGSUxFKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgUFJJT19QUk9DRVNTCi0gICAgaWYgKGlucyhkLCAiUFJJT19QUk9DRVNTIiwgKGxvbmcpUFJJT19QUk9DRVNTKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQUklPX1BST0NFU1MpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBQUklPX1BHUlAKLSAgICBpZiAoaW5zKGQsICJQUklPX1BHUlAiLCAobG9uZylQUklPX1BHUlApKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBSSU9fUEdSUCkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIFBSSU9fVVNFUgotICAgIGlmIChpbnMoZCwgIlBSSU9fVVNFUiIsIChsb25nKVBSSU9fVVNFUikpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUFJJT19VU0VSKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgT19DTE9FWEVDCi0gICAgaWYgKGlucyhkLCAiT19DTE9FWEVDIiwgKGxvbmcpT19DTE9FWEVDKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX0NMT0VYRUMpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBPX0FDQ01PREUKLSAgICBpZiAoaW5zKGQsICJPX0FDQ01PREUiLCAobG9uZylPX0FDQ01PREUpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fQUNDTU9ERSkpIHJldHVybiAtMTsKICNlbmRpZgogCiAKICNpZmRlZiBTRUVLX0hPTEUKLSAgICBpZiAoaW5zKGQsICJTRUVLX0hPTEUiLCAobG9uZylTRUVLX0hPTEUpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNFRUtfSE9MRSkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIFNFRUtfREFUQQotICAgIGlmIChpbnMoZCwgIlNFRUtfREFUQSIsIChsb25nKVNFRUtfREFUQSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU0VFS19EQVRBKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAKIC8qIE1TIFdpbmRvd3MgKi8KICNpZmRlZiBPX05PSU5IRVJJVAogICAgIC8qIERvbid0IGluaGVyaXQgaW4gY2hpbGQgcHJvY2Vzc2VzLiAqLwotICAgIGlmIChpbnMoZCwgIk9fTk9JTkhFUklUIiwgKGxvbmcpT19OT0lOSEVSSVQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fTk9JTkhFUklUKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgX09fU0hPUlRfTElWRUQKICAgICAvKiBPcHRpbWl6ZSBmb3Igc2hvcnQgbGlmZSAoa2VlcCBpbiBtZW1vcnkpLiAqLwogICAgIC8qIE1TIGZvcmdvdCB0byBkZWZpbmUgdGhpcyBvbmUgd2l0aCBhIG5vbi11bmRlcnNjb3JlIGZvcm0gdG9vLiAqLwotICAgIGlmIChpbnMoZCwgIk9fU0hPUlRfTElWRUQiLCAobG9uZylfT19TSE9SVF9MSVZFRCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk9fU0hPUlRfTElWRUQiLCBfT19TSE9SVF9MSVZFRCkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIE9fVEVNUE9SQVJZCiAgICAgLyogQXV0b21hdGljYWxseSBkZWxldGUgd2hlbiBsYXN0IGhhbmRsZSBpcyBjbG9zZWQuICovCi0gICAgaWYgKGlucyhkLCAiT19URU1QT1JBUlkiLCAobG9uZylPX1RFTVBPUkFSWSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19URU1QT1JBUlkpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBPX1JBTkRPTQogICAgIC8qIE9wdGltaXplIGZvciByYW5kb20gYWNjZXNzLiAqLwotICAgIGlmIChpbnMoZCwgIk9fUkFORE9NIiwgKGxvbmcpT19SQU5ET00pKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fUkFORE9NKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgT19TRVFVRU5USUFMCiAgICAgLyogT3B0aW1pemUgZm9yIHNlcXVlbnRpYWwgYWNjZXNzLiAqLwotICAgIGlmIChpbnMoZCwgIk9fU0VRVUVOVElBTCIsIChsb25nKU9fU0VRVUVOVElBTCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19TRVFVRU5USUFMKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAKIC8qIEdOVSBleHRlbnNpb25zLiAqLwogI2lmZGVmIE9fQVNZTkMKICAgICAvKiBTZW5kIGEgU0lHSU8gc2lnbmFsIHdoZW5ldmVyIGlucHV0IG9yIG91dHB1dAogICAgICAgIGJlY29tZXMgYXZhaWxhYmxlIG9uIGZpbGUgZGVzY3JpcHRvciAqLwotICAgIGlmIChpbnMoZCwgIk9fQVNZTkMiLCAobG9uZylPX0FTWU5DKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX0FTWU5DKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgT19ESVJFQ1QKICAgICAvKiBEaXJlY3QgZGlzayBhY2Nlc3MuICovCi0gICAgaWYgKGlucyhkLCAiT19ESVJFQ1QiLCAobG9uZylPX0RJUkVDVCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19ESVJFQ1QpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBPX0RJUkVDVE9SWQogICAgIC8qIE11c3QgYmUgYSBkaXJlY3RvcnkuICAgICAgKi8KLSAgICBpZiAoaW5zKGQsICJPX0RJUkVDVE9SWSIsIChsb25nKU9fRElSRUNUT1JZKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX0RJUkVDVE9SWSkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIE9fTk9GT0xMT1cKICAgICAvKiBEbyBub3QgZm9sbG93IGxpbmtzLiAgICAgICovCi0gICAgaWYgKGlucyhkLCAiT19OT0ZPTExPVyIsIChsb25nKU9fTk9GT0xMT1cpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fTk9GT0xMT1cpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBPX05PTElOS1MKICAgICAvKiBGYWlscyBpZiBsaW5rIGNvdW50IG9mIHRoZSBuYW1lZCBmaWxlIGlzIGdyZWF0ZXIgdGhhbiAxICovCi0gICAgaWYgKGlucyhkLCAiT19OT0xJTktTIiwgKGxvbmcpT19OT0xJTktTKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX05PTElOS1MpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBPX05PQVRJTUUKICAgICAvKiBEbyBub3QgdXBkYXRlIHRoZSBhY2Nlc3MgdGltZS4gKi8KLSAgICBpZiAoaW5zKGQsICJPX05PQVRJTUUiLCAobG9uZylPX05PQVRJTUUpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fTk9BVElNRSkpIHJldHVybiAtMTsKICNlbmRpZgogCiAgICAgLyogVGhlc2UgY29tZSBmcm9tIHN5c2V4aXRzLmggKi8KICNpZmRlZiBFWF9PSwotICAgIGlmIChpbnMoZCwgIkVYX09LIiwgKGxvbmcpRVhfT0spKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVYX09LKSkgcmV0dXJuIC0xOwogI2VuZGlmIC8qIEVYX09LICovCiAjaWZkZWYgRVhfVVNBR0UKLSAgICBpZiAoaW5zKGQsICJFWF9VU0FHRSIsIChsb25nKUVYX1VTQUdFKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFWF9VU0FHRSkpIHJldHVybiAtMTsKICNlbmRpZiAvKiBFWF9VU0FHRSAqLwogI2lmZGVmIEVYX0RBVEFFUlIKLSAgICBpZiAoaW5zKGQsICJFWF9EQVRBRVJSIiwgKGxvbmcpRVhfREFUQUVSUikpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRVhfREFUQUVSUikpIHJldHVybiAtMTsKICNlbmRpZiAvKiBFWF9EQVRBRVJSICovCiAjaWZkZWYgRVhfTk9JTlBVVAotICAgIGlmIChpbnMoZCwgIkVYX05PSU5QVVQiLCAobG9uZylFWF9OT0lOUFVUKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFWF9OT0lOUFVUKSkgcmV0dXJuIC0xOwogI2VuZGlmIC8qIEVYX05PSU5QVVQgKi8KICNpZmRlZiBFWF9OT1VTRVIKLSAgICBpZiAoaW5zKGQsICJFWF9OT1VTRVIiLCAobG9uZylFWF9OT1VTRVIpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVYX05PVVNFUikpIHJldHVybiAtMTsKICNlbmRpZiAvKiBFWF9OT1VTRVIgKi8KICNpZmRlZiBFWF9OT0hPU1QKLSAgICBpZiAoaW5zKGQsICJFWF9OT0hPU1QiLCAobG9uZylFWF9OT0hPU1QpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVYX05PSE9TVCkpIHJldHVybiAtMTsKICNlbmRpZiAvKiBFWF9OT0hPU1QgKi8KICNpZmRlZiBFWF9VTkFWQUlMQUJMRQotICAgIGlmIChpbnMoZCwgIkVYX1VOQVZBSUxBQkxFIiwgKGxvbmcpRVhfVU5BVkFJTEFCTEUpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVYX1VOQVZBSUxBQkxFKSkgcmV0dXJuIC0xOwogI2VuZGlmIC8qIEVYX1VOQVZBSUxBQkxFICovCiAjaWZkZWYgRVhfU09GVFdBUkUKLSAgICBpZiAoaW5zKGQsICJFWF9TT0ZUV0FSRSIsIChsb25nKUVYX1NPRlRXQVJFKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFWF9TT0ZUV0FSRSkpIHJldHVybiAtMTsKICNlbmRpZiAvKiBFWF9TT0ZUV0FSRSAqLwogI2lmZGVmIEVYX09TRVJSCi0gICAgaWYgKGlucyhkLCAiRVhfT1NFUlIiLCAobG9uZylFWF9PU0VSUikpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRVhfT1NFUlIpKSByZXR1cm4gLTE7CiAjZW5kaWYgLyogRVhfT1NFUlIgKi8KICNpZmRlZiBFWF9PU0ZJTEUKLSAgICBpZiAoaW5zKGQsICJFWF9PU0ZJTEUiLCAobG9uZylFWF9PU0ZJTEUpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVYX09TRklMRSkpIHJldHVybiAtMTsKICNlbmRpZiAvKiBFWF9PU0ZJTEUgKi8KICNpZmRlZiBFWF9DQU5UQ1JFQVQKLSAgICBpZiAoaW5zKGQsICJFWF9DQU5UQ1JFQVQiLCAobG9uZylFWF9DQU5UQ1JFQVQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVYX0NBTlRDUkVBVCkpIHJldHVybiAtMTsKICNlbmRpZiAvKiBFWF9DQU5UQ1JFQVQgKi8KICNpZmRlZiBFWF9JT0VSUgotICAgIGlmIChpbnMoZCwgIkVYX0lPRVJSIiwgKGxvbmcpRVhfSU9FUlIpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVYX0lPRVJSKSkgcmV0dXJuIC0xOwogI2VuZGlmIC8qIEVYX0lPRVJSICovCiAjaWZkZWYgRVhfVEVNUEZBSUwKLSAgICBpZiAoaW5zKGQsICJFWF9URU1QRkFJTCIsIChsb25nKUVYX1RFTVBGQUlMKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFWF9URU1QRkFJTCkpIHJldHVybiAtMTsKICNlbmRpZiAvKiBFWF9URU1QRkFJTCAqLwogI2lmZGVmIEVYX1BST1RPQ09MCi0gICAgaWYgKGlucyhkLCAiRVhfUFJPVE9DT0wiLCAobG9uZylFWF9QUk9UT0NPTCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRVhfUFJPVE9DT0wpKSByZXR1cm4gLTE7CiAjZW5kaWYgLyogRVhfUFJPVE9DT0wgKi8KICNpZmRlZiBFWF9OT1BFUk0KLSAgICBpZiAoaW5zKGQsICJFWF9OT1BFUk0iLCAobG9uZylFWF9OT1BFUk0pKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVYX05PUEVSTSkpIHJldHVybiAtMTsKICNlbmRpZiAvKiBFWF9OT1BFUk0gKi8KICNpZmRlZiBFWF9DT05GSUcKLSAgICBpZiAoaW5zKGQsICJFWF9DT05GSUciLCAobG9uZylFWF9DT05GSUcpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVYX0NPTkZJRykpIHJldHVybiAtMTsKICNlbmRpZiAvKiBFWF9DT05GSUcgKi8KICNpZmRlZiBFWF9OT1RGT1VORAotICAgIGlmIChpbnMoZCwgIkVYX05PVEZPVU5EIiwgKGxvbmcpRVhfTk9URk9VTkQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVYX05PVEZPVU5EKSkgcmV0dXJuIC0xOwogI2VuZGlmIC8qIEVYX05PVEZPVU5EICovCiAKICAgICAvKiBzdGF0dmZzICovCiAjaWZkZWYgU1RfUkRPTkxZCi0gICAgaWYgKGlucyhkLCAiU1RfUkRPTkxZIiwgKGxvbmcpU1RfUkRPTkxZKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTVF9SRE9OTFkpKSByZXR1cm4gLTE7CiAjZW5kaWYgLyogU1RfUkRPTkxZICovCiAjaWZkZWYgU1RfTk9TVUlECi0gICAgaWYgKGlucyhkLCAiU1RfTk9TVUlEIiwgKGxvbmcpU1RfTk9TVUlEKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTVF9OT1NVSUQpKSByZXR1cm4gLTE7CiAjZW5kaWYgLyogU1RfTk9TVUlEICovCiAKKyAgICAgICAvKiBHTlUgZXh0ZW5zaW9ucyAqLworI2lmZGVmIFNUX05PREVWCisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNUX05PREVWKSkgcmV0dXJuIC0xOworI2VuZGlmIC8qIFNUX05PREVWICovCisjaWZkZWYgU1RfTk9FWEVDCisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNUX05PRVhFQykpIHJldHVybiAtMTsKKyNlbmRpZiAvKiBTVF9OT0VYRUMgKi8KKyNpZmRlZiBTVF9TWU5DSFJPTk9VUworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTVF9TWU5DSFJPTk9VUykpIHJldHVybiAtMTsKKyNlbmRpZiAvKiBTVF9TWU5DSFJPTk9VUyAqLworI2lmZGVmIFNUX01BTkRMT0NLCisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNUX01BTkRMT0NLKSkgcmV0dXJuIC0xOworI2VuZGlmIC8qIFNUX01BTkRMT0NLICovCisjaWZkZWYgU1RfV1JJVEUKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU1RfV1JJVEUpKSByZXR1cm4gLTE7CisjZW5kaWYgLyogU1RfV1JJVEUgKi8KKyNpZmRlZiBTVF9BUFBFTkQKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU1RfQVBQRU5EKSkgcmV0dXJuIC0xOworI2VuZGlmIC8qIFNUX0FQUEVORCAqLworI2lmZGVmIFNUX05PQVRJTUUKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU1RfTk9BVElNRSkpIHJldHVybiAtMTsKKyNlbmRpZiAvKiBTVF9OT0FUSU1FICovCisjaWZkZWYgU1RfTk9ESVJBVElNRQorICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTVF9OT0RJUkFUSU1FKSkgcmV0dXJuIC0xOworI2VuZGlmIC8qIFNUX05PRElSQVRJTUUgKi8KKyNpZmRlZiBTVF9SRUxBVElNRQorICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTVF9SRUxBVElNRSkpIHJldHVybiAtMTsKKyNlbmRpZiAvKiBTVF9SRUxBVElNRSAqLworCiAgICAgLyogRnJlZUJTRCBzZW5kZmlsZSgpIGNvbnN0YW50cyAqLwogI2lmZGVmIFNGX05PRElTS0lPCi0gICAgaWYgKGlucyhkLCAiU0ZfTk9ESVNLSU8iLCAobG9uZylTRl9OT0RJU0tJTykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU0ZfTk9ESVNLSU8pKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBTRl9NTk9XQUlUCi0gICAgaWYgKGlucyhkLCAiU0ZfTU5PV0FJVCIsIChsb25nKVNGX01OT1dBSVQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNGX01OT1dBSVQpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBTRl9TWU5DCi0gICAgaWYgKGlucyhkLCAiU0ZfU1lOQyIsIChsb25nKVNGX1NZTkMpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNGX1NZTkMpKSByZXR1cm4gLTE7CiAjZW5kaWYKIAogICAgIC8qIGNvbnN0YW50cyBmb3IgcG9zaXhfZmFkdmlzZSAqLwogI2lmZGVmIFBPU0lYX0ZBRFZfTk9STUFMCi0gICAgaWYgKGlucyhkLCAiUE9TSVhfRkFEVl9OT1JNQUwiLCAobG9uZylQT1NJWF9GQURWX05PUk1BTCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUE9TSVhfRkFEVl9OT1JNQUwpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBQT1NJWF9GQURWX1NFUVVFTlRJQUwKLSAgICBpZiAoaW5zKGQsICJQT1NJWF9GQURWX1NFUVVFTlRJQUwiLCAobG9uZylQT1NJWF9GQURWX1NFUVVFTlRJQUwpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBPU0lYX0ZBRFZfU0VRVUVOVElBTCkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIFBPU0lYX0ZBRFZfUkFORE9NCi0gICAgaWYgKGlucyhkLCAiUE9TSVhfRkFEVl9SQU5ET00iLCAobG9uZylQT1NJWF9GQURWX1JBTkRPTSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUE9TSVhfRkFEVl9SQU5ET00pKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBQT1NJWF9GQURWX05PUkVVU0UKLSAgICBpZiAoaW5zKGQsICJQT1NJWF9GQURWX05PUkVVU0UiLCAobG9uZylQT1NJWF9GQURWX05PUkVVU0UpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBPU0lYX0ZBRFZfTk9SRVVTRSkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIFBPU0lYX0ZBRFZfV0lMTE5FRUQKLSAgICBpZiAoaW5zKGQsICJQT1NJWF9GQURWX1dJTExORUVEIiwgKGxvbmcpUE9TSVhfRkFEVl9XSUxMTkVFRCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUE9TSVhfRkFEVl9XSUxMTkVFRCkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIFBPU0lYX0ZBRFZfRE9OVE5FRUQKLSAgICBpZiAoaW5zKGQsICJQT1NJWF9GQURWX0RPTlRORUVEIiwgKGxvbmcpUE9TSVhfRkFEVl9ET05UTkVFRCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUE9TSVhfRkFEVl9ET05UTkVFRCkpIHJldHVybiAtMTsKICNlbmRpZgogCiAgICAgLyogY29uc3RhbnRzIGZvciB3YWl0aWQgKi8KICNpZiBkZWZpbmVkKEhBVkVfU1lTX1dBSVRfSCkgJiYgZGVmaW5lZChIQVZFX1dBSVRJRCkKLSAgICBpZiAoaW5zKGQsICJQX1BJRCIsIChsb25nKVBfUElEKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMoZCwgIlBfUEdJRCIsIChsb25nKVBfUEdJRCkpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKGQsICJQX0FMTCIsIChsb25nKVBfQUxMKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQX1BJRCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUF9QR0lEKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQX0FMTCkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIFdFWElURUQKLSAgICBpZiAoaW5zKGQsICJXRVhJVEVEIiwgKGxvbmcpV0VYSVRFRCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgV0VYSVRFRCkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIFdOT1dBSVQKLSAgICBpZiAoaW5zKGQsICJXTk9XQUlUIiwgKGxvbmcpV05PV0FJVCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgV05PV0FJVCkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIFdTVE9QUEVECi0gICAgaWYgKGlucyhkLCAiV1NUT1BQRUQiLCAobG9uZylXU1RPUFBFRCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgV1NUT1BQRUQpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBDTERfRVhJVEVECi0gICAgaWYgKGlucyhkLCAiQ0xEX0VYSVRFRCIsIChsb25nKUNMRF9FWElURUQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIENMRF9FWElURUQpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBDTERfRFVNUEVECi0gICAgaWYgKGlucyhkLCAiQ0xEX0RVTVBFRCIsIChsb25nKUNMRF9EVU1QRUQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIENMRF9EVU1QRUQpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBDTERfVFJBUFBFRAotICAgIGlmIChpbnMoZCwgIkNMRF9UUkFQUEVEIiwgKGxvbmcpQ0xEX1RSQVBQRUQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIENMRF9UUkFQUEVEKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgQ0xEX0NPTlRJTlVFRAotICAgIGlmIChpbnMoZCwgIkNMRF9DT05USU5VRUQiLCAobG9uZylDTERfQ09OVElOVUVEKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBDTERfQ09OVElOVUVEKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAKICAgICAvKiBjb25zdGFudHMgZm9yIGxvY2tmICovCiAjaWZkZWYgRl9MT0NLCi0gICAgaWYgKGlucyhkLCAiRl9MT0NLIiwgKGxvbmcpRl9MT0NLKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGX0xPQ0spKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBGX1RMT0NLCi0gICAgaWYgKGlucyhkLCAiRl9UTE9DSyIsIChsb25nKUZfVExPQ0spKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZfVExPQ0spKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBGX1VMT0NLCi0gICAgaWYgKGlucyhkLCAiRl9VTE9DSyIsIChsb25nKUZfVUxPQ0spKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZfVUxPQ0spKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBGX1RFU1QKLSAgICBpZiAoaW5zKGQsICJGX1RFU1QiLCAobG9uZylGX1RFU1QpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZfVEVTVCkpIHJldHVybiAtMTsKICNlbmRpZgogCiAjaWZkZWYgSEFWRV9TUEFXTlYKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKSAmJiBkZWZpbmVkKFBZQ0NfR0NDKQotICAgIGlmIChpbnMoZCwgIlBfV0FJVCIsIChsb25nKVBfV0FJVCkpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKGQsICJQX05PV0FJVCIsIChsb25nKVBfTk9XQUlUKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMoZCwgIlBfT1ZFUkxBWSIsIChsb25nKVBfT1ZFUkxBWSkpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKGQsICJQX0RFQlVHIiwgKGxvbmcpUF9ERUJVRykpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKGQsICJQX1NFU1NJT04iLCAobG9uZylQX1NFU1NJT04pKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhkLCAiUF9ERVRBQ0giLCAobG9uZylQX0RFVEFDSCkpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKGQsICJQX1BNIiwgKGxvbmcpUF9QTSkpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKGQsICJQX0RFRkFVTFQiLCAobG9uZylQX0RFRkFVTFQpKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhkLCAiUF9NSU5JTUlaRSIsIChsb25nKVBfTUlOSU1JWkUpKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhkLCAiUF9NQVhJTUlaRSIsIChsb25nKVBfTUFYSU1JWkUpKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhkLCAiUF9GVUxMU0NSRUVOIiwgKGxvbmcpUF9GVUxMU0NSRUVOKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMoZCwgIlBfV0lORE9XRUQiLCAobG9uZylQX1dJTkRPV0VEKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMoZCwgIlBfRk9SRUdST1VORCIsIChsb25nKVBfRk9SRUdST1VORCkpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKGQsICJQX0JBQ0tHUk9VTkQiLCAobG9uZylQX0JBQ0tHUk9VTkQpKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhkLCAiUF9OT0NMT1NFIiwgKGxvbmcpUF9OT0NMT1NFKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMoZCwgIlBfTk9TRVNTSU9OIiwgKGxvbmcpUF9OT1NFU1NJT04pKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhkLCAiUF9RVU9URSIsIChsb25nKVBfUVVPVEUpKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhkLCAiUF9USUxERSIsIChsb25nKVBfVElMREUpKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhkLCAiUF9VTlJFTEFURUQiLCAobG9uZylQX1VOUkVMQVRFRCkpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKGQsICJQX0RFQlVHREVTQyIsIChsb25nKVBfREVCVUdERVNDKSkgcmV0dXJuIC0xOwotI2Vsc2UKLSAgICBpZiAoaW5zKGQsICJQX1dBSVQiLCAobG9uZylfUF9XQUlUKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMoZCwgIlBfTk9XQUlUIiwgKGxvbmcpX1BfTk9XQUlUKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMoZCwgIlBfT1ZFUkxBWSIsIChsb25nKV9PTERfUF9PVkVSTEFZKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMoZCwgIlBfTk9XQUlUTyIsIChsb25nKV9QX05PV0FJVE8pKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhkLCAiUF9ERVRBQ0giLCAobG9uZylfUF9ERVRBQ0gpKSByZXR1cm4gLTE7Ci0jZW5kaWYKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBfV0FJVCIsIF9QX1dBSVQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQX05PV0FJVCIsIF9QX05PV0FJVCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBfT1ZFUkxBWSIsIF9PTERfUF9PVkVSTEFZKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUF9OT1dBSVRPIiwgX1BfTk9XQUlUTykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBfREVUQUNIIiwgX1BfREVUQUNIKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAKICNpZmRlZiBIQVZFX1NDSEVEX0gKLSAgICBpZiAoaW5zKGQsICJTQ0hFRF9PVEhFUiIsIChsb25nKVNDSEVEX09USEVSKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMoZCwgIlNDSEVEX0ZJRk8iLCAobG9uZylTQ0hFRF9GSUZPKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMoZCwgIlNDSEVEX1JSIiwgKGxvbmcpU0NIRURfUlIpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNDSEVEX09USEVSKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTQ0hFRF9GSUZPKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTQ0hFRF9SUikpIHJldHVybiAtMTsKICNpZmRlZiBTQ0hFRF9TUE9SQURJQwotICAgIGlmIChpbnMoZCwgIlNDSEVEX1NQT1JBRElDIiwgKGxvbmcpU0NIRURfU1BPUkFESUMpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNDSEVEX1NQT1JBRElDKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBTQ0hFRF9CQVRDSAotICAgIGlmIChpbnMoZCwgIlNDSEVEX0JBVENIIiwgKGxvbmcpU0NIRURfQkFUQ0gpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNDSEVEX0JBVENIKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgU0NIRURfSURMRQotICAgIGlmIChpbnMoZCwgIlNDSEVEX0lETEUiLCAobG9uZylTQ0hFRF9JRExFKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTQ0hFRF9JRExFKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgU0NIRURfUkVTRVRfT05fRk9SSwotICAgIGlmIChpbnMoZCwgIlNDSEVEX1JFU0VUX09OX0ZPUksiLCAobG9uZylTQ0hFRF9SRVNFVF9PTl9GT1JLKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTQ0hFRF9SRVNFVF9PTl9GT1JLKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgU0NIRURfU1lTCi0gICAgaWYgKGlucyhkLCAiU0NIRURfU1lTIiwgKGxvbmcpU0NIRURfU1lTKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTQ0hFRF9TWVMpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBTQ0hFRF9JQQotICAgIGlmIChpbnMoZCwgIlNDSEVEX0lBIiwgKGxvbmcpU0NIRURfSUEpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNDSEVEX0lBKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgU0NIRURfRlNTCi0gICAgaWYgKGlucyhkLCAiU0NIRURfRlNTIiwgKGxvbmcpU0NIRURfRlNTKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTQ0hFRF9GU1MpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBTQ0hFRF9GWAotICAgIGlmIChpbnMoZCwgIlNDSEVEX0ZYIiwgKGxvbmcpU0NIRURfRlNTKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU0NIRURfRlgiLCBTQ0hFRF9GU1MpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNlbmRpZgogCiAjaWZkZWYgVVNFX1hBVFRSUwotICAgIGlmIChpbnMoZCwgIlhBVFRSX0NSRUFURSIsIChsb25nKVhBVFRSX0NSRUFURSkpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKGQsICJYQVRUUl9SRVBMQUNFIiwgKGxvbmcpWEFUVFJfUkVQTEFDRSkpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKGQsICJYQVRUUl9TSVpFX01BWCIsIChsb25nKVhBVFRSX1NJWkVfTUFYKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBYQVRUUl9DUkVBVEUpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFhBVFRSX1JFUExBQ0UpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFhBVFRSX1NJWkVfTUFYKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAKICNpZmRlZiBSVExEX0xBWlkKLSAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8oZCwgUlRMRF9MQVpZKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSVExEX0xBWlkpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBSVExEX05PVwotICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhkLCBSVExEX05PVykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUlRMRF9OT1cpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBSVExEX0dMT0JBTAotICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhkLCBSVExEX0dMT0JBTCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUlRMRF9HTE9CQUwpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBSVExEX0xPQ0FMCi0gICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKGQsIFJUTERfTE9DQUwpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJUTERfTE9DQUwpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBSVExEX05PREVMRVRFCi0gICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKGQsIFJUTERfTk9ERUxFVEUpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJUTERfTk9ERUxFVEUpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBSVExEX05PTE9BRAotICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhkLCBSVExEX05PTE9BRCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUlRMRF9OT0xPQUQpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBSVExEX0RFRVBCSU5ECi0gICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKGQsIFJUTERfREVFUEJJTkQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJUTERfREVFUEJJTkQpKSByZXR1cm4gLTE7CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoUFlPU19PUzIpCi0gICAgaWYgKGluc2VydHZhbHVlcyhkKSkgcmV0dXJuIC0xOwotI2VuZGlmCiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTExOTM0LDEwICsxMjEwNiw2IEBACiAjZGVmaW5lIElOSVRGVU5DIFB5SW5pdF9udAogI2RlZmluZSBNT0ROQU1FICJudCIKIAotI2VsaWYgZGVmaW5lZChQWU9TX09TMikKLSNkZWZpbmUgSU5JVEZVTkMgUHlJbml0X29zMgotI2RlZmluZSBNT0ROQU1FICJvczIiCi0KICNlbHNlCiAjZGVmaW5lIElOSVRGVU5DIFB5SW5pdF9wb3NpeAogI2RlZmluZSBNT0ROQU1FICJwb3NpeCIKQEAgLTEyMTI1LDE5ICsxMjI5MywyMyBAQAogICAgIGlmICghaW5pdGlhbGl6ZWQpIHsKICNpZiBkZWZpbmVkKEhBVkVfV0FJVElEKSAmJiAhZGVmaW5lZChfX0FQUExFX18pCiAgICAgICAgIHdhaXRpZF9yZXN1bHRfZGVzYy5uYW1lID0gTU9ETkFNRSAiLndhaXRpZF9yZXN1bHQiOwotICAgICAgICBQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlKCZXYWl0aWRSZXN1bHRUeXBlLCAmd2FpdGlkX3Jlc3VsdF9kZXNjKTsKKyAgICAgICAgaWYgKFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUyKCZXYWl0aWRSZXN1bHRUeXBlLCAmd2FpdGlkX3Jlc3VsdF9kZXNjKSA8IDApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICNlbmRpZgogCi0gICAgICAgIHN0YXRfcmVzdWx0X2Rlc2MubmFtZSA9IE1PRE5BTUUgIi5zdGF0X3Jlc3VsdCI7CisgICAgICAgIHN0YXRfcmVzdWx0X2Rlc2MubmFtZSA9ICJvcy5zdGF0X3Jlc3VsdCI7IC8qIHNlZSBpc3N1ZSAjMTkyMDkgKi8KICAgICAgICAgc3RhdF9yZXN1bHRfZGVzYy5maWVsZHNbN10ubmFtZSA9IFB5U3RydWN0U2VxdWVuY2VfVW5uYW1lZEZpZWxkOwogICAgICAgICBzdGF0X3Jlc3VsdF9kZXNjLmZpZWxkc1s4XS5uYW1lID0gUHlTdHJ1Y3RTZXF1ZW5jZV9Vbm5hbWVkRmllbGQ7CiAgICAgICAgIHN0YXRfcmVzdWx0X2Rlc2MuZmllbGRzWzldLm5hbWUgPSBQeVN0cnVjdFNlcXVlbmNlX1VubmFtZWRGaWVsZDsKLSAgICAgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZSgmU3RhdFJlc3VsdFR5cGUsICZzdGF0X3Jlc3VsdF9kZXNjKTsKKyAgICAgICAgaWYgKFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUyKCZTdGF0UmVzdWx0VHlwZSwgJnN0YXRfcmVzdWx0X2Rlc2MpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICBzdHJ1Y3RzZXFfbmV3ID0gU3RhdFJlc3VsdFR5cGUudHBfbmV3OwogICAgICAgICBTdGF0UmVzdWx0VHlwZS50cF9uZXcgPSBzdGF0cmVzdWx0X25ldzsKIAotICAgICAgICBzdGF0dmZzX3Jlc3VsdF9kZXNjLm5hbWUgPSBNT0ROQU1FICIuc3RhdHZmc19yZXN1bHQiOwotICAgICAgICBQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlKCZTdGF0VkZTUmVzdWx0VHlwZSwgJnN0YXR2ZnNfcmVzdWx0X2Rlc2MpOworICAgICAgICBzdGF0dmZzX3Jlc3VsdF9kZXNjLm5hbWUgPSAib3Muc3RhdHZmc19yZXN1bHQiOyAvKiBzZWUgaXNzdWUgIzE5MjA5ICovCisgICAgICAgIGlmIChQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlMigmU3RhdFZGU1Jlc3VsdFR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3RhdHZmc19yZXN1bHRfZGVzYykgPCAwKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAjaWZkZWYgTkVFRF9USUNLU19QRVJfU0VDT05ECiAjICBpZiBkZWZpbmVkKEhBVkVfU1lTQ09ORikgJiYgZGVmaW5lZChfU0NfQ0xLX1RDSykKICAgICAgICAgdGlja3NfcGVyX3NlY29uZCA9IHN5c2NvbmYoX1NDX0NMS19UQ0spOwpAQCAtMTIxNTAsMTIgKzEyMzIyLDE1IEBACiAKICNpZiBkZWZpbmVkKEhBVkVfU0NIRURfU0VUUEFSQU0pIHx8IGRlZmluZWQoSEFWRV9TQ0hFRF9TRVRTQ0hFRFVMRVIpCiAgICAgICAgIHNjaGVkX3BhcmFtX2Rlc2MubmFtZSA9IE1PRE5BTUUgIi5zY2hlZF9wYXJhbSI7Ci0gICAgICAgIFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUoJlNjaGVkUGFyYW1UeXBlLCAmc2NoZWRfcGFyYW1fZGVzYyk7CisgICAgICAgIGlmIChQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlMigmU2NoZWRQYXJhbVR5cGUsICZzY2hlZF9wYXJhbV9kZXNjKSA8IDApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgU2NoZWRQYXJhbVR5cGUudHBfbmV3ID0gc2NoZWRfcGFyYW1fbmV3OwogI2VuZGlmCiAKICAgICAgICAgLyogaW5pdGlhbGl6ZSBUZXJtaW5hbFNpemVfaW5mbyAqLwotICAgICAgICBQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlKCZUZXJtaW5hbFNpemVUeXBlLCAmVGVybWluYWxTaXplX2Rlc2MpOworICAgICAgICBpZiAoUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZTIoJlRlcm1pbmFsU2l6ZVR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmVGVybWluYWxTaXplX2Rlc2MpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICNpZiBkZWZpbmVkKEhBVkVfV0FJVElEKSAmJiAhZGVmaW5lZChfX0FQUExFX18pCiAgICAgUHlfSU5DUkVGKChQeU9iamVjdCopICZXYWl0aWRSZXN1bHRUeXBlKTsKQEAgLTEyMTczLDExICsxMjM0OCwxMyBAQAogI2VuZGlmCiAKICAgICB0aW1lc19yZXN1bHRfZGVzYy5uYW1lID0gTU9ETkFNRSAiLnRpbWVzX3Jlc3VsdCI7Ci0gICAgUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZSgmVGltZXNSZXN1bHRUeXBlLCAmdGltZXNfcmVzdWx0X2Rlc2MpOworICAgIGlmIChQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlMigmVGltZXNSZXN1bHRUeXBlLCAmdGltZXNfcmVzdWx0X2Rlc2MpIDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJ0aW1lc19yZXN1bHQiLCAoUHlPYmplY3QgKikmVGltZXNSZXN1bHRUeXBlKTsKIAogICAgIHVuYW1lX3Jlc3VsdF9kZXNjLm5hbWUgPSBNT0ROQU1FICIudW5hbWVfcmVzdWx0IjsKLSAgICBQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlKCZVbmFtZVJlc3VsdFR5cGUsICZ1bmFtZV9yZXN1bHRfZGVzYyk7CisgICAgaWYgKFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUyKCZVbmFtZVJlc3VsdFR5cGUsICZ1bmFtZV9yZXN1bHRfZGVzYykgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKICAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgInVuYW1lX3Jlc3VsdCIsIChQeU9iamVjdCAqKSZVbmFtZVJlc3VsdFR5cGUpOwogCiAjaWZkZWYgX19BUFBMRV9fCkBAIC0xMjI1NSw3ICsxMjQzMiw2IEBACiAgICAgaW5pdGlhbGl6ZWQgPSAxOwogCiAgICAgcmV0dXJuIG07Ci0KIH0KIAogI2lmZGVmIF9fY3BsdXNwbHVzCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3B3ZG1vZHVsZS5jIGIvTW9kdWxlcy9wd2Rtb2R1bGUuYwppbmRleCAyODVmZDljLi5lYmI4NzEyIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3B3ZG1vZHVsZS5jCisrKyBiL01vZHVsZXMvcHdkbW9kdWxlLmMKQEAgLTY5LDE4ICs2OSwxMCBAQAogI2RlZmluZSBTRVRTKGksdmFsKSBzZXRzKHYsIGksIHZhbCkKIAogICAgIFNFVFMoc2V0SW5kZXgrKywgcC0+cHdfbmFtZSk7Ci0jaWZkZWYgX19WTVMKLSAgICBTRVRTKHNldEluZGV4KyssICIiKTsKLSNlbHNlCiAgICAgU0VUUyhzZXRJbmRleCsrLCBwLT5wd19wYXNzd2QpOwotI2VuZGlmCiAgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9TRVRfSVRFTSh2LCBzZXRJbmRleCsrLCBfUHlMb25nX0Zyb21VaWQocC0+cHdfdWlkKSk7CiAgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9TRVRfSVRFTSh2LCBzZXRJbmRleCsrLCBfUHlMb25nX0Zyb21HaWQocC0+cHdfZ2lkKSk7Ci0jaWZkZWYgX19WTVMKLSAgICBTRVRTKHNldEluZGV4KyssICIiKTsKLSNlbHNlCiAgICAgU0VUUyhzZXRJbmRleCsrLCBwLT5wd19nZWNvcyk7Ci0jZW5kaWYKICAgICBTRVRTKHNldEluZGV4KyssIHAtPnB3X2Rpcik7CiAgICAgU0VUUyhzZXRJbmRleCsrLCBwLT5wd19zaGVsbCk7CiAKQEAgLTE2OCwxMiArMTYwLDggQEAKICAgICBzdHJ1Y3QgcGFzc3dkICpwOwogICAgIGlmICgoZCA9IFB5TGlzdF9OZXcoMCkpID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwotI2lmIGRlZmluZWQoUFlPU19PUzIpICYmIGRlZmluZWQoUFlDQ19HQ0MpCi0gICAgaWYgKChwID0gZ2V0cHd1aWQoMCkpICE9IE5VTEwpIHsKLSNlbHNlCiAgICAgc2V0cHdlbnQoKTsKICAgICB3aGlsZSAoKHAgPSBnZXRwd2VudCgpKSAhPSBOVUxMKSB7Ci0jZW5kaWYKICAgICAgICAgUHlPYmplY3QgKnYgPSBta3B3ZW50KHApOwogICAgICAgICBpZiAodiA9PSBOVUxMIHx8IFB5TGlzdF9BcHBlbmQoZCwgdikgIT0gMCkgewogICAgICAgICAgICAgUHlfWERFQ1JFRih2KTsKQEAgLTIyMCw4ICsyMDgsOSBAQAogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGlmICghaW5pdGlhbGl6ZWQpIHsKLSAgICAgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZSgmU3RydWN0UHdkVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3RydWN0X3B3ZF90eXBlX2Rlc2MpOworICAgICAgICBpZiAoUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZTIoJlN0cnVjdFB3ZFR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3RydWN0X3B3ZF90eXBlX2Rlc2MpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICBpbml0aWFsaXplZCA9IDE7CiAgICAgfQogICAgIFB5X0lOQ1JFRigoUHlPYmplY3QgKikgJlN0cnVjdFB3ZFR5cGUpOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9weWV4cGF0LmMgYi9Nb2R1bGVzL3B5ZXhwYXQuYwppbmRleCA0NTY4MGFlLi42YTkwMWY3IDEwMDY0NAotLS0gYS9Nb2R1bGVzL3B5ZXhwYXQuYworKysgYi9Nb2R1bGVzL3B5ZXhwYXQuYwpAQCAtOCw3ICs4LDggQEAKIAogI2RlZmluZSBYTUxfQ09NQklORURfVkVSU0lPTiAoMTAwMDAqWE1MX01BSk9SX1ZFUlNJT04rMTAwKlhNTF9NSU5PUl9WRVJTSU9OK1hNTF9NSUNST19WRVJTSU9OKQogCi0jZGVmaW5lIEZJWF9UUkFDRQorc3RhdGljIFhNTF9NZW1vcnlfSGFuZGxpbmdfU3VpdGUgRXhwYXRNZW1vcnlIYW5kbGVyID0geworICAgIFB5T2JqZWN0X01hbGxvYywgUHlPYmplY3RfUmVhbGxvYywgUHlPYmplY3RfRnJlZX07CiAKIGVudW0gSGFuZGxlclR5cGVzIHsKICAgICBTdGFydEVsZW1lbnQsCkBAIC0yMDcsMTIxICsyMDgsMTcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2V4dGVybmFsX2VudGl0eV9yZWZfaGFuZGxlcik7CiB9CiAKLXN0YXRpYyBQeUNvZGVPYmplY3QqCi1nZXRjb2RlKGVudW0gSGFuZGxlclR5cGVzIHNsb3QsIGNoYXIqIGZ1bmNfbmFtZSwgaW50IGxpbmVubykKLXsKLSAgICBpZiAoaGFuZGxlcl9pbmZvW3Nsb3RdLnRiX2NvZGUgPT0gTlVMTCkgewotICAgICAgICBoYW5kbGVyX2luZm9bc2xvdF0udGJfY29kZSA9Ci0gICAgICAgICAgICBQeUNvZGVfTmV3RW1wdHkoX19GSUxFX18sIGZ1bmNfbmFtZSwgbGluZW5vKTsKLSAgICB9Ci0gICAgcmV0dXJuIGhhbmRsZXJfaW5mb1tzbG90XS50Yl9jb2RlOwotfQotCi0jaWZkZWYgRklYX1RSQUNFCi1zdGF0aWMgaW50Ci10cmFjZV9mcmFtZShQeVRocmVhZFN0YXRlICp0c3RhdGUsIFB5RnJhbWVPYmplY3QgKmYsIGludCBjb2RlLCBQeU9iamVjdCAqdmFsKQotewotICAgIGludCByZXN1bHQgPSAwOwotICAgIGlmICghdHN0YXRlLT51c2VfdHJhY2luZyB8fCB0c3RhdGUtPnRyYWNpbmcpCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmICh0c3RhdGUtPmNfcHJvZmlsZWZ1bmMgIT0gTlVMTCkgewotICAgICAgICB0c3RhdGUtPnRyYWNpbmcrKzsKLSAgICAgICAgcmVzdWx0ID0gdHN0YXRlLT5jX3Byb2ZpbGVmdW5jKHRzdGF0ZS0+Y19wcm9maWxlb2JqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZiwgY29kZSAsIHZhbCk7Ci0gICAgICAgIHRzdGF0ZS0+dXNlX3RyYWNpbmcgPSAoKHRzdGF0ZS0+Y190cmFjZWZ1bmMgIT0gTlVMTCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAodHN0YXRlLT5jX3Byb2ZpbGVmdW5jICE9IE5VTEwpKTsKLSAgICAgICAgdHN0YXRlLT50cmFjaW5nLS07Ci0gICAgICAgIGlmIChyZXN1bHQpCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICBpZiAodHN0YXRlLT5jX3RyYWNlZnVuYyAhPSBOVUxMKSB7Ci0gICAgICAgIHRzdGF0ZS0+dHJhY2luZysrOwotICAgICAgICByZXN1bHQgPSB0c3RhdGUtPmNfdHJhY2VmdW5jKHRzdGF0ZS0+Y190cmFjZW9iaiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmLCBjb2RlICwgdmFsKTsKLSAgICAgICAgdHN0YXRlLT51c2VfdHJhY2luZyA9ICgodHN0YXRlLT5jX3RyYWNlZnVuYyAhPSBOVUxMKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICh0c3RhdGUtPmNfcHJvZmlsZWZ1bmMgIT0gTlVMTCkpOwotICAgICAgICB0c3RhdGUtPnRyYWNpbmctLTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIGludAotdHJhY2VfZnJhbWVfZXhjKFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSwgUHlGcmFtZU9iamVjdCAqZikKLXsKLSAgICBQeU9iamVjdCAqdHlwZSwgKnZhbHVlLCAqdHJhY2ViYWNrLCAqYXJnOwotICAgIGludCBlcnI7Ci0KLSAgICBpZiAodHN0YXRlLT5jX3RyYWNlZnVuYyA9PSBOVUxMKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIFB5RXJyX0ZldGNoKCZ0eXBlLCAmdmFsdWUsICZ0cmFjZWJhY2spOwotICAgIGlmICh2YWx1ZSA9PSBOVUxMKSB7Ci0gICAgICAgIHZhbHVlID0gUHlfTm9uZTsKLSAgICAgICAgUHlfSU5DUkVGKHZhbHVlKTsKLSAgICB9Ci0gICAgYXJnID0gUHlUdXBsZV9QYWNrKDMsIHR5cGUsIHZhbHVlLCB0cmFjZWJhY2spOwotICAgIGlmIChhcmcgPT0gTlVMTCkgewotICAgICAgICBQeUVycl9SZXN0b3JlKHR5cGUsIHZhbHVlLCB0cmFjZWJhY2spOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgZXJyID0gdHJhY2VfZnJhbWUodHN0YXRlLCBmLCBQeVRyYWNlX0VYQ0VQVElPTiwgYXJnKTsKLSAgICBQeV9ERUNSRUYoYXJnKTsKLSAgICBpZiAoZXJyID09IDApCi0gICAgICAgIFB5RXJyX1Jlc3RvcmUodHlwZSwgdmFsdWUsIHRyYWNlYmFjayk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIFB5X1hERUNSRUYodHlwZSk7Ci0gICAgICAgIFB5X1hERUNSRUYodmFsdWUpOwotICAgICAgICBQeV9YREVDUkVGKHRyYWNlYmFjayk7Ci0gICAgfQotICAgIHJldHVybiBlcnI7Ci19Ci0jZW5kaWYKLQogc3RhdGljIFB5T2JqZWN0KgotY2FsbF93aXRoX2ZyYW1lKFB5Q29kZU9iamVjdCAqYywgUHlPYmplY3QqIGZ1bmMsIFB5T2JqZWN0KiBhcmdzLAorY2FsbF93aXRoX2ZyYW1lKGNoYXIgKmZ1bmNuYW1lLCBpbnQgbGluZW5vLCBQeU9iamVjdCogZnVuYywgUHlPYmplY3QqIGFyZ3MsCiAgICAgICAgICAgICAgICAgeG1scGFyc2VvYmplY3QgKnNlbGYpCiB7Ci0gICAgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlID0gUHlUaHJlYWRTdGF0ZV9HRVQoKTsKLSAgICBQeUZyYW1lT2JqZWN0ICpmOwotICAgIFB5T2JqZWN0ICpyZXMsICpnbG9iYWxzOworICAgIFB5T2JqZWN0ICpyZXM7CiAKLSAgICBpZiAoYyA9PSBOVUxMKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIGdsb2JhbHMgPSBQeUV2YWxfR2V0R2xvYmFscygpOwotICAgIGlmIChnbG9iYWxzID09IE5VTEwpIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgZiA9IFB5RnJhbWVfTmV3KHRzdGF0ZSwgYywgZ2xvYmFscywgTlVMTCk7Ci0gICAgaWYgKGYgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgdHN0YXRlLT5mcmFtZSA9IGY7Ci0jaWZkZWYgRklYX1RSQUNFCi0gICAgaWYgKHRyYWNlX2ZyYW1lKHRzdGF0ZSwgZiwgUHlUcmFjZV9DQUxMLCBQeV9Ob25lKSA8IDApIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotI2VuZGlmCiAgICAgcmVzID0gUHlFdmFsX0NhbGxPYmplY3QoZnVuYywgYXJncyk7CiAgICAgaWYgKHJlcyA9PSBOVUxMKSB7Ci0gICAgICAgIGlmICh0c3RhdGUtPmN1cmV4Y190cmFjZWJhY2sgPT0gTlVMTCkKLSAgICAgICAgICAgIFB5VHJhY2VCYWNrX0hlcmUoZik7CisgICAgICAgIF9QeVRyYWNlYmFja19BZGQoZnVuY25hbWUsIF9fRklMRV9fLCBsaW5lbm8pOwogICAgICAgICBYTUxfU3RvcFBhcnNlcihzZWxmLT5pdHNlbGYsIFhNTF9GQUxTRSk7Ci0jaWZkZWYgRklYX1RSQUNFCi0gICAgICAgIGlmICh0cmFjZV9mcmFtZV9leGModHN0YXRlLCBmKSA8IDApIHsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9CiAgICAgfQotICAgIGVsc2UgewotICAgICAgICBpZiAodHJhY2VfZnJhbWUodHN0YXRlLCBmLCBQeVRyYWNlX1JFVFVSTiwgcmVzKSA8IDApIHsKLSAgICAgICAgICAgIFB5X0NMRUFSKHJlcyk7Ci0gICAgICAgIH0KLSAgICB9Ci0jZWxzZQotICAgIH0KLSNlbmRpZgotICAgIHRzdGF0ZS0+ZnJhbWUgPSBmLT5mX2JhY2s7Ci0gICAgUHlfREVDUkVGKGYpOwogICAgIHJldHVybiByZXM7CiB9CiAKQEAgLTM3Myw3ICsyNzAsNyBAQAogICAgIFB5VHVwbGVfU0VUX0lURU0oYXJncywgMCwgdGVtcCk7CiAgICAgLyogdGVtcCBpcyBub3cgYSBib3Jyb3dlZCByZWZlcmVuY2U7IGNvbnNpZGVyIGl0IHVudXNlZC4gKi8KICAgICBzZWxmLT5pbl9jYWxsYmFjayA9IDE7Ci0gICAgdGVtcCA9IGNhbGxfd2l0aF9mcmFtZShnZXRjb2RlKENoYXJhY3RlckRhdGEsICJDaGFyYWN0ZXJEYXRhIiwgX19MSU5FX18pLAorICAgIHRlbXAgPSBjYWxsX3dpdGhfZnJhbWUoIkNoYXJhY3RlckRhdGEiLCBfX0xJTkVfXywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYtPmhhbmRsZXJzW0NoYXJhY3RlckRhdGFdLCBhcmdzLCBzZWxmKTsKICAgICAvKiB0ZW1wIGlzIGFuIG93bmVkIHJlZmVyZW5jZSBhZ2Fpbiwgb3IgTlVMTCAqLwogICAgIHNlbGYtPmluX2NhbGxiYWNrID0gMDsKQEAgLTQwMyw2ICszMDAsMTAgQEAKIG15X0NoYXJhY3RlckRhdGFIYW5kbGVyKHZvaWQgKnVzZXJEYXRhLCBjb25zdCBYTUxfQ2hhciAqZGF0YSwgaW50IGxlbikKIHsKICAgICB4bWxwYXJzZW9iamVjdCAqc2VsZiA9ICh4bWxwYXJzZW9iamVjdCAqKSB1c2VyRGF0YTsKKworICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICByZXR1cm47CisKICAgICBpZiAoc2VsZi0+YnVmZmVyID09IE5VTEwpCiAgICAgICAgIGNhbGxfY2hhcmFjdGVyX2hhbmRsZXIoc2VsZiwgZGF0YSwgbGVuKTsKICAgICBlbHNlIHsKQEAgLTQzNyw2ICszMzgsOSBAQAogICAgICAgICBQeU9iamVjdCAqY29udGFpbmVyLCAqcnYsICphcmdzOwogICAgICAgICBpbnQgaSwgbWF4OwogCisgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICAgcmV0dXJuOworCiAgICAgICAgIGlmIChmbHVzaF9jaGFyYWN0ZXJfYnVmZmVyKHNlbGYpIDwgMCkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgLyogU2V0IG1heCB0byB0aGUgbnVtYmVyIG9mIHNsb3RzIGZpbGxlZCBpbiBhdHRzW107IG1heC8yIGlzCkBAIC00OTgsNyArNDAyLDcgQEAKICAgICAgICAgfQogICAgICAgICAvKiBDb250YWluZXIgaXMgbm93IGEgYm9ycm93ZWQgcmVmZXJlbmNlOyBpZ25vcmUgaXQuICovCiAgICAgICAgIHNlbGYtPmluX2NhbGxiYWNrID0gMTsKLSAgICAgICAgcnYgPSBjYWxsX3dpdGhfZnJhbWUoZ2V0Y29kZShTdGFydEVsZW1lbnQsICJTdGFydEVsZW1lbnQiLCBfX0xJTkVfXyksCisgICAgICAgIHJ2ID0gY2FsbF93aXRoX2ZyYW1lKCJTdGFydEVsZW1lbnQiLCBfX0xJTkVfXywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi0+aGFuZGxlcnNbU3RhcnRFbGVtZW50XSwgYXJncywgc2VsZik7CiAgICAgICAgIHNlbGYtPmluX2NhbGxiYWNrID0gMDsKICAgICAgICAgUHlfREVDUkVGKGFyZ3MpOwpAQCAtNTIwLDEyICs0MjQsMTQgQEAKICAgICBJTklUIFwKIFwKICAgICBpZiAoaGF2ZV9oYW5kbGVyKHNlbGYsIE5BTUUpKSB7IFwKKyAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIFwKKyAgICAgICAgICAgIHJldHVybiBSRVRVUk47IFwKICAgICAgICAgaWYgKGZsdXNoX2NoYXJhY3Rlcl9idWZmZXIoc2VsZikgPCAwKSBcCiAgICAgICAgICAgICByZXR1cm4gUkVUVVJOOyBcCiAgICAgICAgIGFyZ3MgPSBQeV9CdWlsZFZhbHVlIFBBUkFNX0ZPUk1BVCA7XAogICAgICAgICBpZiAoIWFyZ3MpIHsgZmxhZ19lcnJvcihzZWxmKTsgcmV0dXJuIFJFVFVSTjt9IFwKICAgICAgICAgc2VsZi0+aW5fY2FsbGJhY2sgPSAxOyBcCi0gICAgICAgIHJ2ID0gY2FsbF93aXRoX2ZyYW1lKGdldGNvZGUoTkFNRSwjTkFNRSxfX0xJTkVfXyksIFwKKyAgICAgICAgcnYgPSBjYWxsX3dpdGhfZnJhbWUoI05BTUUsX19MSU5FX18sIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi0+aGFuZGxlcnNbTkFNRV0sIGFyZ3MsIHNlbGYpOyBcCiAgICAgICAgIHNlbGYtPmluX2NhbGxiYWNrID0gMDsgXAogICAgICAgICBQeV9ERUNSRUYoYXJncyk7IFwKQEAgLTYzNCw2ICs1NDAsOSBAQAogICAgICAgICBQeU9iamVjdCAqcnYgPSBOVUxMOwogICAgICAgICBQeU9iamVjdCAqbW9kZWxvYmosICpuYW1lb2JqOwogCisgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICAgcmV0dXJuOworCiAgICAgICAgIGlmIChmbHVzaF9jaGFyYWN0ZXJfYnVmZmVyKHNlbGYpIDwgMCkKICAgICAgICAgICAgIGdvdG8gZmluYWxseTsKICAgICAgICAgbW9kZWxvYmogPSBjb252X2NvbnRlbnRfbW9kZWwobW9kZWwsIChjb252X3N0cmluZ190b191bmljb2RlKSk7CkBAIC02NTQsNyArNTYzLDcgQEAKICAgICAgICAgICAgIGdvdG8gZmluYWxseTsKICAgICAgICAgfQogICAgICAgICBzZWxmLT5pbl9jYWxsYmFjayA9IDE7Ci0gICAgICAgIHJ2ID0gY2FsbF93aXRoX2ZyYW1lKGdldGNvZGUoRWxlbWVudERlY2wsICJFbGVtZW50RGVjbCIsIF9fTElORV9fKSwKKyAgICAgICAgcnYgPSBjYWxsX3dpdGhfZnJhbWUoIkVsZW1lbnREZWNsIiwgX19MSU5FX18sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYtPmhhbmRsZXJzW0VsZW1lbnREZWNsXSwgYXJncywgc2VsZik7CiAgICAgICAgIHNlbGYtPmluX2NhbGxiYWNrID0gMDsKICAgICAgICAgaWYgKHJ2ID09IE5VTEwpIHsKQEAgLTgxOSw3ICs3MjgsOCBAQAogICAgICAgICBzICs9IE1BWF9DSFVOS19TSVpFOwogICAgICAgICBzbGVuIC09IE1BWF9DSFVOS19TSVpFOwogICAgIH0KLSAgICByYyA9IFhNTF9QYXJzZShzZWxmLT5pdHNlbGYsIHMsIHNsZW4sIGlzRmluYWwpOworICAgIGFzc2VydChNQVhfQ0hVTktfU0laRSA8IElOVF9NQVggJiYgc2xlbiA8IElOVF9NQVgpOworICAgIHJjID0gWE1MX1BhcnNlKHNlbGYtPml0c2VsZiwgcywgKGludClzbGVuLCBpc0ZpbmFsKTsKIAogZG9uZToKICAgICBpZiAodmlldy5idWYgIT0gTlVMTCkKQEAgLTg5Miw3ICs4MDIsNyBAQAogICAgICAgICB2b2lkICpidWYgPSBYTUxfR2V0QnVmZmVyKHNlbGYtPml0c2VsZiwgQlVGX1NJWkUpOwogICAgICAgICBpZiAoYnVmID09IE5VTEwpIHsKICAgICAgICAgICAgIFB5X1hERUNSRUYocmVhZG1ldGhvZCk7Ci0gICAgICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgICAgIHJldHVybiBnZXRfcGFyc2VfcmVzdWx0KHNlbGYsIDApOwogICAgICAgICB9CiAKICAgICAgICAgYnl0ZXNfcmVhZCA9IHJlYWRpbnN0KGJ1ZiwgQlVGX1NJWkUsIHJlYWRtZXRob2QpOwpAQCAtMTAwMSw3ICs5MTEsNyBAQAogICAgIFB5T2JqZWN0X0dDX1RyYWNrKG5ld19wYXJzZXIpOwogCiAgICAgaWYgKHNlbGYtPmJ1ZmZlciAhPSBOVUxMKSB7Ci0gICAgICAgIG5ld19wYXJzZXItPmJ1ZmZlciA9IG1hbGxvYyhuZXdfcGFyc2VyLT5idWZmZXJfc2l6ZSk7CisgICAgICAgIG5ld19wYXJzZXItPmJ1ZmZlciA9IFB5TWVtX01hbGxvYyhuZXdfcGFyc2VyLT5idWZmZXJfc2l6ZSk7CiAgICAgICAgIGlmIChuZXdfcGFyc2VyLT5idWZmZXIgPT0gTlVMTCkgewogICAgICAgICAgICAgUHlfREVDUkVGKG5ld19wYXJzZXIpOwogICAgICAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7CkBAIC0xMDE4LDcgKzkyOCw3IEBACiAgICAgZm9yIChpID0gMDsgaGFuZGxlcl9pbmZvW2ldLm5hbWUgIT0gTlVMTDsgaSsrKQogICAgICAgICAvKiBkbyBub3RoaW5nICovOwogCi0gICAgbmV3X3BhcnNlci0+aGFuZGxlcnMgPSBtYWxsb2Moc2l6ZW9mKFB5T2JqZWN0ICopICogaSk7CisgICAgbmV3X3BhcnNlci0+aGFuZGxlcnMgPSBQeU1lbV9OZXcoUHlPYmplY3QgKiwgaSk7CiAgICAgaWYgKCFuZXdfcGFyc2VyLT5oYW5kbGVycykgewogICAgICAgICBQeV9ERUNSRUYobmV3X3BhcnNlcik7CiAgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOwpAQCAtMTEyNiwxNCArMTAzNiwxOSBAQAogICAgIHZvaWQgKmRhdGE7CiAgICAgdW5zaWduZWQgaW50IGtpbmQ7CiAKKyAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgcmV0dXJuIFhNTF9TVEFUVVNfRVJST1I7CisKICAgICBpZiAodGVtcGxhdGVfYnVmZmVyWzFdID09IDApIHsKICAgICAgICAgZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKQogICAgICAgICAgICAgdGVtcGxhdGVfYnVmZmVyW2ldID0gaTsKICAgICB9CiAKICAgICB1ID0gUHlVbmljb2RlX0RlY29kZSgoY2hhciopIHRlbXBsYXRlX2J1ZmZlciwgMjU2LCBuYW1lLCAicmVwbGFjZSIpOwotICAgIGlmICh1ID09IE5VTEwgfHwgUHlVbmljb2RlX1JFQURZKHUpKQorICAgIGlmICh1ID09IE5VTEwgfHwgUHlVbmljb2RlX1JFQURZKHUpKSB7CisgICAgICAgIFB5X1hERUNSRUYodSk7CiAgICAgICAgIHJldHVybiBYTUxfU1RBVFVTX0VSUk9SOworICAgIH0KIAogICAgIGlmIChQeVVuaWNvZGVfR0VUX0xFTkdUSCh1KSAhPSAyNTYpIHsKICAgICAgICAgUHlfREVDUkVGKHUpOwpAQCAtMTE3OSwyOCArMTA5NCwyNiBAQAogICAgIHNlbGYtPmluX2NhbGxiYWNrID0gMDsKICAgICBzZWxmLT5uc19wcmVmaXhlcyA9IDA7CiAgICAgc2VsZi0+aGFuZGxlcnMgPSBOVUxMOwotICAgIGlmIChuYW1lc3BhY2Vfc2VwYXJhdG9yICE9IE5VTEwpIHsKLSAgICAgICAgc2VsZi0+aXRzZWxmID0gWE1MX1BhcnNlckNyZWF0ZU5TKGVuY29kaW5nLCAqbmFtZXNwYWNlX3NlcGFyYXRvcik7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICBzZWxmLT5pdHNlbGYgPSBYTUxfUGFyc2VyQ3JlYXRlKGVuY29kaW5nKTsKLSAgICB9Ci0jaWYgKChYTUxfTUFKT1JfVkVSU0lPTiA+PSAyKSAmJiAoWE1MX01JTk9SX1ZFUlNJT04gPj0gMSkpIHx8IGRlZmluZWQoWE1MX0hBU19TRVRfSEFTSF9TQUxUKQotICAgIC8qIFRoaXMgZmVhdHVyZSB3YXMgYWRkZWQgdXBzdHJlYW0gaW4gbGliZXhwYXQgMi4xLjAuICBPdXIgZXhwYXQgY29weQotICAgICAqIGhhcyBhIGJhY2twb3J0IG9mIHRoaXMgZmVhdHVyZSB3aGVyZSB3ZSBhbHNvIGRlZmluZSBYTUxfSEFTX1NFVF9IQVNIX1NBTFQKLSAgICAgKiB0byBpbmRpY2F0ZSB0aGF0IHdlIGNhbiBzdGlsbCB1c2UgaXQuICovCi0gICAgWE1MX1NldEhhc2hTYWx0KHNlbGYtPml0c2VsZiwKLSAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpX1B5X0hhc2hTZWNyZXQucHJlZml4KTsKLSNlbmRpZgogICAgIHNlbGYtPmludGVybiA9IGludGVybjsKICAgICBQeV9YSU5DUkVGKHNlbGYtPmludGVybik7CiAgICAgUHlPYmplY3RfR0NfVHJhY2soc2VsZik7CisKKyAgICAvKiBuYW1lc3BhY2Vfc2VwYXJhdG9yIGlzIGVpdGhlciBOVUxMIG9yIGNvbnRhaW5zIG9uZSBjaGFyICsgXDAgKi8KKyAgICBzZWxmLT5pdHNlbGYgPSBYTUxfUGFyc2VyQ3JlYXRlX01NKGVuY29kaW5nLCAmRXhwYXRNZW1vcnlIYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXNwYWNlX3NlcGFyYXRvcik7CiAgICAgaWYgKHNlbGYtPml0c2VsZiA9PSBOVUxMKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiWE1MX1BhcnNlckNyZWF0ZSBmYWlsZWQiKTsKICAgICAgICAgUHlfREVDUkVGKHNlbGYpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CisjaWYgKChYTUxfTUFKT1JfVkVSU0lPTiA+PSAyKSAmJiAoWE1MX01JTk9SX1ZFUlNJT04gPj0gMSkpIHx8IGRlZmluZWQoWE1MX0hBU19TRVRfSEFTSF9TQUxUKQorICAgIC8qIFRoaXMgZmVhdHVyZSB3YXMgYWRkZWQgdXBzdHJlYW0gaW4gbGliZXhwYXQgMi4xLjAuICBPdXIgZXhwYXQgY29weQorICAgICAqIGhhcyBhIGJhY2twb3J0IG9mIHRoaXMgZmVhdHVyZSB3aGVyZSB3ZSBhbHNvIGRlZmluZSBYTUxfSEFTX1NFVF9IQVNIX1NBTFQKKyAgICAgKiB0byBpbmRpY2F0ZSB0aGF0IHdlIGNhbiBzdGlsbCB1c2UgaXQuICovCisgICAgWE1MX1NldEhhc2hTYWx0KHNlbGYtPml0c2VsZiwKKyAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpX1B5X0hhc2hTZWNyZXQuZXhwYXQuaGFzaHNhbHQpOworI2VuZGlmCiAgICAgWE1MX1NldFVzZXJEYXRhKHNlbGYtPml0c2VsZiwgKHZvaWQgKilzZWxmKTsKICAgICBYTUxfU2V0VW5rbm93bkVuY29kaW5nSGFuZGxlcihzZWxmLT5pdHNlbGYsCiAgICAgICAgICAgICAgICAgICAoWE1MX1Vua25vd25FbmNvZGluZ0hhbmRsZXIpIFB5VW5rbm93bkVuY29kaW5nSGFuZGxlciwgTlVMTCk7CkBAIC0xMjA4LDcgKzExMjEsNyBAQAogICAgIGZvciAoaSA9IDA7IGhhbmRsZXJfaW5mb1tpXS5uYW1lICE9IE5VTEw7IGkrKykKICAgICAgICAgLyogZG8gbm90aGluZyAqLzsKIAotICAgIHNlbGYtPmhhbmRsZXJzID0gbWFsbG9jKHNpemVvZihQeU9iamVjdCAqKSAqIGkpOworICAgIHNlbGYtPmhhbmRsZXJzID0gUHlNZW1fTmV3KFB5T2JqZWN0ICosIGkpOwogICAgIGlmICghc2VsZi0+aGFuZGxlcnMpIHsKICAgICAgICAgUHlfREVDUkVGKHNlbGYpOwogICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKQEAgLTEyMzUsMTEgKzExNDgsMTEgQEAKICAgICAgICAgICAgIHNlbGYtPmhhbmRsZXJzW2ldID0gTlVMTDsKICAgICAgICAgICAgIFB5X1hERUNSRUYodGVtcCk7CiAgICAgICAgIH0KLSAgICAgICAgZnJlZShzZWxmLT5oYW5kbGVycyk7CisgICAgICAgIFB5TWVtX0ZyZWUoc2VsZi0+aGFuZGxlcnMpOwogICAgICAgICBzZWxmLT5oYW5kbGVycyA9IE5VTEw7CiAgICAgfQogICAgIGlmIChzZWxmLT5idWZmZXIgIT0gTlVMTCkgewotICAgICAgICBmcmVlKHNlbGYtPmJ1ZmZlcik7CisgICAgICAgIFB5TWVtX0ZyZWUoc2VsZi0+YnVmZmVyKTsKICAgICAgICAgc2VsZi0+YnVmZmVyID0gTlVMTDsKICAgICB9CiAgICAgUHlfWERFQ1JFRihzZWxmLT5pbnRlcm4pOwpAQCAtMTQyOCwxOCArMTM0MSwyMyBAQAogeG1scGFyc2Vfc2V0YXR0cm8oeG1scGFyc2VvYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpuYW1lLCBQeU9iamVjdCAqdikKIHsKICAgICAvKiBTZXQgYXR0cmlidXRlICduYW1lJyB0byB2YWx1ZSAndicuIHY9PU5VTEwgbWVhbnMgZGVsZXRlICovCisgICAgaWYgKCFQeVVuaWNvZGVfQ2hlY2sobmFtZSkpIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICJhdHRyaWJ1dGUgbmFtZSBtdXN0IGJlIHN0cmluZywgbm90ICclLjIwMHMnIiwKKyAgICAgICAgICAgICAgICAgICAgIG5hbWUtPm9iX3R5cGUtPnRwX25hbWUpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQogICAgIGlmICh2ID09IE5VTEwpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwgIkNhbm5vdCBkZWxldGUgYXR0cmlidXRlIik7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9Ci0gICAgYXNzZXJ0KFB5VW5pY29kZV9DaGVjayhuYW1lKSk7CiAgICAgaWYgKFB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKG5hbWUsICJidWZmZXJfdGV4dCIpID09IDApIHsKICAgICAgICAgaW50IGIgPSBQeU9iamVjdF9Jc1RydWUodik7CiAgICAgICAgIGlmIChiIDwgMCkKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgaWYgKGIpIHsKICAgICAgICAgICAgIGlmIChzZWxmLT5idWZmZXIgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIHNlbGYtPmJ1ZmZlciA9IG1hbGxvYyhzZWxmLT5idWZmZXJfc2l6ZSk7CisgICAgICAgICAgICAgICAgc2VsZi0+YnVmZmVyID0gUHlNZW1fTWFsbG9jKHNlbGYtPmJ1ZmZlcl9zaXplKTsKICAgICAgICAgICAgICAgICBpZiAoc2VsZi0+YnVmZmVyID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwpAQCAtMTQ1MCw3ICsxMzY4LDcgQEAKICAgICAgICAgZWxzZSBpZiAoc2VsZi0+YnVmZmVyICE9IE5VTEwpIHsKICAgICAgICAgICAgIGlmIChmbHVzaF9jaGFyYWN0ZXJfYnVmZmVyKHNlbGYpIDwgMCkKICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICBmcmVlKHNlbGYtPmJ1ZmZlcik7CisgICAgICAgICAgICBQeU1lbV9GcmVlKHNlbGYtPmJ1ZmZlcik7CiAgICAgICAgICAgICBzZWxmLT5idWZmZXIgPSBOVUxMOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiAwOwpAQCAtMTQ4NSwxNyArMTQwMywxOCBAQAogICAgICAgICByZXR1cm4gLTE7CiAgICAgICB9CiAKLSAgICAgIG5ld19idWZmZXJfc2l6ZT1QeUxvbmdfQVNfTE9ORyh2KTsKKyAgICAgIG5ld19idWZmZXJfc2l6ZSA9IFB5TG9uZ19Bc0xvbmcodik7CisgICAgICBpZiAobmV3X2J1ZmZlcl9zaXplIDw9IDApIHsKKyAgICAgICAgaWYgKCFQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiYnVmZmVyX3NpemUgbXVzdCBiZSBncmVhdGVyIHRoYW4gemVybyIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgICB9CisKICAgICAgIC8qIHRyaXZpYWwgY2FzZSAtLSBubyBjaGFuZ2UgKi8KICAgICAgIGlmIChuZXdfYnVmZmVyX3NpemUgPT0gc2VsZi0+YnVmZmVyX3NpemUpIHsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgICB9CiAKLSAgICAgIGlmIChuZXdfYnVmZmVyX3NpemUgPD0gMCkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgImJ1ZmZlcl9zaXplIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8iKTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgICAgfQotCiAgICAgICAvKiBjaGVjayBtYXhpbXVtICovCiAgICAgICBpZiAobmV3X2J1ZmZlcl9zaXplID4gSU5UX01BWCkgewogICAgICAgICBjaGFyIGVycm1zZ1sxMDBdOwpAQCAtMTUxMiw5ICsxNDMxLDkgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAvKiBmcmVlIGV4aXN0aW5nIGJ1ZmZlciAqLwotICAgICAgICBmcmVlKHNlbGYtPmJ1ZmZlcik7CisgICAgICAgIFB5TWVtX0ZyZWUoc2VsZi0+YnVmZmVyKTsKICAgICAgIH0KLSAgICAgIHNlbGYtPmJ1ZmZlciA9IG1hbGxvYyhuZXdfYnVmZmVyX3NpemUpOworICAgICAgc2VsZi0+YnVmZmVyID0gUHlNZW1fTWFsbG9jKG5ld19idWZmZXJfc2l6ZSk7CiAgICAgICBpZiAoc2VsZi0+YnVmZmVyID09IE5VTEwpIHsKICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgcmV0dXJuIC0xOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9weXRob24uYyBiL01vZHVsZXMvcHl0aG9uLmMKaW5kZXggZjc4MWQ5YS4uOTgxMWMwMSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9weXRob24uYworKysgYi9Nb2R1bGVzL3B5dGhvbi5jCkBAIC0yMyw5ICsyMywxMiBAQAogICAgIHdjaGFyX3QgKiphcmd2X2NvcHkyOwogICAgIGludCBpLCByZXM7CiAgICAgY2hhciAqb2xkbG9jOworI2lmZGVmIF9fRnJlZUJTRF9fCisgICAgZnBfZXhjZXB0X3QgbTsKKyNlbmRpZgogCi0gICAgYXJndl9jb3B5ID0gKHdjaGFyX3QgKiopUHlNZW1fTWFsbG9jKHNpemVvZih3Y2hhcl90KikqKGFyZ2MrMSkpOwotICAgIGFyZ3ZfY29weTIgPSAod2NoYXJfdCAqKilQeU1lbV9NYWxsb2Moc2l6ZW9mKHdjaGFyX3QqKSooYXJnYysxKSk7CisgICAgYXJndl9jb3B5ID0gKHdjaGFyX3QgKiopUHlNZW1fUmF3TWFsbG9jKHNpemVvZih3Y2hhcl90KikgKiAoYXJnYysxKSk7CisgICAgYXJndl9jb3B5MiA9ICh3Y2hhcl90ICoqKVB5TWVtX1Jhd01hbGxvYyhzaXplb2Yod2NoYXJfdCopICogKGFyZ2MrMSkpOwogICAgIGlmICghYXJndl9jb3B5IHx8ICFhcmd2X2NvcHkyKSB7CiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAib3V0IG9mIG1lbW9yeVxuIik7CiAgICAgICAgIHJldHVybiAxOwpAQCAtMzcsMTcgKzQwLDIxIEBACiAgICAgICogZXhjZXB0aW9ucyBieSBkZWZhdWx0LiAgSGVyZSB3ZSBkaXNhYmxlIHRoZW0uCiAgICAgICovCiAjaWZkZWYgX19GcmVlQlNEX18KLSAgICBmcF9leGNlcHRfdCBtOwotCiAgICAgbSA9IGZwZ2V0bWFzaygpOwogICAgIGZwc2V0bWFzayhtICYgfkZQX1hfT0ZMKTsKICNlbmRpZgotICAgIG9sZGxvYyA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7CisKKyAgICBvbGRsb2MgPSBfUHlNZW1fUmF3U3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKyAgICBpZiAoIW9sZGxvYykgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIm91dCBvZiBtZW1vcnlcbiIpOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKICAgICBzZXRsb2NhbGUoTENfQUxMLCAiIik7CiAgICAgZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKykgewogICAgICAgICBhcmd2X2NvcHlbaV0gPSBfUHlfY2hhcjJ3Y2hhcihhcmd2W2ldLCBOVUxMKTsKICAgICAgICAgaWYgKCFhcmd2X2NvcHlbaV0pIHsKLSAgICAgICAgICAgIGZyZWUob2xkbG9jKTsKKyAgICAgICAgICAgIFB5TWVtX1Jhd0ZyZWUob2xkbG9jKTsKICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRmF0YWwgUHl0aG9uIGVycm9yOiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVuYWJsZSB0byBkZWNvZGUgdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudCAjJWlcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSArIDEpOwpAQCAtNTgsMTMgKzY1LDEzIEBACiAgICAgYXJndl9jb3B5MlthcmdjXSA9IGFyZ3ZfY29weVthcmdjXSA9IE5VTEw7CiAKICAgICBzZXRsb2NhbGUoTENfQUxMLCBvbGRsb2MpOwotICAgIGZyZWUob2xkbG9jKTsKKyAgICBQeU1lbV9SYXdGcmVlKG9sZGxvYyk7CiAgICAgcmVzID0gUHlfTWFpbihhcmdjLCBhcmd2X2NvcHkpOwogICAgIGZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyspIHsKLSAgICAgICAgUHlNZW1fRnJlZShhcmd2X2NvcHkyW2ldKTsKKyAgICAgICAgUHlNZW1fUmF3RnJlZShhcmd2X2NvcHkyW2ldKTsKICAgICB9Ci0gICAgUHlNZW1fRnJlZShhcmd2X2NvcHkpOwotICAgIFB5TWVtX0ZyZWUoYXJndl9jb3B5Mik7CisgICAgUHlNZW1fUmF3RnJlZShhcmd2X2NvcHkpOworICAgIFB5TWVtX1Jhd0ZyZWUoYXJndl9jb3B5Mik7CiAgICAgcmV0dXJuIHJlczsKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9yZWFkbGluZS5jIGIvTW9kdWxlcy9yZWFkbGluZS5jCmluZGV4IDhmYWM1MjYuLmU5ZWFiZjUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvcmVhZGxpbmUuYworKysgYi9Nb2R1bGVzL3JlYWRsaW5lLmMKQEAgLTYsNiArNiw3IEBACiAKIC8qIFN0YW5kYXJkIGRlZmluaXRpb25zICovCiAjaW5jbHVkZSAiUHl0aG9uLmgiCisjaW5jbHVkZSA8c3RkZGVmLmg+CiAjaW5jbHVkZSA8c2V0am1wLmg+CiAjaW5jbHVkZSA8c2lnbmFsLmg+CiAjaW5jbHVkZSA8ZXJybm8uaD4KQEAgLTc2LDYgKzc3LDU1IEBACiAgICAoc2VlIGlzc3VlICMxNzI4OSBmb3IgdGhlIG1vdGl2YXRpb24pLiAqLwogc3RhdGljIGNoYXIgKmNvbXBsZXRlcl93b3JkX2JyZWFrX2NoYXJhY3RlcnM7CiAKK3R5cGVkZWYgc3RydWN0IHsKKyAgUHlPYmplY3QgKmNvbXBsZXRpb25fZGlzcGxheV9tYXRjaGVzX2hvb2s7CisgIFB5T2JqZWN0ICpzdGFydHVwX2hvb2s7CisgIFB5T2JqZWN0ICpwcmVfaW5wdXRfaG9vazsKKyAgUHlPYmplY3QgKmNvbXBsZXRlcjsKKyAgUHlPYmplY3QgKmJlZ2lkeDsKKyAgUHlPYmplY3QgKmVuZGlkeDsKK30gcmVhZGxpbmVzdGF0ZTsKKworCisjZGVmaW5lIHJlYWRsaW5lX3N0YXRlKG8pICgocmVhZGxpbmVzdGF0ZSAqKVB5TW9kdWxlX0dldFN0YXRlKG8pKQorCitzdGF0aWMgaW50CityZWFkbGluZV9jbGVhcihQeU9iamVjdCAqbSkKK3sKKyAgIHJlYWRsaW5lc3RhdGUgKnN0YXRlID0gcmVhZGxpbmVfc3RhdGUobSk7CisgICBQeV9DTEVBUihzdGF0ZS0+Y29tcGxldGlvbl9kaXNwbGF5X21hdGNoZXNfaG9vayk7CisgICBQeV9DTEVBUihzdGF0ZS0+c3RhcnR1cF9ob29rKTsKKyAgIFB5X0NMRUFSKHN0YXRlLT5wcmVfaW5wdXRfaG9vayk7CisgICBQeV9DTEVBUihzdGF0ZS0+Y29tcGxldGVyKTsKKyAgIFB5X0NMRUFSKHN0YXRlLT5iZWdpZHgpOworICAgUHlfQ0xFQVIoc3RhdGUtPmVuZGlkeCk7CisgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorcmVhZGxpbmVfdHJhdmVyc2UoUHlPYmplY3QgKm0sIHZpc2l0cHJvYyB2aXNpdCwgdm9pZCAqYXJnKQoreworICAgIHJlYWRsaW5lc3RhdGUgKnN0YXRlID0gcmVhZGxpbmVfc3RhdGUobSk7CisgICAgUHlfVklTSVQoc3RhdGUtPmNvbXBsZXRpb25fZGlzcGxheV9tYXRjaGVzX2hvb2spOworICAgIFB5X1ZJU0lUKHN0YXRlLT5zdGFydHVwX2hvb2spOworICAgIFB5X1ZJU0lUKHN0YXRlLT5wcmVfaW5wdXRfaG9vayk7CisgICAgUHlfVklTSVQoc3RhdGUtPmNvbXBsZXRlcik7CisgICAgUHlfVklTSVQoc3RhdGUtPmJlZ2lkeCk7CisgICAgUHlfVklTSVQoc3RhdGUtPmVuZGlkeCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCityZWFkbGluZV9mcmVlKHZvaWQgKm0pCit7CisgICAgcmVhZGxpbmVfY2xlYXIoKFB5T2JqZWN0ICopbSk7Cit9CisKK3N0YXRpYyBQeU1vZHVsZURlZiByZWFkbGluZW1vZHVsZTsKKworI2RlZmluZSByZWFkbGluZXN0YXRlX2dsb2JhbCAoKHJlYWRsaW5lc3RhdGUgKilQeU1vZHVsZV9HZXRTdGF0ZShQeVN0YXRlX0ZpbmRNb2R1bGUoJnJlYWRsaW5lbW9kdWxlKSkpCisKKwogLyogRXhwb3J0ZWQgZnVuY3Rpb24gdG8gc2VuZCBvbmUgbGluZSB0byByZWFkbGluZSdzIGluaXQgZmlsZSBwYXJzZXIgKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTg2LDEyICsxMzYsMTIgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgLyogTWFrZSBhIGNvcHkgLS0gcmxfcGFyc2VfYW5kX2JpbmQoKSBtb2RpZmllcyBpdHMgYXJndW1lbnQgKi8KICAgICAvKiBCZXJuYXJkIEhlcnpvZyAqLwotICAgIGNvcHkgPSBtYWxsb2MoMSArIHN0cmxlbihzKSk7CisgICAgY29weSA9IFB5TWVtX01hbGxvYygxICsgc3RybGVuKHMpKTsKICAgICBpZiAoY29weSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKICAgICBzdHJjcHkoY29weSwgcyk7CiAgICAgcmxfcGFyc2VfYW5kX2JpbmQoY29weSk7Ci0gICAgZnJlZShjb3B5KTsgLyogRnJlZSB0aGUgY29weSAqLworICAgIFB5TWVtX0ZyZWUoY29weSk7IC8qIEZyZWUgdGhlIGNvcHkgKi8KICAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIApAQCAtMjUxLDIzICszMDEsMjEgQEAKIAogLyogRXhwb3J0ZWQgZnVuY3Rpb25zIHRvIHNwZWNpZnkgaG9vayBmdW5jdGlvbnMgaW4gUHl0aG9uICovCiAKLXN0YXRpYyBQeU9iamVjdCAqY29tcGxldGlvbl9kaXNwbGF5X21hdGNoZXNfaG9vayA9IE5VTEw7Ci1zdGF0aWMgUHlPYmplY3QgKnN0YXJ0dXBfaG9vayA9IE5VTEw7CiAKICNpZmRlZiBIQVZFX1JMX1BSRV9JTlBVVF9IT09LCi1zdGF0aWMgUHlPYmplY3QgKnByZV9pbnB1dF9ob29rID0gTlVMTDsKKwogI2VuZGlmCiAKIHN0YXRpYyBQeU9iamVjdCAqCiBzZXRfY29tcGxldGlvbl9kaXNwbGF5X21hdGNoZXNfaG9vayhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CiAgICAgUHlPYmplY3QgKnJlc3VsdCA9IHNldF9ob29rKCJjb21wbGV0aW9uX2Rpc3BsYXlfbWF0Y2hlc19ob29rIiwKLSAgICAgICAgICAgICAgICAgICAgJmNvbXBsZXRpb25fZGlzcGxheV9tYXRjaGVzX2hvb2ssIGFyZ3MpOworICAgICAgICAgICAgICAgICAgICAmcmVhZGxpbmVzdGF0ZV9nbG9iYWwtPmNvbXBsZXRpb25fZGlzcGxheV9tYXRjaGVzX2hvb2ssIGFyZ3MpOwogI2lmZGVmIEhBVkVfUkxfQ09NUExFVElPTl9ESVNQTEFZX01BVENIRVNfSE9PSwogICAgIC8qIFdlIGNhbm5vdCBzZXQgdGhpcyBob29rIGdsb2JhbGx5LCBzaW5jZSBpdCByZXBsYWNlcyB0aGUKICAgICAgICBkZWZhdWx0IGNvbXBsZXRpb24gZGlzcGxheS4gKi8KICAgICBybF9jb21wbGV0aW9uX2Rpc3BsYXlfbWF0Y2hlc19ob29rID0KLSAgICAgICAgY29tcGxldGlvbl9kaXNwbGF5X21hdGNoZXNfaG9vayA/CisgICAgICAgIHJlYWRsaW5lc3RhdGVfZ2xvYmFsLT5jb21wbGV0aW9uX2Rpc3BsYXlfbWF0Y2hlc19ob29rID8KICNpZiBkZWZpbmVkKF9STF9GVU5DVElPTl9UWVBFREVGKQogICAgICAgICAocmxfY29tcGRpc3BfZnVuY190ICopb25fY29tcGxldGlvbl9kaXNwbGF5X21hdGNoZXNfaG9vayA6IDA7CiAjZWxzZQpAQCAtMjg4LDcgKzMzNiw3IEBACiBzdGF0aWMgUHlPYmplY3QgKgogc2V0X3N0YXJ0dXBfaG9vayhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgcmV0dXJuIHNldF9ob29rKCJzdGFydHVwX2hvb2siLCAmc3RhcnR1cF9ob29rLCBhcmdzKTsKKyAgICByZXR1cm4gc2V0X2hvb2soInN0YXJ0dXBfaG9vayIsICZyZWFkbGluZXN0YXRlX2dsb2JhbC0+c3RhcnR1cF9ob29rLCBhcmdzKTsKIH0KIAogUHlEb2NfU1RSVkFSKGRvY19zZXRfc3RhcnR1cF9ob29rLApAQCAtMzA1LDcgKzM1Myw3IEBACiBzdGF0aWMgUHlPYmplY3QgKgogc2V0X3ByZV9pbnB1dF9ob29rKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICByZXR1cm4gc2V0X2hvb2soInByZV9pbnB1dF9ob29rIiwgJnByZV9pbnB1dF9ob29rLCBhcmdzKTsKKyAgICByZXR1cm4gc2V0X2hvb2soInByZV9pbnB1dF9ob29rIiwgJnJlYWRsaW5lc3RhdGVfZ2xvYmFsLT5wcmVfaW5wdXRfaG9vaywgYXJncyk7CiB9CiAKIFB5RG9jX1NUUlZBUihkb2Nfc2V0X3ByZV9pbnB1dF9ob29rLApAQCAtMzIwLDEwICszNjgsMTAgQEAKIAogLyogRXhwb3J0ZWQgZnVuY3Rpb24gdG8gc3BlY2lmeSBhIHdvcmQgY29tcGxldGVyIGluIFB5dGhvbiAqLwogCi1zdGF0aWMgUHlPYmplY3QgKmNvbXBsZXRlciA9IE5VTEw7CiAKLXN0YXRpYyBQeU9iamVjdCAqYmVnaWR4ID0gTlVMTDsKLXN0YXRpYyBQeU9iamVjdCAqZW5kaWR4ID0gTlVMTDsKKworCisKIAogCiAvKiBHZXQgdGhlIGNvbXBsZXRpb24gdHlwZSBmb3IgdGhlIHNjb3BlIG9mIHRoZSB0YWItY29tcGxldGlvbiAqLwpAQCAtMzQzLDggKzM5MSw4IEBACiBzdGF0aWMgUHlPYmplY3QgKgogZ2V0X2JlZ2lkeChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm5vYXJnKQogewotICAgIFB5X0lOQ1JFRihiZWdpZHgpOwotICAgIHJldHVybiBiZWdpZHg7CisgICAgUHlfSU5DUkVGKHJlYWRsaW5lc3RhdGVfZ2xvYmFsLT5iZWdpZHgpOworICAgIHJldHVybiByZWFkbGluZXN0YXRlX2dsb2JhbC0+YmVnaWR4OwogfQogCiBQeURvY19TVFJWQVIoZG9jX2dldF9iZWdpZHgsCkBAIC0zNTcsOCArNDA1LDggQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBnZXRfZW5kaWR4KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqbm9hcmcpCiB7Ci0gICAgUHlfSU5DUkVGKGVuZGlkeCk7Ci0gICAgcmV0dXJuIGVuZGlkeDsKKyAgICBQeV9JTkNSRUYocmVhZGxpbmVzdGF0ZV9nbG9iYWwtPmVuZGlkeCk7CisgICAgcmV0dXJuIHJlYWRsaW5lc3RhdGVfZ2xvYmFsLT5lbmRpZHg7CiB9CiAKIFB5RG9jX1NUUlZBUihkb2NfZ2V0X2VuZGlkeCwKQEAgLTM3OSwxMCArNDI3LDExIEBACiAgICAgLyogS2VlcCBhIHJlZmVyZW5jZSB0byB0aGUgYWxsb2NhdGVkIG1lbW9yeSBpbiB0aGUgbW9kdWxlIHN0YXRlIGluIGNhc2UKICAgICAgICBzb21lIG90aGVyIG1vZHVsZSBtb2RpZmllcyBybF9jb21wbGV0ZXJfd29yZF9icmVha19jaGFyYWN0ZXJzCiAgICAgICAgKHNlZSBpc3N1ZSAjMTcyODkpLiAqLwotICAgIGZyZWUoY29tcGxldGVyX3dvcmRfYnJlYWtfY2hhcmFjdGVycyk7Ci0gICAgY29tcGxldGVyX3dvcmRfYnJlYWtfY2hhcmFjdGVycyA9IHN0cmR1cChicmVha19jaGFycyk7Ci0gICAgaWYgKGNvbXBsZXRlcl93b3JkX2JyZWFrX2NoYXJhY3RlcnMpIHsKLSAgICAgICAgcmxfY29tcGxldGVyX3dvcmRfYnJlYWtfY2hhcmFjdGVycyA9IGNvbXBsZXRlcl93b3JkX2JyZWFrX2NoYXJhY3RlcnM7CisgICAgYnJlYWtfY2hhcnMgPSBzdHJkdXAoYnJlYWtfY2hhcnMpOworICAgIGlmIChicmVha19jaGFycykgeworICAgICAgICBmcmVlKGNvbXBsZXRlcl93b3JkX2JyZWFrX2NoYXJhY3RlcnMpOworICAgICAgICBjb21wbGV0ZXJfd29yZF9icmVha19jaGFyYWN0ZXJzID0gYnJlYWtfY2hhcnM7CisgICAgICAgIHJsX2NvbXBsZXRlcl93b3JkX2JyZWFrX2NoYXJhY3RlcnMgPSBicmVha19jaGFyczsKICAgICAgICAgUHlfUkVUVVJOX05PTkU7CiAgICAgfQogICAgIGVsc2UKQEAgLTUyMyw3ICs1NzIsNyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIHNldF9jb21wbGV0ZXIoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIHJldHVybiBzZXRfaG9vaygiY29tcGxldGVyIiwgJmNvbXBsZXRlciwgYXJncyk7CisgICAgcmV0dXJuIHNldF9ob29rKCJjb21wbGV0ZXIiLCAmcmVhZGxpbmVzdGF0ZV9nbG9iYWwtPmNvbXBsZXRlciwgYXJncyk7CiB9CiAKIFB5RG9jX1NUUlZBUihkb2Nfc2V0X2NvbXBsZXRlciwKQEAgLTUzNywxMSArNTg2LDExIEBACiBzdGF0aWMgUHlPYmplY3QgKgogZ2V0X2NvbXBsZXRlcihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm5vYXJncykKIHsKLSAgICBpZiAoY29tcGxldGVyID09IE5VTEwpIHsKKyAgICBpZiAocmVhZGxpbmVzdGF0ZV9nbG9iYWwtPmNvbXBsZXRlciA9PSBOVUxMKSB7CiAgICAgICAgIFB5X1JFVFVSTl9OT05FOwogICAgIH0KLSAgICBQeV9JTkNSRUYoY29tcGxldGVyKTsKLSAgICByZXR1cm4gY29tcGxldGVyOworICAgIFB5X0lOQ1JFRihyZWFkbGluZXN0YXRlX2dsb2JhbC0+Y29tcGxldGVyKTsKKyAgICByZXR1cm4gcmVhZGxpbmVzdGF0ZV9nbG9iYWwtPmNvbXBsZXRlcjsKIH0KIAogUHlEb2NfU1RSVkFSKGRvY19nZXRfY29tcGxldGVyLApAQCAtNzQ1LDkgKzc5NCw2IEBACiAgICAgaW50IHJlc3VsdCA9IDA7CiAgICAgaWYgKGZ1bmMgIT0gTlVMTCkgewogICAgICAgICBQeU9iamVjdCAqcjsKLSNpZmRlZiBXSVRIX1RIUkVBRAotICAgICAgICBQeUdJTFN0YXRlX1NUQVRFIGdpbHN0YXRlID0gUHlHSUxTdGF0ZV9FbnN1cmUoKTsKLSNlbmRpZgogICAgICAgICByID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGZ1bmMsIE5VTEwpOwogICAgICAgICBpZiAociA9PSBOVUxMKQogICAgICAgICAgICAgZ290byBlcnJvcjsKQEAgLTc2NCw5ICs4MTAsNiBAQAogICAgICAgICBQeUVycl9DbGVhcigpOwogICAgICAgICBQeV9YREVDUkVGKHIpOwogICAgICAgZG9uZToKLSNpZmRlZiBXSVRIX1RIUkVBRAotICAgICAgICBQeUdJTFN0YXRlX1JlbGVhc2UoZ2lsc3RhdGUpOwotI2VuZGlmCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7CkBAIC03NzksNyArODIyLDE1IEBACiBvbl9zdGFydHVwX2hvb2soKQogI2VuZGlmCiB7Ci0gICAgcmV0dXJuIG9uX2hvb2soc3RhcnR1cF9ob29rKTsKKyAgICBpbnQgcjsKKyNpZmRlZiBXSVRIX1RIUkVBRAorICAgIFB5R0lMU3RhdGVfU1RBVEUgZ2lsc3RhdGUgPSBQeUdJTFN0YXRlX0Vuc3VyZSgpOworI2VuZGlmCisgICAgciA9IG9uX2hvb2socmVhZGxpbmVzdGF0ZV9nbG9iYWwtPnN0YXJ0dXBfaG9vayk7CisjaWZkZWYgV0lUSF9USFJFQUQKKyAgICBQeUdJTFN0YXRlX1JlbGVhc2UoZ2lsc3RhdGUpOworI2VuZGlmCisgICAgcmV0dXJuIHI7CiB9CiAKICNpZmRlZiBIQVZFX1JMX1BSRV9JTlBVVF9IT09LCkBAIC03OTAsNyArODQxLDE1IEBACiBvbl9wcmVfaW5wdXRfaG9vaygpCiAjZW5kaWYKIHsKLSAgICByZXR1cm4gb25faG9vayhwcmVfaW5wdXRfaG9vayk7CisgICAgaW50IHI7CisjaWZkZWYgV0lUSF9USFJFQUQKKyAgICBQeUdJTFN0YXRlX1NUQVRFIGdpbHN0YXRlID0gUHlHSUxTdGF0ZV9FbnN1cmUoKTsKKyNlbmRpZgorICAgIHIgPSBvbl9ob29rKHJlYWRsaW5lc3RhdGVfZ2xvYmFsLT5wcmVfaW5wdXRfaG9vayk7CisjaWZkZWYgV0lUSF9USFJFQUQKKyAgICBQeUdJTFN0YXRlX1JlbGVhc2UoZ2lsc3RhdGUpOworI2VuZGlmCisgICAgcmV0dXJuIHI7CiB9CiAjZW5kaWYKIApAQCAtODE3LDcgKzg3Niw3IEBACiAgICAgICAgIGlmIChQeUxpc3RfU2V0SXRlbShtLCBpLCBzKSA9PSAtMSkKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQotICAgIHIgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oY29tcGxldGlvbl9kaXNwbGF5X21hdGNoZXNfaG9vaywKKyAgICByID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKHJlYWRsaW5lc3RhdGVfZ2xvYmFsLT5jb21wbGV0aW9uX2Rpc3BsYXlfbWF0Y2hlc19ob29rLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNPaSIsIG1hdGNoZXNbMF0sIG0sIG1heF9sZW5ndGgpOwogCiAgICAgUHlfREVDUkVGKG0pOyBtPU5VTEw7CkBAIC04NDcsMTMgKzkwNiwxMyBAQAogb25fY29tcGxldGlvbihjb25zdCBjaGFyICp0ZXh0LCBpbnQgc3RhdGUpCiB7CiAgICAgY2hhciAqcmVzdWx0ID0gTlVMTDsKLSAgICBpZiAoY29tcGxldGVyICE9IE5VTEwpIHsKKyAgICBpZiAocmVhZGxpbmVzdGF0ZV9nbG9iYWwtPmNvbXBsZXRlciAhPSBOVUxMKSB7CiAgICAgICAgIFB5T2JqZWN0ICpyOwogI2lmZGVmIFdJVEhfVEhSRUFECiAgICAgICAgIFB5R0lMU3RhdGVfU1RBVEUgZ2lsc3RhdGUgPSBQeUdJTFN0YXRlX0Vuc3VyZSgpOwogI2VuZGlmCiAgICAgICAgIHJsX2F0dGVtcHRlZF9jb21wbGV0aW9uX292ZXIgPSAxOwotICAgICAgICByID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGNvbXBsZXRlciwgInNpIiwgdGV4dCwgc3RhdGUpOworICAgICAgICByID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKHJlYWRsaW5lc3RhdGVfZ2xvYmFsLT5jb21wbGV0ZXIsICJzaSIsIHRleHQsIHN0YXRlKTsKICAgICAgICAgaWYgKHIgPT0gTlVMTCkKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgIGlmIChyID09IFB5X05vbmUpIHsKQEAgLTg4NiwyNCArOTQ1LDMyIEBACiBzdGF0aWMgY2hhciAqKgogZmxleF9jb21wbGV0ZShjb25zdCBjaGFyICp0ZXh0LCBpbnQgc3RhcnQsIGludCBlbmQpCiB7CisgICAgY2hhciAqKnJlc3VsdDsKKyNpZmRlZiBXSVRIX1RIUkVBRAorICAgIFB5R0lMU3RhdGVfU1RBVEUgZ2lsc3RhdGUgPSBQeUdJTFN0YXRlX0Vuc3VyZSgpOworI2VuZGlmCiAjaWZkZWYgSEFWRV9STF9DT01QTEVUSU9OX0FQUEVORF9DSEFSQUNURVIKICAgICBybF9jb21wbGV0aW9uX2FwcGVuZF9jaGFyYWN0ZXIgPSdcMCc7CiAjZW5kaWYKICNpZmRlZiBIQVZFX1JMX0NPTVBMRVRJT05fU1VQUFJFU1NfQVBQRU5ECiAgICAgcmxfY29tcGxldGlvbl9zdXBwcmVzc19hcHBlbmQgPSAwOwogI2VuZGlmCi0gICAgUHlfWERFQ1JFRihiZWdpZHgpOwotICAgIFB5X1hERUNSRUYoZW5kaWR4KTsKLSAgICBiZWdpZHggPSBQeUxvbmdfRnJvbUxvbmcoKGxvbmcpIHN0YXJ0KTsKLSAgICBlbmRpZHggPSBQeUxvbmdfRnJvbUxvbmcoKGxvbmcpIGVuZCk7Ci0gICAgcmV0dXJuIGNvbXBsZXRpb25fbWF0Y2hlcyh0ZXh0LCAqb25fY29tcGxldGlvbik7CisgICAgUHlfWERFQ1JFRihyZWFkbGluZXN0YXRlX2dsb2JhbC0+YmVnaWR4KTsKKyAgICBQeV9YREVDUkVGKHJlYWRsaW5lc3RhdGVfZ2xvYmFsLT5lbmRpZHgpOworICAgIHJlYWRsaW5lc3RhdGVfZ2xvYmFsLT5iZWdpZHggPSBQeUxvbmdfRnJvbUxvbmcoKGxvbmcpIHN0YXJ0KTsKKyAgICByZWFkbGluZXN0YXRlX2dsb2JhbC0+ZW5kaWR4ID0gUHlMb25nX0Zyb21Mb25nKChsb25nKSBlbmQpOworICAgIHJlc3VsdCA9IGNvbXBsZXRpb25fbWF0Y2hlcyh0ZXh0LCAqb25fY29tcGxldGlvbik7CisjaWZkZWYgV0lUSF9USFJFQUQKKyAgICBQeUdJTFN0YXRlX1JlbGVhc2UoZ2lsc3RhdGUpOworI2VuZGlmCisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCiAvKiBIZWxwZXIgdG8gaW5pdGlhbGl6ZSBHTlUgcmVhZGxpbmUgcHJvcGVybHkuICovCiAKIHN0YXRpYyB2b2lkCi1zZXR1cF9yZWFkbGluZSh2b2lkKQorc2V0dXBfcmVhZGxpbmUocmVhZGxpbmVzdGF0ZSAqbW9kX3N0YXRlKQogewogI2lmZGVmIFNBVkVfTE9DQUxFCiAgICAgY2hhciAqc2F2ZWRfbG9jYWxlID0gc3RyZHVwKHNldGxvY2FsZShMQ19DVFlQRSwgTlVMTCkpOwpAQCAtOTMzLDEwICsxMDAwLDYgQEAKICAgICB1c2luZ19oaXN0b3J5KCk7CiAKICAgICBybF9yZWFkbGluZV9uYW1lID0gInB5dGhvbiI7Ci0jaWYgZGVmaW5lZChQWU9TX09TMikgJiYgZGVmaW5lZChQWUNDX0dDQykKLSAgICAvKiBBbGxvdyAkaWYgdGVybT0gaW4gLmlucHV0cmMgdG8gd29yayAqLwotICAgIHJsX3Rlcm1pbmFsX25hbWUgPSBnZXRlbnYoIlRFUk0iKTsKLSNlbmRpZgogICAgIC8qIEZvcmNlIHJlYmluZCBvZiBUQUIgdG8gaW5zZXJ0LXRhYiAqLwogICAgIHJsX2JpbmRfa2V5KCdcdCcsIHJsX2luc2VydCk7CiAgICAgLyogQmluZCBib3RoIEVTQy1UQUIgYW5kIEVTQy1FU0MgdG8gdGhlIGNvbXBsZXRpb24gZnVuY3Rpb24gKi8KQEAgLTk1NSw4ICsxMDE4LDIzIEBACiAgICAgICAgIHN0cmR1cCgiIFx0XG5gfiFAIyQlXiYqKCktPStbe119XFx8OzonXCIsPD4vPyIpOwogICAgICAgICAvKiBBbGwgbm9uYWxwaGFudW1zIGV4Y2VwdCAnLicgKi8KIAotICAgIGJlZ2lkeCA9IFB5TG9uZ19Gcm9tTG9uZygwTCk7Ci0gICAgZW5kaWR4ID0gUHlMb25nX0Zyb21Mb25nKDBMKTsKKyAgICBtb2Rfc3RhdGUtPmJlZ2lkeCA9IFB5TG9uZ19Gcm9tTG9uZygwTCk7CisgICAgbW9kX3N0YXRlLT5lbmRpZHggPSBQeUxvbmdfRnJvbUxvbmcoMEwpOworCisjaWZuZGVmIF9fQVBQTEVfXworICAgIGlmICghaXNhdHR5KFNURE9VVF9GSUxFTk8pKSB7CisgICAgICAgIC8qIElzc3VlICMxOTg4NDogc3Rkb3V0IGlzIG5vIGEgdGVybWluYWwuIERpc2FibGUgbWV0YSBtb2RpZmllcgorICAgICAgICAgICBrZXlzIHRvIG5vdCB3cml0ZSB0aGUgQU5TSSBzZXF1ZW5jZSAiXDAzM1sxMDM0aCIgaW50byBzdGRvdXQuIE9uCisgICAgICAgICAgIHRlcm1pbmFscyBzdXBwb3J0aW5nIDggYml0IGNoYXJhY3RlcnMgbGlrZSBURVJNPXh0ZXJtLTI1NmNvbG9yCisgICAgICAgICAgICh3aGljaCBpcyBub3cgdGhlIGRlZmF1bHQgRmVkb3JhIHNpbmNlIEZlZG9yYSAxOCksIHRoZSBtZXRhIGtleSBpcworICAgICAgICAgICB1c2VkIHRvIGVuYWJsZSBzdXBwb3J0IG9mIDggYml0IGNoYXJhY3RlcnMgKEFOU0kgc2VxdWVuY2UKKyAgICAgICAgICAgIlwwMzNbMTAzNGgiKS4KKworICAgICAgICAgICBXaXRoIGxpYmVkaXQsIHRoaXMgY2FsbCBtYWtlcyByZWFkbGluZSgpIGNyYXNoLiAqLworICAgICAgICBybF92YXJpYWJsZV9iaW5kICgiZW5hYmxlLW1ldGEta2V5IiwgIm9mZiIpOworICAgIH0KKyNlbmRpZgorCiAgICAgLyogSW5pdGlhbGl6ZSAoYWxsb3dzIC5pbnB1dHJjIHRvIG92ZXJyaWRlKQogICAgICAqCiAgICAgICogWFhYOiBBIGJ1ZyBpbiB0aGUgcmVhZGxpbmUtMi4yIGxpYnJhcnkgY2F1c2VzIGEgbWVtb3J5IGxlYWsKQEAgLTk4NSwxMCArMTA2Myw4IEBACiAgICAgcmxfY2FsbGJhY2tfaGFuZGxlcl9yZW1vdmUoKTsKIH0KIAotZXh0ZXJuIFB5VGhyZWFkU3RhdGUqIF9QeU9TX1JlYWRsaW5lVFN0YXRlOwotCiBzdGF0aWMgY2hhciAqCi1yZWFkbGluZV91bnRpbF9lbnRlcl9vcl9zaWduYWwoY2hhciAqcHJvbXB0LCBpbnQgKnNpZ25hbCkKK3JlYWRsaW5lX3VudGlsX2VudGVyX29yX3NpZ25hbChjb25zdCBjaGFyICpwcm9tcHQsIGludCAqc2lnbmFsKQogewogICAgIGNoYXIgKiBub3RfZG9uZV9yZWFkaW5nID0gIiI7CiAgICAgZmRfc2V0IHNlbGVjdHNldDsKQEAgLTEwNjMsNyArMTEzOSw3IEBACiAKIAogc3RhdGljIGNoYXIgKgotcmVhZGxpbmVfdW50aWxfZW50ZXJfb3Jfc2lnbmFsKGNoYXIgKnByb21wdCwgaW50ICpzaWduYWwpCityZWFkbGluZV91bnRpbF9lbnRlcl9vcl9zaWduYWwoY29uc3QgY2hhciAqcHJvbXB0LCBpbnQgKnNpZ25hbCkKIHsKICAgICBQeU9TX3NpZ2hhbmRsZXJfdCBvbGRfaW50aGFuZGxlcjsKICAgICBjaGFyICpwOwpAQCAtMTA5MCw3ICsxMTY2LDcgQEAKIAogCiBzdGF0aWMgY2hhciAqCi1jYWxsX3JlYWRsaW5lKEZJTEUgKnN5c19zdGRpbiwgRklMRSAqc3lzX3N0ZG91dCwgY2hhciAqcHJvbXB0KQorY2FsbF9yZWFkbGluZShGSUxFICpzeXNfc3RkaW4sIEZJTEUgKnN5c19zdGRvdXQsIGNvbnN0IGNoYXIgKnByb21wdCkKIHsKICAgICBzaXplX3QgbjsKICAgICBjaGFyICpwLCAqcTsKQEAgLTExMTksOSArMTE5NSw5IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIC8qIFdlIGdvdCBhbiBFT0YsIHJldHVybiBhIGVtcHR5IHN0cmluZy4gKi8KKyAgICAvKiBXZSBnb3QgYW4gRU9GLCByZXR1cm4gYW4gZW1wdHkgc3RyaW5nLiAqLwogICAgIGlmIChwID09IE5VTEwpIHsKLSAgICAgICAgcCA9IFB5TWVtX01hbGxvYygxKTsKKyAgICAgICAgcCA9IFB5TWVtX1Jhd01hbGxvYygxKTsKICAgICAgICAgaWYgKHAgIT0gTlVMTCkKICAgICAgICAgICAgICpwID0gJ1wwJzsKICAgICAgICAgUkVTVE9SRV9MT0NBTEUoc2F2ZWRfbG9jYWxlKQpAQCAtMTE0OSw3ICsxMjI1LDcgQEAKICAgICAvKiBDb3B5IHRoZSBtYWxsb2MnZWQgYnVmZmVyIGludG8gYSBQeU1lbV9NYWxsb2MnZWQgb25lIGFuZAogICAgICAgIHJlbGVhc2UgdGhlIG9yaWdpbmFsLiAqLwogICAgIHEgPSBwOwotICAgIHAgPSBQeU1lbV9NYWxsb2MobisyKTsKKyAgICBwID0gUHlNZW1fUmF3TWFsbG9jKG4rMik7CiAgICAgaWYgKHAgIT0gTlVMTCkgewogICAgICAgICBzdHJuY3B5KHAsIHEsIG4pOwogICAgICAgICBwW25dID0gJ1xuJzsKQEAgLTExNzUsMTIgKzEyNTEsMTIgQEAKICAgICBQeU1vZHVsZURlZl9IRUFEX0lOSVQsCiAgICAgInJlYWRsaW5lIiwKICAgICBkb2NfbW9kdWxlLAotICAgIC0xLAorICAgIHNpemVvZihyZWFkbGluZXN0YXRlKSwKICAgICByZWFkbGluZV9tZXRob2RzLAogICAgIE5VTEwsCi0gICAgTlVMTCwKLSAgICBOVUxMLAotICAgIE5VTEwKKyAgICByZWFkbGluZV90cmF2ZXJzZSwKKyAgICByZWFkbGluZV9jbGVhciwKKyAgICByZWFkbGluZV9mcmVlCiB9OwogCiAKQEAgLTExODgsNiArMTI2NCw3IEBACiBQeUluaXRfcmVhZGxpbmUodm9pZCkKIHsKICAgICBQeU9iamVjdCAqbTsKKyAgICByZWFkbGluZXN0YXRlICptb2Rfc3RhdGU7CiAKICNpZmRlZiBfX0FQUExFX18KICAgICBpZiAoc3RybmNtcChybF9saWJyYXJ5X3ZlcnNpb24sIGxpYmVkaXRfdmVyc2lvbl90YWcsIHN0cmxlbihsaWJlZGl0X3ZlcnNpb25fdGFnKSkgPT0gMCkgewpAQCAtMTIwNCw3ICsxMjgxLDEyIEBACiAgICAgaWYgKG0gPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKKyAgICBtb2Rfc3RhdGUgPSAocmVhZGxpbmVzdGF0ZSAqKSBQeU1vZHVsZV9HZXRTdGF0ZShtKTsKICAgICBQeU9TX1JlYWRsaW5lRnVuY3Rpb25Qb2ludGVyID0gY2FsbF9yZWFkbGluZTsKLSAgICBzZXR1cF9yZWFkbGluZSgpOworICAgIHNldHVwX3JlYWRsaW5lKG1vZF9zdGF0ZSk7CisKKyAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiX1JFQURMSU5FX1ZFUlNJT04iLCBSTF9SRUFETElORV9WRVJTSU9OKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiX1JFQURMSU5FX1JVTlRJTUVfVkVSU0lPTiIsIHJsX3JlYWRsaW5lX3ZlcnNpb24pOworCiAgICAgcmV0dXJuIG07CiB9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3Jlc291cmNlLmMgYi9Nb2R1bGVzL3Jlc291cmNlLmMKaW5kZXggYjI5NGE4Yy4uM2ExY2YwOSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9yZXNvdXJjZS5jCisrKyBiL01vZHVsZXMvcmVzb3VyY2UuYwpAQCAtMTA2LDYgKzEwNiw0NCBAQAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK3N0YXRpYyBpbnQKK3B5MnJsaW1pdChQeU9iamVjdCAqY3Vyb2JqLCBQeU9iamVjdCAqbWF4b2JqLCBzdHJ1Y3QgcmxpbWl0ICpybF9vdXQpCit7CisjaWYgIWRlZmluZWQoSEFWRV9MQVJHRUZJTEVfU1VQUE9SVCkKKyAgICBybF9vdXQtPnJsaW1fY3VyID0gUHlMb25nX0FzTG9uZyhjdXJvYmopOworICAgIGlmIChybF9vdXQtPnJsaW1fY3VyID09IChybGltX3QpLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIHJsX291dC0+cmxpbV9tYXggPSBQeUxvbmdfQXNMb25nKG1heG9iaik7CisgICAgaWYgKHJsX291dC0+cmxpbV9tYXggPT0gKHJsaW1fdCktMSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICByZXR1cm4gLTE7CisjZWxzZQorICAgIC8qIFRoZSBsaW1pdHMgYXJlIHByb2JhYmx5IGJpZ2dlciB0aGFuIGEgbG9uZyAqLworICAgIHJsX291dC0+cmxpbV9jdXIgPSBQeUxvbmdfQXNMb25nTG9uZyhjdXJvYmopOworICAgIGlmIChybF9vdXQtPnJsaW1fY3VyID09IChybGltX3QpLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIHJsX291dC0+cmxpbV9tYXggPSBQeUxvbmdfQXNMb25nTG9uZyhtYXhvYmopOworICAgIGlmIChybF9vdXQtPnJsaW1fbWF4ID09IChybGltX3QpLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgcmV0dXJuIC0xOworI2VuZGlmCisKKyAgICBybF9vdXQtPnJsaW1fY3VyID0gcmxfb3V0LT5ybGltX2N1ciAmIFJMSU1fSU5GSU5JVFk7CisgICAgcmxfb3V0LT5ybGltX21heCA9IHJsX291dC0+cmxpbV9tYXggJiBSTElNX0lORklOSVRZOworICAgIHJldHVybiAwOworCit9CisKK3N0YXRpYyBQeU9iamVjdCoKK3JsaW1pdDJweShzdHJ1Y3QgcmxpbWl0IHJsKQoreworI2lmIGRlZmluZWQoSEFWRV9MT05HX0xPTkcpCisgICAgaWYgKHNpemVvZihybC5ybGltX2N1cikgPiBzaXplb2YobG9uZykpIHsKKyAgICAgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIkxMIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFBZX0xPTkdfTE9ORykgcmwucmxpbV9jdXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQWV9MT05HX0xPTkcpIHJsLnJsaW1fbWF4KTsKKyAgICB9CisjZW5kaWYKKyAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgibGwiLCAobG9uZykgcmwucmxpbV9jdXIsIChsb25nKSBybC5ybGltX21heCk7Cit9CiAKIHN0YXRpYyBQeU9iamVjdCAqCiByZXNvdXJjZV9nZXRybGltaXQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQpAQCAtMTI2LDE1ICsxNjQsNyBAQAogICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLQotI2lmIGRlZmluZWQoSEFWRV9MT05HX0xPTkcpCi0gICAgaWYgKHNpemVvZihybC5ybGltX2N1cikgPiBzaXplb2YobG9uZykpIHsKLSAgICAgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIkxMIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFBZX0xPTkdfTE9ORykgcmwucmxpbV9jdXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQWV9MT05HX0xPTkcpIHJsLnJsaW1fbWF4KTsKLSAgICB9Ci0jZW5kaWYKLSAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgibGwiLCAobG9uZykgcmwucmxpbV9jdXIsIChsb25nKSBybC5ybGltX21heCk7CisgICAgcmV0dXJuIHJsaW1pdDJweShybCk7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC0xNjYsMjUgKzE5NiwxMCBAQAogICAgIGN1cm9iaiA9IFB5VHVwbGVfR0VUX0lURU0obGltaXRzLCAwKTsKICAgICBtYXhvYmogPSBQeVR1cGxlX0dFVF9JVEVNKGxpbWl0cywgMSk7CiAKLSNpZiAhZGVmaW5lZChIQVZFX0xBUkdFRklMRV9TVVBQT1JUKQotICAgIHJsLnJsaW1fY3VyID0gUHlMb25nX0FzTG9uZyhjdXJvYmopOwotICAgIGlmIChybC5ybGltX2N1ciA9PSAocmxpbV90KS0xICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgaWYgKHB5MnJsaW1pdChjdXJvYmosIG1heG9iaiwgJnJsKSA8IDApIHsKICAgICAgICAgZ290byBlcnJvcjsKLSAgICBybC5ybGltX21heCA9IFB5TG9uZ19Bc0xvbmcobWF4b2JqKTsKLSAgICBpZiAocmwucmxpbV9tYXggPT0gKHJsaW1fdCktMSAmJiBQeUVycl9PY2N1cnJlZCgpKQotICAgICAgICBnb3RvIGVycm9yOwotI2Vsc2UKLSAgICAvKiBUaGUgbGltaXRzIGFyZSBwcm9iYWJseSBiaWdnZXIgdGhhbiBhIGxvbmcgKi8KLSAgICBybC5ybGltX2N1ciA9IFB5TG9uZ19Bc0xvbmdMb25nKGN1cm9iaik7Ci0gICAgaWYgKHJsLnJsaW1fY3VyID09IChybGltX3QpLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKLSAgICAgICAgZ290byBlcnJvcjsKLSAgICBybC5ybGltX21heCA9IFB5TG9uZ19Bc0xvbmdMb25nKG1heG9iaik7Ci0gICAgaWYgKHJsLnJsaW1fbWF4ID09IChybGltX3QpLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKLSAgICAgICAgZ290byBlcnJvcjsKLSNlbmRpZgorICAgIH0KIAotICAgIHJsLnJsaW1fY3VyID0gcmwucmxpbV9jdXIgJiBSTElNX0lORklOSVRZOwotICAgIHJsLnJsaW1fbWF4ID0gcmwucmxpbV9tYXggJiBSTElNX0lORklOSVRZOwogICAgIGlmIChzZXRybGltaXQocmVzb3VyY2UsICZybCkgPT0gLTEpIHsKICAgICAgICAgaWYgKGVycm5vID09IEVJTlZBTCkKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLApAQCAtMjA1LDYgKzIyMCw0OCBAQAogICAgIHJldHVybiBOVUxMOwogfQogCisjaWZkZWYgSEFWRV9QUkxJTUlUCitzdGF0aWMgUHlPYmplY3QgKgorcmVzb3VyY2VfcHJsaW1pdChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgc3RydWN0IHJsaW1pdCBvbGRfbGltaXQsIG5ld19saW1pdDsKKyAgICBpbnQgcmVzb3VyY2UsIHJldHZhbDsKKyAgICBwaWRfdCBwaWQ7CisgICAgUHlPYmplY3QgKmN1cm9iaj1OVUxMLCAqbWF4b2JqPU5VTEw7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgX1B5X1BBUlNFX1BJRCAiaXwoT08pOnBybGltaXQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAmcGlkLCAmcmVzb3VyY2UsICZjdXJvYmosICZtYXhvYmopKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChyZXNvdXJjZSA8IDAgfHwgcmVzb3VyY2UgPj0gUkxJTV9OTElNSVRTKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgImludmFsaWQgcmVzb3VyY2Ugc3BlY2lmaWVkIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGlmIChjdXJvYmogIT0gTlVMTCkgeworICAgICAgICBpZiAocHkycmxpbWl0KGN1cm9iaiwgbWF4b2JqLCAmbmV3X2xpbWl0KSA8IDApIHsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIHJldHZhbCA9IHBybGltaXQocGlkLCByZXNvdXJjZSwgJm5ld19saW1pdCwgJm9sZF9saW1pdCk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICByZXR2YWwgPSBwcmxpbWl0KHBpZCwgcmVzb3VyY2UsIE5VTEwsICZvbGRfbGltaXQpOworICAgIH0KKworICAgIGlmIChyZXR2YWwgPT0gLTEpIHsKKyAgICAgICAgaWYgKGVycm5vID09IEVJTlZBTCkgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImN1cnJlbnQgbGltaXQgZXhjZWVkcyBtYXhpbXVtIGxpbWl0Iik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJldHVybiBybGltaXQycHkob2xkX2xpbWl0KTsKK30KKyNlbmRpZiAvKiBIQVZFX1BSTElNSVQgKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKIHJlc291cmNlX2dldHBhZ2VzaXplKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqdW51c2VkKQogewpAQCAtMjI5LDYgKzI4Niw5IEBACiByZXNvdXJjZV9tZXRob2RzW10gPSB7CiAgICAgeyJnZXRydXNhZ2UiLCAgICByZXNvdXJjZV9nZXRydXNhZ2UsICAgTUVUSF9WQVJBUkdTfSwKICAgICB7ImdldHJsaW1pdCIsICAgIHJlc291cmNlX2dldHJsaW1pdCwgICBNRVRIX1ZBUkFSR1N9LAorI2lmZGVmIEhBVkVfUFJMSU1JVAorICAgIHsicHJsaW1pdCIsICAgICAgcmVzb3VyY2VfcHJsaW1pdCwgICAgIE1FVEhfVkFSQVJHU30sCisjZW5kaWYKICAgICB7InNldHJsaW1pdCIsICAgIHJlc291cmNlX3NldHJsaW1pdCwgICBNRVRIX1ZBUkFSR1N9LAogICAgIHsiZ2V0cGFnZXNpemUiLCAgcmVzb3VyY2VfZ2V0cGFnZXNpemUsIE1FVEhfTk9BUkdTfSwKICAgICB7TlVMTCwgTlVMTH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNlbnRpbmVsICovCkBAIC0yNjMsODAgKzMyMywxMTkgQEAKICAgICAvKiBBZGQgc29tZSBzeW1ib2xpYyBjb25zdGFudHMgdG8gdGhlIG1vZHVsZSAqLwogICAgIFB5X0lOQ1JFRihQeUV4Y19PU0Vycm9yKTsKICAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgImVycm9yIiwgUHlFeGNfT1NFcnJvcik7Ci0gICAgaWYgKCFpbml0aWFsaXplZCkKLSAgICAgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZSgmU3RydWN0UlVzYWdlVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3RydWN0X3J1c2FnZV9kZXNjKTsKKyAgICBpZiAoIWluaXRpYWxpemVkKSB7CisgICAgICAgIGlmIChQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlMigmU3RydWN0UlVzYWdlVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdHJ1Y3RfcnVzYWdlX2Rlc2MpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKwogICAgIFB5X0lOQ1JFRigmU3RydWN0UlVzYWdlVHlwZSk7CiAgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJzdHJ1Y3RfcnVzYWdlIiwKICAgICAgICAgICAgICAgICAgICAgICAgKFB5T2JqZWN0KikgJlN0cnVjdFJVc2FnZVR5cGUpOwogCiAgICAgLyogaW5zZXJ0IGNvbnN0YW50cyAqLwogI2lmZGVmIFJMSU1JVF9DUFUKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkxJTUlUX0NQVSIsIFJMSU1JVF9DUFUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJMSU1JVF9DUFUpOwogI2VuZGlmCiAKICNpZmRlZiBSTElNSVRfRlNJWkUKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkxJTUlUX0ZTSVpFIiwgUkxJTUlUX0ZTSVpFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSTElNSVRfRlNJWkUpOwogI2VuZGlmCiAKICNpZmRlZiBSTElNSVRfREFUQQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSTElNSVRfREFUQSIsIFJMSU1JVF9EQVRBKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSTElNSVRfREFUQSk7CiAjZW5kaWYKIAogI2lmZGVmIFJMSU1JVF9TVEFDSwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSTElNSVRfU1RBQ0siLCBSTElNSVRfU1RBQ0spOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJMSU1JVF9TVEFDSyk7CiAjZW5kaWYKIAogI2lmZGVmIFJMSU1JVF9DT1JFCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJMSU1JVF9DT1JFIiwgUkxJTUlUX0NPUkUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJMSU1JVF9DT1JFKTsKICNlbmRpZgogCiAjaWZkZWYgUkxJTUlUX05PRklMRQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSTElNSVRfTk9GSUxFIiwgUkxJTUlUX05PRklMRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkxJTUlUX05PRklMRSk7CiAjZW5kaWYKIAogI2lmZGVmIFJMSU1JVF9PRklMRQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSTElNSVRfT0ZJTEUiLCBSTElNSVRfT0ZJTEUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJMSU1JVF9PRklMRSk7CiAjZW5kaWYKIAogI2lmZGVmIFJMSU1JVF9WTUVNCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJMSU1JVF9WTUVNIiwgUkxJTUlUX1ZNRU0pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJMSU1JVF9WTUVNKTsKICNlbmRpZgogCiAjaWZkZWYgUkxJTUlUX0FTCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJMSU1JVF9BUyIsIFJMSU1JVF9BUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkxJTUlUX0FTKTsKICNlbmRpZgogCiAjaWZkZWYgUkxJTUlUX1JTUwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSTElNSVRfUlNTIiwgUkxJTUlUX1JTUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkxJTUlUX1JTUyk7CiAjZW5kaWYKIAogI2lmZGVmIFJMSU1JVF9OUFJPQwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSTElNSVRfTlBST0MiLCBSTElNSVRfTlBST0MpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJMSU1JVF9OUFJPQyk7CiAjZW5kaWYKIAogI2lmZGVmIFJMSU1JVF9NRU1MT0NLCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJMSU1JVF9NRU1MT0NLIiwgUkxJTUlUX01FTUxPQ0spOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJMSU1JVF9NRU1MT0NLKTsKICNlbmRpZgogCiAjaWZkZWYgUkxJTUlUX1NCU0laRQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSTElNSVRfU0JTSVpFIiwgUkxJTUlUX1NCU0laRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkxJTUlUX1NCU0laRSk7CiAjZW5kaWYKIAorLyogTGludXggc3BlY2lmaWMgKi8KKyNpZmRlZiBSTElNSVRfTVNHUVVFVUUKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSTElNSVRfTVNHUVVFVUUpOworI2VuZGlmCisKKyNpZmRlZiBSTElNSVRfTklDRQorICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJMSU1JVF9OSUNFKTsKKyNlbmRpZgorCisjaWZkZWYgUkxJTUlUX1JUUFJJTworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJMSU1JVF9SVFBSSU8pOworI2VuZGlmCisKKyNpZmRlZiBSTElNSVRfUlRUSU1FCisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkxJTUlUX1JUVElNRSk7CisjZW5kaWYKKworI2lmZGVmIFJMSU1JVF9TSUdQRU5ESU5HCisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkxJTUlUX1NJR1BFTkRJTkcpOworI2VuZGlmCisKKy8qIHRhcmdldCAqLwogI2lmZGVmIFJVU0FHRV9TRUxGCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJVU0FHRV9TRUxGIiwgUlVTQUdFX1NFTEYpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJVU0FHRV9TRUxGKTsKICNlbmRpZgogCiAjaWZkZWYgUlVTQUdFX0NISUxEUkVOCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJVU0FHRV9DSElMRFJFTiIsIFJVU0FHRV9DSElMRFJFTik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUlVTQUdFX0NISUxEUkVOKTsKICNlbmRpZgogCiAjaWZkZWYgUlVTQUdFX0JPVEgKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUlVTQUdFX0JPVEgiLCBSVVNBR0VfQk9USCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUlVTQUdFX0JPVEgpOwogI2VuZGlmCiAKICNpZmRlZiBSVVNBR0VfVEhSRUFECi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJVU0FHRV9USFJFQUQiLCBSVVNBR0VfVEhSRUFEKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSVVNBR0VfVEhSRUFEKTsKKyNlbmRpZgorCisvKiBGcmVlQlNEIHNwZWNpZmljICovCisKKyNpZmRlZiBSTElNSVRfU1dBUAorICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJMSU1JVF9TV0FQKTsKKyNlbmRpZgorCisjaWZkZWYgUkxJTUlUX1NCU0laRQorICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJMSU1JVF9TQlNJWkUpOworI2VuZGlmCisKKyNpZmRlZiBSTElNSVRfTlBUUworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJMSU1JVF9OUFRTKTsKICNlbmRpZgogCiAjaWYgZGVmaW5lZChIQVZFX0xPTkdfTE9ORykKZGlmZiAtLWdpdCBhL01vZHVsZXMvc2VsZWN0bW9kdWxlLmMgYi9Nb2R1bGVzL3NlbGVjdG1vZHVsZS5jCmluZGV4IDk1MmEwOTEuLjY1ZmI2YTQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvc2VsZWN0bW9kdWxlLmMKKysrIGIvTW9kdWxlcy9zZWxlY3Rtb2R1bGUuYwpAQCAtNDcsMTkgKzQ3LDExIEBACiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoUFlPU19PUzIpICYmICFkZWZpbmVkKFBZQ0NfR0NDKQotI2luY2x1ZGUgPHN5cy90aW1lLmg+Ci0jaW5jbHVkZSA8dXRpbHMuaD4KLSNlbmRpZgotCiAjaWZkZWYgTVNfV0lORE9XUwogIyAgZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4KICMgIGluY2x1ZGUgPHdpbnNvY2suaD4KICNlbHNlCiAjICBkZWZpbmUgU09DS0VUIGludAotIyAgaWYgZGVmaW5lZChfX1ZNUykKLSMgICAgaW5jbHVkZSA8c29ja2V0Lmg+Ci0jICBlbmRpZgogI2VuZGlmCiAKIC8qIGxpc3Qgb2YgUHl0aG9uIG9iamVjdHMgYW5kIHRoZWlyIGZpbGUgZGVzY3JpcHRvciAqLwpAQCAtMjIwLDEwICsyMTIsMTggQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIGVsc2UgewotI2lmZGVmIE1TX1dJTkRPV1MKKyAgICAgICAgLyogT24gT3BlbkJTRCA1LjQsIHRpbWV2YWwudHZfc2VjIGlzIGEgbG9uZy4KKyAgICAgICAgICogRXhhbXBsZTogbG9uZyBpcyA2NC1iaXQsIHdoZXJlYXMgdGltZV90IGlzIDMyLWJpdC4gKi8KICAgICAgICAgdGltZV90IHNlYzsKLSAgICAgICAgaWYgKF9QeVRpbWVfT2JqZWN0VG9UaW1ldmFsKHRvdXQsICZzZWMsICZ0di50dl91c2VjKSA9PSAtMSkKKyAgICAgICAgLyogT24gT1MgWCA2NC1iaXQsIHRpbWV2YWwudHZfdXNlYyBpcyBhbiBpbnQgKGFuZCB0aHVzIHN0aWxsIDQKKyAgICAgICAgICAgYnl0ZXMgYXMgcmVxdWlyZWQpLCBidXQgbm8gbG9uZ2VyIGRlZmluZWQgYnkgYSBsb25nLiAqLworICAgICAgICBsb25nIHVzZWM7CisgICAgICAgIGlmIChfUHlUaW1lX09iamVjdFRvVGltZXZhbCh0b3V0LCAmc2VjLCAmdXNlYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QeVRpbWVfUk9VTkRfVVApID09IC0xKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisjaWZkZWYgTVNfV0lORE9XUworICAgICAgICAvKiBPbiBXaW5kb3dzLCB0aW1ldmFsLnR2X3NlYyBpcyBhIGxvbmcgKDMyIGJpdCksCisgICAgICAgICAqIHdoZXJlYXMgdGltZV90IGNhbiBiZSA2NC1iaXQuICovCiAgICAgICAgIGFzc2VydChzaXplb2YodHYudHZfc2VjKSA9PSBzaXplb2YobG9uZykpOwogI2lmIFNJWkVPRl9USU1FX1QgPiBTSVpFT0ZfTE9ORwogICAgICAgICBpZiAoc2VjID4gTE9OR19NQVgpIHsKQEAgLTIzNCwxMyArMjM0LDEwIEBACiAjZW5kaWYKICAgICAgICAgdHYudHZfc2VjID0gKGxvbmcpc2VjOwogI2Vsc2UKLSAgICAgICAgLyogNjQtYml0IE9TIFggaGFzIHN0cnVjdCB0aW1ldmFsLnR2X3VzZWMgYXMgYW4gaW50IChhbmQgdGh1cyBzdGlsbCA0Ci0gICAgICAgICAgIGJ5dGVzIGFzIHJlcXVpcmVkKSwgYnV0IG5vIGxvbmdlciBkZWZpbmVkIGJ5IGEgbG9uZy4gKi8KLSAgICAgICAgbG9uZyB0dl91c2VjOwotICAgICAgICBpZiAoX1B5VGltZV9PYmplY3RUb1RpbWV2YWwodG91dCwgJnR2LnR2X3NlYywgJnR2X3VzZWMpID09IC0xKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIHR2LnR2X3VzZWMgPSB0dl91c2VjOworICAgICAgICBhc3NlcnQoc2l6ZW9mKHR2LnR2X3NlYykgPj0gc2l6ZW9mKHNlYykpOworICAgICAgICB0di50dl9zZWMgPSBzZWM7CiAjZW5kaWYKKyAgICAgICAgdHYudHZfdXNlYyA9IHVzZWM7CiAgICAgICAgIGlmICh0di50dl9zZWMgPCAwKSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgInRpbWVvdXQgbXVzdCBiZSBub24tbmVnYXRpdmUiKTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMzAzLDkgKzMwMCw5IEBACiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJldCA9IFB5VHVwbGVfUGFjaygzLCBpZmRsaXN0LCBvZmRsaXN0LCBlZmRsaXN0KTsKIAotICAgICAgICBQeV9ERUNSRUYoaWZkbGlzdCk7Ci0gICAgICAgIFB5X0RFQ1JFRihvZmRsaXN0KTsKLSAgICAgICAgUHlfREVDUkVGKGVmZGxpc3QpOworICAgICAgICBQeV9YREVDUkVGKGlmZGxpc3QpOworICAgICAgICBQeV9YREVDUkVGKG9mZGxpc3QpOworICAgICAgICBQeV9YREVDUkVGKGVmZGxpc3QpOwogICAgIH0KIAogICBmaW5hbGx5OgpAQCAtNzA1LDYgKzcwMiwxMyBAQAogCiBzdGF0aWMgUHlUeXBlT2JqZWN0IGRldnBvbGxfVHlwZTsKIAorc3RhdGljIFB5T2JqZWN0ICoKK2RldnBvbGxfZXJyX2Nsb3NlZCh2b2lkKQoreworICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiSS9PIG9wZXJhdGlvbiBvbiBjbG9zZWQgZGV2cG9sbCBvYmplY3QiKTsKKyAgICByZXR1cm4gTlVMTDsKK30KKwogc3RhdGljIGludCBkZXZwb2xsX2ZsdXNoKGRldnBvbGxPYmplY3QgKnNlbGYpCiB7CiAgICAgaW50IHNpemUsIG47CkBAIC03NDYsNiArNzUwLDkgQEAKICAgICBpbnQgZmQ7CiAgICAgdW5zaWduZWQgc2hvcnQgZXZlbnRzID0gUE9MTElOIHwgUE9MTFBSSSB8IFBPTExPVVQ7CiAKKyAgICBpZiAoc2VsZi0+ZmRfZGV2cG9sbCA8IDApCisgICAgICAgIHJldHVybiBkZXZwb2xsX2Vycl9jbG9zZWQoKTsKKwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiT3xPJjpyZWdpc3RlciIsICZvLCB1c2hvcnRfY29udmVydGVyLCAmZXZlbnRzKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTgwOSw2ICs4MTYsOSBAQAogewogICAgIGludCBmZDsKIAorICAgIGlmIChzZWxmLT5mZF9kZXZwb2xsIDwgMCkKKyAgICAgICAgcmV0dXJuIGRldnBvbGxfZXJyX2Nsb3NlZCgpOworCiAgICAgZmQgPSBQeU9iamVjdF9Bc0ZpbGVEZXNjcmlwdG9yKCBvICk7CiAgICAgaWYgKGZkID09IC0xKQogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTgzOCw2ICs4NDgsOSBAQAogICAgIGxvbmcgdGltZW91dDsKICAgICBQeU9iamVjdCAqdmFsdWUsICpudW0xLCAqbnVtMjsKIAorICAgIGlmIChzZWxmLT5mZF9kZXZwb2xsIDwgMCkKKyAgICAgICAgcmV0dXJuIGRldnBvbGxfZXJyX2Nsb3NlZCgpOworCiAgICAgaWYgKCFQeUFyZ19VbnBhY2tUdXBsZShhcmdzLCAicG9sbCIsIDAsIDEsICZ0b3V0KSkgewogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CkBAIC05MTYsNiArOTI5LDYwIEBACiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKK3N0YXRpYyBpbnQKK2RldnBvbGxfaW50ZXJuYWxfY2xvc2UoZGV2cG9sbE9iamVjdCAqc2VsZikKK3sKKyAgICBpbnQgc2F2ZV9lcnJubyA9IDA7CisgICAgaWYgKHNlbGYtPmZkX2RldnBvbGwgPj0gMCkgeworICAgICAgICBpbnQgZmQgPSBzZWxmLT5mZF9kZXZwb2xsOworICAgICAgICBzZWxmLT5mZF9kZXZwb2xsID0gLTE7CisgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICAgICAgaWYgKGNsb3NlKGZkKSA8IDApCisgICAgICAgICAgICBzYXZlX2Vycm5vID0gZXJybm87CisgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCisgICAgfQorICAgIHJldHVybiBzYXZlX2Vycm5vOworfQorCitzdGF0aWMgUHlPYmplY3QqCitkZXZwb2xsX2Nsb3NlKGRldnBvbGxPYmplY3QgKnNlbGYpCit7CisgICAgZXJybm8gPSBkZXZwb2xsX2ludGVybmFsX2Nsb3NlKHNlbGYpOworICAgIGlmIChlcnJubyA8IDApIHsKKyAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKK1B5RG9jX1NUUlZBUihkZXZwb2xsX2Nsb3NlX2RvYywKKyJjbG9zZSgpIC0+IE5vbmVcblwKK1xuXAorQ2xvc2UgdGhlIGRldnBvbGwgZmlsZSBkZXNjcmlwdG9yLiBGdXJ0aGVyIG9wZXJhdGlvbnMgb24gdGhlIGRldnBvbGxcblwKK29iamVjdCB3aWxsIHJhaXNlIGFuIGV4Y2VwdGlvbi4iKTsKKworc3RhdGljIFB5T2JqZWN0KgorZGV2cG9sbF9nZXRfY2xvc2VkKGRldnBvbGxPYmplY3QgKnNlbGYpCit7CisgICAgaWYgKHNlbGYtPmZkX2RldnBvbGwgPCAwKQorICAgICAgICBQeV9SRVRVUk5fVFJVRTsKKyAgICBlbHNlCisgICAgICAgIFB5X1JFVFVSTl9GQUxTRTsKK30KKworc3RhdGljIFB5T2JqZWN0KgorZGV2cG9sbF9maWxlbm8oZGV2cG9sbE9iamVjdCAqc2VsZikKK3sKKyAgICBpZiAoc2VsZi0+ZmRfZGV2cG9sbCA8IDApCisgICAgICAgIHJldHVybiBkZXZwb2xsX2Vycl9jbG9zZWQoKTsKKyAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKHNlbGYtPmZkX2RldnBvbGwpOworfQorCitQeURvY19TVFJWQVIoZGV2cG9sbF9maWxlbm9fZG9jLAorImZpbGVubygpIC0+IGludFxuXAorXG5cCitSZXR1cm4gdGhlIGZpbGUgZGVzY3JpcHRvci4iKTsKKwogc3RhdGljIFB5TWV0aG9kRGVmIGRldnBvbGxfbWV0aG9kc1tdID0gewogICAgIHsicmVnaXN0ZXIiLCAgICAgICAgKFB5Q0Z1bmN0aW9uKWRldnBvbGxfcmVnaXN0ZXIsCiAgICAgIE1FVEhfVkFSQVJHUywgIGRldnBvbGxfcmVnaXN0ZXJfZG9jfSwKQEAgLTkyNSw5ICs5OTIsMTkgQEAKICAgICAgTUVUSF9PLCAgICAgICAgZGV2cG9sbF91bnJlZ2lzdGVyX2RvY30sCiAgICAgeyJwb2xsIiwgICAgICAgICAgICAoUHlDRnVuY3Rpb24pZGV2cG9sbF9wb2xsLAogICAgICBNRVRIX1ZBUkFSR1MsICBkZXZwb2xsX3BvbGxfZG9jfSwKKyAgICB7ImNsb3NlIiwgICAgICAgICAgIChQeUNGdW5jdGlvbilkZXZwb2xsX2Nsb3NlLCAgICBNRVRIX05PQVJHUywKKyAgICAgZGV2cG9sbF9jbG9zZV9kb2N9LAorICAgIHsiZmlsZW5vIiwgICAgICAgICAgKFB5Q0Z1bmN0aW9uKWRldnBvbGxfZmlsZW5vLCAgICBNRVRIX05PQVJHUywKKyAgICAgZGV2cG9sbF9maWxlbm9fZG9jfSwKICAgICB7TlVMTCwgICAgICAgICAgICAgIE5VTEx9ICAgICAgICAgICAvKiBzZW50aW5lbCAqLwogfTsKIAorc3RhdGljIFB5R2V0U2V0RGVmIGRldnBvbGxfZ2V0c2V0bGlzdFtdID0geworICAgIHsiY2xvc2VkIiwgKGdldHRlcilkZXZwb2xsX2dldF9jbG9zZWQsIE5VTEwsCisgICAgICJUcnVlIGlmIHRoZSBkZXZwb2xsIG9iamVjdCBpcyBjbG9zZWQifSwKKyAgICB7MH0sCit9OworCiBzdGF0aWMgZGV2cG9sbE9iamVjdCAqCiBuZXdEZXZQb2xsT2JqZWN0KHZvaWQpCiB7CkBAIC05NDUsNyArMTAyMiw3IEBACiAgICAgKi8KICAgICBsaW1pdF9yZXN1bHQgPSBnZXRybGltaXQoUkxJTUlUX05PRklMRSwgJmxpbWl0KTsKICAgICBpZiAobGltaXRfcmVzdWx0ICE9IC0xKQotICAgICAgICBmZF9kZXZwb2xsID0gb3BlbigiL2Rldi9wb2xsIiwgT19SRFdSKTsKKyAgICAgICAgZmRfZGV2cG9sbCA9IF9QeV9vcGVuKCIvZGV2L3BvbGwiLCBPX1JEV1IpOwogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKICAgICBpZiAobGltaXRfcmVzdWx0ID09IC0xKSB7CkBAIC05ODEsMTIgKzEwNTgsOCBAQAogc3RhdGljIHZvaWQKIGRldnBvbGxfZGVhbGxvYyhkZXZwb2xsT2JqZWN0ICpzZWxmKQogewotICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICBjbG9zZShzZWxmLT5mZF9kZXZwb2xsKTsKLSAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotCisgICAgKHZvaWQpZGV2cG9sbF9pbnRlcm5hbF9jbG9zZShzZWxmKTsKICAgICBQeU1lbV9ERUwoc2VsZi0+ZmRzKTsKLQogICAgIFB5T2JqZWN0X0RlbChzZWxmKTsKIH0KIApAQCAtMTAyMiw2ICsxMDk1LDggQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9pdGVyKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9pdGVybmV4dCovCiAgICAgZGV2cG9sbF9tZXRob2RzLCAgICAgICAgICAgIC8qdHBfbWV0aG9kcyovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21lbWJlcnMgKi8KKyAgICBkZXZwb2xsX2dldHNldGxpc3QsICAgICAgICAgLyogdHBfZ2V0c2V0ICovCiB9OwogI2VuZGlmICAvKiBIQVZFX1NZU19ERVZQT0xMX0ggKi8KIApAQCAtMTEwNSw3ICsxMTgwLDcgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBweWVwb2xsX2Vycl9jbG9zZWQodm9pZCkKIHsKLSAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIkkvTyBvcGVyYXRpb24gb24gY2xvc2VkIGVwb2xsIGZkIik7CisgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJJL08gb3BlcmF0aW9uIG9uIGNsb3NlZCBlcG9sbCBvYmplY3QiKTsKICAgICByZXR1cm4gTlVMTDsKIH0KIApAQCAtMTEzNyw2ICsxMjEyLDcgQEAKICAgICBpZiAoZmQgPT0gLTEpIHsKICAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogI2lmZGVmIEhBVkVfRVBPTExfQ1JFQVRFMQorICAgICAgICBmbGFncyB8PSBFUE9MTF9DTE9FWEVDOwogICAgICAgICBpZiAoZmxhZ3MpCiAgICAgICAgICAgICBzZWxmLT5lcGZkID0gZXBvbGxfY3JlYXRlMShmbGFncyk7CiAgICAgICAgIGVsc2UKQEAgLTExNTIsNiArMTIyOCwxNCBAQAogICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KKworI2lmbmRlZiBIQVZFX0VQT0xMX0NSRUFURTEKKyAgICBpZiAoZmQgPT0gLTEgJiYgX1B5X3NldF9pbmhlcml0YWJsZShzZWxmLT5lcGZkLCAwLCBOVUxMKSA8IDApIHsKKyAgICAgICAgUHlfREVDUkVGKHNlbGYpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisjZW5kaWYKKwogICAgIHJldHVybiAoUHlPYmplY3QgKilzZWxmOwogfQogCkBAIC0xMjUxLDE2ICsxMzM1LDE2IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIHN3aXRjaChvcCkgewotICAgICAgICBjYXNlIEVQT0xMX0NUTF9BREQ6Ci0gICAgICAgIGNhc2UgRVBPTExfQ1RMX01PRDoKKyAgICBzd2l0Y2ggKG9wKSB7CisgICAgY2FzZSBFUE9MTF9DVExfQUREOgorICAgIGNhc2UgRVBPTExfQ1RMX01PRDoKICAgICAgICAgZXYuZXZlbnRzID0gZXZlbnRzOwogICAgICAgICBldi5kYXRhLmZkID0gZmQ7CiAgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICAgICAgcmVzdWx0ID0gZXBvbGxfY3RsKGVwZmQsIG9wLCBmZCwgJmV2KTsKICAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRVBPTExfQ1RMX0RFTDoKKyAgICBjYXNlIEVQT0xMX0NUTF9ERUw6CiAgICAgICAgIC8qIEluIGtlcm5lbCB2ZXJzaW9ucyBiZWZvcmUgMi42LjksIHRoZSBFUE9MTF9DVExfREVMCiAgICAgICAgICAqIG9wZXJhdGlvbiByZXF1aXJlZCBhIG5vbi1OVUxMIHBvaW50ZXIgaW4gZXZlbnQsIGV2ZW4KICAgICAgICAgICogdGhvdWdoIHRoaXMgYXJndW1lbnQgaXMgaWdub3JlZC4gKi8KQEAgLTEyNzMsNyArMTM1Nyw3IEBACiAgICAgICAgIH0KICAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6CisgICAgZGVmYXVsdDoKICAgICAgICAgcmVzdWx0ID0gLTE7CiAgICAgICAgIGVycm5vID0gRUlOVkFMOwogICAgIH0KQEAgLTEzNzgsNyArMTQ2Miw5IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgdGltZW91dCA9IChpbnQpKGR0aW1lb3V0ICogMTAwMC4wKTsKKyAgICAgICAgLyogZXBvbGxfd2FpdCgpIGhhcyBhIHJlc29sdXRpb24gb2YgMSBtaWxsaXNlY29uZCwgcm91bmQgYXdheSBmcm9tIHplcm8KKyAgICAgICAgICAgdG8gd2FpdCAqYXQgbGVhc3QqIGR0aW1lb3V0IHNlY29uZHMuICovCisgICAgICAgIHRpbWVvdXQgPSAoaW50KWNlaWwoZHRpbWVvdXQgKiAxMDAwLjApOwogICAgIH0KIAogICAgIGlmIChtYXhldmVudHMgPT0gLTEpIHsKQEAgLTEzOTMsNyArMTQ3OSw2IEBACiAKICAgICBldnMgPSBQeU1lbV9OZXcoc3RydWN0IGVwb2xsX2V2ZW50LCBtYXhldmVudHMpOwogICAgIGlmIChldnMgPT0gTlVMTCkgewotICAgICAgICBQeV9ERUNSRUYoc2VsZik7CiAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KQEAgLTE0MzIsNiArMTUxNywyNCBAQAogaW4gc2Vjb25kcyAoYXMgZmxvYXQpLiAtMSBtYWtlcyBwb2xsIHdhaXQgaW5kZWZpbml0ZWx5LlxuXAogVXAgdG8gbWF4ZXZlbnRzIGFyZSByZXR1cm5lZCB0byB0aGUgY2FsbGVyLiIpOwogCitzdGF0aWMgUHlPYmplY3QgKgorcHllcG9sbF9lbnRlcihweUVwb2xsX09iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgaWYgKHNlbGYtPmVwZmQgPCAwKQorICAgICAgICByZXR1cm4gcHllcG9sbF9lcnJfY2xvc2VkKCk7CisKKyAgICBQeV9JTkNSRUYoc2VsZik7CisgICAgcmV0dXJuIChQeU9iamVjdCAqKXNlbGY7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitweWVwb2xsX2V4aXQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIF9QeV9JREVOVElGSUVSKGNsb3NlKTsKKworICAgIHJldHVybiBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKHNlbGYsICZQeUlkX2Nsb3NlLCBOVUxMKTsKK30KKwogc3RhdGljIFB5TWV0aG9kRGVmIHB5ZXBvbGxfbWV0aG9kc1tdID0gewogICAgIHsiZnJvbWZkIiwgICAgICAgICAgKFB5Q0Z1bmN0aW9uKXB5ZXBvbGxfZnJvbWZkLAogICAgICBNRVRIX1ZBUkFSR1MgfCBNRVRIX0NMQVNTLCBweWVwb2xsX2Zyb21mZF9kb2N9LApAQCAtMTQ0Nyw2ICsxNTUwLDEwIEBACiAgICAgIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsICAgICAgcHllcG9sbF91bnJlZ2lzdGVyX2RvY30sCiAgICAgeyJwb2xsIiwgICAgICAgICAgICAoUHlDRnVuY3Rpb24pcHllcG9sbF9wb2xsLAogICAgICBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLCAgICAgIHB5ZXBvbGxfcG9sbF9kb2N9LAorICAgIHsiX19lbnRlcl9fIiwgICAgICAgICAgIChQeUNGdW5jdGlvbilweWVwb2xsX2VudGVyLCAgICAgTUVUSF9OT0FSR1MsCisgICAgIE5VTEx9LAorICAgIHsiX19leGl0X18iLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKXB5ZXBvbGxfZXhpdCwgICAgIE1FVEhfVkFSQVJHUywKKyAgICAgTlVMTH0sCiAgICAge05VTEwsICAgICAgTlVMTH0sCiB9OwogCkBAIC0xNjA0LDE3ICsxNzExLDE3IEBACiAgKiBrZXZlbnQgaXMgbm90IHN0YW5kYXJkIGFuZCBpdHMgbWVtYmVycyB2YXJ5IGFjcm9zcyBCU0RzLgogICovCiAjaWYgIWRlZmluZWQoX19PcGVuQlNEX18pCi0jICAgZGVmaW5lIElERU5UX1RZUEUJVF9VSU5UUFRSVAotIyAgIGRlZmluZSBJREVOVF9DQVNUCVB5X2ludHB0cl90Ci0jICAgZGVmaW5lIERBVEFfVFlQRQlUX0lOVFBUUlQKKyMgICBkZWZpbmUgSURFTlRfVFlQRSAgVF9VSU5UUFRSVAorIyAgIGRlZmluZSBJREVOVF9DQVNUICBQeV9pbnRwdHJfdAorIyAgIGRlZmluZSBEQVRBX1RZUEUgICBUX0lOVFBUUlQKICMgICBkZWZpbmUgREFUQV9GTVRfVU5JVCBJTlRQVFJUX0ZNVF9VTklUCi0jICAgZGVmaW5lIElERU5UX0FzVHlwZQlQeUxvbmdfQXNVaW50cHRyX3QKKyMgICBkZWZpbmUgSURFTlRfQXNUeXBlIFB5TG9uZ19Bc1VpbnRwdHJfdAogI2Vsc2UKLSMgICBkZWZpbmUgSURFTlRfVFlQRQlUX1VJTlQKLSMgICBkZWZpbmUgSURFTlRfQ0FTVAlpbnQKLSMgICBkZWZpbmUgREFUQV9UWVBFCVRfSU5UCisjICAgZGVmaW5lIElERU5UX1RZUEUgIFRfVUlOVAorIyAgIGRlZmluZSBJREVOVF9DQVNUICBpbnQKKyMgICBkZWZpbmUgREFUQV9UWVBFICAgVF9JTlQKICMgICBkZWZpbmUgREFUQV9GTVRfVU5JVCAiaSIKLSMgICBkZWZpbmUgSURFTlRfQXNUeXBlCVB5TG9uZ19Bc1Vuc2lnbmVkTG9uZworIyAgIGRlZmluZSBJREVOVF9Bc1R5cGUgUHlMb25nX0FzVW5zaWduZWRMb25nCiAjZW5kaWYKIAogLyogVW5mb3J0dW5hdGVseSwgd2UgY2FuJ3Qgc3RvcmUgcHl0aG9uIG9iamVjdHMgaW4gdWRhdGEsIGJlY2F1c2UKQEAgLTE2NjYsNyArMTc3Myw3IEBACiAKICAgICBpZiAoUHlMb25nX0NoZWNrKHBmZCkKICNpZiBJREVOVF9UWVBFID09IFRfVUlOVAotCSYmIFB5TG9uZ19Bc1Vuc2lnbmVkTG9uZyhwZmQpIDw9IFVJTlRfTUFYCisgICAgICAgICYmIFB5TG9uZ19Bc1Vuc2lnbmVkTG9uZyhwZmQpIDw9IFVJTlRfTUFYCiAjZW5kaWYKICAgICApIHsKICAgICAgICAgc2VsZi0+ZS5pZGVudCA9IElERU5UX0FzVHlwZShwZmQpOwpAQCAtMTcwOCwyMiArMTgxNSwyMiBAQAogICAgIH0KIAogICAgIHN3aXRjaCAob3ApIHsKLSAgICAgICAgY2FzZSBQeV9FUToKKyAgICBjYXNlIFB5X0VROgogICAgICAgICByZXN1bHQgPSAocmVzdWx0ID09IDApOwogICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBQeV9ORToKKyAgICBjYXNlIFB5X05FOgogICAgICAgICByZXN1bHQgPSAocmVzdWx0ICE9IDApOwogICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBQeV9MRToKKyAgICBjYXNlIFB5X0xFOgogICAgICAgICByZXN1bHQgPSAocmVzdWx0IDw9IDApOwogICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBQeV9HRToKKyAgICBjYXNlIFB5X0dFOgogICAgICAgICByZXN1bHQgPSAocmVzdWx0ID49IDApOwogICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBQeV9MVDoKKyAgICBjYXNlIFB5X0xUOgogICAgICAgICByZXN1bHQgPSAocmVzdWx0IDwgMCk7CiAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFB5X0dUOgorICAgIGNhc2UgUHlfR1Q6CiAgICAgICAgIHJlc3VsdCA9IChyZXN1bHQgPiAwKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMTc3NSw3ICsxODgyLDcgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBrcXVldWVfcXVldWVfZXJyX2Nsb3NlZCh2b2lkKQogewotICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiSS9PIG9wZXJhdGlvbiBvbiBjbG9zZWQga3F1ZXVlIGZkIik7CisgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJJL08gb3BlcmF0aW9uIG9uIGNsb3NlZCBrcXVldWUgb2JqZWN0Iik7CiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTE4MTcsMTMgKzE5MjQsMTkgQEAKICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CisKKyAgICBpZiAoZmQgPT0gLTEpIHsKKyAgICAgICAgaWYgKF9QeV9zZXRfaW5oZXJpdGFibGUoc2VsZi0+a3FmZCwgMCwgTlVMTCkgPCAwKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoc2VsZik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgIH0KICAgICByZXR1cm4gKFB5T2JqZWN0ICopc2VsZjsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKIGtxdWV1ZV9xdWV1ZV9uZXcoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCiB7Ci0KICAgICBpZiAoKGFyZ3MgIT0gTlVMTCAmJiBQeU9iamVjdF9TaXplKGFyZ3MpKSB8fAogICAgICAgICAgICAgICAgICAgICAoa3dkcyAhPSBOVUxMICYmIFB5T2JqZWN0X1NpemUoa3dkcykpKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLApAQCAtMTkyOSw4ICsyMDQyLDggQEAKICAgICAgICAgcHRpbWVvdXRzcGVjID0gTlVMTDsKICAgICB9CiAgICAgZWxzZSBpZiAoUHlOdW1iZXJfQ2hlY2sob3RpbWVvdXQpKSB7Ci0gICAgICAgIGlmIChfUHlUaW1lX09iamVjdFRvVGltZXNwZWMob3RpbWVvdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRpbWVvdXQudHZfc2VjLCAmdGltZW91dC50dl9uc2VjKSA9PSAtMSkKKyAgICAgICAgaWYgKF9QeVRpbWVfT2JqZWN0VG9UaW1lc3BlYyhvdGltZW91dCwgJnRpbWVvdXQudHZfc2VjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0aW1lb3V0LnR2X25zZWMsIF9QeVRpbWVfUk9VTkRfVVApID09IC0xKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICAgICAgaWYgKHRpbWVvdXQudHZfc2VjIDwgMCkgewpAQCAtMjE0Myw3ICsyMjU2LDcgQEAKIHRoYXQgYXJlIHJlYWR5LlxuXAogXG5cCiAqKiogSU1QT1JUQU5UIE5PVElDRSAqKipcblwKLU9uIFdpbmRvd3MgYW5kIE9wZW5WTVMsIG9ubHkgc29ja2V0cyBhcmUgc3VwcG9ydGVkOyBvbiBVbml4LCBhbGwgZmlsZVxuXAorT24gV2luZG93cywgb25seSBzb2NrZXRzIGFyZSBzdXBwb3J0ZWQ7IG9uIFVuaXgsIGFsbCBmaWxlXG5cCiBkZXNjcmlwdG9ycyBjYW4gYmUgdXNlZC4iKTsKIAogc3RhdGljIFB5TWV0aG9kRGVmIHNlbGVjdF9tZXRob2RzW10gPSB7CkBAIC0yMTYxLDcgKzIyNzQsNyBAQAogIlRoaXMgbW9kdWxlIHN1cHBvcnRzIGFzeW5jaHJvbm91cyBJL08gb24gbXVsdGlwbGUgZmlsZSBkZXNjcmlwdG9ycy5cblwKIFxuXAogKioqIElNUE9SVEFOVCBOT1RJQ0UgKioqXG5cCi1PbiBXaW5kb3dzIGFuZCBPcGVuVk1TLCBvbmx5IHNvY2tldHMgYXJlIHN1cHBvcnRlZDsgb24gVW5peCwgYWxsIGZpbGUgZGVzY3JpcHRvcnMuIik7CitPbiBXaW5kb3dzLCBvbmx5IHNvY2tldHMgYXJlIHN1cHBvcnRlZDsgb24gVW5peCwgYWxsIGZpbGUgZGVzY3JpcHRvcnMuIik7CiAKIAogc3RhdGljIHN0cnVjdCBQeU1vZHVsZURlZiBzZWxlY3Rtb2R1bGUgPSB7CkBAIC0yMTk1LDcgKzIzMDgsNyBAQAogI3VuZGVmIFBJUEVfQlVGCiAjZGVmaW5lIFBJUEVfQlVGIDUxMgogI2VuZGlmCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBJUEVfQlVGIiwgUElQRV9CVUYpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBJUEVfQlVGKTsKICNlbmRpZgogCiAjaWYgZGVmaW5lZChIQVZFX1BPTEwpICYmICFkZWZpbmVkKEhBVkVfQlJPS0VOX1BPTEwpCkBAIC0yMjEwLDI3ICsyMzIzLDI3IEBACiAjZW5kaWYKICAgICAgICAgaWYgKFB5VHlwZV9SZWFkeSgmcG9sbF9UeXBlKSA8IDApCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBPTExJTiIsIFBPTExJTik7Ci0gICAgICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQT0xMUFJJIiwgUE9MTFBSSSk7Ci0gICAgICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQT0xMT1VUIiwgUE9MTE9VVCk7Ci0gICAgICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQT0xMRVJSIiwgUE9MTEVSUik7Ci0gICAgICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQT0xMSFVQIiwgUE9MTEhVUCk7Ci0gICAgICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQT0xMTlZBTCIsIFBPTExOVkFMKTsKKyAgICAgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUE9MTElOKTsKKyAgICAgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUE9MTFBSSSk7CisgICAgICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBPTExPVVQpOworICAgICAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQT0xMRVJSKTsKKyAgICAgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUE9MTEhVUCk7CisgICAgICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBPTExOVkFMKTsKIAogI2lmZGVmIFBPTExSRE5PUk0KLSAgICAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBPTExSRE5PUk0iLCBQT0xMUkROT1JNKTsKKyAgICAgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUE9MTFJETk9STSk7CiAjZW5kaWYKICNpZmRlZiBQT0xMUkRCQU5ECi0gICAgICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQT0xMUkRCQU5EIiwgUE9MTFJEQkFORCk7CisgICAgICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBPTExSREJBTkQpOwogI2VuZGlmCiAjaWZkZWYgUE9MTFdSTk9STQotICAgICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUE9MTFdSTk9STSIsIFBPTExXUk5PUk0pOworICAgICAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQT0xMV1JOT1JNKTsKICNlbmRpZgogI2lmZGVmIFBPTExXUkJBTkQKLSAgICAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBPTExXUkJBTkQiLCBQT0xMV1JCQU5EKTsKKyAgICAgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUE9MTFdSQkFORCk7CiAjZW5kaWYKICNpZmRlZiBQT0xMTVNHCi0gICAgICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQT0xMTVNHIiwgUE9MTE1TRyk7CisgICAgICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBPTExNU0cpOwogI2VuZGlmCiAgICAgfQogI2VuZGlmIC8qIEhBVkVfUE9MTCAqLwpAQCAtMjI0OCwyNSArMjM2MSwzNiBAQAogICAgIFB5X0lOQ1JFRigmcHlFcG9sbF9UeXBlKTsKICAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgImVwb2xsIiwgKFB5T2JqZWN0ICopICZweUVwb2xsX1R5cGUpOwogCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkVQT0xMSU4iLCBFUE9MTElOKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRVBPTExPVVQiLCBFUE9MTE9VVCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkVQT0xMUFJJIiwgRVBPTExQUkkpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJFUE9MTEVSUiIsIEVQT0xMRVJSKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRVBPTExIVVAiLCBFUE9MTEhVUCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkVQT0xMRVQiLCBFUE9MTEVUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFUE9MTElOKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFUE9MTE9VVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRVBPTExQUkkpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVQT0xMRVJSKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFUE9MTEhVUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRVBPTExFVCk7CiAjaWZkZWYgRVBPTExPTkVTSE9UCiAgICAgLyogS2VybmVsIDIuNi4yKyAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJFUE9MTE9ORVNIT1QiLCBFUE9MTE9ORVNIT1QpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVQT0xMT05FU0hPVCk7CiAjZW5kaWYKICAgICAvKiBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRVBPTExfUkRIVVAiLCBFUE9MTFJESFVQKTsgKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRVBPTExSRE5PUk0iLCBFUE9MTFJETk9STSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkVQT0xMUkRCQU5EIiwgRVBPTExSREJBTkQpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJFUE9MTFdSTk9STSIsIEVQT0xMV1JOT1JNKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRVBPTExXUkJBTkQiLCBFUE9MTFdSQkFORCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkVQT0xMTVNHIiwgRVBPTExNU0cpOworCisjaWZkZWYgRVBPTExSRE5PUk0KKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFUE9MTFJETk9STSk7CisjZW5kaWYKKyNpZmRlZiBFUE9MTFJEQkFORAorICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVQT0xMUkRCQU5EKTsKKyNlbmRpZgorI2lmZGVmIEVQT0xMV1JOT1JNCisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRVBPTExXUk5PUk0pOworI2VuZGlmCisjaWZkZWYgRVBPTExXUkJBTkQKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFUE9MTFdSQkFORCk7CisjZW5kaWYKKyNpZmRlZiBFUE9MTE1TRworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVQT0xMTVNHKTsKKyNlbmRpZgogCiAjaWZkZWYgRVBPTExfQ0xPRVhFQwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJFUE9MTF9DTE9FWEVDIiwgRVBPTExfQ0xPRVhFQyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRVBPTExfQ0xPRVhFQyk7CiAjZW5kaWYKICNlbmRpZiAvKiBIQVZFX0VQT0xMICovCiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvc2hhMW1vZHVsZS5jIGIvTW9kdWxlcy9zaGExbW9kdWxlLmMKaW5kZXggZDBmMzE4ZC4uYjQ0ZmUxOCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9zaGExbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9zaGExbW9kdWxlLmMKQEAgLTkyLDEwICs5Miw2IEBACiAgICAgICh5KVs0XSA9ICh1bnNpZ25lZCBjaGFyKSgoKHgpPj4yNCkmMjU1KTsgKHkpWzVdID0gKHVuc2lnbmVkIGNoYXIpKCgoeCk+PjE2KSYyNTUpOyAgICAgXAogICAgICAoeSlbNl0gPSAodW5zaWduZWQgY2hhcikoKCh4KT4+OCkmMjU1KTsgKHkpWzddID0gKHVuc2lnbmVkIGNoYXIpKCh4KSYyNTUpOyB9CiAKLSNpZm5kZWYgTUlOCi0gICAjZGVmaW5lIE1JTih4LCB5KSAoICgoeCk8KHkpKT8oeCk6KHkpICkKLSNlbmRpZgotCiAKIC8qIFNIQTEgbWFjcm9zICovCiAKQEAgLTIyMCw5ICsyMTYsOSBAQAogICAgICAgICAgICBpbiAgICAgICAgICAgICArPSBTSEExX0JMT0NLU0laRTsKICAgICAgICAgICAgaW5sZW4gICAgICAgICAgLT0gU0hBMV9CTE9DS1NJWkU7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgIG4gPSBNSU4oaW5sZW4sIChQeV9zc2l6ZV90KShTSEExX0JMT0NLU0laRSAtIHNoYTEtPmN1cmxlbikpOworICAgICAgICAgICBuID0gUHlfTUlOKGlubGVuLCAoUHlfc3NpemVfdCkoU0hBMV9CTE9DS1NJWkUgLSBzaGExLT5jdXJsZW4pKTsKICAgICAgICAgICAgbWVtY3B5KHNoYTEtPmJ1ZiArIHNoYTEtPmN1cmxlbiwgaW4sIChzaXplX3Qpbik7Ci0gICAgICAgICAgIHNoYTEtPmN1cmxlbiAgICs9IG47CisgICAgICAgICAgIHNoYTEtPmN1cmxlbiAgICs9IChTSEExX0lOVDMyKW47CiAgICAgICAgICAgIGluICAgICAgICAgICAgICs9IG47CiAgICAgICAgICAgIGlubGVuICAgICAgICAgIC09IG47CiAgICAgICAgICAgIGlmIChzaGExLT5jdXJsZW4gPT0gU0hBMV9CTE9DS1NJWkUpIHsKQEAgLTQxNSw3ICs0MTEsNyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIFNIQTFfZ2V0X25hbWUoUHlPYmplY3QgKnNlbGYsIHZvaWQgKmNsb3N1cmUpCiB7Ci0gICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nQW5kU2l6ZSgiU0hBMSIsIDQpOworICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZ0FuZFNpemUoInNoYTEiLCA0KTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTU0OCw4ICs1NDQsMTcgQEAKIFB5TU9ESU5JVF9GVU5DCiBQeUluaXRfX3NoYTEodm9pZCkKIHsKKyAgICBQeU9iamVjdCAqbTsKKwogICAgIFB5X1RZUEUoJlNIQTF0eXBlKSA9ICZQeVR5cGVfVHlwZTsKICAgICBpZiAoUHlUeXBlX1JlYWR5KCZTSEExdHlwZSkgPCAwKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICByZXR1cm4gUHlNb2R1bGVfQ3JlYXRlKCZfc2hhMW1vZHVsZSk7CisKKyAgICBtID0gUHlNb2R1bGVfQ3JlYXRlKCZfc2hhMW1vZHVsZSk7CisgICAgaWYgKG0gPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBQeV9JTkNSRUYoKFB5T2JqZWN0ICopJlNIQTF0eXBlKTsKKyAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgIlNIQTFUeXBlIiwgKFB5T2JqZWN0ICopJlNIQTF0eXBlKTsKKyAgICByZXR1cm4gbTsKIH0KZGlmZiAtLWdpdCBhL01vZHVsZXMvc2hhMjU2bW9kdWxlLmMgYi9Nb2R1bGVzL3NoYTI1Nm1vZHVsZS5jCmluZGV4IDlmNmI0MTYuLmIwNWJmYzEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvc2hhMjU2bW9kdWxlLmMKKysrIGIvTW9kdWxlcy9zaGEyNTZtb2R1bGUuYwpAQCAtMjEsMTMgKzIxLDYgQEAKICNpbmNsdWRlICJoYXNobGliLmgiCiAKIAotLyogRW5kaWFubmVzcyB0ZXN0aW5nIGFuZCBkZWZpbml0aW9ucyAqLwotI2RlZmluZSBUZXN0RW5kaWFubmVzcyh2YXJpYWJsZSkge2ludCBpPTE7IHZhcmlhYmxlPVBDVF9CSUdfRU5ESUFOO1wKLSAgICAgICAgaWYgKCooKGNoYXIqKSZpKT09MSkgdmFyaWFibGU9UENUX0xJVFRMRV9FTkRJQU47fQotCi0jZGVmaW5lIFBDVF9MSVRUTEVfRU5ESUFOIDEKLSNkZWZpbmUgUENUX0JJR19FTkRJQU4gMAotCiAvKiBTb21lIHVzZWZ1bCB0eXBlcyAqLwogCiB0eXBlZGVmIHVuc2lnbmVkIGNoYXIgU0hBX0JZVEU7CkBAIC01MCw3ICs0Myw2IEBACiAgICAgU0hBX0lOVDMyIGRpZ2VzdFs4XTsgICAgICAgICAgICAgICAgLyogTWVzc2FnZSBkaWdlc3QgKi8KICAgICBTSEFfSU5UMzIgY291bnRfbG8sIGNvdW50X2hpOyAgICAgICAvKiA2NC1iaXQgYml0IGNvdW50ICovCiAgICAgU0hBX0JZVEUgZGF0YVtTSEFfQkxPQ0tTSVpFXTsgICAgICAgLyogU0hBIGRhdGEgYnVmZmVyICovCi0gICAgaW50IEVuZGlhbm5lc3M7CiAgICAgaW50IGxvY2FsOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdW5wcm9jZXNzZWQgYW1vdW50IGluIGRhdGEgKi8KICAgICBpbnQgZGlnZXN0c2l6ZTsKIH0gU0hBb2JqZWN0OwpAQCAtNTgsMTMgKzUwLDExIEBACiAvKiBXaGVuIHJ1biBvbiBhIGxpdHRsZS1lbmRpYW4gQ1BVIHdlIG5lZWQgdG8gcGVyZm9ybSBieXRlIHJldmVyc2FsIG9uIGFuCiAgICBhcnJheSBvZiBsb25nd29yZHMuICovCiAKLXN0YXRpYyB2b2lkIGxvbmdSZXZlcnNlKFNIQV9JTlQzMiAqYnVmZmVyLCBpbnQgYnl0ZUNvdW50LCBpbnQgRW5kaWFubmVzcykKKyNpZiBQWV9MSVRUTEVfRU5ESUFOCitzdGF0aWMgdm9pZCBsb25nUmV2ZXJzZShTSEFfSU5UMzIgKmJ1ZmZlciwgaW50IGJ5dGVDb3VudCkKIHsKICAgICBTSEFfSU5UMzIgdmFsdWU7CiAKLSAgICBpZiAoIEVuZGlhbm5lc3MgPT0gUENUX0JJR19FTkRJQU4gKQotICAgICAgICByZXR1cm47Ci0KICAgICBieXRlQ291bnQgLz0gc2l6ZW9mKCpidWZmZXIpOwogICAgIHdoaWxlIChieXRlQ291bnQtLSkgewogICAgICAgICB2YWx1ZSA9ICpidWZmZXI7CkBAIC03MywxMCArNjMsMTAgQEAKICAgICAgICAgKmJ1ZmZlcisrID0gKCB2YWx1ZSA8PCAxNiApIHwgKCB2YWx1ZSA+PiAxNiApOwogICAgIH0KIH0KKyNlbmRpZgogCiBzdGF0aWMgdm9pZCBTSEFjb3B5KFNIQW9iamVjdCAqc3JjLCBTSEFvYmplY3QgKmRlc3QpCiB7Ci0gICAgZGVzdC0+RW5kaWFubmVzcyA9IHNyYy0+RW5kaWFubmVzczsKICAgICBkZXN0LT5sb2NhbCA9IHNyYy0+bG9jYWw7CiAgICAgZGVzdC0+ZGlnZXN0c2l6ZSA9IHNyYy0+ZGlnZXN0c2l6ZTsKICAgICBkZXN0LT5jb3VudF9sbyA9IHNyYy0+Y291bnRfbG87CkBAIC0xMzEsNyArMTIxLDkgQEAKICAgICAgICAgU0hBX0lOVDMyIFNbOF0sIFdbNjRdLCB0MCwgdDE7CiAKICAgICBtZW1jcHkoVywgc2hhX2luZm8tPmRhdGEsIHNpemVvZihzaGFfaW5mby0+ZGF0YSkpOwotICAgIGxvbmdSZXZlcnNlKFcsIChpbnQpc2l6ZW9mKHNoYV9pbmZvLT5kYXRhKSwgc2hhX2luZm8tPkVuZGlhbm5lc3MpOworI2lmIFBZX0xJVFRMRV9FTkRJQU4KKyAgICBsb25nUmV2ZXJzZShXLCAoaW50KXNpemVvZihzaGFfaW5mby0+ZGF0YSkpOworI2VuZGlmCiAKICAgICBmb3IgKGkgPSAxNjsgaSA8IDY0OyArK2kpIHsKICAgICAgICAgICAgICAgICBXW2ldID0gR2FtbWExKFdbaSAtIDJdKSArIFdbaSAtIDddICsgR2FtbWEwKFdbaSAtIDE1XSkgKyBXW2kgLSAxNl07CkBAIC0yMjgsNyArMjIwLDYgQEAKIHN0YXRpYyB2b2lkCiBzaGFfaW5pdChTSEFvYmplY3QgKnNoYV9pbmZvKQogewotICAgIFRlc3RFbmRpYW5uZXNzKHNoYV9pbmZvLT5FbmRpYW5uZXNzKQogICAgIHNoYV9pbmZvLT5kaWdlc3RbMF0gPSAweDZBMDlFNjY3TDsKICAgICBzaGFfaW5mby0+ZGlnZXN0WzFdID0gMHhCQjY3QUU4NUw7CiAgICAgc2hhX2luZm8tPmRpZ2VzdFsyXSA9IDB4M0M2RUYzNzJMOwpAQCAtMjQ2LDcgKzIzNyw2IEBACiBzdGF0aWMgdm9pZAogc2hhMjI0X2luaXQoU0hBb2JqZWN0ICpzaGFfaW5mbykKIHsKLSAgICBUZXN0RW5kaWFubmVzcyhzaGFfaW5mby0+RW5kaWFubmVzcykKICAgICBzaGFfaW5mby0+ZGlnZXN0WzBdID0gMHhjMTA1OWVkOEw7CiAgICAgc2hhX2luZm8tPmRpZ2VzdFsxXSA9IDB4MzY3Y2Q1MDdMOwogICAgIHNoYV9pbmZvLT5kaWdlc3RbMl0gPSAweDMwNzBkZDE3TDsKQEAgLTI4NCw3ICsyNzQsNyBAQAogICAgICAgICBtZW1jcHkoKChTSEFfQllURSAqKSBzaGFfaW5mby0+ZGF0YSkgKyBzaGFfaW5mby0+bG9jYWwsIGJ1ZmZlciwgaSk7CiAgICAgICAgIGNvdW50IC09IGk7CiAgICAgICAgIGJ1ZmZlciArPSBpOwotICAgICAgICBzaGFfaW5mby0+bG9jYWwgKz0gaTsKKyAgICAgICAgc2hhX2luZm8tPmxvY2FsICs9IChpbnQpaTsKICAgICAgICAgaWYgKHNoYV9pbmZvLT5sb2NhbCA9PSBTSEFfQkxPQ0tTSVpFKSB7CiAgICAgICAgICAgICBzaGFfdHJhbnNmb3JtKHNoYV9pbmZvKTsKICAgICAgICAgfQpAQCAtMjk5LDcgKzI4OSw3IEBACiAgICAgICAgIHNoYV90cmFuc2Zvcm0oc2hhX2luZm8pOwogICAgIH0KICAgICBtZW1jcHkoc2hhX2luZm8tPmRhdGEsIGJ1ZmZlciwgY291bnQpOwotICAgIHNoYV9pbmZvLT5sb2NhbCA9IGNvdW50OworICAgIHNoYV9pbmZvLT5sb2NhbCA9IChpbnQpY291bnQ7CiB9CiAKIC8qIGZpbmlzaCBjb21wdXRpbmcgdGhlIFNIQSBkaWdlc3QgKi8KQEAgLTUxMSw5ICs1MDEsOSBAQAogU0hBMjU2X2dldF9uYW1lKFB5T2JqZWN0ICpzZWxmLCB2b2lkICpjbG9zdXJlKQogewogICAgIGlmICgoKFNIQW9iamVjdCAqKXNlbGYpLT5kaWdlc3RzaXplID09IDMyKQotICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmdBbmRTaXplKCJTSEEyNTYiLCA2KTsKKyAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nQW5kU2l6ZSgic2hhMjU2IiwgNik7CiAgICAgZWxzZQotICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmdBbmRTaXplKCJTSEEyMjQiLCA2KTsKKyAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nQW5kU2l6ZSgic2hhMjI0IiwgNik7CiB9CiAKIHN0YXRpYyBQeUdldFNldERlZiBTSEFfZ2V0c2V0ZXJzW10gPSB7CkBAIC03MTYsMTEgKzcwNiwyMyBAQAogUHlNT0RJTklUX0ZVTkMKIFB5SW5pdF9fc2hhMjU2KHZvaWQpCiB7CisgICAgUHlPYmplY3QgKm07CisKICAgICBQeV9UWVBFKCZTSEEyMjR0eXBlKSA9ICZQeVR5cGVfVHlwZTsKICAgICBpZiAoUHlUeXBlX1JlYWR5KCZTSEEyMjR0eXBlKSA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIFB5X1RZUEUoJlNIQTI1NnR5cGUpID0gJlB5VHlwZV9UeXBlOwogICAgIGlmIChQeVR5cGVfUmVhZHkoJlNIQTI1NnR5cGUpIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgcmV0dXJuIFB5TW9kdWxlX0NyZWF0ZSgmX3NoYTI1Nm1vZHVsZSk7CisKKyAgICBtID0gUHlNb2R1bGVfQ3JlYXRlKCZfc2hhMjU2bW9kdWxlKTsKKyAgICBpZiAobSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIFB5X0lOQ1JFRigoUHlPYmplY3QgKikmU0hBMjI0dHlwZSk7CisgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJTSEEyMjRUeXBlIiwgKFB5T2JqZWN0ICopJlNIQTIyNHR5cGUpOworICAgIFB5X0lOQ1JFRigoUHlPYmplY3QgKikmU0hBMjU2dHlwZSk7CisgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJTSEEyNTZUeXBlIiwgKFB5T2JqZWN0ICopJlNIQTI1NnR5cGUpOworICAgIHJldHVybiBtOworCiB9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3NoYTUxMm1vZHVsZS5jIGIvTW9kdWxlcy9zaGE1MTJtb2R1bGUuYwppbmRleCA1NTM2ZmQ1Li40N2M1N2U1IDEwMDY0NAotLS0gYS9Nb2R1bGVzL3NoYTUxMm1vZHVsZS5jCisrKyBiL01vZHVsZXMvc2hhNTEybW9kdWxlLmMKQEAgLTIyLDEzICsyMiw2IEBACiAKICNpZmRlZiBQWV9MT05HX0xPTkcgLyogSWYgbm8gUFlfTE9OR19MT05HLCBkb24ndCBjb21waWxlIGFueXRoaW5nISAqLwogCi0vKiBFbmRpYW5uZXNzIHRlc3RpbmcgYW5kIGRlZmluaXRpb25zICovCi0jZGVmaW5lIFRlc3RFbmRpYW5uZXNzKHZhcmlhYmxlKSB7aW50IGk9MTsgdmFyaWFibGU9UENUX0JJR19FTkRJQU47XAotICAgICAgICBpZiAoKigoY2hhciopJmkpPT0xKSB2YXJpYWJsZT1QQ1RfTElUVExFX0VORElBTjt9Ci0KLSNkZWZpbmUgUENUX0xJVFRMRV9FTkRJQU4gMQotI2RlZmluZSBQQ1RfQklHX0VORElBTiAwCi0KIC8qIFNvbWUgdXNlZnVsIHR5cGVzICovCiAKIHR5cGVkZWYgdW5zaWduZWQgY2hhciBTSEFfQllURTsKQEAgLTUyLDcgKzQ1LDYgQEAKICAgICBTSEFfSU5UNjQgZGlnZXN0WzhdOyAgICAgICAgICAgICAgICAvKiBNZXNzYWdlIGRpZ2VzdCAqLwogICAgIFNIQV9JTlQzMiBjb3VudF9sbywgY291bnRfaGk7ICAgICAgIC8qIDY0LWJpdCBiaXQgY291bnQgKi8KICAgICBTSEFfQllURSBkYXRhW1NIQV9CTE9DS1NJWkVdOyAgICAgICAvKiBTSEEgZGF0YSBidWZmZXIgKi8KLSAgICBpbnQgRW5kaWFubmVzczsKICAgICBpbnQgbG9jYWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB1bnByb2Nlc3NlZCBhbW91bnQgaW4gZGF0YSAqLwogICAgIGludCBkaWdlc3RzaXplOwogfSBTSEFvYmplY3Q7CkBAIC02MCwxMyArNTIsMTEgQEAKIC8qIFdoZW4gcnVuIG9uIGEgbGl0dGxlLWVuZGlhbiBDUFUgd2UgbmVlZCB0byBwZXJmb3JtIGJ5dGUgcmV2ZXJzYWwgb24gYW4KICAgIGFycmF5IG9mIGxvbmd3b3Jkcy4gKi8KIAotc3RhdGljIHZvaWQgbG9uZ1JldmVyc2UoU0hBX0lOVDY0ICpidWZmZXIsIGludCBieXRlQ291bnQsIGludCBFbmRpYW5uZXNzKQorI2lmIFBZX0xJVFRMRV9FTkRJQU4KK3N0YXRpYyB2b2lkIGxvbmdSZXZlcnNlKFNIQV9JTlQ2NCAqYnVmZmVyLCBpbnQgYnl0ZUNvdW50KQogewogICAgIFNIQV9JTlQ2NCB2YWx1ZTsKIAotICAgIGlmICggRW5kaWFubmVzcyA9PSBQQ1RfQklHX0VORElBTiApCi0gICAgICAgIHJldHVybjsKLQogICAgIGJ5dGVDb3VudCAvPSBzaXplb2YoKmJ1ZmZlcik7CiAgICAgd2hpbGUgKGJ5dGVDb3VudC0tKSB7CiAgICAgICAgIHZhbHVlID0gKmJ1ZmZlcjsKQEAgLTgzLDEwICs3MywxMCBAQAogICAgICAgICAgICAgICAgIGJ1ZmZlcisrOwogICAgIH0KIH0KKyNlbmRpZgogCiBzdGF0aWMgdm9pZCBTSEFjb3B5KFNIQW9iamVjdCAqc3JjLCBTSEFvYmplY3QgKmRlc3QpCiB7Ci0gICAgZGVzdC0+RW5kaWFubmVzcyA9IHNyYy0+RW5kaWFubmVzczsKICAgICBkZXN0LT5sb2NhbCA9IHNyYy0+bG9jYWw7CiAgICAgZGVzdC0+ZGlnZXN0c2l6ZSA9IHNyYy0+ZGlnZXN0c2l6ZTsKICAgICBkZXN0LT5jb3VudF9sbyA9IHNyYy0+Y291bnRfbG87CkBAIC0xNDEsNyArMTMxLDkgQEAKICAgICBTSEFfSU5UNjQgU1s4XSwgV1s4MF0sIHQwLCB0MTsKIAogICAgIG1lbWNweShXLCBzaGFfaW5mby0+ZGF0YSwgc2l6ZW9mKHNoYV9pbmZvLT5kYXRhKSk7Ci0gICAgbG9uZ1JldmVyc2UoVywgKGludClzaXplb2Yoc2hhX2luZm8tPmRhdGEpLCBzaGFfaW5mby0+RW5kaWFubmVzcyk7CisjaWYgUFlfTElUVExFX0VORElBTgorICAgIGxvbmdSZXZlcnNlKFcsIChpbnQpc2l6ZW9mKHNoYV9pbmZvLT5kYXRhKSk7CisjZW5kaWYKIAogICAgIGZvciAoaSA9IDE2OyBpIDwgODA7ICsraSkgewogICAgICAgICAgICAgICAgIFdbaV0gPSBHYW1tYTEoV1tpIC0gMl0pICsgV1tpIC0gN10gKyBHYW1tYTAoV1tpIC0gMTVdKSArIFdbaSAtIDE2XTsKQEAgLTI1NCw3ICsyNDYsNiBAQAogc3RhdGljIHZvaWQKIHNoYTUxMl9pbml0KFNIQW9iamVjdCAqc2hhX2luZm8pCiB7Ci0gICAgVGVzdEVuZGlhbm5lc3Moc2hhX2luZm8tPkVuZGlhbm5lc3MpCiAgICAgc2hhX2luZm8tPmRpZ2VzdFswXSA9IFB5X1VMTCgweDZhMDllNjY3ZjNiY2M5MDgpOwogICAgIHNoYV9pbmZvLT5kaWdlc3RbMV0gPSBQeV9VTEwoMHhiYjY3YWU4NTg0Y2FhNzNiKTsKICAgICBzaGFfaW5mby0+ZGlnZXN0WzJdID0gUHlfVUxMKDB4M2M2ZWYzNzJmZTk0ZjgyYik7CkBAIC0yNzIsNyArMjYzLDYgQEAKIHN0YXRpYyB2b2lkCiBzaGEzODRfaW5pdChTSEFvYmplY3QgKnNoYV9pbmZvKQogewotICAgIFRlc3RFbmRpYW5uZXNzKHNoYV9pbmZvLT5FbmRpYW5uZXNzKQogICAgIHNoYV9pbmZvLT5kaWdlc3RbMF0gPSBQeV9VTEwoMHhjYmJiOWQ1ZGMxMDU5ZWQ4KTsKICAgICBzaGFfaW5mby0+ZGlnZXN0WzFdID0gUHlfVUxMKDB4NjI5YTI5MmEzNjdjZDUwNyk7CiAgICAgc2hhX2luZm8tPmRpZ2VzdFsyXSA9IFB5X1VMTCgweDkxNTkwMTVhMzA3MGRkMTcpOwpAQCAtMzEwLDcgKzMwMCw3IEBACiAgICAgICAgIG1lbWNweSgoKFNIQV9CWVRFICopIHNoYV9pbmZvLT5kYXRhKSArIHNoYV9pbmZvLT5sb2NhbCwgYnVmZmVyLCBpKTsKICAgICAgICAgY291bnQgLT0gaTsKICAgICAgICAgYnVmZmVyICs9IGk7Ci0gICAgICAgIHNoYV9pbmZvLT5sb2NhbCArPSBpOworICAgICAgICBzaGFfaW5mby0+bG9jYWwgKz0gKGludClpOwogICAgICAgICBpZiAoc2hhX2luZm8tPmxvY2FsID09IFNIQV9CTE9DS1NJWkUpIHsKICAgICAgICAgICAgIHNoYTUxMl90cmFuc2Zvcm0oc2hhX2luZm8pOwogICAgICAgICB9CkBAIC0zMjUsNyArMzE1LDcgQEAKICAgICAgICAgc2hhNTEyX3RyYW5zZm9ybShzaGFfaW5mbyk7CiAgICAgfQogICAgIG1lbWNweShzaGFfaW5mby0+ZGF0YSwgYnVmZmVyLCBjb3VudCk7Ci0gICAgc2hhX2luZm8tPmxvY2FsID0gY291bnQ7CisgICAgc2hhX2luZm8tPmxvY2FsID0gKGludCljb3VudDsKIH0KIAogLyogZmluaXNoIGNvbXB1dGluZyB0aGUgU0hBIGRpZ2VzdCAqLwpAQCAtNTc3LDkgKzU2Nyw5IEBACiBTSEE1MTJfZ2V0X25hbWUoUHlPYmplY3QgKnNlbGYsIHZvaWQgKmNsb3N1cmUpCiB7CiAgICAgaWYgKCgoU0hBb2JqZWN0ICopc2VsZiktPmRpZ2VzdHNpemUgPT0gNjQpCi0gICAgICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZ0FuZFNpemUoIlNIQTUxMiIsIDYpOworICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmdBbmRTaXplKCJzaGE1MTIiLCA2KTsKICAgICBlbHNlCi0gICAgICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZ0FuZFNpemUoIlNIQTM4NCIsIDYpOworICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmdBbmRTaXplKCJzaGEzODQiLCA2KTsKIH0KIAogc3RhdGljIFB5R2V0U2V0RGVmIFNIQV9nZXRzZXRlcnNbXSA9IHsKQEAgLTc4MiwxMyArNzcyLDI0IEBACiBQeU1PRElOSVRfRlVOQwogUHlJbml0X19zaGE1MTIodm9pZCkKIHsKKyAgICBQeU9iamVjdCAqbTsKKwogICAgIFB5X1RZUEUoJlNIQTM4NHR5cGUpID0gJlB5VHlwZV9UeXBlOwogICAgIGlmIChQeVR5cGVfUmVhZHkoJlNIQTM4NHR5cGUpIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgUHlfVFlQRSgmU0hBNTEydHlwZSkgPSAmUHlUeXBlX1R5cGU7CiAgICAgaWYgKFB5VHlwZV9SZWFkeSgmU0hBNTEydHlwZSkgPCAwKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICByZXR1cm4gUHlNb2R1bGVfQ3JlYXRlKCZfc2hhNTEybW9kdWxlKTsKKworICAgIG0gPSBQeU1vZHVsZV9DcmVhdGUoJl9zaGE1MTJtb2R1bGUpOworICAgIGlmIChtID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgUHlfSU5DUkVGKChQeU9iamVjdCAqKSZTSEEzODR0eXBlKTsKKyAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgIlNIQTM4NFR5cGUiLCAoUHlPYmplY3QgKikmU0hBMzg0dHlwZSk7CisgICAgUHlfSU5DUkVGKChQeU9iamVjdCAqKSZTSEE1MTJ0eXBlKTsKKyAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgIlNIQTUxMlR5cGUiLCAoUHlPYmplY3QgKikmU0hBNTEydHlwZSk7CisgICAgcmV0dXJuIG07CiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9zaWduYWxtb2R1bGUuYyBiL01vZHVsZXMvc2lnbmFsbW9kdWxlLmMKaW5kZXggNzA0YzlmNS4uZmVkYWRkZiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9zaWduYWxtb2R1bGUuYworKysgYi9Nb2R1bGVzL3NpZ25hbG1vZHVsZS5jCkBAIC05LDcgKzksNyBAQAogI2VuZGlmCiAKICNpZmRlZiBNU19XSU5ET1dTCi0jaW5jbHVkZSA8V2luZG93cy5oPgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KICNpZmRlZiBIQVZFX1BST0NFU1NfSAogI2luY2x1ZGUgPHByb2Nlc3MuaD4KICNlbmRpZgpAQCAtMzcsMTEgKzM3LDYgQEAKICNkZWZpbmUgU0lHX0VSUiAoKFB5T1Nfc2lnaGFuZGxlcl90KSgtMSkpCiAjZW5kaWYKIAotI2lmIGRlZmluZWQoUFlPU19PUzIpICYmICFkZWZpbmVkKFBZQ0NfR0NDKQotI2RlZmluZSBOU0lHIDEyCi0jaW5jbHVkZSA8cHJvY2Vzcy5oPgotI2VuZGlmCi0KICNpZm5kZWYgTlNJRwogIyBpZiBkZWZpbmVkKF9OU0lHKQogIyAgZGVmaW5lIE5TSUcgX05TSUcgICAgICAgICAgICAvKiBGb3IgQlNEL1N5c1YgKi8KQEAgLTc4LDEwICs3Myw2IEBACiAgICBhIHdvcmtpbmcgaW1wbGVtZW50YXRpb24gdGhhdCB3b3JrcyBpbiBhbGwgdGhyZWUgY2FzZXMgLS0gdGhlCiAgICBoYW5kbGVyIGlnbm9yZXMgc2lnbmFscyBpZiBnZXRwaWQoKSBpc24ndCB0aGUgc2FtZSBhcyBpbiB0aGUgbWFpbgogICAgdGhyZWFkLiAgWFhYIFRoaXMgaXMgYSBoYWNrLgotCi0gICBHTlUgcHRoIGlzIGEgdXNlci1zcGFjZSB0aHJlYWRpbmcgbGlicmFyeSwgYW5kIGFzIHN1Y2gsIGFsbCB0aHJlYWRzCi0gICBydW4gd2l0aGluIHRoZSBzYW1lIHByb2Nlc3MuIEluIHRoaXMgY2FzZSwgaWYgdGhlIGN1cnJlbnRseSBydW5uaW5nCi0gICB0aHJlYWQgaXMgbm90IHRoZSBtYWluX3RocmVhZCwgc2VuZCB0aGUgc2lnbmFsIHRvIHRoZSBtYWluX3RocmVhZC4KICovCiAKICNpZmRlZiBXSVRIX1RIUkVBRApAQCAtMTgwLDE1ICsxNzEsMzEgQEAKICAgICByZXR1cm4gUHlFcnJfQ2hlY2tTaWduYWxzKCk7CiB9CiAKK3N0YXRpYyBpbnQKK3JlcG9ydF93YWtldXBfZXJyb3Iodm9pZCAqZGF0YSkKK3sKKyAgICBpbnQgc2F2ZV9lcnJubyA9IGVycm5vOworICAgIGVycm5vID0gKGludCkgKFB5X2ludHB0cl90KSBkYXRhOworICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19PU0Vycm9yKTsKKyAgICBQeVN5c19Xcml0ZVN0ZGVycigiRXhjZXB0aW9uIGlnbm9yZWQgd2hlbiB0cnlpbmcgdG8gd3JpdGUgdG8gdGhlICIKKyAgICAgICAgICAgICAgICAgICAgICAic2lnbmFsIHdha2V1cCBmZDpcbiIpOworICAgIFB5RXJyX1dyaXRlVW5yYWlzYWJsZShOVUxMKTsKKyAgICBlcnJubyA9IHNhdmVfZXJybm87CisgICAgcmV0dXJuIDA7Cit9CisKIHN0YXRpYyB2b2lkCiB0cmlwX3NpZ25hbChpbnQgc2lnX251bSkKIHsKICAgICB1bnNpZ25lZCBjaGFyIGJ5dGU7CisgICAgaW50IHJjID0gMDsKIAogICAgIEhhbmRsZXJzW3NpZ19udW1dLnRyaXBwZWQgPSAxOwogICAgIGlmICh3YWtldXBfZmQgIT0gLTEpIHsKICAgICAgICAgYnl0ZSA9ICh1bnNpZ25lZCBjaGFyKXNpZ19udW07Ci0gICAgICAgIHdyaXRlKHdha2V1cF9mZCwgJmJ5dGUsIDEpOworICAgICAgICB3aGlsZSAoKHJjID0gd3JpdGUod2FrZXVwX2ZkLCAmYnl0ZSwgMSkpID09IC0xICYmIGVycm5vID09IEVJTlRSKTsKKyAgICAgICAgaWYgKHJjID09IC0xKQorICAgICAgICAgICAgUHlfQWRkUGVuZGluZ0NhbGwocmVwb3J0X3dha2V1cF9lcnJvciwgKHZvaWQgKikgKFB5X2ludHB0cl90KSBlcnJubyk7CiAgICAgfQogICAgIGlmIChpc190cmlwcGVkKQogICAgICAgICByZXR1cm47CkBAIC0yMDMsMTMgKzIxMCw2IEBACiB7CiAgICAgaW50IHNhdmVfZXJybm8gPSBlcnJubzsKIAotI2lmIGRlZmluZWQoV0lUSF9USFJFQUQpICYmIGRlZmluZWQoV0lUSF9QVEgpCi0gICAgaWYgKFB5VGhyZWFkX2dldF90aHJlYWRfaWRlbnQoKSAhPSBtYWluX3RocmVhZCkgewotICAgICAgICBwdGhfcmFpc2UoKihwdGhfdCAqKSBtYWluX3RocmVhZCwgc2lnX251bSk7Ci0gICAgfQotICAgIGVsc2UKLSNlbmRpZgotICAgIHsKICNpZmRlZiBXSVRIX1RIUkVBRAogICAgIC8qIFNlZSBOT1RFUyBzZWN0aW9uIGFib3ZlICovCiAgICAgaWYgKGdldHBpZCgpID09IG1haW5fcGlkKQpAQCAtMjMxLDcgKzIzMSw2IEBACiAgICAgICogbWFrZXMgdGhpcyB0cnVlLiAgU2VlIGFsc28gaXNzdWU4MzU0LiAqLwogICAgIFB5T1Nfc2V0c2lnKHNpZ19udW0sIHNpZ25hbF9oYW5kbGVyKTsKICNlbmRpZgotICAgIH0KIAogICAgIC8qIElzc3VlICMxMDMxMTogYXN5bmNocm9ub3VzbHkgZXhlY3V0aW5nIHNpZ25hbCBoYW5kbGVycyBzaG91bGQgbm90CiAgICAgICAgbXV0YXRlIGVycm5vIHVuZGVyIHRoZSBmZWV0IG9mIHVuc3VzcGVjdGluZyBDIGNvZGUuICovCkBAIC04MDAsNyArNzk5LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNpZ25hbHMsICZ0aW1lb3V0KSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBpZiAoX1B5VGltZV9PYmplY3RUb1RpbWVzcGVjKHRpbWVvdXQsICZ0dl9zZWMsICZ0dl9uc2VjKSA9PSAtMSkKKyAgICBpZiAoX1B5VGltZV9PYmplY3RUb1RpbWVzcGVjKHRpbWVvdXQsICZ0dl9zZWMsICZ0dl9uc2VjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1B5VGltZV9ST1VORF9ET1dOKSA9PSAtMSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgYnVmLnR2X3NlYyA9IHR2X3NlYzsKICAgICBidWYudHZfbnNlYyA9IHR2X25zZWM7CkBAIC05ODMsOSArOTgzLDEwIEBACiAgICAgICAgIHJldHVybiBOVUxMOwogCiAjaWYgZGVmaW5lZChIQVZFX1NJR1dBSVRJTkZPKSB8fCBkZWZpbmVkKEhBVkVfU0lHVElNRURXQUlUKQotICAgIGlmICghaW5pdGlhbGl6ZWQpCi0gICAgICAgIFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUoJlNpZ2luZm9UeXBlLCAmc3RydWN0X3NpZ2luZm9fZGVzYyk7Ci0KKyAgICBpZiAoIWluaXRpYWxpemVkKSB7CisgICAgICAgIGlmIChQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlMigmU2lnaW5mb1R5cGUsICZzdHJ1Y3Rfc2lnaW5mb19kZXNjKSA8IDApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAgICAgUHlfSU5DUkVGKChQeU9iamVjdCopICZTaWdpbmZvVHlwZSk7CiAgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJzdHJ1Y3Rfc2lnaW5mbyIsIChQeU9iamVjdCopICZTaWdpbmZvVHlwZSk7CiAgICAgaW5pdGlhbGl6ZWQgPSAxOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9zb2NrZXRtb2R1bGUuYyBiL01vZHVsZXMvc29ja2V0bW9kdWxlLmMKaW5kZXggMzJiNGViYS4uMjMwMTllZSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9zb2NrZXRtb2R1bGUuYworKysgYi9Nb2R1bGVzL3NvY2tldG1vZHVsZS5jCkBAIC0xNSw3ICsxNSw3IEBACiAKIE1vZHVsZSBpbnRlcmZhY2U6CiAKLS0gc29ja2V0LmVycm9yOiBleGNlcHRpb24gcmFpc2VkIGZvciBzb2NrZXQgc3BlY2lmaWMgZXJyb3JzCistIHNvY2tldC5lcnJvcjogZXhjZXB0aW9uIHJhaXNlZCBmb3Igc29ja2V0IHNwZWNpZmljIGVycm9ycywgYWxpYXMgZm9yIE9TRXJyb3IKIC0gc29ja2V0LmdhaWVycm9yOiBleGNlcHRpb24gcmFpc2VkIGZvciBnZXRhZGRyaW5mby9nZXRuYW1laW5mbyBlcnJvcnMsCiAgICAgYSBzdWJjbGFzcyBvZiBzb2NrZXQuZXJyb3IKIC0gc29ja2V0LmhlcnJvcjogZXhjZXB0aW9uIHJhaXNlZCBmb3IgZ2V0aG9zdGJ5KiBlcnJvcnMsCkBAIC0zMyw4ICszMyw4IEBACiAtIHNvY2tldC5udG9obCgzMiBiaXQgdmFsdWUpIC0tPiBuZXcgaW50IG9iamVjdAogLSBzb2NrZXQuaHRvbnMoMTYgYml0IHZhbHVlKSAtLT4gbmV3IGludCBvYmplY3QKIC0gc29ja2V0Lmh0b25sKDMyIGJpdCB2YWx1ZSkgLS0+IG5ldyBpbnQgb2JqZWN0Ci0tIHNvY2tldC5nZXRhZGRyaW5mbyhob3N0LCBwb3J0IFssIGZhbWlseSwgc29ja3R5cGUsIHByb3RvLCBmbGFnc10pCi0gICAgLS0+IExpc3Qgb2YgKGZhbWlseSwgc29ja3R5cGUsIHByb3RvLCBjYW5vbm5hbWUsIHNvY2thZGRyKQorLSBzb2NrZXQuZ2V0YWRkcmluZm8oaG9zdCwgcG9ydCBbLCBmYW1pbHksIHR5cGUsIHByb3RvLCBmbGFnc10pCisgICAgLS0+IExpc3Qgb2YgKGZhbWlseSwgdHlwZSwgcHJvdG8sIGNhbm9ubmFtZSwgc29ja2FkZHIpCiAtIHNvY2tldC5nZXRuYW1laW5mbyhzb2NrYWRkciwgZmxhZ3MpIC0tPiAoaG9zdCwgcG9ydCkKIC0gc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSwgZXRjLjogY29uc3RhbnRzIGZyb20gPHNvY2tldC5oPgogLSBzb2NrZXQuaGFzX2lwdjY6IGJvb2xlYW4gdmFsdWUgaW5kaWNhdGluZyBpZiBJUHY2IGlzIHN1cHBvcnRlZApAQCAtOTUsMTggKzk1LDE2IEBACiAjaW5jbHVkZSAiUHl0aG9uLmgiCiAjaW5jbHVkZSAic3RydWN0bWVtYmVyLmgiCiAKLSN1bmRlZiBNQVgKLSNkZWZpbmUgTUFYKHgsIHkpICgoeCkgPCAoeSkgPyAoeSkgOiAoeCkpCi0KIC8qIFNvY2tldCBvYmplY3QgZG9jdW1lbnRhdGlvbiAqLwogUHlEb2NfU1RSVkFSKHNvY2tfZG9jLAotInNvY2tldChbZmFtaWx5WywgdHlwZVssIHByb3RvXV1dKSAtPiBzb2NrZXQgb2JqZWN0XG5cCisic29ja2V0KGZhbWlseT1BRl9JTkVULCB0eXBlPVNPQ0tfU1RSRUFNLCBwcm90bz0wLCBmaWxlbm89Tm9uZSkgLT4gc29ja2V0IG9iamVjdFxuXAogXG5cCiBPcGVuIGEgc29ja2V0IG9mIHRoZSBnaXZlbiB0eXBlLiAgVGhlIGZhbWlseSBhcmd1bWVudCBzcGVjaWZpZXMgdGhlXG5cCiBhZGRyZXNzIGZhbWlseTsgaXQgZGVmYXVsdHMgdG8gQUZfSU5FVC4gIFRoZSB0eXBlIGFyZ3VtZW50IHNwZWNpZmllc1xuXAogd2hldGhlciB0aGlzIGlzIGEgc3RyZWFtIChTT0NLX1NUUkVBTSwgdGhpcyBpcyB0aGUgZGVmYXVsdClcblwKIG9yIGRhdGFncmFtIChTT0NLX0RHUkFNKSBzb2NrZXQuICBUaGUgcHJvdG9jb2wgYXJndW1lbnQgZGVmYXVsdHMgdG8gMCxcblwKIHNwZWNpZnlpbmcgdGhlIGRlZmF1bHQgcHJvdG9jb2wuICBLZXl3b3JkIGFyZ3VtZW50cyBhcmUgYWNjZXB0ZWQuXG5cCitUaGUgc29ja2V0IGlzIGNyZWF0ZWQgYXMgbm9uLWluaGVyaXRhYmxlLlxuXAogXG5cCiBBIHNvY2tldCBvYmplY3QgcmVwcmVzZW50cyBvbmUgZW5kcG9pbnQgb2YgYSBuZXR3b3JrIGNvbm5lY3Rpb24uXG5cCiBcblwKQEAgLTExNyw3ICsxMTUsNyBAQAogY2xvc2UoKSAtLSBjbG9zZSB0aGUgc29ja2V0XG5cCiBjb25uZWN0KGFkZHIpIC0tIGNvbm5lY3QgdGhlIHNvY2tldCB0byBhIHJlbW90ZSBhZGRyZXNzXG5cCiBjb25uZWN0X2V4KGFkZHIpIC0tIGNvbm5lY3QsIHJldHVybiBhbiBlcnJvciBjb2RlIGluc3RlYWQgb2YgYW4gZXhjZXB0aW9uXG5cCi1fZHVwKCkgLS0gcmV0dXJuIGEgbmV3IHNvY2tldCBmZCBkdXBsaWNhdGVkIGZyb20gZmlsZW5vKClcblwKK2R1cCgpIC0tIHJldHVybiBhIG5ldyBzb2NrZXQgZmQgZHVwbGljYXRlZCBmcm9tIGZpbGVubygpXG5cCiBmaWxlbm8oKSAtLSByZXR1cm4gdW5kZXJseWluZyBmaWxlIGRlc2NyaXB0b3JcblwKIGdldHBlZXJuYW1lKCkgLS0gcmV0dXJuIHJlbW90ZSBhZGRyZXNzIFsqXVxuXAogZ2V0c29ja25hbWUoKSAtLSByZXR1cm4gbG9jYWwgYWRkcmVzc1xuXApAQCAtMTkwLDcgKzE4OCw3IEBACiAjaWYgZGVmaW5lZChXSVRIX1RIUkVBRCkgJiYgKGRlZmluZWQoX19BUFBMRV9fKSB8fCBcCiAgICAgKGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uKzAgPCA1MDMwMDApIHx8IFwKICAgICBkZWZpbmVkKF9fT3BlbkJTRF9fKSB8fCBkZWZpbmVkKF9fTmV0QlNEX18pIHx8IFwKLSAgICBkZWZpbmVkKF9fVk1TKSB8fCAhZGVmaW5lZChIQVZFX0dFVEFERFJJTkZPKSkKKyAgICAhZGVmaW5lZChIQVZFX0dFVEFERFJJTkZPKSkKICNkZWZpbmUgVVNFX0dFVEFERFJJTkZPX0xPQ0sKICNlbmRpZgogCkBAIC0yMTQsMjIgKzIxMiwxMSBAQAogIyBpbmNsdWRlIDxjdHlwZS5oPgogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKF9fVk1TKQotIyAgaW5jbHVkZSA8aW9jdGwuaD4KLSNlbmRpZgotCiAjaWZkZWYgX19BUFBMRV9fCiAjIGluY2x1ZGUgPHN5cy9pb2N0bC5oPgogI2VuZGlmCiAKIAotI2lmIGRlZmluZWQoUFlPU19PUzIpCi0jIGRlZmluZSAgSU5DTF9ET1MKLSMgZGVmaW5lICBJTkNMX0RPU0VSUk9SUwotIyBkZWZpbmUgIElOQ0xfTk9QTUFQSQotIyBpbmNsdWRlIDxvczIuaD4KLSNlbmRpZgotCiAjaWYgZGVmaW5lZChfX3NnaSkgJiYgX0NPTVBJTEVSX1ZFUlNJT04+NzAwICYmICFfU0dJQVBJCiAvKiBtYWtlIHN1cmUgdGhhdCB0aGUgcmVlbnRyYW50IChnZXRob3N0YnlhZGRyX3IgZXRjKQogICAgZnVuY3Rpb25zIGFyZSBkZWNsYXJlZCBjb3JyZWN0bHkgaWYgY29tcGlsaW5nIHdpdGgKQEAgLTI4NiwxMiArMjczLDcgQEAKICMgaW5jbHVkZSA8dW5pc3RkLmg+CiAKIC8qIEhlYWRlcnMgbmVlZGVkIGZvciBpbmV0X250b2EoKSBhbmQgaW5ldF9hZGRyKCkgKi8KLSMgaWYgZGVmaW5lZChQWU9TX09TMikgJiYgZGVmaW5lZChQWUNDX1ZBQ1BQKQotIyAgaW5jbHVkZSA8bmV0ZGIuaD4KLXR5cGVkZWYgc2l6ZV90IHNvY2tsZW5fdDsKLSMgZWxzZQogIyAgIGluY2x1ZGUgPGFycGEvaW5ldC5oPgotIyBlbmRpZgogCiAjICBpbmNsdWRlIDxmY250bC5oPgogCkBAIC0zNzEsMjIgKzM1Myw3IEBACiAjZW5kaWYKIAogI2lmZGVmIE1TX1dJTkRPV1MKLS8qIE9uIFdpbmRvd3MgYSBzb2NrZXQgaXMgcmVhbGx5IGEgaGFuZGxlIG5vdCBhbiBmZCAqLwotc3RhdGljIFNPQ0tFVAotZHVwX3NvY2tldChTT0NLRVQgaGFuZGxlKQotewotICAgIFdTQVBST1RPQ09MX0lORk8gaW5mbzsKLQotICAgIGlmIChXU0FEdXBsaWNhdGVTb2NrZXQoaGFuZGxlLCBHZXRDdXJyZW50UHJvY2Vzc0lkKCksICZpbmZvKSkKLSAgICAgICAgcmV0dXJuIElOVkFMSURfU09DS0VUOwotCi0gICAgcmV0dXJuIFdTQVNvY2tldChGUk9NX1BST1RPQ09MX0lORk8sIEZST01fUFJPVE9DT0xfSU5GTywKLSAgICAgICAgICAgICAgICAgICAgIEZST01fUFJPVE9DT0xfSU5GTywgJmluZm8sIDAsIFdTQV9GTEFHX09WRVJMQVBQRUQpOwotfQogI2RlZmluZSBTT0NLRVRDTE9TRSBjbG9zZXNvY2tldAotI2Vsc2UKLS8qIE9uIFVuaXggd2UgY2FuIHVzZSBkdXAgdG8gZHVwbGljYXRlIHRoZSBmaWxlIGRlc2NyaXB0b3Igb2YgYSBzb2NrZXQqLwotI2RlZmluZSBkdXBfc29ja2V0KGZkKSBkdXAoZmQpCiAjZW5kaWYKIAogI2lmZGVmIE1TX1dJTjMyCkBAIC0zOTUsMTEgKzM2Miw2IEBACiAjZGVmaW5lIHNucHJpbnRmIF9zbnByaW50ZgogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKSAmJiAhZGVmaW5lZChQWUNDX0dDQykKLSNkZWZpbmUgU09DS0VUQ0xPU0Ugc29jbG9zZQotI2RlZmluZSBOT19EVVAgLyogU29ja2V0cyBhcmUgTm90IEFjdHVhbCBGaWxlIEhhbmRsZXMgdW5kZXIgT1MvMiAqLwotI2VuZGlmCi0KICNpZm5kZWYgU09DS0VUQ0xPU0UKICNkZWZpbmUgU09DS0VUQ0xPU0UgY2xvc2UKICNlbmRpZgpAQCAtNDM3LDExICszOTksNiBAQAogI2VuZGlmCiAjZW5kaWYKIAotI2lmZGVmIF9fVk1TCi0vKiBUQ1AvSVAgU2VydmljZXMgZm9yIFZNUyB1c2VzIGEgbWF4aW11bSBzZW5kL3JlY3YgYnVmZmVyIGxlbmd0aCAqLwotI2RlZmluZSBTRUdNRU5UX1NJWkUgKDMyICogMTAyNCAtMSkKLSNlbmRpZgotCiAvKiBDb252ZXJ0ICJzb2NrX2FkZHJfdCAqIiB0byAic3RydWN0IHNvY2thZGRyICoiLiAqLwogI2RlZmluZSBTQVMyU0EoeCkgICAgICAgKCYoKHgpLT5zYSkpCiAKQEAgLTQ1OSw2ICs0MTYsMTAgQEAKICNkZWZpbmUgSU5WQUxJRF9TT0NLRVQgKC0xKQogI2VuZGlmCiAKKyNpZm5kZWYgSU5BRERSX05PTkUKKyNkZWZpbmUgSU5BRERSX05PTkUgKC0xKQorI2VuZGlmCisKIC8qIFhYWCBUaGVyZSdzIGEgcHJvYmxlbSBoZXJlOiAqc3RhdGljKiBmdW5jdGlvbnMgYXJlIG5vdCBzdXBwb3NlZCB0byBoYXZlCiAgICBhIFB5IHByZWZpeCAob3IgdXNlIENhcGl0YWxpemVkV29yZHMpLiAgTGF0ZXIuLi4gKi8KIApAQCAtNTE5LDYgKzQ4MCwxMSBAQAogICAgIChlcnJubyA9PSBleHBlY3RlZCkKICNlbmRpZgogCisjaWZkZWYgTVNfV0lORE9XUworLyogRG9lcyBXU0FTb2NrZXQoKSBzdXBwb3J0IHRoZSBXU0FfRkxBR19OT19IQU5ETEVfSU5IRVJJVCBmbGFnPyAqLworc3RhdGljIGludCBzdXBwb3J0X3dzYV9ub19pbmhlcml0ID0gLTE7CisjZW5kaWYKKwogLyogQ29udmVuaWVuY2UgZnVuY3Rpb24gdG8gcmFpc2UgYW4gZXJyb3IgYWNjb3JkaW5nIHRvIGVycm5vCiAgICBhbmQgcmV0dXJuIGEgTlVMTCBwb2ludGVyIGZyb20gYSBmdW5jdGlvbi4gKi8KIApAQCAtNTM0LDQyICs1MDAsNiBAQAogICAgICAgICByZXR1cm4gUHlFcnJfU2V0RXhjRnJvbVdpbmRvd3NFcnIoUHlFeGNfT1NFcnJvciwgZXJyX25vKTsKICNlbmRpZgogCi0jaWYgZGVmaW5lZChQWU9TX09TMikgJiYgIWRlZmluZWQoUFlDQ19HQ0MpCi0gICAgaWYgKHNvY2tfZXJybm8oKSAhPSBOT19FUlJPUikgewotICAgICAgICBBUElSRVQgcmM7Ci0gICAgICAgIFVMT05HICBtc2dsZW47Ci0gICAgICAgIGNoYXIgb3V0YnVmWzEwMF07Ci0gICAgICAgIGludCBteWVycm9yY29kZSA9IHNvY2tfZXJybm8oKTsKLQotICAgICAgICAvKiBSZXRyaWV2ZSBzb2NrZXQtcmVsYXRlZCBlcnJvciBtZXNzYWdlIGZyb20gTVBUTi5NU0cgZmlsZSAqLwotICAgICAgICByYyA9IERvc0dldE1lc3NhZ2UoTlVMTCwgMCwgb3V0YnVmLCBzaXplb2Yob3V0YnVmKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG15ZXJyb3Jjb2RlIC0gU09DQkFTRUVSUiArIDI2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1wdG4ubXNnIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICZtc2dsZW4pOwotICAgICAgICBpZiAocmMgPT0gTk9fRVJST1IpIHsKLSAgICAgICAgICAgIFB5T2JqZWN0ICp2OwotCi0gICAgICAgICAgICAvKiBPUy8yIGRvZXNuJ3QgZ3VhcmFudGVlIGEgdGVybWluYXRvciAqLwotICAgICAgICAgICAgb3V0YnVmW21zZ2xlbl0gPSAnXDAnOwotICAgICAgICAgICAgaWYgKHN0cmxlbihvdXRidWYpID4gMCkgewotICAgICAgICAgICAgICAgIC8qIElmIG5vbi1lbXB0eSBtc2csIHRyaW0gQ1JMRiAqLwotICAgICAgICAgICAgICAgIGNoYXIgKmxhc3RjID0gJm91dGJ1Zlsgc3RybGVuKG91dGJ1ZiktMSBdOwotICAgICAgICAgICAgICAgIHdoaWxlIChsYXN0YyA+IG91dGJ1ZiAmJgotICAgICAgICAgICAgICAgICAgICAgICBQeV9JU1NQQUNFKFB5X0NIQVJNQVNLKCpsYXN0YykpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8qIFRyaW0gdHJhaWxpbmcgd2hpdGVzcGFjZSAoQ1JMRikgKi8KLSAgICAgICAgICAgICAgICAgICAgKmxhc3RjLS0gPSAnXDAnOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHYgPSBQeV9CdWlsZFZhbHVlKCIoaXMpIiwgbXllcnJvcmNvZGUsIG91dGJ1Zik7Ci0gICAgICAgICAgICBpZiAodiAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgUHlFcnJfU2V0T2JqZWN0KFB5RXhjX09TRXJyb3IsIHYpOwotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmCi0KICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOwogfQogCkBAIC02MTcsMzcgKzU0NywxNCBAQAogICAgIHJldHVybiBOVUxMOwogfQogCi0jaWZkZWYgX19WTVMKLS8qIEZ1bmN0aW9uIHRvIHNlbmQgaW4gc2VnbWVudHMgKi8KLXN0YXRpYyBpbnQKLXNlbmRzZWdtZW50ZWQoaW50IHNvY2tfZmQsIGNoYXIgKmJ1ZiwgaW50IGxlbiwgaW50IGZsYWdzKQotewotICAgIGludCBuID0gMDsKLSAgICBpbnQgcmVtYWluaW5nID0gbGVuOwotCi0gICAgd2hpbGUgKHJlbWFpbmluZyA+IDApIHsKLSAgICAgICAgdW5zaWduZWQgaW50IHNlZ21lbnQ7Ci0KLSAgICAgICAgc2VnbWVudCA9IChyZW1haW5pbmcgPj0gU0VHTUVOVF9TSVpFID8gU0VHTUVOVF9TSVpFIDogcmVtYWluaW5nKTsKLSAgICAgICAgbiA9IHNlbmQoc29ja19mZCwgYnVmLCBzZWdtZW50LCBmbGFncyk7Ci0gICAgICAgIGlmIChuIDwgMCkgewotICAgICAgICAgICAgcmV0dXJuIG47Ci0gICAgICAgIH0KLSAgICAgICAgcmVtYWluaW5nIC09IHNlZ21lbnQ7Ci0gICAgICAgIGJ1ZiArPSBzZWdtZW50OwotICAgIH0gLyogZW5kIHdoaWxlICovCi0KLSAgICByZXR1cm4gbGVuOwotfQotI2VuZGlmCi0KIC8qIEZ1bmN0aW9uIHRvIHBlcmZvcm0gdGhlIHNldHRpbmcgb2Ygc29ja2V0IGJsb2NraW5nIG1vZGUKICAgIGludGVybmFsbHkuIGJsb2NrID0gKDEgfCAwKS4gKi8KIHN0YXRpYyBpbnQKIGludGVybmFsX3NldGJsb2NraW5nKFB5U29ja2V0U29ja09iamVjdCAqcywgaW50IGJsb2NrKQogewotI2lmbmRlZiBNU19XSU5ET1dTCi0gICAgaW50IGRlbGF5X2ZsYWc7CisjaWYgIWRlZmluZWQoTVNfV0lORE9XUykgXAorICAgICYmICEoKGRlZmluZWQoSEFWRV9TWVNfSU9DVExfSCkgJiYgZGVmaW5lZChGSU9OQklPKSkpCisgICAgaW50IGRlbGF5X2ZsYWcsIG5ld19kZWxheV9mbGFnOwogI2VuZGlmCiAjaWZkZWYgU09DS19OT05CTE9DSwogICAgIGlmIChibG9jaykKQEAgLTY1OCwyMCArNTY1LDE4IEBACiAKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAjaWZuZGVmIE1TX1dJTkRPV1MKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKSAmJiAhZGVmaW5lZChQWUNDX0dDQykKLSAgICBibG9jayA9ICFibG9jazsKLSAgICBpb2N0bChzLT5zb2NrX2ZkLCBGSU9OQklPLCAoY2FkZHJfdCkmYmxvY2ssIHNpemVvZihibG9jaykpOwotI2VsaWYgZGVmaW5lZChfX1ZNUykKKyNpZiAoZGVmaW5lZChIQVZFX1NZU19JT0NUTF9IKSAmJiBkZWZpbmVkKEZJT05CSU8pKQogICAgIGJsb2NrID0gIWJsb2NrOwogICAgIGlvY3RsKHMtPnNvY2tfZmQsIEZJT05CSU8sICh1bnNpZ25lZCBpbnQgKikmYmxvY2spOwotI2Vsc2UgIC8qICFQWU9TX09TMiAmJiAhX19WTVMgKi8KKyNlbHNlCiAgICAgZGVsYXlfZmxhZyA9IGZjbnRsKHMtPnNvY2tfZmQsIEZfR0VURkwsIDApOwogICAgIGlmIChibG9jaykKLSAgICAgICAgZGVsYXlfZmxhZyAmPSAofk9fTk9OQkxPQ0spOworICAgICAgICBuZXdfZGVsYXlfZmxhZyA9IGRlbGF5X2ZsYWcgJiAofk9fTk9OQkxPQ0spOwogICAgIGVsc2UKLSAgICAgICAgZGVsYXlfZmxhZyB8PSBPX05PTkJMT0NLOwotICAgIGZjbnRsKHMtPnNvY2tfZmQsIEZfU0VURkwsIGRlbGF5X2ZsYWcpOwotI2VuZGlmIC8qICFQWU9TX09TMiAqLworICAgICAgICBuZXdfZGVsYXlfZmxhZyA9IGRlbGF5X2ZsYWcgfCBPX05PTkJMT0NLOworICAgIGlmIChuZXdfZGVsYXlfZmxhZyAhPSBkZWxheV9mbGFnKQorICAgICAgICBmY250bChzLT5zb2NrX2ZkLCBGX1NFVEZMLCBuZXdfZGVsYXlfZmxhZyk7CisjZW5kaWYKICNlbHNlIC8qIE1TX1dJTkRPV1MgKi8KICAgICBibG9jayA9ICFibG9jazsKICAgICBpb2N0bHNvY2tldChzLT5zb2NrX2ZkLCBGSU9OQklPLCAodV9sb25nKikmYmxvY2spOwpAQCAtODU1LDggKzc2MCw2IEBACiB7CiAgICAgc3RydWN0IGFkZHJpbmZvIGhpbnRzLCAqcmVzOwogICAgIGludCBlcnJvcjsKLSAgICBpbnQgZDEsIGQyLCBkMywgZDQ7Ci0gICAgY2hhciBjaDsKIAogICAgIG1lbXNldCgodm9pZCAqKSBhZGRyX3JldCwgJ1wwJywgc2l6ZW9mKCphZGRyX3JldCkpOwogICAgIGlmIChuYW1lWzBdID09ICdcMCcpIHsKQEAgLTkwNSw3ICs4MDgsMTAgQEAKICAgICAgICAgZnJlZWFkZHJpbmZvKHJlcyk7CiAgICAgICAgIHJldHVybiBzaXo7CiAgICAgfQotICAgIGlmIChuYW1lWzBdID09ICc8JyAmJiBzdHJjbXAobmFtZSwgIjxicm9hZGNhc3Q+IikgPT0gMCkgeworICAgIC8qIHNwZWNpYWwtY2FzZSBicm9hZGNhc3QgLSBpbmV0X2FkZHIoKSBiZWxvdyBjYW4gcmV0dXJuIElOQUREUl9OT05FIGZvcgorICAgICAqIHRoaXMgKi8KKyAgICBpZiAoc3RyY21wKG5hbWUsICIyNTUuMjU1LjI1NS4yNTUiKSA9PSAwIHx8CisgICAgICAgIHN0cmNtcChuYW1lLCAiPGJyb2FkY2FzdD4iKSA9PSAwKSB7CiAgICAgICAgIHN0cnVjdCBzb2NrYWRkcl9pbiAqc2luOwogICAgICAgICBpZiAoYWYgIT0gQUZfSU5FVCAmJiBhZiAhPSBBRl9VTlNQRUMpIHsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PU0Vycm9yLApAQCAtOTIxLDIwICs4MjcsNTMgQEAKICAgICAgICAgc2luLT5zaW5fYWRkci5zX2FkZHIgPSBJTkFERFJfQlJPQURDQVNUOwogICAgICAgICByZXR1cm4gc2l6ZW9mKHNpbi0+c2luX2FkZHIpOwogICAgIH0KLSAgICBpZiAoc3NjYW5mKG5hbWUsICIlZC4lZC4lZC4lZCVjIiwgJmQxLCAmZDIsICZkMywgJmQ0LCAmY2gpID09IDQgJiYKLSAgICAgICAgMCA8PSBkMSAmJiBkMSA8PSAyNTUgJiYgMCA8PSBkMiAmJiBkMiA8PSAyNTUgJiYKLSAgICAgICAgMCA8PSBkMyAmJiBkMyA8PSAyNTUgJiYgMCA8PSBkNCAmJiBkNCA8PSAyNTUpIHsKLSAgICAgICAgc3RydWN0IHNvY2thZGRyX2luICpzaW47Ci0gICAgICAgIHNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilhZGRyX3JldDsKLSAgICAgICAgc2luLT5zaW5fYWRkci5zX2FkZHIgPSBodG9ubCgKLSAgICAgICAgICAgICgobG9uZykgZDEgPDwgMjQpIHwgKChsb25nKSBkMiA8PCAxNikgfAotICAgICAgICAgICAgKChsb25nKSBkMyA8PCA4KSB8ICgobG9uZykgZDQgPDwgMCkpOwotICAgICAgICBzaW4tPnNpbl9mYW1pbHkgPSBBRl9JTkVUOworCisgICAgLyogYXZvaWQgYSBuYW1lIHJlc29sdXRpb24gaW4gY2FzZSBvZiBudW1lcmljIGFkZHJlc3MgKi8KKyNpZmRlZiBIQVZFX0lORVRfUFRPTgorICAgIC8qIGNoZWNrIGZvciBhbiBJUHY0IGFkZHJlc3MgKi8KKyAgICBpZiAoYWYgPT0gQUZfVU5TUEVDIHx8IGFmID09IEFGX0lORVQpIHsKKyAgICAgICAgc3RydWN0IHNvY2thZGRyX2luICpzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopYWRkcl9yZXQ7CisgICAgICAgIG1lbXNldChzaW4sIDAsIHNpemVvZigqc2luKSk7CisgICAgICAgIGlmIChpbmV0X3B0b24oQUZfSU5FVCwgbmFtZSwgJnNpbi0+c2luX2FkZHIpID4gMCkgeworICAgICAgICAgICAgc2luLT5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKICNpZmRlZiBIQVZFX1NPQ0tBRERSX1NBX0xFTgotICAgICAgICBzaW4tPnNpbl9sZW4gPSBzaXplb2YoKnNpbik7CisgICAgICAgICAgICBzaW4tPnNpbl9sZW4gPSBzaXplb2YoKnNpbik7CiAjZW5kaWYKLSAgICAgICAgcmV0dXJuIDQ7CisgICAgICAgICAgICByZXR1cm4gNDsKKyAgICAgICAgfQogICAgIH0KKyNpZmRlZiBFTkFCTEVfSVBWNgorICAgIC8qIGNoZWNrIGZvciBhbiBJUHY2IGFkZHJlc3MgLSBpZiB0aGUgYWRkcmVzcyBjb250YWlucyBhIHNjb3BlIElELCB3ZQorICAgICAqIGZhbGxiYWNrIHRvIGdldGFkZHJpbmZvKCksIHdoaWNoIGNhbiBoYW5kbGUgdHJhbnNsYXRpb24gZnJvbSBpbnRlcmZhY2UKKyAgICAgKiBuYW1lIHRvIGludGVyZmFjZSBpbmRleCAqLworICAgIGlmICgoYWYgPT0gQUZfVU5TUEVDIHx8IGFmID09IEFGX0lORVQ2KSAmJiAhc3RyY2hyKG5hbWUsICclJykpIHsKKyAgICAgICAgc3RydWN0IHNvY2thZGRyX2luNiAqc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilhZGRyX3JldDsKKyAgICAgICAgbWVtc2V0KHNpbiwgMCwgc2l6ZW9mKCpzaW4pKTsKKyAgICAgICAgaWYgKGluZXRfcHRvbihBRl9JTkVUNiwgbmFtZSwgJnNpbi0+c2luNl9hZGRyKSA+IDApIHsKKyAgICAgICAgICAgIHNpbi0+c2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKKyNpZmRlZiBIQVZFX1NPQ0tBRERSX1NBX0xFTgorICAgICAgICAgICAgc2luLT5zaW42X2xlbiA9IHNpemVvZigqc2luKTsKKyNlbmRpZgorICAgICAgICAgICAgcmV0dXJuIDE2OworICAgICAgICB9CisgICAgfQorI2VuZGlmIC8qIEVOQUJMRV9JUFY2ICovCisjZWxzZSAvKiBIQVZFX0lORVRfUFRPTiAqLworICAgIC8qIGNoZWNrIGZvciBhbiBJUHY0IGFkZHJlc3MgKi8KKyAgICBpZiAoYWYgPT0gQUZfSU5FVCB8fCBhZiA9PSBBRl9VTlNQRUMpIHsKKyAgICAgICAgc3RydWN0IHNvY2thZGRyX2luICpzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopYWRkcl9yZXQ7CisgICAgICAgIG1lbXNldChzaW4sIDAsIHNpemVvZigqc2luKSk7CisgICAgICAgIGlmICgoc2luLT5zaW5fYWRkci5zX2FkZHIgPSBpbmV0X2FkZHIobmFtZSkpICE9IElOQUREUl9OT05FKSB7CisgICAgICAgICAgICBzaW4tPnNpbl9mYW1pbHkgPSBBRl9JTkVUOworI2lmZGVmIEhBVkVfU09DS0FERFJfU0FfTEVOCisgICAgICAgICAgICBzaW4tPnNpbl9sZW4gPSBzaXplb2YoKnNpbik7CisjZW5kaWYKKyAgICAgICAgICAgIHJldHVybiA0OworICAgICAgICB9CisgICAgfQorI2VuZGlmIC8qIEhBVkVfSU5FVF9QVE9OICovCisKKyAgICAvKiBwZXJmb3JtIGEgbmFtZSByZXNvbHV0aW9uICovCiAgICAgbWVtc2V0KCZoaW50cywgMCwgc2l6ZW9mKGhpbnRzKSk7CiAgICAgaGludHMuYWlfZmFtaWx5ID0gYWY7CiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwpAQCAtMTIyNiw3ICsxMTY1LDcgQEAKICAgICB9CiAjZW5kaWYKIAotI2lmZGVmIEhBVkVfTElOVVhfQ0FOX0gKKyNpZmRlZiBBRl9DQU4KICAgICBjYXNlIEFGX0NBTjoKICAgICB7CiAgICAgICAgIHN0cnVjdCBzb2NrYWRkcl9jYW4gKmEgPSAoc3RydWN0IHNvY2thZGRyX2NhbiAqKWFkZHI7CkBAIC0xMzI5LDExICsxMjY4LDcgQEAKICAgICAgICAgfQogICAgICAgICBhZGRyLT5zdW5fZmFtaWx5ID0gcy0+c29ja19mYW1pbHk7CiAgICAgICAgIG1lbWNweShhZGRyLT5zdW5fcGF0aCwgcGF0aCwgbGVuKTsKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKQotICAgICAgICAqbGVuX3JldCA9IHNpemVvZigqYWRkcik7Ci0jZWxzZQogICAgICAgICAqbGVuX3JldCA9IGxlbiArIG9mZnNldG9mKHN0cnVjdCBzb2NrYWRkcl91biwgc3VuX3BhdGgpOwotI2VuZGlmCiAgICAgICAgIHJldHZhbCA9IDE7CiAgICAgdW5peF9vdXQ6CiAgICAgICAgIFB5X0RFQ1JFRihhcmdzKTsKQEAgLTE2NTQsMTAgKzE1ODksMTIgQEAKICAgICB9CiAjZW5kaWYKIAotI2lmZGVmIEhBVkVfTElOVVhfQ0FOX0gKKyNpZiBkZWZpbmVkKEFGX0NBTikgJiYgZGVmaW5lZChDQU5fUkFXKSAmJiBkZWZpbmVkKENBTl9CQ00pCiAgICAgY2FzZSBBRl9DQU46CiAgICAgICAgIHN3aXRjaCAocy0+c29ja19wcm90bykgewogICAgICAgICBjYXNlIENBTl9SQVc6CisgICAgICAgIC8qIGZhbGwtdGhyb3VnaCAqLworICAgICAgICBjYXNlIENBTl9CQ006CiAgICAgICAgIHsKICAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkcl9jYW4gKmFkZHI7CiAgICAgICAgICAgICBQeU9iamVjdCAqaW50ZXJmYWNlTmFtZTsKQEAgLTE4NTksNyArMTc5Niw3IEBACiAgICAgfQogI2VuZGlmCiAKLSNpZmRlZiBIQVZFX0xJTlVYX0NBTl9ICisjaWZkZWYgQUZfQ0FOCiAgICAgY2FzZSBBRl9DQU46CiAgICAgewogICAgICAgICAqbGVuX3JldCA9IHNpemVvZiAoc3RydWN0IHNvY2thZGRyX2Nhbik7CkBAIC0xOTQ4LDggKzE4ODUsMjIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoY21zZ2gtPmNtc2dfbGVuKSk7CiAKICAgICAvKiBOb3RlIHRoYXQgUE9TSVggYWxsb3dzIG1zZ19jb250cm9sbGVuIHRvIGJlIG9mIHNpZ25lZCB0eXBlLiAqLwotICAgIGlmIChjbXNnaCA9PSBOVUxMIHx8IG1zZy0+bXNnX2NvbnRyb2wgPT0gTlVMTCB8fCBtc2ctPm1zZ19jb250cm9sbGVuIDwgMCkKKyAgICBpZiAoY21zZ2ggPT0gTlVMTCB8fCBtc2ctPm1zZ19jb250cm9sID09IE5VTEwpCiAgICAgICAgIHJldHVybiAwOworICAgIC8qIE5vdGUgdGhhdCBQT1NJWCBhbGxvd3MgbXNnX2NvbnRyb2xsZW4gdG8gYmUgb2YgYSBzaWduZWQgdHlwZS4gVGhpcyBpcworICAgICAgIGFubm95aW5nIHVuZGVyIE9TIFggYXMgaXQncyB1bnNpZ25lZCB0aGVyZSBhbmQgc28gaXQgdHJpZ2dlcnMgYQorICAgICAgIHRhdXRvbG9naWNhbCBjb21wYXJpc29uIHdhcm5pbmcgdW5kZXIgQ2xhbmcgd2hlbiBjb21wYXJlZCBhZ2FpbnN0IDAuCisgICAgICAgU2luY2UgdGhlIGNoZWNrIGlzIHZhbGlkIG9uIG90aGVyIHBsYXRmb3Jtcywgc2lsZW5jZSB0aGUgd2FybmluZyB1bmRlcgorICAgICAgIENsYW5nLiAqLworICAgICNpZmRlZiBfX2NsYW5nX18KKyAgICAjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAorICAgICNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV3RhdXRvbG9naWNhbC1jb21wYXJlIgorICAgICNlbmRpZgorICAgIGlmIChtc2ctPm1zZ19jb250cm9sbGVuIDwgMCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgI2lmZGVmIF9fY2xhbmdfXworICAgICNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AKKyAgICAjZW5kaWYKICAgICBpZiAoc3BhY2UgPCBjbXNnX2xlbl9lbmQpCiAgICAgICAgIHNwYWNlID0gY21zZ19sZW5fZW5kOwogICAgIGNtc2dfb2Zmc2V0ID0gKGNoYXIgKiljbXNnaCAtIChjaGFyICopbXNnLT5tc2dfY29udHJvbDsKQEAgLTIwMTYsNiArMTk2NywxMSBAQAogICAgIFB5T2JqZWN0ICphZGRyID0gTlVMTDsKICAgICBQeU9iamVjdCAqcmVzID0gTlVMTDsKICAgICBpbnQgdGltZW91dDsKKyNpZiBkZWZpbmVkKEhBVkVfQUNDRVBUNCkgJiYgZGVmaW5lZChTT0NLX0NMT0VYRUMpCisgICAgLyogYWNjZXB0NCgpIGlzIGF2YWlsYWJsZSBvbiBMaW51eCAyLjYuMjgrIGFuZCBnbGliYyAyLjEwICovCisgICAgc3RhdGljIGludCBhY2NlcHQ0X3dvcmtzID0gLTE7CisjZW5kaWYKKwogICAgIGlmICghZ2V0c29ja2FkZHJsZW4ocywgJmFkZHJsZW4pKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBtZW1zZXQoJmFkZHJidWYsIDAsIGFkZHJsZW4pOwpAQCAtMjAyNCwxMCArMTk4MCwyNCBAQAogICAgICAgICByZXR1cm4gc2VsZWN0X2Vycm9yKCk7CiAKICAgICBCRUdJTl9TRUxFQ1RfTE9PUChzKQorCiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgIHRpbWVvdXQgPSBpbnRlcm5hbF9zZWxlY3RfZXgocywgMCwgaW50ZXJ2YWwpOwogICAgIGlmICghdGltZW91dCkgeworI2lmIGRlZmluZWQoSEFWRV9BQ0NFUFQ0KSAmJiBkZWZpbmVkKFNPQ0tfQ0xPRVhFQykKKyAgICAgICAgaWYgKGFjY2VwdDRfd29ya3MgIT0gMCkgeworICAgICAgICAgICAgbmV3ZmQgPSBhY2NlcHQ0KHMtPnNvY2tfZmQsIFNBUzJTQSgmYWRkcmJ1ZiksICZhZGRybGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNPQ0tfQ0xPRVhFQyk7CisgICAgICAgICAgICBpZiAobmV3ZmQgPT0gSU5WQUxJRF9TT0NLRVQgJiYgYWNjZXB0NF93b3JrcyA9PSAtMSkgeworICAgICAgICAgICAgICAgIC8qIE9uIExpbnV4IG9sZGVyIHRoYW4gMi42LjI4LCBhY2NlcHQ0KCkgZmFpbHMgd2l0aCBFTk9TWVMgKi8KKyAgICAgICAgICAgICAgICBhY2NlcHQ0X3dvcmtzID0gKGVycm5vICE9IEVOT1NZUyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGFjY2VwdDRfd29ya3MgPT0gMCkKKyAgICAgICAgICAgIG5ld2ZkID0gYWNjZXB0KHMtPnNvY2tfZmQsIFNBUzJTQSgmYWRkcmJ1ZiksICZhZGRybGVuKTsKKyNlbHNlCiAgICAgICAgIG5ld2ZkID0gYWNjZXB0KHMtPnNvY2tfZmQsIFNBUzJTQSgmYWRkcmJ1ZiksICZhZGRybGVuKTsKKyNlbmRpZgogICAgIH0KICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCkBAIC0yMDQwLDYgKzIwMTAsMjUgQEAKICAgICBpZiAobmV3ZmQgPT0gSU5WQUxJRF9TT0NLRVQpCiAgICAgICAgIHJldHVybiBzLT5lcnJvcmhhbmRsZXIoKTsKIAorI2lmZGVmIE1TX1dJTkRPV1MKKyAgICBpZiAoIVNldEhhbmRsZUluZm9ybWF0aW9uKChIQU5ETEUpbmV3ZmQsIEhBTkRMRV9GTEFHX0lOSEVSSVQsIDApKSB7CisgICAgICAgIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKDApOworICAgICAgICBTT0NLRVRDTE9TRShuZXdmZCk7CisgICAgICAgIGdvdG8gZmluYWxseTsKKyAgICB9CisjZWxzZQorCisjaWYgZGVmaW5lZChIQVZFX0FDQ0VQVDQpICYmIGRlZmluZWQoU09DS19DTE9FWEVDKQorICAgIGlmICghYWNjZXB0NF93b3JrcykKKyNlbmRpZgorICAgIHsKKyAgICAgICAgaWYgKF9QeV9zZXRfaW5oZXJpdGFibGUobmV3ZmQsIDAsIE5VTEwpIDwgMCkgeworICAgICAgICAgICAgU09DS0VUQ0xPU0UobmV3ZmQpOworICAgICAgICAgICAgZ290byBmaW5hbGx5OworICAgICAgICB9CisgICAgfQorI2VuZGlmCisKICAgICBzb2NrID0gUHlMb25nX0Zyb21Tb2NrZXRfdChuZXdmZCk7CiAgICAgaWYgKHNvY2sgPT0gTlVMTCkgewogICAgICAgICBTT0NLRVRDTE9TRShuZXdmZCk7CkBAIC0yMjE5LDEzICsyMjA4LDcgQEAKICAgICAgICAgICAgIHJldHVybiBzLT5lcnJvcmhhbmRsZXIoKTsKICAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZyhmbGFnKTsKICAgICB9Ci0jaWZkZWYgX19WTVMKLSAgICAvKiBzb2NrbGVuX3QgaXMgdW5zaWduZWQgc28gbm8gbmVnYXRpdmUgdGVzdCBpcyBuZWVkZWQsCi0gICAgICAgdGVzdCBidWZsZW4gPT0gMCBpcyBwcmV2aW91c2x5IGRvbmUgKi8KLSAgICBpZiAoYnVmbGVuID4gMTAyNCkgewotI2Vsc2UKICAgICBpZiAoYnVmbGVuIDw9IDAgfHwgYnVmbGVuID4gMTAyNCkgewotI2VuZGlmCiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PU0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgImdldHNvY2tvcHQgYnVmbGVuIG91dCBvZiByYW5nZSIpOwogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTIzMTQsOCArMjI5Nyw4IEBACiBQeURvY19TVFJWQVIoZGV0YWNoX2RvYywKICJkZXRhY2goKVxuXAogXG5cCi1DbG9zZSB0aGUgc29ja2V0IG9iamVjdCB3aXRob3V0IGNsb3NpbmcgdGhlIHVuZGVybHlpbmcgZmlsZSBkZXNjcmlwdG9yLlwKLVRoZSBvYmplY3QgY2Fubm90IGJlIHVzZWQgYWZ0ZXIgdGhpcyBjYWxsLCBidXQgdGhlIGZpbGUgZGVzY3JpcHRvclwKK0Nsb3NlIHRoZSBzb2NrZXQgb2JqZWN0IHdpdGhvdXQgY2xvc2luZyB0aGUgdW5kZXJseWluZyBmaWxlIGRlc2NyaXB0b3IuXG5cCitUaGUgb2JqZWN0IGNhbm5vdCBiZSB1c2VkIGFmdGVyIHRoaXMgY2FsbCwgYnV0IHRoZSBmaWxlIGRlc2NyaXB0b3JcblwKIGNhbiBiZSByZXVzZWQgZm9yIG90aGVyIHB1cnBvc2VzLiAgVGhlIGZpbGUgZGVzY3JpcHRvciBpcyByZXR1cm5lZC4iKTsKIAogc3RhdGljIGludApAQCAtMjU5NSwxMCArMjU3OCw2IEBACiB7CiAgICAgUHlfc3NpemVfdCBvdXRsZW4gPSAtMTsKICAgICBpbnQgdGltZW91dDsKLSNpZmRlZiBfX1ZNUwotICAgIGludCByZW1haW5pbmc7Ci0gICAgY2hhciAqcmVhZF9idWY7Ci0jZW5kaWYKIAogICAgIGlmICghSVNfU0VMRUNUQUJMRShzKSkgewogICAgICAgICBzZWxlY3RfZXJyb3IoKTsKQEAgLTI2MDksMTIgKzI1ODgsMTggQEAKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0jaWZuZGVmIF9fVk1TCiAgICAgQkVHSU5fU0VMRUNUX0xPT1AocykKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgdGltZW91dCA9IGludGVybmFsX3NlbGVjdF9leChzLCAwLCBpbnRlcnZhbCk7Ci0gICAgaWYgKCF0aW1lb3V0KQorICAgIGlmICghdGltZW91dCkgeworI2lmZGVmIE1TX1dJTkRPV1MKKyAgICAgICAgaWYgKGxlbiA+IElOVF9NQVgpCisgICAgICAgICAgICBsZW4gPSBJTlRfTUFYOworICAgICAgICBvdXRsZW4gPSByZWN2KHMtPnNvY2tfZmQsIGNidWYsIChpbnQpbGVuLCBmbGFncyk7CisjZWxzZQogICAgICAgICBvdXRsZW4gPSByZWN2KHMtPnNvY2tfZmQsIGNidWYsIGxlbiwgZmxhZ3MpOworI2VuZGlmCisgICAgfQogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKICAgICBpZiAodGltZW91dCA9PSAxKSB7CkBAIC0yNjI4LDQ4ICsyNjEzLDYgQEAKICAgICAgICAgcy0+ZXJyb3JoYW5kbGVyKCk7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9Ci0jZWxzZQotICAgIHJlYWRfYnVmID0gY2J1ZjsKLSAgICByZW1haW5pbmcgPSBsZW47Ci0gICAgd2hpbGUgKHJlbWFpbmluZyAhPSAwKSB7Ci0gICAgICAgIHVuc2lnbmVkIGludCBzZWdtZW50OwotICAgICAgICBpbnQgbnJlYWQgPSAtMTsKLQotICAgICAgICBzZWdtZW50ID0gcmVtYWluaW5nIC9TRUdNRU5UX1NJWkU7Ci0gICAgICAgIGlmIChzZWdtZW50ICE9IDApIHsKLSAgICAgICAgICAgIHNlZ21lbnQgPSBTRUdNRU5UX1NJWkU7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBzZWdtZW50ID0gcmVtYWluaW5nOwotICAgICAgICB9Ci0KLSAgICAgICAgQkVHSU5fU0VMRUNUX0xPT1AocykKLSAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgICAgICB0aW1lb3V0ID0gaW50ZXJuYWxfc2VsZWN0X2V4KHMsIDAsIGludGVydmFsKTsKLSAgICAgICAgaWYgKCF0aW1lb3V0KQotICAgICAgICAgICAgbnJlYWQgPSByZWN2KHMtPnNvY2tfZmQsIHJlYWRfYnVmLCBzZWdtZW50LCBmbGFncyk7Ci0gICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCi0gICAgICAgIGlmICh0aW1lb3V0ID09IDEpIHsKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhzb2NrZXRfdGltZW91dCwgInRpbWVkIG91dCIpOwotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9Ci0gICAgICAgIEVORF9TRUxFQ1RfTE9PUChzKQotCi0gICAgICAgIGlmIChucmVhZCA8IDApIHsKLSAgICAgICAgICAgIHMtPmVycm9yaGFuZGxlcigpOwotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9Ci0gICAgICAgIGlmIChucmVhZCAhPSByZW1haW5pbmcpIHsKLSAgICAgICAgICAgIHJlYWRfYnVmICs9IG5yZWFkOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICByZW1haW5pbmcgLT0gc2VnbWVudDsKLSAgICAgICAgcmVhZF9idWYgKz0gc2VnbWVudDsKLSAgICB9Ci0gICAgb3V0bGVuID0gcmVhZF9idWYgLSBjYnVmOwotI2VuZGlmIC8qICFfX1ZNUyAqLwotCiAgICAgcmV0dXJuIG91dGxlbjsKIH0KIApAQCAtMjgyMCwxNCArMjc2MywxMSBAQAogICAgIG1lbXNldCgmYWRkcmJ1ZiwgMCwgYWRkcmxlbik7CiAgICAgdGltZW91dCA9IGludGVybmFsX3NlbGVjdF9leChzLCAwLCBpbnRlcnZhbCk7CiAgICAgaWYgKCF0aW1lb3V0KSB7Ci0jaWZuZGVmIE1TX1dJTkRPV1MKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKSAmJiAhZGVmaW5lZChQWUNDX0dDQykKLSAgICAgICAgbiA9IHJlY3Zmcm9tKHMtPnNvY2tfZmQsIGNidWYsIGxlbiwgZmxhZ3MsCi0gICAgICAgICAgICAgICAgICAgICBTQVMyU0EoJmFkZHJidWYpLCAmYWRkcmxlbik7Ci0jZWxzZQotICAgICAgICBuID0gcmVjdmZyb20ocy0+c29ja19mZCwgY2J1ZiwgbGVuLCBmbGFncywKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgICAgIGlmIChsZW4gPiBJTlRfTUFYKQorICAgICAgICAgICAgbGVuID0gSU5UX01BWDsKKyAgICAgICAgbiA9IHJlY3Zmcm9tKHMtPnNvY2tfZmQsIGNidWYsIChpbnQpbGVuLCBmbGFncywKICAgICAgICAgICAgICAgICAgICAgICh2b2lkICopICZhZGRyYnVmLCAmYWRkcmxlbik7Ci0jZW5kaWYKICNlbHNlCiAgICAgICAgIG4gPSByZWN2ZnJvbShzLT5zb2NrX2ZkLCBjYnVmLCBsZW4sIGZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgU0FTMlNBKCZhZGRyYnVmKSwgJmFkZHJsZW4pOwpAQCAtMzMwOSwxMiArMzI0OSwxNSBAQAogICAgIEJFR0lOX1NFTEVDVF9MT09QKHMpCiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgIHRpbWVvdXQgPSBpbnRlcm5hbF9zZWxlY3RfZXgocywgMSwgaW50ZXJ2YWwpOwotICAgIGlmICghdGltZW91dCkKLSNpZmRlZiBfX1ZNUwotICAgICAgICBuID0gc2VuZHNlZ21lbnRlZChzLT5zb2NrX2ZkLCBidWYsIGxlbiwgZmxhZ3MpOworICAgIGlmICghdGltZW91dCkgeworI2lmZGVmIE1TX1dJTkRPV1MKKyAgICAgICAgaWYgKGxlbiA+IElOVF9NQVgpCisgICAgICAgICAgICBsZW4gPSBJTlRfTUFYOworICAgICAgICBuID0gc2VuZChzLT5zb2NrX2ZkLCBidWYsIChpbnQpbGVuLCBmbGFncyk7CiAjZWxzZQogICAgICAgICBuID0gc2VuZChzLT5zb2NrX2ZkLCBidWYsIGxlbiwgZmxhZ3MpOwogI2VuZGlmCisgICAgfQogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAgICAgaWYgKHRpbWVvdXQgPT0gMSkgewogICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYnVmKTsKQEAgLTMzNjIsOCArMzMwNSwxMCBAQAogICAgICAgICB0aW1lb3V0ID0gaW50ZXJuYWxfc2VsZWN0KHMsIDEpOwogICAgICAgICBuID0gLTE7CiAgICAgICAgIGlmICghdGltZW91dCkgewotI2lmZGVmIF9fVk1TCi0gICAgICAgICAgICBuID0gc2VuZHNlZ21lbnRlZChzLT5zb2NrX2ZkLCBidWYsIGxlbiwgZmxhZ3MpOworI2lmZGVmIE1TX1dJTkRPV1MKKyAgICAgICAgICAgIGlmIChsZW4gPiBJTlRfTUFYKQorICAgICAgICAgICAgICAgIGxlbiA9IElOVF9NQVg7CisgICAgICAgICAgICBuID0gc2VuZChzLT5zb2NrX2ZkLCBidWYsIChpbnQpbGVuLCBmbGFncyk7CiAjZWxzZQogICAgICAgICAgICAgbiA9IHNlbmQocy0+c29ja19mZCwgYnVmLCBsZW4sIGZsYWdzKTsKICNlbmRpZgpAQCAtMzQyMSw3ICszMzY2LDggQEAKICAgICBjaGFyICpidWY7CiAgICAgUHlfc3NpemVfdCBsZW4sIGFyZ2xlbjsKICAgICBzb2NrX2FkZHJfdCBhZGRyYnVmOwotICAgIGludCBhZGRybGVuLCBuID0gLTEsIGZsYWdzLCB0aW1lb3V0OworICAgIGludCBhZGRybGVuLCBmbGFncywgdGltZW91dDsKKyAgICBQeV9zc2l6ZV90IG4gPSAtMTsKIAogICAgIGZsYWdzID0gMDsKICAgICBhcmdsZW4gPSBQeVR1cGxlX1NpemUoYXJncyk7CkBAIC0zNDU4LDggKzM0MDQsMTcgQEAKICAgICBCRUdJTl9TRUxFQ1RfTE9PUChzKQogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICB0aW1lb3V0ID0gaW50ZXJuYWxfc2VsZWN0X2V4KHMsIDEsIGludGVydmFsKTsKLSAgICBpZiAoIXRpbWVvdXQpCi0gICAgICAgIG4gPSBzZW5kdG8ocy0+c29ja19mZCwgYnVmLCBsZW4sIGZsYWdzLCBTQVMyU0EoJmFkZHJidWYpLCBhZGRybGVuKTsKKyAgICBpZiAoIXRpbWVvdXQpIHsKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgICAgIGlmIChsZW4gPiBJTlRfTUFYKQorICAgICAgICAgICAgbGVuID0gSU5UX01BWDsKKyAgICAgICAgbiA9IHNlbmR0byhzLT5zb2NrX2ZkLCBidWYsIChpbnQpbGVuLCBmbGFncywKKyAgICAgICAgICAgICAgICAgICBTQVMyU0EoJmFkZHJidWYpLCBhZGRybGVuKTsKKyNlbHNlCisgICAgICAgIG4gPSBzZW5kdG8ocy0+c29ja19mZCwgYnVmLCBsZW4sIGZsYWdzLAorICAgICAgICAgICAgICAgICAgIFNBUzJTQSgmYWRkcmJ1ZiksIGFkZHJsZW4pOworI2VuZGlmCisgICAgfQogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKICAgICBpZiAodGltZW91dCA9PSAxKSB7CkBAIC0zNTM5LDcgKzM0OTQsNyBAQAogICAgIGZvciAoOyBuZGF0YWJ1ZnMgPCBuZGF0YXBhcnRzOyBuZGF0YWJ1ZnMrKykgewogICAgICAgICBpZiAoIVB5QXJnX1BhcnNlKFB5U2VxdWVuY2VfRmFzdF9HRVRfSVRFTShkYXRhX2Zhc3QsIG5kYXRhYnVmcyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgInkqO3NlbmRtc2coKSBhcmd1bWVudCAxIG11c3QgYmUgYW4gaXRlcmFibGUgb2YgIgotICAgICAgICAgICAgICAgICAgICAgICAgICJidWZmZXItY29tcGF0aWJsZSBvYmplY3RzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiYnl0ZXMtbGlrZSBvYmplY3RzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAmZGF0YWJ1ZnNbbmRhdGFidWZzXSkpCiAgICAgICAgICAgICBnb3RvIGZpbmFsbHk7CiAgICAgICAgIGlvdnNbbmRhdGFidWZzXS5pb3ZfYmFzZSA9IGRhdGFidWZzW25kYXRhYnVmc10uYnVmOwpAQCAtMzY5NiwxMiArMzY1MSwxMiBAQAogU2VuZCBub3JtYWwgYW5kIGFuY2lsbGFyeSBkYXRhIHRvIHRoZSBzb2NrZXQsIGdhdGhlcmluZyB0aGVcblwKIG5vbi1hbmNpbGxhcnkgZGF0YSBmcm9tIGEgc2VyaWVzIG9mIGJ1ZmZlcnMgYW5kIGNvbmNhdGVuYXRpbmcgaXQgaW50b1xuXAogYSBzaW5nbGUgbWVzc2FnZS4gIFRoZSBidWZmZXJzIGFyZ3VtZW50IHNwZWNpZmllcyB0aGUgbm9uLWFuY2lsbGFyeVxuXAotZGF0YSBhcyBhbiBpdGVyYWJsZSBvZiBidWZmZXItY29tcGF0aWJsZSBvYmplY3RzIChlLmcuIGJ5dGVzIG9iamVjdHMpLlxuXAorZGF0YSBhcyBhbiBpdGVyYWJsZSBvZiBieXRlcy1saWtlIG9iamVjdHMgKGUuZy4gYnl0ZXMgb2JqZWN0cykuXG5cCiBUaGUgYW5jZGF0YSBhcmd1bWVudCBzcGVjaWZpZXMgdGhlIGFuY2lsbGFyeSBkYXRhIChjb250cm9sIG1lc3NhZ2VzKVxuXAogYXMgYW4gaXRlcmFibGUgb2YgemVybyBvciBtb3JlIHR1cGxlcyAoY21zZ19sZXZlbCwgY21zZ190eXBlLFxuXAogY21zZ19kYXRhKSwgd2hlcmUgY21zZ19sZXZlbCBhbmQgY21zZ190eXBlIGFyZSBpbnRlZ2VycyBzcGVjaWZ5aW5nIHRoZVxuXAogcHJvdG9jb2wgbGV2ZWwgYW5kIHByb3RvY29sLXNwZWNpZmljIHR5cGUgcmVzcGVjdGl2ZWx5LCBhbmQgY21zZ19kYXRhXG5cCi1pcyBhIGJ1ZmZlci1jb21wYXRpYmxlIG9iamVjdCBob2xkaW5nIHRoZSBhc3NvY2lhdGVkIGRhdGEuICBUaGUgZmxhZ3NcblwKK2lzIGEgYnl0ZXMtbGlrZSBvYmplY3QgaG9sZGluZyB0aGUgYXNzb2NpYXRlZCBkYXRhLiAgVGhlIGZsYWdzXG5cCiBhcmd1bWVudCBkZWZhdWx0cyB0byAwIGFuZCBoYXMgdGhlIHNhbWUgbWVhbmluZyBhcyBmb3Igc2VuZCgpLiAgSWZcblwKIGFkZHJlc3MgaXMgc3VwcGxpZWQgYW5kIG5vdCBOb25lLCBpdCBzZXRzIGEgZGVzdGluYXRpb24gYWRkcmVzcyBmb3JcblwKIHRoZSBtZXNzYWdlLiAgVGhlIHJldHVybiB2YWx1ZSBpcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIG9mIG5vbi1hbmNpbGxhcnlcblwKQEAgLTM5MTQsOCArMzg2OSwxMyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIHNvY2tfcmVwcihQeVNvY2tldFNvY2tPYmplY3QgKnMpCiB7CisgICAgbG9uZyBzb2NrX2ZkOworICAgIC8qIE9uIFdpbmRvd3MsIHRoaXMgdGVzdCBpcyBuZWVkZWQgYmVjYXVzZSBTT0NLRVRfVCBpcyB1bnNpZ25lZCAqLworICAgIGlmIChzLT5zb2NrX2ZkID09IElOVkFMSURfU09DS0VUKSB7CisgICAgICAgIHNvY2tfZmQgPSAtMTsKKyAgICB9CiAjaWYgU0laRU9GX1NPQ0tFVF9UID4gU0laRU9GX0xPTkcKLSAgICBpZiAocy0+c29ja19mZCA+IExPTkdfTUFYKSB7CisgICAgZWxzZSBpZiAocy0+c29ja19mZCA+IExPTkdfTUFYKSB7CiAgICAgICAgIC8qIHRoaXMgY2FuIG9jY3VyIG9uIFdpbjY0LCBhbmQgYWN0dWFsbHkgdGhlcmUgaXMgYSBzcGVjaWFsCiAgICAgICAgICAgIHVnbHkgcHJpbnRmIGZvcm1hdHRlciBmb3IgZGVjaW1hbCBwb2ludGVyIGxlbmd0aCBpbnRlZ2VyCiAgICAgICAgICAgIHByaW50aW5nLCBvbmx5IGJvdGhlciBpZiBuZWNlc3NhcnkqLwpAQCAtMzkyNSw5ICszODg1LDExIEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICNlbmRpZgorICAgIGVsc2UKKyAgICAgICAgc29ja19mZCA9IChsb25nKXMtPnNvY2tfZmQ7CiAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tRm9ybWF0KAogICAgICAgICAiPHNvY2tldCBvYmplY3QsIGZkPSVsZCwgZmFtaWx5PSVkLCB0eXBlPSVkLCBwcm90bz0lZD4iLAotICAgICAgICAobG9uZylzLT5zb2NrX2ZkLCBzLT5zb2NrX2ZhbWlseSwKKyAgICAgICAgc29ja19mZCwgcy0+c29ja19mYW1pbHksCiAgICAgICAgIHMtPnNvY2tfdHlwZSwKICAgICAgICAgcy0+c29ja19wcm90byk7CiB9CkBAIC0zOTUyLDYgKzM5MTQsMTIgQEAKIAogLyogSW5pdGlhbGl6ZSBhIG5ldyBzb2NrZXQgb2JqZWN0LiAqLwogCisjaWZkZWYgU09DS19DTE9FWEVDCisvKiBzb2NrZXQoKSBhbmQgc29ja2V0cGFpcigpIGZhaWwgd2l0aCBFSU5WQUwgb24gTGludXgga2VybmVsIG9sZGVyCisgKiB0aGFuIDIuNi4yNyBpZiBTT0NLX0NMT0VYRUMgZmxhZyBpcyBzZXQgaW4gdGhlIHNvY2tldCB0eXBlLiAqLworc3RhdGljIGludCBzb2NrX2Nsb2V4ZWNfd29ya3MgPSAtMTsKKyNlbmRpZgorCiAvKkFSR1NVU0VEKi8KIHN0YXRpYyBpbnQKIHNvY2tfaW5pdG9iaihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQpAQCAtMzk2MSw2ICszOTI5LDEzIEBACiAgICAgU09DS0VUX1QgZmQgPSBJTlZBTElEX1NPQ0tFVDsKICAgICBpbnQgZmFtaWx5ID0gQUZfSU5FVCwgdHlwZSA9IFNPQ0tfU1RSRUFNLCBwcm90byA9IDA7CiAgICAgc3RhdGljIGNoYXIgKmtleXdvcmRzW10gPSB7ImZhbWlseSIsICJ0eXBlIiwgInByb3RvIiwgImZpbGVubyIsIDB9OworI2lmbmRlZiBNU19XSU5ET1dTCisjaWZkZWYgU09DS19DTE9FWEVDCisgICAgaW50ICphdG9taWNfZmxhZ193b3JrcyA9ICZzb2NrX2Nsb2V4ZWNfd29ya3M7CisjZWxzZQorICAgIGludCAqYXRvbWljX2ZsYWdfd29ya3MgPSBOVUxMOworI2VuZGlmCisjZW5kaWYKIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInxpaWlPOnNvY2tldCIsIGtleXdvcmRzLApAQCAtNDAwNSwxNCArMzk4MCw3NCBAQAogICAgICAgICB9CiAgICAgfQogICAgIGVsc2UgeworI2lmZGVmIE1TX1dJTkRPV1MKKyAgICAgICAgLyogV2luZG93cyBpbXBsZW1lbnRhdGlvbiAqLworI2lmbmRlZiBXU0FfRkxBR19OT19IQU5ETEVfSU5IRVJJVAorI2RlZmluZSBXU0FfRkxBR19OT19IQU5ETEVfSU5IRVJJVCAweDgwCisjZW5kaWYKKwogICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgICAgIGZkID0gc29ja2V0KGZhbWlseSwgdHlwZSwgcHJvdG8pOworICAgICAgICBpZiAoc3VwcG9ydF93c2Ffbm9faW5oZXJpdCkgeworICAgICAgICAgICAgZmQgPSBXU0FTb2NrZXQoZmFtaWx5LCB0eXBlLCBwcm90bywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBXU0FfRkxBR19PVkVSTEFQUEVEIHwgV1NBX0ZMQUdfTk9fSEFORExFX0lOSEVSSVQpOworICAgICAgICAgICAgaWYgKGZkID09IElOVkFMSURfU09DS0VUKSB7CisgICAgICAgICAgICAgICAgLyogV2luZG93cyA3IG9yIFdpbmRvd3MgMjAwOCBSMiB3aXRob3V0IFNQMSBvciB0aGUgaG90Zml4ICovCisgICAgICAgICAgICAgICAgc3VwcG9ydF93c2Ffbm9faW5oZXJpdCA9IDA7CisgICAgICAgICAgICAgICAgZmQgPSBzb2NrZXQoZmFtaWx5LCB0eXBlLCBwcm90byk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBmZCA9IHNvY2tldChmYW1pbHksIHR5cGUsIHByb3RvKTsKKyAgICAgICAgfQogICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCiAgICAgICAgIGlmIChmZCA9PSBJTlZBTElEX1NPQ0tFVCkgewogICAgICAgICAgICAgc2V0X2Vycm9yKCk7CiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KKworICAgICAgICBpZiAoIXN1cHBvcnRfd3NhX25vX2luaGVyaXQpIHsKKyAgICAgICAgICAgIGlmICghU2V0SGFuZGxlSW5mb3JtYXRpb24oKEhBTkRMRSlmZCwgSEFORExFX0ZMQUdfSU5IRVJJVCwgMCkpIHsKKyAgICAgICAgICAgICAgICBjbG9zZXNvY2tldChmZCk7CisgICAgICAgICAgICAgICAgUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoMCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICB9CisjZWxzZQorICAgICAgICAvKiBVTklYICovCisgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyNpZmRlZiBTT0NLX0NMT0VYRUMKKyAgICAgICAgaWYgKHNvY2tfY2xvZXhlY193b3JrcyAhPSAwKSB7CisgICAgICAgICAgICBmZCA9IHNvY2tldChmYW1pbHksIHR5cGUgfCBTT0NLX0NMT0VYRUMsIHByb3RvKTsKKyAgICAgICAgICAgIGlmIChzb2NrX2Nsb2V4ZWNfd29ya3MgPT0gLTEpIHsKKyAgICAgICAgICAgICAgICBpZiAoZmQgPj0gMCkgeworICAgICAgICAgICAgICAgICAgICBzb2NrX2Nsb2V4ZWNfd29ya3MgPSAxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChlcnJubyA9PSBFSU5WQUwpIHsKKyAgICAgICAgICAgICAgICAgICAgLyogTGludXggb2xkZXIgdGhhbiAyLjYuMjcgZG9lcyBub3Qgc3VwcG9ydCBTT0NLX0NMT0VYRUMgKi8KKyAgICAgICAgICAgICAgICAgICAgc29ja19jbG9leGVjX3dvcmtzID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZmQgPSBzb2NrZXQoZmFtaWx5LCB0eXBlLCBwcm90byk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyNlbmRpZgorICAgICAgICB7CisgICAgICAgICAgICBmZCA9IHNvY2tldChmYW1pbHksIHR5cGUsIHByb3RvKTsKKyAgICAgICAgfQorICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworCisgICAgICAgIGlmIChmZCA9PSBJTlZBTElEX1NPQ0tFVCkgeworICAgICAgICAgICAgc2V0X2Vycm9yKCk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKworICAgICAgICBpZiAoX1B5X3NldF9pbmhlcml0YWJsZShmZCwgMCwgYXRvbWljX2ZsYWdfd29ya3MpIDwgMCkgeworICAgICAgICAgICAgU09DS0VUQ0xPU0UoZmQpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisjZW5kaWYKICAgICB9CiAgICAgaW5pdF9zb2Nrb2JqZWN0KHMsIGZkLCBmYW1pbHksIHR5cGUsIHByb3RvKTsKIApAQCAtNDA5Miw5ICs0MTI3LDExIEBACiAKICAgICAvKiBNU0ROIHNheXMgRVJST1JfTU9SRV9EQVRBIG1heSBvY2N1ciBiZWNhdXNlIEROUyBhbGxvd3MgbG9uZ2VyCiAgICAgICAgbmFtZXMgKi8KLSAgICBuYW1lID0gUHlNZW1fTWFsbG9jKHNpemUgKiBzaXplb2Yod2NoYXJfdCkpOwotICAgIGlmICghbmFtZSkKKyAgICBuYW1lID0gUHlNZW1fTmV3KHdjaGFyX3QsIHNpemUpOworICAgIGlmICghbmFtZSkgeworICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAgICAgaWYgKCFHZXRDb21wdXRlck5hbWVFeFcoQ29tcHV0ZXJOYW1lUGh5c2ljYWxEbnNIb3N0bmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2l6ZSkpCkBAIC00NTc4LDE2ICs0NjE1LDM2IEBACiB7CiAgICAgU09DS0VUX1QgZmQsIG5ld2ZkOwogICAgIFB5T2JqZWN0ICpuZXdmZG9iajsKLQorI2lmZGVmIE1TX1dJTkRPV1MKKyAgICBXU0FQUk9UT0NPTF9JTkZPIGluZm87CisjZW5kaWYKIAogICAgIGZkID0gUHlMb25nX0FzU29ja2V0X3QoZmRvYmopOwogICAgIGlmIChmZCA9PSAoU09DS0VUX1QpKC0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIG5ld2ZkID0gZHVwX3NvY2tldChmZCk7CisjaWZkZWYgTVNfV0lORE9XUworICAgIGlmIChXU0FEdXBsaWNhdGVTb2NrZXQoZmQsIEdldEN1cnJlbnRQcm9jZXNzSWQoKSwgJmluZm8pKQorICAgICAgICByZXR1cm4gc2V0X2Vycm9yKCk7CisKKyAgICBuZXdmZCA9IFdTQVNvY2tldChGUk9NX1BST1RPQ09MX0lORk8sIEZST01fUFJPVE9DT0xfSU5GTywKKyAgICAgICAgICAgICAgICAgICAgICBGUk9NX1BST1RPQ09MX0lORk8sCisgICAgICAgICAgICAgICAgICAgICAgJmluZm8sIDAsIFdTQV9GTEFHX09WRVJMQVBQRUQpOwogICAgIGlmIChuZXdmZCA9PSBJTlZBTElEX1NPQ0tFVCkKICAgICAgICAgcmV0dXJuIHNldF9lcnJvcigpOwogCisgICAgaWYgKCFTZXRIYW5kbGVJbmZvcm1hdGlvbigoSEFORExFKW5ld2ZkLCBIQU5ETEVfRkxBR19JTkhFUklULCAwKSkgeworICAgICAgICBjbG9zZXNvY2tldChuZXdmZCk7CisgICAgICAgIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKDApOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisjZWxzZQorICAgIC8qIE9uIFVOSVgsIGR1cCBjYW4gYmUgdXNlZCB0byBkdXBsaWNhdGUgdGhlIGZpbGUgZGVzY3JpcHRvciBvZiBhIHNvY2tldCAqLworICAgIG5ld2ZkID0gX1B5X2R1cChmZCk7CisgICAgaWYgKG5ld2ZkID09IElOVkFMSURfU09DS0VUKQorICAgICAgICByZXR1cm4gTlVMTDsKKyNlbmRpZgorCiAgICAgbmV3ZmRvYmogPSBQeUxvbmdfRnJvbVNvY2tldF90KG5ld2ZkKTsKICAgICBpZiAobmV3ZmRvYmogPT0gTlVMTCkKICAgICAgICAgU09DS0VUQ0xPU0UobmV3ZmQpOwpAQCAtNDYxNSw2ICs0NjcyLDEyIEBACiAgICAgU09DS0VUX1Qgc3ZbMl07CiAgICAgaW50IGZhbWlseSwgdHlwZSA9IFNPQ0tfU1RSRUFNLCBwcm90byA9IDA7CiAgICAgUHlPYmplY3QgKnJlcyA9IE5VTEw7CisjaWZkZWYgU09DS19DTE9FWEVDCisgICAgaW50ICphdG9taWNfZmxhZ193b3JrcyA9ICZzb2NrX2Nsb2V4ZWNfd29ya3M7CisjZWxzZQorICAgIGludCAqYXRvbWljX2ZsYWdfd29ya3MgPSBOVUxMOworI2VuZGlmCisgICAgaW50IHJldDsKIAogI2lmIGRlZmluZWQoQUZfVU5JWCkKICAgICBmYW1pbHkgPSBBRl9VTklYOwpAQCAtNDYyNCw5ICs0Njg3LDM4IEBACiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8aWlpOnNvY2tldHBhaXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAmZmFtaWx5LCAmdHlwZSwgJnByb3RvKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CisKICAgICAvKiBDcmVhdGUgYSBwYWlyIG9mIHNvY2tldCBmZHMgKi8KLSAgICBpZiAoc29ja2V0cGFpcihmYW1pbHksIHR5cGUsIHByb3RvLCBzdikgPCAwKQorICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyNpZmRlZiBTT0NLX0NMT0VYRUMKKyAgICBpZiAoc29ja19jbG9leGVjX3dvcmtzICE9IDApIHsKKyAgICAgICAgcmV0ID0gc29ja2V0cGFpcihmYW1pbHksIHR5cGUgfCBTT0NLX0NMT0VYRUMsIHByb3RvLCBzdik7CisgICAgICAgIGlmIChzb2NrX2Nsb2V4ZWNfd29ya3MgPT0gLTEpIHsKKyAgICAgICAgICAgIGlmIChyZXQgPj0gMCkgeworICAgICAgICAgICAgICAgIHNvY2tfY2xvZXhlY193b3JrcyA9IDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChlcnJubyA9PSBFSU5WQUwpIHsKKyAgICAgICAgICAgICAgICAvKiBMaW51eCBvbGRlciB0aGFuIDIuNi4yNyBkb2VzIG5vdCBzdXBwb3J0IFNPQ0tfQ0xPRVhFQyAqLworICAgICAgICAgICAgICAgIHNvY2tfY2xvZXhlY193b3JrcyA9IDA7CisgICAgICAgICAgICAgICAgcmV0ID0gc29ja2V0cGFpcihmYW1pbHksIHR5cGUsIHByb3RvLCBzdik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorI2VuZGlmCisgICAgeworICAgICAgICByZXQgPSBzb2NrZXRwYWlyKGZhbWlseSwgdHlwZSwgcHJvdG8sIHN2KTsKKyAgICB9CisgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKworICAgIGlmIChyZXQgPCAwKQogICAgICAgICByZXR1cm4gc2V0X2Vycm9yKCk7CisKKyAgICBpZiAoX1B5X3NldF9pbmhlcml0YWJsZShzdlswXSwgMCwgYXRvbWljX2ZsYWdfd29ya3MpIDwgMCkKKyAgICAgICAgZ290byBmaW5hbGx5OworICAgIGlmIChfUHlfc2V0X2luaGVyaXRhYmxlKHN2WzFdLCAwLCBhdG9taWNfZmxhZ193b3JrcykgPCAwKQorICAgICAgICBnb3RvIGZpbmFsbHk7CisKICAgICBzMCA9IG5ld19zb2Nrb2JqZWN0KHN2WzBdLCBmYW1pbHksIHR5cGUsIHByb3RvKTsKICAgICBpZiAoczAgPT0gTlVMTCkKICAgICAgICAgZ290byBmaW5hbGx5OwpAQCAtNDY0OCw3ICs0NzQwLDcgQEAKIH0KIAogUHlEb2NfU1RSVkFSKHNvY2tldHBhaXJfZG9jLAotInNvY2tldHBhaXIoW2ZhbWlseVssIHR5cGVbLCBwcm90b11dXSkgLT4gKHNvY2tldCBvYmplY3QsIHNvY2tldCBvYmplY3QpXG5cCisic29ja2V0cGFpcihbZmFtaWx5WywgdHlwZSBbLCBwcm90b11dXSkgLT4gKHNvY2tldCBvYmplY3QsIHNvY2tldCBvYmplY3QpXG5cCiBcblwKIENyZWF0ZSBhIHBhaXIgb2Ygc29ja2V0IG9iamVjdHMgZnJvbSB0aGUgc29ja2V0cyByZXR1cm5lZCBieSB0aGUgcGxhdGZvcm1cblwKIHNvY2tldHBhaXIoKSBmdW5jdGlvbi5cblwKQEAgLTQ3ODIsOSArNDg3NCw2IEBACiBzdGF0aWMgUHlPYmplY3QqCiBzb2NrZXRfaW5ldF9hdG9uKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKLSNpZm5kZWYgSU5BRERSX05PTkUKLSNkZWZpbmUgSU5BRERSX05PTkUgKC0xKQotI2VuZGlmCiAjaWZkZWYgSEFWRV9JTkVUX0FUT04KICAgICBzdHJ1Y3QgaW5fYWRkciBidWY7CiAjZW5kaWYKQEAgLTQ4MjYsNyArNDkxNSw3IEBACiAgICAgLyogc3BlY2lhbC1jYXNlIHRoaXMgYWRkcmVzcyBhcyBpbmV0X2FkZHIgbWlnaHQgcmV0dXJuIElOQUREUl9OT05FCiAgICAgICogZm9yIHRoaXMgKi8KICAgICBpZiAoc3RyY21wKGlwX2FkZHIsICIyNTUuMjU1LjI1NS4yNTUiKSA9PSAwKSB7Ci0gICAgICAgIHBhY2tlZF9hZGRyID0gMHhGRkZGRkZGRjsKKyAgICAgICAgcGFja2VkX2FkZHIgPSBJTkFERFJfQlJPQURDQVNUOwogICAgIH0gZWxzZSB7CiAKICAgICAgICAgcGFja2VkX2FkZHIgPSBpbmV0X2FkZHIoaXBfYWRkcik7CkBAIC00ODc0LDcgKzQ5NjMsNyBAQAogICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZyhpbmV0X250b2EocGFja2VkX2FkZHIpKTsKIH0KIAotI2lmZGVmIEhBVkVfSU5FVF9QVE9OCisjaWYgZGVmaW5lZChIQVZFX0lORVRfUFRPTikgfHwgZGVmaW5lZChNU19XSU5ET1dTKQogCiBQeURvY19TVFJWQVIoaW5ldF9wdG9uX2RvYywKICJpbmV0X3B0b24oYWYsIGlwKSAtPiBwYWNrZWQgSVAgYWRkcmVzcyBzdHJpbmdcblwKQEAgLTQ4ODIsNiArNDk3MSwxMCBAQAogQ29udmVydCBhbiBJUCBhZGRyZXNzIGZyb20gc3RyaW5nIGZvcm1hdCB0byBhIHBhY2tlZCBzdHJpbmcgc3VpdGFibGVcblwKIGZvciB1c2Ugd2l0aCBsb3ctbGV2ZWwgbmV0d29yayBmdW5jdGlvbnMuIik7CiAKKyNlbmRpZgorCisjaWZkZWYgSEFWRV9JTkVUX1BUT04KKwogc3RhdGljIFB5T2JqZWN0ICoKIHNvY2tldF9pbmV0X3B0b24oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewpAQCAtNDg4OSw3ICs0OTgyLDcgQEAKICAgICBjaGFyKiBpcDsKICAgICBpbnQgcmV0dmFsOwogI2lmZGVmIEVOQUJMRV9JUFY2Ci0gICAgY2hhciBwYWNrZWRbTUFYKHNpemVvZihzdHJ1Y3QgaW5fYWRkciksIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKV07CisgICAgY2hhciBwYWNrZWRbUHlfTUFYKHNpemVvZihzdHJ1Y3QgaW5fYWRkciksIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKV07CiAjZWxzZQogICAgIGNoYXIgcGFja2VkW3NpemVvZihzdHJ1Y3QgaW5fYWRkcildOwogI2VuZGlmCkBAIC00OTI2LDEyICs1MDE5LDUyIEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIH0KKyNlbGlmIGRlZmluZWQoTVNfV0lORE9XUykKKworc3RhdGljIFB5T2JqZWN0ICoKK3NvY2tldF9pbmV0X3B0b24oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIGludCBhZjsKKyAgICBjaGFyKiBpcDsKKyAgICBzdHJ1Y3Qgc29ja2FkZHJfaW42IGFkZHI7CisgICAgSU5UIHJldCwgc2l6ZTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaXM6aW5ldF9wdG9uIiwgJmFmLCAmaXApKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHNpemUgPSBzaXplb2YoYWRkcik7CisgICAgcmV0ID0gV1NBU3RyaW5nVG9BZGRyZXNzQShpcCwgYWYsIE5VTEwsIChMUFNPQ0tBRERSKSZhZGRyLCAmc2l6ZSk7CisKKyAgICBpZiAocmV0KSB7CisgICAgICAgIFB5RXJyX1NldEV4Y0Zyb21XaW5kb3dzRXJyKFB5RXhjX09TRXJyb3IsIFdTQUdldExhc3RFcnJvcigpKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfSBlbHNlIGlmKGFmID09IEFGX0lORVQpIHsKKyAgICAgICAgc3RydWN0IHNvY2thZGRyX2luICphZGRyNCA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4qKSZhZGRyOworICAgICAgICByZXR1cm4gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZSgoY29uc3QgY2hhciAqKSYoYWRkcjQtPnNpbl9hZGRyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGFkZHI0LT5zaW5fYWRkcikpOworICAgIH0gZWxzZSBpZiAoYWYgPT0gQUZfSU5FVDYpIHsKKyAgICAgICAgcmV0dXJuIFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoKGNvbnN0IGNoYXIgKikmKGFkZHIuc2luNl9hZGRyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihhZGRyLnNpbjZfYWRkcikpOworICAgIH0gZWxzZSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PU0Vycm9yLCAidW5rbm93biBhZGRyZXNzIGZhbWlseSIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9Cit9CisKKyNlbmRpZgorCisjaWYgZGVmaW5lZChIQVZFX0lORVRfUFRPTikgfHwgZGVmaW5lZChNU19XSU5ET1dTKQogCiBQeURvY19TVFJWQVIoaW5ldF9udG9wX2RvYywKICJpbmV0X250b3AoYWYsIHBhY2tlZF9pcCkgLT4gc3RyaW5nIGZvcm1hdHRlZCBJUCBhZGRyZXNzXG5cCiBcblwKIENvbnZlcnQgYSBwYWNrZWQgSVAgYWRkcmVzcyBvZiB0aGUgZ2l2ZW4gZmFtaWx5IHRvIHN0cmluZyBmb3JtYXQuIik7CiAKKyNlbmRpZgorCisKKyNpZmRlZiBIQVZFX0lORVRfUFRPTgogc3RhdGljIFB5T2JqZWN0ICoKIHNvY2tldF9pbmV0X250b3AoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewpAQCAtNDk0MCw3ICs1MDczLDcgQEAKICAgICBpbnQgbGVuOwogICAgIGNvbnN0IGNoYXIqIHJldHZhbDsKICNpZmRlZiBFTkFCTEVfSVBWNgotICAgIGNoYXIgaXBbTUFYKElORVRfQUREUlNUUkxFTiwgSU5FVDZfQUREUlNUUkxFTikgKyAxXTsKKyAgICBjaGFyIGlwW1B5X01BWChJTkVUX0FERFJTVFJMRU4sIElORVQ2X0FERFJTVFJMRU4pICsgMV07CiAjZWxzZQogICAgIGNoYXIgaXBbSU5FVF9BRERSU1RSTEVOICsgMV07CiAjZW5kaWYKQEAgLTQ5ODUsNiArNTExOCw3MCBAQAogICAgIHJldHVybiBOVUxMOwogfQogCisjZWxpZiBkZWZpbmVkKE1TX1dJTkRPV1MpCisKK3N0YXRpYyBQeU9iamVjdCAqCitzb2NrZXRfaW5ldF9udG9wKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBpbnQgYWY7CisgICAgY2hhciogcGFja2VkOworICAgIGludCBsZW47CisgICAgc3RydWN0IHNvY2thZGRyX2luNiBhZGRyOworICAgIERXT1JEIGFkZHJsZW4sIHJldCwgcmV0bGVuOworI2lmZGVmIEVOQUJMRV9JUFY2CisgICAgY2hhciBpcFtQeV9NQVgoSU5FVF9BRERSU1RSTEVOLCBJTkVUNl9BRERSU1RSTEVOKSArIDFdOworI2Vsc2UKKyAgICBjaGFyIGlwW0lORVRfQUREUlNUUkxFTiArIDFdOworI2VuZGlmCisKKyAgICAvKiBHdWFyYW50ZWUgTlVMLXRlcm1pbmF0aW9uIGZvciBQeVVuaWNvZGVfRnJvbVN0cmluZygpIGJlbG93ICovCisgICAgbWVtc2V0KCh2b2lkICopICZpcFswXSwgJ1wwJywgc2l6ZW9mKGlwKSk7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIml5IzppbmV0X250b3AiLCAmYWYsICZwYWNrZWQsICZsZW4pKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGlmIChhZiA9PSBBRl9JTkVUKSB7CisgICAgICAgIHN0cnVjdCBzb2NrYWRkcl9pbiAqIGFkZHI0ID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSZhZGRyOworCisgICAgICAgIGlmIChsZW4gIT0gc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSkgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgImludmFsaWQgbGVuZ3RoIG9mIHBhY2tlZCBJUCBhZGRyZXNzIHN0cmluZyIpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgbWVtc2V0KGFkZHI0LCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7CisgICAgICAgIGFkZHI0LT5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyAgICAgICAgbWVtY3B5KCYoYWRkcjQtPnNpbl9hZGRyKSwgcGFja2VkLCBzaXplb2YoYWRkcjQtPnNpbl9hZGRyKSk7CisgICAgICAgIGFkZHJsZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKKyAgICB9IGVsc2UgaWYgKGFmID09IEFGX0lORVQ2KSB7CisgICAgICAgIGlmIChsZW4gIT0gc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICJpbnZhbGlkIGxlbmd0aCBvZiBwYWNrZWQgSVAgYWRkcmVzcyBzdHJpbmciKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisKKyAgICAgICAgbWVtc2V0KCZhZGRyLCAwLCBzaXplb2YoYWRkcikpOworICAgICAgICBhZGRyLnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7CisgICAgICAgIG1lbWNweSgmKGFkZHIuc2luNl9hZGRyKSwgcGFja2VkLCBzaXplb2YoYWRkci5zaW42X2FkZHIpKTsKKyAgICAgICAgYWRkcmxlbiA9IHNpemVvZihhZGRyKTsKKyAgICB9IGVsc2UgeworICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICJ1bmtub3duIGFkZHJlc3MgZmFtaWx5ICVkIiwgYWYpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICByZXRsZW4gPSBzaXplb2YoaXApOworICAgIHJldCA9IFdTQUFkZHJlc3NUb1N0cmluZ0EoKHN0cnVjdCBzb2NrYWRkciopJmFkZHIsIGFkZHJsZW4sIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcCwgJnJldGxlbik7CisKKyAgICBpZiAocmV0KSB7CisgICAgICAgIFB5RXJyX1NldEV4Y0Zyb21XaW5kb3dzRXJyKFB5RXhjX09TRXJyb3IsIFdTQUdldExhc3RFcnJvcigpKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nKGlwKTsKKyAgICB9Cit9CisKICNlbmRpZiAvKiBIQVZFX0lORVRfUFRPTiAqLwogCiAvKiBQeXRob24gaW50ZXJmYWNlIHRvIGdldGFkZHJpbmZvKGhvc3QsIHBvcnQpLiAqLwpAQCAtNTAwNiw3ICs1MjAzLDcgQEAKICAgICBQeU9iamVjdCAqYWxsID0gKFB5T2JqZWN0ICopTlVMTDsKICAgICBQeU9iamVjdCAqaWRuYSA9IE5VTEw7CiAKLSAgICBmYW1pbHkgPSBzb2NrdHlwZSA9IHByb3RvY29sID0gZmxhZ3MgPSAwOworICAgIHNvY2t0eXBlID0gcHJvdG9jb2wgPSBmbGFncyA9IDA7CiAgICAgZmFtaWx5ID0gQUZfVU5TUEVDOwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgIk9PfGlpaWk6Z2V0YWRkcmluZm8iLAogICAgICAgICAgICAgICAgICAgICAgICAgICBrd25hbWVzLCAmaG9iaiwgJnBvYmosICZmYW1pbHksICZzb2NrdHlwZSwKQEAgLTUwMTYsOSArNTIxMyw3IEBACiAgICAgaWYgKGhvYmogPT0gUHlfTm9uZSkgewogICAgICAgICBocHRyID0gTlVMTDsKICAgICB9IGVsc2UgaWYgKFB5VW5pY29kZV9DaGVjayhob2JqKSkgewotICAgICAgICBfUHlfSURFTlRJRklFUihlbmNvZGUpOwotCi0gICAgICAgIGlkbmEgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKGhvYmosICZQeUlkX2VuY29kZSwgInMiLCAiaWRuYSIpOworICAgICAgICBpZG5hID0gUHlVbmljb2RlX0FzRW5jb2RlZFN0cmluZyhob2JqLCAiaWRuYSIsIE5VTEwpOwogICAgICAgICBpZiAoIWlkbmEpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgYXNzZXJ0KFB5Qnl0ZXNfQ2hlY2soaWRuYSkpOwpAQCAtNTA1MSw5ICs1MjQ2LDkgQEAKICNpZiBkZWZpbmVkKF9fQVBQTEVfXykgJiYgZGVmaW5lZChBSV9OVU1FUklDU0VSVikKICAgICBpZiAoKGZsYWdzICYgQUlfTlVNRVJJQ1NFUlYpICYmIChwcHRyID09IE5VTEwgfHwgKHBwdHJbMF0gPT0gJzAnICYmIHBwdHJbMV0gPT0gMCkpKSB7CiAgICAgICAgIC8qIE9uIE9TWCB1cHRvIGF0IGxlYXN0IE9TWCAxMC44IGdldGFkZHJpbmZvIGNyYXNoZXMKLQkgKiBpZiBBSV9OVU1FUklDU0VSViBpcyBzZXQgYW5kIHRoZSBzZXJ2bmFtZSBpcyBOVUxMIG9yICIwIi4KLQkgKiBUaGlzIHdvcmthcm91bmQgYXZvaWRzIGEgc2VnZmF1bHQgaW4gbGlic3lzdGVtLgotCSAqLworICAgICAgICAgKiBpZiBBSV9OVU1FUklDU0VSViBpcyBzZXQgYW5kIHRoZSBzZXJ2bmFtZSBpcyBOVUxMIG9yICIwIi4KKyAgICAgICAgICogVGhpcyB3b3JrYXJvdW5kIGF2b2lkcyBhIHNlZ2ZhdWx0IGluIGxpYnN5c3RlbS4KKyAgICAgICAgICovCiAgICAgICAgIHBwdHIgPSAiMDAiOwogICAgIH0KICNlbmRpZgpAQCAtNTA3Miw3ICs1MjY3LDggQEAKICAgICAgICAgZ290byBlcnI7CiAgICAgfQogCi0gICAgaWYgKChhbGwgPSBQeUxpc3RfTmV3KDApKSA9PSBOVUxMKQorICAgIGFsbCA9IFB5TGlzdF9OZXcoMCk7CisgICAgaWYgKGFsbCA9PSBOVUxMKQogICAgICAgICBnb3RvIGVycjsKICAgICBmb3IgKHJlcyA9IHJlczA7IHJlczsgcmVzID0gcmVzLT5haV9uZXh0KSB7CiAgICAgICAgIFB5T2JqZWN0ICpzaW5nbGU7CkBAIC01MTA1LDggKzUzMDEsOCBAQAogfQogCiBQeURvY19TVFJWQVIoZ2V0YWRkcmluZm9fZG9jLAotImdldGFkZHJpbmZvKGhvc3QsIHBvcnQgWywgZmFtaWx5LCBzb2NrdHlwZSwgcHJvdG8sIGZsYWdzXSlcblwKLSAgICAtPiBsaXN0IG9mIChmYW1pbHksIHNvY2t0eXBlLCBwcm90bywgY2Fub25uYW1lLCBzb2NrYWRkcilcblwKKyJnZXRhZGRyaW5mbyhob3N0LCBwb3J0IFssIGZhbWlseSwgdHlwZSwgcHJvdG8sIGZsYWdzXSlcblwKKyAgICAtPiBsaXN0IG9mIChmYW1pbHksIHR5cGUsIHByb3RvLCBjYW5vbm5hbWUsIHNvY2thZGRyKVxuXAogXG5cCiBSZXNvbHZlIGhvc3QgYW5kIHBvcnQgaW50byBhZGRyaW5mbyBzdHJ1Y3QuIik7CiAKQEAgLTU0NTEsNyArNTY0Nyw3IEBACiAgICAgIE1FVEhfVkFSQVJHUywgaW5ldF9hdG9uX2RvY30sCiAgICAgeyJpbmV0X250b2EiLCAgICAgICAgICAgICAgIHNvY2tldF9pbmV0X250b2EsCiAgICAgIE1FVEhfVkFSQVJHUywgaW5ldF9udG9hX2RvY30sCi0jaWZkZWYgSEFWRV9JTkVUX1BUT04KKyNpZiBkZWZpbmVkKEhBVkVfSU5FVF9QVE9OKSB8fCBkZWZpbmVkKE1TX1dJTkRPV1MpCiAgICAgeyJpbmV0X3B0b24iLCAgICAgICAgICAgICAgIHNvY2tldF9pbmV0X3B0b24sCiAgICAgIE1FVEhfVkFSQVJHUywgaW5ldF9wdG9uX2RvY30sCiAgICAgeyJpbmV0X250b3AiLCAgICAgICAgICAgICAgIHNvY2tldF9pbmV0X250b3AsCkBAIC01NTI2LDMyICs1NzIyLDYgQEAKICNlbmRpZiAvKiBNU19XSU5ET1dTICovCiAKIAotI2lmZGVmIFBZT1NfT1MyCi0jZGVmaW5lIE9TX0lOSVRfREVGSU5FRAotCi0vKiBBZGRpdGlvbmFsIGluaXRpYWxpemF0aW9uIGZvciBPUy8yICovCi0KLXN0YXRpYyBpbnQKLW9zX2luaXQodm9pZCkKLXsKLSNpZm5kZWYgUFlDQ19HQ0MKLSAgICBpbnQgcmMgPSBzb2NrX2luaXQoKTsKLQotICAgIGlmIChyYyA9PSAwKSB7Ci0gICAgICAgIHJldHVybiAxOyAvKiBTdWNjZXNzICovCi0gICAgfQotCi0gICAgUHlFcnJfRm9ybWF0KFB5RXhjX0ltcG9ydEVycm9yLCAiT1MvMiBUQ1AvSVAgRXJyb3IjICVkIiwgc29ja19lcnJubygpKTsKLQotICAgIHJldHVybiAwOyAgLyogRmFpbHVyZSAqLwotI2Vsc2UKLSAgICAvKiBObyBuZWVkIHRvIGluaXRpYWxpemUgc29ja2V0cyB3aXRoIEdDQy9FTVggKi8KLSAgICByZXR1cm4gMTsgLyogU3VjY2VzcyAqLwotI2VuZGlmCi19Ci0KLSNlbmRpZiAvKiBQWU9TX09TMiAqLwotCiAKICNpZm5kZWYgT1NfSU5JVF9ERUZJTkVECiBzdGF0aWMgaW50CkBAIC01NjA4LDYgKzU3NzgsMTYgQEAKICAgICBpZiAoIW9zX2luaXQoKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgaWYgKHN1cHBvcnRfd3NhX25vX2luaGVyaXQgPT0gLTEpIHsKKyAgICAgICAgRFdPUkQgdmVyc2lvbiA9IEdldFZlcnNpb24oKTsKKyAgICAgICAgRFdPUkQgbWFqb3IgPSAoRFdPUkQpTE9CWVRFKExPV09SRCh2ZXJzaW9uKSk7CisgICAgICAgIERXT1JEIG1pbm9yID0gKERXT1JEKUhJQllURShMT1dPUkQodmVyc2lvbikpOworICAgICAgICAvKiBuZWVkIFdpbmRvd3MgNyBTUDEsIDIwMDggUjIgU1AxIG9yIGxhdGVyICovCisgICAgICAgIHN1cHBvcnRfd3NhX25vX2luaGVyaXQgPSAobWFqb3IgPj0gNiAmJiBtaW5vciA+PSAxKTsKKyAgICB9CisjZW5kaWYKKwogICAgIFB5X1RZUEUoJnNvY2tfdHlwZSkgPSAmUHlUeXBlX1R5cGU7CiAgICAgbSA9IFB5TW9kdWxlX0NyZWF0ZSgmc29ja2V0bW9kdWxlKTsKICAgICBpZiAobSA9PSBOVUxMKQpAQCAtNTY2MSwxODQgKzU4NDEsMTg3IEBACiAKICAgICAvKiBBZGRyZXNzIGZhbWlsaWVzICh3ZSBvbmx5IHN1cHBvcnQgQUZfSU5FVCBhbmQgQUZfVU5JWCkgKi8KICNpZmRlZiBBRl9VTlNQRUMKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfVU5TUEVDIiwgQUZfVU5TUEVDKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBRl9VTlNQRUMpOwogI2VuZGlmCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFGX0lORVQiLCBBRl9JTkVUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBRl9JTkVUKTsKICNpZmRlZiBBRl9JTkVUNgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBRl9JTkVUNiIsIEFGX0lORVQ2KTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBRl9JTkVUNik7CiAjZW5kaWYgLyogQUZfSU5FVDYgKi8KICNpZiBkZWZpbmVkKEFGX1VOSVgpCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFGX1VOSVgiLCBBRl9VTklYKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBRl9VTklYKTsKICNlbmRpZiAvKiBBRl9VTklYICovCiAjaWZkZWYgQUZfQVgyNQogICAgIC8qIEFtYXRldXIgUmFkaW8gQVguMjUgKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfQVgyNSIsIEFGX0FYMjUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFGX0FYMjUpOwogI2VuZGlmCiAjaWZkZWYgQUZfSVBYCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFGX0lQWCIsIEFGX0lQWCk7IC8qIE5vdmVsbCBJUFggKi8KKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBRl9JUFgpOyAvKiBOb3ZlbGwgSVBYICovCiAjZW5kaWYKICNpZmRlZiBBRl9BUFBMRVRBTEsKICAgICAvKiBBcHBsZXRhbGsgRERQICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFGX0FQUExFVEFMSyIsIEFGX0FQUExFVEFMSyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUZfQVBQTEVUQUxLKTsKICNlbmRpZgogI2lmZGVmIEFGX05FVFJPTQogICAgIC8qIEFtYXRldXIgcmFkaW8gTmV0Uk9NICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFGX05FVFJPTSIsIEFGX05FVFJPTSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUZfTkVUUk9NKTsKICNlbmRpZgogI2lmZGVmIEFGX0JSSURHRQogICAgIC8qIE11bHRpcHJvdG9jb2wgYnJpZGdlICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFGX0JSSURHRSIsIEFGX0JSSURHRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUZfQlJJREdFKTsKICNlbmRpZgogI2lmZGVmIEFGX0FUTVBWQwogICAgIC8qIEFUTSBQVkNzICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFGX0FUTVBWQyIsIEFGX0FUTVBWQyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUZfQVRNUFZDKTsKICNlbmRpZgogI2lmZGVmIEFGX0FBTDUKICAgICAvKiBSZXNlcnZlZCBmb3IgV2VybmVyJ3MgQVRNICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFGX0FBTDUiLCBBRl9BQUw1KTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBRl9BQUw1KTsKICNlbmRpZgogI2lmZGVmIEFGX1gyNQogICAgIC8qIFJlc2VydmVkIGZvciBYLjI1IHByb2plY3QgKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfWDI1IiwgQUZfWDI1KTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBRl9YMjUpOwogI2VuZGlmCiAjaWZkZWYgQUZfSU5FVDYKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfSU5FVDYiLCBBRl9JTkVUNik7IC8qIElQIHZlcnNpb24gNiAqLworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFGX0lORVQ2KTsgLyogSVAgdmVyc2lvbiA2ICovCiAjZW5kaWYKICNpZmRlZiBBRl9ST1NFCiAgICAgLyogQW1hdGV1ciBSYWRpbyBYLjI1IFBMUCAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBRl9ST1NFIiwgQUZfUk9TRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUZfUk9TRSk7CiAjZW5kaWYKICNpZmRlZiBBRl9ERUNuZXQKICAgICAvKiBSZXNlcnZlZCBmb3IgREVDbmV0IHByb2plY3QgKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfREVDbmV0IiwgQUZfREVDbmV0KTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBRl9ERUNuZXQpOwogI2VuZGlmCiAjaWZkZWYgQUZfTkVUQkVVSQogICAgIC8qIFJlc2VydmVkIGZvciA4MDIuMkxMQyBwcm9qZWN0ICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFGX05FVEJFVUkiLCBBRl9ORVRCRVVJKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBRl9ORVRCRVVJKTsKICNlbmRpZgogI2lmZGVmIEFGX1NFQ1VSSVRZCiAgICAgLyogU2VjdXJpdHkgY2FsbGJhY2sgcHNldWRvIEFGICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFGX1NFQ1VSSVRZIiwgQUZfU0VDVVJJVFkpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFGX1NFQ1VSSVRZKTsKICNlbmRpZgogI2lmZGVmIEFGX0tFWQogICAgIC8qIFBGX0tFWSBrZXkgbWFuYWdlbWVudCBBUEkgKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfS0VZIiwgQUZfS0VZKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBRl9LRVkpOwogI2VuZGlmCiAjaWZkZWYgQUZfTkVUTElOSwogICAgIC8qICAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBRl9ORVRMSU5LIiwgQUZfTkVUTElOSyk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk5FVExJTktfUk9VVEUiLCBORVRMSU5LX1JPVVRFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBRl9ORVRMSU5LKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBORVRMSU5LX1JPVVRFKTsKICNpZmRlZiBORVRMSU5LX1NLSVAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTkVUTElOS19TS0lQIiwgTkVUTElOS19TS0lQKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBORVRMSU5LX1NLSVApOwogI2VuZGlmCiAjaWZkZWYgTkVUTElOS19XMQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJORVRMSU5LX1cxIiwgTkVUTElOS19XMSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTkVUTElOS19XMSk7CiAjZW5kaWYKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTkVUTElOS19VU0VSU09DSyIsIE5FVExJTktfVVNFUlNPQ0spOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJORVRMSU5LX0ZJUkVXQUxMIiwgTkVUTElOS19GSVJFV0FMTCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTkVUTElOS19VU0VSU09DSyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTkVUTElOS19GSVJFV0FMTCk7CiAjaWZkZWYgTkVUTElOS19UQ1BESUFHCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk5FVExJTktfVENQRElBRyIsIE5FVExJTktfVENQRElBRyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTkVUTElOS19UQ1BESUFHKTsKICNlbmRpZgogI2lmZGVmIE5FVExJTktfTkZMT0cKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTkVUTElOS19ORkxPRyIsIE5FVExJTktfTkZMT0cpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE5FVExJTktfTkZMT0cpOwogI2VuZGlmCiAjaWZkZWYgTkVUTElOS19YRlJNCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk5FVExJTktfWEZSTSIsIE5FVExJTktfWEZSTSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTkVUTElOS19YRlJNKTsKICNlbmRpZgogI2lmZGVmIE5FVExJTktfQVJQRAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJORVRMSU5LX0FSUEQiLCBORVRMSU5LX0FSUEQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE5FVExJTktfQVJQRCk7CiAjZW5kaWYKICNpZmRlZiBORVRMSU5LX1JPVVRFNgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJORVRMSU5LX1JPVVRFNiIsIE5FVExJTktfUk9VVEU2KTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBORVRMSU5LX1JPVVRFNik7CiAjZW5kaWYKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTkVUTElOS19JUDZfRlciLCBORVRMSU5LX0lQNl9GVyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTkVUTElOS19JUDZfRlcpOwogI2lmZGVmIE5FVExJTktfRE5SVE1TRwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJORVRMSU5LX0ROUlRNU0ciLCBORVRMSU5LX0ROUlRNU0cpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE5FVExJTktfRE5SVE1TRyk7CiAjZW5kaWYKICNpZmRlZiBORVRMSU5LX1RBUEJBU0UKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTkVUTElOS19UQVBCQVNFIiwgTkVUTElOS19UQVBCQVNFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBORVRMSU5LX1RBUEJBU0UpOwogI2VuZGlmCiAjZW5kaWYgLyogQUZfTkVUTElOSyAqLwogI2lmZGVmIEFGX1JPVVRFCiAgICAgLyogQWxpYXMgdG8gZW11bGF0ZSA0LjRCU0QgKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfUk9VVEUiLCBBRl9ST1VURSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUZfUk9VVEUpOworI2VuZGlmCisjaWZkZWYgQUZfTElOSworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFGX0xJTkspOwogI2VuZGlmCiAjaWZkZWYgQUZfQVNICiAgICAgLyogQXNoICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFGX0FTSCIsIEFGX0FTSCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUZfQVNIKTsKICNlbmRpZgogI2lmZGVmIEFGX0VDT05FVAogICAgIC8qIEFjb3JuIEVjb25ldCAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBRl9FQ09ORVQiLCBBRl9FQ09ORVQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFGX0VDT05FVCk7CiAjZW5kaWYKICNpZmRlZiBBRl9BVE1TVkMKICAgICAvKiBBVE0gU1ZDcyAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBRl9BVE1TVkMiLCBBRl9BVE1TVkMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFGX0FUTVNWQyk7CiAjZW5kaWYKICNpZmRlZiBBRl9TTkEKICAgICAvKiBMaW51eCBTTkEgUHJvamVjdCAobnV0dGVycyEpICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFGX1NOQSIsIEFGX1NOQSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUZfU05BKTsKICNlbmRpZgogI2lmZGVmIEFGX0lSREEKICAgICAvKiBJUkRBIHNvY2tldHMgKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfSVJEQSIsIEFGX0lSREEpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFGX0lSREEpOwogI2VuZGlmCiAjaWZkZWYgQUZfUFBQT1gKICAgICAvKiBQUFBvWCBzb2NrZXRzICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFGX1BQUE9YIiwgQUZfUFBQT1gpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFGX1BQUE9YKTsKICNlbmRpZgogI2lmZGVmIEFGX1dBTlBJUEUKICAgICAvKiBXYW5waXBlIEFQSSBTb2NrZXRzICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFGX1dBTlBJUEUiLCBBRl9XQU5QSVBFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBRl9XQU5QSVBFKTsKICNlbmRpZgogI2lmZGVmIEFGX0xMQwogICAgIC8qIExpbnV4IExMQyAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBRl9MTEMiLCBBRl9MTEMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFGX0xMQyk7CiAjZW5kaWYKIAogI2lmZGVmIFVTRV9CTFVFVE9PVEgKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfQkxVRVRPT1RIIiwgQUZfQkxVRVRPT1RIKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQlRQUk9UT19MMkNBUCIsIEJUUFJPVE9fTDJDQVApOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJCVFBST1RPX0hDSSIsIEJUUFJPVE9fSENJKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09MX0hDSSIsIFNPTF9IQ0kpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFGX0JMVUVUT09USCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQlRQUk9UT19MMkNBUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQlRQUk9UT19IQ0kpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPTF9IQ0kpOwogI2lmICFkZWZpbmVkKF9fTmV0QlNEX18pICYmICFkZWZpbmVkKF9fRHJhZ29uRmx5X18pCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkhDSV9GSUxURVIiLCBIQ0lfRklMVEVSKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBIQ0lfRklMVEVSKTsKICNlbmRpZgogI2lmICFkZWZpbmVkKF9fRnJlZUJTRF9fKQogI2lmICFkZWZpbmVkKF9fTmV0QlNEX18pICYmICFkZWZpbmVkKF9fRHJhZ29uRmx5X18pCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkhDSV9USU1FX1NUQU1QIiwgSENJX1RJTUVfU1RBTVApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEhDSV9USU1FX1NUQU1QKTsKICNlbmRpZgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJIQ0lfREFUQV9ESVIiLCBIQ0lfREFUQV9ESVIpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJCVFBST1RPX1NDTyIsIEJUUFJPVE9fU0NPKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBIQ0lfREFUQV9ESVIpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEJUUFJPVE9fU0NPKTsKICNlbmRpZgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJCVFBST1RPX1JGQ09NTSIsIEJUUFJPVE9fUkZDT01NKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBCVFBST1RPX1JGQ09NTSk7CiAgICAgUHlNb2R1bGVfQWRkU3RyaW5nQ29uc3RhbnQobSwgIkJEQUREUl9BTlkiLCAiMDA6MDA6MDA6MDA6MDA6MDAiKTsKICAgICBQeU1vZHVsZV9BZGRTdHJpbmdDb25zdGFudChtLCAiQkRBRERSX0xPQ0FMIiwgIjAwOjAwOjAwOkZGOkZGOkZGIik7CiAjZW5kaWYKIAogI2lmZGVmIEFGX0NBTgogICAgIC8qIENvbnRyb2xsZXIgQXJlYSBOZXR3b3JrICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFGX0NBTiIsIEFGX0NBTik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUZfQ0FOKTsKICNlbmRpZgogI2lmZGVmIFBGX0NBTgogICAgIC8qIENvbnRyb2xsZXIgQXJlYSBOZXR3b3JrICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBGX0NBTiIsIFBGX0NBTik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUEZfQ0FOKTsKICNlbmRpZgogCiAvKiBSZWxpYWJsZSBEYXRhZ3JhbSBTb2NrZXRzICovCiAjaWZkZWYgQUZfUkRTCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFGX1JEUyIsIEFGX1JEUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUZfUkRTKTsKICNlbmRpZgogI2lmZGVmIFBGX1JEUwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQRl9SRFMiLCBQRl9SRFMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBGX1JEUyk7CiAjZW5kaWYKIAogLyogS2VybmVsIGV2ZW50IG1lc3NhZ2VzICovCiAjaWZkZWYgUEZfU1lTVEVNCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBGX1NZU1RFTSIsIFBGX1NZU1RFTSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUEZfU1lTVEVNKTsKICNlbmRpZgogI2lmZGVmIEFGX1NZU1RFTQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBRl9TWVNURU0iLCBBRl9TWVNURU0pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFGX1NZU1RFTSk7CiAjZW5kaWYKIAogI2lmZGVmIEFGX1BBQ0tFVApAQCAtNTg3MCw0NDcgKzYwNTMsNDYzIEBACiAjZW5kaWYKIAogI2lmZGVmIEhBVkVfTElOVVhfVElQQ19ICi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFGX1RJUEMiLCBBRl9USVBDKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBRl9USVBDKTsKIAogICAgIC8qIGZvciBhZGRyZXNzZXMgKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVElQQ19BRERSX05BTUVTRVEiLCBUSVBDX0FERFJfTkFNRVNFUSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRJUENfQUREUl9OQU1FIiwgVElQQ19BRERSX05BTUUpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUSVBDX0FERFJfSUQiLCBUSVBDX0FERFJfSUQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRJUENfQUREUl9OQU1FU0VRKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUSVBDX0FERFJfTkFNRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVElQQ19BRERSX0lEKTsKIAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUSVBDX1pPTkVfU0NPUEUiLCBUSVBDX1pPTkVfU0NPUEUpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUSVBDX0NMVVNURVJfU0NPUEUiLCBUSVBDX0NMVVNURVJfU0NPUEUpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUSVBDX05PREVfU0NPUEUiLCBUSVBDX05PREVfU0NPUEUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRJUENfWk9ORV9TQ09QRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVElQQ19DTFVTVEVSX1NDT1BFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUSVBDX05PREVfU0NPUEUpOwogCiAgICAgLyogZm9yIHNldHNvY2tvcHQoKSAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT0xfVElQQyIsIFNPTF9USVBDKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVElQQ19JTVBPUlRBTkNFIiwgVElQQ19JTVBPUlRBTkNFKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVElQQ19TUkNfRFJPUFBBQkxFIiwgVElQQ19TUkNfRFJPUFBBQkxFKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVElQQ19ERVNUX0RST1BQQUJMRSIsCi0gICAgICAgICAgICAgICAgICAgIFRJUENfREVTVF9EUk9QUEFCTEUpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUSVBDX0NPTk5fVElNRU9VVCIsIFRJUENfQ09OTl9USU1FT1VUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT0xfVElQQyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVElQQ19JTVBPUlRBTkNFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUSVBDX1NSQ19EUk9QUEFCTEUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRJUENfREVTVF9EUk9QUEFCTEUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRJUENfQ09OTl9USU1FT1VUKTsKIAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUSVBDX0xPV19JTVBPUlRBTkNFIiwKLSAgICAgICAgICAgICAgICAgICAgVElQQ19MT1dfSU1QT1JUQU5DRSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRJUENfTUVESVVNX0lNUE9SVEFOQ0UiLAotICAgICAgICAgICAgICAgICAgICBUSVBDX01FRElVTV9JTVBPUlRBTkNFKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVElQQ19ISUdIX0lNUE9SVEFOQ0UiLAotICAgICAgICAgICAgICAgICAgICBUSVBDX0hJR0hfSU1QT1JUQU5DRSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRJUENfQ1JJVElDQUxfSU1QT1JUQU5DRSIsCi0gICAgICAgICAgICAgICAgICAgIFRJUENfQ1JJVElDQUxfSU1QT1JUQU5DRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVElQQ19MT1dfSU1QT1JUQU5DRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVElQQ19NRURJVU1fSU1QT1JUQU5DRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVElQQ19ISUdIX0lNUE9SVEFOQ0UpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRJUENfQ1JJVElDQUxfSU1QT1JUQU5DRSk7CiAKICAgICAvKiBmb3Igc3Vic2NyaXB0aW9ucyAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUSVBDX1NVQl9QT1JUUyIsIFRJUENfU1VCX1BPUlRTKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVElQQ19TVUJfU0VSVklDRSIsIFRJUENfU1VCX1NFUlZJQ0UpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRJUENfU1VCX1BPUlRTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUSVBDX1NVQl9TRVJWSUNFKTsKICNpZmRlZiBUSVBDX1NVQl9DQU5DRUwKICAgICAvKiBkb2Vzbid0IHNlZW0gdG8gYmUgYXZhaWxhYmxlIGV2ZXJ5d2hlcmUgKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVElQQ19TVUJfQ0FOQ0VMIiwgVElQQ19TVUJfQ0FOQ0VMKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUSVBDX1NVQl9DQU5DRUwpOwogI2VuZGlmCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRJUENfV0FJVF9GT1JFVkVSIiwgVElQQ19XQUlUX0ZPUkVWRVIpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUSVBDX1BVQkxJU0hFRCIsIFRJUENfUFVCTElTSEVEKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVElQQ19XSVRIRFJBV04iLCBUSVBDX1dJVEhEUkFXTik7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRJUENfU1VCU0NSX1RJTUVPVVQiLCBUSVBDX1NVQlNDUl9USU1FT1VUKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVElQQ19DRkdfU1JWIiwgVElQQ19DRkdfU1JWKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVElQQ19UT1BfU1JWIiwgVElQQ19UT1BfU1JWKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUSVBDX1dBSVRfRk9SRVZFUik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVElQQ19QVUJMSVNIRUQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRJUENfV0lUSERSQVdOKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUSVBDX1NVQlNDUl9USU1FT1VUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUSVBDX0NGR19TUlYpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRJUENfVE9QX1NSVik7CiAjZW5kaWYKIAogICAgIC8qIFNvY2tldCB0eXBlcyAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT0NLX1NUUkVBTSIsIFNPQ0tfU1RSRUFNKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09DS19ER1JBTSIsIFNPQ0tfREdSQU0pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPQ0tfU1RSRUFNKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT0NLX0RHUkFNKTsKIC8qIFdlIGhhdmUgaW5jb21wbGV0ZSBzb2NrZXQgc3VwcG9ydC4gKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09DS19SQVciLCBTT0NLX1JBVyk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPQ0tfU0VRUEFDS0VUIiwgU09DS19TRVFQQUNLRVQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPQ0tfUkFXKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT0NLX1NFUVBBQ0tFVCk7CiAjaWYgZGVmaW5lZChTT0NLX1JETSkKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09DS19SRE0iLCBTT0NLX1JETSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09DS19SRE0pOwogI2VuZGlmCiAjaWZkZWYgU09DS19DTE9FWEVDCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPQ0tfQ0xPRVhFQyIsIFNPQ0tfQ0xPRVhFQyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09DS19DTE9FWEVDKTsKICNlbmRpZgogI2lmZGVmIFNPQ0tfTk9OQkxPQ0sKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09DS19OT05CTE9DSyIsIFNPQ0tfTk9OQkxPQ0spOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPQ0tfTk9OQkxPQ0spOwogI2VuZGlmCiAKICNpZmRlZiAgU09fREVCVUcKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09fREVCVUciLCBTT19ERUJVRyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09fREVCVUcpOwogI2VuZGlmCiAjaWZkZWYgIFNPX0FDQ0VQVENPTk4KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09fQUNDRVBUQ09OTiIsIFNPX0FDQ0VQVENPTk4pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPX0FDQ0VQVENPTk4pOwogI2VuZGlmCiAjaWZkZWYgIFNPX1JFVVNFQUREUgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT19SRVVTRUFERFIiLCBTT19SRVVTRUFERFIpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPX1JFVVNFQUREUik7CiAjZW5kaWYKICNpZmRlZiBTT19FWENMVVNJVkVBRERSVVNFCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPX0VYQ0xVU0lWRUFERFJVU0UiLCBTT19FWENMVVNJVkVBRERSVVNFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT19FWENMVVNJVkVBRERSVVNFKTsKICNlbmRpZgogCiAjaWZkZWYgIFNPX0tFRVBBTElWRQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT19LRUVQQUxJVkUiLCBTT19LRUVQQUxJVkUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPX0tFRVBBTElWRSk7CiAjZW5kaWYKICNpZmRlZiAgU09fRE9OVFJPVVRFCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPX0RPTlRST1VURSIsIFNPX0RPTlRST1VURSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09fRE9OVFJPVVRFKTsKICNlbmRpZgogI2lmZGVmICBTT19CUk9BRENBU1QKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09fQlJPQURDQVNUIiwgU09fQlJPQURDQVNUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT19CUk9BRENBU1QpOwogI2VuZGlmCiAjaWZkZWYgIFNPX1VTRUxPT1BCQUNLCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPX1VTRUxPT1BCQUNLIiwgU09fVVNFTE9PUEJBQ0spOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPX1VTRUxPT1BCQUNLKTsKICNlbmRpZgogI2lmZGVmICBTT19MSU5HRVIKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09fTElOR0VSIiwgU09fTElOR0VSKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT19MSU5HRVIpOwogI2VuZGlmCiAjaWZkZWYgIFNPX09PQklOTElORQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT19PT0JJTkxJTkUiLCBTT19PT0JJTkxJTkUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPX09PQklOTElORSk7CiAjZW5kaWYKICNpZmRlZiAgU09fUkVVU0VQT1JUCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPX1JFVVNFUE9SVCIsIFNPX1JFVVNFUE9SVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09fUkVVU0VQT1JUKTsKICNlbmRpZgogI2lmZGVmICBTT19TTkRCVUYKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09fU05EQlVGIiwgU09fU05EQlVGKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT19TTkRCVUYpOwogI2VuZGlmCiAjaWZkZWYgIFNPX1JDVkJVRgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT19SQ1ZCVUYiLCBTT19SQ1ZCVUYpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPX1JDVkJVRik7CiAjZW5kaWYKICNpZmRlZiAgU09fU05ETE9XQVQKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09fU05ETE9XQVQiLCBTT19TTkRMT1dBVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09fU05ETE9XQVQpOwogI2VuZGlmCiAjaWZkZWYgIFNPX1JDVkxPV0FUCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPX1JDVkxPV0FUIiwgU09fUkNWTE9XQVQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPX1JDVkxPV0FUKTsKICNlbmRpZgogI2lmZGVmICBTT19TTkRUSU1FTwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT19TTkRUSU1FTyIsIFNPX1NORFRJTUVPKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT19TTkRUSU1FTyk7CiAjZW5kaWYKICNpZmRlZiAgU09fUkNWVElNRU8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09fUkNWVElNRU8iLCBTT19SQ1ZUSU1FTyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09fUkNWVElNRU8pOwogI2VuZGlmCiAjaWZkZWYgIFNPX0VSUk9SCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPX0VSUk9SIiwgU09fRVJST1IpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPX0VSUk9SKTsKICNlbmRpZgogI2lmZGVmICBTT19UWVBFCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPX1RZUEUiLCBTT19UWVBFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT19UWVBFKTsKICNlbmRpZgogI2lmZGVmICBTT19TRVRGSUIKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09fU0VURklCIiwgU09fU0VURklCKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT19TRVRGSUIpOwogI2VuZGlmCiAjaWZkZWYgIFNPX1BBU1NDUkVECi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPX1BBU1NDUkVEIiwgU09fUEFTU0NSRUQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPX1BBU1NDUkVEKTsKICNlbmRpZgogI2lmZGVmICBTT19QRUVSQ1JFRAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT19QRUVSQ1JFRCIsIFNPX1BFRVJDUkVEKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT19QRUVSQ1JFRCk7CiAjZW5kaWYKICNpZmRlZiAgTE9DQUxfUEVFUkNSRUQKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTE9DQUxfUEVFUkNSRUQiLCBMT0NBTF9QRUVSQ1JFRCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9DQUxfUEVFUkNSRUQpOwogI2VuZGlmCiAjaWZkZWYgIFNPX0JJTkRUT0RFVklDRQogICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPX0JJTkRUT0RFVklDRSk7CiAjZW5kaWYKKyNpZmRlZiAgU09fUFJJT1JJVFkKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT19QUklPUklUWSk7CisjZW5kaWYKIAogICAgIC8qIE1heGltdW0gbnVtYmVyIG9mIGNvbm5lY3Rpb25zIGZvciAibGlzdGVuIiAqLwogI2lmZGVmICBTT01BWENPTk4KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09NQVhDT05OIiwgU09NQVhDT05OKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT01BWENPTk4pOwogI2Vsc2UKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09NQVhDT05OIiwgNSk7IC8qIENvbW1vbiB2YWx1ZSAqLwogI2VuZGlmCiAKICAgICAvKiBBbmNpbGxpYXJ5IG1lc3NhZ2UgdHlwZXMgKi8KICNpZmRlZiAgU0NNX1JJR0hUUwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTQ01fUklHSFRTIiwgU0NNX1JJR0hUUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU0NNX1JJR0hUUyk7CiAjZW5kaWYKICNpZmRlZiAgU0NNX0NSRURFTlRJQUxTCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNDTV9DUkVERU5USUFMUyIsIFNDTV9DUkVERU5USUFMUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU0NNX0NSRURFTlRJQUxTKTsKICNlbmRpZgogI2lmZGVmICBTQ01fQ1JFRFMKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU0NNX0NSRURTIiwgU0NNX0NSRURTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTQ01fQ1JFRFMpOwogI2VuZGlmCiAKICAgICAvKiBGbGFncyBmb3Igc2VuZCwgcmVjdiAqLwogI2lmZGVmICBNU0dfT09CCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TR19PT0IiLCBNU0dfT09CKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBNU0dfT09CKTsKICNlbmRpZgogI2lmZGVmICBNU0dfUEVFSwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJNU0dfUEVFSyIsIE1TR19QRUVLKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBNU0dfUEVFSyk7CiAjZW5kaWYKICNpZmRlZiAgTVNHX0RPTlRST1VURQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJNU0dfRE9OVFJPVVRFIiwgTVNHX0RPTlRST1VURSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNHX0RPTlRST1VURSk7CiAjZW5kaWYKICNpZmRlZiAgTVNHX0RPTlRXQUlUCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TR19ET05UV0FJVCIsIE1TR19ET05UV0FJVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNHX0RPTlRXQUlUKTsKICNlbmRpZgogI2lmZGVmICBNU0dfRU9SCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TR19FT1IiLCBNU0dfRU9SKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBNU0dfRU9SKTsKICNlbmRpZgogI2lmZGVmICBNU0dfVFJVTkMKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTVNHX1RSVU5DIiwgTVNHX1RSVU5DKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBNU0dfVFJVTkMpOwogI2VuZGlmCiAjaWZkZWYgIE1TR19DVFJVTkMKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTVNHX0NUUlVOQyIsIE1TR19DVFJVTkMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1TR19DVFJVTkMpOwogI2VuZGlmCiAjaWZkZWYgIE1TR19XQUlUQUxMCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TR19XQUlUQUxMIiwgTVNHX1dBSVRBTEwpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1TR19XQUlUQUxMKTsKICNlbmRpZgogI2lmZGVmICBNU0dfQlRBRwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJNU0dfQlRBRyIsIE1TR19CVEFHKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBNU0dfQlRBRyk7CiAjZW5kaWYKICNpZmRlZiAgTVNHX0VUQUcKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTVNHX0VUQUciLCBNU0dfRVRBRyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNHX0VUQUcpOwogI2VuZGlmCiAjaWZkZWYgIE1TR19OT1NJR05BTAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJNU0dfTk9TSUdOQUwiLCBNU0dfTk9TSUdOQUwpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1TR19OT1NJR05BTCk7CiAjZW5kaWYKICNpZmRlZiAgTVNHX05PVElGSUNBVElPTgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJNU0dfTk9USUZJQ0FUSU9OIiwgTVNHX05PVElGSUNBVElPTik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNHX05PVElGSUNBVElPTik7CiAjZW5kaWYKICNpZmRlZiAgTVNHX0NNU0dfQ0xPRVhFQwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJNU0dfQ01TR19DTE9FWEVDIiwgTVNHX0NNU0dfQ0xPRVhFQyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNHX0NNU0dfQ0xPRVhFQyk7CiAjZW5kaWYKICNpZmRlZiAgTVNHX0VSUlFVRVVFCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TR19FUlJRVUVVRSIsIE1TR19FUlJRVUVVRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNHX0VSUlFVRVVFKTsKICNlbmRpZgogI2lmZGVmICBNU0dfQ09ORklSTQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJNU0dfQ09ORklSTSIsIE1TR19DT05GSVJNKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBNU0dfQ09ORklSTSk7CiAjZW5kaWYKICNpZmRlZiAgTVNHX01PUkUKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTVNHX01PUkUiLCBNU0dfTU9SRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNHX01PUkUpOwogI2VuZGlmCiAjaWZkZWYgIE1TR19FT0YKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTVNHX0VPRiIsIE1TR19FT0YpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1TR19FT0YpOwogI2VuZGlmCiAjaWZkZWYgIE1TR19CQ0FTVAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJNU0dfQkNBU1QiLCBNU0dfQkNBU1QpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1TR19CQ0FTVCk7CiAjZW5kaWYKICNpZmRlZiAgTVNHX01DQVNUCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TR19NQ0FTVCIsIE1TR19NQ0FTVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNHX01DQVNUKTsKKyNlbmRpZgorI2lmZGVmIE1TR19GQVNUT1BFTgorICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1TR19GQVNUT1BFTik7CiAjZW5kaWYKIAogICAgIC8qIFByb3RvY29sIGxldmVsIGFuZCBudW1iZXJzLCB1c2FibGUgZm9yIFtnc11ldHNvY2tvcHQgKi8KICNpZmRlZiAgU09MX1NPQ0tFVAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT0xfU09DS0VUIiwgU09MX1NPQ0tFVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09MX1NPQ0tFVCk7CiAjZW5kaWYKICNpZmRlZiAgU09MX0lQCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPTF9JUCIsIFNPTF9JUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09MX0lQKTsKICNlbHNlCiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPTF9JUCIsIDApOwogI2VuZGlmCiAjaWZkZWYgIFNPTF9JUFgKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09MX0lQWCIsIFNPTF9JUFgpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPTF9JUFgpOwogI2VuZGlmCiAjaWZkZWYgIFNPTF9BWDI1Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPTF9BWDI1IiwgU09MX0FYMjUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPTF9BWDI1KTsKICNlbmRpZgogI2lmZGVmICBTT0xfQVRBTEsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09MX0FUQUxLIiwgU09MX0FUQUxLKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT0xfQVRBTEspOwogI2VuZGlmCiAjaWZkZWYgIFNPTF9ORVRST00KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09MX05FVFJPTSIsIFNPTF9ORVRST00pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPTF9ORVRST00pOwogI2VuZGlmCiAjaWZkZWYgIFNPTF9ST1NFCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPTF9ST1NFIiwgU09MX1JPU0UpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPTF9ST1NFKTsKICNlbmRpZgogI2lmZGVmICBTT0xfVENQCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPTF9UQ1AiLCBTT0xfVENQKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT0xfVENQKTsKICNlbHNlCiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPTF9UQ1AiLCA2KTsKICNlbmRpZgogI2lmZGVmICBTT0xfVURQCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPTF9VRFAiLCBTT0xfVURQKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT0xfVURQKTsKICNlbHNlCiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPTF9VRFAiLCAxNyk7CiAjZW5kaWYKICNpZmRlZiBTT0xfQ0FOX0JBU0UKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09MX0NBTl9CQVNFIiwgU09MX0NBTl9CQVNFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT0xfQ0FOX0JBU0UpOwogI2VuZGlmCiAjaWZkZWYgU09MX0NBTl9SQVcKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09MX0NBTl9SQVciLCBTT0xfQ0FOX1JBVyk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkNBTl9SQVciLCBDQU5fUkFXKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT0xfQ0FOX1JBVyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQ0FOX1JBVyk7CiAjZW5kaWYKICNpZmRlZiBIQVZFX0xJTlVYX0NBTl9ICi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkNBTl9FRkZfRkxBRyIsIENBTl9FRkZfRkxBRyk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkNBTl9SVFJfRkxBRyIsIENBTl9SVFJfRkxBRyk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkNBTl9FUlJfRkxBRyIsIENBTl9FUlJfRkxBRyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQ0FOX0VGRl9GTEFHKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBDQU5fUlRSX0ZMQUcpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIENBTl9FUlJfRkxBRyk7CiAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQ0FOX1NGRl9NQVNLIiwgQ0FOX1NGRl9NQVNLKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQ0FOX0VGRl9NQVNLIiwgQ0FOX0VGRl9NQVNLKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQ0FOX0VSUl9NQVNLIiwgQ0FOX0VSUl9NQVNLKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBDQU5fU0ZGX01BU0spOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIENBTl9FRkZfTUFTSyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQ0FOX0VSUl9NQVNLKTsKICNlbmRpZgogI2lmZGVmIEhBVkVfTElOVVhfQ0FOX1JBV19ICi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkNBTl9SQVdfRklMVEVSIiwgQ0FOX1JBV19GSUxURVIpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJDQU5fUkFXX0VSUl9GSUxURVIiLCBDQU5fUkFXX0VSUl9GSUxURVIpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJDQU5fUkFXX0xPT1BCQUNLIiwgQ0FOX1JBV19MT09QQkFDSyk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkNBTl9SQVdfUkVDVl9PV05fTVNHUyIsIENBTl9SQVdfUkVDVl9PV05fTVNHUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQ0FOX1JBV19GSUxURVIpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIENBTl9SQVdfRVJSX0ZJTFRFUik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQ0FOX1JBV19MT09QQkFDSyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQ0FOX1JBV19SRUNWX09XTl9NU0dTKTsKKyNlbmRpZgorI2lmZGVmIEhBVkVfTElOVVhfQ0FOX0JDTV9ICisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQ0FOX0JDTSk7CisgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkNBTl9CQ01fVFhfU0VUVVAiLCBUWF9TRVRVUCk7CisgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkNBTl9CQ01fVFhfREVMRVRFIiwgVFhfREVMRVRFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQ0FOX0JDTV9UWF9SRUFEIiwgVFhfUkVBRCk7CisgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkNBTl9CQ01fVFhfU0VORCIsIFRYX1NFTkQpOworICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJDQU5fQkNNX1JYX1NFVFVQIiwgUlhfU0VUVVApOworICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJDQU5fQkNNX1JYX0RFTEVURSIsIFJYX0RFTEVURSk7CisgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkNBTl9CQ01fUlhfUkVBRCIsIFJYX1JFQUQpOworICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJDQU5fQkNNX1RYX1NUQVRVUyIsIFRYX1NUQVRVUyk7CisgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkNBTl9CQ01fVFhfRVhQSVJFRCIsIFRYX0VYUElSRUQpOworICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJDQU5fQkNNX1JYX1NUQVRVUyIsIFJYX1NUQVRVUyk7CisgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkNBTl9CQ01fUlhfVElNRU9VVCIsIFJYX1RJTUVPVVQpOworICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJDQU5fQkNNX1JYX0NIQU5HRUQiLCBSWF9DSEFOR0VEKTsKICNlbmRpZgogI2lmZGVmIFNPTF9SRFMKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09MX1JEUyIsIFNPTF9SRFMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPTF9SRFMpOwogI2VuZGlmCiAjaWZkZWYgUkRTX0NBTkNFTF9TRU5UX1RPCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJEU19DQU5DRUxfU0VOVF9UTyIsIFJEU19DQU5DRUxfU0VOVF9UTyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkRTX0NBTkNFTF9TRU5UX1RPKTsKICNlbmRpZgogI2lmZGVmIFJEU19HRVRfTVIKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkRTX0dFVF9NUiIsIFJEU19HRVRfTVIpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJEU19HRVRfTVIpOwogI2VuZGlmCiAjaWZkZWYgUkRTX0ZSRUVfTVIKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkRTX0ZSRUVfTVIiLCBSRFNfRlJFRV9NUik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkRTX0ZSRUVfTVIpOwogI2VuZGlmCiAjaWZkZWYgUkRTX1JFQ1ZFUlIKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkRTX1JFQ1ZFUlIiLCBSRFNfUkVDVkVSUik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkRTX1JFQ1ZFUlIpOwogI2VuZGlmCiAjaWZkZWYgUkRTX0NPTkdfTU9OSVRPUgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSRFNfQ09OR19NT05JVE9SIiwgUkRTX0NPTkdfTU9OSVRPUik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkRTX0NPTkdfTU9OSVRPUik7CiAjZW5kaWYKICNpZmRlZiBSRFNfR0VUX01SX0ZPUl9ERVNUCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJEU19HRVRfTVJfRk9SX0RFU1QiLCBSRFNfR0VUX01SX0ZPUl9ERVNUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSRFNfR0VUX01SX0ZPUl9ERVNUKTsKICNlbmRpZgogI2lmZGVmICBJUFBST1RPX0lQCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fSVAiLCBJUFBST1RPX0lQKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX0lQKTsKICNlbHNlCiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fSVAiLCAwKTsKICNlbmRpZgogI2lmZGVmICBJUFBST1RPX0hPUE9QVFMKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19IT1BPUFRTIiwgSVBQUk9UT19IT1BPUFRTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX0hPUE9QVFMpOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fSUNNUAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX0lDTVAiLCBJUFBST1RPX0lDTVApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fSUNNUCk7CiAjZWxzZQogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX0lDTVAiLCAxKTsKICNlbmRpZgogI2lmZGVmICBJUFBST1RPX0lHTVAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19JR01QIiwgSVBQUk9UT19JR01QKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX0lHTVApOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fR0dQCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fR0dQIiwgSVBQUk9UT19HR1ApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fR0dQKTsKICNlbmRpZgogI2lmZGVmICBJUFBST1RPX0lQVjQKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19JUFY0IiwgSVBQUk9UT19JUFY0KTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX0lQVjQpOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fSVBWNgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX0lQVjYiLCBJUFBST1RPX0lQVjYpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fSVBWNik7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19JUElQCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fSVBJUCIsIElQUFJPVE9fSVBJUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19JUElQKTsKICNlbmRpZgogI2lmZGVmICBJUFBST1RPX1RDUAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX1RDUCIsIElQUFJPVE9fVENQKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX1RDUCk7CiAjZWxzZQogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX1RDUCIsIDYpOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fRUdQCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fRUdQIiwgSVBQUk9UT19FR1ApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fRUdQKTsKICNlbmRpZgogI2lmZGVmICBJUFBST1RPX1BVUAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX1BVUCIsIElQUFJPVE9fUFVQKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX1BVUCk7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19VRFAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19VRFAiLCBJUFBST1RPX1VEUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19VRFApOwogI2Vsc2UKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19VRFAiLCAxNyk7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19JRFAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19JRFAiLCBJUFBST1RPX0lEUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19JRFApOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fSEVMTE8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19IRUxMTyIsIElQUFJPVE9fSEVMTE8pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fSEVMTE8pOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fTkQKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19ORCIsIElQUFJPVE9fTkQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fTkQpOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fVFAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19UUCIsIElQUFJPVE9fVFApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fVFApOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fSVBWNgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX0lQVjYiLCBJUFBST1RPX0lQVjYpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fSVBWNik7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19ST1VUSU5HCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fUk9VVElORyIsIElQUFJPVE9fUk9VVElORyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19ST1VUSU5HKTsKICNlbmRpZgogI2lmZGVmICBJUFBST1RPX0ZSQUdNRU5UCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fRlJBR01FTlQiLCBJUFBST1RPX0ZSQUdNRU5UKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX0ZSQUdNRU5UKTsKICNlbmRpZgogI2lmZGVmICBJUFBST1RPX1JTVlAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19SU1ZQIiwgSVBQUk9UT19SU1ZQKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX1JTVlApOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fR1JFCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fR1JFIiwgSVBQUk9UT19HUkUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fR1JFKTsKICNlbmRpZgogI2lmZGVmICBJUFBST1RPX0VTUAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX0VTUCIsIElQUFJPVE9fRVNQKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX0VTUCk7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19BSAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX0FIIiwgSVBQUk9UT19BSCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19BSCk7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19NT0JJTEUKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19NT0JJTEUiLCBJUFBST1RPX01PQklMRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19NT0JJTEUpOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fSUNNUFY2Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fSUNNUFY2IiwgSVBQUk9UT19JQ01QVjYpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fSUNNUFY2KTsKICNlbmRpZgogI2lmZGVmICBJUFBST1RPX05PTkUKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19OT05FIiwgSVBQUk9UT19OT05FKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX05PTkUpOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fRFNUT1BUUwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX0RTVE9QVFMiLCBJUFBST1RPX0RTVE9QVFMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fRFNUT1BUUyk7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19YVFAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19YVFAiLCBJUFBST1RPX1hUUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19YVFApOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fRU9OCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fRU9OIiwgSVBQUk9UT19FT04pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fRU9OKTsKICNlbmRpZgogI2lmZGVmICBJUFBST1RPX1BJTQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX1BJTSIsIElQUFJPVE9fUElNKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX1BJTSk7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19JUENPTVAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19JUENPTVAiLCBJUFBST1RPX0lQQ09NUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19JUENPTVApOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fVlJSUAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX1ZSUlAiLCBJUFBST1RPX1ZSUlApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fVlJSUCk7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19TQ1RQCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fU0NUUCIsIElQUFJPVE9fU0NUUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19TQ1RQKTsKICNlbmRpZgogI2lmZGVmICBJUFBST1RPX0JJUAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX0JJUCIsIElQUFJPVE9fQklQKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX0JJUCk7CiAjZW5kaWYKIC8qKi8KICNpZmRlZiAgSVBQUk9UT19SQVcKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19SQVciLCBJUFBST1RPX1JBVyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19SQVcpOwogI2Vsc2UKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19SQVciLCAyNTUpOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fTUFYCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fTUFYIiwgSVBQUk9UT19NQVgpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fTUFYKTsKICNlbmRpZgogCiAjaWZkZWYgIFNZU1BST1RPX0NPTlRST0wKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU1lTUFJPVE9fQ09OVFJPTCIsIFNZU1BST1RPX0NPTlRST0wpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNZU1BST1RPX0NPTlRST0wpOwogI2VuZGlmCiAKICAgICAvKiBTb21lIHBvcnQgY29uZmlndXJhdGlvbiAqLwogI2lmZGVmICBJUFBPUlRfUkVTRVJWRUQKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQT1JUX1JFU0VSVkVEIiwgSVBQT1JUX1JFU0VSVkVEKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBPUlRfUkVTRVJWRUQpOwogI2Vsc2UKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQT1JUX1JFU0VSVkVEIiwgMTAyNCk7CiAjZW5kaWYKICNpZmRlZiAgSVBQT1JUX1VTRVJSRVNFUlZFRAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBPUlRfVVNFUlJFU0VSVkVEIiwgSVBQT1JUX1VTRVJSRVNFUlZFRCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQT1JUX1VTRVJSRVNFUlZFRCk7CiAjZWxzZQogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBPUlRfVVNFUlJFU0VSVkVEIiwgNTAwMCk7CiAjZW5kaWYKIAogICAgIC8qIFNvbWUgcmVzZXJ2ZWQgSVAgdi40IGFkZHJlc3NlcyAqLwogI2lmZGVmICBJTkFERFJfQU5ZCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklOQUREUl9BTlkiLCBJTkFERFJfQU5ZKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJTkFERFJfQU5ZKTsKICNlbHNlCiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklOQUREUl9BTlkiLCAweDAwMDAwMDAwKTsKICNlbmRpZgogI2lmZGVmICBJTkFERFJfQlJPQURDQVNUCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklOQUREUl9CUk9BRENBU1QiLCBJTkFERFJfQlJPQURDQVNUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJTkFERFJfQlJPQURDQVNUKTsKICNlbHNlCiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklOQUREUl9CUk9BRENBU1QiLCAweGZmZmZmZmZmKTsKICNlbmRpZgogI2lmZGVmICBJTkFERFJfTE9PUEJBQ0sKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSU5BRERSX0xPT1BCQUNLIiwgSU5BRERSX0xPT1BCQUNLKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJTkFERFJfTE9PUEJBQ0spOwogI2Vsc2UKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSU5BRERSX0xPT1BCQUNLIiwgMHg3RjAwMDAwMSk7CiAjZW5kaWYKICNpZmRlZiAgSU5BRERSX1VOU1BFQ19HUk9VUAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJTkFERFJfVU5TUEVDX0dST1VQIiwgSU5BRERSX1VOU1BFQ19HUk9VUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSU5BRERSX1VOU1BFQ19HUk9VUCk7CiAjZWxzZQogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJTkFERFJfVU5TUEVDX0dST1VQIiwgMHhlMDAwMDAwMCk7CiAjZW5kaWYKQEAgLTYzMjEsMzU0ICs2NTIwLDM1MyBAQAogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJTkFERFJfQUxMSE9TVFNfR1JPVVAiLCAweGUwMDAwMDAxKTsKICNlbmRpZgogI2lmZGVmICBJTkFERFJfTUFYX0xPQ0FMX0dST1VQCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklOQUREUl9NQVhfTE9DQUxfR1JPVVAiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOQUREUl9NQVhfTE9DQUxfR1JPVVApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElOQUREUl9NQVhfTE9DQUxfR1JPVVApOwogI2Vsc2UKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSU5BRERSX01BWF9MT0NBTF9HUk9VUCIsIDB4ZTAwMDAwZmYpOwogI2VuZGlmCiAjaWZkZWYgIElOQUREUl9OT05FCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklOQUREUl9OT05FIiwgSU5BRERSX05PTkUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElOQUREUl9OT05FKTsKICNlbHNlCiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklOQUREUl9OT05FIiwgMHhmZmZmZmZmZik7CiAjZW5kaWYKIAogICAgIC8qIElQdjQgW2dzXWV0c29ja29wdCBvcHRpb25zICovCiAjaWZkZWYgIElQX09QVElPTlMKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBfT1BUSU9OUyIsIElQX09QVElPTlMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQX09QVElPTlMpOwogI2VuZGlmCiAjaWZkZWYgIElQX0hEUklOQ0wKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBfSERSSU5DTCIsIElQX0hEUklOQ0wpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQX0hEUklOQ0wpOwogI2VuZGlmCiAjaWZkZWYgIElQX1RPUwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUF9UT1MiLCBJUF9UT1MpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQX1RPUyk7CiAjZW5kaWYKICNpZmRlZiAgSVBfVFRMCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQX1RUTCIsIElQX1RUTCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBfVFRMKTsKICNlbmRpZgogI2lmZGVmICBJUF9SRUNWT1BUUwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUF9SRUNWT1BUUyIsIElQX1JFQ1ZPUFRTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUF9SRUNWT1BUUyk7CiAjZW5kaWYKICNpZmRlZiAgSVBfUkVDVlJFVE9QVFMKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBfUkVDVlJFVE9QVFMiLCBJUF9SRUNWUkVUT1BUUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBfUkVDVlJFVE9QVFMpOwogI2VuZGlmCiAjaWZkZWYgIElQX1JFQ1ZEU1RBRERSCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQX1JFQ1ZEU1RBRERSIiwgSVBfUkVDVkRTVEFERFIpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQX1JFQ1ZEU1RBRERSKTsKICNlbmRpZgogI2lmZGVmICBJUF9SRVRPUFRTCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQX1JFVE9QVFMiLCBJUF9SRVRPUFRTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUF9SRVRPUFRTKTsKICNlbmRpZgogI2lmZGVmICBJUF9NVUxUSUNBU1RfSUYKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBfTVVMVElDQVNUX0lGIiwgSVBfTVVMVElDQVNUX0lGKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUF9NVUxUSUNBU1RfSUYpOwogI2VuZGlmCiAjaWZkZWYgIElQX01VTFRJQ0FTVF9UVEwKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBfTVVMVElDQVNUX1RUTCIsIElQX01VTFRJQ0FTVF9UVEwpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQX01VTFRJQ0FTVF9UVEwpOwogI2VuZGlmCiAjaWZkZWYgIElQX01VTFRJQ0FTVF9MT09QCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQX01VTFRJQ0FTVF9MT09QIiwgSVBfTVVMVElDQVNUX0xPT1ApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQX01VTFRJQ0FTVF9MT09QKTsKICNlbmRpZgogI2lmZGVmICBJUF9BRERfTUVNQkVSU0hJUAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUF9BRERfTUVNQkVSU0hJUCIsIElQX0FERF9NRU1CRVJTSElQKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUF9BRERfTUVNQkVSU0hJUCk7CiAjZW5kaWYKICNpZmRlZiAgSVBfRFJPUF9NRU1CRVJTSElQCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQX0RST1BfTUVNQkVSU0hJUCIsIElQX0RST1BfTUVNQkVSU0hJUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBfRFJPUF9NRU1CRVJTSElQKTsKICNlbmRpZgogI2lmZGVmICBJUF9ERUZBVUxUX01VTFRJQ0FTVF9UVEwKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBfREVGQVVMVF9NVUxUSUNBU1RfVFRMIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUF9ERUZBVUxUX01VTFRJQ0FTVF9UVEwpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQX0RFRkFVTFRfTVVMVElDQVNUX1RUTCk7CiAjZW5kaWYKICNpZmRlZiAgSVBfREVGQVVMVF9NVUxUSUNBU1RfTE9PUAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUF9ERUZBVUxUX01VTFRJQ0FTVF9MT09QIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUF9ERUZBVUxUX01VTFRJQ0FTVF9MT09QKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUF9ERUZBVUxUX01VTFRJQ0FTVF9MT09QKTsKICNlbmRpZgogI2lmZGVmICBJUF9NQVhfTUVNQkVSU0hJUFMKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBfTUFYX01FTUJFUlNISVBTIiwgSVBfTUFYX01FTUJFUlNISVBTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUF9NQVhfTUVNQkVSU0hJUFMpOwogI2VuZGlmCiAjaWZkZWYgIElQX1RSQU5TUEFSRU5UCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQX1RSQU5TUEFSRU5UIiwgSVBfVFJBTlNQQVJFTlQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQX1RSQU5TUEFSRU5UKTsKICNlbmRpZgogCiAgICAgLyogSVB2NiBbZ3NdZXRzb2Nrb3B0IG9wdGlvbnMsIGRlZmluZWQgaW4gUkZDMjU1MyAqLwogI2lmZGVmICBJUFY2X0pPSU5fR1JPVVAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBWNl9KT0lOX0dST1VQIiwgSVBWNl9KT0lOX0dST1VQKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFY2X0pPSU5fR1JPVVApOwogI2VuZGlmCiAjaWZkZWYgIElQVjZfTEVBVkVfR1JPVVAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBWNl9MRUFWRV9HUk9VUCIsIElQVjZfTEVBVkVfR1JPVVApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQVjZfTEVBVkVfR1JPVVApOwogI2VuZGlmCiAjaWZkZWYgIElQVjZfTVVMVElDQVNUX0hPUFMKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBWNl9NVUxUSUNBU1RfSE9QUyIsIElQVjZfTVVMVElDQVNUX0hPUFMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQVjZfTVVMVElDQVNUX0hPUFMpOwogI2VuZGlmCiAjaWZkZWYgIElQVjZfTVVMVElDQVNUX0lGCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQVjZfTVVMVElDQVNUX0lGIiwgSVBWNl9NVUxUSUNBU1RfSUYpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQVjZfTVVMVElDQVNUX0lGKTsKICNlbmRpZgogI2lmZGVmICBJUFY2X01VTFRJQ0FTVF9MT09QCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQVjZfTVVMVElDQVNUX0xPT1AiLCBJUFY2X01VTFRJQ0FTVF9MT09QKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFY2X01VTFRJQ0FTVF9MT09QKTsKICNlbmRpZgogI2lmZGVmICBJUFY2X1VOSUNBU1RfSE9QUwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFY2X1VOSUNBU1RfSE9QUyIsIElQVjZfVU5JQ0FTVF9IT1BTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFY2X1VOSUNBU1RfSE9QUyk7CiAjZW5kaWYKICAgICAvKiBBZGRpdGlvbmFsIElQVjYgc29ja2V0IG9wdGlvbnMsIGRlZmluZWQgaW4gUkZDIDM0OTMgKi8KICNpZmRlZiBJUFY2X1Y2T05MWQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFY2X1Y2T05MWSIsIElQVjZfVjZPTkxZKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFY2X1Y2T05MWSk7CiAjZW5kaWYKICAgICAvKiBBZHZhbmNlZCBJUFY2IHNvY2tldCBvcHRpb25zLCBmcm9tIFJGQyAzNTQyICovCiAjaWZkZWYgSVBWNl9DSEVDS1NVTQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFY2X0NIRUNLU1VNIiwgSVBWNl9DSEVDS1NVTSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBWNl9DSEVDS1NVTSk7CiAjZW5kaWYKICNpZmRlZiBJUFY2X0RPTlRGUkFHCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQVjZfRE9OVEZSQUciLCBJUFY2X0RPTlRGUkFHKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFY2X0RPTlRGUkFHKTsKICNlbmRpZgogI2lmZGVmIElQVjZfRFNUT1BUUwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFY2X0RTVE9QVFMiLCBJUFY2X0RTVE9QVFMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQVjZfRFNUT1BUUyk7CiAjZW5kaWYKICNpZmRlZiBJUFY2X0hPUExJTUlUCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQVjZfSE9QTElNSVQiLCBJUFY2X0hPUExJTUlUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFY2X0hPUExJTUlUKTsKICNlbmRpZgogI2lmZGVmIElQVjZfSE9QT1BUUwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFY2X0hPUE9QVFMiLCBJUFY2X0hPUE9QVFMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQVjZfSE9QT1BUUyk7CiAjZW5kaWYKICNpZmRlZiBJUFY2X05FWFRIT1AKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBWNl9ORVhUSE9QIiwgSVBWNl9ORVhUSE9QKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFY2X05FWFRIT1ApOwogI2VuZGlmCiAjaWZkZWYgSVBWNl9QQVRITVRVCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQVjZfUEFUSE1UVSIsIElQVjZfUEFUSE1UVSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBWNl9QQVRITVRVKTsKICNlbmRpZgogI2lmZGVmIElQVjZfUEtUSU5GTwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFY2X1BLVElORk8iLCBJUFY2X1BLVElORk8pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQVjZfUEtUSU5GTyk7CiAjZW5kaWYKICNpZmRlZiBJUFY2X1JFQ1ZEU1RPUFRTCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQVjZfUkVDVkRTVE9QVFMiLCBJUFY2X1JFQ1ZEU1RPUFRTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFY2X1JFQ1ZEU1RPUFRTKTsKICNlbmRpZgogI2lmZGVmIElQVjZfUkVDVkhPUExJTUlUCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQVjZfUkVDVkhPUExJTUlUIiwgSVBWNl9SRUNWSE9QTElNSVQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQVjZfUkVDVkhPUExJTUlUKTsKICNlbmRpZgogI2lmZGVmIElQVjZfUkVDVkhPUE9QVFMKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBWNl9SRUNWSE9QT1BUUyIsIElQVjZfUkVDVkhPUE9QVFMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQVjZfUkVDVkhPUE9QVFMpOwogI2VuZGlmCiAjaWZkZWYgSVBWNl9SRUNWUEtUSU5GTwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFY2X1JFQ1ZQS1RJTkZPIiwgSVBWNl9SRUNWUEtUSU5GTyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBWNl9SRUNWUEtUSU5GTyk7CiAjZW5kaWYKICNpZmRlZiBJUFY2X1JFQ1ZSVEhEUgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFY2X1JFQ1ZSVEhEUiIsIElQVjZfUkVDVlJUSERSKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFY2X1JFQ1ZSVEhEUik7CiAjZW5kaWYKICNpZmRlZiBJUFY2X1JFQ1ZUQ0xBU1MKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBWNl9SRUNWVENMQVNTIiwgSVBWNl9SRUNWVENMQVNTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFY2X1JFQ1ZUQ0xBU1MpOwogI2VuZGlmCiAjaWZkZWYgSVBWNl9SVEhEUgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFY2X1JUSERSIiwgSVBWNl9SVEhEUik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBWNl9SVEhEUik7CiAjZW5kaWYKICNpZmRlZiBJUFY2X1JUSERSRFNUT1BUUwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFY2X1JUSERSRFNUT1BUUyIsIElQVjZfUlRIRFJEU1RPUFRTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFY2X1JUSERSRFNUT1BUUyk7CiAjZW5kaWYKICNpZmRlZiBJUFY2X1JUSERSX1RZUEVfMAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFY2X1JUSERSX1RZUEVfMCIsIElQVjZfUlRIRFJfVFlQRV8wKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFY2X1JUSERSX1RZUEVfMCk7CiAjZW5kaWYKICNpZmRlZiBJUFY2X1JFQ1ZQQVRITVRVCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQVjZfUkVDVlBBVEhNVFUiLCBJUFY2X1JFQ1ZQQVRITVRVKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFY2X1JFQ1ZQQVRITVRVKTsKICNlbmRpZgogI2lmZGVmIElQVjZfVENMQVNTCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQVjZfVENMQVNTIiwgSVBWNl9UQ0xBU1MpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQVjZfVENMQVNTKTsKICNlbmRpZgogI2lmZGVmIElQVjZfVVNFX01JTl9NVFUKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBWNl9VU0VfTUlOX01UVSIsIElQVjZfVVNFX01JTl9NVFUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQVjZfVVNFX01JTl9NVFUpOwogI2VuZGlmCiAKICAgICAvKiBUQ1Agb3B0aW9ucyAqLwogI2lmZGVmICBUQ1BfTk9ERUxBWQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUQ1BfTk9ERUxBWSIsIFRDUF9OT0RFTEFZKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUQ1BfTk9ERUxBWSk7CiAjZW5kaWYKICNpZmRlZiAgVENQX01BWFNFRwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUQ1BfTUFYU0VHIiwgVENQX01BWFNFRyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVENQX01BWFNFRyk7CiAjZW5kaWYKICNpZmRlZiAgVENQX0NPUksKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVENQX0NPUksiLCBUQ1BfQ09SSyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVENQX0NPUkspOwogI2VuZGlmCiAjaWZkZWYgIFRDUF9LRUVQSURMRQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUQ1BfS0VFUElETEUiLCBUQ1BfS0VFUElETEUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRDUF9LRUVQSURMRSk7CiAjZW5kaWYKICNpZmRlZiAgVENQX0tFRVBJTlRWTAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUQ1BfS0VFUElOVFZMIiwgVENQX0tFRVBJTlRWTCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVENQX0tFRVBJTlRWTCk7CiAjZW5kaWYKICNpZmRlZiAgVENQX0tFRVBDTlQKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVENQX0tFRVBDTlQiLCBUQ1BfS0VFUENOVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVENQX0tFRVBDTlQpOwogI2VuZGlmCiAjaWZkZWYgIFRDUF9TWU5DTlQKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVENQX1NZTkNOVCIsIFRDUF9TWU5DTlQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRDUF9TWU5DTlQpOwogI2VuZGlmCiAjaWZkZWYgIFRDUF9MSU5HRVIyCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRDUF9MSU5HRVIyIiwgVENQX0xJTkdFUjIpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRDUF9MSU5HRVIyKTsKICNlbmRpZgogI2lmZGVmICBUQ1BfREVGRVJfQUNDRVBUCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRDUF9ERUZFUl9BQ0NFUFQiLCBUQ1BfREVGRVJfQUNDRVBUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUQ1BfREVGRVJfQUNDRVBUKTsKICNlbmRpZgogI2lmZGVmICBUQ1BfV0lORE9XX0NMQU1QCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRDUF9XSU5ET1dfQ0xBTVAiLCBUQ1BfV0lORE9XX0NMQU1QKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUQ1BfV0lORE9XX0NMQU1QKTsKICNlbmRpZgogI2lmZGVmICBUQ1BfSU5GTwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUQ1BfSU5GTyIsIFRDUF9JTkZPKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUQ1BfSU5GTyk7CiAjZW5kaWYKICNpZmRlZiAgVENQX1FVSUNLQUNLCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRDUF9RVUlDS0FDSyIsIFRDUF9RVUlDS0FDSyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVENQX1FVSUNLQUNLKTsKICNlbmRpZgotCisjaWZkZWYgIFRDUF9GQVNUT1BFTgorICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRDUF9GQVNUT1BFTik7CisjZW5kaWYKIAogICAgIC8qIElQWCBvcHRpb25zICovCiAjaWZkZWYgIElQWF9UWVBFCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQWF9UWVBFIiwgSVBYX1RZUEUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQWF9UWVBFKTsKICNlbmRpZgogCiAvKiBSZWxpYWJsZSBEYXRhZ3JhbSBTb2NrZXRzICovCiAjaWZkZWYgUkRTX0NNU0dfUkRNQV9BUkdTCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJEU19DTVNHX1JETUFfQVJHUyIsIFJEU19DTVNHX1JETUFfQVJHUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkRTX0NNU0dfUkRNQV9BUkdTKTsKICNlbmRpZgogI2lmZGVmIFJEU19DTVNHX1JETUFfREVTVAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSRFNfQ01TR19SRE1BX0RFU1QiLCBSRFNfQ01TR19SRE1BX0RFU1QpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJEU19DTVNHX1JETUFfREVTVCk7CiAjZW5kaWYKICNpZmRlZiBSRFNfQ01TR19SRE1BX01BUAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSRFNfQ01TR19SRE1BX01BUCIsIFJEU19DTVNHX1JETUFfTUFQKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSRFNfQ01TR19SRE1BX01BUCk7CiAjZW5kaWYKICNpZmRlZiBSRFNfQ01TR19SRE1BX1NUQVRVUwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSRFNfQ01TR19SRE1BX1NUQVRVUyIsIFJEU19DTVNHX1JETUFfU1RBVFVTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSRFNfQ01TR19SRE1BX1NUQVRVUyk7CiAjZW5kaWYKICNpZmRlZiBSRFNfQ01TR19SRE1BX1VQREFURQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSRFNfQ01TR19SRE1BX1VQREFURSIsIFJEU19DTVNHX1JETUFfVVBEQVRFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSRFNfQ01TR19SRE1BX1VQREFURSk7CiAjZW5kaWYKICNpZmRlZiBSRFNfUkRNQV9SRUFEV1JJVEUKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkRTX1JETUFfUkVBRFdSSVRFIiwgUkRTX1JETUFfUkVBRFdSSVRFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSRFNfUkRNQV9SRUFEV1JJVEUpOwogI2VuZGlmCiAjaWZkZWYgUkRTX1JETUFfRkVOQ0UKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkRTX1JETUFfRkVOQ0UiLCBSRFNfUkRNQV9GRU5DRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkRTX1JETUFfRkVOQ0UpOwogI2VuZGlmCiAjaWZkZWYgUkRTX1JETUFfSU5WQUxJREFURQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSRFNfUkRNQV9JTlZBTElEQVRFIiwgUkRTX1JETUFfSU5WQUxJREFURSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkRTX1JETUFfSU5WQUxJREFURSk7CiAjZW5kaWYKICNpZmRlZiBSRFNfUkRNQV9VU0VfT05DRQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSRFNfUkRNQV9VU0VfT05DRSIsIFJEU19SRE1BX1VTRV9PTkNFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSRFNfUkRNQV9VU0VfT05DRSk7CiAjZW5kaWYKICNpZmRlZiBSRFNfUkRNQV9ET05UV0FJVAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSRFNfUkRNQV9ET05UV0FJVCIsIFJEU19SRE1BX0RPTlRXQUlUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSRFNfUkRNQV9ET05UV0FJVCk7CiAjZW5kaWYKICNpZmRlZiBSRFNfUkRNQV9OT1RJRllfTUUKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkRTX1JETUFfTk9USUZZX01FIiwgUkRTX1JETUFfTk9USUZZX01FKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSRFNfUkRNQV9OT1RJRllfTUUpOwogI2VuZGlmCiAjaWZkZWYgUkRTX1JETUFfU0lMRU5UCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJEU19SRE1BX1NJTEVOVCIsIFJEU19SRE1BX1NJTEVOVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkRTX1JETUFfU0lMRU5UKTsKICNlbmRpZgogCiAgICAgLyogZ2V0e2FkZHIsbmFtZX1pbmZvIHBhcmFtZXRlcnMgKi8KICNpZmRlZiBFQUlfQUREUkZBTUlMWQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJFQUlfQUREUkZBTUlMWSIsIEVBSV9BRERSRkFNSUxZKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFQUlfQUREUkZBTUlMWSk7CiAjZW5kaWYKICNpZmRlZiBFQUlfQUdBSU4KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRUFJX0FHQUlOIiwgRUFJX0FHQUlOKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFQUlfQUdBSU4pOwogI2VuZGlmCiAjaWZkZWYgRUFJX0JBREZMQUdTCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkVBSV9CQURGTEFHUyIsIEVBSV9CQURGTEFHUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRUFJX0JBREZMQUdTKTsKICNlbmRpZgogI2lmZGVmIEVBSV9GQUlMCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkVBSV9GQUlMIiwgRUFJX0ZBSUwpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVBSV9GQUlMKTsKICNlbmRpZgogI2lmZGVmIEVBSV9GQU1JTFkKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRUFJX0ZBTUlMWSIsIEVBSV9GQU1JTFkpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVBSV9GQU1JTFkpOwogI2VuZGlmCiAjaWZkZWYgRUFJX01FTU9SWQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJFQUlfTUVNT1JZIiwgRUFJX01FTU9SWSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRUFJX01FTU9SWSk7CiAjZW5kaWYKICNpZmRlZiBFQUlfTk9EQVRBCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkVBSV9OT0RBVEEiLCBFQUlfTk9EQVRBKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFQUlfTk9EQVRBKTsKICNlbmRpZgogI2lmZGVmIEVBSV9OT05BTUUKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRUFJX05PTkFNRSIsIEVBSV9OT05BTUUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVBSV9OT05BTUUpOwogI2VuZGlmCiAjaWZkZWYgRUFJX09WRVJGTE9XCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkVBSV9PVkVSRkxPVyIsIEVBSV9PVkVSRkxPVyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRUFJX09WRVJGTE9XKTsKICNlbmRpZgogI2lmZGVmIEVBSV9TRVJWSUNFCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkVBSV9TRVJWSUNFIiwgRUFJX1NFUlZJQ0UpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVBSV9TRVJWSUNFKTsKICNlbmRpZgogI2lmZGVmIEVBSV9TT0NLVFlQRQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJFQUlfU09DS1RZUEUiLCBFQUlfU09DS1RZUEUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVBSV9TT0NLVFlQRSk7CiAjZW5kaWYKICNpZmRlZiBFQUlfU1lTVEVNCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkVBSV9TWVNURU0iLCBFQUlfU1lTVEVNKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFQUlfU1lTVEVNKTsKICNlbmRpZgogI2lmZGVmIEVBSV9CQURISU5UUwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJFQUlfQkFESElOVFMiLCBFQUlfQkFESElOVFMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVBSV9CQURISU5UUyk7CiAjZW5kaWYKICNpZmRlZiBFQUlfUFJPVE9DT0wKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRUFJX1BST1RPQ09MIiwgRUFJX1BST1RPQ09MKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFQUlfUFJPVE9DT0wpOwogI2VuZGlmCiAjaWZkZWYgRUFJX01BWAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJFQUlfTUFYIiwgRUFJX01BWCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRUFJX01BWCk7CiAjZW5kaWYKICNpZmRlZiBBSV9QQVNTSVZFCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFJX1BBU1NJVkUiLCBBSV9QQVNTSVZFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBSV9QQVNTSVZFKTsKICNlbmRpZgogI2lmZGVmIEFJX0NBTk9OTkFNRQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBSV9DQU5PTk5BTUUiLCBBSV9DQU5PTk5BTUUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFJX0NBTk9OTkFNRSk7CiAjZW5kaWYKICNpZmRlZiBBSV9OVU1FUklDSE9TVAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBSV9OVU1FUklDSE9TVCIsIEFJX05VTUVSSUNIT1NUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBSV9OVU1FUklDSE9TVCk7CiAjZW5kaWYKICNpZmRlZiBBSV9OVU1FUklDU0VSVgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBSV9OVU1FUklDU0VSViIsIEFJX05VTUVSSUNTRVJWKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBSV9OVU1FUklDU0VSVik7CiAjZW5kaWYKICNpZmRlZiBBSV9NQVNLCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFJX01BU0siLCBBSV9NQVNLKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBSV9NQVNLKTsKICNlbmRpZgogI2lmZGVmIEFJX0FMTAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBSV9BTEwiLCBBSV9BTEwpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFJX0FMTCk7CiAjZW5kaWYKICNpZmRlZiBBSV9WNE1BUFBFRF9DRkcKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUlfVjRNQVBQRURfQ0ZHIiwgQUlfVjRNQVBQRURfQ0ZHKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBSV9WNE1BUFBFRF9DRkcpOwogI2VuZGlmCiAjaWZkZWYgQUlfQUREUkNPTkZJRwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBSV9BRERSQ09ORklHIiwgQUlfQUREUkNPTkZJRyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUlfQUREUkNPTkZJRyk7CiAjZW5kaWYKICNpZmRlZiBBSV9WNE1BUFBFRAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBSV9WNE1BUFBFRCIsIEFJX1Y0TUFQUEVEKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBSV9WNE1BUFBFRCk7CiAjZW5kaWYKICNpZmRlZiBBSV9ERUZBVUxUCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFJX0RFRkFVTFQiLCBBSV9ERUZBVUxUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBSV9ERUZBVUxUKTsKICNlbmRpZgogI2lmZGVmIE5JX01BWEhPU1QKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTklfTUFYSE9TVCIsIE5JX01BWEhPU1QpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE5JX01BWEhPU1QpOwogI2VuZGlmCiAjaWZkZWYgTklfTUFYU0VSVgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJOSV9NQVhTRVJWIiwgTklfTUFYU0VSVik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTklfTUFYU0VSVik7CiAjZW5kaWYKICNpZmRlZiBOSV9OT0ZRRE4KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTklfTk9GUUROIiwgTklfTk9GUUROKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBOSV9OT0ZRRE4pOwogI2VuZGlmCiAjaWZkZWYgTklfTlVNRVJJQ0hPU1QKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTklfTlVNRVJJQ0hPU1QiLCBOSV9OVU1FUklDSE9TVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTklfTlVNRVJJQ0hPU1QpOwogI2VuZGlmCiAjaWZkZWYgTklfTkFNRVJFUUQKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTklfTkFNRVJFUUQiLCBOSV9OQU1FUkVRRCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTklfTkFNRVJFUUQpOwogI2VuZGlmCiAjaWZkZWYgTklfTlVNRVJJQ1NFUlYKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTklfTlVNRVJJQ1NFUlYiLCBOSV9OVU1FUklDU0VSVik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTklfTlVNRVJJQ1NFUlYpOwogI2VuZGlmCiAjaWZkZWYgTklfREdSQU0KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTklfREdSQU0iLCBOSV9ER1JBTSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTklfREdSQU0pOwogI2VuZGlmCiAKICAgICAvKiBzaHV0ZG93bigpIHBhcmFtZXRlcnMgKi8KICNpZmRlZiBTSFVUX1JECi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNIVVRfUkQiLCBTSFVUX1JEKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTSFVUX1JEKTsKICNlbGlmIGRlZmluZWQoU0RfUkVDRUlWRSkKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU0hVVF9SRCIsIFNEX1JFQ0VJVkUpOwogI2Vsc2UKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU0hVVF9SRCIsIDApOwogI2VuZGlmCiAjaWZkZWYgU0hVVF9XUgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTSFVUX1dSIiwgU0hVVF9XUik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU0hVVF9XUik7CiAjZWxpZiBkZWZpbmVkKFNEX1NFTkQpCiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNIVVRfV1IiLCBTRF9TRU5EKTsKICNlbHNlCiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNIVVRfV1IiLCAxKTsKICNlbmRpZgogI2lmZGVmIFNIVVRfUkRXUgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTSFVUX1JEV1IiLCBTSFVUX1JEV1IpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNIVVRfUkRXUik7CiAjZWxpZiBkZWZpbmVkKFNEX0JPVEgpCiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNIVVRfUkRXUiIsIFNEX0JPVEgpOwogI2Vsc2UKQEAgLTY2ODgsMTQgKzY4ODYsMTQgQEAKICAgICAgICAgICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCBuYW1lc1tpXSwgdG1wKTsKICAgICAgICAgfQogICAgIH0KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkNWQUxMX09GRiIsIFJDVkFMTF9PRkYpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSQ1ZBTExfT04iLCBSQ1ZBTExfT04pOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSQ1ZBTExfU09DS0VUTEVWRUxPTkxZIiwgUkNWQUxMX1NPQ0tFVExFVkVMT05MWSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkNWQUxMX09GRik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkNWQUxMX09OKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSQ1ZBTExfU09DS0VUTEVWRUxPTkxZKTsKICNpZmRlZiBSQ1ZBTExfSVBMRVZFTAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSQ1ZBTExfSVBMRVZFTCIsIFJDVkFMTF9JUExFVkVMKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSQ1ZBTExfSVBMRVZFTCk7CiAjZW5kaWYKICNpZmRlZiBSQ1ZBTExfTUFYCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJDVkFMTF9NQVgiLCBSQ1ZBTExfTUFYKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSQ1ZBTExfTUFYKTsKICNlbmRpZgogI2VuZGlmIC8qIF9NU1RDUElQXyAqLwogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3NvY2tldG1vZHVsZS5oIGIvTW9kdWxlcy9zb2NrZXRtb2R1bGUuaAppbmRleCAwNDM1ODc4Li5iODNmOWFmIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3NvY2tldG1vZHVsZS5oCisrKyBiL01vZHVsZXMvc29ja2V0bW9kdWxlLmgKQEAgLTgsNyArOCw3IEBACiAjICAgaW5jbHVkZSA8c3lzL3NvY2tldC5oPgogIyBlbmRpZgogIyBpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0jIGlmICEoZGVmaW5lZChfX0NZR1dJTl9fKSB8fCAoZGVmaW5lZChQWU9TX09TMikgJiYgZGVmaW5lZChQWUNDX1ZBQ1BQKSkpCisjIGlmICFkZWZpbmVkKF9fQ1lHV0lOX18pCiAjICBpbmNsdWRlIDxuZXRpbmV0L3RjcC5oPgogIyBlbmRpZgogCkBAIC04MCw2ICs4MCwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L2Nhbi9yYXcuaD4KICNlbmRpZgogCisjaWZkZWYgSEFWRV9MSU5VWF9DQU5fQkNNX0gKKyNpbmNsdWRlIDxsaW51eC9jYW4vYmNtLmg+CisjZW5kaWYKKwogI2lmZGVmIEhBVkVfU1lTX1NZU19ET01BSU5fSAogI2luY2x1ZGUgPHN5cy9zeXNfZG9tYWluLmg+CiAjZW5kaWYKZGlmZiAtLWdpdCBhL01vZHVsZXMvc3B3ZG1vZHVsZS5jIGIvTW9kdWxlcy9zcHdkbW9kdWxlLmMKaW5kZXggMTk0YWUxOS4uNjhlYTFiNSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9zcHdkbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9zcHdkbW9kdWxlLmMKQEAgLTI2LDIyICsyNiwyNCBAQAogI2lmIGRlZmluZWQoSEFWRV9HRVRTUE5BTSkgfHwgZGVmaW5lZChIQVZFX0dFVFNQRU5UKQogCiBzdGF0aWMgUHlTdHJ1Y3RTZXF1ZW5jZV9GaWVsZCBzdHJ1Y3Rfc3B3ZF90eXBlX2ZpZWxkc1tdID0gewotICAgIHsic3BfbmFtIiwgImxvZ2luIG5hbWUifSwKLSAgICB7InNwX3B3ZCIsICJlbmNyeXB0ZWQgcGFzc3dvcmQifSwKKyAgICB7InNwX25hbXAiLCAibG9naW4gbmFtZSJ9LAorICAgIHsic3BfcHdkcCIsICJlbmNyeXB0ZWQgcGFzc3dvcmQifSwKICAgICB7InNwX2xzdGNoZyIsICJkYXRlIG9mIGxhc3QgY2hhbmdlIn0sCiAgICAgeyJzcF9taW4iLCAibWluICNkYXlzIGJldHdlZW4gY2hhbmdlcyJ9LAogICAgIHsic3BfbWF4IiwgIm1heCAjZGF5cyBiZXR3ZWVuIGNoYW5nZXMifSwKICAgICB7InNwX3dhcm4iLCAiI2RheXMgYmVmb3JlIHB3IGV4cGlyZXMgdG8gd2FybiB1c2VyIGFib3V0IGl0In0sCi0gICAgeyJzcF9pbmFjdCIsICIjZGF5cyBhZnRlciBwdyBleHBpcmVzIHVudGlsIGFjY291bnQgaXMgYmxvY2tlZCJ9LAotICAgIHsic3BfZXhwaXJlIiwgIiNkYXlzIHNpbmNlIDE5NzAtMDEtMDEgdW50aWwgYWNjb3VudCBpcyBkaXNhYmxlZCJ9LAorICAgIHsic3BfaW5hY3QiLCAiI2RheXMgYWZ0ZXIgcHcgZXhwaXJlcyB1bnRpbCBhY2NvdW50IGlzIGRpc2FibGVkIn0sCisgICAgeyJzcF9leHBpcmUiLCAiI2RheXMgc2luY2UgMTk3MC0wMS0wMSB3aGVuIGFjY291bnQgZXhwaXJlcyJ9LAogICAgIHsic3BfZmxhZyIsICJyZXNlcnZlZCJ9LAorICAgIHsic3BfbmFtIiwgImxvZ2luIG5hbWU7IGRlcHJlY2F0ZWQifSwgLyogQmFja3dhcmQgY29tcGF0aWJpbGl0eSAqLworICAgIHsic3BfcHdkIiwgImVuY3J5cHRlZCBwYXNzd29yZDsgZGVwcmVjYXRlZCJ9LCAvKiBCYWNrd2FyZCBjb21wYXRpYmlsaXR5ICovCiAgICAgezB9CiB9OwogCiBQeURvY19TVFJWQVIoc3RydWN0X3Nwd2RfX2RvY19fLAogInNwd2Quc3RydWN0X3Nwd2Q6IFJlc3VsdHMgZnJvbSBnZXRzcCooKSByb3V0aW5lcy5cblxuXAogVGhpcyBvYmplY3QgbWF5IGJlIGFjY2Vzc2VkIGVpdGhlciBhcyBhIDktdHVwbGUgb2ZcblwKLSAgKHNwX25hbSxzcF9wd2Qsc3BfbHN0Y2hnLHNwX21pbixzcF9tYXgsc3Bfd2FybixzcF9pbmFjdCxzcF9leHBpcmUsc3BfZmxhZylcblwKKyAgKHNwX25hbXAsc3BfcHdkcCxzcF9sc3RjaGcsc3BfbWluLHNwX21heCxzcF93YXJuLHNwX2luYWN0LHNwX2V4cGlyZSxzcF9mbGFnKVxuXAogb3IgdmlhIHRoZSBvYmplY3QgYXR0cmlidXRlcyBhcyBuYW1lZCBpbiB0aGUgYWJvdmUgdHVwbGUuIik7CiAKIHN0YXRpYyBQeVN0cnVjdFNlcXVlbmNlX0Rlc2Mgc3RydWN0X3Nwd2RfdHlwZV9kZXNjID0gewpAQCAtODYsNiArODgsOCBAQAogICAgIFNFVEkoc2V0SW5kZXgrKywgcC0+c3BfaW5hY3QpOwogICAgIFNFVEkoc2V0SW5kZXgrKywgcC0+c3BfZXhwaXJlKTsKICAgICBTRVRJKHNldEluZGV4KyssIHAtPnNwX2ZsYWcpOworICAgIFNFVFMoc2V0SW5kZXgrKywgcC0+c3BfbmFtcCk7IC8qIEJhY2t3YXJkIGNvbXBhdGliaWxpdHkgZm9yIHNwX25hbSAqLworICAgIFNFVFMoc2V0SW5kZXgrKywgcC0+c3BfcHdkcCk7IC8qIEJhY2t3YXJkIGNvbXBhdGliaWxpdHkgZm9yIHNwX3B3ZCAqLwogCiAjdW5kZWYgU0VUUwogI3VuZGVmIFNFVEkKQEAgLTE5Niw5ICsyMDAsMTEgQEAKICAgICBtPVB5TW9kdWxlX0NyZWF0ZSgmc3B3ZG1vZHVsZSk7CiAgICAgaWYgKG0gPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKCFpbml0aWFsaXplZCkKLSAgICAgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZSgmU3RydWN0U3B3ZFR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0cnVjdF9zcHdkX3R5cGVfZGVzYyk7CisgICAgaWYgKCFpbml0aWFsaXplZCkgeworICAgICAgICBpZiAoUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZTIoJlN0cnVjdFNwd2RUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0cnVjdF9zcHdkX3R5cGVfZGVzYykgPCAwKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogICAgIFB5X0lOQ1JFRigoUHlPYmplY3QgKikgJlN0cnVjdFNwd2RUeXBlKTsKICAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgInN0cnVjdF9zcHdkIiwgKFB5T2JqZWN0ICopICZTdHJ1Y3RTcHdkVHlwZSk7CiAgICAgaW5pdGlhbGl6ZWQgPSAxOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9zcmUuaCBiL01vZHVsZXMvc3JlLmgKaW5kZXggMGE4ZjBjZi4uNDJmZTI4ZCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9zcmUuaAorKysgYi9Nb2R1bGVzL3NyZS5oCkBAIC0zMSw5ICszMSw3IEBACiAgICAgUHlPYmplY3QqIHBhdHRlcm47IC8qIHBhdHRlcm4gc291cmNlIChvciBOb25lKSAqLwogICAgIGludCBmbGFnczsgLyogZmxhZ3MgdXNlZCB3aGVuIGNvbXBpbGluZyBwYXR0ZXJuIHNvdXJjZSAqLwogICAgIFB5T2JqZWN0ICp3ZWFrcmVmbGlzdDsgLyogTGlzdCBvZiB3ZWFrIHJlZmVyZW5jZXMgKi8KLSAgICBpbnQgbG9naWNhbF9jaGFyc2l6ZTsgLyogcGF0dGVybiBjaGFyc2l6ZSAob3IgLTEpICovCi0gICAgaW50IGNoYXJzaXplOwotICAgIFB5X2J1ZmZlciB2aWV3OworICAgIGludCBpc2J5dGVzOyAvKiBwYXR0ZXJuIHR5cGUgKDEgLSBieXRlcywgMCAtIHN0cmluZywgLTEgLSBOb25lKSAqLwogICAgIC8qIHBhdHRlcm4gY29kZSAqLwogICAgIFB5X3NzaXplX3QgY29kZXNpemU7CiAgICAgU1JFX0NPREUgY29kZVsxXTsKQEAgLTczLDkgKzcxLDggQEAKICAgICAvKiBhdHRyaWJ1dGVzIGZvciB0aGUgbWF0Y2ggb2JqZWN0ICovCiAgICAgUHlPYmplY3QqIHN0cmluZzsKICAgICBQeV9zc2l6ZV90IHBvcywgZW5kcG9zOwotICAgIC8qIGNoYXJhY3RlciBzaXplICovCi0gICAgaW50IGxvZ2ljYWxfY2hhcnNpemU7IC8qIGtpbmQgb2YgdGhpbmc6IDEgLSBieXRlcywgMi80IC0gdW5pY29kZSAqLwotICAgIGludCBjaGFyc2l6ZTsKKyAgICBpbnQgaXNieXRlczsKKyAgICBpbnQgY2hhcnNpemU7IC8qIGNoYXJhY3RlciBzaXplICovCiAgICAgLyogcmVnaXN0ZXJzICovCiAgICAgUHlfc3NpemVfdCBsYXN0aW5kZXg7CiAgICAgUHlfc3NpemVfdCBsYXN0bWFyazsKZGlmZiAtLWdpdCBhL01vZHVsZXMvc3JlX2NvbnN0YW50cy5oIGIvTW9kdWxlcy9zcmVfY29uc3RhbnRzLmgKaW5kZXggMTNjODk1OC4uNTk0MGQ1YSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9zcmVfY29uc3RhbnRzLmgKKysrIGIvTW9kdWxlcy9zcmVfY29uc3RhbnRzLmgKQEAgLTgxLDYgKzgxLDggQEAKICNkZWZpbmUgU1JFX0ZMQUdfRE9UQUxMIDE2CiAjZGVmaW5lIFNSRV9GTEFHX1VOSUNPREUgMzIKICNkZWZpbmUgU1JFX0ZMQUdfVkVSQk9TRSA2NAorI2RlZmluZSBTUkVfRkxBR19ERUJVRyAxMjgKKyNkZWZpbmUgU1JFX0ZMQUdfQVNDSUkgMjU2CiAjZGVmaW5lIFNSRV9JTkZPX1BSRUZJWCAxCiAjZGVmaW5lIFNSRV9JTkZPX0xJVEVSQUwgMgogI2RlZmluZSBTUkVfSU5GT19DSEFSU0VUIDQKZGlmZiAtLWdpdCBhL01vZHVsZXMvc3JlX2xpYi5oIGIvTW9kdWxlcy9zcmVfbGliLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTA0OWRlNAotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvc3JlX2xpYi5oCkBAIC0wLDAgKzEsMTM1NCBAQAorLyoKKyAqIFNlY3JldCBMYWJzJyBSZWd1bGFyIEV4cHJlc3Npb24gRW5naW5lCisgKgorICogcmVndWxhciBleHByZXNzaW9uIG1hdGNoaW5nIGVuZ2luZQorICoKKyAqIENvcHlyaWdodCAoYykgMTk5Ny0yMDAxIGJ5IFNlY3JldCBMYWJzIEFCLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBTZWUgdGhlIF9zcmUuYyBmaWxlIGZvciBpbmZvcm1hdGlvbiBvbiB1c2FnZSBhbmQgcmVkaXN0cmlidXRpb24uCisgKi8KKworLyogU3RyaW5nIG1hdGNoaW5nIGVuZ2luZSAqLworCisvKiBUaGlzIGZpbGUgaXMgaW5jbHVkZWQgdGhyZWUgdGltZXMsIHdpdGggZGlmZmVyZW50IGNoYXJhY3RlciBzZXR0aW5ncyAqLworCitMT0NBTChpbnQpCitTUkUoYXQpKFNSRV9TVEFURSogc3RhdGUsIFNSRV9DSEFSKiBwdHIsIFNSRV9DT0RFIGF0KQoreworICAgIC8qIGNoZWNrIGlmIHBvaW50ZXIgaXMgYXQgZ2l2ZW4gcG9zaXRpb24gKi8KKworICAgIFB5X3NzaXplX3QgdGhpc3AsIHRoYXRwOworCisgICAgc3dpdGNoIChhdCkgeworCisgICAgY2FzZSBTUkVfQVRfQkVHSU5OSU5HOgorICAgIGNhc2UgU1JFX0FUX0JFR0lOTklOR19TVFJJTkc6CisgICAgICAgIHJldHVybiAoKHZvaWQqKSBwdHIgPT0gc3RhdGUtPmJlZ2lubmluZyk7CisKKyAgICBjYXNlIFNSRV9BVF9CRUdJTk5JTkdfTElORToKKyAgICAgICAgcmV0dXJuICgodm9pZCopIHB0ciA9PSBzdGF0ZS0+YmVnaW5uaW5nIHx8CisgICAgICAgICAgICAgICAgU1JFX0lTX0xJTkVCUkVBSygoaW50KSBwdHJbLTFdKSk7CisKKyAgICBjYXNlIFNSRV9BVF9FTkQ6CisgICAgICAgIHJldHVybiAoKChTUkVfQ0hBUiAqKXN0YXRlLT5lbmQgLSBwdHIgPT0gMSAmJgorICAgICAgICAgICAgICAgICBTUkVfSVNfTElORUJSRUFLKChpbnQpIHB0clswXSkpIHx8CisgICAgICAgICAgICAgICAgKCh2b2lkKikgcHRyID09IHN0YXRlLT5lbmQpKTsKKworICAgIGNhc2UgU1JFX0FUX0VORF9MSU5FOgorICAgICAgICByZXR1cm4gKCh2b2lkKikgcHRyID09IHN0YXRlLT5lbmQgfHwKKyAgICAgICAgICAgICAgICBTUkVfSVNfTElORUJSRUFLKChpbnQpIHB0clswXSkpOworCisgICAgY2FzZSBTUkVfQVRfRU5EX1NUUklORzoKKyAgICAgICAgcmV0dXJuICgodm9pZCopIHB0ciA9PSBzdGF0ZS0+ZW5kKTsKKworICAgIGNhc2UgU1JFX0FUX0JPVU5EQVJZOgorICAgICAgICBpZiAoc3RhdGUtPmJlZ2lubmluZyA9PSBzdGF0ZS0+ZW5kKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHRoYXRwID0gKCh2b2lkKikgcHRyID4gc3RhdGUtPmJlZ2lubmluZykgPworICAgICAgICAgICAgU1JFX0lTX1dPUkQoKGludCkgcHRyWy0xXSkgOiAwOworICAgICAgICB0aGlzcCA9ICgodm9pZCopIHB0ciA8IHN0YXRlLT5lbmQpID8KKyAgICAgICAgICAgIFNSRV9JU19XT1JEKChpbnQpIHB0clswXSkgOiAwOworICAgICAgICByZXR1cm4gdGhpc3AgIT0gdGhhdHA7CisKKyAgICBjYXNlIFNSRV9BVF9OT05fQk9VTkRBUlk6CisgICAgICAgIGlmIChzdGF0ZS0+YmVnaW5uaW5nID09IHN0YXRlLT5lbmQpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgdGhhdHAgPSAoKHZvaWQqKSBwdHIgPiBzdGF0ZS0+YmVnaW5uaW5nKSA/CisgICAgICAgICAgICBTUkVfSVNfV09SRCgoaW50KSBwdHJbLTFdKSA6IDA7CisgICAgICAgIHRoaXNwID0gKCh2b2lkKikgcHRyIDwgc3RhdGUtPmVuZCkgPworICAgICAgICAgICAgU1JFX0lTX1dPUkQoKGludCkgcHRyWzBdKSA6IDA7CisgICAgICAgIHJldHVybiB0aGlzcCA9PSB0aGF0cDsKKworICAgIGNhc2UgU1JFX0FUX0xPQ19CT1VOREFSWToKKyAgICAgICAgaWYgKHN0YXRlLT5iZWdpbm5pbmcgPT0gc3RhdGUtPmVuZCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB0aGF0cCA9ICgodm9pZCopIHB0ciA+IHN0YXRlLT5iZWdpbm5pbmcpID8KKyAgICAgICAgICAgIFNSRV9MT0NfSVNfV09SRCgoaW50KSBwdHJbLTFdKSA6IDA7CisgICAgICAgIHRoaXNwID0gKCh2b2lkKikgcHRyIDwgc3RhdGUtPmVuZCkgPworICAgICAgICAgICAgU1JFX0xPQ19JU19XT1JEKChpbnQpIHB0clswXSkgOiAwOworICAgICAgICByZXR1cm4gdGhpc3AgIT0gdGhhdHA7CisKKyAgICBjYXNlIFNSRV9BVF9MT0NfTk9OX0JPVU5EQVJZOgorICAgICAgICBpZiAoc3RhdGUtPmJlZ2lubmluZyA9PSBzdGF0ZS0+ZW5kKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHRoYXRwID0gKCh2b2lkKikgcHRyID4gc3RhdGUtPmJlZ2lubmluZykgPworICAgICAgICAgICAgU1JFX0xPQ19JU19XT1JEKChpbnQpIHB0clstMV0pIDogMDsKKyAgICAgICAgdGhpc3AgPSAoKHZvaWQqKSBwdHIgPCBzdGF0ZS0+ZW5kKSA/CisgICAgICAgICAgICBTUkVfTE9DX0lTX1dPUkQoKGludCkgcHRyWzBdKSA6IDA7CisgICAgICAgIHJldHVybiB0aGlzcCA9PSB0aGF0cDsKKworICAgIGNhc2UgU1JFX0FUX1VOSV9CT1VOREFSWToKKyAgICAgICAgaWYgKHN0YXRlLT5iZWdpbm5pbmcgPT0gc3RhdGUtPmVuZCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB0aGF0cCA9ICgodm9pZCopIHB0ciA+IHN0YXRlLT5iZWdpbm5pbmcpID8KKyAgICAgICAgICAgIFNSRV9VTklfSVNfV09SRCgoaW50KSBwdHJbLTFdKSA6IDA7CisgICAgICAgIHRoaXNwID0gKCh2b2lkKikgcHRyIDwgc3RhdGUtPmVuZCkgPworICAgICAgICAgICAgU1JFX1VOSV9JU19XT1JEKChpbnQpIHB0clswXSkgOiAwOworICAgICAgICByZXR1cm4gdGhpc3AgIT0gdGhhdHA7CisKKyAgICBjYXNlIFNSRV9BVF9VTklfTk9OX0JPVU5EQVJZOgorICAgICAgICBpZiAoc3RhdGUtPmJlZ2lubmluZyA9PSBzdGF0ZS0+ZW5kKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHRoYXRwID0gKCh2b2lkKikgcHRyID4gc3RhdGUtPmJlZ2lubmluZykgPworICAgICAgICAgICAgU1JFX1VOSV9JU19XT1JEKChpbnQpIHB0clstMV0pIDogMDsKKyAgICAgICAgdGhpc3AgPSAoKHZvaWQqKSBwdHIgPCBzdGF0ZS0+ZW5kKSA/CisgICAgICAgICAgICBTUkVfVU5JX0lTX1dPUkQoKGludCkgcHRyWzBdKSA6IDA7CisgICAgICAgIHJldHVybiB0aGlzcCA9PSB0aGF0cDsKKworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitMT0NBTChpbnQpCitTUkUoY2hhcnNldCkoU1JFX0NPREUqIHNldCwgU1JFX0NPREUgY2gpCit7CisgICAgLyogY2hlY2sgaWYgY2hhcmFjdGVyIGlzIGEgbWVtYmVyIG9mIHRoZSBnaXZlbiBzZXQgKi8KKworICAgIGludCBvayA9IDE7CisKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIHN3aXRjaCAoKnNldCsrKSB7CisKKyAgICAgICAgY2FzZSBTUkVfT1BfRkFJTFVSRToKKyAgICAgICAgICAgIHJldHVybiAhb2s7CisKKyAgICAgICAgY2FzZSBTUkVfT1BfTElURVJBTDoKKyAgICAgICAgICAgIC8qIDxMSVRFUkFMPiA8Y29kZT4gKi8KKyAgICAgICAgICAgIGlmIChjaCA9PSBzZXRbMF0pCisgICAgICAgICAgICAgICAgcmV0dXJuIG9rOworICAgICAgICAgICAgc2V0Kys7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFNSRV9PUF9DQVRFR09SWToKKyAgICAgICAgICAgIC8qIDxDQVRFR09SWT4gPGNvZGU+ICovCisgICAgICAgICAgICBpZiAoc3JlX2NhdGVnb3J5KHNldFswXSwgKGludCkgY2gpKQorICAgICAgICAgICAgICAgIHJldHVybiBvazsKKyAgICAgICAgICAgIHNldCsrOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBTUkVfT1BfQ0hBUlNFVDoKKyAgICAgICAgICAgIC8qIDxDSEFSU0VUPiA8Yml0bWFwPiAqLworICAgICAgICAgICAgaWYgKGNoIDwgMjU2ICYmCisgICAgICAgICAgICAgICAgKHNldFtjaC9TUkVfQ09ERV9CSVRTXSAmICgxdSA8PCAoY2ggJiAoU1JFX0NPREVfQklUUy0xKSkpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gb2s7CisgICAgICAgICAgICBzZXQgKz0gMjU2L1NSRV9DT0RFX0JJVFM7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFNSRV9PUF9SQU5HRToKKyAgICAgICAgICAgIC8qIDxSQU5HRT4gPGxvd2VyPiA8dXBwZXI+ICovCisgICAgICAgICAgICBpZiAoc2V0WzBdIDw9IGNoICYmIGNoIDw9IHNldFsxXSkKKyAgICAgICAgICAgICAgICByZXR1cm4gb2s7CisgICAgICAgICAgICBzZXQgKz0gMjsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgU1JFX09QX05FR0FURToKKyAgICAgICAgICAgIG9rID0gIW9rOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBTUkVfT1BfQklHQ0hBUlNFVDoKKyAgICAgICAgICAgIC8qIDxCSUdDSEFSU0VUPiA8YmxvY2tjb3VudD4gPDI1NiBibG9ja2luZGljZXM+IDxibG9ja3M+ICovCisgICAgICAgIHsKKyAgICAgICAgICAgIFB5X3NzaXplX3QgY291bnQsIGJsb2NrOworICAgICAgICAgICAgY291bnQgPSAqKHNldCsrKTsKKworICAgICAgICAgICAgaWYgKGNoIDwgMHgxMDAwMHUpCisgICAgICAgICAgICAgICAgYmxvY2sgPSAoKHVuc2lnbmVkIGNoYXIqKXNldClbY2ggPj4gOF07CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYmxvY2sgPSAtMTsKKyAgICAgICAgICAgIHNldCArPSAyNTYvc2l6ZW9mKFNSRV9DT0RFKTsKKyAgICAgICAgICAgIGlmIChibG9jayA+PTAgJiYKKyAgICAgICAgICAgICAgICAoc2V0WyhibG9jayAqIDI1NiArIChjaCAmIDI1NSkpL1NSRV9DT0RFX0JJVFNdICYKKyAgICAgICAgICAgICAgICAgICAgKDF1IDw8IChjaCAmIChTUkVfQ09ERV9CSVRTLTEpKSkpKQorICAgICAgICAgICAgICAgIHJldHVybiBvazsKKyAgICAgICAgICAgIHNldCArPSBjb3VudCAqICgyNTYvU1JFX0NPREVfQklUUyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAvKiBpbnRlcm5hbCBlcnJvciAtLSB0aGVyZSdzIG5vdCBtdWNoIHdlIGNhbiBkbyBhYm91dCBpdAorICAgICAgICAgICAgICAgaGVyZSwgc28gbGV0J3MganVzdCBwcmV0ZW5kIGl0IGRpZG4ndCBtYXRjaC4uLiAqLworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICB9Cit9CisKK0xPQ0FMKFB5X3NzaXplX3QpIFNSRShtYXRjaCkoU1JFX1NUQVRFKiBzdGF0ZSwgU1JFX0NPREUqIHBhdHRlcm4sIGludCBtYXRjaF9hbGwpOworCitMT0NBTChQeV9zc2l6ZV90KQorU1JFKGNvdW50KShTUkVfU1RBVEUqIHN0YXRlLCBTUkVfQ09ERSogcGF0dGVybiwgUHlfc3NpemVfdCBtYXhjb3VudCkKK3sKKyAgICBTUkVfQ09ERSBjaHI7CisgICAgU1JFX0NIQVIgYzsKKyAgICBTUkVfQ0hBUiogcHRyID0gKFNSRV9DSEFSICopc3RhdGUtPnB0cjsKKyAgICBTUkVfQ0hBUiogZW5kID0gKFNSRV9DSEFSICopc3RhdGUtPmVuZDsKKyAgICBQeV9zc2l6ZV90IGk7CisKKyAgICAvKiBhZGp1c3QgZW5kICovCisgICAgaWYgKG1heGNvdW50IDwgZW5kIC0gcHRyICYmIG1heGNvdW50ICE9IFNSRV9NQVhSRVBFQVQpCisgICAgICAgIGVuZCA9IHB0ciArIG1heGNvdW50OworCisgICAgc3dpdGNoIChwYXR0ZXJuWzBdKSB7CisKKyAgICBjYXNlIFNSRV9PUF9JTjoKKyAgICAgICAgLyogcmVwZWF0ZWQgc2V0ICovCisgICAgICAgIFRSQUNFKCgifCVwfCVwfENPVU5UIElOXG4iLCBwYXR0ZXJuLCBwdHIpKTsKKyAgICAgICAgd2hpbGUgKHB0ciA8IGVuZCAmJiBTUkUoY2hhcnNldCkocGF0dGVybiArIDIsICpwdHIpKQorICAgICAgICAgICAgcHRyKys7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUkVfT1BfQU5ZOgorICAgICAgICAvKiByZXBlYXRlZCBkb3Qgd2lsZGNhcmQuICovCisgICAgICAgIFRSQUNFKCgifCVwfCVwfENPVU5UIEFOWVxuIiwgcGF0dGVybiwgcHRyKSk7CisgICAgICAgIHdoaWxlIChwdHIgPCBlbmQgJiYgIVNSRV9JU19MSU5FQlJFQUsoKnB0cikpCisgICAgICAgICAgICBwdHIrKzsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNSRV9PUF9BTllfQUxMOgorICAgICAgICAvKiByZXBlYXRlZCBkb3Qgd2lsZGNhcmQuICBza2lwIHRvIHRoZSBlbmQgb2YgdGhlIHRhcmdldAorICAgICAgICAgICBzdHJpbmcsIGFuZCBiYWNrdHJhY2sgZnJvbSB0aGVyZSAqLworICAgICAgICBUUkFDRSgoInwlcHwlcHxDT1VOVCBBTllfQUxMXG4iLCBwYXR0ZXJuLCBwdHIpKTsKKyAgICAgICAgcHRyID0gZW5kOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1JFX09QX0xJVEVSQUw6CisgICAgICAgIC8qIHJlcGVhdGVkIGxpdGVyYWwgKi8KKyAgICAgICAgY2hyID0gcGF0dGVyblsxXTsKKyAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8Q09VTlQgTElURVJBTCAlZFxuIiwgcGF0dGVybiwgcHRyLCBjaHIpKTsKKyAgICAgICAgYyA9IChTUkVfQ0hBUikgY2hyOworI2lmIFNJWkVPRl9TUkVfQ0hBUiA8IDQKKyAgICAgICAgaWYgKChTUkVfQ09ERSkgYyAhPSBjaHIpCisgICAgICAgICAgICA7IC8qIGxpdGVyYWwgY2FuJ3QgbWF0Y2g6IGRvZXNuJ3QgZml0IGluIGNoYXIgd2lkdGggKi8KKyAgICAgICAgZWxzZQorI2VuZGlmCisgICAgICAgIHdoaWxlIChwdHIgPCBlbmQgJiYgKnB0ciA9PSBjKQorICAgICAgICAgICAgcHRyKys7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUkVfT1BfTElURVJBTF9JR05PUkU6CisgICAgICAgIC8qIHJlcGVhdGVkIGxpdGVyYWwgKi8KKyAgICAgICAgY2hyID0gcGF0dGVyblsxXTsKKyAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8Q09VTlQgTElURVJBTF9JR05PUkUgJWRcbiIsIHBhdHRlcm4sIHB0ciwgY2hyKSk7CisgICAgICAgIHdoaWxlIChwdHIgPCBlbmQgJiYgKFNSRV9DT0RFKSBzdGF0ZS0+bG93ZXIoKnB0cikgPT0gY2hyKQorICAgICAgICAgICAgcHRyKys7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUkVfT1BfTk9UX0xJVEVSQUw6CisgICAgICAgIC8qIHJlcGVhdGVkIG5vbi1saXRlcmFsICovCisgICAgICAgIGNociA9IHBhdHRlcm5bMV07CisgICAgICAgIFRSQUNFKCgifCVwfCVwfENPVU5UIE5PVF9MSVRFUkFMICVkXG4iLCBwYXR0ZXJuLCBwdHIsIGNocikpOworICAgICAgICBjID0gKFNSRV9DSEFSKSBjaHI7CisjaWYgU0laRU9GX1NSRV9DSEFSIDwgNAorICAgICAgICBpZiAoKFNSRV9DT0RFKSBjICE9IGNocikKKyAgICAgICAgICAgIHB0ciA9IGVuZDsgLyogbGl0ZXJhbCBjYW4ndCBtYXRjaDogZG9lc24ndCBmaXQgaW4gY2hhciB3aWR0aCAqLworICAgICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgd2hpbGUgKHB0ciA8IGVuZCAmJiAqcHRyICE9IGMpCisgICAgICAgICAgICBwdHIrKzsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNSRV9PUF9OT1RfTElURVJBTF9JR05PUkU6CisgICAgICAgIC8qIHJlcGVhdGVkIG5vbi1saXRlcmFsICovCisgICAgICAgIGNociA9IHBhdHRlcm5bMV07CisgICAgICAgIFRSQUNFKCgifCVwfCVwfENPVU5UIE5PVF9MSVRFUkFMX0lHTk9SRSAlZFxuIiwgcGF0dGVybiwgcHRyLCBjaHIpKTsKKyAgICAgICAgd2hpbGUgKHB0ciA8IGVuZCAmJiAoU1JFX0NPREUpIHN0YXRlLT5sb3dlcigqcHRyKSAhPSBjaHIpCisgICAgICAgICAgICBwdHIrKzsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICAvKiByZXBlYXRlZCBzaW5nbGUgY2hhcmFjdGVyIHBhdHRlcm4gKi8KKyAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8Q09VTlQgU1VCUEFUVEVSTlxuIiwgcGF0dGVybiwgcHRyKSk7CisgICAgICAgIHdoaWxlICgoU1JFX0NIQVIqKSBzdGF0ZS0+cHRyIDwgZW5kKSB7CisgICAgICAgICAgICBpID0gU1JFKG1hdGNoKShzdGF0ZSwgcGF0dGVybiwgMCk7CisgICAgICAgICAgICBpZiAoaSA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgICAgICAgICBpZiAoIWkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8Q09VTlQgJSIgUFlfRk9STUFUX1NJWkVfVCAiZFxuIiwgcGF0dGVybiwgcHRyLAorICAgICAgICAgICAgICAgKFNSRV9DSEFSKikgc3RhdGUtPnB0ciAtIHB0cikpOworICAgICAgICByZXR1cm4gKFNSRV9DSEFSKikgc3RhdGUtPnB0ciAtIHB0cjsKKyAgICB9CisKKyAgICBUUkFDRSgoInwlcHwlcHxDT1VOVCAlIiBQWV9GT1JNQVRfU0laRV9UICJkXG4iLCBwYXR0ZXJuLCBwdHIsCisgICAgICAgICAgIHB0ciAtIChTUkVfQ0hBUiopIHN0YXRlLT5wdHIpKTsKKyAgICByZXR1cm4gcHRyIC0gKFNSRV9DSEFSKikgc3RhdGUtPnB0cjsKK30KKworI2lmIDAgLyogbm90IHVzZWQgaW4gdGhpcyByZWxlYXNlICovCitMT0NBTChpbnQpCitTUkUoaW5mbykoU1JFX1NUQVRFKiBzdGF0ZSwgU1JFX0NPREUqIHBhdHRlcm4pCit7CisgICAgLyogY2hlY2sgaWYgYW4gU1JFX09QX0lORk8gYmxvY2sgbWF0Y2hlcyBhdCB0aGUgY3VycmVudCBwb3NpdGlvbi4KKyAgICAgICByZXR1cm5zIHRoZSBudW1iZXIgb2YgU1JFX0NPREUgb2JqZWN0cyB0byBza2lwIGlmIHN1Y2Nlc3NmdWwsIDAKKyAgICAgICBpZiBubyBtYXRjaCAqLworCisgICAgU1JFX0NIQVIqIGVuZCA9IChTUkVfQ0hBUiopIHN0YXRlLT5lbmQ7CisgICAgU1JFX0NIQVIqIHB0ciA9IChTUkVfQ0hBUiopIHN0YXRlLT5wdHI7CisgICAgUHlfc3NpemVfdCBpOworCisgICAgLyogY2hlY2sgbWluaW1hbCBsZW5ndGggKi8KKyAgICBpZiAocGF0dGVyblszXSAmJiBlbmQgLSBwdHIgPCBwYXR0ZXJuWzNdKQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8qIGNoZWNrIGtub3duIHByZWZpeCAqLworICAgIGlmIChwYXR0ZXJuWzJdICYgU1JFX0lORk9fUFJFRklYICYmIHBhdHRlcm5bNV0gPiAxKSB7CisgICAgICAgIC8qIDxsZW5ndGg+IDxza2lwPiA8cHJlZml4IGRhdGE+IDxvdmVybGFwIGRhdGE+ICovCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBwYXR0ZXJuWzVdOyBpKyspCisgICAgICAgICAgICBpZiAoKFNSRV9DT0RFKSBwdHJbaV0gIT0gcGF0dGVybls3ICsgaV0pCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBwYXR0ZXJuWzBdICsgMiAqIHBhdHRlcm5bNl07CisgICAgfQorICAgIHJldHVybiBwYXR0ZXJuWzBdOworfQorI2VuZGlmCisKKy8qIFRoZSBtYWNyb3MgYmVsb3cgc2hvdWxkIGJlIHVzZWQgdG8gcHJvdGVjdCByZWN1cnNpdmUgU1JFKG1hdGNoKSgpCisgKiBjYWxscyB0aGF0ICpmYWlsZWQqIGFuZCBkbyAqbm90KiByZXR1cm4gaW1tZWRpYXRlbHkgKElPVywgdGhvc2UKKyAqIHRoYXQgd2lsbCBiYWNrdHJhY2spLiBFeHBsYWluaW5nOgorICoKKyAqIC0gUmVjdXJzaXZlIFNSRShtYXRjaCkoKSByZXR1cm5lZCB0cnVlOiB0aGF0J3MgdXN1YWxseSBhIHN1Y2Nlc3MKKyAqICAgKGJlc2lkZXMgYXR5cGljYWwgY2FzZXMgbGlrZSBBU1NFUlRfTk9UKSwgdGhlcmVmb3JlIHRoZXJlJ3Mgbm8KKyAqICAgcmVhc29uIHRvIHJlc3RvcmUgbGFzdG1hcms7CisgKgorICogLSBSZWN1cnNpdmUgU1JFKG1hdGNoKSgpIHJldHVybmVkIGZhbHNlIGJ1dCB0aGUgY3VycmVudCBTUkUobWF0Y2gpKCkKKyAqICAgaXMgcmV0dXJuaW5nIHRvIHRoZSBjYWxsZXI6IElmIHRoZSBjdXJyZW50IFNSRShtYXRjaCkoKSBpcyB0aGUKKyAqICAgdG9wIGZ1bmN0aW9uIG9mIHRoZSByZWN1cnNpb24sIHJldHVybmluZyBmYWxzZSB3aWxsIGJlIGEgbWF0Y2hpbmcKKyAqICAgZmFpbHVyZSwgYW5kIGl0IGRvZXNuJ3QgbWF0dGVyIHdoZXJlIGxhc3RtYXJrIGlzIHBvaW50aW5nIHRvLgorICogICBJZiBpdCdzICpub3QqIHRoZSB0b3AgZnVuY3Rpb24sIGl0IHdpbGwgYmUgYSByZWN1cnNpdmUgU1JFKG1hdGNoKSgpCisgKiAgIGZhaWx1cmUgYnkgaXRzZWxmLCBhbmQgdGhlIGNhbGxpbmcgU1JFKG1hdGNoKSgpIHdpbGwgaGF2ZSB0byBkZWFsCisgKiAgIHdpdGggdGhlIGZhaWx1cmUgYnkgdGhlIHNhbWUgcnVsZXMgZXhwbGFpbmVkIGhlcmUgKGl0IHdpbGwgcmVzdG9yZQorICogICBsYXN0bWFyayBieSBpdHNlbGYgaWYgbmVjZXNzYXJ5KTsKKyAqCisgKiAtIFJlY3Vyc2l2ZSBTUkUobWF0Y2gpKCkgcmV0dXJuZWQgZmFsc2UsIGFuZCB3aWxsIGNvbnRpbnVlIHRoZQorICogICBvdXRzaWRlICdmb3InIGxvb3A6IG11c3QgYmUgcHJvdGVjdGVkIHdoZW4gYnJlYWtpbmcsIHNpbmNlIHRoZSBuZXh0CisgKiAgIE9QIGNvdWxkIHBvdGVudGlhbGx5IGRlcGVuZCBvbiBsYXN0bWFyazsKKyAqCisgKiAtIFJlY3Vyc2l2ZSBTUkUobWF0Y2gpKCkgcmV0dXJuZWQgZmFsc2UsIGFuZCB3aWxsIGJlIGNhbGxlZCBhZ2FpbgorICogICBpbnNpZGUgYSBsb2NhbCBmb3Ivd2hpbGUgbG9vcDogbXVzdCBiZSBwcm90ZWN0ZWQgYmV0d2VlbiBlYWNoCisgKiAgIGxvb3AgaXRlcmF0aW9uLCBzaW5jZSB0aGUgcmVjdXJzaXZlIFNSRShtYXRjaCkoKSBjb3VsZCBkbyBhbnl0aGluZywKKyAqICAgYW5kIGNvdWxkIHBvdGVudGlhbGx5IGRlcGVuZCBvbiBsYXN0bWFyay4KKyAqCisgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgY2hlY2sgdGhlIGRpc2N1c3Npb24gYXQgU0YgcGF0Y2ggIzcxMjkwMC4KKyAqLworI2RlZmluZSBMQVNUTUFSS19TQVZFKCkgICAgIFwKKyAgICBkbyB7IFwKKyAgICAgICAgY3R4LT5sYXN0bWFyayA9IHN0YXRlLT5sYXN0bWFyazsgXAorICAgICAgICBjdHgtPmxhc3RpbmRleCA9IHN0YXRlLT5sYXN0aW5kZXg7IFwKKyAgICB9IHdoaWxlICgwKQorI2RlZmluZSBMQVNUTUFSS19SRVNUT1JFKCkgIFwKKyAgICBkbyB7IFwKKyAgICAgICAgc3RhdGUtPmxhc3RtYXJrID0gY3R4LT5sYXN0bWFyazsgXAorICAgICAgICBzdGF0ZS0+bGFzdGluZGV4ID0gY3R4LT5sYXN0aW5kZXg7IFwKKyAgICB9IHdoaWxlICgwKQorCisjZGVmaW5lIFJFVFVSTl9FUlJPUihpKSBkbyB7IHJldHVybiBpOyB9IHdoaWxlKDApCisjZGVmaW5lIFJFVFVSTl9GQUlMVVJFIGRvIHsgcmV0ID0gMDsgZ290byBleGl0OyB9IHdoaWxlKDApCisjZGVmaW5lIFJFVFVSTl9TVUNDRVNTIGRvIHsgcmV0ID0gMTsgZ290byBleGl0OyB9IHdoaWxlKDApCisKKyNkZWZpbmUgUkVUVVJOX09OX0VSUk9SKGkpIFwKKyAgICBkbyB7IGlmIChpIDwgMCkgUkVUVVJOX0VSUk9SKGkpOyB9IHdoaWxlICgwKQorI2RlZmluZSBSRVRVUk5fT05fU1VDQ0VTUyhpKSBcCisgICAgZG8geyBSRVRVUk5fT05fRVJST1IoaSk7IGlmIChpID4gMCkgUkVUVVJOX1NVQ0NFU1M7IH0gd2hpbGUgKDApCisjZGVmaW5lIFJFVFVSTl9PTl9GQUlMVVJFKGkpIFwKKyAgICBkbyB7IFJFVFVSTl9PTl9FUlJPUihpKTsgaWYgKGkgPT0gMCkgUkVUVVJOX0ZBSUxVUkU7IH0gd2hpbGUgKDApCisKKyNkZWZpbmUgU0ZZKHgpICN4CisKKyNkZWZpbmUgREFUQV9TVEFDS19BTExPQyhzdGF0ZSwgdHlwZSwgcHRyKSBcCitkbyB7IFwKKyAgICBhbGxvY19wb3MgPSBzdGF0ZS0+ZGF0YV9zdGFja19iYXNlOyBcCisgICAgVFJBQ0UoKCJhbGxvY2F0aW5nICVzIGluICUiIFBZX0ZPUk1BVF9TSVpFX1QgImQgIiBcCisgICAgICAgICAgICIoJSIgUFlfRk9STUFUX1NJWkVfVCAiZClcbiIsIFwKKyAgICAgICAgICAgU0ZZKHR5cGUpLCBhbGxvY19wb3MsIHNpemVvZih0eXBlKSkpOyBcCisgICAgaWYgKHNpemVvZih0eXBlKSA+IHN0YXRlLT5kYXRhX3N0YWNrX3NpemUgLSBhbGxvY19wb3MpIHsgXAorICAgICAgICBpbnQgaiA9IGRhdGFfc3RhY2tfZ3JvdyhzdGF0ZSwgc2l6ZW9mKHR5cGUpKTsgXAorICAgICAgICBpZiAoaiA8IDApIHJldHVybiBqOyBcCisgICAgICAgIGlmIChjdHhfcG9zICE9IC0xKSBcCisgICAgICAgICAgICBEQVRBX1NUQUNLX0xPT0tVUF9BVChzdGF0ZSwgU1JFKG1hdGNoX2NvbnRleHQpLCBjdHgsIGN0eF9wb3MpOyBcCisgICAgfSBcCisgICAgcHRyID0gKHR5cGUqKShzdGF0ZS0+ZGF0YV9zdGFjaythbGxvY19wb3MpOyBcCisgICAgc3RhdGUtPmRhdGFfc3RhY2tfYmFzZSArPSBzaXplb2YodHlwZSk7IFwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgREFUQV9TVEFDS19MT09LVVBfQVQoc3RhdGUsIHR5cGUsIHB0ciwgcG9zKSBcCitkbyB7IFwKKyAgICBUUkFDRSgoImxvb2tpbmcgdXAgJXMgYXQgJSIgUFlfRk9STUFUX1NJWkVfVCAiZFxuIiwgU0ZZKHR5cGUpLCBwb3MpKTsgXAorICAgIHB0ciA9ICh0eXBlKikoc3RhdGUtPmRhdGFfc3RhY2srcG9zKTsgXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBEQVRBX1NUQUNLX1BVU0goc3RhdGUsIGRhdGEsIHNpemUpIFwKK2RvIHsgXAorICAgIFRSQUNFKCgiY29weSBkYXRhIGluICVwIHRvICUiIFBZX0ZPUk1BVF9TSVpFX1QgImQgIiBcCisgICAgICAgICAgICIoJSIgUFlfRk9STUFUX1NJWkVfVCAiZClcbiIsIFwKKyAgICAgICAgICAgZGF0YSwgc3RhdGUtPmRhdGFfc3RhY2tfYmFzZSwgc2l6ZSkpOyBcCisgICAgaWYgKHNpemUgPiBzdGF0ZS0+ZGF0YV9zdGFja19zaXplIC0gc3RhdGUtPmRhdGFfc3RhY2tfYmFzZSkgeyBcCisgICAgICAgIGludCBqID0gZGF0YV9zdGFja19ncm93KHN0YXRlLCBzaXplKTsgXAorICAgICAgICBpZiAoaiA8IDApIHJldHVybiBqOyBcCisgICAgICAgIGlmIChjdHhfcG9zICE9IC0xKSBcCisgICAgICAgICAgICBEQVRBX1NUQUNLX0xPT0tVUF9BVChzdGF0ZSwgU1JFKG1hdGNoX2NvbnRleHQpLCBjdHgsIGN0eF9wb3MpOyBcCisgICAgfSBcCisgICAgbWVtY3B5KHN0YXRlLT5kYXRhX3N0YWNrK3N0YXRlLT5kYXRhX3N0YWNrX2Jhc2UsIGRhdGEsIHNpemUpOyBcCisgICAgc3RhdGUtPmRhdGFfc3RhY2tfYmFzZSArPSBzaXplOyBcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIERBVEFfU1RBQ0tfUE9QKHN0YXRlLCBkYXRhLCBzaXplLCBkaXNjYXJkKSBcCitkbyB7IFwKKyAgICBUUkFDRSgoImNvcHkgZGF0YSB0byAlcCBmcm9tICUiIFBZX0ZPUk1BVF9TSVpFX1QgImQgIiBcCisgICAgICAgICAgICIoJSIgUFlfRk9STUFUX1NJWkVfVCAiZClcbiIsIFwKKyAgICAgICAgICAgZGF0YSwgc3RhdGUtPmRhdGFfc3RhY2tfYmFzZS1zaXplLCBzaXplKSk7IFwKKyAgICBtZW1jcHkoZGF0YSwgc3RhdGUtPmRhdGFfc3RhY2src3RhdGUtPmRhdGFfc3RhY2tfYmFzZS1zaXplLCBzaXplKTsgXAorICAgIGlmIChkaXNjYXJkKSBcCisgICAgICAgIHN0YXRlLT5kYXRhX3N0YWNrX2Jhc2UgLT0gc2l6ZTsgXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBEQVRBX1NUQUNLX1BPUF9ESVNDQVJEKHN0YXRlLCBzaXplKSBcCitkbyB7IFwKKyAgICBUUkFDRSgoImRpc2NhcmQgZGF0YSBmcm9tICUiIFBZX0ZPUk1BVF9TSVpFX1QgImQgIiBcCisgICAgICAgICAgICIoJSIgUFlfRk9STUFUX1NJWkVfVCAiZClcbiIsIFwKKyAgICAgICAgICAgc3RhdGUtPmRhdGFfc3RhY2tfYmFzZS1zaXplLCBzaXplKSk7IFwKKyAgICBzdGF0ZS0+ZGF0YV9zdGFja19iYXNlIC09IHNpemU7IFwKK30gd2hpbGUoMCkKKworI2RlZmluZSBEQVRBX1BVU0goeCkgXAorICAgIERBVEFfU1RBQ0tfUFVTSChzdGF0ZSwgKHgpLCBzaXplb2YoKih4KSkpCisjZGVmaW5lIERBVEFfUE9QKHgpIFwKKyAgICBEQVRBX1NUQUNLX1BPUChzdGF0ZSwgKHgpLCBzaXplb2YoKih4KSksIDEpCisjZGVmaW5lIERBVEFfUE9QX0RJU0NBUkQoeCkgXAorICAgIERBVEFfU1RBQ0tfUE9QX0RJU0NBUkQoc3RhdGUsIHNpemVvZigqKHgpKSkKKyNkZWZpbmUgREFUQV9BTExPQyh0LHApIFwKKyAgICBEQVRBX1NUQUNLX0FMTE9DKHN0YXRlLCB0LCBwKQorI2RlZmluZSBEQVRBX0xPT0tVUF9BVCh0LHAscG9zKSBcCisgICAgREFUQV9TVEFDS19MT09LVVBfQVQoc3RhdGUsdCxwLHBvcykKKworI2RlZmluZSBNQVJLX1BVU0gobGFzdG1hcmspIFwKKyAgICBkbyBpZiAobGFzdG1hcmsgPiAwKSB7IFwKKyAgICAgICAgaSA9IGxhc3RtYXJrOyAvKiBjdHgtPmxhc3RtYXJrIG1heSBjaGFuZ2UgaWYgcmVhbGxvY2F0ZWQgKi8gXAorICAgICAgICBEQVRBX1NUQUNLX1BVU0goc3RhdGUsIHN0YXRlLT5tYXJrLCAoaSsxKSpzaXplb2Yodm9pZCopKTsgXAorICAgIH0gd2hpbGUgKDApCisjZGVmaW5lIE1BUktfUE9QKGxhc3RtYXJrKSBcCisgICAgZG8gaWYgKGxhc3RtYXJrID4gMCkgeyBcCisgICAgICAgIERBVEFfU1RBQ0tfUE9QKHN0YXRlLCBzdGF0ZS0+bWFyaywgKGxhc3RtYXJrKzEpKnNpemVvZih2b2lkKiksIDEpOyBcCisgICAgfSB3aGlsZSAoMCkKKyNkZWZpbmUgTUFSS19QT1BfS0VFUChsYXN0bWFyaykgXAorICAgIGRvIGlmIChsYXN0bWFyayA+IDApIHsgXAorICAgICAgICBEQVRBX1NUQUNLX1BPUChzdGF0ZSwgc3RhdGUtPm1hcmssIChsYXN0bWFyaysxKSpzaXplb2Yodm9pZCopLCAwKTsgXAorICAgIH0gd2hpbGUgKDApCisjZGVmaW5lIE1BUktfUE9QX0RJU0NBUkQobGFzdG1hcmspIFwKKyAgICBkbyBpZiAobGFzdG1hcmsgPiAwKSB7IFwKKyAgICAgICAgREFUQV9TVEFDS19QT1BfRElTQ0FSRChzdGF0ZSwgKGxhc3RtYXJrKzEpKnNpemVvZih2b2lkKikpOyBcCisgICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBKVU1QX05PTkUgICAgICAgICAgICAwCisjZGVmaW5lIEpVTVBfTUFYX1VOVElMXzEgICAgIDEKKyNkZWZpbmUgSlVNUF9NQVhfVU5USUxfMiAgICAgMgorI2RlZmluZSBKVU1QX01BWF9VTlRJTF8zICAgICAzCisjZGVmaW5lIEpVTVBfTUlOX1VOVElMXzEgICAgIDQKKyNkZWZpbmUgSlVNUF9NSU5fVU5USUxfMiAgICAgNQorI2RlZmluZSBKVU1QX01JTl9VTlRJTF8zICAgICA2CisjZGVmaW5lIEpVTVBfUkVQRUFUICAgICAgICAgIDcKKyNkZWZpbmUgSlVNUF9SRVBFQVRfT05FXzEgICAgOAorI2RlZmluZSBKVU1QX1JFUEVBVF9PTkVfMiAgICA5CisjZGVmaW5lIEpVTVBfTUlOX1JFUEVBVF9PTkUgIDEwCisjZGVmaW5lIEpVTVBfQlJBTkNIICAgICAgICAgIDExCisjZGVmaW5lIEpVTVBfQVNTRVJUICAgICAgICAgIDEyCisjZGVmaW5lIEpVTVBfQVNTRVJUX05PVCAgICAgIDEzCisKKyNkZWZpbmUgRE9fSlVNUFgoanVtcHZhbHVlLCBqdW1wbGFiZWwsIG5leHRwYXR0ZXJuLCBtYXRjaGFsbCkgXAorICAgIERBVEFfQUxMT0MoU1JFKG1hdGNoX2NvbnRleHQpLCBuZXh0Y3R4KTsgXAorICAgIG5leHRjdHgtPmxhc3RfY3R4X3BvcyA9IGN0eF9wb3M7IFwKKyAgICBuZXh0Y3R4LT5qdW1wID0ganVtcHZhbHVlOyBcCisgICAgbmV4dGN0eC0+cGF0dGVybiA9IG5leHRwYXR0ZXJuOyBcCisgICAgbmV4dGN0eC0+bWF0Y2hfYWxsID0gbWF0Y2hhbGw7IFwKKyAgICBjdHhfcG9zID0gYWxsb2NfcG9zOyBcCisgICAgY3R4ID0gbmV4dGN0eDsgXAorICAgIGdvdG8gZW50cmFuY2U7IFwKKyAgICBqdW1wbGFiZWw6IFwKKyAgICB3aGlsZSAoMCkgLyogZ2NjIGRvZXNuJ3QgbGlrZSBsYWJlbHMgYXQgZW5kIG9mIHNjb3BlcyAqLyBcCisKKyNkZWZpbmUgRE9fSlVNUChqdW1wdmFsdWUsIGp1bXBsYWJlbCwgbmV4dHBhdHRlcm4pIFwKKyAgICBET19KVU1QWChqdW1wdmFsdWUsIGp1bXBsYWJlbCwgbmV4dHBhdHRlcm4sIGN0eC0+bWF0Y2hfYWxsKQorCisjZGVmaW5lIERPX0pVTVAwKGp1bXB2YWx1ZSwganVtcGxhYmVsLCBuZXh0cGF0dGVybikgXAorICAgIERPX0pVTVBYKGp1bXB2YWx1ZSwganVtcGxhYmVsLCBuZXh0cGF0dGVybiwgMCkKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIFB5X3NzaXplX3QgbGFzdF9jdHhfcG9zOworICAgIFB5X3NzaXplX3QganVtcDsKKyAgICBTUkVfQ0hBUiogcHRyOworICAgIFNSRV9DT0RFKiBwYXR0ZXJuOworICAgIFB5X3NzaXplX3QgY291bnQ7CisgICAgUHlfc3NpemVfdCBsYXN0bWFyazsKKyAgICBQeV9zc2l6ZV90IGxhc3RpbmRleDsKKyAgICB1bmlvbiB7CisgICAgICAgIFNSRV9DT0RFIGNocjsKKyAgICAgICAgU1JFX1JFUEVBVCogcmVwOworICAgIH0gdTsKKyAgICBpbnQgbWF0Y2hfYWxsOworfSBTUkUobWF0Y2hfY29udGV4dCk7CisKKy8qIGNoZWNrIGlmIHN0cmluZyBtYXRjaGVzIHRoZSBnaXZlbiBwYXR0ZXJuLiAgcmV0dXJucyA8MCBmb3IKKyAgIGVycm9yLCAwIGZvciBmYWlsdXJlLCBhbmQgMSBmb3Igc3VjY2VzcyAqLworTE9DQUwoUHlfc3NpemVfdCkKK1NSRShtYXRjaCkoU1JFX1NUQVRFKiBzdGF0ZSwgU1JFX0NPREUqIHBhdHRlcm4sIGludCBtYXRjaF9hbGwpCit7CisgICAgU1JFX0NIQVIqIGVuZCA9IChTUkVfQ0hBUiAqKXN0YXRlLT5lbmQ7CisgICAgUHlfc3NpemVfdCBhbGxvY19wb3MsIGN0eF9wb3MgPSAtMTsKKyAgICBQeV9zc2l6ZV90IGksIHJldCA9IDA7CisgICAgUHlfc3NpemVfdCBqdW1wOworICAgIHVuc2lnbmVkIGludCBzaWdjb3VudD0wOworCisgICAgU1JFKG1hdGNoX2NvbnRleHQpKiBjdHg7CisgICAgU1JFKG1hdGNoX2NvbnRleHQpKiBuZXh0Y3R4OworCisgICAgVFJBQ0UoKCJ8JXB8JXB8RU5URVJcbiIsIHBhdHRlcm4sIHN0YXRlLT5wdHIpKTsKKworICAgIERBVEFfQUxMT0MoU1JFKG1hdGNoX2NvbnRleHQpLCBjdHgpOworICAgIGN0eC0+bGFzdF9jdHhfcG9zID0gLTE7CisgICAgY3R4LT5qdW1wID0gSlVNUF9OT05FOworICAgIGN0eC0+cGF0dGVybiA9IHBhdHRlcm47CisgICAgY3R4LT5tYXRjaF9hbGwgPSBtYXRjaF9hbGw7CisgICAgY3R4X3BvcyA9IGFsbG9jX3BvczsKKworZW50cmFuY2U6CisKKyAgICBjdHgtPnB0ciA9IChTUkVfQ0hBUiAqKXN0YXRlLT5wdHI7CisKKyAgICBpZiAoY3R4LT5wYXR0ZXJuWzBdID09IFNSRV9PUF9JTkZPKSB7CisgICAgICAgIC8qIG9wdGltaXphdGlvbiBpbmZvIGJsb2NrICovCisgICAgICAgIC8qIDxJTkZPPiA8MT1za2lwPiA8Mj1mbGFncz4gPDM9bWluPiAuLi4gKi8KKyAgICAgICAgaWYgKGN0eC0+cGF0dGVyblszXSAmJiAoUHlfdWludHB0cl90KShlbmQgLSBjdHgtPnB0cikgPCBjdHgtPnBhdHRlcm5bM10pIHsKKyAgICAgICAgICAgIFRSQUNFKCgicmVqZWN0IChnb3QgJSIgUFlfRk9STUFUX1NJWkVfVCAiZCBjaGFycywgIgorICAgICAgICAgICAgICAgICAgICJuZWVkICUiIFBZX0ZPUk1BVF9TSVpFX1QgImQpXG4iLAorICAgICAgICAgICAgICAgICAgIGVuZCAtIGN0eC0+cHRyLCAoUHlfc3NpemVfdCkgY3R4LT5wYXR0ZXJuWzNdKSk7CisgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKKyAgICAgICAgfQorICAgICAgICBjdHgtPnBhdHRlcm4gKz0gY3R4LT5wYXR0ZXJuWzFdICsgMTsKKyAgICB9CisKKyAgICBmb3IgKDs7KSB7CisgICAgICAgICsrc2lnY291bnQ7CisgICAgICAgIGlmICgoMCA9PSAoc2lnY291bnQgJiAweGZmZikpICYmIFB5RXJyX0NoZWNrU2lnbmFscygpKQorICAgICAgICAgICAgUkVUVVJOX0VSUk9SKFNSRV9FUlJPUl9JTlRFUlJVUFRFRCk7CisKKyAgICAgICAgc3dpdGNoICgqY3R4LT5wYXR0ZXJuKyspIHsKKworICAgICAgICBjYXNlIFNSRV9PUF9NQVJLOgorICAgICAgICAgICAgLyogc2V0IG1hcmsgKi8KKyAgICAgICAgICAgIC8qIDxNQVJLPiA8Z2lkPiAqLworICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8TUFSSyAlZFxuIiwgY3R4LT5wYXR0ZXJuLAorICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyLCBjdHgtPnBhdHRlcm5bMF0pKTsKKyAgICAgICAgICAgIGkgPSBjdHgtPnBhdHRlcm5bMF07CisgICAgICAgICAgICBpZiAoaSAmIDEpCisgICAgICAgICAgICAgICAgc3RhdGUtPmxhc3RpbmRleCA9IGkvMiArIDE7CisgICAgICAgICAgICBpZiAoaSA+IHN0YXRlLT5sYXN0bWFyaykgeworICAgICAgICAgICAgICAgIC8qIHN0YXRlLT5sYXN0bWFyayBpcyB0aGUgaGlnaGVzdCB2YWxpZCBpbmRleCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICBzdGF0ZS0+bWFyayBhcnJheS4gIElmIGl0IGlzIGluY3JlYXNlZCBieSBtb3JlIHRoYW4gMSwKKyAgICAgICAgICAgICAgICAgICB0aGUgaW50ZXJ2ZW5pbmcgbWFya3MgbXVzdCBiZSBzZXQgdG8gTlVMTCB0byBzaWduYWwKKyAgICAgICAgICAgICAgICAgICB0aGF0IHRoZXNlIG1hcmtzIGhhdmUgbm90IGJlZW4gZW5jb3VudGVyZWQuICovCisgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBqID0gc3RhdGUtPmxhc3RtYXJrICsgMTsKKyAgICAgICAgICAgICAgICB3aGlsZSAoaiA8IGkpCisgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5tYXJrW2orK10gPSBOVUxMOworICAgICAgICAgICAgICAgIHN0YXRlLT5sYXN0bWFyayA9IGk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzdGF0ZS0+bWFya1tpXSA9IGN0eC0+cHRyOworICAgICAgICAgICAgY3R4LT5wYXR0ZXJuKys7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFNSRV9PUF9MSVRFUkFMOgorICAgICAgICAgICAgLyogbWF0Y2ggbGl0ZXJhbCBzdHJpbmcgKi8KKyAgICAgICAgICAgIC8qIDxMSVRFUkFMPiA8Y29kZT4gKi8KKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfExJVEVSQUwgJWRcbiIsIGN0eC0+cGF0dGVybiwKKyAgICAgICAgICAgICAgICAgICBjdHgtPnB0ciwgKmN0eC0+cGF0dGVybikpOworICAgICAgICAgICAgaWYgKGN0eC0+cHRyID49IGVuZCB8fCAoU1JFX0NPREUpIGN0eC0+cHRyWzBdICE9IGN0eC0+cGF0dGVyblswXSkKKyAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKKyAgICAgICAgICAgIGN0eC0+cGF0dGVybisrOworICAgICAgICAgICAgY3R4LT5wdHIrKzsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgU1JFX09QX05PVF9MSVRFUkFMOgorICAgICAgICAgICAgLyogbWF0Y2ggYW55dGhpbmcgdGhhdCBpcyBub3QgbGl0ZXJhbCBjaGFyYWN0ZXIgKi8KKyAgICAgICAgICAgIC8qIDxOT1RfTElURVJBTD4gPGNvZGU+ICovCisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxOT1RfTElURVJBTCAlZFxuIiwgY3R4LT5wYXR0ZXJuLAorICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyLCAqY3R4LT5wYXR0ZXJuKSk7CisgICAgICAgICAgICBpZiAoY3R4LT5wdHIgPj0gZW5kIHx8IChTUkVfQ09ERSkgY3R4LT5wdHJbMF0gPT0gY3R4LT5wYXR0ZXJuWzBdKQorICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOworICAgICAgICAgICAgY3R4LT5wYXR0ZXJuKys7CisgICAgICAgICAgICBjdHgtPnB0cisrOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBTUkVfT1BfU1VDQ0VTUzoKKyAgICAgICAgICAgIC8qIGVuZCBvZiBwYXR0ZXJuICovCisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxTVUNDRVNTXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyKSk7CisgICAgICAgICAgICBpZiAoIWN0eC0+bWF0Y2hfYWxsIHx8IGN0eC0+cHRyID09IHN0YXRlLT5lbmQpIHsKKyAgICAgICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHI7CisgICAgICAgICAgICAgICAgUkVUVVJOX1NVQ0NFU1M7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKKworICAgICAgICBjYXNlIFNSRV9PUF9BVDoKKyAgICAgICAgICAgIC8qIG1hdGNoIGF0IGdpdmVuIHBvc2l0aW9uICovCisgICAgICAgICAgICAvKiA8QVQ+IDxjb2RlPiAqLworICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8QVQgJWRcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIsICpjdHgtPnBhdHRlcm4pKTsKKyAgICAgICAgICAgIGlmICghU1JFKGF0KShzdGF0ZSwgY3R4LT5wdHIsICpjdHgtPnBhdHRlcm4pKQorICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOworICAgICAgICAgICAgY3R4LT5wYXR0ZXJuKys7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFNSRV9PUF9DQVRFR09SWToKKyAgICAgICAgICAgIC8qIG1hdGNoIGF0IGdpdmVuIGNhdGVnb3J5ICovCisgICAgICAgICAgICAvKiA8Q0FURUdPUlk+IDxjb2RlPiAqLworICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8Q0FURUdPUlkgJWRcbiIsIGN0eC0+cGF0dGVybiwKKyAgICAgICAgICAgICAgICAgICBjdHgtPnB0ciwgKmN0eC0+cGF0dGVybikpOworICAgICAgICAgICAgaWYgKGN0eC0+cHRyID49IGVuZCB8fCAhc3JlX2NhdGVnb3J5KGN0eC0+cGF0dGVyblswXSwgY3R4LT5wdHJbMF0pKQorICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOworICAgICAgICAgICAgY3R4LT5wYXR0ZXJuKys7CisgICAgICAgICAgICBjdHgtPnB0cisrOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBTUkVfT1BfQU5ZOgorICAgICAgICAgICAgLyogbWF0Y2ggYW55dGhpbmcgKGV4Y2VwdCBhIG5ld2xpbmUpICovCisgICAgICAgICAgICAvKiA8QU5ZPiAqLworICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8QU5ZXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyKSk7CisgICAgICAgICAgICBpZiAoY3R4LT5wdHIgPj0gZW5kIHx8IFNSRV9JU19MSU5FQlJFQUsoY3R4LT5wdHJbMF0pKQorICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOworICAgICAgICAgICAgY3R4LT5wdHIrKzsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgU1JFX09QX0FOWV9BTEw6CisgICAgICAgICAgICAvKiBtYXRjaCBhbnl0aGluZyAqLworICAgICAgICAgICAgLyogPEFOWV9BTEw+ICovCisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxBTllfQUxMXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyKSk7CisgICAgICAgICAgICBpZiAoY3R4LT5wdHIgPj0gZW5kKQorICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOworICAgICAgICAgICAgY3R4LT5wdHIrKzsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgU1JFX09QX0lOOgorICAgICAgICAgICAgLyogbWF0Y2ggc2V0IG1lbWJlciAob3Igbm9uX21lbWJlcikgKi8KKyAgICAgICAgICAgIC8qIDxJTj4gPHNraXA+IDxzZXQ+ICovCisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxJTlxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOworICAgICAgICAgICAgaWYgKGN0eC0+cHRyID49IGVuZCB8fCAhU1JFKGNoYXJzZXQpKGN0eC0+cGF0dGVybiArIDEsICpjdHgtPnB0cikpCisgICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7CisgICAgICAgICAgICBjdHgtPnBhdHRlcm4gKz0gY3R4LT5wYXR0ZXJuWzBdOworICAgICAgICAgICAgY3R4LT5wdHIrKzsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgU1JFX09QX0xJVEVSQUxfSUdOT1JFOgorICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8TElURVJBTF9JR05PUkUgJWRcbiIsCisgICAgICAgICAgICAgICAgICAgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0ciwgY3R4LT5wYXR0ZXJuWzBdKSk7CisgICAgICAgICAgICBpZiAoY3R4LT5wdHIgPj0gZW5kIHx8CisgICAgICAgICAgICAgICAgc3RhdGUtPmxvd2VyKCpjdHgtPnB0cikgIT0gc3RhdGUtPmxvd2VyKCpjdHgtPnBhdHRlcm4pKQorICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOworICAgICAgICAgICAgY3R4LT5wYXR0ZXJuKys7CisgICAgICAgICAgICBjdHgtPnB0cisrOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBTUkVfT1BfTk9UX0xJVEVSQUxfSUdOT1JFOgorICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8Tk9UX0xJVEVSQUxfSUdOT1JFICVkXG4iLAorICAgICAgICAgICAgICAgICAgIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIsICpjdHgtPnBhdHRlcm4pKTsKKyAgICAgICAgICAgIGlmIChjdHgtPnB0ciA+PSBlbmQgfHwKKyAgICAgICAgICAgICAgICBzdGF0ZS0+bG93ZXIoKmN0eC0+cHRyKSA9PSBzdGF0ZS0+bG93ZXIoKmN0eC0+cGF0dGVybikpCisgICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7CisgICAgICAgICAgICBjdHgtPnBhdHRlcm4rKzsKKyAgICAgICAgICAgIGN0eC0+cHRyKys7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFNSRV9PUF9JTl9JR05PUkU6CisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxJTl9JR05PUkVcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKKyAgICAgICAgICAgIGlmIChjdHgtPnB0ciA+PSBlbmQKKyAgICAgICAgICAgICAgICB8fCAhU1JFKGNoYXJzZXQpKGN0eC0+cGF0dGVybisxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFNSRV9DT0RFKXN0YXRlLT5sb3dlcigqY3R4LT5wdHIpKSkKKyAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKKyAgICAgICAgICAgIGN0eC0+cGF0dGVybiArPSBjdHgtPnBhdHRlcm5bMF07CisgICAgICAgICAgICBjdHgtPnB0cisrOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBTUkVfT1BfSlVNUDoKKyAgICAgICAgY2FzZSBTUkVfT1BfSU5GTzoKKyAgICAgICAgICAgIC8qIGp1bXAgZm9yd2FyZCAqLworICAgICAgICAgICAgLyogPEpVTVA+IDxvZmZzZXQ+ICovCisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxKVU1QICVkXG4iLCBjdHgtPnBhdHRlcm4sCisgICAgICAgICAgICAgICAgICAgY3R4LT5wdHIsIGN0eC0+cGF0dGVyblswXSkpOworICAgICAgICAgICAgY3R4LT5wYXR0ZXJuICs9IGN0eC0+cGF0dGVyblswXTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgU1JFX09QX0JSQU5DSDoKKyAgICAgICAgICAgIC8qIGFsdGVybmF0aW9uICovCisgICAgICAgICAgICAvKiA8QlJBTkNIPiA8MD1za2lwPiBjb2RlIDxKVU1QPiAuLi4gPE5VTEw+ICovCisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxCUkFOQ0hcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKKyAgICAgICAgICAgIExBU1RNQVJLX1NBVkUoKTsKKyAgICAgICAgICAgIGN0eC0+dS5yZXAgPSBzdGF0ZS0+cmVwZWF0OworICAgICAgICAgICAgaWYgKGN0eC0+dS5yZXApCisgICAgICAgICAgICAgICAgTUFSS19QVVNIKGN0eC0+bGFzdG1hcmspOworICAgICAgICAgICAgZm9yICg7IGN0eC0+cGF0dGVyblswXTsgY3R4LT5wYXR0ZXJuICs9IGN0eC0+cGF0dGVyblswXSkgeworICAgICAgICAgICAgICAgIGlmIChjdHgtPnBhdHRlcm5bMV0gPT0gU1JFX09QX0xJVEVSQUwgJiYKKyAgICAgICAgICAgICAgICAgICAgKGN0eC0+cHRyID49IGVuZCB8fAorICAgICAgICAgICAgICAgICAgICAgKFNSRV9DT0RFKSAqY3R4LT5wdHIgIT0gY3R4LT5wYXR0ZXJuWzJdKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgaWYgKGN0eC0+cGF0dGVyblsxXSA9PSBTUkVfT1BfSU4gJiYKKyAgICAgICAgICAgICAgICAgICAgKGN0eC0+cHRyID49IGVuZCB8fAorICAgICAgICAgICAgICAgICAgICAgIVNSRShjaGFyc2V0KShjdHgtPnBhdHRlcm4gKyAzLCAoU1JFX0NPREUpICpjdHgtPnB0cikpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHI7CisgICAgICAgICAgICAgICAgRE9fSlVNUChKVU1QX0JSQU5DSCwganVtcF9icmFuY2gsIGN0eC0+cGF0dGVybisxKTsKKyAgICAgICAgICAgICAgICBpZiAocmV0KSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChjdHgtPnUucmVwKQorICAgICAgICAgICAgICAgICAgICAgICAgTUFSS19QT1BfRElTQ0FSRChjdHgtPmxhc3RtYXJrKTsKKyAgICAgICAgICAgICAgICAgICAgUkVUVVJOX09OX0VSUk9SKHJldCk7CisgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9TVUNDRVNTOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoY3R4LT51LnJlcCkKKyAgICAgICAgICAgICAgICAgICAgTUFSS19QT1BfS0VFUChjdHgtPmxhc3RtYXJrKTsKKyAgICAgICAgICAgICAgICBMQVNUTUFSS19SRVNUT1JFKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoY3R4LT51LnJlcCkKKyAgICAgICAgICAgICAgICBNQVJLX1BPUF9ESVNDQVJEKGN0eC0+bGFzdG1hcmspOworICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7CisKKyAgICAgICAgY2FzZSBTUkVfT1BfUkVQRUFUX09ORToKKyAgICAgICAgICAgIC8qIG1hdGNoIHJlcGVhdGVkIHNlcXVlbmNlIChtYXhpbWl6aW5nIHJlZ2V4cCkgKi8KKworICAgICAgICAgICAgLyogdGhpcyBvcGVyYXRvciBvbmx5IHdvcmtzIGlmIHRoZSByZXBlYXRlZCBpdGVtIGlzCisgICAgICAgICAgICAgICBleGFjdGx5IG9uZSBjaGFyYWN0ZXIgd2lkZSwgYW5kIHdlJ3JlIG5vdCBhbHJlYWR5CisgICAgICAgICAgICAgICBjb2xsZWN0aW5nIGJhY2t0cmFja2luZyBwb2ludHMuICBmb3Igb3RoZXIgY2FzZXMsCisgICAgICAgICAgICAgICB1c2UgdGhlIE1BWF9SRVBFQVQgb3BlcmF0b3IgKi8KKworICAgICAgICAgICAgLyogPFJFUEVBVF9PTkU+IDxza2lwPiA8MT1taW4+IDwyPW1heD4gaXRlbSA8U1VDQ0VTUz4gdGFpbCAqLworCisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxSRVBFQVRfT05FICVkICVkXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyLAorICAgICAgICAgICAgICAgICAgIGN0eC0+cGF0dGVyblsxXSwgY3R4LT5wYXR0ZXJuWzJdKSk7CisKKyAgICAgICAgICAgIGlmICgoUHlfc3NpemVfdCkgY3R4LT5wYXR0ZXJuWzFdID4gZW5kIC0gY3R4LT5wdHIpCisgICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7IC8qIGNhbm5vdCBtYXRjaCAqLworCisgICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHI7CisKKyAgICAgICAgICAgIHJldCA9IFNSRShjb3VudCkoc3RhdGUsIGN0eC0+cGF0dGVybiszLCBjdHgtPnBhdHRlcm5bMl0pOworICAgICAgICAgICAgUkVUVVJOX09OX0VSUk9SKHJldCk7CisgICAgICAgICAgICBEQVRBX0xPT0tVUF9BVChTUkUobWF0Y2hfY29udGV4dCksIGN0eCwgY3R4X3Bvcyk7CisgICAgICAgICAgICBjdHgtPmNvdW50ID0gcmV0OworICAgICAgICAgICAgY3R4LT5wdHIgKz0gY3R4LT5jb3VudDsKKworICAgICAgICAgICAgLyogd2hlbiB3ZSBhcnJpdmUgaGVyZSwgY291bnQgY29udGFpbnMgdGhlIG51bWJlciBvZgorICAgICAgICAgICAgICAgbWF0Y2hlcywgYW5kIGN0eC0+cHRyIHBvaW50cyB0byB0aGUgdGFpbCBvZiB0aGUgdGFyZ2V0CisgICAgICAgICAgICAgICBzdHJpbmcuICBjaGVjayBpZiB0aGUgcmVzdCBvZiB0aGUgcGF0dGVybiBtYXRjaGVzLAorICAgICAgICAgICAgICAgYW5kIGJhY2t0cmFjayBpZiBub3QuICovCisKKyAgICAgICAgICAgIGlmIChjdHgtPmNvdW50IDwgKFB5X3NzaXplX3QpIGN0eC0+cGF0dGVyblsxXSkKKyAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKKworICAgICAgICAgICAgaWYgKGN0eC0+cGF0dGVybltjdHgtPnBhdHRlcm5bMF1dID09IFNSRV9PUF9TVUNDRVNTICYmCisgICAgICAgICAgICAgICAgY3R4LT5wdHIgPT0gc3RhdGUtPmVuZCkgeworICAgICAgICAgICAgICAgIC8qIHRhaWwgaXMgZW1wdHkuICB3ZSdyZSBmaW5pc2hlZCAqLworICAgICAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKKyAgICAgICAgICAgICAgICBSRVRVUk5fU1VDQ0VTUzsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgTEFTVE1BUktfU0FWRSgpOworCisgICAgICAgICAgICBpZiAoY3R4LT5wYXR0ZXJuW2N0eC0+cGF0dGVyblswXV0gPT0gU1JFX09QX0xJVEVSQUwpIHsKKyAgICAgICAgICAgICAgICAvKiB0YWlsIHN0YXJ0cyB3aXRoIGEgbGl0ZXJhbC4gc2tpcCBwb3NpdGlvbnMgd2hlcmUKKyAgICAgICAgICAgICAgICAgICB0aGUgcmVzdCBvZiB0aGUgcGF0dGVybiBjYW5ub3QgcG9zc2libHkgbWF0Y2ggKi8KKyAgICAgICAgICAgICAgICBjdHgtPnUuY2hyID0gY3R4LT5wYXR0ZXJuW2N0eC0+cGF0dGVyblswXSsxXTsKKyAgICAgICAgICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICAgICAgICAgIHdoaWxlIChjdHgtPmNvdW50ID49IChQeV9zc2l6ZV90KSBjdHgtPnBhdHRlcm5bMV0gJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChjdHgtPnB0ciA+PSBlbmQgfHwgKmN0eC0+cHRyICE9IGN0eC0+dS5jaHIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjdHgtPnB0ci0tOworICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5jb3VudC0tOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChjdHgtPmNvdW50IDwgKFB5X3NzaXplX3QpIGN0eC0+cGF0dGVyblsxXSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHI7CisgICAgICAgICAgICAgICAgICAgIERPX0pVTVAoSlVNUF9SRVBFQVRfT05FXzEsIGp1bXBfcmVwZWF0X29uZV8xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+cGF0dGVybitjdHgtPnBhdHRlcm5bMF0pOworICAgICAgICAgICAgICAgICAgICBpZiAocmV0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fT05fRVJST1IocmV0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9TVUNDRVNTOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgTEFTVE1BUktfUkVTVE9SRSgpOworCisgICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyLS07CisgICAgICAgICAgICAgICAgICAgIGN0eC0+Y291bnQtLTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLyogZ2VuZXJhbCBjYXNlICovCisgICAgICAgICAgICAgICAgd2hpbGUgKGN0eC0+Y291bnQgPj0gKFB5X3NzaXplX3QpIGN0eC0+cGF0dGVyblsxXSkgeworICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHI7CisgICAgICAgICAgICAgICAgICAgIERPX0pVTVAoSlVNUF9SRVBFQVRfT05FXzIsIGp1bXBfcmVwZWF0X29uZV8yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+cGF0dGVybitjdHgtPnBhdHRlcm5bMF0pOworICAgICAgICAgICAgICAgICAgICBpZiAocmV0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fT05fRVJST1IocmV0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9TVUNDRVNTOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyLS07CisgICAgICAgICAgICAgICAgICAgIGN0eC0+Y291bnQtLTsKKyAgICAgICAgICAgICAgICAgICAgTEFTVE1BUktfUkVTVE9SRSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOworCisgICAgICAgIGNhc2UgU1JFX09QX01JTl9SRVBFQVRfT05FOgorICAgICAgICAgICAgLyogbWF0Y2ggcmVwZWF0ZWQgc2VxdWVuY2UgKG1pbmltaXppbmcgcmVnZXhwKSAqLworCisgICAgICAgICAgICAvKiB0aGlzIG9wZXJhdG9yIG9ubHkgd29ya3MgaWYgdGhlIHJlcGVhdGVkIGl0ZW0gaXMKKyAgICAgICAgICAgICAgIGV4YWN0bHkgb25lIGNoYXJhY3RlciB3aWRlLCBhbmQgd2UncmUgbm90IGFscmVhZHkKKyAgICAgICAgICAgICAgIGNvbGxlY3RpbmcgYmFja3RyYWNraW5nIHBvaW50cy4gIGZvciBvdGhlciBjYXNlcywKKyAgICAgICAgICAgICAgIHVzZSB0aGUgTUlOX1JFUEVBVCBvcGVyYXRvciAqLworCisgICAgICAgICAgICAvKiA8TUlOX1JFUEVBVF9PTkU+IDxza2lwPiA8MT1taW4+IDwyPW1heD4gaXRlbSA8U1VDQ0VTUz4gdGFpbCAqLworCisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxNSU5fUkVQRUFUX09ORSAlZCAlZFxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0ciwKKyAgICAgICAgICAgICAgICAgICBjdHgtPnBhdHRlcm5bMV0sIGN0eC0+cGF0dGVyblsyXSkpOworCisgICAgICAgICAgICBpZiAoKFB5X3NzaXplX3QpIGN0eC0+cGF0dGVyblsxXSA+IGVuZCAtIGN0eC0+cHRyKQorICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOyAvKiBjYW5ub3QgbWF0Y2ggKi8KKworICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyOworCisgICAgICAgICAgICBpZiAoY3R4LT5wYXR0ZXJuWzFdID09IDApCisgICAgICAgICAgICAgICAgY3R4LT5jb3VudCA9IDA7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAvKiBjb3VudCB1c2luZyBwYXR0ZXJuIG1pbiBhcyB0aGUgbWF4aW11bSAqLworICAgICAgICAgICAgICAgIHJldCA9IFNSRShjb3VudCkoc3RhdGUsIGN0eC0+cGF0dGVybiszLCBjdHgtPnBhdHRlcm5bMV0pOworICAgICAgICAgICAgICAgIFJFVFVSTl9PTl9FUlJPUihyZXQpOworICAgICAgICAgICAgICAgIERBVEFfTE9PS1VQX0FUKFNSRShtYXRjaF9jb250ZXh0KSwgY3R4LCBjdHhfcG9zKTsKKyAgICAgICAgICAgICAgICBpZiAocmV0IDwgKFB5X3NzaXplX3QpIGN0eC0+cGF0dGVyblsxXSkKKyAgICAgICAgICAgICAgICAgICAgLyogZGlkbid0IG1hdGNoIG1pbmltdW0gbnVtYmVyIG9mIHRpbWVzICovCisgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOworICAgICAgICAgICAgICAgIC8qIGFkdmFuY2UgcGFzdCBtaW5pbXVtIG1hdGNoZXMgb2YgcmVwZWF0ICovCisgICAgICAgICAgICAgICAgY3R4LT5jb3VudCA9IHJldDsKKyAgICAgICAgICAgICAgICBjdHgtPnB0ciArPSBjdHgtPmNvdW50OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoY3R4LT5wYXR0ZXJuW2N0eC0+cGF0dGVyblswXV0gPT0gU1JFX09QX1NVQ0NFU1MgJiYKKyAgICAgICAgICAgICAgICAoIW1hdGNoX2FsbCB8fCBjdHgtPnB0ciA9PSBzdGF0ZS0+ZW5kKSkgeworICAgICAgICAgICAgICAgIC8qIHRhaWwgaXMgZW1wdHkuICB3ZSdyZSBmaW5pc2hlZCAqLworICAgICAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKKyAgICAgICAgICAgICAgICBSRVRVUk5fU1VDQ0VTUzsKKworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvKiBnZW5lcmFsIGNhc2UgKi8KKyAgICAgICAgICAgICAgICBMQVNUTUFSS19TQVZFKCk7CisgICAgICAgICAgICAgICAgd2hpbGUgKChQeV9zc2l6ZV90KWN0eC0+cGF0dGVyblsyXSA9PSBTUkVfTUFYUkVQRUFUCisgICAgICAgICAgICAgICAgICAgICAgIHx8IGN0eC0+Y291bnQgPD0gKFB5X3NzaXplX3QpY3R4LT5wYXR0ZXJuWzJdKSB7CisgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKKyAgICAgICAgICAgICAgICAgICAgRE9fSlVNUChKVU1QX01JTl9SRVBFQVRfT05FLGp1bXBfbWluX3JlcGVhdF9vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5wYXR0ZXJuK2N0eC0+cGF0dGVyblswXSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChyZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9PTl9FUlJPUihyZXQpOworICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX1NVQ0NFU1M7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyOworICAgICAgICAgICAgICAgICAgICByZXQgPSBTUkUoY291bnQpKHN0YXRlLCBjdHgtPnBhdHRlcm4rMywgMSk7CisgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9PTl9FUlJPUihyZXQpOworICAgICAgICAgICAgICAgICAgICBEQVRBX0xPT0tVUF9BVChTUkUobWF0Y2hfY29udGV4dCksIGN0eCwgY3R4X3Bvcyk7CisgICAgICAgICAgICAgICAgICAgIGlmIChyZXQgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBhc3NlcnQocmV0ID09IDEpOworICAgICAgICAgICAgICAgICAgICBjdHgtPnB0cisrOworICAgICAgICAgICAgICAgICAgICBjdHgtPmNvdW50Kys7CisgICAgICAgICAgICAgICAgICAgIExBU1RNQVJLX1JFU1RPUkUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKKworICAgICAgICBjYXNlIFNSRV9PUF9SRVBFQVQ6CisgICAgICAgICAgICAvKiBjcmVhdGUgcmVwZWF0IGNvbnRleHQuICBhbGwgdGhlIGhhcmQgd29yayBpcyBkb25lCisgICAgICAgICAgICAgICBieSB0aGUgVU5USUwgb3BlcmF0b3IgKE1BWF9VTlRJTCwgTUlOX1VOVElMKSAqLworICAgICAgICAgICAgLyogPFJFUEVBVD4gPHNraXA+IDwxPW1pbj4gPDI9bWF4PiBpdGVtIDxVTlRJTD4gdGFpbCAqLworICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8UkVQRUFUICVkICVkXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyLAorICAgICAgICAgICAgICAgICAgIGN0eC0+cGF0dGVyblsxXSwgY3R4LT5wYXR0ZXJuWzJdKSk7CisKKyAgICAgICAgICAgIC8qIGluc3RhbGwgbmV3IHJlcGVhdCBjb250ZXh0ICovCisgICAgICAgICAgICBjdHgtPnUucmVwID0gKFNSRV9SRVBFQVQqKSBQeU9iamVjdF9NQUxMT0Moc2l6ZW9mKCpjdHgtPnUucmVwKSk7CisgICAgICAgICAgICBpZiAoIWN0eC0+dS5yZXApIHsKKyAgICAgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY3R4LT51LnJlcC0+Y291bnQgPSAtMTsKKyAgICAgICAgICAgIGN0eC0+dS5yZXAtPnBhdHRlcm4gPSBjdHgtPnBhdHRlcm47CisgICAgICAgICAgICBjdHgtPnUucmVwLT5wcmV2ID0gc3RhdGUtPnJlcGVhdDsKKyAgICAgICAgICAgIGN0eC0+dS5yZXAtPmxhc3RfcHRyID0gTlVMTDsKKyAgICAgICAgICAgIHN0YXRlLT5yZXBlYXQgPSBjdHgtPnUucmVwOworCisgICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHI7CisgICAgICAgICAgICBET19KVU1QKEpVTVBfUkVQRUFULCBqdW1wX3JlcGVhdCwgY3R4LT5wYXR0ZXJuK2N0eC0+cGF0dGVyblswXSk7CisgICAgICAgICAgICBzdGF0ZS0+cmVwZWF0ID0gY3R4LT51LnJlcC0+cHJldjsKKyAgICAgICAgICAgIFB5T2JqZWN0X0ZSRUUoY3R4LT51LnJlcCk7CisKKyAgICAgICAgICAgIGlmIChyZXQpIHsKKyAgICAgICAgICAgICAgICBSRVRVUk5fT05fRVJST1IocmV0KTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fU1VDQ0VTUzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOworCisgICAgICAgIGNhc2UgU1JFX09QX01BWF9VTlRJTDoKKyAgICAgICAgICAgIC8qIG1heGltaXppbmcgcmVwZWF0ICovCisgICAgICAgICAgICAvKiA8UkVQRUFUPiA8c2tpcD4gPDE9bWluPiA8Mj1tYXg+IGl0ZW0gPE1BWF9VTlRJTD4gdGFpbCAqLworCisgICAgICAgICAgICAvKiBGSVhNRTogd2UgcHJvYmFibHkgbmVlZCB0byBkZWFsIHdpdGggemVyby13aWR0aAorICAgICAgICAgICAgICAgbWF0Y2hlcyBpbiBoZXJlLi4uICovCisKKyAgICAgICAgICAgIGN0eC0+dS5yZXAgPSBzdGF0ZS0+cmVwZWF0OworICAgICAgICAgICAgaWYgKCFjdHgtPnUucmVwKQorICAgICAgICAgICAgICAgIFJFVFVSTl9FUlJPUihTUkVfRVJST1JfU1RBVEUpOworCisgICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHI7CisKKyAgICAgICAgICAgIGN0eC0+Y291bnQgPSBjdHgtPnUucmVwLT5jb3VudCsxOworCisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxNQVhfVU5USUwgJSIgUFlfRk9STUFUX1NJWkVfVCAiZFxuIiwgY3R4LT5wYXR0ZXJuLAorICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyLCBjdHgtPmNvdW50KSk7CisKKyAgICAgICAgICAgIGlmIChjdHgtPmNvdW50IDwgKFB5X3NzaXplX3QpIGN0eC0+dS5yZXAtPnBhdHRlcm5bMV0pIHsKKyAgICAgICAgICAgICAgICAvKiBub3QgZW5vdWdoIG1hdGNoZXMgKi8KKyAgICAgICAgICAgICAgICBjdHgtPnUucmVwLT5jb3VudCA9IGN0eC0+Y291bnQ7CisgICAgICAgICAgICAgICAgRE9fSlVNUChKVU1QX01BWF9VTlRJTF8xLCBqdW1wX21heF91bnRpbF8xLAorICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT51LnJlcC0+cGF0dGVybiszKTsKKyAgICAgICAgICAgICAgICBpZiAocmV0KSB7CisgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9PTl9FUlJPUihyZXQpOworICAgICAgICAgICAgICAgICAgICBSRVRVUk5fU1VDQ0VTUzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY3R4LT51LnJlcC0+Y291bnQgPSBjdHgtPmNvdW50LTE7CisgICAgICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyOworICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoKGN0eC0+Y291bnQgPCAoUHlfc3NpemVfdCkgY3R4LT51LnJlcC0+cGF0dGVyblsyXSB8fAorICAgICAgICAgICAgICAgIGN0eC0+dS5yZXAtPnBhdHRlcm5bMl0gPT0gU1JFX01BWFJFUEVBVCkgJiYKKyAgICAgICAgICAgICAgICBzdGF0ZS0+cHRyICE9IGN0eC0+dS5yZXAtPmxhc3RfcHRyKSB7CisgICAgICAgICAgICAgICAgLyogd2UgbWF5IGhhdmUgZW5vdWdoIG1hdGNoZXMsIGJ1dCBpZiB3ZSBjYW4KKyAgICAgICAgICAgICAgICAgICBtYXRjaCBhbm90aGVyIGl0ZW0sIGRvIHNvICovCisgICAgICAgICAgICAgICAgY3R4LT51LnJlcC0+Y291bnQgPSBjdHgtPmNvdW50OworICAgICAgICAgICAgICAgIExBU1RNQVJLX1NBVkUoKTsKKyAgICAgICAgICAgICAgICBNQVJLX1BVU0goY3R4LT5sYXN0bWFyayk7CisgICAgICAgICAgICAgICAgLyogemVyby13aWR0aCBtYXRjaCBwcm90ZWN0aW9uICovCisgICAgICAgICAgICAgICAgREFUQV9QVVNIKCZjdHgtPnUucmVwLT5sYXN0X3B0cik7CisgICAgICAgICAgICAgICAgY3R4LT51LnJlcC0+bGFzdF9wdHIgPSBzdGF0ZS0+cHRyOworICAgICAgICAgICAgICAgIERPX0pVTVAoSlVNUF9NQVhfVU5USUxfMiwganVtcF9tYXhfdW50aWxfMiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+dS5yZXAtPnBhdHRlcm4rMyk7CisgICAgICAgICAgICAgICAgREFUQV9QT1AoJmN0eC0+dS5yZXAtPmxhc3RfcHRyKTsKKyAgICAgICAgICAgICAgICBpZiAocmV0KSB7CisgICAgICAgICAgICAgICAgICAgIE1BUktfUE9QX0RJU0NBUkQoY3R4LT5sYXN0bWFyayk7CisgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9PTl9FUlJPUihyZXQpOworICAgICAgICAgICAgICAgICAgICBSRVRVUk5fU1VDQ0VTUzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgTUFSS19QT1AoY3R4LT5sYXN0bWFyayk7CisgICAgICAgICAgICAgICAgTEFTVE1BUktfUkVTVE9SRSgpOworICAgICAgICAgICAgICAgIGN0eC0+dS5yZXAtPmNvdW50ID0gY3R4LT5jb3VudC0xOworICAgICAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogY2Fubm90IG1hdGNoIG1vcmUgcmVwZWF0ZWQgaXRlbXMgaGVyZS4gIG1ha2Ugc3VyZSB0aGUKKyAgICAgICAgICAgICAgIHRhaWwgbWF0Y2hlcyAqLworICAgICAgICAgICAgc3RhdGUtPnJlcGVhdCA9IGN0eC0+dS5yZXAtPnByZXY7CisgICAgICAgICAgICBET19KVU1QKEpVTVBfTUFYX1VOVElMXzMsIGp1bXBfbWF4X3VudGlsXzMsIGN0eC0+cGF0dGVybik7CisgICAgICAgICAgICBSRVRVUk5fT05fU1VDQ0VTUyhyZXQpOworICAgICAgICAgICAgc3RhdGUtPnJlcGVhdCA9IGN0eC0+dS5yZXA7CisgICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHI7CisgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKKworICAgICAgICBjYXNlIFNSRV9PUF9NSU5fVU5USUw6CisgICAgICAgICAgICAvKiBtaW5pbWl6aW5nIHJlcGVhdCAqLworICAgICAgICAgICAgLyogPFJFUEVBVD4gPHNraXA+IDwxPW1pbj4gPDI9bWF4PiBpdGVtIDxNSU5fVU5USUw+IHRhaWwgKi8KKworICAgICAgICAgICAgY3R4LT51LnJlcCA9IHN0YXRlLT5yZXBlYXQ7CisgICAgICAgICAgICBpZiAoIWN0eC0+dS5yZXApCisgICAgICAgICAgICAgICAgUkVUVVJOX0VSUk9SKFNSRV9FUlJPUl9TVEFURSk7CisKKyAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKKworICAgICAgICAgICAgY3R4LT5jb3VudCA9IGN0eC0+dS5yZXAtPmNvdW50KzE7CisKKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfE1JTl9VTlRJTCAlIiBQWV9GT1JNQVRfU0laRV9UICJkICVwXG4iLCBjdHgtPnBhdHRlcm4sCisgICAgICAgICAgICAgICAgICAgY3R4LT5wdHIsIGN0eC0+Y291bnQsIGN0eC0+dS5yZXAtPnBhdHRlcm4pKTsKKworICAgICAgICAgICAgaWYgKGN0eC0+Y291bnQgPCAoUHlfc3NpemVfdCkgY3R4LT51LnJlcC0+cGF0dGVyblsxXSkgeworICAgICAgICAgICAgICAgIC8qIG5vdCBlbm91Z2ggbWF0Y2hlcyAqLworICAgICAgICAgICAgICAgIGN0eC0+dS5yZXAtPmNvdW50ID0gY3R4LT5jb3VudDsKKyAgICAgICAgICAgICAgICBET19KVU1QKEpVTVBfTUlOX1VOVElMXzEsIGp1bXBfbWluX3VudGlsXzEsCisgICAgICAgICAgICAgICAgICAgICAgICBjdHgtPnUucmVwLT5wYXR0ZXJuKzMpOworICAgICAgICAgICAgICAgIGlmIChyZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgUkVUVVJOX09OX0VSUk9SKHJldCk7CisgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9TVUNDRVNTOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjdHgtPnUucmVwLT5jb3VudCA9IGN0eC0+Y291bnQtMTsKKyAgICAgICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHI7CisgICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIExBU1RNQVJLX1NBVkUoKTsKKworICAgICAgICAgICAgLyogc2VlIGlmIHRoZSB0YWlsIG1hdGNoZXMgKi8KKyAgICAgICAgICAgIHN0YXRlLT5yZXBlYXQgPSBjdHgtPnUucmVwLT5wcmV2OworICAgICAgICAgICAgRE9fSlVNUChKVU1QX01JTl9VTlRJTF8yLCBqdW1wX21pbl91bnRpbF8yLCBjdHgtPnBhdHRlcm4pOworICAgICAgICAgICAgaWYgKHJldCkgeworICAgICAgICAgICAgICAgIFJFVFVSTl9PTl9FUlJPUihyZXQpOworICAgICAgICAgICAgICAgIFJFVFVSTl9TVUNDRVNTOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzdGF0ZS0+cmVwZWF0ID0gY3R4LT51LnJlcDsKKyAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKKworICAgICAgICAgICAgTEFTVE1BUktfUkVTVE9SRSgpOworCisgICAgICAgICAgICBpZiAoKGN0eC0+Y291bnQgPj0gKFB5X3NzaXplX3QpIGN0eC0+dS5yZXAtPnBhdHRlcm5bMl0KKyAgICAgICAgICAgICAgICAmJiBjdHgtPnUucmVwLT5wYXR0ZXJuWzJdICE9IFNSRV9NQVhSRVBFQVQpIHx8CisgICAgICAgICAgICAgICAgc3RhdGUtPnB0ciA9PSBjdHgtPnUucmVwLT5sYXN0X3B0cikKKyAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKKworICAgICAgICAgICAgY3R4LT51LnJlcC0+Y291bnQgPSBjdHgtPmNvdW50OworICAgICAgICAgICAgLyogemVyby13aWR0aCBtYXRjaCBwcm90ZWN0aW9uICovCisgICAgICAgICAgICBEQVRBX1BVU0goJmN0eC0+dS5yZXAtPmxhc3RfcHRyKTsKKyAgICAgICAgICAgIGN0eC0+dS5yZXAtPmxhc3RfcHRyID0gc3RhdGUtPnB0cjsKKyAgICAgICAgICAgIERPX0pVTVAoSlVNUF9NSU5fVU5USUxfMyxqdW1wX21pbl91bnRpbF8zLAorICAgICAgICAgICAgICAgICAgICBjdHgtPnUucmVwLT5wYXR0ZXJuKzMpOworICAgICAgICAgICAgREFUQV9QT1AoJmN0eC0+dS5yZXAtPmxhc3RfcHRyKTsKKyAgICAgICAgICAgIGlmIChyZXQpIHsKKyAgICAgICAgICAgICAgICBSRVRVUk5fT05fRVJST1IocmV0KTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fU1VDQ0VTUzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGN0eC0+dS5yZXAtPmNvdW50ID0gY3R4LT5jb3VudC0xOworICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyOworICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7CisKKyAgICAgICAgY2FzZSBTUkVfT1BfR1JPVVBSRUY6CisgICAgICAgICAgICAvKiBtYXRjaCBiYWNrcmVmZXJlbmNlICovCisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxHUk9VUFJFRiAlZFxuIiwgY3R4LT5wYXR0ZXJuLAorICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyLCBjdHgtPnBhdHRlcm5bMF0pKTsKKyAgICAgICAgICAgIGkgPSBjdHgtPnBhdHRlcm5bMF07CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBncm91cHJlZiA9IGkraTsKKyAgICAgICAgICAgICAgICBpZiAoZ3JvdXByZWYgPj0gc3RhdGUtPmxhc3RtYXJrKSB7CisgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIFNSRV9DSEFSKiBwID0gKFNSRV9DSEFSKikgc3RhdGUtPm1hcmtbZ3JvdXByZWZdOworICAgICAgICAgICAgICAgICAgICBTUkVfQ0hBUiogZSA9IChTUkVfQ0hBUiopIHN0YXRlLT5tYXJrW2dyb3VwcmVmKzFdOworICAgICAgICAgICAgICAgICAgICBpZiAoIXAgfHwgIWUgfHwgZSA8IHApCisgICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHAgPCBlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3R4LT5wdHIgPj0gZW5kIHx8ICpjdHgtPnB0ciAhPSAqcCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHArKzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyKys7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjdHgtPnBhdHRlcm4rKzsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgU1JFX09QX0dST1VQUkVGX0lHTk9SRToKKyAgICAgICAgICAgIC8qIG1hdGNoIGJhY2tyZWZlcmVuY2UgKi8KKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEdST1VQUkVGX0lHTk9SRSAlZFxuIiwgY3R4LT5wYXR0ZXJuLAorICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyLCBjdHgtPnBhdHRlcm5bMF0pKTsKKyAgICAgICAgICAgIGkgPSBjdHgtPnBhdHRlcm5bMF07CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBncm91cHJlZiA9IGkraTsKKyAgICAgICAgICAgICAgICBpZiAoZ3JvdXByZWYgPj0gc3RhdGUtPmxhc3RtYXJrKSB7CisgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIFNSRV9DSEFSKiBwID0gKFNSRV9DSEFSKikgc3RhdGUtPm1hcmtbZ3JvdXByZWZdOworICAgICAgICAgICAgICAgICAgICBTUkVfQ0hBUiogZSA9IChTUkVfQ0hBUiopIHN0YXRlLT5tYXJrW2dyb3VwcmVmKzFdOworICAgICAgICAgICAgICAgICAgICBpZiAoIXAgfHwgIWUgfHwgZSA8IHApCisgICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHAgPCBlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3R4LT5wdHIgPj0gZW5kIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUtPmxvd2VyKCpjdHgtPnB0cikgIT0gc3RhdGUtPmxvd2VyKCpwKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHArKzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyKys7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjdHgtPnBhdHRlcm4rKzsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgU1JFX09QX0dST1VQUkVGX0VYSVNUUzoKKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEdST1VQUkVGX0VYSVNUUyAlZFxuIiwgY3R4LT5wYXR0ZXJuLAorICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyLCBjdHgtPnBhdHRlcm5bMF0pKTsKKyAgICAgICAgICAgIC8qIDxHUk9VUFJFRl9FWElTVFM+IDxncm91cD4gPHNraXA+IGNvZGV5ZXMgPEpVTVA+IGNvZGVubyAuLi4gKi8KKyAgICAgICAgICAgIGkgPSBjdHgtPnBhdHRlcm5bMF07CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBncm91cHJlZiA9IGkraTsKKyAgICAgICAgICAgICAgICBpZiAoZ3JvdXByZWYgPj0gc3RhdGUtPmxhc3RtYXJrKSB7CisgICAgICAgICAgICAgICAgICAgIGN0eC0+cGF0dGVybiArPSBjdHgtPnBhdHRlcm5bMV07CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIFNSRV9DSEFSKiBwID0gKFNSRV9DSEFSKikgc3RhdGUtPm1hcmtbZ3JvdXByZWZdOworICAgICAgICAgICAgICAgICAgICBTUkVfQ0hBUiogZSA9IChTUkVfQ0hBUiopIHN0YXRlLT5tYXJrW2dyb3VwcmVmKzFdOworICAgICAgICAgICAgICAgICAgICBpZiAoIXAgfHwgIWUgfHwgZSA8IHApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+cGF0dGVybiArPSBjdHgtPnBhdHRlcm5bMV07CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGN0eC0+cGF0dGVybiArPSAyOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBTUkVfT1BfQVNTRVJUOgorICAgICAgICAgICAgLyogYXNzZXJ0IHN1YnBhdHRlcm4gKi8KKyAgICAgICAgICAgIC8qIDxBU1NFUlQ+IDxza2lwPiA8YmFjaz4gPHBhdHRlcm4+ICovCisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxBU1NFUlQgJWRcbiIsIGN0eC0+cGF0dGVybiwKKyAgICAgICAgICAgICAgICAgICBjdHgtPnB0ciwgY3R4LT5wYXR0ZXJuWzFdKSk7CisgICAgICAgICAgICBpZiAoY3R4LT5wdHIgLSAoU1JFX0NIQVIgKilzdGF0ZS0+YmVnaW5uaW5nIDwgKFB5X3NzaXplX3QpY3R4LT5wYXR0ZXJuWzFdKQorICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOworICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyIC0gY3R4LT5wYXR0ZXJuWzFdOworICAgICAgICAgICAgRE9fSlVNUDAoSlVNUF9BU1NFUlQsIGp1bXBfYXNzZXJ0LCBjdHgtPnBhdHRlcm4rMik7CisgICAgICAgICAgICBSRVRVUk5fT05fRkFJTFVSRShyZXQpOworICAgICAgICAgICAgY3R4LT5wYXR0ZXJuICs9IGN0eC0+cGF0dGVyblswXTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgU1JFX09QX0FTU0VSVF9OT1Q6CisgICAgICAgICAgICAvKiBhc3NlcnQgbm90IHN1YnBhdHRlcm4gKi8KKyAgICAgICAgICAgIC8qIDxBU1NFUlRfTk9UPiA8c2tpcD4gPGJhY2s+IDxwYXR0ZXJuPiAqLworICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8QVNTRVJUX05PVCAlZFxuIiwgY3R4LT5wYXR0ZXJuLAorICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyLCBjdHgtPnBhdHRlcm5bMV0pKTsKKyAgICAgICAgICAgIGlmIChjdHgtPnB0ciAtIChTUkVfQ0hBUiAqKXN0YXRlLT5iZWdpbm5pbmcgPj0gKFB5X3NzaXplX3QpY3R4LT5wYXR0ZXJuWzFdKSB7CisgICAgICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyIC0gY3R4LT5wYXR0ZXJuWzFdOworICAgICAgICAgICAgICAgIERPX0pVTVAwKEpVTVBfQVNTRVJUX05PVCwganVtcF9hc3NlcnRfbm90LCBjdHgtPnBhdHRlcm4rMik7CisgICAgICAgICAgICAgICAgaWYgKHJldCkgeworICAgICAgICAgICAgICAgICAgICBSRVRVUk5fT05fRVJST1IocmV0KTsKKyAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgY3R4LT5wYXR0ZXJuICs9IGN0eC0+cGF0dGVyblswXTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgU1JFX09QX0ZBSUxVUkU6CisgICAgICAgICAgICAvKiBpbW1lZGlhdGUgZmFpbHVyZSAqLworICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8RkFJTFVSRVxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOworICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfFVOS05PV04gJWRcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIsCisgICAgICAgICAgICAgICAgICAgY3R4LT5wYXR0ZXJuWy0xXSkpOworICAgICAgICAgICAgUkVUVVJOX0VSUk9SKFNSRV9FUlJPUl9JTExFR0FMKTsKKyAgICAgICAgfQorICAgIH0KKworZXhpdDoKKyAgICBjdHhfcG9zID0gY3R4LT5sYXN0X2N0eF9wb3M7CisgICAganVtcCA9IGN0eC0+anVtcDsKKyAgICBEQVRBX1BPUF9ESVNDQVJEKGN0eCk7CisgICAgaWYgKGN0eF9wb3MgPT0gLTEpCisgICAgICAgIHJldHVybiByZXQ7CisgICAgREFUQV9MT09LVVBfQVQoU1JFKG1hdGNoX2NvbnRleHQpLCBjdHgsIGN0eF9wb3MpOworCisgICAgc3dpdGNoIChqdW1wKSB7CisgICAgICAgIGNhc2UgSlVNUF9NQVhfVU5USUxfMjoKKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEpVTVBfTUFYX1VOVElMXzJcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKKyAgICAgICAgICAgIGdvdG8ganVtcF9tYXhfdW50aWxfMjsKKyAgICAgICAgY2FzZSBKVU1QX01BWF9VTlRJTF8zOgorICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8SlVNUF9NQVhfVU5USUxfM1xuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOworICAgICAgICAgICAgZ290byBqdW1wX21heF91bnRpbF8zOworICAgICAgICBjYXNlIEpVTVBfTUlOX1VOVElMXzI6CisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxKVU1QX01JTl9VTlRJTF8yXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyKSk7CisgICAgICAgICAgICBnb3RvIGp1bXBfbWluX3VudGlsXzI7CisgICAgICAgIGNhc2UgSlVNUF9NSU5fVU5USUxfMzoKKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEpVTVBfTUlOX1VOVElMXzNcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKKyAgICAgICAgICAgIGdvdG8ganVtcF9taW5fdW50aWxfMzsKKyAgICAgICAgY2FzZSBKVU1QX0JSQU5DSDoKKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEpVTVBfQlJBTkNIXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyKSk7CisgICAgICAgICAgICBnb3RvIGp1bXBfYnJhbmNoOworICAgICAgICBjYXNlIEpVTVBfTUFYX1VOVElMXzE6CisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxKVU1QX01BWF9VTlRJTF8xXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyKSk7CisgICAgICAgICAgICBnb3RvIGp1bXBfbWF4X3VudGlsXzE7CisgICAgICAgIGNhc2UgSlVNUF9NSU5fVU5USUxfMToKKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEpVTVBfTUlOX1VOVElMXzFcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKKyAgICAgICAgICAgIGdvdG8ganVtcF9taW5fdW50aWxfMTsKKyAgICAgICAgY2FzZSBKVU1QX1JFUEVBVDoKKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEpVTVBfUkVQRUFUXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyKSk7CisgICAgICAgICAgICBnb3RvIGp1bXBfcmVwZWF0OworICAgICAgICBjYXNlIEpVTVBfUkVQRUFUX09ORV8xOgorICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8SlVNUF9SRVBFQVRfT05FXzFcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKKyAgICAgICAgICAgIGdvdG8ganVtcF9yZXBlYXRfb25lXzE7CisgICAgICAgIGNhc2UgSlVNUF9SRVBFQVRfT05FXzI6CisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxKVU1QX1JFUEVBVF9PTkVfMlxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOworICAgICAgICAgICAgZ290byBqdW1wX3JlcGVhdF9vbmVfMjsKKyAgICAgICAgY2FzZSBKVU1QX01JTl9SRVBFQVRfT05FOgorICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8SlVNUF9NSU5fUkVQRUFUX09ORVxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOworICAgICAgICAgICAgZ290byBqdW1wX21pbl9yZXBlYXRfb25lOworICAgICAgICBjYXNlIEpVTVBfQVNTRVJUOgorICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8SlVNUF9BU1NFUlRcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKKyAgICAgICAgICAgIGdvdG8ganVtcF9hc3NlcnQ7CisgICAgICAgIGNhc2UgSlVNUF9BU1NFUlRfTk9UOgorICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8SlVNUF9BU1NFUlRfTk9UXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyKSk7CisgICAgICAgICAgICBnb3RvIGp1bXBfYXNzZXJ0X25vdDsKKyAgICAgICAgY2FzZSBKVU1QX05PTkU6CisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxSRVRVUk4gJSIgUFlfRk9STUFUX1NJWkVfVCAiZFxuIiwgY3R4LT5wYXR0ZXJuLAorICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyLCByZXQpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiByZXQ7IC8qIHNob3VsZCBuZXZlciBnZXQgaGVyZSAqLworfQorCitMT0NBTChQeV9zc2l6ZV90KQorU1JFKHNlYXJjaCkoU1JFX1NUQVRFKiBzdGF0ZSwgU1JFX0NPREUqIHBhdHRlcm4pCit7CisgICAgU1JFX0NIQVIqIHB0ciA9IChTUkVfQ0hBUiAqKXN0YXRlLT5zdGFydDsKKyAgICBTUkVfQ0hBUiogZW5kID0gKFNSRV9DSEFSICopc3RhdGUtPmVuZDsKKyAgICBQeV9zc2l6ZV90IHN0YXR1cyA9IDA7CisgICAgUHlfc3NpemVfdCBwcmVmaXhfbGVuID0gMDsKKyAgICBQeV9zc2l6ZV90IHByZWZpeF9za2lwID0gMDsKKyAgICBTUkVfQ09ERSogcHJlZml4ID0gTlVMTDsKKyAgICBTUkVfQ09ERSogY2hhcnNldCA9IE5VTEw7CisgICAgU1JFX0NPREUqIG92ZXJsYXAgPSBOVUxMOworICAgIGludCBmbGFncyA9IDA7CisKKyAgICBpZiAocHRyID4gZW5kKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChwYXR0ZXJuWzBdID09IFNSRV9PUF9JTkZPKSB7CisgICAgICAgIC8qIG9wdGltaXphdGlvbiBpbmZvIGJsb2NrICovCisgICAgICAgIC8qIDxJTkZPPiA8MT1za2lwPiA8Mj1mbGFncz4gPDM9bWluPiA8ND1tYXg+IDw1PXByZWZpeCBpbmZvPiAgKi8KKworICAgICAgICBmbGFncyA9IHBhdHRlcm5bMl07CisKKyAgICAgICAgaWYgKHBhdHRlcm5bM10gJiYgZW5kIC0gcHRyIDwgKFB5X3NzaXplX3QpcGF0dGVyblszXSkgeworICAgICAgICAgICAgVFJBQ0UoKCJyZWplY3QgKGdvdCAldSBjaGFycywgbmVlZCAldSlcbiIsCisgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGludCkoZW5kIC0gcHRyKSwgcGF0dGVyblszXSkpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHBhdHRlcm5bM10gPiAxKSB7CisgICAgICAgICAgICAvKiBhZGp1c3QgZW5kIHBvaW50IChidXQgbWFrZSBzdXJlIHdlIGxlYXZlIGF0IGxlYXN0IG9uZQorICAgICAgICAgICAgICAgY2hhcmFjdGVyIGluIHRoZXJlLCBzbyBsaXRlcmFsIHNlYXJjaCB3aWxsIHdvcmspICovCisgICAgICAgICAgICBlbmQgLT0gcGF0dGVyblszXSAtIDE7CisgICAgICAgICAgICBpZiAoZW5kIDw9IHB0cikKKyAgICAgICAgICAgICAgICBlbmQgPSBwdHI7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZmxhZ3MgJiBTUkVfSU5GT19QUkVGSVgpIHsKKyAgICAgICAgICAgIC8qIHBhdHRlcm4gc3RhcnRzIHdpdGggYSBrbm93biBwcmVmaXggKi8KKyAgICAgICAgICAgIC8qIDxsZW5ndGg+IDxza2lwPiA8cHJlZml4IGRhdGE+IDxvdmVybGFwIGRhdGE+ICovCisgICAgICAgICAgICBwcmVmaXhfbGVuID0gcGF0dGVybls1XTsKKyAgICAgICAgICAgIHByZWZpeF9za2lwID0gcGF0dGVybls2XTsKKyAgICAgICAgICAgIHByZWZpeCA9IHBhdHRlcm4gKyA3OworICAgICAgICAgICAgb3ZlcmxhcCA9IHByZWZpeCArIHByZWZpeF9sZW4gLSAxOworICAgICAgICB9IGVsc2UgaWYgKGZsYWdzICYgU1JFX0lORk9fQ0hBUlNFVCkKKyAgICAgICAgICAgIC8qIHBhdHRlcm4gc3RhcnRzIHdpdGggYSBjaGFyYWN0ZXIgZnJvbSBhIGtub3duIHNldCAqLworICAgICAgICAgICAgLyogPGNoYXJzZXQ+ICovCisgICAgICAgICAgICBjaGFyc2V0ID0gcGF0dGVybiArIDU7CisKKyAgICAgICAgcGF0dGVybiArPSAxICsgcGF0dGVyblsxXTsKKyAgICB9CisKKyAgICBUUkFDRSgoInByZWZpeCA9ICVwICUiIFBZX0ZPUk1BVF9TSVpFX1QgImQgJSIgUFlfRk9STUFUX1NJWkVfVCAiZFxuIiwKKyAgICAgICAgICAgcHJlZml4LCBwcmVmaXhfbGVuLCBwcmVmaXhfc2tpcCkpOworICAgIFRSQUNFKCgiY2hhcnNldCA9ICVwXG4iLCBjaGFyc2V0KSk7CisKKyNpZiBkZWZpbmVkKFVTRV9GQVNUX1NFQVJDSCkKKyAgICBpZiAocHJlZml4X2xlbiA+IDEpIHsKKyAgICAgICAgLyogcGF0dGVybiBzdGFydHMgd2l0aCBhIGtub3duIHByZWZpeC4gIHVzZSB0aGUgb3ZlcmxhcAorICAgICAgICAgICB0YWJsZSB0byBza2lwIGZvcndhcmQgYXMgZmFzdCBhcyB3ZSBwb3NzaWJseSBjYW4gKi8KKyAgICAgICAgUHlfc3NpemVfdCBpID0gMDsKKworICAgICAgICBlbmQgPSAoU1JFX0NIQVIgKilzdGF0ZS0+ZW5kOworICAgICAgICBpZiAocHJlZml4X2xlbiA+IGVuZCAtIHB0cikKKyAgICAgICAgICAgIHJldHVybiAwOworI2lmIFNJWkVPRl9TUkVfQ0hBUiA8IDQKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IHByZWZpeF9sZW47IGkrKykKKyAgICAgICAgICAgIGlmICgoU1JFX0NPREUpKFNSRV9DSEFSKSBwcmVmaXhbaV0gIT0gcHJlZml4W2ldKQorICAgICAgICAgICAgICAgIHJldHVybiAwOyAvKiBsaXRlcmFsIGNhbid0IG1hdGNoOiBkb2Vzbid0IGZpdCBpbiBjaGFyIHdpZHRoICovCisjZW5kaWYKKyAgICAgICAgd2hpbGUgKHB0ciA8IGVuZCkgeworICAgICAgICAgICAgU1JFX0NIQVIgYyA9IChTUkVfQ0hBUikgcHJlZml4WzBdOworICAgICAgICAgICAgd2hpbGUgKCpwdHIrKyAhPSBjKSB7CisgICAgICAgICAgICAgICAgaWYgKHB0ciA+PSBlbmQpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHB0ciA+PSBlbmQpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgICAgIGkgPSAxOworICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgIGlmICgqcHRyID09IChTUkVfQ0hBUikgcHJlZml4W2ldKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICgrK2kgIT0gcHJlZml4X2xlbikgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCsrcHRyID49IGVuZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIC8qIGZvdW5kIGEgcG90ZW50aWFsIG1hdGNoICovCisgICAgICAgICAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfFNFQVJDSCBTQ0FOXG4iLCBwYXR0ZXJuLCBwdHIpKTsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUtPnN0YXJ0ID0gcHRyIC0gKHByZWZpeF9sZW4gLSAxKTsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUtPnB0ciA9IHB0ciAtIChwcmVmaXhfbGVuIC0gcHJlZml4X3NraXAgLSAxKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGZsYWdzICYgU1JFX0lORk9fTElURVJBTCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxOyAvKiB3ZSBnb3QgYWxsIG9mIGl0ICovCisgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IFNSRShtYXRjaCkoc3RhdGUsIHBhdHRlcm4gKyAyKnByZWZpeF9za2lwLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyAhPSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICAgICAgICAgICAgICAgICAgLyogY2xvc2UgYnV0IG5vIGNpZ2FyIC0tIHRyeSBhZ2FpbiAqLworICAgICAgICAgICAgICAgICAgICBpZiAoKytwdHIgPj0gZW5kKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGkgPSBvdmVybGFwW2ldOworICAgICAgICAgICAgfSB3aGlsZSAoaSAhPSAwKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gMDsKKyAgICB9CisjZW5kaWYKKworICAgIGlmIChwYXR0ZXJuWzBdID09IFNSRV9PUF9MSVRFUkFMKSB7CisgICAgICAgIC8qIHBhdHRlcm4gc3RhcnRzIHdpdGggYSBsaXRlcmFsIGNoYXJhY3Rlci4gIHRoaXMgaXMgdXNlZAorICAgICAgICAgICBmb3Igc2hvcnQgcHJlZml4ZXMsIGFuZCBpZiBmYXN0IHNlYXJjaCBpcyBkaXNhYmxlZCAqLworICAgICAgICBTUkVfQ0hBUiBjID0gKFNSRV9DSEFSKSBwYXR0ZXJuWzFdOworI2lmIFNJWkVPRl9TUkVfQ0hBUiA8IDQKKyAgICAgICAgaWYgKChTUkVfQ09ERSkgYyAhPSBwYXR0ZXJuWzFdKQorICAgICAgICAgICAgcmV0dXJuIDA7IC8qIGxpdGVyYWwgY2FuJ3QgbWF0Y2g6IGRvZXNuJ3QgZml0IGluIGNoYXIgd2lkdGggKi8KKyNlbmRpZgorICAgICAgICBlbmQgPSAoU1JFX0NIQVIgKilzdGF0ZS0+ZW5kOworICAgICAgICB3aGlsZSAocHRyIDwgZW5kKSB7CisgICAgICAgICAgICB3aGlsZSAoKnB0ciAhPSBjKSB7CisgICAgICAgICAgICAgICAgaWYgKCsrcHRyID49IGVuZCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxTRUFSQ0ggTElURVJBTFxuIiwgcGF0dGVybiwgcHRyKSk7CisgICAgICAgICAgICBzdGF0ZS0+c3RhcnQgPSBwdHI7CisgICAgICAgICAgICBzdGF0ZS0+cHRyID0gKytwdHI7CisgICAgICAgICAgICBpZiAoZmxhZ3MgJiBTUkVfSU5GT19MSVRFUkFMKQorICAgICAgICAgICAgICAgIHJldHVybiAxOyAvKiB3ZSBnb3QgYWxsIG9mIGl0ICovCisgICAgICAgICAgICBzdGF0dXMgPSBTUkUobWF0Y2gpKHN0YXRlLCBwYXR0ZXJuICsgMiwgMCk7CisgICAgICAgICAgICBpZiAoc3RhdHVzICE9IDApCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKGNoYXJzZXQpIHsKKyAgICAgICAgLyogcGF0dGVybiBzdGFydHMgd2l0aCBhIGNoYXJhY3RlciBmcm9tIGEga25vd24gc2V0ICovCisgICAgICAgIGVuZCA9IChTUkVfQ0hBUiAqKXN0YXRlLT5lbmQ7CisgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgIHdoaWxlIChwdHIgPCBlbmQgJiYgIVNSRShjaGFyc2V0KShjaGFyc2V0LCAqcHRyKSkKKyAgICAgICAgICAgICAgICBwdHIrKzsKKyAgICAgICAgICAgIGlmIChwdHIgPj0gZW5kKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8U0VBUkNIIENIQVJTRVRcbiIsIHBhdHRlcm4sIHB0cikpOworICAgICAgICAgICAgc3RhdGUtPnN0YXJ0ID0gcHRyOworICAgICAgICAgICAgc3RhdGUtPnB0ciA9IHB0cjsKKyAgICAgICAgICAgIHN0YXR1cyA9IFNSRShtYXRjaCkoc3RhdGUsIHBhdHRlcm4sIDApOworICAgICAgICAgICAgaWYgKHN0YXR1cyAhPSAwKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcHRyKys7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICAvKiBnZW5lcmFsIGNhc2UgKi8KKyAgICAgICAgYXNzZXJ0KHB0ciA8PSBlbmQpOworICAgICAgICB3aGlsZSAoMSkgeworICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8U0VBUkNIXG4iLCBwYXR0ZXJuLCBwdHIpKTsKKyAgICAgICAgICAgIHN0YXRlLT5zdGFydCA9IHN0YXRlLT5wdHIgPSBwdHI7CisgICAgICAgICAgICBzdGF0dXMgPSBTUkUobWF0Y2gpKHN0YXRlLCBwYXR0ZXJuLCAwKTsKKyAgICAgICAgICAgIGlmIChzdGF0dXMgIT0gMCB8fCBwdHIgPj0gZW5kKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcHRyKys7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gc3RhdHVzOworfQorCisjdW5kZWYgU1JFX0NIQVIKKyN1bmRlZiBTSVpFT0ZfU1JFX0NIQVIKKyN1bmRlZiBTUkUKKworLyogdmltOnRzPTQ6c3c9NDpldAorKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvc3ltdGFibGVtb2R1bGUuYyBiL01vZHVsZXMvc3ltdGFibGVtb2R1bGUuYwppbmRleCAzN2RmODJkLi5jZGI0ZmZjIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3N5bXRhYmxlbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9zeW10YWJsZW1vZHVsZS5jCkBAIC0xMSwxMiArMTEsMTIgQEAKICAgICBQeU9iamVjdCAqdDsKIAogICAgIGNoYXIgKnN0cjsKLSAgICBjaGFyICpmaWxlbmFtZTsKKyAgICBQeU9iamVjdCAqZmlsZW5hbWU7CiAgICAgY2hhciAqc3RhcnRzdHI7CiAgICAgaW50IHN0YXJ0OwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzc3M6c3ltdGFibGUiLCAmc3RyLCAmZmlsZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZzdGFydHN0cikpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzTyZzOnN5bXRhYmxlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0ciwgUHlVbmljb2RlX0ZTRGVjb2RlciwgJmZpbGVuYW1lLCAmc3RhcnRzdHIpKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpZiAoc3RyY21wKHN0YXJ0c3RyLCAiZXhlYyIpID09IDApCiAgICAgICAgIHN0YXJ0ID0gUHlfZmlsZV9pbnB1dDsKQEAgLTI3LDkgKzI3LDExIEBACiAgICAgZWxzZSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAogICAgICAgICAgICAic3ltdGFibGUoKSBhcmcgMyBtdXN0IGJlICdleGVjJyBvciAnZXZhbCcgb3IgJ3NpbmdsZSciKTsKKyAgICAgICAgUHlfREVDUkVGKGZpbGVuYW1lKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIHN0ID0gUHlfU3ltdGFibGVTdHJpbmcoc3RyLCBmaWxlbmFtZSwgc3RhcnQpOworICAgIHN0ID0gUHlfU3ltdGFibGVTdHJpbmdPYmplY3Qoc3RyLCBmaWxlbmFtZSwgc3RhcnQpOworICAgIFB5X0RFQ1JFRihmaWxlbmFtZSk7CiAgICAgaWYgKHN0ID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIHQgPSAoUHlPYmplY3QgKilzdC0+c3RfdG9wOwpAQCAtNjksMzAgKzcxLDMwIEBACiAgICAgbSA9IFB5TW9kdWxlX0NyZWF0ZSgmc3ltdGFibGVtb2R1bGUpOwogICAgIGlmIChtID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJVU0UiLCBVU0UpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJERUZfR0xPQkFMIiwgREVGX0dMT0JBTCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkRFRl9MT0NBTCIsIERFRl9MT0NBTCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkRFRl9QQVJBTSIsIERFRl9QQVJBTSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkRFRl9GUkVFIiwgREVGX0ZSRUUpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJERUZfRlJFRV9DTEFTUyIsIERFRl9GUkVFX0NMQVNTKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiREVGX0lNUE9SVCIsIERFRl9JTVBPUlQpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJERUZfQk9VTkQiLCBERUZfQk9VTkQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFVTRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgREVGX0dMT0JBTCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgREVGX0xPQ0FMKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBERUZfUEFSQU0pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIERFRl9GUkVFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBERUZfRlJFRV9DTEFTUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgREVGX0lNUE9SVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgREVGX0JPVU5EKTsKIAogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUWVBFX0ZVTkNUSU9OIiwgRnVuY3Rpb25CbG9jayk7CiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRZUEVfQ0xBU1MiLCBDbGFzc0Jsb2NrKTsKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVFlQRV9NT0RVTEUiLCBNb2R1bGVCbG9jayk7CiAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiT1BUX0lNUE9SVF9TVEFSIiwgT1BUX0lNUE9SVF9TVEFSKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiT1BUX1RPUExFVkVMIiwgT1BUX1RPUExFVkVMKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPUFRfSU1QT1JUX1NUQVIpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9QVF9UT1BMRVZFTCk7CiAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTE9DQUwiLCBMT0NBTCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkdMT0JBTF9FWFBMSUNJVCIsIEdMT0JBTF9FWFBMSUNJVCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkdMT0JBTF9JTVBMSUNJVCIsIEdMT0JBTF9JTVBMSUNJVCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkZSRUUiLCBGUkVFKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQ0VMTCIsIENFTEwpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPQ0FMKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBHTE9CQUxfRVhQTElDSVQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEdMT0JBTF9JTVBMSUNJVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRlJFRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQ0VMTCk7CiAKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU0NPUEVfT0ZGIiwgU0NPUEVfT0ZGU0VUKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU0NPUEVfTUFTSyIsIFNDT1BFX01BU0spOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNDT1BFX01BU0spOwogCiAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKICAgICAgICAgUHlfREVDUkVGKG0pOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9zeXNsb2dtb2R1bGUuYyBiL01vZHVsZXMvc3lzbG9nbW9kdWxlLmMKaW5kZXggZmMzZjM3NS4uZjJkNDRmZiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9zeXNsb2dtb2R1bGUuYworKysgYi9Nb2R1bGVzL3N5c2xvZ21vZHVsZS5jCkBAIC0yNzcsNDQgKzI3Nyw0NCBAQAogICAgIC8qIEFkZCBzb21lIHN5bWJvbGljIGNvbnN0YW50cyB0byB0aGUgbW9kdWxlICovCiAKICAgICAvKiBQcmlvcml0aWVzICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkxPR19FTUVSRyIsICAgICAgIExPR19FTUVSRyk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkxPR19BTEVSVCIsICAgICAgIExPR19BTEVSVCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkxPR19DUklUIiwgICAgICAgIExPR19DUklUKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTE9HX0VSUiIsICAgICAgICAgTE9HX0VSUik7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkxPR19XQVJOSU5HIiwgTE9HX1dBUk5JTkcpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfTk9USUNFIiwgIExPR19OT1RJQ0UpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfSU5GTyIsICAgICAgICBMT0dfSU5GTyk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkxPR19ERUJVRyIsICAgICAgIExPR19ERUJVRyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9HX0VNRVJHKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfQUxFUlQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPR19DUklUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfRVJSKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfV0FSTklORyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9HX05PVElDRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9HX0lORk8pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPR19ERUJVRyk7CiAKICAgICAvKiBvcGVubG9nKCkgb3B0aW9uIGZsYWdzICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkxPR19QSUQiLCAgICAgICAgIExPR19QSUQpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfQ09OUyIsICAgICAgICBMT0dfQ09OUyk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkxPR19OREVMQVkiLCAgTE9HX05ERUxBWSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9HX1BJRCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9HX0NPTlMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPR19OREVMQVkpOwogI2lmZGVmIExPR19PREVMQVkKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTE9HX09ERUxBWSIsICBMT0dfT0RFTEFZKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfT0RFTEFZKTsKICNlbmRpZgogI2lmZGVmIExPR19OT1dBSVQKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTE9HX05PV0FJVCIsICBMT0dfTk9XQUlUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfTk9XQUlUKTsKICNlbmRpZgogI2lmZGVmIExPR19QRVJST1IKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTE9HX1BFUlJPUiIsICBMT0dfUEVSUk9SKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfUEVSUk9SKTsKICNlbmRpZgogCiAgICAgLyogRmFjaWxpdGllcyAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfS0VSTiIsICAgICAgICBMT0dfS0VSTik7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkxPR19VU0VSIiwgICAgICAgIExPR19VU0VSKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTE9HX01BSUwiLCAgICAgICAgTE9HX01BSUwpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfREFFTU9OIiwgIExPR19EQUVNT04pOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfQVVUSCIsICAgICAgICBMT0dfQVVUSCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkxPR19MUFIiLCAgICAgICAgIExPR19MUFIpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfTE9DQUwwIiwgIExPR19MT0NBTDApOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfTE9DQUwxIiwgIExPR19MT0NBTDEpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfTE9DQUwyIiwgIExPR19MT0NBTDIpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfTE9DQUwzIiwgIExPR19MT0NBTDMpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfTE9DQUw0IiwgIExPR19MT0NBTDQpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfTE9DQUw1IiwgIExPR19MT0NBTDUpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfTE9DQUw2IiwgIExPR19MT0NBTDYpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfTE9DQUw3IiwgIExPR19MT0NBTDcpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPR19LRVJOKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfVVNFUik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9HX01BSUwpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPR19EQUVNT04pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPR19BVVRIKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfTFBSKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfTE9DQUwwKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfTE9DQUwxKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfTE9DQUwyKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfTE9DQUwzKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfTE9DQUw0KTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfTE9DQUw1KTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfTE9DQUw2KTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfTE9DQUw3KTsKIAogI2lmbmRlZiBMT0dfU1lTTE9HCiAjZGVmaW5lIExPR19TWVNMT0cgICAgICAgICAgICAgIExPR19EQUVNT04KQEAgLTMyOSwxMyArMzI5LDEzIEBACiAjZGVmaW5lIExPR19DUk9OICAgICAgICAgICAgICAgIExPR19EQUVNT04KICNlbmRpZgogCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkxPR19TWVNMT0ciLCAgTE9HX1NZU0xPRyk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkxPR19DUk9OIiwgICAgICAgIExPR19DUk9OKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTE9HX1VVQ1AiLCAgICAgICAgTE9HX1VVQ1ApOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfTkVXUyIsICAgICAgICBMT0dfTkVXUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9HX1NZU0xPRyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9HX0NST04pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPR19VVUNQKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfTkVXUyk7CiAKICNpZmRlZiBMT0dfQVVUSFBSSVYKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTE9HX0FVVEhQUklWIiwgICAgTE9HX0FVVEhQUklWKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfQVVUSFBSSVYpOwogI2VuZGlmCiAKICAgICByZXR1cm4gbTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvdGltZW1vZHVsZS5jIGIvTW9kdWxlcy90aW1lbW9kdWxlLmMKaW5kZXggNDJlYzM2Ni4uZDcxYjNhYyAxMDA2NDQKLS0tIGEvTW9kdWxlcy90aW1lbW9kdWxlLmMKKysrIGIvTW9kdWxlcy90aW1lbW9kdWxlLmMKQEAgLTM3LDE2ICszNyw2IEBACiAjZW5kaWYgLyogTVNfV0lORE9XUyAqLwogI2VuZGlmIC8qICFfX1dBVENPTUNfXyB8fCBfX1FOWF9fICovCiAKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKQotI2RlZmluZSBJTkNMX0RPUwotI2RlZmluZSBJTkNMX0VSUk9SUwotI2luY2x1ZGUgPG9zMi5oPgotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKFBZQ0NfVkFDUFApCi0jaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSNlbmRpZgotCiAjaWYgZGVmaW5lZChfX0FQUExFX18pCiAjaW5jbHVkZSA8bWFjaC9tYWNoX3RpbWUuaD4KICNlbmRpZgpAQCAtMjAzLDcgKzE5Myw3IEBACiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpTzpjbG9ja19zZXR0aW1lIiwgJmNsa19pZCwgJm9iaikpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgaWYgKF9QeVRpbWVfT2JqZWN0VG9UaW1lc3BlYyhvYmosICZ0dl9zZWMsICZ0dl9uc2VjKSA9PSAtMSkKKyAgICBpZiAoX1B5VGltZV9PYmplY3RUb1RpbWVzcGVjKG9iaiwgJnR2X3NlYywgJnR2X25zZWMsIF9QeVRpbWVfUk9VTkRfRE9XTikgPT0gLTEpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIHRwLnR2X3NlYyA9IHR2X3NlYzsKICAgICB0cC50dl9uc2VjID0gdHZfbnNlYzsKQEAgLTM1MSw3ICszNDEsNyBAQAogICAgICAgICB3aGVudCA9IHRpbWUoTlVMTCk7CiAgICAgfQogICAgIGVsc2UgewotICAgICAgICBpZiAoX1B5VGltZV9PYmplY3RUb1RpbWVfdChvdCwgJndoZW50KSA9PSAtMSkKKyAgICAgICAgaWYgKF9QeVRpbWVfT2JqZWN0VG9UaW1lX3Qob3QsICZ3aGVudCwgX1B5VGltZV9ST1VORF9ET1dOKSA9PSAtMSkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICAqcHdoZW4gPSB3aGVudDsKQEAgLTU0Myw2ICs1MzMsMjYgQEAKICAgIC8qIHdjc2Z0aW1lKCkgZG9lc24ndCBmb3JtYXQgY29ycmVjdGx5IHRpbWUgem9uZXMsIHNlZSBpc3N1ZSAjMTA2NTMgKi8KICMgIHVuZGVmIEhBVkVfV0NTRlRJTUUKICNlbmRpZgorI2RlZmluZSBTVFJGVElNRV9GT1JNQVRfQ09ERVMgXAorIkNvbW1vbmx5IHVzZWQgZm9ybWF0IGNvZGVzOlxuXAorXG5cCislWSAgWWVhciB3aXRoIGNlbnR1cnkgYXMgYSBkZWNpbWFsIG51bWJlci5cblwKKyVtICBNb250aCBhcyBhIGRlY2ltYWwgbnVtYmVyIFswMSwxMl0uXG5cCislZCAgRGF5IG9mIHRoZSBtb250aCBhcyBhIGRlY2ltYWwgbnVtYmVyIFswMSwzMV0uXG5cCislSCAgSG91ciAoMjQtaG91ciBjbG9jaykgYXMgYSBkZWNpbWFsIG51bWJlciBbMDAsMjNdLlxuXAorJU0gIE1pbnV0ZSBhcyBhIGRlY2ltYWwgbnVtYmVyIFswMCw1OV0uXG5cCislUyAgU2Vjb25kIGFzIGEgZGVjaW1hbCBudW1iZXIgWzAwLDYxXS5cblwKKyV6ICBUaW1lIHpvbmUgb2Zmc2V0IGZyb20gVVRDLlxuXAorJWEgIExvY2FsZSdzIGFiYnJldmlhdGVkIHdlZWtkYXkgbmFtZS5cblwKKyVBICBMb2NhbGUncyBmdWxsIHdlZWtkYXkgbmFtZS5cblwKKyViICBMb2NhbGUncyBhYmJyZXZpYXRlZCBtb250aCBuYW1lLlxuXAorJUIgIExvY2FsZSdzIGZ1bGwgbW9udGggbmFtZS5cblwKKyVjICBMb2NhbGUncyBhcHByb3ByaWF0ZSBkYXRlIGFuZCB0aW1lIHJlcHJlc2VudGF0aW9uLlxuXAorJUkgIEhvdXIgKDEyLWhvdXIgY2xvY2spIGFzIGEgZGVjaW1hbCBudW1iZXIgWzAxLDEyXS5cblwKKyVwICBMb2NhbGUncyBlcXVpdmFsZW50IG9mIGVpdGhlciBBTSBvciBQTS5cblwKK1xuXAorT3RoZXIgY29kZXMgbWF5IGJlIGF2YWlsYWJsZSBvbiB5b3VyIHBsYXRmb3JtLiAgU2VlIGRvY3VtZW50YXRpb24gZm9yXG5cCit0aGUgQyBsaWJyYXJ5IHN0cmZ0aW1lIGZ1bmN0aW9uLlxuIgogCiAjaWZkZWYgSEFWRV9TVFJGVElNRQogI2lmZGVmIEhBVkVfV0NTRlRJTUUKQEAgLTY0MCw2ICs2NTAsMjEgQEAKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAgICAgfQorI2VsaWYgKGRlZmluZWQoX0FJWCkgfHwgZGVmaW5lZChzdW4pKSAmJiBkZWZpbmVkKEhBVkVfV0NTRlRJTUUpCisgICAgZm9yKG91dGJ1ZiA9IHdjc2NocihmbXQsICclJyk7CisgICAgICAgIG91dGJ1ZiAhPSBOVUxMOworICAgICAgICBvdXRidWYgPSB3Y3NjaHIob3V0YnVmKzIsICclJykpCisgICAgeworICAgICAgICBpZiAob3V0YnVmWzFdID09IEwnXDAnKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIC8qIElzc3VlICMxOTYzNDogT24gQUlYLCB3Y3NmdGltZSgieSIsICgxODk5LCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwKSkKKyAgICAgICAgICAgcmV0dXJucyAiMC8iIGluc3RlYWQgb2YgIjk5IiAqLworICAgICAgICBpZiAob3V0YnVmWzFdID09IEwneScgJiYgYnVmLnRtX3llYXIgPCAwKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZm9ybWF0ICV5IHJlcXVpcmVzIHllYXIgPj0gMTkwMCBvbiBBSVgiKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgfQogI2VuZGlmCiAKICAgICBmbXRsZW4gPSB0aW1lX3N0cmxlbihmbXQpOwpAQCAtNjk0LDEzICs3MTksMTMgQEAKIAogI3VuZGVmIHRpbWVfY2hhcgogI3VuZGVmIGZvcm1hdF90aW1lCi0KIFB5RG9jX1NUUlZBUihzdHJmdGltZV9kb2MsCiAic3RyZnRpbWUoZm9ybWF0WywgdHVwbGVdKSAtPiBzdHJpbmdcblwKIFxuXAogQ29udmVydCBhIHRpbWUgdHVwbGUgdG8gYSBzdHJpbmcgYWNjb3JkaW5nIHRvIGEgZm9ybWF0IHNwZWNpZmljYXRpb24uXG5cCiBTZWUgdGhlIGxpYnJhcnkgcmVmZXJlbmNlIG1hbnVhbCBmb3IgZm9ybWF0dGluZyBjb2Rlcy4gV2hlbiB0aGUgdGltZSB0dXBsZVxuXAotaXMgbm90IHByZXNlbnQsIGN1cnJlbnQgdGltZSBhcyByZXR1cm5lZCBieSBsb2NhbHRpbWUoKSBpcyB1c2VkLiIpOworaXMgbm90IHByZXNlbnQsIGN1cnJlbnQgdGltZSBhcyByZXR1cm5lZCBieSBsb2NhbHRpbWUoKSBpcyB1c2VkLlxuXAorXG4iIFNUUkZUSU1FX0ZPUk1BVF9DT0RFUyk7CiAjZW5kaWYgLyogSEFWRV9TVFJGVElNRSAqLwogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtNzIzLDcgKzc0OCw5IEBACiAic3RycHRpbWUoc3RyaW5nLCBmb3JtYXQpIC0+IHN0cnVjdF90aW1lXG5cCiBcblwKIFBhcnNlIGEgc3RyaW5nIHRvIGEgdGltZSB0dXBsZSBhY2NvcmRpbmcgdG8gYSBmb3JtYXQgc3BlY2lmaWNhdGlvbi5cblwKLVNlZSB0aGUgbGlicmFyeSByZWZlcmVuY2UgbWFudWFsIGZvciBmb3JtYXR0aW5nIGNvZGVzIChzYW1lIGFzIHN0cmZ0aW1lKCkpLiIpOworU2VlIHRoZSBsaWJyYXJ5IHJlZmVyZW5jZSBtYW51YWwgZm9yIGZvcm1hdHRpbmcgY29kZXMgKHNhbWUgYXNcblwKK3N0cmZ0aW1lKCkpLlxuXAorXG4iIFNUUkZUSU1FX0ZPUk1BVF9DT0RFUyk7CiAKIHN0YXRpYyBQeU9iamVjdCAqCiBfYXNjdGltZShzdHJ1Y3QgdG0gKnRpbWVwdHIpCkBAIC03OTgsMTEgKzgyNSwzMSBAQAogICAgIHRpbWVfdCB0dDsKICAgICBpZiAoIWdldHRtYXJnKHR1cCwgJmJ1ZikpCiAgICAgICAgIHJldHVybiBOVUxMOworI2lmZGVmIF9BSVgKKyAgICAvKiB5ZWFyIDwgMTkwMiBvciB5ZWFyID4gMjAzNyAqLworICAgIGlmIChidWYudG1feWVhciA8IDIgfHwgYnVmLnRtX3llYXIgPiAxMzcpIHsKKyAgICAgICAgLyogSXNzdWUgIzE5NzQ4OiBPbiBBSVgsIG1rdGltZSgpIGRvZXNuJ3QgcmVwb3J0IG92ZXJmbG93IGVycm9yIGZvcgorICAgICAgICAgKiB0aW1lc3RhbXAgPCAtMl4zMSBvciB0aW1lc3RhbXAgPiAyKiozMS0xLiAqLworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJta3RpbWUgYXJndW1lbnQgb3V0IG9mIHJhbmdlIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyNlbHNlCiAgICAgYnVmLnRtX3dkYXkgPSAtMTsgIC8qIHNlbnRpbmVsOyBvcmlnaW5hbCB2YWx1ZSBpZ25vcmVkICovCisjZW5kaWYKICAgICB0dCA9IG1rdGltZSgmYnVmKTsKICAgICAvKiBSZXR1cm4gdmFsdWUgb2YgLTEgZG9lcyBub3QgbmVjZXNzYXJpbHkgbWVhbiBhbiBlcnJvciwgYnV0IHRtX3dkYXkKICAgICAgKiBjYW5ub3QgcmVtYWluIHNldCB0byAtMSBpZiBta3RpbWUgc3VjY2VlZGVkLiAqLwotICAgIGlmICh0dCA9PSAodGltZV90KSgtMSkgJiYgYnVmLnRtX3dkYXkgPT0gLTEpIHsKKyAgICBpZiAodHQgPT0gKHRpbWVfdCkoLTEpCisjaWZuZGVmIF9BSVgKKyAgICAgICAgLyogUmV0dXJuIHZhbHVlIG9mIC0xIGRvZXMgbm90IG5lY2Vzc2FyaWx5IG1lYW4gYW4gZXJyb3IsIGJ1dAorICAgICAgICAgKiB0bV93ZGF5IGNhbm5vdCByZW1haW4gc2V0IHRvIC0xIGlmIG1rdGltZSBzdWNjZWVkZWQuICovCisgICAgICAgICYmIGJ1Zi50bV93ZGF5ID09IC0xCisjZWxzZQorICAgICAgICAvKiBvbiBBSVgsIHRtX3dkYXkgaXMgYWx3YXlzIHNldHMsIGV2ZW4gb24gZXJyb3IgKi8KKyNlbmRpZgorICAgICAgICkKKyAgICB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgIm1rdGltZSBhcmd1bWVudCBvdXQgb2YgcmFuZ2UiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC04MzcsNiArODg0LDggQEAKICAgICAvKiBSZXNldCB0aW1lem9uZSwgYWx0em9uZSwgZGF5bGlnaHQgYW5kIHR6bmFtZSAqLwogICAgIFB5SW5pdF90aW1lem9uZShtKTsKICAgICBQeV9ERUNSRUYobSk7CisgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwogICAgIHJldHVybiBQeV9Ob25lOwpAQCAtMTI3MywxOSArMTMyMiwxMSBAQAogI2lmIGRlZmluZWQoSEFWRV9UWk5BTUUpICYmICFkZWZpbmVkKF9fR0xJQkNfXykgJiYgIWRlZmluZWQoX19DWUdXSU5fXykKICAgICBQeU9iamVjdCAqb3R6MCwgKm90ejE7CiAgICAgdHpzZXQoKTsKLSNpZmRlZiBQWU9TX09TMgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJ0aW1lem9uZSIsIF90aW1lem9uZSk7Ci0jZWxzZSAvKiAhUFlPU19PUzIgKi8KICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAidGltZXpvbmUiLCB0aW1lem9uZSk7Ci0jZW5kaWYgLyogUFlPU19PUzIgKi8KICNpZmRlZiBIQVZFX0FMVFpPTkUKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiYWx0em9uZSIsIGFsdHpvbmUpOwogI2Vsc2UKLSNpZmRlZiBQWU9TX09TMgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJhbHR6b25lIiwgX3RpbWV6b25lLTM2MDApOwotI2Vsc2UgLyogIVBZT1NfT1MyICovCiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgImFsdHpvbmUiLCB0aW1lem9uZS0zNjAwKTsKLSNlbmRpZiAvKiBQWU9TX09TMiAqLwogI2VuZGlmCiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgImRheWxpZ2h0IiwgZGF5bGlnaHQpOwogICAgIG90ejAgPSBQeVVuaWNvZGVfRGVjb2RlTG9jYWxlKHR6bmFtZVswXSwgInN1cnJvZ2F0ZWVzY2FwZSIpOwpAQCAtMTQ2OCw4ICsxNTA5LDkgQEAKICAgICBQeUluaXRfdGltZXpvbmUobSk7CiAKICAgICBpZiAoIWluaXRpYWxpemVkKSB7Ci0gICAgICAgIFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUoJlN0cnVjdFRpbWVUeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdHJ1Y3RfdGltZV90eXBlX2Rlc2MpOworICAgICAgICBpZiAoUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZTIoJlN0cnVjdFRpbWVUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0cnVjdF90aW1lX3R5cGVfZGVzYykgPCAwKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICNpZmRlZiBNU19XSU5ET1dTCiAgICAgICAgIHdpbnZlci5kd09TVmVyc2lvbkluZm9TaXplID0gc2l6ZW9mKHdpbnZlcik7CkBAIC0xNTgxLDcgKzE2MjMsNyBAQAogICAgICAgICAgICAgRFdPUkQgcmM7CiAgICAgICAgICAgICBIQU5ETEUgaEludGVycnVwdEV2ZW50ID0gX1B5T1NfU2lnaW50RXZlbnQoKTsKICAgICAgICAgICAgIFJlc2V0RXZlbnQoaEludGVycnVwdEV2ZW50KTsKLSAgICAgICAgICAgIHJjID0gV2FpdEZvclNpbmdsZU9iamVjdChoSW50ZXJydXB0RXZlbnQsIHVsX21pbGxpcyk7CisgICAgICAgICAgICByYyA9IFdhaXRGb3JTaW5nbGVPYmplY3RFeChoSW50ZXJydXB0RXZlbnQsIHVsX21pbGxpcywgRkFMU0UpOwogICAgICAgICAgICAgaWYgKHJjID09IFdBSVRfT0JKRUNUXzApIHsKICAgICAgICAgICAgICAgICBQeV9CTE9DS19USFJFQURTCiAgICAgICAgICAgICAgICAgZXJybm8gPSBFSU5UUjsKQEAgLTE1OTEsMTUgKzE2MzMsNiBAQAogICAgICAgICB9CiAgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCiAgICAgfQotI2VsaWYgZGVmaW5lZChQWU9TX09TMikKLSAgICAvKiBUaGlzIFNsZWVwICpJUyogSW50ZXJydXB0YWJsZSBieSBFeGNlcHRpb25zICovCi0gICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgIGlmIChEb3NTbGVlcChzZWNzICogMTAwMCkgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgUHlfQkxPQ0tfVEhSRUFEUwotICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfSU9FcnJvcik7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0gICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKICNlbHNlCiAgICAgLyogWFhYIENhbid0IGludGVycnVwdCB0aGlzIHNsZWVwICovCiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy90a2ludGVyLmggYi9Nb2R1bGVzL3RraW50ZXIuaAppbmRleCBmN2U1MGNkLi4zYzU1Njc2IDEwMDY0NAotLS0gYS9Nb2R1bGVzL3RraW50ZXIuaAorKysgYi9Nb2R1bGVzL3RraW50ZXIuaApAQCAtNCwyNCArNCwzMiBAQAogLyogVGhpcyBoZWFkZXIgaXMgdXNlZCB0byBzaGFyZSBzb21lIG1hY3JvcyBiZXR3ZWVuIF90a2ludGVyLmMgYW5kCiAgKiB0a2FwcGluaXQuYy4KICAqIEJlIHN1cmUgdG8gaW5jbHVkZSB0ay5oIGJlZm9yZSBpbmNsdWRpbmcgdGhpcyBoZWFkZXIgc28KLSAqIFRLX1ZFUlNJT05fSEVYIGlzIHByb3Blcmx5IGRlZmluZWQuICovCisgKiBUS19IRVhfVkVSU0lPTiBpcyBwcm9wZXJseSBkZWZpbmVkLiAqLwogCiAvKiBUS19SRUxFQVNFX0xFVkVMIGlzIGFsd2F5cyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKLSAqCVRDTF9BTFBIQV9SRUxFQVNFICAgMAorICogIFRDTF9BTFBIQV9SRUxFQVNFICAgMAogICogIFRDTF9CRVRBX1JFTEVBU0UgICAgMQogICogIFRDTF9GSU5BTF9SRUxFQVNFICAgMgogICovCisjZGVmaW5lIFRLX0hFWF9WRVJTSU9OICgoVEtfTUFKT1JfVkVSU0lPTiA8PCAyNCkgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAoVEtfTUlOT1JfVkVSU0lPTiA8PCAxNikgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAoVEtfUkVMRUFTRV9MRVZFTCA8PCA4KSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgIChUS19SRUxFQVNFX1NFUklBTCA8PCAwKSkKKworLyogVEtfVkVSU0lPTl9IRVggcGFja3MgZmllbGRzIGluIHdyb25nIG9yZGVyLCBub3Qgc3VpdGFibGUgZm9yIGNvbXBhcmluZyBvZgorICogbm9uLWZpbmFsIHJlbGVhc2VzLiAgTGVmdCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KKyAqLwogI2RlZmluZSBUS19WRVJTSU9OX0hFWCAoKFRLX01BSk9SX1ZFUlNJT04gPDwgMjQpIHwgXAotCQkoVEtfTUlOT1JfVkVSU0lPTiA8PCAxNikgfCBcCi0JCShUS19SRUxFQVNFX1NFUklBTCA8PCA4KSB8IFwKLQkJKFRLX1JFTEVBU0VfTEVWRUwgPDwgMCkpCisgICAgICAgICAgICAgICAgICAgICAgICAoVEtfTUlOT1JfVkVSU0lPTiA8PCAxNikgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAoVEtfUkVMRUFTRV9TRVJJQUwgPDwgOCkgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAoVEtfUkVMRUFTRV9MRVZFTCA8PCAwKSkKIAogLyogUHJvdGVjdCBUayA4LjQuMTMgYW5kIG9sZGVyIGZyb20gYSBkZWFkbG9jayB0aGF0IGhhcHBlbnMgd2hlbiB0cnlpbmcKICAqIHRvIGxvYWQgdGsgYWZ0ZXIgYSBmYWlsZWQgYXR0ZW1wdC4gKi8KLSNpZiBUS19WRVJTSU9OX0hFWCA8IDB4MDgwNDBlMDIKKyNpZiBUS19IRVhfVkVSU0lPTiA8IDB4MDgwNDAyMGUKICNkZWZpbmUgVEtJTlRFUl9QUk9URUNUX0xPQURUSwogI2RlZmluZSBUS0lOVEVSX0xPQURUS19FUlJNU0cgXAotCSJDYWxsaW5nIFRrX0luaXQgYWdhaW4gYWZ0ZXIgYSBwcmV2aW91cyBjYWxsIGZhaWxlZCBtaWdodCBkZWFkbG9jayIKKyAgICAgICAgIkNhbGxpbmcgVGtfSW5pdCBhZ2FpbiBhZnRlciBhIHByZXZpb3VzIGNhbGwgZmFpbGVkIG1pZ2h0IGRlYWRsb2NrIgogI2VuZGlmCiAKICNlbmRpZiAvKiAhVEtJTlRFUl9IICovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3VuaWNvZGVkYXRhLmMgYi9Nb2R1bGVzL3VuaWNvZGVkYXRhLmMKaW5kZXggOWZiMTE5MS4uNTA3Y2VmMyAxMDA2NDQKLS0tIGEvTW9kdWxlcy91bmljb2RlZGF0YS5jCisrKyBiL01vZHVsZXMvdW5pY29kZWRhdGEuYwpAQCAtMTMsMTAgKzEzLDE4IEBACiAKICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCisjZGVmaW5lIFBZX1NTSVpFX1RfQ0xFQU4KKwogI2luY2x1ZGUgIlB5dGhvbi5oIgogI2luY2x1ZGUgInVjbmhhc2guaCIKICNpbmNsdWRlICJzdHJ1Y3RtZW1iZXIuaCIKIAorLypbY2xpbmljIGlucHV0XQorbW9kdWxlIHVuaWNvZGVkYXRhCitjbGFzcyB1bmljb2RlZGF0YS5VQ0QgJ1ByZXZpb3VzREJWZXJzaW9uIConICcmVUNEX1R5cGUnCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZGEzOWEzZWU1ZTZiNGIwZCBpbnB1dD02ZGFjMTUzMDgyZDE1MGJjXSovCisKIC8qIGNoYXJhY3RlciBwcm9wZXJ0aWVzICovCiAKIHR5cGVkZWYgc3RydWN0IHsKQEAgLTEwNywyNSArMTE1LDYzIEBACiAKIC8qIC0tLSBNb2R1bGUgQVBJIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1QeURvY19TVFJWQVIodW5pY29kZWRhdGFfZGVjaW1hbF9fZG9jX18sCi0iZGVjaW1hbCh1bmljaHJbLCBkZWZhdWx0XSlcblwKLVxuXAotUmV0dXJucyB0aGUgZGVjaW1hbCB2YWx1ZSBhc3NpZ25lZCB0byB0aGUgVW5pY29kZSBjaGFyYWN0ZXIgdW5pY2hyXG5cCi1hcyBpbnRlZ2VyLiBJZiBubyBzdWNoIHZhbHVlIGlzIGRlZmluZWQsIGRlZmF1bHQgaXMgcmV0dXJuZWQsIG9yLCBpZlxuXAotbm90IGdpdmVuLCBWYWx1ZUVycm9yIGlzIHJhaXNlZC4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KKwordW5pY29kZWRhdGEuVUNELmRlY2ltYWwKKworICAgIHVuaWNocjogb2JqZWN0KHR5cGU9J1B5VW5pY29kZU9iamVjdCAqJywgc3ViY2xhc3Nfb2Y9JyZQeVVuaWNvZGVfVHlwZScpCisgICAgZGVmYXVsdDogb2JqZWN0PU5VTEwKKyAgICAvCisKK0NvbnZlcnRzIGEgVW5pY29kZSBjaGFyYWN0ZXIgaW50byBpdHMgZXF1aXZhbGVudCBkZWNpbWFsIHZhbHVlLgorCitSZXR1cm5zIHRoZSBkZWNpbWFsIHZhbHVlIGFzc2lnbmVkIHRvIHRoZSBVbmljb2RlIGNoYXJhY3RlciB1bmljaHIKK2FzIGludGVnZXIuIElmIG5vIHN1Y2ggdmFsdWUgaXMgZGVmaW5lZCwgZGVmYXVsdCBpcyByZXR1cm5lZCwgb3IsIGlmCitub3QgZ2l2ZW4sIFZhbHVlRXJyb3IgaXMgcmFpc2VkLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitQeURvY19TVFJWQVIodW5pY29kZWRhdGFfVUNEX2RlY2ltYWxfX2RvY19fLAorImRlY2ltYWwoJHNlbGYsIHVuaWNociwgZGVmYXVsdD1Ob25lLCAvKVxuIgorIi0tXG4iCisiXG4iCisiQ29udmVydHMgYSBVbmljb2RlIGNoYXJhY3RlciBpbnRvIGl0cyBlcXVpdmFsZW50IGRlY2ltYWwgdmFsdWUuXG4iCisiXG4iCisiUmV0dXJucyB0aGUgZGVjaW1hbCB2YWx1ZSBhc3NpZ25lZCB0byB0aGUgVW5pY29kZSBjaGFyYWN0ZXIgdW5pY2hyXG4iCisiYXMgaW50ZWdlci4gSWYgbm8gc3VjaCB2YWx1ZSBpcyBkZWZpbmVkLCBkZWZhdWx0IGlzIHJldHVybmVkLCBvciwgaWZcbiIKKyJub3QgZ2l2ZW4sIFZhbHVlRXJyb3IgaXMgcmFpc2VkLiIpOworCisjZGVmaW5lIFVOSUNPREVEQVRBX1VDRF9ERUNJTUFMX01FVEhPRERFRiAgICBcCisgICAgeyJkZWNpbWFsIiwgKFB5Q0Z1bmN0aW9uKXVuaWNvZGVkYXRhX1VDRF9kZWNpbWFsLCBNRVRIX1ZBUkFSR1MsIHVuaWNvZGVkYXRhX1VDRF9kZWNpbWFsX19kb2NfX30sCiAKIHN0YXRpYyBQeU9iamVjdCAqCi11bmljb2RlZGF0YV9kZWNpbWFsKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3VuaWNvZGVkYXRhX1VDRF9kZWNpbWFsX2ltcGwoUHJldmlvdXNEQlZlcnNpb24gKnNlbGYsIFB5VW5pY29kZU9iamVjdCAqdW5pY2hyLCBQeU9iamVjdCAqZGVmYXVsdF92YWx1ZSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCit1bmljb2RlZGF0YV9VQ0RfZGVjaW1hbChQcmV2aW91c0RCVmVyc2lvbiAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgUHlVbmljb2RlT2JqZWN0ICp2OwotICAgIFB5T2JqZWN0ICpkZWZvYmogPSBOVUxMOworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5VW5pY29kZU9iamVjdCAqdW5pY2hyOworICAgIFB5T2JqZWN0ICpkZWZhdWx0X3ZhbHVlID0gTlVMTDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAiTyF8TzpkZWNpbWFsIiwKKyAgICAgICAgJlB5VW5pY29kZV9UeXBlLCAmdW5pY2hyLCAmZGVmYXVsdF92YWx1ZSkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSB1bmljb2RlZGF0YV9VQ0RfZGVjaW1hbF9pbXBsKHNlbGYsIHVuaWNociwgZGVmYXVsdF92YWx1ZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK3VuaWNvZGVkYXRhX1VDRF9kZWNpbWFsX2ltcGwoUHJldmlvdXNEQlZlcnNpb24gKnNlbGYsIFB5VW5pY29kZU9iamVjdCAqdW5pY2hyLCBQeU9iamVjdCAqZGVmYXVsdF92YWx1ZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD04Njg5NjY5ODk2ZDI5M2RmIGlucHV0PWMyNWM5ZDJiNGRlMDc2YjFdKi8KK3sKICAgICBpbnQgaGF2ZV9vbGQgPSAwOwogICAgIGxvbmcgcmM7CiAgICAgUHlfVUNTNCBjOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPIXxPOmRlY2ltYWwiLCAmUHlVbmljb2RlX1R5cGUsICZ2LCAmZGVmb2JqKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgYyA9IGdldHVjaGFyKHYpOworICAgIGMgPSBnZXR1Y2hhcih1bmljaHIpOwogICAgIGlmIChjID09IChQeV9VQ1M0KS0xKQogICAgICAgICByZXR1cm4gTlVMTDsKIApAQCAtMTQ1LDE0ICsxOTEsMTQgQEAKICAgICBpZiAoIWhhdmVfb2xkKQogICAgICAgICByYyA9IFB5X1VOSUNPREVfVE9ERUNJTUFMKGMpOwogICAgIGlmIChyYyA8IDApIHsKLSAgICAgICAgaWYgKGRlZm9iaiA9PSBOVUxMKSB7CisgICAgICAgIGlmIChkZWZhdWx0X3ZhbHVlID09IE5VTEwpIHsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJub3QgYSBkZWNpbWFsIik7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIFB5X0lOQ1JFRihkZWZvYmopOwotICAgICAgICAgICAgcmV0dXJuIGRlZm9iajsKKyAgICAgICAgICAgIFB5X0lOQ1JFRihkZWZhdWx0X3ZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBkZWZhdWx0X3ZhbHVlOwogICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcocmMpOwpAQCAtOTM3LDcgKzk4Myw3IEBACiAgICAgICAgICgweDJCNzQwIDw9IGNvZGUgJiYgY29kZSA8PSAweDJCODFEKTsgICAvKiBDSksgSWRlb2dyYXBoIEV4dGVuc2lvbiBEICovCiB9CiAKLS8qIG1hY3JvcyB1c2VkIHRvIGRldGVybWluZSBpZiB0aGUgZ2l2ZW4gY29kZXBvaW50IGlzIGluIHRoZSBQVUEgcmFuZ2UgdGhhdAorLyogbWFjcm9zIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZSBnaXZlbiBjb2RlIHBvaW50IGlzIGluIHRoZSBQVUEgcmFuZ2UgdGhhdAogICogd2UgYXJlIHVzaW5nIHRvIHN0b3JlIGFsaWFzZXMgYW5kIG5hbWVkIHNlcXVlbmNlcyAqLwogI2RlZmluZSBJU19BTElBUyhjcCkgKChjcCA+PSBhbGlhc2VzX3N0YXJ0KSAmJiAoY3AgPCBhbGlhc2VzX2VuZCkpCiAjZGVmaW5lIElTX05BTUVEX1NFUShjcCkgKChjcCA+PSBuYW1lZF9zZXF1ZW5jZXNfc3RhcnQpICYmIFwKQEAgLTk0Nyw3ICs5OTMsNyBAQAogX2dldHVjbmFtZShQeU9iamVjdCAqc2VsZiwgUHlfVUNTNCBjb2RlLCBjaGFyKiBidWZmZXIsIGludCBidWZsZW4sCiAgICAgICAgICAgIGludCB3aXRoX2FsaWFzX2FuZF9zZXEpCiB7Ci0gICAgLyogRmluZCB0aGUgbmFtZSBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIGNvZGVwb2ludC4KKyAgICAvKiBGaW5kIHRoZSBuYW1lIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gY29kZSBwb2ludC4KICAgICAgKiBJZiB3aXRoX2FsaWFzX2FuZF9zZXEgaXMgMSwgY2hlY2sgZm9yIG5hbWVzIGluIHRoZSBQcml2YXRlIFVzZSBBcmVhIDE1CiAgICAgICogdGhhdCB3ZSBhcmUgdXNpbmcgZm9yIGFsaWFzZXMgYW5kIG5hbWVkIHNlcXVlbmNlcy4gKi8KICAgICBpbnQgb2Zmc2V0OwpAQCAtOTU4LDcgKzEwMDQsNyBAQAogICAgIGlmIChjb2RlID49IDB4MTEwMDAwKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIC8qIFhYWCBzaG91bGQgd2UganVzdCBza2lwIGFsbCB0aGUgY29kZXBvaW50cyBpbiB0aGUgUFVBcyBoZXJlPyAqLworICAgIC8qIFhYWCBzaG91bGQgd2UganVzdCBza2lwIGFsbCB0aGUgY29kZSBwb2ludHMgaW4gdGhlIFBVQXMgaGVyZT8gKi8KICAgICBpZiAoIXdpdGhfYWxpYXNfYW5kX3NlcSAmJiAoSVNfQUxJQVMoY29kZSkgfHwgSVNfTkFNRURfU0VRKGNvZGUpKSkKICAgICAgICAgcmV0dXJuIDA7CiAKQEAgLTEwODYsOCArMTEzMiw4IEBACiAgICAgLyogY2hlY2sgaWYgbmFtZWQgc2VxdWVuY2VzIGFyZSBhbGxvd2VkICovCiAgICAgaWYgKCF3aXRoX25hbWVkX3NlcSAmJiBJU19OQU1FRF9TRVEoY3ApKQogICAgICAgICByZXR1cm4gMDsKLSAgICAvKiBpZiB0aGUgY29kZXBvaW50IGlzIGluIHRoZSBQVUEgcmFuZ2UgdGhhdCB3ZSB1c2UgZm9yIGFsaWFzZXMsCi0gICAgICogY29udmVydCBpdCB0byBvYnRhaW4gdGhlIHJpZ2h0IGNvZGVwb2ludCAqLworICAgIC8qIGlmIHRoZSBjb2RlIHBvaW50IGlzIGluIHRoZSBQVUEgcmFuZ2UgdGhhdCB3ZSB1c2UgZm9yIGFsaWFzZXMsCisgICAgICogY29udmVydCBpdCB0byBvYnRhaW4gdGhlIHJpZ2h0IGNvZGUgcG9pbnQgKi8KICAgICBpZiAoSVNfQUxJQVMoY3ApKQogICAgICAgICAqY29kZSA9IG5hbWVfYWxpYXNlc1tjcC1hbGlhc2VzX3N0YXJ0XTsKICAgICBlbHNlCkBAIC0xMDk5LDkgKzExNDUsOSBAQAogX2dldGNvZGUoUHlPYmplY3QqIHNlbGYsIGNvbnN0IGNoYXIqIG5hbWUsIGludCBuYW1lbGVuLCBQeV9VQ1M0KiBjb2RlLAogICAgICAgICAgaW50IHdpdGhfbmFtZWRfc2VxKQogewotICAgIC8qIFJldHVybiB0aGUgY29kZXBvaW50IGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKyAgICAvKiBSZXR1cm4gdGhlIGNvZGUgcG9pbnQgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBuYW1lLgogICAgICAqIE5hbWVkIGFsaWFzZXMgYXJlIHJlc29sdmVkIHRvbyAodW5sZXNzIHNlbGYgIT0gTlVMTCAoaS5lLiB3ZSBhcmUgdXNpbmcKLSAgICAgKiAzLjIuMCkpLiAgSWYgd2l0aF9uYW1lZF9zZXEgaXMgMSwgcmV0dXJucyB0aGUgUFVBIGNvZGVwb2ludCB0aGF0IHdlIGFyZQorICAgICAqIDMuMi4wKSkuICBJZiB3aXRoX25hbWVkX3NlcSBpcyAxLCByZXR1cm5zIHRoZSBQVUEgY29kZSBwb2ludCB0aGF0IHdlIGFyZQogICAgICAqIHVzaW5nIGZvciB0aGUgbmFtZWQgc2VxdWVuY2UsIGFuZCB0aGUgY2FsbGVyIG11c3QgdGhlbiBjb252ZXJ0IGl0LiAqLwogICAgIHVuc2lnbmVkIGludCBoLCB2OwogICAgIHVuc2lnbmVkIGludCBtYXNrID0gY29kZV9zaXplLTE7CkBAIC0xMjM0LDEyICsxMjgwLDE2IEBACiAgICAgUHlfVUNTNCBjb2RlOwogCiAgICAgY2hhciogbmFtZTsKLSAgICBpbnQgbmFtZWxlbjsKKyAgICBQeV9zc2l6ZV90IG5hbWVsZW47CiAgICAgdW5zaWduZWQgaW50IGluZGV4OwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyM6bG9va3VwIiwgJm5hbWUsICZuYW1lbGVuKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKG5hbWVsZW4gPiBJTlRfTUFYKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19LZXlFcnJvciwgIm5hbWUgdG9vIGxvbmciKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogCi0gICAgaWYgKCFfZ2V0Y29kZShzZWxmLCBuYW1lLCBuYW1lbGVuLCAmY29kZSwgMSkpIHsKKyAgICBpZiAoIV9nZXRjb2RlKHNlbGYsIG5hbWUsIChpbnQpbmFtZWxlbiwgJmNvZGUsIDEpKSB7CiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19LZXlFcnJvciwgInVuZGVmaW5lZCBjaGFyYWN0ZXIgbmFtZSAnJXMnIiwgbmFtZSk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KQEAgLTEyNTcsNyArMTMwNyw3IEBACiAvKiBYWFggQWRkIGRvYyBzdHJpbmdzLiAqLwogCiBzdGF0aWMgUHlNZXRob2REZWYgdW5pY29kZWRhdGFfZnVuY3Rpb25zW10gPSB7Ci0gICAgeyJkZWNpbWFsIiwgdW5pY29kZWRhdGFfZGVjaW1hbCwgTUVUSF9WQVJBUkdTLCB1bmljb2RlZGF0YV9kZWNpbWFsX19kb2NfX30sCisgICAgVU5JQ09ERURBVEFfVUNEX0RFQ0lNQUxfTUVUSE9EREVGCiAgICAgeyJkaWdpdCIsIHVuaWNvZGVkYXRhX2RpZ2l0LCBNRVRIX1ZBUkFSR1MsIHVuaWNvZGVkYXRhX2RpZ2l0X19kb2NfX30sCiAgICAgeyJudW1lcmljIiwgdW5pY29kZWRhdGFfbnVtZXJpYywgTUVUSF9WQVJBUkdTLCB1bmljb2RlZGF0YV9udW1lcmljX19kb2NfX30sCiAgICAgeyJjYXRlZ29yeSIsIHVuaWNvZGVkYXRhX2NhdGVnb3J5LCBNRVRIX1ZBUkFSR1MsCkBAIC0xMzM0LDcgKzEzODQsNiBAQAogVGhlIG1vZHVsZSB1c2VzIHRoZSBzYW1lIG5hbWVzIGFuZCBzeW1ib2xzIGFzIGRlZmluZWQgYnkgdGhlXG5cCiBVbmljb2RlRGF0YSBGaWxlIEZvcm1hdCAiIFVOSURBVEFfVkVSU0lPTiAiLiIpOwogCi0KIHN0YXRpYyBzdHJ1Y3QgUHlNb2R1bGVEZWYgdW5pY29kZWRhdGFtb2R1bGUgPSB7CiAgICAgICAgIFB5TW9kdWxlRGVmX0hFQURfSU5JVCwKICAgICAgICAgInVuaWNvZGVkYXRhIiwKZGlmZiAtLWdpdCBhL01vZHVsZXMvdW5pY29kZWRhdGFfZGIuaCBiL01vZHVsZXMvdW5pY29kZWRhdGFfZGIuaAppbmRleCA1ZDVkY2E4Li5lYzExZmExIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3VuaWNvZGVkYXRhX2RiLmgKKysrIGIvTW9kdWxlcy91bmljb2RlZGF0YV9kYi5oCkBAIC0xLDYgKzEsNiBAQAogLyogdGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQgYnkgVG9vbHMvdW5pY29kZS9tYWtldW5pY29kZWRhdGEucHkgMy4yICovCiAKLSNkZWZpbmUgVU5JREFUQV9WRVJTSU9OICI2LjEuMCIKKyNkZWZpbmUgVU5JREFUQV9WRVJTSU9OICI2LjMuMCIKIC8qIGEgbGlzdCBvZiB1bmlxdWUgZGF0YWJhc2UgcmVjb3JkcyAqLwogY29uc3QgX1B5VW5pY29kZV9EYXRhYmFzZVJlY29yZCBfUHlVbmljb2RlX0RhdGFiYXNlX1JlY29yZHNbXSA9IHsKICAgICB7MCwgMCwgMCwgMCwgMCwgMH0sCkBAIC0xMjAsNiArMTIwLDcgQEAKICAgICB7NCwgMzAsIDE0LCAwLCA1LCAwfSwKICAgICB7NCwgMzEsIDE0LCAwLCA1LCAwfSwKICAgICB7NCwgMzIsIDE0LCAwLCA1LCAwfSwKKyAgICB7MTQsIDAsIDUsIDAsIDUsIDB9LAogICAgIHsxOSwgMCwgNSwgMCwgNSwgMH0sCiAgICAgezE5LCAwLCA1LCAwLCA1LCAxMH0sCiAgICAgezE4LCAwLCA1LCAwLCA1LCAwfSwKQEAgLTEzNiw3ICsxMzcsNiBAQAogICAgIHsxOSwgMCwgNSwgMCwgNSwgMTM2fSwKICAgICB7NywgMCwgOSwgMCwgNSwgMH0sCiAgICAgezMwLCAwLCA1LCAwLCA1LCAwfSwKLSAgICB7MTQsIDAsIDUsIDAsIDUsIDB9LAogICAgIHs0LCAzNiwgMTQsIDAsIDUsIDB9LAogICAgIHs0LCAwLCAxNCwgMCwgNSwgMH0sCiAgICAgezcsIDAsIDQsIDAsIDUsIDB9LApAQCAtMTc3LDYgKzE3Nyw3IEBACiAgICAgezE5LCAwLCAxLCAwLCA1LCA4MH0sCiAgICAgezEwLCAwLCAxOCwgMCwgNSwgMH0sCiAgICAgezgsIDAsIDEsIDAsIDUsIDB9LAorICAgIHsxNCwgMCwgMTUsIDAsIDUsIDB9LAogICAgIHs1LCA5LCAxLCAwLCA1LCAwfSwKICAgICB7NCwgMSwgMTQsIDAsIDUsIDB9LAogICAgIHs0LCAyMzQsIDE0LCAwLCA1LCAwfSwKQEAgLTE5MCw3ICsxOTEsNiBAQAogICAgIHsyOSwgMCwgMTksIDAsIDUsIDE3MH0sCiAgICAgezEwLCAwLCAxOCwgMCwgNSwgMTcwfSwKICAgICB7MTAsIDAsIDE4LCAwLCA1LCAxMzZ9LAotICAgIHsxNCwgMCwgMTUsIDAsIDUsIDB9LAogICAgIHsxNCwgMCwgMSwgMCwgNSwgMH0sCiAgICAgezE0LCAwLCA0LCAwLCA1LCAwfSwKICAgICB7MjEsIDAsIDE5LCAwLCA0LCAwfSwKQEAgLTIxMyw2ICsyMTMsMTAgQEAKICAgICB7MjYsIDAsIDExLCAwLCA1LCAxMzZ9LAogICAgIHsyMCwgMCwgMTksIDAsIDUsIDB9LAogICAgIHsyNywgMCwgMTMsIDAsIDUsIDB9LAorICAgIHsxNCwgMCwgMjAsIDAsIDUsIDB9LAorICAgIHsxNCwgMCwgMjEsIDAsIDUsIDB9LAorICAgIHsxNCwgMCwgMjIsIDAsIDUsIDB9LAorICAgIHsxNCwgMCwgMjMsIDAsIDUsIDB9LAogICAgIHs5LCAwLCA5LCAwLCA1LCAxMzZ9LAogICAgIHsyNywgMCwgMTAsIDAsIDUsIDEzNn0sCiAgICAgezI3LCAwLCAxOSwgMCwgNSwgMTM2fSwKQEAgLTYzOCw2ICs2NDIsMTAgQEAKICAgICAiUyIsCiAgICAgIldTIiwKICAgICAiT04iLAorICAgICJMUkkiLAorICAgICJSTEkiLAorICAgICJGU0kiLAorICAgICJQREkiLAogICAgIE5VTEwKIH07CiBjb25zdCBjaGFyICpfUHlVbmljb2RlX0Vhc3RBc2lhbldpZHRoTmFtZXNbXSA9IHsKQEAgLTEyNzMsMzUgKzEyODEsMzUgQEAKICAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAwLCAwLCAwLCAwLCAKICAgICAwLCAxMDcsIDEwNywgMTA3LCAxMDQsIDEwNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTA4LCAxMDgsIAogICAgIDEwOCwgMTA4LCAxMDgsIDAsIDc4LCA3OCwgMTA5LCAxMTAsIDExMCwgMTExLCAxMTIsIDExMywgMjYsIDI2LCA4MSwgODEsIAotICAgIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDExNCwgMTE1LCAxMTYsIDExMywgMCwgMCwgMTEzLCAxMTMsIDExNywgMTE3LCAKLSAgICAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgCi0gICAgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIAotICAgIDExNywgMTE3LCAxMTksIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTIwLCAKLSAgICAxMjEsIDEyMiwgMTE0LCAxMTUsIDExNiwgMTIzLCAxMjQsIDEyNSwgMTI1LCAxMjYsIDg2LCA4MSwgODEsIDgxLCA4MSwgODEsIAotICAgIDg2LCA4MSwgODEsIDg2LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDExMCwgCi0gICAgMTI4LCAxMjgsIDExMywgMTE3LCAxMTcsIDEyOSwgMTE3LCAxMTcsIDExNywgMTE3LCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAKLSAgICAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgCi0gICAgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIAotICAgIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAKLSAgICAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgCi0gICAgMTE3LCAxMTgsIDExNywgMTE4LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIAotICAgIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExOCwgMTEzLCAxMTcsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCAKLSAgICAxMDgsIDI2LCA4MSwgODEsIDgxLCA4MSwgODYsIDgxLCAxMTksIDExOSwgODEsIDgxLCAyNiwgODYsIDgxLCA4MSwgODYsIAotICAgIDExNywgMTE3LCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDExNywgMTE3LCAKLSAgICAxMTcsIDEzMiwgMTMyLCAxMTcsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgCi0gICAgMTEzLCAxMTMsIDExMywgMTEzLCAwLCAxMzMsIDExNywgMTM0LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIAotICAgIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAKLSAgICAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCA4MSwgODYsIDgxLCA4MSwgODYsIDgxLCA4MSwgCisgICAgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgMTE0LCAxMTUsIDExNiwgMTEzLCAxMTcsIDAsIDExMywgMTEzLCAxMTgsIDExOCwgCisgICAgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIAorICAgIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAKKyAgICAxMTgsIDExOCwgMTIwLCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDEyMSwgCisgICAgMTIyLCAxMjMsIDExNCwgMTE1LCAxMTYsIDEyNCwgMTI1LCAxMjYsIDEyNiwgMTI3LCA4NiwgODEsIDgxLCA4MSwgODEsIDgxLCAKKyAgICA4NiwgODEsIDgxLCA4NiwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMTAsIAorICAgIDEyOSwgMTI5LCAxMTMsIDExOCwgMTE4LCAxMzAsIDExOCwgMTE4LCAxMTgsIDExOCwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgCisgICAgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIAorICAgIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAKKyAgICAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgCisgICAgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIAorICAgIDExOCwgMTE5LCAxMTgsIDExOSwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAKKyAgICAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTksIDExMywgMTE4LCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgCisgICAgMTA4LCAyNiwgODEsIDgxLCA4MSwgODEsIDg2LCA4MSwgMTIwLCAxMjAsIDgxLCA4MSwgMjYsIDg2LCA4MSwgODEsIDg2LCAKKyAgICAxMTgsIDExOCwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMTgsIDExOCwgCisgICAgMTE4LCAxMzMsIDEzMywgMTE4LCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIAorICAgIDExMywgMTEzLCAxMTMsIDExMywgMCwgMTE3LCAxMTgsIDEzNCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAKKyAgICAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgCisgICAgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgODEsIDg2LCA4MSwgODEsIDg2LCA4MSwgODEsIAogICAgIDg2LCA4NiwgODYsIDgxLCA4NiwgODYsIDgxLCA4NiwgODEsIDgxLCA4MSwgODYsIDgxLCA4NiwgODEsIDg2LCA4MSwgODYsIAotICAgIDgxLCA4MSwgMCwgMCwgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgCi0gICAgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIAotICAgIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAKLSAgICAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgCi0gICAgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIAotICAgIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAKLSAgICAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgCi0gICAgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMTcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzNiwgCisgICAgODEsIDgxLCAwLCAwLCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAKKyAgICAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgCisgICAgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIAorICAgIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAKKyAgICAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgCisgICAgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIAorICAgIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAKKyAgICAxMzUsIDEzNSwgMTM1LCAxMzUsIDExOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTM2LCAKICAgICAxMzYsIDEzNiwgMTM2LCAxMzYsIDEzNiwgMTM2LCAxMzYsIDEzNiwgMTM2LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCiAgICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAogICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCA4MSwgCkBAIC0xMzE0LDExICsxMzIyLDExIEBACiAgICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgODYsIDg2LCA4NiwgCiAgICAgMCwgMCwgMTA0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTcsIDAsIDExNywgCi0gICAgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTgsIDAsIDExOCwgCisgICAgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4MSwgCi0gICAgODEsIDg2LCA4MSwgODEsIDg2LCA4MSwgODEsIDgxLCA4NiwgODYsIDg2LCAxMjAsIDEyMSwgMTIyLCA4MSwgODEsIDgxLCAKKyAgICA4MSwgODYsIDgxLCA4MSwgODYsIDgxLCA4MSwgODEsIDg2LCA4NiwgODYsIDEyMSwgMTIyLCAxMjMsIDgxLCA4MSwgODEsIAogICAgIDg2LCA4MSwgODEsIDg2LCA4NiwgODEsIDgxLCA4MSwgODEsIDAsIDEzNSwgMTM1LCAxMzUsIDEzOSwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDE0MCwgNDgsIApAQCAtMTQ0NCw0MSArMTQ1Miw0MCBAQAogICAgIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAKICAgICAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgCi0gICAgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKKyAgICAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCAwLCA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDQ4LCAwLCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCA0OCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCA0OCwgMCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgNDgsIDAsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCAKLSAgICA4MSwgODEsIDgxLCA4MywgODMsIDgzLCA4MywgODMsIDgzLCA4MywgODMsIDgzLCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgCi0gICAgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIAotICAgIDE0OCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgODEsIDgxLCAKKyAgICA4MSwgODMsIDgzLCA4MywgODMsIDgzLCA4MywgODMsIDgzLCA4MywgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgCisgICAgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDAsIAorICAgIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgODQsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4NCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIApAQCAtMTQ5OCwxNSArMTUwNSwxNiBAQAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgODMsIDgzLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDE3MiwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxNjMsIDE2NCwgMCwgCi0gICAgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA4MywgODMsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgMTcyLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDE2MywgMTY0LCAwLCAwLCAwLCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgODMsIDgzLCA4MywgMTczLCAxNzMsIDE3MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA4MywgODMsIDgzLCAxNzMsIDE3MywgMTczLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDEzNSwgMTM1LCAxNDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDEzNSwgMTM1LCAKICAgICAxNDIsIDgzLCA4MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKQEAgLTE1MjEsNyArMTUyOSw3IEBACiAgICAgODMsIDUzLCA4MywgODMsIDgzLCA4NSwgNDgsIDgxLCAwLCAwLCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIAogICAgIDE0NCwgMTQ0LCAxNDQsIDAsIDAsIDAsIDAsIDAsIDAsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAKICAgICAxNTMsIDE1MywgMCwgMCwgMCwgMCwgMCwgMCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgODQsIDEzOCwgMTM4LCAKLSAgICAxMzgsIDEzOCwgMTM1LCAxMzUsIDEzNSwgMTcyLCAwLCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgCisgICAgMTM4LCAxMzgsIDEzNSwgMTM1LCAxMzUsIDE3NCwgMCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIAogICAgIDE0NCwgMTQ0LCAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDUzLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIApAQCAtMTU1MCw3ICsxNTU4LDcgQEAKICAgICAwLCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCiAgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA4MSwgODYsIDEzOSwgMTM5LCAxMzksIDAsIDAsIDgzLCA4MywgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgODEsIDg2LCAxMzksIDEzOSwgMTM1LCAwLCAwLCA4MywgODMsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTM5LCAxMzUsIDEzOSwgMTM1LCAKQEAgLTE1NjYsMTcgKzE1NzQsMTcgQEAKICAgICAxNDAsIDQ4LCAxNDAsIDQ4LCAxNDAsIDQ4LCAxNDAsIDQ4LCA0OCwgNDgsIDE0MCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTQ1LCAxNDYsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAKLSAgICAxNDcsIDEzNSwgMTQ3LCAxMzksIDEzOSwgMTQ3LCAxNDcsIDEzNSwgMTQ3LCAxNzQsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDE0NywgMTM1LCAxNDcsIDEzOSwgMTM5LCAxNDcsIDE0NywgMTM1LCAxNDcsIDE3NSwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDAsIDAsIDAsIDAsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgODMsIDgzLCAKICAgICA4MywgODMsIDgzLCA4MywgODMsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MSwgODYsIDgxLCAKICAgICA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAwLCAwLCAwLCAxMzUsIAogICAgIDEzNSwgMTM5LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxMzksIDEzNSwgMTM1LCAKLSAgICAxMzUsIDEzNSwgMTM5LCAxMzksIDEzNSwgMTM1LCAxNzQsIDE0MiwgMTM5LCAxMzksIDQ4LCA0OCwgMTQ0LCAxNDQsIDE0NCwgCisgICAgMTM1LCAxMzUsIDEzOSwgMTM5LCAxMzUsIDEzNSwgMTc1LCAxNDIsIDEzOSwgMTM5LCA0OCwgNDgsIDE0NCwgMTQ0LCAxNDQsIAogICAgIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxNDUsIAotICAgIDEzOSwgMTM1LCAxMzUsIDEzOSwgMTM5LCAxMzksIDEzNSwgMTM5LCAxMzUsIDEzNSwgMTM1LCAxNzQsIDE3NCwgMCwgMCwgMCwgCisgICAgMTM5LCAxMzUsIDEzNSwgMTM5LCAxMzksIDEzOSwgMTM1LCAxMzksIDEzNSwgMTM1LCAxMzUsIDE3NSwgMTc1LCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCA4MywgODMsIDgzLCA4MywgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIApAQCAtMTU4OCw4ICsxNTk2LDggQEAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4MywgODMsIDgzLCA4MywgODMsIDgzLCAKLSAgICA4MywgODMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgxLCA4MSwgODEsIDgzLCAxNzUsIDg2LCA4NiwgODYsIDg2LCA4NiwgCi0gICAgODEsIDgxLCA4NiwgODYsIDg2LCA4NiwgODEsIDEzOSwgMTc1LCAxNzUsIDE3NSwgMTc1LCAxNzUsIDE3NSwgMTc1LCA0OCwgCisgICAgODMsIDgzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4MSwgODEsIDgxLCA4MywgMTc2LCA4NiwgODYsIDg2LCA4NiwgODYsIAorICAgIDgxLCA4MSwgODYsIDg2LCA4NiwgODYsIDgxLCAxMzksIDE3NiwgMTc2LCAxNzYsIDE3NiwgMTc2LCAxNzYsIDE3NiwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDg2LCA0OCwgNDgsIDQ4LCA0OCwgMTM5LCAxMzksIDgxLCA0OCwgNDgsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKICAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKQEAgLTE2MDIsOSArMTYxMCw5IEBACiAgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDUxLCA1MSwgNTEsIDUxLCA1MSwgCiAgICAgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgCiAgICAgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA4MSwgODEsIDg2LCA4MSwgCi0gICAgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODYsIDgxLCA4MSwgMTc2LCAxNzcsIDg2LCAxNzgsIDgxLCA4MSwgODEsIDgxLCAKKyAgICA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4NiwgODEsIDgxLCAxNzcsIDE3OCwgODYsIDE3OSwgODEsIDgxLCA4MSwgODEsIAogICAgIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE3OSwgODYsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE4MCwgODYsIAogICAgIDgxLCA4NiwgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIAogICAgIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIAogICAgIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIApAQCAtMTYxMyw3ICsxNjIxLDcgQEAKICAgICAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAKICAgICAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAKICAgICAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAKLSAgICAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDQzLCA0MywgNDMsIDQzLCAzNSwgMTgwLCA0NywgNDcsIDQ0LCA0NywgCisgICAgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCA0MywgNDMsIDQzLCA0MywgMzUsIDE4MSwgNDcsIDQ3LCA0NCwgNDcsIAogICAgIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIAogICAgIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIAogICAgIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIApAQCAtMTYyNSw2NSArMTYzMyw2NSBAQAogICAgIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCAzOCwgMzgsIDM4LCAzOCwgMzgsIDM4LCAzOCwgMzgsIDQzLCA0MywgNDMsIAogICAgIDQzLCA0MywgNDMsIDAsIDAsIDM4LCAzOCwgMzgsIDM4LCAzOCwgMzgsIDAsIDAsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIAogICAgIDQzLCA0MywgMCwgMzgsIDAsIDM4LCAwLCAzOCwgMCwgMzgsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgMzgsIAotICAgIDM4LCAzOCwgMzgsIDM4LCAzOCwgMzgsIDM4LCA0MywgMTgxLCA0MywgMTgxLCA0MywgMTgxLCA0MywgMTgxLCA0MywgMTgxLCAKLSAgICA0MywgMTgxLCA0MywgMTgxLCAwLCAwLCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDE4MiwgMTgyLCAxODIsIAotICAgIDE4MiwgMTgyLCAxODIsIDE4MiwgMTgyLCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDE4MiwgMTgyLCAxODIsIAotICAgIDE4MiwgMTgyLCAxODIsIDE4MiwgMTgyLCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDE4MiwgMTgyLCAxODIsIAotICAgIDE4MiwgMTgyLCAxODIsIDE4MiwgMTgyLCA0MywgNDMsIDQzLCA0MywgNDMsIDAsIDQzLCA0MywgMzgsIDM4LCAzOCwgMTgzLCAKLSAgICAxODIsIDU4LCAxODEsIDU4LCA1OCwgNzYsIDQzLCA0MywgNDMsIDAsIDQzLCA0MywgMzgsIDE4MywgMzgsIDE4MywgMTgyLCAKLSAgICA3NiwgNzYsIDc2LCA0MywgNDMsIDQzLCAxODEsIDAsIDAsIDQzLCA0MywgMzgsIDM4LCAzOCwgMTgzLCAwLCA3NiwgNzYsIAotICAgIDc2LCA0MywgNDMsIDQzLCAxODEsIDQzLCA0MywgNDMsIDQzLCAzOCwgMzgsIDM4LCAxODMsIDM4LCA3NiwgMTg0LCAxODQsIAotICAgIDAsIDAsIDQzLCA0MywgNDMsIDAsIDQzLCA0MywgMzgsIDE4MywgMzgsIDE4MywgMTgyLCAxODQsIDU4LCAwLCAxODUsIDE4NSwgCi0gICAgMTg2LCAxODYsIDE4NiwgMTg2LCAxODYsIDE4NiwgMTg2LCAxODYsIDE4NiwgMTg3LCAxODcsIDE4NywgMTg4LCAxODksIAorICAgIDM4LCAzOCwgMzgsIDM4LCAzOCwgMzgsIDM4LCA0MywgMTgyLCA0MywgMTgyLCA0MywgMTgyLCA0MywgMTgyLCA0MywgMTgyLCAKKyAgICA0MywgMTgyLCA0MywgMTgyLCAwLCAwLCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDE4MywgMTgzLCAxODMsIAorICAgIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDE4MywgMTgzLCAxODMsIAorICAgIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDE4MywgMTgzLCAxODMsIAorICAgIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCA0MywgNDMsIDQzLCA0MywgNDMsIDAsIDQzLCA0MywgMzgsIDM4LCAzOCwgMTg0LCAKKyAgICAxODMsIDU4LCAxODIsIDU4LCA1OCwgNzYsIDQzLCA0MywgNDMsIDAsIDQzLCA0MywgMzgsIDE4NCwgMzgsIDE4NCwgMTgzLCAKKyAgICA3NiwgNzYsIDc2LCA0MywgNDMsIDQzLCAxODIsIDAsIDAsIDQzLCA0MywgMzgsIDM4LCAzOCwgMTg0LCAwLCA3NiwgNzYsIAorICAgIDc2LCA0MywgNDMsIDQzLCAxODIsIDQzLCA0MywgNDMsIDQzLCAzOCwgMzgsIDM4LCAxODQsIDM4LCA3NiwgMTg1LCAxODUsIAorICAgIDAsIDAsIDQzLCA0MywgNDMsIDAsIDQzLCA0MywgMzgsIDE4NCwgMzgsIDE4NCwgMTgzLCAxODUsIDU4LCAwLCAxODYsIDE4NiwgCisgICAgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTc0LCAxNzQsIDE3NCwgMTg4LCAxODksIAogICAgIDE5MCwgMTkxLCA4NCwgMTkwLCAxOTAsIDE5MCwgMjIsIDE5MiwgMTkzLCAxOTQsIDE5NSwgMTk2LCAxOTMsIDE5NCwgMTk1LCAKICAgICAxOTYsIDIyLCAyMiwgMjIsIDEzOCwgMTk3LCAxOTcsIDE5NywgMjIsIDE5OCwgMTk5LCAyMDAsIDIwMSwgMjAyLCAyMDMsIAogICAgIDIwNCwgMjEsIDIwNSwgMTEwLCAyMDUsIDIwNiwgMjA3LCAyMiwgMTkyLCAxOTIsIDEzOCwgMjgsIDM2LCAyMiwgMTkyLCAKICAgICAxMzgsIDE5NywgMjA4LCAyMDgsIDEzOCwgMTM4LCAxMzgsIDIwOSwgMTYzLCAxNjQsIDE5MiwgMTkyLCAxOTIsIDEzOCwgCiAgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCA3OCwgMTM4LCAyMDgsIDEzOCwgMTM4LCAxOTIsIDEzOCwgMTM4LCAKLSAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTg2LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMCwgMCwgMCwgMCwgMCwgCi0gICAgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMjEwLCA1MSwgMCwgMCwgMzQsIDIxMCwgMjEwLCAyMTAsIDIxMCwgMjEwLCAKLSAgICAyMTEsIDIxMSwgMjEyLCAyMTMsIDIxNCwgMjE1LCAyMTAsIDM0LCAzNCwgMzQsIDM0LCAyMTAsIDIxMCwgMjEwLCAyMTAsIAotICAgIDIxMCwgMjExLCAyMTEsIDIxMiwgMjEzLCAyMTQsIDAsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCAKLSAgICA1MSwgNTEsIDUxLCAwLCAwLCAwLCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDIxNiwgMjE3LCA4NSwgODUsIAotICAgIDIzLCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODEsIDgxLCAxNzUsIDE3NSwgODEsIDgxLCAKLSAgICA4MSwgODEsIDE3NSwgMTc1LCAxNzUsIDgxLCA4MSwgODIsIDgyLCA4MiwgODIsIDgxLCA4MiwgODIsIDgyLCAxNzUsIDE3NSwgCi0gICAgODEsIDg2LCA4MSwgMTc1LCAxNzUsIDg2LCA4NiwgODYsIDg2LCA4MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMjE4LCAyMTgsIDQ5LCAyMTksIDI2LCAyMTksIDIxOCwgNDksIDI2LCAyMTksIDM1LCA0OSwgNDksIAotICAgIDQ5LCAzNSwgMzUsIDQ5LCA0OSwgNDksIDQ2LCAyNiwgNDksIDIxOSwgMjYsIDc4LCA0OSwgNDksIDQ5LCA0OSwgNDksIDI2LCAKLSAgICAyNiwgMjE4LCAyMTksIDIxOSwgMjYsIDQ5LCAyNiwgMjIwLCAyNiwgNDksIDI2LCAxODMsIDIyMCwgNDksIDQ5LCAyMjEsIAotICAgIDM1LCA0OSwgNDksIDQ0LCA0OSwgMzUsIDE1NiwgMTU2LCAxNTYsIDE1NiwgMzUsIDI2LCAyMTgsIDM1LCAzNSwgNDksIDQ5LCAKLSAgICAyMjIsIDc4LCA3OCwgNzgsIDc4LCA0OSwgMzUsIDM1LCAzNSwgMzUsIDI2LCA3OCwgMjYsIDI2LCA0NywgODAsIDIyMywgCi0gICAgMjIzLCAyMjMsIDM3LCAzNywgMjIzLCAyMjMsIDIyMywgMjIzLCAyMjMsIDIyMywgMzcsIDM3LCAzNywgMzcsIDIyMywgMjI0LCAKLSAgICAyMjQsIDIyNCwgMjI0LCAyMjQsIDIyNCwgMjI0LCAyMjQsIDIyNCwgMjI0LCAyMjQsIDIyNCwgMjI1LCAyMjUsIDIyNSwgCi0gICAgMjI1LCAyMjQsIDIyNCwgMjI0LCAyMjQsIDIyNCwgMjI0LCAyMjQsIDIyNCwgMjI0LCAyMjQsIDIyNSwgMjI1LCAyMjUsIAotICAgIDIyNSwgMjI1LCAyMjUsIDE3MywgMTczLCAxNzMsIDQ0LCA0NywgMTczLCAxNzMsIDE3MywgMTczLCAzNywgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDIyNiwgMjI2LCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgNzgsIDI2LCAyNiwgNzgsIDI2LCAyNiwgNzgsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyMjYsIDI2LCAyNiwgMjYsIAorICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxODcsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAwLCAyMTAsIDIxMSwgMjEyLCAKKyAgICAyMTMsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDIxNCwgNTEsIDAsIDAsIDM0LCAyMTQsIDIxNCwgMjE0LCAyMTQsIAorICAgIDIxNCwgMjE1LCAyMTUsIDIxNiwgMjE3LCAyMTgsIDIxOSwgMjE0LCAzNCwgMzQsIDM0LCAzNCwgMjE0LCAyMTQsIDIxNCwgCisgICAgMjE0LCAyMTQsIDIxNSwgMjE1LCAyMTYsIDIxNywgMjE4LCAwLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCAKKyAgICA1MSwgNTEsIDUxLCA1MSwgMCwgMCwgMCwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCAyMjAsIDIyMSwgODUsIAorICAgIDg1LCAyMywgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4MSwgODEsIDE3NiwgMTc2LCAKKyAgICA4MSwgODEsIDgxLCA4MSwgMTc2LCAxNzYsIDE3NiwgODEsIDgxLCA4MiwgODIsIDgyLCA4MiwgODEsIDgyLCA4MiwgODIsIAorICAgIDE3NiwgMTc2LCA4MSwgODYsIDgxLCAxNzYsIDE3NiwgODYsIDg2LCA4NiwgODYsIDgxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMjIsIDIyMiwgNDksIDIyMywgMjYsIDIyMywgMjIyLCA0OSwgMjYsIDIyMywgMzUsIAorICAgIDQ5LCA0OSwgNDksIDM1LCAzNSwgNDksIDQ5LCA0OSwgNDYsIDI2LCA0OSwgMjIzLCAyNiwgNzgsIDQ5LCA0OSwgNDksIDQ5LCAKKyAgICA0OSwgMjYsIDI2LCAyMjIsIDIyMywgMjIzLCAyNiwgNDksIDI2LCAyMjQsIDI2LCA0OSwgMjYsIDE4NCwgMjI0LCA0OSwgNDksIAorICAgIDIyNSwgMzUsIDQ5LCA0OSwgNDQsIDQ5LCAzNSwgMTU2LCAxNTYsIDE1NiwgMTU2LCAzNSwgMjYsIDIyMiwgMzUsIDM1LCA0OSwgCisgICAgNDksIDIyNiwgNzgsIDc4LCA3OCwgNzgsIDQ5LCAzNSwgMzUsIDM1LCAzNSwgMjYsIDc4LCAyNiwgMjYsIDQ3LCA4MCwgMjI3LCAKKyAgICAyMjcsIDIyNywgMzcsIDM3LCAyMjcsIDIyNywgMjI3LCAyMjcsIDIyNywgMjI3LCAzNywgMzcsIDM3LCAzNywgMjI3LCAyMjgsIAorICAgIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjksIDIyOSwgMjI5LCAKKyAgICAyMjksIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI5LCAyMjksIDIyOSwgCisgICAgMjI5LCAyMjksIDIyOSwgMTczLCAxNzMsIDE3MywgNDQsIDQ3LCAxNzMsIDE3MywgMTczLCAxNzMsIDM3LCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMjMwLCAyMzAsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICA3OCwgMjYsIDI2LCA3OCwgMjYsIDI2LCA3OCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDIzMCwgMjYsIDI2LCAyNiwgCiAgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMzAsIDMwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjI3LCAyMjYsIDIyNiwgMjYsIDI2LCA0MCwgMjYsIDQwLCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyMzEsIDIzMCwgMjMwLCAyNiwgMjYsIDQwLCAyNiwgNDAsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDMwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCA3OCwgNzgsIDc4LCA3OCwgNzgsIAotICAgIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA0MCwgMjI4LCAyMjksIDIyOSwgMjMwLCA3OCwgNzgsIDQwLCAyMjksIDIzMCwgCi0gICAgMjI4LCAyMjksIDIzMCwgMjI4LCA3OCwgNDAsIDc4LCAyMjksIDIzMSwgMjMyLCA3OCwgMjI5LCAyMjgsIDc4LCA3OCwgNzgsIAotICAgIDIyOSwgMjI4LCAyMjgsIDIyOSwgNDAsIDIyOSwgMjI5LCAyMjgsIDIyOCwgNDAsIDIzMCwgNDAsIDIzMCwgNDAsIDQwLCA0MCwgCi0gICAgNDAsIDIyOSwgMjMzLCAyMjIsIDIyOSwgMjIyLCAyMjIsIDIyOCwgMjI4LCAyMjgsIDQwLCA0MCwgNDAsIDQwLCA3OCwgMjI4LCAKLSAgICA3OCwgMjI4LCAyMjksIDIyOSwgMjI4LCAyMjgsIDIyOCwgMjMwLCAyMjgsIDIyOCwgMjMwLCAyMjgsIDIyOCwgMjMwLCAyMjksIAotICAgIDIzMCwgMjI4LCAyMjgsIDIyOSwgNzgsIDc4LCA3OCwgNzgsIDc4LCAyMjksIDIyOCwgMjI4LCAyMjgsIDc4LCA3OCwgNzgsIAotICAgIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDIyOCwgMjM0LCA0MCwgMjMwLCA3OCwgMjI5LCAyMjksIDIyOSwgMjI5LCAyMjgsIAotICAgIDIyOCwgMjI5LCAyMjksIDc4LCAyMjYsIDIzNCwgMjM0LCAyMzAsIDIzMCwgMjI4LCAyMjgsIDIzMCwgMjMwLCAyMjgsIDIyOCwgCi0gICAgMjMwLCAyMzAsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIzMCwgMjMwLCAyMjksIDIyOSwgMjMwLCAyMzAsIAotICAgIDIyOSwgMjI5LCAyMzAsIDIzMCwgMjI4LCAyMjgsIDIyOCwgNzgsIDc4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDc4LCA3OCwgCi0gICAgNDAsIDc4LCA3OCwgMjI4LCA0MCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCAyMjgsIDIyOCwgNzgsIDQwLCAKLSAgICAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMzAsIDIzMCwgMjMwLCAyMzAsIDIyOCwgMjI4LCAyMjgsIDIyOCwgCi0gICAgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgMjI4LCAyMjksIDc4LCA3OCwgNzgsIDc4LCAKLSAgICA3OCwgNzgsIDc4LCA3OCwgNzgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCA3OCwgNzgsIDIyOCwgMjI4LCA3OCwgNzgsIAotICAgIDc4LCA3OCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMzAsIDIzMCwgMjMwLCAKLSAgICAyMzAsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIzMCwgMjMwLCAyMzAsIDIzMCwgNzgsIDc4LCAyMjgsIDIyOCwgCi0gICAgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAzMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDIyOCwgMjI4LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjM1LCAyMzYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDQwLCAyMzIsIDIzMywgMjMzLCAyMzQsIDc4LCA3OCwgNDAsIDIzMywgMjM0LCAKKyAgICAyMzIsIDIzMywgMjM0LCAyMzIsIDc4LCA0MCwgNzgsIDIzMywgMjM1LCAyMzYsIDc4LCAyMzMsIDIzMiwgNzgsIDc4LCA3OCwgCisgICAgMjMzLCAyMzIsIDIzMiwgMjMzLCA0MCwgMjMzLCAyMzMsIDIzMiwgMjMyLCA0MCwgMjM0LCA0MCwgMjM0LCA0MCwgNDAsIDQwLCAKKyAgICA0MCwgMjMzLCAyMzcsIDIyNiwgMjMzLCAyMjYsIDIyNiwgMjMyLCAyMzIsIDIzMiwgNDAsIDQwLCA0MCwgNDAsIDc4LCAyMzIsIAorICAgIDc4LCAyMzIsIDIzMywgMjMzLCAyMzIsIDIzMiwgMjMyLCAyMzQsIDIzMiwgMjMyLCAyMzQsIDIzMiwgMjMyLCAyMzQsIDIzMywgCisgICAgMjM0LCAyMzIsIDIzMiwgMjMzLCA3OCwgNzgsIDc4LCA3OCwgNzgsIDIzMywgMjMyLCAyMzIsIDIzMiwgNzgsIDc4LCA3OCwgCisgICAgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgMjMyLCAyMzgsIDQwLCAyMzQsIDc4LCAyMzMsIDIzMywgMjMzLCAyMzMsIDIzMiwgCisgICAgMjMyLCAyMzMsIDIzMywgNzgsIDIzMCwgMjM4LCAyMzgsIDIzNCwgMjM0LCAyMzIsIDIzMiwgMjM0LCAyMzQsIDIzMiwgMjMyLCAKKyAgICAyMzQsIDIzNCwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjM0LCAyMzQsIDIzMywgMjMzLCAyMzQsIDIzNCwgCisgICAgMjMzLCAyMzMsIDIzNCwgMjM0LCAyMzIsIDIzMiwgMjMyLCA3OCwgNzgsIDIzMiwgMjMyLCAyMzIsIDIzMiwgNzgsIDc4LCAKKyAgICA0MCwgNzgsIDc4LCAyMzIsIDQwLCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDIzMiwgMjMyLCA3OCwgNDAsIAorICAgIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzNCwgMjM0LCAyMzQsIDIzNCwgMjMyLCAyMzIsIDIzMiwgMjMyLCAKKyAgICAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgNzgsIDc4LCA3OCwgNzgsIDc4LCAyMzIsIDIzMywgNzgsIDc4LCA3OCwgNzgsIAorICAgIDc4LCA3OCwgNzgsIDc4LCA3OCwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDc4LCA3OCwgMjMyLCAyMzIsIDc4LCA3OCwgCisgICAgNzgsIDc4LCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzNCwgMjM0LCAyMzQsIAorICAgIDIzNCwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjM0LCAyMzQsIDIzNCwgMjM0LCA3OCwgNzgsIDIzMiwgMjMyLCAKKyAgICAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAxNjMsIDE2NCwgMTYzLCAxNjQsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDMwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjMyLCAyMzIsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyMzksIDI0MCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKICAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKICAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKQEAgLTE3MDMsMTQgKzE3MTEsMTQgQEAKICAgICAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAKICAgICAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM0LCAKICAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKLSAgICAzNCwgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIAotICAgIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAKLSAgICAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgCi0gICAgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIAotICAgIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAKLSAgICAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjIzLCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgCi0gICAgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIAotICAgIDIzOCwgMjM4LCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgCisgICAgMzQsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAKKyAgICAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgCisgICAgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIAorICAgIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAKKyAgICAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgCisgICAgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDIyNywgMjQyLCAyNDIsIDI0MiwgMjQyLCAyNDIsIAorICAgIDI0MiwgMjQyLCAyNDIsIDI0MiwgMjQyLCAyNDIsIDI0MiwgMjQyLCAyNDIsIDI0MiwgMjQyLCAyNDIsIDI0MiwgMjQyLCAKKyAgICAyNDIsIDI0MiwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIAogICAgIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIAogICAgIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIAogICAgIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIApAQCAtMTc0NSwxNCArMTc1MywxNCBAQAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAzMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDE2MywgMTY0LCAxNjMsIDE2NCwgMTYzLCAxNjQsIDE2MywgMTY0LCAxNjMsIDE2NCwgCi0gICAgMTYzLCAxNjQsIDE2MywgMTY0LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIAorICAgIDE2MywgMTY0LCAxNjMsIDE2NCwgMjQyLCAyNDIsIDI0MiwgMjQyLCAyNDIsIDI0MiwgMjQyLCAyNDIsIDI0MiwgMjQyLCAKICAgICAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgCiAgICAgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyMjgsIDc4LCA3OCwgCi0gICAgMjI4LCAyMjgsIDE2MywgMTY0LCA3OCwgMjI4LCAyMjgsIDc4LCAyMjgsIDIyOCwgMjI4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIAotICAgIDIyOCwgMjI4LCAyMjgsIDIyOCwgNzgsIDc4LCA3OCwgNzgsIDc4LCAyMjgsIDIyOCwgMjI4LCA3OCwgNzgsIDc4LCAyMjgsIAotICAgIDIyOCwgMjI4LCAyMjgsIDksIDEwLCA5LCAxMCwgOSwgMTAsIDksIDEwLCAxNjMsIDE2NCwgNzgsIDc4LCA3OCwgNzgsIDc4LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyMzIsIDc4LCA3OCwgCisgICAgMjMyLCAyMzIsIDE2MywgMTY0LCA3OCwgMjMyLCAyMzIsIDc4LCAyMzIsIDIzMiwgMjMyLCA3OCwgNzgsIDc4LCA3OCwgNzgsIAorICAgIDIzMiwgMjMyLCAyMzIsIDIzMiwgNzgsIDc4LCA3OCwgNzgsIDc4LCAyMzIsIDIzMiwgMjMyLCA3OCwgNzgsIDc4LCAyMzIsIAorICAgIDIzMiwgMjMyLCAyMzIsIDksIDEwLCA5LCAxMCwgOSwgMTAsIDksIDEwLCAxNjMsIDE2NCwgNzgsIDc4LCA3OCwgNzgsIDc4LCAKICAgICA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKICAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKICAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKQEAgLTE3NjksMzAgKzE3NzcsMzAgQEAKICAgICA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCAKICAgICA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCAKICAgICAxNjMsIDE2NCwgOSwgMTAsIDE2MywgMTY0LCAxNjMsIDE2NCwgMTYzLCAxNjQsIDE2MywgMTY0LCAxNjMsIDE2NCwgMTYzLCAKLSAgICAxNjQsIDE2MywgMTY0LCAxNjMsIDE2NCwgMTYzLCAxNjQsIDc4LCA3OCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgCi0gICAgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIAotICAgIDIyOCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCAyMjgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCAKLSAgICAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCA3OCwgNzgsIDc4LCAyMjgsIDc4LCA3OCwgNzgsIDc4LCAyMjgsIDIyOCwgCi0gICAgMjI4LCAyMjgsIDIyOCwgNzgsIDIyOCwgMjI4LCA3OCwgNzgsIDE2MywgMTY0LCAxNjMsIDE2NCwgMjI4LCA3OCwgNzgsIDc4LCAKLSAgICA3OCwgMjI4LCA3OCwgMjI4LCAyMjgsIDIyOCwgNzgsIDc4LCAyMjgsIDIyOCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIAotICAgIDc4LCA3OCwgNzgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDc4LCA3OCwgMTYzLCAxNjQsIDc4LCA3OCwgNzgsIAotICAgIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDIyOCwgMjI4LCAyMjIsIDIyOCwgMjI4LCAyMjgsIDIyOCwgCi0gICAgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgNzgsIDIyOCwgMjI4LCAKLSAgICAyMjgsIDIyOCwgNzgsIDc4LCAyMjgsIDc4LCAyMjgsIDc4LCA3OCwgMjI4LCA3OCwgMjI4LCAyMjgsIDIyOCwgMjI4LCA3OCwgCi0gICAgNzgsIDc4LCA3OCwgNzgsIDIyOCwgMjI4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCAyMjgsIDIyOCwgMjI4LCA3OCwgNzgsIAorICAgIDE2NCwgMTYzLCAxNjQsIDE2MywgMTY0LCAxNjMsIDE2NCwgNzgsIDc4LCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAKKyAgICAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgCisgICAgMjMyLCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDIzMiwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIAorICAgIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDc4LCA3OCwgNzgsIDIzMiwgNzgsIDc4LCA3OCwgNzgsIDIzMiwgMjMyLCAKKyAgICAyMzIsIDIzMiwgMjMyLCA3OCwgMjMyLCAyMzIsIDc4LCA3OCwgMTYzLCAxNjQsIDE2MywgMTY0LCAyMzIsIDc4LCA3OCwgNzgsIAorICAgIDc4LCAyMzIsIDc4LCAyMzIsIDIzMiwgMjMyLCA3OCwgNzgsIDIzMiwgMjMyLCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgCisgICAgNzgsIDc4LCA3OCwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgNzgsIDc4LCAxNjMsIDE2NCwgNzgsIDc4LCA3OCwgCisgICAgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgMjMyLCAyMzIsIDIyNiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAKKyAgICAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCA3OCwgMjMyLCAyMzIsIAorICAgIDIzMiwgMjMyLCA3OCwgNzgsIDIzMiwgNzgsIDIzMiwgNzgsIDc4LCAyMzIsIDc4LCAyMzIsIDIzMiwgMjMyLCAyMzIsIDc4LCAKKyAgICA3OCwgNzgsIDc4LCA3OCwgMjMyLCAyMzIsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDIzMiwgMjMyLCAyMzIsIDc4LCA3OCwgCiAgICAgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgCi0gICAgNzgsIDc4LCA3OCwgNzgsIDIyOCwgMjI4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIAotICAgIDIyOCwgMjI4LCA3OCwgNzgsIDc4LCA3OCwgMjI4LCAyMjgsIDIyOCwgMjI4LCA3OCwgMjI4LCAyMjgsIDc4LCA3OCwgMjI4LCAKLSAgICAyMjIsIDIxMiwgMjEyLCA3OCwgNzgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgCi0gICAgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIAotICAgIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAKLSAgICAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgNzgsIDc4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgCi0gICAgNzgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAKLSAgICAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgCi0gICAgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgNzgsIDc4LCA3OCwgCi0gICAgNzgsIDc4LCAyMzksIDc4LCAyMjgsIDc4LCA3OCwgNzgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCA3OCwgNzgsIDc4LCAKLSAgICA3OCwgNzgsIDIyOCwgMjI4LCAyMjgsIDc4LCA3OCwgNzgsIDc4LCAyMjgsIDc4LCA3OCwgNzgsIDIyOCwgMjI4LCAyMjgsIAotICAgIDIyOCwgMjI4LCA3OCwgMjI4LCA3OCwgNzgsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgNzgsIDc4LCA3OCwgNzgsIDIzMiwgMjMyLCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIAorICAgIDIzMiwgMjMyLCA3OCwgNzgsIDc4LCA3OCwgMjMyLCAyMzIsIDIzMiwgMjMyLCA3OCwgMjMyLCAyMzIsIDc4LCA3OCwgMjMyLCAKKyAgICAyMjYsIDIxNiwgMjE2LCA3OCwgNzgsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgCisgICAgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIAorICAgIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAKKyAgICAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgNzgsIDc4LCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgCisgICAgNzgsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAKKyAgICAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgCisgICAgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgNzgsIDc4LCA3OCwgCisgICAgNzgsIDc4LCAyNDMsIDc4LCAyMzIsIDc4LCA3OCwgNzgsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCA3OCwgNzgsIDc4LCAKKyAgICA3OCwgNzgsIDIzMiwgMjMyLCAyMzIsIDc4LCA3OCwgNzgsIDc4LCAyMzIsIDc4LCA3OCwgNzgsIDIzMiwgMjMyLCAyMzIsIAorICAgIDIzMiwgMjMyLCA3OCwgMjMyLCA3OCwgNzgsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCiAgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCiAgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCiAgICAgMjYsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgCkBAIC0xODM4LDEwNSArMTg0NiwxMDUgQEAKICAgICAxMzgsIDUyLCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDg0LCA4NCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAKLSAgICAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgCi0gICAgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQxLCAyNDAsIAotICAgIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAKLSAgICAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgCi0gICAgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIAotICAgIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAKLSAgICAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgCi0gICAgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQxLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAKLSAgICAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgCi0gICAgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIAotICAgIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAKLSAgICAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgCi0gICAgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIAotICAgIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAKLSAgICAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgCi0gICAgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIAotICAgIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAKLSAgICAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgCi0gICAgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIAotICAgIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAKLSAgICAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgCi0gICAgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIAotICAgIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgCi0gICAgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDAsIDAsIDAsIDAsIDI0MiwgMjQzLCAyNDMsIDI0MywgCi0gICAgMjQwLCAyNDQsIDE3MCwgMjQ1LCAyNDYsIDI0NywgMjQ2LCAyNDcsIDI0NiwgMjQ3LCAyNDYsIDI0NywgMjQ2LCAyNDcsIAotICAgIDI0MCwgMjQwLCAyNDYsIDI0NywgMjQ2LCAyNDcsIDI0NiwgMjQ3LCAyNDYsIDI0NywgMjQ4LCAyNDksIDI1MCwgMjUwLCAKLSAgICAyNDAsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI1MSwgMjUyLCAyNTMsIDI1NCwgCi0gICAgMjU1LCAyNTUsIDI0OCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0MSwgMjQwLCAyNTYsIDI1NiwgMjU2LCAyNDQsIAotICAgIDE3MCwgMjQzLCAyNDAsIDI2LCAwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAotICAgIDE3MCwgMjU3LCAxNzAsIDI1NywgMTcwLCAyNTcsIDE3MCwgMjU3LCAxNzAsIDI1NywgMTcwLCAyNTcsIDE3MCwgMjU3LCAKLSAgICAxNzAsIDI1NywgMTcwLCAyNTcsIDE3MCwgMjU3LCAxNzAsIDI1NywgMTcwLCAyNTcsIDE3MCwgMTcwLCAyNTcsIDE3MCwgCi0gICAgMjU3LCAxNzAsIDI1NywgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMjU3LCAyNTcsIDE3MCwgMjU3LCAyNTcsIAotICAgIDE3MCwgMjU3LCAyNTcsIDE3MCwgMjU3LCAyNTcsIDE3MCwgMjU3LCAyNTcsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNDQsIDI0NCwgMjQ0LCAyNDQsIAorICAgIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAKKyAgICAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDUsIDI0NCwgCisgICAgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIAorICAgIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAKKyAgICAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgCisgICAgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIAorICAgIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAKKyAgICAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDUsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIAorICAgIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAKKyAgICAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgCisgICAgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIAorICAgIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAKKyAgICAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgCisgICAgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIAorICAgIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAKKyAgICAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgCisgICAgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIAorICAgIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAKKyAgICAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgCisgICAgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIAorICAgIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAKKyAgICAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgCisgICAgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAKKyAgICAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMCwgMCwgMCwgMCwgMjQ2LCAyNDcsIDI0NywgMjQ3LCAKKyAgICAyNDQsIDI0OCwgMTcwLCAyNDksIDI1MCwgMjUxLCAyNTAsIDI1MSwgMjUwLCAyNTEsIDI1MCwgMjUxLCAyNTAsIDI1MSwgCisgICAgMjQ0LCAyNDQsIDI1MCwgMjUxLCAyNTAsIDI1MSwgMjUwLCAyNTEsIDI1MCwgMjUxLCAyNTIsIDI1MywgMjU0LCAyNTQsIAorICAgIDI0NCwgMjQ5LCAyNDksIDI0OSwgMjQ5LCAyNDksIDI0OSwgMjQ5LCAyNDksIDI0OSwgMjU1LCAyNTYsIDI1NywgMjU4LCAKKyAgICAyNTksIDI1OSwgMjUyLCAyNDgsIDI0OCwgMjQ4LCAyNDgsIDI0OCwgMjQ1LCAyNDQsIDI2MCwgMjYwLCAyNjAsIDI0OCwgCisgICAgMTcwLCAyNDcsIDI0NCwgMjYsIDAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCisgICAgMTcwLCAyNjEsIDE3MCwgMjYxLCAxNzAsIDI2MSwgMTcwLCAyNjEsIDE3MCwgMjYxLCAxNzAsIDI2MSwgMTcwLCAyNjEsIAorICAgIDE3MCwgMjYxLCAxNzAsIDI2MSwgMTcwLCAyNjEsIDE3MCwgMjYxLCAxNzAsIDI2MSwgMTcwLCAxNzAsIDI2MSwgMTcwLCAKKyAgICAyNjEsIDE3MCwgMjYxLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAyNjEsIDI2MSwgMTcwLCAyNjEsIDI2MSwgCisgICAgMTcwLCAyNjEsIDI2MSwgMTcwLCAyNjEsIDI2MSwgMTcwLCAyNjEsIDI2MSwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAogICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKLSAgICAxNzAsIDE3MCwgMTcwLCAyNTcsIDE3MCwgMTcwLCAwLCAwLCAyNTgsIDI1OCwgMjU5LCAyNTksIDI0NCwgMjYwLCAyNjEsIAotICAgIDI0OCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDI1NywgMTcwLCAKLSAgICAyNTcsIDE3MCwgMjU3LCAxNzAsIDI1NywgMTcwLCAyNTcsIDE3MCwgMjU3LCAxNzAsIDI1NywgMTcwLCAyNTcsIDE3MCwgCi0gICAgMjU3LCAxNzAsIDI1NywgMTcwLCAyNTcsIDE3MCwgMjU3LCAxNzAsIDE3MCwgMjU3LCAxNzAsIDI1NywgMTcwLCAyNTcsIAotICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDI1NywgMjU3LCAxNzAsIDI1NywgMjU3LCAxNzAsIDI1NywgMjU3LCAKLSAgICAxNzAsIDI1NywgMjU3LCAxNzAsIDI1NywgMjU3LCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCisgICAgMTcwLCAxNzAsIDE3MCwgMjYxLCAxNzAsIDE3MCwgMCwgMCwgMjYyLCAyNjIsIDI2MywgMjYzLCAyNDgsIDI2NCwgMjY1LCAKKyAgICAyNTIsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAyNjEsIDE3MCwgCisgICAgMjYxLCAxNzAsIDI2MSwgMTcwLCAyNjEsIDE3MCwgMjYxLCAxNzAsIDI2MSwgMTcwLCAyNjEsIDE3MCwgMjYxLCAxNzAsIAorICAgIDI2MSwgMTcwLCAyNjEsIDE3MCwgMjYxLCAxNzAsIDI2MSwgMTcwLCAxNzAsIDI2MSwgMTcwLCAyNjEsIDE3MCwgMjYxLCAKKyAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAyNjEsIDI2MSwgMTcwLCAyNjEsIDI2MSwgMTcwLCAyNjEsIDI2MSwgCisgICAgMTcwLCAyNjEsIDI2MSwgMTcwLCAyNjEsIDI2MSwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAogICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKLSAgICAyNTcsIDE3MCwgMTcwLCAyNTcsIDI1NywgMjU3LCAyNTcsIDI0MywgMjQ0LCAyNDQsIDI2MCwgMjYxLCAwLCAwLCAwLCAwLCAKKyAgICAyNjEsIDE3MCwgMTcwLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI0NywgMjQ4LCAyNDgsIDI2NCwgMjY1LCAwLCAwLCAwLCAwLCAKICAgICAwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCiAgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAogICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMCwgMCwgMCwgCi0gICAgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIAotICAgIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAKLSAgICAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgCi0gICAgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIAotICAgIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAKLSAgICAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgCi0gICAgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAwLCAyNjIsIDI2MiwgMjYzLCAyNjMsIAotICAgIDI2MywgMjYzLCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDE3MCwgMTcwLCAKKyAgICAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgCisgICAgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIAorICAgIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAKKyAgICAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgCisgICAgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIAorICAgIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAKKyAgICAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDAsIDI2NiwgMjY2LCAyNjcsIDI2NywgCisgICAgMjY3LCAyNjcsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMTcwLCAxNzAsIAogICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKICAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIAotICAgIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAKLSAgICAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIAorICAgIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAKKyAgICAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAotICAgIDE3MCwgMTcwLCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgCi0gICAgMjY0LCAyNjQsIDI2NCwgMjQxLCAyNDEsIDAsIDI2MywgMjYzLCAyNjMsIDI2MywgMjYzLCAyNjMsIDI2MywgMjYzLCAyNjMsIAotICAgIDI2MywgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgCi0gICAgMjY0LCAyNjQsIDI2NCwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI0MSwgMjY2LCAyNjYsIAotICAgIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgCi0gICAgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNDEsIAotICAgIDI0MSwgMjQxLCAyNjIsIDI2MywgMjYzLCAyNjMsIDI2MywgMjYzLCAyNjMsIDI2MywgMjYzLCAyNjMsIDI2MywgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgCi0gICAgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY2LCAyNjYsIDI2NiwgMjY2LCAKLSAgICAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY0LCAyNjQsIDI2NCwgCi0gICAgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgCi0gICAgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI2NCwgMCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgCi0gICAgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgCi0gICAgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgCi0gICAgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI0MSwgMjQxLCAyNDEsIAotICAgIDI0MSwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgCi0gICAgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgCi0gICAgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjQxLCAyNDEsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgCi0gICAgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjQxLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKKyAgICAxNzAsIDE3MCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI0NSwgMjQ1LCAwLCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAKKyAgICAyNjcsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNDUsIDI3MCwgMjcwLCAKKyAgICAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjQ1LCAKKyAgICAyNDUsIDI0NSwgMjY2LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI3MCwgMjcwLCAyNzAsIDI3MCwgCisgICAgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDAsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNDUsIDI0NSwgMjQ1LCAKKyAgICAyNDUsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI0NSwgMjQ1LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI0NSwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCiAgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAogICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKICAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCkBAIC0xOTYyLDcgKzE5NzAsNyBAQAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCi0gICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDI0NCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAorICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAyNDgsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKICAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCiAgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAogICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKQEAgLTE5NzEsMTEgKzE5NzksMTEgQEAKICAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCiAgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAogICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKLSAgICAxNzAsIDE3MCwgMCwgMCwgMCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIAotICAgIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAKLSAgICAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgCi0gICAgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIAotICAgIDI0MCwgMjQwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICAxNzAsIDE3MCwgMCwgMCwgMCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIAorICAgIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAKKyAgICAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgCisgICAgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIAorICAgIDI0NCwgMjQ0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNTMsIDUzLCA1MywgNTMsIDUzLCAKICAgICA1MywgODMsIDgzLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA1MywgMTM4LCAxMzgsIApAQCAtMTk5OSw3ICsyMDA3LDcgQEAKICAgICA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCAKICAgICA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCAKICAgICA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA1MSwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NCwgNDcsIDQ0LCAKLSAgICA0NywgNDQsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA1MiwgMjY3LCAyNjcsIDQ0LCA0NywgNDQsIAorICAgIDQ3LCA0NCwgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDUyLCAyNzEsIDI3MSwgNDQsIDQ3LCA0NCwgCiAgICAgNDcsIDAsIDQ0LCA0NywgNDQsIDQ3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NCwgNDcsIDQ0LCAKICAgICA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIApAQCAtMjAwOCw3ICsyMDE2LDcgQEAKICAgICA0OCwgNDgsIDQ4LCAxMzUsIDQ4LCA0OCwgNDgsIDE0MiwgNDgsIDQ4LCA0OCwgNDgsIDEzNSwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCAxMzksIDEzOSwgMTM1LCAxMzUsIDEzOSwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIDAsIDAsIDE0OCwgMTQ4LCAxNDgsIAotICAgIDE0OCwgMTQ4LCAxNDgsIDgwLCA4MCwgODUsIDIyMSwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgMTQ4LCAxNDgsIDE0OCwgODAsIDgwLCA4NSwgMjI1LCAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAwLCAwLCAwLCAwLCAKQEAgLTIwMjQsMTMgKzIwMzIsMTMgQEAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCA4NiwgCiAgICAgODYsIDg2LCA4MywgODMsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAKLSAgICAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzOSwgMTc0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4MywgMTcwLCAKKyAgICAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzOSwgMTc1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4MywgMTcwLCAKICAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCiAgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDAsIAogICAgIDAsIDAsIDEzNSwgMTM1LCAxMzUsIDEzOSwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxNDUsIAotICAgIDEzOSwgMTM5LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzOSwgMTM5LCAxMzUsIDEzOSwgMTM5LCAxMzksIDE3NCwgODMsIDgzLCAKKyAgICAxMzksIDEzOSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzksIDEzOSwgMTM1LCAxMzksIDEzOSwgMTM5LCAxNzUsIDgzLCA4MywgCiAgICAgODMsIDgzLCA4MywgODMsIDgzLCA4MywgODMsIDgzLCA4MywgODMsIDgzLCAwLCA1MywgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAKICAgICAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAwLCAwLCAwLCAwLCA4MywgODMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIApAQCAtMjA2MCw0OTcgKzIwNjgsNDk2IEBACiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTM5LCAxMzksIDEzNSwgMTM5LCAxMzksIDEzNSwgMTM5LCAxMzksIDgzLCAxMzksIAogICAgIDE0MiwgMCwgMCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIAotICAgIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAKLSAgICAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgCi0gICAgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIAotICAgIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAKLSAgICAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgCi0gICAgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIAotICAgIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAKLSAgICAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgCi0gICAgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIAotICAgIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAKLSAgICAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAotICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDAsIDAsIDAsIDAsIAotICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKLSAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCi0gICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAotICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMCwgMCwgMCwgMCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAotICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKLSAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCi0gICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAotICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKLSAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCi0gICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAotICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKLSAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCi0gICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OSwgMjY5LCAyNjksIAotICAgIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAKLSAgICAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgCi0gICAgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIAotICAgIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAKLSAgICAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgCi0gICAgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIAotICAgIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAKLSAgICAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgCi0gICAgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNzAsIAotICAgIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAKLSAgICAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgCi0gICAgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIAotICAgIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAKLSAgICAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgCi0gICAgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIAotICAgIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAKLSAgICAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgCi0gICAgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIAotICAgIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAKLSAgICAyNzAsIDE3MCwgMTcwLCAyNzAsIDE3MCwgMjcwLCAxNzAsIDE3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgCi0gICAgMjcwLCAyNzAsIDI3MCwgMjcwLCAxNzAsIDI3MCwgMTcwLCAyNzAsIDE3MCwgMTcwLCAyNzAsIDI3MCwgMTcwLCAxNzAsIAotICAgIDE3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAKLSAgICAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgCi0gICAgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIAotICAgIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAKLSAgICAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDAsIDAsIAotICAgIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAKLSAgICAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgCi0gICAgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIAotICAgIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAKLSAgICAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgCi0gICAgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIAotICAgIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAKLSAgICAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMCwgMCwgMCwgMCwgMCwgMjcxLCAyNzIsIDI3MSwgMjczLCAyNzMsIDI3MywgMjczLCAKLSAgICAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjExLCAyNzEsIDI3MSwgMjcxLCAyNzEsIDI3MSwgMjcxLCAyNzEsIDI3MSwgCi0gICAgMjcxLCAyNzEsIDI3MSwgMjcxLCAyNzEsIDAsIDI3MSwgMjcxLCAyNzEsIDI3MSwgMjcxLCAwLCAyNzEsIDAsIDI3MSwgMjcxLCAKLSAgICAwLCAyNzEsIDI3MSwgMCwgMjcxLCAyNzEsIDI3MSwgMjcxLCAyNzEsIDI3MSwgMjcxLCAyNzEsIDI3MSwgMjczLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMjc0LCAKKyAgICAwLCAwLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIAorICAgIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAKKyAgICAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgCisgICAgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIAorICAgIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAKKyAgICAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgCisgICAgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIAorICAgIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAKKyAgICAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgCisgICAgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIAorICAgIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAKKyAgICAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgMCwgMCwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgCisgICAgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIAorICAgIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAKKyAgICAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgCisgICAgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIAorICAgIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAKKyAgICAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgCisgICAgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIAorICAgIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAKKyAgICAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MywgMjczLCAyNzMsIDI3MywgCisgICAgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIAorICAgIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAKKyAgICAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgCisgICAgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIAorICAgIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAKKyAgICAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgCisgICAgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIAorICAgIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAKKyAgICAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzQsIDI3NCwgCiAgICAgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIAotICAgIDI3NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxOTUsIDI3NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAwLCAwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgCisgICAgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIAorICAgIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAKKyAgICAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgCisgICAgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIAorICAgIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAKKyAgICAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgCisgICAgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIAorICAgIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAKKyAgICAxNzAsIDE3MCwgMjc0LCAxNzAsIDI3NCwgMTcwLCAxNzAsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgCisgICAgMjc0LCAyNzQsIDI3NCwgMTcwLCAyNzQsIDE3MCwgMjc0LCAxNzAsIDE3MCwgMjc0LCAyNzQsIDE3MCwgMTcwLCAxNzAsIAorICAgIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAKKyAgICAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgCisgICAgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIAorICAgIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAKKyAgICAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAwLCAwLCAyNzQsIAorICAgIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAKKyAgICAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgCisgICAgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIAorICAgIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAKKyAgICAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgCisgICAgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIAorICAgIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAKKyAgICAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDI3NiwgMjYsIDAsIDAsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCAyNzcsIDI3NywgMjc3LCAyNzcsIDI3NywgMjc3LCAyNzcsIDI3OCwgMjc5LCAKLSAgICAyNzcsIDAsIDAsIDAsIDAsIDAsIDAsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAyNzcsIDI4MCwgMjgwLCAyODEsIDI4MSwgMjc4LCAyNzksIDI3OCwgMjc5LCAyNzgsIDI3OSwgMjc4LCAyNzksIAotICAgIDI3OCwgMjc5LCAyNzgsIDI3OSwgMjc4LCAyNzksIDI3OCwgMjc5LCAyNDMsIDI0MywgMjc4LCAyNzksIDI3NywgMjc3LCAKLSAgICAyNzcsIDI3NywgMjgxLCAyODEsIDI4MSwgMjgyLCAyNzcsIDI4MiwgMCwgMjc3LCAyODIsIDI3NywgMjc3LCAyODAsIDI4MywgCi0gICAgMjg0LCAyODMsIDI4NCwgMjgzLCAyODQsIDI4NSwgMjc3LCAyNzcsIDI4NiwgMjg3LCAyODgsIDI4OCwgMjg5LCAwLCAyNzcsIAotICAgIDI5MCwgMjg1LCAyNzcsIDAsIDAsIDAsIDAsIDEzMCwgMTMwLCAxMzAsIDExNywgMTMwLCAwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAwLCAwLCAxODcsIDAsIDI5MSwgMjkxLCAyOTIsIDI5MywgMjkyLCAyOTEsIAotICAgIDI5MSwgMjk0LCAyOTUsIDI5MSwgMjk2LCAyOTcsIDI5OCwgMjk3LCAyOTcsIDI5OSwgMjk5LCAyOTksIDI5OSwgMjk5LCAKLSAgICAyOTksIDI5OSwgMjk5LCAyOTksIDI5OSwgMjk3LCAyOTEsIDMwMCwgMzAxLCAzMDAsIDI5MSwgMjkxLCAzMDIsIDMwMiwgCi0gICAgMzAyLCAzMDIsIDMwMiwgMzAyLCAzMDIsIDMwMiwgMzAyLCAzMDIsIDMwMiwgMzAyLCAzMDIsIDMwMiwgMzAyLCAzMDIsIAotICAgIDMwMiwgMzAyLCAzMDIsIDMwMiwgMzAyLCAzMDIsIDMwMiwgMzAyLCAzMDIsIDMwMiwgMjk0LCAyOTEsIDI5NSwgMzAzLCAKLSAgICAzMDQsIDMwMywgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgCi0gICAgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDUsIAotICAgIDI5NCwgMzAxLCAyOTUsIDMwMSwgMjk0LCAyOTUsIDMwNiwgMzA3LCAzMDgsIDMwNiwgMzA2LCAzMDksIDMwOSwgMzA5LCAKLSAgICAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMxMCwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgCi0gICAgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIAotICAgIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAKLSAgICAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzEwLCAzMTAsIDMwOSwgCi0gICAgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIAotICAgIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAKLSAgICAzMDksIDMwOSwgMCwgMCwgMCwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMCwgMCwgMzA5LCAzMDksIDMwOSwgCi0gICAgMzA5LCAzMDksIDMwOSwgMCwgMCwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMCwgMCwgMzA5LCAzMDksIDMwOSwgCi0gICAgMCwgMCwgMCwgMjkzLCAyOTMsIDMwMSwgMzAzLCAzMTEsIDI5MywgMjkzLCAwLCAzMTIsIDMxMywgMzEzLCAzMTMsIDMxMywgCi0gICAgMzEyLCAzMTIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMxNCwgMzE0LCAzMTQsIDI2LCAzMCwgMCwgMCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgMCwgNDgsIDQ4LCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDAsIDAsIDAsIDgzLCAxMzgsIDgzLCAwLCAwLCAwLCAwLCAxNDgsIDE0OCwgCi0gICAgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIAotICAgIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAKLSAgICAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgCi0gICAgMTQ4LCAwLCAwLCAwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAzMTUsIDMxNSwgMzE1LCAzMTUsIAotICAgIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAKLSAgICAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgCi0gICAgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIAotICAgIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgMTUzLCAxNTMsIDE1MywgMTUzLCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDE1MywgMCwgMCwgMCwgMCwgMCwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM1LCAKKyAgICAzNSwgMzUsIDM1LCAzNSwgMCwgMCwgMCwgMCwgMCwgMjc1LCAyNzYsIDI3NSwgMjc3LCAyNzcsIDI3NywgMjc3LCAyNzcsIAorICAgIDI3NywgMjc3LCAyNzcsIDI3NywgMjE1LCAyNzUsIDI3NSwgMjc1LCAyNzUsIDI3NSwgMjc1LCAyNzUsIDI3NSwgMjc1LCAKKyAgICAyNzUsIDI3NSwgMjc1LCAyNzUsIDAsIDI3NSwgMjc1LCAyNzUsIDI3NSwgMjc1LCAwLCAyNzUsIDAsIDI3NSwgMjc1LCAwLCAKKyAgICAyNzUsIDI3NSwgMCwgMjc1LCAyNzUsIDI3NSwgMjc1LCAyNzUsIDI3NSwgMjc1LCAyNzUsIDI3NSwgMjc3LCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMjc4LCAyNzgsIAorICAgIDI3OCwgMjc4LCAyNzgsIDI3OCwgMjc4LCAyNzgsIDI3OCwgMjc4LCAyNzgsIDI3OCwgMjc4LCAyNzgsIDI3OCwgMjc4LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDE5NSwgMjc5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDAsIDAsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgwLCA4MCwgODAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDI4MCwgMjYsIDAsIDAsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAorICAgIDcxLCA3MSwgNzEsIDcxLCAyODEsIDI4MSwgMjgxLCAyODEsIDI4MSwgMjgxLCAyODEsIDI4MiwgMjgzLCAyODEsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyODEsIAorICAgIDI4NCwgMjg0LCAyODUsIDI4NSwgMjgyLCAyODMsIDI4MiwgMjgzLCAyODIsIDI4MywgMjgyLCAyODMsIDI4MiwgMjgzLCAKKyAgICAyODIsIDI4MywgMjgyLCAyODMsIDI4MiwgMjgzLCAyNDcsIDI0NywgMjgyLCAyODMsIDI4MSwgMjgxLCAyODEsIDI4MSwgCisgICAgMjg1LCAyODUsIDI4NSwgMjg2LCAyODEsIDI4NiwgMCwgMjgxLCAyODYsIDI4MSwgMjgxLCAyODQsIDI4NywgMjg4LCAyODcsIAorICAgIDI4OCwgMjg3LCAyODgsIDI4OSwgMjgxLCAyODEsIDI5MCwgMjkxLCAyOTIsIDI5MiwgMjkzLCAwLCAyODEsIDI5NCwgMjg5LCAKKyAgICAyODEsIDAsIDAsIDAsIDAsIDEzMSwgMTMxLCAxMzEsIDExOCwgMTMxLCAwLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAwLCAwLCAxNzQsIDAsIDI5NSwgMjk1LCAyOTYsIDI5NywgMjk2LCAyOTUsIDI5NSwgMjk4LCAKKyAgICAyOTksIDI5NSwgMzAwLCAzMDEsIDMwMiwgMzAxLCAzMDEsIDMwMywgMzAzLCAzMDMsIDMwMywgMzAzLCAzMDMsIDMwMywgCisgICAgMzAzLCAzMDMsIDMwMywgMzAxLCAyOTUsIDMwNCwgMzA1LCAzMDQsIDI5NSwgMjk1LCAzMDYsIDMwNiwgMzA2LCAzMDYsIAorICAgIDMwNiwgMzA2LCAzMDYsIDMwNiwgMzA2LCAzMDYsIDMwNiwgMzA2LCAzMDYsIDMwNiwgMzA2LCAzMDYsIDMwNiwgMzA2LCAKKyAgICAzMDYsIDMwNiwgMzA2LCAzMDYsIDMwNiwgMzA2LCAzMDYsIDMwNiwgMjk4LCAyOTUsIDI5OSwgMzA3LCAzMDgsIDMwNywgCisgICAgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIAorICAgIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDI5OCwgMzA1LCAKKyAgICAyOTksIDMwNSwgMjk4LCAyOTksIDMxMCwgMzExLCAzMTIsIDMxMCwgMzEwLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgCisgICAgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxNCwgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIAorICAgIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAKKyAgICAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgCisgICAgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzE0LCAzMTQsIDMxMywgMzEzLCAzMTMsIAorICAgIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAKKyAgICAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMCwgCisgICAgMCwgMCwgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMCwgMCwgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgCisgICAgMCwgMCwgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMCwgMCwgMzEzLCAzMTMsIDMxMywgMCwgMCwgMCwgMjk3LCAKKyAgICAyOTcsIDMwNSwgMzA3LCAzMTUsIDI5NywgMjk3LCAwLCAzMTYsIDMxNywgMzE3LCAzMTcsIDMxNywgMzE2LCAzMTYsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMxOCwgMzE4LCAzMTgsIDI2LCAzMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgMCwgNDgsIDQ4LCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDAsIDAsIDAsIDAsIDAsIDgzLCAxMzgsIDgzLCAwLCAwLCAwLCAwLCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAKKyAgICAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgCisgICAgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIAorICAgIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAwLCAwLCAwLCA4MCwgODAsIAorICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAKKyAgICAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgCisgICAgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIAorICAgIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAKKyAgICAzMTksIDMxOSwgMTUzLCAxNTMsIDE1MywgMTUzLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDE1MywgMCwgMCwgMCwgMCwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKICAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKLSAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKLSAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4NiwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4NiwgMCwgMCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDE3MywgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxNzMsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDgzLCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCAwLCAKLSAgICAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDgzLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIAotICAgIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIAotICAgIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ3LCA0NywgNDcsIAotICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAotICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAotICAgIDQ3LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIAotICAgIDE0NCwgMTQ0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDcsIDEwNywgMTA3LCAxMDcsIAotICAgIDEwNywgMTA3LCAwLCAwLCAxMDcsIDAsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAotICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAwLCAxMDcsIDEwNywgMCwgMCwgMCwgMTA3LCAwLCAwLCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAotICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMCwgMTA0LCAzMTYsIDMxNiwgMzE2LCAzMTYsIDMxNiwgMzE2LCAKLSAgICAzMTYsIDMxNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAotICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKLSAgICAzMTYsIDMxNiwgMzE2LCAzMTYsIDMxNiwgMzE2LCAwLCAwLCAwLCAxMzgsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAotICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAwLCAwLCAwLCAwLCAwLCAxMDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAotICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMTA3LCAwLCAwLCAwLCAwLCAwLCAwLCAxMDcsIDEwNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTA3LCAxMzUsIDEzNSwgMTM1LCAwLCAxMzUsIDEzNSwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMTM1LCA4NiwgMTM1LCA4MSwgMTA3LCAxMDcsIDEwNywgMTA3LCAwLCAxMDcsIDEwNywgMTA3LCAwLCAxMDcsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAwLCAwLCAwLCAwLCA4MSwgMTc1LCAKLSAgICA4NiwgMCwgMCwgMCwgMCwgMTQyLCAzMTYsIDMxNiwgMzE2LCAzMTYsIDMxNiwgMzE2LCAzMTYsIDMxNiwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMTA0LCAxMDQsIDEwNCwgMTA0LCAxMDQsIDEwNCwgMTA0LCAxMDQsIDEwNCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDMxNiwgMzE2LCAxMDQsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAotICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAotICAgIDEwNywgMTA3LCAxMDcsIDAsIDAsIDAsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAotICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAwLCAwLCAzMTYsIDMxNiwgMzE2LCAzMTYsIDMxNiwgMzE2LCAzMTYsIDMxNiwgCi0gICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAotICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAwLCAwLCAwLCAwLCAwLCAzMTYsIDMxNiwgMzE2LCAzMTYsIDMxNiwgMzE2LCAKLSAgICAzMTYsIDMxNiwgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAotICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAotICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMTcsIDMxNywgMzE3LCAzMTcsIDMxNywgCi0gICAgMzE3LCAzMTcsIDMxNywgMzE3LCAzMTcsIDMxNywgMzE3LCAzMTcsIDMxNywgMzE3LCAzMTcsIDMxNywgMzE3LCAzMTcsIAotICAgIDMxNywgMzE3LCAzMTcsIDMxNywgMzE3LCAzMTcsIDMxNywgMzE3LCAzMTcsIDMxNywgMzE3LCAzMTcsIDAsIDEzOSwgMTM1LCAKLSAgICAxMzksIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIAotICAgIDE0MiwgODMsIDgzLCA4MywgODMsIDgzLCA4MywgODMsIDAsIDAsIDAsIDAsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAKLSAgICAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgCi0gICAgMTUzLCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzNSwgMTM1LCAxMzksIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTQwLCA0OCwgCi0gICAgMTQwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDE0MCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDEzOSwgMTM5LCAxMzksIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM5LCAxMzksIDE0MiwgMTQxLCA4MywgODMsIAotICAgIDE4OCwgODMsIDgzLCA4MywgODMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAKLSAgICAxNDQsIDE0NCwgMTQ0LCAxNDQsIDAsIDAsIDAsIDAsIDAsIDAsIDgxLCA4MSwgODEsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDE0OSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAKLSAgICAxMzksIDEzNSwgMTUwLCAxNTAsIDEzNSwgMTM1LCAxMzUsIDE0MiwgMTQyLCAwLCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgCi0gICAgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDgzLCA4MywgODMsIDgzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAxMzUsIDEzNSwgMTM5LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxMzksIDEzOSwgCi0gICAgMTM5LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzksIDE3NCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDgzLCA4MywgODMsIDgzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAKLSAgICAxNDQsIDE0NCwgMTQ0LCAxNDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCAxMzUsIDEzOSwgMTM1LCAxMzksIDEzOSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgCi0gICAgMTc0LCAxNDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAKLSAgICAxNDQsIDE0NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgCi0gICAgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIAotICAgIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAKLSAgICAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgCi0gICAgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIAotICAgIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAKLSAgICAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgCi0gICAgMTczLCAxNzMsIDE3MywgMTczLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4MywgODMsIDgzLCAKLSAgICA4MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA0OCwgNDgsIDAsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxNzMsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTczLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCA4MywgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA4MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgCisgICAgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgCisgICAgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDAsIDAsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMCwgMCwgMTA3LCAwLCAxMDcsIAorICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCisgICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAorICAgIDEwNywgMCwgMTA3LCAxMDcsIDAsIDAsIDAsIDEwNywgMCwgMCwgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCisgICAgMTA3LCAxMDcsIDAsIDEwNCwgMzIwLCAzMjAsIDMyMCwgMzIwLCAzMjAsIDMyMCwgMzIwLCAzMjAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCisgICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMzIwLCAzMjAsIDMyMCwgMzIwLCAzMjAsIAorICAgIDMyMCwgMCwgMCwgMCwgMTM4LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCisgICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAorICAgIDEwNywgMCwgMCwgMCwgMCwgMCwgMTA0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCisgICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAorICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMTA3LCAxMDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDEwNywgMTM1LCAxMzUsIDEzNSwgMCwgMTM1LCAxMzUsIDAsIDAsIDAsIDAsIDAsIDEzNSwgODYsIDEzNSwgODEsIDEwNywgCisgICAgMTA3LCAxMDcsIDEwNywgMCwgMTA3LCAxMDcsIDEwNywgMCwgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCisgICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMCwgMCwgMCwgMCwgODEsIDE3NiwgODYsIDAsIDAsIDAsIDAsIDE0MiwgCisgICAgMzIwLCAzMjAsIDMyMCwgMzIwLCAzMjAsIDMyMCwgMzIwLCAzMjAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEwNCwgMTA0LCAKKyAgICAxMDQsIDEwNCwgMTA0LCAxMDQsIDEwNCwgMTA0LCAxMDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEwNywgMTA3LCAxMDcsIAorICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAzMjAsIDMyMCwgCisgICAgMTA0LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAorICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCisgICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAwLCAwLCAwLCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCisgICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAorICAgIDEwNywgMCwgMCwgMzIwLCAzMjAsIDMyMCwgMzIwLCAzMjAsIDMyMCwgMzIwLCAzMjAsIDEwNywgMTA3LCAxMDcsIDEwNywgCisgICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAorICAgIDEwNywgMCwgMCwgMCwgMCwgMCwgMzIwLCAzMjAsIDMyMCwgMzIwLCAzMjAsIDMyMCwgMzIwLCAzMjAsIDEwNywgMTA3LCAKKyAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCisgICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAorICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCisgICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAorICAgIDEwNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzIxLCAzMjEsIDMyMSwgMzIxLCAzMjEsIDMyMSwgMzIxLCAzMjEsIDMyMSwgMzIxLCAKKyAgICAzMjEsIDMyMSwgMzIxLCAzMjEsIDMyMSwgMzIxLCAzMjEsIDMyMSwgMzIxLCAzMjEsIDMyMSwgMzIxLCAzMjEsIDMyMSwgCisgICAgMzIxLCAzMjEsIDMyMSwgMzIxLCAzMjEsIDMyMSwgMzIxLCAwLCAxMzksIDEzNSwgMTM5LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAKKyAgICAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxNDIsIDgzLCA4MywgODMsIDgzLCA4MywgODMsIAorICAgIDgzLCAwLCAwLCAwLCAwLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgCisgICAgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIAorICAgIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAxMzUsIDEzNSwgMTM5LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDE0MCwgNDgsIDE0MCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxNDAsIDQ4LCA0OCwgNDgsIDQ4LCAxMzksIDEzOSwgMTM5LCAxMzUsIAorICAgIDEzNSwgMTM1LCAxMzUsIDEzOSwgMTM5LCAxNDIsIDE0MSwgODMsIDgzLCAxODgsIDgzLCA4MywgODMsIDgzLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCA4MSwgODEsIDgxLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCAxNDksIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM5LCAxMzUsIDE1MCwgMTUwLCAxMzUsIDEzNSwgCisgICAgMTM1LCAxNDIsIDE0MiwgMCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCA4MywgCisgICAgODMsIDgzLCA4MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTM1LCAxMzUsIDEzOSwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTM5LCAxMzksIDEzOSwgMTM1LCAxMzUsIDEzNSwgCisgICAgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM5LCAxNzUsIDQ4LCA0OCwgNDgsIDQ4LCA4MywgODMsIDgzLCA4MywgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTM1LCAKKyAgICAxMzksIDEzNSwgMTM5LCAxMzksIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDE3NSwgMTQ1LCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE3MywgCisgICAgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIAorICAgIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAKKyAgICAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgCisgICAgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIAorICAgIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAKKyAgICAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgCisgICAgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgzLCA4MywgODMsIDgzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgCiAgICAgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIAogICAgIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAKLSAgICAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgCi0gICAgMTM5LCAxMzksIDEzOSwgMTM5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzUsIAotICAgIDEzNSwgMTM1LCAxMzUsIDUzLCA1MywgNTMsIDUzLCA1MywgNTMsIDUzLCA1MywgNTMsIDUzLCA1MywgNTMsIDUzLCAwLCAwLCAKKyAgICAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzNSwgMTM1LCAxMzUsIDEzNSwgNTMsIDUzLCA1MywgCisgICAgNTMsIDUzLCA1MywgNTMsIDUzLCA1MywgNTMsIDUzLCA1MywgNTMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE3MCwgCi0gICAgMTcwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNzAsIDE3MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgwLCA4MCwgCiAgICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgCiAgICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgCiAgICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgCiAgICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgCiAgICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgCi0gICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKICAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKLSAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgMCwgMCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAorICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODAsIDgwLCA4MCwgCiAgICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgCiAgICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgCi0gICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDMxOCwgMzE4LCAzMTgsIDMxOCwgMzE4LCAzMTgsIDMxOCwgMzE5LCAzMTksIAotICAgIDE3NSwgMTc1LCAxNzUsIDgwLCA4MCwgODAsIDMyMCwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDE4NywgMTg3LCAxODcsIAotICAgIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCA4NiwgODYsIDg2LCA4NiwgODYsIDg2LCA4NiwgODYsIDgwLCA4MCwgODEsIDgxLCAKLSAgICA4MSwgODEsIDgxLCA4NiwgODYsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKLSAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgxLCAKLSAgICA4MSwgODEsIDgxLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgMzE4LCAzMTgsIAotICAgIDMxOCwgMzE4LCAzMTgsIDMxOCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAotICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMCwgMCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKKyAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKKyAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKKyAgICAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMywgMzIzLCAxNzYsIDE3NiwgMTc2LCA4MCwgODAsIDgwLCAKKyAgICAzMjQsIDMyMywgMzIzLCAzMjMsIDMyMywgMzIzLCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgODYsIAorICAgIDg2LCA4NiwgODYsIDg2LCA4NiwgODYsIDg2LCA4MCwgODAsIDgxLCA4MSwgODEsIDgxLCA4MSwgODYsIDg2LCA4MCwgODAsIAorICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAorICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MSwgODEsIDgxLCA4MSwgODAsIDgwLCA4MCwgODAsIAorICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDgwLCA4MCwgCisgICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgCisgICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDgxLCAKLSAgICA4MSwgODEsIDI2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgODEsIDgxLCA4MSwgMjYsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCiAgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCiAgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCiAgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCiAgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE0OCwgMTQ4LCAxNDgsIAotICAgIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAKLSAgICAxNDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAotICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAwLCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCi0gICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDM1LCAzNSwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgCisgICAgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKKyAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKICAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKLSAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCA0OSwgMCwgNDksIDQ5LCAwLCAwLCA0OSwgMCwgMCwgNDksIDQ5LCAwLCAwLCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgMCwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAzNSwgMzUsIDM1LCAzNSwgMCwgMzUsIDAsIAotICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAwLCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCisgICAgMzUsIDM1LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCisgICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAwLCAKKyAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKKyAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKKyAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKKyAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgNDksIDAsIAorICAgIDQ5LCA0OSwgMCwgMCwgNDksIDAsIDAsIDQ5LCA0OSwgMCwgMCwgNDksIDQ5LCA0OSwgNDksIDAsIDQ5LCA0OSwgNDksIDQ5LCAKKyAgICA0OSwgNDksIDQ5LCA0OSwgMzUsIDM1LCAzNSwgMzUsIDAsIDM1LCAwLCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMCwgCisgICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCisgICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCisgICAgNDksIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCisgICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgNDksIDQ5LCAwLCA0OSwgNDksIDQ5LCA0OSwgMCwgMCwgNDksIAorICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAwLCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMCwgMzUsIDM1LCAzNSwgCisgICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCisgICAgMzUsIDM1LCAzNSwgMzUsIDM1LCA0OSwgNDksIDAsIDQ5LCA0OSwgNDksIDQ5LCAwLCA0OSwgNDksIDQ5LCA0OSwgNDksIDAsIAorICAgIDQ5LCAwLCAwLCAwLCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMCwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAorICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAogICAgIDM1LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAogICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAogICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgNDksIAotICAgIDQ5LCAwLCA0OSwgNDksIDQ5LCA0OSwgMCwgMCwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAwLCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMCwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCi0gICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCA0OSwgNDksIDAsIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCAwLCA0OSwgNDksIDQ5LCA0OSwgNDksIDAsIDQ5LCAwLCAwLCAwLCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgMCwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCisgICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCisgICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCisgICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgNDksIDQ5LCA0OSwgCisgICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCisgICAgNDksIDQ5LCA0OSwgNDksIDQ5LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCisgICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCisgICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCisgICAgNDksIDQ5LCA0OSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCiAgICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCiAgICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCiAgICAgNDksIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCiAgICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCiAgICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAzNSwgCiAgICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCi0gICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMzUsIDM1LCAzNSwgCisgICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMCwgMCwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKKyAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDMyNSwgCiAgICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCi0gICAgMzUsIDM1LCAzNSwgMzUsIDM1LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDM1LCAzNSwgMzUsIDM1LCAzNSwgCi0gICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCi0gICAgMzUsIDM1LCAzNSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCi0gICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCi0gICAgMzUsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCi0gICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCi0gICAgMzUsIDAsIDAsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAzMjEsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCi0gICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAyMjIsIAotICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAzMjEsIDM1LCAzNSwgMzUsIDM1LCAKLSAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKLSAgICAzNSwgMzUsIDM1LCAyMjIsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAzMjEsIAotICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAotICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAyMjIsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDQ5LCA0OSwgNDksIDQ5LCAKKyAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMjI2LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCA0OSwgNDksIDQ5LCA0OSwgCiAgICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgMzIxLCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAotICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMjIyLCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKKyAgICA0OSwgNDksIDQ5LCAzMjUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCisgICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAyMjYsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAogICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAzMjEsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKLSAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAyMjIsIDM1LCAzNSwgCi0gICAgMzUsIDM1LCAzNSwgMzUsIDQ5LCAzNSwgMCwgMCwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIAotICAgIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAKLSAgICAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgCi0gICAgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMCwgMTMwLCAxMzAsIDAsIDEzMCwgMCwgMCwgMTMwLCAwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMCwgMTMwLCAwLCAxMzAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDEzMCwgMCwgMCwgMCwgMCwgMTMwLCAwLCAxMzAsIDAsIDEzMCwgMCwgMTMwLCAxMzAsIDEzMCwgMCwgCi0gICAgMTMwLCAxMzAsIDAsIDEzMCwgMCwgMCwgMTMwLCAwLCAxMzAsIDAsIDEzMCwgMCwgMTMwLCAwLCAxMzAsIDAsIDEzMCwgMTMwLCAKLSAgICAwLCAxMzAsIDAsIDAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMCwgMTMwLCAwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAwLCAwLCAwLCAwLCAwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAzMjUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKKyAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAyMjYsIDM1LCAzNSwgCisgICAgMzUsIDM1LCAzNSwgMzUsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCisgICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAzMjUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAorICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAorICAgIDM1LCAyMjYsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKKyAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAzMjUsIDM1LCAzNSwgCisgICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCisgICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAyMjYsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDQ5LCAzNSwgMCwgMCwgMzI2LCAzMjYsIAorICAgIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAKKyAgICAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgCisgICAgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIAorICAgIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMCwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMCwgMTMxLCAxMzEsIDAsIDEzMSwgMCwgMCwgCisgICAgMTMxLCAwLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDAsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMCwgMTMxLCAwLCAxMzEsIDAsIDAsIDAsIDAsIDAsIDAsIDEzMSwgMCwgMCwgMCwgMCwgMTMxLCAwLCAxMzEsIAorICAgIDAsIDEzMSwgMCwgMTMxLCAxMzEsIDEzMSwgMCwgMTMxLCAxMzEsIDAsIDEzMSwgMCwgMCwgMTMxLCAwLCAxMzEsIDAsIDEzMSwgCisgICAgMCwgMTMxLCAwLCAxMzEsIDAsIDEzMSwgMTMxLCAwLCAxMzEsIDAsIDAsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMCwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAwLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDAsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMCwgMTMxLCAwLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDAsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAwLCAwLCAwLCAwLCAwLCAxMzEsIDEzMSwgMTMxLCAwLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMCwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc4LCA3OCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAwLCAwLCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMCwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDAsIDAsIDAsIDAsIDAsIDIzNywgMjM3LCAKLSAgICAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgCi0gICAgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIAotICAgIDMyMywgMCwgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAKLSAgICAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgCi0gICAgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIAotICAgIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAKLSAgICAzMjQsIDMyNCwgMzI0LCAyMTgsIDIxOCwgMCwgMCwgMCwgMCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAKLSAgICAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgCi0gICAgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDIzNywgMzI0LCAzMjQsIAotICAgIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKLSAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKLSAgICA4MCwgODAsIDI2NCwgMjY0LCAyNjQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgCi0gICAgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMjY0LCAyNjQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc4LCA3OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIDAsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCiAgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCiAgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAyNiwgMCwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKKyAgICAzNCwgMzQsIDAsIDAsIDAsIDAsIDAsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgCisgICAgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIAorICAgIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDMyNywgMCwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAKKyAgICAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgCisgICAgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDMyOCwgMzI4LCAzMjgsIAorICAgIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAKKyAgICAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAyMjIsIDIyMiwgMCwgMCwgMCwgMCwgMzI4LCAKKyAgICAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgCisgICAgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIAorICAgIDMyOCwgMzI4LCAzMjgsIDI0MSwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAorICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDI2OCwgMjY4LCAyNjgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMCwgMCwgMCwgMCwgMCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjY4LCAyNjgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAwLCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMCwgMjYsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKQEAgLTI1NjAsNzcgKzI1NjcsNzYgQEAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAwLCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIDAsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIDAsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAKLSAgICAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNiwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCiAgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCiAgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCiAgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCiAgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCiAgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE3MCwgMTcwLCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKICAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCiAgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAogICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKICAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCiAgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAotICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKLSAgICAxNzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCisgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKICAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCiAgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAotICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKLSAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE3MCwgCisgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKICAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCiAgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAogICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKICAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCiAgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAotICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKLSAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAKLSAgICAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgCi0gICAgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIAorICAgIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAKKyAgICAyNzQsIDI3NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTg3LCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgCi0gICAgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIAotICAgIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAKLSAgICAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgCi0gICAgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIAotICAgIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAKLSAgICAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgCi0gICAgMTg3LCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDE3NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAKKyAgICAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgCisgICAgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIAorICAgIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAKKyAgICAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgCisgICAgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIAorICAgIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAKKyAgICAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgCiAgICAgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgCiAgICAgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgCiAgICAgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgCkBAIC0yNjQzLDE3ICsyNjQ5LDE3IEBACiAgICAgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgCiAgICAgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgCiAgICAgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgCi0gICAgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAKLSAgICAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgCi0gICAgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIAotICAgIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAKLSAgICAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgCi0gICAgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIAotICAgIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAKLSAgICAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgCi0gICAgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDAsIAotICAgIDAsIAorICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgCisgICAgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIAorICAgIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAKKyAgICAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgCisgICAgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIAorICAgIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAKKyAgICAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgCisgICAgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIAorICAgIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAKKyAgICAyNzMsIDI3MywgMjczLCAyNzMsIDAsIDAsIAogfTsKIAogLyogZGVjb21wb3NpdGlvbiBkYXRhICovCkBAIC01MTc4LDcgKzUxODQsNiBAQAogCXsgMjU1LCA3LCA4LCAyNTUsIDAgfSwKIAl7IDI1NSwgNywgOSwgMjU1LCAwIH0sCiAJeyAxLCA1LCAyNTUsIDI1NSwgMCB9LAotCXsgMTUsIDE0LCAyNTUsIDI1NSwgMCB9LAogCXsgMjU1LCAxMCwgMjU1LCAyNTUsIDAgfSwKIAl7IDE4LCAyNTUsIDI1NSwgMjU1LCAwIH0sCiAJeyAxOSwgMjU1LCAyNTUsIDI1NSwgMCB9LApAQCAtNTE5MSw2ICs1MTk2LDcgQEAKIAl7IDI1NSwgMjU1LCA5LCAyNTUsIDAgfSwKIAl7IDE5LCAzMCwgMjU1LCAyNTUsIDAgfSwKIAl7IDI1NSwgOCwgMjU1LCAyNTUsIDAgfSwKKwl7IDI1NSwgMjcsIDI1NSwgMjU1LCAwIH0sCiAJeyAyNTUsIDIyLCAyNTUsIDI1NSwgMCB9LAogCXsgMjU1LCAyMywgMjU1LCAyNTUsIDAgfSwKIAl7IDksIDI1NSwgMjU1LCAyNTUsIDAgfSwKQEAgLTUyMDUsOCArNTIxMSw4IEBACiBzdGF0aWMgdW5zaWduZWQgY2hhciBjaGFuZ2VzXzNfMl8wX2luZGV4W10gPSB7CiAgICAgMCwgMSwgMiwgMiwgMywgNCwgNSwgNiwgMiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDE3LCAxOCwgCiAgICAgMTksIDIwLCAyMSwgMjIsIDIzLCAyNCwgMiwgMiwgMjUsIDI2LCAyNywgMjgsIDI5LCAzMCwgMzEsIDMyLCAzMywgMzQsIDM1LCAKLSAgICAzNiwgMiwgMiwgMiwgMzcsIDM4LCAyLCAzOSwgNDAsIDQxLCA0MiwgNDMsIDQ0LCA0NSwgNDYsIDQ3LCA0OCwgNDksIDUwLCAKLSAgICA1MSwgMiwgNTIsIDIsIDIsIDUzLCA1NCwgNTUsIDU2LCA1NywgMiwgMiwgNTgsIDU5LCA2MCwgMiwgMiwgNjEsIDYyLCA2MywgCisgICAgMzYsIDIsIDIsIDIsIDM3LCAzOCwgMiwgMzksIDIsIDQwLCA0MSwgNDIsIDQzLCA0NCwgNDUsIDQ2LCA0NywgNDgsIDQ5LCAKKyAgICA1MCwgMiwgNTEsIDIsIDIsIDUyLCA1MywgNTQsIDU1LCA1NiwgMiwgNTcsIDU4LCA1OSwgNjAsIDIsIDIsIDYxLCA2MiwgNjMsIAogICAgIDY0LCA2NSwgNjUsIDIsIDIsIDIsIDIsIDY2LCAyLCA2NywgNjgsIDY5LCA3MCwgNzEsIDIsIDIsIDIsIDcyLCA3MywgNzQsIAogICAgIDc1LCA3NiwgNzcsIDc4LCA3OSwgODAsIDgxLCAyLCAyLCAyLCAyLCAyLCAyLCA4MiwgMiwgMiwgMiwgMiwgMiwgODMsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIApAQCAtNTIxNyw4ICs1MjIzLDggQEAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCA5MiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgOTMsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAotICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDk0LCA5NSwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgOTYsIDUwLCA1MCwgCi0gICAgOTcsIDk4LCA1MCwgOTksIDEwMCwgMTAxLCAxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3LCAyLCAyLCAyLCAyLCAyLCAyLCAKKyAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCA5NCwgOTUsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDk2LCA0OSwgNDksIAorICAgIDk3LCA5OCwgNDksIDk5LCAxMDAsIDEwMSwgMTAyLCAxMDMsIDEwNCwgMTA1LCAxMDYsIDEwNywgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCkBAIC01MjI5LDEzICs1MjM1LDEzIEBACiAgICAgMTE5LCAxMjAsIDEyMSwgMTIyLCAyLCAxMjMsIDEyNCwgMTI1LCAxMjYsIDEyNywgMiwgMiwgMiwgMiwgMiwgMiwgMTI4LCAyLCAKICAgICAxMjksIDEzMCwgMTMxLCAyLCAxMzIsIDIsIDEzMywgMiwgMiwgMiwgMTM0LCAyLCAyLCAyLCAxMzUsIDEzNiwgMTM3LCAxMzgsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDEzOSwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCi0gICAgMiwgMiwgMiwgMiwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgMTQwLCAyLCAxNDEsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAotICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKLSAgICA1MCwgMTQyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKKyAgICAyLCAyLCAyLCAyLCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAxNDAsIDIsIDE0MSwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCisgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAorICAgIDQ5LCAxNDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAotICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDUwLCA1MCwgNTAsIDUwLCAxNDMsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAorICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDQ5LCA0OSwgNDksIDQ5LCAxNDMsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDE0NCwgMTQ1LCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKQEAgLTUyNjIsOSArNTI2OCw5IEBACiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCi0gICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgNTAsIDUwLCA1MCwgCi0gICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCi0gICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAxNzgsIDUwLCAxNzksIDIsIDIsIDIsIDIsIDIsIAorICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDQ5LCA0OSwgNDksIAorICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAorICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMTc4LCA0OSwgMTc5LCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKQEAgLTU1MDUsNyArNTUxMSw3IEBACiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCi0gICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgNTAsIDE4MCwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCisgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgNDksIDE4MCwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCkBAIC01NjI3LDcgKzU2MzMsNyBAQAogICAgIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDAsIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDksIDAsIDksIDAsIDAsIDAsIDAsIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDAsIDksIDAsIDksIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIAogICAgIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIApAQCAtNTc4Nyw3MDkgKzU3OTMsMjY3IEBACiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgCiAgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDAsIDAsIDAsIDAsIDAsIDksIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIAogICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAogICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDksIDAsIDAsIDAsIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDksIAotICAgIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDksIAotICAgIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAogICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAogICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIAogICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAogICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAogICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIAogICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDMyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDksIDAsIDksIDksIDksIAorICAgIDksIDAsIDAsIDAsIDAsIDAsIDAsIDM1LCA0LCAwLCAwLCAzNiwgMzcsIDM4LCAzOSwgNDAsIDQxLCAxLCAxLCAwLCAwLCAwLCAKKyAgICA0LCAzNSwgOCwgNiwgNywgMzYsIDM3LCAzOCwgMzksIDQwLCA0MSwgMSwgMSwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQzLCA5LCAKICAgICA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCA5LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NCwgNDQsIDQ0LCA0NCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNDUsIDQ2LCAxMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAwLCAwLCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKICAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKICAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKICAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKICAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAKKyAgICA5LCA5LCAwLCAwLCAwLCAwLCAwLCA5LCAwLCAwLCAwLCAwLCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCA5LCAwLCA5LCAwLCAwLCAwLCAwLCA5LCA5LCA5LCAwLCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAKKyAgICA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNCwgMzQsIDM0LCAzNCwgMzQsIAorICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAorICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAorICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAorICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAorICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAorICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAorICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDAsIDAsIDAsIDAsIDAsIDksIDAsIDAsIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIAorICAgIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIAorICAgIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIAorICAgIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAogICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAogICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAogICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzUsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIAotICAgIDAsIDAsIDAsIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM2LCA0LCAwLCAwLCAzNywgMzgsIDM5LCA0MCwgCi0gICAgNDEsIDQyLCAxLCAxLCAwLCAwLCAwLCA0LCAzNiwgOCwgNiwgNywgMzcsIDM4LCAzOSwgNDAsIDQxLCA0MiwgMSwgMSwgMCwgCi0gICAgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgCisgICAgMCwgMCwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAogICAgIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQzLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCA0NCwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDUsIAotICAgIDQ2LCAxMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAotICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAotICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCA5LCA5LCAwLCAwLCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICAwLCAwLCAwLCAwLCAwLCA5LCAwLCAwLCAwLCAwLCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCA5LCAwLCA5LCAwLCAwLCAwLCAwLCA5LCA5LCA5LCAwLCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAKLSAgICA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKLSAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKLSAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKLSAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKLSAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKLSAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKLSAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKLSAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIAotICAgIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDAsIDAsIDAsIDAsIDAsIDksIDAsIDAsIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIAotICAgIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIAotICAgIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIAotICAgIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgNDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTEsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIAotICAgIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIAotICAgIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIAotICAgIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDAsIDAsIDksIDksIDksIDksIDksIDksIDAsIDAsIDksIDksIDksIDksIDksIAotICAgIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIAotICAgIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgCiAgICAgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDUwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAxOSwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIAotICAgIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDAsIDAsIDAsIDEsIDEsIDIxLCAyMSwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMSwgMCwgMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgNDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDE0LCAxNCwgMTQsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDAsIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUzLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgOSwgMCwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgMCwgMCwgCi0gICAgMCwgOSwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgMCwgMCwgMCwgMCwgCi0gICAgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgCi0gICAgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgNTQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgNTQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU0LCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAKLSAgICA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCAwLCA5LCAwLCAwLCA5LCAwLCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCAwLCA5LCAwLCA5LCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAKLSAgICAwLCAwLCAwLCAwLCA5LCAwLCA5LCAwLCA5LCAwLCA5LCA5LCA5LCAwLCA5LCA5LCAwLCA5LCAwLCAwLCA5LCAwLCA5LCAwLCAKLSAgICA5LCAwLCA5LCAwLCA5LCAwLCA5LCA5LCAwLCA5LCAwLCAwLCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICAwLCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCAwLCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAKLSAgICA5LCAwLCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCAwLCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCAwLCAwLCAwLCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUxLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCkBAIC02NDk3LDE1ICs2MDYxLDIwIEBACiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIApAQCAtNjUxNSwzMyArNjA4NCw0NzAgQEAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgCisgICAgMCwgMCwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAKKyAgICAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAxOSwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDAsIDAsIDAsIDEsIDEsIDIxLCAyMSwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMSwgMCwgMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgNDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE0LCAxNCwgMTQsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDAsIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDUzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgOSwgCisgICAgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgCisgICAgMCwgMCwgMCwgOSwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgMCwgMCwgCisgICAgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgOSwgCisgICAgOSwgOSwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgNTQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU0LCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCAwLCA5LCAwLCAwLCA5LCAwLCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCAwLCA5LCAwLCA5LCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCA5LCAwLCAwLCAwLCAwLCA5LCAwLCA5LCAwLCA5LCAwLCA5LCA5LCA5LCAwLCA5LCA5LCAwLCA5LCAwLCAwLCA5LCAwLCAKKyAgICA5LCAwLCA5LCAwLCA5LCAwLCA5LCAwLCA5LCA5LCAwLCA5LCAwLCAwLCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCAwLCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCAwLCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAKKyAgICA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCAKKyAgICA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCAKKyAgICAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCAwLCAwLCAwLCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIAogICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAogICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAogICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAogICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogfTsKIAogc3RhdGljIGNvbnN0IGNoYW5nZV9yZWNvcmQqIGdldF9jaGFuZ2VfM18yXzAoUHlfVUNTNCBuKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy91bmljb2RlbmFtZV9kYi5oIGIvTW9kdWxlcy91bmljb2RlbmFtZV9kYi5oCmluZGV4IDM4Mzg4ODIuLjdjY2IxMjYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvdW5pY29kZW5hbWVfZGIuaAorKysgYi9Nb2R1bGVzL3VuaWNvZGVuYW1lX2RiLmgKQEAgLTYsNyArNiw3IEBACiBzdGF0aWMgdW5zaWduZWQgY2hhciBsZXhpY29uW10gPSB7CiAgICAgNzYsIDY5LCA4NCwgODQsIDY5LCAyMTAsIDg3LCA3MywgODQsIDIwMCwgODMsIDg5LCA3NiwgNzYsIDY1LCA2NiwgNzYsIAogICAgIDE5NywgODMsIDc3LCA2NSwgNzYsIDIwNCwgODMsIDczLCA3MSwgMjA2LCA2NywgNjUsIDgwLCA3MywgODQsIDY1LCAyMDQsIAotICAgIDc2LCA2NSwgODQsIDczLCAyMDYsIDg5LCAyMDEsIDY3LCA3NCwgMjAzLCA2NSwgODIsIDY1LCA2NiwgNzMsIDE5NSwgNzcsIAorICAgIDc2LCA2NSwgODQsIDczLCAyMDYsIDg5LCAyMDEsIDY1LCA4MiwgNjUsIDY2LCA3MywgMTk1LCA2NywgNzQsIDIwMywgNzcsIAogICAgIDY1LCA4NCwgNzIsIDY5LCA3NywgNjUsIDg0LCA3MywgNjcsIDY1LCAyMDQsIDY5LCA3MSwgODksIDgwLCA4NCwgNzMsIDY1LCAKICAgICAyMDYsIDcyLCA3MywgNjksIDgyLCA3OSwgNzEsIDc2LCA4OSwgODAsIDIwMCwgNjcsIDc5LCA3NywgODAsIDY1LCA4NCwgNzMsIAogICAgIDY2LCA3MywgNzYsIDczLCA4NCwgMjE3LCA2NywgODUsIDc4LCA2OSwgNzMsIDcwLCA3OSwgODIsIDIwNSwgODMsIDg5LCA3NywgCkBAIC0yNywyNCArMjcsMjQgQEAKICAgICA3NSwgNjUsIDc4LCAxOTMsIDE5NCwgNzcsIDc5LCA2OCwgNzMsIDcwLCA3MywgNjksIDIxMCwgNjgsIDc5LCAyMTIsIDc1LCAKICAgICA2NSwgNzgsIDcxLCA4OCwgMjAxLCA2NSwgMTI4LCA3NiwgNzMsIDc4LCA2OSwgNjUsIDIxMCwgODQsIDczLCA2NiwgNjksIAogICAgIDg0LCA2NSwgMjA2LCA3OSwgMTk4LCA3MywgNzgsIDczLCA4NCwgNzMsIDY1LCAyMDQsIDc3LCA2OSwgNjksIDIwNSwgODYsIAotICAgIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDIwNCwgNzcsIDg5LCA2NSwgNzgsIDc3LCA2NSwgMjEwLCA3NSwgNzIsIDc3LCA2OSwgCi0gICAgMjEwLCA4NSwgMTI4LCA4NywgNzIsIDczLCA4NCwgMTk3LCA2NywgNjUsIDgyLCA4MiwgNzMsIDY5LCAyMTAsIDczLCAxMjgsIAotICAgIDY1LCA4MiwgODIsIDc5LCA4NywgMTI4LCA3OSwgMTI4LCA2NSwgNjYsIDc5LCA4NiwgMTk3LCA3NywgNjUsIDgyLCA3NSwgCi0gICAgMTI4LCA4OSwgNjksIDIwMCwgNjUsIDgyLCA4MiwgNzksIDIxNSwgNjcsIDc5LCA4MCwgODQsIDczLCAxOTUsIDgwLCA3MiwgCi0gICAgNjUsIDgzLCA2OSwgNDUsIDE5NywgNzcsIDc5LCA3OCwgNzEsIDc5LCA3NiwgNzMsIDY1LCAyMDYsIDY4LCA2OSwgODYsIDY1LCAKLSAgICA3OCwgNjUsIDcxLCA2NSwgODIsIDIwMSwgNjYsIDc2LCA2NSwgNjcsIDIwMywgODQsIDczLCA3NiwgMTk3LCA4MywgODksIAotICAgIDc3LCA2NiwgNzksIDc2LCAxMjgsIDgwLCA2NSwgODIsIDY5LCA3OCwgODQsIDcyLCA2OSwgODMsIDczLCA5MCwgNjksIDE5NiwgCi0gICAgODQsIDcyLCA2NSwgMjA1LCA3NCwgNzksIDc4LCA3MSwgODMsIDY5LCA3OSwgNzgsIDE5OSwgODMsIDg0LCA4MiwgNzksIDc1LCAKLSAgICA2OSwgMTI4LCA4MywgODEsIDg1LCA2NSwgODIsIDY5LCAxOTYsIDY2LCA3OSwgMjE2LCA3MiwgNjksIDY2LCA4MiwgNjksIAotICAgIDIxNSwgNzcsIDczLCA2NSwgMjA3LCA4MCwgNzYsIDg1LCAyMTEsIDgyLCA3MywgNzEsIDcyLCA4NCwgODcsIDY1LCA4MiwgCi0gICAgNjgsIDIxMSwgNzEsIDY5LCA3OSwgODIsIDcxLCA3MywgNjUsIDIwNiwgNjgsIDgyLCA2NSwgODcsIDczLCA3OCwgNzEsIAotICAgIDIxMSwgNjcsIDcyLCA3OSwgODMsIDY5LCA3OSwgNzgsIDE5OSwgNzIsIDY1LCA3NiwgNzAsIDg3LCA3MywgNjgsIDg0LCAKKyAgICA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCAyMDQsIDc3LCA4OSwgNjUsIDc4LCA3NywgNjUsIDIxMCwgODUsIDEyOCwgNzUsIAorICAgIDcyLCA3NywgNjksIDIxMCwgODcsIDcyLCA3MywgODQsIDE5NywgNjUsIDY2LCA3OSwgODYsIDE5NywgNjcsIDY1LCA4MiwgCisgICAgODIsIDczLCA2OSwgMjEwLCA3MywgMTI4LCA2NSwgODIsIDgyLCA3OSwgODcsIDEyOCwgODksIDY5LCAyMDAsIDc5LCAxMjgsIAorICAgIDc3LCA2NSwgODIsIDc1LCAxMjgsIDY1LCA4MiwgODIsIDc5LCAyMTUsIDY3LCA3OSwgODAsIDg0LCA3MywgMTk1LCA4MCwgCisgICAgNzIsIDY1LCA4MywgNjksIDQ1LCAxOTcsIDc3LCA3OSwgNzgsIDcxLCA3OSwgNzYsIDczLCA2NSwgMjA2LCA2OCwgNjksIDg2LCAKKyAgICA2NSwgNzgsIDY1LCA3MSwgNjUsIDgyLCAyMDEsIDY2LCA3NiwgNjUsIDY3LCAyMDMsIDg0LCA3MywgNzYsIDE5NywgODMsIAorICAgIDg5LCA3NywgNjYsIDc5LCA3NiwgMTI4LCA4MCwgNjUsIDgyLCA2OSwgNzgsIDg0LCA3MiwgNjksIDgzLCA3MywgOTAsIDY5LCAKKyAgICAxOTYsIDg0LCA3MiwgNjUsIDIwNSwgNzQsIDc5LCA3OCwgNzEsIDgzLCA2OSwgNzksIDc4LCAxOTksIDgzLCA4NCwgODIsIAorICAgIDc5LCA3NSwgNjksIDEyOCwgODMsIDgxLCA4NSwgNjUsIDgyLCA2OSwgMTk2LCA2NiwgNzksIDIxNiwgNzIsIDY5LCA2NiwgCisgICAgODIsIDY5LCAyMTUsIDc3LCA3MywgNjUsIDIwNywgODAsIDc2LCA4NSwgMjExLCA4MiwgNzMsIDcxLCA3MiwgODQsIDg3LCAKKyAgICA2NSwgODIsIDY4LCAyMTEsIDcxLCA2OSwgNzksIDgyLCA3MSwgNzMsIDY1LCAyMDYsIDY4LCA4MiwgNjUsIDg3LCA3MywgNzgsIAorICAgIDcxLCAyMTEsIDY3LCA3MiwgNzksIDgzLCA2OSwgNzksIDc4LCAxOTksIDcyLCA2NSwgNzYsIDcwLCA4NywgNzMsIDY4LCA4NCwgCiAgICAgMjAwLCA2NiwgNjUsIDc2LCA3MywgNzgsIDY5LCA4MywgMTk3LCA3MiwgNzksIDc5LCA3NSwgMTI4LCAyMTMsIDg0LCA4NywgCiAgICAgNzksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDIwNSwgODAsIDcyLCA2NSwgODMsIDY5LCA0NSwgMTk2LCAKLSAgICA2NSwgNzYsIDY3LCA3MiwgNjksIDc3LCA3MywgNjcsIDY1LCAyMDQsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDczLCAxOTUsIDc5LCA3OCwgNjksIDEyOCwgODQsIDc5LCAxMjgsIDY1LCA3NiwgNjksIDE5OCwgODQsIDg3LCAyMDcsIAotICAgIDcyLCA2OSwgNjUsIDg2LCAyMTcsIDY3LCA3OSwgNzgsIDgzLCA3OSwgNzgsIDY1LCA3OCwgMjEyLCA3OSwgODYsIDY5LCAKLSAgICAyMTAsIDY2LCA4MiwgNjUsIDcyLCA3NywgMjAxLCA4MywgNjcsIDgyLCA3MywgODAsIDIxMiwgODUsIDIwOCwgNzYsIDc5LCAKKyAgICA2NSwgNzYsIDY3LCA3MiwgNjksIDc3LCA3MywgNjcsIDY1LCAyMDQsIDY1LCA3NiwgNjksIDE5OCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNzMsIDE5NSwgNzksIDc4LCA2OSwgMTI4LCA4NCwgNzksIDEyOCwgODQsIDg3LCAyMDcsIAorICAgIDcyLCA2OSwgNjUsIDg2LCAyMTcsIDc5LCA4NiwgNjksIDIxMCwgNjcsIDc5LCA3OCwgODMsIDc5LCA3OCwgNjUsIDc4LCAKKyAgICAyMTIsIDY2LCA4MiwgNjUsIDcyLCA3NywgMjAxLCA4MywgNjcsIDgyLCA3MywgODAsIDIxMiwgODUsIDIwOCwgNzYsIDc5LCAKICAgICAyMTUsIDcyLCA2NSwgMjAwLCA3OSwgNzgsIDE5NywgNjgsIDc5LCA4NywgMjA2LCA3MiwgNzMsIDcxLCAyMDAsIDcwLCA4NSwgCiAgICAgNzYsIDc2LCA4NywgNzMsIDY4LCA4NCwgMjAwLCA2NiwgODIsIDY1LCA2NywgNzUsIDY5LCA4NCwgMTI4LCA2OSwgODEsIDg1LCAKICAgICA2NSwgMjA0LCA4NCwgNjUsIDE5OSwgNjYsIDY1LCA4MiwgMTI4LCA2OCwgNzksIDc3LCA3MywgNzgsIDIwNywgNzgsIDg1LCAKQEAgLTY1LDQ5ICs2NSw0OSBAQAogICAgIDc2LCA4NSwgMTk3LCA4MywgNzIsIDY1LCA4MiwgNjUsIDY4LCAxOTMsIDgzLCA3MywgNzgsIDcyLCA2NSwgNzYsIDE5MywgCiAgICAgNzUsIDY1LCAxMjgsIDgyLCA4NSwgNzgsIDczLCAxOTUsIDgzLCA2NSwgODUsIDgyLCA2NSwgODMsIDcyLCA4NCwgODIsIAogICAgIDE5MywgODQsIDY5LCA4NCwgODIsIDY1LCA3MSwgODIsIDY1LCAyMDUsIDY4LCA2OSwgODMsIDY5LCA4MiwgNjksIDIxMiwgCi0gICAgODQsIDczLCA3NiwgNjgsIDY5LCAxMjgsIDcxLCA4NSwgODIsIDc3LCA4NSwgNzUsIDcyLCAyMDEsIDc3LCA2NSwgMTI4LCAKLSAgICA3NywgNjUsIDg5LCA2OSwgMjAzLCA3NywgNjksIDY5LCA4NCwgNjksIDIwMSwgNzgsIDc5LCA4NCwgNjUsIDg0LCA3MywgNzksIAotICAgIDIwNiwgODMsIDg5LCA4MiwgNzMsIDY1LCAxOTUsIDcwLCA3MywgODYsIDY5LCAxMjgsIDgwLCA2NSwgMTI4LCA4OSwgNjUsIAotICAgIDEyOCwgNzYsIDczLCA3MSwgNzIsIDIxMiwgODMsIDczLCA4OCwgMTI4LCA2OSwgNzMsIDcxLCA3MiwgODQsIDEyOCwgNzYsIAotICAgIDY5LCA4MCwgNjcsIDcyLCAxOTMsIDc4LCA2NSwgMTI4LCA4MywgNjksIDg2LCA2OSwgNzgsIDEyOCwgNzYsIDc5LCA3OCwgCi0gICAgMTk5LCA3OCwgNzMsIDc4LCA2OSwgMTI4LCA4NCwgODUsIDgyLCA3NSwgNzMsIDE5NSwgNzIsIDY1LCA3NywgOTAsIDE5MywgCi0gICAgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgMjA0LCA3OSwgODAsIDY5LCAyMDYsIDgyLCA2NSwgMTI4LCAKLSAgICA4MywgNjUsIDEyOCwgODMsIDg1LCA3OCwgNjgsIDY1LCA3OCwgNjksIDgzLCAxOTcsIDg2LCA3MywgNjksIDIxMiwgNzYsIAotICAgIDY1LCAyMDcsIDkwLCA5MCwgODksIDg4LCAxMjgsIDkwLCA5MCwgODksIDg0LCAxMjgsIDkwLCA5MCwgODksIDgyLCA4OCwgCi0gICAgMTI4LCA5MCwgOTAsIDg5LCA4MiwgMTI4LCA5MCwgOTAsIDg5LCA4MCwgMTI4LCA5MCwgOTAsIDg5LCA2NSwgMTI4LCA5MCwgCi0gICAgOTAsIDg5LCAxMjgsIDkwLCA5MCwgODUsIDg4LCAxMjgsIDkwLCA5MCwgODUsIDgyLCA4OCwgMTI4LCA5MCwgOTAsIDg1LCAKLSAgICA4MiwgMTI4LCA5MCwgOTAsIDg1LCA4MCwgMTI4LCA5MCwgOTAsIDg1LCAxMjgsIDkwLCA5MCwgODMsIDg5LCA2NSwgMTI4LCAKLSAgICA5MCwgOTAsIDgzLCA2NSwgMTI4LCA5MCwgOTAsIDc5LCA4OCwgMTI4LCA5MCwgOTAsIDc5LCA4MCwgMTI4LCA5MCwgOTAsIAotICAgIDc5LCAxMjgsIDkwLCA5MCwgNzMsIDg4LCAxMjgsIDkwLCA5MCwgNzMsIDg0LCAxMjgsIDkwLCA5MCwgNzMsIDgwLCAxMjgsIAotICAgIDkwLCA5MCwgNzMsIDY5LCA4OCwgMTI4LCA5MCwgOTAsIDczLCA2OSwgODQsIDEyOCwgOTAsIDkwLCA3MywgNjksIDgwLCAKLSAgICAxMjgsIDkwLCA5MCwgNzMsIDY5LCAxMjgsIDkwLCA5MCwgNzMsIDEyOCwgOTAsIDkwLCA2OSwgODgsIDEyOCwgOTAsIDkwLCAKLSAgICA2OSwgODAsIDEyOCwgOTAsIDkwLCA2OSwgNjksIDEyOCwgOTAsIDkwLCA2OSwgMTI4LCA5MCwgOTAsIDY1LCA4OCwgMTI4LCAKLSAgICA5MCwgOTAsIDY1LCA4NCwgMTI4LCA5MCwgOTAsIDY1LCA4MCwgMTI4LCA5MCwgOTAsIDY1LCA2NSwgMTI4LCA5MCwgOTAsIAotICAgIDY1LCAxMjgsIDkwLCA4OSwgNzEsIDc5LCA4MywgMTI4LCA5MCwgODcsIDgzLCA4MCwgMTI4LCA5MCwgODcsIDc4LCA3NCwgCi0gICAgMTI4LCA5MCwgODcsIDc4LCA2NiwgODMsIDgwLCAxMjgsIDkwLCA4NywgNzQsIDEyOCwgOTAsIDg3LCA2NSwgODIsIDY1LCAKLSAgICA3NSwgNjUsIDg5LCAxMjgsIDkwLCA4NywgNjUsIDEyOCwgOTAsIDg1LCA4NCwgMTI4LCA5MCwgODUsIDc5LCA4OCwgMTI4LCAKLSAgICA5MCwgODUsIDc5LCA4MCwgMTI4LCA5MCwgODUsIDc5LCAxMjgsIDkwLCA4NSwgNzcsIDEyOCwgOTAsIDg1LCA2NiwgODUsIAotICAgIDgyLCAxMjgsIDkwLCA4NSwgNTMsIDEyOCwgOTAsIDg1LCAxODEsIDkwLCA4MywgNzIsIDY1LCAxMjgsIDkwLCA4MiwgNjUsIAotICAgIDEyOCwgOTAsIDgxLCA2NSwgODAsIDcyLCAxOTMsIDkwLCA3OSwgODQsIDEyOCwgOTAsIDc5LCA3OSwgMTI4LCA5MCwgNzksIAotICAgIDY1LCAxMjgsIDkwLCA3NiwgNjUsIDc3LCAxOTMsIDkwLCA3NiwgNjUsIDEyOCwgOTAsIDc2LCAxOTMsIDkwLCA3NCwgNjksIAotICAgIDEyOCwgOTAsIDczLCA5MCwgNTAsIDEyOCwgOTAsIDczLCA4MSwgNjUsIDY1LCAxMjgsIDkwLCA3MywgNzgsIDc5LCA4MiwgCi0gICAgMTI4LCA5MCwgNzMsIDc2LCA2OCwgNjksIDEyOCwgOTAsIDczLCA3MSwgOTAsIDY1LCAxOTksIDkwLCA3MywgNzEsIDEyOCwgCi0gICAgOTAsIDczLCA2OCwgMTkzLCA5MCwgNzMsIDY2LCAxMjgsIDkwLCA3MywgMTk0LCA5MCwgNzMsIDUxLCAxMjgsIDkwLCAyMDEsIAotICAgIDkwLCA3MiwgODksIDg4LCAxMjgsIDkwLCA3MiwgODksIDg0LCAxMjgsIDkwLCA3MiwgODksIDgyLCA4OCwgMTI4LCA5MCwgCi0gICAgNzIsIDg5LCA4MiwgMTI4LCA5MCwgNzIsIDg5LCA4MCwgMTI4LCA5MCwgNzIsIDg5LCAxMjgsIDkwLCA3MiwgODcsIDY5LCAKLSAgICAxMjgsIDkwLCA3MiwgODcsIDY1LCAxMjgsIDkwLCA3MiwgODUsIDg4LCAxMjgsIDkwLCA3MiwgODUsIDg0LCAxMjgsIDkwLCAKLSAgICA3MiwgODUsIDgyLCA4OCwgMTI4LCA5MCwgNzIsIDg1LCA4MiwgMTI4LCA5MCwgNzIsIDg1LCA4MCwgMTI4LCA5MCwgNzIsIAotICAgIDg1LCA3OSwgODgsIDEyOCwgOTAsIDcyLCA4NSwgNzksIDgwLCAxMjgsIDkwLCA3MiwgODUsIDc5LCAxMjgsIDkwLCA3MiwgCi0gICAgODUsIDEyOCwgOTAsIDcyLCA3OSwgODgsIDEyOCwgOTAsIDcyLCA3OSwgODQsIDEyOCwgOTAsIDcyLCA3OSwgODAsIDEyOCwgCi0gICAgOTAsIDcyLCA3OSwgNzksIDEyOCwgOTAsIDcyLCA3OSwgMTI4LCA5MCwgNzIsIDczLCA4NiwgNjksIDg0LCA2OSwgMTI4LCAKLSAgICA5MCwgNzIsIDczLCAxMjgsIDkwLCA3MiwgNjksIDg4LCAxMjgsIDkwLCA3MiwgNjksIDg0LCAxMjgsIDkwLCA3MiwgNjksIAotICAgIDgwLCAxMjgsIDkwLCA3MiwgNjksIDY5LCAxMjgsIDkwLCA3MiwgNjksIDEyOCwgOTAsIDcyLCAxOTcsIDkwLCA3MiwgNjUsIAotICAgIDg4LCAxMjgsIDkwLCA3MiwgNjUsIDg0LCAxMjgsIDkwLCA3MiwgNjUsIDgyLCAxMjgsIDkwLCA3MiwgNjUsIDgwLCAxMjgsIAotICAgIDkwLCA3MiwgNjUsIDczLCA3OCwgMTI4LCA5MCwgNzIsIDY1LCA2NSwgMTI4LCA5MCwgNzIsIDY1LCAxMjgsIDkwLCA3MiwgCi0gICAgMTI4LCA5MCwgNjksIDg0LCA2NSwgMTI4LCA5MCwgNjksIDgyLCA3OSwgMTI4LCA5MCwgNjksIDgyLCAyMDcsIDkwLCA2OSwgCi0gICAgNzgsIDEyOCwgOTAsIDY5LCA3NywgNzYsIDg5LCA2NSwgMTI4LCA5MCwgNjksIDc3LCA3NiwgNzQsIDY1LCAxMjgsIDkwLCAKLSAgICA2OSwgNTAsIDEyOCwgOTAsIDE5NywgOTAsIDY1LCA4OSwgNzgsIDEyOCwgOTAsIDY1LCA4OSwgNzMsIDc4LCAxMjgsIDkwLCAKLSAgICA2NSwgODksIDczLCAyMDYsIDkwLCA2NSwgODYsIDczLCA4OSwgNjUsIDc4LCA3MywgMTI4LCA5MCwgNjUsIDg0LCA2NSwgCisgICAgNzIsIDY1LCA3NywgOTAsIDE5MywgODMsIDg5LCA4MiwgNzMsIDY1LCAxOTUsIDg0LCA3MywgNzYsIDY4LCA2OSwgMTI4LCAKKyAgICA3MSwgODUsIDgyLCA3NywgODUsIDc1LCA3MiwgMjAxLCA3NywgNjUsIDEyOCwgNzcsIDY1LCA4OSwgNjksIDIwMywgNzcsIAorICAgIDY5LCA2OSwgODQsIDY5LCAyMDEsIDc4LCA3OSwgODQsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDcwLCA3MywgODYsIDY5LCAKKyAgICAxMjgsIDgwLCA2NSwgMTI4LCA4OSwgNjUsIDEyOCwgNzYsIDczLCA3MSwgNzIsIDIxMiwgODMsIDczLCA4OCwgMTI4LCA2OSwgCisgICAgNzMsIDcxLCA3MiwgODQsIDEyOCwgNzYsIDY5LCA4MCwgNjcsIDcyLCAxOTMsIDc4LCA2NSwgMTI4LCA4MywgNjksIDg2LCAKKyAgICA2OSwgNzgsIDEyOCwgNzYsIDc5LCA3OCwgMTk5LCA3OCwgNzMsIDc4LCA2OSwgMTI4LCA4NCwgODUsIDgyLCA3NSwgNzMsIAorICAgIDE5NSwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgMjA0LCA3OSwgODAsIDY5LCAyMDYsIDgyLCA2NSwgCisgICAgMTI4LCA4MywgNjUsIDEyOCwgODMsIDg1LCA3OCwgNjgsIDY1LCA3OCwgNjksIDgzLCAxOTcsIDg2LCA3MywgNjksIDIxMiwgCisgICAgNzYsIDY1LCAyMDcsIDkwLCA5MCwgODksIDg4LCAxMjgsIDkwLCA5MCwgODksIDg0LCAxMjgsIDkwLCA5MCwgODksIDgyLCAKKyAgICA4OCwgMTI4LCA5MCwgOTAsIDg5LCA4MiwgMTI4LCA5MCwgOTAsIDg5LCA4MCwgMTI4LCA5MCwgOTAsIDg5LCA2NSwgMTI4LCAKKyAgICA5MCwgOTAsIDg5LCAxMjgsIDkwLCA5MCwgODUsIDg4LCAxMjgsIDkwLCA5MCwgODUsIDgyLCA4OCwgMTI4LCA5MCwgOTAsIAorICAgIDg1LCA4MiwgMTI4LCA5MCwgOTAsIDg1LCA4MCwgMTI4LCA5MCwgOTAsIDg1LCAxMjgsIDkwLCA5MCwgODMsIDg5LCA2NSwgCisgICAgMTI4LCA5MCwgOTAsIDgzLCA2NSwgMTI4LCA5MCwgOTAsIDc5LCA4OCwgMTI4LCA5MCwgOTAsIDc5LCA4MCwgMTI4LCA5MCwgCisgICAgOTAsIDc5LCAxMjgsIDkwLCA5MCwgNzMsIDg4LCAxMjgsIDkwLCA5MCwgNzMsIDg0LCAxMjgsIDkwLCA5MCwgNzMsIDgwLCAKKyAgICAxMjgsIDkwLCA5MCwgNzMsIDY5LCA4OCwgMTI4LCA5MCwgOTAsIDczLCA2OSwgODQsIDEyOCwgOTAsIDkwLCA3MywgNjksIAorICAgIDgwLCAxMjgsIDkwLCA5MCwgNzMsIDY5LCAxMjgsIDkwLCA5MCwgNzMsIDEyOCwgOTAsIDkwLCA2OSwgODgsIDEyOCwgOTAsIAorICAgIDkwLCA2OSwgODAsIDEyOCwgOTAsIDkwLCA2OSwgNjksIDEyOCwgOTAsIDkwLCA2OSwgMTI4LCA5MCwgOTAsIDY1LCA4OCwgCisgICAgMTI4LCA5MCwgOTAsIDY1LCA4NCwgMTI4LCA5MCwgOTAsIDY1LCA4MCwgMTI4LCA5MCwgOTAsIDY1LCA2NSwgMTI4LCA5MCwgCisgICAgOTAsIDY1LCAxMjgsIDkwLCA4OSwgNzEsIDc5LCA4MywgMTI4LCA5MCwgODcsIDgzLCA4MCwgMTI4LCA5MCwgODcsIDc4LCAKKyAgICA3NCwgMTI4LCA5MCwgODcsIDc4LCA2NiwgODMsIDgwLCAxMjgsIDkwLCA4NywgNzQsIDEyOCwgOTAsIDg3LCA2NSwgODIsIAorICAgIDY1LCA3NSwgNjUsIDg5LCAxMjgsIDkwLCA4NywgNjUsIDEyOCwgOTAsIDg1LCA4NCwgMTI4LCA5MCwgODUsIDc5LCA4OCwgCisgICAgMTI4LCA5MCwgODUsIDc5LCA4MCwgMTI4LCA5MCwgODUsIDc5LCAxMjgsIDkwLCA4NSwgNzcsIDEyOCwgOTAsIDg1LCA2NiwgCisgICAgODUsIDgyLCAxMjgsIDkwLCA4NSwgNTMsIDEyOCwgOTAsIDg1LCAxODEsIDkwLCA4MywgNzIsIDY1LCAxMjgsIDkwLCA4MiwgCisgICAgNjUsIDEyOCwgOTAsIDgxLCA2NSwgODAsIDcyLCAxOTMsIDkwLCA3OSwgODQsIDEyOCwgOTAsIDc5LCA3OSwgMTI4LCA5MCwgCisgICAgNzksIDY1LCAxMjgsIDkwLCA3NiwgNjUsIDc3LCAxOTMsIDkwLCA3NiwgNjUsIDEyOCwgOTAsIDc2LCAxOTMsIDkwLCA3NCwgCisgICAgNjksIDEyOCwgOTAsIDczLCA5MCwgNTAsIDEyOCwgOTAsIDczLCA4MSwgNjUsIDY1LCAxMjgsIDkwLCA3MywgNzgsIDc5LCAKKyAgICA4MiwgMTI4LCA5MCwgNzMsIDc2LCA2OCwgNjksIDEyOCwgOTAsIDczLCA3MSwgOTAsIDY1LCAxOTksIDkwLCA3MywgNzEsIAorICAgIDEyOCwgOTAsIDczLCA2OCwgMTkzLCA5MCwgNzMsIDY2LCAxMjgsIDkwLCA3MywgMTk0LCA5MCwgNzMsIDUxLCAxMjgsIDkwLCAKKyAgICAyMDEsIDkwLCA3MiwgODksIDg4LCAxMjgsIDkwLCA3MiwgODksIDg0LCAxMjgsIDkwLCA3MiwgODksIDgyLCA4OCwgMTI4LCAKKyAgICA5MCwgNzIsIDg5LCA4MiwgMTI4LCA5MCwgNzIsIDg5LCA4MCwgMTI4LCA5MCwgNzIsIDg5LCAxMjgsIDkwLCA3MiwgODcsIAorICAgIDY5LCAxMjgsIDkwLCA3MiwgODcsIDY1LCAxMjgsIDkwLCA3MiwgODUsIDg4LCAxMjgsIDkwLCA3MiwgODUsIDg0LCAxMjgsIAorICAgIDkwLCA3MiwgODUsIDgyLCA4OCwgMTI4LCA5MCwgNzIsIDg1LCA4MiwgMTI4LCA5MCwgNzIsIDg1LCA4MCwgMTI4LCA5MCwgCisgICAgNzIsIDg1LCA3OSwgODgsIDEyOCwgOTAsIDcyLCA4NSwgNzksIDgwLCAxMjgsIDkwLCA3MiwgODUsIDc5LCAxMjgsIDkwLCAKKyAgICA3MiwgODUsIDEyOCwgOTAsIDcyLCA3OSwgODgsIDEyOCwgOTAsIDcyLCA3OSwgODQsIDEyOCwgOTAsIDcyLCA3OSwgODAsIAorICAgIDEyOCwgOTAsIDcyLCA3OSwgNzksIDEyOCwgOTAsIDcyLCA3OSwgMTI4LCA5MCwgNzIsIDczLCA4NiwgNjksIDg0LCA2OSwgCisgICAgMTI4LCA5MCwgNzIsIDczLCAxMjgsIDkwLCA3MiwgNjksIDg4LCAxMjgsIDkwLCA3MiwgNjksIDg0LCAxMjgsIDkwLCA3MiwgCisgICAgNjksIDgwLCAxMjgsIDkwLCA3MiwgNjksIDY5LCAxMjgsIDkwLCA3MiwgNjksIDEyOCwgOTAsIDcyLCAxOTcsIDkwLCA3MiwgCisgICAgNjUsIDg4LCAxMjgsIDkwLCA3MiwgNjUsIDg0LCAxMjgsIDkwLCA3MiwgNjUsIDgyLCAxMjgsIDkwLCA3MiwgNjUsIDgwLCAKKyAgICAxMjgsIDkwLCA3MiwgNjUsIDczLCA3OCwgMTI4LCA5MCwgNzIsIDY1LCA2NSwgMTI4LCA5MCwgNzIsIDY1LCAxMjgsIDkwLCAKKyAgICA3MiwgMTI4LCA5MCwgNjksIDg0LCA2NSwgMTI4LCA5MCwgNjksIDgyLCA3OSwgMTI4LCA5MCwgNjksIDgyLCAyMDcsIDkwLCAKKyAgICA2OSwgNzgsIDEyOCwgOTAsIDY5LCA3NywgNzYsIDg5LCA2NSwgMTI4LCA5MCwgNjksIDc3LCA3NiwgNzQsIDY1LCAxMjgsIAorICAgIDkwLCA2OSwgNTAsIDEyOCwgOTAsIDE5NywgOTAsIDY1LCA4OSwgNzgsIDEyOCwgOTAsIDY1LCA4OSwgNzMsIDc4LCAxMjgsIAorICAgIDkwLCA2NSwgODksIDczLCAyMDYsIDkwLCA2NSwgODYsIDczLCA4OSwgNjUsIDc4LCA3MywgMTI4LCA5MCwgNjUsIDg0LCA2NSwgCiAgICAgMTI4LCA5MCwgNjUsIDgyLCA4MSwgNjUsIDEyOCwgOTAsIDY1LCA4MSwgNjksIDE5OCwgOTAsIDY1LCA3NywgODgsIDEyOCwgCiAgICAgOTAsIDY1LCAyMDQsIDkwLCA2NSwgNzMsIDc4LCAxMjgsIDkwLCA2NSwgNzMsIDIwNiwgOTAsIDY1LCA3MywgMTI4LCA5MCwgCiAgICAgNjUsIDcyLCAxMjgsIDkwLCA2NSwgMjAwLCA5MCwgNjUsIDcxLCAxMjgsIDkwLCA2NSwgNjksIDcwLCAxMjgsIDkwLCA0OCwgCkBAIC01MjUsNzkgKzUyNSw3OSBAQAogICAgIDg0LCA4NSwgODQsIDg0LCA4OSwgMTI4LCA4NCwgODUsIDg0LCA2OSwgODksIDY1LCA4MywgNjUsIDg0LCAxMjgsIDg0LCA4NSwgCiAgICAgODQsIDEyOCwgODQsIDg1LCA4MiwgODgsIDEyOCwgODQsIDg1LCA4MiwgODUsIDEyOCwgODQsIDg1LCA4MiwgODQsIDc2LCAKICAgICA2OSwgMTI4LCA4NCwgODUsIDgyLCA3OSwgNTAsIDEyOCwgODQsIDg1LCA4MiwgNzgsIDgzLCA4NCwgNzMsIDc2LCA2OSwgCi0gICAgMTI4LCA4NCwgODUsIDgyLCA3OCwgNjksIDE5NiwgODQsIDg1LCA4MiwgMjA2LCA4NCwgODUsIDgyLCA2NiwgNjUsIDc4LCAKLSAgICAxMjgsIDg0LCA4NSwgODIsIDEyOCwgODQsIDg1LCA4MCwgMTI4LCA4NCwgODUsIDc5LCA4OCwgMTI4LCA4NCwgODUsIDc5LCAKLSAgICA4NCwgMTI4LCA4NCwgODUsIDc5LCA4MCwgMTI4LCA4NCwgODUsIDc5LCAxMjgsIDg0LCA4NSwgNzgsIDc4LCA4OSwgMTI4LCAKLSAgICA4NCwgODUsIDc3LCA2OSwgODQsIDY5LCA4MywgMTI4LCA4NCwgODUsIDc3LCA2NSwgNjksIDEyOCwgODQsIDg1LCA3NywgCi0gICAgMTI4LCA4NCwgODUsIDc2LCA3MywgODAsIDEyOCwgODQsIDg1LCA3NSwgODcsIDY5LCA3OCwgODQsIDczLCA4MywgMTI4LCAKLSAgICA4NCwgODUsIDc1LCAxMjgsIDg0LCA4NSwgNzEsIDgyLCA3MywgMjAzLCA4NCwgODUsIDcxLCA1MCwgMTI4LCA4NCwgODUsIAotICAgIDcxLCAxNzgsIDg0LCA4NSwgNjUsIDgyLCA2OSwgMTk5LCA4NCwgODUsIDY1LCA2OSwgODAsIDEyOCwgODQsIDg1LCA2NSwgCi0gICAgNjksIDEyOCwgODQsIDIxMywgODQsIDg0LCA4NSwgODUsIDEyOCwgODQsIDg0LCA4NSwgNjgsIDY4LCA2NSwgNzEsIDEyOCwgCi0gICAgODQsIDg0LCA4NSwgNjgsIDY4LCA2NSwgNjUsIDcxLCAxMjgsIDg0LCA4NCwgODUsIDEyOCwgODQsIDg0LCA4NCwgNzIsIDY1LCAKLSAgICAxMjgsIDg0LCA4NCwgODQsIDY1LCAxMjgsIDg0LCA4NCwgODMsIDg1LCAxMjgsIDg0LCA4NCwgODMsIDc5LCAxMjgsIDg0LCAKLSAgICA4NCwgODMsIDczLCAxMjgsIDg0LCA4NCwgODMsIDY5LCA2OSwgMTI4LCA4NCwgODQsIDgzLCA2OSwgMTI4LCA4NCwgODQsIAotICAgIDgzLCA2NSwgMTI4LCA4NCwgODQsIDc5LCA3OSwgMTI4LCA4NCwgODQsIDczLCA3MywgMTI4LCA4NCwgODQsIDczLCAxMjgsIAotICAgIDg0LCA4NCwgNzIsIDg3LCA2OSwgMTI4LCA4NCwgODQsIDcyLCA4NSwgMTI4LCA4NCwgODQsIDcyLCA3OSwgNzksIDEyOCwgCi0gICAgODQsIDg0LCA3MiwgNzksIDEyOCwgODQsIDg0LCA3MiwgNzMsIDEyOCwgODQsIDg0LCA3MiwgNjksIDY5LCAxMjgsIDg0LCAKLSAgICA4NCwgNzIsIDY5LCAxMjgsIDg0LCA4NCwgNzIsIDY1LCA2NSwgMTI4LCA4NCwgODQsIDcyLCAxMjgsIDg0LCA4NCwgNjksIAotICAgIDcyLCA2OSwgNzIsIDEyOCwgODQsIDg0LCA2OSwgNzIsIDY5LCAyMDAsIDg0LCA4NCwgNjksIDcyLCAxMjgsIDg0LCA4NCwgCi0gICAgNjksIDIwMCwgODQsIDg0LCA2OSwgNjksIDEyOCwgODQsIDg0LCA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDg0LCAKLSAgICA4NCwgNjUsIDg1LCAxMjgsIDg0LCA4NCwgNjUsIDczLCAxMjgsIDg0LCA4NCwgNjUsIDY1LCAxMjgsIDg0LCA4NCwgNTAsIAotICAgIDEyOCwgODQsIDgzLCA4NywgNjksIDEyOCwgODQsIDgzLCA4NywgNjUsIDEyOCwgODQsIDgzLCA4NiwgMTI4LCA4NCwgODMsIAotICAgIDgzLCA2OSwgMTI4LCA4NCwgODMsIDgzLCA2NSwgMTI4LCA4NCwgODMsIDcyLCA4NSwgNzEsIDgzLCAxMjgsIDg0LCA4MywgCi0gICAgNzIsIDc5LCA3OSwgNzUsIDEyOCwgODQsIDgzLCA3MiwgNzksIDc5LCAyMDMsIDg0LCA4MywgNzIsIDY5LCA4MywgMTI4LCAKLSAgICA4NCwgODMsIDcyLCA2OSwgNzEsIDEyOCwgODQsIDgzLCA3MiwgNjksIDE5OSwgODQsIDgzLCA3MiwgNjksIDEyOCwgODQsIAotICAgIDgzLCA3MiwgNjUsIDEyOCwgODQsIDgzLCA2OSwgODIsIDY5LCAxMjgsIDg0LCA4MywgNjUsIDY4LCA3MywgMTI4LCA4NCwgCi0gICAgODMsIDY1LCA2OCwgMjAxLCA4NCwgODMsIDY1LCA2NSwgNjgsIDczLCA4OSwgMTI4LCA4NCwgODMsIDY1LCA2NSwgMTI4LCAKLSAgICA4NCwgODMsIDE5MywgODQsIDgyLCA4OSwgNjYsIDc2LCA3MywgNzksIDIwNiwgODQsIDgyLCA4NSwgODQsIDcyLCAxMjgsIAotICAgIDg0LCA4MiwgODUsIDc4LCA3NSwgMTI4LCA4NCwgODIsIDg1LCA3OCwgNjcsIDY1LCA4NCwgNjksIDE5NiwgODQsIDgyLCA4NSwgCi0gICAgNzcsIDgwLCA2OSwgODQsIDEyOCwgODQsIDgyLCA4NSwgNjksIDEyOCwgODQsIDgyLCA4NSwgNjcsIDc1LCAxMjgsIDg0LCAKLSAgICA4MiwgNzksIDgwLCA3MywgNjcsIDY1LCAyMDQsIDg0LCA4MiwgNzksIDgwLCA3MiwgODksIDEyOCwgODQsIDgyLCA3OSwgNzcsIAotICAgIDczLCA3NSwgNzksIDgzLCA4OSwgNzgsIDY1LCA3MSwgNzcsIDY1LCAxMjgsIDg0LCA4MiwgNzksIDc3LCA3MywgNzUsIDc5LCAKLSAgICA4MCwgODMsIDczLCA3MCwgNzMsIDgzLCA4NCwgNzksIDc4LCAxMjgsIDg0LCA4MiwgNzksIDc3LCA3MywgNzUsIDc5LCA4MCwgCi0gICAgNjUsIDgyLCA2NSwgNzUsIDY1LCA3NiwgNjksIDgzLCA3NywgNjUsIDEyOCwgODQsIDgyLCA3OSwgNzcsIDczLCA3NSwgNzksIAotICAgIDc4LCAxMjgsIDg0LCA4MiwgNzksIDc3LCA3MywgNzUsIDc5LCAyMDYsIDg0LCA4MiwgNzksIDc3LCA3MywgNzUsIDc5LCA3NiwgCi0gICAgODksIDcxLCA3MywgODMsIDc3LCA2NSwgMTI4LCA4NCwgODIsIDc5LCA3NiwgNzYsIDY5LCA4OSwgNjYsIDg1LCA4MywgMTI4LCAKLSAgICA4NCwgODIsIDc5LCA3NSwgODUsIDg0LCA2NSwgODMsIDg0LCAyMDEsIDg0LCA4MiwgNzksIDY5LCA5MCwgNjksIDc4LCA3MywgCi0gICAgNjUsIDIwNiwgODQsIDgyLCA3MywgODUsIDc3LCA4MCwgNzIsIDEyOCwgODQsIDgyLCA3MywgODQsIDc5LCAyMTEsIDg0LCAKLSAgICA4MiwgNzMsIDg0LCA3MywgNzcsIDc5LCA4MiwgNzMsIDc5LCA3OCwgMTI4LCA4NCwgODIsIDczLCA4MywgNzMsIDc3LCA3OSwgCi0gICAgODUsIDEyOCwgODQsIDgyLCA3MywgODMsIDY5LCA3NywgNjksIDEyOCwgODQsIDgyLCA3MywgODAsIDc5LCA2OCwgMTI4LCAKLSAgICA4NCwgODIsIDczLCA4MCwgNzYsIDczLCAxMjgsIDg0LCA4MiwgNzMsIDgwLCA3NiwgMTk3LCA4NCwgODIsIDczLCA3OSwgCi0gICAgMjA2LCA4NCwgODIsIDczLCA3MywgODMsIDY1LCA4MCwgMTI4LCA4NCwgODIsIDczLCA3MSwgODIsIDY1LCA3NywgNzcsIDc5LCAKLSAgICAyMTEsIDg0LCA4MiwgNzMsIDcxLCA4MiwgNjUsIDIwNSwgODQsIDgyLCA3MywgNzEsIDc5LCA4MiwgNzEsIDc5LCA3OCwgCi0gICAgMTI4LCA4NCwgODIsIDczLCA3MCwgNzksIDc4LCA3MywgNjUsIDgzLCAxMjgsIDg0LCA4MiwgNzMsIDcwLCA3OSwgNzYsIDczLCAKLSAgICA2NSwgODQsIDE5NywgODQsIDgyLCA3MywgNjgsIDY5LCA3OCwgODQsIDEyOCwgODQsIDgyLCA3MywgNjgsIDY5LCA3OCwgCi0gICAgMjEyLCA4NCwgODIsIDczLCA2NywgNzksIDc2LCA3OSwgNzgsIDEyOCwgODQsIDgyLCA3MywgNjUsIDc4LCA3MSwgODUsIDc2LCAKLSAgICA2NSwgMjEwLCA4NCwgODIsIDczLCA2NSwgNzgsIDcxLCA3NiwgNjksIDQ1LCA4MiwgNzksIDg1LCA3OCwgMTk2LCA4NCwgODIsIAotICAgIDczLCA2NSwgNzgsIDcxLCA3NiwgNjksIDQ1LCA3MiwgNjksIDY1LCA2OCwgNjksIDE5NiwgODQsIDgyLCA3MywgNjUsIDc4LCAKLSAgICA3MSwgNzYsIDY5LCAxMjgsIDg0LCA4MiwgNzMsIDY1LCA3OCwgNzEsIDc2LCAxOTcsIDg0LCA4MiwgNzMsIDY1LCAxMjgsIAotICAgIDg0LCA4MiwgNzMsIDEyOCwgODQsIDgyLCA2OSwgODMsIDczLCA3NiwgNzYsIDc5LCAxMjgsIDg0LCA4MiwgNjksIDc4LCA2OCwgCi0gICAgMTI4LCA4NCwgODIsIDY5LCA3OCwgMTk2LCA4NCwgODIsIDY5LCA3NywgNzksIDc2LCA3OSwgNDUsIDUxLCAxMjgsIDg0LCAKLSAgICA4MiwgNjksIDc3LCA3OSwgNzYsIDc5LCA0NSwgNTAsIDEyOCwgODQsIDgyLCA2OSwgNzcsIDc5LCA3NiwgNzksIDQ1LCA0OSwgCi0gICAgMTI4LCA4NCwgODIsIDY5LCA2OSwgMTI4LCA4NCwgODIsIDY5LCAxOTcsIDg0LCA4MiwgNjksIDY1LCA2OCwgNzMsIDc4LCAKLSAgICA3MSwgMTI4LCA4NCwgODIsIDY1LCA4OSwgMTI4LCA4NCwgODIsIDY1LCA4MCwgNjksIDkwLCA3MywgODUsIDc3LCAxMjgsIAotICAgIDg0LCA4MiwgNjUsIDc4LCA4MywgODYsIDY5LCA4MiwgODMsIDY1LCAyMDQsIDg0LCA4MiwgNjUsIDc4LCA4MywgODAsIDc5LCAKLSAgICA4MywgNzMsIDg0LCA3MywgNzksIDIwNiwgODQsIDgyLCA2NSwgNzgsIDgzLCA3NywgNzMsIDIxMiwgODQsIDgyLCA2NSwgNzgsIAotICAgIDgzLCA3NywgNzMsIDgzLCA4MywgNzMsIDc5LCA3OCwgMTI4LCA4NCwgODIsIDY1LCA3OCwgODMsIDc3LCA3MywgODMsIDgzLCAKLSAgICA3MywgNzksIDIwNiwgODQsIDgyLCA2NSwgNzcsIDg3LCA2NSwgODksIDEyOCwgODQsIDgyLCA2NSwgNzcsIDEyOCwgODQsIAotICAgIDgyLCA2NSwgMjA1LCA4NCwgODIsIDY1LCA3MywgNzgsIDEyOCwgODQsIDgyLCA2NSwgNzMsIDIwNiwgODQsIDgyLCA2NSwgCi0gICAgNzMsIDc2LCA3MywgNzgsIDE5OSwgODQsIDgyLCA2NSwgNzAsIDcwLCA3MywgNjcsIDEyOCwgODQsIDgyLCA2NSwgNzAsIDcwLCAKLSAgICA3MywgMTk1LCA4NCwgODIsIDY1LCA2OCwgMTk3LCA4NCwgODIsIDY1LCA2NywgODQsIDc5LCA4MiwgMTI4LCA4NCwgODIsIAotICAgIDY1LCA2NywgNzUsIDEyOCwgODQsIDgyLCAxMjgsIDg0LCA3OSwgODgsIDEyOCwgODQsIDc5LCA4NywgNjksIDgyLCAxMjgsIAotICAgIDg0LCA3OSwgODUsIDgyLCA3OCwgNzksIDczLCAyMTEsIDg0LCA3OSwgODQsIDY1LCAyMDQsIDg0LCA3OSwgODQsIDEyOCwgCi0gICAgODQsIDc5LCA4MiwgODQsIDc5LCA3MywgODMsIDE5NywgODQsIDc5LCA4MiwgNjcsIDg1LCA3NiwgODUsIDgzLCAxMjgsIDg0LCAKLSAgICA3OSwgODIsIDY3LCA4NSwgNzYsIDg1LCAyMTEsIDg0LCA3OSwgODIsIDY3LCA3MiwgMTI4LCA4NCwgNzksIDgxLCAxMjgsIAotICAgIDg0LCA3OSwgODAsIDY2LCA2NSwgODIsIDEyOCwgODQsIDc5LCA4MCwgNDUsIDc2LCA3MywgNzEsIDcyLCA4NCwgNjksIDE5NiwgCi0gICAgODQsIDc5LCA4MCwgMTI4LCA4NCwgNzksIDIwOCwgODQsIDc5LCA3OSwgODQsIDcyLCAxMjgsIDg0LCA3OSwgNzksIDc4LCAKLSAgICAxMjgsIDg0LCA3OSwgNzgsIDc5LCA4MywgMTI4LCA4NCwgNzksIDc4LCA3MSwgODUsIDY5LCAxMjgsIDg0LCA3OSwgNzgsIAotICAgIDcxLCA4NSwgMTk3LCA4NCwgNzksIDc4LCA3MSwgMTI4LCA4NCwgNzksIDc4LCA2OSwgNDUsIDU2LCAxMjgsIDg0LCA3OSwgCi0gICAgNzgsIDY5LCA0NSwgNTUsIDEyOCwgODQsIDc5LCA3OCwgNjksIDQ1LCA1NCwgMTI4LCA4NCwgNzksIDc4LCA2OSwgNDUsIDUzLCAKLSAgICAxMjgsIDg0LCA3OSwgNzgsIDY5LCA0NSwgNTIsIDEyOCwgODQsIDc5LCA3OCwgNjksIDQ1LCA1MSwgMTI4LCA4NCwgNzksIAotICAgIDc4LCA2OSwgNDUsIDUwLCAxMjgsIDg0LCA3OSwgNzgsIDY5LCA0NSwgNDksIDEyOCwgODQsIDc5LCA3OCwgNjksIDEyOCwgCi0gICAgODQsIDc5LCA3OCwgNjUsIDIwNCwgODQsIDc5LCA3NywgODAsIDczLCAxMjgsIDg0LCA3OSwgNzcsIDY1LCA4NCwgNzksIAotICAgIDEyOCwgODQsIDc5LCA3NiwgNzksIDc4LCA3MSwgMTI4LCA4NCwgNzksIDc1LCA4OSwgMjA3LCA4NCwgNzksIDczLCA3NiwgCi0gICAgNjksIDg0LCAxMjgsIDg0LCA3OSwgNzEsIDY5LCA4NCwgNzIsIDY5LCA4MiwgMTI4LCA4NCwgNzksIDY4LCAyMDcsIDg0LCAKLSAgICA3OSwgNjUsIDc4LCA2OCwgNjUsIDc1LCA3MiwgNzMsIDY1LCA4NCwgMTI4LCA4NCwgNzksIDY1LCAxMjgsIDg0LCA3OCwgCisgICAgMTI4LCA4NCwgODUsIDgyLCA3OCwgNjksIDE5NiwgODQsIDg1LCA4MiwgMjA2LCA4NCwgODUsIDgyLCA3NSwgNzMsIDgzLCAKKyAgICAyMDAsIDg0LCA4NSwgODIsIDY2LCA2NSwgNzgsIDEyOCwgODQsIDg1LCA4MiwgMTI4LCA4NCwgODUsIDgwLCAxMjgsIDg0LCAKKyAgICA4NSwgNzksIDg4LCAxMjgsIDg0LCA4NSwgNzksIDg0LCAxMjgsIDg0LCA4NSwgNzksIDgwLCAxMjgsIDg0LCA4NSwgNzksIAorICAgIDEyOCwgODQsIDg1LCA3OCwgNzgsIDg5LCAxMjgsIDg0LCA4NSwgNzcsIDY5LCA4NCwgNjksIDgzLCAxMjgsIDg0LCA4NSwgCisgICAgNzcsIDY1LCA2OSwgMTI4LCA4NCwgODUsIDc3LCAxMjgsIDg0LCA4NSwgNzYsIDczLCA4MCwgMTI4LCA4NCwgODUsIDc1LCAKKyAgICA4NywgNjksIDc4LCA4NCwgNzMsIDgzLCAxMjgsIDg0LCA4NSwgNzUsIDEyOCwgODQsIDg1LCA3MSwgODIsIDczLCAyMDMsIAorICAgIDg0LCA4NSwgNzEsIDUwLCAxMjgsIDg0LCA4NSwgNzEsIDE3OCwgODQsIDg1LCA2NSwgODIsIDY5LCAxOTksIDg0LCA4NSwgCisgICAgNjUsIDY5LCA4MCwgMTI4LCA4NCwgODUsIDY1LCA2OSwgMTI4LCA4NCwgMjEzLCA4NCwgODQsIDg1LCA4NSwgMTI4LCA4NCwgCisgICAgODQsIDg1LCA2OCwgNjgsIDY1LCA3MSwgMTI4LCA4NCwgODQsIDg1LCA2OCwgNjgsIDY1LCA2NSwgNzEsIDEyOCwgODQsIDg0LCAKKyAgICA4NSwgMTI4LCA4NCwgODQsIDg0LCA3MiwgNjUsIDEyOCwgODQsIDg0LCA4NCwgNjUsIDEyOCwgODQsIDg0LCA4MywgODUsIAorICAgIDEyOCwgODQsIDg0LCA4MywgNzksIDEyOCwgODQsIDg0LCA4MywgNzMsIDEyOCwgODQsIDg0LCA4MywgNjksIDY5LCAxMjgsIAorICAgIDg0LCA4NCwgODMsIDY5LCAxMjgsIDg0LCA4NCwgODMsIDY1LCAxMjgsIDg0LCA4NCwgNzksIDc5LCAxMjgsIDg0LCA4NCwgCisgICAgNzMsIDczLCAxMjgsIDg0LCA4NCwgNzMsIDEyOCwgODQsIDg0LCA3MiwgODcsIDY5LCAxMjgsIDg0LCA4NCwgNzIsIDg1LCAKKyAgICAxMjgsIDg0LCA4NCwgNzIsIDc5LCA3OSwgMTI4LCA4NCwgODQsIDcyLCA3OSwgMTI4LCA4NCwgODQsIDcyLCA3MywgMTI4LCAKKyAgICA4NCwgODQsIDcyLCA2OSwgNjksIDEyOCwgODQsIDg0LCA3MiwgNjksIDEyOCwgODQsIDg0LCA3MiwgNjUsIDY1LCAxMjgsIAorICAgIDg0LCA4NCwgNzIsIDEyOCwgODQsIDg0LCA2OSwgNzIsIDY5LCA3MiwgMTI4LCA4NCwgODQsIDY5LCA3MiwgNjksIDIwMCwgCisgICAgODQsIDg0LCA2OSwgNzIsIDEyOCwgODQsIDg0LCA2OSwgMjAwLCA4NCwgODQsIDY5LCA2OSwgMTI4LCA4NCwgODQsIDY1LCAKKyAgICA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgODQsIDg0LCA2NSwgODUsIDEyOCwgODQsIDg0LCA2NSwgNzMsIDEyOCwgODQsIAorICAgIDg0LCA2NSwgNjUsIDEyOCwgODQsIDg0LCA1MCwgMTI4LCA4NCwgODMsIDg3LCA2OSwgMTI4LCA4NCwgODMsIDg3LCA2NSwgCisgICAgMTI4LCA4NCwgODMsIDg2LCAxMjgsIDg0LCA4MywgODMsIDY5LCAxMjgsIDg0LCA4MywgODMsIDY1LCAxMjgsIDg0LCA4MywgCisgICAgNzIsIDg1LCA3MSwgODMsIDEyOCwgODQsIDgzLCA3MiwgNzksIDc5LCA3NSwgMTI4LCA4NCwgODMsIDcyLCA3OSwgNzksIAorICAgIDIwMywgODQsIDgzLCA3MiwgNjksIDgzLCAxMjgsIDg0LCA4MywgNzIsIDY5LCA3MSwgMTI4LCA4NCwgODMsIDcyLCA2OSwgCisgICAgMTk5LCA4NCwgODMsIDcyLCA2OSwgMTI4LCA4NCwgODMsIDcyLCA2NSwgMTI4LCA4NCwgODMsIDY5LCA4MiwgNjksIDEyOCwgCisgICAgODQsIDgzLCA2NSwgNjgsIDczLCAxMjgsIDg0LCA4MywgNjUsIDY4LCAyMDEsIDg0LCA4MywgNjUsIDY1LCA2OCwgNzMsIDg5LCAKKyAgICAxMjgsIDg0LCA4MywgNjUsIDY1LCAxMjgsIDg0LCA4MywgMTkzLCA4NCwgODIsIDg5LCA2NiwgNzYsIDczLCA3OSwgMjA2LCAKKyAgICA4NCwgODIsIDg1LCA4NCwgNzIsIDEyOCwgODQsIDgyLCA4NSwgNzgsIDc1LCAxMjgsIDg0LCA4MiwgODUsIDc4LCA2NywgNjUsIAorICAgIDg0LCA2OSwgMTk2LCA4NCwgODIsIDg1LCA3NywgODAsIDY5LCA4NCwgMTI4LCA4NCwgODIsIDg1LCA2OSwgMTI4LCA4NCwgCisgICAgODIsIDg1LCA2NywgNzUsIDEyOCwgODQsIDgyLCA3OSwgODAsIDczLCA2NywgNjUsIDIwNCwgODQsIDgyLCA3OSwgODAsIDcyLCAKKyAgICA4OSwgMTI4LCA4NCwgODIsIDc5LCA3NywgNzMsIDc1LCA3OSwgODMsIDg5LCA3OCwgNjUsIDcxLCA3NywgNjUsIDEyOCwgODQsIAorICAgIDgyLCA3OSwgNzcsIDczLCA3NSwgNzksIDgwLCA4MywgNzMsIDcwLCA3MywgODMsIDg0LCA3OSwgNzgsIDEyOCwgODQsIDgyLCAKKyAgICA3OSwgNzcsIDczLCA3NSwgNzksIDgwLCA2NSwgODIsIDY1LCA3NSwgNjUsIDc2LCA2OSwgODMsIDc3LCA2NSwgMTI4LCA4NCwgCisgICAgODIsIDc5LCA3NywgNzMsIDc1LCA3OSwgNzgsIDEyOCwgODQsIDgyLCA3OSwgNzcsIDczLCA3NSwgNzksIDIwNiwgODQsIDgyLCAKKyAgICA3OSwgNzcsIDczLCA3NSwgNzksIDc2LCA4OSwgNzEsIDczLCA4MywgNzcsIDY1LCAxMjgsIDg0LCA4MiwgNzksIDc2LCA3NiwgCisgICAgNjksIDg5LCA2NiwgODUsIDgzLCAxMjgsIDg0LCA4MiwgNzksIDc1LCA4NSwgODQsIDY1LCA4MywgODQsIDIwMSwgODQsIDgyLCAKKyAgICA3OSwgNjksIDkwLCA2OSwgNzgsIDczLCA2NSwgMjA2LCA4NCwgODIsIDczLCA4NSwgNzcsIDgwLCA3MiwgMTI4LCA4NCwgODIsIAorICAgIDczLCA4NCwgNzksIDIxMSwgODQsIDgyLCA3MywgODQsIDczLCA3NywgNzksIDgyLCA3MywgNzksIDc4LCAxMjgsIDg0LCA4MiwgCisgICAgNzMsIDgzLCA3MywgNzcsIDc5LCA4NSwgMTI4LCA4NCwgODIsIDczLCA4MywgNjksIDc3LCA2OSwgMTI4LCA4NCwgODIsIDczLCAKKyAgICA4MCwgNzksIDY4LCAxMjgsIDg0LCA4MiwgNzMsIDgwLCA3NiwgNzMsIDEyOCwgODQsIDgyLCA3MywgODAsIDc2LCAxOTcsIAorICAgIDg0LCA4MiwgNzMsIDc5LCAyMDYsIDg0LCA4MiwgNzMsIDczLCA4MywgNjUsIDgwLCAxMjgsIDg0LCA4MiwgNzMsIDcxLCA4MiwgCisgICAgNjUsIDc3LCA3NywgNzksIDIxMSwgODQsIDgyLCA3MywgNzEsIDgyLCA2NSwgMjA1LCA4NCwgODIsIDczLCA3MSwgNzksIDgyLCAKKyAgICA3MSwgNzksIDc4LCAxMjgsIDg0LCA4MiwgNzMsIDcwLCA3OSwgNzgsIDczLCA2NSwgODMsIDEyOCwgODQsIDgyLCA3MywgNzAsIAorICAgIDc5LCA3NiwgNzMsIDY1LCA4NCwgMTk3LCA4NCwgODIsIDczLCA2OCwgNjksIDc4LCA4NCwgMTI4LCA4NCwgODIsIDczLCA2OCwgCisgICAgNjksIDc4LCAyMTIsIDg0LCA4MiwgNzMsIDY3LCA3OSwgNzYsIDc5LCA3OCwgMTI4LCA4NCwgODIsIDczLCA2NSwgNzgsIDcxLCAKKyAgICA4NSwgNzYsIDY1LCAyMTAsIDg0LCA4MiwgNzMsIDY1LCA3OCwgNzEsIDc2LCA2OSwgNDUsIDgyLCA3OSwgODUsIDc4LCAxOTYsIAorICAgIDg0LCA4MiwgNzMsIDY1LCA3OCwgNzEsIDc2LCA2OSwgNDUsIDcyLCA2OSwgNjUsIDY4LCA2OSwgMTk2LCA4NCwgODIsIDczLCAKKyAgICA2NSwgNzgsIDcxLCA3NiwgNjksIDEyOCwgODQsIDgyLCA3MywgNjUsIDc4LCA3MSwgNzYsIDE5NywgODQsIDgyLCA3MywgNjUsIAorICAgIDEyOCwgODQsIDgyLCA3MywgMTI4LCA4NCwgODIsIDY5LCA4MywgNzMsIDc2LCA3NiwgNzksIDEyOCwgODQsIDgyLCA2OSwgCisgICAgNzgsIDY4LCAxMjgsIDg0LCA4MiwgNjksIDc4LCAxOTYsIDg0LCA4MiwgNjksIDc3LCA3OSwgNzYsIDc5LCA0NSwgNTEsIAorICAgIDEyOCwgODQsIDgyLCA2OSwgNzcsIDc5LCA3NiwgNzksIDQ1LCA1MCwgMTI4LCA4NCwgODIsIDY5LCA3NywgNzksIDc2LCA3OSwgCisgICAgNDUsIDQ5LCAxMjgsIDg0LCA4MiwgNjksIDY5LCAxMjgsIDg0LCA4MiwgNjksIDE5NywgODQsIDgyLCA2OSwgNjUsIDY4LCAKKyAgICA3MywgNzgsIDcxLCAxMjgsIDg0LCA4MiwgNjUsIDg5LCAxMjgsIDg0LCA4MiwgNjUsIDgwLCA2OSwgOTAsIDczLCA4NSwgNzcsIAorICAgIDEyOCwgODQsIDgyLCA2NSwgNzgsIDgzLCA4NiwgNjksIDgyLCA4MywgNjUsIDIwNCwgODQsIDgyLCA2NSwgNzgsIDgzLCA4MCwgCisgICAgNzksIDgzLCA3MywgODQsIDczLCA3OSwgMjA2LCA4NCwgODIsIDY1LCA3OCwgODMsIDc3LCA3MywgMjEyLCA4NCwgODIsIDY1LCAKKyAgICA3OCwgODMsIDc3LCA3MywgODMsIDgzLCA3MywgNzksIDc4LCAxMjgsIDg0LCA4MiwgNjUsIDc4LCA4MywgNzcsIDczLCA4MywgCisgICAgODMsIDczLCA3OSwgMjA2LCA4NCwgODIsIDY1LCA3NywgODcsIDY1LCA4OSwgMTI4LCA4NCwgODIsIDY1LCA3NywgMTI4LCAKKyAgICA4NCwgODIsIDY1LCAyMDUsIDg0LCA4MiwgNjUsIDczLCA3OCwgMTI4LCA4NCwgODIsIDY1LCA3MywgMjA2LCA4NCwgODIsIAorICAgIDY1LCA3MywgNzYsIDczLCA3OCwgMTk5LCA4NCwgODIsIDY1LCA3MCwgNzAsIDczLCA2NywgMTI4LCA4NCwgODIsIDY1LCA3MCwgCisgICAgNzAsIDczLCAxOTUsIDg0LCA4MiwgNjUsIDY4LCAxOTcsIDg0LCA4MiwgNjUsIDY3LCA4NCwgNzksIDgyLCAxMjgsIDg0LCAKKyAgICA4MiwgNjUsIDY3LCA3NSwgMTI4LCA4NCwgODIsIDEyOCwgODQsIDc5LCA4OCwgMTI4LCA4NCwgNzksIDg3LCA2OSwgODIsIAorICAgIDEyOCwgODQsIDc5LCA4NSwgODIsIDc4LCA3OSwgNzMsIDIxMSwgODQsIDc5LCA4NCwgNjUsIDIwNCwgODQsIDc5LCA4NCwgCisgICAgMTI4LCA4NCwgNzksIDgyLCA4NCwgNzksIDczLCA4MywgMTk3LCA4NCwgNzksIDgyLCA2NywgODUsIDc2LCA4NSwgODMsIAorICAgIDEyOCwgODQsIDc5LCA4MiwgNjcsIDg1LCA3NiwgODUsIDIxMSwgODQsIDc5LCA4MiwgNjcsIDcyLCAxMjgsIDg0LCA3OSwgCisgICAgODEsIDEyOCwgODQsIDc5LCA4MCwgNjYsIDY1LCA4MiwgMTI4LCA4NCwgNzksIDgwLCA0NSwgNzYsIDczLCA3MSwgNzIsIDg0LCAKKyAgICA2OSwgMTk2LCA4NCwgNzksIDgwLCAxMjgsIDg0LCA3OSwgMjA4LCA4NCwgNzksIDc5LCA4NCwgNzIsIDEyOCwgODQsIDc5LCAKKyAgICA3OSwgNzgsIDEyOCwgODQsIDc5LCA3OCwgNzksIDgzLCAxMjgsIDg0LCA3OSwgNzgsIDcxLCA4NSwgNjksIDEyOCwgODQsIAorICAgIDc5LCA3OCwgNzEsIDg1LCAxOTcsIDg0LCA3OSwgNzgsIDcxLCAxMjgsIDg0LCA3OSwgNzgsIDY5LCA0NSwgNTYsIDEyOCwgCisgICAgODQsIDc5LCA3OCwgNjksIDQ1LCA1NSwgMTI4LCA4NCwgNzksIDc4LCA2OSwgNDUsIDU0LCAxMjgsIDg0LCA3OSwgNzgsIDY5LCAKKyAgICA0NSwgNTMsIDEyOCwgODQsIDc5LCA3OCwgNjksIDQ1LCA1MiwgMTI4LCA4NCwgNzksIDc4LCA2OSwgNDUsIDUxLCAxMjgsIAorICAgIDg0LCA3OSwgNzgsIDY5LCA0NSwgNTAsIDEyOCwgODQsIDc5LCA3OCwgNjksIDQ1LCA0OSwgMTI4LCA4NCwgNzksIDc4LCA2OSwgCisgICAgMTI4LCA4NCwgNzksIDc4LCA2NSwgMjA0LCA4NCwgNzksIDc3LCA4MCwgNzMsIDEyOCwgODQsIDc5LCA3NywgNjUsIDg0LCAKKyAgICA3OSwgMTI4LCA4NCwgNzksIDc2LCA3OSwgNzgsIDcxLCAxMjgsIDg0LCA3OSwgNzUsIDg5LCAyMDcsIDg0LCA3OSwgNzMsIAorICAgIDc2LCA2OSwgODQsIDEyOCwgODQsIDc5LCA3MSwgNjksIDg0LCA3MiwgNjksIDgyLCAxMjgsIDg0LCA3OSwgNjgsIDIwNywgCisgICAgODQsIDc5LCA2NSwgNzgsIDY4LCA2NSwgNzUsIDcyLCA3MywgNjUsIDg0LCAxMjgsIDg0LCA3OSwgNjUsIDEyOCwgODQsIDc4LCAKICAgICAxMjgsIDg0LCA3NiwgODYsIDEyOCwgODQsIDc2LCA4NSwgMTI4LCA4NCwgNzYsIDc5LCAxMjgsIDg0LCA3NiwgNzMsIDEyOCwgCiAgICAgODQsIDc2LCA3MiwgODksIDY1LCAxMjgsIDg0LCA3NiwgNzIsIDg3LCA2OSwgMTI4LCA4NCwgNzYsIDcyLCA4NSwgMTI4LCAKICAgICA4NCwgNzYsIDcyLCA3OSwgNzksIDEyOCwgODQsIDc2LCA3MiwgNzksIDEyOCwgODQsIDc2LCA3MiwgNzMsIDEyOCwgODQsIApAQCAtNzk2LDQwOSArNzk2LDQxMCBAQAogICAgIDY5LCA4NCwgMTI4LCA4MywgODUsIDY1LCA2OSwgNzgsIDEyOCwgODMsIDg1LCA2NSwgNjksIDEyOCwgODMsIDg1LCA2NSwgCiAgICAgMTI4LCA4MywgMjEzLCA4MywgODQsIDg4LCAxMjgsIDgzLCA4NCwgODcsIDY1LCAxMjgsIDgzLCA4NCwgODUsIDY4LCA4OSwgCiAgICAgMTI4LCA4MywgODQsIDg1LCA2NywgNzUsIDQ1LCA3OSwgODUsIDIxMiwgODMsIDg0LCA4MywgMTI4LCA4MywgODQsIDgyLCAKLSAgICA3OSwgNzUsIDY5LCA4MywgMTI4LCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCAyMTEsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIAotICAgIDQ1LCA1NywgMTI4LCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCA0NSwgNTYsIDEyOCwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgCi0gICAgNDUsIDU1LCAxMjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIDQ1LCA1NCwgMTI4LCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCAKLSAgICA0NSwgNTMsIDEyOCwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgNDUsIDUyLCAxMjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIAotICAgIDQ1LCA1MSwgMTI4LCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCA0NSwgNTAsIDEyOCwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgCi0gICAgNDUsIDQ5LCA0OSwgMTI4LCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCA0NSwgNDksIDQ4LCAxMjgsIDgzLCA4NCwgODIsIDc5LCAKLSAgICA3NSwgNjksIDQ1LCA0OSwgMTI4LCA4MywgODQsIDgyLCA3OSwgNzUsIDE5NywgODMsIDg0LCA4MiwgNzMsIDgwLCA2OSwgCi0gICAgMTI4LCA4MywgODQsIDgyLCA3MywgNzgsIDcxLCAxMjgsIDgzLCA4NCwgODIsIDczLCA3OCwgMTk5LCA4MywgODQsIDgyLCAKLSAgICA3MywgNzUsIDY5LCA4NCwgNzIsIDgyLCA3OSwgODUsIDcxLCA3MiwgMTI4LCA4MywgODQsIDgyLCA3MywgNjgsIDY5LCAxMjgsIAotICAgIDgzLCA4NCwgODIsIDczLCA2NywgODQsIDc2LCAyMTcsIDgzLCA4NCwgODIsIDY5LCA4NCwgNjcsIDcyLCA2OSwgMTk2LCA4MywgCi0gICAgODQsIDgyLCA2OSwgODMsIDIxMSwgODMsIDg0LCA4MiwgNjksIDc4LCA3MSwgODQsIDcyLCAxMjgsIDgzLCA4NCwgODIsIDY5LCAKLSAgICA2NSwgNzcsIDY5LCA4MiwgMTI4LCA4MywgODQsIDgyLCA2NSwgODcsIDY2LCA2OSwgODIsIDgyLCA4OSwgMTI4LCA4MywgODQsIAotICAgIDgyLCA2NSwgODQsIDg1LCA3NywgNDUsIDUwLCAxMjgsIDgzLCA4NCwgODIsIDY1LCA4NCwgODUsIDc3LCAxMjgsIDgzLCA4NCwgCi0gICAgODIsIDY1LCA4NCwgODUsIDIwNSwgODMsIDg0LCA4MiwgNjUsIDg0LCA3MywgNjUsIDIwNiwgODMsIDg0LCA4MiwgNjUsIDczLCAKLSAgICA3OCwgNjksIDgyLCAxMjgsIDgzLCA4NCwgODIsIDY1LCA3MywgNzEsIDcyLCA4NCwgNzgsIDY5LCA4MywgODMsIDEyOCwgODMsIAotICAgIDg0LCA4MiwgNjUsIDczLCA3MSwgNzIsIDIxMiwgODMsIDg0LCA4MiwgNjUsIDczLCA3MCwgMTI4LCA4MywgODQsIDgyLCA2NSwgCi0gICAgNzEsIDcxLCA3MywgODMsIDc3LCA2NSwgODQsIDY1LCAxMjgsIDgzLCA4NCwgNzksIDg2LCA2OSwgMTI4LCA4MywgODQsIDc5LCAKLSAgICA4MiwgNjksIDEyOCwgODMsIDg0LCA3OSwgODAsIDg3LCA2NSwgODQsIDY3LCA3MiwgMTI4LCA4MywgODQsIDc5LCA4MCwgODAsIAotICAgIDczLCA3OCwgNzEsIDEyOCwgODMsIDg0LCA3OSwgODAsIDgwLCA2NSwgNzEsIDY5LCAxMjgsIDgzLCA4NCwgNzksIDgwLCAKLSAgICAxMjgsIDgzLCA4NCwgNzksIDIwOCwgODMsIDg0LCA3OSwgNzgsIDY5LCAxMjgsIDgzLCA4NCwgNzksIDY3LCA3NSwgMTI4LCAKLSAgICA4MywgODQsIDczLCA3NywgNzcsIDY5LCAxMjgsIDgzLCA4NCwgNzMsIDc2LCAyMDQsIDgzLCA4NCwgNzMsIDc2LCAxOTcsIAotICAgIDgzLCA4NCwgNzMsIDcxLCA3NywgNjUsIDEyOCwgODMsIDg0LCA2OSwgODAsIDEyOCwgODMsIDg0LCA2OSwgNzcsIDEyOCwgCi0gICAgODMsIDg0LCA2OSwgNjUsIDc3LCA3MywgNzgsIDE5OSwgODMsIDg0LCA2OSwgNjUsIDc3LCAxMjgsIDgzLCA4NCwgNjksIDY1LCAKLSAgICAyMDUsIDgzLCA4NCwgNjUsIDg2LCA4MiwgNzksIDg1LCAxMjgsIDgzLCA4NCwgNjUsIDg2LCA4MiwgNzksIDgzLCAxMjgsIAotICAgIDgzLCA4NCwgNjUsIDg2LCA4MiwgNzksIDIxMSwgODMsIDg0LCA2NSwgODUsIDgyLCA3OSwgODMsIDEyOCwgODMsIDg0LCA2NSwgCi0gICAgODQsIDg1LCAxOTcsIDgzLCA4NCwgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDgzLCA4NCwgNjUsIDg0LCA2OSwgODIsIDgzLCAKLSAgICAxMjgsIDgzLCA4NCwgNjUsIDg0LCA2OSwgMTI4LCA4MywgODQsIDY1LCA4MiwgMjEyLCA4MywgODQsIDY1LCA4MiwgODMsIAotICAgIDEyOCwgODMsIDg0LCA2NSwgODIsIDgyLCA2OSwgMTk2LCA4MywgODQsIDY1LCA4MiwgNzUsIDEyOCwgODMsIDg0LCA2NSwgCi0gICAgODIsIDEyOCwgODMsIDg0LCA2NSwgMjEwLCA4MywgODQsIDY1LCA3OCwgNjgsIDgzLCA4NCwgNzMsIDc2LCA3NiwgMTI4LCAKLSAgICA4MywgODQsIDY1LCA3OCwgNjgsIDY1LCA4MiwgMTk2LCA4MywgODQsIDY1LCA3OCwgNjgsIDEyOCwgODMsIDg0LCA2NSwgNzgsIAotICAgIDEyOCwgODMsIDg0LCA2NSwgNzYsIDc2LCA3MywgNzksIDc4LCAxMjgsIDgzLCA4NCwgNjUsIDcwLCA3MCwgMTI4LCA4MywgCi0gICAgODQsIDY1LCA3MCwgMTk4LCA4MywgODQsIDY1LCA2NywgNjcsIDY1LCA4NCwgNzksIDEyOCwgODMsIDg0LCA2NSwgNjcsIDY3LCAKLSAgICA2NSwgODQsIDczLCA4MywgODMsIDczLCA3NywgNzksIDEyOCwgODMsIDg0LCA1MCwgMTI4LCA4MywgODMsIDg5LCA4OCwgCi0gICAgMTI4LCA4MywgODMsIDg5LCA4NCwgMTI4LCA4MywgODMsIDg5LCA4MiwgODgsIDEyOCwgODMsIDgzLCA4OSwgODIsIDEyOCwgCi0gICAgODMsIDgzLCA4OSwgODAsIDEyOCwgODMsIDgzLCA4OSwgMTI4LCA4MywgODMsIDg1LCA4OCwgMTI4LCA4MywgODMsIDg1LCAKLSAgICA4NSwgMTI4LCA4MywgODMsIDg1LCA4NCwgMTI4LCA4MywgODMsIDg1LCA4MCwgMTI4LCA4MywgODMsIDc5LCA4OCwgMTI4LCAKLSAgICA4MywgODMsIDc5LCA4NCwgMTI4LCA4MywgODMsIDc5LCA4MCwgMTI4LCA4MywgODMsIDc5LCA3OSwgMTI4LCA4MywgODMsIAotICAgIDc5LCAxMjgsIDgzLCA4MywgNzMsIDg4LCAxMjgsIDgzLCA4MywgNzMsIDg0LCAxMjgsIDgzLCA4MywgNzMsIDgwLCAxMjgsIAotICAgIDgzLCA4MywgNzMsIDczLCAxMjgsIDgzLCA4MywgNzMsIDY5LCA4OCwgMTI4LCA4MywgODMsIDczLCA2OSwgODAsIDEyOCwgCi0gICAgODMsIDgzLCA3MywgNjksIDEyOCwgODMsIDgzLCA3MywgMTI4LCA4MywgODMsIDcyLCA2OSwgMTI4LCA4MywgODMsIDY5LCAKLSAgICA4OCwgMTI4LCA4MywgODMsIDY5LCA4MCwgMTI4LCA4MywgODMsIDY5LCA2OSwgMTI4LCA4MywgODMsIDY1LCA4OCwgMTI4LCAKLSAgICA4MywgODMsIDY1LCA4NSwgMTI4LCA4MywgODMsIDY1LCA4NCwgMTI4LCA4MywgODMsIDY1LCA4MCwgMTI4LCA4MywgODMsIAotICAgIDY1LCA3OCwgNzEsIDg5LCA2OSwgNzksIDgyLCA3MywgNzgsIDcyLCA3MywgNjksIDg1LCA3MiwgMTI4LCA4MywgODMsIDY1LCAKLSAgICA3OCwgNzEsIDg0LCA3MywgNzUsIDY5LCA4NSwgODQsIDQ1LCA4MCwgNzMsIDY5LCA4NSwgODAsIDEyOCwgODMsIDgzLCA2NSwgCi0gICAgNzgsIDcxLCA4NCwgNzMsIDc1LCA2OSwgODUsIDg0LCAxMjgsIDgzLCA4MywgNjUsIDc4LCA3MSwgODQsIDcyLCA3MywgNjksIAotICAgIDg1LCA4NCwgNzIsIDEyOCwgODMsIDgzLCA2NSwgNzgsIDcxLCA4MywgNzMsIDc5LCA4MywgNDUsIDg0LCA3MywgNzUsIDY5LCAKLSAgICA4NSwgODQsIDEyOCwgODMsIDgzLCA2NSwgNzgsIDcxLCA4MywgNzMsIDc5LCA4MywgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgCi0gICAgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDgzLCA3MywgNzksIDgzLCA0NSwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgMTI4LCAKLSAgICA4MywgODMsIDY1LCA3OCwgNzEsIDgzLCA3MywgNzksIDgzLCAxMjgsIDgzLCA4MywgNjUsIDc4LCA3MSwgODIsIDczLCA2OSwgCi0gICAgODUsIDc2LCA0NSwgNzUsIDcyLCA3MywgNjksIDg1LCA3NSwgNzIsIDEyOCwgODMsIDgzLCA2NSwgNzgsIDcxLCA4MiwgNzMsIAotICAgIDY5LCA4NSwgNzYsIDEyOCwgODMsIDgzLCA2NSwgNzgsIDcxLCA4MCwgNzMsIDY5LCA4NSwgODAsIDEyOCwgODMsIDgzLCA2NSwgCi0gICAgNzgsIDcxLCA3OCwgNzMsIDY5LCA4NSwgNzgsIDEyOCwgODMsIDgzLCA2NSwgNzgsIDcxLCA3NywgNzMsIDY5LCA4NSwgNzcsIAotICAgIDEyOCwgODMsIDgzLCA2NSwgNzgsIDcxLCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCAxMjgsIDgzLCA4MywgNjUsIDc4LCA3MSwgCi0gICAgNzMsIDY5LCA4NSwgNzgsIDcxLCAxMjgsIDgzLCA4MywgNjUsIDc4LCA3MSwgNzIsIDczLCA2OSwgODUsIDcyLCAxMjgsIDgzLCAKLSAgICA4MywgNjUsIDc4LCA3MSwgNjcsIDczLCA2OSwgODUsIDY3LCA0NSwgNzIsIDczLCA2OSwgODUsIDcyLCAxMjgsIDgzLCA4MywgCi0gICAgNjUsIDc4LCA3MSwgNjcsIDczLCA2OSwgODUsIDY3LCAxMjgsIDgzLCA4MywgNjUsIDc4LCA3MSwgNjUsIDgyLCA2NSwgNjksIAotICAgIDY1LCAxMjgsIDgzLCA4MywgNjUsIDczLCAxMjgsIDgzLCA4MywgNjUsIDY1LCAxMjgsIDgzLCA4MywgNTEsIDEyOCwgODMsIAotICAgIDgzLCA1MCwgMTI4LCA4MywgODIsIDEyOCwgODMsIDgxLCA4NSwgNzMsIDgzLCAyMDAsIDgzLCA4MSwgODUsIDczLCA4MiwgCi0gICAgODIsIDY5LCAyMDQsIDgzLCA4MSwgODUsIDczLCA3MSwgNzEsIDc2LCAxOTcsIDgzLCA4MSwgODUsIDY1LCAyMTIsIDgzLCAKLSAgICA4MSwgODUsIDY1LCA4MiwgNjksIDgzLCAxMjgsIDgzLCA4MSwgODUsIDY1LCA4MiwgNjksIDY4LCAxMjgsIDgzLCA4MSwgODUsIAotICAgIDY1LCA4MiwgNjksIDEyOCwgODMsIDgwLCA4NywgNjUsIDEyOCwgODMsIDgwLCA4NSwgNzgsIDcxLCAyMTEsIDgzLCA4MCwgCi0gICAgODIsIDc5LCA4NSwgODQsIDEyOCwgODMsIDgwLCA4MiwgNzMsIDc4LCA3MSwgODMsIDEyOCwgODMsIDgwLCA4MiwgNzMsIDc4LCAKLSAgICA3MSwgMTI4LCA4MywgODAsIDgyLCA2OSwgNjcsIDcyLCA3MSwgNjksIDgzLCA2NSwgNzgsIDE5OSwgODMsIDgwLCA3OSwgODUsIAotICAgIDg0LCA3MywgNzgsIDE5OSwgODMsIDgwLCA3OSwgODQsIDEyOCwgODMsIDgwLCA3OSwgNzksIDc4LCAxMjgsIDgzLCA4MCwgCi0gICAgNzYsIDczLCA4NCwgODQsIDczLCA3OCwgMTk5LCA4MywgODAsIDc2LCA2NSwgODMsIDcyLCA3MywgNzgsIDE5OSwgODMsIDgwLCAKLSAgICA3MywgODIsIDczLCA4NCwgODUsIDIxMSwgODMsIDgwLCA3MywgODIsIDczLCA4NCwgMTI4LCA4MywgODAsIDczLCA4MiwgNzMsIAotICAgIDIxMiwgODMsIDgwLCA3MywgODIsIDY1LCA3OCwgODQsIDEyOCwgODMsIDgwLCA3MywgODIsIDY1LCA3NiwgMTI4LCA4MywgCi0gICAgODAsIDczLCA4MiwgNjUsIDIwNCwgODMsIDgwLCA3MywgNjgsIDY5LCA4MiwgMjE3LCA4MywgODAsIDczLCA2NywgNjksIAotICAgIDEyOCwgODMsIDgwLCA3MiwgNjksIDgyLCA3MywgNjcsIDY1LCAyMDQsIDgzLCA4MCwgNjksIDgzLCA3NywgNzMsIDc2LCAKLSAgICAyMDcsIDgzLCA4MCwgNjksIDY5LCA2OCwgNjYsIDc5LCA2NSwgODQsIDEyOCwgODMsIDgwLCA2OSwgNjksIDY3LCA3MiwgCi0gICAgMTI4LCA4MywgODAsIDY5LCA2OSwgNjcsIDIwMCwgODMsIDgwLCA2OSwgNjcsIDczLCA2NSwgNzYsIDEyOCwgODMsIDgwLCAKLSAgICA2OSwgNjUsIDgyLCAxMjgsIDgzLCA4MCwgNjksIDY1LCA3NSwgNjksIDgyLCAxMjgsIDgzLCA4MCwgNjksIDY1LCA3NSwgNjksIAotICAgIDIxMCwgODMsIDgwLCA2OSwgNjUsIDc1LCA0NSwgNzgsIDc5LCA0NSwgNjksIDg2LCA3MywgMjA0LCA4MywgODAsIDY1LCA4NCwgCi0gICAgNzIsIDczLCAxMjgsIDgzLCA4MCwgNjUsIDgyLCA3NSwgNzYsIDczLCA3OCwgMTk5LCA4MywgODAsIDY1LCA4MiwgNzUsIDc2LCAKLSAgICA2OSwgODMsIDEyOCwgODMsIDgwLCA2NSwgODIsIDc1LCA3NiwgNjksIDgyLCAxMjgsIDgzLCA4MCwgNjUsIDgyLCA3NSwgNzYsIAotICAgIDY5LCAxMjgsIDgzLCA4MCwgNjUsIDcxLCA3MiwgNjksIDg0LCA4NCwgNzMsIDEyOCwgODMsIDgwLCA2NSwgNjgsIDY5LCA4MywgCi0gICAgMTI4LCA4MywgODAsIDY1LCA2OCwgMTk3LCA4MywgODAsIDY1LCA2NywgNzMsIDc4LCAxOTksIDgzLCA4MCwgNjUsIDY3LCAKLSAgICAxOTcsIDgzLCA4MCwgNjUsIDEyOCwgODMsIDc5LCA4OSwgMTI4LCA4MywgNzksIDg3LCA3MywgNzYsIDIwNywgODMsIDc5LCAKLSAgICA4NywgMTI4LCA4MywgNzksIDg1LCA4NCwgNzIsIDY5LCA4MiwgMjA2LCA4MywgNzksIDg1LCA4NCwgNzIsIDQ1LCA4MywgNzYsIAotICAgIDY1LCA4NiwgNjksIDIxNywgODMsIDc5LCA4NSwgODQsIDIwMCwgODMsIDc5LCA4NSwgODIsIDY3LCA2OSwgMTI4LCA4MywgCi0gICAgNzksIDg1LCA3OCwgNjgsIDEyOCwgODMsIDc5LCA4NSwgNzgsIDE5NiwgODMsIDc5LCA4NSwgNzgsIDY1LCA4MCwgMTI4LCAKLSAgICA4MywgNzksIDg1LCAxMjgsIDgzLCA3OSwgODMsIDEyOCwgODMsIDc5LCA4MiwgMTkzLCA4MywgNzksIDgxLCAxMjgsIDgzLCAKLSAgICA3OSwgNzksIDIwNiwgODMsIDc5LCA3OCwgNzQsIDY1LCA3NywgMTI4LCA4MywgNzksIDc4LCA3MSwgMTI4LCA4MywgNzksIAotICAgIDc4LCAxMjgsIDgzLCA3OSwgNzcsIDgwLCA2OSwgNzgsIDE5OSwgODMsIDc5LCA3NywgMTI4LCA4MywgNzksIDc2LCA3MywgCi0gICAgNjgsIDg1LCA4MywgMTI4LCA4MywgNzksIDc2LCA3MywgNjgsIDg1LCAyMTEsIDgzLCA3OSwgNzIsIDEyOCwgODMsIDc5LCAKLSAgICA3MSwgNjgsIDczLCA2NSwgMjA2LCA4MywgNzksIDcwLCA4NCwgODcsIDY1LCA4MiwgNjksIDQ1LCA3MCwgODUsIDc4LCA2NywgCi0gICAgODQsIDczLCA3OSwgMjA2LCA4MywgNzksIDcwLCA4NCwgNzgsIDY5LCA4MywgODMsIDEyOCwgODMsIDc5LCA3MCwgMjEyLCAKLSAgICA4MywgNzksIDE5OCwgODMsIDc5LCA2NywgNzMsIDY5LCA4NCwgODksIDEyOCwgODMsIDc5LCA2NywgNjcsIDY5LCAyMTAsIAotICAgIDgzLCA3OSwgNjUsIDgwLCAxMjgsIDgzLCA3OSwgNjUsIDEyOCwgODMsIDIwNywgODMsIDc4LCA3OSwgODcsIDc3LCA2NSwgCi0gICAgNzgsIDEyOCwgODMsIDc4LCA3OSwgODcsIDc3LCA2NSwgMjA2LCA4MywgNzgsIDc5LCA4NywgNzAsIDc2LCA2NSwgNzUsIDY5LCAKLSAgICAxMjgsIDgzLCA3OCwgNzksIDg3LCA2NiwgNzksIDY1LCA4MiwgNjgsIDY5LCA4MiwgMTI4LCA4MywgNzgsIDc5LCA4NywgCi0gICAgMTI4LCA4MywgNzgsIDc5LCA4NSwgODQsIDEyOCwgODMsIDc4LCA3OSwgODUsIDIxMiwgODMsIDc4LCA2NSwgMjA4LCA4MywgCi0gICAgNzgsIDY1LCA3NSwgNjksIDEyOCwgODMsIDc4LCA2NSwgNzUsIDE5NywgODMsIDc4LCA2NSwgNzMsIDc2LCAxMjgsIDgzLCAKLSAgICA3OCwgMTkzLCA4MywgNzcsIDc5LCA3NSwgNzMsIDc4LCAxOTksIDgzLCA3NywgNzMsIDgyLCA3NSwgNzMsIDc4LCAxOTksIAotICAgIDgzLCA3NywgNzMsIDc2LCA3MywgNzgsIDE5OSwgODMsIDc3LCA3MywgNzYsIDY5LCAxMjgsIDgzLCA3NywgNjksIDY1LCA4MiwgCi0gICAgMTI4LCA4MywgNzcsIDY1LCA4MywgMjAwLCA4MywgNzcsIDY1LCA3NiwgNzYsIDY5LCAyMTAsIDgzLCA3NywgNjUsIDc2LCAKLSAgICA3NiwgMTI4LCA4MywgNzYsIDg1LCA4MiwgMTI4LCA4MywgNzYsIDc5LCA4NywgNzYsIDg5LCAxMjgsIDgzLCA3NiwgNzksIAotICAgIDIxNSwgODMsIDc2LCA3OSwgODYsIDc5LCAxMjgsIDgzLCA3NiwgNzksIDIxMiwgODMsIDc2LCA3OSwgODAsIDczLCA3OCwgCi0gICAgMTk5LCA4MywgNzYsIDc5LCA4MCwgNjksIDEyOCwgODMsIDc2LCA3MywgNzgsIDcxLCAxMjgsIDgzLCA3NiwgNzMsIDY4LCAKLSAgICA3MywgNzgsIDcxLCAxMjgsIDgzLCA3NiwgNzMsIDY3LCA2OSwgMTI4LCA4MywgNzYsIDczLCA2NywgMTk3LCA4MywgNzYsIAotICAgIDY5LCA2OSwgODAsIDIxNywgODMsIDc2LCA2OSwgNjksIDgwLCA3MywgNzgsIDE5OSwgODMsIDc2LCA2NSwgODYsIDc5LCA3OCwgCi0gICAgNzMsIDE5NSwgODMsIDc2LCA2NSwgODYsIDY5LCAxMjgsIDgzLCA3NiwgNjUsIDgzLCA3MiwgMTI4LCA4MywgNzYsIDY1LCAKLSAgICA4MywgMjAwLCA4MywgNzYsIDY1LCA3OCwgODQsIDY5LCAxOTYsIDgzLCA3NSwgODcsIDY1LCAxMjgsIDgzLCA3NSwgODcsIAotICAgIDEyOCwgODMsIDc1LCA4NSwgNzYsIDc2LCAxMjgsIDgzLCA3NSwgODUsIDc2LCAyMDQsIDgzLCA3NSwgNzYsIDczLCA4MiwgCi0gICAgNzksIDIwNiwgODMsIDc1LCA3MywgNzgsIDEyOCwgODMsIDc1LCA3MywgNjksIDgyLCAxMjgsIDgzLCA3NSwgMjAxLCA4MywgCi0gICAgNzUsIDY5LCA4NywgNjksIDE5NiwgODMsIDc1LCA2NSwgODQsIDY5LCAxMjgsIDgzLCA3NSwgMTI4LCA4MywgNzQsIDY5LCAKLSAgICAxMjgsIDgzLCA3MywgODgsIDg0LCA4OSwgNDUsIDcwLCA3OSwgODUsIDgyLCA4NCwgMjAwLCA4MywgNzMsIDg4LCA4NCwgODksIAotICAgIDEyOCwgODMsIDczLCA4OCwgODQsIDIxNywgODMsIDczLCA4OCwgODQsIDcyLCA4MywgMTI4LCA4MywgNzMsIDg4LCA4NCwgCi0gICAgNzIsIDIxMSwgODMsIDczLCA4OCwgODQsIDcyLCAxMjgsIDgzLCA3MywgODgsIDg0LCA2OSwgNjksIDc4LCA4NCwgNzIsIDgzLCAKLSAgICAxMjgsIDgzLCA3MywgODgsIDg0LCA2OSwgNjksIDc4LCA4NCwgNzIsIDEyOCwgODMsIDczLCA4OCwgODQsIDY5LCA2OSwgNzgsIAotICAgIDg0LCAyMDAsIDgzLCA3MywgODgsIDg0LCA2OSwgNjksIDc4LCAxMjgsIDgzLCA3MywgODgsIDg0LCA2OSwgNjksIDIwNiwgCi0gICAgODMsIDczLCA4OCwgNDUsIDg0LCA3MiwgNzMsIDgyLCA4NCwgODksIDEyOCwgODMsIDczLCA4OCwgNDUsIDgzLCA4NCwgODIsIAotICAgIDczLCA3OCwgMTk5LCA4MywgNzMsIDg4LCA0NSwgODAsIDY5LCA4MiwgNDUsIDY5LCAyMDUsIDgzLCA3MywgODgsIDQ1LCA3NiwgCi0gICAgNzMsIDc4LCAxOTcsIDgzLCA3MywgMjE2LCA4MywgNzMsIDg0LCA2OSwgMTI4LCA4MywgNzMsIDgzLCA2NSwgMTI4LCA4MywgCi0gICAgNzMsIDgyLCA3MywgNzgsIDcxLCA4NSwgMTI4LCA4MywgNzMsIDc5LCA4MywgNDUsIDg0LCA3MiwgNzMsIDY5LCA4NSwgODQsIAotICAgIDcyLCAxMjgsIDgzLCA3MywgNzksIDgzLCA0NSwgODMsIDgzLCA2NSwgNzgsIDcxLCA4MywgNzMsIDc5LCA4MywgMTI4LCA4MywgCi0gICAgNzMsIDc5LCA4MywgNDUsIDgyLCA3MywgNjksIDg1LCA3NiwgMTI4LCA4MywgNzMsIDc5LCA4MywgNDUsIDgwLCA3MywgNjksIAotICAgIDg1LCA4MCwgNDUsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDEyOCwgODMsIDczLCA3OSwgODMsIDQ1LCA4MCwgNzIsIDczLCAKLSAgICA2OSwgODUsIDgwLCA3MiwgMTI4LCA4MywgNzMsIDc5LCA4MywgNDUsIDgwLCA2NSwgNzgsIDgzLCA3MywgNzksIDgzLCAxMjgsIAotICAgIDgzLCA3MywgNzksIDgzLCA0NSwgNzgsIDczLCA2OSwgODUsIDc4LCAxMjgsIDgzLCA3MywgNzksIDgzLCA0NSwgNzcsIDczLCAKLSAgICA2OSwgODUsIDc3LCAxMjgsIDgzLCA3MywgNzksIDgzLCA0NSwgNzUsIDcyLCA3MywgNjksIDg1LCA3NSwgNzIsIDEyOCwgODMsIAotICAgIDczLCA3OSwgODMsIDQ1LCA3NSwgNjUsIDgwLCA4OSwgNjksIDc5LCA4NSwgNzgsIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCAKLSAgICA4MywgNzMsIDc5LCA4MywgNDUsIDczLCA2OSwgODUsIDc4LCA3MSwgMTI4LCA4MywgNzMsIDc5LCA4MywgNDUsIDcyLCA3MywgCi0gICAgNjksIDg1LCA3MiwgMTI4LCA4MywgNzMsIDc5LCA4MywgNDUsIDY3LCA3MywgNjksIDg1LCA2NywgMTI4LCA4MywgNzMsIDc5LCAKLSAgICA4MywgNDUsIDY3LCA3MiwgNzMsIDY5LCA4NSwgNjcsIDcyLCAxMjgsIDgzLCA3MywgNzksIDIxMSwgODMsIDczLCA3OCwgNzUsIAotICAgIDczLCA3OCwgNzEsIDEyOCwgODMsIDczLCA3OCwgNzEsIDc2LCA2OSwgNDUsIDgzLCA3MiwgNzMsIDcwLCA4NCwgNDUsIDUxLCAKLSAgICAxMjgsIDgzLCA3MywgNzgsIDcxLCA3NiwgNjksIDQ1LCA4MywgNzIsIDczLCA3MCwgODQsIDQ1LCA1MCwgMTI4LCA4MywgNzMsIAotICAgIDc4LCA3MSwgNzYsIDY5LCA0NSwgNzYsIDczLCA3OCwgMTk3LCA4MywgNzMsIDc4LCA3MSwgNzYsIDY5LCAxMjgsIDgzLCA3MywgCi0gICAgNzgsIDcxLCA3NiwgMTk3LCA4MywgNzMsIDc4LCA3MSwgNjUsIDY1LCA4NCwgMTI4LCA4MywgNzMsIDc4LCAxOTcsIDgzLCAKLSAgICA3MywgNzgsIDY4LCA3MiwgMjAxLCA4MywgNzMsIDIwNiwgODMsIDczLCA3NywgODAsIDc2LCA3MywgNzAsIDczLCA2OSwgCi0gICAgMTk2LCA4MywgNzMsIDc3LCA3MywgNzYsIDY1LCA4MiwgMTI4LCA4MywgNzMsIDc3LCA3MywgNzYsIDY1LCAyMTAsIDgzLCAKLSAgICA3MywgNzcsIDY1LCA3OCwgODMsIDczLCAyMTEsIDgzLCA3MywgNzcsIDY1LCA3NiwgODUsIDc4LCA3MSwgODUsIDIwNiwgODMsIAotICAgIDczLCA3NywgNjUsIDEyOCwgODMsIDczLCA3NiwgODYsIDY5LCA4MiwgMTI4LCA4MywgNzMsIDc2LCA3NSwgMTI4LCA4MywgCi0gICAgNzMsIDc2LCA3MywgODEsIDg1LCAxOTMsIDgzLCA3MywgNzYsIDcyLCA3OSwgODUsIDY5LCA4NCwgODQsIDY5LCAxMjgsIDgzLCAKLSAgICA3MywgNzYsIDcyLCA3OSwgODUsIDY5LCA4NCwgODQsIDE5NywgODMsIDczLCA3NiwgNjUsIDUxLCAxMjgsIDgzLCA3MywgNzUsIAotICAgIDczLCAxMjgsIDgzLCA3MywgNzUsIDUwLCAxMjgsIDgzLCA3MywgNzUsIDE3OCwgODMsIDczLCA3MSwgNzgsIDgzLCAxMjgsIAotICAgIDgzLCA3MywgNzEsIDc3LCA2NSwgMTI4LCA4MywgNzMsIDcxLCA3NywgMTkzLCA4MywgNzMsIDcxLCA2OSwgMjA0LCA4MywgCi0gICAgNzMsIDcxLCA1MiwgMTI4LCA4MywgNzMsIDcxLCAxODAsIDgzLCA3MywgNzEsIDEyOCwgODMsIDczLCA2OSwgNjksIDEyOCwgCi0gICAgODMsIDczLCA2OCwgNjksIDg3LCA2NSwgODksIDIxMSwgODMsIDczLCA2NywgNzUsIDc4LCA2OSwgODMsIDgzLCAxMjgsIDgzLCAKLSAgICA3MywgNjcsIDc1LCA3NiwgNjksIDEyOCwgODMsIDczLCA2NiwgMTk3LCA4MywgMjAxLCA4MywgNzIsIDg5LCA4OCwgMTI4LCAKLSAgICA4MywgNzIsIDg5LCA4NCwgMTI4LCA4MywgNzIsIDg5LCA4MiwgODgsIDEyOCwgODMsIDcyLCA4OSwgODIsIDEyOCwgODMsIAotICAgIDcyLCA4OSwgODAsIDEyOCwgODMsIDcyLCA4OSwgNjksIDEyOCwgODMsIDcyLCA4OSwgNjUsIDEyOCwgODMsIDcyLCA4OSwgCi0gICAgMTI4LCA4MywgNzIsIDg3LCA3OSwgODksIDEyOCwgODMsIDcyLCA4NywgNzksIDc5LCAxMjgsIDgzLCA3MiwgODcsIDc5LCAKLSAgICAxMjgsIDgzLCA3MiwgODcsIDczLCA3MywgMTI4LCA4MywgNzIsIDg3LCA3MywgMTI4LCA4MywgNzIsIDg3LCA2OSwgMTI4LCAKLSAgICA4MywgNzIsIDg3LCA2NSwgNjUsIDEyOCwgODMsIDcyLCA4NywgNjUsIDEyOCwgODMsIDcyLCA4NSwgODgsIDEyOCwgODMsIAotICAgIDcyLCA4NSwgODUsIDEyOCwgODMsIDcyLCA4NSwgODQsIDEyOCwgODMsIDcyLCA4NSwgODIsIDg4LCAxMjgsIDgzLCA3MiwgCi0gICAgODUsIDgyLCAxMjgsIDgzLCA3MiwgODUsIDgwLCAxMjgsIDgzLCA3MiwgODUsIDc5LCA4OCwgMTI4LCA4MywgNzIsIDg1LCAKLSAgICA3OSwgODAsIDEyOCwgODMsIDcyLCA4NSwgNzksIDEyOCwgODMsIDcyLCA4NSwgNzcsIDEyOCwgODMsIDcyLCA4NSwgNzAsIAotICAgIDcwLCA3NiwgMTk3LCA4MywgNzIsIDg1LCA2OSwgODEsIDEyOCwgODMsIDcyLCA4NSwgNjksIDc4LCA4MywgNzIsIDg1LCA2OSwgCi0gICAgODQsIDEyOCwgODMsIDcyLCA4NSwgNjYsIDg1LCA4MiwgMTI4LCA4MywgNzIsIDg1LCA1MCwgMTI4LCA4MywgNzIsIDg1LCAKLSAgICAxNzgsIDgzLCA3MiwgODUsIDEyOCwgODMsIDcyLCAyMTMsIDgzLCA3MiwgODQsIDY1LCA4MCwgNzMsIDY3LCAxMjgsIDgzLCAKLSAgICA3MiwgODQsIDY1LCAxMjgsIDgzLCA3MiwgODIsIDczLCA3OCwgNjksIDEyOCwgODMsIDcyLCA4MiwgNzMsIDc3LCA4MCwgCi0gICAgMTI4LCA4MywgNzIsIDgyLCA3MywgNzMsIDEyOCwgODMsIDcyLCA3OSwgODksIDEyOCwgODMsIDcyLCA3OSwgODgsIDEyOCwgCi0gICAgODMsIDcyLCA3OSwgODcsIDY5LCA4MiwgMTI4LCA4MywgNzIsIDc5LCA4NSwgNzYsIDY4LCA2OSwgODIsIDY5LCAxOTYsIDgzLCAKLSAgICA3MiwgNzksIDg0LCAxMjgsIDgzLCA3MiwgNzksIDgyLCA4NCwgODMsIDEyOCwgODMsIDcyLCA3OSwgODIsIDg0LCAyMTEsIAotICAgIDgzLCA3MiwgNzksIDgyLCA4NCwgNjksIDc4LCA2OSwgODIsIDEyOCwgODMsIDcyLCA3OSwgODIsIDg0LCA2NywgNjUsIDc1LCAKLSAgICA2OSwgMTI4LCA4MywgNzIsIDc5LCA4MiwgODQsIDQ1LCA4NCwgODcsIDczLCA3MSwgNDUsIDg5LCA4MiwgMTI4LCA4MywgNzIsIAotICAgIDc5LCA4MiwgODQsIDQ1LCA4NCwgODcsIDczLCA3MSwgNDUsIDg0LCA4OSwgMjEwLCA4MywgNzIsIDc5LCA4MiwgODQsIDQ1LCAKLSAgICA4NCwgODcsIDczLCA3MSwgNDUsIDgzLCA3OSwgMjA0LCA4MywgNzIsIDc5LCA4MiwgODQsIDQ1LCA4NCwgODcsIDczLCA3MSwgCi0gICAgNDUsIDc5LCA4MywgMjExLCA4MywgNzIsIDc5LCA4MiwgODQsIDQ1LCA4NCwgODcsIDczLCA3MSwgNDUsIDc4LCA2NSwgODUsIAotICAgIDE5NiwgODMsIDcyLCA3OSwgODIsIDg0LCA0NSwgODQsIDg3LCA3MywgNzEsIDQ1LCA3NywgNjUsIDY4LCAyMTAsIDgzLCA3MiwgCi0gICAgNzksIDgyLCA4NCwgNDUsIDg0LCA4NywgNzMsIDcxLCA0NSwgNzIsIDY1LCA3MSwgNjUsIDc2LCAyMDQsIDgzLCA3MiwgNzksIAotICAgIDgyLCA4NCwgNDUsIDg0LCA4NywgNzMsIDcxLCA0NSwgNjYsIDc0LCA2NSwgODIsIDc1LCA2NSwgMjA2LCA4MywgNzIsIDc5LCAKLSAgICA4MiwgODQsIDQ1LCA4NCwgODcsIDczLCA3MSwgNDUsIDY1LCAyMTAsIDgzLCA3MiwgNzksIDgyLCA4NCwgMTI4LCA4MywgNzIsIAotICAgIDc5LCA4MiwgMjEyLCA4MywgNzIsIDc5LCA4MSwgMTI4LCA4MywgNzIsIDc5LCAyMDksIDgzLCA3MiwgNzksIDgwLCAxMjgsIAotICAgIDgzLCA3MiwgNzksIDc5LCA4NCwgNzMsIDc4LCAxOTksIDgzLCA3MiwgNzksIDc5LCA4NCwgMTI4LCA4MywgNzIsIDc5LCA3OSwgCi0gICAgMTI4LCA4MywgNzIsIDc5LCA3MSwgMjAxLCA4MywgNzIsIDc5LCAxOTksIDgzLCA3MiwgNzksIDY5LCAxMjgsIDgzLCA3MiwgCi0gICAgNzksIDE5NywgODMsIDcyLCA3OSwgNjUsIDEyOCwgODMsIDcyLCA3OSwgMTI4LCA4MywgNzIsIDczLCA4OSwgODksIDY1LCAKLSAgICA2NSwgNzYsIDY1LCA2NSwgMTI4LCA4MywgNzIsIDczLCA4NCwgNjUsIDEyOCwgODMsIDcyLCA3MywgODQsIDE5MywgODMsIAotICAgIDcyLCA3MywgODIsIDIxMiwgODMsIDcyLCA3MywgODIsIDY1LCA2OSwgMTI4LCA4MywgNzIsIDczLCA4MiwgMTI4LCA4MywgCi0gICAgNzIsIDczLCAyMTAsIDgzLCA3MiwgNzMsIDgxLCAxMjgsIDgzLCA3MiwgNzMsIDgwLCAxMjgsIDgzLCA3MiwgNzMsIDc4LCAKLSAgICA4NCwgMjA3LCA4MywgNzIsIDczLCA3OCwgNzMsIDcxLCAxMjgsIDgzLCA3MiwgNzMsIDc4LCA2OCwgMTkzLCA4MywgNzIsIAotICAgIDczLCA3OCwgMTI4LCA4MywgNzIsIDczLCAyMDYsIDgzLCA3MiwgNzMsIDc3LCA2NSwgMTI4LCA4MywgNzIsIDczLCA3NywgCi0gICAgMTkzLCA4MywgNzIsIDczLCA3NywgMTI4LCA4MywgNzIsIDczLCAyMDUsIDgzLCA3MiwgNzMsIDczLCA3OCwgMTI4LCA4MywgCi0gICAgNzIsIDczLCA3MywgMTI4LCA4MywgNzIsIDczLCA3MCwgMjEyLCA4MywgNzIsIDczLCA2OSwgNzYsIDY4LCAxMjgsIDgzLCAKLSAgICA3MiwgNzMsIDY4LCAxMjgsIDgzLCA3MiwgNzMsIDE5NiwgODMsIDcyLCA3MiwgNjUsIDEyOCwgODMsIDcyLCA3MiwgMTkzLCAKLSAgICA4MywgNzIsIDY5LCA4OCwgMTI4LCA4MywgNzIsIDY5LCA4NiwgNjUsIDEyOCwgODMsIDcyLCA2OSwgODUsIDg4LCAxMjgsIAotICAgIDgzLCA3MiwgNjksIDg1LCA3OSwgODEsIDEyOCwgODMsIDcyLCA2OSwgODUsIDY1LCA2OSwgODEsIDg0LCA4NSwgMTI4LCA4MywgCi0gICAgNzIsIDY5LCA4NSwgNjUsIDY5LCA4MSwgMTI4LCA4MywgNzIsIDY5LCA4NSwgNjUsIDY5LCAxMjgsIDgzLCA3MiwgNjksIDg0LCAKLSAgICAxMjgsIDgzLCA3MiwgNjksIDIxMiwgODMsIDcyLCA2OSwgODMsIDcyLCA3NiwgNjUsIDc3LCAxMjgsIDgzLCA3MiwgNjksIAotICAgIDgzLCA3MiwgNzMsIDcxLCAxMjgsIDgzLCA3MiwgNjksIDgzLCA3MiwgNzMsIDE5OSwgODMsIDcyLCA2OSwgODMsIDcyLCA1MCwgCi0gICAgMTI4LCA4MywgNzIsIDY5LCA4MywgNzIsIDEyOCwgODMsIDcyLCA2OSwgODEsIDY5LCAyMDQsIDgzLCA3MiwgNjksIDgwLCAKLSAgICAxMjgsIDgzLCA3MiwgNjksIDc4LCAxMjgsIDgzLCA3MiwgNjksIDc2LCA3NiwgMTI4LCA4MywgNzIsIDY5LCA3NiwgMjA0LCAKLSAgICA4MywgNzIsIDY5LCA3NiwgNzAsIDEyOCwgODMsIDcyLCA2OSwgNzMsIDEyOCwgODMsIDcyLCA2OSwgNzEsIDU3LCAxMjgsIAotICAgIDgzLCA3MiwgNjksIDY5LCA4MCwgMTI4LCA4MywgNzIsIDY5LCA2OSwgNzgsIDg1LCAxMjgsIDgzLCA3MiwgNjksIDY5LCA3OCwgCi0gICAgMTI4LCA4MywgNzIsIDY5LCA2OSwgMjA2LCA4MywgNzIsIDY5LCA2OSwgMTI4LCA4MywgNzIsIDY5LCA0NSwgNzEsIDc5LCAKLSAgICA2NSwgODQsIDEyOCwgODMsIDcyLCAxOTcsIDgzLCA3MiwgNjcsIDcyLCA2NSwgMTI4LCA4MywgNzIsIDY1LCA4OSwgMTI4LCAKLSAgICA4MywgNzIsIDY1LCA4OCwgMTI4LCA4MywgNzIsIDY1LCA4NiwgNzMsIDg5LCA2NSwgNzgsIDczLCAxMjgsIDgzLCA3MiwgNjUsIAotICAgIDg2LCA3MywgNjUsIDIwNiwgODMsIDcyLCA2NSwgODYsIDY5LCAxOTYsIDgzLCA3MiwgNjUsIDg1LCAxMjgsIDgzLCA3MiwgCi0gICAgNjUsIDg0LCAxMjgsIDgzLCA3MiwgNjUsIDgyLCA4NSwgMTI4LCA4MywgNzIsIDY1LCA4MiwgMjEzLCA4MywgNzIsIDY1LCAKLSAgICA4MiwgODAsIDEyOCwgODMsIDcyLCA2NSwgODIsIDIwOCwgODMsIDcyLCA2NSwgODIsIDY1LCAxMjgsIDgzLCA3MiwgNjUsIAotICAgIDgyLCA1MCwgMTI4LCA4MywgNzIsIDY1LCA4MiwgMTc4LCA4MywgNzIsIDY1LCA4MCwgNzMsIDc4LCA3MSwgMTI4LCA4MywgCi0gICAgNzIsIDY1LCA4MCwgNjksIDgzLCAxMjgsIDgzLCA3MiwgNjUsIDgwLCAxOTcsIDgzLCA3MiwgNjUsIDgwLCAxMjgsIDgzLCAKLSAgICA3MiwgNjUsIDc4LCA3MSwgMTI4LCA4MywgNzIsIDY1LCA3OCwgMTI4LCA4MywgNzIsIDY1LCAyMDYsIDgzLCA3MiwgNjUsIAotICAgIDc3LCA4MiwgNzksIDY3LCA3NSwgMTI4LCA4MywgNzIsIDY1LCA3NiwgODMsIDcyLCA2OSwgNzYsIDY5LCA4NCwgMTI4LCA4MywgCi0gICAgNzIsIDY1LCA3NSwgODQsIDczLCAxMjgsIDgzLCA3MiwgNjUsIDczLCAxMjgsIDgzLCA3MiwgNjUsIDY4LCA3OSwgODcsIDY5LCAKLSAgICAxOTYsIDgzLCA3MiwgNjUsIDY4LCA2OSwgMTI4LCA4MywgNzIsIDY1LCA2OCwgNjgsIDY1LCAxMjgsIDgzLCA3MiwgNjUsIAotICAgIDY4LCA2OCwgMTkzLCA4MywgNzIsIDY1LCA2OCwgMTI4LCA4MywgNzIsIDY1LCAxOTYsIDgzLCA3MiwgNjUsIDY2LCA1NCwgCi0gICAgMTI4LCA4MywgNzIsIDY1LCA2NSwgMTI4LCA4MywgNzIsIDY1LCA1NCwgMTI4LCA4MywgNzIsIDY1LCA1MSwgMTI4LCA4MywgCi0gICAgNzIsIDY1LCAxNzksIDgzLCA3MSwgODIsIDE5MywgODMsIDcxLCA3OSwgMjEwLCA4MywgNzEsIDY3LCAxMjgsIDgzLCA3MSwgCi0gICAgNjUsIDIxNSwgODMsIDcxLCA2NSwgMTk0LCA4MywgNzEsIDEyOCwgODMsIDY5LCA4OCwgODQsIDg1LCA3NiwgMTkzLCA4MywgCi0gICAgNjksIDg4LCA4NCwgNzMsIDc2LCA2OSwgMTI4LCA4MywgNjksIDg4LCA4NCwgNjUsIDc4LCAyMTEsIDgzLCA2OSwgODYsIDY5LCAKLSAgICA4MiwgNjUsIDc4LCA2NywgNjksIDEyOCwgODMsIDY5LCA4NiwgNjksIDc4LCA4NCwgODksIDEyOCwgODMsIDY5LCA4NiwgNjksIAotICAgIDc4LCA4NCwgMjE3LCA4MywgNjksIDg2LCA2OSwgNzgsIDg0LCA3MiwgMTI4LCA4MywgNjksIDg2LCA2OSwgNzgsIDg0LCA2OSwgCi0gICAgNjksIDc4LCAxMjgsIDgzLCA2OSwgODYsIDY5LCA3OCwgODQsIDY5LCA2OSwgMjA2LCA4MywgNjksIDg2LCA2OSwgNzgsIDQ1LCAKLSAgICA4NCwgNzIsIDczLCA4MiwgODQsIDg5LCAxMjgsIDgzLCA2OSwgODYsIDY5LCAyMDYsIDgzLCA2OSwgODUsIDg4LCAxMjgsIAotICAgIDgzLCA2OSwgODUsIDc4LCA4OSwgNjUsIDc3LCAxMjgsIDgzLCA2OSwgODUsIDY1LCA2OSwgODEsIDEyOCwgODMsIDY5LCA4NCwgCi0gICAgNzAsIDc5LCA3OCwgMTI4LCA4MywgNjksIDgzLCA4NCwgNjksIDgyLCA4NCwgNzMsIDg1LCAyMTEsIDgzLCA2OSwgODMsIDgxLCAKLSAgICA4NSwgNzMsIDgxLCA4NSwgNjUsIDY4LCA4MiwgNjUsIDg0LCA2OSwgMTI4LCA4MywgNjksIDgzLCA2NSwgNzcsIDE5NywgODMsIAotICAgIDY5LCA4MiwgODYsIDczLCA2NywgMTk3LCA4MywgNjksIDgyLCA3MywgNzAsIDgzLCAxMjgsIDgzLCA2OSwgODIsIDczLCA3MCwgCi0gICAgMjExLCA4MywgNjksIDgxLCA4NSwgNjksIDc4LCA2NywgMTk3LCA4MywgNjksIDgwLCA4NCwgNjksIDc3LCA2NiwgNjksIDgyLCAKLSAgICAxMjgsIDgzLCA2OSwgODAsIDY1LCA4MiwgNjUsIDg0LCA3OSwgODIsIDEyOCwgODMsIDY5LCA4MCwgNjUsIDgyLCA2NSwgODQsIAotICAgIDc5LCAyMTAsIDgzLCA2OSwgNzgsIDg0LCA3OSwgMTI4LCA4MywgNjksIDc4LCA4NCwgNzMsIDEyOCwgODMsIDY5LCA3NywgCi0gICAgODUsIDc4LCA2NywgNzMsIDE5MywgODMsIDY5LCA3NywgNzUsIDY1LCA4NCwgNzIsIDEyOCwgODMsIDY5LCA3NywgNzUsIAotICAgIDEyOCwgODMsIDY5LCA3NywgNzMsIDg2LCA3OSwgODcsIDY5LCAyMDQsIDgzLCA2OSwgNzcsIDczLCA4MywgNzksIDcwLCAKLSAgICAyMTIsIDgzLCA2OSwgNzcsIDczLCA4MywgNjksIDg4LCA4NCwgNzMsIDc2LCA2OSwgMTI4LCA4MywgNjksIDc3LCA3MywgNzcsIAotICAgIDczLCA3OCwgNzMsIDc3LCAxOTMsIDgzLCA2OSwgNzcsIDczLCA2OCwgNzMsIDgyLCA2OSwgNjcsIDIxMiwgODMsIDY5LCA3NywgCi0gICAgNzMsIDY3LCA3OSwgNzYsIDc5LCA3OCwgMTI4LCA4MywgNjksIDc3LCA3MywgNjcsIDc5LCA3NiwgNzksIDIwNiwgODMsIDY5LCAKLSAgICA3NywgNzMsIDY3LCA3MywgODIsIDY3LCA4NSwgNzYsIDY1LCAyMTAsIDgzLCA2OSwgNzcsIDczLCA2NywgNzMsIDgyLCA2NywgCi0gICAgNzYsIDE5NywgODMsIDY5LCA3NywgNzMsIDY2LCA4MiwgNjksIDg2LCA3MywgMjExLCA4MywgNjksIDc3LCA3MywgNDUsIDg2LCAKLSAgICA3OSwgNzMsIDY3LCA2OSwgMTk2LCA4MywgNjksIDc2LCA3MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAotICAgIDQ1LCA1NywgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTcsIDU2LCAxMjgsIDgzLCA2OSwgCi0gICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU3LCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAotICAgIDQ1LCA1NywgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTcsIDUzLCAxMjgsIDgzLCA2OSwgCi0gICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU3LCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAotICAgIDQ1LCA1NywgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTcsIDUwLCAxMjgsIDgzLCA2OSwgCi0gICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU3LCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAotICAgIDQ1LCA1NywgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTcsIDEyOCwgODMsIDY5LCA3NiwgCi0gICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTYsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAotICAgIDU2LCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NiwgNTUsIDEyOCwgODMsIDY5LCA3NiwgCi0gICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTYsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAotICAgIDU2LCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NiwgNTIsIDEyOCwgODMsIDY5LCA3NiwgCi0gICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTYsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAotICAgIDU2LCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NiwgNDksIDEyOCwgODMsIDY5LCA3NiwgCi0gICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTYsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAotICAgIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU1LCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgCi0gICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NSwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTUsIAotICAgIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU1LCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgCi0gICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NSwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTUsIAotICAgIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU1LCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgCi0gICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NSwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTUsIAotICAgIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU1LCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgCi0gICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NCwgNTcsIAotICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTQsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCi0gICAgODQsIDc5LCA4MiwgNDUsIDU0LCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NCwgNTQsIAotICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTQsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCi0gICAgODQsIDc5LCA4MiwgNDUsIDU0LCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NCwgNTEsIAotICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTQsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCi0gICAgODQsIDc5LCA4MiwgNDUsIDU0LCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NCwgNDgsIAotICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCi0gICAgNzksIDgyLCA0NSwgNTMsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUzLCA1NiwgMTI4LCAKLSAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MywgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCi0gICAgNzksIDgyLCA0NSwgNTMsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUzLCA1MywgMTI4LCAKLSAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MywgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCi0gICAgNzksIDgyLCA0NSwgNTMsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUzLCA1MCwgMTI4LCAKLSAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MywgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCi0gICAgNzksIDgyLCA0NSwgNTMsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUzLCAxMjgsIDgzLCAKLSAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUyLCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCi0gICAgODIsIDQ1LCA1MiwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTIsIDU1LCAxMjgsIDgzLCAKLSAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUyLCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCi0gICAgODIsIDQ1LCA1MiwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTIsIDUyLCAxMjgsIDgzLCAKLSAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUyLCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCi0gICAgODIsIDQ1LCA1MiwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTIsIDQ5LCAxMjgsIDgzLCAKLSAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUyLCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCi0gICAgODIsIDQ1LCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MSwgNTcsIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTEsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCi0gICAgNDUsIDUxLCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MSwgNTQsIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTEsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCi0gICAgNDUsIDUxLCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MSwgNTEsIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTEsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCi0gICAgNDUsIDUxLCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MSwgNDgsIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCi0gICAgNTAsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1NiwgMTI4LCA4MywgNjksIDc2LCAKLSAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCi0gICAgNTAsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MywgNTQsIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUzLCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCi0gICAgODIsIDQ1LCA1MCwgNTMsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MywgNTEsIAotICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUzLCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgCi0gICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTMsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAotICAgIDUwLCA1MywgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUzLCAxMjgsIDgzLCA2OSwgCi0gICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MiwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIAotICAgIDgyLCA0NSwgNTAsIDUyLCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTIsIDU1LCAKLSAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MiwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIAotICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUyLCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKLSAgICA1MCwgNTIsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MiwgNTEsIDEyOCwgODMsIAotICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUyLCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKLSAgICA3OSwgODIsIDQ1LCA1MCwgNTIsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MiwgCi0gICAgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKLSAgICA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MSwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCi0gICAgNTAsIDUxLCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTEsIDU1LCAxMjgsIDgzLCAKLSAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MSwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCi0gICAgNzksIDgyLCA0NSwgNTAsIDUxLCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTEsIAotICAgIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MSwgNTEsIDEyOCwgODMsIDY5LCA3NiwgCi0gICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUxLCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAotICAgIDQ1LCA1MCwgNTEsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MSwgNDgsIDEyOCwgCi0gICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAotICAgIDc5LCA4MiwgNDUsIDUwLCA1MCwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUwLCAKLSAgICA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTAsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIAotICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MCwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNTAsIDUwLCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTAsIDUyLCAxMjgsIAotICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MCwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKLSAgICA4NCwgNzksIDgyLCA0NSwgNTAsIDUwLCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgCi0gICAgNTAsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MCwgNDgsIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCi0gICAgNDUsIDUwLCA0OSwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ5LCA1NiwgMTI4LCAKLSAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDksIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCi0gICAgODQsIDc5LCA4MiwgNDUsIDUwLCA0OSwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIAotICAgIDQ5LCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDksIDUyLCAxMjgsIDgzLCA2OSwgCi0gICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OSwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIAotICAgIDgyLCA0NSwgNTAsIDQ5LCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDksIDQ5LCAKLSAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OSwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIAotICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCAKLSAgICA0OCwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ4LCA1NiwgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDgsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKLSAgICA4MiwgNDUsIDUwLCA0OCwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ4LCA1MywgCi0gICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDgsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKLSAgICA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OCwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCi0gICAgNTAsIDQ4LCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDgsIDQ5LCAxMjgsIDgzLCAKLSAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OCwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCi0gICAgNzksIDgyLCA0NSwgNTAsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCAxMjgsIDgzLCAKLSAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NywgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCi0gICAgNzksIDgyLCA0NSwgNDksIDU3LCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTcsIAotICAgIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NywgNTQsIDEyOCwgODMsIDY5LCA3NiwgCi0gICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU3LCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAotICAgIDQ1LCA0OSwgNTcsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NywgNTEsIDEyOCwgCi0gICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU3LCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAotICAgIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTcsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCAKLSAgICA1NywgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU3LCAxMjgsIDgzLCA2OSwgNzYsIAotICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NiwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNDksIDU2LCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTYsIDU1LCAxMjgsIAotICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NiwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKLSAgICA4NCwgNzksIDgyLCA0NSwgNDksIDU2LCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgCi0gICAgNTYsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NiwgNTEsIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU2LCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCi0gICAgODIsIDQ1LCA0OSwgNTYsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NiwgNDgsIAotICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCi0gICAgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NSwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIAotICAgIDU1LCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTUsIDU1LCAxMjgsIDgzLCA2OSwgCi0gICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NSwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIAotICAgIDgyLCA0NSwgNDksIDU1LCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTUsIDUyLCAKLSAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NSwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIAotICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU1LCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKLSAgICA0OSwgNTUsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NSwgNDgsIDEyOCwgODMsIAotICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKLSAgICA4MiwgNDUsIDQ5LCA1NCwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU0LCA1NiwgCi0gICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTQsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKLSAgICA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NCwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCi0gICAgNDksIDU0LCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTQsIDUyLCAxMjgsIDgzLCAKLSAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NCwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCi0gICAgNzksIDgyLCA0NSwgNDksIDU0LCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTQsIAotICAgIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NCwgNDgsIDEyOCwgODMsIDY5LCA3NiwgCi0gICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAotICAgIDQ5LCA1MywgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUzLCA1NiwgMTI4LCA4MywgCi0gICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTMsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAotICAgIDc5LCA4MiwgNDUsIDQ5LCA1MywgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUzLCAKLSAgICA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTMsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIAotICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MywgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNDksIDUzLCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTMsIDQ5LCAxMjgsIAotICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MywgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKLSAgICA4NCwgNzksIDgyLCA0NSwgNDksIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MiwgCi0gICAgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUyLCA1NiwgMTI4LCA4MywgNjksIDc2LCAKLSAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTIsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCi0gICAgNDUsIDQ5LCA1MiwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUyLCA1MywgMTI4LCAKLSAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTIsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCi0gICAgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MiwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIAotICAgIDUyLCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTIsIDQ5LCAxMjgsIDgzLCA2OSwgCi0gICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MiwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIAotICAgIDgyLCA0NSwgNDksIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MSwgNTcsIDEyOCwgCi0gICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUxLCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAotICAgIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTEsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCAKLSAgICA1MSwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUxLCA1MywgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTEsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKLSAgICA4MiwgNDUsIDQ5LCA1MSwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUxLCA1MCwgCi0gICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTEsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKLSAgICA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MSwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCi0gICAgNDksIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MCwgNTcsIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUwLCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCi0gICAgODIsIDQ1LCA0OSwgNTAsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MCwgNTQsIAotICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUwLCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgCi0gICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTAsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAotICAgIDQ5LCA1MCwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUwLCA1MCwgMTI4LCA4MywgCi0gICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTAsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAotICAgIDc5LCA4MiwgNDUsIDQ5LCA1MCwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUwLCAKLSAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OSwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIAotICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ5LCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKLSAgICA0OSwgNDksIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OSwgNTQsIDEyOCwgODMsIAotICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ5LCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKLSAgICA3OSwgODIsIDQ1LCA0OSwgNDksIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OSwgCi0gICAgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ5LCA1MCwgMTI4LCA4MywgNjksIDc2LCAKLSAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDksIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCi0gICAgNDUsIDQ5LCA0OSwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ5LCAxMjgsIDgzLCAKLSAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OCwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCi0gICAgNzksIDgyLCA0NSwgNDksIDQ4LCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDgsIAotICAgIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OCwgNTQsIDEyOCwgODMsIDY5LCA3NiwgCi0gICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ4LCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAotICAgIDQ1LCA0OSwgNDgsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OCwgNTEsIDEyOCwgCi0gICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ4LCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAotICAgIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDgsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCAKLSAgICA0OCwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIAotICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAyMTAsIDgzLCA2OSwgCi0gICAgNzYsIDY5LCA2NywgODQsIDY5LCAxOTYsIDgzLCA2OSwgNzMsIDgzLCA3NywgNjUsIDEyOCwgODMsIDY5LCA3MywgODMsIDc3LCAKLSAgICAxOTMsIDgzLCA2OSwgNzIsIDEyOCwgODMsIDY5LCA3MSwgNzksIDc2LCAxMjgsIDgzLCA2OSwgNzEsIDc4LCA3OSwgMTI4LCAKLSAgICA4MywgNjksIDcxLCA3NywgNjksIDc4LCA4NCwgMTI4LCA4MywgNjksIDY5LCA3OCwgODUsIDEyOCwgODMsIDY5LCA2OSwgNzgsIAorICAgIDc5LCA3OCwgMTk5LCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCA4MywgMTI4LCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCAKKyAgICAyMTEsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIDQ1LCA1NywgMTI4LCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCA0NSwgNTYsIAorICAgIDEyOCwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgNDUsIDU1LCAxMjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIDQ1LCA1NCwgCisgICAgMTI4LCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCA0NSwgNTMsIDEyOCwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgNDUsIDUyLCAKKyAgICAxMjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIDQ1LCA1MSwgMTI4LCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCA0NSwgNTAsIAorICAgIDEyOCwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgNDUsIDQ5LCA0OSwgMTI4LCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCA0NSwgCisgICAgNDksIDQ4LCAxMjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIDQ1LCA0OSwgMTI4LCA4MywgODQsIDgyLCA3OSwgNzUsIAorICAgIDE5NywgODMsIDg0LCA4MiwgNzMsIDgwLCA2OSwgMTI4LCA4MywgODQsIDgyLCA3MywgNzgsIDcxLCAxMjgsIDgzLCA4NCwgCisgICAgODIsIDczLCA3OCwgMTk5LCA4MywgODQsIDgyLCA3MywgNzUsIDY5LCA4NCwgNzIsIDgyLCA3OSwgODUsIDcxLCA3MiwgMTI4LCAKKyAgICA4MywgODQsIDgyLCA3MywgNjgsIDY5LCAxMjgsIDgzLCA4NCwgODIsIDczLCA2NywgODQsIDc2LCAyMTcsIDgzLCA4NCwgODIsIAorICAgIDY5LCA4NCwgNjcsIDcyLCA2OSwgMTk2LCA4MywgODQsIDgyLCA2OSwgODMsIDIxMSwgODMsIDg0LCA4MiwgNjksIDc4LCA3MSwgCisgICAgODQsIDcyLCAxMjgsIDgzLCA4NCwgODIsIDY5LCA2NSwgNzcsIDY5LCA4MiwgMTI4LCA4MywgODQsIDgyLCA2NSwgODcsIDY2LCAKKyAgICA2OSwgODIsIDgyLCA4OSwgMTI4LCA4MywgODQsIDgyLCA2NSwgODQsIDg1LCA3NywgNDUsIDUwLCAxMjgsIDgzLCA4NCwgODIsIAorICAgIDY1LCA4NCwgODUsIDc3LCAxMjgsIDgzLCA4NCwgODIsIDY1LCA4NCwgODUsIDIwNSwgODMsIDg0LCA4MiwgNjUsIDg0LCA3MywgCisgICAgNjUsIDIwNiwgODMsIDg0LCA4MiwgNjUsIDczLCA3OCwgNjksIDgyLCAxMjgsIDgzLCA4NCwgODIsIDY1LCA3MywgNzEsIDcyLCAKKyAgICA4NCwgNzgsIDY5LCA4MywgODMsIDEyOCwgODMsIDg0LCA4MiwgNjUsIDczLCA3MSwgNzIsIDIxMiwgODMsIDg0LCA4MiwgNjUsIAorICAgIDczLCA3MCwgMTI4LCA4MywgODQsIDgyLCA2NSwgNzEsIDcxLCA3MywgODMsIDc3LCA2NSwgODQsIDY1LCAxMjgsIDgzLCA4NCwgCisgICAgNzksIDg2LCA2OSwgMTI4LCA4MywgODQsIDc5LCA4MiwgNjksIDEyOCwgODMsIDg0LCA3OSwgODAsIDg3LCA2NSwgODQsIDY3LCAKKyAgICA3MiwgMTI4LCA4MywgODQsIDc5LCA4MCwgODAsIDczLCA3OCwgNzEsIDEyOCwgODMsIDg0LCA3OSwgODAsIDgwLCA2NSwgNzEsIAorICAgIDY5LCAxMjgsIDgzLCA4NCwgNzksIDgwLCAxMjgsIDgzLCA4NCwgNzksIDIwOCwgODMsIDg0LCA3OSwgNzgsIDY5LCAxMjgsIAorICAgIDgzLCA4NCwgNzksIDY3LCA3NSwgMTI4LCA4MywgODQsIDczLCA3NywgNzcsIDY5LCAxMjgsIDgzLCA4NCwgNzMsIDc2LCAKKyAgICAyMDQsIDgzLCA4NCwgNzMsIDc2LCAxOTcsIDgzLCA4NCwgNzMsIDcxLCA3NywgNjUsIDEyOCwgODMsIDg0LCA2OSwgODAsIAorICAgIDEyOCwgODMsIDg0LCA2OSwgNzcsIDEyOCwgODMsIDg0LCA2OSwgNjUsIDc3LCA3MywgNzgsIDE5OSwgODMsIDg0LCA2OSwgCisgICAgNjUsIDc3LCAxMjgsIDgzLCA4NCwgNjksIDY1LCAyMDUsIDgzLCA4NCwgNjUsIDg2LCA4MiwgNzksIDg1LCAxMjgsIDgzLCAKKyAgICA4NCwgNjUsIDg2LCA4MiwgNzksIDgzLCAxMjgsIDgzLCA4NCwgNjUsIDg2LCA4MiwgNzksIDIxMSwgODMsIDg0LCA2NSwgODUsIAorICAgIDgyLCA3OSwgODMsIDEyOCwgODMsIDg0LCA2NSwgODQsIDg1LCAxOTcsIDgzLCA4NCwgNjUsIDg0LCA3MywgNzksIDc4LCAKKyAgICAxMjgsIDgzLCA4NCwgNjUsIDg0LCA2OSwgODIsIDgzLCAxMjgsIDgzLCA4NCwgNjUsIDg0LCA2OSwgMTI4LCA4MywgODQsIAorICAgIDY1LCA4MiwgMjEyLCA4MywgODQsIDY1LCA4MiwgODMsIDEyOCwgODMsIDg0LCA2NSwgODIsIDgyLCA2OSwgMTk2LCA4MywgCisgICAgODQsIDY1LCA4MiwgNzUsIDEyOCwgODMsIDg0LCA2NSwgODIsIDEyOCwgODMsIDg0LCA2NSwgMjEwLCA4MywgODQsIDY1LCAKKyAgICA3OCwgNjgsIDgzLCA4NCwgNzMsIDc2LCA3NiwgMTI4LCA4MywgODQsIDY1LCA3OCwgNjgsIDY1LCA4MiwgMTk2LCA4MywgODQsIAorICAgIDY1LCA3OCwgNjgsIDEyOCwgODMsIDg0LCA2NSwgNzgsIDEyOCwgODMsIDg0LCA2NSwgNzYsIDc2LCA3MywgNzksIDc4LCAKKyAgICAxMjgsIDgzLCA4NCwgNjUsIDcwLCA3MCwgMTI4LCA4MywgODQsIDY1LCA3MCwgMTk4LCA4MywgODQsIDY1LCA2NywgNjcsIAorICAgIDY1LCA4NCwgNzksIDEyOCwgODMsIDg0LCA2NSwgNjcsIDY3LCA2NSwgODQsIDczLCA4MywgODMsIDczLCA3NywgNzksIDEyOCwgCisgICAgODMsIDg0LCA1MCwgMTI4LCA4MywgODMsIDg5LCA4OCwgMTI4LCA4MywgODMsIDg5LCA4NCwgMTI4LCA4MywgODMsIDg5LCAKKyAgICA4MiwgODgsIDEyOCwgODMsIDgzLCA4OSwgODIsIDEyOCwgODMsIDgzLCA4OSwgODAsIDEyOCwgODMsIDgzLCA4OSwgMTI4LCAKKyAgICA4MywgODMsIDg1LCA4OCwgMTI4LCA4MywgODMsIDg1LCA4NSwgMTI4LCA4MywgODMsIDg1LCA4NCwgMTI4LCA4MywgODMsIAorICAgIDg1LCA4MCwgMTI4LCA4MywgODMsIDc5LCA4OCwgMTI4LCA4MywgODMsIDc5LCA4NCwgMTI4LCA4MywgODMsIDc5LCA4MCwgCisgICAgMTI4LCA4MywgODMsIDc5LCA3OSwgMTI4LCA4MywgODMsIDc5LCAxMjgsIDgzLCA4MywgNzMsIDg4LCAxMjgsIDgzLCA4MywgCisgICAgNzMsIDg0LCAxMjgsIDgzLCA4MywgNzMsIDgwLCAxMjgsIDgzLCA4MywgNzMsIDczLCAxMjgsIDgzLCA4MywgNzMsIDY5LCAKKyAgICA4OCwgMTI4LCA4MywgODMsIDczLCA2OSwgODAsIDEyOCwgODMsIDgzLCA3MywgNjksIDEyOCwgODMsIDgzLCA3MywgMTI4LCAKKyAgICA4MywgODMsIDcyLCA2OSwgMTI4LCA4MywgODMsIDY5LCA4OCwgMTI4LCA4MywgODMsIDY5LCA4MCwgMTI4LCA4MywgODMsIAorICAgIDY5LCA2OSwgMTI4LCA4MywgODMsIDY1LCA4OCwgMTI4LCA4MywgODMsIDY1LCA4NSwgMTI4LCA4MywgODMsIDY1LCA4NCwgCisgICAgMTI4LCA4MywgODMsIDY1LCA4MCwgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDg5LCA2OSwgNzksIDgyLCA3MywgNzgsIDcyLCAKKyAgICA3MywgNjksIDg1LCA3MiwgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDg0LCA3MywgNzUsIDY5LCA4NSwgODQsIDQ1LCA4MCwgCisgICAgNzMsIDY5LCA4NSwgODAsIDEyOCwgODMsIDgzLCA2NSwgNzgsIDcxLCA4NCwgNzMsIDc1LCA2OSwgODUsIDg0LCAxMjgsIDgzLCAKKyAgICA4MywgNjUsIDc4LCA3MSwgODQsIDcyLCA3MywgNjksIDg1LCA4NCwgNzIsIDEyOCwgODMsIDgzLCA2NSwgNzgsIDcxLCA4MywgCisgICAgNzMsIDc5LCA4MywgNDUsIDg0LCA3MywgNzUsIDY5LCA4NSwgODQsIDEyOCwgODMsIDgzLCA2NSwgNzgsIDcxLCA4MywgNzMsIAorICAgIDc5LCA4MywgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDgzLCA3MywgNzksIDgzLCAKKyAgICA0NSwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDgzLCA3MywgNzksIDgzLCAxMjgsIAorICAgIDgzLCA4MywgNjUsIDc4LCA3MSwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgNzUsIDcyLCA3MywgNjksIDg1LCA3NSwgNzIsIAorICAgIDEyOCwgODMsIDgzLCA2NSwgNzgsIDcxLCA4MiwgNzMsIDY5LCA4NSwgNzYsIDEyOCwgODMsIDgzLCA2NSwgNzgsIDcxLCA4MCwgCisgICAgNzMsIDY5LCA4NSwgODAsIDEyOCwgODMsIDgzLCA2NSwgNzgsIDcxLCA3OCwgNzMsIDY5LCA4NSwgNzgsIDEyOCwgODMsIDgzLCAKKyAgICA2NSwgNzgsIDcxLCA3NywgNzMsIDY5LCA4NSwgNzcsIDEyOCwgODMsIDgzLCA2NSwgNzgsIDcxLCA3NSwgNzMsIDg5LCA2OSwgCisgICAgNzksIDc1LCAxMjgsIDgzLCA4MywgNjUsIDc4LCA3MSwgNzMsIDY5LCA4NSwgNzgsIDcxLCAxMjgsIDgzLCA4MywgNjUsIDc4LCAKKyAgICA3MSwgNzIsIDczLCA2OSwgODUsIDcyLCAxMjgsIDgzLCA4MywgNjUsIDc4LCA3MSwgNjcsIDczLCA2OSwgODUsIDY3LCA0NSwgCisgICAgNzIsIDczLCA2OSwgODUsIDcyLCAxMjgsIDgzLCA4MywgNjUsIDc4LCA3MSwgNjcsIDczLCA2OSwgODUsIDY3LCAxMjgsIDgzLCAKKyAgICA4MywgNjUsIDc4LCA3MSwgNjUsIDgyLCA2NSwgNjksIDY1LCAxMjgsIDgzLCA4MywgNjUsIDczLCAxMjgsIDgzLCA4MywgNjUsIAorICAgIDY1LCAxMjgsIDgzLCA4MywgNTEsIDEyOCwgODMsIDgzLCA1MCwgMTI4LCA4MywgODIsIDEyOCwgODMsIDgxLCA4NSwgNzMsIAorICAgIDgzLCAyMDAsIDgzLCA4MSwgODUsIDczLCA4MiwgODIsIDY5LCAyMDQsIDgzLCA4MSwgODUsIDczLCA3MSwgNzEsIDc2LCAKKyAgICAxOTcsIDgzLCA4MSwgODUsIDY1LCAyMTIsIDgzLCA4MSwgODUsIDY1LCA4MiwgNjksIDgzLCAxMjgsIDgzLCA4MSwgODUsIAorICAgIDY1LCA4MiwgNjksIDY4LCAxMjgsIDgzLCA4MSwgODUsIDY1LCA4MiwgNjksIDEyOCwgODMsIDgwLCA4NywgNjUsIDEyOCwgCisgICAgODMsIDgwLCA4NSwgNzgsIDcxLCAyMTEsIDgzLCA4MCwgODIsIDc5LCA4NSwgODQsIDEyOCwgODMsIDgwLCA4MiwgNzMsIDc4LCAKKyAgICA3MSwgODMsIDEyOCwgODMsIDgwLCA4MiwgNzMsIDc4LCA3MSwgMTI4LCA4MywgODAsIDgyLCA2OSwgNjcsIDcyLCA3MSwgNjksIAorICAgIDgzLCA2NSwgNzgsIDE5OSwgODMsIDgwLCA3OSwgODUsIDg0LCA3MywgNzgsIDE5OSwgODMsIDgwLCA3OSwgODQsIDEyOCwgCisgICAgODMsIDgwLCA3OSwgNzksIDc4LCAxMjgsIDgzLCA4MCwgNzYsIDczLCA4NCwgODQsIDczLCA3OCwgMTk5LCA4MywgODAsIDc2LCAKKyAgICA2NSwgODMsIDcyLCA3MywgNzgsIDE5OSwgODMsIDgwLCA3MywgODIsIDczLCA4NCwgODUsIDIxMSwgODMsIDgwLCA3MywgODIsIAorICAgIDczLCA4NCwgMTI4LCA4MywgODAsIDczLCA4MiwgNzMsIDIxMiwgODMsIDgwLCA3MywgODIsIDY1LCA3OCwgODQsIDEyOCwgCisgICAgODMsIDgwLCA3MywgODIsIDY1LCA3NiwgMTI4LCA4MywgODAsIDczLCA4MiwgNjUsIDIwNCwgODMsIDgwLCA3MywgNjgsIDY5LCAKKyAgICA4MiwgMjE3LCA4MywgODAsIDczLCA2NywgNjksIDEyOCwgODMsIDgwLCA3MiwgNjksIDgyLCA3MywgNjcsIDY1LCAyMDQsIAorICAgIDgzLCA4MCwgNjksIDgzLCA3NywgNzMsIDc2LCAyMDcsIDgzLCA4MCwgNjksIDY5LCA2OCwgNjYsIDc5LCA2NSwgODQsIDEyOCwgCisgICAgODMsIDgwLCA2OSwgNjksIDY3LCA3MiwgMTI4LCA4MywgODAsIDY5LCA2OSwgNjcsIDIwMCwgODMsIDgwLCA2OSwgNjcsIDczLCAKKyAgICA2NSwgNzYsIDEyOCwgODMsIDgwLCA2OSwgNjUsIDgyLCAxMjgsIDgzLCA4MCwgNjksIDY1LCA3NSwgNjksIDgyLCAxMjgsIAorICAgIDgzLCA4MCwgNjksIDY1LCA3NSwgNjksIDIxMCwgODMsIDgwLCA2OSwgNjUsIDc1LCA0NSwgNzgsIDc5LCA0NSwgNjksIDg2LCAKKyAgICA3MywgMjA0LCA4MywgODAsIDY1LCA4NCwgNzIsIDczLCAxMjgsIDgzLCA4MCwgNjUsIDgyLCA3NSwgNzYsIDczLCA3OCwgCisgICAgMTk5LCA4MywgODAsIDY1LCA4MiwgNzUsIDc2LCA2OSwgODMsIDEyOCwgODMsIDgwLCA2NSwgODIsIDc1LCA3NiwgNjksIDgyLCAKKyAgICAxMjgsIDgzLCA4MCwgNjUsIDgyLCA3NSwgNzYsIDY5LCAxMjgsIDgzLCA4MCwgNjUsIDcxLCA3MiwgNjksIDg0LCA4NCwgNzMsIAorICAgIDEyOCwgODMsIDgwLCA2NSwgNjgsIDY5LCA4MywgMTI4LCA4MywgODAsIDY1LCA2OCwgMTk3LCA4MywgODAsIDY1LCA2NywgCisgICAgNzMsIDc4LCAxOTksIDgzLCA4MCwgNjUsIDY3LCAxOTcsIDgzLCA4MCwgNjUsIDEyOCwgODMsIDc5LCA4OSwgMTI4LCA4MywgCisgICAgNzksIDg3LCA3MywgNzYsIDIwNywgODMsIDc5LCA4NywgMTI4LCA4MywgNzksIDg1LCA4NCwgNzIsIDY5LCA4MiwgMjA2LCAKKyAgICA4MywgNzksIDg1LCA4NCwgNzIsIDQ1LCA4MywgNzYsIDY1LCA4NiwgNjksIDIxNywgODMsIDc5LCA4NSwgODQsIDIwMCwgODMsIAorICAgIDc5LCA4NSwgODIsIDY3LCA2OSwgMTI4LCA4MywgNzksIDg1LCA3OCwgNjgsIDEyOCwgODMsIDc5LCA4NSwgNzgsIDE5NiwgCisgICAgODMsIDc5LCA4NSwgNzgsIDY1LCA4MCwgMTI4LCA4MywgNzksIDg1LCAxMjgsIDgzLCA3OSwgODMsIDEyOCwgODMsIDc5LCAKKyAgICA4MiwgMTkzLCA4MywgNzksIDgxLCAxMjgsIDgzLCA3OSwgNzksIDIwNiwgODMsIDc5LCA3OCwgNzQsIDY1LCA3NywgMTI4LCAKKyAgICA4MywgNzksIDc4LCA3MSwgMTI4LCA4MywgNzksIDc4LCAxMjgsIDgzLCA3OSwgNzcsIDgwLCA2OSwgNzgsIDE5OSwgODMsIAorICAgIDc5LCA3NywgMTI4LCA4MywgNzksIDc2LCA3MywgNjgsIDg1LCA4MywgMTI4LCA4MywgNzksIDc2LCA3MywgNjgsIDg1LCAKKyAgICAyMTEsIDgzLCA3OSwgNzIsIDEyOCwgODMsIDc5LCA3MSwgNjgsIDczLCA2NSwgMjA2LCA4MywgNzksIDcwLCA4NCwgODcsIAorICAgIDY1LCA4MiwgNjksIDQ1LCA3MCwgODUsIDc4LCA2NywgODQsIDczLCA3OSwgMjA2LCA4MywgNzksIDcwLCA4NCwgNzgsIDY5LCAKKyAgICA4MywgODMsIDEyOCwgODMsIDc5LCA3MCwgMjEyLCA4MywgNzksIDE5OCwgODMsIDc5LCA2NywgNzMsIDY5LCA4NCwgODksIAorICAgIDEyOCwgODMsIDc5LCA2NywgNjcsIDY5LCAyMTAsIDgzLCA3OSwgNjUsIDgwLCAxMjgsIDgzLCA3OSwgNjUsIDEyOCwgODMsIAorICAgIDIwNywgODMsIDc4LCA3OSwgODcsIDc3LCA2NSwgNzgsIDEyOCwgODMsIDc4LCA3OSwgODcsIDc3LCA2NSwgMjA2LCA4MywgCisgICAgNzgsIDc5LCA4NywgNzAsIDc2LCA2NSwgNzUsIDY5LCAxMjgsIDgzLCA3OCwgNzksIDg3LCA2NiwgNzksIDY1LCA4MiwgNjgsIAorICAgIDY5LCA4MiwgMTI4LCA4MywgNzgsIDc5LCA4NywgMTI4LCA4MywgNzgsIDc5LCA4NSwgODQsIDEyOCwgODMsIDc4LCA3OSwgCisgICAgODUsIDIxMiwgODMsIDc4LCA2NSwgMjA4LCA4MywgNzgsIDY1LCA3NSwgNjksIDEyOCwgODMsIDc4LCA2NSwgNzUsIDE5NywgCisgICAgODMsIDc4LCA2NSwgNzMsIDc2LCAxMjgsIDgzLCA3OCwgMTkzLCA4MywgNzcsIDc5LCA3NSwgNzMsIDc4LCAxOTksIDgzLCAKKyAgICA3NywgNzMsIDgyLCA3NSwgNzMsIDc4LCAxOTksIDgzLCA3NywgNzMsIDc2LCA3MywgNzgsIDE5OSwgODMsIDc3LCA3MywgNzYsIAorICAgIDY5LCAxMjgsIDgzLCA3NywgNjksIDY1LCA4MiwgMTI4LCA4MywgNzcsIDY1LCA4MywgMjAwLCA4MywgNzcsIDY1LCA3NiwgCisgICAgNzYsIDY5LCAyMTAsIDgzLCA3NywgNjUsIDc2LCA3NiwgMTI4LCA4MywgNzYsIDg1LCA4MiwgMTI4LCA4MywgNzYsIDc5LCAKKyAgICA4NywgNzYsIDg5LCAxMjgsIDgzLCA3NiwgNzksIDIxNSwgODMsIDc2LCA3OSwgODYsIDc5LCAxMjgsIDgzLCA3NiwgNzksIAorICAgIDIxMiwgODMsIDc2LCA3OSwgODAsIDczLCA3OCwgMTk5LCA4MywgNzYsIDc5LCA4MCwgNjksIDEyOCwgODMsIDc2LCA3MywgCisgICAgNzgsIDcxLCAxMjgsIDgzLCA3NiwgNzMsIDY4LCA3MywgNzgsIDcxLCAxMjgsIDgzLCA3NiwgNzMsIDY3LCA2OSwgMTI4LCAKKyAgICA4MywgNzYsIDczLCA2NywgMTk3LCA4MywgNzYsIDY5LCA2OSwgODAsIDIxNywgODMsIDc2LCA2OSwgNjksIDgwLCA3MywgNzgsIAorICAgIDE5OSwgODMsIDc2LCA2NSwgODYsIDc5LCA3OCwgNzMsIDE5NSwgODMsIDc2LCA2NSwgODYsIDY5LCAxMjgsIDgzLCA3NiwgCisgICAgNjUsIDgzLCA3MiwgMTI4LCA4MywgNzYsIDY1LCA4MywgMjAwLCA4MywgNzYsIDY1LCA3OCwgODQsIDY5LCAxOTYsIDgzLCAKKyAgICA3NSwgODcsIDY1LCAxMjgsIDgzLCA3NSwgODcsIDEyOCwgODMsIDc1LCA4NSwgNzYsIDc2LCAxMjgsIDgzLCA3NSwgODUsIAorICAgIDc2LCAyMDQsIDgzLCA3NSwgNzYsIDczLCA4MiwgNzksIDIwNiwgODMsIDc1LCA3MywgNzgsIDEyOCwgODMsIDc1LCA3MywgCisgICAgNjksIDgyLCAxMjgsIDgzLCA3NSwgMjAxLCA4MywgNzUsIDY5LCA4NywgNjksIDE5NiwgODMsIDc1LCA2NSwgODQsIDY5LCAKKyAgICAxMjgsIDgzLCA3NSwgMTI4LCA4MywgNzQsIDY5LCAxMjgsIDgzLCA3MywgODgsIDg0LCA4OSwgNDUsIDcwLCA3OSwgODUsIAorICAgIDgyLCA4NCwgMjAwLCA4MywgNzMsIDg4LCA4NCwgODksIDEyOCwgODMsIDczLCA4OCwgODQsIDIxNywgODMsIDczLCA4OCwgCisgICAgODQsIDcyLCA4MywgMTI4LCA4MywgNzMsIDg4LCA4NCwgNzIsIDIxMSwgODMsIDczLCA4OCwgODQsIDcyLCAxMjgsIDgzLCAKKyAgICA3MywgODgsIDg0LCA2OSwgNjksIDc4LCA4NCwgNzIsIDgzLCAxMjgsIDgzLCA3MywgODgsIDg0LCA2OSwgNjksIDc4LCA4NCwgCisgICAgNzIsIDEyOCwgODMsIDczLCA4OCwgODQsIDY5LCA2OSwgNzgsIDg0LCAyMDAsIDgzLCA3MywgODgsIDg0LCA2OSwgNjksIDc4LCAKKyAgICAxMjgsIDgzLCA3MywgODgsIDg0LCA2OSwgNjksIDIwNiwgODMsIDczLCA4OCwgNDUsIDg0LCA3MiwgNzMsIDgyLCA4NCwgODksIAorICAgIDEyOCwgODMsIDczLCA4OCwgNDUsIDgzLCA4NCwgODIsIDczLCA3OCwgMTk5LCA4MywgNzMsIDg4LCA0NSwgODAsIDY5LCA4MiwgCisgICAgNDUsIDY5LCAyMDUsIDgzLCA3MywgODgsIDQ1LCA3NiwgNzMsIDc4LCAxOTcsIDgzLCA3MywgMjE2LCA4MywgNzMsIDg0LCAKKyAgICA2OSwgMTI4LCA4MywgNzMsIDgzLCA2NSwgMTI4LCA4MywgNzMsIDgyLCA3MywgNzgsIDcxLCA4NSwgMTI4LCA4MywgNzMsIAorICAgIDc5LCA4MywgNDUsIDg0LCA3MiwgNzMsIDY5LCA4NSwgODQsIDcyLCAxMjgsIDgzLCA3MywgNzksIDgzLCA0NSwgODMsIDgzLCAKKyAgICA2NSwgNzgsIDcxLCA4MywgNzMsIDc5LCA4MywgMTI4LCA4MywgNzMsIDc5LCA4MywgNDUsIDgyLCA3MywgNjksIDg1LCA3NiwgCisgICAgMTI4LCA4MywgNzMsIDc5LCA4MywgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIAorICAgIDEyOCwgODMsIDczLCA3OSwgODMsIDQ1LCA4MCwgNzIsIDczLCA2OSwgODUsIDgwLCA3MiwgMTI4LCA4MywgNzMsIDc5LCA4MywgCisgICAgNDUsIDgwLCA2NSwgNzgsIDgzLCA3MywgNzksIDgzLCAxMjgsIDgzLCA3MywgNzksIDgzLCA0NSwgNzgsIDczLCA2OSwgODUsIAorICAgIDc4LCAxMjgsIDgzLCA3MywgNzksIDgzLCA0NSwgNzcsIDczLCA2OSwgODUsIDc3LCAxMjgsIDgzLCA3MywgNzksIDgzLCA0NSwgCisgICAgNzUsIDcyLCA3MywgNjksIDg1LCA3NSwgNzIsIDEyOCwgODMsIDczLCA3OSwgODMsIDQ1LCA3NSwgNjUsIDgwLCA4OSwgNjksIAorICAgIDc5LCA4NSwgNzgsIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCA4MywgNzMsIDc5LCA4MywgNDUsIDczLCA2OSwgODUsIDc4LCAKKyAgICA3MSwgMTI4LCA4MywgNzMsIDc5LCA4MywgNDUsIDcyLCA3MywgNjksIDg1LCA3MiwgMTI4LCA4MywgNzMsIDc5LCA4MywgNDUsIAorICAgIDY3LCA3MywgNjksIDg1LCA2NywgMTI4LCA4MywgNzMsIDc5LCA4MywgNDUsIDY3LCA3MiwgNzMsIDY5LCA4NSwgNjcsIDcyLCAKKyAgICAxMjgsIDgzLCA3MywgNzksIDIxMSwgODMsIDczLCA3OCwgNzUsIDczLCA3OCwgNzEsIDEyOCwgODMsIDczLCA3OCwgNzEsIAorICAgIDc2LCA2OSwgNDUsIDgzLCA3MiwgNzMsIDcwLCA4NCwgNDUsIDUxLCAxMjgsIDgzLCA3MywgNzgsIDcxLCA3NiwgNjksIDQ1LCAKKyAgICA4MywgNzIsIDczLCA3MCwgODQsIDQ1LCA1MCwgMTI4LCA4MywgNzMsIDc4LCA3MSwgNzYsIDY5LCA0NSwgNzYsIDczLCA3OCwgCisgICAgMTk3LCA4MywgNzMsIDc4LCA3MSwgNzYsIDY5LCAxMjgsIDgzLCA3MywgNzgsIDcxLCA3NiwgMTk3LCA4MywgNzMsIDc4LCAKKyAgICA3MSwgNjUsIDY1LCA4NCwgMTI4LCA4MywgNzMsIDc4LCAxOTcsIDgzLCA3MywgNzgsIDY4LCA3MiwgMjAxLCA4MywgNzMsIAorICAgIDIwNiwgODMsIDczLCA3NywgODAsIDc2LCA3MywgNzAsIDczLCA2OSwgMTk2LCA4MywgNzMsIDc3LCA3MywgNzYsIDY1LCA4MiwgCisgICAgMTI4LCA4MywgNzMsIDc3LCA3MywgNzYsIDY1LCAyMTAsIDgzLCA3MywgNzcsIDY1LCA3OCwgODMsIDczLCAyMTEsIDgzLCAKKyAgICA3MywgNzcsIDY1LCA3NiwgODUsIDc4LCA3MSwgODUsIDIwNiwgODMsIDczLCA3NywgNjUsIDEyOCwgODMsIDczLCA3NiwgODYsIAorICAgIDY5LCA4MiwgMTI4LCA4MywgNzMsIDc2LCA3NSwgMTI4LCA4MywgNzMsIDc2LCA3MywgODEsIDg1LCAxOTMsIDgzLCA3MywgCisgICAgNzYsIDcyLCA3OSwgODUsIDY5LCA4NCwgODQsIDY5LCAxMjgsIDgzLCA3MywgNzYsIDcyLCA3OSwgODUsIDY5LCA4NCwgODQsIAorICAgIDE5NywgODMsIDczLCA3NiwgNjUsIDUxLCAxMjgsIDgzLCA3MywgNzUsIDczLCAxMjgsIDgzLCA3MywgNzUsIDUwLCAxMjgsIAorICAgIDgzLCA3MywgNzUsIDE3OCwgODMsIDczLCA3MSwgNzgsIDgzLCAxMjgsIDgzLCA3MywgNzEsIDc3LCA2NSwgMTI4LCA4MywgCisgICAgNzMsIDcxLCA3NywgMTkzLCA4MywgNzMsIDcxLCA2OSwgMjA0LCA4MywgNzMsIDcxLCA1MiwgMTI4LCA4MywgNzMsIDcxLCAKKyAgICAxODAsIDgzLCA3MywgNzEsIDEyOCwgODMsIDczLCA2OSwgNjksIDEyOCwgODMsIDczLCA2OCwgNjksIDg3LCA2NSwgODksIAorICAgIDIxMSwgODMsIDczLCA2NywgNzUsIDc4LCA2OSwgODMsIDgzLCAxMjgsIDgzLCA3MywgNjcsIDc1LCA3NiwgNjksIDEyOCwgCisgICAgODMsIDczLCA2NiwgMTk3LCA4MywgMjAxLCA4MywgNzIsIDg5LCA4OCwgMTI4LCA4MywgNzIsIDg5LCA4NCwgMTI4LCA4MywgCisgICAgNzIsIDg5LCA4MiwgODgsIDEyOCwgODMsIDcyLCA4OSwgODIsIDEyOCwgODMsIDcyLCA4OSwgODAsIDEyOCwgODMsIDcyLCAKKyAgICA4OSwgNjksIDEyOCwgODMsIDcyLCA4OSwgNjUsIDEyOCwgODMsIDcyLCA4OSwgMTI4LCA4MywgNzIsIDg3LCA3OSwgODksIAorICAgIDEyOCwgODMsIDcyLCA4NywgNzksIDc5LCAxMjgsIDgzLCA3MiwgODcsIDc5LCAxMjgsIDgzLCA3MiwgODcsIDczLCA3MywgCisgICAgMTI4LCA4MywgNzIsIDg3LCA3MywgMTI4LCA4MywgNzIsIDg3LCA2OSwgMTI4LCA4MywgNzIsIDg3LCA2NSwgNjUsIDEyOCwgCisgICAgODMsIDcyLCA4NywgNjUsIDEyOCwgODMsIDcyLCA4NSwgODgsIDEyOCwgODMsIDcyLCA4NSwgODUsIDEyOCwgODMsIDcyLCAKKyAgICA4NSwgODQsIDEyOCwgODMsIDcyLCA4NSwgODIsIDg4LCAxMjgsIDgzLCA3MiwgODUsIDgyLCAxMjgsIDgzLCA3MiwgODUsIAorICAgIDgwLCAxMjgsIDgzLCA3MiwgODUsIDc5LCA4OCwgMTI4LCA4MywgNzIsIDg1LCA3OSwgODAsIDEyOCwgODMsIDcyLCA4NSwgCisgICAgNzksIDEyOCwgODMsIDcyLCA4NSwgNzcsIDEyOCwgODMsIDcyLCA4NSwgNzAsIDcwLCA3NiwgMTk3LCA4MywgNzIsIDg1LCAKKyAgICA2OSwgODEsIDEyOCwgODMsIDcyLCA4NSwgNjksIDc4LCA4MywgNzIsIDg1LCA2OSwgODQsIDEyOCwgODMsIDcyLCA4NSwgNjYsIAorICAgIDg1LCA4MiwgMTI4LCA4MywgNzIsIDg1LCA1MCwgMTI4LCA4MywgNzIsIDg1LCAxNzgsIDgzLCA3MiwgODUsIDEyOCwgODMsIAorICAgIDcyLCAyMTMsIDgzLCA3MiwgODQsIDY1LCA4MCwgNzMsIDY3LCAxMjgsIDgzLCA3MiwgODQsIDY1LCAxMjgsIDgzLCA3MiwgCisgICAgODIsIDczLCA3OCwgNjksIDEyOCwgODMsIDcyLCA4MiwgNzMsIDc3LCA4MCwgMTI4LCA4MywgNzIsIDgyLCA3MywgNzMsIAorICAgIDEyOCwgODMsIDcyLCA3OSwgODksIDEyOCwgODMsIDcyLCA3OSwgODgsIDEyOCwgODMsIDcyLCA3OSwgODcsIDY5LCA4MiwgCisgICAgMTI4LCA4MywgNzIsIDc5LCA4NSwgNzYsIDY4LCA2OSwgODIsIDY5LCAxOTYsIDgzLCA3MiwgNzksIDg0LCAxMjgsIDgzLCAKKyAgICA3MiwgNzksIDgyLCA4NCwgODMsIDEyOCwgODMsIDcyLCA3OSwgODIsIDg0LCAyMTEsIDgzLCA3MiwgNzksIDgyLCA4NCwgNjksIAorICAgIDc4LCA2OSwgODIsIDEyOCwgODMsIDcyLCA3OSwgODIsIDg0LCA2NywgNjUsIDc1LCA2OSwgMTI4LCA4MywgNzIsIDc5LCA4MiwgCisgICAgODQsIDQ1LCA4NCwgODcsIDczLCA3MSwgNDUsIDg5LCA4MiwgMTI4LCA4MywgNzIsIDc5LCA4MiwgODQsIDQ1LCA4NCwgODcsIAorICAgIDczLCA3MSwgNDUsIDg0LCA4OSwgMjEwLCA4MywgNzIsIDc5LCA4MiwgODQsIDQ1LCA4NCwgODcsIDczLCA3MSwgNDUsIDgzLCAKKyAgICA3OSwgMjA0LCA4MywgNzIsIDc5LCA4MiwgODQsIDQ1LCA4NCwgODcsIDczLCA3MSwgNDUsIDc5LCA4MywgMjExLCA4MywgNzIsIAorICAgIDc5LCA4MiwgODQsIDQ1LCA4NCwgODcsIDczLCA3MSwgNDUsIDc4LCA2NSwgODUsIDE5NiwgODMsIDcyLCA3OSwgODIsIDg0LCAKKyAgICA0NSwgODQsIDg3LCA3MywgNzEsIDQ1LCA3NywgNjUsIDY4LCAyMTAsIDgzLCA3MiwgNzksIDgyLCA4NCwgNDUsIDg0LCA4NywgCisgICAgNzMsIDcxLCA0NSwgNzIsIDY1LCA3MSwgNjUsIDc2LCAyMDQsIDgzLCA3MiwgNzksIDgyLCA4NCwgNDUsIDg0LCA4NywgNzMsIAorICAgIDcxLCA0NSwgNjYsIDc0LCA2NSwgODIsIDc1LCA2NSwgMjA2LCA4MywgNzIsIDc5LCA4MiwgODQsIDQ1LCA4NCwgODcsIDczLCAKKyAgICA3MSwgNDUsIDY1LCAyMTAsIDgzLCA3MiwgNzksIDgyLCA4NCwgMTI4LCA4MywgNzIsIDc5LCA4MiwgMjEyLCA4MywgNzIsIAorICAgIDc5LCA4MSwgMTI4LCA4MywgNzIsIDc5LCAyMDksIDgzLCA3MiwgNzksIDgwLCAxMjgsIDgzLCA3MiwgNzksIDc5LCA4NCwgCisgICAgNzMsIDc4LCAxOTksIDgzLCA3MiwgNzksIDc5LCA4NCwgMTI4LCA4MywgNzIsIDc5LCA3OSwgMTI4LCA4MywgNzIsIDc5LCAKKyAgICA3MSwgMjAxLCA4MywgNzIsIDc5LCAxOTksIDgzLCA3MiwgNzksIDY5LCAxMjgsIDgzLCA3MiwgNzksIDE5NywgODMsIDcyLCAKKyAgICA3OSwgNjUsIDEyOCwgODMsIDcyLCA3OSwgMTI4LCA4MywgNzIsIDczLCA4OSwgODksIDY1LCA2NSwgNzYsIDY1LCA2NSwgCisgICAgMTI4LCA4MywgNzIsIDczLCA4NCwgNjUsIDEyOCwgODMsIDcyLCA3MywgODQsIDE5MywgODMsIDcyLCA3MywgODIsIDIxMiwgCisgICAgODMsIDcyLCA3MywgODIsIDY1LCA2OSwgMTI4LCA4MywgNzIsIDczLCA4MiwgMTI4LCA4MywgNzIsIDczLCAyMTAsIDgzLCAKKyAgICA3MiwgNzMsIDgxLCAxMjgsIDgzLCA3MiwgNzMsIDgwLCAxMjgsIDgzLCA3MiwgNzMsIDc4LCA4NCwgMjA3LCA4MywgNzIsIAorICAgIDczLCA3OCwgNzMsIDcxLCAxMjgsIDgzLCA3MiwgNzMsIDc4LCA2OCwgMTkzLCA4MywgNzIsIDczLCA3OCwgMTI4LCA4MywgCisgICAgNzIsIDczLCAyMDYsIDgzLCA3MiwgNzMsIDc3LCA2NSwgMTI4LCA4MywgNzIsIDczLCA3NywgMTkzLCA4MywgNzIsIDczLCAKKyAgICA3NywgMTI4LCA4MywgNzIsIDczLCAyMDUsIDgzLCA3MiwgNzMsIDczLCA3OCwgMTI4LCA4MywgNzIsIDczLCA3MywgMTI4LCAKKyAgICA4MywgNzIsIDczLCA3MCwgMjEyLCA4MywgNzIsIDczLCA2OSwgNzYsIDY4LCAxMjgsIDgzLCA3MiwgNzMsIDY4LCAxMjgsIAorICAgIDgzLCA3MiwgNzMsIDE5NiwgODMsIDcyLCA3MiwgNjUsIDEyOCwgODMsIDcyLCA3MiwgMTkzLCA4MywgNzIsIDY5LCA4OCwgCisgICAgMTI4LCA4MywgNzIsIDY5LCA4NiwgNjUsIDEyOCwgODMsIDcyLCA2OSwgODUsIDg4LCAxMjgsIDgzLCA3MiwgNjksIDg1LCAKKyAgICA3OSwgODEsIDEyOCwgODMsIDcyLCA2OSwgODUsIDY1LCA2OSwgODEsIDg0LCA4NSwgMTI4LCA4MywgNzIsIDY5LCA4NSwgNjUsIAorICAgIDY5LCA4MSwgMTI4LCA4MywgNzIsIDY5LCA4NSwgNjUsIDY5LCAxMjgsIDgzLCA3MiwgNjksIDg0LCAxMjgsIDgzLCA3MiwgCisgICAgNjksIDIxMiwgODMsIDcyLCA2OSwgODMsIDcyLCA3NiwgNjUsIDc3LCAxMjgsIDgzLCA3MiwgNjksIDgzLCA3MiwgNzMsIDcxLCAKKyAgICAxMjgsIDgzLCA3MiwgNjksIDgzLCA3MiwgNzMsIDE5OSwgODMsIDcyLCA2OSwgODMsIDcyLCA1MCwgMTI4LCA4MywgNzIsIAorICAgIDY5LCA4MywgNzIsIDEyOCwgODMsIDcyLCA2OSwgODEsIDY5LCAyMDQsIDgzLCA3MiwgNjksIDgwLCAxMjgsIDgzLCA3MiwgCisgICAgNjksIDc4LCAxMjgsIDgzLCA3MiwgNjksIDc2LCA3NiwgMTI4LCA4MywgNzIsIDY5LCA3NiwgMjA0LCA4MywgNzIsIDY5LCAKKyAgICA3NiwgNzAsIDEyOCwgODMsIDcyLCA2OSwgNzMsIDEyOCwgODMsIDcyLCA2OSwgNzEsIDU3LCAxMjgsIDgzLCA3MiwgNjksIAorICAgIDY5LCA4MCwgMTI4LCA4MywgNzIsIDY5LCA2OSwgNzgsIDg1LCAxMjgsIDgzLCA3MiwgNjksIDY5LCA3OCwgMTI4LCA4MywgCisgICAgNzIsIDY5LCA2OSwgMjA2LCA4MywgNzIsIDY5LCA2OSwgMTI4LCA4MywgNzIsIDY5LCA0NSwgNzEsIDc5LCA2NSwgODQsIAorICAgIDEyOCwgODMsIDcyLCAxOTcsIDgzLCA3MiwgNjcsIDcyLCA2NSwgMTI4LCA4MywgNzIsIDY1LCA4OSwgMTI4LCA4MywgNzIsIAorICAgIDY1LCA4OCwgMTI4LCA4MywgNzIsIDY1LCA4NiwgNzMsIDg5LCA2NSwgNzgsIDczLCAxMjgsIDgzLCA3MiwgNjUsIDg2LCA3MywgCisgICAgNjUsIDIwNiwgODMsIDcyLCA2NSwgODYsIDY5LCAxOTYsIDgzLCA3MiwgNjUsIDg1LCAxMjgsIDgzLCA3MiwgNjUsIDg0LCAKKyAgICAxMjgsIDgzLCA3MiwgNjUsIDgyLCA4NSwgMTI4LCA4MywgNzIsIDY1LCA4MiwgMjEzLCA4MywgNzIsIDY1LCA4MiwgODAsIAorICAgIDEyOCwgODMsIDcyLCA2NSwgODIsIDIwOCwgODMsIDcyLCA2NSwgODIsIDY1LCAxMjgsIDgzLCA3MiwgNjUsIDgyLCA1MCwgCisgICAgMTI4LCA4MywgNzIsIDY1LCA4MiwgMTc4LCA4MywgNzIsIDY1LCA4MCwgNzMsIDc4LCA3MSwgMTI4LCA4MywgNzIsIDY1LCAKKyAgICA4MCwgNjksIDgzLCAxMjgsIDgzLCA3MiwgNjUsIDgwLCAxOTcsIDgzLCA3MiwgNjUsIDgwLCAxMjgsIDgzLCA3MiwgNjUsIAorICAgIDc4LCA3MSwgMTI4LCA4MywgNzIsIDY1LCA3OCwgMTI4LCA4MywgNzIsIDY1LCAyMDYsIDgzLCA3MiwgNjUsIDc3LCA4MiwgCisgICAgNzksIDY3LCA3NSwgMTI4LCA4MywgNzIsIDY1LCA3NiwgODMsIDcyLCA2OSwgNzYsIDY5LCA4NCwgMTI4LCA4MywgNzIsIDY1LCAKKyAgICA3NSwgODQsIDczLCAxMjgsIDgzLCA3MiwgNjUsIDczLCAxMjgsIDgzLCA3MiwgNjUsIDY4LCA3OSwgODcsIDY5LCAxOTYsIAorICAgIDgzLCA3MiwgNjUsIDY4LCA2OSwgMTI4LCA4MywgNzIsIDY1LCA2OCwgNjgsIDY1LCAxMjgsIDgzLCA3MiwgNjUsIDY4LCA2OCwgCisgICAgMTkzLCA4MywgNzIsIDY1LCA2OCwgMTI4LCA4MywgNzIsIDY1LCAxOTYsIDgzLCA3MiwgNjUsIDY2LCA1NCwgMTI4LCA4MywgCisgICAgNzIsIDY1LCA2NSwgMTI4LCA4MywgNzIsIDY1LCA1NCwgMTI4LCA4MywgNzIsIDY1LCA1MSwgMTI4LCA4MywgNzIsIDY1LCAKKyAgICAxNzksIDgzLCA3MSwgODIsIDE5MywgODMsIDcxLCA3OSwgMjEwLCA4MywgNzEsIDY3LCAxMjgsIDgzLCA3MSwgNjUsIDIxNSwgCisgICAgODMsIDcxLCA2NSwgMTk0LCA4MywgNzEsIDEyOCwgODMsIDY5LCA4OCwgODQsIDg1LCA3NiwgMTkzLCA4MywgNjksIDg4LCAKKyAgICA4NCwgNzMsIDc2LCA2OSwgMTI4LCA4MywgNjksIDg4LCA4NCwgNjUsIDc4LCAyMTEsIDgzLCA2OSwgODYsIDY5LCA4MiwgNjUsIAorICAgIDc4LCA2NywgNjksIDEyOCwgODMsIDY5LCA4NiwgNjksIDc4LCA4NCwgODksIDEyOCwgODMsIDY5LCA4NiwgNjksIDc4LCA4NCwgCisgICAgMjE3LCA4MywgNjksIDg2LCA2OSwgNzgsIDg0LCA3MiwgMTI4LCA4MywgNjksIDg2LCA2OSwgNzgsIDg0LCA2OSwgNjksIDc4LCAKKyAgICAxMjgsIDgzLCA2OSwgODYsIDY5LCA3OCwgODQsIDY5LCA2OSwgMjA2LCA4MywgNjksIDg2LCA2OSwgNzgsIDQ1LCA4NCwgNzIsIAorICAgIDczLCA4MiwgODQsIDg5LCAxMjgsIDgzLCA2OSwgODYsIDY5LCAyMDYsIDgzLCA2OSwgODUsIDg4LCAxMjgsIDgzLCA2OSwgCisgICAgODUsIDc4LCA4OSwgNjUsIDc3LCAxMjgsIDgzLCA2OSwgODUsIDY1LCA2OSwgODEsIDEyOCwgODMsIDY5LCA4NCwgNzAsIDc5LCAKKyAgICA3OCwgMTI4LCA4MywgNjksIDgzLCA4NCwgNjksIDgyLCA4NCwgNzMsIDg1LCAyMTEsIDgzLCA2OSwgODMsIDgxLCA4NSwgNzMsIAorICAgIDgxLCA4NSwgNjUsIDY4LCA4MiwgNjUsIDg0LCA2OSwgMTI4LCA4MywgNjksIDgzLCA2NSwgNzcsIDE5NywgODMsIDY5LCA4MiwgCisgICAgODYsIDczLCA2NywgMTk3LCA4MywgNjksIDgyLCA3MywgNzAsIDgzLCAxMjgsIDgzLCA2OSwgODIsIDczLCA3MCwgMjExLCAKKyAgICA4MywgNjksIDgxLCA4NSwgNjksIDc4LCA2NywgMTk3LCA4MywgNjksIDgwLCA4NCwgNjksIDc3LCA2NiwgNjksIDgyLCAxMjgsIAorICAgIDgzLCA2OSwgODAsIDY1LCA4MiwgNjUsIDg0LCA3OSwgODIsIDEyOCwgODMsIDY5LCA4MCwgNjUsIDgyLCA2NSwgODQsIDc5LCAKKyAgICAyMTAsIDgzLCA2OSwgNzgsIDg0LCA3OSwgMTI4LCA4MywgNjksIDc4LCA4NCwgNzMsIDEyOCwgODMsIDY5LCA3NywgODUsIAorICAgIDc4LCA2NywgNzMsIDE5MywgODMsIDY5LCA3NywgNzUsIDY1LCA4NCwgNzIsIDEyOCwgODMsIDY5LCA3NywgNzUsIDEyOCwgCisgICAgODMsIDY5LCA3NywgNzMsIDg2LCA3OSwgODcsIDY5LCAyMDQsIDgzLCA2OSwgNzcsIDczLCA4MywgNzksIDcwLCAyMTIsIDgzLCAKKyAgICA2OSwgNzcsIDczLCA4MywgNjksIDg4LCA4NCwgNzMsIDc2LCA2OSwgMTI4LCA4MywgNjksIDc3LCA3MywgNzcsIDczLCA3OCwgCisgICAgNzMsIDc3LCAxOTMsIDgzLCA2OSwgNzcsIDczLCA2OCwgNzMsIDgyLCA2OSwgNjcsIDIxMiwgODMsIDY5LCA3NywgNzMsIDY3LCAKKyAgICA3OSwgNzYsIDc5LCA3OCwgMTI4LCA4MywgNjksIDc3LCA3MywgNjcsIDc5LCA3NiwgNzksIDIwNiwgODMsIDY5LCA3NywgNzMsIAorICAgIDY3LCA3MywgODIsIDY3LCA4NSwgNzYsIDY1LCAyMTAsIDgzLCA2OSwgNzcsIDczLCA2NywgNzMsIDgyLCA2NywgNzYsIDE5NywgCisgICAgODMsIDY5LCA3NywgNzMsIDY2LCA4MiwgNjksIDg2LCA3MywgMjExLCA4MywgNjksIDc3LCA3MywgNDUsIDg2LCA3OSwgNzMsIAorICAgIDY3LCA2OSwgMTk2LCA4MywgNjksIDc2LCA3MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NywgCisgICAgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTcsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKKyAgICA2NywgODQsIDc5LCA4MiwgNDUsIDU3LCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NywgCisgICAgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTcsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKKyAgICA2NywgODQsIDc5LCA4MiwgNDUsIDU3LCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NywgCisgICAgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTcsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKKyAgICA2NywgODQsIDc5LCA4MiwgNDUsIDU3LCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NywgCisgICAgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKKyAgICA4NCwgNzksIDgyLCA0NSwgNTYsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU2LCA1NiwgCisgICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NiwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKKyAgICA4NCwgNzksIDgyLCA0NSwgNTYsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU2LCA1MywgCisgICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NiwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKKyAgICA4NCwgNzksIDgyLCA0NSwgNTYsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU2LCA1MCwgCisgICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NiwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKKyAgICA4NCwgNzksIDgyLCA0NSwgNTYsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU2LCAxMjgsIAorICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU1LCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKKyAgICA3OSwgODIsIDQ1LCA1NSwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTUsIDU1LCAxMjgsIAorICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU1LCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKKyAgICA3OSwgODIsIDQ1LCA1NSwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTUsIDUyLCAxMjgsIAorICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU1LCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKKyAgICA3OSwgODIsIDQ1LCA1NSwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTUsIDQ5LCAxMjgsIAorICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU1LCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKKyAgICA3OSwgODIsIDQ1LCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NCwgNTcsIDEyOCwgODMsIAorICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTQsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKKyAgICA4MiwgNDUsIDU0LCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NCwgNTQsIDEyOCwgODMsIAorICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTQsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKKyAgICA4MiwgNDUsIDU0LCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NCwgNTEsIDEyOCwgODMsIAorICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTQsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKKyAgICA4MiwgNDUsIDU0LCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NCwgNDgsIDEyOCwgODMsIAorICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKKyAgICA0NSwgNTMsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUzLCA1NiwgMTI4LCA4MywgNjksIAorICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MywgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKKyAgICA0NSwgNTMsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUzLCA1MywgMTI4LCA4MywgNjksIAorICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MywgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKKyAgICA0NSwgNTMsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUzLCA1MCwgMTI4LCA4MywgNjksIAorICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MywgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKKyAgICA0NSwgNTMsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIAorICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUyLCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKKyAgICA1MiwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTIsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIAorICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUyLCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKKyAgICA1MiwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTIsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIAorICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUyLCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKKyAgICA1MiwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTIsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIAorICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUyLCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKKyAgICA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MSwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIAorICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNTEsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUxLCAKKyAgICA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MSwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIAorICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNTEsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUxLCAKKyAgICA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MSwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIAorICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNTEsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUxLCAKKyAgICA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MSwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIAorICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDU3LCAKKyAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAorICAgIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDU0LCAKKyAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MywgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIAorICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUzLCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKKyAgICA1MCwgNTMsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MywgNTEsIDEyOCwgODMsIAorICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUzLCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKKyAgICA3OSwgODIsIDQ1LCA1MCwgNTMsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MywgCisgICAgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKKyAgICA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MiwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCisgICAgNTAsIDUyLCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTIsIDU1LCAxMjgsIDgzLCAKKyAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MiwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCisgICAgNzksIDgyLCA0NSwgNTAsIDUyLCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTIsIAorICAgIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MiwgNTEsIDEyOCwgODMsIDY5LCA3NiwgCisgICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUyLCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAorICAgIDQ1LCA1MCwgNTIsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MiwgNDgsIDEyOCwgCisgICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAorICAgIDc5LCA4MiwgNDUsIDUwLCA1MSwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUxLCAKKyAgICA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTEsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIAorICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MSwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKKyAgICA0NSwgNTAsIDUxLCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTEsIDUyLCAxMjgsIAorICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MSwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKKyAgICA4NCwgNzksIDgyLCA0NSwgNTAsIDUxLCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgCisgICAgNTEsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MSwgNDgsIDEyOCwgODMsIDY5LCAKKyAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCisgICAgNDUsIDUwLCA1MCwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUwLCA1NiwgMTI4LCAKKyAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTAsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCisgICAgODQsIDc5LCA4MiwgNDUsIDUwLCA1MCwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIAorICAgIDUwLCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTAsIDUyLCAxMjgsIDgzLCA2OSwgCisgICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MCwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIAorICAgIDgyLCA0NSwgNTAsIDUwLCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTAsIDQ5LCAKKyAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MCwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIAorICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCAKKyAgICA0OSwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ5LCA1NiwgMTI4LCA4MywgNjksIAorICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDksIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKKyAgICA4MiwgNDUsIDUwLCA0OSwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ5LCA1MywgCisgICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDksIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKKyAgICA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OSwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCisgICAgNTAsIDQ5LCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDksIDQ5LCAxMjgsIDgzLCAKKyAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OSwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCisgICAgNzksIDgyLCA0NSwgNTAsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OCwgNTcsIAorICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ4LCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgCisgICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDgsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAorICAgIDUwLCA0OCwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ4LCA1MywgMTI4LCA4MywgCisgICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDgsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAorICAgIDc5LCA4MiwgNDUsIDUwLCA0OCwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ4LCAKKyAgICA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDgsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIAorICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OCwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKKyAgICA0NSwgNTAsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIAorICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NywgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKKyAgICA0NSwgNDksIDU3LCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTcsIDU1LCAxMjgsIAorICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NywgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKKyAgICA4NCwgNzksIDgyLCA0NSwgNDksIDU3LCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgCisgICAgNTcsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NywgNTEsIDEyOCwgODMsIDY5LCAKKyAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU3LCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCisgICAgODIsIDQ1LCA0OSwgNTcsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NywgNDgsIAorICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCisgICAgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NiwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIAorICAgIDU2LCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTYsIDU1LCAxMjgsIDgzLCA2OSwgCisgICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NiwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIAorICAgIDgyLCA0NSwgNDksIDU2LCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTYsIDUyLCAKKyAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NiwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIAorICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU2LCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKKyAgICA0OSwgNTYsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NiwgNDgsIDEyOCwgODMsIAorICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKKyAgICA4MiwgNDUsIDQ5LCA1NSwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU1LCA1NiwgCisgICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTUsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKKyAgICA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NSwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCisgICAgNDksIDU1LCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTUsIDUyLCAxMjgsIDgzLCAKKyAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NSwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCisgICAgNzksIDgyLCA0NSwgNDksIDU1LCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTUsIAorICAgIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NSwgNDgsIDEyOCwgODMsIDY5LCA3NiwgCisgICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAorICAgIDQ5LCA1NCwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU0LCA1NiwgMTI4LCA4MywgCisgICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTQsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAorICAgIDc5LCA4MiwgNDUsIDQ5LCA1NCwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU0LCAKKyAgICA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTQsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIAorICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NCwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKKyAgICA0NSwgNDksIDU0LCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTQsIDQ5LCAxMjgsIAorICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NCwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKKyAgICA4NCwgNzksIDgyLCA0NSwgNDksIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MywgCisgICAgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUzLCA1NiwgMTI4LCA4MywgNjksIDc2LCAKKyAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTMsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCisgICAgNDUsIDQ5LCA1MywgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUzLCA1MywgMTI4LCAKKyAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTMsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCisgICAgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MywgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIAorICAgIDUzLCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTMsIDQ5LCAxMjgsIDgzLCA2OSwgCisgICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MywgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIAorICAgIDgyLCA0NSwgNDksIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MiwgNTcsIDEyOCwgCisgICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUyLCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAorICAgIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTIsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCAKKyAgICA1MiwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUyLCA1MywgMTI4LCA4MywgNjksIAorICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTIsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKKyAgICA4MiwgNDUsIDQ5LCA1MiwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUyLCA1MCwgCisgICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTIsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKKyAgICA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MiwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCisgICAgNDksIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MSwgNTcsIDEyOCwgODMsIDY5LCAKKyAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUxLCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCisgICAgODIsIDQ1LCA0OSwgNTEsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MSwgNTQsIAorICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUxLCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgCisgICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTEsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAorICAgIDQ5LCA1MSwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUxLCA1MCwgMTI4LCA4MywgCisgICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTEsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAorICAgIDc5LCA4MiwgNDUsIDQ5LCA1MSwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUxLCAKKyAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MCwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIAorICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUwLCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKKyAgICA0OSwgNTAsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MCwgNTQsIDEyOCwgODMsIAorICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUwLCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKKyAgICA3OSwgODIsIDQ1LCA0OSwgNTAsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MCwgCisgICAgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUwLCA1MCwgMTI4LCA4MywgNjksIDc2LCAKKyAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTAsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCisgICAgNDUsIDQ5LCA1MCwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUwLCAxMjgsIDgzLCAKKyAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OSwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCisgICAgNzksIDgyLCA0NSwgNDksIDQ5LCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDksIAorICAgIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OSwgNTQsIDEyOCwgODMsIDY5LCA3NiwgCisgICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ5LCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAorICAgIDQ1LCA0OSwgNDksIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OSwgNTEsIDEyOCwgCisgICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ5LCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAorICAgIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDksIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCAKKyAgICA0OSwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIAorICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OCwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKKyAgICA0NSwgNDksIDQ4LCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDgsIDU1LCAxMjgsIAorICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OCwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKKyAgICA4NCwgNzksIDgyLCA0NSwgNDksIDQ4LCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgCisgICAgNDgsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OCwgNTEsIDEyOCwgODMsIDY5LCAKKyAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ4LCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCisgICAgODIsIDQ1LCA0OSwgNDgsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OCwgNDgsIAorICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCisgICAgODQsIDc5LCA4MiwgNDUsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAyMTAsIDgzLCA2OSwgNzYsIDY5LCAKKyAgICA2NywgODQsIDY5LCAxOTYsIDgzLCA2OSwgNzMsIDgzLCA3NywgNjUsIDEyOCwgODMsIDY5LCA3MywgODMsIDc3LCAxOTMsIAorICAgIDgzLCA2OSwgNzIsIDEyOCwgODMsIDY5LCA3MSwgNzksIDc2LCAxMjgsIDgzLCA2OSwgNzEsIDc4LCA3OSwgMTI4LCA4MywgCisgICAgNjksIDcxLCA3NywgNjksIDc4LCA4NCwgMTI4LCA4MywgNjksIDY5LCA3OCwgODUsIDEyOCwgODMsIDY5LCA2OSwgNzgsIAogICAgIDEyOCwgODMsIDY5LCA2OSwgMjA2LCA4MywgNjksIDY5LCA2OCwgNzYsIDczLCA3OCwgNzEsIDEyOCwgODMsIDY5LCA2OSwgCiAgICAgNDUsIDc4LCA3OSwgNDUsIDY5LCA4NiwgNzMsIDIwNCwgODMsIDY5LCA2NywgODQsIDc5LCA4MiwgMTI4LCA4MywgNjksIDY3LCAKICAgICA4NCwgNzMsIDc5LCA3OCwgMTI4LCA4MywgNjksIDY3LCA4NCwgNzMsIDc5LCAyMDYsIDgzLCA2OSwgNjcsIDgyLCA2OSwgODQsIApAQCAtMTI5MiwyNzMxICsxMjkzLDI3MzMgQEAKICAgICA2NywgMjAzLCA4MiwgNzksIDY3LCAxMjgsIDgyLCA3OSwgNjYsIDY1LCA4NCwgMTI4LCA4MiwgNzksIDY1LCA4MywgODQsIAogICAgIDY5LCAxOTYsIDgyLCA3OSwgNjUsIDgyLCAxMjgsIDgyLCA3OSwgNjUsIDEyOCwgODIsIDc4LCA4OSwgNzMsIDc4LCAxOTksIAogICAgIDgyLCA3OCwgNzksIDc5LCA3OCwgMTI4LCA4MiwgNzgsIDc5LCA3OSwgMjA2LCA4MiwgNzgsIDY1LCAyMDUsIDgyLCA3NywgCi0gICAgODQsIDEyOCwgODIsIDc2LCA3OSwgMTI4LCA4MiwgNzYsIDc3LCAxMjgsIDgyLCA3NiwgNjksIDEyOCwgODIsIDc0LCA2OSwgCi0gICAgMjExLCA4MiwgNzQsIDY5LCAxMjgsIDgyLCA3NCwgMTk3LCA4MiwgNzMsIDg2LCA2OSwgODIsIDEyOCwgODIsIDczLCA4NCwgCi0gICAgODUsIDY1LCA3NiwgMTI4LCA4MiwgNzMsIDg0LCA4NCwgNzksIDgyLCA4NSwgMTI4LCA4MiwgNzMsIDg0LCA4MywgNzMsIAotICAgIDEyOCwgODIsIDczLCA4MywgNzMsIDc4LCAxOTksIDgyLCA3MywgODMsIDcyLCAxMjgsIDgyLCA3MywgODIsIDY1LCAxMjgsIAotICAgIDgyLCA3MywgODAsIDEyOCwgODIsIDczLCA3OCwgNzEsIDIxMSwgODIsIDczLCA3OCwgNzAsIDc5LCA4MiwgOTAsIDY1LCA3OCwgCi0gICAgNjgsIDc5LCAxMjgsIDgyLCA3MywgMjA2LCA4MiwgNzMsIDc3LCA3MSwgNjYsIDY1LCAxMjgsIDgyLCA3MywgNzUsIDgyLCAKLSAgICA3MywgNzUsIDEyOCwgODIsIDczLCA3MSwgODYsIDY5LCA2OCwgNzMsIDE5NSwgODIsIDczLCA3MSwgNzIsIDg0LCA4NywgNjUsIAotICAgIDgyLCA2OCwgODMsIDEyOCwgODIsIDczLCA3MSwgNzIsIDg0LCA3MiwgNjUsIDc4LCAxOTYsIDgyLCA3MywgNzEsIDcyLCA4NCwgCi0gICAgNDUsIDg0LCA3OSwgNDUsIDc2LCA2OSwgNzAsIDIxMiwgODIsIDczLCA3MSwgNzIsIDg0LCA0NSwgODMsIDczLCA2OCwgMTk3LCAKLSAgICA4MiwgNzMsIDcxLCA3MiwgODQsIDQ1LCA4MywgNzIsIDY1LCA2OCwgNzksIDg3LCA2OSwgMTk2LCA4MiwgNzMsIDcxLCA3MiwgCi0gICAgODQsIDQ1LCA4MywgNzIsIDY1LCA2OCwgNjksIDE5NiwgODIsIDczLCA3MSwgNzIsIDg0LCA0NSwgODAsIDc5LCA3MywgNzgsIAotICAgIDg0LCA3MywgNzgsIDE5OSwgODIsIDczLCA3MSwgNzIsIDg0LCA0NSwgNzIsIDY1LCA3OCwgNjgsIDY5LCAxOTYsIDgyLCA3MywgCi0gICAgNzEsIDcyLCA4NCwgNDUsIDcyLCA2NSwgNzgsIDE5NiwgODIsIDczLCA3MSwgNzIsIDg0LCA0NSwgNzAsIDY1LCA2NywgNzMsIAotICAgIDc4LCAxOTksIDgyLCA3MywgNzEsIDcyLCA4NCwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4OSwgNjksIDgzLCA3MywgCi0gICAgNjksIDg1LCA3OCwgNzEsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODksIDY5LCA3OSwgODIsIDczLCA3OCwgNzIsIAotICAgIDczLCA2OSwgODUsIDcyLCA0NSwgNzIsIDczLCA2OSwgODUsIDcyLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDg5LCAKLSAgICA2OSwgNzksIDgyLCA3MywgNzgsIDcyLCA3MywgNjksIDg1LCA3MiwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4NCwgCi0gICAgNzMsIDc1LCA2OSwgODUsIDg0LCA0NSwgNzIsIDczLCA2OSwgODUsIDcyLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIAotICAgIDg0LCA3MywgNzUsIDY5LCA4NSwgODQsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODQsIDcyLCA3MywgNjksIDg1LCAKLSAgICA4NCwgNzIsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODMsIDgzLCA2NSwgNzgsIDcxLCA4NCwgNzMsIDc1LCA2OSwgCi0gICAgODUsIDg0LCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDgzLCA4MywgNjUsIDc4LCA3MSwgODMsIDczLCA3OSwgODMsIAotICAgIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODMsIDgzLCA2NSwgNzgsIDcxLCA4MCwgNzMsIDY5LCA4NSwgODAsIDEyOCwgCi0gICAgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODMsIDgzLCA2NSwgNzgsIDcxLCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCAxMjgsIAotICAgIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDgzLCA3MywgNzksIDgzLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDgwLCAKLSAgICA3MywgNjksIDg1LCA4MCwgNDUsIDg0LCA3MywgNzUsIDY5LCA4NSwgODQsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgCi0gICAgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgODMsIDczLCA3OSwgODMsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODAsIAotICAgIDczLCA2OSwgODUsIDgwLCA0NSwgODAsIDcyLCA3MywgNjksIDg1LCA4MCwgNzIsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCAKLSAgICA0NSwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgNzIsIDczLCA2OSwgODUsIDcyLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgCi0gICAgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4MCwgNzIsIDczLCA2OSwgODUsIAotICAgIDgwLCA3MiwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4MCwgNjUsIDc4LCA4MywgNzMsIDc5LCA4MywgMTI4LCA4MiwgCi0gICAgNzMsIDY5LCA4NSwgNzYsIDQ1LCA3OCwgNzMsIDY5LCA4NSwgNzgsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgNzcsIAotICAgIDczLCA2OSwgODUsIDc3LCA0NSwgODMsIDczLCA3OSwgODMsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgNzcsIDczLCAKLSAgICA2OSwgODUsIDc3LCA0NSwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA3NywgCi0gICAgNzMsIDY5LCA4NSwgNzcsIDQ1LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgNzcsIAotICAgIDczLCA2OSwgODUsIDc3LCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDQ1LCAKLSAgICA4MywgNzMsIDc5LCA4MywgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCA0NSwgCi0gICAgNzIsIDczLCA2OSwgODUsIDcyLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIAotICAgIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgNzUsIDY1LCA4MCwgODksIDY5LCA3OSwgODUsIDc4LCA4MCwgNzMsIDY5LCAKLSAgICA4NSwgODAsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgNzIsIDczLCA2OSwgODUsIDcyLCAxMjgsIDgyLCA3MywgNjksIAotICAgIDg1LCA3NiwgNDUsIDY3LCA3MywgNjksIDg1LCA2NywgMTI4LCA4MiwgNzMsIDY5LCA4NSwgMjA0LCA4MiwgNzMsIDY5LCA3NiwgCi0gICAgMTI4LCA4MiwgNzMsIDY5LCA2OSwgMTI4LCA4MiwgNzMsIDY3LCA2OSwgNzcsIDEyOCwgODIsIDczLCA2NywgNjksIDEyOCwgCi0gICAgODIsIDczLCA2NywgMTk3LCA4MiwgNzMsIDY2LCA2NiwgNzksIDc4LCAxMjgsIDgyLCA3MywgNjUsIDIwNCwgODIsIDcyLCAKLSAgICA3OSwgODQsIDczLCAxOTUsIDgyLCA3MiwgNzksIDEyOCwgODIsIDcyLCAyMDcsIDgyLCA3MiwgNjUsIDEyOCwgODIsIDcxLCAKLSAgICA4OSwgNzMsIDc4LCA3MSwgODMsIDEyOCwgODIsIDcxLCA4OSwgNjUsIDc4LCAxMjgsIDgyLCA3MSwgODksIDE5MywgODIsIAotICAgIDY5LCA4NiwgNzksIDc2LCA4NiwgNzMsIDc4LCAxOTksIDgyLCA2OSwgODYsIDc5LCA3NiwgODUsIDg0LCA3MywgNzksIDc4LCAKLSAgICAxMjgsIDgyLCA2OSwgODYsIDc3LCA2NSwgMTI4LCA4MiwgNjksIDg2LCA3MywgNjUsIDEyOCwgODIsIDY5LCA4NiwgNjksIAotICAgIDgyLCA4MywgNjksIDY4LCAxMjgsIDgyLCA2OSwgODYsIDY5LCA4MiwgODMsIDY5LCAxOTYsIDgyLCA2OSwgODYsIDY5LCA4MiwgCi0gICAgODMsIDE5NywgODIsIDY5LCA4NSwgODgsIDEyOCwgODIsIDY5LCA4NSwgMTI4LCA4MiwgNjksIDg0LCA4NSwgODIsIDc4LCAKLSAgICAxMjgsIDgyLCA2OSwgODQsIDg1LCA4MiwgMjA2LCA4MiwgNjksIDg0LCA4MiwgNzksIDcwLCA3NiwgNjksIDIxNiwgODIsIAotICAgIDY5LCA4NCwgODIsIDY5LCA2NSwgODQsIDEyOCwgODIsIDY5LCA4NCwgNzksIDgyLCA4NCwgMTI4LCA4MiwgNjksIDgzLCA4NSwgCi0gICAgODAsIDczLCA3OCwgODUsIDgzLCAxMjgsIDgyLCA2OSwgODMsIDg0LCA4MiwgNzksIDc5LCA3NywgMTI4LCA4MiwgNjksIDgzLCAKLSAgICA4NCwgODIsIDczLCA2NywgODQsIDY5LCAxOTYsIDgyLCA2OSwgODMsIDg0LCAxMjgsIDgyLCA2OSwgODMsIDgwLCA3OSwgNzgsIAotICAgIDgzLCA2OSwgMTI4LCA4MiwgNjksIDgzLCA3OSwgODUsIDgyLCA2NywgNjksIDEyOCwgODIsIDY5LCA4MywgNzksIDc2LCA4NSwgCi0gICAgODQsIDczLCA3OSwgNzgsIDEyOCwgODIsIDY5LCA4MywgNzMsIDgzLCA4NCwgNjUsIDc4LCA2NywgNjksIDEyOCwgODIsIDY5LCAKLSAgICA4MywgNzMsIDY4LCA2OSwgNzgsIDY3LCA2OSwgMTI4LCA4MiwgNjksIDgzLCAyMDAsIDgyLCA2OSwgODIsIDY5LCA3OCwgNzEsIAotICAgIDcxLCA2NSwgNzgsIDEyOCwgODIsIDY5LCA4MiwgNjksIDc1LCA2NSwgNzgsIDEyOCwgODIsIDY5LCA4MCwgODIsIDY5LCA4MywgCi0gICAgNjksIDc4LCA4NCwgMTI4LCA4MiwgNjksIDgwLCA3NiwgNjUsIDY3LCA2OSwgNzcsIDY5LCA3OCwgMjEyLCA4MiwgNjksIDgwLCAKLSAgICA3MiwgMTI4LCA4MiwgNjksIDgwLCA2OSwgODQsIDczLCA4NCwgNzMsIDc5LCAyMDYsIDgyLCA2OSwgODAsIDY5LCA2NSwgODQsIAotICAgIDY5LCAxOTYsIDgyLCA2OSwgODAsIDY5LCA2NSwgODQsIDEyOCwgODIsIDY5LCA4MCwgNjksIDY1LCAyMTIsIDgyLCA2OSwgCi0gICAgODAsIDY1LCA4OSwgNjUsIDEyOCwgODIsIDY5LCA4MCwgNjUsIDEyOCwgODIsIDY5LCA4MCwgMTkzLCA4MiwgNjksIDc4LCAKLSAgICA4NCwgNzksIDcxLCA2OSwgNzgsIDEyOCwgODIsIDY5LCA3OCwgMTI4LCA4MiwgNjksIDIwNiwgODIsIDY5LCA3NywgODUsIAotICAgIDEyOCwgODIsIDY5LCA3NywgNjksIDY4LCA4OSwgMTI4LCA4MiwgNjksIDc2LCA3MywgNzEsIDczLCA3OSwgNzgsIDEyOCwgCi0gICAgODIsIDY5LCA3NiwgNzMsIDY5LCA4NiwgNjksIDE5NiwgODIsIDY5LCA3NiwgNjksIDY1LCA4MywgNjksIDEyOCwgODIsIDY5LCAKLSAgICA3NiwgNjUsIDg0LCA3MywgNzksIDc4LCA2NSwgMjA0LCA4MiwgNjksIDc2LCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgODIsIAotICAgIDY5LCA3NiwgNjUsIDY1LCAxMjgsIDgyLCA2OSwgNzQsIDY1LCA3OCwgMTk5LCA4MiwgNjksIDczLCAxOTYsIDgyLCA2OSwgCi0gICAgNzEsIDg1LCA3NiwgODUsIDgzLCA0NSwgNTIsIDEyOCwgODIsIDY5LCA3MSwgODUsIDc2LCA4NSwgODMsIDQ1LCA1MSwgMTI4LCAKLSAgICA4MiwgNjksIDcxLCA4NSwgNzYsIDg1LCA4MywgNDUsIDUwLCAxMjgsIDgyLCA2OSwgNzEsIDg1LCA3NiwgODUsIDgzLCAxMjgsIAotICAgIDgyLCA2OSwgNzEsIDg1LCA3NiwgODUsIDIxMSwgODIsIDY5LCA3MSwgNzMsIDgzLCA4NCwgNjksIDgyLCA2OSwgMTk2LCA4MiwgCi0gICAgNjksIDcxLCA3MywgNzksIDc4LCA2NSwgMjA0LCA4MiwgNjksIDcxLCA3MywgNjUsIDQ1LCA1MCwgMTI4LCA4MiwgNjksIDcxLCAKLSAgICA3MywgNjUsIDEyOCwgODIsIDY5LCA3MCwgNzksIDgyLCA3NywgNjksIDE5NiwgODIsIDY5LCA3MCwgNjksIDgyLCA2OSwgNzgsIAotICAgIDY3LCAxOTcsIDgyLCA2OSwgNjgsIDg1LCA4MCwgNzYsIDczLCA2NywgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDgyLCA2OSwgCi0gICAgNjcsIDg5LCA2NywgNzYsIDczLCA3OCwgMTk5LCA4MiwgNjksIDY3LCA4OSwgNjcsIDc2LCA2OSwgMTk2LCA4MiwgNjksIDY3LCAKLSAgICA4NCwgNzMsIDc2LCA3MywgNzgsIDY5LCA2NSwgMjEwLCA4MiwgNjksIDY3LCA4NCwgNjUsIDc4LCA3MSwgODUsIDc2LCA2NSwgCi0gICAgMjEwLCA4MiwgNjksIDY3LCA4NCwgNjUsIDc4LCA3MSwgNzYsIDY5LCAxMjgsIDgyLCA2OSwgNjcsIDg0LCA2NSwgNzgsIDcxLCAKLSAgICA3NiwgMTk3LCA4MiwgNjksIDY3LCA4MiwgNjksIDY1LCA4NCwgNzMsIDc5LCA3OCwgNjUsIDIwNCwgODIsIDY5LCA2NywgNzksIAotICAgIDgyLCA2OCwgNzMsIDc4LCAxOTksIDgyLCA2OSwgNjcsIDc5LCA4MiwgNjgsIDY5LCA4MiwgMTI4LCA4MiwgNjksIDY3LCA3OSwgCi0gICAgODIsIDE5NiwgODIsIDY5LCA2NywgNjksIDgwLCA4NCwgNzMsIDg2LCAxOTcsIDgyLCA2OSwgNjcsIDY5LCA3MywgODYsIDY5LCAKLSAgICA4MiwgMTI4LCA4MiwgNjksIDY1LCA3NiwgNzEsIDY1LCA4MiwgNDUsIDUwLCAxMjgsIDgyLCA2OSwgNjUsIDc2LCA3MSwgNjUsIAotICAgIDgyLCAxMjgsIDgyLCA2OSwgNjUsIDcyLCA3NywgODUsIDc1LCAxMjgsIDgyLCA2OSwgNjUsIDY3LCA3MiwgMTI4LCA4MiwgCi0gICAgNjgsIDIwNywgODIsIDY4LCA2OSwgMjA0LCA4MiwgNjYsIDY1LCA4MywgMTkzLCA4MiwgNjUsIDg5LCA4MywgMTI4LCA4MiwgCi0gICAgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA4MiwgNjUsIDg0LCA3MywgNzksIDEyOCwgODIsIDY1LCA4NCwgNzIsIDY1LCAKLSAgICAxMjgsIDgyLCA2NSwgODQsIDcyLCAxOTMsIDgyLCA2NSwgODQsIDY1LCAxMjgsIDgyLCA2NSwgODQsIDEyOCwgODIsIDY1LCAKLSAgICA4MywgODcsIDY1LCA2OCwgNzMsIDEyOCwgODIsIDY1LCA4MywgNzksIDg1LCAyMDQsIDgyLCA2NSwgODMsIDcyLCA2NSwgCi0gICAgMTI4LCA4MiwgNjUsIDgxLCAxMjgsIDgyLCA2NSwgODAsIDczLCA4MywgNzcsIDY1LCAxMjgsIDgyLCA2NSwgNzgsIDcxLCAKLSAgICAxOTcsIDgyLCA2NSwgNzgsIDY1LCAxMjgsIDgyLCA2NSwgNzgsIDEyOCwgODIsIDY1LCA3NywgMjExLCA4MiwgNjUsIDc3LCAKLSAgICA2NiwgNjUsIDg0LCAxMjgsIDgyLCA2NSwgNzUsIDcyLCA2NSwgNzgsIDcxLCAxMjgsIDgyLCA2NSwgNzUsIDY1LCA2NSwgODIsIAotICAgIDY1LCA2NSwgNzgsIDgzLCA2NSwgODksIDY1LCAxMjgsIDgyLCA2NSwgNzMsIDgzLCA3MywgNzgsIDE5OSwgODIsIDY1LCA3MywgCi0gICAgODMsIDY5LCAxOTYsIDgyLCA2NSwgNzMsIDc4LCA2NiwgNzksIDg3LCAxMjgsIDgyLCA2NSwgNzMsIDc2LCA4NywgNjUsIDg5LCAKLSAgICAxMjgsIDgyLCA2NSwgNzMsIDc2LCA4NywgNjUsIDIxNywgODIsIDY1LCA3MywgNzYsIDEyOCwgODIsIDY1LCA3MywgNjgsIAotICAgIDIwNywgODIsIDY1LCA3MywgNjgsIDY1LCAxMjgsIDgyLCA2NSwgNzIsIDc3LCA2NSwgODQsIDg1LCA3NiwgNzYsIDY1LCAKLSAgICAyMDAsIDgyLCA2NSwgNzIsIDEyOCwgODIsIDY1LCA3MCwgNjksIDEyOCwgODIsIDY1LCA2OSwgNzcsIDEyOCwgODIsIDY1LCAKLSAgICA2OCwgNzMsIDc5LCA2NSwgNjcsIDg0LCA3MywgODYsIDE5NywgODIsIDY1LCA2OCwgNzMsIDc5LCAxMjgsIDgyLCA2NSwgNjgsIAotICAgIDczLCAyMDcsIDgyLCA2NSwgNjgsIDIwMSwgODIsIDY1LCA2OCwgMTI4LCA4MiwgNjUsIDE5NiwgODIsIDY1LCA2NywgODEsIAotICAgIDg1LCA2OSwgMjEyLCA4MiwgNjUsIDY3LCA3MywgNzgsIDcxLCAxMjgsIDgyLCA2NSwgNjYsIDY2LCA3MywgODQsIDEyOCwgCi0gICAgODIsIDY1LCA2NiwgNjYsIDczLCAyMTIsIDgyLCA2NSwgNjYsIDEyOCwgODIsIDY1LCA2NSwgNzMsIDEyOCwgODIsIDY1LCAKLSAgICA1MSwgMTI4LCA4MiwgNjUsIDUwLCAxMjgsIDgyLCA2NSwgNDUsIDUwLCAxMjgsIDgyLCA0OCwgNTAsIDU3LCAxMjgsIDgyLCAKLSAgICA0OCwgNTAsIDU2LCAxMjgsIDgyLCA0OCwgNTAsIDU1LCAxMjgsIDgyLCA0OCwgNTAsIDU0LCAxMjgsIDgyLCA0OCwgNTAsIAotICAgIDUzLCAxMjgsIDgyLCA0OCwgNTAsIDUyLCAxMjgsIDgyLCA0OCwgNTAsIDUxLCAxMjgsIDgyLCA0OCwgNTAsIDUwLCAxMjgsIAotICAgIDgyLCA0OCwgNTAsIDQ5LCAxMjgsIDgyLCA0OCwgNTAsIDQ4LCAxMjgsIDgyLCA0OCwgNDksIDU3LCAxMjgsIDgyLCA0OCwgCi0gICAgNDksIDU2LCAxMjgsIDgyLCA0OCwgNDksIDU1LCAxMjgsIDgyLCA0OCwgNDksIDU0LCA2NSwgMTI4LCA4MiwgNDgsIDQ5LCAKLSAgICA1NCwgMTI4LCA4MiwgNDgsIDQ5LCA1MywgMTI4LCA4MiwgNDgsIDQ5LCA1MiwgMTI4LCA4MiwgNDgsIDQ5LCA1MSwgMTI4LCAKLSAgICA4MiwgNDgsIDQ5LCA1MCwgMTI4LCA4MiwgNDgsIDQ5LCA0OSwgMTI4LCA4MiwgNDgsIDQ5LCA0OCwgNjUsIDEyOCwgODIsIAotICAgIDQ4LCA0OSwgNDgsIDEyOCwgODIsIDQ4LCA0OCwgNTcsIDEyOCwgODIsIDQ4LCA0OCwgNTYsIDEyOCwgODIsIDQ4LCA0OCwgCi0gICAgNTUsIDEyOCwgODIsIDQ4LCA0OCwgNTQsIDEyOCwgODIsIDQ4LCA0OCwgNTMsIDEyOCwgODIsIDQ4LCA0OCwgNTIsIDEyOCwgCi0gICAgODIsIDQ4LCA0OCwgNTEsIDY2LCAxMjgsIDgyLCA0OCwgNDgsIDUxLCA2NSwgMTI4LCA4MiwgNDgsIDQ4LCA1MSwgMTI4LCAKLSAgICA4MiwgNDgsIDQ4LCA1MCwgNjUsIDEyOCwgODIsIDQ4LCA0OCwgNTAsIDEyOCwgODIsIDQ4LCA0OCwgNDksIDEyOCwgODIsIAotICAgIDQ1LCA2NywgODIsIDY5LCAxOTcsIDgxLCA4OSwgODgsIDEyOCwgODEsIDg5LCA4NSwgMTI4LCA4MSwgODksIDg0LCAxMjgsIAotICAgIDgxLCA4OSwgODIsIDg4LCAxMjgsIDgxLCA4OSwgODIsIDEyOCwgODEsIDg5LCA4MCwgMTI4LCA4MSwgODksIDc5LCAxMjgsIAotICAgIDgxLCA4OSwgNzMsIDEyOCwgODEsIDg5LCA2OSwgNjksIDEyOCwgODEsIDg5LCA2OSwgMTI4LCA4MSwgODksIDY1LCA2NSwgCi0gICAgMTI4LCA4MSwgODksIDY1LCAxMjgsIDgxLCA4OSwgMTI4LCA4MSwgODcsIDczLCAxMjgsIDgxLCA4NywgNjksIDY5LCAxMjgsIAotICAgIDgxLCA4NywgNjksIDEyOCwgODEsIDg3LCA2NSwgNjUsIDEyOCwgODEsIDg3LCA2NSwgMTI4LCA4MSwgODUsIDg4LCAxMjgsIAotICAgIDgxLCA4NSwgODYsIDEyOCwgODEsIDg1LCA4NSwgODYsIDEyOCwgODEsIDg1LCA4NSwgMTI4LCA4MSwgODUsIDg0LCAxMjgsIAotICAgIDgxLCA4NSwgODMsIDcyLCA4MywgNzIsIDY1LCA4OSwgNjUsIDEyOCwgODEsIDg1LCA4MiwgODgsIDEyOCwgODEsIDg1LCA4MiwgCi0gICAgMTI4LCA4MSwgODUsIDgwLCAxMjgsIDgxLCA4NSwgNzksIDg4LCAxMjgsIDgxLCA4NSwgNzksIDg0LCAxOTcsIDgxLCA4NSwgCi0gICAgNzksIDg0LCA2NSwgODQsIDczLCA3OSwgMjA2LCA4MSwgODUsIDc5LCA4NCwgMTI4LCA4MSwgODUsIDc5LCA4MCwgMTI4LCAKLSAgICA4MSwgODUsIDc5LCAxMjgsIDgxLCA4NSwgNzUsIDEyOCwgODEsIDg1LCA3MywgNzgsIDg0LCA2OSwgODMsIDgzLCA2OSwgNzgsIAotICAgIDY3LCA2OSwgMTI4LCA4MSwgODUsIDczLCA3OCwgNjgsIDczLCA2NywgNjksIDgzLCA3MywgNzcsIDE5MywgODEsIDg1LCA3MywgCi0gICAgNzgsIDY3LCA4NSwgNzgsIDg4LCAxMjgsIDgxLCA4NSwgNzMsIDc4LCA2NSwgODIsIDczLCA4NSwgMjExLCA4MSwgODUsIDczLCAKLSAgICA3NiwgNzYsIDEyOCwgODEsIDg1LCA3MywgNjcsIDIwMywgODEsIDg1LCA3MywgMTI4LCA4MSwgODUsIDcwLCAxMjgsIDgxLCAKLSAgICA4NSwgNjksIDgzLCA4NCwgNzMsIDc5LCA3OCwgNjksIDE5NiwgODEsIDg1LCA2OSwgODMsIDg0LCA3MywgNzksIDc4LCAxMjgsIAotICAgIDgxLCA4NSwgNjksIDgzLCA4NCwgNzMsIDc5LCAyMDYsIDgxLCA4NSwgNjksIDY5LCA3OCwgMTI4LCA4MSwgODUsIDY5LCA2OSwgCi0gICAgMjA2LCA4MSwgODUsIDY5LCAxMjgsIDgxLCA4NSwgNjYsIDg1LCA4NCwgODMsIDEyOCwgODEsIDg1LCA2NSwgODQsIDY5LCAKLSAgICA4MiwgNzgsIDczLCA3OSwgMjA2LCA4MSwgODUsIDY1LCA4MiwgODQsIDY5LCA4MiwgODMsIDEyOCwgODEsIDg1LCA2NSwgODIsIAotICAgIDg0LCA2OSwgODIsIDIxMSwgODEsIDg1LCA2NSwgODIsIDg0LCA2OSwgODIsIDEyOCwgODEsIDg1LCA2NSwgODIsIDg0LCA2OSwgCi0gICAgMjEwLCA4MSwgODUsIDY1LCA3OCwgODQsIDczLCA4NCwgMjE3LCA4MSwgODUsIDY1LCA2OCwgODIsIDg1LCA4MCwgNzYsIAotICAgIDE5NywgODEsIDg1LCA2NSwgNjgsIDgyLCA2NSwgNzgsIDg0LCAxMjgsIDgxLCA4NSwgNjUsIDY4LCA4MiwgNjUsIDc4LCAKLSAgICAyMTIsIDgxLCA4NSwgNjUsIDY4LCAxMjgsIDgxLCA4NSwgNjUsIDE5NiwgODEsIDg1LCA2NSwgMTI4LCA4MSwgODUsIDEyOCwgCi0gICAgODEsIDIwOCwgODEsIDc5LCA4OCwgMTI4LCA4MSwgNzksIDg0LCAxMjgsIDgxLCA3OSwgODAsIDcyLCAxMjgsIDgxLCA3OSwgCi0gICAgODAsIDY1LCAxMjgsIDgxLCA3OSwgODAsIDEyOCwgODEsIDc5LCA3OSwgMTI4LCA4MSwgNzksIDIwNywgODEsIDc5LCA3MCwgCi0gICAgMTI4LCA4MSwgNzksIDE5OCwgODEsIDc5LCA2NSwgMTI4LCA4MSwgNzksIDEyOCwgODEsIDc4LCAxMjgsIDgxLCA3MywgODgsIAotICAgIDEyOCwgODEsIDczLCA4NCwgODMsIDY1LCAxMjgsIDgxLCA3MywgODQsIDEyOCwgODEsIDczLCA4MCwgMTI4LCA4MSwgNzMsIAotICAgIDczLCAxMjgsIDgxLCA3MywgNjksIDg4LCAxMjgsIDgxLCA3MywgNjksIDg0LCAxMjgsIDgxLCA3MywgNjksIDgwLCAxMjgsIAotICAgIDgxLCA3MywgNjksIDEyOCwgODEsIDczLCAxMjgsIDgxLCA3MiwgODcsIDczLCAxMjgsIDgxLCA3MiwgODcsIDY5LCA2OSwgCi0gICAgMTI4LCA4MSwgNzIsIDg3LCA2OSwgMTI4LCA4MSwgNzIsIDg3LCA2NSwgNjUsIDEyOCwgODEsIDcyLCA4NywgNjUsIDEyOCwgCi0gICAgODEsIDcyLCA4NSwgMTI4LCA4MSwgNzIsIDc5LCAxMjgsIDgxLCA3MiwgNzMsIDEyOCwgODEsIDcyLCA2OSwgNjksIDEyOCwgCi0gICAgODEsIDcyLCA2OSwgMTI4LCA4MSwgNzIsIDY1LCA2NSwgMTI4LCA4MSwgNzIsIDY1LCAxMjgsIDgxLCA3MSwgNjUsIDEyOCwgCi0gICAgODEsIDY5LCA4NCwgNjUsIDc4LCA2NSwgMTI4LCA4MSwgNjksIDY5LCAxMjgsIDgxLCA2OSwgMTI4LCA4MSwgNjUsIDg1LCAKLSAgICAxMjgsIDgxLCA2NSwgODQsIDY1LCA3OCwgMTI4LCA4MSwgNjUsIDgyLCA3OCwgNjksIDIxNywgODEsIDY1LCA4MiwgMTI4LCAKLSAgICA4MSwgNjUsIDgxLCAxMjgsIDgxLCA2NSwgODAsIDcyLCAxMjgsIDgxLCA2NSwgNzcsIDY1LCA4NCwgODMsIDEyOCwgODEsIAotICAgIDY1LCA3NywgNjUsIDg0LCAyMTEsIDgxLCA2NSwgNzYsIDE5MywgODEsIDY1LCA3MywgODIsIDg0LCA3MiwgODIsIDY1LCAKLSAgICAxMjgsIDgxLCA2NSwgNzMsIDEyOCwgODEsIDY1LCA3MCwgMTI4LCA4MSwgNjUsIDE5OCwgODEsIDY1LCA2OCwgNzcsIDY1LCAKLSAgICAxMjgsIDgxLCA2NSwgNjUsIDczLCAxMjgsIDgxLCA2NSwgNjUsIDcwLCA4NSwgMTI4LCA4MSwgNjUsIDY1LCA3MCwgMTI4LCAKLSAgICA4MSwgNDgsIDQ4LCA1NSwgMTI4LCA4MSwgNDgsIDQ4LCA1NCwgMTI4LCA4MSwgNDgsIDQ4LCA1MywgMTI4LCA4MSwgNDgsIAotICAgIDQ4LCA1MiwgMTI4LCA4MSwgNDgsIDQ4LCA1MSwgMTI4LCA4MSwgNDgsIDQ4LCA1MCwgMTI4LCA4MSwgNDgsIDQ4LCA0OSwgCi0gICAgMTI4LCA4MCwgOTAsIDEyOCwgODAsIDg5LCA4OCwgMTI4LCA4MCwgODksIDg0LCAxMjgsIDgwLCA4OSwgODIsIDg4LCAxMjgsIAotICAgIDgwLCA4OSwgODIsIDEyOCwgODAsIDg5LCA4MCwgMTI4LCA4MCwgODksIDEyOCwgODAsIDg3LCA3OSwgODksIDEyOCwgODAsIAotICAgIDg3LCA3OSwgNzksIDEyOCwgODAsIDg3LCA3OSwgMTI4LCA4MCwgODcsIDIwNywgODAsIDg3LCA3MywgNzMsIDEyOCwgODAsIAotICAgIDg3LCA3MywgMTI4LCA4MCwgODcsIDY5LCA2OSwgMTI4LCA4MCwgODcsIDY5LCAxMjgsIDgwLCA4NywgNjUsIDY1LCAxMjgsIAotICAgIDgwLCA4NywgMTI4LCA4MCwgODYsIDEyOCwgODAsIDg1LCA4OCwgMTI4LCA4MCwgODUsIDg1LCA4NCwgMTI4LCA4MCwgODUsIAotICAgIDg1LCAxMjgsIDgwLCA4NSwgODQsIDgyLCA2OSwgNzAsIDY1LCA2NywgODQsIDczLCA3OSwgNzgsIDEyOCwgODAsIDg1LCA4NCwgCi0gICAgMTI4LCA4MCwgODUsIDIxMiwgODAsIDg1LCA4MywgNzIsIDgwLCA3MywgNzgsIDEyOCwgODAsIDg1LCA4MywgNzIsIDgwLCAKLSAgICA3MywgNzUsIDY1LCAxMjgsIDgwLCA4NSwgODMsIDcyLCA3MywgNzgsIDE5OSwgODAsIDg1LCA4MiwgODgsIDEyOCwgODAsIAotICAgIDg1LCA4MiwgODMsIDY5LCAxMjgsIDgwLCA4NSwgODIsIDgwLCA3NiwgMTk3LCA4MCwgODUsIDgyLCA3OCwgNjUsIDc3LCA2NSwgCi0gICAgMTI4LCA4MCwgODUsIDgyLCA3MywgODQsIDg5LCAxMjgsIDgwLCA4NSwgODIsIDczLCA3MCwgODksIDEyOCwgODAsIDg1LCAKLSAgICA4MiwgMTI4LCA4MCwgODUsIDgxLCAxMjgsIDgwLCA4NSwgODAsIDEyOCwgODAsIDg1LCA3OSwgODgsIDEyOCwgODAsIDg1LCAKLSAgICA3OSwgODAsIDEyOCwgODAsIDg1LCA3OSwgMTI4LCA4MCwgODUsIDc4LCA3MSwgNjUsIDY1LCA3NywgMTI4LCA4MCwgODUsIAotICAgIDc4LCA3MSwgMTI4LCA4MCwgODUsIDc4LCA2NywgODQsIDg1LCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgODAsIDg1LCA3OCwgCi0gICAgNjcsIDg0LCA4NSwgNjUsIDg0LCA3MywgNzksIDIwNiwgODAsIDg1LCA3NywgODAsIDEyOCwgODAsIDg1LCA3NywgMTI4LCAKLSAgICA4MCwgODUsIDY5LCAxMjgsIDgwLCA4NSwgNjYsIDc2LCA3MywgMTk1LCA4MCwgODUsIDY1LCA4MSwgMTI4LCA4MCwgODUsIAotICAgIDY1LCA2OSwgMTI4LCA4MCwgODUsIDUwLCAxMjgsIDgwLCA4NSwgNDksIDEyOCwgODAsIDg1LCAxMjgsIDgwLCA4NCwgNzIsIAotICAgIDY1LCA3MiwgMTkzLCA4MCwgODQsIDY5LCAxMjgsIDgwLCA4MywgNzMsIDc2LCAyMDEsIDgwLCA4MywgNzMsIDcwLCA3MywgCi0gICAgODMsIDg0LCA3OSwgODMsIDg5LCA3OCwgNjUsIDcxLCA3NywgNjUsIDEyOCwgODAsIDgzLCA3MywgNzAsIDczLCA4MywgODQsIAotICAgIDc5LCA4MCwgNjUsIDgyLCA2NSwgNzUsIDY1LCA3NiwgNjksIDgzLCA3NywgNjUsIDEyOCwgODAsIDgzLCA3MywgNzAsIDczLCAKLSAgICA4MywgODQsIDc5LCAyMDYsIDgwLCA4MywgNzMsIDcwLCA3MywgODMsIDg0LCA3OSwgNzYsIDg5LCA3MSwgNzMsIDgzLCA3NywgCi0gICAgNjUsIDEyOCwgODAsIDgzLCA3MywgMTI4LCA4MCwgODMsIDEyOCwgODAsIDgyLCA3OSwgODYsIDY5LCAxMjgsIDgwLCA4MiwgCi0gICAgNzksIDg0LCA3OSwgODYsIDY1LCA4MiwgODksIDIxMSwgODAsIDgyLCA3OSwgODQsIDc5LCAyMTEsIDgwLCA4MiwgNzksIDg0LCAKLSAgICA2OSwgNjcsIDg0LCA2OSwgMTk2LCA4MCwgODIsIDc5LCA4MywgNzEsIDY5LCA3MSwgODIsIDY1LCA3NywgNzcsIDY5LCA3OCwgCi0gICAgNzMsIDEyOCwgODAsIDgyLCA3OSwgODAsIDc5LCA4MiwgODQsIDczLCA3OSwgNzgsIDY1LCAyMDQsIDgwLCA4MiwgNzksIDgwLCAKLSAgICA3OSwgODIsIDg0LCA3MywgNzksIDc4LCAxMjgsIDgwLCA4MiwgNzksIDgwLCA2OSwgODIsIDg0LCAyMTcsIDgwLCA4MiwgNzksIAotICAgIDgwLCA2OSwgNzYsIDc2LCA2OSwgMjEwLCA4MCwgODIsIDc5LCA3OSwgNzAsIDEyOCwgODAsIDgyLCA3OSwgNzYsIDc5LCA3OCwgCi0gICAgNzEsIDY5LCAxOTYsIDgwLCA4MiwgNzksIDc2LCA2NSwgODQsIDczLCA3OSwgNzgsIDE5NywgODAsIDgyLCA3OSwgNzQsIDY5LCAKLSAgICA2NywgODQsIDczLCA4NiwgNjksIDEyOCwgODAsIDgyLCA3OSwgNzQsIDY5LCA2NywgODQsIDczLCA3OSwgNzgsIDEyOCwgODAsIAotICAgIDgyLCA3OSwgNzEsIDgyLCA2OSwgODMsIDgzLCAxMjgsIDgwLCA4MiwgNzksIDcxLCA4MiwgNjUsIDIwNSwgODAsIDgyLCA3OSwgCi0gICAgNzAsIDc5LCA4NSwgNzgsIDY4LCAxMjgsIDgwLCA4MiwgNzksIDY4LCA4NSwgNjcsIDg0LCAxMjgsIDgwLCA4MiwgNzksIDY4LCAKLSAgICA4NSwgNjcsIDIxMiwgODAsIDgyLCA3MywgODYsIDY1LCA4NCwgNjksIDEyOCwgODAsIDgyLCA3MywgODYsIDY1LCA4NCwgCi0gICAgMTk3LCA4MCwgODIsIDczLCA4NiwgNjUsIDY3LCAyMTcsIDgwLCA4MiwgNzMsIDgzLCA3MiwgODQsIDcyLCA2NSwgNzcsIDY1LCAKLSAgICA4NCwgODIsIDE5MywgODAsIDgyLCA3MywgNzgsIDg0LCA4MywgMTI4LCA4MCwgODIsIDczLCA3OCwgODQsIDEyOCwgODAsIAotICAgIDgyLCA3MywgNzgsIDIxMiwgODAsIDgyLCA3MywgNzgsIDY3LCA2OSwgODMsIDgzLCAxMjgsIDgwLCA4MiwgNzMsIDc3LCA2OSwgCi0gICAgMTI4LCA4MCwgODIsIDczLCA3NywgMTk3LCA4MCwgODIsIDY5LCA4NiwgNzMsIDc5LCA4NSwgMjExLCA4MCwgODIsIDY5LCAKLSAgICA4MywgNjksIDg0LCAxMjgsIDgwLCA4MiwgNjksIDgzLCA2OSwgNzgsIDg0LCA2NSwgODQsIDczLCA3OSwgMjA2LCA4MCwgODIsIAotICAgIDY5LCA4MywgNjcsIDgyLCA3MywgODAsIDg0LCA3MywgNzksIDIwNiwgODAsIDgyLCA2OSwgODAsIDc5LCA3OCwgNjgsIDY5LCAKLSAgICA4MiwgNjUsIDc4LCA2NywgNjksIDEyOCwgODAsIDgyLCA2OSwgNzgsIDc1LCA3MiwgNjUsIDEyOCwgODAsIDgyLCA2OSwgNzAsIAotICAgIDY1LCA2NywgMTk3LCA4MCwgODIsIDY5LCA2NywgNzMsIDgwLCA3MywgODQsIDY1LCA4NCwgNjksIDEyOCwgODAsIDgyLCA2OSwgCi0gICAgNjcsIDY5LCA2OCwgNzMsIDc4LCAxOTksIDgwLCA4MiwgNjksIDY3LCA2OSwgNjgsIDY5LCA4MywgMTI4LCA4MCwgODIsIDY5LCAKLSAgICA2NywgNjksIDY4LCA2OSwgMjExLCA4MCwgODIsIDY5LCA2NywgNjksIDY4LCA2OSwgMTk2LCA4MCwgODIsIDY5LCA2NywgNjksIAotICAgIDY4LCA2OSwgMTI4LCA4MCwgODIsIDY5LCA2NywgNjksIDY4LCAxOTcsIDgwLCA4MiwgNjUsIDc3LCA0NSwgODAsIDczLCA3MywgCi0gICAgMTI4LCA4MCwgODIsIDY1LCA3NywgNDUsIDgwLCA3MywgMjAxLCA4MCwgODIsIDY1LCA3NywgNDUsIDc3LCA4NSwgNzksIDg5LCAKLSAgICAxMjgsIDgwLCA4MiwgNjUsIDc3LCA0NSwgNzcsIDg1LCA3OSwgMjE3LCA4MCwgODIsIDY1LCA3NywgNDUsIDY2LCA4NSwgNzksIAotICAgIDc4LCAxMjgsIDgwLCA4MiwgNjUsIDc3LCA0NSwgNjYsIDg1LCA3OSwgMjA2LCA4MCwgODIsIDY1LCA3NywgNDUsIDY2LCA2OSwgCi0gICAgNzMsIDEyOCwgODAsIDgyLCA2NSwgNzcsIDQ1LCA2NiwgNjksIDIwMSwgODAsIDgyLCA2NSwgNzcsIDEyOCwgODAsIDgyLCAKLSAgICA2NSwgMjA1LCA4MCwgODIsIDEyOCwgODAsIDgwLCA4NiwgMTI4LCA4MCwgODAsIDc3LCAxMjgsIDgwLCA4MCwgNjUsIDEyOCwgCi0gICAgODAsIDc5LCA4OSwgMTI4LCA4MCwgNzksIDg4LCAxMjgsIDgwLCA3OSwgODcsIDY5LCA4MiwgMjExLCA4MCwgNzksIDg3LCAKLSAgICA2OSwgODIsIDEyOCwgODAsIDc5LCA4NywgNjgsIDY5LCA4MiwgNjksIDE5NiwgODAsIDc5LCA4NywgNjgsIDY5LCA4MiwgCi0gICAgMTI4LCA4MCwgNzksIDg1LCA3OCwgMTk2LCA4MCwgNzksIDg1LCA3NiwgODQsIDgyLCAyMTcsIDgwLCA3OSwgODUsIDY3LCAKLSAgICA3MiwgMTI4LCA4MCwgNzksIDg0LCA2NSwgODQsIDc5LCAxMjgsIDgwLCA3OSwgODQsIDY1LCA2NiwgNzYsIDE5NywgODAsIAotICAgIDc5LCAyMTIsIDgwLCA3OSwgODMsIDg0LCA4MCwgNzksIDgzLCA3MywgODQsIDczLCA3OSwgMjA2LCA4MCwgNzksIDgzLCA4NCwgCi0gICAgNjYsIDc5LCA4OCwgMTI4LCA4MCwgNzksIDgzLCA4NCwgNjUsIDIwNCwgODAsIDc5LCA4MywgODQsIDEyOCwgODAsIDc5LCAKLSAgICA4MywgMjEyLCA4MCwgNzksIDgzLCA4MywgNjksIDgzLCA4MywgNzMsIDc5LCA3OCwgMTI4LCA4MCwgNzksIDgyLCA4MiwgNjksIAotICAgIDY3LCA4NCwgODUsIDgzLCAxMjgsIDgwLCA3OSwgODIsIDgyLCA2OSwgNjcsIDg0LCA4NSwgMjExLCA4MCwgNzksIDgwLCA4MCwgCi0gICAgNjksIDgyLCAxMjgsIDgwLCA3OSwgODAsIDEyOCwgODAsIDc5LCAyMDgsIDgwLCA3OSwgNzksIDY4LCA3NiwgNjksIDEyOCwgCi0gICAgODAsIDc5LCA3OSwgMTI4LCA4MCwgNzksIDc4LCA2OCwgNzksIDEyOCwgODAsIDc5LCAyMDYsIDgwLCA3OSwgNzcsIDc3LCAKLSAgICA2OSwgNjksIDEyOCwgODAsIDc5LCA3NywgNzcsIDY5LCAxOTcsIDgwLCA3OSwgNzYsIDczLCA4MywgNzIsIDEyOCwgODAsIAotICAgIDc5LCA3NiwgNzMsIDY3LCAxOTcsIDgwLCA3OSwgNzYsIDIwMSwgODAsIDc5LCA3NiwgNjksIDEyOCwgODAsIDc5LCA3NiwgCi0gICAgMTk3LCA4MCwgNzksIDc1LCA4MiwgODksIDg0LCA3MywgNjksIDEyOCwgODAsIDc5LCA3NSwgNzksIDc0LCA3MywgMTI4LCAKLSAgICA4MCwgNzksIDczLCA3OCwgODQsIDIxMSwgODAsIDc5LCA3MywgNzgsIDg0LCA3OSwgMTI4LCA4MCwgNzksIDczLCA3OCwgODQsIAotICAgIDY5LCA4MiwgMTI4LCA4MCwgNzksIDczLCA3OCwgODQsIDY5LCAxOTYsIDgwLCA3OSwgNzMsIDc4LCA4NCwgMTI4LCA4MCwgCi0gICAgNzksIDczLCA3OCwgMjEyLCA4MCwgNzksIDY5LCA4NCwgODIsIDIxNywgODAsIDc5LCA2OSwgODQsIDczLCAxOTUsIDgwLCAKLSAgICA3OSwgNjgsIDY1LCA4NCwgODUsIDgzLCAxMjgsIDgwLCA3OSwgNjUsIDEyOCwgODAsIDc5LCAxMjgsIDgwLCAyMDcsIDgwLCAKLSAgICA3OCwgNjksIDg1LCA3NywgNjUsIDg0LCA2NSwgMTI4LCA4MCwgNzYsIDg1LCA4NCwgNzksIDEyOCwgODAsIDc2LCA4NSwgODMsIAotICAgIDQ1LCA3NywgNzMsIDc4LCA4NSwgMjExLCA4MCwgNzYsIDg1LCA4MywgMTI4LCA4MCwgNzYsIDg1LCA4MiwgNjUsIDc2LCAKLSAgICAxMjgsIDgwLCA3NiwgODUsIDc3LCA2OSwgMTk2LCA4MCwgNzYsIDg1LCA3NywgMTI4LCA4MCwgNzYsIDg1LCA3NSwgMTI4LCAKLSAgICA4MCwgNzYsIDg1LCA3MSwgMTI4LCA4MCwgNzYsIDg1LCAxMjgsIDgwLCA3NiwgNzksIDg3LCAxMjgsIDgwLCA3NiwgNzksIAotICAgIDgwLCA3MiwgODUsIDEyOCwgODAsIDc2LCA2OSwgODQsIDcyLCA4MiwgNzksIDc4LCAxMjgsIDgwLCA3NiwgNjgsIDEyOCwgCi0gICAgODAsIDc2LCA2NSwgODksIDczLCA3OCwgMTk5LCA4MCwgNzYsIDY1LCA4MywgODQsIDczLCA2NywgODMsIDEyOCwgODAsIDc2LCAKLSAgICA2NSwgNzgsIDY5LCAxMjgsIDgwLCA3NiwgNjUsIDc4LCAxOTcsIDgwLCA3NiwgNjUsIDc4LCA2NywgMjAzLCA4MCwgNzYsIAotICAgIDY1LCA3NSwgMTI4LCA4MCwgNzYsIDY1LCA3MSwgNzMsIDc5LCAyMTEsIDgwLCA3NiwgNjUsIDY3LCA2OSwgNzIsIDc5LCA3NiwgCi0gICAgNjgsIDY5LCAyMTAsIDgwLCA3NiwgNjUsIDY3LCAxOTcsIDgwLCA3NiwgNjUsIDEyOCwgODAsIDczLCA5MCwgOTAsIDczLCAKLSAgICA2NywgNjUsIDg0LCA3OSwgMTI4LCA4MCwgNzMsIDkwLCA5MCwgNjUsIDEyOCwgODAsIDczLCA4OCwgMTI4LCA4MCwgNzMsIAotICAgIDg3LCA4MiwgMTI4LCA4MCwgNzMsIDg0LCA2NywgNzIsIDcwLCA3OSwgODIsIDc1LCAxMjgsIDgwLCA3MywgODQsIDY3LCA3MiwgCi0gICAgNzAsIDc5LCA4MiwgMjAzLCA4MCwgNzMsIDg0LCAxMjgsIDgwLCA3MywgODMsIDg0LCA3OSwgNzYsIDEyOCwgODAsIDczLCAKLSAgICA4MywgNjksIDc2LCA2OSwgNzIsIDEyOCwgODAsIDczLCA4MywgNjcsIDY5LCA4MywgMTI4LCA4MCwgNzMsIDgyLCA3MywgNzEsIAotICAgIDEyOCwgODAsIDczLCA4MiwgNzMsIDE5OSwgODAsIDczLCA4MiwgNzMsIDY5LCA2OSwgNzgsIDEyOCwgODAsIDczLCA4MCwgCi0gICAgNzMsIDc4LCA3MSwgMTI4LCA4MCwgNzMsIDgwLCA2NSwgNjksIDc3LCA3MSwgNjYsIDczLCA2OSwgNjksIDEyOCwgODAsIDczLCAKLSAgICA4MCwgNjUsIDY5LCA3NywgNjYsIDY1LCAxMjgsIDgwLCA3MywgODAsIDEyOCwgODAsIDczLCA3OCwgODcsIDcyLCA2OSwgNjksIAotICAgIDIwNCwgODAsIDczLCA3OCwgNjksIDY1LCA4MCwgODAsIDc2LCA2OSwgMTI4LCA4MCwgNzMsIDc4LCAxOTcsIDgwLCA3MywgCi0gICAgNzgsIDY1LCA4MiwgNjYsIDc5LCA4MiwgNjUsIDgzLCAxMjgsIDgwLCA3MywgNzYsIDc2LCAxMjgsIDgwLCA3MywgNzYsIAotICAgIDE5NywgODAsIDczLCA3NiwgNjcsIDgyLCA3OSwgMjE1LCA4MCwgNzMsIDc1LCA4NSwgODIsIDg1LCAxMjgsIDgwLCA3MywgCi0gICAgNzUsIDc5LCAxMjgsIDgwLCA3MywgNzEsIDEyOCwgODAsIDczLCAxOTksIDgwLCA3MywgNjksIDg4LCAxMjgsIDgwLCA3MywgCi0gICAgNjksIDg1LCA4MCwgNDUsIDg0LCA3MiwgNzMsIDY5LCA4NSwgODQsIDcyLCAxMjgsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIAotICAgIDgzLCA4MywgNjUsIDc4LCA3MSwgODMsIDczLCA3OSwgODMsIDEyOCwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgODMsIDczLCAKLSAgICA3OSwgODMsIDQ1LCA4NCwgNzMsIDc1LCA2OSwgODUsIDg0LCAxMjgsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDgzLCA3MywgCi0gICAgNzksIDgzLCA0NSwgODQsIDcyLCA3MywgNjksIDg1LCA4NCwgNzIsIDEyOCwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgODMsIAotICAgIDczLCA3OSwgODMsIDQ1LCA4MCwgNzMsIDY5LCA4NSwgODAsIDEyOCwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgODMsIDczLCAKLSAgICA3OSwgODMsIDQ1LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCAxMjgsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDgzLCA3MywgCi0gICAgNzksIDgzLCA0NSwgNjcsIDczLCA2OSwgODUsIDY3LCAxMjgsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDgyLCA3MywgNjksIAotICAgIDg1LCA3NiwgNDUsIDgwLCA3MiwgNzMsIDY5LCA4NSwgODAsIDcyLCAxMjgsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDgyLCAKLSAgICA3MywgNjksIDg1LCA3NiwgMTI4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA3OCwgNzMsIDY5LCA4NSwgNzgsIDEyOCwgODAsIAotICAgIDczLCA2OSwgODUsIDgwLCA0NSwgNzcsIDczLCA2OSwgODUsIDc3LCAxMjgsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDc1LCAKLSAgICA3MiwgNzMsIDY5LCA4NSwgNzUsIDcyLCAxMjgsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDY3LCA3MywgNjksIDg1LCA2NywgCi0gICAgMTI4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA2NywgNzIsIDczLCA2OSwgODUsIDY3LCA3MiwgMTI4LCA4MCwgNzMsIDY5LCAKLSAgICA4NSwgMjA4LCA4MCwgNzMsIDY5LCA4NCwgMTI4LCA4MCwgNzMsIDY5LCA4MCwgMTI4LCA4MCwgNzMsIDY5LCA2OSwgODQsIAotICAgIDEyOCwgODAsIDczLCA2OSwgNjksIDgxLCAxMjgsIDgwLCA3MywgNjksIDY3LCA2OSwgMTI4LCA4MCwgNzMsIDY5LCAxMjgsIAotICAgIDgwLCA3MywgNjcsIDc1LCA2OSwgODQsIDEyOCwgODAsIDczLCA2NywgNzUsIDEyOCwgODAsIDczLCA2NSwgODMsIDg1LCA4NCwgCi0gICAgNzksIDgyLCA4NSwgMTI4LCA4MCwgNzMsIDY1LCA4MywgNzcsIDE5MywgODAsIDczLCA2NSwgNzgsIDc5LCAxMjgsIDgwLCAKLSAgICAyMDEsIDgwLCA3MiwgODcsIDY1LCAxMjgsIDgwLCA3MiwgODUsIDg0LCA3MiwgNjUsIDc5LCAxMjgsIDgwLCA3MiwgODUsIAotICAgIDIxMCwgODAsIDcyLCA4NSwgNzgsIDcxLCAxMjgsIDgwLCA3MiwgODIsIDY1LCA4MywgNjksIDEyOCwgODAsIDcyLCA3OSwgCi0gICAgNzgsIDY5LCA4MywgMTI4LCA4MCwgNzIsIDc5LCA2OSwgNzgsIDczLCA2NywgNzMsIDY1LCAyMDYsIDgwLCA3MiwgNzksIDY1LCAKLSAgICAxMjgsIDgwLCA3MiwgNzksIDEyOCwgODAsIDcyLCAyMDcsIDgwLCA3MiwgNzgsIDY1LCA2OSwgMjAzLCA4MCwgNzIsIDczLCAKLSAgICA3OCwgODQsIDcyLCA4NSwgMTI4LCA4MCwgNzIsIDczLCA3NiwgNzksIDgzLCA3OSwgODAsIDcyLCA2OSwgODIsIDIxMSwgODAsIAotICAgIDcyLCA3MywgNzYsIDczLCA4MCwgODAsIDczLCA3OCwgMTk3LCA4MCwgNzIsIDczLCA2OSwgODUsIDgwLCA3MiwgNDUsIDg0LCAKLSAgICA3MiwgNzMsIDY5LCA4NSwgODQsIDcyLCAxMjgsIDgwLCA3MiwgNzMsIDY5LCA4NSwgODAsIDcyLCA0NSwgODMsIDczLCA3OSwgCi0gICAgODMsIDEyOCwgODAsIDcyLCA3MywgNjksIDg1LCA4MCwgNzIsIDQ1LCA4MCwgNzMsIDY5LCA4NSwgODAsIDEyOCwgODAsIDcyLCAKLSAgICA3MywgNjksIDg1LCA4MCwgNzIsIDQ1LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDEyOCwgODAsIDcyLCA3MywgNjksIDg1LCA4MCwgCi0gICAgMjAwLCA4MCwgNzIsIDczLCAxMjgsIDgwLCA3MiwgMjAxLCA4MCwgNzIsIDY5LCA2OSwgMTI4LCA4MCwgNzIsIDY5LCAxMjgsIAotICAgIDgwLCA3MiwgNjUsIDgzLCA2OSwgNDUsIDE5OCwgODAsIDcyLCA2NSwgODMsIDY5LCA0NSwgMTk0LCA4MCwgNzIsIDY1LCA4MiwgCi0gICAgODksIDc4LCA3MSwgNjksIDY1LCAyMDQsIDgwLCA3MiwgNjUsIDgyLCAxMjgsIDgwLCA3MiwgNjUsIDc4LCAxMjgsIDgwLCAKLSAgICA3MiwgNjUsIDc3LCAxMjgsIDgwLCA3MiwgNjUsIDczLCA4MywgODQsIDc5LCAyMTEsIDgwLCA3MiwgNjUsIDcxLCA4MywgNDUsIAotICAgIDgwLCAxOTMsIDgwLCA3MiwgNjUsIDY1LCA4MiwgNzUsIDY1LCA2NSwgMTI4LCA4MCwgNzIsIDY1LCA2NSwgMTI4LCA4MCwgCi0gICAgNzIsIDY1LCAxMjgsIDgwLCA3MSwgMTI4LCA4MCwgNzAsIDEyOCwgODAsIDY5LCA4NSwgODgsIDEyOCwgODAsIDY5LCA4NSwgCi0gICAgODQsIDY1LCA2OSwgMTI4LCA4MCwgNjksIDg1LCA4NCwgMTI4LCA4MCwgNjksIDg0LCA2NSwgODMsIDg0LCA3OSwgNzUsIDc5LCAKLSAgICA4NSwgNzAsIDczLCA4MywgNzcsIDY1LCAxMjgsIDgwLCA2OSwgODQsIDY1LCA4MywgODQsIDczLCAxMjgsIDgwLCA2OSwgODQsIAotICAgIDY1LCA4MywgNzcsIDY1LCAxMjgsIDgwLCA2OSwgODQsIDY1LCA3NiwgNzYsIDY5LCAxOTYsIDgwLCA2OSwgODMsIDc5LCAKLSAgICAxMjgsIDgwLCA2OSwgODMsIDIwNywgODAsIDY5LCA4MywgNzIsIDUwLCAxMjgsIDgwLCA2OSwgODMsIDY5LCA4NCwgMTkzLCAKLSAgICA4MCwgNjksIDIxMSwgODAsIDY5LCA4MiwgODQsIDcyLCAyMDcsIDgwLCA2OSwgODIsIDgzLCA4MCwgNjksIDY3LCA4NCwgNzMsIAotICAgIDg2LCA2OSwgMTI4LCA4MCwgNjksIDgyLCA4MywgNzksIDc4LCA2NSwgMjA0LCA4MCwgNjksIDgyLCA4MywgNzksIDc4LCAKLSAgICAxMjgsIDgwLCA2OSwgODIsIDgzLCA3OSwgMjA2LCA4MCwgNjksIDgyLCA4MywgNzMsIDY1LCAyMDYsIDgwLCA2OSwgODIsIAotICAgIDgzLCA2OSwgODYsIDY5LCA4MiwgNzMsIDc4LCAxOTksIDgwLCA2OSwgODIsIDgwLCA2OSwgNzgsIDY4LCA3MywgNjcsIDg1LCAKLSAgICA3NiwgNjUsIDgyLCAxMjgsIDgwLCA2OSwgODIsIDgwLCA2OSwgNzgsIDY4LCA3MywgNjcsIDg1LCA3NiwgNjUsIDIxMCwgODAsIAotICAgIDY5LCA4MiwgNzcsIDczLCA4NCwgODQsIDY5LCAxOTYsIDgwLCA2OSwgODIsIDc3LCA2NSwgNzgsIDY5LCA3OCwgMjEyLCA4MCwgCi0gICAgNjksIDgyLCA3MywgODMsIDgwLCA3OSwgNzcsIDY5LCA3OCwgNzMsIDEyOCwgODAsIDY5LCA4MiwgNzMsIDgzLCA4MCwgNzksIAotICAgIDc3LCA2OSwgNzgsIDIwMSwgODAsIDY5LCA4MiwgNzAsIDc5LCA4MiwgNzcsIDczLCA3OCwgMTk5LCA4MCwgNjksIDgyLCA3MCwgCi0gICAgNjksIDY3LCA4NCwgODUsIDIwNSwgODAsIDY5LCA4MiwgNzAsIDY5LCA2NywgODQsIDY1LCAxMjgsIDgwLCA2OSwgODIsIDcwLCAKLSAgICA2OSwgNjcsIDg0LCAxOTMsIDgwLCA2OSwgODIsIDY3LCA4NSwgODMsIDgzLCA3MywgODYsIDY5LCAxMjgsIDgwLCA2OSwgODIsIAotICAgIDY3LCA2OSwgNzgsIDIxMiwgODAsIDY5LCA4MCwgNjksIDg0LCAxMjgsIDgwLCA2OSwgODAsIDY5LCAyMTIsIDgwLCA2OSwgCi0gICAgNzksIDgyLCA4NCwgMjAwLCA4MCwgNjksIDc5LCA4MCwgNzYsIDY5LCAxMjgsIDgwLCA2OSwgNzgsIDg0LCA2NSwgODMsIDY5LCAKLSAgICA3NywgNjksIDEyOCwgODAsIDY5LCA3OCwgODQsIDY1LCA3MSwgODIsIDY1LCA3NywgMTI4LCA4MCwgNjksIDc4LCA4NCwgNjUsIAotICAgIDcxLCA3OSwgNzgsIDEyOCwgODAsIDY5LCA3OCwgODMsIDg1LCAxMjgsIDgwLCA2OSwgNzgsIDgzLCA3MywgODYsIDE5NywgCi0gICAgODAsIDY5LCA3OCwgNzgsIDIxNywgODAsIDY5LCA3OCwgNzMsIDcyLCA3MywgMTI4LCA4MCwgNjksIDc4LCA3MSwgODUsIDczLCAKLSAgICA3OCwgMTI4LCA4MCwgNjksIDc4LCA3MSwgNzUsIDY1LCA3NiwgMTI4LCA4MCwgNjksIDc4LCA2OSwgODQsIDgyLCA2NSwgODQsIAotICAgIDczLCA3OSwgNzgsIDEyOCwgODAsIDY5LCA3OCwgNjcsIDczLCA3NiwgMTI4LCA4MCwgNjksIDc2LCA2NSwgODMsIDg0LCA3OSwgCi0gICAgNzgsIDEyOCwgODAsIDY5LCA3NiwgNjUsIDgzLCA4NCwgNzksIDIwNiwgODAsIDY5LCA3MywgODQsIDcyLCAxMjgsIDgwLCAKLSAgICA2OSwgNzIsIDY5LCA3MiwgMTI4LCA4MCwgNjksIDcyLCA2OSwgMjAwLCA4MCwgNjksIDcyLCAxMjgsIDgwLCA2OSwgMjAwLCAKLSAgICA4MCwgNjksIDY5LCA5MCwgNzMsIDEyOCwgODAsIDY5LCA2OSwgODMsIDcyLCA3MywgMTI4LCA4MCwgNjksIDY5LCA4MCwgCi0gICAgMTI4LCA4MCwgNjksIDY5LCA3NywgMTI4LCA4MCwgNjksIDY5LCAxMjgsIDgwLCA2OSwgNjgsIDY5LCA4MywgODQsIDgyLCAKLSAgICA3MywgNjUsIDc4LCA4MywgMTI4LCA4MCwgNjksIDY4LCA2OSwgODMsIDg0LCA4MiwgNzMsIDY1LCA3OCwgMTI4LCA4MCwgNjksIAotICAgIDY4LCA2OSwgODMsIDg0LCA2NSwgNzYsIDEyOCwgODAsIDY5LCA2OCwgNjksIDgzLCA4NCwgNjUsIDIwNCwgODAsIDY5LCA2OCwgCi0gICAgNjUsIDIwNCwgODAsIDY5LCA2NSwgNjcsIDcyLCAxMjgsIDgwLCA2OSwgNjUsIDY3LCA2OSwgMTI4LCA4MCwgNjksIDY1LCAKLSAgICA2NywgMTk3LCA4MCwgNjgsIDcwLCAxMjgsIDgwLCA2OCwgMTI4LCA4MCwgNjcsIDEyOCwgODAsIDY1LCA5MCwgNjksIDgyLCAKLSAgICAxMjgsIDgwLCA2NSwgODksIDY5LCA4MiwgNzksIDc1LCAxMjgsIDgwLCA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIAotICAgIDgwLCA2NSwgODksIDEyOCwgODAsIDY1LCA4OCwgMTI4LCA4MCwgNjUsIDg3LCA3OCwgMTI4LCA4MCwgNjUsIDIxNSwgODAsIAotICAgIDY1LCA4NiwgNzMsIDg5LCA2NSwgNzgsIDczLCAxMjgsIDgwLCA2NSwgODUsIDEyOCwgODAsIDY1LCA4NCwgODQsIDY5LCA4MiwgCi0gICAgNzgsIDEyOCwgODAsIDY1LCA4NCwgNzIsIDY1LCA3NywgNjUsIDgzLCA2NSwgODQsIDEyOCwgODAsIDY1LCA4NCwgMjAwLCAKLSAgICA4MCwgNjUsIDg0LCA2NSwgNzUsIDEyOCwgODAsIDY1LCA4NCwgNjUsIDcyLCAxMjgsIDgwLCA2NSwgODQsIDEyOCwgODAsIAotICAgIDY1LCA4MywgODUsIDgxLCAxMjgsIDgwLCA2NSwgODMsIDgzLCA4MCwgNzksIDgyLCAyMTIsIDgwLCA2NSwgODMsIDgzLCA3MywgCi0gICAgODYsIDY5LCA0NSwgODAsIDg1LCA3NiwgNzYsIDQ1LCA4NSwgODAsIDQ1LCA3OSwgODUsIDg0LCA4MCwgODUsIDIxMiwgODAsIAotICAgIDY1LCA4MywgODMsIDczLCA4NiwgNjksIDQ1LCA4MCwgODUsIDc2LCA3NiwgNDUsIDY4LCA3OSwgODcsIDc4LCA0NSwgNzksIAotICAgIDg1LCA4NCwgODAsIDg1LCAyMTIsIDgwLCA2NSwgODMsIDcyLCA4NCwgNjUsIDEyOCwgODAsIDY1LCA4MywgNzIsIDY1LCA2OSwgCi0gICAgMTI4LCA4MCwgNjUsIDgzLCA2OSwgODEsIDEyOCwgODAsIDY1LCA4MywgNjUsIDc4LCA3MSwgNjUsIDIwNiwgODAsIDY1LCAKLSAgICA4MiwgODUsIDc3LCAxMjgsIDgwLCA2NSwgODIsIDg0LCAyMTcsIDgwLCA2NSwgODIsIDg0LCA3OCwgNjksIDgyLCA4MywgNzIsIAotICAgIDczLCAyMDgsIDgwLCA2NSwgODIsIDg0LCA3MywgNjUsIDc2LCA3NiwgODksIDQ1LCA4MiwgNjksIDY3LCA4OSwgNjcsIDc2LCAKLSAgICA2OSwgMTk2LCA4MCwgNjUsIDgyLCA4NCwgNzMsIDY1LCAyMDQsIDgwLCA2NSwgODIsIDg0LCA3MiwgNzMsIDY1LCAyMDYsIAotICAgIDgwLCA2NSwgODIsIDIxMiwgODAsIDY1LCA4MiwgNzMsIDY3LCA3MiwgNzksIDc4LCAxMjgsIDgwLCA2NSwgODIsIDY5LCA4MywgCi0gICAgODQsIDczLCA3MSwgNzcsIDY5LCA3OCwgNzksIDIwNiwgODAsIDY1LCA4MiwgNjksIDgyLCA2OSwgNzgsIDEyOCwgODAsIDY1LCAKLSAgICA4MiwgNjksIDc4LCA4NCwgNzIsIDY5LCA4MywgNzMsIDgzLCAxMjgsIDgwLCA2NSwgODIsIDY5LCA3OCwgODQsIDcyLCA2OSwgCi0gICAgODMsIDczLCAyMTEsIDgwLCA2NSwgODIsIDY1LCA4MCwgNzIsIDgyLCA2NSwgODMsIDE5NywgODAsIDY1LCA4MiwgNjUsIDc2LCAKLSAgICA3NiwgNjksIDc2LCA3OSwgNzEsIDgyLCA2NSwgNzcsIDEyOCwgODAsIDY1LCA4MiwgNjUsIDc2LCA3NiwgNjksIDc2LCAxMjgsIAotICAgIDgwLCA2NSwgODIsIDY1LCA3NiwgNzYsIDY5LCAyMDQsIDgwLCA2NSwgODIsIDY1LCA3NSwgNzYsIDczLCA4NCwgNzMsIDc1LCAKLSAgICA3MywgMTI4LCA4MCwgNjUsIDgyLCA2NSwgNzUsIDc2LCA3MywgODQsIDczLCA3NSwgMjAxLCA4MCwgNjUsIDgyLCA2NSwgNzUsIAotICAgIDY1LCA3NiwgNjksIDgzLCA3NywgMTkzLCA4MCwgNjUsIDgyLCA2NSwgNzEsIDgyLCA2NSwgODAsIDcyLCA3OSwgODMsIDEyOCwgCi0gICAgODAsIDY1LCA4MiwgNjUsIDcxLCA4MiwgNjUsIDgwLCA3MiwgMTI4LCA4MCwgNjUsIDgyLCA2NSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDIwMCwgODAsIDY1LCA4MiwgNjUsIDEyOCwgODAsIDY1LCA4MiwgMTI4LCA4MCwgNjUsIDgwLCA4OSwgODIsIDg1LCA4MywgCi0gICAgMTI4LCA4MCwgNjUsIDgwLCA2OSwgODIsIDY3LCA3NiwgNzMsIDgwLCAxMjgsIDgwLCA2NSwgODAsIDY5LCAyMTAsIDgwLCAKLSAgICA2NSwgODAsIDEyOCwgODAsIDY1LCAyMDgsIDgwLCA2NSwgMjA3LCA4MCwgNjUsIDc4LCA4OSwgODUsIDc1LCA4NSwgMTI4LCAKLSAgICA4MCwgNjUsIDc4LCA4OSwgNzMsIDc1LCA4NSwgMTI4LCA4MCwgNjUsIDc4LCA4OSwgNjksIDY3LCA2OSwgNzUsIDEyOCwgODAsIAotICAgIDY1LCA3OCwgODksIDY1LCA3OCwgNzEsIDcxLCA2NSwgMTI4LCA4MCwgNjUsIDc4LCA4OSwgNjUsIDc1LCA4MiwgNjUsIDEyOCwgCi0gICAgODAsIDY1LCA3OCwgODQsIDczLCAxMjgsIDgwLCA2NSwgNzgsIDgzLCA3MywgNzksIDgzLCA0NSwgODAsIDczLCA2OSwgODUsIAotICAgIDgwLCAxMjgsIDgwLCA2NSwgNzgsIDgzLCA3MywgNzksIDgzLCA0NSwgNzUsIDY1LCA4MCwgODksIDY5LCA3OSwgODUsIDc4LCAKLSAgICA4MCwgNzMsIDY5LCA4NSwgODAsIDEyOCwgODAsIDY1LCA3OCwgNzksIDc4LCA3MSwgNzksIDc4LCA2NSwgNzgsIDEyOCwgODAsIAotICAgIDY1LCA3OCwgNzksIDc2LCA3OSwgNzgsIDcxLCAxMjgsIDgwLCA2NSwgNzgsIDcxLCA4NywgNzMsIDgzLCA2NSwgNjgsIDEyOCwgCi0gICAgODAsIDY1LCA3OCwgNzEsIDgyLCA2NSwgNzgsIDcxLCA3NSwgNjksIDgwLCAxMjgsIDgwLCA2NSwgNzgsIDcxLCA3OSwgNzYsIAotICAgIDY1LCA4NCwgMTI4LCA4MCwgNjUsIDc4LCA3MSwgNzYsIDc5LCA3OCwgNzEsIDEyOCwgODAsIDY1LCA3OCwgNzEsIDc2LCA2NSwgCi0gICAgODksIDY1LCA4MiwgMTI4LCA4MCwgNjUsIDc4LCA3MSwgNzUsIDc5LCA3OCwgMTI4LCA4MCwgNjUsIDc4LCA3MSwgNzUsIDY1LCAKLSAgICA4NCwgMTI4LCA4MCwgNjUsIDc4LCA3MSwgNzIsIDg1LCA3NiwgODUsIDEyOCwgODAsIDY1LCA3OCwgNzEsIDEyOCwgODAsIAotICAgIDY1LCA3OCwgNjksIDg1LCA3NiwgNjksIDg1LCA3OCwgNzEsIDEyOCwgODAsIDY1LCA3OCwgNjgsIDE5MywgODAsIDY1LCA3OCwgCi0gICAgNjUsIDY5LCA3NiwgNjUsIDY5LCA3OCwgNzEsIDEyOCwgODAsIDY1LCA3OCwgMTI4LCA4MCwgNjUsIDc3LCA4NSwgNzgsIDcxLCAKLSAgICA3NSwgNjUsIDcyLCAxMjgsIDgwLCA2NSwgNzcsIDg1LCA2OCwgODAsIDc5LCA2OCwgMTI4LCA4MCwgNjUsIDc3LCA4MywgNzIsIAotICAgIDY1LCA2OSwgMTI4LCA4MCwgNjUsIDc3LCA4MCwgNzIsIDg5LCA3NiwgNzMsIDY1LCAyMDYsIDgwLCA2NSwgNzcsIDczLCA3OCwgCi0gICAgNzEsIDc1LCA2NSwgNzYsIDEyOCwgODAsIDY1LCA3NywgNjksIDgwLCA2OSwgODQsIDEyOCwgODAsIDY1LCA3NywgNjksIDc4LCAKLSAgICA2OSwgNzgsIDcxLCAxMjgsIDgwLCA2NSwgNzcsIDY1LCA2OCwgNjUsIDEyOCwgODAsIDY1LCA3NywgNjUsIDY1LCA2OSwgNzIsIAotICAgIDEyOCwgODAsIDY1LCA3NiwgODUsIDg0LCA2NSwgMTI4LCA4MCwgNjUsIDc2LCA3OSwgNjcsIDcyLCA3NSwgNjUsIDEyOCwgCi0gICAgODAsIDY1LCA3NiwgMjA1LCA4MCwgNjUsIDc2LCA3NiwgNjUsIDg3LCA2NSwgMTI4LCA4MCwgNjUsIDc2LCA3NiwgNjUsIDgzLCAKLSAgICAxMjgsIDgwLCA2NSwgNzYsIDY5LCA4NCwgODQsIDY5LCAxMjgsIDgwLCA2NSwgNzYsIDY1LCA4NSwgNzgsIDE5OSwgODAsIAotICAgIDY1LCA3NiwgNjUsIDg0LCA2NSwgNzYsIDczLCA5MCwgNjksIDE5NiwgODAsIDY1LCA3NiwgNjUsIDg0LCA2NSwgNzYsIDczLCAKLSAgICA5MCwgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDgwLCA2NSwgNzYsIDY1LCA4NCwgNjUsIDIwNCwgODAsIDY1LCA3NSwgODAsIAotICAgIDY1LCAyMDMsIDgwLCA2NSwgNzMsIDg5LCA2NSwgNzgsIDc4LCA3OSwgNzMsIDEyOCwgODAsIDY1LCA3MywgODIsIDg0LCA3MiwgCi0gICAgODIsIDY1LCAxMjgsIDgwLCA2NSwgNzMsIDgyLCA2OSwgMTk2LCA4MCwgNjUsIDczLCAxMjgsIDgwLCA2NSwgNzIsIDc2LCAKLSAgICA2NSwgODYsIDIwMSwgODAsIDY1LCA3MiwgMTI4LCA4MCwgNjUsIDcxLCA2OSwgODIsIDEyOCwgODAsIDY1LCA3MSwgMTk3LCAKLSAgICA4MCwgNjUsIDY4LCA3NywgMTkzLCA4MCwgNjUsIDY4LCA2OCwgNzMsIDc4LCAxOTksIDgwLCA2NSwgNjgsIDE5MywgODAsIAotICAgIDY1LCA2OCwgMTI4LCA4MCwgNjUsIDY3LCA3NSwgNzMsIDc4LCA3MSwgMTI4LCA4MCwgNjUsIDY3LCA3NSwgNjUsIDcxLCA2OSwgCi0gICAgMTI4LCA4MCwgNjUsIDY1LCA4NCwgODUsIDEyOCwgODAsIDY1LCA2NSwgODMsIDY5LCA3OCwgODQsIDc5LCAxMjgsIDgwLCAKLSAgICA2NSwgNjUsIDgyLCA2NSwgNjksIDEyOCwgODAsIDY1LCA2NSwgNzcsIDEyOCwgODAsIDY1LCA2NSwgNzMsIDEyOCwgODAsIAotICAgIDY1LCA2NSwgNDUsIDgwLCA3MywgNzYsIDc2LCA2NSwgMTI4LCA4MCwgNjUsIDY1LCAxMjgsIDgwLCA1MCwgMTI4LCA4MCwgCi0gICAgNDgsIDQ5LCA0OSwgMTI4LCA4MCwgNDgsIDQ5LCA0OCwgMTI4LCA4MCwgNDgsIDQ4LCA1NywgMTI4LCA4MCwgNDgsIDQ4LCAKLSAgICA1NiwgMTI4LCA4MCwgNDgsIDQ4LCA1NSwgMTI4LCA4MCwgNDgsIDQ4LCA1NCwgMTI4LCA4MCwgNDgsIDQ4LCA1MywgMTI4LCAKLSAgICA4MCwgNDgsIDQ4LCA1MiwgMTI4LCA4MCwgNDgsIDQ4LCA1MSwgNjUsIDEyOCwgODAsIDQ4LCA0OCwgNTEsIDEyOCwgODAsIAotICAgIDQ4LCA0OCwgNTAsIDEyOCwgODAsIDQ4LCA0OCwgNDksIDY1LCAxMjgsIDgwLCA0OCwgNDgsIDQ5LCAxMjgsIDc5LCA4OSwgCi0gICAgODIsIDY1LCA3OCwgNzMsIDgzLCA3NywgMTkzLCA3OSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDc5LCA4OCwgNzMsIDY1LCAKLSAgICAxMjgsIDc5LCA4OCwgNzMsIDE5MywgNzksIDg4LCA2OSwgNzMsIDY1LCAyMDEsIDc5LCA4OCwgNjksIDczLCAxOTMsIDc5LCAKLSAgICA4NiwgNjksIDgyLCA4MiwgNzMsIDY4LCA2OSwgMTI4LCA3OSwgODYsIDY5LCA4MiwgNzYsIDc5LCA3OCwgMTk5LCA3OSwgODYsIAotICAgIDY5LCA4MiwgNzYsIDczLCA3OCwgNjksIDEyOCwgNzksIDg2LCA2OSwgODIsIDc2LCA2NSwgODksIDEyOCwgNzksIDg2LCA2OSwgCi0gICAgODIsIDc2LCA2NSwgODAsIDgwLCA3MywgNzgsIDE5OSwgNzksIDg2LCA2OSwgODIsIDc2LCA2NSwgNzMsIDY4LCAxMjgsIDc5LCAKLSAgICA4NiwgNjksIDgyLCA2NiwgNjUsIDgyLCAxMjgsIDc5LCA4NiwgNjUsIDIwNCwgNzksIDg2LCAxMjgsIDc5LCA4NSwgODQsIAotICAgIDc2LCA3MywgNzgsIDY5LCAxOTYsIDc5LCA4NSwgODQsIDc2LCA3MywgNzgsIDY5LCAxMjgsIDc5LCA4NSwgODQsIDY5LCAKLSAgICAyMTAsIDc5LCA4NSwgODQsIDY2LCA3OSwgMjE2LCA3OSwgODUsIDc4LCA3NSwgNzMsIDE5MywgNzksIDg1LCA3OCwgNjcsIAotICAgIDY5LCAxMjgsIDc5LCA4NSwgNzgsIDY3LCAxOTcsIDc5LCA4NCwgODUsIDEyOCwgNzksIDg0LCA4NCwgNjUsIDg2LCAxOTMsIAotICAgIDc5LCA4NCwgODQsIDEyOCwgNzksIDg0LCA3MiwgNjUsIDc2LCA2NSwgMjA2LCA3OSwgODQsIDcyLCA2NSwgNzYsIDEyOCwgCi0gICAgNzksIDgzLCA3NywgNjUsIDc4LCA4OSwgMTkzLCA3OSwgODMsIDY3LCAxMjgsIDc5LCA4MiwgODQsIDcyLCA3OSwgNzEsIDc5LCAKLSAgICA3OCwgNjUsIDIwNCwgNzksIDgyLCA4NCwgNzIsIDc5LCA2OCwgNzksIDIxNiwgNzksIDgyLCA3OCwgNjUsIDg0LCAxOTcsIAotICAgIDc5LCA4MiwgNzgsIDY1LCA3NywgNjksIDc4LCA4NCwgMTI4LCA3OSwgODIsIDc4LCA2NSwgNzcsIDY5LCA3OCwgMjEyLCA3OSwgCi0gICAgODIsIDc1LCA3MiwgNzksIDIwNiwgNzksIDgyLCA3MywgNzEsIDczLCA3OCwgNjUsIDIwNCwgNzksIDgyLCA3MywgNzEsIDczLCAKLSAgICA3OCwgMTI4LCA3OSwgODIsIDY5LCA0NSwgNTAsIDEyOCwgNzksIDgyLCA2OCwgNzMsIDc4LCA2NSwgMjA0LCA3OSwgODIsIAotICAgIDY4LCA2OSwgMjEwLCA3OSwgODIsIDY3LCA3MiwgNzMsIDY4LCAxMjgsIDc5LCA4MiwgNjUsIDc4LCA3MSwgMTk3LCA3OSwgCi0gICAgODAsIDg0LCA3MywgNzksIDIwNiwgNzksIDgwLCA4NCwgNzMsIDY3LCA2NSwgMjA0LCA3OSwgODAsIDgwLCA4MiwgNjksIDgzLCAKLSAgICA4MywgNzMsIDc5LCA3OCwgMTI4LCA3OSwgODAsIDgwLCA3OSwgODMsIDczLCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA3OSwgODAsIAotICAgIDgwLCA3OSwgODMsIDczLCA3OCwgMTk5LCA3OSwgODAsIDgwLCA3OSwgODMsIDY5LCAxMjgsIDc5LCA4MCwgNzIsIDczLCA4NSwgCi0gICAgNjcsIDcyLCA4NSwgODMsIDEyOCwgNzksIDgwLCA2OSwgODIsIDY1LCA4NCwgNzksIDgyLCAxMjgsIDc5LCA4MCwgNjksIDgyLCAKLSAgICA2NSwgODQsIDc5LCAyMTAsIDc5LCA4MCwgNjksIDgyLCA2NSwgODQsIDczLCA3OCwgMTk5LCA3OSwgODAsIDY5LCA3OCwgNzMsIAotICAgIDc4LCAxOTksIDc5LCA4MCwgNjksIDc4LCA0NSwgODAsIDEyOCwgNzksIDgwLCA2OSwgNzgsIDQ1LCA3OSwgODUsIDg0LCA3NiwgCi0gICAgNzMsIDc4LCA2OSwgMTk2LCA3OSwgODAsIDY5LCA3OCwgNDUsIDcyLCA2OSwgNjUsIDY4LCA2OSwgMTk2LCA3OSwgODAsIDY5LCAKLSAgICA3OCwgNDUsIDY3LCA3MywgODIsIDY3LCA4NSwgNzMsIDg0LCA0NSwgNzksIDg1LCA4NCwgODAsIDg1LCAyMTIsIDc5LCA3OSwgCi0gICAgOTAsIDY5LCAxMjgsIDc5LCA3OSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDc5LCA3OSwgODUsIDEyOCwgNzksIDc5LCAKLSAgICA3NywgODUsIDEyOCwgNzksIDc5LCA2OSwgMTI4LCA3OSwgNzksIDY2LCA3OSwgNzksIDcwLCA3MywgNzYsIDczLCAxMjgsIAotICAgIDc5LCA3OCwgODUsIDEyOCwgNzksIDc4LCA4MywgODUsIDEyOCwgNzksIDc4LCA3OCwgMTI4LCA3OSwgNzgsIDc1LCA2NSwgCi0gICAgODIsIDEyOCwgNzksIDc4LCA2OSwgODMsIDY5LCA3NiwgNzAsIDEyOCwgNzksIDc4LCA2OSwgNDUsIDg3LCA2NSwgMjE3LCAKLSAgICA3OSwgNzgsIDY5LCA0NSwgODQsIDcyLCA3MywgODIsIDg0LCA4OSwgMTI4LCA3OSwgNzgsIDY5LCA0NSwgNzYsIDczLCA3OCwgCi0gICAgMTk3LCA3OSwgNzgsIDY3LCA3OSwgNzcsIDczLCA3OCwgMTk5LCA3OSwgNzgsIDY1LCA4MCwgMTI4LCA3OSwgNzcsIDczLCAKLSAgICA4MywgODMsIDczLCA3OSwgMjA2LCA3OSwgNzcsIDczLCA2NywgODIsIDc5LCA3OCwgMTI4LCA3OSwgNzcsIDczLCA2NywgODIsIAotICAgIDc5LCAyMDYsIDc5LCA3NywgNjksIDcxLCA2NSwgMTI4LCA3OSwgNzcsIDY5LCA3MSwgMTkzLCA3OSwgNzcsIDY1LCA3NiwgCi0gICAgNzksIDc4LCAxMjgsIDc5LCA3NiwgNzMsIDg2LCA2OSwgMTI4LCA3OSwgNzYsIDczLCA3MSwgNzksIDIwNiwgNzksIDc2LCAKLSAgICA2OCwgMTI4LCA3OSwgNzUsIDg0LCAyMDcsIDc5LCA3NSwgNjUsIDgyLCA2NSwgMTI4LCA3OSwgNzUsIDY1LCA4MiwgMTkzLCAKLSAgICA3OSwgNzQsIDczLCA2NiwgODcsIDY1LCAyMTcsIDc5LCA3NCwgNjksIDc5LCA3OCwgMTI4LCA3OSwgNzMsIDc2LCAxMjgsIAotICAgIDc5LCA3MiwgNzcsIDEyOCwgNzksIDcyLCAyMDUsIDc5LCA3MSwgODIsIDY5LCAxMjgsIDc5LCA3MSwgNzksIDc4LCA2OSwgCi0gICAgNzUsIDEyOCwgNzksIDcxLCA3OSwgNzgsIDY5LCAyMDMsIDc5LCA3MSwgNzIsIDY1LCAyMDUsIDc5LCA3MCwgNzAsIDczLCAKLSAgICA2NywgNjksIDgyLCAxMjgsIDc5LCA3MCwgNzAsIDczLCA2NywgNjksIDEyOCwgNzksIDcwLCA3MCwgNzMsIDY3LCAxOTcsIAotICAgIDc5LCA3MCwgNzAsIDEyOCwgNzksIDY5LCA4OSwgMTI4LCA3OSwgNjksIDc1LCAxMjgsIDc5LCA2OCwgNjksIDc4LCAxMjgsIAotICAgIDc5LCA2OCwgMTk2LCA3OSwgNjcsIDg0LCA3OSwgODAsIDg1LCA4MywgMTI4LCA3OSwgNjcsIDg0LCA3OSwgNjYsIDY5LCA4MiwgCi0gICAgMTI4LCA3OSwgNjcsIDg0LCA2OSwgMjEyLCA3OSwgNjcsIDIxMCwgNzksIDY3LCA3NiwgNzksIDY3LCA3NSwgMTI4LCA3OSwgCi0gICAgNjcsIDY3LCA3NiwgODUsIDgzLCA3MywgNzksIDc4LCAxMjgsIDc5LCA2NiwgODMsIDg0LCA4MiwgODUsIDY3LCA4NCwgNzMsIAotICAgIDc5LCA3OCwgMTI4LCA3OSwgNjYsIDc5LCA3NiwgMjExLCA3OSwgNjYsIDc5LCAyMDQsIDc5LCA2NiwgNzksIDcwLCA3MywgCi0gICAgNzYsIDczLCAxMjgsIDc5LCA2NiwgNzYsIDczLCA4MSwgODUsIDE5NywgNzksIDY2LCA3NCwgNjksIDY3LCAyMTIsIDc5LCAKLSAgICA2NiwgNjksIDc2LCA4NSwgODMsIDEyOCwgNzksIDY2LCA2OSwgNzYsIDc5LCA4MywgMTI4LCA3OSwgNjYsIDEyOCwgNzksIAotICAgIDY1LCA4OSwgMTI4LCA3OSwgNjUsIDc1LCAxMjgsIDc5LCA2NSwgNjYsIDc5LCA2NSwgNzAsIDczLCA3NiwgNzMsIDEyOCwgCi0gICAgNzksIDE5MywgNzksIDQ4LCA1MywgNDksIDEyOCwgNzksIDQ4LCA1MywgNDgsIDY2LCAxMjgsIDc5LCA0OCwgNTMsIDQ4LCAKLSAgICA2NSwgMTI4LCA3OSwgNDgsIDUzLCA0OCwgMTI4LCA3OSwgNDgsIDUyLCA1NywgMTI4LCA3OSwgNDgsIDUyLCA1NiwgMTI4LCAKLSAgICA3OSwgNDgsIDUyLCA1NSwgMTI4LCA3OSwgNDgsIDUyLCA1NCwgMTI4LCA3OSwgNDgsIDUyLCA1MywgMTI4LCA3OSwgNDgsIAotICAgIDUyLCA1MiwgMTI4LCA3OSwgNDgsIDUyLCA1MSwgMTI4LCA3OSwgNDgsIDUyLCA1MCwgMTI4LCA3OSwgNDgsIDUyLCA0OSwgCi0gICAgMTI4LCA3OSwgNDgsIDUyLCA0OCwgMTI4LCA3OSwgNDgsIDUxLCA1NywgMTI4LCA3OSwgNDgsIDUxLCA1NiwgMTI4LCA3OSwgCi0gICAgNDgsIDUxLCA1NSwgMTI4LCA3OSwgNDgsIDUxLCA1NCwgNjgsIDEyOCwgNzksIDQ4LCA1MSwgNTQsIDY3LCAxMjgsIDc5LCAKLSAgICA0OCwgNTEsIDU0LCA2NiwgMTI4LCA3OSwgNDgsIDUxLCA1NCwgNjUsIDEyOCwgNzksIDQ4LCA1MSwgNTQsIDEyOCwgNzksIAotICAgIDQ4LCA1MSwgNTMsIDEyOCwgNzksIDQ4LCA1MSwgNTIsIDEyOCwgNzksIDQ4LCA1MSwgNTEsIDY1LCAxMjgsIDc5LCA0OCwgCi0gICAgNTEsIDUxLCAxMjgsIDc5LCA0OCwgNTEsIDUwLCAxMjgsIDc5LCA0OCwgNTEsIDQ5LCAxMjgsIDc5LCA0OCwgNTEsIDQ4LCAKLSAgICA2NSwgMTI4LCA3OSwgNDgsIDUxLCA0OCwgMTI4LCA3OSwgNDgsIDUwLCA1NywgNjUsIDEyOCwgNzksIDQ4LCA1MCwgNTcsIAotICAgIDEyOCwgNzksIDQ4LCA1MCwgNTYsIDEyOCwgNzksIDQ4LCA1MCwgNTUsIDEyOCwgNzksIDQ4LCA1MCwgNTQsIDEyOCwgNzksIAotICAgIDQ4LCA1MCwgNTMsIDY1LCAxMjgsIDc5LCA0OCwgNTAsIDUzLCAxMjgsIDc5LCA0OCwgNTAsIDUyLCA2NSwgMTI4LCA3OSwgCi0gICAgNDgsIDUwLCA1MiwgMTI4LCA3OSwgNDgsIDUwLCA1MSwgMTI4LCA3OSwgNDgsIDUwLCA1MCwgMTI4LCA3OSwgNDgsIDUwLCAKLSAgICA0OSwgMTI4LCA3OSwgNDgsIDUwLCA0OCwgNjUsIDEyOCwgNzksIDQ4LCA1MCwgNDgsIDEyOCwgNzksIDQ4LCA0OSwgNTcsIAotICAgIDY1LCAxMjgsIDc5LCA0OCwgNDksIDU3LCAxMjgsIDc5LCA0OCwgNDksIDU2LCAxMjgsIDc5LCA0OCwgNDksIDU1LCAxMjgsIAotICAgIDc5LCA0OCwgNDksIDU0LCAxMjgsIDc5LCA0OCwgNDksIDUzLCAxMjgsIDc5LCA0OCwgNDksIDUyLCAxMjgsIDc5LCA0OCwgCi0gICAgNDksIDUxLCAxMjgsIDc5LCA0OCwgNDksIDUwLCAxMjgsIDc5LCA0OCwgNDksIDQ5LCAxMjgsIDc5LCA0OCwgNDksIDQ4LCAKLSAgICA2NywgMTI4LCA3OSwgNDgsIDQ5LCA0OCwgNjYsIDEyOCwgNzksIDQ4LCA0OSwgNDgsIDY1LCAxMjgsIDc5LCA0OCwgNDksIAotICAgIDQ4LCAxMjgsIDc5LCA0OCwgNDgsIDU3LCAxMjgsIDc5LCA0OCwgNDgsIDU2LCAxMjgsIDc5LCA0OCwgNDgsIDU1LCAxMjgsIAotICAgIDc5LCA0OCwgNDgsIDU0LCA3MCwgMTI4LCA3OSwgNDgsIDQ4LCA1NCwgNjksIDEyOCwgNzksIDQ4LCA0OCwgNTQsIDY4LCAKLSAgICAxMjgsIDc5LCA0OCwgNDgsIDU0LCA2NywgMTI4LCA3OSwgNDgsIDQ4LCA1NCwgNjYsIDEyOCwgNzksIDQ4LCA0OCwgNTQsIAotICAgIDY1LCAxMjgsIDc5LCA0OCwgNDgsIDU0LCAxMjgsIDc5LCA0OCwgNDgsIDUzLCA2NSwgMTI4LCA3OSwgNDgsIDQ4LCA1MywgCi0gICAgMTI4LCA3OSwgNDgsIDQ4LCA1MiwgMTI4LCA3OSwgNDgsIDQ4LCA1MSwgMTI4LCA3OSwgNDgsIDQ4LCA1MCwgMTI4LCA3OSwgCi0gICAgNDgsIDQ4LCA0OSwgNjUsIDEyOCwgNzksIDQ4LCA0OCwgNDksIDEyOCwgNzksIDQ1LCA4OSwgNjksIDEyOCwgNzksIDQ1LCAKLSAgICA3OSwgNDUsIDczLCAxMjgsIDc5LCA0NSwgNjksIDEyOCwgNzgsIDkwLCA4OSwgODgsIDEyOCwgNzgsIDkwLCA4OSwgODQsIAotICAgIDEyOCwgNzgsIDkwLCA4OSwgODIsIDg4LCAxMjgsIDc4LCA5MCwgODksIDgyLCAxMjgsIDc4LCA5MCwgODksIDgwLCAxMjgsIAotICAgIDc4LCA5MCwgODksIDEyOCwgNzgsIDkwLCA4NSwgODgsIDEyOCwgNzgsIDkwLCA4NSwgODIsIDg4LCAxMjgsIDc4LCA5MCwgCi0gICAgODUsIDgyLCAxMjgsIDc4LCA5MCwgODUsIDgxLCAxMjgsIDc4LCA5MCwgODUsIDgwLCAxMjgsIDc4LCA5MCwgODUsIDc5LCAKLSAgICA4OCwgMTI4LCA3OCwgOTAsIDg1LCA3OSwgMTI4LCA3OCwgOTAsIDg1LCAyMDYsIDc4LCA5MCwgODUsIDEyOCwgNzgsIDkwLCAKLSAgICA3OSwgODgsIDEyOCwgNzgsIDkwLCA3OSwgODAsIDEyOCwgNzgsIDkwLCA3MywgODgsIDEyOCwgNzgsIDkwLCA3MywgODQsIAotICAgIDEyOCwgNzgsIDkwLCA3MywgODAsIDEyOCwgNzgsIDkwLCA3MywgNjksIDg4LCAxMjgsIDc4LCA5MCwgNzMsIDY5LCA4MCwgCi0gICAgMTI4LCA3OCwgOTAsIDczLCA2OSwgMTI4LCA3OCwgOTAsIDczLCAxMjgsIDc4LCA5MCwgNjksIDg4LCAxMjgsIDc4LCA5MCwgCi0gICAgNjksIDg1LCA3NywgMTI4LCA3OCwgOTAsIDY5LCAxMjgsIDc4LCA5MCwgNjUsIDg4LCAxMjgsIDc4LCA5MCwgNjUsIDg0LCAKLSAgICAxMjgsIDc4LCA5MCwgNjUsIDgxLCAxMjgsIDc4LCA5MCwgNjUsIDgwLCAxMjgsIDc4LCA5MCwgNjUsIDEyOCwgNzgsIDkwLCAKLSAgICAxOTMsIDc4LCA4OSwgODcsIDY1LCAxMjgsIDc4LCA4OSwgODUsIDg4LCAxMjgsIDc4LCA4OSwgODUsIDg1LCAxMjgsIDc4LCAKLSAgICA4OSwgODUsIDg0LCAxMjgsIDc4LCA4OSwgODUsIDgwLCAxMjgsIDc4LCA4OSwgODUsIDc5LCA4OCwgMTI4LCA3OCwgODksIAotICAgIDg1LCA3OSwgODAsIDEyOCwgNzgsIDg5LCA4NSwgNzksIDEyOCwgNzgsIDg5LCA4NSwgNjksIDEyOCwgNzgsIDg5LCA4NSwgCi0gICAgMTI4LCA3OCwgODksIDc5LCA4OCwgMTI4LCA3OCwgODksIDc5LCA4NCwgMTI4LCA3OCwgODksIDc5LCA4MCwgMTI4LCA3OCwgCi0gICAgODksIDc5LCA3OSwgMTI4LCA3OCwgODksIDc5LCA2NSwgMTI4LCA3OCwgODksIDc5LCAxMjgsIDc4LCA4OSwgNzQsIDY1LCAKLSAgICAxMjgsIDc4LCA4OSwgNzMsIDg4LCAxMjgsIDc4LCA4OSwgNzMsIDg0LCAxMjgsIDc4LCA4OSwgNzMsIDIxMiwgNzgsIDg5LCAKLSAgICA3MywgMjExLCA3OCwgODksIDczLCAyMTAsIDc4LCA4OSwgNzMsIDgwLCAxMjgsIDc4LCA4OSwgNzMsIDc4LCA0NSwgNjgsIAotICAgIDc5LCAxMjgsIDc4LCA4OSwgNzMsIDczLCAxMjgsIDc4LCA4OSwgNzMsIDY5LCA4OCwgMTI4LCA3OCwgODksIDczLCA2OSwgCi0gICAgODQsIDEyOCwgNzgsIDg5LCA3MywgNjksIDgwLCAxMjgsIDc4LCA4OSwgNzMsIDY5LCAxMjgsIDc4LCA4OSwgNzMsIDEyOCwgCi0gICAgNzgsIDg5LCAyMDEsIDc4LCA4OSwgNzIsIDY1LCAxMjgsIDc4LCA4OSwgNjksIDg0LCAxMjgsIDc4LCA4OSwgNjksIDIxMiwgCi0gICAgNzgsIDg5LCA2OSwgNzIsIDEyOCwgNzgsIDg5LCA2OSwgMjAwLCA3OCwgODksIDY5LCA2OSwgMTI4LCA3OCwgODksIDY5LCAKLSAgICAxMjgsIDc4LCA4OSwgMTk2LCA3OCwgODksIDY3LCA2NSwgMTI4LCA3OCwgODksIDY1LCA4NSwgMTI4LCA3OCwgODksIDY1LCAKLSAgICA3MywgMTI4LCA3OCwgODksIDY1LCA3MiwgMTI4LCA3OCwgODksIDY1LCA2OSwgNzcsIDY1LCA2OSwgMTI4LCA3OCwgODksIAotICAgIDY1LCA2NSwgMTI4LCA3OCwgODcsIDc5LCA3OSwgMTI4LCA3OCwgODcsIDc5LCAxMjgsIDc4LCA4NywgNzMsIDczLCAxMjgsIAotICAgIDc4LCA4NywgNzMsIDEyOCwgNzgsIDg3LCA2OSwgMTI4LCA3OCwgODcsIDY1LCA2NSwgMTI4LCA3OCwgODcsIDY1LCAxMjgsIAotICAgIDc4LCA4NywgMTI4LCA3OCwgODYsIDEyOCwgNzgsIDg1LCA4OCwgMTI4LCA3OCwgODUsIDg1LCA3OCwgMTI4LCA3OCwgODUsIAotICAgIDg1LCAxMjgsIDc4LCA4NSwgODQsIDczLCA3NiwgNzYsIDg1LCAxMjgsIDc4LCA4NSwgODQsIDEyOCwgNzgsIDg1LCAyMTIsIAotICAgIDc4LCA4NSwgODIsIDg4LCAxMjgsIDc4LCA4NSwgODIsIDEyOCwgNzgsIDg1LCA4MCwgMTI4LCA3OCwgODUsIDc5LCA4OCwgCi0gICAgMTI4LCA3OCwgODUsIDc5LCA4MCwgMTI4LCA3OCwgODUsIDc5LCAxMjgsIDc4LCA4NSwgNzgsIDg1LCA5MCwgMTI4LCA3OCwgCi0gICAgODUsIDc4LCA4NSwgMjE4LCA3OCwgODUsIDc4LCA3MSwgMTI4LCA3OCwgODUsIDc4LCA2NSwgODYsIDg1LCAyMTIsIDc4LCAKLSAgICA4NSwgNzgsIDY1LCA4NiwgNzMsIDIwMywgNzgsIDg1LCA3OCwgMTI4LCA3OCwgODUsIDIwNiwgNzgsIDg1LCA3NywgNjksIAotICAgIDgyLCAyMDcsIDc4LCA4NSwgNzcsIDY5LCA4MiwgNjUsIDg0LCA3OSwgMjEwLCA3OCwgODUsIDc3LCA2OSwgODIsIDY1LCAKLSAgICAyMDQsIDc4LCA4NSwgNzcsIDY2LCA2OSwgODIsIDgzLCAxMjgsIDc4LCA4NSwgNzcsIDY2LCA2OSwgODIsIDEyOCwgNzgsIAotICAgIDg1LCA3NywgMTI4LCA3OCwgODUsIDc2LCA3NiwgMTI4LCA3OCwgODUsIDc2LCAyMDQsIDc4LCA4NSwgNzYsIDEyOCwgNzgsIAotICAgIDg1LCA3NSwgODQsIDY1LCAxMjgsIDc4LCA4NSwgNjksIDc4LCA3MSwgMTI4LCA3OCwgODUsIDY5LCAxMjgsIDc4LCA4NSwgCi0gICAgNjYsIDczLCA2NSwgMjA2LCA3OCwgODUsIDY1LCA2OSwgMTI4LCA3OCwgODUsIDQ5LCA0OSwgMTI4LCA3OCwgODUsIDQ4LCAKLSAgICA1MCwgNTAsIDY1LCAxMjgsIDc4LCA4NSwgNDgsIDUwLCA1MCwgMTI4LCA3OCwgODUsIDQ4LCA1MCwgNDksIDEyOCwgNzgsIAotICAgIDg1LCA0OCwgNTAsIDQ4LCAxMjgsIDc4LCA4NSwgNDgsIDQ5LCA1NywgMTI4LCA3OCwgODUsIDQ4LCA0OSwgNTYsIDY1LCAKLSAgICAxMjgsIDc4LCA4NSwgNDgsIDQ5LCA1NiwgMTI4LCA3OCwgODUsIDQ4LCA0OSwgNTUsIDEyOCwgNzgsIDg1LCA0OCwgNDksIAotICAgIDU0LCAxMjgsIDc4LCA4NSwgNDgsIDQ5LCA1MywgMTI4LCA3OCwgODUsIDQ4LCA0OSwgNTIsIDEyOCwgNzgsIDg1LCA0OCwgCi0gICAgNDksIDUxLCAxMjgsIDc4LCA4NSwgNDgsIDQ5LCA1MCwgMTI4LCA3OCwgODUsIDQ4LCA0OSwgNDksIDY1LCAxMjgsIDc4LCAKLSAgICA4NSwgNDgsIDQ5LCA0OSwgMTI4LCA3OCwgODUsIDQ4LCA0OSwgNDgsIDY1LCAxMjgsIDc4LCA4NSwgNDgsIDQ5LCA0OCwgCi0gICAgMTI4LCA3OCwgODUsIDQ4LCA0OCwgNTcsIDEyOCwgNzgsIDg1LCA0OCwgNDgsIDU2LCAxMjgsIDc4LCA4NSwgNDgsIDQ4LCAKLSAgICA1NSwgMTI4LCA3OCwgODUsIDQ4LCA0OCwgNTQsIDEyOCwgNzgsIDg1LCA0OCwgNDgsIDUzLCAxMjgsIDc4LCA4NSwgNDgsIAotICAgIDQ4LCA1MiwgMTI4LCA3OCwgODUsIDQ4LCA0OCwgNTEsIDEyOCwgNzgsIDg1LCA0OCwgNDgsIDUwLCAxMjgsIDc4LCA4NSwgCi0gICAgNDgsIDQ4LCA0OSwgMTI4LCA3OCwgODQsIDg1LCA4NSwgMTI4LCA3OCwgODQsIDg1LCA3NywgMTI4LCA3OCwgODQsIDIxMywgCi0gICAgNzgsIDg0LCA3OSwgODEsIDgwLCA2OSwgNzgsIDEyOCwgNzgsIDg0LCA3MywgNjksIDE5NywgNzgsIDg0LCA2OSwgODUsIDc4LCAKLSAgICA3MSwgNjYsIDY1LCAxMjgsIDc4LCA4NCwgNjksIDg1LCA3NywgMTI4LCA3OCwgODQsIDY5LCA3OCwgMTI4LCA3OCwgODQsIAotICAgIDY5LCA2OSwgMTI4LCA3OCwgODQsIDY1LCA4MCwgMTI4LCA3OCwgODQsIDY1LCAyMDgsIDc4LCA4NCwgNjUsIDY1LCAxMjgsIAotICAgIDc4LCA4MywgODUsIDc5LCAyMTIsIDc4LCA4MywgODUsIDc4LCAxMjgsIDc4LCA4MywgODUsIDc3LCAxMjgsIDc4LCA4MywgCi0gICAgNzksIDc3LCAxMjgsIDc4LCA4MywgNzMsIDY5LCA2OSwgODQsIDEyOCwgNzgsIDgzLCA3MywgNjksIDY5LCA4MCwgMTI4LCAKLSAgICA3OCwgODMsIDczLCA2OSwgNjksIDEyOCwgNzgsIDgzLCA3MiwgODUsIDg0LCAxMjgsIDc4LCA4MywgNzIsIDg1LCAyMTIsIAotICAgIDc4LCA4MywgNzIsIDg1LCA3OSwgODAsIDEyOCwgNzgsIDgzLCA3MiwgODUsIDY5LCAxMjgsIDc4LCA4MywgNzIsIDczLCA2OSwgCi0gICAgNjksIDEyOCwgNzgsIDgzLCA3MiwgNjksIDY5LCAxMjgsIDc4LCA4MywgNzIsIDY1LCA4MSwgMTI4LCA3OCwgODMsIDcyLCAKLSAgICA2NSwgMTI4LCA3OCwgODMsIDY5LCA4NSwgNjUsIDY5LCA3OCwgMTI4LCA3OCwgODMsIDY5LCA3OCwgMTI4LCA3OCwgODMsIAotICAgIDY1LCAxMjgsIDc4LCA4MiwgODksIDg4LCAxMjgsIDc4LCA4MiwgODksIDg0LCAxMjgsIDc4LCA4MiwgODksIDgyLCA4OCwgCi0gICAgMTI4LCA3OCwgODIsIDg5LCA4MiwgMTI4LCA3OCwgODIsIDg5LCA4MCwgMTI4LCA3OCwgODIsIDg5LCAxMjgsIDc4LCA4MiwgCi0gICAgODUsIDg4LCAxMjgsIDc4LCA4MiwgODUsIDg0LCAxMjgsIDc4LCA4MiwgODUsIDgyLCA4OCwgMTI4LCA3OCwgODIsIDg1LCAKLSAgICA4MiwgMTI4LCA3OCwgODIsIDg1LCA4MCwgMTI4LCA3OCwgODIsIDg1LCAxMjgsIDc4LCA4MiwgNzksIDg4LCAxMjgsIDc4LCAKLSAgICA4MiwgNzksIDgwLCAxMjgsIDc4LCA4MiwgNzksIDEyOCwgNzgsIDgyLCA2OSwgODgsIDEyOCwgNzgsIDgyLCA2OSwgODQsIAotICAgIDEyOCwgNzgsIDgyLCA2OSwgODAsIDEyOCwgNzgsIDgyLCA2OSwgMTI4LCA3OCwgODIsIDY1LCA4OCwgMTI4LCA3OCwgODIsIAotICAgIDY1LCA4NCwgMTI4LCA3OCwgODIsIDY1LCA4MCwgMTI4LCA3OCwgODIsIDY1LCAxMjgsIDc4LCA3OSwgODksIDEyOCwgNzgsIAotICAgIDc5LCA4OCwgMTI4LCA3OCwgNzksIDg2LCA2OSwgNzcsIDY2LCA2OSwgODIsIDEyOCwgNzgsIDc5LCA4NCwgODQsIDc5LCAKLSAgICAxMjgsIDc4LCA3OSwgODQsIDY5LCA4MywgMTI4LCA3OCwgNzksIDg0LCA2OSwgNzIsIDY5LCA2NSwgNjgsIDEyOCwgNzgsIAotICAgIDc5LCA4NCwgNjksIDcyLCA2OSwgNjUsIDE5NiwgNzgsIDc5LCA4NCwgNjksIDY2LCA3OSwgNzksIDc1LCAxMjgsIDc4LCA3OSwgCi0gICAgODQsIDY5LCA2NiwgNzksIDc5LCAyMDMsIDc4LCA3OSwgODQsIDY5LCAxMjgsIDc4LCA3OSwgODQsIDE5NywgNzgsIDc5LCAKLSAgICA4NCwgNjcsIDcyLCA2OSwgMTk2LCA3OCwgNzksIDg0LCA2NywgNzIsIDEyOCwgNzgsIDc5LCA4NCwgMTI4LCA3OCwgNzksIAotICAgIDIxMiwgNzgsIDc5LCA4MywgNjksIDEyOCwgNzgsIDc5LCA4MiwgODQsIDcyLCA4NywgNjksIDgzLCAyMTIsIDc4LCA3OSwgCi0gICAgODIsIDg0LCA3MiwgNjksIDgyLCAyMDYsIDc4LCA3OSwgODIsIDg0LCAyMDAsIDc4LCA3OSwgODIsIDc3LCA2NSwgMjA0LCAKLSAgICA3OCwgNzksIDIxMCwgNzgsIDc5LCA4MCwgMTI4LCA3OCwgNzksIDc5LCA3OCwgODUsIDEyOCwgNzgsIDc5LCA3OSwgMTI4LCAKLSAgICA3OCwgNzksIDc4LCA3MCwgNzksIDgyLCA3NSwgNzMsIDc4LCA3MSwgMTI4LCA3OCwgNzksIDc4LCA0NSwgODAsIDc5LCA4NCwgCi0gICAgNjUsIDY2LCA3NiwgMTk3LCA3OCwgNzksIDc4LCA0NSwgNzQsIDc5LCA3MywgNzgsIDY5LCA4MiwgMTI4LCA3OCwgNzksIDc4LCAKLSAgICA0NSwgNjYsIDgyLCA2OSwgNjUsIDc1LCA3MywgNzgsIDE5OSwgNzgsIDc5LCA3NywgNzMsIDc4LCA2NSwgMjA0LCA3OCwgNzksIAotICAgIDc1LCA3MiwgODUsIDc1LCAxMjgsIDc4LCA3OSwgNjgsIDY5LCAxMjgsIDc4LCA3OSwgNjUsIDEyOCwgNzgsIDc5LCA0NSwgCi0gICAgNjYsIDgyLCA2OSwgNjUsIDIwMywgNzgsIDc4LCA4NSwgODUsIDEyOCwgNzgsIDc4LCA4NSwgMTI4LCA3OCwgNzgsIDc5LCAKLSAgICA3OSwgMTI4LCA3OCwgNzgsIDc5LCAxMjgsIDc4LCA3OCwgNzgsIDg1LCA4NSwgMTI4LCA3OCwgNzgsIDc4LCA4NSwgMTI4LCAKLSAgICA3OCwgNzgsIDc4LCA3OSwgNzksIDEyOCwgNzgsIDc4LCA3OCwgNzksIDEyOCwgNzgsIDc4LCA3OCwgNzMsIDczLCAxMjgsIAotICAgIDc4LCA3OCwgNzgsIDczLCAxMjgsIDc4LCA3OCwgNzgsIDY5LCA2OSwgMTI4LCA3OCwgNzgsIDc4LCA2OSwgMTI4LCA3OCwgCi0gICAgNzgsIDc4LCA2NSwgODUsIDEyOCwgNzgsIDc4LCA3OCwgNjUsIDczLCAxMjgsIDc4LCA3OCwgNzgsIDY1LCA2NSwgMTI4LCAKLSAgICA3OCwgNzgsIDc4LCA2NSwgMTI4LCA3OCwgNzgsIDc4LCAxMjgsIDc4LCA3OCwgNzIsIDY1LCAxMjgsIDc4LCA3OCwgNzEsIAotICAgIDc5LCA3OSwgMTI4LCA3OCwgNzgsIDcxLCA3OSwgMTI4LCA3OCwgNzgsIDcxLCA3MywgNzMsIDEyOCwgNzgsIDc4LCA3MSwgCi0gICAgNzMsIDEyOCwgNzgsIDc4LCA3MSwgNjUsIDY1LCAxMjgsIDc4LCA3OCwgNzEsIDY1LCAxMjgsIDc4LCA3OCwgNzEsIDEyOCwgCi0gICAgNzgsIDc4LCA2NiwgODMsIDgwLCAxMjgsIDc4LCA3NywgMTI4LCA3OCwgNzYsIDQ4LCA1MCwgNDgsIDEyOCwgNzgsIDc2LCAKLSAgICA0OCwgNDksIDU3LCAxMjgsIDc4LCA3NiwgNDgsIDQ5LCA1NiwgMTI4LCA3OCwgNzYsIDQ4LCA0OSwgNTUsIDY1LCAxMjgsIAotICAgIDc4LCA3NiwgNDgsIDQ5LCA1NSwgMTI4LCA3OCwgNzYsIDQ4LCA0OSwgNTQsIDEyOCwgNzgsIDc2LCA0OCwgNDksIDUzLCAKLSAgICAxMjgsIDc4LCA3NiwgNDgsIDQ5LCA1MiwgMTI4LCA3OCwgNzYsIDQ4LCA0OSwgNTEsIDEyOCwgNzgsIDc2LCA0OCwgNDksIAotICAgIDUwLCAxMjgsIDc4LCA3NiwgNDgsIDQ5LCA0OSwgMTI4LCA3OCwgNzYsIDQ4LCA0OSwgNDgsIDEyOCwgNzgsIDc2LCA0OCwgCi0gICAgNDgsIDU3LCAxMjgsIDc4LCA3NiwgNDgsIDQ4LCA1NiwgMTI4LCA3OCwgNzYsIDQ4LCA0OCwgNTUsIDEyOCwgNzgsIDc2LCAKLSAgICA0OCwgNDgsIDU0LCAxMjgsIDc4LCA3NiwgNDgsIDQ4LCA1MywgNjUsIDEyOCwgNzgsIDc2LCA0OCwgNDgsIDUzLCAxMjgsIAotICAgIDc4LCA3NiwgNDgsIDQ4LCA1MiwgMTI4LCA3OCwgNzYsIDQ4LCA0OCwgNTEsIDEyOCwgNzgsIDc2LCA0OCwgNDgsIDUwLCAKLSAgICAxMjgsIDc4LCA3NiwgNDgsIDQ4LCA0OSwgMTI4LCA3OCwgNzYsIDEyOCwgNzgsIDc1LCA3OSwgNzcsIDEyOCwgNzgsIDc1LCAKLSAgICAyMDcsIDc4LCA3NSwgNzMsIDc4LCA2OCwgNzMsIDEyOCwgNzgsIDc1LCA2NSwgNjUsIDgyLCA2NSwgNjksIDEyOCwgNzgsIAotICAgIDc0LCA4OSwgODgsIDEyOCwgNzgsIDc0LCA4OSwgODQsIDEyOCwgNzgsIDc0LCA4OSwgODIsIDg4LCAxMjgsIDc4LCA3NCwgCi0gICAgODksIDgyLCAxMjgsIDc4LCA3NCwgODksIDgwLCAxMjgsIDc4LCA3NCwgODksIDEyOCwgNzgsIDc0LCA4NSwgODgsIDEyOCwgCi0gICAgNzgsIDc0LCA4NSwgODIsIDg4LCAxMjgsIDc4LCA3NCwgODUsIDgyLCAxMjgsIDc4LCA3NCwgODUsIDgxLCA2NSwgMTI4LCAKLSAgICA3OCwgNzQsIDg1LCA4MCwgMTI4LCA3OCwgNzQsIDg1LCA3OSwgODgsIDEyOCwgNzgsIDc0LCA4NSwgNzksIDEyOCwgNzgsIAotICAgIDc0LCA4NSwgNjksIDgxLCAxMjgsIDc4LCA3NCwgODUsIDY1LCA2OSwgMTI4LCA3OCwgNzQsIDg1LCAxMjgsIDc4LCA3NCwgCi0gICAgNzksIDg4LCAxMjgsIDc4LCA3NCwgNzksIDg0LCAxMjgsIDc4LCA3NCwgNzksIDgwLCAxMjgsIDc4LCA3NCwgNzksIDc5LCAKLSAgICAxMjgsIDc4LCA3NCwgNzksIDEyOCwgNzgsIDc0LCA3MywgODgsIDEyOCwgNzgsIDc0LCA3MywgODQsIDEyOCwgNzgsIDc0LCAKLSAgICA3MywgODAsIDEyOCwgNzgsIDc0LCA3MywgNjksIDg4LCAxMjgsIDc4LCA3NCwgNzMsIDY5LCA4NCwgMTI4LCA3OCwgNzQsIAotICAgIDczLCA2OSwgODAsIDEyOCwgNzgsIDc0LCA3MywgNjksIDY5LCAxMjgsIDc4LCA3NCwgNzMsIDY5LCAxMjgsIDc4LCA3NCwgCi0gICAgNzMsIDEyOCwgNzgsIDc0LCAyMDEsIDc4LCA3NCwgNjksIDg1LCA4OCwgMTI4LCA3OCwgNzQsIDY5LCA4NSwgODQsIDEyOCwgCi0gICAgNzgsIDc0LCA2OSwgODUsIDY1LCA2OSwgNzgsIDY1LCAxMjgsIDc4LCA3NCwgNjksIDg1LCA2NSwgNjksIDc3LCAxMjgsIDc4LCAKLSAgICA3NCwgNjksIDY5LCA2OSwgNjksIDEyOCwgNzgsIDc0LCA2OSwgNjksIDEyOCwgNzgsIDc0LCA2OSwgMTk3LCA3OCwgNzQsIAotICAgIDY5LCAxMjgsIDc4LCA3NCwgNjUsIDgxLCAxMjgsIDc4LCA3NCwgNjUsIDgwLCAxMjgsIDc4LCA3NCwgNjUsIDY5LCA3NywgCi0gICAgNzYsIDczLCAxMjgsIDc4LCA3NCwgNjUsIDY5LCA3NywgMTI4LCA3OCwgNzQsIDY1LCA2NSwgMTI4LCA3OCwgNzMsIDg4LCAKLSAgICAxMjgsIDc4LCA3MywgODQsIDgyLCA2OSwgMTI4LCA3OCwgNzMsIDgzLCA2NSwgNzEsIDEyOCwgNzgsIDczLCA4MiwgODUsIAotICAgIDcxLCA4NSwgMTI4LCA3OCwgNzMsIDgwLCAxMjgsIDc4LCA3MywgNzgsIDg0LCA3MiwgMTI4LCA3OCwgNzMsIDc4LCA2OSwgCi0gICAgODQsIDg5LCAxMjgsIDc4LCA3MywgNzgsIDY5LCA4NCwgMjE3LCA3OCwgNzMsIDc4LCA2OSwgODQsIDY5LCA2OSwgNzgsIAotICAgIDEyOCwgNzgsIDczLCA3OCwgNjksIDg0LCA2OSwgNjksIDIwNiwgNzgsIDczLCA3OCwgNjksIDQ1LCA4NCwgNzIsIDczLCA4MiwgCi0gICAgODQsIDg5LCAxMjgsIDc4LCA3MywgNzgsIDE5NywgNzgsIDczLCA3OCwgNjgsIDY1LCA1MCwgMTI4LCA3OCwgNzMsIDc4LCAKLSAgICA2OCwgNjUsIDE3OCwgNzgsIDczLCA3NywgMTI4LCA3OCwgNzMsIDIwNSwgNzgsIDczLCA3NSwgNzIsIDY1LCA3MiwgNzMsIAotICAgIDg0LCAxMjgsIDc4LCA3MywgNzUsIDY1LCA3MiwgNzMsIDg0LCAxMjgsIDc4LCA3MywgNzUsIDY1LCAxMjgsIDc4LCA3MywgCi0gICAgNzIsIDgzLCA3MiwgODYsIDY1LCA4MywgNjUsIDEyOCwgNzgsIDczLCA3MSwgNzMsIDY4LCA2NSwgNzcsIDczLCA3OCwgMTI4LCAKLSAgICA3OCwgNzMsIDcxLCA3MywgNjgsIDY1LCA2OSwgODMsIDcyLCAxMjgsIDc4LCA3MywgNzEsIDcyLCA4NCwgMTI4LCA3OCwgNzMsIAotICAgIDcxLCA3MiwgMjEyLCA3OCwgNzMsIDcxLCA3MSwgNjUsIDcyLCA3MywgODQsIDY1LCAxMjgsIDc4LCA3MywgNjksIDg4LCAKLSAgICAxMjgsIDc4LCA3MywgNjksIDg1LCA3OCwgNDUsIDg0LCA3MywgNzUsIDY5LCA4NSwgODQsIDEyOCwgNzgsIDczLCA2OSwgODUsIAotICAgIDc4LCA0NSwgODQsIDcyLCA3MywgNjksIDg1LCA4NCwgNzIsIDEyOCwgNzgsIDczLCA2OSwgODUsIDc4LCA0NSwgODMsIDczLCAKLSAgICA3OSwgODMsIDEyOCwgNzgsIDczLCA2OSwgODUsIDc4LCA0NSwgODIsIDczLCA2OSwgODUsIDc2LCAxMjgsIDc4LCA3MywgNjksIAotICAgIDg1LCA3OCwgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCA3OCwgNzMsIDY5LCA4NSwgNzgsIDQ1LCA4MCwgNjUsIDc4LCAKLSAgICA4MywgNzMsIDc5LCA4MywgMTI4LCA3OCwgNzMsIDY5LCA4NSwgNzgsIDQ1LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCAxMjgsIAotICAgIDc4LCA3MywgNjksIDg1LCA3OCwgNDUsIDcyLCA3MywgNjksIDg1LCA3MiwgMTI4LCA3OCwgNzMsIDY5LCA4NSwgNzgsIDQ1LCAKLSAgICA2NywgNzMsIDY5LCA4NSwgNjcsIDEyOCwgNzgsIDczLCA2OSwgODUsIDc4LCA0NSwgNjcsIDcyLCA3MywgNjksIDg1LCA2NywgCi0gICAgNzIsIDEyOCwgNzgsIDczLCA2OSwgODUsIDIwNiwgNzgsIDczLCA2OSwgODAsIDEyOCwgNzgsIDczLCA2OSwgMTI4LCA3OCwgCi0gICAgNzMsIDY2LCAxMjgsIDc4LCA3MywgNjUsIDEyOCwgNzgsIDczLCA1MCwgMTI4LCA3OCwgNzIsIDg1LCA2OSwgMTI4LCA3OCwgCi0gICAgNzIsIDc0LCA2NSwgMTI4LCA3OCwgNzIsIDEyOCwgNzgsIDcxLCA4OSwgNjksIDEyOCwgNzgsIDcxLCA4NiwgNjksIDEyOCwgCi0gICAgNzgsIDcxLCA4NSwgODUsIDEyOCwgNzgsIDcxLCA4NSwgNzksIDg4LCAxMjgsIDc4LCA3MSwgODUsIDc5LCA4NCwgMTI4LCAKLSAgICA3OCwgNzEsIDg1LCA3OSwgMTI4LCA3OCwgNzEsIDg1LCA2NSwgNjksIDg0LCAxMjgsIDc4LCA3MSwgODUsIDY1LCA2OSwgCi0gICAgMTI4LCA3OCwgNzEsIDc5LCA4OCwgMTI4LCA3OCwgNzEsIDc5LCA4NSwgMTI4LCA3OCwgNzEsIDc5LCAyMTMsIDc4LCA3MSwgCi0gICAgNzksIDg0LCAxMjgsIDc4LCA3MSwgNzksIDgxLCAxMjgsIDc4LCA3MSwgNzksIDgwLCAxMjgsIDc4LCA3MSwgNzksIDc4LCAKLSAgICAxMjgsIDc4LCA3MSwgNzksIDc3LCAxMjgsIDc4LCA3MSwgNzksIDY5LCA3MiwgMTI4LCA3OCwgNzEsIDc5LCA2OSwgMjAwLCAKLSAgICA3OCwgNzEsIDIwNywgNzgsIDcxLCA3NSwgODksIDY5LCA2OSwgMTI4LCA3OCwgNzEsIDc1LCA4NywgNjUsIDY5LCA3OCwgCi0gICAgMTI4LCA3OCwgNzEsIDc1LCA4NSwgODAsIDEyOCwgNzgsIDcxLCA3NSwgODUsIDc4LCAxMjgsIDc4LCA3MSwgNzUsIDg1LCAKLSAgICA3NywgMTI4LCA3OCwgNzEsIDc1LCA4NSwgNjksIDc4LCA5MCwgNjksIDg1LCA3NywgMTI4LCA3OCwgNzEsIDc1LCA4NSwgCi0gICAgMTk3LCA3OCwgNzEsIDc1LCA3MywgNzgsIDY4LCAyMDEsIDc4LCA3MSwgNzUsIDczLCA2OSwgNjksIDEyOCwgNzgsIDcxLCAKLSAgICA3NSwgNjksIDg1LCA4OCwgMTI4LCA3OCwgNzEsIDc1LCA2OSwgODUsIDgyLCA3MywgMTI4LCA3OCwgNzEsIDc1LCA2OSwgODUsIAotICAgIDY1LCA2OSwgODEsIDEyOCwgNzgsIDcxLCA3NSwgNjksIDg1LCA2NSwgNjksIDc3LCAxMjgsIDc4LCA3MSwgNzUsIDY1LCA4MSwgCi0gICAgMTI4LCA3OCwgNzEsIDc1LCA2NSwgODAsIDEyOCwgNzgsIDcxLCA3NSwgNjUsIDY1LCA3NywgNzMsIDEyOCwgNzgsIDcxLCAKLSAgICA3NSwgNjUsIDEyOCwgNzgsIDcxLCA3MywgNjksIDg4LCAxMjgsIDc4LCA3MSwgNzMsIDY5LCA4MCwgMTI4LCA3OCwgNzEsIAotICAgIDczLCA2OSwgMTI4LCA3OCwgNzEsIDcyLCA2NSwgMTI4LCA3OCwgNzEsIDcxLCA4NywgNjUsIDY5LCA3OCwgMTI4LCA3OCwgCi0gICAgNzEsIDcxLCA4NSwgODIsIDY1LCA2OSwgMTI4LCA3OCwgNzEsIDcxLCA4NSwgODAsIDEyOCwgNzgsIDcxLCA3MSwgODUsIDc5LCAKLSAgICA4MSwgMTI4LCA3OCwgNzEsIDcxLCA4NSwgNzksIDIwOSwgNzgsIDcxLCA3MSwgODUsIDc5LCA3OCwgMTI4LCA3OCwgNzEsIAotICAgIDcxLCA4NSwgNzksIDc3LCAxMjgsIDc4LCA3MSwgNzEsIDg1LCA3NywgMTI4LCA3OCwgNzEsIDcxLCA4NSwgNjksIDY5LCA4NCwgCi0gICAgMTI4LCA3OCwgNzEsIDcxLCA4NSwgNjUsIDY5LCA4MywgNzIsIDY1LCAxOTcsIDc4LCA3MSwgNzEsIDg1LCA2NSwgNjksIAotICAgIDIwNiwgNzgsIDcxLCA3MSwgODUsIDEyOCwgNzgsIDcxLCA3MSwgNzksIDc5LCAxMjgsIDc4LCA3MSwgNzEsIDc5LCAxMjgsIAotICAgIDc4LCA3MSwgNzEsIDczLCAxMjgsIDc4LCA3MSwgNzEsIDY5LCA4NSwgODgsIDEyOCwgNzgsIDcxLCA3MSwgNjksIDg1LCA2NSwgCi0gICAgNjksIDg0LCAxMjgsIDc4LCA3MSwgNzEsIDY5LCA4NSwgNjUsIDY5LCAxMjgsIDc4LCA3MSwgNzEsIDY5LCAyMTMsIDc4LCAKLSAgICA3MSwgNzEsIDY5LCA3OCwgMTI4LCA3OCwgNzEsIDcxLCA2OSwgNjksIDg0LCAxMjgsIDc4LCA3MSwgNzEsIDY5LCA2OSwgNjksIAotICAgIDY5LCAxMjgsIDc4LCA3MSwgNzEsIDY5LCA2OSwgMTI4LCA3OCwgNzEsIDcxLCA2OSwgMTI4LCA3OCwgNzEsIDcxLCA2NSwgCi0gICAgODAsIDEyOCwgNzgsIDcxLCA3MSwgNjUsIDY1LCA3NywgNjUsIDY5LCAxMjgsIDc4LCA3MSwgNzEsIDY1LCA2NSwgNzcsIAotICAgIDEyOCwgNzgsIDcxLCA3MSwgMTI4LCA3OCwgNzEsIDY5LCA4OCwgMTI4LCA3OCwgNzEsIDY5LCA4NSwgODIsIDY5LCA4NSwgCi0gICAgODQsIDEyOCwgNzgsIDcxLCA2OSwgODAsIDEyOCwgNzgsIDcxLCA2OSwgNzgsIDEyOCwgNzgsIDcxLCA2OSwgNjksIDEyOCwgCi0gICAgNzgsIDcxLCA2OSwgNjUsIDY4LCA2NSwgNzYsIDEyOCwgNzgsIDcxLCA2NSwgODgsIDEyOCwgNzgsIDcxLCA2NSwgODUsIAotICAgIDEyOCwgNzgsIDcxLCA2NSwgODQsIDEyOCwgNzgsIDcxLCA2NSwgMjExLCA3OCwgNzEsIDY1LCA4MSwgMTI4LCA3OCwgNzEsIAotICAgIDY1LCA4MCwgMTI4LCA3OCwgNzEsIDY1LCA3OCwgNzEsIDg1LCAxMjgsIDc4LCA3MSwgNjUsIDc4LCAxMjgsIDc4LCA3MSwgCi0gICAgNjUsIDczLCAxMjgsIDc4LCA3MSwgNjUsIDcyLCAxMjgsIDc4LCA3MSwgNjUsIDY1LCA3MywgMTI4LCA3OCwgNzEsIDE5MywgCi0gICAgNzgsIDcwLCAxMjgsIDc4LCA2OSwgODgsIDIxMiwgNzgsIDY5LCA4OCwgMTI4LCA3OCwgNjksIDg3LCA4MywgODAsIDY1LCAKLSAgICA4MCwgNjksIDgyLCAxMjgsIDc4LCA2OSwgODcsIDc2LCA3MywgNzgsIDY5LCAxMjgsIDc4LCA2OSwgODcsIDEyOCwgNzgsIAotICAgIDY5LCA4NSwgODQsIDgyLCA2NSwgMjA0LCA3OCwgNjksIDg1LCA4NCwgNjksIDgyLCAxMjgsIDc4LCA2OSwgODQsIDEyOCwgCi0gICAgNzgsIDY5LCAyMTIsIDc4LCA2OSwgODMsIDg0LCA2OSwgMTk2LCA3OCwgNjksIDgxLCA4NSwgNjgsIDY1LCA2NSwgMTI4LCAKLSAgICA3OCwgNjksIDgwLCA4NCwgODUsIDc4LCA2OSwgMTI4LCA3OCwgNjksIDgwLCAxMjgsIDc4LCA2OSwgNzksIDEyOCwgNzgsIAotICAgIDY5LCAyMDcsIDc4LCA2OSwgNzgsIDY1LCA3OCwgNzksIDEyOCwgNzgsIDY5LCA3OCwgMTI4LCA3OCwgNjksIDc2LCAxMjgsIAotICAgIDc4LCA2OSwgNzMsIDg0LCA3MiwgNjksIDIxMCwgNzgsIDY5LCA3MSwgNjUsIDg0LCA3MywgNzksIDIwNiwgNzgsIDY5LCA3MSwgCi0gICAgNjUsIDg0LCA2OSwgMTk2LCA3OCwgNjksIDY3LCA3NSwgODQsIDczLCA2OSwgMTI4LCA3OCwgNjksIDY2LCA2OSwgNzgsIDgzLCAKLSAgICA4NCwgNzMsIDc3LCA3NywgNjksIDEyOCwgNzgsIDY4LCA4NSwgODgsIDEyOCwgNzgsIDY4LCA4NSwgODQsIDEyOCwgNzgsIAotICAgIDY4LCA4NSwgODIsIDg4LCAxMjgsIDc4LCA2OCwgODUsIDgyLCAxMjgsIDc4LCA2OCwgODUsIDgwLCAxMjgsIDc4LCA2OCwgCi0gICAgODUsIDc4LCAxMjgsIDc4LCA2OCwgMjEzLCA3OCwgNjgsIDc5LCA4OCwgMTI4LCA3OCwgNjgsIDc5LCA4NCwgMTI4LCA3OCwgCi0gICAgNjgsIDc5LCA4MCwgMTI4LCA3OCwgNjgsIDc5LCA3OSwgMTI4LCA3OCwgNjgsIDc5LCA3OCwgMTI4LCA3OCwgNjgsIDc5LCAKLSAgICA3NywgNjYsIDg1LCAxMjgsIDc4LCA2OCwgNzksIDc2LCAxOTcsIDc4LCA2OCwgNzMsIDg4LCAxMjgsIDc4LCA2OCwgNzMsIAotICAgIDg0LCAxMjgsIDc4LCA2OCwgNzMsIDgxLCAxMjgsIDc4LCA2OCwgNzMsIDgwLCAxMjgsIDc4LCA2OCwgNzMsIDY5LCA4OCwgCi0gICAgMTI4LCA3OCwgNjgsIDczLCA2OSwgMTI4LCA3OCwgNjgsIDczLCA2OCwgNjUsIDEyOCwgNzgsIDY4LCA3MywgNjUsIDgxLCAKLSAgICAxMjgsIDc4LCA2OCwgNjksIDg4LCAxMjgsIDc4LCA2OCwgNjksIDg1LCA4OCwgMTI4LCA3OCwgNjgsIDY5LCA4NSwgODQsIAotICAgIDEyOCwgNzgsIDY4LCA2OSwgODUsIDY1LCA2OSwgODIsIDY5LCA2OSwgMTI4LCA3OCwgNjgsIDY5LCA4MCwgMTI4LCA3OCwgCi0gICAgNjgsIDY5LCA2OSwgMTI4LCA3OCwgNjgsIDY5LCAxMjgsIDc4LCA2OCwgNjUsIDg4LCAxMjgsIDc4LCA2OCwgNjUsIDg0LCAKLSAgICAxMjgsIDc4LCA2OCwgNjUsIDgwLCAxMjgsIDc4LCA2OCwgNjUsIDc3LCAxMjgsIDc4LCA2OCwgNjUsIDY1LCA3OCwgNzEsIAotICAgIDcxLCA2OSwgODUsIDY1LCA2OSwgODQsIDEyOCwgNzgsIDY4LCA2NSwgNjUsIDEyOCwgNzgsIDY4LCA2NSwgMTkzLCA3OCwgCi0gICAgNjYsIDg5LCA4OCwgMTI4LCA3OCwgNjYsIDg5LCA4NCwgMTI4LCA3OCwgNjYsIDg5LCA4MiwgODgsIDEyOCwgNzgsIDY2LCAKLSAgICA4OSwgODIsIDEyOCwgNzgsIDY2LCA4OSwgODAsIDEyOCwgNzgsIDY2LCA4OSwgMTI4LCA3OCwgNjYsIDg1LCA4OCwgMTI4LCAKLSAgICA3OCwgNjYsIDg1LCA4NCwgMTI4LCA3OCwgNjYsIDg1LCA4MiwgODgsIDEyOCwgNzgsIDY2LCA4NSwgODIsIDEyOCwgNzgsIAotICAgIDY2LCA4NSwgODAsIDEyOCwgNzgsIDY2LCA4NSwgMTI4LCA3OCwgNjYsIDc5LCA4OCwgMTI4LCA3OCwgNjYsIDc5LCA4NCwgCi0gICAgMTI4LCA3OCwgNjYsIDc5LCA4MCwgMTI4LCA3OCwgNjYsIDc5LCAxMjgsIDc4LCA2NiwgNzMsIDg4LCAxMjgsIDc4LCA2NiwgCi0gICAgNzMsIDg0LCAxMjgsIDc4LCA2NiwgNzMsIDgwLCAxMjgsIDc4LCA2NiwgNzMsIDY5LCA4OCwgMTI4LCA3OCwgNjYsIDczLCAKLSAgICA2OSwgODAsIDEyOCwgNzgsIDY2LCA3MywgNjksIDEyOCwgNzgsIDY2LCA3MywgMTI4LCA3OCwgNjYsIDcyLCAxMjgsIDc4LCAKLSAgICA2NiwgNjUsIDg4LCAxMjgsIDc4LCA2NiwgNjUsIDg0LCAxMjgsIDc4LCA2NiwgNjUsIDgwLCAxMjgsIDc4LCA2NiwgNjUsIAotICAgIDEyOCwgNzgsIDY1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzgsIDY1LCA4OSwgMTI4LCA3OCwgNjUsIDg4LCA3MywgCi0gICAgNjUsIDIwNiwgNzgsIDY1LCA4OCwgMTI4LCA3OCwgNjUsIDg1LCA4NCwgNzIsIDgzLCAxMjgsIDc4LCA2NSwgODUsIDY4LCAKLSAgICA3MywgMjE4LCA3OCwgNjUsIDg0LCA4NSwgODIsIDY1LCAyMDQsIDc4LCA2NSwgODQsIDczLCA3OSwgNzgsIDY1LCAyMDQsIAotICAgIDc4LCA2NSwgODMsIDc1LCA2NSwgODAsIDIwMSwgNzgsIDY1LCA4MywgNzIsIDczLCAxMjgsIDc4LCA2NSwgODMsIDY1LCA3NiwgCi0gICAgNzMsIDkwLCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgNzgsIDY1LCA4MywgNjUsIDc2LCA3MywgOTAsIDY1LCA4NCwgNzMsIAotICAgIDc5LCAyMDYsIDc4LCA2NSwgODIsIDgyLCA3OSwgMjE1LCA3OCwgNjUsIDgyLCAxMjgsIDc4LCA2NSwgODEsIDEyOCwgNzgsIAotICAgIDY1LCA3OSwgMjExLCA3OCwgNjUsIDc4LCA4MywgNjUsIDc4LCA2NSwgODEsIDEyOCwgNzgsIDY1LCA3OCwgNzEsIDc3LCA3OSwgCi0gICAgNzgsIDg0LCA3MiwgNzksIDEyOCwgNzgsIDY1LCA3OCwgNjgsIDEyOCwgNzgsIDY1LCA3OCwgNjUsIDEyOCwgNzgsIDY1LCAKLSAgICA3NywgNjksIDEyOCwgNzgsIDY1LCA3NywgMTk3LCA3OCwgNjUsIDc3LCA1MCwgMTI4LCA3OCwgNjUsIDc3LCAxMjgsIDc4LCAKLSAgICA2NSwgNzUsIDEyOCwgNzgsIDY1LCA3MywgODIsIDE5MywgNzgsIDY1LCA3MywgMjA0LCA3OCwgNjUsIDcxLCA4MiwgMjAxLCAKLSAgICA3OCwgNjUsIDcxLCA2NSwgODIsIDEyOCwgNzgsIDY1LCA3MSwgNjUsIDEyOCwgNzgsIDY1LCA3MSwgMTkzLCA3OCwgNjUsIAotICAgIDcxLCAxMjgsIDc4LCA2NSwgMTk5LCA3OCwgNjUsIDY5LCAxMjgsIDc4LCA2NSwgNjYsIDc2LCA2NSwgMTI4LCA3OCwgNjUsIAotICAgIDY1LCA4MywgNzMsIDc1LCA4OSwgNjUsIDg5LCA2NSwgMTI4LCA3OCwgNjUsIDY1LCA3NSwgODMsIDczLCA3NSwgODksIDY1LCAKLSAgICA4OSwgNjUsIDEyOCwgNzgsIDY1LCA2NSwgNzMsIDEyOCwgNzgsIDY1LCAxOTMsIDc4LCA2NSwgNTAsIDEyOCwgNzgsIDY1LCAKLSAgICA0NSwgNTAsIDEyOCwgNzgsIDQ4LCA1MiwgNTAsIDEyOCwgNzgsIDQ4LCA1MiwgNDksIDEyOCwgNzgsIDQ4LCA1MiwgNDgsIAotICAgIDEyOCwgNzgsIDQ4LCA1MSwgNTcsIDEyOCwgNzgsIDQ4LCA1MSwgNTYsIDEyOCwgNzgsIDQ4LCA1MSwgNTUsIDY1LCAxMjgsIAotICAgIDc4LCA0OCwgNTEsIDU1LCAxMjgsIDc4LCA0OCwgNTEsIDU0LCAxMjgsIDc4LCA0OCwgNTEsIDUzLCA2NSwgMTI4LCA3OCwgCi0gICAgNDgsIDUxLCA1MywgMTI4LCA3OCwgNDgsIDUxLCA1MiwgNjUsIDEyOCwgNzgsIDQ4LCA1MSwgNTIsIDEyOCwgNzgsIDQ4LCAKLSAgICA1MSwgNTEsIDY1LCAxMjgsIDc4LCA0OCwgNTEsIDUxLCAxMjgsIDc4LCA0OCwgNTEsIDUwLCAxMjgsIDc4LCA0OCwgNTEsIAotICAgIDQ5LCAxMjgsIDc4LCA0OCwgNTEsIDQ4LCAxMjgsIDc4LCA0OCwgNTAsIDU3LCAxMjgsIDc4LCA0OCwgNTAsIDU2LCAxMjgsIAotICAgIDc4LCA0OCwgNTAsIDU1LCAxMjgsIDc4LCA0OCwgNTAsIDU0LCAxMjgsIDc4LCA0OCwgNTAsIDUzLCA2NSwgMTI4LCA3OCwgCi0gICAgNDgsIDUwLCA1MywgMTI4LCA3OCwgNDgsIDUwLCA1MiwgMTI4LCA3OCwgNDgsIDUwLCA1MSwgMTI4LCA3OCwgNDgsIDUwLCAKLSAgICA1MCwgMTI4LCA3OCwgNDgsIDUwLCA0OSwgMTI4LCA3OCwgNDgsIDUwLCA0OCwgMTI4LCA3OCwgNDgsIDQ5LCA1NywgMTI4LCAKLSAgICA3OCwgNDgsIDQ5LCA1NiwgNjYsIDEyOCwgNzgsIDQ4LCA0OSwgNTYsIDY1LCAxMjgsIDc4LCA0OCwgNDksIDU2LCAxMjgsIAotICAgIDc4LCA0OCwgNDksIDU1LCAxMjgsIDc4LCA0OCwgNDksIDU0LCAxMjgsIDc4LCA0OCwgNDksIDUzLCAxMjgsIDc4LCA0OCwgCi0gICAgNDksIDUyLCAxMjgsIDc4LCA0OCwgNDksIDUxLCAxMjgsIDc4LCA0OCwgNDksIDUwLCAxMjgsIDc4LCA0OCwgNDksIDQ5LCAKLSAgICAxMjgsIDc4LCA0OCwgNDksIDQ4LCAxMjgsIDc4LCA0OCwgNDgsIDU3LCAxMjgsIDc4LCA0OCwgNDgsIDU2LCAxMjgsIDc4LCAKLSAgICA0OCwgNDgsIDU1LCAxMjgsIDc4LCA0OCwgNDgsIDU0LCAxMjgsIDc4LCA0OCwgNDgsIDUzLCAxMjgsIDc4LCA0OCwgNDgsIAotICAgIDUyLCAxMjgsIDc4LCA0OCwgNDgsIDUxLCAxMjgsIDc4LCA0OCwgNDgsIDUwLCAxMjgsIDc4LCA0OCwgNDgsIDQ5LCAxMjgsIAotICAgIDc4LCA0NSwgNjcsIDgyLCA2OSwgMTk3LCA3OCwgNDUsIDY1LCA4MiwgMjE3LCA3NywgODksIDg4LCAxMjgsIDc3LCA4OSwgCi0gICAgODQsIDEyOCwgNzcsIDg5LCA4MywgNzYsIDczLCA4NCwgNjksIDEyOCwgNzcsIDg5LCA4MCwgMTI4LCA3NywgODksIDY1LCAKLSAgICAxMjgsIDc3LCA4OSwgMTkzLCA3NywgODksIDEyOCwgNzcsIDIxNywgNzcsIDg3LCA3OSwgNzksIDEyOCwgNzcsIDg3LCA3OSwgCi0gICAgMTI4LCA3NywgODcsIDczLCA3MywgMTI4LCA3NywgODcsIDczLCAxMjgsIDc3LCA4NywgNjksIDY5LCAxMjgsIDc3LCA4NywgCi0gICAgNjksIDEyOCwgNzcsIDg3LCA2NSwgNjUsIDEyOCwgNzcsIDg3LCA2NSwgMTI4LCA3NywgODcsIDEyOCwgNzcsIDIxNSwgNzcsIAotICAgIDg2LCA4MywgMTI4LCA3NywgODYsIDc5LCA4MCwgMTI4LCA3NywgODYsIDczLCAxMjgsIDc3LCA4NiwgNjksIDg1LCA2NSwgCi0gICAgNjksIDc4LCA3MSwgNjUsIDc3LCAxMjgsIDc3LCA4NiwgMTI4LCA3NywgMjE0LCA3NywgODUsIDg4LCAxMjgsIDc3LCA4NSwgCi0gICAgODUsIDgzLCA3MywgNzUsIDY1LCA4NCwgNzksIDY1LCA3OCwgMTI4LCA3NywgODUsIDg1LCA4MiwgNjgsIDcyLCA2NSwgNzQsIAotICAgIDE5MywgNzcsIDg1LCA4NSwgMTI4LCA3NywgODUsIDg0LCAxMjgsIDc3LCA4NSwgODMsIDczLCA2NywgMTI4LCA3NywgODUsIAotICAgIDgzLCA3MywgMTk1LCA3NywgODUsIDgzLCA3MiwgODIsIDc5LCA3OSwgNzcsIDEyOCwgNzcsIDg1LCA4MywgNzIsIDUxLCAKLSAgICAxMjgsIDc3LCA4NSwgODMsIDcyLCAxNzksIDc3LCA4NSwgODMsIDcyLCAxMjgsIDc3LCA4NSwgODMsIDIwMCwgNzcsIDg1LCAKLSAgICA4MiwgODgsIDEyOCwgNzcsIDg1LCA4MiwgNzEsIDg1LCA1MCwgMTI4LCA3NywgODUsIDgyLCA2OSwgMTI4LCA3NywgODUsIAotICAgIDgyLCA2OCwgNjUsIDEyOCwgNzcsIDg1LCA4MiwgNjgsIDE5MywgNzcsIDg1LCA4MiwgMTI4LCA3NywgODUsIDgxLCA2OCwgCi0gICAgNjUsIDc3LCAxMjgsIDc3LCA4NSwgODAsIDEyOCwgNzcsIDg1LCA3OSwgODgsIDEyOCwgNzcsIDg1LCA3OSwgODQsIDEyOCwgCi0gICAgNzcsIDg1LCA3OSwgODAsIDEyOCwgNzcsIDg1LCA3OSwgNzcsIDY1LCA2OSwgMTI4LCA3NywgODUsIDc5LCAxMjgsIDc3LCAKLSAgICA4NSwgNzgsIDgzLCA4NSwgNjYsIDEyOCwgNzcsIDg1LCA3OCwgNjUsIDcyLCAxMjgsIDc3LCA4NSwgNzYsIDg0LCA3MywgODMsIAotICAgIDY5LCA4NCwgMTI4LCA3NywgODUsIDc2LCA4NCwgNzMsIDgzLCA2OSwgMjEyLCA3NywgODUsIDc2LCA4NCwgNzMsIDgwLCA3NiwgCi0gICAgNzMsIDY3LCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgNzcsIDg1LCA3NiwgODQsIDczLCA4MCwgNzYsIDczLCA2NywgNjUsIAotICAgIDg0LCA3MywgNzksIDIwNiwgNzcsIDg1LCA3NiwgODQsIDczLCA4MCwgNzYsIDE5NywgNzcsIDg1LCA3NiwgODQsIDczLCA3OSwgCi0gICAgNjcsIDg1LCA3NiwgNjUsIDIxMCwgNzcsIDg1LCA3NiwgODQsIDczLCA3NywgNjUsIDgwLCAxMjgsIDc3LCA4NSwgNzYsIDg0LCAKLSAgICAyMDEsIDc3LCA4NSwgNzUsIDgwLCA3MiwgODIsIDY5LCA3OCwgNzEsIDEyOCwgNzcsIDg1LCA3MywgNzgsIDEyOCwgNzcsIAotICAgIDg1LCA3MSwgODMsIDEyOCwgNzcsIDg1LCA3MSwgMTI4LCA3NywgODUsIDE5OSwgNzcsIDg1LCA2OSwgMTI4LCA3NywgODUsIAotICAgIDY3LCA3MiwgMTI4LCA3NywgODUsIDY3LCAyMDAsIDc3LCA4NSwgNjcsIDY1LCA2NSwgNjgsIDEyOCwgNzcsIDg1LCA2NSwgCi0gICAgNzgsIDEyOCwgNzcsIDg1LCA2NSwgNjksIDEyOCwgNzcsIDg1LCA0NSwgNzEsIDY1LCA2NSwgNzIsIDc2LCA2NSwgMTkzLCAKLSAgICA3NywgMjEzLCA3NywgODMsIDEyOCwgNzcsIDgwLCA2NSwgMTI4LCA3NywgNzksIDg5LCA2NSwgNzMsIDEyOCwgNzcsIDc5LCAKLSAgICA4OCwgMTI4LCA3NywgNzksIDg2LCA3MywgMTk3LCA3NywgNzksIDg2LCA2OSwgMTk2LCA3NywgNzksIDg1LCA4NCwgNzIsIAotICAgIDEyOCwgNzcsIDc5LCA4NSwgODQsIDIwMCwgNzcsIDc5LCA4NSwgODMsIDY5LCAxMjgsIDc3LCA3OSwgODUsIDgzLCAxOTcsIAotICAgIDc3LCA3OSwgODUsIDc4LCA4NCwgNjUsIDczLCA3OCwgODMsIDEyOCwgNzcsIDc5LCA4NSwgNzgsIDg0LCA2NSwgNzMsIDc4LCAKLSAgICAxMjgsIDc3LCA3OSwgODUsIDc4LCA4NCwgNjUsIDczLCAyMDYsIDc3LCA3OSwgODUsIDc4LCAyMTIsIDc3LCA3OSwgODUsIAotICAgIDc4LCA2OCwgMTI4LCA3NywgNzksIDg1LCA3OCwgMTk2LCA3NywgNzksIDg0LCA3MiwgNjksIDgyLCAxMjgsIDc3LCA3OSwgCi0gICAgODQsIDEyOCwgNzcsIDc5LCA4MiwgODQsIDg1LCA4NSwgNzcsIDEyOCwgNzcsIDc5LCA4MiwgODQsIDY1LCA4MiwgMTI4LCAKLSAgICA3NywgNzksIDgyLCA4MCwgNzIsIDc5LCA3NiwgNzksIDcxLCA3MywgNjcsIDY1LCAyMDQsIDc3LCA3OSwgODIsIDc4LCA3MywgCi0gICAgNzgsIDcxLCAxMjgsIDc3LCA3OSwgODAsIDEyOCwgNzcsIDc5LCA3OSwgODMsIDY5LCA0NSwgNjcsIDgyLCA2OSwgMTk3LCAKLSAgICA3NywgNzksIDc5LCA3OCwgMTI4LCA3NywgNzksIDc5LCAyMDYsIDc3LCA3OSwgNzksIDc3LCA4MCwgODUsIDgxLCAxMjgsIAotICAgIDc3LCA3OSwgNzksIDc3LCA2OSwgODUsIDg0LCAxMjgsIDc3LCA3OSwgNzksIDEyOCwgNzcsIDc5LCA3OCwgODQsIDczLCA2OSwgCi0gICAgNjksIDc4LCAxMjgsIDc3LCA3OSwgNzgsIDg0LCA3MiwgMTI4LCA3NywgNzksIDc4LCA4NCwgMjAwLCA3NywgNzksIDc4LCAKLSAgICA4MywgODQsIDY5LCA4MiwgMTI4LCA3NywgNzksIDc4LCA3OSwgODMsIDg0LCA2NSwgNjYsIDc2LCAxOTcsIDc3LCA3OSwgNzgsIAotICAgIDc5LCA4MywgODAsIDY1LCA2NywgMTk3LCA3NywgNzksIDc4LCA3OSwgODIsIDY1LCA3MywgNzYsIDEyOCwgNzcsIDc5LCA3OCwgCi0gICAgNzksIDcxLCA4MiwgNjUsIDgwLCAyMDAsIDc3LCA3OSwgNzgsIDc5LCA3MSwgODIsIDY1LCA3NywgNzcsIDc5LCAyMTEsIDc3LCAKLSAgICA3OSwgNzgsIDc5LCA3MSwgODIsIDY1LCAyMDUsIDc3LCA3OSwgNzgsIDc5LCA3MCwgNzksIDc4LCA3MywgNjUsIDgzLCAxMjgsIAotICAgIDc3LCA3OSwgNzgsIDc5LCA2NywgODUsIDc2LCA2NSwgMjEwLCA3NywgNzksIDc4LCA3NSwgNjksIDg5LCAxMjgsIDc3LCA3OSwgCi0gICAgNzgsIDc1LCA2OSwgMjE3LCA3NywgNzksIDc4LCA3MywgMTI4LCA3NywgNzksIDc4LCA3MSwgNzUsIDY5LCA4NSwgNjUsIDY5LCAKLSAgICA4MSwgMTI4LCA3NywgNzksIDc4LCA2OSwgMjE3LCA3NywgNzksIDc4LCAxMjgsIDc3LCA3OSwgMjA2LCA3NywgNzksIDc2LCAKLSAgICAxMjgsIDc3LCA3OSwgNzIsIDY1LCA3NywgNzcsIDY1LCAxOTYsIDc3LCA3OSwgNjgsIDg1LCA3NiwgMjA3LCA3NywgNzksIAotICAgIDY4LCA2OSwgODMsIDg0LCA4OSwgMTI4LCA3NywgNzksIDY4LCA2OSwgNzYsIDgzLCAxMjgsIDc3LCA3OSwgNjgsIDY5LCA3NiwgCi0gICAgMTI4LCA3NywgNzksIDY4LCA2OSwgMTI4LCA3NywgNzksIDY2LCA3MywgNzYsIDE5NywgNzcsIDc5LCA2NSwgMTI4LCA3NywgCi0gICAgMjA3LCA3NywgNzgsIDg5LCA2NSwgMjA1LCA3NywgNzgsIDY1LCA4MywgMTI4LCA3NywgNzcsIDgzLCA4MCwgMTI4LCA3NywgCi0gICAgNzcsIDEyOCwgNzcsIDIwNSwgNzcsIDc2LCA2NSwgMTI4LCA3NywgNzYsIDEyOCwgNzcsIDc1LCA4MCwgNjUsIDgyLCA2NSwgCi0gICAgMjA5LCA3NywgNzMsIDg4LCAxMjgsIDc3LCA3MywgODQsIDEyOCwgNzcsIDczLCA4MywgODIsIDY1LCAxMjgsIDc3LCA3MywgCi0gICAgODIsIDczLCA2NiwgNjUsIDY1LCA4MiwgODUsIDEyOCwgNzcsIDczLCA4MiwgNzMsIDEyOCwgNzcsIDczLCA4MiwgNjksIDY4LCAKLSAgICAxMjgsIDc3LCA3MywgODAsIDEyOCwgNzcsIDczLCA3OCwgODksIDEyOCwgNzcsIDczLCA3OCwgODUsIDgzLCA0NSwgNzksIAotICAgIDgyLCA0NSwgODAsIDc2LCA4NSwgMjExLCA3NywgNzMsIDc4LCA4NSwgODMsIDEyOCwgNzcsIDczLCA3OCwgNzMsIDgzLCA4NCwgCi0gICAgNjksIDgyLCAxMjgsIDc3LCA3MywgNzgsIDczLCA3NywgNjUsIDEyOCwgNzcsIDczLCA3OCwgNzMsIDY4LCA3MywgODMsIDY3LCAKLSAgICAxMjgsIDc3LCA3MywgNzgsIDczLCA2NiwgODUsIDgzLCAxMjgsIDc3LCA3MywgNzcsIDY5LCAxMjgsIDc3LCA3MywgNzcsIAotICAgIDEyOCwgNzcsIDczLCA3NiwgNzYsIDczLCA3OSwgNzgsIDIxMSwgNzcsIDczLCA3NiwgNzYsIDY5LCA4NCwgMTI4LCA3NywgCi0gICAgNzMsIDc2LCA3NiwgMTk3LCA3NywgNzMsIDc2LCAyMDQsIDc3LCA3MywgNzYsIDc1LCAyMTcsIDc3LCA3MywgNzYsIDEyOCwgCi0gICAgNzcsIDczLCA3NSwgODUsIDgyLCA3OSwgNzgsIDEyOCwgNzcsIDczLCA3NSwgODIsIDc5LCAyMDYsIDc3LCA3MywgNzUsIDgyLCAKLSAgICA3MywgMTI4LCA3NywgNzMsIDczLCA3OCwgMTI4LCA3NywgNzMsIDczLCAxMjgsIDc3LCA3MywgMTk5LCA3NywgNzMsIDY5LCAKLSAgICA4OCwgMTI4LCA3NywgNzMsIDY5LCA4NSwgNzcsIDQ1LCA4NCwgNzMsIDc1LCA2OSwgODUsIDg0LCAxMjgsIDc3LCA3MywgNjksIAotICAgIDg1LCA3NywgNDUsIDgzLCA4MywgNjUsIDc4LCA3MSwgODMsIDczLCA3OSwgODMsIDEyOCwgNzcsIDczLCA2OSwgODUsIDc3LCAKLSAgICA0NSwgODMsIDgzLCA2NSwgNzgsIDcxLCA3OCwgNzMsIDY5LCA4NSwgNzgsIDEyOCwgNzcsIDczLCA2OSwgODUsIDc3LCA0NSwgCi0gICAgODIsIDczLCA2OSwgODUsIDc2LCAxMjgsIDc3LCA3MywgNjksIDg1LCA3NywgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIAotICAgIDgzLCA3MywgNzksIDgzLCAxMjgsIDc3LCA3MywgNjksIDg1LCA3NywgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCA3NywgCi0gICAgNzMsIDY5LCA4NSwgNzcsIDQ1LCA4MCwgNjUsIDc4LCA4MywgNzMsIDc5LCA4MywgMTI4LCA3NywgNzMsIDY5LCA4NSwgNzcsIAotICAgIDQ1LCA3OCwgNzMsIDY5LCA4NSwgNzgsIDEyOCwgNzcsIDczLCA2OSwgODUsIDc3LCA0NSwgNjcsIDczLCA2OSwgODUsIDY3LCAKLSAgICAxMjgsIDc3LCA3MywgNjksIDg1LCA3NywgNDUsIDY3LCA3MiwgNzMsIDY5LCA4NSwgNjcsIDcyLCAxMjgsIDc3LCA3MywgNjksIAotICAgIDg1LCAyMDUsIDc3LCA3MywgNjksIDgwLCAxMjgsIDc3LCA3MywgNjksIDY5LCAxMjgsIDc3LCA3MywgNjksIDEyOCwgNzcsIAotICAgIDczLCA2OCwgNzYsIDczLCA3OCwgMTk3LCA3NywgNzMsIDY4LCA2OCwgNzYsIDY5LCA0NSwgODcsIDY5LCA3NiwgODMsIDIwMCwgCi0gICAgNzcsIDczLCA2OCwgNjgsIDc2LCAxOTcsIDc3LCA3MywgMTk2LCA3NywgNzMsIDY3LCA4MiwgNzksIDgzLCA2NywgNzksIDgwLCAKLSAgICA2OSwgMTI4LCA3NywgNzMsIDY3LCA4MiwgNzksIDgwLCA3MiwgNzksIDc4LCA2OSwgMTI4LCA3NywgNzMsIDY3LCA4MiwgCi0gICAgMjA3LCA3NywgNzMsIDY3LCAyMTAsIDc3LCA3MiwgOTAsIDEyOCwgNzcsIDcyLCA2NSwgMTI4LCA3NywgNzIsIDEyOCwgNzcsIAotICAgIDcxLCA4NSwgODgsIDEyOCwgNzcsIDcxLCA4NSwgODQsIDEyOCwgNzcsIDcxLCA4NSwgODIsIDg4LCAxMjgsIDc3LCA3MSwgCi0gICAgODUsIDgyLCAxMjgsIDc3LCA3MSwgODUsIDgwLCAxMjgsIDc3LCA3MSwgODUsIDc5LCA4OCwgMTI4LCA3NywgNzEsIDg1LCAKLSAgICA3OSwgODAsIDEyOCwgNzcsIDcxLCA4NSwgNzksIDEyOCwgNzcsIDcxLCA4NSwgMTI4LCA3NywgNzEsIDc5LCA4OCwgMTI4LCAKLSAgICA3NywgNzEsIDc5LCA4NCwgMTI4LCA3NywgNzEsIDc5LCA4MCwgMTI4LCA3NywgNzEsIDc5LCAxMjgsIDc3LCA3MSwgMjA3LCAKLSAgICA3NywgNzEsIDczLCA2OSwgODgsIDEyOCwgNzcsIDcxLCA3MywgNjksIDEyOCwgNzcsIDcxLCA2OSwgODgsIDEyOCwgNzcsIAotICAgIDcxLCA2OSwgODAsIDEyOCwgNzcsIDcxLCA2OSwgMTI4LCA3NywgNzEsIDY2LCA4NSwgMTI4LCA3NywgNzEsIDY2LCA3OSwgCi0gICAgNzksIDEyOCwgNzcsIDcxLCA2NiwgNzksIDcwLCA4NSwgNzcsIDEyOCwgNzcsIDcxLCA2NiwgNzksIDEyOCwgNzcsIDcxLCAKLSAgICA2NiwgNzMsIDEyOCwgNzcsIDcxLCA2NiwgNjksIDg1LCA3OCwgMTI4LCA3NywgNzEsIDY2LCA2OSwgNzgsIDEyOCwgNzcsIAotICAgIDcxLCA2NiwgNjksIDY5LCAxMjgsIDc3LCA3MSwgNjYsIDY5LCAxMjgsIDc3LCA3MSwgNjYsIDY1LCA4MywgNjUsIDgxLCAKLSAgICAxMjgsIDc3LCA3MSwgNjYsIDY1LCA4MywgNjUsIDEyOCwgNzcsIDcxLCA2NSwgODgsIDEyOCwgNzcsIDcxLCA2NSwgODQsIAotICAgIDEyOCwgNzcsIDcxLCA2NSwgODAsIDEyOCwgNzcsIDcxLCA2NSwgMTI4LCA3NywgNzEsIDEyOCwgNzcsIDcwLCA3OSwgNzgsIAotICAgIDEyOCwgNzcsIDcwLCA3OSwgMjA2LCA3NywgNzAsIDc5LCAxMjgsIDc3LCA3MCwgNzMsIDg5LCA2NSwgODEsIDEyOCwgNzcsIAotICAgIDcwLCA3MywgNjksIDY5LCAxMjgsIDc3LCA3MCwgNjksIDg1LCA4NCwgMTI4LCA3NywgNzAsIDY5LCA4NSwgODEsIDEyOCwgCi0gICAgNzcsIDcwLCA2OSwgODUsIDY1LCA2OSwgMTI4LCA3NywgNzAsIDY1LCA2NSwgMTI4LCA3NywgNjksIDkwLCA5MCwgNzksIAotICAgIDEyOCwgNzcsIDY5LCA4OCwgMTI4LCA3NywgNjksIDg1LCAyMTIsIDc3LCA2OSwgODUsIDgxLCAxMjgsIDc3LCA2OSwgODUsIAotICAgIDc4LCA3NCwgNzksIDc3LCA3OCwgNjgsIDY5LCA4NSwgODEsIDEyOCwgNzcsIDY5LCA4NSwgNzgsIDEyOCwgNzcsIDY5LCA4NCwgCi0gICAgODIsIDc5LCAxMjgsIDc3LCA2OSwgODQsIDgyLCA3MywgNjcsIDY1LCAyMDQsIDc3LCA2OSwgODQsIDgyLCA3MywgNjUsIAotICAgIDEyOCwgNzcsIDY5LCA4NCwgODIsIDY5LCA4NCwgNjksIDIxMSwgNzcsIDY5LCA4NCwgNzksIDY2LCA2OSwgNzYsIDg1LCA4MywgCi0gICAgMTI4LCA3NywgNjksIDg0LCA2OSwgNzUsIDEyOCwgNzcsIDY5LCA4NCwgNjksIDcxLCAxMjgsIDc3LCA2OSwgODQsIDY1LCAKLSAgICA3NiwgMTI4LCA3NywgNjksIDg0LCAxOTMsIDc3LCA2OSwgODMsIDgzLCA2OSwgNzgsIDczLCA2NSwgMjA2LCA3NywgNjksIAotICAgIDgzLCA4MywgNjUsIDcxLCA2OSwgMTI4LCA3NywgNjksIDgzLCA4MywgNjUsIDcxLCAxOTcsIDc3LCA2OSwgODMsIDc5LCAKLSAgICAxMjgsIDc3LCA2OSwgODMsIDczLCAxMjgsIDc3LCA2OSwgODMsIDcyLCAxMjgsIDc3LCA2OSwgODIsIDc5LCA3MywgODQsIAotICAgIDczLCAxOTUsIDc3LCA2OSwgODIsIDc1LCA3MiwgNjUsIDEyOCwgNzcsIDY5LCA4MiwgNzUsIDcyLCAxOTMsIDc3LCA2OSwgCi0gICAgODIsIDczLCA2OCwgNzMsIDY1LCA3OCwgODMsIDEyOCwgNzcsIDY5LCA4MiwgNzMsIDEyOCwgNzcsIDY5LCA4MiwgNzEsIDY5LCAKLSAgICAxMjgsIDc3LCA2OSwgODIsIDY3LCA4NSwgODIsIDg5LCAxMjgsIDc3LCA2OSwgODIsIDY3LCA4NSwgODIsIDIxNywgNzcsIAotICAgIDY5LCA3OCwgNjgsIDg1LCA4NCwgMTI4LCA3NywgNjksIDc4LCAxMjgsIDc3LCA2OSwgNzcsIDc5LCAxMjgsIDc3LCA2OSwgCi0gICAgNzcsIDY2LCA2OSwgODIsIDgzLCA3MiwgNzMsIDgwLCAxMjgsIDc3LCA2OSwgNzcsIDY2LCA2OSwgODIsIDEyOCwgNzcsIDY5LCAKLSAgICA3NywgNjYsIDY5LCAyMTAsIDc3LCA2OSwgNzcsIDQ1LCA4MSwgNzksIDgwLCA3MiwgMTI4LCA3NywgNjksIDc3LCAxMjgsIAotICAgIDc3LCA2OSwgMjA1LCA3NywgNjksIDc2LCA3OSwgNjgsIDczLCAxOTUsIDc3LCA2OSwgNzYsIDczLCA3NSwgMTI4LCA3NywgCi0gICAgNjksIDczLCA5MCwgNzMsIDEyOCwgNzcsIDY5LCA3MSwgNjUsIDg0LCA3OSwgNzgsIDEyOCwgNzcsIDY5LCA3MSwgNjUsIDgwLCAKLSAgICA3MiwgNzksIDc4LCA2OSwgMTI4LCA3NywgNjksIDcxLCA2NSwgNzYsIDczLCAxMjgsIDc3LCA2OSwgNjksIDg0LCA3OSwgODIsIAotICAgIDg1LCAxMjgsIDc3LCA2OSwgNjksIDg0LCAxMjgsIDc3LCA2OSwgNjksIDc3LCA4NSwgMTI4LCA3NywgNjksIDY5LCA3NywgCi0gICAgMTI4LCA3NywgNjksIDY5LCA2OSwgNjksIDEyOCwgNzcsIDY5LCA2OCwgNzMsIDg1LCA3NywgMTI4LCA3NywgNjksIDY4LCAKLSAgICA3MywgODUsIDIwNSwgNzcsIDY5LCA2OCwgNzMsIDY3LCA3MywgNzgsIDY5LCAxMjgsIDc3LCA2OSwgNjgsIDczLCA2NywgNjUsIAotICAgIDIwNCwgNzcsIDY5LCA2NSwgODQsIDEyOCwgNzcsIDY5LCA2NSwgMjEyLCA3NywgNjksIDY1LCA4MywgODUsIDgyLCA2OSwgCi0gICAgMTk2LCA3NywgNjksIDY1LCA4MywgODUsIDgyLCA2OSwgMTI4LCA3NywgNjksIDY1LCA4MywgODUsIDgyLCAxOTcsIDc3LCAKLSAgICA2OCwgODUsIDIwNiwgNzcsIDE5NiwgNzcsIDY3LCA3MiwgMjEzLCA3NywgNjcsIDcyLCA2NSwgMjA2LCA3NywgMTk1LCA3NywgCi0gICAgNjYsIDg1LCA3OSwgODEsIDEyOCwgNzcsIDY2LCA4NSwgNzksIDEyOCwgNzcsIDY2LCA4NSwgNjksIDEyOCwgNzcsIDY2LCAKLSAgICA4NSwgNjUsIDY5LCA3NywgMTI4LCA3NywgNjYsIDg1LCA2NSwgNjksIDEyOCwgNzcsIDY2LCA3OSwgNzksIDEyOCwgNzcsIAotICAgIDY2LCA3OSwgMTI4LCA3NywgNjYsIDczLCA4NCwgMTI4LCA3NywgNjYsIDczLCAyMTIsIDc3LCA2NiwgNzMsIDgyLCA3MywgCi0gICAgNjksIDY5LCA3OCwgMTI4LCA3NywgNjYsIDczLCAxMjgsIDc3LCA2NiwgNjksIDg1LCA4OCwgMTI4LCA3NywgNjYsIDY5LCAKLSAgICA4NSwgODIsIDczLCAxMjgsIDc3LCA2NiwgNjksIDg1LCA3NywgMTI4LCA3NywgNjYsIDY5LCA4MiwgNjUsIDY5LCAxMjgsIAotICAgIDc3LCA2NiwgNjksIDc4LCAxMjgsIDc3LCA2NiwgNjksIDY5LCA3NSwgNjksIDY5LCA4NCwgMTI4LCA3NywgNjYsIDY5LCA2OSwgCi0gICAgMTI4LCA3NywgNjYsIDY5LCAxMjgsIDc3LCA2NiwgNjUsIDgxLCAxMjgsIDc3LCA2NiwgNjUsIDc4LCA4OSwgNzMsIDEyOCwgCi0gICAgNzcsIDY2LCA2NSwgNjUsIDgyLCA2NSwgNjksIDEyOCwgNzcsIDY2LCA2NSwgNjUsIDc1LCA2OSwgODQsIDEyOCwgNzcsIDY2LCAKLSAgICA2NSwgNjUsIDEyOCwgNzcsIDY2LCA2NSwgMTkzLCA3NywgNjYsIDE5MywgNzcsIDY2LCA1MiwgMTI4LCA3NywgNjYsIDUxLCAKLSAgICAxMjgsIDc3LCA2NiwgNTAsIDEyOCwgNzcsIDY2LCAxMjgsIDc3LCAxOTQsIDc3LCA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAKLSAgICAxMjgsIDc3LCA2NSwgODksIDEyOCwgNzcsIDY1LCA4OCwgNzMsIDc3LCA2NSwgMTI4LCA3NywgNjUsIDg4LCAxMjgsIDc3LCAKLSAgICA2NSwgODUsIDEyOCwgNzcsIDY1LCA4NCwgODQsIDc5LCA2NywgNzUsIDEyOCwgNzcsIDY1LCA4NCwgODIsIDczLCA4OCwgCi0gICAgMTI4LCA3NywgNjUsIDg0LCA2OSwgODIsIDczLCA2NSwgNzYsIDgzLCAxMjgsIDc3LCA2NSwgODQsIDEyOCwgNzcsIDY1LCAKLSAgICA4MywgMjEzLCA3NywgNjUsIDgzLCA4MywgNzMsIDc4LCA3MSwgMTI4LCA3NywgNjUsIDgzLCA4MywgNjUsIDcxLCA2OSwgCi0gICAgMTI4LCA3NywgNjUsIDgzLCA3OSwgODIsIDE5MywgNzcsIDY1LCA4MywgNzUsIDEyOCwgNzcsIDY1LCA4MywgNzIsIDcwLCAKLSAgICA2NSwgNjUsIDg0LCAxMjgsIDc3LCA2NSwgODMsIDcyLCA1MCwgMTI4LCA3NywgNjUsIDgzLCA2NywgODUsIDc2LCA3MywgNzgsIAotICAgIDE5NywgNzcsIDY1LCA4MiwgODksIDEyOCwgNzcsIDY1LCA4MiwgODUsIDc1LCA4NSwgMTI4LCA3NywgNjUsIDgyLCA4NCwgCi0gICAgODksIDgyLCA3MywgMTkzLCA3NywgNjUsIDgyLCA4MiwgODksIDczLCA3OCwgMTk5LCA3NywgNjUsIDgyLCA4MiwgNzMsIDY1LCAKLSAgICA3MSwgMTk3LCA3NywgNjUsIDgyLCA3NSwgNjksIDgyLCAxMjgsIDc3LCA2NSwgODIsIDc1LCA0NSwgNTIsIDEyOCwgNzcsIAotICAgIDY1LCA4MiwgNzUsIDQ1LCA1MSwgMTI4LCA3NywgNjUsIDgyLCA3NSwgNDUsIDUwLCAxMjgsIDc3LCA2NSwgODIsIDc1LCA0NSwgCi0gICAgNDksIDEyOCwgNzcsIDY1LCA4MiwgNjksIDEyOCwgNzcsIDY1LCA4MiwgNjcsIDcyLCAxMjgsIDc3LCA2NSwgODIsIDY3LCAKLSAgICA2NSwgODQsIDc5LCA0NSwgODMsIDg0LCA2NSwgNjcsIDY3LCA2NSwgODQsIDc5LCAxMjgsIDc3LCA2NSwgODIsIDY3LCA2NSwgCi0gICAgODQsIDc5LCAxMjgsIDc3LCA2NSwgODIsIDY3LCA2NSwgODMsIDczLCA4NCwgNjksIDEyOCwgNzcsIDY1LCA4MiwgNjYsIDg1LCAKLSAgICA4NCwgNjUsIDEyOCwgNzcsIDY1LCA4MiwgNjYsIDg1LCA4NCwgMTkzLCA3NywgNjUsIDgyLCAxMjgsIDc3LCA2NSwgODEsIAotICAgIDY1LCA3MCwgMTI4LCA3NywgNjUsIDgxLCAxMjgsIDc3LCA2NSwgODAsIDc2LCAxOTcsIDc3LCA2NSwgODAsIDczLCA4MSwgCi0gICAgMTI4LCA3NywgNjUsIDIwOCwgNzcsIDY1LCA3OSwgMTI4LCA3NywgNjUsIDc4LCA4MywgODksIDc5LCA3OCwgMTI4LCA3NywgCi0gICAgNjUsIDc4LCA4MywgODUsIDY1LCA2OSwgMTI4LCA3NywgNjUsIDc4LCA3OCwgNjUsIDIxOCwgNzcsIDY1LCA3OCwgNzgsIDY1LCAKLSAgICAxMjgsIDc3LCA2NSwgNzgsIDcxLCA2NSwgNzYsIDY1LCA3NywgMTI4LCA3NywgNjUsIDc4LCA2OCwgNjUsIDczLCA3NiwgNzMsIAotICAgIDc4LCAxOTksIDc3LCA2NSwgNzgsIDY4LCA2NSwgNzMsIDE5NSwgNzcsIDY1LCA3OCwgNjcsIDcyLCAyMTMsIDc3LCA2NSwgCi0gICAgNzgsIDY1LCA2NywgNzYsIDY5LCA4MywgMTI4LCA3NywgNjUsIDc2LCA4NCwgNjksIDgzLCAxOTcsIDc3LCA2NSwgNzYsIDY5LCAKLSAgICA2OSwgODIsIDczLCAxMjgsIDc3LCA2NSwgNzYsIDY5LCAxMjgsIDc3LCA2NSwgNzYsIDE5NywgNzcsIDY1LCA3NiwgNjUsIAotICAgIDc1LCA3OSwgMjA2LCA3NywgNjUsIDc1LCA4MywgODUsIDgyLCA2NSwgMTI4LCA3NywgNjUsIDc1LCA4MywgODUsIDgyLCAKLSAgICAxOTMsIDc3LCA2NSwgNzMsIDkwLCA2OSwgMTI4LCA3NywgNjUsIDczLCA4OSwgNjUsIDc3LCA3OSwgNzUsIDEyOCwgNzcsIAotICAgIDY1LCA3MywgODQsIDY1LCA3MywgNzUsIDcyLCA4NSwgMTI4LCA3NywgNjUsIDczLCA4MiwgODUsIDEyOCwgNzcsIDY1LCA3MywgCi0gICAgNzcsIDg1LCA2NSwgNzgsIDEyOCwgNzcsIDY1LCA3MywgNzcsIDY1LCA3NiwgNjUsIDczLCAxMjgsIDc3LCA2NSwgNzMsIDc2LCAKLSAgICA2NiwgNzksIDIxNiwgNzcsIDY1LCA3MywgNzUsIDg1LCA4MiwgNzksIDEyOCwgNzcsIDY1LCA3MywgNjgsIDY5LCA3OCwgCi0gICAgMTI4LCA3NywgNjUsIDczLCAxMjgsIDc3LCA2NSwgNzIsIDc0LCA3OSwgNzgsIDE5OSwgNzcsIDY1LCA3MiwgNzIsIDY1LCAKLSAgICAxMjgsIDc3LCA2NSwgNzIsIDY1LCA4MCwgODIsIDY1LCA3OCwgNjUsIDEyOCwgNzcsIDY1LCA3MiwgNjUsIDgwLCA2NSwgNzUsIAotICAgIDcyLCAxMjgsIDc3LCA2NSwgNzIsIDY1LCA2NSwgODAsIDgyLCA2NSwgNjUsIDc4LCAxOTMsIDc3LCA2NSwgNzIsIDEyOCwgCi0gICAgNzcsIDY1LCA3MSwgNzgsIDczLCA3MCwgODksIDczLCA3OCwgMTk5LCA3NywgNjUsIDY5LCA4MywgNzMsIDEyOCwgNzcsIDY1LCAKLSAgICA2OSwgNzgsIDg5LCA3MywgMTI4LCA3NywgNjUsIDY5LCA3OCwgNzQsIDY5LCA4NCwgMTI4LCA3NywgNjUsIDY5LCA3NywgODYsIAotICAgIDY5LCA4NSwgODgsIDEyOCwgNzcsIDY1LCA2OSwgNzcsIDc1LCA4MCwgNjksIDc4LCAxMjgsIDc3LCA2NSwgNjksIDc3LCA3MSwgCi0gICAgNjYsIDczLCA2OSwgNjksIDEyOCwgNzcsIDY1LCA2OSwgNzcsIDY2LCA3MSwgNjYsIDczLCA2OSwgNjksIDEyOCwgNzcsIDY1LCAKLSAgICA2OSwgNzcsIDY2LCA2NSwgMTI4LCA3NywgNjUsIDY5LCA3NywgMTI4LCA3NywgNjUsIDY5LCA3NiwgNjksIDY5LCAxMjgsIAotICAgIDc3LCA2NSwgNjksIDc1LCA2OSwgODUsIDgwLCAxMjgsIDc3LCA2NSwgNjgsIDg5LCA2NSwgMTI4LCA3NywgNjUsIDY4LCA4NSwgCi0gICAgMTI4LCA3NywgNjUsIDY4LCA2OCwgNjUsIDIwMCwgNzcsIDY1LCA2OCwgNjgsIDY1LCAxMjgsIDc3LCA2NSwgNjgsIDY4LCAKLSAgICAxOTMsIDc3LCA2NSwgNjcsIDgyLCA3OSwgNzgsIDQ1LCA3MSwgODIsIDY1LCA4NiwgNjksIDEyOCwgNzcsIDY1LCA2NywgODIsIAotICAgIDc5LCA3OCwgNDUsIDY2LCA4MiwgNjksIDg2LCA2OSwgMTI4LCA3NywgNjUsIDY3LCA4MiwgNzksIDc4LCA0NSwgNjUsIDY3LCAKLSAgICA4NSwgODQsIDY5LCAxMjgsIDc3LCA2NSwgNjcsIDgyLCA3OSwgNzgsIDEyOCwgNzcsIDY1LCA2NywgODIsIDc5LCAyMDYsIAotICAgIDc3LCA2NSwgNjcsIDcyLCA3MywgNzgsIDY5LCAxMjgsIDc3LCA2NSwgNjUsIDg5LCA4OSwgNjUsIDY1LCAxMjgsIDc3LCA2NSwgCi0gICAgNjUsIDczLCAxMjgsIDc3LCA2NSwgNjUsIDEyOCwgNzcsIDY1LCA1MCwgMTI4LCA3NywgNDgsIDUyLCA1MiwgMTI4LCA3NywgCi0gICAgNDgsIDUyLCA1MSwgMTI4LCA3NywgNDgsIDUyLCA1MCwgMTI4LCA3NywgNDgsIDUyLCA0OSwgMTI4LCA3NywgNDgsIDUyLCAKLSAgICA0OCwgNjUsIDEyOCwgNzcsIDQ4LCA1MiwgNDgsIDEyOCwgNzcsIDQ4LCA1MSwgNTcsIDEyOCwgNzcsIDQ4LCA1MSwgNTYsIAotICAgIDEyOCwgNzcsIDQ4LCA1MSwgNTUsIDEyOCwgNzcsIDQ4LCA1MSwgNTQsIDEyOCwgNzcsIDQ4LCA1MSwgNTMsIDEyOCwgNzcsIAotICAgIDQ4LCA1MSwgNTIsIDEyOCwgNzcsIDQ4LCA1MSwgNTEsIDY2LCAxMjgsIDc3LCA0OCwgNTEsIDUxLCA2NSwgMTI4LCA3NywgCi0gICAgNDgsIDUxLCA1MSwgMTI4LCA3NywgNDgsIDUxLCA1MCwgMTI4LCA3NywgNDgsIDUxLCA0OSwgNjUsIDEyOCwgNzcsIDQ4LCAKLSAgICA1MSwgNDksIDEyOCwgNzcsIDQ4LCA1MSwgNDgsIDEyOCwgNzcsIDQ4LCA1MCwgNTcsIDEyOCwgNzcsIDQ4LCA1MCwgNTYsIAotICAgIDY1LCAxMjgsIDc3LCA0OCwgNTAsIDU2LCAxMjgsIDc3LCA0OCwgNTAsIDU1LCAxMjgsIDc3LCA0OCwgNTAsIDU0LCAxMjgsIAotICAgIDc3LCA0OCwgNTAsIDUzLCAxMjgsIDc3LCA0OCwgNTAsIDUyLCA2NSwgMTI4LCA3NywgNDgsIDUwLCA1MiwgMTI4LCA3NywgCi0gICAgNDgsIDUwLCA1MSwgMTI4LCA3NywgNDgsIDUwLCA1MCwgNjUsIDEyOCwgNzcsIDQ4LCA1MCwgNTAsIDEyOCwgNzcsIDQ4LCAKLSAgICA1MCwgNDksIDEyOCwgNzcsIDQ4LCA1MCwgNDgsIDEyOCwgNzcsIDQ4LCA0OSwgNTcsIDEyOCwgNzcsIDQ4LCA0OSwgNTYsIAotICAgIDEyOCwgNzcsIDQ4LCA0OSwgNTUsIDY1LCAxMjgsIDc3LCA0OCwgNDksIDU1LCAxMjgsIDc3LCA0OCwgNDksIDU0LCA2NSwgCi0gICAgMTI4LCA3NywgNDgsIDQ5LCA1NCwgMTI4LCA3NywgNDgsIDQ5LCA1MywgNjUsIDEyOCwgNzcsIDQ4LCA0OSwgNTMsIDEyOCwgCi0gICAgNzcsIDQ4LCA0OSwgNTIsIDEyOCwgNzcsIDQ4LCA0OSwgNTEsIDEyOCwgNzcsIDQ4LCA0OSwgNTAsIDcyLCAxMjgsIDc3LCAKLSAgICA0OCwgNDksIDUwLCA3MSwgMTI4LCA3NywgNDgsIDQ5LCA1MCwgNzAsIDEyOCwgNzcsIDQ4LCA0OSwgNTAsIDY5LCAxMjgsIAotICAgIDc3LCA0OCwgNDksIDUwLCA2OCwgMTI4LCA3NywgNDgsIDQ5LCA1MCwgNjcsIDEyOCwgNzcsIDQ4LCA0OSwgNTAsIDY2LCAKLSAgICAxMjgsIDc3LCA0OCwgNDksIDUwLCA2NSwgMTI4LCA3NywgNDgsIDQ5LCA1MCwgMTI4LCA3NywgNDgsIDQ5LCA0OSwgMTI4LCAKLSAgICA3NywgNDgsIDQ5LCA0OCwgNjUsIDEyOCwgNzcsIDQ4LCA0OSwgNDgsIDEyOCwgNzcsIDQ4LCA0OCwgNTcsIDEyOCwgNzcsIAotICAgIDQ4LCA0OCwgNTYsIDEyOCwgNzcsIDQ4LCA0OCwgNTUsIDEyOCwgNzcsIDQ4LCA0OCwgNTQsIDEyOCwgNzcsIDQ4LCA0OCwgCi0gICAgNTMsIDEyOCwgNzcsIDQ4LCA0OCwgNTIsIDEyOCwgNzcsIDQ4LCA0OCwgNTEsIDY1LCAxMjgsIDc3LCA0OCwgNDgsIDUxLCAKLSAgICAxMjgsIDc3LCA0OCwgNDgsIDUwLCAxMjgsIDc3LCA0OCwgNDgsIDQ5LCA2NiwgMTI4LCA3NywgNDgsIDQ4LCA0OSwgNjUsIAotICAgIDEyOCwgNzcsIDQ4LCA0OCwgNDksIDEyOCwgNzYsIDIxOCwgNzYsIDg5LCA4OSwgMTI4LCA3NiwgODksIDg4LCAxMjgsIDc2LCAKLSAgICA4OSwgODQsIDEyOCwgNzYsIDg5LCA4MiwgODgsIDEyOCwgNzYsIDg5LCA4MiwgMTI4LCA3NiwgODksIDgwLCAxMjgsIDc2LCAKLSAgICA4OSwgNjgsIDczLCA2NSwgMjA2LCA3NiwgODksIDY3LCA3MywgNjUsIDIwNiwgNzYsIDg4LCAxMjgsIDc2LCA4NywgNzksIAotICAgIDc5LCAxMjgsIDc2LCA4NywgNzksIDEyOCwgNzYsIDg3LCA3MywgNzMsIDEyOCwgNzYsIDg3LCA3MywgMTI4LCA3NiwgODcsIAotICAgIDY5LCAxMjgsIDc2LCA4NywgNjUsIDY1LCAxMjgsIDc2LCA4NywgNjUsIDEyOCwgNzYsIDg1LCA4OCwgMTI4LCA3NiwgODUsIAotICAgIDg1LCAxMjgsIDc2LCA4NSwgODQsIDEyOCwgNzYsIDg1LCA4MiwgODgsIDEyOCwgNzYsIDg1LCA4MCwgMTI4LCA3NiwgODUsIAotICAgIDc5LCA4OCwgMTI4LCA3NiwgODUsIDc5LCA4NCwgMTI4LCA3NiwgODUsIDc5LCA4MCwgMTI4LCA3NiwgODUsIDc5LCAxMjgsIAotICAgIDc2LCA4NSwgNzgsIDcxLCA4MywgNzMsIDEyOCwgNzYsIDg1LCA3OCwgNjUsIDg0LCAxOTcsIDc2LCA4NSwgMjA1LCA3NiwgCi0gICAgODUsIDc2LCAxMjgsIDc2LCA4NSwgNzMsIDgzLCAxMjgsIDc2LCA4NSwgNzIsIDg1LCA4MiwgMTI4LCA3NiwgODUsIDcyLCAKLSAgICAxMjgsIDc2LCA4NSwgNzEsIDcxLCA2NSwgNzEsIDY5LCAxMjgsIDc2LCA4NSwgNzEsIDY1LCA3NiwgMTI4LCA3NiwgODUsIAotICAgIDcxLCA2NSwgMjA0LCA3NiwgODUsIDY5LCAxMjgsIDc2LCA4NSwgNjUsIDY5LCA4MCwgMTI4LCA3NiwgODUsIDUxLCAxMjgsIAotICAgIDc2LCA4NSwgNTAsIDEyOCwgNzYsIDg1LCAxNzgsIDc2LCA4MiwgNzksIDEyOCwgNzYsIDgyLCA3NywgMTI4LCA3NiwgODIsIAotICAgIDY5LCAxMjgsIDc2LCA3OSwgOTAsIDY5LCA3OCwgNzEsIDY5LCAxMjgsIDc2LCA3OSwgOTAsIDY5LCA3OCwgNzEsIDE5NywgCi0gICAgNzYsIDc5LCA4OCwgMTI4LCA3NiwgNzksIDg3LCA2OSwgODIsIDY5LCAxOTYsIDc2LCA3OSwgODcsIDY5LCAyMTAsIDc2LCAKLSAgICA3OSwgODcsIDQ1LCAxODUsIDc2LCA3OSwgODYsIDE5NywgNzYsIDc5LCA4NSwgODIsIDY5LCAxMjgsIDc2LCA3OSwgODUsIAotICAgIDY4LCA4MywgODAsIDY5LCA2NSwgNzUsIDY5LCA4MiwgMTI4LCA3NiwgNzksIDg1LCA2OCwgNzYsIDIxNywgNzYsIDc5LCA4NCwgCi0gICAgODUsIDgzLCAxMjgsIDc2LCA3OSwgODQsIDEyOCwgNzYsIDc5LCA4MiwgODIsIDg5LCAxMjgsIDc2LCA3OSwgODIsIDgyLCAKLSAgICA2NSwgNzMsIDc4LCA2OSwgMTI4LCA3NiwgNzksIDgxLCAxMjgsIDc2LCA3OSwgODAsIDEyOCwgNzYsIDc5LCA3OSwgODQsIAotICAgIDEyOCwgNzYsIDc5LCA3OSwgODAsIDY5LCAxOTYsIDc2LCA3OSwgNzksIDgwLCAxMjgsIDc2LCA3OSwgNzksIDIwOCwgNzYsIAotICAgIDc5LCA3OSwgNzgsIDEyOCwgNzYsIDc5LCA3OSwgMjAzLCA3NiwgNzksIDc5LCAxMjgsIDc2LCA3OSwgNzgsIDgzLCA4NSwgCi0gICAgNzcsIDEyOCwgNzYsIDc5LCA3OCwgNzEsIDY1LCAxMjgsIDc2LCA3OSwgNzgsIDcxLCAxOTMsIDc2LCA3OSwgNzgsIDcxLCAKLSAgICA0NSwgNjYsIDgyLCA2NSwgNzgsIDY3LCA3MiwgNDUsIDg5LCA4MiwgMTI4LCA3NiwgNzksIDc4LCA3MSwgNDUsIDY2LCA4MiwgCi0gICAgNjUsIDc4LCA2NywgNzIsIDQ1LCA4MywgNzksIDIwNCwgNzYsIDc5LCA3OCwgNzEsIDQ1LCA2NiwgODIsIDY1LCA3OCwgNjcsIAotICAgIDcyLCA0NSwgNzksIDgzLCAyMTEsIDc2LCA3OSwgNzgsIDcxLCA0NSwgNjYsIDgyLCA2NSwgNzgsIDY3LCA3MiwgNDUsIDc3LCAKLSAgICA2NSwgNjgsIDIxMCwgNzYsIDc5LCA3OCwgNzEsIDQ1LCA2NiwgODIsIDY1LCA3OCwgNjcsIDcyLCA0NSwgNzIsIDY1LCA3MSwgCi0gICAgNjUsIDc2LCAyMDQsIDc2LCA3OSwgNzgsIDcxLCA0NSwgNjYsIDgyLCA2NSwgNzgsIDY3LCA3MiwgNDUsIDY1LCAyMTAsIDc2LCAKLSAgICA3OSwgNzcsIDc3LCA2NSwgNjksIDEyOCwgNzYsIDc5LCA3NywgMTI4LCA3NiwgNzksIDIwNSwgNzYsIDc5LCA3NiwgNzYsIAotICAgIDczLCA4MCwgNzksIDgwLCAxMjgsIDc2LCA3OSwgNzYsIDc2LCAxMjgsIDc2LCA3OSwgNzEsIDIxMCwgNzYsIDc5LCA3MSwgCi0gICAgNzksIDg0LCA4OSwgODAsIDE5NywgNzYsIDc5LCA3MSwgNzksIDcxLCA4MiwgNjUsIDIwNSwgNzYsIDc5LCA3MSwgMTI4LCAKLSAgICA3NiwgNzksIDY4LCA2OSwgODMsIDg0LCA3OSwgNzgsIDY5LCAxMjgsIDc2LCA3OSwgNjcsIDc5LCA3NywgNzksIDg0LCA3MywgCi0gICAgODYsIDY5LCAxMjgsIDc2LCA3OSwgNjcsIDc1LCA3MywgNzgsIDcxLCA0NSwgODMsIDcyLCA3MywgNzAsIDIxMiwgNzYsIDc5LCAKLSAgICA2NywgMjAzLCA3NiwgNzksIDY3LCA2NSwgODQsIDczLCA4NiwgNjksIDEyOCwgNzYsIDc5LCA2NywgNjUsIDg0LCA3MywgNzksIAotICAgIDIwNiwgNzYsIDc5LCA2NSwgMTI4LCA3NiwgNzgsIDEyOCwgNzYsIDc2LCA4NSwgODUsIDEyOCwgNzYsIDc2LCA3OSwgNzksIAotICAgIDEyOCwgNzYsIDc2LCA3NiwgODUsIDg1LCAxMjgsIDc2LCA3NiwgNzYsIDg1LCAxMjgsIDc2LCA3NiwgNzYsIDc5LCA3OSwgCi0gICAgMTI4LCA3NiwgNzYsIDc2LCA3OSwgMTI4LCA3NiwgNzYsIDc2LCA3MywgNzMsIDEyOCwgNzYsIDc2LCA3NiwgNzMsIDEyOCwgCi0gICAgNzYsIDc2LCA3NiwgNjksIDY5LCAxMjgsIDc2LCA3NiwgNzYsIDY5LCAxMjgsIDc2LCA3NiwgNzYsIDY1LCA4NSwgMTI4LCAKLSAgICA3NiwgNzYsIDc2LCA2NSwgNzMsIDEyOCwgNzYsIDc2LCA3NiwgNjUsIDY1LCAxMjgsIDc2LCA3NiwgNzYsIDY1LCAxMjgsIAotICAgIDc2LCA3NiwgNzYsIDEyOCwgNzYsIDc0LCA4NSwgNjgsIDczLCA3NCwgNjksIDEyOCwgNzYsIDc0LCA2OSwgMTI4LCA3NiwgCi0gICAgNzQsIDEyOCwgNzYsIDczLCA4OCwgMTI4LCA3NiwgNzMsIDg3LCA3OCwgMTI4LCA3NiwgNzMsIDg2LCA4MiwgMTk3LCA3NiwgCi0gICAgNzMsIDg0LCA4NCwgNzYsIDE5NywgNzYsIDczLCA4NCwgODQsIDY5LCAyMTAsIDc2LCA3MywgODQsIDgyLCAxOTMsIDc2LCAKLSAgICA3MywgODQsIDEyOCwgNzYsIDczLCA4MywgMjEzLCA3NiwgNzMsIDgyLCAxOTMsIDc2LCA3MywgODEsIDg1LCA3MywgMTk2LCAKLSAgICA3NiwgNzMsIDgxLCAxMjgsIDc2LCA3MywgODAsIDgzLCA4NCwgNzMsIDY3LCA3NSwgMTI4LCA3NiwgNzMsIDc4LCA3NSwgNzMsIAotICAgIDc4LCAxOTksIDc2LCA3MywgNzgsIDIwMywgNzYsIDczLCA3OCwgNzEsIDgzLCA2NSwgMTI4LCA3NiwgNzMsIDc4LCA2OSwgCi0gICAgODMsIDEyOCwgNzYsIDczLCA3OCwgNjksIDIxMSwgNzYsIDczLCA3OCwgNjksIDQ1LCA1NywgMTI4LCA3NiwgNzMsIDc4LCAKLSAgICA2OSwgNDUsIDU1LCAxMjgsIDc2LCA3MywgNzgsIDY5LCA0NSwgNTEsIDEyOCwgNzYsIDczLCA3OCwgNjksIDQ1LCA0OSwgCi0gICAgMTI4LCA3NiwgNzMsIDc3LCA3NywgODUsIDUyLCAxMjgsIDc2LCA3MywgNzcsIDc3LCA4NSwgNTAsIDEyOCwgNzYsIDczLCAKLSAgICA3NywgNzcsIDg1LCAxMjgsIDc2LCA3MywgNzcsIDc3LCAyMTMsIDc2LCA3MywgNzcsIDczLCA4NCwgNjksIDE5NiwgNzYsIAotICAgIDczLCA3NywgNzMsIDg0LCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgNzYsIDczLCA3NywgNzMsIDg0LCAxMjgsIDc2LCA3MywgCi0gICAgNzcsIDY5LCAxMjgsIDc2LCA3MywgNzcsIDY2LCAyMTMsIDc2LCA3MywgNzYsIDg5LCAxMjgsIDc2LCA3MywgNzYsIDczLCAKLSAgICA4NCwgNzIsIDEyOCwgNzYsIDczLCA3NiwgMTI4LCA3NiwgNzMsIDcxLCA3MiwgODQsIDc4LCA3MywgNzgsIDcxLCAxMjgsIAotICAgIDc2LCA3MywgNzEsIDcyLCA4NCwgNzIsIDc5LCA4NSwgODMsIDY5LCAxMjgsIDc2LCA3MywgNzEsIDcyLCA4NCwgMTI4LCA3NiwgCi0gICAgNzMsIDcwLCA2OSwgMTI4LCA3NiwgNzMsIDY5LCA4OCwgMTI4LCA3NiwgNzMsIDY5LCA4NCwgMTI4LCA3NiwgNzMsIDY5LCAKLSAgICA4MCwgMTI4LCA3NiwgNzMsIDY5LCA2OSwgMTI4LCA3NiwgNzMsIDY5LCAxMjgsIDc2LCA3MywgNjgsIDEyOCwgNzYsIDczLCAKLSAgICA2NiwgODIsIDY1LCAxMjgsIDc2LCA3MywgNjYsIDY5LCA4MiwgODQsIDg5LCAxMjgsIDc2LCA3MywgNjUsIDY2LCA3MywgNzYsIAotICAgIDczLCA4NCwgMjE3LCA3NiwgNzIsIDczLCA3MywgMTI4LCA3NiwgNzIsIDY1LCA4NiwgNzMsIDg5LCA2NSwgNzgsIDczLCAKLSAgICAxMjgsIDc2LCA3MiwgNjUsIDE5OSwgNzYsIDcyLCA2NSwgNjUsIDEyOCwgNzYsIDcyLCAxMjgsIDc2LCA2OSwgOTAsIDcyLCAKLSAgICAxMjgsIDc2LCA2OSwgODgsIDEyOCwgNzYsIDY5LCA4NiwgNjksIDIwNCwgNzYsIDY5LCA4NSwgNzcsIDEyOCwgNzYsIDY5LCAKLSAgICA4NSwgNjUsIDY5LCA4MCwgMTI4LCA3NiwgNjksIDg1LCA2NSwgNjksIDc3LCAxMjgsIDc2LCA2OSwgODUsIDEyOCwgNzYsIAotICAgIDY5LCAyMTMsIDc2LCA2OSwgODQsIDg0LCA2OSwgODIsIDgzLCAxMjgsIDc2LCA2OSwgODQsIDg0LCA2OSwgODIsIDEyOCwgCi0gICAgNzYsIDY5LCAyMTIsIDc2LCA2OSwgODMsIDgzLCA2OSwgMjEwLCA3NiwgNjksIDgzLCA4MywgNDUsIDg0LCA3MiwgNjUsIDc4LCAKLSAgICAxMjgsIDc2LCA2OSwgODMsIDgzLCA0NSwgODQsIDcyLCA2NSwgMjA2LCA3NiwgNjksIDgwLCAxMjgsIDc2LCA2OSwgNzksIAotICAgIDgwLCA2NSwgODIsIDY4LCAxMjgsIDc2LCA2OSwgNzksIDEyOCwgNzYsIDY5LCA3OCwgODQsIDczLCA2NywgODUsIDc2LCA2NSwgCi0gICAgMjEwLCA3NiwgNjksIDc4LCA3MywgODMsIDEyOCwgNzYsIDY5LCA3OCwgNzEsIDg0LCA3MiwgNjksIDc4LCA2OSwgODIsIAotICAgIDEyOCwgNzYsIDY5LCA3OCwgNzEsIDg0LCAyMDAsIDc2LCA2OSwgNzgsIDcxLCA2NSwgMTI4LCA3NiwgNjksIDc4LCA3MSwgCi0gICAgMTkzLCA3NiwgNjksIDc3LCA3OSwgNzgsIDEyOCwgNzYsIDY5LCA3NywgNzksIDczLCAxMjgsIDc2LCA2OSwgNzYsIDY5LCAKLSAgICA4NCwgMTI4LCA3NiwgNjksIDc2LCA2OSwgMjEyLCA3NiwgNjksIDIwMywgNzYsIDY5LCA3MywgNzcsIDc3LCA2NSwgMTI4LCAKLSAgICA3NiwgNjksIDczLCA3NywgNzcsIDE5MywgNzYsIDY5LCA3MSwgODMsIDEyOCwgNzYsIDY5LCA3MSwgNzMsIDc5LCA3OCwgCi0gICAgMTI4LCA3NiwgNjksIDcxLCA2OSwgODQsIDc5LCAyMTEsIDc2LCA2OSwgNzEsIDEyOCwgNzYsIDY5LCA3MCwgODQsIDg3LCAKLSAgICA2NSwgODIsIDY4LCA4MywgMTI4LCA3NiwgNjksIDcwLCA4NCwgNDUsIDg0LCA3OSwgNDUsIDgyLCA3MywgNzEsIDcyLCAyMTIsIAotICAgIDc2LCA2OSwgNzAsIDg0LCA0NSwgODMsIDg0LCA2OSwgMjA1LCA3NiwgNjksIDcwLCA4NCwgNDUsIDgzLCA3MywgNjgsIDE5NywgCi0gICAgNzYsIDY5LCA3MCwgODQsIDQ1LCA4MywgNzIsIDY1LCA2OCwgNjksIDE5NiwgNzYsIDY5LCA3MCwgODQsIDQ1LCA4MCwgNzksIAotICAgIDczLCA3OCwgODQsIDczLCA3OCwgMTk5LCA3NiwgNjksIDcwLCA4NCwgNDUsIDcyLCA2NSwgNzgsIDY4LCA2OSwgMTk2LCA3NiwgCi0gICAgNjksIDcwLCA4NCwgNDUsIDcyLCA2NSwgNzgsIDE5NiwgNzYsIDY5LCA3MCwgODQsIDQ1LCA3MCwgNjUsIDY3LCA3MywgNzgsIAotICAgIDE5OSwgNzYsIDY5LCA3MCwgODQsIDEyOCwgNzYsIDY5LCA2OSwgODIsIDY1LCA2OSwgODcsIDY1LCAxMjgsIDc2LCA2OSwgCi0gICAgNjksIDc1LCAxMjgsIDc2LCA2OSwgNjksIDY5LCA2OSwgMTI4LCA3NiwgNjksIDY4LCA3MSwgNjksIDgyLCAxMjgsIDc2LCAKLSAgICA2OSwgNjUsIDg0LCA3MiwgNjksIDgyLCAxMjgsIDc2LCA2OSwgNjUsIDcwLCAxMjgsIDc2LCA2OSwgNjUsIDE5OCwgNzYsIAotICAgIDY5LCA2NSwgNjgsIDczLCA3OCwgMTk5LCA3NiwgNjksIDY1LCA2OCwgNjksIDgyLCAxMjgsIDc2LCA2OSwgNjUsIDE5NiwgCi0gICAgNzYsIDY4LCA2NSwgNzgsIDEyOCwgNzYsIDY4LCA1MCwgMTI4LCA3NiwgNjcsIDIwMSwgNzYsIDY3LCAxOTcsIDc2LCA2NSwgCi0gICAgOTAsIDIxNywgNzYsIDY1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzYsIDY1LCA4OCwgMTI4LCA3NiwgNjUsIDg3LCAKLSAgICAxMjgsIDc2LCA2NSwgMjE1LCA3NiwgNjUsIDg1LCA3NiwgNjUsIDEyOCwgNzYsIDY1LCA4NSwgNzUsIDY1LCAyMTgsIDc2LCAKLSAgICA2NSwgODQsIDczLCA3OCwgNjUsIDg0LCAxOTcsIDc2LCA2NSwgODQsIDczLCA3NSwgMTI4LCA3NiwgNjUsIDg0LCA2OSwgODIsIAotICAgIDY1LCAyMDQsIDc2LCA2NSwgODQsIDE5NywgNzYsIDY1LCA4MywgMjEyLCA3NiwgNjUsIDgyLCA4OSwgNzgsIDcxLCA2OSwgCi0gICAgNjUsIDIwNCwgNzYsIDY1LCA4MiwgNzEsIDY5LCAyMTAsIDc2LCA2NSwgODIsIDcxLCA2OSwgMTI4LCA3NiwgNjUsIDgyLCAKLSAgICA3MSwgMTk3LCA3NiwgNjUsIDgxLCAxMjgsIDc2LCA2NSwgODAsIDY1LCA4MSwgMTI4LCA3NiwgNjUsIDgwLCAxMjgsIDc2LCAKLSAgICA2NSwgNzgsIDg0LCA2OSwgODIsIDc4LCAxMjgsIDc2LCA2NSwgNzgsIDcxLCA4NSwgNjUsIDcxLCAxOTcsIDc2LCA2NSwgNzgsIAotICAgIDY5LCA4MywgMTI4LCA3NiwgNjUsIDc3LCA2OSwgNjgsIDcyLCAxMjgsIDc2LCA2NSwgNzcsIDY5LCA2OCwgMTI4LCA3NiwgCi0gICAgNjUsIDc3LCA2OSwgMTk2LCA3NiwgNjUsIDc3LCA2OSwgMTI4LCA3NiwgNjUsIDc3LCAxOTcsIDc2LCA2NSwgNzcsIDY4LCAKLSAgICA2NSwgMTI4LCA3NiwgNjUsIDc3LCA2OCwgMTI4LCA3NiwgNjUsIDc3LCA2NiwgNjgsIDE5MywgNzYsIDY1LCA3NywgNjUsIAotICAgIDY4LCA3MiwgMTI4LCA3NiwgNjUsIDc2LCAxMjgsIDc2LCA2NSwgMjA0LCA3NiwgNjUsIDc1LCA3NSwgNzIsIDY1LCA3OCwgCi0gICAgNzEsIDg5LCA2NSwgNzksIDEyOCwgNzYsIDY1LCA3NCwgNjUsIDc4LCA4OSwgNjUsIDc2LCA2NSwgNzgsIDEyOCwgNzYsIDY1LCAKLSAgICAyMDEsIDc2LCA2NSwgNzIsIDgzLCA3MiwgODUsIDEyOCwgNzYsIDY1LCA3MiwgMTI4LCA3NiwgNjUsIDcxLCA4NSwgODMsIAotICAgIDEyOCwgNzYsIDY1LCA3MSwgMjEzLCA3NiwgNjUsIDcxLCA2NSwgODIsIDEyOCwgNzYsIDY1LCA3MSwgNjUsIDIxMCwgNzYsIAotICAgIDY1LCA3MSwgNjUsIDY2LCAxMjgsIDc2LCA2NSwgNzEsIDY1LCAxOTQsIDc2LCA2NSwgNjksIDg2LCAxMjgsIDc2LCA2NSwgCi0gICAgNjksIDEyOCwgNzYsIDY1LCA2OCwgMjE3LCA3NiwgNjUsIDY3LCA3NSwgMTI4LCA3NiwgNjUsIDY3LCA2NSwgMTI4LCA3NiwgCi0gICAgNjUsIDY2LCA3OSwgODUsIDgyLCA3MywgNzgsIDcxLCAxMjgsIDc2LCA2NSwgNjYsIDc5LCA4MiwgMTI4LCA3NiwgNjUsIDY2LCAKLSAgICA3MywgNjUsIDc2LCA3MywgOTAsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDc2LCA2NSwgNjYsIDczLCA2NSwgMjA0LCA3NiwgNjUsIAotICAgIDY2LCA2NSwgODQsIDEyOCwgNzYsIDY1LCA2NSwgNzgsIDY1LCA2OSwgMTI4LCA3NiwgNjUsIDY1LCA3OCwgMTI4LCA3NiwgCi0gICAgNjUsIDY1LCA3NywgODUsIDEyOCwgNzYsIDY1LCA2NSwgNzcsIDEyOCwgNzYsIDY1LCA2NSwgNzMsIDEyOCwgNzYsIDQ4LCAKLSAgICA0OCwgNTQsIDY1LCAxMjgsIDc2LCA0OCwgNDgsIDUwLCA2NSwgMTI4LCA3NiwgNDUsIDg0LCA4OSwgODAsIDE5NywgNzYsIAotICAgIDQ1LCA4MywgNzIsIDY1LCA4MCwgNjksIDE5NiwgNzUsIDg5LCA4NSwgODIsIDczLCA3MywgMTI4LCA3NSwgODksIDg1LCAKLSAgICAxMjgsIDc1LCA4OSwgNzksIDEyOCwgNzUsIDg5LCA3NiwgNzMsIDgzLCA3NywgNjUsIDEyOCwgNzUsIDg5LCA3MywgMTI4LCAKLSAgICA3NSwgODksIDY5LCAxMjgsIDc1LCA4OSwgNjUsIDg0LCA3MiwgNzksIDIxMSwgNzUsIDg5LCA2NSwgNjUsIDEyOCwgNzUsIAotICAgIDg5LCA2NSwgMTI4LCA3NSwgODgsIDg3LCA3MywgMTI4LCA3NSwgODgsIDg3LCA2OSwgNjksIDEyOCwgNzUsIDg4LCA4NywgCi0gICAgNjksIDEyOCwgNzUsIDg4LCA4NywgNjUsIDY1LCAxMjgsIDc1LCA4OCwgODcsIDY1LCAxMjgsIDc1LCA4OCwgODUsIDEyOCwgCi0gICAgNzUsIDg4LCA3OSwgMTI4LCA3NSwgODgsIDczLCAxMjgsIDc1LCA4OCwgNjksIDY5LCAxMjgsIDc1LCA4OCwgNjksIDEyOCwgCi0gICAgNzUsIDg4LCA2NSwgNjUsIDEyOCwgNzUsIDg4LCA2NSwgMTI4LCA3NSwgODcsIDg1LCA1MSwgNDksIDU2LCAxMjgsIDc1LCAKLSAgICA4NywgNzksIDc5LCAxMjgsIDc1LCA4NywgNzksIDEyOCwgNzUsIDg3LCA3MywgNzMsIDEyOCwgNzUsIDg3LCA3MywgMTI4LCAKLSAgICA3NSwgODcsIDY5LCA2OSwgMTI4LCA3NSwgODcsIDY5LCAxMjgsIDc1LCA4NywgNjUsIDg5LCAxMjgsIDc1LCA4NywgNjUsIAotICAgIDY5LCA4NCwgMTI4LCA3NSwgODcsIDY1LCA2NSwgMTI4LCA3NSwgODYsIDY1LCAxMjgsIDc1LCA4NiwgMTI4LCA3NSwgODUsIAotICAgIDg4LCAxMjgsIDc1LCA4NSwgODUsIDcyLCAxMjgsIDc1LCA4NSwgODQsIDEyOCwgNzUsIDg1LCA4MywgNzcsIDY1LCAxMjgsIAotICAgIDc1LCA4NSwgODMsIDcyLCA4NSwgNTAsIDEyOCwgNzUsIDg1LCA4MiwgODgsIDEyOCwgNzUsIDg1LCA4MiwgODUsIDkwLCA2OSwgCi0gICAgNzMsIDgyLCA3OSwgMTI4LCA3NSwgODUsIDgyLCA4NCwgMTI4LCA3NSwgODUsIDgyLCA3OSwgNzksIDc4LCA2OSwgMTI4LCAKLSAgICA3NSwgODUsIDgyLCAxMjgsIDc1LCA4NSwgMjEwLCA3NSwgODUsIDgxLCAxMjgsIDc1LCA4NSwgNzksIDg4LCAxMjgsIDc1LCAKLSAgICA4NSwgNzksIDgwLCAxMjgsIDc1LCA4NSwgNzksIDIwOCwgNzUsIDg1LCA3OSwgNzcsIDEyOCwgNzUsIDg1LCA3OSwgMTI4LCAKLSAgICA3NSwgODUsIDc4LCA3MSwgMTI4LCA3NSwgODUsIDc4LCA2OCwgNjgsIDY1LCA3NiwgNzMsIDg5LCA2NSwgMTI4LCA3NSwgODUsIAotICAgIDc2LCAxMjgsIDc1LCA4NSwgMjA0LCA3NSwgODUsIDY5LCA4NCwgMTI4LCA3NSwgODUsIDU1LCAxMjgsIDc1LCA4NSwgNTIsIAotICAgIDEyOCwgNzUsIDg1LCAxODAsIDc1LCA4NSwgNTEsIDEyOCwgNzUsIDg1LCAxNzksIDc1LCA4NCwgMTI4LCA3NSwgODMsIDgzLCAKLSAgICA4NSwgODUsIDEyOCwgNzUsIDgzLCA4MywgODUsIDEyOCwgNzUsIDgzLCA4MywgNzksIDc5LCAxMjgsIDc1LCA4MywgODMsIAotICAgIDc5LCAxMjgsIDc1LCA4MywgODMsIDczLCA3MywgMTI4LCA3NSwgODMsIDgzLCA3MywgMTI4LCA3NSwgODMsIDgzLCA2OSwgCi0gICAgNjksIDEyOCwgNzUsIDgzLCA4MywgNjksIDEyOCwgNzUsIDgzLCA4MywgNjUsIDg1LCAxMjgsIDc1LCA4MywgODMsIDY1LCAKLSAgICA3MywgMTI4LCA3NSwgODMsIDgzLCA2NSwgNjUsIDEyOCwgNzUsIDgzLCA4MywgNjUsIDEyOCwgNzUsIDgzLCA4MywgMTI4LCAKLSAgICA3NSwgODMsIDczLCAxMjgsIDc1LCA4MiwgNjksIDc3LCA2NSwgODMsIDg0LCA3MywgMTI4LCA3NSwgODIsIDY1LCA4NCwgNzMsIAotICAgIDc3LCA3OSwgODksIDgwLCA3OSwgODIsIDgyLCA3OSwgNzksIDc4LCAxMjgsIDc1LCA4MiwgNjUsIDg0LCA3MywgNzcsIDc5LCAKLSAgICA3NSwgNzksIDg1LCA3MCwgNzMsIDgzLCA3NywgNjUsIDEyOCwgNzUsIDgyLCA2NSwgODQsIDczLCA3NywgNjUsIDg0LCA2NSwgCi0gICAgMTI4LCA3NSwgODIsIDY1LCA4NCwgNzMsIDc3LCAxOTMsIDc1LCA4MCwgODUsIDEyOCwgNzUsIDgwLCA3OSwgODEsIDEyOCwgCi0gICAgNzUsIDgwLCA3OSwgNzksIDEyOCwgNzUsIDgwLCA3OSwgMTI4LCA3NSwgODAsIDczLCAxMjgsIDc1LCA4MCwgNjksIDg1LCAKLSAgICA4OCwgMTI4LCA3NSwgODAsIDY5LCA2OSwgMTI4LCA3NSwgODAsIDY5LCAxMjgsIDc1LCA4MCwgNjUsIDgyLCA2NSwgODEsIAotICAgIDEyOCwgNzUsIDgwLCA2NSwgNzgsIDEyOCwgNzUsIDgwLCA2NSwgMTI4LCA3NSwgNzksIDg4LCAxMjgsIDc1LCA3OSwgODYsIAotICAgIDg1LCA4NSwgMTI4LCA3NSwgNzksIDg0LCA3OSwgMTI4LCA3NSwgNzksIDgyLCA4NSwgNzgsIDY1LCAxMjgsIDc1LCA3OSwgCi0gICAgODIsIDc5LCA3OCwgNzMsIDgzLCAxMjgsIDc1LCA3OSwgODIsIDY5LCA2NSwgMjA2LCA3NSwgNzksIDgyLCA2NSwgNzgsIDczLCAKLSAgICAxOTUsIDc1LCA3OSwgODEsIDc4LCA2OCwgNzksIDc4LCAxMjgsIDc1LCA3OSwgODAsIDgwLCA2NSwgMTI4LCA3NSwgNzksIAotICAgIDgwLCAxMjgsIDc1LCA3OSwgNzksIDgwLCA3OSwgMTI4LCA3NSwgNzksIDc5LCA3NywgODUsIDg1LCA4NCwgMTI4LCA3NSwgCi0gICAgNzksIDc5LCAxMjgsIDc1LCA3OSwgNzgsIDg0LCA2OSwgODYsIDc3LCA2NSwgMTI4LCA3NSwgNzksIDc4LCA4NCwgNjksIDg2LCAKLSAgICA3NywgMTkzLCA3NSwgNzksIDc3LCAyMDEsIDc1LCA3OSwgNzcsIDY2LCA4NSwgODYsIDY1LCAxMjgsIDc1LCA3OSwgNzcsIAotICAgIDY2LCA4NSwgODYsIDE5MywgNzUsIDc5LCA3NywgNjYsIDIxMywgNzUsIDc5LCA3NSwgNzksIDEyOCwgNzUsIDc5LCA3NSwgCi0gICAgMTI4LCA3NSwgNzksIDIwMywgNzUsIDc5LCA3MywgMTI4LCA3NSwgNzksIDIwMSwgNzUsIDc5LCA3MiwgMTI4LCA3NSwgNzksIAotICAgIDcxLCA3MiwgNzksIDc3LCAxMjgsIDc1LCA3OSwgNjksIDg0LCAxMjgsIDc1LCA3OSwgNjUsIDc2LCA2NSwgMTI4LCA3NSwgCi0gICAgNzksIDY1LCAxMjgsIDc1LCA3OCwgNzMsIDcxLCA3MiwgODQsIDEyOCwgNzUsIDc4LCA3MywgNzEsIDcyLCAyMTIsIDc1LCAKLSAgICA3OCwgNzMsIDcwLCA2OSwgMTI4LCA3NSwgNzgsIDczLCA3MCwgMTk3LCA3NSwgNzcsIDEyOCwgNzUsIDIwNSwgNzUsIDc2LCAKLSAgICA3MywgODQsIDc5LCA3OCwgMTI4LCA3NSwgNzYsIDY1LCA4MywgNzcsIDY1LCAxMjgsIDc1LCA3NiwgNjUsIDgzLCA3NywgCi0gICAgMTkzLCA3NSwgNzYsIDY1LCAxMjgsIDc1LCA3NiwgMTI4LCA3NSwgNzUsIDg1LCAxMjgsIDc1LCA3NSwgNzksIDEyOCwgNzUsIAotICAgIDc1LCA3MywgMTI4LCA3NSwgNzUsIDY5LCA2OSwgMTI4LCA3NSwgNzUsIDY5LCAxMjgsIDc1LCA3NSwgNjUsIDEyOCwgNzUsIAotICAgIDc1LCAxMjgsIDc1LCA3NCwgNjksIDEyOCwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgNDUsIDg0LCA3MywgNzUsIDY5LCA4NSwgCi0gICAgODQsIDEyOCwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgNDUsIDgzLCA3MywgNzksIDgzLCA0NSwgNzUsIDczLCA4OSwgNjksIAotICAgIDc5LCA3NSwgMTI4LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCA0NSwgODIsIDczLCA2OSwgODUsIDc2LCAxMjgsIDc1LCA3MywgCi0gICAgODksIDY5LCA3OSwgNzUsIDQ1LCA4MCwgNzMsIDY5LCA4NSwgODAsIDEyOCwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgNDUsIAotICAgIDc4LCA3MywgNjksIDg1LCA3OCwgMTI4LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCA0NSwgNzUsIDcyLCA3MywgNjksIDg1LCAKLSAgICA3NSwgNzIsIDEyOCwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgNDUsIDY3LCA3MiwgNzMsIDY5LCA4NSwgNjcsIDcyLCAxMjgsIAotICAgIDc1LCA3MywgODksIDY5LCA3OSwgMjAzLCA3NSwgNzMsIDg4LCAxMjgsIDc1LCA3MywgODQsIDEyOCwgNzUsIDczLCA4MywgCi0gICAgODMsIDczLCA3OCwgMTk5LCA3NSwgNzMsIDgzLCA4MywgMTI4LCA3NSwgNzMsIDgzLCAyMTEsIDc1LCA3MywgODMsIDczLCAKLSAgICA3NywgNTMsIDEyOCwgNzUsIDczLCA4MywgNzMsIDc3LCAxODEsIDc1LCA3MywgODMsIDcyLCAxMjgsIDc1LCA3MywgODMsIAotICAgIDY1LCA3NiwgMTI4LCA3NSwgNzMsIDgyLCA3OSwgODcsIDY1LCA4NCwgODQsIDc5LCAxMjgsIDc1LCA3MywgODIsIDc5LCA3NywgCi0gICAgNjksIDY5LCA4NCwgNzksIDgyLCA4NSwgMTI4LCA3NSwgNzMsIDgyLCA3OSwgNzEsIDg1LCA4MiwgNjUsIDc3LCA4NSwgMTI4LCAKLSAgICA3NSwgNzMsIDgyLCA3OSwgMTI4LCA3NSwgNzMsIDgyLCA3MSwgNzIsIDczLCAyMTgsIDc1LCA3MywgODEsIDEyOCwgNzUsIAotICAgIDczLCA4MCwgMTI4LCA3NSwgNzMsIDIwOCwgNzUsIDczLCA3OCwgODMsIDcyLCA3MywgODAsIDEyOCwgNzUsIDczLCA3OCwgCi0gICAgNjgsIDY5LCA4MiwgNzEsIDY1LCA4MiwgODQsIDY5LCA3OCwgMTI4LCA3NSwgNzMsIDc3LCA3OSwgNzgsIDc5LCAxMjgsIDc1LCAKLSAgICA3MywgNzMsIDEyOCwgNzUsIDczLCA3MiwgMTI4LCA3NSwgNzMsIDY5LCA4OCwgMTI4LCA3NSwgNzMsIDY5LCA4MCwgMTI4LCAKLSAgICA3NSwgNzMsIDY5LCA2OSwgNzcsIDEyOCwgNzUsIDczLCA2OSwgMTI4LCA3NSwgNzMsIDY4LCAxMjgsIDc1LCA3MywgMTk2LCAKLSAgICA3NSwgNzMsIDY3LCA3NSwgMTI4LCA3NSwgNzIsIDkwLCAxMjgsIDc1LCA3MiwgODcsIDY1LCA3MywgMTI4LCA3NSwgNzIsIAotICAgIDg1LCA2OSwgNzgsIDQ1LCA3NiwgODUsIDE5NywgNzUsIDcyLCA4NSwgNjksIDIwNiwgNzUsIDcyLCA4NSwgNjgsIDY1LCA3NywgCi0gICAgMTI4LCA3NSwgNzIsIDg1LCA2NSwgODQsIDEyOCwgNzUsIDcyLCA3OSwgODUsIDEyOCwgNzUsIDcyLCA3OSwgMjEyLCA3NSwgCi0gICAgNzIsIDc5LCA3OCwgMTI4LCA3NSwgNzIsIDc5LCA3NywgODUsIDg0LCAxMjgsIDc1LCA3MiwgNzksIDEyOCwgNzUsIDcyLCAKLSAgICAyMDcsIDc1LCA3MiwgNzcsIDIxMywgNzUsIDcyLCA3MywgODQsIDEyOCwgNzUsIDcyLCA3MywgNzgsIDg5LCA2NSwgMTI4LCAKLSAgICA3NSwgNzIsIDczLCA2OSwgODUsIDc1LCAyMDAsIDc1LCA3MiwgNzMsIDEyOCwgNzUsIDcyLCA3MiwgNzksIDEyOCwgNzUsIAotICAgIDcyLCA3MiwgNjUsIDEyOCwgNzUsIDcyLCA2OSwgODQsIDcyLCAxMjgsIDc1LCA3MiwgNjksIDczLCAxMjgsIDc1LCA3MiwgCi0gICAgNjksIDY5LCAxMjgsIDc1LCA3MiwgNjksIDEyOCwgNzUsIDcyLCA2NSwgODIsIDc5LCA4MywgNzIsIDg0LCA3MiwgMjAxLCAKLSAgICA3NSwgNzIsIDY1LCA4MiwgMTI4LCA3NSwgNzIsIDY1LCA4MCwgNzIsIDEyOCwgNzUsIDcyLCA2NSwgNzgsIDE5OSwgNzUsIAotICAgIDcyLCA2NSwgNzgsIDY4LCAxOTMsIDc1LCA3MiwgNjUsIDc4LCAxMjgsIDc1LCA3MiwgNjUsIDc3LCA4NCwgMjAxLCA3NSwgCi0gICAgNzIsIDY1LCA3NSwgNjUsIDgzLCA4MywgNzMsIDY1LCAyMDYsIDc1LCA3MiwgNjUsIDczLCAxMjgsIDc1LCA3MiwgNjUsIDcyLCAKLSAgICAxMjgsIDc1LCA3MiwgNjUsIDIwMCwgNzUsIDcyLCA2NSwgNjUsIDEyOCwgNzUsIDcxLCAxMjgsIDc1LCA2OSwgODksIDY3LCAKLSAgICA2NSwgODAsIDEyOCwgNzUsIDY5LCA4OSwgNjcsIDY1LCAyMDgsIDc1LCA2OSwgODksIDY2LCA3OSwgNjUsIDgyLCA2OCwgCi0gICAgMTI4LCA3NSwgNjksIDg4LCAxMjgsIDc1LCA2OSwgODUsIDg5LCA2OSwgODUsIDg4LCAxMjgsIDc1LCA2OSwgODUsIDgzLCAKLSAgICA3MiwgNjksIDg1LCA2NSwgNjksIDgwLCAxMjgsIDc1LCA2OSwgODUsIDgzLCA2OSwgODUsIDg4LCAxMjgsIDc1LCA2OSwgODUsIAotICAgIDgwLCA4NSwgODEsIDEyOCwgNzUsIDY5LCA4NSwgNzksIDIxMiwgNzUsIDY5LCA4NSwgNzcsIDEyOCwgNzUsIDY5LCA4NSwgCi0gICAgNzUsIDY5LCA4NSwgODQsIDc4LCA2OCwgNjUsIDEyOCwgNzUsIDY5LCA4NSwgNzUsIDY1LCA4MSwgMTI4LCA3NSwgNjksIDg1LCAKLSAgICA2NSwgNjksIDg0LCA3NywgNjksIDg1LCA3OCwgMTI4LCA3NSwgNjksIDg1LCA2NSwgNjksIDgyLCA3MywgMTI4LCA3NSwgNjksIAotICAgIDg0LCA4NCwgMjAxLCA3NSwgNjksIDgzLCA3MiwgNTAsIDEyOCwgNzUsIDY5LCA4MiwgNjksIDg0LCAxMjgsIDc1LCA2OSwgCi0gICAgNzksIDg3LCAxMjgsIDc1LCA2OSwgNzgsIDg0LCA3MywgNzcsIDY1LCA4NCwgNjUsIDEyOCwgNzUsIDY5LCA3OCwgODQsIDczLCAKLSAgICA3NywgNjUsIDg0LCAxOTMsIDc1LCA2OSwgNzgsIDg0LCA3MywgNzcsIDE5MywgNzUsIDY5LCA3OCwgNjUsIDg0LCAxMjgsIAotICAgIDc1LCA2OSwgNzgsIDEyOCwgNzUsIDY5LCAyMDYsIDc1LCA2OSwgNzcsIDgwLCA4NSwgNzYsIDEyOCwgNzUsIDY5LCA3NywgCi0gICAgODAsIDg1LCAyMDQsIDc1LCA2OSwgNzcsIDgwLCA3NiwgNzMsIDEyOCwgNzUsIDY5LCA3NywgODAsIDc2LCAyMDEsIDc1LCAKLSAgICA2OSwgNzcsIDgwLCA3MiwgODIsIDY5LCA3OCwgNzEsIDEyOCwgNzUsIDY5LCA3NywgNjYsIDY1LCA3OCwgNzEsIDEyOCwgNzUsIAotICAgIDY5LCA3NiwgODYsIDczLCAyMDYsIDc1LCA2OSwgNzIsIDY5LCA3MiwgMTI4LCA3NSwgNjksIDcyLCA2OSwgMjAwLCA3NSwgCi0gICAgNjksIDcyLCAxMjgsIDc1LCA2OSwgNzAsIDg1LCA3NiwgNjUsIDEyOCwgNzUsIDY5LCA2OSwgODMsIDg1LCAxMjgsIDc1LCAKLSAgICA2OSwgNjksIDgwLCA3MywgNzgsIDE5OSwgNzUsIDY5LCA2OSwgNzgsIDcxLCAxMjgsIDc1LCA2NywgNjUsIDc2LCAxMjgsIAotICAgIDc1LCA2NiwgMTI4LCA3NSwgNjUsIDkwLCA2NSwgNzUsIDIwMCwgNzUsIDY1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgCi0gICAgNzUsIDY1LCA4OSwgNjUsIDIwMCwgNzUsIDY1LCA4OCwgMTI4LCA3NSwgNjUsIDg3LCA3MywgMTI4LCA3NSwgNjUsIDg2LCAKLSAgICA4OSwgNzUsIDY1LCAxMjgsIDc1LCA2NSwgODUsIDc4LCA2NSwgMTI4LCA3NSwgNjUsIDg1LCAyMDYsIDc1LCA2NSwgODUsIAotICAgIDEyOCwgNzUsIDY1LCA4NCwgNzksIDEyOCwgNzUsIDY1LCA4NCwgNzIsIDczLCA4MywgODQsIDczLCAxMjgsIDc1LCA2NSwgCi0gICAgODQsIDcyLCA2NSwgNzUsIDE5MywgNzUsIDY1LCA4NCwgNjUsIDg2LCA2NSwgODMsIDc3LCA2NSwgMTI4LCA3NSwgNjUsIDg0LCAKLSAgICA2NSwgODYsIDE5MywgNzUsIDY1LCA4NCwgNjUsIDc1LCA2NSwgNzgsIDY1LCA0NSwgNzIsIDczLCA4MiwgNjUsIDcxLCA2NSwgCi0gICAgNzgsIDE5MywgNzUsIDY1LCA4MywgODIsIDY1LCA4NCwgNjUsIDc4LCAxMjgsIDc1LCA2NSwgODMsIDgyLCA2NSwgODQsIDY1LCAKLSAgICAyMDYsIDc1LCA2NSwgODMsIDgyLCA2NSwgMTI4LCA3NSwgNjUsIDgzLCA4MiwgMTkzLCA3NSwgNjUsIDgzLCA3NSwgNjUsIAotICAgIDc2LCAxMjgsIDc1LCA2NSwgODMsIDc1LCA2NSwgMjA0LCA3NSwgNjUsIDgzLCA3MiwgNzcsIDczLCA4MiwgMjAxLCA3NSwgCi0gICAgNjUsIDgyLCA4MywgNzIsIDY1LCA3OCwgNjUsIDEyOCwgNzUsIDY1LCA4MiwgNzksIDgyLCA3MywgNzMsIDEyOCwgNzUsIDY1LCAKLSAgICA4MiwgMjA3LCA3NSwgNjUsIDgyLCA2OSwgMjA2LCA3NSwgNjUsIDgyLCA2NSwgODQsIDg0LCA3OSwgMTI4LCA3NSwgNjUsIAotICAgIDgyLCA2NSwgNzgsIDEyOCwgNzUsIDY1LCA4MCwgODksIDY5LCA3OSwgODUsIDc4LCA4MywgODMsIDY1LCA3OCwgNzEsIDgwLCAKLSAgICA3MywgNjksIDg1LCA4MCwgMTI4LCA3NSwgNjUsIDgwLCA4OSwgNjksIDc5LCA4NSwgNzgsIDgyLCA3MywgNjksIDg1LCA3NiwgCi0gICAgMTI4LCA3NSwgNjUsIDgwLCA4OSwgNjksIDc5LCA4NSwgNzgsIDgwLCA3MiwgNzMsIDY5LCA4NSwgODAsIDcyLCAxMjgsIDc1LCAKLSAgICA2NSwgODAsIDg5LCA2OSwgNzksIDg1LCA3OCwgNzcsIDczLCA2OSwgODUsIDc3LCAxMjgsIDc1LCA2NSwgODAsIDgwLCA2NSwgCi0gICAgMTI4LCA3NSwgNjUsIDgwLCA4MCwgMTkzLCA3NSwgNjUsIDgwLCA3OSwgMTI4LCA3NSwgNjUsIDgwLCA3MiwgMTI4LCA3NSwgCi0gICAgNjUsIDgwLCA2NSwgNzYsIDEyOCwgNzUsIDY1LCA4MCwgNjUsIDEyOCwgNzUsIDY1LCA3OCwgODQsIDY1LCA3NCwgMTkzLCAKLSAgICA3NSwgNjUsIDc4LCA3MSwgMTI4LCA3NSwgNjUsIDc4LCAxOTksIDc1LCA2NSwgNzgsIDY1LCA3NSwgNzksIDEyOCwgNzUsIAotICAgIDY1LCA3NywgNTIsIDEyOCwgNzUsIDY1LCA3NywgNTAsIDEyOCwgNzUsIDY1LCA3NywgMTI4LCA3NSwgNjUsIDc1LCA3OSwgCi0gICAgMTI4LCA3NSwgNjUsIDc1LCA2NSwgNjYsIDY1LCA4NCwgMTI4LCA3NSwgNjUsIDc1LCAxMjgsIDc1LCA2NSwgMjAzLCA3NSwgCi0gICAgNjUsIDczLCA4NCwgNzIsIDIwMSwgNzUsIDY1LCA3MywgODIsIDczLCAxMjgsIDc1LCA2NSwgNzMsIDEyOCwgNzUsIDY1LCAKLSAgICAyMDEsIDc1LCA2NSwgNzAsIDY1LCAxMjgsIDc1LCA2NSwgNzAsIDEyOCwgNzUsIDY1LCAxOTgsIDc1LCA2NSwgNjgsIDUzLCAKLSAgICAxMjgsIDc1LCA2NSwgNjgsIDE4MSwgNzUsIDY1LCA2OCwgNTIsIDEyOCwgNzUsIDY1LCA2OCwgNTEsIDEyOCwgNzUsIDY1LCAKLSAgICA2OCwgMTc5LCA3NSwgNjUsIDY4LCA1MCwgMTI4LCA3NSwgNjUsIDY4LCAxMjgsIDc1LCA2NSwgNjYsIDE5MywgNzUsIDY1LCAKLSAgICA2NiwgMTI4LCA3NSwgNjUsIDY1LCA3MywgMTI4LCA3NSwgNjUsIDY1LCA3MCwgODUsIDEyOCwgNzUsIDY1LCA2NSwgNzAsIAotICAgIDEyOCwgNzUsIDY1LCA1MCwgMTI4LCA3NSwgNjUsIDE3OCwgNzUsIDQ4LCA0OCwgNTYsIDEyOCwgNzUsIDQ4LCA0OCwgNTUsIAotICAgIDEyOCwgNzUsIDQ4LCA0OCwgNTQsIDEyOCwgNzUsIDQ4LCA0OCwgNTMsIDEyOCwgNzUsIDQ4LCA0OCwgNTIsIDEyOCwgNzUsIAotICAgIDQ4LCA0OCwgNTEsIDEyOCwgNzUsIDQ4LCA0OCwgNTAsIDEyOCwgNzUsIDQ4LCA0OCwgNDksIDEyOCwgNzQsIDg3LCA2NSwgCi0gICAgMTI4LCA3NCwgODUsIDg1LCAxMjgsIDc0LCA4NSwgODQsIDEyOCwgNzQsIDg1LCA4MywgODQsIDczLCA3MCwgNzMsIDY3LCAKLSAgICA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgNzQsIDg1LCA4MCwgNzMsIDg0LCA2OSwgODIsIDEyOCwgNzQsIDg1LCA3OSwgODQsIAotICAgIDEyOCwgNzQsIDg1LCA3OSwgODAsIDEyOCwgNzQsIDg1LCA3OCwgNzksIDEyOCwgNzQsIDg1LCA3OCwgNjksIDEyOCwgNzQsIAotICAgIDg1LCA3NiwgODksIDEyOCwgNzQsIDg1LCA2OSwgODUsIDczLCAxMjgsIDc0LCA4NSwgNjgsIDg1LCA3NiwgMTI4LCA3NCwgCi0gICAgODUsIDY4LCA3MSwgNjksIDEyOCwgNzQsIDg1LCA2OCwgNjksIDc5LCA0NSwgODMsIDgwLCA2NSwgNzgsIDczLCA4MywgMjAwLCAKLSAgICA3NCwgNzksIDg5LCA3OSwgODUsIDIxMSwgNzQsIDc5LCA4OSwgMTI4LCA3NCwgNzksIDg2LCA2OSwgMTI4LCA3NCwgNzksIAotICAgIDIxMiwgNzQsIDc5LCA3OCwgNzEsIDEyOCwgNzQsIDc5LCA3OCwgMTkzLCA3NCwgNzksIDc1LCA2OSwgODIsIDEyOCwgNzQsIAotICAgIDc5LCA3MywgNzgsIDY5LCA2OCwgMTI4LCA3NCwgNzksIDczLCA3OCwgMTI4LCA3NCwgNzksIDY1LCAxMjgsIDc0LCA3NCwgCi0gICAgODksIDg4LCAxMjgsIDc0LCA3NCwgODksIDg0LCAxMjgsIDc0LCA3NCwgODksIDgwLCAxMjgsIDc0LCA3NCwgODksIDEyOCwgCi0gICAgNzQsIDc0LCA4NSwgODgsIDEyOCwgNzQsIDc0LCA4NSwgODQsIDEyOCwgNzQsIDc0LCA4NSwgODIsIDg4LCAxMjgsIDc0LCAKLSAgICA3NCwgODUsIDgyLCAxMjgsIDc0LCA3NCwgODUsIDgwLCAxMjgsIDc0LCA3NCwgODUsIDc5LCA4OCwgMTI4LCA3NCwgNzQsIAotICAgIDg1LCA3OSwgODAsIDEyOCwgNzQsIDc0LCA4NSwgNzksIDEyOCwgNzQsIDc0LCA4NSwgMTI4LCA3NCwgNzQsIDc5LCA4OCwgCi0gICAgMTI4LCA3NCwgNzQsIDc5LCA4NCwgMTI4LCA3NCwgNzQsIDc5LCA4MCwgMTI4LCA3NCwgNzQsIDc5LCAxMjgsIDc0LCA3NCwgCi0gICAgNzMsIDg4LCAxMjgsIDc0LCA3NCwgNzMsIDg0LCAxMjgsIDc0LCA3NCwgNzMsIDgwLCAxMjgsIDc0LCA3NCwgNzMsIDY5LCAKLSAgICA4OCwgMTI4LCA3NCwgNzQsIDczLCA2OSwgODQsIDEyOCwgNzQsIDc0LCA3MywgNjksIDgwLCAxMjgsIDc0LCA3NCwgNzMsIAotICAgIDY5LCAxMjgsIDc0LCA3NCwgNzMsIDEyOCwgNzQsIDc0LCA2OSwgNjksIDEyOCwgNzQsIDc0LCA2OSwgMTI4LCA3NCwgNzQsIAotICAgIDY1LCAxMjgsIDc0LCA3MywgNzYsIDEyOCwgNzQsIDczLCA3MywgMTI4LCA3NCwgNzMsIDcyLCA4NiwgNjUsIDc3LCA4NSwgCi0gICAgNzYsIDczLCA4OSwgNjUsIDEyOCwgNzQsIDczLCA2NSwgMTI4LCA3NCwgNzIsIDc5LCAxMjgsIDc0LCA3MiwgNjksIDcyLCAKLSAgICAxMjgsIDc0LCA3MiwgNjUsIDc4LCAxMjgsIDc0LCA3MiwgNjUsIDc3LCAxMjgsIDc0LCA3MiwgNjUsIDY1LCAxMjgsIDc0LCAKLSAgICA3MiwgNjUsIDEyOCwgNzQsIDY5LCA4NSwgMTI4LCA3NCwgNjksIDgyLCA4NSwgODMsIDY1LCA3NiwgNjksIDc3LCAxMjgsIAotICAgIDc0LCA2OSwgODIsIDY1LCAyMDYsIDc0LCA2OSwgODIsIDY1LCAxMjgsIDc0LCA2OSwgODIsIDEyOCwgNzQsIDY5LCA3MiwgCi0gICAgMTI4LCA3NCwgNjksIDIwMCwgNzQsIDY5LCA3MSwgNzksIDcxLCA2NSwgNzgsIDEyOCwgNzQsIDY5LCA2OSwgNzcsIDEyOCwgCi0gICAgNzQsIDY5LCA2NSwgNzgsIDgzLCAxMjgsIDc0LCA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDc0LCA2NSwgODYsIDczLCAKLSAgICA4OSwgNjUsIDc4LCA3MywgMTI4LCA3NCwgNjUsIDg1LCAxMjgsIDc0LCA2NSwgODIsIDEyOCwgNzQsIDY1LCA4MCwgNjUsIAotICAgIDc4LCA2OSwgODMsIDE5NywgNzQsIDY1LCA4MCwgNjUsIDc4LCAxMjgsIDc0LCA2NSwgNzgsIDg1LCA2NSwgODIsIDg5LCAKLSAgICAxMjgsIDc0LCA2NSwgNzYsIDc2LCA2NSwgNzQsIDY1LCA3NiwgNjUsIDc2LCA3OSwgODUsIDcyLCA3OSwgODUsIDEyOCwgNzQsIAotICAgIDY1LCA3MywgMTI4LCA3NCwgNjUsIDcyLCAxMjgsIDc0LCA2NSwgNjgsIDY5LCAxMjgsIDc0LCA2NSwgNjcsIDc1LCA0NSwgCi0gICAgNzksIDQ1LCA3NiwgNjUsIDc4LCA4NCwgNjksIDgyLCA3OCwgMTI4LCA3NCwgNjUsIDY3LCAyMDMsIDc0LCA0NSwgODMsIDczLCAKLSAgICA3NywgODAsIDc2LCA3MywgNzAsIDczLCA2OSwgMTk2LCAyMDIsIDczLCA5MCwgNzIsIDczLCA4NCwgODMsIDY1LCAxMjgsIAotICAgIDczLCA5MCwgNzIsIDczLCA4NCwgODMsIDE5MywgNzMsIDkwLCA3MiwgNjksIDEyOCwgNzMsIDkwLCA2NSwgNzUsIDY1LCA4OSwgCi0gICAgMTkzLCA3MywgODksIDY5LCA3NSwgMTI4LCA3MywgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDczLCA4NSwgNzQsIDY1LCAKLSAgICAxMjgsIDczLCA4NSwgMTI4LCA3MywgODQsIDIxMSwgNzMsIDg0LCA2OSwgODIsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDczLCAKLSAgICA4NCwgNjksIDc3LCAxMjgsIDczLCA4MywgODMsIDcyLCA2NSwgODIsIDEyOCwgNzMsIDgzLCA3OSwgNzgsIDEyOCwgNzMsIAotICAgIDgzLCA3OSwgMjA2LCA3MywgODMsIDY5LCA3OCwgNDUsIDczLCA4MywgNjksIDc4LCAxMjgsIDczLCA4MywgNjUsIDc1LCA3MywgCi0gICAgMTkzLCA3MywgODMsIDQ1LCA4MCwgNzMsIDc2LCA3NiwgNjUsIDEyOCwgNzMsIDgyLCA4NSwgODksIDY1LCA3OCwgNzgsIDY1LCAKLSAgICAxMjgsIDczLCA4MiwgODUsIDg1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzMsIDgyLCA3OSwgNzgsIDQ1LCA2NywgNzksIAotICAgIDgwLCA4MCwgNjksIDIxMCwgNzMsIDgyLCA3OSwgNzgsIDEyOCwgNzMsIDc5LCA4NCwgNzMsIDcwLCA3MywgNjksIDE5NiwgCi0gICAgNzMsIDc5LCA4NCwgNjUsIDg0LCA2OSwgMTk2LCA3MywgNzksIDg0LCA2NSwgMTI4LCA3MywgNzksIDg0LCAxOTMsIDczLCAKLSAgICA3OSwgODIsIDEyOCwgNzMsIDc5LCA2OCwgNzIsIDY1LCA2OCwgNzIsIDEyOCwgNzMsIDc4LCA4NiwgNzMsIDgzLCA3MywgNjYsIAotICAgIDc2LCAxOTcsIDczLCA3OCwgODYsIDY5LCA4MiwgODQsIDY5LCA2OCwgMTI4LCA3MywgNzgsIDg2LCA2OSwgODIsIDg0LCA2OSwgCi0gICAgMTk2LCA3MywgNzgsIDg2LCA2OSwgODIsIDgzLCAxOTcsIDczLCA3OCwgODQsIDgyLCA3OSwgNjgsIDg1LCA2NywgNjksIDgyLCAKLSAgICAxMjgsIDczLCA3OCwgODQsIDczLCAxMjgsIDczLCA3OCwgODQsIDY5LCA4MiwgODMsIDg5LCA3NiwgNzYsIDY1LCA2NiwgNzMsIAotICAgIDE5NSwgNzMsIDc4LCA4NCwgNjksIDgyLCA4MywgNjksIDY3LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA3MywgNzgsIDg0LCA2OSwgCi0gICAgODIsIDgzLCA2OSwgNjcsIDg0LCA3MywgNzksIDIwNiwgNzMsIDc4LCA4NCwgNjksIDgyLCA4MywgNjksIDY3LCA4NCwgNzMsIAotICAgIDc4LCAxOTksIDczLCA3OCwgODQsIDY5LCA4MiwgODIsIDc5LCA2NiwgNjUsIDc4LCA3MSwgMTI4LCA3MywgNzgsIDg0LCA2OSwgCi0gICAgODIsIDgwLCA3OSwgNzYsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDczLCA3OCwgODQsIDY5LCA4MiwgNzYsIDc5LCA2NywgNzUsIAotICAgIDY5LCAxOTYsIDczLCA3OCwgODQsIDY5LCA4MiwgNzYsIDczLCA3OCwgNjksIDY1LCAyMTAsIDczLCA3OCwgODQsIDY5LCA4MiwgCi0gICAgNzYsIDY1LCA2NywgNjksIDE5NiwgNzMsIDc4LCA4NCwgNjksIDgyLCA3MywgNzksIDIxMCwgNzMsIDc4LCA4NCwgNjksIDgyLCAKLSAgICA2OSwgODMsIDIxMiwgNzMsIDc4LCA4NCwgNjksIDgyLCA2NywgNjUsIDc2LCA2NSwgODQsIDY5LCAxMjgsIDczLCA3OCwgODQsIAotICAgIDY5LCA3MSwgODIsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA3MywgNzgsIDg0LCA2OSwgNzEsIDgyLCA2NSwgODQsIDczLCAKLSAgICA3OSwgMjA2LCA3MywgNzgsIDg0LCA2OSwgNzEsIDgyLCA2NSwgNzYsIDEyOCwgNzMsIDc4LCA4NCwgNjksIDcxLCA4MiwgNjUsIAotICAgIDIwNCwgNzMsIDc4LCA4MywgODUsIDc2LCA2NSwgMjEwLCA3MywgNzgsIDgzLCA4NCwgODIsIDg1LCA3NywgNjksIDc4LCA4NCwgCi0gICAgNjUsIDIwNCwgNzMsIDc4LCA4MywgNzMsIDY4LCA2OSwgMTI4LCA3MywgNzgsIDgzLCA2OSwgODIsIDg0LCA3MywgNzksIAotICAgIDIwNiwgNzMsIDc4LCA4MywgNjksIDY3LCA4NCwgMTI4LCA3MywgNzgsIDgzLCA2NywgODIsIDczLCA4MCwgODQsIDczLCA3OSwgCi0gICAgNzgsIDY1LCAyMDQsIDczLCA3OCwgODAsIDg1LCAyMTIsIDczLCA3OCwgNzgsIDc5LCA2NywgNjksIDc4LCA2NywgNjksIAotICAgIDEyOCwgNzMsIDc4LCA3OCwgNzgsIDEyOCwgNzMsIDc4LCA3OCwgNjksIDgyLCAxMjgsIDczLCA3OCwgNzgsIDY5LCAyMTAsIAotICAgIDczLCA3OCwgNzgsIDEyOCwgNzMsIDc4LCA3MywgNzgsIDcxLCA4NSwgMTI4LCA3MywgNzgsIDczLCAxMjgsIDczLCA3OCwgCi0gICAgNzIsIDczLCA2NiwgNzMsIDIxMiwgNzMsIDc4LCA3MiwgNjksIDgyLCA2OSwgNzgsIDIxMiwgNzMsIDc4LCA3MSwgODcsIDY1LCAKLSAgICA5MCwgMTI4LCA3MywgNzgsIDcwLCA3OSwgODIsIDc3LCA2NSwgODQsIDczLCA3OSwgMjA2LCA3MywgNzgsIDcwLCA3NiwgODUsIAotICAgIDY5LCA3OCwgNjcsIDY5LCAxMjgsIDczLCA3OCwgNzAsIDczLCA3OCwgNzMsIDg0LCA4OSwgMTI4LCA3MywgNzgsIDcwLCA3MywgCi0gICAgNzgsIDczLCA4NCwgMjE3LCA3MywgNzgsIDY4LCA4NSwgODMsIDg0LCA4MiwgNzMsIDY1LCAyMDQsIDczLCA3OCwgNjgsIDczLCAKLSAgICA4MiwgNjksIDY3LCAyMTIsIDczLCA3OCwgNjgsIDczLCA2NywgNjUsIDg0LCA3OSwgODIsIDEyOCwgNzMsIDc4LCA2OCwgNzMsIAotICAgIDY3LCA2NSwgODQsIDc5LCAyMTAsIDczLCA3OCwgNjgsIDczLCAxOTUsIDczLCA3OCwgNjgsIDczLCA2NSwgMjA2LCA3MywgCi0gICAgNzgsIDY4LCA2OSwgODgsIDEyOCwgNzMsIDc4LCA2OCwgNjksIDgwLCA2OSwgNzgsIDY4LCA2OSwgNzgsIDIxMiwgNzMsIDc4LCAKLSAgICA2NywgODIsIDY5LCA3NywgNjksIDc4LCA4NCwgMTI4LCA3MywgNzgsIDY3LCA4MiwgNjksIDY1LCA4MywgNjksIDIxMSwgNzMsIAotICAgIDc4LCA2NywgODIsIDY5LCA2NSwgODMsIDY5LCAxMjgsIDczLCA3OCwgNjcsIDc5LCA3NywgODAsIDc2LCA2OSwgODQsIDE5NywgCi0gICAgNzMsIDc4LCA2NywgNzksIDc3LCA3MywgNzgsIDE5OSwgNzMsIDc4LCA2NywgNzYsIDg1LCA2OCwgNzMsIDc4LCAxOTksIDczLCAKLSAgICA3OCwgNjcsIDcyLCAxMjgsIDczLCA3OCwgNjYsIDc5LCAyMTYsIDczLCA3OCwgNjUsIDgwLCAxMjgsIDczLCA3OCwgNDUsIAotICAgIDY1LCA3NiwgNjUsIDcwLCAxMjgsIDczLCA3NywgODAsIDY5LCA4MiwgNzMsIDY1LCAyMDQsIDczLCA3NywgODAsIDY5LCA4MiwgCi0gICAgNzAsIDY5LCA2NywgODQsIDg1LCAyMDUsIDczLCA3NywgODAsIDY5LCA4MiwgNzAsIDY5LCA2NywgODQsIDY1LCAxMjgsIDczLCAKLSAgICA3NywgODAsIDY5LCA4MiwgNzAsIDY5LCA2NywgODQsIDE5MywgNzMsIDc3LCA3OCwgMTI4LCA3MywgNzcsIDczLCA4MywgNjksIAotICAgIDc5LCAyMTEsIDczLCA3NywgNzMsIDc4LCA1MSwgMTI4LCA3MywgNzcsIDczLCA3OCwgMTI4LCA3MywgNzcsIDczLCAyMDYsIAotICAgIDczLCA3NywgNzMsIDcwLCA4NCwgNzIsIDc5LCA4MiwgNzksIDc4LCAxMjgsIDczLCA3NywgNzMsIDcwLCA4NCwgNzIsIDc5LCAKLSAgICA4MiwgNjUsIDEyOCwgNzMsIDc3LCA3MywgNzAsIDc5LCA3OCwgNzksIDc4LCAxMjgsIDczLCA3NywgNzMsIDY4LCA3MywgNjUsIAotICAgIDgyLCA3MSwgNzksIDc4LCAxMjgsIDczLCA3NywgNjUsIDcxLCAxOTcsIDczLCA3NiwgODUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgCi0gICAgMTI4LCA3MywgNzYsIDg1LCA4OSwgMTI4LCA3MywgNzYsIDg1LCA4NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDczLCAKLSAgICA3NiwgODUsIDg0LCAxMjgsIDczLCA3NiwgNzMsIDc3LCA3NywgODUsIDUyLCAxMjgsIDczLCA3NiwgNzMsIDc3LCA3NywgODUsIAotICAgIDUxLCAxMjgsIDczLCA3NiwgNzMsIDc3LCA3NywgODUsIDEyOCwgNzMsIDc2LCA3MywgNzcsIDc3LCAyMTMsIDczLCA3NiwgCi0gICAgNTAsIDEyOCwgNzMsIDc1LCA2NSwgODIsIDY1LCAxMjgsIDczLCA3NSwgNjUsIDgyLCAxOTMsIDczLCA3NCwgMTI4LCA3MywgCi0gICAgNzMsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3MywgNzEsIDczLCAxMjgsIDczLCA3MSwgMjAxLCA3MywgNzEsIDcxLCAKLSAgICA4NywgODMsIDEyOCwgNzMsIDcwLCA3MywgNzgsIDEyOCwgNzMsIDY5LCA4NSwgNzgsIDcxLCA0NSwgODQsIDczLCA3NSwgNjksIAotICAgIDg1LCA4NCwgMTI4LCA3MywgNjksIDg1LCA3OCwgNzEsIDQ1LCA4NCwgNzIsIDczLCA2OSwgODUsIDg0LCA3MiwgMTI4LCA3MywgCi0gICAgNjksIDg1LCA3OCwgNzEsIDQ1LCA4MywgODMsIDY1LCA3OCwgNzEsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDEyOCwgNzMsIAotICAgIDY5LCA4NSwgNzgsIDcxLCA0NSwgODIsIDczLCA2OSwgODUsIDc2LCAxMjgsIDczLCA2OSwgODUsIDc4LCA3MSwgNDUsIDgwLCAKLSAgICA3MywgNjksIDg1LCA4MCwgMTI4LCA3MywgNjksIDg1LCA3OCwgNzEsIDQ1LCA4MCwgNzIsIDczLCA2OSwgODUsIDgwLCA3MiwgCi0gICAgMTI4LCA3MywgNjksIDg1LCA3OCwgNzEsIDQ1LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCAxMjgsIDczLCA2OSwgODUsIDc4LCAKLSAgICA3MSwgNDUsIDc1LCA3MiwgNzMsIDY5LCA4NSwgNzUsIDcyLCAxMjgsIDczLCA2OSwgODUsIDc4LCA3MSwgNDUsIDY3LCA3MywgCi0gICAgNjksIDg1LCA2NywgMTI4LCA3MywgNjksIDg1LCA3OCwgNzEsIDQ1LCA2NywgNzIsIDczLCA2OSwgODUsIDY3LCA3MiwgMTI4LCAKLSAgICA3MywgNjksIDg1LCA3OCwgMTk5LCA3MywgNjgsIDc2LCA2OSwgMTI4LCA3MywgNjgsIDczLCA3NywgMTI4LCA3MywgNjgsIAotICAgIDczLCAyMDUsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY4LCA1NywgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2OCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjgsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY4LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDY1LCA2OCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjgsIAotICAgIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY4LCA1MSwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2OCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjgsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY4LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDY1LCA2NywgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIAotICAgIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCA2OCwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDY1LCA2NywgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIAotICAgIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCA1NSwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDY1LCA2NywgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIAotICAgIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCA0OSwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDY1LCA2NiwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIAotICAgIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCA2NiwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDY1LCA2NiwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIAotICAgIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCA1MywgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDY1LCA2NiwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIAotICAgIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCA3MCwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDY1LCA2NSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIAotICAgIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCA1NywgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDY1LCA2NSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIAotICAgIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCA1MSwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDY1LCA1NywgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIAotICAgIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCA2OCwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDY1LCA1NywgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIAotICAgIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCA1NSwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDY1LCA1NywgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIAotICAgIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCA0OSwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDY1LCA1NiwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIAotICAgIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCA2NiwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDY1LCA1NiwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIAotICAgIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCA1MywgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDY1LCA1NiwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIAotICAgIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCA3MCwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDY1LCA1NSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIAotICAgIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCA1NywgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDY1LCA1NSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIAotICAgIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCA1MSwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDY1LCA1NCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTQsIAotICAgIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU0LCA2NiwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NCwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTQsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU0LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDY1LCA1NCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTQsIAotICAgIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU0LCA1MywgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTQsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU0LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDY1LCA1NCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTQsIAotICAgIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCA3MCwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDY1LCA1MywgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIAotICAgIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCA1NywgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDY1LCA1MywgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIAotICAgIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCA1MSwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDY1LCA1MiwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIAotICAgIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCA2OCwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDY1LCA1MiwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIAotICAgIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCA1NSwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDY1LCA1MiwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIAotICAgIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCA0OSwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDY1LCA1MSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIAotICAgIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCA2NiwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDY1LCA1MSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIAotICAgIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCA1MywgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDY1LCA1MSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIAotICAgIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCA3MCwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDY1LCA1MCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIAotICAgIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCA1NywgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDY1LCA1MCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIAotICAgIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCA1MSwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDY1LCA0OSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIAotICAgIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCA2OCwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDY1LCA0OSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIAotICAgIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCA1NSwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDY1LCA0OSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIAotICAgIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCA0OSwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDY1LCA0OCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIAotICAgIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCA2NiwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDY1LCA0OCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIAotICAgIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCA1MywgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDY1LCA0OCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIAotICAgIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCA3MCwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDU3LCA3MCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIAotICAgIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCA1NywgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDU3LCA3MCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIAotICAgIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCA1MSwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDU3LCA2OSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIAotICAgIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCA2OCwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDU3LCA2OSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIAotICAgIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCA1NSwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDU3LCA2OSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIAotICAgIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCA0OSwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDU3LCA2OCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIAotICAgIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCA2NiwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDU3LCA2OCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIAotICAgIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCA1MywgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDU3LCA2OCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIAotICAgIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCA3MCwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDU3LCA2NywgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIAotICAgIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCA1NywgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDU3LCA2NywgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIAotICAgIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCA1MSwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDU3LCA2NiwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIAotICAgIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCA2OCwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDU3LCA2NiwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIAotICAgIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCA1NSwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDU3LCA2NiwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIAotICAgIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCA0OSwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDU3LCA2NSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIAotICAgIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCA2NiwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDU3LCA2NSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIAotICAgIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCA1MywgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDU3LCA2NSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIAotICAgIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCA3MCwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDU3LCA1NywgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIAotICAgIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCA1NywgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDU3LCA1NywgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIAotICAgIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCA1MSwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDU3LCA1NiwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIAotICAgIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCA2OCwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDU3LCA1NiwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIAotICAgIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCA1NSwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDU3LCA1NiwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIAotICAgIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCA0OSwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDU3LCA1NSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIAotICAgIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCA2NiwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDU3LCA1NSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIAotICAgIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCA1MywgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDU3LCA1NSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIAotICAgIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCA3MCwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDU3LCA1NCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIAotICAgIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCA1NywgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDU3LCA1NCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIAotICAgIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCA1MSwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDU3LCA1MywgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIAotICAgIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCA2OCwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDU3LCA1MywgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIAotICAgIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCA1NSwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDU3LCA1MywgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIAotICAgIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCA0OSwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDU3LCA1MiwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIAotICAgIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCA2NiwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDU3LCA1MiwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIAotICAgIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCA1MywgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDU3LCA1MiwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIAotICAgIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCA3MCwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDU3LCA1MSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIAotICAgIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCA1NywgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDU3LCA1MSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIAotICAgIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCA1MSwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDU3LCA1MCwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIAotICAgIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCA2OCwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDU3LCA1MCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIAotICAgIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCA1NSwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDU3LCA1MCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIAotICAgIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCA0OSwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDU3LCA0OSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIAotICAgIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCA2NiwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDU3LCA0OSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIAotICAgIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCA1MywgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDU3LCA0OSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIAotICAgIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCA3MCwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDU3LCA0OCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIAotICAgIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCA1NywgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNzAsIDU3LCA0OCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIAotICAgIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCA1MSwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTcsIDQ4LCA1MiwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU2LCA2OCwgNTUsIAotICAgIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NiwgNjcsIDY1LCA1NywgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTYsIDU3LCA2OSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU1LCA2OCwgNTIsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA1NSwgNjUsIDU1LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTUsIDU3LCA1NiwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU1LCA1NCwgNjgsIAotICAgIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NSwgNTMsIDUxLCA1MSwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTUsIDUzLCA0OSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU1LCA0OSwgNTAsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA1NSwgNDgsIDY2LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTQsIDcwLCA0OSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU0LCA2OSwgNTYsIAotICAgIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NCwgNTUsIDUwLCA2NywgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTQsIDU1LCA0OCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU0LCA1NSwgNDgsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA1NCwgNTQsIDUwLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTQsIDUzLCA2NiwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU0LCA1MywgNTcsIAotICAgIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NCwgNTMsIDUzLCA1NSwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTQsIDUxLCA1MywgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU0LCA1MSwgNDgsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA1NCwgNTAsIDU3LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTQsIDUwLCA1MywgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU0LCA1MCwgNTIsIAotICAgIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MywgNzAsIDU2LCA2NywgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTMsIDY4LCA2OSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUzLCA2NiwgNTYsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA1MywgNjYsIDUzLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTMsIDU3LCA1MCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUzLCA1NywgNDksIAotICAgIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MywgNTYsIDcwLCA0OCwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTMsIDUzLCA2NiwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUzLCA1MiwgNTEsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA1MywgNTIsIDQ4LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTMsIDUxLCA3MCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUzLCA1MSwgNjcsIAotICAgIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MywgNTAsIDY4LCA2OCwgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTMsIDUwLCA1NSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUzLCA1MCwgNTIsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA1MywgNTAsIDQ5LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTMsIDQ5LCA1NiwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUyLCA2OSwgNjUsIAotICAgIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MiwgNjksIDU2LCA2NywgMTI4LCA3MywgCi0gICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTIsIDY5LCA1MCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUyLCA2OSwgNDgsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKLSAgICA4MCwgNzIsIDQ1LCA1MiwgNjksIDQ4LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA2NSwgNDksIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDY1LCA0OSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ5LCAKLSAgICA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDksIDY1LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OSwgNTcsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ5LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDksIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ5LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA2NSwgNDksIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDY1LCA0OSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ5LCAKLSAgICA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDksIDQ5LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OSwgNDgsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA2NSwgNDgsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDY1LCA0OCwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCAKLSAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIDU2LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNTUsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA2NSwgNDgsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDY1LCA0OCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCAKLSAgICA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIDcwLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNjksIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNzAsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA3MCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCAKLSAgICA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIDU0LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNTMsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNzAsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA2OSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCAKLSAgICA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjksIDY4LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNjcsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjksIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNjksIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA2OSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCAKLSAgICA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjksIDUyLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNTEsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjksIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDY4LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNjgsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA2OCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY4LCAKLSAgICA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjgsIDY2LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OCwgNjUsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY4LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjgsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDY4LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNjgsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA2OCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY4LCAKLSAgICA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjgsIDUwLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OCwgNDksIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY4LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjcsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NywgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDY3LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNjcsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA2NywgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY3LCAKLSAgICA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjcsIDU3LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NywgNTYsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY3LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjcsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NywgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDY3LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNjcsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA2NywgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY3LCAKLSAgICA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjcsIDQ4LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNzAsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNjYsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA2NiwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCAKLSAgICA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIDU1LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNTQsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNjYsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA2NiwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCAKLSAgICA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIDY5LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNjgsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNjUsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA2NSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCAKLSAgICA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIDUzLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNTIsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNTcsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA1NywgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU3LCAKLSAgICA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTcsIDY3LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NywgNjYsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU3LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTcsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NywgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDU3LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNTcsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA1NywgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU3LCAKLSAgICA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTcsIDUxLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NywgNTAsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU3LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTcsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNTYsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA1NiwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCAKLSAgICA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTYsIDY1LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNTcsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTYsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNTYsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA1NiwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCAKLSAgICA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTYsIDQ5LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNDgsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNTUsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA1NSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCAKLSAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIDU2LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNTUsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNTUsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA1NSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCAKLSAgICA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIDcwLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNjksIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNTQsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA1NCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCAKLSAgICA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIDU0LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNTMsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNTQsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA1MywgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCAKLSAgICA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTMsIDY4LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MywgNjcsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTMsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MywgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNTMsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA1MywgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCAKLSAgICA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTMsIDUyLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MywgNTEsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTMsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MywgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDUyLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNTIsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA1MiwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUyLCAKLSAgICA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTIsIDY2LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MiwgNjUsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUyLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTIsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MiwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDUyLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNTIsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA1MiwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUyLCAKLSAgICA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTIsIDUwLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MiwgNDksIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUyLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTEsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDUxLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNTEsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA1MSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUxLCAKLSAgICA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTEsIDU3LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNTYsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUxLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTEsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDUxLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNTEsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA1MSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUxLCAKLSAgICA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTEsIDQ4LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNzAsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNTAsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA1MCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCAKLSAgICA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIDU1LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNTQsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNTAsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA1MCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCAKLSAgICA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIDY5LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNjgsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNDksIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA0OSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCAKLSAgICA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIDUzLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNTIsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNDgsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA0OCwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ4LCAKLSAgICA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDgsIDY3LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OCwgNjYsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ4LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDgsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ4LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNDgsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA0OCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ4LCAKLSAgICA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDgsIDUxLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OCwgNTAsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ4LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDgsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNzAsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA3MCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCAKLSAgICA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNzAsIDY1LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNTcsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNzAsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNzAsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA3MCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCAKLSAgICA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNzAsIDQ5LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNDgsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNjksIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA2OSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCAKLSAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIDU2LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNTUsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNjksIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA2OSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCAKLSAgICA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIDcwLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNjksIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNjgsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA2OCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCAKLSAgICA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIDU0LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNTMsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNjgsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA2NywgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCAKLSAgICA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjcsIDY4LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NywgNjcsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjcsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NywgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNjcsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA2NywgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCAKLSAgICA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjcsIDUyLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NywgNTEsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjcsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NywgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDY2LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNjYsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA2NiwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY2LCAKLSAgICA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjYsIDY2LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NiwgNjUsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY2LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjYsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NiwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDY2LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNjYsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA2NiwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY2LCAKLSAgICA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjYsIDUwLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NiwgNDksIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY2LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjUsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDY1LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNjUsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA2NSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY1LCAKLSAgICA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjUsIDU3LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNTYsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY1LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjUsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDY1LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNjUsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA2NSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY1LCAKLSAgICA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjUsIDQ4LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NywgNzAsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NywgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNTcsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA1NywgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCAKLSAgICA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIDU1LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NywgNTQsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NywgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNTcsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA1NywgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCAKLSAgICA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIDY5LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNjgsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNTYsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA1NiwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCAKLSAgICA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIDUzLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNTIsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNTUsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA1NSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU1LCAKLSAgICA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTUsIDY3LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NSwgNjYsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU1LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTUsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDU1LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNTUsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA1NSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU1LCAKLSAgICA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTUsIDUxLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NSwgNTAsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU1LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTUsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNTQsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA1NCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCAKLSAgICA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTQsIDY1LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNTcsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTQsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNTQsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA1NCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCAKLSAgICA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTQsIDQ5LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNDgsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MywgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNTMsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA1MywgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCAKLSAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIDU2LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MywgNTUsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MywgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNTMsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA1MywgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCAKLSAgICA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIDcwLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNjksIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNTIsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA1MiwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCAKLSAgICA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIDU0LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNTMsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNTIsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA1MSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCAKLSAgICA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTEsIDY4LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNjcsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTEsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNTEsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA1MSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCAKLSAgICA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTEsIDUyLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNTEsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTEsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDUwLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNTAsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA1MCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUwLCAKLSAgICA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTAsIDY2LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MCwgNjUsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUwLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTAsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDUwLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNTAsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA1MCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUwLCAKLSAgICA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTAsIDUwLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MCwgNDksIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUwLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDksIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ5LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNDksIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA0OSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ5LCAKLSAgICA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDksIDU3LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNTYsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ5LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDksIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ5LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNDksIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA0OSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ5LCAKLSAgICA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDksIDQ4LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNzAsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNDgsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA0OCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCAKLSAgICA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIDU1LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNTQsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNDgsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA0OCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzgsIDg0LCA3MywgNzAsIDczLCA2NywgNjUsIDg0LCA3MywgNzksIDc4LCAKLSAgICAxMjgsIDczLCA2OCwgNjksIDc4LCA4NCwgNzMsIDY3LCA2NSwgMjA0LCA3MywgNjcsIDcyLCA3OSwgODUsIDEyOCwgNzMsIAotICAgIDY3LCA3MiwgNzksIDgzLCAxMjgsIDczLCA2NywgNzIsIDczLCA3NywgNjUsIDg0LCA3OSwgODMsIDEyOCwgNzMsIDY3LCA3MiwgCi0gICAgNjUsIDY4LCA3MywgNzgsIDEyOCwgNzMsIDY3LCA2OSwgNzYsIDY1LCA3OCwgNjgsIDczLCA2NywgNDUsIDg5LCA4MiwgMTI4LCAKLSAgICA3MywgNjYsIDczLCA3MCwgNzMsIDc2LCA3MywgMTI4LCA3MywgNjUsIDg1LCA2OCwgNjUsIDEyOCwgNzMsIDQ4LCA0OSwgNTMsIAotICAgIDEyOCwgNzMsIDQ4LCA0OSwgNTIsIDEyOCwgNzMsIDQ4LCA0OSwgNTEsIDEyOCwgNzMsIDQ4LCA0OSwgNTAsIDEyOCwgNzMsIAotICAgIDQ4LCA0OSwgNDksIDY1LCAxMjgsIDczLCA0OCwgNDksIDQ5LCAxMjgsIDczLCA0OCwgNDksIDQ4LCA2NSwgMTI4LCA3MywgCi0gICAgNDgsIDQ5LCA0OCwgMTI4LCA3MywgNDgsIDQ4LCA1NywgNjUsIDEyOCwgNzMsIDQ4LCA0OCwgNTcsIDEyOCwgNzMsIDQ4LCAKLSAgICA0OCwgNTYsIDEyOCwgNzMsIDQ4LCA0OCwgNTUsIDEyOCwgNzMsIDQ4LCA0OCwgNTQsIDEyOCwgNzMsIDQ4LCA0OCwgNTMsIAotICAgIDY1LCAxMjgsIDczLCA0OCwgNDgsIDUzLCAxMjgsIDczLCA0OCwgNDgsIDUyLCAxMjgsIDczLCA0OCwgNDgsIDUxLCAxMjgsIAotICAgIDczLCA0OCwgNDgsIDUwLCAxMjgsIDczLCA0OCwgNDgsIDQ5LCAxMjgsIDczLCA0NSwgODksIDg1LCAxMjgsIDczLCA0NSwgCi0gICAgODksIDc5LCAxMjgsIDczLCA0NSwgODksIDY5LCA3OSwgMTI4LCA3MywgNDUsIDg5LCA2OSwgMTI4LCA3MywgNDUsIDg5LCAKLSAgICA2NSwgNjksIDEyOCwgNzMsIDQ1LCA4OSwgNjUsIDQ1LCA3OSwgMTI4LCA3MywgNDUsIDg5LCA2NSwgMTI4LCA3MywgNDUsIAotICAgIDc5LCA0NSwgNzMsIDEyOCwgNzMsIDQ1LCA3OSwgMTI4LCA3MywgNDUsIDY5LCA4NSwgMTI4LCA3MywgNDUsIDY2LCA2OSwgCi0gICAgNjUsIDc3LCAxMjgsIDczLCA0NSwgNjUsIDgyLCA2NSwgNjksIDY1LCAxMjgsIDczLCA0NSwgNjUsIDEyOCwgNzIsIDkwLCAKLSAgICA5MCwgOTAsIDcxLCAxMjgsIDcyLCA5MCwgOTAsIDkwLCAxMjgsIDcyLCA5MCwgOTAsIDgwLCAxMjgsIDcyLCA5MCwgOTAsIAotICAgIDEyOCwgNzIsIDkwLCA4NywgNzEsIDEyOCwgNzIsIDkwLCA4NywgMTI4LCA3MiwgOTAsIDg0LCAxMjgsIDcyLCA5MCwgNzEsIAotICAgIDEyOCwgNzIsIDg5LCA4MywgODQsIDY5LCA4MiwgNjksIDgzLCA3MywgMjExLCA3MiwgODksIDgwLCA3OSwgNjgsIDczLCA2NSwgCi0gICAgODMsIDg0LCA3OSwgNzYsIDY5LCAxMjgsIDcyLCA4OSwgODAsIDcyLCA2OSwgNzgsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDcyLCAKLSAgICA4OSwgODAsIDcyLCA2OSwgNzgsIDQ1LCA3NywgNzMsIDc4LCA4NSwgODMsIDEyOCwgNzIsIDg5LCA4MCwgNzIsIDY5LCA3OCwgCi0gICAgMTI4LCA3MiwgODksIDgwLCA3MiwgNjksIDIwNiwgNzIsIDg4LCA4NywgNzEsIDEyOCwgNzIsIDg4LCA4NSwgNzksIDg4LCAKLSAgICAxMjgsIDcyLCA4OCwgODUsIDc5LCA4NCwgMTI4LCA3MiwgODgsIDg1LCA3OSwgODAsIDEyOCwgNzIsIDg4LCA4NSwgNzksIAotICAgIDEyOCwgNzIsIDg4LCA3OSwgODgsIDEyOCwgNzIsIDg4LCA3OSwgODQsIDEyOCwgNzIsIDg4LCA3OSwgODAsIDEyOCwgNzIsIAotICAgIDg4LCA3OSwgMTI4LCA3MiwgODgsIDczLCA4OCwgMTI4LCA3MiwgODgsIDczLCA4NCwgMTI4LCA3MiwgODgsIDczLCA4MCwgCi0gICAgMTI4LCA3MiwgODgsIDczLCA2OSwgODgsIDEyOCwgNzIsIDg4LCA3MywgNjksIDg0LCAxMjgsIDcyLCA4OCwgNzMsIDY5LCAKLSAgICA4MCwgMTI4LCA3MiwgODgsIDczLCA2OSwgMTI4LCA3MiwgODgsIDczLCAxMjgsIDcyLCA4OCwgNjksIDg4LCAxMjgsIDcyLCAKLSAgICA4OCwgNjksIDgwLCAxMjgsIDcyLCA4OCwgNjksIDEyOCwgNzIsIDg4LCA2NSwgODgsIDEyOCwgNzIsIDg4LCA2NSwgODQsIAotICAgIDEyOCwgNzIsIDg4LCA2NSwgODAsIDEyOCwgNzIsIDg4LCA2NSwgMTI4LCA3MiwgODcsIDg1LCAxMjgsIDcyLCA4NywgNjUsIAotICAgIDczLCA4MiwgMTI4LCA3MiwgODYsIDEyOCwgNzIsIDg1LCA4MywgNzIsIDY5LCAxOTYsIDcyLCA4NSwgODIsIDY1LCA3OCwgCi0gICAgMTI4LCA3MiwgODUsIDc5LCA4NCwgMTI4LCA3MiwgODUsIDc4LCA2OCwgODIsIDY5LCA2OCwgMTI4LCA3MiwgODUsIDc4LCAKLSAgICA2OCwgODIsIDY5LCAxOTYsIDcyLCA4NSwgNzgsIDEyOCwgNzIsIDg1LCA3NywgNjUsIDc4LCAxMjgsIDcyLCA4NSwgNzcsIAotICAgIDY1LCAyMDYsIDcyLCA4NSwgNzYsIDUwLCAxMjgsIDcyLCA4NSwgNzMsIDczLCA4NCwgNzksIDEyOCwgNzIsIDg1LCA2NiwgCi0gICAgNTAsIDEyOCwgNzIsIDg1LCA2NiwgMTc4LCA3MiwgODUsIDY2LCAxMjgsIDcyLCA4NSwgNjUsIDgyLCA2NSwgNjgsIDY4LCAKLSAgICA3OSwgMTI4LCA3MiwgODQsIDgzLCAxMjgsIDcyLCA4NCwgNzQsIDEyOCwgNzIsIDgyLCA4OSwgODYsIDc4LCA3MywgMTkzLCAKLSAgICA3MiwgODAsIDg3LCA3MSwgMTI4LCA3MiwgODAsIDY1LCAxMjgsIDcyLCA4MCwgMTI4LCA3MiwgNzksIDg1LCA4MywgMTk3LCAKLSAgICA3MiwgNzksIDg1LCA4MiwgNzEsIDc2LCA2NSwgODMsIDgzLCAxMjgsIDcyLCA3OSwgODUsIDgyLCA3MSwgNzYsIDY1LCA4MywgCi0gICAgMjExLCA3MiwgNzksIDg1LCA4MiwgMTI4LCA3MiwgNzksIDg1LCAyMTAsIDcyLCA3OSwgODQsIDY5LCA3NiwgMTI4LCA3MiwgCi0gICAgNzksIDg0LCA2NSwgMTI4LCA3MiwgNzksIDgzLCA4MCwgNzMsIDg0LCA2NSwgNzYsIDEyOCwgNzIsIDc5LCA4MiwgODMsIDY5LCAKLSAgICAxMjgsIDcyLCA3OSwgODIsIDgzLCAxOTcsIDcyLCA3OSwgODIsIDc4LCA4MywgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIAotICAgIDc5LCA3OCwgODQsIDY1LCA3NiwgNzYsIDIxNywgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCAKLSAgICA0OCwgNTQsIDQ1LCA0OCwgNTQsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgCi0gICAgNTQsIDQ1LCA0OCwgNTMsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTQsIAotICAgIDQ1LCA0OCwgNTIsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTQsIDQ1LCAKLSAgICA0OCwgNTEsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTQsIDQ1LCA0OCwgCi0gICAgNTAsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTQsIDQ1LCA0OCwgNDksIAotICAgIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTQsIDQ1LCA0OCwgNDgsIDEyOCwgCi0gICAgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTMsIDQ1LCA0OCwgNTQsIDEyOCwgNzIsIAotICAgIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTMsIDQ1LCA0OCwgNTMsIDEyOCwgNzIsIDc5LCAKLSAgICA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTMsIDQ1LCA0OCwgNTIsIDEyOCwgNzIsIDc5LCA4MiwgCi0gICAgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTMsIDQ1LCA0OCwgNTEsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIAotICAgIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTMsIDQ1LCA0OCwgNTAsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCAKLSAgICA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTMsIDQ1LCA0OCwgNDksIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgCi0gICAgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTMsIDQ1LCA0OCwgNDgsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIAotICAgIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTIsIDQ1LCA0OCwgNTQsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCAKLSAgICA2NSwgNzYsIDQ1LCA0OCwgNTIsIDQ1LCA0OCwgNTMsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgCi0gICAgNzYsIDQ1LCA0OCwgNTIsIDQ1LCA0OCwgNTIsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIAotICAgIDQ1LCA0OCwgNTIsIDQ1LCA0OCwgNTEsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCAKLSAgICA0OCwgNTIsIDQ1LCA0OCwgNTAsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgCi0gICAgNTIsIDQ1LCA0OCwgNDksIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTIsIAotICAgIDQ1LCA0OCwgNDgsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTEsIDQ1LCAKLSAgICA0OCwgNTQsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTEsIDQ1LCA0OCwgCi0gICAgNTMsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTEsIDQ1LCA0OCwgNTIsIAotICAgIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTEsIDQ1LCA0OCwgNTEsIDEyOCwgCi0gICAgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTEsIDQ1LCA0OCwgNTAsIDEyOCwgNzIsIAotICAgIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTEsIDQ1LCA0OCwgNDksIDEyOCwgNzIsIDc5LCAKLSAgICA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTEsIDQ1LCA0OCwgNDgsIDEyOCwgNzIsIDc5LCA4MiwgCi0gICAgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTAsIDQ1LCA0OCwgNTQsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIAotICAgIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTAsIDQ1LCA0OCwgNTMsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCAKLSAgICA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTAsIDQ1LCA0OCwgNTIsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgCi0gICAgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTAsIDQ1LCA0OCwgNTEsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIAotICAgIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTAsIDQ1LCA0OCwgNTAsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCAKLSAgICA2NSwgNzYsIDQ1LCA0OCwgNTAsIDQ1LCA0OCwgNDksIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgCi0gICAgNzYsIDQ1LCA0OCwgNTAsIDQ1LCA0OCwgNDgsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIAotICAgIDQ1LCA0OCwgNDksIDQ1LCA0OCwgNTQsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCAKLSAgICA0OCwgNDksIDQ1LCA0OCwgNTMsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgCi0gICAgNDksIDQ1LCA0OCwgNTIsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDksIAotICAgIDQ1LCA0OCwgNTEsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDksIDQ1LCAKLSAgICA0OCwgNTAsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDksIDQ1LCA0OCwgCi0gICAgNDksIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDksIDQ1LCA0OCwgNDgsIAotICAgIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDgsIDQ1LCA0OCwgNTQsIDEyOCwgCi0gICAgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDgsIDQ1LCA0OCwgNTMsIDEyOCwgNzIsIAotICAgIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDgsIDQ1LCA0OCwgNTIsIDEyOCwgNzIsIDc5LCAKLSAgICA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDgsIDQ1LCA0OCwgNTEsIDEyOCwgNzIsIDc5LCA4MiwgCi0gICAgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDgsIDQ1LCA0OCwgNTAsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIAotICAgIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDgsIDQ1LCA0OCwgNDksIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCAKLSAgICA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDgsIDQ1LCA0OCwgNDgsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgCi0gICAgNzgsIDg0LCA2NSwgNzYsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDEyOCwgNzIsIDc5LCA4MiwgMTkzLCA3MiwgNzksIDc5LCAKLSAgICA4MiwgODUsIDEyOCwgNzIsIDc5LCA3OSwgODAsIDEyOCwgNzIsIDc5LCA3OSwgNzgsIDEyOCwgNzIsIDc5LCA3OSwgNzUsIAotICAgIDY5LCAxOTYsIDcyLCA3OSwgNzgsIDY5LCA4OSwgNjYsIDY5LCA2OSwgMTI4LCA3MiwgNzksIDc4LCA2OSwgMjE3LCA3MiwgCi0gICAgNzksIDc3LCA3OSwgODQsIDcyLCA2OSwgODQsIDczLCA2NywgMTI4LCA3MiwgNzksIDc3LCA3OSwgODQsIDcyLCA2OSwgODQsIAotICAgIDczLCAxOTUsIDcyLCA3OSwgNzYsIDY5LCAxMjgsIDcyLCA3OSwgNzYsIDY4LCA3MywgNzgsIDE5OSwgNzIsIDc5LCA3NiwgCi0gICAgNjUsIDc3LCAxMjgsIDcyLCA3OSwgNzYsIDY1LCAyMDUsIDcyLCA3OSwgNzUsIDY1LCAxMjgsIDcyLCA3OSwgNzMsIDEyOCwgCi0gICAgNzIsIDc5LCA2NywgNzIsIDc5LCAxMjgsIDcyLCA3OCwgODUsIDg0LCAxMjgsIDcyLCA3OCwgODUsIDc5LCA4OCwgMTI4LCAKLSAgICA3MiwgNzgsIDg1LCA3OSwgMTI4LCA3MiwgNzgsIDc5LCA4OCwgMTI4LCA3MiwgNzgsIDc5LCA4NCwgMTI4LCA3MiwgNzgsIAotICAgIDc5LCA4MCwgMTI4LCA3MiwgNzgsIDczLCA4OCwgMTI4LCA3MiwgNzgsIDczLCA4NCwgMTI4LCA3MiwgNzgsIDczLCA4MCwgCi0gICAgMTI4LCA3MiwgNzgsIDczLCA2OSwgODgsIDEyOCwgNzIsIDc4LCA3MywgNjksIDg0LCAxMjgsIDcyLCA3OCwgNzMsIDY5LCAKLSAgICA4MCwgMTI4LCA3MiwgNzgsIDczLCA2OSwgMTI4LCA3MiwgNzgsIDczLCAxMjgsIDcyLCA3OCwgNjksIDg4LCAxMjgsIDcyLCAKLSAgICA3OCwgNjksIDgwLCAxMjgsIDcyLCA3OCwgNjksIDEyOCwgNzIsIDc4LCA2NSwgODgsIDEyOCwgNzIsIDc4LCA2NSwgODQsIAotICAgIDEyOCwgNzIsIDc4LCA2NSwgODAsIDEyOCwgNzIsIDc4LCA2NSwgMTI4LCA3MiwgNzcsIDg5LCA4OCwgMTI4LCA3MiwgNzcsIAotICAgIDg5LCA4MiwgODgsIDEyOCwgNzIsIDc3LCA4OSwgODIsIDEyOCwgNzIsIDc3LCA4OSwgODAsIDEyOCwgNzIsIDc3LCA4OSwgCi0gICAgMTI4LCA3MiwgNzcsIDg1LCA4OCwgMTI4LCA3MiwgNzcsIDg1LCA4NCwgMTI4LCA3MiwgNzcsIDg1LCA4MiwgODgsIDEyOCwgCi0gICAgNzIsIDc3LCA4NSwgODIsIDEyOCwgNzIsIDc3LCA4NSwgODAsIDEyOCwgNzIsIDc3LCA4NSwgNzksIDg4LCAxMjgsIDcyLCAKLSAgICA3NywgODUsIDc5LCA4MCwgMTI4LCA3MiwgNzcsIDg1LCA3OSwgMTI4LCA3MiwgNzcsIDg1LCAxMjgsIDcyLCA3NywgNzksIAotICAgIDg4LCAxMjgsIDcyLCA3NywgNzksIDg0LCAxMjgsIDcyLCA3NywgNzksIDgwLCAxMjgsIDcyLCA3NywgNzksIDEyOCwgNzIsIAotICAgIDc3LCA3MywgODgsIDEyOCwgNzIsIDc3LCA3MywgODQsIDEyOCwgNzIsIDc3LCA3MywgODAsIDEyOCwgNzIsIDc3LCA3MywgCi0gICAgNjksIDg4LCAxMjgsIDcyLCA3NywgNzMsIDY5LCA4MCwgMTI4LCA3MiwgNzcsIDczLCA2OSwgMTI4LCA3MiwgNzcsIDczLCAKLSAgICAxMjgsIDcyLCA3NywgNjksIDEyOCwgNzIsIDc3LCA2NSwgODgsIDEyOCwgNzIsIDc3LCA2NSwgODQsIDEyOCwgNzIsIDc3LCAKLSAgICA2NSwgODAsIDEyOCwgNzIsIDc3LCA2NSwgMTI4LCA3MiwgNzYsIDg5LCA4OCwgMTI4LCA3MiwgNzYsIDg5LCA4NCwgMTI4LCAKLSAgICA3MiwgNzYsIDg5LCA4MiwgODgsIDEyOCwgNzIsIDc2LCA4OSwgODIsIDEyOCwgNzIsIDc2LCA4OSwgODAsIDEyOCwgNzIsIAotICAgIDc2LCA4OSwgMTI4LCA3MiwgNzYsIDg1LCA4OCwgMTI4LCA3MiwgNzYsIDg1LCA4NCwgMTI4LCA3MiwgNzYsIDg1LCA4MiwgCi0gICAgODgsIDEyOCwgNzIsIDc2LCA4NSwgODIsIDEyOCwgNzIsIDc2LCA4NSwgODAsIDEyOCwgNzIsIDc2LCA4NSwgNzksIDg4LCAKLSAgICAxMjgsIDcyLCA3NiwgODUsIDc5LCA4MCwgMTI4LCA3MiwgNzYsIDg1LCA3OSwgMTI4LCA3MiwgNzYsIDg1LCAxMjgsIDcyLCAKLSAgICA3NiwgNzksIDg4LCAxMjgsIDcyLCA3NiwgNzksIDgwLCAxMjgsIDcyLCA3NiwgNzksIDEyOCwgNzIsIDc2LCA3MywgODgsIAotICAgIDEyOCwgNzIsIDc2LCA3MywgODQsIDEyOCwgNzIsIDc2LCA3MywgODAsIDEyOCwgNzIsIDc2LCA3MywgNjksIDg4LCAxMjgsIAotICAgIDcyLCA3NiwgNzMsIDY5LCA4MCwgMTI4LCA3MiwgNzYsIDczLCA2OSwgMTI4LCA3MiwgNzYsIDczLCAxMjgsIDcyLCA3NiwgCi0gICAgNjksIDg4LCAxMjgsIDcyLCA3NiwgNjksIDgwLCAxMjgsIDcyLCA3NiwgNjksIDEyOCwgNzIsIDc2LCA2NSwgODgsIDEyOCwgCi0gICAgNzIsIDc2LCA2NSwgODQsIDEyOCwgNzIsIDc2LCA2NSwgODAsIDEyOCwgNzIsIDc2LCA2NSwgMTI4LCA3MiwgNzUsIDEyOCwgCi0gICAgNzIsIDczLCA5MCwgNjYsIDEyOCwgNzIsIDczLCA4MywgODQsIDc5LCA4MiwgNzMsIDE5NSwgNzIsIDczLCA4MiwgNzMsIDgxLCAKLSAgICAxMjgsIDcyLCA3MywgNzEsIDcyLCA0NSwgODMsIDgwLCA2OSwgNjksIDE5NiwgNzIsIDczLCA3MSwgNzIsIDQ1LCA4MiwgNjksIAotICAgIDg2LCA2OSwgODIsIDgzLCA2OSwgNjgsIDQ1LCAxODUsIDcyLCA3MywgNzEsIDcyLCA0NSwgNzIsIDY5LCA2OSwgNzYsIDY5LCAKLSAgICAxOTYsIDcyLCA3MywgNjksIDg4LCAxMjgsIDcyLCA3MywgNjksIDg1LCA3MiwgNDUsIDgzLCA3MywgNzksIDgzLCAxMjgsIAotICAgIDcyLCA3MywgNjksIDg1LCA3MiwgNDUsIDgyLCA3MywgNjksIDg1LCA3NiwgMTI4LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDQ1LCAKLSAgICA4MCwgNzMsIDY5LCA4NSwgODAsIDEyOCwgNzIsIDczLCA2OSwgODUsIDcyLCA0NSwgNzgsIDczLCA2OSwgODUsIDc4LCAxMjgsIAotICAgIDcyLCA3MywgNjksIDg1LCA3MiwgNDUsIDc3LCA3MywgNjksIDg1LCA3NywgMTI4LCA3MiwgNzMsIDY5LCA4NSwgMjAwLCA3MiwgCi0gICAgNzMsIDY5LCA4MiwgNzksIDcxLCA3NiwgODksIDgwLCA3MiwgNzMsIDE5NSwgNzIsIDczLCA2OSwgMTI4LCA3MiwgNzMsIDY4LCAKLSAgICA3MywgNzgsIDE5OSwgNzIsIDczLCA2OCwgNjksIDg0LCAxMjgsIDcyLCA3MywgNjgsIDY5LCAxMjgsIDcyLCA3MywgNjYsIAotICAgIDczLCA4MywgNjcsIDg1LCA4MywgMTI4LCA3MiwgNzIsIDg3LCA2NSwgMTI4LCA3MiwgNzIsIDg1LCAxMjgsIDcyLCA3MiwgCi0gICAgNzMsIDEyOCwgNzIsIDcyLCA2OSwgNjksIDEyOCwgNzIsIDcyLCA2OSwgMTI4LCA3MiwgNzIsIDY1LCA2NSwgMTI4LCA3MiwgCi0gICAgNzEsIDEyOCwgNzIsIDY5LCA4OCwgNzMsIDcwLCA3OSwgODIsIDIwNSwgNzIsIDY5LCA4OCwgNjUsIDcxLCA4MiwgNjUsIAotICAgIDIwNSwgNzIsIDY5LCA4OCwgNjUsIDcxLCA3OSwgNzgsIDEyOCwgNzIsIDY5LCA4MiwgODUsIDg0LCA4NSwgMTI4LCA3MiwgCi0gICAgNjksIDgyLCA4NSwgMTI4LCA3MiwgNjksIDgyLCA3NywgNzMsIDg0LCA3MywgNjUsIDIwNiwgNzIsIDY5LCA4MiwgNzcsIDczLCAKLSAgICA3OSwgNzgsIDczLCA2NSwgMjA2LCA3MiwgNjksIDgyLCA3NywgNjksIDgzLCAxMjgsIDcyLCA2OSwgODIsIDY5LCAxMjgsIAotICAgIDcyLCA2OSwgODIsIDY2LCAxMjgsIDcyLCA2OSwgODIsIDY1LCA2OSwgODUsIDIwNSwgNzIsIDY5LCA3OCwgNzEsIDEyOCwgCi0gICAgNzIsIDY5LCA3OCwgMTk5LCA3MiwgNjksIDc3LCA4MCwgMTI4LCA3MiwgNjksIDc2LCA3NywgNjksIDg0LCAxMjgsIDcyLCAKLSAgICA2OSwgNzYsIDc3LCA2OSwgMjEyLCA3MiwgNjksIDc2LCAyMDUsIDcyLCA2OSwgNzYsIDczLCA2NywgNzksIDgwLCA4NCwgNjksIAotICAgIDgyLCAxMjgsIDcyLCA2OSwgNzUsIDg1LCA4NCwgNjUsIDY1LCA4MiwgODUsIDEyOCwgNzIsIDY5LCA3MywgODMsIDY5LCA3MywgCi0gICAgMTI4LCA3MiwgNjksIDY1LCA4NiwgODksIDEyOCwgNzIsIDY5LCA2NSwgODYsIDY5LCA3OCwgNzYsIDIxNywgNzIsIDY5LCAKLSAgICA2NSwgODYsIDY5LCA3OCwgMTI4LCA3MiwgNjksIDY1LCA4NiwgNjksIDIwNiwgNzIsIDY5LCA2NSwgODIsIDg0LCA4MywgCi0gICAgMTI4LCA3MiwgNjksIDY1LCA4MiwgODQsIDQ1LCA4MywgNzIsIDY1LCA4MCwgNjksIDE5NiwgNzIsIDY5LCA2NSwgODIsIDg0LCAKLSAgICAxMjgsIDcyLCA2OSwgNjUsIDgyLCAyMTIsIDcyLCA2OSwgNjUsIDgyLCA0NSwgNzgsIDc5LCA0NSwgNjksIDg2LCA3MywgCi0gICAgMjA0LCA3MiwgNjksIDY1LCA2OCwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgMTI4LCA3MiwgNjksIDY1LCA2OCwgODMsIDg0LCAKLSAgICA3OSwgNzgsIDE5NywgNzIsIDY5LCA2NSwgNjgsIDgwLCA3MiwgNzksIDc4LCA2OSwgMTI4LCA3MiwgNjksIDY1LCA2OCwgNzMsIAotICAgIDc4LCA3MSwgMTI4LCA3MiwgNjYsIDY1LCA4MywgNjUsIDQ1LCA2OSwgODMsIDY1LCA4MywgMTkzLCA3MiwgNjYsIDY1LCA4MywgCi0gICAgMTkzLCA3MiwgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3MiwgNjUsIDg2LCA2OSwgMTI4LCA3MiwgNjUsIDg1LCAKLSAgICA4MCwgODQsIDgzLCA4NCwgNzMsIDc3LCA3NywgNjksIDEyOCwgNzIsIDY1LCA4NCwgNzIsIDczLCAxMjgsIDcyLCA2NSwgODQsIAotICAgIDY5LCAxMjgsIDcyLCA2NSwgODQsIDY3LCA3MiwgNzMsIDc4LCAxOTksIDcyLCA2NSwgODQsIDY1LCAxOTgsIDcyLCA2NSwgCi0gICAgODMsIDY5LCAyMTAsIDcyLCA2NSwgODMsIDY1LCA3OCwgODQsIDY1LCAxMjgsIDcyLCA2NSwgODIsIDgwLCA3OSwgNzksIDc4LCAKLSAgICAxMjgsIDcyLCA2NSwgODIsIDgwLCA3OSwgNzksIDIwNiwgNzIsIDY1LCA4MiwgNzcsIDc5LCA3OCwgNzMsIDY3LCAxMjgsIAotICAgIDcyLCA2NSwgODIsIDc1LCA3NiwgNjksIDY1LCAyMDYsIDcyLCA2NSwgODIsIDY4LCA3OCwgNjksIDgzLCA4MywgMTI4LCA3MiwgCi0gICAgNjUsIDgyLCAxOTYsIDcyLCA2NSwgODAsIDgwLCAyMTcsIDcyLCA2NSwgNzgsIDg1LCA3OCwgNzksIDIwNywgNzIsIDY1LCAKLSAgICA3OCwgNzEsIDkwLCA3MiwgNzksIDIxMywgNzIsIDY1LCA3OCwgNjgsIDgzLCAxMjgsIDcyLCA2NSwgNzgsIDY4LCAyMTEsIAotICAgIDcyLCA2NSwgNzgsIDY4LCA3NiwgNjksIDgzLCAxMjgsIDcyLCA2NSwgNzgsIDY4LCA3NiwgNjksIDEyOCwgNzIsIDY1LCA3OCwgCi0gICAgNjgsIDY2LCA2NSwgNzEsIDEyOCwgNzIsIDY1LCA3OCwgNjgsIDEyOCwgNzIsIDY1LCA3OCwgNDUsIDY1LCA3NSwgNjUsIDg0LCAKLSAgICAxMjgsIDcyLCA2NSwgNzcsIDkwLCA2NSwgMTI4LCA3MiwgNjUsIDc3LCA4MywgODQsIDY5LCAyMTAsIDcyLCA2NSwgNzcsIAotICAgIDc3LCA2OSwgODIsIDEyOCwgNzIsIDY1LCA3NywgNzcsIDY5LCAyMTAsIDcyLCA2NSwgNzcsIDY2LCA4NSwgODIsIDcxLCA2OSwgCi0gICAgODIsIDEyOCwgNzIsIDY1LCA3NiwgODEsIDY1LCAxMjgsIDcyLCA2NSwgNzYsIDc5LCAxMjgsIDcyLCA2NSwgNzYsIDcwLCAKLSAgICA0NSwgNjcsIDczLCA4MiwgNjcsIDc2LCAxOTcsIDcyLCA2NSwgNzYsIDcwLCAxMjgsIDcyLCA2NSwgNzYsIDY2LCA2OSwgODIsIAotICAgIDY4LCAxMjgsIDcyLCA2NSwgNzYsIDY1LCA3OCwgODQsIDY1LCAxMjgsIDcyLCA2NSwgNzMsIDg0LCA4NSwgMTI4LCA3MiwgCi0gICAgNjUsIDczLCA4MiwgNjcsIDg1LCA4NCwgMTI4LCA3MiwgNjUsIDczLCA4MiwgMTI4LCA3MiwgNjUsIDcxLCA3NiwgNjUsIAotICAgIDIxOCwgNzIsIDY1LCA3MSwgNzYsIDEyOCwgNzIsIDY1LCA3MCwgODUsIDc1LCA3MiwgNjUsIDEyOCwgNzIsIDY1LCA3MCwgCi0gICAgODUsIDc1LCA3MiwgMTI4LCA3MiwgNjUsIDY5LCA3MSwgMjA0LCA3MiwgNjUsIDY1LCA4MiwgODUsIDEyOCwgNzIsIDY1LCAKLSAgICA2NSwgNzcsIDEyOCwgNzIsIDY1LCAxOTMsIDcyLCA2NSwgNDUsIDcyLCA2NSwgMTI4LCA3MiwgNDgsIDQ4LCA1NiwgMTI4LCAKLSAgICA3MiwgNDgsIDQ4LCA1NSwgMTI4LCA3MiwgNDgsIDQ4LCA1NCwgNjUsIDEyOCwgNzIsIDQ4LCA0OCwgNTQsIDEyOCwgNzIsIAotICAgIDQ4LCA0OCwgNTMsIDEyOCwgNzIsIDQ4LCA0OCwgNTIsIDEyOCwgNzIsIDQ4LCA0OCwgNTEsIDEyOCwgNzIsIDQ4LCA0OCwgCi0gICAgNTAsIDEyOCwgNzIsIDQ4LCA0OCwgNDksIDEyOCwgNzIsIDQ1LCA4NCwgODksIDgwLCAxOTcsIDcxLCA4OSwgODUsIDEyOCwgCi0gICAgNzEsIDg5LCA3OSwgNzgsIDEyOCwgNzEsIDg5LCA3OSwgMTI4LCA3MSwgODksIDczLCAxMjgsIDcxLCA4OSwgNzAsIDIxMywgCi0gICAgNzEsIDg5LCA2OSwgNjksIDEyOCwgNzEsIDg5LCA2NSwgODMsIDEyOCwgNzEsIDg5LCA2NSwgNjUsIDEyOCwgNzEsIDg5LCAKLSAgICA2NSwgMTI4LCA3MSwgODksIDEyOCwgNzEsIDg3LCA4NSwgMTI4LCA3MSwgODcsIDczLCAxMjgsIDcxLCA4NywgNjksIDY5LCAKLSAgICAxMjgsIDcxLCA4NywgNjksIDEyOCwgNzEsIDg3LCA2NSwgNjUsIDEyOCwgNzEsIDg3LCA2NSwgMTI4LCA3MSwgODYsIDEyOCwgCi0gICAgNzEsIDg1LCA4MiwgODUsIDgzLCA3MiwgMTI4LCA3MSwgODUsIDgyLCA4NSwgNzgsIDEyOCwgNzEsIDg1LCA4MiwgNjUsIDc3LCAKLSAgICA4NSwgODQsIDc5LCA3OCwgMTI4LCA3MSwgODUsIDgyLCA1NSwgMTI4LCA3MSwgODUsIDc4LCA4NSwgMTI4LCA3MSwgODUsIAotICAgIDc4LCAyMTMsIDcxLCA4NSwgMjA1LCA3MSwgODUsIDc2LCAxMjgsIDcxLCA4NSwgNzMsIDg0LCA2NSwgODIsIDEyOCwgNzEsIAotICAgIDg1LCAxOTksIDcxLCA4NSwgNjksIDcyLCAxMjgsIDcxLCA4NSwgNjksIDIwMCwgNzEsIDg1LCA2OCwgMTI4LCA3MSwgODUsIAotICAgIDE5NiwgNzEsIDg1LCA2NSwgODIsIDY4LCA4MywgNzcsIDY1LCA3OCwgMTI4LCA3MSwgODUsIDY1LCA4MiwgNjgsIDY5LCA2OCwgCi0gICAgNzgsIDY5LCA4MywgODMsIDEyOCwgNzEsIDg1LCA2NSwgODIsIDY4LCA2OSwgMTk2LCA3MSwgODUsIDY1LCA4MiwgNjgsIAotICAgIDEyOCwgNzEsIDg1LCA2NSwgODIsIDY1LCA3OCwgMjAxLCA3MSwgODUsIDE5MywgNzEsIDg1LCAxNzgsIDcxLCA4NCwgNjksIAotICAgIDIxMCwgNzEsIDgzLCA4NSwgNzcsIDEyOCwgNzEsIDgzLCA4NSwgMjA1LCA3MSwgODIsIDIxMywgNzEsIDgyLCA3OSwgODcsIAotICAgIDczLCA3OCwgMTk5LCA3MSwgODIsIDc5LCA4NSwgNzgsIDY4LCAxMjgsIDcxLCA4MiwgNzksIDc4LCA4NCwgNzIsIDczLCA4MywgCi0gICAgNzcsIDY1LCA4NCwgNjUsIDEyOCwgNzEsIDgyLCA3MywgNzgsIDc4LCA3MywgNzgsIDE5OSwgNzEsIDgyLCA3MywgNzcsIDY1LCAKLSAgICA2NywgNzMsIDc4LCAxOTksIDcxLCA4MiwgNjksIDcxLCA3OSwgODIsIDczLCA2NSwgMjA2LCA3MSwgODIsIDY5LCA2OSwgCi0gICAgMjA2LCA3MSwgODIsIDY5LCA2NSwgODQsIDc4LCA2OSwgODMsIDgzLCAxMjgsIDcxLCA4MiwgNjksIDY1LCA4NCwgNjksIDgyLCAKLSAgICA0NSwgODQsIDcyLCA2NSwgNzgsIDEyOCwgNzEsIDgyLCA2OSwgNjUsIDg0LCA2OSwgODIsIDQ1LCA4NCwgNzIsIDY1LCAyMDYsIAotICAgIDcxLCA4MiwgNjksIDY1LCA4NCwgNjksIDIxMCwgNzEsIDgyLCA2OSwgNjUsIDIxMiwgNzEsIDgyLCA2NSwgODYsIDY5LCA4OSwgCi0gICAgNjUsIDgyLCAxOTYsIDcxLCA4MiwgNjUsIDg2LCA2OSwgNDUsIDc3LCA2NSwgNjcsIDgyLCA3OSwgNzgsIDEyOCwgNzEsIDgyLCAKLSAgICA2NSwgODYsIDY5LCA0NSwgNjUsIDY3LCA4NSwgODQsIDY5LCA0NSwgNzEsIDgyLCA2NSwgODYsIDY5LCAxMjgsIDcxLCA4MiwgCi0gICAgNjUsIDg2LCAxOTcsIDcxLCA4MiwgNjUsIDg0LCA2OSwgODIsIDEyOCwgNzEsIDgyLCA2NSwgODMsIDgzLCAxMjgsIDcxLCAKLSAgICA4MiwgNjUsIDgzLCAyMTEsIDcxLCA4MiwgNjUsIDgwLCA3MiwgNjksIDc3LCAxOTcsIDcxLCA4MiwgNjUsIDgwLCA2OSwgODMsIAotICAgIDEyOCwgNzEsIDgyLCA2NSwgNzcsIDc3LCAxOTMsIDcxLCA4MiwgNjUsIDczLCA3OCwgMTI4LCA3MSwgODIsIDY1LCA2OCwgCi0gICAgODUsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDcxLCA4MiwgNjUsIDY3LCA2OSwgMTI4LCA3MSwgODIsIDY1LCA2NywgMTk3LCAKLSAgICA3MSwgODAsIDY1LCAxMjgsIDcxLCA3OSwgODIsIDg0LCA3MiwgNzcsIDczLCA3NSwgNzksIDIwNiwgNzEsIDc5LCA4MiwgODQsIAotICAgIDEyOCwgNzEsIDc5LCA4MiwgNzEsIDc5LCA4NCwgNjksIDgyLCA3MywgMTI4LCA3MSwgNzksIDgyLCA3MSwgNzksIDgzLCA4OSwgCi0gICAgNzgsIDg0LCA3MiwgNjksIDg0LCA3OSwgNzgsIDEyOCwgNzEsIDc5LCA4MiwgNzEsIDc5LCAyMDYsIDcxLCA3OSwgODIsIDcxLCAKLSAgICA3MywgMTI4LCA3MSwgNzksIDgyLCA2NSwgMTI4LCA3MSwgNzksIDc5LCAxOTYsIDcxLCA3OSwgNzgsIDcxLCAxMjgsIDcxLCAKLSAgICA3OSwgNzYsIDY4LCAxMjgsIDcxLCA3OSwgNzUsIDEyOCwgNzEsIDc5LCA3MywgNzgsIDE5OSwgNzEsIDc5LCA2NiwgNzYsIAotICAgIDczLCA3OCwgMTI4LCA3MSwgNzksIDY1LCA3NiwgMTI4LCA3MSwgNzksIDY1LCAyMDQsIDcxLCA3OSwgNjUsIDEyOCwgNzEsIAotICAgIDc4LCA4OSwgNzMsIDgzLCAxMjgsIDcxLCA3OCwgNjUsIDg2LCA3MywgODksIDY1LCA3OCwgNzMsIDEyOCwgNzEsIDc2LCA3OSwgCi0gICAgODcsIDczLCA3OCwgMTk5LCA3MSwgNzYsIDc5LCA4NCwgODQsIDY1LCAyMDQsIDcxLCA3NiwgNzksIDY2LCAxOTcsIDcxLCAKLSAgICA3NiwgNzMsIDgzLCA4MywgNjUsIDc4LCA2OCwgMjA3LCA3MSwgNzYsIDY5LCA3MywgNjcsIDIwMCwgNzEsIDc2LCA2NSwgNzEsIAotICAgIDc5LCA3NiwgNzMsIDEyOCwgNzEsIDc2LCA2NSwgMTI4LCA3MSwgNzQsIDY5LCAxMjgsIDcxLCA3MywgODgsIDEyOCwgNzEsIAotICAgIDczLCA4NCwgMTI4LCA3MSwgNzMsIDgzLCA3MiwgMTI4LCA3MSwgNzMsIDgzLCAyMDAsIDcxLCA3MywgODMsIDY1LCA3NiwgCi0gICAgMTI4LCA3MSwgNzMsIDgyLCA4NSwgNjgsIDY1LCA2NSwgMTI4LCA3MSwgNzMsIDgyLCA3NiwgMTI4LCA3MSwgNzMsIDgyLCAKLSAgICA1MSwgMTI4LCA3MSwgNzMsIDgyLCAxNzksIDcxLCA3MywgODIsIDUwLCAxMjgsIDcxLCA3MywgODIsIDE3OCwgNzEsIDczLCAKLSAgICA4MCwgMTI4LCA3MSwgNzMsIDc4LCA3MywgNzMsIDEyOCwgNzEsIDczLCA3NywgNjksIDc2LCAxMjgsIDcxLCA3MywgNzcsIAotICAgIDY5LCAyMDQsIDcxLCA3MywgNzcsIDEyOCwgNzEsIDczLCA3MSwgNjUsIDEyOCwgNzEsIDczLCA2OSwgODQsIDEyOCwgNzEsIAotICAgIDczLCA2OCwgNzMsIDc3LCAxMjgsIDcxLCA3MywgNjYsIDY2LCA3OSwgODUsIDIxMSwgNzEsIDczLCA2NiwgNjUsIDEyOCwgCi0gICAgNzEsIDczLCA1MiwgMTI4LCA3MSwgNzMsIDE4MCwgNzEsIDcyLCA5MCwgMTI4LCA3MSwgNzIsIDg3LCA2NSwgMTI4LCA3MSwgCi0gICAgNzIsIDg1LCA3OCwgNzgsIDY1LCAxMjgsIDcxLCA3MiwgODUsIDc4LCA3OCwgMTkzLCA3MSwgNzIsIDg1LCAxMjgsIDcxLCAKLSAgICA3MiwgNzksIDg1LCAxMjgsIDcxLCA3MiwgNzksIDgzLCA4NCwgMTI4LCA3MSwgNzIsIDc5LCAxMjgsIDcxLCA3MiwgNzMsIAotICAgIDEyOCwgNzEsIDcyLCA3MiwgNjUsIDEyOCwgNzEsIDcyLCA2OSwgODUsIDg4LCAxMjgsIDcxLCA3MiwgNjksIDg1LCA3OCwgCi0gICAgMTI4LCA3MSwgNzIsIDY5LCA4NSwgNzEsIDcyLCA2OSwgODUsIDY1LCA2OSwgNzcsIDEyOCwgNzEsIDcyLCA2OSwgODUsIDcxLCAKLSAgICA3MiwgNjksIDc4LCAxMjgsIDcxLCA3MiwgNjksIDg1LCA2NSwgNjksIDgyLCA2NSwgNjksIDEyOCwgNzEsIDcyLCA2OSwgODUsIAotICAgIDY1LCA2OSwgNzEsIDcyLCA2OSwgODUsIDY1LCA2OSwgMTI4LCA3MSwgNzIsIDY5LCA4NCwgMTI4LCA3MSwgNzIsIDY5LCA2OSwgCi0gICAgMTI4LCA3MSwgNzIsIDY5LCAxMjgsIDcxLCA3MiwgMTk3LCA3MSwgNzIsIDY1LCA4OSwgNzgsIDEyOCwgNzEsIDcyLCA2NSwgCi0gICAgODIsIDY1LCA2OSwgMTI4LCA3MSwgNzIsIDY1LCA4MCwgMTI4LCA3MSwgNzIsIDY1LCA3OCwgMTI4LCA3MSwgNzIsIDY1LCAKLSAgICA3NywgNjUsIDc2LCAxMjgsIDcxLCA3MiwgNjUsIDczLCA3OCwgODUsIDEyOCwgNzEsIDcyLCA2NSwgNzMsIDc4LCAxMjgsIAotICAgIDcxLCA3MiwgNjUsIDczLCAyMDYsIDcxLCA3MiwgNjUsIDY4LCAxMjgsIDcxLCA3MiwgNjUsIDY1LCA3NywgNjUsIDY5LCAKLSAgICAxMjgsIDcxLCA3MiwgNjUsIDY1LCAxMjgsIDcxLCA3MSwgODcsIDczLCAxMjgsIDcxLCA3MSwgODcsIDY5LCA2OSwgMTI4LCAKLSAgICA3MSwgNzEsIDg3LCA2OSwgMTI4LCA3MSwgNzEsIDg3LCA2NSwgNjUsIDEyOCwgNzEsIDcxLCA4NywgNjUsIDEyOCwgNzEsIAotICAgIDcxLCA4NSwgODgsIDEyOCwgNzEsIDcxLCA4NSwgODQsIDEyOCwgNzEsIDcxLCA4NSwgODIsIDg4LCAxMjgsIDcxLCA3MSwgCi0gICAgODUsIDgyLCAxMjgsIDcxLCA3MSwgODUsIDc5LCA4OCwgMTI4LCA3MSwgNzEsIDg1LCA3OSwgODQsIDEyOCwgNzEsIDcxLCAKLSAgICA4NSwgNzksIDgwLCAxMjgsIDcxLCA3MSwgODUsIDc5LCAxMjgsIDcxLCA3MSwgNzksIDg4LCAxMjgsIDcxLCA3MSwgNzksIAotICAgIDg0LCAxMjgsIDcxLCA3MSwgNzksIDgwLCAxMjgsIDcxLCA3MSwgNzMsIDg4LCAxMjgsIDcxLCA3MSwgNzMsIDg0LCAxMjgsIAotICAgIDcxLCA3MSwgNzMsIDY5LCA4OCwgMTI4LCA3MSwgNzEsIDczLCA2OSwgODAsIDEyOCwgNzEsIDcxLCA3MywgNjksIDEyOCwgCi0gICAgNzEsIDcxLCA2OSwgODgsIDEyOCwgNzEsIDcxLCA2OSwgODQsIDEyOCwgNzEsIDcxLCA2OSwgODAsIDEyOCwgNzEsIDcxLCAKLSAgICA2NSwgODgsIDEyOCwgNzEsIDcxLCA2NSwgODQsIDEyOCwgNzEsIDcxLCA2NSwgNjUsIDEyOCwgNzEsIDY5LCA4NCwgMTkzLCAKLSAgICA3MSwgNjksIDgzLCA4NCwgODUsIDgyLCA2OSwgMTI4LCA3MSwgNjksIDgzLCA3MiwgODUsIDEyOCwgNzEsIDY5LCA4MywgNzIsIAotICAgIDg0LCA3MywgNzgsIDEyOCwgNzEsIDY5LCA4MywgNzIsIDg0LCA3MywgMjA2LCA3MSwgNjksIDgzLCA3MiwgNTAsIDEyOCwgCi0gICAgNzEsIDY5LCA4MiwgODMsIDcyLCA2NSwgODksIDczLCA3NywgMTI4LCA3MSwgNjksIDgyLCA3NywgNjUsIDIwNiwgNzEsIDY5LCAKLSAgICA4MiwgNjksIDgzLCA3MiwgMTI4LCA3MSwgNjksIDgyLCA2OSwgODMsIDIwMCwgNzEsIDY5LCA3OSwgNzcsIDY5LCA4NCwgODIsIAotICAgIDczLCA2NywgNjUsIDc2LCA3NiwgMjE3LCA3MSwgNjksIDc5LCA3NywgNjksIDg0LCA4MiwgNzMsIDE5NSwgNzEsIDY5LCA3OCwgCi0gICAgODQsIDc2LCAxOTcsIDcxLCA2OSwgNzgsIDczLCA4NCwgNzMsIDg2LCA2OSwgMTI4LCA3MSwgNjksIDc4LCA3MywgNzUsIAotICAgIDIwMSwgNzEsIDY5LCA3OCwgNjksIDgyLCA3MywgMTk1LCA3MSwgNjksIDc3LCA3MywgNzgsIDczLCAxMjgsIDcxLCA2OSwgCi0gICAgNzcsIDczLCA3OCwgNjUsIDg0LCA3MywgNzksIDIwNiwgNzEsIDY5LCAyMDUsIDcxLCA2OSwgNjgsIDc5LCA3NiwgNjUsIAotICAgIDEyOCwgNzEsIDY5LCA2OCwgNjksIDEyOCwgNzEsIDY5LCA2NiwgMjA3LCA3MSwgNjksIDY2LCAxOTMsIDcxLCA2OSwgNjUsIAotICAgIDgyLCAxMjgsIDcxLCA2OSwgNjUsIDIxMCwgNzEsIDY4LCA2NSwgNzgsIDEyOCwgNzEsIDY3LCA3MywgNzEsIDEyOCwgNzEsIAotICAgIDY3LCA2NSwgMjA2LCA3MSwgNjYsIDc5LCA3OCwgMTI4LCA3MSwgNjYsIDczLCA2OSwgMTk3LCA3MSwgNjYsIDY5LCA4NSwgCi0gICAgODgsIDEyOCwgNzEsIDY2LCA2OSwgODQsIDEyOCwgNzEsIDY2LCA2NSwgODksIDczLCAxMjgsIDcxLCA2NiwgNjUsIDc1LCAKLSAgICA4NSwgODIsIDg1LCA3OCwgNjksIDc4LCAxMjgsIDcxLCA2NiwgMTI4LCA3MSwgNjUsIDg5LCA2NSwgNzgsIDg1LCA3NSwgNzMsIAotICAgIDg0LCA4NCwgNjUsIDEyOCwgNzEsIDY1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzEsIDY1LCA4OSwgMTI4LCA3MSwgCi0gICAgNjUsIDg1LCA3OCwgODQsIDc2LCA2OSwgODQsIDEyOCwgNzEsIDY1LCA4NCwgNzIsIDY5LCA4MiwgNzMsIDc4LCA3MSwgMTI4LCAKLSAgICA3MSwgNjUsIDg0LCA3MiwgNjksIDgyLCA3MywgNzgsIDE5OSwgNzEsIDY1LCA4NCwgNjksIDEyOCwgNzEsIDY1LCA4MywgNzIsIAotICAgIDY1LCA3OCwgMTI4LCA3MSwgNjUsIDgyLCA4MywgNzIsIDg1LCA3OCwgNzMsIDEyOCwgNzEsIDY1LCA4MiwgNzksIDc4LCAKLSAgICAxMjgsIDcxLCA2NSwgODIsIDc3LCA2OSwgNzgsIDg0LCAxMjgsIDcxLCA2NSwgODIsIDY4LCA2OSwgNzgsIDEyOCwgNzEsIAotICAgIDY1LCA4MiwgNTEsIDEyOCwgNzEsIDY1LCA4MCwgODAsIDY5LCAxOTYsIDcxLCA2NSwgMjA4LCA3MSwgNjUsIDc4LCA3NywgCi0gICAgNjUsIDEyOCwgNzEsIDY1LCA3OCwgNzEsIDczLCA2NSwgMTI4LCA3MSwgNjUsIDc4LCA2OCwgMTkzLCA3MSwgNjUsIDc4LCAKLSAgICA1MCwgMTI4LCA3MSwgNjUsIDc4LCAxNzgsIDcxLCA2NSwgNzcsIDc3LCA2NSwgMTI4LCA3MSwgNjUsIDc3LCA3NiwgNjUsIAotICAgIDEyOCwgNzEsIDY1LCA3NywgNzYsIDEyOCwgNzEsIDY1LCA3NywgNjksIDEyOCwgNzEsIDY1LCA3NywgMTk3LCA3MSwgNjUsIAotICAgIDc3LCA2NSwgNzgsIDEyOCwgNzEsIDY1LCA3NywgNjUsIDc2LCAxMjgsIDcxLCA2NSwgNzcsIDY1LCAyMDQsIDcxLCA2NSwgCi0gICAgNzEsIDEyOCwgNzEsIDY1LCA3MCwgMTI4LCA3MSwgNjUsIDE5OCwgNzEsIDY1LCA2OSwgODQsIDg0LCA2NSwgNDUsIDgwLCAKLSAgICA3MywgNzYsIDc2LCA2NSwgMTI4LCA3MSwgNjUsIDY4LCA3OSwgNzYsIDEyOCwgNzEsIDY1LCA2OCwgMTI4LCA3MSwgNjUsIAotICAgIDE5NiwgNzEsIDY1LCA2NiwgNjUsIDEyOCwgNzEsIDY1LCA2NiwgMTkzLCA3MSwgNjUsIDY1LCA3MCwgODUsIDEyOCwgNzEsIAotICAgIDY1LCAxNzgsIDcxLCA0OCwgNTMsIDUyLCAxMjgsIDcxLCA0OCwgNTMsIDUxLCAxMjgsIDcxLCA0OCwgNTMsIDUwLCAxMjgsIAotICAgIDcxLCA0OCwgNTMsIDQ5LCAxMjgsIDcxLCA0OCwgNTMsIDQ4LCAxMjgsIDcxLCA0OCwgNTIsIDU3LCAxMjgsIDcxLCA0OCwgCi0gICAgNTIsIDU2LCAxMjgsIDcxLCA0OCwgNTIsIDU1LCAxMjgsIDcxLCA0OCwgNTIsIDU0LCAxMjgsIDcxLCA0OCwgNTIsIDUzLCAKLSAgICA2NSwgMTI4LCA3MSwgNDgsIDUyLCA1MywgMTI4LCA3MSwgNDgsIDUyLCA1MiwgMTI4LCA3MSwgNDgsIDUyLCA1MSwgNjUsIAotICAgIDEyOCwgNzEsIDQ4LCA1MiwgNTEsIDEyOCwgNzEsIDQ4LCA1MiwgNTAsIDEyOCwgNzEsIDQ4LCA1MiwgNDksIDEyOCwgNzEsIAotICAgIDQ4LCA1MiwgNDgsIDEyOCwgNzEsIDQ4LCA1MSwgNTcsIDEyOCwgNzEsIDQ4LCA1MSwgNTYsIDEyOCwgNzEsIDQ4LCA1MSwgCi0gICAgNTUsIDY1LCAxMjgsIDcxLCA0OCwgNTEsIDU1LCAxMjgsIDcxLCA0OCwgNTEsIDU0LCA2NSwgMTI4LCA3MSwgNDgsIDUxLCAKLSAgICA1NCwgMTI4LCA3MSwgNDgsIDUxLCA1MywgMTI4LCA3MSwgNDgsIDUxLCA1MiwgMTI4LCA3MSwgNDgsIDUxLCA1MSwgMTI4LCAKLSAgICA3MSwgNDgsIDUxLCA1MCwgMTI4LCA3MSwgNDgsIDUxLCA0OSwgMTI4LCA3MSwgNDgsIDUxLCA0OCwgMTI4LCA3MSwgNDgsIAotICAgIDUwLCA1NywgMTI4LCA3MSwgNDgsIDUwLCA1NiwgMTI4LCA3MSwgNDgsIDUwLCA1NSwgMTI4LCA3MSwgNDgsIDUwLCA1NCwgCi0gICAgNjUsIDEyOCwgNzEsIDQ4LCA1MCwgNTQsIDEyOCwgNzEsIDQ4LCA1MCwgNTMsIDEyOCwgNzEsIDQ4LCA1MCwgNTIsIDEyOCwgCi0gICAgNzEsIDQ4LCA1MCwgNTEsIDEyOCwgNzEsIDQ4LCA1MCwgNTAsIDEyOCwgNzEsIDQ4LCA1MCwgNDksIDEyOCwgNzEsIDQ4LCAKLSAgICA1MCwgNDgsIDY1LCAxMjgsIDcxLCA0OCwgNTAsIDQ4LCAxMjgsIDcxLCA0OCwgNDksIDU3LCAxMjgsIDcxLCA0OCwgNDksIAotICAgIDU2LCAxMjgsIDcxLCA0OCwgNDksIDU1LCAxMjgsIDcxLCA0OCwgNDksIDU0LCAxMjgsIDcxLCA0OCwgNDksIDUzLCAxMjgsIAotICAgIDcxLCA0OCwgNDksIDUyLCAxMjgsIDcxLCA0OCwgNDksIDUxLCAxMjgsIDcxLCA0OCwgNDksIDUwLCAxMjgsIDcxLCA0OCwgCi0gICAgNDksIDQ5LCA2NSwgMTI4LCA3MSwgNDgsIDQ5LCA0OSwgMTI4LCA3MSwgNDgsIDQ5LCA0OCwgMTI4LCA3MSwgNDgsIDQ4LCAKLSAgICA1NywgMTI4LCA3MSwgNDgsIDQ4LCA1NiwgMTI4LCA3MSwgNDgsIDQ4LCA1NSwgNjYsIDEyOCwgNzEsIDQ4LCA0OCwgNTUsIAotICAgIDY1LCAxMjgsIDcxLCA0OCwgNDgsIDU1LCAxMjgsIDcxLCA0OCwgNDgsIDU0LCA2NSwgMTI4LCA3MSwgNDgsIDQ4LCA1NCwgCi0gICAgMTI4LCA3MSwgNDgsIDQ4LCA1MywgMTI4LCA3MSwgNDgsIDQ4LCA1MiwgMTI4LCA3MSwgNDgsIDQ4LCA1MSwgMTI4LCA3MSwgCi0gICAgNDgsIDQ4LCA1MCwgMTI4LCA3MSwgNDgsIDQ4LCA0OSwgMTI4LCA3MCwgODksIDg4LCAxMjgsIDcwLCA4OSwgODQsIDEyOCwgCi0gICAgNzAsIDg5LCA4MCwgMTI4LCA3MCwgODksIDY1LCAxMjgsIDcwLCA4NywgNzMsIDEyOCwgNzAsIDg3LCA2OSwgNjksIDEyOCwgCi0gICAgNzAsIDg3LCA2OSwgMTI4LCA3MCwgODcsIDY1LCA2NSwgMTI4LCA3MCwgODcsIDY1LCAxMjgsIDcwLCA4NiwgODMsIDUxLCAKLSAgICAxMjgsIDcwLCA4NiwgODMsIDUwLCAxMjgsIDcwLCA4NiwgODMsIDQ5LCAxMjgsIDcwLCA4NSwgODgsIDEyOCwgNzAsIDg1LCAKLSAgICA4NCwgMTI4LCA3MCwgODUsIDgzLCA2OSwgMTI4LCA3MCwgODUsIDgzLCAxOTMsIDcwLCA4NSwgODIsIDg4LCAxMjgsIDcwLCAKLSAgICA4NSwgODAsIDEyOCwgNzAsIDg1LCA3OCwgNjksIDgyLCA2NSwgMjA0LCA3MCwgODUsIDc4LCA2NywgODQsIDczLCA3OSwgNzgsIAotICAgIDY1LCAyMDQsIDcwLCA4NSwgNzgsIDY3LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA3MCwgODUsIDc2LCA3NiwgNzgsIDY5LCA4MywgCi0gICAgODMsIDEyOCwgNzAsIDg1LCA3NiwgMjA0LCA3MCwgODUsIDc0LCA3MywgMTI4LCA3MCwgODUsIDY5LCA4NCwgMTI4LCA3MCwgCi0gICAgODUsIDY5LCAyMDQsIDcwLCA4NSwgNjksIDEyOCwgNzAsIDg0LCA3MiwgNzksIDgyLCAxOTMsIDcwLCA4MiwgNzksIDg3LCAKLSAgICA3OCwgNzMsIDc4LCA3MSwgMTI4LCA3MCwgODIsIDc5LCA4NywgNzgsIDczLCA3OCwgMTk5LCA3MCwgODIsIDc5LCA4NywgNzgsIAotICAgIDEyOCwgNzAsIDgyLCA3OSwgNzgsIDg0LCA0NSwgODQsIDczLCA3NiwgODQsIDY5LCAxOTYsIDcwLCA4MiwgNzksIDc4LCA4NCwgCi0gICAgNDUsIDcwLCA2NSwgNjcsIDczLCA3OCwgMTk5LCA3MCwgODIsIDc5LCAyMDUsIDcwLCA4MiwgNzksIDcxLCAxMjgsIDcwLCAKLSAgICA4MiwgNzksIDE5OSwgNzAsIDgyLCA3MywgODQsIDg1LCAxMjgsIDcwLCA4MiwgNzMsIDY5LCA4MywgMTI4LCA3MCwgODIsIAotICAgIDczLCA2OSwgMTk2LCA3MCwgODIsIDczLCA2NywgNjUsIDg0LCA3MywgODYsIDY5LCAxMjgsIDcwLCA4MiwgNjksIDg0LCA2NiwgCi0gICAgNzksIDY1LCA4MiwgNjgsIDEyOCwgNzAsIDgyLCA2OSwgNzgsIDY3LCAyMDAsIDcwLCA4MiwgNjksIDY5LCAxMjgsIDcwLCAKLSAgICA4MiwgNjksIDE5NywgNzAsIDgyLCA2NSwgNzgsIDE5NSwgNzAsIDgyLCA2NSwgNzcsIDY5LCAxMjgsIDcwLCA4MiwgNjUsIAotICAgIDcxLCA4MiwgNjUsIDc4LCA4NCwgMTI4LCA3MCwgODIsIDY1LCA3MSwgNzcsIDY5LCA3OCwgODQsIDEyOCwgNzAsIDgyLCA2NSwgCi0gICAgNjcsIDg0LCA3MywgNzksIDIwNiwgNzAsIDc5LCA4OCwgMTI4LCA3MCwgNzksIDg1LCA4MiwgODQsIDY5LCA2OSwgNzgsIAotICAgIDEyOCwgNzAsIDc5LCA4NSwgODIsIDg0LCA2OSwgNjksIDIwNiwgNzAsIDc5LCA4NSwgODIsIDQ1LCA4NCwgNzIsIDczLCA4MiwgCi0gICAgODQsIDg5LCAxMjgsIDcwLCA3OSwgODUsIDgyLCA0NSwgODMsIDg0LCA4MiwgNzMsIDc4LCAxOTksIDcwLCA3OSwgODUsIDgyLCAKLSAgICA0NSwgODAsIDY5LCA4MiwgNDUsIDY5LCAyMDUsIDcwLCA3OSwgODUsIDgyLCA0NSwgNzYsIDczLCA3OCwgMTk3LCA3MCwgNzksIAotICAgIDg1LCAyMTAsIDcwLCA3OSwgODUsIDc4LCA4NCwgNjUsIDczLCA3OCwgMTI4LCA3MCwgNzksIDgzLCA4NCwgNjksIDgyLCA3MywgCi0gICAgNzgsIDcxLCAxMjgsIDcwLCA3OSwgODIsIDg3LCA2NSwgODIsIDY4LCAxMjgsIDcwLCA3OSwgODIsIDg0LCA4OSwgMTI4LCAKLSAgICA3MCwgNzksIDgyLCA4NCwgMjE3LCA3MCwgNzksIDgyLCA4NCwgNjksIDEyOCwgNzAsIDc5LCA4MiwgNzcsIDIxMSwgNzAsIAotICAgIDc5LCA4MiwgNzcsIDY1LCA4NCwgODQsIDczLCA3OCwgNzEsIDEyOCwgNzAsIDc5LCA4MiwgNzUsIDY5LCAxOTYsIDcwLCA3OSwgCi0gICAgODIsIDY3LCA2OSwgODMsIDEyOCwgNzAsIDc5LCA4MiwgNjcsIDY5LCAxMjgsIDcwLCA3OSwgODAsIDEyOCwgNzAsIDc5LCAKLSAgICA3OSwgODQsIDgzLCA4NCwgNzksIDc5LCA3NiwgMTI4LCA3MCwgNzksIDc5LCA4NCwgODAsIDgyLCA3MywgNzgsIDg0LCA4MywgCi0gICAgMTI4LCA3MCwgNzksIDc5LCA4NCwgNzgsIDc5LCA4NCwgMTk3LCA3MCwgNzksIDc5LCA4NCwgNjYsIDY1LCA3NiwgNzYsIAotICAgIDEyOCwgNzAsIDc5LCA3OSwgODQsIDEyOCwgNzAsIDc5LCA3OSwgNjgsIDEyOCwgNzAsIDc5LCA3OSwgMTI4LCA3MCwgNzksIAotICAgIDc4LCA3MSwgNzcsIDY1LCA3OCwgMTI4LCA3MCwgNzksIDc3LCAxMjgsIDcwLCA3OSwgNzYsIDc2LCA4OSwgMTI4LCA3MCwgCi0gICAgNzksIDc2LCA3NiwgNzksIDg3LCA3MywgNzgsIDcxLCAxMjgsIDcwLCA3OSwgNzYsIDY4LCA2OSwgODIsIDEyOCwgNzAsIDc5LCAKLSAgICA3NiwgNjgsIDY5LCAxOTYsIDcwLCA3OSwgNzEsIDcxLCA4OSwgMTI4LCA3MCwgMjA3LCA3MCwgNzcsIDEyOCwgNzAsIDc2LCAKLSAgICA4OSwgMTI4LCA3MCwgNzYsIDg1LCA4NCwgODQsIDY5LCA4MiwgNzMsIDc4LCAxOTksIDcwLCA3NiwgODUsIDg0LCA2OSwgCi0gICAgMTI4LCA3MCwgNzYsIDg1LCA4MywgNzIsIDY5LCAxOTYsIDcwLCA3NiwgNzksIDg3LCA3MywgNzgsIDE5OSwgNzAsIDc2LCAKLSAgICA3OSwgODcsIDY5LCAyMTAsIDcwLCA3NiwgNzksIDg1LCA4MiwgNzMsIDgzLCA3MiwgMTI4LCA3MCwgNzYsIDc5LCA4MiwgNjksIAotICAgIDg0LCA4NCwgNjksIDEyOCwgNzAsIDc2LCA3OSwgODIsIDY1LCAyMDQsIDcwLCA3NiwgNzksIDgwLCA4MCwgMjE3LCA3MCwgCi0gICAgNzYsIDc5LCA3OSwgODIsIDEyOCwgNzAsIDc2LCA3MywgODAsIDEyOCwgNzAsIDc2LCA3MywgNzEsIDcyLCA4NCwgMTI4LCAKLSAgICA3MCwgNzYsIDY5LCA4OCwgODUsIDgzLCAxMjgsIDcwLCA3NiwgNjksIDg4LCA2OSwgMTk2LCA3MCwgNzYsIDY5LCA4NSwgODIsIAotICAgIDQ1LCA2OCwgNjksIDQ1LCA3NiwgNzMsIDgzLCAxMjgsIDcwLCA3NiwgNjUsIDg0LCA4NCwgNjksIDc4LCA2OSwgMTk2LCA3MCwgCi0gICAgNzYsIDY1LCA4NCwgNzgsIDY5LCA4MywgODMsIDEyOCwgNzAsIDc2LCA2NSwgODQsIDEyOCwgNzAsIDc2LCA2NSwgMjEyLCAKLSAgICA3MCwgNzYsIDY1LCA3MSwgODMsIDEyOCwgNzAsIDc2LCA2NSwgNzEsIDQ1LCA1MywgMTI4LCA3MCwgNzYsIDY1LCA3MSwgNDUsIAotICAgIDUyLCAxMjgsIDcwLCA3NiwgNjUsIDcxLCA0NSwgNTEsIDEyOCwgNzAsIDc2LCA2NSwgNzEsIDQ1LCA1MCwgMTI4LCA3MCwgCi0gICAgNzYsIDY1LCA3MSwgNDUsIDQ5LCAxMjgsIDcwLCA3NiwgNjUsIDcxLCAxMjgsIDcwLCA3NiwgNjUsIDE5OSwgNzAsIDc2LCAKLSAgICA2NSwgMTI4LCA3MCwgNzYsIDEyOCwgNzAsIDczLCA4OCwgNjksIDY4LCA0NSwgNzAsIDc5LCA4MiwgMjA1LCA3MCwgNzMsIAotICAgIDg4LCAxMjgsIDcwLCA3MywgODYsIDY5LCA0NSwgODQsIDcyLCA3MywgODIsIDg0LCA4OSwgMTI4LCA3MCwgNzMsIDg2LCA2OSwgCi0gICAgNDUsIDc2LCA3MywgNzgsIDE5NywgNzAsIDczLCA4NiwgMTk3LCA3MCwgNzMsIDg0LCA2NSwgMTI4LCA3MCwgNzMsIDg0LCAKLSAgICAxMjgsIDcwLCA3MywgODMsIDg0LCA2OSwgMTk2LCA3MCwgNzMsIDgzLCA4NCwgMTI4LCA3MCwgNzMsIDgzLCA3MiwgNzMsIAotICAgIDc4LCAxOTksIDcwLCA3MywgODMsIDcyLCA3MiwgNzksIDc5LCA3NSwgMTI4LCA3MCwgNzMsIDgzLCA3MiwgNzIsIDc5LCA3OSwgCi0gICAgMjAzLCA3MCwgNzMsIDgzLCA3MiwgNjksIDg5LCA2OSwgMTI4LCA3MCwgNzMsIDgzLCA3MiwgMTI4LCA3MCwgNzMsIDgzLCAKLSAgICAyMDAsIDcwLCA3MywgODIsIDgzLCAyMTIsIDcwLCA3MywgODIsIDczLCAxMjgsIDcwLCA3MywgODIsIDY5LCA4NywgNzksIAotICAgIDgyLCA3NSwgODMsIDEyOCwgNzAsIDczLCA4MiwgNjksIDg3LCA3OSwgODIsIDIwMywgNzAsIDczLCA4MiwgNjksIDEyOCwgCi0gICAgNzAsIDczLCA4MiwgMTk3LCA3MCwgNzMsIDgwLCAxMjgsIDcwLCA3MywgNzgsIDczLCA4NCwgMTk3LCA3MCwgNzMsIDc4LCAKLSAgICA3MSwgNjksIDgyLCA3OCwgNjUsIDczLCA3NiwgODMsIDEyOCwgNzAsIDczLCA3OCwgNzEsIDY5LCA4MiwgNjksIDE5NiwgNzAsIAotICAgIDczLCA3OCwgNjUsIDc4LCA2NywgNzMsIDY1LCA3NiwgMTI4LCA3MCwgNzMsIDc2LCA3NiwgNjksIDgyLCAxMjgsIDcwLCA3MywgCi0gICAgNzYsIDc2LCA2OSwgMTk2LCA3MCwgNzMsIDc2LCA3NiwgMTI4LCA3MCwgNzMsIDc2LCAyMDQsIDcwLCA3MywgNzYsIDE5NywgCi0gICAgNzAsIDczLCA3MywgMTI4LCA3MCwgNzMsIDcxLCA4NSwgODIsIDY5LCA0NSwgNTEsIDEyOCwgNzAsIDczLCA3MSwgODUsIDgyLCAKLSAgICA2OSwgNDUsIDUwLCAxMjgsIDcwLCA3MywgNzEsIDg1LCA4MiwgNjksIDQ1LCA0OSwgMTI4LCA3MCwgNzMsIDcxLCA4NSwgODIsIAotICAgIDE5NywgNzAsIDczLCA3MSwgNzIsIDg0LCAxMjgsIDcwLCA3MywgNzAsIDg0LCA4OSwgMTI4LCA3MCwgNzMsIDcwLCA4NCwgCi0gICAgMjE3LCA3MCwgNzMsIDcwLCA4NCwgNzIsIDgzLCAxMjgsIDcwLCA3MywgNzAsIDg0LCA3MiwgMTI4LCA3MCwgNzMsIDcwLCAKLSAgICA4NCwgNjksIDY5LCA3OCwgMTI4LCA3MCwgNzMsIDcwLCA4NCwgNjksIDY5LCAyMDYsIDcwLCA3MywgNjksIDc2LCA2OCwgCi0gICAgMTI4LCA3MCwgNzIsIDg0LCA3OSwgODIsIDE5MywgNzAsIDcwLCA3NiwgMTI4LCA3MCwgNzAsIDczLCAxMjgsIDcwLCA2OSwgCi0gICAgODUsIDg4LCAxMjgsIDcwLCA2OSwgODUsIDcwLCA2OSwgODUsIDY1LCA2OSwgODQsIDEyOCwgNzAsIDY5LCA4MywgODQsIDczLCAKLSAgICA4NiwgNjUsIDc2LCAxMjgsIDcwLCA2OSwgODIsIDgyLCA4OSwgMTI4LCA3MCwgNjksIDgyLCA4MiwgNzMsIDIxMSwgNzAsIAotICAgIDY5LCA4MiwgNzcsIDY1LCA4NCwgNjUsIDEyOCwgNzAsIDY5LCA4MiwgNzcsIDY1LCA4NCwgMTkzLCA3MCwgNjksIDc5LCAKLSAgICAyMDAsIDcwLCA2OSwgNzgsIDE5OSwgNzAsIDY5LCA3OCwgNjcsIDY5LCAxMjgsIDcwLCA2OSwgNzcsIDczLCA3OCwgNzMsIAotICAgIDc4LCAxOTcsIDcwLCA2OSwgNzcsIDY1LCA3NiwgNjksIDEyOCwgNzAsIDY5LCA3NywgNjUsIDc2LCAxOTcsIDcwLCA2OSwgCi0gICAgNzYsIDc2LCA3OSwgODcsIDgzLCA3MiwgNzMsIDgwLCAxMjgsIDcwLCA2OSwgNzMsIDEyOCwgNzAsIDY5LCA3MiwgMjEzLCAKLSAgICA3MCwgNjksIDcyLCAxMjgsIDcwLCA2OSwgMjAwLCA3MCwgNjksIDY5LCA3OCwgNzEsIDEyOCwgNzAsIDY5LCA2OSwgNjgsIAotICAgIDEyOCwgNzAsIDY5LCA2OSwgMTk2LCA3MCwgNjksIDY5LCAxMjgsIDcwLCA2OSwgNjYsIDgyLCA4NSwgNjUsIDgyLCA4OSwgCi0gICAgMTI4LCA3MCwgNjksIDY1LCA4NCwgNzIsIDY5LCA4MiwgMTI4LCA3MCwgNjksIDY1LCA4NCwgNzIsIDY5LCAyMTAsIDcwLCAKLSAgICA2OSwgNjUsIDgyLCA3OCwgMTI4LCA3MCwgNjksIDY1LCA4MiwgNzAsIDg1LCAyMDQsIDcwLCA2OSwgNjUsIDgyLCAxMjgsIAotICAgIDcwLCA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDcwLCA2NSwgODksIDEyOCwgNzAsIDY1LCA4OCwgMTI4LCA3MCwgCi0gICAgNjUsIDIxNiwgNzAsIDY1LCA4NCwgNzMsIDcxLCA4NSwgNjksIDEyOCwgNzAsIDY1LCA4NCwgNzIsIDY5LCA4MiwgMTI4LCAKLSAgICA3MCwgNjUsIDg0LCA3MiwgNjksIDIxMCwgNzAsIDY1LCA4NCwgNzIsIDY1LCA4NCwgNjUsIDc4LCAxMjgsIDcwLCA2NSwgODQsIAotICAgIDcyLCA2NSwgODQsIDY1LCAyMDYsIDcwLCA2NSwgODQsIDcyLCA2NSwgMTI4LCA3MCwgNjUsIDg0LCA3MiwgMTkzLCA3MCwgCi0gICAgNjUsIDg0LCAxMjgsIDcwLCA2NSwgODIsIDgzLCAyMDEsIDcwLCA2NSwgODEsIDEyOCwgNzAsIDY1LCA4MCwgMTI4LCA3MCwgCi0gICAgNjUsIDc4LCA3MSwgMTI4LCA3MCwgNjUsIDc4LCA2OSwgODIsIDc5LCA4MywgNzMsIDIxMSwgNzAsIDY1LCA3OCwgMTI4LCAKLSAgICA3MCwgNjUsIDc3LCA3MywgNzYsIDg5LCAxMjgsIDcwLCA2NSwgNzYsIDc2LCA3MywgNzgsIDE5OSwgNzAsIDY1LCA3NiwgNzYsIAotICAgIDY5LCAyMDYsIDcwLCA2NSwgNzMsIDc2LCA4NSwgODIsIDY5LCAxMjgsIDcwLCA2NSwgNzMsIDcyLCA4NSwgMTI4LCA3MCwgCi0gICAgNjUsIDcyLCA4MiwgNjksIDc4LCA3MiwgNjksIDczLCA4NCwgMTI4LCA3MCwgNjUsIDY3LCA4NCwgNzksIDgyLCA4OSwgMTI4LCAKLSAgICA3MCwgNjUsIDY3LCA4NCwgNzksIDIxMCwgNzAsIDY1LCA2NywgODMsIDczLCA3NywgNzMsIDc2LCAxOTcsIDcwLCA2NSwgNjcsIAotICAgIDY5LCA0NSwgNTQsIDEyOCwgNzAsIDY1LCA2NywgNjksIDQ1LCA1MywgMTI4LCA3MCwgNjUsIDY3LCA2OSwgNDUsIDUyLCAKLSAgICAxMjgsIDcwLCA2NSwgNjcsIDY5LCA0NSwgNTEsIDEyOCwgNzAsIDY1LCA2NywgNjksIDQ1LCA1MCwgMTI4LCA3MCwgNjUsIAotICAgIDY3LCA2OSwgNDUsIDQ5LCAxMjgsIDcwLCA2NSwgNjUsIDc3LCA2NSwgNjksIDEyOCwgNzAsIDY1LCA2NSwgNzMsIDEyOCwgCi0gICAgNzAsIDY1LCA2NSwgNzAsIDg1LCAxMjgsIDcwLCA0OCwgNTMsIDUxLCAxMjgsIDcwLCA0OCwgNTMsIDUwLCAxMjgsIDcwLCAKLSAgICA0OCwgNTMsIDQ5LCA2NywgMTI4LCA3MCwgNDgsIDUzLCA0OSwgNjYsIDEyOCwgNzAsIDQ4LCA1MywgNDksIDY1LCAxMjgsIAotICAgIDcwLCA0OCwgNTMsIDQ5LCAxMjgsIDcwLCA0OCwgNTMsIDQ4LCAxMjgsIDcwLCA0OCwgNTIsIDU3LCAxMjgsIDcwLCA0OCwgCi0gICAgNTIsIDU2LCAxMjgsIDcwLCA0OCwgNTIsIDU1LCA2NSwgMTI4LCA3MCwgNDgsIDUyLCA1NSwgMTI4LCA3MCwgNDgsIDUyLCAKLSAgICA1NCwgNjUsIDEyOCwgNzAsIDQ4LCA1MiwgNTQsIDEyOCwgNzAsIDQ4LCA1MiwgNTMsIDY1LCAxMjgsIDcwLCA0OCwgNTIsIAotICAgIDUzLCAxMjgsIDcwLCA0OCwgNTIsIDUyLCAxMjgsIDcwLCA0OCwgNTIsIDUxLCAxMjgsIDcwLCA0OCwgNTIsIDUwLCAxMjgsIAotICAgIDcwLCA0OCwgNTIsIDQ5LCAxMjgsIDcwLCA0OCwgNTIsIDQ4LCAxMjgsIDcwLCA0OCwgNTEsIDU3LCAxMjgsIDcwLCA0OCwgCi0gICAgNTEsIDU2LCA2NSwgMTI4LCA3MCwgNDgsIDUxLCA1NiwgMTI4LCA3MCwgNDgsIDUxLCA1NSwgNjUsIDEyOCwgNzAsIDQ4LCAKLSAgICA1MSwgNTUsIDEyOCwgNzAsIDQ4LCA1MSwgNTQsIDEyOCwgNzAsIDQ4LCA1MSwgNTMsIDEyOCwgNzAsIDQ4LCA1MSwgNTIsIAotICAgIDEyOCwgNzAsIDQ4LCA1MSwgNTEsIDEyOCwgNzAsIDQ4LCA1MSwgNTAsIDEyOCwgNzAsIDQ4LCA1MSwgNDksIDY1LCAxMjgsIAotICAgIDcwLCA0OCwgNTEsIDQ5LCAxMjgsIDcwLCA0OCwgNTEsIDQ4LCAxMjgsIDcwLCA0OCwgNTAsIDU3LCAxMjgsIDcwLCA0OCwgCi0gICAgNTAsIDU2LCAxMjgsIDcwLCA0OCwgNTAsIDU1LCAxMjgsIDcwLCA0OCwgNTAsIDU0LCAxMjgsIDcwLCA0OCwgNTAsIDUzLCAKLSAgICAxMjgsIDcwLCA0OCwgNTAsIDUyLCAxMjgsIDcwLCA0OCwgNTAsIDUxLCAxMjgsIDcwLCA0OCwgNTAsIDUwLCAxMjgsIDcwLCAKLSAgICA0OCwgNTAsIDQ5LCA2NSwgMTI4LCA3MCwgNDgsIDUwLCA0OSwgMTI4LCA3MCwgNDgsIDUwLCA0OCwgMTI4LCA3MCwgNDgsIAotICAgIDQ5LCA1NywgMTI4LCA3MCwgNDgsIDQ5LCA1NiwgMTI4LCA3MCwgNDgsIDQ5LCA1NSwgMTI4LCA3MCwgNDgsIDQ5LCA1NCwgCi0gICAgMTI4LCA3MCwgNDgsIDQ5LCA1MywgMTI4LCA3MCwgNDgsIDQ5LCA1MiwgMTI4LCA3MCwgNDgsIDQ5LCA1MSwgNjUsIDEyOCwgCi0gICAgNzAsIDQ4LCA0OSwgNTEsIDEyOCwgNzAsIDQ4LCA0OSwgNTAsIDEyOCwgNzAsIDQ4LCA0OSwgNDksIDEyOCwgNzAsIDQ4LCAKLSAgICA0OSwgNDgsIDEyOCwgNzAsIDQ4LCA0OCwgNTcsIDEyOCwgNzAsIDQ4LCA0OCwgNTYsIDEyOCwgNzAsIDQ4LCA0OCwgNTUsIAotICAgIDEyOCwgNzAsIDQ4LCA0OCwgNTQsIDEyOCwgNzAsIDQ4LCA0OCwgNTMsIDEyOCwgNzAsIDQ4LCA0OCwgNTIsIDEyOCwgNzAsIAotICAgIDQ4LCA0OCwgNTEsIDEyOCwgNzAsIDQ4LCA0OCwgNTAsIDEyOCwgNzAsIDQ4LCA0OCwgNDksIDY1LCAxMjgsIDcwLCA0OCwgCi0gICAgNDgsIDQ5LCAxMjgsIDY5LCA5MCwgMjAwLCA2OSwgOTAsIDY5LCA3OCwgMTI4LCA2OSwgOTAsIDY5LCAyMDYsIDY5LCA5MCwgCi0gICAgMTI4LCA2OSwgODksIDY5LCA4MywgMTI4LCA2OSwgODksIDY5LCA3MSwgNzYsIDY1LCA4MywgODMsIDY5LCA4MywgMTI4LCAKLSAgICA2OSwgODksIDY2LCA2OSwgODksIDcwLCA3MywgNzYsIDczLCAxMjgsIDY5LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNjksIAotICAgIDg4LCA4NCwgODIsIDY1LCA4NCwgNjksIDgyLCA4MiwgNjksIDgzLCA4NCwgODIsIDczLCA2NSwgMjA0LCA2OSwgODgsIDg0LCAKLSAgICA4MiwgNjUsIDQ1LCA3NiwgNzksIDIxNSwgNjksIDg4LCA4NCwgODIsIDY1LCA0NSwgNzIsIDczLCA3MSwgMjAwLCA2OSwgODgsIAotICAgIDg0LCA2OSwgNzgsIDgzLCA3MywgNzksIDc4LCAxMjgsIDY5LCA4OCwgODQsIDY5LCA3OCwgNjgsIDY5LCAxOTYsIDY5LCA4OCwgCi0gICAgODAsIDgyLCA2OSwgODMsIDgzLCA3MywgNzksIDc4LCA3NiwgNjksIDgzLCAyMTEsIDY5LCA4OCwgODAsIDc5LCA3OCwgNjksIAotICAgIDc4LCAyMTIsIDY5LCA4OCwgNzksIDEyOCwgNjksIDg4LCAyMDcsIDY5LCA4OCwgNzMsIDgzLCA4NCwgODMsIDEyOCwgNjksIAotICAgIDg4LCA3MywgODMsIDg0LCAxMjgsIDY5LCA4OCwgNzIsIDY1LCA4NSwgODMsIDg0LCA3MywgNzksIDc4LCAxMjgsIDY5LCA4OCwgCi0gICAgNjcsIDc2LCA2NSwgNzcsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA2OSwgODgsIDY3LCA3NiwgNjUsIDc3LCA2NSwgODQsIAotICAgIDczLCA3OSwgMjA2LCA2OSwgODgsIDY3LCA3MiwgNjUsIDc4LCA3MSwgNjksIDEyOCwgNjksIDg4LCA2NywgNjksIDgzLCA4MywgCi0gICAgMTI4LCA2OSwgODgsIDY3LCA2OSwgNzYsIDc2LCA2OSwgNzgsIDg0LCAxMjgsIDY5LCA4NywgNjksIDEyOCwgNjksIDg2LCAKLSAgICA2OSwgODIsIDcxLCA4MiwgNjksIDY5LCAyMDYsIDY5LCA4NiwgNjksIDc4LCA3MywgNzgsIDcxLCAxMjgsIDY5LCA4NSwgODIsIAotICAgIDc5LCA4MCwgNjksIDY1LCAyMDYsIDY5LCA4NSwgODIsIDc5LCA4MCwgNjksIDQ1LCA2NSwgNzAsIDgyLCA3MywgNjcsIDY1LCAKLSAgICAxMjgsIDY5LCA4NSwgODIsIDc5LCA0NSwgNjcsIDg1LCA4MiwgODIsIDY5LCA3OCwgNjcsIDIxNywgNjksIDg1LCA4MiwgCi0gICAgMjA3LCA2OSwgODUsIDc2LCA2OSwgMjEwLCA2OSwgODUsIDQ1LCA4NSwgMTI4LCA2OSwgODUsIDQ1LCA3OSwgMTI4LCA2OSwgCi0gICAgODUsIDQ1LCA2OSwgODUsIDEyOCwgNjksIDg1LCA0NSwgNjksIDc5LCAxMjgsIDY5LCA4NSwgNDUsIDY5LCAxMjgsIDY5LCAKLSAgICA4NSwgNDUsIDY1LCAxMjgsIDY5LCA4NCwgODgsIDEyOCwgNjksIDg0LCA3OCwgNjUsIDcyLCA4NCwgNjUsIDEyOCwgNjksIAotICAgIDg0LCA3MiwgNjksIDIwNCwgNjksIDg0LCA2OSwgODIsIDc5LCAyMDYsIDY5LCA4NCwgNjksIDgyLCA3OCwgNzMsIDg0LCA4OSwgCi0gICAgMTI4LCA2OSwgODQsIDY2LCAxMjgsIDY5LCA4MywgODUsIDc1LCA4NSwgODUsIDY4LCA3OSwgMTI4LCA2OSwgODMsIDg0LCAKLSAgICA3MywgNzcsIDY1LCA4NCwgNjksIDgzLCAxMjgsIDY5LCA4MywgODQsIDczLCA3NywgNjUsIDg0LCA2OSwgMTk2LCA2OSwgODMsIAotICAgIDcyLCA2OSwgNTEsIDEyOCwgNjksIDgzLCA3MiwgNTAsIDQ5LCAxMjgsIDY5LCA4MywgNzIsIDE3OCwgNjksIDgzLCA3MiwgCi0gICAgNDksIDU0LCAxMjgsIDY5LCA4MywgNjcsIDY1LCA4MCwgNjksIDEyOCwgNjksIDgzLCA2NywgMTI4LCA2OSwgODMsIDY1LCAKLSAgICAxMjgsIDY5LCA4MywgNDUsIDg0LCA2OSwgMTI4LCA2OSwgODIsIDgyLCA3OSwgODIsIDQ1LCA2NiwgNjUsIDgyLCA4MiwgNjksIAotICAgIDE5NiwgNjksIDgyLCA4MiwgMTI4LCA2OSwgODIsIDczLCA3OCwgNTAsIDEyOCwgNjksIDgyLCA3MSwgMTI4LCA2OSwgODIsIAotICAgIDY1LCA4MywgMTk3LCA2OSwgODEsIDg1LCA3MywgODYsIDY1LCA3NiwgNjksIDc4LCAyMTIsIDY5LCA4MSwgODUsIDczLCA2OCwgCi0gICAgMTI4LCA2OSwgODEsIDg1LCA3MywgNjUsIDc4LCA3MSwgODUsIDc2LCA2NSwgMjEwLCA2OSwgODEsIDg1LCA2NSwgNzYsIDgzLCAKLSAgICAxMjgsIDY5LCA4MSwgODUsIDY1LCA3NiwgMjExLCA2OSwgODEsIDg1LCA2NSwgNzYsIDEyOCwgNjksIDgwLCA4MywgNzMsIAotICAgIDc2LCA3OSwgNzgsIDEyOCwgNjksIDgwLCA4MywgNzMsIDc2LCA3OSwgMjA2LCA2OSwgODAsIDc5LCA2NywgNzIsIDEyOCwgCi0gICAgNjksIDgwLCA3MywgNzEsIDgyLCA2NSwgODAsIDcyLCA3MywgMTk1LCA2OSwgODAsIDczLCA2OCwgNjUsIDg1LCA4MiwgNjksIAotICAgIDY1LCAyMDYsIDY5LCA4MCwgNjksIDc4LCA4NCwgNzIsIDY5LCA4NCwgNzMsIDE5NSwgNjksIDgwLCA2OSwgNzEsIDY5LCA4MiwgCi0gICAgNzcsIDY1LCAxMjgsIDY5LCA3OSwgODQsIDEyOCwgNjksIDc5LCA3NywgMTI4LCA2OSwgNzksIDc2LCA3MiwgODgsIDEyOCwgCi0gICAgNjksIDc5LCA3NiwgMTI4LCA2OSwgNzksIDcyLCAxMjgsIDY5LCA3OCwgODksIDEyOCwgNjksIDc4LCA4NiwgNjksIDc2LCAKLSAgICA3OSwgODAsIDY5LCAxMjgsIDY5LCA3OCwgODYsIDY5LCA3NiwgNzksIDgwLCAxOTcsIDY5LCA3OCwgODUsIDc3LCA2OSwgODIsIAotICAgIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDY5LCA3OCwgODQsIDgyLCA4OSwgNDUsIDUwLCAxMjgsIDY5LCA3OCwgODQsIDgyLCA4OSwgCi0gICAgNDUsIDQ5LCAxMjgsIDY5LCA3OCwgODQsIDgyLCA4OSwgMTI4LCA2OSwgNzgsIDg0LCA4MiwgMjE3LCA2OSwgNzgsIDg0LCAKLSAgICA3MiwgODUsIDgzLCA3MywgNjUsIDgzLCA3NywgMTI4LCA2OSwgNzgsIDg0LCA2OSwgODIsIDgwLCA4MiwgNzMsIDgzLCA2OSwgCi0gICAgMTI4LCA2OSwgNzgsIDg0LCA2OSwgODIsIDczLCA3OCwgMTk5LCA2OSwgNzgsIDg0LCA2OSwgODIsIDEyOCwgNjksIDc4LCAKLSAgICA4NCwgNjksIDIxMCwgNjksIDc4LCA4MSwgODUsIDczLCA4MiwgODksIDEyOCwgNjksIDc4LCA4MSwgMTI4LCA2OSwgNzgsIAotICAgIDc5LCAyMTEsIDY5LCA3OCwgNzgsIDEyOCwgNjksIDc4LCA3NiwgNjUsIDgyLCA3MSwgNjksIDc3LCA2OSwgNzgsIDg0LCAKLSAgICAxMjgsIDY5LCA3OCwgNzEsIDczLCA3OCwgNjksIDEyOCwgNjksIDc4LCA2OCwgNzksIDcwLCA3OSwgNzgsIDc5LCA3OCwgCi0gICAgMTI4LCA2OSwgNzgsIDY4LCA3MywgNzgsIDE5OSwgNjksIDc4LCA2OCwgNjksIDgwLCAxMjgsIDY5LCA3OCwgNjgsIDY5LCAKLSAgICA2NSwgODYsIDc5LCA4NSwgODIsIDEyOCwgNjksIDc4LCA2NywgNzksIDg1LCA3OCwgODQsIDY5LCA4MiwgODMsIDEyOCwgNjksIAotICAgIDc4LCA2NywgNzYsIDc5LCA4MywgODUsIDgyLCA2OSwgMTI4LCA2OSwgNzgsIDY3LCA3NiwgNzksIDgzLCA3MywgNzgsIDE5OSwgCi0gICAgNjksIDc4LCA2NywgMTI4LCA2OSwgNzgsIDY1LCA4MiwgODgsIDczLCAyMTEsIDY5LCA3OCwgNjUsIDgyLCA3NywgNzksIDc4LCAKLSAgICA3MywgNzksIDIxMSwgNjksIDc3LCA4MCwgODQsIDIxNywgNjksIDc3LCA4MCwgNzIsIDY1LCA4NCwgNzMsIDE5NSwgNjksIAotICAgIDc3LCA4MCwgNzIsIDY1LCA4MywgNzMsIDIxMSwgNjksIDc3LCA2NiwgODIsIDc5LCA3MywgNjgsIDY5LCA4MiwgODksIDEyOCwgCi0gICAgNjksIDc3LCA2NiwgNzYsIDY5LCA3NywgMTI4LCA2OSwgNzcsIDY2LCA2OSwgNzYsIDc2LCA3MywgODMsIDcyLCA3NywgNjksIAotICAgIDc4LCA4NCwgMTI4LCA2OSwgNzcsIDY2LCA2OSwgNjgsIDY4LCA3MywgNzgsIDcxLCAxMjgsIDY5LCA3NiwgODQsIDEyOCwgCi0gICAgNjksIDc2LCA3NiwgNzMsIDgwLCA4NCwgNzMsIDE5NSwgNjksIDc2LCA3NiwgNzMsIDgwLCA4MywgNzMsIDgzLCAxMjgsIDY5LCAKLSAgICA3NiwgNzYsIDczLCA4MCwgODMsIDY5LCAxMjgsIDY5LCA3NiwgNzMsIDcwLCA3MywgMTI4LCA2OSwgNzYsIDY5LCA4NiwgNjksIAotICAgIDc4LCA0NSwgODQsIDcyLCA3MywgODIsIDg0LCA4OSwgMTI4LCA2OSwgNzYsIDY5LCA4NiwgNjksIDc4LCAxMjgsIDY5LCA3NiwgCi0gICAgNjksIDg2LCA2OSwgMjA2LCA2OSwgNzYsIDY5LCA4MCwgNzIsIDY1LCA3OCwgODQsIDEyOCwgNjksIDc2LCA2OSwgNzcsIDY5LCAKLSAgICA3OCwgMjEyLCA2OSwgNzYsIDY5LCA2NywgODQsIDgyLCA3MywgNjcsIDY1LCAyMDQsIDY5LCA3NiwgNjksIDY3LCA4NCwgODIsIAotICAgIDczLCAxOTUsIDY5LCA3NiwgNjUsIDcwLCA4MiwgNzksIDc4LCAxMjgsIDY5LCA3NSwgODMsIDg0LCA4MiwgNjksIDgwLCA4NCwgCi0gICAgNzksIDc4LCAxMjgsIDY5LCA3NSwgODMsIDEyOCwgNjksIDc1LCA3MCwgNzksIDc4LCA3MywgODQsIDczLCA3NSwgNzksIDc4LCAKLSAgICAxMjgsIDY5LCA3NSwgNjUsIDgyLCA2NSwgMTI4LCA2OSwgNzQsIDY5LCA2NywgMjEyLCA2OSwgNzMsIDgzLCAxMjgsIDY5LCAKLSAgICA3MywgNzEsIDcyLCA4NCwgODksIDEyOCwgNjksIDczLCA3MSwgNzIsIDg0LCAyMTcsIDY5LCA3MywgNzEsIDcyLCA4NCwgNzIsIAotICAgIDgzLCAxMjgsIDY5LCA3MywgNzEsIDcyLCA4NCwgNzIsIDIxMSwgNjksIDczLCA3MSwgNzIsIDg0LCA3MiwgMTI4LCA2OSwgCi0gICAgNzMsIDcxLCA3MiwgODQsIDY5LCA2OSwgNzgsIDEyOCwgNjksIDczLCA3MSwgNzIsIDg0LCA2OSwgNjksIDIwNiwgNjksIDczLCAKLSAgICA3MSwgNzIsIDg0LCA0NSwgODQsIDcyLCA3MywgODIsIDg0LCA4OSwgMTI4LCA2OSwgNzMsIDY5LCAxMjgsIDY5LCA3MiwgODcsIAotICAgIDY1LCAyMTgsIDY5LCA3MSwgODksIDgwLCA4NCwgNzksIDc2LCA3OSwgNzEsIDczLCA2NywgNjUsIDIwNCwgNjksIDcxLCA3MywgCi0gICAgODIsIDEyOCwgNjksIDcxLCA3MSwgMTI4LCA2OSwgNjksIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA2OSwgNjksIDc1LCAKLSAgICA2NSwgNjUsIDEyOCwgNjksIDY5LCA3MiwgMTI4LCA2OSwgNjksIDY2LCA2OSwgNjksIDcwLCA3MywgNzYsIDczLCAxMjgsIAotICAgIDY5LCA2OCwgNzMsIDg0LCA3OSwgODIsIDczLCA2NSwgMjA0LCA2OSwgNjgsIDczLCA3OCwgMTI4LCA2OSwgNjgsIDY4LCAKLSAgICAxMjgsIDY5LCA2NiwgNjksIDcwLCA3MywgNzYsIDczLCAxMjgsIDY5LCA2NSwgODMsIDg0LCA2OSwgODIsIDIwNiwgNjksIAotICAgIDY1LCA4MywgMjEyLCA2OSwgNjUsIDgyLCA4NCwgNzIsIDc2LCAyMTcsIDY5LCA2NSwgODIsIDg0LCA3MiwgMTI4LCA2OSwgCi0gICAgNjUsIDgyLCA4NCwgMjAwLCA2OSwgNjUsIDgyLCA4MywgMTI4LCA2OSwgNjUsIDgyLCA3NiwgMjE3LCA2OSwgNjUsIDc3LCAKLSAgICA3MiwgNjUsIDc4LCA2NywgNzIsIDc5LCA3NiwgNzYsIDEyOCwgNjksIDY1LCA3MSwgNzYsIDY5LCAxMjgsIDY5LCA2NSwgNjgsIAotICAgIDcyLCA2NSwgNjgsIDcyLCAxMjgsIDY5LCA2NSwgNjYsIDcyLCA2NSwgNjgsIDcyLCAxMjgsIDY5LCAxNzgsIDY5LCA0OCwgCi0gICAgNTEsIDU2LCAxMjgsIDY5LCA0OCwgNTEsIDU1LCAxMjgsIDY5LCA0OCwgNTEsIDU0LCAxMjgsIDY5LCA0OCwgNTEsIDUyLCAKLSAgICA2NSwgMTI4LCA2OSwgNDgsIDUxLCA1MiwgMTI4LCA2OSwgNDgsIDUxLCA1MSwgMTI4LCA2OSwgNDgsIDUxLCA1MCwgMTI4LCAKLSAgICA2OSwgNDgsIDUxLCA0OSwgMTI4LCA2OSwgNDgsIDUxLCA0OCwgMTI4LCA2OSwgNDgsIDUwLCA1NywgMTI4LCA2OSwgNDgsIAotICAgIDUwLCA1NiwgNjUsIDEyOCwgNjksIDQ4LCA1MCwgNTYsIDEyOCwgNjksIDQ4LCA1MCwgNTUsIDEyOCwgNjksIDQ4LCA1MCwgCi0gICAgNTQsIDEyOCwgNjksIDQ4LCA1MCwgNTMsIDEyOCwgNjksIDQ4LCA1MCwgNTIsIDEyOCwgNjksIDQ4LCA1MCwgNTEsIDEyOCwgCi0gICAgNjksIDQ4LCA1MCwgNTAsIDEyOCwgNjksIDQ4LCA1MCwgNDksIDEyOCwgNjksIDQ4LCA1MCwgNDgsIDY1LCAxMjgsIDY5LCAKLSAgICA0OCwgNTAsIDQ4LCAxMjgsIDY5LCA0OCwgNDksIDU3LCAxMjgsIDY5LCA0OCwgNDksIDU2LCAxMjgsIDY5LCA0OCwgNDksIAotICAgIDU1LCA2NSwgMTI4LCA2OSwgNDgsIDQ5LCA1NSwgMTI4LCA2OSwgNDgsIDQ5LCA1NCwgNjUsIDEyOCwgNjksIDQ4LCA0OSwgCi0gICAgNTQsIDEyOCwgNjksIDQ4LCA0OSwgNTMsIDEyOCwgNjksIDQ4LCA0OSwgNTIsIDEyOCwgNjksIDQ4LCA0OSwgNTEsIDEyOCwgCi0gICAgNjksIDQ4LCA0OSwgNTAsIDEyOCwgNjksIDQ4LCA0OSwgNDksIDEyOCwgNjksIDQ4LCA0OSwgNDgsIDEyOCwgNjksIDQ4LCAKLSAgICA0OCwgNTcsIDY1LCAxMjgsIDY5LCA0OCwgNDgsIDU3LCAxMjgsIDY5LCA0OCwgNDgsIDU2LCA2NSwgMTI4LCA2OSwgNDgsIAotICAgIDQ4LCA1NiwgMTI4LCA2OSwgNDgsIDQ4LCA1NSwgMTI4LCA2OSwgNDgsIDQ4LCA1NCwgMTI4LCA2OSwgNDgsIDQ4LCA1MywgCi0gICAgMTI4LCA2OSwgNDgsIDQ4LCA1MiwgMTI4LCA2OSwgNDgsIDQ4LCA1MSwgMTI4LCA2OSwgNDgsIDQ4LCA1MCwgMTI4LCA2OSwgCi0gICAgNDgsIDQ4LCA0OSwgMTI4LCA2OSwgNDUsIDc3LCA2NSwgNzMsIDIwNCwgNjgsIDkwLCA5MCwgNjksIDEyOCwgNjgsIDkwLCAKLSAgICA5MCwgNjUsIDEyOCwgNjgsIDkwLCA4NywgNjksIDEyOCwgNjgsIDkwLCA4NSwgMTI4LCA2OCwgOTAsIDc5LCAxMjgsIDY4LCAKLSAgICA5MCwgNzQsIDY5LCAxMjgsIDY4LCA5MCwgNzMsIDEyOCwgNjgsIDkwLCA3MiwgNjksIDEyOCwgNjgsIDkwLCA3MiwgNjUsIAotICAgIDEyOCwgNjgsIDkwLCA2OSwgNzYsIDc5LCAxMjgsIDY4LCA5MCwgNjksIDY5LCAxMjgsIDY4LCA5MCwgNjksIDEyOCwgNjgsIAotICAgIDkwLCA2NSwgNjUsIDEyOCwgNjgsIDkwLCA2NSwgMTI4LCA2OCwgOTAsIDEyOCwgNjgsIDIxOCwgNjgsIDg5LCA3OSwgMTI4LCAKLSAgICA2OCwgODksIDIwNywgNjgsIDg5LCA2OSwgNzIsIDEyOCwgNjgsIDg5LCA2OSwgMjAwLCA2OCwgODcsIDc5LCAxMjgsIDY4LCAKLSAgICA4NywgNjksIDEyOCwgNjgsIDg3LCA2NSwgMTI4LCA2OCwgODYsIDczLCA4MywgODYsIDY1LCA4MiwgNjUsIDEyOCwgNjgsIAotICAgIDg2LCA2OCwgMTI4LCA2OCwgODYsIDEyOCwgNjgsIDg1LCA4NCwgNzMsIDY5LCA4MywgMTI4LCA2OCwgODUsIDgzLCA3NSwgCi0gICAgMTI4LCA2OCwgODUsIDgzLCA3MiwgNjksIDc4LCA3OCwgNjUsIDEyOCwgNjgsIDg1LCA4MiwgNjUsIDg0LCA3MywgNzksIDc4LCAKLSAgICAxMjgsIDY4LCA4NSwgODIsIDUwLCAxMjgsIDY4LCA4NSwgODAsIDc5LCA3OCwgNjgsIDczLCA4NSwgMjExLCA2OCwgODUsIAotICAgIDc5LCA4OCwgMTI4LCA2OCwgODUsIDc5LCAxMjgsIDY4LCA4NSwgNzgsIDUyLCAxMjgsIDY4LCA4NSwgNzgsIDUxLCAxMjgsIAotICAgIDY4LCA4NSwgNzgsIDE3OSwgNjgsIDg1LCA3NywgMTI4LCA2OCwgODUsIDIwNCwgNjgsIDg1LCA3MiwgMTI4LCA2OCwgODUsIAotICAgIDcxLCA4NSwgNjgsIDEyOCwgNjgsIDg1LCA2NiwgNTAsIDEyOCwgNjgsIDg1LCA2NiwgMTI4LCA2OCwgODUsIDE5NCwgNjgsIAotICAgIDgyLCA4OSwgMTI4LCA2OCwgODIsIDIxNywgNjgsIDgyLCA4NSwgNzcsIDEyOCwgNjgsIDgyLCA4NSwgMjA1LCA2OCwgODIsIAotICAgIDc5LCA4MCwgODMsIDEyOCwgNjgsIDgyLCA3OSwgODAsIDc2LCA2OSwgODQsIDEyOCwgNjgsIDgyLCA3OSwgODAsIDQ1LCA4MywgCi0gICAgNzIsIDY1LCA2OCwgNzksIDg3LCA2OSwgMTk2LCA2OCwgODIsIDc5LCA3NywgNjksIDY4LCA2NSwgODIsIDIxNywgNjgsIDgyLCAKLSAgICA3MywgODYsIDY5LCAxMjgsIDY4LCA4MiwgNzMsIDg2LCAxOTcsIDY4LCA4MiwgNzMsIDc4LCA3NSwgMTI4LCA2OCwgODIsIAotICAgIDczLCAyMDQsIDY4LCA4MiwgNjksIDgzLCA4MywgMTI4LCA2OCwgODIsIDY1LCA4NSwgNzEsIDcyLCA4NCwgMjExLCA2OCwgCi0gICAgODIsIDY1LCA3NywgMTI4LCA2OCwgODIsIDY1LCAyMDUsIDY4LCA4MiwgNjUsIDcxLCA3OSwgNzgsIDEyOCwgNjgsIDgyLCAKLSAgICA2NSwgNzEsIDc5LCAyMDYsIDY4LCA4MiwgNjUsIDcwLCA4NCwgNzMsIDc4LCAxOTksIDY4LCA4MiwgNjUsIDY3LCA3MiwgNzcsIAotICAgIDY1LCA4MywgMTI4LCA2OCwgODIsIDY1LCA2NywgNzIsIDc3LCA2NSwgMTI4LCA2OCwgODIsIDY1LCA2NywgNzIsIDc3LCAKLSAgICAxOTMsIDY4LCA3OSwgODcsIDc4LCA4NywgNjUsIDgyLCA2OCwgODMsIDEyOCwgNjgsIDc5LCA4NywgNzgsIDg3LCA2NSwgODIsIAotICAgIDY4LCAyMTEsIDY4LCA3OSwgODcsIDc4LCA0NSwgODAsIDc5LCA3MywgNzgsIDg0LCA3MywgNzgsIDE5OSwgNjgsIDc5LCA4NywgCi0gICAgNzgsIDEyOCwgNjgsIDc5LCA4NiwgNjksIDEyOCwgNjgsIDc5LCA4NSwgNzEsIDcyLCA3OCwgODUsIDg0LCAxMjgsIDY4LCAKLSAgICA3OSwgODUsIDY2LCA4NCwgMTI4LCA2OCwgNzksIDg1LCA2NiwgNzYsIDY5LCAxOTYsIDY4LCA3OSwgODUsIDY2LCA3NiwgNjksIAotICAgIDQ1LCA3NiwgNzMsIDc4LCAxOTcsIDY4LCA3OSwgODUsIDY2LCA3NiwgNjksIDQ1LCA2OSwgNzgsIDY4LCA2OSwgMTk2LCA2OCwgCi0gICAgNzksIDg1LCA2NiwgNzYsIDY5LCAxMjgsIDY4LCA3OSwgODQsIDg0LCA2OSwgNjgsIDQ1LCA4MCwgMTI4LCA2OCwgNzksIDg0LCAKLSAgICA4NCwgNjksIDY4LCA0NSwgNzgsIDEyOCwgNjgsIDc5LCA4NCwgODQsIDY5LCA2OCwgNDUsIDc2LCAxMjgsIDY4LCA3OSwgODQsIAotICAgIDg0LCA2OSwgNjgsIDEyOCwgNjgsIDc5LCA4NCwgODQsIDY5LCAxOTYsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTYsIDEyOCwgCi0gICAgNjgsIDc5LCA4NCwgODMsIDQ1LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1NSwgMTI4LCA2OCwgNzksIDg0LCAKLSAgICA4MywgNDUsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIAotICAgIDQ1LCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUzLCA1NiwgCi0gICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUzLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MywgNTUsIAotICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTMsIDU0LCA1NSwgCi0gICAgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTMsIDU0LCAKLSAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MiwgNTYsIDEyOCwgNjgsIAotICAgIDc5LCA4NCwgODMsIDQ1LCA1MiwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIDU1LCAxMjgsIDY4LCA3OSwgCi0gICAgODQsIDgzLCA0NSwgNTIsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUyLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCAKLSAgICA3OSwgODQsIDgzLCA0NSwgNTIsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUyLCA1NCwgMTI4LCA2OCwgNzksIAotICAgIDg0LCA4MywgNDUsIDUyLCA1MywgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MiwgNTMsIDU1LCA1NiwgMTI4LCA2OCwgCi0gICAgNzksIDg0LCA4MywgNDUsIDUyLCA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MiwgNTMsIDU0LCA1NiwgMTI4LCAKLSAgICA2OCwgNzksIDg0LCA4MywgNDUsIDUyLCA1MywgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUyLCA1MywgCi0gICAgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUyLCAKLSAgICA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUyLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDU2LCAxMjgsIAotICAgIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1NSwgMTI4LCA2OCwgCi0gICAgNzksIDg0LCA4MywgNDUsIDUxLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTQsIDU1LCA1NiwgMTI4LCAKLSAgICA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTQsIDEyOCwgNjgsIAotICAgIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTMsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUzLCA1NSwgNTYsIDEyOCwgCi0gICAgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTMsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUzLCA1NCwgNTYsIAotICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTMsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgCi0gICAgNTMsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKLSAgICA1MSwgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTIsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIAotICAgIDUyLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTIsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCi0gICAgNTEsIDUyLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTIsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCAKLSAgICA4NCwgODMsIDQ1LCA1MSwgNTIsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MiwgNTQsIDEyOCwgNjgsIAotICAgIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTIsIDUzLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MiwgNTMsIDU1LCAKLSAgICA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MiwgNTMsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIAotICAgIDUyLCA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUyLCA1MywgNTQsIDU1LCA1NiwgMTI4LCA2OCwgCi0gICAgNzksIDg0LCA4MywgNDUsIDUxLCA1MiwgNTMsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MiwgNTMsIAotICAgIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUyLCA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MiwgCi0gICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDU2LCAxMjgsIDY4LCAKLSAgICA3OSwgODQsIDgzLCA0NSwgNTAsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1NSwgMTI4LCA2OCwgNzksIAotICAgIDg0LCA4MywgNDUsIDUwLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTQsIDU1LCA1NiwgMTI4LCA2OCwgCi0gICAgNzksIDg0LCA4MywgNDUsIDUwLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTQsIDEyOCwgNjgsIDc5LCAKLSAgICA4NCwgODMsIDQ1LCA1MCwgNTMsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUzLCA1NSwgNTYsIDEyOCwgNjgsIAotICAgIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTMsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUzLCA1NCwgNTYsIDEyOCwgCi0gICAgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTMsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTMsIAotICAgIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgCi0gICAgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTIsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUyLCAKLSAgICA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTIsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIAotICAgIDUyLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTIsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgCi0gICAgODMsIDQ1LCA1MCwgNTIsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MiwgNTQsIDEyOCwgNjgsIDc5LCAKLSAgICA4NCwgODMsIDQ1LCA1MCwgNTIsIDUzLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MiwgNTMsIDU1LCA1NiwgCi0gICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MiwgNTMsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUyLCAKLSAgICA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUyLCA1MywgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIAotICAgIDg0LCA4MywgNDUsIDUwLCA1MiwgNTMsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MiwgNTMsIDU0LCAKLSAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUyLCA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MiwgCi0gICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDU1LCAKLSAgICA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIAotICAgIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgCi0gICAgNDUsIDUwLCA1MSwgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1NCwgMTI4LCA2OCwgNzksIDg0LCAKLSAgICA4MywgNDUsIDUwLCA1MSwgNTMsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MywgNTUsIDU2LCAxMjgsIAotICAgIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUzLCAKLSAgICA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUzLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIAotICAgIDgzLCA0NSwgNTAsIDUxLCA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MywgNTQsIDEyOCwgCi0gICAgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MiwgNTYsIAotICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUyLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgCi0gICAgNTEsIDUyLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTIsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCAKLSAgICA4MywgNDUsIDUwLCA1MSwgNTIsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUyLCA1NCwgCi0gICAgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUyLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCAKLSAgICA1MSwgNTIsIDUzLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTIsIDUzLCA1NSwgNTYsIDEyOCwgNjgsIAotICAgIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUyLCA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUyLCAKLSAgICA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MiwgNTMsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIAotICAgIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCAKLSAgICA1MiwgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MiwgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIAotICAgIDQ1LCA1MCwgNTEsIDUyLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCi0gICAgNTAsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTUsIDU2LCAKLSAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDU0LCA1NiwgCi0gICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDU0LCAKLSAgICA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MywgNTYsIAotICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTMsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MywgCi0gICAgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTMsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCAKLSAgICA1MywgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIAotICAgIDgzLCA0NSwgNDksIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgCi0gICAgNDUsIDQ5LCA1MiwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTIsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCAKLSAgICA4MywgNDUsIDQ5LCA1MiwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTIsIDU0LCA1NiwgMTI4LCA2OCwgNzksIAotICAgIDg0LCA4MywgNDUsIDQ5LCA1MiwgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MiwgNTQsIDU1LCAKLSAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUyLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MiwgNTMsIAotICAgIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUyLCA1MywgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCi0gICAgNDksIDUyLCA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTIsIDUzLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCAKLSAgICA4NCwgODMsIDQ1LCA0OSwgNTIsIDUzLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUyLCA1MywgCi0gICAgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUyLCA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKLSAgICA0OSwgNTIsIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUyLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIAotICAgIDUxLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCi0gICAgNDksIDUxLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCAKLSAgICA0NSwgNDksIDUxLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1NCwgNTUsIDEyOCwgNjgsIAotICAgIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MywgNTYsIDEyOCwgCi0gICAgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUzLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIAotICAgIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTMsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgCi0gICAgNDUsIDQ5LCA1MSwgNTMsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUzLCA1NCwgNTUsIAotICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgCi0gICAgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUyLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCAKLSAgICA1MSwgNTIsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTIsIDU1LCAxMjgsIDY4LCA3OSwgODQsIAotICAgIDgzLCA0NSwgNDksIDUxLCA1MiwgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MiwgNTQsIDU1LCAKLSAgICA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTIsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIAotICAgIDQ5LCA1MSwgNTIsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MiwgNTMsIDU2LCAxMjgsIDY4LCA3OSwgCi0gICAgODQsIDgzLCA0NSwgNDksIDUxLCA1MiwgNTMsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTIsIAotICAgIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTIsIDUzLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgCi0gICAgODMsIDQ1LCA0OSwgNTEsIDUyLCA1MywgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTIsIAotICAgIDUzLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUyLCA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgCi0gICAgODMsIDQ1LCA0OSwgNTEsIDUyLCA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTIsIDEyOCwgNjgsIDc5LCAKLSAgICA4NCwgODMsIDQ1LCA0OSwgNTEsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDU2LCAxMjgsIDY4LCA3OSwgODQsIAotICAgIDgzLCA0NSwgNDksIDUwLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDU1LCAxMjgsIDY4LCA3OSwgCi0gICAgODQsIDgzLCA0NSwgNDksIDUwLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDU0LCA1NSwgNTYsIAotICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgCi0gICAgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUzLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCAKLSAgICA1MCwgNTMsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTMsIDU1LCAxMjgsIDY4LCA3OSwgODQsIAotICAgIDgzLCA0NSwgNDksIDUwLCA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MywgNTQsIDU1LCAKLSAgICA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTMsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIAotICAgIDQ5LCA1MCwgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgCi0gICAgNDUsIDQ5LCA1MCwgNTIsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MiwgNTUsIDU2LCAxMjgsIDY4LCAKLSAgICA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MiwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCA1NCwgCi0gICAgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCAKLSAgICA0NSwgNDksIDUwLCA1MiwgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MiwgNTQsIDEyOCwgNjgsIAotICAgIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCA1MywgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCAKLSAgICA1MywgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MiwgNTMsIDU1LCAxMjgsIDY4LCA3OSwgODQsIAotICAgIDgzLCA0NSwgNDksIDUwLCA1MiwgNTMsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTIsIDUzLCAKLSAgICA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MiwgNTMsIDU0LCA1NSwgMTI4LCA2OCwgNzksIAotICAgIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTIsIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTIsIDUzLCAKLSAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIAotICAgIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCi0gICAgNDksIDUwLCA1MSwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCAKLSAgICA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgCi0gICAgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKLSAgICA0OSwgNTAsIDUxLCA1MywgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MywgNTUsIDU2LCAxMjgsIAotICAgIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTMsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCAKLSAgICA1MSwgNTMsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUzLCA1NCwgNTUsIDU2LCAxMjgsIAotICAgIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTMsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCAKLSAgICA1MCwgNTEsIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUzLCAxMjgsIDY4LCA3OSwgODQsIAotICAgIDgzLCA0NSwgNDksIDUwLCA1MSwgNTIsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTIsIDU1LCAKLSAgICA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIAotICAgIDQ5LCA1MCwgNTEsIDUyLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MiwgNTQsIDU1LCAKLSAgICA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIAotICAgIDQ1LCA0OSwgNTAsIDUxLCA1MiwgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MiwgNTMsIDU2LCAKLSAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTIsIDUzLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIAotICAgIDQ1LCA0OSwgNTAsIDUxLCA1MiwgNTMsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTIsIDUzLCAKLSAgICA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MiwgNTMsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIAotICAgIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MiwgNTMsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCAKLSAgICA1MCwgNTEsIDUyLCA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MiwgNTMsIDEyOCwgNjgsIAotICAgIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDEyOCwgCi0gICAgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgMTI4LCA2OCwgNzksIDg0LCAKLSAgICA4MywgMTI4LCA2OCwgNzksIDg0LCA3NiwgNjksIDgzLCAyMTEsIDY4LCA3OSwgODIsIDg1LCAxMjgsIDY4LCA3OSwgNzksIAotICAgIDgyLCAxMjgsIDY4LCA3OSwgNzksIDc4LCA3MSwgMTI4LCA2OCwgNzksIDc4LCA3MSwgMTI4LCA2OCwgNzksIDc3LCA2NSwgCi0gICAgNzMsIDIwNiwgNjgsIDc5LCA3NiwgODAsIDcyLCA3MywgNzgsIDEyOCwgNjgsIDc5LCA3NiwgNzYsIDgzLCAxMjgsIDY4LCAKLSAgICA3OSwgNzYsIDc2LCA2NSwgMjEwLCA2OCwgNzksIDc2LCA3MywgODUsIDc3LCAxMjgsIDY4LCA3OSwgNzUsIDc3LCA2NSwgNzMsIAotICAgIDEyOCwgNjgsIDc5LCA3MywgODQsIDEyOCwgNjgsIDc5LCA3MSwgMTI4LCA2OCwgNzksIDE5OSwgNjgsIDc5LCA2OSwgMjExLCAKLSAgICA2OCwgNzksIDY4LCA2OSwgNzUsIDY1LCA4NCwgNjUsIDEyOCwgNjgsIDc5LCA2NiwgODIsIDc5LCAxMjgsIDY4LCA3OSwgNjUsIAotICAgIDY3LCA3MiwgNjUsIDgzLCA3MiwgNzcsIDY5LCA2OSwgMTI4LCA2OCwgNzksIDY1LCA2NywgNzIsIDY1LCA4MywgNzIsIDc3LCAKLSAgICA2OSwgMTk3LCA2OCwgNzksIDY1LCAxMjgsIDY4LCA3OSwgNDUsIDc5LCAxMjgsIDY4LCA3NywgMTI4LCA2OCwgMjA1LCA2OCwgCi0gICAgNzYsIDg1LCAxMjgsIDY4LCA3NiwgNzksIDEyOCwgNjgsIDc2LCA3MywgMTI4LCA2OCwgNzYsIDcyLCA4OSwgNjUsIDEyOCwgCi0gICAgNjgsIDc2LCA3MiwgNjUsIDEyOCwgNjgsIDc2LCA2OSwgNjksIDEyOCwgNjgsIDc2LCA2NSwgMTI4LCA2OCwgNzYsIDEyOCwgCi0gICAgNjgsIDc1LCA2NSwgODIsIDEyOCwgNjgsIDc1LCA2NSwgMjEwLCA2OCwgNzQsIDY5LCA4MiwgODYsIDczLCAxMjgsIDY4LCAKLSAgICA3NCwgNjksIDgyLCA4NiwgMTI4LCA2OCwgNzQsIDY5LCAxMjgsIDY4LCA3NCwgNjUsIDEyOCwgNjgsIDczLCA5MCwgOTAsIAotICAgIDIxNywgNjgsIDczLCA4NiwgNzksIDgyLCA2NywgMTk3LCA2OCwgNzMsIDg2LCA3MywgODMsIDczLCA3OSwgNzgsIDEyOCwgCi0gICAgNjgsIDczLCA4NiwgNzMsIDgzLCA3MywgNzksIDIwNiwgNjgsIDczLCA4NiwgNzMsIDc4LCA2NSwgODQsIDczLCA3OSwgNzgsIAotICAgIDEyOCwgNjgsIDczLCA4NiwgNzMsIDY4LCA2OSwgODMsIDEyOCwgNjgsIDczLCA4NiwgNzMsIDY4LCA2OSwgODIsIDEyOCwgCi0gICAgNjgsIDczLCA4NiwgNzMsIDY4LCA2OSwgMTk2LCA2OCwgNzMsIDg2LCA3MywgNjgsIDY5LCAxMjgsIDY4LCA3MywgODYsIDczLCAKLSAgICA2OCwgMTk3LCA2OCwgNzMsIDg2LCA2OSwgODIsIDcxLCA2OSwgNzgsIDY3LCA2OSwgMTI4LCA2OCwgNzMsIDg0LCA4NCwgCi0gICAgMjA3LCA2OCwgNzMsIDgzLCA4NCwgNzksIDgyLCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA2OCwgNzMsIDgzLCA4NCwgNzMsIDc4LCAKLSAgICA3MSwgODUsIDczLCA4MywgNzIsIDEyOCwgNjgsIDczLCA4MywgODQsIDczLCA3NiwgNzYsIDEyOCwgNjgsIDczLCA4MywgODMsIAotICAgIDc5LCA3NiwgODYsIDY5LCA0NSwgNTAsIDEyOCwgNjgsIDczLCA4MywgODMsIDc5LCA3NiwgODYsIDY5LCAxMjgsIDY4LCA3MywgCi0gICAgODMsIDgwLCA2OSwgODIsIDgzLCA3MywgNzksIDc4LCAxMjgsIDY4LCA3MywgODMsIDc1LCAxMjgsIDY4LCA3MywgODMsIDczLCAKLSAgICA3NywgNzksIDg1LCAxMjgsIDY4LCA3MywgODMsIDcyLCAxMjgsIDY4LCA3MywgODMsIDY3LCA3OSwgNzgsIDg0LCA3MywgNzgsIAotICAgIDg1LCA3OSwgODUsIDIxMSwgNjgsIDczLCA4MywgMTk1LCA2OCwgNzMsIDgzLCA2NSwgODAsIDgwLCA3OSwgNzMsIDc4LCA4NCwgCi0gICAgNjksIDE5NiwgNjgsIDczLCA4MywgNjUsIDY2LCA3NiwgNjksIDE5NiwgNjgsIDczLCA4MiwgNzEsIDE5MywgNjgsIDczLCAKLSAgICA4MiwgNjksIDY3LCA4NCwgNzYsIDIxNywgNjgsIDczLCA4MiwgNjksIDY3LCA4NCwgNzMsIDc5LCA3OCwgNjUsIDIwNCwgNjgsIAotICAgIDczLCA4MCwgODQsIDY5LCAxMjgsIDY4LCA3MywgODAsIDgwLCA2OSwgODIsIDEyOCwgNjgsIDczLCA4MCwgNzYsIDc5LCA4NSwgCi0gICAgNzgsIDEyOCwgNjgsIDczLCA4MCwgNzYsIDczLCAxMjgsIDY4LCA3MywgODAsIDc2LCAyMDEsIDY4LCA3MywgNzgsIDcxLCAKLSAgICA2NiwgNjUsIDIxMiwgNjgsIDczLCAyMDYsIDY4LCA3MywgNzcsIDc3LCA3MywgNzgsIDcxLCAxMjgsIDY4LCA3MywgNzcsIAotICAgIDczLCA3OCwgODUsIDg0LCA3MywgNzksIDc4LCA0NSwgNTEsIDEyOCwgNjgsIDczLCA3NywgNzMsIDc4LCA4NSwgODQsIDczLCAKLSAgICA3OSwgNzgsIDQ1LCA1MCwgMTI4LCA2OCwgNzMsIDc3LCA3MywgNzgsIDg1LCA4NCwgNzMsIDc5LCA3OCwgNDUsIDQ5LCAxMjgsIAotICAgIDY4LCA3MywgNzcsIDczLCA3OCwgNzMsIDgzLCA3MiwgNzcsIDY5LCA3OCwgODQsIDEyOCwgNjgsIDczLCA3NywgNzMsIDY4LCAKLSAgICA3MywgMTkzLCA2OCwgNzMsIDc3LCA2OSwgNzgsIDgzLCA3MywgNzksIDc4LCA2NSwgMjA0LCA2OCwgNzMsIDc3LCA2OSwgNzgsIAotICAgIDgzLCA3MywgNzksIDIwNiwgNjgsIDczLCA3NywgNTAsIDEyOCwgNjgsIDczLCA3NiwgMTI4LCA2OCwgNzMsIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgMTI4LCA2OCwgNzMsIDcxLCA4MiwgNjUsIDgwLCAyMDAsIDY4LCA3MywgNzEsIDgyLCA2NSwgNzcsIDc3LCAKLSAgICA3OSwgMjExLCA2OCwgNzMsIDcxLCA4MiwgNjUsIDc3LCA3NywgMTkzLCA2OCwgNzMsIDcxLCA4MiwgNjUsIDIwNSwgNjgsIAotICAgIDczLCA3MSwgNzksIDgyLCA3MSwgNzksIDc4LCAxMjgsIDY4LCA3MywgNzEsIDc5LCA4MiwgNzEsIDc5LCAyMDYsIDY4LCA3MywgCi0gICAgNzEsIDY1LCA3NywgNzcsIDY1LCAxMjgsIDY4LCA3MywgNzEsIDE5MywgNjgsIDczLCA3MCwgODQsIDc5LCA3MSwgNzEsIDc5LCAKLSAgICAyMTEsIDY4LCA3MywgNzAsIDc5LCA3OCwgNzMsIDY1LCA4MywgMTI4LCA2OCwgNzMsIDcwLCA3MCwgNzMsIDY3LCA4NSwgNzYsIAotICAgIDg0LCAyMTcsIDY4LCA3MywgNzAsIDcwLCA3MywgNjcsIDg1LCA3NiwgODQsIDczLCA2OSwgODMsIDEyOCwgNjgsIDczLCA3MCwgCi0gICAgNzAsIDY5LCA4MiwgNjksIDc4LCA4NCwgNzMsIDY1LCA3NiwgMTI4LCA2OCwgNzMsIDcwLCA3MCwgNjksIDgyLCA2OSwgNzgsIAotICAgIDY3LCAxOTcsIDY4LCA3MywgNzAsIDY1LCA4NCwgMTI4LCA2OCwgNzMsIDY5LCA4MywgNzMsIDgzLCAxMjgsIDY4LCA3MywgCi0gICAgNjksIDgzLCA3MywgMjExLCA2OCwgNzMsIDY5LCA4MCwgMTI4LCA2OCwgNzMsIDE5NywgNjgsIDczLCA2NiwgMTI4LCA2OCwgCi0gICAgNzMsIDY1LCA4NCwgNzksIDc4LCA3OSwgMjA2LCA2OCwgNzMsIDY1LCA4NCwgNzksIDc4LCA3MywgNzUsIDIwMSwgNjgsIDczLCAKLSAgICA2NSwgODMsIDg0LCA3OSwgNzYsIDIwMSwgNjgsIDczLCA2NSwgNzcsIDc5LCA3OCwgNjgsIDgzLCAxMjgsIDY4LCA3MywgNjUsIAotICAgIDc3LCA3OSwgNzgsIDY4LCAxMjgsIDY4LCA3MywgNjUsIDc3LCA3OSwgNzgsIDE5NiwgNjgsIDczLCA2NSwgNzcsIDY5LCA4NCwgCi0gICAgNjksIDIxMCwgNjgsIDczLCA2NSwgNzYsIDg5LCA4NCwgNzMsIDc1LCA2NSwgMTI4LCA2OCwgNzMsIDY1LCA3NiwgODksIDg0LCAKLSAgICA3MywgNzUsIDE5MywgNjgsIDczLCA2NSwgNzYsIDY5LCA2NywgODQsIDQ1LCAyMDgsIDY4LCA3MywgNjUsIDcxLCA3OSwgNzgsIAotICAgIDY1LCA3NiwgMTI4LCA2OCwgNzMsIDY1LCA3MSwgNzksIDc4LCA2NSwgMjA0LCA2OCwgNzMsIDY1LCA2OSwgODIsIDY5LCA4MywgCi0gICAgNzMsIDkwLCA2OSwgMTk2LCA2OCwgNzMsIDY1LCA2OSwgODIsIDY5LCA4MywgNzMsIDgzLCAxMjgsIDY4LCA3MywgNjUsIDY5LCAKLSAgICA4MiwgNjksIDgzLCA3MywgMjExLCA2OCwgNzIsIDc5LCA4NSwgMTI4LCA2OCwgNzIsIDc5LCA3OSwgMTI4LCA2OCwgNzIsIAotICAgIDc5LCAxMjgsIDY4LCA3MiwgNzMsIDEyOCwgNjgsIDcyLCA3MiwgODUsIDEyOCwgNjgsIDcyLCA3MiwgNzksIDc5LCAxMjgsIAotICAgIDY4LCA3MiwgNzIsIDc5LCAxMjgsIDY4LCA3MiwgNzIsIDczLCAxMjgsIDY4LCA3MiwgNzIsIDY5LCA2OSwgMTI4LCA2OCwgCi0gICAgNzIsIDcyLCA2OSwgMTI4LCA2OCwgNzIsIDcyLCA2NSwgMTI4LCA2OCwgNzIsIDY5LCA2OSwgMTI4LCA2OCwgNzIsIDY1LCAKLSAgICA4MiwgNzcsIDY1LCAxMjgsIDY4LCA3MiwgNjUsIDc2LCA2OSwgODQsIDcyLCAxMjgsIDY4LCA3MiwgNjUsIDc2LCA2NSwgODQsIAotICAgIDcyLCAxMjgsIDY4LCA3MiwgNjUsIDc2LCAxMjgsIDY4LCA3MiwgNjUsIDY4LCA3MiwgNjksIDEyOCwgNjgsIDcyLCA2NSwgCi0gICAgNjUsIDc2LCA4NSwgMTI4LCA2OCwgNzIsIDY1LCA2NSwgMTI4LCA2OCwgNzIsIDY1LCAxMjgsIDY4LCA2OSwgOTAsIDIwMCwgCi0gICAgNjgsIDY5LCA4OSwgODQsIDY5LCA4MiwgNzksIDIxMywgNjgsIDY5LCA4OSwgODQsIDY5LCA4MiwgNzksIDIxMSwgNjgsIDY5LCAKLSAgICA4OCwgNzMsIDY1LCAxMjgsIDY4LCA2OSwgODYsIDczLCA2NywgMTk3LCA2OCwgNjksIDg2LCA2OSwgNzYsIDc5LCA4MCwgNzcsIAotICAgIDY5LCA3OCwgODQsIDEyOCwgNjgsIDY5LCA4NSwgNzgsIDcxLCAxMjgsIDY4LCA2OSwgODMsIDIwMywgNjgsIDY5LCA4MywgCi0gICAgNzMsIDcxLCA3OCwgMTI4LCA2OCwgNjksIDgzLCA3MywgMTI4LCA2OCwgNjksIDgzLCA2NywgODIsIDczLCA4MCwgODQsIDczLCAKLSAgICA3OSwgMjA2LCA2OCwgNjksIDgzLCA2NywgNjksIDc4LCA2OCwgNzMsIDc4LCAxOTksIDY4LCA2OSwgODMsIDY3LCA2OSwgNzgsIAotICAgIDY4LCA2OSwgODIsIDEyOCwgNjgsIDY5LCA4MiwgNjksIDg0LCA0NSwgNzIsIDczLCA2OCwgNjksIDg0LCAxMjgsIDY4LCA2OSwgCi0gICAgODIsIDY5LCA4NCwgMTI4LCA2OCwgNjksIDgwLCA2NSwgODIsIDg0LCA4NSwgODIsIDY5LCAxMjgsIDY4LCA2OSwgODAsIDY1LCAKLSAgICA4MiwgODQsIDc3LCA2OSwgNzgsIDIxMiwgNjgsIDY5LCA4MCwgNjUsIDgyLCA4NCwgNzMsIDc4LCAxOTksIDY4LCA2OSwgNzgsIAotICAgIDg0LCA3MywgODMsIDg0LCA4MiwgMjE3LCA2OCwgNjksIDc4LCA4NCwgNjUsIDIwNCwgNjgsIDY5LCA3OCwgNzksIDc3LCA3MywgCi0gICAgNzgsIDY1LCA4NCwgNzksIDgyLCAxMjgsIDY4LCA2OSwgNzgsIDc5LCA3NywgNzMsIDc4LCA2NSwgODQsIDc5LCAyMTAsIDY4LCAKLSAgICA2OSwgNzgsIDc4LCA2OSwgNzgsIDEyOCwgNjgsIDY5LCA3OCwgNzEsIDEyOCwgNjgsIDY5LCA3OCwgMTk3LCA2OCwgNjksIAotICAgIDc4LCA2NSwgODIsIDczLCA4NSwgMjExLCA2OCwgNjksIDc2LCA4NCwgNjUsIDEyOCwgNjgsIDY5LCA3NiwgODQsIDE5MywgCi0gICAgNjgsIDY5LCA3NiwgODQsIDEyOCwgNjgsIDY5LCA3NiwgODAsIDcyLCA3MywgMTk1LCA2OCwgNjksIDc2LCA3MywgODYsIDY5LCAKLSAgICA4MiwgMjE3LCA2OCwgNjksIDc2LCA3MywgODYsIDY5LCA4MiwgNjUsIDc4LCA2NywgNjksIDEyOCwgNjgsIDY5LCA3NiwgNzMsIAotICAgIDc3LCA3MywgODQsIDY5LCA4MiwgMTI4LCA2OCwgNjksIDc2LCA3MywgNzcsIDczLCA4NCwgNjksIDIxMCwgNjgsIDY5LCA3NiwgCi0gICAgNzMsIDY3LCA3MywgNzksIDg1LCAyMTEsIDY4LCA2OSwgNzYsIDY5LCA4NCwgNjksIDEyOCwgNjgsIDY5LCA3NiwgNjksIDg0LCAKKyAgICA4NCwgMTI4LCA4MiwgNzYsIDc5LCAxMjgsIDgyLCA3NiwgNzcsIDEyOCwgODIsIDc2LCA3MywgMTI4LCA4MiwgNzYsIDY5LCAKKyAgICAxMjgsIDgyLCA3NCwgNjksIDIxMSwgODIsIDc0LCA2OSwgMTI4LCA4MiwgNzQsIDE5NywgODIsIDczLCA4NiwgNjksIDgyLCAKKyAgICAxMjgsIDgyLCA3MywgODQsIDg1LCA2NSwgNzYsIDEyOCwgODIsIDczLCA4NCwgODQsIDc5LCA4MiwgODUsIDEyOCwgODIsIAorICAgIDczLCA4NCwgODMsIDczLCAxMjgsIDgyLCA3MywgODMsIDczLCA3OCwgMTk5LCA4MiwgNzMsIDgzLCA3MiwgMTI4LCA4MiwgCisgICAgNzMsIDgyLCA2NSwgMTI4LCA4MiwgNzMsIDgwLCAxMjgsIDgyLCA3MywgNzgsIDcxLCAyMTEsIDgyLCA3MywgNzgsIDcwLCAKKyAgICA3OSwgODIsIDkwLCA2NSwgNzgsIDY4LCA3OSwgMTI4LCA4MiwgNzMsIDIwNiwgODIsIDczLCA3NywgNzEsIDY2LCA2NSwgCisgICAgMTI4LCA4MiwgNzMsIDc1LCA4MiwgNzMsIDc1LCAxMjgsIDgyLCA3MywgNzEsIDg2LCA2OSwgNjgsIDczLCAxOTUsIDgyLCAKKyAgICA3MywgNzEsIDcyLCA4NCwgODcsIDY1LCA4MiwgNjgsIDgzLCAxMjgsIDgyLCA3MywgNzEsIDcyLCA4NCwgNzIsIDY1LCA3OCwgCisgICAgMTk2LCA4MiwgNzMsIDcxLCA3MiwgODQsIDQ1LCA4NCwgNzksIDQ1LCA3NiwgNjksIDcwLCAyMTIsIDgyLCA3MywgNzEsIDcyLCAKKyAgICA4NCwgNDUsIDgzLCA3MywgNjgsIDE5NywgODIsIDczLCA3MSwgNzIsIDg0LCA0NSwgODMsIDcyLCA2NSwgNjgsIDc5LCA4NywgCisgICAgNjksIDE5NiwgODIsIDczLCA3MSwgNzIsIDg0LCA0NSwgODMsIDcyLCA2NSwgNjgsIDY5LCAxOTYsIDgyLCA3MywgNzEsIDcyLCAKKyAgICA4NCwgNDUsIDgwLCA3OSwgNzMsIDc4LCA4NCwgNzMsIDc4LCAxOTksIDgyLCA3MywgNzEsIDcyLCA4NCwgNDUsIDcyLCA2NSwgCisgICAgNzgsIDY4LCA2OSwgMTk2LCA4MiwgNzMsIDcxLCA3MiwgODQsIDQ1LCA3MiwgNjUsIDc4LCAxOTYsIDgyLCA3MywgNzEsIDcyLCAKKyAgICA4NCwgNDUsIDcwLCA2NSwgNjcsIDczLCA3OCwgMTk5LCA4MiwgNzMsIDcxLCA3MiwgODQsIDEyOCwgODIsIDczLCA2OSwgODUsIAorICAgIDc2LCA0NSwgODksIDY5LCA4MywgNzMsIDY5LCA4NSwgNzgsIDcxLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDg5LCAKKyAgICA2OSwgNzksIDgyLCA3MywgNzgsIDcyLCA3MywgNjksIDg1LCA3MiwgNDUsIDcyLCA3MywgNjksIDg1LCA3MiwgMTI4LCA4MiwgCisgICAgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4OSwgNjksIDc5LCA4MiwgNzMsIDc4LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDEyOCwgODIsIAorICAgIDczLCA2OSwgODUsIDc2LCA0NSwgODQsIDczLCA3NSwgNjksIDg1LCA4NCwgNDUsIDcyLCA3MywgNjksIDg1LCA3MiwgMTI4LCAKKyAgICA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4NCwgNzMsIDc1LCA2OSwgODUsIDg0LCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgCisgICAgNDUsIDg0LCA3MiwgNzMsIDY5LCA4NSwgODQsIDcyLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDgzLCA4MywgNjUsIAorICAgIDc4LCA3MSwgODQsIDczLCA3NSwgNjksIDg1LCA4NCwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4MywgODMsIDY1LCAKKyAgICA3OCwgNzEsIDgzLCA3MywgNzksIDgzLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDgzLCA4MywgNjUsIDc4LCA3MSwgCisgICAgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDgzLCA4MywgNjUsIDc4LCA3MSwgNzUsIAorICAgIDczLCA4OSwgNjksIDc5LCA3NSwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4MywgNzMsIDc5LCA4MywgMTI4LCA4MiwgCisgICAgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA4NCwgNzMsIDc1LCA2OSwgODUsIDg0LCAxMjgsIAorICAgIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDgzLCA3MywgNzksIDgzLCAxMjgsIDgyLCAKKyAgICA3MywgNjksIDg1LCA3NiwgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDgwLCA3MiwgNzMsIDY5LCA4NSwgODAsIDcyLCAKKyAgICAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDcyLCA3MywgNjksIDg1LCA3MiwgCisgICAgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4MCwgNzMsIDY5LCA4NSwgODAsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCAKKyAgICA0NSwgODAsIDcyLCA3MywgNjksIDg1LCA4MCwgNzIsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODAsIDY1LCA3OCwgCisgICAgODMsIDczLCA3OSwgODMsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgNzgsIDczLCA2OSwgODUsIDc4LCAxMjgsIDgyLCAKKyAgICA3MywgNjksIDg1LCA3NiwgNDUsIDc3LCA3MywgNjksIDg1LCA3NywgNDUsIDgzLCA3MywgNzksIDgzLCAxMjgsIDgyLCA3MywgCisgICAgNjksIDg1LCA3NiwgNDUsIDc3LCA3MywgNjksIDg1LCA3NywgNDUsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDEyOCwgODIsIAorICAgIDczLCA2OSwgODUsIDc2LCA0NSwgNzcsIDczLCA2OSwgODUsIDc3LCA0NSwgNzIsIDczLCA2OSwgODUsIDcyLCAxMjgsIDgyLCAKKyAgICA3MywgNjksIDg1LCA3NiwgNDUsIDc3LCA3MywgNjksIDg1LCA3NywgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA3NSwgCisgICAgNzMsIDg5LCA2OSwgNzksIDc1LCA0NSwgODMsIDczLCA3OSwgODMsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgNzUsIAorICAgIDczLCA4OSwgNjksIDc5LCA3NSwgNDUsIDcyLCA3MywgNjksIDg1LCA3MiwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCAKKyAgICA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDc1LCA2NSwgODAsIDg5LCA2OSwgCisgICAgNzksIDg1LCA3OCwgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDcyLCA3MywgNjksIAorICAgIDg1LCA3MiwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA2NywgNzMsIDY5LCA4NSwgNjcsIDEyOCwgODIsIDczLCA2OSwgCisgICAgODUsIDIwNCwgODIsIDczLCA2OSwgNzYsIDEyOCwgODIsIDczLCA2OSwgNjksIDEyOCwgODIsIDczLCA2NywgNjksIDc3LCAKKyAgICAxMjgsIDgyLCA3MywgNjcsIDY5LCAxMjgsIDgyLCA3MywgNjcsIDE5NywgODIsIDczLCA2NiwgNjYsIDc5LCA3OCwgMTI4LCAKKyAgICA4MiwgNzMsIDY1LCAyMDQsIDgyLCA3MiwgNzksIDg0LCA3MywgMTk1LCA4MiwgNzIsIDc5LCAxMjgsIDgyLCA3MiwgMjA3LCAKKyAgICA4MiwgNzIsIDY1LCAxMjgsIDgyLCA3MSwgODksIDczLCA3OCwgNzEsIDgzLCAxMjgsIDgyLCA3MSwgODksIDY1LCA3OCwgCisgICAgMTI4LCA4MiwgNzEsIDg5LCAxOTMsIDgyLCA2OSwgODYsIDc5LCA3NiwgODYsIDczLCA3OCwgMTk5LCA4MiwgNjksIDg2LCAKKyAgICA3OSwgNzYsIDg1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA4MiwgNjksIDg2LCA3NywgNjUsIDEyOCwgODIsIDY5LCA4NiwgNzMsIAorICAgIDY1LCAxMjgsIDgyLCA2OSwgODYsIDY5LCA4MiwgODMsIDY5LCA2OCwgMTI4LCA4MiwgNjksIDg2LCA2OSwgODIsIDgzLCA2OSwgCisgICAgMTk2LCA4MiwgNjksIDg2LCA2OSwgODIsIDgzLCAxOTcsIDgyLCA2OSwgODUsIDg4LCAxMjgsIDgyLCA2OSwgODUsIDEyOCwgCisgICAgODIsIDY5LCA4NCwgODUsIDgyLCA3OCwgMTI4LCA4MiwgNjksIDg0LCA4NSwgODIsIDIwNiwgODIsIDY5LCA4NCwgODIsIDc5LCAKKyAgICA3MCwgNzYsIDY5LCAyMTYsIDgyLCA2OSwgODQsIDgyLCA2OSwgNjUsIDg0LCAxMjgsIDgyLCA2OSwgODQsIDc5LCA4MiwgODQsIAorICAgIDEyOCwgODIsIDY5LCA4MywgODUsIDgwLCA3MywgNzgsIDg1LCA4MywgMTI4LCA4MiwgNjksIDgzLCA4NCwgODIsIDc5LCA3OSwgCisgICAgNzcsIDEyOCwgODIsIDY5LCA4MywgODQsIDgyLCA3MywgNjcsIDg0LCA2OSwgMTk2LCA4MiwgNjksIDgzLCA4NCwgMTI4LCAKKyAgICA4MiwgNjksIDgzLCA4MCwgNzksIDc4LCA4MywgNjksIDEyOCwgODIsIDY5LCA4MywgNzksIDg1LCA4MiwgNjcsIDY5LCAxMjgsIAorICAgIDgyLCA2OSwgODMsIDc5LCA3NiwgODUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDgyLCA2OSwgODMsIDczLCA4MywgODQsIDY1LCAKKyAgICA3OCwgNjcsIDY5LCAxMjgsIDgyLCA2OSwgODMsIDczLCA2OCwgNjksIDc4LCA2NywgNjksIDEyOCwgODIsIDY5LCA4MywgCisgICAgMjAwLCA4MiwgNjksIDgyLCA2OSwgNzgsIDcxLCA3MSwgNjUsIDc4LCAxMjgsIDgyLCA2OSwgODIsIDY5LCA3NSwgNjUsIDc4LCAKKyAgICAxMjgsIDgyLCA2OSwgODAsIDgyLCA2OSwgODMsIDY5LCA3OCwgODQsIDEyOCwgODIsIDY5LCA4MCwgNzYsIDY1LCA2NywgNjksIAorICAgIDc3LCA2OSwgNzgsIDIxMiwgODIsIDY5LCA4MCwgNzIsIDEyOCwgODIsIDY5LCA4MCwgNjksIDg0LCA3MywgODQsIDczLCA3OSwgCisgICAgMjA2LCA4MiwgNjksIDgwLCA2OSwgNjUsIDg0LCA2OSwgMTk2LCA4MiwgNjksIDgwLCA2OSwgNjUsIDg0LCAxMjgsIDgyLCAKKyAgICA2OSwgODAsIDY5LCA2NSwgMjEyLCA4MiwgNjksIDgwLCA2NSwgODksIDY1LCAxMjgsIDgyLCA2OSwgODAsIDY1LCAxMjgsIAorICAgIDgyLCA2OSwgODAsIDE5MywgODIsIDY5LCA3OCwgODQsIDc5LCA3MSwgNjksIDc4LCAxMjgsIDgyLCA2OSwgNzgsIDEyOCwgCisgICAgODIsIDY5LCAyMDYsIDgyLCA2OSwgNzcsIDg1LCAxMjgsIDgyLCA2OSwgNzcsIDY5LCA2OCwgODksIDEyOCwgODIsIDY5LCAKKyAgICA3NiwgNzMsIDcxLCA3MywgNzksIDc4LCAxMjgsIDgyLCA2OSwgNzYsIDczLCA2OSwgODYsIDY5LCAxOTYsIDgyLCA2OSwgNzYsIAorICAgIDY5LCA2NSwgODMsIDY5LCAxMjgsIDgyLCA2OSwgNzYsIDY1LCA4NCwgNzMsIDc5LCA3OCwgNjUsIDIwNCwgODIsIDY5LCA3NiwgCisgICAgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDgyLCA2OSwgNzYsIDY1LCA2NSwgMTI4LCA4MiwgNjksIDc0LCA2NSwgNzgsIAorICAgIDE5OSwgODIsIDY5LCA3MywgMTk2LCA4MiwgNjksIDcxLCA4NSwgNzYsIDg1LCA4MywgNDUsIDUyLCAxMjgsIDgyLCA2OSwgCisgICAgNzEsIDg1LCA3NiwgODUsIDgzLCA0NSwgNTEsIDEyOCwgODIsIDY5LCA3MSwgODUsIDc2LCA4NSwgODMsIDQ1LCA1MCwgMTI4LCAKKyAgICA4MiwgNjksIDcxLCA4NSwgNzYsIDg1LCA4MywgMTI4LCA4MiwgNjksIDcxLCA4NSwgNzYsIDg1LCAyMTEsIDgyLCA2OSwgNzEsIAorICAgIDczLCA4MywgODQsIDY5LCA4MiwgNjksIDE5NiwgODIsIDY5LCA3MSwgNzMsIDc5LCA3OCwgNjUsIDIwNCwgODIsIDY5LCA3MSwgCisgICAgNzMsIDY1LCA0NSwgNTAsIDEyOCwgODIsIDY5LCA3MSwgNzMsIDY1LCAxMjgsIDgyLCA2OSwgNzAsIDc5LCA4MiwgNzcsIDY5LCAKKyAgICAxOTYsIDgyLCA2OSwgNzAsIDY5LCA4MiwgNjksIDc4LCA2NywgMTk3LCA4MiwgNjksIDY4LCA4NSwgODAsIDc2LCA3MywgNjcsIAorICAgIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA4MiwgNjksIDY3LCA4OSwgNjcsIDc2LCA3MywgNzgsIDE5OSwgODIsIDY5LCA2NywgCisgICAgODksIDY3LCA3NiwgNjksIDE5NiwgODIsIDY5LCA2NywgODQsIDczLCA3NiwgNzMsIDc4LCA2OSwgNjUsIDIxMCwgODIsIDY5LCAKKyAgICA2NywgODQsIDY1LCA3OCwgNzEsIDg1LCA3NiwgNjUsIDIxMCwgODIsIDY5LCA2NywgODQsIDY1LCA3OCwgNzEsIDc2LCA2OSwgCisgICAgMTI4LCA4MiwgNjksIDY3LCA4NCwgNjUsIDc4LCA3MSwgNzYsIDE5NywgODIsIDY5LCA2NywgODIsIDY5LCA2NSwgODQsIDczLCAKKyAgICA3OSwgNzgsIDY1LCAyMDQsIDgyLCA2OSwgNjcsIDc5LCA4MiwgNjgsIDczLCA3OCwgMTk5LCA4MiwgNjksIDY3LCA3OSwgODIsIAorICAgIDY4LCA2OSwgODIsIDEyOCwgODIsIDY5LCA2NywgNzksIDgyLCAxOTYsIDgyLCA2OSwgNjcsIDY5LCA4MCwgODQsIDczLCA4NiwgCisgICAgMTk3LCA4MiwgNjksIDY3LCA2OSwgNzMsIDg2LCA2OSwgODIsIDEyOCwgODIsIDY5LCA2NSwgNzYsIDcxLCA2NSwgODIsIDQ1LCAKKyAgICA1MCwgMTI4LCA4MiwgNjksIDY1LCA3NiwgNzEsIDY1LCA4MiwgMTI4LCA4MiwgNjksIDY1LCA3MiwgNzcsIDg1LCA3NSwgCisgICAgMTI4LCA4MiwgNjksIDY1LCA2NywgNzIsIDEyOCwgODIsIDY4LCAyMDcsIDgyLCA2OCwgNjksIDIwNCwgODIsIDY2LCA2NSwgCisgICAgODMsIDE5MywgODIsIDY1LCA4OSwgODMsIDEyOCwgODIsIDY1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgODIsIDY1LCAKKyAgICA4NCwgNzMsIDc5LCAxMjgsIDgyLCA2NSwgODQsIDcyLCA2NSwgMTI4LCA4MiwgNjUsIDg0LCA3MiwgMTkzLCA4MiwgNjUsIAorICAgIDg0LCA2NSwgMTI4LCA4MiwgNjUsIDg0LCAxMjgsIDgyLCA2NSwgODMsIDg3LCA2NSwgNjgsIDczLCAxMjgsIDgyLCA2NSwgCisgICAgODMsIDc5LCA4NSwgMjA0LCA4MiwgNjUsIDgzLCA3MiwgNjUsIDEyOCwgODIsIDY1LCA4MSwgMTI4LCA4MiwgNjUsIDgwLCAKKyAgICA3MywgODMsIDc3LCA2NSwgMTI4LCA4MiwgNjUsIDc4LCA3MSwgMTk3LCA4MiwgNjUsIDc4LCA2NSwgMTI4LCA4MiwgNjUsIAorICAgIDc4LCAxMjgsIDgyLCA2NSwgNzcsIDIxMSwgODIsIDY1LCA3NywgNjYsIDY1LCA4NCwgMTI4LCA4MiwgNjUsIDc1LCA3MiwgCisgICAgNjUsIDc4LCA3MSwgMTI4LCA4MiwgNjUsIDc1LCA2NSwgNjUsIDgyLCA2NSwgNjUsIDc4LCA4MywgNjUsIDg5LCA2NSwgMTI4LCAKKyAgICA4MiwgNjUsIDczLCA4MywgNzMsIDc4LCAxOTksIDgyLCA2NSwgNzMsIDgzLCA2OSwgMTk2LCA4MiwgNjUsIDczLCA3OCwgNjYsIAorICAgIDc5LCA4NywgMTI4LCA4MiwgNjUsIDczLCA3NiwgODcsIDY1LCA4OSwgMTI4LCA4MiwgNjUsIDczLCA3NiwgODcsIDY1LCAKKyAgICAyMTcsIDgyLCA2NSwgNzMsIDc2LCAxMjgsIDgyLCA2NSwgNzMsIDY4LCAyMDcsIDgyLCA2NSwgNzMsIDY4LCA2NSwgMTI4LCAKKyAgICA4MiwgNjUsIDcyLCA3NywgNjUsIDg0LCA4NSwgNzYsIDc2LCA2NSwgMjAwLCA4MiwgNjUsIDcyLCAxMjgsIDgyLCA2NSwgNzAsIAorICAgIDY5LCAxMjgsIDgyLCA2NSwgNjksIDc3LCAxMjgsIDgyLCA2NSwgNjgsIDczLCA3OSwgNjUsIDY3LCA4NCwgNzMsIDg2LCAKKyAgICAxOTcsIDgyLCA2NSwgNjgsIDczLCA3OSwgMTI4LCA4MiwgNjUsIDY4LCA3MywgMjA3LCA4MiwgNjUsIDY4LCAyMDEsIDgyLCAKKyAgICA2NSwgNjgsIDEyOCwgODIsIDY1LCAxOTYsIDgyLCA2NSwgNjcsIDgxLCA4NSwgNjksIDIxMiwgODIsIDY1LCA2NywgNzMsIAorICAgIDc4LCA3MSwgMTI4LCA4MiwgNjUsIDY2LCA2NiwgNzMsIDg0LCAxMjgsIDgyLCA2NSwgNjYsIDY2LCA3MywgMjEyLCA4MiwgCisgICAgNjUsIDY2LCAxMjgsIDgyLCA2NSwgNjUsIDczLCAxMjgsIDgyLCA2NSwgNTEsIDEyOCwgODIsIDY1LCA1MCwgMTI4LCA4MiwgCisgICAgNjUsIDQ1LCA1MCwgMTI4LCA4MiwgNDgsIDUwLCA1NywgMTI4LCA4MiwgNDgsIDUwLCA1NiwgMTI4LCA4MiwgNDgsIDUwLCAKKyAgICA1NSwgMTI4LCA4MiwgNDgsIDUwLCA1NCwgMTI4LCA4MiwgNDgsIDUwLCA1MywgMTI4LCA4MiwgNDgsIDUwLCA1MiwgMTI4LCAKKyAgICA4MiwgNDgsIDUwLCA1MSwgMTI4LCA4MiwgNDgsIDUwLCA1MCwgMTI4LCA4MiwgNDgsIDUwLCA0OSwgMTI4LCA4MiwgNDgsIAorICAgIDUwLCA0OCwgMTI4LCA4MiwgNDgsIDQ5LCA1NywgMTI4LCA4MiwgNDgsIDQ5LCA1NiwgMTI4LCA4MiwgNDgsIDQ5LCA1NSwgCisgICAgMTI4LCA4MiwgNDgsIDQ5LCA1NCwgNjUsIDEyOCwgODIsIDQ4LCA0OSwgNTQsIDEyOCwgODIsIDQ4LCA0OSwgNTMsIDEyOCwgCisgICAgODIsIDQ4LCA0OSwgNTIsIDEyOCwgODIsIDQ4LCA0OSwgNTEsIDEyOCwgODIsIDQ4LCA0OSwgNTAsIDEyOCwgODIsIDQ4LCAKKyAgICA0OSwgNDksIDEyOCwgODIsIDQ4LCA0OSwgNDgsIDY1LCAxMjgsIDgyLCA0OCwgNDksIDQ4LCAxMjgsIDgyLCA0OCwgNDgsIAorICAgIDU3LCAxMjgsIDgyLCA0OCwgNDgsIDU2LCAxMjgsIDgyLCA0OCwgNDgsIDU1LCAxMjgsIDgyLCA0OCwgNDgsIDU0LCAxMjgsIAorICAgIDgyLCA0OCwgNDgsIDUzLCAxMjgsIDgyLCA0OCwgNDgsIDUyLCAxMjgsIDgyLCA0OCwgNDgsIDUxLCA2NiwgMTI4LCA4MiwgCisgICAgNDgsIDQ4LCA1MSwgNjUsIDEyOCwgODIsIDQ4LCA0OCwgNTEsIDEyOCwgODIsIDQ4LCA0OCwgNTAsIDY1LCAxMjgsIDgyLCAKKyAgICA0OCwgNDgsIDUwLCAxMjgsIDgyLCA0OCwgNDgsIDQ5LCAxMjgsIDgyLCA0NSwgNjcsIDgyLCA2OSwgMTk3LCA4MSwgODksIAorICAgIDg4LCAxMjgsIDgxLCA4OSwgODUsIDEyOCwgODEsIDg5LCA4NCwgMTI4LCA4MSwgODksIDgyLCA4OCwgMTI4LCA4MSwgODksIAorICAgIDgyLCAxMjgsIDgxLCA4OSwgODAsIDEyOCwgODEsIDg5LCA3OSwgMTI4LCA4MSwgODksIDczLCAxMjgsIDgxLCA4OSwgNjksIAorICAgIDY5LCAxMjgsIDgxLCA4OSwgNjksIDEyOCwgODEsIDg5LCA2NSwgNjUsIDEyOCwgODEsIDg5LCA2NSwgMTI4LCA4MSwgODksIAorICAgIDEyOCwgODEsIDg3LCA3MywgMTI4LCA4MSwgODcsIDY5LCA2OSwgMTI4LCA4MSwgODcsIDY5LCAxMjgsIDgxLCA4NywgNjUsIAorICAgIDY1LCAxMjgsIDgxLCA4NywgNjUsIDEyOCwgODEsIDg1LCA4OCwgMTI4LCA4MSwgODUsIDg2LCAxMjgsIDgxLCA4NSwgODUsIAorICAgIDg2LCAxMjgsIDgxLCA4NSwgODUsIDEyOCwgODEsIDg1LCA4NCwgMTI4LCA4MSwgODUsIDgzLCA3MiwgODMsIDcyLCA2NSwgCisgICAgODksIDY1LCAxMjgsIDgxLCA4NSwgODIsIDg4LCAxMjgsIDgxLCA4NSwgODIsIDEyOCwgODEsIDg1LCA4MCwgMTI4LCA4MSwgCisgICAgODUsIDc5LCA4OCwgMTI4LCA4MSwgODUsIDc5LCA4NCwgMTk3LCA4MSwgODUsIDc5LCA4NCwgNjUsIDg0LCA3MywgNzksIAorICAgIDIwNiwgODEsIDg1LCA3OSwgODQsIDEyOCwgODEsIDg1LCA3OSwgODAsIDEyOCwgODEsIDg1LCA3OSwgMTI4LCA4MSwgODUsIAorICAgIDc1LCAxMjgsIDgxLCA4NSwgNzMsIDc4LCA4NCwgNjksIDgzLCA4MywgNjksIDc4LCA2NywgNjksIDEyOCwgODEsIDg1LCA3MywgCisgICAgNzgsIDY4LCA3MywgNjcsIDY5LCA4MywgNzMsIDc3LCAxOTMsIDgxLCA4NSwgNzMsIDc4LCA2NywgODUsIDc4LCA4OCwgMTI4LCAKKyAgICA4MSwgODUsIDczLCA3OCwgNjUsIDgyLCA3MywgODUsIDIxMSwgODEsIDg1LCA3MywgNzYsIDc2LCAxMjgsIDgxLCA4NSwgNzMsIAorICAgIDY3LCAyMDMsIDgxLCA4NSwgNzMsIDEyOCwgODEsIDg1LCA3MCwgMTI4LCA4MSwgODUsIDY5LCA4MywgODQsIDczLCA3OSwgCisgICAgNzgsIDY5LCAxOTYsIDgxLCA4NSwgNjksIDgzLCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA4MSwgODUsIDY5LCA4MywgODQsIDczLCAKKyAgICA3OSwgMjA2LCA4MSwgODUsIDY5LCA2OSwgNzgsIDEyOCwgODEsIDg1LCA2OSwgNjksIDIwNiwgODEsIDg1LCA2OSwgMTI4LCAKKyAgICA4MSwgODUsIDY2LCA4NSwgODQsIDgzLCAxMjgsIDgxLCA4NSwgNjUsIDg0LCA2OSwgODIsIDc4LCA3MywgNzksIDIwNiwgODEsIAorICAgIDg1LCA2NSwgODIsIDg0LCA2OSwgODIsIDgzLCAxMjgsIDgxLCA4NSwgNjUsIDgyLCA4NCwgNjksIDgyLCAyMTEsIDgxLCA4NSwgCisgICAgNjUsIDgyLCA4NCwgNjksIDgyLCAxMjgsIDgxLCA4NSwgNjUsIDgyLCA4NCwgNjksIDIxMCwgODEsIDg1LCA2NSwgNzgsIDg0LCAKKyAgICA3MywgODQsIDIxNywgODEsIDg1LCA2NSwgNjgsIDgyLCA4NSwgODAsIDc2LCAxOTcsIDgxLCA4NSwgNjUsIDY4LCA4MiwgNjUsIAorICAgIDc4LCA4NCwgMTI4LCA4MSwgODUsIDY1LCA2OCwgODIsIDY1LCA3OCwgMjEyLCA4MSwgODUsIDY1LCA2OCwgMTI4LCA4MSwgCisgICAgODUsIDY1LCAxOTYsIDgxLCA4NSwgNjUsIDEyOCwgODEsIDg1LCAxMjgsIDgxLCAyMDgsIDgxLCA3OSwgODgsIDEyOCwgODEsIAorICAgIDc5LCA4NCwgMTI4LCA4MSwgNzksIDgwLCA3MiwgMTI4LCA4MSwgNzksIDgwLCA2NSwgMTI4LCA4MSwgNzksIDgwLCAxMjgsIAorICAgIDgxLCA3OSwgNzksIDEyOCwgODEsIDc5LCAyMDcsIDgxLCA3OSwgNzAsIDEyOCwgODEsIDc5LCAxOTgsIDgxLCA3OSwgNjUsIAorICAgIDEyOCwgODEsIDc5LCAxMjgsIDgxLCA3OCwgMTI4LCA4MSwgNzMsIDg4LCAxMjgsIDgxLCA3MywgODQsIDgzLCA2NSwgMTI4LCAKKyAgICA4MSwgNzMsIDg0LCAxMjgsIDgxLCA3MywgODAsIDEyOCwgODEsIDczLCA3MywgMTI4LCA4MSwgNzMsIDY5LCA4OCwgMTI4LCAKKyAgICA4MSwgNzMsIDY5LCA4NCwgMTI4LCA4MSwgNzMsIDY5LCA4MCwgMTI4LCA4MSwgNzMsIDY5LCAxMjgsIDgxLCA3MywgMTI4LCAKKyAgICA4MSwgNzIsIDg3LCA3MywgMTI4LCA4MSwgNzIsIDg3LCA2OSwgNjksIDEyOCwgODEsIDcyLCA4NywgNjksIDEyOCwgODEsIAorICAgIDcyLCA4NywgNjUsIDY1LCAxMjgsIDgxLCA3MiwgODcsIDY1LCAxMjgsIDgxLCA3MiwgODUsIDEyOCwgODEsIDcyLCA3OSwgCisgICAgMTI4LCA4MSwgNzIsIDczLCAxMjgsIDgxLCA3MiwgNjksIDY5LCAxMjgsIDgxLCA3MiwgNjksIDEyOCwgODEsIDcyLCA2NSwgCisgICAgNjUsIDEyOCwgODEsIDcyLCA2NSwgMTI4LCA4MSwgNzEsIDY1LCAxMjgsIDgxLCA2OSwgODQsIDY1LCA3OCwgNjUsIDEyOCwgCisgICAgODEsIDY5LCA2OSwgMTI4LCA4MSwgNjksIDEyOCwgODEsIDY1LCA4NSwgMTI4LCA4MSwgNjUsIDg0LCA2NSwgNzgsIDEyOCwgCisgICAgODEsIDY1LCA4MiwgNzgsIDY5LCAyMTcsIDgxLCA2NSwgODIsIDEyOCwgODEsIDY1LCA4MSwgMTI4LCA4MSwgNjUsIDgwLCAKKyAgICA3MiwgMTI4LCA4MSwgNjUsIDc3LCA2NSwgODQsIDgzLCAxMjgsIDgxLCA2NSwgNzcsIDY1LCA4NCwgMjExLCA4MSwgNjUsIAorICAgIDc2LCAxOTMsIDgxLCA2NSwgNzMsIDgyLCA4NCwgNzIsIDgyLCA2NSwgMTI4LCA4MSwgNjUsIDczLCAxMjgsIDgxLCA2NSwgCisgICAgNzAsIDEyOCwgODEsIDY1LCAxOTgsIDgxLCA2NSwgNjgsIDc3LCA2NSwgMTI4LCA4MSwgNjUsIDY1LCA3MywgMTI4LCA4MSwgCisgICAgNjUsIDY1LCA3MCwgODUsIDEyOCwgODEsIDY1LCA2NSwgNzAsIDEyOCwgODEsIDQ4LCA0OCwgNTUsIDEyOCwgODEsIDQ4LCAKKyAgICA0OCwgNTQsIDEyOCwgODEsIDQ4LCA0OCwgNTMsIDEyOCwgODEsIDQ4LCA0OCwgNTIsIDEyOCwgODEsIDQ4LCA0OCwgNTEsIAorICAgIDEyOCwgODEsIDQ4LCA0OCwgNTAsIDEyOCwgODEsIDQ4LCA0OCwgNDksIDEyOCwgODAsIDkwLCAxMjgsIDgwLCA4OSwgODgsIAorICAgIDEyOCwgODAsIDg5LCA4NCwgMTI4LCA4MCwgODksIDgyLCA4OCwgMTI4LCA4MCwgODksIDgyLCAxMjgsIDgwLCA4OSwgODAsIAorICAgIDEyOCwgODAsIDg5LCAxMjgsIDgwLCA4NywgNzksIDg5LCAxMjgsIDgwLCA4NywgNzksIDc5LCAxMjgsIDgwLCA4NywgNzksIAorICAgIDEyOCwgODAsIDg3LCAyMDcsIDgwLCA4NywgNzMsIDczLCAxMjgsIDgwLCA4NywgNzMsIDEyOCwgODAsIDg3LCA2OSwgNjksIAorICAgIDEyOCwgODAsIDg3LCA2OSwgMTI4LCA4MCwgODcsIDY1LCA2NSwgMTI4LCA4MCwgODcsIDEyOCwgODAsIDg2LCAxMjgsIDgwLCAKKyAgICA4NSwgODgsIDEyOCwgODAsIDg1LCA4NSwgODQsIDEyOCwgODAsIDg1LCA4NSwgMTI4LCA4MCwgODUsIDg0LCA4MiwgNjksIAorICAgIDcwLCA2NSwgNjcsIDg0LCA3MywgNzksIDc4LCAxMjgsIDgwLCA4NSwgODQsIDEyOCwgODAsIDg1LCAyMTIsIDgwLCA4NSwgCisgICAgODMsIDcyLCA4MCwgNzMsIDc4LCAxMjgsIDgwLCA4NSwgODMsIDcyLCA4MCwgNzMsIDc1LCA2NSwgMTI4LCA4MCwgODUsIDgzLCAKKyAgICA3MiwgNzMsIDc4LCAxOTksIDgwLCA4NSwgODIsIDg4LCAxMjgsIDgwLCA4NSwgODIsIDgzLCA2OSwgMTI4LCA4MCwgODUsIAorICAgIDgyLCA4MCwgNzYsIDE5NywgODAsIDg1LCA4MiwgNzgsIDY1LCA3NywgNjUsIDEyOCwgODAsIDg1LCA4MiwgNzMsIDg0LCA4OSwgCisgICAgMTI4LCA4MCwgODUsIDgyLCA3MywgNzAsIDg5LCAxMjgsIDgwLCA4NSwgODIsIDEyOCwgODAsIDg1LCA4MSwgMTI4LCA4MCwgCisgICAgODUsIDgwLCAxMjgsIDgwLCA4NSwgNzksIDg4LCAxMjgsIDgwLCA4NSwgNzksIDgwLCAxMjgsIDgwLCA4NSwgNzksIDEyOCwgCisgICAgODAsIDg1LCA3OCwgNzEsIDY1LCA2NSwgNzcsIDEyOCwgODAsIDg1LCA3OCwgNzEsIDEyOCwgODAsIDg1LCA3OCwgNjcsIDg0LCAKKyAgICA4NSwgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDgwLCA4NSwgNzgsIDY3LCA4NCwgODUsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIAorICAgIDgwLCA4NSwgNzcsIDgwLCAxMjgsIDgwLCA4NSwgNzcsIDEyOCwgODAsIDg1LCA2OSwgMTI4LCA4MCwgODUsIDY2LCA3NiwgCisgICAgNzMsIDE5NSwgODAsIDg1LCA2NSwgODEsIDEyOCwgODAsIDg1LCA2NSwgNjksIDEyOCwgODAsIDg1LCA1MCwgMTI4LCA4MCwgCisgICAgODUsIDQ5LCAxMjgsIDgwLCA4NSwgMTI4LCA4MCwgODQsIDcyLCA2NSwgNzIsIDE5MywgODAsIDg0LCA2OSwgMTI4LCA4MCwgCisgICAgODMsIDczLCA3NiwgMjAxLCA4MCwgODMsIDczLCA3MCwgNzMsIDgzLCA4NCwgNzksIDgzLCA4OSwgNzgsIDY1LCA3MSwgNzcsIAorICAgIDY1LCAxMjgsIDgwLCA4MywgNzMsIDcwLCA3MywgODMsIDg0LCA3OSwgODAsIDY1LCA4MiwgNjUsIDc1LCA2NSwgNzYsIDY5LCAKKyAgICA4MywgNzcsIDY1LCAxMjgsIDgwLCA4MywgNzMsIDcwLCA3MywgODMsIDg0LCA3OSwgMjA2LCA4MCwgODMsIDczLCA3MCwgNzMsIAorICAgIDgzLCA4NCwgNzksIDc2LCA4OSwgNzEsIDczLCA4MywgNzcsIDY1LCAxMjgsIDgwLCA4MywgNzMsIDEyOCwgODAsIDgzLCAKKyAgICAxMjgsIDgwLCA4MiwgNzksIDg2LCA2OSwgMTI4LCA4MCwgODIsIDc5LCA4NCwgNzksIDg2LCA2NSwgODIsIDg5LCAyMTEsIAorICAgIDgwLCA4MiwgNzksIDg0LCA3OSwgMjExLCA4MCwgODIsIDc5LCA4NCwgNjksIDY3LCA4NCwgNjksIDE5NiwgODAsIDgyLCA3OSwgCisgICAgODMsIDcxLCA2OSwgNzEsIDgyLCA2NSwgNzcsIDc3LCA2OSwgNzgsIDczLCAxMjgsIDgwLCA4MiwgNzksIDgwLCA3OSwgODIsIAorICAgIDg0LCA3MywgNzksIDc4LCA2NSwgMjA0LCA4MCwgODIsIDc5LCA4MCwgNzksIDgyLCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA4MCwgCisgICAgODIsIDc5LCA4MCwgNjksIDgyLCA4NCwgMjE3LCA4MCwgODIsIDc5LCA4MCwgNjksIDc2LCA3NiwgNjksIDIxMCwgODAsIDgyLCAKKyAgICA3OSwgNzksIDcwLCAxMjgsIDgwLCA4MiwgNzksIDc2LCA3OSwgNzgsIDcxLCA2OSwgMTk2LCA4MCwgODIsIDc5LCA3NiwgNjUsIAorICAgIDg0LCA3MywgNzksIDc4LCAxOTcsIDgwLCA4MiwgNzksIDc0LCA2OSwgNjcsIDg0LCA3MywgODYsIDY5LCAxMjgsIDgwLCA4MiwgCisgICAgNzksIDc0LCA2OSwgNjcsIDg0LCA3MywgNzksIDc4LCAxMjgsIDgwLCA4MiwgNzksIDcxLCA4MiwgNjksIDgzLCA4MywgMTI4LCAKKyAgICA4MCwgODIsIDc5LCA3MSwgODIsIDY1LCAyMDUsIDgwLCA4MiwgNzksIDcwLCA3OSwgODUsIDc4LCA2OCwgMTI4LCA4MCwgODIsIAorICAgIDc5LCA2OCwgODUsIDY3LCA4NCwgMTI4LCA4MCwgODIsIDc5LCA2OCwgODUsIDY3LCAyMTIsIDgwLCA4MiwgNzMsIDg2LCA2NSwgCisgICAgODQsIDY5LCAxMjgsIDgwLCA4MiwgNzMsIDg2LCA2NSwgODQsIDE5NywgODAsIDgyLCA3MywgODYsIDY1LCA2NywgMjE3LCAKKyAgICA4MCwgODIsIDczLCA4MywgNzIsIDg0LCA3MiwgNjUsIDc3LCA2NSwgODQsIDgyLCAxOTMsIDgwLCA4MiwgNzMsIDc4LCA4NCwgCisgICAgODMsIDEyOCwgODAsIDgyLCA3MywgNzgsIDg0LCAxMjgsIDgwLCA4MiwgNzMsIDc4LCAyMTIsIDgwLCA4MiwgNzMsIDc4LCAKKyAgICA2NywgNjksIDgzLCA4MywgMTI4LCA4MCwgODIsIDczLCA3NywgNjksIDEyOCwgODAsIDgyLCA3MywgNzcsIDE5NywgODAsIAorICAgIDgyLCA2OSwgODYsIDczLCA3OSwgODUsIDIxMSwgODAsIDgyLCA2OSwgODMsIDY5LCA4NCwgMTI4LCA4MCwgODIsIDY5LCA4MywgCisgICAgNjksIDc4LCA4NCwgNjUsIDg0LCA3MywgNzksIDIwNiwgODAsIDgyLCA2OSwgODMsIDY3LCA4MiwgNzMsIDgwLCA4NCwgNzMsIAorICAgIDc5LCAyMDYsIDgwLCA4MiwgNjksIDgwLCA3OSwgNzgsIDY4LCA2OSwgODIsIDY1LCA3OCwgNjcsIDY5LCAxMjgsIDgwLCA4MiwgCisgICAgNjksIDc4LCA3NSwgNzIsIDY1LCAxMjgsIDgwLCA4MiwgNjksIDcwLCA2NSwgNjcsIDE5NywgODAsIDgyLCA2OSwgNjcsIDczLCAKKyAgICA4MCwgNzMsIDg0LCA2NSwgODQsIDY5LCAxMjgsIDgwLCA4MiwgNjksIDY3LCA2OSwgNjgsIDczLCA3OCwgMTk5LCA4MCwgODIsIAorICAgIDY5LCA2NywgNjksIDY4LCA2OSwgODMsIDEyOCwgODAsIDgyLCA2OSwgNjcsIDY5LCA2OCwgNjksIDIxMSwgODAsIDgyLCA2OSwgCisgICAgNjcsIDY5LCA2OCwgNjksIDE5NiwgODAsIDgyLCA2OSwgNjcsIDY5LCA2OCwgNjksIDEyOCwgODAsIDgyLCA2OSwgNjcsIDY5LCAKKyAgICA2OCwgMTk3LCA4MCwgODIsIDY1LCA3NywgNDUsIDgwLCA3MywgNzMsIDEyOCwgODAsIDgyLCA2NSwgNzcsIDQ1LCA4MCwgNzMsIAorICAgIDIwMSwgODAsIDgyLCA2NSwgNzcsIDQ1LCA3NywgODUsIDc5LCA4OSwgMTI4LCA4MCwgODIsIDY1LCA3NywgNDUsIDc3LCA4NSwgCisgICAgNzksIDIxNywgODAsIDgyLCA2NSwgNzcsIDQ1LCA2NiwgODUsIDc5LCA3OCwgMTI4LCA4MCwgODIsIDY1LCA3NywgNDUsIDY2LCAKKyAgICA4NSwgNzksIDIwNiwgODAsIDgyLCA2NSwgNzcsIDQ1LCA2NiwgNjksIDczLCAxMjgsIDgwLCA4MiwgNjUsIDc3LCA0NSwgNjYsIAorICAgIDY5LCAyMDEsIDgwLCA4MiwgNjUsIDc3LCAxMjgsIDgwLCA4MiwgNjUsIDIwNSwgODAsIDgyLCAxMjgsIDgwLCA4MCwgODYsIAorICAgIDEyOCwgODAsIDgwLCA3NywgMTI4LCA4MCwgODAsIDY1LCAxMjgsIDgwLCA3OSwgODksIDEyOCwgODAsIDc5LCA4OCwgMTI4LCAKKyAgICA4MCwgNzksIDg3LCA2OSwgODIsIDIxMSwgODAsIDc5LCA4NywgNjksIDgyLCAxMjgsIDgwLCA3OSwgODcsIDY4LCA2OSwgODIsIAorICAgIDY5LCAxOTYsIDgwLCA3OSwgODcsIDY4LCA2OSwgODIsIDEyOCwgODAsIDc5LCA4NSwgNzgsIDE5NiwgODAsIDc5LCA4NSwgCisgICAgNzYsIDg0LCA4MiwgMjE3LCA4MCwgNzksIDg1LCA2NywgNzIsIDEyOCwgODAsIDc5LCA4NCwgNjUsIDg0LCA3OSwgMTI4LCAKKyAgICA4MCwgNzksIDg0LCA2NSwgNjYsIDc2LCAxOTcsIDgwLCA3OSwgMjEyLCA4MCwgNzksIDgzLCA4NCwgODAsIDc5LCA4MywgNzMsIAorICAgIDg0LCA3MywgNzksIDIwNiwgODAsIDc5LCA4MywgODQsIDY2LCA3OSwgODgsIDEyOCwgODAsIDc5LCA4MywgODQsIDY1LCAKKyAgICAyMDQsIDgwLCA3OSwgODMsIDg0LCAxMjgsIDgwLCA3OSwgODMsIDIxMiwgODAsIDc5LCA4MywgODMsIDY5LCA4MywgODMsIAorICAgIDczLCA3OSwgNzgsIDEyOCwgODAsIDc5LCA4MiwgODIsIDY5LCA2NywgODQsIDg1LCA4MywgMTI4LCA4MCwgNzksIDgyLCA4MiwgCisgICAgNjksIDY3LCA4NCwgODUsIDIxMSwgODAsIDc5LCA4MCwgODAsIDY5LCA4MiwgMTI4LCA4MCwgNzksIDgwLCAxMjgsIDgwLCAKKyAgICA3OSwgMjA4LCA4MCwgNzksIDc5LCA2OCwgNzYsIDY5LCAxMjgsIDgwLCA3OSwgNzksIDEyOCwgODAsIDc5LCA3OCwgNjgsIAorICAgIDc5LCAxMjgsIDgwLCA3OSwgMjA2LCA4MCwgNzksIDc3LCA3NywgNjksIDY5LCAxMjgsIDgwLCA3OSwgNzcsIDc3LCA2OSwgCisgICAgMTk3LCA4MCwgNzksIDc2LCA3MywgODMsIDcyLCAxMjgsIDgwLCA3OSwgNzYsIDczLCA2NywgMTk3LCA4MCwgNzksIDc2LCAKKyAgICAyMDEsIDgwLCA3OSwgNzYsIDY5LCAxMjgsIDgwLCA3OSwgNzYsIDE5NywgODAsIDc5LCA3NSwgODIsIDg5LCA4NCwgNzMsIAorICAgIDY5LCAxMjgsIDgwLCA3OSwgNzUsIDc5LCA3NCwgNzMsIDEyOCwgODAsIDc5LCA3MywgNzgsIDg0LCAyMTEsIDgwLCA3OSwgCisgICAgNzMsIDc4LCA4NCwgNzksIDEyOCwgODAsIDc5LCA3MywgNzgsIDg0LCA2OSwgODIsIDEyOCwgODAsIDc5LCA3MywgNzgsIDg0LCAKKyAgICA2OSwgMTk2LCA4MCwgNzksIDczLCA3OCwgODQsIDEyOCwgODAsIDc5LCA3MywgNzgsIDIxMiwgODAsIDc5LCA2OSwgODQsIAorICAgIDgyLCAyMTcsIDgwLCA3OSwgNjksIDg0LCA3MywgMTk1LCA4MCwgNzksIDY4LCA2NSwgODQsIDg1LCA4MywgMTI4LCA4MCwgCisgICAgNzksIDY1LCAxMjgsIDgwLCA3OSwgMTI4LCA4MCwgMjA3LCA4MCwgNzgsIDY5LCA4NSwgNzcsIDY1LCA4NCwgNjUsIDEyOCwgCisgICAgODAsIDc2LCA4NSwgODQsIDc5LCAxMjgsIDgwLCA3NiwgODUsIDgzLCA0NSwgNzcsIDczLCA3OCwgODUsIDIxMSwgODAsIDc2LCAKKyAgICA4NSwgODMsIDEyOCwgODAsIDc2LCA4NSwgODIsIDY1LCA3NiwgMTI4LCA4MCwgNzYsIDg1LCA3NywgNjksIDE5NiwgODAsIAorICAgIDc2LCA4NSwgNzcsIDEyOCwgODAsIDc2LCA4NSwgNzUsIDEyOCwgODAsIDc2LCA4NSwgNzEsIDEyOCwgODAsIDc2LCA4NSwgCisgICAgMTI4LCA4MCwgNzYsIDc5LCA4NywgMTI4LCA4MCwgNzYsIDc5LCA4MCwgNzIsIDg1LCAxMjgsIDgwLCA3NiwgNjksIDg0LCAKKyAgICA3MiwgODIsIDc5LCA3OCwgMTI4LCA4MCwgNzYsIDY4LCAxMjgsIDgwLCA3NiwgNjUsIDg5LCA3MywgNzgsIDE5OSwgODAsIAorICAgIDc2LCA2NSwgODMsIDg0LCA3MywgNjcsIDgzLCAxMjgsIDgwLCA3NiwgNjUsIDc4LCA2OSwgMTI4LCA4MCwgNzYsIDY1LCA3OCwgCisgICAgMTk3LCA4MCwgNzYsIDY1LCA3OCwgNjcsIDIwMywgODAsIDc2LCA2NSwgNzUsIDEyOCwgODAsIDc2LCA2NSwgNzEsIDczLCAKKyAgICA3OSwgMjExLCA4MCwgNzYsIDY1LCA2NywgNjksIDcyLCA3OSwgNzYsIDY4LCA2OSwgMjEwLCA4MCwgNzYsIDY1LCA2NywgCisgICAgMTk3LCA4MCwgNzYsIDY1LCAxMjgsIDgwLCA3MywgOTAsIDkwLCA3MywgNjcsIDY1LCA4NCwgNzksIDEyOCwgODAsIDczLCAKKyAgICA5MCwgOTAsIDY1LCAxMjgsIDgwLCA3MywgODgsIDEyOCwgODAsIDczLCA4NywgODIsIDEyOCwgODAsIDczLCA4NCwgNjcsIAorICAgIDcyLCA3MCwgNzksIDgyLCA3NSwgMTI4LCA4MCwgNzMsIDg0LCA2NywgNzIsIDcwLCA3OSwgODIsIDIwMywgODAsIDczLCA4NCwgCisgICAgMTI4LCA4MCwgNzMsIDgzLCA4NCwgNzksIDc2LCAxMjgsIDgwLCA3MywgODMsIDY5LCA3NiwgNjksIDcyLCAxMjgsIDgwLCAKKyAgICA3MywgODMsIDY3LCA2OSwgODMsIDEyOCwgODAsIDczLCA4MiwgNzMsIDcxLCAxMjgsIDgwLCA3MywgODIsIDczLCAxOTksIAorICAgIDgwLCA3MywgODIsIDczLCA2OSwgNjksIDc4LCAxMjgsIDgwLCA3MywgODAsIDczLCA3OCwgNzEsIDEyOCwgODAsIDczLCA4MCwgCisgICAgNjUsIDY5LCA3NywgNzEsIDY2LCA3MywgNjksIDY5LCAxMjgsIDgwLCA3MywgODAsIDY1LCA2OSwgNzcsIDY2LCA2NSwgMTI4LCAKKyAgICA4MCwgNzMsIDgwLCAxMjgsIDgwLCA3MywgNzgsIDg3LCA3MiwgNjksIDY5LCAyMDQsIDgwLCA3MywgNzgsIDY5LCA2NSwgODAsIAorICAgIDgwLCA3NiwgNjksIDEyOCwgODAsIDczLCA3OCwgMTk3LCA4MCwgNzMsIDc4LCA2NSwgODIsIDY2LCA3OSwgODIsIDY1LCA4MywgCisgICAgMTI4LCA4MCwgNzMsIDc2LCA3NiwgMTI4LCA4MCwgNzMsIDc2LCAxOTcsIDgwLCA3MywgNzYsIDY3LCA4MiwgNzksIDIxNSwgCisgICAgODAsIDczLCA3NSwgODUsIDgyLCA4NSwgMTI4LCA4MCwgNzMsIDc1LCA3OSwgMTI4LCA4MCwgNzMsIDcxLCAxMjgsIDgwLCAKKyAgICA3MywgMTk5LCA4MCwgNzMsIDY5LCA4OCwgMTI4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA4NCwgNzIsIDczLCA2OSwgODUsIAorICAgIDg0LCA3MiwgMTI4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA4MywgODMsIDY1LCA3OCwgNzEsIDgzLCA3MywgNzksIDgzLCAKKyAgICAxMjgsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDgzLCA3MywgNzksIDgzLCA0NSwgODQsIDczLCA3NSwgNjksIDg1LCA4NCwgCisgICAgMTI4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA4MywgNzMsIDc5LCA4MywgNDUsIDg0LCA3MiwgNzMsIDY5LCA4NSwgODQsIAorICAgIDcyLCAxMjgsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDgzLCA3MywgNzksIDgzLCA0NSwgODAsIDczLCA2OSwgODUsIDgwLCAKKyAgICAxMjgsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDgzLCA3MywgNzksIDgzLCA0NSwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgCisgICAgMTI4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA4MywgNzMsIDc5LCA4MywgNDUsIDY3LCA3MywgNjksIDg1LCA2NywgMTI4LCAKKyAgICA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4MCwgNzIsIDczLCA2OSwgODUsIDgwLCAKKyAgICA3MiwgMTI4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDEyOCwgODAsIDczLCA2OSwgODUsIAorICAgIDgwLCA0NSwgNzgsIDczLCA2OSwgODUsIDc4LCAxMjgsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDc3LCA3MywgNjksIDg1LCAKKyAgICA3NywgMTI4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA3NSwgNzIsIDczLCA2OSwgODUsIDc1LCA3MiwgMTI4LCA4MCwgNzMsIAorICAgIDY5LCA4NSwgODAsIDQ1LCA2NywgNzMsIDY5LCA4NSwgNjcsIDEyOCwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgNjcsIDcyLCAKKyAgICA3MywgNjksIDg1LCA2NywgNzIsIDEyOCwgODAsIDczLCA2OSwgODUsIDIwOCwgODAsIDczLCA2OSwgODQsIDEyOCwgODAsIAorICAgIDczLCA2OSwgODAsIDEyOCwgODAsIDczLCA2OSwgNjksIDg0LCAxMjgsIDgwLCA3MywgNjksIDY5LCA4MSwgMTI4LCA4MCwgCisgICAgNzMsIDY5LCA2NywgNjksIDEyOCwgODAsIDczLCA2OSwgMTI4LCA4MCwgNzMsIDY3LCA3NSwgNjksIDg0LCAxMjgsIDgwLCAKKyAgICA3MywgNjcsIDc1LCAxMjgsIDgwLCA3MywgNjUsIDgzLCA4NSwgODQsIDc5LCA4MiwgODUsIDEyOCwgODAsIDczLCA2NSwgODMsIAorICAgIDc3LCAxOTMsIDgwLCA3MywgNjUsIDc4LCA3OSwgMTI4LCA4MCwgMjAxLCA4MCwgNzIsIDg3LCA2NSwgMTI4LCA4MCwgNzIsIAorICAgIDg1LCA4NCwgNzIsIDY1LCA3OSwgMTI4LCA4MCwgNzIsIDg1LCAyMTAsIDgwLCA3MiwgODUsIDc4LCA3MSwgMTI4LCA4MCwgCisgICAgNzIsIDgyLCA2NSwgODMsIDY5LCAxMjgsIDgwLCA3MiwgNzksIDc4LCA2OSwgODMsIDEyOCwgODAsIDcyLCA3OSwgNjksIDc4LCAKKyAgICA3MywgNjcsIDczLCA2NSwgMjA2LCA4MCwgNzIsIDc5LCA2NSwgMTI4LCA4MCwgNzIsIDc5LCAxMjgsIDgwLCA3MiwgMjA3LCAKKyAgICA4MCwgNzIsIDc4LCA2NSwgNjksIDIwMywgODAsIDcyLCA3MywgNzgsIDg0LCA3MiwgODUsIDEyOCwgODAsIDcyLCA3MywgNzYsIAorICAgIDc5LCA4MywgNzksIDgwLCA3MiwgNjksIDgyLCAyMTEsIDgwLCA3MiwgNzMsIDc2LCA3MywgODAsIDgwLCA3MywgNzgsIDE5NywgCisgICAgODAsIDcyLCA3MywgNjksIDg1LCA4MCwgNzIsIDQ1LCA4NCwgNzIsIDczLCA2OSwgODUsIDg0LCA3MiwgMTI4LCA4MCwgNzIsIAorICAgIDczLCA2OSwgODUsIDgwLCA3MiwgNDUsIDgzLCA3MywgNzksIDgzLCAxMjgsIDgwLCA3MiwgNzMsIDY5LCA4NSwgODAsIDcyLCAKKyAgICA0NSwgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIDgwLCA3MiwgNzMsIDY5LCA4NSwgODAsIDcyLCA0NSwgNzIsIDczLCA2OSwgCisgICAgODUsIDcyLCAxMjgsIDgwLCA3MiwgNzMsIDY5LCA4NSwgODAsIDIwMCwgODAsIDcyLCA3MywgMTI4LCA4MCwgNzIsIDIwMSwgCisgICAgODAsIDcyLCA2OSwgNjksIDEyOCwgODAsIDcyLCA2OSwgMTI4LCA4MCwgNzIsIDY1LCA4MywgNjksIDQ1LCAxOTgsIDgwLCAKKyAgICA3MiwgNjUsIDgzLCA2OSwgNDUsIDE5NCwgODAsIDcyLCA2NSwgODIsIDg5LCA3OCwgNzEsIDY5LCA2NSwgMjA0LCA4MCwgNzIsIAorICAgIDY1LCA4MiwgMTI4LCA4MCwgNzIsIDY1LCA3OCwgMTI4LCA4MCwgNzIsIDY1LCA3NywgMTI4LCA4MCwgNzIsIDY1LCA3MywgCisgICAgODMsIDg0LCA3OSwgMjExLCA4MCwgNzIsIDY1LCA3MSwgODMsIDQ1LCA4MCwgMTkzLCA4MCwgNzIsIDY1LCA2NSwgODIsIDc1LCAKKyAgICA2NSwgNjUsIDEyOCwgODAsIDcyLCA2NSwgNjUsIDEyOCwgODAsIDcyLCA2NSwgMTI4LCA4MCwgNzEsIDEyOCwgODAsIDcwLCAKKyAgICAxMjgsIDgwLCA2OSwgODUsIDg4LCAxMjgsIDgwLCA2OSwgODUsIDg0LCA2NSwgNjksIDEyOCwgODAsIDY5LCA4NSwgODQsIAorICAgIDEyOCwgODAsIDY5LCA4NCwgNjUsIDgzLCA4NCwgNzksIDc1LCA3OSwgODUsIDcwLCA3MywgODMsIDc3LCA2NSwgMTI4LCA4MCwgCisgICAgNjksIDg0LCA2NSwgODMsIDg0LCA3MywgMTI4LCA4MCwgNjksIDg0LCA2NSwgODMsIDc3LCA2NSwgMTI4LCA4MCwgNjksIDg0LCAKKyAgICA2NSwgNzYsIDc2LCA2OSwgMTk2LCA4MCwgNjksIDgzLCA3OSwgMTI4LCA4MCwgNjksIDgzLCAyMDcsIDgwLCA2OSwgODMsIAorICAgIDcyLCA1MCwgMTI4LCA4MCwgNjksIDgzLCA2OSwgODQsIDE5MywgODAsIDY5LCAyMTEsIDgwLCA2OSwgODIsIDg0LCA3MiwgCisgICAgMjA3LCA4MCwgNjksIDgyLCA4MywgODAsIDY5LCA2NywgODQsIDczLCA4NiwgNjksIDEyOCwgODAsIDY5LCA4MiwgODMsIDc5LCAKKyAgICA3OCwgNjUsIDIwNCwgODAsIDY5LCA4MiwgODMsIDc5LCA3OCwgMTI4LCA4MCwgNjksIDgyLCA4MywgNzksIDIwNiwgODAsIAorICAgIDY5LCA4MiwgODMsIDczLCA2NSwgMjA2LCA4MCwgNjksIDgyLCA4MywgNjksIDg2LCA2OSwgODIsIDczLCA3OCwgMTk5LCA4MCwgCisgICAgNjksIDgyLCA4MCwgNjksIDc4LCA2OCwgNzMsIDY3LCA4NSwgNzYsIDY1LCA4MiwgMTI4LCA4MCwgNjksIDgyLCA4MCwgNjksIAorICAgIDc4LCA2OCwgNzMsIDY3LCA4NSwgNzYsIDY1LCAyMTAsIDgwLCA2OSwgODIsIDc3LCA3MywgODQsIDg0LCA2OSwgMTk2LCA4MCwgCisgICAgNjksIDgyLCA3NywgNjUsIDc4LCA2OSwgNzgsIDIxMiwgODAsIDY5LCA4MiwgNzMsIDgzLCA4MCwgNzksIDc3LCA2OSwgNzgsIAorICAgIDczLCAxMjgsIDgwLCA2OSwgODIsIDczLCA4MywgODAsIDc5LCA3NywgNjksIDc4LCAyMDEsIDgwLCA2OSwgODIsIDcwLCA3OSwgCisgICAgODIsIDc3LCA3MywgNzgsIDE5OSwgODAsIDY5LCA4MiwgNzAsIDY5LCA2NywgODQsIDg1LCAyMDUsIDgwLCA2OSwgODIsIDcwLCAKKyAgICA2OSwgNjcsIDg0LCA2NSwgMTI4LCA4MCwgNjksIDgyLCA3MCwgNjksIDY3LCA4NCwgMTkzLCA4MCwgNjksIDgyLCA2NywgODUsIAorICAgIDgzLCA4MywgNzMsIDg2LCA2OSwgMTI4LCA4MCwgNjksIDgyLCA2NywgNjksIDc4LCAyMTIsIDgwLCA2OSwgODAsIDY5LCA4NCwgCisgICAgMTI4LCA4MCwgNjksIDgwLCA2OSwgMjEyLCA4MCwgNjksIDc5LCA4MiwgODQsIDIwMCwgODAsIDY5LCA3OSwgODAsIDc2LCAKKyAgICA2OSwgMTI4LCA4MCwgNjksIDc4LCA4NCwgNjUsIDgzLCA2OSwgNzcsIDY5LCAxMjgsIDgwLCA2OSwgNzgsIDg0LCA2NSwgNzEsIAorICAgIDgyLCA2NSwgNzcsIDEyOCwgODAsIDY5LCA3OCwgODQsIDY1LCA3MSwgNzksIDc4LCAxMjgsIDgwLCA2OSwgNzgsIDgzLCA4NSwgCisgICAgMTI4LCA4MCwgNjksIDc4LCA4MywgNzMsIDg2LCAxOTcsIDgwLCA2OSwgNzgsIDc4LCAyMTcsIDgwLCA2OSwgNzgsIDczLCAKKyAgICA3MiwgNzMsIDEyOCwgODAsIDY5LCA3OCwgNzEsIDg1LCA3MywgNzgsIDEyOCwgODAsIDY5LCA3OCwgNzEsIDc1LCA2NSwgNzYsIAorICAgIDEyOCwgODAsIDY5LCA3OCwgNjksIDg0LCA4MiwgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDgwLCA2OSwgNzgsIDY3LCA3MywgCisgICAgNzYsIDEyOCwgODAsIDY5LCA3NiwgNjUsIDgzLCA4NCwgNzksIDc4LCAxMjgsIDgwLCA2OSwgNzYsIDY1LCA4MywgODQsIDc5LCAKKyAgICAyMDYsIDgwLCA2OSwgNzMsIDg0LCA3MiwgMTI4LCA4MCwgNjksIDcyLCA2OSwgNzIsIDEyOCwgODAsIDY5LCA3MiwgNjksIAorICAgIDIwMCwgODAsIDY5LCA3MiwgMTI4LCA4MCwgNjksIDIwMCwgODAsIDY5LCA2OSwgOTAsIDczLCAxMjgsIDgwLCA2OSwgNjksIAorICAgIDgzLCA3MiwgNzMsIDEyOCwgODAsIDY5LCA2OSwgODAsIDEyOCwgODAsIDY5LCA2OSwgNzcsIDEyOCwgODAsIDY5LCA2OSwgCisgICAgMTI4LCA4MCwgNjksIDY4LCA2OSwgODMsIDg0LCA4MiwgNzMsIDY1LCA3OCwgODMsIDEyOCwgODAsIDY5LCA2OCwgNjksIDgzLCAKKyAgICA4NCwgODIsIDczLCA2NSwgNzgsIDEyOCwgODAsIDY5LCA2OCwgNjksIDgzLCA4NCwgNjUsIDc2LCAxMjgsIDgwLCA2OSwgNjgsIAorICAgIDY5LCA4MywgODQsIDY1LCAyMDQsIDgwLCA2OSwgNjgsIDY1LCAyMDQsIDgwLCA2OSwgNjUsIDY3LCA3MiwgMTI4LCA4MCwgCisgICAgNjksIDY1LCA2NywgNjksIDEyOCwgODAsIDY5LCA2NSwgNjcsIDE5NywgODAsIDY4LCA3MywgMTI4LCA4MCwgNjgsIDcwLCAKKyAgICAxMjgsIDgwLCA2OCwgMTI4LCA4MCwgNjcsIDEyOCwgODAsIDY1LCA5MCwgNjksIDgyLCAxMjgsIDgwLCA2NSwgODksIDY5LCAKKyAgICA4MiwgNzksIDc1LCAxMjgsIDgwLCA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDgwLCA2NSwgODksIDEyOCwgODAsIAorICAgIDY1LCA4OCwgMTI4LCA4MCwgNjUsIDg3LCA3OCwgMTI4LCA4MCwgNjUsIDIxNSwgODAsIDY1LCA4NiwgNzMsIDg5LCA2NSwgCisgICAgNzgsIDczLCAxMjgsIDgwLCA2NSwgODUsIDEyOCwgODAsIDY1LCA4NCwgODQsIDY5LCA4MiwgNzgsIDEyOCwgODAsIDY1LCAKKyAgICA4NCwgNzIsIDY1LCA3NywgNjUsIDgzLCA2NSwgODQsIDEyOCwgODAsIDY1LCA4NCwgMjAwLCA4MCwgNjUsIDg0LCA2NSwgNzUsIAorICAgIDEyOCwgODAsIDY1LCA4NCwgNjUsIDcyLCAxMjgsIDgwLCA2NSwgODQsIDEyOCwgODAsIDY1LCA4MywgODUsIDgxLCAxMjgsIAorICAgIDgwLCA2NSwgODMsIDgzLCA4MCwgNzksIDgyLCAyMTIsIDgwLCA2NSwgODMsIDgzLCA3MywgODYsIDY5LCA0NSwgODAsIDg1LCAKKyAgICA3NiwgNzYsIDQ1LCA4NSwgODAsIDQ1LCA3OSwgODUsIDg0LCA4MCwgODUsIDIxMiwgODAsIDY1LCA4MywgODMsIDczLCA4NiwgCisgICAgNjksIDQ1LCA4MCwgODUsIDc2LCA3NiwgNDUsIDY4LCA3OSwgODcsIDc4LCA0NSwgNzksIDg1LCA4NCwgODAsIDg1LCAyMTIsIAorICAgIDgwLCA2NSwgODMsIDcyLCA4NCwgNjUsIDEyOCwgODAsIDY1LCA4MywgNzIsIDY1LCA2OSwgMTI4LCA4MCwgNjUsIDgzLCA2OSwgCisgICAgODEsIDEyOCwgODAsIDY1LCA4MywgNjUsIDc4LCA3MSwgNjUsIDIwNiwgODAsIDY1LCA4MiwgODUsIDc3LCAxMjgsIDgwLCAKKyAgICA2NSwgODIsIDg0LCAyMTcsIDgwLCA2NSwgODIsIDg0LCA3OCwgNjksIDgyLCA4MywgNzIsIDczLCAyMDgsIDgwLCA2NSwgODIsIAorICAgIDg0LCA3MywgNjUsIDc2LCA3NiwgODksIDQ1LCA4MiwgNjksIDY3LCA4OSwgNjcsIDc2LCA2OSwgMTk2LCA4MCwgNjUsIDgyLCAKKyAgICA4NCwgNzMsIDY1LCAyMDQsIDgwLCA2NSwgODIsIDg0LCA3MiwgNzMsIDY1LCAyMDYsIDgwLCA2NSwgODIsIDIxMiwgODAsIAorICAgIDY1LCA4MiwgNzMsIDY3LCA3MiwgNzksIDc4LCAxMjgsIDgwLCA2NSwgODIsIDY5LCA4MywgODQsIDczLCA3MSwgNzcsIDY5LCAKKyAgICA3OCwgNzksIDIwNiwgODAsIDY1LCA4MiwgNjksIDgyLCA2OSwgNzgsIDEyOCwgODAsIDY1LCA4MiwgNjksIDc4LCA4NCwgNzIsIAorICAgIDY5LCA4MywgNzMsIDgzLCAxMjgsIDgwLCA2NSwgODIsIDY5LCA3OCwgODQsIDcyLCA2OSwgODMsIDczLCAyMTEsIDgwLCA2NSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDgyLCA2NSwgODMsIDE5NywgODAsIDY1LCA4MiwgNjUsIDc2LCA3NiwgNjksIDc2LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgNzcsIDEyOCwgODAsIDY1LCA4MiwgNjUsIDc2LCA3NiwgNjksIDc2LCAxMjgsIDgwLCA2NSwgODIsIDY1LCA3NiwgCisgICAgNzYsIDY5LCAyMDQsIDgwLCA2NSwgODIsIDY1LCA3NSwgNzYsIDczLCA4NCwgNzMsIDc1LCA3MywgMTI4LCA4MCwgNjUsIDgyLCAKKyAgICA2NSwgNzUsIDc2LCA3MywgODQsIDczLCA3NSwgMjAxLCA4MCwgNjUsIDgyLCA2NSwgNzUsIDY1LCA3NiwgNjksIDgzLCA3NywgCisgICAgMTkzLCA4MCwgNjUsIDgyLCA2NSwgNzEsIDgyLCA2NSwgODAsIDcyLCA3OSwgODMsIDEyOCwgODAsIDY1LCA4MiwgNjUsIDcxLCAKKyAgICA4MiwgNjUsIDgwLCA3MiwgMTI4LCA4MCwgNjUsIDgyLCA2NSwgNzEsIDgyLCA2NSwgODAsIDIwMCwgODAsIDY1LCA4MiwgNjUsIAorICAgIDEyOCwgODAsIDY1LCA4MiwgMTI4LCA4MCwgNjUsIDgwLCA4OSwgODIsIDg1LCA4MywgMTI4LCA4MCwgNjUsIDgwLCA2OSwgCisgICAgODIsIDY3LCA3NiwgNzMsIDgwLCAxMjgsIDgwLCA2NSwgODAsIDY5LCAyMTAsIDgwLCA2NSwgODAsIDEyOCwgODAsIDY1LCAKKyAgICAyMDgsIDgwLCA2NSwgMjA3LCA4MCwgNjUsIDc4LCA4OSwgODUsIDc1LCA4NSwgMTI4LCA4MCwgNjUsIDc4LCA4OSwgNzMsIAorICAgIDc1LCA4NSwgMTI4LCA4MCwgNjUsIDc4LCA4OSwgNjksIDY3LCA2OSwgNzUsIDEyOCwgODAsIDY1LCA3OCwgODksIDY1LCA3OCwgCisgICAgNzEsIDcxLCA2NSwgMTI4LCA4MCwgNjUsIDc4LCA4OSwgNjUsIDc1LCA4MiwgNjUsIDEyOCwgODAsIDY1LCA3OCwgODQsIDczLCAKKyAgICAxMjgsIDgwLCA2NSwgNzgsIDgzLCA3MywgNzksIDgzLCA0NSwgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIDgwLCA2NSwgNzgsIAorICAgIDgzLCA3MywgNzksIDgzLCA0NSwgNzUsIDY1LCA4MCwgODksIDY5LCA3OSwgODUsIDc4LCA4MCwgNzMsIDY5LCA4NSwgODAsIAorICAgIDEyOCwgODAsIDY1LCA3OCwgNzksIDc4LCA3MSwgNzksIDc4LCA2NSwgNzgsIDEyOCwgODAsIDY1LCA3OCwgNzksIDc2LCA3OSwgCisgICAgNzgsIDcxLCAxMjgsIDgwLCA2NSwgNzgsIDcxLCA4NywgNzMsIDgzLCA2NSwgNjgsIDEyOCwgODAsIDY1LCA3OCwgNzEsIDgyLCAKKyAgICA2NSwgNzgsIDcxLCA3NSwgNjksIDgwLCAxMjgsIDgwLCA2NSwgNzgsIDcxLCA3OSwgNzYsIDY1LCA4NCwgMTI4LCA4MCwgNjUsIAorICAgIDc4LCA3MSwgNzYsIDc5LCA3OCwgNzEsIDEyOCwgODAsIDY1LCA3OCwgNzEsIDc2LCA2NSwgODksIDY1LCA4MiwgMTI4LCA4MCwgCisgICAgNjUsIDc4LCA3MSwgNzUsIDc5LCA3OCwgMTI4LCA4MCwgNjUsIDc4LCA3MSwgNzUsIDY1LCA4NCwgMTI4LCA4MCwgNjUsIDc4LCAKKyAgICA3MSwgNzIsIDg1LCA3NiwgODUsIDEyOCwgODAsIDY1LCA3OCwgNzEsIDEyOCwgODAsIDY1LCA3OCwgNjksIDg1LCA3NiwgNjksIAorICAgIDg1LCA3OCwgNzEsIDEyOCwgODAsIDY1LCA3OCwgNjgsIDE5MywgODAsIDY1LCA3OCwgNjUsIDY5LCA3NiwgNjUsIDY5LCA3OCwgCisgICAgNzEsIDEyOCwgODAsIDY1LCA3OCwgMTI4LCA4MCwgNjUsIDc3LCA4NSwgNzgsIDcxLCA3NSwgNjUsIDcyLCAxMjgsIDgwLCAKKyAgICA2NSwgNzcsIDg1LCA2OCwgODAsIDc5LCA2OCwgMTI4LCA4MCwgNjUsIDc3LCA4MywgNzIsIDY1LCA2OSwgMTI4LCA4MCwgNjUsIAorICAgIDc3LCA4MCwgNzIsIDg5LCA3NiwgNzMsIDY1LCAyMDYsIDgwLCA2NSwgNzcsIDczLCA3OCwgNzEsIDc1LCA2NSwgNzYsIDEyOCwgCisgICAgODAsIDY1LCA3NywgNjksIDgwLCA2OSwgODQsIDEyOCwgODAsIDY1LCA3NywgNjksIDc4LCA2OSwgNzgsIDcxLCAxMjgsIDgwLCAKKyAgICA2NSwgNzcsIDY1LCA2OCwgNjUsIDEyOCwgODAsIDY1LCA3NywgNjUsIDY1LCA2OSwgNzIsIDEyOCwgODAsIDY1LCA3NiwgODUsIAorICAgIDg0LCA2NSwgMTI4LCA4MCwgNjUsIDc2LCA3OSwgNjcsIDcyLCA3NSwgNjUsIDEyOCwgODAsIDY1LCA3NiwgMjA1LCA4MCwgCisgICAgNjUsIDc2LCA3NiwgNjUsIDg3LCA2NSwgMTI4LCA4MCwgNjUsIDc2LCA3NiwgNjUsIDgzLCAxMjgsIDgwLCA2NSwgNzYsIDY5LCAKKyAgICA4NCwgODQsIDY5LCAxMjgsIDgwLCA2NSwgNzYsIDY1LCA4NSwgNzgsIDE5OSwgODAsIDY1LCA3NiwgNjUsIDg0LCA2NSwgNzYsIAorICAgIDczLCA5MCwgNjksIDE5NiwgODAsIDY1LCA3NiwgNjUsIDg0LCA2NSwgNzYsIDczLCA5MCwgNjUsIDg0LCA3MywgNzksIDc4LCAKKyAgICAxMjgsIDgwLCA2NSwgNzYsIDY1LCA4NCwgNjUsIDIwNCwgODAsIDY1LCA3NSwgODAsIDY1LCAyMDMsIDgwLCA2NSwgNzMsIAorICAgIDg5LCA2NSwgNzgsIDc4LCA3OSwgNzMsIDEyOCwgODAsIDY1LCA3MywgODIsIDg0LCA3MiwgODIsIDY1LCAxMjgsIDgwLCA2NSwgCisgICAgNzMsIDgyLCA2OSwgMTk2LCA4MCwgNjUsIDczLCAxMjgsIDgwLCA2NSwgNzIsIDc2LCA2NSwgODYsIDIwMSwgODAsIDY1LCAKKyAgICA3MiwgMTI4LCA4MCwgNjUsIDcxLCA2OSwgODIsIDEyOCwgODAsIDY1LCA3MSwgMTk3LCA4MCwgNjUsIDY4LCA3NywgMTkzLCAKKyAgICA4MCwgNjUsIDY4LCA2OCwgNzMsIDc4LCAxOTksIDgwLCA2NSwgNjgsIDE5MywgODAsIDY1LCA2OCwgMTI4LCA4MCwgNjUsIAorICAgIDY3LCA3NSwgNzMsIDc4LCA3MSwgMTI4LCA4MCwgNjUsIDY3LCA3NSwgNjUsIDcxLCA2OSwgMTI4LCA4MCwgNjUsIDY1LCA4NCwgCisgICAgODUsIDEyOCwgODAsIDY1LCA2NSwgODMsIDY5LCA3OCwgODQsIDc5LCAxMjgsIDgwLCA2NSwgNjUsIDgyLCA2NSwgNjksIAorICAgIDEyOCwgODAsIDY1LCA2NSwgNzcsIDEyOCwgODAsIDY1LCA2NSwgNzMsIDEyOCwgODAsIDY1LCA2NSwgNDUsIDgwLCA3MywgCisgICAgNzYsIDc2LCA2NSwgMTI4LCA4MCwgNjUsIDY1LCAxMjgsIDgwLCA1MCwgMTI4LCA4MCwgNDgsIDQ5LCA0OSwgMTI4LCA4MCwgCisgICAgNDgsIDQ5LCA0OCwgMTI4LCA4MCwgNDgsIDQ4LCA1NywgMTI4LCA4MCwgNDgsIDQ4LCA1NiwgMTI4LCA4MCwgNDgsIDQ4LCAKKyAgICA1NSwgMTI4LCA4MCwgNDgsIDQ4LCA1NCwgMTI4LCA4MCwgNDgsIDQ4LCA1MywgMTI4LCA4MCwgNDgsIDQ4LCA1MiwgMTI4LCAKKyAgICA4MCwgNDgsIDQ4LCA1MSwgNjUsIDEyOCwgODAsIDQ4LCA0OCwgNTEsIDEyOCwgODAsIDQ4LCA0OCwgNTAsIDEyOCwgODAsIAorICAgIDQ4LCA0OCwgNDksIDY1LCAxMjgsIDgwLCA0OCwgNDgsIDQ5LCAxMjgsIDc5LCA4OSwgODIsIDY1LCA3OCwgNzMsIDgzLCA3NywgCisgICAgMTkzLCA3OSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDc5LCA4OCwgNzMsIDY1LCAxMjgsIDc5LCA4OCwgNzMsIDE5MywgCisgICAgNzksIDg4LCA2OSwgNzMsIDY1LCAyMDEsIDc5LCA4OCwgNjksIDczLCAxOTMsIDc5LCA4NiwgNjksIDgyLCA4MiwgNzMsIDY4LCAKKyAgICA2OSwgMTI4LCA3OSwgODYsIDY5LCA4MiwgNzYsIDc5LCA3OCwgMTk5LCA3OSwgODYsIDY5LCA4MiwgNzYsIDczLCA3OCwgNjksIAorICAgIDEyOCwgNzksIDg2LCA2OSwgODIsIDc2LCA2NSwgODksIDEyOCwgNzksIDg2LCA2OSwgODIsIDc2LCA2NSwgODAsIDgwLCA3MywgCisgICAgNzgsIDE5OSwgNzksIDg2LCA2OSwgODIsIDc2LCA2NSwgNzMsIDY4LCAxMjgsIDc5LCA4NiwgNjksIDgyLCA2NiwgNjUsIDgyLCAKKyAgICAxMjgsIDc5LCA4NiwgNjUsIDIwNCwgNzksIDg2LCAxMjgsIDc5LCA4NSwgODQsIDc2LCA3MywgNzgsIDY5LCAxOTYsIDc5LCAKKyAgICA4NSwgODQsIDc2LCA3MywgNzgsIDY5LCAxMjgsIDc5LCA4NSwgODQsIDY5LCAyMTAsIDc5LCA4NSwgODQsIDY2LCA3OSwgCisgICAgMjE2LCA3OSwgODUsIDc4LCA3NSwgNzMsIDE5MywgNzksIDg1LCA3OCwgNjcsIDY5LCAxMjgsIDc5LCA4NSwgNzgsIDY3LCAKKyAgICAxOTcsIDc5LCA4NCwgODUsIDEyOCwgNzksIDg0LCA4NCwgNjUsIDg2LCAxOTMsIDc5LCA4NCwgODQsIDEyOCwgNzksIDg0LCAKKyAgICA3MiwgNjUsIDc2LCA2NSwgMjA2LCA3OSwgODQsIDcyLCA2NSwgNzYsIDEyOCwgNzksIDgzLCA3NywgNjUsIDc4LCA4OSwgCisgICAgMTkzLCA3OSwgODMsIDY3LCAxMjgsIDc5LCA4MiwgODQsIDcyLCA3OSwgNzEsIDc5LCA3OCwgNjUsIDIwNCwgNzksIDgyLCAKKyAgICA4NCwgNzIsIDc5LCA2OCwgNzksIDIxNiwgNzksIDgyLCA3OCwgNjUsIDg0LCAxOTcsIDc5LCA4MiwgNzgsIDY1LCA3NywgNjksIAorICAgIDc4LCA4NCwgMTI4LCA3OSwgODIsIDc4LCA2NSwgNzcsIDY5LCA3OCwgMjEyLCA3OSwgODIsIDc1LCA3MiwgNzksIDIwNiwgCisgICAgNzksIDgyLCA3MywgNzEsIDczLCA3OCwgNjUsIDIwNCwgNzksIDgyLCA3MywgNzEsIDczLCA3OCwgMTI4LCA3OSwgODIsIDY5LCAKKyAgICA0NSwgNTAsIDEyOCwgNzksIDgyLCA2OCwgNzMsIDc4LCA2NSwgMjA0LCA3OSwgODIsIDY4LCA2OSwgMjEwLCA3OSwgODIsIAorICAgIDY3LCA3MiwgNzMsIDY4LCAxMjgsIDc5LCA4MiwgNjUsIDc4LCA3MSwgMTk3LCA3OSwgODAsIDg0LCA3MywgNzksIDIwNiwgCisgICAgNzksIDgwLCA4NCwgNzMsIDY3LCA2NSwgMjA0LCA3OSwgODAsIDgwLCA4MiwgNjksIDgzLCA4MywgNzMsIDc5LCA3OCwgMTI4LCAKKyAgICA3OSwgODAsIDgwLCA3OSwgODMsIDczLCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA3OSwgODAsIDgwLCA3OSwgODMsIDczLCA3OCwgCisgICAgMTk5LCA3OSwgODAsIDgwLCA3OSwgODMsIDY5LCAxMjgsIDc5LCA4MCwgNzIsIDczLCA4NSwgNjcsIDcyLCA4NSwgODMsIAorICAgIDEyOCwgNzksIDgwLCA2OSwgODIsIDY1LCA4NCwgNzksIDgyLCAxMjgsIDc5LCA4MCwgNjksIDgyLCA2NSwgODQsIDc5LCAKKyAgICAyMTAsIDc5LCA4MCwgNjksIDgyLCA2NSwgODQsIDczLCA3OCwgMTk5LCA3OSwgODAsIDY5LCA3OCwgNzMsIDc4LCAxOTksIAorICAgIDc5LCA4MCwgNjksIDc4LCA0NSwgODAsIDEyOCwgNzksIDgwLCA2OSwgNzgsIDQ1LCA3OSwgODUsIDg0LCA3NiwgNzMsIDc4LCAKKyAgICA2OSwgMTk2LCA3OSwgODAsIDY5LCA3OCwgNDUsIDcyLCA2OSwgNjUsIDY4LCA2OSwgMTk2LCA3OSwgODAsIDY5LCA3OCwgNDUsIAorICAgIDY3LCA3MywgODIsIDY3LCA4NSwgNzMsIDg0LCA0NSwgNzksIDg1LCA4NCwgODAsIDg1LCAyMTIsIDc5LCA3OSwgOTAsIDY5LCAKKyAgICAxMjgsIDc5LCA3OSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDc5LCA3OSwgODUsIDEyOCwgNzksIDc5LCA3NywgODUsIAorICAgIDEyOCwgNzksIDc5LCA2OSwgMTI4LCA3OSwgNzksIDY2LCA3OSwgNzksIDcwLCA3MywgNzYsIDczLCAxMjgsIDc5LCA3OCwgCisgICAgODUsIDEyOCwgNzksIDc4LCA4MywgODUsIDEyOCwgNzksIDc4LCA3OCwgMTI4LCA3OSwgNzgsIDc1LCA2NSwgODIsIDEyOCwgCisgICAgNzksIDc4LCA2OSwgODMsIDY5LCA3NiwgNzAsIDEyOCwgNzksIDc4LCA2OSwgNDUsIDg3LCA2NSwgMjE3LCA3OSwgNzgsIDY5LCAKKyAgICA0NSwgODQsIDcyLCA3MywgODIsIDg0LCA4OSwgMTI4LCA3OSwgNzgsIDY5LCA0NSwgNzYsIDczLCA3OCwgMTk3LCA3OSwgNzgsIAorICAgIDY3LCA3OSwgNzcsIDczLCA3OCwgMTk5LCA3OSwgNzgsIDY1LCA4MCwgMTI4LCA3OSwgNzcsIDczLCA4MywgODMsIDczLCA3OSwgCisgICAgMjA2LCA3OSwgNzcsIDczLCA2NywgODIsIDc5LCA3OCwgMTI4LCA3OSwgNzcsIDczLCA2NywgODIsIDc5LCAyMDYsIDc5LCAKKyAgICA3NywgNjksIDcxLCA2NSwgMTI4LCA3OSwgNzcsIDY5LCA3MSwgMTkzLCA3OSwgNzcsIDY1LCA3NiwgNzksIDc4LCAxMjgsIAorICAgIDc5LCA3NiwgNzMsIDg2LCA2OSwgMTI4LCA3OSwgNzYsIDczLCA3MSwgNzksIDIwNiwgNzksIDc2LCA2OCwgMTI4LCA3OSwgCisgICAgNzUsIDg0LCAyMDcsIDc5LCA3NSwgNjUsIDgyLCA2NSwgMTI4LCA3OSwgNzUsIDY1LCA4MiwgMTkzLCA3OSwgNzQsIDczLCAKKyAgICA2NiwgODcsIDY1LCAyMTcsIDc5LCA3NCwgNjksIDc5LCA3OCwgMTI4LCA3OSwgNzMsIDc2LCAxMjgsIDc5LCA3MiwgNzcsIAorICAgIDEyOCwgNzksIDcyLCAyMDUsIDc5LCA3MSwgODIsIDY5LCAxMjgsIDc5LCA3MSwgNzksIDc4LCA2OSwgNzUsIDEyOCwgNzksIAorICAgIDcxLCA3OSwgNzgsIDY5LCAyMDMsIDc5LCA3MSwgNzIsIDY1LCAyMDUsIDc5LCA3MCwgNzAsIDczLCA2NywgNjksIDgyLCAKKyAgICAxMjgsIDc5LCA3MCwgNzAsIDczLCA2NywgNjksIDEyOCwgNzksIDcwLCA3MCwgNzMsIDY3LCAxOTcsIDc5LCA3MCwgNzAsIAorICAgIDEyOCwgNzksIDY5LCA4OSwgMTI4LCA3OSwgNjksIDc1LCAxMjgsIDc5LCA2OCwgNjksIDc4LCAxMjgsIDc5LCA2OCwgMTk2LCAKKyAgICA3OSwgNjcsIDg0LCA3OSwgODAsIDg1LCA4MywgMTI4LCA3OSwgNjcsIDg0LCA3OSwgNjYsIDY5LCA4MiwgMTI4LCA3OSwgNjcsIAorICAgIDg0LCA2OSwgMjEyLCA3OSwgNjcsIDIxMCwgNzksIDY3LCA3NiwgNzksIDY3LCA3NSwgMTI4LCA3OSwgNjcsIDY3LCA3NiwgCisgICAgODUsIDgzLCA3MywgNzksIDc4LCAxMjgsIDc5LCA2NiwgODMsIDg0LCA4MiwgODUsIDY3LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCAKKyAgICA3OSwgNjYsIDc5LCA3NiwgMjExLCA3OSwgNjYsIDc5LCAyMDQsIDc5LCA2NiwgNzksIDcwLCA3MywgNzYsIDczLCAxMjgsIAorICAgIDc5LCA2NiwgNzYsIDczLCA4MSwgODUsIDE5NywgNzksIDY2LCA3NCwgNjksIDY3LCAyMTIsIDc5LCA2NiwgNjksIDc2LCA4NSwgCisgICAgODMsIDEyOCwgNzksIDY2LCA2OSwgNzYsIDc5LCA4MywgMTI4LCA3OSwgNjYsIDEyOCwgNzksIDY1LCA4OSwgMTI4LCA3OSwgCisgICAgNjUsIDc1LCAxMjgsIDc5LCA2NSwgNjYsIDc5LCA2NSwgNzAsIDczLCA3NiwgNzMsIDEyOCwgNzksIDE5MywgNzksIDQ4LCAKKyAgICA1MywgNDksIDEyOCwgNzksIDQ4LCA1MywgNDgsIDY2LCAxMjgsIDc5LCA0OCwgNTMsIDQ4LCA2NSwgMTI4LCA3OSwgNDgsIAorICAgIDUzLCA0OCwgMTI4LCA3OSwgNDgsIDUyLCA1NywgMTI4LCA3OSwgNDgsIDUyLCA1NiwgMTI4LCA3OSwgNDgsIDUyLCA1NSwgCisgICAgMTI4LCA3OSwgNDgsIDUyLCA1NCwgMTI4LCA3OSwgNDgsIDUyLCA1MywgMTI4LCA3OSwgNDgsIDUyLCA1MiwgMTI4LCA3OSwgCisgICAgNDgsIDUyLCA1MSwgMTI4LCA3OSwgNDgsIDUyLCA1MCwgMTI4LCA3OSwgNDgsIDUyLCA0OSwgMTI4LCA3OSwgNDgsIDUyLCAKKyAgICA0OCwgMTI4LCA3OSwgNDgsIDUxLCA1NywgMTI4LCA3OSwgNDgsIDUxLCA1NiwgMTI4LCA3OSwgNDgsIDUxLCA1NSwgMTI4LCAKKyAgICA3OSwgNDgsIDUxLCA1NCwgNjgsIDEyOCwgNzksIDQ4LCA1MSwgNTQsIDY3LCAxMjgsIDc5LCA0OCwgNTEsIDU0LCA2NiwgCisgICAgMTI4LCA3OSwgNDgsIDUxLCA1NCwgNjUsIDEyOCwgNzksIDQ4LCA1MSwgNTQsIDEyOCwgNzksIDQ4LCA1MSwgNTMsIDEyOCwgCisgICAgNzksIDQ4LCA1MSwgNTIsIDEyOCwgNzksIDQ4LCA1MSwgNTEsIDY1LCAxMjgsIDc5LCA0OCwgNTEsIDUxLCAxMjgsIDc5LCAKKyAgICA0OCwgNTEsIDUwLCAxMjgsIDc5LCA0OCwgNTEsIDQ5LCAxMjgsIDc5LCA0OCwgNTEsIDQ4LCA2NSwgMTI4LCA3OSwgNDgsIAorICAgIDUxLCA0OCwgMTI4LCA3OSwgNDgsIDUwLCA1NywgNjUsIDEyOCwgNzksIDQ4LCA1MCwgNTcsIDEyOCwgNzksIDQ4LCA1MCwgCisgICAgNTYsIDEyOCwgNzksIDQ4LCA1MCwgNTUsIDEyOCwgNzksIDQ4LCA1MCwgNTQsIDEyOCwgNzksIDQ4LCA1MCwgNTMsIDY1LCAKKyAgICAxMjgsIDc5LCA0OCwgNTAsIDUzLCAxMjgsIDc5LCA0OCwgNTAsIDUyLCA2NSwgMTI4LCA3OSwgNDgsIDUwLCA1MiwgMTI4LCAKKyAgICA3OSwgNDgsIDUwLCA1MSwgMTI4LCA3OSwgNDgsIDUwLCA1MCwgMTI4LCA3OSwgNDgsIDUwLCA0OSwgMTI4LCA3OSwgNDgsIAorICAgIDUwLCA0OCwgNjUsIDEyOCwgNzksIDQ4LCA1MCwgNDgsIDEyOCwgNzksIDQ4LCA0OSwgNTcsIDY1LCAxMjgsIDc5LCA0OCwgCisgICAgNDksIDU3LCAxMjgsIDc5LCA0OCwgNDksIDU2LCAxMjgsIDc5LCA0OCwgNDksIDU1LCAxMjgsIDc5LCA0OCwgNDksIDU0LCAKKyAgICAxMjgsIDc5LCA0OCwgNDksIDUzLCAxMjgsIDc5LCA0OCwgNDksIDUyLCAxMjgsIDc5LCA0OCwgNDksIDUxLCAxMjgsIDc5LCAKKyAgICA0OCwgNDksIDUwLCAxMjgsIDc5LCA0OCwgNDksIDQ5LCAxMjgsIDc5LCA0OCwgNDksIDQ4LCA2NywgMTI4LCA3OSwgNDgsIAorICAgIDQ5LCA0OCwgNjYsIDEyOCwgNzksIDQ4LCA0OSwgNDgsIDY1LCAxMjgsIDc5LCA0OCwgNDksIDQ4LCAxMjgsIDc5LCA0OCwgCisgICAgNDgsIDU3LCAxMjgsIDc5LCA0OCwgNDgsIDU2LCAxMjgsIDc5LCA0OCwgNDgsIDU1LCAxMjgsIDc5LCA0OCwgNDgsIDU0LCAKKyAgICA3MCwgMTI4LCA3OSwgNDgsIDQ4LCA1NCwgNjksIDEyOCwgNzksIDQ4LCA0OCwgNTQsIDY4LCAxMjgsIDc5LCA0OCwgNDgsIAorICAgIDU0LCA2NywgMTI4LCA3OSwgNDgsIDQ4LCA1NCwgNjYsIDEyOCwgNzksIDQ4LCA0OCwgNTQsIDY1LCAxMjgsIDc5LCA0OCwgCisgICAgNDgsIDU0LCAxMjgsIDc5LCA0OCwgNDgsIDUzLCA2NSwgMTI4LCA3OSwgNDgsIDQ4LCA1MywgMTI4LCA3OSwgNDgsIDQ4LCAKKyAgICA1MiwgMTI4LCA3OSwgNDgsIDQ4LCA1MSwgMTI4LCA3OSwgNDgsIDQ4LCA1MCwgMTI4LCA3OSwgNDgsIDQ4LCA0OSwgNjUsIAorICAgIDEyOCwgNzksIDQ4LCA0OCwgNDksIDEyOCwgNzksIDQ1LCA4OSwgNjksIDEyOCwgNzksIDQ1LCA3OSwgNDUsIDczLCAxMjgsIAorICAgIDc5LCA0NSwgNjksIDEyOCwgNzgsIDkwLCA4OSwgODgsIDEyOCwgNzgsIDkwLCA4OSwgODQsIDEyOCwgNzgsIDkwLCA4OSwgCisgICAgODIsIDg4LCAxMjgsIDc4LCA5MCwgODksIDgyLCAxMjgsIDc4LCA5MCwgODksIDgwLCAxMjgsIDc4LCA5MCwgODksIDEyOCwgCisgICAgNzgsIDkwLCA4NSwgODgsIDEyOCwgNzgsIDkwLCA4NSwgODIsIDg4LCAxMjgsIDc4LCA5MCwgODUsIDgyLCAxMjgsIDc4LCAKKyAgICA5MCwgODUsIDgxLCAxMjgsIDc4LCA5MCwgODUsIDgwLCAxMjgsIDc4LCA5MCwgODUsIDc5LCA4OCwgMTI4LCA3OCwgOTAsIAorICAgIDg1LCA3OSwgMTI4LCA3OCwgOTAsIDg1LCAyMDYsIDc4LCA5MCwgODUsIDEyOCwgNzgsIDkwLCA3OSwgODgsIDEyOCwgNzgsIAorICAgIDkwLCA3OSwgODAsIDEyOCwgNzgsIDkwLCA3MywgODgsIDEyOCwgNzgsIDkwLCA3MywgODQsIDEyOCwgNzgsIDkwLCA3MywgCisgICAgODAsIDEyOCwgNzgsIDkwLCA3MywgNjksIDg4LCAxMjgsIDc4LCA5MCwgNzMsIDY5LCA4MCwgMTI4LCA3OCwgOTAsIDczLCAKKyAgICA2OSwgMTI4LCA3OCwgOTAsIDczLCAxMjgsIDc4LCA5MCwgNjksIDg4LCAxMjgsIDc4LCA5MCwgNjksIDg1LCA3NywgMTI4LCAKKyAgICA3OCwgOTAsIDY5LCAxMjgsIDc4LCA5MCwgNjUsIDg4LCAxMjgsIDc4LCA5MCwgNjUsIDg0LCAxMjgsIDc4LCA5MCwgNjUsIAorICAgIDgxLCAxMjgsIDc4LCA5MCwgNjUsIDgwLCAxMjgsIDc4LCA5MCwgNjUsIDEyOCwgNzgsIDkwLCAxOTMsIDc4LCA4OSwgODcsIAorICAgIDY1LCAxMjgsIDc4LCA4OSwgODUsIDg4LCAxMjgsIDc4LCA4OSwgODUsIDg1LCAxMjgsIDc4LCA4OSwgODUsIDg0LCAxMjgsIAorICAgIDc4LCA4OSwgODUsIDgwLCAxMjgsIDc4LCA4OSwgODUsIDc5LCA4OCwgMTI4LCA3OCwgODksIDg1LCA3OSwgODAsIDEyOCwgCisgICAgNzgsIDg5LCA4NSwgNzksIDEyOCwgNzgsIDg5LCA4NSwgNjksIDEyOCwgNzgsIDg5LCA4NSwgMTI4LCA3OCwgODksIDc5LCAKKyAgICA4OCwgMTI4LCA3OCwgODksIDc5LCA4NCwgMTI4LCA3OCwgODksIDc5LCA4MCwgMTI4LCA3OCwgODksIDc5LCA3OSwgMTI4LCAKKyAgICA3OCwgODksIDc5LCA2NSwgMTI4LCA3OCwgODksIDc5LCAxMjgsIDc4LCA4OSwgNzQsIDY1LCAxMjgsIDc4LCA4OSwgNzMsIAorICAgIDg4LCAxMjgsIDc4LCA4OSwgNzMsIDg0LCAxMjgsIDc4LCA4OSwgNzMsIDIxMiwgNzgsIDg5LCA3MywgMjExLCA3OCwgODksIAorICAgIDczLCAyMTAsIDc4LCA4OSwgNzMsIDgwLCAxMjgsIDc4LCA4OSwgNzMsIDc4LCA0NSwgNjgsIDc5LCAxMjgsIDc4LCA4OSwgCisgICAgNzMsIDczLCAxMjgsIDc4LCA4OSwgNzMsIDY5LCA4OCwgMTI4LCA3OCwgODksIDczLCA2OSwgODQsIDEyOCwgNzgsIDg5LCAKKyAgICA3MywgNjksIDgwLCAxMjgsIDc4LCA4OSwgNzMsIDY5LCAxMjgsIDc4LCA4OSwgNzMsIDEyOCwgNzgsIDg5LCAyMDEsIDc4LCAKKyAgICA4OSwgNzIsIDY1LCAxMjgsIDc4LCA4OSwgNjksIDg0LCAxMjgsIDc4LCA4OSwgNjksIDIxMiwgNzgsIDg5LCA2OSwgNzIsIAorICAgIDEyOCwgNzgsIDg5LCA2OSwgMjAwLCA3OCwgODksIDY5LCA2OSwgMTI4LCA3OCwgODksIDY5LCAxMjgsIDc4LCA4OSwgMTk2LCAKKyAgICA3OCwgODksIDY3LCA2NSwgMTI4LCA3OCwgODksIDY1LCA4NSwgMTI4LCA3OCwgODksIDY1LCA3MywgMTI4LCA3OCwgODksIAorICAgIDY1LCA3MiwgMTI4LCA3OCwgODksIDY1LCA2OSwgNzcsIDY1LCA2OSwgMTI4LCA3OCwgODksIDY1LCA2NSwgMTI4LCA3OCwgCisgICAgODcsIDc5LCA3OSwgMTI4LCA3OCwgODcsIDc5LCAxMjgsIDc4LCA4NywgNzMsIDczLCAxMjgsIDc4LCA4NywgNzMsIDEyOCwgCisgICAgNzgsIDg3LCA2OSwgMTI4LCA3OCwgODcsIDY1LCA2NSwgMTI4LCA3OCwgODcsIDY1LCAxMjgsIDc4LCA4NywgMTI4LCA3OCwgCisgICAgODYsIDEyOCwgNzgsIDg1LCA4OCwgMTI4LCA3OCwgODUsIDg1LCA3OCwgMTI4LCA3OCwgODUsIDg1LCAxMjgsIDc4LCA4NSwgCisgICAgODQsIDczLCA3NiwgNzYsIDg1LCAxMjgsIDc4LCA4NSwgODQsIDEyOCwgNzgsIDg1LCAyMTIsIDc4LCA4NSwgODIsIDg4LCAKKyAgICAxMjgsIDc4LCA4NSwgODIsIDEyOCwgNzgsIDg1LCA4MCwgMTI4LCA3OCwgODUsIDc5LCA4OCwgMTI4LCA3OCwgODUsIDc5LCAKKyAgICA4MCwgMTI4LCA3OCwgODUsIDc5LCAxMjgsIDc4LCA4NSwgNzgsIDg1LCA5MCwgMTI4LCA3OCwgODUsIDc4LCA4NSwgMjE4LCAKKyAgICA3OCwgODUsIDc4LCA3MSwgMTI4LCA3OCwgODUsIDc4LCA2NSwgODYsIDg1LCAyMTIsIDc4LCA4NSwgNzgsIDY1LCA4NiwgNzMsIAorICAgIDIwMywgNzgsIDg1LCA3OCwgMTI4LCA3OCwgODUsIDIwNiwgNzgsIDg1LCA3NywgNjksIDgyLCAyMDcsIDc4LCA4NSwgNzcsIAorICAgIDY5LCA4MiwgNjUsIDg0LCA3OSwgMjEwLCA3OCwgODUsIDc3LCA2OSwgODIsIDY1LCAyMDQsIDc4LCA4NSwgNzcsIDY2LCA2OSwgCisgICAgODIsIDgzLCAxMjgsIDc4LCA4NSwgNzcsIDY2LCA2OSwgODIsIDEyOCwgNzgsIDg1LCA3NywgMTI4LCA3OCwgODUsIDc2LCAKKyAgICA3NiwgMTI4LCA3OCwgODUsIDc2LCAyMDQsIDc4LCA4NSwgNzYsIDEyOCwgNzgsIDg1LCA3NSwgODQsIDY1LCAxMjgsIDc4LCAKKyAgICA4NSwgNjksIDc4LCA3MSwgMTI4LCA3OCwgODUsIDY5LCAxMjgsIDc4LCA4NSwgNjYsIDczLCA2NSwgMjA2LCA3OCwgODUsIAorICAgIDY1LCA2OSwgMTI4LCA3OCwgODUsIDQ5LCA0OSwgMTI4LCA3OCwgODUsIDQ5LCAxNzcsIDc4LCA4NSwgNDgsIDUwLCA1MCwgCisgICAgNjUsIDEyOCwgNzgsIDg1LCA0OCwgNTAsIDUwLCAxMjgsIDc4LCA4NSwgNDgsIDUwLCA0OSwgMTI4LCA3OCwgODUsIDQ4LCAKKyAgICA1MCwgNDgsIDEyOCwgNzgsIDg1LCA0OCwgNDksIDU3LCAxMjgsIDc4LCA4NSwgNDgsIDQ5LCA1NiwgNjUsIDEyOCwgNzgsIAorICAgIDg1LCA0OCwgNDksIDU2LCAxMjgsIDc4LCA4NSwgNDgsIDQ5LCA1NSwgMTI4LCA3OCwgODUsIDQ4LCA0OSwgNTQsIDEyOCwgCisgICAgNzgsIDg1LCA0OCwgNDksIDUzLCAxMjgsIDc4LCA4NSwgNDgsIDQ5LCA1MiwgMTI4LCA3OCwgODUsIDQ4LCA0OSwgNTEsIAorICAgIDEyOCwgNzgsIDg1LCA0OCwgNDksIDUwLCAxMjgsIDc4LCA4NSwgNDgsIDQ5LCA0OSwgNjUsIDEyOCwgNzgsIDg1LCA0OCwgCisgICAgNDksIDQ5LCAxMjgsIDc4LCA4NSwgNDgsIDQ5LCA0OCwgNjUsIDEyOCwgNzgsIDg1LCA0OCwgNDksIDQ4LCAxMjgsIDc4LCAKKyAgICA4NSwgNDgsIDQ4LCA1NywgMTI4LCA3OCwgODUsIDQ4LCA0OCwgNTYsIDEyOCwgNzgsIDg1LCA0OCwgNDgsIDU1LCAxMjgsIAorICAgIDc4LCA4NSwgNDgsIDQ4LCA1NCwgMTI4LCA3OCwgODUsIDQ4LCA0OCwgNTMsIDEyOCwgNzgsIDg1LCA0OCwgNDgsIDUyLCAKKyAgICAxMjgsIDc4LCA4NSwgNDgsIDQ4LCA1MSwgMTI4LCA3OCwgODUsIDQ4LCA0OCwgNTAsIDEyOCwgNzgsIDg1LCA0OCwgNDgsIAorICAgIDQ5LCAxMjgsIDc4LCA4NCwgODUsIDg1LCAxMjgsIDc4LCA4NCwgODUsIDc3LCAxMjgsIDc4LCA4NCwgMjEzLCA3OCwgODQsIAorICAgIDc5LCA4MSwgODAsIDY5LCA3OCwgMTI4LCA3OCwgODQsIDczLCA2OSwgMTk3LCA3OCwgODQsIDY5LCA4NSwgNzgsIDcxLCA2NiwgCisgICAgNjUsIDEyOCwgNzgsIDg0LCA2OSwgODUsIDc3LCAxMjgsIDc4LCA4NCwgNjksIDc4LCAxMjgsIDc4LCA4NCwgNjksIDY5LCAKKyAgICAxMjgsIDc4LCA4NCwgNjUsIDgwLCAxMjgsIDc4LCA4NCwgNjUsIDIwOCwgNzgsIDg0LCA2NSwgNjUsIDEyOCwgNzgsIDgzLCAKKyAgICA4NSwgNzksIDIxMiwgNzgsIDgzLCA4NSwgNzgsIDEyOCwgNzgsIDgzLCA4NSwgNzcsIDEyOCwgNzgsIDgzLCA3OSwgNzcsIAorICAgIDEyOCwgNzgsIDgzLCA3MywgNjksIDY5LCA4NCwgMTI4LCA3OCwgODMsIDczLCA2OSwgNjksIDgwLCAxMjgsIDc4LCA4MywgCisgICAgNzMsIDY5LCA2OSwgMTI4LCA3OCwgODMsIDcyLCA4NSwgODQsIDEyOCwgNzgsIDgzLCA3MiwgODUsIDIxMiwgNzgsIDgzLCAKKyAgICA3MiwgODUsIDc5LCA4MCwgMTI4LCA3OCwgODMsIDcyLCA4NSwgNjksIDEyOCwgNzgsIDgzLCA3MiwgNzMsIDY5LCA2OSwgCisgICAgMTI4LCA3OCwgODMsIDcyLCA2OSwgNjksIDEyOCwgNzgsIDgzLCA3MiwgNjUsIDgxLCAxMjgsIDc4LCA4MywgNzIsIDY1LCAKKyAgICAxMjgsIDc4LCA4MywgNjksIDg1LCA2NSwgNjksIDc4LCAxMjgsIDc4LCA4MywgNjksIDc4LCAxMjgsIDc4LCA4MywgNjUsIAorICAgIDEyOCwgNzgsIDgyLCA4OSwgODgsIDEyOCwgNzgsIDgyLCA4OSwgODQsIDEyOCwgNzgsIDgyLCA4OSwgODIsIDg4LCAxMjgsIAorICAgIDc4LCA4MiwgODksIDgyLCAxMjgsIDc4LCA4MiwgODksIDgwLCAxMjgsIDc4LCA4MiwgODksIDEyOCwgNzgsIDgyLCA4NSwgCisgICAgODgsIDEyOCwgNzgsIDgyLCA4NSwgODQsIDEyOCwgNzgsIDgyLCA4NSwgODIsIDg4LCAxMjgsIDc4LCA4MiwgODUsIDgyLCAKKyAgICAxMjgsIDc4LCA4MiwgODUsIDgwLCAxMjgsIDc4LCA4MiwgODUsIDEyOCwgNzgsIDgyLCA3OSwgODgsIDEyOCwgNzgsIDgyLCAKKyAgICA3OSwgODAsIDEyOCwgNzgsIDgyLCA3OSwgMTI4LCA3OCwgODIsIDY5LCA4OCwgMTI4LCA3OCwgODIsIDY5LCA4NCwgMTI4LCAKKyAgICA3OCwgODIsIDY5LCA4MCwgMTI4LCA3OCwgODIsIDY5LCAxMjgsIDc4LCA4MiwgNjUsIDg4LCAxMjgsIDc4LCA4MiwgNjUsIAorICAgIDg0LCAxMjgsIDc4LCA4MiwgNjUsIDgwLCAxMjgsIDc4LCA4MiwgNjUsIDEyOCwgNzgsIDc5LCA4OSwgMTI4LCA3OCwgNzksIAorICAgIDg4LCAxMjgsIDc4LCA3OSwgODYsIDY5LCA3NywgNjYsIDY5LCA4MiwgMTI4LCA3OCwgNzksIDg0LCA4NCwgNzksIDEyOCwgCisgICAgNzgsIDc5LCA4NCwgNjksIDgzLCAxMjgsIDc4LCA3OSwgODQsIDY5LCA3MiwgNjksIDY1LCA2OCwgMTI4LCA3OCwgNzksIDg0LCAKKyAgICA2OSwgNzIsIDY5LCA2NSwgMTk2LCA3OCwgNzksIDg0LCA2OSwgNjYsIDc5LCA3OSwgNzUsIDEyOCwgNzgsIDc5LCA4NCwgNjksIAorICAgIDY2LCA3OSwgNzksIDIwMywgNzgsIDc5LCA4NCwgNjksIDEyOCwgNzgsIDc5LCA4NCwgMTk3LCA3OCwgNzksIDg0LCA2NywgCisgICAgNzIsIDY5LCAxOTYsIDc4LCA3OSwgODQsIDY3LCA3MiwgMTI4LCA3OCwgNzksIDg0LCAxMjgsIDc4LCA3OSwgMjEyLCA3OCwgCisgICAgNzksIDgzLCA2OSwgMTI4LCA3OCwgNzksIDgyLCA4NCwgNzIsIDg3LCA2OSwgODMsIDIxMiwgNzgsIDc5LCA4MiwgODQsIDcyLCAKKyAgICA2OSwgODIsIDIwNiwgNzgsIDc5LCA4MiwgODQsIDIwMCwgNzgsIDc5LCA4MiwgNzcsIDY1LCAyMDQsIDc4LCA3OSwgMjEwLCAKKyAgICA3OCwgNzksIDgwLCAxMjgsIDc4LCA3OSwgNzksIDc4LCA4NSwgMTI4LCA3OCwgNzksIDc5LCAxMjgsIDc4LCA3OSwgNzgsIAorICAgIDcwLCA3OSwgODIsIDc1LCA3MywgNzgsIDcxLCAxMjgsIDc4LCA3OSwgNzgsIDQ1LCA4MCwgNzksIDg0LCA2NSwgNjYsIDc2LCAKKyAgICAxOTcsIDc4LCA3OSwgNzgsIDQ1LCA3NCwgNzksIDczLCA3OCwgNjksIDgyLCAxMjgsIDc4LCA3OSwgNzgsIDQ1LCA2NiwgODIsIAorICAgIDY5LCA2NSwgNzUsIDczLCA3OCwgMTk5LCA3OCwgNzksIDc3LCA3MywgNzgsIDY1LCAyMDQsIDc4LCA3OSwgNzUsIDcyLCA4NSwgCisgICAgNzUsIDEyOCwgNzgsIDc5LCA2OCwgNjksIDEyOCwgNzgsIDc5LCA2NSwgMTI4LCA3OCwgNzksIDQ1LCA2NiwgODIsIDY5LCAKKyAgICA2NSwgMjAzLCA3OCwgNzgsIDg1LCA4NSwgMTI4LCA3OCwgNzgsIDg1LCAxMjgsIDc4LCA3OCwgNzksIDc5LCAxMjgsIDc4LCAKKyAgICA3OCwgNzksIDEyOCwgNzgsIDc4LCA3OCwgODUsIDg1LCAxMjgsIDc4LCA3OCwgNzgsIDg1LCAxMjgsIDc4LCA3OCwgNzgsIAorICAgIDc5LCA3OSwgMTI4LCA3OCwgNzgsIDc4LCA3OSwgMTI4LCA3OCwgNzgsIDc4LCA3MywgNzMsIDEyOCwgNzgsIDc4LCA3OCwgCisgICAgNzMsIDEyOCwgNzgsIDc4LCA3OCwgNjksIDY5LCAxMjgsIDc4LCA3OCwgNzgsIDY5LCAxMjgsIDc4LCA3OCwgNzgsIDY1LCAKKyAgICA4NSwgMTI4LCA3OCwgNzgsIDc4LCA2NSwgNzMsIDEyOCwgNzgsIDc4LCA3OCwgNjUsIDY1LCAxMjgsIDc4LCA3OCwgNzgsIAorICAgIDY1LCAxMjgsIDc4LCA3OCwgNzgsIDEyOCwgNzgsIDc4LCA3MiwgNjUsIDEyOCwgNzgsIDc4LCA3MSwgNzksIDc5LCAxMjgsIAorICAgIDc4LCA3OCwgNzEsIDc5LCAxMjgsIDc4LCA3OCwgNzEsIDczLCA3MywgMTI4LCA3OCwgNzgsIDcxLCA3MywgMTI4LCA3OCwgCisgICAgNzgsIDcxLCA2NSwgNjUsIDEyOCwgNzgsIDc4LCA3MSwgNjUsIDEyOCwgNzgsIDc4LCA3MSwgMTI4LCA3OCwgNzgsIDY2LCAKKyAgICA4MywgODAsIDEyOCwgNzgsIDc3LCAxMjgsIDc4LCA3NiwgNDgsIDUwLCA0OCwgMTI4LCA3OCwgNzYsIDQ4LCA0OSwgNTcsIAorICAgIDEyOCwgNzgsIDc2LCA0OCwgNDksIDU2LCAxMjgsIDc4LCA3NiwgNDgsIDQ5LCA1NSwgNjUsIDEyOCwgNzgsIDc2LCA0OCwgCisgICAgNDksIDU1LCAxMjgsIDc4LCA3NiwgNDgsIDQ5LCA1NCwgMTI4LCA3OCwgNzYsIDQ4LCA0OSwgNTMsIDEyOCwgNzgsIDc2LCAKKyAgICA0OCwgNDksIDUyLCAxMjgsIDc4LCA3NiwgNDgsIDQ5LCA1MSwgMTI4LCA3OCwgNzYsIDQ4LCA0OSwgNTAsIDEyOCwgNzgsIAorICAgIDc2LCA0OCwgNDksIDQ5LCAxMjgsIDc4LCA3NiwgNDgsIDQ5LCA0OCwgMTI4LCA3OCwgNzYsIDQ4LCA0OCwgNTcsIDEyOCwgCisgICAgNzgsIDc2LCA0OCwgNDgsIDU2LCAxMjgsIDc4LCA3NiwgNDgsIDQ4LCA1NSwgMTI4LCA3OCwgNzYsIDQ4LCA0OCwgNTQsIAorICAgIDEyOCwgNzgsIDc2LCA0OCwgNDgsIDUzLCA2NSwgMTI4LCA3OCwgNzYsIDQ4LCA0OCwgNTMsIDEyOCwgNzgsIDc2LCA0OCwgCisgICAgNDgsIDUyLCAxMjgsIDc4LCA3NiwgNDgsIDQ4LCA1MSwgMTI4LCA3OCwgNzYsIDQ4LCA0OCwgNTAsIDEyOCwgNzgsIDc2LCAKKyAgICA0OCwgNDgsIDQ5LCAxMjgsIDc4LCA3NiwgMTI4LCA3OCwgNzUsIDc5LCA3NywgMTI4LCA3OCwgNzUsIDIwNywgNzgsIDc1LCAKKyAgICA3MywgNzgsIDY4LCA3MywgMTI4LCA3OCwgNzUsIDY1LCA2NSwgODIsIDY1LCA2OSwgMTI4LCA3OCwgNzQsIDg5LCA4OCwgCisgICAgMTI4LCA3OCwgNzQsIDg5LCA4NCwgMTI4LCA3OCwgNzQsIDg5LCA4MiwgODgsIDEyOCwgNzgsIDc0LCA4OSwgODIsIDEyOCwgCisgICAgNzgsIDc0LCA4OSwgODAsIDEyOCwgNzgsIDc0LCA4OSwgMTI4LCA3OCwgNzQsIDg1LCA4OCwgMTI4LCA3OCwgNzQsIDg1LCAKKyAgICA4MiwgODgsIDEyOCwgNzgsIDc0LCA4NSwgODIsIDEyOCwgNzgsIDc0LCA4NSwgODEsIDY1LCAxMjgsIDc4LCA3NCwgODUsIAorICAgIDgwLCAxMjgsIDc4LCA3NCwgODUsIDc5LCA4OCwgMTI4LCA3OCwgNzQsIDg1LCA3OSwgMTI4LCA3OCwgNzQsIDg1LCA2OSwgCisgICAgODEsIDEyOCwgNzgsIDc0LCA4NSwgNjUsIDY5LCAxMjgsIDc4LCA3NCwgODUsIDEyOCwgNzgsIDc0LCA3OSwgODgsIDEyOCwgCisgICAgNzgsIDc0LCA3OSwgODQsIDEyOCwgNzgsIDc0LCA3OSwgODAsIDEyOCwgNzgsIDc0LCA3OSwgNzksIDEyOCwgNzgsIDc0LCAKKyAgICA3OSwgMTI4LCA3OCwgNzQsIDczLCA4OCwgMTI4LCA3OCwgNzQsIDczLCA4NCwgMTI4LCA3OCwgNzQsIDczLCA4MCwgMTI4LCAKKyAgICA3OCwgNzQsIDczLCA2OSwgODgsIDEyOCwgNzgsIDc0LCA3MywgNjksIDg0LCAxMjgsIDc4LCA3NCwgNzMsIDY5LCA4MCwgCisgICAgMTI4LCA3OCwgNzQsIDczLCA2OSwgNjksIDEyOCwgNzgsIDc0LCA3MywgNjksIDEyOCwgNzgsIDc0LCA3MywgMTI4LCA3OCwgCisgICAgNzQsIDIwMSwgNzgsIDc0LCA2OSwgODUsIDg4LCAxMjgsIDc4LCA3NCwgNjksIDg1LCA4NCwgMTI4LCA3OCwgNzQsIDY5LCAKKyAgICA4NSwgNjUsIDY5LCA3OCwgNjUsIDEyOCwgNzgsIDc0LCA2OSwgODUsIDY1LCA2OSwgNzcsIDEyOCwgNzgsIDc0LCA2OSwgNjksIAorICAgIDY5LCA2OSwgMTI4LCA3OCwgNzQsIDY5LCA2OSwgMTI4LCA3OCwgNzQsIDY5LCAxOTcsIDc4LCA3NCwgNjksIDEyOCwgNzgsIAorICAgIDc0LCA2NSwgODEsIDEyOCwgNzgsIDc0LCA2NSwgODAsIDEyOCwgNzgsIDc0LCA2NSwgNjksIDc3LCA3NiwgNzMsIDEyOCwgCisgICAgNzgsIDc0LCA2NSwgNjksIDc3LCAxMjgsIDc4LCA3NCwgNjUsIDY1LCAxMjgsIDc4LCA3MywgODgsIDEyOCwgNzgsIDczLCAKKyAgICA4NCwgODIsIDY5LCAxMjgsIDc4LCA3MywgODMsIDY1LCA3MSwgMTI4LCA3OCwgNzMsIDgyLCA4NSwgNzEsIDg1LCAxMjgsIAorICAgIDc4LCA3MywgODAsIDEyOCwgNzgsIDczLCA3OCwgODQsIDcyLCAxMjgsIDc4LCA3MywgNzgsIDY5LCA4NCwgODksIDEyOCwgCisgICAgNzgsIDczLCA3OCwgNjksIDg0LCAyMTcsIDc4LCA3MywgNzgsIDY5LCA4NCwgNjksIDY5LCA3OCwgMTI4LCA3OCwgNzMsIDc4LCAKKyAgICA2OSwgODQsIDY5LCA2OSwgMjA2LCA3OCwgNzMsIDc4LCA2OSwgNDUsIDg0LCA3MiwgNzMsIDgyLCA4NCwgODksIDEyOCwgNzgsIAorICAgIDczLCA3OCwgMTk3LCA3OCwgNzMsIDc4LCA2OCwgNjUsIDUwLCAxMjgsIDc4LCA3MywgNzgsIDY4LCA2NSwgMTc4LCA3OCwgCisgICAgNzMsIDc3LCAxMjgsIDc4LCA3MywgMjA1LCA3OCwgNzMsIDc1LCA3MiwgNjUsIDcyLCA3MywgODQsIDEyOCwgNzgsIDczLCAKKyAgICA3NSwgNjUsIDcyLCA3MywgODQsIDEyOCwgNzgsIDczLCA3NSwgNjUsIDEyOCwgNzgsIDczLCA3MiwgODMsIDcyLCA4NiwgNjUsIAorICAgIDgzLCA2NSwgMTI4LCA3OCwgNzMsIDcxLCA3MywgNjgsIDY1LCA3NywgNzMsIDc4LCAxMjgsIDc4LCA3MywgNzEsIDczLCA2OCwgCisgICAgNjUsIDY5LCA4MywgNzIsIDEyOCwgNzgsIDczLCA3MSwgNzIsIDg0LCAxMjgsIDc4LCA3MywgNzEsIDcyLCAyMTIsIDc4LCAKKyAgICA3MywgNzEsIDcxLCA2NSwgNzIsIDczLCA4NCwgNjUsIDEyOCwgNzgsIDczLCA2OSwgODgsIDEyOCwgNzgsIDczLCA2OSwgODUsIAorICAgIDc4LCA0NSwgODQsIDczLCA3NSwgNjksIDg1LCA4NCwgMTI4LCA3OCwgNzMsIDY5LCA4NSwgNzgsIDQ1LCA4NCwgNzIsIDczLCAKKyAgICA2OSwgODUsIDg0LCA3MiwgMTI4LCA3OCwgNzMsIDY5LCA4NSwgNzgsIDQ1LCA4MywgNzMsIDc5LCA4MywgMTI4LCA3OCwgNzMsIAorICAgIDY5LCA4NSwgNzgsIDQ1LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDEyOCwgNzgsIDczLCA2OSwgODUsIDc4LCA0NSwgODAsIDczLCAKKyAgICA2OSwgODUsIDgwLCAxMjgsIDc4LCA3MywgNjksIDg1LCA3OCwgNDUsIDgwLCA2NSwgNzgsIDgzLCA3MywgNzksIDgzLCAxMjgsIAorICAgIDc4LCA3MywgNjksIDg1LCA3OCwgNDUsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDEyOCwgNzgsIDczLCA2OSwgODUsIDc4LCAKKyAgICA0NSwgNzIsIDczLCA2OSwgODUsIDcyLCAxMjgsIDc4LCA3MywgNjksIDg1LCA3OCwgNDUsIDY3LCA3MywgNjksIDg1LCA2NywgCisgICAgMTI4LCA3OCwgNzMsIDY5LCA4NSwgNzgsIDQ1LCA2NywgNzIsIDczLCA2OSwgODUsIDY3LCA3MiwgMTI4LCA3OCwgNzMsIDY5LCAKKyAgICA4NSwgMjA2LCA3OCwgNzMsIDY5LCA4MCwgMTI4LCA3OCwgNzMsIDY5LCAxMjgsIDc4LCA3MywgNjYsIDEyOCwgNzgsIDczLCAKKyAgICA2NSwgMTI4LCA3OCwgNzMsIDUwLCAxMjgsIDc4LCA3MiwgODUsIDY5LCAxMjgsIDc4LCA3MiwgNzQsIDY1LCAxMjgsIDc4LCAKKyAgICA3MiwgMTI4LCA3OCwgNzEsIDg5LCA2OSwgMTI4LCA3OCwgNzEsIDg2LCA2OSwgMTI4LCA3OCwgNzEsIDg1LCA4NSwgMTI4LCAKKyAgICA3OCwgNzEsIDg1LCA3OSwgODgsIDEyOCwgNzgsIDcxLCA4NSwgNzksIDg0LCAxMjgsIDc4LCA3MSwgODUsIDc5LCAxMjgsIAorICAgIDc4LCA3MSwgODUsIDY1LCA2OSwgODQsIDEyOCwgNzgsIDcxLCA4NSwgNjUsIDY5LCAxMjgsIDc4LCA3MSwgNzksIDg4LCAKKyAgICAxMjgsIDc4LCA3MSwgNzksIDg1LCAxMjgsIDc4LCA3MSwgNzksIDIxMywgNzgsIDcxLCA3OSwgODQsIDEyOCwgNzgsIDcxLCAKKyAgICA3OSwgODEsIDEyOCwgNzgsIDcxLCA3OSwgODAsIDEyOCwgNzgsIDcxLCA3OSwgNzgsIDEyOCwgNzgsIDcxLCA3OSwgNzcsIAorICAgIDEyOCwgNzgsIDcxLCA3OSwgNjksIDcyLCAxMjgsIDc4LCA3MSwgNzksIDY5LCAyMDAsIDc4LCA3MSwgMjA3LCA3OCwgNzEsIAorICAgIDc1LCA4OSwgNjksIDY5LCAxMjgsIDc4LCA3MSwgNzUsIDg3LCA2NSwgNjksIDc4LCAxMjgsIDc4LCA3MSwgNzUsIDg1LCA4MCwgCisgICAgMTI4LCA3OCwgNzEsIDc1LCA4NSwgNzgsIDEyOCwgNzgsIDcxLCA3NSwgODUsIDc3LCAxMjgsIDc4LCA3MSwgNzUsIDg1LCAKKyAgICA2OSwgNzgsIDkwLCA2OSwgODUsIDc3LCAxMjgsIDc4LCA3MSwgNzUsIDg1LCAxOTcsIDc4LCA3MSwgNzUsIDczLCA3OCwgNjgsIAorICAgIDIwMSwgNzgsIDcxLCA3NSwgNzMsIDY5LCA2OSwgMTI4LCA3OCwgNzEsIDc1LCA2OSwgODUsIDg4LCAxMjgsIDc4LCA3MSwgCisgICAgNzUsIDY5LCA4NSwgODIsIDczLCAxMjgsIDc4LCA3MSwgNzUsIDY5LCA4NSwgNjUsIDY5LCA4MSwgMTI4LCA3OCwgNzEsIDc1LCAKKyAgICA2OSwgODUsIDY1LCA2OSwgNzcsIDEyOCwgNzgsIDcxLCA3NSwgNjUsIDgxLCAxMjgsIDc4LCA3MSwgNzUsIDY1LCA4MCwgCisgICAgMTI4LCA3OCwgNzEsIDc1LCA2NSwgNjUsIDc3LCA3MywgMTI4LCA3OCwgNzEsIDc1LCA2NSwgMTI4LCA3OCwgNzEsIDczLCAKKyAgICA2OSwgODgsIDEyOCwgNzgsIDcxLCA3MywgNjksIDgwLCAxMjgsIDc4LCA3MSwgNzMsIDY5LCAxMjgsIDc4LCA3MSwgNzIsIAorICAgIDY1LCAxMjgsIDc4LCA3MSwgNzEsIDg3LCA2NSwgNjksIDc4LCAxMjgsIDc4LCA3MSwgNzEsIDg1LCA4MiwgNjUsIDY5LCAKKyAgICAxMjgsIDc4LCA3MSwgNzEsIDg1LCA4MCwgMTI4LCA3OCwgNzEsIDcxLCA4NSwgNzksIDgxLCAxMjgsIDc4LCA3MSwgNzEsIAorICAgIDg1LCA3OSwgMjA5LCA3OCwgNzEsIDcxLCA4NSwgNzksIDc4LCAxMjgsIDc4LCA3MSwgNzEsIDg1LCA3OSwgNzcsIDEyOCwgCisgICAgNzgsIDcxLCA3MSwgODUsIDc3LCAxMjgsIDc4LCA3MSwgNzEsIDg1LCA2OSwgNjksIDg0LCAxMjgsIDc4LCA3MSwgNzEsIDg1LCAKKyAgICA2NSwgNjksIDgzLCA3MiwgNjUsIDE5NywgNzgsIDcxLCA3MSwgODUsIDY1LCA2OSwgMjA2LCA3OCwgNzEsIDcxLCA4NSwgCisgICAgMTI4LCA3OCwgNzEsIDcxLCA3OSwgNzksIDEyOCwgNzgsIDcxLCA3MSwgNzksIDEyOCwgNzgsIDcxLCA3MSwgNzMsIDEyOCwgCisgICAgNzgsIDcxLCA3MSwgNjksIDg1LCA4OCwgMTI4LCA3OCwgNzEsIDcxLCA2OSwgODUsIDY1LCA2OSwgODQsIDEyOCwgNzgsIDcxLCAKKyAgICA3MSwgNjksIDg1LCA2NSwgNjksIDEyOCwgNzgsIDcxLCA3MSwgNjksIDIxMywgNzgsIDcxLCA3MSwgNjksIDc4LCAxMjgsIAorICAgIDc4LCA3MSwgNzEsIDY5LCA2OSwgODQsIDEyOCwgNzgsIDcxLCA3MSwgNjksIDY5LCA2OSwgNjksIDEyOCwgNzgsIDcxLCA3MSwgCisgICAgNjksIDY5LCAxMjgsIDc4LCA3MSwgNzEsIDY5LCAxMjgsIDc4LCA3MSwgNzEsIDY1LCA4MCwgMTI4LCA3OCwgNzEsIDcxLCAKKyAgICA2NSwgNjUsIDc3LCA2NSwgNjksIDEyOCwgNzgsIDcxLCA3MSwgNjUsIDY1LCA3NywgMTI4LCA3OCwgNzEsIDcxLCAxMjgsIAorICAgIDc4LCA3MSwgNjksIDg4LCAxMjgsIDc4LCA3MSwgNjksIDg1LCA4MiwgNjksIDg1LCA4NCwgMTI4LCA3OCwgNzEsIDY5LCA4MCwgCisgICAgMTI4LCA3OCwgNzEsIDY5LCA3OCwgMTI4LCA3OCwgNzEsIDY5LCA2OSwgMTI4LCA3OCwgNzEsIDY5LCA2NSwgNjgsIDY1LCAKKyAgICA3NiwgMTI4LCA3OCwgNzEsIDY1LCA4OCwgMTI4LCA3OCwgNzEsIDY1LCA4NSwgMTI4LCA3OCwgNzEsIDY1LCA4NCwgMTI4LCAKKyAgICA3OCwgNzEsIDY1LCAyMTEsIDc4LCA3MSwgNjUsIDgxLCAxMjgsIDc4LCA3MSwgNjUsIDgwLCAxMjgsIDc4LCA3MSwgNjUsIAorICAgIDc4LCA3MSwgODUsIDEyOCwgNzgsIDcxLCA2NSwgNzgsIDEyOCwgNzgsIDcxLCA2NSwgNzMsIDEyOCwgNzgsIDcxLCA2NSwgCisgICAgNzIsIDEyOCwgNzgsIDcxLCA2NSwgNjUsIDczLCAxMjgsIDc4LCA3MSwgMTkzLCA3OCwgNzAsIDEyOCwgNzgsIDY5LCA4OCwgCisgICAgMjEyLCA3OCwgNjksIDg4LCAxMjgsIDc4LCA2OSwgODcsIDgzLCA4MCwgNjUsIDgwLCA2OSwgODIsIDEyOCwgNzgsIDY5LCAKKyAgICA4NywgNzYsIDczLCA3OCwgNjksIDEyOCwgNzgsIDY5LCA4NywgMTI4LCA3OCwgNjksIDg1LCA4NCwgODIsIDY1LCAyMDQsIAorICAgIDc4LCA2OSwgODUsIDg0LCA2OSwgODIsIDEyOCwgNzgsIDY5LCA4NCwgMTI4LCA3OCwgNjksIDIxMiwgNzgsIDY5LCA4MywgCisgICAgODQsIDY5LCAxOTYsIDc4LCA2OSwgODEsIDg1LCA2OCwgNjUsIDY1LCAxMjgsIDc4LCA2OSwgODAsIDg0LCA4NSwgNzgsIDY5LCAKKyAgICAxMjgsIDc4LCA2OSwgODAsIDEyOCwgNzgsIDY5LCA3OSwgMTI4LCA3OCwgNjksIDIwNywgNzgsIDY5LCA3OCwgNjUsIDc4LCAKKyAgICA3OSwgMTI4LCA3OCwgNjksIDc4LCAxMjgsIDc4LCA2OSwgNzYsIDEyOCwgNzgsIDY5LCA3MywgODQsIDcyLCA2OSwgMjEwLCAKKyAgICA3OCwgNjksIDcxLCA2NSwgODQsIDczLCA3OSwgMjA2LCA3OCwgNjksIDcxLCA2NSwgODQsIDY5LCAxOTYsIDc4LCA2OSwgNjcsIAorICAgIDc1LCA4NCwgNzMsIDY5LCAxMjgsIDc4LCA2OSwgNjYsIDY5LCA3OCwgODMsIDg0LCA3MywgNzcsIDc3LCA2OSwgMTI4LCA3OCwgCisgICAgNjgsIDg1LCA4OCwgMTI4LCA3OCwgNjgsIDg1LCA4NCwgMTI4LCA3OCwgNjgsIDg1LCA4MiwgODgsIDEyOCwgNzgsIDY4LCAKKyAgICA4NSwgODIsIDEyOCwgNzgsIDY4LCA4NSwgODAsIDEyOCwgNzgsIDY4LCA4NSwgNzgsIDEyOCwgNzgsIDY4LCAyMTMsIDc4LCAKKyAgICA2OCwgNzksIDg4LCAxMjgsIDc4LCA2OCwgNzksIDg0LCAxMjgsIDc4LCA2OCwgNzksIDgwLCAxMjgsIDc4LCA2OCwgNzksIAorICAgIDc5LCAxMjgsIDc4LCA2OCwgNzksIDc4LCAxMjgsIDc4LCA2OCwgNzksIDc3LCA2NiwgODUsIDEyOCwgNzgsIDY4LCA3OSwgCisgICAgNzYsIDE5NywgNzgsIDY4LCA3MywgODgsIDEyOCwgNzgsIDY4LCA3MywgODQsIDEyOCwgNzgsIDY4LCA3MywgODEsIDEyOCwgCisgICAgNzgsIDY4LCA3MywgODAsIDEyOCwgNzgsIDY4LCA3MywgNjksIDg4LCAxMjgsIDc4LCA2OCwgNzMsIDY5LCAxMjgsIDc4LCAKKyAgICA2OCwgNzMsIDY4LCA2NSwgMTI4LCA3OCwgNjgsIDczLCA2NSwgODEsIDEyOCwgNzgsIDY4LCA2OSwgODgsIDEyOCwgNzgsIAorICAgIDY4LCA2OSwgODUsIDg4LCAxMjgsIDc4LCA2OCwgNjksIDg1LCA4NCwgMTI4LCA3OCwgNjgsIDY5LCA4NSwgNjUsIDY5LCA4MiwgCisgICAgNjksIDY5LCAxMjgsIDc4LCA2OCwgNjksIDgwLCAxMjgsIDc4LCA2OCwgNjksIDY5LCAxMjgsIDc4LCA2OCwgNjksIDEyOCwgCisgICAgNzgsIDY4LCA2NSwgODgsIDEyOCwgNzgsIDY4LCA2NSwgODQsIDEyOCwgNzgsIDY4LCA2NSwgODAsIDEyOCwgNzgsIDY4LCAKKyAgICA2NSwgNzcsIDEyOCwgNzgsIDY4LCA2NSwgNjUsIDc4LCA3MSwgNzEsIDY5LCA4NSwgNjUsIDY5LCA4NCwgMTI4LCA3OCwgNjgsIAorICAgIDY1LCA2NSwgMTI4LCA3OCwgNjgsIDY1LCAxOTMsIDc4LCA2NiwgODksIDg4LCAxMjgsIDc4LCA2NiwgODksIDg0LCAxMjgsIAorICAgIDc4LCA2NiwgODksIDgyLCA4OCwgMTI4LCA3OCwgNjYsIDg5LCA4MiwgMTI4LCA3OCwgNjYsIDg5LCA4MCwgMTI4LCA3OCwgCisgICAgNjYsIDg5LCAxMjgsIDc4LCA2NiwgODUsIDg4LCAxMjgsIDc4LCA2NiwgODUsIDg0LCAxMjgsIDc4LCA2NiwgODUsIDgyLCAKKyAgICA4OCwgMTI4LCA3OCwgNjYsIDg1LCA4MiwgMTI4LCA3OCwgNjYsIDg1LCA4MCwgMTI4LCA3OCwgNjYsIDg1LCAxMjgsIDc4LCAKKyAgICA2NiwgNzksIDg4LCAxMjgsIDc4LCA2NiwgNzksIDg0LCAxMjgsIDc4LCA2NiwgNzksIDgwLCAxMjgsIDc4LCA2NiwgNzksIAorICAgIDEyOCwgNzgsIDY2LCA3MywgODgsIDEyOCwgNzgsIDY2LCA3MywgODQsIDEyOCwgNzgsIDY2LCA3MywgODAsIDEyOCwgNzgsIAorICAgIDY2LCA3MywgNjksIDg4LCAxMjgsIDc4LCA2NiwgNzMsIDY5LCA4MCwgMTI4LCA3OCwgNjYsIDczLCA2OSwgMTI4LCA3OCwgCisgICAgNjYsIDczLCAxMjgsIDc4LCA2NiwgNzIsIDEyOCwgNzgsIDY2LCA2NSwgODgsIDEyOCwgNzgsIDY2LCA2NSwgODQsIDEyOCwgCisgICAgNzgsIDY2LCA2NSwgODAsIDEyOCwgNzgsIDY2LCA2NSwgMTI4LCA3OCwgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCAKKyAgICA3OCwgNjUsIDg5LCAxMjgsIDc4LCA2NSwgODgsIDczLCA2NSwgMjA2LCA3OCwgNjUsIDg4LCAxMjgsIDc4LCA2NSwgODUsIAorICAgIDg0LCA3MiwgODMsIDEyOCwgNzgsIDY1LCA4NSwgNjgsIDczLCAyMTgsIDc4LCA2NSwgODQsIDg1LCA4MiwgNjUsIDIwNCwgCisgICAgNzgsIDY1LCA4NCwgNzMsIDc5LCA3OCwgNjUsIDIwNCwgNzgsIDY1LCA4MywgNzUsIDY1LCA4MCwgMjAxLCA3OCwgNjUsIDgzLCAKKyAgICA3MiwgNzMsIDEyOCwgNzgsIDY1LCA4MywgNjUsIDc2LCA3MywgOTAsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA3OCwgNjUsIAorICAgIDgzLCA2NSwgNzYsIDczLCA5MCwgNjUsIDg0LCA3MywgNzksIDIwNiwgNzgsIDY1LCA4MiwgODIsIDc5LCAyMTUsIDc4LCA2NSwgCisgICAgODIsIDEyOCwgNzgsIDY1LCA4MSwgMTI4LCA3OCwgNjUsIDc5LCAyMTEsIDc4LCA2NSwgNzgsIDgzLCA2NSwgNzgsIDY1LCAKKyAgICA4MSwgMTI4LCA3OCwgNjUsIDc4LCA3MSwgNzcsIDc5LCA3OCwgODQsIDcyLCA3OSwgMTI4LCA3OCwgNjUsIDc4LCA2OCwgCisgICAgMTI4LCA3OCwgNjUsIDc4LCA2NSwgMTI4LCA3OCwgNjUsIDc3LCA2OSwgMTI4LCA3OCwgNjUsIDc3LCAxOTcsIDc4LCA2NSwgCisgICAgNzcsIDUwLCAxMjgsIDc4LCA2NSwgNzcsIDEyOCwgNzgsIDY1LCA3NSwgMTI4LCA3OCwgNjUsIDczLCA4MiwgMTkzLCA3OCwgCisgICAgNjUsIDczLCAyMDQsIDc4LCA2NSwgNzEsIDgyLCAyMDEsIDc4LCA2NSwgNzEsIDY1LCA4MiwgMTI4LCA3OCwgNjUsIDcxLCAKKyAgICA2NSwgMTI4LCA3OCwgNjUsIDcxLCAxOTMsIDc4LCA2NSwgNzEsIDEyOCwgNzgsIDY1LCAxOTksIDc4LCA2NSwgNjksIDEyOCwgCisgICAgNzgsIDY1LCA2NiwgNzYsIDY1LCAxMjgsIDc4LCA2NSwgNjUsIDgzLCA3MywgNzUsIDg5LCA2NSwgODksIDY1LCAxMjgsIDc4LCAKKyAgICA2NSwgNjUsIDc1LCA4MywgNzMsIDc1LCA4OSwgNjUsIDg5LCA2NSwgMTI4LCA3OCwgNjUsIDY1LCA3MywgMTI4LCA3OCwgNjUsIAorICAgIDE5MywgNzgsIDY1LCA1MCwgMTI4LCA3OCwgNjUsIDQ1LCA1MCwgMTI4LCA3OCwgNDgsIDUyLCA1MCwgMTI4LCA3OCwgNDgsIAorICAgIDUyLCA0OSwgMTI4LCA3OCwgNDgsIDUyLCA0OCwgMTI4LCA3OCwgNDgsIDUxLCA1NywgMTI4LCA3OCwgNDgsIDUxLCA1NiwgCisgICAgMTI4LCA3OCwgNDgsIDUxLCA1NSwgNjUsIDEyOCwgNzgsIDQ4LCA1MSwgNTUsIDEyOCwgNzgsIDQ4LCA1MSwgNTQsIDEyOCwgCisgICAgNzgsIDQ4LCA1MSwgNTMsIDY1LCAxMjgsIDc4LCA0OCwgNTEsIDUzLCAxMjgsIDc4LCA0OCwgNTEsIDUyLCA2NSwgMTI4LCAKKyAgICA3OCwgNDgsIDUxLCA1MiwgMTI4LCA3OCwgNDgsIDUxLCA1MSwgNjUsIDEyOCwgNzgsIDQ4LCA1MSwgNTEsIDEyOCwgNzgsIAorICAgIDQ4LCA1MSwgNTAsIDEyOCwgNzgsIDQ4LCA1MSwgNDksIDEyOCwgNzgsIDQ4LCA1MSwgNDgsIDEyOCwgNzgsIDQ4LCA1MCwgCisgICAgNTcsIDEyOCwgNzgsIDQ4LCA1MCwgNTYsIDEyOCwgNzgsIDQ4LCA1MCwgNTUsIDEyOCwgNzgsIDQ4LCA1MCwgNTQsIDEyOCwgCisgICAgNzgsIDQ4LCA1MCwgNTMsIDY1LCAxMjgsIDc4LCA0OCwgNTAsIDUzLCAxMjgsIDc4LCA0OCwgNTAsIDUyLCAxMjgsIDc4LCAKKyAgICA0OCwgNTAsIDUxLCAxMjgsIDc4LCA0OCwgNTAsIDUwLCAxMjgsIDc4LCA0OCwgNTAsIDQ5LCAxMjgsIDc4LCA0OCwgNTAsIAorICAgIDQ4LCAxMjgsIDc4LCA0OCwgNDksIDU3LCAxMjgsIDc4LCA0OCwgNDksIDU2LCA2NiwgMTI4LCA3OCwgNDgsIDQ5LCA1NiwgCisgICAgNjUsIDEyOCwgNzgsIDQ4LCA0OSwgNTYsIDEyOCwgNzgsIDQ4LCA0OSwgNTUsIDEyOCwgNzgsIDQ4LCA0OSwgNTQsIDEyOCwgCisgICAgNzgsIDQ4LCA0OSwgNTMsIDEyOCwgNzgsIDQ4LCA0OSwgNTIsIDEyOCwgNzgsIDQ4LCA0OSwgNTEsIDEyOCwgNzgsIDQ4LCAKKyAgICA0OSwgNTAsIDEyOCwgNzgsIDQ4LCA0OSwgNDksIDEyOCwgNzgsIDQ4LCA0OSwgNDgsIDEyOCwgNzgsIDQ4LCA0OCwgNTcsIAorICAgIDEyOCwgNzgsIDQ4LCA0OCwgNTYsIDEyOCwgNzgsIDQ4LCA0OCwgNTUsIDEyOCwgNzgsIDQ4LCA0OCwgNTQsIDEyOCwgNzgsIAorICAgIDQ4LCA0OCwgNTMsIDEyOCwgNzgsIDQ4LCA0OCwgNTIsIDEyOCwgNzgsIDQ4LCA0OCwgNTEsIDEyOCwgNzgsIDQ4LCA0OCwgCisgICAgNTAsIDEyOCwgNzgsIDQ4LCA0OCwgNDksIDEyOCwgNzgsIDQ1LCA2NywgODIsIDY5LCAxOTcsIDc4LCA0NSwgNjUsIDgyLCAKKyAgICAyMTcsIDc3LCA4OSwgODgsIDEyOCwgNzcsIDg5LCA4NCwgMTI4LCA3NywgODksIDgzLCA3NiwgNzMsIDg0LCA2OSwgMTI4LCAKKyAgICA3NywgODksIDgwLCAxMjgsIDc3LCA4OSwgNjUsIDEyOCwgNzcsIDg5LCAxOTMsIDc3LCA4OSwgMTI4LCA3NywgMjE3LCA3NywgCisgICAgODcsIDc5LCA3OSwgMTI4LCA3NywgODcsIDc5LCAxMjgsIDc3LCA4NywgNzMsIDczLCAxMjgsIDc3LCA4NywgNzMsIDEyOCwgCisgICAgNzcsIDg3LCA2OSwgNjksIDEyOCwgNzcsIDg3LCA2OSwgMTI4LCA3NywgODcsIDY1LCA2NSwgMTI4LCA3NywgODcsIDY1LCAKKyAgICAxMjgsIDc3LCA4NywgMTI4LCA3NywgMjE1LCA3NywgODYsIDgzLCAxMjgsIDc3LCA4NiwgNzksIDgwLCAxMjgsIDc3LCA4NiwgCisgICAgNzMsIDEyOCwgNzcsIDg2LCA2OSwgODUsIDY1LCA2OSwgNzgsIDcxLCA2NSwgNzcsIDEyOCwgNzcsIDg2LCAxMjgsIDc3LCAKKyAgICAyMTQsIDc3LCA4NSwgODgsIDEyOCwgNzcsIDg1LCA4NSwgODMsIDczLCA3NSwgNjUsIDg0LCA3OSwgNjUsIDc4LCAxMjgsIAorICAgIDc3LCA4NSwgODUsIDgyLCA2OCwgNzIsIDY1LCA3NCwgMTkzLCA3NywgODUsIDg1LCAxMjgsIDc3LCA4NSwgODQsIDEyOCwgCisgICAgNzcsIDg1LCA4MywgNzMsIDY3LCAxMjgsIDc3LCA4NSwgODMsIDczLCAxOTUsIDc3LCA4NSwgODMsIDcyLCA4MiwgNzksIDc5LCAKKyAgICA3NywgMTI4LCA3NywgODUsIDgzLCA3MiwgNTEsIDEyOCwgNzcsIDg1LCA4MywgNzIsIDE3OSwgNzcsIDg1LCA4MywgNzIsIAorICAgIDEyOCwgNzcsIDg1LCA4MywgMjAwLCA3NywgODUsIDgyLCA4OCwgMTI4LCA3NywgODUsIDgyLCA3MSwgODUsIDUwLCAxMjgsIAorICAgIDc3LCA4NSwgODIsIDY5LCAxMjgsIDc3LCA4NSwgODIsIDY4LCA2NSwgMTI4LCA3NywgODUsIDgyLCA2OCwgMTkzLCA3NywgCisgICAgODUsIDgyLCAxMjgsIDc3LCA4NSwgODEsIDY4LCA2NSwgNzcsIDEyOCwgNzcsIDg1LCA4MCwgMTI4LCA3NywgODUsIDc5LCAKKyAgICA4OCwgMTI4LCA3NywgODUsIDc5LCA4NCwgMTI4LCA3NywgODUsIDc5LCA4MCwgMTI4LCA3NywgODUsIDc5LCA3NywgNjUsIAorICAgIDY5LCAxMjgsIDc3LCA4NSwgNzksIDEyOCwgNzcsIDg1LCA3OCwgODMsIDg1LCA2NiwgMTI4LCA3NywgODUsIDc4LCA2NSwgCisgICAgNzIsIDEyOCwgNzcsIDg1LCA3NiwgODQsIDczLCA4MywgNjksIDg0LCAxMjgsIDc3LCA4NSwgNzYsIDg0LCA3MywgODMsIDY5LCAKKyAgICAyMTIsIDc3LCA4NSwgNzYsIDg0LCA3MywgODAsIDc2LCA3MywgNjcsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA3NywgODUsIAorICAgIDc2LCA4NCwgNzMsIDgwLCA3NiwgNzMsIDY3LCA2NSwgODQsIDczLCA3OSwgMjA2LCA3NywgODUsIDc2LCA4NCwgNzMsIDgwLCAKKyAgICA3NiwgMTk3LCA3NywgODUsIDc2LCA4NCwgNzMsIDc5LCA2NywgODUsIDc2LCA2NSwgMjEwLCA3NywgODUsIDc2LCA4NCwgNzMsIAorICAgIDc3LCA2NSwgODAsIDEyOCwgNzcsIDg1LCA3NiwgODQsIDIwMSwgNzcsIDg1LCA3NSwgODAsIDcyLCA4MiwgNjksIDc4LCA3MSwgCisgICAgMTI4LCA3NywgODUsIDczLCA3OCwgMTI4LCA3NywgODUsIDcxLCA4MywgMTI4LCA3NywgODUsIDcxLCAxMjgsIDc3LCA4NSwgCisgICAgMTk5LCA3NywgODUsIDY5LCAxMjgsIDc3LCA4NSwgNjcsIDcyLCAxMjgsIDc3LCA4NSwgNjcsIDIwMCwgNzcsIDg1LCA2NywgCisgICAgNjUsIDY1LCA2OCwgMTI4LCA3NywgODUsIDY1LCA3OCwgMTI4LCA3NywgODUsIDY1LCA2OSwgMTI4LCA3NywgODUsIDQ1LCAKKyAgICA3MSwgNjUsIDY1LCA3MiwgNzYsIDY1LCAxOTMsIDc3LCAyMTMsIDc3LCA4MywgMTI4LCA3NywgODAsIDY1LCAxMjgsIDc3LCAKKyAgICA3OSwgODksIDY1LCA3MywgMTI4LCA3NywgNzksIDg4LCAxMjgsIDc3LCA3OSwgODYsIDczLCAxOTcsIDc3LCA3OSwgODYsIAorICAgIDY5LCAxOTYsIDc3LCA3OSwgODUsIDg0LCA3MiwgMTI4LCA3NywgNzksIDg1LCA4NCwgMjAwLCA3NywgNzksIDg1LCA4MywgCisgICAgNjksIDEyOCwgNzcsIDc5LCA4NSwgODMsIDE5NywgNzcsIDc5LCA4NSwgNzgsIDg0LCA2NSwgNzMsIDc4LCA4MywgMTI4LCAKKyAgICA3NywgNzksIDg1LCA3OCwgODQsIDY1LCA3MywgNzgsIDEyOCwgNzcsIDc5LCA4NSwgNzgsIDg0LCA2NSwgNzMsIDIwNiwgNzcsIAorICAgIDc5LCA4NSwgNzgsIDIxMiwgNzcsIDc5LCA4NSwgNzgsIDY4LCAxMjgsIDc3LCA3OSwgODUsIDc4LCAxOTYsIDc3LCA3OSwgCisgICAgODQsIDcyLCA2OSwgODIsIDEyOCwgNzcsIDc5LCA4NCwgMTI4LCA3NywgNzksIDgyLCA4NCwgODUsIDg1LCA3NywgMTI4LCAKKyAgICA3NywgNzksIDgyLCA4NCwgNjUsIDgyLCAxMjgsIDc3LCA3OSwgODIsIDgwLCA3MiwgNzksIDc2LCA3OSwgNzEsIDczLCA2NywgCisgICAgNjUsIDIwNCwgNzcsIDc5LCA4MiwgNzgsIDczLCA3OCwgNzEsIDEyOCwgNzcsIDc5LCA4MCwgMTI4LCA3NywgNzksIDc5LCAKKyAgICA4MywgNjksIDQ1LCA2NywgODIsIDY5LCAxOTcsIDc3LCA3OSwgNzksIDc4LCAxMjgsIDc3LCA3OSwgNzksIDIwNiwgNzcsIAorICAgIDc5LCA3OSwgNzcsIDgwLCA4NSwgODEsIDEyOCwgNzcsIDc5LCA3OSwgNzcsIDY5LCA4NSwgODQsIDEyOCwgNzcsIDc5LCA3OSwgCisgICAgMTI4LCA3NywgNzksIDc4LCA4NCwgNzMsIDY5LCA2OSwgNzgsIDEyOCwgNzcsIDc5LCA3OCwgODQsIDcyLCAxMjgsIDc3LCAKKyAgICA3OSwgNzgsIDg0LCAyMDAsIDc3LCA3OSwgNzgsIDgzLCA4NCwgNjksIDgyLCAxMjgsIDc3LCA3OSwgNzgsIDc5LCA4MywgODQsIAorICAgIDY1LCA2NiwgNzYsIDE5NywgNzcsIDc5LCA3OCwgNzksIDgzLCA4MCwgNjUsIDY3LCAxOTcsIDc3LCA3OSwgNzgsIDc5LCA4MiwgCisgICAgNjUsIDczLCA3NiwgMTI4LCA3NywgNzksIDc4LCA3OSwgNzEsIDgyLCA2NSwgODAsIDIwMCwgNzcsIDc5LCA3OCwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDc3LCA3NywgNzksIDIxMSwgNzcsIDc5LCA3OCwgNzksIDcxLCA4MiwgNjUsIDIwNSwgNzcsIDc5LCA3OCwgNzksIAorICAgIDcwLCA3OSwgNzgsIDczLCA2NSwgODMsIDEyOCwgNzcsIDc5LCA3OCwgNzksIDY3LCA4NSwgNzYsIDY1LCAyMTAsIDc3LCA3OSwgCisgICAgNzgsIDc1LCA2OSwgODksIDEyOCwgNzcsIDc5LCA3OCwgNzUsIDY5LCAyMTcsIDc3LCA3OSwgNzgsIDczLCAxMjgsIDc3LCAKKyAgICA3OSwgNzgsIDcxLCA3NSwgNjksIDg1LCA2NSwgNjksIDgxLCAxMjgsIDc3LCA3OSwgNzgsIDY5LCAyMTcsIDc3LCA3OSwgNzgsIAorICAgIDEyOCwgNzcsIDc5LCAyMDYsIDc3LCA3OSwgNzYsIDEyOCwgNzcsIDc5LCA3MiwgNjUsIDc3LCA3NywgNjUsIDE5NiwgNzcsIAorICAgIDc5LCA2OCwgODUsIDc2LCAyMDcsIDc3LCA3OSwgNjgsIDY5LCA4MywgODQsIDg5LCAxMjgsIDc3LCA3OSwgNjgsIDY5LCA3NiwgCisgICAgODMsIDEyOCwgNzcsIDc5LCA2OCwgNjksIDc2LCAxMjgsIDc3LCA3OSwgNjgsIDY5LCAxMjgsIDc3LCA3OSwgNjYsIDczLCAKKyAgICA3NiwgMTk3LCA3NywgNzksIDY1LCAxMjgsIDc3LCAyMDcsIDc3LCA3OCwgODksIDY1LCAyMDUsIDc3LCA3OCwgNjUsIDgzLCAKKyAgICAxMjgsIDc3LCA3NywgODMsIDgwLCAxMjgsIDc3LCA3NywgMTI4LCA3NywgMjA1LCA3NywgNzYsIDY1LCAxMjgsIDc3LCA3NiwgCisgICAgMTI4LCA3NywgNzUsIDgwLCA2NSwgODIsIDY1LCAyMDksIDc3LCA3MywgODgsIDEyOCwgNzcsIDczLCA4NCwgMTI4LCA3NywgCisgICAgNzMsIDgzLCA4MiwgNjUsIDEyOCwgNzcsIDczLCA4MiwgNzMsIDY2LCA2NSwgNjUsIDgyLCA4NSwgMTI4LCA3NywgNzMsIDgyLCAKKyAgICA3MywgMTI4LCA3NywgNzMsIDgyLCA2OSwgNjgsIDEyOCwgNzcsIDczLCA4MCwgMTI4LCA3NywgNzMsIDc4LCA4OSwgMTI4LCAKKyAgICA3NywgNzMsIDc4LCA4NSwgODMsIDQ1LCA3OSwgODIsIDQ1LCA4MCwgNzYsIDg1LCAyMTEsIDc3LCA3MywgNzgsIDg1LCA4MywgCisgICAgMTI4LCA3NywgNzMsIDc4LCA3MywgODMsIDg0LCA2OSwgODIsIDEyOCwgNzcsIDczLCA3OCwgNzMsIDc3LCA2NSwgMTI4LCAKKyAgICA3NywgNzMsIDc4LCA3MywgNjgsIDczLCA4MywgNjcsIDEyOCwgNzcsIDczLCA3OCwgNzMsIDY2LCA4NSwgODMsIDEyOCwgNzcsIAorICAgIDczLCA3NywgNjksIDEyOCwgNzcsIDczLCA3NywgMTI4LCA3NywgNzMsIDc2LCA3NiwgNzMsIDc5LCA3OCwgMjExLCA3NywgCisgICAgNzMsIDc2LCA3NiwgNjksIDg0LCAxMjgsIDc3LCA3MywgNzYsIDc2LCAxOTcsIDc3LCA3MywgNzYsIDIwNCwgNzcsIDczLCAKKyAgICA3NiwgNzUsIDIxNywgNzcsIDczLCA3NiwgMTI4LCA3NywgNzMsIDc1LCA4NSwgODIsIDc5LCA3OCwgMTI4LCA3NywgNzMsIAorICAgIDc1LCA4MiwgNzksIDIwNiwgNzcsIDczLCA3NSwgODIsIDczLCAxMjgsIDc3LCA3MywgNzMsIDc4LCAxMjgsIDc3LCA3MywgCisgICAgNzMsIDEyOCwgNzcsIDczLCAxOTksIDc3LCA3MywgNjksIDg4LCAxMjgsIDc3LCA3MywgNjksIDg1LCA3NywgNDUsIDg0LCAKKyAgICA3MywgNzUsIDY5LCA4NSwgODQsIDEyOCwgNzcsIDczLCA2OSwgODUsIDc3LCA0NSwgODMsIDgzLCA2NSwgNzgsIDcxLCA4MywgCisgICAgNzMsIDc5LCA4MywgMTI4LCA3NywgNzMsIDY5LCA4NSwgNzcsIDQ1LCA4MywgODMsIDY1LCA3OCwgNzEsIDc4LCA3MywgNjksIAorICAgIDg1LCA3OCwgMTI4LCA3NywgNzMsIDY5LCA4NSwgNzcsIDQ1LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDEyOCwgNzcsIDczLCA2OSwgCisgICAgODUsIDc3LCA0NSwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgODMsIDczLCA3OSwgODMsIDEyOCwgNzcsIDczLCA2OSwgODUsIAorICAgIDc3LCA0NSwgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIDc3LCA3MywgNjksIDg1LCA3NywgNDUsIDgwLCA2NSwgNzgsIDgzLCAKKyAgICA3MywgNzksIDgzLCAxMjgsIDc3LCA3MywgNjksIDg1LCA3NywgNDUsIDc4LCA3MywgNjksIDg1LCA3OCwgMTI4LCA3NywgNzMsIAorICAgIDY5LCA4NSwgNzcsIDQ1LCA2NywgNzMsIDY5LCA4NSwgNjcsIDEyOCwgNzcsIDczLCA2OSwgODUsIDc3LCA0NSwgNjcsIDcyLCAKKyAgICA3MywgNjksIDg1LCA2NywgNzIsIDEyOCwgNzcsIDczLCA2OSwgODUsIDIwNSwgNzcsIDczLCA2OSwgODAsIDEyOCwgNzcsIAorICAgIDczLCA2OSwgNjksIDEyOCwgNzcsIDczLCA2OSwgMTI4LCA3NywgNzMsIDY4LCA3NiwgNzMsIDc4LCAxOTcsIDc3LCA3MywgCisgICAgNjgsIDY4LCA3NiwgNjksIDQ1LCA4NywgNjksIDc2LCA4MywgMjAwLCA3NywgNzMsIDY4LCA2OCwgNzYsIDE5NywgNzcsIDczLCAKKyAgICAxOTYsIDc3LCA3MywgNjcsIDgyLCA3OSwgODMsIDY3LCA3OSwgODAsIDY5LCAxMjgsIDc3LCA3MywgNjcsIDgyLCA3OSwgODAsIAorICAgIDcyLCA3OSwgNzgsIDY5LCAxMjgsIDc3LCA3MywgNjcsIDgyLCAyMDcsIDc3LCA3MywgNjcsIDIxMCwgNzcsIDcyLCA5MCwgCisgICAgMTI4LCA3NywgNzIsIDY1LCAxMjgsIDc3LCA3MiwgMTI4LCA3NywgNzEsIDg1LCA4OCwgMTI4LCA3NywgNzEsIDg1LCA4NCwgCisgICAgMTI4LCA3NywgNzEsIDg1LCA4MiwgODgsIDEyOCwgNzcsIDcxLCA4NSwgODIsIDEyOCwgNzcsIDcxLCA4NSwgODAsIDEyOCwgCisgICAgNzcsIDcxLCA4NSwgNzksIDg4LCAxMjgsIDc3LCA3MSwgODUsIDc5LCA4MCwgMTI4LCA3NywgNzEsIDg1LCA3OSwgMTI4LCAKKyAgICA3NywgNzEsIDg1LCAxMjgsIDc3LCA3MSwgNzksIDg4LCAxMjgsIDc3LCA3MSwgNzksIDg0LCAxMjgsIDc3LCA3MSwgNzksIAorICAgIDgwLCAxMjgsIDc3LCA3MSwgNzksIDEyOCwgNzcsIDcxLCAyMDcsIDc3LCA3MSwgNzMsIDY5LCA4OCwgMTI4LCA3NywgNzEsIAorICAgIDczLCA2OSwgMTI4LCA3NywgNzEsIDY5LCA4OCwgMTI4LCA3NywgNzEsIDY5LCA4MCwgMTI4LCA3NywgNzEsIDY5LCAxMjgsIAorICAgIDc3LCA3MSwgNjYsIDg1LCAxMjgsIDc3LCA3MSwgNjYsIDc5LCA3OSwgMTI4LCA3NywgNzEsIDY2LCA3OSwgNzAsIDg1LCA3NywgCisgICAgMTI4LCA3NywgNzEsIDY2LCA3OSwgMTI4LCA3NywgNzEsIDY2LCA3MywgMTI4LCA3NywgNzEsIDY2LCA2OSwgODUsIDc4LCAKKyAgICAxMjgsIDc3LCA3MSwgNjYsIDY5LCA3OCwgMTI4LCA3NywgNzEsIDY2LCA2OSwgNjksIDEyOCwgNzcsIDcxLCA2NiwgNjksIAorICAgIDEyOCwgNzcsIDcxLCA2NiwgNjUsIDgzLCA2NSwgODEsIDEyOCwgNzcsIDcxLCA2NiwgNjUsIDgzLCA2NSwgMTI4LCA3NywgCisgICAgNzEsIDY1LCA4OCwgMTI4LCA3NywgNzEsIDY1LCA4NCwgMTI4LCA3NywgNzEsIDY1LCA4MCwgMTI4LCA3NywgNzEsIDY1LCAKKyAgICAxMjgsIDc3LCA3MSwgMTI4LCA3NywgNzAsIDc5LCA3OCwgMTI4LCA3NywgNzAsIDc5LCAyMDYsIDc3LCA3MCwgNzksIDEyOCwgCisgICAgNzcsIDcwLCA3MywgODksIDY1LCA4MSwgMTI4LCA3NywgNzAsIDczLCA2OSwgNjksIDEyOCwgNzcsIDcwLCA2OSwgODUsIDg0LCAKKyAgICAxMjgsIDc3LCA3MCwgNjksIDg1LCA4MSwgMTI4LCA3NywgNzAsIDY5LCA4NSwgNjUsIDY5LCAxMjgsIDc3LCA3MCwgNjUsIAorICAgIDY1LCAxMjgsIDc3LCA2OSwgOTAsIDkwLCA3OSwgMTI4LCA3NywgNjksIDg4LCAxMjgsIDc3LCA2OSwgODUsIDIxMiwgNzcsIAorICAgIDY5LCA4NSwgODEsIDEyOCwgNzcsIDY5LCA4NSwgNzgsIDc0LCA3OSwgNzcsIDc4LCA2OCwgNjksIDg1LCA4MSwgMTI4LCA3NywgCisgICAgNjksIDg1LCA3OCwgMTI4LCA3NywgNjksIDg0LCA4MiwgNzksIDEyOCwgNzcsIDY5LCA4NCwgODIsIDczLCA2NywgNjUsIAorICAgIDIwNCwgNzcsIDY5LCA4NCwgODIsIDczLCA2NSwgMTI4LCA3NywgNjksIDg0LCA4MiwgNjksIDg0LCA2OSwgMjExLCA3NywgCisgICAgNjksIDg0LCA3OSwgNjYsIDY5LCA3NiwgODUsIDgzLCAxMjgsIDc3LCA2OSwgODQsIDY5LCA3NSwgMTI4LCA3NywgNjksIDg0LCAKKyAgICA2OSwgNzEsIDEyOCwgNzcsIDY5LCA4NCwgNjUsIDc2LCAxMjgsIDc3LCA2OSwgODQsIDE5MywgNzcsIDY5LCA4MywgODMsIAorICAgIDY5LCA3OCwgNzMsIDY1LCAyMDYsIDc3LCA2OSwgODMsIDgzLCA2NSwgNzEsIDY5LCAxMjgsIDc3LCA2OSwgODMsIDgzLCA2NSwgCisgICAgNzEsIDE5NywgNzcsIDY5LCA4MywgNzksIDEyOCwgNzcsIDY5LCA4MywgNzMsIDEyOCwgNzcsIDY5LCA4MywgNzIsIDEyOCwgCisgICAgNzcsIDY5LCA4MiwgNzksIDczLCA4NCwgNzMsIDE5NSwgNzcsIDY5LCA4MiwgNzUsIDcyLCA2NSwgMTI4LCA3NywgNjksIDgyLCAKKyAgICA3NSwgNzIsIDE5MywgNzcsIDY5LCA4MiwgNzMsIDY4LCA3MywgNjUsIDc4LCA4MywgMTI4LCA3NywgNjksIDgyLCA3MywgCisgICAgMTI4LCA3NywgNjksIDgyLCA3MSwgNjksIDEyOCwgNzcsIDY5LCA4MiwgNjcsIDg1LCA4MiwgODksIDEyOCwgNzcsIDY5LCAKKyAgICA4MiwgNjcsIDg1LCA4MiwgMjE3LCA3NywgNjksIDc4LCA2OCwgODUsIDg0LCAxMjgsIDc3LCA2OSwgNzgsIDEyOCwgNzcsIAorICAgIDY5LCA3NywgNzksIDEyOCwgNzcsIDY5LCA3NywgNjYsIDY5LCA4MiwgODMsIDcyLCA3MywgODAsIDEyOCwgNzcsIDY5LCA3NywgCisgICAgNjYsIDY5LCA4MiwgMTI4LCA3NywgNjksIDc3LCA2NiwgNjksIDIxMCwgNzcsIDY5LCA3NywgNDUsIDgxLCA3OSwgODAsIDcyLCAKKyAgICAxMjgsIDc3LCA2OSwgNzcsIDEyOCwgNzcsIDY5LCAyMDUsIDc3LCA2OSwgNzYsIDc5LCA2OCwgNzMsIDE5NSwgNzcsIDY5LCAKKyAgICA3NiwgNzMsIDc1LCAxMjgsIDc3LCA2OSwgNzMsIDkwLCA3MywgMTI4LCA3NywgNjksIDcxLCA2NSwgODQsIDc5LCA3OCwgCisgICAgMTI4LCA3NywgNjksIDcxLCA2NSwgODAsIDcyLCA3OSwgNzgsIDY5LCAxMjgsIDc3LCA2OSwgNzEsIDY1LCA3NiwgNzMsIAorICAgIDEyOCwgNzcsIDY5LCA2OSwgODQsIDc5LCA4MiwgODUsIDEyOCwgNzcsIDY5LCA2OSwgODQsIDEyOCwgNzcsIDY5LCA2OSwgCisgICAgNzcsIDg1LCAxMjgsIDc3LCA2OSwgNjksIDc3LCAxMjgsIDc3LCA2OSwgNjksIDY5LCA2OSwgMTI4LCA3NywgNjksIDY4LCAKKyAgICA3MywgODUsIDc3LCAxMjgsIDc3LCA2OSwgNjgsIDczLCA4NSwgMjA1LCA3NywgNjksIDY4LCA3MywgNjcsIDczLCA3OCwgNjksIAorICAgIDEyOCwgNzcsIDY5LCA2OCwgNzMsIDY3LCA2NSwgMjA0LCA3NywgNjksIDY1LCA4NCwgMTI4LCA3NywgNjksIDY1LCAyMTIsIAorICAgIDc3LCA2OSwgNjUsIDgzLCA4NSwgODIsIDY5LCAxOTYsIDc3LCA2OSwgNjUsIDgzLCA4NSwgODIsIDY5LCAxMjgsIDc3LCA2OSwgCisgICAgNjUsIDgzLCA4NSwgODIsIDE5NywgNzcsIDY4LCA4NSwgMjA2LCA3NywgMTk2LCA3NywgNjcsIDcyLCAyMTMsIDc3LCA2NywgCisgICAgNzIsIDY1LCAyMDYsIDc3LCAxOTUsIDc3LCA2NiwgODUsIDc5LCA4MSwgMTI4LCA3NywgNjYsIDg1LCA3OSwgMTI4LCA3NywgCisgICAgNjYsIDg1LCA2OSwgMTI4LCA3NywgNjYsIDg1LCA2NSwgNjksIDc3LCAxMjgsIDc3LCA2NiwgODUsIDY1LCA2OSwgMTI4LCAKKyAgICA3NywgNjYsIDc5LCA3OSwgMTI4LCA3NywgNjYsIDc5LCAxMjgsIDc3LCA2NiwgNzMsIDg0LCAxMjgsIDc3LCA2NiwgNzMsIAorICAgIDIxMiwgNzcsIDY2LCA3MywgODIsIDczLCA2OSwgNjksIDc4LCAxMjgsIDc3LCA2NiwgNzMsIDEyOCwgNzcsIDY2LCA2OSwgCisgICAgODUsIDg4LCAxMjgsIDc3LCA2NiwgNjksIDg1LCA4MiwgNzMsIDEyOCwgNzcsIDY2LCA2OSwgODUsIDc3LCAxMjgsIDc3LCAKKyAgICA2NiwgNjksIDgyLCA2NSwgNjksIDEyOCwgNzcsIDY2LCA2OSwgNzgsIDEyOCwgNzcsIDY2LCA2OSwgNjksIDc1LCA2OSwgNjksIAorICAgIDg0LCAxMjgsIDc3LCA2NiwgNjksIDY5LCAxMjgsIDc3LCA2NiwgNjksIDEyOCwgNzcsIDY2LCA2NSwgODEsIDEyOCwgNzcsIAorICAgIDY2LCA2NSwgNzgsIDg5LCA3MywgMTI4LCA3NywgNjYsIDY1LCA2NSwgODIsIDY1LCA2OSwgMTI4LCA3NywgNjYsIDY1LCA2NSwgCisgICAgNzUsIDY5LCA4NCwgMTI4LCA3NywgNjYsIDY1LCA2NSwgMTI4LCA3NywgNjYsIDY1LCAxOTMsIDc3LCA2NiwgMTkzLCA3NywgCisgICAgNjYsIDUyLCAxMjgsIDc3LCA2NiwgNTEsIDEyOCwgNzcsIDY2LCA1MCwgMTI4LCA3NywgNjYsIDEyOCwgNzcsIDE5NCwgNzcsIAorICAgIDY1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzcsIDY1LCA4OSwgMTI4LCA3NywgNjUsIDg4LCA3MywgNzcsIDY1LCAKKyAgICAxMjgsIDc3LCA2NSwgODgsIDEyOCwgNzcsIDY1LCA4NSwgMTI4LCA3NywgNjUsIDg0LCA4NCwgNzksIDY3LCA3NSwgMTI4LCAKKyAgICA3NywgNjUsIDg0LCA4MiwgNzMsIDg4LCAxMjgsIDc3LCA2NSwgODQsIDY5LCA4MiwgNzMsIDY1LCA3NiwgODMsIDEyOCwgNzcsIAorICAgIDY1LCA4NCwgMTI4LCA3NywgNjUsIDgzLCAyMTMsIDc3LCA2NSwgODMsIDgzLCA3MywgNzgsIDcxLCAxMjgsIDc3LCA2NSwgCisgICAgODMsIDgzLCA2NSwgNzEsIDY5LCAxMjgsIDc3LCA2NSwgODMsIDc5LCA4MiwgMTkzLCA3NywgNjUsIDgzLCA3NSwgMTI4LCAKKyAgICA3NywgNjUsIDgzLCA3MiwgNzAsIDY1LCA2NSwgODQsIDEyOCwgNzcsIDY1LCA4MywgNzIsIDUwLCAxMjgsIDc3LCA2NSwgODMsIAorICAgIDY3LCA4NSwgNzYsIDczLCA3OCwgMTk3LCA3NywgNjUsIDgyLCA4OSwgMTI4LCA3NywgNjUsIDgyLCA4NSwgNzUsIDg1LCAKKyAgICAxMjgsIDc3LCA2NSwgODIsIDg0LCA4OSwgODIsIDczLCAxOTMsIDc3LCA2NSwgODIsIDgyLCA4OSwgNzMsIDc4LCAxOTksIAorICAgIDc3LCA2NSwgODIsIDgyLCA3MywgNjUsIDcxLCAxOTcsIDc3LCA2NSwgODIsIDc1LCA2OSwgODIsIDEyOCwgNzcsIDY1LCA4MiwgCisgICAgNzUsIDQ1LCA1MiwgMTI4LCA3NywgNjUsIDgyLCA3NSwgNDUsIDUxLCAxMjgsIDc3LCA2NSwgODIsIDc1LCA0NSwgNTAsIAorICAgIDEyOCwgNzcsIDY1LCA4MiwgNzUsIDQ1LCA0OSwgMTI4LCA3NywgNjUsIDgyLCA2OSwgMTI4LCA3NywgNjUsIDgyLCA2NywgCisgICAgNzIsIDEyOCwgNzcsIDY1LCA4MiwgNjcsIDY1LCA4NCwgNzksIDQ1LCA4MywgODQsIDY1LCA2NywgNjcsIDY1LCA4NCwgNzksIAorICAgIDEyOCwgNzcsIDY1LCA4MiwgNjcsIDY1LCA4NCwgNzksIDEyOCwgNzcsIDY1LCA4MiwgNjcsIDY1LCA4MywgNzMsIDg0LCA2OSwgCisgICAgMTI4LCA3NywgNjUsIDgyLCA2NiwgODUsIDg0LCA2NSwgMTI4LCA3NywgNjUsIDgyLCA2NiwgODUsIDg0LCAxOTMsIDc3LCAKKyAgICA2NSwgODIsIDEyOCwgNzcsIDY1LCA4MSwgNjUsIDcwLCAxMjgsIDc3LCA2NSwgODEsIDEyOCwgNzcsIDY1LCA4MCwgNzYsIAorICAgIDE5NywgNzcsIDY1LCA4MCwgNzMsIDgxLCAxMjgsIDc3LCA2NSwgMjA4LCA3NywgNjUsIDc5LCAxMjgsIDc3LCA2NSwgNzgsIAorICAgIDgzLCA4OSwgNzksIDc4LCAxMjgsIDc3LCA2NSwgNzgsIDgzLCA4NSwgNjUsIDY5LCAxMjgsIDc3LCA2NSwgNzgsIDc4LCA2NSwgCisgICAgMjE4LCA3NywgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzcsIDY1LCA3OCwgNzEsIDY1LCA3NiwgNjUsIDc3LCAxMjgsIDc3LCAKKyAgICA2NSwgNzgsIDY4LCA2NSwgNzMsIDc2LCA3MywgNzgsIDE5OSwgNzcsIDY1LCA3OCwgNjgsIDY1LCA3MywgMTk1LCA3NywgNjUsIAorICAgIDc4LCA2NywgNzIsIDIxMywgNzcsIDY1LCA3OCwgNjUsIDY3LCA3NiwgNjksIDgzLCAxMjgsIDc3LCA2NSwgNzYsIDg0LCA2OSwgCisgICAgODMsIDE5NywgNzcsIDY1LCA3NiwgNjksIDY5LCA4MiwgNzMsIDEyOCwgNzcsIDY1LCA3NiwgNjksIDEyOCwgNzcsIDY1LCAKKyAgICA3NiwgMTk3LCA3NywgNjUsIDc2LCA2NSwgNzUsIDc5LCAyMDYsIDc3LCA2NSwgNzUsIDgzLCA4NSwgODIsIDY1LCAxMjgsIAorICAgIDc3LCA2NSwgNzUsIDgzLCA4NSwgODIsIDE5MywgNzcsIDY1LCA3MywgOTAsIDY5LCAxMjgsIDc3LCA2NSwgNzMsIDg5LCA2NSwgCisgICAgNzcsIDc5LCA3NSwgMTI4LCA3NywgNjUsIDczLCA4NCwgNjUsIDczLCA3NSwgNzIsIDg1LCAxMjgsIDc3LCA2NSwgNzMsIDgyLCAKKyAgICA4NSwgMTI4LCA3NywgNjUsIDczLCA3NywgODUsIDY1LCA3OCwgMTI4LCA3NywgNjUsIDczLCA3NywgNjUsIDc2LCA2NSwgNzMsIAorICAgIDEyOCwgNzcsIDY1LCA3MywgNzYsIDY2LCA3OSwgMjE2LCA3NywgNjUsIDczLCA3NSwgODUsIDgyLCA3OSwgMTI4LCA3NywgCisgICAgNjUsIDczLCA2OCwgNjksIDc4LCAxMjgsIDc3LCA2NSwgNzMsIDEyOCwgNzcsIDY1LCA3MiwgNzQsIDc5LCA3OCwgMTk5LCAKKyAgICA3NywgNjUsIDcyLCA3MiwgNjUsIDEyOCwgNzcsIDY1LCA3MiwgNjUsIDgwLCA4MiwgNjUsIDc4LCA2NSwgMTI4LCA3NywgNjUsIAorICAgIDcyLCA2NSwgODAsIDY1LCA3NSwgNzIsIDEyOCwgNzcsIDY1LCA3MiwgNjUsIDY1LCA4MCwgODIsIDY1LCA2NSwgNzgsIDE5MywgCisgICAgNzcsIDY1LCA3MiwgMTI4LCA3NywgNjUsIDcxLCA3OCwgNzMsIDcwLCA4OSwgNzMsIDc4LCAxOTksIDc3LCA2NSwgNjksIDgzLCAKKyAgICA3MywgMTI4LCA3NywgNjUsIDY5LCA3OCwgODksIDczLCAxMjgsIDc3LCA2NSwgNjksIDc4LCA3NCwgNjksIDg0LCAxMjgsIAorICAgIDc3LCA2NSwgNjksIDc3LCA4NiwgNjksIDg1LCA4OCwgMTI4LCA3NywgNjUsIDY5LCA3NywgNzUsIDgwLCA2OSwgNzgsIDEyOCwgCisgICAgNzcsIDY1LCA2OSwgNzcsIDcxLCA2NiwgNzMsIDY5LCA2OSwgMTI4LCA3NywgNjUsIDY5LCA3NywgNjYsIDcxLCA2NiwgNzMsIAorICAgIDY5LCA2OSwgMTI4LCA3NywgNjUsIDY5LCA3NywgNjYsIDY1LCAxMjgsIDc3LCA2NSwgNjksIDc3LCAxMjgsIDc3LCA2NSwgCisgICAgNjksIDc2LCA2OSwgNjksIDEyOCwgNzcsIDY1LCA2OSwgNzUsIDY5LCA4NSwgODAsIDEyOCwgNzcsIDY1LCA2OCwgODksIDY1LCAKKyAgICAxMjgsIDc3LCA2NSwgNjgsIDg1LCAxMjgsIDc3LCA2NSwgNjgsIDY4LCA2NSwgMjAwLCA3NywgNjUsIDY4LCA2OCwgNjUsIAorICAgIDEyOCwgNzcsIDY1LCA2OCwgNjgsIDE5MywgNzcsIDY1LCA2NywgODIsIDc5LCA3OCwgNDUsIDcxLCA4MiwgNjUsIDg2LCA2OSwgCisgICAgMTI4LCA3NywgNjUsIDY3LCA4MiwgNzksIDc4LCA0NSwgNjYsIDgyLCA2OSwgODYsIDY5LCAxMjgsIDc3LCA2NSwgNjcsIDgyLCAKKyAgICA3OSwgNzgsIDQ1LCA2NSwgNjcsIDg1LCA4NCwgNjksIDEyOCwgNzcsIDY1LCA2NywgODIsIDc5LCA3OCwgMTI4LCA3NywgNjUsIAorICAgIDY3LCA4MiwgNzksIDIwNiwgNzcsIDY1LCA2NywgNzIsIDczLCA3OCwgNjksIDEyOCwgNzcsIDY1LCA2NSwgODksIDg5LCA2NSwgCisgICAgNjUsIDEyOCwgNzcsIDY1LCA2NSwgNzMsIDEyOCwgNzcsIDY1LCA2NSwgMTI4LCA3NywgNjUsIDUwLCAxMjgsIDc3LCA0OCwgCisgICAgNTIsIDUyLCAxMjgsIDc3LCA0OCwgNTIsIDUxLCAxMjgsIDc3LCA0OCwgNTIsIDUwLCAxMjgsIDc3LCA0OCwgNTIsIDQ5LCAKKyAgICAxMjgsIDc3LCA0OCwgNTIsIDQ4LCA2NSwgMTI4LCA3NywgNDgsIDUyLCA0OCwgMTI4LCA3NywgNDgsIDUxLCA1NywgMTI4LCAKKyAgICA3NywgNDgsIDUxLCA1NiwgMTI4LCA3NywgNDgsIDUxLCA1NSwgMTI4LCA3NywgNDgsIDUxLCA1NCwgMTI4LCA3NywgNDgsIAorICAgIDUxLCA1MywgMTI4LCA3NywgNDgsIDUxLCA1MiwgMTI4LCA3NywgNDgsIDUxLCA1MSwgNjYsIDEyOCwgNzcsIDQ4LCA1MSwgCisgICAgNTEsIDY1LCAxMjgsIDc3LCA0OCwgNTEsIDUxLCAxMjgsIDc3LCA0OCwgNTEsIDUwLCAxMjgsIDc3LCA0OCwgNTEsIDQ5LCAKKyAgICA2NSwgMTI4LCA3NywgNDgsIDUxLCA0OSwgMTI4LCA3NywgNDgsIDUxLCA0OCwgMTI4LCA3NywgNDgsIDUwLCA1NywgMTI4LCAKKyAgICA3NywgNDgsIDUwLCA1NiwgNjUsIDEyOCwgNzcsIDQ4LCA1MCwgNTYsIDEyOCwgNzcsIDQ4LCA1MCwgNTUsIDEyOCwgNzcsIAorICAgIDQ4LCA1MCwgNTQsIDEyOCwgNzcsIDQ4LCA1MCwgNTMsIDEyOCwgNzcsIDQ4LCA1MCwgNTIsIDY1LCAxMjgsIDc3LCA0OCwgCisgICAgNTAsIDUyLCAxMjgsIDc3LCA0OCwgNTAsIDUxLCAxMjgsIDc3LCA0OCwgNTAsIDUwLCA2NSwgMTI4LCA3NywgNDgsIDUwLCAKKyAgICA1MCwgMTI4LCA3NywgNDgsIDUwLCA0OSwgMTI4LCA3NywgNDgsIDUwLCA0OCwgMTI4LCA3NywgNDgsIDQ5LCA1NywgMTI4LCAKKyAgICA3NywgNDgsIDQ5LCA1NiwgMTI4LCA3NywgNDgsIDQ5LCA1NSwgNjUsIDEyOCwgNzcsIDQ4LCA0OSwgNTUsIDEyOCwgNzcsIAorICAgIDQ4LCA0OSwgNTQsIDY1LCAxMjgsIDc3LCA0OCwgNDksIDU0LCAxMjgsIDc3LCA0OCwgNDksIDUzLCA2NSwgMTI4LCA3NywgCisgICAgNDgsIDQ5LCA1MywgMTI4LCA3NywgNDgsIDQ5LCA1MiwgMTI4LCA3NywgNDgsIDQ5LCA1MSwgMTI4LCA3NywgNDgsIDQ5LCAKKyAgICA1MCwgNzIsIDEyOCwgNzcsIDQ4LCA0OSwgNTAsIDcxLCAxMjgsIDc3LCA0OCwgNDksIDUwLCA3MCwgMTI4LCA3NywgNDgsIAorICAgIDQ5LCA1MCwgNjksIDEyOCwgNzcsIDQ4LCA0OSwgNTAsIDY4LCAxMjgsIDc3LCA0OCwgNDksIDUwLCA2NywgMTI4LCA3NywgCisgICAgNDgsIDQ5LCA1MCwgNjYsIDEyOCwgNzcsIDQ4LCA0OSwgNTAsIDY1LCAxMjgsIDc3LCA0OCwgNDksIDUwLCAxMjgsIDc3LCAKKyAgICA0OCwgNDksIDQ5LCAxMjgsIDc3LCA0OCwgNDksIDQ4LCA2NSwgMTI4LCA3NywgNDgsIDQ5LCA0OCwgMTI4LCA3NywgNDgsIAorICAgIDQ4LCA1NywgMTI4LCA3NywgNDgsIDQ4LCA1NiwgMTI4LCA3NywgNDgsIDQ4LCA1NSwgMTI4LCA3NywgNDgsIDQ4LCA1NCwgCisgICAgMTI4LCA3NywgNDgsIDQ4LCA1MywgMTI4LCA3NywgNDgsIDQ4LCA1MiwgMTI4LCA3NywgNDgsIDQ4LCA1MSwgNjUsIDEyOCwgCisgICAgNzcsIDQ4LCA0OCwgNTEsIDEyOCwgNzcsIDQ4LCA0OCwgNTAsIDEyOCwgNzcsIDQ4LCA0OCwgNDksIDY2LCAxMjgsIDc3LCAKKyAgICA0OCwgNDgsIDQ5LCA2NSwgMTI4LCA3NywgNDgsIDQ4LCA0OSwgMTI4LCA3NiwgMjE4LCA3NiwgODksIDg5LCAxMjgsIDc2LCAKKyAgICA4OSwgODgsIDEyOCwgNzYsIDg5LCA4NCwgMTI4LCA3NiwgODksIDgyLCA4OCwgMTI4LCA3NiwgODksIDgyLCAxMjgsIDc2LCAKKyAgICA4OSwgODAsIDEyOCwgNzYsIDg5LCA2OCwgNzMsIDY1LCAyMDYsIDc2LCA4OSwgNjcsIDczLCA2NSwgMjA2LCA3NiwgODgsIAorICAgIDEyOCwgNzYsIDg3LCA3OSwgNzksIDEyOCwgNzYsIDg3LCA3OSwgMTI4LCA3NiwgODcsIDczLCA3MywgMTI4LCA3NiwgODcsIAorICAgIDczLCAxMjgsIDc2LCA4NywgNjksIDEyOCwgNzYsIDg3LCA2NSwgNjUsIDEyOCwgNzYsIDg3LCA2NSwgMTI4LCA3NiwgODUsIAorICAgIDg4LCAxMjgsIDc2LCA4NSwgODUsIDEyOCwgNzYsIDg1LCA4NCwgMTI4LCA3NiwgODUsIDgyLCA4OCwgMTI4LCA3NiwgODUsIAorICAgIDgwLCAxMjgsIDc2LCA4NSwgNzksIDg4LCAxMjgsIDc2LCA4NSwgNzksIDg0LCAxMjgsIDc2LCA4NSwgNzksIDgwLCAxMjgsIAorICAgIDc2LCA4NSwgNzksIDEyOCwgNzYsIDg1LCA3OCwgNzEsIDgzLCA3MywgMTI4LCA3NiwgODUsIDc4LCA2NSwgODQsIDE5NywgCisgICAgNzYsIDg1LCAyMDUsIDc2LCA4NSwgNzYsIDEyOCwgNzYsIDg1LCA3MywgODMsIDEyOCwgNzYsIDg1LCA3MiwgODUsIDgyLCAKKyAgICAxMjgsIDc2LCA4NSwgNzIsIDEyOCwgNzYsIDg1LCA3MSwgNzEsIDY1LCA3MSwgNjksIDEyOCwgNzYsIDg1LCA3MSwgNjUsIAorICAgIDc2LCAxMjgsIDc2LCA4NSwgNzEsIDY1LCAyMDQsIDc2LCA4NSwgNjksIDEyOCwgNzYsIDg1LCA2NSwgNjksIDgwLCAxMjgsIAorICAgIDc2LCA4NSwgNTEsIDEyOCwgNzYsIDg1LCA1MCwgMTI4LCA3NiwgODUsIDE3OCwgNzYsIDgyLCA3OSwgMTI4LCA3NiwgODIsIAorICAgIDc3LCAxMjgsIDc2LCA4MiwgNzMsIDEyOCwgNzYsIDgyLCA2OSwgMTI4LCA3NiwgNzksIDkwLCA2OSwgNzgsIDcxLCA2OSwgCisgICAgMTI4LCA3NiwgNzksIDkwLCA2OSwgNzgsIDcxLCAxOTcsIDc2LCA3OSwgODgsIDEyOCwgNzYsIDc5LCA4NywgNjksIDgyLCAKKyAgICA2OSwgMTk2LCA3NiwgNzksIDg3LCA2OSwgMjEwLCA3NiwgNzksIDg3LCA0NSwgMTg1LCA3NiwgNzksIDg2LCAxOTcsIDc2LCAKKyAgICA3OSwgODUsIDgyLCA2OSwgMTI4LCA3NiwgNzksIDg1LCA2OCwgODMsIDgwLCA2OSwgNjUsIDc1LCA2OSwgODIsIDEyOCwgNzYsIAorICAgIDc5LCA4NSwgNjgsIDc2LCAyMTcsIDc2LCA3OSwgODQsIDg1LCA4MywgMTI4LCA3NiwgNzksIDg0LCAxMjgsIDc2LCA3OSwgCisgICAgODIsIDgyLCA4OSwgMTI4LCA3NiwgNzksIDgyLCA4MiwgNjUsIDczLCA3OCwgNjksIDEyOCwgNzYsIDc5LCA4MSwgMTI4LCAKKyAgICA3NiwgNzksIDgwLCAxMjgsIDc2LCA3OSwgNzksIDg0LCAxMjgsIDc2LCA3OSwgNzksIDgwLCA2OSwgMTk2LCA3NiwgNzksIAorICAgIDc5LCA4MCwgMTI4LCA3NiwgNzksIDc5LCAyMDgsIDc2LCA3OSwgNzksIDc4LCAxMjgsIDc2LCA3OSwgNzksIDIwMywgNzYsIAorICAgIDc5LCA3OSwgMTI4LCA3NiwgNzksIDc4LCA4MywgODUsIDc3LCAxMjgsIDc2LCA3OSwgNzgsIDcxLCA2NSwgMTI4LCA3NiwgCisgICAgNzksIDc4LCA3MSwgMTkzLCA3NiwgNzksIDc4LCA3MSwgNDUsIDY2LCA4MiwgNjUsIDc4LCA2NywgNzIsIDQ1LCA4OSwgODIsIAorICAgIDEyOCwgNzYsIDc5LCA3OCwgNzEsIDQ1LCA2NiwgODIsIDY1LCA3OCwgNjcsIDcyLCA0NSwgODMsIDc5LCAyMDQsIDc2LCA3OSwgCisgICAgNzgsIDcxLCA0NSwgNjYsIDgyLCA2NSwgNzgsIDY3LCA3MiwgNDUsIDc5LCA4MywgMjExLCA3NiwgNzksIDc4LCA3MSwgNDUsIAorICAgIDY2LCA4MiwgNjUsIDc4LCA2NywgNzIsIDQ1LCA3NywgNjUsIDY4LCAyMTAsIDc2LCA3OSwgNzgsIDcxLCA0NSwgNjYsIDgyLCAKKyAgICA2NSwgNzgsIDY3LCA3MiwgNDUsIDcyLCA2NSwgNzEsIDY1LCA3NiwgMjA0LCA3NiwgNzksIDc4LCA3MSwgNDUsIDY2LCA4MiwgCisgICAgNjUsIDc4LCA2NywgNzIsIDQ1LCA2NSwgMjEwLCA3NiwgNzksIDc3LCA3NywgNjUsIDY5LCAxMjgsIDc2LCA3OSwgNzcsIAorICAgIDEyOCwgNzYsIDc5LCAyMDUsIDc2LCA3OSwgNzYsIDc2LCA3MywgODAsIDc5LCA4MCwgMTI4LCA3NiwgNzksIDc2LCA3NiwgCisgICAgMTI4LCA3NiwgNzksIDcxLCAyMTAsIDc2LCA3OSwgNzEsIDc5LCA4NCwgODksIDgwLCAxOTcsIDc2LCA3OSwgNzEsIDc5LCAKKyAgICA3MSwgODIsIDY1LCAyMDUsIDc2LCA3OSwgNzEsIDEyOCwgNzYsIDc5LCA2OCwgNjksIDgzLCA4NCwgNzksIDc4LCA2OSwgCisgICAgMTI4LCA3NiwgNzksIDY3LCA3OSwgNzcsIDc5LCA4NCwgNzMsIDg2LCA2OSwgMTI4LCA3NiwgNzksIDY3LCA3NSwgNzMsIDc4LCAKKyAgICA3MSwgNDUsIDgzLCA3MiwgNzMsIDcwLCAyMTIsIDc2LCA3OSwgNjcsIDIwMywgNzYsIDc5LCA2NywgNjUsIDg0LCA3MywgODYsIAorICAgIDY5LCAxMjgsIDc2LCA3OSwgNjcsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDc2LCA3OSwgNjUsIDEyOCwgNzYsIDc4LCAxMjgsIAorICAgIDc2LCA3NiwgODUsIDg1LCAxMjgsIDc2LCA3NiwgNzksIDc5LCAxMjgsIDc2LCA3NiwgNzYsIDg1LCA4NSwgMTI4LCA3NiwgCisgICAgNzYsIDc2LCA4NSwgMTI4LCA3NiwgNzYsIDc2LCA3OSwgNzksIDEyOCwgNzYsIDc2LCA3NiwgNzksIDEyOCwgNzYsIDc2LCAKKyAgICA3NiwgNzMsIDczLCAxMjgsIDc2LCA3NiwgNzYsIDczLCAxMjgsIDc2LCA3NiwgNzYsIDY5LCA2OSwgMTI4LCA3NiwgNzYsIAorICAgIDc2LCA2OSwgMTI4LCA3NiwgNzYsIDc2LCA2NSwgODUsIDEyOCwgNzYsIDc2LCA3NiwgNjUsIDczLCAxMjgsIDc2LCA3NiwgCisgICAgNzYsIDY1LCA2NSwgMTI4LCA3NiwgNzYsIDc2LCA2NSwgMTI4LCA3NiwgNzYsIDc2LCAxMjgsIDc2LCA3NCwgODUsIDY4LCAKKyAgICA3MywgNzQsIDY5LCAxMjgsIDc2LCA3NCwgNjksIDEyOCwgNzYsIDc0LCAxMjgsIDc2LCA3MywgODgsIDEyOCwgNzYsIDczLCAKKyAgICA4NywgNzgsIDEyOCwgNzYsIDczLCA4NiwgODIsIDE5NywgNzYsIDczLCA4NCwgODQsIDc2LCAxOTcsIDc2LCA3MywgODQsIAorICAgIDg0LCA2OSwgMjEwLCA3NiwgNzMsIDg0LCA4MiwgMTkzLCA3NiwgNzMsIDg0LCAxMjgsIDc2LCA3MywgODMsIDIxMywgNzYsIAorICAgIDczLCA4MiwgMTkzLCA3NiwgNzMsIDgxLCA4NSwgNzMsIDE5NiwgNzYsIDczLCA4MSwgMTI4LCA3NiwgNzMsIDgwLCA4MywgCisgICAgODQsIDczLCA2NywgNzUsIDEyOCwgNzYsIDczLCA3OCwgNzUsIDczLCA3OCwgMTk5LCA3NiwgNzMsIDc4LCAyMDMsIDc2LCAKKyAgICA3MywgNzgsIDcxLCA4MywgNjUsIDEyOCwgNzYsIDczLCA3OCwgNjksIDgzLCAxMjgsIDc2LCA3MywgNzgsIDY5LCAyMTEsIAorICAgIDc2LCA3MywgNzgsIDY5LCA0NSwgNTcsIDEyOCwgNzYsIDczLCA3OCwgNjksIDQ1LCA1NSwgMTI4LCA3NiwgNzMsIDc4LCA2OSwgCisgICAgNDUsIDUxLCAxMjgsIDc2LCA3MywgNzgsIDY5LCA0NSwgNDksIDEyOCwgNzYsIDczLCA3NywgNzcsIDg1LCA1MiwgMTI4LCAKKyAgICA3NiwgNzMsIDc3LCA3NywgODUsIDUwLCAxMjgsIDc2LCA3MywgNzcsIDc3LCA4NSwgMTI4LCA3NiwgNzMsIDc3LCA3NywgCisgICAgMjEzLCA3NiwgNzMsIDc3LCA3MywgODQsIDY5LCAxOTYsIDc2LCA3MywgNzcsIDczLCA4NCwgNjUsIDg0LCA3MywgNzksIDc4LCAKKyAgICAxMjgsIDc2LCA3MywgNzcsIDczLCA4NCwgMTI4LCA3NiwgNzMsIDc3LCA2OSwgMTI4LCA3NiwgNzMsIDc3LCA2NiwgMjEzLCAKKyAgICA3NiwgNzMsIDc2LCA4OSwgMTI4LCA3NiwgNzMsIDc2LCA3MywgODQsIDcyLCAxMjgsIDc2LCA3MywgNzYsIDEyOCwgNzYsIAorICAgIDczLCA3MSwgNzIsIDg0LCA3OCwgNzMsIDc4LCA3MSwgMTI4LCA3NiwgNzMsIDcxLCA3MiwgODQsIDcyLCA3OSwgODUsIDgzLCAKKyAgICA2OSwgMTI4LCA3NiwgNzMsIDcxLCA3MiwgODQsIDEyOCwgNzYsIDczLCA3MCwgNjksIDEyOCwgNzYsIDczLCA2OSwgODgsIAorICAgIDEyOCwgNzYsIDczLCA2OSwgODQsIDEyOCwgNzYsIDczLCA2OSwgODAsIDEyOCwgNzYsIDczLCA2OSwgNjksIDEyOCwgNzYsIAorICAgIDczLCA2OSwgMTI4LCA3NiwgNzMsIDY4LCAxMjgsIDc2LCA3MywgNjYsIDgyLCA2NSwgMTI4LCA3NiwgNzMsIDY2LCA2OSwgCisgICAgODIsIDg0LCA4OSwgMTI4LCA3NiwgNzMsIDY1LCA2NiwgNzMsIDc2LCA3MywgODQsIDIxNywgNzYsIDcyLCA3MywgNzMsIAorICAgIDEyOCwgNzYsIDcyLCA2NSwgODYsIDczLCA4OSwgNjUsIDc4LCA3MywgMTI4LCA3NiwgNzIsIDY1LCAxOTksIDc2LCA3MiwgCisgICAgNjUsIDY1LCAxMjgsIDc2LCA3MiwgMTI4LCA3NiwgNjksIDkwLCA3MiwgMTI4LCA3NiwgNjksIDg4LCAxMjgsIDc2LCA2OSwgCisgICAgODYsIDY5LCAyMDQsIDc2LCA2OSwgODUsIDc3LCAxMjgsIDc2LCA2OSwgODUsIDY1LCA2OSwgODAsIDEyOCwgNzYsIDY5LCAKKyAgICA4NSwgNjUsIDY5LCA3NywgMTI4LCA3NiwgNjksIDg1LCAxMjgsIDc2LCA2OSwgMjEzLCA3NiwgNjksIDg0LCA4NCwgNjksIAorICAgIDgyLCA4MywgMTI4LCA3NiwgNjksIDg0LCA4NCwgNjksIDgyLCAxMjgsIDc2LCA2OSwgMjEyLCA3NiwgNjksIDgzLCA4MywgCisgICAgNjksIDIxMCwgNzYsIDY5LCA4MywgODMsIDQ1LCA4NCwgNzIsIDY1LCA3OCwgMTI4LCA3NiwgNjksIDgzLCA4MywgNDUsIDg0LCAKKyAgICA3MiwgNjUsIDIwNiwgNzYsIDY5LCA4MCwgMTI4LCA3NiwgNjksIDc5LCA4MCwgNjUsIDgyLCA2OCwgMTI4LCA3NiwgNjksIAorICAgIDc5LCAxMjgsIDc2LCA2OSwgNzgsIDg0LCA3MywgNjcsIDg1LCA3NiwgNjUsIDIxMCwgNzYsIDY5LCA3OCwgNzMsIDgzLCAKKyAgICAxMjgsIDc2LCA2OSwgNzgsIDcxLCA4NCwgNzIsIDY5LCA3OCwgNjksIDgyLCAxMjgsIDc2LCA2OSwgNzgsIDcxLCA4NCwgCisgICAgMjAwLCA3NiwgNjksIDc4LCA3MSwgNjUsIDEyOCwgNzYsIDY5LCA3OCwgNzEsIDE5MywgNzYsIDY5LCA3NywgNzksIDc4LCAKKyAgICAxMjgsIDc2LCA2OSwgNzcsIDc5LCA3MywgMTI4LCA3NiwgNjksIDc2LCA2OSwgODQsIDEyOCwgNzYsIDY5LCA3NiwgNjksIAorICAgIDIxMiwgNzYsIDY5LCAyMDMsIDc2LCA2OSwgNzMsIDc3LCA3NywgNjUsIDEyOCwgNzYsIDY5LCA3MywgNzcsIDc3LCAxOTMsIAorICAgIDc2LCA2OSwgNzEsIDgzLCAxMjgsIDc2LCA2OSwgNzEsIDczLCA3OSwgNzgsIDEyOCwgNzYsIDY5LCA3MSwgNjksIDg0LCA3OSwgCisgICAgMjExLCA3NiwgNjksIDcxLCAxMjgsIDc2LCA2OSwgNzAsIDg0LCA4NywgNjUsIDgyLCA2OCwgODMsIDEyOCwgNzYsIDY5LCAKKyAgICA3MCwgODQsIDQ1LCA4NCwgNzksIDQ1LCA4MiwgNzMsIDcxLCA3MiwgMjEyLCA3NiwgNjksIDcwLCA4NCwgNDUsIDgzLCA4NCwgCisgICAgNjksIDIwNSwgNzYsIDY5LCA3MCwgODQsIDQ1LCA4MywgNzMsIDY4LCAxOTcsIDc2LCA2OSwgNzAsIDg0LCA0NSwgODMsIDcyLCAKKyAgICA2NSwgNjgsIDY5LCAxOTYsIDc2LCA2OSwgNzAsIDg0LCA0NSwgODAsIDc5LCA3MywgNzgsIDg0LCA3MywgNzgsIDE5OSwgNzYsIAorICAgIDY5LCA3MCwgODQsIDQ1LCA3MiwgNjUsIDc4LCA2OCwgNjksIDE5NiwgNzYsIDY5LCA3MCwgODQsIDQ1LCA3MiwgNjUsIDc4LCAKKyAgICAxOTYsIDc2LCA2OSwgNzAsIDg0LCA0NSwgNzAsIDY1LCA2NywgNzMsIDc4LCAxOTksIDc2LCA2OSwgNzAsIDg0LCAxMjgsIAorICAgIDc2LCA2OSwgNjksIDgyLCA2NSwgNjksIDg3LCA2NSwgMTI4LCA3NiwgNjksIDY5LCA3NSwgMTI4LCA3NiwgNjksIDY5LCA2OSwgCisgICAgNjksIDEyOCwgNzYsIDY5LCA2OCwgNzEsIDY5LCA4MiwgMTI4LCA3NiwgNjksIDY1LCA4NCwgNzIsIDY5LCA4MiwgMTI4LCAKKyAgICA3NiwgNjksIDY1LCA3MCwgMTI4LCA3NiwgNjksIDY1LCAxOTgsIDc2LCA2OSwgNjUsIDY4LCA3MywgNzgsIDE5OSwgNzYsIAorICAgIDY5LCA2NSwgNjgsIDY5LCA4MiwgMTI4LCA3NiwgNjksIDY1LCAxOTYsIDc2LCA2OCwgNjUsIDc4LCAxMjgsIDc2LCA2OCwgCisgICAgNTAsIDEyOCwgNzYsIDY3LCAyMDEsIDc2LCA2NywgMTk3LCA3NiwgNjUsIDkwLCAyMTcsIDc2LCA2NSwgODksIDY1LCA3OCwgCisgICAgNzgsIDY1LCAxMjgsIDc2LCA2NSwgODgsIDEyOCwgNzYsIDY1LCA4NywgMTI4LCA3NiwgNjUsIDIxNSwgNzYsIDY1LCA4NSwgCisgICAgNzYsIDY1LCAxMjgsIDc2LCA2NSwgODUsIDc1LCA2NSwgMjE4LCA3NiwgNjUsIDg0LCA3MywgNzgsIDY1LCA4NCwgMTk3LCAKKyAgICA3NiwgNjUsIDg0LCA3MywgNzUsIDEyOCwgNzYsIDY1LCA4NCwgNjksIDgyLCA2NSwgMjA0LCA3NiwgNjUsIDg0LCAxOTcsIAorICAgIDc2LCA2NSwgODMsIDIxMiwgNzYsIDY1LCA4MiwgODksIDc4LCA3MSwgNjksIDY1LCAyMDQsIDc2LCA2NSwgODIsIDcxLCA2OSwgCisgICAgMjEwLCA3NiwgNjUsIDgyLCA3MSwgNjksIDEyOCwgNzYsIDY1LCA4MiwgNzEsIDE5NywgNzYsIDY1LCA4MSwgMTI4LCA3NiwgCisgICAgNjUsIDgwLCA2NSwgODEsIDEyOCwgNzYsIDY1LCA4MCwgMTI4LCA3NiwgNjUsIDc4LCA4NCwgNjksIDgyLCA3OCwgMTI4LCAKKyAgICA3NiwgNjUsIDc4LCA3MSwgODUsIDY1LCA3MSwgMTk3LCA3NiwgNjUsIDc4LCA2OSwgODMsIDEyOCwgNzYsIDY1LCA3NywgNjksIAorICAgIDY4LCA3MiwgMTI4LCA3NiwgNjUsIDc3LCA2OSwgNjgsIDEyOCwgNzYsIDY1LCA3NywgNjksIDE5NiwgNzYsIDY1LCA3NywgCisgICAgNjksIDEyOCwgNzYsIDY1LCA3NywgMTk3LCA3NiwgNjUsIDc3LCA2OCwgNjUsIDEyOCwgNzYsIDY1LCA3NywgNjgsIDEyOCwgCisgICAgNzYsIDY1LCA3NywgNjYsIDY4LCAxOTMsIDc2LCA2NSwgNzcsIDY1LCA2OCwgNzIsIDEyOCwgNzYsIDY1LCA3NiwgMTI4LCAKKyAgICA3NiwgNjUsIDIwNCwgNzYsIDY1LCA3NSwgNzUsIDcyLCA2NSwgNzgsIDcxLCA4OSwgNjUsIDc5LCAxMjgsIDc2LCA2NSwgNzQsIAorICAgIDY1LCA3OCwgODksIDY1LCA3NiwgNjUsIDc4LCAxMjgsIDc2LCA2NSwgMjAxLCA3NiwgNjUsIDcyLCA4MywgNzIsIDg1LCAKKyAgICAxMjgsIDc2LCA2NSwgNzIsIDEyOCwgNzYsIDY1LCA3MSwgODUsIDgzLCAxMjgsIDc2LCA2NSwgNzEsIDIxMywgNzYsIDY1LCAKKyAgICA3MSwgNjUsIDgyLCAxMjgsIDc2LCA2NSwgNzEsIDY1LCAyMTAsIDc2LCA2NSwgNzEsIDY1LCA2NiwgMTI4LCA3NiwgNjUsIAorICAgIDcxLCA2NSwgMTk0LCA3NiwgNjUsIDY5LCA4NiwgMTI4LCA3NiwgNjUsIDY5LCAxMjgsIDc2LCA2NSwgNjgsIDIxNywgNzYsIAorICAgIDY1LCA2NywgNzUsIDEyOCwgNzYsIDY1LCA2NywgNjUsIDEyOCwgNzYsIDY1LCA2NiwgNzksIDg1LCA4MiwgNzMsIDc4LCA3MSwgCisgICAgMTI4LCA3NiwgNjUsIDY2LCA3OSwgODIsIDEyOCwgNzYsIDY1LCA2NiwgNzMsIDY1LCA3NiwgNzMsIDkwLCA2NSwgODQsIDczLCAKKyAgICA3OSwgMjA2LCA3NiwgNjUsIDY2LCA3MywgNjUsIDIwNCwgNzYsIDY1LCA2NiwgNjUsIDg0LCAxMjgsIDc2LCA2NSwgNjUsIAorICAgIDc4LCA2NSwgNjksIDEyOCwgNzYsIDY1LCA2NSwgNzgsIDEyOCwgNzYsIDY1LCA2NSwgNzcsIDg1LCAxMjgsIDc2LCA2NSwgCisgICAgNjUsIDc3LCAxMjgsIDc2LCA2NSwgNjUsIDczLCAxMjgsIDc2LCA0OCwgNDgsIDU0LCA2NSwgMTI4LCA3NiwgNDgsIDQ4LCAKKyAgICA1MCwgNjUsIDEyOCwgNzYsIDQ1LCA4NCwgODksIDgwLCAxOTcsIDc2LCA0NSwgODMsIDcyLCA2NSwgODAsIDY5LCAxOTYsIAorICAgIDc1LCA4OSwgODUsIDgyLCA3MywgNzMsIDEyOCwgNzUsIDg5LCA4NSwgMTI4LCA3NSwgODksIDc5LCAxMjgsIDc1LCA4OSwgCisgICAgNzYsIDczLCA4MywgNzcsIDY1LCAxMjgsIDc1LCA4OSwgNzMsIDEyOCwgNzUsIDg5LCA2OSwgMTI4LCA3NSwgODksIDY1LCAKKyAgICA4NCwgNzIsIDc5LCAyMTEsIDc1LCA4OSwgNjUsIDY1LCAxMjgsIDc1LCA4OSwgNjUsIDEyOCwgNzUsIDg4LCA4NywgNzMsIAorICAgIDEyOCwgNzUsIDg4LCA4NywgNjksIDY5LCAxMjgsIDc1LCA4OCwgODcsIDY5LCAxMjgsIDc1LCA4OCwgODcsIDY1LCA2NSwgCisgICAgMTI4LCA3NSwgODgsIDg3LCA2NSwgMTI4LCA3NSwgODgsIDg1LCAxMjgsIDc1LCA4OCwgNzksIDEyOCwgNzUsIDg4LCA3MywgCisgICAgMTI4LCA3NSwgODgsIDY5LCA2OSwgMTI4LCA3NSwgODgsIDY5LCAxMjgsIDc1LCA4OCwgNjUsIDY1LCAxMjgsIDc1LCA4OCwgCisgICAgNjUsIDEyOCwgNzUsIDg3LCA4NSwgNTEsIDQ5LCA1NiwgMTI4LCA3NSwgODcsIDc5LCA3OSwgMTI4LCA3NSwgODcsIDc5LCAKKyAgICAxMjgsIDc1LCA4NywgNzMsIDczLCAxMjgsIDc1LCA4NywgNzMsIDEyOCwgNzUsIDg3LCA2OSwgNjksIDEyOCwgNzUsIDg3LCAKKyAgICA2OSwgMTI4LCA3NSwgODcsIDY1LCA4OSwgMTI4LCA3NSwgODcsIDY1LCA2OSwgODQsIDEyOCwgNzUsIDg3LCA2NSwgNjUsIAorICAgIDEyOCwgNzUsIDg2LCA2NSwgMTI4LCA3NSwgODYsIDEyOCwgNzUsIDg1LCA4OCwgMTI4LCA3NSwgODUsIDg1LCA3MiwgMTI4LCAKKyAgICA3NSwgODUsIDg0LCAxMjgsIDc1LCA4NSwgODMsIDc3LCA2NSwgMTI4LCA3NSwgODUsIDgzLCA3MiwgODUsIDUwLCAxMjgsIAorICAgIDc1LCA4NSwgODIsIDg4LCAxMjgsIDc1LCA4NSwgODIsIDg1LCA5MCwgNjksIDczLCA4MiwgNzksIDEyOCwgNzUsIDg1LCA4MiwgCisgICAgODQsIDEyOCwgNzUsIDg1LCA4MiwgNzksIDc5LCA3OCwgNjksIDEyOCwgNzUsIDg1LCA4MiwgMTI4LCA3NSwgODUsIDIxMCwgCisgICAgNzUsIDg1LCA4MSwgMTI4LCA3NSwgODUsIDc5LCA4OCwgMTI4LCA3NSwgODUsIDc5LCA4MCwgMTI4LCA3NSwgODUsIDc5LCAKKyAgICAyMDgsIDc1LCA4NSwgNzksIDc3LCAxMjgsIDc1LCA4NSwgNzksIDEyOCwgNzUsIDg1LCA3OCwgNzEsIDEyOCwgNzUsIDg1LCAKKyAgICA3OCwgNjgsIDY4LCA2NSwgNzYsIDczLCA4OSwgNjUsIDEyOCwgNzUsIDg1LCA3NiwgMTI4LCA3NSwgODUsIDIwNCwgNzUsIAorICAgIDg1LCA2OSwgODQsIDEyOCwgNzUsIDg1LCA1NSwgMTI4LCA3NSwgODUsIDUyLCAxMjgsIDc1LCA4NSwgMTgwLCA3NSwgODUsIAorICAgIDUxLCAxMjgsIDc1LCA4NSwgMTc5LCA3NSwgODQsIDEyOCwgNzUsIDgzLCA4MywgODUsIDg1LCAxMjgsIDc1LCA4MywgODMsIAorICAgIDg1LCAxMjgsIDc1LCA4MywgODMsIDc5LCA3OSwgMTI4LCA3NSwgODMsIDgzLCA3OSwgMTI4LCA3NSwgODMsIDgzLCA3MywgCisgICAgNzMsIDEyOCwgNzUsIDgzLCA4MywgNzMsIDEyOCwgNzUsIDgzLCA4MywgNjksIDY5LCAxMjgsIDc1LCA4MywgODMsIDY5LCAKKyAgICAxMjgsIDc1LCA4MywgODMsIDY1LCA4NSwgMTI4LCA3NSwgODMsIDgzLCA2NSwgNzMsIDEyOCwgNzUsIDgzLCA4MywgNjUsIAorICAgIDY1LCAxMjgsIDc1LCA4MywgODMsIDY1LCAxMjgsIDc1LCA4MywgODMsIDEyOCwgNzUsIDgzLCA3MywgMTI4LCA3NSwgODIsIAorICAgIDY5LCA3NywgNjUsIDgzLCA4NCwgNzMsIDEyOCwgNzUsIDgyLCA2NSwgODQsIDczLCA3NywgNzksIDg5LCA4MCwgNzksIDgyLCAKKyAgICA4MiwgNzksIDc5LCA3OCwgMTI4LCA3NSwgODIsIDY1LCA4NCwgNzMsIDc3LCA3OSwgNzUsIDc5LCA4NSwgNzAsIDczLCA4MywgCisgICAgNzcsIDY1LCAxMjgsIDc1LCA4MiwgNjUsIDg0LCA3MywgNzcsIDY1LCA4NCwgNjUsIDEyOCwgNzUsIDgyLCA2NSwgODQsIDczLCAKKyAgICA3NywgMTkzLCA3NSwgODAsIDg1LCAxMjgsIDc1LCA4MCwgNzksIDgxLCAxMjgsIDc1LCA4MCwgNzksIDc5LCAxMjgsIDc1LCAKKyAgICA4MCwgNzksIDEyOCwgNzUsIDgwLCA3MywgMTI4LCA3NSwgODAsIDY5LCA4NSwgODgsIDEyOCwgNzUsIDgwLCA2OSwgNjksIAorICAgIDEyOCwgNzUsIDgwLCA2OSwgMTI4LCA3NSwgODAsIDY1LCA4MiwgNjUsIDgxLCAxMjgsIDc1LCA4MCwgNjUsIDc4LCAxMjgsIAorICAgIDc1LCA4MCwgNjUsIDEyOCwgNzUsIDc5LCA4OCwgMTI4LCA3NSwgNzksIDg2LCA4NSwgODUsIDEyOCwgNzUsIDc5LCA4NCwgCisgICAgNzksIDEyOCwgNzUsIDc5LCA4MiwgODUsIDc4LCA2NSwgMTI4LCA3NSwgNzksIDgyLCA3OSwgNzgsIDczLCA4MywgMTI4LCAKKyAgICA3NSwgNzksIDgyLCA2OSwgNjUsIDIwNiwgNzUsIDc5LCA4MiwgNjUsIDc4LCA3MywgMTk1LCA3NSwgNzksIDgxLCA3OCwgNjgsIAorICAgIDc5LCA3OCwgMTI4LCA3NSwgNzksIDgwLCA4MCwgNjUsIDEyOCwgNzUsIDc5LCA4MCwgMTI4LCA3NSwgNzksIDc5LCA4MCwgCisgICAgNzksIDEyOCwgNzUsIDc5LCA3OSwgNzcsIDg1LCA4NSwgODQsIDEyOCwgNzUsIDc5LCA3OSwgMTI4LCA3NSwgNzksIDc4LCAKKyAgICA4NCwgNjksIDg2LCA3NywgNjUsIDEyOCwgNzUsIDc5LCA3OCwgODQsIDY5LCA4NiwgNzcsIDE5MywgNzUsIDc5LCA3NywgCisgICAgMjAxLCA3NSwgNzksIDc3LCA2NiwgODUsIDg2LCA2NSwgMTI4LCA3NSwgNzksIDc3LCA2NiwgODUsIDg2LCAxOTMsIDc1LCAKKyAgICA3OSwgNzcsIDY2LCAyMTMsIDc1LCA3OSwgNzUsIDc5LCAxMjgsIDc1LCA3OSwgNzUsIDEyOCwgNzUsIDc5LCAyMDMsIDc1LCAKKyAgICA3OSwgNzMsIDEyOCwgNzUsIDc5LCAyMDEsIDc1LCA3OSwgNzIsIDEyOCwgNzUsIDc5LCA3MSwgNzIsIDc5LCA3NywgMTI4LCAKKyAgICA3NSwgNzksIDY5LCA4NCwgMTI4LCA3NSwgNzksIDY1LCA3NiwgNjUsIDEyOCwgNzUsIDc5LCA2NSwgMTI4LCA3NSwgNzgsIAorICAgIDczLCA3MSwgNzIsIDg0LCAxMjgsIDc1LCA3OCwgNzMsIDcxLCA3MiwgMjEyLCA3NSwgNzgsIDczLCA3MCwgNjksIDEyOCwgCisgICAgNzUsIDc4LCA3MywgNzAsIDE5NywgNzUsIDc3LCAxMjgsIDc1LCAyMDUsIDc1LCA3NiwgNzMsIDg0LCA3OSwgNzgsIDEyOCwgCisgICAgNzUsIDc2LCA2NSwgODMsIDc3LCA2NSwgMTI4LCA3NSwgNzYsIDY1LCA4MywgNzcsIDE5MywgNzUsIDc2LCA2NSwgMTI4LCAKKyAgICA3NSwgNzYsIDEyOCwgNzUsIDc1LCA4NSwgMTI4LCA3NSwgNzUsIDc5LCAxMjgsIDc1LCA3NSwgNzMsIDEyOCwgNzUsIDc1LCAKKyAgICA2OSwgNjksIDEyOCwgNzUsIDc1LCA2OSwgMTI4LCA3NSwgNzUsIDY1LCAxMjgsIDc1LCA3NSwgMTI4LCA3NSwgNzQsIDY5LCAKKyAgICAxMjgsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDQ1LCA4NCwgNzMsIDc1LCA2OSwgODUsIDg0LCAxMjgsIDc1LCA3MywgODksIAorICAgIDY5LCA3OSwgNzUsIDQ1LCA4MywgNzMsIDc5LCA4MywgNDUsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDEyOCwgNzUsIDczLCAKKyAgICA4OSwgNjksIDc5LCA3NSwgNDUsIDgyLCA3MywgNjksIDg1LCA3NiwgMTI4LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCA0NSwgCisgICAgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDQ1LCA3OCwgNzMsIDY5LCA4NSwgNzgsIAorICAgIDEyOCwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgNDUsIDc1LCA3MiwgNzMsIDY5LCA4NSwgNzUsIDcyLCAxMjgsIDc1LCA3MywgCisgICAgODksIDY5LCA3OSwgNzUsIDQ1LCA2NywgNzIsIDczLCA2OSwgODUsIDY3LCA3MiwgMTI4LCA3NSwgNzMsIDg5LCA2OSwgNzksIAorICAgIDIwMywgNzUsIDczLCA4OCwgMTI4LCA3NSwgNzMsIDg0LCAxMjgsIDc1LCA3MywgODMsIDgzLCA3MywgNzgsIDE5OSwgNzUsIAorICAgIDczLCA4MywgODMsIDEyOCwgNzUsIDczLCA4MywgMjExLCA3NSwgNzMsIDgzLCA3MywgNzcsIDUzLCAxMjgsIDc1LCA3MywgCisgICAgODMsIDczLCA3NywgMTgxLCA3NSwgNzMsIDgzLCA3MiwgMTI4LCA3NSwgNzMsIDgzLCA2NSwgNzYsIDEyOCwgNzUsIDczLCAKKyAgICA4MiwgNzksIDg3LCA2NSwgODQsIDg0LCA3OSwgMTI4LCA3NSwgNzMsIDgyLCA3OSwgNzcsIDY5LCA2OSwgODQsIDc5LCA4MiwgCisgICAgODUsIDEyOCwgNzUsIDczLCA4MiwgNzksIDcxLCA4NSwgODIsIDY1LCA3NywgODUsIDEyOCwgNzUsIDczLCA4MiwgNzksIAorICAgIDEyOCwgNzUsIDczLCA4MiwgNzEsIDcyLCA3MywgMjE4LCA3NSwgNzMsIDgxLCAxMjgsIDc1LCA3MywgODAsIDEyOCwgNzUsIAorICAgIDczLCAyMDgsIDc1LCA3MywgNzgsIDgzLCA3MiwgNzMsIDgwLCAxMjgsIDc1LCA3MywgNzgsIDY4LCA2OSwgODIsIDcxLCA2NSwgCisgICAgODIsIDg0LCA2OSwgNzgsIDEyOCwgNzUsIDczLCA3NywgNzksIDc4LCA3OSwgMTI4LCA3NSwgNzMsIDczLCAxMjgsIDc1LCAKKyAgICA3MywgNzIsIDEyOCwgNzUsIDczLCA2OSwgODgsIDEyOCwgNzUsIDczLCA2OSwgODAsIDEyOCwgNzUsIDczLCA2OSwgNjksIAorICAgIDc3LCAxMjgsIDc1LCA3MywgNjksIDEyOCwgNzUsIDczLCA2OCwgMTI4LCA3NSwgNzMsIDE5NiwgNzUsIDczLCA2NywgNzUsIAorICAgIDEyOCwgNzUsIDcyLCA5MCwgMTI4LCA3NSwgNzIsIDg3LCA2NSwgNzMsIDEyOCwgNzUsIDcyLCA4NSwgNjksIDc4LCA0NSwgCisgICAgNzYsIDg1LCAxOTcsIDc1LCA3MiwgODUsIDY5LCAyMDYsIDc1LCA3MiwgODUsIDY4LCA2NSwgNzcsIDEyOCwgNzUsIDcyLCAKKyAgICA4NSwgNjUsIDg0LCAxMjgsIDc1LCA3MiwgNzksIDg1LCAxMjgsIDc1LCA3MiwgNzksIDIxMiwgNzUsIDcyLCA3OSwgNzgsIAorICAgIDEyOCwgNzUsIDcyLCA3OSwgNzcsIDg1LCA4NCwgMTI4LCA3NSwgNzIsIDc5LCAxMjgsIDc1LCA3MiwgMjA3LCA3NSwgNzIsIAorICAgIDc3LCAyMTMsIDc1LCA3MiwgNzMsIDg0LCAxMjgsIDc1LCA3MiwgNzMsIDc4LCA4OSwgNjUsIDEyOCwgNzUsIDcyLCA3MywgCisgICAgNjksIDg1LCA3NSwgMjAwLCA3NSwgNzIsIDczLCAxMjgsIDc1LCA3MiwgNzIsIDc5LCAxMjgsIDc1LCA3MiwgNzIsIDY1LCAKKyAgICAxMjgsIDc1LCA3MiwgNjksIDg0LCA3MiwgMTI4LCA3NSwgNzIsIDY5LCA3MywgMTI4LCA3NSwgNzIsIDY5LCA2OSwgMTI4LCAKKyAgICA3NSwgNzIsIDY5LCAxMjgsIDc1LCA3MiwgNjUsIDgyLCA3OSwgODMsIDcyLCA4NCwgNzIsIDIwMSwgNzUsIDcyLCA2NSwgODIsIAorICAgIDEyOCwgNzUsIDcyLCA2NSwgODAsIDcyLCAxMjgsIDc1LCA3MiwgNjUsIDc4LCAxOTksIDc1LCA3MiwgNjUsIDc4LCA2OCwgCisgICAgMTkzLCA3NSwgNzIsIDY1LCA3OCwgMTI4LCA3NSwgNzIsIDY1LCA3NywgODQsIDIwMSwgNzUsIDcyLCA2NSwgNzUsIDY1LCAKKyAgICA4MywgODMsIDczLCA2NSwgMjA2LCA3NSwgNzIsIDY1LCA3MywgMTI4LCA3NSwgNzIsIDY1LCA3MiwgMTI4LCA3NSwgNzIsIAorICAgIDY1LCAyMDAsIDc1LCA3MiwgNjUsIDY1LCAxMjgsIDc1LCA3MSwgMTI4LCA3NSwgNjksIDg5LCA2NywgNjUsIDgwLCAxMjgsIAorICAgIDc1LCA2OSwgODksIDY3LCA2NSwgMjA4LCA3NSwgNjksIDg5LCA2NiwgNzksIDY1LCA4MiwgNjgsIDEyOCwgNzUsIDY5LCA4OCwgCisgICAgMTI4LCA3NSwgNjksIDg1LCA4OSwgNjksIDg1LCA4OCwgMTI4LCA3NSwgNjksIDg1LCA4MywgNzIsIDY5LCA4NSwgNjUsIDY5LCAKKyAgICA4MCwgMTI4LCA3NSwgNjksIDg1LCA4MywgNjksIDg1LCA4OCwgMTI4LCA3NSwgNjksIDg1LCA4MCwgODUsIDgxLCAxMjgsIAorICAgIDc1LCA2OSwgODUsIDc5LCAyMTIsIDc1LCA2OSwgODUsIDc3LCAxMjgsIDc1LCA2OSwgODUsIDc1LCA2OSwgODUsIDg0LCA3OCwgCisgICAgNjgsIDY1LCAxMjgsIDc1LCA2OSwgODUsIDc1LCA2NSwgODEsIDEyOCwgNzUsIDY5LCA4NSwgNjUsIDY5LCA4NCwgNzcsIDY5LCAKKyAgICA4NSwgNzgsIDEyOCwgNzUsIDY5LCA4NSwgNjUsIDY5LCA4MiwgNzMsIDEyOCwgNzUsIDY5LCA4NCwgODQsIDIwMSwgNzUsIAorICAgIDY5LCA4MywgNzIsIDUwLCAxMjgsIDc1LCA2OSwgODIsIDY5LCA4NCwgMTI4LCA3NSwgNjksIDc5LCA4NywgMTI4LCA3NSwgCisgICAgNjksIDc4LCA4NCwgNzMsIDc3LCA2NSwgODQsIDY1LCAxMjgsIDc1LCA2OSwgNzgsIDg0LCA3MywgNzcsIDY1LCA4NCwgMTkzLCAKKyAgICA3NSwgNjksIDc4LCA4NCwgNzMsIDc3LCAxOTMsIDc1LCA2OSwgNzgsIDY1LCA4NCwgMTI4LCA3NSwgNjksIDc4LCAxMjgsIAorICAgIDc1LCA2OSwgMjA2LCA3NSwgNjksIDc3LCA4MCwgODUsIDc2LCAxMjgsIDc1LCA2OSwgNzcsIDgwLCA4NSwgMjA0LCA3NSwgCisgICAgNjksIDc3LCA4MCwgNzYsIDczLCAxMjgsIDc1LCA2OSwgNzcsIDgwLCA3NiwgMjAxLCA3NSwgNjksIDc3LCA4MCwgNzIsIDgyLCAKKyAgICA2OSwgNzgsIDcxLCAxMjgsIDc1LCA2OSwgNzcsIDY2LCA2NSwgNzgsIDcxLCAxMjgsIDc1LCA2OSwgNzYsIDg2LCA3MywgCisgICAgMjA2LCA3NSwgNjksIDcyLCA2OSwgNzIsIDEyOCwgNzUsIDY5LCA3MiwgNjksIDIwMCwgNzUsIDY5LCA3MiwgMTI4LCA3NSwgCisgICAgNjksIDcwLCA4NSwgNzYsIDY1LCAxMjgsIDc1LCA2OSwgNjksIDgzLCA4NSwgMTI4LCA3NSwgNjksIDY5LCA4MCwgNzMsIDc4LCAKKyAgICAxOTksIDc1LCA2OSwgNjksIDc4LCA3MSwgMTI4LCA3NSwgNjcsIDY1LCA3NiwgMTI4LCA3NSwgNjYsIDEyOCwgNzUsIDY1LCAKKyAgICA5MCwgNjUsIDc1LCAyMDAsIDc1LCA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDc1LCA2NSwgODksIDY1LCAyMDAsIAorICAgIDc1LCA2NSwgODgsIDEyOCwgNzUsIDY1LCA4NywgNzMsIDEyOCwgNzUsIDY1LCA4NiwgODksIDc1LCA2NSwgMTI4LCA3NSwgCisgICAgNjUsIDg1LCA3OCwgNjUsIDEyOCwgNzUsIDY1LCA4NSwgMjA2LCA3NSwgNjUsIDg1LCAxMjgsIDc1LCA2NSwgODQsIDc5LCAKKyAgICAxMjgsIDc1LCA2NSwgODQsIDcyLCA3MywgODMsIDg0LCA3MywgMTI4LCA3NSwgNjUsIDg0LCA3MiwgNjUsIDc1LCAxOTMsIAorICAgIDc1LCA2NSwgODQsIDY1LCA4NiwgNjUsIDgzLCA3NywgNjUsIDEyOCwgNzUsIDY1LCA4NCwgNjUsIDg2LCAxOTMsIDc1LCA2NSwgCisgICAgODQsIDY1LCA3NSwgNjUsIDc4LCA2NSwgNDUsIDcyLCA3MywgODIsIDY1LCA3MSwgNjUsIDc4LCAxOTMsIDc1LCA2NSwgODMsIAorICAgIDgyLCA2NSwgODQsIDY1LCA3OCwgMTI4LCA3NSwgNjUsIDgzLCA4MiwgNjUsIDg0LCA2NSwgMjA2LCA3NSwgNjUsIDgzLCA4MiwgCisgICAgNjUsIDEyOCwgNzUsIDY1LCA4MywgODIsIDE5MywgNzUsIDY1LCA4MywgNzUsIDY1LCA3NiwgMTI4LCA3NSwgNjUsIDgzLCAKKyAgICA3NSwgNjUsIDIwNCwgNzUsIDY1LCA4MywgNzIsIDc3LCA3MywgODIsIDIwMSwgNzUsIDY1LCA4MiwgODMsIDcyLCA2NSwgNzgsIAorICAgIDY1LCAxMjgsIDc1LCA2NSwgODIsIDc5LCA4MiwgNzMsIDczLCAxMjgsIDc1LCA2NSwgODIsIDIwNywgNzUsIDY1LCA4MiwgCisgICAgNjksIDIwNiwgNzUsIDY1LCA4MiwgNjUsIDg0LCA4NCwgNzksIDEyOCwgNzUsIDY1LCA4MiwgNjUsIDc4LCAxMjgsIDc1LCAKKyAgICA2NSwgODAsIDg5LCA2OSwgNzksIDg1LCA3OCwgODMsIDgzLCA2NSwgNzgsIDcxLCA4MCwgNzMsIDY5LCA4NSwgODAsIDEyOCwgCisgICAgNzUsIDY1LCA4MCwgODksIDY5LCA3OSwgODUsIDc4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDEyOCwgNzUsIDY1LCA4MCwgODksIAorICAgIDY5LCA3OSwgODUsIDc4LCA4MCwgNzIsIDczLCA2OSwgODUsIDgwLCA3MiwgMTI4LCA3NSwgNjUsIDgwLCA4OSwgNjksIDc5LCAKKyAgICA4NSwgNzgsIDc3LCA3MywgNjksIDg1LCA3NywgMTI4LCA3NSwgNjUsIDgwLCA4MCwgNjUsIDEyOCwgNzUsIDY1LCA4MCwgODAsIAorICAgIDE5MywgNzUsIDY1LCA4MCwgNzksIDEyOCwgNzUsIDY1LCA4MCwgNzIsIDEyOCwgNzUsIDY1LCA4MCwgNjUsIDc2LCAxMjgsIAorICAgIDc1LCA2NSwgODAsIDY1LCAxMjgsIDc1LCA2NSwgNzgsIDg0LCA2NSwgNzQsIDE5MywgNzUsIDY1LCA3OCwgNzEsIDEyOCwgCisgICAgNzUsIDY1LCA3OCwgMTk5LCA3NSwgNjUsIDc4LCA2NSwgNzUsIDc5LCAxMjgsIDc1LCA2NSwgNzcsIDUyLCAxMjgsIDc1LCAKKyAgICA2NSwgNzcsIDUwLCAxMjgsIDc1LCA2NSwgNzcsIDEyOCwgNzUsIDY1LCA3NSwgNzksIDEyOCwgNzUsIDY1LCA3NSwgNjUsIAorICAgIDY2LCA2NSwgODQsIDEyOCwgNzUsIDY1LCA3NSwgMTI4LCA3NSwgNjUsIDIwMywgNzUsIDY1LCA3MywgODQsIDcyLCAyMDEsIAorICAgIDc1LCA2NSwgNzMsIDgyLCA3MywgMTI4LCA3NSwgNjUsIDczLCAxMjgsIDc1LCA2NSwgMjAxLCA3NSwgNjUsIDcwLCA2NSwgCisgICAgMTI4LCA3NSwgNjUsIDcwLCAxMjgsIDc1LCA2NSwgMTk4LCA3NSwgNjUsIDY4LCA1MywgMTI4LCA3NSwgNjUsIDY4LCAxODEsIAorICAgIDc1LCA2NSwgNjgsIDUyLCAxMjgsIDc1LCA2NSwgNjgsIDUxLCAxMjgsIDc1LCA2NSwgNjgsIDE3OSwgNzUsIDY1LCA2OCwgCisgICAgNTAsIDEyOCwgNzUsIDY1LCA2OCwgMTI4LCA3NSwgNjUsIDY2LCAxOTMsIDc1LCA2NSwgNjYsIDEyOCwgNzUsIDY1LCA2NSwgCisgICAgNzMsIDEyOCwgNzUsIDY1LCA2NSwgNzAsIDg1LCAxMjgsIDc1LCA2NSwgNjUsIDcwLCAxMjgsIDc1LCA2NSwgNTAsIDEyOCwgCisgICAgNzUsIDY1LCAxNzgsIDc1LCA0OCwgNDgsIDU2LCAxMjgsIDc1LCA0OCwgNDgsIDU1LCAxMjgsIDc1LCA0OCwgNDgsIDU0LCAKKyAgICAxMjgsIDc1LCA0OCwgNDgsIDUzLCAxMjgsIDc1LCA0OCwgNDgsIDUyLCAxMjgsIDc1LCA0OCwgNDgsIDUxLCAxMjgsIDc1LCAKKyAgICA0OCwgNDgsIDUwLCAxMjgsIDc1LCA0OCwgNDgsIDQ5LCAxMjgsIDc0LCA4NywgNjUsIDEyOCwgNzQsIDg1LCA4NSwgMTI4LCAKKyAgICA3NCwgODUsIDg0LCAxMjgsIDc0LCA4NSwgODMsIDg0LCA3MywgNzAsIDczLCA2NywgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIAorICAgIDc0LCA4NSwgODAsIDczLCA4NCwgNjksIDgyLCAxMjgsIDc0LCA4NSwgNzksIDg0LCAxMjgsIDc0LCA4NSwgNzksIDgwLCAKKyAgICAxMjgsIDc0LCA4NSwgNzgsIDc5LCAxMjgsIDc0LCA4NSwgNzgsIDY5LCAxMjgsIDc0LCA4NSwgNzYsIDg5LCAxMjgsIDc0LCAKKyAgICA4NSwgNjksIDg1LCA3MywgMTI4LCA3NCwgODUsIDY4LCA4NSwgNzYsIDEyOCwgNzQsIDg1LCA2OCwgNzEsIDY5LCAxMjgsIAorICAgIDc0LCA4NSwgNjgsIDY5LCA3OSwgNDUsIDgzLCA4MCwgNjUsIDc4LCA3MywgODMsIDIwMCwgNzQsIDc5LCA4OSwgNzksIDg1LCAKKyAgICAyMTEsIDc0LCA3OSwgODksIDEyOCwgNzQsIDc5LCA4NiwgNjksIDEyOCwgNzQsIDc5LCAyMTIsIDc0LCA3OSwgNzgsIDcxLCAKKyAgICAxMjgsIDc0LCA3OSwgNzgsIDE5MywgNzQsIDc5LCA3NSwgNjksIDgyLCAxMjgsIDc0LCA3OSwgNzMsIDc4LCA2OSwgNjgsIAorICAgIDEyOCwgNzQsIDc5LCA3MywgNzgsIDEyOCwgNzQsIDc5LCA2NSwgMTI4LCA3NCwgNzQsIDg5LCA4OCwgMTI4LCA3NCwgNzQsIAorICAgIDg5LCA4NCwgMTI4LCA3NCwgNzQsIDg5LCA4MCwgMTI4LCA3NCwgNzQsIDg5LCAxMjgsIDc0LCA3NCwgODUsIDg4LCAxMjgsIAorICAgIDc0LCA3NCwgODUsIDg0LCAxMjgsIDc0LCA3NCwgODUsIDgyLCA4OCwgMTI4LCA3NCwgNzQsIDg1LCA4MiwgMTI4LCA3NCwgCisgICAgNzQsIDg1LCA4MCwgMTI4LCA3NCwgNzQsIDg1LCA3OSwgODgsIDEyOCwgNzQsIDc0LCA4NSwgNzksIDgwLCAxMjgsIDc0LCAKKyAgICA3NCwgODUsIDc5LCAxMjgsIDc0LCA3NCwgODUsIDEyOCwgNzQsIDc0LCA3OSwgODgsIDEyOCwgNzQsIDc0LCA3OSwgODQsIAorICAgIDEyOCwgNzQsIDc0LCA3OSwgODAsIDEyOCwgNzQsIDc0LCA3OSwgMTI4LCA3NCwgNzQsIDczLCA4OCwgMTI4LCA3NCwgNzQsIAorICAgIDczLCA4NCwgMTI4LCA3NCwgNzQsIDczLCA4MCwgMTI4LCA3NCwgNzQsIDczLCA2OSwgODgsIDEyOCwgNzQsIDc0LCA3MywgCisgICAgNjksIDg0LCAxMjgsIDc0LCA3NCwgNzMsIDY5LCA4MCwgMTI4LCA3NCwgNzQsIDczLCA2OSwgMTI4LCA3NCwgNzQsIDczLCAKKyAgICAxMjgsIDc0LCA3NCwgNjksIDY5LCAxMjgsIDc0LCA3NCwgNjksIDEyOCwgNzQsIDc0LCA2NSwgMTI4LCA3NCwgNzMsIDc2LCAKKyAgICAxMjgsIDc0LCA3MywgNzMsIDEyOCwgNzQsIDczLCA3MiwgODYsIDY1LCA3NywgODUsIDc2LCA3MywgODksIDY1LCAxMjgsIAorICAgIDc0LCA3MywgNjUsIDEyOCwgNzQsIDcyLCA3OSwgMTI4LCA3NCwgNzIsIDY5LCA3MiwgMTI4LCA3NCwgNzIsIDY1LCA3OCwgCisgICAgMTI4LCA3NCwgNzIsIDY1LCA3NywgMTI4LCA3NCwgNzIsIDY1LCA2NSwgMTI4LCA3NCwgNzIsIDY1LCAxMjgsIDc0LCA2OSwgCisgICAgODUsIDEyOCwgNzQsIDY5LCA4MiwgODUsIDgzLCA2NSwgNzYsIDY5LCA3NywgMTI4LCA3NCwgNjksIDgyLCA2NSwgMjA2LCAKKyAgICA3NCwgNjksIDgyLCA2NSwgMTI4LCA3NCwgNjksIDgyLCAxMjgsIDc0LCA2OSwgNzIsIDEyOCwgNzQsIDY5LCAyMDAsIDc0LCAKKyAgICA2OSwgNzEsIDc5LCA3MSwgNjUsIDc4LCAxMjgsIDc0LCA2OSwgNjksIDc3LCAxMjgsIDc0LCA2OSwgNjUsIDc4LCA4MywgCisgICAgMTI4LCA3NCwgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3NCwgNjUsIDg2LCA3MywgODksIDY1LCA3OCwgNzMsIAorICAgIDEyOCwgNzQsIDY1LCA4NSwgMTI4LCA3NCwgNjUsIDgyLCAxMjgsIDc0LCA2NSwgODAsIDY1LCA3OCwgNjksIDgzLCAxOTcsIAorICAgIDc0LCA2NSwgODAsIDY1LCA3OCwgMTI4LCA3NCwgNjUsIDc4LCA4NSwgNjUsIDgyLCA4OSwgMTI4LCA3NCwgNjUsIDc2LCA3NiwgCisgICAgNjUsIDc0LCA2NSwgNzYsIDY1LCA3NiwgNzksIDg1LCA3MiwgNzksIDg1LCAxMjgsIDc0LCA2NSwgNzMsIDEyOCwgNzQsIDY1LCAKKyAgICA3MiwgMTI4LCA3NCwgNjUsIDY4LCA2OSwgMTI4LCA3NCwgNjUsIDY3LCA3NSwgNDUsIDc5LCA0NSwgNzYsIDY1LCA3OCwgODQsIAorICAgIDY5LCA4MiwgNzgsIDEyOCwgNzQsIDY1LCA2NywgMjAzLCA3NCwgNDUsIDgzLCA3MywgNzcsIDgwLCA3NiwgNzMsIDcwLCA3MywgCisgICAgNjksIDE5NiwgMjAyLCA3MywgOTAsIDcyLCA3MywgODQsIDgzLCA2NSwgMTI4LCA3MywgOTAsIDcyLCA3MywgODQsIDgzLCAKKyAgICAxOTMsIDczLCA5MCwgNzIsIDY5LCAxMjgsIDczLCA5MCwgNjUsIDc1LCA2NSwgODksIDE5MywgNzMsIDg5LCA2OSwgNzUsIAorICAgIDEyOCwgNzMsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3MywgODUsIDc0LCA2NSwgMTI4LCA3MywgODUsIDEyOCwgNzMsIAorICAgIDg0LCAyMTEsIDczLCA4NCwgNjksIDgyLCA2NSwgODQsIDczLCA3OSwgMjA2LCA3MywgODQsIDY5LCA3NywgMTI4LCA3MywgCisgICAgODMsIDgzLCA3MiwgNjUsIDgyLCAxMjgsIDczLCA4MywgNzksIDc4LCAxMjgsIDczLCA4MywgNzksIDIwNiwgNzMsIDgzLCAKKyAgICA3OSwgNzYsIDY1LCA4NCwgNjksIDEyOCwgNzMsIDgzLCA2OSwgNzgsIDQ1LCA3MywgODMsIDY5LCA3OCwgMTI4LCA3MywgODMsIAorICAgIDY1LCA3NSwgNzMsIDE5MywgNzMsIDgzLCA0NSwgODAsIDczLCA3NiwgNzYsIDY1LCAxMjgsIDczLCA4MiwgODUsIDg5LCA2NSwgCisgICAgNzgsIDc4LCA2NSwgMTI4LCA3MywgODIsIDg1LCA4NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDczLCA4MiwgNzksIDc4LCAKKyAgICA0NSwgNjcsIDc5LCA4MCwgODAsIDY5LCAyMTAsIDczLCA4MiwgNzksIDc4LCAxMjgsIDczLCA3OSwgODQsIDczLCA3MCwgNzMsIAorICAgIDY5LCAxOTYsIDczLCA3OSwgODQsIDY1LCA4NCwgNjksIDE5NiwgNzMsIDc5LCA4NCwgNjUsIDEyOCwgNzMsIDc5LCA4NCwgCisgICAgMTkzLCA3MywgNzksIDgyLCAxMjgsIDczLCA3OSwgNjgsIDcyLCA2NSwgNjgsIDcyLCAxMjgsIDczLCA3OCwgODYsIDczLCAKKyAgICA4MywgNzMsIDY2LCA3NiwgMTk3LCA3MywgNzgsIDg2LCA2OSwgODIsIDg0LCA2OSwgNjgsIDEyOCwgNzMsIDc4LCA4NiwgNjksIAorICAgIDgyLCA4NCwgNjksIDE5NiwgNzMsIDc4LCA4NiwgNjksIDgyLCA4MywgMTk3LCA3MywgNzgsIDg0LCA4MiwgNzksIDY4LCA4NSwgCisgICAgNjcsIDY5LCA4MiwgMTI4LCA3MywgNzgsIDg0LCA3MywgMTI4LCA3MywgNzgsIDg0LCA2OSwgODIsIDgzLCA4OSwgNzYsIDc2LCAKKyAgICA2NSwgNjYsIDczLCAxOTUsIDczLCA3OCwgODQsIDY5LCA4MiwgODMsIDY5LCA2NywgODQsIDczLCA3OSwgNzgsIDEyOCwgNzMsIAorICAgIDc4LCA4NCwgNjksIDgyLCA4MywgNjksIDY3LCA4NCwgNzMsIDc5LCAyMDYsIDczLCA3OCwgODQsIDY5LCA4MiwgODMsIDY5LCAKKyAgICA2NywgODQsIDczLCA3OCwgMTk5LCA3MywgNzgsIDg0LCA2OSwgODIsIDgyLCA3OSwgNjYsIDY1LCA3OCwgNzEsIDEyOCwgNzMsIAorICAgIDc4LCA4NCwgNjksIDgyLCA4MCwgNzksIDc2LCA2NSwgODQsIDczLCA3OSwgMjA2LCA3MywgNzgsIDg0LCA2OSwgODIsIDc2LCAKKyAgICA3OSwgNjcsIDc1LCA2OSwgMTk2LCA3MywgNzgsIDg0LCA2OSwgODIsIDc2LCA3MywgNzgsIDY5LCA2NSwgMjEwLCA3MywgNzgsIAorICAgIDg0LCA2OSwgODIsIDc2LCA2NSwgNjcsIDY5LCAxOTYsIDczLCA3OCwgODQsIDY5LCA4MiwgNzMsIDc5LCAyMTAsIDczLCA3OCwgCisgICAgODQsIDY5LCA4MiwgNjksIDgzLCAyMTIsIDczLCA3OCwgODQsIDY5LCA4MiwgNjcsIDY1LCA3NiwgNjUsIDg0LCA2OSwgMTI4LCAKKyAgICA3MywgNzgsIDg0LCA2OSwgNzEsIDgyLCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgNzMsIDc4LCA4NCwgNjksIDcxLCA4MiwgCisgICAgNjUsIDg0LCA3MywgNzksIDIwNiwgNzMsIDc4LCA4NCwgNjksIDcxLCA4MiwgNjUsIDc2LCAxMjgsIDczLCA3OCwgODQsIDY5LCAKKyAgICA3MSwgODIsIDY1LCAyMDQsIDczLCA3OCwgODMsIDg1LCA3NiwgNjUsIDIxMCwgNzMsIDc4LCA4MywgODQsIDgyLCA4NSwgNzcsIAorICAgIDY5LCA3OCwgODQsIDY1LCAyMDQsIDczLCA3OCwgODMsIDczLCA2OCwgNjksIDEyOCwgNzMsIDc4LCA4MywgNjksIDgyLCA4NCwgCisgICAgNzMsIDc5LCAyMDYsIDczLCA3OCwgODMsIDY5LCA2NywgODQsIDEyOCwgNzMsIDc4LCA4MywgNjcsIDgyLCA3MywgODAsIDg0LCAKKyAgICA3MywgNzksIDc4LCA2NSwgMjA0LCA3MywgNzgsIDgwLCA4NSwgMjEyLCA3MywgNzgsIDc4LCA3OSwgNjcsIDY5LCA3OCwgNjcsIAorICAgIDY5LCAxMjgsIDczLCA3OCwgNzgsIDc4LCAxMjgsIDczLCA3OCwgNzgsIDY5LCA4MiwgMTI4LCA3MywgNzgsIDc4LCA2OSwgCisgICAgMjEwLCA3MywgNzgsIDc4LCAxMjgsIDczLCA3OCwgNzMsIDc4LCA3MSwgODUsIDEyOCwgNzMsIDc4LCA3MywgMTI4LCA3MywgCisgICAgNzgsIDcyLCA3MywgNjYsIDczLCAyMTIsIDczLCA3OCwgNzIsIDY5LCA4MiwgNjksIDc4LCAyMTIsIDczLCA3OCwgNzEsIDg3LCAKKyAgICA2NSwgOTAsIDEyOCwgNzMsIDc4LCA3MCwgNzksIDgyLCA3NywgNjUsIDg0LCA3MywgNzksIDIwNiwgNzMsIDc4LCA3MCwgNzYsIAorICAgIDg1LCA2OSwgNzgsIDY3LCA2OSwgMTI4LCA3MywgNzgsIDcwLCA3MywgNzgsIDczLCA4NCwgODksIDEyOCwgNzMsIDc4LCA3MCwgCisgICAgNzMsIDc4LCA3MywgODQsIDIxNywgNzMsIDc4LCA2OCwgODUsIDgzLCA4NCwgODIsIDczLCA2NSwgMjA0LCA3MywgNzgsIDY4LCAKKyAgICA3MywgODIsIDY5LCA2NywgMjEyLCA3MywgNzgsIDY4LCA3MywgNjcsIDY1LCA4NCwgNzksIDgyLCAxMjgsIDczLCA3OCwgNjgsIAorICAgIDczLCA2NywgNjUsIDg0LCA3OSwgMjEwLCA3MywgNzgsIDY4LCA3MywgMTk1LCA3MywgNzgsIDY4LCA3MywgNjUsIDIwNiwgCisgICAgNzMsIDc4LCA2OCwgNjksIDg4LCAxMjgsIDczLCA3OCwgNjgsIDY5LCA4MCwgNjksIDc4LCA2OCwgNjksIDc4LCAyMTIsIDczLCAKKyAgICA3OCwgNjcsIDgyLCA2OSwgNzcsIDY5LCA3OCwgODQsIDEyOCwgNzMsIDc4LCA2NywgODIsIDY5LCA2NSwgODMsIDY5LCAyMTEsIAorICAgIDczLCA3OCwgNjcsIDgyLCA2OSwgNjUsIDgzLCA2OSwgMTI4LCA3MywgNzgsIDY3LCA3OSwgNzcsIDgwLCA3NiwgNjksIDg0LCAKKyAgICAxOTcsIDczLCA3OCwgNjcsIDc5LCA3NywgNzMsIDc4LCAxOTksIDczLCA3OCwgNjcsIDc2LCA4NSwgNjgsIDczLCA3OCwgCisgICAgMTk5LCA3MywgNzgsIDY3LCA3MiwgMTI4LCA3MywgNzgsIDY2LCA3OSwgMjE2LCA3MywgNzgsIDY1LCA4MCwgMTI4LCA3MywgCisgICAgNzgsIDQ1LCA2NSwgNzYsIDY1LCA3MCwgMTI4LCA3MywgNzcsIDgwLCA2OSwgODIsIDczLCA2NSwgMjA0LCA3MywgNzcsIDgwLCAKKyAgICA2OSwgODIsIDcwLCA2OSwgNjcsIDg0LCA4NSwgMjA1LCA3MywgNzcsIDgwLCA2OSwgODIsIDcwLCA2OSwgNjcsIDg0LCA2NSwgCisgICAgMTI4LCA3MywgNzcsIDgwLCA2OSwgODIsIDcwLCA2OSwgNjcsIDg0LCAxOTMsIDczLCA3NywgNzgsIDEyOCwgNzMsIDc3LCAKKyAgICA3MywgODMsIDY5LCA3OSwgMjExLCA3MywgNzcsIDczLCA3OCwgNTEsIDEyOCwgNzMsIDc3LCA3MywgNzgsIDEyOCwgNzMsIAorICAgIDc3LCA3MywgMjA2LCA3MywgNzcsIDczLCA3MCwgODQsIDcyLCA3OSwgODIsIDc5LCA3OCwgMTI4LCA3MywgNzcsIDczLCA3MCwgCisgICAgODQsIDcyLCA3OSwgODIsIDY1LCAxMjgsIDczLCA3NywgNzMsIDcwLCA3OSwgNzgsIDc5LCA3OCwgMTI4LCA3MywgNzcsIDczLCAKKyAgICA2OCwgNzMsIDY1LCA4MiwgNzEsIDc5LCA3OCwgMTI4LCA3MywgNzcsIDY1LCA3MSwgMTk3LCA3MywgNzYsIDg1LCA4OSwgNjUsIAorICAgIDc4LCA3OCwgNjUsIDEyOCwgNzMsIDc2LCA4NSwgODksIDEyOCwgNzMsIDc2LCA4NSwgODUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgCisgICAgMTI4LCA3MywgNzYsIDg1LCA4NCwgMTI4LCA3MywgNzYsIDczLCA3NywgNzcsIDg1LCA1MiwgMTI4LCA3MywgNzYsIDczLCAKKyAgICA3NywgNzcsIDg1LCA1MSwgMTI4LCA3MywgNzYsIDczLCA3NywgNzcsIDg1LCAxMjgsIDczLCA3NiwgNzMsIDc3LCA3NywgCisgICAgMjEzLCA3MywgNzYsIDUwLCAxMjgsIDczLCA3NSwgNjUsIDgyLCA2NSwgMTI4LCA3MywgNzUsIDY1LCA4MiwgMTkzLCA3MywgCisgICAgNzQsIDEyOCwgNzMsIDczLCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzMsIDcxLCA3MywgMTI4LCA3MywgNzEsIDIwMSwgCisgICAgNzMsIDcxLCA3MSwgODcsIDgzLCAxMjgsIDczLCA3MCwgNzMsIDc4LCAxMjgsIDczLCA2OSwgODUsIDc4LCA3MSwgNDUsIDg0LCAKKyAgICA3MywgNzUsIDY5LCA4NSwgODQsIDEyOCwgNzMsIDY5LCA4NSwgNzgsIDcxLCA0NSwgODQsIDcyLCA3MywgNjksIDg1LCA4NCwgCisgICAgNzIsIDEyOCwgNzMsIDY5LCA4NSwgNzgsIDcxLCA0NSwgODMsIDgzLCA2NSwgNzgsIDcxLCA3NSwgNzMsIDg5LCA2OSwgNzksIAorICAgIDc1LCAxMjgsIDczLCA2OSwgODUsIDc4LCA3MSwgNDUsIDgyLCA3MywgNjksIDg1LCA3NiwgMTI4LCA3MywgNjksIDg1LCA3OCwgCisgICAgNzEsIDQ1LCA4MCwgNzMsIDY5LCA4NSwgODAsIDEyOCwgNzMsIDY5LCA4NSwgNzgsIDcxLCA0NSwgODAsIDcyLCA3MywgNjksIAorICAgIDg1LCA4MCwgNzIsIDEyOCwgNzMsIDY5LCA4NSwgNzgsIDcxLCA0NSwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgMTI4LCA3MywgCisgICAgNjksIDg1LCA3OCwgNzEsIDQ1LCA3NSwgNzIsIDczLCA2OSwgODUsIDc1LCA3MiwgMTI4LCA3MywgNjksIDg1LCA3OCwgNzEsIAorICAgIDQ1LCA2NywgNzMsIDY5LCA4NSwgNjcsIDEyOCwgNzMsIDY5LCA4NSwgNzgsIDcxLCA0NSwgNjcsIDcyLCA3MywgNjksIDg1LCAKKyAgICA2NywgNzIsIDEyOCwgNzMsIDY5LCA4NSwgNzgsIDE5OSwgNzMsIDY4LCA3NiwgNjksIDEyOCwgNzMsIDY4LCA3MywgNzcsIAorICAgIDEyOCwgNzMsIDY4LCA3MywgMjA1LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2OCwgCisgICAgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjgsIDU2LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY4LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2OCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjgsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNjUsIDY4LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2OCwgCisgICAgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjgsIDUwLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY4LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2OCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNjUsIDY3LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgCisgICAgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIDY3LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNjUsIDY3LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgCisgICAgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIDU0LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNjUsIDY3LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgCisgICAgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIDQ4LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNjUsIDY2LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgCisgICAgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIDY1LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNjUsIDY2LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgCisgICAgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIDUyLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNjUsIDY2LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgCisgICAgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDY5LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNjUsIDY1LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgCisgICAgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDU2LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNjUsIDY1LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgCisgICAgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDUwLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNjUsIDU3LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgCisgICAgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIDY3LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNjUsIDU3LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgCisgICAgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIDU0LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNjUsIDU3LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgCisgICAgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIDQ4LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNjUsIDU2LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgCisgICAgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIDY1LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNjUsIDU2LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgCisgICAgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIDUyLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNjUsIDU2LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgCisgICAgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDY5LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNjUsIDU1LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgCisgICAgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDU2LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNjUsIDU1LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgCisgICAgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDUwLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTQsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNjUsIDU0LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NCwgCisgICAgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTQsIDY1LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU0LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTQsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNjUsIDU0LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NCwgCisgICAgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTQsIDUyLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU0LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTQsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNjUsIDU0LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgCisgICAgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDY5LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNjUsIDUzLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgCisgICAgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDU2LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNjUsIDUzLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgCisgICAgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDUwLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNjUsIDUyLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgCisgICAgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIDY3LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNjUsIDUyLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgCisgICAgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIDU0LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNjUsIDUyLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgCisgICAgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIDQ4LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNjUsIDUxLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgCisgICAgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIDY1LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNjUsIDUxLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgCisgICAgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIDUyLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNjUsIDUxLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgCisgICAgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIDY5LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNjUsIDUwLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgCisgICAgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIDU2LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNjUsIDUwLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgCisgICAgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIDUwLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNjUsIDQ5LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgCisgICAgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIDY3LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNjUsIDQ5LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgCisgICAgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIDU0LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNjUsIDQ5LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgCisgICAgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIDQ4LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNjUsIDQ4LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgCisgICAgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIDY1LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNjUsIDQ4LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgCisgICAgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIDUyLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNjUsIDQ4LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgCisgICAgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDY5LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNTcsIDcwLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgCisgICAgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDU2LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNTcsIDcwLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgCisgICAgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDUwLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNTcsIDY5LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgCisgICAgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIDY3LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNTcsIDY5LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgCisgICAgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIDU0LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNTcsIDY5LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgCisgICAgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIDQ4LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNTcsIDY4LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgCisgICAgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIDY1LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNTcsIDY4LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgCisgICAgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIDUyLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNTcsIDY4LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgCisgICAgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDY5LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNTcsIDY3LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgCisgICAgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDU2LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNTcsIDY3LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgCisgICAgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDUwLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNTcsIDY2LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgCisgICAgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIDY3LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNTcsIDY2LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgCisgICAgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIDU0LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNTcsIDY2LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgCisgICAgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIDQ4LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNTcsIDY1LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgCisgICAgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIDY1LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNTcsIDY1LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgCisgICAgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIDUyLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNTcsIDY1LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgCisgICAgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDY5LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNTcsIDU3LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgCisgICAgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDU2LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNTcsIDU3LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgCisgICAgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDUwLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNTcsIDU2LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgCisgICAgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIDY3LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNTcsIDU2LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgCisgICAgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIDU0LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNTcsIDU2LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgCisgICAgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIDQ4LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNTcsIDU1LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgCisgICAgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIDY1LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNTcsIDU1LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgCisgICAgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIDUyLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNTcsIDU1LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgCisgICAgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDY5LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNTcsIDU0LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgCisgICAgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDU2LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNTcsIDU0LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgCisgICAgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDUwLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNTcsIDUzLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgCisgICAgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIDY3LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNTcsIDUzLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgCisgICAgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIDU0LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNTcsIDUzLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgCisgICAgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIDQ4LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNTcsIDUyLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgCisgICAgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIDY1LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNTcsIDUyLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgCisgICAgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIDUyLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNTcsIDUyLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgCisgICAgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDY5LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNTcsIDUxLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgCisgICAgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDU2LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNTcsIDUxLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgCisgICAgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDUwLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNTcsIDUwLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgCisgICAgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIDY3LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNTcsIDUwLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgCisgICAgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIDU0LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNTcsIDUwLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgCisgICAgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIDQ4LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNTcsIDQ5LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgCisgICAgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIDY1LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNTcsIDQ5LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgCisgICAgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIDUyLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNTcsIDQ5LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgCisgICAgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDY5LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNTcsIDQ4LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgCisgICAgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDU2LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA3MCwgNTcsIDQ4LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgCisgICAgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDUwLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDU3LCA0OCwgNTIsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA1NiwgNjgsIDU1LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTYsIDY3LCA2NSwgCisgICAgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU2LCA1NywgNjksIDUxLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NSwgNjgsIDUyLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTUsIDY1LCA1NSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDU1LCA1NywgNTYsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA1NSwgNTQsIDY4LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTUsIDUzLCA1MSwgCisgICAgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU1LCA1MywgNDksIDcwLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NSwgNDksIDUwLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTUsIDQ4LCA2NiwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDU0LCA3MCwgNDksIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA1NCwgNjksIDU2LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTQsIDU1LCA1MCwgCisgICAgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU0LCA1NSwgNDgsIDU3LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NCwgNTUsIDQ4LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTQsIDU0LCA1MCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDU0LCA1MywgNjYsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA1NCwgNTMsIDU3LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTQsIDUzLCA1MywgCisgICAgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU0LCA1MSwgNTMsIDUzLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NCwgNTEsIDQ4LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTQsIDUwLCA1NywgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDU0LCA1MCwgNTMsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA1NCwgNTAsIDUyLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTMsIDcwLCA1NiwgCisgICAgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUzLCA2OCwgNjksIDU0LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MywgNjYsIDU2LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTMsIDY2LCA1MywgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUzLCA1NywgNTAsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA1MywgNTcsIDQ5LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTMsIDU2LCA3MCwgCisgICAgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUzLCA1MywgNjYsIDU0LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MywgNTIsIDUxLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTMsIDUyLCA0OCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUzLCA1MSwgNzAsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA1MywgNTEsIDY3LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTMsIDUwLCA2OCwgCisgICAgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUzLCA1MCwgNTUsIDUwLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MywgNTAsIDUyLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTMsIDUwLCA0OSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUzLCA0OSwgNTYsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCAKKyAgICA1MiwgNjksIDY1LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTIsIDY5LCA1NiwgCisgICAgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUyLCA2OSwgNTAsIDY4LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MiwgNjksIDQ4LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTIsIDY5LCA0OCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ5LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA2NSwgNDksIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDY1LCA0OSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIAorICAgIDQ5LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDksIDU3LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OSwgNTYsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ5LCA1NSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDksIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ5LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA2NSwgNDksIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDY1LCA0OSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIAorICAgIDQ5LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDksIDQ4LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNzAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCA2OSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA2NSwgNDgsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDY1LCA0OCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIAorICAgIDQ4LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIDU1LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNTQsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCA1MywgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA2NSwgNDgsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDY1LCA0OCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDcwLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIDY5LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNjgsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCA2NywgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNzAsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA3MCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDcwLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIDUzLCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNTIsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCA1MSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNjksIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA2OSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDY5LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjksIDY3LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNjYsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCA2NSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjksIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNjksIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA2OSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDY5LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjksIDUxLCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNTAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCA0OSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjksIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OCwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY4LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNjgsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA2OCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDY4LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjgsIDY1LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OCwgNTcsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY4LCA1NiwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjgsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY4LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNjgsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA2OCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDY4LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjgsIDQ5LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OCwgNDgsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY3LCA3MCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjcsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NywgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY3LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNjcsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA2NywgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDY3LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjcsIDU2LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NywgNTUsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY3LCA1NCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjcsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NywgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY3LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNjcsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA2NywgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDY3LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIDcwLCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNjksIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCA2OCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNjYsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA2NiwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDY2LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIDU0LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNTMsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCA1MiwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNjYsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA2NSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDY1LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIDY4LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNjcsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCA2NiwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNjUsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA2NSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDY1LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIDUyLCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNTEsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCA1MCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU3LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNTcsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA1NywgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDU3LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTcsIDY2LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NywgNjUsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU3LCA1NywgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTcsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NywgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU3LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNTcsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA1NywgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDU3LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTcsIDUwLCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NywgNDksIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU3LCA0OCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTYsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNTYsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA1NiwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDU2LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTYsIDU3LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNTYsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCA1NSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTYsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNTYsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA1NiwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDU2LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTYsIDQ4LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNzAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCA2OSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNTUsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA1NSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDU1LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIDU1LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNTQsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCA1MywgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNTUsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA1NSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDU0LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIDY5LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNjgsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCA2NywgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNTQsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA1NCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDU0LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIDUzLCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNTIsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCA1MSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNTMsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA1MywgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDUzLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTMsIDY3LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MywgNjYsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCA2NSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTMsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MywgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNTMsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA1MywgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDUzLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTMsIDUxLCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MywgNTAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCA0OSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTMsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MiwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUyLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNTIsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA1MiwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDUyLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTIsIDY1LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MiwgNTcsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUyLCA1NiwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTIsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MiwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUyLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNTIsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA1MiwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDUyLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTIsIDQ5LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MiwgNDgsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUxLCA3MCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTEsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUxLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNTEsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA1MSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDUxLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTEsIDU2LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNTUsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUxLCA1NCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTEsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUxLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNTEsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA1MSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDUxLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIDcwLCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNjksIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCA2OCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNTAsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA1MCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDUwLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIDU0LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNTMsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCA1MiwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNTAsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA0OSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDQ5LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIDY4LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNjcsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCA2NiwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNDksIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA0OSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDQ5LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIDUyLCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNTEsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCA1MCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ4LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNDgsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA0OCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDQ4LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDgsIDY2LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OCwgNjUsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ4LCA1NywgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDgsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ4LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NywgNDgsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU3LCA0OCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIAorICAgIDQ4LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDgsIDUwLCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OCwgNDksIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ4LCA0OCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNzAsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNzAsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA3MCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDcwLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNzAsIDU3LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNTYsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCA1NSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNzAsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNzAsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA3MCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDcwLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNzAsIDQ4LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNzAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCA2OSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNjksIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA2OSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDY5LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIDU1LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNTQsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCA1MywgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNjksIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA2OSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDY4LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIDY5LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNjgsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCA2NywgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNjgsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA2OCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDY4LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIDUzLCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNTIsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCA1MSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNjcsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA2NywgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDY3LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjcsIDY3LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NywgNjYsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCA2NSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjcsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NywgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNjcsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA2NywgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDY3LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjcsIDUxLCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NywgNTAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCA0OSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjcsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NiwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY2LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNjYsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA2NiwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDY2LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjYsIDY1LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NiwgNTcsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY2LCA1NiwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjYsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NiwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY2LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNjYsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA2NiwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDY2LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjYsIDQ5LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NiwgNDgsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY1LCA3MCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjUsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY1LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNjUsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA2NSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDY1LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjUsIDU2LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNTUsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY1LCA1NCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjUsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY1LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNjUsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA2NSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDY1LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIDcwLCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NywgNjksIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCA2OCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NywgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNTcsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA1NywgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDU3LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIDU0LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NywgNTMsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCA1MiwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NywgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNTcsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA1NiwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDU2LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIDY4LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNjcsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCA2NiwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNTYsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA1NiwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDU2LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIDUyLCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNTEsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCA1MCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU1LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNTUsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA1NSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDU1LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTUsIDY2LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NSwgNjUsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU1LCA1NywgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTUsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU1LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNTUsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA1NSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDU1LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTUsIDUwLCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NSwgNDksIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU1LCA0OCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTQsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNTQsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA1NCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDU0LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTQsIDU3LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNTYsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCA1NSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTQsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNTQsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA1NCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDU0LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTQsIDQ4LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MywgNzAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCA2OSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MywgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNTMsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA1MywgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDUzLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIDU1LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MywgNTQsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCA1MywgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MywgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNTMsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA1MywgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDUyLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIDY5LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNjgsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCA2NywgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNTIsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA1MiwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDUyLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIDUzLCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNTIsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCA1MSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNTEsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA1MSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDUxLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTEsIDY3LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNjYsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCA2NSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTEsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNTEsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA1MSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDUxLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTEsIDUxLCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNTAsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCA0OSwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTEsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MCwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUwLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNTAsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA1MCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDUwLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTAsIDY1LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MCwgNTcsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUwLCA1NiwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTAsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUwLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNTAsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA1MCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDUwLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTAsIDQ5LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MCwgNDgsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ5LCA3MCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDksIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ5LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNDksIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA0OSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDQ5LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDksIDU2LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNTUsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ5LCA1NCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDksIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ5LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNDksIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA0OSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDQ5LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIDcwLCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNjksIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCA2OCwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNDgsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgCisgICAgNzAsIDU2LCA0OCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIAorICAgIDQ4LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIDU0LCAKKyAgICAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNTMsIDEyOCwgNzMsIAorICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCA1MiwgMTI4LCA3MywgNjgsIDY5LCAKKyAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTAsIDcwLCA1NiwgNDgsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc4LCA4NCwgNzMsIDcwLCA3MywgNjcsIDY1LCA4NCwgCisgICAgNzMsIDc5LCA3OCwgMTI4LCA3MywgNjgsIDY5LCA3OCwgODQsIDczLCA2NywgNjUsIDIwNCwgNzMsIDY3LCA3MiwgNzksIDg1LCAKKyAgICAxMjgsIDczLCA2NywgNzIsIDc5LCA4MywgMTI4LCA3MywgNjcsIDcyLCA3MywgNzcsIDY1LCA4NCwgNzksIDgzLCAxMjgsIAorICAgIDczLCA2NywgNzIsIDY1LCA2OCwgNzMsIDc4LCAxMjgsIDczLCA2NywgNjksIDc2LCA2NSwgNzgsIDY4LCA3MywgNjcsIDQ1LCAKKyAgICA4OSwgODIsIDEyOCwgNzMsIDY2LCA3MywgNzAsIDczLCA3NiwgNzMsIDEyOCwgNzMsIDY1LCA4NSwgNjgsIDY1LCAxMjgsIAorICAgIDczLCA0OCwgNDksIDUzLCAxMjgsIDczLCA0OCwgNDksIDUyLCAxMjgsIDczLCA0OCwgNDksIDUxLCAxMjgsIDczLCA0OCwgCisgICAgNDksIDUwLCAxMjgsIDczLCA0OCwgNDksIDQ5LCA2NSwgMTI4LCA3MywgNDgsIDQ5LCA0OSwgMTI4LCA3MywgNDgsIDQ5LCAKKyAgICA0OCwgNjUsIDEyOCwgNzMsIDQ4LCA0OSwgNDgsIDEyOCwgNzMsIDQ4LCA0OCwgNTcsIDY1LCAxMjgsIDczLCA0OCwgNDgsIAorICAgIDU3LCAxMjgsIDczLCA0OCwgNDgsIDU2LCAxMjgsIDczLCA0OCwgNDgsIDU1LCAxMjgsIDczLCA0OCwgNDgsIDU0LCAxMjgsIAorICAgIDczLCA0OCwgNDgsIDUzLCA2NSwgMTI4LCA3MywgNDgsIDQ4LCA1MywgMTI4LCA3MywgNDgsIDQ4LCA1MiwgMTI4LCA3MywgCisgICAgNDgsIDQ4LCA1MSwgMTI4LCA3MywgNDgsIDQ4LCA1MCwgMTI4LCA3MywgNDgsIDQ4LCA0OSwgMTI4LCA3MywgNDUsIDg5LCAKKyAgICA4NSwgMTI4LCA3MywgNDUsIDg5LCA3OSwgMTI4LCA3MywgNDUsIDg5LCA2OSwgNzksIDEyOCwgNzMsIDQ1LCA4OSwgNjksIAorICAgIDEyOCwgNzMsIDQ1LCA4OSwgNjUsIDY5LCAxMjgsIDczLCA0NSwgODksIDY1LCA0NSwgNzksIDEyOCwgNzMsIDQ1LCA4OSwgCisgICAgNjUsIDEyOCwgNzMsIDQ1LCA3OSwgNDUsIDczLCAxMjgsIDczLCA0NSwgNzksIDEyOCwgNzMsIDQ1LCA2OSwgODUsIDEyOCwgCisgICAgNzMsIDQ1LCA2NiwgNjksIDY1LCA3NywgMTI4LCA3MywgNDUsIDY1LCA4MiwgNjUsIDY5LCA2NSwgMTI4LCA3MywgNDUsIDY1LCAKKyAgICAxMjgsIDcyLCA5MCwgOTAsIDkwLCA3MSwgMTI4LCA3MiwgOTAsIDkwLCA5MCwgMTI4LCA3MiwgOTAsIDkwLCA4MCwgMTI4LCAKKyAgICA3MiwgOTAsIDkwLCAxMjgsIDcyLCA5MCwgODcsIDcxLCAxMjgsIDcyLCA5MCwgODcsIDEyOCwgNzIsIDkwLCA4NCwgMTI4LCAKKyAgICA3MiwgOTAsIDcxLCAxMjgsIDcyLCA4OSwgODMsIDg0LCA2OSwgODIsIDY5LCA4MywgNzMsIDIxMSwgNzIsIDg5LCA4MCwgNzksIAorICAgIDY4LCA3MywgNjUsIDgzLCA4NCwgNzksIDc2LCA2OSwgMTI4LCA3MiwgODksIDgwLCA3MiwgNjksIDc4LCA2NSwgODQsIDczLCAKKyAgICA3OSwgMjA2LCA3MiwgODksIDgwLCA3MiwgNjksIDc4LCA0NSwgNzcsIDczLCA3OCwgODUsIDgzLCAxMjgsIDcyLCA4OSwgODAsIAorICAgIDcyLCA2OSwgNzgsIDEyOCwgNzIsIDg5LCA4MCwgNzIsIDY5LCAyMDYsIDcyLCA4OCwgODcsIDcxLCAxMjgsIDcyLCA4OCwgCisgICAgODUsIDc5LCA4OCwgMTI4LCA3MiwgODgsIDg1LCA3OSwgODQsIDEyOCwgNzIsIDg4LCA4NSwgNzksIDgwLCAxMjgsIDcyLCAKKyAgICA4OCwgODUsIDc5LCAxMjgsIDcyLCA4OCwgNzksIDg4LCAxMjgsIDcyLCA4OCwgNzksIDg0LCAxMjgsIDcyLCA4OCwgNzksIAorICAgIDgwLCAxMjgsIDcyLCA4OCwgNzksIDEyOCwgNzIsIDg4LCA3MywgODgsIDEyOCwgNzIsIDg4LCA3MywgODQsIDEyOCwgNzIsIAorICAgIDg4LCA3MywgODAsIDEyOCwgNzIsIDg4LCA3MywgNjksIDg4LCAxMjgsIDcyLCA4OCwgNzMsIDY5LCA4NCwgMTI4LCA3MiwgCisgICAgODgsIDczLCA2OSwgODAsIDEyOCwgNzIsIDg4LCA3MywgNjksIDEyOCwgNzIsIDg4LCA3MywgMTI4LCA3MiwgODgsIDY5LCAKKyAgICA4OCwgMTI4LCA3MiwgODgsIDY5LCA4MCwgMTI4LCA3MiwgODgsIDY5LCAxMjgsIDcyLCA4OCwgNjUsIDg4LCAxMjgsIDcyLCAKKyAgICA4OCwgNjUsIDg0LCAxMjgsIDcyLCA4OCwgNjUsIDgwLCAxMjgsIDcyLCA4OCwgNjUsIDEyOCwgNzIsIDg3LCA4NSwgMTI4LCAKKyAgICA3MiwgODcsIDY1LCA3MywgODIsIDEyOCwgNzIsIDg2LCAxMjgsIDcyLCA4NSwgODMsIDcyLCA2OSwgMTk2LCA3MiwgODUsIAorICAgIDgyLCA2NSwgNzgsIDEyOCwgNzIsIDg1LCA3OSwgODQsIDEyOCwgNzIsIDg1LCA3OCwgNjgsIDgyLCA2OSwgNjgsIDEyOCwgCisgICAgNzIsIDg1LCA3OCwgNjgsIDgyLCA2OSwgMTk2LCA3MiwgODUsIDc4LCAxMjgsIDcyLCA4NSwgNzcsIDY1LCA3OCwgMTI4LCAKKyAgICA3MiwgODUsIDc3LCA2NSwgMjA2LCA3MiwgODUsIDc2LCA1MCwgMTI4LCA3MiwgODUsIDczLCA3MywgODQsIDc5LCAxMjgsIAorICAgIDcyLCA4NSwgNjYsIDUwLCAxMjgsIDcyLCA4NSwgNjYsIDE3OCwgNzIsIDg1LCA2NiwgMTI4LCA3MiwgODUsIDY1LCA4MiwgCisgICAgNjUsIDY4LCA2OCwgNzksIDEyOCwgNzIsIDg0LCA4MywgMTI4LCA3MiwgODQsIDc0LCAxMjgsIDcyLCA4MiwgODksIDg2LCAKKyAgICA3OCwgNzMsIDE5MywgNzIsIDgwLCA4NywgNzEsIDEyOCwgNzIsIDgwLCA2NSwgMTI4LCA3MiwgODAsIDEyOCwgNzIsIDc5LCAKKyAgICA4NSwgODMsIDE5NywgNzIsIDc5LCA4NSwgODIsIDcxLCA3NiwgNjUsIDgzLCA4MywgMTI4LCA3MiwgNzksIDg1LCA4MiwgNzEsIAorICAgIDc2LCA2NSwgODMsIDIxMSwgNzIsIDc5LCA4NSwgODIsIDEyOCwgNzIsIDc5LCA4NSwgMjEwLCA3MiwgNzksIDg0LCA2OSwgCisgICAgNzYsIDEyOCwgNzIsIDc5LCA4NCwgNjUsIDEyOCwgNzIsIDc5LCA4MywgODAsIDczLCA4NCwgNjUsIDc2LCAxMjgsIDcyLCAKKyAgICA3OSwgODIsIDgzLCA2OSwgMTI4LCA3MiwgNzksIDgyLCA4MywgMTk3LCA3MiwgNzksIDgyLCA3OCwgODMsIDEyOCwgNzIsIAorICAgIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDc2LCAyMTcsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCAKKyAgICA4NCwgNjUsIDc2LCA0NSwgNDgsIDU0LCA0NSwgNDgsIDU0LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgCisgICAgNjUsIDc2LCA0NSwgNDgsIDU0LCA0NSwgNDgsIDUzLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIAorICAgIDc2LCA0NSwgNDgsIDU0LCA0NSwgNDgsIDUyLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCAKKyAgICA0NSwgNDgsIDU0LCA0NSwgNDgsIDUxLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgCisgICAgNDgsIDU0LCA0NSwgNDgsIDUwLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIAorICAgIDU0LCA0NSwgNDgsIDQ5LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDU0LCAKKyAgICA0NSwgNDgsIDQ4LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUzLCA0NSwgCisgICAgNDgsIDU0LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUzLCA0NSwgNDgsIAorICAgIDUzLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUzLCA0NSwgNDgsIDUyLCAKKyAgICAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUzLCA0NSwgNDgsIDUxLCAxMjgsIAorICAgIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUzLCA0NSwgNDgsIDUwLCAxMjgsIDcyLCAKKyAgICA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUzLCA0NSwgNDgsIDQ5LCAxMjgsIDcyLCA3OSwgCisgICAgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUzLCA0NSwgNDgsIDQ4LCAxMjgsIDcyLCA3OSwgODIsIAorICAgIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUyLCA0NSwgNDgsIDU0LCAxMjgsIDcyLCA3OSwgODIsIDczLCAKKyAgICA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUyLCA0NSwgNDgsIDUzLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgCisgICAgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUyLCA0NSwgNDgsIDUyLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIAorICAgIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUyLCA0NSwgNDgsIDUxLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCAKKyAgICA4NCwgNjUsIDc2LCA0NSwgNDgsIDUyLCA0NSwgNDgsIDUwLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgCisgICAgNjUsIDc2LCA0NSwgNDgsIDUyLCA0NSwgNDgsIDQ5LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIAorICAgIDc2LCA0NSwgNDgsIDUyLCA0NSwgNDgsIDQ4LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCAKKyAgICA0NSwgNDgsIDUxLCA0NSwgNDgsIDU0LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgCisgICAgNDgsIDUxLCA0NSwgNDgsIDUzLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIAorICAgIDUxLCA0NSwgNDgsIDUyLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUxLCAKKyAgICA0NSwgNDgsIDUxLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUxLCA0NSwgCisgICAgNDgsIDUwLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUxLCA0NSwgNDgsIAorICAgIDQ5LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUxLCA0NSwgNDgsIDQ4LCAKKyAgICAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUwLCA0NSwgNDgsIDU0LCAxMjgsIAorICAgIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUwLCA0NSwgNDgsIDUzLCAxMjgsIDcyLCAKKyAgICA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUwLCA0NSwgNDgsIDUyLCAxMjgsIDcyLCA3OSwgCisgICAgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUwLCA0NSwgNDgsIDUxLCAxMjgsIDcyLCA3OSwgODIsIAorICAgIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUwLCA0NSwgNDgsIDUwLCAxMjgsIDcyLCA3OSwgODIsIDczLCAKKyAgICA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUwLCA0NSwgNDgsIDQ5LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgCisgICAgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUwLCA0NSwgNDgsIDQ4LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIAorICAgIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDQ5LCA0NSwgNDgsIDU0LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCAKKyAgICA4NCwgNjUsIDc2LCA0NSwgNDgsIDQ5LCA0NSwgNDgsIDUzLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgCisgICAgNjUsIDc2LCA0NSwgNDgsIDQ5LCA0NSwgNDgsIDUyLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIAorICAgIDc2LCA0NSwgNDgsIDQ5LCA0NSwgNDgsIDUxLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCAKKyAgICA0NSwgNDgsIDQ5LCA0NSwgNDgsIDUwLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgCisgICAgNDgsIDQ5LCA0NSwgNDgsIDQ5LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIAorICAgIDQ5LCA0NSwgNDgsIDQ4LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDQ4LCAKKyAgICA0NSwgNDgsIDU0LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDQ4LCA0NSwgCisgICAgNDgsIDUzLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDQ4LCA0NSwgNDgsIAorICAgIDUyLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDQ4LCA0NSwgNDgsIDUxLCAKKyAgICAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDQ4LCA0NSwgNDgsIDUwLCAxMjgsIAorICAgIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDQ4LCA0NSwgNDgsIDQ5LCAxMjgsIDcyLCAKKyAgICA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDQ4LCA0NSwgNDgsIDQ4LCAxMjgsIDcyLCA3OSwgCisgICAgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCAxMjgsIDcyLCA3OSwgODIsIDczLCAxMjgsIDcyLCA3OSwgODIsIAorICAgIDE5MywgNzIsIDc5LCA3OSwgODIsIDg1LCAxMjgsIDcyLCA3OSwgNzksIDgwLCAxMjgsIDcyLCA3OSwgNzksIDc4LCAxMjgsIAorICAgIDcyLCA3OSwgNzksIDc1LCA2OSwgMTk2LCA3MiwgNzksIDc4LCA2OSwgODksIDY2LCA2OSwgNjksIDEyOCwgNzIsIDc5LCA3OCwgCisgICAgNjksIDIxNywgNzIsIDc5LCA3NywgNzksIDg0LCA3MiwgNjksIDg0LCA3MywgNjcsIDEyOCwgNzIsIDc5LCA3NywgNzksIDg0LCAKKyAgICA3MiwgNjksIDg0LCA3MywgMTk1LCA3MiwgNzksIDc2LCA2OSwgMTI4LCA3MiwgNzksIDc2LCA2OCwgNzMsIDc4LCAxOTksIAorICAgIDcyLCA3OSwgNzYsIDY1LCA3NywgMTI4LCA3MiwgNzksIDc2LCA2NSwgMjA1LCA3MiwgNzksIDc1LCA2NSwgMTI4LCA3MiwgCisgICAgNzksIDczLCAxMjgsIDcyLCA3OSwgNjcsIDcyLCA3OSwgMTI4LCA3MiwgNzgsIDg1LCA4NCwgMTI4LCA3MiwgNzgsIDg1LCAKKyAgICA3OSwgODgsIDEyOCwgNzIsIDc4LCA4NSwgNzksIDEyOCwgNzIsIDc4LCA3OSwgODgsIDEyOCwgNzIsIDc4LCA3OSwgODQsIAorICAgIDEyOCwgNzIsIDc4LCA3OSwgODAsIDEyOCwgNzIsIDc4LCA3MywgODgsIDEyOCwgNzIsIDc4LCA3MywgODQsIDEyOCwgNzIsIAorICAgIDc4LCA3MywgODAsIDEyOCwgNzIsIDc4LCA3MywgNjksIDg4LCAxMjgsIDcyLCA3OCwgNzMsIDY5LCA4NCwgMTI4LCA3MiwgCisgICAgNzgsIDczLCA2OSwgODAsIDEyOCwgNzIsIDc4LCA3MywgNjksIDEyOCwgNzIsIDc4LCA3MywgMTI4LCA3MiwgNzgsIDY5LCAKKyAgICA4OCwgMTI4LCA3MiwgNzgsIDY5LCA4MCwgMTI4LCA3MiwgNzgsIDY5LCAxMjgsIDcyLCA3OCwgNjUsIDg4LCAxMjgsIDcyLCAKKyAgICA3OCwgNjUsIDg0LCAxMjgsIDcyLCA3OCwgNjUsIDgwLCAxMjgsIDcyLCA3OCwgNjUsIDEyOCwgNzIsIDc3LCA4OSwgODgsIAorICAgIDEyOCwgNzIsIDc3LCA4OSwgODIsIDg4LCAxMjgsIDcyLCA3NywgODksIDgyLCAxMjgsIDcyLCA3NywgODksIDgwLCAxMjgsIAorICAgIDcyLCA3NywgODksIDEyOCwgNzIsIDc3LCA4NSwgODgsIDEyOCwgNzIsIDc3LCA4NSwgODQsIDEyOCwgNzIsIDc3LCA4NSwgCisgICAgODIsIDg4LCAxMjgsIDcyLCA3NywgODUsIDgyLCAxMjgsIDcyLCA3NywgODUsIDgwLCAxMjgsIDcyLCA3NywgODUsIDc5LCAKKyAgICA4OCwgMTI4LCA3MiwgNzcsIDg1LCA3OSwgODAsIDEyOCwgNzIsIDc3LCA4NSwgNzksIDEyOCwgNzIsIDc3LCA4NSwgMTI4LCAKKyAgICA3MiwgNzcsIDc5LCA4OCwgMTI4LCA3MiwgNzcsIDc5LCA4NCwgMTI4LCA3MiwgNzcsIDc5LCA4MCwgMTI4LCA3MiwgNzcsIAorICAgIDc5LCAxMjgsIDcyLCA3NywgNzMsIDg4LCAxMjgsIDcyLCA3NywgNzMsIDg0LCAxMjgsIDcyLCA3NywgNzMsIDgwLCAxMjgsIAorICAgIDcyLCA3NywgNzMsIDY5LCA4OCwgMTI4LCA3MiwgNzcsIDczLCA2OSwgODAsIDEyOCwgNzIsIDc3LCA3MywgNjksIDEyOCwgCisgICAgNzIsIDc3LCA3MywgMTI4LCA3MiwgNzcsIDY5LCAxMjgsIDcyLCA3NywgNjUsIDg4LCAxMjgsIDcyLCA3NywgNjUsIDg0LCAKKyAgICAxMjgsIDcyLCA3NywgNjUsIDgwLCAxMjgsIDcyLCA3NywgNjUsIDEyOCwgNzIsIDc2LCA4OSwgODgsIDEyOCwgNzIsIDc2LCAKKyAgICA4OSwgODQsIDEyOCwgNzIsIDc2LCA4OSwgODIsIDg4LCAxMjgsIDcyLCA3NiwgODksIDgyLCAxMjgsIDcyLCA3NiwgODksIAorICAgIDgwLCAxMjgsIDcyLCA3NiwgODksIDEyOCwgNzIsIDc2LCA4NSwgODgsIDEyOCwgNzIsIDc2LCA4NSwgODQsIDEyOCwgNzIsIAorICAgIDc2LCA4NSwgODIsIDg4LCAxMjgsIDcyLCA3NiwgODUsIDgyLCAxMjgsIDcyLCA3NiwgODUsIDgwLCAxMjgsIDcyLCA3NiwgCisgICAgODUsIDc5LCA4OCwgMTI4LCA3MiwgNzYsIDg1LCA3OSwgODAsIDEyOCwgNzIsIDc2LCA4NSwgNzksIDEyOCwgNzIsIDc2LCAKKyAgICA4NSwgMTI4LCA3MiwgNzYsIDc5LCA4OCwgMTI4LCA3MiwgNzYsIDc5LCA4MCwgMTI4LCA3MiwgNzYsIDc5LCAxMjgsIDcyLCAKKyAgICA3NiwgNzMsIDg4LCAxMjgsIDcyLCA3NiwgNzMsIDg0LCAxMjgsIDcyLCA3NiwgNzMsIDgwLCAxMjgsIDcyLCA3NiwgNzMsIAorICAgIDY5LCA4OCwgMTI4LCA3MiwgNzYsIDczLCA2OSwgODAsIDEyOCwgNzIsIDc2LCA3MywgNjksIDEyOCwgNzIsIDc2LCA3MywgCisgICAgMTI4LCA3MiwgNzYsIDY5LCA4OCwgMTI4LCA3MiwgNzYsIDY5LCA4MCwgMTI4LCA3MiwgNzYsIDY5LCAxMjgsIDcyLCA3NiwgCisgICAgNjUsIDg4LCAxMjgsIDcyLCA3NiwgNjUsIDg0LCAxMjgsIDcyLCA3NiwgNjUsIDgwLCAxMjgsIDcyLCA3NiwgNjUsIDEyOCwgCisgICAgNzIsIDc1LCAxMjgsIDcyLCA3MywgOTAsIDY2LCAxMjgsIDcyLCA3MywgODMsIDg0LCA3OSwgODIsIDczLCAxOTUsIDcyLCAKKyAgICA3MywgODIsIDczLCA4MSwgMTI4LCA3MiwgNzMsIDcxLCA3MiwgNDUsIDgzLCA4MCwgNjksIDY5LCAxOTYsIDcyLCA3MywgNzEsIAorICAgIDcyLCA0NSwgODIsIDY5LCA4NiwgNjksIDgyLCA4MywgNjksIDY4LCA0NSwgMTg1LCA3MiwgNzMsIDcxLCA3MiwgNDUsIDcyLCAKKyAgICA2OSwgNjksIDc2LCA2OSwgMTk2LCA3MiwgNzMsIDY5LCA4OCwgMTI4LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDQ1LCA4MywgNzMsIAorICAgIDc5LCA4MywgMTI4LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDQ1LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDEyOCwgNzIsIDczLCA2OSwgCisgICAgODUsIDcyLCA0NSwgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIDcyLCA3MywgNjksIDg1LCA3MiwgNDUsIDc4LCA3MywgNjksIAorICAgIDg1LCA3OCwgMTI4LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDQ1LCA3NywgNzMsIDY5LCA4NSwgNzcsIDEyOCwgNzIsIDczLCA2OSwgCisgICAgODUsIDIwMCwgNzIsIDczLCA2OSwgODIsIDc5LCA3MSwgNzYsIDg5LCA4MCwgNzIsIDczLCAxOTUsIDcyLCA3MywgNjksIAorICAgIDEyOCwgNzIsIDczLCA2OCwgNzMsIDc4LCAxOTksIDcyLCA3MywgNjgsIDY5LCA4NCwgMTI4LCA3MiwgNzMsIDY4LCA2OSwgCisgICAgMTI4LCA3MiwgNzMsIDY2LCA3MywgODMsIDY3LCA4NSwgODMsIDEyOCwgNzIsIDcyLCA4NywgNjUsIDEyOCwgNzIsIDcyLCAKKyAgICA4NSwgMTI4LCA3MiwgNzIsIDczLCAxMjgsIDcyLCA3MiwgNjksIDY5LCAxMjgsIDcyLCA3MiwgNjksIDEyOCwgNzIsIDcyLCAKKyAgICA2NSwgNjUsIDEyOCwgNzIsIDcxLCAxMjgsIDcyLCA2OSwgODgsIDczLCA3MCwgNzksIDgyLCAyMDUsIDcyLCA2OSwgODgsIAorICAgIDY1LCA3MSwgODIsIDY1LCAyMDUsIDcyLCA2OSwgODgsIDY1LCA3MSwgNzksIDc4LCAxMjgsIDcyLCA2OSwgODIsIDg1LCA4NCwgCisgICAgODUsIDEyOCwgNzIsIDY5LCA4MiwgODUsIDEyOCwgNzIsIDY5LCA4MiwgNzcsIDczLCA4NCwgNzMsIDY1LCAyMDYsIDcyLCAKKyAgICA2OSwgODIsIDc3LCA3MywgNzksIDc4LCA3MywgNjUsIDIwNiwgNzIsIDY5LCA4MiwgNzcsIDY5LCA4MywgMTI4LCA3MiwgNjksIAorICAgIDgyLCA2OSwgMTI4LCA3MiwgNjksIDgyLCA2NiwgMTI4LCA3MiwgNjksIDgyLCA2NSwgNjksIDg1LCAyMDUsIDcyLCA2OSwgCisgICAgNzgsIDcxLCAxMjgsIDcyLCA2OSwgNzgsIDE5OSwgNzIsIDY5LCA3NywgODAsIDEyOCwgNzIsIDY5LCA3NiwgNzcsIDY5LCAKKyAgICA4NCwgMTI4LCA3MiwgNjksIDc2LCA3NywgNjksIDIxMiwgNzIsIDY5LCA3NiwgMjA1LCA3MiwgNjksIDc2LCA3MywgNjcsIAorICAgIDc5LCA4MCwgODQsIDY5LCA4MiwgMTI4LCA3MiwgNjksIDc1LCA4NSwgODQsIDY1LCA2NSwgODIsIDg1LCAxMjgsIDcyLCA2OSwgCisgICAgNzMsIDgzLCA2OSwgNzMsIDEyOCwgNzIsIDY5LCA2NSwgODYsIDg5LCAxMjgsIDcyLCA2OSwgNjUsIDg2LCA2OSwgNzgsIDc2LCAKKyAgICAyMTcsIDcyLCA2OSwgNjUsIDg2LCA2OSwgNzgsIDEyOCwgNzIsIDY5LCA2NSwgODYsIDY5LCAyMDYsIDcyLCA2OSwgNjUsIAorICAgIDgyLCA4NCwgODMsIDEyOCwgNzIsIDY5LCA2NSwgODIsIDg0LCA0NSwgODMsIDcyLCA2NSwgODAsIDY5LCAxOTYsIDcyLCA2OSwgCisgICAgNjUsIDgyLCA4NCwgMTI4LCA3MiwgNjksIDY1LCA4MiwgMjEyLCA3MiwgNjksIDY1LCA4MiwgNDUsIDc4LCA3OSwgNDUsIDY5LCAKKyAgICA4NiwgNzMsIDIwNCwgNzIsIDY5LCA2NSwgNjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIDEyOCwgNzIsIDY5LCA2NSwgNjgsIAorICAgIDgzLCA4NCwgNzksIDc4LCAxOTcsIDcyLCA2OSwgNjUsIDY4LCA4MCwgNzIsIDc5LCA3OCwgNjksIDEyOCwgNzIsIDY5LCA2NSwgCisgICAgNjgsIDczLCA3OCwgNzEsIDEyOCwgNzIsIDY2LCA2NSwgODMsIDY1LCA0NSwgNjksIDgzLCA2NSwgODMsIDE5MywgNzIsIDY2LCAKKyAgICA2NSwgODMsIDE5MywgNzIsIDY1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzIsIDY1LCA4NiwgNjksIDEyOCwgNzIsIAorICAgIDY1LCA4NSwgODAsIDg0LCA4MywgODQsIDczLCA3NywgNzcsIDY5LCAxMjgsIDcyLCA2NSwgODQsIDcyLCA3MywgMTI4LCA3MiwgCisgICAgNjUsIDg0LCA2OSwgMTI4LCA3MiwgNjUsIDg0LCA2NywgNzIsIDczLCA3OCwgMTk5LCA3MiwgNjUsIDg0LCA2NSwgMTk4LCAKKyAgICA3MiwgNjUsIDgzLCA2OSwgMjEwLCA3MiwgNjUsIDgzLCA2NSwgNzgsIDg0LCA2NSwgMTI4LCA3MiwgNjUsIDgyLCA4MCwgNzksIAorICAgIDc5LCA3OCwgMTI4LCA3MiwgNjUsIDgyLCA4MCwgNzksIDc5LCAyMDYsIDcyLCA2NSwgODIsIDc3LCA3OSwgNzgsIDczLCA2NywgCisgICAgMTI4LCA3MiwgNjUsIDgyLCA3NSwgNzYsIDY5LCA2NSwgMjA2LCA3MiwgNjUsIDgyLCA2OCwgNzgsIDY5LCA4MywgODMsIAorICAgIDEyOCwgNzIsIDY1LCA4MiwgMTk2LCA3MiwgNjUsIDgwLCA4MCwgMjE3LCA3MiwgNjUsIDc4LCA4NSwgNzgsIDc5LCAyMDcsIAorICAgIDcyLCA2NSwgNzgsIDcxLCA5MCwgNzIsIDc5LCAyMTMsIDcyLCA2NSwgNzgsIDY4LCA4MywgMTI4LCA3MiwgNjUsIDc4LCA2OCwgCisgICAgMjExLCA3MiwgNjUsIDc4LCA2OCwgNzYsIDY5LCA4MywgMTI4LCA3MiwgNjUsIDc4LCA2OCwgNzYsIDY5LCAxMjgsIDcyLCAKKyAgICA2NSwgNzgsIDY4LCA2NiwgNjUsIDcxLCAxMjgsIDcyLCA2NSwgNzgsIDY4LCAxMjgsIDcyLCA2NSwgNzgsIDQ1LCA2NSwgNzUsIAorICAgIDY1LCA4NCwgMTI4LCA3MiwgNjUsIDc3LCA5MCwgNjUsIDEyOCwgNzIsIDY1LCA3NywgODMsIDg0LCA2OSwgMjEwLCA3MiwgCisgICAgNjUsIDc3LCA3NywgNjksIDgyLCAxMjgsIDcyLCA2NSwgNzcsIDc3LCA2OSwgMjEwLCA3MiwgNjUsIDc3LCA2NiwgODUsIDgyLCAKKyAgICA3MSwgNjksIDgyLCAxMjgsIDcyLCA2NSwgNzYsIDgxLCA2NSwgMTI4LCA3MiwgNjUsIDc2LCA3OSwgMTI4LCA3MiwgNjUsIAorICAgIDc2LCA3MCwgNDUsIDY3LCA3MywgODIsIDY3LCA3NiwgMTk3LCA3MiwgNjUsIDc2LCA3MCwgMTI4LCA3MiwgNjUsIDc2LCA2NiwgCisgICAgNjksIDgyLCA2OCwgMTI4LCA3MiwgNjUsIDc2LCA2NSwgNzgsIDg0LCA2NSwgMTI4LCA3MiwgNjUsIDczLCA4NCwgODUsIAorICAgIDEyOCwgNzIsIDY1LCA3MywgODIsIDY3LCA4NSwgODQsIDEyOCwgNzIsIDY1LCA3MywgODIsIDEyOCwgNzIsIDY1LCA3MSwgCisgICAgNzYsIDY1LCAyMTgsIDcyLCA2NSwgNzEsIDc2LCAxMjgsIDcyLCA2NSwgNzAsIDg1LCA3NSwgNzIsIDY1LCAxMjgsIDcyLCAKKyAgICA2NSwgNzAsIDg1LCA3NSwgNzIsIDEyOCwgNzIsIDY1LCA2OSwgNzEsIDIwNCwgNzIsIDY1LCA2NSwgODIsIDg1LCAxMjgsIAorICAgIDcyLCA2NSwgNjUsIDc3LCAxMjgsIDcyLCA2NSwgMTkzLCA3MiwgNjUsIDQ1LCA3MiwgNjUsIDEyOCwgNzIsIDQ4LCA0OCwgCisgICAgNTYsIDEyOCwgNzIsIDQ4LCA0OCwgNTUsIDEyOCwgNzIsIDQ4LCA0OCwgNTQsIDY1LCAxMjgsIDcyLCA0OCwgNDgsIDU0LCAKKyAgICAxMjgsIDcyLCA0OCwgNDgsIDUzLCAxMjgsIDcyLCA0OCwgNDgsIDUyLCAxMjgsIDcyLCA0OCwgNDgsIDUxLCAxMjgsIDcyLCAKKyAgICA0OCwgNDgsIDUwLCAxMjgsIDcyLCA0OCwgNDgsIDQ5LCAxMjgsIDcyLCA0NSwgODQsIDg5LCA4MCwgMTk3LCA3MSwgODksIAorICAgIDg1LCAxMjgsIDcxLCA4OSwgNzksIDc4LCAxMjgsIDcxLCA4OSwgNzksIDEyOCwgNzEsIDg5LCA3MywgMTI4LCA3MSwgODksIAorICAgIDcwLCAyMTMsIDcxLCA4OSwgNjksIDY5LCAxMjgsIDcxLCA4OSwgNjUsIDgzLCAxMjgsIDcxLCA4OSwgNjUsIDY1LCAxMjgsIAorICAgIDcxLCA4OSwgNjUsIDEyOCwgNzEsIDg5LCAxMjgsIDcxLCA4NywgODUsIDEyOCwgNzEsIDg3LCA3MywgMTI4LCA3MSwgODcsIAorICAgIDY5LCA2OSwgMTI4LCA3MSwgODcsIDY5LCAxMjgsIDcxLCA4NywgNjUsIDY1LCAxMjgsIDcxLCA4NywgNjUsIDEyOCwgNzEsIAorICAgIDg2LCAxMjgsIDcxLCA4NSwgODIsIDg1LCA4MywgNzIsIDEyOCwgNzEsIDg1LCA4MiwgODUsIDc4LCAxMjgsIDcxLCA4NSwgCisgICAgODIsIDY1LCA3NywgODUsIDg0LCA3OSwgNzgsIDEyOCwgNzEsIDg1LCA4MiwgNTUsIDEyOCwgNzEsIDg1LCA3OCwgODUsIAorICAgIDEyOCwgNzEsIDg1LCA3OCwgMjEzLCA3MSwgODUsIDIwNSwgNzEsIDg1LCA3NiwgMTI4LCA3MSwgODUsIDczLCA4NCwgNjUsIAorICAgIDgyLCAxMjgsIDcxLCA4NSwgMTk5LCA3MSwgODUsIDY5LCA3MiwgMTI4LCA3MSwgODUsIDY5LCAyMDAsIDcxLCA4NSwgNjgsIAorICAgIDEyOCwgNzEsIDg1LCAxOTYsIDcxLCA4NSwgNjUsIDgyLCA2OCwgODMsIDc3LCA2NSwgNzgsIDEyOCwgNzEsIDg1LCA2NSwgCisgICAgODIsIDY4LCA2OSwgNjgsIDc4LCA2OSwgODMsIDgzLCAxMjgsIDcxLCA4NSwgNjUsIDgyLCA2OCwgNjksIDE5NiwgNzEsIDg1LCAKKyAgICA2NSwgODIsIDY4LCAxMjgsIDcxLCA4NSwgNjUsIDgyLCA2NSwgNzgsIDIwMSwgNzEsIDg1LCAxOTMsIDcxLCA4NSwgMTc4LCAKKyAgICA3MSwgODQsIDY5LCAyMTAsIDcxLCA4MywgODUsIDc3LCAxMjgsIDcxLCA4MywgODUsIDIwNSwgNzEsIDgyLCAyMTMsIDcxLCAKKyAgICA4MiwgNzksIDg3LCA3MywgNzgsIDE5OSwgNzEsIDgyLCA3OSwgODUsIDc4LCA2OCwgMTI4LCA3MSwgODIsIDc5LCA3OCwgODQsIAorICAgIDcyLCA3MywgODMsIDc3LCA2NSwgODQsIDY1LCAxMjgsIDcxLCA4MiwgNzMsIDc4LCA3OCwgNzMsIDc4LCAxOTksIDcxLCA4MiwgCisgICAgNzMsIDc3LCA2NSwgNjcsIDczLCA3OCwgMTk5LCA3MSwgODIsIDY5LCA3MSwgNzksIDgyLCA3MywgNjUsIDIwNiwgNzEsIDgyLCAKKyAgICA2OSwgNjksIDIwNiwgNzEsIDgyLCA2OSwgNjUsIDg0LCA3OCwgNjksIDgzLCA4MywgMTI4LCA3MSwgODIsIDY5LCA2NSwgODQsIAorICAgIDY5LCA4MiwgNDUsIDg0LCA3MiwgNjUsIDc4LCAxMjgsIDcxLCA4MiwgNjksIDY1LCA4NCwgNjksIDgyLCA0NSwgODQsIDcyLCAKKyAgICA2NSwgMjA2LCA3MSwgODIsIDY5LCA2NSwgODQsIDY5LCAyMTAsIDcxLCA4MiwgNjksIDY1LCAyMTIsIDcxLCA4MiwgNjUsIAorICAgIDg2LCA2OSwgODksIDY1LCA4MiwgMTk2LCA3MSwgODIsIDY1LCA4NiwgNjksIDQ1LCA3NywgNjUsIDY3LCA4MiwgNzksIDc4LCAKKyAgICAxMjgsIDcxLCA4MiwgNjUsIDg2LCA2OSwgNDUsIDY1LCA2NywgODUsIDg0LCA2OSwgNDUsIDcxLCA4MiwgNjUsIDg2LCA2OSwgCisgICAgMTI4LCA3MSwgODIsIDY1LCA4NiwgMTk3LCA3MSwgODIsIDY1LCA4NCwgNjksIDgyLCAxMjgsIDcxLCA4MiwgNjUsIDgzLCAKKyAgICA4MywgMTI4LCA3MSwgODIsIDY1LCA4MywgMjExLCA3MSwgODIsIDY1LCA4MCwgNzIsIDY5LCA3NywgMTk3LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNjksIDgzLCAxMjgsIDcxLCA4MiwgNjUsIDc3LCA3NywgMTkzLCA3MSwgODIsIDY1LCA3MywgNzgsIDEyOCwgCisgICAgNzEsIDgyLCA2NSwgNjgsIDg1LCA2NSwgODQsIDczLCA3OSwgMjA2LCA3MSwgODIsIDY1LCA2NywgNjksIDEyOCwgNzEsIDgyLCAKKyAgICA2NSwgNjcsIDE5NywgNzEsIDgwLCA2NSwgMTI4LCA3MSwgNzksIDgyLCA4NCwgNzIsIDc3LCA3MywgNzUsIDc5LCAyMDYsIAorICAgIDcxLCA3OSwgODIsIDg0LCAxMjgsIDcxLCA3OSwgODIsIDcxLCA3OSwgODQsIDY5LCA4MiwgNzMsIDEyOCwgNzEsIDc5LCA4MiwgCisgICAgNzEsIDc5LCA4MywgODksIDc4LCA4NCwgNzIsIDY5LCA4NCwgNzksIDc4LCAxMjgsIDcxLCA3OSwgODIsIDcxLCA3OSwgMjA2LCAKKyAgICA3MSwgNzksIDgyLCA3MSwgNzMsIDEyOCwgNzEsIDc5LCA4MiwgNjUsIDEyOCwgNzEsIDc5LCA3OSwgMTk2LCA3MSwgNzksIAorICAgIDc4LCA3MSwgMTI4LCA3MSwgNzksIDc2LCA2OCwgMTI4LCA3MSwgNzksIDc1LCAxMjgsIDcxLCA3OSwgNzMsIDc4LCAxOTksIAorICAgIDcxLCA3OSwgNjYsIDc2LCA3MywgNzgsIDEyOCwgNzEsIDc5LCA2NSwgNzYsIDEyOCwgNzEsIDc5LCA2NSwgMjA0LCA3MSwgCisgICAgNzksIDY1LCAxMjgsIDcxLCA3OCwgODksIDczLCA4MywgMTI4LCA3MSwgNzgsIDY1LCA4NiwgNzMsIDg5LCA2NSwgNzgsIDczLCAKKyAgICAxMjgsIDcxLCA3NiwgNzksIDg3LCA3MywgNzgsIDE5OSwgNzEsIDc2LCA3OSwgODQsIDg0LCA2NSwgMjA0LCA3MSwgNzYsIAorICAgIDc5LCA2NiwgMTk3LCA3MSwgNzYsIDczLCA4MywgODMsIDY1LCA3OCwgNjgsIDIwNywgNzEsIDc2LCA2OSwgNzMsIDY3LCAKKyAgICAyMDAsIDcxLCA3NiwgNjUsIDcxLCA3OSwgNzYsIDczLCAxMjgsIDcxLCA3NiwgNjUsIDEyOCwgNzEsIDc0LCA2OSwgMTI4LCAKKyAgICA3MSwgNzMsIDg4LCAxMjgsIDcxLCA3MywgODQsIDEyOCwgNzEsIDczLCA4MywgNzIsIDEyOCwgNzEsIDczLCA4MywgMjAwLCAKKyAgICA3MSwgNzMsIDgzLCA2NSwgNzYsIDEyOCwgNzEsIDczLCA4MiwgODUsIDY4LCA2NSwgNjUsIDEyOCwgNzEsIDczLCA4MiwgNzYsIAorICAgIDEyOCwgNzEsIDczLCA4MiwgNTEsIDEyOCwgNzEsIDczLCA4MiwgMTc5LCA3MSwgNzMsIDgyLCA1MCwgMTI4LCA3MSwgNzMsIAorICAgIDgyLCAxNzgsIDcxLCA3MywgODAsIDEyOCwgNzEsIDczLCA3OCwgNzMsIDczLCAxMjgsIDcxLCA3MywgNzcsIDY5LCA3NiwgCisgICAgMTI4LCA3MSwgNzMsIDc3LCA2OSwgMjA0LCA3MSwgNzMsIDc3LCAxMjgsIDcxLCA3MywgNzEsIDY1LCAxMjgsIDcxLCA3MywgCisgICAgNjksIDg0LCAxMjgsIDcxLCA3MywgNjgsIDczLCA3NywgMTI4LCA3MSwgNzMsIDY2LCA2NiwgNzksIDg1LCAyMTEsIDcxLCAKKyAgICA3MywgNjYsIDY1LCAxMjgsIDcxLCA3MywgNTIsIDEyOCwgNzEsIDczLCAxODAsIDcxLCA3MiwgOTAsIDEyOCwgNzEsIDcyLCAKKyAgICA4NywgNjUsIDEyOCwgNzEsIDcyLCA4NSwgNzgsIDc4LCA2NSwgMTI4LCA3MSwgNzIsIDg1LCA3OCwgNzgsIDE5MywgNzEsIAorICAgIDcyLCA4NSwgMTI4LCA3MSwgNzIsIDc5LCA4NSwgMTI4LCA3MSwgNzIsIDc5LCA4MywgODQsIDEyOCwgNzEsIDcyLCA3OSwgCisgICAgMTI4LCA3MSwgNzIsIDczLCAxMjgsIDcxLCA3MiwgNzIsIDY1LCAxMjgsIDcxLCA3MiwgNjksIDg1LCA4OCwgMTI4LCA3MSwgCisgICAgNzIsIDY5LCA4NSwgNzgsIDEyOCwgNzEsIDcyLCA2OSwgODUsIDcxLCA3MiwgNjksIDg1LCA2NSwgNjksIDc3LCAxMjgsIDcxLCAKKyAgICA3MiwgNjksIDg1LCA3MSwgNzIsIDY5LCA3OCwgMTI4LCA3MSwgNzIsIDY5LCA4NSwgNjUsIDY5LCA4MiwgNjUsIDY5LCAxMjgsIAorICAgIDcxLCA3MiwgNjksIDg1LCA2NSwgNjksIDcxLCA3MiwgNjksIDg1LCA2NSwgNjksIDEyOCwgNzEsIDcyLCA2OSwgODQsIDEyOCwgCisgICAgNzEsIDcyLCA2OSwgNjksIDEyOCwgNzEsIDcyLCA2OSwgMTI4LCA3MSwgNzIsIDE5NywgNzEsIDcyLCA2NSwgODksIDc4LCAKKyAgICAxMjgsIDcxLCA3MiwgNjUsIDgyLCA2NSwgNjksIDEyOCwgNzEsIDcyLCA2NSwgODAsIDEyOCwgNzEsIDcyLCA2NSwgNzgsIAorICAgIDEyOCwgNzEsIDcyLCA2NSwgNzcsIDY1LCA3NiwgMTI4LCA3MSwgNzIsIDY1LCA3MywgNzgsIDg1LCAxMjgsIDcxLCA3MiwgCisgICAgNjUsIDczLCA3OCwgMTI4LCA3MSwgNzIsIDY1LCA3MywgMjA2LCA3MSwgNzIsIDY1LCA2OCwgMTI4LCA3MSwgNzIsIDY1LCAKKyAgICA2NSwgNzcsIDY1LCA2OSwgMTI4LCA3MSwgNzIsIDY1LCA2NSwgMTI4LCA3MSwgNzEsIDg3LCA3MywgMTI4LCA3MSwgNzEsIAorICAgIDg3LCA2OSwgNjksIDEyOCwgNzEsIDcxLCA4NywgNjksIDEyOCwgNzEsIDcxLCA4NywgNjUsIDY1LCAxMjgsIDcxLCA3MSwgCisgICAgODcsIDY1LCAxMjgsIDcxLCA3MSwgODUsIDg4LCAxMjgsIDcxLCA3MSwgODUsIDg0LCAxMjgsIDcxLCA3MSwgODUsIDgyLCAKKyAgICA4OCwgMTI4LCA3MSwgNzEsIDg1LCA4MiwgMTI4LCA3MSwgNzEsIDg1LCA3OSwgODgsIDEyOCwgNzEsIDcxLCA4NSwgNzksIAorICAgIDg0LCAxMjgsIDcxLCA3MSwgODUsIDc5LCA4MCwgMTI4LCA3MSwgNzEsIDg1LCA3OSwgMTI4LCA3MSwgNzEsIDc5LCA4OCwgCisgICAgMTI4LCA3MSwgNzEsIDc5LCA4NCwgMTI4LCA3MSwgNzEsIDc5LCA4MCwgMTI4LCA3MSwgNzEsIDczLCA4OCwgMTI4LCA3MSwgCisgICAgNzEsIDczLCA4NCwgMTI4LCA3MSwgNzEsIDczLCA2OSwgODgsIDEyOCwgNzEsIDcxLCA3MywgNjksIDgwLCAxMjgsIDcxLCAKKyAgICA3MSwgNzMsIDY5LCAxMjgsIDcxLCA3MSwgNjksIDg4LCAxMjgsIDcxLCA3MSwgNjksIDg0LCAxMjgsIDcxLCA3MSwgNjksIAorICAgIDgwLCAxMjgsIDcxLCA3MSwgNjUsIDg4LCAxMjgsIDcxLCA3MSwgNjUsIDg0LCAxMjgsIDcxLCA3MSwgNjUsIDY1LCAxMjgsIAorICAgIDcxLCA2OSwgODQsIDE5MywgNzEsIDY5LCA4MywgODQsIDg1LCA4MiwgNjksIDEyOCwgNzEsIDY5LCA4MywgNzIsIDg1LCAKKyAgICAxMjgsIDcxLCA2OSwgODMsIDcyLCA4NCwgNzMsIDc4LCAxMjgsIDcxLCA2OSwgODMsIDcyLCA4NCwgNzMsIDIwNiwgNzEsIAorICAgIDY5LCA4MywgNzIsIDUwLCAxMjgsIDcxLCA2OSwgODIsIDgzLCA3MiwgNjUsIDg5LCA3MywgNzcsIDEyOCwgNzEsIDY5LCA4MiwgCisgICAgNzcsIDY1LCAyMDYsIDcxLCA2OSwgODIsIDY5LCA4MywgNzIsIDEyOCwgNzEsIDY5LCA4MiwgNjksIDgzLCAyMDAsIDcxLCAKKyAgICA2OSwgNzksIDc3LCA2OSwgODQsIDgyLCA3MywgNjcsIDY1LCA3NiwgNzYsIDIxNywgNzEsIDY5LCA3OSwgNzcsIDY5LCA4NCwgCisgICAgODIsIDczLCAxOTUsIDcxLCA2OSwgNzgsIDg0LCA3NiwgMTk3LCA3MSwgNjksIDc4LCA3MywgODQsIDczLCA4NiwgNjksIAorICAgIDEyOCwgNzEsIDY5LCA3OCwgNzMsIDc1LCAyMDEsIDcxLCA2OSwgNzgsIDY5LCA4MiwgNzMsIDE5NSwgNzEsIDY5LCA3NywgCisgICAgNzMsIDc4LCA3MywgMTI4LCA3MSwgNjksIDc3LCA3MywgNzgsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDcxLCA2OSwgMjA1LCAKKyAgICA3MSwgNjksIDY4LCA3OSwgNzYsIDY1LCAxMjgsIDcxLCA2OSwgNjgsIDY5LCAxMjgsIDcxLCA2OSwgNjYsIDIwNywgNzEsIAorICAgIDY5LCA2NiwgMTkzLCA3MSwgNjksIDY1LCA4MiwgMTI4LCA3MSwgNjksIDY1LCAyMTAsIDcxLCA2OCwgNjUsIDc4LCAxMjgsIAorICAgIDcxLCA2NywgNzMsIDcxLCAxMjgsIDcxLCA2NywgNjUsIDIwNiwgNzEsIDY2LCA3OSwgNzgsIDEyOCwgNzEsIDY2LCA3MywgCisgICAgNjksIDE5NywgNzEsIDY2LCA2OSwgODUsIDg4LCAxMjgsIDcxLCA2NiwgNjksIDg0LCAxMjgsIDcxLCA2NiwgNjUsIDg5LCAKKyAgICA3MywgMTI4LCA3MSwgNjYsIDY1LCA3NSwgODUsIDgyLCA4NSwgNzgsIDY5LCA3OCwgMTI4LCA3MSwgNjYsIDEyOCwgNzEsIAorICAgIDY1LCA4OSwgNjUsIDc4LCA4NSwgNzUsIDczLCA4NCwgODQsIDY1LCAxMjgsIDcxLCA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAKKyAgICAxMjgsIDcxLCA2NSwgODksIDEyOCwgNzEsIDY1LCA4NSwgNzgsIDg0LCA3NiwgNjksIDg0LCAxMjgsIDcxLCA2NSwgODQsIAorICAgIDcyLCA2OSwgODIsIDczLCA3OCwgNzEsIDEyOCwgNzEsIDY1LCA4NCwgNzIsIDY5LCA4MiwgNzMsIDc4LCAxOTksIDcxLCA2NSwgCisgICAgODQsIDY5LCAxMjgsIDcxLCA2NSwgODMsIDcyLCA2NSwgNzgsIDEyOCwgNzEsIDY1LCA4MiwgODMsIDcyLCA4NSwgNzgsIDczLCAKKyAgICAxMjgsIDcxLCA2NSwgODIsIDc5LCA3OCwgMTI4LCA3MSwgNjUsIDgyLCA3NywgNjksIDc4LCA4NCwgMTI4LCA3MSwgNjUsIAorICAgIDgyLCA2OCwgNjksIDc4LCAxMjgsIDcxLCA2NSwgODIsIDUxLCAxMjgsIDcxLCA2NSwgODAsIDgwLCA2OSwgMTk2LCA3MSwgCisgICAgNjUsIDIwOCwgNzEsIDY1LCA3OCwgNzcsIDY1LCAxMjgsIDcxLCA2NSwgNzgsIDcxLCA3MywgNjUsIDEyOCwgNzEsIDY1LCAKKyAgICA3OCwgNjgsIDE5MywgNzEsIDY1LCA3OCwgNTAsIDEyOCwgNzEsIDY1LCA3OCwgMTc4LCA3MSwgNjUsIDc3LCA3NywgNjUsIAorICAgIDEyOCwgNzEsIDY1LCA3NywgNzYsIDY1LCAxMjgsIDcxLCA2NSwgNzcsIDc2LCAxMjgsIDcxLCA2NSwgNzcsIDY5LCAxMjgsIAorICAgIDcxLCA2NSwgNzcsIDE5NywgNzEsIDY1LCA3NywgNjUsIDc4LCAxMjgsIDcxLCA2NSwgNzcsIDY1LCA3NiwgMTI4LCA3MSwgCisgICAgNjUsIDc3LCA2NSwgMjA0LCA3MSwgNjUsIDcxLCAxMjgsIDcxLCA2NSwgNzAsIDEyOCwgNzEsIDY1LCAxOTgsIDcxLCA2NSwgCisgICAgNjksIDg0LCA4NCwgNjUsIDQ1LCA4MCwgNzMsIDc2LCA3NiwgNjUsIDEyOCwgNzEsIDY1LCA2OCwgNzksIDc2LCAxMjgsIDcxLCAKKyAgICA2NSwgNjgsIDEyOCwgNzEsIDY1LCAxOTYsIDcxLCA2NSwgNjYsIDY1LCAxMjgsIDcxLCA2NSwgNjYsIDE5MywgNzEsIDY1LCAKKyAgICA2NSwgNzAsIDg1LCAxMjgsIDcxLCA2NSwgMTc4LCA3MSwgNDgsIDUzLCA1MiwgMTI4LCA3MSwgNDgsIDUzLCA1MSwgMTI4LCAKKyAgICA3MSwgNDgsIDUzLCA1MCwgMTI4LCA3MSwgNDgsIDUzLCA0OSwgMTI4LCA3MSwgNDgsIDUzLCA0OCwgMTI4LCA3MSwgNDgsIAorICAgIDUyLCA1NywgMTI4LCA3MSwgNDgsIDUyLCA1NiwgMTI4LCA3MSwgNDgsIDUyLCA1NSwgMTI4LCA3MSwgNDgsIDUyLCA1NCwgCisgICAgMTI4LCA3MSwgNDgsIDUyLCA1MywgNjUsIDEyOCwgNzEsIDQ4LCA1MiwgNTMsIDEyOCwgNzEsIDQ4LCA1MiwgNTIsIDEyOCwgCisgICAgNzEsIDQ4LCA1MiwgNTEsIDY1LCAxMjgsIDcxLCA0OCwgNTIsIDUxLCAxMjgsIDcxLCA0OCwgNTIsIDUwLCAxMjgsIDcxLCAKKyAgICA0OCwgNTIsIDQ5LCAxMjgsIDcxLCA0OCwgNTIsIDQ4LCAxMjgsIDcxLCA0OCwgNTEsIDU3LCAxMjgsIDcxLCA0OCwgNTEsIAorICAgIDU2LCAxMjgsIDcxLCA0OCwgNTEsIDU1LCA2NSwgMTI4LCA3MSwgNDgsIDUxLCA1NSwgMTI4LCA3MSwgNDgsIDUxLCA1NCwgCisgICAgNjUsIDEyOCwgNzEsIDQ4LCA1MSwgNTQsIDEyOCwgNzEsIDQ4LCA1MSwgNTMsIDEyOCwgNzEsIDQ4LCA1MSwgNTIsIDEyOCwgCisgICAgNzEsIDQ4LCA1MSwgNTEsIDEyOCwgNzEsIDQ4LCA1MSwgNTAsIDEyOCwgNzEsIDQ4LCA1MSwgNDksIDEyOCwgNzEsIDQ4LCAKKyAgICA1MSwgNDgsIDEyOCwgNzEsIDQ4LCA1MCwgNTcsIDEyOCwgNzEsIDQ4LCA1MCwgNTYsIDEyOCwgNzEsIDQ4LCA1MCwgNTUsIAorICAgIDEyOCwgNzEsIDQ4LCA1MCwgNTQsIDY1LCAxMjgsIDcxLCA0OCwgNTAsIDU0LCAxMjgsIDcxLCA0OCwgNTAsIDUzLCAxMjgsIAorICAgIDcxLCA0OCwgNTAsIDUyLCAxMjgsIDcxLCA0OCwgNTAsIDUxLCAxMjgsIDcxLCA0OCwgNTAsIDUwLCAxMjgsIDcxLCA0OCwgCisgICAgNTAsIDQ5LCAxMjgsIDcxLCA0OCwgNTAsIDQ4LCA2NSwgMTI4LCA3MSwgNDgsIDUwLCA0OCwgMTI4LCA3MSwgNDgsIDQ5LCAKKyAgICA1NywgMTI4LCA3MSwgNDgsIDQ5LCA1NiwgMTI4LCA3MSwgNDgsIDQ5LCA1NSwgMTI4LCA3MSwgNDgsIDQ5LCA1NCwgMTI4LCAKKyAgICA3MSwgNDgsIDQ5LCA1MywgMTI4LCA3MSwgNDgsIDQ5LCA1MiwgMTI4LCA3MSwgNDgsIDQ5LCA1MSwgMTI4LCA3MSwgNDgsIAorICAgIDQ5LCA1MCwgMTI4LCA3MSwgNDgsIDQ5LCA0OSwgNjUsIDEyOCwgNzEsIDQ4LCA0OSwgNDksIDEyOCwgNzEsIDQ4LCA0OSwgCisgICAgNDgsIDEyOCwgNzEsIDQ4LCA0OCwgNTcsIDEyOCwgNzEsIDQ4LCA0OCwgNTYsIDEyOCwgNzEsIDQ4LCA0OCwgNTUsIDY2LCAKKyAgICAxMjgsIDcxLCA0OCwgNDgsIDU1LCA2NSwgMTI4LCA3MSwgNDgsIDQ4LCA1NSwgMTI4LCA3MSwgNDgsIDQ4LCA1NCwgNjUsIAorICAgIDEyOCwgNzEsIDQ4LCA0OCwgNTQsIDEyOCwgNzEsIDQ4LCA0OCwgNTMsIDEyOCwgNzEsIDQ4LCA0OCwgNTIsIDEyOCwgNzEsIAorICAgIDQ4LCA0OCwgNTEsIDEyOCwgNzEsIDQ4LCA0OCwgNTAsIDEyOCwgNzEsIDQ4LCA0OCwgNDksIDEyOCwgNzAsIDg5LCA4OCwgCisgICAgMTI4LCA3MCwgODksIDg0LCAxMjgsIDcwLCA4OSwgODAsIDEyOCwgNzAsIDg5LCA2NSwgMTI4LCA3MCwgODcsIDczLCAxMjgsIAorICAgIDcwLCA4NywgNjksIDY5LCAxMjgsIDcwLCA4NywgNjksIDEyOCwgNzAsIDg3LCA2NSwgNjUsIDEyOCwgNzAsIDg3LCA2NSwgCisgICAgMTI4LCA3MCwgODYsIDgzLCA1MSwgMTI4LCA3MCwgODYsIDgzLCA1MCwgMTI4LCA3MCwgODYsIDgzLCA0OSwgMTI4LCA3MCwgCisgICAgODUsIDg4LCAxMjgsIDcwLCA4NSwgODQsIDEyOCwgNzAsIDg1LCA4MywgNjksIDEyOCwgNzAsIDg1LCA4MywgMTkzLCA3MCwgCisgICAgODUsIDgyLCA4OCwgMTI4LCA3MCwgODUsIDgwLCAxMjgsIDcwLCA4NSwgNzgsIDY5LCA4MiwgNjUsIDIwNCwgNzAsIDg1LCAKKyAgICA3OCwgNjcsIDg0LCA3MywgNzksIDc4LCA2NSwgMjA0LCA3MCwgODUsIDc4LCA2NywgODQsIDczLCA3OSwgNzgsIDEyOCwgNzAsIAorICAgIDg1LCA3NiwgNzYsIDc4LCA2OSwgODMsIDgzLCAxMjgsIDcwLCA4NSwgNzYsIDIwNCwgNzAsIDg1LCA3NCwgNzMsIDEyOCwgCisgICAgNzAsIDg1LCA2OSwgODQsIDEyOCwgNzAsIDg1LCA2OSwgMjA0LCA3MCwgODUsIDY5LCAxMjgsIDcwLCA4NCwgNzIsIDc5LCAKKyAgICA4MiwgMTkzLCA3MCwgODMsIDczLCAxMjgsIDcwLCA4MiwgNzksIDg3LCA3OCwgNzMsIDc4LCA3MSwgMTI4LCA3MCwgODIsIAorICAgIDc5LCA4NywgNzgsIDczLCA3OCwgMTk5LCA3MCwgODIsIDc5LCA4NywgNzgsIDEyOCwgNzAsIDgyLCA3OSwgNzgsIDg0LCA0NSwgCisgICAgODQsIDczLCA3NiwgODQsIDY5LCAxOTYsIDcwLCA4MiwgNzksIDc4LCA4NCwgNDUsIDcwLCA2NSwgNjcsIDczLCA3OCwgMTk5LCAKKyAgICA3MCwgODIsIDc5LCAyMDUsIDcwLCA4MiwgNzksIDcxLCAxMjgsIDcwLCA4MiwgNzksIDE5OSwgNzAsIDgyLCA3MywgODQsIAorICAgIDg1LCAxMjgsIDcwLCA4MiwgNzMsIDY5LCA4MywgMTI4LCA3MCwgODIsIDczLCA2OSwgMTk2LCA3MCwgODIsIDczLCA2NywgCisgICAgNjUsIDg0LCA3MywgODYsIDY5LCAxMjgsIDcwLCA4MiwgNjksIDg0LCA2NiwgNzksIDY1LCA4MiwgNjgsIDEyOCwgNzAsIDgyLCAKKyAgICA2OSwgNzgsIDY3LCAyMDAsIDcwLCA4MiwgNjksIDY5LCAxMjgsIDcwLCA4MiwgNjksIDE5NywgNzAsIDgyLCA2NSwgNzgsIAorICAgIDE5NSwgNzAsIDgyLCA2NSwgNzcsIDY5LCAxMjgsIDcwLCA4MiwgNjUsIDcxLCA4MiwgNjUsIDc4LCA4NCwgMTI4LCA3MCwgCisgICAgODIsIDY1LCA3MSwgNzcsIDY5LCA3OCwgODQsIDEyOCwgNzAsIDgyLCA2NSwgNjcsIDg0LCA3MywgNzksIDIwNiwgNzAsIDc5LCAKKyAgICA4OCwgMTI4LCA3MCwgNzksIDg1LCA4MiwgODQsIDY5LCA2OSwgNzgsIDEyOCwgNzAsIDc5LCA4NSwgODIsIDg0LCA2OSwgNjksIAorICAgIDIwNiwgNzAsIDc5LCA4NSwgODIsIDQ1LCA4NCwgNzIsIDczLCA4MiwgODQsIDg5LCAxMjgsIDcwLCA3OSwgODUsIDgyLCA0NSwgCisgICAgODMsIDg0LCA4MiwgNzMsIDc4LCAxOTksIDcwLCA3OSwgODUsIDgyLCA0NSwgODAsIDY5LCA4MiwgNDUsIDY5LCAyMDUsIDcwLCAKKyAgICA3OSwgODUsIDgyLCA0NSwgNzYsIDczLCA3OCwgMTk3LCA3MCwgNzksIDg1LCAyMTAsIDcwLCA3OSwgODUsIDc4LCA4NCwgNjUsIAorICAgIDczLCA3OCwgMTI4LCA3MCwgNzksIDgzLCA4NCwgNjksIDgyLCA3MywgNzgsIDcxLCAxMjgsIDcwLCA3OSwgODIsIDg3LCA2NSwgCisgICAgODIsIDY4LCAxMjgsIDcwLCA3OSwgODIsIDg0LCA4OSwgMTI4LCA3MCwgNzksIDgyLCA4NCwgMjE3LCA3MCwgNzksIDgyLCAKKyAgICA4NCwgNjksIDEyOCwgNzAsIDc5LCA4MiwgNzcsIDIxMSwgNzAsIDc5LCA4MiwgNzcsIDY1LCA4NCwgODQsIDczLCA3OCwgNzEsIAorICAgIDEyOCwgNzAsIDc5LCA4MiwgNzUsIDY5LCAxOTYsIDcwLCA3OSwgODIsIDY3LCA2OSwgODMsIDEyOCwgNzAsIDc5LCA4MiwgCisgICAgNjcsIDY5LCAxMjgsIDcwLCA3OSwgODAsIDEyOCwgNzAsIDc5LCA3OSwgODQsIDgzLCA4NCwgNzksIDc5LCA3NiwgMTI4LCAKKyAgICA3MCwgNzksIDc5LCA4NCwgODAsIDgyLCA3MywgNzgsIDg0LCA4MywgMTI4LCA3MCwgNzksIDc5LCA4NCwgNzgsIDc5LCA4NCwgCisgICAgMTk3LCA3MCwgNzksIDc5LCA4NCwgNjYsIDY1LCA3NiwgNzYsIDEyOCwgNzAsIDc5LCA3OSwgODQsIDEyOCwgNzAsIDc5LCAKKyAgICA3OSwgNjgsIDEyOCwgNzAsIDc5LCA3OSwgMTI4LCA3MCwgNzksIDc4LCA3MSwgNzcsIDY1LCA3OCwgMTI4LCA3MCwgNzksIAorICAgIDc3LCAxMjgsIDcwLCA3OSwgNzYsIDc2LCA4OSwgMTI4LCA3MCwgNzksIDc2LCA3NiwgNzksIDg3LCA3MywgNzgsIDcxLCAKKyAgICAxMjgsIDcwLCA3OSwgNzYsIDY4LCA2OSwgODIsIDEyOCwgNzAsIDc5LCA3NiwgNjgsIDY5LCAxOTYsIDcwLCA3OSwgNzEsIAorICAgIDcxLCA4OSwgMTI4LCA3MCwgMjA3LCA3MCwgNzcsIDEyOCwgNzAsIDc2LCA4OSwgMTI4LCA3MCwgNzYsIDg1LCA4NCwgODQsIAorICAgIDY5LCA4MiwgNzMsIDc4LCAxOTksIDcwLCA3NiwgODUsIDg0LCA2OSwgMTI4LCA3MCwgNzYsIDg1LCA4MywgNzIsIDY5LCAKKyAgICAxOTYsIDcwLCA3NiwgNzksIDg3LCA3MywgNzgsIDE5OSwgNzAsIDc2LCA3OSwgODcsIDY5LCAyMTAsIDcwLCA3NiwgNzksIAorICAgIDg1LCA4MiwgNzMsIDgzLCA3MiwgMTI4LCA3MCwgNzYsIDc5LCA4MiwgNjksIDg0LCA4NCwgNjksIDEyOCwgNzAsIDc2LCA3OSwgCisgICAgODIsIDY1LCAyMDQsIDcwLCA3NiwgNzksIDgwLCA4MCwgMjE3LCA3MCwgNzYsIDc5LCA3OSwgODIsIDEyOCwgNzAsIDc2LCAKKyAgICA3MywgODAsIDEyOCwgNzAsIDc2LCA3MywgNzEsIDcyLCA4NCwgMTI4LCA3MCwgNzYsIDY5LCA4OCwgODUsIDgzLCAxMjgsIAorICAgIDcwLCA3NiwgNjksIDg4LCA2OSwgMTk2LCA3MCwgNzYsIDY5LCA4NSwgODIsIDQ1LCA2OCwgNjksIDQ1LCA3NiwgNzMsIDgzLCAKKyAgICAxMjgsIDcwLCA3NiwgNjUsIDg0LCA4NCwgNjksIDc4LCA2OSwgMTk2LCA3MCwgNzYsIDY1LCA4NCwgNzgsIDY5LCA4MywgODMsIAorICAgIDEyOCwgNzAsIDc2LCA2NSwgODQsIDEyOCwgNzAsIDc2LCA2NSwgMjEyLCA3MCwgNzYsIDY1LCA3MSwgODMsIDEyOCwgNzAsIAorICAgIDc2LCA2NSwgNzEsIDQ1LCA1MywgMTI4LCA3MCwgNzYsIDY1LCA3MSwgNDUsIDUyLCAxMjgsIDcwLCA3NiwgNjUsIDcxLCA0NSwgCisgICAgNTEsIDEyOCwgNzAsIDc2LCA2NSwgNzEsIDQ1LCA1MCwgMTI4LCA3MCwgNzYsIDY1LCA3MSwgNDUsIDQ5LCAxMjgsIDcwLCAKKyAgICA3NiwgNjUsIDcxLCAxMjgsIDcwLCA3NiwgNjUsIDE5OSwgNzAsIDc2LCA2NSwgMTI4LCA3MCwgNzYsIDEyOCwgNzAsIDczLCAKKyAgICA4OCwgNjksIDY4LCA0NSwgNzAsIDc5LCA4MiwgMjA1LCA3MCwgNzMsIDg4LCAxMjgsIDcwLCA3MywgODYsIDY5LCA0NSwgODQsIAorICAgIDcyLCA3MywgODIsIDg0LCA4OSwgMTI4LCA3MCwgNzMsIDg2LCA2OSwgNDUsIDc2LCA3MywgNzgsIDE5NywgNzAsIDczLCA4NiwgCisgICAgMTk3LCA3MCwgNzMsIDg0LCA2NSwgMTI4LCA3MCwgNzMsIDg0LCAxMjgsIDcwLCA3MywgODMsIDg0LCA2OSwgMTk2LCA3MCwgCisgICAgNzMsIDgzLCA4NCwgMTI4LCA3MCwgNzMsIDgzLCA3MiwgNzMsIDc4LCAxOTksIDcwLCA3MywgODMsIDcyLCA3MiwgNzksIDc5LCAKKyAgICA3NSwgMTI4LCA3MCwgNzMsIDgzLCA3MiwgNzIsIDc5LCA3OSwgMjAzLCA3MCwgNzMsIDgzLCA3MiwgNjksIDg5LCA2OSwgCisgICAgMTI4LCA3MCwgNzMsIDgzLCA3MiwgMTI4LCA3MCwgNzMsIDgzLCAyMDAsIDcwLCA3MywgODIsIDgzLCAyMTIsIDcwLCA3MywgCisgICAgODIsIDczLCAxMjgsIDcwLCA3MywgODIsIDY5LCA4NywgNzksIDgyLCA3NSwgODMsIDEyOCwgNzAsIDczLCA4MiwgNjksIDg3LCAKKyAgICA3OSwgODIsIDIwMywgNzAsIDczLCA4MiwgNjksIDEyOCwgNzAsIDczLCA4MiwgMTk3LCA3MCwgNzMsIDgwLCAxMjgsIDcwLCAKKyAgICA3MywgNzgsIDczLCA4NCwgMTk3LCA3MCwgNzMsIDc4LCA3MSwgNjksIDgyLCA3OCwgNjUsIDczLCA3NiwgODMsIDEyOCwgNzAsIAorICAgIDczLCA3OCwgNzEsIDY5LCA4MiwgNjksIDE5NiwgNzAsIDczLCA3OCwgNjUsIDc4LCA2NywgNzMsIDY1LCA3NiwgMTI4LCA3MCwgCisgICAgNzMsIDc2LCA3NiwgNjksIDgyLCAxMjgsIDcwLCA3MywgNzYsIDc2LCA2OSwgMTk2LCA3MCwgNzMsIDc2LCA3NiwgMTI4LCAKKyAgICA3MCwgNzMsIDc2LCAyMDQsIDcwLCA3MywgNzYsIDE5NywgNzAsIDczLCA3MywgMTI4LCA3MCwgNzMsIDcxLCA4NSwgODIsIAorICAgIDY5LCA0NSwgNTEsIDEyOCwgNzAsIDczLCA3MSwgODUsIDgyLCA2OSwgNDUsIDUwLCAxMjgsIDcwLCA3MywgNzEsIDg1LCA4MiwgCisgICAgNjksIDQ1LCA0OSwgMTI4LCA3MCwgNzMsIDcxLCA4NSwgODIsIDE5NywgNzAsIDczLCA3MSwgNzIsIDg0LCAxMjgsIDcwLCAKKyAgICA3MywgNzAsIDg0LCA4OSwgMTI4LCA3MCwgNzMsIDcwLCA4NCwgMjE3LCA3MCwgNzMsIDcwLCA4NCwgNzIsIDgzLCAxMjgsIAorICAgIDcwLCA3MywgNzAsIDg0LCA3MiwgMTI4LCA3MCwgNzMsIDcwLCA4NCwgNjksIDY5LCA3OCwgMTI4LCA3MCwgNzMsIDcwLCA4NCwgCisgICAgNjksIDY5LCAyMDYsIDcwLCA3MywgNjksIDc2LCA2OCwgMTI4LCA3MCwgNzIsIDg0LCA3OSwgODIsIDE5MywgNzAsIDcwLCAKKyAgICA3NiwgMTI4LCA3MCwgNzAsIDczLCAxMjgsIDcwLCA2OSwgODUsIDg4LCAxMjgsIDcwLCA2OSwgODUsIDcwLCA2OSwgODUsIAorICAgIDY1LCA2OSwgODQsIDEyOCwgNzAsIDY5LCA4MywgODQsIDczLCA4NiwgNjUsIDc2LCAxMjgsIDcwLCA2OSwgODIsIDgyLCA4OSwgCisgICAgMTI4LCA3MCwgNjksIDgyLCA4MiwgNzMsIDIxMSwgNzAsIDY5LCA4MiwgNzcsIDY1LCA4NCwgNjUsIDEyOCwgNzAsIDY5LCAKKyAgICA4MiwgNzcsIDY1LCA4NCwgMTkzLCA3MCwgNjksIDc5LCAyMDAsIDcwLCA2OSwgNzgsIDE5OSwgNzAsIDY5LCA3OCwgNjcsIAorICAgIDY5LCAxMjgsIDcwLCA2OSwgNzcsIDczLCA3OCwgNzMsIDc4LCAxOTcsIDcwLCA2OSwgNzcsIDY1LCA3NiwgNjksIDEyOCwgCisgICAgNzAsIDY5LCA3NywgNjUsIDc2LCAxOTcsIDcwLCA2OSwgNzYsIDc2LCA3OSwgODcsIDgzLCA3MiwgNzMsIDgwLCAxMjgsIDcwLCAKKyAgICA2OSwgNzMsIDEyOCwgNzAsIDY5LCA3MiwgMjEzLCA3MCwgNjksIDcyLCAxMjgsIDcwLCA2OSwgMjAwLCA3MCwgNjksIDY5LCAKKyAgICA3OCwgNzEsIDEyOCwgNzAsIDY5LCA2OSwgNjgsIDEyOCwgNzAsIDY5LCA2OSwgMTk2LCA3MCwgNjksIDY5LCAxMjgsIDcwLCAKKyAgICA2OSwgNjYsIDgyLCA4NSwgNjUsIDgyLCA4OSwgMTI4LCA3MCwgNjksIDY1LCA4NCwgNzIsIDY5LCA4MiwgMTI4LCA3MCwgNjksIAorICAgIDY1LCA4NCwgNzIsIDY5LCAyMTAsIDcwLCA2OSwgNjUsIDgyLCA3OCwgMTI4LCA3MCwgNjksIDY1LCA4MiwgNzAsIDg1LCAKKyAgICAyMDQsIDcwLCA2OSwgNjUsIDgyLCAxMjgsIDcwLCA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDcwLCA2NSwgODksIAorICAgIDEyOCwgNzAsIDY1LCA4OCwgMTI4LCA3MCwgNjUsIDIxNiwgNzAsIDY1LCA4NCwgNzMsIDcxLCA4NSwgNjksIDEyOCwgNzAsIAorICAgIDY1LCA4NCwgNzIsIDY5LCA4MiwgMTI4LCA3MCwgNjUsIDg0LCA3MiwgNjksIDIxMCwgNzAsIDY1LCA4NCwgNzIsIDY1LCA4NCwgCisgICAgNjUsIDc4LCAxMjgsIDcwLCA2NSwgODQsIDcyLCA2NSwgODQsIDY1LCAyMDYsIDcwLCA2NSwgODQsIDcyLCA2NSwgMTI4LCAKKyAgICA3MCwgNjUsIDg0LCA3MiwgMTkzLCA3MCwgNjUsIDg0LCAxMjgsIDcwLCA2NSwgODIsIDgzLCAyMDEsIDcwLCA2NSwgODEsIAorICAgIDEyOCwgNzAsIDY1LCA4MCwgMTI4LCA3MCwgNjUsIDc4LCA3MSwgMTI4LCA3MCwgNjUsIDc4LCA2OSwgODIsIDc5LCA4MywgCisgICAgNzMsIDIxMSwgNzAsIDY1LCA3OCwgMTI4LCA3MCwgNjUsIDc3LCA3MywgNzYsIDg5LCAxMjgsIDcwLCA2NSwgNzYsIDc2LCAKKyAgICA3MywgNzgsIDE5OSwgNzAsIDY1LCA3NiwgNzYsIDY5LCAyMDYsIDcwLCA2NSwgNzMsIDc2LCA4NSwgODIsIDY5LCAxMjgsIAorICAgIDcwLCA2NSwgNzMsIDcyLCA4NSwgMTI4LCA3MCwgNjUsIDcyLCA4MiwgNjksIDc4LCA3MiwgNjksIDczLCA4NCwgMTI4LCA3MCwgCisgICAgNjUsIDY3LCA4NCwgNzksIDgyLCA4OSwgMTI4LCA3MCwgNjUsIDY3LCA4NCwgNzksIDIxMCwgNzAsIDY1LCA2NywgODMsIDczLCAKKyAgICA3NywgNzMsIDc2LCAxOTcsIDcwLCA2NSwgNjcsIDY5LCA0NSwgNTQsIDEyOCwgNzAsIDY1LCA2NywgNjksIDQ1LCA1MywgCisgICAgMTI4LCA3MCwgNjUsIDY3LCA2OSwgNDUsIDUyLCAxMjgsIDcwLCA2NSwgNjcsIDY5LCA0NSwgNTEsIDEyOCwgNzAsIDY1LCAKKyAgICA2NywgNjksIDQ1LCA1MCwgMTI4LCA3MCwgNjUsIDY3LCA2OSwgNDUsIDQ5LCAxMjgsIDcwLCA2NSwgNjUsIDc3LCA2NSwgNjksIAorICAgIDEyOCwgNzAsIDY1LCA2NSwgNzMsIDEyOCwgNzAsIDY1LCA2NSwgNzAsIDg1LCAxMjgsIDcwLCA0OCwgNTMsIDUxLCAxMjgsIAorICAgIDcwLCA0OCwgNTMsIDUwLCAxMjgsIDcwLCA0OCwgNTMsIDQ5LCA2NywgMTI4LCA3MCwgNDgsIDUzLCA0OSwgNjYsIDEyOCwgCisgICAgNzAsIDQ4LCA1MywgNDksIDY1LCAxMjgsIDcwLCA0OCwgNTMsIDQ5LCAxMjgsIDcwLCA0OCwgNTMsIDQ4LCAxMjgsIDcwLCAKKyAgICA0OCwgNTIsIDU3LCAxMjgsIDcwLCA0OCwgNTIsIDU2LCAxMjgsIDcwLCA0OCwgNTIsIDU1LCA2NSwgMTI4LCA3MCwgNDgsIAorICAgIDUyLCA1NSwgMTI4LCA3MCwgNDgsIDUyLCA1NCwgNjUsIDEyOCwgNzAsIDQ4LCA1MiwgNTQsIDEyOCwgNzAsIDQ4LCA1MiwgCisgICAgNTMsIDY1LCAxMjgsIDcwLCA0OCwgNTIsIDUzLCAxMjgsIDcwLCA0OCwgNTIsIDUyLCAxMjgsIDcwLCA0OCwgNTIsIDUxLCAKKyAgICAxMjgsIDcwLCA0OCwgNTIsIDUwLCAxMjgsIDcwLCA0OCwgNTIsIDQ5LCAxMjgsIDcwLCA0OCwgNTIsIDQ4LCAxMjgsIDcwLCAKKyAgICA0OCwgNTEsIDU3LCAxMjgsIDcwLCA0OCwgNTEsIDU2LCA2NSwgMTI4LCA3MCwgNDgsIDUxLCA1NiwgMTI4LCA3MCwgNDgsIAorICAgIDUxLCA1NSwgNjUsIDEyOCwgNzAsIDQ4LCA1MSwgNTUsIDEyOCwgNzAsIDQ4LCA1MSwgNTQsIDEyOCwgNzAsIDQ4LCA1MSwgCisgICAgNTMsIDEyOCwgNzAsIDQ4LCA1MSwgNTIsIDEyOCwgNzAsIDQ4LCA1MSwgNTEsIDEyOCwgNzAsIDQ4LCA1MSwgNTAsIDEyOCwgCisgICAgNzAsIDQ4LCA1MSwgNDksIDY1LCAxMjgsIDcwLCA0OCwgNTEsIDQ5LCAxMjgsIDcwLCA0OCwgNTEsIDQ4LCAxMjgsIDcwLCAKKyAgICA0OCwgNTAsIDU3LCAxMjgsIDcwLCA0OCwgNTAsIDU2LCAxMjgsIDcwLCA0OCwgNTAsIDU1LCAxMjgsIDcwLCA0OCwgNTAsIAorICAgIDU0LCAxMjgsIDcwLCA0OCwgNTAsIDUzLCAxMjgsIDcwLCA0OCwgNTAsIDUyLCAxMjgsIDcwLCA0OCwgNTAsIDUxLCAxMjgsIAorICAgIDcwLCA0OCwgNTAsIDUwLCAxMjgsIDcwLCA0OCwgNTAsIDQ5LCA2NSwgMTI4LCA3MCwgNDgsIDUwLCA0OSwgMTI4LCA3MCwgCisgICAgNDgsIDUwLCA0OCwgMTI4LCA3MCwgNDgsIDQ5LCA1NywgMTI4LCA3MCwgNDgsIDQ5LCA1NiwgMTI4LCA3MCwgNDgsIDQ5LCAKKyAgICA1NSwgMTI4LCA3MCwgNDgsIDQ5LCA1NCwgMTI4LCA3MCwgNDgsIDQ5LCA1MywgMTI4LCA3MCwgNDgsIDQ5LCA1MiwgMTI4LCAKKyAgICA3MCwgNDgsIDQ5LCA1MSwgNjUsIDEyOCwgNzAsIDQ4LCA0OSwgNTEsIDEyOCwgNzAsIDQ4LCA0OSwgNTAsIDEyOCwgNzAsIAorICAgIDQ4LCA0OSwgNDksIDEyOCwgNzAsIDQ4LCA0OSwgNDgsIDEyOCwgNzAsIDQ4LCA0OCwgNTcsIDEyOCwgNzAsIDQ4LCA0OCwgCisgICAgNTYsIDEyOCwgNzAsIDQ4LCA0OCwgNTUsIDEyOCwgNzAsIDQ4LCA0OCwgNTQsIDEyOCwgNzAsIDQ4LCA0OCwgNTMsIDEyOCwgCisgICAgNzAsIDQ4LCA0OCwgNTIsIDEyOCwgNzAsIDQ4LCA0OCwgNTEsIDEyOCwgNzAsIDQ4LCA0OCwgNTAsIDEyOCwgNzAsIDQ4LCAKKyAgICA0OCwgNDksIDY1LCAxMjgsIDcwLCA0OCwgNDgsIDQ5LCAxMjgsIDY5LCA5MCwgMjAwLCA2OSwgOTAsIDY5LCA3OCwgMTI4LCAKKyAgICA2OSwgOTAsIDY5LCAyMDYsIDY5LCA5MCwgMTI4LCA2OSwgODksIDY5LCA4MywgMTI4LCA2OSwgODksIDY5LCA3MSwgNzYsIAorICAgIDY1LCA4MywgODMsIDY5LCA4MywgMTI4LCA2OSwgODksIDY2LCA2OSwgODksIDcwLCA3MywgNzYsIDczLCAxMjgsIDY5LCA4OSwgCisgICAgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNjksIDg4LCA4NCwgODIsIDY1LCA4NCwgNjksIDgyLCA4MiwgNjksIDgzLCA4NCwgODIsIAorICAgIDczLCA2NSwgMjA0LCA2OSwgODgsIDg0LCA4MiwgNjUsIDQ1LCA3NiwgNzksIDIxNSwgNjksIDg4LCA4NCwgODIsIDY1LCA0NSwgCisgICAgNzIsIDczLCA3MSwgMjAwLCA2OSwgODgsIDg0LCA2OSwgNzgsIDgzLCA3MywgNzksIDc4LCAxMjgsIDY5LCA4OCwgODQsIDY5LCAKKyAgICA3OCwgNjgsIDY5LCAxOTYsIDY5LCA4OCwgODAsIDgyLCA2OSwgODMsIDgzLCA3MywgNzksIDc4LCA3NiwgNjksIDgzLCAyMTEsIAorICAgIDY5LCA4OCwgODAsIDc5LCA3OCwgNjksIDc4LCAyMTIsIDY5LCA4OCwgNzksIDEyOCwgNjksIDg4LCAyMDcsIDY5LCA4OCwgCisgICAgNzMsIDgzLCA4NCwgODMsIDEyOCwgNjksIDg4LCA3MywgODMsIDg0LCAxMjgsIDY5LCA4OCwgNzIsIDY1LCA4NSwgODMsIDg0LCAKKyAgICA3MywgNzksIDc4LCAxMjgsIDY5LCA4OCwgNjcsIDc2LCA2NSwgNzcsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA2OSwgODgsIAorICAgIDY3LCA3NiwgNjUsIDc3LCA2NSwgODQsIDczLCA3OSwgMjA2LCA2OSwgODgsIDY3LCA3MiwgNjUsIDc4LCA3MSwgNjksIDEyOCwgCisgICAgNjksIDg4LCA2NywgNjksIDgzLCA4MywgMTI4LCA2OSwgODgsIDY3LCA2OSwgNzYsIDc2LCA2OSwgNzgsIDg0LCAxMjgsIDY5LCAKKyAgICA4NywgNjksIDEyOCwgNjksIDg2LCA2OSwgODIsIDcxLCA4MiwgNjksIDY5LCAyMDYsIDY5LCA4NiwgNjksIDc4LCA3MywgNzgsIAorICAgIDcxLCAxMjgsIDY5LCA4NSwgODIsIDc5LCA4MCwgNjksIDY1LCAyMDYsIDY5LCA4NSwgODIsIDc5LCA4MCwgNjksIDQ1LCA2NSwgCisgICAgNzAsIDgyLCA3MywgNjcsIDY1LCAxMjgsIDY5LCA4NSwgODIsIDc5LCA0NSwgNjcsIDg1LCA4MiwgODIsIDY5LCA3OCwgNjcsIAorICAgIDIxNywgNjksIDg1LCA4MiwgMjA3LCA2OSwgODUsIDc2LCA2OSwgMjEwLCA2OSwgODUsIDQ1LCA4NSwgMTI4LCA2OSwgODUsIAorICAgIDQ1LCA3OSwgMTI4LCA2OSwgODUsIDQ1LCA2OSwgODUsIDEyOCwgNjksIDg1LCA0NSwgNjksIDc5LCAxMjgsIDY5LCA4NSwgCisgICAgNDUsIDY5LCAxMjgsIDY5LCA4NSwgNDUsIDY1LCAxMjgsIDY5LCA4NCwgODgsIDEyOCwgNjksIDg0LCA3OCwgNjUsIDcyLCAKKyAgICA4NCwgNjUsIDEyOCwgNjksIDg0LCA3MiwgNjksIDIwNCwgNjksIDg0LCA2OSwgODIsIDc5LCAyMDYsIDY5LCA4NCwgNjksIAorICAgIDgyLCA3OCwgNzMsIDg0LCA4OSwgMTI4LCA2OSwgODQsIDY2LCAxMjgsIDY5LCA4MywgODUsIDc1LCA4NSwgODUsIDY4LCA3OSwgCisgICAgMTI4LCA2OSwgODMsIDg0LCA3MywgNzcsIDY1LCA4NCwgNjksIDgzLCAxMjgsIDY5LCA4MywgODQsIDczLCA3NywgNjUsIDg0LCAKKyAgICA2OSwgMTk2LCA2OSwgODMsIDcyLCA2OSwgNTEsIDEyOCwgNjksIDgzLCA3MiwgNTAsIDQ5LCAxMjgsIDY5LCA4MywgNzIsIAorICAgIDE3OCwgNjksIDgzLCA3MiwgNDksIDU0LCAxMjgsIDY5LCA4MywgNjcsIDY1LCA4MCwgNjksIDEyOCwgNjksIDgzLCA2NywgCisgICAgMTI4LCA2OSwgODMsIDY1LCAxMjgsIDY5LCA4MywgNDUsIDg0LCA2OSwgMTI4LCA2OSwgODIsIDgyLCA3OSwgODIsIDQ1LCAKKyAgICA2NiwgNjUsIDgyLCA4MiwgNjksIDE5NiwgNjksIDgyLCA4MiwgMTI4LCA2OSwgODIsIDczLCA3OCwgNTAsIDEyOCwgNjksIAorICAgIDgyLCA3MSwgMTI4LCA2OSwgODIsIDY1LCA4MywgMTk3LCA2OSwgODEsIDg1LCA3MywgODYsIDY1LCA3NiwgNjksIDc4LCAKKyAgICAyMTIsIDY5LCA4MSwgODUsIDczLCA2OCwgMTI4LCA2OSwgODEsIDg1LCA3MywgNjUsIDc4LCA3MSwgODUsIDc2LCA2NSwgCisgICAgMjEwLCA2OSwgODEsIDg1LCA2NSwgNzYsIDgzLCAxMjgsIDY5LCA4MSwgODUsIDY1LCA3NiwgMjExLCA2OSwgODEsIDg1LCAKKyAgICA2NSwgNzYsIDEyOCwgNjksIDgwLCA4MywgNzMsIDc2LCA3OSwgNzgsIDEyOCwgNjksIDgwLCA4MywgNzMsIDc2LCA3OSwgCisgICAgMjA2LCA2OSwgODAsIDc5LCA2NywgNzIsIDEyOCwgNjksIDgwLCA3MywgNzEsIDgyLCA2NSwgODAsIDcyLCA3MywgMTk1LCAKKyAgICA2OSwgODAsIDczLCA2OCwgNjUsIDg1LCA4MiwgNjksIDY1LCAyMDYsIDY5LCA4MCwgNjksIDc4LCA4NCwgNzIsIDY5LCA4NCwgCisgICAgNzMsIDE5NSwgNjksIDgwLCA2OSwgNzEsIDY5LCA4MiwgNzcsIDY1LCAxMjgsIDY5LCA3OSwgODQsIDEyOCwgNjksIDc5LCAKKyAgICA3NywgMTI4LCA2OSwgNzksIDc2LCA3MiwgODgsIDEyOCwgNjksIDc5LCA3NiwgMTI4LCA2OSwgNzksIDcyLCAxMjgsIDY5LCAKKyAgICA3OCwgODksIDEyOCwgNjksIDc4LCA4NiwgNjksIDc2LCA3OSwgODAsIDY5LCAxMjgsIDY5LCA3OCwgODYsIDY5LCA3NiwgNzksIAorICAgIDgwLCAxOTcsIDY5LCA3OCwgODUsIDc3LCA2OSwgODIsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDY5LCA3OCwgODQsIDgyLCA4OSwgCisgICAgNDUsIDUwLCAxMjgsIDY5LCA3OCwgODQsIDgyLCA4OSwgNDUsIDQ5LCAxMjgsIDY5LCA3OCwgODQsIDgyLCA4OSwgMTI4LCAKKyAgICA2OSwgNzgsIDg0LCA4MiwgMjE3LCA2OSwgNzgsIDg0LCA3MiwgODUsIDgzLCA3MywgNjUsIDgzLCA3NywgMTI4LCA2OSwgNzgsIAorICAgIDg0LCA2OSwgODIsIDgwLCA4MiwgNzMsIDgzLCA2OSwgMTI4LCA2OSwgNzgsIDg0LCA2OSwgODIsIDczLCA3OCwgMTk5LCA2OSwgCisgICAgNzgsIDg0LCA2OSwgODIsIDEyOCwgNjksIDc4LCA4NCwgNjksIDIxMCwgNjksIDc4LCA4MSwgODUsIDczLCA4MiwgODksIAorICAgIDEyOCwgNjksIDc4LCA4MSwgMTI4LCA2OSwgNzgsIDc5LCAyMTEsIDY5LCA3OCwgNzgsIDEyOCwgNjksIDc4LCA3NiwgNjUsIAorICAgIDgyLCA3MSwgNjksIDc3LCA2OSwgNzgsIDg0LCAxMjgsIDY5LCA3OCwgNzEsIDczLCA3OCwgNjksIDEyOCwgNjksIDc4LCA2OCwgCisgICAgNzksIDcwLCA3OSwgNzgsIDc5LCA3OCwgMTI4LCA2OSwgNzgsIDY4LCA3MywgNzgsIDE5OSwgNjksIDc4LCA2OCwgNjksIDgwLCAKKyAgICAxMjgsIDY5LCA3OCwgNjgsIDY5LCA2NSwgODYsIDc5LCA4NSwgODIsIDEyOCwgNjksIDc4LCA2NywgNzksIDg1LCA3OCwgODQsIAorICAgIDY5LCA4MiwgODMsIDEyOCwgNjksIDc4LCA2NywgNzYsIDc5LCA4MywgODUsIDgyLCA2OSwgMTI4LCA2OSwgNzgsIDY3LCA3NiwgCisgICAgNzksIDgzLCA3MywgNzgsIDE5OSwgNjksIDc4LCA2NywgMTI4LCA2OSwgNzgsIDY1LCA4MiwgODgsIDczLCAyMTEsIDY5LCAKKyAgICA3OCwgNjUsIDgyLCA3NywgNzksIDc4LCA3MywgNzksIDIxMSwgNjksIDc3LCA4MCwgODQsIDIxNywgNjksIDc3LCA4MCwgNzIsIAorICAgIDY1LCA4NCwgNzMsIDE5NSwgNjksIDc3LCA4MCwgNzIsIDY1LCA4MywgNzMsIDIxMSwgNjksIDc3LCA2NiwgODIsIDc5LCA3MywgCisgICAgNjgsIDY5LCA4MiwgODksIDEyOCwgNjksIDc3LCA2NiwgNzYsIDY5LCA3NywgMTI4LCA2OSwgNzcsIDY2LCA2OSwgNzYsIDc2LCAKKyAgICA3MywgODMsIDcyLCA3NywgNjksIDc4LCA4NCwgMTI4LCA2OSwgNzcsIDY2LCA2OSwgNjgsIDY4LCA3MywgNzgsIDcxLCAxMjgsIAorICAgIDY5LCA3NiwgODQsIDEyOCwgNjksIDc2LCA3NiwgNzMsIDgwLCA4NCwgNzMsIDE5NSwgNjksIDc2LCA3NiwgNzMsIDgwLCA4MywgCisgICAgNzMsIDgzLCAxMjgsIDY5LCA3NiwgNzYsIDczLCA4MCwgODMsIDY5LCAxMjgsIDY5LCA3NiwgNzMsIDcwLCA3MywgMTI4LCAKKyAgICA2OSwgNzYsIDY5LCA4NiwgNjksIDc4LCA0NSwgODQsIDcyLCA3MywgODIsIDg0LCA4OSwgMTI4LCA2OSwgNzYsIDY5LCA4NiwgCisgICAgNjksIDc4LCAxMjgsIDY5LCA3NiwgNjksIDg2LCA2OSwgMjA2LCA2OSwgNzYsIDY5LCA4MCwgNzIsIDY1LCA3OCwgODQsIAorICAgIDEyOCwgNjksIDc2LCA2OSwgNzcsIDY5LCA3OCwgMjEyLCA2OSwgNzYsIDY5LCA2NywgODQsIDgyLCA3MywgNjcsIDY1LCAKKyAgICAyMDQsIDY5LCA3NiwgNjksIDY3LCA4NCwgODIsIDczLCAxOTUsIDY5LCA3NiwgNjUsIDcwLCA4MiwgNzksIDc4LCAxMjgsIAorICAgIDY5LCA3NSwgODMsIDg0LCA4MiwgNjksIDgwLCA4NCwgNzksIDc4LCAxMjgsIDY5LCA3NSwgODMsIDEyOCwgNjksIDc1LCA3MCwgCisgICAgNzksIDc4LCA3MywgODQsIDczLCA3NSwgNzksIDc4LCAxMjgsIDY5LCA3NSwgNjUsIDgyLCA2NSwgMTI4LCA2OSwgNzQsIDY5LCAKKyAgICA2NywgMjEyLCA2OSwgNzMsIDgzLCAxMjgsIDY5LCA3MywgNzEsIDcyLCA4NCwgODksIDEyOCwgNjksIDczLCA3MSwgNzIsIAorICAgIDg0LCAyMTcsIDY5LCA3MywgNzEsIDcyLCA4NCwgNzIsIDgzLCAxMjgsIDY5LCA3MywgNzEsIDcyLCA4NCwgNzIsIDIxMSwgCisgICAgNjksIDczLCA3MSwgNzIsIDg0LCA3MiwgMTI4LCA2OSwgNzMsIDcxLCA3MiwgODQsIDY5LCA2OSwgNzgsIDEyOCwgNjksIDczLCAKKyAgICA3MSwgNzIsIDg0LCA2OSwgNjksIDIwNiwgNjksIDczLCA3MSwgNzIsIDg0LCA0NSwgODQsIDcyLCA3MywgODIsIDg0LCA4OSwgCisgICAgMTI4LCA2OSwgNzMsIDY5LCAxMjgsIDY5LCA3MiwgODcsIDY1LCAyMTgsIDY5LCA3MSwgODksIDgwLCA4NCwgNzksIDc2LCAKKyAgICA3OSwgNzEsIDczLCA2NywgNjUsIDIwNCwgNjksIDcxLCA3MywgODIsIDEyOCwgNjksIDcxLCA3MSwgMTI4LCA2OSwgNjksIAorICAgIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA2OSwgNjksIDc1LCA2NSwgNjUsIDEyOCwgNjksIDY5LCA3MiwgMTI4LCA2OSwgCisgICAgNjksIDY2LCA2OSwgNjksIDcwLCA3MywgNzYsIDczLCAxMjgsIDY5LCA2OCwgNzMsIDg0LCA3OSwgODIsIDczLCA2NSwgMjA0LCAKKyAgICA2OSwgNjgsIDczLCA3OCwgMTI4LCA2OSwgNjgsIDY4LCAxMjgsIDY5LCA2NiwgNjksIDcwLCA3MywgNzYsIDczLCAxMjgsIAorICAgIDY5LCA2NSwgODMsIDg0LCA2OSwgODIsIDIwNiwgNjksIDY1LCA4MywgMjEyLCA2OSwgNjUsIDgyLCA4NCwgNzIsIDc2LCAKKyAgICAyMTcsIDY5LCA2NSwgODIsIDg0LCA3MiwgMTI4LCA2OSwgNjUsIDgyLCA4NCwgMjAwLCA2OSwgNjUsIDgyLCA4MywgMTI4LCAKKyAgICA2OSwgNjUsIDgyLCA3NiwgMjE3LCA2OSwgNjUsIDc3LCA3MiwgNjUsIDc4LCA2NywgNzIsIDc5LCA3NiwgNzYsIDEyOCwgNjksIAorICAgIDY1LCA3MSwgNzYsIDY5LCAxMjgsIDY5LCA2NSwgNjgsIDcyLCA2NSwgNjgsIDcyLCAxMjgsIDY5LCA2NSwgNjYsIDcyLCA2NSwgCisgICAgNjgsIDcyLCAxMjgsIDY5LCAxNzgsIDY5LCA0OCwgNTEsIDU2LCAxMjgsIDY5LCA0OCwgNTEsIDU1LCAxMjgsIDY5LCA0OCwgCisgICAgNTEsIDU0LCAxMjgsIDY5LCA0OCwgNTEsIDUyLCA2NSwgMTI4LCA2OSwgNDgsIDUxLCA1MiwgMTI4LCA2OSwgNDgsIDUxLCAKKyAgICA1MSwgMTI4LCA2OSwgNDgsIDUxLCA1MCwgMTI4LCA2OSwgNDgsIDUxLCA0OSwgMTI4LCA2OSwgNDgsIDUxLCA0OCwgMTI4LCAKKyAgICA2OSwgNDgsIDUwLCA1NywgMTI4LCA2OSwgNDgsIDUwLCA1NiwgNjUsIDEyOCwgNjksIDQ4LCA1MCwgNTYsIDEyOCwgNjksIAorICAgIDQ4LCA1MCwgNTUsIDEyOCwgNjksIDQ4LCA1MCwgNTQsIDEyOCwgNjksIDQ4LCA1MCwgNTMsIDEyOCwgNjksIDQ4LCA1MCwgCisgICAgNTIsIDEyOCwgNjksIDQ4LCA1MCwgNTEsIDEyOCwgNjksIDQ4LCA1MCwgNTAsIDEyOCwgNjksIDQ4LCA1MCwgNDksIDEyOCwgCisgICAgNjksIDQ4LCA1MCwgNDgsIDY1LCAxMjgsIDY5LCA0OCwgNTAsIDQ4LCAxMjgsIDY5LCA0OCwgNDksIDU3LCAxMjgsIDY5LCAKKyAgICA0OCwgNDksIDU2LCAxMjgsIDY5LCA0OCwgNDksIDU1LCA2NSwgMTI4LCA2OSwgNDgsIDQ5LCA1NSwgMTI4LCA2OSwgNDgsIAorICAgIDQ5LCA1NCwgNjUsIDEyOCwgNjksIDQ4LCA0OSwgNTQsIDEyOCwgNjksIDQ4LCA0OSwgNTMsIDEyOCwgNjksIDQ4LCA0OSwgCisgICAgNTIsIDEyOCwgNjksIDQ4LCA0OSwgNTEsIDEyOCwgNjksIDQ4LCA0OSwgNTAsIDEyOCwgNjksIDQ4LCA0OSwgNDksIDEyOCwgCisgICAgNjksIDQ4LCA0OSwgNDgsIDEyOCwgNjksIDQ4LCA0OCwgNTcsIDY1LCAxMjgsIDY5LCA0OCwgNDgsIDU3LCAxMjgsIDY5LCAKKyAgICA0OCwgNDgsIDU2LCA2NSwgMTI4LCA2OSwgNDgsIDQ4LCA1NiwgMTI4LCA2OSwgNDgsIDQ4LCA1NSwgMTI4LCA2OSwgNDgsIAorICAgIDQ4LCA1NCwgMTI4LCA2OSwgNDgsIDQ4LCA1MywgMTI4LCA2OSwgNDgsIDQ4LCA1MiwgMTI4LCA2OSwgNDgsIDQ4LCA1MSwgCisgICAgMTI4LCA2OSwgNDgsIDQ4LCA1MCwgMTI4LCA2OSwgNDgsIDQ4LCA0OSwgMTI4LCA2OSwgNDUsIDc3LCA2NSwgNzMsIDIwNCwgCisgICAgNjgsIDkwLCA5MCwgNjksIDEyOCwgNjgsIDkwLCA5MCwgNjUsIDEyOCwgNjgsIDkwLCA4NywgNjksIDEyOCwgNjgsIDkwLCAKKyAgICA4NSwgMTI4LCA2OCwgOTAsIDc5LCAxMjgsIDY4LCA5MCwgNzQsIDY5LCAxMjgsIDY4LCA5MCwgNzMsIDEyOCwgNjgsIDkwLCAKKyAgICA3MiwgNjksIDEyOCwgNjgsIDkwLCA3MiwgNjUsIDEyOCwgNjgsIDkwLCA2OSwgNzYsIDc5LCAxMjgsIDY4LCA5MCwgNjksIAorICAgIDY5LCAxMjgsIDY4LCA5MCwgNjksIDEyOCwgNjgsIDkwLCA2NSwgNjUsIDEyOCwgNjgsIDkwLCA2NSwgMTI4LCA2OCwgOTAsIAorICAgIDEyOCwgNjgsIDIxOCwgNjgsIDg5LCA3OSwgMTI4LCA2OCwgODksIDIwNywgNjgsIDg5LCA2OSwgNzIsIDEyOCwgNjgsIDg5LCAKKyAgICA2OSwgMjAwLCA2OCwgODcsIDc5LCAxMjgsIDY4LCA4NywgNjksIDEyOCwgNjgsIDg3LCA2NSwgMTI4LCA2OCwgODYsIDczLCAKKyAgICA4MywgODYsIDY1LCA4MiwgNjUsIDEyOCwgNjgsIDg2LCA2OCwgMTI4LCA2OCwgODYsIDEyOCwgNjgsIDg1LCA4NCwgNzMsIAorICAgIDY5LCA4MywgMTI4LCA2OCwgODUsIDgzLCA3NSwgMTI4LCA2OCwgODUsIDgzLCA3MiwgNjksIDc4LCA3OCwgNjUsIDEyOCwgCisgICAgNjgsIDg1LCA4MiwgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDY4LCA4NSwgODIsIDUwLCAxMjgsIDY4LCA4NSwgODAsIDc5LCAKKyAgICA3OCwgNjgsIDczLCA4NSwgMjExLCA2OCwgODUsIDc5LCA4OCwgMTI4LCA2OCwgODUsIDc5LCAxMjgsIDY4LCA4NSwgNzgsIAorICAgIDUyLCAxMjgsIDY4LCA4NSwgNzgsIDUxLCAxMjgsIDY4LCA4NSwgNzgsIDE3OSwgNjgsIDg1LCA3NywgMTI4LCA2OCwgODUsIAorICAgIDIwNCwgNjgsIDg1LCA3MiwgMTI4LCA2OCwgODUsIDcxLCA4NSwgNjgsIDEyOCwgNjgsIDg1LCA2NiwgNTAsIDEyOCwgNjgsIAorICAgIDg1LCA2NiwgMTI4LCA2OCwgODUsIDE5NCwgNjgsIDgyLCA4OSwgMTI4LCA2OCwgODIsIDIxNywgNjgsIDgyLCA4NSwgNzcsIAorICAgIDEyOCwgNjgsIDgyLCA4NSwgMjA1LCA2OCwgODIsIDc5LCA4MCwgODMsIDEyOCwgNjgsIDgyLCA3OSwgODAsIDc2LCA2OSwgCisgICAgODQsIDEyOCwgNjgsIDgyLCA3OSwgODAsIDQ1LCA4MywgNzIsIDY1LCA2OCwgNzksIDg3LCA2OSwgMTk2LCA2OCwgODIsIDc5LCAKKyAgICA3NywgNjksIDY4LCA2NSwgODIsIDIxNywgNjgsIDgyLCA3MywgODYsIDY5LCAxMjgsIDY4LCA4MiwgNzMsIDg2LCAxOTcsIAorICAgIDY4LCA4MiwgNzMsIDc4LCA3NSwgMTI4LCA2OCwgODIsIDczLCAyMDQsIDY4LCA4MiwgNjksIDgzLCA4MywgMTI4LCA2OCwgCisgICAgODIsIDY1LCA4NSwgNzEsIDcyLCA4NCwgMjExLCA2OCwgODIsIDY1LCA3NywgMTI4LCA2OCwgODIsIDY1LCAyMDUsIDY4LCAKKyAgICA4MiwgNjUsIDcxLCA3OSwgNzgsIDEyOCwgNjgsIDgyLCA2NSwgNzEsIDc5LCAyMDYsIDY4LCA4MiwgNjUsIDcwLCA4NCwgNzMsIAorICAgIDc4LCAxOTksIDY4LCA4MiwgNjUsIDY3LCA3MiwgNzcsIDY1LCA4MywgMTI4LCA2OCwgODIsIDY1LCA2NywgNzIsIDc3LCA2NSwgCisgICAgMTI4LCA2OCwgODIsIDY1LCA2NywgNzIsIDc3LCAxOTMsIDY4LCA3OSwgODcsIDc4LCA4NywgNjUsIDgyLCA2OCwgODMsIAorICAgIDEyOCwgNjgsIDc5LCA4NywgNzgsIDg3LCA2NSwgODIsIDY4LCAyMTEsIDY4LCA3OSwgODcsIDc4LCA0NSwgODAsIDc5LCA3MywgCisgICAgNzgsIDg0LCA3MywgNzgsIDE5OSwgNjgsIDc5LCA4NywgNzgsIDEyOCwgNjgsIDc5LCA4NiwgNjksIDEyOCwgNjgsIDc5LCAKKyAgICA4NSwgNzEsIDcyLCA3OCwgODUsIDg0LCAxMjgsIDY4LCA3OSwgODUsIDY2LCA4NCwgMTI4LCA2OCwgNzksIDg1LCA2NiwgNzYsIAorICAgIDY5LCAxOTYsIDY4LCA3OSwgODUsIDY2LCA3NiwgNjksIDQ1LCA3NiwgNzMsIDc4LCAxOTcsIDY4LCA3OSwgODUsIDY2LCA3NiwgCisgICAgNjksIDQ1LCA2OSwgNzgsIDY4LCA2OSwgMTk2LCA2OCwgNzksIDg1LCA2NiwgNzYsIDY5LCAxMjgsIDY4LCA3OSwgODQsIDg0LCAKKyAgICA2OSwgNjgsIDQ1LCA4MCwgMTI4LCA2OCwgNzksIDg0LCA4NCwgNjksIDY4LCA0NSwgNzgsIDEyOCwgNjgsIDc5LCA4NCwgODQsIAorICAgIDY5LCA2OCwgNDUsIDc2LCAxMjgsIDY4LCA3OSwgODQsIDg0LCA2OSwgNjgsIDEyOCwgNjgsIDc5LCA4NCwgODQsIDY5LCAKKyAgICAxOTYsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1NSwgNTYsIDEyOCwgNjgsIAorICAgIDc5LCA4NCwgODMsIDQ1LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgCisgICAgNDUsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKKyAgICA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUzLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUzLCA1NSwgNTYsIAorICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MywgNTQsIDU2LCAKKyAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTMsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MywgNTQsIAorICAgIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTMsIDEyOCwgCisgICAgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MiwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MiwgNTUsIDU2LCAxMjgsIDY4LCAKKyAgICA3OSwgODQsIDgzLCA0NSwgNTIsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIDU0LCA1NiwgMTI4LCA2OCwgNzksIAorICAgIDg0LCA4MywgNDUsIDUyLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIDU0LCA1NSwgMTI4LCA2OCwgCisgICAgNzksIDg0LCA4MywgNDUsIDUyLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUyLCA1MywgNTYsIDEyOCwgNjgsIDc5LCAKKyAgICA4NCwgODMsIDQ1LCA1MiwgNTMsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUyLCA1MywgNTUsIDEyOCwgNjgsIAorICAgIDc5LCA4NCwgODMsIDQ1LCA1MiwgNTMsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUyLCA1MywgNTQsIDU1LCAKKyAgICA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUyLCA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIAorICAgIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUyLCA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUyLCAKKyAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDU1LCA1NiwgCisgICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1NCwgNTYsIAorICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1NCwgCisgICAgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTMsIDU2LCAKKyAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUzLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTMsIAorICAgIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUzLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgCisgICAgNTMsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTMsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCAKKyAgICA4MywgNDUsIDUxLCA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIAorICAgIDQ1LCA1MSwgNTIsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUyLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgCisgICAgODMsIDQ1LCA1MSwgNTIsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUyLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCAKKyAgICA4NCwgODMsIDQ1LCA1MSwgNTIsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTIsIDU0LCA1NSwgCisgICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MiwgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTIsIDUzLCAKKyAgICA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MiwgNTMsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIAorICAgIDUxLCA1MiwgNTMsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUyLCA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgCisgICAgODQsIDgzLCA0NSwgNTEsIDUyLCA1MywgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MiwgNTMsIAorICAgIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MiwgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCisgICAgNTEsIDUyLCA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCAKKyAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDU1LCA1NiwgCisgICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1NCwgNTYsIAorICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1NCwgCisgICAgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTMsIDU2LCAKKyAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUzLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTMsIAorICAgIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUzLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgCisgICAgNTMsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTMsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCAKKyAgICA4MywgNDUsIDUwLCA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIAorICAgIDQ1LCA1MCwgNTIsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUyLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgCisgICAgODMsIDQ1LCA1MCwgNTIsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUyLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCAKKyAgICA4NCwgODMsIDQ1LCA1MCwgNTIsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTIsIDU0LCA1NSwgCisgICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MiwgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTIsIDUzLCAKKyAgICA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MiwgNTMsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIAorICAgIDUwLCA1MiwgNTMsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUyLCA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgCisgICAgODQsIDgzLCA0NSwgNTAsIDUyLCA1MywgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MiwgNTMsIAorICAgIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MiwgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCisgICAgNTAsIDUyLCA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCAKKyAgICA1MSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIAorICAgIDUwLCA1MSwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgCisgICAgNDUsIDUwLCA1MSwgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTQsIDU1LCAxMjgsIDY4LCAKKyAgICA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTMsIDU2LCAxMjgsIAorICAgIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MywgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCAKKyAgICA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUzLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIAorICAgIDQ1LCA1MCwgNTEsIDUzLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MywgNTQsIDU1LCAKKyAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIAorICAgIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MiwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgCisgICAgNTEsIDUyLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUyLCA1NSwgMTI4LCA2OCwgNzksIDg0LCAKKyAgICA4MywgNDUsIDUwLCA1MSwgNTIsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTIsIDU0LCA1NSwgCisgICAgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUyLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKKyAgICA1MCwgNTEsIDUyLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTIsIDUzLCA1NiwgMTI4LCA2OCwgNzksIAorICAgIDg0LCA4MywgNDUsIDUwLCA1MSwgNTIsIDUzLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUyLCAKKyAgICA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIAorICAgIDgzLCA0NSwgNTAsIDUxLCA1MiwgNTMsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUyLCAKKyAgICA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MiwgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIAorICAgIDgzLCA0NSwgNTAsIDUxLCA1MiwgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUyLCAxMjgsIDY4LCA3OSwgCisgICAgODQsIDgzLCA0NSwgNTAsIDUxLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKKyAgICA0OSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIAorICAgIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1NCwgCisgICAgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCAKKyAgICA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MywgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTMsIAorICAgIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgCisgICAgNTMsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MywgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCAKKyAgICA4MywgNDUsIDQ5LCA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUzLCA1NCwgMTI4LCA2OCwgNzksIAorICAgIDg0LCA4MywgNDUsIDQ5LCA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MiwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgCisgICAgODMsIDQ1LCA0OSwgNTIsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MiwgNTUsIDEyOCwgNjgsIDc5LCAKKyAgICA4NCwgODMsIDQ1LCA0OSwgNTIsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MiwgNTQsIDU1LCA1NiwgCisgICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MiwgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUyLCAKKyAgICA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MiwgNTMsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIAorICAgIDUyLCA1MywgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUyLCA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgCisgICAgODMsIDQ1LCA0OSwgNTIsIDUzLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTIsIDUzLCA1NCwgNTUsIAorICAgIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUyLCA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCisgICAgNDksIDUyLCA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTIsIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCAKKyAgICA0NSwgNDksIDUyLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIAorICAgIDQ5LCA1MSwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgCisgICAgNDUsIDQ5LCA1MSwgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCAKKyAgICA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDU0LCAxMjgsIAorICAgIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MywgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUzLCAKKyAgICA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIAorICAgIDQ5LCA1MSwgNTMsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTMsIDU0LCA1NSwgNTYsIDEyOCwgCisgICAgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUzLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIAorICAgIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgCisgICAgNTEsIDUyLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTIsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCAKKyAgICA4MywgNDUsIDQ5LCA1MSwgNTIsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MiwgNTQsIDU2LCAxMjgsIAorICAgIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MiwgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCAKKyAgICA1MSwgNTIsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTIsIDU0LCAxMjgsIDY4LCA3OSwgODQsIAorICAgIDgzLCA0NSwgNDksIDUxLCA1MiwgNTMsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MiwgNTMsIDU1LCAKKyAgICA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTIsIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIAorICAgIDQ5LCA1MSwgNTIsIDUzLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUyLCA1MywgNTQsIDU1LCAKKyAgICA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTIsIDUzLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIAorICAgIDQ1LCA0OSwgNTEsIDUyLCA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUyLCA1MywgMTI4LCA2OCwgCisgICAgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTIsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDEyOCwgNjgsIDc5LCAKKyAgICA4NCwgODMsIDQ1LCA0OSwgNTAsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1NSwgNTYsIDEyOCwgNjgsIAorICAgIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1NCwgNTYsIDEyOCwgCisgICAgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIAorICAgIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgCisgICAgNTAsIDUzLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTMsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCAKKyAgICA4MywgNDUsIDQ5LCA1MCwgNTMsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MywgNTQsIDU2LCAxMjgsIAorICAgIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MywgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCAKKyAgICA1MCwgNTMsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIAorICAgIDgzLCA0NSwgNDksIDUwLCA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTIsIDU2LCAxMjgsIDY4LCA3OSwgCisgICAgODQsIDgzLCA0NSwgNDksIDUwLCA1MiwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MiwgNTUsIAorICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgCisgICAgNTAsIDUyLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MiwgNTQsIDU1LCAxMjgsIDY4LCAKKyAgICA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MiwgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCA1MywgCisgICAgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCA1MywgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCAKKyAgICA0NSwgNDksIDUwLCA1MiwgNTMsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MiwgNTMsIDU0LCA1NiwgCisgICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTIsIDUzLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCAKKyAgICA0NSwgNDksIDUwLCA1MiwgNTMsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTIsIDUzLCA1NCwgCisgICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTIsIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCAKKyAgICA1MiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIAorICAgIDUwLCA1MSwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgCisgICAgODMsIDQ1LCA0OSwgNTAsIDUxLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1NCwgNTUsIAorICAgIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCisgICAgNDksIDUwLCA1MSwgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MywgNTYsIDEyOCwgNjgsIDc5LCAKKyAgICA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MywgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgCisgICAgNTMsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTMsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCAKKyAgICA4MywgNDUsIDQ5LCA1MCwgNTEsIDUzLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgCisgICAgNTMsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCAKKyAgICA4MywgNDUsIDQ5LCA1MCwgNTEsIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTIsIDU2LCAxMjgsIAorICAgIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTIsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCAKKyAgICA1MCwgNTEsIDUyLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCA1NCwgNTYsIDEyOCwgNjgsIAorICAgIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MiwgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCAKKyAgICA1MCwgNTEsIDUyLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MiwgNTQsIDEyOCwgNjgsIAorICAgIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MiwgNTMsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCAKKyAgICA1MSwgNTIsIDUzLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MiwgNTMsIDU1LCAxMjgsIAorICAgIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTIsIDUzLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKKyAgICA0OSwgNTAsIDUxLCA1MiwgNTMsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MiwgCisgICAgNTMsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTQsIDEyOCwgNjgsIDc5LCAKKyAgICA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MiwgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MiwgCisgICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIAorICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgMTI4LCA2OCwgNzksIDg0LCA4MywgMTI4LCA2OCwgNzksIDg0LCA3NiwgCisgICAgNjksIDgzLCAyMTEsIDY4LCA3OSwgODIsIDg1LCAxMjgsIDY4LCA3OSwgNzksIDgyLCAxMjgsIDY4LCA3OSwgNzksIDc4LCAKKyAgICA3MSwgMTI4LCA2OCwgNzksIDc4LCA3MSwgMTI4LCA2OCwgNzksIDc3LCA2NSwgNzMsIDIwNiwgNjgsIDc5LCA3NiwgODAsIAorICAgIDcyLCA3MywgNzgsIDEyOCwgNjgsIDc5LCA3NiwgNzYsIDgzLCAxMjgsIDY4LCA3OSwgNzYsIDc2LCA2NSwgMjEwLCA2OCwgCisgICAgNzksIDc2LCA3MywgODUsIDc3LCAxMjgsIDY4LCA3OSwgNzUsIDc3LCA2NSwgNzMsIDEyOCwgNjgsIDc5LCA3MywgODQsIAorICAgIDEyOCwgNjgsIDc5LCA3MSwgMTI4LCA2OCwgNzksIDE5OSwgNjgsIDc5LCA2OSwgMjExLCA2OCwgNzksIDY4LCA2OSwgNzUsIAorICAgIDY1LCA4NCwgNjUsIDEyOCwgNjgsIDc5LCA2NiwgODIsIDc5LCAxMjgsIDY4LCA3OSwgNjUsIDY3LCA3MiwgNjUsIDgzLCA3MiwgCisgICAgNzcsIDY5LCA2OSwgMTI4LCA2OCwgNzksIDY1LCA2NywgNzIsIDY1LCA4MywgNzIsIDc3LCA2OSwgMTk3LCA2OCwgNzksIDY1LCAKKyAgICAxMjgsIDY4LCA3OSwgNDUsIDc5LCAxMjgsIDY4LCA3NywgMTI4LCA2OCwgMjA1LCA2OCwgNzYsIDg1LCAxMjgsIDY4LCA3NiwgCisgICAgNzksIDEyOCwgNjgsIDc2LCA3MywgMTI4LCA2OCwgNzYsIDcyLCA4OSwgNjUsIDEyOCwgNjgsIDc2LCA3MiwgNjUsIDEyOCwgCisgICAgNjgsIDc2LCA2OSwgNjksIDEyOCwgNjgsIDc2LCA2NSwgMTI4LCA2OCwgNzYsIDEyOCwgNjgsIDc1LCA2NSwgODIsIDEyOCwgCisgICAgNjgsIDc1LCA2NSwgMjEwLCA2OCwgNzQsIDY5LCA4MiwgODYsIDczLCAxMjgsIDY4LCA3NCwgNjksIDgyLCA4NiwgMTI4LCAKKyAgICA2OCwgNzQsIDY5LCAxMjgsIDY4LCA3NCwgNjUsIDEyOCwgNjgsIDczLCA5MCwgOTAsIDIxNywgNjgsIDczLCA4NiwgNzksIAorICAgIDgyLCA2NywgMTk3LCA2OCwgNzMsIDg2LCA3MywgODMsIDczLCA3OSwgNzgsIDEyOCwgNjgsIDczLCA4NiwgNzMsIDgzLCA3MywgCisgICAgNzksIDIwNiwgNjgsIDczLCA4NiwgNzMsIDc4LCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgNjgsIDczLCA4NiwgNzMsIDY4LCAKKyAgICA2OSwgODMsIDEyOCwgNjgsIDczLCA4NiwgNzMsIDY4LCA2OSwgODIsIDEyOCwgNjgsIDczLCA4NiwgNzMsIDY4LCA2OSwgCisgICAgMTk2LCA2OCwgNzMsIDg2LCA3MywgNjgsIDY5LCAxMjgsIDY4LCA3MywgODYsIDczLCA2OCwgMTk3LCA2OCwgNzMsIDg2LCAKKyAgICA2OSwgODIsIDcxLCA2OSwgNzgsIDY3LCA2OSwgMTI4LCA2OCwgNzMsIDg0LCA4NCwgMjA3LCA2OCwgNzMsIDgzLCA4NCwgNzksIAorICAgIDgyLCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA2OCwgNzMsIDgzLCA4NCwgNzMsIDc4LCA3MSwgODUsIDczLCA4MywgNzIsIDEyOCwgCisgICAgNjgsIDczLCA4MywgODQsIDczLCA3NiwgNzYsIDEyOCwgNjgsIDczLCA4MywgODMsIDc5LCA3NiwgODYsIDY5LCA0NSwgNTAsIAorICAgIDEyOCwgNjgsIDczLCA4MywgODMsIDc5LCA3NiwgODYsIDY5LCAxMjgsIDY4LCA3MywgODMsIDgwLCA2OSwgODIsIDgzLCA3MywgCisgICAgNzksIDc4LCAxMjgsIDY4LCA3MywgODMsIDc1LCAxMjgsIDY4LCA3MywgODMsIDczLCA3NywgNzksIDg1LCAxMjgsIDY4LCAKKyAgICA3MywgODMsIDcyLCAxMjgsIDY4LCA3MywgODMsIDY3LCA3OSwgNzgsIDg0LCA3MywgNzgsIDg1LCA3OSwgODUsIDIxMSwgNjgsIAorICAgIDczLCA4MywgMTk1LCA2OCwgNzMsIDgzLCA2NSwgODAsIDgwLCA3OSwgNzMsIDc4LCA4NCwgNjksIDE5NiwgNjgsIDczLCA4MywgCisgICAgNjUsIDY2LCA3NiwgNjksIDE5NiwgNjgsIDczLCA4MiwgNzEsIDE5MywgNjgsIDczLCA4MiwgNjksIDY3LCA4NCwgNzYsIAorICAgIDIxNywgNjgsIDczLCA4MiwgNjksIDY3LCA4NCwgNzMsIDc5LCA3OCwgNjUsIDIwNCwgNjgsIDczLCA4MCwgODQsIDY5LCAKKyAgICAxMjgsIDY4LCA3MywgODAsIDgwLCA2OSwgODIsIDEyOCwgNjgsIDczLCA4MCwgNzYsIDc5LCA4NSwgNzgsIDEyOCwgNjgsIAorICAgIDczLCA4MCwgNzYsIDczLCAxMjgsIDY4LCA3MywgODAsIDc2LCAyMDEsIDY4LCA3MywgNzgsIDcxLCA2NiwgNjUsIDIxMiwgCisgICAgNjgsIDczLCAyMDYsIDY4LCA3MywgNzcsIDc3LCA3MywgNzgsIDcxLCAxMjgsIDY4LCA3MywgNzcsIDczLCA3OCwgODUsIDg0LCAKKyAgICA3MywgNzksIDc4LCA0NSwgNTEsIDEyOCwgNjgsIDczLCA3NywgNzMsIDc4LCA4NSwgODQsIDczLCA3OSwgNzgsIDQ1LCA1MCwgCisgICAgMTI4LCA2OCwgNzMsIDc3LCA3MywgNzgsIDg1LCA4NCwgNzMsIDc5LCA3OCwgNDUsIDQ5LCAxMjgsIDY4LCA3MywgNzcsIDczLCAKKyAgICA3OCwgNzMsIDgzLCA3MiwgNzcsIDY5LCA3OCwgODQsIDEyOCwgNjgsIDczLCA3NywgNzMsIDY4LCA3MywgMTkzLCA2OCwgNzMsIAorICAgIDc3LCA2OSwgNzgsIDgzLCA3MywgNzksIDc4LCA2NSwgMjA0LCA2OCwgNzMsIDc3LCA2OSwgNzgsIDgzLCA3MywgNzksIDIwNiwgCisgICAgNjgsIDczLCA3NywgNTAsIDEyOCwgNjgsIDczLCA3NiwgMTI4LCA2OCwgNzMsIDcxLCA4MiwgNjUsIDgwLCA3MiwgMTI4LCAKKyAgICA2OCwgNzMsIDcxLCA4MiwgNjUsIDgwLCAyMDAsIDY4LCA3MywgNzEsIDgyLCA2NSwgNzcsIDc3LCA3OSwgMjExLCA2OCwgNzMsIAorICAgIDcxLCA4MiwgNjUsIDc3LCA3NywgMTkzLCA2OCwgNzMsIDcxLCA4MiwgNjUsIDIwNSwgNjgsIDczLCA3MSwgNzksIDgyLCA3MSwgCisgICAgNzksIDc4LCAxMjgsIDY4LCA3MywgNzEsIDc5LCA4MiwgNzEsIDc5LCAyMDYsIDY4LCA3MywgNzEsIDY1LCA3NywgNzcsIDY1LCAKKyAgICAxMjgsIDY4LCA3MywgNzEsIDE5MywgNjgsIDczLCA3MCwgODQsIDc5LCA3MSwgNzEsIDc5LCAyMTEsIDY4LCA3MywgNzAsIAorICAgIDc5LCA3OCwgNzMsIDY1LCA4MywgMTI4LCA2OCwgNzMsIDcwLCA3MCwgNzMsIDY3LCA4NSwgNzYsIDg0LCAyMTcsIDY4LCA3MywgCisgICAgNzAsIDcwLCA3MywgNjcsIDg1LCA3NiwgODQsIDczLCA2OSwgODMsIDEyOCwgNjgsIDczLCA3MCwgNzAsIDY5LCA4MiwgNjksIAorICAgIDc4LCA4NCwgNzMsIDY1LCA3NiwgMTI4LCA2OCwgNzMsIDcwLCA3MCwgNjksIDgyLCA2OSwgNzgsIDY3LCAxOTcsIDY4LCA3MywgCisgICAgNzAsIDY1LCA4NCwgMTI4LCA2OCwgNzMsIDY5LCA4MywgNzMsIDgzLCAxMjgsIDY4LCA3MywgNjksIDgzLCA3MywgMjExLCAKKyAgICA2OCwgNzMsIDY5LCA4MCwgMTI4LCA2OCwgNzMsIDE5NywgNjgsIDczLCA2NiwgMTI4LCA2OCwgNzMsIDY1LCA4NCwgNzksIAorICAgIDc4LCA3OSwgMjA2LCA2OCwgNzMsIDY1LCA4NCwgNzksIDc4LCA3MywgNzUsIDIwMSwgNjgsIDczLCA2NSwgODMsIDg0LCA3OSwgCisgICAgNzYsIDIwMSwgNjgsIDczLCA2NSwgNzcsIDc5LCA3OCwgNjgsIDgzLCAxMjgsIDY4LCA3MywgNjUsIDc3LCA3OSwgNzgsIDY4LCAKKyAgICAxMjgsIDY4LCA3MywgNjUsIDc3LCA3OSwgNzgsIDE5NiwgNjgsIDczLCA2NSwgNzcsIDY5LCA4NCwgNjksIDIxMCwgNjgsIAorICAgIDczLCA2NSwgNzYsIDg5LCA4NCwgNzMsIDc1LCA2NSwgMTI4LCA2OCwgNzMsIDY1LCA3NiwgODksIDg0LCA3MywgNzUsIDE5MywgCisgICAgNjgsIDczLCA2NSwgNzYsIDY5LCA2NywgODQsIDQ1LCAyMDgsIDY4LCA3MywgNjUsIDcxLCA3OSwgNzgsIDY1LCA3NiwgMTI4LCAKKyAgICA2OCwgNzMsIDY1LCA3MSwgNzksIDc4LCA2NSwgMjA0LCA2OCwgNzMsIDY1LCA2OSwgODIsIDY5LCA4MywgNzMsIDkwLCA2OSwgCisgICAgMTk2LCA2OCwgNzMsIDY1LCA2OSwgODIsIDY5LCA4MywgNzMsIDgzLCAxMjgsIDY4LCA3MywgNjUsIDY5LCA4MiwgNjksIDgzLCAKKyAgICA3MywgMjExLCA2OCwgNzIsIDc5LCA4NSwgMTI4LCA2OCwgNzIsIDc5LCA3OSwgMTI4LCA2OCwgNzIsIDc5LCAxMjgsIDY4LCAKKyAgICA3MiwgNzMsIDEyOCwgNjgsIDcyLCA3MiwgODUsIDEyOCwgNjgsIDcyLCA3MiwgNzksIDc5LCAxMjgsIDY4LCA3MiwgNzIsIAorICAgIDc5LCAxMjgsIDY4LCA3MiwgNzIsIDczLCAxMjgsIDY4LCA3MiwgNzIsIDY5LCA2OSwgMTI4LCA2OCwgNzIsIDcyLCA2OSwgCisgICAgMTI4LCA2OCwgNzIsIDcyLCA2NSwgMTI4LCA2OCwgNzIsIDY5LCA2OSwgMTI4LCA2OCwgNzIsIDY1LCA4MiwgNzcsIDY1LCAKKyAgICAxMjgsIDY4LCA3MiwgNjUsIDc2LCA2OSwgODQsIDcyLCAxMjgsIDY4LCA3MiwgNjUsIDc2LCA2NSwgODQsIDcyLCAxMjgsIAorICAgIDY4LCA3MiwgNjUsIDc2LCAxMjgsIDY4LCA3MiwgNjUsIDY4LCA3MiwgNjksIDEyOCwgNjgsIDcyLCA2NSwgNjUsIDc2LCA4NSwgCisgICAgMTI4LCA2OCwgNzIsIDY1LCA2NSwgMTI4LCA2OCwgNzIsIDY1LCAxMjgsIDY4LCA2OSwgOTAsIDIwMCwgNjgsIDY5LCA4OSwgCisgICAgODQsIDY5LCA4MiwgNzksIDIxMywgNjgsIDY5LCA4OSwgODQsIDY5LCA4MiwgNzksIDIxMSwgNjgsIDY5LCA4OCwgNzMsIDY1LCAKKyAgICAxMjgsIDY4LCA2OSwgODYsIDczLCA2NywgMTk3LCA2OCwgNjksIDg2LCA2OSwgNzYsIDc5LCA4MCwgNzcsIDY5LCA3OCwgODQsIAorICAgIDEyOCwgNjgsIDY5LCA4NSwgNzgsIDcxLCAxMjgsIDY4LCA2OSwgODMsIDIwMywgNjgsIDY5LCA4MywgNzMsIDcxLCA3OCwgCisgICAgMTI4LCA2OCwgNjksIDgzLCA3MywgMTI4LCA2OCwgNjksIDgzLCA2NywgODIsIDczLCA4MCwgODQsIDczLCA3OSwgMjA2LCAKKyAgICA2OCwgNjksIDgzLCA2NywgNjksIDc4LCA2OCwgNzMsIDc4LCAxOTksIDY4LCA2OSwgODMsIDY3LCA2OSwgNzgsIDY4LCA2OSwgCisgICAgODIsIDEyOCwgNjgsIDY5LCA4MiwgNjksIDg0LCA0NSwgNzIsIDczLCA2OCwgNjksIDg0LCAxMjgsIDY4LCA2OSwgODIsIDY5LCAKKyAgICA4NCwgMTI4LCA2OCwgNjksIDgwLCA2NSwgODIsIDg0LCA4NSwgODIsIDY5LCAxMjgsIDY4LCA2OSwgODAsIDY1LCA4MiwgODQsIAorICAgIDc3LCA2OSwgNzgsIDIxMiwgNjgsIDY5LCA4MCwgNjUsIDgyLCA4NCwgNzMsIDc4LCAxOTksIDY4LCA2OSwgNzgsIDg0LCA3MywgCisgICAgODMsIDg0LCA4MiwgMjE3LCA2OCwgNjksIDc4LCA4NCwgNjUsIDIwNCwgNjgsIDY5LCA3OCwgNzksIDc3LCA3MywgNzgsIDY1LCAKKyAgICA4NCwgNzksIDgyLCAxMjgsIDY4LCA2OSwgNzgsIDc5LCA3NywgNzMsIDc4LCA2NSwgODQsIDc5LCAyMTAsIDY4LCA2OSwgNzgsIAorICAgIDc4LCA2OSwgNzgsIDEyOCwgNjgsIDY5LCA3OCwgNzEsIDEyOCwgNjgsIDY5LCA3OCwgMTk3LCA2OCwgNjksIDc4LCA2NSwgCisgICAgODIsIDczLCA4NSwgMjExLCA2OCwgNjksIDc2LCA4NCwgNjUsIDEyOCwgNjgsIDY5LCA3NiwgODQsIDE5MywgNjgsIDY5LCAKKyAgICA3NiwgODQsIDEyOCwgNjgsIDY5LCA3NiwgODAsIDcyLCA3MywgMTk1LCA2OCwgNjksIDc2LCA3MywgODYsIDY5LCA4MiwgCisgICAgMjE3LCA2OCwgNjksIDc2LCA3MywgODYsIDY5LCA4MiwgNjUsIDc4LCA2NywgNjksIDEyOCwgNjgsIDY5LCA3NiwgNzMsIDc3LCAKKyAgICA3MywgODQsIDY5LCA4MiwgMTI4LCA2OCwgNjksIDc2LCA3MywgNzcsIDczLCA4NCwgNjksIDIxMCwgNjgsIDY5LCA3NiwgNzMsIAorICAgIDY3LCA3MywgNzksIDg1LCAyMTEsIDY4LCA2OSwgNzYsIDY5LCA4NCwgNjksIDEyOCwgNjgsIDY5LCA3NiwgNjksIDg0LCAKICAgICAxOTcsIDY4LCA2OSwgNzUsIDY1LCAxMjgsIDY4LCA2OSwgNzUsIDEyOCwgNjgsIDY5LCA3MywgMTI4LCA2OCwgNjksIDcyLCAKICAgICA3MywgMTI4LCA2OCwgNjksIDcxLCA4MiwgNjksIDE5NywgNjgsIDY5LCA3MCwgNzMsIDc4LCA3MywgODQsIDczLCA3OSwgNzgsIAogICAgIDEyOCwgNjgsIDY5LCA3MCwgNjksIDY3LCA4NCwgNzMsIDg2LCA2OSwgNzgsIDY5LCA4MywgMjExLCA2OCwgNjksIDY5LCA4MiwgCkBAIC00NTQ3LDk2ICs0NTUwLDk2IEBACiAgICAgNzMsIDc5LCAyMDYsIDY1LCA3NiwgODQsIDY5LCA4MiwgNzgsIDY1LCA4NCwgMTk3LCA2NSwgNzYsIDg0LCA2NSwgMTI4LCAKICAgICA2NSwgNzYsIDgwLCA3MiwgNjUsIDEyOCwgNjUsIDc2LCA4MCwgNzIsIDE5MywgNjUsIDc2LCA4MCwgNjUsIDgwLCA4MiwgNjUsIAogICAgIDc4LCA2NSwgMTI4LCA2NSwgNzYsIDgwLCA2NSwgODAsIDgyLCA2NSwgNjUsIDc4LCAxOTMsIDY1LCA3NiwgODAsIDY1LCAKLSAgICAxMjgsIDY1LCA3NiwgNzcsIDc5LCA4MywgMjEyLCA2NSwgNzYsIDc2LCA3OSwgMTI4LCA2NSwgNzYsIDc2LCA3MywgNjUsIAotICAgIDc4LCA2NywgNjksIDEyOCwgNjUsIDc2LCA3NiwgMjAxLCA2NSwgNzYsIDc2LCA2NSwgMjAwLCA2NSwgNzYsIDc1LCA2NSwgCi0gICAgNzYsIDczLCA0NSwgNTAsIDEyOCwgNjUsIDc2LCA3NSwgNjUsIDc2LCA3MywgMTI4LCA2NSwgNzYsIDczLCA3MSwgNzgsIDY5LCAKLSAgICAxOTYsIDY1LCA3NiwgNzMsIDcwLCA4NSwgMTI4LCA2NSwgNzYsIDczLCA2OSwgNzgsIDEyOCwgNjUsIDc2LCA3MywgNjksIAotICAgIDIwNiwgNjUsIDc2LCA3MSwgNzMsIDIxOCwgNjUsIDc2LCA3MCwgNjUsIDEyOCwgNjUsIDc2LCA2OSwgODUsIDIxMiwgNjUsIAotICAgIDc2LCA2OSwgODIsIDg0LCAxMjgsIDY1LCA3NiwgNjksIDgwLCA3MiwgMTI4LCA2NSwgNzYsIDY5LCA3NywgNjYsIDczLCA2NywgCi0gICAgMTI4LCA2NSwgNzYsIDY5LCA3MCwgMTI4LCA2NSwgNzYsIDY1LCA4OSwgNzIsIDY5LCAxMjgsIDY1LCA3NiwgNjUsIDg5LCAKLSAgICA3MiwgMTk3LCA2NSwgNzYsIDY1LCA4MiwgMjA1LCA2NSwgNzYsIDY1LCA4MCwgNzIsIDEyOCwgNjUsIDc2LCA0NSwgNzYsIAotICAgIDY1LCA3NSwgODUsIDc4LCA2NSwgMTI4LCA2NSwgNzUsIDg0LCA3MywgNjksIDgzLCA2OSwgNzYsIDgzLCA3NSwgNjUsIDY2LCAKLSAgICAxMjgsIDY1LCA3NSwgODMsIDY1LCAxMjgsIDY1LCA3NSwgNzIsIDc3LCA3MywgNzcsIDczLCAxOTUsIDY1LCA3NSwgNjYsIAotICAgIDY1LCAyMTAsIDY1LCA3NSwgNjUsIDgyLCA2NSwgMTI4LCA2NSwgNzUsIDY1LCA4MiwgMTkzLCA2NSwgNzMsIDg5LCA2NSwgCi0gICAgNzgsIDc4LCA2NSwgMTI4LCA2NSwgNzMsIDg2LCA3MywgNzYsIDczLCAyMDMsIDY1LCA3MywgODQsIDc5LCAyMDYsIDY1LCAKLSAgICA3MywgODIsIDgwLCA3NiwgNjUsIDc4LCA2OSwgMTI4LCA2NSwgNzMsIDc4LCAyMTMsIDY1LCA3MywgNzgsIDc4LCAxMjgsIAotICAgIDY1LCA3MywgNzYsIDc3LCAxMjgsIDY1LCA3MywgNzUsIDY1LCA4MiwgNjUsIDEyOCwgNjUsIDczLCA3MiwgODYsIDg1LCA4MywgCi0gICAgMTI4LCA2NSwgNzIsIDgzLCA2OCwgNjUsIDEyOCwgNjUsIDcyLCA4MywgNjUsIDEyOCwgNjUsIDcyLCA2NSwgNzgsIDE5OSwgCi0gICAgNjUsIDcyLCA2NSwgNzEsIDcxLCA2NSwgMjEwLCA2NSwgNzIsIDY1LCA2OCwgMTI4LCA2NSwgNzEsIDg1LCA3OCwgNzEsIAotICAgIDEyOCwgNjUsIDcxLCA3OSwgNzEsIDIwMSwgNjUsIDcxLCA3MSwgODIsIDY1LCA4NiwgNjUsIDg0LCA3MywgNzksIDc4LCAKLSAgICAxMjgsIDY1LCA3MSwgNzEsIDgyLCA2NSwgODYsIDY1LCA4NCwgNjksIDE5NiwgNjUsIDcxLCA2NSwgNzMsIDc4LCAxMjgsIAotICAgIDY1LCA3MCwgODQsIDY5LCAyMTAsIDY1LCA3MCwgODMsIDY1LCA2NSwgODEsIDEyOCwgNjUsIDcwLCA4MiwgNzMsIDY3LCA2NSwgCi0gICAgMjA2LCA2NSwgNzAsIDc5LCA4MiwgNjksIDc3LCA2OSwgNzgsIDg0LCA3MywgNzksIDc4LCA2OSwgNjgsIDEyOCwgNjUsIDcwLCAKLSAgICA3MSwgNzIsIDY1LCA3OCwgMjAxLCA2NSwgNzAsIDcwLCA4MiwgNzMsIDY3LCA2NSwgODQsIDczLCA3OSwgMjA2LCA2NSwgNjksIAotICAgIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA2NSwgNjksIDg5LCAxMjgsIDY1LCA2OSwgODMsIDY3LCA4NSwgNzYsIDY1LCA4MCwgCi0gICAgNzMsIDg1LCA4MywgMTI4LCA2NSwgNjksIDgzLCA2NywgMTI4LCA2NSwgNjksIDgzLCAxMjgsIDY1LCA2OSwgODIsIDczLCAKLSAgICA2NSwgMjA0LCA2NSwgNjksIDgyLCAxMjgsIDY1LCA2OSwgNzYsIDY1LCA0NSwgODAsIDczLCA3NiwgNzYsIDY1LCAxMjgsIAotICAgIDY1LCA2OSwgNzYsIDEyOCwgNjUsIDY5LCA3NSwgMTI4LCA2NSwgNjksIDcxLCA2OSwgNjUsIDIwNiwgNjUsIDY5LCA3MSwgCi0gICAgMTI4LCA2NSwgNjksIDY5LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNjUsIDY5LCA2OSwgMTI4LCA2NSwgNjksIDY4LCAKLSAgICA2NSwgNDUsIDgwLCA3MywgNzYsIDc2LCA2NSwgMTI4LCA2NSwgNjksIDY4LCAxMjgsIDY1LCA2OSwgNjYsIDEyOCwgNjUsIAotICAgIDY4LCA4NiwgNjUsIDc4LCA4NCwgNjUsIDcxLCA2OSwgMTI4LCA2NSwgNjgsIDg2LCA2NSwgNzgsIDY3LCA2OSwgMTI4LCA2NSwgCi0gICAgNjgsIDY5LCA3MSwgMTI4LCA2NSwgNjgsIDY5LCAxOTksIDY1LCA2OCwgNjgsIDgyLCA2OSwgODMsIDgzLCA2OSwgMTk2LCAKLSAgICA2NSwgNjgsIDY4LCA4MiwgNjksIDgzLCAyMTEsIDY1LCA2OCwgNjgsIDY1LCA3NSwgMTI4LCA2NSwgNjgsIDY1LCAyMDMsIAotICAgIDY1LCA2NywgODUsIDg0LCA2OSwgNDUsIDc3LCA2NSwgNjcsIDgyLCA3OSwgNzgsIDEyOCwgNjUsIDY3LCA4NSwgODQsIDY5LCAKLSAgICA0NSwgNzEsIDgyLCA2NSwgODYsIDY5LCA0NSwgNjUsIDY3LCA4NSwgODQsIDY5LCAxMjgsIDY1LCA2NywgODUsIDg0LCAxOTcsIAotICAgIDY1LCA2NywgODQsIDg1LCA2NSwgNzYsIDc2LCAyMTcsIDY1LCA2NywgODQsIDczLCA4NiwgNjUsIDg0LCAxOTcsIDY1LCA2NywgCi0gICAgODIsIDc5LCA4MCwgNzIsIDc5LCA3OCwgNzMsIDE5NSwgNjUsIDY3LCA3NSwgNzgsIDc5LCA4NywgNzYsIDY5LCA2OCwgNzEsIAotICAgIDY5LCAxMjgsIDY1LCA2NywgNjcsIDg1LCA3NywgODUsIDc2LCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgNjUsIDY3LCA2NywgCi0gICAgNzksIDg1LCA3OCwgMjEyLCA2NSwgNjcsIDY3LCA2OSwgODAsIDg0LCAxMjgsIDY1LCA2NywgNjcsIDY5LCA3OCwgODQsIDQ1LCAKLSAgICA4MywgODQsIDY1LCA2NywgNjcsIDY1LCA4NCwgNzksIDEyOCwgNjUsIDY3LCA2NywgNjksIDc4LCA4NCwgMTI4LCA2NSwgNjcsIAotICAgIDY3LCA2OSwgNzgsIDIxMiwgNjUsIDY3LCA2NSwgNjgsIDY5LCA3NywgMjE3LCA2NSwgNjYsIDg5LCA4MywgNzcsIDY1LCAKLSAgICAyMDQsIDY1LCA2NiwgODUsIDc4LCA2OCwgNjUsIDc4LCA2NywgNjksIDEyOCwgNjUsIDY2LCA3NSwgNzIsIDY1LCA4MywgNzMsIAotICAgIDY1LCAyMDYsIDY1LCA2NiwgNjYsIDgyLCA2OSwgODYsIDczLCA2NSwgODQsIDczLCA3OSwgMjA2LCA2NSwgNjYsIDY1LCA3MCwgCi0gICAgNzMsIDc2LCA3MywgMTI4LCA2NSwgNjYsIDE3OCwgNjUsIDY1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNjUsIDY1LCAKLSAgICA4OSwgMTI4LCA2NSwgNjUsIDg3LCAxMjgsIDY1LCA2NSwgNzksIDEyOCwgNjUsIDY1LCA3NCwgMTI4LCA2NSwgNjUsIDY2LCAKLSAgICA2NSwgNjUsIDcwLCA3MywgNzYsIDczLCAxMjgsIDY1LCA2NSwgNDgsIDUxLCA1MCwgMTI4LCA2NSwgNjUsIDQ4LCA1MSwgNDksIAotICAgIDEyOCwgNjUsIDY1LCA0OCwgNTEsIDQ4LCAxMjgsIDY1LCA2NSwgNDgsIDUwLCA1NywgMTI4LCA2NSwgNjUsIDQ4LCA1MCwgCi0gICAgNTYsIDEyOCwgNjUsIDY1LCA0OCwgNTAsIDU1LCAxMjgsIDY1LCA2NSwgNDgsIDUwLCA1NCwgMTI4LCA2NSwgNjUsIDQ4LCAKLSAgICA1MCwgNTMsIDEyOCwgNjUsIDY1LCA0OCwgNTAsIDUyLCAxMjgsIDY1LCA2NSwgNDgsIDUwLCA1MSwgMTI4LCA2NSwgNjUsIAotICAgIDQ4LCA1MCwgNTAsIDEyOCwgNjUsIDY1LCA0OCwgNTAsIDQ5LCAxMjgsIDY1LCA2NSwgNDgsIDUwLCA0OCwgMTI4LCA2NSwgCi0gICAgNjUsIDQ4LCA0OSwgNTcsIDEyOCwgNjUsIDY1LCA0OCwgNDksIDU2LCAxMjgsIDY1LCA2NSwgNDgsIDQ5LCA1NSwgMTI4LCAKLSAgICA2NSwgNjUsIDQ4LCA0OSwgNTQsIDEyOCwgNjUsIDY1LCA0OCwgNDksIDUzLCAxMjgsIDY1LCA2NSwgNDgsIDQ5LCA1MiwgCi0gICAgMTI4LCA2NSwgNjUsIDQ4LCA0OSwgNTEsIDEyOCwgNjUsIDY1LCA0OCwgNDksIDUwLCAxMjgsIDY1LCA2NSwgNDgsIDQ5LCAKLSAgICA0OSwgMTI4LCA2NSwgNjUsIDQ4LCA0OSwgNDgsIDEyOCwgNjUsIDY1LCA0OCwgNDgsIDU3LCAxMjgsIDY1LCA2NSwgNDgsIAotICAgIDQ4LCA1NiwgMTI4LCA2NSwgNjUsIDQ4LCA0OCwgNTUsIDY2LCAxMjgsIDY1LCA2NSwgNDgsIDQ4LCA1NSwgNjUsIDEyOCwgCi0gICAgNjUsIDY1LCA0OCwgNDgsIDU1LCAxMjgsIDY1LCA2NSwgNDgsIDQ4LCA1NCwgMTI4LCA2NSwgNjUsIDQ4LCA0OCwgNTMsIAotICAgIDEyOCwgNjUsIDY1LCA0OCwgNDgsIDUyLCAxMjgsIDY1LCA2NSwgNDgsIDQ4LCA1MSwgMTI4LCA2NSwgNjUsIDQ4LCA0OCwgCi0gICAgNTAsIDEyOCwgNjUsIDY1LCA0OCwgNDgsIDQ5LCAxMjgsIDY1LCA0OCwgNTUsIDQ4LCAxMjgsIDY1LCA0OCwgNTQsIDU3LCAKLSAgICAxMjgsIDY1LCA0OCwgNTQsIDU2LCAxMjgsIDY1LCA0OCwgNTQsIDU1LCAxMjgsIDY1LCA0OCwgNTQsIDU0LCAxMjgsIDY1LCAKLSAgICA0OCwgNTQsIDUzLCAxMjgsIDY1LCA0OCwgNTQsIDUyLCAxMjgsIDY1LCA0OCwgNTQsIDUxLCAxMjgsIDY1LCA0OCwgNTQsIAotICAgIDUwLCAxMjgsIDY1LCA0OCwgNTQsIDQ5LCAxMjgsIDY1LCA0OCwgNTQsIDQ4LCAxMjgsIDY1LCA0OCwgNTMsIDU3LCAxMjgsIAotICAgIDY1LCA0OCwgNTMsIDU2LCAxMjgsIDY1LCA0OCwgNTMsIDU1LCAxMjgsIDY1LCA0OCwgNTMsIDU0LCAxMjgsIDY1LCA0OCwgCi0gICAgNTMsIDUzLCAxMjgsIDY1LCA0OCwgNTMsIDUyLCAxMjgsIDY1LCA0OCwgNTMsIDUxLCAxMjgsIDY1LCA0OCwgNTMsIDUwLCAKLSAgICAxMjgsIDY1LCA0OCwgNTMsIDQ5LCAxMjgsIDY1LCA0OCwgNTMsIDQ4LCAxMjgsIDY1LCA0OCwgNTIsIDU3LCAxMjgsIDY1LCAKLSAgICA0OCwgNTIsIDU2LCAxMjgsIDY1LCA0OCwgNTIsIDU1LCAxMjgsIDY1LCA0OCwgNTIsIDU0LCAxMjgsIDY1LCA0OCwgNTIsIAotICAgIDUzLCA2NSwgMTI4LCA2NSwgNDgsIDUyLCA1MywgMTI4LCA2NSwgNDgsIDUyLCA1MiwgMTI4LCA2NSwgNDgsIDUyLCA1MSwgCi0gICAgNjUsIDEyOCwgNjUsIDQ4LCA1MiwgNTEsIDEyOCwgNjUsIDQ4LCA1MiwgNTAsIDY1LCAxMjgsIDY1LCA0OCwgNTIsIDUwLCAKLSAgICAxMjgsIDY1LCA0OCwgNTIsIDQ5LCAxMjgsIDY1LCA0OCwgNTIsIDQ4LCA2NSwgMTI4LCA2NSwgNDgsIDUyLCA0OCwgMTI4LCAKLSAgICA2NSwgNDgsIDUxLCA1NywgMTI4LCA2NSwgNDgsIDUxLCA1NiwgMTI4LCA2NSwgNDgsIDUxLCA1NSwgMTI4LCA2NSwgNDgsIAotICAgIDUxLCA1NCwgMTI4LCA2NSwgNDgsIDUxLCA1MywgMTI4LCA2NSwgNDgsIDUxLCA1MiwgMTI4LCA2NSwgNDgsIDUxLCA1MSwgCi0gICAgMTI4LCA2NSwgNDgsIDUxLCA1MCwgNjUsIDEyOCwgNjUsIDQ4LCA0OSwgNTUsIDY1LCAxMjgsIDY1LCA0OCwgNDksIDUyLCAKLSAgICA2NSwgMTI4LCA2NSwgNDgsIDQ4LCA1NCwgNjYsIDEyOCwgNjUsIDQ4LCA0OCwgNTQsIDY1LCAxMjgsIDY1LCA0OCwgNDgsIAotICAgIDUzLCA2NSwgMTI4LCA2NSwgNDUsIDY5LCA4NSwgMTI4LCA0NSwgODUsIDIwNSwgNDUsIDgwLCA3MiwgODIsIDg1LCAxMjgsIAotICAgIDQ1LCA3NSwgNzIsIDg5LCA4NSwgMTk2LCA0NSwgNzUsIDcyLCA4OSwgNzMsIDc2LCAxMjgsIDQ1LCA2OCwgOTAsIDg1LCAKLSAgICAxOTYsIDQ1LCA2NywgNzIsIDY1LCAyMTAsIDQ1LCA2NywgNzIsIDY1LCA3NiwgMTI4LCAKKyAgICAxMjgsIDY1LCA3NiwgNzcsIDc5LCA4MywgMjEyLCA2NSwgNzYsIDc3LCAxMjgsIDY1LCA3NiwgNzYsIDc5LCAxMjgsIDY1LCAKKyAgICA3NiwgNzYsIDczLCA2NSwgNzgsIDY3LCA2OSwgMTI4LCA2NSwgNzYsIDc2LCAyMDEsIDY1LCA3NiwgNzYsIDY1LCAyMDAsIAorICAgIDY1LCA3NiwgNzUsIDY1LCA3NiwgNzMsIDQ1LCA1MCwgMTI4LCA2NSwgNzYsIDc1LCA2NSwgNzYsIDczLCAxMjgsIDY1LCA3NiwgCisgICAgNzMsIDcxLCA3OCwgNjksIDE5NiwgNjUsIDc2LCA3MywgNzAsIDg1LCAxMjgsIDY1LCA3NiwgNzMsIDY5LCA3OCwgMTI4LCAKKyAgICA2NSwgNzYsIDczLCA2OSwgMjA2LCA2NSwgNzYsIDcxLCA3MywgMjE4LCA2NSwgNzYsIDcwLCA2NSwgMTI4LCA2NSwgNzYsIAorICAgIDY5LCA4NSwgMjEyLCA2NSwgNzYsIDY5LCA4MiwgODQsIDEyOCwgNjUsIDc2LCA2OSwgODAsIDcyLCAxMjgsIDY1LCA3NiwgCisgICAgNjksIDc3LCA2NiwgNzMsIDY3LCAxMjgsIDY1LCA3NiwgNjksIDcwLCAxMjgsIDY1LCA3NiwgNjUsIDg5LCA3MiwgNjksIAorICAgIDEyOCwgNjUsIDc2LCA2NSwgODksIDcyLCAxOTcsIDY1LCA3NiwgNjUsIDgyLCAyMDUsIDY1LCA3NiwgNjUsIDgwLCA3MiwgCisgICAgMTI4LCA2NSwgNzYsIDQ1LCA3NiwgNjUsIDc1LCA4NSwgNzgsIDY1LCAxMjgsIDY1LCA3NSwgODQsIDczLCA2OSwgODMsIDY5LCAKKyAgICA3NiwgODMsIDc1LCA2NSwgNjYsIDEyOCwgNjUsIDc1LCA4MywgNjUsIDEyOCwgNjUsIDc1LCA3MiwgNzcsIDczLCA3NywgNzMsIAorICAgIDE5NSwgNjUsIDc1LCA2NiwgNjUsIDIxMCwgNjUsIDc1LCA2NSwgODIsIDY1LCAxMjgsIDY1LCA3NSwgNjUsIDgyLCAxOTMsIAorICAgIDY1LCA3MywgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDY1LCA3MywgODYsIDczLCA3NiwgNzMsIDIwMywgNjUsIDczLCA4NCwgCisgICAgNzksIDIwNiwgNjUsIDczLCA4MiwgODAsIDc2LCA2NSwgNzgsIDY5LCAxMjgsIDY1LCA3MywgNzgsIDIxMywgNjUsIDczLCAKKyAgICA3OCwgNzgsIDEyOCwgNjUsIDczLCA3NiwgNzcsIDEyOCwgNjUsIDczLCA3NSwgNjUsIDgyLCA2NSwgMTI4LCA2NSwgNzMsIAorICAgIDcyLCA4NiwgODUsIDgzLCAxMjgsIDY1LCA3MiwgODMsIDY4LCA2NSwgMTI4LCA2NSwgNzIsIDgzLCA2NSwgMTI4LCA2NSwgCisgICAgNzIsIDY1LCA3OCwgMTk5LCA2NSwgNzIsIDY1LCA3MSwgNzEsIDY1LCAyMTAsIDY1LCA3MiwgNjUsIDY4LCAxMjgsIDY1LCAKKyAgICA3MSwgODUsIDc4LCA3MSwgMTI4LCA2NSwgNzEsIDc5LCA3MSwgMjAxLCA2NSwgNzEsIDcxLCA4MiwgNjUsIDg2LCA2NSwgODQsIAorICAgIDczLCA3OSwgNzgsIDEyOCwgNjUsIDcxLCA3MSwgODIsIDY1LCA4NiwgNjUsIDg0LCA2OSwgMTk2LCA2NSwgNzEsIDY1LCA3MywgCisgICAgNzgsIDEyOCwgNjUsIDcwLCA4NCwgNjksIDIxMCwgNjUsIDcwLCA4MywgNjUsIDY1LCA4MSwgMTI4LCA2NSwgNzAsIDgyLCAKKyAgICA3MywgNjcsIDY1LCAyMDYsIDY1LCA3MCwgNzksIDgyLCA2OSwgNzcsIDY5LCA3OCwgODQsIDczLCA3OSwgNzgsIDY5LCA2OCwgCisgICAgMTI4LCA2NSwgNzAsIDcxLCA3MiwgNjUsIDc4LCAyMDEsIDY1LCA3MCwgNzAsIDgyLCA3MywgNjcsIDY1LCA4NCwgNzMsIDc5LCAKKyAgICAyMDYsIDY1LCA2OSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDY1LCA2OSwgODksIDEyOCwgNjUsIDY5LCA4MywgNjcsIAorICAgIDg1LCA3NiwgNjUsIDgwLCA3MywgODUsIDgzLCAxMjgsIDY1LCA2OSwgODMsIDY3LCAxMjgsIDY1LCA2OSwgODMsIDEyOCwgCisgICAgNjUsIDY5LCA4MiwgNzMsIDY1LCAyMDQsIDY1LCA2OSwgODIsIDEyOCwgNjUsIDY5LCA3NiwgNjUsIDQ1LCA4MCwgNzMsIDc2LCAKKyAgICA3NiwgNjUsIDEyOCwgNjUsIDY5LCA3NiwgMTI4LCA2NSwgNjksIDc1LCAxMjgsIDY1LCA2OSwgNzEsIDY5LCA2NSwgMjA2LCAKKyAgICA2NSwgNjksIDcxLCAxMjgsIDY1LCA2OSwgNjksIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA2NSwgNjksIDY5LCAxMjgsIAorICAgIDY1LCA2OSwgNjgsIDY1LCA0NSwgODAsIDczLCA3NiwgNzYsIDY1LCAxMjgsIDY1LCA2OSwgNjgsIDEyOCwgNjUsIDY5LCA2NiwgCisgICAgMTI4LCA2NSwgNjgsIDg2LCA2NSwgNzgsIDg0LCA2NSwgNzEsIDY5LCAxMjgsIDY1LCA2OCwgODYsIDY1LCA3OCwgNjcsIDY5LCAKKyAgICAxMjgsIDY1LCA2OCwgNjksIDcxLCAxMjgsIDY1LCA2OCwgNjksIDE5OSwgNjUsIDY4LCA2OCwgODIsIDY5LCA4MywgODMsIAorICAgIDY5LCAxOTYsIDY1LCA2OCwgNjgsIDgyLCA2OSwgODMsIDIxMSwgNjUsIDY4LCA2OCwgNjUsIDc1LCAxMjgsIDY1LCA2OCwgCisgICAgNjUsIDIwMywgNjUsIDY3LCA4NSwgODQsIDY5LCA0NSwgNzcsIDY1LCA2NywgODIsIDc5LCA3OCwgMTI4LCA2NSwgNjcsIDg1LCAKKyAgICA4NCwgNjksIDQ1LCA3MSwgODIsIDY1LCA4NiwgNjksIDQ1LCA2NSwgNjcsIDg1LCA4NCwgNjksIDEyOCwgNjUsIDY3LCA4NSwgCisgICAgODQsIDE5NywgNjUsIDY3LCA4NCwgODUsIDY1LCA3NiwgNzYsIDIxNywgNjUsIDY3LCA4NCwgNzMsIDg2LCA2NSwgODQsIAorICAgIDE5NywgNjUsIDY3LCA4MiwgNzksIDgwLCA3MiwgNzksIDc4LCA3MywgMTk1LCA2NSwgNjcsIDc1LCA3OCwgNzksIDg3LCA3NiwgCisgICAgNjksIDY4LCA3MSwgNjksIDEyOCwgNjUsIDY3LCA2NywgODUsIDc3LCA4NSwgNzYsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCAKKyAgICA2NSwgNjcsIDY3LCA3OSwgODUsIDc4LCAyMTIsIDY1LCA2NywgNjcsIDY5LCA4MCwgODQsIDEyOCwgNjUsIDY3LCA2NywgNjksIAorICAgIDc4LCA4NCwgNDUsIDgzLCA4NCwgNjUsIDY3LCA2NywgNjUsIDg0LCA3OSwgMTI4LCA2NSwgNjcsIDY3LCA2OSwgNzgsIDg0LCAKKyAgICAxMjgsIDY1LCA2NywgNjcsIDY5LCA3OCwgMjEyLCA2NSwgNjcsIDY1LCA2OCwgNjksIDc3LCAyMTcsIDY1LCA2NiwgODksIAorICAgIDgzLCA3NywgNjUsIDIwNCwgNjUsIDY2LCA4NSwgNzgsIDY4LCA2NSwgNzgsIDY3LCA2OSwgMTI4LCA2NSwgNjYsIDc1LCA3MiwgCisgICAgNjUsIDgzLCA3MywgNjUsIDIwNiwgNjUsIDY2LCA2NiwgODIsIDY5LCA4NiwgNzMsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDY1LCAKKyAgICA2NiwgNjUsIDcwLCA3MywgNzYsIDczLCAxMjgsIDY1LCA2NiwgMTc4LCA2NSwgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgCisgICAgMTI4LCA2NSwgNjUsIDg5LCAxMjgsIDY1LCA2NSwgODcsIDEyOCwgNjUsIDY1LCA3OSwgMTI4LCA2NSwgNjUsIDc0LCAxMjgsIAorICAgIDY1LCA2NSwgNjYsIDY1LCA2NSwgNzAsIDczLCA3NiwgNzMsIDEyOCwgNjUsIDY1LCA0OCwgNTEsIDUwLCAxMjgsIDY1LCA2NSwgCisgICAgNDgsIDUxLCA0OSwgMTI4LCA2NSwgNjUsIDQ4LCA1MSwgNDgsIDEyOCwgNjUsIDY1LCA0OCwgNTAsIDU3LCAxMjgsIDY1LCAKKyAgICA2NSwgNDgsIDUwLCA1NiwgMTI4LCA2NSwgNjUsIDQ4LCA1MCwgNTUsIDEyOCwgNjUsIDY1LCA0OCwgNTAsIDU0LCAxMjgsIAorICAgIDY1LCA2NSwgNDgsIDUwLCA1MywgMTI4LCA2NSwgNjUsIDQ4LCA1MCwgNTIsIDEyOCwgNjUsIDY1LCA0OCwgNTAsIDUxLCAKKyAgICAxMjgsIDY1LCA2NSwgNDgsIDUwLCA1MCwgMTI4LCA2NSwgNjUsIDQ4LCA1MCwgNDksIDEyOCwgNjUsIDY1LCA0OCwgNTAsIAorICAgIDQ4LCAxMjgsIDY1LCA2NSwgNDgsIDQ5LCA1NywgMTI4LCA2NSwgNjUsIDQ4LCA0OSwgNTYsIDEyOCwgNjUsIDY1LCA0OCwgCisgICAgNDksIDU1LCAxMjgsIDY1LCA2NSwgNDgsIDQ5LCA1NCwgMTI4LCA2NSwgNjUsIDQ4LCA0OSwgNTMsIDEyOCwgNjUsIDY1LCAKKyAgICA0OCwgNDksIDUyLCAxMjgsIDY1LCA2NSwgNDgsIDQ5LCA1MSwgMTI4LCA2NSwgNjUsIDQ4LCA0OSwgNTAsIDEyOCwgNjUsIAorICAgIDY1LCA0OCwgNDksIDQ5LCAxMjgsIDY1LCA2NSwgNDgsIDQ5LCA0OCwgMTI4LCA2NSwgNjUsIDQ4LCA0OCwgNTcsIDEyOCwgCisgICAgNjUsIDY1LCA0OCwgNDgsIDU2LCAxMjgsIDY1LCA2NSwgNDgsIDQ4LCA1NSwgNjYsIDEyOCwgNjUsIDY1LCA0OCwgNDgsIDU1LCAKKyAgICA2NSwgMTI4LCA2NSwgNjUsIDQ4LCA0OCwgNTUsIDEyOCwgNjUsIDY1LCA0OCwgNDgsIDU0LCAxMjgsIDY1LCA2NSwgNDgsIAorICAgIDQ4LCA1MywgMTI4LCA2NSwgNjUsIDQ4LCA0OCwgNTIsIDEyOCwgNjUsIDY1LCA0OCwgNDgsIDUxLCAxMjgsIDY1LCA2NSwgCisgICAgNDgsIDQ4LCA1MCwgMTI4LCA2NSwgNjUsIDQ4LCA0OCwgNDksIDEyOCwgNjUsIDQ4LCA1NSwgNDgsIDEyOCwgNjUsIDQ4LCAKKyAgICA1NCwgNTcsIDEyOCwgNjUsIDQ4LCA1NCwgNTYsIDEyOCwgNjUsIDQ4LCA1NCwgNTUsIDEyOCwgNjUsIDQ4LCA1NCwgNTQsIAorICAgIDEyOCwgNjUsIDQ4LCA1NCwgNTMsIDEyOCwgNjUsIDQ4LCA1NCwgNTIsIDEyOCwgNjUsIDQ4LCA1NCwgNTEsIDEyOCwgNjUsIAorICAgIDQ4LCA1NCwgNTAsIDEyOCwgNjUsIDQ4LCA1NCwgNDksIDEyOCwgNjUsIDQ4LCA1NCwgNDgsIDEyOCwgNjUsIDQ4LCA1MywgCisgICAgNTcsIDEyOCwgNjUsIDQ4LCA1MywgNTYsIDEyOCwgNjUsIDQ4LCA1MywgNTUsIDEyOCwgNjUsIDQ4LCA1MywgNTQsIDEyOCwgCisgICAgNjUsIDQ4LCA1MywgNTMsIDEyOCwgNjUsIDQ4LCA1MywgNTIsIDEyOCwgNjUsIDQ4LCA1MywgNTEsIDEyOCwgNjUsIDQ4LCAKKyAgICA1MywgNTAsIDEyOCwgNjUsIDQ4LCA1MywgNDksIDEyOCwgNjUsIDQ4LCA1MywgNDgsIDEyOCwgNjUsIDQ4LCA1MiwgNTcsIAorICAgIDEyOCwgNjUsIDQ4LCA1MiwgNTYsIDEyOCwgNjUsIDQ4LCA1MiwgNTUsIDEyOCwgNjUsIDQ4LCA1MiwgNTQsIDEyOCwgNjUsIAorICAgIDQ4LCA1MiwgNTMsIDY1LCAxMjgsIDY1LCA0OCwgNTIsIDUzLCAxMjgsIDY1LCA0OCwgNTIsIDUyLCAxMjgsIDY1LCA0OCwgCisgICAgNTIsIDUxLCA2NSwgMTI4LCA2NSwgNDgsIDUyLCA1MSwgMTI4LCA2NSwgNDgsIDUyLCA1MCwgNjUsIDEyOCwgNjUsIDQ4LCAKKyAgICA1MiwgNTAsIDEyOCwgNjUsIDQ4LCA1MiwgNDksIDEyOCwgNjUsIDQ4LCA1MiwgNDgsIDY1LCAxMjgsIDY1LCA0OCwgNTIsIAorICAgIDQ4LCAxMjgsIDY1LCA0OCwgNTEsIDU3LCAxMjgsIDY1LCA0OCwgNTEsIDU2LCAxMjgsIDY1LCA0OCwgNTEsIDU1LCAxMjgsIAorICAgIDY1LCA0OCwgNTEsIDU0LCAxMjgsIDY1LCA0OCwgNTEsIDUzLCAxMjgsIDY1LCA0OCwgNTEsIDUyLCAxMjgsIDY1LCA0OCwgCisgICAgNTEsIDUxLCAxMjgsIDY1LCA0OCwgNTEsIDUwLCA2NSwgMTI4LCA2NSwgNDgsIDQ5LCA1NSwgNjUsIDEyOCwgNjUsIDQ4LCAKKyAgICA0OSwgNTIsIDY1LCAxMjgsIDY1LCA0OCwgNDgsIDU0LCA2NiwgMTI4LCA2NSwgNDgsIDQ4LCA1NCwgNjUsIDEyOCwgNjUsIAorICAgIDQ4LCA0OCwgNTMsIDY1LCAxMjgsIDY1LCA0NSwgNjksIDg1LCAxMjgsIDQ1LCA4NSwgMjA1LCA0NSwgODAsIDcyLCA4MiwgCisgICAgODUsIDEyOCwgNDUsIDc1LCA3MiwgODksIDg1LCAxOTYsIDQ1LCA3NSwgNzIsIDg5LCA3MywgNzYsIDEyOCwgNDUsIDY4LCAKKyAgICA5MCwgODUsIDE5NiwgNDUsIDY3LCA3MiwgNjUsIDIxMCwgNDUsIDY3LCA3MiwgNjUsIDc2LCAxMjgsIAogfTsKIAogc3RhdGljIHVuc2lnbmVkIGludCBsZXhpY29uX29mZnNldFtdID0gewotICAgIDAsIDAsIDYsIDEwLCAxOCwgMjMsIDI3LCAzNCwgMzksIDQxLCA0NCwgNTAsIDYyLCA3MCwgODAsIDkzLCAxMDIsIDEwOCwgCisgICAgMCwgMCwgNiwgMTAsIDE4LCAyMywgMjcsIDM0LCAzOSwgNDEsIDQ3LCA1MCwgNjIsIDcwLCA4MCwgOTMsIDEwMiwgMTA4LCAKICAgICAxMTMsIDEyMSwgMTMwLCAxMzUsIDE0MCwgMTQzLCAxNDcsIDE1MywgMTU4LCAxNjMsIDE3MSwgMTc4LCAxODYsIDE5MSwgCiAgICAgMTk0LCAyMDAsIDIwOCwgMjE1LCAyMjUsIDIzMCwgMjM3LCAyNDYsIDI0OSwgMjU0LCAyNTcsIDI2MywgMjY3LCAyNzIsIAogICAgIDI4MSwgMjg4LCAyOTUsIDMwMSwgMzEwLCAzMTUsIDMyMSwgMzI3LCAzMzUsIDE0NCwgMzQxLCAzNDksIDM1MCwgMzU4LCAKLSAgICAzNjEsIDM2NywgMzY5LCAzNzUsIDM4MiwgMzg0LCAzOTEsIDM5NSwgNDAzLCA0MTAsIDQxNSwgNDE3LCA0MjIsIDQyOSwgCi0gICAgNDMxLCAyOTksIDQzNywgNDM5LCA0NDQsIDQ0OSwgNDUyLCA0NTcsIDQ2MywgNDcwLCA0NzksIDQ4OSwgNDk0LCA0OTgsIAorICAgIDM2MSwgMzY3LCAzNjksIDM3NSwgMzgyLCAzODQsIDM5MSwgMzk1LCA0MDMsIDQxMCwgNDEyLCA0MTcsIDQyMiwgNDI3LCAKKyAgICA0MzQsIDQzNiwgMjk5LCA0NDIsIDQ0NSwgNDQ3LCA0NTIsIDQ1NywgNDYzLCA0NzAsIDQ3OSwgNDg5LCA0OTQsIDQ5OCwgCiAgICAgNTA1LCA1MTgsIDUyMiwgNTMxLCA1MzgsIDU0NSwgNTQ4LCA1NTQsIDU1OCwgNTYyLCA1NzIsIDU4MCwgNTg4LCA1OTYsIAotICAgIDYwNSwgNjEzLCA2MTgsIDYxOSwgNjIzLCA2MzEsIDYzOCwgNjQ4LCA2NTksIDY2MywgNjY2LCA2NzAsIDY3MywgMzQ4LCAKLSAgICA2NzgsIDY4NywgNjkxLCA2OTcsIDcwMywgNzA1LCA3MDgsIDcxMSwgNzE0LCA3MTgsIDcyMiwgNzMxLCA3MzksIDc0NCwgCisgICAgNjA1LCA2MTMsIDYxOCwgNjE5LCA2MjMsIDYzMSwgNjM4LCA2NDgsIDY1MiwgNjYzLCA2NjcsIDY3MCwgNjczLCA2NzgsIAorICAgIDM0OCwgNjgyLCA2OTEsIDY5NywgNzAzLCA3MDUsIDcwOCwgNzExLCA3MTQsIDcxOCwgNzIyLCA3MzEsIDczOSwgNzQ0LCAKICAgICA3NDcsIDc1MSwgNzU3LCA3NjQsIDc3MSwgNzc2LCA3ODUsIDc5NCwgODAxLCA4MDUsIDgxOCwgODI3LCA4MzUsIDg0MSwgCiAgICAgNTU3LCA4NTAsIDg2MCwgODY3LCA4NzMsIDg3OSwgODg2LCA4OTQsIDg5OCwgNzQ5LCA5MDYsIDkxNSwgNTAzLCA5MjMsIAogICAgIDkyOCwgOTM0LCAxNywgOTQzLCA5NDgsIDk1MSwgOTU1LCA5NTksIDk2NiwgOTY5LCA5NzYsIDk4MCwgOTg4LCA5OTIsIAotICAgIDEwMDAsIDEwMDQsIDEwMDcsIDEwMTQsIDEwMjEsIDE5MiwgMTAyNCwgMTAyOSwgMTAzOSwgMTA0OCwgMTA1NSwgMTA2MSwgCi0gICAgMTA2OSwgMTA3MiwgMTA3NywgMTA4MywgMTA5MSwgMTA5NywgMTEwMiwgMTEwNSwgMTEwOCwgMTExLCAxMTEzLCAxMTE3LCAKLSAgICAxMTIzLCAxMTI5LCAxMTMyLCAxMTM4LCAxMTQyLCAxMTQ3LCAxMTUzLCAxMTU4LCAxMTY4LCAxMTcyLCAxMTc1LCAxMTc4LCAKKyAgICAxMDAwLCAxMDA0LCAxMDA3LCAxMDE0LCAxMDIxLCAxOTIsIDEwMjQsIDEwMjksIDEwMzksIDEwNDgsIDEwNTUsIDEwNjAsIAorICAgIDEwNjYsIDEwNzIsIDEwODAsIDEwODMsIDEwODgsIDEwOTQsIDExMDIsIDExMDcsIDExMTAsIDExMTMsIDExMSwgMTExOCwgCisgICAgMTEyMiwgMTEyOCwgMTEzNCwgMTEzNywgMTE0MywgMTE0NywgMTE1MiwgMTE1OCwgMTE2OCwgMTE3MiwgMTE3NSwgMTE3OCwgCiAgICAgMTE4NywgMTE5MSwgMTE5NCwgMTE5OSwgMTIwNCwgMTIxMCwgMTIxNSwgMTIyMCwgMTIyNSwgMTIyOSwgMTIzNCwgMTI0MCwgCiAgICAgMTI0NSwgMTI1MCwgMTI1NCwgMTI2MCwgMTI2NSwgMTI3MCwgMTI3NSwgMTI3OSwgMTI4NCwgMTI4OSwgMTI5NCwgMTMwMCwgCiAgICAgMTMwNiwgMTMxMiwgMTMxNywgMTMyMSwgMTMyNiwgMTMzMSwgMTMzNiwgMTM0MCwgMTM0NSwgMTM1MCwgMTM1NSwgMTM2MCwgCkBAIC00NjUwLDcgKzQ2NTMsNyBAQAogICAgIDE2NjUsIDE2NzAsIDE2NzUsIDE2NzksIDE2ODIsIDE2ODcsIDE2OTIsIDE2OTcsIDE3MDIsIDE3MDgsIDE3MTMsIDE3MTcsIAogICAgIDEzMjIsIDE3MjAsIDE3MjUsIDE3MzAsIDEzMjcsIDE3MzQsIDE3MzgsIDE3NDUsIDEzMzIsIDE3NTIsIDEzMzcsIDE3NTYsIAogICAgIDE3NTgsIDE3NjMsIDE3NjksIDEzNDEsIDE3NzQsIDE3ODMsIDEzNDYsIDE3ODgsIDE3OTQsIDEzNTEsIDE3OTksIDE4MDQsIAotICAgIDE4MDcsIDE4MTIsIDE4MTYsIDE4MjAsIDE4MjQsIDE4MjcsIDE4MzEsIDEzNTYsIDEzNjEsIDExNTYsIDE4MzYsIDE4NDIsIAorICAgIDE4MDcsIDE4MTIsIDE4MTYsIDE4MjAsIDE4MjQsIDE4MjcsIDE4MzEsIDEzNTYsIDEzNjEsIDEwNTgsIDE4MzYsIDE4NDIsIAogICAgIDE4NDgsIDE4NTQsIDE4NjAsIDE4NjYsIDE4NzIsIDE4NzgsIDE4ODQsIDE4ODksIDE4OTUsIDE5MDEsIDE5MDcsIDE5MTMsIAogICAgIDE5MTksIDE5MjUsIDE5MzEsIDE5MzcsIDE5NDMsIDE5NDgsIDE5NTMsIDE5NTgsIDE5NjMsIDE5NjgsIDE5NzMsIDE5NzgsIAogICAgIDE5ODMsIDE5ODgsIDE5OTMsIDE5OTksIDIwMDQsIDIwMTAsIDIwMTUsIDIwMjEsIDIwMjcsIDIwMzIsIDIwMzgsIDIwNDQsIApAQCAtNDY3Nyw3ICs0NjgwLDcgQEAKICAgICAzMjQxLCAzMjQ1LCAzMjQ4LCAzMjYxLCAzMjY1LCAzMjY5LCAzMjczLCAzMjc3LCAzMjgxLCAzMjg0LCAzMjg4LCAzMjkyLCAKICAgICAzMjk3LCAzMzAxLCAzMzA2LCAzMzExLCAzMzE2LCAzMzIwLCAzMzIzLCAzMzI2LCAzMzMyLCAzMzM2LCAzMzQwLCAzMzQzLCAKICAgICAzMzQ3LCAzMzUxLCAzMzU0LCAzMzYwLCAzMzY1LCAzMzcwLCAzMzc2LCAzMzgxLCAzMzg2LCAzMzkyLCAzMzk4LCAzNDAzLCAKLSAgICAzNDA4LCAzNDEzLCAxMTE1LCA1NDcsIDM0MTgsIDM0MjEsIDM0MjYsIDM0MzAsIDM0MzMsIDM0MzcsIDM0NDIsIDM0NDcsIAorICAgIDM0MDgsIDM0MTMsIDExMjAsIDU0NywgMzQxOCwgMzQyMSwgMzQyNiwgMzQzMCwgMzQzMywgMzQzNywgMzQ0MiwgMzQ0NywgCiAgICAgMzQ1MSwgMzQ1NiwgMzQ2MCwgMzQ2NSwgMzQ2OSwgMzQ3MywgMzQ3OSwgMzQ4NSwgMzQ4OCwgMzQ5MSwgMzQ5NywgMzUwNCwgCiAgICAgMzUxMSwgMzUxNywgMzUyNCwgMzUyOSwgMzUzMywgMzU0MCwgMzU0NywgMzU1MiwgMzU1NiwgMzU2NiwgMzU3MCwgMzU3NCwgCiAgICAgMzU3OSwgMzU4NCwgMzU5NCwgMjEwNywgMzU5OSwgMzYwMywgMzYwNiwgMzYxMiwgMzYxNywgMzYyMywgMzYyOSwgMzYzNCwgCkBAIC00NzI2LDcgKzQ3MjksNyBAQAogICAgIDY2ODMsIDY2OTgsIDY3MTMsIDY3MjgsIDY3NDMsIDY3NTgsIDY3NzMsIDY3ODgsIDY4MDMsIDY4MTgsIDY4MzMsIDY4NDgsIAogICAgIDY4NjMsIDY4NzgsIDY4OTMsIDY5MDgsIDY5MjMsIDY5MzgsIDY5NTMsIDY5NjgsIDY5ODMsIDY5OTgsIDcwMTMsIDcwMjgsIAogICAgIDcwMzcsIDcwNDYsIDcwNTEsIDcwNTcsIDcwNjcsIDcwNzEsIDcwNzYsIDcwODEsIDcwODksIDcwOTMsIDcwOTYsIDcxMDAsIAotICAgIDI5NzUsIDcxMDMsIDcxMDgsIDI5OCwgNDQyLCA3MTE0LCA3MTIyLCA3MTI2LCA3MTMwLCA3MTMzLCA3MTM3LCA3MTQzLCAKKyAgICAyOTc1LCA3MTAzLCA3MTA4LCAyOTgsIDQyNSwgNzExNCwgNzEyMiwgNzEyNiwgNzEzMCwgNzEzMywgNzEzNywgNzE0MywgCiAgICAgNzE0NywgNzE1NSwgNzE2MSwgNzE2NiwgNzE3MywgNzE4MCwgNzE4NiwgNzE5MSwgNzE5OCwgNzIwNCwgNzIxMiwgNzIxNiwgCiAgICAgNzIyMSwgNzIzMywgNzI0NCwgNzI1MSwgNzI1NSwgNzI1OSwgNzI2NSwgMzIzMywgNzI2OSwgNzI3NSwgNzI4MCwgNzI4NSwgCiAgICAgNzI5MCwgNzI5NiwgNzMwMSwgNzMwNiwgNzMxMSwgNzMxNiwgNzMyMiwgNzMyNywgNzMzMiwgNzMzOCwgNzM0MywgNzM0OSwgCkBAIC00NzU1LDcyNTIgKzQ3NTgsNzI1MCBAQAogICAgIDg2NDUsIDg2NDksIDg2NTMsIDg2NTgsIDg2NjUsIDg2NzYsIDg2ODQsIDg2OTQsIDg3MDAsIDg3MDcsIDg3MTIsIDg3MTYsIAogICAgIDg3MjcsIDg3NDAsIDg3NTEsIDg3NjQsIDg3NzUsIDg3ODcsIDg3OTksIDg4MTEsIDg4MjQsIDg4MzcsIDg4NDQsIDg4NTAsIAogICAgIDg4NjQsIDg4NzEsIDg4NzcsIDg4ODEsIDg4ODYsIDg4OTAsIDg4OTcsIDg5MDUsIDg5MDksIDg5MTUsIDg5MTksIDg5MjUsIAotICAgIDg5MzUsIDg5MzksIDg5NDQsIDg5NDksIDg5NTYsIDg5NjIsIDg5NzIsIDc5MDksIDg5NzgsIDg5ODIsIDg5ODksIDc2OCwgCi0gICAgODk5MywgODk5NywgOTAwMiwgOTAwNywgOTAxMiwgOTAxNiwgOTAyMiwgOTAzMCwgOTAzNiwgOTA0MCwgOTA0NiwgOTA1NiwgCi0gICAgOTA2MCwgOTA2NiwgOTA3MSwgOTA3NSwgOTA4MSwgOTA4NywgMjE2MSwgOTA5MiwgOTA5NCwgOTA5OSwgOTEwNywgOTExNiwgCi0gICAgOTEyMCwgOTEyNiwgOTEzMSwgOTEzNiwgOTE0MSwgOTE0NiwgOTE1MiwgOTE1NywgOTE2MiwgNDAwNiwgOTE2NywgOTE3MiwgCi0gICAgOTE3NiwgOTE4MiwgOTE4NywgOTE5MywgOTE5OCwgOTIwMywgOTIwOSwgOTIxNCwgOTEyMSwgOTIyMCwgOTIyNCwgOTIzMSwgCi0gICAgOTIzNywgOTI0MiwgOTI0NiwgNjE4MywgOTI1MSwgOTI2MCwgOTI2NSwgOTI3MCwgODIxOCwgODIyNSwgOTI3NSwgMjg1MywgCi0gICAgOTI3OSwgOTI4NCwgOTI4OSwgOTEzMiwgOTI5MywgOTI5OCwgOTEzNywgOTE0MiwgOTMwMywgOTMxMCwgOTMxNywgOTMyMywgCi0gICAgOTMyOSwgOTMzNSwgOTM0MCwgOTM0NSwgOTM1MCwgOTE0NywgOTE1MywgOTM1NiwgOTM2MiwgOTM2NywgOTM3NSwgOTE1OCwgCi0gICAgOTM4MCwgOTkwLCA5MzgzLCA5MzkxLCA5Mzk3LCA5NDAzLCA5NDEyLCA5NDIwLCA5NDI1LCA5NDMxLCA5NDM5LCA5NDQ2LCAKLSAgICA5NDYxLCA5NDc4LCA5NDk3LCA5NTA2LCA5NTE0LCA5NTI5LCA5NTQwLCA5NTUwLCA5NTYwLCA5NTY4LCA5NTc0LCA5NTg2LCAKLSAgICA5NTk1LCA5NjAzLCA5NjEwLCA5NjE3LCA5NjIzLCA5NjI4LCA5NjM2LCA5NjQ2LCA5NjUzLCA5NjYzLCA5NjczLCA5NjgzLCAKLSAgICA5NjkxLCA5Njk4LCA5NzA3LCA5NzE3LCA5NzMxLCA5NzQ2LCA5NzU1LCA5NzYzLCA5NzY4LCA5NzcyLCA5NzgxLCA5Nzg3LCAKLSAgICA5NzkyLCA5ODAyLCA5ODEyLCA5ODIyLCA5ODI3LCA5ODMxLCA5ODQwLCA5ODQ1LCA5ODU1LCA5ODY2LCA5ODc5LCA5ODg3LCAKLSAgICA5OTAwLCA5OTEyLCA5OTIwLCA5OTI1LCA5OTI5LCA5OTM1LCA5OTQwLCA5OTQ4LCA5OTU2LCA5OTYzLCA5OTY4LCA5OTc2LCAKLSAgICA5OTgyLCA5OTg1LCA5OTg5LCA5OTk1LCAxMDAwMywgMTAwMDgsIDEwMDEyLCAxMDAyMCwgMTAwMjksIDEwMDM3LCAxMDA0MywgCi0gICAgMTAwNDcsIDEwMDU0LCAxMDA2NSwgMTAwNjksIDEwMDcyLCAxMDA3OCwgOTE2MywgMTAwODMsIDEwMDg5LCAxMDA5NiwgCi0gICAgMTAxMDIsIDEwMTA3LCAxMDExNCwgMTAxMjEsIDEwMTI4LCAxMDEzNSwgMTAxNDIsIDEwMTQ5LCAxMDE1NiwgMTAxNjMsIAotICAgIDEwMTY4LCA5NDc0LCAxMDE3MywgMTAxNzksIDEwMTg2LCAxMDE5MywgMTAxOTgsIDEwMjA1LCAxMDIxNCwgMTAyMTgsIAotICAgIDEwMjMwLCA4MjU2LCAxMDIzNCwgMTAyMzcsIDEwMjQxLCAxMDI0NSwgMTAyNDksIDEwMjUzLCAxMDI1OSwgMTAyNjUsIAotICAgIDEwMjcwLCAxMDI3NiwgMTAyODEsIDEwMjg2LCAxMDI5MiwgMTAyOTcsIDEwMzAyLCA4OTUyLCAxMDMwNywgMTAzMTEsIAotICAgIDEwMzE1LCAxMDMxOSwgMTAzMjQsIDEwMzI5LCAxMDMzNywgMTAzNDMsIDEwMzQ3LCAxMDM1MSwgMTAzNTgsIDEwMzYzLCAKLSAgICAxMDM3MSwgMTAzNzYsIDEwMzgwLCAxMDM4MywgMTAzODksIDEwMzk2LCAxMDQwMCwgMTA0MDMsIDEwNDA4LCAxMDQxMiwgCi0gICAgNDA0NSwgMTA0MTgsIDEwNDI3LCAzNiwgMTA0MzUsIDEwNDQxLCAxMDQ0NiwgODk2NywgMTA0NTEsIDEwNDU2LCAxMDQ2MCwgCi0gICAgMTA0NjMsIDEwNDc4LCAxMDQ5NywgMTA1MDksIDEwNTIyLCAxMDUzNSwgMTA1NDgsIDEwNTYyLCAxMDU3NSwgMTA1OTAsIAotICAgIDEwNTk3LCA5MTY4LCAxMDYwMywgMTA2MTcsIDEwNjIyLCAxMDYyOCwgMTA2MzMsIDEwNjQxLCAxMDY0NiwgODA0MCwgCi0gICAgMTA2NTEsIDEwNjU0LCAxMDY2MSwgMTA2NjYsIDEwNjcwLCAyODU4LCA5OTgsIDEwNjc2LCAxMDY4MCwgMTA2ODYsIDEwNjkyLCAKLSAgICAxMDY5NywgMTA3MDMsIDEwNzA4LCA5MTc3LCAxMDcxNCwgMTA3MjAsIDEwNzI1LCAxMDczMCwgMTA3MzgsIDEwNzQ0LCAKLSAgICAxMDc1NywgMTA3NjUsIDEwNzcyLCA5MTgzLCAxMDc3OCwgMTA3ODYsIDEwNzk0LCAxMDgwMSwgMTA4MTQsIDEwODI2LCAKLSAgICAxMDgzNiwgMTA4NDQsIDEwODUxLCAxMDg1OCwgMTA4NjcsIDEwODc2LCAxMDg4NCwgMTA4OTEsIDEwODk2LCAxMDkwMiwgCi0gICAgOTE4OCwgMTA5MDcsIDEwOTEzLCA5MTk0LCAxMDkxOCwgMTA5MjEsIDEwOTI4LCAxMDkzNCwgMTA5NDcsIDg2NjksIDEwOTU4LCAKLSAgICAxMDk2NCwgMTA5NzMsIDEwOTgxLCAxMDk4OCwgMTA5OTQsIDExMDAwLCAxMTAwNSwgMTEwMDksIDExMDE0LCAxMDQ3MCwgCi0gICAgMTEwMjAsIDkxOTksIDExMDI3LCAxMTAzMiwgMTEwMzksIDExMDQ1LCAxMTA1MSwgMTEwNTYsIDExMDY0LCAxMTA3MiwgCi0gICAgMTEwNzksIDExMDgzLCAxMTA5NywgMTExMDcsIDExMTEyLCAxMTExNiwgMTExMjcsIDExMTMzLCAxMTEzOCwgMTExNDMsIAotICAgIDkyMDQsIDkyMTAsIDExMTQ3LCAxMTE1MCwgMTExNTUsIDExMTY3LCAxMTE3NCwgMTExNzksIDExMTgzLCAxMTE4OCwgCi0gICAgMTExOTIsIDExMTk5LCAxMTIwNSwgOTIxNSwgOTEyMiwgMTEyMTIsIDI4NjMsIDgsIDExMjE5LCAxMTIyNCwgMTEyMjgsIAotICAgIDExMjM0LCAxMTI0MiwgMTEyNTIsIDExMjU3LCAxMTI2MiwgMTEyNjksIDExMjc2LCAxMTI4MCwgMTEyOTEsIDExMzAxLCAKLSAgICAxMTMxMCwgMTEzMjIsIDExMzI3LCAxMTMzMSwgMTEzMzksIDExMzUzLCAxMTM1NywgMTEzNjAsIDExMzY4LCAxMTM3NSwgCi0gICAgMTEzODMsIDExMzg3LCAxMTM5OCwgMTE0MDIsIDExNDA5LCAxMTQxNCwgMTE0MTgsIDExNDI0LCAxMTQyOSwgMTE0MzMsIAotICAgIDExNDM5LCAxMTQ0NCwgMTE0NTUsIDExNDU5LCAxMTQ2MiwgMTE0NjgsIDExNDczLCAxMTQ3OSwgMTE0ODUsIDExNDkyLCAKLSAgICAxMTUwMywgMTE1MTMsIDExNTIzLCAxMTUzMiwgMTE1MzksIDExNTQ4LCA5MjI1LCA5MjMyLCA5MjM4LCA5MjQzLCAxMTU1NCwgCi0gICAgMTE1NjAsIDkyNDcsIDExNTY2LCAxMTU2OSwgMTE1NzYsIDExNTgxLCAxMTU5NiwgMTE2MTIsIDExNjI3LCAxMTYzNSwgCi0gICAgMTE2NDEsIDExNjQ2LCA4MzgsIDQyMCwgMTE2NTEsIDExNjU5LCAxMTY2NiwgMTE2NzIsIDExNjc3LCAxMTY4MiwgOTI1MiwgCi0gICAgMTE2ODQsIDExNjg4LCAxMTY5MywgMTE2OTcsIDExNzA3LCAxMTcxMiwgMTE3MTYsIDExNzI1LCAxMTcyOSwgMTE3MzIsIAotICAgIDkyNjEsIDExNzM5LCAxMTc0MiwgMTE3NTAsIDExNzU3LCAxMTc2NSwgMTE3NjksIDExNzc2LCAxMTc4NSwgMTE3ODgsIAotICAgIDExNzkyLCAxMTc5NiwgMTE4MDIsIDExODA2LCAxMTgxMCwgMTE4MTQsIDExODIwLCAxMTgzMCwgMTE4MzQsIDExODQyLCAKLSAgICAxMTg0NiwgMTE4NTMsIDExODU3LCAxMTg2MiwgMTE4NjYsIDExODczLCAxMTg3OSwgMTE4ODcsIDExODkzLCAxMTg5OCwgCi0gICAgMTE5MDgsIDExOTEzLCAxMTkxOCwgMTE5MjIsIDExOTMwLCAzOTA1LCAxMTkzOCwgMTE5NDMsIDkyNjYsIDExOTQ3LCAKLSAgICAxMTk1MSwgMTE5NTQsIDExOTYyLCAxMTk2OSwgMTE5NzMsIDU5OTEsIDExOTc3LCAxMTk4MiwgMTE5ODYsIDExOTk3LCAKLSAgICAxMjAwNywgMTIwMTIsIDEyMDE4LCAxMjAyMiwgMTIwMjUsIDEyMDMzLCAxMjAzOCwgMTIwNDMsIDEyMDUwLCAxMjA1NSwgCi0gICAgOTI3MSwgMTIwNjAsIDEyMDY0LCAxMjA3MSwgMTcyMiwgNjE0NSwgMTIwNzYsIDEyMDgxLCAxMjA4NiwgMTIwOTEsIDEyMDk3LCAKLSAgICAxMjEwMiwgMTIxMDgsIDEyMTEzLCAxMjExOCwgMTIxMjMsIDEyMTI4LCAxMjEzMywgMTIxMzgsIDEyMTQzLCAxMjE0OCwgCi0gICAgMTIxNTMsIDEyMTU4LCAxMjE2MywgMTIxNjgsIDEyMTczLCAxMjE3OCwgMTIxODMsIDEyMTg4LCAxMjE5NCwgMTIxOTksIAotICAgIDEyMjA0LCAxMjIwOSwgMTIyMTQsIDEyMjE5LCAxMjIyNSwgMTIyMzAsIDEyMjM1LCAxMjI0MSwgMTIyNDYsIDEyMjUyLCAKLSAgICAxMjI1NywgMTIyNjMsIDEyMjY4LCAxMjI3MywgMTIyNzgsIDEyMjgzLCAxMjI4OSwgMTIyOTQsIDEyMjk5LCAxMjMwNCwgCi0gICAgNzM3LCAxMzksIDEyMzEyLCAxMjMxNiwgMTIzMjEsIDEyMzI2LCAxMjMzMCwgMTIzMzQsIDEyMzM4LCAxMjM0MywgMTIzNDcsIAotICAgIDEyMzUyLCAxMjM1NiwgMTIzNTksIDEyMzYzLCAxMjM2NywgMTIzNzMsIDEyMzc4LCAxMjM4OCwgMTIzOTQsIDEyNDAyLCAKLSAgICAxMjQwNiwgMTI0MTAsIDEyNDE3LCAxMjQyNSwgMTI0MzQsIDEyNDQ1LCAxMjQ1MiwgMTI0NTksIDEyNDYzLCAxMjQ3MiwgCi0gICAgMTI0ODEsIDEyNDg5LCAxMjQ5OCwgMTI1MDcsIDEyNTE2LCAxMjUyNSwgMTI1MzUsIDEyNTQ1LCAxMjU1NSwgMTI1NjUsIAotICAgIDEyNTc1LCAxMjU4NCwgMTI1OTQsIDEyNjA0LCAxMjYxNCwgMTI2MjQsIDEyNjM0LCAxMjY0NCwgMTI2NTQsIDEyNjYzLCAKLSAgICAxMjY3MywgMTI2ODMsIDEyNjkzLCAxMjcwMywgMTI3MTMsIDEyNzIzLCAxMjczMiwgMTI3NDIsIDEyNzUyLCAxMjc2MiwgCi0gICAgMTI3NzIsIDEyNzgyLCAxMjc5MiwgMTI4MDIsIDEyODEyLCAxMjgyMiwgMTI4MzEsIDEyODQxLCAxMjg1MSwgMTI4NjEsIAotICAgIDEyODcxLCAxMjg4MSwgMTI4OTEsIDEyOTAxLCAxMjkxMSwgMTI5MjEsIDEyOTMxLCAxMjk0MCwgMTI1NiwgMTI5NDYsIAotICAgIDEyOTQ5LCAxMjk1MywgMTI5NTgsIDEyOTY1LCAxMjk3MSwgMTI5NzYsIDEyOTgwLCAxMjk4NSwgMTI5OTQsIDEzMDAyLCAKLSAgICAxMzAwNywgMTMwMTEsIDEzMDE1LCAxMzAyMSwgMTMwMjYsIDEzMDMyLCA5MjgwLCAxMzAzNywgMTMwNDIsIDEzMDUxLCAKLSAgICA5Mjg1LCAxMzA1NiwgMTMwNTksIDEzMDY1LCAxMzA3MywgOTI5MCwgMTMwODAsIDEzMDg0LCAxMzA4OCwgMTMwOTIsIAotICAgIDEzMTAyLCAxMzEwOCwgMTMxMTQsIDEzMTE5LCAxMzEyOCwgMTMxMzYsIDEzMTQzLCAxMzE1MCwgMTMxNTUsIDEzMTYyLCAKLSAgICAxMzE2NywgMTMxNzEsIDEzMTc0LCAxMzE4NSwgMTMxOTUsIDEzMjA0LCAxMzIxMiwgMTMyMjMsIDEzMjM1LCAxMzI0NSwgCi0gICAgMTMyNTAsIDEzMjU0LCAxMzI1OSwgMTMyNjQsIDEzMjY4LCAxMzI3NCwgMTMyODIsIDEzMjg5LCAxMzMwMCwgMTMzMDUsIAotICAgIDEzMzE1LCAxMzMxOSwgMTMzMjIsIDEzMzI5LCAxMzMzOSwgMTMzNDgsIDEzMzU1LCAxMzM1OSwgMTMzNjYsIDEzMzcyLCAKLSAgICAxMzM3NywgMTMzODIsIDEzMzg2LCAxMzM5NSwgMTM0MDAsIDEzNDA2LCAxMzQxMCwgMTM0MTUsIDEzNDE5LCAxMzQyOCwgCi0gICAgMTM0MzYsIDEzNDQ0LCAxMzQ1MSwgMTM0NTksIDEzNDcxLCAxMzQ4MiwgMTM0OTIsIDEzNDk5LCAxMzUwNSwgMTM1MTQsIAotICAgIDEzNTI1LCAxMzUzNCwgMTM1NDYsIDEzNTU4LCAxMzU3MCwgMTM1ODAsIDEzNTg5LCAxMzU5OCwgMTM2MDYsIDEzNjEzLCAKLSAgICAxMzYyMiwgMTM2MzAsIDEzNjM0LCAxMzY0MCwgMTM2NDYsIDEzNjUxLCA3NzUzLCAxMzY1NSwgMTM2NTcsIDEzNjYxLCAKLSAgICAxMzY2NiwgMTM2NzIsIDEzNjgxLCAxMzY4NSwgMTM2OTMsIDEzNzAwLCAxMzcwOSwgMTM3MTgsIDEzNzI3LCAxMzczNiwgCi0gICAgMTM3NDUsIDEzNzU0LCAxMzc2MywgMTM3NzIsIDEzNzgyLCAxMzc5MiwgMTM4MDEsIDEzODA3LCAxMzgxNCwgMTM4MjEsIAotICAgIDEzODI3LCAxMzg0MSwgMTM4NDgsIDEzODU2LCAxMzg2NSwgMTM4NzEsIDEzODgwLCAxMzg4OSwgMTM5MDAsIDEzOTEwLCAKLSAgICAxMzkxOCwgMTM5MjUsIDEzOTMzLCAxMzk0MiwgMTM5NTUsIDEzOTYzLCAxMzk3MCwgMTM5ODMsIDEzOTg5LCAxMzk5NSwgCi0gICAgMTQwMDUsIDE0MDE0LCAxNDAyMywgMTQwMjgsIDE0MDMyLCAxNDAzOCwgMTQwNDQsIDE0MDUxLCA4OTY2LCAxNDA1NiwgCi0gICAgMTQwNjEsIDE0MDY4LCAxNDA3MywgMTIzNjksIDE0MDc4LCAxNDA4NiwgMTQwOTIsIDE0MDk3LCAxNDEwNSwgMTQxMTMsIAotICAgIDE0MTIwLCAxNDEyOCwgMTQxMzQsIDE0MTQyLCAxNDE1MCwgMTQxNTYsIDE0MTYxLCAxNDE2NywgMTQxNzQsIDE0MTgwLCAKLSAgICAxNDE4NSwgMTQxODksIDE0MjAwLCAxNDIwOCwgMTQyMTQsIDE0MjE5LCAxNDIyOCwgMTQyMzQsIDE0MjM5LCAxNDI0OCwgCi0gICAgMTQyNjIsIDM4NTMsIDE0MjY2LCAxNDI3MSwgMTQyNzYsIDE0MjgyLCAxNDI4NywgMTQyOTIsIDE0Mjk2LCAxNDMwMSwgCi0gICAgMTQzMDYsIDE0MzExLCA3NzUyLCAxNDMxNiwgMTQzMjEsIDE0MzI2LCAxNDMzMSwgMTQzMzYsIDE0MzQwLCAxNDM0NSwgCi0gICAgMTQzNTAsIDE0MzU1LCAxNDM2MCwgMTQzNjYsIDE0MzcyLCAxNDM3NywgMTQzODEsIDE0Mzg2LCAxNDM5MSwgMTQzOTYsIAotICAgIDkyOTQsIDE0NDAxLCAxNDQwNiwgMTQ0MTEsIDE0NDE2LCAxNDQyMSwgMTQ0MzgsIDE0NDU2LCAxNDQ2OCwgMTQ0ODEsIAotICAgIDE0NDk4LCAxNDUxNCwgMTQ1MzEsIDE0NTQxLCAxNDU2MCwgMTQ1NzEsIDE0NTgyLCAxNDU5MywgMTQ2MDQsIDE0NjE2LCAKLSAgICAxNDYyNywgMTQ2MzgsIDE0NjU1LCAxNDY2NiwgMTQ2NzcsIDE0NjgyLCA5Mjk5LCAxNDY4NywgMTQ2OTEsIDIzODEsIAotICAgIDE0Njk1LCAxNDY5OCwgMTQ3MDQsIDE0NzEyLCAxNDcyMCwgMTQ3MjUsIDE0NzMzLCAxNDc0MSwgMTQ3NDgsIDE0NzUzLCAKLSAgICAxNDc1OSwgMTQ3NjYsIDE0Nzc0LCAxNDc4MSwgMTQ3OTMsIDE0ODAxLCAxNDgwNiwgMTE1OTAsIDE0ODEyLCAxNDgyMSwgCi0gICAgMTQ4MzAsIDE0ODM4LCAxNDg0NSwgMTQ4NTEsIDE0ODU5LCAxNDg2NiwgMTQ4NzIsIDE0ODc5LCAxNDg4NSwgMTQ4OTQsIAotICAgIDE0OTAyLCAxNDkxMiwgMTQ5MTksIDE0OTI1LCAxNDkzMywgMTQ5MzksIDE0OTQ3LCAxNDk1NCwgMTQ5NjcsIDE0OTc0LCAKLSAgICAxNDk4MywgMTQ5OTIsIDE1MDAxLCAxNTAwOSwgMTUwMTksIDE1MDI2LCAxNTAzMSwgMzU2MCwgMTUwMzgsIDE1MDQzLCAKLSAgICAxMzcyLCAxNTA0NywgMTQzMTcsIDE1MDUxLCAxNTA1NywgMTUwNjEsIDE1MDY5LCAxNTA4MSwgMTUwODYsIDE1MDkzLCAKLSAgICAxNTA5OSwgMTUxMDQsIDE1MTExLCAxNDMyMiwgMTUxMTUsIDE1MTE5LCAxNTEyMywgMTQzMjcsIDE1MTI3LCAxNDMzMiwgCi0gICAgMTUxMzEsIDE1MTM4LCAxNTE0MywgMTUxNDcsIDE1MTU0LCAxNTE1OCwgMTUxNjYsIDE1MTczLCAxNTE3NywgMTUxODQsIAotICAgIDE1MjAxLCAxNTIxMCwgMTUyMTQsIDE1MjE3LCAxNTIyNSwgMTUyMzEsIDE1MjM2LCAzNjM4LCAxNTI0MCwgMTUyNDIsIAotICAgIDE1MjUwLCAxNTI1NywgMTUyNjcsIDE1Mjc5LCAxNTI4NCwgMTUyOTAsIDE1Mjk1LCAxNTI5OSwgMTUzMDUsIDE1MzEwLCAKLSAgICAxNTMxNiwgMTUzMTksIDE1MzI2LCAxNTMzNCwgMTUzNDEsIDE1MzQ3LCAxNTM1MywgMTUzNTgsIDE1MzY1LCAxNTM3MSwgCi0gICAgMTUzNzYsIDE1MzgzLCAxNTM4NywgMTUzOTMsIDE1Mzk3LCAxNTQwNCwgMTU0MTAsIDE1NDE2LCAxNTQyNCwgMTU0MzAsIAotICAgIDE1NDM1LCAxNTQ0MSwgMTU0NDksIDE1NDU3LCAxNTQ2MywgMTU0NjksIDE1NDc0LCAxNTQ4MSwgMTU0ODYsIDE1NDkwLCAKLSAgICAxNTQ5NiwgMTU1MDEsIDE1NTA4LCAxNTUxMywgMTU1MTksIDE1NTIyLCAxNTUyOCwgMTU1MzQsIDE1NTM3LCAxNTU0MSwgCi0gICAgMTU1NTMsIDE1NTU5LCAxNTU2NCwgMTU1NzEsIDE1NTc3LCAxNTU4MywgMTU1OTQsIDE1NjA0LCAxNTYxMywgMTU2MjEsIAotICAgIDE1NjI4LCAxNTYzOSwgMTU2NDksIDE1NjU5LCAxNTY2NywgMTU2NzAsIDE0MzQ2LCAxNTY3NSwgMTU2ODAsIDE0MzUxLCAKLSAgICAxNDQ4NiwgMTU2ODgsIDE1NzAxLCAxNTcxNiwgMTU3MjcsIDE0NTAzLCAxNTc0NSwgMTU3NTgsIDE1NzcxLCAxNTc4MiwgCi0gICAgMTA0ODUsIDE1NzkzLCAxNTgwNiwgMTU4MjUsIDE1ODM2LCAxNTg0NywgMTU4NTgsIDI2NDksIDE1ODcxLCAxNTg3NSwgCi0gICAgMTU4ODMsIDE1ODk4LCAxNTkxMywgMTU5MjQsIDE1OTMxLCAxNTkzNywgMTU5NDUsIDE1OTQ5LCAxNTk1NSwgMTU5NTgsIAotICAgIDE1OTY4LCAxNTk3NiwgMTU5ODMsIDE1OTkxLCAxNjAwMSwgMTYwMDYsIDE2MDEzLCAxNjAxOCwgMTYwMjUsIDE2MDM2LCAKLSAgICAxNjA0NiwgMTYwNTIsIDE2MDU3LCAxNjA2MiwgMTQzNTYsIDE2MDY2LCAxNjA3MiwgMTYwNzgsIDE2MDgzLCAxNjA4OCwgCi0gICAgMTYwOTMsIDE2MDk3LCAxNDM2MSwgMTQzNjcsIDE2MTAxLCAxNDM3MywgMTYxMDYsIDE2MTE0LCAxNjEyMywgMTYxMzAsIAotICAgIDkxNDMsIDE2MTM0LCAxNjEzNiwgMTYxNDEsIDE2MTQ2LCAxNjE1MiwgMTYxNTcsIDE2MTYyLCAxNjE2NywgMTYxNzIsIAotICAgIDE2MTc2LCAxNjE4MiwgMTYxODgsIDE2MTkzLCAxNjE5OSwgMTYyMDQsIDE2MjA5LCAxNjIxNSwgMTYyMjAsIDE2MjI1LCAKLSAgICAxNjIzMCwgMTYyMzUsIDE2MjQxLCAxNjI0NiwgMTYyNTEsIDE2MjU3LCAxNjI2MywgMTYyNjgsIDE2MjczLCAxNjI4MCwgCi0gICAgMTYyODYsIDE2Mjk3LCAxNjMwNCwgMTYzMDksIDE2MzEzLCAxNjMxNywgMTYzMjAsIDE2MzI4LCAxNjMzMywgMTYzNDAsIAotICAgIDE2MzQ3LCAxNjM1MywgMTYzNTgsIDE2MzYzLCAxNjM3MCwgMTYzODAsIDE2Mzg1LCAxNjM5MiwgMTYzOTgsIDE2NDA4LCAKLSAgICAxNjQxOCwgMTY0MzIsIDE2NDQ2LCAxNjQ2MCwgMTY0NzQsIDE2NDg5LCAxNjUwNCwgMTY1MjEsIDE2NTM5LCAxNjU1MiwgCi0gICAgMTY1NTgsIDE2NTYzLCAxNjU2OCwgMTY1NzIsIDE2NTc3LCAxNjU4NSwgMTY1OTEsIDE2NTk2LCAxNjYwMSwgMTY2MDUsIAotICAgIDE2NjEwLCAxNjYxNCwgMTY2MTksIDE2NjIzLCAxNjYzNCwgMTY2NDAsIDE2NjQ1LCAxNjY1MCwgMTY2NTcsIDE2NjYyLCAKLSAgICAxNjY2NiwgMTY2NzEsIDE2Njc2LCAxNjY4MiwgMTY2ODksIDE2Njk1LCAxNjcwMCwgMTY3MDQsIDE2NzEwLCAxNjcxNSwgCi0gICAgMTY3MjAsIDE2NzI0LCAxNjczMCwgMTY3MzUsIDE2NzQwLCAxNjc0NywgMTY3NTIsIDEzMTA0LCAxNjc1NiwgMTY3NjEsIAotICAgIDE2NzY1LCAxNjc3MCwgMTY3NzYsIDE2NzgyLCAxNjc4OSwgMTY3OTksIDE2ODA3LCAxNjgxNCwgMTY4MTksIDE2ODIzLCAKLSAgICAxNjgzMiwgMTY4NDAsIDE2ODQ3LCAxNjg1NCwgMTY4NjAsIDE2ODY2LCAxNjg3MSwgMTY4NzYsIDE2ODgyLCAxNjg4NywgCi0gICAgMTY4OTMsIDE2ODk4LCAxNjkwNCwgMTY5MTAsIDE2OTE3LCAxNjkyMywgMTY5MjgsIDE2OTMzLCA5MzQxLCAxNjk0MiwgCi0gICAgMTY5NDUsIDE2OTUxLCAxNjk1NiwgMTY5NjEsIDE2OTcxLCAxNjk3OCwgMTY5ODQsIDE2OTg5LCAxNjk5NCwgMTcwMDAsIAotICAgIDE3MDA1LCAxNzAxMSwgMTcwMTYsIDE3MDIyLCAxNzAyOCwgMTcwMzMsIDE3MDQxLCAxNzA0OCwgMTcwNTMsIDE3MDU4LCAKLSAgICAxNzA2NCwgMTcwNjksIDE3MDczLCAxNzA4MiwgMTcwOTMsIDE3MTAwLCAxNzEwNSwgMTcxMTMsIDE3MTE5LCAxNzEyNiwgCi0gICAgMTcxMzIsIDE3MTM3LCAxNzE0MSwgMTcxNDcsIDE3MTUyLCAxNzE1NywgMTcxNjIsIDE0NDAsIDc3NzcsIDI4NzcsIDE3MTY2LCAKLSAgICAxNzE3MCwgMTcxNzQsIDE3MTc4LCAxNzE4MiwgMTcxODYsIDE3MTg5LCAxNzE5NiwgMTcyMDQsIDE0Mzg3LCAxNzIxMSwgCi0gICAgMTcyMjEsIDE3MjI5LCAxNzIzNiwgMTcyNDQsIDE3MjU0LCAxNzI2MywgMTcyNzYsIDE3MjgxLCAxNzI4NiwgMTcyOTQsIAotICAgIDE3MzAxLCAxMzIwMCwgMTMyMDksIDE3MzA4LCAxNzMxOCwgMTczMzMsIDE3MzM5LCAxNzM0NiwgMTczNTMsIDE3MzU5LCAKLSAgICAxNzM2NywgMTczNzcsIDE3Mzg3LCAxNDM5MiwgMTczOTYsIDE3NDAyLCAxNzQwOCwgMTc0MTYsIDE3NDI0LCAxNzQyOSwgCi0gICAgMTc0MzgsIDE3NDQ2LCAxNzQ1OCwgMTc0NjgsIDE3NDc4LCAxNzQ4OCwgMTc0OTcsIDE3NTA5LCAxNzUxOSwgMTc1MjksIAotICAgIDE3NTQwLCAxNzU0NSwgMTc1NTcsIDE3NTY5LCAxNzU4MSwgMTc1OTMsIDE3NjA1LCAxNzYxNywgMTc2MjksIDE3NjQxLCAKLSAgICAxNzY1MywgMTc2NjUsIDE3Njc2LCAxNzY4OCwgMTc3MDAsIDE3NzEyLCAxNzcyNCwgMTc3MzYsIDE3NzQ4LCAxNzc2MCwgCi0gICAgMTc3NzIsIDE3Nzg0LCAxNzc5NiwgMTc4MDcsIDE3ODE5LCAxNzgzMSwgMTc4NDMsIDE3ODU1LCAxNzg2NywgMTc4NzksIAotICAgIDE3ODkxLCAxNzkwMywgMTc5MTUsIDE3OTI3LCAxNzkzOCwgMTc5NTAsIDE3OTYyLCAxNzk3NCwgMTc5ODYsIDE3OTk4LCAKLSAgICAxODAxMCwgMTgwMjIsIDE4MDM0LCAxODA0NiwgMTgwNTgsIDE4MDY5LCAxODA4MSwgMTgwOTMsIDE4MTA1LCAxODExNywgCi0gICAgMTgxMjksIDE4MTQxLCAxODE1MywgMTgxNjUsIDE4MTc3LCAxODE4OSwgMTgyMDAsIDE4MjEyLCAxODIyNCwgMTgyMzYsIAotICAgIDE4MjQ4LCAxODI2MCwgMTgyNzIsIDE4Mjg0LCAxODI5NiwgMTgzMDgsIDE4MzIwLCAxODMzMSwgMTgzNDMsIDE4MzU1LCAKLSAgICAxODM2NywgMTgzNzksIDE4MzkxLCAxODQwMywgMTg0MTUsIDE4NDI3LCAxODQzOSwgMTg0NTEsIDE4NDYyLCAxODQ3NCwgCi0gICAgMTg0ODYsIDE4NDk4LCAxODUxMCwgMTg1MjMsIDE4NTM2LCAxODU0OSwgMTg1NjIsIDE4NTc1LCAxODU4OCwgMTg2MDEsIAotICAgIDE4NjEzLCAxODYyNiwgMTg2MzksIDE4NjUyLCAxODY2NSwgMTg2NzgsIDE4NjkxLCAxODcwNCwgMTg3MTcsIDE4NzMwLCAKLSAgICAxODc0MywgMTg3NTUsIDE4NzY4LCAxODc4MSwgMTg3OTQsIDE4ODA3LCAxODgyMCwgMTg4MzMsIDE4ODQ2LCAxODg1OSwgCi0gICAgMTg4NzIsIDE4ODg1LCAxODg5NywgMTg5MTAsIDE4OTIzLCAxODkzNiwgMTg5NDksIDE4OTYyLCAxODk3NSwgMTg5ODgsIAotICAgIDE5MDAxLCAxOTAxNCwgMTkwMjcsIDE5MDM5LCAxOTA1MiwgMTkwNjUsIDE5MDc4LCAxOTA5MSwgMTkxMDQsIDE5MTE3LCAKLSAgICAxOTEzMCwgMTkxNDMsIDE5MTU2LCAxOTE2OSwgMTkxODEsIDE5MTk0LCAxOTIwNywgMTkyMjAsIDE5MjMzLCAxOTI0NiwgCi0gICAgMTkyNTksIDE5MjcyLCAxOTI4NSwgMTkyOTgsIDE5MzExLCAxOTMyMywgMTkzMzQsIDE5MzQ3LCAxOTM2MCwgMTkzNzMsIAotICAgIDE5Mzg2LCAxOTM5OSwgMTk0MTIsIDE5NDI1LCAxOTQzOCwgMTk0NTEsIDE5NDY0LCAxOTQ3NiwgMTk0ODksIDE5NTAyLCAKLSAgICAxOTUxNSwgMTk1MjgsIDE5NTQxLCAxOTU1NCwgMTk1NjcsIDE5NTgwLCAxOTU5MywgMTk2MDYsIDE5NjE4LCAxOTYzMSwgCi0gICAgMTk2NDQsIDE5NjU3LCAxOTY3MCwgMTk2ODMsIDE5Njk2LCAxOTcwOSwgMTk3MjIsIDE5NzM1LCAxOTc0OCwgMTk3NjAsIAotICAgIDE5NzczLCAxOTc4NiwgMTk3OTksIDE5ODEyLCAxOTgyNSwgMTk4MzgsIDE5ODUxLCAxOTg2NCwgMTk4NzcsIDE5ODkwLCAKLSAgICAxOTkwMiwgMTk5MTUsIDE5OTI4LCAxOTk0MSwgMTk5NTQsIDE5OTY3LCAxOTk4MCwgMTk5OTMsIDIwMDA2LCAyMDAxOSwgCi0gICAgMjAwMzIsIDIwMDQ0LCAyMDA1NywgMjAwNzAsIDIwMDgzLCAyMDA5NiwgMjAxMDksIDIwMTIyLCAyMDEzNSwgMjAxNDgsIAotICAgIDIwMTYxLCAyMDE3NCwgMjAxODYsIDIwMTk5LCAyMDIxMiwgMjAyMjUsIDIwMjM4LCAyMDI1MSwgMjAyNjQsIDIwMjc3LCAKLSAgICAyMDI5MCwgMjAzMDMsIDIwMzE2LCAyMDMyOCwgMjAzNDEsIDIwMzU0LCAyMDM2NywgMjAzODAsIDIwMzkzLCAyMDQwNiwgCi0gICAgMjA0MTksIDIwNDMyLCAyMDQ0NSwgMjA0NTgsIDIwNDcwLCAyMDQ4MywgMjA0OTYsIDIwNTA5LCAyMDUyMiwgMjA1MzUsIAotICAgIDIwNTQ4LCAyMDU2MSwgMjA1NzQsIDIwNTg3LCAyMDYwMCwgMjA2MTIsIDIwNjI1LCAyMDYzOCwgMjA2NTEsIDIwNjY0LCAKLSAgICAyMDY3NywgMjA2OTAsIDIwNzAzLCAyMDcxNiwgMjA3MjksIDIwNzQyLCAyMDc1NCwgMjA3NjUsIDIwNzczLCAyMDc4MSwgCi0gICAgMjA3ODgsIDIwNzk0LCAyMDc5OCwgMjA4MDQsIDIwODEwLCAyMDgxOCwgMjA4MjQsIDIwODI5LCAyMDgzMywgMjA4NDIsIAotICAgIDkxNDgsIDIwODUzLCAyMDg2MCwgMjA4NjgsIDIwODc1LCAyMDg4MiwgMTA5NDEsIDIwODg5LCAyMDg5OCwgMjA5MDMsIAotICAgIDIwOTA4LCA3ODA1LCAyMDkxNSwgMjA5MjAsIDIwOTIzLCAyMDkyOCwgMjA5MzYsIDIwOTQzLCAyMDk1MCwgMjA5NTcsIAotICAgIDIwOTYzLCAyMDk3MiwgMjA5ODEsIDIwOTg3LCAyMDk5NiwgMjEwMDAsIDIxMDA2LCAyMTAxMSwgMjEwMjEsIDIxMDI4LCAKLSAgICAyMTAzNCwgMjEwNDIsIDIxMDQ4LCAyMTA1NSwgMjEwNjUsIDIxMDc0LCAyMTA3OCwgMjEwODUsIDIxMDg5LCAyMTA5NCwgCi0gICAgMjExMDAsIDIxMTA4LCAyMTExMiwgMjExMjIsIDE0NDAyLCAyMTEzMSwgMjExMzcsIDIxMTQxLCAyMTE1MCwgMTQ0MDcsIAotICAgIDIxMTU2LCAyMTE2MywgMjExNzQsIDIxMTgyLCAyMTE5MSwgMjExOTksIDg5MzEsIDIxMjA3LCAyMTIxMiwgMjEyMTgsIAotICAgIDIxMjIzLCAyMTIyNywgMjEyMzEsIDIxMjM1LCA5NjMyLCAyMTI0MCwgMjEyNDgsIDIxMjU1LCAyMTI2NCwgMjEyNzEsIAotICAgIDIxMjc4LCAxMDg3MSwgMjEyODUsIDIxMjkxLCAyMTI5NSwgMjEzMDEsIDIxMzA4LCAyMTMxNCwgMjEzMjIsIDIxMzI4LCAKLSAgICAyMTMzNSwgMjEzNDEsIDIxMzQ3LCAyMTM1NiwgMjEzNjAsIDIxMzY4LCAyMTM3NywgMjEzODQsIDIxMzg5LCAyMTM5MywgCi0gICAgMjE0MDQsIDIxNDA5LCAyMTQxNCwgMjE0MTksIDIxNDMyLCA3OTk1LCAyMTQzNiwgMjE0NDIsIDIxNDUwLCAyMTQ1NCwgCi0gICAgMjE0NjEsIDIxNDcwLCAyMTQ3NSwgMTQ2NzgsIDIxNDgzLCAyMTQ4NywgMjE0OTksIDIxNTA0LCAyMTUwOCwgMjE1MTEsIAotICAgIDIxNTE3LCAyMTUyMywgMjE1MjgsIDIxNTMyLCAyMTUzNSwgMjE1NDYsIDIxNTUxLCA5Mzc2LCAyMTU1OCwgMjE1NjMsIAotICAgIDkzODEsIDIxNTY4LCAyMTU3MywgMjE1NzgsIDIxNTgzLCAyMTU4OCwgMjE1OTMsIDIxNTk4LCAyMTYwMywgMjE2MDgsIAotICAgIDIxNjEzLCAyMTYxOCwgMjE2MjMsIDIxNjI5LCAyMTYzNCwgMjE2MzksIDIxNjQ0LCAyMTY0OSwgMjE2NTQsIDIxNjU5LCAKLSAgICAyMTY2NCwgMjE2NjksIDIxNjc0LCAyMTY4MCwgMjE2ODYsIDIxNjkxLCAyMTY5NiwgMjE3MDEsIDIxNzA2LCAyMTcxMSwgCi0gICAgMjE3MTYsIDIxNzIxLCAyMTcyNiwgMjE3MzEsIDIxNzM3LCAyMTc0MiwgMjE3NDcsIDIxNzUyLCAyMTc1OCwgMjE3NjQsIAotICAgIDIxNzY5LCAyMTc3NCwgMjE3NzksIDIxNzg0LCAyMTc4OSwgMjE3OTQsIDIxNzk5LCAyMTgwNCwgMjE4MTAsIDIxODE1LCAKLSAgICAyMTgyMCwgMjE4MjUsIDIxODMwLCAyMTgzNiwgMjE4NDEsIDIxODQ2LCAyMTg1MCwgMTM2OCwgMTI5LCAyMTg1OCwgMjE4NjIsIAotICAgIDIxODY2LCAyMTg3MCwgMjE4NzUsIDIxODc5LCAxMzExMCwgMTI0NjksIDIxODgzLCAyMTg4OCwgMjE4OTIsIDIxODk3LCAKLSAgICAyMTkwMSwgMjE5MDYsIDIxOTEwLCAyMTkxNiwgMjE5MjEsIDIxOTI1LCAyMTkyOSwgMjE5MzcsIDIxOTQxLCAyMTk0NSwgCi0gICAgMjE5NTAsIDIxOTU1LCAyMTk1OSwgMjE5NjUsIDIxOTcwLCAyMTk3NCwgMjE5NzksIDIxOTg0LCAyMTk4OCwgMjE5OTUsIAotICAgIDIyMDAyLCAyMjAwOSwgMjIwMTMsIDIyMDE3LCAyMjAyMiwgMjIwMjYsIDIyMDI5LCAyMjAzNSwgMjIwNDgsIDIyMDUzLCAKLSAgICAyMjA2MiwgMjIwNjcsIDk0MjEsIDIyMDcyLCAyMjA3NSwgMjcxMiwgMjcxNywgMjIwNzksIDIyMDg1LCAyMjA5MSwgNzIwOSwgCi0gICAgMjIwOTYsIDIyMTAxLCAyMjEwNiwgMjIxMTIsIDIyMTE3LCAxMzg5NiwgMjIxMjIsIDIyMTI3LCAyMjEzMiwgMjIxMzcsIAotICAgIDIyMTQzLCAyMjE0OCwgMjIxNTMsIDIyMTU5LCAyMjE2NCwgMjIxNjgsIDIyMTczLCAyMjE3OCwgMjIxODMsIDIyMTg4LCAKLSAgICAyMjE5MiwgMjIxOTcsIDIyMjAxLCAyMjIwNiwgMjIyMTEsIDIyMjE2LCAyMjIyMSwgMjIyMjUsIDIyMjMwLCAyMjIzNCwgCi0gICAgMjIyMzksIDIyMjQ0LCAyMjI0OSwgMjIyNTQsIDI4ODYsIDIyMTY5LCAyMjI1OCwgMjIyNjYsIDIyMjczLCA5NzI2LCAKLSAgICAyMjI4NSwgMjIyOTMsIDIyMTc0LCAyMjMwMCwgMjIzMDUsIDIyMzEzLCAyMjE3OSwgMjIzMTgsIDIyMzIzLCAyMjMzMSwgCi0gICAgMjIzMzYsIDIyMTg0LCAyMjM0MSwgMjIzNDYsIDIyMzUwLCAyMjM1NiwgMjIzNjQsIDIyMzY3LCAyMjM3NCwgMjIzNzgsIAotICAgIDIyMzgyLCAyMjM4OCwgMjIzOTUsIDIyNDAwLCA4OTU4LCAxNzI3LCAxNzMyLCAyMjQwNCwgMjI0MTAsIDIyNDE2LCAyMjQyMSwgCi0gICAgMjI0MjUsIDIyNDI5LCAyMjQzMywgMjI0MzcsIDIyNDQxLCAyMjQ0NSwgMjI0NDksIDIyNDUyLCAyMjQ1OCwgMjI0NjUsIAotICAgIDIyNDczLCAyMjQ3OSwgMjI0ODUsIDIyNDkwLCAyMjQ5NSwgMjI0OTksIDEzODE2LCAxMzgyMywgMjI1MDQsIDIyNTE2LCAKLSAgICAyMjUxOSwgMjI1MjYsIDE2MzQ5LCAyMjUzMywgMjI1NDEsIDIyNTUyLCAyMjU2MSwgMjI1NzQsIDIyNTg0LCAyMjU5OCwgCi0gICAgMjI2MTAsIDIyNjI0LCAyMjYzNiwgMjI2NDYsIDIyNjU4LCAyMjY2NCwgMjI2NzksIDIyNzAzLCAyMjcyMSwgMjI3NDAsIAotICAgIDIyNzUzLCAyMjc2NywgMjI3ODUsIDIyODAxLCAyMjgxOCwgMjI4MzYsIDIyODQ3LCAyMjg2NiwgMjI4ODMsIDIyOTAzLCAKLSAgICAyMjkyMSwgMjI5MzMsIDIyOTQ3LCAyMjk2MSwgMjI5NzMsIDIyOTkwLCAyMzAwOSwgMjMwMjcsIDIzMDM5LCAyMzA1NywgCi0gICAgMjMwNzYsIDE0NTQ2LCAyMzA4OSwgMjMxMDksIDIzMTIxLCAxMDUxNiwgMjMxMzMsIDIzMTM4LCAyMzE0MywgMjMxNDgsIAotICAgIDIzMTU0LCAyMzE1OSwgMjMxNjMsIDIzMTcwLCAyMzk4LCAyMzE3NCwgMjMxODAsIDIzMTg0LCAyMzE4NywgMjMxOTEsIAotICAgIDIzMTk5LCAyMzIwNSwgMjIyMDIsIDIzMjA5LCAyMzIxOCwgMjMyMjksIDIzMjM1LCAyMzI0MSwgMjMyNTAsIDIzMjU4LCAKLSAgICAyMzI2NSwgMjMyNzAsIDIzMjc0LCAyMzI4MSwgMjMyODcsIDIzMjk2LCAyMzMwNCwgMjMzMTEsIDIzMzIxLCAyMzMzMCwgCi0gICAgMjMzNDAsIDIzMzQ1LCAyMzM1NCwgMjMzNjMsIDIzMzc0LCAyMzM4NSwgMzk2MywgMjMzOTUsIDIzMzk5LCAyMzQwOSwgCi0gICAgMjM0MTcsIDIzNDI3LCAyMzQzOCwgMjM0NDMsIDIzNDUzLCAyMzQ2MSwgMjM0NjgsIDIzNDc0LCAyMzQ4MSwgMjM0ODYsIAotICAgIDIyMjEyLCAyMzQ5MCwgMjM0OTksIDIzNTAzLCAyMzUwNiwgMjM1MTEsIDIzNTE4LCAyMzUyNywgMjM1MzUsIDIzNTQzLCAKLSAgICAyMzU1MywgMjM1NjIsIDIzNTY4LCAyMzU3NCwgMjIyMTcsIDIyMjIyLCAyMzU3OCwgMjM1ODgsIDIzNTk4LCAyMzYwOCwgCi0gICAgMjM2MTYsIDIzNjIzLCAyMzYzMywgMjM2NDEsIDIzNjQ5LCAyMzY1NSwgMjM2NjMsIDkzMCwgMjM2NzIsIDE0NzM3LCA1NDIsIAotICAgIDIzNjg2LCAyMzY5NSwgMjM3MDMsIDIzNzE0LCAyMzcyNSwgMjM3MzUsIDIzNzQ0LCAyMzc1NiwgMjM3NjUsIDIzNzc0LCAKLSAgICAyMzc4MCwgMjM3ODksIDIzNzk4LCAyMzgwOCwgMjM4MTYsIDIzODI0LCA5MzUzLCAyMzgzMCwgMjM4MzMsIDIzODM3LCAKLSAgICAyMzg0MiwgMjM4NDcsIDk4NDEsIDIyMjM1LCAyMjI0MCwgMjM4NTUsIDIzODYxLCAyMzg2NywgMjM4NzIsIDIzODc3LCAKLSAgICAyMzg4MSwgMjM4ODksIDIzODk1LCAyMzkwMSwgMjM5MDUsIDM1MjUsIDIzOTEzLCAyMzkxOCwgMjM5MjMsIDIzOTI3LCAKLSAgICAyMzkzMSwgOTkyMSwgMjM5MzgsIDIzOTQ2LCAyMzk2MCwgMjM5NjcsIDIzOTczLCA5OTMwLCA5OTM2LCAyMzk4MSwgMjM5ODksIAotICAgIDIzOTk2LCAyNDAwMSwgMjQwMDYsIDIyMjQ1LCAyNDAxMiwgMjQwMjMsIDI0MDI3LCAyNDAzMiwgMjYwMSwgMjQwMzcsIAotICAgIDI0MDQ4LCAyNDA1NCwgMjQwNTksIDI0MDYzLCAyNDA2NywgMjQwNzAsIDI0MDc3LCAyNDA4NCwgMjQwOTEsIDI0MDk3LCAKLSAgICAyNDEwMSwgMjIyNTAsIDI0MTA2LCAyNDExMCwgMjQxMTQsIDEwMzcsIDI0MTE5LCAyNDEyNCwgMjQxMjksIDI0MTM0LCAKLSAgICAyNDEzOSwgMjQxNDQsIDI0MTQ5LCAyNDE1NCwgMjQxNTksIDI0MTY0LCAyNDE2OSwgMjQxNzQsIDI0MTc5LCAyNDE4NCwgCi0gICAgMjQxOTAsIDI0MTk1LCAyNDIwMCwgMjQyMDUsIDI0MjEwLCAyNDIxNSwgMjQyMjAsIDI0MjI2LCAyNDIzMSwgMjQyMzYsIAotICAgIDI0MjQxLCAyNDI0NiwgMjQyNTEsIDI0MjU2LCAyNDI2MSwgMjQyNjcsIDI0MjczLCAyNDI3OCwgMjQyODQsIDI0Mjg5LCAKLSAgICAyNDI5NCwgNSwgMjQzMDAsIDI0MzA0LCAyNDMwOCwgMjQzMTIsIDI0MzE3LCAyNDMyMSwgMjQzMjUsIDI0MzI5LCAyNDMzMywgCi0gICAgMjQzMzgsIDI0MzQyLCAyNDM0NywgMjQzNTEsIDI0MzU0LCAyNDM1OCwgMjQzNjMsIDI0MzY3LCAyNDM3MiwgMjQzNzYsIAotICAgIDI0MzgwLCAyNDM4NCwgMjQzODksIDI0MzkzLCAyNDM5NywgMjQ0MDcsIDI0NDEyLCAyNDQxNiwgMjQ0MjAsIDI0NDI1LCAKLSAgICAyNDQzMCwgMjQ0MzksIDI0NDQ0LCAyNDQ0OSwgMjQ0NTMsIDI0NDU3LCAyNDQ3MCwgMjQ0ODIsIDI0NDkxLCAyNDUwMCwgCi0gICAgMjQ1MDYsIDI0NTExLCAyNDUxNSwgMjQ1MTksIDI0NTI5LCAyNDUzOCwgMjQ1NDYsIDI0NTUyLCAyNDU1NywgMjQ1NjEsIAotICAgIDI0NTY4LCAyNDU3OCwgMjQ1ODcsIDI0NTk1LCAyNDYwMywgMjQ2MTAsIDI0NjE4LCAyNDYyNywgMjQ2MzYsIDI0NjQ0LCAKLSAgICAyNDY0OSwgMjQ2NTMsIDI0NjU3LCAyNDY2MCwgMjQ2NjIsIDI0NjY2LCAyNDY3MCwgMjQ2NzUsIDI0NjgwLCAyNDY4NCwgCi0gICAgMjQ2ODgsIDI0NjkxLCAyNDY5NSwgMjQ2OTgsIDI0NzAyLCAyNDcwNSwgMjQ3MDgsIDI0NzEyLCAyNDcxOCwgMjQ3MjIsIAotICAgIDI0NzI2LCAyNDczMCwgMjQ3MzUsIDI0NzQwLCAyNDc0NSwgMjQ3NDksIDI0NzUyLCAyNDc1NywgMjQ3NjMsIDI0NzY4LCAKLSAgICAyNDc3NCwgMjQ3NzksIDI0NzgzLCAyNDc4NywgMjQ3OTEsIDI0Nzk2LCAyNDgwMCwgMjQ4MDUsIDI0ODA5LCAyNDgxMywgCi0gICAgMjQ4MjAsIDI0ODI0LCAyNDgyNywgMjQ4MzEsIDI0ODM3LCAyNDg0MywgMjQ4NDcsIDI0ODUxLCAyNDg1NiwgMjQ4NjMsIAotICAgIDI0ODY5LCAyNDg3MywgMjQ4ODIsIDI0ODg2LCAyNDg5MCwgMjQ4OTMsIDI0ODk5LCAyNDkwNCwgMjQ5MTAsIDE0ODksIAotICAgIDE3OTEsIDI0OTE1LCAyNDkyMCwgMjQ5MjUsIDI0OTMwLCAyNDkzNSwgMjQ5NDAsIDI0OTQ1LCAyMTQ4LCAyMTk0LCAyNDk1MCwgCi0gICAgMjQ5NTMsIDI0OTU3LCAyNDk2MSwgMjQ5NjYsIDI0OTcwLCAyNDk3NCwgMjQ5NzcsIDI0OTgyLCAyNDk4NywgMjQ5OTEsIAotICAgIDI0OTk0LCAyNDk5OSwgMjUwMDMsIDI1MDA4LCAyNTAxMiwgMTQ3NDksIDI1MDE3LCAyNTAyMCwgMjUwMjMsIDI1MDI3LCAKLSAgICAyNTAzMiwgMjUwMzYsIDI1MDQ5LCAyNTA1MywgMjUwNTYsIDI1MDY0LCAyNTA3MywgMjUwODAsIDI1MDg1LCAyNTA5MSwgCi0gICAgMjUwOTcsIDI1MTA1LCAyNTExMiwgMjUxMTksIDI1MTIzLCAyNTEyNywgMjUxMzEsIDI1MTM2LCAyNTE0MSwgMjUxNDUsIAotICAgIDI1MTUzLCAyNTE1OCwgMjUxNzAsIDI1MTgxLCAyNTE4NiwgMjUxOTAsIDI1MTk0LCAyNTIwMCwgMjUyMDUsIDI1MjEwLCAKLSAgICAyNTIxNCwgMjUyMTgsIDI1MjIxLCAyNTIyNywgNzkxNSwgMjMxNiwgMjUyMzEsIDI1MjM2LCAyNTI1MiwgOTQ2OCwgMjUyNzIsIAotICAgIDI1MjgxLCAyNTI5NywgMjUzMDEsIDI1MzA0LCAyNTMxMCwgMjUzMjAsIDI1MzI2LCAyNTMzNSwgMjUzNTAsIDI1MzYyLCAKLSAgICAyNTM3MywgMjUzODEsIDI1MzkwLCAyNTM5NiwgMjU0MDUsIDI1NDE1LCAyNTQyNiwgMjU0MzcsIDI1NDQ2LCAyNTQ1MywgCi0gICAgMjU0NjIsIDI1NDcwLCAyNTQ3NywgMjU0ODUsIDI1NDkyLCAyNTQ5OSwgMjU1MTIsIDI1NTE5LCAyNTUyNSwgMjU1MzAsIAotICAgIDI1NTM5LCAyNTU0NSwgMjU1NTAsIDI1NTU4LCAyNTU2NSwgMjM0MTksIDI1NTc3LCAyNTU4OSwgMjU2MDMsIDI1NjExLCAKLSAgICAyNTYxOCwgMjU2MzAsIDI1NjM5LCAyNTY0OCwgMjU2NTYsIDI1NjY0LCAyNTY3MiwgMjU2NzksIDI1Njg4LCAyNTY5NiwgCi0gICAgMjU3MDYsIDI1NzE1LCAyNTcyNSwgMjU3MzQsIDI1NzQzLCAyNTc1MSwgMjU3NTYsIDI1NzYwLCAyNTc2MywgMjU3NjcsIAotICAgIDI1NzcxLCAyNTc3NSwgMjU3NzksIDI1NzgzLCAyNTc4OSwgMjU3OTUsIDI1ODAzLCAxNDc5NCwgMjU4MTAsIDI1ODE1LCAKLSAgICAyNTgyMiwgMjU4MjgsIDI1ODM1LCAxNDgwMiwgMjU4NDIsIDI1ODQ1LCAyNTg1NywgMjU4NjUsIDI1ODcxLCAyNTg3NiwgCi0gICAgMjU4ODAsIDk4NzEsIDI1ODkxLCAyNTkwMSwgMjU5MTAsIDI1OTE3LCAyNTkyMSwgMTQ4MDcsIDI1OTI0LCAyNTkzMSwgCi0gICAgMjU5MzUsIDI1OTQxLCAyNTk0NCwgMjU5NTEsIDI1OTU3LCAyNTk2NCwgMjU5NzAsIDI1OTc0LCAyNTk3OSwgMjU5ODMsIAotICAgIDI1OTkyLCAyNTk5OSwgMjYwMDUsIDc5NTYsIDI2MDEyLCAyNjAyMCwgMjYwMjcsIDI2MDMzLCAyNjAzOCwgMjYwNDQsIAotICAgIDI2MDUwLCAyNjA1OCwgMjYwNjIsIDI2MDY1LCAyNjA2NywgMjU3NjgsIDI2MDc2LCAyNjA4MiwgMjYwOTIsIDI2MDk3LCAKLSAgICAyNjEwNCwgMjYxMTAsIDI2MTE1LCAyNjEyMCwgMjYxMjUsIDI2MTI5LCAyNjEzNCwgMjYxNDEsIDI2MTUwLCAyNjE1NCwgCi0gICAgMjYxNjEsIDI2MTcwLCAyNjE3NiwgMjYxODEsIDI2MTg3LCAyNjE5MiwgMjYxOTksIDI2MjEwLCAyNjIxNSwgMjYyMTksIAotICAgIDI2MjI5LCAyNjIzNSwgMjYyMzksIDI2MjQ0LCAyNjI1NCwgMjYyNjMsIDI2MjY3LCAyNjI3NCwgMjYyODIsIDI2Mjg5LCAKLSAgICAyNjI5NSwgMjYzMDAsIDI2MzA4LCAyNjMxNSwgMjYzMjcsIDI2MzM2LCAyNjM0MCwgMTMwNDYsIDI2MzQ4LCAyNjM1OCwgCi0gICAgMjYzNjIsIDI1MDYwLCAyNjM3MywgMjYzNzgsIDI2MzgyLCAyNjM4OSwgMjYzOTYsIDIxOTYxLCAyNTY5MywgMjY0MDEsIAotICAgIDI2NDA1LCAyNjQwOCwgMjI4NTMsIDI2NDEzLCAyNjQyNywgMjY0NDMsIDI2NDYxLCAyNjQ4MCwgMjY0OTcsIDI2NTE1LCAKLSAgICAyMjg3MiwgMjY1MzIsIDI2NTUyLCAyMjg4OSwgMjY1NjQsIDI2NTc2LCAxNTczMiwgMjY1ODgsIDIyOTA5LCAyNjYwMiwgCi0gICAgMjY2MTQsIDEwNTI5LCAyNjYyOCwgMjY2MzMsIDI2NjM4LCAyNjY0MywgMjY2NDksIDI2NjU1LCAyNjY2MSwgMjY2NjUsIAotICAgIDI2NjcyLCAyNjY3NywgMjY2ODcsIDI2NjkzLCAxMDE3NiwgMjY2OTksIDI2NzAxLCAyNjcwNiwgMjY3MTQsIDI2NzE4LCAKLSAgICAyNjEzNywgMjY3MjQsIDI2NzMxLCAxMTUxNywgMTE1MjcsIDI2NzM4LCAyNjc0OCwgMjY3NTMsIDI2NzU3LCAyNjc2MCwgCi0gICAgMjY3NjYsIDI2Nzc0LCAyNjc4NiwgMjY3OTYsIDI2ODEyLCAyNjgyNSwgMjY4MzksIDE1NzUwLCAyNjg1MywgMjY4NjAsIAotICAgIDI2ODY0LCAyNjg2NywgMjY4NzIsIDI2ODc2LCAyNjg4MywgMjY4OTAsIDI2OTAwLCAyNjkwNSwgMjY5MTAsIDI2OTE1LCAKLSAgICAyNjkyMywgMjY5MzEsIDI2OTQwLCAyNjk0NSwgOTU2NSwgMjY5NDksIDI2OTUyLCAyNjk1NSwgMjY5NjAsIDI2OTY3LCAKLSAgICAyNjk3MiwgMjY5ODgsIDI2OTk2LCAyNzAwNCwgOTQxNiwgMjcwMTIsIDI3MDE3LCAyNzAyMSwgMjcwMjcsIDI3MDMzLCAKLSAgICAyNzAzNiwgMjcwNDIsIDI3MDU0LCAyNzA2MiwgMjcwNjksIDI3MDc1LCAyNzA4MiwgMjcwOTMsIDI3MTA3LCAyNzEyMCwgCi0gICAgMjcxMjksIDI3MTM4LCAyNzE1MCwgMjcxNjEsIDI3MTcxLCAyNzE4MCwgMjcxODksIDI3MTk3LCAyNzIwOCwgNzkzOCwgCi0gICAgMjcyMTUsIDI3MjIxLCAyNzIyNiwgMjcyMzIsIDI3MjM5LCAyNzI0OSwgMjcyNTksIDI3MjY4LCAyNzI3NCwgMjcyODEsIAotICAgIDI3Mjg2LCAyNzI5MywgMjczMDEsIDI3MzA5LCAyNzMyMSwgNjI0NiwgMjczMjgsIDI3MzM3LCAyNzM0NSwgMjczNTEsIAotICAgIDI3MzU3LCAyNzM2MiwgMjczNjYsIDI3MzY5LCAyNzM3NSwgMjczODIsIDI3Mzg3LCAyNzM5MiwgMjczOTYsIDI3NDA4LCAKLSAgICAyNzQxOSwgMjc0MjgsIDI3NDM2LCAxNDkzNCwgMjc0NDEsIDI3NDQ3LCAyNzQ1MywgMTE1MTAsIDg2MzUsIDI3NDU4LCAKLSAgICAyNzQ2MiwgMjc0NjUsIDI3NDY4LCAyNzQ3NCwgMjc0ODIsIDI3NDkwLCAyNzQ5NCwgMjc0OTgsIDI3NTAzLCAyNzUwNiwgCi0gICAgMjc1MTUsIDI3NTE5LCAyNzUyNywgMjc1MzgsIDI3NTQyLCAyNzU0OCwgMjc1NTQsIDI3NTU4LCAyNzU2NCwgMjc1NzIsIAotICAgIDI3NTk0LCAyNzYxOCwgMjc2MjUsIDI3NjMyLCAyNzYzOCwgMjc2NDYsIDI3NjUyLCAyNzY1NywgMjc2NjgsIDI3Njg2LCAKLSAgICAyNzY5MywgMjc3MDEsIDI3NzA1LCAyNzcxNCwgMjc3MjcsIDI3NzM1LCAyNzc0NywgMjc3NTgsIDI3NzY4LCAyNzc4MiwgCi0gICAgMjc3OTEsIDI3Nzk5LCAyNzgxMSwgOTQ4NSwgMjc4MjIsIDI3ODMzLCAyNzg0NSwgMjc4NTUsIDI3ODY0LCAyNzg2OSwgCi0gICAgMjc4NzMsIDI3ODgxLCAyNzg5MSwgMjc4OTYsIDI3OTAwLCAyNzkwMywgMjc5MDYsIDI3OTE0LCAyNzkyMiwgMjc5MzEsIAotICAgIDI3OTQxLCAyNzk1MCwgMjc5NTYsIDI3OTcwLCAyNjYzLCAyNzk5MiwgMjgwMDMsIDI4MDEyLCAyODAyMiwgMjgwMzQsIAotICAgIDI4MDQzLCAyODA1MiwgMjgwNjIsIDI4MDcwLCAyODA3OCwgMjgwODcsIDI4MDkyLCAyODEwMywgMjgxMDgsIDI4MTE5LCAKLSAgICAyODEyMywgMjgxMzMsIDI4MTQyLCAyODE1MCwgMjgxNjAsIDI4MTcwLCAyODE3OCwgMjgxODcsIDI4MTk0LCAyODIwMiwgCi0gICAgMjgyMDksIDI4MjE4LCAyODIyMiwgMjgyMzAsIDI4MjM3LCAyODI0NSwgMjgyNTIsIDI4MjYzLCAyODI3OCwgMjgyODUsIAotICAgIDI4MjkxLCAyODMwMSwgMjgzMTAsIDI4MzE2LCAyODMyMCwgMjgzMjcsIDI4MzMxLCAxNDAxOCwgMjgzMzcsIDI4MzQxLCAKLSAgICAyODM0NiwgMjgzNTMsIDI4MzU3LCAyODM2MSwgMjgzNjksIDI4Mzc3LCAyODM4MywgMjgzOTIsIDI4Mzk5LCAyODQwNCwgCi0gICAgMjg0MDksIDI4NDE5LCAyMzQ4OCwgMjg0MjMsIDI4NDI2LCAyODQzMSwgMjg0MzYsIDI4NDQxLCAyODQ0NiwgMjg0NTEsIAotICAgIDI4NDU2LCAyODQ2MSwgMjg0NjYsIDI4NDcyLCAyODQ3NywgMjg0ODIsIDI4NDg4LCAxMjE4LCA3MDQsIDI4NDkzLCAyODUwMiwgCi0gICAgMjM2NCwgMjg1MDksIDI4NTE0LCAyODUxOCwgMjg1MjQsIDEyNjcsIDU0NiwgMzE4LCAyODUyOSwgMjg1MzgsIDI4NTQ2LCAKLSAgICAyODU1NSwgMjg1NjMsIDI4NTc0LCAyODU4MywgMjg1OTEsIDI4NTk1LCAyODU5OCwgMjg2MDYsIDI4NjE0LCAyODYxOSwgCi0gICAgMTQ3NjIsIDI4NjI1LCAyODYzMSwgMjg2MzcsIDU4NzIsIDI4NjQyLCAyODY0NiwgMjg2NTIsIDI4NjU2LCAyODY2MywgCi0gICAgMTQ1NSwgMjg2NjksIDI4Njc2LCA5NTcyLCAyODY4MCwgMjg2OTAsIDI4Njk4LCAyODcwNCwgMjg3MTMsIDI4NzIxLCAKLSAgICAyODcyNywgMjg3MzUsIDI4NzQyLCAxMTEwMywgMjg3NDgsIDI4NzU1LCAyODc2MCwgMjg3NjcsIDE0OTYsIDIxNDcsIAotICAgIDI4NzczLCAyODc3OSwgMjg3ODYsIDI4Nzk3LCAyODgwOCwgMjg4MTYsIDI4ODIzLCAyODgzMywgMjg4NDIsIDI4ODUwLCAKLSAgICAyODg1OSwgMjg4NjYsIDI4ODczLCAyODg4NiwgMjg4OTcsIDEyNzIsIDI4OTE2LCAyODkyMSwgMjg5MjksIDM1NzUsIAotICAgIDI4OTMzLCAyODkzOCwgMjg5NDIsIDE0NTksIDI0Njg5LCAyODk1MiwgMjg5NTYsIDI4OTYxLCAyODk2NSwgMzQ5MywgCi0gICAgMjg5NzEsIDI4OTc5LCAyODk4NiwgMjg5OTcsIDI5MDA1LCAyOTAxMywgMzU3NiwgMjc5LCAyOTAxOCwgMjkwMjYsIDI5MDM0LCAKLSAgICAyOTA0MSwgMjkwNDcsIDI5MDUyLCAyMjE2LCAyOTA1OSwgMjkwNjUsIDI1OTc1LCAyNjIwNSwgMjkwNzEsIDEwNiwgMjkwNzUsIAotICAgIDI5MDc5LCAyOTA4NSwgNjE1LCA5MzIxLCAyOTA5MCwgMjkwOTcsIDI5MTAzLCAyMzI3LCAyOTEwNywgMjkxMTEsIDE1MTc0LCAKLSAgICAyOTExNCwgMjkxMTksIDI5MTI2LCAyOTEzMiwgMjkxMzcsIDI5MTQ1LCAyOTE1MiwgMjkxNTgsIDIyMzM4LCAyOTE2MiwgCi0gICAgMjkxNjYsIDM2NDYsIDE2NjEyLCAyOTE3MCwgMjkxNzUsIDI5MTc4LCAyOTE4NiwgMjkxOTQsIDI5MTk5LCAyOTIwMiwgCi0gICAgMjkyMDksIDI5MjE5LCAyOTIzMSwgMjkyMzYsIDI5MjQwLCAyOTI0OCwgMjkyNTUsIDI5MjYxLCAyOTI2OCwgMjkyNzUsIAotICAgIDI5Mjc4LCAyOTI4MiwgMjkyODYsIDE0NjMsIDI5Mjk2LCAyOTI5OCwgMjkzMDMsIDI5MzA5LCAyOTMxNSwgMjkzMjAsIAotICAgIDI5MzI1LCAyOTMzMCwgMjkzMzUsIDI5MzQwLCAyOTM0NSwgMjkzNTAsIDI5MzU1LCAyOTM2MCwgMjkzNjUsIDI5MzcwLCAKLSAgICAyOTM3NSwgMjkzODAsIDI5Mzg1LCAyOTM5MSwgMjkzOTcsIDI5NDAzLCAyOTQwOSwgMjk0MTQsIDI5NDE5LCAyOTQyNCwgCi0gICAgMjk0MzAsIDI5NDM1LCAyOTQ0MCwgMjk0NDUsIDI5NDUxLCAyOTQ1NiwgMjk0NjIsIDI5NDY3LCAyOTQ3MiwgMjk0NzcsIAotICAgIDI5NDgyLCAyOTQ4OCwgMjk0OTMsIDI5NDk5LCAyOTUwNCwgMjk1MDksIDI5NTE0LCAyOTUxOSwgMjk1MjUsIDI5NTMwLCAKLSAgICAyOTUzNiwgMjk1NDEsIDI5NTQ2LCAyOTU1MSwgMjk1NTYsIDI5NTYxLCAyOTU2NiwgMjk1NzEsIDI5NTc2LCAyOTU4MSwgCi0gICAgMjk1ODcsIDI5NTkzLCAyOTU5OSwgMjk2MDQsIDI5NjA5LCAyOTYxNCwgMjk2MTksIDI5NjI1LCAyOTYzMSwgMjk2MzcsIAotICAgIDI5NjQzLCAyOTY0OSwgMjk2NTUsIDI5NjYwLCAyOTY2NiwgMjk2NzEsIDI5Njc2LCAyOTY4MSwgMjk2ODYsIDI5NjkyLCAKLSAgICAyNDQzLCAyOTY5NywgMjQ1MCwgMjQ1NywgMjc1NCwgMjk3MDIsIDI0NjMsIDI0NzMsIDI5NzA4LCAyOTcxMiwgMjk3MTcsIAotICAgIDI5NzIyLCAyOTcyOCwgMjk3MzMsIDI5NzM4LCAyOTc0MiwgMjk3NDcsIDI5NzUzLCAyOTc1OCwgMjk3NjMsIDI5NzY4LCAKLSAgICAyOTc3NCwgMjk3NzksIDI5NzgzLCAyOTc4NywgMjk3OTIsIDI5Nzk3LCAyOTgwMiwgMjk4MDcsIDI5ODEyLCAyOTgxOCwgCi0gICAgMjk4MjQsIDI5ODI5LCAyOTgzMywgMjk4MzgsIDI5ODQ0LCAyOTg0OCwgMjk4NTMsIDI5ODU4LCAyOTg2MywgMjk4NjgsIAotICAgIDI5ODcyLCAyOTg3NSwgMjk4ODAsIDI5ODg1LCAyOTg5MCwgMjk4OTUsIDI5OTAwLCAyOTkwNiwgMjk5MTIsIDI5OTE3LCAKLSAgICAyOTkyMiwgMjk5MjYsIDI5OTMxLCAyOTkzNiwgMjk5NDEsIDI5OTQ2LCAyOTk1MSwgMjk5NTUsIDI5OTYwLCAyOTk2NSwgCi0gICAgMjk5NzAsIDI5OTc0LCAyOTk3OCwgMjk5ODIsIDI5OTg3LCAyOTk5NSwgMzAwMDAsIDMwMDA2LCAzMDAxMiwgMzAwMTgsIAotICAgIDMwMDIzLCAzMDAyNywgMzAwMzAsIDMwMDM1LCAzMDA0MCwgMzAwNDQsIDMwMDQ5LCAzMDA1MywgMzAwNTgsIDMwMDYyLCAKLSAgICAzMDA2NSwgMzAwNzAsIDE3Mjg5LCAzMDA3NSwgMzAwODAsIDMwMDg1LCAzMDA5MywgMjEyNjcsIDI4NjczLCA5MDE5LCAKLSAgICAzMDA5OCwgMzAxMDMsIDMwMTA3LCAzMDExMiwgMzAxMTYsIDMwMTIwLCAzMDEyNSwgMzAxMjksIDMwMTMyLCAzMDEzNSwgCi0gICAgMzAxMzksIDMwMTQ0LCAzMDE0OCwgMzAxNTYsIDMwMTYwLCAzMDE2MywgMzAxNjgsIDMwMTcyLCAzMDE3NiwgMzAxODEsIAotICAgIDMwMTg2LCAzMDE5MCwgMzAxOTYsIDMwMjAxLCAzMDIwNiwgMzAyMTMsIDMwMjIwLCAzMDIyNCwgMzAyMjcsIDMwMjMzLCAKLSAgICAzMDI0MiwgMzAyNDksIDMwMjU3LCAzMDI2NCwgMzAyNjgsIDMwMjczLCAzMDI3NywgMzAyODEsIDMwMjg3LCAzMDI5MywgCi0gICAgMzAyOTcsIDMwMzAzLCAzMDMwOCwgMzAzMTMsIDMwMzIwLCAzMDMyNiwgMzAzMzIsIDMwMzM4LCAzMDM0NCwgMzAzNTEsIAotICAgIDMwMzU3LCAzMDM2MywgMzAzNjksIDMwMzc1LCAzMDM4MSwgMzAzODcsIDMwMzkzLCAzMDQwMCwgMzA0MDYsIDMwNDEzLCAKLSAgICAzMDQxOSwgMzA0MjUsIDMwNDMxLCAzMDQzNywgMzA0NDMsIDMwNDQ5LCAzMDQ1NSwgMzA0NjEsIDMwNDY3LCAxMTQxMSwgCi0gICAgMzA0NzMsIDMwNDc4LCAzMDQ4MywgMzA0ODYsIDMwNDk0LCAzMDQ5OSwgMzA1MDgsIDMwNTE0LCAzMDUxOSwgMzA1MjQsIAotICAgIDMwNTI5LCAzMDUzMywgMzA1MzgsIDMwNTQzLCAzMDU0OCwgMzA1NTMsIDMwNTU4LCAzMDU2NSwgMzA1NzIsIDMwNTc4LCAKLSAgICAzMDU4NCwgMzA1ODksIDE2MjkwLCAzMDU5NiwgMzA2MDIsIDMwNjA5LCAzMDYxNSwgMzA2MjEsIDMwNjI2LCAzMDYzNCwgCi0gICAgMzA2MzksIDE2MDY5LCAzMDY0MywgMzA2NDgsIDMwNjUzLCAzMDY1OSwgMzA2NjQsIDMwNjY5LCAzMDY3MywgMzA2NzgsIAotICAgIDMwNjgzLCAzMDY4OSwgMzA2OTQsIDMwNjk5LCAzMDcwMywgMzA3MDgsIDMwNzEzLCAzMDcxNywgMzA3MjIsIDMwNzI3LCAKLSAgICAzMDczMiwgMzA3MzYsIDMwNzQxLCAzMDc0NiwgMzA3NTEsIDMwNzU1LCAzMDc1OSwgMTUyODAsIDMwNzYzLCAzMDc3MiwgCi0gICAgMzA3NzgsIDMwNzg0LCAzMDc5MywgMzA4MDEsIDMwODEwLCAzMDgxOCwgMzA4MjMsIDMwODI3LCAzMDgzNCwgMzA4NDAsIAotICAgIDMwODQ0LCAzMDg0NywgMzA4NTIsIDMwODYxLCAzMDg2OSwgMzA4NzQsIDE0OTUsIDMwODgwLCAzMDg4MywgMzA4ODcsIAotICAgIDIyNDExLCAyMjQxNywgMzA4OTMsIDMwODk3LCAzMDkwOCwgMzA5MTksIDMwOTMwLCAzMDk0MiwgMzA5NDksIDMwOTU2LCAKLSAgICAzMDk2MSwgMzA5NjUsIDU5MDksIDc1NSwgMjEyNjYsIDMwOTczLCAzMDk3OCwgMzA5ODIsIDMwOTg3LCAzMDk5MSwgMzA5OTcsIAotICAgIDMxMDAyLCAzMTAwOCwgMzEwMTMsIDMxMDE5LCAzMTAyNCwgMzEwMzAsIDMxMDM1LCAzMTA0MSwgMzEwNDcsIDMxMDUzLCAKLSAgICAzMTA1OCwgMzEwMTQsIDMxMDIwLCAzMTA2MiwgMzEwNjcsIDMxMDczLCAzMTA3OCwgMzEwODQsIDMxMDg5LCAzMTA5NSwgCi0gICAgMzExMDAsIDMxMDI1LCAxMDQxNCwgMzExMDQsIDMxMDM2LCAzMTA0MiwgMzEwNDgsIDI4MzEsIDM0MjMsIDMxMTEwLCAKLSAgICAzMTExMywgMzExMTksIDMxMTI1LCAzMTEzMSwgMzExMzgsIDMxMTQ0LCAzMTE1MCwgMzExNTYsIDMxMTYyLCAzMTE2OCwgCi0gICAgMzExNzQsIDMxMTgwLCAzMTE4NiwgMzExOTIsIDMxMTk4LCAzMTIwNCwgMzEyMTAsIDMxMjE3LCAzMTIyMywgMzEyMjksIAotICAgIDMxMjM1LCAzMTI0MSwgMzEyNDcsIDMxMjUwLCAzMTI1NSwgMzEyNTgsIDMxMjY1LCAzMTI3MywgMzEyNzgsIDMxMjgzLCAKLSAgICAzMTI4OSwgMzEyOTQsIDMxMjk5LCAzMTMwMywgMzEzMDgsIDMxMzE0LCAzMTMxOSwgMzEzMjUsIDMxMzMwLCAzMTMzNiwgCi0gICAgMzEzNDEsIDMxMzQ3LCAzMTM1MywgMzEzNTcsIDMxMzYyLCAzMTM2NywgMzEzNzIsIDMxMzc3LCAzMTM4MSwgMzEzODYsIAotICAgIDMxMzkxLCAzMTM5NiwgMzE0MDIsIDMxNDA4LCAzMTQxNCwgMzE0MjAsIDMxNDI1LCAzMTQyOSwgMzE0MzIsIDMxNDM4LCAKLSAgICAzMTQ0NCwgMzE0NTMsIDMxNDYxLCAzMTQ2OCwgMzE0NzMsIDMxNDc3LCAzMTQ4MSwgMzE0ODYsIDE1MTMzLCAzMTQ5MSwgCi0gICAgMzE0OTksIDMxNTA1LCAzNjgzLCAxMzc3LCAzMTUxMCwgMzE1MTQsIDgwMDUsIDMxNTIwLCAzMTUyNiwgMzE1MzMsIDgwMTQsIAotICAgIDMxNTM3LCAzMTU0MywgMzE1NTAsIDMxNTU2LCAzMTU2NSwgMzE1NzMsIDMxNTg1LCAzMTU4OSwgMzE1OTYsIDMxNjAyLCAKLSAgICAzMTYwNiwgMzE2MDksIDMxNjE4LCAzMTYyNiwgMzEwMTUsIDMxNjMxLCAzMTY0MSwgMzE2NTEsIDMxNjYxLCAzMTY2NywgCi0gICAgMzE2NzIsIDMxNjgyLCAzMTY4NywgMzE3MDAsIDMxNzE0LCAzMTcyNSwgMzE3MzcsIDMxNzQ5LCAzMTc2MywgMzE3NzYsIAotICAgIDMxNzg4LCAzMTgwMCwgMTQ1ODcsIDMxODE0LCAzMTgxOSwgMzE4MjQsIDMxODI4LCAzMTgzMiwgMzE4MzYsIDE3ODAsIAotICAgIDI3MTU5LCAzMTg0MCwgMzE4NDUsIDMxMDYzLCAzMTg1MCwgMzE4NTMsIDMxODU4LCAzMTg2MywgMzE4NjgsIDMxODc0LCAKLSAgICAzMTg4MCwgMTAwOTEsIDMxODg1LCAzMTg5MiwgMTU2ODQsIDMxODk4LCAzMTkwMywgMzE5MDgsIDMxOTEyLCAzMTkxNywgCi0gICAgMzE5MjIsIDMxMDY4LCAzMTkyNywgMzE5MzIsIDMxOTM3LCAzMTk0MywgMzEwNzQsIDMxOTQ4LCAzMTk1MSwgMzE5NTgsIAotICAgIDMxOTY2LCAzMTk3MiwgMzE5NzgsIDMxOTg0LCAzMTk5NSwgMzIwMDAsIDMyMDA3LCAzMjAxNCwgMzIwMjEsIDMyMDI5LCAKLSAgICAzMjAzOCwgMzIwNDcsIDMyMDUzLCAzMjA1OSwgMzIwNjcsIDMxMDc5LCAzMjA3MiwgMzIwNzgsIDMyMDg0LCAzMTA4NSwgCi0gICAgMzIwODksIDMyMDk0LCAzMjEwMiwgMzIxMTAsIDMyMTE2LCAzMjEyMywgMzIxMjksIDMyMTM2LCAzMjE0MywgMzIxNDksIAotICAgIDMyMTU3LCAzMjE2NywgMzIxNzQsIDMyMTc5LCAzMjE4NSwgMzIxOTAsIDMyMTk1LCAzMjIwMiwgMzIyMTEsIDMyMjE5LCAKLSAgICAzMjIyNCwgMzIyMzAsIDMyMjM3LCAzMjI0NSwgMzIyNTEsIDMyMjU2LCAzMjI2MiwgMzIyNzEsIDI3OTM2LCAzMjI3OCwgCi0gICAgMzIyODIsIDMyMjg3LCAzMjI5NiwgMzIzMDEsIDMyMzA2LCAzMjMxMSwgMTIzOTgsIDMyMzE5LCAzMjMyNCwgMzIzMjksIAotICAgIDMyMzM0LCAzMjMzOCwgMzIzNDMsIDMyMzQ4LCAzMjM1NSwgMzIzNjAsIDMyMzY1LCAzMjM3MCwgMzEwOTAsIDIxMjAzLCAKLSAgICAzMjM3NiwgMjUxOSwgMjQ0LCAzMjM3OSwgMzIzODIsIDMyMzg2LCAzMjM5MCwgMzI0MDAsIDMyNDA4LCAzMjQxMiwgMzI0MTksIAotICAgIDMyNDI2LCAzMjQzMCwgMzI0MzMsIDMyNDM5LCAzMjQ0NywgMzI0NTUsIDMyNDU5LCAzMjQ2MywgMzI0NjYsIDMyNDczLCAKLSAgICAzMjQ3NywgMzI0ODEsIDMyNDg4LCAzMjQ5NiwgMzEwMjYsIDMyNTAzLCAzMjUxMSwgMTAxNTEsIDY2MCwgMzA4LCAzMjUyMywgCi0gICAgMzI1MjgsIDMyNTMzLCAzMjUzOSwgMzI1NDQsIDMyNTQ5LCAzNzA0LCAzMjU1NCwgMzI1NTcsIDMyNTYyLCAzMjU2NywgCi0gICAgMzI1NzIsIDMyNTc3LCAzMjU4MiwgMzI1ODksIDIyNTEyLCAzMjU5NCwgMzI1OTksIDMyNjA0LCAzMjYwOSwgMzI2MTQsIAotICAgIDMyNjIwLCAzMjYyNSwgMzI2MzEsIDMxMjYxLCAzMjYzNywgMzI2NDIsIDMyNjQ4LCAzMjY1NCwgMzI2NjQsIDMyNjY5LCAKLSAgICAzMjY3NCwgMzI2NzgsIDMyNjgzLCAzMjY4OCwgMzI2OTMsIDMyNjk4LCAzMjcxMSwgMzI3MTYsIDIyMjg5LCAxNjY5MiwgCi0gICAgMzcxMCwgMzI3MjAsIDMyNzI1LCAzMjczMCwgMzI3MzYsIDMyNzQxLCAzMjc0NiwgMzI3NTAsIDMyNzU1LCAzMjc2MCwgCi0gICAgMzI3NjYsIDMyNzcxLCAzMjc3NiwgMTM4MiwgMzI3ODAsIDMyNzg1LCAzMjc5MCwgMzI3OTUsIDMyNzk5LCAzMjgwNCwgCi0gICAgMzI4MDksIDMyODE0LCAzMjgyMCwgMzI4MjYsIDMyODMxLCAzMjgzNSwgMzI4MzksIDMyODQ0LCAzMjg0OSwgMzI4NTQsIAotICAgIDMyODU4LCAzMjg2NiwgMzI4NzAsIDMyODc2LCAzMjg4MCwgMzI4ODcsIDE2NDg1LCAzMTAzNywgMzI4OTMsIDMyOTAwLCAKLSAgICAzMjkwOCwgMzI5MTUsIDMyOTIxLCAzMjkzNCwgMzI5NDYsIDMyOTUyLCAzMjk1NiwgMjc3MywgMzI5NjAsIDMyOTY0LCAKLSAgICAzMjQ2OCwgMzI5NzMsIDMyOTg0LCAzMjk4OSwgMzI5OTQsIDMyOTk5LCAzMzAwMywgMzMwMDgsIDIyNDIyLCAzMzAxMiwgCi0gICAgMzMwMTYsIDMzMDIxLCAzMTA0MywgMjEyODcsIDMzMDI1LCAzMzAzMCwgMzMwMzYsIDMzMDQxLCAzMzA0NSwgMzMwNDksIAotICAgIDMzMDUyLCAzMzA1NiwgMzMwNjIsIDMzMDczLCAzMzA4NSwgMzEwNDksIDMzMDkwLCAzMzA5MywgMzMwOTcsIDM0NywgCi0gICAgMzMxMDIsIDMzMTA3LCAzMzExMiwgMzMxMTcsIDMzMTIyLCAzMzEyNywgMzMxMzMsIDMzMTM4LCAzMzE0MywgMzMxNDksIAotICAgIDMzMTU0LCAzMzE2MCwgMzMxNjUsIDMzMTcxLCAzMzE3NiwgMzMxODEsIDMzMTg2LCAzMzE5MSwgMzMxOTYsIDMzMjAxLCAKLSAgICAzMzIwNiwgMzMyMTEsIDMzMjE3LCAzMzIyMiwgMzMyMjcsIDMzMjMyLCAzMzIzNywgMzMyNDIsIDMzMjQ3LCAzMzI1MiwgCi0gICAgMzMyNTgsIDMzMjY0LCAzMzI2OSwgMzMyNzQsIDMzMjc5LCAzMzI4NCwgMzMyODksIDMzMjk0LCAzMzI5OSwgMzMzMDQsIAotICAgIDMzMzA5LCAzMzMxNCwgMzMzMTksIDMzMzI0LCAzMzMyOSwgMzMzMzQsIDMzMzM5LCAzMzM0NCwgMzMzNDksIDMzMzU0LCAKLSAgICAzMzM2MCwgMzEzLCAyNiwgMzMzNjUsIDMzMzY5LCAzMzM3MywgMzMzODEsIDMzMzg1LCAzMzM4OSwgMzMzOTIsIDMzMzk1LCAKLSAgICAzMzM5NywgMzM0MDIsIDMzNDA2LCAzMzQxMSwgMzM0MTUsIDMzNDIwLCAzMzQyNCwgMzM0MjksIDMzNDMzLCAzMzQzNiwgCi0gICAgMzM0MzgsIDMzNDQyLCAzMzQ0NywgMzM0NTEsIDMzNDYyLCAzMzQ2NSwgMzM0NjcsIDMzNDcxLCAzMzQ4MywgMzM0OTIsIAotICAgIDMzNDk2LCAzMzUwMCwgMzM1MDYsIDMzNTExLCAzMzUyMCwgMzM1MjYsIDMzNTMxLCAzMzUzNiwgMzM1NDAsIDMzNTQ1LCAKLSAgICAzMzU1MiwgMzM1NTcsIDMzNTYzLCAzMzU2OCwgMzM1NzIsIDMzNTc5LCAyNTcwMSwgMjU3MTEsIDMzNTgzLCAzMzU4OCwgCi0gICAgMzM1OTMsIDMzNTk4LCAzMzYwNSwgMzM2MDksIDMzNjE2LCA4MTEzLCAzMzYyMiwgMzM2MzEsIDMzNjM5LCAzMzY1NCwgCi0gICAgMzM2NjgsIDMzNjc2LCAzMzY4NywgMzM2OTYsIDMzNzAxLCA3MjI3LCAzMzcxMSwgMzM3MTYsIDMzNzIxLCAzMzcyNSwgCi0gICAgMzM3MjgsIDMzNzMyLCAzMzczNywgMzM3NDEsIDMzNzQ4LCAzMzc1MywgMzM3NTgsIDg5MTIsIDMzNzY4LCAzMzc3MCwgCi0gICAgMzM3NzMsIDMzNzc3LCAzMzc4MywgMzM3ODcsIDMzNzkyLCAzMzc5NywgMzM4MDMsIDMzODA4LCAzMzgxNCwgMzM4MTksIAotICAgIDMzODI5LCAzMzgzOCwgMzM4NDYsIDMzODUxLCAzMzg1NywgMzM4NjIsIDMzODY5LCAzMzg3MywgMzM4ODEsIDMzODg4LCAKLSAgICAzMzkwMSwgMzM5MDksIDMzOTEzLCAzMzkyMywgMzM5MjgsIDMzOTMyLCAzMzk0MCwgMzM5NDgsIDMzOTUyLCAzMzk2MSwgCi0gICAgMzM5NjcsIDMzOTcyLCAzMzk4MCwgMzM5OTAsIDMzOTk5LCAzNDAwOCwgMzQwMTcsIDM0MDI4LCAzNDAzNiwgMzQwNDcsIAotICAgIDM0MDU2LCAzNDA2MywgMzQwNjksIDM0MDc0LCAzNDA4NSwgMzQwOTAsIDM0MDk0LCAzNDA5NywgMzQxMDEsIDM0MTA5LCAKLSAgICAzNDExNSwgMzQxMjMsIDM0MTMwLCAzNDEzNiwgMzQxNDEsIDM0MTQ3LCAyNDE4LCAzNDE1MSwgMzQxNTMsIDM0MTU4LCAKLSAgICAzNDE2MywgMzQxNjgsIDM0MTcxLCAzNDE3MywgMzQxNzcsIDM0MTgwLCAzNDE4NywgMzQxOTEsIDk4ODQsIDM0MTk1LCAKLSAgICAzNDIwMSwgMzQyMTEsIDM0MjE2LCAzNDIyMiwgMzQyMjYsIDM0MjMxLCAzNDI0NCwgMjYwODcsIDM0MjUwLCAzNDI1OSwgCi0gICAgMTc0NjIsIDM0MjY2LCAzNDI3NSwgMzE2NDcsIDM0MjgzLCAzNDI4OCwgMzQyOTIsIDM0MzAwLCAzNDMwNywgMzQzMTIsIAotICAgIDM0MzE2LCAzNDMyMSwgMzQzMjUsIDM0MzMzLCAzNDMzOSwgMzQzNDUsIDM0MzUwLCAzNDM1NCwgMzQzNTcsIDM0MzYyLCAKLSAgICAzNDM3NSwgMzQzOTEsIDIyOTc5LCAzNDQwOCwgMzQ0MjAsIDM0NDM3LCAzNDQ0OSwgMzQ0NjMsIDIyOTk2LCAyMzAxNSwgCi0gICAgMzQ0NzUsIDM0NDg3LCAyNjgwLCAzNDUwMSwgMzQ1MDYsIDM0NTExLCAzNDUxNiwgMzQ1MjAsIDM0NTI3LCAzNDUzOSwgCi0gICAgMzQ1NDUsIDM0NTQ4LCAzNDU1OSwgMzQ1NzAsIDM0NTc1LCAzMjA2NCwgNjk1LCAzNDU3OSwgMzQ1ODMsIDM0NTg3LCAKLSAgICAzNDU5MCwgMzQ1OTUsIDM0NjAwLCAzNDYwNiwgMzQ2MTEsIDM0NjE2LCAzNDYyMiwgMzQ2MjgsIDM0NjMzLCAzNDYzNywgCi0gICAgMzQ2NDIsIDM0NjQ3LCAzNDY1MiwgMzQ2NTYsIDM0NjU5LCAzNDY2NSwgMzQ2NzAsIDM0Njc1LCAzNDY4MCwgMzQ2ODQsIAotICAgIDM0Njg5LCAzNDY5NSwgMzQ3MDMsIDI2MzIwLCAzNDcwOCwgMzQ3MTMsIDM0NzIwLCAzNDcyNiwgMzQ3MzIsIDM0NzM3LCAKLSAgICAzNDc0NSwgMjI1MjEsIDM0NzUyLCAzNDc1NywgMzQ3NjIsIDM0NzY3LCAzNDc3MSwgMzQ3NzQsIDM0Nzc5LCAzNDc4MywgCi0gICAgMzQ3ODcsIDM0Nzk0LCAzNDgwMCwgMzQ4MDYsIDM0ODEyLCAzNDgxOSwgMzQ4MjQsIDM0ODMwLCAzMzk0MywgMzQ4MzQsIAotICAgIDM0ODM4LCAzNDg0MywgMzQ4NTYsIDM0ODYxLCAzNDg2NywgMzQ4NzUsIDM0ODgyLCAzNDg5MCwgMzQ5MDAsIDM0OTA2LCAKLSAgICAzNDkxMiwgMzQ5MTgsIDM0OTIyLCAzNDkzMSwgMzQ5MzksIDM0OTQ2LCAzNDk1MSwgMzQ5NTYsIDEwNDM3LCAzNDk2MSwgCi0gICAgMzQ5NjksIDM0OTc2LCAzNDk4MiwgMzQ5OTIsIDM0OTk3LCAzNTAwMywgMzUwMTEsIDM2MDgsIDM1MDE4LCAzNTAyNSwgCi0gICAgMzYxNCwgMzUwMjksIDM1MDM0LCAzNTA0NSwgMzUwNTIsIDM1MDU4LCAzNTA2NywgMzUwNzEsIDQwMTUsIDM1MDc0LCAKLSAgICAzNTA4MSwgMzUwODcsIDM1MDkzLCAzNTEwMSwgMzUxMTEsIDI5MDQyLCAzNTExOCwgMzUxMjYsIDM1MTMxLCAzNTEzNywgCi0gICAgMzUxNDIsIDI1OTQ3LCAzNTE0OCwgMzUxNTUsIDM1MTYxLCAzNTE3MCwgMjM2NjAsIDM1MTc3LCAzNTE4MiwgMzUxODYsIAotICAgIDM1MTk0LCAzNTIwMiwgOTYwMCwgNTg5NSwgMzUyMDksIDM1MjEzLCAzNTIxNSwgMzUyMTksIDM1MjI0LCAzNTIyNiwgCi0gICAgMzUyMzIsIDM1MjM3LCAzNTI0MiwgMzUyNDksIDMyNTg1LCAzNTI1NSwgMzUyNjAsIDM1MjY0LCAzNTI2OSwgMzUyNzMsIAotICAgIDM1MjgyLCAzNTI4NiwgMzUyOTIsIDM1Mjk5LCAzNTMwNSwgMzUzMTIsIDM1MzE3LCAzNTMyNiwgMzUzMzEsIDM1MzM1LCAKLSAgICAzNTM0MCwgMzUzNDcsIDM1MzU1LCAzNTM2MywgMzUzNjgsIDIxMzQzLCAzNTM3MiwgMzUzNzUsIDM1Mzc5LCAzNTM4MywgCi0gICAgMzUzODcsIDM1MzkwLCAzNTM5MiwgMzU0MDAsIDM1NDA0LCAzNTQxMSwgMzU0MTUsIDM1NDE5LCAzNTQyNywgMzU0MzQsIAotICAgIDM1NDQ0LCAzNTQ0OCwgMzU0NTIsIDM1NDYwLCAzNTQ2OCwgMzU0NzQsIDM1NDc5LCAzNTQ4OCwgMTMzNTAsIDM1NDk0LCAKLSAgICAzNTUwMywgMzU1MDgsIDM1NTE1LCAzNTUyMywgMzU1MzEsIDM1NTM5LCAzNTU0NiwgMzU1NTMsIDM1NTYwLCAzNTU2NywgCi0gICAgMzU1NzQsIDM1NTc5LCAzNTU4NSwgMzU2MDIsIDM1NjEwLCAzNTYyMCwgMzU2MjgsIDM1NjM1LCA0MDcsIDM1NjM5LCAKLSAgICAzNTY0NSwgMzU2NDksIDM1NjU0LCAzMzY5MiwgMzU2NjAsIDM1NjYzLCAzNTY2NywgMzU2NzUsIDM2MTksIDM1NjgzLCAKLSAgICAzNTY4OSwgMzU2OTUsIDM1NzA0LCAzNTcxNCwgMzU3MjEsIDM1NzI3LCAzNjI1LCAzNjMxLCAzNTczNiwgMzU3NDMsIAotICAgIDM1NzUxLCAzNTc1NiwgMzU3NjAsIDM1NzY3LCAzNTc3NSwgMzU3ODIsIDM1Nzg4LCAzNTc5NywgMzU4MDcsIDM1ODEzLCAKLSAgICAzNTgyMSwgMzU4MzAsIDM1ODM3LCAzNTg0NSwgMzU4NTIsIDIyMDE5LCAzNTg1NiwgMzU4NjMsIDM1ODY5LCAzNTg3OSwgCi0gICAgMzU4ODgsIDM1ODk5LCAzNTkwMywgMzU5MTMsIDM1OTE5LCAzNTkyNiwgMzU5MzQsIDM1OTQzLCAzNTk1MiwgMzU5NjIsIAotICAgIDM1OTczLCAzNTk4MCwgMzU5ODUsIDM1OTkyLCAzMDI5LCAzNjAwMCwgMzYwMDYsIDM2MDExLCAzNjAxNywgMzYwMjMsIAotICAgIDM2MDI4LCAzNjA0MSwgMzYwNTQsIDM2MDY3LCAzNjA3NCwgMzYwODAsIDM2MDg4LCAzNjA5NiwgMzYxMDEsIDM2MTA1LCAKLSAgICAxNDY5LCAzNjEwOSwgMzYxMTQsIDM2MTE5LCAzNjEyNCwgMzYxMjksIDM2MTM1LCAzNjE0MCwgMzYxNDUsIDM2MTUwLCAKLSAgICAzNjE1NSwgMzYxNjAsIDM2MTY1LCAzNjE3MCwgMzYxNzYsIDM2MTgyLCAzNjE4NywgMzYxOTIsIDM2MTk4LCAzNjIwMywgCi0gICAgMzYyMDgsIDM2MjEzLCAzNjIxOSwgMzYyMjQsIDM2MjI5LCAzNjIzNCwgMzYyMzksIDM2MjQ1LCAzNjI1MCwgMzYyNTUsIAotICAgIDM2MjYxLCAzNjI2NiwgMzYyNzEsIDM2Mjc2LCAzNjI4MSwgMzYyODYsIDM2MjkyLCAzNjI5NywgMzYzMDMsIDM2MzA4LCAKLSAgICAzNjMxNCwgMzYzMTksIDM2MzI0LCAzNjMyOSwgMzYzMzUsIDM2MzQxLCAzNjM0NywgMzYzNTMsIDM2MzU5LCAzNjM2NSwgCi0gICAgMzYzNzEsIDM2Mzc3LCAzNjM4MiwgMzYzODcsIDM2MzkzLCAzNjM5OCwgMzY0MDMsIDM2NDA4LCAzNjQxMywgMzY0MTgsIAotICAgIDM2NDIzLCAzNjQyOCwgMzY0MzQsIDM2NDM5LCAzNjQ0NCwgMzY0NTAsIDM2NDU2LCAxMDEsIDM2NDYxLCAzNjQ2MywgCi0gICAgMzY0NjcsIDM2NDcxLCAzNjQ3NSwgMzY0ODAsIDM2NDg0LCA5NTIxLCAzNjQ4OCwgMzY0OTQsIDE3NDEsIDYyODAsIDM2NTAwLCAKLSAgICAzNjUwMywgMzY1MDgsIDM2NTEyLCAzNjUxNywgMzY1MjEsIDM2NTI1LCAzNjUzMCwgMTAyMzgsIDM2NTM0LCAzNjUzOCwgCi0gICAgMzY1NDIsIDM2NTQ2LCAxNTM3MiwgMzY1NTEsIDM2NTU1LCAzNjU2MCwgMzY1NjUsIDM2NTcwLCAzNjU3NCwgMzY1ODEsIAotICAgIDI2MTExLCAzNjU4NywgMzY1OTAsIDM2NTk0LCAzNjU5OSwgMzY2MDUsIDM2NjA5LCAzNjYxNywgMzY2MjMsIDM2NjI4LCAKLSAgICAzNjYzMiwgMzY2MzgsIDM2NjQyLCAzNjY0NiwgMzQ2MiwgMzQ2NywgMjkyMzQsIDM2NjQ5LCAzNjY1MywgMzY2NTcsIAotICAgIDM2NjYxLCAzNjY2OSwgMzY2NzYsIDM2NjgwLCAzNjY4NywgMzY2OTIsIDMxNywgMzY2OTcsIDM2NzAxLCAzNjcwNywgCi0gICAgMzY3MTksIDM2NzI1LCAzNjczMSwgMzY3MzUsIDM2NzQxLCAzNjc1MCwgMzY3NTQsIDM2NzU4LCAzNjc2MywgMzY3NjksIAotICAgIDM2Nzc0LCAzNjc3OCwgMzY3ODMsIDM2Nzg3LCAzNjc5MSwgMzY3OTgsIDM2ODA0LCAzNjgwOSwgMzY4MjQsIDM2ODM5LCAKLSAgICAzNjg1NCwgMzY4NzAsIDM2ODg4LCAxMDE4OCwgMzY5MDIsIDM2OTA5LCAzNjkxMywgMzY5MTYsIDM2OTI1LCAzNjkzMCwgCi0gICAgMzY5MzQsIDM2OTQyLCAzMzg5NCwgMzY5NTAsIDM2OTU0LCAzNjk2NCwgMzY5NzUsIDI5MjA0LCAzNjk4OCwgMzY5OTIsIAotICAgIDM3MDAxLCAzNzAwOSwgOTc3OCwgMTQ5MDAsIDM3MDEzLCAyMjQzNCwgMzcwMTYsIDMwMTUyLCAzNzAyMSwgOTc3NywgCi0gICAgMzcwMjYsIDM3MDMyLCAzNzAzNywgMzcwNDMsIDM3MDQ4LCAzNzA1NCwgMzcwNTksIDM3MDY1LCAzNzA3MCwgMzcwNzYsIAotICAgIDM3MDgyLCAzNzA4OCwgMzcwOTMsIDM3MDQ5LCAzNzA1NSwgMzcwNjAsIDM3MDY2LCAzNzA3MSwgMzcwNzcsIDM3MDgzLCAKLSAgICA4MTI2LCAzODc0LCAzNzA5NywgMzcxMDUsIDM3MTA5LCAzNzExMiwgMzcxMTYsIDM3MTIxLCAzNzEyNiwgMzcxMzIsIAotICAgIDM3MTM4LCAzNzE0MywgMzcxNDcsIDI1OTU5LCAzNzE1MSwgMzcxNTUsIDM3MTYxLCAzNzE2NSwgOTA0MiwgMzcxNzQsIAotICAgIDM3MTgxLCAzNzE4NSwgMTE4NjgsIDM3MTkyLCAzNzE5OCwgMzcyMDMsIDM3MjEwLCAzNzIxNywgMzcyMjQsIDI4NTUwLCAKLSAgICA4MDQ5LCAzNzIzMSwgMzcyMzgsIDM3MjQ1LCAzNzI1MSwgMzcyNTYsIDM3MjYzLCAzNzI3NCwgMzcyODAsIDM3Mjg1LCAKLSAgICAzNzI5MCwgMzcyOTUsIDM3MzAyLCAzNzA1MCwgMzczMDYsIDM3MzE2LCAzNzMyNywgMzczMzMsIDM3MzM4LCAzNzM0MywgCi0gICAgMzczNDgsIDM3MzUzLCAzNzM1OCwgMzczNjIsIDM3MzY2LCAzNzM3MiwgMzczODAsIDIzMTksIDg2NSwgMTAyNTQsIDEwMjY2LCAKLSAgICAxMDI3MSwgMTAyNzcsIDM3Mzg5LCAxMDI4MiwgMTAyODcsIDEwMjkzLCAzNzM5NCwgMzc0MDQsIDM3NDA4LCAxMDI5OCwgCi0gICAgMzc0MTMsIDE2ODkwLCAzNzQxNiwgMzc0MjEsIDM3NDI1LCAzNzQzMCwgMzc0MzUsIDM3NDQyLCAzNzQ0OSwgMzc0NTMsIAotICAgIDM3NDU2LCAzNzQ2NCwgMTAyMDEsIDM3NDcxLCAzNzQ3NCwgMzc0ODAsIDM3NDkwLCA1OTI5LCAzNzQ5OSwgMzc1MDMsIAotICAgIDM3NTExLCAzNzUxNSwgMzc1MjUsIDM3NTMxLCAzNzU0MiwgMzc1NDgsIDM3NTU0LCAzNzU1OSwgMzc1NjUsIDM3NTcxLCAKLSAgICAzNzU3NywgMzc1ODIsIDM3NTg1LCAzNzU5MiwgMzc1OTgsIDM3NjAzLCAzNzYxMCwgMzc2MTcsIDM3NjIxLCAzNzYzMSwgCi0gICAgMzc2NDQsIDM3NjUzLCAzNzY2MiwgMzc2NzMsIDM3Njg2LCAzNzY5NywgMzc3MDYsIDM3NzE3LCAzNzcyMiwgMzc3MzEsIAotICAgIDM3NzM2LCAxMDMwMywgMzc3NDIsIDM3NzQ5LCAzNzc1NywgMzc3NjIsIDM3NzY2LCAzNzc3MywgMzc3ODAsIDM4MjksIDE2LCAKLSAgICAzNzc4NCwgMzc3ODksIDE2NzQ0LCAzNzc5MywgMzc3OTYsIDM3Nzk5LCAyODA1NiwgMzc4MDMsIDI4NTU5LCAzNzgxMSwgCi0gICAgMzc4MTUsIDM3ODE5LCAzNzgyMiwgMzc4MjgsIDM3MDcyLCAzNzgzNCwgMzc4NDIsIDM3ODQ4LCAzNzg1NSwgMjgwMzksIAotICAgIDM3ODU5LCAyODIzMywgMzc4NjMsIDM3ODcyLCAzNzg3OCwgMzc4ODQsIDM3ODg5LCAzNzg5MywgMzc4OTksIDM3OTAzLCAKLSAgICAzNzkxMSwgMzc5MTksIDI2MTc3LCAzNzkyNSwgMzc5MzIsIDM3OTM4LCAzNzk0MywgMzc5NDgsIDM3OTUyLCAzNzk1OCwgCi0gICAgMzc5NjMsIDM3OTY5LCA0MDU2LCA3OTEsIDM3OTc2LCAzNzk4MCwgMzc5ODMsIDE1MjYyLCAzNzk5NSwgMzU4MjYsIDM4MDA2LCAKLSAgICAzODAwOSwgMzgwMTYsIDM4MDIwLCAzODAyNiwgMzgwMzAsIDM4MDM2LCAzODA0MSwgMzgwNDcsIDM4MDUyLCAzODA1NywgCi0gICAgMzgwNjEsIDM4MDY1LCAzODA3MCwgMzgwNzUsIDM4MDg1LCAzODA5MSwgMzgxMDQsIDM4MTEwLCAzODExNiwgMzgxMjMsIAotICAgIDM4MTI4LCAzODEzNCwgMzgxMzksIDE2NjMwLCAxNDcyLCAxMDE5LCAzMTE5MywgMzExOTksIDM4MTQ0LCAzMTIwNSwgCi0gICAgMzEyMTgsIDMxMjI0LCAzMTIzMCwgMzgxNTAsIDMxMjM2LCAzMTI0MiwgMzgxNTYsIDM4MTYyLCAyMiwgMzgxNzAsIDM4MTc3LCAKLSAgICAzODE4MSwgMzgxODUsIDM4MTkzLCAzMTk1MywgMzgxOTcsIDM4MjAxLCAzODIwOCwgMzgyMTMsIDM4MjE3LCAzODIyMiwgCi0gICAgMzgyMjgsIDM4MjMzLCAzODIzOSwgMzgyNDQsIDM4MjQ4LCAzODI1MiwgMzgyNTYsIDM4MjYxLCAzODI2NSwgMzgyNzAsIAotICAgIDM4Mjc0LCAzODI4MSwgMzgyODYsIDM4MjkwLCAzODI5NSwgMzgyOTksIDM4MzA0LCAzODMwOCwgMzgzMTMsIDM4MzE5LCAKLSAgICAxNTQ4MiwgMTU0ODcsIDM4MzI0LCAzODMyOCwgMzgzMzEsIDM4MzM1LCAyMTE3MCwgMzgzNDAsIDM4MzQ0LCAzODM1MCwgCi0gICAgMzgzNTcsIDM4MzYyLCAzODM3MiwgMzgzNzcsIDM4Mzg1LCAzODM4OSwgMzgzOTIsIDMxOTY4LCAzODM5NiwgNDEwOSwgCi0gICAgMzg0MDEsIDM4NDA2LCAzODQxMCwgMzg0MTUsIDM4NDE5LCAzODQyNCwgMTMzNjgsIDM4NDM1LCAzODQzOSwgMzg0NDIsIAotICAgIDM4NDQ3LCAzODQ1MSwgMzg0NTUsIDM4NDU4LCAzODQ2MiwgODE0NSwgMTMzODQsIDM4NDY1LCAzODQ2OCwgMzg0NzQsIAotICAgIDM4NDc5LCAzODQ4NSwgMzg0OTAsIDM4NDk2LCAzODUwMSwgMzg1MDcsIDM4NTEyLCAzODUxOCwgMzg1MjQsIDM4NTMwLCAKLSAgICAzODUzNSwgMzg1MzksIDM4NTQzLCAzODU1MiwgMzg1NjgsIDM4NTg0LCAzODU5NCwgMjc5NDYsIDM4NjAxLCAzODYwNSwgCi0gICAgMzg2MTAsIDM4NjE1LCAzODYxOSwgMzg2MjMsIDM1OTQ3LCAzODYyOSwgMzg2MzQsIDM4NjM4LCAzODY0NSwgMzg2NTAsIAotICAgIDM4NjU0LCAzODY1OCwgMjY5NzksIDM4NjY0LCAyMTQzOCwgMzg2NjksIDM4Njc2LCAzODY4NCwgMzg2OTAsIDM4Njk3LCAKLSAgICAzODcwNSwgMzg3MTEsIDM4NzE1LCAzODcyMSwgMzg3MjksIDM4NzMzLCAzODc0MiwgOTUwMiwgMzg3NTAsIDM4NzU0LCAKLSAgICAzODc2MiwgMzg3NjksIDM4Nzc0LCAzODc3OSwgMzg3ODMsIDM4Nzg2LCAzODc5MCwgMzg3OTMsIDM4Nzk3LCAzODgwNCwgCi0gICAgMzg4MDksIDM4ODE1LCAyNjM5OCwgMzEyNTYsIDM4ODE5LCAzODgyNiwgMzg4MzIsIDM4ODM4LCAzODg0MywgMzg4NDYsIAotICAgIDM4ODQ4LCAzODg1NSwgMzg4NjIsIDM4ODY4LCAzODg3MiwgMzg4NzUsIDM4ODc5LCAzODg4MywgMzg4ODcsIDM4ODkyLCAKLSAgICAzODg5NiwgMzg5MDAsIDM4OTAzLCAzODkwNywgMzg5MjEsIDIzMDQ1LCAzODk0MCwgMzg5NTMsIDM4OTY2LCAzODk3OSwgCi0gICAgMjMwNjMsIDM4OTk0LCAxMDQ5MCwgMzkwMDksIDM5MDE1LCAzOTAxOSwgMzkwMjMsIDM5MDMwLCAzOTAzNSwgMzkwMzksIAotICAgIDM5MDQ2LCAzOTA1MiwgMzkwNTcsIDM5MDYzLCAzOTA3MywgMzkwODUsIDM5MDk2LCAzOTEwMSwgMzkxMDgsIDM5MTEyLCAKLSAgICAzOTExNiwgMzkxMTksIDE1ODc4LCAzNjc3LCAzOTEyNywgMTU1MDksIDM5MTQwLCAzOTE0NywgMzkxNTEsIDM5MTU1LCAKLSAgICAzOTE2MCwgMzkxNjUsIDM5MTcxLCAzOTE3NSwgMzkxNzksIDM5MTgyLCA3NzQyLCAxNTUyMCwgMzkxODcsIDM5MTkxLCAKLSAgICAzOTE5NywgMzkyMDYsIDM5MjExLCAzOTIxOCwgMzU4MDMsIDM5MjI0LCAzOTIyOSwgMzkyMzMsIDM5MjM4LCAzOTI0NSwgCi0gICAgMzkyNDksIDM5MjUyLCAzOTI1NiwgMzkyNjEsIDE0NTUyLCAzOTI2OCwgMzkyNzUsIDEwNjYsIDM5Mjc5LCAzOTI4NCwgCi0gICAgMzkyODksIDM5Mjk1LCAzOTMwMCwgMzkzMDUsIDM5MzA5LCAzOTMxOSwgMzkzMjQsIDM5MzMwLCAzOTMzNSwgMzkzNDEsIAotICAgIDM5MzQ2LCAzOTM1MiwgMzkzNjIsIDM5MzY3LCAzOTM3MiwgMzkzNzYsIDcyMjksIDcyNDEsIDM5MzgxLCAzOTM4NCwgCi0gICAgMzkzOTEsIDM5Mzk3LCAzNDA1OSwgMzQwNjYsIDM5NDA2LCAzOTQxMCwgMzIwMTYsIDM5NDE4LCAzOTQyOSwgMzk0MzcsIAotICAgIDM1OTk1LCAzOTQ0NCwgMzk0NDksIDM5NDU0LCAzOTQ2NSwgMzk0NzIsIDM5NDgzLCAzMjA0MCwgMjE0NDQsIDM5NDkxLCAKLSAgICA3MzUsIDM5NDk2LCAzOTUwMiwgMjgwMzAsIDM5NTA4LCAzOTUxMywgMzk1MjMsIDM5NTMyLCAzOTUzOSwgMzk1NDUsIAotICAgIDM5NTQ5LCAzOTU1MiwgMzk1NTksIDM5NTY1LCAzOTU3MiwgMzk1NzgsIDM5NTg4LCAzOTU5NiwgMzk2MDIsIDM5NjA4LCAKLSAgICAzOTYxMywgMzk2MTcsIDM5NjI0LCAzOTYzMCwgMzk2MzcsIDM4ODg4LCA1MzUsIDEzODA1LCAzOTY0MywgMzk2NDgsIAotICAgIDM5NjUxLCAzOTY1NywgMzk2NjUsIDEzOTYsIDM5NjcwLCAzOTY3NCwgMzk2NzksIDM5Njg2LCAzOTY5MiwgMzk2OTYsIAotICAgIDM5NzAwLCAzOTcwNSwgMzk3MTQsIDM5NzIxLCAzOTczMSwgMzk3MzcsIDI4MDc0LCAzOTc1NCwgMzk3NjMsIDM5NzcxLCAKLSAgICAzOTc3NywgMzk3ODIsIDM5Nzg5LCAzOTc5NSwgMzk4MDMsIDM5ODEyLCAzOTgyMCwgMzk4MjQsIDM5ODI5LCAzOTgzNywgCi0gICAgMzIwNDksIDM5ODQzLCAzOTg2MiwgMTU4MTEsIDM5ODc2LCAzOTg5MiwgMzk5MDYsIDM5OTEyLCAzOTkxNywgMzk5MjIsIAotICAgIDM5OTI3LCAzOTkzMywgMzIwNTUsIDM5OTM4LCAzOTk0NSwgMzk5NTAsIDM5OTU0LCAzNDUsIDI5MzYsIDM5OTYxLCAzOTk2NiwgCi0gICAgMzk5NzEsIDI3MzA1LCAzOTc5MiwgMzk5NzUsIDM5OTgwLCAzOTk4OCwgMzk5OTIsIDM5OTk1LCA0MDAwMSwgNDAwMDcsIAotICAgIDQwMDExLCAyODEyOSwgNDAwMTQsIDQwMDE5LCA0MDAyMywgNDAwMjYsIDQwMDMxLCA0MDAzNSwgNDAwNDAsIDQwMDQ1LCAKLSAgICA0MDA0OSwgNDAwNTQsIDQwMDU4LCA0MDA2MiwgMjExNjYsIDIxMTc3LCA0MDA2NiwgNDAwNzEsIDQwMDc3LCAyNjkzNiwgCi0gICAgNDAwODIsIDQwMDg2LCAyMTI1MywgMTYwNTksIDQwMDg5LCA0MDA5NCwgNDAwOTksIDQwMTA0LCA0MDEwOSwgNDAxMTQsIAotICAgIDQwMTE5LCA0MDEyNCwgNDQ3LCA0MywgMzEyNzQsIDMxMjc5LCAzMTI4NCwgMzEyOTAsIDMxMjk1LCAzMTMwMCwgNDAxMjksIAotICAgIDMxMzA0LCA0MDEzMywgNDAxMzcsIDQwMTQxLCAzMTMwOSwgMzEzMTUsIDQwMTU1LCAzMTMyNiwgMzEzMzEsIDQwMTYzLCAKLSAgICA0MDE2OCwgMzEzMzcsIDQwMTczLCA0MDE3OCwgNDAxODMsIDQwMTg4LCA0MDE5NCwgNDAyMDAsIDQwMjA2LCAzMTM1NCwgCi0gICAgNDAyMTksIDQwMjI1LCAzMTM1OCwgNDAyMjksIDMxMzYzLCA0MDIzNCwgMzEzNjgsIDMxMzczLCA0MDIzNywgNDAyNDIsIAotICAgIDQwMjQ2LCAzMDkyMywgNDAyNTIsIDEzNTkyLCA0MDI1OSwgNDAyNjQsIDMxMzc4LCA0MDI2OCwgNDAyNzMsIDQwMjc4LCAKLSAgICA0MDI4MywgNDAyODcsIDQwMjkyLCA0MDI5NywgNDAzMDMsIDQwMzA4LCA0MDMxMywgNDAzMTksIDQwMzI1LCA0MDMzMCwgCi0gICAgNDAzMzQsIDQwMzM5LCA0MDM0NCwgNDAzNDksIDQwMzUzLCA0MDM1OCwgNDAzNjMsIDQwMzY4LCA0MDM3NCwgNDAzODAsIAotICAgIDQwMzg2LCA0MDM5MSwgNDAzOTUsIDQwNDAwLCA0MDQwNCwgMzEzODIsIDMxMzg3LCAzMTM5MiwgNDA0MDgsIDQwNDEyLCAKLSAgICA0MDQxNiwgMzEzOTcsIDMxNDAzLCAzMTQwOSwgMzE0MjEsIDQwNDI4LCAyNTk5NiwgNDA0MzIsIDQwNDM2LCA0MDQ0MSwgCi0gICAgNDA0NDYsIDQwNDUxLCA0MDQ1NiwgNDA0NjAsIDQwNDY0LCA0MDQ3NCwgNDA0NzksIDQwNDg0LCA0MDQ4OCwgNDA0OTIsIAotICAgIDQwNDk1LCA0MDUwMywgMzE0NjksIDQwNTA4LCAxNDc5LCA0MDUxNCwgNDA1MjIsIDQwNTMxLCA0MDUzNSwgNDA1MzksIAotICAgIDQwNTQ3LCA0MDU1MywgNDA1NjEsIDQwNTc3LCA0MDU4MSwgNDA1ODUsIDQwNTkwLCA0MDYwNSwgMzE1MDYsIDE3NDksIAotICAgIDEyMDQ4LCA0MDYwOSwgMTM3OCwgNDA2MjEsIDQwNjIyLCA0MDYzMCwgNDA2MzcsIDQwNjQyLCA0MDY0OSwgNDA2NTQsIAotICAgIDkzNzIsIDExMTQsIDEwMzI1LCA0MDY2MSwgNDA2NjYsIDQwNjY5LCA0MDY3MiwgNDA2ODEsIDEyODYsIDQwNjg2LCAzOTAzNiwgCi0gICAgNDA2OTMsIDQwNjk4LCAyMjQ4NiwgMjU1NywgNDA3MDIsIDEwNzM0LCA0MDcxMiwgNDA3MTgsIDIzMzcsIDIzNDcsIDQwNzI3LCAKLSAgICA0MDczNiwgNDA3NDYsIDQwNzU3LCAzMjkzLCAzNDIxMiwgMTAzNzcsIDM4MDcsIDE2NjY4LCAxMjkxLCA0MDc2MiwgNDA3NzAsIAotICAgIDQwNzc3LCA0MDc4MiwgNDA3ODYsIDQwNzkwLCAyMzg1OCwgMTA0MDQsIDQwNzk4LCA0MDgwNywgNDA4MTYsIDQwODI0LCAKLSAgICA0MDgzMSwgNDA4NDIsIDQwODQ3LCA0MDg2MCwgNDA4NzMsIDQwODg1LCA0MDg5NywgNDA5MDksIDQwOTIyLCA0MDkzMywgCi0gICAgNDA5NDQsIDQwOTU0LCA0MDk2MiwgNDA5NzAsIDQwOTgyLCA0MDk5NCwgNDEwMDUsIDQxMDE0LCA0MTAyMiwgNDEwMjksIAotICAgIDQxMDQxLCA0MTA0OCwgNDEwNTcsIDQxMDY0LCA0MTA3NywgNDEwODIsIDQxMDkyLCA0MTA5NywgNDExMDMsIDQxMTA4LCAKLSAgICAzNzE4MiwgNDExMTIsIDQxMTE5LCA0MTEyMywgNDExMzAsIDQxMTM4LCAyNTE4LCA0MTE0NSwgNDExNTYsIDQxMTY2LCAKLSAgICA0MTE3NSwgNDExODMsIDQxMTkzLCA0MTIwMSwgNDEyMTEsIDQxMjIwLCA0MTIyNSwgNDEyMzEsIDQxMjM3LCAzNzA5LCAKLSAgICA0MTI0OCwgNDEyNTgsIDQxMjY3LCA0MTI3NiwgNDEyODYsIDQxMjk0LCA0MTMwMywgNDEzMDgsIDQxMzEzLCA0MTMxOCwgCi0gICAgMTcwNSwgMzcsIDQxMzI2LCA0MTMzNCwgNDEzNDUsIDQxMzU2LCAxNjM0MywgNDEzNjYsIDQxMzcwLCA0MTM3NywgNDEzODMsIAotICAgIDQxMzg4LCA0MTM5MiwgNDE0MDMsIDQxNDEzLCA0MTQyMiwgNDE0MzMsIDE2NzE3LCAxNjcyMiwgNDE0MzgsIDQxNDQ3LCAKLSAgICA0MTQ1MiwgNDE0NjIsIDQxNDY3LCA0MTQ3NSwgNDE0ODMsIDQxNDkwLCA0MTQ5NiwgNzA3OCwgMjI4LCA0MTUwMCwgNDE1MDYsIAotICAgIDQxNTExLCA0MTUxNCwgMjExNywgMzkxNTIsIDQxNTIyLCA0MTUyNiwgNDE1MjksIDE1MTIsIDQxNTM1LCAxMzk2NywgMTI5NiwgCi0gICAgNDE1NDAsIDQxNTUzLCA0MTU2NywgMjY0MywgNDE1ODUsIDQxNTk3LCA0MTYwOSwgMjY1NywgMjY3NCwgNDE2MjMsIDQxNjM2LCAKLSAgICAyNjg5LCA0MTY1MCwgNDE2NjIsIDI3MDQsIDQxNjc2LCAxMzAyLCAxMzA4LCAxMzE0LCAxMDY1MiwgNDE2ODEsIDQxNjg2LCAKLSAgICA0MTY5MSwgNDE2OTUsIDQxNzEwLCA0MTcyNSwgNDE3NDAsIDQxNzU1LCA0MTc3MCwgNDE3ODUsIDQxODAwLCA0MTgxNSwgCi0gICAgNDE4MzAsIDQxODQ1LCA0MTg2MCwgNDE4NzUsIDQxODkwLCA0MTkwNSwgNDE5MjAsIDQxOTM1LCA0MTk1MCwgNDE5NjUsIAotICAgIDQxOTgwLCA0MTk5NSwgNDIwMTAsIDQyMDI1LCA0MjA0MCwgNDIwNTUsIDQyMDcwLCA0MjA4NSwgNDIxMDAsIDQyMTE1LCAKLSAgICA0MjEzMCwgNDIxNDUsIDQyMTYwLCA0MjE3NSwgNDIxOTAsIDQyMjA1LCA0MjIyMCwgNDIyMzUsIDQyMjUwLCA0MjI2NSwgCi0gICAgNDIyODAsIDQyMjk1LCA0MjMxMCwgNDIzMjUsIDQyMzQwLCA0MjM1NSwgNDIzNzAsIDQyMzg1LCA0MjQwMCwgNDI0MTUsIAotICAgIDQyNDMwLCA0MjQ0NSwgNDI0NjAsIDQyNDc1LCA0MjQ5MCwgNDI1MDUsIDQyNTIwLCA0MjUzNSwgNDI1NTAsIDQyNTY1LCAKLSAgICA0MjU4MCwgNDI1OTUsIDQyNjEwLCA0MjYyNSwgNDI2NDAsIDQyNjU1LCA0MjY3MCwgNDI2ODUsIDQyNzAwLCA0MjcxNSwgCi0gICAgNDI3MzAsIDQyNzQ1LCA0Mjc2MCwgNDI3NzUsIDQyNzkwLCA0MjgwNSwgNDI4MjAsIDQyODM1LCA0Mjg1MCwgNDI4NjUsIAotICAgIDQyODgwLCA0Mjg5NSwgNDI5MTAsIDQyOTI1LCA0Mjk0MCwgNDI5NTUsIDQyOTcwLCA0Mjk4NSwgNDMwMDAsIDQzMDE1LCAKLSAgICA0MzAzMCwgNDMwNDUsIDQzMDYwLCA0MzA3NSwgNDMwOTAsIDQzMTA1LCA0MzEyMCwgNDMxMzUsIDQzMTUwLCA0MzE2NSwgCi0gICAgNDMxODAsIDQzMTk1LCA0MzIxMCwgNDMyMjUsIDQzMjQwLCA0MzI1NSwgNDMyNzAsIDQzMjg1LCA0MzMwMCwgNDMzMTUsIAotICAgIDQzMzMwLCA0MzM0NSwgNDMzNjAsIDQzMzc1LCA0MzM5MCwgNDM0MDUsIDQzNDIwLCA0MzQzNSwgNDM0NTAsIDQzNDY1LCAKLSAgICA0MzQ4MCwgNDM0OTUsIDQzNTEwLCA0MzUyNSwgNDM1NDAsIDQzNTU1LCA0MzU3MCwgNDM1ODUsIDQzNjAwLCA0MzYxNSwgCi0gICAgNDM2MzAsIDQzNjQ1LCA0MzY2MCwgNDM2NzUsIDQzNjkwLCA0MzcwNSwgNDM3MjAsIDQzNzM1LCA0Mzc1MCwgNDM3NjUsIAotICAgIDQzNzgwLCA0Mzc5NSwgNDM4MTAsIDQzODI1LCA0Mzg0MCwgNDM4NTUsIDQzODcwLCA0Mzg4NSwgNDM5MDAsIDQzOTE1LCAKLSAgICA0MzkzMCwgNDM5NDUsIDQzOTYwLCA0Mzk3NSwgNDM5OTAsIDQ0MDA1LCA0NDAyMCwgNDQwMzUsIDQ0MDUwLCA0NDA2NSwgCi0gICAgNDQwODAsIDQ0MDk1LCA0NDExMCwgNDQxMjUsIDQ0MTQwLCA0NDE1NSwgNDQxNzAsIDQ0MTg1LCA0NDIwMCwgNDQyMTUsIAotICAgIDQ0MjMwLCA0NDI0NSwgNDQyNjAsIDQ0Mjc1LCA0NDI5MCwgNDQzMDUsIDQ0MzIwLCA0NDMzNSwgNDQzNTAsIDQ0MzY1LCAKLSAgICA0NDM4MCwgNDQzOTUsIDQ0NDEwLCA0NDQyNSwgNDQ0NDAsIDQ0NDU1LCA0NDQ3MCwgNDQ0ODUsIDQ0NTAwLCA0NDUxNSwgCi0gICAgNDQ1MzAsIDQ0NTQ1LCA0NDU2MCwgNDQ1NzUsIDQ0NTkwLCA0NDYwNSwgNDQ2MjAsIDQ0NjM1LCA0NDY1MCwgNDQ2NjUsIAotICAgIDQ0NjgwLCA0NDY5NSwgNDQ3MTAsIDQ0NzI1LCA0NDc0MCwgNDQ3NTUsIDQ0NzcwLCA0NDc4NSwgNDQ4MDAsIDQ0ODE1LCAKLSAgICA0NDgzMCwgNDQ4NDUsIDQ0ODYwLCA0NDg3NSwgNDQ4OTAsIDQ0OTA1LCA0NDkyMCwgNDQ5MzUsIDQ0OTUwLCA0NDk2NSwgCi0gICAgNDQ5ODAsIDQ0OTk1LCA0NTAxMCwgNDUwMjUsIDQ1MDQwLCA0NTA1NSwgNDUwNzAsIDQ1MDg1LCA0NTEwMCwgNDUxMTUsIAotICAgIDQ1MTMwLCA0NTE0NSwgNDUxNjAsIDQ1MTc1LCA0NTE5MCwgNDUyMDUsIDQ1MjIwLCA0NTIzNSwgNDUyNTAsIDQ1MjY1LCAKLSAgICA0NTI4MCwgNDUyOTUsIDQ1MzEwLCA0NTMyNSwgNDUzNDAsIDQ1MzU1LCA0NTM3MCwgNDUzODUsIDQ1NDAwLCA0NTQxNSwgCi0gICAgNDU0MzAsIDQ1NDQ1LCA0NTQ2MCwgNDU0NzUsIDQ1NDkwLCA0NTUwNSwgNDU1MjAsIDQ1NTM1LCA0NTU1MCwgNDU1NjUsIAotICAgIDQ1NTgwLCA0NTU5NSwgNDU2MTAsIDQ1NjI1LCA0NTY0MCwgNDU2NTUsIDQ1NjcwLCA0NTY4NSwgNDU3MDAsIDQ1NzE1LCAKLSAgICA0NTczMCwgNDU3NDUsIDQ1NzYwLCA0NTc3NSwgNDU3OTAsIDQ1ODA1LCA0NTgyMCwgNDU4MzUsIDQ1ODUwLCA0NTg2NSwgCi0gICAgNDU4ODAsIDQ1ODk1LCA0NTkxMCwgNDU5MjUsIDQ1OTQwLCA0NTk1NSwgNDU5NzAsIDQ1OTg1LCA0NjAwMCwgNDYwMTUsIAotICAgIDQ2MDMwLCA0NjA0NSwgNDYwNjAsIDQ2MDc1LCA0NjA5MCwgNDYxMDUsIDQ2MTIwLCA0NjEzNSwgNDYxNTAsIDQ2MTY1LCAKLSAgICA0NjE4MCwgNDYxOTUsIDQ2MjEwLCA0NjIyNSwgNDYyNDAsIDQ2MjU1LCA0NjI3MCwgNDYyODUsIDQ2MzAwLCA0NjMxNSwgCi0gICAgNDYzMzAsIDQ2MzQ1LCA0NjM2MCwgNDYzNzUsIDQ2MzkwLCA0NjQwNSwgNDY0MjAsIDQ2NDM1LCA0NjQ1MCwgNDY0NjUsIAotICAgIDQ2NDgwLCA0NjQ5NSwgNDY1MTAsIDQ2NTI1LCA0NjU0MCwgNDY1NTUsIDQ2NTcwLCA0NjU4NSwgNDY2MDAsIDQ2NjE1LCAKLSAgICA0NjYzMCwgNDY2NDUsIDQ2NjYwLCA0NjY3NSwgNDY2OTAsIDQ2NzA1LCA0NjcyMCwgNDY3MzUsIDQ2NzUwLCA0Njc2NSwgCi0gICAgNDY3ODAsIDQ2Nzk1LCA0NjgxMCwgNDY4MjUsIDQ2ODQwLCA0Njg1NSwgNDY4NzAsIDQ2ODg1LCA0NjkwMCwgNDY5MTUsIAotICAgIDQ2OTMwLCA0Njk0NSwgNDY5NjAsIDQ2OTc1LCA0Njk5MCwgNDcwMDUsIDQ3MDIwLCA0NzAzNSwgNDcwNTAsIDQ3MDY1LCAKLSAgICA0NzA4MCwgNDcwOTUsIDQ3MTEwLCA0NzEyNSwgNDcxNDAsIDQ3MTU1LCA0NzE3MCwgNDcxODUsIDQ3MjAwLCA0NzIxNSwgCi0gICAgNDcyMzAsIDQ3MjQ1LCA0NzI2MCwgNDcyNzUsIDQ3MjkwLCA0NzMwNSwgNDczMjAsIDQ3MzM1LCA0NzM1MCwgNDczNjUsIAotICAgIDQ3MzgwLCA0NzM5NSwgNDc0MTAsIDQ3NDI1LCA0NzQ0MCwgNDc0NTUsIDQ3NDcwLCA0NzQ4NSwgNDc1MDAsIDQ3NTE1LCAKLSAgICA0NzUzMCwgNDc1NDUsIDQ3NTYwLCA0NzU3NSwgNDc1OTAsIDQ3NjA1LCA0NzYyMCwgNDc2MzUsIDQ3NjUwLCA0NzY2NSwgCi0gICAgNDc2ODAsIDQ3Njk1LCA0NzcxMCwgNDc3MjUsIDQ3NzQwLCA0Nzc1NSwgNDc3NzAsIDQ3Nzg1LCA0NzgwMCwgNDc4MTUsIAotICAgIDQ3ODMwLCA0Nzg0NSwgNDc4NjAsIDQ3ODc1LCA0Nzg5MCwgNDc5MDUsIDQ3OTIwLCA0NzkzNSwgNDc5NTAsIDQ3OTY1LCAKLSAgICA0Nzk4MCwgNDc5OTUsIDQ4MDEwLCA0ODAyNSwgNDgwNDAsIDQ4MDU1LCA0ODA3MCwgNDgwODUsIDQ4MTAwLCA0ODExNSwgCi0gICAgNDgxMzAsIDQ4MTQ1LCA0ODE2MCwgNDgxNzUsIDQ4MTkwLCA0ODIwNSwgNDgyMjAsIDQ4MjM1LCA0ODI1MCwgNDgyNjUsIAotICAgIDQ4MjgwLCA0ODI5NSwgNDgzMTAsIDQ4MzI1LCA0ODM0MCwgNDgzNTUsIDQ4MzcwLCA0ODM4NSwgNDg0MDAsIDQ4NDE1LCAKLSAgICA0ODQzMCwgNDg0NDUsIDQ4NDYwLCA0ODQ3NSwgNDg0OTAsIDQ4NTA1LCA0ODUyMCwgNDg1MzUsIDQ4NTUwLCA0ODU2NSwgCi0gICAgNDg1ODAsIDQ4NTk1LCA0ODYxMCwgNDg2MjUsIDQ4NjQwLCA0ODY1NSwgNDg2NzAsIDQ4Njg1LCA0ODcwMCwgNDg3MTUsIAotICAgIDQ4NzMwLCA0ODc0NSwgNDg3NjAsIDQ4Nzc1LCA0ODc5MCwgNDg4MDUsIDQ4ODIwLCA0ODgzNSwgNDg4NTAsIDQ4ODY1LCAKLSAgICA0ODg4MCwgNDg4OTUsIDQ4OTEwLCA0ODkyNSwgNDg5NDAsIDQ4OTU1LCA0ODk3MCwgNDg5ODUsIDQ5MDAwLCA0OTAxNSwgCi0gICAgNDkwMzAsIDQ5MDQ1LCA0OTA2MCwgNDkwNzUsIDQ5MDkwLCA0OTEwNSwgNDkxMjAsIDQ5MTM1LCA0OTE1MCwgNDkxNjUsIAotICAgIDQ5MTgwLCA0OTE5NSwgNDkyMTAsIDQ5MjI1LCA0OTI0MCwgNDkyNTUsIDQ5MjcwLCA0OTI4NSwgNDkzMDAsIDQ5MzE1LCAKLSAgICA0OTMzMCwgNDkzNDUsIDQ5MzYwLCA0OTM3NSwgNDkzOTAsIDQ5NDA1LCA0OTQyMCwgNDk0MzUsIDQ5NDUwLCA0OTQ2NSwgCi0gICAgNDk0ODAsIDQ5NDk1LCA0OTUxMSwgNDk1MjcsIDQ5NTQzLCA0OTU1OSwgNDk1NzUsIDQ5NTkxLCA0OTYwNywgNDk2MjMsIAotICAgIDQ5NjM5LCA0OTY1NSwgNDk2NzEsIDQ5Njg3LCA0OTcwMywgNDk3MTksIDQ5NzM1LCA0OTc1MSwgNDk3NjcsIDQ5NzgzLCAKLSAgICA0OTc5OSwgNDk4MTUsIDQ5ODMxLCA0OTg0NywgNDk4NjMsIDQ5ODc5LCA0OTg5NSwgNDk5MTEsIDQ5OTI3LCA0OTk0MywgCi0gICAgNDk5NTksIDQ5OTc1LCA0OTk5MSwgNTAwMDcsIDUwMDIzLCA1MDAzOSwgNTAwNTUsIDUwMDcxLCA1MDA4NywgNTAxMDMsIAotICAgIDUwMTE5LCA1MDEzNSwgNTAxNTEsIDUwMTY3LCA1MDE4MywgNTAxOTksIDUwMjE1LCA1MDIzMSwgNTAyNDcsIDUwMjYzLCAKLSAgICA1MDI3OSwgNTAyOTUsIDUwMzExLCA1MDMyNywgNTAzNDMsIDUwMzU5LCA1MDM3NSwgNTAzOTEsIDUwNDA3LCA1MDQyMywgCi0gICAgNTA0MzksIDUwNDU1LCA1MDQ3MSwgNTA0ODcsIDUwNTAzLCA1MDUxOSwgNTA1MzUsIDUwNTUxLCA1MDU2NywgNTA1ODMsIAotICAgIDUwNTk5LCA1MDYxNSwgNTA2MzEsIDUwNjQ3LCA1MDY2MywgNTA2NzksIDUwNjk1LCA1MDcxMSwgNTA3MjcsIDUwNzQzLCAKLSAgICA1MDc1OSwgNTA3NzUsIDUwNzkxLCA1MDgwNywgNTA4MjMsIDUwODM5LCA1MDg1NSwgNTA4NzEsIDUwODg3LCA1MDkwMywgCi0gICAgNTA5MTksIDUwOTM1LCA1MDk1MSwgNTA5NjcsIDUwOTgzLCA1MDk5OSwgNTEwMTUsIDUxMDMxLCA1MTA0NywgNTEwNjMsIAotICAgIDUxMDc5LCA1MTA5NSwgNTExMTEsIDUxMTI3LCA1MTE0MywgNTExNTksIDUxMTc1LCA1MTE5MSwgNTEyMDcsIDUxMjIzLCAKLSAgICA1MTIzOSwgNTEyNTUsIDUxMjcxLCA1MTI4NywgNTEzMDMsIDUxMzE5LCA1MTMzNSwgNTEzNTEsIDUxMzY3LCA1MTM4MywgCi0gICAgNTEzOTksIDUxNDE1LCA1MTQzMSwgNTE0NDcsIDUxNDYzLCA1MTQ3OSwgNTE0OTUsIDUxNTExLCA1MTUyNywgNTE1NDMsIAotICAgIDUxNTU5LCA1MTU3NSwgNTE1OTEsIDUxNjA3LCA1MTYyMywgNTE2MzksIDUxNjU1LCA1MTY3MSwgNTE2ODcsIDUxNzAzLCAKLSAgICA1MTcxOSwgNTE3MzUsIDUxNzUxLCA1MTc2NywgNTE3ODMsIDUxNzk5LCA1MTgxNSwgNTE4MzEsIDUxODQ3LCA1MTg2MywgCi0gICAgNTE4NzksIDUxODk1LCA1MTkxMSwgNTE5MjcsIDUxOTQzLCA1MTk1OSwgNTE5NzUsIDUxOTkxLCA1MjAwNywgNTIwMjMsIAotICAgIDUyMDM5LCA1MjA1NSwgNTIwNzEsIDUyMDg3LCA1MjEwMywgNTIxMTksIDUyMTM1LCA1MjE1MSwgNTIxNjcsIDUyMTgzLCAKLSAgICA1MjE5OSwgNTIyMTUsIDUyMjMxLCA1MjI0NywgNTIyNjMsIDUyMjc5LCA1MjI5NSwgNTIzMTEsIDUyMzI3LCA1MjM0MywgCi0gICAgNTIzNTksIDUyMzc1LCA1MjM5MSwgNTI0MDcsIDUyNDIzLCA1MjQzOSwgNTI0NTUsIDUyNDcxLCA1MjQ4NywgNTI1MDMsIAotICAgIDUyNTE5LCA1MjUzNSwgNTI1NTEsIDUyNTY3LCA1MjU4MywgNTI1OTksIDUyNjE1LCA1MjYzMSwgNTI2NDcsIDUyNjYzLCAKLSAgICA1MjY3OSwgNTI2OTUsIDUyNzExLCA1MjcyNywgNTI3NDMsIDUyNzU5LCA1Mjc3NSwgNTI3OTEsIDUyODA3LCA1MjgyMywgCi0gICAgNTI4MzksIDUyODU1LCA1Mjg3MSwgNTI4ODcsIDUyOTAzLCA1MjkxOSwgNTI5MzUsIDUyOTUxLCA1Mjk2NywgNTI5ODMsIAotICAgIDUyOTk5LCA1MzAxNSwgNTMwMzEsIDUzMDQ3LCA1MzA2MywgNTMwNzksIDUzMDk1LCA1MzExMSwgNTMxMjcsIDUzMTQzLCAKLSAgICA1MzE1OSwgNTMxNzUsIDUzMTkxLCA1MzIwNywgNTMyMjMsIDUzMjM5LCA1MzI1NSwgNTMyNzEsIDUzMjg3LCA1MzMwMywgCi0gICAgNTMzMTksIDUzMzM1LCA1MzM1MSwgNTMzNjcsIDUzMzgzLCA1MzM5OSwgNTM0MTUsIDUzNDMxLCA1MzQ0NywgNTM0NjMsIAotICAgIDUzNDc5LCA1MzQ5NSwgNTM1MTEsIDUzNTI3LCA1MzU0MywgNTM1NTksIDUzNTc1LCA1MzU5MSwgNTM2MDcsIDUzNjIzLCAKLSAgICA1MzYzOSwgNTM2NTUsIDUzNjcxLCA1MzY4NywgNTM3MDMsIDUzNzE5LCA1MzczNSwgNTM3NTEsIDUzNzY3LCA1Mzc4MywgCi0gICAgNTM3OTksIDUzODE1LCA1MzgzMSwgNTM4NDcsIDUzODYzLCA1Mzg3OSwgNTM4OTUsIDUzOTExLCA1MzkyNywgNTM5NDMsIAotICAgIDUzOTU5LCA1Mzk3NSwgNTM5OTEsIDU0MDA3LCA1NDAyMywgNTQwMzksIDU0MDU1LCA1NDA3MSwgNTQwODcsIDU0MTAzLCAKLSAgICA1NDExOSwgNTQxMzUsIDU0MTUxLCA1NDE2NywgNTQxODMsIDU0MTk5LCA1NDIxNSwgNTQyMzEsIDU0MjQ3LCA1NDI2MywgCi0gICAgNTQyNzksIDU0Mjk1LCA1NDMxMSwgNTQzMjcsIDU0MzQzLCA1NDM1OSwgNTQzNzUsIDU0MzkxLCA1NDQwNywgNTQ0MjMsIAotICAgIDU0NDM5LCA1NDQ1NSwgNTQ0NzEsIDU0NDg3LCA1NDUwMywgNTQ1MTksIDU0NTM1LCA1NDU1MSwgNTQ1NjcsIDU0NTgzLCAKLSAgICA1NDU5OSwgNTQ2MTUsIDU0NjMxLCA1NDY0NywgNTQ2NjMsIDU0Njc5LCA1NDY5NSwgNTQ3MTEsIDU0NzI3LCA1NDc0MywgCi0gICAgNTQ3NTksIDU0Nzc1LCA1NDc5MSwgNTQ4MDcsIDU0ODIzLCA1NDgzOSwgNTQ4NTUsIDU0ODcxLCA1NDg4NywgNTQ5MDMsIAotICAgIDU0OTE5LCA1NDkzNSwgNTQ5NTEsIDU0OTY3LCA1NDk4MywgNTQ5OTksIDU1MDE1LCA1NTAzMSwgNTUwNDcsIDU1MDYzLCAKLSAgICA1NTA3OSwgNTUwOTUsIDU1MTExLCA1NTEyNywgNTUxNDMsIDU1MTU5LCA1NTE3NSwgNTUxOTEsIDU1MjA3LCA1NTIyMywgCi0gICAgNTUyMzksIDU1MjU1LCA1NTI3MSwgNTUyODcsIDU1MzAzLCA1NTMxOSwgNTUzMzUsIDU1MzUxLCA1NTM2NywgNTUzODMsIAotICAgIDU1Mzk5LCA1NTQxNSwgNTU0MzEsIDU1NDQ3LCA1NTQ2MywgNTU0NzksIDU1NDk1LCA1NTUxMSwgNTU1MjcsIDU1NTQzLCAKLSAgICA1NTU1OSwgNTU1NzUsIDU1NTkxLCA1NTYwNywgNTU2MjMsIDU1NjM5LCA1NTY1NSwgNTU2NzEsIDU1Njg3LCA1NTcwMywgCi0gICAgNTU3MTksIDU1NzM1LCA1NTc1MSwgNTU3NjcsIDU1NzgzLCA1NTc5OSwgNTU4MTUsIDU1ODMxLCA1NTg0NywgNTU4NjMsIAotICAgIDU1ODc5LCA1NTg5NSwgNTU5MTEsIDU1OTI3LCA1NTk0MywgNTU5NTksIDU1OTc1LCA1NTk5MSwgNTYwMDcsIDU2MDIzLCAKLSAgICA1NjAzOSwgNTYwNTUsIDU2MDcxLCA1NjA4NywgNTYxMDMsIDU2MTE5LCA1NjEzNSwgNTYxNTEsIDU2MTY3LCA1NjE4MywgCi0gICAgNTYxOTksIDU2MjE1LCA1NjIzMSwgNTYyNDcsIDU2MjYzLCA1NjI3OSwgNTYyOTUsIDU2MzExLCA1NjMyNywgNTYzNDMsIAotICAgIDU2MzU5LCA1NjM3NSwgNTYzOTEsIDU2NDA3LCA1NjQyMywgNTY0MzksIDU2NDU1LCA1NjQ3MSwgNTY0ODcsIDU2NTAzLCAKLSAgICA1NjUxOSwgNTY1MzUsIDU2NTUxLCA1NjU2NywgNTY1ODMsIDU2NTk5LCA1NjYxNSwgNTY2MzEsIDU2NjQ3LCA1NjY2MywgCi0gICAgNTY2NzksIDU2Njk1LCA1NjcxMSwgNTY3MjcsIDU2NzQzLCA1Njc1OSwgNTY3NzUsIDU2NzkxLCA1NjgwNywgNTY4MjMsIAotICAgIDU2ODM5LCA1Njg1NSwgNTY4NzEsIDU2ODg3LCA1NjkwMywgNTY5MTksIDU2OTM1LCA1Njk1MSwgNTY5NjcsIDU2OTgzLCAKLSAgICA1Njk5OSwgNTcwMTUsIDU3MDMxLCA1NzA0NywgNTcwNjMsIDU3MDc5LCA1NzA5NSwgNTcxMTEsIDU3MTI3LCA1NzE0MywgCi0gICAgNTcxNTksIDU3MTc1LCA1NzE5MSwgNTcyMDcsIDU3MjIzLCA1NzIzOSwgNTcyNTUsIDU3MjcxLCA1NzI4NywgNTczMDMsIAotICAgIDU3MzE5LCA1NzMzNSwgNTczNTEsIDU3MzY3LCA1NzM4MywgNTczOTksIDU3NDE1LCA1NzQzMSwgNTc0NDcsIDU3NDYzLCAKLSAgICA1NzQ3OSwgNTc0OTUsIDU3NTExLCA1NzUyNywgNTc1NDMsIDU3NTU5LCA1NzU3NSwgNTc1OTEsIDU3NjA3LCA1NzYyMywgCi0gICAgNTc2MzksIDU3NjU1LCA1NzY3MSwgNTc2ODcsIDU3NzAzLCA1NzcxOSwgNTc3MzUsIDU3NzUxLCA1Nzc2NywgNTc3ODMsIAotICAgIDU3Nzk5LCA1NzgxNSwgNTc4MzEsIDU3ODQ3LCA1Nzg2MywgNTc4NzksIDU3ODk1LCA1NzkxMSwgNTc5MjcsIDU3OTQzLCAKLSAgICA1Nzk1OSwgNTc5NzUsIDU3OTkxLCA1ODAwNywgNTgwMjMsIDU4MDM5LCA1ODA1NSwgNTgwNzEsIDU4MDg3LCA1ODEwMywgCi0gICAgNTgxMTksIDU4MTM1LCA1ODE1MSwgNTgxNjcsIDU4MTgyLCAxNjc0OSwgNTgxOTEsIDU4MTk3LCA1ODIwMywgNTgyMTMsIAotICAgIDU4MjIxLCAxNDg4MSwgMTU0MzIsIDk5NTMsIDU4MjM0LCAxNTIwLCA1ODI0MiwgMzc2MSwgMjc0MTUsIDcxODMsIDU4MjQ4LCAKLSAgICA1ODI1MywgNTgyNTgsIDU4MjYzLCA1ODI2OCwgNTgyNzQsIDU4Mjc5LCA1ODI4NSwgNTgyOTAsIDU4Mjk2LCA1ODMwMSwgCi0gICAgNTgzMDYsIDU4MzExLCA1ODMxNiwgNTgzMjIsIDU4MzI3LCA1ODMzMiwgNTgzMzcsIDU4MzQyLCA1ODM0NywgNTgzNTIsIAotICAgIDU4MzU3LCA1ODM2MywgNTgzNjgsIDU4Mzc0LCA1ODM4MSwgMjU2MSwgNTgzODYsIDU4MzkyLCA4NTI2LCA1ODM5NiwgCi0gICAgNTg0MDEsIDU4NDA4LCA1ODQxNiwgNDAsIDU4NDIwLCA1ODQyNiwgNTg0MzEsIDU4NDM2LCA1ODQ0MCwgNTg0NDUsIDU4NDQ5LCAKLSAgICA1ODQ1MywgMTA2NzcsIDU4NDU3LCA1ODQ2NywgNTg0ODAsIDU4NDkxLCA1ODUwNCwgNTg1MTEsIDU4NTE3LCA1ODUyMiwgCi0gICAgNTg1MjgsIDU4NTM0LCA1ODU0MCwgNTg1NDUsIDU4NTUwLCA1ODU1NSwgNTg1NjAsIDU4NTY0LCA1ODU2OSwgNTg1NzQsIAotICAgIDU4NTc5LCA1ODU4NSwgNTg1OTEsIDU4NTk3LCA1ODYwMiwgNTg2MDYsIDU4NjExLCA1ODYxNiwgNTg2MjAsIDU4NjI1LCAKLSAgICA1ODYzMCwgNTg2MzUsIDU4NjM5LCAxMDY5MywgMTA3MDQsIDEwNzA5LCAxNTYzLCA1ODY0MywgMTU2OCwgNTg2NDksIAotICAgIDE2MjI2LCA1ODY1MiwgNTg2NTgsIDE1OTksIDU4NjY0LCAxNjA1LCAxNjExLCAxMDczOSwgNTg2NjksIDU4Njc3LCA1ODY4NCwgCi0gICAgNTg2ODgsIDU4Njk0LCA1ODY5OSwgMzA5NTIsIDU4NzA0LCA1ODcxMSwgNTg3MTYsIDU4NzIwLCA1ODcyNCwgMTYxNiwgCi0gICAgMTYzMTgsIDU4NzMzLCA1ODczNywgMTYzMjksIDExMjAsIDU4NzQxLCA1ODc0OCwgNTg3NTMsIDU4NzU3LCAxNjM1NCwgCi0gICAgMTYyMCwgMzczMjEsIDU4NzYwLCA1ODc2NSwgNTg3NzUsIDU4Nzg0LCA1ODc4OSwgNTg3OTMsIDU4Nzk5LCAxNjI1LCAKLSAgICAzOTIzMCwgNTg4MDQsIDU4ODEzLCA1ODgxOSwgNTg4MjQsIDEwODk3LCAxMDkwMywgNTg4MzAsIDU4ODQyLCA1ODg1OSwgCi0gICAgNTg4NzYsIDU4ODkzLCA1ODkxMCwgNTg5MjcsIDU4OTQ0LCA1ODk2MSwgNTg5NzgsIDU4OTk1LCA1OTAxMiwgNTkwMjksIAotICAgIDU5MDQ2LCA1OTA2MywgNTkwODAsIDU5MDk3LCA1OTExNCwgNTkxMzEsIDU5MTQ4LCA1OTE2NSwgNTkxODIsIDU5MTk5LCAKLSAgICA1OTIxNiwgNTkyMzMsIDU5MjUwLCA1OTI2NywgNTkyODQsIDU5MzAxLCA1OTMxOCwgNTkzMzUsIDU5MzUyLCA1OTM2OSwgCi0gICAgNTkzODYsIDU5NDAzLCA1OTQyMCwgNTk0MzcsIDU5NDU0LCA1OTQ3MSwgNTk0ODgsIDU5NTA1LCA1OTUyMiwgNTk1MzksIAotICAgIDU5NTU2LCA1OTU3MywgNTk1OTAsIDU5NjA3LCA1OTYyNCwgNTk2NDEsIDU5NjU4LCA1OTY3NSwgNTk2ODYsIDU5NjkxLCAKLSAgICAxNjMwLCA1OTY5NSwgNTk3MDEsIDU5NzA2LCA1OTcxMSwgOTMxOSwgMTYzNSwgNTk3MTcsIDU5NzI2LCAyNzcxMCwgNTk3MzEsIAotICAgIDU5NzQyLCA1OTc1MiwgNTk3NTcsIDU5NzY0LCA1OTc3MCwgNTk3NzUsIDU5NzgwLCAxNjYwNiwgNTk3ODQsIDEwOTE0LCAKLSAgICAxNjQwLCAxMDkxOSwgNTk3OTAsIDU5Nzk1LCA1OTgwMSwgNTk4MDYsIDU5ODExLCA1OTgxNiwgNTk4MjEsIDU5ODI2LCAKLSAgICA1OTgzMSwgNTk4MzYsIDU5ODQyLCA1OTg0OCwgNTk4NTQsIDU5ODU5LCA1OTg2MywgNTk4NjgsIDU5ODczLCA1OTg3NywgCi0gICAgNTk4ODIsIDU5ODg3LCA1OTg5MiwgNTk4OTYsIDU5OTAxLCA1OTkwNywgNTk5MTIsIDU5OTE3LCA1OTkyMSwgNTk5MjYsIAotICAgIDU5OTMxLCA1OTkzNywgNTk5NDIsIDU5OTQ3LCA1OTk1MywgNTk5NTksIDU5OTY0LCA1OTk2OCwgNTk5NzMsIDU5OTc4LCAKLSAgICA1OTk4MywgNTk5ODcsIDU5OTkyLCA1OTk5NywgNjAwMDIsIDYwMDA4LCA2MDAxNCwgNjAwMTksIDYwMDIzLCA2MDAyNywgCi0gICAgNjAwMzIsIDYwMDM3LCA2MDA0MiwgMjkxMDgsIDYwMDQ2LCA2MDA1MSwgNjAwNTYsIDYwMDYyLCA2MDA2NywgNjAwNzIsIAotICAgIDYwMDc2LCA2MDA4MSwgNjAwODYsIDYwMDkyLCA2MDA5NywgNjAxMDIsIDYwMTA4LCA2MDExNCwgNjAxMTksIDYwMTIzLCAKLSAgICA2MDEyOCwgNjAxMzMsIDYwMTM3LCA2MDE0MiwgNjAxNDcsIDYwMTUyLCA2MDE1OCwgNjAxNjQsIDYwMTY5LCA2MDE3MywgCi0gICAgNjAxNzgsIDYwMTgzLCA2MDE4NywgNjAxOTIsIDYwMTk3LCA2MDIwMiwgNjAyMDYsIDYwMjA5LCAzMTYxNCwgNjAyMTQsIAotICAgIDYwMjIyLCAxNjY3MiwgMzY2MywgMTEwMTAsIDYwMjI4LCA2MDIzOCwgNjAyNTMsIDExMDE1LCA2MDI2NCwgNjAyNjksIAotICAgIDYwMjgwLCA2MDI5MiwgNjAzMDQsIDYwMzE2LCAyNjk1LCA2MDMyOCwgNjAzMzMsIDYwMzQ1LCA2MDM0OSwgNjAzNTUsIAotICAgIDYwMzYxLCA2MDM2NiwgMTY1MiwgMTA2NywgNjAzNzUsIDYwMzgwLCAzOTI4MCwgNjAzODQsIDYwMzg4LCA2MDM5MywgCi0gICAgNjAzOTcsIDE2NzU3LCA2MDQwMiwgNjA0MDUsIDYwNDEzLCA2MDQyMSwgMTY1NiwgMTEwNDAsIDExMDQ2LCAxNjYxLCAKLSAgICA2MDQyOSwgNjA0MzYsIDYwNDQxLCA2MDQ1MCwgNjA0NjAsIDYwNDY3LCA2MDQ3MiwgNjA0NzcsIDE2NjYsIDYwNDg0LCAKLSAgICA2MDQ4OSwgMTY4NzIsIDYwNDkzLCA2MDQ5OCwgNjA1MDUsIDYwNTExLCA2MDUxNSwgNjA1MjYsIDYwNTM2LCAxNjg5NCwgCi0gICAgOTIyNywgOTIzNCwgMTY3MSwgNjA1NDMsIDYwNTQ5LCA2MDU1NywgNjA1NjQsIDYwNTcwLCA2MDU3NywgNjA1ODksIDYwNTk1LCAKLSAgICA2MDYwMCwgNjA2MTIsIDYwNjIzLCA2MDYzMiwgNjA2NDIsIDM3NDAsIDMwNzg4LCAzMDc5NywgMTY5MzQsIDE2NzYsIDE2ODAsIAotICAgIDYwNjUwLCA2MDY2MSwgNjA2NjYsIDE2ODMsIDYwNjc0LCA2MDY3OSwgMTY5ODUsIDYwNjkxLCA2MDY5NywgNjA3MDIsIAotICAgIDYwNzEwLCAxNjg4LCA2MDcxNSwgNjA3MjAsIDYwNzI4LCA2MDczNiwgNjA3NDMsIDYwNzUyLCA2MDc2MCwgNjA3NjksIAotICAgIDE2OTMsIDYwNzczLCAxNjk4LCA2MDc3OCwgNjA3ODUsIDE3MDU5LCA2MDc5MywgNjA3OTksIDYwODA0LCA2MDgxMiwgCi0gICAgNjA4MTksIDYwODI3LCAyMjU1NywgNjA4MzIsIDExMTc1LCA2MDg0MSwgNjA4NDcsIDYwODU0LCA2MDg2MSwgNjA4NjcsIAotICAgIDYwODc3LCA2MDg4MywgNjA4ODgsIDYwODk5LCA2MDkwNCwgNjA5MTIsIDExMTg0LCAxMTE4OSwgNjA5MjAsIDYwOTI2LCAKLSAgICA2MDkzNCwgMzgwNSwgMTcxMDEsIDM5MzY4LCA2MDkzOSwgNjA5NDUsIDYwOTUwLCA2MDk1OCwgNjA5NjUsIDEyMDI5LCAKLSAgICA2MDk3MCwgNjA5NzYsIDE3MDksIDYwOTgxLCA2MDk4NCwgMTEyNywgNjA5OTAsIDYwOTk1LCA2MTAwMCwgNjEwMDYsIAotICAgIDYxMDExLCA2MTAxNiwgNjEwMjEsIDYxMDI2LCA2MTAzMSwgNjEwMzYsIDE3MTgsIDksIDYxMDQyLCA2MTA0NiwgNjEwNTEsIAotICAgIDYxMDU1LCA2MTA1OSwgNjEwNjMsIDMxODU0LCA2MTA2OCwgNjEwNzMsIDYxMDc4LCA2MTA4MiwgNjEwODUsIDYxMDg5LCAKLSAgICA2MTA5MywgNjEwOTgsIDYxMTAyLCA2MTEwNywgNjExMTEsIDM0NTkxLCAzNDU5NiwgMzQ2MDEsIDYxMTE0LCA2MTEyMSwgCi0gICAgNjExMjcsIDM5MDg5LCA2MTEzNywgMzQ2MDcsIDMyMTEyLCAzMTg2OSwgMzE4NzUsIDM0NjIzLCAzMTg4MSwgNjExNDIsIAotICAgIDYxMTQ3LCAzMjE0NSwgNjExNTEsIDYxMTU0LCA2MTE1OCwgNjExNjUsIDYxMTY4LCA2MTE3MywgNjExNzcsIDYxMTgxLCAKLSAgICA2MTE4NCwgNjExOTQsIDYxMjA2LCA2MTIxMywgNjEyMTksIDYxMjI2LCAzMzU0OCwgNjEyMjksIDg1NDMsIDg3NywgNjEyMzIsIAotICAgIDYxMjM2LCA2MTI0MSwgMzY5MCwgNjEyNDUsIDYxMjQ4LCAxMzYyNSwgNjEyNTUsIDYxMjYyLCA2MTI3NSwgNjEyODMsIAotICAgIDYxMjkyLCA2MTMwMSwgNjEzMDYsIDYxMzE2LCA2MTMyOSwgNjEzNDEsIDYxMzQ4LCA2MTM1MywgNjEzNjIsIDYxMzc1LCAKLSAgICAzNjAzNSwgNjEzOTMsIDYxMzk4LCA2MTQwNSwgNjE0MTEsIDY1MiwgNjE0MTYsIDYxNDI0LCA2MTQzMSwgMjcyNTQsIDYyNywgCi0gICAgNjE0MzcsIDYxNDQzLCA2MTQ1MywgNjE0NTksIDYxNDY0LCAzMTg5OSwgNjAwMywgMzE5MTMsIDYxNDY4LCA2MTQ3OCwgCi0gICAgNjE0ODMsIDYxNDkzLCA2MTUwOCwgNjE1MTQsIDYxNTIwLCAzMTkyMywgNjE1MjUsIDMxMDY5LCA2MTUyOSwgNjE1MzQsIAotICAgIDYxNTM5LCA2MTU0MywgNjE1NDgsIDE2OTM3LCA2MTU1NSwgNjE1NjAsIDYxNTY0LCA2MDQ0LCAzMTk0OSwgNjE1NjgsIAotICAgIDYxNTc0LCAzMTIsIDYxNTg0LCA2MTU5MSwgNjE1OTgsIDYxNjAzLCA2MTYxMiwgNTg3NjksIDYxNjE4LCA2MTYyNiwgCi0gICAgNjE2MzAsIDYxNjM0LCA2MTYzOCwgNjE2NDIsIDYxNjQ3LCA2MTY1MSwgNjE2NTcsIDYxNjY1LCA2MTY3MCwgNjE2NzUsIAotICAgIDYxNjc5LCA2MTY4NCwgNjE2ODgsIDYxNjkyLCA2MTY5OCwgNjE3MDQsIDYxNzA5LCA2MTcxMywgMzIwNzMsIDYxNzE4LCAKLSAgICAzMjA3OSwgMzIwODUsIDYxNzIzLCA2MTcyOSwgNjE3MzYsIDYxNzQxLCA2MTc0NSwgMzEwODYsIDE2NTk5LCA2MTc0OCwgCi0gICAgNjE3NTIsIDYxNzU3LCA2MTc2NCwgNjE3NzAsIDYxNzc0LCA2MTc3OSwgMzg3OTksIDYxNzg1LCA2MTc4OSwgNjE3OTMsIAotICAgIDYxNzk4LCA2MTgwNCwgNjE4MTAsIDYxODIyLCA2MTgzMSwgNjE4NDEsIDYxODQ3LCA2MTg1NCwgNjE4NTksIDYxODY0LCAKLSAgICA2MTg2OCwgNjE4NzEsIDYxODc3LCA2MTg4NCwgNjE4ODksIDYxODk0LCA2MTkwMSwgNjE5MDgsIDYxOTE0LCA2MTkxOSwgCi0gICAgNjE5MjQsIDYxOTMyLCAzMjA5MCwgMjQyMywgNjE5MzcsIDYxOTQyLCA2MTk0OCwgNjE5NTMsIDYxOTU5LCA2MTk2NCwgCi0gICAgNjE5NjksIDYxOTc0LCA2MTk4MCwgMzIxMTEsIDYxOTg1LCA2MTk5MSwgNjE5OTcsIDYyMDAzLCAzMjE3NSwgNjIwMDgsIAotICAgIDYyMDEzLCA2MjAxOCwgMzIxODYsIDYyMDIzLCA2MjAyOCwgNjIwMzMsIDYyMDM5LCA2MjA0NSwgMzIxOTEsIDYyMDUwLCAKLSAgICA2MjA1NSwgNjIwNjAsIDMyMjQ2LCAzMjI1MiwgNjIwNjUsIDYyMDcwLCAzMjI1NywgNjIwNzUsIDI3OTM3LCAzMjI3OSwgCi0gICAgMzIyODMsIDYyMDgwLCA2MjA1NiwgNjIwODQsIDYyMDkyLCA2MjA5OCwgNjIxMDYsIDYyMTEzLCA2MjExOSwgNjIxMjksIAotICAgIDYyMTM1LCA2MjE0MiwgMTA2MjQsIDMyMjk3LCA2MjE0OCwgNjIxNjEsIDYyMTcwLCA2MjE3NiwgNjIxODUsIDYyMTkxLCAKLSAgICAyMzQ5NSwgNjIxOTgsIDYyMjA1LCA2MjIxNSwgMzIyNDcsIDYyMjE4LCA2MjIyNSwgNjIyMzAsIDYyMjM0LCA2MjIzOCwgCi0gICAgNjIyNDMsIDYxMjAsIDYyMjQ3LCA2MjI1MiwgNjIyNTcsIDM0Njg1LCAzNDY5MCwgNjIyNjEsIDM0NzA0LCA2MjI2NiwgCi0gICAgMzQ3MDksIDYyMjcxLCA2MjI3NywgMzQ3MjEsIDM0NzI3LCAzNDczMywgNjIyODIsIDYyMjg4LCAyMjUyMiwgNjIyOTksIAotICAgIDYyMzAyLCA2MjMxNCwgNjIzMjIsIDMyMzIwLCA2MjMyNiwgNjIzMzUsIDYyMzQ1LCA2MjM1NCwgMzIzMzAsIDYyMzU5LCAKLSAgICA2MjM2NiwgNjIzNzUsIDYyMzgxLCA2MjM4OSwgNjIzOTYsIDYwOTUsIDQzOTcsIDYyNDAxLCAzMjI1OCwgNjI0MDcsIAotICAgIDYyNDEwLCA2MjQxNiwgNjI0MjMsIDYyNDI4LCA2MjQzMywgMjM0MDUsIDYyNDM3LCA2MjQ0MywgNjI0NDksIDYyNDU0LCAKLSAgICA2MjQ1OSwgNjI0NjMsIDYyNDY5LCA2MjQ3NSwgMzM0NTgsIDg2MywgMzU2OTgsIDM2NjE5LCAzNjYyNSwgMzIzNjYsIAotICAgIDYyNDgwLCA2MjQ4NCwgNjI0ODgsIDYyNDkxLCA2MjUwNCwgNjI1MTAsIDYyNTE0LCA2MjUxNywgNjI1MjIsIDMzNzYxLCAKLSAgICA2MjUyNiwgMzEwOTEsIDIxMjc0LCA2MjUzMiwgNjAyNCwgNjAzMiwgOTA2OCwgNjI1MzUsIDYyNTQwLCA2MjU0NSwgNjI1NTAsIAotICAgIDYyNTU1LCA2MjU2MCwgNjI1NjUsIDYyNTcwLCA2MjU3NSwgNjI1ODAsIDYyNTg2LCA2MjU5MSwgNjI1OTYsIDYyNjAyLCAKLSAgICA2MjYwNywgNjI2MTIsIDYyNjE3LCA2MjYyMiwgNjI2MjcsIDYyNjMyLCA2MjYzOCwgNjI2NDMsIDYyNjQ5LCA2MjY1NCwgCi0gICAgNjI2NTksIDYyNjY0LCA2MjY2OSwgNjI2NzQsIDYyNjc5LCA2MjY4NCwgNjI2ODksIDYyNjk0LCA2MjY5OSwgNjI3MDUsIAotICAgIDYyNzEwLCA2MjcxNSwgNjI3MjAsIDYyNzI1LCA2MjczMCwgNjI3MzUsIDYyNzQxLCA2Mjc0NiwgNjI3NTEsIDYyNzU2LCAKLSAgICA2Mjc2MSwgNjI3NjYsIDYyNzcxLCA2Mjc3NiwgNjI3ODEsIDYyNzg2LCA2Mjc5MiwgNjI3OTcsIDYyODAyLCA2MjgwNywgCi0gICAgNjI4MTIsIDYyODE4LCA2MjgyNCwgNjI4MjksIDYyODM1LCA2Mjg0MCwgNjI4NDUsIDYyODUwLCA2Mjg1NSwgNjI4NjAsIAotICAgIDE1MTMsIDI0NSwgNjI4NjUsIDYyODY5LCA2Mjg3MywgNjI4NzcsIDI1MTE2LCA2Mjg4MSwgNjI4ODUsIDYyODkwLCA2Mjg5NCwgCi0gICAgNjI4OTksIDYyOTAzLCA2MjkwOCwgNjI5MTMsIDYyOTE4LCA2MjkyMiwgNjI5MjYsIDYyOTMxLCA2MjkzNSwgMTMzNjIsIAotICAgIDYyOTQwLCA2Mjk0NCwgNjI5NTEsIDYyOTYxLCAxNTE5MywgNjI5NzAsIDYyOTc5LCA2Mjk4MywgNjI5ODgsIDYyOTkzLCAKLSAgICA2Mjk5NywgMjQ5MDcsIDMwMTksIDYzMDAxLCAxNzM1MCwgNjMwMDcsIDYzMDE2LCA2MzAyNCwgNjMwMzAsIDYzMDQyLCAKLSAgICA2MzA1NCwgNjMwNTgsIDYzMDYzLCA2MzA2NywgNjMwNzMsIDYzMDc5LCA2MzA4NCwgNjMwOTQsIDYzMTA0LCA2MzExMCwgCi0gICAgNjMxMTUsIDYzMTE5LCA2MzEyNCwgNjMxMzAsIDYzMTM5LCA2MzE0OCwgNjMxNTYsIDE1NTQ3LCA2MzE2MCwgNjMxNjksIAotICAgIDYzMTc3LCA2MzE4OSwgNjMyMDAsIDYzMjExLCA2MzIyMCwgNjMyMjQsIDYzMjMzLCA2MzI0MywgNjMyNTEsIDYzMjU3LCAKLSAgICA2MzI2MiwgNjMyNjgsIDYzMjczLCA5OCwgMzA5MDAsIDYzMjg0LCAyNjI0OSwgMjYyNTksIDYzMjkwLCA2MzI5NywgNjMzMDMsIAotICAgIDYzMzA3LCA2MzMxNywgNjMzMjgsIDYzMzM2LCA2MzM0NSwgNjMzNTAsIDYzMzU1LCA2MzM1OSwgMTczMDQsIDYzMzY3LCAKLSAgICA2MzM3MSwgNjMzNzcsIDYzMzg3LCA2MzM5NCwgNjM0MDAsIDM0Nzg0LCA2MzQwNiwgNjM0MDgsIDYzNDExLCA2MzQxNSwgCi0gICAgNjM0MjUsIDYzNDMxLCA2MzQzOCwgMTMzMDgsIDYzNDQ1LCA2MzQ1MSwgNjM0NjAsIDYzNDY5LCA2MzQ3NSwgNjM0ODEsIAotICAgIDYzNDg3LCA2MzQ5MiwgNjM0OTksIDYzNTA2LCA2MzUxMiwgNjM1MjUsIDYzNTM0LCA2MzU0MywgNjM1NDgsIDYzNTUyLCAKLSAgICA2MzU1OCwgNjM1NjUsIDYzNTcyLCA2MzU3OSwgNjM1ODYsIDYzNTkzLCA2MzU5OCwgNjM2MDIsIDYzNjA2LCA2MzYwOSwgCi0gICAgNjM2MTksIDYzNjIzLCA2MzYzNSwgNjM2NDQsIDYzNjQ4LCA2MzY1MywgNjM2NTcsIDYzNjYzLCA2MzY2OCwgNjM2NzUsIAotICAgIDYzNjg0LCA2MzY5MiwgNjM3MDAsIDYzNzA1LCA2MzcwOSwgNjM3MTQsIDYzNzE5LCA2MzcyOSwgNjM3MzcsIDYzNzQyLCAKLSAgICA2Mzc0NiwgNjM3NTAsIDYzNzU2LCA2Mzc2OCwgNjM3NzYsIDYzNzg2LCA2Mzc5MywgNjM3OTksIDYzODA0LCA2MzgwOCwgCi0gICAgNjM4MTIsIDYzODE2LCA2MzgyNSwgNjM4MzQsIDYzODQzLCA2Mzg0OSwgNjM4NTUsIDYzODYxLCA2Mzg2NiwgNjM4NzMsIAotICAgIDYzODc5LCA2Mzg4NywgNjM4OTQsIDEyNDU2LCA2MzkwMCwgNjM5MDYsIDYzOTEwLCAxNDIzMSwgNjM5MTQsIDYzOTE5LCAKLSAgICA2MzkyOSwgNjM5MzgsIDYzOTQ0LCA2Mzk1MCwgNjM5NTgsIDYzOTY1LCA2Mzk2OSwgNjM5NzMsIDYzOTc5LCA2Mzk4NywgCi0gICAgNjM5OTQsIDY0MDAwLCA2NDAxMSwgNjQwMTUsIDY0MDE5LCA2NDAyMywgNjQwMjYsIDY0MDMyLCA2NDAzNywgNjQwNDEsIAotICAgIDY0MDQ1LCA2NDA1NCwgNjQwNjIsIDY0MDY5LCA2NDA3NSwgNjQwODIsIDI0MDI5LCAzODg0MSwgNjQwODcsIDY0MDk1LCAKLSAgICA2NDA5OSwgNjQxMDMsIDY0MTA2LCA2NDExNCwgNjQxMjEsIDY0MTI3LCA2NDEzNiwgNjQxNDQsIDY0MTUwLCA2NDE1NSwgCi0gICAgNjQxNTksIDY0MTY0LCA2NDE2OCwgNjQxNzIsIDY0MTc3LCA2NDE4NiwgNjQxOTAsIDY0MTk3LCA2NDIwNCwgNjQyMTAsIAotICAgIDY0MjE4LCA2NDIyNCwgNjQyMzUsIDY0MjQzLCA2NDI0OSwgMjI2NTIsIDY0MjU4LCA2NDI2NSwgNjQyNzIsIDY0Mjc5LCAKLSAgICA2NDI4NiwgNjQyOTMsIDQxODcwLCAxMzE0NiwgNjQzMDAsIDY0MzA3LCA2NDMxMiwgMzQ4MjAsIDYyMTcsIDY0MzE4LCAKLSAgICA2NDMyMywgNjQzMjgsIDY0MzM0LCA2NDM0MCwgNjQzNDYsIDY0MzUxLCA2NDM1NiwgNjQzNjEsIDY0MzY2LCA2NDM3MiwgCi0gICAgNjQzNzcsIDY0MzgzLCA2NDM4OCwgNjQzOTQsIDY0Mzk5LCA2NDQwNCwgNjQ0MDksIDY0NDE0LCA2NDQxOSwgNjQ0MjQsIAotICAgIDY0NDI5LCA2NDQzNSwgNjQ0NDAsIDY0NDQ2LCA2NDQ1MSwgNjQ0NTYsIDY0NDYxLCA2NDQ2NiwgNjQ0NzEsIDY0NDc2LCAKLSAgICA2NDQ4MiwgNjQ0ODcsIDY0NDkyLCA2NDQ5NywgNjQ1MDIsIDY0NTA3LCA2NDUxMiwgNjQ1MTcsIDY0NTIyLCA2NDUyNywgCi0gICAgNjQ1MzIsIDY0NTM4LCA2NDU0MywgNjQ1NDgsIDY0NTUzLCA2NDU1OCwgNjQ1NjMsIDY0NTY4LCA2NDU3MywgNjQ1NzgsIAotICAgIDY0NTg0LCA2NDU4OSwgNjQ1OTQsIDY0NTk5LCA2NDYwNCwgNjQ2MDksIDY0NjE0LCA2NDYxOSwgNjQ2MjQsIDY0NjI5LCAKLSAgICA2NDYzNCwgNjQ2MzksIDY0NjQ0LCA2NDY1MCwgMTgzNCwgMjI0LCAzNzQxNywgNjQ2NTUsIDY0NjU4LCA2NDY2MywgNjQ2NjcsIAotICAgIDY0NjcwLCA2NDY3NSwgNjM2OTYsIDY0Njg2LCA2NDY5NiwgNjQ3MDMsIDY0NzE5LCA2NDcyOCwgNjQ3MzgsIDY0NzQ4LCAKLSAgICA2NDc1NiwgNjQ3NzAsIDY0Nzc4LCA2NDc4MiwgNjQ3ODUsIDY0NzkyLCA2NDc5OCwgNjQ4MDksIDY0ODIxLCA2NDgzMiwgCi0gICAgNjQ4NDEsIDY0ODQ4LCAxMjk3LCAyMzI5NCwgNjQ4NTgsIDI1OTAsIDY0ODYyLCA2NDg3MSwgMTEzMywgMTcyNzcsIDM4MDU0LCAKLSAgICA2NDg3OSwgNjQ4ODcsIDY0OTAxLCA2NDkxNCwgNjQ5MTgsIDY0OTIzLCA2NDkyOCwgNjQ5MzMsIDY0OTM5LCA2NDk0NSwgCi0gICAgNjQ5NTAsIDg1MzUsIDY0OTU1LCA2NDk1OSwgNjQ5NjcsIDExMDQxLCA2NDk3MiwgNjQ5NzgsIDY0OTg3LCAxNzIxLCAKLSAgICAxMTA1MywgNzM2LCA2NDk5MSwgNjUwMDAsIDY1MDEwLCAyNzAxMywgNjUwMTksIDY1MDI1LCAxNjg0OSwgNjUwMzEsIAotICAgIDY1MDM1LCAzOTY0LCAxMTM4NCwgNjUwNDEsIDY1MDQ4LCA2MDY1NiwgNjUwNTIsIDY1MDU2LCAzOTg4LCAxODksIDE0MTQ2LCAKLSAgICA2NTA2MiwgNjUwNzQsIDY1MDc4LCA2NTA4NCwgMjc3MzAsIDY1MDg4LCAxMTM3MiwgMjczMCwgNCwgNjUwOTMsIDY1MTAzLCAKLSAgICA2NTEwOSwgNjUxMjAsIDY1MTI3LCA2NTEzMywgNjUxMzksIDY1MTQ3LCA2NTE1NCwgNjUxNjAsIDY1MTcwLCA2NTE4MCwgCi0gICAgNjUxOTAsIDIzNDgyLCAxMzA5LCA2NTE5OSwgNjUyMDMsIDY1MjA3LCA2NTIxMywgNjUyMTcsIDI3NTMsIDI3NTksIDg1MzIsIAotICAgIDIyNjQsIDY1MjIxLCA2NTIyNSwgNjUyMzQsIDY1MjQyLCA2NTI1MywgNjUyNjEsIDY1MjY5LCA2NTI3NSwgNjUyODAsIAotICAgIDY1MjkxLCA2NTMwMiwgNjUzMTAsIDY1MzE2LCA5Njg3LCA2NTMyMSwgNjUzMjksIDY1MzMzLCA2NTMzNywgNjUzNDEsIAotICAgIDY1MzUzLCAyODExNSwgNjUzNjAsIDY1MzcwLCA2NTM3NiwgNjUzODIsIDk3ODksIDY1MzkyLCA2NTQwMywgNjU0MTMsIAotICAgIDY1NDIyLCA2NTQyNiwgNjU0MzMsIDExMzUsIDExNzAsIDY1NDQzLCA2NTQ0OCwgNjU0NTYsIDY1NDY0LCA2NTQ3NSwgCi0gICAgNjU0ODIsIDY1NDk2LCAxNDA3NSwgMzkzLCA2NTUwNiwgNjU1MTAsIDY1NTE4LCA2NTUyNywgNjU1MzUsIDY1NTQxLCAKLSAgICA2NTU1NSwgNjU1NjIsIDY1NTY4LCA2NTU3NywgNjU1ODQsIDY1NTk0LCA2NTYwMiwgMzgxMiwgMTU2LCA2NTYxMCwgNjU2MjEsIAotICAgIDY1NjI1LCA2NTYzNywgMjc5MjgsIDE2MSwgNjU2NDMsIDY1NjQ4LCA2NTY1MiwgNjU2NTksIDY1NjY1LCA2NTY3MywgCi0gICAgNjU2ODAsIDg4MTgsIDY1Njg3LCA2NTY5NiwgNjU3MDQsIDM4NzgsIDY1NzE3LCA4MTk5LCA2NTcyMSwgMjc5OCwgNDUwLCAKLSAgICA2NTcyNiwgNjU3MzksIDY1NzQ0LCAxODMzLCA2NjgsIDY1NzQ4LCAzODk1LCA2NTc1NiwgNjU3NjIsIDY1NzY2LCA5MzEsIAotICAgIDY1Nzc2LCA2NTc4NSwgNjU3OTAsIDE0OTE1LCAxNDkyMiwgNDUyMzIsIDY1Nzk0LCAzODIyLCAxMzAzNCwgNjU4MDIsIAotICAgIDY1ODA5LCAyMzUzOCwgNjU4MTMsIDY1ODIwLCA2NTgyNiwgNjU4MzEsIDY1ODM2LCAxNDkzNSwgMzcyLCA2NTg0MSwgCi0gICAgNjU4NTMsIDY1ODU5LCA2NTg2NywgMjgxMCwgMTc1MywgNjU4NzUsIDY1ODc3LCA2NTg4MiwgNjU4ODcsIDY1ODkyLCAKLSAgICA2NTg5OCwgNjU5MDMsIDY1OTA4LCA2NTkxMywgNjU5MTgsIDY1OTIzLCA2NTkyOCwgNjU5MzQsIDY1OTM5LCA2NTk0NCwgCi0gICAgNjU5NDksIDY1OTU0LCA2NTk1OSwgNjU5NjQsIDY1OTY5LCA2NTk3NCwgNjU5ODAsIDY1OTg1LCA2NTk5MCwgNjU5OTUsIAotICAgIDY2MDAxLCA2NjAwNiwgNjYwMTIsIDY2MDE3LCA2NjAyMiwgNjYwMjcsIDY2MDMyLCA2NjAzNywgNjYwNDIsIDY2MDQ3LCAKLSAgICA2NjA1MywgNjYwNTgsIDY2MDY0LCA2NjA2OSwgNjYwNzQsIDY2MDc5LCA2NjA4NCwgNjYwODksIDY2MDk0LCA2NjA5OSwgCi0gICAgNjYxMDQsIDY2MTEwLCA2NjExNSwgNjYxMjAsIDY2MTI1LCA2NjEyOSwgNjYxMzMsIDY2MTM4LCA2NjE0MiwgNjYxNDcsIAotICAgIDY2MTUyLCA2NjE1OCwgNjYxNjMsIDY2MTY3LCA2NjE3MiwgNjYxNzYsIDY2MTc5LCA2NjE4MSwgNjYxODUsIDY2MTg4LCAKLSAgICA2NjE5MywgNjYxOTcsIDY2MjAxLCA2NjIwNSwgNjYyMDksIDY2MjE4LCA2NjIyMiwgMzI1MjQsIDY2MjI1LCAzMjUyOSwgCi0gICAgNjYyMzIsIDY2MjM3LCAzMjUzNCwgNjYyNDYsIDY2MjU1LCAzMjU0MCwgNjYyNjAsIDMyNTQ1LCA2NjI2OSwgNjYyNzQsIAotICAgIDExNTcxLCA2NjI3OCwgNjYyODMsIDY2Mjg4LCAzMjU1MCwgNjYyOTIsIDQwMTk2LCA2NjI5NiwgNjYyOTksIDY2MzAzLCAKLSAgICA4MjExLCA2NjMwOSwgNjYzMTQsIDY2MzE4LCAzNzA1LCAzMjU1NSwgNjYzMjEsIDY2MzI1LCA2NjMyOCwgNjYzMzMsIAotICAgIDY2MzM3LCA2NjM0MywgNjYzNTEsIDY2MzY0LCA2NjM3MywgNjYzNzksIDY2Mzg0LCA2NjM5MCwgNjYzOTQsIDY2NDAwLCAKLSAgICA2NjQwOCwgNjY0MTMsIDY2NDE3LCA2NjQyNCwgNjY0MzAsIDY2NDM4LCA2NjQ0NywgNjY0NTUsIDMyNTU4LCA2NjQ2MiwgCi0gICAgNjY0NzIsIDY2NDgxLCA2NjQ5NCwgNjY0OTksIDY2NTA0LCA2NjUxMywgNjY1MTksIDY2NTI2LCA2NjUzNywgNjY1NDksIAotICAgIDY2NTU2LCA2NjU2NSwgNjY1NzQsIDY2NTgzLCA2NjU5MCwgNjY1OTYsIDY2NjAzLCA2NjYxMSwgNjY2MTgsIDY2NjI2LCAKLSAgICA2NjYzNSwgNjY2NDMsIDY2NjUwLCA2NjY1OCwgNjY2NjcsIDY2Njc1LCA2NjY4NCwgNjY2OTQsIDY2NzAzLCA2NjcxMSwgCi0gICAgNjY3MTgsIDY2NzI2LCA2NjczNSwgNjY3NDMsIDY2NzUyLCA2Njc2MiwgNjY3NzEsIDY2Nzc5LCA2Njc4OCwgNjY3OTgsIAotICAgIDY2ODA3LCA2NjgxNywgNjY4MjgsIDY2ODM4LCA2Njg0NywgNjY4NTUsIDY2ODYyLCA2Njg3MCwgNjY4NzksIDY2ODg3LCAKLSAgICA2Njg5NiwgNjY5MDYsIDY2OTE1LCA2NjkyMywgNjY5MzIsIDY2OTQyLCA2Njk1MSwgNjY5NjEsIDY2OTcyLCA2Njk4MiwgCi0gICAgNjY5OTEsIDY2OTk5LCA2NzAwOCwgNjcwMTgsIDY3MDI3LCA2NzAzNywgNjcwNDgsIDY3MDU4LCA2NzA2NywgNjcwNzcsIAotICAgIDY3MDg4LCA2NzA5OCwgNjcxMDksIDY3MTIxLCA2NzEzMiwgNjcxNDIsIDY3MTUxLCA2NzE1OSwgNjcxNjYsIDY3MTc0LCAKLSAgICA2NzE4MywgNjcxOTEsIDY3MjAwLCA2NzIxMCwgNjcyMTksIDY3MjI3LCA2NzIzNiwgNjcyNDYsIDY3MjU1LCA2NzI2NSwgCi0gICAgNjcyNzYsIDY3Mjg2LCA2NzI5NSwgNjczMDMsIDY3MzEyLCA2NzMyMiwgNjczMzEsIDY3MzQxLCA2NzM1MiwgNjczNjIsIAotICAgIDY3MzcxLCA2NzM4MSwgNjczOTIsIDY3NDAyLCA2NzQxMywgNjc0MjUsIDY3NDM2LCA2NzQ0NiwgNjc0NTUsIDY3NDYzLCAKLSAgICA2NzQ3MiwgNjc0ODIsIDY3NDkxLCA2NzUwMSwgNjc1MTIsIDY3NTIyLCA2NzUzMSwgNjc1NDEsIDY3NTUyLCA2NzU2MiwgCi0gICAgNjc1NzMsIDY3NTg1LCA2NzU5NiwgNjc2MDYsIDY3NjE1LCA2NzYyNSwgNjc2MzYsIDY3NjQ2LCA2NzY1NywgNjc2NjksIAotICAgIDY3NjgwLCA2NzY5MCwgNjc3MDEsIDY3NzEzLCA2NzcyNCwgNjc3MzYsIDY3NzQ5LCA2Nzc2MSwgNjc3NzIsIDY3NzgyLCAKLSAgICA2Nzc5MSwgNjc3OTksIDY3ODA2LCA2NzgxNCwgNjc4MjMsIDY3ODMxLCA2Nzg0MCwgNjc4NTAsIDY3ODU5LCA2Nzg2NywgCi0gICAgNjc4NzYsIDY3ODg2LCA2Nzg5NSwgNjc5MDUsIDY3OTE2LCA2NzkyNiwgNjc5MzUsIDY3OTQzLCA2Nzk1MiwgNjc5NjIsIAotICAgIDY3OTcxLCA2Nzk4MSwgNjc5OTIsIDY4MDAyLCA2ODAxMSwgNjgwMjEsIDY4MDMyLCA2ODA0MiwgNjgwNTMsIDY4MDY1LCAKLSAgICA2ODA3NiwgNjgwODYsIDY4MDk1LCA2ODEwMywgNjgxMTIsIDY4MTIyLCA2ODEzMSwgNjgxNDEsIDY4MTUyLCA2ODE2MiwgCi0gICAgNjgxNzEsIDY4MTgxLCA2ODE5MiwgNjgyMDIsIDY4MjEzLCA2ODIyNSwgNjgyMzYsIDY4MjQ2LCA2ODI1NSwgNjgyNjUsIAotICAgIDY4Mjc2LCA2ODI4NiwgNjgyOTcsIDY4MzA5LCA2ODMyMCwgNjgzMzAsIDY4MzQxLCA2ODM1MywgNjgzNjQsIDY4Mzc2LCAKLSAgICA2ODM4OSwgNjg0MDEsIDY4NDEyLCA2ODQyMiwgNjg0MzEsIDY4NDM5LCA2ODQ0OCwgNjg0NTgsIDY4NDY3LCA2ODQ3NywgCi0gICAgNjg0ODgsIDY4NDk4LCA2ODUwNywgNjg1MTcsIDY4NTI4LCA2ODUzOCwgNjg1NDksIDY4NTYxLCA2ODU3MiwgNjg1ODIsIAotICAgIDY4NTkxLCA2ODYwMSwgNjg2MTIsIDY4NjIyLCA2ODYzMywgNjg2NDUsIDY4NjU2LCA2ODY2NiwgNjg2NzcsIDY4Njg5LCAKLSAgICA2ODcwMCwgNjg3MTIsIDY4NzI1LCA2ODczNywgNjg3NDgsIDY4NzU4LCA2ODc2NywgNjg3NzcsIDY4Nzg4LCA2ODc5OCwgCi0gICAgNjg4MDksIDY4ODIxLCA2ODgzMiwgNjg4NDIsIDY4ODUzLCA2ODg2NSwgNjg4NzYsIDY4ODg4LCA2ODkwMSwgNjg5MTMsIAotICAgIDY4OTI0LCA2ODkzNCwgNjg5NDUsIDY4OTU3LCA2ODk2OCwgNjg5ODAsIDY4OTkzLCA2OTAwNSwgNjkwMTYsIDY5MDI4LCAKLSAgICA2OTA0MSwgNjkwNTMsIDY5MDY2LCA2OTA4MCwgNjkwOTMsIDY5MTA1LCA2OTExNiwgNjkxMjYsIDY5MTM1LCA2OTE0MywgCi0gICAgNjkxNTAsIDY5MTU1LCA4MDU4LCA2OTE2MiwgMzI1NjgsIDY5MTY3LCA2OTE3MiwgMzI1NzMsIDY5MTc4LCAyMDkxNiwgCi0gICAgMzI1NzgsIDY5MTgzLCA2OTE4OSwgNjkxOTcsIDY5MjAzLCA2OTIwOSwgNjkyMTYsIDY5MjIzLCA2OTIyOCwgNjkyMzIsIAotICAgIDY5MjM1LCA2OTIzOSwgNjkyNDgsIDY5MjU0LCA2OTI2NiwgNjkyNzcsIDY5MjgxLCAzMDgxLCA4MDMzLCA2OTI4NiwgCi0gICAgNjkyODksIDY5MjkxLCA2OTI5NSwgNjkyOTksIDY5MzAzLCA2OTMwOSwgNjkzMTQsIDI1OTI3LCA2OTMxOSwgNjkzMjMsIAotICAgIDY5MzI2LCA2OTMzMSwgNjkzMzUsIDY5MzQyLCA2OTM0OCwgNjkzNTIsIDYxNzAsIDY5MzU2LCAzMjU5NSwgNjkzNjEsIAotICAgIDY5MzY4LCA2OTM3NywgNjkzODUsIDY5Mzk2LCA2OTQwNCwgNjk0MTIsIDY5NDE5LCA2OTQyNiwgNjk0MzIsIDY5NDQzLCAKLSAgICAzMjYwMCwgNjk0NDgsIDY5NDU5LCA2OTQ3MSwgNjk0NzksIDY5NDkwLCA2OTQ5OSwgNjk1MTAsIDY5NTE1LCA2OTUyMywgCi0gICAgMjU1NiwgNjk1MjgsIDM0MjcwLCA2OTU0MSwgNjk1NDUsIDY5NTU3LCA2OTU2NSwgNjk1NzAsIDY5NTc4LCAxNzQ3MiwgCi0gICAgNjk1ODksIDY5NTk1LCA2OTYwMiwgNjk2MTAsIDY5NjE2LCAzMjYxMCwgNjk2MjEsIDM5MTQsIDU4MjE3LCA2OTYyOCwgCi0gICAgNjk2MzEsIDY5NjM5LCA2OTY1MiwgNjk2NjUsIDY5Njc4LCA2OTY5MSwgNjk2OTgsIDY5NzA5LCA2OTcxOCwgNDE2ODcsIAotICAgIDQxNjkyLCA2OTcyMywgNjk3MjcsIDY5NzM1LCA2OTc0MiwgNjk3NTEsIDY5NzU5LCA2OTc2NSwgNjk3NzQsIDY5NzgyLCAKLSAgICA2OTc5MCwgNjk3OTQsIDY5ODAzLCA2OTgxMiwgNjk4MjIsIDY5ODM1LCA2OTg0OCwgNjk4NTgsIDMyNjE1LCA2OTg2NCwgCi0gICAgNjk4NzEsIDY5ODc3LCAzMjYyMSwgNjk4ODIsIDY5ODg1LCA2OTg4OSwgNjk4OTcsIDY5OTA2LCA0MTQyNSwgNjk5MTQsIAotICAgIDY5OTIzLCA2OTkzMSwgNjk5MzgsIDY5OTQ2LCA2OTk1NiwgNjk5NjUsIDY5OTc0LCA2OTk4MywgNjk5OTEsIDcwMDAyLCAKLSAgICA3MDAxMiwgOTM1OSwgMjE1NTQsIDcwMDIxLCA3MDAyNiwgNzAwMzEsIDcwMDM1LCA3MDAzOSwgNzAwNDQsIDcwMDUwLCAKLSAgICA3MDA1NSwgNzAwNjAsIDcwMDY2LCA3MDA3MSwgNzAwNzYsIDIxNTE5LCA3MDA4MSwgNzAwODgsIDcwMDk2LCA3MDEwNCwgCi0gICAgNzAxMDksIDcwMTE2LCA3MDEyMywgNzAxMjgsIDcwMTMyLCA3MDEzNiwgNzAxNDQsIDcwMTUyLCAzMjYzOCwgNzAxNTgsIAotICAgIDcwMTY0LCA3MDE3NiwgNzAxODIsIDcwMTg2LCA3MDE5MywgNzAxOTgsIDcwMjA5LCA3MDIxOSwgNzAyMjksIDcwMjQxLCAKLSAgICA3MDI0NywgNzAyNTcsIDcwMjY3LCAzMjY2NSwgNzAyNzYsIDcwMjg1LCA3MDI5MSwgNzAzMDMsIDcwMzE0LCA3MDMyMSwgCi0gICAgNzAzMjYsIDcwMzMwLCA3MDMzOCwgNzAzNDQsIDcwMzQ5LCA3MDM1NCwgNzAzNjEsIDcwMzY5LCA3MDM4MSwgNzAzOTEsIAotICAgIDcwNDAwLCA3MDQwOSwgNzA0MTYsIDM0MTMyLCAyMzgzNCwgNzA0MjIsIDcwNDI3LCA3MDQzMSwgNzA0MzUsIDcwNDQwLCAKLSAgICA3MDQ0NiwgNzA0NTcsIDcwNDcwLCA3MDQ3NSwgNzA0ODIsIDMyNjcwLCA3MDQ4NywgNzA0OTksIDcwNTA4LCA3MDUxOCwgCi0gICAgNzA1MjksIDcwNTQyLCA3MDU0OSwgNzA1NTgsIDcwNTY3LCA3MDU3NSwgNzA1ODAsIDcwNTg2LCAxMDU4LCA3MDU5MSwgCi0gICAgNzA1OTYsIDcwNjAxLCA3MDYwNiwgNzA2MTIsIDcwNjE3LCA3MDYyMiwgNzA2MjgsIDcwNjM0LCA3MDYzOSwgNzA2NDMsIAotICAgIDcwNjQ4LCA3MDY1MywgNzA2NTgsIDU4NzI5LCA3MDY2MywgNzA2NjgsIDcwNjczLCA3MDY3OCwgNzA2ODQsIDcwNjkwLCAKLSAgICA3MDY5NSwgNzA2OTksIDcwNzA0LCA3MDcwOSwgNzA3MTQsIDcwNzIwLCA3MDcyNSwgNzA3MzEsIDcwNzM2LCA3MDc0MSwgCi0gICAgNzA3NDYsIDcwNzUxLCA3MDc1NSwgNzA3NjEsIDcwNzY2LCA3MDc3NSwgNzA3ODAsIDcwNzg1LCA3MDc5MCwgNzA3OTUsIAotICAgIDcwNzk5LCA3MDgwNiwgNzA4MTIsIDE3MTIyLCAxNzEyOSwgNzA4MTcsIDcwODIxLCA3MDgyNSwgNzA4MjksIDcwODMzLCAKLSAgICA0NTQ4NywgNzA4MzcsIDcwNzY3LCA3MDgzOSwgNzA4NDksIDMyNjc5LCA3MDg1MiwgNzA4NjEsIDcwODY3LCA2MTQzLCAKLSAgICAzMjY4NCwgNzA4NzEsIDcwODc3LCA3MDg4MiwgNzA4ODgsIDcwODkzLCA3MDg5NywgNzA5MDQsIDcwOTA5LCA3MDkxOSwgCi0gICAgNzA5MjgsIDcwOTMyLCA3MDkzOCwgNzA5NDQsIDcwOTUwLCA3MDk1NCwgNzA5NjIsIDcwOTY5LCA3MDk3NywgNzA5ODUsIAotICAgIDMyNjg5LCA3MDk5MiwgNzA5OTUsIDcxMDAyLCA3MTAwOCwgNzEwMTMsIDcxMDE3LCA3MTAyMywgNzEwMzAsIDcxMDM1LCAKLSAgICA3MTAzOSwgNzEwNDgsIDcxMDU2LCA3MTA2MiwgNzEwNjcsIDMyNjk0LCA3MTA3NCwgNzEwODEsIDcxMDg3LCA3MTA5MiwgCi0gICAgNzEwOTgsIDcxMTA1LCA3MTExMSwgMjEyODEsIDI3NDM4LCA3MTExNywgNzExMjIsIDcxMTI4LCA3MTE0MCwgNzA4MDAsIAotICAgIDcwODA3LCAyMTQ1NywgNzExNTAsIDcxMTU1LCA3MTE2MiwgNzExNjgsIDcxMTc1LCA3MTE4MSwgNzExOTIsIDcxMTk3LCAKLSAgICA5MTAzLCA3MTIwNSwgNzEyMDgsIDcxMjE0LCA3MTIxOCwgNzEyMjIsIDcxMjI1LCA3MTIzMSwgMzI0NDMsIDYxOTQsIDk2NCwgCi0gICAgMTM0MTIsIDcxMjM4LCA3MTI0NCwgNzEyNTAsIDcxMjU2LCA3MTI2MiwgNzEyNjgsIDcxMjc0LCA3MTI4MCwgNzEyODYsIAotICAgIDcxMjkxLCA3MTI5NiwgNzEzMDEsIDcxMzA2LCA3MTMxMSwgNzEzMTYsIDcxMzIxLCA3MTMyNiwgNzEzMzEsIDcxMzM2LCAKLSAgICA3MTM0MSwgNzEzNDYsIDcxMzUxLCA3MTM1NywgNzEzNjIsIDcxMzY3LCA3MTM3MywgNzEzNzgsIDcxMzgzLCA3MTM4OSwgCi0gICAgNzEzOTUsIDcxNDAxLCA3MTQwNywgNzE0MTMsIDcxNDE5LCA3MTQyNSwgNzE0MzEsIDcxNDM3LCA3MTQ0MiwgNzE0NDcsIAotICAgIDcxNDUzLCA3MTQ1OCwgNzE0NjMsIDcxNDY5LCA3MTQ3NCwgNzE0NzksIDcxNDg0LCA3MTQ4OSwgNzE0OTQsIDcxNDk5LCAKLSAgICA3MTUwNCwgNzE1MDksIDcxNTE0LCA3MTUxOSwgNzE1MjQsIDcxNTI5LCA3MTUzNSwgNzE1NDAsIDcxNTQ1LCA3MTU1MCwgCi0gICAgNzE1NTYsIDcxNTYxLCA3MTU2NiwgNzE1NzEsIDcxNTc2LCA3MTU4MiwgNzE1ODcsIDcxNTkyLCA3MTU5NywgNzE2MDIsIAotICAgIDcxNjA3LCA3MTYxMiwgNzE2MTcsIDcxNjIyLCA3MTYyNywgNzE2MzIsIDcxNjM3LCA3MTY0MiwgNzE2NDcsIDcxNjUyLCAKLSAgICA3MTY1NywgNzE2NjIsIDcxNjY3LCA3MTY3MiwgNzE2NzcsIDcxNjgzLCA3MTY4OCwgNzE2OTMsIDcxNjk4LCA3MTcwMywgCi0gICAgNzE3MDgsIDcxNzEzLCA3MTcxOCwgMTg2NCwgMTQyLCA3MTcyMywgNzE3MjcsIDcxNzMxLCA3MTczNiwgNzE3NDQsIDcxNzQ4LCAKLSAgICA3MTc1NSwgNzE3NjMsIDcxNzY3LCA3MTc4MCwgNzE3ODgsIDcxNzkyLCA3MTc5NSwgNzE4MDAsIDcxODA0LCA3MTgwOSwgCi0gICAgNzE4MTMsIDcxODIxLCA3MTgyNSwgMjA5MjQsIDcxODMwLCA3MTgzNCwgNjA5MzAsIDcxODM4LCA3MTg0MSwgNzE4NDksIAotICAgIDcxODU3LCA3MTg2NSwgNzE4NzAsIDcxODc3LCA3MTg4MywgNzE4ODksIDcxODk0LCA3MTkwMSwgNzE5MDYsIDcxOTE0LCAKLSAgICA2NDkwNiwgNzE5MjEsIDcxOTI2LCA3MTkzMSwgNzE5MzUsIDExNjM4LCA3MTkzOSwgNzE5NDQsIDcxOTQ5LCA3MTk1MywgCi0gICAgNzE5NTYsIDcxOTYyLCA3MTk2NiwgNzE5NzYsIDcxOTg1LCA3MTk4OCwgNzE5OTIsIDcxOTk5LCA3MjAxMiwgNzIwMTgsIAotICAgIDcyMDI2LCA3MjAzNywgNzIwNDgsIDcyMDU5LCA3MjA3MCwgNzIwNzksIDcyMDg1LCA3MjA5NCwgNzIxMDIsIDcyMTEyLCAKLSAgICA3MjEyNSwgNzIxMzIsIDcyMTQzLCA3MjE0OSwgNzIxNTQsIDcyMTU5LCA3MjE2NSwgNzIxNzEsIDcyMTgxLCA3MjE5MCwgCi0gICAgNzA0ODksIDcyMTk4LCA3MjIwNCwgNzIyMTIsIDcyMjE4LCA3MjIyNiwgNzIyMjksIDcyMjMzLCA3MjIzNywgNzIyNDAsIAotICAgIDcyMjQ2LCA3MjI1MiwgNzIyNjAsIDcyMjcyLCA3MjI4NCwgNzIyOTEsIDcyMjk1LCA3MjMwNiwgNzIzMTQsIDcyMzIxLCAKLSAgICA3MjMzMywgNzIzNDEsIDcyMzQ5LCA3MjM1NiwgNzIzNjIsIDcyMzcyLCA3MjM4MSwgNzIzODYsIDcyMzk2LCA3MjQwNSwgCi0gICAgNDA3NTEsIDcyNDEyLCA3MjQxNiwgNzI0MjEsIDcyNDI5LCA3MjQzNiwgNzI0NDIsIDcyNDQ2LCA3MjQ1NiwgNzI0NjcsIAotICAgIDcyNDc1LCA3MjQ4MiwgNzI0OTQsIDcyNTA2LCA3MjUxNSwgNjk1MzEsIDcyNTIyLCA3MjUzMywgNzI1NDcsIDcyNTU1LCAKLSAgICA3MjU2NSwgNzI1NzIsIDcyNTgwLCA3MjU5MiwgNzI2MDEsIDcyNjA5LCA3MjYxOSwgNzI2MzAsIDcyNjQyLCA3MjY1MSwgCi0gICAgNzI2NjEsIDcyNjY4LCA3MjY3NywgNzI2OTIsIDcyNzAwLCA3MjcxMCwgNzI3MTksIDcyNzI3LCA3Mjc0MCwgNzI3NTUsIAotICAgIDcyNzU5LCA3Mjc2OCwgNzI3ODAsIDcyNzkxLCA3MjgwMiwgNzI4MTMsIDcyODIzLCA3MjgzNCwgNzI4NDIsIDcyODQ4LCAKLSAgICA3Mjg1OCwgNzI4NjYsIDcyODcyLCAyOTAwNywgNzI4NzcsIDcyODgzLCA3Mjg4OCwgNzI4OTUsIDk3MDEsIDE3NDkyLCAKLSAgICA3MjkwMSwgNzI5MTAsIDcyOTE1LCA3MjkxOSwgNzI5MjYsIDcyOTMyLCA3MjkzNywgNzI5NDIsIDcyOTUwLCA3Mjk1OCwgCi0gICAgNzI5NjIsIDcyOTY1LCA3Mjk2OCwgNzI5NzAsIDcyOTc3LCA3Mjk4MywgNzI5OTQsIDcyOTk5LCA3MzAwMywgNzMwMTAsIAotICAgIDczMDE2LCA3MzAyMSwgNzMwMjksIDY1NDA1LCA2NTQxNSwgNzMwMzUsIDczMDQyLCA3MzA1MiwgMTA2MTEsIDczMDU5LCAKLSAgICA3MzA2NCwgMjkyMDMsIDczMDczLCA3MzA3OCwgNzMwODUsIDczMDk1LCA3MzEwMywgNzMxMTEsIDczMTIwLCA3MzEyNiwgCi0gICAgNzMxMzIsIDczMTM5LCA3MzE0NiwgNzMxNTEsIDczMTU1LCA3MzE2MywgNzMxNjgsIDczMTczLCA3MzE4MSwgNzMxODgsIAotICAgIDczMTkzLCA3MzE5OSwgNzMyMDIsIDczMjA2LCA3MzIxNSwgNzE3NzUsIDczMjI0LCA3MzIyOCwgNzMyMzQsIDczMjQ1LCAKLSAgICA3MzI1NSwgMTc1MDEsIDczMjY2LCA3MzI3NCwgMTc1MTMsIDczMjgxLCA3MzI4NSwgNzMyOTQsIDI3MzI0LCA3MzMwMSwgCi0gICAgNzMzMDUsIDczMzEwLCA3MzMyNywgNzMzMzksIDEwNTY5LCA3MzM1MSwgNzMzNTYsIDczMzYxLCA3MzM2NiwgMjA5OTcsIAotICAgIDczMzcwLCA3MzM3NSwgNzMzODAsIDczMzg2LCA3MzM5MSwgNTg0NiwgMjEwMDEsIDczMzk2LCA3MzQwMSwgNzM0MDcsIAotICAgIDczNDE0LCA3MzQxOSwgNzM0MjQsIDczNDMwLCA3MzQzNiwgNzM0NDIsIDczNDQ3LCA3MzQ1MywgNzM0NTcsIDczNDcxLCAKLSAgICA3MzQ3OSwgNzM0ODcsIDczNDkzLCA3MzQ5OCwgNzM1MDUsIDczNTE1LCA3MzUyNCwgNzM1MjksIDczNTM0LCA3MzU0MiwgCi0gICAgNzM1NDcsIDczNTUzLCA3MzU1OCwgNzM1NjcsIDU5Nzg2LCA3MzU3MiwgNzM1NzUsIDczNTkzLCA3MzYxMiwgNzM2MjUsIAotICAgIDczNjM5LCA3MzY1NSwgNzM2NjIsIDczNjY5LCA3MzY3NSwgNzM2ODIsIDczNjg3LCA3MzY5MywgNzM2OTksIDczNzA3LCAKLSAgICA3MzcxMywgNzM3MTgsIDczNzIzLCA3MzczOSwgMTA1ODIsIDczNzUzLCA3Mzc2MCwgNzM3NjgsIDczNzc0LCA3Mzc3OCwgCi0gICAgNzM3ODEsIDczNzg2LCA3Mzc5MSwgNzM3OTgsIDczODAzLCA3MzgxMiwgNzM4MTcsIDczODIzLCA3MzgzMiwgNzM4NDEsIAotICAgIDczODQ2LCA3Mzg1MCwgNzM4NTgsIDczODY3LCAxMTY2NywgNzM4NzYsIDczODg0LCA3Mzg4OSwgNzM4OTUsIDExNjc4LCAKLSAgICA3MzkwMCwgNzM5MDMsIDczOTA4LCA3MzkxOCwgNzM5MjcsIDczOTMyLCA3MzkzOCwgNzM5NDMsIDczOTUxLCA3Mzk1OCwgCi0gICAgNzM5NjksIDczOTc5LCA3Mzk4NCwgNjQ4MzQsIDczOTg5LCA3Mzk5NSwgNzQwMDAsIDc0MDA3LCA3NDAxNiwgNzQwMjQsIAotICAgIDc0MDMwLCA3NDAzNiwgNzQwNDMsIDc0MDQ5LCA3NDA1MywgMTY5NDcsIDMwNTUsIDc0MDU4LCA3NDA2MiwgNzQwNjYsIAotICAgIDc0MDcyLCA3NDA4MSwgNzQwODcsIDc0MDk0LCA3NDA5OCwgNzQxMTksIDc0MTQxLCA3NDE1NywgNzQxNzQsIDc0MTkzLCAKLSAgICA3NDIwMiwgNzQyMTIsIDc0MjE5LCA3NDIyNiwgMjcyMTEsIDc0MjMyLCA3NDIzNiwgNzQyNDQsIDc0MjU2LCA3NDI2MiwgCi0gICAgNzQyNzAsIDc0Mjc0LCA3NDI4MiwgNzQyODksIDc0MjkzLCA3NDI5OSwgNzQzMDUsIDc0MzEwLCAzNTYzLCA0MTg4NywgCi0gICAgNzQzMTYsIDc0MzIwLCA3NDMyNCwgNzQzMjgsIDc0MzMzLCA3NDMzOCwgNzQzNDMsIDc0MzQ5LCA3NDM1NSwgNzQzNjEsIAotICAgIDc0MzY4LCA3NDM3NCwgNzQzODEsIDc0Mzg3LCA3NDM5MywgNzQzOTgsIDc0NDA0LCA3NDQwOSwgNzQ0MTMsIDc0NDE4LCAKLSAgICA3NDQyMiwgNzQ0MjcsIDQxOTAyLCA3NDQzMSwgNzQ0MzYsIDc0NDQ0LCA3NDQ0OCwgNzQ0NTMsIDc0NDYwLCA3NDQ2OSwgCi0gICAgNzQ0NzUsIDc0NDc5LCA3NDQ4NiwgNzQ0OTAsIDc0NDkzLCA3NDUwMCwgNzQ1MDksIDc0NTE0LCA3NDUxOCwgNzQ1MjYsIAotICAgIDc0NTM1LCA3NDUzOSwgNzQ1NDcsIDc0NTUzLCA3NDU1OCwgNzQ1NjMsIDc0NTY5LCA3NDU3NSwgNzQ1ODAsIDc0NTg0LCAKLSAgICA3NDU5MCwgNzQ1OTUsIDc0NTk5LCA3NDYwMywgNzQ2MDYsIDc0NjExLCA3NDYxOSwgNzQ2MjksIDc0NjM0LCAzOTM4NywgCi0gICAgNzQ2NDIsIDc0NjU0LCA3NDY1OCwgNzQ2NjQsIDc0Njc2LCA3NDY4NywgNzQ2OTQsIDc0NzAwLCA3NDcwNywgNzQ3MTksIAotICAgIDc0NzI2LCA3NDczMiwgMjEwNzUsIDc0NzM2LCA3NDc0MiwgNzQ3NDksIDc0NzU1LCA3NDc2MSwgNzQ3NjYsIDc0NzcxLCAKLSAgICA3NDc3NiwgNzQ3ODUsIDcwMzMsIDc0NzkwLCAxNjQxMywgNzQ3OTYsIDc0ODAwLCA3NDgwNCwgNzQ4MDgsIDc0ODE2LCAKLSAgICA3NDgyNSwgNzQ4MjksIDc0ODM2LCA3NDg0NSwgNzQ4NTgsIDc0ODY0LCA3NDQyMywgMzAwNjcsIDc0ODY5LCA3NDg3MSwgCi0gICAgNzQ4NzYsIDc0ODgxLCA3NDg4NiwgNzQ4OTEsIDc0ODk2LCA3NDkwMSwgNzQ5MDYsIDc0OTExLCA3NDkxNiwgNzQ5MjEsIAotICAgIDc0OTI2LCA3NDkzMSwgNzQ5MzYsIDc0OTQxLCA3NDk0NywgNzQ5NTIsIDc0OTU3LCA3NDk2MiwgNzQ5NjcsIDc0OTcyLCAKLSAgICA3NDk3NywgNzQ5ODIsIDc0OTg3LCA3NDk5MywgNzQ5OTksIDc1MDA1LCA3NTAxMCwgNzUwMTUsIDc1MDI3LCA3NTAzMiwgCi0gICAgMTg3MCwgNDksIDc1MDM3LCA3NTA0MiwgMzI3MjEsIDc1MDQ2LCAzMjcyNiwgMzI3MzEsIDMyNzM3LCAzMjc0MiwgNzUwNTAsIAotICAgIDMyNzQ3LCAyMjA3MCwgNzUwNzIsIDc1MDc2LCA3NTA4MCwgNzUwODUsIDc1MDg5LCAzMjc1MSwgNzUwOTMsIDc1MTAxLCAKLSAgICAzMjc1NiwgNzUxMDgsIDc1MTExLCA3NTExNiwgNzUxMjAsIDk1MzYsIDc1MTI5LCAzMjc2MSwgMjE5MzIsIDc1MTMyLCAKLSAgICA3NTEzNiwgMTQyOCwgNzUxNDEsIDMyNzcyLCA3NTE0NCwgNzUxNDksIDI1NzIwLCAyNTczMCwgMzUyMzMsIDc1MTU0LCAKLSAgICA3NTE1OSwgNzUxNjQsIDc1MTY5LCA3NTE3NSwgNzUxODAsIDc1MTg5LCA3NTE5NCwgNzUyMDEsIDc1MjA3LCA3NTIxMiwgCi0gICAgNzUyMTcsIDc1MjIyLCA3NTIzMiwgNzUyNDEsIDc1MjQ2LCA3NTI1NCwgNzUyNTgsIDc1MjY2LCAzMjU4NiwgMzcyODgsIAotICAgIDc1MjczLCA3NTI3OSwgNzUyODQsIDc1Mjg5LCAxMjAwOSwgNzUyOTQsIDc1MzAwLCA3NTMwNSwgNzUzMTIsIDc1MzE4LCAKLSAgICA3NTMyMywgNzUzMzEsIDc1MzQxLCA3NTM1MSwgNzUzNTcsIDc1MzYyLCA3NTM2OCwgMTc1MjMsIDc1Mzc1LCAzNjA0OCwgCi0gICAgNzUzODgsIDc1MzkzLCA3NTM5OSwgMzA5NjgsIDc1NDEyLCA3NTQxOCwgNzU0MjIsIDc1NDMxLCA3NTQzOCwgNzU0NDQsIAotICAgIDc1NDUyLCA3NTQ2MSwgNzU0NjgsIDc1NDc0LCA3NTQ3NywgNzU0ODEsIDI1ODYxLCA3NTQ4NSwgNzU0OTIsIDc1NDk4LCAKLSAgICA3NTUwNiwgNzU1MTEsIDIzOTc3LCA3NTUxNywgNzU1MjAsIDc1NTI4LCA3NTUzNiwgNzU1NTAsIDc1NTU3LCA3NTU2MywgCi0gICAgNzU1NzAsIDc1NTc2LCAzMjc4NiwgNzU1ODAsIDc1NTg3LCA3NTU5NSwgNzU2MDMsIDc1NjA5LCAzMjc5MSwgNzU2MTcsIAotICAgIDc1NjIzLCA3NTYyOCwgNzU2MzgsIDc1NjQ0LCA3NTY1MywgMzA4MDUsIDM0NjkxLCA3NTY2MSwgNzU2NjYsIDc1NjcxLCAKLSAgICA3NTY3NSwgNzU2ODAsIDc1Njg0LCA3NTY5MiwgMTQ5MDcsIDM5NDAwLCA3NTY5NywgNzU3MDIsIDMyNzk2LCA2MjIzMiwgCi0gICAgNzU3MDYsIDc1NzExLCA3NTcxNSwgNzU3MjQsIDc1NzMyLCA3NTczOCwgNzU3NDMsIDc1NzQ5LCA3NTc1NiwgNzU3NjIsIAotICAgIDc1NzY3LCA3NTc3MiwgNzU3ODEsIDc1NzkzLCA3NTgwOCwgMzMwNTgsIDc1ODE0LCAxNjUzMiwgMzI4MDAsIDc1ODE4LCAKLSAgICA3NTgyNSwgMjQwODcsIDc1ODMxLCA3NTgzOCwgNzU4NDcsIDc1ODU0LCA3NTg2MywgNzU4NjksIDc1ODc0LCA3NTg4MiwgCi0gICAgNzU4ODgsIDMyODEwLCA3NTg5MywgNzU5MDIsIDc0NjgyLCA3NTkxMSwgNzU5MTgsIDc1OTI0LCA3NTkzMCwgNzU5NDAsIAotICAgIDc1OTQ4LCA3NTk1NSwgNzU5NTksIDMyODE1LCA3NTk2MiwgMzI4MjEsIDMyODI3LCA3NTk2NywgNzU5NzUsIDc1OTgzLCAKLSAgICA3NTk5MywgNzYwMDIsIDc2MDEwLCA3NjAxNywgNzYwMjcsIDMyODMyLCA3NjAzMSwgNzYwMzMsIDc2MDM3LCA3NjA0MiwgCi0gICAgNzYwNDYsIDc2MDUwLCA3NjA1NiwgNzYwNjEsIDc2MDY1LCA3NjA3NiwgNzYwODEsIDc2MDg2LCAzMDYwLCA3NjA5MCwgCi0gICAgNzYwOTcsIDc2MTAxLCA3NjExMCwgNzYxMTgsIDc2MTI1LCA3NjEzMCwgNzYxMzUsIDYyMjc4LCA3NjEzOSwgNzYxNDIsIAotICAgIDc2MTQ4LCA3NjE1NiwgNzYxNjIsIDc2MTY2LCA3NjE3MSwgNzYxNzgsIDc2MTgzLCA3NjE4OSwgMzQ3MjIsIDc2MTk0LCAKLSAgICA3NjE5NywgNzYyMDIsIDc2MjA2LCA3NjIxMSwgNzYyMTYsIDc2MjIwLCA3NjIyOCwgNzYyMzIsIDI1NzM5LCAyNTc0OCwgCi0gICAgNzYyMzgsIDc2MjQ0LCA3NjI1MCwgNzYyNTUsIDc2MjU5LCA3NjI2MiwgNzYyNzIsIDc2MjgxLCA3NjI4NiwgNzYyOTIsIAotICAgIDc2Mjk5LCA3NjMwNSwgNzYzMDksIDc2MzE3LCA3NjMyMiwgMzQ3MjgsIDc2MzI2LCA3NjMzNCwgNzYzNDAsIDc2MzQ3LCAKLSAgICA3NjM1MiwgNzYzNTYsIDc2MzYxLCA1ODQwMywgMzQ3MzQsIDc2MzY3LCA3NjM3MiwgNzYzNzYsIDc2MzgxLCA3NjM4NiwgCi0gICAgNzYzOTEsIDc2Mzk1LCA3NjQwMCwgNzY0MDUsIDc2NDExLCA3NjQxNiwgNzY0MjEsIDc2NDI3LCA3NjQzMywgNzY0MzgsIAotICAgIDc2NDQyLCA3NjQ0NywgNzY0NTIsIDc2NDU3LCA3NjQ2MSwgMjQwODYsIDc2NDY2LCA3NjQ3MSwgNzY0NzcsIDc2NDgzLCAKLSAgICA3NjQ4OSwgNzY0OTQsIDc2NDk4LCA3NjUwMywgNzY1MDgsIDc2NTEzLCA3NjUxNywgNzY1MjIsIDc2NTI3LCA3NjUzMiwgCi0gICAgNzY1MzcsIDc2NTQxLCAzMjg0MCwgNzY1NDksIDc2NTUzLCA3NjU2MSwgNzY1NjksIDc2NTgwLCA3NjU4NSwgNzY1ODksIAotICAgIDIyMzg0LCA3NjU5NCwgNzY2MDAsIDc2NjEwLCA3NjYxNywgNzY2MjIsIDc2NjMxLCA3NjYzNiwgNzY2NDAsIDc2NjQ1LCAKLSAgICA3NjY1MywgNzY2NjEsIDc2NjY4LCA2NTA2OCwgNzY2NzQsIDc2NjgyLCA3NjY4OSwgNzY3MDAsIDc2NzA2LCA3NjcxMCwgCi0gICAgNzY3MTYsIDMyODUwLCA3NjcxOSwgNzY3MjYsIDc2NzM0LCA3NjczOSwgMzk1OTEsIDc2NzQzLCA3Njc0OCwgNzY3NTUsIAotICAgIDc2NzYwLCA4OTg1LCA3Njc2NCwgNzY3NzIsIDc2Nzc5LCA3Njc4NiwgNzY3OTIsIDc2ODA2LCA2MzM0MCwgNzY4MTQsIAotICAgIDc2ODIwLCA3NjgyNCwgNzY4MjcsIDc2ODM1LCA3Njg0MiwgNzY4NDcsIDc2ODYwLCA3Njg2NywgNzY4NzEsIDc2ODc4LCAKLSAgICA3Njg4MywgNjA4MjMsIDc2ODg4LCA3Njg5MSwgNzY4OTgsIDc2OTA0LCA3NjkwOCwgNzY5MTYsIDc2OTI1LCA3NjkzNSwgCi0gICAgNzY5NDUsIDc2OTU0LCA3Njk2MiwgNzY5NzMsIDc2OTc4LCA3Njk4MiwgNzY5ODcsIDc2OTkxLCAzNTM2NCwgNzY5OTksIAotICAgIDIxMzQ0LCAzNTM3MywgNzcwMDQsIDc3MDA5LCA3NzAxNCwgNzcwMTksIDc3MDI0LCA3NzAyOSwgNzcwMzQsIDc3MDM4LCAKLSAgICA3NzA0MywgNzcwNDgsIDc3MDUzLCA3NzA1OCwgNzcwNjMsIDc3MDY4LCA3NzA3MiwgNzcwNzcsIDc3MDgyLCA3NzA4NiwgCi0gICAgNzcwOTAsIDc3MDk0LCA3NzA5OCwgNzcxMDMsIDc3MTA4LCA3NzExMiwgNzcxMTcsIDc3MTIxLCA3NzEyNSwgNzcxMzAsIAotICAgIDc3MTM1LCA3NzE0MCwgNzcxNDUsIDc3MTQ5LCA3NzE1NCwgNzcxNTksIDc3MTYzLCA3NzE2OCwgNzcxNzMsIDc3MTc4LCAKLSAgICA3NzE4MywgNzcxODgsIDc3MTkzLCA3NzE5OCwgNzcyMDMsIDc3MjA4LCA3NzIxMywgNzcyMTgsIDc3MjIzLCA3NzIyOCwgCi0gICAgNzcyMzMsIDc3MjM4LCA3NzI0MywgNzcyNDgsIDc3MjUzLCA3NzI1OCwgNzcyNjMsIDc3MjY3LCA3NzI3MiwgNzcyNzcsIAotICAgIDc3MjgyLCA3NzI4NywgNzcyOTIsIDc3Mjk3LCA3NzMwMiwgNzczMDcsIDc3MzEyLCA3NzMxNywgNzczMjIsIDc3MzI2LCAKLSAgICA3NzMzMSwgNzczMzUsIDc3MzQwLCA3NzM0NSwgNzczNTAsIDc3MzU1LCA3NzM2MCwgNzczNjUsIDc3MzcwLCA3NzM3NSwgCi0gICAgNzczODAsIDc3Mzg0LCA3NzM4OCwgNzczOTMsIDc3Mzk4LCA3NzQwMiwgNzc0MDcsIDc3NDEyLCA3NzQxNiwgNzc0MjEsIAotICAgIDc3NDI2LCA3NzQzMSwgNzc0MzYsIDc3NDQwLCA3NzQ0NSwgNzc0NTAsIDc3NDU0LCA3NzQ1OSwgNzc0NjMsIDc3NDY3LCAKLSAgICA3NzQ3MSwgNzc0NzUsIDc3NDgwLCA3NzQ4NCwgNzc0ODgsIDc3NDkyLCA3NzQ5NiwgNzc1MDAsIDc3NTA0LCA3NzUwOCwgCi0gICAgNzc1MTIsIDc3NTE2LCA3NzUyMSwgNzc1MjYsIDc3NTMxLCA3NzUzNiwgNzc1NDEsIDc3NTQ2LCA3NzU1MSwgNzc1NTYsIAotICAgIDc3NTYxLCA3NzU2NiwgNzc1NzAsIDc3NTc0LCA3NzU3OCwgNzc1ODIsIDc3NTg2LCA3NzU5MCwgNzc1OTUsIDc3NTk5LCAKLSAgICA3NzYwNCwgNzc2MDgsIDc3NjEzLCA3NzYxOCwgNzc2MjIsIDc3NjI2LCA3NzYzMSwgNzc2MzUsIDc3NjM5LCA3NzY0MywgCi0gICAgNzc2NDcsIDc3NjUxLCA3NzY1NSwgNzc2NTksIDc3NjYzLCA3NzY2NywgNzc2NzEsIDc3Njc1LCA3NzY3OSwgNzc2ODMsIAotICAgIDc3Njg3LCA3NzY5MiwgNzc2OTcsIDc3NzAxLCA3NzcwNSwgNzc3MDksIDc3NzEzLCA3NzcxNywgNzc3MjEsIDc3NzI2LCAKLSAgICA3NzczMCwgNzc3MzQsIDc3NzM4LCA3Nzc0MiwgNzc3NDYsIDc3NzUwLCA3Nzc1NSwgNzc3NTksIDc3NzY0LCA3Nzc2OCwgCi0gICAgNzc3NzIsIDc3Nzc2LCA3Nzc4MCwgNzc3ODQsIDc3Nzg4LCA3Nzc5MiwgNzc3OTYsIDc3ODAwLCA3NzgwNCwgNzc4MDgsIAorICAgIDg5MzUsIDg5MzksIDg5NDQsIDg5NDksIDg5NTYsIDg5NjIsIDg5NzIsIDc5MDksIDg5NzgsIDg5ODIsIDg5ODksIDg5OTYsIAorICAgIDc2OCwgOTAwMCwgOTAwNCwgOTAwOSwgOTAxNCwgOTAxOSwgOTAyMywgOTAyOSwgOTAzNywgOTA0MywgOTA0NywgOTA1MywgCisgICAgOTA2MywgOTA2NywgOTA3MywgOTA3OCwgOTA4MiwgOTA4OCwgOTA5NCwgMjE2MSwgOTA5OSwgOTEwMSwgOTEwNiwgOTExNCwgCisgICAgOTEyMywgOTEyNywgOTEzMywgOTEzOCwgOTE0MywgOTE0OCwgOTE1MywgOTE1OSwgOTE2NCwgOTE2OSwgNDAwNiwgOTE3NCwgCisgICAgOTE3OSwgOTE4MywgOTE4OSwgOTE5NCwgOTIwMCwgOTIwNSwgOTIxMCwgOTIxNiwgOTIyMSwgOTEyOCwgOTIyNywgOTIzMSwgCisgICAgOTIzOCwgOTI0NCwgOTI0OSwgOTI1MywgNjE4MywgOTI1OCwgOTI2NywgOTI3MiwgOTI3NywgODIxOCwgODIyNSwgOTI4MiwgCisgICAgMjg1MywgOTI4NiwgOTI5MSwgOTI5NiwgOTEzOSwgOTMwMCwgOTMwNSwgOTE0NCwgOTE0OSwgOTMxMCwgOTMxNywgOTMyNCwgCisgICAgOTMzMCwgOTMzNiwgOTM0MiwgOTM0NywgOTM1MiwgOTM1NywgOTE1NCwgOTE2MCwgOTM2MywgOTM2OSwgOTM3NCwgOTM4MiwgCisgICAgOTE2NSwgOTM4NywgOTkwLCA5MzkwLCA5Mzk4LCA5NDA0LCA5NDEwLCA5NDE5LCA5NDI3LCA5NDMyLCA5NDM4LCA5NDQ2LCAKKyAgICA5NDUzLCA5NDY4LCA5NDg1LCA5NTA0LCA5NTEzLCA5NTIxLCA5NTM2LCA5NTQ3LCA5NTU3LCA5NTY3LCA5NTc1LCA5NTgxLCAKKyAgICA5NTkzLCA5NjAyLCA5NjEwLCA5NjE3LCA5NjI0LCA5NjMwLCA5NjM1LCA5NjQzLCA5NjUzLCA5NjYwLCA5NjcwLCA5NjgwLCAKKyAgICA5NjkwLCA5Njk4LCA5NzA1LCA5NzE0LCA5NzI0LCA5NzM4LCA5NzUzLCA5NzYyLCA5NzcwLCA5Nzc1LCA5Nzc5LCA5Nzg4LCAKKyAgICA5Nzk0LCA5Nzk5LCA5ODA5LCA5ODE5LCA5ODI5LCA5ODM0LCA5ODM4LCA5ODQ3LCA5ODUyLCA5ODYyLCA5ODczLCA5ODg2LCAKKyAgICA5ODk0LCA5OTA3LCA5OTE5LCA5OTI3LCA5OTMyLCA5OTM2LCA5OTQyLCA5OTQ3LCA5OTU1LCA5OTYzLCA5OTcwLCA5OTc1LCAKKyAgICA5OTgzLCA5OTg5LCA5OTkyLCA5OTk2LCAxMDAwMiwgMTAwMTAsIDEwMDE1LCAxMDAxOSwgMTAwMjcsIDEwMDM2LCAxMDA0NCwgCisgICAgMTAwNTAsIDEwMDU0LCAxMDA2MSwgMTAwNzIsIDEwMDc2LCAxMDA3OSwgMTAwODUsIDkxNzAsIDEwMDkwLCAxMDA5NiwgCisgICAgMTAxMDMsIDEwMTA5LCAxMDExNCwgMTAxMjEsIDEwMTI4LCAxMDEzNSwgMTAxNDIsIDEwMTQ5LCAxMDE1NiwgMTAxNjMsIAorICAgIDEwMTcwLCAxMDE3NSwgOTQ4MSwgMTAxODAsIDEwMTg2LCAxMDE5MywgMTAyMDAsIDEwMjA1LCAxMDIxMiwgMTAyMjEsIAorICAgIDEwMjI1LCAxMDIzNywgODI1NiwgMTAyNDEsIDEwMjQ0LCAxMDI0OCwgMTAyNTIsIDEwMjU2LCAxMDI2MCwgMTAyNjYsIAorICAgIDEwMjcyLCAxMDI3NywgMTAyODMsIDEwMjg4LCAxMDI5MywgMTAyOTksIDEwMzA0LCAxMDMwOSwgODk1MiwgMTAzMTQsIAorICAgIDEwMzE4LCAxMDMyMiwgMTAzMjYsIDEwMzMxLCAxMDMzNiwgMTAzNDQsIDEwMzUwLCAxMDM1NCwgMTAzNTgsIDEwMzY1LCAKKyAgICAxMDM3MCwgMTAzNzgsIDEwMzgzLCAxMDM4NywgMTAzOTAsIDEwMzk2LCAxMDQwMywgMTA0MDcsIDEwNDEwLCAxMDQxNSwgCisgICAgMTA0MTksIDQwNDUsIDEwNDI1LCAxMDQzNCwgMzYsIDEwNDQyLCAxMDQ0OCwgMTA0NTMsIDg5NjcsIDEwNDU4LCAxMDQ2MywgCisgICAgMTA0NjcsIDEwNDcwLCAxMDQ4NSwgMTA1MDQsIDEwNTE2LCAxMDUyOSwgMTA1NDIsIDEwNTU1LCAxMDU2OSwgMTA1ODIsIAorICAgIDEwNTk3LCAxMDYwNCwgOTE3NSwgMTA2MTAsIDEwNjI0LCAxMDYyOSwgMTA2MzUsIDEwNjQwLCAxMDY0OCwgMTA2NTMsIAorICAgIDgwNDAsIDEwNjU4LCAxMDY2MSwgMTA2NjgsIDEwNjczLCAxMDY3NywgMjg1OCwgOTk4LCAxMDY4MywgMTA2ODcsIDEwNjkzLCAKKyAgICAxMDY5OSwgMTA3MDQsIDEwNzEwLCAxMDcxNSwgOTE4NCwgMTA3MjEsIDEwNzI3LCAxMDczMiwgMTA3MzcsIDEwNzQ1LCAKKyAgICAxMDc1MSwgMTA3NjQsIDEwNzcyLCAxMDc3OSwgOTE5MCwgMTA3ODUsIDEwNzkzLCAxMDgwMSwgMTA4MDgsIDEwODIxLCAKKyAgICAxMDgzMywgMTA4NDMsIDEwODUxLCAxMDg1OCwgMTA4NjUsIDEwODc0LCAxMDg4MywgMTA4OTEsIDEwODk4LCAxMDkwMywgCisgICAgMTA5MDksIDkxOTUsIDEwOTE0LCAxMDkyMCwgOTIwMSwgMTA5MjUsIDEwOTI4LCAxMDkzNSwgMTA5NDEsIDEwOTU0LCA4NjY5LCAKKyAgICAxMDk2NSwgMTA5NzEsIDEwOTgwLCAxMDk4OCwgMTA5OTUsIDExMDAxLCAxMTAwNywgMTEwMTIsIDExMDE2LCAxMTAyMSwgCisgICAgMTA0NzcsIDExMDI3LCA5MjA2LCAxMTAzNCwgMTEwMzksIDExMDQ2LCAxMTA1MiwgMTEwNTgsIDExMDYzLCAxMTA3MSwgCisgICAgMTEwNzksIDExMDg2LCAxMTA5MCwgMTExMDQsIDExMTE0LCAxMTExOSwgMTExMjMsIDExMTM0LCAxMTE0MCwgMTExNDUsIAorICAgIDExMTUwLCA5MjExLCA5MjE3LCAxMTE1NCwgMTExNTcsIDExMTYyLCAxMTE3NCwgMTExODEsIDExMTg2LCAxMTE5MCwgCisgICAgMTExOTUsIDExMTk5LCAxMTIwNiwgMTEyMTIsIDkyMjIsIDkxMjksIDExMjE5LCAyODYzLCA4LCAxMTIyNiwgMTEyMzEsIAorICAgIDExMjM1LCAxMTI0MSwgMTEyNDksIDExMjU5LCAxMTI2NCwgMTEyNjksIDExMjc2LCAxMTI4MywgMTEyODcsIDExMjk4LCAKKyAgICAxMTMwOCwgMTEzMTcsIDExMzI5LCAxMTMzNCwgMTEzMzgsIDExMzQ2LCAxMTM2MCwgMTEzNjQsIDExMzY3LCAxMTM3NSwgCisgICAgMTEzODIsIDExMzkwLCAxMTM5NCwgMTE0MDUsIDExNDA5LCAxMTQxNiwgMTE0MjEsIDExNDI1LCAxMTQzMSwgMTE0MzYsIAorICAgIDExNDQwLCAxMTQ0NiwgMTE0NTEsIDExNDYyLCAxMTQ2NiwgMTE0NjksIDExNDc1LCAxMTQ4MCwgMTE0ODYsIDExNDkyLCAKKyAgICAxMTQ5OSwgMTE1MTAsIDExNTIwLCAxMTUzMCwgMTE1MzksIDExNTQ2LCAxMTU1NSwgOTIzMiwgOTIzOSwgOTI0NSwgOTI1MCwgCisgICAgMTE1NjEsIDExNTY3LCA5MjU0LCAxMTU3MywgMTE1NzYsIDExNTgzLCAxMTU4OCwgMTE2MDMsIDExNjE5LCAxMTYzNCwgCisgICAgMTE2NDIsIDExNjQ4LCAxMTY1MywgODM4LCA0MjAsIDExNjU4LCAxMTY2NiwgMTE2NzMsIDExNjc5LCAxMTY4NCwgMTE2ODksIAorICAgIDkyNTksIDExNjkxLCAxMTY5NSwgMTE3MDAsIDExNzA0LCAxMTcxNCwgMTE3MTksIDExNzIzLCAxMTczMiwgMTE3MzYsIAorICAgIDExNzM5LCA5MjY4LCAxMTc0NiwgMTE3NDksIDExNzU3LCAxMTc2NCwgMTE3NzIsIDExNzc2LCAxMTc4MywgMTE3OTIsIAorICAgIDExNzk1LCAxMTc5OSwgMTE4MDMsIDExODA5LCAxMTgxMywgMTE4MTcsIDExODIxLCAxMTgyNywgMTE4MzcsIDExODQxLCAKKyAgICAxMTg0OSwgMTE4NTMsIDExODYwLCAxMTg2NCwgMTE4NjksIDExODczLCAxMTg4MCwgMTE4ODYsIDExODk0LCAxMTkwMCwgCisgICAgMTE5MDUsIDExOTE1LCAxMTkyMCwgMTE5MjUsIDExOTI5LCAxMTkzNywgMzkwNSwgMTE5NDUsIDExOTUwLCA5MjczLCAKKyAgICAxMTk1NCwgMTE5NTgsIDExOTYxLCAxMTk2OSwgMTE5NzYsIDExOTgwLCA1OTkxLCAxMTk4NCwgMTE5ODksIDExOTkzLCAKKyAgICAxMjAwNCwgMTIwMTQsIDEyMDE5LCAxMjAyNSwgMTIwMjksIDEyMDMyLCAxMjA0MCwgMTIwNDUsIDEyMDUwLCAxMjA1NywgCisgICAgMTIwNjIsIDkyNzgsIDEyMDY3LCAxMjA3MSwgMTIwNzgsIDE3MjIsIDYxNDUsIDEyMDgzLCAxMjA4OCwgMTIwOTMsIDEyMDk4LCAKKyAgICAxMjEwNCwgMTIxMDksIDEyMTE1LCAxMjEyMCwgMTIxMjUsIDEyMTMwLCAxMjEzNSwgMTIxNDAsIDEyMTQ1LCAxMjE1MCwgCisgICAgMTIxNTUsIDEyMTYwLCAxMjE2NSwgMTIxNzAsIDEyMTc1LCAxMjE4MCwgMTIxODUsIDEyMTkwLCAxMjE5NSwgMTIyMDEsIAorICAgIDEyMjA2LCAxMjIxMSwgMTIyMTYsIDEyMjIxLCAxMjIyNiwgMTIyMzIsIDEyMjM3LCAxMjI0MiwgMTIyNDgsIDEyMjUzLCAKKyAgICAxMjI1OSwgMTIyNjQsIDEyMjcwLCAxMjI3NSwgMTIyODAsIDEyMjg1LCAxMjI5MCwgMTIyOTYsIDEyMzAxLCAxMjMwNiwgCisgICAgMTIzMTEsIDczNywgMTM5LCAxMjMxOSwgMTIzMjMsIDEyMzI4LCAxMjMzMywgMTIzMzcsIDEyMzQxLCAxMjM0NSwgMTIzNTAsIAorICAgIDEyMzU0LCAxMjM1OSwgMTIzNjMsIDEyMzY2LCAxMjM3MCwgMTIzNzQsIDEyMzgwLCAxMjM4NSwgMTIzOTUsIDEyNDAxLCAKKyAgICAxMjQwOSwgMTI0MTMsIDEyNDE3LCAxMjQyNCwgMTI0MzIsIDEyNDQxLCAxMjQ1MiwgMTI0NTksIDEyNDY2LCAxMjQ3MCwgCisgICAgMTI0NzksIDEyNDg4LCAxMjQ5NiwgMTI1MDUsIDEyNTE0LCAxMjUyMywgMTI1MzIsIDEyNTQyLCAxMjU1MiwgMTI1NjIsIAorICAgIDEyNTcyLCAxMjU4MiwgMTI1OTEsIDEyNjAxLCAxMjYxMSwgMTI2MjEsIDEyNjMxLCAxMjY0MSwgMTI2NTEsIDEyNjYxLCAKKyAgICAxMjY3MCwgMTI2ODAsIDEyNjkwLCAxMjcwMCwgMTI3MTAsIDEyNzIwLCAxMjczMCwgMTI3MzksIDEyNzQ5LCAxMjc1OSwgCisgICAgMTI3NjksIDEyNzc5LCAxMjc4OSwgMTI3OTksIDEyODA5LCAxMjgxOSwgMTI4MjksIDEyODM4LCAxMjg0OCwgMTI4NTgsIAorICAgIDEyODY4LCAxMjg3OCwgMTI4ODgsIDEyODk4LCAxMjkwOCwgMTI5MTgsIDEyOTI4LCAxMjkzOCwgMTI5NDcsIDEyNTYsIAorICAgIDEyOTUzLCAxMjk1NiwgMTI5NjAsIDEyOTY1LCAxMjk3MiwgMTI5NzgsIDEyOTgzLCAxMjk4NywgMTI5OTIsIDEzMDAxLCAKKyAgICAxMzAwOSwgMTMwMTQsIDEzMDE4LCAxMzAyMiwgMTMwMjgsIDEzMDMzLCAxMzAzOSwgOTI4NywgMTMwNDQsIDEzMDQ5LCAKKyAgICAxMzA1OCwgOTI5MiwgMTMwNjMsIDEzMDY2LCAxMzA3MiwgMTMwODAsIDkyOTcsIDEzMDg3LCAxMzA5MSwgMTMwOTUsIAorICAgIDEzMDk5LCAxMzEwOSwgMTMxMTUsIDEzMTIxLCAxMzEyNiwgMTMxMzUsIDEzMTQzLCAxMzE1MCwgMTMxNTcsIDEzMTYyLCAKKyAgICAxMzE2OSwgMTMxNzQsIDEzMTc4LCAxMzE4MSwgMTMxOTIsIDEzMjAyLCAxMzIxMSwgMTMyMTksIDEzMjMwLCAxMzI0MiwgCisgICAgMTMyNTIsIDEzMjU3LCAxMzI2MSwgMTMyNjYsIDEzMjcxLCAxMzI3NSwgMTMyODEsIDEzMjg5LCAxMzI5NiwgMTMzMDcsIAorICAgIDEzMzEyLCAxMzMyMiwgMTMzMjYsIDEzMzI5LCAxMzMzNiwgMTMzNDYsIDEzMzU1LCAxMzM2MiwgMTMzNjYsIDEzMzczLCAKKyAgICAxMzM3OSwgMTMzODQsIDEzMzg5LCAxMzM5MywgMTM0MDIsIDEzNDA3LCAxMzQxMywgMTM0MTcsIDEzNDIyLCAxMzQyNiwgCisgICAgMTM0MzUsIDEzNDQzLCAxMzQ1MSwgMTM0NTgsIDEzNDY2LCAxMzQ3OCwgMTM0ODksIDEzNDk5LCAxMzUwNiwgMTM1MTIsIAorICAgIDEzNTIxLCAxMzUzMiwgMTM1NDEsIDEzNTUzLCAxMzU2NSwgMTM1NzcsIDEzNTg3LCAxMzU5NiwgMTM2MDUsIDEzNjEzLCAKKyAgICAxMzYyMCwgMTM2MjksIDEzNjM3LCAxMzY0MSwgMTM2NDcsIDEzNjUzLCAxMzY1OCwgNzc1MywgMTM2NjIsIDEzNjY0LCAKKyAgICAxMzY2OCwgMTM2NzMsIDEzNjc5LCAxMzY4OCwgMTM2OTIsIDEzNjk4LCAxMzcwNiwgMTM3MTMsIDEzNzIyLCAxMzczMSwgCisgICAgMTM3NDAsIDEzNzQ5LCAxMzc1OCwgMTM3NjcsIDEzNzc2LCAxMzc4NSwgMTM3OTUsIDEzODA1LCAxMzgxNCwgMTM4MjAsIAorICAgIDEzODI3LCAxMzgzNCwgMTM4NDAsIDEzODU0LCAxMzg2MSwgMTM4NjksIDEzODc4LCAxMzg4NCwgMTM4OTMsIDEzOTAyLCAKKyAgICAxMzkxMywgMTM5MjMsIDEzOTMxLCAxMzkzOCwgMTM5NDYsIDEzOTU1LCAxMzk2OCwgMTM5NzYsIDEzOTgzLCAxMzk5NiwgCisgICAgMTQwMDIsIDE0MDA4LCAxNDAxOCwgMTQwMjcsIDE0MDM2LCAxNDA0MSwgMTQwNDUsIDE0MDUxLCAxNDA1NywgMTQwNjQsIAorICAgIDg5NjYsIDE0MDY5LCAxNDA3NCwgMTQwODEsIDE0MDg2LCAxMjM3NiwgMTQwOTEsIDE0MDk5LCAxNDEwNSwgMTQxMTAsIAorICAgIDE0MTE4LCAxNDEyNiwgMTQxMzMsIDE0MTQxLCAxNDE0NywgMTQxNTUsIDE0MTYzLCAxNDE2OSwgMTQxNzQsIDE0MTgwLCAKKyAgICAxNDE4NywgMTQxOTMsIDE0MTk4LCAxNDIwMiwgMTQyMTMsIDE0MjIxLCAxNDIyNywgMTQyMzIsIDE0MjQxLCAxNDI0NywgCisgICAgMTQyNTIsIDE0MjYxLCAxNDI3NSwgMzg1MywgMTQyNzksIDE0Mjg0LCAxNDI4OSwgMTQyOTUsIDE0MzAwLCAxNDMwNSwgCisgICAgMTQzMDksIDE0MzE0LCAxNDMxOSwgMTQzMjQsIDc3NTIsIDE0MzI5LCAxNDMzNCwgMTQzMzksIDE0MzQ0LCAxNDM0OSwgCisgICAgMTQzNTMsIDE0MzU4LCAxNDM2MywgMTQzNjgsIDE0MzczLCAxNDM3OSwgMTQzODUsIDE0MzkwLCAxNDM5NCwgMTQzOTksIAorICAgIDE0NDA0LCAxNDQwOSwgOTMwMSwgMTQ0MTQsIDE0NDE5LCAxNDQyNCwgMTQ0MjksIDE0NDM0LCAxNDQ1MSwgMTQ0NjksIAorICAgIDE0NDgxLCAxNDQ5NCwgMTQ1MTEsIDE0NTI3LCAxNDU0NCwgMTQ1NTQsIDE0NTczLCAxNDU4NCwgMTQ1OTUsIDE0NjA2LCAKKyAgICAxNDYxNywgMTQ2MjksIDE0NjQwLCAxNDY1MSwgMTQ2NjgsIDE0Njc5LCAxNDY5MCwgMTQ2OTUsIDkzMDYsIDE0NzAwLCAKKyAgICAxNDcwNCwgMjM4MSwgMTQ3MDgsIDE0NzExLCAxNDcxNywgMTQ3MjUsIDE0NzMzLCAxNDczOCwgMTQ3NDYsIDE0NzU0LCAKKyAgICAxNDc2MSwgMTQ3NjYsIDE0NzcyLCAxNDc3OSwgMTQ3ODcsIDE0Nzk0LCAxNDgwNiwgMTQ4MTQsIDE0ODE5LCAxMTU5NywgCisgICAgMTQ4MjUsIDE0ODM0LCAxNDg0MywgMTQ4NTEsIDE0ODU4LCAxNDg2NCwgMTQ4NzIsIDE0ODc5LCAxNDg4NSwgMTQ4OTIsIAorICAgIDE0ODk4LCAxNDkwNywgMTQ5MTUsIDE0OTI1LCAxNDkzMiwgMTQ5MzgsIDE0OTQ2LCAxNDk1MiwgMTQ5NjAsIDE0OTY3LCAKKyAgICAxNDk4MCwgMTQ5ODcsIDE0OTk2LCAxNTAwNSwgMTUwMTQsIDE1MDIyLCAxNTAzMiwgMTUwMzksIDE1MDQ0LCAzNTYwLCAKKyAgICAxNTA1MSwgMTUwNTYsIDEzNzIsIDE1MDYwLCAxNDMzMCwgMTUwNjQsIDE1MDcwLCAxNTA3NCwgMTUwODIsIDE1MDk0LCAKKyAgICAxNTA5OSwgMTUxMDYsIDE1MTEyLCAxNTExNywgMTUxMjQsIDE0MzM1LCAxNTEyOCwgMTUxMzIsIDE1MTM2LCAxNDM0MCwgCisgICAgMTUxNDAsIDE0MzQ1LCAxNTE0NCwgMTUxNTEsIDE1MTU2LCAxNTE2MCwgMTUxNjcsIDE1MTcxLCAxNTE3OSwgMTUxODYsIAorICAgIDE1MTkwLCAxNTE5NywgMTUyMTQsIDE1MjIzLCAxNTIyNywgMTUyMzAsIDE1MjM4LCAxNTI0NCwgMTUyNDksIDM2MzgsIAorICAgIDE1MjUzLCAxNTI1NSwgMTUyNjMsIDE1MjcwLCAxNTI4MCwgMTUyOTIsIDE1Mjk3LCAxNTMwMywgMTUzMDgsIDE1MzEyLCAKKyAgICAxNTMxOCwgMTUzMjMsIDE1MzI5LCAxNTMzMiwgMTUzMzksIDE1MzQ3LCAxNTM1NCwgMTUzNjAsIDE1MzY2LCAxNTM3MSwgCisgICAgMTUzNzgsIDE1Mzg0LCAxNTM4OSwgMTUzOTYsIDE1NDAwLCAxNTQwNiwgMTU0MTAsIDE1NDE3LCAxNTQyMywgMTU0MjksIAorICAgIDE1NDM3LCAxNTQ0MywgMTU0NDgsIDE1NDU0LCAxNTQ2MiwgMTU0NzAsIDE1NDc2LCAxNTQ4MiwgMTU0ODcsIDE1NDk0LCAKKyAgICAxNTQ5OSwgMTU1MDMsIDE1NTA5LCAxNTUxNCwgMTU1MjEsIDE1NTI2LCAxNTUzMiwgMTU1MzUsIDE1NTQxLCAxNTU0NywgCisgICAgMTU1NTAsIDE1NTU0LCAxNTU2NiwgMTU1NzIsIDE1NTc3LCAxNTU4NCwgMTU1OTAsIDE1NTk2LCAxNTYwNywgMTU2MTcsIAorICAgIDE1NjI2LCAxNTYzNCwgMTU2NDEsIDE1NjUyLCAxNTY2MiwgMTU2NzIsIDE1NjgwLCAxNTY4MywgMTQzNTksIDE1Njg4LCAKKyAgICAxNTY5MywgMTQzNjQsIDE0NDk5LCAxNTcwMSwgMTU3MTQsIDE1NzI5LCAxNTc0MCwgMTQ1MTYsIDE1NzU4LCAxNTc3MSwgCisgICAgMTU3ODQsIDE1Nzk1LCAxMDQ5MiwgMTU4MDYsIDE1ODE5LCAxNTgzOCwgMTU4NDksIDE1ODYwLCAxNTg3MSwgMjY0OSwgCisgICAgMTU4ODQsIDE1ODg4LCAxNTg5NiwgMTU5MTEsIDE1OTI2LCAxNTkzNywgMTU5NDQsIDE1OTUwLCAxNTk1OCwgMTU5NjIsIAorICAgIDE1OTY4LCAxNTk3MSwgMTU5ODEsIDE1OTg5LCAxNTk5NiwgMTYwMDQsIDE2MDE0LCAxNjAxOSwgMTYwMjYsIDE2MDMxLCAKKyAgICAxNjAzOCwgMTYwNDksIDE2MDU5LCAxNjA2NSwgMTYwNzAsIDE2MDc1LCAxNDM2OSwgMTYwNzksIDE2MDg1LCAxNjA5MSwgCisgICAgMTYwOTYsIDE2MTAxLCAxNjEwNiwgMTYxMTAsIDE0Mzc0LCAxNDM4MCwgMTYxMTQsIDE0Mzg2LCAxNjExOSwgMTYxMjcsIAorICAgIDE2MTM2LCAxNjE0MywgOTE1MCwgMTYxNDcsIDE2MTQ5LCAxNjE1NCwgMTYxNTksIDE2MTY1LCAxNjE3MCwgMTYxNzUsIAorICAgIDE2MTgwLCAxNjE4NSwgMTYxODksIDE2MTk1LCAxNjIwMSwgMTYyMDYsIDE2MjEyLCAxNjIxNywgMTYyMjIsIDE2MjI4LCAKKyAgICAxNjIzMywgMTYyMzgsIDE2MjQzLCAxNjI0OCwgMTYyNTQsIDE2MjU5LCAxNjI2NCwgMTYyNzAsIDE2Mjc2LCAxNjI4MSwgCisgICAgMTYyODYsIDE2MjkzLCAxNjI5OSwgMTYzMTAsIDE2MzE3LCAxNjMyMiwgMTYzMjYsIDE2MzMwLCAxNjMzMywgMTYzNDEsIAorICAgIDE2MzQ2LCAxNjM1MywgMTYzNjAsIDE2MzY2LCAxNjM3MSwgMTYzNzYsIDE2MzgzLCAxNjM5MywgMTYzOTgsIDE2NDA1LCAKKyAgICAxNjQxMSwgMTY0MjEsIDE2NDMxLCAxNjQ0NSwgMTY0NTksIDE2NDczLCAxNjQ4NywgMTY1MDIsIDE2NTE3LCAxNjUzNCwgCisgICAgMTY1NTIsIDE2NTY1LCAxNjU3MSwgMTY1NzYsIDE2NTgxLCAxNjU4NSwgMTY1OTAsIDE2NTk4LCAxNjYwNCwgMTY2MDksIAorICAgIDE2NjE0LCAxNjYxOCwgMTY2MjMsIDE2NjI3LCAxNjYzMiwgMTY2MzYsIDE2NjQ3LCAxNjY1MywgMTY2NTgsIDE2NjYzLCAKKyAgICAxNjY3MCwgMTY2NzUsIDE2Njc5LCAxNjY4NCwgMTY2ODksIDE2Njk1LCAxNjcwMiwgMTY3MDgsIDE2NzEzLCAxNjcxNywgCisgICAgMTY3MjMsIDE2NzI4LCAxNjczMywgMTY3MzcsIDE2NzQzLCAxNjc0OCwgMTY3NTMsIDE2NzYwLCAxNjc2NSwgMTMxMTEsIAorICAgIDE2NzY5LCAxNjc3NCwgMTY3NzgsIDE2NzgzLCAxNjc4OSwgMTY3OTUsIDE2ODAyLCAxNjgxMiwgMTY4MjAsIDE2ODI3LCAKKyAgICAxNjgzMiwgMTY4MzYsIDE2ODQ1LCAxNjg1MywgMTY4NjAsIDE2ODY3LCAxNjg3MywgMTY4NzksIDE2ODg0LCAxNjg4OSwgCisgICAgMTY4OTUsIDE2OTAwLCAxNjkwNiwgMTY5MTEsIDE2OTE3LCAxNjkyMywgMTY5MzAsIDE2OTM2LCAxNjk0MSwgMTY5NDYsIAorICAgIDkzNDgsIDE2OTU1LCAxNjk1OCwgMTY5NjQsIDE2OTY5LCAxNjk3NCwgMTY5ODQsIDE2OTkxLCAxNjk5NywgMTcwMDIsIAorICAgIDE3MDA3LCAxNzAxMywgMTcwMTgsIDE3MDI0LCAxNzAyOSwgMTcwMzUsIDE3MDQxLCAxNzA0NiwgMTcwNTQsIDE3MDYxLCAKKyAgICAxNzA2NiwgMTcwNzEsIDE3MDc3LCAxNzA4MiwgMTcwODYsIDE3MDk1LCAxNzEwNiwgMTcxMTMsIDE3MTE4LCAxNzEyNiwgCisgICAgMTcxMzIsIDE3MTM5LCAxNzE0NSwgMTcxNTAsIDE3MTU0LCAxNzE2MCwgMTcxNjUsIDE3MTcwLCAxNzE3NSwgMTQ0MCwgCisgICAgNzc3NywgMjg3NywgMTcxNzksIDE3MTgzLCAxNzE4NywgMTcxOTEsIDE3MTk1LCAxNzE5OSwgMTcyMDIsIDE3MjA5LCAKKyAgICAxNzIxNywgMTQ0MDAsIDE3MjI0LCAxNzIzNCwgMTcyNDIsIDE3MjQ5LCAxNzI1NywgMTcyNjcsIDE3Mjc2LCAxNzI4OSwgCisgICAgMTcyOTQsIDE3Mjk5LCAxNzMwNywgMTczMTQsIDEzMjA3LCAxMzIxNiwgMTczMjEsIDE3MzMxLCAxNzM0NiwgMTczNTIsIAorICAgIDE3MzU5LCAxNzM2NiwgMTczNzIsIDE3MzgwLCAxNzM5MCwgMTc0MDAsIDE0NDA1LCAxNzQwOSwgMTc0MTUsIDE3NDIxLCAKKyAgICAxNzQyOSwgMTc0MzcsIDE3NDQyLCAxNzQ1MSwgMTc0NTksIDE3NDcxLCAxNzQ4MSwgMTc0OTEsIDE3NTAxLCAxNzUxMCwgCisgICAgMTc1MjIsIDE3NTMyLCAxNzU0MiwgMTc1NTMsIDE3NTU4LCAxNzU3MCwgMTc1ODIsIDE3NTk0LCAxNzYwNiwgMTc2MTgsIAorICAgIDE3NjMwLCAxNzY0MiwgMTc2NTQsIDE3NjY2LCAxNzY3OCwgMTc2ODksIDE3NzAxLCAxNzcxMywgMTc3MjUsIDE3NzM3LCAKKyAgICAxNzc0OSwgMTc3NjEsIDE3NzczLCAxNzc4NSwgMTc3OTcsIDE3ODA5LCAxNzgyMCwgMTc4MzIsIDE3ODQ0LCAxNzg1NiwgCisgICAgMTc4NjgsIDE3ODgwLCAxNzg5MiwgMTc5MDQsIDE3OTE2LCAxNzkyOCwgMTc5NDAsIDE3OTUxLCAxNzk2MywgMTc5NzUsIAorICAgIDE3OTg3LCAxNzk5OSwgMTgwMTEsIDE4MDIzLCAxODAzNSwgMTgwNDcsIDE4MDU5LCAxODA3MSwgMTgwODIsIDE4MDk0LCAKKyAgICAxODEwNiwgMTgxMTgsIDE4MTMwLCAxODE0MiwgMTgxNTQsIDE4MTY2LCAxODE3OCwgMTgxOTAsIDE4MjAyLCAxODIxMywgCisgICAgMTgyMjUsIDE4MjM3LCAxODI0OSwgMTgyNjEsIDE4MjczLCAxODI4NSwgMTgyOTcsIDE4MzA5LCAxODMyMSwgMTgzMzMsIAorICAgIDE4MzQ0LCAxODM1NiwgMTgzNjgsIDE4MzgwLCAxODM5MiwgMTg0MDQsIDE4NDE2LCAxODQyOCwgMTg0NDAsIDE4NDUyLCAKKyAgICAxODQ2NCwgMTg0NzUsIDE4NDg3LCAxODQ5OSwgMTg1MTEsIDE4NTIzLCAxODUzNiwgMTg1NDksIDE4NTYyLCAxODU3NSwgCisgICAgMTg1ODgsIDE4NjAxLCAxODYxNCwgMTg2MjYsIDE4NjM5LCAxODY1MiwgMTg2NjUsIDE4Njc4LCAxODY5MSwgMTg3MDQsIAorICAgIDE4NzE3LCAxODczMCwgMTg3NDMsIDE4NzU2LCAxODc2OCwgMTg3ODEsIDE4Nzk0LCAxODgwNywgMTg4MjAsIDE4ODMzLCAKKyAgICAxODg0NiwgMTg4NTksIDE4ODcyLCAxODg4NSwgMTg4OTgsIDE4OTEwLCAxODkyMywgMTg5MzYsIDE4OTQ5LCAxODk2MiwgCisgICAgMTg5NzUsIDE4OTg4LCAxOTAwMSwgMTkwMTQsIDE5MDI3LCAxOTA0MCwgMTkwNTIsIDE5MDY1LCAxOTA3OCwgMTkwOTEsIAorICAgIDE5MTA0LCAxOTExNywgMTkxMzAsIDE5MTQzLCAxOTE1NiwgMTkxNjksIDE5MTgyLCAxOTE5NCwgMTkyMDcsIDE5MjIwLCAKKyAgICAxOTIzMywgMTkyNDYsIDE5MjU5LCAxOTI3MiwgMTkyODUsIDE5Mjk4LCAxOTMxMSwgMTkzMjQsIDE5MzM2LCAxOTM0NywgCisgICAgMTkzNjAsIDE5MzczLCAxOTM4NiwgMTkzOTksIDE5NDEyLCAxOTQyNSwgMTk0MzgsIDE5NDUxLCAxOTQ2NCwgMTk0NzcsIAorICAgIDE5NDg5LCAxOTUwMiwgMTk1MTUsIDE5NTI4LCAxOTU0MSwgMTk1NTQsIDE5NTY3LCAxOTU4MCwgMTk1OTMsIDE5NjA2LCAKKyAgICAxOTYxOSwgMTk2MzEsIDE5NjQ0LCAxOTY1NywgMTk2NzAsIDE5NjgzLCAxOTY5NiwgMTk3MDksIDE5NzIyLCAxOTczNSwgCisgICAgMTk3NDgsIDE5NzYxLCAxOTc3MywgMTk3ODYsIDE5Nzk5LCAxOTgxMiwgMTk4MjUsIDE5ODM4LCAxOTg1MSwgMTk4NjQsIAorICAgIDE5ODc3LCAxOTg5MCwgMTk5MDMsIDE5OTE1LCAxOTkyOCwgMTk5NDEsIDE5OTU0LCAxOTk2NywgMTk5ODAsIDE5OTkzLCAKKyAgICAyMDAwNiwgMjAwMTksIDIwMDMyLCAyMDA0NSwgMjAwNTcsIDIwMDcwLCAyMDA4MywgMjAwOTYsIDIwMTA5LCAyMDEyMiwgCisgICAgMjAxMzUsIDIwMTQ4LCAyMDE2MSwgMjAxNzQsIDIwMTg3LCAyMDE5OSwgMjAyMTIsIDIwMjI1LCAyMDIzOCwgMjAyNTEsIAorICAgIDIwMjY0LCAyMDI3NywgMjAyOTAsIDIwMzAzLCAyMDMxNiwgMjAzMjksIDIwMzQxLCAyMDM1NCwgMjAzNjcsIDIwMzgwLCAKKyAgICAyMDM5MywgMjA0MDYsIDIwNDE5LCAyMDQzMiwgMjA0NDUsIDIwNDU4LCAyMDQ3MSwgMjA0ODMsIDIwNDk2LCAyMDUwOSwgCisgICAgMjA1MjIsIDIwNTM1LCAyMDU0OCwgMjA1NjEsIDIwNTc0LCAyMDU4NywgMjA2MDAsIDIwNjEzLCAyMDYyNSwgMjA2MzgsIAorICAgIDIwNjUxLCAyMDY2NCwgMjA2NzcsIDIwNjkwLCAyMDcwMywgMjA3MTYsIDIwNzI5LCAyMDc0MiwgMjA3NTUsIDIwNzY3LCAKKyAgICAyMDc3OCwgMjA3ODYsIDIwNzk0LCAyMDgwMSwgMjA4MDcsIDIwODExLCAyMDgxNywgMjA4MjMsIDIwODMxLCAyMDgzNywgCisgICAgMjA4NDIsIDIwODQ2LCAyMDg1NSwgOTE1NSwgMjA4NjYsIDIwODczLCAyMDg4MSwgMjA4ODgsIDIwODk1LCAxMDk0OCwgCisgICAgMjA5MDIsIDIwOTExLCAyMDkxNiwgMjA5MjEsIDc4MDUsIDIwOTI4LCAyMDkzMywgMjA5MzYsIDIwOTQxLCAyMDk0OSwgCisgICAgMjA5NTYsIDIwOTYzLCAyMDk3MCwgMjA5NzYsIDIwOTg1LCAyMDk5NCwgMjEwMDAsIDIxMDA5LCAyMTAxMywgMjEwMTksIAorICAgIDIxMDI0LCAyMTAzNCwgMjEwNDEsIDIxMDQ3LCAyMTA1NSwgMjEwNjEsIDIxMDY4LCAyMTA3OCwgMjEwODcsIDIxMDkxLCAKKyAgICAyMTA5OCwgMjExMDIsIDIxMTA3LCAyMTExMywgMjExMjEsIDIxMTI1LCAyMTEzNSwgMTQ0MTUsIDIxMTQ0LCAyMTE1MCwgCisgICAgMjExNTQsIDIxMTYzLCAxNDQyMCwgMjExNjksIDIxMTc2LCAyMTE4NywgMjExOTUsIDIxMjA0LCAyMTIxMiwgODkzMSwgCisgICAgMjEyMjAsIDIxMjI1LCAyMTIzMSwgMjEyMzYsIDIxMjQwLCAyMTI0NCwgMjEyNDgsIDk2MzksIDIxMjUzLCAyMTI2MSwgCisgICAgMjEyNjgsIDIxMjc3LCAyMTI4NCwgMjEyOTEsIDEwODc4LCAyMTI5OCwgMjEzMDQsIDIxMzA4LCAyMTMxNCwgMjEzMjEsIAorICAgIDIxMzI3LCAyMTMzNSwgMjEzNDEsIDIxMzQ4LCAyMTM1NCwgMjEzNjAsIDIxMzY5LCAyMTM3MywgMjEzODEsIDIxMzkwLCAKKyAgICAyMTM5NywgMjE0MDIsIDIxNDA2LCAyMTQxNywgMjE0MjIsIDIxNDI3LCAyMTQzMiwgMjE0NDUsIDc5OTUsIDIxNDQ5LCAKKyAgICAyMTQ1NSwgMjE0NjMsIDIxNDY3LCAyMTQ3NCwgMjE0ODMsIDIxNDg4LCAxNDY5MSwgMjE0OTYsIDIxNTAwLCAyMTUxMiwgCisgICAgMjE1MTcsIDIxNTIxLCAyMTUyNCwgMjE1MzAsIDIxNTM2LCAyMTU0MSwgMjE1NDUsIDIxNTQ4LCAyMTU1OSwgMjE1NjQsIAorICAgIDkzODMsIDIxNTcxLCAyMTU3NiwgOTM4OCwgMjE1ODEsIDIxNTg2LCAyMTU5MSwgMjE1OTYsIDIxNjAxLCAyMTYwNiwgCisgICAgMjE2MTEsIDIxNjE2LCAyMTYyMSwgMjE2MjYsIDIxNjMxLCAyMTYzNiwgMjE2NDIsIDIxNjQ3LCAyMTY1MiwgMjE2NTcsIAorICAgIDIxNjYyLCAyMTY2NywgMjE2NzIsIDIxNjc3LCAyMTY4MiwgMjE2ODcsIDIxNjkzLCAyMTY5OSwgMjE3MDQsIDIxNzA5LCAKKyAgICAyMTcxNCwgMjE3MTksIDIxNzI0LCAyMTcyOSwgMjE3MzQsIDIxNzM5LCAyMTc0NCwgMjE3NTAsIDIxNzU1LCAyMTc2MCwgCisgICAgMjE3NjUsIDIxNzcxLCAyMTc3NywgMjE3ODIsIDIxNzg3LCAyMTc5MiwgMjE3OTcsIDIxODAyLCAyMTgwNywgMjE4MTIsIAorICAgIDIxODE3LCAyMTgyMywgMjE4MjgsIDIxODMzLCAyMTgzOCwgMjE4NDMsIDIxODQ5LCAyMTg1NCwgMjE4NTksIDIxODYzLCAKKyAgICAxMzY4LCAxMjksIDIxODcxLCAyMTg3NSwgMjE4NzksIDIxODgzLCAyMTg4OCwgMjE4OTIsIDEzMTE3LCAxMjQ3NiwgMjE4OTYsIAorICAgIDIxOTAxLCAyMTkwNSwgMjE5MTAsIDIxOTE0LCAyMTkxOSwgMjE5MjMsIDIxOTI5LCAyMTkzNCwgMjE5MzgsIDIxOTQyLCAKKyAgICAyMTk1MCwgMjE5NTQsIDIxOTU4LCAyMTk2MywgMjE5NjgsIDIxOTcyLCAyMTk3OCwgMjE5ODMsIDIxOTg3LCAyMTk5MiwgCisgICAgMjE5OTcsIDIyMDAxLCAyMjAwOCwgMjIwMTUsIDIyMDIyLCAyMjAyNiwgMjIwMzAsIDIyMDM1LCAyMjAzOSwgMjIwNDIsIAorICAgIDIyMDQ4LCAyMjA2MSwgMjIwNjYsIDIyMDc1LCAyMjA4MCwgOTQyOCwgMjIwODUsIDIyMDg4LCAyNzEyLCAyNzE3LCAyMjA5MiwgCisgICAgMjIwOTgsIDIyMTA0LCA3MjA5LCAyMjEwOSwgMjIxMTQsIDIyMTE5LCAyMjEyNSwgMjIxMzAsIDEzOTA5LCAyMjEzNSwgCisgICAgMjIxNDAsIDIyMTQ1LCAyMjE1MCwgMjIxNTYsIDIyMTYxLCAyMjE2NiwgMjIxNzIsIDIyMTc3LCAyMjE4MSwgMjIxODYsIAorICAgIDIyMTkxLCAyMjE5NiwgMjIyMDEsIDIyMjA1LCAyMjIxMCwgMjIyMTQsIDIyMjE5LCAyMjIyNCwgMjIyMjksIDIyMjM0LCAKKyAgICAyMjIzOCwgMjIyNDMsIDIyMjQ3LCAyMjI1MiwgMjIyNTcsIDIyMjYyLCAyMjI2NywgMjg4NiwgMjIxODIsIDIyMjcxLCAKKyAgICAyMjI3OSwgMjIyODYsIDk3MzMsIDIyMjk4LCAyMjMwNiwgMjIxODcsIDIyMzEzLCAyMjMxOCwgMjIzMjYsIDIyMTkyLCAKKyAgICAyMjMzMSwgMjIzMzYsIDIyMzQ0LCAyMjM0OSwgMjIxOTcsIDIyMzU0LCAyMjM1OSwgMjIzNjMsIDIyMzY5LCAyMjM3NywgCisgICAgMjIzODAsIDIyMzg3LCAyMjM5MSwgMjIzOTUsIDIyNDAxLCAyMjQwOCwgMjI0MTMsIDg5NTgsIDE3MjcsIDE3MzIsIDIyNDE3LCAKKyAgICAyMjQyMywgMjI0MjksIDIyNDM0LCAyMjQzOCwgMjI0NDIsIDIyNDQ2LCAyMjQ1MCwgMjI0NTQsIDIyNDU4LCAyMjQ2MiwgCisgICAgMjI0NjYsIDIyNDY5LCAyMjQ3NSwgMjI0ODIsIDIyNDkwLCAyMjQ5NiwgMjI1MDIsIDIyNTA3LCAyMjUxMiwgMjI1MTYsIAorICAgIDEzODI5LCAxMzgzNiwgMjI1MjEsIDIyNTMzLCAyMjUzNiwgMjI1NDMsIDE2MzYyLCAyMjU1MCwgMjI1NTgsIDIyNTY5LCAKKyAgICAyMjU3OCwgMjI1OTEsIDIyNjAxLCAyMjYxNSwgMjI2MjcsIDIyNjQxLCAyMjY1MywgMjI2NjMsIDIyNjc1LCAyMjY4MSwgCisgICAgMjI2OTYsIDIyNzIwLCAyMjczOCwgMjI3NTcsIDIyNzcwLCAyMjc4NCwgMjI4MDIsIDIyODE4LCAyMjgzNSwgMjI4NTMsIAorICAgIDIyODY0LCAyMjg4MywgMjI5MDAsIDIyOTIwLCAyMjkzOCwgMjI5NTAsIDIyOTY0LCAyMjk3OCwgMjI5OTAsIDIzMDA3LCAKKyAgICAyMzAyNiwgMjMwNDQsIDIzMDU2LCAyMzA3NCwgMjMwOTMsIDE0NTU5LCAyMzEwNiwgMjMxMjYsIDIzMTM4LCAxMDUyMywgCisgICAgMjMxNTAsIDIzMTU1LCAyMzE2MCwgMjMxNjUsIDIzMTcxLCAyMzE3NiwgMjMxODAsIDIzMTg3LCAyMzk4LCAyMzE5MSwgCisgICAgMjMxOTcsIDIzMjAxLCAyMzIwNCwgMjMyMDgsIDIzMjE2LCAyMzIyMiwgMjIyMTUsIDIzMjI2LCAyMzIzNSwgMjMyNDYsIAorICAgIDIzMjUyLCAyMzI1OCwgMjMyNjcsIDIzMjc1LCAyMzI4MiwgMjMyODcsIDIzMjkxLCAyMzI5OCwgMjMzMDQsIDIzMzEzLCAKKyAgICAyMzMyMSwgMjMzMjgsIDIzMzM4LCAyMzM0NywgMjMzNTcsIDIzMzYyLCAyMzM3MSwgMjMzODAsIDIzMzkxLCAyMzQwMiwgCisgICAgMzk2MywgMjM0MTIsIDIzNDE2LCAyMzQyNiwgMjM0MzQsIDIzNDQ0LCAyMzQ1NSwgMjM0NjAsIDIzNDcwLCAyMzQ3OCwgCisgICAgMjM0ODUsIDIzNDkxLCAyMzQ5OCwgMjM1MDMsIDIyMjI1LCAyMzUwNywgMjM1MTYsIDIzNTIwLCAyMzUyMywgMjM1MjgsIAorICAgIDIzNTM1LCAyMzU0NCwgMjM1NTIsIDIzNTYwLCAyMzU3MCwgMjM1NzksIDIzNTg1LCAyMzU5MSwgMjIyMzAsIDIyMjM1LCAKKyAgICAyMzU5NSwgMjM2MDUsIDIzNjE1LCAyMzYyNSwgMjM2MzMsIDIzNjQwLCAyMzY1MCwgMjM2NTgsIDIzNjY2LCAyMzY3MiwgCisgICAgMjM2ODAsIDkzMCwgMjM2ODksIDE0NzUwLCA1NDIsIDIzNzAzLCAyMzcxMiwgMjM3MjAsIDIzNzMxLCAyMzc0MiwgMjM3NTIsIAorICAgIDIzNzYxLCAyMzc3MywgMjM3ODIsIDIzNzkxLCAyMzc5NywgMjM4MDYsIDIzODE1LCAyMzgyNSwgMjM4MzMsIDIzODQxLCAKKyAgICA5MzYwLCAyMzg0NywgMjM4NTAsIDIzODU0LCAyMzg1OSwgMjM4NjQsIDk4NDgsIDIyMjQ4LCAyMjI1MywgMjM4NzIsIAorICAgIDIzODc4LCAyMzg4NCwgMjM4ODksIDIzODk0LCAyMzg5OCwgMjM5MDYsIDIzOTEyLCAyMzkxOCwgMjM5MjIsIDM1MjUsIAorICAgIDIzOTMwLCAyMzkzNSwgMjM5NDAsIDIzOTQ0LCAyMzk0OCwgOTkyOCwgMjM5NTUsIDIzOTYzLCAyMzk3NywgMjM5ODQsIAorICAgIDIzOTkwLCA5OTM3LCA5OTQzLCAyMzk5OCwgMjQwMDYsIDI0MDEzLCAyNDAxOCwgMjQwMjMsIDIyMjU4LCAyNDAyOSwgCisgICAgMjQwNDAsIDI0MDQ0LCAyNDA0OSwgMjYwMSwgMjQwNTQsIDI0MDY1LCAyNDA3MSwgMjQwNzYsIDI0MDgwLCAyNDA4NCwgCisgICAgMjQwODcsIDI0MDk0LCAyNDEwMSwgMjQxMDgsIDI0MTE0LCAyNDExOCwgMjIyNjMsIDI0MTIzLCAyNDEyNywgMjQxMzEsIAorICAgIDEwMzcsIDI0MTM2LCAyNDE0MSwgMjQxNDYsIDI0MTUxLCAyNDE1NiwgMjQxNjEsIDI0MTY2LCAyNDE3MSwgMjQxNzYsIAorICAgIDI0MTgxLCAyNDE4NiwgMjQxOTEsIDI0MTk2LCAyNDIwMSwgMjQyMDcsIDI0MjEyLCAyNDIxNywgMjQyMjIsIDI0MjI3LCAKKyAgICAyNDIzMiwgMjQyMzcsIDI0MjQzLCAyNDI0OCwgMjQyNTMsIDI0MjU4LCAyNDI2MywgMjQyNjgsIDI0MjczLCAyNDI3OCwgCisgICAgMjQyODQsIDI0MjkwLCAyNDI5NSwgMjQzMDEsIDI0MzA2LCAyNDMxMSwgNSwgMjQzMTcsIDI0MzIxLCAyNDMyNSwgMjQzMjksIAorICAgIDI0MzM0LCAyNDMzOCwgMjQzNDIsIDI0MzQ2LCAyNDM1MCwgMjQzNTUsIDI0MzU5LCAyNDM2NCwgMjQzNjgsIDI0MzcxLCAKKyAgICAyNDM3NSwgMjQzODAsIDI0Mzg0LCAyNDM4OSwgMjQzOTMsIDI0Mzk3LCAyNDQwMSwgMjQ0MDYsIDI0NDEwLCAyNDQxNCwgCisgICAgMjQ0MjQsIDI0NDI5LCAyNDQzMywgMjQ0MzcsIDI0NDQyLCAyNDQ0NywgMjQ0NTYsIDI0NDYxLCAyNDQ2NiwgMjQ0NzAsIAorICAgIDI0NDc0LCAyNDQ4NywgMjQ0OTksIDI0NTA4LCAyNDUxNywgMjQ1MjMsIDI0NTI4LCAyNDUzMiwgMjQ1MzYsIDI0NTQ2LCAKKyAgICAyNDU1NSwgMjQ1NjMsIDI0NTY5LCAyNDU3NCwgMjQ1NzgsIDI0NTg1LCAyNDU5NSwgMjQ2MDQsIDI0NjEyLCAyNDYyMCwgCisgICAgMjQ2MjcsIDI0NjM1LCAyNDY0NCwgMjQ2NTMsIDI0NjYxLCAyNDY2NiwgMjQ2NzAsIDI0Njc0LCAyNDY3NywgMjQ2NzksIAorICAgIDI0NjgzLCAyNDY4NywgMjQ2OTIsIDI0Njk3LCAyNDcwMSwgMjQ3MDUsIDI0NzA4LCAyNDcxMiwgMjQ3MTUsIDI0NzE5LCAKKyAgICAyNDcyMiwgMjQ3MjUsIDI0NzI5LCAyNDczNSwgMjQ3MzksIDI0NzQzLCAyNDc0NywgMjQ3NTIsIDI0NzU3LCAyNDc2MiwgCisgICAgMjQ3NjYsIDI0NzY5LCAyNDc3NCwgMjQ3ODAsIDI0Nzg1LCAyNDc5MSwgMjQ3OTYsIDI0ODAwLCAyNDgwNCwgMjQ4MDgsIAorICAgIDI0ODEzLCAyNDgxNywgMjQ4MjIsIDI0ODI2LCAyNDgzMCwgMjQ4MzcsIDI0ODQxLCAyNDg0NCwgMjQ4NDgsIDI0ODU0LCAKKyAgICAyNDg2MCwgMjQ4NjQsIDI0ODY4LCAyNDg3MywgMjQ4ODAsIDI0ODg2LCAyNDg5MCwgMjQ4OTksIDI0OTAzLCAyNDkwNywgCisgICAgMjQ5MTAsIDI0OTE2LCAyNDkyMSwgMjQ5MjcsIDE0ODksIDE3OTEsIDI0OTMyLCAyNDkzNywgMjQ5NDIsIDI0OTQ3LCAKKyAgICAyNDk1MiwgMjQ5NTcsIDI0OTYyLCAyMTQ4LCAyMTk0LCAyNDk2NywgMjQ5NzAsIDI0OTc0LCAyNDk3OCwgMjQ5ODMsIAorICAgIDI0OTg3LCAyNDk5MSwgMjQ5OTQsIDI0OTk5LCAyNTAwNCwgMjUwMDgsIDI1MDExLCAyNTAxNiwgMjUwMjAsIDI1MDI1LCAKKyAgICAyNTAyOSwgMTQ3NjIsIDI1MDM0LCAyNTAzNywgMjUwNDAsIDI1MDQ0LCAyNTA0OSwgMjUwNTMsIDI1MDY2LCAyNTA3MCwgCisgICAgMjUwNzMsIDI1MDgxLCAyNTA5MCwgMjUwOTcsIDI1MTAyLCAyNTEwOCwgMjUxMTQsIDI1MTIyLCAyNTEyOSwgMjUxMzYsIAorICAgIDI1MTQwLCAyNTE0NCwgMjUxNDgsIDI1MTUzLCAyNTE1OCwgMjUxNjIsIDI1MTcwLCAyNTE3NSwgMjUxODcsIDI1MTk4LCAKKyAgICAyNTIwMywgMjUyMDcsIDI1MjExLCAyNTIxNywgMjUyMjIsIDI1MjI3LCAyNTIzMSwgMjUyMzUsIDI1MjM4LCAyNTI0NCwgCisgICAgNzkxNSwgMjMxNiwgMjUyNDgsIDI1MjUzLCAyNTI2OSwgOTQ3NSwgMjUyODksIDI1Mjk4LCAyNTMxNCwgMjUzMTgsIDI1MzIxLCAKKyAgICAyNTMyNywgMjUzMzcsIDI1MzQzLCAyNTM1MiwgMjUzNjcsIDI1Mzc5LCAyNTM5MCwgMjUzOTgsIDI1NDA3LCAyNTQxMywgCisgICAgMjU0MjIsIDI1NDMyLCAyNTQ0MywgMjU0NTQsIDI1NDYzLCAyNTQ3MCwgMjU0NzksIDI1NDg3LCAyNTQ5NCwgMjU1MDIsIAorICAgIDI1NTA5LCAyNTUxNiwgMjU1MjksIDI1NTM2LCAyNTU0MiwgMjU1NDcsIDI1NTU2LCAyNTU2MiwgMjU1NjcsIDI1NTc1LCAKKyAgICAyNTU4MiwgMjM0MzYsIDI1NTk0LCAyNTYwNiwgMjU2MjAsIDI1NjI4LCAyNTYzNSwgMjU2NDcsIDI1NjU2LCAyNTY2NSwgCisgICAgMjU2NzMsIDI1NjgxLCAyNTY4OSwgMjU2OTYsIDI1NzA1LCAyNTcxMywgMjU3MjMsIDI1NzMyLCAyNTc0MiwgMjU3NTEsIAorICAgIDI1NzYwLCAyNTc2OCwgMjU3NzMsIDI1Nzc3LCAyNTc4MCwgMjU3ODQsIDI1Nzg4LCAyNTc5MiwgMjU3OTYsIDI1ODAwLCAKKyAgICAyNTgwNiwgMjU4MTIsIDI1ODIwLCAxNDgwNywgMjU4MjcsIDI1ODMyLCAyNTgzOSwgMjU4NDUsIDI1ODUyLCAxNDgxNSwgCisgICAgMjU4NTksIDI1ODYyLCAyNTg3NCwgMjU4ODIsIDI1ODg4LCAyNTg5MywgMjU4OTcsIDk4NzgsIDI1OTA4LCAyNTkxOCwgCisgICAgMjU5MjcsIDI1OTM0LCAyNTkzOCwgMTQ4MjAsIDI1OTQxLCAyNTk0OCwgMjU5NTIsIDI1OTU4LCAyNTk2MSwgMjU5NjgsIAorICAgIDI1OTc0LCAyNTk4MSwgMjU5ODcsIDI1OTkxLCAyNTk5NiwgMjYwMDAsIDI2MDA5LCAyNjAxNiwgMjYwMjIsIDc5NTYsIAorICAgIDI2MDI5LCAyNjAzNywgMjYwNDQsIDI2MDUwLCAyNjA1NSwgMjYwNjEsIDI2MDY3LCAyNjA3NSwgMjYwNzksIDI2MDgyLCAKKyAgICAyNjA4NCwgMjU3ODUsIDI2MDkzLCAyNjA5OSwgMjYxMDksIDI2MTE0LCAyNjEyMSwgMjYxMjcsIDI2MTMyLCAyNjEzNywgCisgICAgMjYxNDIsIDI2MTQ2LCAyNjE1MSwgMjYxNTgsIDI2MTY3LCAyNjE3MSwgMjYxNzgsIDI2MTg3LCAyNjE5MywgMjYxOTgsIAorICAgIDI2MjA0LCAyNjIwOSwgMjYyMTYsIDI2MjI3LCAyNjIzMiwgMjYyMzYsIDI2MjQ2LCAyNjI1MiwgMjYyNTYsIDI2MjYxLCAKKyAgICAyNjI3MSwgMjYyODAsIDI2Mjg0LCAyNjI5MSwgMjYyOTksIDI2MzA2LCAyNjMxMiwgMjYzMTcsIDI2MzI1LCAyNjMzMiwgCisgICAgMjYzNDQsIDI2MzUzLCAyNjM1NywgMTMwNTMsIDI2MzY1LCAyNjM3NSwgMjYzNzksIDI1MDc3LCAyNjM5MCwgMjYzOTUsIAorICAgIDI2Mzk5LCAyNjQwNiwgMjY0MTMsIDIxOTc0LCAyNTcxMCwgMjY0MTgsIDI2NDIyLCAyNjQyNSwgMjI4NzAsIDI2NDMwLCAKKyAgICAyNjQ0NCwgMjY0NjAsIDI2NDc4LCAyNjQ5NywgMjY1MTQsIDI2NTMyLCAyMjg4OSwgMjY1NDksIDI2NTY5LCAyMjkwNiwgCisgICAgMjY1ODEsIDI2NTkzLCAxNTc0NSwgMjY2MDUsIDIyOTI2LCAyNjYxOSwgMjY2MzEsIDEwNTM2LCAyNjY0NSwgMjY2NTAsIAorICAgIDI2NjU1LCAyNjY2MCwgMjY2NjYsIDI2NjcyLCAyNjY3OCwgMjY2ODIsIDI2Njg5LCAyNjY5NCwgMjY3MDQsIDI2NzEwLCAKKyAgICAxMDE4MywgMjY3MTYsIDI2NzE4LCAyNjcyMywgMjY3MzEsIDI2NzM1LCAyNjE1NCwgMjY3NDEsIDI2NzQ4LCAxMTUyNCwgCisgICAgMTE1MzQsIDI2NzU1LCAyNjc2NSwgMjY3NzAsIDI2Nzc0LCAyNjc3NywgMjY3ODMsIDI2NzkxLCAyNjgwMywgMjY4MTMsIAorICAgIDI2ODI5LCAyNjg0MiwgMjY4NTYsIDE1NzYzLCAyNjg3MCwgMjY4NzcsIDI2ODgxLCAyNjg4NCwgMjY4ODksIDI2ODkzLCAKKyAgICAyNjkwMCwgMjY5MDcsIDI2OTE3LCAyNjkyMiwgMjY5MjcsIDI2OTMyLCAyNjk0MCwgMjY5NDgsIDI2OTU3LCAyNjk2MiwgCisgICAgOTU3MiwgMjY5NjYsIDI2OTY5LCAyNjk3MiwgMjY5NzcsIDI2OTg0LCAyNjk4OSwgMjcwMDUsIDI3MDEzLCAyNzAyMSwgCisgICAgOTQyMywgMjcwMjksIDI3MDM0LCAyNzAzOCwgMjcwNDQsIDI3MDUwLCAyNzA1MywgMjcwNTksIDI3MDcxLCAyNzA3OSwgCisgICAgMjcwODYsIDI3MDkyLCAyNzA5OSwgMjcxMTAsIDI3MTI0LCAyNzEzNywgMjcxNDYsIDI3MTU1LCAyNzE2NywgMjcxNzgsIAorICAgIDI3MTg4LCAyNzE5NywgMjcyMDYsIDI3MjE0LCAyNzIyNSwgNzkzOCwgMjcyMzIsIDI3MjM4LCAyNzI0MywgMjcyNDksIAorICAgIDI3MjU2LCAyNzI2NiwgMjcyNzYsIDI3Mjg1LCAyNzI5MSwgMjcyOTgsIDI3MzAzLCAyNzMxMCwgMjczMTgsIDI3MzI2LCAKKyAgICAyNzMzOCwgNjI0NiwgMjczNDUsIDI3MzU0LCAyNzM2MiwgMjczNjgsIDI3Mzc0LCAyNzM3OSwgMjczODMsIDI3Mzg2LCAKKyAgICAyNzM5MiwgMjczOTksIDI3NDA0LCAyNzQwOSwgMjc0MTMsIDI3NDI1LCAyNzQzNiwgMjc0NDUsIDI3NDUzLCAxNDk0NywgCisgICAgMjc0NTgsIDI3NDY0LCAyNzQ3MCwgMTE1MTcsIDg2MzUsIDI3NDc1LCAyNzQ3OSwgMjc0ODMsIDI3NDg2LCAyNzQ4OSwgCisgICAgMjc0OTUsIDI3NTAzLCAyNzUxMSwgMjc1MTUsIDI3NTE5LCAyNzUyNCwgMjc1MjcsIDI3NTM2LCAyNzU0MCwgMjc1NDgsIAorICAgIDI3NTU5LCAyNzU2MywgMjc1NjksIDI3NTc1LCAyNzU3OSwgMjc1ODUsIDI3NTkzLCAyNzYxNSwgMjc2MzksIDI3NjQ2LCAKKyAgICAyNzY1MywgMjc2NTksIDI3NjY3LCAyNzY3MywgMjc2NzgsIDI3Njg5LCAyNzcwNywgMjc3MTQsIDI3NzIyLCAyNzcyNiwgCisgICAgMjc3MzUsIDI3NzQ4LCAyNzc1NiwgMjc3NjgsIDI3Nzc5LCAyNzc4OSwgMjc4MDMsIDI3ODEyLCAyNzgyMCwgMjc4MzIsIAorICAgIDk0OTIsIDI3ODQzLCAyNzg1NCwgMjc4NjYsIDI3ODc2LCAyNzg4NSwgMjc4OTAsIDI3ODk0LCAyNzkwMiwgMjc5MTIsIAorICAgIDI3OTE3LCAyNzkyMSwgMjc5MjQsIDI3OTI3LCAyNzkzNSwgMjc5NDMsIDI3OTUyLCAyNzk2MiwgMjc5NzEsIDI3OTc3LCAKKyAgICAyNzk5MSwgMjY2MywgMjgwMTMsIDI4MDI0LCAyODAzMywgMjgwNDMsIDI4MDU1LCAyODA2NCwgMjgwNzMsIDI4MDgzLCAKKyAgICAyODA5MSwgMjgwOTksIDI4MTA4LCAyODExMywgMjgxMjQsIDI4MTI5LCAyODE0MCwgMjgxNDQsIDI4MTU0LCAyODE2MywgCisgICAgMjgxNzEsIDI4MTgxLCAyODE5MSwgMjgxOTksIDI4MjA4LCAyODIxNSwgMjgyMjMsIDI4MjMwLCAyODIzOSwgMjgyNDMsIAorICAgIDI4MjUxLCAyODI1OCwgMjgyNjYsIDI4MjczLCAyODI4NCwgMjgyOTksIDI4MzA2LCAyODMxMiwgMjgzMjIsIDI4MzMxLCAKKyAgICAyODMzNywgMjgzNDEsIDI4MzQ4LCAyODM1MiwgMTQwMzEsIDI4MzU4LCAyODM2MiwgMjgzNjcsIDI4Mzc0LCAyODM3OCwgCisgICAgMjgzODIsIDI4MzkwLCAyODM5OCwgMjg0MDQsIDI4NDEzLCAyODQyMCwgMjg0MjUsIDI4NDMwLCAyODQ0MCwgMjM1MDUsIAorICAgIDI4NDQ0LCAyODQ0NywgMjg0NTIsIDI4NDU3LCAyODQ2MiwgMjg0NjcsIDI4NDcyLCAyODQ3NywgMjg0ODIsIDI4NDg3LCAKKyAgICAyODQ5MywgMjg0OTgsIDI4NTAzLCAyODUwOSwgMTIxOCwgNzA0LCAyODUxNCwgMjg1MjMsIDIzNjQsIDI4NTMwLCAyODUzNSwgCisgICAgMjg1MzksIDI4NTQ1LCAxMjY3LCA1NDYsIDMxOCwgMjg1NTAsIDI4NTU5LCAyODU2NywgMjg1NzYsIDI4NTg0LCAyODU5NSwgCisgICAgMjg2MDQsIDI4NjEyLCAyODYxNiwgMjg2MTksIDI4NjI3LCAyODYzNSwgMjg2NDAsIDE0Nzc1LCAyODY0NiwgMjg2NTIsIAorICAgIDI4NjU4LCA1ODcyLCAyODY2MywgMjg2NjcsIDI4NjczLCAyODY3NywgMjg2ODQsIDE0NTUsIDI4NjkwLCAyODY5NywgOTU3OSwgCisgICAgMjg3MDEsIDI4NzExLCAyODcxOSwgMjg3MjUsIDI4NzM0LCAyODc0MiwgMjg3NDgsIDI4NzU2LCAyODc2MywgMTExMTAsIAorICAgIDI4NzY5LCAyODc3NiwgMjg3ODEsIDI4Nzg4LCAxNDk2LCAyMTQ3LCAyODc5NCwgMjg4MDAsIDI4ODA3LCAyODgxOCwgCisgICAgMjg4MjksIDI4ODM3LCAyODg0NCwgMjg4NTQsIDI4ODYzLCAyODg3MSwgMjg4ODAsIDI4ODg3LCAyODg5NCwgMjg5MDcsIAorICAgIDI4OTE4LCAxMjcyLCAyODkzNywgMjg5NDIsIDI4OTUwLCAzNTc1LCAyODk1NCwgMjg5NTksIDI4OTYzLCAxNDU5LCAyNDcwNiwgCisgICAgMjg5NzMsIDI4OTc3LCAyODk4MiwgMjg5ODYsIDM0OTMsIDI4OTkyLCAyOTAwMCwgMjkwMDcsIDI5MDE4LCAyOTAyNiwgCisgICAgMjkwMzQsIDM1NzYsIDI3OSwgMjkwMzksIDI5MDQ3LCAyOTA1NSwgMjkwNjIsIDI5MDY4LCAyOTA3MywgMjIxNiwgMjkwODAsIAorICAgIDI5MDg2LCAyNTk5MiwgMjYyMjIsIDI5MDkyLCAxMDYsIDI5MDk2LCAyOTEwMCwgMjkxMDYsIDYxNSwgOTMyOCwgMjkxMTEsIAorICAgIDI5MTE4LCAyOTEyNCwgMjMyNywgMjkxMjgsIDI5MTMyLCAxNTE4NywgMjkxMzUsIDI5MTQwLCAyOTE0NywgMjkxNTMsIAorICAgIDI5MTU4LCAyOTE2NiwgMjkxNzMsIDI5MTc5LCAyMjM1MSwgMjkxODMsIDI5MTg3LCAzNjQ2LCAxNjYyNSwgMjkxOTEsIAorICAgIDI5MTk2LCAyOTE5OSwgMjkyMDcsIDI5MjE1LCAyOTIyMCwgMjkyMjMsIDI5MjMwLCAyOTI0MCwgMjkyNTIsIDI5MjU3LCAKKyAgICAyOTI2MSwgMjkyNjksIDI5Mjc2LCAyOTI4MiwgMjkyODksIDI5Mjk2LCAyOTI5OSwgMjkzMDMsIDI5MzA3LCAxNDYzLCAKKyAgICAyOTMxNywgMjkzMTksIDI5MzI0LCAyOTMzMCwgMjkzMzYsIDI5MzQxLCAyOTM0NiwgMjkzNTEsIDI5MzU2LCAyOTM2MSwgCisgICAgMjkzNjYsIDI5MzcxLCAyOTM3NiwgMjkzODEsIDI5Mzg2LCAyOTM5MSwgMjkzOTYsIDI5NDAxLCAyOTQwNiwgMjk0MTIsIAorICAgIDI5NDE4LCAyOTQyNCwgMjk0MzAsIDI5NDM1LCAyOTQ0MCwgMjk0NDUsIDI5NDUxLCAyOTQ1NiwgMjk0NjEsIDI5NDY2LCAKKyAgICAyOTQ3MiwgMjk0NzcsIDI5NDgzLCAyOTQ4OCwgMjk0OTMsIDI5NDk4LCAyOTUwMywgMjk1MDksIDI5NTE0LCAyOTUyMCwgCisgICAgMjk1MjUsIDI5NTMwLCAyOTUzNSwgMjk1NDAsIDI5NTQ2LCAyOTU1MSwgMjk1NTcsIDI5NTYyLCAyOTU2NywgMjk1NzIsIAorICAgIDI5NTc3LCAyOTU4MiwgMjk1ODcsIDI5NTkyLCAyOTU5NywgMjk2MDIsIDI5NjA4LCAyOTYxNCwgMjk2MjAsIDI5NjI1LCAKKyAgICAyOTYzMCwgMjk2MzUsIDI5NjQwLCAyOTY0NiwgMjk2NTIsIDI5NjU4LCAyOTY2NCwgMjk2NzAsIDI5Njc2LCAyOTY4MSwgCisgICAgMjk2ODcsIDI5NjkyLCAyOTY5NywgMjk3MDIsIDI5NzA3LCAyOTcxMywgMjQ0MywgMjk3MTgsIDI0NTAsIDI0NTcsIDI3NTQsIAorICAgIDI5NzIzLCAyNDYzLCAyNDczLCAyOTcyOSwgMjk3MzMsIDI5NzM4LCAyOTc0MywgMjk3NDksIDI5NzU0LCAyOTc1OSwgCisgICAgMjk3NjMsIDI5NzY4LCAyOTc3NCwgMjk3NzksIDI5Nzg0LCAyOTc4OSwgMjk3OTUsIDI5ODAwLCAyOTgwNCwgMjk4MDgsIAorICAgIDI5ODEzLCAyOTgxOCwgMjk4MjMsIDI5ODI4LCAyOTgzMywgMjk4MzksIDI5ODQ1LCAyOTg1MCwgMjk4NTQsIDI5ODU5LCAKKyAgICAyOTg2NSwgMjk4NjksIDI5ODc0LCAyOTg3OSwgMjk4ODQsIDI5ODg5LCAyOTg5MywgMjk4OTYsIDI5OTAxLCAyOTkwNiwgCisgICAgMjk5MTEsIDI5OTE2LCAyOTkyMSwgMjk5MjcsIDI5OTMzLCAyOTkzOCwgMjk5NDMsIDI5OTQ3LCAyOTk1MiwgMjk5NTcsIAorICAgIDI5OTYyLCAyOTk2NywgMjk5NzIsIDI5OTc2LCAyOTk4MSwgMjk5ODYsIDI5OTkxLCAyOTk5NSwgMjk5OTksIDMwMDAzLCAKKyAgICAzMDAwOCwgMzAwMTYsIDMwMDIxLCAzMDAyNywgMzAwMzMsIDMwMDM5LCAzMDA0NCwgMzAwNDgsIDMwMDUxLCAzMDA1NiwgCisgICAgMzAwNjEsIDMwMDY1LCAzMDA3MCwgMzAwNzQsIDMwMDc5LCAzMDA4MywgMzAwODYsIDMwMDkxLCAxNzMwMiwgMzAwOTYsIAorICAgIDMwMTAxLCAzMDEwNiwgMzAxMTQsIDIxMjgwLCAyODY5NCwgOTAyNiwgMzAxMTksIDMwMTI0LCAzMDEyOCwgMzAxMzMsIAorICAgIDMwMTM3LCAzMDE0MSwgMzAxNDYsIDMwMTUwLCAzMDE1MywgMzAxNTYsIDMwMTYwLCAzMDE2NSwgMzAxNjksIDMwMTc3LCAKKyAgICAzMDE4MSwgMzAxODQsIDMwMTg5LCAzMDE5MywgMzAxOTcsIDMwMjAyLCAzMDIwNywgMzAyMTEsIDMwMjE3LCAzMDIyMiwgCisgICAgMzAyMjcsIDMwMjM0LCAzMDI0MSwgMzAyNDUsIDMwMjQ4LCAzMDI1NCwgMzAyNjMsIDMwMjcwLCAzMDI3OCwgMzAyODUsIAorICAgIDMwMjg5LCAzMDI5NCwgMzAyOTgsIDMwMzAyLCAzMDMwOCwgMzAzMTQsIDMwMzE4LCAzMDMyNCwgMzAzMjksIDMwMzM0LCAKKyAgICAzMDMzOCwgMzAzNDUsIDMwMzUxLCAzMDM1NywgMzAzNjMsIDMwMzY5LCAzMDM3NiwgMzAzODIsIDMwMzg4LCAzMDM5NCwgCisgICAgMzA0MDAsIDMwNDA2LCAzMDQxMiwgMzA0MTgsIDMwNDI1LCAzMDQzMSwgMzA0MzgsIDMwNDQ0LCAzMDQ1MCwgMzA0NTYsIAorICAgIDMwNDYyLCAzMDQ2OCwgMzA0NzQsIDMwNDgwLCAzMDQ4NiwgMzA0OTIsIDExNDE4LCAzMDQ5OCwgMzA1MDMsIDMwNTA4LCAKKyAgICAzMDUxMSwgMzA1MTksIDMwNTI0LCAzMDUzMywgMzA1MzksIDMwNTQ0LCAzMDU0OSwgMzA1NTQsIDMwNTU4LCAzMDU2MywgCisgICAgMzA1NjgsIDMwNTczLCAzMDU3OCwgMzA1ODMsIDMwNTkwLCAzMDU5NywgMzA2MDMsIDMwNjA5LCAzMDYxNCwgMTYzMDMsIAorICAgIDMwNjIxLCAzMDYyNywgMzA2MzQsIDMwNjQwLCAzMDY0NiwgMzA2NTEsIDMwNjU5LCAzMDY2NCwgMTYwODIsIDMwNjY4LCAKKyAgICAzMDY3MywgMzA2NzgsIDMwNjg0LCAzMDY4OSwgMzA2OTQsIDMwNjk4LCAzMDcwMywgMzA3MDgsIDMwNzE0LCAzMDcxOSwgCisgICAgMzA3MjQsIDMwNzI4LCAzMDczMywgMzA3MzgsIDMwNzQyLCAzMDc0NywgMzA3NTIsIDMwNzU3LCAzMDc2MSwgMzA3NjYsIAorICAgIDMwNzcxLCAzMDc3NiwgMzA3ODAsIDMwNzg0LCAxNTI5MywgMzA3ODgsIDMwNzk3LCAzMDgwMywgMzA4MDksIDMwODE4LCAKKyAgICAzMDgyNiwgMzA4MzUsIDMwODQzLCAzMDg0OCwgMzA4NTIsIDMwODU5LCAzMDg2NSwgMzA4NjksIDMwODcyLCAzMDg3NywgCisgICAgMzA4ODYsIDMwODk0LCAzMDg5OSwgMTQ5NSwgMzA5MDUsIDMwOTA4LCAzMDkxMiwgMjI0MjQsIDIyNDMwLCAzMDkxOCwgCisgICAgMzA5MjIsIDMwOTMzLCAzMDk0NCwgMzA5NTUsIDMwOTY3LCAzMDk3NCwgMzA5ODEsIDMwOTg2LCAzMDk5MCwgNTkwOSwgNzU1LCAKKyAgICAyMTI3OSwgMzA5OTgsIDMxMDAzLCAzMTAwNywgMzEwMTIsIDMxMDE2LCAzMTAyMiwgMzEwMjcsIDMxMDMzLCAzMTAzOCwgCisgICAgMzEwNDQsIDMxMDQ5LCAzMTA1NSwgMzEwNjAsIDMxMDY2LCAzMTA3MiwgMzEwNzgsIDMxMDgzLCAzMTAzOSwgMzEwNDUsIAorICAgIDMxMDg3LCAzMTA5MiwgMzEwOTgsIDMxMTAzLCAzMTEwOSwgMzExMTQsIDMxMTIwLCAzMTEyNSwgMzEwNTAsIDEwNDIxLCAKKyAgICAzMTEyOSwgMzEwNjEsIDMxMDY3LCAzMTA3MywgMjgzMSwgMzQyMywgMzExMzUsIDMxMTM4LCAzMTE0NCwgMzExNTAsIAorICAgIDMxMTU2LCAzMTE2MywgMzExNjksIDMxMTc1LCAzMTE4MSwgMzExODcsIDMxMTkzLCAzMTE5OSwgMzEyMDUsIDMxMjExLCAKKyAgICAzMTIxNywgMzEyMjMsIDMxMjI5LCAzMTIzNSwgMzEyNDIsIDMxMjQ4LCAzMTI1NCwgMzEyNjAsIDMxMjY2LCAzMTI3MiwgCisgICAgMzEyNzUsIDMxMjgwLCAzMTI4MywgMzEyOTAsIDMxMjk4LCAzMTMwMywgMzEzMDgsIDMxMzE0LCAzMTMxOSwgMzEzMjQsIAorICAgIDMxMzI4LCAzMTMzMywgMzEzMzksIDMxMzQ0LCAzMTM1MCwgMzEzNTUsIDMxMzYxLCAzMTM2NiwgMzEzNzIsIDMxMzc4LCAKKyAgICAzMTM4MiwgMzEzODcsIDMxMzkyLCAzMTM5NywgMzE0MDIsIDMxNDA2LCAzMTQxMSwgMzE0MTYsIDMxNDIxLCAzMTQyNywgCisgICAgMzE0MzMsIDMxNDM5LCAzMTQ0NSwgMzE0NTAsIDMxNDU0LCAzMTQ1NywgMzE0NjMsIDMxNDY5LCAzMTQ3OCwgMzE0ODYsIAorICAgIDMxNDkzLCAzMTQ5OCwgMzE1MDIsIDMxNTA2LCAzMTUxMSwgMTUxNDYsIDMxNTE2LCAzMTUyNCwgMzE1MzAsIDM2ODMsIAorICAgIDEzNzcsIDMxNTM1LCAzMTUzOSwgODAwNSwgMzE1NDUsIDMxNTUxLCAzMTU1OCwgODAxNCwgMzE1NjIsIDMxNTY4LCAzMTU3NSwgCisgICAgMzE1ODEsIDMxNTkwLCAzMTU5OCwgMzE2MTAsIDMxNjE0LCAzMTYyMSwgMzE2MjcsIDMxNjMxLCAzMTYzNCwgMzE2NDMsIAorICAgIDMxNjUxLCAzMTA0MCwgMzE2NTYsIDMxNjY2LCAzMTY3NiwgMzE2ODYsIDMxNjkyLCAzMTY5NywgMzE3MDcsIDMxNzEyLCAKKyAgICAzMTcyNSwgMzE3MzksIDMxNzUwLCAzMTc2MiwgMzE3NzQsIDMxNzg4LCAzMTgwMSwgMzE4MTMsIDMxODI1LCAxNDYwMCwgCisgICAgMzE4MzksIDMxODQ0LCAzMTg0OSwgMzE4NTMsIDMxODU3LCAzMTg2MSwgMTc4MCwgMjcxNzYsIDMxODY1LCAzMTg3MCwgCisgICAgMzEwODgsIDMxODc1LCAzMTg3OCwgMzE4ODMsIDMxODg4LCAzMTg5MywgMzE4OTksIDMxOTA1LCAxMDA5OCwgMzE5MTAsIAorICAgIDMxOTE3LCAxNTY5NywgMzE5MjMsIDMxOTI4LCAzMTkzMywgMzE5MzcsIDMxOTQyLCAzMTk0NywgMzEwOTMsIDMxOTUyLCAKKyAgICAzMTk1NywgMzE5NjIsIDMxOTY4LCAzMTA5OSwgMzE5NzMsIDMxOTc2LCAzMTk4MywgMzE5OTEsIDMxOTk3LCAzMjAwMywgCisgICAgMzIwMDksIDMyMDIwLCAzMjAyNSwgMzIwMzIsIDMyMDM5LCAzMjA0NiwgMzIwNTQsIDMyMDYzLCAzMjA3MiwgMzIwNzgsIAorICAgIDMyMDg0LCAzMjA5MiwgMzExMDQsIDMyMDk3LCAzMjEwMywgMzIxMDksIDMxMTEwLCAzMjExNCwgMzIxMTksIDMyMTI3LCAKKyAgICAzMjEzNSwgMzIxNDEsIDMyMTQ4LCAzMjE1NCwgMzIxNjEsIDMyMTY4LCAzMjE3NCwgMzIxODIsIDMyMTkyLCAzMjE5OSwgCisgICAgMzIyMDQsIDMyMjEwLCAzMjIxNSwgMzIyMjAsIDMyMjI3LCAzMjIzNiwgMzIyNDQsIDMyMjQ5LCAzMjI1NSwgMzIyNjIsIAorICAgIDMyMjcwLCAzMjI3NiwgMzIyODEsIDMyMjg3LCAzMjI5NiwgMjc5NTcsIDMyMzAzLCAzMjMwNywgMzIzMTIsIDMyMzIxLCAKKyAgICAzMjMyNiwgMzIzMzEsIDMyMzM2LCAxMjQwNSwgMzIzNDQsIDMyMzQ5LCAzMjM1NCwgMzIzNTksIDMyMzYzLCAzMjM2OCwgCisgICAgMzIzNzMsIDMyMzgwLCAzMjM4NSwgMzIzOTAsIDMyMzk1LCAzMTExNSwgMjEyMTYsIDMyNDAxLCAyNTE5LCAyNDQsIDMyNDA0LCAKKyAgICAzMjQwNywgMzI0MTEsIDMyNDE1LCAzMjQyNSwgMzI0MzMsIDMyNDM3LCAzMjQ0NCwgMzI0NTEsIDMyNDU1LCAzMjQ1OCwgCisgICAgMzI0NjQsIDMyNDcyLCAzMjQ4MCwgMzI0ODQsIDMyNDg4LCAzMjQ5MSwgMzI0OTgsIDMyNTAyLCAzMjUwNiwgMzI1MTMsIAorICAgIDMyNTIxLCAzMTA1MSwgMzI1MjgsIDMyNTM2LCAxMDE1OCwgNjY0LCAzMDgsIDMyNTQ4LCAzMjU1MywgMzI1NTgsIDMyNTY0LCAKKyAgICAzMjU2OSwgMzI1NzQsIDM3MDQsIDMyNTc5LCAzMjU4MiwgMzI1ODcsIDMyNTkyLCAzMjU5NywgMzI2MDIsIDMyNjA3LCAKKyAgICAzMjYxNCwgMjI1MjksIDMyNjE5LCAzMjYyNCwgMzI2MjksIDMyNjM0LCAzMjYzOSwgMzI2NDUsIDMyNjUwLCAzMjY1NiwgCisgICAgMzEyODYsIDMyNjYyLCAzMjY2NywgMzI2NzMsIDMyNjc5LCAzMjY4OSwgMzI2OTQsIDMyNjk5LCAzMjcwMywgMzI3MDgsIAorICAgIDMyNzEzLCAzMjcxOCwgMzI3MjMsIDMyNzM2LCAzMjc0MSwgMjIzMDIsIDE2NzA1LCAzNzEwLCAzMjc0NSwgMzI3NTAsIAorICAgIDMyNzU1LCAzMjc2MSwgMzI3NjYsIDMyNzcxLCAzMjc3NSwgMzI3ODAsIDMyNzg1LCAzMjc5MSwgMzI3OTYsIDMyODAxLCAKKyAgICAxMzgyLCAzMjgwNSwgMzI4MTAsIDMyODE1LCAzMjgyMCwgMzI4MjQsIDMyODI5LCAzMjgzNCwgMzI4MzksIDMyODQ1LCAKKyAgICAzMjg1MSwgMzI4NTYsIDMyODYwLCAzMjg2NCwgMzI4NjksIDMyODc0LCAzMjg3OSwgMzI4ODMsIDMyODkxLCAzMjg5NSwgCisgICAgMzI5MDEsIDMyOTA1LCAzMjkxMiwgMTY0OTgsIDMxMDYyLCAzMjkxOCwgMzI5MjUsIDMyOTMzLCAzMjk0MCwgMzI5NDYsIAorICAgIDMyOTU5LCAzMjk3MSwgMzI5NzcsIDMyOTgxLCAyNzczLCAzMjk4NSwgMzI5ODksIDMyNDkzLCAzMjk5OCwgMzMwMDksIAorICAgIDMzMDE0LCAzMzAxOSwgMzMwMjQsIDMzMDI4LCAzMzAzMywgMjI0MzUsIDMzMDM3LCAzMzA0MSwgMzMwNDYsIDMxMDY4LCAKKyAgICAyMTMwMCwgMzMwNTAsIDMzMDU1LCAzMzA2MSwgMzMwNjYsIDMzMDcwLCAzMzA3NCwgMzMwNzcsIDMzMDgxLCAzMzA4NywgCisgICAgMzMwOTgsIDMzMTEwLCAzMTA3NCwgMzMxMTUsIDMzMTE4LCAzMzEyMiwgMzQ3LCAzMzEyNywgMzMxMzIsIDMzMTM3LCAKKyAgICAzMzE0MiwgMzMxNDcsIDMzMTUyLCAzMzE1OCwgMzMxNjMsIDMzMTY4LCAzMzE3NCwgMzMxNzksIDMzMTg1LCAzMzE5MCwgCisgICAgMzMxOTYsIDMzMjAxLCAzMzIwNiwgMzMyMTEsIDMzMjE2LCAzMzIyMSwgMzMyMjYsIDMzMjMxLCAzMzIzNiwgMzMyNDIsIAorICAgIDMzMjQ3LCAzMzI1MiwgMzMyNTcsIDMzMjYyLCAzMzI2NywgMzMyNzIsIDMzMjc3LCAzMzI4MywgMzMyODksIDMzMjk0LCAKKyAgICAzMzI5OSwgMzMzMDQsIDMzMzA5LCAzMzMxNCwgMzMzMTksIDMzMzI0LCAzMzMyOSwgMzMzMzQsIDMzMzM5LCAzMzM0NCwgCisgICAgMzMzNDksIDMzMzU0LCAzMzM1OSwgMzMzNjQsIDMzMzY5LCAzMzM3NCwgMzMzNzksIDMzMzg1LCAzMTMsIDI2LCAzMzM5MCwgCisgICAgMzMzOTQsIDMzMzk4LCAzMzQwNiwgMzM0MTAsIDMzNDE0LCAzMzQxNywgMzM0MjAsIDMzNDIyLCAzMzQyNywgMzM0MzEsIAorICAgIDMzNDM2LCAzMzQ0MCwgMzM0NDUsIDMzNDQ5LCAzMzQ1NCwgMzM0NTgsIDMzNDYxLCAzMzQ2MywgMzM0NjcsIDMzNDcyLCAKKyAgICAzMzQ3NiwgMzM0ODcsIDMzNDkwLCAzMzQ5MiwgMzM0OTYsIDMzNTA4LCAzMzUxNywgMzM1MjEsIDMzNTI1LCAzMzUzMSwgCisgICAgMzM1MzYsIDMzNTQ1LCAzMzU1MSwgMzM1NTYsIDMzNTYxLCAzMzU2NSwgMzM1NzAsIDMzNTc3LCAzMzU4MiwgMzM1ODgsIAorICAgIDMzNTkzLCAzMzU5NywgMzM2MDQsIDI1NzE4LCAyNTcyOCwgMzM2MDgsIDMzNjEzLCAzMzYxOCwgMzM2MjMsIDMzNjMwLCAKKyAgICAzMzYzNCwgMzM2NDEsIDgxMTMsIDMzNjQ3LCAzMzY1NiwgMzM2NjQsIDMzNjc5LCAzMzY5MywgMzM3MDEsIDMzNzEyLCAKKyAgICAzMzcyMSwgMzM3MjYsIDcyMjcsIDMzNzM2LCAzMzc0MSwgMzM3NDYsIDMzNzUwLCAzMzc1MywgMzM3NTcsIDMzNzYyLCAKKyAgICAzMzc2NiwgMzM3NzMsIDMzNzc4LCAzMzc4MywgODkxMiwgMzM3OTMsIDMzNzk1LCAzMzc5OCwgMzM4MDIsIDMzODA4LCAKKyAgICAzMzgxMiwgMzM4MTcsIDMzODIyLCAzMzgyOCwgMzM4MzMsIDMzODM5LCAzMzg0NCwgMzM4NTQsIDMzODYzLCAzMzg3MSwgCisgICAgMzM4NzYsIDMzODgyLCAzMzg4NywgMzM4OTQsIDMzODk4LCAzMzkwNiwgMzM5MTMsIDMzOTI2LCAzMzkzNCwgMzM5MzgsIAorICAgIDMzOTQ4LCAzMzk1MywgMzM5NTcsIDMzOTY1LCAzMzk3MywgMzM5NzcsIDMzOTg2LCAzMzk5MiwgMzM5OTcsIDM0MDA1LCAKKyAgICAzNDAxNSwgMzQwMjQsIDM0MDMzLCAzNDA0MiwgMzQwNTMsIDM0MDYxLCAzNDA3MiwgMzQwODEsIDM0MDg4LCAzNDA5NCwgCisgICAgMzQwOTksIDM0MTEwLCAzNDExNSwgMzQxMTksIDM0MTIyLCAzNDEyNiwgMzQxMzQsIDM0MTQwLCAzNDE0OCwgMzQxNTUsIAorICAgIDM0MTYxLCAzNDE2NiwgMzQxNzIsIDI0MTgsIDM0MTc2LCAzNDE3OCwgMzQxODMsIDM0MTg4LCAzNDE5MywgMzQxOTYsIAorICAgIDM0MTk4LCAzNDIwMiwgMzQyMDUsIDM0MjEyLCAzNDIxNiwgOTg5MSwgMzQyMjAsIDM0MjI2LCAzNDIzNiwgMzQyNDEsIAorICAgIDM0MjQ3LCAzNDI1MSwgMzQyNTYsIDM0MjY5LCAyNjEwNCwgMzQyNzUsIDM0Mjg0LCAxNzQ3NSwgMzQyOTEsIDM0MzAwLCAKKyAgICAzMTY3MiwgMzQzMDgsIDM0MzEzLCAzNDMxNywgMzQzMjUsIDM0MzMyLCAzNDMzNywgMzQzNDEsIDM0MzQ2LCAzNDM1MCwgCisgICAgMzQzNTgsIDM0MzY0LCAzNDM3MCwgMzQzNzUsIDM0Mzc5LCAzNDM4MiwgMzQzODcsIDM0NDAwLCAzNDQxNiwgMjI5OTYsIAorICAgIDM0NDMzLCAzNDQ0NSwgMzQ0NjIsIDM0NDc0LCAzNDQ4OCwgMjMwMTMsIDIzMDMyLCAzNDUwMCwgMzQ1MTIsIDI2ODAsIAorICAgIDM0NTI2LCAzNDUzMSwgMzQ1MzYsIDM0NTQxLCAzNDU0NSwgMzQ1NTIsIDM0NTY0LCAzNDU3MCwgMzQ1NzMsIDM0NTg0LCAKKyAgICAzNDU5NSwgMzQ2MDAsIDMyMDg5LCA2OTUsIDM0NjA0LCAzNDYwOCwgMzQ2MTIsIDM0NjE1LCAzNDYyMCwgMzQ2MjUsIAorICAgIDM0NjMxLCAzNDYzNiwgMzQ2NDEsIDM0NjQ3LCAzNDY1MywgMzQ2NTgsIDM0NjYyLCAzNDY2NywgMzQ2NzIsIDM0Njc3LCAKKyAgICAzNDY4MSwgMzQ2ODQsIDM0NjkwLCAzNDY5NSwgMzQ3MDAsIDM0NzA1LCAzNDcwOSwgMzQ3MTQsIDM0NzIwLCAzNDcyOCwgCisgICAgMjYzMzcsIDM0NzMzLCAzNDczOCwgMzQ3NDUsIDM0NzUxLCAzNDc1NywgMzQ3NjIsIDM0NzcwLCAyMjUzOCwgMzQ3NzcsIAorICAgIDM0NzgyLCAzNDc4NywgMzQ3OTIsIDM0Nzk2LCAzNDc5OSwgMzQ4MDQsIDM0ODA4LCAzNDgxMiwgMzQ4MTksIDM0ODI1LCAKKyAgICAzNDgzMSwgMzQ4MzcsIDM0ODQ0LCAzNDg0OSwgMzQ4NTUsIDMzOTY4LCAzNDg1OSwgMzQ4NjMsIDM0ODY4LCAzNDg4MSwgCisgICAgMzQ4ODYsIDM0ODkyLCAzNDkwMCwgMzQ5MDcsIDM0OTE1LCAzNDkyNSwgMzQ5MzEsIDM0OTM3LCAzNDk0MywgMzQ5NDcsIAorICAgIDM0OTU2LCAzNDk2NCwgMzQ5NzEsIDM0OTc2LCAzNDk4MSwgMTA0NDQsIDM0OTg2LCAzNDk5NCwgMzUwMDEsIDM1MDA3LCAKKyAgICAzNTAxNywgMzUwMjIsIDM1MDI4LCAzNTAzNiwgMzYwOCwgMzUwNDMsIDM1MDUwLCAzNjE0LCAzNTA1NCwgMzUwNTksIAorICAgIDM1MDcwLCAzNTA3NywgMzUwODMsIDM1MDkyLCAzNTA5NiwgNDAxNSwgMzUwOTksIDM1MTA2LCAzNTExMiwgMzUxMTgsIAorICAgIDM1MTI2LCAzNTEzNiwgMjkwNjMsIDM1MTQzLCAzNTE1MSwgMzUxNTYsIDM1MTYyLCAzNTE2NywgMjU5NjQsIDM1MTczLCAKKyAgICAzNTE4MCwgMzUxODYsIDM1MTk1LCAyMzY3NywgMzUyMDIsIDM1MjA3LCAzNTIxMSwgMzUyMTksIDM1MjI3LCA5NjA3LCAKKyAgICA1ODk1LCAzNTIzNCwgMzUyMzgsIDM1MjQwLCAzNTI0NCwgMzUyNDksIDM1MjUxLCAzNTI1NywgMzUyNjIsIDM1MjY3LCAKKyAgICAzNTI3NCwgMzI2MTAsIDM1MjgwLCAzNTI4NSwgMzUyODksIDM1Mjk0LCAzNTI5OCwgMzUzMDcsIDM1MzExLCAzNTMxNywgCisgICAgMzUzMjQsIDM1MzMwLCAzNTMzNywgMzUzNDIsIDM1MzUxLCAzNTM1NiwgMzUzNjAsIDM1MzY1LCAzNTM3MiwgMzUzODAsIAorICAgIDM1Mzg4LCAzNTM5MywgMjEzNTYsIDM1Mzk3LCAzNTQwMCwgMzU0MDQsIDM1NDA4LCAzNTQxMiwgMzU0MTUsIDM1NDE3LCAKKyAgICAzNTQyNSwgMzU0MjksIDM1NDM2LCAzNTQ0MCwgMzU0NDQsIDM1NDUyLCAzNTQ1OSwgMzU0NjksIDM1NDczLCAzNTQ3NywgCisgICAgMzU0ODUsIDM1NDkzLCAzNTQ5OSwgMzU1MDQsIDM1NTEzLCAxMzM1NywgMzU1MTksIDM1NTI4LCAzNTUzMywgMzU1NDAsIAorICAgIDM1NTQ4LCAzNTU1NiwgMzU1NjQsIDM1NTcxLCAzNTU3OCwgMzU1ODUsIDM1NTkyLCAzNTU5OSwgMzU2MDQsIDM1NjEwLCAKKyAgICAzNTYyNywgMzU2MzUsIDM1NjQ1LCAzNTY1MywgMzU2NjAsIDQwNywgMzU2NjQsIDM1NjcwLCAzNTY3NCwgMzU2NzksIAorICAgIDMzNzE3LCAzNTY4NSwgMzU2ODgsIDM1NjkyLCAzNTcwMCwgMzYxOSwgMzU3MDgsIDM1NzE0LCAzNTcyMCwgMzU3MjksIAorICAgIDM1NzM5LCAzNTc0NiwgMzU3NTIsIDM2MjUsIDM2MzEsIDM1NzYxLCAzNTc2OCwgMzU3NzYsIDM1NzgxLCAzNTc4NSwgCisgICAgMzU3OTIsIDM1ODAwLCAzNTgwNywgMzU4MTMsIDM1ODIyLCAzNTgzMiwgMzU4MzgsIDM1ODQ2LCAzNTg1NSwgMzU4NjIsIAorICAgIDM1ODcwLCAzNTg3NywgMjIwMzIsIDM1ODgxLCAzNTg4OCwgMzU4OTQsIDM1OTA0LCAzNTkxMywgMzU5MjQsIDM1OTI4LCAKKyAgICAzNTkzOCwgMzU5NDQsIDM1OTUxLCAzNTk1OSwgMzU5NjgsIDM1OTc3LCAzNTk4NywgMzU5OTgsIDM2MDA1LCAzNjAxMCwgCisgICAgMzYwMTcsIDMwMjksIDM2MDI1LCAzNjAzMSwgMzYwMzYsIDM2MDQyLCAzNjA0OCwgMzYwNTMsIDM2MDY2LCAzNjA3OSwgCisgICAgMzYwOTIsIDM2MDk5LCAzNjEwNSwgMzYxMTMsIDM2MTIxLCAzNjEyNiwgMzYxMzAsIDE0NjksIDM2MTM0LCAzNjEzOSwgCisgICAgMzYxNDQsIDM2MTQ5LCAzNjE1NCwgMzYxNjAsIDM2MTY1LCAzNjE3MCwgMzYxNzUsIDM2MTgwLCAzNjE4NSwgMzYxOTAsIAorICAgIDM2MTk1LCAzNjIwMSwgMzYyMDcsIDM2MjEyLCAzNjIxNywgMzYyMjMsIDM2MjI4LCAzNjIzMywgMzYyMzgsIDM2MjQ0LCAKKyAgICAzNjI0OSwgMzYyNTQsIDM2MjU5LCAzNjI2NCwgMzYyNzAsIDM2Mjc1LCAzNjI4MCwgMzYyODYsIDM2MjkxLCAzNjI5NiwgCisgICAgMzYzMDEsIDM2MzA2LCAzNjMxMSwgMzYzMTcsIDM2MzIyLCAzNjMyOCwgMzYzMzMsIDM2MzM5LCAzNjM0NCwgMzYzNDksIAorICAgIDM2MzU0LCAzNjM2MCwgMzYzNjYsIDM2MzcyLCAzNjM3OCwgMzYzODQsIDM2MzkwLCAzNjM5NiwgMzY0MDIsIDM2NDA3LCAKKyAgICAzNjQxMiwgMzY0MTgsIDM2NDIzLCAzNjQyOCwgMzY0MzMsIDM2NDM4LCAzNjQ0MywgMzY0NDgsIDM2NDUzLCAzNjQ1OSwgCisgICAgMzY0NjQsIDM2NDY5LCAzNjQ3NSwgMzY0ODEsIDEwMSwgMzY0ODYsIDM2NDg4LCAzNjQ5MiwgMzY0OTYsIDM2NTAwLCAKKyAgICAzNjUwNSwgMzY1MDksIDk1MjgsIDM2NTEzLCAzNjUxOSwgMTc0MSwgNjI4MCwgMzY1MjUsIDM2NTI4LCAzNjUzMywgMzY1MzcsIAorICAgIDM2NTQyLCAzNjU0NiwgMzY1NTAsIDM2NTU1LCAxMDI0NSwgMzY1NTksIDM2NTYzLCAzNjU2NywgMzY1NzEsIDE1Mzg1LCAKKyAgICAzNjU3NiwgMzY1ODAsIDM2NTg1LCAzNjU5MCwgMzY1OTUsIDM2NTk5LCAzNjYwNiwgMjYxMjgsIDM2NjEyLCAzNjYxNSwgCisgICAgMzY2MTksIDM2NjI0LCAzNjYzMCwgMzY2MzQsIDM2NjQyLCAzNjY0OCwgMzY2NTMsIDM2NjU3LCAzNjY2MywgMzY2NjcsIAorICAgIDM2NjcxLCAzNDYyLCAzNDY3LCAyOTI1NSwgMzY2NzQsIDM2Njc4LCAzNjY4MiwgMzY2ODYsIDM2NjkwLCAzNjY5OCwgCisgICAgMzY3MDUsIDM2NzA5LCAzNjcxNiwgMzY3MjEsIDMxNywgMzY3MjYsIDM2NzMwLCAzNjczNiwgMzY3NDgsIDM2NzU0LCAKKyAgICAzNjc2MCwgMzY3NjQsIDM2NzcwLCAzNjc3OSwgMzY3ODMsIDM2Nzg3LCAzNjc5MiwgMzY3OTgsIDM2ODAzLCAzNjgwNywgCisgICAgMzY4MTIsIDM2ODE2LCAzNjgyMCwgMzY4MjcsIDM2ODMzLCAzNjgzOCwgMzY4NTMsIDM2ODY4LCAzNjg4MywgMzY4OTksIAorICAgIDM2OTE3LCAxMDE5NSwgMzY5MzEsIDM2OTM4LCAzNjk0MiwgMzY5NDUsIDM2OTU0LCAzNjk1OSwgMzY5NjMsIDM2OTcxLCAKKyAgICAzMzkxOSwgMzY5NzksIDM2OTgzLCAzNjk5MywgMzcwMDQsIDI5MjI1LCAzNzAxNywgMzcwMjEsIDM3MDMwLCAzNzAzOCwgCisgICAgOTc4NSwgMTQ5MTMsIDM3MDQyLCAyMjQ0NywgMzcwNDUsIDMwMTczLCAzNzA1MCwgOTc4NCwgMzcwNTUsIDM3MDYxLCAKKyAgICAzNzA2NiwgMzcwNzIsIDM3MDc3LCAzNzA4MywgMzcwODgsIDM3MDk0LCAzNzA5OSwgMzcxMDUsIDM3MTExLCAzNzExNywgCisgICAgMzcxMjIsIDM3MDc4LCAzNzA4NCwgMzcwODksIDM3MDk1LCAzNzEwMCwgMzcxMDYsIDM3MTEyLCA4MTI2LCAzODc0LCAKKyAgICAzNzEyNiwgMzcxMzQsIDM3MTM4LCAzNzE0MSwgMzcxNDUsIDM3MTUwLCAzNzE1NSwgMzcxNjEsIDM3MTY3LCAzNzE3MiwgCisgICAgMzcxNzYsIDI1OTc2LCAzNzE4MCwgMzcxODQsIDM3MTkwLCAzNzE5NCwgOTA0OSwgMzcyMDMsIDM3MjEwLCAzNzIxNCwgCisgICAgMTE4NzUsIDM3MjIxLCAzNzIyNywgMzcyMzIsIDM3MjM5LCAzNzI0NiwgMzcyNTMsIDI4NTcxLCA4MDQ5LCAzNzI2MCwgCisgICAgMzcyNjcsIDM3Mjc0LCAzNzI4MCwgMzcyODUsIDM3MjkyLCAzNzMwMywgMzczMDksIDM3MzE0LCAzNzMxOSwgMzczMjQsIAorICAgIDM3MzMxLCAzNzA3OSwgMzczMzUsIDM3MzQ1LCAzNzM1NiwgMzczNjIsIDM3MzY3LCAzNzM3MiwgMzczNzcsIDM3MzgyLCAKKyAgICAzNzM4NywgMzczOTEsIDM3Mzk1LCAzNzQwMSwgMzc0MDksIDIzMTksIDg2NSwgMTAyNjEsIDEwMjczLCAxMDI3OCwgMTAyODQsIAorICAgIDM3NDE4LCAxMDI4OSwgMTAyOTQsIDEwMzAwLCAzNzQyMywgMzc0MzMsIDM3NDM3LCAxMDMwNSwgMzc0NDIsIDE2OTAzLCAKKyAgICAzNzQ0NSwgMzc0NTAsIDM3NDU0LCAzNzQ1OSwgMzc0NjQsIDM3NDcxLCAzNzQ3OCwgMzc0ODIsIDM3NDg1LCAzNzQ5MywgCisgICAgMTAyMDgsIDM3NTAwLCAzNzUwMywgMzc1MDksIDM3NTE5LCA1OTI5LCAzNzUyOCwgMzc1MzIsIDM3NTQwLCAzNzU0NCwgCisgICAgMzc1NTQsIDM3NTYwLCAzNzU3MSwgMzc1NzcsIDM3NTgzLCAzNzU4OCwgMzc1OTQsIDM3NjAwLCAzNzYwNiwgMzc2MTEsIAorICAgIDM3NjE0LCAzNzYyMSwgMzc2MjcsIDM3NjMyLCAzNzYzOSwgMzc2NDYsIDM3NjUwLCAzNzY2MCwgMzc2NzMsIDM3NjgyLCAKKyAgICAzNzY5MSwgMzc3MDIsIDM3NzE1LCAzNzcyNiwgMzc3MzUsIDM3NzQ2LCAzNzc1MSwgMzc3NjAsIDM3NzY1LCAxMDMxMCwgCisgICAgMzc3NzEsIDM3Nzc4LCAzNzc4NiwgMzc3OTEsIDM3Nzk1LCAzNzgwMiwgMzc4MDksIDM4MjksIDE2LCAzNzgxMywgMzc4MTgsIAorICAgIDE2NzU3LCAzNzgyMiwgMzc4MjUsIDM3ODI4LCAyODA3NywgMzc4MzIsIDI4NTgwLCAzNzg0MCwgMzc4NDQsIDM3ODQ4LCAKKyAgICAzNzg1MSwgMzc4NTcsIDM3MTAxLCAzNzg2MywgMzc4NzEsIDM3ODc3LCAzNzg4NCwgMjgwNjAsIDM3ODg4LCAyODI1NCwgCisgICAgMzc4OTIsIDM3OTAxLCAzNzkwNywgMzc5MTMsIDM3OTE4LCAzNzkyMiwgMzc5MjgsIDM3OTMyLCAzNzk0MCwgMzc5NDgsIAorICAgIDI2MTk0LCAzNzk1NCwgMzc5NjEsIDM3OTY3LCAzNzk3MiwgMzc5NzcsIDM3OTgxLCAzNzk4NywgMzc5OTIsIDM3OTk4LCAKKyAgICA0MDU2LCA3OTEsIDM4MDA1LCAzODAwOSwgMzgwMTIsIDE1Mjc1LCAzODAyNCwgMzU4NTEsIDM4MDM1LCAzODAzOCwgMzgwNDUsIAorICAgIDM4MDQ5LCAzODA1NSwgMzgwNTksIDM4MDY1LCAzODA3MCwgMzgwNzYsIDM4MDgxLCAzODA4NiwgMzgwOTAsIDM4MDk0LCAKKyAgICAzODA5OSwgMzgxMDQsIDM4MTE0LCAzODEyMCwgMzgxMzMsIDM4MTM5LCAzODE0NSwgMzgxNTIsIDM4MTU3LCAzODE2MywgCisgICAgMzgxNjgsIDE2NjQzLCAxNDcyLCAxMDE5LCAzMTIxOCwgMzEyMjQsIDM4MTczLCAzMTIzMCwgMzEyNDMsIDMxMjQ5LCAKKyAgICAzMTI1NSwgMzgxNzksIDMxMjYxLCAzMTI2NywgMzgxODUsIDM4MTkxLCAyMiwgMzgxOTksIDM4MjA2LCAzODIxMCwgMzgyMTQsIAorICAgIDM4MjIyLCAzMTk3OCwgMzgyMjYsIDM4MjMwLCAzODIzNywgMzgyNDIsIDM4MjQ2LCAzODI1MSwgMzgyNTcsIDM4MjYyLCAKKyAgICAzODI2OCwgMzgyNzMsIDM4Mjc3LCAzODI4MSwgMzgyODUsIDM4MjkwLCAzODI5NCwgMzgyOTksIDM4MzAzLCAzODMxMCwgCisgICAgMzgzMTUsIDM4MzE5LCAzODMyNCwgMzgzMjgsIDM4MzMzLCAzODMzNywgMzgzNDIsIDM4MzQ4LCAxNTQ5NSwgMTU1MDAsIAorICAgIDM4MzUzLCAzODM1NywgMzgzNjAsIDM4MzY0LCAyMTE4MywgMzgzNjksIDM4MzczLCAzODM3OSwgMzgzODYsIDM4MzkxLCAKKyAgICAzODQwMSwgMzg0MDYsIDM4NDE0LCAzODQxOCwgMzg0MjEsIDMxOTkzLCAzODQyNSwgNDEwOSwgMzg0MzAsIDM4NDM1LCAKKyAgICAzODQzOSwgMzg0NDQsIDM4NDQ4LCAzODQ1MywgMTMzNzUsIDM4NDY0LCAzODQ2OCwgMzg0NzEsIDM4NDc2LCAzODQ4MCwgCisgICAgMzg0ODQsIDM4NDg3LCAzODQ5MSwgODE0NSwgMTMzOTEsIDM4NDk0LCAzODQ5NywgMzg1MDMsIDM4NTA4LCAzODUxNCwgCisgICAgMzg1MTksIDM4NTI1LCAzODUzMCwgMzg1MzYsIDM4NTQxLCAzODU0NywgMzg1NTMsIDM4NTU5LCAzODU2NCwgMzg1NjgsIAorICAgIDM4NTcyLCAzODU4MSwgMzg1OTcsIDM4NjEzLCAzODYyMywgMjc5NjcsIDM4NjMwLCAzODYzNCwgMzg2MzksIDM4NjQ0LCAKKyAgICAzODY0OCwgMzg2NTIsIDM1OTcyLCAzODY1OCwgMzg2NjMsIDM4NjY3LCAzODY3NCwgMzg2NzksIDM4NjgzLCAzODY4NywgCisgICAgMjY5OTYsIDM4NjkzLCAyMTQ1MSwgMzg2OTgsIDM4NzA1LCAzODcxMywgMzg3MTksIDM4NzI2LCAzODczNCwgMzg3NDAsIAorICAgIDM4NzQ0LCAzODc1MCwgMzg3NTgsIDM4NzYyLCAzODc3MSwgOTUwOSwgMzg3NzksIDM4NzgzLCAzODc5MSwgMzg3OTgsIAorICAgIDM4ODAzLCAzODgwOCwgMzg4MTIsIDM4ODE1LCAzODgxOSwgMzg4MjIsIDM4ODI2LCAzODgzMywgMzg4MzgsIDM4ODQ0LCAKKyAgICAyNjQxNSwgMzEyODEsIDM4ODQ4LCAzODg1NSwgMzg4NjEsIDM4ODY3LCAzODg3MiwgMzg4NzUsIDM4ODc3LCAzODg4NCwgCisgICAgMzg4OTEsIDM4ODk3LCAzODkwMSwgMzg5MDQsIDM4OTA4LCAzODkxMiwgMzg5MTYsIDM4OTIxLCAzODkyNSwgMzg5MjksIAorICAgIDM4OTMyLCAzODkzNiwgMzg5NTAsIDIzMDYyLCAzODk2OSwgMzg5ODIsIDM4OTk1LCAzOTAwOCwgMjMwODAsIDM5MDIzLCAKKyAgICAxMDQ5NywgMzkwMzgsIDM5MDQ0LCAzOTA0OCwgMzkwNTIsIDM5MDU5LCAzOTA2NCwgMzkwNjgsIDM5MDc1LCAzOTA4MSwgCisgICAgMzkwODYsIDM5MDkyLCAzOTEwMiwgMzkxMTQsIDM5MTI1LCAzOTEzMCwgMzkxMzcsIDM5MTQxLCAzOTE0NSwgMzkxNDgsIAorICAgIDE1ODkxLCAzNjc3LCAzOTE1NiwgMTU1MjIsIDM5MTY5LCAzOTE3NiwgMzkxODAsIDM5MTg0LCAzOTE4OSwgMzkxOTQsIAorICAgIDM5MjAwLCAzOTIwNCwgMzkyMDgsIDM5MjExLCA3NzQyLCAxNTUzMywgMzkyMTYsIDM5MjIwLCAzOTIyNiwgMzkyMzUsIAorICAgIDM5MjQwLCAzOTI0NywgMzU4MjgsIDM5MjUzLCAzOTI1OCwgMzkyNjIsIDM5MjY3LCAzOTI3NCwgMzkyNzgsIDM5MjgxLCAKKyAgICAzOTI4NSwgMzkyOTAsIDE0NTY1LCAzOTI5NywgMzkzMDQsIDEwNzcsIDM5MzA4LCAzOTMxMywgMzkzMTgsIDM5MzI0LCAKKyAgICAzOTMyOSwgMzkzMzQsIDM5MzM4LCAzOTM0OCwgMzkzNTMsIDM5MzU5LCAzOTM2NCwgMzkzNzAsIDM5Mzc1LCAzOTM4MSwgCisgICAgMzkzOTEsIDM5Mzk2LCAzOTQwMSwgMzk0MDUsIDcyMjksIDcyNDEsIDM5NDEwLCAzOTQxMywgMzk0MjAsIDM5NDI2LCAKKyAgICAzNDA4NCwgMzQwOTEsIDM5NDM1LCAzOTQzOSwgMzIwNDEsIDM5NDQ3LCAzOTQ1OCwgMzk0NjYsIDM2MDIwLCAzOTQ3MywgCisgICAgMzk0NzgsIDM5NDgzLCAzOTQ5NCwgMzk1MDEsIDM5NTEyLCAzMjA2NSwgMjE0NTcsIDM5NTIwLCA3MzUsIDM5NTI1LCAKKyAgICAzOTUzMSwgMjgwNTEsIDM5NTM3LCAzOTU0MiwgMzk1NTIsIDM5NTYxLCAzOTU2OCwgMzk1NzQsIDM5NTc4LCAzOTU4MSwgCisgICAgMzk1ODgsIDM5NTk0LCAzOTYwMSwgMzk2MDcsIDM5NjE3LCAzOTYyNSwgMzk2MzEsIDM5NjM3LCAzOTY0MiwgMzk2NDYsIAorICAgIDM5NjUzLCAzOTY1OSwgMzk2NjYsIDM4OTE3LCA1MzUsIDEzODE4LCAzOTY3MiwgMzk2NzcsIDM5NjgwLCAzOTY4NiwgCisgICAgMzk2OTQsIDEzOTYsIDM5Njk5LCAzOTcwMywgMzk3MDgsIDM5NzE1LCAzOTcyMSwgMzk3MjUsIDM5NzI5LCAzOTczNCwgCisgICAgMzk3NDMsIDM5NzUwLCAzOTc2MCwgMzk3NjYsIDI4MDk1LCAzOTc4MywgMzk3OTIsIDM5ODAwLCAzOTgwNiwgMzk4MTEsIAorICAgIDM5ODE4LCAzOTgyNCwgMzk4MzIsIDM5ODQxLCAzOTg0OSwgMzk4NTMsIDM5ODU4LCAzOTg2NiwgMzIwNzQsIDM5ODcyLCAKKyAgICAzOTg5MSwgMTU4MjQsIDM5OTA1LCAzOTkyMSwgMzk5MzUsIDM5OTQxLCAzOTk0NiwgMzk5NTEsIDM5OTU2LCAzOTk2MiwgCisgICAgMzIwODAsIDM5OTY3LCAzOTk3NCwgMzk5NzksIDM5OTgzLCAzNDUsIDI5MzYsIDM5OTkwLCAzOTk5NSwgNDAwMDAsIDI3MzIyLCAKKyAgICAzOTgyMSwgNDAwMDQsIDQwMDA5LCA0MDAxNywgNDAwMjEsIDQwMDI0LCA0MDAzMCwgNDAwMzYsIDQwMDQwLCAyODE1MCwgCisgICAgNDAwNDMsIDQwMDQ4LCA0MDA1MiwgNDAwNTUsIDQwMDYwLCA0MDA2NCwgNDAwNjksIDQwMDc0LCA0MDA3OCwgNDAwODMsIAorICAgIDQwMDg3LCA0MDA5MSwgMjExNzksIDIxMTkwLCA0MDA5NSwgNDAxMDAsIDQwMTA2LCAyNjk1MywgNDAxMTEsIDQwMTE1LCAKKyAgICAyMTI2NiwgMTYwNzIsIDQwMTE4LCA0MDEyMywgNDAxMjgsIDQwMTMzLCA0MDEzOCwgNDAxNDMsIDQwMTQ4LCA0MDE1MywgCisgICAgNDUwLCA0OSwgMzEyOTksIDMxMzA0LCAzMTMwOSwgMzEzMTUsIDMxMzIwLCAzMTMyNSwgNDAxNTgsIDMxMzI5LCA0MDE2MiwgCisgICAgNDAxNjYsIDQwMTcwLCAzMTMzNCwgMzEzNDAsIDQwMTg0LCAzMTM1MSwgMzEzNTYsIDQwMTkyLCA0MDE5NywgMzEzNjIsIAorICAgIDQwMjAyLCA0MDIwNywgNDAyMTIsIDQwMjE3LCA0MDIyMywgNDAyMjksIDQwMjM1LCAzMTM3OSwgNDAyNDgsIDQwMjU0LCAKKyAgICAzMTM4MywgNDAyNTgsIDMxMzg4LCA0MDI2MywgMzEzOTMsIDMxMzk4LCA0MDI2NiwgNDAyNzEsIDQwMjc1LCAzMDk0OCwgCisgICAgNDAyODEsIDEzNTk5LCA0MDI4OCwgNDAyOTMsIDMxNDAzLCA0MDI5NywgNDAzMDIsIDQwMzA3LCA0MDMxMiwgNDAzMTYsIAorICAgIDQwMzIxLCA0MDMyNiwgNDAzMzIsIDQwMzM3LCA0MDM0MiwgNDAzNDgsIDQwMzU0LCA0MDM1OSwgNDAzNjMsIDQwMzY4LCAKKyAgICA0MDM3MywgNDAzNzgsIDQwMzgyLCA0MDM4NywgNDAzOTIsIDQwMzk3LCA0MDQwMywgNDA0MDksIDQwNDE1LCA0MDQyMCwgCisgICAgNDA0MjQsIDQwNDI5LCA0MDQzMywgMzE0MDcsIDMxNDEyLCAzMTQxNywgNDA0MzcsIDQwNDQxLCA0MDQ0NSwgMzE0MjIsIAorICAgIDMxNDI4LCAzMTQzNCwgMzE0NDYsIDQwNDU3LCAyNjAxMywgNDA0NjEsIDQwNDY1LCA0MDQ3MCwgNDA0NzUsIDQwNDgwLCAKKyAgICA0MDQ4NSwgNDA0ODksIDQwNDkzLCA0MDUwMywgNDA1MDgsIDQwNTEzLCA0MDUxNywgNDA1MjEsIDQwNTI0LCA0MDUzMiwgCisgICAgMzE0OTQsIDQwNTM3LCAxNDc5LCA0MDU0MywgNDA1NTEsIDQwNTYwLCA0MDU2NCwgNDA1NjgsIDQwNTc2LCA0MDU4MiwgCisgICAgNDA1OTAsIDQwNjA2LCA0MDYxMCwgNDA2MTQsIDQwNjE5LCA0MDYzNCwgMzE1MzEsIDE3NDksIDEyMDU1LCA0MDYzOCwgCisgICAgMTM3OCwgNDA2NTAsIDQwNjUxLCA0MDY1OSwgNDA2NjYsIDQwNjcxLCA0MDY3OCwgNDA2ODMsIDkzNzksIDExMTksIDEwMzMyLCAKKyAgICA0MDY5MCwgNDA2OTUsIDQwNjk4LCA0MDcwMSwgNDA3MTAsIDEyODYsIDQwNzE1LCAzOTA2NSwgNDA3MjIsIDQwNzI3LCAKKyAgICA0MDczMSwgMjI1MDMsIDI1NTcsIDQwNzM5LCAxMDc0MSwgNDA3NDksIDQwNzU1LCAyMzM3LCAyMzQ3LCA0MDc2NCwgNDA3NzMsIAorICAgIDQwNzgzLCA0MDc5NCwgMzI5MywgMzQyMzcsIDEwMzg0LCAzODA3LCAxNjY4MSwgMTI5MSwgNDA3OTksIDQwODA3LCA0MDgxNCwgCisgICAgNDA4MTksIDQwODIzLCA0MDgyNywgMjM4NzUsIDEwNDExLCA0MDgzNSwgNDA4NDQsIDQwODUzLCA0MDg2MSwgNDA4NjgsIAorICAgIDQwODc5LCA0MDg4NCwgNDA4OTcsIDQwOTEwLCA0MDkyMiwgNDA5MzQsIDQwOTQ2LCA0MDk1OSwgNDA5NzAsIDQwOTgxLCAKKyAgICA0MDk5MSwgNDA5OTksIDQxMDA3LCA0MTAxOSwgNDEwMzEsIDQxMDQyLCA0MTA1MSwgNDEwNTksIDQxMDY2LCA0MTA3OCwgCisgICAgNDEwODUsIDQxMDk0LCA0MTEwMSwgNDExMTQsIDQxMTE5LCA0MTEyOSwgNDExMzQsIDQxMTQwLCA0MTE0NSwgMzcyMTEsIAorICAgIDQxMTQ5LCA0MTE1NiwgNDExNjAsIDQxMTY3LCA0MTE3NSwgMjUxOCwgNDExODIsIDQxMTkzLCA0MTIwMywgNDEyMTIsIAorICAgIDQxMjIwLCA0MTIzMCwgNDEyMzgsIDQxMjQ4LCA0MTI1NywgNDEyNjIsIDQxMjY4LCA0MTI3NCwgMzcwOSwgNDEyODUsIAorICAgIDQxMjk1LCA0MTMwNCwgNDEzMTMsIDQxMzIzLCA0MTMzMSwgNDEzNDAsIDQxMzQ1LCA0MTM1MCwgNDEzNTUsIDE3MDUsIDM3LCAKKyAgICA0MTM2MywgNDEzNzEsIDQxMzgyLCA0MTM5MywgMTYzNTYsIDQxNDAzLCA0MTQwNywgNDE0MTQsIDQxNDIwLCA0MTQyNSwgCisgICAgNDE0MjksIDQxNDQwLCA0MTQ1MCwgNDE0NTksIDQxNDcwLCAxNjczMCwgMTY3MzUsIDQxNDc1LCA0MTQ4NCwgNDE0ODksIAorICAgIDQxNDk5LCA0MTUwNCwgNDE1MTIsIDQxNTIwLCA0MTUyNywgNDE1MzMsIDcwNzgsIDIyOCwgNDE1MzcsIDQxNTQzLCA0MTU0OCwgCisgICAgNDE1NTEsIDIxMTcsIDM5MTgxLCA0MTU1OSwgNDE1NjMsIDQxNTY2LCAxNTEyLCA0MTU3MiwgMTM5ODAsIDEyOTYsIDQxNTc3LCAKKyAgICA0MTU5MCwgNDE2MDQsIDI2NDMsIDQxNjIyLCA0MTYzNCwgNDE2NDYsIDI2NTcsIDI2NzQsIDQxNjYwLCA0MTY3MywgMjY4OSwgCisgICAgNDE2ODcsIDQxNjk5LCAyNzA0LCA0MTcxMywgMTMwMiwgMTMwOCwgMTMxNCwgMTA2NTksIDQxNzE4LCA0MTcyMywgNDE3MjgsIAorICAgIDQxNzMyLCA0MTc0NywgNDE3NjIsIDQxNzc3LCA0MTc5MiwgNDE4MDcsIDQxODIyLCA0MTgzNywgNDE4NTIsIDQxODY3LCAKKyAgICA0MTg4MiwgNDE4OTcsIDQxOTEyLCA0MTkyNywgNDE5NDIsIDQxOTU3LCA0MTk3MiwgNDE5ODcsIDQyMDAyLCA0MjAxNywgCisgICAgNDIwMzIsIDQyMDQ3LCA0MjA2MiwgNDIwNzcsIDQyMDkyLCA0MjEwNywgNDIxMjIsIDQyMTM3LCA0MjE1MiwgNDIxNjcsIAorICAgIDQyMTgyLCA0MjE5NywgNDIyMTIsIDQyMjI3LCA0MjI0MiwgNDIyNTcsIDQyMjcyLCA0MjI4NywgNDIzMDIsIDQyMzE3LCAKKyAgICA0MjMzMiwgNDIzNDcsIDQyMzYyLCA0MjM3NywgNDIzOTIsIDQyNDA3LCA0MjQyMiwgNDI0MzcsIDQyNDUyLCA0MjQ2NywgCisgICAgNDI0ODIsIDQyNDk3LCA0MjUxMiwgNDI1MjcsIDQyNTQyLCA0MjU1NywgNDI1NzIsIDQyNTg3LCA0MjYwMiwgNDI2MTcsIAorICAgIDQyNjMyLCA0MjY0NywgNDI2NjIsIDQyNjc3LCA0MjY5MiwgNDI3MDcsIDQyNzIyLCA0MjczNywgNDI3NTIsIDQyNzY3LCAKKyAgICA0Mjc4MiwgNDI3OTcsIDQyODEyLCA0MjgyNywgNDI4NDIsIDQyODU3LCA0Mjg3MiwgNDI4ODcsIDQyOTAyLCA0MjkxNywgCisgICAgNDI5MzIsIDQyOTQ3LCA0Mjk2MiwgNDI5NzcsIDQyOTkyLCA0MzAwNywgNDMwMjIsIDQzMDM3LCA0MzA1MiwgNDMwNjcsIAorICAgIDQzMDgyLCA0MzA5NywgNDMxMTIsIDQzMTI3LCA0MzE0MiwgNDMxNTcsIDQzMTcyLCA0MzE4NywgNDMyMDIsIDQzMjE3LCAKKyAgICA0MzIzMiwgNDMyNDcsIDQzMjYyLCA0MzI3NywgNDMyOTIsIDQzMzA3LCA0MzMyMiwgNDMzMzcsIDQzMzUyLCA0MzM2NywgCisgICAgNDMzODIsIDQzMzk3LCA0MzQxMiwgNDM0MjcsIDQzNDQyLCA0MzQ1NywgNDM0NzIsIDQzNDg3LCA0MzUwMiwgNDM1MTcsIAorICAgIDQzNTMyLCA0MzU0NywgNDM1NjIsIDQzNTc3LCA0MzU5MiwgNDM2MDcsIDQzNjIyLCA0MzYzNywgNDM2NTIsIDQzNjY3LCAKKyAgICA0MzY4MiwgNDM2OTcsIDQzNzEyLCA0MzcyNywgNDM3NDIsIDQzNzU3LCA0Mzc3MiwgNDM3ODcsIDQzODAyLCA0MzgxNywgCisgICAgNDM4MzIsIDQzODQ3LCA0Mzg2MiwgNDM4NzcsIDQzODkyLCA0MzkwNywgNDM5MjIsIDQzOTM3LCA0Mzk1MiwgNDM5NjcsIAorICAgIDQzOTgyLCA0Mzk5NywgNDQwMTIsIDQ0MDI3LCA0NDA0MiwgNDQwNTcsIDQ0MDcyLCA0NDA4NywgNDQxMDIsIDQ0MTE3LCAKKyAgICA0NDEzMiwgNDQxNDcsIDQ0MTYyLCA0NDE3NywgNDQxOTIsIDQ0MjA3LCA0NDIyMiwgNDQyMzcsIDQ0MjUyLCA0NDI2NywgCisgICAgNDQyODIsIDQ0Mjk3LCA0NDMxMiwgNDQzMjcsIDQ0MzQyLCA0NDM1NywgNDQzNzIsIDQ0Mzg3LCA0NDQwMiwgNDQ0MTcsIAorICAgIDQ0NDMyLCA0NDQ0NywgNDQ0NjIsIDQ0NDc3LCA0NDQ5MiwgNDQ1MDcsIDQ0NTIyLCA0NDUzNywgNDQ1NTIsIDQ0NTY3LCAKKyAgICA0NDU4MiwgNDQ1OTcsIDQ0NjEyLCA0NDYyNywgNDQ2NDIsIDQ0NjU3LCA0NDY3MiwgNDQ2ODcsIDQ0NzAyLCA0NDcxNywgCisgICAgNDQ3MzIsIDQ0NzQ3LCA0NDc2MiwgNDQ3NzcsIDQ0NzkyLCA0NDgwNywgNDQ4MjIsIDQ0ODM3LCA0NDg1MiwgNDQ4NjcsIAorICAgIDQ0ODgyLCA0NDg5NywgNDQ5MTIsIDQ0OTI3LCA0NDk0MiwgNDQ5NTcsIDQ0OTcyLCA0NDk4NywgNDUwMDIsIDQ1MDE3LCAKKyAgICA0NTAzMiwgNDUwNDcsIDQ1MDYyLCA0NTA3NywgNDUwOTIsIDQ1MTA3LCA0NTEyMiwgNDUxMzcsIDQ1MTUyLCA0NTE2NywgCisgICAgNDUxODIsIDQ1MTk3LCA0NTIxMiwgNDUyMjcsIDQ1MjQyLCA0NTI1NywgNDUyNzIsIDQ1Mjg3LCA0NTMwMiwgNDUzMTcsIAorICAgIDQ1MzMyLCA0NTM0NywgNDUzNjIsIDQ1Mzc3LCA0NTM5MiwgNDU0MDcsIDQ1NDIyLCA0NTQzNywgNDU0NTIsIDQ1NDY3LCAKKyAgICA0NTQ4MiwgNDU0OTcsIDQ1NTEyLCA0NTUyNywgNDU1NDIsIDQ1NTU3LCA0NTU3MiwgNDU1ODcsIDQ1NjAyLCA0NTYxNywgCisgICAgNDU2MzIsIDQ1NjQ3LCA0NTY2MiwgNDU2NzcsIDQ1NjkyLCA0NTcwNywgNDU3MjIsIDQ1NzM3LCA0NTc1MiwgNDU3NjcsIAorICAgIDQ1NzgyLCA0NTc5NywgNDU4MTIsIDQ1ODI3LCA0NTg0MiwgNDU4NTcsIDQ1ODcyLCA0NTg4NywgNDU5MDIsIDQ1OTE3LCAKKyAgICA0NTkzMiwgNDU5NDcsIDQ1OTYyLCA0NTk3NywgNDU5OTIsIDQ2MDA3LCA0NjAyMiwgNDYwMzcsIDQ2MDUyLCA0NjA2NywgCisgICAgNDYwODIsIDQ2MDk3LCA0NjExMiwgNDYxMjcsIDQ2MTQyLCA0NjE1NywgNDYxNzIsIDQ2MTg3LCA0NjIwMiwgNDYyMTcsIAorICAgIDQ2MjMyLCA0NjI0NywgNDYyNjIsIDQ2Mjc3LCA0NjI5MiwgNDYzMDcsIDQ2MzIyLCA0NjMzNywgNDYzNTIsIDQ2MzY3LCAKKyAgICA0NjM4MiwgNDYzOTcsIDQ2NDEyLCA0NjQyNywgNDY0NDIsIDQ2NDU3LCA0NjQ3MiwgNDY0ODcsIDQ2NTAyLCA0NjUxNywgCisgICAgNDY1MzIsIDQ2NTQ3LCA0NjU2MiwgNDY1NzcsIDQ2NTkyLCA0NjYwNywgNDY2MjIsIDQ2NjM3LCA0NjY1MiwgNDY2NjcsIAorICAgIDQ2NjgyLCA0NjY5NywgNDY3MTIsIDQ2NzI3LCA0Njc0MiwgNDY3NTcsIDQ2NzcyLCA0Njc4NywgNDY4MDIsIDQ2ODE3LCAKKyAgICA0NjgzMiwgNDY4NDcsIDQ2ODYyLCA0Njg3NywgNDY4OTIsIDQ2OTA3LCA0NjkyMiwgNDY5MzcsIDQ2OTUyLCA0Njk2NywgCisgICAgNDY5ODIsIDQ2OTk3LCA0NzAxMiwgNDcwMjcsIDQ3MDQyLCA0NzA1NywgNDcwNzIsIDQ3MDg3LCA0NzEwMiwgNDcxMTcsIAorICAgIDQ3MTMyLCA0NzE0NywgNDcxNjIsIDQ3MTc3LCA0NzE5MiwgNDcyMDcsIDQ3MjIyLCA0NzIzNywgNDcyNTIsIDQ3MjY3LCAKKyAgICA0NzI4MiwgNDcyOTcsIDQ3MzEyLCA0NzMyNywgNDczNDIsIDQ3MzU3LCA0NzM3MiwgNDczODcsIDQ3NDAyLCA0NzQxNywgCisgICAgNDc0MzIsIDQ3NDQ3LCA0NzQ2MiwgNDc0NzcsIDQ3NDkyLCA0NzUwNywgNDc1MjIsIDQ3NTM3LCA0NzU1MiwgNDc1NjcsIAorICAgIDQ3NTgyLCA0NzU5NywgNDc2MTIsIDQ3NjI3LCA0NzY0MiwgNDc2NTcsIDQ3NjcyLCA0NzY4NywgNDc3MDIsIDQ3NzE3LCAKKyAgICA0NzczMiwgNDc3NDcsIDQ3NzYyLCA0Nzc3NywgNDc3OTIsIDQ3ODA3LCA0NzgyMiwgNDc4MzcsIDQ3ODUyLCA0Nzg2NywgCisgICAgNDc4ODIsIDQ3ODk3LCA0NzkxMiwgNDc5MjcsIDQ3OTQyLCA0Nzk1NywgNDc5NzIsIDQ3OTg3LCA0ODAwMiwgNDgwMTcsIAorICAgIDQ4MDMyLCA0ODA0NywgNDgwNjIsIDQ4MDc3LCA0ODA5MiwgNDgxMDcsIDQ4MTIyLCA0ODEzNywgNDgxNTIsIDQ4MTY3LCAKKyAgICA0ODE4MiwgNDgxOTcsIDQ4MjEyLCA0ODIyNywgNDgyNDIsIDQ4MjU3LCA0ODI3MiwgNDgyODcsIDQ4MzAyLCA0ODMxNywgCisgICAgNDgzMzIsIDQ4MzQ3LCA0ODM2MiwgNDgzNzcsIDQ4MzkyLCA0ODQwNywgNDg0MjIsIDQ4NDM3LCA0ODQ1MiwgNDg0NjcsIAorICAgIDQ4NDgyLCA0ODQ5NywgNDg1MTIsIDQ4NTI3LCA0ODU0MiwgNDg1NTcsIDQ4NTcyLCA0ODU4NywgNDg2MDIsIDQ4NjE3LCAKKyAgICA0ODYzMiwgNDg2NDcsIDQ4NjYyLCA0ODY3NywgNDg2OTIsIDQ4NzA3LCA0ODcyMiwgNDg3MzcsIDQ4NzUyLCA0ODc2NywgCisgICAgNDg3ODIsIDQ4Nzk3LCA0ODgxMiwgNDg4MjcsIDQ4ODQyLCA0ODg1NywgNDg4NzIsIDQ4ODg3LCA0ODkwMiwgNDg5MTcsIAorICAgIDQ4OTMyLCA0ODk0NywgNDg5NjIsIDQ4OTc3LCA0ODk5MiwgNDkwMDcsIDQ5MDIyLCA0OTAzNywgNDkwNTIsIDQ5MDY3LCAKKyAgICA0OTA4MiwgNDkwOTcsIDQ5MTEyLCA0OTEyNywgNDkxNDIsIDQ5MTU3LCA0OTE3MiwgNDkxODcsIDQ5MjAyLCA0OTIxNywgCisgICAgNDkyMzIsIDQ5MjQ3LCA0OTI2MiwgNDkyNzcsIDQ5MjkyLCA0OTMwNywgNDkzMjIsIDQ5MzM3LCA0OTM1MiwgNDkzNjcsIAorICAgIDQ5MzgyLCA0OTM5NywgNDk0MTIsIDQ5NDI3LCA0OTQ0MiwgNDk0NTcsIDQ5NDcyLCA0OTQ4NywgNDk1MDIsIDQ5NTE3LCAKKyAgICA0OTUzMiwgNDk1NDgsIDQ5NTY0LCA0OTU4MCwgNDk1OTYsIDQ5NjEyLCA0OTYyOCwgNDk2NDQsIDQ5NjYwLCA0OTY3NiwgCisgICAgNDk2OTIsIDQ5NzA4LCA0OTcyNCwgNDk3NDAsIDQ5NzU2LCA0OTc3MiwgNDk3ODgsIDQ5ODA0LCA0OTgyMCwgNDk4MzYsIAorICAgIDQ5ODUyLCA0OTg2OCwgNDk4ODQsIDQ5OTAwLCA0OTkxNiwgNDk5MzIsIDQ5OTQ4LCA0OTk2NCwgNDk5ODAsIDQ5OTk2LCAKKyAgICA1MDAxMiwgNTAwMjgsIDUwMDQ0LCA1MDA2MCwgNTAwNzYsIDUwMDkyLCA1MDEwOCwgNTAxMjQsIDUwMTQwLCA1MDE1NiwgCisgICAgNTAxNzIsIDUwMTg4LCA1MDIwNCwgNTAyMjAsIDUwMjM2LCA1MDI1MiwgNTAyNjgsIDUwMjg0LCA1MDMwMCwgNTAzMTYsIAorICAgIDUwMzMyLCA1MDM0OCwgNTAzNjQsIDUwMzgwLCA1MDM5NiwgNTA0MTIsIDUwNDI4LCA1MDQ0NCwgNTA0NjAsIDUwNDc2LCAKKyAgICA1MDQ5MiwgNTA1MDgsIDUwNTI0LCA1MDU0MCwgNTA1NTYsIDUwNTcyLCA1MDU4OCwgNTA2MDQsIDUwNjIwLCA1MDYzNiwgCisgICAgNTA2NTIsIDUwNjY4LCA1MDY4NCwgNTA3MDAsIDUwNzE2LCA1MDczMiwgNTA3NDgsIDUwNzY0LCA1MDc4MCwgNTA3OTYsIAorICAgIDUwODEyLCA1MDgyOCwgNTA4NDQsIDUwODYwLCA1MDg3NiwgNTA4OTIsIDUwOTA4LCA1MDkyNCwgNTA5NDAsIDUwOTU2LCAKKyAgICA1MDk3MiwgNTA5ODgsIDUxMDA0LCA1MTAyMCwgNTEwMzYsIDUxMDUyLCA1MTA2OCwgNTEwODQsIDUxMTAwLCA1MTExNiwgCisgICAgNTExMzIsIDUxMTQ4LCA1MTE2NCwgNTExODAsIDUxMTk2LCA1MTIxMiwgNTEyMjgsIDUxMjQ0LCA1MTI2MCwgNTEyNzYsIAorICAgIDUxMjkyLCA1MTMwOCwgNTEzMjQsIDUxMzQwLCA1MTM1NiwgNTEzNzIsIDUxMzg4LCA1MTQwNCwgNTE0MjAsIDUxNDM2LCAKKyAgICA1MTQ1MiwgNTE0NjgsIDUxNDg0LCA1MTUwMCwgNTE1MTYsIDUxNTMyLCA1MTU0OCwgNTE1NjQsIDUxNTgwLCA1MTU5NiwgCisgICAgNTE2MTIsIDUxNjI4LCA1MTY0NCwgNTE2NjAsIDUxNjc2LCA1MTY5MiwgNTE3MDgsIDUxNzI0LCA1MTc0MCwgNTE3NTYsIAorICAgIDUxNzcyLCA1MTc4OCwgNTE4MDQsIDUxODIwLCA1MTgzNiwgNTE4NTIsIDUxODY4LCA1MTg4NCwgNTE5MDAsIDUxOTE2LCAKKyAgICA1MTkzMiwgNTE5NDgsIDUxOTY0LCA1MTk4MCwgNTE5OTYsIDUyMDEyLCA1MjAyOCwgNTIwNDQsIDUyMDYwLCA1MjA3NiwgCisgICAgNTIwOTIsIDUyMTA4LCA1MjEyNCwgNTIxNDAsIDUyMTU2LCA1MjE3MiwgNTIxODgsIDUyMjA0LCA1MjIyMCwgNTIyMzYsIAorICAgIDUyMjUyLCA1MjI2OCwgNTIyODQsIDUyMzAwLCA1MjMxNiwgNTIzMzIsIDUyMzQ4LCA1MjM2NCwgNTIzODAsIDUyMzk2LCAKKyAgICA1MjQxMiwgNTI0MjgsIDUyNDQ0LCA1MjQ2MCwgNTI0NzYsIDUyNDkyLCA1MjUwOCwgNTI1MjQsIDUyNTQwLCA1MjU1NiwgCisgICAgNTI1NzIsIDUyNTg4LCA1MjYwNCwgNTI2MjAsIDUyNjM2LCA1MjY1MiwgNTI2NjgsIDUyNjg0LCA1MjcwMCwgNTI3MTYsIAorICAgIDUyNzMyLCA1Mjc0OCwgNTI3NjQsIDUyNzgwLCA1Mjc5NiwgNTI4MTIsIDUyODI4LCA1Mjg0NCwgNTI4NjAsIDUyODc2LCAKKyAgICA1Mjg5MiwgNTI5MDgsIDUyOTI0LCA1Mjk0MCwgNTI5NTYsIDUyOTcyLCA1Mjk4OCwgNTMwMDQsIDUzMDIwLCA1MzAzNiwgCisgICAgNTMwNTIsIDUzMDY4LCA1MzA4NCwgNTMxMDAsIDUzMTE2LCA1MzEzMiwgNTMxNDgsIDUzMTY0LCA1MzE4MCwgNTMxOTYsIAorICAgIDUzMjEyLCA1MzIyOCwgNTMyNDQsIDUzMjYwLCA1MzI3NiwgNTMyOTIsIDUzMzA4LCA1MzMyNCwgNTMzNDAsIDUzMzU2LCAKKyAgICA1MzM3MiwgNTMzODgsIDUzNDA0LCA1MzQyMCwgNTM0MzYsIDUzNDUyLCA1MzQ2OCwgNTM0ODQsIDUzNTAwLCA1MzUxNiwgCisgICAgNTM1MzIsIDUzNTQ4LCA1MzU2NCwgNTM1ODAsIDUzNTk2LCA1MzYxMiwgNTM2MjgsIDUzNjQ0LCA1MzY2MCwgNTM2NzYsIAorICAgIDUzNjkyLCA1MzcwOCwgNTM3MjQsIDUzNzQwLCA1Mzc1NiwgNTM3NzIsIDUzNzg4LCA1MzgwNCwgNTM4MjAsIDUzODM2LCAKKyAgICA1Mzg1MiwgNTM4NjgsIDUzODg0LCA1MzkwMCwgNTM5MTYsIDUzOTMyLCA1Mzk0OCwgNTM5NjQsIDUzOTgwLCA1Mzk5NiwgCisgICAgNTQwMTIsIDU0MDI4LCA1NDA0NCwgNTQwNjAsIDU0MDc2LCA1NDA5MiwgNTQxMDgsIDU0MTI0LCA1NDE0MCwgNTQxNTYsIAorICAgIDU0MTcyLCA1NDE4OCwgNTQyMDQsIDU0MjIwLCA1NDIzNiwgNTQyNTIsIDU0MjY4LCA1NDI4NCwgNTQzMDAsIDU0MzE2LCAKKyAgICA1NDMzMiwgNTQzNDgsIDU0MzY0LCA1NDM4MCwgNTQzOTYsIDU0NDEyLCA1NDQyOCwgNTQ0NDQsIDU0NDYwLCA1NDQ3NiwgCisgICAgNTQ0OTIsIDU0NTA4LCA1NDUyNCwgNTQ1NDAsIDU0NTU2LCA1NDU3MiwgNTQ1ODgsIDU0NjA0LCA1NDYyMCwgNTQ2MzYsIAorICAgIDU0NjUyLCA1NDY2OCwgNTQ2ODQsIDU0NzAwLCA1NDcxNiwgNTQ3MzIsIDU0NzQ4LCA1NDc2NCwgNTQ3ODAsIDU0Nzk2LCAKKyAgICA1NDgxMiwgNTQ4MjgsIDU0ODQ0LCA1NDg2MCwgNTQ4NzYsIDU0ODkyLCA1NDkwOCwgNTQ5MjQsIDU0OTQwLCA1NDk1NiwgCisgICAgNTQ5NzIsIDU0OTg4LCA1NTAwNCwgNTUwMjAsIDU1MDM2LCA1NTA1MiwgNTUwNjgsIDU1MDg0LCA1NTEwMCwgNTUxMTYsIAorICAgIDU1MTMyLCA1NTE0OCwgNTUxNjQsIDU1MTgwLCA1NTE5NiwgNTUyMTIsIDU1MjI4LCA1NTI0NCwgNTUyNjAsIDU1Mjc2LCAKKyAgICA1NTI5MiwgNTUzMDgsIDU1MzI0LCA1NTM0MCwgNTUzNTYsIDU1MzcyLCA1NTM4OCwgNTU0MDQsIDU1NDIwLCA1NTQzNiwgCisgICAgNTU0NTIsIDU1NDY4LCA1NTQ4NCwgNTU1MDAsIDU1NTE2LCA1NTUzMiwgNTU1NDgsIDU1NTY0LCA1NTU4MCwgNTU1OTYsIAorICAgIDU1NjEyLCA1NTYyOCwgNTU2NDQsIDU1NjYwLCA1NTY3NiwgNTU2OTIsIDU1NzA4LCA1NTcyNCwgNTU3NDAsIDU1NzU2LCAKKyAgICA1NTc3MiwgNTU3ODgsIDU1ODA0LCA1NTgyMCwgNTU4MzYsIDU1ODUyLCA1NTg2OCwgNTU4ODQsIDU1OTAwLCA1NTkxNiwgCisgICAgNTU5MzIsIDU1OTQ4LCA1NTk2NCwgNTU5ODAsIDU1OTk2LCA1NjAxMiwgNTYwMjgsIDU2MDQ0LCA1NjA2MCwgNTYwNzYsIAorICAgIDU2MDkyLCA1NjEwOCwgNTYxMjQsIDU2MTQwLCA1NjE1NiwgNTYxNzIsIDU2MTg4LCA1NjIwNCwgNTYyMjAsIDU2MjM2LCAKKyAgICA1NjI1MiwgNTYyNjgsIDU2Mjg0LCA1NjMwMCwgNTYzMTYsIDU2MzMyLCA1NjM0OCwgNTYzNjQsIDU2MzgwLCA1NjM5NiwgCisgICAgNTY0MTIsIDU2NDI4LCA1NjQ0NCwgNTY0NjAsIDU2NDc2LCA1NjQ5MiwgNTY1MDgsIDU2NTI0LCA1NjU0MCwgNTY1NTYsIAorICAgIDU2NTcyLCA1NjU4OCwgNTY2MDQsIDU2NjIwLCA1NjYzNiwgNTY2NTIsIDU2NjY4LCA1NjY4NCwgNTY3MDAsIDU2NzE2LCAKKyAgICA1NjczMiwgNTY3NDgsIDU2NzY0LCA1Njc4MCwgNTY3OTYsIDU2ODEyLCA1NjgyOCwgNTY4NDQsIDU2ODYwLCA1Njg3NiwgCisgICAgNTY4OTIsIDU2OTA4LCA1NjkyNCwgNTY5NDAsIDU2OTU2LCA1Njk3MiwgNTY5ODgsIDU3MDA0LCA1NzAyMCwgNTcwMzYsIAorICAgIDU3MDUyLCA1NzA2OCwgNTcwODQsIDU3MTAwLCA1NzExNiwgNTcxMzIsIDU3MTQ4LCA1NzE2NCwgNTcxODAsIDU3MTk2LCAKKyAgICA1NzIxMiwgNTcyMjgsIDU3MjQ0LCA1NzI2MCwgNTcyNzYsIDU3MjkyLCA1NzMwOCwgNTczMjQsIDU3MzQwLCA1NzM1NiwgCisgICAgNTczNzIsIDU3Mzg4LCA1NzQwNCwgNTc0MjAsIDU3NDM2LCA1NzQ1MiwgNTc0NjgsIDU3NDg0LCA1NzUwMCwgNTc1MTYsIAorICAgIDU3NTMyLCA1NzU0OCwgNTc1NjQsIDU3NTgwLCA1NzU5NiwgNTc2MTIsIDU3NjI4LCA1NzY0NCwgNTc2NjAsIDU3Njc2LCAKKyAgICA1NzY5MiwgNTc3MDgsIDU3NzI0LCA1Nzc0MCwgNTc3NTYsIDU3NzcyLCA1Nzc4OCwgNTc4MDQsIDU3ODIwLCA1NzgzNiwgCisgICAgNTc4NTIsIDU3ODY4LCA1Nzg4NCwgNTc5MDAsIDU3OTE2LCA1NzkzMiwgNTc5NDgsIDU3OTY0LCA1Nzk4MCwgNTc5OTYsIAorICAgIDU4MDEyLCA1ODAyOCwgNTgwNDQsIDU4MDYwLCA1ODA3NiwgNTgwOTIsIDU4MTA4LCA1ODEyNCwgNTgxNDAsIDU4MTU2LCAKKyAgICA1ODE3MiwgNTgxODgsIDU4MjA0LCA1ODIxOSwgMTY3NjIsIDU4MjI4LCA1ODIzNCwgNTgyNDAsIDU4MjUwLCA1ODI1OCwgCisgICAgMTQ4OTQsIDE1NDQ1LCA5OTYwLCA1ODI3MSwgMTUyMCwgNTgyNzksIDM3NjEsIDI3NDMyLCA3MTgzLCA1ODI4NSwgNTgyOTAsIAorICAgIDU4Mjk1LCA1ODMwMCwgNTgzMDUsIDU4MzExLCA1ODMxNiwgNTgzMjIsIDU4MzI3LCA1ODMzMywgNTgzMzgsIDU4MzQzLCAKKyAgICA1ODM0OCwgNTgzNTMsIDU4MzU5LCA1ODM2NCwgNTgzNjksIDU4Mzc0LCA1ODM3OSwgNTgzODQsIDU4Mzg5LCA1ODM5NCwgCisgICAgNTg0MDAsIDU4NDA1LCA1ODQxMSwgNTg0MTgsIDI1NjEsIDU4NDIzLCA1ODQyOSwgODUyNiwgNTg0MzMsIDU4NDM4LCAKKyAgICA1ODQ0NSwgNTg0NTMsIDQwLCA1ODQ1NywgNTg0NjMsIDU4NDY4LCA1ODQ3MywgNTg0NzcsIDU4NDgyLCA1ODQ4NiwgNTg0OTAsIAorICAgIDEwNjg0LCA1ODQ5NCwgNTg1MDQsIDU4NTE3LCA1ODUyOCwgNTg1NDEsIDU4NTQ4LCA1ODU1NCwgNTg1NTksIDU4NTY1LCAKKyAgICA1ODU3MSwgNTg1NzcsIDU4NTgyLCA1ODU4NywgNTg1OTIsIDU4NTk3LCA1ODYwMSwgNTg2MDYsIDU4NjExLCA1ODYxNiwgCisgICAgNTg2MjIsIDU4NjI4LCA1ODYzNCwgNTg2MzksIDU4NjQzLCA1ODY0OCwgNTg2NTMsIDU4NjU3LCA1ODY2MiwgNTg2NjcsIAorICAgIDU4NjcyLCA1ODY3NiwgMTA3MDAsIDEwNzExLCAxMDcxNiwgMTU2MywgNTg2ODAsIDE1NjgsIDU4Njg2LCAxNjIzOSwgCisgICAgNTg2ODksIDU4Njk1LCAxNTk5LCA1ODcwMSwgMTYwNSwgMTYxMSwgMTA3NDYsIDU4NzA2LCA1ODcxNCwgNTg3MjEsIDU4NzI1LCAKKyAgICA1ODczMSwgNTg3MzYsIDMwOTc3LCA1ODc0MSwgNTg3NDgsIDU4NzUzLCA1ODc1NywgNTg3NjEsIDE2MTYsIDE2MzMxLCAKKyAgICA1ODc3MCwgNTg3NzQsIDE2MzQyLCAxMTI1LCA1ODc3OCwgNTg3ODUsIDU4NzkwLCA1ODc5NCwgMTYzNjcsIDE2MjAsIAorICAgIDM3MzUwLCA1ODc5NywgNTg4MDIsIDU4ODEyLCA1ODgyMSwgNTg4MjYsIDU4ODMwLCA1ODgzNiwgMTYyNSwgMzkyNTksIAorICAgIDU4ODQxLCA1ODg1MCwgNTg4NTYsIDU4ODYxLCAxMDkwNCwgMTA5MTAsIDU4ODY3LCA1ODg3OSwgNTg4OTYsIDU4OTEzLCAKKyAgICA1ODkzMCwgNTg5NDcsIDU4OTY0LCA1ODk4MSwgNTg5OTgsIDU5MDE1LCA1OTAzMiwgNTkwNDksIDU5MDY2LCA1OTA4MywgCisgICAgNTkxMDAsIDU5MTE3LCA1OTEzNCwgNTkxNTEsIDU5MTY4LCA1OTE4NSwgNTkyMDIsIDU5MjE5LCA1OTIzNiwgNTkyNTMsIAorICAgIDU5MjcwLCA1OTI4NywgNTkzMDQsIDU5MzIxLCA1OTMzOCwgNTkzNTUsIDU5MzcyLCA1OTM4OSwgNTk0MDYsIDU5NDIzLCAKKyAgICA1OTQ0MCwgNTk0NTcsIDU5NDc0LCA1OTQ5MSwgNTk1MDgsIDU5NTI1LCA1OTU0MiwgNTk1NTksIDU5NTc2LCA1OTU5MywgCisgICAgNTk2MTAsIDU5NjI3LCA1OTY0NCwgNTk2NjEsIDU5Njc4LCA1OTY5NSwgNTk3MTIsIDU5NzIzLCA1OTcyOCwgMTYzMCwgCisgICAgNTk3MzIsIDU5NzM4LCA1OTc0MywgNTk3NDgsIDkzMjYsIDE2MzUsIDU5NzU0LCA1OTc2MywgMjc3MzEsIDU5NzY4LCAKKyAgICA1OTc3OSwgNTk3ODksIDU5Nzk0LCA1OTgwMSwgNTk4MDcsIDU5ODEyLCA1OTgxNywgMTY2MTksIDU5ODIxLCAxMDkyMSwgCisgICAgMTY0MCwgMTA5MjYsIDU5ODI3LCA1OTgzMiwgNTk4MzgsIDU5ODQzLCA1OTg0OCwgNTk4NTMsIDU5ODU4LCA1OTg2MywgCisgICAgNTk4NjgsIDU5ODczLCA1OTg3OSwgNTk4ODUsIDU5ODkxLCA1OTg5NiwgNTk5MDAsIDU5OTA1LCA1OTkxMCwgNTk5MTQsIAorICAgIDU5OTE5LCA1OTkyNCwgNTk5MjksIDU5OTMzLCA1OTkzOCwgNTk5NDQsIDU5OTQ5LCA1OTk1NCwgNTk5NTgsIDU5OTYzLCAKKyAgICA1OTk2OCwgNTk5NzQsIDU5OTc5LCA1OTk4NCwgNTk5OTAsIDU5OTk2LCA2MDAwMSwgNjAwMDUsIDYwMDEwLCA2MDAxNSwgCisgICAgNjAwMjAsIDYwMDI0LCA2MDAyOSwgNjAwMzQsIDYwMDM5LCA2MDA0NSwgNjAwNTEsIDYwMDU2LCA2MDA2MCwgNjAwNjQsIAorICAgIDYwMDY5LCA2MDA3NCwgNjAwNzksIDI5MTI5LCA2MDA4MywgNjAwODgsIDYwMDkzLCA2MDA5OSwgNjAxMDQsIDYwMTA5LCAKKyAgICA2MDExMywgNjAxMTgsIDYwMTIzLCA2MDEyOSwgNjAxMzQsIDYwMTM5LCA2MDE0NSwgNjAxNTEsIDYwMTU2LCA2MDE2MCwgCisgICAgNjAxNjUsIDYwMTcwLCA2MDE3NCwgNjAxNzksIDYwMTg0LCA2MDE4OSwgNjAxOTUsIDYwMjAxLCA2MDIwNiwgNjAyMTAsIAorICAgIDYwMjE1LCA2MDIyMCwgNjAyMjQsIDYwMjI5LCA2MDIzNCwgNjAyMzksIDYwMjQzLCA2MDI0NiwgMzE2MzksIDYwMjUxLCAKKyAgICA2MDI1OSwgMTY2ODUsIDM2NjMsIDExMDE3LCA2MDI2NSwgNjAyNzUsIDYwMjkwLCAxMTAyMiwgNjAzMDEsIDYwMzA2LCAKKyAgICA2MDMxNywgNjAzMjksIDYwMzQxLCA2MDM1MywgMjY5NSwgNjAzNjUsIDYwMzcwLCA2MDM4MiwgNjAzODYsIDYwMzkyLCAKKyAgICA2MDM5OCwgNjA0MDMsIDE2NTIsIDEwNzgsIDYwNDEyLCA2MDQxNywgMzkzMDksIDYwNDIxLCA2MDQyNSwgNjA0MzAsIAorICAgIDYwNDM0LCAxNjc3MCwgNjA0MzksIDYwNDQyLCA2MDQ1MCwgNjA0NTgsIDE2NTYsIDExMDQ3LCAxMTA1MywgMTY2MSwgCisgICAgNjA0NjYsIDYwNDczLCA2MDQ3OCwgNjA0ODcsIDYwNDk3LCA2MDUwNCwgNjA1MDksIDYwNTE0LCAxNjY2LCA2MDUyMSwgCisgICAgNjA1MjYsIDE2ODg1LCA2MDUzMCwgNjA1MzUsIDYwNTQyLCA2MDU0OCwgNjA1NTIsIDYwNTYzLCA2MDU3MywgMTY5MDcsIAorICAgIDkyMzQsIDkyNDEsIDE2NzEsIDYwNTgwLCA2MDU4NiwgNjA1OTQsIDYwNjAxLCA2MDYwNywgNjA2MTQsIDYwNjI2LCA2MDYzMiwgCisgICAgNjA2MzcsIDYwNjQ5LCA2MDY2MCwgNjA2NjksIDYwNjc5LCAzNzQwLCAzMDgxMywgMzA4MjIsIDE2OTQ3LCAxNjc2LCAxNjgwLCAKKyAgICA2MDY4NywgNjA2OTgsIDYwNzAzLCAxNjgzLCA2MDcxMSwgNjA3MTYsIDE2OTk4LCA2MDcyOCwgNjA3MzQsIDYwNzM5LCAKKyAgICA2MDc0NywgMTY4OCwgNjA3NTIsIDYwNzU3LCA2MDc2NSwgNjA3NzMsIDYwNzgwLCA2MDc4OSwgNjA3OTcsIDYwODA2LCAKKyAgICAxNjkzLCA2MDgxMCwgMTY5OCwgNjA4MTUsIDYwODIyLCAxNzA3MiwgNjA4MzAsIDYwODM2LCA2MDg0MSwgNjA4NDksIAorICAgIDYwODU2LCA2MDg2NCwgMjI1NzQsIDYwODY5LCAxMTE4MiwgNjA4NzgsIDYwODg0LCA2MDg5MSwgNjA4OTgsIDYwOTA0LCAKKyAgICA2MDkxNCwgNjA5MjAsIDYwOTI1LCA2MDkzNiwgNjA5NDEsIDYwOTQ5LCAxMTE5MSwgMTExOTYsIDYwOTU3LCA2MDk2MywgCisgICAgNjA5NzEsIDM4MDUsIDE3MTE0LCAzOTM5NywgNjA5NzYsIDYwOTgyLCA2MDk4NywgNjA5OTUsIDYxMDAyLCAxMjAzNiwgCisgICAgNjEwMDcsIDYxMDEzLCAxNzA5LCA2MTAxOCwgNjEwMjEsIDExMzIsIDYxMDI3LCA2MTAzMiwgNjEwMzcsIDYxMDQzLCAKKyAgICA2MTA0OCwgNjEwNTMsIDYxMDU4LCA2MTA2MywgNjEwNjgsIDYxMDczLCAxNzE4LCA5LCA2MTA3OSwgNjEwODMsIDYxMDg4LCAKKyAgICA2MTA5MiwgNjEwOTYsIDYxMTAwLCAzMTg3OSwgNjExMDUsIDYxMTEwLCA2MTExNSwgNjExMTksIDYxMTIyLCA2MTEyNiwgCisgICAgNjExMzAsIDYxMTM1LCA2MTEzOSwgNjExNDQsIDYxMTQ4LCAzNDYxNiwgMzQ2MjEsIDM0NjI2LCA2MTE1MSwgNjExNTgsIAorICAgIDYxMTY0LCAzOTExOCwgNjExNzQsIDM0NjMyLCAzMjEzNywgMzE4OTQsIDMxOTAwLCAzNDY0OCwgMzE5MDYsIDYxMTc5LCAKKyAgICA2MTE4NCwgMzIxNzAsIDYxMTg4LCA2MTE5MSwgNjExOTUsIDYxMjAyLCA2MTIwNSwgNjEyMTAsIDYxMjE0LCA2MTIxOCwgCisgICAgNjEyMjEsIDYxMjMxLCA2MTI0MywgNjEyNTAsIDYxMjU2LCA2MTI2MywgMzM1NzMsIDYxMjY2LCA4NTQzLCA4NzcsIDYxMjY5LCAKKyAgICA2MTI3MywgNjEyNzgsIDM2OTAsIDYxMjgyLCA2MTI4NSwgMTM2MzIsIDYxMjkyLCA2MTI5OSwgNjEzMTIsIDYxMzIwLCAKKyAgICA2MTMyOSwgNjEzMzgsIDYxMzQzLCA2MTM1MywgNjEzNjYsIDYxMzc4LCA2MTM4NSwgNjEzOTAsIDYxMzk5LCA2MTQxMiwgCisgICAgMzYwNjAsIDYxNDMwLCA2MTQzNSwgNjE0NDIsIDYxNDQ4LCA2NTYsIDYxNDUzLCA2MTQ2MSwgNjE0NjgsIDI3MjcxLCA2MjcsIAorICAgIDYxNDc0LCA2MTQ4MCwgNjE0OTAsIDYxNDk2LCA2MTUwMSwgMzE5MjQsIDYwMDMsIDMxOTM4LCA2MTUwNSwgNjE1MTUsIAorICAgIDYxNTIwLCA2MTUzMCwgNjE1NDUsIDYxNTUxLCA2MTU1NywgMzE5NDgsIDYxNTYyLCAzMTA5NCwgNjE1NjYsIDYxNTcxLCAKKyAgICA2MTU3NiwgNjE1ODAsIDYxNTg1LCAxNjk1MCwgNjE1OTIsIDYxNTk3LCA2MTYwMSwgNjA0NCwgMzE5NzQsIDYxNjA1LCAKKyAgICA2MTYxMSwgMzEyLCA2MTYyMSwgNjE2MjgsIDYxNjM1LCA2MTY0MCwgNjE2NDksIDU4ODA2LCA2MTY1NSwgNjE2NjMsIAorICAgIDYxNjY3LCA2MTY3MSwgNjE2NzUsIDYxNjc5LCA2MTY4NCwgNjE2ODgsIDYxNjk0LCA2MTcwMiwgNjE3MDcsIDYxNzEyLCAKKyAgICA2MTcxNiwgNjE3MjEsIDYxNzI1LCA2MTcyOSwgNjE3MzUsIDYxNzQxLCA2MTc0NiwgNjE3NTAsIDMyMDk4LCA2MTc1NSwgCisgICAgMzIxMDQsIDMyMTEwLCA2MTc2MCwgNjE3NjYsIDYxNzczLCA2MTc3OCwgNjE3ODIsIDMxMTExLCAxNjYxMiwgNjE3ODUsIAorICAgIDYxNzg5LCA2MTc5NCwgNjE4MDEsIDYxODA3LCA2MTgxMSwgNjE4MTYsIDM4ODI4LCA2MTgyMiwgNjE4MjYsIDYxODMwLCAKKyAgICA2MTgzNSwgNjE4NDEsIDYxODQ3LCA2MTg1OSwgNjE4NjgsIDYxODc4LCA2MTg4NCwgNjE4OTEsIDYxODk2LCA2MTkwMSwgCisgICAgNjE5MDUsIDYxOTA4LCA2MTkxNCwgNjE5MjEsIDYxOTI2LCA2MTkzMSwgNjE5MzgsIDYxOTQ1LCA2MTk1MSwgNjE5NTYsIAorICAgIDYxOTYxLCA2MTk2OSwgMzIxMTUsIDI0MjMsIDYxOTc0LCA2MTk3OSwgNjE5ODUsIDYxOTkwLCA2MTk5NiwgNjIwMDEsIAorICAgIDYyMDA2LCA2MjAxMSwgNjIwMTcsIDMyMTM2LCA2MjAyMiwgNjIwMjgsIDYyMDM0LCA2MjA0MCwgMzIyMDAsIDYyMDQ1LCAKKyAgICA2MjA1MCwgNjIwNTUsIDMyMjExLCA2MjA2MCwgNjIwNjUsIDYyMDcwLCA2MjA3NiwgNjIwODIsIDMyMjE2LCA2MjA4NywgCisgICAgNjIwOTIsIDYyMDk3LCAzMjI3MSwgMzIyNzcsIDYyMTAyLCA2MjEwNywgMzIyODIsIDYyMTEyLCAyNzk1OCwgMzIzMDQsIAorICAgIDMyMzA4LCA2MjExNywgNjIwOTMsIDYyMTIxLCA2MjEyOSwgNjIxMzUsIDYyMTQzLCA2MjE1MCwgNjIxNTYsIDYyMTY2LCAKKyAgICA2MjE3MiwgNjIxNzksIDEwNjMxLCAzMjMyMiwgNjIxODUsIDYyMTk4LCA2MjIwNywgNjIyMTMsIDYyMjIyLCA2MjIyOCwgCisgICAgMjM1MTIsIDYyMjM1LCA2MjI0MiwgNjIyNTIsIDMyMjcyLCA2MjI1NSwgNjIyNjIsIDYyMjY3LCA2MjI3MSwgNjIyNzUsIAorICAgIDYyMjgwLCA2MTIwLCA2MjI4NCwgNjIyODksIDYyMjk0LCAzNDcxMCwgMzQ3MTUsIDYyMjk4LCAzNDcyOSwgNjIzMDMsIAorICAgIDM0NzM0LCA2MjMwOCwgNjIzMTQsIDM0NzQ2LCAzNDc1MiwgMzQ3NTgsIDYyMzE5LCA2MjMyNSwgMjI1MzksIDYyMzM2LCAKKyAgICA2MjMzOSwgNjIzNTEsIDYyMzU5LCAzMjM0NSwgNjIzNjMsIDYyMzcyLCA2MjM4MiwgNjIzOTEsIDMyMzU1LCA2MjM5NiwgCisgICAgNjI0MDMsIDYyNDEyLCA2MjQxOCwgNjI0MjYsIDYyNDMzLCA2MDk1LCA0Mzk3LCA2MjQzOCwgMzIyODMsIDYyNDQ0LCAKKyAgICA2MjQ0NywgNjI0NTMsIDYyNDYwLCA2MjQ2NSwgNjI0NzAsIDIzNDIyLCA2MjQ3NCwgNjI0ODAsIDYyNDg2LCA2MjQ5MSwgCisgICAgNjI0OTYsIDYyNTAwLCA2MjUwNiwgNjI1MTIsIDMzNDgzLCA4NjMsIDM1NzIzLCAzNjY0NCwgMzY2NTAsIDMyMzkxLCAKKyAgICA2MjUxNywgNjI1MjEsIDYyNTI1LCA2MjUyOCwgNjI1NDEsIDYyNTQ3LCA2MjU1MSwgNjI1NTQsIDYyNTU5LCAzMzc4NiwgCisgICAgNjI1NjMsIDMxMTE2LCAyMTI4NywgNjI1NjksIDYwMjQsIDYwMzIsIDkwNzUsIDYyNTcyLCA2MjU3NywgNjI1ODIsIDYyNTg3LCAKKyAgICA2MjU5MiwgNjI1OTcsIDYyNjAyLCA2MjYwNywgNjI2MTIsIDYyNjE3LCA2MjYyMywgNjI2MjgsIDYyNjMzLCA2MjYzOSwgCisgICAgNjI2NDQsIDYyNjQ5LCA2MjY1NCwgNjI2NTksIDYyNjY0LCA2MjY2OSwgNjI2NzUsIDYyNjgwLCA2MjY4NiwgNjI2OTEsIAorICAgIDYyNjk2LCA2MjcwMSwgNjI3MDYsIDYyNzExLCA2MjcxNiwgNjI3MjEsIDYyNzI2LCA2MjczMSwgNjI3MzYsIDYyNzQyLCAKKyAgICA2Mjc0NywgNjI3NTIsIDYyNzU3LCA2Mjc2MiwgNjI3NjcsIDYyNzcyLCA2Mjc3OCwgNjI3ODMsIDYyNzg4LCA2Mjc5MywgCisgICAgNjI3OTgsIDYyODAzLCA2MjgwOCwgNjI4MTMsIDYyODE4LCA2MjgyMywgNjI4MjksIDYyODM0LCA2MjgzOSwgNjI4NDQsIAorICAgIDYyODQ5LCA2Mjg1NSwgNjI4NjEsIDYyODY2LCA2Mjg3MiwgNjI4NzcsIDYyODgyLCA2Mjg4NywgNjI4OTIsIDYyODk3LCAKKyAgICAxNTEzLCAyNDUsIDYyOTAyLCA2MjkwNiwgNjI5MTAsIDYyOTE0LCAyNTEzMywgNjI5MTgsIDYyOTIyLCA2MjkyNywgNjI5MzEsIAorICAgIDYyOTM2LCA2Mjk0MCwgNjI5NDUsIDYyOTUwLCA2Mjk1NSwgNjI5NTksIDYyOTYzLCA2Mjk2OCwgNjI5NzIsIDEzMzY5LCAKKyAgICA2Mjk3NywgNjI5ODEsIDYyOTg4LCA2Mjk5OCwgMTUyMDYsIDYzMDA3LCA2MzAxNiwgNjMwMjAsIDYzMDI1LCA2MzAzMCwgCisgICAgNjMwMzQsIDI0OTI0LCAzMDE5LCA2MzAzOCwgNjMwNDQsIDE3MzYzLCA2MzA0OCwgNjMwNTcsIDYzMDY1LCA2MzA3MSwgCisgICAgNjMwODMsIDYzMDk1LCA2MzA5OSwgNjMxMDQsIDYzMTA4LCA2MzExNCwgNjMxMjAsIDYzMTI1LCA2MzEzNSwgNjMxNDUsIAorICAgIDYzMTUxLCA2MzE1NiwgNjMxNjAsIDYzMTY1LCA2MzE3MSwgNjMxODAsIDYzMTg5LCA2MzE5NywgMTU1NjAsIDYzMjAxLCAKKyAgICA2MzIxMCwgNjMyMTgsIDYzMjMwLCA2MzI0MSwgNjMyNTIsIDYzMjYxLCA2MzI2NSwgNjMyNzQsIDYzMjg0LCA2MzI5MiwgCisgICAgNjMyOTgsIDYzMzAzLCA2MzMwOSwgNjMzMTQsIDk4LCAzMDkyNSwgNjMzMjUsIDI2MjY2LCAyNjI3NiwgNjMzMzEsIDYzMzM4LCAKKyAgICA2MzM0NCwgNjMzNDgsIDYzMzU4LCA2MzM2OSwgNjMzNzcsIDYzMzg2LCA2MzM5MSwgNjMzOTYsIDYzNDAwLCAxNzMxNywgCisgICAgNjM0MDgsIDYzNDEyLCA2MzQxOCwgNjM0MjgsIDYzNDM1LCA2MzQ0MSwgMzQ4MDksIDYzNDQ3LCA2MzQ0OSwgNjM0NTIsIAorICAgIDYzNDU2LCA2MzQ2NiwgNjM0NzIsIDYzNDc5LCAxMzMxNSwgNjM0ODYsIDYzNDkyLCA2MzUwMSwgNjM1MTAsIDYzNTE2LCAKKyAgICA2MzUyMiwgNjM1MjgsIDYzNTMzLCA2MzU0MCwgNjM1NDcsIDYzNTUzLCA2MzU2NiwgNjM1NzUsIDYzNTg0LCA2MzU4OSwgCisgICAgNjM1OTMsIDYzNTk5LCA2MzYwNiwgNjM2MTMsIDYzNjIwLCA2MzYyNywgNjM2MzQsIDYzNjM5LCA2MzY0MywgNjM2NDcsIAorICAgIDYzNjUwLCA2MzY2MCwgNjM2NjQsIDYzNjc2LCA2MzY4NSwgNjM2ODksIDYzNjk0LCA2MzY5OCwgNjM3MDQsIDYzNzA5LCAKKyAgICA2MzcxNiwgNjM3MjUsIDYzNzMzLCA2Mzc0MSwgNjM3NDYsIDYzNzUwLCA2Mzc1NSwgNjM3NjAsIDYzNzcwLCA2Mzc3OCwgCisgICAgNjM3ODMsIDYzNzg3LCA2Mzc5MSwgNjM3OTcsIDYzODA5LCA2MzgxNywgNjM4MjcsIDYzODM0LCA2Mzg0MCwgNjM4NDUsIAorICAgIDYzODQ5LCA2Mzg1MywgNjM4NTcsIDYzODY2LCA2Mzg3NSwgNjM4ODQsIDYzODkwLCA2Mzg5NiwgNjM5MDIsIDYzOTA3LCAKKyAgICA2MzkxNCwgNjM5MjAsIDYzOTI4LCA2MzkzNSwgMTI0NjMsIDYzOTQxLCA2Mzk0NywgNjM5NTEsIDE0MjQ0LCA2Mzk1NSwgCisgICAgNjM5NjAsIDYzOTcwLCA2Mzk3OSwgNjM5ODUsIDYzOTkxLCA2Mzk5OSwgNjQwMDYsIDY0MDEwLCA2NDAxNCwgNjQwMjAsIAorICAgIDY0MDI4LCA2NDAzNSwgNjQwNDEsIDY0MDUyLCA2NDA1NiwgNjQwNjAsIDY0MDY0LCA2NDA2NywgNjQwNzMsIDY0MDc4LCAKKyAgICA2NDA4MiwgNjQwODYsIDY0MDk1LCA2NDEwMywgNjQxMTAsIDY0MTE2LCA2NDEyMywgMjQwNDYsIDM4ODcwLCA2NDEyOCwgCisgICAgNjQxMzYsIDY0MTQwLCA2NDE0NCwgNjQxNDcsIDY0MTU1LCA2NDE2MiwgNjQxNjgsIDY0MTc3LCA2NDE4NSwgNjQxOTEsIAorICAgIDY0MTk2LCA2NDIwMCwgNjQyMDUsIDY0MjA5LCA2NDIxMywgNjQyMTgsIDY0MjI3LCA2NDIzMSwgNjQyMzgsIDY0MjQ1LCAKKyAgICA2NDI1MSwgNjQyNTksIDY0MjY1LCA2NDI3NiwgNjQyODQsIDY0MjkwLCAyMjY2OSwgNjQyOTksIDY0MzA2LCA2NDMxMywgCisgICAgNjQzMjAsIDY0MzI3LCA2NDMzNCwgNDE5MDcsIDEzMTUzLCA2NDM0MSwgNjQzNDgsIDY0MzUzLCAzNDg0NSwgNjIxNywgCisgICAgNjQzNTksIDY0MzY0LCA2NDM2OSwgNjQzNzUsIDY0MzgxLCA2NDM4NywgNjQzOTIsIDY0Mzk3LCA2NDQwMiwgNjQ0MDcsIAorICAgIDY0NDEzLCA2NDQxOCwgNjQ0MjQsIDY0NDI5LCA2NDQzNSwgNjQ0NDAsIDY0NDQ1LCA2NDQ1MCwgNjQ0NTUsIDY0NDYwLCAKKyAgICA2NDQ2NSwgNjQ0NzAsIDY0NDc2LCA2NDQ4MSwgNjQ0ODcsIDY0NDkyLCA2NDQ5NywgNjQ1MDIsIDY0NTA3LCA2NDUxMiwgCisgICAgNjQ1MTcsIDY0NTIzLCA2NDUyOCwgNjQ1MzMsIDY0NTM4LCA2NDU0MywgNjQ1NDgsIDY0NTUzLCA2NDU1OCwgNjQ1NjMsIAorICAgIDY0NTY4LCA2NDU3MywgNjQ1NzksIDY0NTg0LCA2NDU4OSwgNjQ1OTQsIDY0NTk5LCA2NDYwNCwgNjQ2MDksIDY0NjE0LCAKKyAgICA2NDYxOSwgNjQ2MjUsIDY0NjMwLCA2NDYzNSwgNjQ2NDAsIDY0NjQ1LCA2NDY1MCwgNjQ2NTUsIDY0NjYwLCA2NDY2NSwgCisgICAgNjQ2NzAsIDY0Njc1LCA2NDY4MCwgNjQ2ODUsIDY0NjkxLCAxODM0LCAyMjQsIDM3NDQ2LCA2NDY5NiwgNjQ2OTksIDY0NzA0LCAKKyAgICA2NDcwOCwgNjQ3MTEsIDY0NzE2LCA2MzczNywgNjQ3MjcsIDY0NzM3LCA2NDc0NCwgNjQ3NjAsIDY0NzY5LCA2NDc3OSwgCisgICAgNjQ3ODksIDY0Nzk3LCA2NDgxMSwgNjQ4MTksIDY0ODIzLCA2NDgyNiwgNjQ4MzMsIDY0ODM5LCA2NDg1MCwgNjQ4NjIsIAorICAgIDY0ODczLCA2NDg4MiwgNjQ4ODksIDEyOTcsIDIzMzExLCA2NDg5OSwgMjU5MCwgNjQ5MDMsIDY0OTEyLCAxMTM4LCAxNzI5MCwgCisgICAgMzgwODMsIDY0OTIwLCA2NDkyOCwgNjQ5NDIsIDY0OTU1LCA2NDk1OSwgNjQ5NjQsIDY0OTY5LCA2NDk3NCwgNjQ5ODAsIAorICAgIDY0OTg2LCA2NDk5MSwgODUzNSwgNjQ5OTYsIDY1MDAwLCA2NTAwOCwgMTEwNDgsIDY1MDEzLCA2NTAxOSwgNjUwMjgsIAorICAgIDE3MjEsIDExMDYwLCA3MzYsIDY1MDMyLCA2NTA0MSwgNjUwNTEsIDI3MDMwLCA2NTA2MCwgNjUwNjYsIDE2ODYyLCA2NTA3MiwgCisgICAgNjUwNzYsIDM5NjQsIDExMzkxLCA2NTA4MiwgNjUwODksIDYwNjkzLCA2NTA5MywgNjUwOTcsIDM5ODgsIDE4OSwgMTQxNTksIAorICAgIDY1MTAzLCA2NTExNSwgNjUxMTksIDY1MTI1LCAyNzc1MSwgNjUxMjksIDExMzc5LCAyNzMwLCA0LCA2NTEzNCwgNjUxNDQsIAorICAgIDY1MTUwLCA2NTE2MSwgNjUxNjgsIDY1MTc0LCA2NTE4MCwgNjUxODgsIDY1MTk1LCA2NTIwMSwgNjUyMTEsIDY1MjIxLCAKKyAgICA2NTIzMSwgMjM0OTksIDEzMDksIDY1MjQwLCA2NTI0NCwgNjUyNDgsIDY1MjU0LCA2NTI1OCwgMjc1MywgMjc1OSwgODUzMiwgCisgICAgMjI2NCwgNjUyNjIsIDY1MjY2LCA2NTI3NSwgNjUyODMsIDY1Mjk0LCA2NTMwMiwgNjUzMTAsIDY1MzE2LCA2NTMyMSwgCisgICAgNjUzMzIsIDY1MzQzLCA2NTM1MSwgNjUzNTcsIDk2OTQsIDY1MzYyLCA2NTM3MCwgNjUzNzQsIDY1Mzc4LCA2NTM4MiwgCisgICAgNjUzOTQsIDI4MTM2LCA2NTQwMSwgNjU0MTEsIDY1NDE3LCA2NTQyMywgOTc5NiwgNjU0MzMsIDY1NDQ0LCA2NTQ1NCwgCisgICAgNjU0NjMsIDY1NDY3LCA2NTQ3NCwgMTE0MCwgMTE3MCwgNjU0ODQsIDY1NDg5LCA2NTQ5NywgNjU1MDUsIDY1NTE2LCAKKyAgICA2NTUyMywgNjU1MzcsIDE0MDg4LCAzOTMsIDY1NTQ3LCA2NTU1MSwgNjU1NTksIDY1NTY4LCA2NTU3NiwgNjU1ODIsIAorICAgIDY1NTk2LCA2NTYwMywgNjU2MDksIDY1NjE4LCA2NTYyNSwgNjU2MzUsIDY1NjQzLCAzODEyLCAxNTYsIDY1NjUxLCA2NTY2MiwgCisgICAgNjU2NjYsIDY1Njc4LCAyNzk0OSwgMTYxLCA2NTY4NCwgNjU2ODksIDY1NjkzLCA2NTcwMCwgNjU3MDYsIDY1NzE0LCAKKyAgICA2NTcyMSwgODgxOCwgNjU3MjgsIDY1NzM3LCA2NTc0NSwgMzg3OCwgNjU3NTgsIDgxOTksIDY1NzYyLCAyNzk4LCA0NDMsIAorICAgIDY1NzY3LCA2NTc4MCwgNjU3ODUsIDE4MzMsIDY1MCwgNjU3ODksIDM4OTUsIDY1Nzk3LCA2NTgwMywgNjU4MDcsIDkzMSwgCisgICAgNjU4MTcsIDY1ODI2LCA2NTgzMSwgMTQ5MjgsIDE0OTM1LCA0NTI2OSwgNjU4MzUsIDM4MjIsIDEzMDQxLCA2NTg0MywgCisgICAgNjU4NTAsIDIzNTU1LCA2NTg1NCwgNjU4NjEsIDY1ODY3LCA2NTg3MiwgNjU4NzcsIDE0OTQ4LCAzNzIsIDY1ODgyLCAKKyAgICA2NTg5NCwgNjU5MDAsIDY1OTA4LCAyODEwLCAxNzUzLCA2NTkxNiwgNjU5MTgsIDY1OTIzLCA2NTkyOCwgNjU5MzMsIAorICAgIDY1OTM5LCA2NTk0NCwgNjU5NDksIDY1OTU0LCA2NTk1OSwgNjU5NjQsIDY1OTY5LCA2NTk3NSwgNjU5ODAsIDY1OTg1LCAKKyAgICA2NTk5MCwgNjU5OTUsIDY2MDAwLCA2NjAwNSwgNjYwMTAsIDY2MDE1LCA2NjAyMSwgNjYwMjYsIDY2MDMxLCA2NjAzNiwgCisgICAgNjYwNDIsIDY2MDQ3LCA2NjA1MywgNjYwNTgsIDY2MDYzLCA2NjA2OCwgNjYwNzMsIDY2MDc4LCA2NjA4MywgNjYwODgsIAorICAgIDY2MDk0LCA2NjA5OSwgNjYxMDUsIDY2MTEwLCA2NjExNSwgNjYxMjAsIDY2MTI1LCA2NjEzMCwgNjYxMzUsIDY2MTQwLCAKKyAgICA2NjE0NSwgNjYxNTEsIDY2MTU2LCA2NjE2MSwgNjYxNjYsIDY2MTcwLCA2NjE3NCwgNjYxNzksIDY2MTgzLCA2NjE4OCwgCisgICAgNjYxOTMsIDY2MTk5LCA2NjIwNCwgNjYyMDgsIDY2MjEzLCA2NjIxNywgNjYyMjAsIDY2MjIyLCA2NjIyNiwgNjYyMjksIAorICAgIDY2MjM0LCA2NjIzOCwgNjYyNDIsIDY2MjQ2LCA2NjI1MCwgNjYyNTksIDY2MjYzLCAzMjU0OSwgNjYyNjYsIDMyNTU0LCAKKyAgICA2NjI3MywgNjYyNzgsIDMyNTU5LCA2NjI4NywgNjYyOTYsIDMyNTY1LCA2NjMwMSwgMzI1NzAsIDY2MzEwLCA2NjMxNSwgCisgICAgMTE1NzgsIDY2MzE5LCA2NjMyNCwgNjYzMjksIDMyNTc1LCA2NjMzMywgNDAyMjUsIDY2MzM3LCA2NjM0MCwgNjYzNDQsIAorICAgIDgyMTEsIDY2MzUwLCA2NjM1NSwgNjYzNTksIDM3MDUsIDMyNTgwLCA2NjM2MiwgNjYzNjYsIDY2MzY5LCA2NjM3NCwgCisgICAgNjYzNzgsIDY2Mzg0LCA2NjM5MiwgNjY0MDUsIDY2NDE0LCA2NjQyMCwgNjY0MjUsIDY2NDMxLCA2NjQzNSwgNjY0NDEsIAorICAgIDY2NDQ5LCA2NjQ1NCwgNjY0NTgsIDY2NDY1LCA2NjQ3MSwgNjY0NzksIDY2NDg4LCA2NjQ5NiwgMzI1ODMsIDY2NTAzLCAKKyAgICA2NjUxMywgNjY1MjIsIDY2NTM1LCA2NjU0MCwgNjY1NDUsIDY2NTU0LCA2NjU2MCwgNjY1NjcsIDY2NTc4LCA2NjU5MCwgCisgICAgNjY1OTcsIDY2NjA2LCA2NjYxNSwgNjY2MjQsIDY2NjMxLCA2NjYzNywgNjY2NDQsIDY2NjUyLCA2NjY1OSwgNjY2NjcsIAorICAgIDY2Njc2LCA2NjY4NCwgNjY2OTEsIDY2Njk5LCA2NjcwOCwgNjY3MTYsIDY2NzI1LCA2NjczNSwgNjY3NDQsIDY2NzUyLCAKKyAgICA2Njc1OSwgNjY3NjcsIDY2Nzc2LCA2Njc4NCwgNjY3OTMsIDY2ODAzLCA2NjgxMiwgNjY4MjAsIDY2ODI5LCA2NjgzOSwgCisgICAgNjY4NDgsIDY2ODU4LCA2Njg2OSwgNjY4NzksIDY2ODg4LCA2Njg5NiwgNjY5MDMsIDY2OTExLCA2NjkyMCwgNjY5MjgsIAorICAgIDY2OTM3LCA2Njk0NywgNjY5NTYsIDY2OTY0LCA2Njk3MywgNjY5ODMsIDY2OTkyLCA2NzAwMiwgNjcwMTMsIDY3MDIzLCAKKyAgICA2NzAzMiwgNjcwNDAsIDY3MDQ5LCA2NzA1OSwgNjcwNjgsIDY3MDc4LCA2NzA4OSwgNjcwOTksIDY3MTA4LCA2NzExOCwgCisgICAgNjcxMjksIDY3MTM5LCA2NzE1MCwgNjcxNjIsIDY3MTczLCA2NzE4MywgNjcxOTIsIDY3MjAwLCA2NzIwNywgNjcyMTUsIAorICAgIDY3MjI0LCA2NzIzMiwgNjcyNDEsIDY3MjUxLCA2NzI2MCwgNjcyNjgsIDY3Mjc3LCA2NzI4NywgNjcyOTYsIDY3MzA2LCAKKyAgICA2NzMxNywgNjczMjcsIDY3MzM2LCA2NzM0NCwgNjczNTMsIDY3MzYzLCA2NzM3MiwgNjczODIsIDY3MzkzLCA2NzQwMywgCisgICAgNjc0MTIsIDY3NDIyLCA2NzQzMywgNjc0NDMsIDY3NDU0LCA2NzQ2NiwgNjc0NzcsIDY3NDg3LCA2NzQ5NiwgNjc1MDQsIAorICAgIDY3NTEzLCA2NzUyMywgNjc1MzIsIDY3NTQyLCA2NzU1MywgNjc1NjMsIDY3NTcyLCA2NzU4MiwgNjc1OTMsIDY3NjAzLCAKKyAgICA2NzYxNCwgNjc2MjYsIDY3NjM3LCA2NzY0NywgNjc2NTYsIDY3NjY2LCA2NzY3NywgNjc2ODcsIDY3Njk4LCA2NzcxMCwgCisgICAgNjc3MjEsIDY3NzMxLCA2Nzc0MiwgNjc3NTQsIDY3NzY1LCA2Nzc3NywgNjc3OTAsIDY3ODAyLCA2NzgxMywgNjc4MjMsIAorICAgIDY3ODMyLCA2Nzg0MCwgNjc4NDcsIDY3ODU1LCA2Nzg2NCwgNjc4NzIsIDY3ODgxLCA2Nzg5MSwgNjc5MDAsIDY3OTA4LCAKKyAgICA2NzkxNywgNjc5MjcsIDY3OTM2LCA2Nzk0NiwgNjc5NTcsIDY3OTY3LCA2Nzk3NiwgNjc5ODQsIDY3OTkzLCA2ODAwMywgCisgICAgNjgwMTIsIDY4MDIyLCA2ODAzMywgNjgwNDMsIDY4MDUyLCA2ODA2MiwgNjgwNzMsIDY4MDgzLCA2ODA5NCwgNjgxMDYsIAorICAgIDY4MTE3LCA2ODEyNywgNjgxMzYsIDY4MTQ0LCA2ODE1MywgNjgxNjMsIDY4MTcyLCA2ODE4MiwgNjgxOTMsIDY4MjAzLCAKKyAgICA2ODIxMiwgNjgyMjIsIDY4MjMzLCA2ODI0MywgNjgyNTQsIDY4MjY2LCA2ODI3NywgNjgyODcsIDY4Mjk2LCA2ODMwNiwgCisgICAgNjgzMTcsIDY4MzI3LCA2ODMzOCwgNjgzNTAsIDY4MzYxLCA2ODM3MSwgNjgzODIsIDY4Mzk0LCA2ODQwNSwgNjg0MTcsIAorICAgIDY4NDMwLCA2ODQ0MiwgNjg0NTMsIDY4NDYzLCA2ODQ3MiwgNjg0ODAsIDY4NDg5LCA2ODQ5OSwgNjg1MDgsIDY4NTE4LCAKKyAgICA2ODUyOSwgNjg1MzksIDY4NTQ4LCA2ODU1OCwgNjg1NjksIDY4NTc5LCA2ODU5MCwgNjg2MDIsIDY4NjEzLCA2ODYyMywgCisgICAgNjg2MzIsIDY4NjQyLCA2ODY1MywgNjg2NjMsIDY4Njc0LCA2ODY4NiwgNjg2OTcsIDY4NzA3LCA2ODcxOCwgNjg3MzAsIAorICAgIDY4NzQxLCA2ODc1MywgNjg3NjYsIDY4Nzc4LCA2ODc4OSwgNjg3OTksIDY4ODA4LCA2ODgxOCwgNjg4MjksIDY4ODM5LCAKKyAgICA2ODg1MCwgNjg4NjIsIDY4ODczLCA2ODg4MywgNjg4OTQsIDY4OTA2LCA2ODkxNywgNjg5MjksIDY4OTQyLCA2ODk1NCwgCisgICAgNjg5NjUsIDY4OTc1LCA2ODk4NiwgNjg5OTgsIDY5MDA5LCA2OTAyMSwgNjkwMzQsIDY5MDQ2LCA2OTA1NywgNjkwNjksIAorICAgIDY5MDgyLCA2OTA5NCwgNjkxMDcsIDY5MTIxLCA2OTEzNCwgNjkxNDYsIDY5MTU3LCA2OTE2NywgNjkxNzYsIDY5MTg0LCAKKyAgICA2OTE5MSwgNjkxOTYsIDgwNTgsIDY5MjAzLCAzMjU5MywgNjkyMDgsIDY5MjEzLCAzMjU5OCwgNjkyMTksIDIwOTI5LCAKKyAgICAzMjYwMywgNjkyMjQsIDY5MjMwLCA2OTIzOCwgNjkyNDQsIDY5MjUwLCA2OTI1NywgNjkyNjQsIDY5MjY5LCA2OTI3MywgCisgICAgNjkyNzYsIDY5MjgwLCA2OTI4OSwgNjkyOTUsIDY5MzA3LCA2OTMxOCwgNjkzMjIsIDMwODEsIDgwMzMsIDY5MzI3LCAKKyAgICA2OTMzMCwgNjkzMzIsIDY5MzM2LCA2OTM0MCwgNjkzNDQsIDY5MzUwLCA2OTM1NSwgMjU5NDQsIDY5MzYwLCA2OTM2NCwgCisgICAgNjkzNjcsIDY5MzcyLCA2OTM3NiwgNjkzODMsIDY5Mzg5LCA2OTM5MywgNjE3MCwgNjkzOTcsIDMyNjIwLCA2OTQwMiwgCisgICAgNjk0MDksIDY5NDE4LCA2OTQyNiwgNjk0MzcsIDY5NDQ1LCA2OTQ1MywgNjk0NjAsIDY5NDY3LCA2OTQ3MywgNjk0ODQsIAorICAgIDMyNjI1LCA2OTQ4OSwgNjk1MDAsIDY5NTEyLCA2OTUyMCwgNjk1MzEsIDY5NTQwLCA2OTU1MSwgNjk1NTYsIDY5NTY0LCAKKyAgICAyNTU2LCA2OTU2OSwgMzQyOTUsIDY5NTgyLCA2OTU4NiwgNjk1OTgsIDY5NjA2LCA2OTYxMSwgNjk2MTksIDE3NDg1LCAKKyAgICA2OTYzMCwgNjk2MzYsIDY5NjQzLCA2OTY1MSwgNjk2NTcsIDMyNjM1LCA2OTY2MiwgMzkxNCwgNTgyNTQsIDY5NjY5LCAKKyAgICA2OTY3MiwgNjk2ODAsIDY5NjkzLCA2OTcwNiwgNjk3MTksIDY5NzMyLCA2OTczOSwgNjk3NTAsIDY5NzU5LCA0MTcyNCwgCisgICAgNDE3MjksIDY5NzY0LCA2OTc2OCwgNjk3NzYsIDY5NzgzLCA2OTc5MiwgNjk4MDAsIDY5ODA2LCA2OTgxNSwgNjk4MjMsIAorICAgIDY5ODMxLCA2OTgzNSwgNjk4NDQsIDY5ODUzLCA2OTg2MywgNjk4NzYsIDY5ODg5LCA2OTg5OSwgMzI2NDAsIDY5OTA1LCAKKyAgICA2OTkxMiwgNjk5MTgsIDMyNjQ2LCA2OTkyMywgNjk5MjYsIDY5OTMwLCA2OTkzOCwgNjk5NDcsIDQxNDYyLCA2OTk1NSwgCisgICAgNjk5NjQsIDY5OTcyLCA2OTk3OSwgNjk5ODcsIDY5OTk3LCA3MDAwNiwgNzAwMTUsIDcwMDI0LCA3MDAzMiwgNzAwNDMsIAorICAgIDcwMDUzLCA5MzY2LCAyMTU2NywgNzAwNjIsIDcwMDY3LCA3MDA3MiwgNzAwNzYsIDcwMDgwLCA3MDA4NSwgNzAwOTEsIAorICAgIDcwMDk2LCA3MDEwMSwgNzAxMDcsIDcwMTEyLCA3MDExNywgMjE1MzIsIDcwMTIyLCA3MDEyOSwgNzAxMzcsIDcwMTQ1LCAKKyAgICA3MDE1MCwgNzAxNTcsIDcwMTY0LCA3MDE2OSwgNzAxNzMsIDcwMTc3LCA3MDE4NSwgNzAxOTMsIDMyNjYzLCA3MDE5OSwgCisgICAgNzAyMDUsIDcwMjE3LCA3MDIyMywgNzAyMjcsIDcwMjM0LCA3MDIzOSwgNzAyNTAsIDcwMjYwLCA3MDI3MCwgNzAyODIsIAorICAgIDcwMjg4LCA3MDI5OCwgNzAzMDgsIDMyNjkwLCA3MDMxNywgNzAzMjYsIDcwMzMyLCA3MDM0NCwgNzAzNTUsIDcwMzYyLCAKKyAgICA3MDM2NywgNzAzNzEsIDcwMzc5LCA3MDM4NSwgNzAzOTAsIDcwMzk1LCA3MDQwMiwgNzA0MTAsIDcwNDIyLCA3MDQzMiwgCisgICAgNzA0NDEsIDcwNDUwLCA3MDQ1NywgMzQxNTcsIDIzODUxLCA3MDQ2MywgNzA0NjgsIDcwNDcyLCA3MDQ3NiwgNzA0ODEsIAorICAgIDcwNDg3LCA3MDQ5OCwgNzA1MTEsIDcwNTE2LCA3MDUyMywgMzI2OTUsIDcwNTI4LCA3MDU0MCwgNzA1NDksIDcwNTU5LCAKKyAgICA3MDU3MCwgNzA1ODMsIDcwNTkwLCA3MDU5OSwgNzA2MDgsIDcwNjE2LCA3MDYyMSwgNzA2MjcsIDEwNjksIDcwNjMyLCAKKyAgICA3MDYzNywgNzA2NDIsIDcwNjQ3LCA3MDY1MywgNzA2NTgsIDcwNjYzLCA3MDY2OSwgNzA2NzUsIDcwNjgwLCA3MDY4NCwgCisgICAgNzA2ODksIDcwNjk0LCA3MDY5OSwgNTg3NjYsIDcwNzA0LCA3MDcwOSwgNzA3MTQsIDcwNzE5LCA3MDcyNSwgNzA3MzEsIAorICAgIDcwNzM2LCA3MDc0MCwgNzA3NDUsIDcwNzUwLCA3MDc1NSwgNzA3NjEsIDcwNzY2LCA3MDc3MiwgNzA3NzcsIDcwNzgyLCAKKyAgICA3MDc4NywgNzA3OTIsIDcwNzk2LCA3MDgwMiwgNzA4MDcsIDcwODE2LCA3MDgyMSwgNzA4MjYsIDcwODMxLCA3MDgzNiwgCisgICAgNzA4NDAsIDcwODQ3LCA3MDg1MywgMTcxMzUsIDE3MTQyLCA3MDg1OCwgNzA4NjIsIDcwODY2LCA3MDg3MCwgNzA4NzQsIAorICAgIDQ1NTI0LCA3MDg3OCwgNzA4MDgsIDcwODgwLCA3MDg5MCwgMzI3MDQsIDcwODkzLCA3MDkwMiwgNzA5MDgsIDYxNDMsIAorICAgIDMyNzA5LCA3MDkxMiwgNzA5MTgsIDcwOTIzLCA3MDkyOSwgNzA5MzQsIDcwOTM4LCA3MDk0NSwgNzA5NTAsIDcwOTYwLCAKKyAgICA3MDk2OSwgNzA5NzMsIDcwOTc5LCA3MDk4NSwgNzA5OTEsIDcwOTk1LCA3MTAwMywgNzEwMTAsIDcxMDE4LCA3MTAyNiwgCisgICAgMzI3MTQsIDcxMDMzLCA3MTAzNiwgNzEwNDMsIDcxMDQ5LCA3MTA1NCwgNzEwNTgsIDcxMDY0LCA3MTA3MSwgNzEwNzYsIAorICAgIDcxMDgwLCA3MTA4OSwgNzEwOTcsIDcxMTAzLCA3MTEwOCwgMzI3MTksIDcxMTE1LCA3MTEyMiwgNzExMjgsIDcxMTMzLCAKKyAgICA3MTEzOSwgNzExNDYsIDcxMTUyLCAyMTI5NCwgMjc0NTUsIDcxMTU4LCA3MTE2MywgNzExNjksIDcxMTgxLCA3MDg0MSwgCisgICAgNzA4NDgsIDIxNDcwLCA3MTE5MSwgNzExOTYsIDcxMjAzLCA3MTIwOSwgNzEyMTYsIDcxMjIyLCA3MTIzMywgNzEyMzgsIAorICAgIDkxMTAsIDcxMjQ2LCA3MTI0OSwgNzEyNTUsIDcxMjU5LCA3MTI2MywgNzEyNjYsIDcxMjcyLCAzMjQ2OCwgNjE5NCwgOTY0LCAKKyAgICAxMzQxOSwgNzEyNzksIDcxMjg1LCA3MTI5MSwgNzEyOTcsIDcxMzAzLCA3MTMwOSwgNzEzMTUsIDcxMzIxLCA3MTMyNywgCisgICAgNzEzMzIsIDcxMzM3LCA3MTM0MiwgNzEzNDcsIDcxMzUyLCA3MTM1NywgNzEzNjIsIDcxMzY3LCA3MTM3MiwgNzEzNzcsIAorICAgIDcxMzgyLCA3MTM4NywgNzEzOTIsIDcxMzk4LCA3MTQwMywgNzE0MDgsIDcxNDE0LCA3MTQxOSwgNzE0MjQsIDcxNDMwLCAKKyAgICA3MTQzNiwgNzE0NDIsIDcxNDQ4LCA3MTQ1NCwgNzE0NjAsIDcxNDY2LCA3MTQ3MiwgNzE0NzgsIDcxNDgzLCA3MTQ4OCwgCisgICAgNzE0OTQsIDcxNDk5LCA3MTUwNCwgNzE1MTAsIDcxNTE1LCA3MTUyMCwgNzE1MjUsIDcxNTMwLCA3MTUzNSwgNzE1NDAsIAorICAgIDcxNTQ1LCA3MTU1MCwgNzE1NTUsIDcxNTYwLCA3MTU2NSwgNzE1NzAsIDcxNTc2LCA3MTU4MSwgNzE1ODYsIDcxNTkxLCAKKyAgICA3MTU5NywgNzE2MDIsIDcxNjA3LCA3MTYxMiwgNzE2MTcsIDcxNjIzLCA3MTYyOCwgNzE2MzMsIDcxNjM4LCA3MTY0MywgCisgICAgNzE2NDgsIDcxNjUzLCA3MTY1OCwgNzE2NjMsIDcxNjY4LCA3MTY3MywgNzE2NzgsIDcxNjgzLCA3MTY4OCwgNzE2OTMsIAorICAgIDcxNjk4LCA3MTcwMywgNzE3MDgsIDcxNzEzLCA3MTcxOCwgNzE3MjQsIDcxNzI5LCA3MTczNCwgNzE3MzksIDcxNzQ0LCAKKyAgICA3MTc0OSwgNzE3NTQsIDcxNzU5LCAxODY0LCAxNDIsIDcxNzY0LCA3MTc2OCwgNzE3NzIsIDcxNzc3LCA3MTc4NSwgNzE3ODksIAorICAgIDcxNzk2LCA3MTgwNCwgNzE4MDgsIDcxODIxLCA3MTgyOSwgNzE4MzMsIDcxODM2LCA3MTg0MSwgNzE4NDUsIDcxODUwLCAKKyAgICA3MTg1NCwgNzE4NjIsIDcxODY2LCAyMDkzNywgNzE4NzEsIDcxODc1LCA2MDk2NywgNzE4NzksIDcxODgyLCA3MTg5MCwgCisgICAgNzE4OTgsIDcxOTA2LCA3MTkxMSwgNzE5MTgsIDcxOTI0LCA3MTkzMCwgNzE5MzUsIDcxOTQyLCA3MTk0NywgNzE5NTUsIAorICAgIDY0OTQ3LCA3MTk2MiwgNzE5NjcsIDcxOTcyLCA3MTk3NiwgMTE2NDUsIDcxOTgwLCA3MTk4NSwgNzE5OTAsIDcxOTk0LCAKKyAgICA3MTk5NywgNzIwMDMsIDcyMDA3LCA3MjAxNywgNzIwMjYsIDcyMDI5LCA3MjAzMywgNzIwNDAsIDcyMDUzLCA3MjA1OSwgCisgICAgNzIwNjcsIDcyMDc4LCA3MjA4OSwgNzIxMDAsIDcyMTExLCA3MjEyMCwgNzIxMjYsIDcyMTM1LCA3MjE0MywgNzIxNTMsIAorICAgIDcyMTY2LCA3MjE3MywgNzIxODQsIDcyMTkwLCA3MjE5NSwgNzIyMDAsIDcyMjA2LCA3MjIxMiwgNzIyMjIsIDcyMjMxLCAKKyAgICA3MDUzMCwgNzIyMzksIDcyMjQ1LCA3MjI1MywgNzIyNTksIDcyMjY3LCA3MjI3MCwgNzIyNzQsIDcyMjc4LCA3MjI4MSwgCisgICAgNzIyODcsIDcyMjkzLCA3MjMwMSwgNzIzMTMsIDcyMzI1LCA3MjMzMiwgNzIzMzYsIDcyMzQ3LCA3MjM1NSwgNzIzNjIsIAorICAgIDcyMzc0LCA3MjM4MiwgNzIzOTAsIDcyMzk3LCA3MjQwMywgNzI0MTMsIDcyNDIyLCA3MjQyNywgNzI0MzcsIDcyNDQ2LCAKKyAgICA0MDc4OCwgNzI0NTMsIDcyNDU3LCA3MjQ2MiwgNzI0NzAsIDcyNDc3LCA3MjQ4MywgNzI0ODcsIDcyNDk3LCA3MjUwOCwgCisgICAgNzI1MTYsIDcyNTIzLCA3MjUzNSwgNzI1NDcsIDcyNTU2LCA2OTU3MiwgNzI1NjMsIDcyNTc0LCA3MjU4OCwgNzI1OTYsIAorICAgIDcyNjA2LCA3MjYxMywgNzI2MjEsIDcyNjMzLCA3MjY0MiwgNzI2NTAsIDcyNjYwLCA3MjY3MSwgNzI2ODMsIDcyNjkyLCAKKyAgICA3MjcwMiwgNzI3MDksIDcyNzE4LCA3MjczMywgNzI3NDEsIDcyNzUxLCA3Mjc2MCwgNzI3NjgsIDcyNzgxLCA3Mjc5NiwgCisgICAgNzI4MDAsIDcyODA5LCA3MjgyMSwgNzI4MzIsIDcyODQzLCA3Mjg1NCwgNzI4NjQsIDcyODc1LCA3Mjg4MywgNzI4ODksIAorICAgIDcyODk5LCA3MjkwNywgNzI5MTMsIDI5MDI4LCA3MjkxOCwgNzI5MjQsIDcyOTI5LCA3MjkzNiwgOTcwOCwgMTc1MDUsIAorICAgIDcyOTQyLCA3Mjk1MSwgNzI5NTYsIDcyOTYwLCA3Mjk2NywgNzI5NzMsIDcyOTc4LCA3Mjk4MywgNzI5OTEsIDcyOTk5LCAKKyAgICA3MzAwMywgNzMwMDYsIDczMDA5LCA3MzAxMSwgNzMwMTgsIDczMDI0LCA3MzAzNSwgNzMwNDAsIDczMDQ0LCA3MzA1MSwgCisgICAgNzMwNTcsIDczMDYyLCA3MzA3MCwgNjU0NDYsIDY1NDU2LCA3MzA3NiwgNzMwODMsIDczMDkzLCAxMDYxOCwgNzMxMDAsIAorICAgIDczMTA1LCAyOTIyNCwgNzMxMTQsIDczMTE5LCA3MzEyNiwgNzMxMzYsIDczMTQ0LCA3MzE1MiwgNzMxNjEsIDczMTY3LCAKKyAgICA3MzE3MywgNzMxODAsIDczMTg3LCA3MzE5MiwgNzMxOTYsIDczMjA0LCA3MzIwOSwgNzMyMTQsIDczMjIyLCA3MzIyOSwgCisgICAgNzMyMzQsIDczMjQwLCA3MzI0MywgNzMyNDcsIDczMjU2LCA3MTgxNiwgNzMyNjUsIDczMjY5LCA3MzI3NSwgNzMyODYsIAorICAgIDczMjk2LCAxNzUxNCwgNzMzMDcsIDczMzE1LCAxNzUyNiwgNzMzMjIsIDczMzI2LCA3MzMzNSwgMjczNDEsIDczMzQyLCAKKyAgICA3MzM0NiwgNzMzNTEsIDczMzY4LCA3MzM4MCwgMTA1NzYsIDczMzkyLCA3MzM5NywgNzM0MDIsIDczNDA3LCAyMTAxMCwgCisgICAgNzM0MTEsIDczNDE2LCA3MzQyMSwgNzM0MjcsIDczNDMyLCA1ODQ2LCAyMTAxNCwgNzM0MzcsIDczNDQyLCA3MzQ0OCwgCisgICAgNzM0NTUsIDczNDYwLCA3MzQ2NSwgNzM0NzEsIDczNDc3LCA3MzQ4MywgNzM0ODgsIDczNDk0LCA3MzQ5OCwgNzM1MTIsIAorICAgIDczNTIwLCA3MzUyOCwgNzM1MzQsIDczNTM5LCA3MzU0NiwgNzM1NTYsIDczNTY1LCA3MzU3MCwgNzM1NzUsIDczNTgzLCAKKyAgICA3MzU4OCwgNzM1OTQsIDczNTk5LCA3MzYwOCwgNTk4MjMsIDczNjEzLCA3MzYxNiwgNzM2MzQsIDczNjUzLCA3MzY2NiwgCisgICAgNzM2ODAsIDczNjk2LCA3MzcwMywgNzM3MTAsIDczNzE2LCA3MzcyMywgNzM3MjgsIDczNzM0LCA3Mzc0MCwgNzM3NDgsIAorICAgIDczNzU0LCA3Mzc1OSwgNzM3NjQsIDczNzgwLCAxMDU4OSwgNzM3OTQsIDczODAxLCA3MzgwOSwgNzM4MTUsIDczODE5LCAKKyAgICA3MzgyMiwgNzM4MjcsIDczODMyLCA3MzgzOSwgNzM4NDQsIDczODUzLCA3Mzg1OCwgNzM4NjQsIDczODczLCA3Mzg4MiwgCisgICAgNzM4ODcsIDczODkxLCA3Mzg5OSwgNzM5MDgsIDExNjc0LCA3MzkxNywgNzM5MjUsIDczOTMwLCA3MzkzNiwgMTE2ODUsIAorICAgIDczOTQxLCA3Mzk0NCwgNzM5NDksIDczOTU5LCA3Mzk2OCwgNzM5NzMsIDczOTc5LCA3Mzk4NCwgNzM5OTIsIDczOTk5LCAKKyAgICA3NDAxMCwgNzQwMjAsIDc0MDI1LCA2NDg3NSwgNzQwMzAsIDc0MDM2LCA3NDA0MSwgNzQwNDgsIDc0MDU3LCA3NDA2NSwgCisgICAgNzQwNzEsIDc0MDc3LCA3NDA4NCwgNzQwOTAsIDc0MDk0LCAxNjk2MCwgMzA1NSwgNzQwOTksIDc0MTAzLCA3NDEwNywgCisgICAgNzQxMTMsIDc0MTIyLCA3NDEyOCwgNzQxMzUsIDc0MTM5LCA3NDE2MCwgNzQxODIsIDc0MTk4LCA3NDIxNSwgNzQyMzQsIAorICAgIDc0MjQzLCA3NDI1MywgNzQyNjAsIDc0MjY3LCAyNzIyOCwgNzQyNzMsIDc0Mjc3LCA3NDI4NSwgNzQyOTcsIDc0MzAzLCAKKyAgICA3NDMxMSwgNzQzMTUsIDc0MzIzLCA3NDMzMCwgNzQzMzQsIDc0MzQwLCA3NDM0NiwgNzQzNTEsIDM1NjMsIDQxOTI0LCAKKyAgICA3NDM1NywgNzQzNjEsIDc0MzY1LCA3NDM2OSwgNzQzNzQsIDc0Mzc5LCA3NDM4NCwgNzQzOTAsIDc0Mzk2LCA3NDQwMiwgCisgICAgNzQ0MDksIDc0NDE1LCA3NDQyMiwgNzQ0MjgsIDc0NDM0LCA3NDQzOSwgNzQ0NDUsIDc0NDUwLCA3NDQ1NCwgNzQ0NTksIAorICAgIDc0NDYzLCA3NDQ2OCwgNDE5MzksIDc0NDcyLCA3NDQ3NywgNzQ0ODUsIDc0NDg5LCA3NDQ5NCwgNzQ1MDEsIDc0NTEwLCAKKyAgICA3NDUxNiwgNzQ1MjAsIDc0NTI3LCA3NDUzMSwgNzQ1MzQsIDc0NTQxLCA3NDU1MCwgNzQ1NTUsIDc0NTU5LCA3NDU2NywgCisgICAgNzQ1NzYsIDc0NTgwLCA3NDU4OCwgNzQ1OTQsIDc0NTk5LCA3NDYwNCwgNzQ2MTAsIDc0NjE2LCA3NDYyMSwgNzQ2MjUsIAorICAgIDc0NjMxLCA3NDYzNiwgNzQ2NDAsIDc0NjQ0LCA3NDY0NywgNzQ2NTIsIDc0NjYwLCA3NDY3MCwgNzQ2NzUsIDM5NDE2LCAKKyAgICA3NDY4MywgNzQ2OTUsIDc0Njk5LCA3NDcwNSwgNzQ3MTcsIDc0NzI4LCA3NDczNSwgNzQ3NDEsIDc0NzQ4LCA3NDc2MCwgCisgICAgNzQ3NjcsIDc0NzczLCAyMTA4OCwgNzQ3NzcsIDc0NzgzLCA3NDc5MCwgNzQ3OTYsIDc0ODAyLCA3NDgwNywgNzQ4MTIsIAorICAgIDc0ODE3LCA3NDgyNiwgNzAzMywgNzQ4MzEsIDE2NDI2LCA3NDgzNywgNzQ4NDEsIDc0ODQ1LCA3NDg0OSwgNzQ4NTcsIAorICAgIDc0ODY2LCA3NDg3MCwgNzQ4NzcsIDc0ODg2LCA3NDg5OSwgNzQ5MDUsIDc0NDY0LCAzMDA4OCwgNzQ5MTAsIDc0OTEyLCAKKyAgICA3NDkxNywgNzQ5MjIsIDc0OTI3LCA3NDkzMiwgNzQ5MzcsIDc0OTQyLCA3NDk0NywgNzQ5NTIsIDc0OTU3LCA3NDk2MiwgCisgICAgNzQ5NjcsIDc0OTcyLCA3NDk3NywgNzQ5ODIsIDc0OTg4LCA3NDk5MywgNzQ5OTgsIDc1MDAzLCA3NTAwOCwgNzUwMTMsIAorICAgIDc1MDE4LCA3NTAyMywgNzUwMjgsIDc1MDM0LCA3NTA0MCwgNzUwNDYsIDc1MDUxLCA3NTA1NiwgNzUwNjgsIDc1MDczLCAKKyAgICAxODcwLCA0NiwgNzUwNzgsIDc1MDgzLCAzMjc0NiwgNzUwODcsIDMyNzUxLCAzMjc1NiwgMzI3NjIsIDMyNzY3LCA3NTA5MSwgCisgICAgMzI3NzIsIDIyMDgzLCA3NTExMywgNzUxMTcsIDc1MTIxLCA3NTEyNiwgNzUxMzAsIDMyNzc2LCA3NTEzNCwgNzUxNDIsIAorICAgIDMyNzgxLCA3NTE0OSwgNzUxNTIsIDc1MTU3LCA3NTE2MSwgOTU0MywgNzUxNzAsIDMyNzg2LCAyMTk0NSwgNzUxNzMsIAorICAgIDc1MTc3LCAxNDI4LCA3NTE4MiwgMzI3OTcsIDc1MTg1LCA3NTE5MCwgMjU3MzcsIDI1NzQ3LCAzNTI1OCwgNzUxOTUsIAorICAgIDc1MjAwLCA3NTIwNSwgNzUyMTAsIDc1MjE2LCA3NTIyMSwgNzUyMzAsIDc1MjM1LCA3NTI0MiwgNzUyNDgsIDc1MjUzLCAKKyAgICA3NTI1OCwgNzUyNjMsIDc1MjczLCA3NTI4MiwgNzUyODcsIDc1Mjk1LCA3NTI5OSwgNzUzMDcsIDMyNjExLCAzNzMxNywgCisgICAgNzUzMTQsIDc1MzIwLCA3NTMyNSwgNzUzMzAsIDEyMDE2LCA3NTMzNSwgNzUzNDEsIDc1MzQ2LCA3NTM1MywgNzUzNTksIAorICAgIDc1MzY0LCA3NTM3MiwgNzUzODIsIDc1MzkyLCA3NTM5OCwgNzU0MDMsIDc1NDA5LCAxNzUzNiwgNzU0MTYsIDM2MDczLCAKKyAgICA3NTQyOSwgNzU0MzQsIDc1NDQwLCAzMDk5MywgNzU0NTMsIDc1NDU5LCA3NTQ2MywgNzU0NzIsIDc1NDc5LCA3NTQ4NSwgCisgICAgNzU0OTMsIDc1NTAyLCA3NTUwOSwgNzU1MTUsIDc1NTE4LCA3NTUyMiwgMjU4NzgsIDc1NTI2LCA3NTUzMywgNzU1MzksIAorICAgIDc1NTQ3LCA3NTU1MiwgMjM5OTQsIDc1NTU4LCA3NTU2MSwgNzU1NjksIDc1NTc3LCA3NTU5MSwgNzU1OTgsIDc1NjA0LCAKKyAgICA3NTYxMSwgNzU2MTcsIDMyODExLCA3NTYyMSwgNzU2MjgsIDc1NjM2LCA3NTY0NCwgNzU2NTAsIDMyODE2LCA3NTY1OCwgCisgICAgNzU2NjQsIDc1NjY5LCA3NTY3OSwgNzU2ODUsIDc1Njk0LCAzMDgzMCwgMzQ3MTYsIDc1NzAyLCA3NTcwNywgNzU3MTIsIAorICAgIDc1NzE2LCA3NTcyMSwgNzU3MjUsIDc1NzMzLCAxNDkyMCwgMzk0MjksIDc1NzM4LCA3NTc0MywgMzI4MjEsIDYyMjY5LCAKKyAgICA3NTc0NywgNzU3NTIsIDc1NzU2LCA3NTc2NSwgNzU3NzMsIDc1Nzc5LCA3NTc4NCwgNzU3OTAsIDc1Nzk3LCA3NTgwMywgCisgICAgNzU4MDgsIDc1ODEzLCA3NTgyMiwgNzU4MzQsIDc1ODQ5LCAzMzA4MywgNzU4NTUsIDE2NTQ1LCAzMjgyNSwgNzU4NTksIAorICAgIDc1ODY2LCAyNDEwNCwgNzU4NzIsIDc1ODc5LCA3NTg4OCwgNzU4OTUsIDc1OTA0LCA3NTkxMCwgNzU5MTUsIDc1OTIzLCAKKyAgICA3NTkyOSwgMzI4MzUsIDc1OTM0LCA3NTk0MywgNzQ3MjMsIDc1OTUyLCA3NTk1OSwgNzU5NjUsIDc1OTcxLCA3NTk4MSwgCisgICAgNzU5ODksIDc1OTk2LCA3NjAwMCwgMzI4NDAsIDc2MDAzLCAzMjg0NiwgMzI4NTIsIDc2MDA4LCA3NjAxNiwgNzYwMjQsIAorICAgIDc2MDM0LCA3NjA0MywgNzYwNTEsIDc2MDU4LCA3NjA2OCwgMzI4NTcsIDc2MDcyLCA3NjA3NCwgNzYwNzgsIDc2MDgzLCAKKyAgICA3NjA4NywgNzYwOTEsIDc2MDk3LCA3NjEwMiwgNzYxMDYsIDc2MTE3LCA3NjEyMiwgNzYxMjcsIDMwNjAsIDc2MTMxLCAKKyAgICA3NjEzOCwgNzYxNDIsIDc2MTUxLCA3NjE1OSwgNzYxNjYsIDc2MTcxLCA3NjE3NiwgNjIzMTUsIDc2MTgwLCA3NjE4MywgCisgICAgNzYxODksIDc2MTk3LCA3NjIwMywgNzYyMDcsIDc2MjEyLCA3NjIxOSwgNzYyMjQsIDc2MjMwLCAzNDc0NywgNzYyMzUsIAorICAgIDc2MjM4LCA3NjI0MywgNzYyNDcsIDc2MjUyLCA3NjI1NywgNzYyNjEsIDc2MjY5LCA3NjI3MywgMjU3NTYsIDI1NzY1LCAKKyAgICA3NjI3OSwgNzYyODUsIDc2MjkxLCA3NjI5NiwgNzYzMDAsIDc2MzAzLCA3NjMxMywgNzYzMjIsIDc2MzI3LCA3NjMzMywgCisgICAgNzYzNDAsIDc2MzQ2LCA3NjM1MCwgNzYzNTgsIDc2MzYzLCAzNDc1MywgNzYzNjcsIDc2Mzc1LCA3NjM4MSwgNzYzODgsIAorICAgIDc2MzkzLCA3NjM5NywgNzY0MDIsIDU4NDQwLCAzNDc1OSwgNzY0MDgsIDc2NDEzLCA3NjQxNywgNzY0MjIsIDc2NDI3LCAKKyAgICA3NjQzMiwgNzY0MzYsIDc2NDQxLCA3NjQ0NiwgNzY0NTIsIDc2NDU3LCA3NjQ2MiwgNzY0NjgsIDc2NDc0LCA3NjQ3OSwgCisgICAgNzY0ODMsIDc2NDg4LCA3NjQ5MywgNzY0OTgsIDc2NTAyLCAyNDEwMywgNzY1MDcsIDc2NTEyLCA3NjUxOCwgNzY1MjQsIAorICAgIDc2NTMwLCA3NjUzNSwgNzY1MzksIDc2NTQ0LCA3NjU0OSwgNzY1NTQsIDc2NTU4LCA3NjU2MywgNzY1NjgsIDc2NTczLCAKKyAgICA3NjU3OCwgNzY1ODIsIDMyODY1LCA3NjU5MCwgNzY1OTQsIDc2NjAyLCA3NjYxMCwgNzY2MjEsIDc2NjI2LCA3NjYzMCwgCisgICAgMjIzOTcsIDc2NjM1LCA3NjY0MSwgNzY2NTEsIDc2NjU4LCA3NjY2MywgNzY2NzIsIDc2Njc3LCA3NjY4MSwgNzY2ODYsIAorICAgIDc2Njk0LCA3NjcwMiwgNzY3MDksIDY1MTA5LCA3NjcxNSwgNzY3MjMsIDc2NzMwLCA3Njc0MSwgNzY3NDcsIDc2NzUxLCAKKyAgICA3Njc1NywgMzI4NzUsIDc2NzYwLCA3Njc2NywgNzY3NzUsIDc2NzgwLCAzOTYyMCwgNzY3ODQsIDc2Nzg5LCA3Njc5NiwgCisgICAgNzY4MDEsIDg5OTIsIDc2ODA1LCA3NjgxMywgNzY4MjAsIDc2ODI3LCA3NjgzMywgNzY4NDcsIDYzMzgxLCA3Njg1NSwgCisgICAgNzY4NjEsIDc2ODY1LCA3Njg2OCwgNzY4NzYsIDc2ODgzLCA3Njg4OCwgNzY5MDEsIDc2OTA4LCA3NjkxMiwgNzY5MTksIAorICAgIDc2OTI0LCA2MDg2MCwgNzY5MjksIDc2OTMyLCA3NjkzOSwgNzY5NDUsIDc2OTQ5LCA3Njk1NywgNzY5NjYsIDc2OTc2LCAKKyAgICA3Njk4NiwgNzY5OTUsIDc3MDAzLCA3NzAxNCwgNzcwMTksIDc3MDIzLCA3NzAyOCwgNzcwMzIsIDM1Mzg5LCA3NzA0MCwgCisgICAgMjEzNTcsIDM1Mzk4LCA3NzA0NSwgNzcwNTAsIDc3MDU1LCA3NzA2MCwgNzcwNjUsIDc3MDcwLCA3NzA3NSwgNzcwNzksIAorICAgIDc3MDg0LCA3NzA4OSwgNzcwOTQsIDc3MDk5LCA3NzEwNCwgNzcxMDksIDc3MTEzLCA3NzExOCwgNzcxMjMsIDc3MTI3LCAKKyAgICA3NzEzMSwgNzcxMzUsIDc3MTM5LCA3NzE0NCwgNzcxNDksIDc3MTUzLCA3NzE1OCwgNzcxNjIsIDc3MTY2LCA3NzE3MSwgCisgICAgNzcxNzYsIDc3MTgxLCA3NzE4NiwgNzcxOTAsIDc3MTk1LCA3NzIwMCwgNzcyMDQsIDc3MjA5LCA3NzIxNCwgNzcyMTksIAorICAgIDc3MjI0LCA3NzIyOSwgNzcyMzQsIDc3MjM5LCA3NzI0NCwgNzcyNDksIDc3MjU0LCA3NzI1OSwgNzcyNjQsIDc3MjY5LCAKKyAgICA3NzI3NCwgNzcyNzksIDc3Mjg0LCA3NzI4OSwgNzcyOTQsIDc3Mjk5LCA3NzMwNCwgNzczMDgsIDc3MzEzLCA3NzMxOCwgCisgICAgNzczMjMsIDc3MzI4LCA3NzMzMywgNzczMzgsIDc3MzQzLCA3NzM0OCwgNzczNTMsIDc3MzU4LCA3NzM2MywgNzczNjcsIAorICAgIDc3MzcyLCA3NzM3NiwgNzczODEsIDc3Mzg2LCA3NzM5MSwgNzczOTYsIDc3NDAxLCA3NzQwNiwgNzc0MTEsIDc3NDE2LCAKKyAgICA3NzQyMSwgNzc0MjUsIDc3NDI5LCA3NzQzNCwgNzc0MzksIDc3NDQzLCA3NzQ0OCwgNzc0NTMsIDc3NDU3LCA3NzQ2MiwgCisgICAgNzc0NjcsIDc3NDcyLCA3NzQ3NywgNzc0ODEsIDc3NDg2LCA3NzQ5MSwgNzc0OTUsIDc3NTAwLCA3NzUwNCwgNzc1MDgsIAorICAgIDc3NTEyLCA3NzUxNiwgNzc1MjEsIDc3NTI1LCA3NzUyOSwgNzc1MzMsIDc3NTM3LCA3NzU0MSwgNzc1NDUsIDc3NTQ5LCAKKyAgICA3NzU1MywgNzc1NTcsIDc3NTYyLCA3NzU2NywgNzc1NzIsIDc3NTc3LCA3NzU4MiwgNzc1ODcsIDc3NTkyLCA3NzU5NywgCisgICAgNzc2MDIsIDc3NjA3LCA3NzYxMSwgNzc2MTUsIDc3NjE5LCA3NzYyMywgNzc2MjcsIDc3NjMxLCA3NzYzNiwgNzc2NDAsIAorICAgIDc3NjQ1LCA3NzY0OSwgNzc2NTQsIDc3NjU5LCA3NzY2MywgNzc2NjcsIDc3NjcyLCA3NzY3NiwgNzc2ODAsIDc3Njg0LCAKKyAgICA3NzY4OCwgNzc2OTIsIDc3Njk2LCA3NzcwMCwgNzc3MDQsIDc3NzA4LCA3NzcxMiwgNzc3MTYsIDc3NzIwLCA3NzcyNCwgCisgICAgNzc3MjgsIDc3NzMzLCA3NzczOCwgNzc3NDIsIDc3NzQ2LCA3Nzc1MCwgNzc3NTQsIDc3NzU4LCA3Nzc2MiwgNzc3NjcsIAorICAgIDc3NzcxLCA3Nzc3NSwgNzc3NzksIDc3NzgzLCA3Nzc4NywgNzc3OTEsIDc3Nzk2LCA3NzgwMCwgNzc4MDUsIDc3ODA5LCAKICAgICA3NzgxMywgNzc4MTcsIDc3ODIxLCA3NzgyNSwgNzc4MjksIDc3ODMzLCA3NzgzNywgNzc4NDEsIDc3ODQ1LCA3Nzg0OSwgCi0gICAgNzc4NTMsIDc3ODU3LCA3Nzg2MiwgNzc4NjYsIDc3ODcwLCA3Nzg3NSwgNzc4ODAsIDc3ODg0LCA3Nzg4OCwgNzc4OTIsIAotICAgIDc3ODk2LCA3NzkwMCwgNzc5MDQsIDc3OTA4LCA3NzkxMiwgNzc5MTcsIDc3OTIxLCA3NzkyNiwgNzc5MzAsIDc3OTM1LCAKLSAgICA3NzkzOSwgNzc5NDQsIDc3OTQ4LCA3Nzk1NCwgNzc5NTksIDc3OTYzLCA3Nzk2OCwgNzc5NzIsIDc3OTc3LCA3Nzk4MSwgCi0gICAgNzc5ODYsIDc3OTkwLCA3Nzk5NSwgMTUyMSwgNzc5OTksIDI4MjQsIDE3NTksIDE3NjQsIDc4MDAzLCA3ODAwNywgMjgyOCwgCi0gICAgNzgwMTEsIDEzOTcsIDc4MDE2LCAxMzQyLCA3ODAyMCwgMjg0MCwgNzgwMjQsIDc4MDMxLCA3ODAzOCwgNzgwNTIsIDI4NDQsIAotICAgIDcxMzEsIDc4MDYxLCA3ODA2OSwgNzgwNzYsIDc4MDg3LCA3ODA5NiwgNzgxMDMsIDc4MTE1LCA3ODEyOCwgNzgxNDEsIAotICAgIDc4MTUyLCA3ODE1NywgNzgxNjQsIDc4MTc2LCA3ODE4MCwgMjg0OCwgMTE3NDAsIDc4MTkwLCA3ODE5NSwgNzgyMDQsIAotICAgIDc4MjE0LCAyODUyLCA3ODIxOSwgNzgyMjMsIDc4MjI4LCA3ODIzNSwgNzgyNDEsIDc4MjQ5LCA3ODI2MSwgMTM0NywgCi0gICAgMTMwMzUsIDc4MjcxLCA3ODI3NSwgNzgyODEsIDc4Mjk1LCA3ODMwNywgNzgzMTksIDc4MzI5LCA3ODMzOCwgNzgzNDcsIAotICAgIDc4MzU2LCA3ODM2NCwgNzgzNzUsIDc4MzgzLCA0MDUxLCA3ODM5MywgNzg0MDQsIDc4NDEzLCA3ODQxOSwgNzg0MzQsIAotICAgIDc4NDQxLCA3ODQ0NywgMzU0ODksIDc4NDUyLCAyODc2LCAxMzAzOSwgNzg0NTYsIDc4NDYzLCA4OTMwLCA3ODQ3MiwgMjg4MSwgCi0gICAgMzIzMzYsIDc4NDc4LCA2MDU3MiwgNzg0ODUsIDc4NDkxLCA3ODUwMiwgNzg1MDgsIDc4NTE1LCA3ODUyMSwgNzg1MjksIAotICAgIDc4NTM2LCA3ODU0MiwgNzg1NTIsIDc4NTYxLCA3ODU3MiwgNzg1NzksIDc4NTg1LCA3ODU5NSwgNzg2MDMsIDc4NjA5LCAKLSAgICA3ODYyNCwgNzg2MzAsIDc4NjM1LCA3ODY0MiwgNzg2NDUsIDc4NjUxLCA3ODY1OCwgNzg2NjQsIDc4NjcyLCA3ODY4MSwgCi0gICAgNzg2ODksIDc4Njk1LCA3ODcwNCwgNDE0MjcsIDc4NzE4LCA3ODcyMywgNzg3MjksIDE0NzQ0LCA3ODczNCwgNzg3NDcsIAotICAgIDc4NzU2LCA3ODc2NCwgNzg3NzEsIDc4Nzc1LCA3ODc3OSwgNzg3ODIsIDc4Nzg5LCA3ODc5NiwgNzg4MDQsIDc4ODEyLCAKLSAgICA3ODgyMSwgNzg4MjksIDE0NjcxLCA3ODgzNywgNzg4NDIsIDc4ODQ2LCA3ODg1OCwgNzg4NjUsIDc4ODc0LCA3NDgsIAotICAgIDc4ODg0LCA3ODg5MywgNzg5MDQsIDI4OTcsIDc4OTA4LCA3ODkxMiwgNzg5MTgsIDc4OTMxLCA3ODk0MywgNzg5NTMsIAotICAgIDc4OTYyLCA3ODk3NCwgMjYzNTIsIDc4OTg1LCA3ODk5MywgNzkwMDIsIDc5MDEzLCA3OTAyNCwgNzkwMzQsIDc5MDQ0LCAKLSAgICA3OTA1MywgNzkwNjEsIDExMzA1LCA3OTA2OCwgNzkwNzIsIDc5MDc1LCA3OTA4MCwgNzkwODUsIDc5MDg5LCA3OTA5NSwgCi0gICAgMTM1MiwgMTE4MTEsIDc5MTAyLCA3OTExMywgNzkxMjIsIDc5MTMwLCA3OTEzOSwgNzkxNDcsIDc5MTYzLCA3OTE3NCwgCi0gICAgNzkxODMsIDc5MTkxLCA3OTIwMywgNzkyMTQsIDc5MjMwLCA3OTI0MCwgNzkyNjEsIDc5Mjc0LCA3OTI4MiwgNzkyODksIAotICAgIDE0ODU1LCA3OTMwMiwgNzkzMDcsIDc5MzEzLCA1OTA4LCA3OTMxOSwgNzkzMjIsIDc5MzI5LCA3OTMzOSwgODE3NiwgCi0gICAgNzkzNDYsIDc5MzUxLCA3OTM1NiwgNzkzNjEsIDc5MzY5LCA3OTM3OCwgNzkzODYsIDk3NDksIDk3NTgsIDc5MzkxLCAKLSAgICA3OTQwMiwgNzk0MDcsIDc5NDEzLCAyOTEzLCAyOTE4LCA3OTQxOSwgMTA4NzIsIDc5NDI1LCA3OTQzMiwgNzk0MzksIAotICAgIDc5NDUyLCAyMjUxLCA2OCwgNzk0NTcsIDc5NDYyLCA3OTQ3MiwgNzk0NzgsIDc5NDg3LCA3OTQ5NSwgNzk1MDUsIDc5NTA5LCAKLSAgICA3OTUxNCwgNzk1MTgsIDc5NTMwLCAyOTQxLCA3OTUzOCwgNzk1NDYsIDc5NTUxLCA3OTU2MiwgNzk1NzMsIDc5NTgyLCAKLSAgICA3OTU4NywgNzk1OTMsIDc5NTk4LCA3OTYwOCwgNzk2MTgsIDc5NjIzLCA3OTYyOSwgNzk2MzQsIDc5NjQzLCAyMTM5NywgCi0gICAgNzk2NDcsIDQxMjgsIDIwLCA3OTY1MiwgNzk2NjEsIDc5NjY4LCA3OTY3NSwgNzk2ODEsIDc5Njg3LCA4NjQsIDc5NjkyLCAKLSAgICA3OTY5NywgNjA5MDAsIDc5NzAyLCA3OTcwNywgNzk3MTMsIDc5NzE5LCA3OTcyNywgNzk3MzIsIDc5NzM5LCA3OTc0NSwgCi0gICAgNzk3NTAsIDM4MDAxLCA0MTMyMSwgNzk3NTYsIDI5NDUsIDMyLCA3OTc2NiwgNzk3NzksIDc5Nzg0LCA3OTc5MiwgNzk3OTcsIAotICAgIDc5ODAzLCAyOTY3LCAyODI4OSwgNzk4MDgsIDc5ODE2LCA3OTgyMywgNzk4MjgsIDU4NjQ1LCA2MTkwMywgNzk4MzcsIAotICAgIDc5ODQxLCAxNzA0LCAxODEzLCA3OTg0NiwgNzk4NTEsIDc5ODU4LCAxODE3LCAyNDcsIDc5ODY1LCA3OTg3MSwgMjk4OSwgCi0gICAgNzk4NzYsIDc5ODgxLCA3OTg4OCwgMTgyMSwgNzk4OTMsIDc5ODk5LCA3OTkwNCwgNzk5MTYsIDYxMTksIDc5OTI2LCAxODI4LCAKLSAgICA3OTkzMiwgNzk5MzcsIDc5OTQ0LCA3OTk1MSwgNzk5NjYsIDc5OTczLCA3OTk4NCwgNzk5OTIsIDI2MTgsIDc5OTk2LCAKLSAgICA4MDAwOCwgODAwMTMsIDgwMDE3LCA4MDAyMywgMjgxMTQsIDIyNTYsIDgwMDI3LCA4MDAzOCwgODAwNDIsIDgwMDQ2LCAKLSAgICA4MDA1MiwgODAwNTYsIDgwMDY1LCA4MDA2OSwgODAwODAsIDgwMDg0LCAyMzAyLCAzMjE2NSwgODAwODgsIDgwMDk4LCAKLSAgICAzMDgwLCA5MzY0LCA4MDEwNiwgODAxMTEsIDgwMTE1LCA4MDEyNCwgODAxMzEsIDgwMTM3LCAzMDUwLCAxNzEzOSwgODAxNDEsIAotICAgIDgwMTU0LCA4MDE3MiwgODAxNzcsIDgwMTg1LCA4MDE5MywgODAyMDMsIDk5NzgsIDEzMTQ3LCA4MDIxNSwgODAyMjgsIAotICAgIDgwMjM1LCA4MDI0MiwgODAyNTgsIDgwMjY1LCA4MDI3MSwgMTA5NSwgODAyNzgsIDgwMjg1LCA4MDI5NSwgODAzMDQsIAotICAgIDgwMzE2LCA0MjI5MSwgODAzMjQsIDMwNjQsIDEyMDIzLCA4MDMyNywgODAzMzUsIDgwMzM5LCA3ODIzMSwgMzA2OCwgCi0gICAgODAzNDMsIDIxMTc4LCAxMjAzOSwgMzc1NiwgODAzNDcsIDMwNzQsIDgwMzUxLCA4MDM2MSwgODAzNjcsIDgwMzczLCAKLSAgICA4MDM3OSwgODAzODUsIDgwMzkxLCA4MDM5NywgODA0MDMsIDgwNDA5LCA4MDQxNSwgODA0MjEsIDgwNDI3LCA4MDQzMywgCi0gICAgODA0MzksIDgwNDQ1LCA4MDQ1MSwgODA0NTcsIDgwNDYzLCA4MDQ2OSwgODA0NzUsIDgwNDgxLCA4MDQ4NywgODA0OTMsIAotICAgIDgwNDk5LCA4MDUwNSwgODA1MTEsIDgwNTE4LCA4MDUyNSwgODA1MzEsIDgwNTM3LCA4MDU0MywgODA1NDksIDgwNTU1LCAKLSAgICA4MDU2MSwgMTM1NywgMTYwNDksIDEyMDYxLCA4MDU2NywgODA1NzIsIDgwNTc3LCA4MDU4MiwgODA1ODcsIDgwNTkyLCAKLSAgICA4MDU5NywgODA2MDIsIDgwNjA3LCA4MDYxMiwgODA2MTcsIDgwNjIyLCA4MDYyNywgODA2MzIsIDgwNjM3LCA4MDY0MiwgCi0gICAgODA2NDcsIDgwNjUyLCA4MDY1NywgODA2NjIsIDgwNjY3LCA4MDY3MiwgODA2NzcsIDgwNjgyLCA4MDY4NywgODA2OTIsIAotICAgIDgwNjk4LCA4MDcwMywgODA3MDgsIDgwNzE0LCA4MDcxOSwgODA3MjUsIDgwNzMwLCA4MDczNSwgODA3NDEsIDgwNzQ2LCAKLSAgICA4MDc1MSwgODA3NTYsIDgwNzYxLCA4MDc2NiwgODA3NzEsIDgwNzc2LCA4MDc4MSwgODAzNjIsIDgwMzY4LCA4MDM3NCwgCi0gICAgODAzODAsIDgwMzg2LCA4MDM5MiwgODAzOTgsIDgwNDA0LCA4MDQxMCwgODA0MTYsIDgwNDIyLCA4MDQyOCwgODA0MzQsIAotICAgIDgwNDQwLCA4MDQ0NiwgODA3ODcsIDgwNDUyLCA4MDQ1OCwgODA0NjQsIDgwNzkzLCA4MDQ3MCwgODA0NzYsIDgwNDgyLCAKLSAgICA4MDQ4OCwgODA0OTQsIDgwNTAwLCA4MDUwNiwgODA1MjYsIDgwNzk5LCA4MDgwNSwgODA1MzIsIDgwODExLCA4MDUzOCwgCi0gICAgODA1NDQsIDgwNTUwLCA4MDU1NiwgODA1NjIsIDMwOTEsIDMwOTYsIDgwODE3LCA4MDgyMiwgODA4MjUsIDgwODMxLCAKLSAgICA4MDgzNywgODA4NDQsIDgwODQ5LCA4MDg1NCwgMjMwNywgCisgICAgNzc4NTQsIDc3ODU4LCA3Nzg2MiwgNzc4NjYsIDc3ODcwLCA3Nzg3NCwgNzc4NzgsIDc3ODgyLCA3Nzg4NiwgNzc4OTAsIAorICAgIDc3ODk0LCA3Nzg5OCwgNzc5MDMsIDc3OTA3LCA3NzkxMSwgNzc5MTYsIDc3OTIxLCA3NzkyNSwgNzc5MjksIDc3OTMzLCAKKyAgICA3NzkzNywgNzc5NDEsIDc3OTQ1LCA3Nzk0OSwgNzc5NTMsIDc3OTU4LCA3Nzk2MiwgNzc5NjcsIDc3OTcxLCA3Nzk3NiwgCisgICAgNzc5ODAsIDc3OTg1LCA3Nzk4OSwgNzc5OTUsIDc4MDAwLCA3ODAwNCwgNzgwMDksIDc4MDEzLCA3ODAxOCwgNzgwMjIsIAorICAgIDc4MDI3LCA3ODAzMSwgNzgwMzYsIDE1MjEsIDc4MDQwLCAyODI0LCAxNzU5LCAxNzY0LCA3ODA0NCwgNzgwNDgsIDI4MjgsIAorICAgIDc4MDUyLCAxMzk3LCA3ODA1NywgMTM0MiwgNzgwNjEsIDI4NDAsIDc4MDY1LCA3ODA3MiwgNzgwNzksIDc4MDkzLCAyODQ0LCAKKyAgICA3MTMxLCA3ODEwMiwgNzgxMTAsIDc4MTE3LCA3ODEyOCwgNzgxMzcsIDc4MTQ0LCA3ODE1NiwgNzgxNjksIDc4MTgyLCAKKyAgICA3ODE5MywgNzgxOTgsIDc4MjA1LCA3ODIxNywgNzgyMjEsIDI4NDgsIDExNzQ3LCA3ODIzMSwgNzgyMzYsIDc4MjQ1LCAKKyAgICA3ODI1NSwgMjg1MiwgNzgyNjAsIDc4MjY0LCA3ODI2OSwgNzgyNzYsIDc4MjgyLCA3ODI5MCwgNzgzMDIsIDEzNDcsIAorICAgIDEzMDQyLCA3ODMxMiwgNzgzMTYsIDc4MzIyLCA3ODMzNiwgNzgzNDgsIDc4MzYwLCA3ODM3MCwgNzgzNzksIDc4Mzg4LCAKKyAgICA3ODM5NywgNzg0MDUsIDc4NDE2LCA3ODQyNCwgNDA1MSwgNzg0MzQsIDc4NDQ1LCA3ODQ1NCwgNzg0NjAsIDc4NDc1LCAKKyAgICA3ODQ4MiwgNzg0ODgsIDM1NTE0LCA3ODQ5MywgMjg3NiwgMTMwNDYsIDc4NDk3LCA3ODUwNCwgODkzMCwgNzg1MTMsIDI4ODEsIAorICAgIDMyMzYxLCA3ODUxOSwgNjA2MDksIDc4NTI2LCA3ODUzMiwgNzg1NDMsIDc4NTQ5LCA3ODU1NiwgNzg1NjIsIDc4NTcwLCAKKyAgICA3ODU3NywgNzg1ODMsIDc4NTkzLCA3ODYwMiwgNzg2MTMsIDc4NjIwLCA3ODYyNiwgNzg2MzYsIDc4NjQ0LCA3ODY1MCwgCisgICAgNzg2NjUsIDc4NjcxLCA3ODY3NiwgNzg2ODMsIDc4Njg2LCA3ODY5MiwgNzg2OTksIDc4NzA1LCA3ODcxMywgNzg3MjIsIAorICAgIDc4NzMwLCA3ODczNiwgNzg3NDUsIDQxNDY0LCA3ODc1OSwgNzg3NjQsIDc4NzcwLCAxNDc1NywgNzg3NzUsIDc4Nzg4LCAKKyAgICA3ODc5NywgNzg4MDUsIDc4ODEyLCA3ODgxNiwgNzg4MjAsIDc4ODIzLCA3ODgzMCwgNzg4MzcsIDc4ODQ1LCA3ODg1MywgCisgICAgNzg4NjIsIDc4ODcwLCAxNDY4NCwgNzg4NzgsIDc4ODgzLCA3ODg4NywgNzg4OTksIDc4OTA2LCA3ODkxNSwgNzQ4LCAKKyAgICA3ODkyNSwgNzg5MzQsIDc4OTQ1LCAyODk3LCA3ODk0OSwgNzg5NTMsIDc4OTU5LCA3ODk3MiwgNzg5ODQsIDc4OTk0LCAKKyAgICA3OTAwMywgNzkwMTUsIDI2MzY5LCA3OTAyNiwgNzkwMzQsIDc5MDQzLCA3OTA1NCwgNzkwNjUsIDc5MDc1LCA3OTA4NSwgCisgICAgNzkwOTQsIDc5MTAyLCAxMTMxMiwgNzkxMDksIDc5MTEzLCA3OTExNiwgNzkxMjEsIDc5MTI2LCA3OTEzMCwgNzkxMzYsIAorICAgIDEzNTIsIDExODE4LCA3OTE0MywgNzkxNTQsIDc5MTYzLCA3OTE3MSwgNzkxODAsIDc5MTg4LCA3OTIwNCwgNzkyMTUsIAorICAgIDc5MjI0LCA3OTIzMiwgNzkyNDQsIDc5MjU1LCA3OTI3MSwgNzkyODEsIDc5MzAyLCA3OTMxNSwgNzkzMjMsIDc5MzMwLCAKKyAgICAxNDg2OCwgNzkzNDMsIDc5MzQ4LCA3OTM1NCwgNTkwOCwgNzkzNjAsIDc5MzYzLCA3OTM3MCwgNzkzODAsIDgxNzYsIAorICAgIDc5Mzg3LCA3OTM5MiwgNzkzOTcsIDc5NDAyLCA3OTQxMCwgNzk0MTksIDc5NDI3LCA5NzU2LCA5NzY1LCA3OTQzMiwgCisgICAgNzk0NDMsIDc5NDQ4LCA3OTQ1NCwgMjkxMywgMjkxOCwgNzk0NjAsIDEwODc5LCA3OTQ2NiwgNzk0NzMsIDc5NDgwLCAKKyAgICA3OTQ5MywgMjI1MSwgNjgsIDc5NDk4LCA3OTUwMywgNzk1MTMsIDc5NTE5LCA3OTUyOCwgNzk1MzYsIDc5NTQ2LCA3OTU1MCwgCisgICAgNzk1NTUsIDc5NTU5LCA3OTU3MSwgMjk0MSwgNzk1NzksIDc5NTg3LCA3OTU5MiwgNzk2MDMsIDc5NjE0LCA3OTYyMywgCisgICAgNzk2MjgsIDc5NjM0LCA3OTYzOSwgNzk2NDksIDc5NjU5LCA3OTY2NCwgNzk2NzAsIDc5Njc0LCA3OTY3OSwgNzk2ODgsIAorICAgIDIxNDEwLCA3OTY5MiwgNDEyOCwgMjAsIDc5Njk3LCA3OTcwNiwgNzk3MTMsIDc5NzIwLCA3OTcyNiwgNzk3MzIsIDg2NCwgCisgICAgNzk3MzcsIDc5NzQyLCA2MDkzNywgNzk3NDcsIDc5NzUyLCA3OTc1OCwgNzk3NjQsIDc5NzcyLCA3OTc3NywgNzk3ODQsIAorICAgIDc5NzkwLCA3OTc5NSwgMzgwMzAsIDQxMzU4LCA3OTgwMSwgMjk0NSwgMzIsIDc5ODExLCA3OTgyNCwgNzk4MjksIDc5ODM3LCAKKyAgICA3OTg0MiwgNzk4NDgsIDI5NjcsIDI4MzEwLCA3OTg1MywgNzk4NjEsIDc5ODY4LCA3OTg3MywgNTg2ODIsIDYxOTQwLCAKKyAgICA3OTg4MiwgNzk4ODYsIDE3MDQsIDE4MTMsIDc5ODkxLCA3OTg5NiwgNzk5MDMsIDE4MTcsIDI0NywgNzk5MTAsIDc5OTE2LCAKKyAgICAyOTg5LCA3OTkyMSwgNzk5MjYsIDc5OTMzLCAxODIxLCA3OTkzOCwgNzk5NDQsIDc5OTQ5LCA3OTk2MSwgNjExOSwgNzk5NzEsIAorICAgIDE4MjgsIDc5OTc3LCA3OTk4MiwgNzk5ODksIDc5OTk2LCA4MDAxMSwgODAwMTgsIDgwMDI5LCA4MDAzNywgMjYxOCwgCisgICAgODAwNDEsIDgwMDUzLCA4MDA1OCwgODAwNjIsIDgwMDY4LCAyODEzNSwgMjI1NiwgODAwNzIsIDgwMDgzLCA4MDA4NywgCisgICAgODAwOTEsIDgwMDk3LCA4MDEwMSwgODAxMTAsIDgwMTE0LCA4MDEyNSwgODAxMjksIDIzMDIsIDMyMTkwLCA4MDEzMywgCisgICAgODAxNDMsIDMwODAsIDkzNzEsIDgwMTUxLCA4MDE1NiwgODAxNjAsIDgwMTY5LCA4MDE3NiwgODAxODIsIDMwNTAsIDE3MTUyLCAKKyAgICA4MDE4NiwgODAxOTksIDgwMjE3LCA4MDIyMiwgODAyMzAsIDgwMjM4LCA4MDI0OCwgOTk4NSwgMTMxNTQsIDgwMjYwLCAKKyAgICA4MDI3MywgODAyODAsIDgwMjg3LCA4MDMwMywgODAzMTAsIDgwMzE2LCAxMDY0LCA4MDMyMywgODAzMzAsIDgwMzQwLCAKKyAgICA4MDM0OSwgODAzNjEsIDQyMzI4LCA4MDM2OSwgMzA2NCwgMTIwMzAsIDgwMzcyLCA4MDM4MCwgODAzODQsIDc4MjcyLCAKKyAgICAzMDY4LCA4MDM4OCwgMjExOTEsIDEyMDQ2LCAzNzU2LCA4MDM5MiwgMzA3NCwgODAzOTYsIDgwNDA2LCA4MDQxMiwgODA0MTgsIAorICAgIDgwNDI0LCA4MDQzMCwgODA0MzYsIDgwNDQyLCA4MDQ0OCwgODA0NTQsIDgwNDYwLCA4MDQ2NiwgODA0NzIsIDgwNDc4LCAKKyAgICA4MDQ4NCwgODA0OTAsIDgwNDk2LCA4MDUwMiwgODA1MDgsIDgwNTE0LCA4MDUyMCwgODA1MjYsIDgwNTMyLCA4MDUzOCwgCisgICAgODA1NDQsIDgwNTUwLCA4MDU1NiwgODA1NjMsIDgwNTcwLCA4MDU3NiwgODA1ODIsIDgwNTg4LCA4MDU5NCwgODA2MDAsIAorICAgIDgwNjA2LCAxMzU3LCAxNjA2MiwgMTIwNjgsIDgwNjEyLCA4MDYxNywgODA2MjIsIDgwNjI3LCA4MDYzMiwgODA2MzcsIAorICAgIDgwNjQyLCA4MDY0NywgODA2NTIsIDgwNjU3LCA4MDY2MiwgODA2NjcsIDgwNjcyLCA4MDY3NywgODA2ODIsIDgwNjg3LCAKKyAgICA4MDY5MiwgODA2OTcsIDgwNzAyLCA4MDcwNywgODA3MTIsIDgwNzE3LCA4MDcyMiwgODA3MjcsIDgwNzMyLCA4MDczNywgCisgICAgODA3NDMsIDgwNzQ4LCA4MDc1MywgODA3NTksIDgwNzY0LCA4MDc3MCwgODA3NzUsIDgwNzgwLCA4MDc4NiwgODA3OTEsIAorICAgIDgwNzk2LCA4MDgwMSwgODA4MDYsIDgwODExLCA4MDgxNiwgODA4MjEsIDgwODI2LCA4MDQwNywgODA0MTMsIDgwNDE5LCAKKyAgICA4MDQyNSwgODA0MzEsIDgwNDM3LCA4MDQ0MywgODA0NDksIDgwNDU1LCA4MDQ2MSwgODA0NjcsIDgwNDczLCA4MDQ3OSwgCisgICAgODA0ODUsIDgwNDkxLCA4MDgzMiwgODA0OTcsIDgwNTAzLCA4MDUwOSwgODA4MzgsIDgwNTE1LCA4MDUyMSwgODA1MjcsIAorICAgIDgwNTMzLCA4MDUzOSwgODA1NDUsIDgwNTUxLCA4MDU3MSwgODA4NDQsIDgwODUwLCA4MDU3NywgODA4NTYsIDgwNTgzLCAKKyAgICA4MDU4OSwgODA1OTUsIDgwNjAxLCA4MDYwNywgMzA5MSwgMzA5NiwgODA4NjIsIDgwODY3LCA4MDg3MCwgODA4NzYsIAorICAgIDgwODgyLCA4MDg4OSwgODA4OTQsIDgwODk5LCAyMzA3LCAKIH07CiAKIC8qIGNvZGUtPm5hbWUgcGhyYXNlYm9vayAqLwogI2RlZmluZSBwaHJhc2Vib29rX3NoaWZ0IDcKICNkZWZpbmUgcGhyYXNlYm9va19zaG9ydCAyMDkKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHBocmFzZWJvb2tbXSA9IHsKLSAgICAwLCAyMTksIDE4LCAyNDUsIDMxLCA3OCwgMjIzLCAyNTQsIDc4LCA1NCwgNTAsIDI0NywgMTMyLCA1MCwgMjI1LCAxODIsIAotICAgIDUwLCAyNTQsIDEyNiwgMjU0LCA1NywgNDMsIDIyNiwgMywgNDQsIDIyNiwgMywgMjUzLCAyMTYsIDk2LCA1MCwgMjQ5LCAKLSAgICAyMTksIDI0MCwgMTY3LCAyNDMsIDIyOSwgMjE4LCAxMjksIDIxOSwgNDYsIDIxLCAyMTAsIDg2LCAyMSwgMTEwLCAyMSwgCi0gICAgMTA1LCAyMSwgMTU4LCAyMSwgMTYxLCAyMSwgMTg5LCAyMSwgMTk0LCAyMSwgMTk4LCAyMSwgMTk1LCAyMSwgMjAwLCAyNDksIAotICAgIDIyNiwgMjIwLCAxNTAsIDIzMywgMTUsIDUwLCAyNDUsIDk4LCA1MCwgMjQyLCAxMzAsIDUwLCAyMjQsIDEzLCA3OCwgMjQ5LCAKLSAgICAyMTcsIDI1MywgMjA2LCA3LCA2LCAxLCA2MSwgNywgNiwgMSwgMjUzLCAxNTgsIDcsIDYsIDEsIDI1MSwgNjYsIDcsIDYsIDEsIAotICAgIDI0OSwgNjAsIDcsIDYsIDEsIDc1LCA3LCA2LCAxLCAyNDUsIDYsIDcsIDYsIDEsIDI0MywgMjAyLCA3LCA2LCAxLCAyNDIsIAotICAgIDYwLCA3LCA2LCAxLCA3MywgNywgNiwgMSwgMjM1LCAxNDQsIDcsIDYsIDEsIDIzNSwgMjMsIDcsIDYsIDEsIDE1NiwgNywgNiwgCi0gICAgMSwgMTkzLCA3LCA2LCAxLCAyMzAsIDI1LCA3LCA2LCAxLCA3NiwgNywgNiwgMSwgMjI2LCAxMDUsIDcsIDYsIDEsIDIyNCwgCi0gICAgOTYsIDcsIDYsIDEsIDE1MywgNywgNiwgMSwgMjIyLCA5MSwgNywgNiwgMSwgMjE3LCAxNTIsIDcsIDYsIDEsIDcwLCA3LCA2LCAKLSAgICAxLCAyMTQsIDEwNSwgNywgNiwgMSwgMjEyLCA5OCwgNywgNiwgMSwgMjExLCAxNzgsIDcsIDYsIDEsIDIxMSwgMTE3LCA3LCAKLSAgICA2LCAxLCAyMTAsIDE1OSwgNDMsIDQyLCAxMjcsIDIyMywgNTAsIDIxOSwgNDYsIDQ0LCA0MiwgMTI3LCAyNTAsIDMxLCAyNTUsIAotICAgIDE0LCAxMjEsIDIzMiwgMjEzLCAyNDIsIDEzNywgMjU1LCAxNCwgNywgNCwgMSwgNjEsIDcsIDQsIDEsIDI1MywgMTU4LCA3LCAKLSAgICA0LCAxLCAyNTEsIDY2LCA3LCA0LCAxLCAyNDksIDYwLCA3LCA0LCAxLCA3NSwgNywgNCwgMSwgMjQ1LCA2LCA3LCA0LCAxLCAKLSAgICAyNDMsIDIwMiwgNywgNCwgMSwgMjQyLCA2MCwgNywgNCwgMSwgNzMsIDcsIDQsIDEsIDIzNSwgMTQ0LCA3LCA0LCAxLCAyMzUsIAotICAgIDIzLCA3LCA0LCAxLCAxNTYsIDcsIDQsIDEsIDE5MywgNywgNCwgMSwgMjMwLCAyNSwgNywgNCwgMSwgNzYsIDcsIDQsIDEsIAotICAgIDIyNiwgMTA1LCA3LCA0LCAxLCAyMjQsIDk2LCA3LCA0LCAxLCAxNTMsIDcsIDQsIDEsIDIyMiwgOTEsIDcsIDQsIDEsIDIxNywgCi0gICAgMTUyLCA3LCA0LCAxLCA3MCwgNywgNCwgMSwgMjE0LCAxMDUsIDcsIDQsIDEsIDIxMiwgOTgsIDcsIDQsIDEsIDIxMSwgMTc4LCAKLSAgICA3LCA0LCAxLCAyMTEsIDExNywgNywgNCwgMSwgMjEwLCAxNTksIDQzLCAyNDksIDk5LCAxMjcsIDY3LCAyMzIsIDIxMywgNDQsIAotICAgIDI0OSwgOTksIDEyNywgMTgyLCAyMjgsIDczLCAyMTksIDE4LCAyMzUsIDE5MywgMjQ1LCAzMSwgNzgsIDI1MCwgMTc2LCA1MCwgCi0gICAgMjI0LCAyMjgsIDUwLCAyNDksIDk4LCA1MCwgMjExLCA0MCwgNTAsIDI1MSwgMTM1LCAxMzAsIDIyMSwgMTczLCA1MCwgMjQ4LCAKLSAgICAxLCAyNDksIDE2MywgNTAsIDI0NCwgMTM2LCAyMjYsIDE1NCwgMjM1LCAyMzgsIDIzMywgNDIsIDUyLCAyNTQsIDExMCwgCi0gICAgMjIzLCAyNTQsIDc4LCAyMjgsIDUyLCA1MCwgMjE5LCA1MiwgMjQwLCAxNjgsIDIyMywgMTAyLCA1MCwgMjMxLCAyMzIsIAotICAgIDI0OCwgNzEsIDUwLCAyMjUsIDIxLCA1MCwgMjE4LCAyMywgMTA1LCAyMTgsIDIzLCAxNTgsIDI1NSwgMywgMjU1LCAxNCwgCi0gICAgMjMwLCAyMjgsIDUwLCAyMjUsIDY4LCA1MCwgMjMwLCAyMjQsIDI0NywgMTIwLCAyNTAsIDE4MywgMjE4LCAyMywgMTEwLCAKLSAgICAyMzEsIDE0OCwgMjI2LCAxNTQsIDIzNSwgMjM4LCAyMjIsIDI0NywgNTIsIDI1NCwgMTEwLCAyMjMsIDI1NCwgNzgsIDIxMiwgCi0gICAgMTE0LCAyNDQsIDIsIDEyMywgMjI0LCAyMSwgMjEyLCAxMTQsIDI0NCwgMiwgMTIzLCAyNDIsIDI3LCAyMTIsIDExNCwgMjQ0LCAKLSAgICAyLCAxMzQsIDIyNCwgMTksIDIzNSwgMTkzLCAyMjQsIDEzLCA3OCwgNywgNiwgMSwgMTE1LCAyLCAyNDIsIDEzNiwgNywgNiwgCi0gICAgMSwgMTE1LCAyLCAxNDIsIDcsIDYsIDEsIDExNSwgMiwgMjUwLCAzMCwgNywgNiwgMSwgMTE1LCAyLCAxODIsIDcsIDYsIDEsIAotICAgIDExNSwgMiwgMjQ4LCAxLCA3LCA2LCAxLCAxMTUsIDIsIDIyMiwgMjM0LCA0OCwgNywgNiwgMSwgMjU0LCAyNDMsIDcsIDYsIAotICAgIDEsIDI1MSwgNjcsIDIsIDI1MCwgMTgzLCA3LCA2LCAxLCAxNjAsIDIsIDI0MiwgMTM2LCA3LCA2LCAxLCAxNjAsIDIsIDE0MiwgCi0gICAgNywgNiwgMSwgMTYwLCAyLCAyNTAsIDMwLCA3LCA2LCAxLCAxNjAsIDIsIDI0OCwgMSwgNywgNiwgMSwgMjQwLCAxNTQsIDIsIAotICAgIDI0MiwgMTM2LCA3LCA2LCAxLCAyNDAsIDE1NCwgMiwgMTQyLCA3LCA2LCAxLCAyNDAsIDE1NCwgMiwgMjUwLCAzMCwgNywgNiwgCi0gICAgMSwgMjQwLCAxNTQsIDIsIDI0OCwgMSwgNywgNiwgMSwgMjQ1LCA1OSwgNywgNiwgMSwgMjMwLCAyNiwgMiwgMTgyLCA3LCA2LCAKLSAgICAxLCAxNDQsIDIsIDI0MiwgMTM2LCA3LCA2LCAxLCAxNDQsIDIsIDE0MiwgNywgNiwgMSwgMTQ0LCAyLCAyNTAsIDMwLCA3LCAKLSAgICA2LCAxLCAxNDQsIDIsIDE4MiwgNywgNiwgMSwgMTQ0LCAyLCAyNDgsIDEsIDIzMCwgODQsIDUwLCA3LCA2LCAxLCAxNDQsIDIsIAotICAgIDkxLCA3LCA2LCAxLCAxMDQsIDIsIDI0MiwgMTM2LCA3LCA2LCAxLCAxMDQsIDIsIDE0MiwgNywgNiwgMSwgMTA0LCAyLCAKLSAgICAyNTAsIDMwLCA3LCA2LCAxLCAxMDQsIDIsIDI0OCwgMSwgNywgNiwgMSwgMjExLCAxMTgsIDIsIDE0MiwgNywgNiwgMSwgCi0gICAgMjE2LCAxNTEsIDcsIDQsIDEsIDIyMCwgNzYsIDIyMiwgOTEsIDcsIDQsIDEsIDExNSwgMiwgMjQyLCAxMzYsIDcsIDQsIDEsIAotICAgIDExNSwgMiwgMTQyLCA3LCA0LCAxLCAxMTUsIDIsIDI1MCwgMzAsIDcsIDQsIDEsIDExNSwgMiwgMTgyLCA3LCA0LCAxLCAKLSAgICAxMTUsIDIsIDI0OCwgMSwgNywgNCwgMSwgMTE1LCAyLCAyMjIsIDIzNCwgNDgsIDcsIDQsIDEsIDI1NCwgMjQzLCA3LCA0LCAKLSAgICAxLCAyNTEsIDY3LCAyLCAyNTAsIDE4MywgNywgNCwgMSwgMTYwLCAyLCAyNDIsIDEzNiwgNywgNCwgMSwgMTYwLCAyLCAxNDIsIAotICAgIDcsIDQsIDEsIDE2MCwgMiwgMjUwLCAzMCwgNywgNCwgMSwgMTYwLCAyLCAyNDgsIDEsIDcsIDQsIDEsIDI0MCwgMTU0LCAyLCAKLSAgICAyNDIsIDEzNiwgNywgNCwgMSwgMjQwLCAxNTQsIDIsIDE0MiwgNywgNCwgMSwgMjQwLCAxNTQsIDIsIDI1MCwgMzAsIDcsIDQsIAotICAgIDEsIDI0MCwgMTU0LCAyLCAyNDgsIDEsIDcsIDQsIDEsIDI0NSwgNTksIDcsIDQsIDEsIDIzMCwgMjYsIDIsIDE4MiwgNywgNCwgCi0gICAgMSwgMTQ0LCAyLCAyNDIsIDEzNiwgNywgNCwgMSwgMTQ0LCAyLCAxNDIsIDcsIDQsIDEsIDE0NCwgMiwgMjUwLCAzMCwgNywgCi0gICAgNCwgMSwgMTQ0LCAyLCAxODIsIDcsIDQsIDEsIDE0NCwgMiwgMjQ4LCAxLCAyNDcsIDE2OSwgNTAsIDcsIDQsIDEsIDE0NCwgCi0gICAgMiwgOTEsIDcsIDQsIDEsIDEwNCwgMiwgMjQyLCAxMzYsIDcsIDQsIDEsIDEwNCwgMiwgMTQyLCA3LCA0LCAxLCAxMDQsIDIsIAotICAgIDI1MCwgMzAsIDcsIDQsIDEsIDEwNCwgMiwgMjQ4LCAxLCA3LCA0LCAxLCAyMTEsIDExOCwgMiwgMTQyLCA3LCA0LCAxLCAKLSAgICAyMTYsIDE1MSwgNywgNCwgMSwgMjExLCAxMTgsIDIsIDI0OCwgMSwgNywgNiwgMSwgMTE1LCAyLCAyMzEsIDIzMiwgNywgNCwgCi0gICAgMSwgMTE1LCAyLCAyMzEsIDIzMiwgNywgNiwgMSwgMTE1LCAyLCAyNTEsIDE0NiwgNywgNCwgMSwgMTE1LCAyLCAyNTEsIAotICAgIDE0NiwgNywgNiwgMSwgMTE1LCAyLCAyMjYsIDIyNCwgNywgNCwgMSwgMTE1LCAyLCAyMjYsIDIyNCwgNywgNiwgMSwgMjUxLCAKLSAgICA2NywgMiwgMTQyLCA3LCA0LCAxLCAyNTEsIDY3LCAyLCAxNDIsIDcsIDYsIDEsIDI1MSwgNjcsIDIsIDI1MCwgMzAsIDcsIDQsIAotICAgIDEsIDI1MSwgNjcsIDIsIDI1MCwgMzAsIDcsIDYsIDEsIDI1MSwgNjcsIDIsIDU5LCA0OCwgNywgNCwgMSwgMjUxLCA2NywgMiwgCi0gICAgNTksIDQ4LCA3LCA2LCAxLCAyNTEsIDY3LCAyLCAyNTAsIDIzNCwgNywgNCwgMSwgMjUxLCA2NywgMiwgMjUwLCAyMzQsIDcsIAotICAgIDYsIDEsIDI0OSwgNjEsIDIsIDI1MCwgMjM0LCA3LCA0LCAxLCAyNDksIDYxLCAyLCAyNTAsIDIzNCwgNywgNiwgMSwgMjQ5LCAKLSAgICA2MSwgMiwgOTEsIDcsIDQsIDEsIDI0OSwgNjEsIDIsIDkxLCA3LCA2LCAxLCAxNjAsIDIsIDIzMSwgMjMyLCA3LCA0LCAxLCAKLSAgICAxNjAsIDIsIDIzMSwgMjMyLCA3LCA2LCAxLCAxNjAsIDIsIDI1MSwgMTQ2LCA3LCA0LCAxLCAxNjAsIDIsIDI1MSwgMTQ2LCAKLSAgICA3LCA2LCAxLCAxNjAsIDIsIDU5LCA0OCwgNywgNCwgMSwgMTYwLCAyLCA1OSwgNDgsIDcsIDYsIDEsIDE2MCwgMiwgMjI2LCAKLSAgICAyMjQsIDcsIDQsIDEsIDE2MCwgMiwgMjI2LCAyMjQsIDcsIDYsIDEsIDE2MCwgMiwgMjUwLCAyMzQsIDcsIDQsIDEsIDE2MCwgCi0gICAgMiwgMjUwLCAyMzQsIDcsIDYsIDEsIDI0MywgMjAzLCAyLCAyNTAsIDMwLCA3LCA0LCAxLCAyNDMsIDIwMywgMiwgMjUwLCAKLSAgICAzMCwgNywgNiwgMSwgMjQzLCAyMDMsIDIsIDI1MSwgMTQ2LCA3LCA0LCAxLCAyNDMsIDIwMywgMiwgMjUxLCAxNDYsIDcsIDYsIAotICAgIDEsIDI0MywgMjAzLCAyLCA1OSwgNDgsIDcsIDQsIDEsIDI0MywgMjAzLCAyLCA1OSwgNDgsIDcsIDYsIDEsIDI0MywgMjAzLCAKLSAgICAyLCAyNTAsIDE4MywgNywgNCwgMSwgMjQzLCAyMDMsIDIsIDI1MCwgMTgzLCA3LCA2LCAxLCAyNDIsIDYxLCAyLCAyNTAsIAotICAgIDMwLCA3LCA0LCAxLCAyNDIsIDYxLCAyLCAyNTAsIDMwLCA3LCA2LCAxLCAyNDIsIDYxLCAyLCA5MSwgNywgNCwgMSwgMjQyLCAKLSAgICA2MSwgMiwgOTEsIDcsIDYsIDEsIDI0MCwgMTU0LCAyLCAxODIsIDcsIDQsIDEsIDI0MCwgMTU0LCAyLCAxODIsIDcsIDYsIDEsIAotICAgIDI0MCwgMTU0LCAyLCAyMzEsIDIzMiwgNywgNCwgMSwgMjQwLCAxNTQsIDIsIDIzMSwgMjMyLCA3LCA2LCAxLCAyNDAsIDE1NCwgCi0gICAgMiwgMjUxLCAxNDYsIDcsIDQsIDEsIDI0MCwgMTU0LCAyLCAyNTEsIDE0NiwgNywgNiwgMSwgMjQwLCAxNTQsIDIsIDIyNiwgCi0gICAgMjI0LCA3LCA0LCAxLCAyNDAsIDE1NCwgMiwgMjI2LCAyMjQsIDcsIDYsIDEsIDI0MCwgMTU0LCAyLCA1OSwgNDgsIDcsIDQsIAotICAgIDEsIDI0NywgMTE5LCA3MywgNywgNiwgMjcsIDIzNiwgMzEsIDcsIDQsIDI3LCAyMzYsIDMxLCA3LCA2LCAxLCAyMzUsIDE0NSwgCi0gICAgMiwgMjUwLCAzMCwgNywgNCwgMSwgMjM1LCAxNDUsIDIsIDI1MCwgMzAsIDcsIDYsIDEsIDIzNSwgMjQsIDIsIDI1MCwgMTgzLCAKLSAgICA3LCA0LCAxLCAyMzUsIDI0LCAyLCAyNTAsIDE4MywgNywgNCwgMSwgMjMzLCAyMzksIDcsIDYsIDEsIDIzMywgMTQ5LCAyLCAKLSAgICAxNDIsIDcsIDQsIDEsIDIzMywgMTQ5LCAyLCAxNDIsIDcsIDYsIDEsIDIzMywgMTQ5LCAyLCAyNTAsIDE4MywgNywgNCwgMSwgCi0gICAgMjMzLCAxNDksIDIsIDI1MCwgMTgzLCA3LCA2LCAxLCAyMzMsIDE0OSwgMiwgMjUwLCAyMzQsIDcsIDQsIDEsIDIzMywgMTQ5LCAKLSAgICAyLCAyNTAsIDIzNCwgNywgNiwgMSwgMjMzLCAxNDksIDIsIDIzMCwgMjI0LCAyNDcsIDEyMCwgNywgNCwgMSwgMjMzLCAxNDksIAotICAgIDIsIDIzMCwgMjI0LCAyNDcsIDEyMCwgNywgNiwgMSwgMjMzLCAxNDksIDIsIDkxLCA3LCA0LCAxLCAyMzMsIDE0OSwgMiwgCi0gICAgOTEsIDcsIDYsIDEsIDIzMCwgMjYsIDIsIDE0MiwgNywgNCwgMSwgMjMwLCAyNiwgMiwgMTQyLCA3LCA2LCAxLCAyMzAsIDI2LCAKLSAgICAyLCAyNTAsIDE4MywgNywgNCwgMSwgMjMwLCAyNiwgMiwgMjUwLCAxODMsIDcsIDYsIDEsIDIzMCwgMjYsIDIsIDI1MCwgCi0gICAgMjM0LCA3LCA0LCAxLCAyMzAsIDI2LCAyLCAyNTAsIDIzNCwgNywgNCwgMSwgMjMwLCAyNiwgMjI0LCAyMDQsIDI1MSwgNzgsIAotICAgIDI1NCwgNTcsIDcsIDYsIDEsIDI0NSwgMTM4LCA3LCA0LCAxLCAyNDUsIDEzOCwgNywgNiwgMSwgMTQ0LCAyLCAyMzEsIDIzMiwgCi0gICAgNywgNCwgMSwgMTQ0LCAyLCAyMzEsIDIzMiwgNywgNiwgMSwgMTQ0LCAyLCAyNTEsIDE0NiwgNywgNCwgMSwgMTQ0LCAyLCAKLSAgICAyNTEsIDE0NiwgNywgNiwgMSwgMTQ0LCAyLCA1MiwgMTQyLCA3LCA0LCAxLCAxNDQsIDIsIDUyLCAxNDIsIDcsIDYsIDI3LCAKLSAgICAyMjYsIDIzNCwgNywgNCwgMjcsIDIyNiwgMjM0LCA3LCA2LCAxLCAyMjMsIDIyNCwgMiwgMTQyLCA3LCA0LCAxLCAyMjMsIAotICAgIDIyNCwgMiwgMTQyLCA3LCA2LCAxLCAyMjMsIDIyNCwgMiwgMjUwLCAxODMsIDcsIDQsIDEsIDIyMywgMjI0LCAyLCAyNTAsIAotICAgIDE4MywgNywgNiwgMSwgMjIzLCAyMjQsIDIsIDI1MCwgMjM0LCA3LCA0LCAxLCAyMjMsIDIyNCwgMiwgMjUwLCAyMzQsIDcsIAotICAgIDYsIDEsIDIyMiwgOTIsIDIsIDE0MiwgNywgNCwgMSwgMjIyLCA5MiwgMiwgMTQyLCA3LCA2LCAxLCAyMjIsIDkyLCAyLCAKLSAgICAyNTAsIDMwLCA3LCA0LCAxLCAyMjIsIDkyLCAyLCAyNTAsIDMwLCA3LCA2LCAxLCAyMjIsIDkyLCAyLCAyNTAsIDE4MywgNywgCi0gICAgNCwgMSwgMjIyLCA5MiwgMiwgMjUwLCAxODMsIDcsIDYsIDEsIDIyMiwgOTIsIDIsIDI1MCwgMjM0LCA3LCA0LCAxLCAyMjIsIAotICAgIDkyLCAyLCAyNTAsIDIzNCwgNywgNiwgMSwgMjE3LCAxNTMsIDIsIDI1MCwgMTgzLCA3LCA0LCAxLCAyMTcsIDE1MywgMiwgCi0gICAgMjUwLCAxODMsIDcsIDYsIDEsIDIxNywgMTUzLCAyLCAyNTAsIDIzNCwgNywgNCwgMSwgMjE3LCAxNTMsIDIsIDI1MCwgMjM0LCAKLSAgICA3LCA2LCAxLCAyMTcsIDE1MywgMiwgOTEsIDcsIDQsIDEsIDIxNywgMTUzLCAyLCA5MSwgNywgNiwgMSwgMTA0LCAyLCAxODIsIAotICAgIDcsIDQsIDEsIDEwNCwgMiwgMTgyLCA3LCA2LCAxLCAxMDQsIDIsIDIzMSwgMjMyLCA3LCA0LCAxLCAxMDQsIDIsIDIzMSwgCi0gICAgMjMyLCA3LCA2LCAxLCAxMDQsIDIsIDI1MSwgMTQ2LCA3LCA0LCAxLCAxMDQsIDIsIDI1MSwgMTQ2LCA3LCA2LCAxLCAxMDQsIAotICAgIDIsIDIyMiwgMjM0LCA0OCwgNywgNCwgMSwgMTA0LCAyLCAyMjIsIDIzNCwgNDgsIDcsIDYsIDEsIDEwNCwgMiwgNTIsIDE0MiwgCi0gICAgNywgNCwgMSwgMTA0LCAyLCA1MiwgMTQyLCA3LCA2LCAxLCAxMDQsIDIsIDIyNiwgMjI0LCA3LCA0LCAxLCAxMDQsIDIsIAotICAgIDIyNiwgMjI0LCA3LCA2LCAxLCAyMTIsIDk5LCAyLCAyNTAsIDMwLCA3LCA0LCAxLCAyMTIsIDk5LCAyLCAyNTAsIDMwLCA3LCAKLSAgICA2LCAxLCAyMTEsIDExOCwgMiwgMjUwLCAzMCwgNywgNCwgMSwgMjExLCAxMTgsIDIsIDI1MCwgMzAsIDcsIDYsIDEsIDIxMSwgCi0gICAgMTE4LCAyLCAyNDgsIDEsIDcsIDYsIDEsIDIxMCwgMTYwLCAyLCAxNDIsIDcsIDQsIDEsIDIxMCwgMTYwLCAyLCAxNDIsIDcsIAotICAgIDYsIDEsIDIxMCwgMTYwLCAyLCA1OSwgNDgsIDcsIDQsIDEsIDIxMCwgMTYwLCAyLCA1OSwgNDgsIDcsIDYsIDEsIDIxMCwgCi0gICAgMTYwLCAyLCAyNTAsIDIzNCwgNywgNCwgMSwgMjEwLCAxNjAsIDIsIDI1MCwgMjM0LCA3LCA0LCAxLCAxOTksIDIyMiwgOTEsIAotICAgIDcsIDQsIDEsIDU3LCAyLCA5MSwgNywgNiwgMSwgNTcsIDIsIDEwMywgNywgNiwgMSwgNTcsIDIsIDIxNiwgMTEsIDcsIDQsIAotICAgIDEsIDU3LCAyLCAyMTYsIDExLCA3LCA2LCAxLCAxMzgsIDE5NCwgNywgNCwgMSwgMTM4LCAxOTQsIDcsIDYsIDEsIDIwNCwgCi0gICAgNzYsIDcsIDYsIDEsIDI1MSwgNjcsIDIsIDEwMywgNywgNCwgMSwgMjUxLCA2NywgMiwgMTAzLCA3LCA2LCAxLCAyNTQsIAotICAgIDIxOSwgMjQ5LCA2MCwgNywgNiwgMSwgMjQ5LCA2MSwgMiwgMTAzLCA3LCA2LCAxLCAyNDksIDYxLCAyLCAyMTYsIDExLCA3LCAKLSAgICA0LCAxLCAyNDksIDYxLCAyLCAyMTYsIDExLCA3LCA0LCAxLCAyMTUsIDk0LCAyNDgsIDU0LCA3LCA2LCAxLCAyMjMsIDQ5LCAKLSAgICA3NSwgNywgNiwgMSwgMjIxLCAxOTUsIDcsIDYsIDEsIDIwNCwgNzUsIDcsIDYsIDEsIDI0NSwgNywgMiwgMTAzLCA3LCA0LCAKLSAgICAxLCAyNDUsIDcsIDIsIDEwMywgNywgNiwgMSwgMjQzLCAyMDMsIDIsIDEwMywgNywgNiwgMSwgMjQzLCAxMDcsIDcsIDQsIDEsIAotICAgIDI0MCwgMjAxLCA3LCA2LCAxLCAyMzUsIDE4NSwgNywgNiwgMSwgMjQwLCAxNTQsIDIsIDkxLCA3LCA2LCAxLCAyMzUsIDI0LCAKLSAgICAyLCAxMDMsIDcsIDQsIDEsIDIzNSwgMjQsIDIsIDEwMywgNywgNCwgMSwgMjMzLCAxNDksIDIsIDEzMCwgNywgNCwgMSwgCi0gICAgMjMzLCAxMDAsIDIsIDkxLCA3LCA2LCAxLCAyMTUsIDk0LCAxOTMsIDcsIDYsIDEsIDIzMCwgMjYsIDIsIDQzLCAxMDMsIDcsIAotICAgIDQsIDEsIDIzMCwgMjYsIDIsIDE5OSwgNDQsIDIzMywgMzYsIDcsIDYsIDEsIDE0NCwgMiwgMjMwLCAyMjQsIDE4MiwgNywgNiwgCi0gICAgMSwgMTQ0LCAyLCAyNDAsIDI0OCwgNywgNCwgMSwgMTQ0LCAyLCAyNDAsIDI0OCwgNywgNiwgMSwgMjI2LCAyMTksIDcsIDQsIAotICAgIDEsIDIyNiwgMjE5LCA3LCA2LCAxLCAyMjYsIDEwNiwgMiwgMTAzLCA3LCA0LCAxLCAyMjYsIDEwNiwgMiwgMTAzLCA3LCAxLCAKLSAgICAyMTAsIDIxNCwgNywgNiwgMSwgMTM4LCAxMDUsIDcsIDQsIDEsIDEzOCwgMTA1LCA3LCA2LCAxLCAyNDUsIDc1LCA3LCAxLCAKLSAgICAyMjMsIDQ5LCAyNDUsIDc2LCAyMzIsIDEyMywgNywgNCwgMSwgMjE3LCAxNTMsIDIsIDIyNiwgNjYsIDEwMywgNywgNiwgMSwgCi0gICAgMjE3LCAxNTMsIDIsIDEwMywgNywgNCwgMSwgMjE3LCAxNTMsIDIsIDEwMywgNywgNiwgMSwgMjE3LCAxNTMsIDIsIDIyMywgCi0gICAgNTUsIDEwMywgNywgNiwgMSwgMTA0LCAyLCAyNDAsIDI0OCwgNywgNCwgMSwgMTA0LCAyLCAyNDAsIDI0OCwgNywgNiwgMSwgCi0gICAgMjE0LCAxNTcsIDcsIDYsIDEsIDIxNCwgMTA2LCAyLCAxMDMsIDcsIDYsIDEsIDIxMSwgMTE4LCAyLCAxMDMsIDcsIDQsIDEsIAotICAgIDIxMSwgMTE4LCAyLCAxMDMsIDcsIDYsIDEsIDIxMCwgMTYwLCAyLCA5MSwgNywgNCwgMSwgMjEwLCAxNjAsIDIsIDkxLCA3LCAKLSAgICA2LCAxLCAyNDUsIDgsIDcsIDYsIDEsIDI0NSwgOSwgMjIzLCA0OCwgNywgNCwgMSwgMjQ1LCA5LCAyMjMsIDQ4LCA3LCA0LCAKLSAgICAxLCAyNDUsIDksIDIsIDIxNywgNzcsIDcsIDEsIDExMywgMiwgOTEsIDcsIDYsIDEsIDEzOCwgMTg5LCA3LCA0LCAxLCAxMzgsIAotICAgIDE4OSwgNywgMSwgMjM1LCAxOTMsIDI0MiwgMTgwLCAyMTgsIDEzMCwgMiwgOTEsIDcsIDEsIDIxMSwgMTgxLCA3LCAxLCAKLSAgICAyNDgsIDQ3LCAyNTAsIDExLCA3LCAxLCAyMzMsIDc3LCAyNTAsIDExLCA3LCAxLCAyNTQsIDEzNywgMjUwLCAxMSwgNywgMSwgCi0gICAgMjIzLCA1NSwgMjUwLCAxMSwgNywgNiwgMSwgMjQ2LCA0MCwgMiwgMjUwLCAyMzQsIDcsIDYsIDEsIDI0OSwgNjEsIDIsIDQsIAotICAgIDEsIDIxMCwgMTYwLCAyLCAyNTAsIDIzNCwgNywgNCwgMSwgMjQ2LCA0MCwgMiwgMjUwLCAyMzQsIDcsIDYsIDEsIDIzMiwgCi0gICAgMTg4LCA3LCA2LCAxLCAyMzMsIDE0OSwgMiwgNCwgMSwgMjM1LCAxNDQsIDcsIDQsIDEsIDIzMiwgMTg4LCA3LCA2LCAxLCAKLSAgICAyMjgsIDE4NiwgNywgNiwgMSwgMjMwLCAyNiwgMiwgNCwgMSwgMjM1LCAxNDQsIDcsIDQsIDEsIDIyOCwgMTg2LCA3LCA2LCAKLSAgICAxLCAxMTUsIDIsIDI1MCwgMjM0LCA3LCA0LCAxLCAxMTUsIDIsIDI1MCwgMjM0LCA3LCA2LCAxLCAyNDAsIDE1NCwgMiwgCi0gICAgMjUwLCAyMzQsIDcsIDQsIDEsIDI0MCwgMTU0LCAyLCAyNTAsIDIzNCwgNywgNiwgMSwgMTQ0LCAyLCAyNTAsIDIzNCwgNywgCi0gICAgNCwgMSwgMTQ0LCAyLCAyNTAsIDIzNCwgNywgNiwgMSwgMTA0LCAyLCAyNTAsIDIzNCwgNywgNCwgMSwgMTA0LCAyLCAyNTAsIAotICAgIDIzNCwgNywgNiwgMSwgMTA0LCAyLCAyNDgsIDIsIDIyLCAyMzEsIDIzMiwgNywgNCwgMSwgMTA0LCAyLCAyNDgsIDIsIDIyLCAKLSAgICAyMzEsIDIzMiwgNywgNiwgMSwgMTA0LCAyLCAyNDgsIDIsIDIyLCAxNDIsIDcsIDQsIDEsIDEwNCwgMiwgMjQ4LCAyLCAyMiwgCi0gICAgMTQyLCA3LCA2LCAxLCAxMDQsIDIsIDI0OCwgMiwgMjIsIDI1MCwgMjM0LCA3LCA0LCAxLCAxMDQsIDIsIDI0OCwgMiwgMjIsIAotICAgIDI1MCwgMjM0LCA3LCA2LCAxLCAxMDQsIDIsIDI0OCwgMiwgMjIsIDI0MiwgMTM2LCA3LCA0LCAxLCAxMDQsIDIsIDI0OCwgMiwgCi0gICAgMjIsIDI0MiwgMTM2LCA3LCA0LCAxLCAyMTUsIDk0LCA3NSwgNywgNiwgMSwgMTE1LCAyLCAyNDgsIDIsIDIyLCAyMzEsIAotICAgIDIzMiwgNywgNCwgMSwgMTE1LCAyLCAyNDgsIDIsIDIyLCAyMzEsIDIzMiwgNywgNiwgMSwgMTE1LCAyLCA1OSwgNzcsIDIyLCAKLSAgICAyMzEsIDIzMiwgNywgNCwgMSwgMTE1LCAyLCA1OSwgNzcsIDIyLCAyMzEsIDIzMiwgNywgNiwgMSwgMjU0LCAyNDQsIDIsIAotICAgIDIzMSwgMjMyLCA3LCA0LCAxLCAyNTQsIDI0NCwgMiwgMjMxLCAyMzIsIDcsIDYsIDEsIDI0MywgMjAzLCAyLCA5MSwgNywgNCwgCi0gICAgMSwgMjQzLCAyMDMsIDIsIDkxLCA3LCA2LCAxLCAyNDMsIDIwMywgMiwgMjUwLCAyMzQsIDcsIDQsIDEsIDI0MywgMjAzLCAyLCAKLSAgICAyNTAsIDIzNCwgNywgNiwgMSwgMjM1LCAyNCwgMiwgMjUwLCAyMzQsIDcsIDQsIDEsIDIzNSwgMjQsIDIsIDI1MCwgMjM0LCAKLSAgICA3LCA2LCAxLCAxNDQsIDIsIDIyNiwgMjI0LCA3LCA0LCAxLCAxNDQsIDIsIDIyNiwgMjI0LCA3LCA2LCAxLCAxNDQsIDIsIAotICAgIDIyNiwgMjI1LCAyMiwgMjMxLCAyMzIsIDcsIDQsIDEsIDE0NCwgMiwgMjI2LCAyMjUsIDIyLCAyMzEsIDIzMiwgNywgNiwgMSwgCi0gICAgMjQ1LCA5LCAyLCAyNTAsIDIzNCwgNywgNCwgMSwgMjQ1LCA5LCAyLCAyNTAsIDIzNCwgNywgNCwgMSwgMjM1LCAxNDUsIDIsIAotICAgIDI1MCwgMjM0LCA3LCA2LCAxLCAyNDYsIDM5LCA3LCA2LCAxLCAyNDksIDYxLCAyLCA0LCAxLCAyMTAsIDE1OSwgNywgNCwgMSwgCi0gICAgMjQ2LCAzOSwgNywgNiwgMSwgMjQzLCAyMDMsIDIsIDE0MiwgNywgNCwgMSwgMjQzLCAyMDMsIDIsIDE0MiwgNywgNiwgMSwgCi0gICAgMjQwLCAxOTksIDcsIDYsIDEsIDIxMSwgMTgxLCA3LCA2LCAxLCAyMzAsIDI2LCAyLCAyNDIsIDEzNiwgNywgNCwgMSwgMjMwLCAKLSAgICAyNiwgMiwgMjQyLCAxMzYsIDcsIDYsIDEsIDExNSwgMiwgMjIyLCAyMzQsIDc3LCAyMiwgMTQyLCA3LCA0LCAxLCAxMTUsIDIsIAotICAgIDIyMiwgMjM0LCA3NywgMjIsIDE0MiwgNywgNiwgMSwgMjU0LCAyNDQsIDIsIDE0MiwgNywgNCwgMSwgMjU0LCAyNDQsIDIsIAotICAgIDE0MiwgNywgNiwgMSwgMTQ0LCAyLCAyMTgsIDEwMywgMjIsIDE0MiwgNywgNCwgMSwgMTQ0LCAyLCAyMTgsIDEwMywgMjIsIAotICAgIDE0MiwgNywgNiwgMSwgMTE1LCAyLCA1MiwgMjQyLCAxMzYsIDcsIDQsIDEsIDExNSwgMiwgNTIsIDI0MiwgMTM2LCA3LCA2LCAKLSAgICAxLCAxMTUsIDIsIDIzNSwgMTkzLCAyNTEsIDE0NiwgNywgNCwgMSwgMTE1LCAyLCAyMzUsIDE5MywgMjUxLCAxNDYsIDcsIDYsIAotICAgIDEsIDE2MCwgMiwgNTIsIDI0MiwgMTM2LCA3LCA0LCAxLCAxNjAsIDIsIDUyLCAyNDIsIDEzNiwgNywgNiwgMSwgMTYwLCAyLCAKLSAgICAyMzUsIDE5MywgMjUxLCAxNDYsIDcsIDQsIDEsIDE2MCwgMiwgMjM1LCAxOTMsIDI1MSwgMTQ2LCA3LCA2LCAxLCAyNDAsIAotICAgIDE1NCwgMiwgNTIsIDI0MiwgMTM2LCA3LCA0LCAxLCAyNDAsIDE1NCwgMiwgNTIsIDI0MiwgMTM2LCA3LCA2LCAxLCAyNDAsIAotICAgIDE1NCwgMiwgMjM1LCAxOTMsIDI1MSwgMTQ2LCA3LCA0LCAxLCAyNDAsIDE1NCwgMiwgMjM1LCAxOTMsIDI1MSwgMTQ2LCA3LCAKLSAgICA2LCAxLCAxNDQsIDIsIDUyLCAyNDIsIDEzNiwgNywgNCwgMSwgMTQ0LCAyLCA1MiwgMjQyLCAxMzYsIDcsIDYsIDEsIDE0NCwgCi0gICAgMiwgMjM1LCAxOTMsIDI1MSwgMTQ2LCA3LCA0LCAxLCAxNDQsIDIsIDIzNSwgMTkzLCAyNTEsIDE0NiwgNywgNiwgMSwgMjIzLCAKLSAgICAyMjQsIDIsIDUyLCAyNDIsIDEzNiwgNywgNCwgMSwgMjIzLCAyMjQsIDIsIDUyLCAyNDIsIDEzNiwgNywgNiwgMSwgMjIzLCAKLSAgICAyMjQsIDIsIDIzNSwgMTkzLCAyNTEsIDE0NiwgNywgNCwgMSwgMjIzLCAyMjQsIDIsIDIzNSwgMTkzLCAyNTEsIDE0NiwgNywgCi0gICAgNiwgMSwgMTA0LCAyLCA1MiwgMjQyLCAxMzYsIDcsIDQsIDEsIDEwNCwgMiwgNTIsIDI0MiwgMTM2LCA3LCA2LCAxLCAxMDQsIAotICAgIDIsIDIzNSwgMTkzLCAyNTEsIDE0NiwgNywgNCwgMSwgMTA0LCAyLCAyMzUsIDE5MywgMjUxLCAxNDYsIDcsIDYsIDEsIDIyMiwgCi0gICAgOTIsIDIsIDI0OSwgMjIwLCA1MSwgNywgNCwgMSwgMjIyLCA5MiwgMiwgMjQ5LCAyMjAsIDUxLCA3LCA2LCAxLCAyMTcsIAotICAgIDE1MywgMiwgMjQ5LCAyMjAsIDUxLCA3LCA0LCAxLCAyMTcsIDE1MywgMiwgMjQ5LCAyMjAsIDUxLCA3LCA2LCAxLCAyMTAsIAotICAgIDIzMSwgNywgNCwgMSwgMjEwLCAyMzEsIDcsIDYsIDEsIDI0MiwgNjEsIDIsIDI1MCwgMjM0LCA3LCA0LCAxLCAyNDIsIDYxLCAKLSAgICAyLCAyNTAsIDIzNCwgNywgNiwgMSwgMjMwLCAyNiwgMiwgMTk5LCA0NCwgMjMzLCAzNiwgNywgNCwgMSwgMjQ5LCA2MSwgMiwgCi0gICAgMjQ5LCAxMDAsIDcsIDYsIDEsIDIyNiwgMTM0LCA3LCA0LCAxLCAyMjYsIDEzNCwgNywgNiwgMSwgMjEwLCAxNjAsIDIsIAotICAgIDEwMywgNywgNCwgMSwgMjEwLCAxNjAsIDIsIDEwMywgNywgNiwgMSwgMTE1LCAyLCA1OSwgNDgsIDcsIDQsIDEsIDExNSwgMiwgCi0gICAgNTksIDQ4LCA3LCA2LCAxLCAxNjAsIDIsIDI1MCwgMTgzLCA3LCA0LCAxLCAxNjAsIDIsIDI1MCwgMTgzLCA3LCA2LCAxLCAKLSAgICAxNDQsIDIsIDI0OCwgMiwgMjIsIDIzMSwgMjMyLCA3LCA0LCAxLCAxNDQsIDIsIDI0OCwgMiwgMjIsIDIzMSwgMjMyLCA3LCAKLSAgICA2LCAxLCAxNDQsIDIsIDIxNiwgODksIDIyLCAyMzEsIDIzMiwgNywgNCwgMSwgMTQ0LCAyLCAyMTYsIDg5LCAyMiwgMjMxLCAKLSAgICAyMzIsIDcsIDYsIDEsIDE0NCwgMiwgNTksIDQ4LCA3LCA0LCAxLCAxNDQsIDIsIDU5LCA0OCwgNywgNiwgMSwgMTQ0LCAyLCAKLSAgICA1OSwgNzcsIDIyLCAyMzEsIDIzMiwgNywgNCwgMSwgMTQ0LCAyLCA1OSwgNzcsIDIyLCAyMzEsIDIzMiwgNywgNiwgMSwgCi0gICAgMjExLCAxMTgsIDIsIDIzMSwgMjMyLCA3LCA0LCAxLCAyMTEsIDExOCwgMiwgMjMxLCAyMzIsIDcsIDQsIDEsIDIzMywgMTQ5LCAKLSAgICAyLCAyNDksIDEwMCwgNywgNCwgMSwgMjMwLCAyNiwgMiwgMjQ5LCAxMDAsIDcsIDQsIDEsIDIxNywgMTUzLCAyLCAyNDksIAotICAgIDEwMCwgNywgNCwgMSwgMjQ3LCAxMTksIDIzNSwgMTQ0LCA3LCA0LCAxLCAyNDgsIDE0MywgMjQ3LCAyMjAsIDcsIDQsIDEsIAotICAgIDIyNCwgMzEsIDI0NywgMjIwLCA3LCA2LCAxLCAxMTUsIDIsIDkxLCA3LCA2LCAxLCAyNTEsIDY3LCAyLCA5MSwgNywgNCwgMSwgCi0gICAgMjUxLCA2NywgMiwgOTEsIDcsIDYsIDEsIDIzMywgMTQ5LCAyLCAxMzAsIDcsIDYsIDEsIDIxNywgMTUzLCAyLCAyNDcsIAotICAgIDI1NSwgOTEsIDcsIDQsIDEsIDIyMiwgOTIsIDIsIDIxNywgMjUwLCAyMTcsIDc3LCA3LCA0LCAxLCAyMTAsIDE2MCwgMiwgCi0gICAgMjE3LCAyNTAsIDIxNywgNzcsIDcsIDYsIDEsIDI0MiwgMTgwLCAyMTgsIDEyOSwgNywgNCwgMSwgMjQyLCAxODAsIDIxOCwgCi0gICAgMTI5LCA3LCA2LCAxLCA1NywgMiwgOTEsIDcsIDYsIDEsIDEwNCwgMTMwLCA3LCA2LCAxLCAyMTUsIDk0LCAyMTQsIDEwNSwgCi0gICAgNywgNiwgMSwgMTYwLCAyLCA5MSwgNywgNCwgMSwgMTYwLCAyLCA5MSwgNywgNiwgMSwgMjM1LCAxNDUsIDIsIDkxLCA3LCA0LCAKLSAgICAxLCAyMzUsIDE0NSwgMiwgOTEsIDcsIDYsIDEsIDQsIDIyNCwgOTcsIDIsIDI0MSwgNTIsIDIxNywgNzcsIDcsIDQsIDEsIAotICAgIDIyNCwgOTcsIDIsIDI0MSwgNTIsIDIxNywgNzcsIDcsIDYsIDEsIDIyMywgMjI0LCAyLCA5MSwgNywgNCwgMSwgMjIzLCAKLSAgICAyMjQsIDIsIDkxLCA3LCA2LCAxLCAyMTEsIDExOCwgMiwgOTEsIDcsIDQsIDEsIDIxMSwgMTE4LCAyLCA5MSwgNywgNCwgMSwgCi0gICAgMjE1LCA5NCwgNjEsIDcsIDQsIDEsIDI1NCwgMTQzLCA3LCA0LCAxLCAyMTUsIDk0LCAyNTQsIDE0MywgNywgNCwgMSwgNTcsIAotICAgIDIsIDEwMywgNywgNCwgMSwgMjA0LCA3NiwgNywgNCwgMSwgMjUxLCA2NywgMiwgMjQ5LCAxMDAsIDcsIDQsIDEsIDI0OSwgCi0gICAgNjEsIDIsIDIxNywgNzcsIDcsIDQsIDEsIDI0OSwgNjEsIDIsIDEwMywgNywgNCwgMSwgMjIzLCA0OSwgNzUsIDcsIDQsIDEsIAotICAgIDIyMSwgMTk1LCA3LCA0LCAxLCAyMjEsIDE5NiwgMiwgMTAzLCA3LCA0LCAxLCAyMDQsIDc1LCA3LCA0LCAxLCAyMjMsIDQ5LCAKLSAgICAyMDQsIDc1LCA3LCA0LCAxLCAyMjMsIDQ5LCAyMDQsIDE2MCwgMiwgMTAzLCA3LCA0LCAxLCAyNTAsIDAsIDIyMywgNDksIAotICAgIDIwNCwgNzUsIDcsIDQsIDEsIDI0NywgMTE5LCAyMzUsIDE0NSwgMiwgOTEsIDcsIDQsIDEsIDI0MywgMjAzLCAyLCAxMDMsIAotICAgIDcsIDQsIDEsIDExOSwgMjQzLCAyMDIsIDcsIDEsIDQsIDYsIDI0MywgMjAyLCA3LCA0LCAxLCAyNDMsIDEwNywgNywgNCwgMSwgCi0gICAgMjIzLCAxNTEsIDI0MCwgMjQ4LCA3LCA0LCAxLCAyMTUsIDk0LCAyNDIsIDYwLCA3LCA0LCAxLCAyNDIsIDYxLCAyLCAxMDMsIAotICAgIDcsIDQsIDEsIDI0MSwgMjA4LCAyLCAxMDMsIDcsIDQsIDEsIDI0MCwgMTU0LCAyLCA5MSwgNywgNCwgMSwgMjM1LCAxODUsIAotICAgIDcsIDEsIDQsIDYsIDczLCA3LCA0LCAxLCAyMzMsIDE0OSwgMiwgMjMwLCAyMjQsIDE4MiwgNywgNCwgMSwgMjMzLCAxNDksIAotICAgIDIsIDI1MiwgNDEsIDcsIDQsIDEsIDIzMywgMTQ5LCAyLCAyMjMsIDU1LCAxMDMsIDcsIDQsIDEsIDIzMywgMSwgNywgNCwgMSwgCi0gICAgMjE1LCA5NCwgMTkzLCA3LCA0LCAxLCAyMTUsIDk0LCAyMzIsIDUwLCAyLCAxOTksIDIzMywgMzYsIDcsIDQsIDEsIDIzMiwgCi0gICAgNTAsIDIsIDEwMywgNywgNCwgMSwgMjMwLCAyNiwgMiwgNDMsIDEwMywgNywgNCwgMSwgMjMwLCAyNiwgMiwgMjIzLCA1NSwgCi0gICAgMTAzLCA3LCAxLCA0LCA2LCAyMzAsIDI1LCA3LCA0LCAxLCAyNTIsIDEzNCwgNzYsIDcsIDEsIDQsIDYsIDIyNiwgMjM0LCA3LCAKLSAgICA0LCAxLCAyNTAsIDAsIDIyNiwgMjAxLCA3LCA0LCAxLCAyMjUsIDEzMywgNywgNCwgMSwgMjE1LCA5NCwgMTUzLCA3LCA0LCAKLSAgICAxLCAyMTUsIDk0LCAyMjMsIDIyNCwgMiwgMTk5LCAyMzMsIDM2LCA3LCA0LCAxLCAyMTUsIDk0LCAyMjMsIDIyNCwgMiwgCi0gICAgMTAzLCA3LCA0LCAxLCAyMjMsIDIyNCwgMiwgMTk5LCAyMzMsIDM2LCA3LCA0LCAxLCAyMjMsIDIyNCwgMiwgMjE3LCA3NywgCi0gICAgNywgNCwgMSwgMjIzLCAyMjQsIDIsIDI0NCwgODcsIDcsIDQsIDEsIDIyMywgNDksIDIyMywgMjI0LCAyLCAyNDQsIDg3LCA3LCAKLSAgICAxLCA0LCA2LCAxNTMsIDcsIDEsIDQsIDYsIDIzNSwgMTkzLCAxNTMsIDcsIDQsIDEsIDIyMiwgOTIsIDIsIDEwMywgNywgNCwgCi0gICAgMSwgMjQ1LCA3NSwgNywgNCwgMSwgMjQ3LCAxMTksIDIzNSwgMTQ1LCAyLCAyMTgsIDEwMywgMjIsIDEwMywgNywgNCwgMSwgCi0gICAgMjE4LCAyMzEsIDIyMywgNDksIDI0NSwgNzUsIDcsIDQsIDEsIDI0NSwgNzYsIDIsIDI0OSwgMTAwLCA3LCA0LCAxLCAyMTUsIAotICAgIDk0LCAyMTcsIDE1MiwgNywgNCwgMSwgMjE3LCAxNTMsIDIsIDIyMywgNTUsIDEwMywgNywgNCwgMSwgMTA0LCAxMzAsIDcsIAotICAgIDQsIDEsIDIxNCwgMTU3LCA3LCA0LCAxLCAyMTQsIDEwNiwgMiwgMTAzLCA3LCA0LCAxLCAyMTUsIDk0LCAyMTQsIDEwNSwgNywgCi0gICAgNCwgMSwgMjE1LCA5NCwgMjEyLCA5OCwgNywgNCwgMSwgMjE1LCA5NCwgMjExLCAxMTcsIDcsIDEsIDQsIDYsIDIxMSwgMTE3LCAKLSAgICA3LCA0LCAxLCAyMTAsIDE2MCwgMiwgMjIzLCA1NSwgMTAzLCA3LCA0LCAxLCAyMTAsIDE2MCwgMiwgMjQ5LCAxMDAsIDcsIDQsIAotICAgIDEsIDI0NSwgOCwgNywgNCwgMSwgMjQ1LCA5LCAyLCAyNDksIDEwMCwgNywgMSwgMjQyLCAxODAsIDIxOCwgMTI5LCA3LCAxLCAKLSAgICAyMjUsIDEzOSwgMjEzLCAxMzUsIDI0MywgMjQ5LCA3LCAxLCAyMzUsIDE5MywgMjQyLCAxODAsIDIxOCwgMTI5LCA3LCAxLCAKLSAgICAyMTgsIDExMCwgMjUxLCA2NiwgNywgMSwgMjUxLCAyNDYsIDI1MCwgMTEsIDcsIDEsIDQsIDYsIDI1MywgMTU4LCA3LCA0LCAKLSAgICAxLCAyNTAsIDAsIDIwNCwgNzUsIDcsIDEsIDQsIDYsIDI0MywgMjAzLCAyLCAxMDMsIDcsIDEsIDQsIDYsIDI0MiwgNjAsIDcsIAotICAgIDQsIDEsIDIzNSwgMTQ1LCAyLCAyNDksIDEyNywgNywgNCwgMSwgMjE1LCA5NCwgMjM1LCAyMywgNywgMSwgNCwgNiwgMTU2LCAKLSAgICA3LCA0LCAxLCAyMjQsIDk3LCAyLCAxMDMsIDcsIDEsIDI0MiwgMTgwLCAyMTgsIDEzMCwgMiwgOTEsIDcsIDEsIDIyMywgNDksIAotICAgIDI0MiwgMTgwLCAyMTgsIDEzMCwgMiwgOTEsIDcsIDQsIDEsIDI0NiwgNDAsIDI0NywgMjIwLCA3LCA0LCAxLCAyNDgsIDI2LCAKLSAgICAyNDcsIDIyMCwgNywgNCwgMSwgMjQ2LCA0MCwgMjQ3LCAyMjEsIDIsIDI0OSwgMTAwLCA3LCA0LCAxLCAyMTUsIDE4NSwgCi0gICAgMjQ3LCAyMjAsIDcsIDQsIDEsIDIxNiwgMjM1LCAyNDcsIDIyMCwgNywgNCwgMSwgMjE3LCAyOSwgMjQ3LCAyMjEsIDIsIAotICAgIDI0OSwgMTAwLCA3LCA0LCAxLCAyNDQsIDEzNCwgMjQ3LCAyMjAsIDcsIDQsIDEsIDIzMiwgMTAwLCAyNDcsIDIyMCwgNywgNCwgCi0gICAgMSwgMjMyLCA1MSwgMjQ3LCAyMjAsIDcsIDEsIDI1MSwgMjQ2LCAyMjUsIDE4MSwgNywgMSwgMjUxLCAyNTQsIDIyNSwgMTgxLCAKLSAgICA3LCA0LCAxLCAyMTUsIDk0LCAyNDIsIDYxLCAyLCAyNDQsIDg3LCA3LCA0LCAxLCAyMTUsIDk0LCAyNDIsIDYxLCAyLCAyNDQsIAotICAgIDg4LCAyMiwgMjE3LCA3NywgNTgsIDEsIDQsIDI0MiwgNjAsIDU4LCAxLCA0LCAyNDIsIDYxLCAyLCAxMDMsIDU4LCAxLCA0LCAKLSAgICAyMzUsIDE0NCwgNTgsIDEsIDQsIDE1MywgNTgsIDEsIDQsIDIxNSwgOTQsIDE1MywgNTgsIDEsIDQsIDIxNSwgOTQsIDIyMywgCi0gICAgMjI0LCAyLCAxMDMsIDU4LCAxLCA0LCA2LCAyMzUsIDE5MywgMTUzLCA1OCwgMSwgNCwgMjEyLCA5OCwgNTgsIDEsIDQsIAotICAgIDIxMSwgMTE3LCA1OCwgMSwgMjI0LCAxOTAsIDU4LCAxLCA1MiwgMjI0LCAxOTAsIDU4LCAxLCAyMTUsIDk0LCAyNDksIDIxOSwgCi0gICAgNTgsIDEsIDI1NCwgNTcsIDU4LCAxLCAyMjMsIDQ5LCAyNDksIDIxOSwgNTgsIDEsIDQ0LCAxNjMsIDIyMiwgMjMzLCA1OCwgCi0gICAgMSwgNDMsIDE2MywgMjIyLCAyMzMsIDU4LCAxLCAyNDIsIDE4MCwgMjE4LCAxMjksIDU4LCAxLCAyMjMsIDQ5LCAyNDIsIAotICAgIDE4MCwgMjE4LCAxMjksIDU4LCAxLCA0MywgMjUzLCAyNDksIDU4LCAxLCA0NCwgMjUzLCAyNDksIDU4LCAxLCAxMjAsIDI1MywgCi0gICAgMjQ5LCA1OCwgMSwgMTI0LCAyNTMsIDI0OSwgNTgsIDEsIDI1MCwgMzEsIDI1NSwgMTQsIDI1MCwgMjM0LCA1OCwgMSwgNjcsIAotICAgIDIzMiwgMjEzLCA1OCwgMSwgMjMxLCAyMzIsIDU4LCAxLCAyNTUsIDMsIDI1NSwgMTQsIDU4LCAxLCAyNDIsIDEzNywgMjU1LCAKLSAgICAxNCwgNTgsIDEsIDEyMSwgNjcsIDIzMiwgMjEzLCA1OCwgMSwgMTIxLCAyMzEsIDIzMiwgNTgsIDEsIDEyMSwgMjQyLCAxMzcsIAotICAgIDI1NSwgMTQsIDU4LCAxLCAxMjEsIDI1NSwgMywgMjU1LCAxNCwgNTgsIDEsIDIxNSwgMjIyLCAyNDksIDIyNiwgNTgsIDEsIAotICAgIDE2MywgMjE1LCAyMjIsIDI0OSwgMjI2LCA1OCwgMSwgMjUwLCAxNzMsIDQ0LCAxNjMsIDIyMiwgMjMzLCA1OCwgMSwgMjUwLCAKLSAgICAxNzMsIDQzLCAxNjMsIDIyMiwgMjMzLCA1OCwgMSwgMTIwLCAyMTcsIDg3LCA1OCwgMSwgMTI0LCAyMTcsIDg3LCA1OCwgMSwgCi0gICAgOTYsIDUwLCA1OCwgMSwgMjMwLCAxODIsIDUwLCAyNTEsIDE0NiwgNTksIDQ4LCAyMjIsIDIzNCwgNDgsIDIyNiwgMjI0LCA0LCAKLSAgICAxODIsIDUyLCAyNTUsIDMsIDI1NSwgMTQsIDU4LCAxLCAyMjMsIDM2LCAxMDMsIDU4LCAxLCAyNDksIDEzMSwgMjU1LCAxNCwgCi0gICAgNTgsIDEsIDQsIDI0MywgMTA3LCA1OCwgMSwgNCwgMTU2LCA1OCwgMSwgNCwgMjIyLCA5MSwgNTgsIDEsIDQsIDIxMSwgMTc4LCAKLSAgICA1OCwgMSwgNCwgMjIzLCA0OSwgMjQyLCAxODAsIDIxOCwgMTI5LCA1OCwgMSwgMjQ1LCAyMCwgMTM4LCAxMzAsIDU4LCAxLCAKLSAgICAxMjUsIDEzOCwgMTMwLCA1OCwgMSwgMjMwLCAyMjUsIDEzOCwgMTMwLCA1OCwgMSwgMTIxLCAxMzgsIDEzMCwgNTgsIDEsIAotICAgIDI0NSwgMTksIDEzOCwgMTMwLCA1OCwgMSwgMjEwLCAyNTQsIDI0OCwgNDQsIDEzOCwgNzgsIDU4LCAxLCAyMTEsIDcwLCAKLSAgICAyNDgsIDQ0LCAxMzgsIDc4LCA1OCwgMSwgMjEzLCAxMzMsIDU4LCAxLCAyMTQsIDE4NiwgNTgsIDEsIDUyLCAyNTQsIDU3LCAKLSAgICA1OCwgMSwgMTIxLCAxMjQsIDI1MywgMjQ5LCA1OCwgMSwgMTIxLCAxMjAsIDI1MywgMjQ5LCA1OCwgMSwgMTIxLCA0MywgCi0gICAgMjUzLCAyNDksIDU4LCAxLCAxMjEsIDQ0LCAyNTMsIDI0OSwgNTgsIDEsIDEyMSwgMjIyLCAyMzMsIDU4LCAxLCAyMzAsIAotICAgIDIyNCwgMjQyLCAxMzcsIDI1NSwgMTQsIDU4LCAxLCAyMzAsIDIyNCwgNTIsIDI0MiwgMTM3LCAyNTUsIDE0LCA1OCwgMSwgCi0gICAgMjMwLCAyMjQsIDUyLCAyNTUsIDMsIDI1NSwgMTQsIDU4LCAxLCAxMjEsIDE4MiwgNTgsIDEsIDIyMywgMTU3LCAyNDksIAotICAgIDIyNiwgNTgsIDEsIDI1MiwgNTgsIDEyNSwgMjE2LCAzMCwgNTgsIDEsIDI0NSwgMTQzLCAxMjUsIDIxNiwgMzAsIDU4LCAxLCAKLSAgICAyNTIsIDU4LCAxMjEsIDIxNiwgMzAsIDU4LCAxLCAyNDUsIDE0MywgMTIxLCAyMTYsIDMwLCA1OCwgMSwgMjIwLCA1NCwgNTgsIAotICAgIDEsIDIwNCwgMjIwLCA1NCwgNTgsIDEsIDEyMSwgNDMsIDc0LCAzOCwgMjQyLCAxMzcsIDI1NSwgMTQsIDM4LCAyNTUsIDMsIAotICAgIDI1NSwgMTQsIDM4LCAyNTAsIDMxLCAyNTUsIDE0LCAzOCwgMTgyLCAzOCwgMjMxLCAyMzIsIDM4LCAyMjYsIDExOSwgMzgsIAotICAgIDI1MSwgMTQ2LCAzOCwgNTksIDQ4LCAzOCwgMjQ4LCAxLCAzOCwgMjQxLCA1MiwgNDgsIDM4LCAyMjIsIDIzNCwgNDgsIDM4LCAKLSAgICA1MiwgMjU1LCAzLCAyNTUsIDE0LCAzOCwgMjUwLCAyMzQsIDM4LCA2NywgMjMyLCAyMTQsIDQ4LCAzOCwgNTIsIDY3LCAyMzIsIAotICAgIDIxNCwgNDgsIDM4LCA1MiwgMjQyLCAxMzcsIDI1NSwgMTQsIDM4LCAyNTAsIDI1NSwgMzgsIDIzNSwgMTkzLCAyNTEsIDE0NiwgCi0gICAgMzgsIDIxNSwgOTQsIDI0OSwgMjIwLCA0OCwgMzgsIDI0OSwgMjIwLCA0OCwgMzgsIDIyMywgNDksIDI0OSwgMjIwLCA0OCwgCi0gICAgMzgsIDI0OSwgMjIwLCA3NywgMjIyLCAyNTEsIDM4LCAyNDIsIDEzNywgMjU1LCAxNSwgNTEsIDM4LCAyNTUsIDMsIDI1NSwgCi0gICAgMTUsIDUxLCAzOCwgNDMsIDIxNywgODgsIDUxLCAzOCwgNDQsIDIxNywgODgsIDUxLCAzOCwgNDMsIDI1NCwgMTEwLCA0OCwgCi0gICAgMzgsIDI0MCwgMjQ4LCAzOCwgNDMsIDE2MywgMjIyLCAyMzQsIDUxLCAzOCwgMTIwLCAyMTcsIDg4LCA1MSwgMzgsIDEyNCwgCi0gICAgMjE3LCA4OCwgNTEsIDM4LCA5NiwgNSwgNTEsIDM4LCAyMzAsIDE4MiwgNSwgNTEsIDM4LCAyMjYsIDY0LCAyNDEsIDUyLCAKLSAgICA1MSwgMzgsIDIyMywgNTUsIDI0MSwgNTIsIDUxLCAzOCwgNTksIDUxLCAzOCwgMjQ4LCAyLCA1MSwgMzgsIDIyMiwgMjM0LCAKLSAgICA1MSwgMzgsIDI0OSwgMjIwLCA1MSwgMzgsIDI1MCwgMTgzLCAzOCwgMjI2LCAyMjQsIDM4LCA2NywgMjMyLCAyMTQsIDUxLCAKLSAgICAzOCwgMjUxLCAxNDAsIDUxLCAzOCwgMjM1LCAxOTMsIDUyLCAyNTQsIDI0LCA1MSwgMzgsIDI1MCwgMjM1LCA1MSwgMzgsIAotICAgIDI1MCwgMzEsIDI1NSwgMTUsIDUxLCAzOCwgMjUxLCAxNDcsIDUxLCAzOCwgMjM1LCAxOTMsIDI1MSwgMTQ3LCA1MSwgMzgsIAotICAgIDIxNiwgODksIDUxLCAzOCwgMjMxLCAyMzMsIDUxLCAzOCwgMTIxLCAyMzIsIDIxMywgMzgsIDUyLCAxMjEsIDIzMiwgMjEzLCAKLSAgICAzOCwgMjE2LCA4OSwgMjI2LCAxMjAsIDM4LCAyMTksIDI1MSwgMjE4LCAxMDMsIDIyNiwgMTIwLCAzOCwgMTk5LCAyMTgsIAotICAgIDEwMywgMjI2LCAxMjAsIDM4LCAyMTksIDI1MSwgMjE5LCA0NywgMjI2LCAxMjAsIDM4LCAxOTksIDIxOSwgNDcsIDIyNiwgCi0gICAgMTIwLCAzOCwgNDQsIDE2MywgMjIyLCAyMzQsIDUxLCAzOCwgMjM1LCAxOTMsIDI1MSwgMTQwLCA1MSwgMzgsIDQyLCA1MSwgCi0gICAgMzgsIDIyMSwgMTgwLCA1MSwgMzgsIDIxMSwgMTc5LCA0OCwgMzgsIDY3LCAxODIsIDM4LCA1MiwgMjI2LCAxMTksIDM4LCAKLSAgICAyNDIsIDEzNywgMTM4LCA3OCwgMzgsIDI1NSwgMywgMTM4LCA3OCwgMzgsIDI2LCAyMjUsIDE3NSwgMzgsIDI2LCAyMzQsIDIsIAotICAgIDM4LCAyNiwgMjQ3LCAyNTIsIDIxNiwgMTgsIDM4LCAyNiwgMjEwLCAyMTksIDM4LCAyNTEsIDE0MCwgNDgsIDM4LCAyNDUsIAotICAgIDk4LCA1LCA1MSwgMzgsIDUyLCA2NywgMjMyLCAyMTQsIDUxLCAzOCwgNDMsIDI1NCwgMTEwLCA1MSwgMzgsIDIyOCwgNTIsIAotICAgIDIxNiwgODksIDQ4LCAzOCwgMjQxLCA1OCwgNDgsIDM4LCAyNTQsIDE0OCwgMTI4LCAyMTYsIDQyLCA0OCwgMzgsIDQzLCA0NCwgCi0gICAgODAsIDUxLCAzOCwgMjE0LCAxNTMsIDgwLCA1MSwgMzgsIDI0MiwgMTQyLCAyMzUsIDYzLCAzOCwgNDQsIDI1MywgMjUwLCAKLSAgICA0OCwgMzgsIDQzLCAxNjMsIDIyMiwgMjM0LCA0OCwgMzgsIDI0NCwgMTMxLCAzOCwgMjExLCAxNzksIDUxLCAzOCwgNDMsIAotICAgIDI1MywgMjUwLCA1MSwgMzgsIDQ0LCAyNTMsIDI1MCwgNTEsIDM4LCA0NCwgMjUzLCAyNTAsIDIyLCAxMjAsIDI1MywgMjUwLCAKLSAgICA1MSwgMzgsIDQ0LCAxNjMsIDIyMiwgMjM0LCA0OCwgMzgsIDU5LCA3NywgMjIyLCAyNTEsIDM4LCAyNTMsIDIxNywgNTEsIAotICAgIDM4LCA1MiwgMjIyLCAyMzQsIDUxLCAzOCwgMjEwLCAzNSwgNDgsIDM4LCA1MiwgMjUxLCAxNDcsIDUxLCAzOCwgNTIsIDI1MSwgCi0gICAgMTQ2LCAzOCwgNTIsIDIzMSwgMjMyLCAzOCwgNTIsIDIzMSwgMjMzLCA1MSwgMzgsIDUyLCAxODIsIDM4LCA1MiwgMjM1LCAKLSAgICAxOTMsIDI1MSwgMTQ2LCAzOCwgNTIsIDk3LCA4MCwgNTEsIDM4LCA3LCA0LCAxLCA2MSwgMzgsIDcsIDQsIDEsIDc1LCAzOCwgCi0gICAgNywgNCwgMSwgNzMsIDM4LCA3LCA0LCAxLCA3NiwgMzgsIDcsIDQsIDEsIDcwLCAzOCwgNywgNCwgMSwgMjUxLCA2NiwgMzgsIAotICAgIDcsIDQsIDEsIDI0OSwgNjAsIDM4LCA3LCA0LCAxLCAyNDIsIDYwLCAzOCwgNywgNCwgMSwgMTkzLCAzOCwgNywgNCwgMSwgCi0gICAgMTUzLCAzOCwgNywgNCwgMSwgMjE3LCAxNTIsIDM4LCA3LCA0LCAxLCAyMTQsIDEwNSwgMzgsIDcsIDQsIDEsIDIxMSwgMTc4LCAKLSAgICAyNiwgNiwgMSwgMjQxLCAxOTYsIDI2LCA0LCAxLCAyNDEsIDE5NiwgMjYsIDYsIDEsIDI1NCwgMjMsIDIyMSwgMjQ2LCAyNiwgCi0gICAgNCwgMSwgMjU0LCAyMywgMjIxLCAyNDYsIDI2LCAyMjcsIDE5OCwgNTAsIDI2LCAyMzIsIDEwOCwgMjI3LCAxOTgsIDUwLCAKLSAgICAyNiwgNiwgMSwgMjI2LCA1MSwgMjQ3LCAyMjcsIDI2LCA0LCAxLCAyMjYsIDUxLCAyNDcsIDIyNywgMjYsIDIxMCwgMjE5LCAKLSAgICAyNiwgNCwgMjIzLCA0OSwgMjMyLCA4MywgMjE5LCAxNzgsIDg3LCAyNiwgNCwgMjQ2LCAxMTgsIDIzMiwgODMsIDIxOSwgCi0gICAgMTc4LCA4NywgMjYsIDQsIDIyMywgNDksIDI0NiwgMTE4LCAyMzIsIDgzLCAyMTksIDE3OCwgODcsIDI2LCAyMjQsIDEzLCAKLSAgICA3OCwgMjYsIDIxNiwgMTgsIDI2LCAyNDcsIDI1MiwgMjE2LCAxOCwgMjYsIDYsIDEsIDI1NCwgMTQ0LCAyLCAyMTYsIDE4LCAKLSAgICAyNiwgMjU0LCA5NywgMjE3LCAyLCAyNiwgNiwgMSwgMjQ1LCAxMDEsIDIsIDIxNiwgMTgsIDI2LCA2LCAxLCAyNDUsIDY0LCAKLSAgICAyLCAyMTYsIDE4LCAyNiwgNiwgMSwgMjM1LCAxODYsIDIsIDIxNiwgMTgsIDI2LCA2LCAxLCAyMjYsIDIwMCwgMiwgMjE2LCAKLSAgICAxOCwgMjYsIDYsIDEsIDIxNCwgMTU4LCAyLCAyMTYsIDE4LCAyNiwgNiwgMSwgMjI2LCAyMDIsIDIsIDIxNiwgMTgsIDI2LCAKLSAgICA0LCAxLCAyMzUsIDE4NiwgMiwgMjQ3LCAyNTIsIDIyLCAyMTYsIDE4LCAyNiwgNiwgMSwgMjU0LCAxNDMsIDI2LCA2LCAxLCAKLSAgICAyNTIsIDI2LCAyNiwgNiwgMSwgMjQzLCAxMDcsIDI2LCA2LCAxLCAyNDgsIDU0LCAyNiwgNiwgMSwgMjQ1LCAxMDAsIDI2LCAKLSAgICA2LCAxLCAyMTAsIDg1LCAyNiwgNiwgMSwgMjQ1LCA2MywgMjYsIDYsIDEsIDIxNiwgMTc5LCAyNiwgNiwgMSwgMjM1LCAxODUsIAotICAgIDI2LCA2LCAxLCAyMzQsIDIyMiwgMjYsIDYsIDEsIDIzMywgOTgsIDI2LCA2LCAxLCAyMzAsIDEwMiwgMjYsIDYsIDEsIDIyNywgCi0gICAgMjM3LCAyNiwgNiwgMSwgMjExLCAxNTcsIDI2LCA2LCAxLCAyMjYsIDE5OSwgMjYsIDYsIDEsIDIyNSwgMTA4LCAyNiwgNiwgCi0gICAgMSwgMjIzLCAzNywgMjYsIDYsIDEsIDIxOSwgMTc3LCAyNiwgNiwgMSwgMjE3LCA0MSwgMjYsIDYsIDEsIDIxNCwgMTU3LCAKLSAgICAyNiwgNiwgMSwgMjI1LCAxMzMsIDI2LCA2LCAxLCAyNTAsIDExMCwgMjYsIDYsIDEsIDIyNCwgMTYxLCAyNiwgNiwgMSwgCi0gICAgMjI2LCAyMDEsIDI2LCA2LCAxLCAyMzUsIDE4NiwgMiwgMjQ3LCAyNTEsIDI2LCA2LCAxLCAyMTQsIDE1OCwgMiwgMjQ3LCAKLSAgICAyNTEsIDI2LCA0LCAxLCAyNTQsIDE0NCwgMiwgMjE2LCAxOCwgMjYsIDQsIDEsIDI0NSwgMTAxLCAyLCAyMTYsIDE4LCAyNiwgCi0gICAgNCwgMSwgMjQ1LCA2NCwgMiwgMjE2LCAxOCwgMjYsIDQsIDEsIDIzNSwgMTg2LCAyLCAyMTYsIDE4LCAyNiwgNCwgMSwgMjE0LCAKLSAgICAxNTgsIDIsIDI0NywgMjUyLCAyMiwgMjE2LCAxOCwgMjYsIDQsIDEsIDI1NCwgMTQzLCAyNiwgNCwgMSwgMjUyLCAyNiwgMjYsIAotICAgIDQsIDEsIDI0MywgMTA3LCAyNiwgNCwgMSwgMjQ4LCA1NCwgMjYsIDQsIDEsIDI0NSwgMTAwLCAyNiwgNCwgMSwgMjEwLCA4NSwgCi0gICAgMjYsIDQsIDEsIDI0NSwgNjMsIDI2LCA0LCAxLCAyMTYsIDE3OSwgMjYsIDQsIDEsIDIzNSwgMTg1LCAyNiwgNCwgMSwgMjM0LCAKLSAgICAyMjIsIDI2LCA0LCAxLCAyMzMsIDk4LCAyNiwgNCwgMSwgMjMwLCAxMDIsIDI2LCA0LCAxLCAyMjcsIDIzNywgMjYsIDQsIDEsIAotICAgIDIxMSwgMTU3LCAyNiwgNCwgMSwgMjI2LCAxOTksIDI2LCA0LCAxLCAyMjUsIDEwOCwgMjYsIDQsIDEsIDIyMywgMzcsIDI2LCAKLSAgICA0LCAxLCA0MCwgMjE5LCAxNzcsIDI2LCA0LCAxLCAyMTksIDE3NywgMjYsIDQsIDEsIDIxNywgNDEsIDI2LCA0LCAxLCAyMTQsIAotICAgIDE1NywgMjYsIDQsIDEsIDIyNSwgMTMzLCAyNiwgNCwgMSwgMjUwLCAxMTAsIDI2LCA0LCAxLCAyMjQsIDE2MSwgMjYsIDQsIAotICAgIDEsIDIyNiwgMjAxLCAyNiwgNCwgMSwgMjM1LCAxODYsIDIsIDI0NywgMjUxLCAyNiwgNCwgMSwgMjE0LCAxNTgsIDIsIDI0NywgCi0gICAgMjUxLCAyNiwgNCwgMSwgMjI2LCAyMDAsIDIsIDIxNiwgMTgsIDI2LCA0LCAxLCAyMTQsIDE1OCwgMiwgMjE2LCAxOCwgMjYsIAotICAgIDQsIDEsIDIyNiwgMjAyLCAyLCAyMTYsIDE4LCAyNiwgNiwgMjM0LCAyNDcsIDg3LCAyNiwgMjUyLCAyNywgODcsIDI2LCAKLSAgICAyMTYsIDE4MCwgODcsIDI2LCAyMTQsIDE1OCwgMiwgMjQxLCA1MiwgODcsIDI2LCAyMTQsIDE1OCwgMiwgMjU1LCAzLCAyMiwgCi0gICAgMjQxLCA1MiwgODcsIDI2LCAyMTQsIDE1OCwgMiwgMjQ4LCAyLCAyMiwgMjQxLCA1MiwgODcsIDI2LCAyMjUsIDEzNCwgODcsIAotICAgIDI2LCAyMjUsIDEwOSwgODcsIDI2LCAyMzQsIDI0NywgODcsIDI2LCAxLCAyNTQsIDIzLCAyMzQsIDYsIDI2LCA0LCAxLCAKLSAgICAyNTQsIDIzLCAyMzQsIDYsIDI2LCAxLCAyMTgsIDEzNywgMjYsIDQsIDEsIDIxOCwgMTM3LCAyNiwgMSwgMjQ3LCAyMjcsIAotICAgIDI2LCA0LCAxLCAyNDcsIDIyNywgMjYsIDEsIDIzNCwgNiwgMjYsIDQsIDEsIDIzNCwgNiwgMjYsIDEsIDIyMSwgMjQ2LCAyNiwgCi0gICAgNCwgMSwgMjIxLCAyNDYsIDgxLCA2LCAxLCAyMjAsIDU1LCA4MSwgNCwgMSwgMjIwLCA1NSwgODEsIDYsIDEsIDI0NCwgMTQwLCAKLSAgICA4MSwgNCwgMSwgMjQ0LCAxNDAsIDgxLCA2LCAxLCAyMzQsIDExNywgODEsIDQsIDEsIDIzNCwgMTE3LCA4MSwgNiwgMSwgCi0gICAgMjQxLCA0NSwgODEsIDQsIDEsIDI0MSwgNDUsIDgxLCA2LCAxLCAyNDMsIDEwMiwgODEsIDQsIDEsIDI0MywgMTAyLCA4MSwgCi0gICAgNiwgMSwgMjIwLCAyMiwgODEsIDQsIDEsIDIyMCwgMjIsIDgxLCA2LCAxLCAyNDgsIDY5LCA4MSwgNCwgMSwgMjQ4LCA2OSwgCi0gICAgMjYsIDIzNCwgMjIzLCA4NywgMjYsIDIyMywgMzgsIDg3LCAyNiwgMjMyLCA4MywgMjE5LCAxNzgsIDg3LCAyNiwgMSwgMjEwLCAKLSAgICAyMjQsIDI2LCA2LCAyMTYsIDE4MCwgODcsIDI2LCAyMzIsIDgzLCAyNDUsIDEwMSwgODcsIDI2LCAyMjMsIDQ5LCAyMzIsIAotICAgIDgzLCAyNDUsIDEwMSwgODcsIDI2LCA2LCAxLCAyMjAsIDcsIDI2LCA0LCAxLCAyMjAsIDcsIDI2LCA2LCAyMzIsIDgzLCAKLSAgICAyMTksIDE3OCwgODcsIDI2LCA2LCAxLCAyMjEsIDI0MywgMjYsIDQsIDEsIDIyMSwgMjQzLCAyNiwgMjIzLCAzOCwgMiwgCi0gICAgMjE4LCAxMDMsIDg3LCAyNiwgNiwgMjIzLCA0OSwgMjMyLCA4MywgMjE5LCAxNzgsIDg3LCAyNiwgNiwgMjQ2LCAxMTgsIAotICAgIDIzMiwgODMsIDIxOSwgMTc4LCA4NywgMjYsIDYsIDIyMywgNDksIDI0NiwgMTE4LCAyMzIsIDgzLCAyMTksIDE3OCwgODcsIAotICAgIDMzLCA2LCAxLCAyMzYsIDYxLCAyLCAyNDIsIDEzNiwgMzMsIDYsIDEsIDIzNSwgMTg5LCAzMywgNiwgMSwgMjQ3LCAxNjIsIAotICAgIDMzLCA2LCAxLCAyNDIsIDE4NywgMzMsIDYsIDEsIDIxNCwgMjAyLCAyMzYsIDYwLCAzMywgNiwgMSwgMjQ2LCAzNiwgMzMsIAotICAgIDYsIDEsIDI1MSwgNzYsIDczLCAzMywgNiwgMSwgMjExLCA4LCAzMywgNiwgMSwgMjM1LCAxMjYsIDMzLCA2LCAxLCAyMzIsIAotICAgIDE4NywgMzMsIDYsIDEsIDIyOCwgMTc4LCAzMywgNiwgMSwgMjE1LCAxNzQsIDMzLCA2LCAxLCAyMzQsIDQ4LCAzMywgNiwgMSwgCi0gICAgMjQwLCAxNTQsIDIsIDI0MiwgMTM2LCAzMywgNiwgMSwgMjE5LCAyNTEsIDcwLCAzMywgNiwgMSwgMjQ2LCAzMiwgMzMsIDYsIAotICAgIDEsIDYxLCAzMywgNiwgMSwgMjUyLCA3NSwgMzMsIDYsIDEsIDIxMywgMjU1LCAzMywgNiwgMSwgMjQyLCAyMzYsIDMzLCA2LCAKLSAgICAxLCAyNDgsIDkwLCAzMywgNiwgMSwgMjM2LCA2MCwgMzMsIDYsIDEsIDIxMCwgNzQsIDMzLCA2LCAxLCAyMTAsIDk0LCAzMywgCi0gICAgNiwgMSwgNzMsIDMzLCA2LCAxLCAyMTksIDI1MSwgNzMsIDMzLCA2LCAxLCAxNzYsIDMzLCA2LCAxLCAyNDUsIDE3NCwgMzMsIAotICAgIDYsIDEsIDI0NSwgMTU5LCAzMywgNiwgMSwgMjQ1LCAxNTAsIDMzLCA2LCAxLCA3NiwgMzMsIDYsIDEsIDIyNSwgMjIxLCAzMywgCi0gICAgNiwgMSwgMjQ1LCA5MiwgMzMsIDYsIDEsIDI0NSwgODIsIDMzLCA2LCAxLCAyMTcsIDIyLCAzMywgNiwgMSwgNzAsIDMzLCA2LCAKLSAgICAxLCAyNDUsIDIwMiwgMzMsIDYsIDEsIDE2MiwgMzMsIDYsIDEsIDIxNSwgMTc4LCAzMywgNiwgMSwgMjUwLCAxMzEsIDMzLCAKLSAgICA2LCAxLCAyMjAsIDEwMiwgMzMsIDYsIDEsIDIyMCwgNjUsIDMzLCA2LCAxLCAyNDIsIDMsIDUwLCAzMywgNiwgMSwgMjExLCAKLSAgICAyNywgMzMsIDYsIDEsIDIxOSwgNTIsIDUwLCAzMywgNiwgMSwgNzUsIDMzLCA2LCAxLCAyMTAsIDIxMiwgMzMsIDYsIDEsIAotICAgIDE5MSwgMzMsIDQsIDEsIDYxLCAzMywgNCwgMSwgMjUyLCA3NSwgMzMsIDQsIDEsIDIxMywgMjU1LCAzMywgNCwgMSwgMjQyLCAKLSAgICAyMzYsIDMzLCA0LCAxLCAyNDgsIDkwLCAzMywgNCwgMSwgMjM2LCA2MCwgMzMsIDQsIDEsIDIxMCwgNzQsIDMzLCA0LCAxLCAKLSAgICAyMTAsIDk0LCAzMywgNCwgMSwgNzMsIDMzLCA0LCAxLCAyMTksIDI1MSwgNzMsIDMzLCA0LCAxLCAxNzYsIDMzLCA0LCAxLCAKLSAgICAyNDUsIDE3NCwgMzMsIDQsIDEsIDI0NSwgMTU5LCAzMywgNCwgMSwgMjQ1LCAxNTAsIDMzLCA0LCAxLCA3NiwgMzMsIDQsIDEsIAotICAgIDIyNSwgMjIxLCAzMywgNCwgMSwgMjQ1LCA5MiwgMzMsIDQsIDEsIDI0NSwgODIsIDMzLCA0LCAxLCAyMTcsIDIyLCAzMywgNCwgCi0gICAgMSwgNzAsIDMzLCA0LCAxLCAyNDUsIDIwMiwgMzMsIDQsIDEsIDE2MiwgMzMsIDQsIDEsIDIxNSwgMTc4LCAzMywgNCwgMSwgCi0gICAgMjUwLCAxMzEsIDMzLCA0LCAxLCAyMjAsIDEwMiwgMzMsIDQsIDEsIDIyMCwgNjUsIDMzLCA0LCAxLCAyNDIsIDMsIDUwLCAKLSAgICAzMywgNCwgMSwgMjExLCAyNywgMzMsIDQsIDEsIDIxOSwgNTIsIDUwLCAzMywgNCwgMSwgNzUsIDMzLCA0LCAxLCAyMTAsIAotICAgIDIxMiwgMzMsIDQsIDEsIDE5MSwgMzMsIDQsIDEsIDIzNiwgNjEsIDIsIDI0MiwgMTM2LCAzMywgNCwgMSwgMjM1LCAxODksIAotICAgIDMzLCA0LCAxLCAyNDcsIDE2MiwgMzMsIDQsIDEsIDI0MiwgMTg3LCAzMywgNCwgMSwgMjE0LCAyMDIsIDIzNiwgNjAsIDMzLCAKLSAgICA0LCAxLCAyNDYsIDM2LCAzMywgNCwgMSwgMjUxLCA3NiwgNzMsIDMzLCA0LCAxLCAyMTEsIDgsIDMzLCA0LCAxLCAyMzUsIAotICAgIDEyNiwgMzMsIDQsIDEsIDIzMiwgMTg3LCAzMywgNCwgMSwgMjI4LCAxNzgsIDMzLCA0LCAxLCAyMTUsIDE3NCwgMzMsIDQsIAotICAgIDEsIDIzNCwgNDgsIDMzLCA0LCAxLCAyNDAsIDE1NCwgMiwgMjQyLCAxMzYsIDMzLCA0LCAxLCAyMTksIDI1MSwgNzAsIDMzLCAKLSAgICA0LCAxLCAyNDYsIDMyLCAzMywgNiwgMSwgMjI2LCAyMDEsIDMzLCA0LCAxLCAyMjYsIDIwMSwgMzMsIDYsIDEsIDIxMSwgNTksIAotICAgIDMzLCA0LCAxLCAyMTEsIDU5LCAzMywgNiwgMSwgMjM1LCAxODMsIDc1LCAzMywgNCwgMSwgMjM1LCAxODMsIDc1LCAzMywgNiwgCi0gICAgMSwgMjMyLCAxOTIsIDIxMCwgMTgzLCAzMywgNCwgMSwgMjMyLCAxOTIsIDIxMCwgMTgzLCAzMywgNiwgMSwgMjM1LCAxODMsIAotICAgIDIzMiwgMTkyLCAyMTAsIDE4MywgMzMsIDQsIDEsIDIzNSwgMTgzLCAyMzIsIDE5MiwgMjEwLCAxODMsIDMzLCA2LCAxLCAKLSAgICAyNTEsIDI0OSwgMjEwLCAxODMsIDMzLCA0LCAxLCAyNTEsIDI0OSwgMjEwLCAxODMsIDMzLCA2LCAxLCAyMzUsIDE4MywgCi0gICAgMjUxLCAyNDksIDIxMCwgMTgzLCAzMywgNCwgMSwgMjM1LCAxODMsIDI1MSwgMjQ5LCAyMTAsIDE4MywgMzMsIDYsIDEsIAotICAgIDIzMywgMjMzLCAzMywgNCwgMSwgMjMzLCAyMzMsIDMzLCA2LCAxLCAyMjQsIDE2MSwgMzMsIDQsIDEsIDIyNCwgMTYxLCAzMywgCi0gICAgNiwgMSwgMjQ0LCA4MiwgMzMsIDQsIDEsIDI0NCwgODIsIDMzLCA2LCAxLCAyMzUsIDE0NiwgMzMsIDQsIDEsIDIzNSwgMTQ2LCAKLSAgICAzMywgNiwgMSwgMjM1LCAxNDcsIDIsIDUyLCAyNDIsIDEzNywgMjU1LCAxNCwgMzMsIDQsIDEsIDIzNSwgMTQ3LCAyLCA1MiwgCi0gICAgMjQyLCAxMzcsIDI1NSwgMTQsIDMzLCA2LCAxLCAyMTQsIDIwNSwgMzMsIDQsIDEsIDIxNCwgMjA1LCAzMywgNiwgMSwgMjIyLCAKLSAgICAxODUsIDIyNiwgMjAxLCAzMywgNCwgMSwgMjIyLCAxODUsIDIyNiwgMjAxLCAzMywgNiwgMSwgMjI2LCAyMDIsIDIsIDIxNiwgCi0gICAgNjUsIDMzLCA0LCAxLCAyMjYsIDIwMiwgMiwgMjE2LCA2NSwgMzMsIDYsIDEsIDIyNiwgMTQwLCAzMywgNCwgMSwgMjI2LCAKLSAgICAxNDAsIDMzLCA2LCAxLCAyMzQsIDYsIDMzLCA0LCAxLCAyMzQsIDYsIDMzLCAyMTYsIDE0NiwgNTAsIDM4LCAzMywgMjE2LCAKLSAgICA2NSwgMzgsIDMzLCAyMjYsIDY1LCAzOCwgMzMsIDI0OCwgMTU0LCAyMjUsIDE4LCAzOCwgMzMsIDIyNCwgMTU1LCAyMjUsIAotICAgIDE4LCAzOCwgMzMsIDIyNSwgMywgMzgsIDMzLCAyNDAsIDIxMSwgMjE2LCAxNDYsIDUwLCAzOCwgMzMsIDIzMCwgMTkxLCA1MCwgCi0gICAgMzMsIDYsIDEsIDIxOSwgMjUxLCAyNDAsIDE1NCwgMiwgMjE3LCA3NywgMzMsIDQsIDEsIDIxOSwgMjUxLCAyNDAsIDE1NCwgCi0gICAgMiwgMjE3LCA3NywgMzMsIDYsIDEsIDIyMCwgMTQ2LCA1MCwgMzMsIDQsIDEsIDIyMCwgMTQ2LCA1MCwgMzMsIDYsIDEsIAotICAgIDI0NSwgOTMsIDIsIDIxNiwgMTE0LCAzMywgNCwgMSwgMjQ1LCA5MywgMiwgMjE2LCAxMTQsIDMzLCA2LCAxLCAyNDIsIDIzNywgCi0gICAgMiwgMjE0LCAxNTYsIDMzLCA0LCAxLCAyNDIsIDIzNywgMiwgMjE0LCAxNTYsIDMzLCA2LCAxLCAyNDIsIDIzNywgMiwgOTEsIAotICAgIDMzLCA0LCAxLCAyNDIsIDIzNywgMiwgOTEsIDMzLCA2LCAxLCAyNDIsIDIzNywgMiwgMjMwLCAyMjQsIDEwMywgMzMsIDQsIAotICAgIDEsIDI0MiwgMjM3LCAyLCAyMzAsIDIyNCwgMTAzLCAzMywgNiwgMSwgMjEwLCA3NSwgMiwgMjQ4LCAzOSwgMzMsIDQsIDEsIAotICAgIDIxMCwgNzUsIDIsIDI0OCwgMzksIDMzLCA2LCAxLCAyMTAsIDk1LCAyLCAyNDgsIDM5LCAzMywgNCwgMSwgMjEwLCA5NSwgMiwgCi0gICAgMjQ4LCAzOSwgMzMsIDYsIDEsIDIzNSwgMTMsIDIsIDI0OCwgMzksIDMzLCA0LCAxLCAyMzUsIDEzLCAyLCAyNDgsIDM5LCAKLSAgICAzMywgNiwgMSwgMjM1LCAxMywgMiwgNjcsIDkxLCAzMywgNCwgMSwgMjM1LCAxMywgMiwgNjcsIDkxLCAzMywgNiwgMSwgCi0gICAgMjM1LCAxMywgMiwgOTEsIDMzLCA0LCAxLCAyMzUsIDEzLCAyLCA5MSwgMzMsIDYsIDEsIDI1MiwgMTI0LCAxNzYsIDMzLCA0LCAKLSAgICAxLCAyNTIsIDEyNCwgMTc2LCAzMywgNiwgMSwgMjQ1LCAxNTEsIDIsIDI0OCwgMzksIDMzLCA0LCAxLCAyNDUsIDE1MSwgMiwgCi0gICAgMjQ4LCAzOSwgMzMsIDYsIDI3LCAyNDUsIDE1MSwgMjQyLCAyMzYsIDMzLCA0LCAyNywgMjQ1LCAxNTEsIDI0MiwgMjM2LCAKLSAgICAzMywgNiwgMSwgMjI1LCAyMjIsIDIsIDIzMCwgMjI0LCAxMDMsIDMzLCA0LCAxLCAyMjUsIDIyMiwgMiwgMjMwLCAyMjQsIAotICAgIDEwMywgMzMsIDYsIDEsIDI1NSwgMjAsIDE2MiwgMzMsIDQsIDEsIDI1NSwgMjAsIDE2MiwgMzMsIDYsIDEsIDI0NSwgODMsIAotICAgIDIsIDI0OCwgMzksIDMzLCA0LCAxLCAyNDUsIDgzLCAyLCAyNDgsIDM5LCAzMywgNiwgMSwgMjE3LCAyMywgMiwgMjQ4LCAzOSwgCi0gICAgMzMsIDQsIDEsIDIxNywgMjMsIDIsIDI0OCwgMzksIDMzLCA2LCAxLCAyMTgsIDEyMSwgNzAsIDMzLCA0LCAxLCAyMTgsIAotICAgIDEyMSwgNzAsIDMzLCA2LCAxLCAyMTgsIDEyMSwgMTA0LCAyLCA5MSwgMzMsIDQsIDEsIDIxOCwgMTIxLCAxMDQsIDIsIDkxLCAKLSAgICAzMywgNiwgMSwgMjQyLCA0OSwgMiwgMjQ4LCAzOSwgMzMsIDQsIDEsIDI0MiwgNDksIDIsIDI0OCwgMzksIDMzLCA2LCAyNywgCi0gICAgMjE3LCAyMywgMjE1LCAxNzgsIDMzLCA0LCAyNywgMjE3LCAyMywgMjE1LCAxNzgsIDMzLCA2LCAxLCAyNTAsIDEzMiwgMiwgCi0gICAgMjQ4LCAzOSwgMzMsIDQsIDEsIDI1MCwgMTMyLCAyLCAyNDgsIDM5LCAzMywgNiwgMSwgMjUwLCAxMzIsIDIsIDY3LCA5MSwgCi0gICAgMzMsIDQsIDEsIDI1MCwgMTMyLCAyLCA2NywgOTEsIDMzLCA2LCAxLCAyMjAsIDMzLCAzMywgNCwgMSwgMjIwLCAzMywgMzMsIAotICAgIDYsIDEsIDI1NSwgMjAsIDI1MCwgMTMxLCAzMywgNCwgMSwgMjU1LCAyMCwgMjUwLCAxMzEsIDMzLCA2LCAxLCAyNTUsIDIwLCAKLSAgICAyNTAsIDEzMiwgMiwgMjQ4LCAzOSwgMzMsIDQsIDEsIDI1NSwgMjAsIDI1MCwgMTMyLCAyLCAyNDgsIDM5LCAzMywgMSwgCi0gICAgMjI2LCA1OCwgMzMsIDYsIDEsIDIxMCwgNzUsIDIsIDI1MSwgMTQ2LCAzMywgNCwgMSwgMjEwLCA3NSwgMiwgMjUxLCAxNDYsIAotICAgIDMzLCA2LCAxLCAyMzUsIDEzLCAyLCAxMDMsIDMzLCA0LCAxLCAyMzUsIDEzLCAyLCAxMDMsIDMzLCA2LCAxLCAyNDUsIDE3NSwgCi0gICAgMiwgMjE3LCA3NywgMzMsIDQsIDEsIDI0NSwgMTc1LCAyLCAyMTcsIDc3LCAzMywgNiwgMSwgMjQ1LCAxNTEsIDIsIDEwMywgCi0gICAgMzMsIDQsIDEsIDI0NSwgMTUxLCAyLCAxMDMsIDMzLCA2LCAxLCAyNDUsIDE1MSwgMiwgMjE3LCA3NywgMzMsIDQsIDEsIAotICAgIDI0NSwgMTUxLCAyLCAyMTcsIDc3LCAzMywgNiwgMSwgMjM0LCAxMjcsIDI1MCwgMTMxLCAzMywgNCwgMSwgMjM0LCAxMjcsIAotICAgIDI1MCwgMTMxLCAzMywgNiwgMSwgMjQ1LCAxNjAsIDIsIDIxNywgNzcsIDMzLCA0LCAxLCAyNDUsIDE2MCwgMiwgMjE3LCA3NywgCi0gICAgMzMsIDQsIDEsIDIyNiwgNTgsIDMzLCA2LCAxLCAxMTUsIDIsIDI1MSwgMTQ2LCAzMywgNCwgMSwgMTE1LCAyLCAyNTEsIAotICAgIDE0NiwgMzMsIDYsIDEsIDExNSwgMiwgMjQ4LCAxLCAzMywgNCwgMSwgMTE1LCAyLCAyNDgsIDEsIDMzLCA2LCAyNywgMTE1LCAKLSAgICAyMzYsIDYwLCAzMywgNCwgMjcsIDExNSwgMjM2LCA2MCwgMzMsIDYsIDEsIDIzNiwgNjEsIDIsIDI1MSwgMTQ2LCAzMywgNCwgCi0gICAgMSwgMjM2LCA2MSwgMiwgMjUxLCAxNDYsIDMzLCA2LCAxLCAyMjEsIDE5NSwgMzMsIDQsIDEsIDIyMSwgMTk1LCAzMywgNiwgCi0gICAgMSwgMjIxLCAxOTYsIDIsIDI0OCwgMSwgMzMsIDQsIDEsIDIyMSwgMTk2LCAyLCAyNDgsIDEsIDMzLCA2LCAxLCAyMTAsIDc1LCAKLSAgICAyLCAyNDgsIDEsIDMzLCA0LCAxLCAyMTAsIDc1LCAyLCAyNDgsIDEsIDMzLCA2LCAxLCAyMTAsIDk1LCAyLCAyNDgsIDEsIAotICAgIDMzLCA0LCAxLCAyMTAsIDk1LCAyLCAyNDgsIDEsIDMzLCA2LCAxLCAyNTUsIDIwLCAyNDYsIDM2LCAzMywgNCwgMSwgMjU1LCAKLSAgICAyMCwgMjQ2LCAzNiwgMzMsIDYsIDEsIDI0MCwgMTU0LCAyLCAyMzEsIDIzMiwgMzMsIDQsIDEsIDI0MCwgMTU0LCAyLCAyMzEsIAotICAgIDIzMiwgMzMsIDYsIDEsIDI0MCwgMTU0LCAyLCAyNDgsIDEsIDMzLCA0LCAxLCAyNDAsIDE1NCwgMiwgMjQ4LCAxLCAzMywgNiwgCi0gICAgMSwgMTQ0LCAyLCAyNDgsIDEsIDMzLCA0LCAxLCAxNDQsIDIsIDI0OCwgMSwgMzMsIDYsIDEsIDI1MiwgMTM0LCA3NiwgMzMsIAotICAgIDQsIDEsIDI1MiwgMTM0LCA3NiwgMzMsIDYsIDEsIDI1MiwgMTM0LCAxNDQsIDIsIDI0OCwgMSwgMzMsIDQsIDEsIDI1MiwgCi0gICAgMTM0LCAxNDQsIDIsIDI0OCwgMSwgMzMsIDYsIDEsIDE2MCwgMiwgMjQ4LCAxLCAzMywgNCwgMSwgMTYwLCAyLCAyNDgsIDEsIAotICAgIDMzLCA2LCAxLCAxMDQsIDIsIDIzMSwgMjMyLCAzMywgNCwgMSwgMTA0LCAyLCAyMzEsIDIzMiwgMzMsIDYsIDEsIDEwNCwgMiwgCi0gICAgMjQ4LCAxLCAzMywgNCwgMSwgMTA0LCAyLCAyNDgsIDEsIDMzLCA2LCAxLCAxMDQsIDIsIDUyLCAxNDIsIDMzLCA0LCAxLCAKLSAgICAxMDQsIDIsIDUyLCAxNDIsIDMzLCA2LCAxLCAyNTAsIDEzMiwgMiwgMjQ4LCAxLCAzMywgNCwgMSwgMjUwLCAxMzIsIDIsIAotICAgIDI0OCwgMSwgMzMsIDYsIDEsIDI0MiwgMjM3LCAyLCAyNDgsIDM5LCAzMywgNCwgMSwgMjQyLCAyMzcsIDIsIDI0OCwgMzksIAotICAgIDMzLCA2LCAxLCAyMTEsIDI4LCAyLCAyNDgsIDEsIDMzLCA0LCAxLCAyMTEsIDI4LCAyLCAyNDgsIDEsIDMzLCA2LCAxLCAKLSAgICAyNDIsIDIzNywgMiwgMjE4LCAxMDMsIDIyLCAxMDMsIDMzLCA0LCAxLCAyNDIsIDIzNywgMiwgMjE4LCAxMDMsIDIyLCAxMDMsIAotICAgIDMzLCA2LCAxLCAyNDIsIDQ5LCAyLCAxMDMsIDMzLCA0LCAxLCAyNDIsIDQ5LCAyLCAxMDMsIDMzLCA2LCAxLCAyNDIsIDQ5LCAKLSAgICAyLCA5MSwgMzMsIDQsIDEsIDI0MiwgNDksIDIsIDkxLCAzMywgNiwgMSwgMjM0LCAxNCwgMjQ4LCA5MCwgMzMsIDQsIDEsIAotICAgIDIzNCwgMTQsIDI0OCwgOTAsIDMzLCA2LCAxLCAyMzQsIDE0LCAyNDcsIDE2MiwgMzMsIDQsIDEsIDIzNCwgMTQsIDI0NywgCi0gICAgMTYyLCAzMywgNiwgMSwgMjM0LCAxNCwgMjEwLCAyNywgMzMsIDQsIDEsIDIzNCwgMTQsIDIxMCwgMjcsIDMzLCA2LCAxLCAKLSAgICAyMzQsIDE0LCAyNDYsIDMwLCAzMywgNCwgMSwgMjM0LCAxNCwgMjQ2LCAzMCwgMzMsIDYsIDEsIDIzNCwgMTQsIDIzMiwgCi0gICAgMTg3LCAzMywgNCwgMSwgMjM0LCAxNCwgMjMyLCAxODcsIDMzLCA2LCAxLCAyMzQsIDE0LCAyMjgsIDE3OCwgMzMsIDQsIDEsIAotICAgIDIzNCwgMTQsIDIyOCwgMTc4LCAzMywgNiwgMSwgMjM0LCAxNCwgMjE5LCAxMDksIDMzLCA0LCAxLCAyMzQsIDE0LCAyMTksIAotICAgIDEwOSwgMzMsIDYsIDEsIDIzNCwgMTQsIDIxNiwgNjAsIDMzLCA0LCAxLCAyMzQsIDE0LCAyMTYsIDYwLCAzMywgNiwgMSwgCi0gICAgMjIzLCA0OSwgMjEwLCA5NCwgMzMsIDQsIDEsIDIyMywgNDksIDIxMCwgOTQsIDMzLCA2LCAxLCAyNDUsIDE3NSwgMiwgMTAzLCAKLSAgICAzMywgNCwgMSwgMjQ1LCAxNzUsIDIsIDEwMywgMzMsIDYsIDEsIDIzMiwgMjU0LCAzMywgNCwgMSwgMjMyLCAyNTQsIDMzLCAKLSAgICA2LCAxLCAyMjMsIDM5LCAzMywgNCwgMSwgMjIzLCAzOSwgMzMsIDYsIDEsIDIxMSwgOTIsIDMzLCA0LCAxLCAyMTEsIDkyLCAKLSAgICAzMywgNiwgMSwgMjI0LCA4OCwgMzMsIDQsIDEsIDIyNCwgODgsIDMzLCA2LCAxLCAyMTIsIDIyLCAzMywgNCwgMSwgMjEyLCAKLSAgICAyMiwgMzMsIDYsIDEsIDI1NCwgMTY2LCAxNzYsIDMzLCA0LCAxLCAyNTQsIDE2NiwgMTc2LCAzMywgNiwgMSwgMjQ1LCAxNzUsIAotICAgIDIsIDIzMCwgMjI0LCAxMDMsIDMzLCA0LCAxLCAyNDUsIDE3NSwgMiwgMjMwLCAyMjQsIDEwMywgMzMsIDYsIDEsIDI0NSwgCi0gICAgMTUxLCAyLCAyMzAsIDIyNCwgMTAzLCAzMywgNCwgMSwgMjQ1LCAxNTEsIDIsIDIzMCwgMjI0LCAxMDMsIDMzLCA2LCAxLCAKLSAgICAyMjUsIDIyMiwgMiwgMjQ4LCAzOSwgMzMsIDQsIDEsIDIyNSwgMjIyLCAyLCAyNDgsIDM5LCAzMywgNiwgMSwgMjIwLCAzNCwgCi0gICAgMiwgMjQ4LCAzOSwgMzMsIDQsIDEsIDIyMCwgMzQsIDIsIDI0OCwgMzksIDE1MCwgNiwgMSwgMjUzLCAxNjQsIDE1MCwgNiwgCi0gICAgMSwgMjUyLCAzOSwgMTUwLCA2LCAxLCAyNDIsIDIwMywgMTUwLCA2LCAxLCAyNDgsIDIyMSwgMTUwLCA2LCAxLCAyNDUsIAotICAgIDIxMywgMTUwLCA2LCAxLCAyMTAsIDExNiwgMTUwLCA2LCAxLCAyNDUsIDE5NywgMTUwLCA2LCAxLCAyNDUsIDY1LCAxNTAsIAotICAgIDYsIDEsIDExMSwgMTUwLCA2LCAxLCAyMTAsIDc0LCAxNTAsIDYsIDEsIDIzNSwgMjI3LCAxNTAsIDYsIDEsIDIzMiwgMTkwLCAKLSAgICAxNTAsIDYsIDEsIDIxMSwgMTYwLCAxNTAsIDYsIDEsIDI1MSwgMzMsIDE1MCwgNiwgMSwgMjM0LCAxNjUsIDE1MCwgNiwgMSwgCi0gICAgMjQxLCA2OCwgMTUwLCA2LCAxLCAyMzUsIDE0MSwgMTUwLCA2LCAxLCAyNDIsIDI0NiwgMTUwLCA2LCAxLCAyNTAsIDEyNiwgCi0gICAgMTUwLCA2LCAxLCAyMzEsIDU4LCAxNTAsIDYsIDEsIDIxMSwgOCwgMTUwLCA2LCAxLCAyMjgsIDM5LCAxNTAsIDYsIDEsIAotICAgIDIyMCwgMTAyLCAxNTAsIDYsIDEsIDIxMywgMTM4LCAxNTAsIDYsIDEsIDI1MCwgMTU3LCAxNTAsIDYsIDEsIDIyNSwgMjA1LCAKLSAgICAxNTAsIDYsIDEsIDIzNSwgMTEwLCAxNTAsIDYsIDEsIDIwNSwgMTUwLCA2LCAxLCAyMjEsIDE2MSwgMTUwLCA2LCAxLCAyMTMsIAotICAgIDE3OSwgMTUwLCA2LCAxLCAyMTYsIDYyLCAxNTAsIDYsIDEsIDIyMywgOTUsIDE1MCwgNiwgMSwgMjQ5LCAyMzgsIDE1MCwgNiwgCi0gICAgMSwgMjEwLCAyNDksIDE1MCwgNiwgMSwgMjI1LCA0NiwgMTUwLCA2LCAxLCAyMzQsIDE3NiwgMTUwLCA2LCAxLCAyMjYsIAotICAgIDIyMiwgMTUwLCA2LCAxLCAyNDQsIDE0MiwgMTUwLCA1OCwgMSwgNDMsIDE2MywgMjIyLCAyMzMsIDE1MCwgMjU0LCA1NywgCi0gICAgMTUwLCAyNDUsIDE1NCwgNzgsIDE1MCwgMjQ1LCAzMSwgNzgsIDE1MCwgMjQ5LCAyMTksIDE1MCwgMjI0LCAxMywgNzgsIAotICAgIDE1MCwgMjU1LCAyMSwgNzgsIDE1MCwgNCwgMSwgMjUzLCAxNjQsIDE1MCwgNCwgMSwgMjUyLCAzOSwgMTUwLCA0LCAxLCAKLSAgICAyNDIsIDIwMywgMTUwLCA0LCAxLCAyNDgsIDIyMSwgMTUwLCA0LCAxLCAyNDUsIDIxMywgMTUwLCA0LCAxLCAyMTAsIDExNiwgCi0gICAgMTUwLCA0LCAxLCAyNDUsIDE5NywgMTUwLCA0LCAxLCAyNDUsIDY1LCAxNTAsIDQsIDEsIDExMSwgMTUwLCA0LCAxLCAyMTAsIAotICAgIDc0LCAxNTAsIDQsIDEsIDIzNSwgMjI3LCAxNTAsIDQsIDEsIDIzMiwgMTkwLCAxNTAsIDQsIDEsIDIxMSwgMTYwLCAxNTAsIAotICAgIDQsIDEsIDI1MSwgMzMsIDE1MCwgNCwgMSwgMjM0LCAxNjUsIDE1MCwgNCwgMSwgMjQxLCA2OCwgMTUwLCA0LCAxLCAyMzUsIAotICAgIDE0MSwgMTUwLCA0LCAxLCAyNDIsIDI0NiwgMTUwLCA0LCAxLCAyNTAsIDEyNiwgMTUwLCA0LCAxLCAyMzEsIDU4LCAxNTAsIAotICAgIDQsIDEsIDIxMSwgOCwgMTUwLCA0LCAxLCAyMjgsIDM5LCAxNTAsIDQsIDEsIDIyMCwgMTAyLCAxNTAsIDQsIDEsIDIxMywgCi0gICAgMTM4LCAxNTAsIDQsIDEsIDI1MCwgMTU3LCAxNTAsIDQsIDEsIDIyNSwgMjA1LCAxNTAsIDQsIDEsIDIzNSwgMTEwLCAxNTAsIAotICAgIDQsIDEsIDIwNSwgMTUwLCA0LCAxLCAyMjEsIDE2MSwgMTUwLCA0LCAxLCAyMTMsIDE3OSwgMTUwLCA0LCAxLCAyMTYsIDYyLCAKLSAgICAxNTAsIDQsIDEsIDIyMywgOTUsIDE1MCwgNCwgMSwgMjQ5LCAyMzgsIDE1MCwgNCwgMSwgMjEwLCAyNDksIDE1MCwgNCwgMSwgCi0gICAgMjI1LCA0NiwgMTUwLCA0LCAxLCAyMzQsIDE3NiwgMTUwLCA0LCAxLCAyMjYsIDIyMiwgMTUwLCA0LCAxLCAyNDQsIDE0MiwgCi0gICAgMTUwLCA0LCAyNywgMjQ1LCAyMTQsIDIxMCwgMjQ5LCAxNTAsIDI0MywgMjI5LCAyMTgsIDEyOSwgMTUwLCAyNDAsIDE2OCwgCi0gICAgMTUwLCAyNDYsIDk1LCA1MCwgOTQsIDI1NSwgMTUsIDI0NSwgNTcsIDk0LCAyNTUsIDE1LCAyMjEsIDE2MiwgOTQsIDI1NSwgCi0gICAgMTUsIDIyMCwgODgsIDk0LCAyNTUsIDE1LCAyMTAsIDEwNCwgMjI0LCA3MSwgOTQsIDI1NSwgMTUsIDIxMCwgMTA0LCAyNDMsIAotICAgIDEyNSwgOTQsIDI1NSwgMTUsIDIxNiwgNzUsIDk0LCAyNTUsIDE1LCAyMjMsIDQ3LCA5NCwgMjU1LCAxNSwgMjEwLCAxMDMsIAotICAgIDk0LCAyNTUsIDE1LCAyMjUsIDI0NSwgOTQsIDI1NSwgMTUsIDIxMSwgMjAsIDk0LCAyNTUsIDE1LCAyMTYsIDIxNCwgOTQsIAotICAgIDI1NSwgMTUsIDI0MywgNDEsIDk0LCAyNTUsIDE1LCAyNDMsIDQyLCAyMzAsIDY5LCA5NCwgMjU1LCAxNSwgMjQzLCAzOSwgCi0gICAgOTQsIDI1NSwgMTUsIDIyNCwgNzIsIDIyNiwgMTYsIDk0LCAyNTUsIDE1LCAyMTYsIDI1MywgMjQzLCA1NiwgOTQsIDI1NSwgCi0gICAgMTUsIDIyNSwgMjI2LCA5NCwgMjU1LCAxNSwgMjUzLCAyMDAsIDI0MiwgNDEsIDk0LCAyNTUsIDE1LCAyMzAsIDc5LCA5NCwgCi0gICAgMjU1LCAxNSwgMjMxLCAyMDgsIDk0LCAyNTUsIDE1LCAyMzEsIDQ5LCA5NCwgMjU1LCAxNSwgMjMxLCA1MCwgMjM0LCAxNzcsIAotICAgIDk0LCAyNTUsIDE1LCAyNDgsIDE2MywgOTQsIDI1NSwgMTUsIDIyNCwgODMsIDk0LCAyNTUsIDE1LCAyMTYsIDI1MywgMjI0LCAKLSAgICA2NywgOTQsIDI1NSwgMTUsIDIxMSwgMzAsIDI1MiwgNDAsIDIxMCwgMjMwLCA5NCwgMjU1LCAxNSwgMjI2LCAyMDcsIDk0LCAKLSAgICAyNTUsIDE1LCAyMzYsIDE5LCA5NCwgMjU1LCAxNSwgMjQ4LCA3MCwgOTQsIDI1NSwgMTUsIDIxMCwgMzMsIDk0LCAxNjQsIAotICAgIDIzMSwgMTQzLCAyNTAsIDM1LCA5NCwgMjI1LCAxMSwgMjIwLCAzNiwgOTQsIDIyNSwgMTEsIDI0MSwgMjUwLCAyMjEsIDE2MiwgCi0gICAgOTQsIDIyNSwgMTEsIDI0MSwgMjUwLCAyMjUsIDIzOSwgOTQsIDIyNSwgMTEsIDI0MSwgMjUwLCAyMjQsIDc2LCA5NCwgMjI1LCAKLSAgICAxMSwgMjQxLCAxNTgsIDk0LCAyMjUsIDExLCAyMTUsIDE3NiwgOTQsIDIyNSwgMTEsIDIyMSwgMTYyLCA5NCwgMjI1LCAxMSwgCi0gICAgMjI1LCAyMzksIDk0LCAyMjUsIDExLCAyMjQsIDc2LCA5NCwgMjI1LCAxMSwgMjQxLCA2MSwgOTQsIDIyNSwgMTEsIDI0MSwgCi0gICAgNjIsIDI0MSwgMjUyLCAzMSwgMjE0LCAzLCA5NCwgMjI1LCAxMSwgMjI0LCAxNywgOTQsIDIyNSwgMTEsIDI0OCwgMjA4LCAKLSAgICAxNzcsIDIzMSwgMTcxLCA5NCwgMjI1LCAxMSwgMjMxLCAzOCwgOTQsIDIyNCwgMTQxLCAyMzEsIDE2OCwgOTQsIDIyNSwgMTEsIAotICAgIDIyMywgMTY5LCA5NCwgMjI0LCAxNDEsIDIyNSwgMjQ3LCA5NCwgMjI1LCAxMSwgMjIwLCAyMSwgMjQ3LCAxMjAsIDk0LCAKLSAgICAyMjUsIDExLCAyMTksIDE1OSwgMjQ3LCAxMjAsIDk0LCAyMjQsIDE0MSwgMjE5LCA1MywgMjI1LCAyNDEsIDk0LCAxNjQsIAotICAgIDIxNCwgMTYwLCAyNDcsIDEyMCwgOTQsIDE2NCwgMjMyLCAxMDgsIDI0NywgMTIwLCA5NCwgMjI0LCAxNDEsIDIyNywgMTk1LCAKLSAgICAyNDIsIDQwLCA5NCwgMjI1LCAxMSwgMjI0LCA3NywgMjI0LCA3MSwgOTQsIDEsIDI1NCwgMTcwLCA5NCwgMSwgMjUyLCAyOCwgCi0gICAgOTQsIDEsIDI0MiwgMjAxLCA5NCwgMSwgMjQ4LCAxODksIDk0LCAxLCAyNDEsIDIzOCwgOTQsIDEsIDIxNCwgMywgOTQsIDEsIAotICAgIDIxMCwgOTcsIDk0LCAxLCAyNDEsIDE5NywgOTQsIDEsIDIxNiwgMjMwLCA5NCwgMSwgMjEwLCAyMzMsIDk0LCAxLCA0MCwgCi0gICAgMjM0LCAyNTAsIDk0LCAxLCAyMzQsIDI1MCwgOTQsIDEsIDIzMywgOTQsIDk0LCAxLCA0MCwgMjMxLCA2NSwgOTQsIDEsIAotICAgIDIzMSwgNjUsIDk0LCAxLCA0MCwgMjI3LCAxOTQsIDk0LCAxLCAyMjcsIDE5NCwgOTQsIDEsIDIyMSwgMjQ5LCA5NCwgMSwgCi0gICAgMjUzLCAxNjIsIDk0LCAxLCA0MCwgMjI1LCAyMjEsIDk0LCAxLCAyMjUsIDIyMSwgOTQsIDEsIDQwLCAyMTUsIDE3OSwgOTQsIAotICAgIDEsIDIxNSwgMTc5LCA5NCwgMSwgMjI0LCAzOSwgOTQsIDEsIDIyMywgNjcsIDk0LCAxLCAyMjAsIDIwLCA5NCwgMSwgMjE3LCAKLSAgICAzOCwgOTQsIDI3LCAyMTEsIDYsIDUyLCAyMTQsIDMsIDk0LCAyNywgMjExLCA2LCAyMTQsIDQsIDIxMCwgMjMzLCA5NCwgMjcsIAotICAgIDIxMSwgNiwgNTIsIDIxMCwgMjMzLCA5NCwgMjI0LCAxNDEsIDI0MywgNDEsIDk0LCAyMjQsIDE0MSwgMjQzLCAzOSwgMTAsIAotICAgIDU0LCA1MCwgMTAsIDUsIDIyMSwgMjQyLCAxMCwgMjQ0LCAzMCwgMjMxLCAxNTQsIDEwLCA1LCAyMjIsIDIzLCAxMCwgNSwgCi0gICAgMjIxLCAyNDUsIDI1NCwgMzcsIDI0OSwgMTA5LCAyMjIsIDE5MywgMjU0LCAzNywgMjQ0LCA0LCAyMjIsIDE5MywgMTAsIAotICAgIDIyMywgMTM0LCAyNTQsIDM3LCAyMjUsIDE4MywgMjMwLCAxOTMsIDUwLCAyNTQsIDM3LCAyMjUsIDE4MywgMjE2LCAyNDgsIAotICAgIDIxNiwgMTQ4LCA1MCwgMjU0LCAyMjEsIDUwLCAxMCwgMjQ5LCAyMTksIDEwLCAyNDgsIDE1MCwgMjIwLCAxMzcsIDEwLCAKLSAgICAyMjUsIDEzLCAyMTMsIDI0MSwgNTAsIDEwLCA1LCAyMzAsIDE3NCwgMTAsIDUsIDIyMiwgMywgMjU0LCAxNzIsIDIxMiwgNDUsIAotICAgIDEwLCA1LCAyNTQsIDE3MiwgMjUzLCAyMjEsIDEwLCA1LCAyMjMsIDE2NywgMjU0LCAxNzEsIDEwLCA1LCAyMjMsIDE3NSwgCi0gICAgMjU0LCAxNTIsIDI1NCwgMTA0LCAxMCwgNSwgMjE3LCA3MCwgMTAsIDQsIDEyNSwgMjE3LCA4MCwgMTAsIDQsIDEyNSwgMjcsIAotICAgIDExMiwgMiwgMjMzLCAxMDMsIDIsIDIxMSwgNDMsIDEwLCA0LCAxMjUsIDIxMCwgMTA4LCAxMCwgNCwgMjQ0LCAxNjUsIDEwLCAKLSAgICA0LCAyNDgsIDE4NCwgMTAsIDQsIDIzNCwgMjA1LCAxMCwgMjIwLCAxNTAsIDEwLCAyMTUsIDIxMSwgNTksIDIyNCwgMTQxLCAKLSAgICA3OCwgMTAsIDIyNCwgMTMsIDc4LCAxMCwgMSwgMjM0LCAyMDksIDIxMSwgNDMsIDEwLCAxLCAyNDIsIDE5LCAxMCwgMSwgCi0gICAgMTEyLCAyLCAyMzEsIDIyOCwgNDgsIDEwLCAxLCAxMTIsIDIsIDIwMiwgNDgsIDEwLCAxLCAyMTIsIDMxLCAyLCAyMDIsIDQ4LCAKLSAgICAxMCwgMSwgMTEyLCAyLCAyMDIsIDUxLCAxMCwgMSwgNzksIDIsIDIwMiwgNDgsIDEwLCAxLCAyNTQsIDE3MCwgMTAsIDEsIAotICAgIDI1MiwgNTQsIDEwLCAxLCAyMTcsIDgsIDIzMSwgMTY0LCAxMCwgMSwgMjE3LCA3LCAxMCwgMSwgMjE2LCAxOTIsIDEwLCAxLCAKLSAgICAyMzUsIDEyMywgMTAsIDEsIDI0MiwgMzcsIDEwLCAxLCAyMzQsIDEyOSwgMTAsIDEsIDI0OCwgMTk1LCAxMCwgMSwgMjE2LCAKLSAgICAyMDIsIDEwLCAxLCAyMjMsIDk1LCAxMCwgMSwgMjEwLCAxMDgsIDEwLCAxLCAyMjEsIDE2NiwgMTAsIDEsIDIyMCwgNTksIAotICAgIDEwLCAxLCAyMjIsIDI2LCAxMCwgMSwgMjQ4LCAyMTYsIDEwLCAxLCAyMTcsIDgwLCAxMCwgMSwgMjEwLCAxMTEsIDEwLCAxLCAKLSAgICAyNTQsIDE5NiwgMTAsIDEsIDI0MiwgMjQ0LCAxMCwgMSwgMjM0LCAxNzUsIDIsIDExMywgMTcwLCA0OCwgMTAsIDEsIDIzNCwgCi0gICAgMTc1LCAyLCAxMzQsIDE3MCwgNTEsIDEwLCAxLCAyNDQsIDE2OCwgNzksIDIsIDIzNSwgMTkzLCAyMTQsIDEwNSwgMTAsIDEsIAotICAgIDI0NCwgMTY4LCA3OSwgMiwgMTEzLCAxNzAsIDQ4LCAxMCwgMSwgMjQ0LCAxNjgsIDc5LCAyLCAxMzQsIDE3MCwgNDgsIDEwLCAKLSAgICAyMTcsIDQzLCAxMCwgMSwgMjQ0LCAxNDIsIDEwLCAxLCAyMjQsIDgxLCAxMCwgMSwgMjM0LCAyNTAsIDEwLCAxLCAyMzMsIAotICAgIDEwMiwgMTAsIDEsIDIzMSwgNzgsIDEwLCAxLCAyMjgsIDYyLCAxMCwgMSwgMjQxLCAyMTgsIDEwLCAxLCAyMTIsIDMwLCAxMCwgCi0gICAgMSwgMTEyLCAyMzEsIDE5MiwgMTAsIDEsIDIxMSwgNDMsIDEwLCAyNDQsIDE2MywgMTAsIDI0OCwgMTgyLCAxMCwgMjM0LCAKLSAgICAyMDMsIDEwLCAyNDQsIDE2NSwgMTAsIDI0OCwgMTg0LCAxMCwgMjM0LCAyMDUsIDEwLCAyMjAsIDkzLCAxMCwgMjE4LCA0NSwgCi0gICAgMTAsIDIzMSwgMjI2LCA0OCwgMTAsIDIwMiwgNDgsIDEwLCAyMDIsIDUxLCAxMCwgMjE4LCA2NSwgMjU0LCAxNzAsIDEwLCAKLSAgICAyMzUsIDE5MywgMjQ4LCAxODQsIDEwLCAxNjQsIDIyOCwgNjMsIDI0MiwgMjE4LCAxMCwgMjA5LCAyNTUsIDEwLCAyNSwgNSwgCi0gICAgNCwgMjE0LCAxMDYsIDQ4LCAxMCwgMjUsIDUsIDIzNSwgMTkzLCA0LCAyMTQsIDEwNiwgNDgsIDEwLCAyNSwgNSwgNTksIDUxLCAKLSAgICAxMCwgMjIzLCA0OSwgMjQ4LCAxODQsIDEwLCAyNDQsIDE2NiwgMiwgMTEzLCAyNDcsIDExOCwgMTAsIDIxMiwgMzIsIDIwMiwgCi0gICAgNTEsIDI1NCwgMzcsIDIxLCAyMTAsIDg2LCAyNTQsIDM3LCAyMSwgMTEwLCAyNTQsIDM3LCAyMSwgMTA1LCAyNTQsIDM3LCAKLSAgICAyMSwgMTU4LCAyNTQsIDM3LCAyMSwgMTYxLCAyNTQsIDM3LCAyMSwgMTg5LCAyNTQsIDM3LCAyMSwgMTk0LCAyNTQsIDM3LCAKLSAgICAyMSwgMTk4LCAyNTQsIDM3LCAyMSwgMTk1LCAyNTQsIDM3LCAyMSwgMjAwLCAxMCwgMjI1LCAxODIsIDUwLCAxMCwgMjQ4LCAKLSAgICA4MywgMjIwLCAxMzcsIDEwLCAyMTYsIDE0NiwgMjIwLCAxMzcsIDEwLCAyNDQsIDgxLCAyMjUsIDksIDIxOCwgMTU2LCAxMCwgCi0gICAgMSwgMjQ3LCAxMTksIDI1MiwgNTQsIDEwLCAxLCAyNDcsIDExOSwgMjI0LCA4MSwgMTAsIDEsIDIxOCwgMjMsIDI1NCwgMTcwLCAKLSAgICAxMCwgMSwgMTEyLCAyMTIsIDQ2LCAxMCwgMSwgMTEyLCAyLCAyMTIsIDMyLCAyMDIsIDQ4LCAxMCwgMSwgMTEyLCAyLCAyMTIsIAotICAgIDMyLCAyMDIsIDUxLCAxMCwgMSwgMTI1LCAyNDIsIDE5LCAxMCwgMSwgMTI1LCAyMDIsIDI1NCwgMTcwLCAxMCwgMSwgMTI1LCAKLSAgICAyMDIsIDIxMiwgMzAsIDEwLCAxLCAxMDQsIDIsIDIwMiwgNDgsIDEwLCAxLCAxMjUsIDIwMiwgMjExLCA0MywgMTAsIDEsIAotICAgIDIxNSwgMTQ4LCAxMCwgMSwgMjE1LCAxNDYsIDEwLCAxLCAyNTIsIDY0LCAxMCwgMSwgMjE3LCA4LCAyLCAyMjIsIDIzMywgCi0gICAgMTAsIDEsIDIxNywgOCwgMiwgMTM0LCAxNzAsIDc3LCAyNDYsIDEwMywgMTAsIDEsIDIyNSwgMjA1LCAxMCwgMSwgMjE3LCA1LCAKLSAgICAxMCwgMSwgMjUyLCA1MiwgMTAsIDEsIDEyMiwgMiwgMjAyLCA0OCwgMTAsIDEsIDEyMiwgMiwgMTEzLCAxNzAsIDY3LCA0OCwgCi0gICAgMTAsIDEsIDIyNywgMTUzLCAxMCwgMSwgMjQ2LCA0MywgMTAsIDEsIDEyMiwgMiwgMTM0LCAxNzAsIDQ4LCAxMCwgMSwgMjE3LCAKLSAgICAyNiwgMTAsIDEsIDIxNywgMjQsIDEwLCAxLCAyNDgsIDEzMCwgMTAsIDEsIDI0OCwgMTk2LCAyLCAyMjIsIDIzMywgMTAsIDEsIAotICAgIDI0OCwgMTk2LCAyLCA1OSwgNTEsIDEwLCAxLCAyNDgsIDE5NiwgMiwgNTksIDI1MiwgNDMsIDIyLCA0LCAyMTcsIDgwLCAxMCwgCi0gICAgMSwgMjQ4LCAyMDEsIDEwLCAxLCAyNDgsIDEzMiwgMTAsIDEsIDI0NiwgNzAsIDEwLCAxLCAyNDgsIDE5NiwgMiwgMTM0LCAKLSAgICAxNzAsIDc3LCAyNDYsIDEwMywgMTAsIDEsIDI0OCwgMTk2LCAyLCAyNDQsIDExLCAxNzAsIDQ4LCAxMCwgMSwgMjIyLCAxNzEsIAotICAgIDEwLCAxLCAyMjMsIDk2LCAyLCA0LCAyMTQsIDEwNSwgMTAsIDEsIDIyMywgOTYsIDIsIDIyMiwgMjMzLCAxMCwgMSwgMjIzLCAKLSAgICA5NiwgMiwgNTksIDUxLCAxMCwgMSwgMjIzLCA5NiwgMiwgNCwgMjE0LCAxMDYsIDUxLCAxMCwgMSwgMjIzLCA5NiwgMiwgNTksIAotICAgIDI1MiwgNDMsIDIyLCA1OSwgNDgsIDEwLCAxLCAyMjMsIDk2LCAyLCAxMTMsIDE3MCwgNDgsIDEwLCAxLCAyMzUsIDEyMCwgCi0gICAgMTAsIDEsIDIyMywgOTYsIDIsIDI0NCwgMTEsIDE3MCwgNDgsIDEwLCAxLCAyMjEsIDE2NywgMiwgNTksIDI1MiwgNDMsIDIyLCAKLSAgICA1OSwgNDgsIDEwLCAxLCAyMjEsIDE2NywgMiwgMTM0LCAxNzAsIDUxLCAxMCwgMSwgMjIxLCAxNjcsIDIsIDEzNCwgMTcwLCAKLSAgICAyNTIsIDQzLCAyMiwgMTM0LCAxNzAsIDQ4LCAxMCwgMSwgMjIyLCAyNywgMiwgMTEzLCAxNzAsIDUxLCAxMCwgMSwgMjIyLCAKLSAgICAyNywgMiwgMTM0LCAxNzAsIDQ4LCAxMCwgMSwgMjE3LCA4MSwgMiwgMTM0LCAxNzAsIDQ4LCAxMCwgMSwgMjU0LCAxOTcsIDIsIAotICAgIDEzNCwgMTcwLCA0OCwgMTAsIDEsIDI0NywgMTE5LCAyNDQsIDE0MiwgMTAsIDEsIDI0NCwgMTQzLCAyLCA1OSwgMjMwLCAKLSAgICAxMDksIDUxLCAxMCwgMSwgMjQ0LCAxNDMsIDIsIDU5LCA1MSwgMTAsIDEsIDIxMywgMjQ4LCAxMCwgMSwgMjQ0LCAxNDMsIDIsIAotICAgIDEzNCwgMTcwLCA1MSwgMTAsIDEsIDIyNSwgMjAzLCAxMCwgMSwgMjI0LCA4MiwgMiwgNTksIDQ4LCAxMCwgMSwgMjI0LCA4MiwgCi0gICAgMiwgMTM0LCAxNzAsIDQ4LCAxMCwgMSwgMjM0LCAxNzQsIDEwLCAxLCAyMTcsIDI1MCwgMjM0LCAyNTAsIDEwLCAxLCAyMzQsIAotICAgIDI1MSwgMiwgMjIyLCAyMzMsIDEwLCAxLCAyMzQsIDI1MSwgMiwgNTksIDQ4LCAxMCwgMSwgMjI5LCA3OSwgMTAsIDEsIDIzNCwgCi0gICAgMjUxLCAyLCAxMzQsIDE3MCwgNTEsIDEwLCAxLCAyNDMsIDEyMiwgMTAsIDEsIDI0MywgMTIzLCAyLCAyMjIsIDIzMywgMTAsIAotICAgIDEsIDIyOSwgMiwgMTAsIDEsIDI0MywgMTIzLCAyLCAxMTMsIDE3MCwgNTEsIDEwLCAxLCAyNDIsIDEwMSwgMTAsIDEsIDI0MywgCi0gICAgMTIzLCAyLCAxMzQsIDE3MCwgNDgsIDEwLCAxLCAyMzMsIDEwMywgMiwgNCwgMjE0LCAxMDUsIDEwLCAxLCAyMzMsIDEwMywgCi0gICAgMiwgNTksIDQ4LCAxMCwgMSwgMjMzLCAxMDMsIDIsIDEzNCwgMTcwLCA0OCwgMTAsIDEsIDIzMywgMTAzLCAyLCAxMzQsIAotICAgIDE3MCwgNTEsIDEwLCAxLCAyMjgsIDYzLCAyLCA1OSwgNTEsIDEwLCAxLCAyMjgsIDYzLCAyNDIsIDIxOCwgMTAsIDEsIDIyMiwgCi0gICAgMjE0LCAxMCwgMSwgMjI4LCA2MywgMiwgMjIyLCAyMzMsIDEwLCAxLCAyMjgsIDYzLCAyLCAxMzQsIDE3MCwgNDgsIDEwLCAxLCAKLSAgICAyNDEsIDIxOSwgMjQ3LCAxNDEsIDEwLCAxLCAyMTcsIDI3LCAyLCA1OSwgNDgsIDEwLCAxLCAyNDEsIDIxOSwgMiwgNzksIAotICAgIDQ4LCAxMCwgMSwgMjQxLCAyMTksIDI0MiwgMTcxLCAxMCwgMSwgMjQxLCAyMTksIDI0MiwgMTcyLCAyLCAyMDIsIDQ4LCAxMCwgCi0gICAgMSwgMjE3LCA4LCAyMzEsIDE2NSwgMjQyLCAxNzEsIDEwLCAxLCAyMTIsIDMxLCAyLCAyMjIsIDIzMywgMTAsIDEsIDIzNCwgCi0gICAgNzMsIDIyNiwgMjM0LCAxMCwgMSwgMjI2LCAyMzQsIDEwLCAxLCA3MCwgMTAsIDEsIDIxMCwgMjEyLCAxMCwgMSwgMjM0LCAKLSAgICA3MywgMjEwLCAyMTIsIDEwLCAxLCAyMTIsIDMxLCAyLCAxMTMsIDE3MCwgNDgsIDEwLCAxLCAyMTMsIDI1NSwgMTAsIDEsIAotICAgIDI0NCwgMTY4LCAyMTEsIDQzLCAxMCwgMSwgNzksIDIsIDIxNywgNzcsIDEwLCAxLCA3OSwgMiwgNCwgMjE0LCAxMDUsIDEwLCAKLSAgICAxLCAyMTIsIDMxLCAyLCA1OSwgNDgsIDEwLCAxLCA3NSwgMTAsIDEsIDc5LCAyLCAxMzQsIDE3MCwgNTEsIDEwLCAxLCA3OSwgCi0gICAgMjUyLCAxMzIsIDEwLCAxLCA3OSwgMjUyLCAxMzMsIDIsIDIwMiwgNDgsIDEwLCAyNDMsIDIyOSwgMjE4LCAxMjksIDEwLCAxLCAKLSAgICAyNTQsIDI0MywgMTAsIDQsIDEyNSwgMjcsIDIyMiwgMjcsIDIsIDIzMywgMTAzLCAyLCAxMTIsIDIzMSwgMTkyLCAxMCwgNCwgCi0gICAgMTI1LCAyNywgMjI0LCA4MiwgMiwgMjMzLCAxMDMsIDIsIDExMiwgMjMxLCAxOTIsIDEwLCA0LCAxMjUsIDY2LCA2NSwgMTcsIAotICAgIDEwLCA0LCAxMjUsIDIzMywgMTAzLCAyNTQsIDE3MCwgMTAsIDQsIDEyNSwgMjM1LCAxMjMsIDEwLCA0LCAxMjUsIDEzNCwgCi0gICAgMjQ3LCAxMTgsIDEwLCA0LCAxMjUsIDIyMSwgMTY2LCAxMCwgMjQ1LCAxNDMsIDY0LCAyNTMsIDE2NiwgMTAsIDIxOCwgMTUyLCAKLSAgICA2NCwgMjIyLCAxMzgsIDI0NSwgMTc1LCAyNDEsIDE1NSwgMTAsIDQsIDEyNSwgMjIyLCAxODMsIDIxMCwgODYsIDEwLCA0LCAKLSAgICAxMjUsIDIxNCwgMTU5LCAyMjMsIDExNSwgMjEwLCA4NiwgMTAsIDQsIDEyNSwgMjQ3LCAxMTksIDI0MSwgMjM2LCA2NCwgCi0gICAgMjM0LCAxMjksIDEwLCA0LCAxMjUsIDY2LCA1MywgMTcsIDEwLCA0LCAxMjEsIDIyMSwgMTY2LCAxMCwgNCwgMTI1LCAyMzEsIAotICAgIDIyNywgMTAsIDQsIDIxMiwgMzAsIDEwLCA0LCAyMTEsIDQzLCAxMCwgNCwgMTI1LCAyMTEsIDQzLCAxMCwgNCwgMTI1LCAKLSAgICAyMjgsIDYyLCAxMCwgMjI1LCA0MSwgNjQsIDIyMiwgMTMsIDEwLCAyNDUsIDE1MiwgMjUwLCAxNzUsIDEyMSwgMjE4LCAxMjksIAotICAgIDEwLCAyNDUsIDE1MiwgMjUwLCAxNzUsIDEyNSwgMjE4LCAxMjksIDEwLCAyMjIsIDE4MywgMTI1LCAyMTgsIDEzMCwgMiwgCi0gICAgMjQ0LCAxMDQsIDI1MCwgMTc0LCAxMCwgNCwgMTIxLCAyMzEsIDc4LCAxMCwgMSwgMjQ4LCAxOTYsIDIsIDIzNSwgMTkzLCAKLSAgICAyMTQsIDEwNSwgMTAsIDEsIDIyMywgOTYsIDIsIDIzNSwgMTkzLCAyMTQsIDEwNSwgMjQ1LCAyMiwgMjU0LCAzNywgMjEsIAotICAgIDIxMCwgODYsIDI0NSwgMjIsIDI1NCwgMzcsIDIxLCAxMTAsIDI0NSwgMjIsIDI1NCwgMzcsIDIxLCAxMDUsIDI0NSwgMjIsIAotICAgIDI1NCwgMzcsIDIxLCAxNTgsIDI0NSwgMjIsIDI1NCwgMzcsIDIxLCAxNjEsIDI0NSwgMjIsIDI1NCwgMzcsIDIxLCAxODksIAotICAgIDI0NSwgMjIsIDI1NCwgMzcsIDIxLCAxOTQsIDI0NSwgMjIsIDI1NCwgMzcsIDIxLCAxOTgsIDI0NSwgMjIsIDI1NCwgMzcsIAotICAgIDIxLCAxOTUsIDI0NSwgMjIsIDI1NCwgMzcsIDIxLCAyMDAsIDEwLCAxLCAyMjAsIDYwLCAyLCA1OSwgNTEsIDEwLCAxLCAKLSAgICAyNDgsIDIxNywgMiwgNTksIDUxLCAxMCwgMSwgMjQyLCAyNDUsIDIsIDU5LCA1MSwgMTAsIDUsIDIxOSwgMTU4LCAyNTQsIAotICAgIDEyNiwgMTAsIDUsIDIxOSwgMTU4LCAyMjQsIDIzNSwgMjMxLCA1OCwgMTAsIDEsIDI0MSwgMjE5LCAyLCAyMzUsIDE5MywgCi0gICAgMjE0LCAxMDUsIDE4OCwgMjQ1LCAxNDMsIDY0LCAyMjYsIDE0LCAxODgsIDIxOCwgMTksIDI0MywgMjI5LCAyMTgsIDEyOSwgCi0gICAgMTg4LCAyMTgsIDY3LCAyNDMsIDIyOSwgMjE4LCAxMjksIDE4OCwgMjE4LCAxOSwgMjQ5LCAyMjYsIDE4OCwgMjE4LCA2NywgCi0gICAgMjQ5LCAyMjYsIDE4OCwgMjAzLCAyNDksIDIyNiwgMTg4LCAyNDksIDIyNywgMjE5LCAxMDYsIDIzMywgNDYsIDE4OCwgMjQ5LCAKLSAgICAyMjcsIDIxOSwgMTA2LCAyMjIsIDI1MSwgMTg4LCAyMTgsIDE5LCAyNDksIDIyNywgMjE5LCAxMDYsIDIzMywgNDYsIDE4OCwgCi0gICAgMjE4LCA2NywgMjQ5LCAyMjcsIDIxOSwgMTA2LCAyMjIsIDI1MSwgMTg4LCAyNDksIDE4MCwgMTg4LCAyNDIsIDEsIDIyNiwgCi0gICAgMjUwLCAxODgsIDI0MiwgMSwgMjMxLCAzNiwgMTg4LCAyNDIsIDEsIDI1MywgMjE4LCAxODgsIDI1NSwgMjEsIDc4LCAxODgsIAotICAgIDEsIDI1NCwgMTc0LCAxODgsIDEsIDIxOCwgMjMsIDI1NCwgMTc0LCAxODgsIDEsIDI1MiwgMjUsIDE4OCwgMSwgMjQzLCAKLSAgICAxMTMsIDE4OCwgMSwgMjQzLCAxMTQsIDI0MywgOTEsIDE4OCwgMSwgMjQ4LCAxOTIsIDE4OCwgMSwgMjQ3LCAxMTksIDI0OCwgCi0gICAgMTkzLCAyMjIsIDIyOSwgMTg4LCAxLCAyNDEsIDIzOCwgMTg4LCAxLCAyMTIsIDMwLCAxODgsIDEsIDIxMCwgMTA4LCAxODgsIAotICAgIDEsIDI0MSwgMTk1LCAxODgsIDEsIDIxNiwgMjI2LCAxODgsIDEsIDIxNiwgMjI3LCAyNDMsIDkxLCAxODgsIDEsIDIxMCwgCi0gICAgMTk5LCAxODgsIDEsIDIxMCwgMjAwLCAyNDEsIDIzOCwgMTg4LCAxLCAyMzQsIDIyNSwgMTg4LCAxLCAyMzMsIDEwMSwgMTg4LCAKLSAgICAxLCAyMzAsIDE5MCwgMTg4LCAxLCAyMjcsIDE5NCwgMTg4LCAxLCAyMjAsIDE0MywgMTg4LCAxLCA0MCwgMjIwLCAxNDMsIAotICAgIDE4OCwgMSwgNzUsIDE4OCwgMSwgMjI1LCAyMjEsIDE4OCwgMSwgMjIzLCA0OSwgMjI1LCAyMjEsIDE4OCwgMSwgMjIyLCAyNCwgCi0gICAgMTg4LCAxLCAyMjQsIDc1LCAxODgsIDEsIDIyMiwgMjI5LCAxODgsIDEsIDIyMCwgMjAsIDE4OCwgMSwgMjE3LCAzNiwgMTg4LCAKLSAgICAxLCAyMjUsIDE2OSwgMjUyLCAxMiwgMTg4LCAxLCAyMjUsIDE2OSwgMjQyLCAyNDIsIDE4OCwgMSwgMjI1LCAxNjksIDI0OCwgCi0gICAgMjAsIDE4OCwgMjI0LCAxNTEsIDQ4LCAxODgsIDIyNCwgMTUxLCA1MSwgMTg4LCAyMjQsIDE1MSwgMjQ2LCAxMTcsIDE4OCwgCi0gICAgMjEwLCAxNywgNDgsIDE4OCwgMjEwLCAxNywgNTEsIDE4OCwgMjEwLCAxNywgMjQ2LCAxMTcsIDE4OCwgMjIzLCAxMzEsIDQ4LCAKLSAgICAxODgsIDIyMywgMTMxLCA1MSwgMTg4LCAyNDYsIDExOCwgMjEwLCAyNCwgMjQxLCA0NCwgMTg4LCAyNDYsIDExOCwgMjEwLCAKLSAgICAyNCwgMjU0LCAxMDUsIDE4OCwgMjQxLCAyNDEsIDQ4LCAxODgsIDI0MSwgMjQxLCA1MSwgMTg4LCAyNDEsIDI0MCwgMjQ2LCAKLSAgICAxMTcsIDE4OCwgMjQ1LCA3OSwgNDgsIDE4OCwgMjQ1LCA3OSwgNTEsIDE4OCwgMjIyLCAxMDcsIDE4OCwgMjQ0LCAxMzYsIAotICAgIDI0NywgMTIwLCAxODgsIDIyMywgMjQ4LCAxODgsIDIyMiwgMTM0LCAxODgsIDExMywgNjcsIDE3MCwgNDgsIDE4OCwgMTEzLCAKLSAgICA2NywgMTcwLCA1MSwgMTg4LCAxMzQsIDE3MCwgNDgsIDE4OCwgMTM0LCAxNzAsIDUxLCAxODgsIDIyNiwgMjQ4LCAyMzIsIAotICAgIDIxNCwgNDgsIDE4OCwgMjI2LCAyNDgsIDIzMiwgMjE0LCA1MSwgMTg4LCAyMzAsIDU2LCAxODgsIDI1MiwgMTMxLCAxODgsIAotICAgIDEsIDIxOSwgNDksIDIxMCwgODAsIDE4OCwgMSwgMjE5LCA0OSwgMjM0LCAxMjIsIDE4OCwgMSwgMjE5LCA0OSwgMjQ0LCAKLSAgICAxNTQsIDEwLCAxLCAyNTIsIDU1LCAyLCAxMzQsIDE3MCwgMjQwLCAyNTAsIDUxLCAxMCwgMSwgMjUyLCA1NSwgMiwgNTksIAotICAgIDI1MiwgNDMsIDIyLCAxMzQsIDE3MCwgNDgsIDEwLCAxLCAyNTIsIDU1LCAyLCAxMzQsIDE3MCwgMjI1LCA3LCAyMTQsIDE1MywgCi0gICAgNTEsIDEwLCAxLCAyNTIsIDU1LCAyLCAxMzQsIDE3MCwgMjI1LCA3LCAyMTQsIDE1MywgMjUyLCA0MywgMjIsIDExMywgMTcwLCAKLSAgICA0OCwgMTAsIDEsIDI1MiwgNTUsIDIsIDExMywgMTcwLCAyNTIsIDQzLCAyMiwgNTksIDQ4LCAxMCwgMSwgMjUyLCA1NSwgMiwgCi0gICAgMjM1LCAxOTMsIDQsIDIxNCwgMTA2LCA1MSwgMTAsIDEsIDI1MiwgNTUsIDIsIDQsIDIxNCwgMTA1LCAxMCwgMSwgMTIyLCAyLCAKLSAgICAxMTMsIDE3MCwgNDgsIDEwLCAxLCAxMjIsIDIsIDEzNCwgMTcwLCAyMjUsIDcsIDIxNCwgMTUzLCA1MSwgMTAsIDEsIDI0OCwgCi0gICAgMTk2LCAyLCAxMTMsIDE3MCwgMjEzLCAxODksIDI1MiwgNDMsIDIyLCA0LCAyMTcsIDgwLCAxMCwgMSwgMjQ4LCAxOTYsIDIsIAotICAgIDIzNSwgMTkzLCA0LCAyMTQsIDEwNiwgNTEsIDEwLCAxLCAyMjMsIDk2LCAyLCA5MSwgMTAsIDEsIDIyMSwgMTY3LCAyLCAKLSAgICAyNDQsIDExLCAxNzAsIDQ4LCAxMCwgMSwgMjU0LCAxOTcsIDIsIDExMywgMTcwLCA0OCwgMTAsIDEsIDI1NCwgMTk3LCAyLCAKLSAgICAxMzQsIDE3MCwgMjI1LCA3LCAyNDYsIDEwNCwgNDgsIDEwLCAxLCAyNTQsIDE5NywgMiwgMTEzLCAxNzAsIDIxMywgMTg5LCAKLSAgICA0OCwgMTAsIDEsIDI0NCwgMTQzLCAyLCAxMTMsIDE3MCwgNTEsIDEwLCAxLCAyNDQsIDE0MywgMiwgMTM0LCAxNzAsIDIyNSwgCi0gICAgNywgMjE0LCAxNTMsIDUxLCAxMCwgMSwgMjM0LCAxNzUsIDIsIDU5LCA0OCwgMTAsIDEsIDIzNCwgMTc1LCAyLCAxMzQsIAotICAgIDE3MCwgNDgsIDEwLCAxLCAyMzQsIDE3NSwgMiwgMTM0LCAxNzAsIDIyNSwgNywgMjE0LCAxNTMsIDUxLCAxMCwgMSwgNjYsIAotICAgIDIsIDU5LCA0OCwgMTAsIDEsIDY2LCAyLCA1OSwgNTEsIDEwLCAxLCAyMjgsIDYzLCAyLCAxMTMsIDE3MCwgNTEsIDEwLCAxLCAKLSAgICAyMjgsIDYzLCAyLCA0LCAyMTcsIDgwLCAxMCwgMSwgMjI4LCA2MywgMiwgNCwgMjE0LCAxMDUsIDEwLCAxLCAyMzMsIDEwMywgCi0gICAgMiwgMTMwLCAxMCwgMSwgMjIzLCA5NiwgMiwgMTEzLCAxNzAsIDIxMywgMTg5LCA0OCwgMTAsIDEsIDIyMywgOTYsIDIsIAotICAgIDIwMiwgNDgsIDEwLCAxLCAyMjEsIDE2NywgMiwgMTEzLCAxNzAsIDIxMywgMTg5LCA0OCwgMTAsIDEsIDEyMiwgMiwgNCwgCi0gICAgMTAsIDEsIDIxNywgODEsIDUxLCAxMCwgMSwgMTIyLCAyLCA0LCAxMCwgMSwgMjE3LCA4MSwgMjIsIDExMywgMjQ3LCAxMTgsIAotICAgIDEwLCAxLCAyMjEsIDE2NywgMiwgNCwgMTAsIDEsIDIxNywgODEsIDIyLCAxMTMsIDI0NywgMTE4LCAxMCwgMSwgMjIzLCA5NiwgCi0gICAgMiwgNCwgMTAsIDEsIDIxNywgODEsIDIyLCAxMTMsIDI0NywgMTE4LCAxMCwgMSwgMTIyLCAyLCA0LCAxMCwgMSwgMjE3LCAKLSAgICA4MSwgNDgsIDEwLCAxLCAxMTIsIDIsIDI0NSwgMjIsIDI1NCwgMzcsIDIxLCAxMTMsIDQ4LCAxMCwgMSwgMTEyLCAyLCAyNDUsIAotICAgIDIyLCAyNTQsIDM3LCAyMSwgMTM0LCA0OCwgMTAsIDEsIDI0NCwgMTY4LCA3OSwgMiwgMjQ1LCAyMiwgMjU0LCAzNywgMjEsIAotICAgIDExMywgNDgsIDEwLCAxLCAyNDQsIDE2OCwgNzksIDIsIDI0NSwgMjIsIDI1NCwgMzcsIDIxLCAxMzQsIDQ4LCAxMCwgMSwgCi0gICAgMjQ0LCAxNjgsIDc5LCAyLCAyNDUsIDIyLCAyNTQsIDM3LCAyMSwgMjQ0LCAxMSwgNTEsIDEwLCAxLCAyMTIsIDMxLCAyLCAKLSAgICAyNDUsIDIyLCAyNTQsIDM3LCAyMSwgMTEzLCA0OCwgMTAsIDEsIDIxMiwgMzEsIDIsIDI0NSwgMjIsIDI1NCwgMzcsIDIxLCAKLSAgICAxMzQsIDQ4LCAxMCwgMSwgNzksIDI1MiwgMTMzLCAyLCAyNDUsIDIyLCAyNTQsIDM3LCAyMSwgMTEzLCA0OCwgMTAsIDEsIAotICAgIDc5LCAyNTIsIDEzMywgMiwgMjQ1LCAyMiwgMjU0LCAzNywgMjEsIDEzNCwgNDgsIDEwLCAxLCAxMjIsIDIsIDI0NSwgMjIsIAotICAgIDI1NCwgMzcsIDIxLCAyNDQsIDExLCA1MSwgMTAsIDEsIDIyMSwgMTY3LCAyLCAyNDUsIDIyLCAyNTQsIDM3LCAyMSwgMjQ0LCAKLSAgICAxMSwgNDgsIDEwLCAxLCAyMjEsIDE2NywgMiwgMjM1LCAxOTMsIDIxNCwgMTA1LCAxMCwgMSwgMjM0LCAyNTEsIDIsIDExMywgCi0gICAgMTcwLCA0OCwgMjE2LCAyMDUsIDEsIDI0MiwgNDYsIDIxNiwgMjA1LCAxLCAyMjAsIDY4LCAyMTYsIDIwNSwgMSwgMjI4LCAKLSAgICA2MSwgMjE2LCAyMDUsIDEsIDIyMywgMTg0LCAyMTYsIDIwNSwgMSwgMjUyLCAxODksIDIxNiwgMjA1LCAxLCAyMzIsIDI1MSwgCi0gICAgMjE2LCAyMDUsIDEsIDIzNSwgOCwgMjE2LCAyMDUsIDEsIDI1NCwgMTU5LCAyMTYsIDIwNSwgMSwgMjE0LCAyNSwgMjE2LCAKLSAgICAyMDUsIDEsIDIzMSwgNzcsIDIxNiwgMjA1LCAxLCAyNDQsIDE5NCwgMjE2LCAyMDUsIDEsIDI0OCwgMjMsIDIxNiwgMjA1LCAKLSAgICAxLCAyMTYsIDIwNywgMjE2LCAyMDUsIDEsIDIzMywgMTMxLCAyMTYsIDIwNSwgMSwgMjQzLCAxMzEsIDIxNiwgMjA1LCAxLCAKLSAgICAyNDIsIDE3NywgMjE2LCAyMDUsIDEsIDIyMSwgMTY1LCAyMTYsIDIwNSwgMSwgMjQ4LCAxNDgsIDIxNiwgMjA1LCAxLCAyMTAsIAotICAgIDEwMCwgMjE2LCAyMDUsIDEsIDIxNywgMzcsIDIxNiwgMjA1LCAxLCAyMTEsIDEwMywgMjE2LCAyMDUsIDEsIDIyNSwgMjMzLCAKLSAgICAyMTYsIDIwNSwgMSwgMjM1LCAxMjgsIDIxNiwgMjA1LCAxLCAyNTAsIDEzNCwgMjE2LCAyMDUsIDEsIDIxNSwgMTU1LCAyMTYsIAotICAgIDIwNSwgMSwgMjQxLCAxODgsIDIxNiwgMjA1LCAxLCAyMzQsIDEzMSwgMjE2LCAyMDUsIDEsIDIxNiwgMjA2LCAyMTYsIDIwNSwgCi0gICAgMSwgMjEwLCAxMTUsIDIxNiwgMjA1LCAxLCAyMjAsIDU4LCAyMTYsIDIwNSwgMSwgMjIyLCAzMCwgMjE2LCAyMDUsIDEsIAotICAgIDI0OCwgMjE5LCAyMTYsIDIwNSwgMSwgMTExLCAyMTYsIDIwNSwgMSwgMjEwLCAyMywgMjE2LCAyMDUsIDEsIDI1NCwgMTkzLCAKLSAgICAyMTYsIDIwNSwgMSwgMjQyLCAyNDMsIDIxNiwgMjA1LCAxLCAyMjQsIDg1LCAyMTYsIDIwNSwgMSwgMjEyLCA2MywgMjE2LCAKLSAgICAyMDUsIDI1NSwgMjIsIDIxNiwgMjA1LCAyNTUsIDM4LCAyMTYsIDIwNSwgMjQwLCAxMTQsIDIxNiwgMjA1LCAyNDUsIDIwOCwgCi0gICAgMjE2LCAyMDUsIDIxNCwgMjIyLCAyMTYsIDIwNSwgMjI2LCAxODIsIDIxNiwgMjA1LCAyNDUsIDIxNiwgMjE2LCAyMDUsIAotICAgIDI0NSwgMTYsIDIxNiwgMjA1LCAyMjYsIDI0NywgMjE2LCAyMDUsIDIyNiwgMjU1LCAyMTYsIDIwNSwgMjE4LCA0NSwgMjE2LCAKLSAgICAyMDUsIDEsIDIyOSwgMjI1LCAyMjgsIDEzNywgMjEsIDIxMCwgODYsIDIyOCwgMTM3LCAyMSwgMTEwLCAyMjgsIDEzNywgMjEsIAotICAgIDEwNSwgMjI4LCAxMzcsIDIxLCAxNTgsIDIyOCwgMTM3LCAyMSwgMTYxLCAyMjgsIDEzNywgMjEsIDE4OSwgMjI4LCAxMzcsIAotICAgIDIxLCAxOTQsIDIyOCwgMTM3LCAyMSwgMTk4LCAyMjgsIDEzNywgMjEsIDE5NSwgMjI4LCAxMzcsIDIxLCAyMDAsIDIyOCwgCi0gICAgMTM3LCAxLCA2MSwgMjI4LCAxMzcsIDEsIDI0NSwgMjA5LCAyMjgsIDEzNywgMSwgNzMsIDIyOCwgMTM3LCAxLCA3NSwgMjI4LCAKLSAgICAxMzcsIDEsIDcwLCAyMjgsIDEzNywgMSwgMjI2LCAxODMsIDIyOCwgMTM3LCAxLCA3NiwgMjI4LCAxMzcsIDEsIDI0OCwgCi0gICAgMjA5LCAyMjgsIDEzNywgMSwgMjMwLCAyNSwgMjI4LCAxMzcsIDEsIDI1MiwgMTkxLCAyMjgsIDEzNywgMSwgMTkwLCAyMjgsIAotICAgIDEzNywgMSwgMjE3LCAxMDUsIDIyOCwgMTM3LCAxLCAyMzUsIDE0MSwgMjI4LCAxMzcsIDEsIDI1MCwgMTU3LCAyMjgsIDEzNywgCi0gICAgMSwgMjQ4LCAyMjEsIDIyOCwgMTM3LCAxLCAyMDUsIDIyOCwgMTM3LCAxLCAyMjIsIDE3OSwgMjI4LCAxMzcsIDEsIDIwNiwgCi0gICAgMjI4LCAxMzcsIDEsIDI0MywgNzksIDIyOCwgMTM3LCAxLCAyNDQsIDE5NiwgMjI4LCAxMzcsIDEsIDE3NiwgMjI4LCAxMzcsIAotICAgIDEsIDIzMywgMTM1LCAyMjgsIDEzNywgMSwgMjI5LCAyMjksIDIxMSwgMjIzLCAyMjgsIDEzNywgMSwgMTg0LCAyMjgsIDEzNywgCi0gICAgMSwgMjI3LCAxNjUsIDIyOCwgMTM3LCAxLCAxOTcsIDIyOCwgMTM3LCAxLCAxNjIsIDIyOCwgMTM3LCAxLCAyMTIsIDY1LCAKLSAgICAyMjgsIDEzNywgMSwgMTkxLCAyMjgsIDEzNywgMSwgMjI3LCAxNjYsIDIxMSwgMjIzLCAyMjgsIDEzNywgMSwgMjM1LCA2MSwgCi0gICAgMjM1LCAxNDEsIDIyOCwgMTM3LCAxLCAyMzUsIDYxLCAyNTAsIDE1NywgMjI4LCAxMzcsIDEsIDIzNSwgNjEsIDIwNSwgMjI4LCAKLSAgICAxMzcsIDM4LCAyMTksIDI1MSwgMTI1LCAyMTYsIDMwLCAyMjgsIDEzNywgMzgsIDIxOSwgMjUxLCAxMjEsIDIxNiwgMzAsIAotICAgIDIyOCwgMTM3LCAzOCwgMjE5LCAyNTEsIDIyMiwgMjI4LCAyMTYsIDMwLCAyMjgsIDEzNywgMzgsIDE5OSwgMjQ4LCAzOCwgCi0gICAgMjE2LCAzMCwgMjI4LCAxMzcsIDM4LCAxOTksIDEyNSwgMjE2LCAzMCwgMjI4LCAxMzcsIDM4LCAxOTksIDEyMSwgMjE2LCAKLSAgICAzMCwgMjI4LCAxMzcsIDM4LCAxOTksIDIyMiwgMjI4LCAyMTYsIDMwLCAyMjgsIDEzNywgMzgsIDIyOSwgMTkzLCA3OCwgCi0gICAgMjI4LCAxMzcsIDM4LCA1MiwgNTksIDQ4LCAyMjgsIDEzNywgMTI1LCAxMzgsIDI1NCwgNTcsIDIyOCwgMTM3LCAxMjEsIAotICAgIDEzOCwgMjU0LCA1NywgMjI4LCAxMzcsIDE2LCAyMjYsIDE4NCwgMjQ4LCA1MCwgMjI4LCAxMzcsIDE2LCAyNDMsIDc4LCAKLSAgICAyMjgsIDEzNywgMjQ5LCAyMTksIDIyOCwgMTM3LCAyNDUsIDMxLCA3OCwgMjI4LCAxMzcsIDIzMywgMTA4LCAyMjEsIDI1MiwgCi0gICAgMSwgMjU0LCAxNzYsIDIyMSwgMjUyLCAxLCAyNTEsIDIyOCwgMjIxLCAyNTIsIDEsIDI0MywgMTEyLCAyMjEsIDI1MiwgMSwgCi0gICAgMjQ4LCAxOTQsIDIyMSwgMjUyLCAxLCAyMzUsIDE1MiwgMjIxLCAyNTIsIDEsIDI1MiwgMTg5LCAyMjEsIDI1MiwgMSwgMjEwLCAKLSAgICA4OSwgMjIxLCAyNTIsIDEsIDIzNSwgMTYwLCAyMjEsIDI1MiwgMSwgMjE2LCA2NywgMjIxLCAyNTIsIDEsIDIxMCwgMTgyLCAKLSAgICAyMjEsIDI1MiwgMSwgMjM1LCA5LCAyMjEsIDI1MiwgMSwgMjMzLCAxMjgsIDIyMSwgMjUyLCAxLCAyMzAsIDE5MCwgMjIxLCAKLSAgICAyNTIsIDEsIDIyNywgMTk0LCAyMjEsIDI1MiwgMSwgMjE5LCAxNTYsIDIyMSwgMjUyLCAxLCAyMzUsIDI1NSwgMjIxLCAyNTIsIAotICAgIDEsIDI0NCwgMTIxLCAyMjEsIDI1MiwgMSwgMjE1LCAxODEsIDIyMSwgMjUyLCAxLCAyMjQsIDEwLCAyMjEsIDI1MiwgMSwgCi0gICAgMjIyLCAyMjksIDIyMSwgMjUyLCAxLCAyMjAsIDg1LCAyMjEsIDI1MiwgMSwgMjE3LCAxMDAsIDIyMSwgMjUyLCAxNjQsIAotICAgIDIzNSwgMjU1LCAyMjEsIDI1MiwgMTY0LCAyMzUsIDI1NCwgMjIxLCAyNTIsIDE2NCwgMjI2LCAyNDMsIDIyMSwgMjUyLCAKLSAgICAxNjQsIDI0OCwgMjA3LCAyMjEsIDI1MiwgNTgsIDEsIDI0NSwgMTA1LCAyMTAsIDE4MiwgMjIxLCAyNTIsIDE2NCwgMjQ1LCAKLSAgICAxMDUsIDIxMCwgMTgyLCAyMjEsIDI1MiwgMjUsIDUsIDE5OSwgNzUsIDIyMSwgMjUyLCAyNSwgNSwgNzUsIDIyMSwgMjUyLCAKLSAgICAyNSwgNSwgMjI2LCAxMTgsIDI1NSwgNzMsIDIyMSwgMjUyLCAyNSwgNSwgMTk5LCAyNTUsIDczLCAyMjEsIDI1MiwgMjUsIDUsIAotICAgIDI1NSwgNzMsIDIyMSwgMjUyLCAyNSwgNSwgMjI2LCAxMTgsIDYxLCAyMjEsIDI1MiwgMjUsIDUsIDE5OSwgNjEsIDIyMSwgCi0gICAgMjUyLCAyNSwgNSwgNjEsIDIyMSwgMjUyLCA1OCwgMSwgMjE5LCAyNTEsIDYxLCAyMjEsIDI1MiwgMjUsIDUsIDIxOSwgMjUxLCAKLSAgICA2MSwgMjIxLCAyNTIsIDI1LCA1LCAxOTksIDcwLCAyMjEsIDI1MiwgMjUsIDUsIDcwLCAyMjEsIDI1MiwgNTgsIDEsIDczLCAKLSAgICAyMjEsIDI1MiwgMjUsIDUsIDE5OSwgNzMsIDIyMSwgMjUyLCAyNSwgNSwgNzMsIDIyMSwgMjUyLCAyNSwgNSwgNzYsIDIyMSwgCi0gICAgMjUyLCAyNSwgNSwgMjE4LCA0NSwgMjIxLCAyNTIsIDE2NCwgMjI5LCA5MiwgMjIxLCAyNTIsIDIyNCwgMTQxLCAyMjksIDkyLCAKLSAgICAyMjEsIDI1MiwgMjI0LCAxNDEsIDI1NCwgMjE4LCAyMjEsIDI1MiwgMjI0LCAxNDEsIDI1NCwgMTE0LCAyMjEsIDI1MiwgCi0gICAgMjI0LCAxNDEsIDI1MiwgMTE0LCAyMjEsIDI1MiwgMjI0LCAxNDEsIDI1MywgMjAxLCAyMjEsIDI1MiwgMjI0LCAxNDEsIAotICAgIDIyMCwgOCwgMjIxLCAyNTIsIDI1NSwgMjEsIDc4LCAyMjEsIDI1MiwgMjI0LCAxNDEsIDIzMSwgNjgsIDIyNCwgNDUsIDIyMSwgCi0gICAgMjUyLCAyMjQsIDE0MSwgMjEwLCAzMSwgMjIxLCAyNTIsIDIyNCwgMTQxLCAyMjQsIDQ1LCAyMjEsIDI1MiwgMjI0LCAxNDEsIAotICAgIDIxMCwgMTE0LCAyMjEsIDI1MiwgMjI0LCAxNDEsIDIxNSwgOTAsIDIyMSwgMjUyLCAyMjQsIDE0MSwgMjU0LCA5LCAyMjEsIAotICAgIDI1MiwgMjI0LCAxNDEsIDIxOSwgNTMsIDIzMSwgMTQ1LCAyMjEsIDI1MiwgMjI0LCAxNDEsIDI1NCwgMTAwLCAyMzEsIDE4MiwgCi0gICAgMSwgMjQyLCAyNCwgMjMxLCAxODIsIDEsIDI1NSwgMjUsIDIzMSwgMTgyLCAxLCAyNTQsIDIxNiwgMjMxLCAxODIsIDEsIAotICAgIDI1NCwgMjU1LCAyMzEsIDE4MiwgMSwgMjU0LCAyMDksIDIzMSwgMTgyLCAxLCAyMTQsIDEyNCwgMjMxLCAxODIsIDEsIDI1MywgCi0gICAgMTYwLCAyMzEsIDE4MiwgMSwgMjM1LCAxNjAsIDIzMSwgMTgyLCAxLCAyNTMsIDE5OCwgMjMxLCAxODIsIDEsIDI1NCwgMTgxLCAKLSAgICAyMzEsIDE4MiwgMSwgMjU0LCAxODYsIDIzMSwgMTgyLCAxLCAyNTQsIDE3OCwgMjMxLCAxODIsIDEsIDI1NCwgMTM2LCAyMzEsIAotICAgIDE4MiwgMSwgMjU0LCAxMjMsIDIzMSwgMTgyLCAxLCAyNTMsIDIzNywgMjMxLCAxODIsIDEsIDIzNSwgMjU1LCAyMzEsIDE4MiwgCi0gICAgMSwgMjU0LCA3MiwgMjMxLCAxODIsIDEsIDI1MywgMjA4LCAyMzEsIDE4MiwgMSwgMjU0LCA0NSwgMjMxLCAxODIsIDEsIAotICAgIDI1NCwgNDEsIDIzMSwgMTgyLCAxLCAyNTMsIDIzMSwgMjMxLCAxODIsIDEsIDI1MywgMjA2LCAyMzEsIDE4MiwgMSwgMjQ2LCAKLSAgICA1NSwgMjMxLCAxODIsIDEsIDIzNSwgMiwgMjMxLCAxODIsIDEsIDI1NCwgMTk2LCAyMzEsIDE4MiwgMjU0LCAyMjIsIDc4LCAKLSAgICAyMzEsIDE4MiwgMjEzLCAxMzYsIDc4LCAyMzEsIDE4MiwgMjQzLCA1MywgNzgsIDIzMSwgMTgyLCAyMjQsIDE0MCwgMTAsIDEsIAotICAgIDI1MiwgNTUsIDIsIDQsIDIxNCwgMTA2LCA1MSwgMTAsIDEsIDE1MSwgMiwgMTEzLCAxNzAsIDQ4LCAxMCwgMSwgMjE3LCA4MSwgCi0gICAgMiwgMTEzLCAxNzAsIDQ4LCAxMCwgMSwgMjQ0LCAxNDMsIDIsIDU5LCAyNTIsIDQzLCAyMiwgMTM0LCAxNzAsIDQ4LCAxMCwgCi0gICAgMSwgMjI0LCA4MiwgMiwgNTksIDUxLCAxMCwgMSwgMjMzLCAxMDMsIDIsIDUyLCAxMzAsIDEwLCAxLCA2NiwgMiwgMTM0LCAKLSAgICAxNzAsIDQ4LCAxMCwgMSwgNzksIDIsIDExMywgMTcwLCAyNTIsIDQzLCAyMiwgMjAyLCA0OCwgMTAsIDEsIDc5LCAyLCAxMTMsIAotICAgIDE3MCwgMjUyLCA0MywgMjIsIDU5LCA0OCwgMTAsIDEsIDIyMywgOTYsIDIsIDIzMiwgMTIzLCAxMCwgMSwgMjEyLCAzMSwgMiwgCi0gICAgNTksIDIxMSwgMjMxLCAxMCwgMSwgMjIyLCAyMDEsIDIxMSwgNDMsIDEwLCAyNDksIDk5LCAyNDQsIDE2NSwgMTAsIDI0OSwgCi0gICAgOTksIDI0OCwgMTg0LCAxMCwgMjQ5LCA5OSwgMjM0LCAyMDUsIDEwLCAyNDksIDk5LCAyNDQsIDE2MywgMTAsIDI0OSwgOTksIAotICAgIDI0OCwgMTgyLCAxMCwgMjQ5LCA5OSwgMjM0LCAyMDMsIDEwLCAxMzgsIDEyMywgNTksIDQ4LCAxMCwgMTM4LCAxMTMsIDE3MCwgCi0gICAgNDgsIDEwLCAxMzgsIDIzMiwgMTI0LCA0OCwgMTAsIDEzOCwgMTIzLCA1OSwgNTEsIDEwLCAxMzgsIDExMywgMTcwLCA1MSwgCi0gICAgMTAsIDEzOCwgMjMyLCAxMjQsIDUxLCAxMCwgMjA0LCAyNDQsIDE2MywgMTAsIDIwNCwgMjQ4LCAxODIsIDEwLCAyMDQsIAotICAgIDIzNCwgMjAzLCAxMCwgNCwgMTI1LCAyMTIsIDMwLCAxMCwgMjQ0LCAxNjYsIDIsIDIyMiwgMjMzLCAxMCwgMjQ0LCAxNjYsIAotICAgIDIsIDU5LCA0OCwgMTAsIDIzNCwgMjA2LCAyLCA1OSwgNTEsIDEwLCA0MywgMjUzLCAyNTAsIDQ4LCAxMCwgNDQsIDI1MywgCi0gICAgMjUwLCA0OCwgMTAsIDQzLCAyNTMsIDI1MCwgNTEsIDEwLCA0NCwgMjUzLCAyNTAsIDUxLCAxMCwgNTIsIDQ0LCAyNTMsIAotICAgIDI1MCwgNDgsIDEwLCA1MiwgNDQsIDI1MywgMjUwLCA3NywgMiwgMjQ3LCAxMjAsIDEwLCA0NCwgMjUzLCAyNTAsIDc3LCAyLCAKLSAgICAyNDcsIDEyMCwgMTAsIDI0OCwgMTg1LCAyLCAyNDcsIDEyMCwgODQsIDUsIDIzNSwgMTkzLCAyNTAsIDI1NSwgODQsIDUsIAotICAgIDI1MCwgMjU1LCA4NCwgNSwgMjU0LCA3NSwgODQsIDUsIDIxMywgMTQ3LCA4NCwgMSwgMjE5LCAyNTEsIDYxLCA4NCwgMSwgCi0gICAgNjEsIDg0LCAxLCAyNTUsIDczLCA4NCwgMSwgNzMsIDg0LCAxLCAyMzYsIDMzLCA4NCwgMSwgNzAsIDg0LCAxLCAyMTQsIAotICAgIDExOCwgODQsIDEsIDE0OSwgMTUzLCA4NCwgMSwgMTQ5LCAxNTYsIDg0LCAxLCAyNTEsIDIsIDc1LCA4NCwgMSwgMjE5LCAKLSAgICAyNTEsIDc1LCA4NCwgMSwgNzUsIDg0LCAxLCAyNTQsIDIwMSwgODQsIDEsIDI1MSwgMiwgNzYsIDg0LCAxLCAyMTksIDI1MSwgCi0gICAgNzYsIDg0LCAxLCA3NiwgODQsIDEsIDI1MywgMTkyLCA4NCwgMSwgMTc2LCA4NCwgMSwgMjM0LCAxMzIsIDg0LCAxLCAyNDMsIAotICAgIDEzNSwgODQsIDEsIDI0MiwgMjQ5LCA4NCwgMSwgMjI5LCA3NywgODQsIDEsIDI1MSwgMzMsIDg0LCAxLCAyNTAsIDE1NywgCi0gICAgODQsIDEsIDIzNSwgMTQxLCA4NCwgMSwgMjM1LCAxMTQsIDg0LCAxLCAyMjcsIDE2NSwgODQsIDEsIDIxNSwgMTU2LCA4NCwgCi0gICAgMSwgMjE1LCAxNDQsIDg0LCAxLCAyNDgsIDEzNSwgODQsIDEsIDI0OCwgMTE5LCA4NCwgMSwgMjI4LCAxMTAsIDg0LCAxLCAKLSAgICAyMTcsIDEwNSwgODQsIDEsIDIxNiwgMjA4LCA4NCwgMSwgMjQ4LCAyMjEsIDg0LCAxLCAyNDgsIDI1LCA4NCwgMSwgMTk3LCAKLSAgICA4NCwgMSwgMjI4LCA5MiwgODQsIDEsIDE5MCwgODQsIDEsIDIyNSwgMTQ3LCA4NCwgMSwgMjUyLCAxOTEsIDg0LCAxLCAyNTIsIAotICAgIDE4LCA4NCwgMSwgMTg0LCA4NCwgMSwgMTkxLCA4NCwgMSwgMjA1LCA4NCwgMSwgMjIyLCAxNzksIDg0LCAxLCAyMzMsIDEzNSwgCi0gICAgODQsIDEsIDIzMiwgMTg0LCA4NCwgMSwgMjMyLCAxNzUsIDg0LCAxLCAyMTQsIDI3LCA4NCwgMSwgMjIwLCAxMDIsIDg0LCAxLCAKLSAgICAyMTgsIDIyMywgODQsIDEsIDIwNiwgODQsIDEsIDE2MiwgODQsIDI1LCA1LCAyMjYsIDIzNCwgODQsIDI1LCA1LCAyMjYsIAotICAgIDE4MSwgODQsIDUsIDIyNywgMjA1LCA4NCwgNSwgMjUzLCAxNzUsIDg0LCAyNSwgNSwgMjU1LCA3MywgODQsIDI1LCA1LCA3MywgCi0gICAgODQsIDI1LCA1LCAyMzYsIDMzLCA4NCwgMjUsIDUsIDcwLCA4NCwgMjUsIDUsIDIxNCwgMTE4LCA4NCwgMjUsIDUsIDE0OSwgCi0gICAgMTUzLCA4NCwgMjUsIDUsIDE0OSwgMjIyLCAxODAsIDg0LCAyNSwgNSwgMjUxLCAyLCA3NSwgODQsIDI1LCA1LCAyMTksIAotICAgIDI1MSwgNzUsIDg0LCAyNSwgNSwgNzUsIDg0LCAyNSwgNSwgMjU0LCAyMDEsIDg0LCAyNSwgNSwgMjUxLCAyLCA3NiwgODQsIAotICAgIDI1LCA1LCAyMTksIDI1MSwgNzYsIDg0LCAyNSwgNSwgNzYsIDg0LCAyNSwgNSwgMjUzLCAxOTIsIDg0LCA1LCAyMTMsIDE1MiwgCi0gICAgODQsIDI1LCA1LCAyMjQsIDE4NSwgNzUsIDg0LCAyNSwgNSwgMjUzLCAxNzEsIDg0LCAyMjYsIDIwNCwgODQsIDIxOCwgMTExLCAKLSAgICA1LCAyMTQsIDIxNiwgODQsIDIxOCwgMTExLCA1LCAyNTQsIDc3LCA4NCwgMjQyLCAxMzcsIDI1NSwgMTQsIDg0LCAyNTUsIDMsIAotICAgIDI1NSwgMTQsIDg0LCAyNSwgNSwgMjUxLCAyLCAxOTksIDc1LCA4NCwgMjUsIDUsIDIxNCwgMjE0LCA4NCwgMjUsIDUsIDIxNCwgCi0gICAgMTE3LCA4NCwgMSwgMjI0LCA4OCwgODQsIDEsIDIzNCwgMTE1LCA4NCwgMSwgMjQyLCAyMjYsIDg0LCAxLCAyMTAsIDExNiwgCi0gICAgODQsIDEsIDI0OCwgMTI0LCA4NCwgMSwgMjIzLCAzOSwgODQsIDEsIDI0NCwgMTk2LCA4NCwgMSwgMjEwLCAxNjgsIDg0LCAxLCAKLSAgICAxNDksIDIyMiwgMTgwLCA4NCwgMSwgMTQ5LCAyMzIsIDE4NSwgODQsIDI1LCA1LCAxNDksIDE1NiwgODQsIDI1LCA1LCAxNDksIAotICAgIDIzMiwgMTg1LCA4NCwgMjQ4LCAxNzgsIDg0LCA1MiwgMjQ4LCAxNzgsIDg0LCAyMSwgMjEwLCA4NiwgODQsIDIxLCAxMTAsIAotICAgIDg0LCAyMSwgMTA1LCA4NCwgMjEsIDE1OCwgODQsIDIxLCAxNjEsIDg0LCAyMSwgMTg5LCA4NCwgMjEsIDE5NCwgODQsIDIxLCAKLSAgICAxOTgsIDg0LCAyMSwgMTk1LCA4NCwgMjEsIDIwMCwgODQsIDI1NSwgMjEsIDUwLCA4NCwgNSwgMTI1LCAyMTksIDE3LCAyNDcsIAotICAgIDEyMCwgODQsIDEsIDI1MSwgMiwgNjEsIDg0LCAxLCAyMjYsIDIzNCwgODQsIDEsIDIyNiwgMTgxLCA4NCwgMSwgMjUzLCAKLSAgICAxNzEsIDg0LCAxLCAyMTQsIDIxNCwgODQsIDEsIDIxNCwgMTE3LCA4NCwgMSwgMjEwLCA4MiwgODQsIDEsIDExNCwgMTkxLCAKLSAgICA4NCwgMSwgMjQzLCAyOSwgODQsIDEsIDIzNSwgOTYsIDg0LCAxLCAyNDIsIDE4MCwgMjE4LCAxMjksIDg0LCAxLCAyNDgsIAotICAgIDEyNSwgODQsIDEsIDI1MiwgMTExLCAxNDYsIDUsIDI1MCwgMjU1LCAxNDYsIDUsIDI1NCwgNzUsIDE0NiwgNSwgMjEzLCAKLSAgICAxNDcsIDE0NiwgMSwgNjEsIDE0NiwgMSwgMjU1LCA3MywgMTQ2LCAxLCA3MywgMTQ2LCAxLCAyMzYsIDMzLCAxNDYsIDEsIAotICAgIDcwLCAxNDYsIDEsIDIxNCwgMTE4LCAxNDYsIDEsIDE0OSwgMTUzLCAxNDYsIDEsIDE0OSwgMTU2LCAxNDYsIDEsIDc1LCAKLSAgICAxNDYsIDEsIDI1NCwgMjAxLCAxNDYsIDEsIDc2LCAxNDYsIDEsIDI1MywgMTkyLCAxNDYsIDEsIDE3NiwgMTQ2LCAxLCAyMzQsIAotICAgIDEzMiwgMTQ2LCAxLCAyNDMsIDEzNSwgMTQ2LCAxLCAyNDIsIDI0OSwgMTQ2LCAxLCAyMjksIDc3LCAxNDYsIDEsIDI1MSwgCi0gICAgMzMsIDE0NiwgMSwgMjUwLCAxNTcsIDE0NiwgMSwgMjM1LCAxNDEsIDE0NiwgMSwgMjM1LCAxMTQsIDE0NiwgMSwgMjI3LCAKLSAgICAxNjUsIDE0NiwgMSwgMjE1LCAxNTYsIDE0NiwgMSwgMjE1LCAxNDQsIDE0NiwgMSwgMjQ4LCAxMzUsIDE0NiwgMSwgMjQ4LCAKLSAgICAxMTksIDE0NiwgMSwgMjI4LCAxMTAsIDE0NiwgMSwgMjE3LCAxMDUsIDE0NiwgMSwgMjE2LCAyMDgsIDE0NiwgMSwgMjQ4LCAKLSAgICAyMjEsIDE0NiwgMSwgMjQ4LCAyNSwgMTQ2LCAxLCAxOTcsIDE0NiwgMSwgMTkwLCAxNDYsIDEsIDIyNSwgMTQ3LCAxNDYsIDEsIAotICAgIDI1MiwgMTkxLCAxNDYsIDEsIDI1MiwgMTgsIDE0NiwgMSwgMTg0LCAxNDYsIDEsIDE5MSwgMTQ2LCAxLCAyMDUsIDE0NiwgMSwgCi0gICAgMjMzLCAxMzUsIDE0NiwgMSwgMjIwLCAxMDIsIDE0NiwgMSwgMjE4LCAyMjMsIDE0NiwgMSwgMjA2LCAxNDYsIDEsIDE2MiwgCi0gICAgMTQ2LCA1LCAyMjcsIDIwNSwgMTQ2LCA1LCAyNTMsIDE3NSwgMTQ2LCAyNSwgNSwgMjU1LCA3MywgMTQ2LCAyNSwgNSwgNzMsIAotICAgIDE0NiwgMjUsIDUsIDIzNiwgMzMsIDE0NiwgMjUsIDUsIDcwLCAxNDYsIDI1LCA1LCAyMTQsIDExOCwgMTQ2LCAyNSwgNSwgCi0gICAgMTQ5LCAxNTMsIDE0NiwgMjUsIDUsIDE0OSwgMjIyLCAxODAsIDE0NiwgMjUsIDUsIDc1LCAxNDYsIDI1LCA1LCAyNTQsIAotICAgIDIwMSwgMTQ2LCAyNSwgNSwgNzYsIDE0NiwgMjUsIDUsIDI1MywgMTkyLCAxNDYsIDUsIDIxMywgMTUyLCAxNDYsIDEsIDIzNCwgCi0gICAgMTI0LCAyMTcsIDEwNSwgMTQ2LCAyNTMsIDE5MywgMjMzLCAyMywgNzgsIDE0NiwgMSwgMjIyLCAxNzksIDE0NiwgMSwgMjIzLCAKLSAgICAzOSwgMTQ2LCAxLCAyMTAsIDE2OCwgMTQ2LCAxLCAxNDksIDIyMiwgMTgwLCAxNDYsIDEsIDE0OSwgMjMyLCAxODUsIDE0NiwgCi0gICAgMjUsIDUsIDE0OSwgMTU2LCAxNDYsIDI1LCA1LCAxNDksIDIzMiwgMTg1LCAxNDYsIDIxLCAyMTAsIDg2LCAxNDYsIDIxLCAKLSAgICAxMTAsIDE0NiwgMjEsIDEwNSwgMTQ2LCAyMSwgMTU4LCAxNDYsIDIxLCAxNjEsIDE0NiwgMjEsIDE4OSwgMTQ2LCAyMSwgCi0gICAgMTk0LCAxNDYsIDIxLCAxOTgsIDE0NiwgMjEsIDE5NSwgMTQ2LCAyMSwgMjAwLCAxNDYsIDEsIDIyMywgMTg4LCAyLCAyMzAsIAotICAgIDIyNCwgMjQ3LCAyNTQsIDE0NiwgMSwgMjIzLCAxODgsIDIsIDIzMiwgMTA4LCAyNDcsIDI1NCwgMTQ2LCAyMjIsIDExOCwgCi0gICAgNzgsIDE0NiwgMjIyLCAxMTgsIDUwLCAxNDYsIDI0OSwgOTgsIDIyNywgMTk3LCAxMTAsIDE0NiwgMjQ5LCA5OCwgMjI3LCAKLSAgICAxOTcsIDEwNSwgMTQ2LCAyNDksIDk4LCAyMjcsIDE5NywgMTU4LCAxNDYsIDI0OSwgOTgsIDIyNywgMTk3LCAxNjEsIDE0NiwgCi0gICAgMjQ5LCA5OCwgMjI3LCAxOTcsIDEyMywgMjMzLCAxNiwgMjE2LCAyMDEsIDIxNiwgMTk2LCAyNDgsIDQ4LCAxNDYsIDI0OSwgCi0gICAgOTgsIDI0OCwgNDksIDIxOSwgMTE5LCAxNDYsIDIzNSwgMTYxLCAxNDYsIDI0MywgMTAzLCA3OCwgMTgzLCA1LCAyNTQsIAotICAgIDI1NCwgMjUxLCAyNDMsIDE4MywgNSwgMjUxLCAyNDMsIDE4MywgNSwgMjEzLCAxNDcsIDE4MywgMSwgNjEsIDE4MywgMSwgCi0gICAgMjU1LCA3MywgMTgzLCAxLCA3MywgMTgzLCAxLCAyMzYsIDMzLCAxODMsIDEsIDcwLCAxODMsIDEsIDIxNCwgMTE4LCAxODMsIAotICAgIDEsIDI0NSwgMjA5LCAxODMsIDEsIDI1NCwgMjAxLCAxODMsIDEsIDIyNiwgMTgzLCAxODMsIDEsIDI1MywgMTkyLCAxODMsIAotICAgIDEsIDE3NiwgMTgzLCAxLCAyMzQsIDEzMiwgMTgzLCAxLCAyNDMsIDEzNSwgMTgzLCAxLCAyNDIsIDI0OSwgMTgzLCAxLCAKLSAgICAyMjksIDc3LCAxODMsIDEsIDI1MSwgMzMsIDE4MywgMSwgMjUwLCAxNTcsIDE4MywgMSwgMjM1LCAxNDEsIDE4MywgMSwgCi0gICAgMjM1LCAxMTQsIDE4MywgMSwgMjI3LCAxNjUsIDE4MywgMSwgMjE1LCAxNTYsIDE4MywgMSwgMjE1LCAxNDQsIDE4MywgMSwgCi0gICAgMjQ4LCAxMzUsIDE4MywgMSwgMjQ4LCAxMTksIDE4MywgMSwgMjI4LCAxMTAsIDE4MywgMSwgMjE3LCAxMDUsIDE4MywgMSwgCi0gICAgMjE2LCAyMDgsIDE4MywgMSwgMjQ4LCAyMjEsIDE4MywgMSwgMjQ4LCAyNSwgMTgzLCAxLCAxOTcsIDE4MywgMSwgMTkwLCAKLSAgICAxODMsIDEsIDIyNSwgMTQ3LCAxODMsIDEsIDI1MiwgMTkxLCAxODMsIDEsIDI1MiwgMTgsIDE4MywgMSwgMTg0LCAxODMsIDEsIAotICAgIDE5MSwgMTgzLCAxLCAyMDUsIDE4MywgMSwgMjMzLCAxMzUsIDE4MywgMSwgMjMyLCAxODQsIDE4MywgMSwgMjE0LCAyNywgCi0gICAgMTgzLCAxLCAyMjAsIDEwMiwgMTgzLCAxLCAyMDYsIDE4MywgMSwgMTYyLCAxODMsIDUsIDIyNywgMjA1LCAxODMsIDI1LCA1LCAKLSAgICAyNTUsIDczLCAxODMsIDI1LCA1LCA3MywgMTgzLCAyNSwgNSwgMjM2LCAzMywgMTgzLCAyNSwgNSwgNzAsIDE4MywgMjUsIDUsIAotICAgIDIxNCwgMTE4LCAxODMsIDI1LCA1LCAyNDUsIDIwOSwgMTgzLCAyNSwgNSwgMjU0LCAyMDEsIDE4MywgMjUsIDUsIDIyNiwgCi0gICAgMTgzLCAxODMsIDI1LCA1LCAyNTMsIDE5MiwgMTgzLCA1LCAyMTMsIDE1MiwgMTgzLCA1LCAyMTQsIDIxOCwgMTgzLCAxLCAKLSAgICAyMzQsIDExNSwgMTgzLCAxLCAyNDIsIDIyNiwgMTgzLCAxLCAyMTAsIDExNiwgMTgzLCAxLCAyMjIsIDE3OSwgMTgzLCAxLCAKLSAgICAyNDQsIDE5NiwgMTgzLCAyMSwgMjEwLCA4NiwgMTgzLCAyMSwgMTEwLCAxODMsIDIxLCAxMDUsIDE4MywgMjEsIDE1OCwgCi0gICAgMTgzLCAyMSwgMTYxLCAxODMsIDIxLCAxODksIDE4MywgMjEsIDE5NCwgMTgzLCAyMSwgMTk4LCAxODMsIDIxLCAxOTUsIAotICAgIDE4MywgMjEsIDIwMCwgMTgzLCAyMTYsIDc0LCAxODMsIDI1NCwgMjUzLCAxODMsIDIzNSwgMTc4LCAxODMsIDIxNCwgMTQ2LCAKLSAgICAxODMsIDI0NSwgMTgxLCAyMjYsIDE4OCwgMTgzLCA1LCAyMTEsIDc4LCAxNzEsIDUsIDI1MCwgMjU1LCAxNzEsIDUsIDI1NCwgCi0gICAgNzUsIDE3MSwgNSwgMjEzLCAxNDcsIDE3MSwgMSwgNjEsIDE3MSwgMSwgMjU1LCA3MywgMTcxLCAxLCA3MywgMTcxLCAxLCAKLSAgICAyMzYsIDMzLCAxNzEsIDEsIDcwLCAxNzEsIDEsIDIxNCwgMTE4LCAxNzEsIDEsIDE0OSwgMTUzLCAxNzEsIDEsIDE0OSwgCi0gICAgMTU2LCAxNzEsIDI1LCAyNTEsIDIsIDc1LCAxNzEsIDEsIDc1LCAxNzEsIDEsIDI1NCwgMjAxLCAxNzEsIDI1LCAyNTEsIDIsIAotICAgIDc2LCAxNzEsIDEsIDc2LCAxNzEsIDEsIDI1MywgMTkyLCAxNzEsIDEsIDE3NiwgMTcxLCAxLCAyMzQsIDEzMiwgMTcxLCAxLCAKLSAgICAyNDMsIDEzNSwgMTcxLCAxLCAyNDIsIDI0OSwgMTcxLCAxLCAyMjksIDc3LCAxNzEsIDEsIDI1MSwgMzMsIDE3MSwgMSwgCi0gICAgMjUwLCAxNTcsIDE3MSwgMSwgMjM1LCAxNDEsIDE3MSwgMSwgMjM1LCAxMTQsIDE3MSwgMSwgMjI3LCAxNjUsIDE3MSwgMSwgCi0gICAgMjE1LCAxNTYsIDE3MSwgMSwgMjE1LCAxNDQsIDE3MSwgMSwgMjQ4LCAxMzUsIDE3MSwgMSwgMjQ4LCAxMTksIDE3MSwgMSwgCi0gICAgMjI4LCAxMTAsIDE3MSwgMSwgMjE3LCAxMDUsIDE3MSwgMSwgMjE2LCAyMDgsIDE3MSwgMSwgMjQ4LCAyMjEsIDE3MSwgMSwgCi0gICAgMjQ4LCAyNSwgMTcxLCAxLCAxOTcsIDE3MSwgMSwgMTkwLCAxNzEsIDEsIDIyNSwgMTQ3LCAxNzEsIDEsIDI1MiwgMTkxLCAKLSAgICAxNzEsIDEsIDI1MiwgMTgsIDE3MSwgMSwgMTg0LCAxNzEsIDEsIDE5MSwgMTcxLCAxLCAyMDUsIDE3MSwgMSwgMjMzLCAxMzUsIAotICAgIDE3MSwgMSwgMjMyLCAxODQsIDE3MSwgMSwgMjE0LCAyNywgMTcxLCAxLCAyMjAsIDEwMiwgMTcxLCAxLCAyMTgsIDIyMywgCi0gICAgMTcxLCAxLCAyMDYsIDE3MSwgMSwgMTYyLCAxNzEsIDUsIDIyNywgMjA1LCAxNzEsIDUsIDI1MywgMTc1LCAxNzEsIDI1LCA1LCAKLSAgICAyNTUsIDczLCAxNzEsIDI1LCA1LCA3MywgMTcxLCAyNSwgNSwgMjM2LCAzMywgMTcxLCAyNSwgNSwgNzAsIDE3MSwgMjUsIDUsIAotICAgIDIxNCwgMTE4LCAxNzEsIDI1LCA1LCAxNDksIDE1MywgMTcxLCAyNSwgNSwgMTQ5LCAyMjIsIDE4MCwgMTcxLCAyNSwgNSwgCi0gICAgMjUxLCAyLCA3NSwgMTcxLCAyNSwgNSwgNzUsIDE3MSwgMjUsIDUsIDI1NCwgMjAxLCAxNzEsIDI1LCA1LCAyNTEsIDIsIDc2LCAKLSAgICAxNzEsIDI1LCA1LCA3NiwgMTcxLCAyNSwgNSwgMjUzLCAxOTIsIDE3MSwgNSwgMjEzLCAxNTIsIDE3MSwgMjI2LCAyMDQsIAotICAgIDE3MSwgMSwgMTQ5LCAyMjIsIDE4MCwgMTcxLCAxLCAxNDksIDIzMiwgMTg1LCAxNzEsIDI1LCA1LCAxNDksIDE1NiwgMTcxLCAKLSAgICAyNSwgNSwgMTQ5LCAyMzIsIDE4NSwgMTcxLCAyMSwgMjEwLCA4NiwgMTcxLCAyMSwgMTEwLCAxNzEsIDIxLCAxMDUsIDE3MSwgCi0gICAgMjEsIDE1OCwgMTcxLCAyMSwgMTYxLCAxNzEsIDIxLCAxODksIDE3MSwgMjEsIDE5NCwgMTcxLCAyMSwgMTk4LCAxNzEsIDIxLCAKLSAgICAxOTUsIDE3MSwgMjEsIDIwMCwgMTcxLCAyNTUsIDIxLCA1MCwgMTcxLCAyMjIsIDExOCwgNTAsIDE1NywgNSwgMjUwLCAyNTUsIAotICAgIDE1NywgNSwgMjU0LCA3NSwgMTU3LCA1LCAyMTMsIDE0NywgMTU3LCAxLCA2MSwgMTU3LCAxLCAyNTUsIDczLCAxNTcsIDEsIAotICAgIDczLCAxNTcsIDEsIDIzNiwgMzMsIDE1NywgMSwgNzAsIDE1NywgMSwgMjE0LCAxMTgsIDE1NywgMSwgMTQ5LCAxNTMsIDE1NywgCi0gICAgMSwgMTQ5LCAxNTYsIDE1NywgMSwgNzUsIDE1NywgMSwgMjU0LCAyMDEsIDE1NywgMSwgNzYsIDE1NywgMSwgMjUzLCAxOTIsIAotICAgIDE1NywgMSwgMTc2LCAxNTcsIDEsIDIzNCwgMTMyLCAxNTcsIDEsIDI0MywgMTM1LCAxNTcsIDEsIDI0MiwgMjQ5LCAxNTcsIAotICAgIDEsIDIyOSwgNzcsIDE1NywgMSwgMjUxLCAzMywgMTU3LCAxLCAyNTAsIDE1NywgMTU3LCAxLCAyMzUsIDE0MSwgMTU3LCAxLCAKLSAgICAyMzUsIDExNCwgMTU3LCAxLCAyMjcsIDE2NSwgMTU3LCAxLCAyMTUsIDE1NiwgMTU3LCAxLCAyMTUsIDE0NCwgMTU3LCAxLCAKLSAgICAyNDgsIDEzNSwgMTU3LCAxLCAyNDgsIDExOSwgMTU3LCAxLCAyMjgsIDExMCwgMTU3LCAxLCAyMTcsIDEwNSwgMTU3LCAxLCAKLSAgICAyMTYsIDIwOCwgMTU3LCAxLCAyNDgsIDIyMSwgMTU3LCAxLCAyNDgsIDI1LCAxNTcsIDEsIDE5NywgMTU3LCAxLCAxOTAsIAotICAgIDE1NywgMSwgMjI1LCAxNDcsIDE1NywgMSwgMjUyLCAxOTEsIDE1NywgMSwgMjUyLCAxOCwgMTU3LCAxLCAxODQsIDE1NywgMSwgCi0gICAgMTkxLCAxNTcsIDEsIDIwNSwgMTU3LCAxLCAyMzMsIDEzNSwgMTU3LCAxLCAyMzIsIDE4NCwgMTU3LCAxLCAyMTQsIDI3LCAKLSAgICAxNTcsIDEsIDIyMCwgMTAyLCAxNTcsIDEsIDIxOCwgMjIzLCAxNTcsIDEsIDIwNiwgMTU3LCAxLCAxNjIsIDE1NywgNSwgCi0gICAgMjI3LCAyMDUsIDE1NywgNSwgMjUzLCAxNzUsIDE1NywgMjUsIDUsIDI1NSwgNzMsIDE1NywgMjUsIDUsIDczLCAxNTcsIDI1LCAKLSAgICA1LCAyMzYsIDMzLCAxNTcsIDI1LCA1LCA3MCwgMTU3LCAyNSwgNSwgMjE0LCAxMTgsIDE1NywgMjUsIDUsIDE0OSwgMTUzLCAKLSAgICAxNTcsIDI1LCA1LCAxNDksIDIyMiwgMTgwLCAxNTcsIDI1LCA1LCA3NSwgMTU3LCAyNSwgNSwgMjU0LCAyMDEsIDE1NywgMjUsIAotICAgIDUsIDc2LCAxNTcsIDI1LCA1LCAyNTMsIDE5MiwgMTU3LCA1LCAyMTMsIDE1MiwgMTU3LCAyNTQsIDIwMiwgMjMzLCAyMywgCi0gICAgNzgsIDE1NywgMjUzLCAxOTMsIDIzMywgMjMsIDc4LCAxNTcsIDEsIDIyMiwgMTc5LCAxNTcsIDEsIDIyMywgMzksIDE1NywgCi0gICAgMSwgMjEwLCAxNjgsIDE1NywgMSwgMTQ5LCAyMjIsIDE4MCwgMTU3LCAxLCAxNDksIDIzMiwgMTg1LCAxNTcsIDI1LCA1LCAKLSAgICAxNDksIDE1NiwgMTU3LCAyNSwgNSwgMTQ5LCAyMzIsIDE4NSwgMTU3LCAyMSwgMjEwLCA4NiwgMTU3LCAyMSwgMTEwLCAxNTcsIAotICAgIDIxLCAxMDUsIDE1NywgMjEsIDE1OCwgMTU3LCAyMSwgMTYxLCAxNTcsIDIxLCAxODksIDE1NywgMjEsIDE5NCwgMTU3LCAyMSwgCi0gICAgMTk4LCAxNTcsIDIxLCAxOTUsIDE1NywgMjEsIDIwMCwgMTU3LCAyMzUsIDE2MSwgMTU3LCAxLCAyMTIsIDY1LCAxNTcsIAotICAgIDI0NCwgMiwgMTIzLCAyMjQsIDIxLCAxNTcsIDI0NCwgMiwgMTIzLCAyNDIsIDI3LCAxNTcsIDI0NCwgMiwgMTM0LCAyMjQsIAotICAgIDE5LCAxNTcsIDI0NCwgMiwgMTIzLCAyMTksIDExNywgMTU3LCAyNDQsIDIsIDEyMywgMjQ1LCAxODgsIDE1NywgMjQ0LCAyLCAKLSAgICAxMzQsIDIxOSwgMTE2LCAzNiwgNSwgMjU0LCA3NSwgMzYsIDUsIDIxMywgMTQ3LCAzNiwgMSwgNjEsIDM2LCAxLCAyNTUsIAotICAgIDczLCAzNiwgMSwgNzMsIDM2LCAxLCAyMzYsIDMzLCAzNiwgMSwgNzAsIDM2LCAxLCAyMTQsIDExOCwgMzYsIDEsIDc1LCAzNiwgCi0gICAgMSwgMjQ1LCAyMDksIDM2LCAxLCAyNTQsIDIwMSwgMzYsIDEsIDc2LCAzNiwgMSwgMjI2LCAxODMsIDM2LCAxLCAyNTMsIAotICAgIDE5MiwgMzYsIDEsIDE3NiwgMzYsIDEsIDIyOSwgNzcsIDM2LCAxLCAyNTEsIDMzLCAzNiwgMSwgMjM1LCAxNDEsIDM2LCAxLCAKLSAgICAyMjcsIDE2NSwgMzYsIDEsIDIxNSwgMTU2LCAzNiwgMSwgMjI4LCAxMTAsIDM2LCAxLCAyMTcsIDEwNSwgMzYsIDEsIDE5NywgCi0gICAgMzYsIDEsIDIyOCwgOTIsIDM2LCAxLCAxOTAsIDM2LCAxLCAxODQsIDM2LCAxLCAxOTEsIDM2LCAxLCAyMDUsIDM2LCAxLCAKLSAgICAyMjIsIDE3OSwgMzYsIDEsIDIzMywgMTM1LCAzNiwgMSwgMjMyLCAxODQsIDM2LCAxLCAyMzIsIDE3NSwgMzYsIDEsIDIxNCwgCi0gICAgMjcsIDM2LCAxLCAyMjAsIDEwMiwgMzYsIDEsIDIxOCwgMjIzLCAzNiwgMSwgMjA2LCAzNiwgMSwgMTYyLCAzNiwgMjUsIDUsIAotICAgIDI1NSwgNzMsIDM2LCAyNSwgNSwgNzMsIDM2LCAyNSwgNSwgMjM2LCAzMywgMzYsIDI1LCA1LCA3MCwgMzYsIDI1LCA1LCAKLSAgICAyMTQsIDExOCwgMzYsIDI1LCA1LCA3NSwgMzYsIDI1LCA1LCAyNDUsIDIwOSwgMzYsIDI1LCA1LCAyNTQsIDIwMSwgMzYsIAotICAgIDI1LCA1LCA3NiwgMzYsIDI1LCA1LCAyMjYsIDE4MywgMzYsIDI1LCA1LCAyNTMsIDE5MiwgMzYsIDUsIDIxMywgMTUyLCAzNiwgCi0gICAgMjI2LCAyMDQsIDM2LCAyNTMsIDE5MywgMjMzLCAyMywgNzgsIDM2LCAyMSwgMjEwLCA4NiwgMzYsIDIxLCAxMTAsIDM2LCAKLSAgICAyMSwgMTA1LCAzNiwgMjEsIDE1OCwgMzYsIDIxLCAxNjEsIDM2LCAyMSwgMTg5LCAzNiwgMjEsIDE5NCwgMzYsIDIxLCAxOTgsIAotICAgIDM2LCAyMSwgMTk1LCAzNiwgMjEsIDIwMCwgMzYsIDU0LCAyMTYsIDI0NywgMzYsIDU0LCAxMjMsIDI0MCwgMjEwLCAzNiwgCi0gICAgNTQsIDEyMywgMjE2LCAxNDcsIDM2LCAyNDgsIDE0NiwgNTAsIDM2LCAyMzAsIDEzNSwgNTAsIDM2LCAyMTEsIDQ1LCA1MCwgCi0gICAgMzYsIDI0OCwgODcsIDUwLCAzNiwgMjQ5LCAxMzksIDUwLCAzNiwgMjUzLCAyMzgsIDc3LCA1MCwgMzYsIDIyMiwgMTE4LCAKLSAgICA1MCwgMzYsIDU0LCA1MCwgMTQ4LCA1LCAyNTAsIDI1NSwgMTQ4LCA1LCAyNTQsIDc1LCAxNDgsIDUsIDIxMywgMTQ3LCAxNDgsIAotICAgIDEsIDYxLCAxNDgsIDEsIDI1NSwgNzMsIDE0OCwgMSwgNzMsIDE0OCwgMSwgMjM2LCAzMywgMTQ4LCAxLCA3MCwgMTQ4LCAxLCAKLSAgICAyMTQsIDExOCwgMTQ4LCAxLCAxNDksIDE1MywgMTQ4LCAxLCAxNDksIDE1NiwgMTQ4LCAxLCA3NSwgMTQ4LCAxLCAyNDUsIAotICAgIDIwOSwgMTQ4LCAxLCAyNTQsIDIwMSwgMTQ4LCAxLCA3NiwgMTQ4LCAxLCAyMjYsIDE4MywgMTQ4LCAxLCAyNTMsIDE5MiwgCi0gICAgMTQ4LCAxLCAxNzYsIDE0OCwgMSwgMjM0LCAxMzIsIDE0OCwgMSwgMjQzLCAxMzUsIDE0OCwgMSwgMjQyLCAyNDksIDE0OCwgCi0gICAgMSwgMjI5LCA3NywgMTQ4LCAxLCAyNTEsIDMzLCAxNDgsIDEsIDI1MCwgMTU3LCAxNDgsIDEsIDIzNSwgMTQxLCAxNDgsIDEsIAotICAgIDIzNSwgMTE0LCAxNDgsIDEsIDIyNywgMTY1LCAxNDgsIDEsIDIxNSwgMTU2LCAxNDgsIDEsIDIxNSwgMTQ0LCAxNDgsIDEsIAotICAgIDI0OCwgMTM1LCAxNDgsIDEsIDI0OCwgMTE5LCAxNDgsIDEsIDIyOCwgMTEwLCAxNDgsIDEsIDIxNywgMTA1LCAxNDgsIDEsIAotICAgIDIxNiwgMjA4LCAxNDgsIDEsIDI0OCwgMjIxLCAxNDgsIDEsIDI0OCwgMjUsIDE0OCwgMSwgMTk3LCAxNDgsIDEsIDE5MCwgCi0gICAgMTQ4LCAxLCAyMjUsIDE0NywgMTQ4LCAxLCAyNTIsIDE5MSwgMTQ4LCAxLCAyNTIsIDE4LCAxNDgsIDEsIDE4NCwgMTQ4LCAxLCAKLSAgICAxOTEsIDE0OCwgMSwgMjA1LCAxNDgsIDEsIDIyMiwgMTc5LCAxNDgsIDEsIDIzMywgMTM1LCAxNDgsIDEsIDIzMiwgMTg0LCAKLSAgICAxNDgsIDEsIDIxNCwgMjcsIDE0OCwgMSwgMjIwLCAxMDIsIDE0OCwgMSwgMjE4LCAyMjMsIDE0OCwgMSwgMjA2LCAxNDgsIDEsIAotICAgIDE2MiwgMTQ4LCA1LCAyNTMsIDE3NSwgMTQ4LCAyNSwgNSwgMjU1LCA3MywgMTQ4LCAyNSwgNSwgNzMsIDE0OCwgMjUsIDUsIAotICAgIDIzNiwgMzMsIDE0OCwgMjUsIDUsIDcwLCAxNDgsIDI1LCA1LCAyMTQsIDExOCwgMTQ4LCAyNSwgNSwgMTQ5LCAxNTMsIDE0OCwgCi0gICAgMjUsIDUsIDE0OSwgMjIyLCAxODAsIDE0OCwgMjUsIDUsIDc1LCAxNDgsIDI1LCA1LCAyNDUsIDIwOSwgMTQ4LCAyNSwgNSwgCi0gICAgMjU0LCAyMDEsIDE0OCwgMjUsIDUsIDc2LCAxNDgsIDI1LCA1LCAyMjYsIDE4MywgMTQ4LCAyNSwgNSwgMjUzLCAxOTIsIAotICAgIDE0OCwgNSwgMjEzLCAxNTIsIDE0OCwgMjMzLCAyMywgNzgsIDE0OCwgMjU0LCAyMDIsIDIzMywgMjMsIDc4LCAxNDgsIDEsIAotICAgIDIxNSwgMTgzLCAxNDgsIDEsIDI0NiwgMzgsIDE0OCwgMSwgMTQ5LCAyMjIsIDE4MCwgMTQ4LCAxLCAxNDksIDIzMiwgMTg1LCAKLSAgICAxNDgsIDI1LCA1LCAxNDksIDE1NiwgMTQ4LCAyNSwgNSwgMTQ5LCAyMzIsIDE4NSwgMTQ4LCAyMSwgMjEwLCA4NiwgMTQ4LCAKLSAgICAyMSwgMTEwLCAxNDgsIDIxLCAxMDUsIDE0OCwgMjEsIDE1OCwgMTQ4LCAyMSwgMTYxLCAxNDgsIDIxLCAxODksIDE0OCwgMjEsIAotICAgIDE5NCwgMTQ4LCAyMSwgMTk4LCAxNDgsIDIxLCAxOTUsIDE0OCwgMjEsIDIwMCwgMTQ4LCAyNDQsIDIsIDIxLCAyMTAsIDg3LCAKLSAgICAzMSwgMjI2LCAyMzcsIDIyNCwgMjIzLCA2NCwgMTYxLCAxNDgsIDI0NCwgMiwgMjEsIDEyMywgMzEsIDIyNiwgMjM3LCAyMjQsIAotICAgIDIyMywgNjQsIDE2MSwgMTQ4LCAyNDQsIDIsIDIxLCAxMTMsIDMxLCAyMjYsIDIzNywgMjI0LCAyMjMsIDY0LCAxNjEsIDE0OCwgCi0gICAgMjQ0LCAyLCAyMSwgMTM0LCAzMSwgMjI2LCAyMzcsIDIyNCwgMjIzLCA2NCwgMTYxLCAxNDgsIDI0NCwgMiwgMjEsIDEyMywgCi0gICAgMzEsIDI0NSwgNDIsIDIyNCwgMjIzLCA2NCwgMTYxLCAxNDgsIDI0NCwgMiwgMjEsIDExMywgMzEsIDI0NSwgNDIsIDIyNCwgCi0gICAgMjIzLCA2NCwgMTYxLCAxNDgsIDI0NCwgMiwgMjEsIDEzNCwgMzEsIDI0NSwgNDIsIDIyNCwgMjIzLCA2NCwgMTYxLCAxNDgsIAotICAgIDUsIDIxNSwgODQsIDE2NSwgNSwgMjU0LCA3NSwgMTY1LCA1LCAyMTMsIDE0NywgMTY1LCAxLCA2MSwgMTY1LCAxLCAyNTUsIAotICAgIDczLCAxNjUsIDEsIDczLCAxNjUsIDEsIDIzNiwgMzMsIDE2NSwgMSwgNzAsIDE2NSwgMSwgMjE0LCAxMTgsIDE2NSwgMSwgCi0gICAgMTQ5LCAxNTMsIDE2NSwgMSwgMTQ5LCAxNTYsIDE2NSwgMSwgNzUsIDE2NSwgMSwgMjQ1LCAyMDksIDE2NSwgMSwgMjU0LCAKLSAgICAyMDEsIDE2NSwgMSwgNzYsIDE2NSwgMSwgMjI2LCAxODMsIDE2NSwgMSwgMjUzLCAxOTIsIDE2NSwgMSwgMTc2LCAxNjUsIDEsIAotICAgIDIzNCwgMTMyLCAxNjUsIDEsIDI0MywgMTM1LCAxNjUsIDEsIDI0MiwgMjQ5LCAxNjUsIDEsIDIyOSwgNzcsIDE2NSwgMSwgCi0gICAgMjUxLCAzMywgMTY1LCAxLCAyNTAsIDE1NywgMTY1LCAxLCAyMzUsIDE0MSwgMTY1LCAxLCAyMzUsIDExNCwgMTY1LCAxLCAKLSAgICAyMjcsIDE2NSwgMTY1LCAxLCAyMTUsIDE1NiwgMTY1LCAxLCAyMTUsIDE0NCwgMTY1LCAxLCAyNDgsIDEzNSwgMTY1LCAxLCAKLSAgICAyNDgsIDExOSwgMTY1LCAxLCAyMjgsIDExMCwgMTY1LCAxLCAyMTcsIDEwNSwgMTY1LCAxLCAyMTYsIDIwOCwgMTY1LCAxLCAKLSAgICAyNDgsIDIyMSwgMTY1LCAxLCAyNDgsIDI1LCAxNjUsIDEsIDE5NywgMTY1LCAxLCAxOTAsIDE2NSwgMSwgMjI1LCAxNDcsIAotICAgIDE2NSwgMSwgMjUyLCAxOTEsIDE2NSwgMSwgMjUyLCAxOCwgMTY1LCAxLCAxODQsIDE2NSwgMSwgMTkxLCAxNjUsIDEsIDIwNSwgCi0gICAgMTY1LCAxLCAyMjIsIDE3OSwgMTY1LCAxLCAyMzMsIDEzNSwgMTY1LCAxLCAyMzIsIDE4NCwgMTY1LCAxLCAyMTQsIDI3LCAKLSAgICAxNjUsIDEsIDIyMCwgMTAyLCAxNjUsIDEsIDIxOCwgMjIzLCAxNjUsIDEsIDIwNiwgMTY1LCAxLCAxNjIsIDE2NSwgNSwgCi0gICAgMjI3LCAyMDUsIDE2NSwgNSwgMjUzLCAxNzUsIDE2NSwgMjUsIDUsIDI1NSwgNzMsIDE2NSwgMjUsIDUsIDczLCAxNjUsIDI1LCAKLSAgICA1LCAyMzYsIDMzLCAxNjUsIDI1LCA1LCA3MCwgMTY1LCAyNSwgNSwgMjE0LCAxMTgsIDE2NSwgMjUsIDUsIDE0OSwgMTUzLCAKLSAgICAxNjUsIDI1LCA1LCAxNDksIDIyMiwgMTgwLCAxNjUsIDI1LCA1LCA3NSwgMTY1LCAyNSwgNSwgMjQ1LCAyMDksIDE2NSwgMjUsIAotICAgIDUsIDI1NCwgMjAxLCAxNjUsIDI1LCA1LCA3NiwgMTY1LCAyNSwgNSwgMjI2LCAxODMsIDE2NSwgMjUsIDUsIDI1MywgMTkyLCAKLSAgICAxNjUsIDUsIDIxMywgMTUyLCAxNjUsIDIzMywgMjMsIDc4LCAxNjUsIDI1NCwgMjAyLCAyMzMsIDIzLCA3OCwgMTY1LCAxLCAKLSAgICAyNDQsIDE5NiwgMTY1LCAxLCAxNDksIDIyMiwgMTgwLCAxNjUsIDEsIDE0OSwgMjMyLCAxODUsIDE2NSwgMjUsIDUsIDE0OSwgCi0gICAgMTU2LCAxNjUsIDI1LCA1LCAxNDksIDIzMiwgMTg1LCAxNjUsIDIxLCAyMTAsIDg2LCAxNjUsIDIxLCAxMTAsIDE2NSwgMjEsIAotICAgIDEwNSwgMTY1LCAyMSwgMTU4LCAxNjUsIDIxLCAxNjEsIDE2NSwgMjEsIDE4OSwgMTY1LCAyMSwgMTk0LCAxNjUsIDIxLCAKLSAgICAxOTgsIDE2NSwgMjEsIDE5NSwgMTY1LCAyMSwgMjAwLCAxNjUsIDUsIDIzNSwgMTAyLCAxNjUsIDUsIDIxNCwgMTYxLCAxMzYsIAotICAgIDUsIDI1NCwgNzUsIDEzNiwgNSwgMjEzLCAxNDcsIDEzNiwgMSwgNjEsIDEzNiwgMSwgMjU1LCA3MywgMTM2LCAxLCA3MywgCi0gICAgMTM2LCAxLCAyMzYsIDMzLCAxMzYsIDEsIDcwLCAxMzYsIDEsIDIxNCwgMTE4LCAxMzYsIDEsIDE0OSwgMTUzLCAxMzYsIDEsIAotICAgIDE0OSwgMTU2LCAxMzYsIDEsIDc1LCAxMzYsIDEsIDI0NSwgMjA5LCAxMzYsIDEsIDI1NCwgMjAxLCAxMzYsIDEsIDc2LCAKLSAgICAxMzYsIDEsIDIyNiwgMTgzLCAxMzYsIDEsIDI1MywgMTkyLCAxMzYsIDEsIDE3NiwgMTM2LCAxLCAyMzQsIDEzMiwgMTM2LCAKLSAgICAxLCAyNDMsIDEzNSwgMTM2LCAxLCAyNDIsIDI0OSwgMTM2LCAxLCAyMjksIDc3LCAxMzYsIDEsIDI1MSwgMzMsIDEzNiwgMSwgCi0gICAgMjUwLCAxNTcsIDEzNiwgMSwgMjM1LCAxNDEsIDEzNiwgMSwgMjM1LCAxMTQsIDEzNiwgMSwgMjI3LCAxNjUsIDEzNiwgMSwgCi0gICAgMjE1LCAxNTYsIDEzNiwgMSwgMjE1LCAxNDQsIDEzNiwgMSwgMjQ4LCAxMzUsIDEzNiwgMSwgMjQ4LCAxMTksIDEzNiwgMSwgCi0gICAgMjI4LCAxMTAsIDEzNiwgMSwgMjE3LCAxMDUsIDEzNiwgMSwgMjE2LCAyMDgsIDEzNiwgMSwgMjQ4LCAyMjEsIDEzNiwgMSwgCi0gICAgMjQ4LCAyNSwgMTM2LCAxLCAxOTcsIDEzNiwgMSwgMjI4LCA5MiwgMTM2LCAxLCAxOTAsIDEzNiwgMSwgMjI1LCAxNDcsIAotICAgIDEzNiwgMSwgMjUyLCAxOTEsIDEzNiwgMSwgMjUyLCAxOCwgMTM2LCAxLCAxODQsIDEzNiwgMSwgMTkxLCAxMzYsIDEsIDIwNSwgCi0gICAgMTM2LCAxLCAyMjIsIDE3OSwgMTM2LCAxLCAyMzMsIDEzNSwgMTM2LCAxLCAyMzIsIDE4NCwgMTM2LCAxLCAyMzIsIDE3NSwgCi0gICAgMTM2LCAxLCAyMTQsIDI3LCAxMzYsIDEsIDIyMCwgMTAyLCAxMzYsIDEsIDIxOCwgMjIzLCAxMzYsIDEsIDIwNiwgMTM2LCAxLCAKLSAgICAxNjIsIDEzNiwgMSwgMjE1LCAxMjUsIDEzNiwgNSwgMjUzLCAxNzUsIDEzNiwgMjUsIDUsIDI1NSwgNzMsIDEzNiwgMjUsIDUsIAotICAgIDczLCAxMzYsIDI1LCA1LCAyMzYsIDMzLCAxMzYsIDI1LCA1LCA3MCwgMTM2LCAyNSwgNSwgMjE0LCAxMTgsIDEzNiwgMjUsIAotICAgIDUsIDE0OSwgMTUzLCAxMzYsIDI1LCA1LCAxNDksIDIyMiwgMTgwLCAxMzYsIDI1LCA1LCA3NSwgMTM2LCAyNSwgNSwgMjQ1LCAKLSAgICAyMDksIDEzNiwgMjUsIDUsIDI1NCwgMjAxLCAxMzYsIDI1LCA1LCA3NiwgMTM2LCAyNSwgNSwgMjI2LCAxODMsIDEzNiwgMjUsIAotICAgIDUsIDI1MywgMTkyLCAxMzYsIDUsIDIxMywgMTUyLCAxMzYsIDEsIDU5LCAyMjMsIDczLCAxMzYsIDI1MywgMTkzLCAyMzMsIAotICAgIDIzLCA3OCwgMTM2LCAxLCAxNDksIDIyMiwgMTgwLCAxMzYsIDEsIDE0OSwgMjMyLCAxODUsIDEzNiwgMjUsIDUsIDE0OSwgCi0gICAgMTU2LCAxMzYsIDI1LCA1LCAxNDksIDIzMiwgMTg1LCAxMzYsIDIxLCAyMTAsIDg2LCAxMzYsIDIxLCAxMTAsIDEzNiwgMjEsIAotICAgIDEwNSwgMTM2LCAyMSwgMTU4LCAxMzYsIDIxLCAxNjEsIDEzNiwgMjEsIDE4OSwgMTM2LCAyMSwgMTk0LCAxMzYsIDIxLCAKLSAgICAxOTgsIDEzNiwgMjEsIDE5NSwgMTM2LCAyMSwgMjAwLCAxMzYsIDU0LCAyMTYsIDI0NywgMTM2LCA1NCwgMTIzLCAyNDAsIAotICAgIDIxMCwgMTM2LCA1NCwgMTIzLCAyMTYsIDE0NywgMTM2LCAyNDQsIDIsIDEyMywgMjI0LCAyMSwgMTM2LCAyNDQsIDIsIDEyMywgCi0gICAgMjQyLCAyNywgMTM2LCAyNDQsIDIsIDEzNCwgMjI0LCAxOSwgMTM2LCAyNDgsIDE1MCwgNzgsIDEzNiwgMSwgMjUwLCA5OSwgCi0gICAgMjI4LCAxMTEsIDEzNiwgMSwgMjUwLCA5OSwgMjMwLCAyNSwgMTM2LCAxLCAyNTAsIDk5LCAyMjIsIDE4MCwgMTM2LCAxLCAKLSAgICAyNTAsIDk5LCAxNTYsIDEzNiwgMSwgMjUwLCA5OSwgMjMyLCAxODUsIDEzNiwgMSwgMjUwLCA5OSwgMjM1LCAyMywgMTc1LCAKLSAgICA1LCAyNTQsIDc0LCAxNzUsIDUsIDIxMywgMTQ2LCAxNzUsIDEsIDI1MywgMTY1LCAxNzUsIDEsIDI1NSwgMjcsIDE3NSwgMSwgCi0gICAgMjU0LCAyMjMsIDE3NSwgMSwgMjU0LCAyMzgsIDE3NSwgMSwgMjM1LCAxNTEsIDE3NSwgMSwgMjM2LCAzMiwgMTc1LCAxLCAKLSAgICAyMTQsIDExMCwgMTc1LCAxLCAyMTQsIDExMiwgMTc1LCAxLCAyMzUsIDE3MywgMTc1LCAxLCAyMzUsIDE3NCwgMTc1LCAxLCAKLSAgICAyMzYsIDE4LCAxNzUsIDEsIDIzNiwgMjAsIDE3NSwgMSwgMjQ1LCAxNywgMTc1LCAxLCAyNDUsIDIwNCwgMTc1LCAxLCAyNTQsIAotICAgIDE4OCwgMTc1LCAxLCAyMjYsIDEwOCwgMTc1LCAxLCAyMjYsIDE3NywgMTc1LCAxLCAyNTMsIDE3OCwgMTc1LCAxLCAyNTQsIAotICAgIDE0NiwgMjM0LCAxODcsIDE3NSwgMSwgMjMxLCAyMDksIDIzNCwgMTg3LCAxNzUsIDEsIDI1NCwgMTQ2LCAyNDMsIDgyLCAKLSAgICAxNzUsIDEsIDIzMSwgMjA5LCAyNDMsIDgyLCAxNzUsIDEsIDIzNCwgMjI5LCAyMjksIDIyMiwgMTc1LCAxLCAyMjEsIDIzNiwgCi0gICAgMjQzLCA4MiwgMTc1LCAxLCAyNTQsIDE0NiwgMjUwLCAyMTYsIDE3NSwgMSwgMjMxLCAyMDksIDI1MCwgMjE2LCAxNzUsIDEsIAotICAgIDI1NCwgMTQ2LCAyMzUsIDEyNywgMTc1LCAxLCAyMzEsIDIwOSwgMjM1LCAxMjcsIDE3NSwgMSwgMjE3LCA5OCwgMjI5LCAKLSAgICAyMjIsIDE3NSwgMSwgMjE3LCA5OCwgMjIxLCAyMzUsIDIyOSwgMjIzLCAxNzUsIDEsIDIyMSwgMjM2LCAyMzUsIDEyNywgCi0gICAgMTc1LCAxLCAyNTQsIDE0NiwgMjE1LCAxNTIsIDE3NSwgMSwgMjMxLCAyMDksIDIxNSwgMTUyLCAxNzUsIDEsIDI1NCwgMTQ2LCAKLSAgICAyNDgsIDEyNiwgMTc1LCAxLCAyMzEsIDIwOSwgMjQ4LCAxMjYsIDE3NSwgMSwgMjMwLCA1MywgMjI5LCAxODAsIDE3NSwgMSwgCi0gICAgMjIxLCAyMzYsIDI0OCwgMTI2LCAxNzUsIDEsIDI1NCwgMTQ2LCAyMTcsIDMwLCAxNzUsIDEsIDIzMSwgMjA5LCAyMTcsIDMwLCAKLSAgICAxNzUsIDEsIDI1NCwgMTQ2LCAyNDgsIDE0NCwgMTc1LCAxLCAyMzEsIDIwOSwgMjQ4LCAxNDQsIDE3NSwgMSwgMjQ4LCAxNzQsIAotICAgIDIyOSwgMTgwLCAxNzUsIDEsIDIyMSwgMjM2LCAyNDgsIDE0NCwgMTc1LCAxLCAyNTQsIDE0NiwgMjI1LCAyMjgsIDE3NSwgMSwgCi0gICAgMjMxLCAyMDksIDIyNSwgMjI4LCAxNzUsIDEsIDI1NCwgMTQ2LCAyNTIsIDExMiwgMTc1LCAxLCAyMzEsIDIwOSwgMjUyLCAKLSAgICAxMTIsIDE3NSwgMSwgMjMxLCAxMzEsIDE3NSwgMSwgMjU0LCAxMzEsIDI1MiwgMTEyLCAxNzUsIDEsIDIxMSwgNTEsIDE3NSwgCi0gICAgMSwgMjIzLCAxMzMsIDE3NSwgMSwgMjQ4LCAxNzQsIDIzMywgNjcsIDE3NSwgMSwgMjE0LCAxLCAxNzUsIDEsIDIxNywgOTgsIAotICAgIDIyMSwgMjEwLCAxNzUsIDEsIDIzMCwgNTMsIDIyMSwgMjEwLCAxNzUsIDEsIDI0OCwgMTc0LCAyMjEsIDIxMCwgMTc1LCAxLCAKLSAgICAyNDEsIDI0MiwgMTc1LCAxLCAyMzAsIDUzLCAyMzMsIDY3LCAxNzUsIDEsIDI0NCwgMTU2LCAxNzUsIDUsIDI1NCwgMTc3LCAKLSAgICAxNzUsIDI1LCA1LCAyNTQsIDIzMywgMTc1LCAyNSwgNSwgMjM0LCAxNTUsIDI1NCwgMjQwLCAxNzUsIDI1LCA1LCAyNDcsIAotICAgIDIyOCwgMjU0LCAyNDAsIDE3NSwgMjUsIDUsIDIzNCwgMTU1LCAyMzUsIDE3MCwgMTc1LCAyNSwgNSwgMjQ3LCAyMjgsIDIzNSwgCi0gICAgMTcwLCAxNzUsIDI1LCA1LCAyMzQsIDE1NSwgMjI2LCA4OCwgMTc1LCAyNSwgNSwgMjQ3LCAyMjgsIDIyNiwgODgsIDE3NSwgCi0gICAgMjUsIDUsIDI0MywgMTI0LCAxNzUsIDI1LCA1LCAyMzQsIDE1LCAxNzUsIDI1LCA1LCAyNDcsIDIyOCwgMjM0LCAxNSwgMTc1LCAKLSAgICAyNSwgNSwgMjM0LCAxNywgMjQ4LCA2NywgMTc1LCAyNSwgNSwgMjM0LCAxNiwgMjQyLCA0NywgMjU0LCAyMzMsIDE3NSwgMjUsIAotICAgIDUsIDIzNCwgMTYsIDI0MiwgNDcsIDI0NywgMjI4LCAyNTQsIDIzMywgMTc1LCAyNSwgNSwgMjM0LCAxNiwgMjQyLCA0NywgCi0gICAgMjQzLCA4MSwgMTc1LCAyNSwgNSwgMjQzLCA4MSwgMTc1LCAyNSwgNSwgMjQ3LCAyMjgsIDI0MywgMTI0LCAxNzUsIDI1LCA1LCAKLSAgICAyNDcsIDIyOCwgMjQzLCA4MSwgMTc1LCAyMjQsIDE0MSwgMjMzLCAyMDcsIDE2OCwgMTM1LCAyMzQsIDI5LCAyMzQsIDI0NiwgCi0gICAgMTY4LCAxMzUsIDIzNCwgMTA2LCAyMzQsIDEyOCwgMTY4LCAxMzUsIDIzNCwgMTA2LCAyMzQsIDk5LCAxNjgsIDEzNSwgMjM0LCAKLSAgICAxMDYsIDIzNCwgOTUsIDE2OCwgMTM1LCAyMzQsIDEwNiwgMjM0LCAxMDMsIDE2OCwgMTM1LCAyMzQsIDEwNiwgMjIzLCAxNTQsIAotICAgIDE2OCwgMTM1LCAyMjksIDUsIDIyOCwgMjQ4LCAxNjgsIDEzNSwgMjUwLCA4NywgMjUwLCAxNDcsIDE2OCwgMTM1LCAyNTAsIAotICAgIDg3LCAyNTAsIDk1LCAxNjgsIDEzNSwgMjUwLCA4NywgMjUwLCAxNDYsIDE2OCwgMTM1LCAyMTksIDU5LCAyMTksIDU4LCAKLSAgICAxNjgsIDEzNSwgMjUwLCA4NywgMjUwLCA4MywgMTY4LCAxMzUsIDIxMCwgMjQ1LCAyMTAsIDI1MiwgMTY4LCAxMzUsIDI0NywgCi0gICAgMTQ2LCAyNTAsIDE1NCwgMTY4LCAxMzUsIDIxNiwgNDIsIDIyNSwgMjM4LCAxNjgsIDEzNSwgMjE2LCAxNTcsIDIxNiwgMjAwLCAKLSAgICAxNjgsIDEzNSwgMjE2LCAxNTcsIDIyOSwgMjAxLCAxNjgsIDEzNSwgMjE2LCAxNTcsIDIyNSwgMTExLCAxNjgsIDEzNSwgCi0gICAgMjI4LCA3NSwgMjI5LCA5OCwgMTY4LCAxMzUsIDI0NywgMTQ2LCAyNDgsIDY4LCAxNjgsIDEzNSwgMjE2LCA0MiwgMjE3LCAKLSAgICA1NSwgMTY4LCAxMzUsIDIxNiwgMTU3LCAyMTYsIDEzMSwgMTY4LCAxMzUsIDIxNiwgMTU3LCAyMTYsIDIwNCwgMTY4LCAxMzUsIAotICAgIDIxNiwgMTU3LCAyMTYsIDE1NCwgMTY4LCAxMzUsIDIyOCwgNzUsIDIyNywgMjM3LCAxNjgsIDEzNSwgMjUxLCAyMDYsIDI1MiwgCi0gICAgMTY0LCAxNjgsIDEzNSwgMjI1LCAxNywgMjI1LCA0MiwgMTY4LCAxMzUsIDIyNSwgMTIyLCAyMjUsIDExMywgMTY4LCAxMzUsIAotICAgIDI0NCwgNDQsIDI0NCwgMTk2LCAxNjgsIDEzNSwgMjI1LCAxMjIsIDIyNSwgMTQxLCAxNjgsIDEzNSwgMjQ0LCA0NCwgMjQ0LCAKLSAgICAxNzMsIDE2OCwgMTM1LCAyMjUsIDEyMiwgMjIxLCAyNDcsIDE2OCwgMTM1LCAyMzAsIDE2MiwgMTg0LCAxNjgsIDEzNSwgCi0gICAgMjEwLCAyNDUsIDIxMSwgNzksIDE2OCwgMTM1LCAyMjIsIDIxMiwgMjIyLCAxMzksIDE2OCwgMTM1LCAyMjIsIDE0MCwgMTY4LCAKLSAgICAxMzUsIDIzMiwgMTU3LCAyMzIsIDIwNiwgMTY4LCAxMzUsIDIzMiwgOTgsIDE2OCwgMTM1LCAyMTEsIDIyOCwgMjEyLCA2MSwgCi0gICAgMTY4LCAxMzUsIDIxOSwgNTksIDIyMiwgNiwgMTY4LCAxMzUsIDIxOSwgNTksIDIyMiwgMTE0LCAxNjgsIDEzNSwgMjE5LCAKLSAgICA1OSwgMjE4LCA4MiwgMTY4LCAxMzUsIDI0MSwgNjksIDI0MSwgMTU5LCAxNjgsIDEzNSwgMjMyLCAxNTcsIDI1MCwgNjgsIAotICAgIDE2OCwgMTM1LCAxNDQsIDI1NCwgMTE1LCAxNjgsIDEzNSwgMjQxLCA2OSwgMjI4LCA3MCwgMTY4LCAxMzUsIDIyNiwgNjgsIAotICAgIDE2OCwgMTM1LCAyMjEsIDIzMCwgNjEsIDE2OCwgMTM1LCAyMzEsIDIwNCwgMjQyLCAxNywgMTY4LCAxMzUsIDIyMSwgMjMwLCAKLSAgICAyNTUsIDczLCAxNjgsIDEzNSwgMjIxLCAyMzAsIDI1NCwgMTM2LCAxNjgsIDEzNSwgMjIxLCAyMzAsIDczLCAxNjgsIDEzNSwgCi0gICAgMjIxLCAyMzAsIDIzNiwgMzMsIDE2OCwgMTM1LCAyMjEsIDIzMCwgMjE0LCAyMTQsIDE2OCwgMTM1LCAyMjEsIDIzMCwgMjE0LCAKLSAgICAyMTIsIDE2OCwgMTM1LCAyMjEsIDIzMCwgNzAsIDE2OCwgMTM1LCAyMjEsIDIzMCwgMjE0LCAxMTgsIDE2OCwgMTM1LCAyMjUsIAotICAgIDEyNCwgMTY4LCAyNDksIDk4LCAxNiwgMjUyLCAxNjUsIDE2OCwgMTM1LCAyMjEsIDIzMCwgNzUsIDE2OCwgMTM1LCAyMjEsIAotICAgIDIzMCwgMjU0LCAyNDMsIDE2OCwgMTM1LCAyMjEsIDIzMCwgNzYsIDE2OCwgMTM1LCAyMjEsIDIzMCwgMjU0LCAyMDIsIDIzMSwgCi0gICAgMTk4LCAxNjgsIDEzNSwgMjIxLCAyMzAsIDI1NCwgMjAyLCAyMzEsIDE5OSwgMTY4LCAxMzUsIDIzMywgMTA2LCAxNjgsIAotICAgIDEzNSwgMjMxLCAxOTUsIDE2OCwgMTM1LCAyMzEsIDE5NiwgMTY4LCAxMzUsIDIzMSwgMjA0LCAyNDUsIDE4MCwgMTY4LCAKLSAgICAxMzUsIDIzMSwgMjA0LCAyMTYsIDE1NiwgMTY4LCAxMzUsIDIzMSwgMjA0LCAyMTUsIDIyOCwgMTY4LCAxMzUsIDIzMSwgCi0gICAgMjA0LCAyNTAsIDEzNSwgMTY4LCAxMzUsIDIxNiwgMTk4LCAxNjgsIDEzNSwgMjI4LCAyMDUsIDE2OCwgMTM1LCAyMTEsIDczLCAKLSAgICAxNjgsIDEzNSwgMjQ0LCAzNSwgMTY4LCAyMSwgMjEwLCA4NiwgMTY4LCAyMSwgMTEwLCAxNjgsIDIxLCAxMDUsIDE2OCwgMjEsIAotICAgIDE1OCwgMTY4LCAyMSwgMTYxLCAxNjgsIDIxLCAxODksIDE2OCwgMjEsIDE5NCwgMTY4LCAyMSwgMTk4LCAxNjgsIDIxLCAKLSAgICAxOTUsIDE2OCwgMjEsIDIwMCwgMTY4LCAxMzUsIDI1NCwgMTExLCAxNjgsIDEzNSwgMjM0LCAxMDQsIDIwOSwgMjA5LCAxLCAKLSAgICAyMzQsIDI4LCAyMDksIDIwOSwgMSwgMjM0LCAxMDYsIDIxOCwgMzUsIDIwOSwgMjA5LCAxLCAyMzQsIDEwNiwgMjE3LCA2MiwgCi0gICAgMjA5LCAyMDksIDEsIDIyOSwgNCwgMjA5LCAyMDksIDEsIDI0OSwgMjM4LCAyMDksIDIwOSwgMSwgMjE5LCA1OSwgMjE3LCAKLSAgICA2MiwgMjA5LCAyMDksIDEsIDIyNywgMTM0LCAyMDksIDIwOSwgMSwgMjQ3LCAxNDUsIDIwOSwgMjA5LCAxLCAxMTEsIDIwOSwgCi0gICAgMjA5LCAxLCAyMTYsIDE1NywgMjE4LCAzNSwgMjA5LCAyMDksIDEsIDIxNiwgMTU3LCAyMTcsIDYyLCAyMDksIDIwOSwgMSwgCi0gICAgMjI4LCA3NCwgMjA5LCAyMDksIDEsIDI1MSwgMjA1LCAyMDksIDIwOSwgMSwgMjI1LCAxNiwgMjA5LCAyMDksIDEsIDIyNSwgCi0gICAgMTIyLCAyMTgsIDM1LCAyMDksIDIwOSwgMSwgMjQ0LCA0NCwgMjE3LCA2MiwgMjA5LCAyMDksIDEsIDIyNSwgMTIyLCAyMTcsIAotICAgIDYyLCAyMDksIDIwOSwgMSwgMjQ0LCA0NCwgMjE4LCAzNSwgMjA5LCAyMDksIDEsIDIzMCwgMTYxLCAyMDksIDIwOSwgMSwgCi0gICAgMjEwLCAyNDQsIDIwOSwgMjA5LCAxLCAyMzIsIDE1NywgMjMyLCAyMDYsIDIwOSwgMjA5LCAxLCAyMzIsIDE1NywgMjMyLCAKLSAgICAxMjEsIDIwOSwgMjA5LCAxLCAyMTEsIDIyNywgMjA5LCAyMDksIDEsIDIxOSwgNTksIDIxOCwgMzUsIDIwOSwgMjA5LCAxLCAKLSAgICAyNDEsIDY5LCAyMTgsIDM1LCAyMDksIDIwOSwgMSwgNzYsIDIwOSwgMjA5LCAxLCAyNDEsIDY5LCAyMTcsIDYyLCAyMDksIAotICAgIDIwOSwgMjQ1LCAxNjMsIDIwOSwgMjA5LCAyNSwgNSwgNjEsIDIwOSwgMjA5LCAyNSwgNSwgMjMxLCAyMDQsIDIzNCwgMjM0LCAKLSAgICAyMDksIDIwOSwgMjUsIDUsIDI1NSwgNzMsIDIwOSwgMjA5LCAyNSwgNSwgMjU0LCAxMzYsIDIwOSwgMjA5LCAyNSwgNSwgNzMsIAotICAgIDIwOSwgMjA5LCAyNSwgNSwgMjM2LCAzMywgMjA5LCAyMDksIDI1LCA1LCAyMTEsIDExNywgMjA5LCAyMDksIDI1LCA1LCAKLSAgICAyMTAsIDE2OSwgMjA5LCAyMDksIDI1LCA1LCA3MCwgMjA5LCAyMDksIDI1LCA1LCAyMTQsIDExOCwgMjA5LCAyMDksIDI1LCAKLSAgICA1LCAyMzEsIDIwNCwgMjM0LCAxMywgMjA5LCAyMDksIDIyMCwgMTQ1LCA1LCAyMzIsIDE1NiwgMjA5LCAyMDksIDIyMCwgCi0gICAgMTQ1LCA1LCAyMjcsIDEzNCwgMjA5LCAyMDksIDI1LCA1LCA3NSwgMjA5LCAyMDksIDI1LCA1LCAyNDUsIDE5NSwgMjA5LCAKLSAgICAyMDksIDI1LCA1LCA3NiwgMjA5LCAyMDksIDI1LCA1LCAyNTMsIDE2NywgMjA5LCAyMDksIDI1LCA1LCAyNTQsIDIwMSwgCi0gICAgMjA5LCAyMDksIDIzNCwgMjksIDIzMywgMTM1LCAyMDksIDIwOSwgMTM4LCAyMzEsIDIwNCwgMjQ1LCAxODAsIDIwOSwgMjA5LCAKLSAgICAxMzgsIDIzMSwgMjA0LCAyMTYsIDE1NiwgMjA5LCAyMDksIDEzOCwgMjMxLCAyMDQsIDIxNiwgMTE3LCAyMDksIDIwOSwgCi0gICAgMTM4LCAyMzEsIDIwNCwgMjUwLCAyMjMsIDIwOSwgMjA5LCAyNTEsIDQsIDc4LCAyMDksIDIwOSwgMjI4LCAyMTQsIDIwOSwgCi0gICAgMjA5LCAyMSwgMjEwLCA4NiwgMjA5LCAyMDksIDIxLCAxMTAsIDIwOSwgMjA5LCAyMSwgMTA1LCAyMDksIDIwOSwgMjEsIAotICAgIDE1OCwgMjA5LCAyMDksIDIxLCAxNjEsIDIwOSwgMjA5LCAyMSwgMTg5LCAyMDksIDIwOSwgMjEsIDE5NCwgMjA5LCAyMDksIAotICAgIDIxLCAxOTgsIDIwOSwgMjA5LCAyMSwgMTk1LCAyMDksIDIwOSwgMjEsIDIwMCwgMjA5LCAyMDksIDI0MSwgNjksIDIyOCwgCi0gICAgNzQsIDIwOSwgMjA5LCAyNDEsIDY5LCAyMzAsIDE2MSwgMjA5LCAyMDksIDEsIDIzNCwgMTA3LCAyNDIsIDE3NCwgMjA5LCAKLSAgICAyMDksIDEsIDIzNCwgMTA3LCAyMjcsIDEzNCwgNjMsIDMsIDIyNiwgMjA0LCA2MywgMTY0LCAyNDIsIDExNSwgMjExLCAwLCAKLSAgICAyMzAsIDI0OCwgMjE1LCAxODksIDYxLCA2MywgMTY0LCAyNDIsIDExNSwgMjExLCAwLCAyMzAsIDI0OCwgMjU1LCAxNTksIAotICAgIDIyMiwgMjE2LCAyNTIsIDc3LCAxODQsIDYzLCAxNjQsIDI0MiwgMTE1LCAyMTEsIDAsIDIzMCwgMjQ4LCAyNTUsIDE1OSwgCi0gICAgMjQyLCAxMTUsIDIxNSwgMTczLCAxODQsIDYzLCAxNjQsIDY1LCAyMTEsIDAsIDIzMCwgMjQ4LCAyMzEsIDkzLCAxODQsIDYzLCAKLSAgICAxNjQsIDI0OSwgMjUyLCAyMTEsIDAsIDIzMCwgMjQ4LCAyMjAsIDEwOSwgMTg0LCA2MywgMTY0LCAyNTAsIDIzOSwgMjExLCAKLSAgICAwLCAyMzAsIDI0OCwgMjI1LCAxMTIsIDIyMCwgOTYsIDE4NCwgNjMsIDE2NCwgMjExLCAwLCAyMzAsIDI0OCwgMjE1LCAxNzMsIAotICAgIDIyMCwgOTYsIDE4NCwgNjMsIDE2NCwgMjIxLCAyMDgsIDIyMCwgOTUsIDYzLCAxNjQsIDI1MSwgMTI4LCAyMTEsIDAsIDIzMCwgCi0gICAgMjQ3LCA2MywgMTY0LCAyNTEsIDIyMywgMjIwLCAzLCAyMTEsIDAsIDIzMCwgMjQ3LCA2MywgMTY0LCAyMzUsIDE5NywgMjE1LCAKLSAgICAxNzIsIDYzLCAxNjQsIDI0OCwgNjEsIDIxNSwgMTczLCAyNTEsIDEyNywgNjMsIDE2NCwgMjIwLCA5NSwgNjMsIDE2NCwgCi0gICAgMjI3LCAxMzksIDIyMCwgOTUsIDYzLCAxNjQsIDIxNSwgMTczLCAyMjAsIDk1LCA2MywgMTY0LCAyMjcsIDEzOSwgMjE1LCAKLSAgICAxNzMsIDIyMCwgOTUsIDYzLCAxNjQsIDIyMiwgMjM2LCAyNTAsIDEyMiwgMjE4LCAyMzYsIDIyMCwgOTUsIDYzLCAxNjQsIAotICAgIDIyMywgNDIsIDI0MiwgMTQ2LCAyMjAsIDk1LCA2MywgMTY0LCAyNTAsIDIzOSwgMjU1LCAxNjMsIDIyMiwgMTQ0LCAyMzEsIAotICAgIDkyLCAxOTksIDI1MSwgNywgNjMsIDE2NCwgMjQyLCAxMTUsIDIxNSwgMTcyLCA2MywgMjMyLCAxNDQsIDUsIDI1MCwgMTU1LCAKLSAgICAyMjIsIDE0MywgNjMsIDIzMiwgMTQ0LCA1LCAyMzIsIDI1MiwgMjIyLCAxNDMsIDYzLCAyNTMsIDIxMiwgNSwgMjIwLCAxMDUsIAotICAgIDI0MywgNjUsIDI1NSwgMTY0LCAyMjIsIDE0MywgNjMsIDI1MywgMjEyLCA1LCAyNTUsIDE2MSwgMTkwLCA2MywgMjUzLCAKLSAgICAyMTIsIDUsIDIyMSwgMTgyLCAyMTUsIDE2OCwgNjMsIDUsIDIyMywgMTMwLCAyNDcsIDE1OSwgMjQzLCA2NCwgNjMsIDUsIAotICAgIDIyMywgMTMwLCAyNDcsIDE1OSwgMjQyLCAxNzYsIDYzLCA1LCAyMjMsIDEzMCwgMjQ3LCAxNTksIDI0MiwgMTE2LCA2MywgNSwgCi0gICAgMjIzLCAxMzAsIDIyOSwgMjE5LCAyNDMsIDY0LCA2MywgNSwgMjIzLCAxMzAsIDIyOSwgMjE5LCAyNDIsIDE3NiwgNjMsIDUsIAotICAgIDIyMywgMTMwLCAyNDcsIDE1OSwgMjIzLCAxMzAsIDIyOSwgMjE4LCA2MywgMjEsIDIxMCwgODYsIDYzLCAyMSwgMTEwLCA2MywgCi0gICAgMjEsIDEwNSwgNjMsIDIxLCAxNTgsIDYzLCAyMSwgMTYxLCA2MywgMjEsIDE4OSwgNjMsIDIxLCAxOTQsIDYzLCAyMSwgMTk4LCAKLSAgICA2MywgMjEsIDE5NSwgNjMsIDIxLCAyMDAsIDYzLCAyMSwgMTYzLCAxMTAsIDYzLCAyMSwgMTYzLCAxMDUsIDYzLCAyMSwgCi0gICAgMTYzLCAxNTgsIDYzLCAyMSwgMTYzLCAxNjEsIDYzLCAyMSwgMTYzLCAxODksIDYzLCAyMSwgMTYzLCAxOTQsIDYzLCAyMSwgCi0gICAgMTYzLCAxOTgsIDYzLCAyMSwgMTYzLCAxOTUsIDYzLCAyMSwgMTYzLCAyMDAsIDYzLCAyMSwgMTYzLCAyMTAsIDg2LCA2MywgCi0gICAgMTY0LCAyNTEsIDEzMCwgMjIyLCAxNDMsIDYzLCAxNjQsIDIyOSwgNjgsIDI1MSwgNjgsIDIyNywgMTQ5LCAyMTAsIDI1LCAKLSAgICA2MywgMTY0LCAyNTAsIDIzOSwgMjU1LCAxNjMsIDIyMiwgMTQ0LCAyNTEsIDY5LCAyMzAsIDIwMiwgMjUxLCA3LCA2MywgCi0gICAgMTY0LCAyMjksIDY4LCAyNTEsIDY4LCAyMjAsIDEwNiwgMjIyLCAxNDMsIDYzLCAxNjQsIDI1MCwgMTMyLCAyMzAsIDI0NywgCi0gICAgNjMsIDE2NCwgMjE1LCAxODQsIDI1NSwgMTYwLCA2MywgMTY0LCAyNDIsIDEwMCwgMjIyLCAxNDQsIDI0MiwgNjMsIDYzLCAKLSAgICAxNjQsIDI0MiwgMTAwLCAyMjIsIDE0NCwgMjQyLCA2OSwgNjMsIDE2NCwgMjU0LCAxMTYsIDIzNCwgMTIzLCAyNDIsIDYzLCAKLSAgICA2MywgMTY0LCAyNTQsIDExNiwgMjM0LCAxMjMsIDI0MiwgNjksIDYzLCA1LCAyMTEsIDY1LCAyMTUsIDE3MSwgNjMsIDUsIAotICAgIDIzMSwgMTY3LCAyMTUsIDE3MSwgNjMsIDEsIDE3NiwgNjMsIDEsIDIzNCwgMTMyLCA2MywgMSwgMjQzLCAxMzUsIDYzLCAxLCAKLSAgICAyNDIsIDI0OSwgNjMsIDEsIDIyOSwgNzcsIDYzLCAxLCAyNTEsIDMzLCA2MywgMSwgMjUwLCAxNTcsIDYzLCAxLCAyMzUsIAotICAgIDE0MSwgNjMsIDEsIDIyNywgMTY1LCA2MywgMSwgMjE1LCAxNTYsIDYzLCAxLCAyMTUsIDE0NCwgNjMsIDEsIDI0OCwgMTM1LCAKLSAgICA2MywgMSwgMjQ4LCAxMTksIDYzLCAxLCAyMjgsIDExMCwgNjMsIDEsIDIxNywgMTA1LCA2MywgMSwgMjE2LCAyMDgsIDYzLCAKLSAgICAxLCAyNDgsIDIyMSwgNjMsIDEsIDI0OCwgMjUsIDYzLCAxLCAxOTcsIDYzLCAxLCAxOTAsIDYzLCAxLCAyMjUsIDE0NywgNjMsIAotICAgIDEsIDI1MiwgMTkxLCA2MywgMSwgMjUyLCAxOCwgNjMsIDEsIDE4NCwgNjMsIDEsIDIxNSwgMTgzLCA2MywgMSwgMjE1LCAKLSAgICAxNzUsIDYzLCAxLCAyNDYsIDM4LCA2MywgMSwgMjQ2LCAzMywgNjMsIDEsIDIxMiwgNjUsIDYzLCAxLCAyMTAsIDgyLCA2MywgCi0gICAgMSwgMjEwLCAxMTYsIDYzLCAxLCAyNTUsIDE2NiwgNjMsIDEsIDE5MSwgNjMsIDEsIDIwNSwgNjMsIDEsIDIzMywgMTM1LCAKLSAgICA2MywgMSwgMjIwLCAxMDIsIDYzLCAxLCAyMTgsIDIyMywgNjMsIDEsIDIwNiwgNjMsIDEsIDE2MiwgNjMsIDEsIDYxLCA2MywgCi0gICAgMSwgMjMzLCAyMzEsIDYzLCAxLCAyNDQsIDc3LCAyMDUsIDYzLCAxLCAyMzQsIDQ2LCA2MywgMSwgMjIyLCAxNzksIDYzLCAKLSAgICAyNSwgNSwgMjU1LCA3MywgNjMsIDI1LCA1LCA3MywgNjMsIDI1LCA1LCAyMzYsIDMzLCA2MywgMjUsIDUsIDcwLCA2MywgMjUsIAotICAgIDUsIDIxNCwgMTE4LCA2MywgMjUsIDUsIDE0OSwgMTUzLCA2MywgMjUsIDUsIDE0OSwgMjIyLCAxODAsIDYzLCAyNSwgNSwgCi0gICAgMTQ5LCAxNTYsIDYzLCAyNSwgNSwgMTQ5LCAyMzIsIDE4NSwgNjMsIDI1LCA1LCA3NSwgNjMsIDI1LCA1LCAyNDUsIDIwOSwgCi0gICAgNjMsIDI1LCA1LCA3NiwgNjMsIDI1LCA1LCAyMjYsIDE4MywgNjMsIDUsIDIyMiwgMjIxLCAyMTgsIDg0LCAyMjksIDc4LCAKLSAgICAyMjIsIDIxMSwgNjMsIDUsIDIyMiwgMjE2LCAyNTIsIDc2LCA2MywgMjUsIDUsIDIyMywgNDksIDczLCA2MywgMjUsIDUsIAotICAgIDIyMywgNDksIDIzNiwgMzMsIDYzLCA1LCAyMjcsIDE0OSwgMjEwLCAyNiwgMjI5LCAyMjYsIDI0OCwgMjIxLCA2MywgNSwgCi0gICAgMjE5LCA3MSwgMjMzLCA2MCwgNjMsIDE2NCwgMjQyLCAyOSwgNjMsIDE2NCwgMjI2LCA1NywgNjMsIDUsIDIzMywgNjMsIAotICAgIDIyMiwgMTQzLCA2MywgNSwgMjExLCA3MCwgMjIyLCAxNDMsIDYzLCA1LCAyMzMsIDY0LCAyMTUsIDE4NCwgMjUxLCA3LCA2MywgCi0gICAgNSwgMjMxLCA5NSwgMjUxLCA3LCA2MywgNSwgMjQyLCAxMTksIDI1MSwgOCwgMjIzLCA0MCwgNjMsIDUsIDI0MiwgMTE5LCAKLSAgICAyMzEsIDg1LCAyMjMsIDQwLCA2MywgNSwgMjM1LCAxOTMsIDIzMSwgOTUsIDI1MSwgNywgNjMsIDIxOCwgNzMsIDUsIDIzMywgCi0gICAgNjQsIDIxNSwgMTg0LCAyNTEsIDcsIDYzLCAyMTgsIDczLCA1LCAyMzEsIDk1LCAyNTEsIDcsIDYzLCAyMTgsIDczLCA1LCAKLSAgICAyMzUsIDE5MywgMjMxLCA5NSwgMjUxLCA3LCA2MywgMjE4LCA3MywgMSwgMTc2LCA2MywgMjE4LCA3MywgMSwgMjM0LCAxMzIsIAotICAgIDYzLCAyMTgsIDczLCAxLCAyNDMsIDEzNSwgNjMsIDIxOCwgNzMsIDEsIDI0MiwgMjQ5LCA2MywgMjE4LCA3MywgMSwgMjI5LCAKLSAgICA3NywgNjMsIDIxOCwgNzMsIDEsIDI1MSwgMzMsIDYzLCAyMTgsIDczLCAxLCAyNTAsIDE1NywgNjMsIDIxOCwgNzMsIDEsIAotICAgIDIzNSwgMTQxLCA2MywgMjE4LCA3MywgMSwgMjI3LCAxNjUsIDYzLCAyMTgsIDczLCAxLCAyMTUsIDE1NiwgNjMsIDIxOCwgCi0gICAgNzMsIDEsIDIxNSwgMTQ0LCA2MywgMjE4LCA3MywgMSwgMjQ4LCAxMzUsIDYzLCAyMTgsIDczLCAxLCAyNDgsIDExOSwgNjMsIAotICAgIDIxOCwgNzMsIDEsIDIyOCwgMTEwLCA2MywgMjE4LCA3MywgMSwgMjE3LCAxMDUsIDYzLCAyMTgsIDczLCAxLCAyMTYsIDIwOCwgCi0gICAgNjMsIDIxOCwgNzMsIDEsIDI0OCwgMjIxLCA2MywgMjE4LCA3MywgMSwgMjQ4LCAyNSwgNjMsIDIxOCwgNzMsIDEsIDE5NywgCi0gICAgNjMsIDIxOCwgNzMsIDEsIDE5MCwgNjMsIDIxOCwgNzMsIDEsIDIyNSwgMTQ3LCA2MywgMjE4LCA3MywgMSwgMjUyLCAxOTEsIAotICAgIDYzLCAyMTgsIDczLCAxLCAyNTIsIDE4LCA2MywgMjE4LCA3MywgMSwgMTg0LCA2MywgMjE4LCA3MywgMSwgMjE1LCAxODMsIAotICAgIDYzLCAyMTgsIDczLCAxLCAyMTUsIDE3NSwgNjMsIDIxOCwgNzMsIDEsIDI0NiwgMzgsIDYzLCAyMTgsIDczLCAxLCAyNDYsIAotICAgIDMzLCA2MywgMjE4LCA3MywgMSwgMjEyLCA2NSwgNjMsIDIxOCwgNzMsIDEsIDIxMCwgODIsIDYzLCAyMTgsIDczLCAxLCAKLSAgICAyMTAsIDExNiwgNjMsIDIxOCwgNzMsIDEsIDI1NSwgMTY2LCA2MywgMjE4LCA3MywgMSwgMTkxLCA2MywgMjE4LCA3MywgMSwgCi0gICAgMjA1LCA2MywgMjE4LCA3MywgMSwgMjMzLCAxMzUsIDYzLCAyMTgsIDczLCAxLCAyMjAsIDEwMiwgNjMsIDIxOCwgNzMsIDEsIAotICAgIDIxOCwgMjIzLCA2MywgMjE4LCA3MywgMSwgMjA2LCA2MywgMjE4LCA3MywgMSwgMTYyLCA2MywgMjE4LCA3MywgMSwgNjEsIAotICAgIDYzLCAyMTgsIDczLCAxLCAyMzMsIDIzMSwgNjMsIDIxOCwgNzMsIDEsIDI0NCwgNzcsIDIxMiwgNjUsIDYzLCAyMTgsIDczLCAKLSAgICAxLCAyNDQsIDc3LCAxOTEsIDYzLCAyMTgsIDczLCAxLCAyNDQsIDc3LCAyMDUsIDYzLCAyMzMsIDIxOCwgMjIyLCAxNDEsIAotICAgIDIzNCwgMTMyLCA2MywgMjMzLCAyMTgsIDIyMiwgMTQxLCAyMzQsIDEzMywgMjUxLCA2OSwgMjMwLCAyMDIsIDI1MSwgNywgCi0gICAgNjMsIDI1MCwgMjUyLCA1LCAxMTQsIDI1MiwgNzAsIDYzLCAyNTAsIDI1MiwgNSwgMTkyLCAyNTIsIDcwLCA2MywgMjUwLCAKLSAgICAyNTIsIDUsIDI1MCwgMjUzLCAyMTcsIDIwLCA2MywgMjUwLCAyNTIsIDUsIDIyMSwgMjA3LCAyNTUsIDE2NSwgNjMsIDE2LCAKLSAgICAyNDYsIDkxLCAyNTEsIDEyNSwgNjMsIDE2LCAyMjMsIDEyOSwgMjIyLCAyMjIsIDYzLCAxNiwgMjI2LCA3NywgMjQzLCA2MywgCi0gICAgNjMsIDE2LCAyMjMsIDEyOSwgMjIyLCAyMjMsIDIyMywgNDIsIDI0MiwgMTQ1LCA2MywgMTYsIDIyNSwgMTEyLCAxOTAsIDYzLCAKLSAgICAxNiwgMjI4LCA1OSwgMjUxLCAxMjUsIDYzLCAxNiwgMjI4LCA1OSwgMjUxLCAxMjYsIDIyNywgMTM5LCAyNTUsIDE2MiwgNjMsIAotICAgIDE2LCAyMjgsIDU5LCAyNTEsIDEyNiwgMjQyLCAxMTcsIDI1NSwgMTYyLCA2MywgMTYsIDIyOCwgNTksIDI1MSwgMTI2LCAKLSAgICAyNTEsIDY5LCAyNTUsIDE2MiwgNjMsIDUsIDIyMywgMTMwLCAyMjksIDIxOSwgMjIzLCAxMzAsIDI0NywgMTU4LCA2MywgNSwgCi0gICAgMjIzLCAxMzAsIDIyOSwgMjE5LCAyNDIsIDExNiwgNjMsIDE2NCwgMjUxLCAxMjksIDIyMCwgMywgMjQyLCAyMTUsIDIzMCwgCi0gICAgMjQ4LCAyMjMsIDQxLCA2MywgMTY0LCAyMzAsIDE2MywgMjExLCAwLCAyNDIsIDIxNSwgMjMwLCAyNDgsIDIyMywgNDEsIDYzLCAKLSAgICAxNjQsIDIyNywgMTM5LCAyMTUsIDE3MiwgNjMsIDE2NCwgNjUsIDI1MSwgMTUyLCAyMjIsIDIxMywgMjExLCAwLCAyMzAsIAotICAgIDI0OCwgMjMxLCA5MywgMTg0LCA2MywgMTY0LCAyNDksIDI1MiwgMjUxLCAxNTIsIDIyMiwgMjEzLCAyMTEsIDAsIDIzMCwgCi0gICAgMjQ4LCAyMjAsIDEwOSwgMTg0LCAyMjIsIDI1MCwgMjE3LCAyNTUsIDUwLCAyMzMsIDQ1LCAyMTcsIDI1NSwgNTAsIDIyMiwgCi0gICAgMjUwLCAyMTcsIDI1NSwgNSwgMiwgMjQ3LCAxMTgsIDIzMywgNDUsIDIxNywgMjU1LCA1LCAyLCAyNDcsIDExOCwgNjMsIAotICAgIDE2NCwgMjMzLCA1NSwgMjMxLCA5NiwgMjIyLCAxNDMsIDYzLCAxNjQsIDIxNSwgMjUwLCAyMzEsIDk2LCAyMjIsIDE0MywgCi0gICAgNjgsIDEsIDE3NiwgNjgsIDEsIDIzNCwgMTMyLCA2OCwgMSwgMjQzLCAxMzUsIDY4LCAxLCAyNDIsIDI0OSwgNjgsIDEsIAotICAgIDIyOSwgNzcsIDY4LCAxLCAyNTEsIDMzLCA2OCwgMSwgMjUwLCAxNTcsIDY4LCAxLCAyMzUsIDE0MSwgNjgsIDEsIDIzNSwgCi0gICAgMTE0LCA2OCwgMSwgMjI3LCAxNjUsIDY4LCAxLCAyMjgsIDc2LCA2OCwgMSwgMjE1LCAxNTYsIDY4LCAxLCAyMTUsIDE0NCwgCi0gICAgNjgsIDEsIDI0OCwgMTM1LCA2OCwgMSwgMjQ4LCAxMTksIDY4LCAxLCAyMjgsIDExMCwgNjgsIDEsIDIxNywgMTA1LCA2OCwgCi0gICAgMSwgMjE2LCAyMDgsIDY4LCAxLCAyNDgsIDIyMSwgNjgsIDEsIDI0OCwgMjUsIDY4LCAxLCAxOTcsIDY4LCAxLCAxOTAsIDY4LCAKLSAgICAxLCAyMjUsIDE0NywgNjgsIDEsIDI1MiwgMTkxLCA2OCwgMSwgMjUyLCAxOCwgNjgsIDEsIDE4NCwgNjgsIDEsIDE5MSwgNjgsIAotICAgIDEsIDIwNSwgNjgsIDEsIDIzMywgMTM1LCA2OCwgMSwgMjEyLCA2NSwgNjgsIDEsIDIwNiwgNjgsIDEsIDE2MiwgNjgsIDEsIAotICAgIDIzMiwgMTg0LCA2OCwgMSwgNjEsIDY4LCAxLCAyMjAsIDg2LCA2MSwgNjgsIDEsIDczLCA2OCwgMSwgMjM2LCAzMywgNjgsIAotICAgIDEsIDcwLCA2OCwgMSwgMjE0LCAxMTgsIDY4LCAxLCA3NSwgNjgsIDEsIDIzMCwgMTUxLCA3NSwgNjgsIDEsIDc2LCA2OCwgMSwgCi0gICAgMjUzLCAxOTIsIDY4LCAyNSwgNSwgMjE3LCA2NCwgMjU1LCA3MywgNjgsIDI1LCA1LCAyNTUsIDczLCA2OCwgMjUsIDUsIDczLCAKLSAgICA2OCwgMjUsIDUsIDIzNiwgMzMsIDY4LCAyNSwgNSwgNzAsIDY4LCAyNSwgNSwgMjE0LCAxMTgsIDY4LCAyNSwgNSwgNzUsIAotICAgIDY4LCAyNSwgNSwgMjU0LCAyMDEsIDY4LCAyNSwgNSwgMjMwLCAxNTEsIDIzNiwgMzMsIDY4LCAyNSwgNSwgMjMwLCAxNTEsIAotICAgIDc2LCA2OCwgMjUsIDUsIDE2MCwgNDgsIDY4LCA1LCAyNTQsIDc1LCA2OCwgNSwgNTksIDUxLCA2OCwgNSwgMjEzLCAxNDcsIAotICAgIDY4LCA1LCAyMTMsIDE1MiwgNjgsIDUsIDI1MywgMjM1LCA2OCwgMTE2LCA1LCAxNDcsIDE5MSwgNjgsIDExNiwgNSwgMTQ3LCAKLSAgICAyMDUsIDY4LCAxMTYsIDUsIDE0NywgMjEyLCA2NSwgNjgsIDExNiwgNSwgMTQ3LCAxNjIsIDY4LCAxLCAyNDIsIDEzMiwgCi0gICAgMjA2LCA2OCwgMjEsIDIxMCwgODYsIDY4LCAyMSwgMTEwLCA2OCwgMjEsIDEwNSwgNjgsIDIxLCAxNTgsIDY4LCAyMSwgMTYxLCAKLSAgICA2OCwgMjEsIDE4OSwgNjgsIDIxLCAxOTQsIDY4LCAyMSwgMTk4LCA2OCwgMjEsIDE5NSwgNjgsIDIxLCAyMDAsIDY4LCA1LCAKLSAgICAyMzIsIDE5MiwgMjIxLCAxNzIsIDY4LCA1LCAyMjEsIDE3MiwgNjgsIDE2LCAyMzIsIDE1MywgNjgsIDE2LCAyNDksIDIxMywgCi0gICAgNjgsIDE2LCAyNTQsIDIyMCwgNjgsIDE2LCAyNDMsIDQ4LCA2OCwgMSwgMjIwLCAxMDIsIDY4LCAxLCAyMTgsIDIyMywgNjgsIAotICAgIDEsIDE0OSwgMTUzLCA2OCwgMSwgMTQ5LCAyMjIsIDE4MCwgNjgsIDEsIDE0OSwgMTU2LCA2OCwgMSwgMTQ5LCAyMzIsIDE4NSwgCi0gICAgNjgsIDI1LCA1LCAxNDksIDE1MywgNjgsIDI1LCA1LCAxNDksIDIyMiwgMTgwLCA2OCwgMjUsIDUsIDE0OSwgMTU2LCA2OCwgCi0gICAgMjUsIDUsIDE0OSwgMjMyLCAxODUsIDY4LCAxLCAyMzAsIDE1MSwgMjI5LCA3NywgNjgsIDEsIDIzMCwgMTUxLCAyMzUsIAotICAgIDExNCwgNjgsIDEsIDIzMCwgMTUxLCAyNTIsIDExMSwgNjgsIDEsIDIzMCwgMTUxLCAyNTIsIDEwNiwgNjgsIDExNiwgNSwgCi0gICAgMjMwLCAxNTEsIDE0NywgMTk3LCA2OCwgMTE2LCA1LCAyMzAsIDE1MSwgMTQ3LCAxODQsIDY4LCAxMTYsIDUsIDIzMCwgMTUxLCAKLSAgICAxNDcsIDIzMywgMTM1LCA2OCwgMSwgMjIwLCAxMDgsIDIzNCwgMjEzLCAyMjAsIDEwMiwgNjgsIDI1LCA1LCAyMjAsIDEwOCwgCi0gICAgMjM0LCAyMTMsIDI0NSwgNTUsIDY4LCAxMzgsIDE2NCwgMjIwLCAxMDgsIDIzNCwgMjEzLCAyNDEsIDI0NywgNjgsIDEzOCwgCi0gICAgMTY0LCAyMjAsIDEwOCwgMjM0LCAyMTMsIDIzNCwgMTgzLCAyMjUsIDEyMSwgNjgsIDEsIDIxMiwgNywgMjI0LCAxMDgsIAotICAgIDIzNCwgMjEzLCAyMTYsIDIwOCwgNjgsIDEsIDIxMiwgNywgMjI0LCAxMDgsIDIzNCwgMjEzLCAyMjQsIDExNCwgNjgsIDI1LCAKLSAgICA1LCAyMTIsIDcsIDIyNCwgMTA4LCAyMzQsIDIxMywgMjQ1LCA1NSwgNjgsIDI1LCA1LCAyMTIsIDcsIDIyNCwgMTA4LCAyMzQsIAotICAgIDIxMywgMjE0LCAyMTQsIDY4LCA1LCAyMTIsIDcsIDIyNCwgMTA4LCAyMzQsIDIxMywgMjE2LCAyOSwgNjgsIDUsIDIxMiwgNywgCi0gICAgMjI0LCAxMDgsIDIzNCwgMjEzLCAyMTYsIDI4LCA2OCwgNSwgMjEyLCA3LCAyMjQsIDEwOCwgMjM0LCAyMTMsIDIxNiwgMjcsIAotICAgIDY4LCA1LCAyMTIsIDcsIDIyNCwgMTA4LCAyMzQsIDIxMywgMjE2LCAyNiwgNjgsIDUsIDIxMiwgNywgMjI0LCAxMDgsIDIzNCwgCi0gICAgMjEzLCAyMTYsIDI1LCA2OCwgMSwgMjQ1LCAyMTksIDIyNCwgMTA4LCAyMzQsIDIxMywgMjI4LCAxMTAsIDY4LCAxLCAyNDUsIAotICAgIDIxOSwgMjI0LCAxMDgsIDIzNCwgMjEzLCAyMTAsIDE3NiwgNjgsIDEsIDI0NSwgMjE5LCAyMjQsIDEwOCwgMjM0LCAyMTMsIAotICAgIDI0MiwgMjE3LCA2OCwgMjUsIDUsIDI0MywgNTksIDIzNCwgMjEzLCA3MywgNjgsIDI1LCA1LCAyMzQsIDE4OCwgMjI2LCAKLSAgICAyMzQsIDY4LCAyNSwgNSwgMjM0LCAxODgsIDcwLCA2OCwgMjUsIDUsIDIzNCwgMTg4LCAyNDUsIDIwOSwgNjgsIDEsIDIyMCwgCi0gICAgODYsIDE3NiwgNjgsIDEsIDIyMCwgODYsIDIzNCwgMTMyLCA2OCwgMSwgMjIwLCA4NiwgMjQzLCAxMzUsIDY4LCAxLCAyMjAsIAotICAgIDg2LCAyNTEsIDMzLCA2OCwgMSwgMjIwLCA4NiwgMjEwLCAxMTYsIDY4LCAxLCAyMjAsIDg2LCAyMjcsIDE2NSwgNjgsIDEsIAotICAgIDIyMCwgODYsIDI0OCwgMjIxLCA2OCwgMSwgMjIwLCA4NiwgMTk3LCA2OCwgMSwgMjIwLCA4NiwgMjI1LCAxNDcsIDY4LCAxLCAKLSAgICAyMjAsIDg2LCAyNDQsIDE5NiwgNjgsIDEsIDIyMCwgODYsIDI1MiwgMTkxLCA2OCwgMSwgMjIwLCA4NiwgMjE2LCAyMDgsIAotICAgIDY4LCAxLCAyMjAsIDg2LCAxNjIsIDY4LCAxMTYsIDUsIDIyMCwgODYsIDE0NywgMjEyLCA2NSwgNjgsIDI1LCA1LCAyMjAsIAotICAgIDg2LCAyNTUsIDczLCA2OCwgMjUsIDUsIDIyMCwgODYsIDc1LCA2OCwgMjUsIDUsIDIyMCwgODYsIDE2MCwgNDgsIDY4LCAyNSwgCi0gICAgNSwgMjIwLCA4NiwgNDAsIDIxMSwgMTE3LCA2OCwgNSwgMjIwLCA4NiwgMjE2LCAyOCwgNjgsIDUsIDIyMCwgODYsIDIxNiwgCi0gICAgMjcsIDY4LCA1LCAyMjAsIDg2LCAyMTYsIDI1LCA2OCwgNSwgMjIwLCA4NiwgMjE2LCAyNCwgNjgsIDUsIDIyMCwgODYsIAotICAgIDI0OSwgMTUyLCAyMTYsIDI4LCA2OCwgNSwgMjIwLCA4NiwgMjQ5LCAxNTIsIDIxNiwgMjcsIDY4LCA1LCAyMjAsIDg2LCAKLSAgICAyNDksIDE1MiwgMjQ1LCAxNTMsIDIxNiwgMzAsIDY4LCAxLCAyMjIsIDEyOCwgMjI2LCA2MywgMjQ0LCAxOTYsIDY4LCA1LCAKLSAgICAyMjIsIDEyOCwgMjI2LCA2MywgMjE2LCAyNSwgNjgsIDIyMCwgODYsIDIxLCAyMTAsIDg2LCA2OCwgMjIwLCA4NiwgMjEsIAotICAgIDExMCwgNjgsIDIyMCwgODYsIDIxLCAxMDUsIDY4LCAyMjAsIDg2LCAyMSwgMTU4LCA2OCwgMjIwLCA4NiwgMjEsIDE2MSwgCi0gICAgNjgsIDIyMCwgODYsIDIxLCAxODksIDY4LCAyMjAsIDg2LCAyMSwgMTk0LCA2OCwgMjIwLCA4NiwgMjEsIDE5OCwgNjgsIAotICAgIDIyMCwgODYsIDIxLCAxOTUsIDY4LCAyMjAsIDg2LCAyMSwgMjAwLCA2OCwgNSwgMjM0LCAxMjYsIDIxNiwgMjksIDY4LCA1LCAKLSAgICAyMzQsIDEyNiwgMjE2LCAyNywgNjgsIDI1LCA1LCAyNTQsIDE5MCwgNjEsIDY4LCAyNSwgNSwgMjU0LCAxOTAsIDI1NCwgCi0gICAgMjAxLCA2OCwgMTYsIDIyMCwgODYsIDExMCwgNjgsIDE2LCAyMjAsIDg2LCAyNDUsIDMwLCA5OCwgNiwgMSwgMjU0LCAxMjMsIAotICAgIDk4LCA2LCAxLCAyNTIsIDE1MiwgOTgsIDYsIDEsIDI0MywgMTA2LCA5OCwgNiwgMSwgMjQ3LCAxMjgsIDk4LCA2LCAxLCAKLSAgICAyNDUsIDE1MCwgOTgsIDYsIDEsIDIxMywgMTYwLCA5OCwgNiwgMSwgMjEwLCA4OSwgOTgsIDYsIDEsIDIxNywgNjAsIDk4LCAKLSAgICA2LCAxLCAyMzUsIDI1NSwgOTgsIDYsIDEsIDIzNCwgMjM0LCA5OCwgNiwgMSwgMjMzLCA4MSwgOTgsIDYsIDEsIDIzMSwgCi0gICAgMTg1LCA5OCwgNiwgMSwgMjI5LCAxOTUsIDk4LCA2LCAxLCAyMjYsIDE5NiwgOTgsIDYsIDEsIDIyNiwgMTcsIDk4LCA2LCAxLCAKLSAgICAyMTAsIDc4LCA5OCwgNiwgMSwgMjIzLCAxNzEsIDk4LCA2LCAxLCAyMjEsIDI0MywgOTgsIDYsIDEsIDIxNywgNTAsIDk4LCAKLSAgICA2LCAxLCAyMTQsIDE5MCwgOTgsIDYsIDEsIDIyNSwgMTQwLCA5OCwgNiwgMSwgMjM0LCAxMjEsIDk4LCA2LCAxLCAyNDIsIAotICAgIDI0MSwgOTgsIDYsIDEsIDIyNCwgNzMsIDk4LCA2LCAxLCAyMjAsIDIwLCA5OCwgNiwgMSwgMjUwLCA5NywgOTgsIDYsIDEsIAotICAgIDI1MSwgNywgOTgsIDYsIDEsIDIzNSwgMTAwLCA5OCwgNiwgMSwgMjUwLCA0MCwgOTgsIDYsIDEsIDI1MCwgMTQzLCA5OCwgNiwgCi0gICAgMSwgMjExLCAxNjMsIDk4LCA2LCAxLCAyMzUsIDExMSwgOTgsIDYsIDEsIDI0MiwgNDMsIDk4LCA2LCAxLCAyNDEsIDIzOCwgCi0gICAgOTgsIDYsIDEsIDI0MSwgMTc1LCA5OCwgNiwgMSwgMjEyLCAyMiwgOTgsIDYsIDEsIDI0MiwgNCwgOTgsIDYsIDEsIDI0MSwgCi0gICAgNjUsIDk4LCA2LCAxLCAyMTAsIDI0NiwgOTgsIDYsIDEsIDI1NCwgMjMyLCA5OCwgMSwgMjU0LCAxMjMsIDk4LCAxLCAyNTIsIAotICAgIDE1MiwgOTgsIDEsIDI0MywgMTA2LCA5OCwgMSwgMjQ3LCAxMjgsIDk4LCAxLCAyNDUsIDE1MCwgOTgsIDEsIDIxMywgMTYwLCAKLSAgICA5OCwgMSwgMjEwLCA4OSwgOTgsIDEsIDIxNywgNjAsIDk4LCAxLCAyMzUsIDI1NSwgOTgsIDEsIDIzNCwgMjM0LCA5OCwgMSwgCi0gICAgMjMzLCA4MSwgOTgsIDEsIDIzMSwgMTg1LCA5OCwgMSwgMjI5LCAxOTUsIDk4LCAxLCAyMjYsIDE5NiwgOTgsIDEsIDIyNiwgCi0gICAgMTcsIDk4LCAxLCAyMTAsIDc4LCA5OCwgMSwgMjIzLCAxNzEsIDk4LCAxLCAyMjEsIDI0MywgOTgsIDEsIDIxNywgNTAsIDk4LCAKLSAgICAxLCAyMTQsIDE5MCwgOTgsIDEsIDIyNSwgMTQwLCA5OCwgMSwgMjM0LCAxMjEsIDk4LCAxLCAyNDIsIDI0MSwgOTgsIDEsIAotICAgIDIyNCwgNzMsIDk4LCAxLCAyMjAsIDIwLCA5OCwgMSwgMjUwLCA5NywgOTgsIDEsIDI1MSwgNywgOTgsIDEsIDIzNSwgMTAwLCAKLSAgICA5OCwgMSwgMjUwLCA0MCwgOTgsIDEsIDI1MCwgMTQzLCA5OCwgMSwgMjExLCAxNjMsIDk4LCAxLCAyMzUsIDExMSwgOTgsIDEsIAotICAgIDI0MiwgNDMsIDk4LCAxLCAyNDEsIDIzOCwgOTgsIDEsIDI0MSwgMTc1LCA5OCwgMSwgMjEyLCAyMiwgOTgsIDEsIDI0MiwgNCwgCi0gICAgOTgsIDEsIDI0MSwgNjUsIDk4LCAxLCAyNDQsIDEyMSwgOTgsIDEsIDIxMCwgMjQ2LCA5OCwgMSwgMjQ1LCAxNjUsIDk4LCAxLCAKLSAgICAyMTUsIDk0LCAyNDMsIDEwNiwgOTgsIDEsIDI1NCwgMTk2LCA5OCwgMjI2LCAxNSwgMjIwLCAxMzcsIDU4LCAxLCA5OCwgCi0gICAgMjI5LCAxOTUsIDk4LCAxLCAyNTQsIDIzMiwgOTgsIDEsIDI0MiwgMywgNTAsIDk4LCAxLCAyMzMsIDEyNywgNTAsIDI0LCAKLSAgICAxMDAsIDIzNCwgNTgsIDI0LCAxMDAsIDIxOCwgMjE1LCAyNCwgMTAwLCAyMjgsIDIyNiwgMjQsIDEwMCwgMjE2LCAxMDEsIAotICAgIDI0LCAxMDAsIDIxOCwgMjA0LCAyNCwgMTAwLCAyMjMsIDI2LCAyNCwgMTAwLCAyMzAsIDIxNywgMjQsIDEwMCwgMjI1LCA5NSwgCi0gICAgMjQsIDEwMCwgMjE4LCAyMTIsIDI0LCAxMDAsIDIxOSwgMTQ4LCAyNCwgMTAwLCAyMTgsIDIwOSwgMjQsIDEwMCwgMjM2LCAKLSAgICA1NiwgMjQsIDEwMCwgMjUwLCA0NiwgMjQsIDEwMCwgMjE4LCAyMTksIDI0LCAxMDAsIDI1MCwgMTA2LCAyNCwgMTAwLCAyMzQsIAotICAgIDExMCwgMjQsIDEwMCwgMjE2LCAxNzMsIDI0LCAxMDAsIDIyNSwgMTMxLCAyNCwgMTAwLCAyNDEsIDE3MiwgMjQsIDEwMCwgCi0gICAgMjI4LCAyMjIsIDI0LCAxMDAsIDIxOCwgMjEzLCAyNCwgMTAwLCAyMjgsIDIxNiwgMjQsIDEwMCwgMjI4LCAyMjAsIDI0LCAKLSAgICAxMDAsIDIxNiwgOTgsIDI0LCAxMDAsIDIyMywgMTQsIDI0LCAxMDAsIDIxOCwgMjExLCAyNCwgMTAwLCAyMjMsIDI0LCAyNCwgCi0gICAgMTAwLCAyMzQsIDIxOCwgMjQsIDEwMCwgMjMwLCAyMTAsIDI0LCAxMDAsIDIzNCwgMjIxLCAyNCwgMTAwLCAyMjUsIDkwLCAKLSAgICAyNCwgMTAwLCAyMjUsIDg4LCAyNCwgMTAwLCAyMjUsIDc2LCAyNCwgMTAwLCAyMjUsIDg0LCAyNCwgMTAwLCAyMjUsIDgyLCAKLSAgICAyNCwgMTAwLCAyMjUsIDc5LCAyNCwgMTAwLCAyMjUsIDgxLCAyNCwgMTAwLCAyMjUsIDc4LCAyNCwgMTAwLCAyMjUsIDgzLCAKLSAgICAyNCwgMTAwLCAyMjUsIDkzLCAyNCwgMTAwLCAyMjUsIDk0LCAyNCwgMTAwLCAyMjUsIDc3LCAyNCwgMTAwLCAyMjUsIDg3LCAKLSAgICAyNCwgMTAwLCAyMzQsIDIxOSwgMjQsIDEwMCwgMjM0LCAyMTcsIDI0LCAxMDAsIDIxOSwgMTQxLCAyNCwgMTAwLCAyMTksIAotICAgIDEzOSwgMjQsIDEwMCwgMjE5LCAxMzEsIDI0LCAxMDAsIDIxOSwgMTM0LCAyNCwgMTAwLCAyMTksIDE0MCwgMjQsIDEwMCwgCi0gICAgMjE5LCAxMzYsIDI0LCAxMDAsIDIxOSwgMTM1LCAyNCwgMTAwLCAyMTksIDEzMywgMjQsIDEwMCwgMjE5LCAxNDQsIDI0LCAKLSAgICAxMDAsIDIxOSwgMTQ2LCAyNCwgMTAwLCAyMTksIDE0NywgMjQsIDEwMCwgMjE5LCAxNDIsIDI0LCAxMDAsIDIxOSwgMTMyLCAKLSAgICAyNCwgMTAwLCAyMTksIDEzNywgMjQsIDEwMCwgMjE5LCAxNDUsIDI0LCAxMDAsIDI1MCwgOTAsIDI0LCAxMDAsIDI1MCwgODgsIAotICAgIDI0LCAxMDAsIDI1MCwgMTY4LCAyNCwgMTAwLCAyNTAsIDE2NiwgMjQsIDEwMCwgMjI2LCAzMiwgMjQsIDEwMCwgMjM2LCA1MSwgCi0gICAgMjQsIDEwMCwgMjM2LCA0MiwgMjQsIDEwMCwgMjM2LCA1MCwgMjQsIDEwMCwgMjM2LCA0NywgMjQsIDEwMCwgMjM2LCA0NSwgCi0gICAgMjQsIDEwMCwgMjM2LCA0OSwgMjQsIDEwMCwgMjE4LCAyMTYsIDI0LCAxMDAsIDIzNiwgNTQsIDI0LCAxMDAsIDIzNiwgNTUsIAotICAgIDI0LCAxMDAsIDIzNiwgNDMsIDI0LCAxMDAsIDIzNiwgNDgsIDI0LCAxMDAsIDIxMSwgMjYsIDI0LCAxMDAsIDI1MCwgNDUsIAotICAgIDI0LCAxMDAsIDI1MCwgOTEsIDI0LCAxMDAsIDI1MCwgODksIDI0LCAxMDAsIDI1MCwgMTY5LCAyNCwgMTAwLCAyNTAsIDE2NywgCi0gICAgMjQsIDEwMCwgMjUwLCAxMDQsIDI0LCAxMDAsIDI1MCwgMTA1LCAyNCwgMTAwLCAyNTAsIDkyLCAyNCwgMTAwLCAyNTAsIAotICAgIDE3MCwgMjQsIDEwMCwgMjI1LCAxMjksIDI0LCAxMDAsIDIzNCwgMjIwLCAyNCwgMTAwLCAyMTgsIDIxNywgMjQsIDEwMCwgCi0gICAgMjExLCAzMiwgMjQsIDEwMCwgMjM0LCA0OSwgMjQsIDEwMCwgMjI4LCAyMTgsIDI0LCAxMDAsIDIyOCwgMjI0LCAyNCwgMTAwLCAKLSAgICAyMjgsIDIyMywgMjQsIDEwMCwgMjE2LCA5NSwgMjQsIDEwMCwgMjQ0LCAxMDMsIDI0LCAxNDMsIDI0NCwgMTAzLCAyNCwgCi0gICAgMTQzLCA2MSwgMjQsIDE0MywgMjU0LCAyNDMsIDI0LCAxNDMsIDE5MSwgMjQsIDE0MywgMjExLCA5MiwgMjQsIDE0MywgMjQ1LCAKLSAgICAxMTcsIDI0LCAxNDMsIDc1LCAyNCwgMTQzLCAyMTEsIDM2LCAyNCwgMTQzLCAyMTEsIDQ3LCAyNCwgMTQzLCA3NiwgMjQsIAotICAgIDE0MywgMjEyLCA2NSwgMjQsIDE0MywgMjEyLCA2MiwgMjQsIDE0MywgMjI2LCAyMzQsIDI0LCAxNDMsIDIxMCwgMjQ0LCAyNCwgCi0gICAgMTQzLCA3MCwgMjQsIDE0MywgMjEyLCAxMSwgMjQsIDE0MywgMjEyLCAyMiwgMjQsIDE0MywgMjExLCAyNTAsIDI0LCAxNDMsIAotICAgIDIxMCwgMjEyLCAyNCwgMTQzLCAyNDUsIDU1LCAyNCwgMTQzLCAyMTEsIDgsIDI0LCAxNDMsIDczLCAyNCwgMTQzLCAyNTUsIAotICAgIDE1NywgMjQsIDE0MywgMjU1LCAxNTYsIDI0LCAxNDMsIDIxMSwgMTA2LCAyNCwgMTQzLCAyMTEsIDEwNCwgMjQsIDE0MywgCi0gICAgMjQ1LCAxMTUsIDI0LCAxNDMsIDI0NSwgMTE0LCAyNCwgMTQzLCAyNDUsIDExNiwgMjQsIDE0MywgMjExLCAzNSwgMjQsIAotICAgIDE0MywgMjExLCAzNCwgMjQsIDE0MywgMjI3LCA4NCwgMjQsIDE0MywgMjI3LCA4NSwgMjQsIDE0MywgMjI3LCA3OCwgMjQsIAotICAgIDE0MywgMjI3LCA4MywgMjQsIDE0MywgMjI3LCA4MSwgMjQsIDE0MywgMjEwLCAyMzgsIDI0LCAxNDMsIDIxMCwgMjM3LCAyNCwgCi0gICAgMTQzLCAyMTAsIDIzNiwgMjQsIDE0MywgMjEwLCAyMzksIDI0LCAxNDMsIDIxMCwgMjQwLCAyNCwgMTQzLCAyMTUsIDMwLCAKLSAgICAyNCwgMTQzLCAyMTUsIDI5LCAyNCwgMTQzLCAyMTUsIDI3LCAyNCwgMTQzLCAyMTUsIDI0LCAyNCwgMTQzLCAyMTUsIDI1LCAKLSAgICAyNCwgMTQzLCAyMTAsIDIxMSwgMjQsIDE0MywgMjEwLCAyMDgsIDI0LCAxNDMsIDIxMCwgMjA5LCAyNCwgMTQzLCAyMTAsIAotICAgIDIwMywgMjQsIDE0MywgMjEwLCAyMDQsIDI0LCAxNDMsIDIxMCwgMjA1LCAyNCwgMTQzLCAyMTAsIDIwNywgMjQsIDE0MywgCi0gICAgMjQ1LCA0OSwgMjQsIDE0MywgMjQ1LCA1MSwgMjQsIDE0MywgMjExLCA3LCAyNCwgMTQzLCAyNDAsIDE1MywgMjQsIDE0MywgCi0gICAgMjQwLCAxNDUsIDI0LCAxNDMsIDI0MCwgMTQ4LCAyNCwgMTQzLCAyNDAsIDE0NiwgMjQsIDE0MywgMjQwLCAxNTAsIDI0LCAKLSAgICAxNDMsIDI0MCwgMTUyLCAyNCwgMTQzLCAyNTQsIDM0LCAyNCwgMTQzLCAyNTQsIDMxLCAyNCwgMTQzLCAyNTQsIDI5LCAyNCwgCi0gICAgMTQzLCAyNTQsIDMwLCAyNCwgMTQzLCAyMTgsIDIyMCwgMjQsIDE0MywgMjU1LCAxNTgsIDI0LCAxNDMsIDIxMSwgMTA1LCAKLSAgICAyNCwgMTQzLCAyMTEsIDMzLCAyNCwgMTQzLCAyMjcsIDgwLCAyNCwgMTQzLCAyMjcsIDc5LCAyNCwgOTAsIDIzNCwgNTgsIAotICAgIDI0LCA5MCwgMjE4LCAyMTUsIDI0LCA5MCwgMjM0LCA1MSwgMjQsIDkwLCAyMjgsIDIyNiwgMjQsIDkwLCAyMjgsIDIyNCwgCi0gICAgMjQsIDkwLCAyMjgsIDIyMywgMjQsIDkwLCAyMTYsIDEwMSwgMjQsIDkwLCAyMjMsIDI2LCAyNCwgOTAsIDIyMywgMjEsIDI0LCAKLSAgICA5MCwgMjIzLCAxOCwgMjQsIDkwLCAyMjMsIDExLCAyNCwgOTAsIDIyMywgNiwgMjQsIDkwLCAyMjMsIDEsIDI0LCA5MCwgCi0gICAgMjIzLCAxMiwgMjQsIDkwLCAyMjMsIDI0LCAyNCwgOTAsIDIzMCwgMjE3LCAyNCwgOTAsIDIyNSwgOTUsIDI0LCA5MCwgMjI1LCAKLSAgICA4NCwgMjQsIDkwLCAyMTksIDE0OCwgMjQsIDkwLCAyMTgsIDIwOSwgMjQsIDkwLCAyMzYsIDU2LCAyNCwgOTAsIDI1MCwgNDYsIAotICAgIDI0LCA5MCwgMjUwLCAxMDYsIDI0LCA5MCwgMjM0LCAxMTAsIDI0LCA5MCwgMjE2LCAxNzMsIDI0LCA5MCwgMjI1LCAxMzEsIAotICAgIDI0LCA5MCwgMjQxLCAxNzIsIDI0LCA5MCwgMjM0LCA1MiwgMjQsIDkwLCAyMzQsIDUwLCAyNCwgOTAsIDIyOCwgMjIyLCAyNCwgCi0gICAgOTAsIDIyOCwgMjE2LCAyNCwgOTAsIDIyOCwgMjE4LCAyNCwgOTAsIDIyOCwgMjIxLCAyNCwgOTAsIDIyOCwgMjE3LCAyNCwgCi0gICAgOTAsIDIxNiwgOTgsIDI0LCA5MCwgMjE2LCA5NSwgMjQsIDkwLCAyMjMsIDE5LCAyNCwgOTAsIDIyMywgMTQsIDI0LCA5MCwgCi0gICAgMjIzLCAwLCAyNCwgOTAsIDIyMiwgMjU1LCAyNCwgOTAsIDIxOCwgMjExLCAyNCwgOTAsIDIyMywgMTYsIDI0LCA5MCwgMjIzLCAKLSAgICAxNSwgMjQsIDkwLCAyMjMsIDgsIDI0LCA5MCwgMjIzLCAxMCwgMjQsIDkwLCAyMjMsIDIzLCAyNCwgOTAsIDIyMywgMywgMjQsIAotICAgIDkwLCAyMjMsIDEzLCAyNCwgOTAsIDIyMywgMjIsIDI0LCA5MCwgMjIyLCAyNTQsIDI0LCA5MCwgMjMwLCAyMTMsIDI0LCA5MCwgCi0gICAgMjMwLCAyMDgsIDI0LCA5MCwgMjMwLCAyMTAsIDI0LCA5MCwgMjMwLCAyMDcsIDI0LCA5MCwgMjMwLCAyMDUsIDI0LCA5MCwgCi0gICAgMjMwLCAyMTEsIDI0LCA5MCwgMjMwLCAyMTYsIDI0LCA5MCwgMjMwLCAyMTQsIDI0LCA5MCwgMjM0LCAyMjEsIDI0LCA5MCwgCi0gICAgMjI1LCA4NiwgMjQsIDkwLCAyMjUsIDg3LCAyNCwgOTAsIDIyNSwgOTIsIDI0LCA5MCwgMjM0LCAyMTksIDI0LCA5MCwgMjE5LCAKLSAgICAxNDEsIDI0LCA5MCwgMjE5LCAxMzEsIDI0LCA5MCwgMjE5LCAxMzQsIDI0LCA5MCwgMjE5LCAxMzYsIDI0LCA5MCwgMjI2LCAKLSAgICAzMiwgMjQsIDkwLCAyMzYsIDUxLCAyNCwgOTAsIDIzNiwgNDQsIDI0LCA5MCwgMjE4LCAyMTYsIDI0LCA5MCwgMjM2LCA1MiwgCi0gICAgMjQsIDkwLCAyMTEsIDI2LCAyNCwgOTAsIDIxMSwgMjIsIDI0LCA5MCwgMjExLCAyMywgMjQsIDkwLCAyMjUsIDEyOSwgMjQsIAotICAgIDkwLCAyMzQsIDIyMCwgMjQsIDkwLCAyNDEsIDE3MCwgMjQsIDkwLCAyNDEsIDE2OCwgMjQsIDkwLCAyNDEsIDE3MSwgMjQsIAotICAgIDkwLCAyNDEsIDE2OSwgMjQsIDkwLCAyMTEsIDMyLCAyNCwgOTAsIDIzNCwgNTQsIDI0LCA5MCwgMjM0LCA1MywgMjQsIDkwLCAKLSAgICAyMzQsIDU3LCAyNCwgOTAsIDIzNCwgNTUsIDI0LCA5MCwgMjM0LCA1NiwgMjQsIDkwLCAyMTgsIDIxMywgMjksIDMsIDE2MiwgCi0gICAgMjksIDMsIDI0MCwgMjIyLCAyOSwgMywgMjQxLCAxODAsIDI5LCAzLCAyNDIsIDQ2LCAyOSwgMywgMjQxLCAyMjAsIDI5LCAzLCAKLSAgICAyNDEsIDIzOCwgMjksIDMsIDI0MSwgNjgsIDI5LCAzLCAyNDEsIDY3LCAyOSwgMywgMjMzLCAxMzUsIDI5LCAzLCAyMzIsIAotICAgIDk4LCAyOSwgMywgMjMyLCAyNDEsIDI5LCAzLCAyMzMsIDEzNCwgMjksIDMsIDIzMywgNTAsIDI5LCAzLCAyMzMsIDU4LCAyOSwgCi0gICAgMywgMjMyLCAxNTYsIDI5LCAzLCAyMzIsIDcwLCAyOSwgMywgMjQxLCAxODksIDI5LCAzLCAyNDEsIDE4MywgMjksIDMsIAotICAgIDI0MSwgMTg1LCAyOSwgMywgMjQxLCAxODgsIDI5LCAzLCAyNDEsIDE4NiwgMjksIDMsIDI0MSwgMTg3LCAyOSwgMywgMjQxLCAKLSAgICAxODQsIDI5LCAzLCAyNDEsIDE4MiwgMjksIDMsIDE4NCwgMjksIDMsIDIzMCwgMTAyLCAyOSwgMywgMjMwLCAyMzAsIDI5LCAKLSAgICAzLCAyMzEsIDIzNywgMjksIDMsIDIzMSwgODAsIDI5LCAzLCAyMzEsIDkxLCAyOSwgMywgMjMwLCAxNjEsIDI5LCAzLCAyMzAsIAotICAgIDQyLCAyOSwgMywgMjE3LCAxNjMsIDI5LCAzLCAyMTcsIDE1NywgMjksIDMsIDIxNywgMTU5LCAyOSwgMywgMjE3LCAxNjIsIAotICAgIDI5LCAzLCAyMTcsIDE2MCwgMjksIDMsIDIxNywgMTYxLCAyOSwgMywgMjE3LCAxNTgsIDI5LCAzLCAyMTcsIDE1NiwgMjksIAotICAgIDMsIDIwNSwgMjksIDMsIDIyMiwgMTQwLCAyOSwgMywgMjIzLCAzNSwgMjksIDMsIDIyMywgMTg0LCAyOSwgMywgMjIzLCAKLSAgICAxMDgsIDI5LCAzLCAyMjMsIDEyOCwgMjksIDMsIDIyMiwgMjExLCAyOSwgMywgMjIyLCAxMDksIDI5LCAzLCAyMDYsIDI5LCAKLSAgICAzLCAyMTgsIDgzLCAyOSwgMywgMjE5LCAxOTEsIDI5LCAzLCAyMjIsIDMxLCAyOSwgMywgMjIxLCAxNzAsIDI5LCAzLCAyMjEsIAotICAgIDE4MSwgMjksIDMsIDIxOSwgNTgsIDI5LCAzLCAyMTcsIDI1MywgMjksIDMsIDIyMCwgMTAyLCAyOSwgMywgMjE5LCAyMjUsIAotICAgIDI5LCAzLCAyMjAsIDMyLCAyOSwgMywgMjIwLCA5OCwgMjksIDMsIDIyMCwgNjEsIDI5LCAzLCAyMjAsIDYzLCAyOSwgMywgCi0gICAgMjIwLCA3LCAyOSwgMywgMjE5LCAyMDgsIDI5LCAzLCAyMjQsIDg4LCAyOSwgMywgMjI0LCAzMCwgMjksIDMsIDIyNCwgNTMsIAotICAgIDI5LCAzLCAyMjQsIDg3LCAyOSwgMywgMjI0LCA2OCwgMjksIDMsIDIyNCwgNjksIDI5LCAzLCAyMjQsIDQyLCAyOSwgMywgCi0gICAgMjI0LCA0MSwgMjksIDMsIDIyMywgMjQyLCAyOSwgMywgMjIzLCAyMzgsIDI5LCAzLCAyMjMsIDI0MSwgMjksIDMsIDIyMywgCi0gICAgMjM5LCAyOSwgMywgMjIzLCAyNDAsIDI5LCAzLCAyMjQsIDY1LCAyOSwgMywgMjI0LCA1OSwgMjksIDMsIDIyNCwgNjEsIDI5LCAKLSAgICAzLCAyMjQsIDY0LCAyOSwgMywgMjI0LCA2MiwgMjksIDMsIDIyNCwgNjMsIDI5LCAzLCAyMjQsIDYwLCAyOSwgMywgMjI0LCAKLSAgICA1OCwgMjksIDMsIDIyNCwgNTQsIDI5LCAzLCAyMjQsIDU3LCAyOSwgMywgMjI0LCA1NSwgMjksIDMsIDIyNCwgNTYsIDI5LCAKLSAgICAzLCAyNTIsIDE5MSwgMjksIDMsIDI1MSwgMTI1LCAyOSwgMywgMjUyLCA2LCAyOSwgMywgMjUyLCAxODksIDI5LCAzLCAyNTIsIAotICAgIDY2LCAyOSwgMywgMjUyLCA3NSwgMjksIDMsIDI1MSwgMjA1LCAyOSwgMywgMjUxLCA4MywgMjksIDMsIDIxNCwgMjcsIDI5LCAKLSAgICAzLCAyMTIsIDExNiwgMjksIDMsIDIxMywgMTc2LCAyOSwgMywgMjE0LCAyNiwgMjksIDMsIDIxMywgMjUwLCAyOSwgMywgCi0gICAgMjEzLCAyNTUsIDI5LCAzLCAyMTMsIDEzOCwgMjksIDMsIDIxMiwgMTA3LCAyOSwgMywgMjE3LCAxMDUsIDI5LCAzLCAyMTUsIAotICAgIDExOCwgMjksIDMsIDIxNiwgMTE3LCAyOSwgMywgMjE3LCAxMDEsIDI5LCAzLCAyMTcsIDExLCAyOSwgMywgMjE3LCAyMiwgCi0gICAgMjksIDMsIDExMSwgMjksIDMsIDIxNSwgODAsIDI5LCAzLCAyNTEsIDMzLCAyOSwgMywgMjQ5LCAxMTIsIDI5LCAzLCAyNTAsIAotICAgIDUxLCAyOSwgMywgMjUxLCAzMiwgMjksIDMsIDI1MCwgMTgyLCAyOSwgMywgMjUwLCAxOTAsIDI5LCAzLCAyNDksIDIzOCwgCi0gICAgMjksIDMsIDI0OSwgODEsIDI5LCAzLCAyMTEsIDE2NSwgMjksIDMsIDIxMSwgMTQxLCAyOSwgMywgMjExLCAxNTcsIDI5LCAzLCAKLSAgICAyMTEsIDE2NCwgMjksIDMsIDIxMSwgMTYxLCAyOSwgMywgMjExLCAxNjIsIDI5LCAzLCAyMTEsIDE0OCwgMjksIDMsIDIxMSwgCi0gICAgMTQ3LCAyOSwgMywgMjExLCAxMzYsIDI5LCAzLCAyMTEsIDEzMiwgMjksIDMsIDIxMSwgMTM1LCAyOSwgMywgMjExLCAxMzMsIAotICAgIDI5LCAzLCAyMTEsIDEzNCwgMjksIDMsIDE5NywgMjksIDMsIDIyNywgMjM3LCAyOSwgMywgMjI4LCAyMzMsIDI5LCAzLCAKLSAgICAyMjksIDIyNSwgMjksIDMsIDIyOSwgMTAzLCAyOSwgMywgMjI5LCAxMDcsIDI5LCAzLCAyMjgsIDc0LCAyOSwgMywgMjI3LCAKLSAgICAxNzQsIDI5LCAzLCAyMjcsIDE2NSwgMjksIDMsIDIyNywgMTI4LCAyOSwgMywgMjI3LCAxNDgsIDI5LCAzLCAyMjcsIDE2NCwgCi0gICAgMjksIDMsIDIyNywgMTU1LCAyOSwgMywgMjI3LCAxNTYsIDI5LCAzLCAyMjcsIDEzNCwgMjksIDMsIDIyNywgMTE5LCAyOSwgCi0gICAgMywgMjQyLCAxODAsIDYxLCAyOSwgMywgMjQyLCAxODAsIDcwLCAyOSwgMywgMjQyLCAxODAsIDczLCAyOSwgMywgMjQyLCAKLSAgICAxODAsIDI1NSwgNzMsIDI5LCAzLCAyNDIsIDE4MCwgMjQ1LCAyMDksIDI5LCAzLCAyNDIsIDE4MCwgNzUsIDI5LCAzLCAyNDIsIAotICAgIDE4MCwgNzYsIDI5LCAzLCAyNDIsIDE4MCwgMjEyLCA2NSwgMjksIDMsIDE3NiwgMjksIDMsIDIzMywgMjE3LCAyOSwgMywgCi0gICAgMjM0LCA5MiwgMjksIDMsIDIzNSwgMTAsIDI5LCAzLCAyMzQsIDE4MSwgMjksIDMsIDIzNCwgMTgyLCAyOSwgMywgMjM0LCAKLSAgICAyOCwgMjksIDMsIDIzNCwgMjcsIDI5LCAzLCAyMzMsIDE4MiwgMjksIDMsIDIzMywgMTc2LCAyOSwgMywgMjMzLCAxODEsIAotICAgIDI5LCAzLCAyMzMsIDE3NywgMjksIDMsIDIzMywgMTc4LCAyOSwgMywgMjMzLCAxNzEsIDI5LCAzLCAyMzMsIDE2NSwgMjksIAotICAgIDMsIDIzMywgMTY3LCAyOSwgMywgMjMzLCAxNzAsIDI5LCAzLCAyMzMsIDE2OCwgMjksIDMsIDIzMywgMTY5LCAyOSwgMywgCi0gICAgMjMzLCAxNjYsIDI5LCAzLCAyMzMsIDE2NCwgMjksIDMsIDIzMywgMTYwLCAyOSwgMywgMjMzLCAxNjMsIDI5LCAzLCAyMzMsIAotICAgIDE2MSwgMjksIDMsIDIzMywgMTYyLCAyOSwgMywgMjEyLCA2NSwgMjksIDMsIDIxMSwgMTk1LCAyOSwgMywgMjExLCAyNTAsIAotICAgIDI5LCAzLCAyMTIsIDY0LCAyOSwgMywgMjEyLCAxNywgMjksIDMsIDIxMiwgMjIsIDI5LCAzLCAyMTEsIDIyNywgMjksIDMsIAotICAgIDIxMSwgMjI2LCAyOSwgMywgMjI1LCAxMzksIDYxLCAyOSwgMywgMjI1LCAxMzksIDcwLCAyOSwgMywgMjI1LCAxMzksIDczLCAKLSAgICAyOSwgMywgMjI1LCAxMzksIDI1NSwgNzMsIDI5LCAzLCAyMjUsIDEzOSwgMjQ1LCAyMDksIDI5LCAzLCAyMjUsIDEzOSwgNzUsIAotICAgIDI5LCAzLCAyMjUsIDEzOSwgNzYsIDI5LCAzLCAyMTAsIDExNiwgMjksIDMsIDIxMCwgMTMsIDI5LCAzLCAyMTAsIDQ0LCAyOSwgCi0gICAgMywgMjEwLCAxMTUsIDI5LCAzLCAyMTAsIDkyLCAyOSwgMywgMjEwLCA5NCwgMjksIDMsIDIxMCwgMjMsIDI5LCAzLCAyMTAsIAotICAgIDAsIDI5LCAzLCAyMTAsIDgyLCAyOSwgMywgMjEwLCA2MiwgMjksIDMsIDIxMCwgNjksIDI5LCAzLCAyMTAsIDgxLCAyOSwgMywgCi0gICAgMjEwLCA3MywgMjksIDMsIDIxMCwgNzQsIDI5LCAzLCAyMTAsIDY3LCAyOSwgMywgMjEwLCA1MywgMjksIDMsIDE5MSwgMjksIAotICAgIDMsIDIxMCwgMjEyLCAyOSwgMywgMjExLCA4LCAyOSwgMywgMjExLCAxMDMsIDI5LCAzLCAyMTEsIDQ0LCAyOSwgMywgMjExLCAKLSAgICA0NywgMjksIDMsIDIxMCwgMjQ0LCAyOSwgMywgMjEwLCAyMzUsIDI5LCAzLCAyNDgsIDIyMSwgMjksIDMsIDI0NiwgNzgsIAotICAgIDI5LCAzLCAyNDgsIDMsIDI5LCAzLCAyNDgsIDIyMCwgMjksIDMsIDI0OCwgNzcsIDI5LCAzLCAyNDgsIDkwLCAyOSwgMywgCi0gICAgMjQ3LCAxNDUsIDI5LCAzLCAyNDYsIDQ3LCAyOSwgMywgMjQ4LCAxMzUsIDI5LCAzLCAyNDgsIDEwMCwgMjksIDMsIDI0OCwgCi0gICAgMTEyLCAyOSwgMywgMjQ4LCAxMzQsIDI5LCAzLCAyNDgsIDEyMiwgMjksIDMsIDI0OCwgMTIzLCAyOSwgMywgMjQ4LCAxMDUsIAotICAgIDI5LCAzLCAyNDgsIDkxLCAyOSwgMywgMjM1LCAxNDEsIDI5LCAzLCAyMzUsIDUxLCAyOSwgMywgMjM1LCAxMDgsIDI5LCAzLCAKLSAgICAyMzUsIDE0MCwgMjksIDMsIDIzNSwgMTI0LCAyOSwgMywgMjM1LCAxMjYsIDI5LCAzLCAyMzUsIDY4LCAyOSwgMywgMjM1LCAKLSAgICAzMSwgMjksIDMsIDI0MywgMTM1LCAyOSwgMywgMjQyLCAxMTMsIDI5LCAzLCAyNDIsIDIxNCwgMjksIDMsIDI0MywgMTMyLCAKLSAgICAyOSwgMywgMjQzLCA1NSwgMjksIDMsIDI0MywgNjIsIDI5LCAzLCAyNDIsIDE3NCwgMjksIDMsIDI0MiwgMTczLCAyOSwgMywgCi0gICAgMjQyLCA3OCwgMjksIDMsIDI0MiwgNzQsIDI5LCAzLCAyNDIsIDc3LCAyOSwgMywgMjQyLCA3NSwgMjksIDMsIDI0MiwgNzYsIAotICAgIDI5LCAzLCAyNDMsIDI5LCAyOSwgMywgMjQzLCA5LCAyOSwgMywgMjQzLCAxOSwgMjksIDMsIDI0MywgMjgsIDI5LCAzLCAKLSAgICAyNDMsIDIzLCAyOSwgMywgMjQzLCAyNCwgMjksIDMsIDI0MywgMTMsIDI5LCAzLCAyNDIsIDI1NCwgMjksIDMsIDIxNiwgCi0gICAgMjA4LCAyOSwgMywgMjE2LCAxMzYsIDI5LCAzLCAyMTYsIDE3NSwgMjksIDMsIDIxNiwgMjA3LCAyOSwgMywgMjE2LCAxOTQsIAotICAgIDI5LCAzLCAyMTYsIDE5NSwgMjksIDMsIDIxNiwgMTU2LCAyOSwgMywgMjE2LCAxMjgsIDI5LCAzLCAyNTAsIDE1NywgMjksIAotICAgIDMsIDI1MCwgNjksIDI5LCAzLCAyNTAsIDExMCwgMjksIDMsIDI1MCwgMTU2LCAyOSwgMywgMjUwLCAxMjgsIDI5LCAzLCAKLSAgICAyNTAsIDEzMSwgMjksIDMsIDI1MCwgODYsIDI5LCAzLCAyNTAsIDU4LCAyOSwgMywgMjI1LCAxNDcsIDI5LCAzLCAyMjUsIAotICAgIDExNCwgMjksIDMsIDIyNSwgMTMzLCAyOSwgMywgMjI1LCAxNDYsIDI5LCAzLCAyMjUsIDEzNSwgMjksIDMsIDIyNSwgMTM2LCAKLSAgICAyOSwgMywgMjI1LCAxMjEsIDI5LCAzLCAyMjUsIDExMCwgMjksIDMsIDIxNSwgMTgzLCAyOSwgMywgMjE1LCAxNjMsIDI5LCAKLSAgICAzLCAyMTUsIDE2NywgMjksIDMsIDIxNSwgMTgyLCAyOSwgMywgMjE1LCAxNzcsIDI5LCAzLCAyMTUsIDE3OCwgMjksIDMsIAotICAgIDIxNSwgMTY2LCAyOSwgMywgMjE1LCAxNjEsIDI5LCAzLCAyMTUsIDM5LCAyOSwgMywgMjE1LCAzMSwgMjksIDMsIDIxNSwgCi0gICAgMzUsIDI5LCAzLCAyMTUsIDM4LCAyOSwgMywgMjE1LCAzNiwgMjksIDMsIDIxNSwgMzcsIDI5LCAzLCAyMTUsIDMzLCAyOSwgCi0gICAgMywgMjE1LCAzMiwgMjksIDMsIDI0NCwgMTk2LCAyOSwgMywgMjQzLCAyMzQsIDI5LCAzLCAyNDQsIDEyMSwgMjksIDMsIAotICAgIDI0NCwgMTk1LCAyOSwgMywgMjQ0LCAxNDcsIDI5LCAzLCAyNDQsIDE1NCwgMjksIDMsIDI0NCwgNDMsIDI5LCAzLCAyNDMsIAotICAgIDIxMywgMjksIDMsIDE5MCwgMjksIDMsIDIyNCwgMTUwLCAyOSwgMywgMjI1LCAxMDgsIDI5LCAzLCAyMjYsIDg5LCAyOSwgMywgCi0gICAgMjI1LCAyMTEsIDI5LCAzLCAyMjUsIDIyMSwgMjksIDMsIDIyNSwgMTYsIDI5LCAzLCAyMjQsIDExNCwgMjksIDMsIDIyMiwgCi0gICAgOTksIDI5LCAzLCAyMzAsIDMxLCAyOSwgMywgMjQzLCAyMDcsIDI5LCAzOCwgMjQzLCA1MywgMjIsIDI1LCAyMzMsIDIzLCAKLSAgICA3OCwgMjksIDM4LCAyNSwgMjMzLCAyMywgNzgsIDI5LCAzOCwgMjQzLCA1MywgNzgsIDI5LCAyMjEsIDE3MywgNzgsIDI5LCAKLSAgICAyMTEsIDIwOCwgMjksIDI0MywgMjI5LCAyMTgsIDEyOSwgMjksIDI0OSwgMjE5LCAyOSwgMjIwLCAxNTAsIDI5LCAyNDksIAotICAgIDIyNiwgMjksIDIyNCwgMTk5LCAyNDksIDIyNiwgMjksIDIyNCwgMTMsIDc4LCAyOSwgMjI2LCAxNSwgMjIwLCAxMzcsIDI5LCAKLSAgICAyMSwgMTEwLCAyOSwgMjEsIDEwNSwgMjksIDIxLCAxNTgsIDI5LCAyMSwgMTYxLCAyOSwgMjEsIDE4OSwgMjksIDIxLCAxOTQsIAotICAgIDI5LCAyMSwgMTk4LCAyOSwgMjEsIDE5NSwgMjksIDIxLCAyMDAsIDI5LCA1NCwgMjE2LCAyNDcsIDI5LCA1NCwgMjE1LCA3MywgCi0gICAgMjksIDU0LCAyMTYsIDE2MiwgMjksIDU0LCAyNDQsIDE1LCAyOSwgNTQsIDI0NCwgMTE0LCAyOSwgNTQsIDIxOSwgMTExLCAKLSAgICAyOSwgNTQsIDIyMCwgMTE2LCAyOSwgNTQsIDI0NSwgMTg0LCAyOSwgNTQsIDIyOCwgMTk1LCAyOSwgNTQsIDI0MCwgMjEwLCAKLSAgICAyOSwgNTQsIDIxNiwgMjQ4LCAyMTYsIDE0NywgMjksIDMsIDIyMSwgMTc3LCAyMzAsIDQyLCAyOSwgMywgMjMwLCAzOCwgMjksIAotICAgIDMsIDIzMCwgMzksIDI5LCAzLCAyMzAsIDQwLCAyOSwgMywgMjIxLCAxNzcsIDI1MSwgODMsIDI5LCAzLCAyNTEsIDgwLCAyOSwgCi0gICAgMywgMjUxLCA4MSwgMjksIDMsIDI1MSwgODIsIDI5LCAzLCAyMjEsIDE3NywgMjQzLCAyMTMsIDI5LCAzLCAyNDMsIDIwOSwgCi0gICAgMjksIDMsIDI0MywgMjEwLCAyOSwgMywgMjQzLCAyMTEsIDI5LCAzLCAyMjEsIDE3NywgMjI0LCAxMTQsIDI5LCAzLCAyMjQsIAotICAgIDExMCwgMjksIDMsIDIyNCwgMTExLCAyOSwgMywgMjI0LCAxMTIsIDI5LCAyMTYsIDMxLCAxNjQsIDIxMCwgMjQ3LCAyOSwgCi0gICAgMjE2LCAzMSwgMTY0LCAyNDgsIDQxLCAyOSwgMjE2LCAzMSwgMTY0LCAyMjIsIDIzOCwgMjksIDIxNiwgMzEsIDE2NCwgMjE5LCAKLSAgICAyNTEsIDIyMiwgMjM4LCAyOSwgMjE2LCAzMSwgMTY0LCAyNDcsIDIzNSwgMjksIDIxNiwgMzEsIDE2NCwgMjM0LCAxNjQsIAotICAgIDI5LCAyMTYsIDMxLCAxNjQsIDI1MCwgOTQsIDI5LCAyMTYsIDMxLCAxNjQsIDI0MSwgMTc3LCAyOSwgMjE2LCAzMSwgMTY0LCAKLSAgICAyNDgsIDQwLCAyOSwgMjE2LCAzMSwgMTY0LCAyMzMsIDE5NCwgMTY5LCAxLCA2MSwgMTY5LCAxLCA3NSwgMTY5LCAxLCA3MywgCi0gICAgMTY5LCAxLCA3NiwgMTY5LCAxLCA3MCwgMTY5LCAxLCAyMTQsIDEwNSwgMTY5LCAxLCAyNDMsIDEzNSwgMTY5LCAxLCAxNzYsIAotICAgIDE2OSwgMSwgMjQzLCA2MiwgMTY5LCAxLCAyNDIsIDIxNCwgMTY5LCAxLCAyNDIsIDE3NCwgMTY5LCAxLCAyNDIsIDExMywgCi0gICAgMTY5LCAxLCAyNDIsIDc5LCAxNjksIDEsIDE2MiwgMTY5LCAxLCAyNDEsIDIzOCwgMTY5LCAxLCAyNDEsIDE4MCwgMTY5LCAxLCAKLSAgICAyNDEsIDY4LCAxNjksIDEsIDI0MCwgMjIyLCAxNjksIDEsIDI0MCwgMjAxLCAxNjksIDEsIDIzMywgMTM1LCAxNjksIDEsIAotICAgIDIzMywgNTgsIDE2OSwgMSwgMjMyLCAyNDEsIDE2OSwgMSwgMjMyLCAxNTYsIDE2OSwgMSwgMjMyLCA5OCwgMTY5LCAxLCAKLSAgICAyMzIsIDcxLCAxNjksIDEsIDE4NCwgMTY5LCAxLCAyMzEsIDkxLCAxNjksIDEsIDIzMCwgMjMwLCAxNjksIDEsIDIzMCwgCi0gICAgMTYxLCAxNjksIDEsIDIzMCwgMTAyLCAxNjksIDEsIDE5NywgMTY5LCAxLCAyNDEsIDkwLCAxNjksIDEsIDIyOSwgMjEzLCAKLSAgICAxNjksIDEsIDIyOSwgMTA3LCAxNjksIDEsIDIyOCwgMjMzLCAxNjksIDEsIDIyOCwgNzQsIDE2OSwgMSwgMjI3LCAyMzcsIAotICAgIDE2OSwgMSwgMjI3LCAxNzYsIDE2OSwgMSwgMjI0LCAyOSwgMTY5LCAxLCAyMjQsIDE2LCAxNjksIDEsIDIyNCwgOSwgMTY5LCAKLSAgICAxLCAyMjQsIDEsIDE2OSwgMSwgMjIzLCAyNDYsIDE2OSwgMSwgMjIzLCAyNDQsIDE2OSwgMSwgMjA2LCAxNjksIDEsIDIyMiwgCi0gICAgOTEsIDE2OSwgMSwgMjIxLCAxODEsIDE2OSwgMSwgMjE5LCAxOTEsIDE2OSwgMSwgMjE5LCA1OCwgMTY5LCAxLCAyMTgsIDgzLCAKLSAgICAxNjksIDEsIDIxOCwgMiwgMTY5LCAxLCAyNDgsIDIyMSwgMTY5LCAxLCAyMTcsIDEwNSwgMTY5LCAxLCAyNDgsIDkwLCAxNjksIAotICAgIDEsIDIxNywgMjIsIDE2OSwgMSwgMjQ4LCAzLCAxNjksIDEsIDIxNiwgMTE3LCAxNjksIDEsIDI0NywgMTQ1LCAxNjksIDEsIAotICAgIDI0NiwgNzgsIDE2OSwgMSwgMjQ2LCA1MCwgMTY5LCAxLCAyNDcsIDE1NiwgMTY5LCAxLCAyMTYsIDU5LCAxNjksIDEsIDIxNiwgCi0gICAgNTgsIDE2OSwgMSwgMjE2LCA0NywgMTY5LCAxLCAyMTYsIDQ2LCAxNjksIDEsIDIxNiwgNDUsIDE2OSwgMSwgMjE2LCA0NCwgCi0gICAgMTY5LCAxLCAyMTUsIDE4MywgMTY5LCAxLCAyMTUsIDE3OCwgMTY5LCAxLCAyMTUsIDE2NywgMTY5LCAxLCAyMTUsIDE2NiwgCi0gICAgMTY5LCAxLCAyMTUsIDE2MywgMTY5LCAxLCAyMTUsIDE2MiwgMTY5LCAxLCAyMTIsIDY1LCAxNjksIDEsIDIxMiwgMjIsIAotICAgIDE2OSwgMSwgMjExLCAyNTAsIDE2OSwgMSwgMjExLCAyMjcsIDE2OSwgMSwgMjExLCAxOTUsIDE2OSwgMSwgMjExLCAxODMsIAotICAgIDE2OSwgMSwgMTkxLCAxNjksIDEsIDIxMSwgNDcsIDE2OSwgMSwgMjExLCA4LCAxNjksIDEsIDIxMCwgMjQ0LCAxNjksIDEsIAotICAgIDIxMCwgMjEyLCAxNjksIDEsIDIxMCwgMTc3LCAxOCwgMTksIDI0MCwgMTY4LCAxOCwgMTksIDc1LCAxOCwgMTksIDI1NSwgCi0gICAgMzcsIDE4LCAxOSwgNzMsIDE4LCAxOSwgMjM2LCAzMywgMTgsIDE5LCA3NiwgMTgsIDE5LCAyMjYsIDE4MywgMTgsIDE5LCAKLSAgICAyMTEsIDExNiwgMjI2LCAxODMsIDE4LCAxOSwgNzIsIDI0NSwgMjA5LCAxOCwgMTksIDcyLCA3MywgMTgsIDE5LCA2MSwgMTgsIAotICAgIDE5LCAyNTUsIDczLCAxOCwgMTksIDIxMiwgMjIsIDE4LCAxOSwgMTU5LCAyMTIsIDIyLCAxOCwgMTksIDIxMSwgMjUwLCAxOCwgCi0gICAgMTksIDE1OSwgMjExLCAyNTAsIDE4LCAxOSwgMjExLCAyNDIsIDE4LCAxOSwgMTU5LCAyMTEsIDI0MiwgMTgsIDE5LCAyMTEsIAotICAgIDIyNywgMTgsIDE5LCAxNTksIDIxMSwgMjI3LCAxOCwgMTksIDIxMSwgMjE1LCAxOCwgMTksIDE1OSwgMjExLCAyMTUsIDE4LCAKLSAgICAxOSwgMjI5LCAxOTAsIDIxMSwgMjE1LCAxOCwgMTksIDIxMiwgNjUsIDE4LCAxOSwgMTU5LCAyMTIsIDY1LCAxOCwgMTksIAotICAgIDIxMiwgNjQsIDE4LCAxOSwgMTU5LCAyMTIsIDY0LCAxOCwgMTksIDIyOSwgMTkwLCAyMTIsIDY0LCAxOCwgMTksIDI1NCwgCi0gICAgMjAxLCAxOCwgMTksIDIxMSwgMTE2LCAyMTIsIDk4LCAxOCwgMTksIDI0MiwgMTgwLCAyMTgsIDEyOSwgMTgsIDE5LCA0MCwgCi0gICAgMTQyLCAxOCwgMTksIDQwLCAyNDIsIDEzNiwgMTgsIDE5LCA0MCwgMjUxLCAxNzUsIDE2MywgMjIyLCAyMzMsIDE4LCAxOSwgCi0gICAgNDAsIDIxNiwgMTQsIDE2MywgMjIyLCAyMzMsIDE4LCAxOSwgNDAsIDQ0LCAxNjMsIDIyMiwgMjMzLCAxOCwgMTksIDQwLCAKLSAgICAyMjIsIDIzMywgMTgsIDE5LCA0MCwgNTIsIDE0MiwgMTgsIDE5LCA0MCwgNTIsIDIxOSwgMjUxLCA2NywgMjE4LCA5MCwgMTgsIAotICAgIDE5LCA0MCwgMjMwLCAyMjQsIDI0NywgMTIwLCAxOCwgMTksIDQwLCAyMTksIDI1MSwgMjAzLCA5MSwgMTgsIDE5LCA0MCwgCi0gICAgMjI1LCAyMiwgMTgsIDE5LCA0MCwgMTI0LCAyMTcsIDg3LCAxOCwgMTksIDI0NSwgMTUwLCAxOCwgMTksIDIzNSwgMjU1LCAKLSAgICAxOCwgMTksIDIyNiwgMTk2LCAxOCwgMTksIDI1NCwgMTIzLCAxOCwgMTksIDIyNSwgMjIxLCAxOCwgMTksIDIyNiwgODcsIAotICAgIDE4LCAxOSwgMjI1LCAxMDgsIDE4LCAxOSwgMjI1LCA3MSwgMTgsIDE5LCAyMjUsIDE2LCAxOCwgMTksIDIyNCwgMjQ5LCAxOCwgCi0gICAgMTksIDIxMSwgMTE2LCAyMjQsIDI0OSwgMTgsIDE5LCA3MiwgMjQxLCAyMjAsIDE4LCAxOSwgNzIsIDI0MSwgMTgwLCAxOCwgCi0gICAgMTksIDE5MCwgMTgsIDE5LCAyMjYsIDg5LCAxOCwgMTksIDIyNCwgMTEyLCAxOCwgMTksIDE1OSwgMjI0LCAxMTIsIDE4LCAKLSAgICAxOSwgMjI0LCAxMTAsIDE4LCAxOSwgMTU5LCAyMjQsIDExMCwgMTgsIDE5LCAyMjQsIDEwOSwgMTgsIDE5LCAxNTksIDIyNCwgCi0gICAgMTA5LCAxOCwgMTksIDIyNCwgMTA3LCAxOCwgMTksIDE1OSwgMjI0LCAxMDcsIDE4LCAxOSwgMjI0LCAxMDYsIDE4LCAxOSwgCi0gICAgMTU5LCAyMjQsIDEwNiwgMTgsIDE5LCAyMjQsIDExNCwgMTgsIDE5LCAxNTksIDIyNCwgMTE0LCAxOCwgMTksIDIyNCwgMTEzLCAKLSAgICAxOCwgMTksIDE1OSwgMjI0LCAxMTMsIDE4LCAxOSwgMjExLCAxMTYsIDIyNCwgMTEzLCAxOCwgMTksIDIyNiwgMTA1LCAxOCwgCi0gICAgMTksIDE1OSwgMjI2LCAxMDUsIDE4LCAxOSwgNzIsIDI0MiwgNjAsIDE4LCAxOSwgMjE3LCAyMiwgMTgsIDE5LCAyMTcsIDk5LCAKLSAgICAxOCwgMTksIDIxNiwgMTE3LCAxOCwgMTksIDIxNiwgMTAzLCAxOCwgMTksIDExMSwgMTgsIDE5LCAyMTYsIDE3LCAxOCwgMTksIAotICAgIDIxMSwgMTE2LCAyMTYsIDE3LCAxOCwgMTksIDcyLCAyNDgsIDc3LCAxOCwgMTksIDcyLCAyNDgsIDMsIDE4LCAxOSwgMjE3LCAKLSAgICAxMDUsIDE4LCAxOSwgMjE3LCAxMDEsIDE4LCAxOSwgMjE1LCA3OCwgMTgsIDE5LCAxNTksIDIxNSwgNzgsIDE4LCAxOSwgCi0gICAgMjE1LCA2MiwgMTgsIDE5LCAxNTksIDIxNSwgNjIsIDE4LCAxOSwgMjE1LCA2MSwgMTgsIDE5LCAxNTksIDIxNSwgNjEsIDE4LCAKLSAgICAxOSwgMTA1LCAxOCwgMTksIDE1OSwgMTA1LCAxOCwgMTksIDIxNSwgNTQsIDE4LCAxOSwgMTU5LCAyMTUsIDU0LCAxOCwgMTksIAotICAgIDIxNSwgODAsIDE4LCAxOSwgMTU5LCAyMTUsIDgwLCAxOCwgMTksIDIxNSwgNzksIDE4LCAxOSwgMTU5LCAyMTUsIDc5LCAxOCwgCi0gICAgMTksIDIyOSwgMTkwLCAyMTUsIDc5LCAxOCwgMTksIDIxNywgMTUyLCAxOCwgMTksIDIxNSwgMTUxLCAxOCwgMTksIDIxNSwgCi0gICAgMTM1LCAxOCwgMTksIDIxNSwgMTMzLCAxOCwgMTksIDIxNSwgMTU2LCAxOCwgMTksIDIzNCwgMTgyLCAxOCwgMTksIDIzNSwgCi0gICAgNywgMTgsIDE5LCAyMzQsIDkyLCAxOCwgMTksIDIzNCwgODMsIDE4LCAxOSwgMjM0LCAyOCwgMTgsIDE5LCAyMzQsIDEwLCAKLSAgICAxOCwgMTksIDIxMSwgMTE2LCAyMzQsIDEwLCAxOCwgMTksIDE3NiwgMTgsIDE5LCAyMzUsIDEwLCAxOCwgMTksIDIzMywgCi0gICAgMTc4LCAxOCwgMTksIDE1OSwgMjMzLCAxNzgsIDE4LCAxOSwgMjMzLCAxNzYsIDE4LCAxOSwgMTU5LCAyMzMsIDE3NiwgMTgsIAotICAgIDE5LCAyMzMsIDE3NSwgMTgsIDE5LCAxNTksIDIzMywgMTc1LCAxOCwgMTksIDIzMywgMTc0LCAxOCwgMTksIDE1OSwgMjMzLCAKLSAgICAxNzQsIDE4LCAxOSwgMjMzLCAxNzMsIDE4LCAxOSwgMTU5LCAyMzMsIDE3MywgMTgsIDE5LCAyMzMsIDE4MiwgMTgsIDE5LCAKLSAgICAxNTksIDIzMywgMTgyLCAxOCwgMTksIDIzMywgMTgxLCAxOCwgMTksIDE1OSwgMjMzLCAxODEsIDE4LCAxOSwgMjI5LCAxOTAsIAotICAgIDIzMywgMTgxLCAxOCwgMTksIDIzNSwgMjMsIDE4LCAxOSwgMjMzLCAxODMsIDE4LCAxOSwgMjE5LCAyNywgMjM0LCAxNzYsIAotICAgIDE4LCAxOSwgMjE5LCAyNywgMjM0LCA4NCwgMTgsIDE5LCAyMTksIDI3LCAyMzQsIDIzLCAxOCwgMTksIDIxOSwgMjcsIDIzNCwgCi0gICAgMjQ4LCAxOCwgMTksIDI1MCwgMTkwLCAxOCwgMTksIDI1MSwgMzEsIDE4LCAxOSwgMjUwLCA1MSwgMTgsIDE5LCAyNTAsIDQxLCAKLSAgICAxOCwgMTksIDI0OSwgMjM4LCAxOCwgMTksIDI0OSwgMTc0LCAxOCwgMTksIDIxMSwgMTE2LCAyNDksIDE3NCwgMTgsIDE5LCAKLSAgICAyNTEsIDMzLCAxOCwgMTksIDI1MSwgMzIsIDE4LCAxOSwgMjQ5LCA3OSwgMTgsIDE5LCAxNTksIDI0OSwgNzksIDE4LCAxOSwgCi0gICAgMjQ5LCA3NywgMTgsIDE5LCAxNTksIDI0OSwgNzcsIDE4LCAxOSwgMjQ5LCA3NiwgMTgsIDE5LCAxNTksIDI0OSwgNzYsIDE4LCAKLSAgICAxOSwgMjQ5LCA3NSwgMTgsIDE5LCAxNTksIDI0OSwgNzUsIDE4LCAxOSwgMjQ5LCA3NCwgMTgsIDE5LCAxNTksIDI0OSwgNzQsIAotICAgIDE4LCAxOSwgMjQ5LCA4MSwgMTgsIDE5LCAxNTksIDI0OSwgODEsIDE4LCAxOSwgMjQ5LCA4MCwgMTgsIDE5LCAxNTksIDI0OSwgCi0gICAgODAsIDE4LCAxOSwgMjI5LCAxOTAsIDI0OSwgODAsIDE4LCAxOSwgMjUxLCA2NiwgMTgsIDE5LCAyMjEsIDIwOSwgMjE2LCAKLSAgICAyMTAsIDE4LCAxOSwgMjMxLCA5MSwgMTgsIDE5LCAyMzEsIDIzNiwgMTgsIDE5LCAyMzAsIDIzMCwgMTgsIDE5LCAyMzAsIAotICAgIDIwMSwgMTgsIDE5LCAyMzAsIDE2MSwgMTgsIDE5LCAyMzAsIDEzMiwgMTgsIDE5LCAyMTEsIDExNiwgMjMwLCAxMzIsIDE4LCAKLSAgICAxOSwgMTg0LCAxOCwgMTksIDIzMSwgMjM3LCAxOCwgMTksIDIzMCwgNDAsIDE4LCAxOSwgMTU5LCAyMzAsIDQwLCAxOCwgMTksIAotICAgIDIzMCwgMzgsIDE4LCAxOSwgMTU5LCAyMzAsIDM4LCAxOCwgMTksIDIzMCwgMzcsIDE4LCAxOSwgMTU5LCAyMzAsIDM3LCAxOCwgCi0gICAgMTksIDIzMCwgMzYsIDE4LCAxOSwgMTU5LCAyMzAsIDM2LCAxOCwgMTksIDIzMCwgMzUsIDE4LCAxOSwgMTU5LCAyMzAsIDM1LCAKLSAgICAxOCwgMTksIDIzMCwgNDIsIDE4LCAxOSwgMTU5LCAyMzAsIDQyLCAxOCwgMTksIDIzMCwgNDEsIDE4LCAxOSwgMTU5LCAyMzAsIAotICAgIDQxLCAxOCwgMTksIDIyOSwgMTkwLCAyMzAsIDQxLCAxOCwgMTksIDE5MywgMTgsIDE5LCAxNTksIDE5MywgMTgsIDE5LCAKLSAgICAyMzAsIDIzNCwgMTgsIDE5LCAyNTMsIDIwNSwgMTkzLCAxOCwgMTksIDIyMSwgMjA5LCAxOTMsIDE4LCAxOSwgMjI5LCAxMDcsIAotICAgIDE4LCAxOSwgMjI5LCAyMjQsIDE4LCAxOSwgMjI4LCAyMzMsIDE4LCAxOSwgMjI4LCAyMDgsIDE4LCAxOSwgMjI4LCA3NCwgCi0gICAgMTgsIDE5LCAyMjgsIDY0LCAxOCwgMTksIDIxMSwgMTE2LCAyMjgsIDY0LCAxOCwgMTksIDE5NywgMTgsIDE5LCAyMjksIAotICAgIDIyNSwgMTgsIDE5LCAyMjcsIDE3MiwgMTgsIDE5LCAxNTksIDIyNywgMTcyLCAxOCwgMTksIDIyNywgMTc0LCAxOCwgMTksIAotICAgIDE1OSwgMjI3LCAxNzQsIDE4LCAxOSwgMjI3LCAxNzMsIDE4LCAxOSwgMTU5LCAyMjcsIDE3MywgMTgsIDE5LCAyMjksIDE5MCwgCi0gICAgMjI3LCAxNzMsIDE4LCAxOSwgMjMwLCAyNSwgMTgsIDE5LCA3MiwgMjI5LCA3OSwgMTgsIDE5LCAyMjgsIDIzOCwgMTgsIDE5LCAKLSAgICAyMzMsIDU4LCAxOCwgMTksIDIzMywgMTMzLCAxOCwgMTksIDIzMiwgMjQxLCAxOCwgMTksIDIzMiwgMjI3LCAxOCwgMTksIAotICAgIDIzMiwgMTU2LCAxOCwgMTksIDIzMiwgMTI3LCAxOCwgMTksIDIxMSwgMTE2LCAyMzIsIDEyNywgMTgsIDE5LCAyMzMsIDEzNSwgCi0gICAgMTgsIDE5LCAyMzMsIDEzNCwgMTgsIDE5LCAyMzIsIDY4LCAxOCwgMTksIDE1OSwgMjMyLCA2OCwgMTgsIDE5LCAyMzIsIDY3LCAKLSAgICAxOCwgMTksIDE1OSwgMjMyLCA2NywgMTgsIDE5LCAyMzIsIDY2LCAxOCwgMTksIDE1OSwgMjMyLCA2NiwgMTgsIDE5LCAyMzIsIAotICAgIDY1LCAxOCwgMTksIDE1OSwgMjMyLCA2NSwgMTgsIDE5LCAyMzIsIDY0LCAxOCwgMTksIDE1OSwgMjMyLCA2NCwgMTgsIDE5LCAKLSAgICAyMzIsIDcwLCAxOCwgMTksIDE1OSwgMjMyLCA3MCwgMTgsIDE5LCAyMzIsIDY5LCAxOCwgMTksIDE1OSwgMjMyLCA2OSwgMTgsIAotICAgIDE5LCAxNTYsIDE4LCAxOSwgMTU5LCAxNTYsIDE4LCAxOSwgMTQ3LCAxNTYsIDE4LCAxOSwgMjIxLCAxODEsIDE4LCAxOSwgCi0gICAgMjIyLCAyOSwgMTgsIDE5LCAyMTksIDE5MSwgMTgsIDE5LCAyMTksIDE3NSwgMTgsIDE5LCAyMTksIDU4LCAxOCwgMTksIAotICAgIDIxOSwgNDAsIDE4LCAxOSwgMjExLCAxMTYsIDIxOSwgNDAsIDE4LCAxOSwgMjA2LCAxOCwgMTksIDIyMiwgMzEsIDE4LCAxOSwgCi0gICAgMjE3LCAyNDksIDE4LCAxOSwgMTU5LCAyMTcsIDI0OSwgMTgsIDE5LCAyMTcsIDI0MywgMTgsIDE5LCAxNTksIDIxNywgMjQzLCAKLSAgICAxOCwgMTksIDIxNywgMjQyLCAxOCwgMTksIDE1OSwgMjE3LCAyNDIsIDE4LCAxOSwgMjE3LCAyMzgsIDE4LCAxOSwgMTU5LCAKLSAgICAyMTcsIDIzOCwgMTgsIDE5LCAyMTcsIDIzNywgMTgsIDE5LCAxNTksIDIxNywgMjM3LCAxOCwgMTksIDIxNywgMjUzLCAxOCwgCi0gICAgMTksIDE1OSwgMjE3LCAyNTMsIDE4LCAxOSwgMjE3LCAyNTIsIDE4LCAxOSwgMTU5LCAyMTcsIDI1MiwgMTgsIDE5LCAyMjksIAotICAgIDE5MCwgMjE3LCAyNTIsIDE4LCAxOSwgMjIyLCA5MSwgMTgsIDE5LCAyNTMsIDIwNSwgMjIyLCA5MSwgMTgsIDE5LCAyMTcsIAotICAgIDI1NCwgMTgsIDE5LCAyNTEsIDIxOCwgMjIyLCA5MSwgMTgsIDE5LCAyMzAsIDEyNywgMjE5LCAxMDgsIDE4LCAxOSwgMjI5LCAKLSAgICAxOTAsIDIxOSwgOTksIDE4LCAxOSwgMjI5LCAxOTAsIDIyMiwgODksIDE4LCAxOSwgMjI5LCAxOTAsIDIxOCwgMjM1LCAxOCwgCi0gICAgMTksIDIyOSwgMTkwLCAyMTgsIDg2LCAxOCwgMTksIDIyOSwgMTkwLCAyMTksIDk4LCAxOCwgMTksIDIyOSwgMTkwLCAyMjEsIAotICAgIDE4NCwgMTgsIDE5LCAyMjAsIDYzLCAxOCwgMTksIDIyMCwgMzIsIDE4LCAxOSwgMjIwLCAyNywgMTgsIDE5LCAyMjAsIDcsIAotICAgIDE4LCAxOSwgMjIwLCAxLCAxOCwgMTksIDIyMCwgMTAyLCAxOCwgMTksIDIyMCwgOTgsIDE4LCAxOSwgMjE5LCAyMDYsIDE4LCAKLSAgICAxOSwgMTU5LCAyMTksIDIwNiwgMTgsIDE5LCAyMTksIDIwNSwgMTgsIDE5LCAxNTksIDIxOSwgMjA1LCAxOCwgMTksIDIxOSwgCi0gICAgMjA0LCAxOCwgMTksIDE1OSwgMjE5LCAyMDQsIDE4LCAxOSwgMjE5LCAyMDMsIDE4LCAxOSwgMTU5LCAyMTksIDIwMywgMTgsIAotICAgIDE5LCAyMTksIDIwMiwgMTgsIDE5LCAxNTksIDIxOSwgMjAyLCAxOCwgMTksIDIxOSwgMjA4LCAxOCwgMTksIDE1OSwgMjE5LCAKLSAgICAyMDgsIDE4LCAxOSwgMjE5LCAyMDcsIDE4LCAxOSwgMTU5LCAyMTksIDIwNywgMTgsIDE5LCAyMjAsIDEwNCwgMTgsIDE5LCAKLSAgICAyMTEsIDQ3LCAxOCwgMTksIDIxMSwgMTAxLCAxOCwgMTksIDIxMSwgOCwgMTgsIDE5LCAyMTAsIDI1NSwgMTgsIDE5LCAyMTAsIAotICAgIDI0NCwgMTgsIDE5LCAyMTAsIDIyOSwgMTgsIDE5LCAyMTEsIDExNiwgMjEwLCAyMjksIDE4LCAxOSwgMTkxLCAxOCwgMTksIAotICAgIDIxMSwgMTAzLCAxOCwgMTksIDIxMCwgMTc0LCAxOCwgMTksIDE1OSwgMjEwLCAxNzQsIDE4LCAxOSwgMjEwLCAxNzMsIDE4LCAKLSAgICAxOSwgMTU5LCAyMTAsIDE3MywgMTgsIDE5LCAyMTAsIDE3MiwgMTgsIDE5LCAxNTksIDIxMCwgMTcyLCAxOCwgMTksIDIxMCwgCi0gICAgMTcxLCAxOCwgMTksIDE1OSwgMjEwLCAxNzEsIDE4LCAxOSwgMjEwLCAxNzAsIDE4LCAxOSwgMTU5LCAyMTAsIDE3MCwgMTgsIAotICAgIDE5LCAyMTAsIDE3NiwgMTgsIDE5LCAxNTksIDIxMCwgMTc2LCAxOCwgMTksIDIxMCwgMTc1LCAxOCwgMTksIDE1OSwgMjEwLCAKLSAgICAxNzUsIDE4LCAxOSwgMjI5LCAxOTAsIDIxMCwgMTc1LCAxOCwgMTksIDIxMSwgMTE3LCAxOCwgMTksIDI1MiwgNCwgMjExLCAKLSAgICAxMTcsIDE4LCAxOSwgMTU5LCAyMTEsIDExNywgMTgsIDE5LCAyMjEsIDIwOSwgMjExLCA4LCAxOCwgMTksIDIyMywgMTI4LCAKLSAgICAxOCwgMTksIDIyMywgMjIzLCAyMjMsIDEyOCwgMTgsIDE5LCAxNTksIDIzMywgNTgsIDE4LCAxOSwgMjIzLCAxODMsIDE4LCAKLSAgICAxOSwgMjIzLCAzNSwgMTgsIDE5LCAyMjIsIDIzOSwgMTgsIDE5LCAyMjIsIDIxMSwgMTgsIDE5LCAyMjIsIDE5NywgMTgsIAotICAgIDE5LCAxNTksIDIzMiwgMTU2LCAxOCwgMTksIDIwNSwgMTgsIDE5LCAyMjMsIDE4NCwgMTgsIDE5LCAxNTksIDIzMywgMTM1LCAKLSAgICAxOCwgMTksIDIyMiwgMTA4LCAxOCwgMTksIDE1OSwgMjIyLCAxMDgsIDE4LCAxOSwgMTUzLCAxOCwgMTksIDE1OSwgMTUzLCAKLSAgICAxOCwgMTksIDE0NywgMTUzLCAxOCwgMTksIDI0NCwgMTU0LCAxOCwgMTksIDI0NCwgMTkzLCAxOCwgMTksIDI0NCwgMTIxLCAKLSAgICAxOCwgMTksIDI0NCwgMTA4LCAxOCwgMTksIDI0NCwgNDMsIDE4LCAxOSwgMjQ0LCAzNCwgMTgsIDE5LCAyNDQsIDE5NiwgMTgsIAotICAgIDE5LCAyNDQsIDE5NSwgMTgsIDE5LCAyNDMsIDIxMiwgMTgsIDE5LCAxNTksIDI0MywgMjEyLCAxOCwgMTksIDI0NSwgNiwgCi0gICAgMTgsIDE5LCAyMTYsIDE5NSwgMTgsIDE5LCAyMzAsIDIzLCAyMTYsIDE5NSwgMTgsIDE5LCAyMTYsIDE3NSwgMTgsIDE5LCAKLSAgICAyMzAsIDIzLCAyMTYsIDE3NSwgMTgsIDE5LCAyMTYsIDE3MSwgMTgsIDE5LCAyMzAsIDIzLCAyMTYsIDE3MSwgMTgsIDE5LCAKLSAgICAyMTYsIDE1NiwgMTgsIDE5LCAyMTYsIDE1MywgMTgsIDE5LCAyMTYsIDIwOCwgMTgsIDE5LCAyMTYsIDIwNywgMTgsIDE5LCAKLSAgICAyMTYsIDEyNywgMTgsIDE5LCAxNTksIDIxNiwgMTI3LCAxOCwgMTksIDIxNiwgMjEwLCAxOCwgMTksIDIxNSwgMTQyLCAxOCwgCi0gICAgMTksIDIxNSwgMTQwLCAxOCwgMTksIDIxNSwgMTM5LCAxOCwgMTksIDIxNSwgMTQ0LCAxOCwgMTksIDIxNSwgMTQ1LCAxOCwgCi0gICAgMTksIDIxNSwgNTIsIDE4LCAxOSwgMjE1LCA1MSwgMTgsIDE5LCAyMTUsIDUwLCAxOCwgMTksIDIxNSwgNTMsIDE4LCAxOSwgCi0gICAgMjI3LCAxOTMsIDI0MSwgMjM4LCAxOCwgMTksIDIyNywgMTkzLCAyNDEsIDE4MCwgMTgsIDE5LCAyMjcsIDE5MywgMjQxLCAKLSAgICAxNjEsIDE4LCAxOSwgMjI3LCAxOTMsIDI0MSwgNjgsIDE4LCAxOSwgMjI3LCAxOTMsIDI0MSwgNTMsIDE4LCAxOSwgMjI3LCAKLSAgICAxOTMsIDE2MiwgMTgsIDE5LCAyMjcsIDE5MywgMjQyLCA0NiwgMTgsIDE5LCAyMjcsIDE5MywgMjQyLCA2MCwgMTgsIDE5LCAKLSAgICAyMjcsIDE5MiwgMjQyLCA2MCwgMTgsIDE5LCAyNDEsIDE1NCwgMTgsIDE5LCAyMjQsIDg0LCAxOCwgMTksIDIyNCwgNTMsIAotICAgIDE4LCAxOSwgMjI0LCA0OCwgMTgsIDE5LCAyMjQsIDQyLCAxOCwgMTksIDIyNCwgMzcsIDE4LCAxOSwgMjI0LCA4OCwgMTgsIAotICAgIDE5LCAyMjQsIDg3LCAxOCwgMTksIDIyNCwgOTYsIDE4LCAxOSwgMjE2LCA1NSwgMTgsIDE5LCAyMTYsIDUzLCAxOCwgMTksIAotICAgIDIxNiwgNTIsIDE4LCAxOSwgMjE2LCA1NiwgMTgsIDE5LCAxNTksIDIyMywgMTI4LCAxOCwgMTksIDE1OSwgMjIzLCAzNSwgCi0gICAgMTgsIDE5LCAxNTksIDIyMiwgMjExLCAxOCwgMTksIDE1OSwgMjA1LCAxOCwgMTksIDIyOSwgNzUsIDE4LCAxOSwgMjI5LCAKLSAgICAyNywgMTgsIDE5LCAyMjksIDIzLCAxOCwgMTksIDIyOSwgNCwgMTgsIDE5LCAyMjgsIDI1NSwgMTgsIDE5LCAyMjksIDc3LCAKLSAgICAxOCwgMTksIDIyOSwgNzYsIDE4LCAxOSwgMjI5LCA3OSwgMTgsIDE5LCAyMjgsIDEwMywgMTgsIDE5LCAyMjEsIDIwOSwgCi0gICAgMjIwLCA2MywgMTgsIDE5LCAyMjEsIDIwOSwgMjIwLCAzMiwgMTgsIDE5LCAyMjEsIDIwOSwgMjIwLCA3LCAxOCwgMTksIAotICAgIDIyMSwgMjA5LCAyMjAsIDEwMiwgMTgsIDE5LCAyMTEsIDIxMywgMjE2LCAxOTUsIDE4LCAxOSwgMjExLCAyMTMsIDIxNiwgCi0gICAgMTc1LCAxOCwgMTksIDIxMSwgMjEzLCAyMTYsIDE1NiwgMTgsIDE5LCAyMTEsIDIxMywgMjE2LCAyMDgsIDE4LCAxOSwgMjExLCAKLSAgICAyMTMsIDIxNiwgMjEwLCAxOCwgMTksIDIzMiwgMjQ4LCAxOCwgMTksIDIzMiwgMjQ3LCAxOCwgMTksIDIzMiwgMjQ2LCAxOCwgCi0gICAgMTksIDIzMiwgMjQ1LCAxOCwgMTksIDIzMiwgMjU0LCAxOCwgMTksIDIzMiwgMjUzLCAxOCwgMTksIDIzMiwgMjU1LCAxOCwgCi0gICAgMTksIDIxNiwgMjA5LCAyMTYsIDE5NSwgMTgsIDE5LCAyMTYsIDIwOSwgMjE2LCAxNzUsIDE4LCAxOSwgMjE2LCAyMDksIAotICAgIDIxNiwgMTcxLCAxOCwgMTksIDIxNiwgMjA5LCAyMTYsIDE1NiwgMTgsIDE5LCAyMTYsIDIwOSwgMjE2LCAxNTMsIDE4LCAxOSwgCi0gICAgMjE2LCAyMDksIDIxNiwgMjA4LCAxOCwgMTksIDIxNiwgMjA5LCAyMTYsIDIwNywgMTgsIDE5LCAyMTYsIDIwOSwgMjE2LCAKLSAgICAyMTAsIDE4LCAxOSwgMjU0LCAxODksIDI1MywgMTU4LCAxOCwgMTksIDI1MSwgMjE4LCA3NSwgMTgsIDE5LCAyNTEsIDIxOCwgCi0gICAgNzMsIDE4LCAxOSwgMjUxLCAyMTgsIDc2LCAxOCwgMTksIDI1MSwgMjE4LCA2MSwgMTgsIDE5LCAyNTEsIDIxOCwgMjEyLCAKLSAgICAyMiwgMTgsIDE5LCAyNTEsIDIxOCwgMjExLCAyNTAsIDE4LCAxOSwgMjUxLCAyMTgsIDIxMSwgMjI3LCAxOCwgMTksIDI1MSwgCi0gICAgMjE4LCAyMTIsIDY1LCAxOCwgMTksIDI1MSwgMjE4LCAyMjksIDEwNywgMTgsIDE5LCAyNTEsIDIxOCwgMjI4LCAyMzMsIDE4LCAKLSAgICAxOSwgMjUxLCAyMTgsIDIyOCwgNzQsIDE4LCAxOSwgMjUxLCAyMTgsIDE5NywgMTgsIDE5LCAyNTEsIDIxOCwgMjM0LCAxODIsIAotICAgIDE4LCAxOSwgMjUxLCAyMTgsIDIzNCwgOTIsIDE4LCAxOSwgMjUxLCAyMTgsIDIzNCwgMjgsIDE4LCAxOSwgMjUxLCAyMTgsIAotICAgIDE3NiwgMTgsIDE5LCAyMjEsIDIwOSwgMjQxLCAyMzgsIDE4LCAxOSwgMjIxLCAyMDksIDI0MSwgMTgwLCAxOCwgMTksIDIyMSwgCi0gICAgMjA5LCAyNDEsIDY4LCAxOCwgMTksIDIyMSwgMjA5LCAxNjIsIDE4LCAxOSwgNzIsIDI0MiwgMjIwLCAxOCwgMTksIDcyLCAKLSAgICAyNDIsIDIyNCwgMTgsIDE5LCA3MiwgMjQyLCAyMzYsIDE4LCAxOSwgNzIsIDI0MiwgMjM1LCAxOCwgMTksIDcyLCAyNDIsIAotICAgIDIyNSwgMTgsIDE5LCA3MiwgMjQyLCAyNDksIDE4LCAxOSwgNzIsIDIyMiwgMTQwLCAxOCwgMTksIDcyLCAyMjIsIDIxMSwgCi0gICAgMTgsIDE5LCA3MiwgMjIzLCAxMjgsIDE4LCAxOSwgNzIsIDIyMywgMTA4LCAxOCwgMTksIDcyLCAyMjMsIDM1LCAxOCwgMTksIAotICAgIDcyLCAyMDUsIDE4LCAxOSwgNzIsIDIxMSwgMTk1LCAxOCwgMTksIDcyLCAyMTEsIDIyNywgMTgsIDE5LCA3MiwgMjEyLCAyMiwgCi0gICAgMTgsIDE5LCA3MiwgMjEyLCAxNywgMTgsIDE5LCA3MiwgMjExLCAyNTAsIDE4LCAxOSwgNzIsIDIxMiwgNjUsIDE4LCAxOSwgCi0gICAgNzIsIDI0MCwgMTk0LCAxOCwgMTksIDcyLCAyNDAsIDE5NSwgMTgsIDE5LCA3MiwgMjQwLCAxOTgsIDE4LCAxOSwgNzIsIAotICAgIDI0MCwgMTk3LCAxOCwgMTksIDcyLCAyNDAsIDE5NiwgMTgsIDE5LCA3MiwgMjQwLCAyMDAsIDE4LCAxOSwgNzIsIDIxNiwgCi0gICAgMTM2LCAxOCwgMTksIDcyLCAyMTYsIDE1NiwgMTgsIDE5LCA3MiwgMjE2LCAxOTUsIDE4LCAxOSwgNzIsIDIxNiwgMTk0LCAKLSAgICAxOCwgMTksIDcyLCAyMTYsIDE3NSwgMTgsIDE5LCA3MiwgMjE2LCAyMDgsIDE4LCAxOSwgNzIsIDIxNSwgMTIzLCAxOCwgMTksIAotICAgIDcyLCAyMTUsIDEzMywgMTgsIDE5LCA3MiwgMjE1LCAxNTEsIDE4LCAxOSwgNzIsIDIxNSwgMTUwLCAxOCwgMTksIDcyLCAKLSAgICAyMTUsIDEzNSwgMTgsIDE5LCA3MiwgMjE1LCAxNTYsIDE4LCAxOSwgNzIsIDIyNCwgMTUwLCAxOCwgMTksIDcyLCAyMjUsIAotICAgIDE2LCAxOCwgMTksIDcyLCAyMjUsIDIyMSwgMTgsIDE5LCA3MiwgMjI1LCAyMTEsIDE4LCAxOSwgNzIsIDIyNSwgMTA4LCAxOCwgCi0gICAgMTksIDcyLCAxOTAsIDE4LCAxOSwgNzIsIDIyNiwgMTA1LCAxOCwgMTksIDcyLCAyNDIsIDExMywgMTgsIDE5LCA3MiwgMjQyLCAKLSAgICAxNzQsIDE4LCAxOSwgNzIsIDI0MywgNjIsIDE4LCAxOSwgNzIsIDI0MywgNTUsIDE4LCAxOSwgNzIsIDI0MiwgMjE0LCAxOCwgCi0gICAgMTksIDcyLCAyNDMsIDEzNSwgMTgsIDE5LCA3MiwgMjM0LCAxMDAsIDE4LCAxOSwgNzIsIDIzNCwgMTA1LCAxOCwgMTksIDcyLCAKLSAgICAyMzQsIDExOSwgMTgsIDE5LCA3MiwgMjM0LCAxMTgsIDE4LCAxOSwgNzIsIDIzNCwgMTEyLCAxOCwgMTksIDcyLCAyMzQsIAotICAgIDEzMiwgMTgsIDE5LCA3MiwgMjM0LCA0MSwgMTgsIDE5LCA3MiwgMjM0LCA0MiwgMTgsIDE5LCA3MiwgMjM0LCA0NSwgMTgsIAotICAgIDE5LCA3MiwgMjM0LCA0NCwgMTgsIDE5LCA3MiwgMjM0LCA0MywgMTgsIDE5LCA3MiwgMjM0LCA0NiwgMTgsIDE5LCA3MiwgCi0gICAgMjM0LCA0NywgMTgsIDE5LCA3MiwgMjI3LCAyMzcsIDE4LCAxOSwgNzIsIDIyOCwgNzQsIDE4LCAxOSwgNzIsIDIyOSwgMTA3LCAKLSAgICAxOCwgMTksIDcyLCAyMjksIDEwMywgMTgsIDE5LCA3MiwgMjI4LCAyMzMsIDE4LCAxOSwgNzIsIDE5NywgMTgsIDE5LCA3MiwgCi0gICAgMjMwLCAxMDIsIDE4LCAxOSwgNzIsIDIzMCwgMTYxLCAxOCwgMTksIDcyLCAyMzEsIDkxLCAxOCwgMTksIDcyLCAyMzEsIDgwLCAKLSAgICAxOCwgMTksIDcyLCAyMzAsIDIzMCwgMTgsIDE5LCA3MiwgMTg0LCAxOCwgMTksIDcyLCAyMTAsIDIxMiwgMTgsIDE5LCA3MiwgCi0gICAgMjEwLCAyNDQsIDE4LCAxOSwgNzIsIDIxMSwgNDcsIDE4LCAxOSwgNzIsIDIxMSwgNDQsIDE4LCAxOSwgNzIsIDIxMSwgOCwgCi0gICAgMTgsIDE5LCA3MiwgMTkxLCAxOCwgMTksIDcyLCAyMzUsIDUxLCAxOCwgMTksIDIyMSwgMjA5LCAyMzUsIDUxLCAxOCwgMTksIAotICAgIDcyLCAyMzUsIDY4LCAxOCwgMTksIDcyLCAyMzUsIDEyNiwgMTgsIDE5LCA3MiwgMjM1LCAxMjQsIDE4LCAxOSwgNzIsIDIzNSwgCi0gICAgMTA4LCAxOCwgMTksIDIyMSwgMjA5LCAyMzUsIDEwOCwgMTgsIDE5LCA3MiwgMjM1LCAxNDEsIDE4LCAxOSwgNzIsIDIzNSwgCi0gICAgODEsIDE4LCAxOSwgNzIsIDIzNSwgODUsIDE4LCAxOSwgNzIsIDIzNSwgOTUsIDE4LCAxOSwgNzIsIDIzNSwgOTQsIDE4LCAKLSAgICAxOSwgNzIsIDIzNSwgOTMsIDE4LCAxOSwgNzIsIDIzNSwgOTYsIDE4LCAxOSwgNzIsIDIzMiwgOTgsIDE4LCAxOSwgNzIsIAotICAgIDIzMiwgMTU2LCAxOCwgMTksIDcyLCAyMzMsIDU4LCAxOCwgMTksIDcyLCAyMzMsIDUwLCAxOCwgMTksIDcyLCAyMzIsIDI0MSwgCi0gICAgMTgsIDE5LCA3MiwgMjMzLCAxMzUsIDE4LCAxOSwgNzIsIDI0NywgMTQ5LCAxOCwgMTksIDcyLCAyNDcsIDE1MCwgMTgsIDE5LCAKLSAgICA3MiwgMjQ3LCAxNTUsIDE4LCAxOSwgNzIsIDI0NywgMTU0LCAxOCwgMTksIDcyLCAyNDcsIDE1MSwgMTgsIDE5LCA3MiwgCi0gICAgMjQ3LCAxNTYsIDE4LCAxOSwgNzIsIDIzMiwgMjQ0LCAxOCwgMTksIDcyLCAyMzIsIDI0NiwgMTgsIDE5LCA3MiwgMjMyLCAKLSAgICAyNTAsIDE4LCAxOSwgNzIsIDIzMiwgMjQ5LCAxOCwgMTksIDcyLCAyMzIsIDI0OCwgMTgsIDE5LCA3MiwgMjMyLCAyNTQsIAotICAgIDE4LCAxOSwgNzIsIDIxNiwgNTAsIDE4LCAxOSwgNzIsIDIxNiwgNTIsIDE4LCAxOSwgNzIsIDIxNiwgNTUsIDE4LCAxOSwgCi0gICAgNzIsIDIxNiwgNTQsIDE4LCAxOSwgNzIsIDIxNiwgNTMsIDE4LCAxOSwgNzIsIDIxNiwgNTYsIDE4LCAxOSwgNzIsIDIxNiwgCi0gICAgNDUsIDE4LCAxOSwgNzIsIDIxNiwgNDYsIDE4LCAxOSwgNzIsIDIxNiwgNTgsIDE4LCAxOSwgNzIsIDIxNiwgNTcsIDE4LCAKLSAgICAxOSwgNzIsIDIxNiwgNDcsIDE4LCAxOSwgNzIsIDIxNiwgNTksIDE4LCAxOSwgNzIsIDIxMCwgMTMsIDE4LCAxOSwgNzIsIAotICAgIDIxMCwgMjMsIDE4LCAxOSwgNzIsIDIxMCwgOTQsIDE4LCAxOSwgNzIsIDIxMCwgOTIsIDE4LCAxOSwgNzIsIDIxMCwgNDQsIAotICAgIDE4LCAxOSwgNzIsIDIxMCwgMTE2LCAxOCwgMTksIDcyLCAyMTAsIDE1OSwgMTgsIDE5LCA3MiwgNjUsIDIxMCwgMTU5LCAxOCwgCi0gICAgMTksIDcyLCAyNDYsIDI4LCAxOCwgMTksIDcyLCAyNDYsIDI5LCAxOCwgMTksIDcyLCAyNDYsIDM2LCAxOCwgMTksIDcyLCAKLSAgICAyNDYsIDM1LCAxOCwgMTksIDcyLCAyNDYsIDMxLCAxOCwgMTksIDcyLCAyNDYsIDM4LCAxOCwgMTksIDcyLCAyMTgsIDgzLCAKLSAgICAxOCwgMTksIDcyLCAyMTksIDU4LCAxOCwgMTksIDcyLCAyMjEsIDE4MSwgMTgsIDE5LCA3MiwgMjIxLCAxNzAsIDE4LCAxOSwgCi0gICAgNzIsIDIxOSwgMTkxLCAxOCwgMTksIDcyLCAyMDYsIDE4LCAxOSwgNzIsIDIxOSwgMjI1LCAxOCwgMTksIDcyLCAyMjAsIDcsIAotICAgIDE4LCAxOSwgNzIsIDIyMCwgNjMsIDE4LCAxOSwgNzIsIDIyMCwgNjEsIDE4LCAxOSwgNzIsIDIyMCwgMzIsIDE4LCAxOSwgCi0gICAgNzIsIDIyMCwgMTAyLCAxOCwgMTksIDcyLCAyMjAsIDEwNCwgMTgsIDE5LCA3MiwgMjE1LCAxNjMsIDE4LCAxOSwgNzIsIAotICAgIDIxNSwgMTY2LCAxOCwgMTksIDcyLCAyMTUsIDE3OCwgMTgsIDE5LCA3MiwgMjE1LCAxNzcsIDE4LCAxOSwgNzIsIDIxNSwgCi0gICAgMTY3LCAxOCwgMTksIDcyLCAyMTUsIDE4MywgMTgsIDE5LCA3MiwgMjUwLCA2OSwgMTgsIDE5LCA3MiwgMjUwLCA4NiwgMTgsIAotICAgIDE5LCA3MiwgMjUwLCAxMzEsIDE4LCAxOSwgNzIsIDI1MCwgMTI4LCAxOCwgMTksIDcyLCAyNTAsIDExMCwgMTgsIDE5LCA3MiwgCi0gICAgMjUwLCAxNTcsIDE4LCAxOSwgNzIsIDIxNSwgMTI2LCAxOCwgMTksIDcyLCAyMTUsIDEyNywgMTgsIDE5LCA3MiwgMjE1LCAKLSAgICAxMzAsIDE4LCAxOSwgNzIsIDIxNSwgMTI5LCAxOCwgMTksIDcyLCAyMTUsIDEyOCwgMTgsIDE5LCA3MiwgMjE1LCAxMzEsIAotICAgIDE4LCAxOSwgMjUwLCAxMTEsIDUwLCAxOCwgMTksIDI0MywgMjI5LCAyMTgsIDEyOSwgMTgsIDE5LCAyMjQsIDgwLCAxOCwgCi0gICAgMTksIDIyOSwgNzMsIDE4LCAxOSwgMjI4LCAxMDAsIDE4LCAxOSwgMjI4LCA5OSwgMTgsIDE5LCAyMjgsIDk4LCAxOCwgMTksIAotICAgIDIyOCwgOTcsIDE4LCAxOSwgMjI4LCAxMDIsIDE4LCAxOSwgMjI4LCAxMDEsIDE4LCAxOSwgMjExLCAyMTMsIDIxNiwgMTI1LCAKLSAgICAxOCwgMTksIDIxMSwgMjEzLCAyMTYsIDEyNCwgMTgsIDE5LCAyMTEsIDIxMywgMjE2LCAxMjMsIDE4LCAxOSwgMjExLCAyMTMsIAotICAgIDIxNiwgMTIyLCAxOCwgMTksIDIxMSwgMjEzLCAyMTYsIDEyMSwgMTgsIDE5LCAyMTEsIDIxMywgMjE2LCAxMjgsIDE4LCAxOSwgCi0gICAgMjExLCAyMTMsIDIxNiwgMTI3LCAxOCwgMTksIDIxMSwgMjEzLCA0MCwgMjE2LCAyMTAsIDE4LCAxOSwgMjUxLCAyMTgsIAotICAgIDIxMiwgOTgsIDIyNiwgMjI2LCAyMTksIDE5LCA3OCwgMjI2LCAyMjYsIDEsIDI1MiwgNDgsIDIyNiwgMjI2LCAxLCAyMzIsIAotICAgIDg3LCAyMjYsIDIyNiwgMSwgMjQ0LCAxNTEsIDIyNiwgMjI2LCAxLCAyMjIsIDE1LCAyMjYsIDIyNiwgMSwgMjI4LCAxOTMsIAotICAgIDIyNiwgMjI2LCAxLCAyMTQsIDIyNiwgMjI2LCAyMjYsIDEsIDI0OCwgMTk3LCAyMjYsIDIyNiwgMSwgMjE2LCA4MCwgMjI2LCAKLSAgICAyMjYsIDEsIDI0OSwgMjI5LCAyMjYsIDIyNiwgMSwgMjUwLCAxODAsIDIyNiwgMjI2LCAxLCAyMzAsIDkxLCAyMjYsIDIyNiwgCi0gICAgMSwgMjQyLCAxNTYsIDIyNiwgMjI2LCAxLCAyMjksIDYzLCAyMjYsIDIyNiwgMSwgMjE4LCAxMjIsIDIyNiwgMjI2LCAxLCAKLSAgICAyMjIsIDEzNSwgMjI2LCAyMjYsIDEsIDI1NCwgMTk4LCAyMjYsIDIyNiwgMSwgMjI2LCAxODcsIDIyNiwgMjI2LCAxLCAyMTQsIAotICAgIDE1MCwgMjI2LCAyMjYsIDEsIDI0NSwgMjMxLCAyMjYsIDIyNiwgMSwgMjM1LCAxODgsIDIyNiwgMjI2LCAxLCAyNDUsIDIzMiwgCi0gICAgMjI2LCAyMjYsIDEsIDIyNiwgMTU4LCAyMjYsIDIyNiwgMSwgMjE0LCAyMDYsIDIyNiwgMjI2LCAxLCAyMzYsIDM5LCAyMjYsIAotICAgIDIyNiwgMSwgMjQ1LCAyMjksIDIyNiwgMjI2LCAxLCAyMjUsIDIwMiwgMjI2LCAyMjYsIDI0NCwgMTUwLCA3OCwgMjI2LCAKLSAgICAyMjYsIDIyMywgNDksIDI0NCwgMTUwLCA3OCwgMTc4LCAxLCAyNDQsIDE0MSwgMjQ0LCAxMzMsIDI0NCwgMTU1LCAyNDUsIDYsIAotICAgIDE3OCwgMSwgMjE0LCAxMDUsIDE3OCwgMSwgMjE0LCAxMzUsIDIxNCwgMTUxLCA3MCwgMTc4LCAxLCAyMTAsIDIxNCwgMTc4LCAKLSAgICAxLCAyMTEsIDExNywgMTc4LCAxLCAyMTIsIDk4LCAxNzgsIDEsIDIxNiwgMTMwLCAyMTYsIDEyOSwgMjE2LCAxNTEsIDE3OCwgCi0gICAgMSwgMjQ1LCA1OSwgMTc4LCAxLCAyNTQsIDkzLCA2MSwgMTc4LCAxLCAyMjYsIDE0MywgNzYsIDE3OCwgMSwgMjU1LCAxNywgCi0gICAgNjEsIDE3OCwgMSwgMjU0LCAyMjcsIDE3OCwgMSwgMjMyLCAxMzMsIDc2LCAxNzgsIDEsIDIxOSwgMjQ0LCA3NiwgMTc4LCAxLCAKLSAgICA3NiwgMTc4LCAxLCAyMjYsIDIzNCwgMTc4LCAxLCAyMjYsIDE5NiwgMTc4LCAxLCAyMjMsIDE2NCwgMjIzLCAxNzcsIDIyMywgCi0gICAgOTQsIDE1MywgMTc4LCAxLCAyMzQsIDE5MywgMTc4LCAxLCAyNTAsIDE3NywgMTc4LCAxLCAyMzQsIDE5NCwgMjM1LCAyMywgCi0gICAgMTc4LCAxLCAyNDMsIDIwMiwgMTc4LCAxLCAyNDUsIDEzOCwgMTc4LCAxLCAyNDMsIDU4LCAyNDIsIDY2LCAyNDMsIDIwMiwgCi0gICAgMTc4LCAxLCAyNDMsIDk2LCAxNzgsIDEsIDIxMSwgMTg4LCAyMTEsIDE4MiwgMjEyLCA5OCwgMTc4LCAxLCAyNDIsIDM4LCAKLSAgICAyNDIsIDYwLCAxNzgsIDEsIDI0MiwgNDIsIDI0MiwgNjAsIDE3OCwgMSwgMjMyLCAxMzUsIDI0MiwgNjAsIDE3OCwgMSwgCi0gICAgMjE5LCAyNDcsIDI0MiwgNjAsIDE3OCwgMSwgMjI5LCAxODUsIDIyNywgMTU3LCAyMjksIDE4NiwgMjMwLCAyNSwgMTc4LCAxLCAKLSAgICAyMTksIDI0NSwgMjMwLCAyNSwgMTc4LCAxLCAyNDYsIDExNSwgMTc4LCAxLCAyMzUsIDE2OCwgMjM1LCAxNzIsIDIzNSwgCi0gICAgMTYyLCA3MywgMTc4LCAxLCA3NSwgMTc4LCAxLCAyMzUsIDExNywgMjM1LCAxNDQsIDE3OCwgMSwgMjQzLCA0MywgMTc4LCAxLCAKLSAgICAyMzIsIDEzNiwgMjU0LCAyNDMsIDE3OCwgMSwgMjE5LCAyNDksIDYxLCAxNzgsIDEsIDIzNSwgMTU0LCAyNDUsIDExMywgCi0gICAgMTc4LCAxLCAyMjUsIDE2NCwgMjI1LCAxODYsIDIyNiwgMTA1LCAxNzgsIDEsIDI1NCwgMTYzLCAyNDUsIDExMSwgMTc4LCAxLCAKLSAgICAyMTksIDI0LCAyMjIsIDkxLCAxNzgsIDEsIDIxOSwgMTc5LCAyMzIsIDEzMiwgMjIyLCA5MSwgMTc4LCAxLCAyMTksIDI0MywgCi0gICAgMjIyLCA5MSwgMTc4LCAxLCAyNTEsIDY2LCAxNzgsIDEsIDIxMCwgMTU5LCAxNzgsIDEsIDIxNiwgNjMsIDIxNiwgNzMsIAotICAgIDIxNSwgNDEsIDIxNywgMTUyLCAxNzgsIDEsIDIxOSwgMjQyLCAyMTcsIDE1MiwgMTc4LCAxLCAyNDksIDYwLCAxNzgsIDEsIAotICAgIDI1MiwgMzEsIDI1MiwgMzQsIDI1MSwgMjI0LCAyNTMsIDE1OCwgMTc4LCAxLCAyMTksIDI0OCwgMjUzLCAxNTgsIDE3OCwgMSwgCi0gICAgMjQ2LCAxMTQsIDE3OCwgMSwgMjI2LCAxNzEsIDE3OCwgMSwgMjQ1LCAxOTYsIDI0NSwgMTk4LCA3NSwgMTc4LCAxLCAyMzEsIAotICAgIDE3OCwgMjMxLCAxODYsIDE5MywgMTc4LCAxLCAyMzIsIDEzNCwgMTkzLCAxNzgsIDEsIDIxOSwgMjQ2LCAxOTMsIDE3OCwgMSwgCi0gICAgMjMzLCA3MywgMjMzLCAxMTQsIDIzMiwgMTQzLCAxNTYsIDE3OCwgMSwgMjQ2LCAxMTYsIDE3OCwgMSwgMjM1LCAyMzAsIAotICAgIDE3OCwgMSwgMjM1LCAyMzEsIDE3OCwgMSwgMjQ4LCAyMTAsIDI0OCwgMjE1LCAyNDksIDYwLCAxNzgsIDEsIDIyNiwgMTM4LCAKLSAgICAyNDUsIDU4LCA3NiwgMTc4LCAxLCAyNDUsIDIyNywgMTc4LCAxLCAyMzUsIDE4NywgMTc4LCAxLCAyNDksIDc4LCAxNzgsIDEsIAotICAgIDI1MSwgMTcsIDE3OCwgMSwgMjUwLCAxODksIDE3OCwgMSwgMjE4LCAxNjEsIDE3OCwgMSwgMjMyLCAxMzEsIDE3OCwgMSwgCi0gICAgMjE5LCAyNDEsIDE3OCwgMSwgMjQwLCAxMTAsIDE3OCwgMSwgMjI0LCA5NiwgMTc4LCAxLCAyMTEsIDE3OCwgMTc4LCAyMTksIAotICAgIDE1NSwgMjI0LCAxNDAsIDE3OCwgMjMwLCA4NSwgMjI0LCAxNDAsIDE3OCwgMjQ5LCAxMzEsIDIyNCwgMTQwLCAxNzgsIDI1NCwgCi0gICAgNiwgODcsIDE3OCwgMjE1LCA4MiwgODcsIDE3OCwgMjUyLCA0NiwgODcsIDIxNywgODMsIDEsIDYxLCAyMTcsIDgzLCAxLCAKLSAgICA3MywgMjE3LCA4MywgMSwgNzAsIDIxNywgODMsIDEsIDE3NiwgMjE3LCA4MywgMSwgMjQzLCAxMzUsIDIxNywgODMsIDEsIAotICAgIDIyOSwgNzcsIDIxNywgODMsIDEsIDIxNywgMTA1LCAyMTcsIDgzLCAxLCAyNDgsIDIyMSwgMjE3LCA4MywgMSwgMTk3LCAKLSAgICAyMTcsIDgzLCAxLCAxOTAsIDIxNywgODMsIDEsIDI1MiwgMTkxLCAyMTcsIDgzLCAxLCAxODQsIDIxNywgODMsIDEsIDE5MSwgCi0gICAgMjE3LCA4MywgMSwgMjMzLCAxMzUsIDIxNywgODMsIDEsIDIxMiwgNjUsIDIxNywgODMsIDEsIDIwNiwgMjE3LCA4MywgMSwgCi0gICAgMTYyLCAyMTcsIDgzLCAyNSwgNSwgNzMsIDIxNywgODMsIDI1LCA1LCA3MCwgMjE3LCA4MywgNSwgMjEzLCAxNTIsIDI0MiwgCi0gICAgNywgMSwgNjEsIDI0MiwgNywgMSwgNzMsIDI0MiwgNywgMSwgNzAsIDI0MiwgNywgMSwgMTc2LCAyNDIsIDcsIDEsIDI0MywgCi0gICAgMTM1LCAyNDIsIDcsIDEsIDIyOSwgNzcsIDI0MiwgNywgMSwgMjE3LCAxMDUsIDI0MiwgNywgMSwgMjQ4LCAyMjEsIDI0MiwgCi0gICAgNywgMSwgMTk3LCAyNDIsIDcsIDEsIDE5MCwgMjQyLCA3LCAxLCAyNTIsIDE5MSwgMjQyLCA3LCAxLCAxODQsIDI0MiwgNywgCi0gICAgMSwgMTkxLCAyNDIsIDcsIDEsIDIwNSwgMjQyLCA3LCAxLCAyMzMsIDEzNSwgMjQyLCA3LCAxLCAyMTIsIDY1LCAyNDIsIDcsIAotICAgIDEsIDIwNiwgMjQyLCA3LCAxLCAxNjIsIDI0MiwgNywgMjUsIDUsIDczLCAyNDIsIDcsIDI1LCA1LCA3MCwgMjQyLCA3LCA1LCAKLSAgICAyMjYsIDQ5LCAyMjUsIDEyNiwgMjE5LCAxNTUsIDIyNCwgMTQwLCAyMjUsIDEyNiwgNTIsIDIyNCwgMTQwLCAyNTEsIDEyMCwgCi0gICAgMSwgNjEsIDI1MSwgMTIwLCAxLCA3MywgMjUxLCAxMjAsIDEsIDcwLCAyNTEsIDEyMCwgMSwgMTc2LCAyNTEsIDEyMCwgMSwgCi0gICAgMjQzLCAxMzUsIDI1MSwgMTIwLCAxLCAyMjksIDc3LCAyNTEsIDEyMCwgMSwgMjE3LCAxMDUsIDI1MSwgMTIwLCAxLCAyNDgsIAotICAgIDIyMSwgMjUxLCAxMjAsIDEsIDE5NywgMjUxLCAxMjAsIDEsIDE5MCwgMjUxLCAxMjAsIDEsIDI1MiwgMTkxLCAyNTEsIDEyMCwgCi0gICAgMSwgMTg0LCAyNTEsIDEyMCwgMSwgMTkxLCAyNTEsIDEyMCwgMSwgMjA1LCAyNTEsIDEyMCwgMSwgMjMzLCAxMzUsIDI1MSwgCi0gICAgMTIwLCAxLCAyMTIsIDY1LCAyNTEsIDEyMCwgMSwgMjA2LCAyNTEsIDEyMCwgMSwgMTYyLCAyNTEsIDEyMCwgMjUsIDUsIDczLCAKLSAgICAyNTEsIDEyMCwgMjUsIDUsIDcwLCAyMTcsIDgyLCAxLCA2MSwgMjE3LCA4MiwgMSwgNzMsIDIxNywgODIsIDEsIDcwLCAyMTcsIAotICAgIDgyLCAxLCAxNzYsIDIxNywgODIsIDEsIDI0MywgMTM1LCAyMTcsIDgyLCAxLCAyMjksIDc3LCAyMTcsIDgyLCAxLCAyMTcsIAotICAgIDEwNSwgMjE3LCA4MiwgMSwgMjQ4LCAyMjEsIDIxNywgODIsIDEsIDE5NywgMjE3LCA4MiwgMSwgMTkwLCAyMTcsIDgyLCAxLCAKLSAgICAyNTIsIDE5MSwgMjE3LCA4MiwgMSwgMTg0LCAyMTcsIDgyLCAxLCAxOTEsIDIxNywgODIsIDEsIDIzMywgMTM1LCAyMTcsIAotICAgIDgyLCAxLCAyMTIsIDY1LCAyMTcsIDgyLCAxLCAyMDYsIDIxNywgODIsIDI1LCA1LCA3MywgMjE3LCA4MiwgMjUsIDUsIDcwLCAKLSAgICA2OSwgMSwgMTc2LCA2OSwgMSwgMjM0LCAxMzIsIDY5LCAxLCAyMzQsIDI4LCA2OSwgMSwgMjM0LCAxMDUsIDY5LCAxLCAyMjksIAotICAgIDQsIDY5LCAxLCAyNTEsIDMzLCA2OSwgMSwgMjUwLCAxNTcsIDY5LCAxLCAyNDksIDIzOCwgNjksIDEsIDI1MCwgODYsIDY5LCAKLSAgICAxLCAyMjcsIDEzNCwgNjksIDEsIDI0OCwgMjIxLCA2OSwgMSwgMjE1LCAxNDQsIDY5LCAxLCAyNDcsIDE0NSwgNjksIDEsIAotICAgIDIxNSwgMTM5LCA2OSwgMSwgMjI4LCA4MCwgNjksIDEsIDIxNywgMTA1LCA2OSwgMSwgMjE2LCAyMDgsIDY5LCAxLCAxMTEsIAotICAgIDY5LCAxLCAyMTYsIDE1NiwgNjksIDEsIDIyOCwgNzQsIDY5LCAxLCAyNTIsIDE5MSwgNjksIDEsIDIyNSwgMTQ3LCA2OSwgMSwgCi0gICAgMjI1LCAxNiwgNjksIDEsIDIyNSwgMTIxLCA2OSwgMSwgMjMwLCAxNjEsIDY5LCAxLCAyMTAsIDI0NCwgNjksIDEsIDIyMiwgCi0gICAgMjExLCA2OSwgMSwgMjMyLCAxNTYsIDY5LCAxLCAyMTMsIDEzOCwgNjksIDEsIDIyMCwgMTAyLCA2OSwgMSwgMjE4LCAxODQsIAotICAgIDY5LCAxLCAyMDYsIDY5LCAxLCAxNjIsIDY5LCAxLCAyMzMsIDEzNSwgNjksIDEsIDIyNCwgODgsIDY5LCAyMzUsIDI0MywgCi0gICAgMjUsIDIyNCwgNzQsIDY5LCAyMzUsIDI0MywgMjUsIDIyNCwgODcsIDY5LCAyMzUsIDI0MywgMjUsIDIyNCwgNTMsIDY5LCAKLSAgICAyMzUsIDI0MywgMjUsIDIyNCwgNDgsIDY5LCAyMzUsIDI0MywgMjUsIDIyNCwgMzAsIDY5LCAyMzUsIDI0MywgMjUsIDIyNCwgCi0gICAgMiwgNjksIDIzNSwgMjQzLCAyNSwgMjIzLCAyNDYsIDY5LCAyMzUsIDI0MywgMjUsIDIyMywgMjQ1LCA2OSwgMjM1LCAyNDMsIAotICAgIDI1LCAyMjIsIDEwMCwgNjksIDIzNSwgMjQzLCAyNSwgMjIyLCA5MywgNjksIDIzNSwgMjQzLCAyNSwgMjMyLCA2MiwgNjksIAotICAgIDIzNSwgMjQzLCAyNSwgMjMyLCA1MiwgNjksIDIzNSwgMjQzLCAyNSwgMjI0LCA2OSwgNjksIDIzNSwgMjQzLCAyNSwgMjI0LCAKLSAgICA4MCwgNjksIDIzNSwgMjQzLCAyNSwgMjI0LCAzOCwgMjE1LCA0OSwgMTEwLCA2OSwgMjM1LCAyNDMsIDI1LCAyMjQsIDM4LCAKLSAgICAyMTUsIDQ5LCAxMDUsIDY5LCAyMzUsIDI0MywgMjUsIDIyNCwgNzAsIDY5LCAyNSwgMjM1LCAyMjksIDI1NCwgNDUsIDY5LCAKLSAgICAyNSwgMjM1LCAyMjksIDI1NSwgNzMsIDY5LCAyNSwgNSwgMjU1LCA3MywgNjksIDI1LCA1LCA3MywgNjksIDI1LCA1LCAyMzYsIAotICAgIDMzLCA2OSwgMjUsIDUsIDIxMSwgMTE3LCA2OSwgMjUsIDUsIDIxMCwgMTY5LCA2OSwgMjUsIDUsIDcwLCA2OSwgMjUsIDUsIAotICAgIDIxNCwgMTE4LCA2OSwgMjUsIDUsIDIxNCwgMjI5LCA2OSwgMjUsIDUsIDIyNiwgMjM0LCA2OSwgMjUsIDUsIDE5MSwgNjksIAotICAgIDI1LCA1LCAyMzYsIDYwLCA2OSwgMjUsIDUsIDc1LCA2OSwgMjUsIDUsIDI1NCwgMjQzLCA2OSwgMjUsIDUsIDI1NCwgMjAxLCAKLSAgICA2OSwgMjUsIDUsIDIyNiwgMTgzLCA2OSwgMjUsIDUsIDI1MywgMTkyLCA2OSwgNSwgMjI4LCAyMDYsIDY5LCA1LCAyMjMsIAotICAgIDEyNiwgNjksIDUsIDIxMCwgMTgwLCA2OSwgNSwgMjMwLCA1MiwgNjksIDUsIDIxNSwgMjEzLCA2OSwgNSwgMjUyLCAxNDMsIAotICAgIDY5LCA1LCAyMjIsIDIwNiwgNjksIDUsIDIxNiwgNDAsIDY5LCA1LCAyMzQsIDI0MSwgNjksIDUsIDI1NCwgMjAzLCA2OSwgNSwgCi0gICAgMjIxLCAyNDQsIDIyMSwgMjM4LCA2OSwgNSwgMjEzLCAxNDksIDY5LCA1LCAyNDksIDIzMiwgNjksIDUsIDI1MiwgMTE3LCAKLSAgICA2OSwgNSwgMjM0LCAxMjUsIDY5LCA1LCAyNTIsIDEzNywgNjksIDUsIDI1MSwgOSwgMjI1LCA3MiwgMjMzLCAxODcsIDY5LCAKLSAgICA1LCAyMzMsIDMwLCAyMTYsIDE3LCA2OSwgNSwgMjUyLCAyMCwgNjksIDUsIDIyNSwgMTIzLCAyMzAsIDk5LCA2OSwgNSwgCi0gICAgMjM0LCA5LCA2OSwgMjQ5LCA5OCwgMTYsIDIyMywgMjgsIDY5LCA1LCAyNTMsIDE3NCwgNjksIDUsIDI1MywgMTk1LCA2OSwgCi0gICAgMjEsIDIxMCwgODYsIDY5LCAyMSwgMTEwLCA2OSwgMjEsIDEwNSwgNjksIDIxLCAxNTgsIDY5LCAyMSwgMTYxLCA2OSwgMjEsIAotICAgIDE4OSwgNjksIDIxLCAxOTQsIDY5LCAyMSwgMTk4LCA2OSwgMjEsIDE5NSwgNjksIDIxLCAyMDAsIDY5LCAxNiwgMjMzLCAzMCwgCi0gICAgMjUzLCAxOTcsIDIxOSwgNDMsIDY5LCAxNiwgMjMzLCAzMCwgMjUzLCAxOTcsIDIzMCwgNzEsIDY5LCAxNiwgMjMzLCAzMCwgCi0gICAgMjUzLCAxOTcsIDIyNSwgNzEsIDY5LCAxNiwgMjMzLCAzMCwgMjUzLCAxOTcsIDI1MiwgNDksIDY5LCAxNiwgMjMzLCAzMCwgCi0gICAgMjUzLCAxOTcsIDI1MSwgMTAzLCA2OSwgMTYsIDIzMywgMzAsIDI1MywgMTk3LCAyMjQsIDIxNSwgNjksIDE2LCAyMzMsIDMwLCAKLSAgICAyNTMsIDE5NywgMjI0LCAyMDksIDY5LCAxNiwgMjMzLCAzMCwgMjUzLCAxOTcsIDIyNCwgMjA3LCA2OSwgMTYsIDIzMywgMzAsIAotICAgIDI1MywgMTk3LCAyMjQsIDIxMywgNjksIDE2LCAyMzMsIDMwLCAyNTMsIDE5NywgMjI0LCAyMTEsIDgzLCAyNTEsIDIzNiwgCi0gICAgODMsIDI0NSwgMTYzLCA4MywgMjQ5LCAyMTksIDgzLCAyNDMsIDIyOSwgMjE4LCAxMjksIDgzLCAyNDksIDIyNiwgODMsIAotICAgIDI0NCwgMTEsIDI0NywgMTE4LCA4MywgMjE2LCAzOSwgMjE5LCA1MiwgMjQwLCAxNjgsIDgzLCAyMTksIDE5MCwgMywgMjUxLCAKLSAgICAxNzIsIDIzMSwgMTU0LCA4MywgMjMxLCAxODMsIDI0OSwgMjE5LCA4MywgMjMxLCAxODMsIDI0MywgMjI5LCAyMTgsIDEyOSwgCi0gICAgODMsIDIyOCwgMTkxLCA4MywgMjQzLCAyNTMsIDQ1LCAyMjEsIDE1NywgMTEwLCA4MywgMjQzLCAyNTMsIDQ1LCAyMjEsIAotICAgIDE1NywgMTA1LCA4MywgMjQzLCAyNTMsIDQ1LCAyMjEsIDE1NywgMTU4LCA4MywgMjUsIDIyMCwgMTM3LCA4MywgMjEsIDIxMCwgCi0gICAgODYsIDgzLCAyMSwgMTEwLCA4MywgMjEsIDEwNSwgODMsIDIxLCAxNTgsIDgzLCAyMSwgMTYxLCA4MywgMjEsIDE4OSwgODMsIAotICAgIDIxLCAxOTQsIDgzLCAyMSwgMTk4LCA4MywgMjEsIDE5NSwgODMsIDIxLCAyMDAsIDgzLCAxLCA2MSwgODMsIDEsIDc1LCA4MywgCi0gICAgMSwgNzMsIDgzLCAxLCA3NiwgODMsIDEsIDcwLCA4MywgMSwgMjI2LCAyMzQsIDgzLCAxLCAyMTQsIDIxNCwgODMsIDEsIAotICAgIDI0NSwgMjA5LCA4MywgMSwgMTk3LCA4MywgMSwgMjU0LCAxMTUsIDgzLCAxLCAyNTIsIDE5MSwgODMsIDEsIDE5MCwgODMsIAotICAgIDEsIDIyNCwgODgsIDgzLCAxLCAyNDMsIDEzNSwgODMsIDEsIDE4NCwgODMsIDEsIDIzMywgMTM1LCA4MywgMSwgMjA2LCA4MywgCi0gICAgMSwgMjIwLCAxMDIsIDgzLCAxLCAyMTcsIDEwNSwgODMsIDEsIDI0OCwgMjIxLCA4MywgMSwgMjUwLCAxNTcsIDgzLCAxLCAKLSAgICAyMzUsIDE0MSwgODMsIDEsIDE5MSwgODMsIDEsIDIwNSwgODMsIDEsIDIxMiwgNjUsIDgzLCAxLCAyNDQsIDE5NiwgODMsIDEsIAotICAgIDE3NiwgODMsIDEsIDIzNCwgMTMyLCA4MywgMSwgMjE1LCAxODMsIDgzLCAxLCAyMTAsIDExNiwgODMsIDEsIDI0MiwgNDYsIAotICAgIDgzLCAxLCAyMTAsIDE2LCA4MywgMSwgMjMyLCAyNTQsIDgzLCAxLCAyMTAsIDY5LCA4MywgMSwgMjUwLCAxMTAsIDgzLCAxLCAKLSAgICAyMTYsIDM5LCAxOTksIDI1LCA1MCwgODMsIDEsIDIxNiwgMzksIDc1LCA4MywgMSwgMjE2LCAzOSwgNzMsIDgzLCAxLCAyMTYsIAotICAgIDM5LCA3NiwgODMsIDEsIDIxNiwgMzksIDcwLCA4MywgMSwgMjE2LCAzOSwgMjI2LCAyMzQsIDgzLCAxLCAyMTYsIDM5LCAKLSAgICAyMTQsIDIxNCwgODMsIDEsIDIxNiwgMzksIDI1NCwgMTE1LCA4MywgMSwgMjE2LCAzOSwgMjUyLCAxOTEsIDgzLCAxLCAyMTYsIAotICAgIDM5LCAxOTAsIDgzLCAxLCAyMTYsIDM5LCAyMjQsIDg4LCA4MywgMSwgMjE2LCAzOSwgMjQzLCAxMzUsIDgzLCAxLCAyMTYsIAotICAgIDM5LCAxODQsIDgzLCAxLCAyMTYsIDM5LCAyMTcsIDEwNSwgODMsIDEsIDIxNiwgMzksIDI0OCwgMjIxLCA4MywgMSwgMjE2LCAKLSAgICAzOSwgMjUwLCAxNTcsIDgzLCAxLCAyMTYsIDM5LCAyMzUsIDE0MSwgODMsIDEsIDIxNiwgMzksIDIxNSwgMTgzLCA4MywgMSwgCi0gICAgMjE2LCAzOSwgMTkxLCA4MywgMSwgMjE2LCAzOSwgMjEyLCA2NSwgODMsIDEsIDIxNiwgMzksIDE3NiwgODMsIDEsIDIxNiwgCi0gICAgMzksIDI0MywgMTMyLCA4MywgMSwgMjE2LCAzOSwgMjQyLCA0NiwgODMsIDEsIDIxNiwgMzksIDIzNSwgMTA3LCA4MywgMSwgCi0gICAgMjE2LCAzOSwgMjI4LCAyMzEsIDgzLCAxLCAyMTYsIDM5LCAyNDYsIDM4LCA4MywgMSwgMjE5LCAxOTAsIDc1LCA4MywgMSwgCi0gICAgMjE5LCAxOTAsIDczLCA4MywgMSwgMjE5LCAxOTAsIDIzNSwgMTUyLCA4MywgMSwgMjE5LCAxOTAsIDIxNCwgMjE0LCA4MywgCi0gICAgMSwgMjE5LCAxOTAsIDcwLCA4MywgMSwgMjE5LCAxOTAsIDI1NCwgMTE1LCA4MywgMSwgMjE5LCAxOTAsIDE3NiwgODMsIDEsIAotICAgIDIxOSwgMTkwLCAyNDMsIDEzNSwgODMsIDEsIDIxOSwgMTkwLCAxNjIsIDgzLCAxLCAyMTksIDE5MCwgMTkwLCA4MywgMSwgCi0gICAgMjE5LCAxOTAsIDIyMCwgMTAyLCA4MywgMSwgMjE5LCAxOTAsIDIxNywgMTA1LCA4MywgMSwgMjE5LCAxOTAsIDI0OCwgMjIxLCAKLSAgICA4MywgMSwgMjE5LCAxOTAsIDIzNSwgMTQxLCA4MywgMSwgMjE5LCAxOTAsIDI0NCwgMTk2LCA4MywgMSwgMjE5LCAxOTAsIAotICAgIDI0MywgMTMyLCA4MywgMSwgMjE5LCAxOTAsIDI0MiwgNDYsIDgzLCAxLCAyMTksIDE5MCwgMjE1LCAxODMsIDgzLCAxLCAKLSAgICAyMTksIDE5MCwgMjEwLCAxMTYsIDgzLCAxLCAyMTksIDE5MCwgMjIzLCAxODQsIDgzLCAxLCAyMTksIDE5MCwgMjUwLCAxNTcsIAotICAgIDgzLCAxLCAyMTksIDE5MCwgMjEwLCA4MiwgODMsIDEsIDIzMSwgMTgzLCA3MywgODMsIDEsIDIzMSwgMTgzLCAxNzYsIDgzLCAKLSAgICAxLCAyMzEsIDE4MywgMjA1LCA4MywgMSwgMjMxLCAxODMsIDI0NCwgMTk2LCA4MywgMSwgMjMxLCAxODMsIDIxMCwgODIsIAotICAgIDgzLCAxLCAyNTQsIDE2MiwgMjQzLCAxMTYsIDI1NCwgNzYsIDExMCwgODMsIDEsIDI1NCwgMTYyLCAyNDMsIDExNiwgMjEzLCAKLSAgICAxNDgsIDExMCwgODMsIDEsIDI1NCwgMTYyLCAyNDMsIDExNiwgMjQ4LCAxODYsIDgzLCAxLCAyNTQsIDE2MiwgMjQzLCAxMTYsIAotICAgIDIxNCwgMjI0LCA4MywgMSwgMjU0LCAxNjIsIDI0MywgMTE2LCAyMzUsIDE5MywgMjE0LCAyMjQsIDgzLCAxLCAyNTQsIDE2MiwgCi0gICAgMjQzLCAxMTYsIDI1MiwgMTU1LCA4MywgMSwgMjU0LCAxNjIsIDI0MywgMTE2LCAxMzQsIDI1MiwgMTU1LCA4MywgMSwgMjU0LCAKLSAgICAxNjIsIDI0MywgMTE2LCA2MSwgODMsIDEsIDI1NCwgMTYyLCAyNDMsIDExNiwgNzMsIDgzLCAxLCAyNTQsIDE2MiwgMjQzLCAKLSAgICAxMTYsIDE3NiwgODMsIDEsIDI1NCwgMTYyLCAyNDMsIDExNiwgMjI5LCA3NywgODMsIDEsIDI1NCwgMTYyLCAyNDMsIDExNiwgCi0gICAgMjUxLCAzMywgODMsIDEsIDI1NCwgMTYyLCAyNDMsIDExNiwgMjE1LCAxNTYsIDgzLCAxLCAyNTQsIDE2MiwgMjQzLCAxMTYsIAotICAgIDIxNSwgMTQ0LCA4MywgMSwgMjU0LCAxNjIsIDI0MywgMTE2LCAyNDgsIDEzNSwgODMsIDEsIDI1NCwgMTYyLCAyNDMsIDExNiwgCi0gICAgMjI4LCAxMTAsIDgzLCAxLCAyNTQsIDE2MiwgMjQzLCAxMTYsIDIxNywgMTA1LCA4MywgMSwgMjU0LCAxNjIsIDI0MywgMTE2LCAKLSAgICAyNDgsIDIyMSwgODMsIDEsIDI1NCwgMTYyLCAyNDMsIDExNiwgMTkwLCA4MywgMSwgMjU0LCAxNjIsIDI0MywgMTE2LCAyMjUsIAotICAgIDE0NywgODMsIDEsIDI1NCwgMTYyLCAyNDMsIDExNiwgMjE4LCAyMjMsIDgzLCAxLCAyNTQsIDE2MiwgMjQzLCAxMTYsIDIxMCwgCi0gICAgODIsIDgzLCAxLCAyNTQsIDE2MiwgMjQzLCAxMTYsIDIxMCwgMTE2LCA4MywgMSwgMjU0LCAxNjIsIDI0MywgMTE2LCAyNTQsIAotICAgIDIwOSwgODMsIDEsIDIxNiwgMzksIDI1NCwgMTYyLCAyNDMsIDExNiwgMjE3LCAxMDUsIDgzLCAxLCAyMTYsIDM5LCAyNTQsIAotICAgIDE2MiwgMjQzLCAxMTYsIDIxMCwgODIsIDgzLCAxLCAyMzEsIDE4MywgMjU0LCAxNjIsIDI0MywgMTE2LCAyNDIsIDI0OSwgCi0gICAgODMsIDEsIDIzMSwgMTgzLCAyNTQsIDE2MiwgMjQzLCAxMTYsIDIyOSwgNzcsIDgzLCAxLCAyMzEsIDE4MywgMjU0LCAxNjIsIAotICAgIDI0MywgMTE2LCAyNTEsIDMzLCA4MywgMSwgMjMxLCAxODMsIDI1NCwgMTYyLCAyNDMsIDExNiwgMjM1LCAxMTQsIDgzLCAxLCAKLSAgICAyMzEsIDE4MywgMjU0LCAxNjIsIDI0MywgMTE2LCAyMTUsIDE1NiwgODMsIDEsIDIzMSwgMTgzLCAyNTQsIDE2MiwgMjQzLCAKLSAgICAxMTYsIDI0OCwgMTE5LCA4MywgMSwgMjMxLCAxODMsIDI1NCwgMTYyLCAyNDMsIDExNiwgMjE3LCAxMDUsIDgzLCAxLCAyMzEsIAotICAgIDE4MywgMjU0LCAxNjIsIDI0MywgMTE2LCAyNDgsIDI1LCA4MywgMSwgMjMxLCAxODMsIDI1NCwgMTYyLCAyNDMsIDExNiwgCi0gICAgMjE4LCAyMjMsIDgzLCAxLCAyMzEsIDE4MywgMjU0LCAxNjIsIDI0MywgMTE2LCAyNDksIDcyLCA4MywgMSwgMjMxLCAxODMsIAotICAgIDI1NCwgMTYyLCAyNDMsIDExNiwgMjEwLCA4MiwgODMsIDEsIDIzMSwgMTgzLCAyNTQsIDE2MiwgMjQzLCAxMTYsIDIxMCwgCi0gICAgMTE2LCA4MywgMSwgMjU0LCAxNjIsIDI0MywgMTE2LCAxNjMsIDcwLCA4MywgMSwgMjU0LCAxNjIsIDI0MywgMTE2LCAxNjMsIAotICAgIDE5MSwgODMsIDEsIDIzMSwgMTgzLCAyNTQsIDE2MiwgMjQzLCAxMTYsIDI1MiwgMTgsIDgzLCAxLCAyNTQsIDE2MiwgMjQzLCAKLSAgICAxMTYsIDI0OCwgMjExLCA4MywgMSwgMjMxLCAxODMsIDI1NCwgMTYyLCAyNDMsIDExNiwgMjMyLCAyNTQsIDE4LCAxOSwgCi0gICAgMjI2LCAxMDksIDE4LCAxOSwgMjUzLCAxNjcsIDE4LCAxOSwgMjU1LCAyOCwgMTgsIDE5LCAyMTIsIDI1LCAxOCwgMTksIAotICAgIDIyNCwgMjIxLCAxOCwgMTksIDIyNSwgMjI5LCAxOCwgMTksIDIyNCwgMTA1LCAxOCwgMTksIDIxNywgMzEsIDE4LCAxOSwgCi0gICAgMjM0LCAxODksIDE4LCAxOSwgMjMzLCAxNzksIDE4LCAxOSwgMjMxLCAxMzIsIDE4LCAxOSwgMjI4LCAzNywgMTgsIDE5LCAKLSAgICAyMjksIDE4MSwgMTgsIDE5LCAyMzMsIDY4LCAxOCwgMTksIDIxOSwgMjIsIDE4LCAxOSwgMjIxLCAyMTEsIDE4LCAxOSwgCi0gICAgMjE5LCAyMzIsIDE4LCAxOSwgMjIwLCA2NiwgMTgsIDE5LCAyMTksIDIwMSwgMTgsIDE5LCAyMTAsIDIyMCwgMTgsIDE5LCAKLSAgICAyMTEsIDUyLCAxOCwgMTksIDIyMywgMTM0LCAxOCwgMTksIDIyNywgMTcxLCAxOCwgMTksIDIyNiwgMjE2LCAyMjcsIDE3MSwgCi0gICAgMTgsIDE5LCAyMjcsIDE3MCwgMTgsIDE5LCAyMjYsIDIxNiwgMjI3LCAxNzAsIDE4LCAxOSwgMjI3LCAxNjksIDE4LCAxOSwgCi0gICAgMjI2LCAyMTYsIDIyNywgMTY5LCAxOCwgMTksIDIyNywgMTY4LCAxOCwgMTksIDIyNiwgMjE2LCAyMjcsIDE2OCwgMTgsIDE5LCAKLSAgICAyMjIsIDEwNSwgMTgsIDE5LCAyMjIsIDEwNCwgMTgsIDE5LCAyMjIsIDEwMywgMTgsIDE5LCAyMjIsIDEwMiwgMTgsIDE5LCAKLSAgICAyMjIsIDEwMSwgMTgsIDE5LCAyMjIsIDEwOSwgMTgsIDE5LCAyMjYsIDIxNiwgMjI2LCAxMDUsIDE4LCAxOSwgMjI2LCAyMTYsIAotICAgIDIxNywgMTUyLCAxOCwgMTksIDIyNiwgMjE2LCAyMzUsIDIzLCAxOCwgMTksIDIyNiwgMjE2LCAyNTEsIDY2LCAxOCwgMTksIAotICAgIDIyNiwgMjE2LCAxOTMsIDE4LCAxOSwgMjI2LCAyMTYsIDIzMCwgMjUsIDE4LCAxOSwgMjI2LCAyMTYsIDIyMiwgOTEsIDE4LCAKLSAgICAxOSwgMjI2LCAyMTYsIDIyMCwgMTA0LCAxOCwgMTksIDI0NSwgMjE5LCAyMTIsIDk4LCAxOCwgMTksIDIxMiwgNywgMjEyLCAKLSAgICA5OCwgMTgsIDE5LCA0MCwgNCwgMjIyLCAyMzMsIDE4LCAxOSwgNDAsIDIyMywgMTU3LCAyNDcsIDEyMCwgMTgsIDE5LCAyMjMsIAotICAgIDIyMywgMjIyLCAxMDYsIDE4LCAxOSwgMTU5LCAyMzIsIDEyNywgMTgsIDE5LCAxNTksIDIzMywgMTM0LCAxOCwgMTksIDIxNiwgCi0gICAgMTI2LCAxOCwgMTksIDIxNiwgMTI4LCAxOCwgMTksIDIxNSwgMTM2LCAxOCwgMTksIDIxNSwgMTM4LCAxOCwgMTksIDIxNSwgCi0gICAgMTQzLCAxOCwgMTksIDIxNiwgNDksIDE4LCAxOSwgMjE2LCA1MSwgMTgsIDE5LCAyMjEsIDIwOSwgMjE5LCAyMDYsIDE4LCAKLSAgICAxOSwgMjIxLCAyMDksIDIyMCwgMSwgMTgsIDE5LCAyMjEsIDIwOSwgMjQxLCA1MywgMTgsIDE5LCA3MiwgMjQyLCA3MywgMTgsIAotICAgIDE5LCA3MiwgMjQ4LCA1MiwgMjQzLCA1NSwgMTgsIDE5LCA3MiwgMjQzLCAxMzIsIDE4LCAxOSwgNzIsIDI0MiwgNzgsIDE4LCAKLSAgICAxOSwgMjIxLCAyMDksIDIzNSwgMzMsIDE4LCAxOSwgNzIsIDIzNSwgMzEsIDE4LCAxOSwgMjUyLCA2OCwgMjQ4LCA1MiwgCi0gICAgMTU2LCAxOCwgMTksIDI1MiwgNjgsIDI0OCwgNTIsIDE1MywgMTgsIDE5LCA3MiwgMjQ4LCA0NywgMjIyLCA5MSwgMjMyLCAKLSAgICAyMjMsIDIxMywgMTIyLCAyMzMsIDEwLCAyMzIsIDIyMywgMSwgMTc2LCAyMzIsIDIyMywgMSwgMjM0LCAxMzIsIDIzMiwgCi0gICAgMjIzLCAxLCAyNDMsIDEzNSwgMjMyLCAyMjMsIDEsIDI0MiwgMjQ5LCAyMzIsIDIyMywgMSwgMjI5LCA3NywgMjMyLCAyMjMsIAotICAgIDEsIDI1MSwgMzMsIDIzMiwgMjIzLCAxLCAyNTAsIDE1NywgMjMyLCAyMjMsIDEsIDIzNSwgMTQxLCAyMzIsIDIyMywgMSwgCi0gICAgMjM1LCAxMTQsIDIzMiwgMjIzLCAxLCAyMTEsIDcxLCAyMzIsIDIyMywgMSwgMjE3LCAxMDUsIDIzMiwgMjIzLCAxLCAyMTYsIAotICAgIDIwOCwgMjMyLCAyMjMsIDEsIDI0OCwgMjIxLCAyMzIsIDIyMywgMSwgMjQ4LCAyNSwgMjMyLCAyMjMsIDEsIDE5NywgMjMyLCAKLSAgICAyMjMsIDEsIDE5MCwgMjMyLCAyMjMsIDEsIDIyNSwgMTQ3LCAyMzIsIDIyMywgMSwgMjUyLCAxOTEsIDIzMiwgMjIzLCAxLCAKLSAgICAyNTIsIDE4LCAyMzIsIDIyMywgMSwgMTg0LCAyMzIsIDIyMywgMSwgMTkxLCAyMzIsIDIyMywgMSwgMjA1LCAyMzIsIDIyMywgCi0gICAgMSwgMjMzLCAxMzUsIDIzMiwgMjIzLCAxLCAyMTIsIDY1LCAyMzIsIDIyMywgMSwgMjIwLCAxMDIsIDIzMiwgMjIzLCAxLCAKLSAgICAyMTgsIDIyMywgMjMyLCAyMjMsIDEsIDIwNiwgMjMyLCAyMjMsIDEsIDE2MiwgMjMyLCAyMjMsIDI1LCA1LCA2MSwgMjMyLCAKLSAgICAyMjMsIDI1LCA1LCA3MywgMjMyLCAyMjMsIDI1LCA1LCA3MCwgMjMyLCAyMjMsIDI1LCA1LCAyNDUsIDIwOSwgMjMyLCAyMjMsIAotICAgIDI1LCA1LCAyNTQsIDIwMSwgMjMyLCAyMjMsIDI1LCA1LCAyMjYsIDE4MywgMjMyLCAyMjMsIDI1LCA1LCAyNTMsIDE5MiwgCi0gICAgMjMyLCAyMjMsIDI1LCA1LCA3NSwgMjMyLCAyMjMsIDI1LCA1LCA3NiwgMjMyLCAyMjMsIDIxOCwgNzMsIDEsIDE5MSwgMjMyLCAKLSAgICAyMjMsIDIxOCwgNzMsIDEsIDIwNSwgMjMyLCAyMjMsIDIxOCwgNzMsIDEsIDIxMiwgNjUsIDIzMiwgMjIzLCA0LCAxLCAxNzYsIAotICAgIDIzMiwgMjIzLCA0LCAxLCAyMjksIDc3LCAyMzIsIDIyMywgNCwgMSwgMjU0LCA3NSwgMjMyLCAyMjMsIDQsIDEsIDIxNywgCi0gICAgMTA1LCAyMzIsIDIyMywgNCwgMSwgMTk3LCAyMzIsIDIyMywgNCwgMSwgMTkwLCAyMzIsIDIyMywgNCwgMSwgMTg0LCAyMzIsIAotICAgIDIyMywgNCwgMSwgMjA1LCAyMzIsIDIyMywgNCwgMSwgMjMzLCAxMzUsIDIzMiwgMjIzLCA1LCAyMzAsIDg5LCAyMzIsIDIyMywgCi0gICAgNSwgMjM0LCAxNzEsIDIzMiwgMjIzLCA1LCAyMjIsIDMyLCAyMzIsIDIyMywgNSwgMjMyLCAxMjcsIDIzMiwgMjIzLCAyNDUsIAotICAgIDMxLCA3OCwgMjMyLCAyMjMsIDIyNCwgMTMsIDc4LCAyMzIsIDIyMywgMjEsIDIxMCwgODYsIDIzMiwgMjIzLCAyMSwgMTEwLCAKLSAgICAyMzIsIDIyMywgMjEsIDEwNSwgMjMyLCAyMjMsIDIxLCAxNTgsIDIzMiwgMjIzLCAyMSwgMTYxLCAyMzIsIDIyMywgMjEsIAotICAgIDE4OSwgMjMyLCAyMjMsIDIxLCAxOTQsIDIzMiwgMjIzLCAyMSwgMTk4LCAyMzIsIDIyMywgMjEsIDE5NSwgMjMyLCAyMjMsIAotICAgIDIxLCAyMDAsIDM5LCAyMzMsIDU5LCAxLCAxNzYsIDM5LCAyMzMsIDU5LCAxLCAyMTEsIDE2NSwgMzksIDIzMywgNTksIDEsIAotICAgIDIyOSwgNzcsIDM5LCAyMzMsIDU5LCAxLCAyMTUsIDE4MywgMzksIDIzMywgNTksIDEsIDIwNiwgMzksIDIzMywgNTksIDEsIAotICAgIDE5MSwgMzksIDIzMywgNTksIDEsIDIxNywgMTA1LCAzOSwgMjMzLCA1OSwgMSwgMjE2LCAyMDgsIDM5LCAyMzMsIDU5LCAxLCAKLSAgICAyMzMsIDEzNSwgMzksIDIzMywgNTksIDEsIDE5MCwgMzksIDIzMywgNTksIDEsIDIyNSwgMTQ3LCAzOSwgMjMzLCA1OSwgMSwgCi0gICAgMTg0LCAzOSwgMjMzLCA1OSwgMSwgMjQ0LCAxOTYsIDM5LCAyMzMsIDU5LCAxLCAyMTQsIDI3LCAzOSwgMjMzLCA1OSwgMSwgCi0gICAgMTYyLCAzOSwgMjMzLCA1OSwgMSwgMjI0LCA4OCwgMzksIDIzMywgNTksIDEsIDIzNCwgMTMyLCAzOSwgMjMzLCA1OSwgMSwgCi0gICAgMjE1LCAxNzUsIDM5LCAyMzMsIDU5LCAxLCAxOTcsIDM5LCAyMzMsIDU5LCAxLCA2MSwgMzksIDIzMywgNTksIDEsIDczLCAKLSAgICAzOSwgMjMzLCA1OSwgMSwgMjQ1LCAyMDksIDM5LCAyMzMsIDU5LCAxLCAyNDUsIDE5NywgMzksIDIzMywgNTksIDEsIDcwLCAKLSAgICAzOSwgMjMzLCA1OSwgMSwgMjI2LCAxODMsIDM5LCAyMzMsIDU5LCAxLCA3NiwgMzksIDIzMywgNTksIDEsIDIxNCwgMjE0LCAKLSAgICAzOSwgMjMzLCA1OSwgMSwgNzUsIDM5LCAyMzMsIDU5LCAxLCAyNTMsIDE5MCwgMzksIDIzMywgNTksIDEsIDI1NCwgMjAxLCAKLSAgICAzOSwgMjMzLCA1OSwgMSwgMjE2LCAyOCwgMzksIDIzMywgNTksIDEsIDIxNiwgMjcsIDM5LCAyMzMsIDU5LCAxLCAyMTYsIAotICAgIDI2LCAzOSwgMjMzLCA1OSwgMSwgMjE2LCAyNSwgMzksIDIzMywgNTksIDEsIDIxNiwgMjQsIDE2NiwgMzksIDE3MywgMSwgCi0gICAgMTI1LCAyMjQsIDg4LCAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgMjI0LCA4OCwgMTY2LCAzOSwgMTczLCAxLCAxMjUsIDE3NiwgCi0gICAgMTY2LCAzOSwgMTczLCAxLCAxMjUsIDIxMSwgMTY1LCAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgMjI5LCA3NywgMTY2LCAzOSwgCi0gICAgMTczLCAxLCAxMjEsIDE3NiwgMTY2LCAzOSwgMTczLCAxLCAxMjEsIDIxMSwgMTY1LCAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgCi0gICAgMjI5LCA3NywgMTY2LCAzOSwgMTczLCAxLCAxMjUsIDIxNSwgMTgzLCAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgMjA2LCAxNjYsIAotICAgIDM5LCAxNzMsIDEsIDEyNSwgMTkxLCAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgMjE1LCAxODMsIDE2NiwgMzksIDE3MywgMSwgCi0gICAgMTIxLCAyMDYsIDE2NiwgMzksIDE3MywgMSwgMTIxLCAxOTEsIDE2NiwgMzksIDE3MywgMSwgMTI1LCAyMTcsIDEwNSwgMTY2LCAKLSAgICAzOSwgMTczLCAxLCAxMjUsIDIxNiwgMjA4LCAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgMTk3LCAxNjYsIDM5LCAxNzMsIDEsIAotICAgIDEyMSwgMjE3LCAxMDUsIDE2NiwgMzksIDE3MywgMSwgMTIxLCAyMTYsIDIwOCwgMTY2LCAzOSwgMTczLCAxLCAxMjEsIDE5NywgCi0gICAgMTY2LCAzOSwgMTczLCAxLCAxMjUsIDE5MCwgMTY2LCAzOSwgMTczLCAxLCAxMjUsIDIyNSwgMTQ3LCAxNjYsIDM5LCAxNzMsIAotICAgIDEsIDEyNSwgMTg0LCAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgMTkwLCAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgMjI1LCAxNDcsIAotICAgIDE2NiwgMzksIDE3MywgMSwgMTIxLCAxODQsIDE2NiwgMzksIDE3MywgMSwgMTI1LCAyNDQsIDE5NiwgMTY2LCAzOSwgMTczLCAKLSAgICAxLCAxMjUsIDIxNCwgMjcsIDE2NiwgMzksIDE3MywgMSwgMTI1LCAyMzMsIDEzNSwgMTY2LCAzOSwgMTczLCAxLCAxMjEsIAotICAgIDI0NCwgMTk2LCAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgMjE0LCAyNywgMTY2LCAzOSwgMTczLCAxLCAxMjEsIDIzMywgMTM1LCAKLSAgICAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgMTYyLCAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgMjQ4LCAyMjEsIDE2NiwgMzksIDE3MywgCi0gICAgMSwgMTI1LCAyNTIsIDE5MSwgMTY2LCAzOSwgMTczLCAxLCAxMjEsIDE2MiwgMTY2LCAzOSwgMTczLCAxLCAxMjEsIDI0OCwgCi0gICAgMjIxLCAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgMjUyLCAxOTEsIDE2NiwgMzksIDE3MywgMSwgMTI1LCAyMzMsIDE4NCwgMTY2LCAKLSAgICAzOSwgMTczLCAxLCAxMjUsIDIxMSwgMTM4LCAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgMjMzLCAxODQsIDE2NiwgMzksIDE3MywgCi0gICAgMSwgMTIxLCAyMTEsIDEzOCwgMTY2LCAzOSwgMTczLCAxLCAxMjUsIDIxOCwgODIsIDE2NiwgMzksIDE3MywgMSwgMTIxLCAKLSAgICAyMTgsIDgyLCAxNjYsIDM5LCAxNzMsIDI1LCA1LCAyNSwgMjE5LCAyMzksIDE2NiwgMzksIDE3MywgMjUsIDUsIDI1NSwgNzMsIAotICAgIDE2NiwgMzksIDE3MywgMjUsIDUsIDIzNiwgMzMsIDE2NiwgMzksIDE3MywgMjUsIDUsIDcwLCAxNjYsIDM5LCAxNzMsIDI1LCAKLSAgICA1LCAyMTQsIDExOCwgMTY2LCAzOSwgMTczLCAyNSwgNSwgNzUsIDE2NiwgMzksIDE3MywgMjUsIDUsIDI1NCwgMjQzLCAxNjYsIAotICAgIDM5LCAxNzMsIDI1LCA1LCA3NiwgMTY2LCAzOSwgMTczLCAyNSwgNSwgMjI3LCAwLCAxNjYsIDM5LCAxNzMsIDI1LCA1LCAKLSAgICAyMTQsIDIxNCwgMTY2LCAzOSwgMTczLCAyNSwgNSwgMjUzLCAxNjcsIDE2NiwgMzksIDE3MywgMjUsIDUsIDI1NSwgMjgsIAotICAgIDE2NiwgMzksIDE3MywgMjUsIDUsIDIxNCwgMTExLCAxNjYsIDM5LCAxNzMsIDI1LCA1LCAyMjYsIDEwOSwgMTY2LCAzOSwgCi0gICAgMTczLCAyNSwgNSwgMjI2LCAyNTMsIDE2NiwgMzksIDE3MywgMjUsIDUsIDIxNCwgMjEwLCAxNjYsIDM5LCAxNzMsIDI1LCA1LCAKLSAgICAyMzUsIDE1MiwgMTY2LCAzOSwgMTczLCAxLCA0MCwgMjE0LCAxMDUsIDE2NiwgMzksIDE3MywgMSwgNDAsIDIyOSwgNzksIAotICAgIDE2NiwgMzksIDE3MywgMSwgNDAsIDIzMCwgMjUsIDE2NiwgMzksIDE3MywgMSwgNDAsIDE5MywgMTY2LCAzOSwgMTczLCAxLCAKLSAgICA0MCwgMjM1LCAyMywgMTY2LCAzOSwgMTczLCAxLCA0MCwgMjQ5LCA2MCwgMTY2LCAzOSwgMTczLCAxLCA0MCwgMjUzLCAxNTgsIAotICAgIDE2NiwgMzksIDE3MywgMTM4LCAyMzEsIDE1OCwgMTY2LCAzOSwgMTczLCAxMzgsIDIzMSwgMTU3LCAxNjYsIDM5LCAxNzMsIAotICAgIDIxLCAyMTAsIDg2LCAxNjYsIDM5LCAxNzMsIDIxLCAxMTAsIDE2NiwgMzksIDE3MywgMjEsIDEwNSwgMTY2LCAzOSwgMTczLCAKLSAgICAyMSwgMTU4LCAxNjYsIDM5LCAxNzMsIDIxLCAxNjEsIDE2NiwgMzksIDE3MywgMjEsIDE4OSwgMTY2LCAzOSwgMTczLCAyMSwgCi0gICAgMTk0LCAxNjYsIDM5LCAxNzMsIDIxLCAxOTgsIDE2NiwgMzksIDE3MywgMjEsIDE5NSwgMTY2LCAzOSwgMTczLCAyMSwgMjAwLCAKLSAgICAxNjYsIDM5LCAxNzMsIDg5LCAyMSwgMTEwLCAxNjYsIDM5LCAxNzMsIDUsIDIzMywgMTIwLCAxNjYsIDM5LCAxNzMsIDUsIAotICAgIDIzMywgMTE5LCA2OSwgMTYsIDIyNSwgMjM2LCA2OSwgMTYsIDIzMCwgNzIsIDIzNCwgMjUsIDY5LCAxNiwgMjI1LCA3MiwgCi0gICAgMjM0LCAyNSwgNjksIDE2LCAyNTIsIDUwLCAyMzQsIDI1LCA2OSwgMTYsIDI1MSwgMTA0LCAyMzQsIDI1LCA2OSwgMTYsIAotICAgIDIyNCwgMjE2LCAyMzQsIDI1LCA2OSwgMTYsIDIyNCwgMjEwLCAyMzQsIDI1LCA2OSwgMTYsIDIyNCwgMjA4LCAyMzQsIDI1LCAKLSAgICA2OSwgMTYsIDIyNCwgMjE0LCAyMzQsIDI1LCA2OSwgMTYsIDIyNCwgMjEyLCAyMzQsIDI1LCA2OSwgMTYsIDI0OCwgMTczLCAKLSAgICAyMzQsIDI1LCA2OSwgMTYsIDI0OCwgMTY5LCAyMzQsIDI1LCA2OSwgMTYsIDI0OCwgMTY4LCAyMzQsIDI1LCA2OSwgMTYsIAotICAgIDI0OCwgMTcxLCAyMzQsIDI1LCA2OSwgMTYsIDI0OCwgMTcwLCAyMzQsIDI1LCA2OSwgMTYsIDI0OCwgMTY3LCAyMzQsIDI1LCAKLSAgICA2OSwgMTYsIDIxNSwgODcsIDY5LCAxNiwgMjMwLCA3MiwgMjIyLCAyMDUsIDY5LCAxNiwgMjI1LCA3MiwgMjIyLCAyMDUsIAotICAgIDY5LCAxNiwgMjUyLCA1MCwgMjIyLCAyMDUsIDY5LCAxNiwgMjUxLCAxMDQsIDIyMiwgMjA1LCA2OSwgMTYsIDIyNCwgMjE2LCAKLSAgICAyMjIsIDIwNSwgNjksIDE2LCAyMjQsIDIxMCwgMjIyLCAyMDUsIDY5LCAxNiwgMjI0LCAyMDgsIDIyMiwgMjA1LCA2OSwgMTYsIAotICAgIDIyNCwgMjE0LCAyMjIsIDIwNSwgNjksIDE2LCAyMjQsIDIxMiwgMjIyLCAyMDUsIDY5LCAxNiwgMjQ4LCAxNzMsIDIyMiwgCi0gICAgMjA1LCA2OSwgMTYsIDI0OCwgMTY5LCAyMjIsIDIwNSwgNjksIDE2LCAyNDgsIDE2OCwgMjIyLCAyMDUsIDY5LCAxNiwgMjQ4LCAKLSAgICAxNzEsIDIyMiwgMjA1LCA2OSwgMTYsIDI0OCwgMTcwLCAyMjIsIDIwNSwgNjksIDE2LCAyNDgsIDE2NywgMjIyLCAyMDUsIAotICAgIDI1MSwgMTIxLCAxLCAxNzYsIDI1MSwgMTIxLCAxLCAyNDMsIDEzNSwgMjUxLCAxMjEsIDEsIDIyOSwgNzcsIDI1MSwgMTIxLCAKLSAgICAxLCAyMjksIDIyLCAyNTEsIDEyMSwgMSwgMTkwLCAyNTEsIDEyMSwgMSwgMjUyLCAxOTEsIDI1MSwgMTIxLCAxLCAxODQsIAotICAgIDI1MSwgMTIxLCAxLCAyMzAsIDEwNSwgMjUxLCAxMjEsIDEsIDIxNywgMTA1LCAyNTEsIDEyMSwgMSwgMjQ4LCAyMjEsIDI1MSwgCi0gICAgMTIxLCAxLCAxOTcsIDI1MSwgMTIxLCAxLCAyMjgsIDM2LCAyNTEsIDEyMSwgMSwgMjUxLCAzMywgMjUxLCAxMjEsIDEsIAotICAgIDIzNSwgMTQxLCAyNTEsIDEyMSwgMSwgMjI3LCAxNjUsIDI1MSwgMTIxLCAxLCAyMjcsIDE1OCwgMjUxLCAxMjEsIDEsIDE5MSwgCi0gICAgMjUxLCAxMjEsIDEsIDIwNSwgMjUxLCAxMjEsIDEsIDIzMywgMTM1LCAyNTEsIDEyMSwgMSwgMjE0LCAyNywgMjUxLCAxMjEsIAotICAgIDEsIDIwNiwgMjUxLCAxMjEsIDEsIDYxLCAyNTEsIDEyMSwgMSwgMTYyLCAyNTEsIDEyMSwgMjUsIDUsIDczLCAyNTEsIDEyMSwgCi0gICAgMjUsIDUsIDcwLCAyNTEsIDEyMSwgMjUsIDUsIDc1LCAyNTEsIDEyMSwgMjUsIDUsIDc2LCAyNTEsIDEyMSwgMjUsIDUsIAotICAgIDI1NCwgMjQzLCAyNTEsIDEyMSwgMjI2LCA2MCwgMjUxLCAxMjEsIDI0NSwgMTQzLCA2NCwgMjIxLCAxNzIsIDM5LCA4OSwgMSwgCi0gICAgMTI1LCAxNzYsIDM5LCA4OSwgMSwgMTI1LCAyMzQsIDEzMiwgMzksIDg5LCAxLCAxMjUsIDIzMywgMTcxLCAzOSwgODksIDEsIAotICAgIDEyMSwgMTc2LCAzOSwgODksIDEsIDEyMSwgMjMzLCAxNzEsIDM5LCA4OSwgMSwgMTIxLCAyMzQsIDEzMiwgMzksIDg5LCAxLCAKLSAgICAyMjksIDc3LCAzOSwgODksIDEsIDEyNSwgMjUxLCAzMywgMzksIDg5LCAxLCAxMjUsIDI1MCwgMTU3LCAzOSwgODksIDEsIAotICAgIDEyMSwgMjUxLCAzMywgMzksIDg5LCAxLCAxMjEsIDIwNiwgMzksIDg5LCAxLCAxMjEsIDI1MCwgMTU3LCAzOSwgODksIDEsIAotICAgIDIyNywgMTY1LCAzOSwgODksIDEsIDIyMywgMTQwLCAzOSwgODksIDEsIDEyNSwgMjIzLCAxMzgsIDM5LCA4OSwgMSwgMjQ4LCAKLSAgICAyMjEsIDM5LCA4OSwgMSwgMTIxLCAyMjMsIDEzOCwgMzksIDg5LCAxLCAyMjMsIDE0OSwgMzksIDg5LCAxLCAxMjUsIDIxNywgCi0gICAgMTA1LCAzOSwgODksIDEsIDEyNSwgMjE2LCAyMDgsIDM5LCA4OSwgMSwgMTIxLCAyMTcsIDEwNSwgMzksIDg5LCAxLCAxMjEsIAotICAgIDIxNiwgMjA4LCAzOSwgODksIDEsIDE5NywgMzksIDg5LCAxLCAyNTIsIDE5MSwgMzksIDg5LCAxLCAxMjUsIDE5MCwgMzksIAotICAgIDg5LCAxLCAxMjUsIDIyNSwgMTQ3LCAzOSwgODksIDEsIDEyNSwgMjQ0LCAxOTYsIDM5LCA4OSwgMSwgMTIxLCAxOTAsIDM5LCAKLSAgICA4OSwgMSwgMTIxLCAyNDQsIDE5NiwgMzksIDg5LCAxLCAxMjEsIDIyNSwgMTQ3LCAzOSwgODksIDEsIDE4NCwgMzksIDg5LCAKLSAgICAxLCAxMjEsIDE5MSwgMzksIDg5LCAxLCAxMjUsIDE5MSwgMzksIDg5LCAxLCAyMDUsIDM5LCA4OSwgMSwgMjIyLCAxMzcsIAotICAgIDM5LCA4OSwgMSwgMjMzLCAxMzUsIDM5LCA4OSwgMSwgMjMyLCA5MywgMzksIDg5LCAxLCAyMTIsIDY1LCAzOSwgODksIDEsIAotICAgIDEyNSwgMjIwLCAxMDIsIDM5LCA4OSwgMSwgMTI1LCAyMTgsIDIyMywgMzksIDg5LCAxLCAxMjUsIDIwNiwgMzksIDg5LCAxLCAKLSAgICAxMjUsIDE2MiwgMzksIDg5LCAxLCAyMzIsIDE4NCwgMzksIDg5LCAxLCA2MSwgMzksIDg5LCAxLCAxMjEsIDE2MiwgMzksIAotICAgIDg5LCAxLCA3MywgMzksIDg5LCAxLCAyMzYsIDMzLCAzOSwgODksIDEsIDcwLCAzOSwgODksIDEsIDIxNCwgMTE4LCAzOSwgCi0gICAgODksIDEsIDI0NSwgMjA5LCAzOSwgODksIDEsIDIyNiwgMTgzLCAzOSwgODksIDEsIDIzMywgMTIwLCAzOSwgODksIDEsIAotICAgIDI0MiwgMTMyLCAyMDYsIDM5LCA4OSwgMTE2LCA1LCAxNDcsIDIwNSwgMzksIDg5LCAxMTYsIDUsIDE0NywgMjMzLCAxMzUsIAotICAgIDM5LCA4OSwgMTE2LCA1LCAyMzMsIDEzNiwgMjE3LCA1OCwgMjMzLCAxMDksIDM5LCA4OSwgNSwgMjMxLCAyMDQsIDIzNCwgCi0gICAgMjMxLCAyMzMsIDEwOSwgMzksIDg5LCAxMTYsIDUsIDQwLCAyMjksIDc3LCAzOSwgODksIDExNiwgNSwgMTIxLCAxOTAsIDM5LCAKLSAgICA4OSwgMTE2LCA1LCAxMjUsIDIyMywgMTM5LCAxNzcsIDEyMSwgMTkwLCAzOSwgODksIDExNiwgNSwgMTg0LCAzOSwgODksIAotICAgIDExNiwgNSwgMjUyLCAxOTEsIDM5LCA4OSwgMTE2LCA1LCAyMDYsIDM5LCA4OSwgNSwgMjIyLCAxMCwgMzksIDg5LCAyNSwgNSwgCi0gICAgNjEsIDM5LCA4OSwgMjUsIDUsIDIzMSwgMjA0LCAyMjEsIDIyNiwgMzksIDg5LCAyNSwgNSwgMjU1LCA3MywgMzksIDg5LCAKLSAgICAyNSwgNSwgMjE3LCA2NCwgMjU1LCA3MywgMzksIDg5LCAyNSwgNSwgNzMsIDM5LCA4OSwgMjUsIDUsIDIzNiwgMzMsIDM5LCAKLSAgICA4OSwgMjUsIDUsIDIxNCwgMjE0LCAzOSwgODksIDI1LCA1LCAyMTQsIDExNywgMzksIDg5LCAyNSwgNSwgNzAsIDM5LCA4OSwgCi0gICAgMjUsIDUsIDIxNCwgMTE4LCAzOSwgODksIDI1LCA1LCA3NiwgMzksIDg5LCAyNSwgNSwgMjI3LCAxLCA1MSwgMzksIDg5LCAKLSAgICAyNSwgNSwgMjI2LCAxMDksIDM5LCA4OSwgMjUsIDUsIDc1LCAzOSwgODksIDI1LCA1LCAyNTQsIDI0MywgMzksIDg5LCAyNSwgCi0gICAgNSwgMjI2LCAxODMsIDM5LCA4OSwgMjUsIDUsIDI1NCwgMjAxLCAzOSwgODksIDI1LCA1LCA4OSwgMjU0LCAyMDEsIDM5LCAKLSAgICA4OSwgMjUsIDUsIDIyNywgMSwgNDgsIDM5LCA4OSwgNSwgMjMxLCAyMDQsIDIzNCwgMjMwLCAzOSwgODksIDUsIDIxNiwgMjksIAotICAgIDM5LCA4OSwgNSwgMjE2LCAyOCwgMzksIDg5LCA1LCAyMzQsIDk3LCAyMTYsIDI3LCAzOSwgODksIDUsIDIzNCwgOTcsIDIxNiwgCi0gICAgMjYsIDM5LCA4OSwgNSwgMjM0LCA5NywgMjE2LCAyNSwgMzksIDg5LCA1LCAyMjMsIDE4OCwgMjQyLCA0NSwgMzksIDg5LCA1LCAKLSAgICAyMzEsIDIwNCwgMjIxLCAyNTMsIDM5LCA4OSwgNSwgMjM0LCA5NiwgMjM0LCAyMTUsIDM5LCA4OSwgMzgsIDI0OSwgMTE1LCAKLSAgICAyNDcsIDEyMCwgMzksIDg5LCAyNDEsIDQ2LCAyMSwgMjEwLCA4NiwgMzksIDg5LCAyNDEsIDQ2LCAyMSwgMTEwLCAzOSwgODksIAotICAgIDI0MSwgNDYsIDIxLCAxMDUsIDM5LCA4OSwgMjQxLCA0NiwgMjEsIDE1OCwgMzksIDg5LCAyNDEsIDQ2LCAyMSwgMTYxLCAzOSwgCi0gICAgODksIDI0MSwgNDYsIDIxLCAxODksIDM5LCA4OSwgMjQxLCA0NiwgMjEsIDE5NCwgMzksIDg5LCAyNDEsIDQ2LCAyMSwgMTk4LCAKLSAgICAzOSwgODksIDI0MSwgNDYsIDIxLCAxOTUsIDM5LCA4OSwgMjQxLCA0NiwgMjEsIDIwMCwgMzksIDg5LCA4OSwgMjEsIDIxMCwgCi0gICAgODYsIDM5LCA4OSwgODksIDIxLCAxMTAsIDM5LCA4OSwgODksIDIxLCAxMDUsIDM5LCA4OSwgODksIDIxLCAxNTgsIDM5LCAKLSAgICA4OSwgODksIDIxLCAxNjEsIDM5LCA4OSwgODksIDIxLCAxODksIDM5LCA4OSwgODksIDIxLCAxOTQsIDM5LCA4OSwgODksIAotICAgIDIxLCAxOTgsIDM5LCA4OSwgODksIDIxLCAxOTUsIDM5LCA4OSwgODksIDIxLCAyMDAsIDM5LCA4OSwgNSwgMjExLCAyNDksIAotICAgIDM5LCA4OSwgNSwgMjExLCAyNDgsIDM5LCA4OSwgNSwgMjIxLCAyMTUsIDM5LCA4OSwgNSwgMjM0LCAxNjAsIDM5LCA4OSwgNSwgCi0gICAgMjQwLCAyMzIsIDM5LCA4OSwgNSwgMjQ3LCAxMzQsIDM5LCA4OSwgNSwgMjIzLCA0OSwgMjIyLCAxODcsIDIyMywgMTQ5LCAKLSAgICAzOSwgODksIDUsIDIzMSwgMjA0LCAyMTEsIDcyLCAzOSwgODksIDUsIDIzNSwgNiwgMzksIDg5LCA1LCAyMzUsIDUsIDM5LCAKLSAgICA4OSwgNSwgMjIxLCAyMjIsIDM5LCA4OSwgNSwgMjIxLCAyMjEsIDM5LCA4OSwgNSwgMjQyLCA5LCAzOSwgODksIDUsIDI1MSwgCi0gICAgMzAsIDEwMiwgNSwgMjE0LCAyMDAsIDIyMywgMzAsIDEwMiwgNSwgMjE0LCAyMDAsIDI1MSwgMSwgMTAyLCA1LCAyNTAsIAotICAgIDE4NiwgMTAyLCA1LCAyMTgsIDE1LCAxMDIsIDUsIDI1MSwgMjMzLCAxMDIsIDEsIDI1NCwgMTg0LCAxMDIsIDEsIDI1NCwgCi0gICAgMTg1LCAyMTcsIDEzLCAxMDIsIDEsIDIzNiwgMjksIDEwMiwgMSwgMjM2LCAzMCwgMjE3LCAxMywgMTAyLCAxLCAyMTQsIAotICAgIDIwMywgMTAyLCAxLCAyMTQsIDIwNCwgMjE3LCAxMywgMTAyLCAxLCAyMjMsIDE4OCwgMjIzLCA3OSwgMTAyLCAxLCAyMjMsIAotICAgIDE4OCwgMjIzLCA4MCwgMjE3LCAxMywgMTAyLCAxLCAyMzMsIDEzNiwgMjMzLCAyNCwgMTAyLCAxLCAyMzMsIDEzNiwgMjMzLCAKLSAgICAyNSwgMjE3LCAxMywgMTAyLCAxLCAyNDUsIDE3OSwgMTAyLCAxLCAyNTQsIDE5OSwgMTAyLCAxLCAyMjYsIDIxMiwgMTAyLCAKLSAgICAxLCAyMjYsIDIxMywgMjE3LCAxMywgMTAyLCAxLCAxNzYsIDEwMiwgMSwgMjM1LCAxMywgMjMxLCAyMDcsIDEwMiwgMSwgCi0gICAgMjQzLCAxMzUsIDEwMiwgMSwgMjQzLCAxMzYsIDI0MiwgMTYxLCAxMDIsIDEsIDIyOSwgNzcsIDEwMiwgMSwgMjUxLCAzMywgCi0gICAgMTAyLCAxLCAyNTEsIDM0LCAyMzMsIDEyMywgMTAyLCAxLCAyMzUsIDE0MSwgMTAyLCAxLCAyMzUsIDE0MiwgMjM1LCAxMTgsIAotICAgIDEwMiwgMSwgMjI3LCAxNjUsIDEwMiwgMSwgMjE3LCAxMDYsIDIzMywgNzYsIDEwMiwgMSwgMjE3LCAxMDYsIDIzMCwgNjcsIAotICAgIDIzMSwgMjA3LCAxMDIsIDEsIDI0OCwgMjIyLCAyMzAsIDY3LCAyNTQsIDE0NSwgMTAyLCAxLCAyNDgsIDIyMiwgMjMwLCA2NywgCi0gICAgMjMxLCAyMDcsIDEwMiwgMSwgMjI5LCAyMjksIDIyMywgMTUyLCAxMDIsIDEsIDIxNywgMTA1LCAxMDIsIDEsIDIxNywgMTA2LCAKLSAgICAyMTcsIDM1LCAxMDIsIDEsIDI0OCwgMjIxLCAxMDIsIDEsIDI0OCwgMjIyLCAyMzEsIDIyNSwgMTAyLCAxLCAxOTcsIDEwMiwgCi0gICAgMSwgMTkwLCAxMDIsIDEsIDIyNiwgOTAsIDIzNCwgMjI2LCAxMDIsIDEsIDI1MiwgMTkxLCAxMDIsIDEsIDI1MiwgMTkyLCAKLSAgICAyMzQsIDE3MiwgMTAyLCAxLCAxODQsIDEwMiwgMSwgMTkxLCAxMDIsIDEsIDIwNSwgMTAyLCAxLCAyMzMsIDEzNSwgMTAyLCAKLSAgICAxLCAyMTIsIDY1LCAxMDIsIDEsIDIyMiwgMzQsIDIyMiwgMjAsIDEwMiwgMSwgMjIyLCAzNCwgMjIxLCAyMzMsIDEwMiwgMSwgCi0gICAgMjA2LCAxMDIsIDEsIDE2MiwgMTAyLCA1LCAyMjMsIDcwLCAxMDIsIDI1LCA1LCAyMTcsIDEzLCAxMDIsIDI1LCA1LCAyMTQsIAotICAgIDE5OSwgMTAyLCAyNSwgNSwgMjE0LCAyMDAsIDIyMSwgMjI5LCAxMDIsIDI1LCA1LCAyMTgsIDQ3LCAxMDIsIDI1LCA1LCAKLSAgICAyMTgsIDQ4LCAyMzYsIDIxLCAxMDIsIDI1LCA1LCAyMjMsIDE4OCwgMjIzLCA3OSwgMTAyLCAyNSwgNSwgMjIzLCAxODgsIAotICAgIDIyMywgODAsIDIxNywgMTMsIDEwMiwgMjUsIDUsIDIzMywgMTM2LCAyMzMsIDI0LCAxMDIsIDI1LCA1LCAyMzMsIDEzNiwgCi0gICAgMjMzLCAyNSwgMjE3LCAxMywgMTAyLCAyNSwgNSwgMjE3LCA2NSwgMTAyLCAyNSwgNSwgMjE3LCA2NiwgMjIzLCA3OSwgMTAyLCAKLSAgICAyNSwgNSwgMjE3LCA2NiwgMjE3LCAxMywgMTAyLCAyNSwgNSwgMjE3LCA2NiwgMjIzLCA4MCwgMjE3LCAxMywgMTAyLCAyNSwgCi0gICAgNSwgMjI1LCAxODQsIDEwMiwgMjUsIDUsIDIyNSwgMTg1LCAyMTcsIDEzLCAxMDIsIDI1NCwgMjUwLCAyNTQsIDI0OSwgMTAyLCAKLSAgICAxLCAyMzQsIDI1MSwgMjIxLCAyMjgsIDEwMiwgMSwgMjM0LCAxMDIsIDIyMSwgMjI4LCAxMDIsIDEsIDIxNSwgMzQsIDIyMSwgCi0gICAgMjI4LCAxMDIsIDEsIDI0NSwgMjAzLCAyMjEsIDIyOCwgMTAyLCAxLCAyMTQsIDAsIDIyMSwgMjI4LCAxMDIsIDEsIDIxMCwgCi0gICAgMTA3LCAyMjEsIDIyOCwgMTAyLCAxLCAyNTMsIDIwOSwgMjIxLCAyMjgsIDEwMiwgMjEsIDIxMCwgODYsIDEwMiwgMjEsIAotICAgIDExMCwgMTAyLCAyMSwgMTA1LCAxMDIsIDIxLCAxNTgsIDEwMiwgMjEsIDE2MSwgMTAyLCAyMSwgMTg5LCAxMDIsIDIxLCAKLSAgICAxOTQsIDEwMiwgMjEsIDE5OCwgMTAyLCAyMSwgMTk1LCAxMDIsIDIxLCAyMDAsIDEwMiwgMjI2LCAyOSwgMTAyLCAyMjYsIAotICAgIDU1LCAxMDIsIDIxMSwgMjM4LCAxMDIsIDI1MCwgMjM2LCAyMjYsIDQ4LCAxMDIsIDI1MCwgMjM2LCAyMTksIDE3MiwgMTAyLCAKLSAgICAyNTAsIDIzNiwgMjI2LCAyLCAxMDIsIDIyNiwgNTQsIDEwMiwgMjgsIDE2LCAyNDcsIDEyNiwgMTAyLCAyOCwgMTYsIDI0OCwgCi0gICAgNTEsIDEwMiwgMjgsIDE2LCAyNDYsIDY0LCAxMDIsIDI4LCAxNiwgMjQ4LCAxNzYsIDEwMiwgMjgsIDE2LCAyNDgsIDE3NywgCi0gICAgMjE4LCAxNSwgMTAyLCAyOCwgMTYsIDI0NywgMjA1LCAxMDIsIDI4LCAxNiwgMjQ4LCAyMTQsIDEwMiwgMjgsIDE2LCAyNDgsIAotICAgIDMzLCAxMDIsIDI4LCAxNiwgMjQ4LCAxOTgsIDEwMiwgMjgsIDE2LCAyNDgsIDE3NywgMjQzLCA1NywgMTAyLCAyOCwgMTYsIAotICAgIDM4LCAyMTcsIDksIDEwMiwgMjgsIDE2LCAzOCwgMjQ1LCAxNDEsIDEwMiwgMjgsIDE2LCAzOCwgMjM0LCAxNjcsIDEwMiwgCi0gICAgMjgsIDE2LCAzOCwgMjM0LCAxNjksIDEwMiwgMjgsIDE2LCAzOCwgMjM1LCAxMjIsIDEwMiwgMjgsIDE2LCAzOCwgMjM0LCAKLSAgICAxNjgsIDIsIDIzNSwgMTIyLCAxMDIsIDI4LCAxNiwgMzgsIDIzNCwgMTcwLCAyLCAyMzUsIDEyMiwgMTAyLCAyOCwgMTYsIAotICAgIDM4LCAyNTIsIDM3LCAxMDIsIDI4LCAxNiwgMzgsIDI0MiwgMTY1LCAxMDIsIDI4LCAxNiwgMjIyLCAyNDksIDIwNCwgMjQ2LCAKLSAgICA3NCwgMTAyLCAyOCwgMTYsIDIyMiwgMjQ5LCAyMDQsIDI0OCwgMjEyLCAxMDIsIDI4LCAxNiwgMjIyLCAyNDksIDI1MCwgMCwgCi0gICAgMjE1LCAxMTEsIDEwMiwgMjgsIDE2LCAyMjIsIDI0OSwgMjUwLCAwLCAyMTcsIDczLCAxMDIsIDI4LCAxNiwgMjMzLCA0NCwgCi0gICAgMjA0LCAyMjYsIDQzLCAxMDIsIDI4LCAxNiwgMjMzLCA0NCwgMjA0LCAyMjQsIDEzOSwgMTAyLCAyOCwgMTYsIDIzMywgNDQsIAotICAgIDI1MCwgMCwgMjI1LCAzOCwgMTAyLCAyOCwgMTYsIDIzMywgNDQsIDI1MCwgMCwgMjI1LCAyNiwgMTAyLCAyOCwgMTYsIDIzMywgCi0gICAgNDQsIDIwNCwgMjI1LCA2MSwgMjA3LCA1LCAyMjYsIDI2LCAyMDcsIDUsIDIyNiwgMzksIDIwNywgNSwgMjI2LCAzNSwgMjA3LCAKLSAgICAxLCA2MSwgMjA3LCAxLCA3MywgMjA3LCAxLCA3MCwgMjA3LCAxLCAyNTQsIDI0MywgMjA3LCAxLCA3NiwgMjA3LCAxLCA3NSwgCi0gICAgMjA3LCAxLCAyNDUsIDU1LCAyMDcsIDEsIDE3NiwgMjA3LCAxLCAyMjQsIDg4LCAyMDcsIDEsIDI0MywgMTM1LCAyMDcsIDEsIAotICAgIDIyOSwgNzcsIDIwNywgMSwgMjUxLCAzMywgMjA3LCAxLCAyMzUsIDE0MSwgMjA3LCAxLCAyMTAsIDExNiwgMjA3LCAxLCAKLSAgICAyMjcsIDE2NSwgMjA3LCAxLCAyMTcsIDEwNSwgMjA3LCAxLCAyNDgsIDIyMSwgMjA3LCAxLCAxOTcsIDIwNywgMSwgMTkwLCAKLSAgICAyMDcsIDEsIDI0NCwgMTk2LCAyMDcsIDEsIDIxNCwgMjcsIDIwNywgMSwgMjUyLCAxOTEsIDIwNywgMSwgMTg0LCAyMDcsIDEsIAotICAgIDE5MSwgMjA3LCAxLCAyMDUsIDIwNywgMSwgMjMzLCAxMzUsIDIwNywgMSwgMjEyLCA2NSwgMjA3LCAxLCAyMDYsIDIwNywgMSwgCi0gICAgMjExLCAxNjUsIDIwNywgMSwgMTYyLCAyMDcsIDExNiwgNSwgMjI2LCA1MiwgMjA3LCAxMTYsIDUsIDIyNiwgMjgsIDIwNywgCi0gICAgMTE2LCA1LCAyMjYsIDI1LCAyMDcsIDI1LCA1LCAyMjYsIDQyLCAyMDcsIDI1LCA1LCAyMjYsIDI0LCAyMDcsIDI1LCA1LCAKLSAgICAyMjYsIDQ2LCAyMDcsIDI1LCA1LCAyMjYsIDM0LCAyMDcsIDI1LCA1LCAyMjYsIDUzLCAyMDcsIDI1LCA1LCAyMjYsIDQ0LCAKLSAgICAyMDcsIDUsIDIyNiwgNTYsIDIwNywgNSwgMjEzLCAxNTIsIDIwNywgMTE2LCA1LCAyMjUsIDI0OCwgMTg0LCAyMDcsIDExNiwgCi0gICAgNSwgMjI1LCAyNDgsIDIxMiwgNjUsIDIwNywgMSwgMjM0LCAxMzIsIDIwNywgMSwgMjE3LCAyMzEsIDIwNywgMjEsIDIxMCwgCi0gICAgODYsIDIwNywgMjEsIDExMCwgMjA3LCAyMSwgMTA1LCAyMDcsIDIxLCAxNTgsIDIwNywgMjEsIDE2MSwgMjA3LCAyMSwgMTg5LCAKLSAgICAyMDcsIDIxLCAxOTQsIDIwNywgMjEsIDE5OCwgMjA3LCAyMSwgMTk1LCAyMDcsIDIxLCAyMDAsIDIwNywgMjUzLCAxNzUsIAotICAgIDIwNywgMSwgMjIzLCA1MiwgMjA3LCAxLCAyMzMsIDcsIDIwNywgMSwgMjUyLCAxOCwgMjA3LCAxLCA0MCwgMjM1LCAyMywgCi0gICAgMjA3LCAxLCA0MCwgMTkzLCAyNTIsIDEyMCwgMSwgNjEsIDI1MiwgMTIwLCAxLCAyMTksIDE2NCwgNjEsIDI1MiwgMTIwLCAxLCAKLSAgICAxNjIsIDI1MiwgMTIwLCAxLCAyMTksIDE2NCwgMTYyLCAyNTIsIDEyMCwgMSwgMjMxLCAxODEsIDE2MiwgMjUyLCAxMjAsIDEsIAotICAgIDI1MiwgMTkxLCAyNTIsIDEyMCwgMSwgMjM0LCAyMTIsIDI1MiwgMTkxLCAyNTIsIDEyMCwgMSwgMTkwLCAyNTIsIDEyMCwgMSwgCi0gICAgMjE5LCAxNjQsIDE5MCwgMjUyLCAxMjAsIDEsIDE5NywgMjUyLCAxMjAsIDEsIDIzMSwgMTgxLCAxOTcsIDI1MiwgMTIwLCAxLCAKLSAgICAyMTIsIDY1LCAyNTIsIDEyMCwgMSwgMjE5LCAxNjQsIDIxMiwgNjUsIDI1MiwgMTIwLCAxLCAyMjYsIDY3LCAyMTIsIDY1LCAKLSAgICAyNTIsIDEyMCwgMSwgMjQzLCAxMzUsIDI1MiwgMTIwLCAxLCAyMTksIDE2NCwgMjQzLCAxMzUsIDI1MiwgMTIwLCAxLCAyMzUsIAotICAgIDE0MSwgMjUyLCAxMjAsIDEsIDI0OCwgMjIxLCAyNTIsIDEyMCwgMSwgMjA1LCAyNTIsIDEyMCwgMSwgMjE5LCAxNjQsIDIwNSwgCi0gICAgMjUyLCAxMjAsIDEsIDE4NCwgMjUyLCAxMjAsIDEsIDIxOSwgMTY0LCAxODQsIDI1MiwgMTIwLCAxLCAyMTksIDI2LCAyMTcsIAotICAgIDEwNSwgMjUyLCAxMjAsIDEsIDIyOCwgNTUsIDIxNywgMTA1LCAyNTIsIDEyMCwgMSwgMjA2LCAyNTIsIDEyMCwgMSwgMjE5LCAKLSAgICAxNjQsIDIwNiwgMjUyLCAxMjAsIDEsIDIzMSwgMTgxLCAyMDYsIDI1MiwgMTIwLCAxLCAxOTEsIDI1MiwgMTIwLCAxLCAyMTksIAotICAgIDE2NCwgMTkxLCAyNTIsIDEyMCwgMSwgMjI5LCA3NywgMjUyLCAxMjAsIDEsIDIzMywgMTM1LCAyNTIsIDEyMCwgMSwgMjE5LCAKLSAgICAxNjQsIDIzMywgMTM1LCAyNTIsIDEyMCwgMSwgMjI3LCAxNjUsIDI1MiwgMTIwLCAxLCAyNTEsIDMzLCAyNTIsIDEyMCwgMSwgCi0gICAgMjI5LCAxNDgsIDI1MiwgMTIwLCAxLCAyMzEsIDEyNCwgMjUyLCAxMjAsIDEsIDczLCAyNTIsIDEyMCwgMSwgNzAsIDI1MiwgCi0gICAgMTIwLCA1LCAyMTYsIDMzLCAyNTIsIDEyMCwgMjUsIDUsIDc1LCAyNTIsIDEyMCwgMjUsIDUsIDIyNiwgNjcsIDc1LCAyNTIsIAotICAgIDEyMCwgMjUsIDUsIDI0NSwgMjA5LCAyNTIsIDEyMCwgMjUsIDUsIDczLCAyNTIsIDEyMCwgMjUsIDUsIDIzNCwgMjEyLCA3MywgCi0gICAgMjUyLCAxMjAsIDI1LCA1LCA3NiwgMjUyLCAxMjAsIDI1LCA1LCAyMzQsIDIxMiwgNzYsIDI1MiwgMTIwLCAyNSwgNSwgNzAsIAotICAgIDI1MiwgMTIwLCAyNSwgNSwgMTA0LCAzMSwgMjE5LCAxNjQsIDIwNiwgMjUyLCAxMjAsIDExNiwgNSwgMjI5LCA3OSwgMjUyLCAKLSAgICAxMjAsIDExNiwgNSwgMjQyLCA2MCwgMjUyLCAxMjAsIDIyNiwgMzcsIDI1MiwgMTIwLCAyMjYsIDMzLCAyNTIsIDEyMCwgMTYsIAotICAgIDI1MSwgMjQxLCAyMjksIDIyOSwgMjMxLCAzNywgMjUyLCAxMjAsIDE2LCAyNTEsIDI0MSwgMjI1LCA2NCwgMjUyLCAxMjAsIAotICAgIDE2LCAyNTEsIDI0MSwgMjM1LCA0OCwgMjUyLCAxMjAsIDE2LCAyNTEsIDI0MSwgMjI2LCAzNywgMTk2LCAxLCAxNzYsIDE5NiwgCi0gICAgMSwgMjM0LCAzOSwgMTk2LCAxLCAyMzQsIDEzMiwgMTk2LCAxLCAyNDMsIDEzNSwgMTk2LCAxLCAyNDIsIDE4NiwgMTk2LCAxLCAKLSAgICAyMjksIDc3LCAxOTYsIDEsIDI1MSwgMzMsIDE5NiwgMSwgMjUwLCAxNTcsIDE5NiwgMSwgMjM1LCAxNDEsIDE5NiwgMSwgCi0gICAgMjI3LCAxNjUsIDE5NiwgMSwgMjE3LCAxMDUsIDE5NiwgMSwgMjE2LCAyMDgsIDE5NiwgMSwgMjQ4LCAyMjEsIDE5NiwgMSwgCi0gICAgMTk3LCAxOTYsIDEsIDE5MCwgMTk2LCAxLCAyMjUsIDQyLCAxOTYsIDEsIDIyNSwgMTQ3LCAxOTYsIDEsIDI0NCwgMTk2LCAKLSAgICAxOTYsIDEsIDI0NCwgNzUsIDE5NiwgMSwgMjUyLCAxOTEsIDE5NiwgMSwgMjUxLCAyMjIsIDE5NiwgMSwgMTg0LCAxOTYsIDEsIAotICAgIDIzMCwgMTY4LCAxOTYsIDEsIDIxNSwgMTgzLCAxOTYsIDEsIDIxNSwgMTc1LCAxOTYsIDEsIDI0NiwgMzgsIDE5NiwgMSwgCi0gICAgMTkxLCAxOTYsIDEsIDIwNSwgMTk2LCAxLCAyMzMsIDEzNSwgMTk2LCAxLCAxNjIsIDE5NiwgMSwgMjQxLCAxNTMsIDE5NiwgCi0gICAgMSwgMjE0LCAyNywgMTk2LCAxLCAyMDYsIDE5NiwgMSwgMjIwLCAxMDIsIDE5NiwgMSwgMjEyLCA2NSwgMTk2LCAxLCA2MSwgCi0gICAgMTk2LCAyMTgsIDczLCAxLCAxOTEsIDE5NiwgMjE4LCA3MywgMSwgMjA1LCAxOTYsIDI1LCA1LCAyNTUsIDczLCAxOTYsIDI1LCAKLSAgICA1LCA3MywgMTk2LCAyNSwgNSwgNzYsIDE5NiwgMjUsIDUsIDIyNiwgMTgzLCAxOTYsIDI1LCA1LCA3MCwgMTk2LCAyNSwgNSwgCi0gICAgMjE0LCAxMTgsIDE5NiwgMjUsIDUsIDc1LCAxOTYsIDExNiwgNSwgMjM1LCAyMywgMTk2LCAxMTYsIDUsIDE5MywgMTk2LCAKLSAgICAxMTYsIDUsIDE1NiwgMTk2LCAxMTYsIDUsIDIzMCwgMjUsIDE5NiwgMTE2LCA1LCAyMjYsIDEwNSwgMTk2LCAxMTYsIDUsIAotICAgIDE1MywgMTk2LCAxMTYsIDUsIDIxNywgMTUyLCAxOTYsIDExNiwgNSwgMjI3LCAxNDIsIDE5NiwgMTE2LCA1LCAyMzQsIDIzMCwgCi0gICAgMTk2LCA1LCAyMjMsIDE1MCwgMTk2LCA1LCAyMjcsIDIwNSwgMTk2LCAyMjQsIDE0MSwgMjE3LCAxMDMsIDE5NiwgMjI0LCAKLSAgICAxNDEsIDIyNywgMTUyLCAyMTYsIDEyMCwgMjE3LCAxMDMsIDE5NiwgMjI0LCAxNDEsIDI1MCwgMTY0LCAxOTYsIDIyNCwgCi0gICAgMTQxLCAyMTUsIDE3MCwgMjUwLCAxNjQsIDE5NiwgMjI0LCAxNDEsIDIxNSwgMTY5LCAxOTYsIDIxLCAyMTAsIDg2LCAxOTYsIAotICAgIDIxLCAxMTAsIDE5NiwgMjEsIDEwNSwgMTk2LCAyMSwgMTU4LCAxOTYsIDIxLCAxNjEsIDE5NiwgMjEsIDE4OSwgMTk2LCAyMSwgCi0gICAgMTk0LCAxOTYsIDIxLCAxOTgsIDE5NiwgMjEsIDE5NSwgMTk2LCAyMSwgMjAwLCAxOTYsIDEsIDIxNSwgMTU2LCAxOTYsIDEsIAotICAgIDIxNSwgMTQ0LCAxOTYsIDEsIDI0OCwgMTM1LCAyMjYsIDIxMCwgMjUwLCAxMDMsIDIxLCAyMTAsIDg2LCAyMjYsIDIxMCwgCi0gICAgMjUwLCAxMDMsIDIxLCAxMTAsIDIyNiwgMjEwLCAyNTAsIDEwMywgMjEsIDEwNSwgMjI2LCAyMTAsIDI1MCwgMTAzLCAyMSwgCi0gICAgMTU4LCAyMjYsIDIxMCwgMjUwLCAxMDMsIDIxLCAxNjEsIDIyNiwgMjEwLCAyNTAsIDEwMywgMjEsIDE4OSwgMjI2LCAyMTAsIAotICAgIDI1MCwgMTAzLCAyMSwgMTk0LCAyMjYsIDIxMCwgMjUwLCAxMDMsIDIxLCAxOTgsIDIyNiwgMjEwLCAyNTAsIDEwMywgMjEsIAotICAgIDE5NSwgMjI2LCAyMTAsIDI1MCwgMTAzLCAyMSwgMjAwLCAyMjYsIDIxMCwgMjUwLCAxMDMsIDEsIDIzMywgMTM1LCAyMjYsIAotICAgIDIxMCwgMjUwLCAxMDMsIDEsIDI1MywgMjA2LCAyMjYsIDIxMCwgMjUwLCAxMDMsIDEsIDI1NCwgMjE2LCAyMjYsIDIxMCwgCi0gICAgMjUwLCAxMDMsIDEsIDI1NCwgMTE1LCAyMjYsIDIxMCwgMjUwLCAxMDMsIDEsIDI1NCwgMTc4LCAyMjYsIDIxMCwgMjUwLCAKLSAgICAxMDMsIDEsIDIzMywgMTM0LCAyMjYsIDIxMCwgMjUwLCAxMDMsIDEsIDI1NSwgMzUsIDIyNiwgMjEwLCAyNTAsIDEwMywgMSwgCi0gICAgMjU1LCAzNiwgMjI2LCAyMTAsIDI1MCwgMTAzLCAxLCAyNTUsIDM0LCAyMjYsIDIxMCwgMjUwLCAxMDMsIDEsIDI1NSwgMjksIAotICAgIDIyNiwgMjEwLCAyNTAsIDEwMywgMSwgMjMyLCAyNDEsIDIyNiwgMjEwLCAyNTAsIDEwMywgMSwgMjM1LCAxNzEsIDIyNiwgCi0gICAgMjEwLCAyNTAsIDEwMywgMSwgMjM2LCAzNCwgMjI2LCAyMTAsIDI1MCwgMTAzLCAxLCAyMzUsIDE5MCwgMjI2LCAyMTAsIAotICAgIDI1MCwgMTAzLCAxLCAyMzUsIDE3OSwgMjI2LCAyMTAsIDI1MCwgMTAzLCAxLCAyMzIsIDk4LCAyMjYsIDIxMCwgMjUwLCAKLSAgICAxMDMsIDEsIDIxNCwgMjIxLCAyMjYsIDIxMCwgMjUwLCAxMDMsIDEsIDIxNCwgMjE5LCAyMjYsIDIxMCwgMjUwLCAxMDMsIDEsIAotICAgIDIxNCwgMTY4LCAyMjYsIDIxMCwgMjUwLCAxMDMsIDEsIDIxNCwgMTExLCAyMjYsIDIxMCwgMjUwLCAxMDMsIDEsIDIzMywgCi0gICAgNTgsIDIyNiwgMjEwLCAyNTAsIDEwMywgMSwgMjQ1LCAxMDgsIDIyNiwgMjEwLCAyNTAsIDEwMywgMSwgMjQ1LCAyMTIsIAotICAgIDIyNiwgMjEwLCAyNTAsIDEwMywgMSwgMjQ1LCAxNTAsIDIyNiwgMjEwLCAyNTAsIDEwMywgMSwgMjQ1LCA4NiwgMjI2LCAKLSAgICAyMTAsIDI1MCwgMTAzLCAxLCAyMzIsIDE1NiwgMjI2LCAyMTAsIDI1MCwgMTAzLCAxLCAyMjYsIDEzNywgMjI2LCAyMTAsIAotICAgIDI1MCwgMTAzLCAxLCAyMjYsIDI1MiwgMjI2LCAyMTAsIDI1MCwgMTAzLCAxLCAyMjYsIDEyNSwgMjI2LCAyMTAsIDI1MCwgCi0gICAgMTAzLCAxLCAyMjYsIDIyMiwgMjI2LCAyMTAsIDI1MCwgMTAzLCAyMzAsIDEwMywgMjE1LCAxMjEsIDIyNiwgMjEwLCAyNTAsIAotICAgIDEwMywgMjQzLCAxMzAsIDIxNSwgMTIyLCAyMjYsIDIxMCwgMjUwLCAxMDMsIDIzMCwgMTAxLCAyMTUsIDEyMiwgMjI2LCAKLSAgICAyMTAsIDI1MCwgMTAzLCAyMjMsIDkyLCAyMjYsIDIxMCwgMjUwLCAxMDMsIDIyNSwgMTQ1LCAyMjYsIDIxMCwgMjUwLCAxMDMsIAotICAgIDI1NCwgMjA4LCAyMjYsIDIxMCwgMjUwLCAxMDMsIDIyNCwgMTQxLCAyMzAsIDk4LCAyMjYsIDIxMCwgMjUwLCAxMDMsIDIyNCwgCi0gICAgMTQxLCA1MiwgMjMwLCA5OCwgMjA3LCAyMjQsIDE0MSwgMjUxLCAyNDEsIDIxOCwgOCwgMjA3LCAyMjQsIDE0MSwgMjUxLCAKLSAgICAyNDEsIDIyNiwgMzgsIDIwNywgMjI0LCAxNDEsIDI1MSwgMjQxLCAyMjQsIDEyOSwgMjA3LCAyMjQsIDE0MSwgMjUxLCAyNDEsIAotICAgIDI1MSwgMTksIDIwNywgMjI0LCAxNDEsIDI1MSwgMjQxLCAyMzMsIDgsIDIyMSwgMjI1LCAyMDcsIDIyNCwgMTQxLCAyNTEsIAotICAgIDI0MSwgMjM1LCAxMywgMjIxLCAyMjUsIDIwNywgMjI0LCAxNDEsIDI1MSwgMjQxLCAyNDgsIDIyMiwgMjIxLCAyMjUsIDIwNywgCi0gICAgMjI0LCAxNDEsIDI1MSwgMjQxLCAyNTIsIDE5MiwgMjIxLCAyMjUsIDIxMywgMjUyLCAxMzgsIDIzNCwgMjEwLCAyMTMsIAotICAgIDI1MiwgMTM4LCAyMjAsIDc3LCAyMTMsIDI1MiwgMTM4LCAyMjQsIDE5OCwgMjEzLCAyNTIsIDUsIDIyOCwgMjA5LCAyMTMsIAotICAgIDI1MiwgNSwgMjExLCA4MCwgMjMwLCAyMjIsIDIxOCwgMCwgMjEzLCAyNTIsIDEzOCwgMjExLCA4MCwgMjU0LCAyMTMsIDIzNSwgCi0gICAgMjQzLCAyMTgsIDAsIDIxMywgMjUyLCAxMzgsIDIxMSwgODAsIDIzNSwgMjQzLCAyMTgsIDAsIDIxMywgMjUyLCAxMzgsIAotICAgIDIxMSwgODAsIDIzNCwgMTk4LCAyMzUsIDI0MywgMjE4LCAwLCAyMTMsIDI1MiwgMTM4LCAyNTEsIDIsIDUxLCAyMTMsIDI1MiwgCi0gICAgMTM4LCAyMTEsIDgwLCAyMzQsIDE5OCwgMjM1LCAyNDMsIDIxOCwgMSwgMjIxLCAxOTcsIDIxMywgMjUyLCAxMzgsIDUyLCAKLSAgICAyMTgsIDAsIDIxMywgMjUyLCAxMzgsIDIxNSwgMjExLCAyMTgsIDAsIDIxMywgMjUyLCAxMzgsIDIzNCwgMTk4LCAyNTQsIAotICAgIDc3LCAyMTMsIDI1MiwgMTM4LCA1OSwgNTEsIDIxMywgMjUyLCAxMzgsIDExMywgMTcwLCA1MSwgMjEzLCAyNTIsIDEzOCwgCi0gICAgMTM0LCAxNzAsIDUxLCAyMTMsIDI1MiwgMTM4LCAyMjIsIDI0MCwgMjM0LCAyMDksIDIzNSwgMjQzLCAyMTgsIDAsIDIxMywgCi0gICAgMjUyLCAxMzgsIDI1MywgMjA0LCAyMzUsIDI0MywgMjE4LCAwLCAyMTMsIDI1MiwgNSwgMjEzLCAxNDgsIDIxOCwgMCwgMjEzLCAKLSAgICAyNTIsIDUsIDIxMywgMTQ4LCAyMTQsIDIxNiwgMjEzLCAyNTIsIDUsIDIyMywgNDksIDIxMywgMTQ4LCAyMTQsIDIxNiwgCi0gICAgMjEzLCAyNTIsIDUsIDIxMywgMTQ4LCAyNTQsIDc3LCAyMTMsIDI1MiwgNSwgMjIzLCA0OSwgMjEzLCAxNDgsIDI1NCwgNzcsIAotICAgIDIxMywgMjUyLCA1LCAyMTMsIDE0OCwgMjE0LCAyMTcsIDIsIDIxNywgNzcsIDIxMywgMjUyLCA1LCAyMTMsIDE0OCwgMjU0LCAKLSAgICA3OCwgMiwgMjE3LCA3NywgMjEzLCAyNTIsIDUsIDI1NCwgNzYsIDI1NCwgOTEsIDIxMywgMjUyLCA1LCAyNTQsIDc2LCAyNTIsIAotICAgIDE2NiwgMjEzLCAyNTIsIDUsIDI1NCwgNzYsIDIxNCwgMjAsIDIxMywgMjUyLCA1LCAyNTQsIDc2LCAyMTQsIDIxLCAyLCAKLSAgICAyMTcsIDc3LCAyMTMsIDI1MiwgNSwgMjE2LCA2OCwgMjEzLCAyNTIsIDUsIDI0MSwgMTkxLCAxOTksIDI1NCwgNzUsIDIxMywgCi0gICAgMjUyLCA1LCAxOTksIDI1NCwgNzUsIDIxMywgMjUyLCA1LCAyMjIsIDE0MiwgMTk5LCAyNTQsIDc1LCAyMTMsIDI1MiwgNSwgCi0gICAgMjU0LCA3NiwgMjE0LCAyMjMsIDIzMCwgOTAsIDIxMywgMjUyLCA1LCAyNTQsIDIwLCAyMTMsIDI1MiwgNSwgMjIyLCAxODcsIAotICAgIDI1NCwgMjAsIDIxMywgMjUyLCAxMzgsIDI1MSwgMiwgNDgsIDIxMywgMjUyLCA1LCAyMzUsIDEwMiwgMjEzLCAyNTIsIDUsIAotICAgIDIxNCwgMTYxLCA3LCAxLCA0LCA2LCA2MSwgNywgMSwgNCwgNiwgMjU0LCAyNDMsIDcsIDQsIDEsIDIxNSwgOTQsIDI1NCwgCi0gICAgMjQzLCA3LCAxLCA0LCA2LCAyNTIsIDEzNCwgMjUzLCAxNTgsIDcsIDEsIDQsIDYsIDI1MSwgNjYsIDcsIDEsIDQsIDYsIAotICAgIDI0OSwgNjAsIDcsIDEsIDQsIDYsIDI0NSwgNTksIDcsIDEsIDQsIDYsIDc1LCA3LCA0LCAxLCAyMTUsIDk0LCAyMDQsIDc1LCAKLSAgICA3LCA0LCAxLCAyMTUsIDk0LCA3MywgNywgMSwgNCwgNiwgMjM1LCAxNDQsIDcsIDEsIDQsIDYsIDIzNSwgMjMsIDcsIDEsIDQsIAotICAgIDYsIDIzMywgMTQ5LCAyLCA5MSwgNywgMSwgNCwgNiwgMTkzLCA3LCAxLCA0LCA2LCAyMjMsIDQ5LCAyMzAsIDI1LCA3LCAxLCAKLSAgICA0LCA2LCA3NiwgNywgMSwgNCwgNiwgMjA0LCA3NiwgNywgNCwgMSwgMjE5LCAxODcsIDc2LCA3LCA0LCAxLCAyMTksIDE4NywgCi0gICAgMjA0LCA3NiwgNywgNCwgMSwgMjE5LCAxODcsIDE0NCwgMiwgOTEsIDcsIDQsIDEsIDIxNSwgOTQsIDIyNiwgMjM0LCA3LCAxLCAKLSAgICA0LCA2LCAyMjYsIDEzNCwgNywgNCwgMSwgMjE2LCAxNCwgMTYzLCA3NiwgNywgNCwgMSwgMjUxLCAxNzUsIDE2MywgNzYsIDcsIAotICAgIDEsIDQsIDYsIDIyNiwgMTA1LCA3LCAxLCA0LCA2LCAyMjMsIDQ5LCAxNTMsIDcsIDEsIDQsIDYsIDIxNSwgOTQsIDE1MywgNywgCi0gICAgMSwgNCwgNiwgMjE3LCAxNTIsIDcsIDEsIDQsIDYsIDcwLCA3LCA0LCAxLCAyMTksIDE4NywgNzAsIDcsIDQsIDEsIDIxOSwgCi0gICAgMTg3LCAyNDgsIDAsIDcwLCA3LCA0LCAxLCAyMTksIDE4NywgMjE1LCA5NCwgMTkzLCA3LCAxLCA0LCA2LCAyMTQsIDEwNSwgCi0gICAgNywgMSwgNCwgNiwgMjEyLCA5OCwgNywgMSwgNCwgNiwgMjEwLCAxNTksIDcsIDEsIDQsIDYsIDI0NSwgOCwgNywgMSwgMjEzLCAKLSAgICAxMzUsIDIzMywgODIsIDIxOCwgMjUwLCA3LCAxLCAyNTQsIDE5NiwgMjYsIDEsIDQsIDYsIDI0MywgMTA3LCAyNiwgMSwgNCwgCi0gICAgNiwgMjMzLCA5OCwgMjYsIDEsIDQsIDYsIDIyNSwgMTA4LCAyNiwgMSwgNCwgNiwgMjIzLCAzNywgMjYsIDEsIDQsIDYsIAotICAgIDIyNCwgMTYxLCAzMywgMSwgNCwgNiwgMjQ1LCAxNzQsIDU4LCAxLCA2LCA2MSwgNTgsIDEsIDYsIDI1NCwgMjQzLCA1OCwgMSwgCi0gICAgNiwgMjUzLCAxNTgsIDU4LCAxLCA2LCAyNTIsIDEzNCwgMjUzLCAxNTgsIDU4LCAxLCA2LCAyNDksIDYwLCA1OCwgMSwgNiwgCi0gICAgNzUsIDU4LCAxLCA2LCAyMjMsIDQ5LCA3NSwgNTgsIDEsIDYsIDI0MywgMjAyLCA1OCwgMSwgNiwgMjQyLCA2MCwgNTgsIDEsIAotICAgIDYsIDczLCA1OCwgMSwgNiwgMjM1LCAxNDQsIDU4LCAxLCA2LCAyMzUsIDIzLCA1OCwgMSwgNiwgMTU2LCA1OCwgMSwgNiwgCi0gICAgMTkzLCA1OCwgMSwgNiwgMjMwLCAyNSwgNTgsIDEsIDYsIDIyMywgNDksIDIzMCwgMjUsIDU4LCAxLCA2LCA3NiwgNTgsIDEsIAotICAgIDYsIDIyNiwgMTM0LCA1OCwgMSwgNiwgMjI2LCAxMDUsIDU4LCAxLCA2LCAxNTMsIDU4LCAxLCA2LCAyMTcsIDE1MiwgNTgsIAotICAgIDEsIDYsIDcwLCA1OCwgMSwgNiwgMjEyLCA5OCwgNTgsIDEsIDQsIDYxLCA1OCwgMSwgNCwgMjE1LCA5NCwgNjEsIDU4LCAxLCAKLSAgICA0LCAyNTQsIDE0MywgNTgsIDEsIDQsIDIxNSwgOTQsIDI1NCwgMjQzLCA1OCwgMSwgNCwgMjUzLCAxNTgsIDU4LCAxLCA0LCAKLSAgICAyNDksIDYwLCA1OCwgMSwgNCwgNzUsIDU4LCAxLCA0LCAyMjEsIDE5NSwgNTgsIDEsIDQsIDIwNCwgNzUsIDU4LCAxLCA0LCAKLSAgICAyMTUsIDk0LCAyMDQsIDc1LCA1OCwgMSwgNCwgMjQzLCAyMDIsIDU4LCAxLCA0LCAyMTUsIDk0LCA3MywgNTgsIDEsIDQsIAotICAgIDIzNSwgMjMsIDU4LCAxLCA0LCAxOTMsIDU4LCAxLCA0LCAyNDUsIDEzOCwgNTgsIDEsIDQsIDc2LCA1OCwgMSwgNCwgMjA0LCAKLSAgICA3NiwgNTgsIDEsIDQsIDIxNiwgMTQsIDE2MywgNzYsIDU4LCAxLCA0LCAyNTEsIDE3NSwgMTYzLCA3NiwgNTgsIDEsIDQsIAotICAgIDIyNiwgMTA1LCA1OCwgMSwgNCwgMjE3LCAxNTIsIDU4LCAxLCA0LCA3MCwgNTgsIDEsIDQsIDIxOSwgMTg3LCA3MCwgNTgsIAotICAgIDEsIDQsIDIxNSwgOTQsIDE5MywgNTgsIDEsIDQsIDIxNCwgMTA1LCA1OCwgMSwgNCwgMjU0LCAxOTYsIDU4LCAxLCA0LCAKLSAgICAyNTIsIDI2LCA1OCwgMSwgNCwgMjYsIDI0MywgMTA3LCA1OCwgMSwgNCwgMjQ4LCA1NCwgNTgsIDEsIDQsIDI2LCAyMjUsIAotICAgIDEzMywgNTgsIDEsIDQsIDI1MCwgMTEwLCA3LCAyMTgsIDY1LCA0LCAxLCA3MywgNywgMjE4LCA2NSwgNCwgMSwgMTUzLCA3LCAKLSAgICAyMTgsIDY1LCA0LCAxLCA3MCwgNywgMjE4LCA2NSwgNCwgMSwgMjE0LCAxMDUsIDI2LCAyMTgsIDY1LCA0LCAxLCAyNTIsIAotICAgIDI2LCAyNiwgMjE4LCA2NSwgNCwgMSwgMjQzLCAxMDcsIDI2LCAyMTgsIDY1LCA0LCAxLCAyMjMsIDM3LCAyNiwgMjE4LCA2NSwgCi0gICAgNCwgMSwgMjI1LCAxMzMsIDI2LCAyMTgsIDY1LCA0LCAxLCAyNTAsIDExMCwgNywgNCwgMSwgMjE0LCAyMTQsIDcsIDQsIDEsIAotICAgIDU3LCAyLCAyMzAsIDIyNCwgMTgyLCA3LCA0LCAxLCAyNDksIDYxLCAyLCAyMzAsIDIyNCwgMTgyLCA3LCA0LCAxLCAyNDUsIAotICAgIDcsIDIsIDIzMCwgMjI0LCAxODIsIDcsIDQsIDEsIDIzMiwgNTAsIDIsIDIzMCwgMjI0LCAxODIsIDcsIDQsIDEsIDIzMCwgCi0gICAgMjYsIDIsIDIzMCwgMjI0LCAxODIsIDcsIDQsIDEsIDIyNiwgMTA2LCAyLCAyMzAsIDIyNCwgMTgyLCA3LCA0LCAxLCAyMjMsIAotICAgIDIyNCwgMiwgMjMwLCAyMjQsIDE4MiwgNywgNCwgMSwgMjIzLCAyMjQsIDIsIDI0NCwgODgsIDIyLCAyMzAsIDIyNCwgMTgyLCAKLSAgICA3LCA0LCAxLCAyMjIsIDkyLCAyLCAyMzAsIDIyNCwgMTgyLCA3LCA0LCAxLCAyMTcsIDE1MywgMiwgMjMwLCAyMjQsIDE4MiwgCi0gICAgNywgNCwgMSwgMjEwLCAxNjAsIDIsIDIzMCwgMjI0LCAxODIsIDcsIDQsIDEsIDIxNSwgOTQsIDI0MywgMjAyLCA1OCwgMSwgCi0gICAgMzMsIDI0NSwgMTUwLCA3LCA0LCAxLCAyMzUsIDIxMywgMjQzLCAyMDIsIDcsIDQsIDEsIDIxNiwgMjExLCAyLCAyMTgsIAotICAgIDEwNywgNywgNCwgNiwgMSwgMjQwLCAxNTQsIDIsIDkxLCA3LCA0LCAxLCAyMzUsIDE4NiwgMiwgOTEsIDcsIDQsIDEsIDIyNiwgCi0gICAgMTA2LCAyLCA5MSwgNywgNCwgNiwgMSwgMTA0LCAyLCA5MSwgNywgNCwgMSwgMjE0LCAxNTgsIDIsIDkxLCA3LCA0LCAxLCAKLSAgICA1NywgMiwgMjI2LCA2NiwgMTAzLCA3LCA0LCAxLCAyNDksIDYxLCAyLCAyMjYsIDY2LCAxMDMsIDcsIDQsIDEsIDI0NSwgNywgCi0gICAgMiwgMjI2LCA2NiwgMTAzLCA3LCA0LCAxLCAyNDMsIDIwMywgMiwgMjI2LCA2NiwgMTAzLCA3LCA0LCAxLCAyMzUsIDI0LCAyLCAKLSAgICAyMjYsIDY2LCAxMDMsIDcsIDQsIDEsIDIzMywgMTQ5LCAyLCAyMjYsIDY2LCAxMDMsIDcsIDQsIDEsIDIzMiwgNTAsIDIsIAotICAgIDIyNiwgNjYsIDEwMywgNywgNCwgMSwgMjMwLCAyNiwgMiwgMjI2LCA2NiwgMTAzLCA3LCA0LCAxLCAyMjYsIDEwNiwgMiwgCi0gICAgMjI2LCA2NiwgMTAzLCA3LCA0LCAxLCAyMjMsIDIyNCwgMiwgMjI2LCA2NiwgMTAzLCA3LCA0LCAxLCAyMjIsIDkyLCAyLCAKLSAgICAyMjYsIDY2LCAxMDMsIDcsIDQsIDEsIDI0NSwgNzYsIDIsIDIyNiwgNjYsIDEwMywgNywgNCwgMSwgMjE0LCAxMDYsIDIsIAotICAgIDIyNiwgNjYsIDEwMywgNywgNCwgMSwgMjExLCAxNzksIDIsIDIyNiwgNjYsIDEwMywgNywgNCwgMSwgMjEwLCAxNjAsIDIsIAotICAgIDIyNiwgNjYsIDEwMywgNywgNCwgMSwgMTE1LCAyLCAyMjMsIDU1LCAxMDMsIDcsIDQsIDEsIDI1NCwgMTQ0LCAyLCAyMjMsIAotICAgIDU1LCAxMDMsIDcsIDQsIDEsIDI0OSwgNjEsIDIsIDI0MSwgNTIsIDIyLCAyMTcsIDc3LCA3LCA0LCAxLCAxNjAsIDIsIDIyMywgCi0gICAgNTUsIDEwMywgNywgNCwgMSwgMjA0LCAxNjAsIDIsIDIyMywgNTUsIDEwMywgNywgNCwgMSwgMjIzLCA0OSwgMjA0LCAxNjAsIAotICAgIDIsIDIyMywgNTUsIDEwMywgNywgNCwgMSwgMjIxLCAxOTYsIDIsIDIyMywgNTUsIDEwMywgNywgNCwgMSwgMjQwLCAxNTQsIAotICAgIDIsIDIyMywgNTUsIDEwMywgNywgNCwgMSwgMjA0LCAxNDQsIDIsIDIyMywgNTUsIDEwMywgNywgNCwgMSwgMjQ1LCA3NiwgMiwgCi0gICAgMjIzLCA1NSwgMTAzLCA3LCA0LCAxLCAxMDQsIDIsIDIyMywgNTUsIDEwMywgNywgNCwgMSwgMjQ1LCA5LCAyLCAyMjMsIDU1LCAKLSAgICAxMDMsIDU4LCAxLCA0LCAyMTUsIDk0LCAyNTQsIDE0MywgNTgsIDEsIDQsIDI1MSwgNjYsIDU4LCAxLCA0LCAyNTEsIDY3LCAKLSAgICAyLCAyNDksIDEwMCwgNTgsIDEsIDQsIDI0NSwgNTksIDU4LCAxLCA0LCAyMjMsIDQ5LCAyMDQsIDc1LCA1OCwgMSwgNCwgCi0gICAgMjQ1LCA2LCA1OCwgMSwgNCwgMjQ3LCAxMTksIDIzNSwgMTQ1LCAyLCA5MSwgNTgsIDEsIDQsIDExOSwgMjQzLCAyMDIsIDU4LCAKLSAgICAxLCA0LCAyMTUsIDk0LCAyNDIsIDYwLCA1OCwgMSwgNCwgMjQwLCAxNTQsIDIsIDkxLCA1OCwgMSwgNCwgMjM1LCAxODUsIAotICAgIDU4LCAxLCA0LCA2LCA3MywgNTgsIDEsIDQsIDYsIDI0MCwgMTU0LCAyLCA5MSwgNTgsIDEsIDQsIDIzNSwgMTQ1LCAyLCAKLSAgICAyNDksIDEyNywgNTgsIDEsIDQsIDIzMywgMTQ5LCAyLCAyMjMsIDU1LCAxMDMsIDU4LCAxLCA0LCAyMzMsIDE0OSwgMiwgCi0gICAgMjI2LCA2NiwgMTAzLCA1OCwgMSwgNCwgNiwgMTU2LCA1OCwgMSwgNCwgMjMyLCA1MCwgMiwgMTAzLCA1OCwgMSwgNCwgMjE1LCAKLSAgICA5NCwgMjMyLCA1MCwgMiwgMTk5LCAyMzMsIDM2LCA1OCwgMSwgNCwgMjMwLCAyNiwgMiwgNDMsIDEwMywgNTgsIDEsIDQsIAotICAgIDIzMCwgMjYsIDIsIDIyMywgNTUsIDEwMywgNTgsIDEsIDQsIDYsIDIzMCwgMjUsIDU4LCAxLCA0LCAyNTIsIDEzNCwgNzYsIAotICAgIDU4LCAxLCA0LCAyMjUsIDEzMywgNTgsIDEsIDQsIDIyMiwgOTIsIDIsIDEwMywgNTgsIDEsIDQsIDI0NSwgNzUsIDU4LCAxLCAKLSAgICA0LCAyMTcsIDE1MywgMiwgMjI2LCA2NiwgMTAzLCA1OCwgMSwgNCwgMTA0LCAxMzAsIDU4LCAxLCA0LCAyMTQsIDE1NywgNTgsIAotICAgIDEsIDQsIDYsIDcwLCA1OCwgMSwgNCwgMjE0LCAxMDYsIDIsIDEwMywgNTgsIDEsIDQsIDIxNSwgOTQsIDIxNCwgMTA1LCA1OCwgCi0gICAgMSwgNCwgMjEwLCAxNTksIDU4LCAxLCA0LCAyMTAsIDE2MCwgMiwgMjIzLCA1NSwgMTAzLCA1OCwgMSwgNCwgMjEwLCAxNjAsIAotICAgIDIsIDI0OSwgMTAwLCA1OCwgMSwgNCwgMjQ1LCA4LCA1OCwgMSwgNCwgMjE2LCAxNzksIDM4LCAyNDYsIDExOCwgMjQyLCAKLSAgICAxMzcsIDI1NSwgMTQsIDM4LCAyNDYsIDExOCwgMjU1LCAzLCAyNTUsIDE0LCAzOCwgMjE5LCA2OSwgNTEsIDM4LCAyMTgsIDYsIAotICAgIDc4LCAzOCwgMjMxLCAyMzEsIDM4LCAyNDIsIDEzNCwgMzgsIDIzMSwgMjI5LCAzOCwgMjU1LCAxLCAzOCwgMjQyLCAxMzUsIAotICAgIDM4LCAyNTUsIDIsIDM4LCA3LCA0LCAxLCAyMjMsIDIyNCwgNTEsIDM4LCAyNTEsIDE0NSwgMzgsIDIzMSwgMjMwLCAzOCwgCi0gICAgNTIsIDI1MCwgMzEsIDQ4LCAzOCwgMjI2LCAyMjUsIDQ4LCAzOCwgMjEwLCAzNSwgNTEsIDM4LCAyMzUsIDE3MiwgNTEsIDM4LCAKLSAgICAyMTQsIDE1MSwgNDgsIDM4LCAyMTQsIDEzNCwgNDgsIDM4LCA3LCA0LCAxLCAyNDQsIDYzLCAyMDQsIDExNSwgNDgsIDM4LCAKLSAgICA3LCA0LCAxLCAyNTQsIDI0MywgMzgsIDcsIDQsIDEsIDI1NCwgNzMsIDM4LCA3LCA0LCAxLCAyNTMsIDE3NiwgMzgsIDcsIDQsIAotICAgIDEsIDI1MSwgNjcsIDI1MCwgMTgzLCAzOCwgNywgNCwgMSwgMjM1LCAyMTMsIDI0OSwgNjAsIDM4LCA3LCA0LCAxLCAyNDUsIAotICAgIDU5LCAzOCwgNywgNCwgMSwgMjQzLCAyMDIsIDM4LCA3LCAxLCA0LCA2LCAyNDMsIDIwMiwgMzgsIDcsIDQsIDEsIDIzNSwgCi0gICAgMjMsIDM4LCA3LCA0LCAxLCAxNTYsIDM4LCA3LCAxLCA0LCA2LCAxNTYsIDM4LCA3LCAxLCA0LCA2LCAxOTMsIDM4LCA3LCA0LCAKLSAgICAxLCAyMzAsIDI1LCAzOCwgNywgMSwgNCwgNiwgMjMwLCAyNSwgMzgsIDcsIDEsIDQsIDYsIDE1MywgMzgsIDcsIDQsIDEsIAotICAgIDIyMywgMjI0LCAyMjIsIDE4NiwgMzgsIDcsIDQsIDEsIDIyMiwgOTEsIDM4LCA3LCA0LCAxLCAxOTksIDIyMiwgOTEsIDM4LCAKLSAgICA3LCA0LCAxLCAyMTAsIDE1OSwgMzgsIDUyLCAyMzUsIDE5MywgMjUxLCAxNDcsIDUxLCAzOCwgMjU0LCAxNDgsIDEyOCwgCi0gICAgMjE2LCA0MiwgNTEsIDM4LCA0MywgMjUzLCAyNTAsIDQ4LCAzOCwgNDQsIDI1MywgMjUwLCAyMiwgMTI0LCAyNTMsIDI1MCwgCi0gICAgNTEsIDcsIDYsIDEsIDExNSwgMiwgMjIyLCAyMzQsIDUxLCA3LCA0LCAxLCAxMTUsIDIsIDIyMiwgMjM0LCA1MSwgNywgNiwgCi0gICAgMSwgNTcsIDIsIDU5LCA0OCwgNywgNCwgMSwgNTcsIDIsIDU5LCA0OCwgNywgNiwgMSwgNTcsIDIsIDU5LCA1MSwgNywgNCwgCi0gICAgMSwgNTcsIDIsIDU5LCA1MSwgNywgNiwgMSwgNTcsIDIsIDIzMiwgMjE0LCA1MSwgNywgNCwgMSwgNTcsIDIsIDIzMiwgMjE0LCAKLSAgICA1MSwgNywgNiwgMSwgMjUxLCA2NywgMiwgMjUwLCAxODQsIDIyLCAxNDIsIDcsIDQsIDEsIDI1MSwgNjcsIDIsIDI1MCwgCi0gICAgMTg0LCAyMiwgMTQyLCA3LCA2LCAxLCAyNDksIDYxLCAyLCA1OSwgNDgsIDcsIDQsIDEsIDI0OSwgNjEsIDIsIDU5LCA0OCwgCi0gICAgNywgNiwgMSwgMjQ5LCA2MSwgMiwgNTksIDUxLCA3LCA0LCAxLCAyNDksIDYxLCAyLCA1OSwgNTEsIDcsIDYsIDEsIDI0OSwgCi0gICAgNjEsIDIsIDIzMiwgMjE0LCA1MSwgNywgNCwgMSwgMjQ5LCA2MSwgMiwgMjMyLCAyMTQsIDUxLCA3LCA2LCAxLCAyNDksIDYxLCAKLSAgICAyLCAyNTAsIDE4MywgNywgNCwgMSwgMjQ5LCA2MSwgMiwgMjUwLCAxODMsIDcsIDYsIDEsIDI0OSwgNjEsIDIsIDI1MCwgMzEsIAotICAgIDUxLCA3LCA0LCAxLCAyNDksIDYxLCAyLCAyNTAsIDMxLCA1MSwgNywgNiwgMSwgMTYwLCAyLCAyMzEsIDIzMywgMjIsIDI0MiwgCi0gICAgMTM2LCA3LCA0LCAxLCAxNjAsIDIsIDIzMSwgMjMzLCAyMiwgMjQyLCAxMzYsIDcsIDYsIDEsIDE2MCwgMiwgMjMxLCAyMzMsIAotICAgIDIyLCAxNDIsIDcsIDQsIDEsIDE2MCwgMiwgMjMxLCAyMzMsIDIyLCAxNDIsIDcsIDYsIDEsIDE2MCwgMiwgMjUwLCAzMSwgCi0gICAgNTEsIDcsIDQsIDEsIDE2MCwgMiwgMjUwLCAzMSwgNTEsIDcsIDYsIDEsIDE2MCwgMiwgMjE2LCA4OSwgNTEsIDcsIDQsIDEsIAotICAgIDE2MCwgMiwgMjE2LCA4OSwgNTEsIDcsIDYsIDEsIDE2MCwgMiwgMjUwLCAxODQsIDIyLCAyNTEsIDE0NiwgNywgNCwgMSwgCi0gICAgMTYwLCAyLCAyNTAsIDE4NCwgMjIsIDI1MSwgMTQ2LCA3LCA2LCAxLCAyNDUsIDcsIDIsIDU5LCA0OCwgNywgNCwgMSwgMjQ1LCAKLSAgICA3LCAyLCA1OSwgNDgsIDcsIDYsIDEsIDI0MywgMjAzLCAyLCAyMzEsIDIzMiwgNywgNCwgMSwgMjQzLCAyMDMsIDIsIDIzMSwgCi0gICAgMjMyLCA3LCA2LCAxLCAyNDIsIDYxLCAyLCA1OSwgNDgsIDcsIDQsIDEsIDI0MiwgNjEsIDIsIDU5LCA0OCwgNywgNiwgMSwgCi0gICAgMjQyLCA2MSwgMiwgNTksIDUxLCA3LCA0LCAxLCAyNDIsIDYxLCAyLCA1OSwgNTEsIDcsIDYsIDEsIDI0MiwgNjEsIDIsIAotICAgIDI0OCwgMSwgNywgNCwgMSwgMjQyLCA2MSwgMiwgMjQ4LCAxLCA3LCA2LCAxLCAyNDIsIDYxLCAyLCAyNTAsIDE4MywgNywgNCwgCi0gICAgMSwgMjQyLCA2MSwgMiwgMjUwLCAxODMsIDcsIDYsIDEsIDI0MiwgNjEsIDIsIDI1MSwgMTQ3LCA1MSwgNywgNCwgMSwgMjQyLCAKLSAgICA2MSwgMiwgMjUxLCAxNDcsIDUxLCA3LCA2LCAxLCAyNDAsIDE1NCwgMiwgMjE2LCA4OSwgNTEsIDcsIDQsIDEsIDI0MCwgCi0gICAgMTU0LCAyLCAyMTYsIDg5LCA1MSwgNywgNiwgMSwgMjQwLCAxNTQsIDIsIDI0OCwgMiwgMjIsIDE0MiwgNywgNCwgMSwgMjQwLCAKLSAgICAxNTQsIDIsIDI0OCwgMiwgMjIsIDE0MiwgNywgNiwgMSwgMjM1LCAyNCwgMiwgMTQyLCA3LCA0LCAxLCAyMzUsIDI0LCAyLCAKLSAgICAxNDIsIDcsIDYsIDEsIDIzNSwgMjQsIDIsIDU5LCA1MSwgNywgNCwgMSwgMjM1LCAyNCwgMiwgNTksIDUxLCA3LCA2LCAxLCAKLSAgICAyMzUsIDI0LCAyLCAyMzIsIDIxNCwgNTEsIDcsIDQsIDEsIDIzNSwgMjQsIDIsIDIzMiwgMjE0LCA1MSwgNywgNiwgMSwgCi0gICAgMjMzLCAxNDksIDIsIDU5LCA1MSwgNywgNCwgMSwgMjMzLCAxNDksIDIsIDU5LCA1MSwgNywgNiwgMSwgMjMzLCAxNDksIDIsIAotICAgIDU5LCAyNTIsIDQzLCAyMiwgMjMxLCAyMzIsIDcsIDQsIDEsIDIzMywgMTQ5LCAyLCA1OSwgMjUyLCA0MywgMjIsIDIzMSwgCi0gICAgMjMyLCA3LCA2LCAxLCAyMzMsIDE0OSwgMiwgMjMyLCAyMTQsIDUxLCA3LCA0LCAxLCAyMzMsIDE0OSwgMiwgMjMyLCAyMTQsIAotICAgIDUxLCA3LCA2LCAxLCAyMzMsIDE0OSwgMiwgMjUwLCAzMSwgNTEsIDcsIDQsIDEsIDIzMywgMTQ5LCAyLCAyNTAsIDMxLCA1MSwgCi0gICAgNywgNiwgMSwgMjMyLCA1MCwgMiwgMTQyLCA3LCA0LCAxLCAyMzIsIDUwLCAyLCAxNDIsIDcsIDYsIDEsIDIzMiwgNTAsIDIsIAotICAgIDU5LCA0OCwgNywgNCwgMSwgMjMyLCA1MCwgMiwgNTksIDQ4LCA3LCA2LCAxLCAyMzIsIDUwLCAyLCA1OSwgNTEsIDcsIDQsIAotICAgIDEsIDIzMiwgNTAsIDIsIDU5LCA1MSwgNywgNiwgMSwgMjMwLCAyNiwgMiwgNTksIDQ4LCA3LCA0LCAxLCAyMzAsIDI2LCAyLCAKLSAgICA1OSwgNDgsIDcsIDYsIDEsIDIzMCwgMjYsIDIsIDU5LCA1MSwgNywgNCwgMSwgMjMwLCAyNiwgMiwgNTksIDUxLCA3LCA2LCAKLSAgICAxLCAyMzAsIDI2LCAyLCAyMzIsIDIxNCwgNTEsIDcsIDQsIDEsIDIzMCwgMjYsIDIsIDIzMiwgMjE0LCA1MSwgNywgNiwgMSwgCi0gICAgMjMwLCAyNiwgMiwgMjUwLCAzMSwgNTEsIDcsIDQsIDEsIDIzMCwgMjYsIDIsIDI1MCwgMzEsIDUxLCA3LCA2LCAxLCAxNDQsIAotICAgIDIsIDIxNiwgODksIDIyLCAxNDIsIDcsIDQsIDEsIDE0NCwgMiwgMjE2LCA4OSwgMjIsIDE0MiwgNywgNiwgMSwgMTQ0LCAyLCAKLSAgICAyMTYsIDg5LCAyMiwgMjQ4LCAxLCA3LCA0LCAxLCAxNDQsIDIsIDIxNiwgODksIDIyLCAyNDgsIDEsIDcsIDYsIDEsIDE0NCwgCi0gICAgMiwgMjMxLCAyMzMsIDIyLCAyNDIsIDEzNiwgNywgNCwgMSwgMTQ0LCAyLCAyMzEsIDIzMywgMjIsIDI0MiwgMTM2LCA3LCA2LCAKLSAgICAxLCAxNDQsIDIsIDIzMSwgMjMzLCAyMiwgMTQyLCA3LCA0LCAxLCAxNDQsIDIsIDIzMSwgMjMzLCAyMiwgMTQyLCA3LCA2LCAKLSAgICAxLCAyMjYsIDEwNiwgMiwgMTQyLCA3LCA0LCAxLCAyMjYsIDEwNiwgMiwgMTQyLCA3LCA2LCAxLCAyMjYsIDEwNiwgMiwgNTksIAotICAgIDQ4LCA3LCA0LCAxLCAyMjYsIDEwNiwgMiwgNTksIDQ4LCA3LCA2LCAxLCAyMjMsIDIyNCwgMiwgNTksIDQ4LCA3LCA0LCAxLCAKLSAgICAyMjMsIDIyNCwgMiwgNTksIDQ4LCA3LCA2LCAxLCAyMjMsIDIyNCwgMiwgNTksIDUxLCA3LCA0LCAxLCAyMjMsIDIyNCwgMiwgCi0gICAgNTksIDUxLCA3LCA2LCAxLCAyMjMsIDIyNCwgMiwgNTksIDI1MiwgNDMsIDIyLCAyMzEsIDIzMiwgNywgNCwgMSwgMjIzLCAKLSAgICAyMjQsIDIsIDU5LCAyNTIsIDQzLCAyMiwgMjMxLCAyMzIsIDcsIDYsIDEsIDIyMywgMjI0LCAyLCAyMzIsIDIxNCwgNTEsIDcsIAotICAgIDQsIDEsIDIyMywgMjI0LCAyLCAyMzIsIDIxNCwgNTEsIDcsIDYsIDEsIDIyMiwgOTIsIDIsIDU5LCA0OCwgNywgNCwgMSwgCi0gICAgMjIyLCA5MiwgMiwgNTksIDQ4LCA3LCA2LCAxLCAyMjIsIDkyLCAyLCA1OSwgNTEsIDcsIDQsIDEsIDIyMiwgOTIsIDIsIDU5LCAKLSAgICA1MSwgNywgNiwgMSwgMjIyLCA5MiwgMiwgMjU1LCAzLCAyMiwgNTksIDQ4LCA3LCA0LCAxLCAyMjIsIDkyLCAyLCAyNTUsIDMsIAotICAgIDIyLCA1OSwgNDgsIDcsIDYsIDEsIDIyMiwgOTIsIDIsIDI1MCwgMjM1LCAyMiwgNTksIDQ4LCA3LCA0LCAxLCAyMjIsIDkyLCAKLSAgICAyLCAyNTAsIDIzNSwgMjIsIDU5LCA0OCwgNywgNiwgMSwgMjIyLCA5MiwgMiwgNTksIDI1MiwgNDMsIDIyLCA1OSwgNDgsIDcsIAotICAgIDQsIDEsIDIyMiwgOTIsIDIsIDU5LCAyNTIsIDQzLCAyMiwgNTksIDQ4LCA3LCA2LCAxLCAyMTcsIDE1MywgMiwgNTksIDQ4LCAKLSAgICA3LCA0LCAxLCAyMTcsIDE1MywgMiwgNTksIDQ4LCA3LCA2LCAxLCAyMTcsIDE1MywgMiwgNTksIDUxLCA3LCA0LCAxLCAyMTcsIAotICAgIDE1MywgMiwgNTksIDUxLCA3LCA2LCAxLCAyMTcsIDE1MywgMiwgMjMyLCAyMTQsIDUxLCA3LCA0LCAxLCAyMTcsIDE1MywgMiwgCi0gICAgMjMyLCAyMTQsIDUxLCA3LCA2LCAxLCAyMTcsIDE1MywgMiwgMjUwLCAzMSwgNTEsIDcsIDQsIDEsIDIxNywgMTUzLCAyLCAKLSAgICAyNTAsIDMxLCA1MSwgNywgNiwgMSwgMTA0LCAyLCAyNDgsIDIsIDUxLCA3LCA0LCAxLCAxMDQsIDIsIDI0OCwgMiwgNTEsIDcsIAotICAgIDYsIDEsIDEwNCwgMiwgMjE2LCA4OSwgNTEsIDcsIDQsIDEsIDEwNCwgMiwgMjE2LCA4OSwgNTEsIDcsIDYsIDEsIDEwNCwgMiwgCi0gICAgMjUwLCAzMSwgNTEsIDcsIDQsIDEsIDEwNCwgMiwgMjUwLCAzMSwgNTEsIDcsIDYsIDEsIDEwNCwgMiwgMjE2LCA4OSwgMjIsIAotICAgIDE0MiwgNywgNCwgMSwgMTA0LCAyLCAyMTYsIDg5LCAyMiwgMTQyLCA3LCA2LCAxLCAxMDQsIDIsIDIzMSwgMjMzLCAyMiwgCi0gICAgMjQ4LCAxLCA3LCA0LCAxLCAxMDQsIDIsIDIzMSwgMjMzLCAyMiwgMjQ4LCAxLCA3LCA2LCAxLCAyMTQsIDEwNiwgMiwgMTgyLCAKLSAgICA3LCA0LCAxLCAyMTQsIDEwNiwgMiwgMTgyLCA3LCA2LCAxLCAyMTQsIDEwNiwgMiwgNTksIDUxLCA3LCA0LCAxLCAyMTQsIAotICAgIDEwNiwgMiwgNTksIDUxLCA3LCA2LCAxLCAyMTIsIDk5LCAyLCAyNDIsIDEzNiwgNywgNCwgMSwgMjEyLCA5OSwgMiwgMjQyLCAKLSAgICAxMzYsIDcsIDYsIDEsIDIxMiwgOTksIDIsIDE0MiwgNywgNCwgMSwgMjEyLCA5OSwgMiwgMTQyLCA3LCA2LCAxLCAyMTIsIAotICAgIDk5LCAyLCAyNDgsIDEsIDcsIDQsIDEsIDIxMiwgOTksIDIsIDI0OCwgMSwgNywgNiwgMSwgMjEyLCA5OSwgMiwgNTksIDQ4LCAKLSAgICA3LCA0LCAxLCAyMTIsIDk5LCAyLCA1OSwgNDgsIDcsIDYsIDEsIDIxMiwgOTksIDIsIDU5LCA1MSwgNywgNCwgMSwgMjEyLCAKLSAgICA5OSwgMiwgNTksIDUxLCA3LCA2LCAxLCAyMTEsIDE3OSwgMiwgNTksIDQ4LCA3LCA0LCAxLCAyMTEsIDE3OSwgMiwgNTksIAotICAgIDQ4LCA3LCA2LCAxLCAyMTEsIDE3OSwgMiwgMjQ4LCAxLCA3LCA0LCAxLCAyMTEsIDE3OSwgMiwgMjQ4LCAxLCA3LCA2LCAxLCAKLSAgICAyMTEsIDExOCwgMiwgNTksIDQ4LCA3LCA0LCAxLCAyMTEsIDExOCwgMiwgNTksIDQ4LCA3LCA2LCAxLCAyMTAsIDE2MCwgMiwgCi0gICAgMjUwLCAzMCwgNywgNCwgMSwgMjEwLCAxNjAsIDIsIDI1MCwgMzAsIDcsIDYsIDEsIDIxMCwgMTYwLCAyLCA1OSwgNTEsIDcsIAotICAgIDQsIDEsIDIxMCwgMTYwLCAyLCA1OSwgNTEsIDcsIDYsIDEsIDIxMCwgMTYwLCAyLCAyMzIsIDIxNCwgNTEsIDcsIDQsIDEsIAotICAgIDIxMCwgMTYwLCAyLCAyMzIsIDIxNCwgNTEsIDcsIDQsIDEsIDI0MiwgNjEsIDIsIDIzMiwgMjE0LCA1MSwgNywgNCwgMSwgCi0gICAgMjE3LCAxNTMsIDIsIDI0OCwgMSwgNywgNCwgMSwgMjEyLCA5OSwgMiwgMjIyLCAyMzQsIDQ4LCA3LCA0LCAxLCAyMTEsIAotICAgIDExOCwgMiwgMjIyLCAyMzQsIDQ4LCA3LCA0LCAxLCAxMTUsIDIsIDQ0LCAxNjMsIDIyMiwgMjMzLCA3LCA0LCAxLCAxOTksIAotICAgIDIyMiwgOTIsIDIsIDU5LCA0OCwgNywgNCwgMSwgMTk5LCAyMjIsIDkyLCAyLCAyNDcsIDI1NSwgOTEsIDcsIDQsIDEsIDE5OSwgCi0gICAgMjIyLCA5MiwgMiwgMTI1LCA5MSwgNywgNiwgMSwgMjIwLCA3NiwgMjIyLCA5MSwgNywgNCwgMSwgMjQ4LCA1NCwgNywgNiwgCi0gICAgMSwgMTE1LCAyLCA1OSwgNTEsIDcsIDQsIDEsIDExNSwgMiwgNTksIDUxLCA3LCA2LCAxLCAxMTUsIDIsIDI0MSwgNTIsIDQ4LCAKLSAgICA3LCA0LCAxLCAxMTUsIDIsIDI0MSwgNTIsIDQ4LCA3LCA2LCAxLCAxMTUsIDIsIDI1MCwgMzEsIDIyLCAxNDIsIDcsIDQsIDEsIAotICAgIDExNSwgMiwgMjUwLCAzMSwgMjIsIDE0MiwgNywgNiwgMSwgMTE1LCAyLCAyNTAsIDMxLCAyMiwgMjQyLCAxMzYsIDcsIDQsIAotICAgIDEsIDExNSwgMiwgMjUwLCAzMSwgMjIsIDI0MiwgMTM2LCA3LCA2LCAxLCAxMTUsIDIsIDI1MCwgMzEsIDIyLCAyNDEsIDUyLCAKLSAgICA0OCwgNywgNCwgMSwgMTE1LCAyLCAyNTAsIDMxLCAyMiwgMjQxLCA1MiwgNDgsIDcsIDYsIDEsIDExNSwgMiwgMjUwLCAzMSwgCi0gICAgMjIsIDE4MiwgNywgNCwgMSwgMTE1LCAyLCAyNTAsIDMxLCAyMiwgMTgyLCA3LCA2LCAxLCAxMTUsIDIsIDI1MCwgMzEsIDIyLCAKLSAgICA1OSwgNTEsIDcsIDQsIDEsIDExNSwgMiwgMjUwLCAzMSwgMjIsIDU5LCA1MSwgNywgNiwgMSwgMTE1LCAyLCAyNTEsIDE0NywgCi0gICAgMjIsIDE0MiwgNywgNCwgMSwgMTE1LCAyLCAyNTEsIDE0NywgMjIsIDE0MiwgNywgNiwgMSwgMTE1LCAyLCAyNTEsIDE0NywgCi0gICAgMjIsIDI0MiwgMTM2LCA3LCA0LCAxLCAxMTUsIDIsIDI1MSwgMTQ3LCAyMiwgMjQyLCAxMzYsIDcsIDYsIDEsIDExNSwgMiwgCi0gICAgMjUxLCAxNDcsIDIyLCAyNDEsIDUyLCA0OCwgNywgNCwgMSwgMTE1LCAyLCAyNTEsIDE0NywgMjIsIDI0MSwgNTIsIDQ4LCA3LCAKLSAgICA2LCAxLCAxMTUsIDIsIDI1MSwgMTQ3LCAyMiwgMTgyLCA3LCA0LCAxLCAxMTUsIDIsIDI1MSwgMTQ3LCAyMiwgMTgyLCA3LCAKLSAgICA2LCAxLCAxMTUsIDIsIDI1MSwgMTQ3LCAyMiwgNTksIDUxLCA3LCA0LCAxLCAxMTUsIDIsIDI1MSwgMTQ3LCAyMiwgNTksIAorICAgIDAsIDIxOSwgMjAsIDI0NSwgMzksIDc5LCAyMjQsIDEsIDc5LCA1NCwgNTAsIDI0NywgMTQwLCA1MCwgMjI1LCAxODUsIDUwLCAKKyAgICAyNTQsIDEzNCwgMjU0LCA2NSwgNDMsIDIyNiwgNywgNDQsIDIyNiwgNywgMjUzLCAyMjQsIDk2LCA1MCwgMjQ5LCAyMjcsIAorICAgIDI0MCwgMTc0LCAyNDMsIDIzNiwgMjE4LCAxMzEsIDIxOSwgNDgsIDIxLCAyMTAsIDg2LCAyMSwgMTExLCAyMSwgMTA1LCAyMSwgCisgICAgMTU4LCAyMSwgMTYxLCAyMSwgMTkwLCAyMSwgMTk1LCAyMSwgMTk5LCAyMSwgMTk2LCAyMSwgMjAxLCAyNDksIDIzNCwgMjIwLCAKKyAgICAxNTIsIDIzMywgMjEsIDUwLCAyNDUsIDEwNiwgNTAsIDI0MiwgMTM3LCA1MCwgMjI0LCAxNiwgNzksIDI0OSwgMjI1LCAyNTMsIAorICAgIDIxNCwgNywgNiwgMSwgNjEsIDcsIDYsIDEsIDI1MywgMTY2LCA3LCA2LCAxLCAyNTEsIDc0LCA3LCA2LCAxLCAyNDksIDY4LCAKKyAgICA3LCA2LCAxLCA3NiwgNywgNiwgMSwgMjQ1LCAxNCwgNywgNiwgMSwgMjQzLCAyMDksIDcsIDYsIDEsIDI0MiwgNjcsIDcsIDYsIAorICAgIDEsIDc0LCA3LCA2LCAxLCAyMzUsIDE1MCwgNywgNiwgMSwgMjM1LCAyOSwgNywgNiwgMSwgMTU2LCA3LCA2LCAxLCAxOTQsIAorICAgIDcsIDYsIDEsIDIzMCwgMzAsIDcsIDYsIDEsIDc4LCA3LCA2LCAxLCAyMjYsIDEwOSwgNywgNiwgMSwgMjI0LCA5OSwgNywgNiwgCisgICAgMSwgMTUzLCA3LCA2LCAxLCAyMjIsIDkzLCA3LCA2LCAxLCAyMTcsIDE1MywgNywgNiwgMSwgNjksIDcsIDYsIDEsIDIxNCwgCisgICAgMTA1LCA3LCA2LCAxLCAyMTIsIDk4LCA3LCA2LCAxLCAyMTEsIDE3OCwgNywgNiwgMSwgMjExLCAxMTcsIDcsIDYsIDEsIAorICAgIDIxMCwgMTU5LCA0MywgNDIsIDEyNywgMjIzLCA1MywgMjE5LCA0OCwgNDQsIDQyLCAxMjcsIDI1MCwgMzksIDI1NSwgMjMsIAorICAgIDEyMSwgMjMyLCAyMTksIDI0MiwgMTQ0LCAyNTUsIDIzLCA3LCA0LCAxLCA2MSwgNywgNCwgMSwgMjUzLCAxNjYsIDcsIDQsIAorICAgIDEsIDI1MSwgNzQsIDcsIDQsIDEsIDI0OSwgNjgsIDcsIDQsIDEsIDc2LCA3LCA0LCAxLCAyNDUsIDE0LCA3LCA0LCAxLCAKKyAgICAyNDMsIDIwOSwgNywgNCwgMSwgMjQyLCA2NywgNywgNCwgMSwgNzQsIDcsIDQsIDEsIDIzNSwgMTUwLCA3LCA0LCAxLCAyMzUsIAorICAgIDI5LCA3LCA0LCAxLCAxNTYsIDcsIDQsIDEsIDE5NCwgNywgNCwgMSwgMjMwLCAzMCwgNywgNCwgMSwgNzgsIDcsIDQsIDEsIAorICAgIDIyNiwgMTA5LCA3LCA0LCAxLCAyMjQsIDk5LCA3LCA0LCAxLCAxNTMsIDcsIDQsIDEsIDIyMiwgOTMsIDcsIDQsIDEsIDIxNywgCisgICAgMTUzLCA3LCA0LCAxLCA2OSwgNywgNCwgMSwgMjE0LCAxMDUsIDcsIDQsIDEsIDIxMiwgOTgsIDcsIDQsIDEsIDIxMSwgMTc4LCAKKyAgICA3LCA0LCAxLCAyMTEsIDExNywgNywgNCwgMSwgMjEwLCAxNTksIDQzLCAyNDksIDEwNywgMTI3LCA2NywgMjMyLCAyMTksIAorICAgIDQ0LCAyNDksIDEwNywgMTI3LCAxODQsIDIyOCwgNzgsIDIxOSwgMjAsIDIzNSwgMjAwLCAyNDUsIDM5LCA3OSwgMjUwLCAKKyAgICAxODQsIDUwLCAyMjQsIDIzMSwgNTAsIDI0OSwgMTA2LCA1MCwgMjExLCA0MCwgNTAsIDI1MSwgMTQzLCAxMzAsIDIyMSwgCisgICAgMTc1LCA1MCwgMjQ4LCA5LCAyNDksIDE3MSwgNTAsIDI0NCwgMTQ0LCAyMjYsIDE1OCwgMjM1LCAyNDUsIDIzMywgNDgsIDUyLCAKKyAgICAyNTQsIDExOCwgMjI0LCAxLCA3OSwgMjI4LCA1NywgNTAsIDIxOSwgNTQsIDI0MCwgMTc1LCAyMjMsIDEwNSwgNTAsIDIzMSwgCisgICAgMjM3LCAyNDgsIDc5LCA1MCwgMjI1LCAyNCwgNTAsIDIxOCwgMjQsIDEwNSwgMjE4LCAyNCwgMTU4LCAyNTUsIDEyLCAyNTUsIAorICAgIDIzLCAyMzAsIDIzMywgNTAsIDIyNSwgNzEsIDUwLCAyMzAsIDIyOSwgMjQ3LCAxMjgsIDI1MCwgMTkxLCAyMTgsIDI0LCAKKyAgICAxMTEsIDIzMSwgMTUzLCAyMjYsIDE1OCwgMjM1LCAyNDUsIDIyMiwgMjUwLCA1MiwgMjU0LCAxMTgsIDIyNCwgMSwgNzksIAorICAgIDIxMiwgMTE0LCAyNDQsIDEwLCAxMjMsIDIyNCwgMjQsIDIxMiwgMTE0LCAyNDQsIDEwLCAxMjMsIDI0MiwgMzQsIDIxMiwgCisgICAgMTE0LCAyNDQsIDEwLCAxMzQsIDIyNCwgMjIsIDIzNSwgMjAwLCAyMjQsIDE2LCA3OSwgNywgNiwgMSwgMTE2LCAyLCAyNDIsIAorICAgIDE0MywgNywgNiwgMSwgMTE2LCAyLCAxNDIsIDcsIDYsIDEsIDExNiwgMiwgMjUwLCAzOCwgNywgNiwgMSwgMTE2LCAyLCAKKyAgICAxODQsIDcsIDYsIDEsIDExNiwgMiwgMjQ4LCA5LCA3LCA2LCAxLCAxMTYsIDIsIDIyMiwgMjM3LCA0OCwgNywgNiwgMSwgCisgICAgMjU0LCAyNTIsIDcsIDYsIDEsIDI1MSwgNzUsIDIsIDI1MCwgMTkxLCA3LCA2LCAxLCAxNjAsIDIsIDI0MiwgMTQzLCA3LCA2LCAKKyAgICAxLCAxNjAsIDIsIDE0MiwgNywgNiwgMSwgMTYwLCAyLCAyNTAsIDM4LCA3LCA2LCAxLCAxNjAsIDIsIDI0OCwgOSwgNywgNiwgCisgICAgMSwgMjQwLCAxNjEsIDIsIDI0MiwgMTQzLCA3LCA2LCAxLCAyNDAsIDE2MSwgMiwgMTQyLCA3LCA2LCAxLCAyNDAsIDE2MSwgCisgICAgMiwgMjUwLCAzOCwgNywgNiwgMSwgMjQwLCAxNjEsIDIsIDI0OCwgOSwgNywgNiwgMSwgMjQ1LCA2NywgNywgNiwgMSwgMjMwLCAKKyAgICAzMSwgMiwgMTg0LCA3LCA2LCAxLCAxNDQsIDIsIDI0MiwgMTQzLCA3LCA2LCAxLCAxNDQsIDIsIDE0MiwgNywgNiwgMSwgCisgICAgMTQ0LCAyLCAyNTAsIDM4LCA3LCA2LCAxLCAxNDQsIDIsIDE4NCwgNywgNiwgMSwgMTQ0LCAyLCAyNDgsIDksIDIzMCwgODksIAorICAgIDUwLCA3LCA2LCAxLCAxNDQsIDIsIDkxLCA3LCA2LCAxLCAxMDQsIDIsIDI0MiwgMTQzLCA3LCA2LCAxLCAxMDQsIDIsIDE0MiwgCisgICAgNywgNiwgMSwgMTA0LCAyLCAyNTAsIDM4LCA3LCA2LCAxLCAxMDQsIDIsIDI0OCwgOSwgNywgNiwgMSwgMjExLCAxMTgsIDIsIAorICAgIDE0MiwgNywgNiwgMSwgMjE2LCAxNTIsIDcsIDQsIDEsIDIyMCwgNzgsIDIyMiwgOTMsIDcsIDQsIDEsIDExNiwgMiwgMjQyLCAKKyAgICAxNDMsIDcsIDQsIDEsIDExNiwgMiwgMTQyLCA3LCA0LCAxLCAxMTYsIDIsIDI1MCwgMzgsIDcsIDQsIDEsIDExNiwgMiwgCisgICAgMTg0LCA3LCA0LCAxLCAxMTYsIDIsIDI0OCwgOSwgNywgNCwgMSwgMTE2LCAyLCAyMjIsIDIzNywgNDgsIDcsIDQsIDEsIAorICAgIDI1NCwgMjUyLCA3LCA0LCAxLCAyNTEsIDc1LCAyLCAyNTAsIDE5MSwgNywgNCwgMSwgMTYwLCAyLCAyNDIsIDE0MywgNywgNCwgCisgICAgMSwgMTYwLCAyLCAxNDIsIDcsIDQsIDEsIDE2MCwgMiwgMjUwLCAzOCwgNywgNCwgMSwgMTYwLCAyLCAyNDgsIDksIDcsIDQsIAorICAgIDEsIDI0MCwgMTYxLCAyLCAyNDIsIDE0MywgNywgNCwgMSwgMjQwLCAxNjEsIDIsIDE0MiwgNywgNCwgMSwgMjQwLCAxNjEsIAorICAgIDIsIDI1MCwgMzgsIDcsIDQsIDEsIDI0MCwgMTYxLCAyLCAyNDgsIDksIDcsIDQsIDEsIDI0NSwgNjcsIDcsIDQsIDEsIDIzMCwgCisgICAgMzEsIDIsIDE4NCwgNywgNCwgMSwgMTQ0LCAyLCAyNDIsIDE0MywgNywgNCwgMSwgMTQ0LCAyLCAxNDIsIDcsIDQsIDEsIAorICAgIDE0NCwgMiwgMjUwLCAzOCwgNywgNCwgMSwgMTQ0LCAyLCAxODQsIDcsIDQsIDEsIDE0NCwgMiwgMjQ4LCA5LCAyNDcsIDE3NywgCisgICAgNTAsIDcsIDQsIDEsIDE0NCwgMiwgOTEsIDcsIDQsIDEsIDEwNCwgMiwgMjQyLCAxNDMsIDcsIDQsIDEsIDEwNCwgMiwgMTQyLCAKKyAgICA3LCA0LCAxLCAxMDQsIDIsIDI1MCwgMzgsIDcsIDQsIDEsIDEwNCwgMiwgMjQ4LCA5LCA3LCA0LCAxLCAyMTEsIDExOCwgMiwgCisgICAgMTQyLCA3LCA0LCAxLCAyMTYsIDE1MiwgNywgNCwgMSwgMjExLCAxMTgsIDIsIDI0OCwgOSwgNywgNiwgMSwgMTE2LCAyLCAKKyAgICAyMzEsIDIzNywgNywgNCwgMSwgMTE2LCAyLCAyMzEsIDIzNywgNywgNiwgMSwgMTE2LCAyLCAyNTEsIDE1NCwgNywgNCwgMSwgCisgICAgMTE2LCAyLCAyNTEsIDE1NCwgNywgNiwgMSwgMTE2LCAyLCAyMjYsIDIyOCwgNywgNCwgMSwgMTE2LCAyLCAyMjYsIDIyOCwgCisgICAgNywgNiwgMSwgMjUxLCA3NSwgMiwgMTQyLCA3LCA0LCAxLCAyNTEsIDc1LCAyLCAxNDIsIDcsIDYsIDEsIDI1MSwgNzUsIDIsIAorICAgIDI1MCwgMzgsIDcsIDQsIDEsIDI1MSwgNzUsIDIsIDI1MCwgMzgsIDcsIDYsIDEsIDI1MSwgNzUsIDIsIDU5LCA0OCwgNywgNCwgCisgICAgMSwgMjUxLCA3NSwgMiwgNTksIDQ4LCA3LCA2LCAxLCAyNTEsIDc1LCAyLCAyNTAsIDI0MiwgNywgNCwgMSwgMjUxLCA3NSwgCisgICAgMiwgMjUwLCAyNDIsIDcsIDYsIDEsIDI0OSwgNjksIDIsIDI1MCwgMjQyLCA3LCA0LCAxLCAyNDksIDY5LCAyLCAyNTAsIAorICAgIDI0MiwgNywgNiwgMSwgMjQ5LCA2OSwgMiwgOTEsIDcsIDQsIDEsIDI0OSwgNjksIDIsIDkxLCA3LCA2LCAxLCAxNjAsIDIsIAorICAgIDIzMSwgMjM3LCA3LCA0LCAxLCAxNjAsIDIsIDIzMSwgMjM3LCA3LCA2LCAxLCAxNjAsIDIsIDI1MSwgMTU0LCA3LCA0LCAxLCAKKyAgICAxNjAsIDIsIDI1MSwgMTU0LCA3LCA2LCAxLCAxNjAsIDIsIDU5LCA0OCwgNywgNCwgMSwgMTYwLCAyLCA1OSwgNDgsIDcsIDYsIAorICAgIDEsIDE2MCwgMiwgMjI2LCAyMjgsIDcsIDQsIDEsIDE2MCwgMiwgMjI2LCAyMjgsIDcsIDYsIDEsIDE2MCwgMiwgMjUwLCAKKyAgICAyNDIsIDcsIDQsIDEsIDE2MCwgMiwgMjUwLCAyNDIsIDcsIDYsIDEsIDI0MywgMjEwLCAyLCAyNTAsIDM4LCA3LCA0LCAxLCAKKyAgICAyNDMsIDIxMCwgMiwgMjUwLCAzOCwgNywgNiwgMSwgMjQzLCAyMTAsIDIsIDI1MSwgMTU0LCA3LCA0LCAxLCAyNDMsIDIxMCwgCisgICAgMiwgMjUxLCAxNTQsIDcsIDYsIDEsIDI0MywgMjEwLCAyLCA1OSwgNDgsIDcsIDQsIDEsIDI0MywgMjEwLCAyLCA1OSwgNDgsIAorICAgIDcsIDYsIDEsIDI0MywgMjEwLCAyLCAyNTAsIDE5MSwgNywgNCwgMSwgMjQzLCAyMTAsIDIsIDI1MCwgMTkxLCA3LCA2LCAxLCAKKyAgICAyNDIsIDY4LCAyLCAyNTAsIDM4LCA3LCA0LCAxLCAyNDIsIDY4LCAyLCAyNTAsIDM4LCA3LCA2LCAxLCAyNDIsIDY4LCAyLCAKKyAgICA5MSwgNywgNCwgMSwgMjQyLCA2OCwgMiwgOTEsIDcsIDYsIDEsIDI0MCwgMTYxLCAyLCAxODQsIDcsIDQsIDEsIDI0MCwgCisgICAgMTYxLCAyLCAxODQsIDcsIDYsIDEsIDI0MCwgMTYxLCAyLCAyMzEsIDIzNywgNywgNCwgMSwgMjQwLCAxNjEsIDIsIDIzMSwgCisgICAgMjM3LCA3LCA2LCAxLCAyNDAsIDE2MSwgMiwgMjUxLCAxNTQsIDcsIDQsIDEsIDI0MCwgMTYxLCAyLCAyNTEsIDE1NCwgNywgCisgICAgNiwgMSwgMjQwLCAxNjEsIDIsIDIyNiwgMjI4LCA3LCA0LCAxLCAyNDAsIDE2MSwgMiwgMjI2LCAyMjgsIDcsIDYsIDEsIAorICAgIDI0MCwgMTYxLCAyLCA1OSwgNDgsIDcsIDQsIDEsIDI0NywgMTI3LCA3NCwgNywgNiwgMjcsIDIzNiwgMzgsIDcsIDQsIDI3LCAKKyAgICAyMzYsIDM4LCA3LCA2LCAxLCAyMzUsIDE1MSwgMiwgMjUwLCAzOCwgNywgNCwgMSwgMjM1LCAxNTEsIDIsIDI1MCwgMzgsIDcsIAorICAgIDYsIDEsIDIzNSwgMzAsIDIsIDI1MCwgMTkxLCA3LCA0LCAxLCAyMzUsIDMwLCAyLCAyNTAsIDE5MSwgNywgNCwgMSwgMjMzLCAKKyAgICAyNDUsIDcsIDYsIDEsIDIzMywgMTU1LCAyLCAxNDIsIDcsIDQsIDEsIDIzMywgMTU1LCAyLCAxNDIsIDcsIDYsIDEsIDIzMywgCisgICAgMTU1LCAyLCAyNTAsIDE5MSwgNywgNCwgMSwgMjMzLCAxNTUsIDIsIDI1MCwgMTkxLCA3LCA2LCAxLCAyMzMsIDE1NSwgMiwgCisgICAgMjUwLCAyNDIsIDcsIDQsIDEsIDIzMywgMTU1LCAyLCAyNTAsIDI0MiwgNywgNiwgMSwgMjMzLCAxNTUsIDIsIDIzMCwgMjI5LCAKKyAgICAyNDcsIDEyOCwgNywgNCwgMSwgMjMzLCAxNTUsIDIsIDIzMCwgMjI5LCAyNDcsIDEyOCwgNywgNiwgMSwgMjMzLCAxNTUsIDIsIAorICAgIDkxLCA3LCA0LCAxLCAyMzMsIDE1NSwgMiwgOTEsIDcsIDYsIDEsIDIzMCwgMzEsIDIsIDE0MiwgNywgNCwgMSwgMjMwLCAzMSwgCisgICAgMiwgMTQyLCA3LCA2LCAxLCAyMzAsIDMxLCAyLCAyNTAsIDE5MSwgNywgNCwgMSwgMjMwLCAzMSwgMiwgMjUwLCAxOTEsIDcsIAorICAgIDYsIDEsIDIzMCwgMzEsIDIsIDI1MCwgMjQyLCA3LCA0LCAxLCAyMzAsIDMxLCAyLCAyNTAsIDI0MiwgNywgNCwgMSwgMjMwLCAKKyAgICAzMSwgMjI0LCAyMDcsIDI1MSwgODYsIDI1NCwgNjUsIDcsIDYsIDEsIDI0NSwgMTQ2LCA3LCA0LCAxLCAyNDUsIDE0NiwgNywgCisgICAgNiwgMSwgMTQ0LCAyLCAyMzEsIDIzNywgNywgNCwgMSwgMTQ0LCAyLCAyMzEsIDIzNywgNywgNiwgMSwgMTQ0LCAyLCAyNTEsIAorICAgIDE1NCwgNywgNCwgMSwgMTQ0LCAyLCAyNTEsIDE1NCwgNywgNiwgMSwgMTQ0LCAyLCA1MiwgMTQyLCA3LCA0LCAxLCAxNDQsIAorICAgIDIsIDUyLCAxNDIsIDcsIDYsIDI3LCAyMjYsIDIzOCwgNywgNCwgMjcsIDIyNiwgMjM4LCA3LCA2LCAxLCAyMjMsIDIyNywgMiwgCisgICAgMTQyLCA3LCA0LCAxLCAyMjMsIDIyNywgMiwgMTQyLCA3LCA2LCAxLCAyMjMsIDIyNywgMiwgMjUwLCAxOTEsIDcsIDQsIDEsIAorICAgIDIyMywgMjI3LCAyLCAyNTAsIDE5MSwgNywgNiwgMSwgMjIzLCAyMjcsIDIsIDI1MCwgMjQyLCA3LCA0LCAxLCAyMjMsIDIyNywgCisgICAgMiwgMjUwLCAyNDIsIDcsIDYsIDEsIDIyMiwgOTQsIDIsIDE0MiwgNywgNCwgMSwgMjIyLCA5NCwgMiwgMTQyLCA3LCA2LCAxLCAKKyAgICAyMjIsIDk0LCAyLCAyNTAsIDM4LCA3LCA0LCAxLCAyMjIsIDk0LCAyLCAyNTAsIDM4LCA3LCA2LCAxLCAyMjIsIDk0LCAyLCAKKyAgICAyNTAsIDE5MSwgNywgNCwgMSwgMjIyLCA5NCwgMiwgMjUwLCAxOTEsIDcsIDYsIDEsIDIyMiwgOTQsIDIsIDI1MCwgMjQyLCAKKyAgICA3LCA0LCAxLCAyMjIsIDk0LCAyLCAyNTAsIDI0MiwgNywgNiwgMSwgMjE3LCAxNTQsIDIsIDI1MCwgMTkxLCA3LCA0LCAxLCAKKyAgICAyMTcsIDE1NCwgMiwgMjUwLCAxOTEsIDcsIDYsIDEsIDIxNywgMTU0LCAyLCAyNTAsIDI0MiwgNywgNCwgMSwgMjE3LCAxNTQsIAorICAgIDIsIDI1MCwgMjQyLCA3LCA2LCAxLCAyMTcsIDE1NCwgMiwgOTEsIDcsIDQsIDEsIDIxNywgMTU0LCAyLCA5MSwgNywgNiwgMSwgCisgICAgMTA0LCAyLCAxODQsIDcsIDQsIDEsIDEwNCwgMiwgMTg0LCA3LCA2LCAxLCAxMDQsIDIsIDIzMSwgMjM3LCA3LCA0LCAxLCAKKyAgICAxMDQsIDIsIDIzMSwgMjM3LCA3LCA2LCAxLCAxMDQsIDIsIDI1MSwgMTU0LCA3LCA0LCAxLCAxMDQsIDIsIDI1MSwgMTU0LCAKKyAgICA3LCA2LCAxLCAxMDQsIDIsIDIyMiwgMjM3LCA0OCwgNywgNCwgMSwgMTA0LCAyLCAyMjIsIDIzNywgNDgsIDcsIDYsIDEsIAorICAgIDEwNCwgMiwgNTIsIDE0MiwgNywgNCwgMSwgMTA0LCAyLCA1MiwgMTQyLCA3LCA2LCAxLCAxMDQsIDIsIDIyNiwgMjI4LCA3LCAKKyAgICA0LCAxLCAxMDQsIDIsIDIyNiwgMjI4LCA3LCA2LCAxLCAyMTIsIDk5LCAyLCAyNTAsIDM4LCA3LCA0LCAxLCAyMTIsIDk5LCAKKyAgICAyLCAyNTAsIDM4LCA3LCA2LCAxLCAyMTEsIDExOCwgMiwgMjUwLCAzOCwgNywgNCwgMSwgMjExLCAxMTgsIDIsIDI1MCwgMzgsIAorICAgIDcsIDYsIDEsIDIxMSwgMTE4LCAyLCAyNDgsIDksIDcsIDYsIDEsIDIxMCwgMTYwLCAyLCAxNDIsIDcsIDQsIDEsIDIxMCwgCisgICAgMTYwLCAyLCAxNDIsIDcsIDYsIDEsIDIxMCwgMTYwLCAyLCA1OSwgNDgsIDcsIDQsIDEsIDIxMCwgMTYwLCAyLCA1OSwgNDgsIAorICAgIDcsIDYsIDEsIDIxMCwgMTYwLCAyLCAyNTAsIDI0MiwgNywgNCwgMSwgMjEwLCAxNjAsIDIsIDI1MCwgMjQyLCA3LCA0LCAxLCAKKyAgICAyMDAsIDIyMiwgOTMsIDcsIDQsIDEsIDU3LCAyLCA5MSwgNywgNiwgMSwgNTcsIDIsIDEwMywgNywgNiwgMSwgNTcsIDIsIAorICAgIDIxNiwgMTIsIDcsIDQsIDEsIDU3LCAyLCAyMTYsIDEyLCA3LCA2LCAxLCAxMzgsIDE5NSwgNywgNCwgMSwgMTM4LCAxOTUsIAorICAgIDcsIDYsIDEsIDIwNCwgNzgsIDcsIDYsIDEsIDI1MSwgNzUsIDIsIDEwMywgNywgNCwgMSwgMjUxLCA3NSwgMiwgMTAzLCA3LCAKKyAgICA2LCAxLCAyNTQsIDIyOCwgMjQ5LCA2OCwgNywgNiwgMSwgMjQ5LCA2OSwgMiwgMTAzLCA3LCA2LCAxLCAyNDksIDY5LCAyLCAKKyAgICAyMTYsIDEyLCA3LCA0LCAxLCAyNDksIDY5LCAyLCAyMTYsIDEyLCA3LCA0LCAxLCAyMTUsIDk0LCAyNDgsIDYyLCA3LCA2LCAKKyAgICAxLCAyMjMsIDUyLCA3NiwgNywgNiwgMSwgMjIxLCAxOTcsIDcsIDYsIDEsIDIwNCwgNzYsIDcsIDYsIDEsIDI0NSwgMTUsIDIsIAorICAgIDEwMywgNywgNCwgMSwgMjQ1LCAxNSwgMiwgMTAzLCA3LCA2LCAxLCAyNDMsIDIxMCwgMiwgMTAzLCA3LCA2LCAxLCAyNDMsIAorICAgIDExNCwgNywgNCwgMSwgMjQwLCAyMDgsIDcsIDYsIDEsIDIzNSwgMTkyLCA3LCA2LCAxLCAyNDAsIDE2MSwgMiwgOTEsIDcsIAorICAgIDYsIDEsIDIzNSwgMzAsIDIsIDEwMywgNywgNCwgMSwgMjM1LCAzMCwgMiwgMTAzLCA3LCA0LCAxLCAyMzMsIDE1NSwgMiwgCisgICAgMTMwLCA3LCA0LCAxLCAyMzMsIDEwNiwgMiwgOTEsIDcsIDYsIDEsIDIxNSwgOTQsIDE5NCwgNywgNiwgMSwgMjMwLCAzMSwgCisgICAgMiwgNDMsIDEwMywgNywgNCwgMSwgMjMwLCAzMSwgMiwgMjAwLCA0NCwgMjMzLCA0MiwgNywgNiwgMSwgMTQ0LCAyLCAyMzAsIAorICAgIDIyOSwgMTg0LCA3LCA2LCAxLCAxNDQsIDIsIDI0MCwgMjU1LCA3LCA0LCAxLCAxNDQsIDIsIDI0MCwgMjU1LCA3LCA2LCAxLCAKKyAgICAyMjYsIDIyMywgNywgNCwgMSwgMjI2LCAyMjMsIDcsIDYsIDEsIDIyNiwgMTEwLCAyLCAxMDMsIDcsIDQsIDEsIDIyNiwgCisgICAgMTEwLCAyLCAxMDMsIDcsIDEsIDIxMCwgMjE0LCA3LCA2LCAxLCAxMzgsIDEwNSwgNywgNCwgMSwgMTM4LCAxMDUsIDcsIDYsIAorICAgIDEsIDI0NSwgODMsIDcsIDEsIDIyMywgNTIsIDI0NSwgODQsIDIzMiwgMTI5LCA3LCA0LCAxLCAyMTcsIDE1NCwgMiwgMjI2LCAKKyAgICA3MCwgMTAzLCA3LCA2LCAxLCAyMTcsIDE1NCwgMiwgMTAzLCA3LCA0LCAxLCAyMTcsIDE1NCwgMiwgMTAzLCA3LCA2LCAxLCAKKyAgICAyMTcsIDE1NCwgMiwgMjIzLCA1OCwgMTAzLCA3LCA2LCAxLCAxMDQsIDIsIDI0MCwgMjU1LCA3LCA0LCAxLCAxMDQsIDIsIAorICAgIDI0MCwgMjU1LCA3LCA2LCAxLCAyMTQsIDE1NywgNywgNiwgMSwgMjE0LCAxMDYsIDIsIDEwMywgNywgNiwgMSwgMjExLCAKKyAgICAxMTgsIDIsIDEwMywgNywgNCwgMSwgMjExLCAxMTgsIDIsIDEwMywgNywgNiwgMSwgMjEwLCAxNjAsIDIsIDkxLCA3LCA0LCAKKyAgICAxLCAyMTAsIDE2MCwgMiwgOTEsIDcsIDYsIDEsIDI0NSwgMTYsIDcsIDYsIDEsIDI0NSwgMTcsIDIyMywgNTEsIDcsIDQsIDEsIAorICAgIDI0NSwgMTcsIDIyMywgNTEsIDcsIDQsIDEsIDI0NSwgMTcsIDIsIDIxNywgNzgsIDcsIDEsIDExMywgMiwgOTEsIDcsIDYsIAorICAgIDEsIDEzOCwgMTkwLCA3LCA0LCAxLCAxMzgsIDE5MCwgNywgMSwgMjM1LCAyMDAsIDI0MiwgMTg3LCAyMTgsIDEzMiwgMiwgCisgICAgOTEsIDcsIDEsIDIxMSwgMTgxLCA3LCAxLCAyNDgsIDU1LCAyNTAsIDE5LCA3LCAxLCAyMzMsIDgzLCAyNTAsIDE5LCA3LCAxLCAKKyAgICAyNTQsIDE0NSwgMjUwLCAxOSwgNywgMSwgMjIzLCA1OCwgMjUwLCAxOSwgNywgNiwgMSwgMjQ2LCA0OCwgMiwgMjUwLCAyNDIsIAorICAgIDcsIDYsIDEsIDI0OSwgNjksIDIsIDQsIDEsIDIxMCwgMTYwLCAyLCAyNTAsIDI0MiwgNywgNCwgMSwgMjQ2LCA0OCwgMiwgCisgICAgMjUwLCAyNDIsIDcsIDYsIDEsIDIzMiwgMTk0LCA3LCA2LCAxLCAyMzMsIDE1NSwgMiwgNCwgMSwgMjM1LCAxNTAsIDcsIDQsIAorICAgIDEsIDIzMiwgMTk0LCA3LCA2LCAxLCAyMjgsIDE5MSwgNywgNiwgMSwgMjMwLCAzMSwgMiwgNCwgMSwgMjM1LCAxNTAsIDcsIAorICAgIDQsIDEsIDIyOCwgMTkxLCA3LCA2LCAxLCAxMTYsIDIsIDI1MCwgMjQyLCA3LCA0LCAxLCAxMTYsIDIsIDI1MCwgMjQyLCA3LCAKKyAgICA2LCAxLCAyNDAsIDE2MSwgMiwgMjUwLCAyNDIsIDcsIDQsIDEsIDI0MCwgMTYxLCAyLCAyNTAsIDI0MiwgNywgNiwgMSwgCisgICAgMTQ0LCAyLCAyNTAsIDI0MiwgNywgNCwgMSwgMTQ0LCAyLCAyNTAsIDI0MiwgNywgNiwgMSwgMTA0LCAyLCAyNTAsIDI0MiwgCisgICAgNywgNCwgMSwgMTA0LCAyLCAyNTAsIDI0MiwgNywgNiwgMSwgMTA0LCAyLCAyNDgsIDEwLCAyMiwgMjMxLCAyMzcsIDcsIDQsIAorICAgIDEsIDEwNCwgMiwgMjQ4LCAxMCwgMjIsIDIzMSwgMjM3LCA3LCA2LCAxLCAxMDQsIDIsIDI0OCwgMTAsIDIyLCAxNDIsIDcsIAorICAgIDQsIDEsIDEwNCwgMiwgMjQ4LCAxMCwgMjIsIDE0MiwgNywgNiwgMSwgMTA0LCAyLCAyNDgsIDEwLCAyMiwgMjUwLCAyNDIsIAorICAgIDcsIDQsIDEsIDEwNCwgMiwgMjQ4LCAxMCwgMjIsIDI1MCwgMjQyLCA3LCA2LCAxLCAxMDQsIDIsIDI0OCwgMTAsIDIyLCAKKyAgICAyNDIsIDE0MywgNywgNCwgMSwgMTA0LCAyLCAyNDgsIDEwLCAyMiwgMjQyLCAxNDMsIDcsIDQsIDEsIDIxNSwgOTQsIDc2LCAKKyAgICA3LCA2LCAxLCAxMTYsIDIsIDI0OCwgMTAsIDIyLCAyMzEsIDIzNywgNywgNCwgMSwgMTE2LCAyLCAyNDgsIDEwLCAyMiwgCisgICAgMjMxLCAyMzcsIDcsIDYsIDEsIDExNiwgMiwgNTksIDcyLCAyMiwgMjMxLCAyMzcsIDcsIDQsIDEsIDExNiwgMiwgNTksIDcyLCAKKyAgICAyMiwgMjMxLCAyMzcsIDcsIDYsIDEsIDI1NCwgMjUzLCAyLCAyMzEsIDIzNywgNywgNCwgMSwgMjU0LCAyNTMsIDIsIDIzMSwgCisgICAgMjM3LCA3LCA2LCAxLCAyNDMsIDIxMCwgMiwgOTEsIDcsIDQsIDEsIDI0MywgMjEwLCAyLCA5MSwgNywgNiwgMSwgMjQzLCAKKyAgICAyMTAsIDIsIDI1MCwgMjQyLCA3LCA0LCAxLCAyNDMsIDIxMCwgMiwgMjUwLCAyNDIsIDcsIDYsIDEsIDIzNSwgMzAsIDIsIAorICAgIDI1MCwgMjQyLCA3LCA0LCAxLCAyMzUsIDMwLCAyLCAyNTAsIDI0MiwgNywgNiwgMSwgMTQ0LCAyLCAyMjYsIDIyOCwgNywgNCwgCisgICAgMSwgMTQ0LCAyLCAyMjYsIDIyOCwgNywgNiwgMSwgMTQ0LCAyLCAyMjYsIDIyOSwgMjIsIDIzMSwgMjM3LCA3LCA0LCAxLCAKKyAgICAxNDQsIDIsIDIyNiwgMjI5LCAyMiwgMjMxLCAyMzcsIDcsIDYsIDEsIDI0NSwgMTcsIDIsIDI1MCwgMjQyLCA3LCA0LCAxLCAKKyAgICAyNDUsIDE3LCAyLCAyNTAsIDI0MiwgNywgNCwgMSwgMjM1LCAxNTEsIDIsIDI1MCwgMjQyLCA3LCA2LCAxLCAyNDYsIDQ3LCAKKyAgICA3LCA2LCAxLCAyNDksIDY5LCAyLCA0LCAxLCAyMTAsIDE1OSwgNywgNCwgMSwgMjQ2LCA0NywgNywgNiwgMSwgMjQzLCAyMTAsIAorICAgIDIsIDE0MiwgNywgNCwgMSwgMjQzLCAyMTAsIDIsIDE0MiwgNywgNiwgMSwgMjQwLCAyMDYsIDcsIDYsIDEsIDIxMSwgMTgxLCAKKyAgICA3LCA2LCAxLCAyMzAsIDMxLCAyLCAyNDIsIDE0MywgNywgNCwgMSwgMjMwLCAzMSwgMiwgMjQyLCAxNDMsIDcsIDYsIDEsIAorICAgIDExNiwgMiwgMjIyLCAyMzcsIDcyLCAyMiwgMTQyLCA3LCA0LCAxLCAxMTYsIDIsIDIyMiwgMjM3LCA3MiwgMjIsIDE0MiwgNywgCisgICAgNiwgMSwgMjU0LCAyNTMsIDIsIDE0MiwgNywgNCwgMSwgMjU0LCAyNTMsIDIsIDE0MiwgNywgNiwgMSwgMTQ0LCAyLCAyMTgsIAorICAgIDEwNSwgMjIsIDE0MiwgNywgNCwgMSwgMTQ0LCAyLCAyMTgsIDEwNSwgMjIsIDE0MiwgNywgNiwgMSwgMTE2LCAyLCA1MiwgCisgICAgMjQyLCAxNDMsIDcsIDQsIDEsIDExNiwgMiwgNTIsIDI0MiwgMTQzLCA3LCA2LCAxLCAxMTYsIDIsIDIzNSwgMjAwLCAyNTEsIAorICAgIDE1NCwgNywgNCwgMSwgMTE2LCAyLCAyMzUsIDIwMCwgMjUxLCAxNTQsIDcsIDYsIDEsIDE2MCwgMiwgNTIsIDI0MiwgMTQzLCAKKyAgICA3LCA0LCAxLCAxNjAsIDIsIDUyLCAyNDIsIDE0MywgNywgNiwgMSwgMTYwLCAyLCAyMzUsIDIwMCwgMjUxLCAxNTQsIDcsIDQsIAorICAgIDEsIDE2MCwgMiwgMjM1LCAyMDAsIDI1MSwgMTU0LCA3LCA2LCAxLCAyNDAsIDE2MSwgMiwgNTIsIDI0MiwgMTQzLCA3LCA0LCAKKyAgICAxLCAyNDAsIDE2MSwgMiwgNTIsIDI0MiwgMTQzLCA3LCA2LCAxLCAyNDAsIDE2MSwgMiwgMjM1LCAyMDAsIDI1MSwgMTU0LCAKKyAgICA3LCA0LCAxLCAyNDAsIDE2MSwgMiwgMjM1LCAyMDAsIDI1MSwgMTU0LCA3LCA2LCAxLCAxNDQsIDIsIDUyLCAyNDIsIDE0MywgCisgICAgNywgNCwgMSwgMTQ0LCAyLCA1MiwgMjQyLCAxNDMsIDcsIDYsIDEsIDE0NCwgMiwgMjM1LCAyMDAsIDI1MSwgMTU0LCA3LCA0LCAKKyAgICAxLCAxNDQsIDIsIDIzNSwgMjAwLCAyNTEsIDE1NCwgNywgNiwgMSwgMjIzLCAyMjcsIDIsIDUyLCAyNDIsIDE0MywgNywgNCwgCisgICAgMSwgMjIzLCAyMjcsIDIsIDUyLCAyNDIsIDE0MywgNywgNiwgMSwgMjIzLCAyMjcsIDIsIDIzNSwgMjAwLCAyNTEsIDE1NCwgCisgICAgNywgNCwgMSwgMjIzLCAyMjcsIDIsIDIzNSwgMjAwLCAyNTEsIDE1NCwgNywgNiwgMSwgMTA0LCAyLCA1MiwgMjQyLCAxNDMsIAorICAgIDcsIDQsIDEsIDEwNCwgMiwgNTIsIDI0MiwgMTQzLCA3LCA2LCAxLCAxMDQsIDIsIDIzNSwgMjAwLCAyNTEsIDE1NCwgNywgNCwgCisgICAgMSwgMTA0LCAyLCAyMzUsIDIwMCwgMjUxLCAxNTQsIDcsIDYsIDEsIDIyMiwgOTQsIDIsIDI0OSwgMjI4LCA1MSwgNywgNCwgCisgICAgMSwgMjIyLCA5NCwgMiwgMjQ5LCAyMjgsIDUxLCA3LCA2LCAxLCAyMTcsIDE1NCwgMiwgMjQ5LCAyMjgsIDUxLCA3LCA0LCAxLCAKKyAgICAyMTcsIDE1NCwgMiwgMjQ5LCAyMjgsIDUxLCA3LCA2LCAxLCAyMTAsIDIzMSwgNywgNCwgMSwgMjEwLCAyMzEsIDcsIDYsIDEsIAorICAgIDI0MiwgNjgsIDIsIDI1MCwgMjQyLCA3LCA0LCAxLCAyNDIsIDY4LCAyLCAyNTAsIDI0MiwgNywgNiwgMSwgMjMwLCAzMSwgMiwgCisgICAgMjAwLCA0NCwgMjMzLCA0MiwgNywgNCwgMSwgMjQ5LCA2OSwgMiwgMjQ5LCAxMDgsIDcsIDYsIDEsIDIyNiwgMTM4LCA3LCA0LCAKKyAgICAxLCAyMjYsIDEzOCwgNywgNiwgMSwgMjEwLCAxNjAsIDIsIDEwMywgNywgNCwgMSwgMjEwLCAxNjAsIDIsIDEwMywgNywgNiwgCisgICAgMSwgMTE2LCAyLCA1OSwgNDgsIDcsIDQsIDEsIDExNiwgMiwgNTksIDQ4LCA3LCA2LCAxLCAxNjAsIDIsIDI1MCwgMTkxLCA3LCAKKyAgICA0LCAxLCAxNjAsIDIsIDI1MCwgMTkxLCA3LCA2LCAxLCAxNDQsIDIsIDI0OCwgMTAsIDIyLCAyMzEsIDIzNywgNywgNCwgMSwgCisgICAgMTQ0LCAyLCAyNDgsIDEwLCAyMiwgMjMxLCAyMzcsIDcsIDYsIDEsIDE0NCwgMiwgMjE2LCA5MCwgMjIsIDIzMSwgMjM3LCA3LCAKKyAgICA0LCAxLCAxNDQsIDIsIDIxNiwgOTAsIDIyLCAyMzEsIDIzNywgNywgNiwgMSwgMTQ0LCAyLCA1OSwgNDgsIDcsIDQsIDEsIAorICAgIDE0NCwgMiwgNTksIDQ4LCA3LCA2LCAxLCAxNDQsIDIsIDU5LCA3MiwgMjIsIDIzMSwgMjM3LCA3LCA0LCAxLCAxNDQsIDIsIAorICAgIDU5LCA3MiwgMjIsIDIzMSwgMjM3LCA3LCA2LCAxLCAyMTEsIDExOCwgMiwgMjMxLCAyMzcsIDcsIDQsIDEsIDIxMSwgMTE4LCAKKyAgICAyLCAyMzEsIDIzNywgNywgNCwgMSwgMjMzLCAxNTUsIDIsIDI0OSwgMTA4LCA3LCA0LCAxLCAyMzAsIDMxLCAyLCAyNDksIAorICAgIDEwOCwgNywgNCwgMSwgMjE3LCAxNTQsIDIsIDI0OSwgMTA4LCA3LCA0LCAxLCAyNDcsIDEyNywgMjM1LCAxNTAsIDcsIDQsIAorICAgIDEsIDI0OCwgMTUxLCAyNDcsIDIyOCwgNywgNCwgMSwgMjI0LCAzNCwgMjQ3LCAyMjgsIDcsIDYsIDEsIDExNiwgMiwgOTEsIAorICAgIDcsIDYsIDEsIDI1MSwgNzUsIDIsIDkxLCA3LCA0LCAxLCAyNTEsIDc1LCAyLCA5MSwgNywgNiwgMSwgMjMzLCAxNTUsIDIsIAorICAgIDEzMCwgNywgNiwgMSwgMjE3LCAxNTQsIDIsIDI0OCwgNywgOTEsIDcsIDQsIDEsIDIyMiwgOTQsIDIsIDIxNywgMjUxLCAKKyAgICAyMTcsIDc4LCA3LCA0LCAxLCAyMTAsIDE2MCwgMiwgMjE3LCAyNTEsIDIxNywgNzgsIDcsIDYsIDEsIDI0MiwgMTg3LCAyMTgsIAorICAgIDEzMSwgNywgNCwgMSwgMjQyLCAxODcsIDIxOCwgMTMxLCA3LCA2LCAxLCA1NywgMiwgOTEsIDcsIDYsIDEsIDEwNCwgMTMwLCAKKyAgICA3LCA2LCAxLCAyMTUsIDk0LCAyMTQsIDEwNSwgNywgNiwgMSwgMTYwLCAyLCA5MSwgNywgNCwgMSwgMTYwLCAyLCA5MSwgNywgCisgICAgNiwgMSwgMjM1LCAxNTEsIDIsIDkxLCA3LCA0LCAxLCAyMzUsIDE1MSwgMiwgOTEsIDcsIDYsIDEsIDQsIDIyNCwgMTAwLCAyLCAKKyAgICAyNDEsIDU5LCAyMTcsIDc4LCA3LCA0LCAxLCAyMjQsIDEwMCwgMiwgMjQxLCA1OSwgMjE3LCA3OCwgNywgNiwgMSwgMjIzLCAKKyAgICAyMjcsIDIsIDkxLCA3LCA0LCAxLCAyMjMsIDIyNywgMiwgOTEsIDcsIDYsIDEsIDIxMSwgMTE4LCAyLCA5MSwgNywgNCwgMSwgCisgICAgMjExLCAxMTgsIDIsIDkxLCA3LCA0LCAxLCAyMTUsIDk0LCA2MSwgNywgNCwgMSwgMjU0LCAxNTEsIDcsIDQsIDEsIDIxNSwgCisgICAgOTQsIDI1NCwgMTUxLCA3LCA0LCAxLCA1NywgMiwgMTAzLCA3LCA0LCAxLCAyMDQsIDc4LCA3LCA0LCAxLCAyNTEsIDc1LCAyLCAKKyAgICAyNDksIDEwOCwgNywgNCwgMSwgMjQ5LCA2OSwgMiwgMjE3LCA3OCwgNywgNCwgMSwgMjQ5LCA2OSwgMiwgMTAzLCA3LCA0LCAKKyAgICAxLCAyMjMsIDUyLCA3NiwgNywgNCwgMSwgMjIxLCAxOTcsIDcsIDQsIDEsIDIyMSwgMTk4LCAyLCAxMDMsIDcsIDQsIDEsIAorICAgIDIwNCwgNzYsIDcsIDQsIDEsIDIyMywgNTIsIDIwNCwgNzYsIDcsIDQsIDEsIDIyMywgNTIsIDIwNCwgMTYwLCAyLCAxMDMsIAorICAgIDcsIDQsIDEsIDI1MCwgOCwgMjIzLCA1MiwgMjA0LCA3NiwgNywgNCwgMSwgMjQ3LCAxMjcsIDIzNSwgMTUxLCAyLCA5MSwgNywgCisgICAgNCwgMSwgMjQzLCAyMTAsIDIsIDEwMywgNywgNCwgMSwgMTE5LCAyNDMsIDIwOSwgNywgMSwgNCwgNiwgMjQzLCAyMDksIDcsIAorICAgIDQsIDEsIDI0MywgMTE0LCA3LCA0LCAxLCAyMjMsIDE1NCwgMjQwLCAyNTUsIDcsIDQsIDEsIDIxNSwgOTQsIDI0MiwgNjcsIAorICAgIDcsIDQsIDEsIDI0MiwgNjgsIDIsIDEwMywgNywgNCwgMSwgMjQxLCAyMTUsIDIsIDEwMywgNywgNCwgMSwgMjQwLCAxNjEsIAorICAgIDIsIDkxLCA3LCA0LCAxLCAyMzUsIDE5MiwgNywgMSwgNCwgNiwgNzQsIDcsIDQsIDEsIDIzMywgMTU1LCAyLCAyMzAsIDIyOSwgCisgICAgMTg0LCA3LCA0LCAxLCAyMzMsIDE1NSwgMiwgMjUyLCA0OSwgNywgNCwgMSwgMjMzLCAxNTUsIDIsIDIyMywgNTgsIDEwMywgCisgICAgNywgNCwgMSwgMjMzLCA3LCA3LCA0LCAxLCAyMTUsIDk0LCAxOTQsIDcsIDQsIDEsIDIxNSwgOTQsIDIzMiwgNTUsIDIsIAorICAgIDIwMCwgMjMzLCA0MiwgNywgNCwgMSwgMjMyLCA1NSwgMiwgMTAzLCA3LCA0LCAxLCAyMzAsIDMxLCAyLCA0MywgMTAzLCA3LCAKKyAgICA0LCAxLCAyMzAsIDMxLCAyLCAyMjMsIDU4LCAxMDMsIDcsIDEsIDQsIDYsIDIzMCwgMzAsIDcsIDQsIDEsIDI1MiwgMTQyLCAKKyAgICA3OCwgNywgMSwgNCwgNiwgMjI2LCAyMzgsIDcsIDQsIDEsIDI1MCwgOCwgMjI2LCAyMDUsIDcsIDQsIDEsIDIyNSwgMTM2LCAKKyAgICA3LCA0LCAxLCAyMTUsIDk0LCAxNTMsIDcsIDQsIDEsIDIxNSwgOTQsIDIyMywgMjI3LCAyLCAyMDAsIDIzMywgNDIsIDcsIDQsIAorICAgIDEsIDIxNSwgOTQsIDIyMywgMjI3LCAyLCAxMDMsIDcsIDQsIDEsIDIyMywgMjI3LCAyLCAyMDAsIDIzMywgNDIsIDcsIDQsIAorICAgIDEsIDIyMywgMjI3LCAyLCAyMTcsIDc4LCA3LCA0LCAxLCAyMjMsIDIyNywgMiwgMjQ0LCA5NSwgNywgNCwgMSwgMjIzLCA1MiwgCisgICAgMjIzLCAyMjcsIDIsIDI0NCwgOTUsIDcsIDEsIDQsIDYsIDE1MywgNywgMSwgNCwgNiwgMjM1LCAyMDAsIDE1MywgNywgNCwgCisgICAgMSwgMjIyLCA5NCwgMiwgMTAzLCA3LCA0LCAxLCAyNDUsIDgzLCA3LCA0LCAxLCAyNDcsIDEyNywgMjM1LCAxNTEsIDIsIAorICAgIDIxOCwgMTA1LCAyMiwgMTAzLCA3LCA0LCAxLCAyMTgsIDIzMywgMjIzLCA1MiwgMjQ1LCA4MywgNywgNCwgMSwgMjQ1LCA4NCwgCisgICAgMiwgMjQ5LCAxMDgsIDcsIDQsIDEsIDIxNSwgOTQsIDIxNywgMTUzLCA3LCA0LCAxLCAyMTcsIDE1NCwgMiwgMjIzLCA1OCwgCisgICAgMTAzLCA3LCA0LCAxLCAxMDQsIDEzMCwgNywgNCwgMSwgMjE0LCAxNTcsIDcsIDQsIDEsIDIxNCwgMTA2LCAyLCAxMDMsIDcsIAorICAgIDQsIDEsIDIxNSwgOTQsIDIxNCwgMTA1LCA3LCA0LCAxLCAyMTUsIDk0LCAyMTIsIDk4LCA3LCA0LCAxLCAyMTUsIDk0LCAKKyAgICAyMTEsIDExNywgNywgMSwgNCwgNiwgMjExLCAxMTcsIDcsIDQsIDEsIDIxMCwgMTYwLCAyLCAyMjMsIDU4LCAxMDMsIDcsIDQsIAorICAgIDEsIDIxMCwgMTYwLCAyLCAyNDksIDEwOCwgNywgNCwgMSwgMjQ1LCAxNiwgNywgNCwgMSwgMjQ1LCAxNywgMiwgMjQ5LCAKKyAgICAxMDgsIDcsIDEsIDI0MiwgMTg3LCAyMTgsIDEzMSwgNywgMSwgMjI1LCAxNDIsIDIxMywgMTM1LCAyNDQsIDEsIDcsIDEsIAorICAgIDIzNSwgMjAwLCAyNDIsIDE4NywgMjE4LCAxMzEsIDcsIDEsIDIxOCwgMTEyLCAyNTEsIDc0LCA3LCAxLCAyNTEsIDI1NCwgCisgICAgMjUwLCAxOSwgNywgMSwgNCwgNiwgMjUzLCAxNjYsIDcsIDQsIDEsIDI1MCwgOCwgMjA0LCA3NiwgNywgMSwgNCwgNiwgMjQzLCAKKyAgICAyMTAsIDIsIDEwMywgNywgMSwgNCwgNiwgMjQyLCA2NywgNywgNCwgMSwgMjM1LCAxNTEsIDIsIDI0OSwgMTM1LCA3LCA0LCAKKyAgICAxLCAyMTUsIDk0LCAyMzUsIDI5LCA3LCAxLCA0LCA2LCAxNTYsIDcsIDQsIDEsIDIyNCwgMTAwLCAyLCAxMDMsIDcsIDEsIAorICAgIDI0MiwgMTg3LCAyMTgsIDEzMiwgMiwgOTEsIDcsIDEsIDIyMywgNTIsIDI0MiwgMTg3LCAyMTgsIDEzMiwgMiwgOTEsIDcsIAorICAgIDQsIDEsIDI0NiwgNDgsIDI0NywgMjI4LCA3LCA0LCAxLCAyNDgsIDM0LCAyNDcsIDIyOCwgNywgNCwgMSwgMjQ2LCA0OCwgCisgICAgMjQ3LCAyMjksIDIsIDI0OSwgMTA4LCA3LCA0LCAxLCAyMTUsIDE4NiwgMjQ3LCAyMjgsIDcsIDQsIDEsIDIxNiwgMjM2LCAKKyAgICAyNDcsIDIyOCwgNywgNCwgMSwgMjE3LCAzMCwgMjQ3LCAyMjksIDIsIDI0OSwgMTA4LCA3LCA0LCAxLCAyNDQsIDE0MiwgCisgICAgMjQ3LCAyMjgsIDcsIDQsIDEsIDIzMiwgMTA1LCAyNDcsIDIyOCwgNywgNCwgMSwgMjMyLCA1NiwgMjQ3LCAyMjgsIDcsIDEsIAorICAgIDI1MSwgMjU0LCAyMjUsIDE4NCwgNywgMSwgMjUyLCA2LCAyMjUsIDE4NCwgNywgNCwgMSwgMjE1LCA5NCwgMjQyLCA2OCwgMiwgCisgICAgMjQ0LCA5NSwgNywgNCwgMSwgMjE1LCA5NCwgMjQyLCA2OCwgMiwgMjQ0LCA5NiwgMjIsIDIxNywgNzgsIDU4LCAxLCA0LCAKKyAgICAyNDIsIDY3LCA1OCwgMSwgNCwgMjQyLCA2OCwgMiwgMTAzLCA1OCwgMSwgNCwgMjM1LCAxNTAsIDU4LCAxLCA0LCAxNTMsIAorICAgIDU4LCAxLCA0LCAyMTUsIDk0LCAxNTMsIDU4LCAxLCA0LCAyMTUsIDk0LCAyMjMsIDIyNywgMiwgMTAzLCA1OCwgMSwgNCwgNiwgCisgICAgMjM1LCAyMDAsIDE1MywgNTgsIDEsIDQsIDIxMiwgOTgsIDU4LCAxLCA0LCAyMTEsIDExNywgNTgsIDEsIDIyNCwgMTkzLCAKKyAgICA1OCwgMSwgNTIsIDIyNCwgMTkzLCA1OCwgMSwgMjE1LCA5NCwgMjQ5LCAyMjcsIDU4LCAxLCAyNTQsIDY1LCA1OCwgMSwgCisgICAgMjIzLCA1MiwgMjQ5LCAyMjcsIDU4LCAxLCA0NCwgMTYzLCAyMjIsIDIzNiwgNTgsIDEsIDQzLCAxNjMsIDIyMiwgMjM2LCAKKyAgICA1OCwgMSwgMjQyLCAxODcsIDIxOCwgMTMxLCA1OCwgMSwgMjIzLCA1MiwgMjQyLCAxODcsIDIxOCwgMTMxLCA1OCwgMSwgNDMsIAorICAgIDI1NCwgMSwgNTgsIDEsIDQ0LCAyNTQsIDEsIDU4LCAxLCAxMjAsIDI1NCwgMSwgNTgsIDEsIDEyNCwgMjU0LCAxLCA1OCwgMSwgCisgICAgMjUwLCAzOSwgMjU1LCAyMywgMjUwLCAyNDIsIDU4LCAxLCA2NywgMjMyLCAyMTksIDU4LCAxLCAyMzEsIDIzNywgNTgsIDEsIAorICAgIDI1NSwgMTIsIDI1NSwgMjMsIDU4LCAxLCAyNDIsIDE0NCwgMjU1LCAyMywgNTgsIDEsIDEyMSwgNjcsIDIzMiwgMjE5LCA1OCwgCisgICAgMSwgMTIxLCAyMzEsIDIzNywgNTgsIDEsIDEyMSwgMjQyLCAxNDQsIDI1NSwgMjMsIDU4LCAxLCAxMjEsIDI1NSwgMTIsIAorICAgIDI1NSwgMjMsIDU4LCAxLCAyMTUsIDIyMywgMjQ5LCAyMzQsIDU4LCAxLCAxNjMsIDIxNSwgMjIzLCAyNDksIDIzNCwgNTgsIAorICAgIDEsIDI1MCwgMTgxLCA0NCwgMTYzLCAyMjIsIDIzNiwgNTgsIDEsIDI1MCwgMTgxLCA0MywgMTYzLCAyMjIsIDIzNiwgNTgsIAorICAgIDEsIDEyMCwgMjE3LCA4OCwgNTgsIDEsIDEyNCwgMjE3LCA4OCwgNTgsIDEsIDk2LCA1MCwgNTgsIDEsIDIzMCwgMTg3LCA1MCwgCisgICAgMjUxLCAxNTQsIDU5LCA0OCwgMjIyLCAyMzcsIDQ4LCAyMjYsIDIyOCwgNCwgMTg0LCA1MiwgMjU1LCAxMiwgMjU1LCAyMywgCisgICAgNTgsIDEsIDIyMywgMzksIDEwMywgNTgsIDEsIDI0OSwgMTM5LCAyNTUsIDIzLCA1OCwgMSwgNCwgMjQzLCAxMTQsIDU4LCAxLCAKKyAgICA0LCAxNTYsIDU4LCAxLCA0LCAyMjIsIDkzLCA1OCwgMSwgNCwgMjExLCAxNzgsIDU4LCAxLCA0LCAyMjMsIDUyLCAyNDIsIAorICAgIDE4NywgMjE4LCAxMzEsIDU4LCAxLCAyNDUsIDI4LCAxMzgsIDEzMCwgNTgsIDEsIDEyNSwgMTM4LCAxMzAsIDU4LCAxLCAKKyAgICAyMzAsIDIzMCwgMTM4LCAxMzAsIDU4LCAxLCAxMjEsIDEzOCwgMTMwLCA1OCwgMSwgMjQ1LCAyNywgMTM4LCAxMzAsIDU4LCAKKyAgICAxLCAyMTAsIDI1NCwgMjQ4LCA1MiwgMTM4LCA3OSwgNTgsIDEsIDIxMSwgNzAsIDI0OCwgNTIsIDEzOCwgNzksIDU4LCAxLCAKKyAgICAyMTMsIDEzMywgNTgsIDEsIDIxNCwgMTg2LCA1OCwgMSwgNTIsIDI1NCwgNjUsIDU4LCAxLCAxMjEsIDEyNCwgMjU0LCAxLCAKKyAgICA1OCwgMSwgMTIxLCAxMjAsIDI1NCwgMSwgNTgsIDEsIDEyMSwgNDMsIDI1NCwgMSwgNTgsIDEsIDEyMSwgNDQsIDI1NCwgMSwgCisgICAgNTgsIDEsIDEyMSwgMjIyLCAyMzYsIDU4LCAxLCAyMzAsIDIyOSwgMjQyLCAxNDQsIDI1NSwgMjMsIDU4LCAxLCAyMzAsIAorICAgIDIyOSwgNTIsIDI0MiwgMTQ0LCAyNTUsIDIzLCA1OCwgMSwgMjMwLCAyMjksIDUyLCAyNTUsIDEyLCAyNTUsIDIzLCA1OCwgMSwgCisgICAgMTIxLCAxODQsIDU4LCAxLCAyMjMsIDE2MCwgMjQ5LCAyMzQsIDU4LCAxLCAyNTIsIDY2LCAxMjUsIDIxNiwgMzEsIDU4LCAxLCAKKyAgICAyNDUsIDE1MSwgMTI1LCAyMTYsIDMxLCA1OCwgMSwgMjUyLCA2NiwgMTIxLCAyMTYsIDMxLCA1OCwgMSwgMjQ1LCAxNTEsIAorICAgIDEyMSwgMjE2LCAzMSwgNTgsIDEsIDIyMCwgNTYsIDU4LCAxLCAyMDQsIDIyMCwgNTYsIDU4LCAxLCAxMjEsIDQzLCA3NSwgCisgICAgMzgsIDI0MiwgMTQ0LCAyNTUsIDIzLCAzOCwgMjU1LCAxMiwgMjU1LCAyMywgMzgsIDI1MCwgMzksIDI1NSwgMjMsIDM4LCAKKyAgICAxODQsIDM4LCAyMzEsIDIzNywgMzgsIDIyNiwgMTIzLCAzOCwgMjUxLCAxNTQsIDM4LCA1OSwgNDgsIDM4LCAyNDgsIDksIAorICAgIDM4LCAyNDEsIDU5LCA0OCwgMzgsIDIyMiwgMjM3LCA0OCwgMzgsIDUyLCAyNTUsIDEyLCAyNTUsIDIzLCAzOCwgMjUwLCAKKyAgICAyNDIsIDM4LCA2NywgMjMyLCAyMjAsIDQ4LCAzOCwgNTIsIDY3LCAyMzIsIDIyMCwgNDgsIDM4LCA1MiwgMjQyLCAxNDQsIAorICAgIDI1NSwgMjMsIDM4LCAyNTEsIDcsIDM4LCAyMzUsIDIwMCwgMjUxLCAxNTQsIDM4LCAyMTUsIDk0LCAyNDksIDIyOCwgNDgsIAorICAgIDM4LCAyNDksIDIyOCwgNDgsIDM4LCAyMjMsIDUyLCAyNDksIDIyOCwgNDgsIDM4LCAyNDksIDIyOCwgNzIsIDIyMiwgMjU0LCAKKyAgICAzOCwgMjQyLCAxNDQsIDI1NSwgMjQsIDUxLCAzOCwgMjU1LCAxMiwgMjU1LCAyNCwgNTEsIDM4LCA0MywgMjE3LCA4OSwgNTEsIAorICAgIDM4LCA0NCwgMjE3LCA4OSwgNTEsIDM4LCA0MywgMjU0LCAxMTgsIDQ4LCAzOCwgMjQwLCAyNTUsIDM4LCA0MywgMTYzLCAKKyAgICAyMjIsIDIzNywgNTEsIDM4LCAxMjAsIDIxNywgODksIDUxLCAzOCwgMTI0LCAyMTcsIDg5LCA1MSwgMzgsIDk2LCA1LCA1MSwgCisgICAgMzgsIDIzMCwgMTg3LCA1LCA1MSwgMzgsIDIyNiwgNjgsIDI0MSwgNTksIDUxLCAzOCwgMjIzLCA1OCwgMjQxLCA1OSwgNTEsIAorICAgIDM4LCA1OSwgNTEsIDM4LCAyNDgsIDEwLCA1MSwgMzgsIDIyMiwgMjM3LCA1MSwgMzgsIDI0OSwgMjI4LCA1MSwgMzgsIDI1MCwgCisgICAgMTkxLCAzOCwgMjI2LCAyMjgsIDM4LCA2NywgMjMyLCAyMjAsIDUxLCAzOCwgMjUxLCAxNDgsIDUxLCAzOCwgMjM1LCAyMDAsIAorICAgIDUyLCAyNTQsIDMyLCA1MSwgMzgsIDI1MCwgMjQzLCA1MSwgMzgsIDI1MCwgMzksIDI1NSwgMjQsIDUxLCAzOCwgMjUxLCAKKyAgICAxNTUsIDUxLCAzOCwgMjM1LCAyMDAsIDI1MSwgMTU1LCA1MSwgMzgsIDIxNiwgOTAsIDUxLCAzOCwgMjMxLCAyMzgsIDUxLCAKKyAgICAzOCwgMTIxLCAyMzIsIDIxOSwgMzgsIDUyLCAxMjEsIDIzMiwgMjE5LCAzOCwgMjE2LCA5MCwgMjI2LCAxMjQsIDM4LCAyMTksIAorICAgIDI1MywgMjE4LCAxMDUsIDIyNiwgMTI0LCAzOCwgMjAwLCAyMTgsIDEwNSwgMjI2LCAxMjQsIDM4LCAyMTksIDI1MywgMjE5LCAKKyAgICA0OSwgMjI2LCAxMjQsIDM4LCAyMDAsIDIxOSwgNDksIDIyNiwgMTI0LCAzOCwgNDQsIDE2MywgMjIyLCAyMzcsIDUxLCAzOCwgCisgICAgMjM1LCAyMDAsIDI1MSwgMTQ4LCA1MSwgMzgsIDQyLCA1MSwgMzgsIDIyMSwgMTgyLCA1MSwgMzgsIDIxMSwgMTc5LCA0OCwgCisgICAgMzgsIDY3LCAxODQsIDM4LCA1MiwgMjI2LCAxMjMsIDM4LCAyNDIsIDE0NCwgMTM4LCA3OSwgMzgsIDI1NSwgMTIsIDEzOCwgCisgICAgNzksIDM4LCAyNiwgMjI1LCAxNzgsIDM4LCAyNiwgMjM0LCA4LCAzOCwgMjYsIDI0OCwgNCwgMjE2LCAxOSwgMzgsIDI2LCAKKyAgICAyMTAsIDIxOSwgMzgsIDI1MSwgMTQ4LCA0OCwgMzgsIDI0NSwgMTA2LCA1LCA1MSwgMzgsIDUyLCA2NywgMjMyLCAyMjAsIAorICAgIDUxLCAzOCwgNDMsIDI1NCwgMTE4LCA1MSwgMzgsIDIyOCwgNTcsIDIxNiwgOTAsIDQ4LCAzOCwgMjQxLCA2NSwgNDgsIDM4LCAKKyAgICAyNTQsIDE1NiwgMTI4LCAyMTYsIDQzLCA0OCwgMzgsIDQzLCA0NCwgODAsIDUxLCAzOCwgMjE0LCAxNTMsIDgwLCA1MSwgMzgsIAorICAgIDI0MiwgMTQ5LCAyMzUsIDY5LCAzOCwgNDQsIDI1NCwgMiwgNDgsIDM4LCA0MywgMTYzLCAyMjIsIDIzNywgNDgsIDM4LCAKKyAgICAyNDQsIDEzOSwgMzgsIDIxMSwgMTc5LCA1MSwgMzgsIDQzLCAyNTQsIDIsIDUxLCAzOCwgNDQsIDI1NCwgMiwgNTEsIDM4LCAKKyAgICA0NCwgMjU0LCAyLCAyMiwgMTIwLCAyNTQsIDIsIDUxLCAzOCwgNDQsIDE2MywgMjIyLCAyMzcsIDQ4LCAzOCwgNTksIDcyLCAKKyAgICAyMjIsIDI1NCwgMzgsIDI1MywgMjI1LCA1MSwgMzgsIDUyLCAyMjIsIDIzNywgNTEsIDM4LCAyMTAsIDM1LCA0OCwgMzgsIAorICAgIDUyLCAyNTEsIDE1NSwgNTEsIDM4LCA1MiwgMjUxLCAxNTQsIDM4LCA1MiwgMjMxLCAyMzcsIDM4LCA1MiwgMjMxLCAyMzgsIAorICAgIDUxLCAzOCwgNTIsIDE4NCwgMzgsIDUyLCAyMzUsIDIwMCwgMjUxLCAxNTQsIDM4LCA1MiwgOTcsIDgwLCA1MSwgMzgsIDcsIAorICAgIDQsIDEsIDYxLCAzOCwgNywgNCwgMSwgNzYsIDM4LCA3LCA0LCAxLCA3NCwgMzgsIDcsIDQsIDEsIDc4LCAzOCwgNywgNCwgMSwgCisgICAgNjksIDM4LCA3LCA0LCAxLCAyNTEsIDc0LCAzOCwgNywgNCwgMSwgMjQ5LCA2OCwgMzgsIDcsIDQsIDEsIDI0MiwgNjcsIDM4LCAKKyAgICA3LCA0LCAxLCAxOTQsIDM4LCA3LCA0LCAxLCAxNTMsIDM4LCA3LCA0LCAxLCAyMTcsIDE1MywgMzgsIDcsIDQsIDEsIDIxNCwgCisgICAgMTA1LCAzOCwgNywgNCwgMSwgMjExLCAxNzgsIDI2LCA2LCAxLCAyNDEsIDIwMywgMjYsIDQsIDEsIDI0MSwgMjAzLCAyNiwgCisgICAgNiwgMSwgMjU0LCAzMSwgMjIxLCAyNDgsIDI2LCA0LCAxLCAyNTQsIDMxLCAyMjEsIDI0OCwgMjYsIDIyNywgMjAyLCA1MCwgCisgICAgMjYsIDIzMiwgMTE0LCAyMjcsIDIwMiwgNTAsIDI2LCA2LCAxLCAyMjYsIDU1LCAyNDcsIDIzNSwgMjYsIDQsIDEsIDIyNiwgCisgICAgNTUsIDI0NywgMjM1LCAyNiwgMjEwLCAyMTksIDI2LCA0LCAyMjMsIDUyLCAyMzIsIDg4LCAyMTksIDE4MCwgODcsIDI2LCA0LCAKKyAgICAyNDYsIDEyNiwgMjMyLCA4OCwgMjE5LCAxODAsIDg3LCAyNiwgNCwgMjIzLCA1MiwgMjQ2LCAxMjYsIDIzMiwgODgsIDIxOSwgCisgICAgMTgwLCA4NywgMjYsIDIyNCwgMTYsIDc5LCAyNiwgMjE2LCAxOSwgMjYsIDI0OCwgNCwgMjE2LCAxOSwgMjYsIDYsIDEsIAorICAgIDI1NCwgMTUyLCAyLCAyMTYsIDE5LCAyNiwgMjU0LCAxMDUsIDIxNywgMywgMjYsIDYsIDEsIDI0NSwgMTA5LCAyLCAyMTYsIAorICAgIDE5LCAyNiwgNiwgMSwgMjQ1LCA3MiwgMiwgMjE2LCAxOSwgMjYsIDYsIDEsIDIzNSwgMTkzLCAyLCAyMTYsIDE5LCAyNiwgNiwgCisgICAgMSwgMjI2LCAyMDQsIDIsIDIxNiwgMTksIDI2LCA2LCAxLCAyMTQsIDE1OCwgMiwgMjE2LCAxOSwgMjYsIDYsIDEsIDIyNiwgCisgICAgMjA2LCAyLCAyMTYsIDE5LCAyNiwgNCwgMSwgMjM1LCAxOTMsIDIsIDI0OCwgNCwgMjIsIDIxNiwgMTksIDI2LCA2LCAxLCAKKyAgICAyNTQsIDE1MSwgMjYsIDYsIDEsIDI1MiwgMzQsIDI2LCA2LCAxLCAyNDMsIDExNCwgMjYsIDYsIDEsIDI0OCwgNjIsIDI2LCAKKyAgICA2LCAxLCAyNDUsIDEwOCwgMjYsIDYsIDEsIDIxMCwgODUsIDI2LCA2LCAxLCAyNDUsIDcxLCAyNiwgNiwgMSwgMjE2LCAxODAsIAorICAgIDI2LCA2LCAxLCAyMzUsIDE5MiwgMjYsIDYsIDEsIDIzNCwgMjI4LCAyNiwgNiwgMSwgMjMzLCAxMDQsIDI2LCA2LCAxLCAKKyAgICAyMzAsIDEwNywgMjYsIDYsIDEsIDIyNywgMjQyLCAyNiwgNiwgMSwgMjExLCAxNTcsIDI2LCA2LCAxLCAyMjYsIDIwMywgMjYsIAorICAgIDYsIDEsIDIyNSwgMTExLCAyNiwgNiwgMSwgMjIzLCA0MCwgMjYsIDYsIDEsIDIxOSwgMTc5LCAyNiwgNiwgMSwgMjE3LCA0MiwgCisgICAgMjYsIDYsIDEsIDIxNCwgMTU3LCAyNiwgNiwgMSwgMjI1LCAxMzYsIDI2LCA2LCAxLCAyNTAsIDExOCwgMjYsIDYsIDEsIAorICAgIDIyNCwgMTY0LCAyNiwgNiwgMSwgMjI2LCAyMDUsIDI2LCA2LCAxLCAyMzUsIDE5MywgMiwgMjQ4LCAzLCAyNiwgNiwgMSwgCisgICAgMjE0LCAxNTgsIDIsIDI0OCwgMywgMjYsIDQsIDEsIDI1NCwgMTUyLCAyLCAyMTYsIDE5LCAyNiwgNCwgMSwgMjQ1LCAxMDksIAorICAgIDIsIDIxNiwgMTksIDI2LCA0LCAxLCAyNDUsIDcyLCAyLCAyMTYsIDE5LCAyNiwgNCwgMSwgMjM1LCAxOTMsIDIsIDIxNiwgCisgICAgMTksIDI2LCA0LCAxLCAyMTQsIDE1OCwgMiwgMjQ4LCA0LCAyMiwgMjE2LCAxOSwgMjYsIDQsIDEsIDI1NCwgMTUxLCAyNiwgCisgICAgNCwgMSwgMjUyLCAzNCwgMjYsIDQsIDEsIDI0MywgMTE0LCAyNiwgNCwgMSwgMjQ4LCA2MiwgMjYsIDQsIDEsIDI0NSwgMTA4LCAKKyAgICAyNiwgNCwgMSwgMjEwLCA4NSwgMjYsIDQsIDEsIDI0NSwgNzEsIDI2LCA0LCAxLCAyMTYsIDE4MCwgMjYsIDQsIDEsIDIzNSwgCisgICAgMTkyLCAyNiwgNCwgMSwgMjM0LCAyMjgsIDI2LCA0LCAxLCAyMzMsIDEwNCwgMjYsIDQsIDEsIDIzMCwgMTA3LCAyNiwgNCwgCisgICAgMSwgMjI3LCAyNDIsIDI2LCA0LCAxLCAyMTEsIDE1NywgMjYsIDQsIDEsIDIyNiwgMjAzLCAyNiwgNCwgMSwgMjI1LCAxMTEsIAorICAgIDI2LCA0LCAxLCAyMjMsIDQwLCAyNiwgNCwgMSwgNDAsIDIxOSwgMTc5LCAyNiwgNCwgMSwgMjE5LCAxNzksIDI2LCA0LCAxLCAKKyAgICAyMTcsIDQyLCAyNiwgNCwgMSwgMjE0LCAxNTcsIDI2LCA0LCAxLCAyMjUsIDEzNiwgMjYsIDQsIDEsIDI1MCwgMTE4LCAyNiwgCisgICAgNCwgMSwgMjI0LCAxNjQsIDI2LCA0LCAxLCAyMjYsIDIwNSwgMjYsIDQsIDEsIDIzNSwgMTkzLCAyLCAyNDgsIDMsIDI2LCA0LCAKKyAgICAxLCAyMTQsIDE1OCwgMiwgMjQ4LCAzLCAyNiwgNCwgMSwgMjI2LCAyMDQsIDIsIDIxNiwgMTksIDI2LCA0LCAxLCAyMTQsIAorICAgIDE1OCwgMiwgMjE2LCAxOSwgMjYsIDQsIDEsIDIyNiwgMjA2LCAyLCAyMTYsIDE5LCAyNiwgNiwgMjM0LCAyNTMsIDg3LCAyNiwgCisgICAgMjUyLCAzNSwgODcsIDI2LCAyMTYsIDE4MSwgODcsIDI2LCAyMTQsIDE1OCwgMiwgMjQxLCA1OSwgODcsIDI2LCAyMTQsIAorICAgIDE1OCwgMiwgMjU1LCAxMiwgMjIsIDI0MSwgNTksIDg3LCAyNiwgMjE0LCAxNTgsIDIsIDI0OCwgMTAsIDIyLCAyNDEsIDU5LCAKKyAgICA4NywgMjYsIDIyNSwgMTM3LCA4NywgMjYsIDIyNSwgMTEyLCA4NywgMjYsIDIzNCwgMjUzLCA4NywgMjYsIDEsIDI1NCwgMzEsIAorICAgIDIzNCwgMTIsIDI2LCA0LCAxLCAyNTQsIDMxLCAyMzQsIDEyLCAyNiwgMSwgMjE4LCAxMzksIDI2LCA0LCAxLCAyMTgsIDEzOSwgCisgICAgMjYsIDEsIDI0NywgMjM1LCAyNiwgNCwgMSwgMjQ3LCAyMzUsIDI2LCAxLCAyMzQsIDEyLCAyNiwgNCwgMSwgMjM0LCAxMiwgCisgICAgMjYsIDEsIDIyMSwgMjQ4LCAyNiwgNCwgMSwgMjIxLCAyNDgsIDgxLCA2LCAxLCAyMjAsIDU3LCA4MSwgNCwgMSwgMjIwLCAKKyAgICA1NywgODEsIDYsIDEsIDI0NCwgMTQ4LCA4MSwgNCwgMSwgMjQ0LCAxNDgsIDgxLCA2LCAxLCAyMzQsIDEyMywgODEsIDQsIDEsIAorICAgIDIzNCwgMTIzLCA4MSwgNiwgMSwgMjQxLCA1MiwgODEsIDQsIDEsIDI0MSwgNTIsIDgxLCA2LCAxLCAyNDMsIDEwOSwgODEsIAorICAgIDQsIDEsIDI0MywgMTA5LCA4MSwgNiwgMSwgMjIwLCAyNCwgODEsIDQsIDEsIDIyMCwgMjQsIDgxLCA2LCAxLCAyNDgsIDc3LCAKKyAgICA4MSwgNCwgMSwgMjQ4LCA3NywgMjYsIDIzNCwgMjI5LCA4NywgMjYsIDIyMywgNDEsIDg3LCAyNiwgMjMyLCA4OCwgMjE5LCAKKyAgICAxODAsIDg3LCAyNiwgMSwgMjEwLCAyMjQsIDI2LCA2LCAyMTYsIDE4MSwgODcsIDI2LCAyMzIsIDg4LCAyNDUsIDEwOSwgODcsIAorICAgIDI2LCAyMjMsIDUyLCAyMzIsIDg4LCAyNDUsIDEwOSwgODcsIDI2LCA2LCAxLCAyMjAsIDksIDI2LCA0LCAxLCAyMjAsIDksIAorICAgIDI2LCA2LCAyMzIsIDg4LCAyMTksIDE4MCwgODcsIDI2LCA2LCAxLCAyMjEsIDI0NSwgMjYsIDQsIDEsIDIyMSwgMjQ1LCAyNiwgCisgICAgMjIzLCA0MSwgMiwgMjE4LCAxMDUsIDg3LCAyNiwgNiwgMjIzLCA1MiwgMjMyLCA4OCwgMjE5LCAxODAsIDg3LCAyNiwgNiwgCisgICAgMjQ2LCAxMjYsIDIzMiwgODgsIDIxOSwgMTgwLCA4NywgMjYsIDYsIDIyMywgNTIsIDI0NiwgMTI2LCAyMzIsIDg4LCAyMTksIAorICAgIDE4MCwgODcsIDMzLCA2LCAxLCAyMzYsIDY4LCAyLCAyNDIsIDE0MywgMzMsIDYsIDEsIDIzNSwgMTk2LCAzMywgNiwgMSwgCisgICAgMjQ3LCAxNzAsIDMzLCA2LCAxLCAyNDIsIDE5NCwgMzMsIDYsIDEsIDIxNCwgMjAyLCAyMzYsIDY3LCAzMywgNiwgMSwgMjQ2LCAKKyAgICA0NCwgMzMsIDYsIDEsIDI1MSwgODQsIDc0LCAzMywgNiwgMSwgMjExLCA4LCAzMywgNiwgMSwgMjM1LCAxMzIsIDMzLCA2LCAKKyAgICAxLCAyMzIsIDE5MywgMzMsIDYsIDEsIDIyOCwgMTgzLCAzMywgNiwgMSwgMjE1LCAxNzUsIDMzLCA2LCAxLCAyMzQsIDU0LCAKKyAgICAzMywgNiwgMSwgMjQwLCAxNjEsIDIsIDI0MiwgMTQzLCAzMywgNiwgMSwgMjE5LCAyNTMsIDY5LCAzMywgNiwgMSwgMjQ2LCAKKyAgICA0MCwgMzMsIDYsIDEsIDYxLCAzMywgNiwgMSwgMjUyLCA4MywgMzMsIDYsIDEsIDIxMywgMjU1LCAzMywgNiwgMSwgMjQyLCAKKyAgICAyNDMsIDMzLCA2LCAxLCAyNDgsIDk4LCAzMywgNiwgMSwgMjM2LCA2NywgMzMsIDYsIDEsIDIxMCwgNzQsIDMzLCA2LCAxLCAKKyAgICAyMTAsIDk0LCAzMywgNiwgMSwgNzQsIDMzLCA2LCAxLCAyMTksIDI1MywgNzQsIDMzLCA2LCAxLCAxNzYsIDMzLCA2LCAxLCAKKyAgICAyNDUsIDE4MiwgMzMsIDYsIDEsIDI0NSwgMTY3LCAzMywgNiwgMSwgMjQ1LCAxNTgsIDMzLCA2LCAxLCA3OCwgMzMsIDYsIDEsIAorICAgIDIyNSwgMjI0LCAzMywgNiwgMSwgMjQ1LCAxMDAsIDMzLCA2LCAxLCAyNDUsIDkwLCAzMywgNiwgMSwgMjE3LCAyMywgMzMsIAorICAgIDYsIDEsIDY5LCAzMywgNiwgMSwgMjQ1LCAyMTAsIDMzLCA2LCAxLCAxNjIsIDMzLCA2LCAxLCAyMTUsIDE3OSwgMzMsIDYsIAorICAgIDEsIDI1MCwgMTM5LCAzMywgNiwgMSwgMjIwLCAxMDQsIDMzLCA2LCAxLCAyMjAsIDY3LCAzMywgNiwgMSwgMjQyLCAxMCwgCisgICAgNTAsIDMzLCA2LCAxLCAyMTEsIDI3LCAzMywgNiwgMSwgMjE5LCA1NCwgNTAsIDMzLCA2LCAxLCA3NiwgMzMsIDYsIDEsIAorICAgIDIxMCwgMjEyLCAzMywgNiwgMSwgMTkyLCAzMywgNCwgMSwgNjEsIDMzLCA0LCAxLCAyNTIsIDgzLCAzMywgNCwgMSwgMjEzLCAKKyAgICAyNTUsIDMzLCA0LCAxLCAyNDIsIDI0MywgMzMsIDQsIDEsIDI0OCwgOTgsIDMzLCA0LCAxLCAyMzYsIDY3LCAzMywgNCwgMSwgCisgICAgMjEwLCA3NCwgMzMsIDQsIDEsIDIxMCwgOTQsIDMzLCA0LCAxLCA3NCwgMzMsIDQsIDEsIDIxOSwgMjUzLCA3NCwgMzMsIDQsIAorICAgIDEsIDE3NiwgMzMsIDQsIDEsIDI0NSwgMTgyLCAzMywgNCwgMSwgMjQ1LCAxNjcsIDMzLCA0LCAxLCAyNDUsIDE1OCwgMzMsIAorICAgIDQsIDEsIDc4LCAzMywgNCwgMSwgMjI1LCAyMjQsIDMzLCA0LCAxLCAyNDUsIDEwMCwgMzMsIDQsIDEsIDI0NSwgOTAsIDMzLCAKKyAgICA0LCAxLCAyMTcsIDIzLCAzMywgNCwgMSwgNjksIDMzLCA0LCAxLCAyNDUsIDIxMCwgMzMsIDQsIDEsIDE2MiwgMzMsIDQsIDEsIAorICAgIDIxNSwgMTc5LCAzMywgNCwgMSwgMjUwLCAxMzksIDMzLCA0LCAxLCAyMjAsIDEwNCwgMzMsIDQsIDEsIDIyMCwgNjcsIDMzLCAKKyAgICA0LCAxLCAyNDIsIDEwLCA1MCwgMzMsIDQsIDEsIDIxMSwgMjcsIDMzLCA0LCAxLCAyMTksIDU0LCA1MCwgMzMsIDQsIDEsIAorICAgIDc2LCAzMywgNCwgMSwgMjEwLCAyMTIsIDMzLCA0LCAxLCAxOTIsIDMzLCA0LCAxLCAyMzYsIDY4LCAyLCAyNDIsIDE0MywgCisgICAgMzMsIDQsIDEsIDIzNSwgMTk2LCAzMywgNCwgMSwgMjQ3LCAxNzAsIDMzLCA0LCAxLCAyNDIsIDE5NCwgMzMsIDQsIDEsIAorICAgIDIxNCwgMjAyLCAyMzYsIDY3LCAzMywgNCwgMSwgMjQ2LCA0NCwgMzMsIDQsIDEsIDI1MSwgODQsIDc0LCAzMywgNCwgMSwgCisgICAgMjExLCA4LCAzMywgNCwgMSwgMjM1LCAxMzIsIDMzLCA0LCAxLCAyMzIsIDE5MywgMzMsIDQsIDEsIDIyOCwgMTgzLCAzMywgCisgICAgNCwgMSwgMjE1LCAxNzUsIDMzLCA0LCAxLCAyMzQsIDU0LCAzMywgNCwgMSwgMjQwLCAxNjEsIDIsIDI0MiwgMTQzLCAzMywgCisgICAgNCwgMSwgMjE5LCAyNTMsIDY5LCAzMywgNCwgMSwgMjQ2LCA0MCwgMzMsIDYsIDEsIDIyNiwgMjA1LCAzMywgNCwgMSwgMjI2LCAKKyAgICAyMDUsIDMzLCA2LCAxLCAyMTEsIDU5LCAzMywgNCwgMSwgMjExLCA1OSwgMzMsIDYsIDEsIDIzNSwgMTkwLCA3NiwgMzMsIDQsIAorICAgIDEsIDIzNSwgMTkwLCA3NiwgMzMsIDYsIDEsIDIzMiwgMTk4LCAyMTAsIDE4MywgMzMsIDQsIDEsIDIzMiwgMTk4LCAyMTAsIAorICAgIDE4MywgMzMsIDYsIDEsIDIzNSwgMTkwLCAyMzIsIDE5OCwgMjEwLCAxODMsIDMzLCA0LCAxLCAyMzUsIDE5MCwgMjMyLCAKKyAgICAxOTgsIDIxMCwgMTgzLCAzMywgNiwgMSwgMjUyLCAxLCAyMTAsIDE4MywgMzMsIDQsIDEsIDI1MiwgMSwgMjEwLCAxODMsIAorICAgIDMzLCA2LCAxLCAyMzUsIDE5MCwgMjUyLCAxLCAyMTAsIDE4MywgMzMsIDQsIDEsIDIzNSwgMTkwLCAyNTIsIDEsIDIxMCwgCisgICAgMTgzLCAzMywgNiwgMSwgMjMzLCAyMzksIDMzLCA0LCAxLCAyMzMsIDIzOSwgMzMsIDYsIDEsIDIyNCwgMTY0LCAzMywgNCwgCisgICAgMSwgMjI0LCAxNjQsIDMzLCA2LCAxLCAyNDQsIDkwLCAzMywgNCwgMSwgMjQ0LCA5MCwgMzMsIDYsIDEsIDIzNSwgMTUyLCAKKyAgICAzMywgNCwgMSwgMjM1LCAxNTIsIDMzLCA2LCAxLCAyMzUsIDE1MywgMiwgNTIsIDI0MiwgMTQ0LCAyNTUsIDIzLCAzMywgNCwgCisgICAgMSwgMjM1LCAxNTMsIDIsIDUyLCAyNDIsIDE0NCwgMjU1LCAyMywgMzMsIDYsIDEsIDIxNCwgMjA1LCAzMywgNCwgMSwgMjE0LCAKKyAgICAyMDUsIDMzLCA2LCAxLCAyMjIsIDE4NywgMjI2LCAyMDUsIDMzLCA0LCAxLCAyMjIsIDE4NywgMjI2LCAyMDUsIDMzLCA2LCAKKyAgICAxLCAyMjYsIDIwNiwgMiwgMjE2LCA2NiwgMzMsIDQsIDEsIDIyNiwgMjA2LCAyLCAyMTYsIDY2LCAzMywgNiwgMSwgMjI2LCAKKyAgICAxNDQsIDMzLCA0LCAxLCAyMjYsIDE0NCwgMzMsIDYsIDEsIDIzNCwgMTIsIDMzLCA0LCAxLCAyMzQsIDEyLCAzMywgMjE2LCAKKyAgICAxNDcsIDUwLCAzOCwgMzMsIDIxNiwgNjYsIDM4LCAzMywgMjI2LCA2OSwgMzgsIDMzLCAyNDgsIDE2MiwgMjI1LCAyMSwgMzgsIAorICAgIDMzLCAyMjQsIDE1OCwgMjI1LCAyMSwgMzgsIDMzLCAyMjUsIDYsIDM4LCAzMywgMjQwLCAyMTgsIDIxNiwgMTQ3LCA1MCwgCisgICAgMzgsIDMzLCAyMzAsIDE5NiwgNTAsIDMzLCA2LCAxLCAyMTksIDI1MywgMjQwLCAxNjEsIDIsIDIxNywgNzgsIDMzLCA0LCAxLCAKKyAgICAyMTksIDI1MywgMjQwLCAxNjEsIDIsIDIxNywgNzgsIDMzLCA2LCAxLCAyMjAsIDE0OCwgNTAsIDMzLCA0LCAxLCAyMjAsIAorICAgIDE0OCwgNTAsIDMzLCA2LCAxLCAyNDUsIDEwMSwgMiwgMjE2LCAxMTUsIDMzLCA0LCAxLCAyNDUsIDEwMSwgMiwgMjE2LCAKKyAgICAxMTUsIDMzLCA2LCAxLCAyNDIsIDI0NCwgMiwgMjE0LCAxNTYsIDMzLCA0LCAxLCAyNDIsIDI0NCwgMiwgMjE0LCAxNTYsIAorICAgIDMzLCA2LCAxLCAyNDIsIDI0NCwgMiwgOTEsIDMzLCA0LCAxLCAyNDIsIDI0NCwgMiwgOTEsIDMzLCA2LCAxLCAyNDIsIDI0NCwgCisgICAgMiwgMjMwLCAyMjksIDEwMywgMzMsIDQsIDEsIDI0MiwgMjQ0LCAyLCAyMzAsIDIyOSwgMTAzLCAzMywgNiwgMSwgMjEwLCAKKyAgICA3NSwgMiwgMjQ4LCA0NywgMzMsIDQsIDEsIDIxMCwgNzUsIDIsIDI0OCwgNDcsIDMzLCA2LCAxLCAyMTAsIDk1LCAyLCAyNDgsIAorICAgIDQ3LCAzMywgNCwgMSwgMjEwLCA5NSwgMiwgMjQ4LCA0NywgMzMsIDYsIDEsIDIzNSwgMTksIDIsIDI0OCwgNDcsIDMzLCA0LCAKKyAgICAxLCAyMzUsIDE5LCAyLCAyNDgsIDQ3LCAzMywgNiwgMSwgMjM1LCAxOSwgMiwgNjcsIDkxLCAzMywgNCwgMSwgMjM1LCAxOSwgCisgICAgMiwgNjcsIDkxLCAzMywgNiwgMSwgMjM1LCAxOSwgMiwgOTEsIDMzLCA0LCAxLCAyMzUsIDE5LCAyLCA5MSwgMzMsIDYsIDEsIAorICAgIDI1MiwgMTMyLCAxNzYsIDMzLCA0LCAxLCAyNTIsIDEzMiwgMTc2LCAzMywgNiwgMSwgMjQ1LCAxNTksIDIsIDI0OCwgNDcsIAorICAgIDMzLCA0LCAxLCAyNDUsIDE1OSwgMiwgMjQ4LCA0NywgMzMsIDYsIDI3LCAyNDUsIDE1OSwgMjQyLCAyNDMsIDMzLCA0LCAyNywgCisgICAgMjQ1LCAxNTksIDI0MiwgMjQzLCAzMywgNiwgMSwgMjI1LCAyMjUsIDIsIDIzMCwgMjI5LCAxMDMsIDMzLCA0LCAxLCAyMjUsIAorICAgIDIyNSwgMiwgMjMwLCAyMjksIDEwMywgMzMsIDYsIDEsIDI1NSwgMjksIDE2MiwgMzMsIDQsIDEsIDI1NSwgMjksIDE2MiwgCisgICAgMzMsIDYsIDEsIDI0NSwgOTEsIDIsIDI0OCwgNDcsIDMzLCA0LCAxLCAyNDUsIDkxLCAyLCAyNDgsIDQ3LCAzMywgNiwgMSwgCisgICAgMjE3LCAyNCwgMiwgMjQ4LCA0NywgMzMsIDQsIDEsIDIxNywgMjQsIDIsIDI0OCwgNDcsIDMzLCA2LCAxLCAyMTgsIDEyMywgCisgICAgNjksIDMzLCA0LCAxLCAyMTgsIDEyMywgNjksIDMzLCA2LCAxLCAyMTgsIDEyMywgMTA0LCAyLCA5MSwgMzMsIDQsIDEsIAorICAgIDIxOCwgMTIzLCAxMDQsIDIsIDkxLCAzMywgNiwgMSwgMjQyLCA1NiwgMiwgMjQ4LCA0NywgMzMsIDQsIDEsIDI0MiwgNTYsIAorICAgIDIsIDI0OCwgNDcsIDMzLCA2LCAyNywgMjE3LCAyNCwgMjE1LCAxNzksIDMzLCA0LCAyNywgMjE3LCAyNCwgMjE1LCAxNzksIAorICAgIDMzLCA2LCAxLCAyNTAsIDE0MCwgMiwgMjQ4LCA0NywgMzMsIDQsIDEsIDI1MCwgMTQwLCAyLCAyNDgsIDQ3LCAzMywgNiwgMSwgCisgICAgMjUwLCAxNDAsIDIsIDY3LCA5MSwgMzMsIDQsIDEsIDI1MCwgMTQwLCAyLCA2NywgOTEsIDMzLCA2LCAxLCAyMjAsIDM1LCAKKyAgICAzMywgNCwgMSwgMjIwLCAzNSwgMzMsIDYsIDEsIDI1NSwgMjksIDI1MCwgMTM5LCAzMywgNCwgMSwgMjU1LCAyOSwgMjUwLCAKKyAgICAxMzksIDMzLCA2LCAxLCAyNTUsIDI5LCAyNTAsIDE0MCwgMiwgMjQ4LCA0NywgMzMsIDQsIDEsIDI1NSwgMjksIDI1MCwgCisgICAgMTQwLCAyLCAyNDgsIDQ3LCAzMywgMSwgMjI2LCA2MiwgMzMsIDYsIDEsIDIxMCwgNzUsIDIsIDI1MSwgMTU0LCAzMywgNCwgCisgICAgMSwgMjEwLCA3NSwgMiwgMjUxLCAxNTQsIDMzLCA2LCAxLCAyMzUsIDE5LCAyLCAxMDMsIDMzLCA0LCAxLCAyMzUsIDE5LCAyLCAKKyAgICAxMDMsIDMzLCA2LCAxLCAyNDUsIDE4MywgMiwgMjE3LCA3OCwgMzMsIDQsIDEsIDI0NSwgMTgzLCAyLCAyMTcsIDc4LCAzMywgCisgICAgNiwgMSwgMjQ1LCAxNTksIDIsIDEwMywgMzMsIDQsIDEsIDI0NSwgMTU5LCAyLCAxMDMsIDMzLCA2LCAxLCAyNDUsIDE1OSwgCisgICAgMiwgMjE3LCA3OCwgMzMsIDQsIDEsIDI0NSwgMTU5LCAyLCAyMTcsIDc4LCAzMywgNiwgMSwgMjM0LCAxMzMsIDI1MCwgMTM5LCAKKyAgICAzMywgNCwgMSwgMjM0LCAxMzMsIDI1MCwgMTM5LCAzMywgNiwgMSwgMjQ1LCAxNjgsIDIsIDIxNywgNzgsIDMzLCA0LCAxLCAKKyAgICAyNDUsIDE2OCwgMiwgMjE3LCA3OCwgMzMsIDQsIDEsIDIyNiwgNjIsIDMzLCA2LCAxLCAxMTYsIDIsIDI1MSwgMTU0LCAzMywgCisgICAgNCwgMSwgMTE2LCAyLCAyNTEsIDE1NCwgMzMsIDYsIDEsIDExNiwgMiwgMjQ4LCA5LCAzMywgNCwgMSwgMTE2LCAyLCAyNDgsIAorICAgIDksIDMzLCA2LCAyNywgMTE2LCAyMzYsIDY3LCAzMywgNCwgMjcsIDExNiwgMjM2LCA2NywgMzMsIDYsIDEsIDIzNiwgNjgsIAorICAgIDIsIDI1MSwgMTU0LCAzMywgNCwgMSwgMjM2LCA2OCwgMiwgMjUxLCAxNTQsIDMzLCA2LCAxLCAyMjEsIDE5NywgMzMsIDQsIAorICAgIDEsIDIyMSwgMTk3LCAzMywgNiwgMSwgMjIxLCAxOTgsIDIsIDI0OCwgOSwgMzMsIDQsIDEsIDIyMSwgMTk4LCAyLCAyNDgsIAorICAgIDksIDMzLCA2LCAxLCAyMTAsIDc1LCAyLCAyNDgsIDksIDMzLCA0LCAxLCAyMTAsIDc1LCAyLCAyNDgsIDksIDMzLCA2LCAxLCAKKyAgICAyMTAsIDk1LCAyLCAyNDgsIDksIDMzLCA0LCAxLCAyMTAsIDk1LCAyLCAyNDgsIDksIDMzLCA2LCAxLCAyNTUsIDI5LCAyNDYsIAorICAgIDQ0LCAzMywgNCwgMSwgMjU1LCAyOSwgMjQ2LCA0NCwgMzMsIDYsIDEsIDI0MCwgMTYxLCAyLCAyMzEsIDIzNywgMzMsIDQsIAorICAgIDEsIDI0MCwgMTYxLCAyLCAyMzEsIDIzNywgMzMsIDYsIDEsIDI0MCwgMTYxLCAyLCAyNDgsIDksIDMzLCA0LCAxLCAyNDAsIAorICAgIDE2MSwgMiwgMjQ4LCA5LCAzMywgNiwgMSwgMTQ0LCAyLCAyNDgsIDksIDMzLCA0LCAxLCAxNDQsIDIsIDI0OCwgOSwgMzMsIAorICAgIDYsIDEsIDI1MiwgMTQyLCA3OCwgMzMsIDQsIDEsIDI1MiwgMTQyLCA3OCwgMzMsIDYsIDEsIDI1MiwgMTQyLCAxNDQsIDIsIAorICAgIDI0OCwgOSwgMzMsIDQsIDEsIDI1MiwgMTQyLCAxNDQsIDIsIDI0OCwgOSwgMzMsIDYsIDEsIDE2MCwgMiwgMjQ4LCA5LCAzMywgCisgICAgNCwgMSwgMTYwLCAyLCAyNDgsIDksIDMzLCA2LCAxLCAxMDQsIDIsIDIzMSwgMjM3LCAzMywgNCwgMSwgMTA0LCAyLCAyMzEsIAorICAgIDIzNywgMzMsIDYsIDEsIDEwNCwgMiwgMjQ4LCA5LCAzMywgNCwgMSwgMTA0LCAyLCAyNDgsIDksIDMzLCA2LCAxLCAxMDQsIAorICAgIDIsIDUyLCAxNDIsIDMzLCA0LCAxLCAxMDQsIDIsIDUyLCAxNDIsIDMzLCA2LCAxLCAyNTAsIDE0MCwgMiwgMjQ4LCA5LCAzMywgCisgICAgNCwgMSwgMjUwLCAxNDAsIDIsIDI0OCwgOSwgMzMsIDYsIDEsIDI0MiwgMjQ0LCAyLCAyNDgsIDQ3LCAzMywgNCwgMSwgMjQyLCAKKyAgICAyNDQsIDIsIDI0OCwgNDcsIDMzLCA2LCAxLCAyMTEsIDI4LCAyLCAyNDgsIDksIDMzLCA0LCAxLCAyMTEsIDI4LCAyLCAyNDgsIAorICAgIDksIDMzLCA2LCAxLCAyNDIsIDI0NCwgMiwgMjE4LCAxMDUsIDIyLCAxMDMsIDMzLCA0LCAxLCAyNDIsIDI0NCwgMiwgMjE4LCAKKyAgICAxMDUsIDIyLCAxMDMsIDMzLCA2LCAxLCAyNDIsIDU2LCAyLCAxMDMsIDMzLCA0LCAxLCAyNDIsIDU2LCAyLCAxMDMsIDMzLCAKKyAgICA2LCAxLCAyNDIsIDU2LCAyLCA5MSwgMzMsIDQsIDEsIDI0MiwgNTYsIDIsIDkxLCAzMywgNiwgMSwgMjM0LCAyMCwgMjQ4LCAKKyAgICA5OCwgMzMsIDQsIDEsIDIzNCwgMjAsIDI0OCwgOTgsIDMzLCA2LCAxLCAyMzQsIDIwLCAyNDcsIDE3MCwgMzMsIDQsIDEsIAorICAgIDIzNCwgMjAsIDI0NywgMTcwLCAzMywgNiwgMSwgMjM0LCAyMCwgMjEwLCAyNywgMzMsIDQsIDEsIDIzNCwgMjAsIDIxMCwgCisgICAgMjcsIDMzLCA2LCAxLCAyMzQsIDIwLCAyNDYsIDM4LCAzMywgNCwgMSwgMjM0LCAyMCwgMjQ2LCAzOCwgMzMsIDYsIDEsIAorICAgIDIzNCwgMjAsIDIzMiwgMTkzLCAzMywgNCwgMSwgMjM0LCAyMCwgMjMyLCAxOTMsIDMzLCA2LCAxLCAyMzQsIDIwLCAyMjgsIAorICAgIDE4MywgMzMsIDQsIDEsIDIzNCwgMjAsIDIyOCwgMTgzLCAzMywgNiwgMSwgMjM0LCAyMCwgMjE5LCAxMTEsIDMzLCA0LCAxLCAKKyAgICAyMzQsIDIwLCAyMTksIDExMSwgMzMsIDYsIDEsIDIzNCwgMjAsIDIxNiwgNjEsIDMzLCA0LCAxLCAyMzQsIDIwLCAyMTYsIAorICAgIDYxLCAzMywgNiwgMSwgMjIzLCA1MiwgMjEwLCA5NCwgMzMsIDQsIDEsIDIyMywgNTIsIDIxMCwgOTQsIDMzLCA2LCAxLCAKKyAgICAyNDUsIDE4MywgMiwgMTAzLCAzMywgNCwgMSwgMjQ1LCAxODMsIDIsIDEwMywgMzMsIDYsIDEsIDIzMywgNCwgMzMsIDQsIDEsIAorICAgIDIzMywgNCwgMzMsIDYsIDEsIDIyMywgNDIsIDMzLCA0LCAxLCAyMjMsIDQyLCAzMywgNiwgMSwgMjExLCA5MiwgMzMsIDQsIAorICAgIDEsIDIxMSwgOTIsIDMzLCA2LCAxLCAyMjQsIDkxLCAzMywgNCwgMSwgMjI0LCA5MSwgMzMsIDYsIDEsIDIxMiwgMjIsIDMzLCAKKyAgICA0LCAxLCAyMTIsIDIyLCAzMywgNiwgMSwgMjU0LCAxNzUsIDE3NiwgMzMsIDQsIDEsIDI1NCwgMTc1LCAxNzYsIDMzLCA2LCAKKyAgICAxLCAyNDUsIDE4MywgMiwgMjMwLCAyMjksIDEwMywgMzMsIDQsIDEsIDI0NSwgMTgzLCAyLCAyMzAsIDIyOSwgMTAzLCAzMywgCisgICAgNiwgMSwgMjQ1LCAxNTksIDIsIDIzMCwgMjI5LCAxMDMsIDMzLCA0LCAxLCAyNDUsIDE1OSwgMiwgMjMwLCAyMjksIDEwMywgCisgICAgMzMsIDYsIDEsIDIyNSwgMjI1LCAyLCAyNDgsIDQ3LCAzMywgNCwgMSwgMjI1LCAyMjUsIDIsIDI0OCwgNDcsIDMzLCA2LCAxLCAKKyAgICAyMjAsIDM2LCAyLCAyNDgsIDQ3LCAzMywgNCwgMSwgMjIwLCAzNiwgMiwgMjQ4LCA0NywgMTUwLCA2LCAxLCAyNTMsIDE3MiwgCisgICAgMTUwLCA2LCAxLCAyNTIsIDQ3LCAxNTAsIDYsIDEsIDI0MiwgMjEwLCAxNTAsIDYsIDEsIDI0OCwgMjI5LCAxNTAsIDYsIDEsIAorICAgIDI0NSwgMjIxLCAxNTAsIDYsIDEsIDIxMCwgMTE2LCAxNTAsIDYsIDEsIDI0NSwgMjA1LCAxNTAsIDYsIDEsIDI0NSwgNzMsIAorICAgIDE1MCwgNiwgMSwgMTEyLCAxNTAsIDYsIDEsIDIxMCwgNzQsIDE1MCwgNiwgMSwgMjM1LCAyMzQsIDE1MCwgNiwgMSwgMjMyLCAKKyAgICAxOTYsIDE1MCwgNiwgMSwgMjExLCAxNjAsIDE1MCwgNiwgMSwgMjUxLCA0MSwgMTUwLCA2LCAxLCAyMzQsIDE3MSwgMTUwLCAKKyAgICA2LCAxLCAyNDEsIDc1LCAxNTAsIDYsIDEsIDIzNSwgMTQ3LCAxNTAsIDYsIDEsIDI0MiwgMjUzLCAxNTAsIDYsIDEsIDI1MCwgCisgICAgMTM0LCAxNTAsIDYsIDEsIDIzMSwgNjMsIDE1MCwgNiwgMSwgMjExLCA4LCAxNTAsIDYsIDEsIDIyOCwgNDQsIDE1MCwgNiwgCisgICAgMSwgMjIwLCAxMDQsIDE1MCwgNiwgMSwgMjEzLCAxMzgsIDE1MCwgNiwgMSwgMjUwLCAxNjUsIDE1MCwgNiwgMSwgMjI1LCAKKyAgICAyMDgsIDE1MCwgNiwgMSwgMjM1LCAxMTYsIDE1MCwgNiwgMSwgMjA1LCAxNTAsIDYsIDEsIDIyMSwgMTYzLCAxNTAsIDYsIDEsIAorICAgIDIxMywgMTc5LCAxNTAsIDYsIDEsIDIxNiwgNjMsIDE1MCwgNiwgMSwgMjIzLCA5OCwgMTUwLCA2LCAxLCAyNDksIDI0NiwgCisgICAgMTUwLCA2LCAxLCAyMTAsIDI0OSwgMTUwLCA2LCAxLCAyMjUsIDQ5LCAxNTAsIDYsIDEsIDIzNCwgMTgyLCAxNTAsIDYsIDEsIAorICAgIDIyNiwgMjI2LCAxNTAsIDYsIDEsIDI0NCwgMTUwLCAxNTAsIDU4LCAxLCA0MywgMTYzLCAyMjIsIDIzNiwgMTUwLCAyNTQsIAorICAgIDY1LCAxNTAsIDI0NSwgMTYyLCA3OSwgMTUwLCAyNDUsIDM5LCA3OSwgMTUwLCAyNDksIDIyNywgMTUwLCAyMjQsIDE2LCA3OSwgCisgICAgMTUwLCAyNTUsIDMwLCA3OSwgMTUwLCA0LCAxLCAyNTMsIDE3MiwgMTUwLCA0LCAxLCAyNTIsIDQ3LCAxNTAsIDQsIDEsIAorICAgIDI0MiwgMjEwLCAxNTAsIDQsIDEsIDI0OCwgMjI5LCAxNTAsIDQsIDEsIDI0NSwgMjIxLCAxNTAsIDQsIDEsIDIxMCwgMTE2LCAKKyAgICAxNTAsIDQsIDEsIDI0NSwgMjA1LCAxNTAsIDQsIDEsIDI0NSwgNzMsIDE1MCwgNCwgMSwgMTEyLCAxNTAsIDQsIDEsIDIxMCwgCisgICAgNzQsIDE1MCwgNCwgMSwgMjM1LCAyMzQsIDE1MCwgNCwgMSwgMjMyLCAxOTYsIDE1MCwgNCwgMSwgMjExLCAxNjAsIDE1MCwgCisgICAgNCwgMSwgMjUxLCA0MSwgMTUwLCA0LCAxLCAyMzQsIDE3MSwgMTUwLCA0LCAxLCAyNDEsIDc1LCAxNTAsIDQsIDEsIDIzNSwgCisgICAgMTQ3LCAxNTAsIDQsIDEsIDI0MiwgMjUzLCAxNTAsIDQsIDEsIDI1MCwgMTM0LCAxNTAsIDQsIDEsIDIzMSwgNjMsIDE1MCwgCisgICAgNCwgMSwgMjExLCA4LCAxNTAsIDQsIDEsIDIyOCwgNDQsIDE1MCwgNCwgMSwgMjIwLCAxMDQsIDE1MCwgNCwgMSwgMjEzLCAKKyAgICAxMzgsIDE1MCwgNCwgMSwgMjUwLCAxNjUsIDE1MCwgNCwgMSwgMjI1LCAyMDgsIDE1MCwgNCwgMSwgMjM1LCAxMTYsIDE1MCwgCisgICAgNCwgMSwgMjA1LCAxNTAsIDQsIDEsIDIyMSwgMTYzLCAxNTAsIDQsIDEsIDIxMywgMTc5LCAxNTAsIDQsIDEsIDIxNiwgNjMsIAorICAgIDE1MCwgNCwgMSwgMjIzLCA5OCwgMTUwLCA0LCAxLCAyNDksIDI0NiwgMTUwLCA0LCAxLCAyMTAsIDI0OSwgMTUwLCA0LCAxLCAKKyAgICAyMjUsIDQ5LCAxNTAsIDQsIDEsIDIzNCwgMTgyLCAxNTAsIDQsIDEsIDIyNiwgMjI2LCAxNTAsIDQsIDEsIDI0NCwgMTUwLCAKKyAgICAxNTAsIDQsIDI3LCAyNDUsIDIyMiwgMjEwLCAyNDksIDE1MCwgMjQzLCAyMzYsIDIxOCwgMTMxLCAxNTAsIDI0MCwgMTc1LCAKKyAgICAxNTAsIDI0NiwgMTAzLCA1MCwgOTQsIDI1NSwgMjQsIDI0NSwgNjUsIDk0LCAyNTUsIDI0LCAyMjEsIDE2NCwgOTQsIDI1NSwgCisgICAgMjQsIDIyMCwgOTAsIDk0LCAyNTUsIDI0LCAyMTAsIDEwNCwgMjI0LCA3NCwgOTQsIDI1NSwgMjQsIDIxMCwgMTA0LCAyNDMsIAorICAgIDEzMiwgOTQsIDI1NSwgMjQsIDIxNiwgNzYsIDk0LCAyNTUsIDI0LCAyMjMsIDUwLCA5NCwgMjU1LCAyNCwgMjEwLCAxMDMsIAorICAgIDk0LCAyNTUsIDI0LCAyMjUsIDI0OSwgOTQsIDI1NSwgMjQsIDIxMSwgMjAsIDk0LCAyNTUsIDI0LCAyMTYsIDIxNSwgOTQsIAorICAgIDI1NSwgMjQsIDI0MywgNDgsIDk0LCAyNTUsIDI0LCAyNDMsIDQ5LCAyMzAsIDc0LCA5NCwgMjU1LCAyNCwgMjQzLCA0NiwgCisgICAgOTQsIDI1NSwgMjQsIDIyNCwgNzUsIDIyNiwgMjAsIDk0LCAyNTUsIDI0LCAyMTYsIDI1NCwgMjQzLCA2MywgOTQsIDI1NSwgCisgICAgMjQsIDIyNSwgMjMwLCA5NCwgMjU1LCAyNCwgMjUzLCAyMDgsIDI0MiwgNDgsIDk0LCAyNTUsIDI0LCAyMzAsIDg0LCA5NCwgCisgICAgMjU1LCAyNCwgMjMxLCAyMTMsIDk0LCAyNTUsIDI0LCAyMzEsIDU0LCA5NCwgMjU1LCAyNCwgMjMxLCA1NSwgMjM0LCAxODMsIAorICAgIDk0LCAyNTUsIDI0LCAyNDgsIDE3MSwgOTQsIDI1NSwgMjQsIDIyNCwgODYsIDk0LCAyNTUsIDI0LCAyMTYsIDI1NCwgMjI0LCAKKyAgICA3MCwgOTQsIDI1NSwgMjQsIDIxMSwgMzAsIDI1MiwgNDgsIDIxMCwgMjMwLCA5NCwgMjU1LCAyNCwgMjI2LCAyMTEsIDk0LCAKKyAgICAyNTUsIDI0LCAyMzYsIDI2LCA5NCwgMjU1LCAyNCwgMjQ4LCA3OCwgOTQsIDI1NSwgMjQsIDIxMCwgMzMsIDk0LCAxNjQsIAorICAgIDIzMSwgMTQ4LCAyNTAsIDQzLCA5NCwgMjI1LCAxNCwgMjIwLCAzOCwgOTQsIDIyNSwgMTQsIDI0MiwgMSwgMjIxLCAxNjQsIAorICAgIDk0LCAyMjUsIDE0LCAyNDIsIDEsIDIyNSwgMjQzLCA5NCwgMjI1LCAxNCwgMjQyLCAxLCAyMjQsIDc5LCA5NCwgMjI1LCAxNCwgCisgICAgMjQxLCAxNjUsIDk0LCAyMjUsIDE0LCAyMTUsIDE3NywgOTQsIDIyNSwgMTQsIDIyMSwgMTY0LCA5NCwgMjI1LCAxNCwgMjI1LCAKKyAgICAyNDMsIDk0LCAyMjUsIDE0LCAyMjQsIDc5LCA5NCwgMjI1LCAxNCwgMjQxLCA2OCwgOTQsIDIyNSwgMTQsIDI0MSwgNjksIAorICAgIDI0MiwgMywgMzEsIDIxNCwgMywgOTQsIDIyNSwgMTQsIDIyNCwgMjAsIDk0LCAyMjUsIDE0LCAyNDgsIDIxNiwgMTc3LCAKKyAgICAyMzEsIDE3NiwgOTQsIDIyNSwgMTQsIDIzMSwgNDMsIDk0LCAyMjQsIDE0NCwgMjMxLCAxNzMsIDk0LCAyMjUsIDE0LCAyMjMsIAorICAgIDE3MiwgOTQsIDIyNCwgMTQ0LCAyMjUsIDI1MSwgOTQsIDIyNSwgMTQsIDIyMCwgMjMsIDI0NywgMTI4LCA5NCwgMjI1LCAxNCwgCisgICAgMjE5LCAxNjEsIDI0NywgMTI4LCA5NCwgMjI0LCAxNDQsIDIxOSwgNTUsIDIyNSwgMjQ1LCA5NCwgMTY0LCAyMTQsIDE2MCwgCisgICAgMjQ3LCAxMjgsIDk0LCAxNjQsIDIzMiwgMTE0LCAyNDcsIDEyOCwgOTQsIDIyNCwgMTQ0LCAyMjcsIDE5OSwgMjQyLCA0NywgCisgICAgOTQsIDIyNSwgMTQsIDIyNCwgODAsIDIyNCwgNzQsIDk0LCAxLCAyNTQsIDE3OSwgOTQsIDEsIDI1MiwgMzYsIDk0LCAxLCAKKyAgICAyNDIsIDIwOCwgOTQsIDEsIDI0OCwgMTk3LCA5NCwgMSwgMjQxLCAyNDUsIDk0LCAxLCAyMTQsIDMsIDk0LCAxLCAyMTAsIAorICAgIDk3LCA5NCwgMSwgMjQxLCAyMDQsIDk0LCAxLCAyMTYsIDIzMSwgOTQsIDEsIDIxMCwgMjMzLCA5NCwgMSwgNDAsIDIzNSwgMCwgCisgICAgOTQsIDEsIDIzNSwgMCwgOTQsIDEsIDIzMywgMTAwLCA5NCwgMSwgNDAsIDIzMSwgNzAsIDk0LCAxLCAyMzEsIDcwLCA5NCwgCisgICAgMSwgNDAsIDIyNywgMTk4LCA5NCwgMSwgMjI3LCAxOTgsIDk0LCAxLCAyMjEsIDI1MSwgOTQsIDEsIDI1MywgMTcwLCA5NCwgCisgICAgMSwgNDAsIDIyNSwgMjI0LCA5NCwgMSwgMjI1LCAyMjQsIDk0LCAxLCA0MCwgMjE1LCAxODAsIDk0LCAxLCAyMTUsIDE4MCwgCisgICAgOTQsIDEsIDIyNCwgNDIsIDk0LCAxLCAyMjMsIDcwLCA5NCwgMSwgMjIwLCAyMiwgOTQsIDEsIDIxNywgMzksIDk0LCAyNywgCisgICAgMjExLCA2LCA1MiwgMjE0LCAzLCA5NCwgMjcsIDIxMSwgNiwgMjE0LCA0LCAyMTAsIDIzMywgOTQsIDI3LCAyMTEsIDYsIDUyLCAKKyAgICAyMTAsIDIzMywgOTQsIDIyNCwgMTQ0LCAyNDMsIDQ4LCA5NCwgMjI0LCAxNDQsIDI0MywgNDYsIDksIDU0LCA1MCwgOSwgNSwgCisgICAgMjIxLCAyNDQsIDksIDI0NCwgMzgsIDIzMSwgMTU5LCA5LCA1LCAyMjIsIDI1LCA5LCA1LCAyMjEsIDI0NywgMjU0LCA0NSwgCisgICAgMjQ5LCAxMTcsIDIyMiwgMTk1LCAyNTQsIDQ1LCAyNDQsIDEyLCAyMjIsIDE5NSwgOSwgMjIzLCAxMzcsIDI1NCwgNDUsIAorICAgIDIyNSwgMTg2LCAyMzAsIDE5OCwgNTAsIDI1NCwgNDUsIDIyNSwgMTg2LCAyMTYsIDI0OSwgMjE2LCAxNDksIDUwLCAyNTQsIAorICAgIDIzMCwgNTAsIDksIDI0OSwgMjI3LCA5LCAyNDgsIDE1OCwgMjIwLCAxMzksIDksIDIyNSwgMTYsIDIxMywgMjQxLCA1MCwgOSwgCisgICAgNSwgMjMwLCAxNzksIDksIDUsIDIyMiwgNSwgMjU0LCAxODEsIDIxMiwgNDUsIDksIDUsIDI1NCwgMTgxLCAyNTMsIDIyOSwgCisgICAgOSwgNSwgMjIzLCAxNzAsIDI1NCwgMTgwLCA5LCA1LCAyMjMsIDE3OCwgMjU0LCAxNjEsIDI1NCwgMTEyLCA5LCA1LCAyMTcsIAorICAgIDcxLCA5LCA0LCAxMjUsIDIxNywgODEsIDksIDQsIDEyNSwgMjcsIDEwOSwgMiwgMjMzLCAxMDksIDIsIDIxMSwgNDMsIDksIAorICAgIDQsIDEyNSwgMjEwLCAxMDgsIDksIDQsIDI0NCwgMTczLCA5LCA0LCAyNDgsIDE5MiwgOSwgNCwgMjM0LCAyMTEsIDksIDIyMCwgCisgICAgMTUyLCA5LCAxLCA3OSwgOSwgMjE1LCAyMTIsIDU5LCAyMjQsIDE0NCwgNzksIDksIDIyNCwgMTYsIDc5LCA5LCAxLCAyMzQsIAorICAgIDIxNSwgMjExLCA0MywgOSwgMSwgMjQyLCAyNiwgOSwgMSwgMTA5LCAyLCAyMzEsIDIzMywgNDgsIDksIDEsIDEwOSwgMiwgCisgICAgMTgyLCA0OCwgOSwgMSwgMjEyLCAzMSwgMiwgMTgyLCA0OCwgOSwgMSwgMTA5LCAyLCAxODIsIDUxLCA5LCAxLCA3NywgMiwgCisgICAgMTgyLCA0OCwgOSwgMSwgMjU0LCAxNzksIDksIDEsIDI1MiwgNjIsIDksIDEsIDIxNywgOSwgMjMxLCAxNjksIDksIDEsIAorICAgIDIxNywgOCwgOSwgMSwgMjE2LCAxOTMsIDksIDEsIDIzNSwgMTI5LCA5LCAxLCAyNDIsIDQ0LCA5LCAxLCAyMzQsIDEzNSwgOSwgCisgICAgMSwgMjQ4LCAyMDMsIDksIDEsIDIxNiwgMjAzLCA5LCAxLCAyMjMsIDk4LCA5LCAxLCAyMTAsIDEwOCwgOSwgMSwgMjIxLCAKKyAgICAxNjgsIDksIDEsIDIyMCwgNjEsIDksIDEsIDIyMiwgMjgsIDksIDEsIDI0OCwgMjI0LCA5LCAxLCAyMTcsIDgxLCA5LCAxLCAKKyAgICAyMTAsIDExMSwgOSwgMSwgMjU0LCAyMDUsIDksIDEsIDI0MiwgMjUxLCA5LCAxLCAyMzQsIDE4MSwgMiwgMTEzLCAxNzAsIAorICAgIDQ4LCA5LCAxLCAyMzQsIDE4MSwgMiwgMTM0LCAxNzAsIDUxLCA5LCAxLCAyNDQsIDE3NiwgNzcsIDIsIDIzNSwgMjAwLCAKKyAgICAyMTQsIDEwNSwgOSwgMSwgMjQ0LCAxNzYsIDc3LCAyLCAxMTMsIDE3MCwgNDgsIDksIDEsIDI0NCwgMTc2LCA3NywgMiwgCisgICAgMTM0LCAxNzAsIDQ4LCA5LCAyMTcsIDQ0LCA5LCAxLCAyNDQsIDE1MCwgOSwgMSwgMjI0LCA4NCwgOSwgMSwgMjM1LCAwLCA5LCAKKyAgICAxLCAyMzMsIDEwOCwgOSwgMSwgMjMxLCA4MywgOSwgMSwgMjI4LCA2NywgOSwgMSwgMjQxLCAyMjUsIDksIDEsIDIxMiwgMzAsIAorICAgIDksIDEsIDEwOSwgMjMxLCAxOTcsIDksIDEsIDIxMSwgNDMsIDksIDI0NCwgMTcxLCA5LCAyNDgsIDE5MCwgOSwgMjM0LCAKKyAgICAyMDksIDksIDI0NCwgMTczLCA5LCAyNDgsIDE5MiwgOSwgMjM0LCAyMTEsIDksIDIyMCwgOTUsIDksIDIxOCwgNDYsIDksIAorICAgIDIzMSwgMjMxLCA0OCwgOSwgMTgyLCA0OCwgOSwgMTgyLCA1MSwgOSwgMjE4LCA2NiwgMjU0LCAxNzksIDksIDIzNSwgMjAwLCAKKyAgICAyNDgsIDE5MiwgOSwgMTY0LCAyMjgsIDY4LCAyNDIsIDIyNSwgOSwgMjA5LCAyNTUsIDksIDI1LCA1LCA0LCAyMTQsIDEwNiwgCisgICAgNDgsIDksIDI1LCA1LCAyMzUsIDIwMCwgNCwgMjE0LCAxMDYsIDQ4LCA5LCAyNSwgNSwgNTksIDUxLCA5LCAyMjMsIDUyLCAKKyAgICAyNDgsIDE5MiwgOSwgMjQ0LCAxNzQsIDIsIDExMywgMjQ3LCAxMjYsIDksIDIxMiwgMzIsIDE4MiwgNTEsIDI1NCwgNDUsIAorICAgIDIxLCAyMTAsIDg2LCAyNTQsIDQ1LCAyMSwgMTExLCAyNTQsIDQ1LCAyMSwgMTA1LCAyNTQsIDQ1LCAyMSwgMTU4LCAyNTQsIAorICAgIDQ1LCAyMSwgMTYxLCAyNTQsIDQ1LCAyMSwgMTkwLCAyNTQsIDQ1LCAyMSwgMTk1LCAyNTQsIDQ1LCAyMSwgMTk5LCAyNTQsIAorICAgIDQ1LCAyMSwgMTk2LCAyNTQsIDQ1LCAyMSwgMjAxLCA5LCAyMjUsIDE4NSwgNTAsIDksIDI0OCwgOTEsIDIyMCwgMTM5LCA5LCAKKyAgICAyMTYsIDE0NywgMjIwLCAxMzksIDksIDI0NCwgODksIDIyNSwgMTIsIDIxOCwgMTU4LCA5LCAxLCAyNDcsIDEyNywgMjUyLCAKKyAgICA2MiwgOSwgMSwgMjQ3LCAxMjcsIDIyNCwgODQsIDksIDEsIDIxOCwgMjQsIDI1NCwgMTc5LCA5LCAxLCAxMDksIDIxMiwgNDYsIAorICAgIDksIDEsIDEwOSwgMiwgMjEyLCAzMiwgMTgyLCA0OCwgOSwgMSwgMTA5LCAyLCAyMTIsIDMyLCAxODIsIDUxLCA5LCAxLCAKKyAgICAxMjUsIDI0MiwgMjYsIDksIDEsIDEyNSwgMTgyLCAyNTQsIDE3OSwgOSwgMSwgMTI1LCAxODIsIDIxMiwgMzAsIDksIDEsIAorICAgIDEwNCwgMiwgMTgyLCA0OCwgOSwgMSwgMTI1LCAxODIsIDIxMSwgNDMsIDksIDEsIDIxNSwgMTQ5LCA5LCAxLCAyMTUsIDE0NywgCisgICAgOSwgMSwgMjUyLCA3MiwgOSwgMSwgMjE3LCA5LCAyLCAyMjIsIDIzNiwgOSwgMSwgMjE3LCA5LCAyLCAxMzQsIDE3MCwgNzIsIAorICAgIDI0NiwgMTExLCA5LCAxLCAyMjUsIDIwOCwgOSwgMSwgMjE3LCA2LCA5LCAxLCAyNTIsIDYwLCA5LCAxLCAxMjIsIDIsIDE4MiwgCisgICAgNDgsIDksIDEsIDEyMiwgMiwgMTEzLCAxNzAsIDY3LCA0OCwgOSwgMSwgMjI3LCAxNTcsIDksIDEsIDI0NiwgNTEsIDksIDEsIAorICAgIDEyMiwgMiwgMTM0LCAxNzAsIDQ4LCA5LCAxLCAyMTcsIDI3LCA5LCAxLCAyMTcsIDI1LCA5LCAxLCAyNDgsIDEzOCwgOSwgMSwgCisgICAgMjQ4LCAyMDQsIDIsIDIyMiwgMjM2LCA5LCAxLCAyNDgsIDIwNCwgMiwgNTksIDUxLCA5LCAxLCAyNDgsIDIwNCwgMiwgNTksIAorICAgIDI1MiwgNTEsIDIyLCA0LCAyMTcsIDgxLCA5LCAxLCAyNDgsIDIwOSwgOSwgMSwgMjQ4LCAxNDAsIDksIDEsIDI0NiwgNzgsIAorICAgIDksIDEsIDI0OCwgMjA0LCAyLCAxMzQsIDE3MCwgNzIsIDI0NiwgMTExLCA5LCAxLCAyNDgsIDIwNCwgMiwgMjQ0LCAxOSwgCisgICAgMTcwLCA0OCwgOSwgMSwgMjIyLCAxNzMsIDksIDEsIDIyMywgOTksIDIsIDQsIDIxNCwgMTA1LCA5LCAxLCAyMjMsIDk5LCAyLCAKKyAgICAyMjIsIDIzNiwgOSwgMSwgMjIzLCA5OSwgMiwgNTksIDUxLCA5LCAxLCAyMjMsIDk5LCAyLCA0LCAyMTQsIDEwNiwgNTEsIDksIAorICAgIDEsIDIyMywgOTksIDIsIDU5LCAyNTIsIDUxLCAyMiwgNTksIDQ4LCA5LCAxLCAyMjMsIDk5LCAyLCAxMTMsIDE3MCwgNDgsIAorICAgIDksIDEsIDIzNSwgMTI2LCA5LCAxLCAyMjMsIDk5LCAyLCAyNDQsIDE5LCAxNzAsIDQ4LCA5LCAxLCAyMjEsIDE2OSwgMiwgCisgICAgNTksIDI1MiwgNTEsIDIyLCA1OSwgNDgsIDksIDEsIDIyMSwgMTY5LCAyLCAxMzQsIDE3MCwgNTEsIDksIDEsIDIyMSwgMTY5LCAKKyAgICAyLCAxMzQsIDE3MCwgMjUyLCA1MSwgMjIsIDEzNCwgMTcwLCA0OCwgOSwgMSwgMjIyLCAyOSwgMiwgMTEzLCAxNzAsIDUxLCAKKyAgICA5LCAxLCAyMjIsIDI5LCAyLCAxMzQsIDE3MCwgNDgsIDksIDEsIDIxNywgODIsIDIsIDEzNCwgMTcwLCA0OCwgOSwgMSwgCisgICAgMjU0LCAyMDYsIDIsIDEzNCwgMTcwLCA0OCwgOSwgMSwgMjQ3LCAxMjcsIDI0NCwgMTUwLCA5LCAxLCAyNDQsIDE1MSwgMiwgCisgICAgNTksIDIzMCwgMTE0LCA1MSwgOSwgMSwgMjQ0LCAxNTEsIDIsIDU5LCA1MSwgOSwgMSwgMjEzLCAyNDgsIDksIDEsIDI0NCwgCisgICAgMTUxLCAyLCAxMzQsIDE3MCwgNTEsIDksIDEsIDIyNSwgMjA2LCA5LCAxLCAyMjQsIDg1LCAyLCA1OSwgNDgsIDksIDEsIAorICAgIDIyNCwgODUsIDIsIDEzNCwgMTcwLCA0OCwgOSwgMSwgMjM0LCAxODAsIDksIDEsIDIxNywgMjUxLCAyMzUsIDAsIDksIDEsIAorICAgIDIzNSwgMSwgMiwgMjIyLCAyMzYsIDksIDEsIDIzNSwgMSwgMiwgNTksIDQ4LCA5LCAxLCAyMjksIDg0LCA5LCAxLCAyMzUsIAorICAgIDEsIDIsIDEzNCwgMTcwLCA1MSwgOSwgMSwgMjQzLCAxMjksIDksIDEsIDI0MywgMTMwLCAyLCAyMjIsIDIzNiwgOSwgMSwgCisgICAgMjI5LCA3LCA5LCAxLCAyNDMsIDEzMCwgMiwgMTEzLCAxNzAsIDUxLCA5LCAxLCAyNDIsIDEwOCwgOSwgMSwgMjQzLCAxMzAsIAorICAgIDIsIDEzNCwgMTcwLCA0OCwgOSwgMSwgMjMzLCAxMDksIDIsIDQsIDIxNCwgMTA1LCA5LCAxLCAyMzMsIDEwOSwgMiwgNTksIAorICAgIDQ4LCA5LCAxLCAyMzMsIDEwOSwgMiwgMTM0LCAxNzAsIDQ4LCA5LCAxLCAyMzMsIDEwOSwgMiwgMTM0LCAxNzAsIDUxLCA5LCAKKyAgICAxLCAyMjgsIDY4LCAyLCA1OSwgNTEsIDksIDEsIDIyOCwgNjgsIDI0MiwgMjI1LCA5LCAxLCAyMjIsIDIxNiwgOSwgMSwgCisgICAgMjI4LCA2OCwgMiwgMjIyLCAyMzYsIDksIDEsIDIyOCwgNjgsIDIsIDEzNCwgMTcwLCA0OCwgOSwgMSwgMjQxLCAyMjYsIAorICAgIDI0NywgMTQ5LCA5LCAxLCAyMTcsIDI4LCAyLCA1OSwgNDgsIDksIDEsIDI0MSwgMjI2LCAyLCA3NywgNDgsIDksIDEsIDI0MSwgCisgICAgMjI2LCAyNDIsIDE3OCwgOSwgMSwgMjQxLCAyMjYsIDI0MiwgMTc5LCAyLCAxODIsIDQ4LCA5LCAxLCAyMTcsIDksIDIzMSwgCisgICAgMTcwLCAyNDIsIDE3OCwgOSwgMSwgMjEyLCAzMSwgMiwgMjIyLCAyMzYsIDksIDEsIDIzNCwgNzksIDIyNiwgMjM4LCA5LCAxLCAKKyAgICAyMjYsIDIzOCwgOSwgMSwgNjksIDksIDEsIDIxMCwgMjEyLCA5LCAxLCAyMzQsIDc5LCAyMTAsIDIxMiwgOSwgMSwgMjEyLCAKKyAgICAzMSwgMiwgMTEzLCAxNzAsIDQ4LCA5LCAxLCAyMTMsIDI1NSwgOSwgMSwgMjQ0LCAxNzYsIDIxMSwgNDMsIDksIDEsIDc3LCAKKyAgICAyLCAyMTcsIDc4LCA5LCAxLCA3NywgMiwgNCwgMjE0LCAxMDUsIDksIDEsIDIxMiwgMzEsIDIsIDU5LCA0OCwgOSwgMSwgNzYsIAorICAgIDksIDEsIDc3LCAyLCAxMzQsIDE3MCwgNTEsIDksIDEsIDc3LCAyNTIsIDE0MCwgOSwgMSwgNzcsIDI1MiwgMTQxLCAyLCAKKyAgICAxODIsIDQ4LCA5LCAyNDMsIDIzNiwgMjE4LCAxMzEsIDksIDEsIDI1NCwgMjUyLCA5LCA0LCAxMjUsIDI3LCAyMjIsIDI5LCAKKyAgICAyLCAyMzMsIDEwOSwgMiwgMTA5LCAyMzEsIDE5NywgOSwgNCwgMTI1LCAyNywgMjI0LCA4NSwgMiwgMjMzLCAxMDksIDIsIAorICAgIDEwOSwgMjMxLCAxOTcsIDksIDQsIDEyNSwgNjYsIDY1LCAxNywgOSwgNCwgMTI1LCAyMzMsIDEwOSwgMjU0LCAxNzksIDksIAorICAgIDQsIDEyNSwgMjM1LCAxMjksIDksIDQsIDEyNSwgMTM0LCAyNDcsIDEyNiwgOSwgNCwgMTI1LCAyMjEsIDE2OCwgOSwgMjQ1LCAKKyAgICAxNTEsIDY0LCAyNTMsIDE3NCwgOSwgMjE4LCAxNTQsIDY0LCAyMjIsIDE0MCwgMjQ1LCAxODMsIDI0MSwgMTYyLCA5LCA0LCAKKyAgICAxMjUsIDIyMiwgMTg1LCAyMTAsIDg2LCA5LCA0LCAxMjUsIDIxNCwgMTU5LCAyMjMsIDExOCwgMjEwLCA4NiwgOSwgNCwgCisgICAgMTI1LCAyNDcsIDEyNywgMjQxLCAyNDMsIDY0LCAyMzQsIDEzNSwgOSwgNCwgMTI1LCA2NiwgNTMsIDE3LCA5LCA0LCAxMjEsIAorICAgIDIyMSwgMTY4LCA5LCA0LCAxMjUsIDIzMSwgMjMyLCA5LCA0LCAyMTIsIDMwLCA5LCA0LCAyMTEsIDQzLCA5LCA0LCAxMjUsIAorICAgIDIxMSwgNDMsIDksIDQsIDEyNSwgMjI4LCA2NywgOSwgMjI1LCA0NCwgNjQsIDIyMiwgMTUsIDksIDI0NSwgMTYwLCAyNTAsIAorICAgIDE4MywgMTIxLCAyMTgsIDEzMSwgOSwgMjQ1LCAxNjAsIDI1MCwgMTgzLCAxMjUsIDIxOCwgMTMxLCA5LCAyMjIsIDE4NSwgCisgICAgMTI1LCAyMTgsIDEzMiwgMiwgMjQ0LCAxMTIsIDI1MCwgMTgyLCA5LCA0LCAxMjEsIDIzMSwgODMsIDksIDEsIDI0OCwgMjA0LCAKKyAgICAyLCAyMzUsIDIwMCwgMjE0LCAxMDUsIDksIDEsIDIyMywgOTksIDIsIDIzNSwgMjAwLCAyMTQsIDEwNSwgMjQ1LCAzMCwgCisgICAgMjU0LCA0NSwgMjEsIDIxMCwgODYsIDI0NSwgMzAsIDI1NCwgNDUsIDIxLCAxMTEsIDI0NSwgMzAsIDI1NCwgNDUsIDIxLCAKKyAgICAxMDUsIDI0NSwgMzAsIDI1NCwgNDUsIDIxLCAxNTgsIDI0NSwgMzAsIDI1NCwgNDUsIDIxLCAxNjEsIDI0NSwgMzAsIDI1NCwgCisgICAgNDUsIDIxLCAxOTAsIDI0NSwgMzAsIDI1NCwgNDUsIDIxLCAxOTUsIDI0NSwgMzAsIDI1NCwgNDUsIDIxLCAxOTksIDI0NSwgCisgICAgMzAsIDI1NCwgNDUsIDIxLCAxOTYsIDI0NSwgMzAsIDI1NCwgNDUsIDIxLCAyMDEsIDksIDEsIDIyMCwgNjIsIDIsIDU5LCAKKyAgICA1MSwgOSwgMSwgMjQ4LCAyMjUsIDIsIDU5LCA1MSwgOSwgMSwgMjQyLCAyNTIsIDIsIDU5LCA1MSwgOSwgNSwgMjE5LCAxNjAsIAorICAgIDI1NCwgMTM0LCA5LCA1LCAyMTksIDE2MCwgMjI0LCAyMzgsIDIzMSwgNjMsIDksIDEsIDI0MSwgMjI2LCAyLCAyMzUsIDIwMCwgCisgICAgMjE0LCAxMDUsIDE4MywgMjQ1LCAxNTEsIDY0LCAyMjYsIDE4LCAxODMsIDIxOCwgMjAsIDI0MywgMjM2LCAyMTgsIDEzMSwgCisgICAgMTgzLCAyMTgsIDY4LCAyNDMsIDIzNiwgMjE4LCAxMzEsIDE4MywgMjE4LCAyMCwgMjQ5LCAyMzQsIDE4MywgMjE4LCA2OCwgCisgICAgMjQ5LCAyMzQsIDE4MywgMjAzLCAyNDksIDIzNCwgMTgzLCAyNDksIDIzNSwgMjE5LCAxMDgsIDIzMywgNTIsIDE4MywgMjQ5LCAKKyAgICAyMzUsIDIxOSwgMTA4LCAyMjIsIDI1NCwgMTgzLCAyMTgsIDIwLCAyNDksIDIzNSwgMjE5LCAxMDgsIDIzMywgNTIsIDE4MywgCisgICAgMjE4LCA2OCwgMjQ5LCAyMzUsIDIxOSwgMTA4LCAyMjIsIDI1NCwgMTgzLCAyNDksIDE4OCwgMTgzLCAyNDIsIDgsIDIyNiwgCisgICAgMjU0LCAxODMsIDI0MiwgOCwgMjMxLCA0MSwgMTgzLCAyNDIsIDgsIDI1MywgMjI2LCAxODMsIDI1NSwgMzAsIDc5LCAxODMsIAorICAgIDEsIDI1NCwgMTgzLCAxODMsIDEsIDIxOCwgMjQsIDI1NCwgMTgzLCAxODMsIDEsIDI1MiwgMzMsIDE4MywgMSwgMjQzLCAKKyAgICAxMjAsIDE4MywgMSwgMjQzLCAxMjEsIDI0MywgOTgsIDE4MywgMSwgMjQ4LCAyMDAsIDE4MywgMSwgMjQ3LCAxMjcsIDI0OCwgCisgICAgMjAxLCAyMjIsIDIzMiwgMTgzLCAxLCAyNDEsIDI0NSwgMTgzLCAxLCAyMTIsIDMwLCAxODMsIDEsIDIxMCwgMTA4LCAxODMsIAorICAgIDEsIDI0MSwgMjAyLCAxODMsIDEsIDIxNiwgMjI3LCAxODMsIDEsIDIxNiwgMjI4LCAyNDMsIDk4LCAxODMsIDEsIDIxMCwgCisgICAgMTk5LCAxODMsIDEsIDIxMCwgMjAwLCAyNDEsIDI0NSwgMTgzLCAxLCAyMzQsIDIzMSwgMTgzLCAxLCAyMzMsIDEwNywgMTgzLCAKKyAgICAxLCAyMzAsIDE5NSwgMTgzLCAxLCAyMjcsIDE5OCwgMTgzLCAxLCAyMjAsIDE0NSwgMTgzLCAxLCA0MCwgMjIwLCAxNDUsIAorICAgIDE4MywgMSwgNzYsIDE4MywgMSwgMjI1LCAyMjQsIDE4MywgMSwgMjIzLCA1MiwgMjI1LCAyMjQsIDE4MywgMSwgMjIyLCAyNiwgCisgICAgMTgzLCAxLCAyMjQsIDc4LCAxODMsIDEsIDIyMiwgMjMyLCAxODMsIDEsIDIyMCwgMjIsIDE4MywgMSwgMjE3LCAzNywgMTgzLCAKKyAgICAxLCAyMjUsIDE3MiwgMjUyLCAyMCwgMTgzLCAxLCAyMjUsIDE3MiwgMjQyLCAyNDksIDE4MywgMSwgMjI1LCAxNzIsIDI0OCwgCisgICAgMjgsIDE4MywgMjI0LCAxNTQsIDQ4LCAxODMsIDIyNCwgMTU0LCA1MSwgMTgzLCAyMjQsIDE1NCwgMjQ2LCAxMjUsIDE4MywgCisgICAgMjEwLCAxNywgNDgsIDE4MywgMjEwLCAxNywgNTEsIDE4MywgMjEwLCAxNywgMjQ2LCAxMjUsIDE4MywgMjIzLCAxMzQsIDQ4LCAKKyAgICAxODMsIDIyMywgMTM0LCA1MSwgMTgzLCAyNDYsIDEyNiwgMjEwLCAyNCwgMjQxLCA1MSwgMTgzLCAyNDYsIDEyNiwgMjEwLCAKKyAgICAyNCwgMjU0LCAxMTMsIDE4MywgMjQxLCAyNDgsIDQ4LCAxODMsIDI0MSwgMjQ4LCA1MSwgMTgzLCAyNDEsIDI0NywgMjQ2LCAKKyAgICAxMjUsIDE4MywgMjQ1LCA4NywgNDgsIDE4MywgMjQ1LCA4NywgNTEsIDE4MywgMjIyLCAxMDksIDE4MywgMjQ0LCAxNDQsIAorICAgIDI0NywgMTI4LCAxODMsIDIyMywgMjUxLCAxODMsIDIyMiwgMTM2LCAxODMsIDExMywgNjcsIDE3MCwgNDgsIDE4MywgMTEzLCAKKyAgICA2NywgMTcwLCA1MSwgMTgzLCAxMzQsIDE3MCwgNDgsIDE4MywgMTM0LCAxNzAsIDUxLCAxODMsIDIyNiwgMjUyLCAyMzIsIAorICAgIDIyMCwgNDgsIDE4MywgMjI2LCAyNTIsIDIzMiwgMjIwLCA1MSwgMTgzLCAyMzAsIDYxLCAxODMsIDI1MiwgMTM5LCAxODMsIAorICAgIDEsIDIxOSwgNTEsIDIxMCwgODAsIDE4MywgMSwgMjE5LCA1MSwgMjM0LCAxMjgsIDE4MywgMSwgMjE5LCA1MSwgMjQ0LCAKKyAgICAxNjIsIDksIDEsIDI1MiwgNjMsIDIsIDEzNCwgMTcwLCAyNDEsIDEsIDUxLCA5LCAxLCAyNTIsIDYzLCAyLCA1OSwgMjUyLCAKKyAgICA1MSwgMjIsIDEzNCwgMTcwLCA0OCwgOSwgMSwgMjUyLCA2MywgMiwgMTM0LCAxNzAsIDIyNSwgMTAsIDIxNCwgMTUzLCA1MSwgCisgICAgOSwgMSwgMjUyLCA2MywgMiwgMTM0LCAxNzAsIDIyNSwgMTAsIDIxNCwgMTUzLCAyNTIsIDUxLCAyMiwgMTEzLCAxNzAsIDQ4LCAKKyAgICA5LCAxLCAyNTIsIDYzLCAyLCAxMTMsIDE3MCwgMjUyLCA1MSwgMjIsIDU5LCA0OCwgOSwgMSwgMjUyLCA2MywgMiwgMjM1LCAKKyAgICAyMDAsIDQsIDIxNCwgMTA2LCA1MSwgOSwgMSwgMjUyLCA2MywgMiwgNCwgMjE0LCAxMDUsIDksIDEsIDEyMiwgMiwgMTEzLCAKKyAgICAxNzAsIDQ4LCA5LCAxLCAxMjIsIDIsIDEzNCwgMTcwLCAyMjUsIDEwLCAyMTQsIDE1MywgNTEsIDksIDEsIDI0OCwgMjA0LCAKKyAgICAyLCAxMTMsIDE3MCwgMjEzLCAxODksIDI1MiwgNTEsIDIyLCA0LCAyMTcsIDgxLCA5LCAxLCAyNDgsIDIwNCwgMiwgMjM1LCAKKyAgICAyMDAsIDQsIDIxNCwgMTA2LCA1MSwgOSwgMSwgMjIzLCA5OSwgMiwgOTEsIDksIDEsIDIyMSwgMTY5LCAyLCAyNDQsIDE5LCAKKyAgICAxNzAsIDQ4LCA5LCAxLCAyNTQsIDIwNiwgMiwgMTEzLCAxNzAsIDQ4LCA5LCAxLCAyNTQsIDIwNiwgMiwgMTM0LCAxNzAsIAorICAgIDIyNSwgMTAsIDI0NiwgMTEyLCA0OCwgOSwgMSwgMjU0LCAyMDYsIDIsIDExMywgMTcwLCAyMTMsIDE4OSwgNDgsIDksIDEsIAorICAgIDI0NCwgMTUxLCAyLCAxMTMsIDE3MCwgNTEsIDksIDEsIDI0NCwgMTUxLCAyLCAxMzQsIDE3MCwgMjI1LCAxMCwgMjE0LCAKKyAgICAxNTMsIDUxLCA5LCAxLCAyMzQsIDE4MSwgMiwgNTksIDQ4LCA5LCAxLCAyMzQsIDE4MSwgMiwgMTM0LCAxNzAsIDQ4LCA5LCAKKyAgICAxLCAyMzQsIDE4MSwgMiwgMTM0LCAxNzAsIDIyNSwgMTAsIDIxNCwgMTUzLCA1MSwgOSwgMSwgNjYsIDIsIDU5LCA0OCwgOSwgCisgICAgMSwgNjYsIDIsIDU5LCA1MSwgOSwgMSwgMjI4LCA2OCwgMiwgMTEzLCAxNzAsIDUxLCA5LCAxLCAyMjgsIDY4LCAyLCA0LCAKKyAgICAyMTcsIDgxLCA5LCAxLCAyMjgsIDY4LCAyLCA0LCAyMTQsIDEwNSwgOSwgMSwgMjMzLCAxMDksIDIsIDEzMCwgOSwgMSwgCisgICAgMjIzLCA5OSwgMiwgMTEzLCAxNzAsIDIxMywgMTg5LCA0OCwgOSwgMSwgMjIzLCA5OSwgMiwgMTgyLCA0OCwgOSwgMSwgMjIxLCAKKyAgICAxNjksIDIsIDExMywgMTcwLCAyMTMsIDE4OSwgNDgsIDksIDEsIDEyMiwgMiwgNCwgOSwgMSwgMjE3LCA4MiwgNTEsIDksIDEsIAorICAgIDEyMiwgMiwgNCwgOSwgMSwgMjE3LCA4MiwgMjIsIDExMywgMjQ3LCAxMjYsIDksIDEsIDIyMSwgMTY5LCAyLCA0LCA5LCAxLCAKKyAgICAyMTcsIDgyLCAyMiwgMTEzLCAyNDcsIDEyNiwgOSwgMSwgMjIzLCA5OSwgMiwgNCwgOSwgMSwgMjE3LCA4MiwgMjIsIDExMywgCisgICAgMjQ3LCAxMjYsIDksIDEsIDEyMiwgMiwgNCwgOSwgMSwgMjE3LCA4MiwgNDgsIDksIDEsIDEwOSwgMiwgMjQ1LCAzMCwgMjU0LCAKKyAgICA0NSwgMjEsIDExMywgNDgsIDksIDEsIDEwOSwgMiwgMjQ1LCAzMCwgMjU0LCA0NSwgMjEsIDEzNCwgNDgsIDksIDEsIDI0NCwgCisgICAgMTc2LCA3NywgMiwgMjQ1LCAzMCwgMjU0LCA0NSwgMjEsIDExMywgNDgsIDksIDEsIDI0NCwgMTc2LCA3NywgMiwgMjQ1LCAKKyAgICAzMCwgMjU0LCA0NSwgMjEsIDEzNCwgNDgsIDksIDEsIDI0NCwgMTc2LCA3NywgMiwgMjQ1LCAzMCwgMjU0LCA0NSwgMjEsIAorICAgIDI0NCwgMTksIDUxLCA5LCAxLCAyMTIsIDMxLCAyLCAyNDUsIDMwLCAyNTQsIDQ1LCAyMSwgMTEzLCA0OCwgOSwgMSwgMjEyLCAKKyAgICAzMSwgMiwgMjQ1LCAzMCwgMjU0LCA0NSwgMjEsIDEzNCwgNDgsIDksIDEsIDc3LCAyNTIsIDE0MSwgMiwgMjQ1LCAzMCwgCisgICAgMjU0LCA0NSwgMjEsIDExMywgNDgsIDksIDEsIDc3LCAyNTIsIDE0MSwgMiwgMjQ1LCAzMCwgMjU0LCA0NSwgMjEsIDEzNCwgCisgICAgNDgsIDksIDEsIDEyMiwgMiwgMjQ1LCAzMCwgMjU0LCA0NSwgMjEsIDI0NCwgMTksIDUxLCA5LCAxLCAyMjEsIDE2OSwgMiwgCisgICAgMjQ1LCAzMCwgMjU0LCA0NSwgMjEsIDI0NCwgMTksIDQ4LCA5LCAxLCAyMjEsIDE2OSwgMiwgMjM1LCAyMDAsIDIxNCwgMTA1LCAKKyAgICA5LCAxLCAyMzUsIDEsIDIsIDExMywgMTcwLCA0OCwgMjE2LCAyMDYsIDEsIDI0MiwgNTMsIDIxNiwgMjA2LCAxLCAyMjAsIAorICAgIDcwLCAyMTYsIDIwNiwgMSwgMjI4LCA2NiwgMjE2LCAyMDYsIDEsIDIyMywgMTg3LCAyMTYsIDIwNiwgMSwgMjUyLCAxOTcsIAorICAgIDIxNiwgMjA2LCAxLCAyMzMsIDEsIDIxNiwgMjA2LCAxLCAyMzUsIDE0LCAyMTYsIDIwNiwgMSwgMjU0LCAxNjgsIDIxNiwgCisgICAgMjA2LCAxLCAyMTQsIDI1LCAyMTYsIDIwNiwgMSwgMjMxLCA4MiwgMjE2LCAyMDYsIDEsIDI0NCwgMjAyLCAyMTYsIDIwNiwgCisgICAgMSwgMjQ4LCAzMSwgMjE2LCAyMDYsIDEsIDIxNiwgMjA4LCAyMTYsIDIwNiwgMSwgMjMzLCAxMzcsIDIxNiwgMjA2LCAxLCAKKyAgICAyNDMsIDEzOCwgMjE2LCAyMDYsIDEsIDI0MiwgMTg0LCAyMTYsIDIwNiwgMSwgMjIxLCAxNjcsIDIxNiwgMjA2LCAxLCAyNDgsIAorICAgIDE1NiwgMjE2LCAyMDYsIDEsIDIxMCwgMTAwLCAyMTYsIDIwNiwgMSwgMjE3LCAzOCwgMjE2LCAyMDYsIDEsIDIxMSwgMTAzLCAKKyAgICAyMTYsIDIwNiwgMSwgMjI1LCAyMzcsIDIxNiwgMjA2LCAxLCAyMzUsIDEzNCwgMjE2LCAyMDYsIDEsIDI1MCwgMTQyLCAyMTYsIAorICAgIDIwNiwgMSwgMjE1LCAxNTYsIDIxNiwgMjA2LCAxLCAyNDEsIDE5NSwgMjE2LCAyMDYsIDEsIDIzNCwgMTM3LCAyMTYsIDIwNiwgCisgICAgMSwgMjE2LCAyMDcsIDIxNiwgMjA2LCAxLCAyMTAsIDExNSwgMjE2LCAyMDYsIDEsIDIyMCwgNjAsIDIxNiwgMjA2LCAxLCAKKyAgICAyMjIsIDMyLCAyMTYsIDIwNiwgMSwgMjQ4LCAyMjcsIDIxNiwgMjA2LCAxLCAxMTIsIDIxNiwgMjA2LCAxLCAyMTAsIDIzLCAKKyAgICAyMTYsIDIwNiwgMSwgMjU0LCAyMDIsIDIxNiwgMjA2LCAxLCAyNDIsIDI1MCwgMjE2LCAyMDYsIDEsIDIyNCwgODgsIDIxNiwgCisgICAgMjA2LCAxLCAyMTIsIDYzLCAyMTYsIDIwNiwgMjU1LCAzMSwgMjE2LCAyMDYsIDI1NSwgNDcsIDIxNiwgMjA2LCAyNDAsIAorICAgIDEyMSwgMjE2LCAyMDYsIDI0NSwgMjE2LCAyMTYsIDIwNiwgMjE0LCAyMjIsIDIxNiwgMjA2LCAyMjYsIDE4NiwgMjE2LCAKKyAgICAyMDYsIDI0NSwgMjI0LCAyMTYsIDIwNiwgMjQ1LCAyNCwgMjE2LCAyMDYsIDIyNiwgMjUxLCAyMTYsIDIwNiwgMjI3LCAzLCAKKyAgICAyMTYsIDIwNiwgMjE4LCA0NiwgMjE2LCAyMDYsIDEsIDIyOSwgMjMwLCAyMjgsIDE0MiwgMjEsIDIxMCwgODYsIDIyOCwgCisgICAgMTQyLCAyMSwgMTExLCAyMjgsIDE0MiwgMjEsIDEwNSwgMjI4LCAxNDIsIDIxLCAxNTgsIDIyOCwgMTQyLCAyMSwgMTYxLCAKKyAgICAyMjgsIDE0MiwgMjEsIDE5MCwgMjI4LCAxNDIsIDIxLCAxOTUsIDIyOCwgMTQyLCAyMSwgMTk5LCAyMjgsIDE0MiwgMjEsIAorICAgIDE5NiwgMjI4LCAxNDIsIDIxLCAyMDEsIDIyOCwgMTQyLCAxLCA2MSwgMjI4LCAxNDIsIDEsIDI0NSwgMjE3LCAyMjgsIDE0MiwgCisgICAgMSwgNzQsIDIyOCwgMTQyLCAxLCA3NiwgMjI4LCAxNDIsIDEsIDY5LCAyMjgsIDE0MiwgMSwgMjI2LCAxODcsIDIyOCwgMTQyLCAKKyAgICAxLCA3OCwgMjI4LCAxNDIsIDEsIDI0OCwgMjE3LCAyMjgsIDE0MiwgMSwgMjMwLCAzMCwgMjI4LCAxNDIsIDEsIDI1MiwgCisgICAgMTk5LCAyMjgsIDE0MiwgMSwgMTkxLCAyMjgsIDE0MiwgMSwgMjE3LCAxMDYsIDIyOCwgMTQyLCAxLCAyMzUsIDE0NywgMjI4LCAKKyAgICAxNDIsIDEsIDI1MCwgMTY1LCAyMjgsIDE0MiwgMSwgMjQ4LCAyMjksIDIyOCwgMTQyLCAxLCAyMDUsIDIyOCwgMTQyLCAxLCAKKyAgICAyMjIsIDE4MSwgMjI4LCAxNDIsIDEsIDIwNiwgMjI4LCAxNDIsIDEsIDI0MywgODYsIDIyOCwgMTQyLCAxLCAyNDQsIDIwNCwgCisgICAgMjI4LCAxNDIsIDEsIDE3NiwgMjI4LCAxNDIsIDEsIDIzMywgMTQxLCAyMjgsIDE0MiwgMSwgMjI5LCAyMzQsIDIxMSwgMjIzLCAKKyAgICAyMjgsIDE0MiwgMSwgMTg2LCAyMjgsIDE0MiwgMSwgMjI3LCAxNjksIDIyOCwgMTQyLCAxLCAxOTgsIDIyOCwgMTQyLCAxLCAKKyAgICAxNjIsIDIyOCwgMTQyLCAxLCAyMTIsIDY1LCAyMjgsIDE0MiwgMSwgMTkyLCAyMjgsIDE0MiwgMSwgMjI3LCAxNzAsIDIxMSwgCisgICAgMjIzLCAyMjgsIDE0MiwgMSwgMjM1LCA2NywgMjM1LCAxNDcsIDIyOCwgMTQyLCAxLCAyMzUsIDY3LCAyNTAsIDE2NSwgMjI4LCAKKyAgICAxNDIsIDEsIDIzNSwgNjcsIDIwNSwgMjI4LCAxNDIsIDM4LCAyMTksIDI1MywgMTI1LCAyMTYsIDMxLCAyMjgsIDE0MiwgMzgsIAorICAgIDIxOSwgMjUzLCAxMjEsIDIxNiwgMzEsIDIyOCwgMTQyLCAzOCwgMjE5LCAyNTMsIDIyMiwgMjMxLCAyMTYsIDMxLCAyMjgsIAorICAgIDE0MiwgMzgsIDIwMCwgMjQ4LCA0NiwgMjE2LCAzMSwgMjI4LCAxNDIsIDM4LCAyMDAsIDEyNSwgMjE2LCAzMSwgMjI4LCAKKyAgICAxNDIsIDM4LCAyMDAsIDEyMSwgMjE2LCAzMSwgMjI4LCAxNDIsIDM4LCAyMDAsIDIyMiwgMjMxLCAyMTYsIDMxLCAyMjgsIAorICAgIDE0MiwgMzgsIDIyOSwgMTk4LCA3OSwgMjI4LCAxNDIsIDM4LCA1MiwgNTksIDQ4LCAyMjgsIDE0MiwgMTI1LCAxMzgsIDI1NCwgCisgICAgNjUsIDIyOCwgMTQyLCAxMjEsIDEzOCwgMjU0LCA2NSwgMjI4LCAxNDIsIDE2LCAyMjYsIDE4OCwgMjQ4LCA1OCwgMjI4LCAKKyAgICAxNDIsIDE2LCAyNDMsIDg1LCAyMjgsIDE0MiwgMjQ5LCAyMjcsIDIyOCwgMTQyLCAyNDUsIDM5LCA3OSwgMjI4LCAxNDIsIAorICAgIDIzMywgMTE0LCAyMjEsIDI1NCwgMSwgMjU0LCAxODUsIDIyMSwgMjU0LCAxLCAyNTEsIDIzNiwgMjIxLCAyNTQsIDEsIDI0MywgCisgICAgMTE5LCAyMjEsIDI1NCwgMSwgMjQ4LCAyMDIsIDIyMSwgMjU0LCAxLCAyMzUsIDE1OCwgMjIxLCAyNTQsIDEsIDI1MiwgMTk3LCAKKyAgICAyMjEsIDI1NCwgMSwgMjEwLCA4OSwgMjIxLCAyNTQsIDEsIDIzNSwgMTY2LCAyMjEsIDI1NCwgMSwgMjE2LCA2OCwgMjIxLCAKKyAgICAyNTQsIDEsIDIxMCwgMTgyLCAyMjEsIDI1NCwgMSwgMjM1LCAxNSwgMjIxLCAyNTQsIDEsIDIzMywgMTM0LCAyMjEsIDI1NCwgCisgICAgMSwgMjMwLCAxOTUsIDIyMSwgMjU0LCAxLCAyMjcsIDE5OCwgMjIxLCAyNTQsIDEsIDIxOSwgMTU4LCAyMjEsIDI1NCwgMSwgCisgICAgMjM2LCA2LCAyMjEsIDI1NCwgMSwgMjQ0LCAxMjksIDIyMSwgMjU0LCAxLCAyMTUsIDE4MiwgMjIxLCAyNTQsIDEsIDIyNCwgCisgICAgMTMsIDIyMSwgMjU0LCAxLCAyMjIsIDIzMiwgMjIxLCAyNTQsIDEsIDIyMCwgODcsIDIyMSwgMjU0LCAxLCAyMTcsIDEwMSwgCisgICAgMjIxLCAyNTQsIDE2NCwgMjM2LCA2LCAyMjEsIDI1NCwgMTY0LCAyMzYsIDUsIDIyMSwgMjU0LCAxNjQsIDIyNiwgMjQ3LCAKKyAgICAyMjEsIDI1NCwgMTY0LCAyNDgsIDIxNSwgMjIxLCAyNTQsIDU4LCAxLCAyNDUsIDExMywgMjEwLCAxODIsIDIyMSwgMjU0LCAKKyAgICAxNjQsIDI0NSwgMTEzLCAyMTAsIDE4MiwgMjIxLCAyNTQsIDI1LCA1LCAyMDAsIDc2LCAyMjEsIDI1NCwgMjUsIDUsIDc2LCAKKyAgICAyMjEsIDI1NCwgMjUsIDUsIDIyNiwgMTIyLCAyNTUsIDgyLCAyMjEsIDI1NCwgMjUsIDUsIDIwMCwgMjU1LCA4MiwgMjIxLCAKKyAgICAyNTQsIDI1LCA1LCAyNTUsIDgyLCAyMjEsIDI1NCwgMjUsIDUsIDIyNiwgMTIyLCA2MSwgMjIxLCAyNTQsIDI1LCA1LCAyMDAsIAorICAgIDYxLCAyMjEsIDI1NCwgMjUsIDUsIDYxLCAyMjEsIDI1NCwgNTgsIDEsIDIxOSwgMjUzLCA2MSwgMjIxLCAyNTQsIDI1LCA1LCAKKyAgICAyMTksIDI1MywgNjEsIDIyMSwgMjU0LCAyNSwgNSwgMjAwLCA2OSwgMjIxLCAyNTQsIDI1LCA1LCA2OSwgMjIxLCAyNTQsIAorICAgIDU4LCAxLCA3NCwgMjIxLCAyNTQsIDI1LCA1LCAyMDAsIDc0LCAyMjEsIDI1NCwgMjUsIDUsIDc0LCAyMjEsIDI1NCwgMjUsIAorICAgIDUsIDc4LCAyMjEsIDI1NCwgMjUsIDUsIDIxOCwgNDYsIDIyMSwgMjU0LCAxNjQsIDIyOSwgOTcsIDIyMSwgMjU0LCAyMjQsIAorICAgIDE0NCwgMjI5LCA5NywgMjIxLCAyNTQsIDIyNCwgMTQ0LCAyNTQsIDIyNywgMjIxLCAyNTQsIDIyNCwgMTQ0LCAyNTQsIDEyMiwgCisgICAgMjIxLCAyNTQsIDIyNCwgMTQ0LCAyNTIsIDEyMiwgMjIxLCAyNTQsIDIyNCwgMTQ0LCAyNTMsIDIwOSwgMjIxLCAyNTQsIAorICAgIDIyNCwgMTQ0LCAyMjAsIDEwLCAyMjEsIDI1NCwgMjU1LCAzMCwgNzksIDIyMSwgMjU0LCAyMjQsIDE0NCwgMjMxLCA3MywgCisgICAgMjI0LCA0OCwgMjIxLCAyNTQsIDIyNCwgMTQ0LCAyMTAsIDMxLCAyMjEsIDI1NCwgMjI0LCAxNDQsIDIyNCwgNDgsIDIyMSwgCisgICAgMjU0LCAyMjQsIDE0NCwgMjEwLCAxMTQsIDIyMSwgMjU0LCAyMjQsIDE0NCwgMjE1LCA5MCwgMjIxLCAyNTQsIDIyNCwgMTQ0LCAKKyAgICAyNTQsIDE3LCAyMjEsIDI1NCwgMjI0LCAxNDQsIDIxOSwgNTUsIDIzMSwgMTUwLCAyMjEsIDI1NCwgMjI0LCAxNDQsIDI1NCwgCisgICAgMTA4LCAyMzEsIDE4NywgMSwgMjQyLCAzMSwgMjMxLCAxODcsIDEsIDI1NSwgMzQsIDIzMSwgMTg3LCAxLCAyNTQsIDIyNSwgCisgICAgMjMxLCAxODcsIDEsIDI1NSwgOCwgMjMxLCAxODcsIDEsIDI1NCwgMjE4LCAyMzEsIDE4NywgMSwgMjE0LCAxMjQsIDIzMSwgCisgICAgMTg3LCAxLCAyNTMsIDE2OCwgMjMxLCAxODcsIDEsIDIzNSwgMTY2LCAyMzEsIDE4NywgMSwgMjUzLCAyMDYsIDIzMSwgMTg3LCAKKyAgICAxLCAyNTQsIDE5MCwgMjMxLCAxODcsIDEsIDI1NCwgMTk1LCAyMzEsIDE4NywgMSwgMjU0LCAxODcsIDIzMSwgMTg3LCAxLCAKKyAgICAyNTQsIDE0NCwgMjMxLCAxODcsIDEsIDI1NCwgMTMxLCAyMzEsIDE4NywgMSwgMjUzLCAyNDUsIDIzMSwgMTg3LCAxLCAyMzYsIAorICAgIDYsIDIzMSwgMTg3LCAxLCAyNTQsIDgwLCAyMzEsIDE4NywgMSwgMjUzLCAyMTYsIDIzMSwgMTg3LCAxLCAyNTQsIDUzLCAKKyAgICAyMzEsIDE4NywgMSwgMjU0LCA0OSwgMjMxLCAxODcsIDEsIDI1MywgMjM5LCAyMzEsIDE4NywgMSwgMjUzLCAyMTQsIDIzMSwgCisgICAgMTg3LCAxLCAyNDYsIDYzLCAyMzEsIDE4NywgMSwgMjM1LCA4LCAyMzEsIDE4NywgMSwgMjU0LCAyMDUsIDIzMSwgMTg3LCAKKyAgICAyNTQsIDIzMSwgNzksIDIzMSwgMTg3LCAyMTMsIDEzNiwgNzksIDIzMSwgMTg3LCAyNDMsIDYwLCA3OSwgMjMxLCAxODcsIAorICAgIDIyNCwgMTQzLCA5LCAxLCAyNTIsIDYzLCAyLCA0LCAyMTQsIDEwNiwgNTEsIDksIDEsIDE1MSwgMiwgMTEzLCAxNzAsIDQ4LCAKKyAgICA5LCAxLCAyMTcsIDgyLCAyLCAxMTMsIDE3MCwgNDgsIDksIDEsIDI0NCwgMTUxLCAyLCA1OSwgMjUyLCA1MSwgMjIsIDEzNCwgCisgICAgMTcwLCA0OCwgOSwgMSwgMjI0LCA4NSwgMiwgNTksIDUxLCA5LCAxLCAyMzMsIDEwOSwgMiwgNTIsIDEzMCwgOSwgMSwgNjYsIAorICAgIDIsIDEzNCwgMTcwLCA0OCwgOSwgMSwgNzcsIDIsIDExMywgMTcwLCAyNTIsIDUxLCAyMiwgMTgyLCA0OCwgOSwgMSwgNzcsIAorICAgIDIsIDExMywgMTcwLCAyNTIsIDUxLCAyMiwgNTksIDQ4LCA5LCAxLCAyMjMsIDk5LCAyLCAyMzIsIDEyOSwgOSwgMSwgMjEyLCAKKyAgICAzMSwgMiwgNTksIDIxMSwgMjMxLCA5LCAxLCAyMjIsIDIwMywgMjExLCA0MywgOSwgMjQ5LCAxMDcsIDI0NCwgMTczLCA5LCAKKyAgICAyNDksIDEwNywgMjQ4LCAxOTIsIDksIDI0OSwgMTA3LCAyMzQsIDIxMSwgOSwgMjQ5LCAxMDcsIDI0NCwgMTcxLCA5LCAyNDksIAorICAgIDEwNywgMjQ4LCAxOTAsIDksIDI0OSwgMTA3LCAyMzQsIDIwOSwgOSwgMTM4LCAxMjMsIDU5LCA0OCwgOSwgMTM4LCAxMTMsIAorICAgIDE3MCwgNDgsIDksIDEzOCwgMjMyLCAxMzAsIDQ4LCA5LCAxMzgsIDEyMywgNTksIDUxLCA5LCAxMzgsIDExMywgMTcwLCA1MSwgCisgICAgOSwgMTM4LCAyMzIsIDEzMCwgNTEsIDksIDIwNCwgMjQ0LCAxNzEsIDksIDIwNCwgMjQ4LCAxOTAsIDksIDIwNCwgMjM0LCAKKyAgICAyMDksIDksIDQsIDEyNSwgMjEyLCAzMCwgOSwgMjQ0LCAxNzQsIDIsIDIyMiwgMjM2LCA5LCAyNDQsIDE3NCwgMiwgNTksIAorICAgIDQ4LCA5LCAyMzQsIDIxMiwgMiwgNTksIDUxLCA5LCA0MywgMjU0LCAyLCA0OCwgOSwgNDQsIDI1NCwgMiwgNDgsIDksIDQzLCAKKyAgICAyNTQsIDIsIDUxLCA5LCA0NCwgMjU0LCAyLCA1MSwgOSwgNTIsIDQ0LCAyNTQsIDIsIDQ4LCA5LCA1MiwgNDQsIDI1NCwgMiwgCisgICAgNzIsIDIsIDI0NywgMTI4LCA5LCA0NCwgMjU0LCAyLCA3MiwgMiwgMjQ3LCAxMjgsIDksIDI0OCwgMTkzLCAyLCAyNDcsIAorICAgIDEyOCwgODQsIDUsIDIzNSwgMjAwLCAyNTEsIDcsIDg0LCA1LCAyNTEsIDcsIDg0LCA1LCAyNTQsIDgzLCA4NCwgNSwgMjEzLCAKKyAgICAxNDcsIDg0LCAxLCAyMTksIDI1MywgNjEsIDg0LCAxLCA2MSwgODQsIDEsIDI1NSwgODIsIDg0LCAxLCA3NCwgODQsIDEsIAorICAgIDIzNiwgNDAsIDg0LCAxLCA2OSwgODQsIDEsIDIxNCwgMTE4LCA4NCwgMSwgMTQ5LCAxNTMsIDg0LCAxLCAxNDksIDE1NiwgCisgICAgODQsIDEsIDI1MSwgMTAsIDc2LCA4NCwgMSwgMjE5LCAyNTMsIDc2LCA4NCwgMSwgNzYsIDg0LCAxLCAyNTQsIDIxMCwgODQsIAorICAgIDEsIDI1MSwgMTAsIDc4LCA4NCwgMSwgMjE5LCAyNTMsIDc4LCA4NCwgMSwgNzgsIDg0LCAxLCAyNTMsIDIwMCwgODQsIDEsIAorICAgIDE3NiwgODQsIDEsIDIzNCwgMTM4LCA4NCwgMSwgMjQzLCAxNDIsIDg0LCAxLCAyNDMsIDAsIDg0LCAxLCAyMjksIDgyLCA4NCwgCisgICAgMSwgMjUxLCA0MSwgODQsIDEsIDI1MCwgMTY1LCA4NCwgMSwgMjM1LCAxNDcsIDg0LCAxLCAyMzUsIDEyMCwgODQsIDEsIAorICAgIDIyNywgMTY5LCA4NCwgMSwgMjE1LCAxNTcsIDg0LCAxLCAyMTUsIDE0NSwgODQsIDEsIDI0OCwgMTQzLCA4NCwgMSwgMjQ4LCAKKyAgICAxMjcsIDg0LCAxLCAyMjgsIDExNSwgODQsIDEsIDIxNywgMTA2LCA4NCwgMSwgMjE2LCAyMDksIDg0LCAxLCAyNDgsIDIyOSwgCisgICAgODQsIDEsIDI0OCwgMzMsIDg0LCAxLCAxOTgsIDg0LCAxLCAyMjgsIDk3LCA4NCwgMSwgMTkxLCA4NCwgMSwgMjI1LCAxNTAsIAorICAgIDg0LCAxLCAyNTIsIDE5OSwgODQsIDEsIDI1MiwgMjYsIDg0LCAxLCAxODYsIDg0LCAxLCAxOTIsIDg0LCAxLCAyMDUsIDg0LCAKKyAgICAxLCAyMjIsIDE4MSwgODQsIDEsIDIzMywgMTQxLCA4NCwgMSwgMjMyLCAxOTAsIDg0LCAxLCAyMzIsIDE4MSwgODQsIDEsIAorICAgIDIxNCwgMjcsIDg0LCAxLCAyMjAsIDEwNCwgODQsIDEsIDIxOCwgMjI1LCA4NCwgMSwgMjA2LCA4NCwgMSwgMTYyLCA4NCwgCisgICAgMjUsIDUsIDIyNiwgMjM4LCA4NCwgMjUsIDUsIDIyNiwgMTg1LCA4NCwgNSwgMjI3LCAyMDksIDg0LCA1LCAyNTMsIDE4MywgCisgICAgODQsIDI1LCA1LCAyNTUsIDgyLCA4NCwgMjUsIDUsIDc0LCA4NCwgMjUsIDUsIDIzNiwgNDAsIDg0LCAyNSwgNSwgNjksIDg0LCAKKyAgICAyNSwgNSwgMjE0LCAxMTgsIDg0LCAyNSwgNSwgMTQ5LCAxNTMsIDg0LCAyNSwgNSwgMTQ5LCAyMjIsIDE4MiwgODQsIDI1LCAKKyAgICA1LCAyNTEsIDEwLCA3NiwgODQsIDI1LCA1LCAyMTksIDI1MywgNzYsIDg0LCAyNSwgNSwgNzYsIDg0LCAyNSwgNSwgMjU0LCAKKyAgICAyMTAsIDg0LCAyNSwgNSwgMjUxLCAxMCwgNzgsIDg0LCAyNSwgNSwgMjE5LCAyNTMsIDc4LCA4NCwgMjUsIDUsIDc4LCA4NCwgCisgICAgMjUsIDUsIDI1MywgMjAwLCA4NCwgNSwgMjEzLCAxNTIsIDg0LCAyNSwgNSwgMjI0LCAxODgsIDc2LCA4NCwgMjUsIDUsIAorICAgIDI1MywgMTc5LCA4NCwgMjI2LCAyMDgsIDg0LCAyMTgsIDExMywgNSwgMjE0LCAyMTYsIDg0LCAyMTgsIDExMywgNSwgMjU0LCAKKyAgICA4NSwgODQsIDI0MiwgMTQ0LCAyNTUsIDIzLCA4NCwgMjU1LCAxMiwgMjU1LCAyMywgODQsIDI1LCA1LCAyNTEsIDEwLCAyMDAsIAorICAgIDc2LCA4NCwgMjUsIDUsIDIxNCwgMjE0LCA4NCwgMjUsIDUsIDIxNCwgMTE3LCA4NCwgMSwgMjI0LCA5MSwgODQsIDEsIDIzNCwgCisgICAgMTIxLCA4NCwgMSwgMjQyLCAyMzMsIDg0LCAxLCAyMTAsIDExNiwgODQsIDEsIDI0OCwgMTMyLCA4NCwgMSwgMjIzLCA0MiwgCisgICAgODQsIDEsIDI0NCwgMjA0LCA4NCwgMSwgMjEwLCAxNjgsIDg0LCAxLCAxNDksIDIyMiwgMTgyLCA4NCwgMSwgMTQ5LCAyMzIsIAorICAgIDE5MSwgODQsIDI1LCA1LCAxNDksIDE1NiwgODQsIDI1LCA1LCAxNDksIDIzMiwgMTkxLCA4NCwgMjQ4LCAxODYsIDg0LCA1MiwgCisgICAgMjQ4LCAxODYsIDg0LCAyMSwgMjEwLCA4NiwgODQsIDIxLCAxMTEsIDg0LCAyMSwgMTA1LCA4NCwgMjEsIDE1OCwgODQsIDIxLCAKKyAgICAxNjEsIDg0LCAyMSwgMTkwLCA4NCwgMjEsIDE5NSwgODQsIDIxLCAxOTksIDg0LCAyMSwgMTk2LCA4NCwgMjEsIDIwMSwgODQsIAorICAgIDI1NSwgMzAsIDUwLCA4NCwgNSwgMTI1LCAyMTksIDE5LCAyNDcsIDEyOCwgODQsIDEsIDI1MSwgMTAsIDYxLCA4NCwgMSwgCisgICAgMjI2LCAyMzgsIDg0LCAxLCAyMjYsIDE4NSwgODQsIDEsIDI1MywgMTc5LCA4NCwgMSwgMjE0LCAyMTQsIDg0LCAxLCAyMTQsIAorICAgIDExNywgODQsIDEsIDIxMCwgODIsIDg0LCAxLCAxMTQsIDE5MiwgODQsIDEsIDI0MywgMzYsIDg0LCAxLCAyMzUsIDEwMiwgCisgICAgODQsIDEsIDI0MiwgMTg3LCAyMTgsIDEzMSwgODQsIDEsIDI0OCwgMTMzLCA4NCwgMSwgMjUyLCAxMTksIDE0NiwgNSwgMjUxLCAKKyAgICA3LCAxNDYsIDUsIDI1NCwgODMsIDE0NiwgNSwgMjEzLCAxNDcsIDE0NiwgMSwgNjEsIDE0NiwgMSwgMjU1LCA4MiwgMTQ2LCAKKyAgICAxLCA3NCwgMTQ2LCAxLCAyMzYsIDQwLCAxNDYsIDEsIDY5LCAxNDYsIDEsIDIxNCwgMTE4LCAxNDYsIDEsIDE0OSwgMTUzLCAKKyAgICAxNDYsIDEsIDE0OSwgMTU2LCAxNDYsIDEsIDc2LCAxNDYsIDEsIDI1NCwgMjEwLCAxNDYsIDEsIDc4LCAxNDYsIDEsIDI1MywgCisgICAgMjAwLCAxNDYsIDEsIDE3NiwgMTQ2LCAxLCAyMzQsIDEzOCwgMTQ2LCAxLCAyNDMsIDE0MiwgMTQ2LCAxLCAyNDMsIDAsIAorICAgIDE0NiwgMSwgMjI5LCA4MiwgMTQ2LCAxLCAyNTEsIDQxLCAxNDYsIDEsIDI1MCwgMTY1LCAxNDYsIDEsIDIzNSwgMTQ3LCAKKyAgICAxNDYsIDEsIDIzNSwgMTIwLCAxNDYsIDEsIDIyNywgMTY5LCAxNDYsIDEsIDIxNSwgMTU3LCAxNDYsIDEsIDIxNSwgMTQ1LCAKKyAgICAxNDYsIDEsIDI0OCwgMTQzLCAxNDYsIDEsIDI0OCwgMTI3LCAxNDYsIDEsIDIyOCwgMTE1LCAxNDYsIDEsIDIxNywgMTA2LCAKKyAgICAxNDYsIDEsIDIxNiwgMjA5LCAxNDYsIDEsIDI0OCwgMjI5LCAxNDYsIDEsIDI0OCwgMzMsIDE0NiwgMSwgMTk4LCAxNDYsIDEsIAorICAgIDE5MSwgMTQ2LCAxLCAyMjUsIDE1MCwgMTQ2LCAxLCAyNTIsIDE5OSwgMTQ2LCAxLCAyNTIsIDI2LCAxNDYsIDEsIDE4NiwgCisgICAgMTQ2LCAxLCAxOTIsIDE0NiwgMSwgMjA1LCAxNDYsIDEsIDIzMywgMTQxLCAxNDYsIDEsIDIyMCwgMTA0LCAxNDYsIDEsIAorICAgIDIxOCwgMjI1LCAxNDYsIDEsIDIwNiwgMTQ2LCAxLCAxNjIsIDE0NiwgNSwgMjI3LCAyMDksIDE0NiwgNSwgMjUzLCAxODMsIAorICAgIDE0NiwgMjUsIDUsIDI1NSwgODIsIDE0NiwgMjUsIDUsIDc0LCAxNDYsIDI1LCA1LCAyMzYsIDQwLCAxNDYsIDI1LCA1LCA2OSwgCisgICAgMTQ2LCAyNSwgNSwgMjE0LCAxMTgsIDE0NiwgMjUsIDUsIDE0OSwgMTUzLCAxNDYsIDI1LCA1LCAxNDksIDIyMiwgMTgyLCAKKyAgICAxNDYsIDI1LCA1LCA3NiwgMTQ2LCAyNSwgNSwgMjU0LCAyMTAsIDE0NiwgMjUsIDUsIDc4LCAxNDYsIDI1LCA1LCAyNTMsIAorICAgIDIwMCwgMTQ2LCA1LCAyMTMsIDE1MiwgMTQ2LCAxLCAyMzQsIDEzMCwgMjE3LCAxMDYsIDE0NiwgMjUzLCAyMDEsIDIzMywgCisgICAgMjksIDc5LCAxNDYsIDEsIDIyMiwgMTgxLCAxNDYsIDEsIDIyMywgNDIsIDE0NiwgMSwgMjEwLCAxNjgsIDE0NiwgMSwgMTQ5LCAKKyAgICAyMjIsIDE4MiwgMTQ2LCAxLCAxNDksIDIzMiwgMTkxLCAxNDYsIDI1LCA1LCAxNDksIDE1NiwgMTQ2LCAyNSwgNSwgMTQ5LCAKKyAgICAyMzIsIDE5MSwgMTQ2LCAyMSwgMjEwLCA4NiwgMTQ2LCAyMSwgMTExLCAxNDYsIDIxLCAxMDUsIDE0NiwgMjEsIDE1OCwgCisgICAgMTQ2LCAyMSwgMTYxLCAxNDYsIDIxLCAxOTAsIDE0NiwgMjEsIDE5NSwgMTQ2LCAyMSwgMTk5LCAxNDYsIDIxLCAxOTYsIAorICAgIDE0NiwgMjEsIDIwMSwgMTQ2LCAxLCAyMjMsIDE5MSwgMiwgMjMwLCAyMjksIDI0OCwgNiwgMTQ2LCAxLCAyMjMsIDE5MSwgMiwgCisgICAgMjMyLCAxMTQsIDI0OCwgNiwgMTQ2LCAyMjIsIDEyMCwgNzksIDE0NiwgMjIyLCAxMjAsIDUwLCAxNDYsIDI0OSwgMTA2LCAKKyAgICAyMjcsIDIwMSwgMTExLCAxNDYsIDI0OSwgMTA2LCAyMjcsIDIwMSwgMTA1LCAxNDYsIDI0OSwgMTA2LCAyMjcsIDIwMSwgCisgICAgMTU4LCAxNDYsIDI0OSwgMTA2LCAyMjcsIDIwMSwgMTYxLCAxNDYsIDI0OSwgMTA2LCAyMjcsIDIwMSwgMTIzLCAyMzMsIDIyLCAKKyAgICAyMTYsIDIwMiwgMjE2LCAxOTcsIDI0OCwgNTYsIDE0NiwgMjQ5LCAxMDYsIDI0OCwgNTcsIDIxOSwgMTIxLCAxNDYsIDIzNSwgCisgICAgMTY3LCAxNDYsIDI0MywgMTEwLCA3OSwgMTg1LCA1LCAyNTUsIDcsIDI1MSwgMjUxLCAxODUsIDUsIDI1MSwgMjUxLCAxODUsIAorICAgIDUsIDIxMywgMTQ3LCAxODUsIDEsIDYxLCAxODUsIDEsIDI1NSwgODIsIDE4NSwgMSwgNzQsIDE4NSwgMSwgMjM2LCA0MCwgCisgICAgMTg1LCAxLCA2OSwgMTg1LCAxLCAyMTQsIDExOCwgMTg1LCAxLCAyNDUsIDIxNywgMTg1LCAxLCAyNTQsIDIxMCwgMTg1LCAxLCAKKyAgICAyMjYsIDE4NywgMTg1LCAxLCAyNTMsIDIwMCwgMTg1LCAxLCAxNzYsIDE4NSwgMSwgMjM0LCAxMzgsIDE4NSwgMSwgMjQzLCAKKyAgICAxNDIsIDE4NSwgMSwgMjQzLCAwLCAxODUsIDEsIDIyOSwgODIsIDE4NSwgMSwgMjUxLCA0MSwgMTg1LCAxLCAyNTAsIDE2NSwgCisgICAgMTg1LCAxLCAyMzUsIDE0NywgMTg1LCAxLCAyMzUsIDEyMCwgMTg1LCAxLCAyMjcsIDE2OSwgMTg1LCAxLCAyMTUsIDE1NywgCisgICAgMTg1LCAxLCAyMTUsIDE0NSwgMTg1LCAxLCAyNDgsIDE0MywgMTg1LCAxLCAyNDgsIDEyNywgMTg1LCAxLCAyMjgsIDExNSwgCisgICAgMTg1LCAxLCAyMTcsIDEwNiwgMTg1LCAxLCAyMTYsIDIwOSwgMTg1LCAxLCAyNDgsIDIyOSwgMTg1LCAxLCAyNDgsIDMzLCAKKyAgICAxODUsIDEsIDE5OCwgMTg1LCAxLCAxOTEsIDE4NSwgMSwgMjI1LCAxNTAsIDE4NSwgMSwgMjUyLCAxOTksIDE4NSwgMSwgCisgICAgMjUyLCAyNiwgMTg1LCAxLCAxODYsIDE4NSwgMSwgMTkyLCAxODUsIDEsIDIwNSwgMTg1LCAxLCAyMzMsIDE0MSwgMTg1LCAxLCAKKyAgICAyMzIsIDE5MCwgMTg1LCAxLCAyMTQsIDI3LCAxODUsIDEsIDIyMCwgMTA0LCAxODUsIDEsIDIwNiwgMTg1LCAxLCAxNjIsIAorICAgIDE4NSwgNSwgMjI3LCAyMDksIDE4NSwgMjUsIDUsIDI1NSwgODIsIDE4NSwgMjUsIDUsIDc0LCAxODUsIDI1LCA1LCAyMzYsIAorICAgIDQwLCAxODUsIDI1LCA1LCA2OSwgMTg1LCAyNSwgNSwgMjE0LCAxMTgsIDE4NSwgMjUsIDUsIDI0NSwgMjE3LCAxODUsIDI1LCAKKyAgICA1LCAyNTQsIDIxMCwgMTg1LCAyNSwgNSwgMjI2LCAxODcsIDE4NSwgMjUsIDUsIDI1MywgMjAwLCAxODUsIDUsIDIxMywgCisgICAgMTUyLCAxODUsIDUsIDIxNCwgMjE4LCAxODUsIDEsIDIzNCwgMTIxLCAxODUsIDEsIDI0MiwgMjMzLCAxODUsIDEsIDIxMCwgCisgICAgMTE2LCAxODUsIDEsIDIyMiwgMTgxLCAxODUsIDEsIDI0NCwgMjA0LCAxODUsIDIxLCAyMTAsIDg2LCAxODUsIDIxLCAxMTEsIAorICAgIDE4NSwgMjEsIDEwNSwgMTg1LCAyMSwgMTU4LCAxODUsIDIxLCAxNjEsIDE4NSwgMjEsIDE5MCwgMTg1LCAyMSwgMTk1LCAKKyAgICAxODUsIDIxLCAxOTksIDE4NSwgMjEsIDE5NiwgMTg1LCAyMSwgMjAxLCAxODUsIDIxNiwgNzUsIDE4NSwgMjU1LCA2LCAxODUsIAorICAgIDIzNSwgMTg1LCAxODUsIDIxNCwgMTQ2LCAxODUsIDI0NSwgMTg5LCAyMjYsIDE5MiwgMTg1LCA1LCAyMTEsIDc4LCAxNzEsIAorICAgIDUsIDI1MSwgNywgMTcxLCA1LCAyNTQsIDgzLCAxNzEsIDUsIDIxMywgMTQ3LCAxNzEsIDEsIDYxLCAxNzEsIDEsIDI1NSwgCisgICAgODIsIDE3MSwgMSwgNzQsIDE3MSwgMSwgMjM2LCA0MCwgMTcxLCAxLCA2OSwgMTcxLCAxLCAyMTQsIDExOCwgMTcxLCAxLCAKKyAgICAxNDksIDE1MywgMTcxLCAxLCAxNDksIDE1NiwgMTcxLCAyNSwgMjUxLCAxMCwgNzYsIDE3MSwgMSwgNzYsIDE3MSwgMSwgCisgICAgMjU0LCAyMTAsIDE3MSwgMjUsIDI1MSwgMTAsIDc4LCAxNzEsIDEsIDc4LCAxNzEsIDEsIDI1MywgMjAwLCAxNzEsIDEsIAorICAgIDE3NiwgMTcxLCAxLCAyMzQsIDEzOCwgMTcxLCAxLCAyNDMsIDE0MiwgMTcxLCAxLCAyNDMsIDAsIDE3MSwgMSwgMjI5LCA4MiwgCisgICAgMTcxLCAxLCAyNTEsIDQxLCAxNzEsIDEsIDI1MCwgMTY1LCAxNzEsIDEsIDIzNSwgMTQ3LCAxNzEsIDEsIDIzNSwgMTIwLCAKKyAgICAxNzEsIDEsIDIyNywgMTY5LCAxNzEsIDEsIDIxNSwgMTU3LCAxNzEsIDEsIDIxNSwgMTQ1LCAxNzEsIDEsIDI0OCwgMTQzLCAKKyAgICAxNzEsIDEsIDI0OCwgMTI3LCAxNzEsIDEsIDIyOCwgMTE1LCAxNzEsIDEsIDIxNywgMTA2LCAxNzEsIDEsIDIxNiwgMjA5LCAKKyAgICAxNzEsIDEsIDI0OCwgMjI5LCAxNzEsIDEsIDI0OCwgMzMsIDE3MSwgMSwgMTk4LCAxNzEsIDEsIDE5MSwgMTcxLCAxLCAyMjUsIAorICAgIDE1MCwgMTcxLCAxLCAyNTIsIDE5OSwgMTcxLCAxLCAyNTIsIDI2LCAxNzEsIDEsIDE4NiwgMTcxLCAxLCAxOTIsIDE3MSwgMSwgCisgICAgMjA1LCAxNzEsIDEsIDIzMywgMTQxLCAxNzEsIDEsIDIzMiwgMTkwLCAxNzEsIDEsIDIxNCwgMjcsIDE3MSwgMSwgMjIwLCAKKyAgICAxMDQsIDE3MSwgMSwgMjE4LCAyMjUsIDE3MSwgMSwgMjA2LCAxNzEsIDEsIDE2MiwgMTcxLCA1LCAyMjcsIDIwOSwgMTcxLCAKKyAgICA1LCAyNTMsIDE4MywgMTcxLCAyNSwgNSwgMjU1LCA4MiwgMTcxLCAyNSwgNSwgNzQsIDE3MSwgMjUsIDUsIDIzNiwgNDAsIAorICAgIDE3MSwgMjUsIDUsIDY5LCAxNzEsIDI1LCA1LCAyMTQsIDExOCwgMTcxLCAyNSwgNSwgMTQ5LCAxNTMsIDE3MSwgMjUsIDUsIAorICAgIDE0OSwgMjIyLCAxODIsIDE3MSwgMjUsIDUsIDI1MSwgMTAsIDc2LCAxNzEsIDI1LCA1LCA3NiwgMTcxLCAyNSwgNSwgMjU0LCAKKyAgICAyMTAsIDE3MSwgMjUsIDUsIDI1MSwgMTAsIDc4LCAxNzEsIDI1LCA1LCA3OCwgMTcxLCAyNSwgNSwgMjUzLCAyMDAsIDE3MSwgCisgICAgNSwgMjEzLCAxNTIsIDE3MSwgMjI2LCAyMDgsIDE3MSwgMSwgMTQ5LCAyMjIsIDE4MiwgMTcxLCAxLCAxNDksIDIzMiwgMTkxLCAKKyAgICAxNzEsIDI1LCA1LCAxNDksIDE1NiwgMTcxLCAyNSwgNSwgMTQ5LCAyMzIsIDE5MSwgMTcxLCAyMSwgMjEwLCA4NiwgMTcxLCAKKyAgICAyMSwgMTExLCAxNzEsIDIxLCAxMDUsIDE3MSwgMjEsIDE1OCwgMTcxLCAyMSwgMTYxLCAxNzEsIDIxLCAxOTAsIDE3MSwgMjEsIAorICAgIDE5NSwgMTcxLCAyMSwgMTk5LCAxNzEsIDIxLCAxOTYsIDE3MSwgMjEsIDIwMSwgMTcxLCAyNTUsIDMwLCA1MCwgMTcxLCAKKyAgICAyMjIsIDEyMCwgNTAsIDE1NywgNSwgMjUxLCA3LCAxNTcsIDUsIDI1NCwgODMsIDE1NywgNSwgMjEzLCAxNDcsIDE1NywgMSwgCisgICAgNjEsIDE1NywgMSwgMjU1LCA4MiwgMTU3LCAxLCA3NCwgMTU3LCAxLCAyMzYsIDQwLCAxNTcsIDEsIDY5LCAxNTcsIDEsIAorICAgIDIxNCwgMTE4LCAxNTcsIDEsIDE0OSwgMTUzLCAxNTcsIDEsIDE0OSwgMTU2LCAxNTcsIDEsIDc2LCAxNTcsIDEsIDI1NCwgCisgICAgMjEwLCAxNTcsIDEsIDc4LCAxNTcsIDEsIDI1MywgMjAwLCAxNTcsIDEsIDE3NiwgMTU3LCAxLCAyMzQsIDEzOCwgMTU3LCAxLCAKKyAgICAyNDMsIDE0MiwgMTU3LCAxLCAyNDMsIDAsIDE1NywgMSwgMjI5LCA4MiwgMTU3LCAxLCAyNTEsIDQxLCAxNTcsIDEsIDI1MCwgCisgICAgMTY1LCAxNTcsIDEsIDIzNSwgMTQ3LCAxNTcsIDEsIDIzNSwgMTIwLCAxNTcsIDEsIDIyNywgMTY5LCAxNTcsIDEsIDIxNSwgCisgICAgMTU3LCAxNTcsIDEsIDIxNSwgMTQ1LCAxNTcsIDEsIDI0OCwgMTQzLCAxNTcsIDEsIDI0OCwgMTI3LCAxNTcsIDEsIDIyOCwgCisgICAgMTE1LCAxNTcsIDEsIDIxNywgMTA2LCAxNTcsIDEsIDIxNiwgMjA5LCAxNTcsIDEsIDI0OCwgMjI5LCAxNTcsIDEsIDI0OCwgCisgICAgMzMsIDE1NywgMSwgMTk4LCAxNTcsIDEsIDE5MSwgMTU3LCAxLCAyMjUsIDE1MCwgMTU3LCAxLCAyNTIsIDE5OSwgMTU3LCAxLCAKKyAgICAyNTIsIDI2LCAxNTcsIDEsIDE4NiwgMTU3LCAxLCAxOTIsIDE1NywgMSwgMjA1LCAxNTcsIDEsIDIzMywgMTQxLCAxNTcsIDEsIAorICAgIDIzMiwgMTkwLCAxNTcsIDEsIDIxNCwgMjcsIDE1NywgMSwgMjIwLCAxMDQsIDE1NywgMSwgMjE4LCAyMjUsIDE1NywgMSwgCisgICAgMjA2LCAxNTcsIDEsIDE2MiwgMTU3LCA1LCAyMjcsIDIwOSwgMTU3LCA1LCAyNTMsIDE4MywgMTU3LCAyNSwgNSwgMjU1LCAKKyAgICA4MiwgMTU3LCAyNSwgNSwgNzQsIDE1NywgMjUsIDUsIDIzNiwgNDAsIDE1NywgMjUsIDUsIDY5LCAxNTcsIDI1LCA1LCAyMTQsIAorICAgIDExOCwgMTU3LCAyNSwgNSwgMTQ5LCAxNTMsIDE1NywgMjUsIDUsIDE0OSwgMjIyLCAxODIsIDE1NywgMjUsIDUsIDc2LCAKKyAgICAxNTcsIDI1LCA1LCAyNTQsIDIxMCwgMTU3LCAyNSwgNSwgNzgsIDE1NywgMjUsIDUsIDI1MywgMjAwLCAxNTcsIDUsIDIxMywgCisgICAgMTUyLCAxNTcsIDI1NCwgMjExLCAyMzMsIDI5LCA3OSwgMTU3LCAyNTMsIDIwMSwgMjMzLCAyOSwgNzksIDE1NywgMSwgMjIyLCAKKyAgICAxODEsIDE1NywgMSwgMjIzLCA0MiwgMTU3LCAxLCAyMTAsIDE2OCwgMTU3LCAxLCAxNDksIDIyMiwgMTgyLCAxNTcsIDEsIAorICAgIDE0OSwgMjMyLCAxOTEsIDE1NywgMjUsIDUsIDE0OSwgMTU2LCAxNTcsIDI1LCA1LCAxNDksIDIzMiwgMTkxLCAxNTcsIDIxLCAKKyAgICAyMTAsIDg2LCAxNTcsIDIxLCAxMTEsIDE1NywgMjEsIDEwNSwgMTU3LCAyMSwgMTU4LCAxNTcsIDIxLCAxNjEsIDE1NywgMjEsIAorICAgIDE5MCwgMTU3LCAyMSwgMTk1LCAxNTcsIDIxLCAxOTksIDE1NywgMjEsIDE5NiwgMTU3LCAyMSwgMjAxLCAxNTcsIDIzNSwgCisgICAgMTY3LCAxNTcsIDEsIDIxMiwgNjUsIDE1NywgMjQ0LCAxMCwgMTIzLCAyMjQsIDI0LCAxNTcsIDI0NCwgMTAsIDEyMywgMjQyLCAKKyAgICAzNCwgMTU3LCAyNDQsIDEwLCAxMzQsIDIyNCwgMjIsIDE1NywgMjQ0LCAxMCwgMTIzLCAyMTksIDExOSwgMTU3LCAyNDQsIAorICAgIDEwLCAxMjMsIDI0NSwgMTk2LCAxNTcsIDI0NCwgMTAsIDEzNCwgMjE5LCAxMTgsIDM2LCA1LCAyNTQsIDgzLCAzNiwgNSwgCisgICAgMjEzLCAxNDcsIDM2LCAxLCA2MSwgMzYsIDEsIDI1NSwgODIsIDM2LCAxLCA3NCwgMzYsIDEsIDIzNiwgNDAsIDM2LCAxLCAKKyAgICA2OSwgMzYsIDEsIDIxNCwgMTE4LCAzNiwgMSwgNzYsIDM2LCAxLCAyNDUsIDIxNywgMzYsIDEsIDI1NCwgMjEwLCAzNiwgMSwgCisgICAgNzgsIDM2LCAxLCAyMjYsIDE4NywgMzYsIDEsIDI1MywgMjAwLCAzNiwgMSwgMTc2LCAzNiwgMSwgMjI5LCA4MiwgMzYsIDEsIAorICAgIDI1MSwgNDEsIDM2LCAxLCAyMzUsIDE0NywgMzYsIDEsIDIyNywgMTY5LCAzNiwgMSwgMjE1LCAxNTcsIDM2LCAxLCAyMjgsIAorICAgIDExNSwgMzYsIDEsIDIxNywgMTA2LCAzNiwgMSwgMTk4LCAzNiwgMSwgMjI4LCA5NywgMzYsIDEsIDE5MSwgMzYsIDEsIDE4NiwgCisgICAgMzYsIDEsIDE5MiwgMzYsIDEsIDIwNSwgMzYsIDEsIDIyMiwgMTgxLCAzNiwgMSwgMjMzLCAxNDEsIDM2LCAxLCAyMzIsIAorICAgIDE5MCwgMzYsIDEsIDIzMiwgMTgxLCAzNiwgMSwgMjE0LCAyNywgMzYsIDEsIDIyMCwgMTA0LCAzNiwgMSwgMjE4LCAyMjUsIAorICAgIDM2LCAxLCAyMDYsIDM2LCAxLCAxNjIsIDM2LCAyNSwgNSwgMjU1LCA4MiwgMzYsIDI1LCA1LCA3NCwgMzYsIDI1LCA1LCAKKyAgICAyMzYsIDQwLCAzNiwgMjUsIDUsIDY5LCAzNiwgMjUsIDUsIDIxNCwgMTE4LCAzNiwgMjUsIDUsIDc2LCAzNiwgMjUsIDUsIAorICAgIDI0NSwgMjE3LCAzNiwgMjUsIDUsIDI1NCwgMjEwLCAzNiwgMjUsIDUsIDc4LCAzNiwgMjUsIDUsIDIyNiwgMTg3LCAzNiwgCisgICAgMjUsIDUsIDI1MywgMjAwLCAzNiwgNSwgMjEzLCAxNTIsIDM2LCAyMjYsIDIwOCwgMzYsIDI1MywgMjAxLCAyMzMsIDI5LCAKKyAgICA3OSwgMzYsIDIxLCAyMTAsIDg2LCAzNiwgMjEsIDExMSwgMzYsIDIxLCAxMDUsIDM2LCAyMSwgMTU4LCAzNiwgMjEsIDE2MSwgCisgICAgMzYsIDIxLCAxOTAsIDM2LCAyMSwgMTk1LCAzNiwgMjEsIDE5OSwgMzYsIDIxLCAxOTYsIDM2LCAyMSwgMjAxLCAzNiwgNTQsIAorICAgIDIxNiwgMjQ4LCAzNiwgNTQsIDEyMywgMjQwLCAyMTcsIDM2LCA1NCwgMTIzLCAyMTYsIDE0OCwgMzYsIDI0OCwgMTU0LCA1MCwgCisgICAgMzYsIDIzMCwgMTQwLCA1MCwgMzYsIDIxMSwgNDUsIDUwLCAzNiwgMjQ4LCA5NSwgNTAsIDM2LCAyNDksIDE0NywgNTAsIDM2LCAKKyAgICAyNTMsIDI0NiwgNzIsIDUwLCAzNiwgMjIyLCAxMjAsIDUwLCAzNiwgNTQsIDUwLCAxNDgsIDUsIDI1MSwgNywgMTQ4LCA1LCAKKyAgICAyNTQsIDgzLCAxNDgsIDUsIDIxMywgMTQ3LCAxNDgsIDEsIDYxLCAxNDgsIDEsIDI1NSwgODIsIDE0OCwgMSwgNzQsIDE0OCwgCisgICAgMSwgMjM2LCA0MCwgMTQ4LCAxLCA2OSwgMTQ4LCAxLCAyMTQsIDExOCwgMTQ4LCAxLCAxNDksIDE1MywgMTQ4LCAxLCAxNDksIAorICAgIDE1NiwgMTQ4LCAxLCA3NiwgMTQ4LCAxLCAyNDUsIDIxNywgMTQ4LCAxLCAyNTQsIDIxMCwgMTQ4LCAxLCA3OCwgMTQ4LCAxLCAKKyAgICAyMjYsIDE4NywgMTQ4LCAxLCAyNTMsIDIwMCwgMTQ4LCAxLCAxNzYsIDE0OCwgMSwgMjM0LCAxMzgsIDE0OCwgMSwgMjQzLCAKKyAgICAxNDIsIDE0OCwgMSwgMjQzLCAwLCAxNDgsIDEsIDIyOSwgODIsIDE0OCwgMSwgMjUxLCA0MSwgMTQ4LCAxLCAyNTAsIDE2NSwgCisgICAgMTQ4LCAxLCAyMzUsIDE0NywgMTQ4LCAxLCAyMzUsIDEyMCwgMTQ4LCAxLCAyMjcsIDE2OSwgMTQ4LCAxLCAyMTUsIDE1NywgCisgICAgMTQ4LCAxLCAyMTUsIDE0NSwgMTQ4LCAxLCAyNDgsIDE0MywgMTQ4LCAxLCAyNDgsIDEyNywgMTQ4LCAxLCAyMjgsIDExNSwgCisgICAgMTQ4LCAxLCAyMTcsIDEwNiwgMTQ4LCAxLCAyMTYsIDIwOSwgMTQ4LCAxLCAyNDgsIDIyOSwgMTQ4LCAxLCAyNDgsIDMzLCAKKyAgICAxNDgsIDEsIDE5OCwgMTQ4LCAxLCAxOTEsIDE0OCwgMSwgMjI1LCAxNTAsIDE0OCwgMSwgMjUyLCAxOTksIDE0OCwgMSwgCisgICAgMjUyLCAyNiwgMTQ4LCAxLCAxODYsIDE0OCwgMSwgMTkyLCAxNDgsIDEsIDIwNSwgMTQ4LCAxLCAyMjIsIDE4MSwgMTQ4LCAxLCAKKyAgICAyMzMsIDE0MSwgMTQ4LCAxLCAyMzIsIDE5MCwgMTQ4LCAxLCAyMTQsIDI3LCAxNDgsIDEsIDIyMCwgMTA0LCAxNDgsIDEsIAorICAgIDIxOCwgMjI1LCAxNDgsIDEsIDIwNiwgMTQ4LCAxLCAxNjIsIDE0OCwgNSwgMjUzLCAxODMsIDE0OCwgMjUsIDUsIDI1NSwgCisgICAgODIsIDE0OCwgMjUsIDUsIDc0LCAxNDgsIDI1LCA1LCAyMzYsIDQwLCAxNDgsIDI1LCA1LCA2OSwgMTQ4LCAyNSwgNSwgMjE0LCAKKyAgICAxMTgsIDE0OCwgMjUsIDUsIDE0OSwgMTUzLCAxNDgsIDI1LCA1LCAxNDksIDIyMiwgMTgyLCAxNDgsIDI1LCA1LCA3NiwgCisgICAgMTQ4LCAyNSwgNSwgMjQ1LCAyMTcsIDE0OCwgMjUsIDUsIDI1NCwgMjEwLCAxNDgsIDI1LCA1LCA3OCwgMTQ4LCAyNSwgNSwgCisgICAgMjI2LCAxODcsIDE0OCwgMjUsIDUsIDI1MywgMjAwLCAxNDgsIDUsIDIxMywgMTUyLCAxNDgsIDIzMywgMjksIDc5LCAxNDgsIAorICAgIDI1NCwgMjExLCAyMzMsIDI5LCA3OSwgMTQ4LCAxLCAyMTUsIDE4NCwgMTQ4LCAxLCAyNDYsIDQ2LCAxNDgsIDEsIDE0OSwgCisgICAgMjIyLCAxODIsIDE0OCwgMSwgMTQ5LCAyMzIsIDE5MSwgMTQ4LCAyNSwgNSwgMTQ5LCAxNTYsIDE0OCwgMjUsIDUsIDE0OSwgCisgICAgMjMyLCAxOTEsIDE0OCwgMjEsIDIxMCwgODYsIDE0OCwgMjEsIDExMSwgMTQ4LCAyMSwgMTA1LCAxNDgsIDIxLCAxNTgsIAorICAgIDE0OCwgMjEsIDE2MSwgMTQ4LCAyMSwgMTkwLCAxNDgsIDIxLCAxOTUsIDE0OCwgMjEsIDE5OSwgMTQ4LCAyMSwgMTk2LCAKKyAgICAxNDgsIDIxLCAyMDEsIDE0OCwgMjQ0LCAxMCwgMjEsIDIxMCwgODcsIDMxLCAyMjYsIDI0MSwgMjI0LCAyMjYsIDY0LCAxNjEsIAorICAgIDE0OCwgMjQ0LCAxMCwgMjEsIDEyMywgMzEsIDIyNiwgMjQxLCAyMjQsIDIyNiwgNjQsIDE2MSwgMTQ4LCAyNDQsIDEwLCAyMSwgCisgICAgMTEzLCAzMSwgMjI2LCAyNDEsIDIyNCwgMjI2LCA2NCwgMTYxLCAxNDgsIDI0NCwgMTAsIDIxLCAxMzQsIDMxLCAyMjYsIAorICAgIDI0MSwgMjI0LCAyMjYsIDY0LCAxNjEsIDE0OCwgMjQ0LCAxMCwgMjEsIDEyMywgMzEsIDI0NSwgNTAsIDIyNCwgMjI2LCA2NCwgCisgICAgMTYxLCAxNDgsIDI0NCwgMTAsIDIxLCAxMTMsIDMxLCAyNDUsIDUwLCAyMjQsIDIyNiwgNjQsIDE2MSwgMTQ4LCAyNDQsIDEwLCAKKyAgICAyMSwgMTM0LCAzMSwgMjQ1LCA1MCwgMjI0LCAyMjYsIDY0LCAxNjEsIDE0OCwgNSwgMjE1LCA4NCwgMTY1LCA1LCAyNTQsIAorICAgIDgzLCAxNjUsIDUsIDIxMywgMTQ3LCAxNjUsIDEsIDYxLCAxNjUsIDEsIDI1NSwgODIsIDE2NSwgMSwgNzQsIDE2NSwgMSwgCisgICAgMjM2LCA0MCwgMTY1LCAxLCA2OSwgMTY1LCAxLCAyMTQsIDExOCwgMTY1LCAxLCAxNDksIDE1MywgMTY1LCAxLCAxNDksIAorICAgIDE1NiwgMTY1LCAxLCA3NiwgMTY1LCAxLCAyNDUsIDIxNywgMTY1LCAxLCAyNTQsIDIxMCwgMTY1LCAxLCA3OCwgMTY1LCAxLCAKKyAgICAyMjYsIDE4NywgMTY1LCAxLCAyNTMsIDIwMCwgMTY1LCAxLCAxNzYsIDE2NSwgMSwgMjM0LCAxMzgsIDE2NSwgMSwgMjQzLCAKKyAgICAxNDIsIDE2NSwgMSwgMjQzLCAwLCAxNjUsIDEsIDIyOSwgODIsIDE2NSwgMSwgMjUxLCA0MSwgMTY1LCAxLCAyNTAsIDE2NSwgCisgICAgMTY1LCAxLCAyMzUsIDE0NywgMTY1LCAxLCAyMzUsIDEyMCwgMTY1LCAxLCAyMjcsIDE2OSwgMTY1LCAxLCAyMTUsIDE1NywgCisgICAgMTY1LCAxLCAyMTUsIDE0NSwgMTY1LCAxLCAyNDgsIDE0MywgMTY1LCAxLCAyNDgsIDEyNywgMTY1LCAxLCAyMjgsIDExNSwgCisgICAgMTY1LCAxLCAyMTcsIDEwNiwgMTY1LCAxLCAyMTYsIDIwOSwgMTY1LCAxLCAyNDgsIDIyOSwgMTY1LCAxLCAyNDgsIDMzLCAKKyAgICAxNjUsIDEsIDE5OCwgMTY1LCAxLCAxOTEsIDE2NSwgMSwgMjI1LCAxNTAsIDE2NSwgMSwgMjUyLCAxOTksIDE2NSwgMSwgCisgICAgMjUyLCAyNiwgMTY1LCAxLCAxODYsIDE2NSwgMSwgMTkyLCAxNjUsIDEsIDIwNSwgMTY1LCAxLCAyMjIsIDE4MSwgMTY1LCAxLCAKKyAgICAyMzMsIDE0MSwgMTY1LCAxLCAyMzIsIDE5MCwgMTY1LCAxLCAyMTQsIDI3LCAxNjUsIDEsIDIyMCwgMTA0LCAxNjUsIDEsIAorICAgIDIxOCwgMjI1LCAxNjUsIDEsIDIwNiwgMTY1LCAxLCAxNjIsIDE2NSwgNSwgMjI3LCAyMDksIDE2NSwgNSwgMjUzLCAxODMsIAorICAgIDE2NSwgMjUsIDUsIDI1NSwgODIsIDE2NSwgMjUsIDUsIDc0LCAxNjUsIDI1LCA1LCAyMzYsIDQwLCAxNjUsIDI1LCA1LCA2OSwgCisgICAgMTY1LCAyNSwgNSwgMjE0LCAxMTgsIDE2NSwgMjUsIDUsIDE0OSwgMTUzLCAxNjUsIDI1LCA1LCAxNDksIDIyMiwgMTgyLCAKKyAgICAxNjUsIDI1LCA1LCA3NiwgMTY1LCAyNSwgNSwgMjQ1LCAyMTcsIDE2NSwgMjUsIDUsIDI1NCwgMjEwLCAxNjUsIDI1LCA1LCAKKyAgICA3OCwgMTY1LCAyNSwgNSwgMjI2LCAxODcsIDE2NSwgMjUsIDUsIDI1MywgMjAwLCAxNjUsIDUsIDIxMywgMTUyLCAxNjUsIAorICAgIDIzMywgMjksIDc5LCAxNjUsIDI1NCwgMjExLCAyMzMsIDI5LCA3OSwgMTY1LCAxLCAyNDQsIDIwNCwgMTY1LCAxLCAxNDksIAorICAgIDIyMiwgMTgyLCAxNjUsIDEsIDE0OSwgMjMyLCAxOTEsIDE2NSwgMjUsIDUsIDE0OSwgMTU2LCAxNjUsIDI1LCA1LCAxNDksIAorICAgIDIzMiwgMTkxLCAxNjUsIDIxLCAyMTAsIDg2LCAxNjUsIDIxLCAxMTEsIDE2NSwgMjEsIDEwNSwgMTY1LCAyMSwgMTU4LCAKKyAgICAxNjUsIDIxLCAxNjEsIDE2NSwgMjEsIDE5MCwgMTY1LCAyMSwgMTk1LCAxNjUsIDIxLCAxOTksIDE2NSwgMjEsIDE5NiwgCisgICAgMTY1LCAyMSwgMjAxLCAxNjUsIDUsIDIzNSwgMTA4LCAxNjUsIDUsIDIxNCwgMTYxLCAxMzYsIDUsIDI1NCwgODMsIDEzNiwgCisgICAgNSwgMjEzLCAxNDcsIDEzNiwgMSwgNjEsIDEzNiwgMSwgMjU1LCA4MiwgMTM2LCAxLCA3NCwgMTM2LCAxLCAyMzYsIDQwLCAKKyAgICAxMzYsIDEsIDY5LCAxMzYsIDEsIDIxNCwgMTE4LCAxMzYsIDEsIDE0OSwgMTUzLCAxMzYsIDEsIDE0OSwgMTU2LCAxMzYsIDEsIAorICAgIDc2LCAxMzYsIDEsIDI0NSwgMjE3LCAxMzYsIDEsIDI1NCwgMjEwLCAxMzYsIDEsIDc4LCAxMzYsIDEsIDIyNiwgMTg3LCAKKyAgICAxMzYsIDEsIDI1MywgMjAwLCAxMzYsIDEsIDE3NiwgMTM2LCAxLCAyMzQsIDEzOCwgMTM2LCAxLCAyNDMsIDE0MiwgMTM2LCAKKyAgICAxLCAyNDMsIDAsIDEzNiwgMSwgMjI5LCA4MiwgMTM2LCAxLCAyNTEsIDQxLCAxMzYsIDEsIDI1MCwgMTY1LCAxMzYsIDEsIAorICAgIDIzNSwgMTQ3LCAxMzYsIDEsIDIzNSwgMTIwLCAxMzYsIDEsIDIyNywgMTY5LCAxMzYsIDEsIDIxNSwgMTU3LCAxMzYsIDEsIAorICAgIDIxNSwgMTQ1LCAxMzYsIDEsIDI0OCwgMTQzLCAxMzYsIDEsIDI0OCwgMTI3LCAxMzYsIDEsIDIyOCwgMTE1LCAxMzYsIDEsIAorICAgIDIxNywgMTA2LCAxMzYsIDEsIDIxNiwgMjA5LCAxMzYsIDEsIDI0OCwgMjI5LCAxMzYsIDEsIDI0OCwgMzMsIDEzNiwgMSwgCisgICAgMTk4LCAxMzYsIDEsIDIyOCwgOTcsIDEzNiwgMSwgMTkxLCAxMzYsIDEsIDIyNSwgMTUwLCAxMzYsIDEsIDI1MiwgMTk5LCAKKyAgICAxMzYsIDEsIDI1MiwgMjYsIDEzNiwgMSwgMTg2LCAxMzYsIDEsIDE5MiwgMTM2LCAxLCAyMDUsIDEzNiwgMSwgMjIyLCAxODEsIAorICAgIDEzNiwgMSwgMjMzLCAxNDEsIDEzNiwgMSwgMjMyLCAxOTAsIDEzNiwgMSwgMjMyLCAxODEsIDEzNiwgMSwgMjE0LCAyNywgCisgICAgMTM2LCAxLCAyMjAsIDEwNCwgMTM2LCAxLCAyMTgsIDIyNSwgMTM2LCAxLCAyMDYsIDEzNiwgMSwgMTYyLCAxMzYsIDEsIAorICAgIDIxNSwgMTI2LCAxMzYsIDUsIDI1MywgMTgzLCAxMzYsIDI1LCA1LCAyNTUsIDgyLCAxMzYsIDI1LCA1LCA3NCwgMTM2LCAyNSwgCisgICAgNSwgMjM2LCA0MCwgMTM2LCAyNSwgNSwgNjksIDEzNiwgMjUsIDUsIDIxNCwgMTE4LCAxMzYsIDI1LCA1LCAxNDksIDE1MywgCisgICAgMTM2LCAyNSwgNSwgMTQ5LCAyMjIsIDE4MiwgMTM2LCAyNSwgNSwgNzYsIDEzNiwgMjUsIDUsIDI0NSwgMjE3LCAxMzYsIDI1LCAKKyAgICA1LCAyNTQsIDIxMCwgMTM2LCAyNSwgNSwgNzgsIDEzNiwgMjUsIDUsIDIyNiwgMTg3LCAxMzYsIDI1LCA1LCAyNTMsIDIwMCwgCisgICAgMTM2LCA1LCAyMTMsIDE1MiwgMTM2LCAxLCA1OSwgMjIzLCA3NiwgMTM2LCAyNTMsIDIwMSwgMjMzLCAyOSwgNzksIDEzNiwgCisgICAgMSwgMTQ5LCAyMjIsIDE4MiwgMTM2LCAxLCAxNDksIDIzMiwgMTkxLCAxMzYsIDI1LCA1LCAxNDksIDE1NiwgMTM2LCAyNSwgCisgICAgNSwgMTQ5LCAyMzIsIDE5MSwgMTM2LCAyMSwgMjEwLCA4NiwgMTM2LCAyMSwgMTExLCAxMzYsIDIxLCAxMDUsIDEzNiwgMjEsIAorICAgIDE1OCwgMTM2LCAyMSwgMTYxLCAxMzYsIDIxLCAxOTAsIDEzNiwgMjEsIDE5NSwgMTM2LCAyMSwgMTk5LCAxMzYsIDIxLCAKKyAgICAxOTYsIDEzNiwgMjEsIDIwMSwgMTM2LCA1NCwgMjE2LCAyNDgsIDEzNiwgNTQsIDEyMywgMjQwLCAyMTcsIDEzNiwgNTQsIAorICAgIDEyMywgMjE2LCAxNDgsIDEzNiwgMjQ0LCAxMCwgMTIzLCAyMjQsIDI0LCAxMzYsIDI0NCwgMTAsIDEyMywgMjQyLCAzNCwgCisgICAgMTM2LCAyNDQsIDEwLCAxMzQsIDIyNCwgMjIsIDEzNiwgMjQ4LCAxNTgsIDc5LCAxMzYsIDEsIDI1MCwgMTA3LCAyMjgsIAorICAgIDExNiwgMTM2LCAxLCAyNTAsIDEwNywgMjMwLCAzMCwgMTM2LCAxLCAyNTAsIDEwNywgMjIyLCAxODIsIDEzNiwgMSwgMjUwLCAKKyAgICAxMDcsIDE1NiwgMTM2LCAxLCAyNTAsIDEwNywgMjMyLCAxOTEsIDEzNiwgMSwgMjUwLCAxMDcsIDIzNSwgMjksIDE3NSwgNSwgCisgICAgMjU0LCA4MiwgMTc1LCA1LCAyMTMsIDE0NiwgMTc1LCAxLCAyNTMsIDE3MywgMTc1LCAxLCAyNTUsIDM2LCAxNzUsIDEsIAorICAgIDI1NCwgMjMyLCAxNzUsIDEsIDI1NCwgMjQ3LCAxNzUsIDEsIDIzNSwgMTU3LCAxNzUsIDEsIDIzNiwgMzksIDE3NSwgMSwgCisgICAgMjE0LCAxMTAsIDE3NSwgMSwgMjE0LCAxMTIsIDE3NSwgMSwgMjM1LCAxODAsIDE3NSwgMSwgMjM1LCAxODEsIDE3NSwgMSwgCisgICAgMjM2LCAyNSwgMTc1LCAxLCAyMzYsIDI3LCAxNzUsIDEsIDI0NSwgMjUsIDE3NSwgMSwgMjQ1LCAyMTIsIDE3NSwgMSwgMjU0LCAKKyAgICAxOTcsIDE3NSwgMSwgMjI2LCAxMTIsIDE3NSwgMSwgMjI2LCAxODEsIDE3NSwgMSwgMjUzLCAxODYsIDE3NSwgMSwgMjU0LCAKKyAgICAxNTQsIDIzNCwgMTkzLCAxNzUsIDEsIDIzMSwgMjE0LCAyMzQsIDE5MywgMTc1LCAxLCAyNTQsIDE1NCwgMjQzLCA4OSwgCisgICAgMTc1LCAxLCAyMzEsIDIxNCwgMjQzLCA4OSwgMTc1LCAxLCAyMzQsIDIzNSwgMjI5LCAyMjcsIDE3NSwgMSwgMjIxLCAyMzgsIAorICAgIDI0MywgODksIDE3NSwgMSwgMjU0LCAxNTQsIDI1MCwgMjI0LCAxNzUsIDEsIDIzMSwgMjE0LCAyNTAsIDIyNCwgMTc1LCAxLCAKKyAgICAyNTQsIDE1NCwgMjM1LCAxMzMsIDE3NSwgMSwgMjMxLCAyMTQsIDIzNSwgMTMzLCAxNzUsIDEsIDIxNywgOTksIDIyOSwgCisgICAgMjI3LCAxNzUsIDEsIDIxNywgOTksIDIyMSwgMjM3LCAyMjksIDIyOCwgMTc1LCAxLCAyMjEsIDIzOCwgMjM1LCAxMzMsIAorICAgIDE3NSwgMSwgMjU0LCAxNTQsIDIxNSwgMTUzLCAxNzUsIDEsIDIzMSwgMjE0LCAyMTUsIDE1MywgMTc1LCAxLCAyNTQsIDE1NCwgCisgICAgMjQ4LCAxMzQsIDE3NSwgMSwgMjMxLCAyMTQsIDI0OCwgMTM0LCAxNzUsIDEsIDIzMCwgNTgsIDIyOSwgMTg1LCAxNzUsIDEsIAorICAgIDIyMSwgMjM4LCAyNDgsIDEzNCwgMTc1LCAxLCAyNTQsIDE1NCwgMjE3LCAzMSwgMTc1LCAxLCAyMzEsIDIxNCwgMjE3LCAzMSwgCisgICAgMTc1LCAxLCAyNTQsIDE1NCwgMjQ4LCAxNTIsIDE3NSwgMSwgMjMxLCAyMTQsIDI0OCwgMTUyLCAxNzUsIDEsIDI0OCwgMTgyLCAKKyAgICAyMjksIDE4NSwgMTc1LCAxLCAyMjEsIDIzOCwgMjQ4LCAxNTIsIDE3NSwgMSwgMjU0LCAxNTQsIDIyNSwgMjMyLCAxNzUsIDEsIAorICAgIDIzMSwgMjE0LCAyMjUsIDIzMiwgMTc1LCAxLCAyNTQsIDE1NCwgMjUyLCAxMjAsIDE3NSwgMSwgMjMxLCAyMTQsIDI1MiwgCisgICAgMTIwLCAxNzUsIDEsIDIzMSwgMTM2LCAxNzUsIDEsIDI1NCwgMTM5LCAyNTIsIDEyMCwgMTc1LCAxLCAyMTEsIDUxLCAxNzUsIAorICAgIDEsIDIyMywgMTM2LCAxNzUsIDEsIDI0OCwgMTgyLCAyMzMsIDczLCAxNzUsIDEsIDIxNCwgMSwgMTc1LCAxLCAyMTcsIDk5LCAKKyAgICAyMjEsIDIxMiwgMTc1LCAxLCAyMzAsIDU4LCAyMjEsIDIxMiwgMTc1LCAxLCAyNDgsIDE4MiwgMjIxLCAyMTIsIDE3NSwgMSwgCisgICAgMjQxLCAyNDksIDE3NSwgMSwgMjMwLCA1OCwgMjMzLCA3MywgMTc1LCAxLCAyNDQsIDE2NCwgMTc1LCA1LCAyNTQsIDE4NiwgCisgICAgMTc1LCAyNSwgNSwgMjU0LCAyNDIsIDE3NSwgMjUsIDUsIDIzNCwgMTYxLCAyNTQsIDI0OSwgMTc1LCAyNSwgNSwgMjQ3LCAKKyAgICAyMzYsIDI1NCwgMjQ5LCAxNzUsIDI1LCA1LCAyMzQsIDE2MSwgMjM1LCAxNzcsIDE3NSwgMjUsIDUsIDI0NywgMjM2LCAyMzUsIAorICAgIDE3NywgMTc1LCAyNSwgNSwgMjM0LCAxNjEsIDIyNiwgOTIsIDE3NSwgMjUsIDUsIDI0NywgMjM2LCAyMjYsIDkyLCAxNzUsIAorICAgIDI1LCA1LCAyNDMsIDEzMSwgMTc1LCAyNSwgNSwgMjM0LCAyMSwgMTc1LCAyNSwgNSwgMjQ3LCAyMzYsIDIzNCwgMjEsIDE3NSwgCisgICAgMjUsIDUsIDIzNCwgMjMsIDI0OCwgNzUsIDE3NSwgMjUsIDUsIDIzNCwgMjIsIDI0MiwgNTQsIDI1NCwgMjQyLCAxNzUsIDI1LCAKKyAgICA1LCAyMzQsIDIyLCAyNDIsIDU0LCAyNDcsIDIzNiwgMjU0LCAyNDIsIDE3NSwgMjUsIDUsIDIzNCwgMjIsIDI0MiwgNTQsIAorICAgIDI0MywgODgsIDE3NSwgMjUsIDUsIDI0MywgODgsIDE3NSwgMjUsIDUsIDI0NywgMjM2LCAyNDMsIDEzMSwgMTc1LCAyNSwgNSwgCisgICAgMjQ3LCAyMzYsIDI0MywgODgsIDE3NSwgMjI0LCAxNDQsIDIzMywgMjEzLCAxNjgsIDEzNSwgMjM0LCAzNSwgMjM0LCAyNTIsIAorICAgIDE2OCwgMTM1LCAyMzQsIDExMiwgMjM0LCAxMzQsIDE2OCwgMTM1LCAyMzQsIDExMiwgMjM0LCAxMDUsIDE2OCwgMTM1LCAKKyAgICAyMzQsIDExMiwgMjM0LCAxMDEsIDE2OCwgMTM1LCAyMzQsIDExMiwgMjM0LCAxMDksIDE2OCwgMTM1LCAyMzQsIDExMiwgCisgICAgMjIzLCAxNTcsIDE2OCwgMTM1LCAyMjksIDEwLCAyMjgsIDI1MywgMTY4LCAxMzUsIDI1MCwgOTUsIDI1MCwgMTU1LCAxNjgsIAorICAgIDEzNSwgMjUwLCA5NSwgMjUwLCAxMDMsIDE2OCwgMTM1LCAyNTAsIDk1LCAyNTAsIDE1NCwgMTY4LCAxMzUsIDIxOSwgNjEsIAorICAgIDIxOSwgNjAsIDE2OCwgMTM1LCAyNTAsIDk1LCAyNTAsIDkxLCAxNjgsIDEzNSwgMjEwLCAyNDUsIDIxMCwgMjUyLCAxNjgsIAorICAgIDEzNSwgMjQ3LCAxNTQsIDI1MCwgMTYyLCAxNjgsIDEzNSwgMjE2LCA0MywgMjI1LCAyNDIsIDE2OCwgMTM1LCAyMTYsIDE1OCwgCisgICAgMjE2LCAyMDEsIDE2OCwgMTM1LCAyMTYsIDE1OCwgMjI5LCAyMDYsIDE2OCwgMTM1LCAyMTYsIDE1OCwgMjI1LCAxMTQsIAorICAgIDE2OCwgMTM1LCAyMjgsIDgwLCAyMjksIDEwMywgMTY4LCAxMzUsIDI0NywgMTU0LCAyNDgsIDc2LCAxNjgsIDEzNSwgMjE2LCAKKyAgICA0MywgMjE3LCA1NiwgMTY4LCAxMzUsIDIxNiwgMTU4LCAyMTYsIDEzMiwgMTY4LCAxMzUsIDIxNiwgMTU4LCAyMTYsIDIwNSwgCisgICAgMTY4LCAxMzUsIDIxNiwgMTU4LCAyMTYsIDE1NSwgMTY4LCAxMzUsIDIyOCwgODAsIDIyNywgMjQyLCAxNjgsIDEzNSwgMjUxLCAKKyAgICAyMTQsIDI1MiwgMTcyLCAxNjgsIDEzNSwgMjI1LCAyMCwgMjI1LCA0NSwgMTY4LCAxMzUsIDIyNSwgMTI1LCAyMjUsIDExNiwgCisgICAgMTY4LCAxMzUsIDI0NCwgNTIsIDI0NCwgMjA0LCAxNjgsIDEzNSwgMjI1LCAxMjUsIDIyNSwgMTQ0LCAxNjgsIDEzNSwgMjQ0LCAKKyAgICA1MiwgMjQ0LCAxODEsIDE2OCwgMTM1LCAyMjUsIDEyNSwgMjIxLCAyNDksIDE2OCwgMTM1LCAyMzAsIDE2NywgMTg2LCAxNjgsIAorICAgIDEzNSwgMjEwLCAyNDUsIDIxMSwgNzksIDE2OCwgMTM1LCAyMjIsIDIxNCwgMjIyLCAxNDEsIDE2OCwgMTM1LCAyMjIsIDE0MiwgCisgICAgMTY4LCAxMzUsIDIzMiwgMTYzLCAyMzIsIDIxMiwgMTY4LCAxMzUsIDIzMiwgMTAzLCAxNjgsIDEzNSwgMjExLCAyMjgsIAorICAgIDIxMiwgNjEsIDE2OCwgMTM1LCAyMTksIDYxLCAyMjIsIDgsIDE2OCwgMTM1LCAyMTksIDYxLCAyMjIsIDExNiwgMTY4LCAKKyAgICAxMzUsIDIxOSwgNjEsIDIxOCwgODMsIDE2OCwgMTM1LCAyNDEsIDc2LCAyNDEsIDE2NiwgMTY4LCAxMzUsIDIzMiwgMTYzLCAKKyAgICAyNTAsIDc2LCAxNjgsIDEzNSwgMTQ0LCAyNTQsIDEyMywgMTY4LCAxMzUsIDI0MSwgNzYsIDIyOCwgNzUsIDE2OCwgMTM1LCAKKyAgICAyMjYsIDcyLCAxNjgsIDEzNSwgMjIxLCAyMzIsIDYxLCAxNjgsIDEzNSwgMjMxLCAyMDksIDI0MiwgMjQsIDE2OCwgMTM1LCAKKyAgICAyMjEsIDIzMiwgMjU1LCA4MiwgMTY4LCAxMzUsIDIyMSwgMjMyLCAyNTQsIDE0NCwgMTY4LCAxMzUsIDIyMSwgMjMyLCA3NCwgCisgICAgMTY4LCAxMzUsIDIyMSwgMjMyLCAyMzYsIDQwLCAxNjgsIDEzNSwgMjIxLCAyMzIsIDIxNCwgMjE0LCAxNjgsIDEzNSwgMjIxLCAKKyAgICAyMzIsIDIxNCwgMjEyLCAxNjgsIDEzNSwgMjIxLCAyMzIsIDY5LCAxNjgsIDEzNSwgMjIxLCAyMzIsIDIxNCwgMTE4LCAxNjgsIAorICAgIDEzNSwgMjI1LCAxMjcsIDE2OCwgMjQ5LCAxMDYsIDE2LCAyNTIsIDE3MywgMTY4LCAxMzUsIDIyMSwgMjMyLCA3NiwgMTY4LCAKKyAgICAxMzUsIDIyMSwgMjMyLCAyNTQsIDI1MiwgMTY4LCAxMzUsIDIyMSwgMjMyLCA3OCwgMTY4LCAxMzUsIDIyMSwgMjMyLCAyNTQsIAorICAgIDIxMSwgMjMxLCAyMDMsIDE2OCwgMTM1LCAyMjEsIDIzMiwgMjU0LCAyMTEsIDIzMSwgMjA0LCAxNjgsIDEzNSwgMjMzLCAKKyAgICAxMTIsIDE2OCwgMTM1LCAyMzEsIDIwMCwgMTY4LCAxMzUsIDIzMSwgMjAxLCAxNjgsIDEzNSwgMjMxLCAyMDksIDI0NSwgCisgICAgMTg4LCAxNjgsIDEzNSwgMjMxLCAyMDksIDIxNiwgMTU3LCAxNjgsIDEzNSwgMjMxLCAyMDksIDIxNSwgMjI5LCAxNjgsIAorICAgIDEzNSwgMjMxLCAyMDksIDI1MCwgMTQzLCAxNjgsIDEzNSwgMjE2LCAxOTksIDE2OCwgMTM1LCAyMjgsIDIxMCwgMTY4LCAKKyAgICAxMzUsIDIxMSwgNzMsIDE2OCwgMTM1LCAyNDQsIDQzLCAxNjgsIDIxLCAyMTAsIDg2LCAxNjgsIDIxLCAxMTEsIDE2OCwgMjEsIAorICAgIDEwNSwgMTY4LCAyMSwgMTU4LCAxNjgsIDIxLCAxNjEsIDE2OCwgMjEsIDE5MCwgMTY4LCAyMSwgMTk1LCAxNjgsIDIxLCAKKyAgICAxOTksIDE2OCwgMjEsIDE5NiwgMTY4LCAyMSwgMjAxLCAxNjgsIDEzNSwgMjU0LCAxMTksIDE2OCwgMTM1LCAyMzQsIDExMCwgCisgICAgMjA5LCAyMDksIDEsIDIzNCwgMzQsIDIwOSwgMjA5LCAxLCAyMzQsIDExMiwgMjE4LCAzNiwgMjA5LCAyMDksIDEsIDIzNCwgCisgICAgMTEyLCAyMTcsIDYzLCAyMDksIDIwOSwgMSwgMjI5LCA5LCAyMDksIDIwOSwgMSwgMjQ5LCAyNDYsIDIwOSwgMjA5LCAxLCAKKyAgICAyMTksIDYxLCAyMTcsIDYzLCAyMDksIDIwOSwgMSwgMjI3LCAxMzgsIDIwOSwgMjA5LCAxLCAyNDcsIDE1MywgMjA5LCAyMDksIAorICAgIDEsIDExMiwgMjA5LCAyMDksIDEsIDIxNiwgMTU4LCAyMTgsIDM2LCAyMDksIDIwOSwgMSwgMjE2LCAxNTgsIDIxNywgNjMsIAorICAgIDIwOSwgMjA5LCAxLCAyMjgsIDc5LCAyMDksIDIwOSwgMSwgMjUxLCAyMTMsIDIwOSwgMjA5LCAxLCAyMjUsIDE5LCAyMDksIAorICAgIDIwOSwgMSwgMjI1LCAxMjUsIDIxOCwgMzYsIDIwOSwgMjA5LCAxLCAyNDQsIDUyLCAyMTcsIDYzLCAyMDksIDIwOSwgMSwgCisgICAgMjI1LCAxMjUsIDIxNywgNjMsIDIwOSwgMjA5LCAxLCAyNDQsIDUyLCAyMTgsIDM2LCAyMDksIDIwOSwgMSwgMjMwLCAxNjYsIAorICAgIDIwOSwgMjA5LCAxLCAyMTAsIDI0NCwgMjA5LCAyMDksIDEsIDIzMiwgMTYzLCAyMzIsIDIxMiwgMjA5LCAyMDksIDEsIDIzMiwgCisgICAgMTYzLCAyMzIsIDEyNywgMjA5LCAyMDksIDEsIDIxMSwgMjI3LCAyMDksIDIwOSwgMSwgMjE5LCA2MSwgMjE4LCAzNiwgMjA5LCAKKyAgICAyMDksIDEsIDI0MSwgNzYsIDIxOCwgMzYsIDIwOSwgMjA5LCAxLCA3OCwgMjA5LCAyMDksIDEsIDI0MSwgNzYsIDIxNywgNjMsIAorICAgIDIwOSwgMjA5LCAyNDUsIDE3MSwgMjA5LCAyMDksIDI1LCA1LCA2MSwgMjA5LCAyMDksIDI1LCA1LCAyMzEsIDIwOSwgMjM0LCAKKyAgICAyNDAsIDIwOSwgMjA5LCAyNSwgNSwgMjU1LCA4MiwgMjA5LCAyMDksIDI1LCA1LCAyNTQsIDE0NCwgMjA5LCAyMDksIDI1LCAKKyAgICA1LCA3NCwgMjA5LCAyMDksIDI1LCA1LCAyMzYsIDQwLCAyMDksIDIwOSwgMjUsIDUsIDIxMSwgMTE3LCAyMDksIDIwOSwgMjUsIAorICAgIDUsIDIxMCwgMTY5LCAyMDksIDIwOSwgMjUsIDUsIDY5LCAyMDksIDIwOSwgMjUsIDUsIDIxNCwgMTE4LCAyMDksIDIwOSwgCisgICAgMjUsIDUsIDIzMSwgMjA5LCAyMzQsIDE5LCAyMDksIDIwOSwgMjIwLCAxNDcsIDUsIDIzMiwgMTYyLCAyMDksIDIwOSwgMjIwLCAKKyAgICAxNDcsIDUsIDIyNywgMTM4LCAyMDksIDIwOSwgMjUsIDUsIDc2LCAyMDksIDIwOSwgMjUsIDUsIDI0NSwgMjAzLCAyMDksIAorICAgIDIwOSwgMjUsIDUsIDc4LCAyMDksIDIwOSwgMjUsIDUsIDI1MywgMTc1LCAyMDksIDIwOSwgMjUsIDUsIDI1NCwgMjEwLCAKKyAgICAyMDksIDIwOSwgMjM0LCAzNSwgMjMzLCAxNDEsIDIwOSwgMjA5LCAxMzgsIDIzMSwgMjA5LCAyNDUsIDE4OCwgMjA5LCAyMDksIAorICAgIDEzOCwgMjMxLCAyMDksIDIxNiwgMTU3LCAyMDksIDIwOSwgMTM4LCAyMzEsIDIwOSwgMjE2LCAxMTgsIDIwOSwgMjA5LCAKKyAgICAxMzgsIDIzMSwgMjA5LCAyNTAsIDIzMSwgMjA5LCAyMDksIDI1MSwgMTIsIDc5LCAyMDksIDIwOSwgMjI4LCAyMTksIDIwOSwgCisgICAgMjA5LCAyMSwgMjEwLCA4NiwgMjA5LCAyMDksIDIxLCAxMTEsIDIwOSwgMjA5LCAyMSwgMTA1LCAyMDksIDIwOSwgMjEsIAorICAgIDE1OCwgMjA5LCAyMDksIDIxLCAxNjEsIDIwOSwgMjA5LCAyMSwgMTkwLCAyMDksIDIwOSwgMjEsIDE5NSwgMjA5LCAyMDksIAorICAgIDIxLCAxOTksIDIwOSwgMjA5LCAyMSwgMTk2LCAyMDksIDIwOSwgMjEsIDIwMSwgMjA5LCAyMDksIDI0MSwgNzYsIDIyOCwgCisgICAgNzksIDIwOSwgMjA5LCAyNDEsIDc2LCAyMzAsIDE2NiwgMjA5LCAyMDksIDEsIDIzNCwgMTEzLCAyNDIsIDE4MSwgMjA5LCAKKyAgICAyMDksIDEsIDIzNCwgMTEzLCAyMjcsIDEzOCwgNjMsIDMsIDIyNiwgMjA4LCA2MywgMTY0LCAyNDIsIDEyMiwgMjExLCAwLCAKKyAgICAyMzAsIDI1MywgMjE1LCAxOTAsIDYxLCA2MywgMTY0LCAyNDIsIDEyMiwgMjExLCAwLCAyMzAsIDI1MywgMjU1LCAxNjgsIAorICAgIDIyMiwgMjE4LCAyNTIsIDg1LCAxODYsIDYzLCAxNjQsIDI0MiwgMTIyLCAyMTEsIDAsIDIzMCwgMjUzLCAyNTUsIDE2OCwgCisgICAgMjQyLCAxMjIsIDIxNSwgMTc0LCAxODYsIDYzLCAxNjQsIDY1LCAyMTEsIDAsIDIzMCwgMjUzLCAyMzEsIDk4LCAxODYsIDYzLCAKKyAgICAxNjQsIDI1MCwgNCwgMjExLCAwLCAyMzAsIDI1MywgMjIwLCAxMTEsIDE4NiwgNjMsIDE2NCwgMjUwLCAyNDcsIDIxMSwgMCwgCisgICAgMjMwLCAyNTMsIDIyNSwgMTE1LCAyMjAsIDk4LCAxODYsIDYzLCAxNjQsIDIxMSwgMCwgMjMwLCAyNTMsIDIxNSwgMTc0LCAKKyAgICAyMjAsIDk4LCAxODYsIDYzLCAxNjQsIDIyMSwgMjEwLCAyMjAsIDk3LCA2MywgMTY0LCAyNTEsIDEzNiwgMjExLCAwLCAyMzAsIAorICAgIDI1MiwgNjMsIDE2NCwgMjUxLCAyMzEsIDIyMCwgNSwgMjExLCAwLCAyMzAsIDI1MiwgNjMsIDE2NCwgMjM1LCAyMDQsIDIxNSwgCisgICAgMTczLCA2MywgMTY0LCAyNDgsIDY5LCAyMTUsIDE3NCwgMjUxLCAxMzUsIDYzLCAxNjQsIDIyMCwgOTcsIDYzLCAxNjQsIAorICAgIDIyNywgMTQzLCAyMjAsIDk3LCA2MywgMTY0LCAyMTUsIDE3NCwgMjIwLCA5NywgNjMsIDE2NCwgMjI3LCAxNDMsIDIxNSwgCisgICAgMTc0LCAyMjAsIDk3LCA2MywgMTY0LCAyMjIsIDIzOSwgMjUwLCAxMzAsIDIxOCwgMjM4LCAyMjAsIDk3LCA2MywgMTY0LCAKKyAgICAyMjMsIDQ1LCAyNDIsIDE1MywgMjIwLCA5NywgNjMsIDE2NCwgMjUwLCAyNDcsIDI1NSwgMTcyLCAyMjIsIDE0NiwgMjMxLCAKKyAgICA5NywgMjAwLCAyNTEsIDE1LCA2MywgMTY0LCAyNDIsIDEyMiwgMjE1LCAxNzMsIDYzLCAyMzIsIDE1MCwgNSwgMjUwLCAxNjMsIAorICAgIDIyMiwgMTQ1LCA2MywgMjMyLCAxNTAsIDUsIDIzMywgMiwgMjIyLCAxNDUsIDYzLCAyNTMsIDIyMCwgNSwgMjIwLCAxMDcsIAorICAgIDI0MywgNzIsIDI1NSwgMTczLCAyMjIsIDE0NSwgNjMsIDI1MywgMjIwLCA1LCAyNTUsIDE3MCwgMTkxLCA2MywgMjUzLCAKKyAgICAyMjAsIDUsIDIyMSwgMTg0LCAyMTUsIDE2OSwgNjMsIDUsIDIyMywgMTMzLCAyNDcsIDE2NywgMjQzLCA3MSwgNjMsIDUsIAorICAgIDIyMywgMTMzLCAyNDcsIDE2NywgMjQyLCAxODMsIDYzLCA1LCAyMjMsIDEzMywgMjQ3LCAxNjcsIDI0MiwgMTIzLCA2MywgNSwgCisgICAgMjIzLCAxMzMsIDIyOSwgMjI0LCAyNDMsIDcxLCA2MywgNSwgMjIzLCAxMzMsIDIyOSwgMjI0LCAyNDIsIDE4MywgNjMsIDUsIAorICAgIDIyMywgMTMzLCAyNDcsIDE2NywgMjIzLCAxMzMsIDIyOSwgMjIzLCA2MywgMjEsIDIxMCwgODYsIDYzLCAyMSwgMTExLCA2MywgCisgICAgMjEsIDEwNSwgNjMsIDIxLCAxNTgsIDYzLCAyMSwgMTYxLCA2MywgMjEsIDE5MCwgNjMsIDIxLCAxOTUsIDYzLCAyMSwgMTk5LCAKKyAgICA2MywgMjEsIDE5NiwgNjMsIDIxLCAyMDEsIDYzLCAyMSwgMTYzLCAxMTEsIDYzLCAyMSwgMTYzLCAxMDUsIDYzLCAyMSwgCisgICAgMTYzLCAxNTgsIDYzLCAyMSwgMTYzLCAxNjEsIDYzLCAyMSwgMTYzLCAxOTAsIDYzLCAyMSwgMTYzLCAxOTUsIDYzLCAyMSwgCisgICAgMTYzLCAxOTksIDYzLCAyMSwgMTYzLCAxOTYsIDYzLCAyMSwgMTYzLCAyMDEsIDYzLCAyMSwgMTYzLCAyMTAsIDg2LCA2MywgCisgICAgMTY0LCAyNTEsIDEzOCwgMjIyLCAxNDUsIDYzLCAxNjQsIDIyOSwgNzMsIDI1MSwgNzYsIDIyNywgMTUzLCAyMTAsIDI1LCAKKyAgICA2MywgMTY0LCAyNTAsIDI0NywgMjU1LCAxNzIsIDIyMiwgMTQ2LCAyNTEsIDc3LCAyMzAsIDIwNywgMjUxLCAxNSwgNjMsIAorICAgIDE2NCwgMjI5LCA3MywgMjUxLCA3NiwgMjIwLCAxMDgsIDIyMiwgMTQ1LCA2MywgMTY0LCAyNTAsIDE0MCwgMjMwLCAyNTIsIAorICAgIDYzLCAxNjQsIDIxNSwgMTg1LCAyNTUsIDE2OSwgNjMsIDE2NCwgMjQyLCAxMDcsIDIyMiwgMTQ2LCAyNDIsIDcwLCA2MywgCisgICAgMTY0LCAyNDIsIDEwNywgMjIyLCAxNDYsIDI0MiwgNzYsIDYzLCAxNjQsIDI1NCwgMTI0LCAyMzQsIDEyOSwgMjQyLCA3MCwgCisgICAgNjMsIDE2NCwgMjU0LCAxMjQsIDIzNCwgMTI5LCAyNDIsIDc2LCA2MywgNSwgMjExLCA2NSwgMjE1LCAxNzIsIDYzLCA1LCAKKyAgICAyMzEsIDE3MiwgMjE1LCAxNzIsIDYzLCAxLCAxNzYsIDYzLCAxLCAyMzQsIDEzOCwgNjMsIDEsIDI0MywgMTQyLCA2MywgMSwgCisgICAgMjQzLCAwLCA2MywgMSwgMjI5LCA4MiwgNjMsIDEsIDI1MSwgNDEsIDYzLCAxLCAyNTAsIDE2NSwgNjMsIDEsIDIzNSwgMTQ3LCAKKyAgICA2MywgMSwgMjI3LCAxNjksIDYzLCAxLCAyMTUsIDE1NywgNjMsIDEsIDIxNSwgMTQ1LCA2MywgMSwgMjQ4LCAxNDMsIDYzLCAKKyAgICAxLCAyNDgsIDEyNywgNjMsIDEsIDIyOCwgMTE1LCA2MywgMSwgMjE3LCAxMDYsIDYzLCAxLCAyMTYsIDIwOSwgNjMsIDEsIAorICAgIDI0OCwgMjI5LCA2MywgMSwgMjQ4LCAzMywgNjMsIDEsIDE5OCwgNjMsIDEsIDE5MSwgNjMsIDEsIDIyNSwgMTUwLCA2MywgMSwgCisgICAgMjUyLCAxOTksIDYzLCAxLCAyNTIsIDI2LCA2MywgMSwgMTg2LCA2MywgMSwgMjE1LCAxODQsIDYzLCAxLCAyMTUsIDE3NiwgCisgICAgNjMsIDEsIDI0NiwgNDYsIDYzLCAxLCAyNDYsIDQxLCA2MywgMSwgMjEyLCA2NSwgNjMsIDEsIDIxMCwgODIsIDYzLCAxLCAKKyAgICAyMTAsIDExNiwgNjMsIDEsIDI1NSwgMTc1LCA2MywgMSwgMTkyLCA2MywgMSwgMjA1LCA2MywgMSwgMjMzLCAxNDEsIDYzLCAKKyAgICAxLCAyMjAsIDEwNCwgNjMsIDEsIDIxOCwgMjI1LCA2MywgMSwgMjA2LCA2MywgMSwgMTYyLCA2MywgMSwgNjEsIDYzLCAxLCAKKyAgICAyMzMsIDIzNywgNjMsIDEsIDI0NCwgODUsIDIwNSwgNjMsIDEsIDIzNCwgNTIsIDYzLCAxLCAyMjIsIDE4MSwgNjMsIDI1LCAKKyAgICA1LCAyNTUsIDgyLCA2MywgMjUsIDUsIDc0LCA2MywgMjUsIDUsIDIzNiwgNDAsIDYzLCAyNSwgNSwgNjksIDYzLCAyNSwgNSwgCisgICAgMjE0LCAxMTgsIDYzLCAyNSwgNSwgMTQ5LCAxNTMsIDYzLCAyNSwgNSwgMTQ5LCAyMjIsIDE4MiwgNjMsIDI1LCA1LCAxNDksIAorICAgIDE1NiwgNjMsIDI1LCA1LCAxNDksIDIzMiwgMTkxLCA2MywgMjUsIDUsIDc2LCA2MywgMjUsIDUsIDI0NSwgMjE3LCA2MywgCisgICAgMjUsIDUsIDc4LCA2MywgMjUsIDUsIDIyNiwgMTg3LCA2MywgNSwgMjIyLCAyMjQsIDIxOCwgODUsIDIyOSwgODMsIDIyMiwgCisgICAgMjEzLCA2MywgNSwgMjIyLCAyMTgsIDI1MiwgODQsIDYzLCAyNSwgNSwgMjIzLCA1MiwgNzQsIDYzLCAyNSwgNSwgMjIzLCAKKyAgICA1MiwgMjM2LCA0MCwgNjMsIDUsIDIyNywgMTUzLCAyMTAsIDI2LCAyMjksIDIzMSwgMjQ4LCAyMjksIDYzLCA1LCAyMTksIAorICAgIDczLCAyMzMsIDY2LCA2MywgMTY0LCAyNDIsIDM2LCA2MywgMTY0LCAyMjYsIDYxLCA2MywgNSwgMjMzLCA2OSwgMjIyLCAKKyAgICAxNDUsIDYzLCA1LCAyMTEsIDcwLCAyMjIsIDE0NSwgNjMsIDUsIDIzMywgNzAsIDIxNSwgMTg1LCAyNTEsIDE1LCA2MywgNSwgCisgICAgMjMxLCAxMDAsIDI1MSwgMTUsIDYzLCA1LCAyNDIsIDEyNiwgMjUxLCAxNiwgMjIzLCA0MywgNjMsIDUsIDI0MiwgMTI2LCAKKyAgICAyMzEsIDkwLCAyMjMsIDQzLCA2MywgNSwgMjM1LCAyMDAsIDIzMSwgMTAwLCAyNTEsIDE1LCA2MywgMjE4LCA3NCwgNSwgCisgICAgMjMzLCA3MCwgMjE1LCAxODUsIDI1MSwgMTUsIDYzLCAyMTgsIDc0LCA1LCAyMzEsIDEwMCwgMjUxLCAxNSwgNjMsIDIxOCwgCisgICAgNzQsIDUsIDIzNSwgMjAwLCAyMzEsIDEwMCwgMjUxLCAxNSwgNjMsIDIxOCwgNzQsIDEsIDE3NiwgNjMsIDIxOCwgNzQsIDEsIAorICAgIDIzNCwgMTM4LCA2MywgMjE4LCA3NCwgMSwgMjQzLCAxNDIsIDYzLCAyMTgsIDc0LCAxLCAyNDMsIDAsIDYzLCAyMTgsIDc0LCAKKyAgICAxLCAyMjksIDgyLCA2MywgMjE4LCA3NCwgMSwgMjUxLCA0MSwgNjMsIDIxOCwgNzQsIDEsIDI1MCwgMTY1LCA2MywgMjE4LCAKKyAgICA3NCwgMSwgMjM1LCAxNDcsIDYzLCAyMTgsIDc0LCAxLCAyMjcsIDE2OSwgNjMsIDIxOCwgNzQsIDEsIDIxNSwgMTU3LCA2MywgCisgICAgMjE4LCA3NCwgMSwgMjE1LCAxNDUsIDYzLCAyMTgsIDc0LCAxLCAyNDgsIDE0MywgNjMsIDIxOCwgNzQsIDEsIDI0OCwgMTI3LCAKKyAgICA2MywgMjE4LCA3NCwgMSwgMjI4LCAxMTUsIDYzLCAyMTgsIDc0LCAxLCAyMTcsIDEwNiwgNjMsIDIxOCwgNzQsIDEsIDIxNiwgCisgICAgMjA5LCA2MywgMjE4LCA3NCwgMSwgMjQ4LCAyMjksIDYzLCAyMTgsIDc0LCAxLCAyNDgsIDMzLCA2MywgMjE4LCA3NCwgMSwgCisgICAgMTk4LCA2MywgMjE4LCA3NCwgMSwgMTkxLCA2MywgMjE4LCA3NCwgMSwgMjI1LCAxNTAsIDYzLCAyMTgsIDc0LCAxLCAyNTIsIAorICAgIDE5OSwgNjMsIDIxOCwgNzQsIDEsIDI1MiwgMjYsIDYzLCAyMTgsIDc0LCAxLCAxODYsIDYzLCAyMTgsIDc0LCAxLCAyMTUsIAorICAgIDE4NCwgNjMsIDIxOCwgNzQsIDEsIDIxNSwgMTc2LCA2MywgMjE4LCA3NCwgMSwgMjQ2LCA0NiwgNjMsIDIxOCwgNzQsIDEsIAorICAgIDI0NiwgNDEsIDYzLCAyMTgsIDc0LCAxLCAyMTIsIDY1LCA2MywgMjE4LCA3NCwgMSwgMjEwLCA4MiwgNjMsIDIxOCwgNzQsIAorICAgIDEsIDIxMCwgMTE2LCA2MywgMjE4LCA3NCwgMSwgMjU1LCAxNzUsIDYzLCAyMTgsIDc0LCAxLCAxOTIsIDYzLCAyMTgsIDc0LCAKKyAgICAxLCAyMDUsIDYzLCAyMTgsIDc0LCAxLCAyMzMsIDE0MSwgNjMsIDIxOCwgNzQsIDEsIDIyMCwgMTA0LCA2MywgMjE4LCA3NCwgCisgICAgMSwgMjE4LCAyMjUsIDYzLCAyMTgsIDc0LCAxLCAyMDYsIDYzLCAyMTgsIDc0LCAxLCAxNjIsIDYzLCAyMTgsIDc0LCAxLCAKKyAgICA2MSwgNjMsIDIxOCwgNzQsIDEsIDIzMywgMjM3LCA2MywgMjE4LCA3NCwgMSwgMjQ0LCA4NSwgMjEyLCA2NSwgNjMsIDIxOCwgCisgICAgNzQsIDEsIDI0NCwgODUsIDE5MiwgNjMsIDIxOCwgNzQsIDEsIDI0NCwgODUsIDIwNSwgNjMsIDIzMywgMjI0LCAyMjIsIAorICAgIDE0MywgMjM0LCAxMzgsIDYzLCAyMzMsIDIyNCwgMjIyLCAxNDMsIDIzNCwgMTM5LCAyNTEsIDc3LCAyMzAsIDIwNywgMjUxLCAKKyAgICAxNSwgNjMsIDI1MSwgNCwgNSwgMTE0LCAyNTIsIDc4LCA2MywgMjUxLCA0LCA1LCAxOTMsIDI1MiwgNzgsIDYzLCAyNTEsIDQsIAorICAgIDUsIDI1MSwgNSwgMjE3LCAyMSwgNjMsIDI1MSwgNCwgNSwgMjIxLCAyMDksIDI1NSwgMTc0LCA2MywgMTYsIDI0NiwgOTksIAorICAgIDI1MSwgMTMzLCA2MywgMTYsIDIyMywgMTMyLCAyMjIsIDIyNSwgNjMsIDE2LCAyMjYsIDgxLCAyNDMsIDcwLCA2MywgMTYsIAorICAgIDIyMywgMTMyLCAyMjIsIDIyNiwgMjIzLCA0NSwgMjQyLCAxNTIsIDYzLCAxNiwgMjI1LCAxMTUsIDE5MSwgNjMsIDE2LCAKKyAgICAyMjgsIDY0LCAyNTEsIDEzMywgNjMsIDE2LCAyMjgsIDY0LCAyNTEsIDEzNCwgMjI3LCAxNDMsIDI1NSwgMTcxLCA2MywgMTYsIAorICAgIDIyOCwgNjQsIDI1MSwgMTM0LCAyNDIsIDEyNCwgMjU1LCAxNzEsIDYzLCAxNiwgMjI4LCA2NCwgMjUxLCAxMzQsIDI1MSwgCisgICAgNzcsIDI1NSwgMTcxLCA2MywgNSwgMjIzLCAxMzMsIDIyOSwgMjI0LCAyMjMsIDEzMywgMjQ3LCAxNjYsIDYzLCA1LCAyMjMsIAorICAgIDEzMywgMjI5LCAyMjQsIDI0MiwgMTIzLCA2MywgMTY0LCAyNTEsIDEzNywgMjIwLCA1LCAyNDIsIDIyMiwgMjMwLCAyNTMsIAorICAgIDIyMywgNDQsIDYzLCAxNjQsIDIzMCwgMTY4LCAyMTEsIDAsIDI0MiwgMjIyLCAyMzAsIDI1MywgMjIzLCA0NCwgNjMsIDE2NCwgCisgICAgMjI3LCAxNDMsIDIxNSwgMTczLCA2MywgMTY0LCA2NSwgMjUxLCAxNjAsIDIyMiwgMjE1LCAyMTEsIDAsIDIzMCwgMjUzLCAKKyAgICAyMzEsIDk4LCAxODYsIDYzLCAxNjQsIDI1MCwgNCwgMjUxLCAxNjAsIDIyMiwgMjE1LCAyMTEsIDAsIDIzMCwgMjUzLCAyMjAsIAorICAgIDExMSwgMTg2LCAyMjIsIDI1MywgMjE4LCAwLCA1MCwgMjMzLCA1MSwgMjE4LCAwLCA1MCwgMjIyLCAyNTMsIDIxOCwgMCwgNSwgCisgICAgMiwgMjQ3LCAxMjYsIDIzMywgNTEsIDIxOCwgMCwgNSwgMiwgMjQ3LCAxMjYsIDYzLCAxNjQsIDIzMywgNjEsIDIzMSwgMTAxLCAKKyAgICAyMjIsIDE0NSwgNjMsIDE2NCwgMjE1LCAyNTEsIDIzMSwgMTAxLCAyMjIsIDE0NSwgNjgsIDEsIDE3NiwgNjgsIDEsIDIzNCwgCisgICAgMTM4LCA2OCwgMSwgMjQzLCAxNDIsIDY4LCAxLCAyNDMsIDAsIDY4LCAxLCAyMjksIDgyLCA2OCwgMSwgMjUxLCA0MSwgNjgsIAorICAgIDEsIDI1MCwgMTY1LCA2OCwgMSwgMjM1LCAxNDcsIDY4LCAxLCAyMzUsIDEyMCwgNjgsIDEsIDIyNywgMTY5LCA2OCwgMSwgCisgICAgMjI4LCA4MSwgNjgsIDEsIDIxNSwgMTU3LCA2OCwgMSwgMjE1LCAxNDUsIDY4LCAxLCAyNDgsIDE0MywgNjgsIDEsIDI0OCwgCisgICAgMTI3LCA2OCwgMSwgMjI4LCAxMTUsIDY4LCAxLCAyMTcsIDEwNiwgNjgsIDEsIDIxNiwgMjA5LCA2OCwgMSwgMjQ4LCAyMjksIAorICAgIDY4LCAxLCAyNDgsIDMzLCA2OCwgMSwgMTk4LCA2OCwgMSwgMTkxLCA2OCwgMSwgMjI1LCAxNTAsIDY4LCAxLCAyNTIsIDE5OSwgCisgICAgNjgsIDEsIDI1MiwgMjYsIDY4LCAxLCAxODYsIDY4LCAxLCAxOTIsIDY4LCAxLCAyMDUsIDY4LCAxLCAyMzMsIDE0MSwgNjgsIAorICAgIDEsIDIxMiwgNjUsIDY4LCAxLCAyMDYsIDY4LCAxLCAxNjIsIDY4LCAxLCAyMzIsIDE5MCwgNjgsIDEsIDYxLCA2OCwgMSwgCisgICAgMjIwLCA4OCwgNjEsIDY4LCAxLCA3NCwgNjgsIDEsIDIzNiwgNDAsIDY4LCAxLCA2OSwgNjgsIDEsIDIxNCwgMTE4LCA2OCwgCisgICAgMSwgNzYsIDY4LCAxLCAyMzAsIDE1NiwgNzYsIDY4LCAxLCA3OCwgNjgsIDEsIDI1MywgMjAwLCA2OCwgMjUsIDUsIDIxNywgCisgICAgNjUsIDI1NSwgODIsIDY4LCAyNSwgNSwgMjU1LCA4MiwgNjgsIDI1LCA1LCA3NCwgNjgsIDI1LCA1LCAyMzYsIDQwLCA2OCwgCisgICAgMjUsIDUsIDY5LCA2OCwgMjUsIDUsIDIxNCwgMTE4LCA2OCwgMjUsIDUsIDc2LCA2OCwgMjUsIDUsIDI1NCwgMjEwLCA2OCwgCisgICAgMjUsIDUsIDIzMCwgMTU2LCAyMzYsIDQwLCA2OCwgMjUsIDUsIDIzMCwgMTU2LCA3OCwgNjgsIDI1LCA1LCAxNjAsIDQ4LCAKKyAgICA2OCwgNSwgMjU0LCA4MywgNjgsIDUsIDU5LCA1MSwgNjgsIDUsIDIxMywgMTQ3LCA2OCwgNSwgMjEzLCAxNTIsIDY4LCA1LCAKKyAgICAyNTMsIDI0MywgNjgsIDExNywgNSwgMTQ3LCAxOTIsIDY4LCAxMTcsIDUsIDE0NywgMjA1LCA2OCwgMTE3LCA1LCAxNDcsIAorICAgIDIxMiwgNjUsIDY4LCAxMTcsIDUsIDE0NywgMTYyLCA2OCwgMSwgMjQyLCAxMzksIDIwNiwgNjgsIDIxLCAyMTAsIDg2LCA2OCwgCisgICAgMjEsIDExMSwgNjgsIDIxLCAxMDUsIDY4LCAyMSwgMTU4LCA2OCwgMjEsIDE2MSwgNjgsIDIxLCAxOTAsIDY4LCAyMSwgMTk1LCAKKyAgICA2OCwgMjEsIDE5OSwgNjgsIDIxLCAxOTYsIDY4LCAyMSwgMjAxLCA2OCwgNSwgMjMyLCAxOTgsIDIyMSwgMTc0LCA2OCwgNSwgCisgICAgMjIxLCAxNzQsIDY4LCAxNiwgMjMyLCAxNTksIDY4LCAxNiwgMjQ5LCAyMjEsIDY4LCAxNiwgMjU0LCAyMjksIDY4LCAxNiwgCisgICAgMjQzLCA1NSwgNjgsIDEsIDIyMCwgMTA0LCA2OCwgMSwgMjE4LCAyMjUsIDY4LCAxLCAxNDksIDE1MywgNjgsIDEsIDE0OSwgCisgICAgMjIyLCAxODIsIDY4LCAxLCAxNDksIDE1NiwgNjgsIDEsIDE0OSwgMjMyLCAxOTEsIDY4LCAyNSwgNSwgMTQ5LCAxNTMsIDY4LCAKKyAgICAyNSwgNSwgMTQ5LCAyMjIsIDE4MiwgNjgsIDI1LCA1LCAxNDksIDE1NiwgNjgsIDI1LCA1LCAxNDksIDIzMiwgMTkxLCA2OCwgCisgICAgMSwgMjMwLCAxNTYsIDIyOSwgODIsIDY4LCAxLCAyMzAsIDE1NiwgMjM1LCAxMjAsIDY4LCAxLCAyMzAsIDE1NiwgMjUyLCAKKyAgICAxMTksIDY4LCAxLCAyMzAsIDE1NiwgMjUyLCAxMTQsIDY4LCAxMTcsIDUsIDIzMCwgMTU2LCAxNDcsIDE5OCwgNjgsIDExNywgCisgICAgNSwgMjMwLCAxNTYsIDE0NywgMTg2LCA2OCwgMTE3LCA1LCAyMzAsIDE1NiwgMTQ3LCAyMzMsIDE0MSwgNjgsIDEsIDIyMCwgCisgICAgMTEwLCAyMzQsIDIxOSwgMjIwLCAxMDQsIDY4LCAyNSwgNSwgMjIwLCAxMTAsIDIzNCwgMjE5LCAyNDUsIDYzLCA2OCwgMTM4LCAKKyAgICAxNjQsIDIyMCwgMTEwLCAyMzQsIDIxOSwgMjQxLCAyNTQsIDY4LCAxMzgsIDE2NCwgMjIwLCAxMTAsIDIzNCwgMjE5LCAyMzQsIAorICAgIDE4OSwgMjI1LCAxMjQsIDY4LCAxLCAyMTIsIDcsIDIyNCwgMTExLCAyMzQsIDIxOSwgMjE2LCAyMDksIDY4LCAxLCAyMTIsIAorICAgIDcsIDIyNCwgMTExLCAyMzQsIDIxOSwgMjI0LCAxMTcsIDY4LCAyNSwgNSwgMjEyLCA3LCAyMjQsIDExMSwgMjM0LCAyMTksIAorICAgIDI0NSwgNjMsIDY4LCAyNSwgNSwgMjEyLCA3LCAyMjQsIDExMSwgMjM0LCAyMTksIDIxNCwgMjE0LCA2OCwgNSwgMjEyLCA3LCAKKyAgICAyMjQsIDExMSwgMjM0LCAyMTksIDIxNiwgMzAsIDY4LCA1LCAyMTIsIDcsIDIyNCwgMTExLCAyMzQsIDIxOSwgMjE2LCAyOSwgCisgICAgNjgsIDUsIDIxMiwgNywgMjI0LCAxMTEsIDIzNCwgMjE5LCAyMTYsIDI4LCA2OCwgNSwgMjEyLCA3LCAyMjQsIDExMSwgMjM0LCAKKyAgICAyMTksIDIxNiwgMjcsIDY4LCA1LCAyMTIsIDcsIDIyNCwgMTExLCAyMzQsIDIxOSwgMjE2LCAyNiwgNjgsIDEsIDI0NSwgCisgICAgMjI3LCAyMjQsIDExMSwgMjM0LCAyMTksIDIyOCwgMTE1LCA2OCwgMSwgMjQ1LCAyMjcsIDIyNCwgMTExLCAyMzQsIDIxOSwgCisgICAgMjEwLCAxNzYsIDY4LCAxLCAyNDUsIDIyNywgMjI0LCAxMTEsIDIzNCwgMjE5LCAyNDIsIDIyNCwgNjgsIDI1LCA1LCAyNDMsIAorICAgIDY2LCAyMzQsIDIxOSwgNzQsIDY4LCAyNSwgNSwgMjM0LCAxOTQsIDIyNiwgMjM4LCA2OCwgMjUsIDUsIDIzNCwgMTk0LCA2OSwgCisgICAgNjgsIDI1LCA1LCAyMzQsIDE5NCwgMjQ1LCAyMTcsIDY4LCAxLCAyMjAsIDg4LCAxNzYsIDY4LCAxLCAyMjAsIDg4LCAyMzQsIAorICAgIDEzOCwgNjgsIDEsIDIyMCwgODgsIDI0MywgMTQyLCA2OCwgMSwgMjIwLCA4OCwgMjUxLCA0MSwgNjgsIDEsIDIyMCwgODgsIAorICAgIDIxMCwgMTE2LCA2OCwgMSwgMjIwLCA4OCwgMjI3LCAxNjksIDY4LCAxLCAyMjAsIDg4LCAyNDgsIDIyOSwgNjgsIDEsIDIyMCwgCisgICAgODgsIDE5OCwgNjgsIDEsIDIyMCwgODgsIDIyNSwgMTUwLCA2OCwgMSwgMjIwLCA4OCwgMjQ0LCAyMDQsIDY4LCAxLCAyMjAsIAorICAgIDg4LCAyNTIsIDE5OSwgNjgsIDEsIDIyMCwgODgsIDIxNiwgMjA5LCA2OCwgMSwgMjIwLCA4OCwgMTYyLCA2OCwgMTE3LCA1LCAKKyAgICAyMjAsIDg4LCAxNDcsIDIxMiwgNjUsIDY4LCAyNSwgNSwgMjIwLCA4OCwgMjU1LCA4MiwgNjgsIDI1LCA1LCAyMjAsIDg4LCAKKyAgICA3NiwgNjgsIDI1LCA1LCAyMjAsIDg4LCAxNjAsIDQ4LCA2OCwgMjUsIDUsIDIyMCwgODgsIDQwLCAyMTEsIDExNywgNjgsIDUsIAorICAgIDIyMCwgODgsIDIxNiwgMjksIDY4LCA1LCAyMjAsIDg4LCAyMTYsIDI4LCA2OCwgNSwgMjIwLCA4OCwgMjE2LCAyNiwgNjgsIAorICAgIDUsIDIyMCwgODgsIDIxNiwgMjUsIDY4LCA1LCAyMjAsIDg4LCAyNDksIDE2MCwgMjE2LCAyOSwgNjgsIDUsIDIyMCwgODgsIAorICAgIDI0OSwgMTYwLCAyMTYsIDI4LCA2OCwgNSwgMjIwLCA4OCwgMjQ5LCAxNjAsIDI0NSwgMTYxLCAyMTYsIDMxLCA2OCwgMSwgCisgICAgMjIyLCAxMzAsIDIyNiwgNjcsIDI0NCwgMjA0LCA2OCwgNSwgMjIyLCAxMzAsIDIyNiwgNjcsIDIxNiwgMjYsIDY4LCAyMjAsIAorICAgIDg4LCAyMSwgMjEwLCA4NiwgNjgsIDIyMCwgODgsIDIxLCAxMTEsIDY4LCAyMjAsIDg4LCAyMSwgMTA1LCA2OCwgMjIwLCA4OCwgCisgICAgMjEsIDE1OCwgNjgsIDIyMCwgODgsIDIxLCAxNjEsIDY4LCAyMjAsIDg4LCAyMSwgMTkwLCA2OCwgMjIwLCA4OCwgMjEsIAorICAgIDE5NSwgNjgsIDIyMCwgODgsIDIxLCAxOTksIDY4LCAyMjAsIDg4LCAyMSwgMTk2LCA2OCwgMjIwLCA4OCwgMjEsIDIwMSwgCisgICAgNjgsIDUsIDIzNCwgMTMyLCAyMTYsIDMwLCA2OCwgNSwgMjM0LCAxMzIsIDIxNiwgMjgsIDY4LCAyNSwgNSwgMjU0LCAxOTksIAorICAgIDYxLCA2OCwgMjUsIDUsIDI1NCwgMTk5LCAyNTQsIDIxMCwgNjgsIDE2LCAyMjAsIDg4LCAxMTEsIDY4LCAxNiwgMjIwLCA4OCwgCisgICAgMjQ1LCAzOCwgOTgsIDYsIDEsIDI1NCwgMTMxLCA5OCwgNiwgMSwgMjUyLCAxNjAsIDk4LCA2LCAxLCAyNDMsIDExMywgOTgsIAorICAgIDYsIDEsIDI0NywgMTM2LCA5OCwgNiwgMSwgMjQ1LCAxNTgsIDk4LCA2LCAxLCAyMTMsIDE2MCwgOTgsIDYsIDEsIDIxMCwgCisgICAgODksIDk4LCA2LCAxLCAyMTcsIDYxLCA5OCwgNiwgMSwgMjM2LCA2LCA5OCwgNiwgMSwgMjM0LCAyNDAsIDk4LCA2LCAxLCAKKyAgICAyMzMsIDg3LCA5OCwgNiwgMSwgMjMxLCAxOTAsIDk4LCA2LCAxLCAyMjksIDIwMCwgOTgsIDYsIDEsIDIyNiwgMjAwLCA5OCwgCisgICAgNiwgMSwgMjI2LCAyMSwgOTgsIDYsIDEsIDIxMCwgNzgsIDk4LCA2LCAxLCAyMjMsIDE3NCwgOTgsIDYsIDEsIDIyMSwgMjQ1LCAKKyAgICA5OCwgNiwgMSwgMjE3LCA1MSwgOTgsIDYsIDEsIDIxNCwgMTkwLCA5OCwgNiwgMSwgMjI1LCAxNDMsIDk4LCA2LCAxLCAyMzQsIAorICAgIDEyNywgOTgsIDYsIDEsIDI0MiwgMjQ4LCA5OCwgNiwgMSwgMjI0LCA3NiwgOTgsIDYsIDEsIDIyMCwgMjIsIDk4LCA2LCAxLCAKKyAgICAyNTAsIDEwNSwgOTgsIDYsIDEsIDI1MSwgMTUsIDk4LCA2LCAxLCAyMzUsIDEwNiwgOTgsIDYsIDEsIDI1MCwgNDgsIDk4LCAKKyAgICA2LCAxLCAyNTAsIDE1MSwgOTgsIDYsIDEsIDIxMSwgMTYzLCA5OCwgNiwgMSwgMjM1LCAxMTcsIDk4LCA2LCAxLCAyNDIsIAorICAgIDUwLCA5OCwgNiwgMSwgMjQxLCAyNDUsIDk4LCA2LCAxLCAyNDEsIDE4MiwgOTgsIDYsIDEsIDIxMiwgMjIsIDk4LCA2LCAxLCAKKyAgICAyNDIsIDExLCA5OCwgNiwgMSwgMjQxLCA3MiwgOTgsIDYsIDEsIDIxMCwgMjQ2LCA5OCwgNiwgMSwgMjU0LCAyNDEsIDk4LCAKKyAgICAxLCAyNTQsIDEzMSwgOTgsIDEsIDI1MiwgMTYwLCA5OCwgMSwgMjQzLCAxMTMsIDk4LCAxLCAyNDcsIDEzNiwgOTgsIDEsIAorICAgIDI0NSwgMTU4LCA5OCwgMSwgMjEzLCAxNjAsIDk4LCAxLCAyMTAsIDg5LCA5OCwgMSwgMjE3LCA2MSwgOTgsIDEsIDIzNiwgNiwgCisgICAgOTgsIDEsIDIzNCwgMjQwLCA5OCwgMSwgMjMzLCA4NywgOTgsIDEsIDIzMSwgMTkwLCA5OCwgMSwgMjI5LCAyMDAsIDk4LCAxLCAKKyAgICAyMjYsIDIwMCwgOTgsIDEsIDIyNiwgMjEsIDk4LCAxLCAyMTAsIDc4LCA5OCwgMSwgMjIzLCAxNzQsIDk4LCAxLCAyMjEsIAorICAgIDI0NSwgOTgsIDEsIDIxNywgNTEsIDk4LCAxLCAyMTQsIDE5MCwgOTgsIDEsIDIyNSwgMTQzLCA5OCwgMSwgMjM0LCAxMjcsIAorICAgIDk4LCAxLCAyNDIsIDI0OCwgOTgsIDEsIDIyNCwgNzYsIDk4LCAxLCAyMjAsIDIyLCA5OCwgMSwgMjUwLCAxMDUsIDk4LCAxLCAKKyAgICAyNTEsIDE1LCA5OCwgMSwgMjM1LCAxMDYsIDk4LCAxLCAyNTAsIDQ4LCA5OCwgMSwgMjUwLCAxNTEsIDk4LCAxLCAyMTEsIAorICAgIDE2MywgOTgsIDEsIDIzNSwgMTE3LCA5OCwgMSwgMjQyLCA1MCwgOTgsIDEsIDI0MSwgMjQ1LCA5OCwgMSwgMjQxLCAxODIsIAorICAgIDk4LCAxLCAyMTIsIDIyLCA5OCwgMSwgMjQyLCAxMSwgOTgsIDEsIDI0MSwgNzIsIDk4LCAxLCAyNDQsIDEyOSwgOTgsIDEsIAorICAgIDIxMCwgMjQ2LCA5OCwgMSwgMjQ1LCAxNzMsIDk4LCAxLCAyMTUsIDk0LCAyNDMsIDExMywgOTgsIDEsIDI1NCwgMjA1LCA5OCwgCisgICAgMjI2LCAxOSwgMjIwLCAxMzksIDU4LCAxLCA5OCwgMjI5LCAyMDAsIDk4LCAxLCAyNTQsIDI0MSwgOTgsIDEsIDI0MiwgMTAsIAorICAgIDUwLCA5OCwgMSwgMjMzLCAxMzMsIDUwLCAyNCwgMTAwLCAyMzQsIDY0LCAyNCwgMTAwLCAyMTgsIDIxNywgMjQsIDEwMCwgCisgICAgMjI4LCAyMzEsIDI0LCAxMDAsIDIxNiwgMTAyLCAyNCwgMTAwLCAyMTgsIDIwNiwgMjQsIDEwMCwgMjIzLCAyOSwgMjQsIAorICAgIDEwMCwgMjMwLCAyMjIsIDI0LCAxMDAsIDIyNSwgOTgsIDI0LCAxMDAsIDIxOCwgMjE0LCAyNCwgMTAwLCAyMTksIDE1MCwgCisgICAgMjQsIDEwMCwgMjE4LCAyMTEsIDI0LCAxMDAsIDIzNiwgNjMsIDI0LCAxMDAsIDI1MCwgNTQsIDI0LCAxMDAsIDIxOCwgMjIxLCAKKyAgICAyNCwgMTAwLCAyNTAsIDExNCwgMjQsIDEwMCwgMjM0LCAxMTYsIDI0LCAxMDAsIDIxNiwgMTc0LCAyNCwgMTAwLCAyMjUsIAorICAgIDEzNCwgMjQsIDEwMCwgMjQxLCAxNzksIDI0LCAxMDAsIDIyOCwgMjI3LCAyNCwgMTAwLCAyMTgsIDIxNSwgMjQsIDEwMCwgCisgICAgMjI4LCAyMjEsIDI0LCAxMDAsIDIyOCwgMjI1LCAyNCwgMTAwLCAyMTYsIDk5LCAyNCwgMTAwLCAyMjMsIDE3LCAyNCwgMTAwLCAKKyAgICAyMTgsIDIxMywgMjQsIDEwMCwgMjIzLCAyNywgMjQsIDEwMCwgMjM0LCAyMjQsIDI0LCAxMDAsIDIzMCwgMjE1LCAyNCwgCisgICAgMTAwLCAyMzQsIDIyNywgMjQsIDEwMCwgMjI1LCA5MywgMjQsIDEwMCwgMjI1LCA5MSwgMjQsIDEwMCwgMjI1LCA3OSwgMjQsIAorICAgIDEwMCwgMjI1LCA4NywgMjQsIDEwMCwgMjI1LCA4NSwgMjQsIDEwMCwgMjI1LCA4MiwgMjQsIDEwMCwgMjI1LCA4NCwgMjQsIAorICAgIDEwMCwgMjI1LCA4MSwgMjQsIDEwMCwgMjI1LCA4NiwgMjQsIDEwMCwgMjI1LCA5NiwgMjQsIDEwMCwgMjI1LCA5NywgMjQsIAorICAgIDEwMCwgMjI1LCA4MCwgMjQsIDEwMCwgMjI1LCA5MCwgMjQsIDEwMCwgMjM0LCAyMjUsIDI0LCAxMDAsIDIzNCwgMjIzLCAyNCwgCisgICAgMTAwLCAyMTksIDE0MywgMjQsIDEwMCwgMjE5LCAxNDEsIDI0LCAxMDAsIDIxOSwgMTMzLCAyNCwgMTAwLCAyMTksIDEzNiwgCisgICAgMjQsIDEwMCwgMjE5LCAxNDIsIDI0LCAxMDAsIDIxOSwgMTM4LCAyNCwgMTAwLCAyMTksIDEzNywgMjQsIDEwMCwgMjE5LCAKKyAgICAxMzUsIDI0LCAxMDAsIDIxOSwgMTQ2LCAyNCwgMTAwLCAyMTksIDE0OCwgMjQsIDEwMCwgMjE5LCAxNDksIDI0LCAxMDAsIAorICAgIDIxOSwgMTQ0LCAyNCwgMTAwLCAyMTksIDEzNCwgMjQsIDEwMCwgMjE5LCAxMzksIDI0LCAxMDAsIDIxOSwgMTQ3LCAyNCwgCisgICAgMTAwLCAyNTAsIDk4LCAyNCwgMTAwLCAyNTAsIDk2LCAyNCwgMTAwLCAyNTAsIDE3NiwgMjQsIDEwMCwgMjUwLCAxNzQsIDI0LCAKKyAgICAxMDAsIDIyNiwgMzYsIDI0LCAxMDAsIDIzNiwgNTgsIDI0LCAxMDAsIDIzNiwgNDksIDI0LCAxMDAsIDIzNiwgNTcsIDI0LCAKKyAgICAxMDAsIDIzNiwgNTQsIDI0LCAxMDAsIDIzNiwgNTIsIDI0LCAxMDAsIDIzNiwgNTYsIDI0LCAxMDAsIDIxOCwgMjE4LCAyNCwgCisgICAgMTAwLCAyMzYsIDYxLCAyNCwgMTAwLCAyMzYsIDYyLCAyNCwgMTAwLCAyMzYsIDUwLCAyNCwgMTAwLCAyMzYsIDU1LCAyNCwgCisgICAgMTAwLCAyMTEsIDI2LCAyNCwgMTAwLCAyNTAsIDUzLCAyNCwgMTAwLCAyNTAsIDk5LCAyNCwgMTAwLCAyNTAsIDk3LCAyNCwgCisgICAgMTAwLCAyNTAsIDE3NywgMjQsIDEwMCwgMjUwLCAxNzUsIDI0LCAxMDAsIDI1MCwgMTEyLCAyNCwgMTAwLCAyNTAsIDExMywgCisgICAgMjQsIDEwMCwgMjUwLCAxMDAsIDI0LCAxMDAsIDI1MCwgMTc4LCAyNCwgMTAwLCAyMjUsIDEzMiwgMjQsIDEwMCwgMjM0LCAKKyAgICAyMjYsIDI0LCAxMDAsIDIxOCwgMjE5LCAyNCwgMTAwLCAyMTEsIDMyLCAyNCwgMTAwLCAyMzQsIDU1LCAyNCwgMTAwLCAyMjgsIAorICAgIDIyMywgMjQsIDEwMCwgMjI4LCAyMjksIDI0LCAxMDAsIDIyOCwgMjI4LCAyNCwgMTAwLCAyMTYsIDk2LCAyNCwgMTAwLCAKKyAgICAyNDQsIDExMSwgMjQsIDE0MywgMjQ0LCAxMTEsIDI0LCAxNDMsIDYxLCAyNCwgMTQzLCAyNTQsIDI1MiwgMjQsIDE0MywgCisgICAgMTkyLCAyNCwgMTQzLCAyMTEsIDkyLCAyNCwgMTQzLCAyNDUsIDEyNSwgMjQsIDE0MywgNzYsIDI0LCAxNDMsIDIxMSwgMzYsIAorICAgIDI0LCAxNDMsIDIxMSwgNDcsIDI0LCAxNDMsIDc4LCAyNCwgMTQzLCAyMTIsIDY1LCAyNCwgMTQzLCAyMTIsIDYyLCAyNCwgCisgICAgMTQzLCAyMjYsIDIzOCwgMjQsIDE0MywgMjEwLCAyNDQsIDI0LCAxNDMsIDY5LCAyNCwgMTQzLCAyMTIsIDExLCAyNCwgMTQzLCAKKyAgICAyMTIsIDIyLCAyNCwgMTQzLCAyMTEsIDI1MCwgMjQsIDE0MywgMjEwLCAyMTIsIDI0LCAxNDMsIDI0NSwgNjMsIDI0LCAxNDMsIAorICAgIDIxMSwgOCwgMjQsIDE0MywgNzQsIDI0LCAxNDMsIDI1NSwgMTY2LCAyNCwgMTQzLCAyNTUsIDE2NSwgMjQsIDE0MywgMjExLCAKKyAgICAxMDYsIDI0LCAxNDMsIDIxMSwgMTA0LCAyNCwgMTQzLCAyNDUsIDEyMywgMjQsIDE0MywgMjQ1LCAxMjIsIDI0LCAxNDMsIAorICAgIDI0NSwgMTI0LCAyNCwgMTQzLCAyMTEsIDM1LCAyNCwgMTQzLCAyMTEsIDM0LCAyNCwgMTQzLCAyMjcsIDg4LCAyNCwgMTQzLCAKKyAgICAyMjcsIDg5LCAyNCwgMTQzLCAyMjcsIDgyLCAyNCwgMTQzLCAyMjcsIDg3LCAyNCwgMTQzLCAyMjcsIDg1LCAyNCwgMTQzLCAKKyAgICAyMTAsIDIzOCwgMjQsIDE0MywgMjEwLCAyMzcsIDI0LCAxNDMsIDIxMCwgMjM2LCAyNCwgMTQzLCAyMTAsIDIzOSwgMjQsIAorICAgIDE0MywgMjEwLCAyNDAsIDI0LCAxNDMsIDIxNSwgMzAsIDI0LCAxNDMsIDIxNSwgMjksIDI0LCAxNDMsIDIxNSwgMjcsIDI0LCAKKyAgICAxNDMsIDIxNSwgMjQsIDI0LCAxNDMsIDIxNSwgMjUsIDI0LCAxNDMsIDIxMCwgMjExLCAyNCwgMTQzLCAyMTAsIDIwOCwgMjQsIAorICAgIDE0MywgMjEwLCAyMDksIDI0LCAxNDMsIDIxMCwgMjAzLCAyNCwgMTQzLCAyMTAsIDIwNCwgMjQsIDE0MywgMjEwLCAyMDUsIAorICAgIDI0LCAxNDMsIDIxMCwgMjA3LCAyNCwgMTQzLCAyNDUsIDU3LCAyNCwgMTQzLCAyNDUsIDU5LCAyNCwgMTQzLCAyMTEsIDcsIAorICAgIDI0LCAxNDMsIDI0MCwgMTYwLCAyNCwgMTQzLCAyNDAsIDE1MiwgMjQsIDE0MywgMjQwLCAxNTUsIDI0LCAxNDMsIDI0MCwgCisgICAgMTUzLCAyNCwgMTQzLCAyNDAsIDE1NywgMjQsIDE0MywgMjQwLCAxNTksIDI0LCAxNDMsIDI1NCwgNDIsIDI0LCAxNDMsIAorICAgIDI1NCwgMzksIDI0LCAxNDMsIDI1NCwgMzcsIDI0LCAxNDMsIDI1NCwgMzgsIDI0LCAxNDMsIDIxOCwgMjIyLCAyNCwgMTQzLCAKKyAgICAyNTUsIDE2NywgMjQsIDE0MywgMjExLCAxMDUsIDI0LCAxNDMsIDIxMSwgMzMsIDI0LCAxNDMsIDIyNywgODQsIDI0LCAxNDMsIAorICAgIDIyNywgODMsIDI0LCA5MCwgMjM0LCA2NCwgMjQsIDkwLCAyMTgsIDIxNywgMjQsIDkwLCAyMzQsIDU3LCAyNCwgOTAsIDIyOCwgCisgICAgMjMxLCAyNCwgOTAsIDIyOCwgMjI5LCAyNCwgOTAsIDIyOCwgMjI4LCAyNCwgOTAsIDIxNiwgMTAyLCAyNCwgOTAsIDIyMywgCisgICAgMjksIDI0LCA5MCwgMjIzLCAyNCwgMjQsIDkwLCAyMjMsIDIxLCAyNCwgOTAsIDIyMywgMTQsIDI0LCA5MCwgMjIzLCA5LCAKKyAgICAyNCwgOTAsIDIyMywgNCwgMjQsIDkwLCAyMjMsIDE1LCAyNCwgOTAsIDIyMywgMjcsIDI0LCA5MCwgMjMwLCAyMjIsIDI0LCAKKyAgICA5MCwgMjI1LCA5OCwgMjQsIDkwLCAyMjUsIDg3LCAyNCwgOTAsIDIxOSwgMTUwLCAyNCwgOTAsIDIxOCwgMjExLCAyNCwgOTAsIAorICAgIDIzNiwgNjMsIDI0LCA5MCwgMjUwLCA1NCwgMjQsIDkwLCAyNTAsIDExNCwgMjQsIDkwLCAyMzQsIDExNiwgMjQsIDkwLCAKKyAgICAyMTYsIDE3NCwgMjQsIDkwLCAyMjUsIDEzNCwgMjQsIDkwLCAyNDEsIDE3OSwgMjQsIDkwLCAyMzQsIDU4LCAyNCwgOTAsIAorICAgIDIzNCwgNTYsIDI0LCA5MCwgMjI4LCAyMjcsIDI0LCA5MCwgMjI4LCAyMjEsIDI0LCA5MCwgMjI4LCAyMjMsIDI0LCA5MCwgCisgICAgMjI4LCAyMjYsIDI0LCA5MCwgMjI4LCAyMjIsIDI0LCA5MCwgMjE2LCA5OSwgMjQsIDkwLCAyMTYsIDk2LCAyNCwgOTAsIAorICAgIDIyMywgMjIsIDI0LCA5MCwgMjIzLCAxNywgMjQsIDkwLCAyMjMsIDMsIDI0LCA5MCwgMjIzLCAyLCAyNCwgOTAsIDIxOCwgCisgICAgMjEzLCAyNCwgOTAsIDIyMywgMTksIDI0LCA5MCwgMjIzLCAxOCwgMjQsIDkwLCAyMjMsIDExLCAyNCwgOTAsIDIyMywgMTMsIAorICAgIDI0LCA5MCwgMjIzLCAyNiwgMjQsIDkwLCAyMjMsIDYsIDI0LCA5MCwgMjIzLCAxNiwgMjQsIDkwLCAyMjMsIDI1LCAyNCwgCisgICAgOTAsIDIyMywgMSwgMjQsIDkwLCAyMzAsIDIxOCwgMjQsIDkwLCAyMzAsIDIxMywgMjQsIDkwLCAyMzAsIDIxNSwgMjQsIDkwLCAKKyAgICAyMzAsIDIxMiwgMjQsIDkwLCAyMzAsIDIxMCwgMjQsIDkwLCAyMzAsIDIxNiwgMjQsIDkwLCAyMzAsIDIyMSwgMjQsIDkwLCAKKyAgICAyMzAsIDIxOSwgMjQsIDkwLCAyMzQsIDIyNywgMjQsIDkwLCAyMjUsIDg5LCAyNCwgOTAsIDIyNSwgOTAsIDI0LCA5MCwgCisgICAgMjI1LCA5NSwgMjQsIDkwLCAyMzQsIDIyNSwgMjQsIDkwLCAyMTksIDE0MywgMjQsIDkwLCAyMTksIDEzMywgMjQsIDkwLCAKKyAgICAyMTksIDEzNiwgMjQsIDkwLCAyMTksIDEzOCwgMjQsIDkwLCAyMjYsIDM2LCAyNCwgOTAsIDIzNiwgNTgsIDI0LCA5MCwgCisgICAgMjM2LCA1MSwgMjQsIDkwLCAyMTgsIDIxOCwgMjQsIDkwLCAyMzYsIDU5LCAyNCwgOTAsIDIxMSwgMjYsIDI0LCA5MCwgMjExLCAKKyAgICAyMiwgMjQsIDkwLCAyMTEsIDIzLCAyNCwgOTAsIDIyNSwgMTMyLCAyNCwgOTAsIDIzNCwgMjI2LCAyNCwgOTAsIDI0MSwgCisgICAgMTc3LCAyNCwgOTAsIDI0MSwgMTc1LCAyNCwgOTAsIDI0MSwgMTc4LCAyNCwgOTAsIDI0MSwgMTc2LCAyNCwgOTAsIDIxMSwgCisgICAgMzIsIDI0LCA5MCwgMjM0LCA2MCwgMjQsIDkwLCAyMzQsIDU5LCAyNCwgOTAsIDIzNCwgNjMsIDI0LCA5MCwgMjM0LCA2MSwgCisgICAgMjQsIDkwLCAyMzQsIDYyLCAyNCwgOTAsIDIxOCwgMjE1LCAyOSwgMywgMTYyLCAyOSwgMywgMjQwLCAyMjksIDI5LCAzLCAKKyAgICAyNDEsIDE4NywgMjksIDMsIDI0MiwgNTMsIDI5LCAzLCAyNDEsIDIyNywgMjksIDMsIDI0MSwgMjQ1LCAyOSwgMywgMjQxLCAKKyAgICA3NSwgMjksIDMsIDI0MSwgNzQsIDI5LCAzLCAyMzMsIDE0MSwgMjksIDMsIDIzMiwgMTAzLCAyOSwgMywgMjMyLCAyNDcsIAorICAgIDI5LCAzLCAyMzMsIDE0MCwgMjksIDMsIDIzMywgNTYsIDI5LCAzLCAyMzMsIDY0LCAyOSwgMywgMjMyLCAxNjIsIDI5LCAzLCAKKyAgICAyMzIsIDc1LCAyOSwgMywgMjQxLCAxOTYsIDI5LCAzLCAyNDEsIDE5MCwgMjksIDMsIDI0MSwgMTkyLCAyOSwgMywgMjQxLCAKKyAgICAxOTUsIDI5LCAzLCAyNDEsIDE5MywgMjksIDMsIDI0MSwgMTk0LCAyOSwgMywgMjQxLCAxOTEsIDI5LCAzLCAyNDEsIDE4OSwgCisgICAgMjksIDMsIDE4NiwgMjksIDMsIDIzMCwgMTA3LCAyOSwgMywgMjMwLCAyMzUsIDI5LCAzLCAyMzEsIDI0MiwgMjksIDMsIAorICAgIDIzMSwgODUsIDI5LCAzLCAyMzEsIDk2LCAyOSwgMywgMjMwLCAxNjYsIDI5LCAzLCAyMzAsIDQ3LCAyOSwgMywgMjE3LCAKKyAgICAxNjQsIDI5LCAzLCAyMTcsIDE1OCwgMjksIDMsIDIxNywgMTYwLCAyOSwgMywgMjE3LCAxNjMsIDI5LCAzLCAyMTcsIDE2MSwgCisgICAgMjksIDMsIDIxNywgMTYyLCAyOSwgMywgMjE3LCAxNTksIDI5LCAzLCAyMTcsIDE1NywgMjksIDMsIDIwNSwgMjksIDMsIAorICAgIDIyMiwgMTQyLCAyOSwgMywgMjIzLCAzOCwgMjksIDMsIDIyMywgMTg3LCAyOSwgMywgMjIzLCAxMTEsIDI5LCAzLCAyMjMsIAorICAgIDEzMSwgMjksIDMsIDIyMiwgMjEzLCAyOSwgMywgMjIyLCAxMTEsIDI5LCAzLCAyMDYsIDI5LCAzLCAyMTgsIDg0LCAyOSwgMywgCisgICAgMjE5LCAxOTMsIDI5LCAzLCAyMjIsIDMzLCAyOSwgMywgMjIxLCAxNzIsIDI5LCAzLCAyMjEsIDE4MywgMjksIDMsIDIxOSwgCisgICAgNjAsIDI5LCAzLCAyMTcsIDI1NCwgMjksIDMsIDIyMCwgMTA0LCAyOSwgMywgMjE5LCAyMjcsIDI5LCAzLCAyMjAsIDM0LCAKKyAgICAyOSwgMywgMjIwLCAxMDAsIDI5LCAzLCAyMjAsIDYzLCAyOSwgMywgMjIwLCA2NSwgMjksIDMsIDIyMCwgOSwgMjksIDMsIAorICAgIDIxOSwgMjEwLCAyOSwgMywgMjI0LCA5MSwgMjksIDMsIDIyNCwgMzMsIDI5LCAzLCAyMjQsIDU2LCAyOSwgMywgMjI0LCA5MCwgCisgICAgMjksIDMsIDIyNCwgNzEsIDI5LCAzLCAyMjQsIDcyLCAyOSwgMywgMjI0LCA0NSwgMjksIDMsIDIyNCwgNDQsIDI5LCAzLCAKKyAgICAyMjMsIDI0NSwgMjksIDMsIDIyMywgMjQxLCAyOSwgMywgMjIzLCAyNDQsIDI5LCAzLCAyMjMsIDI0MiwgMjksIDMsIDIyMywgCisgICAgMjQzLCAyOSwgMywgMjI0LCA2OCwgMjksIDMsIDIyNCwgNjIsIDI5LCAzLCAyMjQsIDY0LCAyOSwgMywgMjI0LCA2NywgMjksIAorICAgIDMsIDIyNCwgNjUsIDI5LCAzLCAyMjQsIDY2LCAyOSwgMywgMjI0LCA2MywgMjksIDMsIDIyNCwgNjEsIDI5LCAzLCAyMjQsIAorICAgIDU3LCAyOSwgMywgMjI0LCA2MCwgMjksIDMsIDIyNCwgNTgsIDI5LCAzLCAyMjQsIDU5LCAyOSwgMywgMjUyLCAxOTksIDI5LCAKKyAgICAzLCAyNTEsIDEzMywgMjksIDMsIDI1MiwgMTQsIDI5LCAzLCAyNTIsIDE5NywgMjksIDMsIDI1MiwgNzQsIDI5LCAzLCAyNTIsIAorICAgIDgzLCAyOSwgMywgMjUxLCAyMTMsIDI5LCAzLCAyNTEsIDkxLCAyOSwgMywgMjE0LCAyNywgMjksIDMsIDIxMiwgMTE2LCAyOSwgCisgICAgMywgMjEzLCAxNzYsIDI5LCAzLCAyMTQsIDI2LCAyOSwgMywgMjEzLCAyNTAsIDI5LCAzLCAyMTMsIDI1NSwgMjksIDMsIAorICAgIDIxMywgMTM4LCAyOSwgMywgMjEyLCAxMDcsIDI5LCAzLCAyMTcsIDEwNiwgMjksIDMsIDIxNSwgMTE5LCAyOSwgMywgMjE2LCAKKyAgICAxMTgsIDI5LCAzLCAyMTcsIDEwMiwgMjksIDMsIDIxNywgMTIsIDI5LCAzLCAyMTcsIDIzLCAyOSwgMywgMTEyLCAyOSwgMywgCisgICAgMjE1LCA4MCwgMjksIDMsIDI1MSwgNDEsIDI5LCAzLCAyNDksIDEyMCwgMjksIDMsIDI1MCwgNTksIDI5LCAzLCAyNTEsIDQwLCAKKyAgICAyOSwgMywgMjUwLCAxOTAsIDI5LCAzLCAyNTAsIDE5OCwgMjksIDMsIDI0OSwgMjQ2LCAyOSwgMywgMjQ5LCA4OSwgMjksIDMsIAorICAgIDIxMSwgMTY1LCAyOSwgMywgMjExLCAxNDEsIDI5LCAzLCAyMTEsIDE1NywgMjksIDMsIDIxMSwgMTY0LCAyOSwgMywgMjExLCAKKyAgICAxNjEsIDI5LCAzLCAyMTEsIDE2MiwgMjksIDMsIDIxMSwgMTQ4LCAyOSwgMywgMjExLCAxNDcsIDI5LCAzLCAyMTEsIDEzNiwgCisgICAgMjksIDMsIDIxMSwgMTMyLCAyOSwgMywgMjExLCAxMzUsIDI5LCAzLCAyMTEsIDEzMywgMjksIDMsIDIxMSwgMTM0LCAyOSwgCisgICAgMywgMTk4LCAyOSwgMywgMjI3LCAyNDIsIDI5LCAzLCAyMjgsIDIzOCwgMjksIDMsIDIyOSwgMjMwLCAyOSwgMywgMjI5LCAKKyAgICAxMDgsIDI5LCAzLCAyMjksIDExMiwgMjksIDMsIDIyOCwgNzksIDI5LCAzLCAyMjcsIDE3OCwgMjksIDMsIDIyNywgMTY5LCAKKyAgICAyOSwgMywgMjI3LCAxMzIsIDI5LCAzLCAyMjcsIDE1MiwgMjksIDMsIDIyNywgMTY4LCAyOSwgMywgMjI3LCAxNTksIDI5LCAKKyAgICAzLCAyMjcsIDE2MCwgMjksIDMsIDIyNywgMTM4LCAyOSwgMywgMjI3LCAxMjMsIDI5LCAzLCAyNDIsIDE4NywgNjEsIDI5LCAKKyAgICAzLCAyNDIsIDE4NywgNjksIDI5LCAzLCAyNDIsIDE4NywgNzQsIDI5LCAzLCAyNDIsIDE4NywgMjU1LCA4MiwgMjksIDMsIAorICAgIDI0MiwgMTg3LCAyNDUsIDIxNywgMjksIDMsIDI0MiwgMTg3LCA3NiwgMjksIDMsIDI0MiwgMTg3LCA3OCwgMjksIDMsIDI0MiwgCisgICAgMTg3LCAyMTIsIDY1LCAyOSwgMywgMTc2LCAyOSwgMywgMjMzLCAyMjMsIDI5LCAzLCAyMzQsIDk4LCAyOSwgMywgMjM1LCAKKyAgICAxNiwgMjksIDMsIDIzNCwgMTg3LCAyOSwgMywgMjM0LCAxODgsIDI5LCAzLCAyMzQsIDM0LCAyOSwgMywgMjM0LCAzMywgMjksIAorICAgIDMsIDIzMywgMTg4LCAyOSwgMywgMjMzLCAxODIsIDI5LCAzLCAyMzMsIDE4NywgMjksIDMsIDIzMywgMTgzLCAyOSwgMywgCisgICAgMjMzLCAxODQsIDI5LCAzLCAyMzMsIDE3NywgMjksIDMsIDIzMywgMTcxLCAyOSwgMywgMjMzLCAxNzMsIDI5LCAzLCAyMzMsIAorICAgIDE3NiwgMjksIDMsIDIzMywgMTc0LCAyOSwgMywgMjMzLCAxNzUsIDI5LCAzLCAyMzMsIDE3MiwgMjksIDMsIDIzMywgMTcwLCAKKyAgICAyOSwgMywgMjMzLCAxNjYsIDI5LCAzLCAyMzMsIDE2OSwgMjksIDMsIDIzMywgMTY3LCAyOSwgMywgMjMzLCAxNjgsIDI5LCAKKyAgICAzLCAyMTIsIDY1LCAyOSwgMywgMjExLCAxOTUsIDI5LCAzLCAyMTEsIDI1MCwgMjksIDMsIDIxMiwgNjQsIDI5LCAzLCAyMTIsIAorICAgIDE3LCAyOSwgMywgMjEyLCAyMiwgMjksIDMsIDIxMSwgMjI3LCAyOSwgMywgMjExLCAyMjYsIDI5LCAzLCAyMjUsIDE0MiwgCisgICAgNjEsIDI5LCAzLCAyMjUsIDE0MiwgNjksIDI5LCAzLCAyMjUsIDE0MiwgNzQsIDI5LCAzLCAyMjUsIDE0MiwgMjU1LCA4MiwgCisgICAgMjksIDMsIDIyNSwgMTQyLCAyNDUsIDIxNywgMjksIDMsIDIyNSwgMTQyLCA3NiwgMjksIDMsIDIyNSwgMTQyLCA3OCwgMjksIAorICAgIDMsIDIxMCwgMTE2LCAyOSwgMywgMjEwLCAxMywgMjksIDMsIDIxMCwgNDQsIDI5LCAzLCAyMTAsIDExNSwgMjksIDMsIDIxMCwgCisgICAgOTIsIDI5LCAzLCAyMTAsIDk0LCAyOSwgMywgMjEwLCAyMywgMjksIDMsIDIxMCwgMCwgMjksIDMsIDIxMCwgODIsIDI5LCAzLCAKKyAgICAyMTAsIDYyLCAyOSwgMywgMjEwLCA2OSwgMjksIDMsIDIxMCwgODEsIDI5LCAzLCAyMTAsIDczLCAyOSwgMywgMjEwLCA3NCwgCisgICAgMjksIDMsIDIxMCwgNjcsIDI5LCAzLCAyMTAsIDUzLCAyOSwgMywgMTkyLCAyOSwgMywgMjEwLCAyMTIsIDI5LCAzLCAyMTEsIAorICAgIDgsIDI5LCAzLCAyMTEsIDEwMywgMjksIDMsIDIxMSwgNDQsIDI5LCAzLCAyMTEsIDQ3LCAyOSwgMywgMjEwLCAyNDQsIDI5LCAKKyAgICAzLCAyMTAsIDIzNSwgMjksIDMsIDI0OCwgMjI5LCAyOSwgMywgMjQ2LCA4NiwgMjksIDMsIDI0OCwgMTEsIDI5LCAzLCAyNDgsIAorICAgIDIyOCwgMjksIDMsIDI0OCwgODUsIDI5LCAzLCAyNDgsIDk4LCAyOSwgMywgMjQ3LCAxNTMsIDI5LCAzLCAyNDYsIDU1LCAyOSwgCisgICAgMywgMjQ4LCAxNDMsIDI5LCAzLCAyNDgsIDEwOCwgMjksIDMsIDI0OCwgMTIwLCAyOSwgMywgMjQ4LCAxNDIsIDI5LCAzLCAKKyAgICAyNDgsIDEzMCwgMjksIDMsIDI0OCwgMTMxLCAyOSwgMywgMjQ4LCAxMTMsIDI5LCAzLCAyNDgsIDk5LCAyOSwgMywgMjM1LCAKKyAgICAxNDcsIDI5LCAzLCAyMzUsIDU3LCAyOSwgMywgMjM1LCAxMTQsIDI5LCAzLCAyMzUsIDE0NiwgMjksIDMsIDIzNSwgMTMwLCAKKyAgICAyOSwgMywgMjM1LCAxMzIsIDI5LCAzLCAyMzUsIDc0LCAyOSwgMywgMjM1LCAzNywgMjksIDMsIDI0MywgMTQyLCAyOSwgMywgCisgICAgMjQyLCAxMjAsIDI5LCAzLCAyNDIsIDIyMSwgMjksIDMsIDI0MywgMTM5LCAyOSwgMywgMjQzLCA2MiwgMjksIDMsIDI0MywgCisgICAgNjksIDI5LCAzLCAyNDIsIDE4MSwgMjksIDMsIDI0MiwgMTgwLCAyOSwgMywgMjQyLCA4NSwgMjksIDMsIDI0MiwgODEsIDI5LCAKKyAgICAzLCAyNDIsIDg0LCAyOSwgMywgMjQyLCA4MiwgMjksIDMsIDI0MiwgODMsIDI5LCAzLCAyNDMsIDM2LCAyOSwgMywgMjQzLCAKKyAgICAxNiwgMjksIDMsIDI0MywgMjYsIDI5LCAzLCAyNDMsIDM1LCAyOSwgMywgMjQzLCAzMCwgMjksIDMsIDI0MywgMzEsIDI5LCAKKyAgICAzLCAyNDMsIDIwLCAyOSwgMywgMjQzLCA1LCAyOSwgMywgMjE2LCAyMDksIDI5LCAzLCAyMTYsIDEzNywgMjksIDMsIDIxNiwgCisgICAgMTc2LCAyOSwgMywgMjE2LCAyMDgsIDI5LCAzLCAyMTYsIDE5NSwgMjksIDMsIDIxNiwgMTk2LCAyOSwgMywgMjE2LCAxNTcsIAorICAgIDI5LCAzLCAyMTYsIDEyOSwgMjksIDMsIDI1MCwgMTY1LCAyOSwgMywgMjUwLCA3NywgMjksIDMsIDI1MCwgMTE4LCAyOSwgMywgCisgICAgMjUwLCAxNjQsIDI5LCAzLCAyNTAsIDEzNiwgMjksIDMsIDI1MCwgMTM5LCAyOSwgMywgMjUwLCA5NCwgMjksIDMsIDI1MCwgCisgICAgNjYsIDI5LCAzLCAyMjUsIDE1MCwgMjksIDMsIDIyNSwgMTE3LCAyOSwgMywgMjI1LCAxMzYsIDI5LCAzLCAyMjUsIDE0OSwgCisgICAgMjksIDMsIDIyNSwgMTM4LCAyOSwgMywgMjI1LCAxMzksIDI5LCAzLCAyMjUsIDEyNCwgMjksIDMsIDIyNSwgMTEzLCAyOSwgCisgICAgMywgMjE1LCAxODQsIDI5LCAzLCAyMTUsIDE2NCwgMjksIDMsIDIxNSwgMTY4LCAyOSwgMywgMjE1LCAxODMsIDI5LCAzLCAKKyAgICAyMTUsIDE3OCwgMjksIDMsIDIxNSwgMTc5LCAyOSwgMywgMjE1LCAxNjcsIDI5LCAzLCAyMTUsIDE2MiwgMjksIDMsIDIxNSwgCisgICAgMzksIDI5LCAzLCAyMTUsIDMxLCAyOSwgMywgMjE1LCAzNSwgMjksIDMsIDIxNSwgMzgsIDI5LCAzLCAyMTUsIDM2LCAyOSwgCisgICAgMywgMjE1LCAzNywgMjksIDMsIDIxNSwgMzMsIDI5LCAzLCAyMTUsIDMyLCAyOSwgMywgMjQ0LCAyMDQsIDI5LCAzLCAyNDMsIAorICAgIDI0MSwgMjksIDMsIDI0NCwgMTI5LCAyOSwgMywgMjQ0LCAyMDMsIDI5LCAzLCAyNDQsIDE1NSwgMjksIDMsIDI0NCwgMTYyLCAKKyAgICAyOSwgMywgMjQ0LCA1MSwgMjksIDMsIDI0MywgMjIwLCAyOSwgMywgMTkxLCAyOSwgMywgMjI0LCAxNTMsIDI5LCAzLCAyMjUsIAorICAgIDExMSwgMjksIDMsIDIyNiwgOTMsIDI5LCAzLCAyMjUsIDIxNCwgMjksIDMsIDIyNSwgMjI0LCAyOSwgMywgMjI1LCAxOSwgCisgICAgMjksIDMsIDIyNCwgMTE3LCAyOSwgMywgMjIyLCAxMDEsIDI5LCAzLCAyMzAsIDM2LCAyOSwgMywgMjQzLCAyMTQsIDI5LCAKKyAgICAzOCwgMjQzLCA2MCwgMjIsIDI1LCAyMzMsIDI5LCA3OSwgMjksIDM4LCAyNSwgMjMzLCAyOSwgNzksIDI5LCAzOCwgMjQzLCAKKyAgICA2MCwgNzksIDI5LCAyMjEsIDE3NSwgNzksIDI5LCAyMTEsIDIwOCwgMjksIDI0MywgMjM2LCAyMTgsIDEzMSwgMjksIDI0OSwgCisgICAgMjI3LCAyOSwgMjIwLCAxNTIsIDI5LCAyNDksIDIzNCwgMjksIDIyNCwgMjAyLCAyNDksIDIzNCwgMjksIDIyNCwgMTYsIDc5LCAKKyAgICAyOSwgMjI2LCAxOSwgMjIwLCAxMzksIDI5LCAyMSwgMTExLCAyOSwgMjEsIDEwNSwgMjksIDIxLCAxNTgsIDI5LCAyMSwgCisgICAgMTYxLCAyOSwgMjEsIDE5MCwgMjksIDIxLCAxOTUsIDI5LCAyMSwgMTk5LCAyOSwgMjEsIDE5NiwgMjksIDIxLCAyMDEsIDI5LCAKKyAgICA1NCwgMjE2LCAyNDgsIDI5LCA1NCwgMjE1LCA3MywgMjksIDU0LCAyMTYsIDE2MywgMjksIDU0LCAyNDQsIDIzLCAyOSwgNTQsIAorICAgIDI0NCwgMTIyLCAyOSwgNTQsIDIxOSwgMTEzLCAyOSwgNTQsIDIyMCwgMTE4LCAyOSwgNTQsIDI0NSwgMTkyLCAyOSwgNTQsIAorICAgIDIyOCwgMjAwLCAyOSwgNTQsIDI0MCwgMjE3LCAyOSwgNTQsIDIxNiwgMjQ5LCAyMTYsIDE0OCwgMjksIDMsIDIyMSwgMTc5LCAKKyAgICAyMzAsIDQ3LCAyOSwgMywgMjMwLCA0MywgMjksIDMsIDIzMCwgNDQsIDI5LCAzLCAyMzAsIDQ1LCAyOSwgMywgMjIxLCAxNzksIAorICAgIDI1MSwgOTEsIDI5LCAzLCAyNTEsIDg4LCAyOSwgMywgMjUxLCA4OSwgMjksIDMsIDI1MSwgOTAsIDI5LCAzLCAyMjEsIDE3OSwgCisgICAgMjQzLCAyMjAsIDI5LCAzLCAyNDMsIDIxNiwgMjksIDMsIDI0MywgMjE3LCAyOSwgMywgMjQzLCAyMTgsIDI5LCAzLCAyMjEsIAorICAgIDE3OSwgMjI0LCAxMTcsIDI5LCAzLCAyMjQsIDExMywgMjksIDMsIDIyNCwgMTE0LCAyOSwgMywgMjI0LCAxMTUsIDI5LCAKKyAgICAyMTYsIDMyLCAxNjQsIDIxMCwgMjQ3LCAyOSwgMjE2LCAzMiwgMTY0LCAyNDgsIDQ5LCAyOSwgMjE2LCAzMiwgMTY0LCAyMjIsIAorICAgIDI0MSwgMjksIDIxNiwgMzIsIDE2NCwgMjE5LCAyNTMsIDIyMiwgMjQxLCAyOSwgMjE2LCAzMiwgMTY0LCAyNDcsIDI0MywgCisgICAgMjksIDIxNiwgMzIsIDE2NCwgMjM0LCAxNzAsIDI5LCAyMTYsIDMyLCAxNjQsIDI1MCwgMTAyLCAyOSwgMjE2LCAzMiwgMTY0LCAKKyAgICAyNDEsIDE4NCwgMjksIDIxNiwgMzIsIDE2NCwgMjQ4LCA0OCwgMjksIDIxNiwgMzIsIDE2NCwgMjMzLCAyMDAsIDE2OSwgMSwgCisgICAgNjEsIDE2OSwgMSwgNzYsIDE2OSwgMSwgNzQsIDE2OSwgMSwgNzgsIDE2OSwgMSwgNjksIDE2OSwgMSwgMjE0LCAxMDUsIAorICAgIDE2OSwgMSwgMjQzLCAxNDIsIDE2OSwgMSwgMTc2LCAxNjksIDEsIDI0MywgNjksIDE2OSwgMSwgMjQyLCAyMjEsIDE2OSwgMSwgCisgICAgMjQyLCAxODEsIDE2OSwgMSwgMjQyLCAxMjAsIDE2OSwgMSwgMjQyLCA4NiwgMTY5LCAxLCAxNjIsIDE2OSwgMSwgMjQxLCAKKyAgICAyNDUsIDE2OSwgMSwgMjQxLCAxODcsIDE2OSwgMSwgMjQxLCA3NSwgMTY5LCAxLCAyNDAsIDIyOSwgMTY5LCAxLCAyNDAsIAorICAgIDIwOCwgMTY5LCAxLCAyMzMsIDE0MSwgMTY5LCAxLCAyMzMsIDY0LCAxNjksIDEsIDIzMiwgMjQ3LCAxNjksIDEsIDIzMiwgCisgICAgMTYyLCAxNjksIDEsIDIzMiwgMTAzLCAxNjksIDEsIDIzMiwgNzYsIDE2OSwgMSwgMTg2LCAxNjksIDEsIDIzMSwgOTYsIAorICAgIDE2OSwgMSwgMjMwLCAyMzUsIDE2OSwgMSwgMjMwLCAxNjYsIDE2OSwgMSwgMjMwLCAxMDcsIDE2OSwgMSwgMTk4LCAxNjksIAorICAgIDEsIDI0MSwgOTcsIDE2OSwgMSwgMjI5LCAyMTgsIDE2OSwgMSwgMjI5LCAxMTIsIDE2OSwgMSwgMjI4LCAyMzgsIDE2OSwgMSwgCisgICAgMjI4LCA3OSwgMTY5LCAxLCAyMjcsIDI0MiwgMTY5LCAxLCAyMjcsIDE4MCwgMTY5LCAxLCAyMjQsIDMyLCAxNjksIDEsIAorICAgIDIyNCwgMTksIDE2OSwgMSwgMjI0LCAxMiwgMTY5LCAxLCAyMjQsIDQsIDE2OSwgMSwgMjIzLCAyNDksIDE2OSwgMSwgMjIzLCAKKyAgICAyNDcsIDE2OSwgMSwgMjA2LCAxNjksIDEsIDIyMiwgOTMsIDE2OSwgMSwgMjIxLCAxODMsIDE2OSwgMSwgMjE5LCAxOTMsIAorICAgIDE2OSwgMSwgMjE5LCA2MCwgMTY5LCAxLCAyMTgsIDg0LCAxNjksIDEsIDIxOCwgMywgMTY5LCAxLCAyNDgsIDIyOSwgMTY5LCAKKyAgICAxLCAyMTcsIDEwNiwgMTY5LCAxLCAyNDgsIDk4LCAxNjksIDEsIDIxNywgMjMsIDE2OSwgMSwgMjQ4LCAxMSwgMTY5LCAxLCAKKyAgICAyMTYsIDExOCwgMTY5LCAxLCAyNDcsIDE1MywgMTY5LCAxLCAyNDYsIDg2LCAxNjksIDEsIDI0NiwgNTgsIDE2OSwgMSwgCisgICAgMjQ3LCAxNjQsIDE2OSwgMSwgMjE2LCA2MCwgMTY5LCAxLCAyMTYsIDU5LCAxNjksIDEsIDIxNiwgNDgsIDE2OSwgMSwgMjE2LCAKKyAgICA0NywgMTY5LCAxLCAyMTYsIDQ2LCAxNjksIDEsIDIxNiwgNDUsIDE2OSwgMSwgMjE1LCAxODQsIDE2OSwgMSwgMjE1LCAxNzksIAorICAgIDE2OSwgMSwgMjE1LCAxNjgsIDE2OSwgMSwgMjE1LCAxNjcsIDE2OSwgMSwgMjE1LCAxNjQsIDE2OSwgMSwgMjE1LCAxNjMsIAorICAgIDE2OSwgMSwgMjEyLCA2NSwgMTY5LCAxLCAyMTIsIDIyLCAxNjksIDEsIDIxMSwgMjUwLCAxNjksIDEsIDIxMSwgMjI3LCAKKyAgICAxNjksIDEsIDIxMSwgMTk1LCAxNjksIDEsIDIxMSwgMTgzLCAxNjksIDEsIDE5MiwgMTY5LCAxLCAyMTEsIDQ3LCAxNjksIDEsIAorICAgIDIxMSwgOCwgMTY5LCAxLCAyMTAsIDI0NCwgMTY5LCAxLCAyMTAsIDIxMiwgMTY5LCAxLCAyMTAsIDE3NywgMTgsIDE5LCAKKyAgICAyNDAsIDE3NSwgMTgsIDE5LCA3NiwgMTgsIDE5LCAyNTUsIDQ2LCAxOCwgMTksIDc0LCAxOCwgMTksIDIzNiwgNDAsIDE4LCAKKyAgICAxOSwgNzgsIDE4LCAxOSwgMjI2LCAxODcsIDE4LCAxOSwgMjExLCAxMTYsIDIyNiwgMTg3LCAxOCwgMTksIDczLCAyNDUsIAorICAgIDIxNywgMTgsIDE5LCA3MywgNzQsIDE4LCAxOSwgNjEsIDE4LCAxOSwgMjU1LCA4MiwgMTgsIDE5LCAyMTIsIDIyLCAxOCwgCisgICAgMTksIDE1OSwgMjEyLCAyMiwgMTgsIDE5LCAyMTEsIDI1MCwgMTgsIDE5LCAxNTksIDIxMSwgMjUwLCAxOCwgMTksIDIxMSwgCisgICAgMjQyLCAxOCwgMTksIDE1OSwgMjExLCAyNDIsIDE4LCAxOSwgMjExLCAyMjcsIDE4LCAxOSwgMTU5LCAyMTEsIDIyNywgMTgsIAorICAgIDE5LCAyMTEsIDIxNSwgMTgsIDE5LCAxNTksIDIxMSwgMjE1LCAxOCwgMTksIDIyOSwgMTk1LCAyMTEsIDIxNSwgMTgsIDE5LCAKKyAgICAyMTIsIDY1LCAxOCwgMTksIDE1OSwgMjEyLCA2NSwgMTgsIDE5LCAyMTIsIDY0LCAxOCwgMTksIDE1OSwgMjEyLCA2NCwgMTgsIAorICAgIDE5LCAyMjksIDE5NSwgMjEyLCA2NCwgMTgsIDE5LCAyNTQsIDIxMCwgMTgsIDE5LCAyMTEsIDExNiwgMjEyLCA5OCwgMTgsIAorICAgIDE5LCAyNDIsIDE4NywgMjE4LCAxMzEsIDE4LCAxOSwgNDAsIDE0MiwgMTgsIDE5LCA0MCwgMjQyLCAxNDMsIDE4LCAxOSwgCisgICAgNDAsIDI1MSwgMTgzLCAxNjMsIDIyMiwgMjM2LCAxOCwgMTksIDQwLCAyMTYsIDE1LCAxNjMsIDIyMiwgMjM2LCAxOCwgMTksIAorICAgIDQwLCA0NCwgMTYzLCAyMjIsIDIzNiwgMTgsIDE5LCA0MCwgMjIyLCAyMzYsIDE4LCAxOSwgNDAsIDUyLCAxNDIsIDE4LCAxOSwgCisgICAgNDAsIDUyLCAyMTksIDI1MywgNjcsIDIxOCwgOTIsIDE4LCAxOSwgNDAsIDIzMCwgMjI5LCAyNDcsIDEyOCwgMTgsIDE5LCAKKyAgICA0MCwgMjE5LCAyNTMsIDIwMywgOTEsIDE4LCAxOSwgNDAsIDIyNSwgMjUsIDE4LCAxOSwgNDAsIDEyNCwgMjE3LCA4OCwgMTgsIAorICAgIDE5LCAyNDUsIDE1OCwgMTgsIDE5LCAyMzYsIDYsIDE4LCAxOSwgMjI2LCAyMDAsIDE4LCAxOSwgMjU0LCAxMzEsIDE4LCAxOSwgCisgICAgMjI1LCAyMjQsIDE4LCAxOSwgMjI2LCA5MSwgMTgsIDE5LCAyMjUsIDExMSwgMTgsIDE5LCAyMjUsIDc0LCAxOCwgMTksIAorICAgIDIyNSwgMTksIDE4LCAxOSwgMjI0LCAyNTIsIDE4LCAxOSwgMjExLCAxMTYsIDIyNCwgMjUyLCAxOCwgMTksIDczLCAyNDEsIAorICAgIDIyNywgMTgsIDE5LCA3MywgMjQxLCAxODcsIDE4LCAxOSwgMTkxLCAxOCwgMTksIDIyNiwgOTMsIDE4LCAxOSwgMjI0LCAKKyAgICAxMTUsIDE4LCAxOSwgMTU5LCAyMjQsIDExNSwgMTgsIDE5LCAyMjQsIDExMywgMTgsIDE5LCAxNTksIDIyNCwgMTEzLCAxOCwgCisgICAgMTksIDIyNCwgMTEyLCAxOCwgMTksIDE1OSwgMjI0LCAxMTIsIDE4LCAxOSwgMjI0LCAxMTAsIDE4LCAxOSwgMTU5LCAyMjQsIAorICAgIDExMCwgMTgsIDE5LCAyMjQsIDEwOSwgMTgsIDE5LCAxNTksIDIyNCwgMTA5LCAxOCwgMTksIDIyNCwgMTE3LCAxOCwgMTksIAorICAgIDE1OSwgMjI0LCAxMTcsIDE4LCAxOSwgMjI0LCAxMTYsIDE4LCAxOSwgMTU5LCAyMjQsIDExNiwgMTgsIDE5LCAyMTEsIDExNiwgCisgICAgMjI0LCAxMTYsIDE4LCAxOSwgMjI2LCAxMDksIDE4LCAxOSwgMTU5LCAyMjYsIDEwOSwgMTgsIDE5LCA3MywgMjQyLCA2NywgCisgICAgMTgsIDE5LCAyMTcsIDIzLCAxOCwgMTksIDIxNywgMTAwLCAxOCwgMTksIDIxNiwgMTE4LCAxOCwgMTksIDIxNiwgMTA0LCAKKyAgICAxOCwgMTksIDExMiwgMTgsIDE5LCAyMTYsIDE4LCAxOCwgMTksIDIxMSwgMTE2LCAyMTYsIDE4LCAxOCwgMTksIDczLCAyNDgsIAorICAgIDg1LCAxOCwgMTksIDczLCAyNDgsIDExLCAxOCwgMTksIDIxNywgMTA2LCAxOCwgMTksIDIxNywgMTAyLCAxOCwgMTksIDIxNSwgCisgICAgNzgsIDE4LCAxOSwgMTU5LCAyMTUsIDc4LCAxOCwgMTksIDIxNSwgNjIsIDE4LCAxOSwgMTU5LCAyMTUsIDYyLCAxOCwgMTksIAorICAgIDIxNSwgNjEsIDE4LCAxOSwgMTU5LCAyMTUsIDYxLCAxOCwgMTksIDEwNSwgMTgsIDE5LCAxNTksIDEwNSwgMTgsIDE5LCAKKyAgICAyMTUsIDU0LCAxOCwgMTksIDE1OSwgMjE1LCA1NCwgMTgsIDE5LCAyMTUsIDgwLCAxOCwgMTksIDE1OSwgMjE1LCA4MCwgMTgsIAorICAgIDE5LCAyMTUsIDc5LCAxOCwgMTksIDE1OSwgMjE1LCA3OSwgMTgsIDE5LCAyMjksIDE5NSwgMjE1LCA3OSwgMTgsIDE5LCAKKyAgICAyMTcsIDE1MywgMTgsIDE5LCAyMTUsIDE1MiwgMTgsIDE5LCAyMTUsIDEzNiwgMTgsIDE5LCAyMTUsIDEzNCwgMTgsIDE5LCAKKyAgICAyMTUsIDE1NywgMTgsIDE5LCAyMzQsIDE4OCwgMTgsIDE5LCAyMzUsIDEzLCAxOCwgMTksIDIzNCwgOTgsIDE4LCAxOSwgCisgICAgMjM0LCA4OSwgMTgsIDE5LCAyMzQsIDM0LCAxOCwgMTksIDIzNCwgMTYsIDE4LCAxOSwgMjExLCAxMTYsIDIzNCwgMTYsIDE4LCAKKyAgICAxOSwgMTc2LCAxOCwgMTksIDIzNSwgMTYsIDE4LCAxOSwgMjMzLCAxODQsIDE4LCAxOSwgMTU5LCAyMzMsIDE4NCwgMTgsIAorICAgIDE5LCAyMzMsIDE4MiwgMTgsIDE5LCAxNTksIDIzMywgMTgyLCAxOCwgMTksIDIzMywgMTgxLCAxOCwgMTksIDE1OSwgMjMzLCAKKyAgICAxODEsIDE4LCAxOSwgMjMzLCAxODAsIDE4LCAxOSwgMTU5LCAyMzMsIDE4MCwgMTgsIDE5LCAyMzMsIDE3OSwgMTgsIDE5LCAKKyAgICAxNTksIDIzMywgMTc5LCAxOCwgMTksIDIzMywgMTg4LCAxOCwgMTksIDE1OSwgMjMzLCAxODgsIDE4LCAxOSwgMjMzLCAxODcsIAorICAgIDE4LCAxOSwgMTU5LCAyMzMsIDE4NywgMTgsIDE5LCAyMjksIDE5NSwgMjMzLCAxODcsIDE4LCAxOSwgMjM1LCAyOSwgMTgsIAorICAgIDE5LCAyMzMsIDE4OSwgMTgsIDE5LCAyMTksIDI5LCAyMzQsIDE4MiwgMTgsIDE5LCAyMTksIDI5LCAyMzQsIDkwLCAxOCwgCisgICAgMTksIDIxOSwgMjksIDIzNCwgMjksIDE4LCAxOSwgMjE5LCAyOSwgMjM0LCAyNTQsIDE4LCAxOSwgMjUwLCAxOTgsIDE4LCAKKyAgICAxOSwgMjUxLCAzOSwgMTgsIDE5LCAyNTAsIDU5LCAxOCwgMTksIDI1MCwgNDksIDE4LCAxOSwgMjQ5LCAyNDYsIDE4LCAxOSwgCisgICAgMjQ5LCAxODIsIDE4LCAxOSwgMjExLCAxMTYsIDI0OSwgMTgyLCAxOCwgMTksIDI1MSwgNDEsIDE4LCAxOSwgMjUxLCA0MCwgCisgICAgMTgsIDE5LCAyNDksIDg3LCAxOCwgMTksIDE1OSwgMjQ5LCA4NywgMTgsIDE5LCAyNDksIDg1LCAxOCwgMTksIDE1OSwgMjQ5LCAKKyAgICA4NSwgMTgsIDE5LCAyNDksIDg0LCAxOCwgMTksIDE1OSwgMjQ5LCA4NCwgMTgsIDE5LCAyNDksIDgzLCAxOCwgMTksIDE1OSwgCisgICAgMjQ5LCA4MywgMTgsIDE5LCAyNDksIDgyLCAxOCwgMTksIDE1OSwgMjQ5LCA4MiwgMTgsIDE5LCAyNDksIDg5LCAxOCwgMTksIAorICAgIDE1OSwgMjQ5LCA4OSwgMTgsIDE5LCAyNDksIDg4LCAxOCwgMTksIDE1OSwgMjQ5LCA4OCwgMTgsIDE5LCAyMjksIDE5NSwgCisgICAgMjQ5LCA4OCwgMTgsIDE5LCAyNTEsIDc0LCAxOCwgMTksIDIyMSwgMjExLCAyMTYsIDIxMSwgMTgsIDE5LCAyMzEsIDk2LCAKKyAgICAxOCwgMTksIDIzMSwgMjQxLCAxOCwgMTksIDIzMCwgMjM1LCAxOCwgMTksIDIzMCwgMjA2LCAxOCwgMTksIDIzMCwgMTY2LCAKKyAgICAxOCwgMTksIDIzMCwgMTM3LCAxOCwgMTksIDIxMSwgMTE2LCAyMzAsIDEzNywgMTgsIDE5LCAxODYsIDE4LCAxOSwgMjMxLCAKKyAgICAyNDIsIDE4LCAxOSwgMjMwLCA0NSwgMTgsIDE5LCAxNTksIDIzMCwgNDUsIDE4LCAxOSwgMjMwLCA0MywgMTgsIDE5LCAxNTksIAorICAgIDIzMCwgNDMsIDE4LCAxOSwgMjMwLCA0MiwgMTgsIDE5LCAxNTksIDIzMCwgNDIsIDE4LCAxOSwgMjMwLCA0MSwgMTgsIDE5LCAKKyAgICAxNTksIDIzMCwgNDEsIDE4LCAxOSwgMjMwLCA0MCwgMTgsIDE5LCAxNTksIDIzMCwgNDAsIDE4LCAxOSwgMjMwLCA0NywgMTgsIAorICAgIDE5LCAxNTksIDIzMCwgNDcsIDE4LCAxOSwgMjMwLCA0NiwgMTgsIDE5LCAxNTksIDIzMCwgNDYsIDE4LCAxOSwgMjI5LCAKKyAgICAxOTUsIDIzMCwgNDYsIDE4LCAxOSwgMTk0LCAxOCwgMTksIDE1OSwgMTk0LCAxOCwgMTksIDIzMCwgMjM5LCAxOCwgMTksIAorICAgIDI1MywgMjEzLCAxOTQsIDE4LCAxOSwgMjIxLCAyMTEsIDE5NCwgMTgsIDE5LCAyMjksIDExMiwgMTgsIDE5LCAyMjksIDIyOSwgCisgICAgMTgsIDE5LCAyMjgsIDIzOCwgMTgsIDE5LCAyMjgsIDIxMywgMTgsIDE5LCAyMjgsIDc5LCAxOCwgMTksIDIyOCwgNjksIDE4LCAKKyAgICAxOSwgMjExLCAxMTYsIDIyOCwgNjksIDE4LCAxOSwgMTk4LCAxOCwgMTksIDIyOSwgMjMwLCAxOCwgMTksIDIyNywgMTc2LCAKKyAgICAxOCwgMTksIDE1OSwgMjI3LCAxNzYsIDE4LCAxOSwgMjI3LCAxNzgsIDE4LCAxOSwgMTU5LCAyMjcsIDE3OCwgMTgsIDE5LCAKKyAgICAyMjcsIDE3NywgMTgsIDE5LCAxNTksIDIyNywgMTc3LCAxOCwgMTksIDIyOSwgMTk1LCAyMjcsIDE3NywgMTgsIDE5LCAyMzAsIAorICAgIDMwLCAxOCwgMTksIDczLCAyMjksIDg0LCAxOCwgMTksIDIyOCwgMjQzLCAxOCwgMTksIDIzMywgNjQsIDE4LCAxOSwgMjMzLCAKKyAgICAxMzksIDE4LCAxOSwgMjMyLCAyNDcsIDE4LCAxOSwgMjMyLCAyMzMsIDE4LCAxOSwgMjMyLCAxNjIsIDE4LCAxOSwgMjMyLCAKKyAgICAxMzMsIDE4LCAxOSwgMjExLCAxMTYsIDIzMiwgMTMzLCAxOCwgMTksIDIzMywgMTQxLCAxOCwgMTksIDIzMywgMTQwLCAxOCwgCisgICAgMTksIDIzMiwgNzMsIDE4LCAxOSwgMTU5LCAyMzIsIDczLCAxOCwgMTksIDIzMiwgNzIsIDE4LCAxOSwgMTU5LCAyMzIsIDcyLCAKKyAgICAxOCwgMTksIDIzMiwgNzEsIDE4LCAxOSwgMTU5LCAyMzIsIDcxLCAxOCwgMTksIDIzMiwgNzAsIDE4LCAxOSwgMTU5LCAyMzIsIAorICAgIDcwLCAxOCwgMTksIDIzMiwgNjksIDE4LCAxOSwgMTU5LCAyMzIsIDY5LCAxOCwgMTksIDIzMiwgNzUsIDE4LCAxOSwgMTU5LCAKKyAgICAyMzIsIDc1LCAxOCwgMTksIDIzMiwgNzQsIDE4LCAxOSwgMTU5LCAyMzIsIDc0LCAxOCwgMTksIDE1NiwgMTgsIDE5LCAxNTksIAorICAgIDE1NiwgMTgsIDE5LCAxNDcsIDE1NiwgMTgsIDE5LCAyMjEsIDE4MywgMTgsIDE5LCAyMjIsIDMxLCAxOCwgMTksIDIxOSwgCisgICAgMTkzLCAxOCwgMTksIDIxOSwgMTc3LCAxOCwgMTksIDIxOSwgNjAsIDE4LCAxOSwgMjE5LCA0MiwgMTgsIDE5LCAyMTEsIAorICAgIDExNiwgMjE5LCA0MiwgMTgsIDE5LCAyMDYsIDE4LCAxOSwgMjIyLCAzMywgMTgsIDE5LCAyMTcsIDI1MCwgMTgsIDE5LCAKKyAgICAxNTksIDIxNywgMjUwLCAxOCwgMTksIDIxNywgMjQ0LCAxOCwgMTksIDE1OSwgMjE3LCAyNDQsIDE4LCAxOSwgMjE3LCAyNDMsIAorICAgIDE4LCAxOSwgMTU5LCAyMTcsIDI0MywgMTgsIDE5LCAyMTcsIDIzOSwgMTgsIDE5LCAxNTksIDIxNywgMjM5LCAxOCwgMTksIAorICAgIDIxNywgMjM4LCAxOCwgMTksIDE1OSwgMjE3LCAyMzgsIDE4LCAxOSwgMjE3LCAyNTQsIDE4LCAxOSwgMTU5LCAyMTcsIDI1NCwgCisgICAgMTgsIDE5LCAyMTcsIDI1MywgMTgsIDE5LCAxNTksIDIxNywgMjUzLCAxOCwgMTksIDIyOSwgMTk1LCAyMTcsIDI1MywgMTgsIAorICAgIDE5LCAyMjIsIDkzLCAxOCwgMTksIDI1MywgMjEzLCAyMjIsIDkzLCAxOCwgMTksIDIxNywgMjU1LCAxOCwgMTksIDI1MSwgCisgICAgMjI2LCAyMjIsIDkzLCAxOCwgMTksIDIzMCwgMTMyLCAyMTksIDExMCwgMTgsIDE5LCAyMjksIDE5NSwgMjE5LCAxMDEsIDE4LCAKKyAgICAxOSwgMjI5LCAxOTUsIDIyMiwgOTEsIDE4LCAxOSwgMjI5LCAxOTUsIDIxOCwgMjM3LCAxOCwgMTksIDIyOSwgMTk1LCAyMTgsIAorICAgIDg3LCAxOCwgMTksIDIyOSwgMTk1LCAyMTksIDEwMCwgMTgsIDE5LCAyMjksIDE5NSwgMjIxLCAxODYsIDE4LCAxOSwgMjIwLCAKKyAgICA2NSwgMTgsIDE5LCAyMjAsIDM0LCAxOCwgMTksIDIyMCwgMjksIDE4LCAxOSwgMjIwLCA5LCAxOCwgMTksIDIyMCwgMywgMTgsIAorICAgIDE5LCAyMjAsIDEwNCwgMTgsIDE5LCAyMjAsIDEwMCwgMTgsIDE5LCAyMTksIDIwOCwgMTgsIDE5LCAxNTksIDIxOSwgMjA4LCAKKyAgICAxOCwgMTksIDIxOSwgMjA3LCAxOCwgMTksIDE1OSwgMjE5LCAyMDcsIDE4LCAxOSwgMjE5LCAyMDYsIDE4LCAxOSwgMTU5LCAKKyAgICAyMTksIDIwNiwgMTgsIDE5LCAyMTksIDIwNSwgMTgsIDE5LCAxNTksIDIxOSwgMjA1LCAxOCwgMTksIDIxOSwgMjA0LCAxOCwgCisgICAgMTksIDE1OSwgMjE5LCAyMDQsIDE4LCAxOSwgMjE5LCAyMTAsIDE4LCAxOSwgMTU5LCAyMTksIDIxMCwgMTgsIDE5LCAyMTksIAorICAgIDIwOSwgMTgsIDE5LCAxNTksIDIxOSwgMjA5LCAxOCwgMTksIDIyMCwgMTA2LCAxOCwgMTksIDIxMSwgNDcsIDE4LCAxOSwgCisgICAgMjExLCAxMDEsIDE4LCAxOSwgMjExLCA4LCAxOCwgMTksIDIxMCwgMjU1LCAxOCwgMTksIDIxMCwgMjQ0LCAxOCwgMTksIAorICAgIDIxMCwgMjI5LCAxOCwgMTksIDIxMSwgMTE2LCAyMTAsIDIyOSwgMTgsIDE5LCAxOTIsIDE4LCAxOSwgMjExLCAxMDMsIDE4LCAKKyAgICAxOSwgMjEwLCAxNzQsIDE4LCAxOSwgMTU5LCAyMTAsIDE3NCwgMTgsIDE5LCAyMTAsIDE3MywgMTgsIDE5LCAxNTksIDIxMCwgCisgICAgMTczLCAxOCwgMTksIDIxMCwgMTcyLCAxOCwgMTksIDE1OSwgMjEwLCAxNzIsIDE4LCAxOSwgMjEwLCAxNzEsIDE4LCAxOSwgCisgICAgMTU5LCAyMTAsIDE3MSwgMTgsIDE5LCAyMTAsIDE3MCwgMTgsIDE5LCAxNTksIDIxMCwgMTcwLCAxOCwgMTksIDIxMCwgMTc2LCAKKyAgICAxOCwgMTksIDE1OSwgMjEwLCAxNzYsIDE4LCAxOSwgMjEwLCAxNzUsIDE4LCAxOSwgMTU5LCAyMTAsIDE3NSwgMTgsIDE5LCAKKyAgICAyMjksIDE5NSwgMjEwLCAxNzUsIDE4LCAxOSwgMjExLCAxMTcsIDE4LCAxOSwgMjUyLCAxMiwgMjExLCAxMTcsIDE4LCAxOSwgCisgICAgMTU5LCAyMTEsIDExNywgMTgsIDE5LCAyMjEsIDIxMSwgMjExLCA4LCAxOCwgMTksIDIyMywgMTMxLCAxOCwgMTksIDIyMywgCisgICAgMjI2LCAyMjMsIDEzMSwgMTgsIDE5LCAxNTksIDIzMywgNjQsIDE4LCAxOSwgMjIzLCAxODYsIDE4LCAxOSwgMjIzLCAzOCwgCisgICAgMTgsIDE5LCAyMjIsIDI0MiwgMTgsIDE5LCAyMjIsIDIxMywgMTgsIDE5LCAyMjIsIDE5OSwgMTgsIDE5LCAxNTksIDIzMiwgCisgICAgMTYyLCAxOCwgMTksIDIwNSwgMTgsIDE5LCAyMjMsIDE4NywgMTgsIDE5LCAxNTksIDIzMywgMTQxLCAxOCwgMTksIDIyMiwgCisgICAgMTEwLCAxOCwgMTksIDE1OSwgMjIyLCAxMTAsIDE4LCAxOSwgMTUzLCAxOCwgMTksIDE1OSwgMTUzLCAxOCwgMTksIDE0NywgCisgICAgMTUzLCAxOCwgMTksIDI0NCwgMTYyLCAxOCwgMTksIDI0NCwgMjAxLCAxOCwgMTksIDI0NCwgMTI5LCAxOCwgMTksIDI0NCwgCisgICAgMTE2LCAxOCwgMTksIDI0NCwgNTEsIDE4LCAxOSwgMjQ0LCA0MiwgMTgsIDE5LCAyNDQsIDIwNCwgMTgsIDE5LCAyNDQsIAorICAgIDIwMywgMTgsIDE5LCAyNDMsIDIxOSwgMTgsIDE5LCAxNTksIDI0MywgMjE5LCAxOCwgMTksIDI0NSwgMTQsIDE4LCAxOSwgCisgICAgMjE2LCAxOTYsIDE4LCAxOSwgMjMwLCAyOCwgMjE2LCAxOTYsIDE4LCAxOSwgMjE2LCAxNzYsIDE4LCAxOSwgMjMwLCAyOCwgCisgICAgMjE2LCAxNzYsIDE4LCAxOSwgMjE2LCAxNzIsIDE4LCAxOSwgMjMwLCAyOCwgMjE2LCAxNzIsIDE4LCAxOSwgMjE2LCAxNTcsIAorICAgIDE4LCAxOSwgMjE2LCAxNTQsIDE4LCAxOSwgMjE2LCAyMDksIDE4LCAxOSwgMjE2LCAyMDgsIDE4LCAxOSwgMjE2LCAxMjgsIAorICAgIDE4LCAxOSwgMTU5LCAyMTYsIDEyOCwgMTgsIDE5LCAyMTYsIDIxMSwgMTgsIDE5LCAyMTUsIDE0MywgMTgsIDE5LCAyMTUsIAorICAgIDE0MSwgMTgsIDE5LCAyMTUsIDE0MCwgMTgsIDE5LCAyMTUsIDE0NSwgMTgsIDE5LCAyMTUsIDE0NiwgMTgsIDE5LCAyMTUsIAorICAgIDUyLCAxOCwgMTksIDIxNSwgNTEsIDE4LCAxOSwgMjE1LCA1MCwgMTgsIDE5LCAyMTUsIDUzLCAxOCwgMTksIDIyNywgMTk3LCAKKyAgICAyNDEsIDI0NSwgMTgsIDE5LCAyMjcsIDE5NywgMjQxLCAxODcsIDE4LCAxOSwgMjI3LCAxOTcsIDI0MSwgMTY4LCAxOCwgMTksIAorICAgIDIyNywgMTk3LCAyNDEsIDc1LCAxOCwgMTksIDIyNywgMTk3LCAyNDEsIDYwLCAxOCwgMTksIDIyNywgMTk3LCAxNjIsIDE4LCAKKyAgICAxOSwgMjI3LCAxOTcsIDI0MiwgNTMsIDE4LCAxOSwgMjI3LCAxOTcsIDI0MiwgNjcsIDE4LCAxOSwgMjI3LCAxOTYsIDI0MiwgCisgICAgNjcsIDE4LCAxOSwgMjQxLCAxNjEsIDE4LCAxOSwgMjI0LCA4NywgMTgsIDE5LCAyMjQsIDU2LCAxOCwgMTksIDIyNCwgNTEsIAorICAgIDE4LCAxOSwgMjI0LCA0NSwgMTgsIDE5LCAyMjQsIDQwLCAxOCwgMTksIDIyNCwgOTEsIDE4LCAxOSwgMjI0LCA5MCwgMTgsIAorICAgIDE5LCAyMjQsIDk5LCAxOCwgMTksIDIxNiwgNTYsIDE4LCAxOSwgMjE2LCA1NCwgMTgsIDE5LCAyMTYsIDUzLCAxOCwgMTksIAorICAgIDIxNiwgNTcsIDE4LCAxOSwgMTU5LCAyMjMsIDEzMSwgMTgsIDE5LCAxNTksIDIyMywgMzgsIDE4LCAxOSwgMTU5LCAyMjIsIAorICAgIDIxMywgMTgsIDE5LCAxNTksIDIwNSwgMTgsIDE5LCAyMjksIDgwLCAxOCwgMTksIDIyOSwgMzIsIDE4LCAxOSwgMjI5LCAyOCwgCisgICAgMTgsIDE5LCAyMjksIDksIDE4LCAxOSwgMjI5LCA0LCAxOCwgMTksIDIyOSwgODIsIDE4LCAxOSwgMjI5LCA4MSwgMTgsIDE5LCAKKyAgICAyMjksIDg0LCAxOCwgMTksIDIyOCwgMTA4LCAxOCwgMTksIDIyMSwgMjExLCAyMjAsIDY1LCAxOCwgMTksIDIyMSwgMjExLCAKKyAgICAyMjAsIDM0LCAxOCwgMTksIDIyMSwgMjExLCAyMjAsIDksIDE4LCAxOSwgMjIxLCAyMTEsIDIyMCwgMTA0LCAxOCwgMTksIAorICAgIDIxMSwgMjEzLCAyMTYsIDE5NiwgMTgsIDE5LCAyMTEsIDIxMywgMjE2LCAxNzYsIDE4LCAxOSwgMjExLCAyMTMsIDIxNiwgCisgICAgMTU3LCAxOCwgMTksIDIxMSwgMjEzLCAyMTYsIDIwOSwgMTgsIDE5LCAyMTEsIDIxMywgMjE2LCAyMTEsIDE4LCAxOSwgMjMyLCAKKyAgICAyNTQsIDE4LCAxOSwgMjMyLCAyNTMsIDE4LCAxOSwgMjMyLCAyNTIsIDE4LCAxOSwgMjMyLCAyNTEsIDE4LCAxOSwgMjMzLCAKKyAgICA0LCAxOCwgMTksIDIzMywgMywgMTgsIDE5LCAyMzMsIDUsIDE4LCAxOSwgMjE2LCAyMTAsIDIxNiwgMTk2LCAxOCwgMTksIAorICAgIDIxNiwgMjEwLCAyMTYsIDE3NiwgMTgsIDE5LCAyMTYsIDIxMCwgMjE2LCAxNzIsIDE4LCAxOSwgMjE2LCAyMTAsIDIxNiwgCisgICAgMTU3LCAxOCwgMTksIDIxNiwgMjEwLCAyMTYsIDE1NCwgMTgsIDE5LCAyMTYsIDIxMCwgMjE2LCAyMDksIDE4LCAxOSwgMjE2LCAKKyAgICAyMTAsIDIxNiwgMjA4LCAxOCwgMTksIDIxNiwgMjEwLCAyMTYsIDIxMSwgMTgsIDE5LCAyNTQsIDE5OCwgMjUzLCAxNjYsIAorICAgIDE4LCAxOSwgMjUxLCAyMjYsIDc2LCAxOCwgMTksIDI1MSwgMjI2LCA3NCwgMTgsIDE5LCAyNTEsIDIyNiwgNzgsIDE4LCAxOSwgCisgICAgMjUxLCAyMjYsIDYxLCAxOCwgMTksIDI1MSwgMjI2LCAyMTIsIDIyLCAxOCwgMTksIDI1MSwgMjI2LCAyMTEsIDI1MCwgMTgsIAorICAgIDE5LCAyNTEsIDIyNiwgMjExLCAyMjcsIDE4LCAxOSwgMjUxLCAyMjYsIDIxMiwgNjUsIDE4LCAxOSwgMjUxLCAyMjYsIDIyOSwgCisgICAgMTEyLCAxOCwgMTksIDI1MSwgMjI2LCAyMjgsIDIzOCwgMTgsIDE5LCAyNTEsIDIyNiwgMjI4LCA3OSwgMTgsIDE5LCAyNTEsIAorICAgIDIyNiwgMTk4LCAxOCwgMTksIDI1MSwgMjI2LCAyMzQsIDE4OCwgMTgsIDE5LCAyNTEsIDIyNiwgMjM0LCA5OCwgMTgsIDE5LCAKKyAgICAyNTEsIDIyNiwgMjM0LCAzNCwgMTgsIDE5LCAyNTEsIDIyNiwgMTc2LCAxOCwgMTksIDIyMSwgMjExLCAyNDEsIDI0NSwgMTgsIAorICAgIDE5LCAyMjEsIDIxMSwgMjQxLCAxODcsIDE4LCAxOSwgMjIxLCAyMTEsIDI0MSwgNzUsIDE4LCAxOSwgMjIxLCAyMTEsIDE2MiwgCisgICAgMTgsIDE5LCA3MywgMjQyLCAyMjcsIDE4LCAxOSwgNzMsIDI0MiwgMjMxLCAxOCwgMTksIDczLCAyNDIsIDI0MywgMTgsIDE5LCAKKyAgICA3MywgMjQyLCAyNDIsIDE4LCAxOSwgNzMsIDI0MiwgMjMyLCAxOCwgMTksIDczLCAyNDMsIDAsIDE4LCAxOSwgNzMsIDIyMiwgCisgICAgMTQyLCAxOCwgMTksIDczLCAyMjIsIDIxMywgMTgsIDE5LCA3MywgMjIzLCAxMzEsIDE4LCAxOSwgNzMsIDIyMywgMTExLCAKKyAgICAxOCwgMTksIDczLCAyMjMsIDM4LCAxOCwgMTksIDczLCAyMDUsIDE4LCAxOSwgNzMsIDIxMSwgMTk1LCAxOCwgMTksIDczLCAKKyAgICAyMTEsIDIyNywgMTgsIDE5LCA3MywgMjEyLCAyMiwgMTgsIDE5LCA3MywgMjEyLCAxNywgMTgsIDE5LCA3MywgMjExLCAyNTAsIAorICAgIDE4LCAxOSwgNzMsIDIxMiwgNjUsIDE4LCAxOSwgNzMsIDI0MCwgMjAxLCAxOCwgMTksIDczLCAyNDAsIDIwMiwgMTgsIDE5LCAKKyAgICA3MywgMjQwLCAyMDUsIDE4LCAxOSwgNzMsIDI0MCwgMjA0LCAxOCwgMTksIDczLCAyNDAsIDIwMywgMTgsIDE5LCA3MywgCisgICAgMjQwLCAyMDcsIDE4LCAxOSwgNzMsIDIxNiwgMTM3LCAxOCwgMTksIDczLCAyMTYsIDE1NywgMTgsIDE5LCA3MywgMjE2LCAKKyAgICAxOTYsIDE4LCAxOSwgNzMsIDIxNiwgMTk1LCAxOCwgMTksIDczLCAyMTYsIDE3NiwgMTgsIDE5LCA3MywgMjE2LCAyMDksIAorICAgIDE4LCAxOSwgNzMsIDIxNSwgMTI0LCAxOCwgMTksIDczLCAyMTUsIDEzNCwgMTgsIDE5LCA3MywgMjE1LCAxNTIsIDE4LCAxOSwgCisgICAgNzMsIDIxNSwgMTUxLCAxOCwgMTksIDczLCAyMTUsIDEzNiwgMTgsIDE5LCA3MywgMjE1LCAxNTcsIDE4LCAxOSwgNzMsIAorICAgIDIyNCwgMTUzLCAxOCwgMTksIDczLCAyMjUsIDE5LCAxOCwgMTksIDczLCAyMjUsIDIyNCwgMTgsIDE5LCA3MywgMjI1LCAKKyAgICAyMTQsIDE4LCAxOSwgNzMsIDIyNSwgMTExLCAxOCwgMTksIDczLCAxOTEsIDE4LCAxOSwgNzMsIDIyNiwgMTA5LCAxOCwgMTksIAorICAgIDczLCAyNDIsIDEyMCwgMTgsIDE5LCA3MywgMjQyLCAxODEsIDE4LCAxOSwgNzMsIDI0MywgNjksIDE4LCAxOSwgNzMsIDI0MywgCisgICAgNjIsIDE4LCAxOSwgNzMsIDI0MiwgMjIxLCAxOCwgMTksIDczLCAyNDMsIDE0MiwgMTgsIDE5LCA3MywgMjM0LCAxMDYsIDE4LCAKKyAgICAxOSwgNzMsIDIzNCwgMTExLCAxOCwgMTksIDczLCAyMzQsIDEyNSwgMTgsIDE5LCA3MywgMjM0LCAxMjQsIDE4LCAxOSwgNzMsIAorICAgIDIzNCwgMTE4LCAxOCwgMTksIDczLCAyMzQsIDEzOCwgMTgsIDE5LCA3MywgMjM0LCA0NywgMTgsIDE5LCA3MywgMjM0LCA0OCwgCisgICAgMTgsIDE5LCA3MywgMjM0LCA1MSwgMTgsIDE5LCA3MywgMjM0LCA1MCwgMTgsIDE5LCA3MywgMjM0LCA0OSwgMTgsIDE5LCAKKyAgICA3MywgMjM0LCA1MiwgMTgsIDE5LCA3MywgMjM0LCA1MywgMTgsIDE5LCA3MywgMjI3LCAyNDIsIDE4LCAxOSwgNzMsIDIyOCwgCisgICAgNzksIDE4LCAxOSwgNzMsIDIyOSwgMTEyLCAxOCwgMTksIDczLCAyMjksIDEwOCwgMTgsIDE5LCA3MywgMjI4LCAyMzgsIDE4LCAKKyAgICAxOSwgNzMsIDE5OCwgMTgsIDE5LCA3MywgMjMwLCAxMDcsIDE4LCAxOSwgNzMsIDIzMCwgMTY2LCAxOCwgMTksIDczLCAyMzEsIAorICAgIDk2LCAxOCwgMTksIDczLCAyMzEsIDg1LCAxOCwgMTksIDczLCAyMzAsIDIzNSwgMTgsIDE5LCA3MywgMTg2LCAxOCwgMTksIAorICAgIDczLCAyMTAsIDIxMiwgMTgsIDE5LCA3MywgMjEwLCAyNDQsIDE4LCAxOSwgNzMsIDIxMSwgNDcsIDE4LCAxOSwgNzMsIDIxMSwgCisgICAgNDQsIDE4LCAxOSwgNzMsIDIxMSwgOCwgMTgsIDE5LCA3MywgMTkyLCAxOCwgMTksIDczLCAyMzUsIDU3LCAxOCwgMTksIAorICAgIDIyMSwgMjExLCAyMzUsIDU3LCAxOCwgMTksIDczLCAyMzUsIDc0LCAxOCwgMTksIDczLCAyMzUsIDEzMiwgMTgsIDE5LCA3MywgCisgICAgMjM1LCAxMzAsIDE4LCAxOSwgNzMsIDIzNSwgMTE0LCAxOCwgMTksIDIyMSwgMjExLCAyMzUsIDExNCwgMTgsIDE5LCA3MywgCisgICAgMjM1LCAxNDcsIDE4LCAxOSwgNzMsIDIzNSwgODcsIDE4LCAxOSwgNzMsIDIzNSwgOTEsIDE4LCAxOSwgNzMsIDIzNSwgMTAxLCAKKyAgICAxOCwgMTksIDczLCAyMzUsIDEwMCwgMTgsIDE5LCA3MywgMjM1LCA5OSwgMTgsIDE5LCA3MywgMjM1LCAxMDIsIDE4LCAxOSwgCisgICAgNzMsIDIzMiwgMTAzLCAxOCwgMTksIDczLCAyMzIsIDE2MiwgMTgsIDE5LCA3MywgMjMzLCA2NCwgMTgsIDE5LCA3MywgMjMzLCAKKyAgICA1NiwgMTgsIDE5LCA3MywgMjMyLCAyNDcsIDE4LCAxOSwgNzMsIDIzMywgMTQxLCAxOCwgMTksIDczLCAyNDcsIDE1NywgMTgsIAorICAgIDE5LCA3MywgMjQ3LCAxNTgsIDE4LCAxOSwgNzMsIDI0NywgMTYzLCAxOCwgMTksIDczLCAyNDcsIDE2MiwgMTgsIDE5LCA3MywgCisgICAgMjQ3LCAxNTksIDE4LCAxOSwgNzMsIDI0NywgMTY0LCAxOCwgMTksIDczLCAyMzIsIDI1MCwgMTgsIDE5LCA3MywgMjMyLCAKKyAgICAyNTIsIDE4LCAxOSwgNzMsIDIzMywgMCwgMTgsIDE5LCA3MywgMjMyLCAyNTUsIDE4LCAxOSwgNzMsIDIzMiwgMjU0LCAxOCwgCisgICAgMTksIDczLCAyMzMsIDQsIDE4LCAxOSwgNzMsIDIxNiwgNTEsIDE4LCAxOSwgNzMsIDIxNiwgNTMsIDE4LCAxOSwgNzMsIAorICAgIDIxNiwgNTYsIDE4LCAxOSwgNzMsIDIxNiwgNTUsIDE4LCAxOSwgNzMsIDIxNiwgNTQsIDE4LCAxOSwgNzMsIDIxNiwgNTcsIAorICAgIDE4LCAxOSwgNzMsIDIxNiwgNDYsIDE4LCAxOSwgNzMsIDIxNiwgNDcsIDE4LCAxOSwgNzMsIDIxNiwgNTksIDE4LCAxOSwgCisgICAgNzMsIDIxNiwgNTgsIDE4LCAxOSwgNzMsIDIxNiwgNDgsIDE4LCAxOSwgNzMsIDIxNiwgNjAsIDE4LCAxOSwgNzMsIDIxMCwgCisgICAgMTMsIDE4LCAxOSwgNzMsIDIxMCwgMjMsIDE4LCAxOSwgNzMsIDIxMCwgOTQsIDE4LCAxOSwgNzMsIDIxMCwgOTIsIDE4LCAKKyAgICAxOSwgNzMsIDIxMCwgNDQsIDE4LCAxOSwgNzMsIDIxMCwgMTE2LCAxOCwgMTksIDczLCAyMTAsIDE1OSwgMTgsIDE5LCA3MywgCisgICAgNjUsIDIxMCwgMTU5LCAxOCwgMTksIDczLCAyNDYsIDM2LCAxOCwgMTksIDczLCAyNDYsIDM3LCAxOCwgMTksIDczLCAyNDYsIAorICAgIDQ0LCAxOCwgMTksIDczLCAyNDYsIDQzLCAxOCwgMTksIDczLCAyNDYsIDM5LCAxOCwgMTksIDczLCAyNDYsIDQ2LCAxOCwgCisgICAgMTksIDczLCAyMTgsIDg0LCAxOCwgMTksIDczLCAyMTksIDYwLCAxOCwgMTksIDczLCAyMjEsIDE4MywgMTgsIDE5LCA3MywgCisgICAgMjIxLCAxNzIsIDE4LCAxOSwgNzMsIDIxOSwgMTkzLCAxOCwgMTksIDczLCAyMDYsIDE4LCAxOSwgNzMsIDIxOSwgMjI3LCAKKyAgICAxOCwgMTksIDczLCAyMjAsIDksIDE4LCAxOSwgNzMsIDIyMCwgNjUsIDE4LCAxOSwgNzMsIDIyMCwgNjMsIDE4LCAxOSwgNzMsIAorICAgIDIyMCwgMzQsIDE4LCAxOSwgNzMsIDIyMCwgMTA0LCAxOCwgMTksIDczLCAyMjAsIDEwNiwgMTgsIDE5LCA3MywgMjE1LCAKKyAgICAxNjQsIDE4LCAxOSwgNzMsIDIxNSwgMTY3LCAxOCwgMTksIDczLCAyMTUsIDE3OSwgMTgsIDE5LCA3MywgMjE1LCAxNzgsIAorICAgIDE4LCAxOSwgNzMsIDIxNSwgMTY4LCAxOCwgMTksIDczLCAyMTUsIDE4NCwgMTgsIDE5LCA3MywgMjUwLCA3NywgMTgsIDE5LCAKKyAgICA3MywgMjUwLCA5NCwgMTgsIDE5LCA3MywgMjUwLCAxMzksIDE4LCAxOSwgNzMsIDI1MCwgMTM2LCAxOCwgMTksIDczLCAyNTAsIAorICAgIDExOCwgMTgsIDE5LCA3MywgMjUwLCAxNjUsIDE4LCAxOSwgNzMsIDIxNSwgMTI3LCAxOCwgMTksIDczLCAyMTUsIDEyOCwgCisgICAgMTgsIDE5LCA3MywgMjE1LCAxMzEsIDE4LCAxOSwgNzMsIDIxNSwgMTMwLCAxOCwgMTksIDczLCAyMTUsIDEyOSwgMTgsIDE5LCAKKyAgICA3MywgMjE1LCAxMzIsIDE4LCAxOSwgMjUwLCAxMTksIDUwLCAxOCwgMTksIDI0MywgMjM2LCAyMTgsIDEzMSwgMTgsIDE5LCAKKyAgICAyMjQsIDgzLCAxOCwgMTksIDIyOSwgNzgsIDE4LCAxOSwgMjI4LCAxMDUsIDE4LCAxOSwgMjI4LCAxMDQsIDE4LCAxOSwgCisgICAgMjI4LCAxMDMsIDE4LCAxOSwgMjI4LCAxMDIsIDE4LCAxOSwgMjI4LCAxMDcsIDE4LCAxOSwgMjI4LCAxMDYsIDE4LCAxOSwgCisgICAgMjExLCAyMTMsIDIxNiwgMTI2LCAxOCwgMTksIDIxMSwgMjEzLCAyMTYsIDEyNSwgMTgsIDE5LCAyMTEsIDIxMywgMjE2LCAKKyAgICAxMjQsIDE4LCAxOSwgMjExLCAyMTMsIDIxNiwgMTIzLCAxOCwgMTksIDIxMSwgMjEzLCAyMTYsIDEyMiwgMTgsIDE5LCAyMTEsIAorICAgIDIxMywgMjE2LCAxMjksIDE4LCAxOSwgMjExLCAyMTMsIDIxNiwgMTI4LCAxOCwgMTksIDIxMSwgMjEzLCA0MCwgMjE2LCAKKyAgICAyMTEsIDE4LCAxOSwgMjUxLCAyMjYsIDIxMiwgOTgsIDIyNiwgMjMwLCAyMTksIDIxLCA3OSwgMjI2LCAyMzAsIDEsIDI1MiwgCisgICAgNTYsIDIyNiwgMjMwLCAxLCAyMzIsIDkyLCAyMjYsIDIzMCwgMSwgMjQ0LCAxNTksIDIyNiwgMjMwLCAxLCAyMjIsIDE3LCAKKyAgICAyMjYsIDIzMCwgMSwgMjI4LCAxOTgsIDIyNiwgMjMwLCAxLCAyMTQsIDIyNiwgMjI2LCAyMzAsIDEsIDI0OCwgMjA1LCAyMjYsIAorICAgIDIzMCwgMSwgMjE2LCA4MSwgMjI2LCAyMzAsIDEsIDI0OSwgMjM3LCAyMjYsIDIzMCwgMSwgMjUwLCAxODgsIDIyNiwgMjMwLCAKKyAgICAxLCAyMzAsIDk2LCAyMjYsIDIzMCwgMSwgMjQyLCAxNjMsIDIyNiwgMjMwLCAxLCAyMjksIDY4LCAyMjYsIDIzMCwgMSwgCisgICAgMjE4LCAxMjQsIDIyNiwgMjMwLCAxLCAyMjIsIDEzNywgMjI2LCAyMzAsIDEsIDI1NCwgMjA3LCAyMjYsIDIzMCwgMSwgMjI2LCAKKyAgICAxOTEsIDIyNiwgMjMwLCAxLCAyMTQsIDE1MCwgMjI2LCAyMzAsIDEsIDI0NSwgMjM5LCAyMjYsIDIzMCwgMSwgMjM1LCAxOTUsIAorICAgIDIyNiwgMjMwLCAxLCAyNDUsIDI0MCwgMjI2LCAyMzAsIDEsIDIyNiwgMTYyLCAyMjYsIDIzMCwgMSwgMjE0LCAyMDYsIDIyNiwgCisgICAgMjMwLCAxLCAyMzYsIDQ2LCAyMjYsIDIzMCwgMSwgMjQ1LCAyMzcsIDIyNiwgMjMwLCAxLCAyMjUsIDIwNSwgMjI2LCAyMzAsIAorICAgIDI0NCwgMTU4LCA3OSwgMjI2LCAyMzAsIDIyMywgNTIsIDI0NCwgMTU4LCA3OSwgMTc4LCAxLCAyNDQsIDE0OSwgMjQ0LCAKKyAgICAxNDEsIDI0NCwgMTYzLCAyNDUsIDE0LCAxNzgsIDEsIDIxNCwgMTA1LCAxNzgsIDEsIDIxNCwgMTM1LCAyMTQsIDE1MSwgNjksIAorICAgIDE3OCwgMSwgMjEwLCAyMTQsIDE3OCwgMSwgMjExLCAxMTcsIDE3OCwgMSwgMjEyLCA5OCwgMTc4LCAxLCAyMTYsIDEzMSwgCisgICAgMjE2LCAxMzAsIDIxNiwgMTUyLCAxNzgsIDEsIDI0NSwgNjcsIDE3OCwgMSwgMjU0LCAxMDEsIDYxLCAxNzgsIDEsIDIyNiwgCisgICAgMTQ3LCA3OCwgMTc4LCAxLCAyNTUsIDI2LCA2MSwgMTc4LCAxLCAyNTQsIDIzNiwgMTc4LCAxLCAyMzIsIDEzOSwgNzgsIAorICAgIDE3OCwgMSwgMjE5LCAyNDYsIDc4LCAxNzgsIDEsIDc4LCAxNzgsIDEsIDIyNiwgMjM4LCAxNzgsIDEsIDIyNiwgMjAwLCAKKyAgICAxNzgsIDEsIDIyMywgMTY3LCAyMjMsIDE4MCwgMjIzLCA5NywgMTUzLCAxNzgsIDEsIDIzNCwgMTk5LCAxNzgsIDEsIDI1MCwgCisgICAgMTg1LCAxNzgsIDEsIDIzNCwgMjAwLCAyMzUsIDI5LCAxNzgsIDEsIDI0MywgMjA5LCAxNzgsIDEsIDI0NSwgMTQ2LCAxNzgsIAorICAgIDEsIDI0MywgNjUsIDI0MiwgNzMsIDI0MywgMjA5LCAxNzgsIDEsIDI0MywgMTAzLCAxNzgsIDEsIDIxMSwgMTg4LCAyMTEsIAorICAgIDE4MiwgMjEyLCA5OCwgMTc4LCAxLCAyNDIsIDQ1LCAyNDIsIDY3LCAxNzgsIDEsIDI0MiwgNDksIDI0MiwgNjcsIDE3OCwgMSwgCisgICAgMjMyLCAxNDEsIDI0MiwgNjcsIDE3OCwgMSwgMjE5LCAyNDksIDI0MiwgNjcsIDE3OCwgMSwgMjI5LCAxOTAsIDIyNywgMTYxLCAKKyAgICAyMjksIDE5MSwgMjMwLCAzMCwgMTc4LCAxLCAyMTksIDI0NywgMjMwLCAzMCwgMTc4LCAxLCAyNDYsIDEyMywgMTc4LCAxLCAKKyAgICAyMzUsIDE3NSwgMjM1LCAxNzksIDIzNSwgMTY4LCA3NCwgMTc4LCAxLCA3NiwgMTc4LCAxLCAyMzUsIDEyMywgMjM1LCAxNTAsIAorICAgIDE3OCwgMSwgMjQzLCA1MCwgMTc4LCAxLCAyMzIsIDE0MiwgMjU0LCAyNTIsIDE3OCwgMSwgMjE5LCAyNTEsIDYxLCAxNzgsIAorICAgIDEsIDIzNSwgMTYwLCAyNDUsIDEyMSwgMTc4LCAxLCAyMjUsIDE2NywgMjI1LCAxODksIDIyNiwgMTA5LCAxNzgsIDEsIDI1NCwgCisgICAgMTcyLCAyNDUsIDExOSwgMTc4LCAxLCAyMTksIDI2LCAyMjIsIDkzLCAxNzgsIDEsIDIxOSwgMTgxLCAyMzIsIDEzOCwgMjIyLCAKKyAgICA5MywgMTc4LCAxLCAyMTksIDI0NSwgMjIyLCA5MywgMTc4LCAxLCAyNTEsIDc0LCAxNzgsIDEsIDIxMCwgMTU5LCAxNzgsIDEsIAorICAgIDIxNiwgNjQsIDIxNiwgNzQsIDIxNSwgNDEsIDIxNywgMTUzLCAxNzgsIDEsIDIxOSwgMjQ0LCAyMTcsIDE1MywgMTc4LCAxLCAKKyAgICAyNDksIDY4LCAxNzgsIDEsIDI1MiwgMzksIDI1MiwgNDIsIDI1MSwgMjMyLCAyNTMsIDE2NiwgMTc4LCAxLCAyMTksIDI1MCwgCisgICAgMjUzLCAxNjYsIDE3OCwgMSwgMjQ2LCAxMjIsIDE3OCwgMSwgMjI2LCAxNzUsIDE3OCwgMSwgMjQ1LCAyMDQsIDI0NSwgMjA2LCAKKyAgICA3NiwgMTc4LCAxLCAyMzEsIDE4MywgMjMxLCAxOTEsIDE5NCwgMTc4LCAxLCAyMzIsIDE0MCwgMTk0LCAxNzgsIDEsIDIxOSwgCisgICAgMjQ4LCAxOTQsIDE3OCwgMSwgMjMzLCA3OSwgMjMzLCAxMjAsIDIzMiwgMTQ5LCAxNTYsIDE3OCwgMSwgMjQ2LCAxMjQsIAorICAgIDE3OCwgMSwgMjM1LCAyMzcsIDE3OCwgMSwgMjM1LCAyMzgsIDE3OCwgMSwgMjQ4LCAyMTgsIDI0OCwgMjIzLCAyNDksIDY4LCAKKyAgICAxNzgsIDEsIDIyNiwgMTQyLCAyNDUsIDY2LCA3OCwgMTc4LCAxLCAyNDUsIDIzNSwgMTc4LCAxLCAyMzUsIDE5NCwgMTc4LCAKKyAgICAxLCAyNDksIDg2LCAxNzgsIDEsIDI1MSwgMjUsIDE3OCwgMSwgMjUwLCAxOTcsIDE3OCwgMSwgMjE4LCAxNjMsIDE3OCwgMSwgCisgICAgMjMyLCAxMzcsIDE3OCwgMSwgMjE5LCAyNDMsIDE3OCwgMSwgMjQwLCAxMTcsIDE3OCwgMSwgMjI0LCA5OSwgMTc4LCAxLCAKKyAgICAyMTEsIDE3OCwgMTc4LCAyMTksIDE1NywgMjI0LCAxNDMsIDE3OCwgMjMwLCA5MCwgMjI0LCAxNDMsIDE3OCwgMjQ5LCAxMzksIAorICAgIDIyNCwgMTQzLCAxNzgsIDI1NCwgMTQsIDg3LCAxNzgsIDIxNSwgODIsIDg3LCAxNzgsIDI1MiwgNTQsIDg3LCAyMTcsIDg0LCAKKyAgICAxLCA2MSwgMjE3LCA4NCwgMSwgNzQsIDIxNywgODQsIDEsIDY5LCAyMTcsIDg0LCAxLCAxNzYsIDIxNywgODQsIDEsIDI0MywgCisgICAgMTQyLCAyMTcsIDg0LCAxLCAyMjksIDgyLCAyMTcsIDg0LCAxLCAyMTcsIDEwNiwgMjE3LCA4NCwgMSwgMjQ4LCAyMjksIAorICAgIDIxNywgODQsIDEsIDE5OCwgMjE3LCA4NCwgMSwgMTkxLCAyMTcsIDg0LCAxLCAyNTIsIDE5OSwgMjE3LCA4NCwgMSwgMTg2LCAKKyAgICAyMTcsIDg0LCAxLCAxOTIsIDIxNywgODQsIDEsIDIzMywgMTQxLCAyMTcsIDg0LCAxLCAyMTIsIDY1LCAyMTcsIDg0LCAxLCAKKyAgICAyMDYsIDIxNywgODQsIDEsIDE2MiwgMjE3LCA4NCwgMjUsIDUsIDc0LCAyMTcsIDg0LCAyNSwgNSwgNjksIDIxNywgODQsIDUsIAorICAgIDIxMywgMTUyLCAyNDIsIDE0LCAxLCA2MSwgMjQyLCAxNCwgMSwgNzQsIDI0MiwgMTQsIDEsIDY5LCAyNDIsIDE0LCAxLCAKKyAgICAxNzYsIDI0MiwgMTQsIDEsIDI0MywgMTQyLCAyNDIsIDE0LCAxLCAyMjksIDgyLCAyNDIsIDE0LCAxLCAyMTcsIDEwNiwgCisgICAgMjQyLCAxNCwgMSwgMjQ4LCAyMjksIDI0MiwgMTQsIDEsIDE5OCwgMjQyLCAxNCwgMSwgMTkxLCAyNDIsIDE0LCAxLCAyNTIsIAorICAgIDE5OSwgMjQyLCAxNCwgMSwgMTg2LCAyNDIsIDE0LCAxLCAxOTIsIDI0MiwgMTQsIDEsIDIwNSwgMjQyLCAxNCwgMSwgMjMzLCAKKyAgICAxNDEsIDI0MiwgMTQsIDEsIDIxMiwgNjUsIDI0MiwgMTQsIDEsIDIwNiwgMjQyLCAxNCwgMSwgMTYyLCAyNDIsIDE0LCAyNSwgCisgICAgNSwgNzQsIDI0MiwgMTQsIDI1LCA1LCA2OSwgMjQyLCAxNCwgNSwgMjI2LCA1MywgMjI1LCAxMjksIDIxOSwgMTU3LCAyMjQsIAorICAgIDE0MywgMjI1LCAxMjksIDUyLCAyMjQsIDE0MywgMjUxLCAxMjgsIDEsIDYxLCAyNTEsIDEyOCwgMSwgNzQsIDI1MSwgMTI4LCAKKyAgICAxLCA2OSwgMjUxLCAxMjgsIDEsIDE3NiwgMjUxLCAxMjgsIDEsIDI0MywgMTQyLCAyNTEsIDEyOCwgMSwgMjI5LCA4MiwgCisgICAgMjUxLCAxMjgsIDEsIDIxNywgMTA2LCAyNTEsIDEyOCwgMSwgMjQ4LCAyMjksIDI1MSwgMTI4LCAxLCAxOTgsIDI1MSwgMTI4LCAKKyAgICAxLCAxOTEsIDI1MSwgMTI4LCAxLCAyNTIsIDE5OSwgMjUxLCAxMjgsIDEsIDE4NiwgMjUxLCAxMjgsIDEsIDE5MiwgMjUxLCAKKyAgICAxMjgsIDEsIDIwNSwgMjUxLCAxMjgsIDEsIDIzMywgMTQxLCAyNTEsIDEyOCwgMSwgMjEyLCA2NSwgMjUxLCAxMjgsIDEsIAorICAgIDIwNiwgMjUxLCAxMjgsIDEsIDE2MiwgMjUxLCAxMjgsIDI1LCA1LCA3NCwgMjUxLCAxMjgsIDI1LCA1LCA2OSwgMjE3LCA4MywgCisgICAgMSwgNjEsIDIxNywgODMsIDEsIDc0LCAyMTcsIDgzLCAxLCA2OSwgMjE3LCA4MywgMSwgMTc2LCAyMTcsIDgzLCAxLCAyNDMsIAorICAgIDE0MiwgMjE3LCA4MywgMSwgMjI5LCA4MiwgMjE3LCA4MywgMSwgMjE3LCAxMDYsIDIxNywgODMsIDEsIDI0OCwgMjI5LCAKKyAgICAyMTcsIDgzLCAxLCAxOTgsIDIxNywgODMsIDEsIDE5MSwgMjE3LCA4MywgMSwgMjUyLCAxOTksIDIxNywgODMsIDEsIDE4NiwgCisgICAgMjE3LCA4MywgMSwgMTkyLCAyMTcsIDgzLCAxLCAyMzMsIDE0MSwgMjE3LCA4MywgMSwgMjEyLCA2NSwgMjE3LCA4MywgMSwgCisgICAgMjA2LCAyMTcsIDgzLCAyNSwgNSwgNzQsIDIxNywgODMsIDI1LCA1LCA2OSwgNzAsIDEsIDE3NiwgNzAsIDEsIDIzNCwgMTM4LCAKKyAgICA3MCwgMSwgMjM0LCAzNCwgNzAsIDEsIDIzNCwgMTExLCA3MCwgMSwgMjI5LCA5LCA3MCwgMSwgMjUxLCA0MSwgNzAsIDEsIAorICAgIDI1MCwgMTY1LCA3MCwgMSwgMjQ5LCAyNDYsIDcwLCAxLCAyNTAsIDk0LCA3MCwgMSwgMjI3LCAxMzgsIDcwLCAxLCAyNDgsIAorICAgIDIyOSwgNzAsIDEsIDIxNSwgMTQ1LCA3MCwgMSwgMjQ3LCAxNTMsIDcwLCAxLCAyMTUsIDE0MCwgNzAsIDEsIDIyOCwgODUsIAorICAgIDcwLCAxLCAyMTcsIDEwNiwgNzAsIDEsIDIxNiwgMjA5LCA3MCwgMSwgMTEyLCA3MCwgMSwgMjE2LCAxNTcsIDcwLCAxLCAKKyAgICAyMjgsIDc5LCA3MCwgMSwgMjUyLCAxOTksIDcwLCAxLCAyMjUsIDE1MCwgNzAsIDEsIDIyNSwgMTksIDcwLCAxLCAyMjUsIAorICAgIDEyNCwgNzAsIDEsIDIzMCwgMTY2LCA3MCwgMSwgMjEwLCAyNDQsIDcwLCAxLCAyMjIsIDIxMywgNzAsIDEsIDIzMiwgMTYyLCAKKyAgICA3MCwgMSwgMjEzLCAxMzgsIDcwLCAxLCAyMjAsIDEwNCwgNzAsIDEsIDIxOCwgMTg2LCA3MCwgMSwgMjA2LCA3MCwgMSwgCisgICAgMTYyLCA3MCwgMSwgMjMzLCAxNDEsIDcwLCAxLCAyMjQsIDkxLCA3MCwgMjM1LCAyNTAsIDI1LCAyMjQsIDc3LCA3MCwgMjM1LCAKKyAgICAyNTAsIDI1LCAyMjQsIDkwLCA3MCwgMjM1LCAyNTAsIDI1LCAyMjQsIDU2LCA3MCwgMjM1LCAyNTAsIDI1LCAyMjQsIDUxLCAKKyAgICA3MCwgMjM1LCAyNTAsIDI1LCAyMjQsIDMzLCA3MCwgMjM1LCAyNTAsIDI1LCAyMjQsIDUsIDcwLCAyMzUsIDI1MCwgMjUsIAorICAgIDIyMywgMjQ5LCA3MCwgMjM1LCAyNTAsIDI1LCAyMjMsIDI0OCwgNzAsIDIzNSwgMjUwLCAyNSwgMjIyLCAxMDIsIDcwLCAKKyAgICAyMzUsIDI1MCwgMjUsIDIyMiwgOTUsIDcwLCAyMzUsIDI1MCwgMjUsIDIzMiwgNjcsIDcwLCAyMzUsIDI1MCwgMjUsIDIzMiwgCisgICAgNTcsIDcwLCAyMzUsIDI1MCwgMjUsIDIyNCwgNzIsIDcwLCAyMzUsIDI1MCwgMjUsIDIyNCwgODMsIDcwLCAyMzUsIDI1MCwgCisgICAgMjUsIDIyNCwgNDEsIDIxNSwgNDksIDExMSwgNzAsIDIzNSwgMjUwLCAyNSwgMjI0LCA0MSwgMjE1LCA0OSwgMTA1LCA3MCwgCisgICAgMjM1LCAyNTAsIDI1LCAyMjQsIDczLCA3MCwgMjUsIDIzNSwgMjM2LCAyNTQsIDUzLCA3MCwgMjUsIDIzNSwgMjM2LCAyNTUsIAorICAgIDgyLCA3MCwgMjUsIDUsIDI1NSwgODIsIDcwLCAyNSwgNSwgNzQsIDcwLCAyNSwgNSwgMjM2LCA0MCwgNzAsIDI1LCA1LCAKKyAgICAyMTEsIDExNywgNzAsIDI1LCA1LCAyMTAsIDE2OSwgNzAsIDI1LCA1LCA2OSwgNzAsIDI1LCA1LCAyMTQsIDExOCwgNzAsIAorICAgIDI1LCA1LCAyMTQsIDIyOSwgNzAsIDI1LCA1LCAyMjYsIDIzOCwgNzAsIDI1LCA1LCAxOTIsIDcwLCAyNSwgNSwgMjM2LCA2NywgCisgICAgNzAsIDI1LCA1LCA3NiwgNzAsIDI1LCA1LCAyNTQsIDI1MiwgNzAsIDI1LCA1LCAyNTQsIDIxMCwgNzAsIDI1LCA1LCAyMjYsIAorICAgIDE4NywgNzAsIDI1LCA1LCAyNTMsIDIwMCwgNzAsIDUsIDIyOCwgMjExLCA3MCwgNSwgMjIzLCAxMjksIDcwLCA1LCAyMTAsIAorICAgIDE4MCwgNzAsIDUsIDIzMCwgNTcsIDcwLCA1LCAyMTUsIDIxNCwgNzAsIDUsIDI1MiwgMTUxLCA3MCwgNSwgMjIyLCAyMDgsIAorICAgIDcwLCA1LCAyMTYsIDQxLCA3MCwgNSwgMjM0LCAyNDcsIDcwLCA1LCAyNTQsIDIxMiwgNzAsIDUsIDIyMSwgMjQ2LCAyMjEsIAorICAgIDI0MCwgNzAsIDUsIDIxMywgMTQ5LCA3MCwgNSwgMjQ5LCAyNDAsIDcwLCA1LCAyNTIsIDEyNSwgNzAsIDUsIDIzNCwgMTMxLCAKKyAgICA3MCwgNSwgMjUyLCAxNDUsIDcwLCA1LCAyNTEsIDE3LCAyMjUsIDc1LCAyMzMsIDE5MywgNzAsIDUsIDIzMywgMzYsIDIxNiwgCisgICAgMTgsIDcwLCA1LCAyNTIsIDI4LCA3MCwgNSwgMjI1LCAxMjYsIDIzMCwgMTA0LCA3MCwgNSwgMjM0LCAxNSwgNzAsIDI0OSwgCisgICAgMTA2LCAxNiwgMjIzLCAzMSwgNzAsIDUsIDI1MywgMTgyLCA3MCwgNSwgMjUzLCAyMDMsIDcwLCAyMSwgMjEwLCA4NiwgNzAsIAorICAgIDIxLCAxMTEsIDcwLCAyMSwgMTA1LCA3MCwgMjEsIDE1OCwgNzAsIDIxLCAxNjEsIDcwLCAyMSwgMTkwLCA3MCwgMjEsIDE5NSwgCisgICAgNzAsIDIxLCAxOTksIDcwLCAyMSwgMTk2LCA3MCwgMjEsIDIwMSwgNzAsIDE2LCAyMzMsIDM2LCAyNTMsIDIwNSwgMjE5LCAKKyAgICA0NSwgNzAsIDE2LCAyMzMsIDM2LCAyNTMsIDIwNSwgMjMwLCA3NiwgNzAsIDE2LCAyMzMsIDM2LCAyNTMsIDIwNSwgMjI1LCAKKyAgICA3NCwgNzAsIDE2LCAyMzMsIDM2LCAyNTMsIDIwNSwgMjUyLCA1NywgNzAsIDE2LCAyMzMsIDM2LCAyNTMsIDIwNSwgMjUxLCAKKyAgICAxMTEsIDcwLCAxNiwgMjMzLCAzNiwgMjUzLCAyMDUsIDIyNCwgMjE4LCA3MCwgMTYsIDIzMywgMzYsIDI1MywgMjA1LCAyMjQsIAorICAgIDIxMiwgNzAsIDE2LCAyMzMsIDM2LCAyNTMsIDIwNSwgMjI0LCAyMTAsIDcwLCAxNiwgMjMzLCAzNiwgMjUzLCAyMDUsIDIyNCwgCisgICAgMjE2LCA3MCwgMTYsIDIzMywgMzYsIDI1MywgMjA1LCAyMjQsIDIxNCwgODMsIDI1MSwgMjQ0LCA4MywgMjQ1LCAxNzEsIDgzLCAKKyAgICAyNDksIDIyNywgODMsIDI0MywgMjM2LCAyMTgsIDEzMSwgODMsIDI0OSwgMjM0LCA4MywgMjQ0LCAxOSwgMjQ3LCAxMjYsIAorICAgIDgzLCAyMTYsIDQwLCAyMTksIDU0LCAyNDAsIDE3NSwgODMsIDIxOSwgMTkyLCAzLCAyNTEsIDE4MCwgMjMxLCAxNTksIDgzLCAKKyAgICAyMzEsIDE4OCwgMjQ5LCAyMjcsIDgzLCAyMzEsIDE4OCwgMjQzLCAyMzYsIDIxOCwgMTMxLCA4MywgMjI4LCAxOTYsIDgzLCAKKyAgICAyNDQsIDUsIDQ1LCAyMjEsIDE1OSwgMTExLCA4MywgMjQ0LCA1LCA0NSwgMjIxLCAxNTksIDEwNSwgODMsIDI0NCwgNSwgNDUsIAorICAgIDIyMSwgMTU5LCAxNTgsIDgzLCAyNSwgMjIwLCAxMzksIDgzLCAyMSwgMjEwLCA4NiwgODMsIDIxLCAxMTEsIDgzLCAyMSwgCisgICAgMTA1LCA4MywgMjEsIDE1OCwgODMsIDIxLCAxNjEsIDgzLCAyMSwgMTkwLCA4MywgMjEsIDE5NSwgODMsIDIxLCAxOTksIDgzLCAKKyAgICAyMSwgMTk2LCA4MywgMjEsIDIwMSwgODMsIDEsIDYxLCA4MywgMSwgNzYsIDgzLCAxLCA3NCwgODMsIDEsIDc4LCA4MywgMSwgCisgICAgNjksIDgzLCAxLCAyMjYsIDIzOCwgODMsIDEsIDIxNCwgMjE0LCA4MywgMSwgMjQ1LCAyMTcsIDgzLCAxLCAxOTgsIDgzLCAxLCAKKyAgICAyNTQsIDEyMywgODMsIDEsIDI1MiwgMTk5LCA4MywgMSwgMTkxLCA4MywgMSwgMjI0LCA5MSwgODMsIDEsIDI0MywgMTQyLCAKKyAgICA4MywgMSwgMTg2LCA4MywgMSwgMjMzLCAxNDEsIDgzLCAxLCAyMDYsIDgzLCAxLCAyMjAsIDEwNCwgODMsIDEsIDIxNywgCisgICAgMTA2LCA4MywgMSwgMjQ4LCAyMjksIDgzLCAxLCAyNTAsIDE2NSwgODMsIDEsIDIzNSwgMTQ3LCA4MywgMSwgMTkyLCA4MywgCisgICAgMSwgMjA1LCA4MywgMSwgMjEyLCA2NSwgODMsIDEsIDI0NCwgMjA0LCA4MywgMSwgMTc2LCA4MywgMSwgMjM0LCAxMzgsIDgzLCAKKyAgICAxLCAyMTUsIDE4NCwgODMsIDEsIDIxMCwgMTE2LCA4MywgMSwgMjQyLCA1MywgODMsIDEsIDIxMCwgMTYsIDgzLCAxLCAyMzMsIAorICAgIDQsIDgzLCAxLCAyMTAsIDY5LCA4MywgMSwgMjUwLCAxMTgsIDgzLCAxLCAyMTYsIDQwLCAyMDAsIDI1LCA1MCwgODMsIDEsIAorICAgIDIxNiwgNDAsIDc2LCA4MywgMSwgMjE2LCA0MCwgNzQsIDgzLCAxLCAyMTYsIDQwLCA3OCwgODMsIDEsIDIxNiwgNDAsIDY5LCAKKyAgICA4MywgMSwgMjE2LCA0MCwgMjI2LCAyMzgsIDgzLCAxLCAyMTYsIDQwLCAyMTQsIDIxNCwgODMsIDEsIDIxNiwgNDAsIDI1NCwgCisgICAgMTIzLCA4MywgMSwgMjE2LCA0MCwgMjUyLCAxOTksIDgzLCAxLCAyMTYsIDQwLCAxOTEsIDgzLCAxLCAyMTYsIDQwLCAyMjQsIAorICAgIDkxLCA4MywgMSwgMjE2LCA0MCwgMjQzLCAxNDIsIDgzLCAxLCAyMTYsIDQwLCAxODYsIDgzLCAxLCAyMTYsIDQwLCAyMTcsIAorICAgIDEwNiwgODMsIDEsIDIxNiwgNDAsIDI0OCwgMjI5LCA4MywgMSwgMjE2LCA0MCwgMjUwLCAxNjUsIDgzLCAxLCAyMTYsIDQwLCAKKyAgICAyMzUsIDE0NywgODMsIDEsIDIxNiwgNDAsIDIxNSwgMTg0LCA4MywgMSwgMjE2LCA0MCwgMTkyLCA4MywgMSwgMjE2LCA0MCwgCisgICAgMjEyLCA2NSwgODMsIDEsIDIxNiwgNDAsIDE3NiwgODMsIDEsIDIxNiwgNDAsIDI0MywgMTM5LCA4MywgMSwgMjE2LCA0MCwgCisgICAgMjQyLCA1MywgODMsIDEsIDIxNiwgNDAsIDIzNSwgMTEzLCA4MywgMSwgMjE2LCA0MCwgMjI4LCAyMzYsIDgzLCAxLCAyMTYsIAorICAgIDQwLCAyNDYsIDQ2LCA4MywgMSwgMjE5LCAxOTIsIDc2LCA4MywgMSwgMjE5LCAxOTIsIDc0LCA4MywgMSwgMjE5LCAxOTIsIAorICAgIDIzNSwgMTU4LCA4MywgMSwgMjE5LCAxOTIsIDIxNCwgMjE0LCA4MywgMSwgMjE5LCAxOTIsIDY5LCA4MywgMSwgMjE5LCAKKyAgICAxOTIsIDI1NCwgMTIzLCA4MywgMSwgMjE5LCAxOTIsIDE3NiwgODMsIDEsIDIxOSwgMTkyLCAyNDMsIDE0MiwgODMsIDEsIAorICAgIDIxOSwgMTkyLCAxNjIsIDgzLCAxLCAyMTksIDE5MiwgMTkxLCA4MywgMSwgMjE5LCAxOTIsIDIyMCwgMTA0LCA4MywgMSwgCisgICAgMjE5LCAxOTIsIDIxNywgMTA2LCA4MywgMSwgMjE5LCAxOTIsIDI0OCwgMjI5LCA4MywgMSwgMjE5LCAxOTIsIDIzNSwgMTQ3LCAKKyAgICA4MywgMSwgMjE5LCAxOTIsIDI0NCwgMjA0LCA4MywgMSwgMjE5LCAxOTIsIDI0MywgMTM5LCA4MywgMSwgMjE5LCAxOTIsIAorICAgIDI0MiwgNTMsIDgzLCAxLCAyMTksIDE5MiwgMjE1LCAxODQsIDgzLCAxLCAyMTksIDE5MiwgMjEwLCAxMTYsIDgzLCAxLCAKKyAgICAyMTksIDE5MiwgMjIzLCAxODcsIDgzLCAxLCAyMTksIDE5MiwgMjUwLCAxNjUsIDgzLCAxLCAyMTksIDE5MiwgMjEwLCA4MiwgCisgICAgODMsIDEsIDIzMSwgMTg4LCA3NCwgODMsIDEsIDIzMSwgMTg4LCAxNzYsIDgzLCAxLCAyMzEsIDE4OCwgMjA1LCA4MywgMSwgCisgICAgMjMxLCAxODgsIDI0NCwgMjA0LCA4MywgMSwgMjMxLCAxODgsIDIxMCwgODIsIDgzLCAxLCAyNTQsIDE3MSwgMjQzLCAxMjMsIAorICAgIDI1NCwgODQsIDExMSwgODMsIDEsIDI1NCwgMTcxLCAyNDMsIDEyMywgMjEzLCAxNDgsIDExMSwgODMsIDEsIDI1NCwgMTcxLCAKKyAgICAyNDMsIDEyMywgMjQ4LCAxOTQsIDgzLCAxLCAyNTQsIDE3MSwgMjQzLCAxMjMsIDIxNCwgMjI0LCA4MywgMSwgMjU0LCAxNzEsIAorICAgIDI0MywgMTIzLCAyMzUsIDIwMCwgMjE0LCAyMjQsIDgzLCAxLCAyNTQsIDE3MSwgMjQzLCAxMjMsIDI1MiwgMTYzLCA4MywgMSwgCisgICAgMjU0LCAxNzEsIDI0MywgMTIzLCAxMzQsIDI1MiwgMTYzLCA4MywgMSwgMjU0LCAxNzEsIDI0MywgMTIzLCA2MSwgODMsIDEsIAorICAgIDI1NCwgMTcxLCAyNDMsIDEyMywgNzQsIDgzLCAxLCAyNTQsIDE3MSwgMjQzLCAxMjMsIDE3NiwgODMsIDEsIDI1NCwgMTcxLCAKKyAgICAyNDMsIDEyMywgMjI5LCA4MiwgODMsIDEsIDI1NCwgMTcxLCAyNDMsIDEyMywgMjUxLCA0MSwgODMsIDEsIDI1NCwgMTcxLCAKKyAgICAyNDMsIDEyMywgMjE1LCAxNTcsIDgzLCAxLCAyNTQsIDE3MSwgMjQzLCAxMjMsIDIxNSwgMTQ1LCA4MywgMSwgMjU0LCAxNzEsIAorICAgIDI0MywgMTIzLCAyNDgsIDE0MywgODMsIDEsIDI1NCwgMTcxLCAyNDMsIDEyMywgMjI4LCAxMTUsIDgzLCAxLCAyNTQsIDE3MSwgCisgICAgMjQzLCAxMjMsIDIxNywgMTA2LCA4MywgMSwgMjU0LCAxNzEsIDI0MywgMTIzLCAyNDgsIDIyOSwgODMsIDEsIDI1NCwgMTcxLCAKKyAgICAyNDMsIDEyMywgMTkxLCA4MywgMSwgMjU0LCAxNzEsIDI0MywgMTIzLCAyMjUsIDE1MCwgODMsIDEsIDI1NCwgMTcxLCAyNDMsIAorICAgIDEyMywgMjE4LCAyMjUsIDgzLCAxLCAyNTQsIDE3MSwgMjQzLCAxMjMsIDIxMCwgODIsIDgzLCAxLCAyNTQsIDE3MSwgMjQzLCAKKyAgICAxMjMsIDIxMCwgMTE2LCA4MywgMSwgMjU0LCAxNzEsIDI0MywgMTIzLCAyNTQsIDIxOCwgODMsIDEsIDIxNiwgNDAsIDI1NCwgCisgICAgMTcxLCAyNDMsIDEyMywgMjE3LCAxMDYsIDgzLCAxLCAyMTYsIDQwLCAyNTQsIDE3MSwgMjQzLCAxMjMsIDIxMCwgODIsIDgzLCAKKyAgICAxLCAyMzEsIDE4OCwgMjU0LCAxNzEsIDI0MywgMTIzLCAyNDMsIDAsIDgzLCAxLCAyMzEsIDE4OCwgMjU0LCAxNzEsIDI0MywgCisgICAgMTIzLCAyMjksIDgyLCA4MywgMSwgMjMxLCAxODgsIDI1NCwgMTcxLCAyNDMsIDEyMywgMjUxLCA0MSwgODMsIDEsIDIzMSwgCisgICAgMTg4LCAyNTQsIDE3MSwgMjQzLCAxMjMsIDIzNSwgMTIwLCA4MywgMSwgMjMxLCAxODgsIDI1NCwgMTcxLCAyNDMsIDEyMywgCisgICAgMjE1LCAxNTcsIDgzLCAxLCAyMzEsIDE4OCwgMjU0LCAxNzEsIDI0MywgMTIzLCAyNDgsIDEyNywgODMsIDEsIDIzMSwgMTg4LCAKKyAgICAyNTQsIDE3MSwgMjQzLCAxMjMsIDIxNywgMTA2LCA4MywgMSwgMjMxLCAxODgsIDI1NCwgMTcxLCAyNDMsIDEyMywgMjQ4LCAKKyAgICAzMywgODMsIDEsIDIzMSwgMTg4LCAyNTQsIDE3MSwgMjQzLCAxMjMsIDIxOCwgMjI1LCA4MywgMSwgMjMxLCAxODgsIDI1NCwgCisgICAgMTcxLCAyNDMsIDEyMywgMjQ5LCA4MCwgODMsIDEsIDIzMSwgMTg4LCAyNTQsIDE3MSwgMjQzLCAxMjMsIDIxMCwgODIsIDgzLCAKKyAgICAxLCAyMzEsIDE4OCwgMjU0LCAxNzEsIDI0MywgMTIzLCAyMTAsIDExNiwgODMsIDEsIDI1NCwgMTcxLCAyNDMsIDEyMywgCisgICAgMTYzLCA2OSwgODMsIDEsIDI1NCwgMTcxLCAyNDMsIDEyMywgMTYzLCAxOTIsIDgzLCAxLCAyMzEsIDE4OCwgMjU0LCAxNzEsIAorICAgIDI0MywgMTIzLCAyNTIsIDI2LCA4MywgMSwgMjU0LCAxNzEsIDI0MywgMTIzLCAyNDgsIDIxOSwgODMsIDEsIDIzMSwgMTg4LCAKKyAgICAyNTQsIDE3MSwgMjQzLCAxMjMsIDIzMywgNCwgMTgsIDE5LCAyMjYsIDExMywgMTgsIDE5LCAyNTMsIDE3NSwgMTgsIDE5LCAKKyAgICAyNTUsIDM3LCAxOCwgMTksIDIxMiwgMjUsIDE4LCAxOSwgMjI0LCAyMjQsIDE4LCAxOSwgMjI1LCAyMzMsIDE4LCAxOSwgCisgICAgMjI0LCAxMDgsIDE4LCAxOSwgMjE3LCAzMiwgMTgsIDE5LCAyMzQsIDE5NSwgMTgsIDE5LCAyMzMsIDE4NSwgMTgsIDE5LCAKKyAgICAyMzEsIDEzNywgMTgsIDE5LCAyMjgsIDQyLCAxOCwgMTksIDIyOSwgMTg2LCAxOCwgMTksIDIzMywgNzQsIDE4LCAxOSwgCisgICAgMjE5LCAyNCwgMTgsIDE5LCAyMjEsIDIxMywgMTgsIDE5LCAyMTksIDIzNCwgMTgsIDE5LCAyMjAsIDY4LCAxOCwgMTksIAorICAgIDIxOSwgMjAzLCAxOCwgMTksIDIxMCwgMjIwLCAxOCwgMTksIDIxMSwgNTIsIDE4LCAxOSwgMjIzLCAxMzcsIDE4LCAxOSwgCisgICAgMjI3LCAxNzUsIDE4LCAxOSwgMjI2LCAyMjAsIDIyNywgMTc1LCAxOCwgMTksIDIyNywgMTc0LCAxOCwgMTksIDIyNiwgMjIwLCAKKyAgICAyMjcsIDE3NCwgMTgsIDE5LCAyMjcsIDE3MywgMTgsIDE5LCAyMjYsIDIyMCwgMjI3LCAxNzMsIDE4LCAxOSwgMjI3LCAxNzIsIAorICAgIDE4LCAxOSwgMjI2LCAyMjAsIDIyNywgMTcyLCAxOCwgMTksIDIyMiwgMTA3LCAxOCwgMTksIDIyMiwgMTA2LCAxOCwgMTksIAorICAgIDIyMiwgMTA1LCAxOCwgMTksIDIyMiwgMTA0LCAxOCwgMTksIDIyMiwgMTAzLCAxOCwgMTksIDIyMiwgMTExLCAxOCwgMTksIAorICAgIDIyNiwgMjIwLCAyMjYsIDEwOSwgMTgsIDE5LCAyMjYsIDIyMCwgMjE3LCAxNTMsIDE4LCAxOSwgMjI2LCAyMjAsIDIzNSwgCisgICAgMjksIDE4LCAxOSwgMjI2LCAyMjAsIDI1MSwgNzQsIDE4LCAxOSwgMjI2LCAyMjAsIDE5NCwgMTgsIDE5LCAyMjYsIDIyMCwgCisgICAgMjMwLCAzMCwgMTgsIDE5LCAyMjYsIDIyMCwgMjIyLCA5MywgMTgsIDE5LCAyMjYsIDIyMCwgMjIwLCAxMDYsIDE4LCAxOSwgCisgICAgMjQ1LCAyMjcsIDIxMiwgOTgsIDE4LCAxOSwgMjEyLCA3LCAyMTIsIDk4LCAxOCwgMTksIDQwLCA0LCAyMjIsIDIzNiwgMTgsIAorICAgIDE5LCA0MCwgMjIzLCAxNjAsIDI0NywgMTI4LCAxOCwgMTksIDIyMywgMjI2LCAyMjIsIDEwOCwgMTgsIDE5LCAxNTksIDIzMiwgCisgICAgMTMzLCAxOCwgMTksIDE1OSwgMjMzLCAxNDAsIDE4LCAxOSwgMjE2LCAxMjcsIDE4LCAxOSwgMjE2LCAxMjksIDE4LCAxOSwgCisgICAgMjE1LCAxMzcsIDE4LCAxOSwgMjE1LCAxMzksIDE4LCAxOSwgMjE1LCAxNDQsIDE4LCAxOSwgMjE2LCA1MCwgMTgsIDE5LCAKKyAgICAyMTYsIDUyLCAxOCwgMTksIDIyMSwgMjExLCAyMTksIDIwOCwgMTgsIDE5LCAyMjEsIDIxMSwgMjIwLCAzLCAxOCwgMTksIAorICAgIDIyMSwgMjExLCAyNDEsIDYwLCAxOCwgMTksIDczLCAyNDIsIDgwLCAxOCwgMTksIDczLCAyNDgsIDYwLCAyNDMsIDYyLCAxOCwgCisgICAgMTksIDczLCAyNDMsIDEzOSwgMTgsIDE5LCA3MywgMjQyLCA4NSwgMTgsIDE5LCAyMjEsIDIxMSwgMjM1LCAzOSwgMTgsIDE5LCAKKyAgICA3MywgMjM1LCAzNywgMTgsIDE5LCAyNTIsIDc2LCAyNDgsIDYwLCAxNTYsIDE4LCAxOSwgMjUyLCA3NiwgMjQ4LCA2MCwgCisgICAgMTUzLCAxOCwgMTksIDczLCAyNDgsIDU1LCAyMjIsIDkzLCAyMzIsIDIyOSwgMjEzLCAxMjIsIDIzMywgMTYsIDIzMiwgMjI5LCAKKyAgICAxLCAxNzYsIDIzMiwgMjI5LCAxLCAyMzQsIDEzOCwgMjMyLCAyMjksIDEsIDI0MywgMTQyLCAyMzIsIDIyOSwgMSwgMjQzLCAKKyAgICAwLCAyMzIsIDIyOSwgMSwgMjI5LCA4MiwgMjMyLCAyMjksIDEsIDI1MSwgNDEsIDIzMiwgMjI5LCAxLCAyNTAsIDE2NSwgCisgICAgMjMyLCAyMjksIDEsIDIzNSwgMTQ3LCAyMzIsIDIyOSwgMSwgMjM1LCAxMjAsIDIzMiwgMjI5LCAxLCAyMTEsIDcxLCAyMzIsIAorICAgIDIyOSwgMSwgMjE3LCAxMDYsIDIzMiwgMjI5LCAxLCAyMTYsIDIwOSwgMjMyLCAyMjksIDEsIDI0OCwgMjI5LCAyMzIsIDIyOSwgCisgICAgMSwgMjQ4LCAzMywgMjMyLCAyMjksIDEsIDE5OCwgMjMyLCAyMjksIDEsIDE5MSwgMjMyLCAyMjksIDEsIDIyNSwgMTUwLCAKKyAgICAyMzIsIDIyOSwgMSwgMjUyLCAxOTksIDIzMiwgMjI5LCAxLCAyNTIsIDI2LCAyMzIsIDIyOSwgMSwgMTg2LCAyMzIsIDIyOSwgCisgICAgMSwgMTkyLCAyMzIsIDIyOSwgMSwgMjA1LCAyMzIsIDIyOSwgMSwgMjMzLCAxNDEsIDIzMiwgMjI5LCAxLCAyMTIsIDY1LCAKKyAgICAyMzIsIDIyOSwgMSwgMjIwLCAxMDQsIDIzMiwgMjI5LCAxLCAyMTgsIDIyNSwgMjMyLCAyMjksIDEsIDIwNiwgMjMyLCAyMjksIAorICAgIDEsIDE2MiwgMjMyLCAyMjksIDI1LCA1LCA2MSwgMjMyLCAyMjksIDI1LCA1LCA3NCwgMjMyLCAyMjksIDI1LCA1LCA2OSwgCisgICAgMjMyLCAyMjksIDI1LCA1LCAyNDUsIDIxNywgMjMyLCAyMjksIDI1LCA1LCAyNTQsIDIxMCwgMjMyLCAyMjksIDI1LCA1LCAKKyAgICAyMjYsIDE4NywgMjMyLCAyMjksIDI1LCA1LCAyNTMsIDIwMCwgMjMyLCAyMjksIDI1LCA1LCA3NiwgMjMyLCAyMjksIDI1LCAKKyAgICA1LCA3OCwgMjMyLCAyMjksIDIxOCwgNzQsIDEsIDE5MiwgMjMyLCAyMjksIDIxOCwgNzQsIDEsIDIwNSwgMjMyLCAyMjksIAorICAgIDIxOCwgNzQsIDEsIDIxMiwgNjUsIDIzMiwgMjI5LCA0LCAxLCAxNzYsIDIzMiwgMjI5LCA0LCAxLCAyMjksIDgyLCAyMzIsIAorICAgIDIyOSwgNCwgMSwgMjU0LCA4MywgMjMyLCAyMjksIDQsIDEsIDIxNywgMTA2LCAyMzIsIDIyOSwgNCwgMSwgMTk4LCAyMzIsIAorICAgIDIyOSwgNCwgMSwgMTkxLCAyMzIsIDIyOSwgNCwgMSwgMTg2LCAyMzIsIDIyOSwgNCwgMSwgMjA1LCAyMzIsIDIyOSwgNCwgMSwgCisgICAgMjMzLCAxNDEsIDIzMiwgMjI5LCA1LCAyMzAsIDk0LCAyMzIsIDIyOSwgNSwgMjM0LCAxNzcsIDIzMiwgMjI5LCA1LCAyMjIsIAorICAgIDM0LCAyMzIsIDIyOSwgNSwgMjMyLCAxMzMsIDIzMiwgMjI5LCAyNDUsIDM5LCA3OSwgMjMyLCAyMjksIDIyNCwgMTYsIDc5LCAKKyAgICAyMzIsIDIyOSwgMjEsIDIxMCwgODYsIDIzMiwgMjI5LCAyMSwgMTExLCAyMzIsIDIyOSwgMjEsIDEwNSwgMjMyLCAyMjksIAorICAgIDIxLCAxNTgsIDIzMiwgMjI5LCAyMSwgMTYxLCAyMzIsIDIyOSwgMjEsIDE5MCwgMjMyLCAyMjksIDIxLCAxOTUsIDIzMiwgCisgICAgMjI5LCAyMSwgMTk5LCAyMzIsIDIyOSwgMjEsIDE5NiwgMjMyLCAyMjksIDIxLCAyMDEsIDM5LCAyMzMsIDY1LCAxLCAxNzYsIAorICAgIDM5LCAyMzMsIDY1LCAxLCAyMTEsIDE2NSwgMzksIDIzMywgNjUsIDEsIDIyOSwgODIsIDM5LCAyMzMsIDY1LCAxLCAyMTUsIAorICAgIDE4NCwgMzksIDIzMywgNjUsIDEsIDIwNiwgMzksIDIzMywgNjUsIDEsIDE5MiwgMzksIDIzMywgNjUsIDEsIDIxNywgMTA2LCAKKyAgICAzOSwgMjMzLCA2NSwgMSwgMjE2LCAyMDksIDM5LCAyMzMsIDY1LCAxLCAyMzMsIDE0MSwgMzksIDIzMywgNjUsIDEsIDE5MSwgCisgICAgMzksIDIzMywgNjUsIDEsIDIyNSwgMTUwLCAzOSwgMjMzLCA2NSwgMSwgMTg2LCAzOSwgMjMzLCA2NSwgMSwgMjQ0LCAyMDQsIAorICAgIDM5LCAyMzMsIDY1LCAxLCAyMTQsIDI3LCAzOSwgMjMzLCA2NSwgMSwgMTYyLCAzOSwgMjMzLCA2NSwgMSwgMjI0LCA5MSwgCisgICAgMzksIDIzMywgNjUsIDEsIDIzNCwgMTM4LCAzOSwgMjMzLCA2NSwgMSwgMjE1LCAxNzYsIDM5LCAyMzMsIDY1LCAxLCAxOTgsIAorICAgIDM5LCAyMzMsIDY1LCAxLCA2MSwgMzksIDIzMywgNjUsIDEsIDc0LCAzOSwgMjMzLCA2NSwgMSwgMjQ1LCAyMTcsIDM5LCAKKyAgICAyMzMsIDY1LCAxLCAyNDUsIDIwNSwgMzksIDIzMywgNjUsIDEsIDY5LCAzOSwgMjMzLCA2NSwgMSwgMjI2LCAxODcsIDM5LCAKKyAgICAyMzMsIDY1LCAxLCA3OCwgMzksIDIzMywgNjUsIDEsIDIxNCwgMjE0LCAzOSwgMjMzLCA2NSwgMSwgNzYsIDM5LCAyMzMsIAorICAgIDY1LCAxLCAyNTMsIDE5OCwgMzksIDIzMywgNjUsIDEsIDI1NCwgMjEwLCAzOSwgMjMzLCA2NSwgMSwgMjE2LCAyOSwgMzksIAorICAgIDIzMywgNjUsIDEsIDIxNiwgMjgsIDM5LCAyMzMsIDY1LCAxLCAyMTYsIDI3LCAzOSwgMjMzLCA2NSwgMSwgMjE2LCAyNiwgCisgICAgMzksIDIzMywgNjUsIDEsIDIxNiwgMjUsIDE2NiwgMzksIDE3MywgMSwgMTI1LCAyMjQsIDkxLCAxNjYsIDM5LCAxNzMsIDEsIAorICAgIDEyMSwgMjI0LCA5MSwgMTY2LCAzOSwgMTczLCAxLCAxMjUsIDE3NiwgMTY2LCAzOSwgMTczLCAxLCAxMjUsIDIxMSwgMTY1LCAKKyAgICAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgMjI5LCA4MiwgMTY2LCAzOSwgMTczLCAxLCAxMjEsIDE3NiwgMTY2LCAzOSwgMTczLCAKKyAgICAxLCAxMjEsIDIxMSwgMTY1LCAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgMjI5LCA4MiwgMTY2LCAzOSwgMTczLCAxLCAxMjUsIAorICAgIDIxNSwgMTg0LCAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgMjA2LCAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgMTkyLCAxNjYsIDM5LCAKKyAgICAxNzMsIDEsIDEyMSwgMjE1LCAxODQsIDE2NiwgMzksIDE3MywgMSwgMTIxLCAyMDYsIDE2NiwgMzksIDE3MywgMSwgMTIxLCAKKyAgICAxOTIsIDE2NiwgMzksIDE3MywgMSwgMTI1LCAyMTcsIDEwNiwgMTY2LCAzOSwgMTczLCAxLCAxMjUsIDIxNiwgMjA5LCAxNjYsIAorICAgIDM5LCAxNzMsIDEsIDEyNSwgMTk4LCAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgMjE3LCAxMDYsIDE2NiwgMzksIDE3MywgMSwgCisgICAgMTIxLCAyMTYsIDIwOSwgMTY2LCAzOSwgMTczLCAxLCAxMjEsIDE5OCwgMTY2LCAzOSwgMTczLCAxLCAxMjUsIDE5MSwgMTY2LCAKKyAgICAzOSwgMTczLCAxLCAxMjUsIDIyNSwgMTUwLCAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgMTg2LCAxNjYsIDM5LCAxNzMsIDEsIAorICAgIDEyMSwgMTkxLCAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgMjI1LCAxNTAsIDE2NiwgMzksIDE3MywgMSwgMTIxLCAxODYsIDE2NiwgCisgICAgMzksIDE3MywgMSwgMTI1LCAyNDQsIDIwNCwgMTY2LCAzOSwgMTczLCAxLCAxMjUsIDIxNCwgMjcsIDE2NiwgMzksIDE3MywgCisgICAgMSwgMTI1LCAyMzMsIDE0MSwgMTY2LCAzOSwgMTczLCAxLCAxMjEsIDI0NCwgMjA0LCAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgCisgICAgMjE0LCAyNywgMTY2LCAzOSwgMTczLCAxLCAxMjEsIDIzMywgMTQxLCAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgMTYyLCAxNjYsIAorICAgIDM5LCAxNzMsIDEsIDEyNSwgMjQ4LCAyMjksIDE2NiwgMzksIDE3MywgMSwgMTI1LCAyNTIsIDE5OSwgMTY2LCAzOSwgMTczLCAKKyAgICAxLCAxMjEsIDE2MiwgMTY2LCAzOSwgMTczLCAxLCAxMjEsIDI0OCwgMjI5LCAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgMjUyLCAKKyAgICAxOTksIDE2NiwgMzksIDE3MywgMSwgMTI1LCAyMzMsIDE5MCwgMTY2LCAzOSwgMTczLCAxLCAxMjUsIDIxMSwgMTM4LCAxNjYsIAorICAgIDM5LCAxNzMsIDEsIDEyMSwgMjMzLCAxOTAsIDE2NiwgMzksIDE3MywgMSwgMTIxLCAyMTEsIDEzOCwgMTY2LCAzOSwgMTczLCAKKyAgICAxLCAxMjUsIDIxOCwgODMsIDE2NiwgMzksIDE3MywgMSwgMTIxLCAyMTgsIDgzLCAxNjYsIDM5LCAxNzMsIDI1LCA1LCAyNSwgCisgICAgMjE5LCAyNDEsIDE2NiwgMzksIDE3MywgMjUsIDUsIDI1NSwgODIsIDE2NiwgMzksIDE3MywgMjUsIDUsIDIzNiwgNDAsIAorICAgIDE2NiwgMzksIDE3MywgMjUsIDUsIDY5LCAxNjYsIDM5LCAxNzMsIDI1LCA1LCAyMTQsIDExOCwgMTY2LCAzOSwgMTczLCAyNSwgCisgICAgNSwgNzYsIDE2NiwgMzksIDE3MywgMjUsIDUsIDI1NCwgMjUyLCAxNjYsIDM5LCAxNzMsIDI1LCA1LCA3OCwgMTY2LCAzOSwgCisgICAgMTczLCAyNSwgNSwgMjI3LCA0LCAxNjYsIDM5LCAxNzMsIDI1LCA1LCAyMTQsIDIxNCwgMTY2LCAzOSwgMTczLCAyNSwgNSwgCisgICAgMjUzLCAxNzUsIDE2NiwgMzksIDE3MywgMjUsIDUsIDI1NSwgMzcsIDE2NiwgMzksIDE3MywgMjUsIDUsIDIxNCwgMTExLCAKKyAgICAxNjYsIDM5LCAxNzMsIDI1LCA1LCAyMjYsIDExMywgMTY2LCAzOSwgMTczLCAyNSwgNSwgMjI3LCAxLCAxNjYsIDM5LCAxNzMsIAorICAgIDI1LCA1LCAyMTQsIDIxMCwgMTY2LCAzOSwgMTczLCAyNSwgNSwgMjM1LCAxNTgsIDE2NiwgMzksIDE3MywgMSwgNDAsIDIxNCwgCisgICAgMTA1LCAxNjYsIDM5LCAxNzMsIDEsIDQwLCAyMjksIDg0LCAxNjYsIDM5LCAxNzMsIDEsIDQwLCAyMzAsIDMwLCAxNjYsIDM5LCAKKyAgICAxNzMsIDEsIDQwLCAxOTQsIDE2NiwgMzksIDE3MywgMSwgNDAsIDIzNSwgMjksIDE2NiwgMzksIDE3MywgMSwgNDAsIDI0OSwgCisgICAgNjgsIDE2NiwgMzksIDE3MywgMSwgNDAsIDI1MywgMTY2LCAxNjYsIDM5LCAxNzMsIDEzOCwgMjMxLCAxNjMsIDE2NiwgMzksIAorICAgIDE3MywgMTM4LCAyMzEsIDE2MiwgMTY2LCAzOSwgMTczLCAyMSwgMjEwLCA4NiwgMTY2LCAzOSwgMTczLCAyMSwgMTExLCAKKyAgICAxNjYsIDM5LCAxNzMsIDIxLCAxMDUsIDE2NiwgMzksIDE3MywgMjEsIDE1OCwgMTY2LCAzOSwgMTczLCAyMSwgMTYxLCAxNjYsIAorICAgIDM5LCAxNzMsIDIxLCAxOTAsIDE2NiwgMzksIDE3MywgMjEsIDE5NSwgMTY2LCAzOSwgMTczLCAyMSwgMTk5LCAxNjYsIDM5LCAKKyAgICAxNzMsIDIxLCAxOTYsIDE2NiwgMzksIDE3MywgMjEsIDIwMSwgMTY2LCAzOSwgMTczLCA4OSwgMjEsIDExMSwgMTY2LCAzOSwgCisgICAgMTczLCA1LCAyMzMsIDEyNiwgMTY2LCAzOSwgMTczLCA1LCAyMzMsIDEyNSwgNzAsIDE2LCAyMjUsIDI0MCwgNzAsIDE2LCAKKyAgICAyMzAsIDc3LCAyMzQsIDMxLCA3MCwgMTYsIDIyNSwgNzUsIDIzNCwgMzEsIDcwLCAxNiwgMjUyLCA1OCwgMjM0LCAzMSwgNzAsIAorICAgIDE2LCAyNTEsIDExMiwgMjM0LCAzMSwgNzAsIDE2LCAyMjQsIDIxOSwgMjM0LCAzMSwgNzAsIDE2LCAyMjQsIDIxMywgMjM0LCAKKyAgICAzMSwgNzAsIDE2LCAyMjQsIDIxMSwgMjM0LCAzMSwgNzAsIDE2LCAyMjQsIDIxNywgMjM0LCAzMSwgNzAsIDE2LCAyMjQsIAorICAgIDIxNSwgMjM0LCAzMSwgNzAsIDE2LCAyNDgsIDE4MSwgMjM0LCAzMSwgNzAsIDE2LCAyNDgsIDE3NywgMjM0LCAzMSwgNzAsIAorICAgIDE2LCAyNDgsIDE3NiwgMjM0LCAzMSwgNzAsIDE2LCAyNDgsIDE3OSwgMjM0LCAzMSwgNzAsIDE2LCAyNDgsIDE3OCwgMjM0LCAKKyAgICAzMSwgNzAsIDE2LCAyNDgsIDE3NSwgMjM0LCAzMSwgNzAsIDE2LCAyMTUsIDg3LCA3MCwgMTYsIDIzMCwgNzcsIDIyMiwgCisgICAgMjA3LCA3MCwgMTYsIDIyNSwgNzUsIDIyMiwgMjA3LCA3MCwgMTYsIDI1MiwgNTgsIDIyMiwgMjA3LCA3MCwgMTYsIDI1MSwgCisgICAgMTEyLCAyMjIsIDIwNywgNzAsIDE2LCAyMjQsIDIxOSwgMjIyLCAyMDcsIDcwLCAxNiwgMjI0LCAyMTMsIDIyMiwgMjA3LCAKKyAgICA3MCwgMTYsIDIyNCwgMjExLCAyMjIsIDIwNywgNzAsIDE2LCAyMjQsIDIxNywgMjIyLCAyMDcsIDcwLCAxNiwgMjI0LCAyMTUsIAorICAgIDIyMiwgMjA3LCA3MCwgMTYsIDI0OCwgMTgxLCAyMjIsIDIwNywgNzAsIDE2LCAyNDgsIDE3NywgMjIyLCAyMDcsIDcwLCAxNiwgCisgICAgMjQ4LCAxNzYsIDIyMiwgMjA3LCA3MCwgMTYsIDI0OCwgMTc5LCAyMjIsIDIwNywgNzAsIDE2LCAyNDgsIDE3OCwgMjIyLCAKKyAgICAyMDcsIDcwLCAxNiwgMjQ4LCAxNzUsIDIyMiwgMjA3LCAyNTEsIDEyOSwgMSwgMTc2LCAyNTEsIDEyOSwgMSwgMjQzLCAxNDIsIAorICAgIDI1MSwgMTI5LCAxLCAyMjksIDgyLCAyNTEsIDEyOSwgMSwgMjI5LCAyNywgMjUxLCAxMjksIDEsIDE5MSwgMjUxLCAxMjksIAorICAgIDEsIDI1MiwgMTk5LCAyNTEsIDEyOSwgMSwgMTg2LCAyNTEsIDEyOSwgMSwgMjMwLCAxMTAsIDI1MSwgMTI5LCAxLCAyMTcsIAorICAgIDEwNiwgMjUxLCAxMjksIDEsIDI0OCwgMjI5LCAyNTEsIDEyOSwgMSwgMTk4LCAyNTEsIDEyOSwgMSwgMjI4LCA0MSwgMjUxLCAKKyAgICAxMjksIDEsIDI1MSwgNDEsIDI1MSwgMTI5LCAxLCAyMzUsIDE0NywgMjUxLCAxMjksIDEsIDIyNywgMTY5LCAyNTEsIDEyOSwgCisgICAgMSwgMjI3LCAxNjIsIDI1MSwgMTI5LCAxLCAxOTIsIDI1MSwgMTI5LCAxLCAyMDUsIDI1MSwgMTI5LCAxLCAyMzMsIDE0MSwgCisgICAgMjUxLCAxMjksIDEsIDIxNCwgMjcsIDI1MSwgMTI5LCAxLCAyMDYsIDI1MSwgMTI5LCAxLCA2MSwgMjUxLCAxMjksIDEsIAorICAgIDE2MiwgMjUxLCAxMjksIDI1LCA1LCA3NCwgMjUxLCAxMjksIDI1LCA1LCA2OSwgMjUxLCAxMjksIDI1LCA1LCA3NiwgMjUxLCAKKyAgICAxMjksIDI1LCA1LCA3OCwgMjUxLCAxMjksIDI1LCA1LCAyNTQsIDI1MiwgMjUxLCAxMjksIDIyNiwgNjQsIDI1MSwgMTI5LCAKKyAgICAyNDUsIDE1MSwgNjQsIDIyMSwgMTc0LCAzOSwgODksIDEsIDEyNSwgMTc2LCAzOSwgODksIDEsIDEyNSwgMjM0LCAxMzgsIAorICAgIDM5LCA4OSwgMSwgMTI1LCAyMzMsIDE3NywgMzksIDg5LCAxLCAxMjEsIDE3NiwgMzksIDg5LCAxLCAxMjEsIDIzMywgMTc3LCAKKyAgICAzOSwgODksIDEsIDEyMSwgMjM0LCAxMzgsIDM5LCA4OSwgMSwgMjI5LCA4MiwgMzksIDg5LCAxLCAxMjUsIDI1MSwgNDEsIAorICAgIDM5LCA4OSwgMSwgMTI1LCAyNTAsIDE2NSwgMzksIDg5LCAxLCAxMjEsIDI1MSwgNDEsIDM5LCA4OSwgMSwgMTIxLCAyMDYsIAorICAgIDM5LCA4OSwgMSwgMTIxLCAyNTAsIDE2NSwgMzksIDg5LCAxLCAyMjcsIDE2OSwgMzksIDg5LCAxLCAyMjMsIDE0MywgMzksIAorICAgIDg5LCAxLCAxMjUsIDIyMywgMTQxLCAzOSwgODksIDEsIDI0OCwgMjI5LCAzOSwgODksIDEsIDEyMSwgMjIzLCAxNDEsIDM5LCAKKyAgICA4OSwgMSwgMjIzLCAxNTIsIDM5LCA4OSwgMSwgMTI1LCAyMTcsIDEwNiwgMzksIDg5LCAxLCAxMjUsIDIxNiwgMjA5LCAzOSwgCisgICAgODksIDEsIDEyMSwgMjE3LCAxMDYsIDM5LCA4OSwgMSwgMTIxLCAyMTYsIDIwOSwgMzksIDg5LCAxLCAxOTgsIDM5LCA4OSwgCisgICAgMSwgMjUyLCAxOTksIDM5LCA4OSwgMSwgMTI1LCAxOTEsIDM5LCA4OSwgMSwgMTI1LCAyMjUsIDE1MCwgMzksIDg5LCAxLCAKKyAgICAxMjUsIDI0NCwgMjA0LCAzOSwgODksIDEsIDEyMSwgMTkxLCAzOSwgODksIDEsIDEyMSwgMjQ0LCAyMDQsIDM5LCA4OSwgMSwgCisgICAgMTIxLCAyMjUsIDE1MCwgMzksIDg5LCAxLCAxODYsIDM5LCA4OSwgMSwgMTIxLCAxOTIsIDM5LCA4OSwgMSwgMTI1LCAxOTIsIAorICAgIDM5LCA4OSwgMSwgMjA1LCAzOSwgODksIDEsIDIyMiwgMTM5LCAzOSwgODksIDEsIDIzMywgMTQxLCAzOSwgODksIDEsIDIzMiwgCisgICAgOTgsIDM5LCA4OSwgMSwgMjEyLCA2NSwgMzksIDg5LCAxLCAxMjUsIDIyMCwgMTA0LCAzOSwgODksIDEsIDEyNSwgMjE4LCAKKyAgICAyMjUsIDM5LCA4OSwgMSwgMTI1LCAyMDYsIDM5LCA4OSwgMSwgMTI1LCAxNjIsIDM5LCA4OSwgMSwgMjMyLCAxOTAsIDM5LCAKKyAgICA4OSwgMSwgNjEsIDM5LCA4OSwgMSwgMTIxLCAxNjIsIDM5LCA4OSwgMSwgNzQsIDM5LCA4OSwgMSwgMjM2LCA0MCwgMzksIAorICAgIDg5LCAxLCA2OSwgMzksIDg5LCAxLCAyMTQsIDExOCwgMzksIDg5LCAxLCAyNDUsIDIxNywgMzksIDg5LCAxLCAyMjYsIDE4NywgCisgICAgMzksIDg5LCAxLCAyMzMsIDEyNiwgMzksIDg5LCAxLCAyNDIsIDEzOSwgMjA2LCAzOSwgODksIDExNywgNSwgMTQ3LCAyMDUsIAorICAgIDM5LCA4OSwgMTE3LCA1LCAxNDcsIDIzMywgMTQxLCAzOSwgODksIDExNywgNSwgMjMzLCAxNDIsIDIxNywgNTksIDIzMywgCisgICAgMTE1LCAzOSwgODksIDUsIDIzMSwgMjA5LCAyMzQsIDIzNywgMjMzLCAxMTUsIDM5LCA4OSwgMTE3LCA1LCA0MCwgMjI5LCAKKyAgICA4MiwgMzksIDg5LCAxMTcsIDUsIDEyMSwgMTkxLCAzOSwgODksIDExNywgNSwgMTI1LCAyMjMsIDE0MiwgMTc3LCAxMjEsIAorICAgIDE5MSwgMzksIDg5LCAxMTcsIDUsIDE4NiwgMzksIDg5LCAxMTcsIDUsIDI1MiwgMTk5LCAzOSwgODksIDExNywgNSwgMjA2LCAKKyAgICAzOSwgODksIDUsIDIyMiwgMTIsIDM5LCA4OSwgMjUsIDUsIDYxLCAzOSwgODksIDI1LCA1LCAyMzEsIDIwOSwgMjIxLCAyMjgsIAorICAgIDM5LCA4OSwgMjUsIDUsIDI1NSwgODIsIDM5LCA4OSwgMjUsIDUsIDIxNywgNjUsIDI1NSwgODIsIDM5LCA4OSwgMjUsIDUsIAorICAgIDc0LCAzOSwgODksIDI1LCA1LCAyMzYsIDQwLCAzOSwgODksIDI1LCA1LCAyMTQsIDIxNCwgMzksIDg5LCAyNSwgNSwgMjE0LCAKKyAgICAxMTcsIDM5LCA4OSwgMjUsIDUsIDY5LCAzOSwgODksIDI1LCA1LCAyMTQsIDExOCwgMzksIDg5LCAyNSwgNSwgNzgsIDM5LCAKKyAgICA4OSwgMjUsIDUsIDIyNywgNSwgNTEsIDM5LCA4OSwgMjUsIDUsIDIyNiwgMTEzLCAzOSwgODksIDI1LCA1LCA3NiwgMzksIAorICAgIDg5LCAyNSwgNSwgMjU0LCAyNTIsIDM5LCA4OSwgMjUsIDUsIDIyNiwgMTg3LCAzOSwgODksIDI1LCA1LCAyNTQsIDIxMCwgCisgICAgMzksIDg5LCAyNSwgNSwgODksIDI1NCwgMjEwLCAzOSwgODksIDI1LCA1LCAyMjcsIDUsIDQ4LCAzOSwgODksIDUsIDIzMSwgCisgICAgMjA5LCAyMzQsIDIzNiwgMzksIDg5LCA1LCAyMTYsIDMwLCAzOSwgODksIDUsIDIxNiwgMjksIDM5LCA4OSwgNSwgMjM0LCAKKyAgICAxMDMsIDIxNiwgMjgsIDM5LCA4OSwgNSwgMjM0LCAxMDMsIDIxNiwgMjcsIDM5LCA4OSwgNSwgMjM0LCAxMDMsIDIxNiwgMjYsIAorICAgIDM5LCA4OSwgNSwgMjIzLCAxOTEsIDI0MiwgNTIsIDM5LCA4OSwgNSwgMjMxLCAyMDksIDIyMSwgMjU1LCAzOSwgODksIDUsIAorICAgIDIzNCwgMTAyLCAyMzQsIDIyMSwgMzksIDg5LCAzOCwgMjQ5LCAxMjMsIDI0NywgMTI4LCAzOSwgODksIDI0MSwgNTMsIDIxLCAKKyAgICAyMTAsIDg2LCAzOSwgODksIDI0MSwgNTMsIDIxLCAxMTEsIDM5LCA4OSwgMjQxLCA1MywgMjEsIDEwNSwgMzksIDg5LCAyNDEsIAorICAgIDUzLCAyMSwgMTU4LCAzOSwgODksIDI0MSwgNTMsIDIxLCAxNjEsIDM5LCA4OSwgMjQxLCA1MywgMjEsIDE5MCwgMzksIDg5LCAKKyAgICAyNDEsIDUzLCAyMSwgMTk1LCAzOSwgODksIDI0MSwgNTMsIDIxLCAxOTksIDM5LCA4OSwgMjQxLCA1MywgMjEsIDE5NiwgMzksIAorICAgIDg5LCAyNDEsIDUzLCAyMSwgMjAxLCAzOSwgODksIDg5LCAyMSwgMjEwLCA4NiwgMzksIDg5LCA4OSwgMjEsIDExMSwgMzksIAorICAgIDg5LCA4OSwgMjEsIDEwNSwgMzksIDg5LCA4OSwgMjEsIDE1OCwgMzksIDg5LCA4OSwgMjEsIDE2MSwgMzksIDg5LCA4OSwgCisgICAgMjEsIDE5MCwgMzksIDg5LCA4OSwgMjEsIDE5NSwgMzksIDg5LCA4OSwgMjEsIDE5OSwgMzksIDg5LCA4OSwgMjEsIDE5NiwgCisgICAgMzksIDg5LCA4OSwgMjEsIDIwMSwgMzksIDg5LCA1LCAyMTEsIDI0OSwgMzksIDg5LCA1LCAyMTEsIDI0OCwgMzksIDg5LCA1LCAKKyAgICAyMjEsIDIxNywgMzksIDg5LCA1LCAyMzQsIDE2NiwgMzksIDg5LCA1LCAyNDAsIDIzOSwgMzksIDg5LCA1LCAyNDcsIDE0MiwgCisgICAgMzksIDg5LCA1LCAyMjMsIDUyLCAyMjIsIDE4OSwgMjIzLCAxNTIsIDM5LCA4OSwgNSwgMjMxLCAyMDksIDIxMSwgNzIsIDM5LCAKKyAgICA4OSwgNSwgMjM1LCAxMiwgMzksIDg5LCA1LCAyMzUsIDExLCAzOSwgODksIDUsIDIyMSwgMjI0LCAzOSwgODksIDUsIDIyMSwgCisgICAgMjIzLCAzOSwgODksIDUsIDI0MiwgMTYsIDM5LCA4OSwgNSwgMjUxLCAzOCwgMTAyLCA1LCAyMTQsIDIwMCwgMjIzLCAzMywgCisgICAgMTAyLCA1LCAyMTQsIDIwMCwgMjUxLCA5LCAxMDIsIDUsIDI1MCwgMTk0LCAxMDIsIDUsIDIxOCwgMTYsIDEwMiwgNSwgMjUxLCAKKyAgICAyNDEsIDEwMiwgMSwgMjU0LCAxOTMsIDEwMiwgMSwgMjU0LCAxOTQsIDIxNywgMTQsIDEwMiwgMSwgMjM2LCAzNiwgMTAyLCAKKyAgICAxLCAyMzYsIDM3LCAyMTcsIDE0LCAxMDIsIDEsIDIxNCwgMjAzLCAxMDIsIDEsIDIxNCwgMjA0LCAyMTcsIDE0LCAxMDIsIDEsIAorICAgIDIyMywgMTkxLCAyMjMsIDgyLCAxMDIsIDEsIDIyMywgMTkxLCAyMjMsIDgzLCAyMTcsIDE0LCAxMDIsIDEsIDIzMywgMTQyLCAKKyAgICAyMzMsIDMwLCAxMDIsIDEsIDIzMywgMTQyLCAyMzMsIDMxLCAyMTcsIDE0LCAxMDIsIDEsIDI0NSwgMTg3LCAxMDIsIDEsIAorICAgIDI1NCwgMjA4LCAxMDIsIDEsIDIyNiwgMjE2LCAxMDIsIDEsIDIyNiwgMjE3LCAyMTcsIDE0LCAxMDIsIDEsIDE3NiwgMTAyLCAKKyAgICAxLCAyMzUsIDE5LCAyMzEsIDIxMiwgMTAyLCAxLCAyNDMsIDE0MiwgMTAyLCAxLCAyNDMsIDE0MywgMjQyLCAxNjgsIDEwMiwgCisgICAgMSwgMjI5LCA4MiwgMTAyLCAxLCAyNTEsIDQxLCAxMDIsIDEsIDI1MSwgNDIsIDIzMywgMTI5LCAxMDIsIDEsIDIzNSwgMTQ3LCAKKyAgICAxMDIsIDEsIDIzNSwgMTQ4LCAyMzUsIDEyNCwgMTAyLCAxLCAyMjcsIDE2OSwgMTAyLCAxLCAyMTcsIDEwNywgMjMzLCA4MiwgCisgICAgMTAyLCAxLCAyMTcsIDEwNywgMjMwLCA3MiwgMjMxLCAyMTIsIDEwMiwgMSwgMjQ4LCAyMzAsIDIzMCwgNzIsIDI1NCwgMTUzLCAKKyAgICAxMDIsIDEsIDI0OCwgMjMwLCAyMzAsIDcyLCAyMzEsIDIxMiwgMTAyLCAxLCAyMjksIDIzNCwgMjIzLCAxNTUsIDEwMiwgMSwgCisgICAgMjE3LCAxMDYsIDEwMiwgMSwgMjE3LCAxMDcsIDIxNywgMzYsIDEwMiwgMSwgMjQ4LCAyMjksIDEwMiwgMSwgMjQ4LCAyMzAsIAorICAgIDIzMSwgMjMwLCAxMDIsIDEsIDE5OCwgMTAyLCAxLCAxOTEsIDEwMiwgMSwgMjI2LCA5NCwgMjM0LCAyMzIsIDEwMiwgMSwgCisgICAgMjUyLCAxOTksIDEwMiwgMSwgMjUyLCAyMDAsIDIzNCwgMTc4LCAxMDIsIDEsIDE4NiwgMTAyLCAxLCAxOTIsIDEwMiwgMSwgCisgICAgMjA1LCAxMDIsIDEsIDIzMywgMTQxLCAxMDIsIDEsIDIxMiwgNjUsIDEwMiwgMSwgMjIyLCAzNiwgMjIyLCAyMiwgMTAyLCAxLCAKKyAgICAyMjIsIDM2LCAyMjEsIDIzNSwgMTAyLCAxLCAyMDYsIDEwMiwgMSwgMTYyLCAxMDIsIDUsIDIyMywgNzMsIDEwMiwgMjUsIDUsIAorICAgIDIxNywgMTQsIDEwMiwgMjUsIDUsIDIxNCwgMTk5LCAxMDIsIDI1LCA1LCAyMTQsIDIwMCwgMjIxLCAyMzEsIDEwMiwgMjUsIAorICAgIDUsIDIxOCwgNDgsIDEwMiwgMjUsIDUsIDIxOCwgNDksIDIzNiwgMjgsIDEwMiwgMjUsIDUsIDIyMywgMTkxLCAyMjMsIDgyLCAKKyAgICAxMDIsIDI1LCA1LCAyMjMsIDE5MSwgMjIzLCA4MywgMjE3LCAxNCwgMTAyLCAyNSwgNSwgMjMzLCAxNDIsIDIzMywgMzAsIAorICAgIDEwMiwgMjUsIDUsIDIzMywgMTQyLCAyMzMsIDMxLCAyMTcsIDE0LCAxMDIsIDI1LCA1LCAyMTcsIDY2LCAxMDIsIDI1LCA1LCAKKyAgICAyMTcsIDY3LCAyMjMsIDgyLCAxMDIsIDI1LCA1LCAyMTcsIDY3LCAyMTcsIDE0LCAxMDIsIDI1LCA1LCAyMTcsIDY3LCAyMjMsIAorICAgIDgzLCAyMTcsIDE0LCAxMDIsIDI1LCA1LCAyMjUsIDE4NywgMTAyLCAyNSwgNSwgMjI1LCAxODgsIDIxNywgMTQsIDEwMiwgCisgICAgMjU1LCAzLCAyNTUsIDIsIDEwMiwgMSwgMjM1LCAxLCAyMjEsIDIzMCwgMTAyLCAxLCAyMzQsIDEwOCwgMjIxLCAyMzAsIAorICAgIDEwMiwgMSwgMjE1LCAzNCwgMjIxLCAyMzAsIDEwMiwgMSwgMjQ1LCAyMTEsIDIyMSwgMjMwLCAxMDIsIDEsIDIxNCwgMCwgCisgICAgMjIxLCAyMzAsIDEwMiwgMSwgMjEwLCAxMDcsIDIyMSwgMjMwLCAxMDIsIDEsIDI1MywgMjE3LCAyMjEsIDIzMCwgMTAyLCAKKyAgICAyMSwgMjEwLCA4NiwgMTAyLCAyMSwgMTExLCAxMDIsIDIxLCAxMDUsIDEwMiwgMjEsIDE1OCwgMTAyLCAyMSwgMTYxLCAxMDIsIAorICAgIDIxLCAxOTAsIDEwMiwgMjEsIDE5NSwgMTAyLCAyMSwgMTk5LCAxMDIsIDIxLCAxOTYsIDEwMiwgMjEsIDIwMSwgMTAyLCAKKyAgICAyMjYsIDMzLCAxMDIsIDIyNiwgNTksIDEwMiwgMjExLCAyMzgsIDEwMiwgMjUwLCAyNDQsIDIyNiwgNTIsIDEwMiwgMjUwLCAKKyAgICAyNDQsIDIxOSwgMTc0LCAxMDIsIDI1MCwgMjQ0LCAyMjYsIDYsIDEwMiwgMjI2LCA1OCwgMTAyLCAyOCwgMTYsIDI0NywgCisgICAgMTM0LCAxMDIsIDI4LCAxNiwgMjQ4LCA1OSwgMTAyLCAyOCwgMTYsIDI0NiwgNzIsIDEwMiwgMjgsIDE2LCAyNDgsIDE4NCwgCisgICAgMTAyLCAyOCwgMTYsIDI0OCwgMTg1LCAyMTgsIDE2LCAxMDIsIDI4LCAxNiwgMjQ3LCAyMTMsIDEwMiwgMjgsIDE2LCAyNDgsIAorICAgIDIyMiwgMTAyLCAyOCwgMTYsIDI0OCwgNDEsIDEwMiwgMjgsIDE2LCAyNDgsIDIwNiwgMTAyLCAyOCwgMTYsIDI0OCwgMTg1LCAKKyAgICAyNDMsIDY0LCAxMDIsIDI4LCAxNiwgMzgsIDIxNywgMTAsIDEwMiwgMjgsIDE2LCAzOCwgMjQ1LCAxNDksIDEwMiwgMjgsIAorICAgIDE2LCAzOCwgMjM0LCAxNzMsIDEwMiwgMjgsIDE2LCAzOCwgMjM0LCAxNzUsIDEwMiwgMjgsIDE2LCAzOCwgMjM1LCAxMjgsIAorICAgIDEwMiwgMjgsIDE2LCAzOCwgMjM0LCAxNzQsIDIsIDIzNSwgMTI4LCAxMDIsIDI4LCAxNiwgMzgsIDIzNCwgMTc2LCAyLCAKKyAgICAyMzUsIDEyOCwgMTAyLCAyOCwgMTYsIDM4LCAyNTIsIDQ1LCAxMDIsIDI4LCAxNiwgMzgsIDI0MiwgMTcyLCAxMDIsIDI4LCAKKyAgICAxNiwgMjIyLCAyNTIsIDIwNCwgMjQ2LCA4MiwgMTAyLCAyOCwgMTYsIDIyMiwgMjUyLCAyMDQsIDI0OCwgMjIwLCAxMDIsIAorICAgIDI4LCAxNiwgMjIyLCAyNTIsIDI1MCwgOCwgMjE1LCAxMTIsIDEwMiwgMjgsIDE2LCAyMjIsIDI1MiwgMjUwLCA4LCAyMTcsIAorICAgIDc0LCAxMDIsIDI4LCAxNiwgMjMzLCA1MCwgMjA0LCAyMjYsIDQ3LCAxMDIsIDI4LCAxNiwgMjMzLCA1MCwgMjA0LCAyMjQsIAorICAgIDE0MiwgMTAyLCAyOCwgMTYsIDIzMywgNTAsIDI1MCwgOCwgMjI1LCA0MSwgMTAyLCAyOCwgMTYsIDIzMywgNTAsIDI1MCwgOCwgCisgICAgMjI1LCAyOSwgMTAyLCAyOCwgMTYsIDIzMywgNTAsIDIwNCwgMjI1LCA2NCwgMjA3LCA1LCAyMjYsIDMwLCAyMDcsIDUsIAorICAgIDIyNiwgNDMsIDIwNywgNSwgMjI2LCAzOSwgMjA3LCAxLCA2MSwgMjA3LCAxLCA3NCwgMjA3LCAxLCA2OSwgMjA3LCAxLCAKKyAgICAyNTQsIDI1MiwgMjA3LCAxLCA3OCwgMjA3LCAxLCA3NiwgMjA3LCAxLCAyNDUsIDYzLCAyMDcsIDEsIDE3NiwgMjA3LCAxLCAKKyAgICAyMjQsIDkxLCAyMDcsIDEsIDI0MywgMTQyLCAyMDcsIDEsIDIyOSwgODIsIDIwNywgMSwgMjUxLCA0MSwgMjA3LCAxLCAyMzUsIAorICAgIDE0NywgMjA3LCAxLCAyMTAsIDExNiwgMjA3LCAxLCAyMjcsIDE2OSwgMjA3LCAxLCAyMTcsIDEwNiwgMjA3LCAxLCAyNDgsIAorICAgIDIyOSwgMjA3LCAxLCAxOTgsIDIwNywgMSwgMTkxLCAyMDcsIDEsIDI0NCwgMjA0LCAyMDcsIDEsIDIxNCwgMjcsIDIwNywgMSwgCisgICAgMjUyLCAxOTksIDIwNywgMSwgMTg2LCAyMDcsIDEsIDE5MiwgMjA3LCAxLCAyMDUsIDIwNywgMSwgMjMzLCAxNDEsIDIwNywgCisgICAgMSwgMjEyLCA2NSwgMjA3LCAxLCAyMDYsIDIwNywgMSwgMjExLCAxNjUsIDIwNywgMSwgMTYyLCAyMDcsIDExNywgNSwgMjI2LCAKKyAgICA1NiwgMjA3LCAxMTcsIDUsIDIyNiwgMzIsIDIwNywgMTE3LCA1LCAyMjYsIDI5LCAyMDcsIDI1LCA1LCAyMjYsIDQ2LCAyMDcsIAorICAgIDI1LCA1LCAyMjYsIDI4LCAyMDcsIDI1LCA1LCAyMjYsIDUwLCAyMDcsIDI1LCA1LCAyMjYsIDM4LCAyMDcsIDI1LCA1LCAKKyAgICAyMjYsIDU3LCAyMDcsIDI1LCA1LCAyMjYsIDQ4LCAyMDcsIDUsIDIyNiwgNjAsIDIwNywgNSwgMjEzLCAxNTIsIDIwNywgCisgICAgMTE3LCA1LCAyMjUsIDI1MiwgMTg2LCAyMDcsIDExNywgNSwgMjI1LCAyNTIsIDIxMiwgNjUsIDIwNywgMSwgMjM0LCAxMzgsIAorICAgIDIwNywgMSwgMjE3LCAyMzIsIDIwNywgMjEsIDIxMCwgODYsIDIwNywgMjEsIDExMSwgMjA3LCAyMSwgMTA1LCAyMDcsIDIxLCAKKyAgICAxNTgsIDIwNywgMjEsIDE2MSwgMjA3LCAyMSwgMTkwLCAyMDcsIDIxLCAxOTUsIDIwNywgMjEsIDE5OSwgMjA3LCAyMSwgCisgICAgMTk2LCAyMDcsIDIxLCAyMDEsIDIwNywgMjUzLCAxODMsIDIwNywgMSwgMjIzLCA1NSwgMjA3LCAxLCAyMzMsIDEzLCAyMDcsIAorICAgIDEsIDI1MiwgMjYsIDIwNywgMSwgNDAsIDIzNSwgMjksIDIwNywgMSwgNDAsIDE5NCwgMjUyLCAxMjgsIDEsIDYxLCAyNTIsIAorICAgIDEyOCwgMSwgMjE5LCAxNjYsIDYxLCAyNTIsIDEyOCwgMSwgMTYyLCAyNTIsIDEyOCwgMSwgMjE5LCAxNjYsIDE2MiwgMjUyLCAKKyAgICAxMjgsIDEsIDIzMSwgMTg2LCAxNjIsIDI1MiwgMTI4LCAxLCAyNTIsIDE5OSwgMjUyLCAxMjgsIDEsIDIzNCwgMjE4LCAyNTIsIAorICAgIDE5OSwgMjUyLCAxMjgsIDEsIDE5MSwgMjUyLCAxMjgsIDEsIDIxOSwgMTY2LCAxOTEsIDI1MiwgMTI4LCAxLCAxOTgsIDI1MiwgCisgICAgMTI4LCAxLCAyMzEsIDE4NiwgMTk4LCAyNTIsIDEyOCwgMSwgMjEyLCA2NSwgMjUyLCAxMjgsIDEsIDIxOSwgMTY2LCAyMTIsIAorICAgIDY1LCAyNTIsIDEyOCwgMSwgMjI2LCA3MSwgMjEyLCA2NSwgMjUyLCAxMjgsIDEsIDI0MywgMTQyLCAyNTIsIDEyOCwgMSwgCisgICAgMjE5LCAxNjYsIDI0MywgMTQyLCAyNTIsIDEyOCwgMSwgMjM1LCAxNDcsIDI1MiwgMTI4LCAxLCAyNDgsIDIyOSwgMjUyLCAKKyAgICAxMjgsIDEsIDIwNSwgMjUyLCAxMjgsIDEsIDIxOSwgMTY2LCAyMDUsIDI1MiwgMTI4LCAxLCAxODYsIDI1MiwgMTI4LCAxLCAKKyAgICAyMTksIDE2NiwgMTg2LCAyNTIsIDEyOCwgMSwgMjE5LCAyOCwgMjE3LCAxMDYsIDI1MiwgMTI4LCAxLCAyMjgsIDYwLCAyMTcsIAorICAgIDEwNiwgMjUyLCAxMjgsIDEsIDIwNiwgMjUyLCAxMjgsIDEsIDIxOSwgMTY2LCAyMDYsIDI1MiwgMTI4LCAxLCAyMzEsIDE4NiwgCisgICAgMjA2LCAyNTIsIDEyOCwgMSwgMTkyLCAyNTIsIDEyOCwgMSwgMjE5LCAxNjYsIDE5MiwgMjUyLCAxMjgsIDEsIDIyOSwgODIsIAorICAgIDI1MiwgMTI4LCAxLCAyMzMsIDE0MSwgMjUyLCAxMjgsIDEsIDIxOSwgMTY2LCAyMzMsIDE0MSwgMjUyLCAxMjgsIDEsIDIyNywgCisgICAgMTY5LCAyNTIsIDEyOCwgMSwgMjUxLCA0MSwgMjUyLCAxMjgsIDEsIDIyOSwgMTUzLCAyNTIsIDEyOCwgMSwgMjMxLCAxMjksIAorICAgIDI1MiwgMTI4LCAxLCA3NCwgMjUyLCAxMjgsIDEsIDY5LCAyNTIsIDEyOCwgNSwgMjE2LCAzNCwgMjUyLCAxMjgsIDI1LCA1LCAKKyAgICA3NiwgMjUyLCAxMjgsIDI1LCA1LCAyMjYsIDcxLCA3NiwgMjUyLCAxMjgsIDI1LCA1LCAyNDUsIDIxNywgMjUyLCAxMjgsIAorICAgIDI1LCA1LCA3NCwgMjUyLCAxMjgsIDI1LCA1LCAyMzQsIDIxOCwgNzQsIDI1MiwgMTI4LCAyNSwgNSwgNzgsIDI1MiwgMTI4LCAKKyAgICAyNSwgNSwgMjM0LCAyMTgsIDc4LCAyNTIsIDEyOCwgMjUsIDUsIDY5LCAyNTIsIDEyOCwgMjUsIDUsIDEwNCwgMzEsIDIxOSwgCisgICAgMTY2LCAyMDYsIDI1MiwgMTI4LCAxMTcsIDUsIDIyOSwgODQsIDI1MiwgMTI4LCAxMTcsIDUsIDI0MiwgNjcsIDI1MiwgMTI4LCAKKyAgICAyMjYsIDQxLCAyNTIsIDEyOCwgMjI2LCAzNywgMjUyLCAxMjgsIDE2LCAyNTEsIDI0OSwgMjI5LCAyMzQsIDIzMSwgNDIsIAorICAgIDI1MiwgMTI4LCAxNiwgMjUxLCAyNDksIDIyNSwgNjcsIDI1MiwgMTI4LCAxNiwgMjUxLCAyNDksIDIzNSwgNTQsIDI1MiwgCisgICAgMTI4LCAxNiwgMjUxLCAyNDksIDIyNiwgNDEsIDE5NywgMSwgMTc2LCAxOTcsIDEsIDIzNCwgNDUsIDE5NywgMSwgMjM0LCAKKyAgICAxMzgsIDE5NywgMSwgMjQzLCAxNDIsIDE5NywgMSwgMjQyLCAxOTMsIDE5NywgMSwgMjI5LCA4MiwgMTk3LCAxLCAyNTEsIAorICAgIDQxLCAxOTcsIDEsIDI1MCwgMTY1LCAxOTcsIDEsIDIzNSwgMTQ3LCAxOTcsIDEsIDIyNywgMTY5LCAxOTcsIDEsIDIxNywgCisgICAgMTA2LCAxOTcsIDEsIDIxNiwgMjA5LCAxOTcsIDEsIDI0OCwgMjI5LCAxOTcsIDEsIDE5OCwgMTk3LCAxLCAxOTEsIDE5NywgCisgICAgMSwgMjI1LCA0NSwgMTk3LCAxLCAyMjUsIDE1MCwgMTk3LCAxLCAyNDQsIDIwNCwgMTk3LCAxLCAyNDQsIDgzLCAxOTcsIDEsIAorICAgIDI1MiwgMTk5LCAxOTcsIDEsIDI1MSwgMjMwLCAxOTcsIDEsIDE4NiwgMTk3LCAxLCAyMzAsIDE3MywgMTk3LCAxLCAyMTUsIAorICAgIDE4NCwgMTk3LCAxLCAyMTUsIDE3NiwgMTk3LCAxLCAyNDYsIDQ2LCAxOTcsIDEsIDE5MiwgMTk3LCAxLCAyMDUsIDE5NywgMSwgCisgICAgMjMzLCAxNDEsIDE5NywgMSwgMTYyLCAxOTcsIDEsIDI0MSwgMTYwLCAxOTcsIDEsIDIxNCwgMjcsIDE5NywgMSwgMjA2LCAKKyAgICAxOTcsIDEsIDIyMCwgMTA0LCAxOTcsIDEsIDIxMiwgNjUsIDE5NywgMSwgNjEsIDE5NywgMjE4LCA3NCwgMSwgMTkyLCAxOTcsIAorICAgIDIxOCwgNzQsIDEsIDIwNSwgMTk3LCAyNSwgNSwgMjU1LCA4MiwgMTk3LCAyNSwgNSwgNzQsIDE5NywgMjUsIDUsIDc4LCAKKyAgICAxOTcsIDI1LCA1LCAyMjYsIDE4NywgMTk3LCAyNSwgNSwgNjksIDE5NywgMjUsIDUsIDIxNCwgMTE4LCAxOTcsIDI1LCA1LCAKKyAgICA3NiwgMTk3LCAxMTcsIDUsIDIzNSwgMjksIDE5NywgMTE3LCA1LCAxOTQsIDE5NywgMTE3LCA1LCAxNTYsIDE5NywgMTE3LCAKKyAgICA1LCAyMzAsIDMwLCAxOTcsIDExNywgNSwgMjI2LCAxMDksIDE5NywgMTE3LCA1LCAxNTMsIDE5NywgMTE3LCA1LCAyMTcsIAorICAgIDE1MywgMTk3LCAxMTcsIDUsIDIyNywgMTQ2LCAxOTcsIDExNywgNSwgMjM0LCAyMzYsIDE5NywgNSwgMjIzLCAxNTMsIDE5NywgCisgICAgNSwgMjI3LCAyMDksIDE5NywgMjI0LCAxNDQsIDIxNywgMTA0LCAxOTcsIDIyNCwgMTQ0LCAyMjcsIDE1NiwgMjE2LCAxMjEsIAorICAgIDIxNywgMTA0LCAxOTcsIDIyNCwgMTQ0LCAyNTAsIDE3MiwgMTk3LCAyMjQsIDE0NCwgMjE1LCAxNzEsIDI1MCwgMTcyLCAKKyAgICAxOTcsIDIyNCwgMTQ0LCAyMTUsIDE3MCwgMTk3LCAyMSwgMjEwLCA4NiwgMTk3LCAyMSwgMTExLCAxOTcsIDIxLCAxMDUsIAorICAgIDE5NywgMjEsIDE1OCwgMTk3LCAyMSwgMTYxLCAxOTcsIDIxLCAxOTAsIDE5NywgMjEsIDE5NSwgMTk3LCAyMSwgMTk5LCAKKyAgICAxOTcsIDIxLCAxOTYsIDE5NywgMjEsIDIwMSwgMTk3LCAxLCAyMTUsIDE1NywgMTk3LCAxLCAyMTUsIDE0NSwgMTk3LCAxLCAKKyAgICAyNDgsIDE0MywgMjI2LCAyMTQsIDI1MCwgMTExLCAyMSwgMjEwLCA4NiwgMjI2LCAyMTQsIDI1MCwgMTExLCAyMSwgMTExLCAKKyAgICAyMjYsIDIxNCwgMjUwLCAxMTEsIDIxLCAxMDUsIDIyNiwgMjE0LCAyNTAsIDExMSwgMjEsIDE1OCwgMjI2LCAyMTQsIDI1MCwgCisgICAgMTExLCAyMSwgMTYxLCAyMjYsIDIxNCwgMjUwLCAxMTEsIDIxLCAxOTAsIDIyNiwgMjE0LCAyNTAsIDExMSwgMjEsIDE5NSwgCisgICAgMjI2LCAyMTQsIDI1MCwgMTExLCAyMSwgMTk5LCAyMjYsIDIxNCwgMjUwLCAxMTEsIDIxLCAxOTYsIDIyNiwgMjE0LCAyNTAsIAorICAgIDExMSwgMjEsIDIwMSwgMjI2LCAyMTQsIDI1MCwgMTExLCAxLCAyMzMsIDE0MSwgMjI2LCAyMTQsIDI1MCwgMTExLCAxLCAKKyAgICAyNTMsIDIxNCwgMjI2LCAyMTQsIDI1MCwgMTExLCAxLCAyNTQsIDIyNSwgMjI2LCAyMTQsIDI1MCwgMTExLCAxLCAyNTQsIAorICAgIDEyMywgMjI2LCAyMTQsIDI1MCwgMTExLCAxLCAyNTQsIDE4NywgMjI2LCAyMTQsIDI1MCwgMTExLCAxLCAyMzMsIDE0MCwgCisgICAgMjI2LCAyMTQsIDI1MCwgMTExLCAxLCAyNTUsIDQ0LCAyMjYsIDIxNCwgMjUwLCAxMTEsIDEsIDI1NSwgNDUsIDIyNiwgMjE0LCAKKyAgICAyNTAsIDExMSwgMSwgMjU1LCA0MywgMjI2LCAyMTQsIDI1MCwgMTExLCAxLCAyNTUsIDM4LCAyMjYsIDIxNCwgMjUwLCAxMTEsIAorICAgIDEsIDIzMiwgMjQ3LCAyMjYsIDIxNCwgMjUwLCAxMTEsIDEsIDIzNSwgMTc4LCAyMjYsIDIxNCwgMjUwLCAxMTEsIDEsIDIzNiwgCisgICAgNDEsIDIyNiwgMjE0LCAyNTAsIDExMSwgMSwgMjM1LCAxOTcsIDIyNiwgMjE0LCAyNTAsIDExMSwgMSwgMjM1LCAxODYsIAorICAgIDIyNiwgMjE0LCAyNTAsIDExMSwgMSwgMjMyLCAxMDMsIDIyNiwgMjE0LCAyNTAsIDExMSwgMSwgMjE0LCAyMjEsIDIyNiwgCisgICAgMjE0LCAyNTAsIDExMSwgMSwgMjE0LCAyMTksIDIyNiwgMjE0LCAyNTAsIDExMSwgMSwgMjE0LCAxNjgsIDIyNiwgMjE0LCAKKyAgICAyNTAsIDExMSwgMSwgMjE0LCAxMTEsIDIyNiwgMjE0LCAyNTAsIDExMSwgMSwgMjMzLCA2NCwgMjI2LCAyMTQsIDI1MCwgCisgICAgMTExLCAxLCAyNDUsIDExNiwgMjI2LCAyMTQsIDI1MCwgMTExLCAxLCAyNDUsIDIyMCwgMjI2LCAyMTQsIDI1MCwgMTExLCAxLCAKKyAgICAyNDUsIDE1OCwgMjI2LCAyMTQsIDI1MCwgMTExLCAxLCAyNDUsIDk0LCAyMjYsIDIxNCwgMjUwLCAxMTEsIDEsIDIzMiwgCisgICAgMTYyLCAyMjYsIDIxNCwgMjUwLCAxMTEsIDEsIDIyNiwgMTQxLCAyMjYsIDIxNCwgMjUwLCAxMTEsIDEsIDIyNywgMCwgMjI2LCAKKyAgICAyMTQsIDI1MCwgMTExLCAxLCAyMjYsIDEyOSwgMjI2LCAyMTQsIDI1MCwgMTExLCAxLCAyMjYsIDIyNiwgMjI2LCAyMTQsIAorICAgIDI1MCwgMTExLCAyMzAsIDEwOCwgMjE1LCAxMjIsIDIyNiwgMjE0LCAyNTAsIDExMSwgMjQzLCAxMzcsIDIxNSwgMTIzLCAKKyAgICAyMjYsIDIxNCwgMjUwLCAxMTEsIDIzMCwgMTA2LCAyMTUsIDEyMywgMjI2LCAyMTQsIDI1MCwgMTExLCAyMjMsIDk1LCAyMjYsIAorICAgIDIxNCwgMjUwLCAxMTEsIDIyNSwgMTQ4LCAyMjYsIDIxNCwgMjUwLCAxMTEsIDI1NCwgMjE3LCAyMjYsIDIxNCwgMjUwLCAKKyAgICAxMTEsIDIyNCwgMTQ0LCAyMzAsIDEwMywgMjI2LCAyMTQsIDI1MCwgMTExLCAyMjQsIDE0NCwgNTIsIDIzMCwgMTAzLCAyMDcsIAorICAgIDIyNCwgMTQ0LCAyNTEsIDI0OSwgMjE4LCA5LCAyMDcsIDIyNCwgMTQ0LCAyNTEsIDI0OSwgMjI2LCA0MiwgMjA3LCAyMjQsIAorICAgIDE0NCwgMjUxLCAyNDksIDIyNCwgMTMyLCAyMDcsIDIyNCwgMTQ0LCAyNTEsIDI0OSwgMjUxLCAyNywgMjA3LCAyMjQsIDE0NCwgCisgICAgMjUxLCAyNDksIDIzMywgMTQsIDIyMSwgMjI3LCAyMDcsIDIyNCwgMTQ0LCAyNTEsIDI0OSwgMjM1LCAxOSwgMjIxLCAyMjcsIAorICAgIDIwNywgMjI0LCAxNDQsIDI1MSwgMjQ5LCAyNDgsIDIzMCwgMjIxLCAyMjcsIDIwNywgMjI0LCAxNDQsIDI1MSwgMjQ5LCAKKyAgICAyNTIsIDIwMCwgMjIxLCAyMjcsIDIxMywgMjUyLCAxMzgsIDIzNCwgMjE2LCAyMTMsIDI1MiwgMTM4LCAyMjAsIDc5LCAyMTMsIAorICAgIDI1MiwgMTM4LCAyMjQsIDIwMSwgMjEzLCAyNTIsIDUsIDIyOCwgMjE0LCAyMTMsIDI1MiwgNSwgMjExLCA4MCwgMjMwLCAKKyAgICAyMjcsIDIxOCwgMSwgMjEzLCAyNTIsIDEzOCwgMjExLCA4MCwgMjU0LCAyMjIsIDIzNSwgMjUwLCAyMTgsIDEsIDIxMywgCisgICAgMjUyLCAxMzgsIDIxMSwgODAsIDIzNSwgMjUwLCAyMTgsIDEsIDIxMywgMjUyLCAxMzgsIDIxMSwgODAsIDIzNCwgMjA0LCAKKyAgICAyMzUsIDI1MCwgMjE4LCAxLCAyMTMsIDI1MiwgMTM4LCAyNTEsIDEwLCA1MSwgMjEzLCAyNTIsIDEzOCwgMjExLCA4MCwgCisgICAgMjM0LCAyMDQsIDIzNSwgMjUwLCAyMTgsIDIsIDIyMSwgMTk5LCAyMTMsIDI1MiwgMTM4LCA1MiwgMjE4LCAxLCAyMTMsIAorICAgIDI1MiwgMTM4LCAyMTUsIDIxMiwgMjE4LCAxLCAyMTMsIDI1MiwgMTM4LCAyMzQsIDIwNCwgMjU0LCA4NSwgMjEzLCAyNTIsIAorICAgIDEzOCwgNTksIDUxLCAyMTMsIDI1MiwgMTM4LCAxMTMsIDE3MCwgNTEsIDIxMywgMjUyLCAxMzgsIDEzNCwgMTcwLCA1MSwgCisgICAgMjEzLCAyNTIsIDEzOCwgMjIyLCAyNDMsIDIzNCwgMjE1LCAyMzUsIDI1MCwgMjE4LCAxLCAyMTMsIDI1MiwgMTM4LCAyNTMsIAorICAgIDIxMiwgMjM1LCAyNTAsIDIxOCwgMSwgMjEzLCAyNTIsIDUsIDIxMywgMTQ4LCAyMTgsIDEsIDIxMywgMjUyLCA1LCAyMTMsIAorICAgIDE0OCwgMjE0LCAyMTYsIDIxMywgMjUyLCA1LCAyMjMsIDUyLCAyMTMsIDE0OCwgMjE0LCAyMTYsIDIxMywgMjUyLCA1LCAKKyAgICAyMTMsIDE0OCwgMjU0LCA4NSwgMjEzLCAyNTIsIDUsIDIyMywgNTIsIDIxMywgMTQ4LCAyNTQsIDg1LCAyMTMsIDI1MiwgNSwgCisgICAgMjEzLCAxNDgsIDIxNCwgMjE3LCAyLCAyMTcsIDc4LCAyMTMsIDI1MiwgNSwgMjEzLCAxNDgsIDI1NCwgODYsIDIsIDIxNywgCisgICAgNzgsIDIxMywgMjUyLCA1LCAyNTQsIDg0LCAyNTQsIDk5LCAyMTMsIDI1MiwgNSwgMjU0LCA4NCwgMjUyLCAxNzQsIDIxMywgCisgICAgMjUyLCA1LCAyNTQsIDg0LCAyMTQsIDIwLCAyMTMsIDI1MiwgNSwgMjU0LCA4NCwgMjE0LCAyMSwgMiwgMjE3LCA3OCwgMjEzLCAKKyAgICAyNTIsIDUsIDIxNiwgNjksIDIxMywgMjUyLCA1LCAyNDEsIDE5OCwgMjAwLCAyNTQsIDgzLCAyMTMsIDI1MiwgNSwgMjAwLCAKKyAgICAyNTQsIDgzLCAyMTMsIDI1MiwgNSwgMjIyLCAxNDQsIDIwMCwgMjU0LCA4MywgMjEzLCAyNTIsIDUsIDI1NCwgODQsIDIxNCwgCisgICAgMjIzLCAyMzAsIDk1LCAyMTMsIDI1MiwgNSwgMjU0LCAyOCwgMjEzLCAyNTIsIDUsIDIyMiwgMTg5LCAyNTQsIDI4LCAyMTMsIAorICAgIDI1MiwgMTM4LCAyNTEsIDEwLCA0OCwgMjEzLCAyNTIsIDUsIDIzNSwgMTA4LCAyMTMsIDI1MiwgNSwgMjE0LCAxNjEsIDcsIAorICAgIDEsIDQsIDYsIDYxLCA3LCAxLCA0LCA2LCAyNTQsIDI1MiwgNywgNCwgMSwgMjE1LCA5NCwgMjU0LCAyNTIsIDcsIDEsIDQsIAorICAgIDYsIDI1MiwgMTQyLCAyNTMsIDE2NiwgNywgMSwgNCwgNiwgMjUxLCA3NCwgNywgMSwgNCwgNiwgMjQ5LCA2OCwgNywgMSwgNCwgCisgICAgNiwgMjQ1LCA2NywgNywgMSwgNCwgNiwgNzYsIDcsIDQsIDEsIDIxNSwgOTQsIDIwNCwgNzYsIDcsIDQsIDEsIDIxNSwgOTQsIAorICAgIDc0LCA3LCAxLCA0LCA2LCAyMzUsIDE1MCwgNywgMSwgNCwgNiwgMjM1LCAyOSwgNywgMSwgNCwgNiwgMjMzLCAxNTUsIDIsIAorICAgIDkxLCA3LCAxLCA0LCA2LCAxOTQsIDcsIDEsIDQsIDYsIDIyMywgNTIsIDIzMCwgMzAsIDcsIDEsIDQsIDYsIDc4LCA3LCAxLCAKKyAgICA0LCA2LCAyMDQsIDc4LCA3LCA0LCAxLCAyMTksIDE4OSwgNzgsIDcsIDQsIDEsIDIxOSwgMTg5LCAyMDQsIDc4LCA3LCA0LCAKKyAgICAxLCAyMTksIDE4OSwgMTQ0LCAyLCA5MSwgNywgNCwgMSwgMjE1LCA5NCwgMjI2LCAyMzgsIDcsIDEsIDQsIDYsIDIyNiwgCisgICAgMTM4LCA3LCA0LCAxLCAyMTYsIDE1LCAxNjMsIDc4LCA3LCA0LCAxLCAyNTEsIDE4MywgMTYzLCA3OCwgNywgMSwgNCwgNiwgCisgICAgMjI2LCAxMDksIDcsIDEsIDQsIDYsIDIyMywgNTIsIDE1MywgNywgMSwgNCwgNiwgMjE1LCA5NCwgMTUzLCA3LCAxLCA0LCA2LCAKKyAgICAyMTcsIDE1MywgNywgMSwgNCwgNiwgNjksIDcsIDQsIDEsIDIxOSwgMTg5LCA2OSwgNywgNCwgMSwgMjE5LCAxODksIDI0OCwgCisgICAgOCwgNjksIDcsIDQsIDEsIDIxOSwgMTg5LCAyMTUsIDk0LCAxOTQsIDcsIDEsIDQsIDYsIDIxNCwgMTA1LCA3LCAxLCA0LCA2LCAKKyAgICAyMTIsIDk4LCA3LCAxLCA0LCA2LCAyMTAsIDE1OSwgNywgMSwgNCwgNiwgMjQ1LCAxNiwgNywgMSwgMjEzLCAxMzUsIDIzMywgCisgICAgODgsIDIxOCwgMjUyLCA3LCAxLCAyNTQsIDIwNSwgMjYsIDEsIDQsIDYsIDI0MywgMTE0LCAyNiwgMSwgNCwgNiwgMjMzLCAKKyAgICAxMDQsIDI2LCAxLCA0LCA2LCAyMjUsIDExMSwgMjYsIDEsIDQsIDYsIDIyMywgNDAsIDI2LCAxLCA0LCA2LCAyMjQsIDE2NCwgCisgICAgMzMsIDEsIDQsIDYsIDI0NSwgMTgyLCA1OCwgMSwgNiwgNjEsIDU4LCAxLCA2LCAyNTQsIDI1MiwgNTgsIDEsIDYsIDI1MywgCisgICAgMTY2LCA1OCwgMSwgNiwgMjUyLCAxNDIsIDI1MywgMTY2LCA1OCwgMSwgNiwgMjQ5LCA2OCwgNTgsIDEsIDYsIDc2LCA1OCwgCisgICAgMSwgNiwgMjIzLCA1MiwgNzYsIDU4LCAxLCA2LCAyNDMsIDIwOSwgNTgsIDEsIDYsIDI0MiwgNjcsIDU4LCAxLCA2LCA3NCwgCisgICAgNTgsIDEsIDYsIDIzNSwgMTUwLCA1OCwgMSwgNiwgMjM1LCAyOSwgNTgsIDEsIDYsIDE1NiwgNTgsIDEsIDYsIDE5NCwgNTgsIAorICAgIDEsIDYsIDIzMCwgMzAsIDU4LCAxLCA2LCAyMjMsIDUyLCAyMzAsIDMwLCA1OCwgMSwgNiwgNzgsIDU4LCAxLCA2LCAyMjYsIAorICAgIDEzOCwgNTgsIDEsIDYsIDIyNiwgMTA5LCA1OCwgMSwgNiwgMTUzLCA1OCwgMSwgNiwgMjE3LCAxNTMsIDU4LCAxLCA2LCA2OSwgCisgICAgNTgsIDEsIDYsIDIxMiwgOTgsIDU4LCAxLCA0LCA2MSwgNTgsIDEsIDQsIDIxNSwgOTQsIDYxLCA1OCwgMSwgNCwgMjU0LCAKKyAgICAxNTEsIDU4LCAxLCA0LCAyMTUsIDk0LCAyNTQsIDI1MiwgNTgsIDEsIDQsIDI1MywgMTY2LCA1OCwgMSwgNCwgMjQ5LCA2OCwgCisgICAgNTgsIDEsIDQsIDc2LCA1OCwgMSwgNCwgMjIxLCAxOTcsIDU4LCAxLCA0LCAyMDQsIDc2LCA1OCwgMSwgNCwgMjE1LCA5NCwgCisgICAgMjA0LCA3NiwgNTgsIDEsIDQsIDI0MywgMjA5LCA1OCwgMSwgNCwgMjE1LCA5NCwgNzQsIDU4LCAxLCA0LCAyMzUsIDI5LCAKKyAgICA1OCwgMSwgNCwgMTk0LCA1OCwgMSwgNCwgMjQ1LCAxNDYsIDU4LCAxLCA0LCA3OCwgNTgsIDEsIDQsIDIwNCwgNzgsIDU4LCAKKyAgICAxLCA0LCAyMTYsIDE1LCAxNjMsIDc4LCA1OCwgMSwgNCwgMjUxLCAxODMsIDE2MywgNzgsIDU4LCAxLCA0LCAyMjYsIDEwOSwgCisgICAgNTgsIDEsIDQsIDIxNywgMTUzLCA1OCwgMSwgNCwgNjksIDU4LCAxLCA0LCAyMTksIDE4OSwgNjksIDU4LCAxLCA0LCAyMTUsIAorICAgIDk0LCAxOTQsIDU4LCAxLCA0LCAyMTQsIDEwNSwgNTgsIDEsIDQsIDI1NCwgMjA1LCA1OCwgMSwgNCwgMjUyLCAzNCwgNTgsIAorICAgIDEsIDQsIDI2LCAyNDMsIDExNCwgNTgsIDEsIDQsIDI0OCwgNjIsIDU4LCAxLCA0LCAyNiwgMjI1LCAxMzYsIDU4LCAxLCA0LCAKKyAgICAyNTAsIDExOCwgNywgMjE4LCA2NiwgNCwgMSwgNzQsIDcsIDIxOCwgNjYsIDQsIDEsIDE1MywgNywgMjE4LCA2NiwgNCwgMSwgCisgICAgNjksIDcsIDIxOCwgNjYsIDQsIDEsIDIxNCwgMTA1LCAyNiwgMjE4LCA2NiwgNCwgMSwgMjUyLCAzNCwgMjYsIDIxOCwgNjYsIAorICAgIDQsIDEsIDI0MywgMTE0LCAyNiwgMjE4LCA2NiwgNCwgMSwgMjIzLCA0MCwgMjYsIDIxOCwgNjYsIDQsIDEsIDIyNSwgMTM2LCAKKyAgICAyNiwgMjE4LCA2NiwgNCwgMSwgMjUwLCAxMTgsIDcsIDQsIDEsIDIxNCwgMjE0LCA3LCA0LCAxLCA1NywgMiwgMjMwLCAyMjksIAorICAgIDE4NCwgNywgNCwgMSwgMjQ5LCA2OSwgMiwgMjMwLCAyMjksIDE4NCwgNywgNCwgMSwgMjQ1LCAxNSwgMiwgMjMwLCAyMjksIAorICAgIDE4NCwgNywgNCwgMSwgMjMyLCA1NSwgMiwgMjMwLCAyMjksIDE4NCwgNywgNCwgMSwgMjMwLCAzMSwgMiwgMjMwLCAyMjksIAorICAgIDE4NCwgNywgNCwgMSwgMjI2LCAxMTAsIDIsIDIzMCwgMjI5LCAxODQsIDcsIDQsIDEsIDIyMywgMjI3LCAyLCAyMzAsIDIyOSwgCisgICAgMTg0LCA3LCA0LCAxLCAyMjMsIDIyNywgMiwgMjQ0LCA5NiwgMjIsIDIzMCwgMjI5LCAxODQsIDcsIDQsIDEsIDIyMiwgOTQsIAorICAgIDIsIDIzMCwgMjI5LCAxODQsIDcsIDQsIDEsIDIxNywgMTU0LCAyLCAyMzAsIDIyOSwgMTg0LCA3LCA0LCAxLCAyMTAsIDE2MCwgCisgICAgMiwgMjMwLCAyMjksIDE4NCwgNywgNCwgMSwgMjE1LCA5NCwgMjQzLCAyMDksIDU4LCAxLCAzMywgMjQ1LCAxNTgsIDcsIDQsIAorICAgIDEsIDIzNSwgMjIwLCAyNDMsIDIwOSwgNywgNCwgMSwgMjE2LCAyMTIsIDIsIDIxOCwgMTA5LCA3LCA0LCA2LCAxLCAyNDAsIAorICAgIDE2MSwgMiwgOTEsIDcsIDQsIDEsIDIzNSwgMTkzLCAyLCA5MSwgNywgNCwgMSwgMjI2LCAxMTAsIDIsIDkxLCA3LCA0LCA2LCAKKyAgICAxLCAxMDQsIDIsIDkxLCA3LCA0LCAxLCAyMTQsIDE1OCwgMiwgOTEsIDcsIDQsIDEsIDU3LCAyLCAyMjYsIDcwLCAxMDMsIDcsIAorICAgIDQsIDEsIDI0OSwgNjksIDIsIDIyNiwgNzAsIDEwMywgNywgNCwgMSwgMjQ1LCAxNSwgMiwgMjI2LCA3MCwgMTAzLCA3LCA0LCAKKyAgICAxLCAyNDMsIDIxMCwgMiwgMjI2LCA3MCwgMTAzLCA3LCA0LCAxLCAyMzUsIDMwLCAyLCAyMjYsIDcwLCAxMDMsIDcsIDQsIDEsIAorICAgIDIzMywgMTU1LCAyLCAyMjYsIDcwLCAxMDMsIDcsIDQsIDEsIDIzMiwgNTUsIDIsIDIyNiwgNzAsIDEwMywgNywgNCwgMSwgCisgICAgMjMwLCAzMSwgMiwgMjI2LCA3MCwgMTAzLCA3LCA0LCAxLCAyMjYsIDExMCwgMiwgMjI2LCA3MCwgMTAzLCA3LCA0LCAxLCAKKyAgICAyMjMsIDIyNywgMiwgMjI2LCA3MCwgMTAzLCA3LCA0LCAxLCAyMjIsIDk0LCAyLCAyMjYsIDcwLCAxMDMsIDcsIDQsIDEsIAorICAgIDI0NSwgODQsIDIsIDIyNiwgNzAsIDEwMywgNywgNCwgMSwgMjE0LCAxMDYsIDIsIDIyNiwgNzAsIDEwMywgNywgNCwgMSwgCisgICAgMjExLCAxNzksIDIsIDIyNiwgNzAsIDEwMywgNywgNCwgMSwgMjEwLCAxNjAsIDIsIDIyNiwgNzAsIDEwMywgNywgNCwgMSwgCisgICAgMTE2LCAyLCAyMjMsIDU4LCAxMDMsIDcsIDQsIDEsIDI1NCwgMTUyLCAyLCAyMjMsIDU4LCAxMDMsIDcsIDQsIDEsIDI0OSwgCisgICAgNjksIDIsIDI0MSwgNTksIDIyLCAyMTcsIDc4LCA3LCA0LCAxLCAxNjAsIDIsIDIyMywgNTgsIDEwMywgNywgNCwgMSwgMjA0LCAKKyAgICAxNjAsIDIsIDIyMywgNTgsIDEwMywgNywgNCwgMSwgMjIzLCA1MiwgMjA0LCAxNjAsIDIsIDIyMywgNTgsIDEwMywgNywgNCwgCisgICAgMSwgMjIxLCAxOTgsIDIsIDIyMywgNTgsIDEwMywgNywgNCwgMSwgMjQwLCAxNjEsIDIsIDIyMywgNTgsIDEwMywgNywgNCwgCisgICAgMSwgMjA0LCAxNDQsIDIsIDIyMywgNTgsIDEwMywgNywgNCwgMSwgMjQ1LCA4NCwgMiwgMjIzLCA1OCwgMTAzLCA3LCA0LCAxLCAKKyAgICAxMDQsIDIsIDIyMywgNTgsIDEwMywgNywgNCwgMSwgMjQ1LCAxNywgMiwgMjIzLCA1OCwgMTAzLCA1OCwgMSwgNCwgMjE1LCAKKyAgICA5NCwgMjU0LCAxNTEsIDU4LCAxLCA0LCAyNTEsIDc0LCA1OCwgMSwgNCwgMjUxLCA3NSwgMiwgMjQ5LCAxMDgsIDU4LCAxLCAKKyAgICA0LCAyNDUsIDY3LCA1OCwgMSwgNCwgMjIzLCA1MiwgMjA0LCA3NiwgNTgsIDEsIDQsIDI0NSwgMTQsIDU4LCAxLCA0LCAyNDcsIAorICAgIDEyNywgMjM1LCAxNTEsIDIsIDkxLCA1OCwgMSwgNCwgMTE5LCAyNDMsIDIwOSwgNTgsIDEsIDQsIDIxNSwgOTQsIDI0MiwgCisgICAgNjcsIDU4LCAxLCA0LCAyNDAsIDE2MSwgMiwgOTEsIDU4LCAxLCA0LCAyMzUsIDE5MiwgNTgsIDEsIDQsIDYsIDc0LCA1OCwgCisgICAgMSwgNCwgNiwgMjQwLCAxNjEsIDIsIDkxLCA1OCwgMSwgNCwgMjM1LCAxNTEsIDIsIDI0OSwgMTM1LCA1OCwgMSwgNCwgMjMzLCAKKyAgICAxNTUsIDIsIDIyMywgNTgsIDEwMywgNTgsIDEsIDQsIDIzMywgMTU1LCAyLCAyMjYsIDcwLCAxMDMsIDU4LCAxLCA0LCA2LCAKKyAgICAxNTYsIDU4LCAxLCA0LCAyMzIsIDU1LCAyLCAxMDMsIDU4LCAxLCA0LCAyMTUsIDk0LCAyMzIsIDU1LCAyLCAyMDAsIDIzMywgCisgICAgNDIsIDU4LCAxLCA0LCAyMzAsIDMxLCAyLCA0MywgMTAzLCA1OCwgMSwgNCwgMjMwLCAzMSwgMiwgMjIzLCA1OCwgMTAzLCAKKyAgICA1OCwgMSwgNCwgNiwgMjMwLCAzMCwgNTgsIDEsIDQsIDI1MiwgMTQyLCA3OCwgNTgsIDEsIDQsIDIyNSwgMTM2LCA1OCwgMSwgCisgICAgNCwgMjIyLCA5NCwgMiwgMTAzLCA1OCwgMSwgNCwgMjQ1LCA4MywgNTgsIDEsIDQsIDIxNywgMTU0LCAyLCAyMjYsIDcwLCAKKyAgICAxMDMsIDU4LCAxLCA0LCAxMDQsIDEzMCwgNTgsIDEsIDQsIDIxNCwgMTU3LCA1OCwgMSwgNCwgNiwgNjksIDU4LCAxLCA0LCAKKyAgICAyMTQsIDEwNiwgMiwgMTAzLCA1OCwgMSwgNCwgMjE1LCA5NCwgMjE0LCAxMDUsIDU4LCAxLCA0LCAyMTAsIDE1OSwgNTgsIDEsIAorICAgIDQsIDIxMCwgMTYwLCAyLCAyMjMsIDU4LCAxMDMsIDU4LCAxLCA0LCAyMTAsIDE2MCwgMiwgMjQ5LCAxMDgsIDU4LCAxLCA0LCAKKyAgICAyNDUsIDE2LCA1OCwgMSwgNCwgMjE2LCAxODAsIDM4LCAyNDYsIDEyNiwgMjQyLCAxNDQsIDI1NSwgMjMsIDM4LCAyNDYsIAorICAgIDEyNiwgMjU1LCAxMiwgMjU1LCAyMywgMzgsIDIxOSwgNzEsIDUxLCAzOCwgMjE4LCA3LCA3OSwgMzgsIDIzMSwgMjM2LCAzOCwgCisgICAgMjQyLCAxNDEsIDM4LCAyMzEsIDIzNCwgMzgsIDI1NSwgMTAsIDM4LCAyNDIsIDE0MiwgMzgsIDI1NSwgMTEsIDM4LCA3LCA0LCAKKyAgICAxLCAyMjMsIDIyNywgNTEsIDM4LCAyNTEsIDE1MywgMzgsIDIzMSwgMjM1LCAzOCwgNTIsIDI1MCwgMzksIDQ4LCAzOCwgCisgICAgMjI2LCAyMjksIDQ4LCAzOCwgMjEwLCAzNSwgNTEsIDM4LCAyMzUsIDE3OSwgNTEsIDM4LCAyMTQsIDE1MSwgNDgsIDM4LCAKKyAgICAyMTQsIDEzNCwgNDgsIDM4LCA3LCA0LCAxLCAyNDQsIDcxLCAyMDQsIDExNiwgNDgsIDM4LCA3LCA0LCAxLCAyNTQsIDI1MiwgCisgICAgMzgsIDcsIDQsIDEsIDI1NCwgODEsIDM4LCA3LCA0LCAxLCAyNTMsIDE4NCwgMzgsIDcsIDQsIDEsIDI1MSwgNzUsIDI1MCwgCisgICAgMTkxLCAzOCwgNywgNCwgMSwgMjM1LCAyMjAsIDI0OSwgNjgsIDM4LCA3LCA0LCAxLCAyNDUsIDY3LCAzOCwgNywgNCwgMSwgCisgICAgMjQzLCAyMDksIDM4LCA3LCAxLCA0LCA2LCAyNDMsIDIwOSwgMzgsIDcsIDQsIDEsIDIzNSwgMjksIDM4LCA3LCA0LCAxLCAKKyAgICAxNTYsIDM4LCA3LCAxLCA0LCA2LCAxNTYsIDM4LCA3LCAxLCA0LCA2LCAxOTQsIDM4LCA3LCA0LCAxLCAyMzAsIDMwLCAzOCwgCisgICAgNywgMSwgNCwgNiwgMjMwLCAzMCwgMzgsIDcsIDEsIDQsIDYsIDE1MywgMzgsIDcsIDQsIDEsIDIyMywgMjI3LCAyMjIsIAorICAgIDE4OCwgMzgsIDcsIDQsIDEsIDIyMiwgOTMsIDM4LCA3LCA0LCAxLCAyMDAsIDIyMiwgOTMsIDM4LCA3LCA0LCAxLCAyMTAsIAorICAgIDE1OSwgMzgsIDUyLCAyMzUsIDIwMCwgMjUxLCAxNTUsIDUxLCAzOCwgMjU0LCAxNTYsIDEyOCwgMjE2LCA0MywgNTEsIDM4LCAKKyAgICA0MywgMjU0LCAyLCA0OCwgMzgsIDQ0LCAyNTQsIDIsIDIyLCAxMjQsIDI1NCwgMiwgNTEsIDcsIDYsIDEsIDExNiwgMiwgCisgICAgMjIyLCAyMzcsIDUxLCA3LCA0LCAxLCAxMTYsIDIsIDIyMiwgMjM3LCA1MSwgNywgNiwgMSwgNTcsIDIsIDU5LCA0OCwgNywgCisgICAgNCwgMSwgNTcsIDIsIDU5LCA0OCwgNywgNiwgMSwgNTcsIDIsIDU5LCA1MSwgNywgNCwgMSwgNTcsIDIsIDU5LCA1MSwgNywgCisgICAgNiwgMSwgNTcsIDIsIDIzMiwgMjIwLCA1MSwgNywgNCwgMSwgNTcsIDIsIDIzMiwgMjIwLCA1MSwgNywgNiwgMSwgMjUxLCAKKyAgICA3NSwgMiwgMjUwLCAxOTIsIDIyLCAxNDIsIDcsIDQsIDEsIDI1MSwgNzUsIDIsIDI1MCwgMTkyLCAyMiwgMTQyLCA3LCA2LCAKKyAgICAxLCAyNDksIDY5LCAyLCA1OSwgNDgsIDcsIDQsIDEsIDI0OSwgNjksIDIsIDU5LCA0OCwgNywgNiwgMSwgMjQ5LCA2OSwgMiwgCisgICAgNTksIDUxLCA3LCA0LCAxLCAyNDksIDY5LCAyLCA1OSwgNTEsIDcsIDYsIDEsIDI0OSwgNjksIDIsIDIzMiwgMjIwLCA1MSwgCisgICAgNywgNCwgMSwgMjQ5LCA2OSwgMiwgMjMyLCAyMjAsIDUxLCA3LCA2LCAxLCAyNDksIDY5LCAyLCAyNTAsIDE5MSwgNywgNCwgCisgICAgMSwgMjQ5LCA2OSwgMiwgMjUwLCAxOTEsIDcsIDYsIDEsIDI0OSwgNjksIDIsIDI1MCwgMzksIDUxLCA3LCA0LCAxLCAyNDksIAorICAgIDY5LCAyLCAyNTAsIDM5LCA1MSwgNywgNiwgMSwgMTYwLCAyLCAyMzEsIDIzOCwgMjIsIDI0MiwgMTQzLCA3LCA0LCAxLCAKKyAgICAxNjAsIDIsIDIzMSwgMjM4LCAyMiwgMjQyLCAxNDMsIDcsIDYsIDEsIDE2MCwgMiwgMjMxLCAyMzgsIDIyLCAxNDIsIDcsIDQsIAorICAgIDEsIDE2MCwgMiwgMjMxLCAyMzgsIDIyLCAxNDIsIDcsIDYsIDEsIDE2MCwgMiwgMjUwLCAzOSwgNTEsIDcsIDQsIDEsIDE2MCwgCisgICAgMiwgMjUwLCAzOSwgNTEsIDcsIDYsIDEsIDE2MCwgMiwgMjE2LCA5MCwgNTEsIDcsIDQsIDEsIDE2MCwgMiwgMjE2LCA5MCwgCisgICAgNTEsIDcsIDYsIDEsIDE2MCwgMiwgMjUwLCAxOTIsIDIyLCAyNTEsIDE1NCwgNywgNCwgMSwgMTYwLCAyLCAyNTAsIDE5MiwgCisgICAgMjIsIDI1MSwgMTU0LCA3LCA2LCAxLCAyNDUsIDE1LCAyLCA1OSwgNDgsIDcsIDQsIDEsIDI0NSwgMTUsIDIsIDU5LCA0OCwgCisgICAgNywgNiwgMSwgMjQzLCAyMTAsIDIsIDIzMSwgMjM3LCA3LCA0LCAxLCAyNDMsIDIxMCwgMiwgMjMxLCAyMzcsIDcsIDYsIDEsIAorICAgIDI0MiwgNjgsIDIsIDU5LCA0OCwgNywgNCwgMSwgMjQyLCA2OCwgMiwgNTksIDQ4LCA3LCA2LCAxLCAyNDIsIDY4LCAyLCA1OSwgCisgICAgNTEsIDcsIDQsIDEsIDI0MiwgNjgsIDIsIDU5LCA1MSwgNywgNiwgMSwgMjQyLCA2OCwgMiwgMjQ4LCA5LCA3LCA0LCAxLCAKKyAgICAyNDIsIDY4LCAyLCAyNDgsIDksIDcsIDYsIDEsIDI0MiwgNjgsIDIsIDI1MCwgMTkxLCA3LCA0LCAxLCAyNDIsIDY4LCAyLCAKKyAgICAyNTAsIDE5MSwgNywgNiwgMSwgMjQyLCA2OCwgMiwgMjUxLCAxNTUsIDUxLCA3LCA0LCAxLCAyNDIsIDY4LCAyLCAyNTEsIAorICAgIDE1NSwgNTEsIDcsIDYsIDEsIDI0MCwgMTYxLCAyLCAyMTYsIDkwLCA1MSwgNywgNCwgMSwgMjQwLCAxNjEsIDIsIDIxNiwgCisgICAgOTAsIDUxLCA3LCA2LCAxLCAyNDAsIDE2MSwgMiwgMjQ4LCAxMCwgMjIsIDE0MiwgNywgNCwgMSwgMjQwLCAxNjEsIDIsIAorICAgIDI0OCwgMTAsIDIyLCAxNDIsIDcsIDYsIDEsIDIzNSwgMzAsIDIsIDE0MiwgNywgNCwgMSwgMjM1LCAzMCwgMiwgMTQyLCA3LCAKKyAgICA2LCAxLCAyMzUsIDMwLCAyLCA1OSwgNTEsIDcsIDQsIDEsIDIzNSwgMzAsIDIsIDU5LCA1MSwgNywgNiwgMSwgMjM1LCAzMCwgCisgICAgMiwgMjMyLCAyMjAsIDUxLCA3LCA0LCAxLCAyMzUsIDMwLCAyLCAyMzIsIDIyMCwgNTEsIDcsIDYsIDEsIDIzMywgMTU1LCAyLCAKKyAgICA1OSwgNTEsIDcsIDQsIDEsIDIzMywgMTU1LCAyLCA1OSwgNTEsIDcsIDYsIDEsIDIzMywgMTU1LCAyLCA1OSwgMjUyLCA1MSwgCisgICAgMjIsIDIzMSwgMjM3LCA3LCA0LCAxLCAyMzMsIDE1NSwgMiwgNTksIDI1MiwgNTEsIDIyLCAyMzEsIDIzNywgNywgNiwgMSwgCisgICAgMjMzLCAxNTUsIDIsIDIzMiwgMjIwLCA1MSwgNywgNCwgMSwgMjMzLCAxNTUsIDIsIDIzMiwgMjIwLCA1MSwgNywgNiwgMSwgCisgICAgMjMzLCAxNTUsIDIsIDI1MCwgMzksIDUxLCA3LCA0LCAxLCAyMzMsIDE1NSwgMiwgMjUwLCAzOSwgNTEsIDcsIDYsIDEsIAorICAgIDIzMiwgNTUsIDIsIDE0MiwgNywgNCwgMSwgMjMyLCA1NSwgMiwgMTQyLCA3LCA2LCAxLCAyMzIsIDU1LCAyLCA1OSwgNDgsIAorICAgIDcsIDQsIDEsIDIzMiwgNTUsIDIsIDU5LCA0OCwgNywgNiwgMSwgMjMyLCA1NSwgMiwgNTksIDUxLCA3LCA0LCAxLCAyMzIsIAorICAgIDU1LCAyLCA1OSwgNTEsIDcsIDYsIDEsIDIzMCwgMzEsIDIsIDU5LCA0OCwgNywgNCwgMSwgMjMwLCAzMSwgMiwgNTksIDQ4LCAKKyAgICA3LCA2LCAxLCAyMzAsIDMxLCAyLCA1OSwgNTEsIDcsIDQsIDEsIDIzMCwgMzEsIDIsIDU5LCA1MSwgNywgNiwgMSwgMjMwLCAKKyAgICAzMSwgMiwgMjMyLCAyMjAsIDUxLCA3LCA0LCAxLCAyMzAsIDMxLCAyLCAyMzIsIDIyMCwgNTEsIDcsIDYsIDEsIDIzMCwgMzEsIAorICAgIDIsIDI1MCwgMzksIDUxLCA3LCA0LCAxLCAyMzAsIDMxLCAyLCAyNTAsIDM5LCA1MSwgNywgNiwgMSwgMTQ0LCAyLCAyMTYsIAorICAgIDkwLCAyMiwgMTQyLCA3LCA0LCAxLCAxNDQsIDIsIDIxNiwgOTAsIDIyLCAxNDIsIDcsIDYsIDEsIDE0NCwgMiwgMjE2LCA5MCwgCisgICAgMjIsIDI0OCwgOSwgNywgNCwgMSwgMTQ0LCAyLCAyMTYsIDkwLCAyMiwgMjQ4LCA5LCA3LCA2LCAxLCAxNDQsIDIsIDIzMSwgCisgICAgMjM4LCAyMiwgMjQyLCAxNDMsIDcsIDQsIDEsIDE0NCwgMiwgMjMxLCAyMzgsIDIyLCAyNDIsIDE0MywgNywgNiwgMSwgMTQ0LCAKKyAgICAyLCAyMzEsIDIzOCwgMjIsIDE0MiwgNywgNCwgMSwgMTQ0LCAyLCAyMzEsIDIzOCwgMjIsIDE0MiwgNywgNiwgMSwgMjI2LCAKKyAgICAxMTAsIDIsIDE0MiwgNywgNCwgMSwgMjI2LCAxMTAsIDIsIDE0MiwgNywgNiwgMSwgMjI2LCAxMTAsIDIsIDU5LCA0OCwgNywgCisgICAgNCwgMSwgMjI2LCAxMTAsIDIsIDU5LCA0OCwgNywgNiwgMSwgMjIzLCAyMjcsIDIsIDU5LCA0OCwgNywgNCwgMSwgMjIzLCAKKyAgICAyMjcsIDIsIDU5LCA0OCwgNywgNiwgMSwgMjIzLCAyMjcsIDIsIDU5LCA1MSwgNywgNCwgMSwgMjIzLCAyMjcsIDIsIDU5LCAKKyAgICA1MSwgNywgNiwgMSwgMjIzLCAyMjcsIDIsIDU5LCAyNTIsIDUxLCAyMiwgMjMxLCAyMzcsIDcsIDQsIDEsIDIyMywgMjI3LCAKKyAgICAyLCA1OSwgMjUyLCA1MSwgMjIsIDIzMSwgMjM3LCA3LCA2LCAxLCAyMjMsIDIyNywgMiwgMjMyLCAyMjAsIDUxLCA3LCA0LCAKKyAgICAxLCAyMjMsIDIyNywgMiwgMjMyLCAyMjAsIDUxLCA3LCA2LCAxLCAyMjIsIDk0LCAyLCA1OSwgNDgsIDcsIDQsIDEsIDIyMiwgCisgICAgOTQsIDIsIDU5LCA0OCwgNywgNiwgMSwgMjIyLCA5NCwgMiwgNTksIDUxLCA3LCA0LCAxLCAyMjIsIDk0LCAyLCA1OSwgNTEsIAorICAgIDcsIDYsIDEsIDIyMiwgOTQsIDIsIDI1NSwgMTIsIDIyLCA1OSwgNDgsIDcsIDQsIDEsIDIyMiwgOTQsIDIsIDI1NSwgMTIsIAorICAgIDIyLCA1OSwgNDgsIDcsIDYsIDEsIDIyMiwgOTQsIDIsIDI1MCwgMjQzLCAyMiwgNTksIDQ4LCA3LCA0LCAxLCAyMjIsIDk0LCAKKyAgICAyLCAyNTAsIDI0MywgMjIsIDU5LCA0OCwgNywgNiwgMSwgMjIyLCA5NCwgMiwgNTksIDI1MiwgNTEsIDIyLCA1OSwgNDgsIDcsIAorICAgIDQsIDEsIDIyMiwgOTQsIDIsIDU5LCAyNTIsIDUxLCAyMiwgNTksIDQ4LCA3LCA2LCAxLCAyMTcsIDE1NCwgMiwgNTksIDQ4LCAKKyAgICA3LCA0LCAxLCAyMTcsIDE1NCwgMiwgNTksIDQ4LCA3LCA2LCAxLCAyMTcsIDE1NCwgMiwgNTksIDUxLCA3LCA0LCAxLCAyMTcsIAorICAgIDE1NCwgMiwgNTksIDUxLCA3LCA2LCAxLCAyMTcsIDE1NCwgMiwgMjMyLCAyMjAsIDUxLCA3LCA0LCAxLCAyMTcsIDE1NCwgMiwgCisgICAgMjMyLCAyMjAsIDUxLCA3LCA2LCAxLCAyMTcsIDE1NCwgMiwgMjUwLCAzOSwgNTEsIDcsIDQsIDEsIDIxNywgMTU0LCAyLCAKKyAgICAyNTAsIDM5LCA1MSwgNywgNiwgMSwgMTA0LCAyLCAyNDgsIDEwLCA1MSwgNywgNCwgMSwgMTA0LCAyLCAyNDgsIDEwLCA1MSwgCisgICAgNywgNiwgMSwgMTA0LCAyLCAyMTYsIDkwLCA1MSwgNywgNCwgMSwgMTA0LCAyLCAyMTYsIDkwLCA1MSwgNywgNiwgMSwgMTA0LCAKKyAgICAyLCAyNTAsIDM5LCA1MSwgNywgNCwgMSwgMTA0LCAyLCAyNTAsIDM5LCA1MSwgNywgNiwgMSwgMTA0LCAyLCAyMTYsIDkwLCAKKyAgICAyMiwgMTQyLCA3LCA0LCAxLCAxMDQsIDIsIDIxNiwgOTAsIDIyLCAxNDIsIDcsIDYsIDEsIDEwNCwgMiwgMjMxLCAyMzgsIAorICAgIDIyLCAyNDgsIDksIDcsIDQsIDEsIDEwNCwgMiwgMjMxLCAyMzgsIDIyLCAyNDgsIDksIDcsIDYsIDEsIDIxNCwgMTA2LCAyLCAKKyAgICAxODQsIDcsIDQsIDEsIDIxNCwgMTA2LCAyLCAxODQsIDcsIDYsIDEsIDIxNCwgMTA2LCAyLCA1OSwgNTEsIDcsIDQsIDEsIAorICAgIDIxNCwgMTA2LCAyLCA1OSwgNTEsIDcsIDYsIDEsIDIxMiwgOTksIDIsIDI0MiwgMTQzLCA3LCA0LCAxLCAyMTIsIDk5LCAyLCAKKyAgICAyNDIsIDE0MywgNywgNiwgMSwgMjEyLCA5OSwgMiwgMTQyLCA3LCA0LCAxLCAyMTIsIDk5LCAyLCAxNDIsIDcsIDYsIDEsIAorICAgIDIxMiwgOTksIDIsIDI0OCwgOSwgNywgNCwgMSwgMjEyLCA5OSwgMiwgMjQ4LCA5LCA3LCA2LCAxLCAyMTIsIDk5LCAyLCA1OSwgCisgICAgNDgsIDcsIDQsIDEsIDIxMiwgOTksIDIsIDU5LCA0OCwgNywgNiwgMSwgMjEyLCA5OSwgMiwgNTksIDUxLCA3LCA0LCAxLCAKKyAgICAyMTIsIDk5LCAyLCA1OSwgNTEsIDcsIDYsIDEsIDIxMSwgMTc5LCAyLCA1OSwgNDgsIDcsIDQsIDEsIDIxMSwgMTc5LCAyLCAKKyAgICA1OSwgNDgsIDcsIDYsIDEsIDIxMSwgMTc5LCAyLCAyNDgsIDksIDcsIDQsIDEsIDIxMSwgMTc5LCAyLCAyNDgsIDksIDcsIDYsIAorICAgIDEsIDIxMSwgMTE4LCAyLCA1OSwgNDgsIDcsIDQsIDEsIDIxMSwgMTE4LCAyLCA1OSwgNDgsIDcsIDYsIDEsIDIxMCwgMTYwLCAKKyAgICAyLCAyNTAsIDM4LCA3LCA0LCAxLCAyMTAsIDE2MCwgMiwgMjUwLCAzOCwgNywgNiwgMSwgMjEwLCAxNjAsIDIsIDU5LCA1MSwgCisgICAgNywgNCwgMSwgMjEwLCAxNjAsIDIsIDU5LCA1MSwgNywgNiwgMSwgMjEwLCAxNjAsIDIsIDIzMiwgMjIwLCA1MSwgNywgNCwgCisgICAgMSwgMjEwLCAxNjAsIDIsIDIzMiwgMjIwLCA1MSwgNywgNCwgMSwgMjQyLCA2OCwgMiwgMjMyLCAyMjAsIDUxLCA3LCA0LCAxLCAKKyAgICAyMTcsIDE1NCwgMiwgMjQ4LCA5LCA3LCA0LCAxLCAyMTIsIDk5LCAyLCAyMjIsIDIzNywgNDgsIDcsIDQsIDEsIDIxMSwgCisgICAgMTE4LCAyLCAyMjIsIDIzNywgNDgsIDcsIDQsIDEsIDExNiwgMiwgNDQsIDE2MywgMjIyLCAyMzYsIDcsIDQsIDEsIDIwMCwgCisgICAgMjIyLCA5NCwgMiwgNTksIDQ4LCA3LCA0LCAxLCAyMDAsIDIyMiwgOTQsIDIsIDI0OCwgNywgOTEsIDcsIDQsIDEsIDIwMCwgCisgICAgMjIyLCA5NCwgMiwgMTI1LCA5MSwgNywgNiwgMSwgMjIwLCA3OCwgMjIyLCA5MywgNywgNCwgMSwgMjQ4LCA2MiwgNywgNiwgCisgICAgMSwgMTE2LCAyLCA1OSwgNTEsIDcsIDQsIDEsIDExNiwgMiwgNTksIDUxLCA3LCA2LCAxLCAxMTYsIDIsIDI0MSwgNTksIDQ4LCAKKyAgICA3LCA0LCAxLCAxMTYsIDIsIDI0MSwgNTksIDQ4LCA3LCA2LCAxLCAxMTYsIDIsIDI1MCwgMzksIDIyLCAxNDIsIDcsIDQsIDEsIAorICAgIDExNiwgMiwgMjUwLCAzOSwgMjIsIDE0MiwgNywgNiwgMSwgMTE2LCAyLCAyNTAsIDM5LCAyMiwgMjQyLCAxNDMsIDcsIDQsIAorICAgIDEsIDExNiwgMiwgMjUwLCAzOSwgMjIsIDI0MiwgMTQzLCA3LCA2LCAxLCAxMTYsIDIsIDI1MCwgMzksIDIyLCAyNDEsIDU5LCAKKyAgICA0OCwgNywgNCwgMSwgMTE2LCAyLCAyNTAsIDM5LCAyMiwgMjQxLCA1OSwgNDgsIDcsIDYsIDEsIDExNiwgMiwgMjUwLCAzOSwgCisgICAgMjIsIDE4NCwgNywgNCwgMSwgMTE2LCAyLCAyNTAsIDM5LCAyMiwgMTg0LCA3LCA2LCAxLCAxMTYsIDIsIDI1MCwgMzksIDIyLCAKKyAgICA1OSwgNTEsIDcsIDQsIDEsIDExNiwgMiwgMjUwLCAzOSwgMjIsIDU5LCA1MSwgNywgNiwgMSwgMTE2LCAyLCAyNTEsIDE1NSwgCisgICAgMjIsIDE0MiwgNywgNCwgMSwgMTE2LCAyLCAyNTEsIDE1NSwgMjIsIDE0MiwgNywgNiwgMSwgMTE2LCAyLCAyNTEsIDE1NSwgCisgICAgMjIsIDI0MiwgMTQzLCA3LCA0LCAxLCAxMTYsIDIsIDI1MSwgMTU1LCAyMiwgMjQyLCAxNDMsIDcsIDYsIDEsIDExNiwgMiwgCisgICAgMjUxLCAxNTUsIDIyLCAyNDEsIDU5LCA0OCwgNywgNCwgMSwgMTE2LCAyLCAyNTEsIDE1NSwgMjIsIDI0MSwgNTksIDQ4LCA3LCAKKyAgICA2LCAxLCAxMTYsIDIsIDI1MSwgMTU1LCAyMiwgMTg0LCA3LCA0LCAxLCAxMTYsIDIsIDI1MSwgMTU1LCAyMiwgMTg0LCA3LCAKKyAgICA2LCAxLCAxMTYsIDIsIDI1MSwgMTU1LCAyMiwgNTksIDUxLCA3LCA0LCAxLCAxMTYsIDIsIDI1MSwgMTU1LCAyMiwgNTksIAogICAgIDUxLCA3LCA2LCAxLCAxNjAsIDIsIDU5LCA1MSwgNywgNCwgMSwgMTYwLCAyLCA1OSwgNTEsIDcsIDYsIDEsIDE2MCwgMiwgCi0gICAgMjQxLCA1MiwgNDgsIDcsIDQsIDEsIDE2MCwgMiwgMjQxLCA1MiwgNDgsIDcsIDYsIDEsIDE2MCwgMiwgMTgyLCA3LCA0LCAxLCAKLSAgICAxNjAsIDIsIDE4MiwgNywgNiwgMSwgMTYwLCAyLCAyNTAsIDMxLCAyMiwgMTQyLCA3LCA0LCAxLCAxNjAsIDIsIDI1MCwgMzEsIAotICAgIDIyLCAxNDIsIDcsIDYsIDEsIDE2MCwgMiwgMjUwLCAzMSwgMjIsIDI0MiwgMTM2LCA3LCA0LCAxLCAxNjAsIDIsIDI1MCwgCi0gICAgMzEsIDIyLCAyNDIsIDEzNiwgNywgNiwgMSwgMTYwLCAyLCAyNTAsIDMxLCAyMiwgMjQxLCA1MiwgNDgsIDcsIDQsIDEsIAotICAgIDE2MCwgMiwgMjUwLCAzMSwgMjIsIDI0MSwgNTIsIDQ4LCA3LCA2LCAxLCAxNjAsIDIsIDI1MCwgMzEsIDIyLCAxODIsIDcsIAotICAgIDQsIDEsIDE2MCwgMiwgMjUwLCAzMSwgMjIsIDE4MiwgNywgNiwgMSwgMTYwLCAyLCAyNTAsIDMxLCAyMiwgNTksIDUxLCA3LCAKLSAgICA0LCAxLCAxNjAsIDIsIDI1MCwgMzEsIDIyLCA1OSwgNTEsIDcsIDYsIDEsIDI0MCwgMTU0LCAyLCAyNDEsIDUyLCA0OCwgNywgCi0gICAgNCwgMSwgMjQwLCAxNTQsIDIsIDI0MSwgNTIsIDQ4LCA3LCA2LCAxLCAyNDAsIDE1NCwgMiwgNTksIDUxLCA3LCA0LCAxLCAKLSAgICAyNDAsIDE1NCwgMiwgNTksIDUxLCA3LCA2LCAxLCAxNDQsIDIsIDU5LCA1MSwgNywgNCwgMSwgMTQ0LCAyLCA1OSwgNTEsIDcsIAotICAgIDYsIDEsIDE0NCwgMiwgMjQxLCA1MiwgNDgsIDcsIDQsIDEsIDE0NCwgMiwgMjQxLCA1MiwgNDgsIDcsIDYsIDEsIDE0NCwgMiwgCi0gICAgMjUwLCAzMSwgMjIsIDE0MiwgNywgNCwgMSwgMTQ0LCAyLCAyNTAsIDMxLCAyMiwgMTQyLCA3LCA2LCAxLCAxNDQsIDIsIAotICAgIDI1MCwgMzEsIDIyLCAyNDIsIDEzNiwgNywgNCwgMSwgMTQ0LCAyLCAyNTAsIDMxLCAyMiwgMjQyLCAxMzYsIDcsIDYsIDEsIAotICAgIDE0NCwgMiwgMjUwLCAzMSwgMjIsIDI0MSwgNTIsIDQ4LCA3LCA0LCAxLCAxNDQsIDIsIDI1MCwgMzEsIDIyLCAyNDEsIDUyLCAKLSAgICA0OCwgNywgNiwgMSwgMTQ0LCAyLCAyNTAsIDMxLCAyMiwgMTgyLCA3LCA0LCAxLCAxNDQsIDIsIDI1MCwgMzEsIDIyLCAxODIsIAotICAgIDcsIDYsIDEsIDE0NCwgMiwgMjUwLCAzMSwgMjIsIDU5LCA1MSwgNywgNCwgMSwgMTQ0LCAyLCAyNTAsIDMxLCAyMiwgNTksIAotICAgIDUxLCA3LCA2LCAxLCAxNDQsIDIsIDI0MCwgMjQ5LCAyMiwgMTQyLCA3LCA0LCAxLCAxNDQsIDIsIDI0MCwgMjQ5LCAyMiwgCi0gICAgMTQyLCA3LCA2LCAxLCAxNDQsIDIsIDI0MCwgMjQ5LCAyMiwgMjQyLCAxMzYsIDcsIDQsIDEsIDE0NCwgMiwgMjQwLCAyNDksIAotICAgIDIyLCAyNDIsIDEzNiwgNywgNiwgMSwgMTQ0LCAyLCAyNDAsIDI0OSwgMjIsIDI0MSwgNTIsIDQ4LCA3LCA0LCAxLCAxNDQsIAotICAgIDIsIDI0MCwgMjQ5LCAyMiwgMjQxLCA1MiwgNDgsIDcsIDYsIDEsIDE0NCwgMiwgMjQwLCAyNDksIDIyLCAxODIsIDcsIDQsIAotICAgIDEsIDE0NCwgMiwgMjQwLCAyNDksIDIyLCAxODIsIDcsIDYsIDEsIDE0NCwgMiwgMjQwLCAyNDksIDIyLCA1OSwgNTEsIDcsIAotICAgIDQsIDEsIDE0NCwgMiwgMjQwLCAyNDksIDIyLCA1OSwgNTEsIDcsIDYsIDEsIDEwNCwgMiwgNTksIDUxLCA3LCA0LCAxLCAKLSAgICAxMDQsIDIsIDU5LCA1MSwgNywgNiwgMSwgMTA0LCAyLCAyNDEsIDUyLCA0OCwgNywgNCwgMSwgMTA0LCAyLCAyNDEsIDUyLCAKLSAgICA0OCwgNywgNiwgMSwgMTA0LCAyLCAyNDAsIDI0OSwgMjIsIDE0MiwgNywgNCwgMSwgMTA0LCAyLCAyNDAsIDI0OSwgMjIsIAotICAgIDE0MiwgNywgNiwgMSwgMTA0LCAyLCAyNDAsIDI0OSwgMjIsIDI0MiwgMTM2LCA3LCA0LCAxLCAxMDQsIDIsIDI0MCwgMjQ5LCAKLSAgICAyMiwgMjQyLCAxMzYsIDcsIDYsIDEsIDEwNCwgMiwgMjQwLCAyNDksIDIyLCAyNDEsIDUyLCA0OCwgNywgNCwgMSwgMTA0LCAKLSAgICAyLCAyNDAsIDI0OSwgMjIsIDI0MSwgNTIsIDQ4LCA3LCA2LCAxLCAxMDQsIDIsIDI0MCwgMjQ5LCAyMiwgMTgyLCA3LCA0LCAKLSAgICAxLCAxMDQsIDIsIDI0MCwgMjQ5LCAyMiwgMTgyLCA3LCA2LCAxLCAxMDQsIDIsIDI0MCwgMjQ5LCAyMiwgNTksIDUxLCA3LCAKLSAgICA0LCAxLCAxMDQsIDIsIDI0MCwgMjQ5LCAyMiwgNTksIDUxLCA3LCA2LCAxLCAyMTEsIDExOCwgMiwgMjQyLCAxMzYsIDcsIDQsIAotICAgIDEsIDIxMSwgMTE4LCAyLCAyNDIsIDEzNiwgNywgNiwgMSwgMjExLCAxMTgsIDIsIDU5LCA1MSwgNywgNCwgMSwgMjExLCAKLSAgICAxMTgsIDIsIDU5LCA1MSwgNywgNiwgMSwgMjExLCAxMTgsIDIsIDI0MSwgNTIsIDQ4LCA3LCA0LCAxLCAyMTEsIDExOCwgMiwgCi0gICAgMjQxLCA1MiwgNDgsIDcsIDYsIDEsIDIxMSwgMTE4LCAyLCAxODIsIDcsIDQsIDEsIDIxMSwgMTE4LCAyLCAxODIsIDcsIDYsIAotICAgIDEsIDIzMCwgMjIzLCAyMzIsIDE4NSwgNywgNCwgMSwgMjMwLCAyMjMsIDIzMiwgMTg1LCA3LCA2LCAxLCAyMzAsIDIyMywgCi0gICAgMjE0LCAxMDUsIDcsIDQsIDEsIDIzMCwgMjIzLCAyMTQsIDEwNSwgNywgNiwgMSwgMjExLCAxMTgsIDIsIDIzMiwgMTIzLCA3LCAKLSAgICA0LCAxLCAyMTEsIDExOCwgMiwgMjMyLCAxMjMsIDI2LCA0LCAxLCAyNTQsIDE0NCwgMiwgMjI0LCAxNTQsIDI2LCA0LCAxLCAKLSAgICAyNTQsIDE0NCwgMiwgMjQ4LCAxNTMsIDI2LCA0LCAxLCAyNTQsIDE0NCwgMiwgMjI0LCAxNTUsIDIyLCAyMTQsIDEzLCAyNiwgCi0gICAgNCwgMSwgMjU0LCAxNDQsIDIsIDI0OCwgMTU0LCAyMiwgMjE0LCAxMywgMjYsIDQsIDEsIDI1NCwgMTQ0LCAyLCAyMjQsIAotICAgIDE1NSwgMjIsIDIyNiwgMTEwLCAyNiwgNCwgMSwgMjU0LCAxNDQsIDIsIDI0OCwgMTU0LCAyMiwgMjI2LCAxMTAsIDI2LCA0LCAKLSAgICAxLCAyNTQsIDE0NCwgMiwgMjI0LCAxNTUsIDIyLCAyMjUsIDE3NSwgMjYsIDQsIDEsIDI1NCwgMTQ0LCAyLCAyNDgsIDE1NCwgCi0gICAgMjIsIDIyNSwgMTc1LCAyNiwgNiwgMSwgMjU0LCAxNDQsIDIsIDIyNCwgMTU0LCAyNiwgNiwgMSwgMjU0LCAxNDQsIDIsIAotICAgIDI0OCwgMTUzLCAyNiwgNiwgMSwgMjU0LCAxNDQsIDIsIDIyNCwgMTU1LCAyMiwgMjE0LCAxMywgMjYsIDYsIDEsIDI1NCwgCi0gICAgMTQ0LCAyLCAyNDgsIDE1NCwgMjIsIDIxNCwgMTMsIDI2LCA2LCAxLCAyNTQsIDE0NCwgMiwgMjI0LCAxNTUsIDIyLCAyMjYsIAotICAgIDExMCwgMjYsIDYsIDEsIDI1NCwgMTQ0LCAyLCAyNDgsIDE1NCwgMjIsIDIyNiwgMTEwLCAyNiwgNiwgMSwgMjU0LCAxNDQsIAotICAgIDIsIDIyNCwgMTU1LCAyMiwgMjI1LCAxNzUsIDI2LCA2LCAxLCAyNTQsIDE0NCwgMiwgMjQ4LCAxNTQsIDIyLCAyMjUsIDE3NSwgCi0gICAgMjYsIDQsIDEsIDI0NSwgMTAxLCAyLCAyMjQsIDE1NCwgMjYsIDQsIDEsIDI0NSwgMTAxLCAyLCAyNDgsIDE1MywgMjYsIDQsIAotICAgIDEsIDI0NSwgMTAxLCAyLCAyMjQsIDE1NSwgMjIsIDIxNCwgMTMsIDI2LCA0LCAxLCAyNDUsIDEwMSwgMiwgMjQ4LCAxNTQsIAotICAgIDIyLCAyMTQsIDEzLCAyNiwgNCwgMSwgMjQ1LCAxMDEsIDIsIDIyNCwgMTU1LCAyMiwgMjI2LCAxMTAsIDI2LCA0LCAxLCAKLSAgICAyNDUsIDEwMSwgMiwgMjQ4LCAxNTQsIDIyLCAyMjYsIDExMCwgMjYsIDYsIDEsIDI0NSwgMTAxLCAyLCAyMjQsIDE1NCwgMjYsIAotICAgIDYsIDEsIDI0NSwgMTAxLCAyLCAyNDgsIDE1MywgMjYsIDYsIDEsIDI0NSwgMTAxLCAyLCAyMjQsIDE1NSwgMjIsIDIxNCwgCi0gICAgMTMsIDI2LCA2LCAxLCAyNDUsIDEwMSwgMiwgMjQ4LCAxNTQsIDIyLCAyMTQsIDEzLCAyNiwgNiwgMSwgMjQ1LCAxMDEsIDIsIAotICAgIDIyNCwgMTU1LCAyMiwgMjI2LCAxMTAsIDI2LCA2LCAxLCAyNDUsIDEwMSwgMiwgMjQ4LCAxNTQsIDIyLCAyMjYsIDExMCwgCi0gICAgMjYsIDQsIDEsIDI0NSwgNjQsIDIsIDIyNCwgMTU0LCAyNiwgNCwgMSwgMjQ1LCA2NCwgMiwgMjQ4LCAxNTMsIDI2LCA0LCAxLCAKLSAgICAyNDUsIDY0LCAyLCAyMjQsIDE1NSwgMjIsIDIxNCwgMTMsIDI2LCA0LCAxLCAyNDUsIDY0LCAyLCAyNDgsIDE1NCwgMjIsIAotICAgIDIxNCwgMTMsIDI2LCA0LCAxLCAyNDUsIDY0LCAyLCAyMjQsIDE1NSwgMjIsIDIyNiwgMTEwLCAyNiwgNCwgMSwgMjQ1LCA2NCwgCi0gICAgMiwgMjQ4LCAxNTQsIDIyLCAyMjYsIDExMCwgMjYsIDQsIDEsIDI0NSwgNjQsIDIsIDIyNCwgMTU1LCAyMiwgMjI1LCAxNzUsIAotICAgIDI2LCA0LCAxLCAyNDUsIDY0LCAyLCAyNDgsIDE1NCwgMjIsIDIyNSwgMTc1LCAyNiwgNiwgMSwgMjQ1LCA2NCwgMiwgMjI0LCAKLSAgICAxNTQsIDI2LCA2LCAxLCAyNDUsIDY0LCAyLCAyNDgsIDE1MywgMjYsIDYsIDEsIDI0NSwgNjQsIDIsIDIyNCwgMTU1LCAyMiwgCi0gICAgMjE0LCAxMywgMjYsIDYsIDEsIDI0NSwgNjQsIDIsIDI0OCwgMTU0LCAyMiwgMjE0LCAxMywgMjYsIDYsIDEsIDI0NSwgNjQsIAotICAgIDIsIDIyNCwgMTU1LCAyMiwgMjI2LCAxMTAsIDI2LCA2LCAxLCAyNDUsIDY0LCAyLCAyNDgsIDE1NCwgMjIsIDIyNiwgMTEwLCAKLSAgICAyNiwgNiwgMSwgMjQ1LCA2NCwgMiwgMjI0LCAxNTUsIDIyLCAyMjUsIDE3NSwgMjYsIDYsIDEsIDI0NSwgNjQsIDIsIDI0OCwgCi0gICAgMTU0LCAyMiwgMjI1LCAxNzUsIDI2LCA0LCAxLCAyMzUsIDE4NiwgMiwgMjI0LCAxNTQsIDI2LCA0LCAxLCAyMzUsIDE4NiwgCi0gICAgMiwgMjQ4LCAxNTMsIDI2LCA0LCAxLCAyMzUsIDE4NiwgMiwgMjI0LCAxNTUsIDIyLCAyMTQsIDEzLCAyNiwgNCwgMSwgMjM1LCAKLSAgICAxODYsIDIsIDI0OCwgMTU0LCAyMiwgMjE0LCAxMywgMjYsIDQsIDEsIDIzNSwgMTg2LCAyLCAyMjQsIDE1NSwgMjIsIDIyNiwgCi0gICAgMTEwLCAyNiwgNCwgMSwgMjM1LCAxODYsIDIsIDI0OCwgMTU0LCAyMiwgMjI2LCAxMTAsIDI2LCA0LCAxLCAyMzUsIDE4NiwgCi0gICAgMiwgMjI0LCAxNTUsIDIyLCAyMjUsIDE3NSwgMjYsIDQsIDEsIDIzNSwgMTg2LCAyLCAyNDgsIDE1NCwgMjIsIDIyNSwgMTc1LCAKLSAgICAyNiwgNiwgMSwgMjM1LCAxODYsIDIsIDIyNCwgMTU0LCAyNiwgNiwgMSwgMjM1LCAxODYsIDIsIDI0OCwgMTUzLCAyNiwgNiwgCi0gICAgMSwgMjM1LCAxODYsIDIsIDIyNCwgMTU1LCAyMiwgMjE0LCAxMywgMjYsIDYsIDEsIDIzNSwgMTg2LCAyLCAyNDgsIDE1NCwgCi0gICAgMjIsIDIxNCwgMTMsIDI2LCA2LCAxLCAyMzUsIDE4NiwgMiwgMjI0LCAxNTUsIDIyLCAyMjYsIDExMCwgMjYsIDYsIDEsIAotICAgIDIzNSwgMTg2LCAyLCAyNDgsIDE1NCwgMjIsIDIyNiwgMTEwLCAyNiwgNiwgMSwgMjM1LCAxODYsIDIsIDIyNCwgMTU1LCAyMiwgCi0gICAgMjI1LCAxNzUsIDI2LCA2LCAxLCAyMzUsIDE4NiwgMiwgMjQ4LCAxNTQsIDIyLCAyMjUsIDE3NSwgMjYsIDQsIDEsIDIyNiwgCi0gICAgMjAwLCAyLCAyMjQsIDE1NCwgMjYsIDQsIDEsIDIyNiwgMjAwLCAyLCAyNDgsIDE1MywgMjYsIDQsIDEsIDIyNiwgMjAwLCAyLCAKLSAgICAyMjQsIDE1NSwgMjIsIDIxNCwgMTMsIDI2LCA0LCAxLCAyMjYsIDIwMCwgMiwgMjQ4LCAxNTQsIDIyLCAyMTQsIDEzLCAyNiwgCi0gICAgNCwgMSwgMjI2LCAyMDAsIDIsIDIyNCwgMTU1LCAyMiwgMjI2LCAxMTAsIDI2LCA0LCAxLCAyMjYsIDIwMCwgMiwgMjQ4LCAKLSAgICAxNTQsIDIyLCAyMjYsIDExMCwgMjYsIDYsIDEsIDIyNiwgMjAwLCAyLCAyMjQsIDE1NCwgMjYsIDYsIDEsIDIyNiwgMjAwLCAKLSAgICAyLCAyNDgsIDE1MywgMjYsIDYsIDEsIDIyNiwgMjAwLCAyLCAyMjQsIDE1NSwgMjIsIDIxNCwgMTMsIDI2LCA2LCAxLCAyMjYsIAotICAgIDIwMCwgMiwgMjQ4LCAxNTQsIDIyLCAyMTQsIDEzLCAyNiwgNiwgMSwgMjI2LCAyMDAsIDIsIDIyNCwgMTU1LCAyMiwgMjI2LCAKLSAgICAxMTAsIDI2LCA2LCAxLCAyMjYsIDIwMCwgMiwgMjQ4LCAxNTQsIDIyLCAyMjYsIDExMCwgMjYsIDQsIDEsIDIxNCwgMTU4LCAKLSAgICAyLCAyMjQsIDE1NCwgMjYsIDQsIDEsIDIxNCwgMTU4LCAyLCAyNDgsIDE1MywgMjYsIDQsIDEsIDIxNCwgMTU4LCAyLCAyMjQsIAotICAgIDE1NSwgMjIsIDIxNCwgMTMsIDI2LCA0LCAxLCAyMTQsIDE1OCwgMiwgMjQ4LCAxNTQsIDIyLCAyMTQsIDEzLCAyNiwgNCwgMSwgCi0gICAgMjE0LCAxNTgsIDIsIDIyNCwgMTU1LCAyMiwgMjI2LCAxMTAsIDI2LCA0LCAxLCAyMTQsIDE1OCwgMiwgMjQ4LCAxNTQsIDIyLCAKLSAgICAyMjYsIDExMCwgMjYsIDQsIDEsIDIxNCwgMTU4LCAyLCAyMjQsIDE1NSwgMjIsIDIyNSwgMTc1LCAyNiwgNCwgMSwgMjE0LCAKLSAgICAxNTgsIDIsIDI0OCwgMTU0LCAyMiwgMjI1LCAxNzUsIDI2LCA2LCAxLCAyMTQsIDE1OCwgMiwgMjQ4LCAxNTMsIDI2LCA2LCAKLSAgICAxLCAyMTQsIDE1OCwgMiwgMjQ4LCAxNTQsIDIyLCAyMTQsIDEzLCAyNiwgNiwgMSwgMjE0LCAxNTgsIDIsIDI0OCwgMTU0LCAKLSAgICAyMiwgMjI2LCAxMTAsIDI2LCA2LCAxLCAyMTQsIDE1OCwgMiwgMjQ4LCAxNTQsIDIyLCAyMjUsIDE3NSwgMjYsIDQsIDEsIAotICAgIDIyNiwgMjAyLCAyLCAyMjQsIDE1NCwgMjYsIDQsIDEsIDIyNiwgMjAyLCAyLCAyNDgsIDE1MywgMjYsIDQsIDEsIDIyNiwgCi0gICAgMjAyLCAyLCAyMjQsIDE1NSwgMjIsIDIxNCwgMTMsIDI2LCA0LCAxLCAyMjYsIDIwMiwgMiwgMjQ4LCAxNTQsIDIyLCAyMTQsIAotICAgIDEzLCAyNiwgNCwgMSwgMjI2LCAyMDIsIDIsIDIyNCwgMTU1LCAyMiwgMjI2LCAxMTAsIDI2LCA0LCAxLCAyMjYsIDIwMiwgMiwgCi0gICAgMjQ4LCAxNTQsIDIyLCAyMjYsIDExMCwgMjYsIDQsIDEsIDIyNiwgMjAyLCAyLCAyMjQsIDE1NSwgMjIsIDIyNSwgMTc1LCAKLSAgICAyNiwgNCwgMSwgMjI2LCAyMDIsIDIsIDI0OCwgMTU0LCAyMiwgMjI1LCAxNzUsIDI2LCA2LCAxLCAyMjYsIDIwMiwgMiwgCi0gICAgMjI0LCAxNTQsIDI2LCA2LCAxLCAyMjYsIDIwMiwgMiwgMjQ4LCAxNTMsIDI2LCA2LCAxLCAyMjYsIDIwMiwgMiwgMjI0LCAKLSAgICAxNTUsIDIyLCAyMTQsIDEzLCAyNiwgNiwgMSwgMjI2LCAyMDIsIDIsIDI0OCwgMTU0LCAyMiwgMjE0LCAxMywgMjYsIDYsIDEsIAotICAgIDIyNiwgMjAyLCAyLCAyMjQsIDE1NSwgMjIsIDIyNiwgMTEwLCAyNiwgNiwgMSwgMjI2LCAyMDIsIDIsIDI0OCwgMTU0LCAyMiwgCi0gICAgMjI2LCAxMTAsIDI2LCA2LCAxLCAyMjYsIDIwMiwgMiwgMjI0LCAxNTUsIDIyLCAyMjUsIDE3NSwgMjYsIDYsIDEsIDIyNiwgCi0gICAgMjAyLCAyLCAyNDgsIDE1NCwgMjIsIDIyNSwgMTc1LCAyNiwgNCwgMSwgMjU0LCAxNDQsIDIsIDIxNCwgMTMsIDI2LCA0LCAxLCAKLSAgICAyNTQsIDE0NCwgMiwgMjI2LCAxMTAsIDI2LCA0LCAxLCAyNDUsIDEwMSwgMiwgMjE0LCAxMywgMjYsIDQsIDEsIDI0NSwgCi0gICAgMTAxLCAyLCAyMjYsIDExMCwgMjYsIDQsIDEsIDI0NSwgNjQsIDIsIDIxNCwgMTMsIDI2LCA0LCAxLCAyNDUsIDY0LCAyLCAKLSAgICAyMjYsIDExMCwgMjYsIDQsIDEsIDIzNSwgMTg2LCAyLCAyMTQsIDEzLCAyNiwgNCwgMSwgMjM1LCAxODYsIDIsIDIyNiwgCi0gICAgMTEwLCAyNiwgNCwgMSwgMjI2LCAyMDAsIDIsIDIxNCwgMTMsIDI2LCA0LCAxLCAyMjYsIDIwMCwgMiwgMjI2LCAxMTAsIDI2LCAKLSAgICA0LCAxLCAyMTQsIDE1OCwgMiwgMjE0LCAxMywgMjYsIDQsIDEsIDIxNCwgMTU4LCAyLCAyMjYsIDExMCwgMjYsIDQsIDEsIAotICAgIDIyNiwgMjAyLCAyLCAyMTQsIDEzLCAyNiwgNCwgMSwgMjI2LCAyMDIsIDIsIDIyNiwgMTEwLCAyNiwgNCwgMSwgMjU0LCAKLSAgICAxNDQsIDIsIDIyNCwgMTU1LCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyNTQsIDE0NCwgMiwgMjQ4LCAxNTQsIDIyLCAyMTAsIAotICAgIDIxOSwgMjYsIDQsIDEsIDI1NCwgMTQ0LCAyLCAyMjQsIDE1NSwgMjIsIDIxNCwgMTQsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIAotICAgIDEsIDI1NCwgMTQ0LCAyLCAyNDgsIDE1NCwgMjIsIDIxNCwgMTQsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDI1NCwgMTQ0LCAKLSAgICAyLCAyMjQsIDE1NSwgMjIsIDIyNiwgMTExLCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyNTQsIDE0NCwgMiwgMjQ4LCAxNTQsIAotICAgIDIyLCAyMjYsIDExMSwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjU0LCAxNDQsIDIsIDIyNCwgMTU1LCAyMiwgMjI1LCAKLSAgICAxNzYsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDI1NCwgMTQ0LCAyLCAyNDgsIDE1NCwgMjIsIDIyNSwgMTc2LCAyMiwgCi0gICAgMjEwLCAyMTksIDI2LCA2LCAxLCAyNTQsIDE0NCwgMiwgMjI0LCAxNTUsIDIyLCAyMjQsIDE2NywgMjYsIDYsIDEsIDI1NCwgCi0gICAgMTQ0LCAyLCAyNDgsIDE1NCwgMjIsIDIyNCwgMTY3LCAyNiwgNiwgMSwgMjU0LCAxNDQsIDIsIDIyNCwgMTU1LCAyMiwgMjE0LCAKLSAgICAxNCwgMjIsIDIyNCwgMTY3LCAyNiwgNiwgMSwgMjU0LCAxNDQsIDIsIDI0OCwgMTU0LCAyMiwgMjE0LCAxNCwgMjIsIDIyNCwgCi0gICAgMTY3LCAyNiwgNiwgMSwgMjU0LCAxNDQsIDIsIDIyNCwgMTU1LCAyMiwgMjI2LCAxMTEsIDIyLCAyMjQsIDE2NywgMjYsIDYsIAotICAgIDEsIDI1NCwgMTQ0LCAyLCAyNDgsIDE1NCwgMjIsIDIyNiwgMTExLCAyMiwgMjI0LCAxNjcsIDI2LCA2LCAxLCAyNTQsIDE0NCwgCi0gICAgMiwgMjI0LCAxNTUsIDIyLCAyMjUsIDE3NiwgMjIsIDIyNCwgMTY3LCAyNiwgNiwgMSwgMjU0LCAxNDQsIDIsIDI0OCwgMTU0LCAKLSAgICAyMiwgMjI1LCAxNzYsIDIyLCAyMjQsIDE2NywgMjYsIDQsIDEsIDI0NSwgNjQsIDIsIDIyNCwgMTU1LCAyMiwgMjEwLCAyMTksIAotICAgIDI2LCA0LCAxLCAyNDUsIDY0LCAyLCAyNDgsIDE1NCwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjQ1LCA2NCwgMiwgMjI0LCAKLSAgICAxNTUsIDIyLCAyMTQsIDE0LCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyNDUsIDY0LCAyLCAyNDgsIDE1NCwgMjIsIDIxNCwgCi0gICAgMTQsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDI0NSwgNjQsIDIsIDIyNCwgMTU1LCAyMiwgMjI2LCAxMTEsIDIyLCAyMTAsIAotICAgIDIxOSwgMjYsIDQsIDEsIDI0NSwgNjQsIDIsIDI0OCwgMTU0LCAyMiwgMjI2LCAxMTEsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIAotICAgIDEsIDI0NSwgNjQsIDIsIDIyNCwgMTU1LCAyMiwgMjI1LCAxNzYsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDI0NSwgNjQsIAotICAgIDIsIDI0OCwgMTU0LCAyMiwgMjI1LCAxNzYsIDIyLCAyMTAsIDIxOSwgMjYsIDYsIDEsIDI0NSwgNjQsIDIsIDIyNCwgMTU1LCAKLSAgICAyMiwgMjI0LCAxNjcsIDI2LCA2LCAxLCAyNDUsIDY0LCAyLCAyNDgsIDE1NCwgMjIsIDIyNCwgMTY3LCAyNiwgNiwgMSwgCi0gICAgMjQ1LCA2NCwgMiwgMjI0LCAxNTUsIDIyLCAyMTQsIDE0LCAyMiwgMjI0LCAxNjcsIDI2LCA2LCAxLCAyNDUsIDY0LCAyLCAKLSAgICAyNDgsIDE1NCwgMjIsIDIxNCwgMTQsIDIyLCAyMjQsIDE2NywgMjYsIDYsIDEsIDI0NSwgNjQsIDIsIDIyNCwgMTU1LCAyMiwgCi0gICAgMjI2LCAxMTEsIDIyLCAyMjQsIDE2NywgMjYsIDYsIDEsIDI0NSwgNjQsIDIsIDI0OCwgMTU0LCAyMiwgMjI2LCAxMTEsIDIyLCAKLSAgICAyMjQsIDE2NywgMjYsIDYsIDEsIDI0NSwgNjQsIDIsIDIyNCwgMTU1LCAyMiwgMjI1LCAxNzYsIDIyLCAyMjQsIDE2NywgMjYsIAotICAgIDYsIDEsIDI0NSwgNjQsIDIsIDI0OCwgMTU0LCAyMiwgMjI1LCAxNzYsIDIyLCAyMjQsIDE2NywgMjYsIDQsIDEsIDIyNiwgCi0gICAgMjAyLCAyLCAyMjQsIDE1NSwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjI2LCAyMDIsIDIsIDI0OCwgMTU0LCAyMiwgMjEwLCAKLSAgICAyMTksIDI2LCA0LCAxLCAyMjYsIDIwMiwgMiwgMjI0LCAxNTUsIDIyLCAyMTQsIDE0LCAyMiwgMjEwLCAyMTksIDI2LCA0LCAKLSAgICAxLCAyMjYsIDIwMiwgMiwgMjQ4LCAxNTQsIDIyLCAyMTQsIDE0LCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyMjYsIDIwMiwgCi0gICAgMiwgMjI0LCAxNTUsIDIyLCAyMjYsIDExMSwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjI2LCAyMDIsIDIsIDI0OCwgMTU0LCAKLSAgICAyMiwgMjI2LCAxMTEsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDIyNiwgMjAyLCAyLCAyMjQsIDE1NSwgMjIsIDIyNSwgCi0gICAgMTc2LCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyMjYsIDIwMiwgMiwgMjQ4LCAxNTQsIDIyLCAyMjUsIDE3NiwgMjIsIAotICAgIDIxMCwgMjE5LCAyNiwgNiwgMSwgMjI2LCAyMDIsIDIsIDIyNCwgMTU1LCAyMiwgMjI0LCAxNjcsIDI2LCA2LCAxLCAyMjYsIAotICAgIDIwMiwgMiwgMjQ4LCAxNTQsIDIyLCAyMjQsIDE2NywgMjYsIDYsIDEsIDIyNiwgMjAyLCAyLCAyMjQsIDE1NSwgMjIsIDIxNCwgCi0gICAgMTQsIDIyLCAyMjQsIDE2NywgMjYsIDYsIDEsIDIyNiwgMjAyLCAyLCAyNDgsIDE1NCwgMjIsIDIxNCwgMTQsIDIyLCAyMjQsIAotICAgIDE2NywgMjYsIDYsIDEsIDIyNiwgMjAyLCAyLCAyMjQsIDE1NSwgMjIsIDIyNiwgMTExLCAyMiwgMjI0LCAxNjcsIDI2LCA2LCAKLSAgICAxLCAyMjYsIDIwMiwgMiwgMjQ4LCAxNTQsIDIyLCAyMjYsIDExMSwgMjIsIDIyNCwgMTY3LCAyNiwgNiwgMSwgMjI2LCAyMDIsIAotICAgIDIsIDIyNCwgMTU1LCAyMiwgMjI1LCAxNzYsIDIyLCAyMjQsIDE2NywgMjYsIDYsIDEsIDIyNiwgMjAyLCAyLCAyNDgsIDE1NCwgCi0gICAgMjIsIDIyNSwgMTc2LCAyMiwgMjI0LCAxNjcsIDI2LCA0LCAxLCAyNTQsIDE0NCwgMiwgMjEzLCAxMjAsIDI2LCA0LCAxLCAKLSAgICAyNTQsIDE0NCwgMiwgMjMxLCAyMzIsIDI2LCA0LCAxLCAyNTQsIDE0NCwgMiwgMjE0LCAxNCwgMjIsIDIxMCwgMjE5LCAyNiwgCi0gICAgNCwgMSwgMjU0LCAxNDQsIDIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjU0LCAxNDQsIDIsIDIyNiwgMTExLCAyMiwgMjEwLCAKLSAgICAyMTksIDI2LCA0LCAxLCAyNTQsIDE0NCwgMiwgMjI1LCAxNzUsIDI2LCA0LCAxLCAyNTQsIDE0NCwgMiwgMjI1LCAxNzYsIAotICAgIDIyLCAyMTAsIDIxOSwgMjYsIDYsIDEsIDI1NCwgMTQ0LCAyLCAyMTMsIDEyMCwgMjYsIDYsIDEsIDI1NCwgMTQ0LCAyLCAKLSAgICAyMzEsIDIzMiwgMjYsIDYsIDEsIDI1NCwgMTQ0LCAyLCAyMTQsIDEzLCAyNiwgNiwgMSwgMjU0LCAxNDQsIDIsIDIyNiwgCi0gICAgMTEwLCAyNiwgNiwgMSwgMjU0LCAxNDQsIDIsIDIyNCwgMTY3LCAyNiwgMjM0LCAyLCAyNiwgMjI0LCAxNjcsIDI2LCAyMjQsIAotICAgIDE1NCwgMjYsIDIyNSwgMTc1LCAyNiwgMjQ3LCAyNTIsIDIyLCAyMjUsIDE3NSwgMjYsIDQsIDEsIDI0NSwgNjQsIDIsIDIxNCwgCi0gICAgMTQsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDI0NSwgNjQsIDIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjQ1LCA2NCwgMiwgCi0gICAgMjI2LCAxMTEsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDI0NSwgNjQsIDIsIDIyNSwgMTc1LCAyNiwgNCwgMSwgMjQ1LCAKLSAgICA2NCwgMiwgMjI1LCAxNzYsIDIyLCAyMTAsIDIxOSwgMjYsIDYsIDEsIDI0NSwgMTAxLCAyLCAyMTQsIDEzLCAyNiwgNiwgMSwgCi0gICAgMjQ1LCAxMDEsIDIsIDIyNiwgMTEwLCAyNiwgNiwgMSwgMjQ1LCA2NCwgMiwgMjE0LCAxMywgMjYsIDYsIDEsIDI0NSwgNjQsIAotICAgIDIsIDIyNiwgMTEwLCAyNiwgNiwgMSwgMjQ1LCA2NCwgMiwgMjI0LCAxNjcsIDI2LCAyMjQsIDE1NSwgMjIsIDIxNCwgMTMsIAotICAgIDI2LCAyMjQsIDE1NSwgMjIsIDIyNiwgMTEwLCAyNiwgMjI0LCAxNTUsIDIyLCAyMjUsIDE3NSwgMjYsIDQsIDEsIDIzNSwgCi0gICAgMTg2LCAyLCAyMTMsIDEyMCwgMjYsIDQsIDEsIDIzNSwgMTg2LCAyLCAyMzEsIDIzMiwgMjYsIDQsIDEsIDIzNSwgMTg2LCAyLCAKLSAgICAyNDcsIDI1MiwgMjIsIDIxNCwgMTMsIDI2LCA0LCAxLCAyMzUsIDE4NiwgMiwgMjQ3LCAyNTIsIDIyLCAyMjYsIDExMCwgMjYsIAotICAgIDQsIDEsIDIzNSwgMTg2LCAyLCAyMjUsIDE3NSwgMjYsIDQsIDEsIDIzNSwgMTg2LCAyLCAyNDcsIDI1MiwgMjIsIDIyNSwgCi0gICAgMTc1LCAyNiwgNiwgMSwgMjM1LCAxODYsIDIsIDIxMywgMTIwLCAyNiwgNiwgMSwgMjM1LCAxODYsIDIsIDIzMSwgMjMyLCAKLSAgICAyNiwgNiwgMSwgMjM1LCAxODYsIDIsIDIxNCwgMTMsIDI2LCA2LCAxLCAyMzUsIDE4NiwgMiwgMjI2LCAxMTAsIDI2LCAyNDgsIAotICAgIDE1NCwgMjIsIDIxNCwgMTMsIDI2LCAyNDgsIDE1NCwgMjIsIDIyNiwgMTEwLCAyNiwgMjQ4LCAxNTQsIDIyLCAyMjUsIDE3NSwgCi0gICAgMjYsIDQsIDEsIDIxNCwgMTU4LCAyLCAyMTMsIDEyMCwgMjYsIDQsIDEsIDIxNCwgMTU4LCAyLCAyMzEsIDIzMiwgMjYsIDQsIAotICAgIDEsIDIxNCwgMTU4LCAyLCAyNDcsIDI1MiwgMjIsIDIxNCwgMTMsIDI2LCA0LCAxLCAyMTQsIDE1OCwgMiwgMjQ3LCAyNTIsIAotICAgIDIyLCAyMjYsIDExMCwgMjYsIDQsIDEsIDIyMywgMzgsIDIsIDIyNCwgMTU0LCAyNiwgNCwgMSwgMjIzLCAzOCwgMiwgMjQ4LCAKLSAgICAxNTMsIDI2LCA0LCAxLCAyMTQsIDE1OCwgMiwgMjI1LCAxNzUsIDI2LCA0LCAxLCAyMTQsIDE1OCwgMiwgMjQ3LCAyNTIsIAotICAgIDIyLCAyMjUsIDE3NSwgMjYsIDYsIDEsIDIxNCwgMTU4LCAyLCAyMTMsIDEyMCwgMjYsIDYsIDEsIDIxNCwgMTU4LCAyLCAKLSAgICAyMzEsIDIzMiwgMjYsIDYsIDEsIDIxNCwgMTU4LCAyLCAyMTQsIDEzLCAyNiwgNiwgMSwgMjE0LCAxNTgsIDIsIDIyNiwgCi0gICAgMTEwLCAyNiwgNiwgMSwgMjIzLCAzOCwgMiwgMjQ4LCAxNTMsIDI2LCAyNDcsIDI1MiwgMjIsIDIxNCwgMTMsIDI2LCAyNDcsIAotICAgIDI1MiwgMjIsIDIyNiwgMTEwLCAyNiwgMjE0LCAxMywgMjYsIDQsIDEsIDIyNiwgMjAyLCAyLCAyMTQsIDE0LCAyMiwgMjEwLCAKLSAgICAyMTksIDI2LCA0LCAxLCAyMjYsIDIwMiwgMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyMjYsIDIwMiwgMiwgMjI2LCAxMTEsIAotICAgIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDIyNiwgMjAyLCAyLCAyMjUsIDE3NSwgMjYsIDQsIDEsIDIyNiwgMjAyLCAyLCAKLSAgICAyMjUsIDE3NiwgMjIsIDIxMCwgMjE5LCAyNiwgNiwgMSwgMjI2LCAyMDAsIDIsIDIxNCwgMTMsIDI2LCA2LCAxLCAyMjYsIAotICAgIDIwMCwgMiwgMjI2LCAxMTAsIDI2LCA2LCAxLCAyMjYsIDIwMiwgMiwgMjE0LCAxMywgMjYsIDYsIDEsIDIyNiwgMjAyLCAyLCAKLSAgICAyMjYsIDExMCwgMjYsIDYsIDEsIDIyNiwgMjAyLCAyLCAyMjQsIDE2NywgMjYsIDIyNiwgMTEwLCAyNiwgMjQ4LCAxNTMsIAotICAgIDI0NSwgMTUxLCAyMjQsIDI3LCAyNDUsIDE2MCwgMjI0LCAyNywgMjQ1LCAxNTEsIDIxOSwgMTgsIDI0NSwgMTYwLCAyMTksIAotICAgIDE4LCAyMTYsIDE0MSwgMjE5LCAxOCwgMjQ0LCA5LCAyMTksIDE4LCAyMTksIDEyMywgMjE5LCAxOCwgMjQ0LCAxMTIsIDIxOSwgCi0gICAgMTgsIDIyNCwgMTQxLCAyMTksIDE4LCAyMTYsIDE3MCwgMjE5LCAxOCwgMjQyLCAzNSwgMjE5LCAxOCwgMjEwLCA4NywgMjExLCAKLSAgICAyNDUsIDIxOSwgMTgsIDIxMCwgODcsIDIxMSwgMjQ1LCAyMjgsIDY3LCAyMTAsIDg3LCAyMTEsIDI0NSwgMjM1LCA2MywgCi0gICAgMjMzLCAzOCwgNzgsIDIyMiwgMjQzLCA3OCwgMjQwLCAxNjgsIDIyOCwgNjgsIDI0MCwgMTY4LCAyNDQsIDExMiwgMjQ4LCAKLSAgICAxNTYsIDI0NSwgMTUxLCAyNDgsIDE1NiwgMjQ1LCAxNjAsIDI0OCwgMTU2LCAyMDMsIDEzMCwgNTIsIDY3LCAyMzIsIDIxMywgCi0gICAgNTIsIDEyMSwgMjMyLCAyMTMsIDQzLCAyMTksIDE1NSwgMjIzLCAyNTQsIDc4LCA0NCwgMjE5LCAxNTUsIDIyMywgMjU0LCAKLSAgICA3OCwgMjE5LCAxNTUsIDIzMiwgMTA5LCAyMjMsIDI1NCwgNzgsIDIxOSwgMTU1LCAyNDEsIDE2MywgMjIzLCAyNTQsIDc4LCAKLSAgICA0MywgNTIsIDIyMywgMjU0LCA3OCwgNDQsIDUyLCAyMjMsIDI1NCwgNzgsIDUyLCAyMzIsIDEwOSwgMjIzLCAyNTQsIDc4LCAKLSAgICA1MiwgMjQxLCAxNjMsIDIyMywgMjU0LCA3OCwgMjQ4LCAyMDUsIDUyLCAyNDgsIDIwNSwgMjUxLCAxMTMsIDIxNSwgMjIyLCAKLSAgICAyNTEsIDExMywgMTIzLCA1OSwgMjMzLCA1NiwgMTEzLCA1OSwgMjMzLCA1NiwgMjAzLCAyNDUsIDE2MywgMjQwLCAxNjYsIAotICAgIDIyNSwgMTAsIDIzMiwgMjE0LCAyMjAsIDEzNywgMjI2LCAxNSwgMjIwLCAxMzcsIDIzMywgMzgsIDI0NSwgMTU4LCAyMjIsIAotICAgIDI0MywgMjQ1LCAxNTgsIDIyNCwgMjQ2LCAyNDcsIDE5NiwgMjQ0LCAxOSwgMjMzLCAzOCwgMjI2LCAxMTcsIDIyMiwgMjQzLCAKLSAgICAyMjYsIDExNywgMjI5LCAxOTQsIDIyOCwgNzMsIDIxOSwgMTgsIDIyNSwgMTgzLCAyMzAsIDE5MywgNTAsIDIyNSwgMTgzLCAKLSAgICAyMTYsIDI0OCwgMjE2LCAxNDgsIDUwLCAyMjQsIDE5MCwgNTIsIDIyNCwgMTkwLCAyMTUsIDIxMSwgMjI0LCAxOTAsIDIyMywgCi0gICAgNDksIDIyNCwgMTkwLCAyMjMsIDQ5LCA1MiwgMjI0LCAxOTAsIDIyMywgNDksIDIxNSwgMjExLCAyMjQsIDE5MCwgMjUwLCAKLSAgICAyMzgsIDIxOSwgMTU1LCAyMzMsIDQyLCAyNTQsIDExMCwgMjIzLCAyNTQsIDc4LCAyMTksIDE1NSwgMjIyLCAyNDcsIDI1NCwgCi0gICAgMTEwLCAyMjMsIDI1NCwgNzgsIDIyMywgMTA3LCA3OCwgNTIsIDI0NSwgMzEsIDc4LCAyMzUsIDIwMSwgMjI2LCAxMTksIAotICAgIDIxNCwgMTgwLCAxMzUsIDIxNiwgMTExLCAyNTAsIDIzOSwgMjM1LCAyMTYsIDIyNSwgMTAsIDI1MywgMjE0LCAyNDAsIDE2OSwgCi0gICAgMjUxLCAxMTMsIDI0NCwgMiwgMjE5LCA5NSwgNDMsIDQyLCAyNTEsIDE1OCwgMiwgMjI0LCA3LCA0NCwgNDIsIDI1MSwgMTU4LCAKLSAgICAyLCAyMjQsIDcsIDUyLCAyMjQsIDEzLCA3OCwgMjI0LCAxMywgMjQ1LCAzMSwgNzgsIDI0NSwgMzEsIDIyNCwgMTMsIDc4LCAKLSAgICAyMTYsIDcwLCA1LCAyNDUsIDY1LCAyMjMsIDQ5LCAyMjUsIDY4LCA1MCwgODUsIDE0MCwgMjUxLCAxMTMsIDg1LCA5NywgCi0gICAgMjUxLCAxMTMsIDEyMSwgMjUzLCAyMTYsIDIyMywgNDksIDIyMCwgMTUwLCAyNTAsIDEsIDIxNCwgMTYzLCAxMTMsIDI1MywgCi0gICAgMjE1LCAyNTQsIDE1OCwgMjEzLCAxODgsIDI0OSwgMjE3LCAyMzAsIDE4MiwgNTAsIDIxNywgMjM0LCAyNDgsIDE1NiwgMjM1LCAKLSAgICAxOTMsIDIxNCwgMTgwLCAyNDQsIDUyLCAyMjQsIDE0MSwgNzgsIDEzNCwgNTksIDIyNCwgMTQwLCAyMjQsIDI0LCAyMjQsIAotICAgIDE5MCwgMjQ0LCAxMSwgNTksIDIyNCwgMTQwLCAyNDQsIDgxLCA1OSwgMjI0LCAxNDAsIDExMywgNTksIDIyNCwgMTQwLCAKLSAgICAyNDQsIDExLCA1OSwgNzgsIDI0NiwgMTE4LCAyNDksIDEzMCwgMjE1LCAyMjEsIDY3LCAyNDQsIDExLCAyNDcsIDExOCwgCi0gICAgMjMxLCA4MiwgMTEsIDIxOSwgMTgsIDIxMSwgMjA5LCAyMzUsIDYzLCAyNDMsIDIyNywgMjU0LCA1MiwgMjM1LCAxOTEsIAotICAgIDIxNiwgODUsIDIzNSwgMTkxLCAyMjAsIDEzNywgMjM1LCAxOTEsIDIyNSwgMjIsIDIzNSwgMjI4LCAyMTcsIDE4MiwgMjE3LCAKLSAgICAyNTEsIDI1NSwgNSwgMjE3LCAxODIsIDIxNywgMjUxLCAyMzUsIDIyOCwgMTAsIDI0NCwgMjAsIDIyMCwgODAsIDI1NSwgNSwgCi0gICAgMTAsIDI0NCwgMjAsIDIyMCwgODAsIDIyOSwgMTg5LCAyMSwgMjIwLCA4MSwgMjI4LCA2OSwgMjEsIDIyMCwgODEsIDIxOCwgCi0gICAgMjMsIDIxMCwgODYsIDIxOCwgMjMsIDcsIDQsIDEsIDczLCAyMTgsIDIzLCAxNjEsIDIxOCwgMjMsIDE4OSwgMjE4LCAyMywgCi0gICAgMTk0LCAyMTgsIDIzLCAxOTgsIDIxOCwgMjMsIDE5NSwgMjE4LCAyMywgMjAwLCAyMTgsIDIzLCA5NiwgNTAsIDIxOCwgMjMsIAotICAgIDIzMCwgMTgxLCAyMTgsIDIzLCAyNDUsIDk4LCA1MCwgMjE4LCAyMywgNDMsIDIyNiwgMywgMjE4LCAyMywgNDQsIDIyNiwgMywgCi0gICAgMjE4LCAyMywgNywgNCwgMSwgMjMwLCAyNSwgMjE4LCA2NSwgMjEwLCA4NiwgMjE4LCA2NSwgMTEwLCAyMTgsIDY1LCAxMDUsIAotICAgIDIxOCwgNjUsIDE1OCwgMjE4LCA2NSwgMTYxLCAyMTgsIDY1LCAxODksIDIxOCwgNjUsIDE5NCwgMjE4LCA2NSwgMTk4LCAKLSAgICAyMTgsIDY1LCAxOTUsIDIxOCwgNjUsIDIwMCwgMjE4LCA2NSwgOTYsIDUwLCAyMTgsIDY1LCAyMzAsIDE4MSwgMjE4LCA2NSwgCi0gICAgMjQ1LCA5OCwgNTAsIDIxOCwgNjUsIDQzLCAyMjYsIDMsIDIxOCwgNjUsIDQ0LCAyMjYsIDMsIDcsIDIxOCwgNjUsIDQsIDEsIAotICAgIDYxLCA3LCAyMTgsIDY1LCA0LCAxLCA3NSwgNywgMjE4LCA2NSwgNCwgMSwgNzYsIDcsIDIxOCwgNjUsIDQsIDEsIDIxMSwgCi0gICAgMTc4LCA3LCAyMTgsIDY1LCA0LCAxLCAyMjEsIDE5NSwgNywgMjE4LCA2NSwgNCwgMSwgMjQyLCA2MCwgNywgMjE4LCA2NSwgCi0gICAgNCwgMSwgMjM1LCAyMywgNywgMjE4LCA2NSwgNCwgMSwgMTU2LCA3LCAyMTgsIDY1LCA0LCAxLCAxOTMsIDcsIDIxOCwgNjUsIAotICAgIDQsIDEsIDIzMCwgMjUsIDcsIDIxOCwgNjUsIDQsIDEsIDIyNiwgMTA1LCA3LCAyMTgsIDY1LCA0LCAxLCAyMjIsIDkxLCA3LCAKLSAgICAyMTgsIDY1LCA0LCAxLCAyMTcsIDE1MiwgMjQ1LCA0NiwgNTAsIDI0OSwgMjI3LCA1MCwgMjQ5LCAxMTcsIDUwLCAyNDMsIAotICAgIDI1MSwgMjQzLCAyNTQsIDUwLCAyMzIsIDE5OCwgNTAsIDIzMCwgMTk0LCA1MCwgMjI5LCAyMTAsIDUwLCAyMjUsIDE2MiwgCi0gICAgNTAsIDIyMiwgMTE4LCA1MCwgMjExLCAyMTcsIDUwLCAxNjYsIDIyMCwgNDksIDUwLCAyNDcsIDEyNywgNTAsIDI0NSwgNDcsIAotICAgIDUwLCAyMzQsIDc2LCA1MCwgMjE1LCAxMTIsIDUwLCAyNDYsIDEwMSwgNTAsIDI0MywgNDAsIDIyNSwgMTkzLCA1MCwgMjI1LCAKLSAgICAxNjAsIDUwLCAyNDIsIDEwOSwgNTAsIDI1MywgMTgyLCA1MCwgMjQwLCAyMjgsIDUwLCAyNTAsIDE4NSwgNTAsIDIzMiwgCi0gICAgMTkxLCAyMTYsIDMsIDUwLCAyMTksIDAsIDUwLCAyMTYsIDI0NSwgNTAsIDIzNSwgMjQxLCAyMjIsIDExOCwgNTAsIDM4LCAKLSAgICA0MywgMjQxLCAyNTUsIDQ4LCAzOCwgNDQsIDI0MSwgMjU1LCA0OCwgMzgsIDE5OSwgNjcsIDIzMiwgMjE0LCAyMjYsIDEyMCwgCi0gICAgMzgsIDIxOSwgMjUxLCA2NywgMjMyLCAyMTQsIDIyNiwgMTIwLCAzOCwgMjU0LCA4OCwgODAsIDQ4LCAzOCwgMjUwLCAyLCAKLSAgICA4MCwgNDgsIDM4LCA0MywgODAsIDQ4LCAzOCwgNDQsIDgwLCA0OCwgMzgsIDIyMiwgMjM0LCAyMjYsIDEyMCwgMzgsIDI1MCwgCi0gICAgMiwgMjIyLCAyMzQsIDIyNiwgMTIwLCAzOCwgMjU0LCA4OCwgMjIyLCAyMzQsIDIyNiwgMTIwLCAzOCwgMTM0LCAxNzAsIDQ4LCAKLSAgICAzOCwgMjQ0LCAxMSwgMTcwLCA0OCwgMzgsIDI0NSwgMTQ2LCAyNTAsIDM1LCAzOCwgMjQ1LCAxNDYsIDIxOCwgMjM0LCAzOCwgCi0gICAgMjQ1LCAxNDYsIDI0NywgMjQ4LCAzOCwgMjQ1LCAxNDYsIDI1MCwgMzYsIDI1MiwgMTgwLCAzOCwgNDMsIDQ0LCA4MCwgNDgsIAotICAgIDM4LCAyNDUsIDE0NiwgMjIxLCAxODgsIDM4LCAyNDUsIDE0NiwgMjM0LCAxMzUsIDM4LCAyNDUsIDE0NiwgMjE0LCAxNTUsIAotICAgIDIyNSwgNywgMjE1LCAyMjUsIDM4LCAyMjMsIDUwLCAyMTksIDQ3LCAyMjYsIDEyMCwgMzgsIDUyLCA2NywgMjE4LCAxMDMsIAotICAgIDIyNiwgMTIwLCAzOCwgMjU0LCA5OCwgODcsIDM4LCAyMTUsIDIxMSwgMjE0LCAxODIsIDM4LCAyMTEsIDI0NywgMjUxLCAKLSAgICAxNDAsIDQ4LCAzOCwgMTQwLCA4MCwgMjI2LCAxMjAsIDM4LCAxOTksIDUyLCAyMTksIDQ3LCAyMjYsIDEyMCwgMzgsIDk3LCAKLSAgICAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIDI0NiwgMTAzLCAzOCwgMTQwLCAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIDI0NiwgCi0gICAgMTAzLCAzOCwgNDMsIDgwLCA1MSwgMzgsIDQ0LCA4MCwgNTEsIDM4LCAyNTMsIDIxNywgNDgsIDI1NSwgMTEsIDIyNiwgMjMxLCAKLSAgICAyNTQsIDI1MSwgMjE2LCA0MiwgMjE2LCAxOTYsIDIxOCwgNzQsIDEzOSwgNiwgMjUxLCA2NiwgMjQ4LCA3MSwgMjUwLCAxNzgsIAotICAgIDI1MCwgMTc1LCAyMzIsIDIxNCwgODcsIDI1MCwgMjQwLCAyMjYsIDIzMSwgMjUxLCAyNiwgMjE0LCAxODksIDI0NSwgNDgsIAotICAgIDI0OSwgMTkxLCAyMjEsIDE4NSwgMjQ4LCA3MSwgMjQ0LCAxNzksIDExOSwgNCwgMjQzLCAyMDIsIDExOSwgNiwgMjQyLCA2MCwgCi0gICAgMjUxLCAyMTksIDYsIDI0MiwgNjAsIDEzOSwgNiwgMjQyLCA2MCwgMjI1LCAzNywgMjQ5LCAxOTEsIDIyNSwgMzcsIDI0OSwgCi0gICAgMTkyLCAxMTcsIDExMywgMjI1LCAxMDgsIDExOSwgNiwgNzMsIDI1MSwgMjE5LCA2LCA3MywgMTE5LCA2LCAxNTYsIDExOSwgCi0gICAgNCwgMTU2LCAyMzMsIDE0OSwgNTcsIDI1MiwgMTQxLCA4NywgMTM5LCA2LCAyMzAsIDI1LCAyMjcsIDE5NiwgNTAsIDIxOSwgCi0gICAgMzEsIDIyMywgMTE5LCAyNDksIDE2MiwgMTE5LCA2LCAyMjYsIDEwNSwgMTM5LCA2LCAyMjYsIDEwNSwgMTM5LCA2LCAyMjQsIAotICAgIDk2LCAxMTksIDYsIDE1MywgMjUxLCAyMTksIDYsIDE1MywgMTM5LCA2LCAxNTMsIDIyNCwgMTk2LCAyMTcsIDcxLCAyMjMsIAotICAgIDYyLCAyMjAsIDEzMiwgNzgsIDIxNywgMSwgNTAsIDIxNSwgMjUzLCAxNjQsIDUwLCAyMTMsIDI0MCwgMTM5LCA2LCAyMTAsIAotICAgIDE1OSwgMjI2LCAxMzMsIDUwLCAyMjYsIDIyMSwgNTAsIDIzNSwgMTkzLCAyMjYsIDIyMSwgNTAsIDI1MSwgMjE5LCA2LCAKLSAgICAyMTAsIDE1OSwgMjE1LCA5NCwgMjYsIDQsIDEsIDIzNSwgMTg1LCAyMzQsIDE3MywgNTAsIDI1NCwgMTA3LCA1MCwgMTE5LCAKLSAgICA2LCAyNTMsIDE1OCwgMjUxLCAyMTksIDYsIDI1MSwgNjYsIDI0NSwgNjgsIDg3LCAxMTksIDQsIDc1LCAxMTksIDYsIDc1LCAKLSAgICAxMTksIDYsIDI0NSwgNiwgMjE1LCA5NCwgNiwgMjQ1LCA2LCAxMTksIDYsIDE5MywgMTE5LCA0LCA3NiwgMTEyLCA4NywgCi0gICAgMjUyLCAyOSwgODcsIDI0MiwgMjAyLCA4NywgMjQ4LCAxOTAsIDg3LCAyMzUsIDIzMiwgMjE5LCAyOSwgMjIyLCAxODcsIDYsIAotICAgIDIyNCwgOTYsIDI0NCwgMTgyLCA1MCwgMTM5LCA0LCAyMjUsIDEwOCwgMTM5LCA0LCAyNDMsIDEwNywgMTM5LCA2LCAyNDMsIAotICAgIDEwNywgMTM5LCA2LCAyMjUsIDEwOCwgMTM5LCAyMzAsIDI0LCAyMTgsIDQwLCAyMTUsIDk0LCAzNSwgNiwgMjQzLCAyMDIsIAotICAgIDIxNSwgOTQsIDM1LCA2LCAxNTYsIDIyMywgNDksIDM1LCA2LCAxNTYsIDIxNSwgOTQsIDM1LCA2LCAyMTEsIDExNywgMTM5LCAKLSAgICAzMiwgNiwgMjQ5LCA2MCwgMTM5LCAzMiwgNCwgMjQ5LCA2MCwgMTM5LCAzMiwgNCwgNzUsIDEzOSwgMzIsIDQsIDczLCAxMzksIAotICAgIDMyLCA0LCAyMzUsIDE0NCwgMjI0LCAxNzAsIDIzMiwgMjEzLCAyMTUsIDk0LCAyNTQsIDEyNiwgMjI1LCAxODMsIDUwLCAKLSAgICAyNTQsIDE4MCwgMjE1LCA5NCwgNCwgMjQ1LCA2LCAxNiwgMzEsIDIyMSwgMjUyLCAyMTksIDI5LCAyMTIsIDExNCwgMjQ0LCAKLSAgICAyLCAxMjMsIDIyMCwgMTE4LCAyMTIsIDExNCwgMjQ0LCAyLCAxMjMsIDIyOCwgMTk0LCAyMTIsIDExNCwgMjQ0LCAyLCAxMjMsIAotICAgIDIxNiwgMjQxLCAyMTIsIDExNCwgMjQ0LCAyLCAxMjMsIDIxNiwgMTY4LCAyMTIsIDExNCwgMjQ0LCAyLCAxMTMsIDIxNiwgCi0gICAgMTY2LCAyMTIsIDExNCwgMjQ0LCAyLCAxMjMsIDI0NCwgMTE3LCAyMTIsIDExNCwgMjQ0LCAyLCAxMTMsIDI0NCwgMTE2LCAKLSAgICAyMTIsIDExNCwgMjQ0LCAyLCAxMzQsIDI0NCwgMTE2LCAyMTIsIDExNCwgMjQ0LCAyLCAyNDQsIDExLCAyNDQsIDExNiwgCi0gICAgMjEyLCAxMTQsIDI0NCwgMiwgMTIzLCAyMTksIDExNSwgMjEyLCAxMTQsIDI0NCwgMiwgMjQ0LCA4MSwgMjE5LCAxMTMsIAotICAgIDIxMiwgMTE0LCAyNDQsIDIsIDEyMywgMjQ1LCAxODgsIDIxMiwgMTE0LCAyNDQsIDIsIDEzNCwgMjQ1LCAxODYsIDIxMiwgCi0gICAgMTE0LCAyNDQsIDIsIDI0NCwgODEsIDI0NSwgMTg2LCAyMTIsIDExNCwgMjQ0LCAyLCAyMjAsIDEyMiwgMjQ1LCAxODYsIAotICAgIDI0NCwgMiwgMjI3LCAxOTcsIDExMCwgMjIyLCAxOTgsIDIyNywgMTk4LCAxMTAsIDIyMiwgMTk4LCAyMjcsIDE5OCwgMTA1LCAKLSAgICAyMjIsIDE5OCwgMjI3LCAxOTgsIDE1OCwgMjIyLCAxOTgsIDIyNywgMTk4LCAxNjEsIDIyMiwgMTk4LCAyMjcsIDE5OCwgCi0gICAgMTg5LCAyMjIsIDE5OCwgMjI3LCAxOTgsIDE5NCwgMjIyLCAxOTgsIDIyNywgMTk4LCAxOTgsIDIyMiwgMTk4LCAyMjcsIAotICAgIDE5OCwgMTk1LCAyMjIsIDE5OCwgMjI3LCAxOTgsIDIwMCwgMjIyLCAxOTgsIDIyNywgMTk4LCAyMTYsIDI0NywgMjIyLCAKLSAgICAxOTgsIDIyNywgMTk4LCAyNDUsIDE2NywgMjIyLCAxOTgsIDIyNywgMTk4LCAyMTUsIDc2LCAyMjIsIDE5OCwgMjI3LCAxOTgsIAotICAgIDI0NCwgMTE0LCAyMjIsIDE5OCwgMjI3LCAxOTgsIDEyMywgMjQwLCAyMTAsIDIyMiwgMTk4LCAyMjcsIDE5OCwgMjQ0LCA4MSwgCi0gICAgMjQwLCAyMTAsIDIyMiwgMTk4LCAyMjcsIDE5OCwgMTIzLCAyMTYsIDE0NywgNCwgMjIyLCAxOTgsIDIyNywgMTk4LCAxMTAsIAotICAgIDQsIDIyMiwgMTk4LCAyMjcsIDE5OCwgMTA1LCA0LCAyMjIsIDE5OCwgMjI3LCAxOTgsIDE1OCwgNCwgMjIyLCAxOTgsIDIyNywgCi0gICAgMTk4LCAxNjEsIDQsIDIyMiwgMTk4LCAyMjcsIDE5OCwgMTg5LCA0LCAyMjIsIDE5OCwgMjI3LCAxOTgsIDE5NCwgNCwgMjIyLCAKLSAgICAxOTgsIDIyNywgMTk4LCAxOTgsIDQsIDIyMiwgMTk4LCAyMjcsIDE5OCwgMTk1LCA0LCAyMjIsIDE5OCwgMjI3LCAxOTgsIAotICAgIDIwMCwgNCwgMjIyLCAxOTgsIDIyNywgMTk4LCAyMTYsIDI0NywgNCwgMjIyLCAxOTgsIDIyNywgMTk4LCAyNDUsIDE2NywgNCwgCi0gICAgMjIyLCAxOTgsIDIyNywgMTk4LCAyMTUsIDc2LCA0LCAyMjIsIDE5OCwgMjI3LCAxOTgsIDI0NCwgMTE0LCA0LCAyMjIsIAotICAgIDE5OCwgMjI3LCAxOTgsIDEyMywgMjQwLCAyMTAsIDQsIDIyMiwgMTk4LCAyMjcsIDE5OCwgMjQ0LCA4MSwgMjQwLCAyMTAsIAotICAgIDQsIDIyMiwgMTk4LCAyMjcsIDE5OCwgMTIzLCAyMTYsIDE0NywgMjIyLCAxOTgsIDIyNywgMTk4LCAxMjMsIDIxNiwgMTQ4LCAKLSAgICAyNTEsIDY3LCAyNDksIDYwLCAyMjIsIDE5OCwgMjI3LCAxOTgsIDI0NCwgODEsIDIxNiwgMTQ3LCAyMjIsIDE5OCwgMjI3LCAKLSAgICAxOTgsIDIxNiwgMjQ4LCAyMTYsIDE0NywgMjIyLCAxOTgsIDIyNywgMTk4LCAyMjMsIDQ5LCAxMjMsIDI0MCwgMjEwLCA3LCAKLSAgICA0LCAxLCAyMjMsIDQ5LCAyNTEsIDY2LCAyMjIsIDE5OCwgMjI3LCAxOTgsIDIxOSwgMTI1LCAyMzMsIDc4LCAxNywgMjIyLCAKLSAgICAxOTgsIDIyNywgMTk4LCAyNDQsIDExNSwgMjQ1LCAyMjYsIDE3LCAyMjIsIDE5OCwgMjI3LCAxOTgsIDI0NCwgMTE1LCAyMTYsIAotICAgIDE0NywgMjIyLCAxOTgsIDIyNywgMTk4LCAxMjMsIDI0MCwgMjExLCAyMTYsIDE0NywgMjEyLCAxMTQsIDI0NCwgMiwgMjEwLCAKLSAgICA4NywgMjE2LCAxNjYsIDE0MCwgNzQsIDIxNCwgMTUzLCA3NCwgOTcsIDc0LCAyNDYsIDEwNCwgNzQsIDQzLCA0NCwgNzQsIAotICAgIDEyMCwgMTI0LCA3NCwgMjI4LCA1NiwgMjEyLCA5LCA3NCwgMjI4LCA1NiwgMjQ1LCAyMjAsIDc0LCAyMTksIDI4LCAyNDUsIAotICAgIDIyMCwgNzQsIDIxOSwgMjgsIDIxMiwgOSwgNzQsIDE0MCwgODAsIDIsIDkxLCA5NywgODAsIDIsIDkxLCAxNDAsIDIxMiwgCi0gICAgMzYsIDc0LCA5NywgMjEyLCAzNiwgNzQsIDE0MCwgMTEzLCAyNDEsIDIzNCwgNzQsIDIxNCwgMTUzLCAxMTMsIDI0MSwgMjM0LCAKLSAgICA3NCwgOTcsIDExMywgMjQxLCAyMzQsIDc0LCAyNDYsIDEwNCwgMTEzLCAyNDEsIDIzNCwgNzQsIDE0MCwgODAsIDIsIDIxNywgCi0gICAgNzcsIDk3LCA4MCwgMiwgMjE3LCA3NywgMTQwLCA4MCwgMjQzLCAyNDMsIDEzMCwgMjE0LCAxNTMsIDgwLCAyNDMsIDI0MywgCi0gICAgMTMwLCA5NywgODAsIDI0MywgMjQzLCAxMzAsIDI0NiwgMTA0LCA4MCwgMjQzLCAyNDMsIDEzMCwgMTIwLCAxMjQsIDgwLCAyLCAKLSAgICAyNTIsIDEyNywgMTQwLCA4MCwgMiwgMTAzLCA5NywgODAsIDIsIDEwMywgMTQwLCA4MCwgMiwgMjMyLCAxMjMsIDk3LCA4MCwgCi0gICAgMiwgMjMyLCAxMjMsIDQzLCA0NCwgMjEyLCAzNiwgNzQsIDQzLCA0NCwgODAsIDIsIDkxLCAyNDYsIDEwNCwgMjEwLCAzNSwgCi0gICAgNzQsIDIxNCwgMTUzLCA4MCwgMiwgMjE2LCA3NywgMjMzLCAzNywgMjE0LCAxNTMsIDgwLCAyLCAyMTYsIDc3LCAyMjIsIAotICAgIDI0MSwgMjQ2LCAxMDQsIDgwLCAyLCAyMTYsIDc3LCAyMzMsIDM3LCAyNDYsIDEwNCwgODAsIDIsIDIxNiwgNzcsIDIyMiwgCi0gICAgMjQxLCA5NywgODAsIDIsIDI0OSwgMTYxLCAyNDYsIDEwMywgMjQ2LCAxMDQsIDgwLCAyLCAyNDksIDE2MSwgMjMzLCAzNywgCi0gICAgMjU0LCA4OCwgMjE2LCAxNCwgMjIwLCAxNTMsIDc0LCAyNTAsIDIsIDIxNiwgMTQsIDIyMCwgMTUzLCA3NCwgMjI4LCA1NiwgCi0gICAgMjEyLCA5LCA4MCwgMjE2LCA0MiwgMTk5LCAxMzAsIDE0MCwgODAsIDIxNiwgNDIsIDI1MiwgMTQxLCAxMTcsIDk3LCA4MCwgCi0gICAgMjE2LCA0MiwgMTMwLCAyNTQsIDg4LCAyMDQsIDI1MCwgMzYsIDc0LCAyNTAsIDIsIDIwNCwgMjUwLCAzNiwgNzQsIDE0MCwgCi0gICAgMjQxLCAyNTUsIDIsIDI1MiwgMTM5LCAyMTQsIDE1MiwgMTQwLCAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIDI0NiwgMTAzLCAKLSAgICAyMTQsIDE1MywgMjQxLCAyNTUsIDIsIDI1MiwgMTM5LCAyMjIsIDI0MSwgMjE0LCAxNTMsIDI0MSwgMjU1LCAyLCAyNTIsIAotICAgIDEzOSwgMjMzLCAzNywgOTcsIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgMjE0LCAxNTIsIDk3LCAyNDEsIDI1NSwgMiwgMjUyLCAKLSAgICAxMzksIDI0NiwgMTAzLCAyNDYsIDEwNCwgMjQxLCAyNTUsIDIsIDI1MiwgMTM5LCAyMjIsIDI0MSwgMjQ2LCAxMDQsIDI0MSwgCi0gICAgMjU1LCAyLCAyNTIsIDEzOSwgMjMzLCAzNywgOTcsIDgwLCAxMTcsIDE0MCwgNzQsIDIxNCwgMTUzLCA4MCwgMTQwLCA2NCwgCi0gICAgMjQ2LCAxMDQsIDc0LCAxNDAsIDgwLCAxMTcsIDk3LCA3NCwgMTQwLCAyMjYsIDcwLCAyNTMsIDI0NywgMjE0LCAxNTMsIAotICAgIDIyNiwgNzAsIDI1MywgMjQ3LCA5NywgMjI2LCA3MCwgMjUzLCAyNDcsIDI0NiwgMTA0LCAyMjYsIDcwLCAyNTMsIDI0NywgCi0gICAgMTQwLCAyNDEsIDI1NSwgMTE3LCA5NywgMjQxLCAyNTQsIDk3LCAyNDEsIDI1NSwgMTE3LCAxNDAsIDI0MSwgMjU0LCAxNDAsIAotICAgIDUyLCA4MCwgMiwgOTEsIDQzLCA0NCwgNTIsIDgwLCAyLCA5MSwgOTcsIDUyLCA4MCwgMiwgOTEsIDE0MCwgNTIsIDc0LCAKLSAgICAyMTQsIDE1MywgNTIsIDc0LCA5NywgNTIsIDc0LCAyNDYsIDEwNCwgNTIsIDc0LCA0MywgNDQsIDUyLCA3NCwgMTIwLCAxMjQsIAotICAgIDUyLCA3NCwgMjI4LCA1NiwgMjEyLCA5LCA1MiwgNzQsIDIyOCwgNTYsIDI0NSwgMjIwLCA1MiwgNzQsIDIxOSwgMjgsIDI0NSwgCi0gICAgMjIwLCA1MiwgNzQsIDIxOSwgMjgsIDIxMiwgOSwgNTIsIDc0LCAxNDAsIDIxNSwgMjExLCA3NCwgOTcsIDIxNSwgMjExLCAKLSAgICA3NCwgMTQwLCAyMTgsIDIzMCwgNzQsIDk3LCAyMTgsIDIzMCwgNzQsIDIxNCwgMTUzLCA4MCwgMiwgNTIsIDkxLCAyNDYsIAotICAgIDEwNCwgODAsIDIsIDUyLCA5MSwgMTQwLCAyNDgsIDE1NSwgNzQsIDIxNCwgMTUzLCAyNDgsIDE1NSwgNzQsIDk3LCAyNDgsIAotICAgIDE1NSwgNzQsIDI0NiwgMTA0LCAyNDgsIDE1NSwgNzQsIDE0MCwgODAsIDIxNiwgNDIsIDEzMCwgOTcsIDgwLCAyMTYsIDQyLCAKLSAgICAxMzAsIDE0MCwgNzEsIDc0LCAyMTQsIDE1MywgNzEsIDc0LCA5NywgNzEsIDc0LCAyNDYsIDEwNCwgNzEsIDc0LCAyMTQsIAotICAgIDE1MywgNzEsIDgwLCAyNDMsIDI0MywgMTMwLCAyMTQsIDE1MywgNzEsIDgwLCAyMjYsIDE5NywgMjI1LCAyMTQsIDIxNCwgCi0gICAgMTUzLCA3MSwgODAsIDIyNiwgMTk3LCAyMjUsIDIxNSwgMiwgMjAzLCAxMzAsIDIxNCwgMTUzLCA3MSwgODAsIDIyNiwgMTk3LCAKLSAgICAyMjUsIDIxNSwgMiwgNjcsIDEzMCwgMjE0LCAxNTMsIDcxLCA1MiwgNzQsIDIxNCwgMTUzLCA3MSwgNTIsIDgwLCAyMjYsIAotICAgIDE5NywgMjI1LCAyMTQsIDk3LCA3MSwgODAsIDI0MywgMjQzLCAyMTIsIDU2LCAyMjgsIDU2LCAyMTIsIDksIDgwLCAyMTYsIAotICAgIDQyLCAyNDksIDE2MCwgMjE5LCAyOCwgMjQ1LCAyMjAsIDgwLCAyMTYsIDQyLCAyNDksIDE2MCwgMTIwLCAxMjQsIDcxLCA3NCwgCi0gICAgNDQsIDgwLCAyLCA0LCAyNTAsIDM1LCAyNDYsIDEwNCwgODAsIDE0MCwgNjQsIDIxNCwgMTUzLCA3NCwgMTM0LCA5NywgMjUzLCAKLSAgICAyNDcsIDE0MCwgODAsIDIsIDY3LCA5MSwgOTcsIDgwLCAyLCA2NywgOTEsIDQzLCA0NCwgODAsIDIsIDY3LCA5MSwgMTQwLCAKLSAgICA4MCwgMiwgNTIsIDY3LCA5MSwgOTcsIDgwLCAyLCA1MiwgNjcsIDkxLCA0MywgNDQsIDgwLCAyLCA1MiwgNjcsIDkxLCAxNDAsIAotICAgIDIyNiwgMTczLCA3NCwgOTcsIDIyNiwgMTczLCA3NCwgNDMsIDQ0LCAyMjYsIDE3MywgNzQsIDMxLCAyNTQsIDE1NCwgMjQ5LCAKLSAgICAyMTQsIDIyNSwgMjUzLCAyNDcsIDIzMywgMjE2LCAxODcsIDI0NSwgMjcsIDIxNiwgMTg3LCAyNDcsIDEzOCwgMjI4LCA1MiwgCi0gICAgMjQ1LCAyOCwgMjQ1LCAxNTIsIDIyMCwgMTI3LCAyMzUsIDI0NSwgMjI5LCAyMjEsIDI0NSwgMTcwLCAyMjYsIDIzMSwgMjI4LCAKLSAgICA1MiwgMjU0LCAxMjQsIDI0NSwgMTcwLCAyMjYsIDIzMSwgNCwgMjQ1LCAxNzAsIDIyNiwgMjMxLCAyNDksIDE4NiwgMjUzLCAKLSAgICAyMzgsIDIzMSwgNjIsIDI0NywgMTM4LCAyMjgsIDUyLCAyNDksIDE4OCwgMjUzLCAyMzgsIDIzMSwgNjIsIDQsIDI0OSwgCi0gICAgMTg2LCAyNTMsIDIzOCwgMjMxLCA2MiwgMjQ1LCAxNDMsIDY0LCAyMjQsIDE3MiwgMjMwLCAyNCwgMjI0LCAxODAsIDIzMCwgCi0gICAgMjQsIDI0OSwgMTY1LCAyMzAsIDI0LCAyMTgsIDQwLCAyMzAsIDE4MiwgNTAsIDIzMCwgMTgwLCA1MCwgNTksIDIyNSwgMjIsIAotICAgIDI0NywgMTY5LCAyMTksIDk1LCAyMjAsIDEyOCwgMjMwLCAxODEsIDI1MywgMjE3LCAyMjYsIDE2NywgMjIyLCAyMzQsIDIyNiwgCi0gICAgMTY3LCAyNTEsIDExNCwgMjI2LCAxNjcsIDQyLCAyMjIsIDE5MywgMjQ5LCAxMDksIDIyMiwgMTkzLCAyNDQsIDQsIDIyMiwgCi0gICAgMTkzLCAyMjQsIDE2OCwgMTExLCAyMzUsIDIzNCwgNDQsIDI1NCwgMTA5LCAyNTQsIDEwOSwgMjMxLCA4OCwgMjU0LCAxMDksIAotICAgIDIxOCwgMjU1LCAyNTQsIDEwOSwgMjQ3LCAxNzEsIDI0NywgMTM4LCAyMjgsIDUyLCAyNDcsIDE3NCwgMjI2LCA4LCAxMTEsIAotICAgIDIyOCwgNTIsIDIyNiwgOCwgMTExLCAyMzIsIDE0NiwgMjU0LCAxMTgsIDIzMiwgMTQ2LCAyMjYsIDE1OCwgMjM1LCAxOTgsIAotICAgIDIxNCwgMTc1LCAyMzUsIDIxMSwgNTIsIDIzNSwgMjExLCAyMTUsIDIxMSwgMjM1LCAyMTEsIDI0OSwgMTgyLCAyMzUsIDIxMSwgCi0gICAgMjE4LCAxMywgMjM1LCAyMTEsIDIxMywgMTI5LCAyMzUsIDIxMSwgMjUwLCAyLCAyMzUsIDIxMSwgMjUwLCAyLCAyNDksIAotICAgIDE4MiwgMjM1LCAyMTEsIDI1NCwgODgsIDI0OSwgMTgyLCAyMzUsIDIxMSwgMjE2LCAxODYsIDI1MiwgNjcsIDIyMywgMTM3LCAKLSAgICAyMjQsIDE2OSwgNTksIDIzMCwgMTgxLCAyNDUsIDMzLCAyNDMsIDQ2LCAyMjQsIDE2OSwgMjQxLCA1NywgMjE2LCA4OSwgCi0gICAgMjI2LCAxNjcsIDIyMywgNDksIDE4MiwgMjM1LCAxOTMsIDIzMywgNjUsIDIyMiwgOTEsIDIxOSwgMTU3LCAyMTIsIDM1LCAKLSAgICAyMTEsIDIwMCwgMjI0LCAxODAsIDIyOCwgNTIsIDE4MiwgMjMwLCAxODIsIDE4MiwgMjUzLCAyMTAsIDEyOCwgMTExLCAyMjgsIAotICAgIDUyLCAyNTMsIDIxMCwgMTI4LCAxMTEsIDI1NCwgNDgsIDEyOCwgMTExLCAyNTQsIDQ4LCAyNTEsIDg4LCAyMjgsIDUyLCAKLSAgICAyNTUsIDQsIDEyOCwgMTExLCAyMjksIDEwMCwgMjU0LCA0OCwgMjI4LCA1OSwgMjU1LCA0LCAxMjgsIDExMSwgMjU0LCAxNDgsIAotICAgIDEyOCwgMTExLCAyMjgsIDUyLCAyNTQsIDE0OCwgMTI4LCAxMTEsIDI1NCwgMTQ4LCAxMjgsIDE3NywgMTI4LCAxMTEsIDIxNSwgCi0gICAgMjExLCAxODIsIDI1NCwgMTU1LCAxMjgsIDExMSwgMjQ1LCA5NCwgMTExLCAyNDMsIDQ1LCAyNDUsIDk0LCAxMTEsIDI0NywgCi0gICAgMjM0LCAyNTIsIDIzLCAyNTQsIDUwLCAyMTYsIDE5NiwgMjMyLCAyMjEsIDI0MywgNDUsIDEyOCwgMTExLCAyNTQsIDQ4LCAKLSAgICAxMjgsIDIxNiwgNDIsIDE3NywgMjE2LCAxOTYsIDIzNiwgMTUsIDIyNiwgMjMxLCAyMzYsIDE1LCA2NCwgMTc3LCAyNTQsIAotICAgIDQ4LCAxMjgsIDExMSwgMjQ5LCAyMjcsIDI0NSwgOTcsIDI0NSwgOTgsIDI0OSwgMjI2LCAyMjIsIDIzNCwgMjM2LCAwLCAKLSAgICAxMjgsIDExMSwgMjIyLCAyMzQsIDEyOCwgMTExLCAyNDksIDE1NCwgMTExLCAyNDUsIDY3LCAyNDUsIDk2LCAxMTEsIDIxOCwgCi0gICAgMTU3LCAyNDUsIDk3LCAyNDgsIDU1LCAxMjgsIDExMSwgMTI4LCAyMTYsIDQyLCAyNTEsIDc4LCAyNDgsIDcyLCAyMzEsIDg4LCAKLSAgICAyNTEsIDc3LCAyMjQsIDExLCAxMjgsIDExMSwgMjI4LCA1MiwgMTI4LCAxMTEsIDI0MCwgMTA0LCAxMTEsIDIyOCwgNTIsIAotICAgIDI0MCwgMTA0LCAxMTEsIDIxOCwgMTA5LCAyNDUsIDk0LCAxMTEsIDIzMywgMTUsIDE3NywgMTI4LCAxMTEsIDI0MiwgMTMwLCAKLSAgICAxNzcsIDEyOCwgMTExLCAyMzMsIDE1LCAxMTcsIDEyOCwgMTExLCAyNDIsIDEzMCwgMTE3LCAxMjgsIDExMSwgMjMzLCAxNSwgCi0gICAgMjUxLCA4OCwgMjI4LCA1MiwgMTI4LCAxMTEsIDI0MiwgMTMwLCAyNTEsIDg4LCAyMjgsIDUyLCAxMjgsIDExMSwgMjMwLCAKLSAgICA5NywgMjMzLCAxNCwgMjMwLCA5NywgMjQyLCAxMjksIDI1MiwgMjMsIDIyOCwgNTIsIDI0NSwgOTQsIDExMSwgMjI4LCA1MiwgCi0gICAgMjMzLCAxNCwgMjI4LCA1MiwgMjQyLCAxMjksIDIyOSwgMTAwLCAyMzMsIDE1LCAyMjgsIDU5LCAxMjgsIDExMSwgMjI5LCAKLSAgICAxMDAsIDI0MiwgMTMwLCAyMjgsIDU5LCAxMjgsIDExMSwgMjMzLCAxNSwgMTc3LCAyNDUsIDk0LCAxMTEsIDI0MiwgMTMwLCAKLSAgICAxNzcsIDI0NSwgOTQsIDExMSwgMjI5LCAxMDAsIDIzMywgMTUsIDIyOCwgNTksIDI0NSwgOTQsIDExMSwgMjI5LCAxMDAsIAotICAgIDI0MiwgMTMwLCAyMjgsIDU5LCAyNDUsIDk0LCAxMTEsIDIzMywgMTUsIDE3NywgMjQyLCAxMjksIDI0MiwgMTMwLCAxNzcsIAotICAgIDIzMywgMTQsIDIyOSwgMTAwLCAyMzMsIDE1LCAyMjgsIDU5LCAyNDIsIDEyOSwgMjI5LCAxMDAsIDI0MiwgMTMwLCAyMjgsIAotICAgIDU5LCAyMzMsIDE0LCAyMjQsIDIwMiwgMjE4LCA1NSwgMjI0LCAyMDMsIDE3NywgMTI4LCAxMTEsIDIxOCwgNTYsIDE3NywgCi0gICAgMTI4LCAxMTEsIDIyNCwgMjAzLCAxNzcsIDI0NSwgOTQsIDExMSwgMjE4LCA1NiwgMTc3LCAyNDUsIDk0LCAxMTEsIDI0NywgCi0gICAgMTM4LCAyMjgsIDUyLCAyMjQsIDIwNSwgMjQ3LCAxMzgsIDIyOCwgNTIsIDIxOCwgNTcsIDIxOCwgNjQsIDIyNiwgMjMxLCAKLSAgICAyMTgsIDIyLCAyMjYsIDIzMSwgMjI4LCA1MiwgMTE1LCAyMTgsIDY0LCAyMjYsIDIzMSwgMjI4LCA1MiwgMTE1LCAyMTgsIAotICAgIDIyLCAyMjYsIDIzMSwgMjE4LCA2NCwgNjQsIDE3NywgMTI4LCAxMTEsIDIxOCwgMjIsIDY0LCAxNzcsIDEyOCwgMTExLCAKLSAgICAyMjksIDEwMCwgMTE1LCAyMTgsIDY0LCA2NCwgMjI4LCA1OSwgMTI4LCAxMTEsIDIyOSwgMTAwLCAxMTUsIDIxOCwgMjIsIAotICAgIDY0LCAyMjgsIDU5LCAxMjgsIDExMSwgMjE4LCA2NCwgNjQsIDIsIDIyOCwgNTIsIDEyOCwgMTExLCAyMTgsIDIyLCA2NCwgMiwgCi0gICAgMjI4LCA1MiwgMTI4LCAxMTEsIDIzMCwgODEsIDIzMCwgODIsIDIzMCwgODMsIDIzMCwgODIsIDIxNCwgMTc1LCA0MiwgMjM2LCAKLSAgICAxNSwgMjI2LCAyMzEsIDQyLCAyMjYsIDE1MCwgMjI2LCAyMzEsIDQyLCAyMzYsIDE1LCA2NCwgMTc3LCAxMjgsIDExMSwgNDIsIAotICAgIDIyNiwgMTUwLCA2NCwgMTc3LCAxMjgsIDExMSwgNDIsIDI1MCwgMjUxLCA0MiwgMjQ5LCAxMDIsIDM3LCAyMjUsIDIyLCAzNywgCi0gICAgMjMwLCAxODEsIDM3LCAyMTYsIDg1LCAzNywgMjQ3LCAxNjksIDIxOSwgOTUsIDM3LCA1OSwgMjI2LCAxNjcsIDM3LCAyMjIsIAotICAgIDIzNCwgMjI2LCAxNjcsIDM3LCAyNTMsIDIxNywgMjI2LCAxNjcsIDM3LCAyNDUsIDk3LCAzNywgMjQ4LCAxNTYsIDkyLCAKLSAgICAyMjUsIDIyLCA5MiwgMjMwLCAxODEsIDkyLCAyMTYsIDg1LCA5MiwgNTksIDIyNiwgMTY3LCA0NCwgMjE3LCA4NywgNDMsIAotICAgIDIxNywgODcsIDEyNCwgMjE3LCA4NywgMTIwLCAyMTcsIDg3LCAyNTMsIDIyMCwgMjMwLCAxNTYsIDIxNSwgMTkxLCAyNDQsIAotICAgIDI1LCAyMTUsIDIxMSwgNjcsIDI1MiwgMTQxLCA0NCwgMjE1LCA5MywgNTIsIDY3LCAyNTIsIDE0MSwgNTIsIDQ0LCAyMTUsIAotICAgIDkzLCAyNDcsIDEzOCwgMjI4LCA1MiwgMjI0LCAxNjMsIDIyOCwgNTIsIDIxNSwgMTkxLCAyNDcsIDEzOCwgMjI4LCA1MiwgCi0gICAgMjQ0LCAyNiwgMjI5LCAxMDIsIDUyLCA2NywgMjUyLCAxNDEsIDUyLCA0NCwgMjE1LCA5MywgMjI0LCAyMDMsIDIxNCwgMTg0LCAKLSAgICAyMjMsIDkxLCAyMTgsIDU2LCAyMTQsIDE4NCwgMjIzLCA5MSwgMjI4LCA1NywgMjE4LCA3NywgMjI2LCAyMzEsIDI0OSwgCi0gICAgMTg2LCAyNTMsIDIzOCwgMjI4LCA1NywgMjE4LCA3NiwgMjI4LCA1NywgMjE4LCA3NywgNjQsIDE3NywgMTI4LCAxMTEsIAotICAgIDI0OSwgMTg2LCAyNTMsIDIzOCwgMjI4LCA1NywgMjE4LCA3NywgMTc3LCAxMjgsIDExMSwgMjI2LCAxNTAsIDIyNiwgMjMxLCAKLSAgICAyMzYsIDE1LCAyMjYsIDIzMSwgMjMwLCA4NywgMjQxLCAyMDAsIDI0OSwgMTk2LCAyMzEsIDEzNywgMjM1LCAyMDgsIDIxMSwgCi0gICAgMTQ1LCAyMjksIDIwMiwgMjI4LCA1OCwgNDQsIDI1NCwgMTEwLCAyLCAyNTQsIDI1LCA0NCwgMjE1LCAyMjUsIDIzMCwgMjQsIAotICAgIDIzMiwgMTQ2LCAyNTQsIDExOCwgMjMwLCAyNCwgMjMyLCAxNDYsIDIyNiwgMTU4LCAyMzAsIDI0LCAyMzUsIDE5OCwgMjMwLCAKLSAgICAyNCwgMjE0LCAxNzUsIDI0NywgMjQ5LCAyMjYsIDE2NywgNTksIDIyNiwgMTY3LCAyMTgsIDE1NywgMjI2LCAxNjcsIDI0NywgCi0gICAgMTY5LCAyMTYsIDg1LCAyNTEsIDE2NCwgNDMsIDIyOCwgNTcsIDI0NCwgMTgxLCAyMjAsIDE0OSwgMjI0LCAxODAsIDQ0LCAKLSAgICAyMjgsIDU3LCAyNDQsIDE4MSwgMjIwLCAxNDksIDIyNCwgMTgwLCA0MywgMjIwLCAxNDksIDIyNCwgMTgwLCA0NCwgMjIwLCAKLSAgICAxNDksIDIyNCwgMTgwLCAyMjMsIDQ5LCAyMTYsIDg5LCAyNDUsIDk3LCAyNDksIDk5LCAyMzIsIDE0NiwgMjI2LCAxNTgsIAotICAgIDI0OSwgOTksIDIzMiwgMTQ2LCAyNTQsIDExOCwgNTIsIDIxOCwgNjMsIDUyLCAyMTgsIDIxLCA1MiwgMjM1LCAxOTgsIDUyLCAKLSAgICAyMTQsIDE3NSwgMjI1LCA0NywgMTI4LCAyMiwgMjI2LCA4LCAxMTEsIDIzMywgMTUsIDIsIDI0NywgMTIwLCAyNDIsIDEzMCwgCi0gICAgMiwgMjQ3LCAxMjAsIDIxMywgMTg3LCAyMzAsIDk3LCAyMzMsIDE0LCAyMTMsIDE4NywgMjMwLCA5NywgMjQyLCAxMjksIAotICAgIDIzMywgMTUsIDEyOCwgMjE2LCA0MiwgMTc3LCAyNDIsIDEyOSwgMjQyLCAxMzAsIDEyOCwgMjE2LCA0MiwgMTc3LCAyMzMsIAotICAgIDE0LCAxMjgsIDIxNiwgNDIsIDE3NywgMjMzLCAxNCwgMTI4LCAyMTYsIDQyLCAxNzcsIDI0MiwgMTI5LCAxMjgsIDIxNiwgCi0gICAgNDIsIDE3NywgMjI0LCAyMDIsIDEyOCwgMjE2LCA0MiwgMTc3LCAyMTgsIDU1LCAyNDcsIDEzOCwgMjI4LCA1MiwgMjI0LCAKLSAgICAyMDYsIDE3NywgMjQ1LCA5OSwgMjQ3LCAxMzgsIDIyOCwgNTIsIDIxOCwgNTgsIDE3NywgMjQ1LCA5OSwgMjI4LCA1MiwgNDIsIAotICAgIDIzNiwgMTUsIDY0LCAxNzcsIDEyOCwgMTExLCAyMjgsIDUyLCA0MiwgMjI2LCAxNTAsIDY0LCAxNzcsIDEyOCwgMTExLCA0MiwgCi0gICAgMjM2LCAxNSwgNjQsIDE3NywgMjI4LCA1MiwgMTI4LCAxMTEsIDQyLCAyMjYsIDE1MCwgNjQsIDE3NywgMjI4LCA1MiwgMTI4LCAKLSAgICAxMTEsIDIzMywgMTUsIDI1MSwgODgsIDIyOCwgNTIsIDI0NSwgOTQsIDExMSwgMjQyLCAxMzAsIDI1MSwgODgsIDIyOCwgNTIsIAotICAgIDI0NSwgOTQsIDExMSwgMjI0LCAyMDMsIDI1MSwgODgsIDIyOCwgNTIsIDI0NSwgOTQsIDExMSwgMjE4LCA1NiwgMjUxLCA4OCwgCi0gICAgMjI4LCA1MiwgMjQ1LCA5NCwgMTExLCAyMjgsIDUyLCAyMjgsIDU3LCAyMTgsIDc3LCAyMjYsIDIzMSwgMjQ3LCAxMzgsIAotICAgIDIyOCwgNTIsIDI0OSwgMTg4LCAyNTMsIDIzOCwgMjI4LCA1NywgMjE4LCA3NiwgMjI4LCA1MiwgMjI4LCA1NywgMjE4LCA3NywgCi0gICAgNjQsIDE3NywgMTI4LCAxMTEsIDI0NywgMTM4LCAyMjgsIDUyLCAyNDksIDE4OCwgMjUzLCAyMzgsIDIyOCwgNTcsIDIxOCwgCi0gICAgNzcsIDE3NywgMjQ1LCA5OSwgNjcsIDI0NSwgMTYzLCAyMzAsIDIyMiwgMjAzLCAyNDUsIDE2MywgMTIwLCA0NCwgMjQ3LCAKLSAgICAyNTUsIDI0NSwgMTYzLCAxMjQsIDQ0LCAyNDcsIDI1NSwgMjQ1LCAxNjMsIDI0NSwgMTcwLCA2NCwgMiwgMTk5LCAyMDMsIAotICAgIDkxLCAyNDUsIDE3MCwgNjQsIDIsIDY3LCAyNTIsIDE0MSwgMjUzLCAyMDcsIDI0NSwgMTQzLCA2NCwgMjAzLCA5MSwgNCwgCi0gICAgMjQ1LCAxNzAsIDY0LCAyLCA2NywgMjUyLCAxNDEsIDI1MywgMjA3LCAyNDUsIDE0MywgNjQsIDIwMywgOTEsIDI0NSwgMTcwLCAKLSAgICA2NCwgMiwgNTksIDQ4LCAyNDUsIDE3MCwgNjQsIDIsIDIyNiwgMTIzLCA0LCAyNDUsIDE3MCwgNjQsIDIsIDIyNiwgMTIzLCAKLSAgICAyNDUsIDE3MCwgNjQsIDIsIDIxNCwgMTgzLCAyNDUsIDE3MCwgNjQsIDIsIDExMywgMjAzLCAyMTgsIDkwLCAyNDksIDE4NiwgCi0gICAgMiwgMTk5LCAyMDMsIDkxLCAyNDksIDE4NiwgMiwgNjcsIDI1MiwgMTQxLCAyNTMsIDIwNywgMjQ1LCAxNDMsIDY0LCAyMDMsIAotICAgIDkxLCA0LCAyNDksIDE4NiwgMiwgNjcsIDI1MiwgMTQxLCAyNTMsIDIwNywgMjQ1LCAxNDMsIDY0LCAyMDMsIDkxLCAyNDksIAotICAgIDE4NiwgMiwgMjI2LCAxMjMsIDQsIDI0OSwgMTg2LCAyLCAyMjYsIDEyMywgMjEwLCAxNjAsIDE4NywgMjUyLCAxNzMsIDIzMSwgCi0gICAgNjEsIDI0NywgMjUwLCA1MCwgMjQ1LCAxNzIsIDc0LCAyNDAsIDIzNCwgMTIwLCAyNTMsIDI0OSwgMTI0LCAyNTMsIDI0OSwgCi0gICAgMjI0LCAxNzUsIDIyNSwgMTY1LCAyMTIsIDMyLCAyMzIsIDIxMywgNDMsIDI1MCwgMTgxLCA0NCwgMjUwLCAxODEsIDQzLCAKLSAgICAyNDQsIDU3LCA0NCwgMjQ0LCA1NywgMjUxLCAxNzUsIDQ0LCAyNDksIDEzMiwgMjUxLCAxNzUsIDQzLCAyNDksIDEzMiwgCi0gICAgMjE2LCAxNCwgNDQsIDI0OSwgMTMyLCAyMTYsIDE0LCA0MywgMjQ5LCAxMzIsIDIyMywgNDksIDIyOCwgNTIsIDUwLCA0MiwgCi0gICAgMjMyLCAxMDQsIDI1NCwgMjUsIDIyMSwgMTY0LCAyMjEsIDE3MSwgMjE3LCAxLCAyMjMsIDEyMCwgMjI0LCAyNDEsIDIzNSwgCi0gICAgMjM4LCAyMTMsIDE2NSwgMjE4LCAyMzQsIDIyNSwgNDEsIDY0LCAyMzUsIDIwNywgNTAsIDIxNSwgOTQsIDIyOCwgNTIsIDUwLCAKLSAgICAyMTIsIDQyLCAyNDAsIDIzNiwgMjE2LCAxNCwgNDMsIDI0OSwgMTYwLCAyMTYsIDE0LCA0NCwgMjQ5LCAxNjAsIDI1MSwgCi0gICAgMTc1LCA0MywgMjQ5LCAxNjAsIDI1MSwgMTc1LCA0NCwgMjQ5LCAxNjAsIDIxNiwgMTQsIDE2MywgMjM1LCAyMTEsIDI1MSwgCi0gICAgMTc1LCAxNjMsIDIzNSwgMjExLCAyNDMsIDI0MCwgMjE5LCA3NSwgMTIwLCAyNTMsIDI1MCwgMjUyLCAyNCwgMTEzLCAyMDMsIAotICAgIDI1MiwgMTI5LCAyMjYsIDE2MCwgMjM0LCAxMzgsIDI0NSwgOTAsIDIxNiwgNDIsIDIxNiwgMTk2LCAyMjIsIDI1MSwgMjExLCAKLSAgICAxNzksIDIzNiwgMCwgMTE1LCAyMjMsIDExNywgMjUxLCAxNjMsIDIzNCwgMTM3LCAyMzMsIDQyLCAyNTQsIDExMCwgMTI3LCAKLSAgICAyMjIsIDI0NywgMjU0LCAxMTAsIDEyNywgMjQ1LCA5MCwgMjE2LCA0MiwgMjE2LCAxOTYsIDIzMywgNDYsIDI1MiwgMzUsIAotICAgIDIyMiwgMjMzLCAyNDksIDcwLCAyNTQsIDE1NSwgMjU0LCAxLCAyMTcsIDE4MSwgMjE2LCA0LCAyMjIsIDEyMywgMjQ3LCAKLSAgICAyMTUsIDIyNiwgMTUxLCAyNDksIDE5OCwgMjE3LCA1MiwgMjE5LCA4NiwgMjQ5LCAxNTEsIDI0OSwgMTUwLCAyNTQsIDY2LCAKLSAgICAyNDMsIDIyNSwgMTYsIDI0MCwgMTUxLCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDIxOCwgMjI4LCAyMjQsIDI3LCAyNTQsIAotICAgIDY2LCAyNDMsIDIyNSwgMTYsIDIyNCwgMjgsIDI0NSwgOTksIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMjI0LCAyOCwgMjQ3LCAKLSAgICAxNzQsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMjI0LCAyOCwgMjQ3LCAyNDgsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgCi0gICAgMjI0LCAyOCwgMjM1LCA1NiwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyMjQsIDI4LCAyNTAsIDM1LCAyNTQsIDY2LCAyNDMsIAotICAgIDIyNSwgMTYsIDI1MCwgMzYsIDIxOCwgMTM1LCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDI1MCwgMzYsIDIzNSwgNTYsIDI1NCwgCi0gICAgNjYsIDI0MywgMjI1LCAxNiwgMjE5LCA5NiwgMTMwLCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDI1MiwgMTgxLCAxMzAsIAotICAgIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMjI0LCAyOCwgMjE5LCA5NSwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyMjQsIDI4LCAKLSAgICAyNTIsIDE4MCwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyMjQsIDI4LCAyMzMsIDE0LCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIAotICAgIDIyNCwgMjgsIDI0MiwgMTI5LCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDE0MCwgMjE0LCAxOSwgMjU0LCA2NiwgMjQzLCAKLSAgICAyMjUsIDE2LCA5NywgMjE0LCAxOSwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyMjQsIDI4LCAxNDAsIDc0LCAyNTQsIDY2LCAKLSAgICAyNDMsIDIyNSwgMTYsIDIyNCwgMjgsIDk3LCA3NCwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyNTAsIDM2LCAyNTIsIDE4MCwgCi0gICAgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAxMjQsIDIxNywgODgsIDIxNCwgMTgzLCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIAotICAgIDI0OCwgNTUsIDIxOCwgMTM1LCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDIyNCwgMjgsIDEyNCwgMjUwLCAyMzgsIDI1NCwgCi0gICAgNjYsIDI0MywgMjI1LCAxNiwgMjI0LCAyOCwgMjQ4LCA1NCwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAxMjQsIDIxNywgODgsIAotICAgIDIzNSwgNTYsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMjE0LCAxNTMsIDIxNCwgMTksIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgCi0gICAgMjI0LCAyOCwgMjE0LCAxNTMsIDc0LCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDEyMCwgMjE3LCA4OCwgMjI2LCAxMjMsIAotICAgIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMjQ4LCA2NiwgMjE4LCAxMzUsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMjI0LCAyOCwgCi0gICAgMTIwLCAyNTAsIDIzOCwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyMjQsIDI4LCAyNDgsIDY1LCAyNTQsIDY2LCAyNDMsIAotICAgIDIyNSwgMTYsIDEyMCwgMjE3LCA4OCwgMjM1LCA1NiwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyNDYsIDEwNCwgMjE0LCAxOSwgCi0gICAgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyMjQsIDI4LCAyNDYsIDEwNCwgNzQsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMjIzLCAKLSAgICAyNTMsIDIxNCwgMTgzLCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDI0OCwgNTUsIDIxNCwgMTgzLCAyNTQsIDY2LCAyNDMsIAotICAgIDIyNSwgMTYsIDI0NywgMjQ5LCAyMTQsIDE4MywgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyMzUsIDU3LCAyMTQsIDE4MywgCi0gICAgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyNTAsIDM2LCAyMTQsIDE4MywgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAxMjAsIAotICAgIDIyMCwgNSwgMjM1LCA1NiwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyMjMsIDI1MywgMjI0LCAyNywgMjU0LCA2NiwgMjQzLCAKLSAgICAyMjUsIDE2LCAyNTAsIDM2LCAyMTgsIDE1NiwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyMjQsIDI4LCAyNDksIDIyNiwgCi0gICAgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAxMjAsIDIxNywgODgsIDI0OCwgMSwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyNDgsIAotICAgIDY2LCAyNDgsIDEsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMjE4LCAxNTcsIDI0OCwgMSwgMjU0LCA2NiwgMjQzLCAyMjUsIAotICAgIDE2LCAyMzUsIDU3LCAyNDgsIDEsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMjUwLCAzNiwgMjQ4LCAxLCAyNTQsIDY2LCAKLSAgICAyNDMsIDIyNSwgMTYsIDEyNCwgMjIwLCA1LCAyMTgsIDEzNSwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCA0MywgMjIwLCA1LCAKLSAgICAyMTgsIDEzNSwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyMTYsIDg5LCAyNDgsIDEsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgCi0gICAgMjQyLCAxMzAsIDI0OCwgMSwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyNDksIDIyMCwgMTMwLCAyNTQsIDY2LCAyNDMsIAotICAgIDIyNSwgMTYsIDI0OCwgNjYsIDE4MiwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyMTAsIDM0LCAyNTQsIDY2LCAyNDMsIDIyNSwgCi0gICAgMTYsIDIxOCwgMTM2LCAxODIsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMjIwLCAxNTEsIDIxNCwgMTgzLCAyNTQsIDY2LCAKLSAgICAyNDMsIDIyNSwgMTYsIDIyNCwgMjgsIDIyOCwgNTIsIDI0NSwgOTksIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMjI0LCAyOCwgCi0gICAgMjI0LCAxMiwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAxMjQsIDI1MCwgMjM5LCAxODIsIDI1NCwgNjYsIDI0MywgMjI1LCAKLSAgICAxNiwgMTIwLCAyNTAsIDIzOSwgMTgyLCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDIzNSwgMTg1LCAyNTQsIDY2LCAyNDMsIAotICAgIDIyNSwgMTYsIDIyMywgMzcsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMjI2LCAyMDEsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgCi0gICAgMjU0LCAxNDQsIDIxNCwgMTgzLCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDI0NSwgMTAxLCAyMTQsIDE4MywgMjU0LCA2NiwgCi0gICAgMjQzLCAyMjUsIDE2LCAyMzUsIDE4NiwgMjE0LCAxODMsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMjI2LCAyMDIsIDIxNCwgCi0gICAgMTgzLCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDI1NCwgMTQzLCAyMjgsIDUyLCAyNTAsIDEzMCwgNzgsIDQ0LCAyNTQsIAotICAgIDExMCwgMiwgMjQ2LCAxMDQsIDIxMCwgMzUsIDc0LCAyMTksIDIzNSwgMjA0LCAyNTEsIDE2MywgMjUyLCA0NSwgODcsIDY3LCAKLSAgICAyMzIsIDIxNCwgMiwgMjMwLCAyMjQsIDI0NywgMTIwLCAyMzUsIDIxNiwgODcsIDI0OSwgMTgzLCAyMTQsIDE4MSwgODcsIAotICAgIDI0NywgMTg5LCAyMTQsIDE4MSwgODcsIDI0NSwgMTU0LCA4NywgMjQ5LCAyMTAsIDg3LCA3MSwgNDIsIDIsIDI1MCwgMTc1LCAKLSAgICA2NywgMjMyLCAyMTMsIDI0NSwgMTMwLCA4NywgMjU0LCAxMzksIDIzNCwgMTM5LCA4NywgMjQxLCAyMTMsIDg3LCAzNywgCi0gICAgMjAzLCAyNTIsIDE0MSwgMiwgMjI4LCA1MCwgMzcsIDIxNSwgMjI2LCAyNDYsIDEwNiwgMjUxLCAxMzUsIDI1MCwgMzYsIDIsIAotICAgIDIyOCwgNTQsIDc0LCAyMTQsIDE3OSwgODcsIDIzMCwgMTM3LCA4NywgMjQwLCAxNjQsIDg3LCAyMjYsIDE3NCwgMjQyLCA1OSwgCi0gICAgODcsIDIyNiwgMTc0LCAyMzMsIDE0NywgODcsIDIyNSwgMjQ0LCA4NywgMjI1LCAyNDMsIDg3LCAyNDcsIDE5NywgMjQ5LCAKLSAgICA5NywgMTYsIDI0NCwgMjAsIDEwNSwgMjE5LCA1MCwgODcsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMjI0LCAyNywgMjQ4LCAKLSAgICA4MywgMjIwLCAxMzgsIDIzNCwgMTM5LCA4NywgMjI0LCAxOTIsIDIyNiwgNzUsIDIyOSwgODIsIDIyNiwgNzUsIDIyNCwgCi0gICAgMTg4LCAyMjEsIDE4OSwgODcsIDI1MCwgMTcsIDIyMSwgMTg5LCA4NywgNDMsIDIyNiwgNCwgMjE0LCAxNjAsIDEwMywgNDMsIAotICAgIDIyNiwgNCwgMjQ1LCAyMSwgNDMsIDIyNiwgNCwgMjMyLCAxMDgsIDEwMywgNDQsIDIyNiwgNCwgMjE0LCAxNjAsIDEwMywgCi0gICAgNDQsIDIyNiwgNCwgMjQ1LCAyMSwgNDQsIDIyNiwgNCwgMjMyLCAxMDgsIDEwMywgNDMsIDQyLCAyNTEsIDE1OCwgMjE0LCAKLSAgICAxNjAsIDI0OSwgMTYwLCA0MywgNDIsIDI1MSwgMTU4LCAyNDUsIDIxLCA0MywgNDIsIDI1MSwgMTU4LCAyMzIsIDEwOCwgCi0gICAgMjQ5LCAxNjAsIDQ0LCA0MiwgMjUxLCAxNTgsIDIxNCwgMTYwLCAyNDksIDE2MCwgNDQsIDQyLCAyNTEsIDE1OCwgMjQ1LCAKLSAgICAyMSwgNDQsIDQyLCAyNTEsIDE1OCwgMjMyLCAxMDgsIDI0OSwgMTYwLCA0MywgMjQ5LCA5OSwgMjUxLCAxNTgsIDIxNCwgCi0gICAgMTYwLCAxMDMsIDQzLCAyNDksIDk5LCAyNTEsIDE1OCwgMjMwLCAyMjQsIDIyNSwgMTAxLCA0MywgMjQ5LCA5OSwgMjUxLCAKLSAgICAxNTgsIDIzMiwgMTA4LCAxMDMsIDI0OSwgOTksIDI1MSwgMTU4LCAyNDUsIDIxLCA0NCwgMjQ5LCA5OSwgMjUxLCAxNTgsIAotICAgIDIxNCwgMTYwLCAxMDMsIDQ0LCAyNDksIDk5LCAyNTEsIDE1OCwgMjMwLCAyMjQsIDIyNSwgMTAxLCA0NCwgMjQ5LCA5OSwgCi0gICAgMjUxLCAxNTgsIDIzMiwgMTA4LCAxMDMsIDIzNSwgMjEyLCAyNDUsIDIxLCAyMDMsIDIzMiwgMjE0LCAyNDUsIDIxLCAyMTQsIAotICAgIDE2MCwgNDMsIDE3NywgMjMyLCAxMDgsIDQ0LCAyNDksIDk5LCAyNTEsIDE1OCwgMjIxLCAxNzIsIDIxNCwgMTYwLCA0NCwgCi0gICAgMTc3LCAyMzIsIDEwOCwgNDMsIDI0OSwgOTksIDI1MSwgMTU4LCAyMjEsIDE3MiwgMjE4LCA0MSwgMjE2LCAxMywgMjE4LCAKLSAgICA0MSwgMjUxLCAxNzQsIDIxNiwgMTQsIDQyLCAxMjcsIDI1MSwgMTc1LCA0MiwgMTI3LCAyNTEsIDE3NSwgNDIsIDI1MSwgCi0gICAgMTU4LCAxMTcsIDIxNiwgMTQsIDQyLCAxMjcsIDM0LCAxNiwgMjUxLCAxNzQsIDQzLCA2NywgOTMsIDIzMiwgMjEzLCA0NCwgCi0gICAgNjcsIDkzLCAyMzIsIDIxMywgMjAzLCAyMjEsIDIwNSwgMjMyLCAyMTIsIDIwMywgMjIxLCAyMDUsIDIzMiwgMjExLCAyMDMsIAotICAgIDIyMSwgMjA1LCAyMzIsIDIxMCwgMjAzLCAyMjEsIDIwNSwgMjMyLCAyMDksIDI0OCwgNDYsIDE2LCAxOTIsIDY3LCAyMiwgCi0gICAgMjE2LCAxNCwgMjIyLCAyNTEsIDI0OCwgNDYsIDE2LCAxOTIsIDY3LCAyMiwgMjUxLCAxNzUsIDIyMiwgMjUxLCAyNDgsIDQ2LCAKLSAgICAxNiwgMTkyLCA2NywgMiwgMjUwLCAzNSwgMjQ4LCA0NiwgMTYsIDE5MiwgMTI0LCAyMiwgMjAzLCAyLCAyNTAsIDM1LCAyNDgsIAotICAgIDQ2LCAxNiwgMTkyLCAxMjAsIDIyLCAyMDMsIDIsIDI1MCwgMzUsIDI0OCwgNDYsIDE2LCAxOTIsIDY3LCAyLCAyMTUsIDIyNSwgCi0gICAgMjQ4LCA0NiwgMTYsIDE5MiwgMTI0LCAyMiwgMjAzLCAyLCAyMTUsIDIyNSwgMjQ4LCA0NiwgMTYsIDE5MiwgMTIwLCAyMiwgCi0gICAgMjAzLCAyLCAyMTUsIDIyNSwgMjQ4LCA0NiwgMTYsIDE5MiwgNjcsIDIyLCAyMTIsIDM1LCAyNDgsIDQ2LCAxNiwgMTkyLCAKLSAgICAxMjQsIDIyLCAyMDMsIDIsIDIxMiwgMzUsIDI0OCwgNDYsIDE2LCAxOTIsIDEyMCwgMjIsIDIwMywgMiwgMjEyLCAzNSwgCi0gICAgMjQ4LCA0NiwgMTYsIDE5MiwgMTI0LCAyMiwgMjQxLCA0NCwgMjQ4LCA0NiwgMTYsIDE5MiwgMTIwLCAyMiwgMjQxLCA0NCwgCi0gICAgMjQ4LCA0NiwgMTYsIDE5MiwgNjcsIDIyLCAyMTYsIDE0LCAyMzMsIDQ2LCAyNDgsIDQ2LCAxNiwgMTkyLCA2NywgMjIsIAotICAgIDI1MSwgMTc1LCAyMzMsIDQ2LCA0MiwgMjQ0LCAzMiwgMjIzLCA1NCwgODcsIDI0NSwgMTgyLCA4NywgNjcsIDIzMiwgMjE0LCAKLSAgICAyNDUsIDIxLCAyMzEsIDMzLCAyNTEsIDE0NiwgMjMxLCAzMywgMTk5LCAxMTcsIDIxOSwgMjUwLCAyMzEsIDMzLCAyMTksIAotICAgIDI1MSwgMTE3LCAyMzIsIDEzNywgMjMxLCAzMywgMTk5LCAxMTcsIDExMywgMjE5LCAyMzcsIDIzMSwgMzMsIDExMywgMjE5LCAKLSAgICAyMzgsIDExNywgMjMyLCAxMzcsIDIzMSwgMzMsIDExMywgMjE5LCAyMzgsIDIzNSwgNjQsIDIzMSwgMzMsIDIxNSwgMjA4LCAKLSAgICAyMzEsIDMzLCAyMTYsIDIyMywgMjMxLCAzMywgMjI1LCAxODgsIDI0NSwgMjI0LCAyNDIsIDEyMiwgMjQzLCAyMTksIDIxNiwgCi0gICAgMTQsIDIyNiwgMywgMjUxLCAxNzUsIDIyNiwgMywgMjE2LCAxNCwgMjQ5LCA5OSwgMTI3LCAyNTEsIDE3NSwgMjQ5LCA5OSwgCi0gICAgMTI3LCAyMTYsIDE0LCAyMTYsIDYsIDIyMCwgNTMsIDEyNywgMjUxLCAxNzUsIDIxNiwgNiwgMjIwLCA1MywgMTI3LCA3MSwgCi0gICAgMjE1LCAyMzksIDI1MiwgMzUsIDIyMiwgMjM0LCAyLCAyNTAsIDM1LCAyMTgsIDEyMCwgMjQ0LCA2NCwgMjU1LCAxNywgMjQ5LCAKLSAgICA5NiwgMjQ1LCAxNzEsIDIzNSwgMTk4LCAyNDgsIDgzLCAyNDUsIDI0LCA4NywgODUsIDIyMiwgMjQ3LCA1MiwgMjE1LCAyMjUsIAotICAgIDg1LCAyMzMsIDQyLCA1MiwgMjE1LCAyMjUsIDg1LCAyMTQsIDE2MiwgNTIsIDIxNSwgMjI1LCA4NSwgMjQ2LCAxMDUsIDUyLCAKLSAgICAyMTUsIDIyNSwgODUsIDIyMiwgMjQ3LCA1MiwgMjE1LCAyMjYsIDIsIDY3LCAxMzAsIDg1LCAyMzMsIDQyLCA1MiwgMjE1LCAKLSAgICAyMjYsIDIsIDY3LCAxMzAsIDg1LCAyMjIsIDI0NywgMjE1LCAyMjYsIDIsIDUyLCA2NywgMTMwLCAyNTQsIDE3MywgMjUwLCAKLSAgICAzLCAyMTgsIDEyNiwgMjE2LCA4NiwgMjUwLCAzLCAyNDAsIDIzNywgMiwgMjQ0LCA1MCwgMjIxLCAyNDEsIDE2LCAzMSwgCi0gICAgMjI3LCAyMDIsIDE2LCAzMSwgMjE4LCAxNTIsIDY0LCAyNDEsIDIzMywgMTYsIDMxLCAyMTgsIDE1MiwgNjQsIDIxNiwgMjEyLCAKLSAgICAxNiwgMzEsIDI0NSwgMTQzLCA2NCwgMjE2LCAyMTIsIDE2LCAzMSwgMjQ1LCAxNDMsIDY0LCAyMTUsIDI0MywgMTYsIDMxLCAKLSAgICAyNDUsIDEzMiwgMTYsIDMxLCAyNTUsIDcsIDE2LCAzMSwgMjUyLCA0NCwgMTYsIDMxLCAyNTIsIDE3OSwgMTYsIDMxLCAyMDMsIAotICAgIDIxNywgODksIDE2LCAzMSwgMjMyLCAyMTQsIDI0NCwgMTQ1LCAxNiwgMzEsIDY3LCAyMTcsIDg5LCAxNiwgMzEsIDI0NCwgCi0gICAgMjAsIDI0NCwgMTQ1LCAxNiwgMzEsIDI1MCwgMjMwLCAyMjMsIDUzLCAxNiwgMzEsIDIyMCwgMjgsIDIyNiwgMTMwLCAxNiwgCi0gICAgMzEsIDIyMCwgMjgsIDIzNSwgMjU1LCAxNiwgMzEsIDI0OCwgMTUxLCAyMzIsIDIwNCwgMjQ1LCA3NywgMTYsIDMxLCAyNDgsIAotICAgIDMxLCAyNDksIDE3OCwgMTEwLCAxNiwgMzEsIDI0OCwgMzEsIDI0OSwgMTc4LCAxMDUsIDE2LCAzMSwgMjQ4LCAzMSwgMjQ5LCAKLSAgICAxNzgsIDE1OCwgMTYsIDMxLCAyNDgsIDMxLCAyNDksIDE3OCwgMTYxLCAxNiwgMzEsIDE1MiwgMjU1LCA3LCAxNiwgMzEsIAotICAgIDIxNywgMTc3LCAyMzYsIDYyLCAxNiwgMzEsIDI0NSwgMTQzLCA2NCwgMjE1LCAyNDQsIDI1MSwgMjEzLCAxNiwgMzEsIDI1MSwgCi0gICAgNSwgMTYsIDMxLCAyNDUsIDE0MywgNjQsIDIzMSwgODEsIDE2LCAzMSwgMjE4LCA2MSwgMTYsIDMxLCAyNDUsIDc3LCAxNiwgCi0gICAgMzEsIDI0NCwgMTA3LCAyMjAsIDEzNywgMTYsIDMxLCAyNDIsIDEyMSwgMjIwLCAxMzcsIDE2LCAzMSwgMjIzLCAxMjEsIAotICAgIDIyMCwgMTM3LCAxNiwgMzEsIDIxNCwgMTc0LCAyMjAsIDEzNywgMTYsIDMxLCAyMTksIDE4LCAxNiwgMzEsIDI0OCwgNjMsIAotICAgIDI1MSwgMjE2LCA4NywgMjA0LCAyNTEsIDE2MywgMTYsIDMxLCAyMjksIDg1LCAxNiwgMzEsIDI0OCwgNjQsIDI0NCwgMjAsIAotICAgIDEwNSwgMTYsIDMxLCAyMTgsIDYyLCAyNDQsIDIwLCAxMDUsIDIyNiwgMjQxLCAxMDMsIDIyNiwgMjQxLCAyNTAsIDE1MiwgCi0gICAgMjI2LCAyNDEsIDI0NCwgMjMsIDIyNiwgMjQxLCAyMzUsIDE5MywgMjQ0LCAyMywgMjI2LCAyNDEsIDI1MiwgNDIsIDI1MSwgCi0gICAgMTI0LCAyMjYsIDI0MSwgMjUxLCAxNzAsIDIxNiwgMTExLCAyMjYsIDI0MSwgMjUxLCAxNTUsIDI1MiwgMTQ2LCAyNDAsIAotICAgIDEwMywgMjI2LCAyNDEsIDI1NCwgMTI3LCA2NCwgMjUwLCAxMjksIDIyNiwgMjQxLCAyNDgsIDE1NiwgMjI2LCAyNDEsIDI0OSwgCi0gICAgODcsIDI1NSwgMTEsIDIyNywgMjAwLCAyMjYsIDI0MSwgNTIsIDI1MiwgMTgwLCAzNywgMjEsIDExMCwgMzcsIDIxLCAxMDUsIAotICAgIDM3LCAyMSwgMTU4LCAzNywgMjEsIDE2MSwgMzcsIDIxLCAxODksIDM3LCAyMSwgMTk0LCAzNywgMjEsIDE5OCwgMzcsIDIxLCAKLSAgICAxOTUsIDM3LCAyMSwgMjAwLCAzNywgNTQsIDIxNiwgMjQ3LCAzNywgNTQsIDI0NSwgMTY3LCAzNywgNTQsIDIxNSwgNzYsIAotICAgIDM3LCA1NCwgMjE2LCAxNjQsIDM3LCA1NCwgMjQ0LCA1LCAzNywgNTQsIDI0NCwgMTE4LCAzNywgNTQsIDIxOSwgMTE5LCAzNywgCi0gICAgNTQsIDIyMCwgMTE5LCAzNywgNTQsIDI0NSwgMTkwLCAzNywgNTQsIDIyOCwgMTk3LCAzNywgNTQsIDIxNSwgNzMsIDg4LCAKLSAgICAyMSwgMTEwLCA4OCwgMjEsIDEwNSwgODgsIDIxLCAxNTgsIDg4LCAyMSwgMTYxLCA4OCwgMjEsIDE4OSwgODgsIDIxLCAxOTQsIAotICAgIDg4LCAyMSwgMTk4LCA4OCwgMjEsIDE5NSwgODgsIDIxLCAyMDAsIDg4LCA1NCwgMjE2LCAyNDcsIDg4LCA1NCwgMjQ1LCAKLSAgICAxNjcsIDg4LCA1NCwgMjE1LCA3NiwgODgsIDU0LCAyMTYsIDE2NCwgODgsIDU0LCAyNDQsIDUsIDg4LCA1NCwgMjQ0LCAxMTgsIAotICAgIDg4LCA1NCwgMjE5LCAxMTksIDg4LCA1NCwgMjIwLCAxMTksIDg4LCA1NCwgMjQ1LCAxOTAsIDg4LCA1NCwgMjI4LCAxOTcsIAotICAgIDg4LCA1NCwgMjE1LCA3MywgMjEsIDEyMywgMjQzLCAyMjksIDIxOCwgMTI5LCAyMSwgMTEzLCAyNDMsIDIyOSwgMjE4LCAKLSAgICAxMjksIDIxLCAxMzQsIDI0MywgMjI5LCAyMTgsIDEyOSwgMjEsIDI0NCwgMTEsIDI0MywgMjI5LCAyMTgsIDEyOSwgMjEsIAotICAgIDI0NCwgODEsIDI0MywgMjI5LCAyMTgsIDEyOSwgMjEsIDIxOSwgMTI1LCAyNDMsIDIyOSwgMjE4LCAxMjksIDIxLCAyMjAsIAotICAgIDEyMiwgMjQzLCAyMjksIDIxOCwgMTI5LCAyMSwgMjQ1LCAxOTMsIDI0MywgMjI5LCAyMTgsIDEyOSwgMjEsIDIyOCwgMjAwLCAKLSAgICAyNDMsIDIyOSwgMjE4LCAxMjksIDU0LCAyMTYsIDI0OCwgMjQzLCAyMjksIDIxOCwgMTI5LCA1NCwgMjQ1LCAxNjgsIDI0MywgCi0gICAgMjI5LCAyMTgsIDEyOSwgNTQsIDIxNSwgNzcsIDI0MywgMjI5LCAyMTgsIDEyOSwgNTQsIDIxNiwgMTY1LCAyNDMsIDIyOSwgCi0gICAgMjE4LCAxMjksIDU0LCAyNDQsIDYsIDI0MywgMjI5LCAyMTgsIDEyOSwgNTQsIDI0NCwgMTE5LCAyNDMsIDIyOSwgMjE4LCAKLSAgICAxMjksIDU0LCAyMTksIDEyMCwgMjQzLCAyMjksIDIxOCwgMTI5LCA1NCwgMjIwLCAxMjAsIDI0MywgMjI5LCAyMTgsIDEyOSwgCi0gICAgNTQsIDI0NSwgMTkxLCAyNDMsIDIyOSwgMjE4LCAxMjksIDU0LCAyMjgsIDE5OCwgMjQzLCAyMjksIDIxOCwgMTI5LCA1NCwgCi0gICAgMjE1LCA3NCwgMjQzLCAyMjksIDIxOCwgMTI5LCA4OCwgNywgNCwgMSwgNjEsIDg4LCA3LCA0LCAxLCAyNTMsIDE1OCwgODgsIAotICAgIDcsIDQsIDEsIDI1MSwgNjYsIDg4LCA3LCA0LCAxLCAyNDksIDYwLCA4OCwgNywgNCwgMSwgNzUsIDg4LCA3LCA0LCAxLCAKLSAgICAyNDUsIDYsIDg4LCA3LCA0LCAxLCAyNDMsIDIwMiwgODgsIDcsIDQsIDEsIDI0MiwgNjAsIDg4LCA3LCA0LCAxLCA3MywgODgsIAotICAgIDcsIDQsIDEsIDIzNSwgMTQ0LCA4OCwgNywgNCwgMSwgMjM1LCAyMywgODgsIDcsIDQsIDEsIDE1NiwgODgsIDcsIDQsIDEsIAotICAgIDE5MywgODgsIDcsIDQsIDEsIDIzMCwgMjUsIDg4LCA3LCA0LCAxLCA3NiwgODgsIDcsIDQsIDEsIDIyNiwgMTA1LCA4OCwgNywgCi0gICAgNCwgMSwgMjI0LCA5NiwgODgsIDcsIDQsIDEsIDE1MywgODgsIDcsIDQsIDEsIDIyMiwgOTEsIDg4LCA3LCA0LCAxLCAyMTcsIAotICAgIDE1MiwgODgsIDcsIDQsIDEsIDcwLCA4OCwgNywgNCwgMSwgMjE0LCAxMDUsIDg4LCA3LCA0LCAxLCAyMTIsIDk4LCA4OCwgNywgCi0gICAgNCwgMSwgMjExLCAxNzgsIDg4LCA3LCA0LCAxLCAyMTEsIDExNywgODgsIDcsIDQsIDEsIDIxMCwgMTU5LCAzNywgNywgNiwgCi0gICAgMSwgNjEsIDM3LCA3LCA2LCAxLCAyNTMsIDE1OCwgMzcsIDcsIDYsIDEsIDI1MSwgNjYsIDM3LCA3LCA2LCAxLCAyNDksIDYwLCAKLSAgICAzNywgNywgNiwgMSwgNzUsIDM3LCA3LCA2LCAxLCAyNDUsIDYsIDM3LCA3LCA2LCAxLCAyNDMsIDIwMiwgMzcsIDcsIDYsIDEsIAotICAgIDI0MiwgNjAsIDM3LCA3LCA2LCAxLCA3MywgMzcsIDcsIDYsIDEsIDIzNSwgMTQ0LCAzNywgNywgNiwgMSwgMjM1LCAyMywgCi0gICAgMzcsIDcsIDYsIDEsIDE1NiwgMzcsIDcsIDYsIDEsIDE5MywgMzcsIDcsIDYsIDEsIDIzMCwgMjUsIDM3LCA3LCA2LCAxLCAKLSAgICA3NiwgMzcsIDcsIDYsIDEsIDIyNiwgMTA1LCAzNywgNywgNiwgMSwgMjI0LCA5NiwgMzcsIDcsIDYsIDEsIDE1MywgMzcsIDcsIAotICAgIDYsIDEsIDIyMiwgOTEsIDM3LCA3LCA2LCAxLCAyMTcsIDE1MiwgMzcsIDcsIDYsIDEsIDcwLCAzNywgNywgNiwgMSwgMjE0LCAKLSAgICAxMDUsIDM3LCA3LCA2LCAxLCAyMTIsIDk4LCAzNywgNywgNiwgMSwgMjExLCAxNzgsIDM3LCA3LCA2LCAxLCAyMTEsIDExNywgCi0gICAgMzcsIDcsIDYsIDEsIDIxMCwgMTU5LCAzNywgNywgNCwgMSwgNjEsIDM3LCA3LCA0LCAxLCAyNTMsIDE1OCwgMzcsIDcsIDQsIAotICAgIDEsIDI1MSwgNjYsIDM3LCA3LCA0LCAxLCAyNDksIDYwLCAzNywgNywgNCwgMSwgNzUsIDM3LCA3LCA0LCAxLCAyNDUsIDYsIAotICAgIDM3LCA3LCA0LCAxLCAyNDMsIDIwMiwgMzcsIDcsIDQsIDEsIDI0MiwgNjAsIDM3LCA3LCA0LCAxLCA3MywgMzcsIDcsIDQsIAotICAgIDEsIDIzNSwgMTQ0LCAzNywgNywgNCwgMSwgMjM1LCAyMywgMzcsIDcsIDQsIDEsIDE1NiwgMzcsIDcsIDQsIDEsIDE5MywgCi0gICAgMzcsIDcsIDQsIDEsIDIzMCwgMjUsIDM3LCA3LCA0LCAxLCA3NiwgMzcsIDcsIDQsIDEsIDIyNiwgMTA1LCAzNywgNywgNCwgCi0gICAgMSwgMjI0LCA5NiwgMzcsIDcsIDQsIDEsIDE1MywgMzcsIDcsIDQsIDEsIDIyMiwgOTEsIDM3LCA3LCA0LCAxLCAyMTcsIAotICAgIDE1MiwgMzcsIDcsIDQsIDEsIDcwLCAzNywgNywgNCwgMSwgMjE0LCAxMDUsIDM3LCA3LCA0LCAxLCAyMTIsIDk4LCAzNywgNywgCi0gICAgNCwgMSwgMjExLCAxNzgsIDM3LCA3LCA0LCAxLCAyMTEsIDExNywgMzcsIDcsIDQsIDEsIDIxMCwgMTU5LCAzNywgMjEsIAotICAgIDIxMCwgODYsIDE1MiwgMzcsIDU0LCAyNDUsIDE2NywgMTUyLCAzNywgNTQsIDIxNSwgNzYsIDE1MiwgMzcsIDU0LCAyMTYsIAotICAgIDE2NCwgMTUyLCAzNywgNTQsIDI0NCwgNSwgMTUyLCAzNywgNTQsIDI0NCwgMTE4LCAxNTIsIDM3LCA1NCwgMjE5LCAxMTksIAotICAgIDE1MiwgMzcsIDU0LCAyMjAsIDExOSwgMTUyLCAzNywgNTQsIDI0NSwgMTkwLCAxNTIsIDM3LCA1NCwgMjI4LCAxOTcsIDE1MiwgCi0gICAgMzcsIDU0LCAyMTUsIDczLCA1MiwgMzcsIDIxLCAxMTAsIDUyLCAzNywgMjEsIDEwNSwgNTIsIDM3LCAyMSwgMTU4LCA1MiwgCi0gICAgMzcsIDIxLCAxNjEsIDUyLCAzNywgMjEsIDE4OSwgNTIsIDM3LCAyMSwgMTk0LCA1MiwgMzcsIDIxLCAxOTgsIDUyLCAzNywgCi0gICAgMjEsIDE5NSwgNTIsIDM3LCAyMSwgMjAwLCA1MiwgMzcsIDU0LCAyMTYsIDI0NywgMTUyLCAzNywgMjEsIDIxMCwgODYsIDkzLCAKLSAgICA5OSwgMTkyLCAyNDEsIDQ0LCA5MywgOTksIDExNCwgMjQxLCA0NCwgOTMsIDk5LCAxOTIsIDIxMywgMjM5LCA5MywgOTksIAotICAgIDExNCwgMjEzLCAyMzksIDkzLCA5OSwgMTkyLCAyMTUsIDIxMSwgMjQ4LCAxNTcsIDI0MSwgNDQsIDkzLCA5OSwgMTE0LCAKLSAgICAyMTUsIDIxMSwgMjQ4LCAxNTcsIDI0MSwgNDQsIDkzLCA5OSwgMTkyLCAyMTUsIDIxMSwgMjQ4LCAxNTcsIDIxMywgMjM5LCAKLSAgICA5MywgOTksIDExNCwgMjE1LCAyMTEsIDI0OCwgMTU3LCAyMTMsIDIzOSwgOTMsIDk5LCAxOTIsIDIyNCwgMjQsIDI0OCwgCi0gICAgMTU3LCAyNDEsIDQ0LCA5MywgOTksIDExNCwgMjI0LCAyNCwgMjQ4LCAxNTcsIDI0MSwgNDQsIDkzLCA5OSwgMTkyLCAyMjQsIAotICAgIDI0LCAyNDgsIDE1NywgMjEzLCAyMzksIDkzLCA5OSwgMTE0LCAyMjQsIDI0LCAyNDgsIDE1NywgMjEzLCAyMzksIDkzLCA5OSwgCi0gICAgMTkyLCAxMjQsIDIyLCAyMjIsIDI1MSwgOTMsIDk5LCAxMjQsIDE5MiwgMjIsIDQ0LCAyNDEsIDIyMSwgOTMsIDk5LCAxMjQsIAotICAgIDExNCwgMjIsIDQ0LCAyMzIsIDIzMCwgOTMsIDk5LCAxMTQsIDEyNCwgMjIsIDIyMiwgMjUxLCA5MywgOTksIDE5MiwgMTI0LCAKLSAgICAyMiwgMjMzLCA0NiwgOTMsIDk5LCAxMjQsIDE5MiwgMjIsIDQzLCAyNDEsIDIyMSwgOTMsIDk5LCAxMjQsIDExNCwgMjIsIAotICAgIDQzLCAyMzIsIDIzMCwgOTMsIDk5LCAxMTQsIDEyNCwgMjIsIDIzMywgNDYsIDkzLCA5OSwgMTkyLCAxMjAsIDIyLCAyMjIsIAotICAgIDI1MSwgOTMsIDk5LCAxMjAsIDE5MiwgMjIsIDQ0LCAyNDEsIDIyMSwgOTMsIDk5LCAxMjAsIDExNCwgMjIsIDQ0LCAyMzIsIAotICAgIDIzMCwgOTMsIDk5LCAxMTQsIDEyMCwgMjIsIDIyMiwgMjUxLCA5MywgOTksIDE5MiwgMTIwLCAyMiwgMjMzLCA0NiwgOTMsIAotICAgIDk5LCAxMjAsIDE5MiwgMjIsIDQzLCAyNDEsIDIyMSwgOTMsIDk5LCAxMjAsIDExNCwgMjIsIDQzLCAyMzIsIDIzMCwgOTMsIAotICAgIDk5LCAxMTQsIDEyMCwgMjIsIDIzMywgNDYsIDkzLCA5OSwgMTkyLCA2NywgMjIsIDIyMiwgMjUxLCA5MywgOTksIDY3LCAKLSAgICAxOTIsIDIyLCA0NCwgMjQxLCAyMjEsIDkzLCA5OSwgMTIwLCAxMTQsIDIyLCA0NCwgMTI0LCAyMzIsIDIzMCwgOTMsIDk5LCAKLSAgICAxMjQsIDExNCwgMjIsIDQ0LCAxMjAsIDIzMiwgMjMwLCA5MywgOTksIDY3LCAxMTQsIDIyLCA0NCwgMjMyLCAyMzAsIDkzLCAKLSAgICA5OSwgMTI0LCAxOTIsIDIyLCA0NCwgMTIwLCAyNDEsIDIyMSwgOTMsIDk5LCAxMjAsIDE5MiwgMjIsIDQ0LCAxMjQsIDI0MSwgCi0gICAgMjIxLCA5MywgOTksIDExNCwgNjcsIDIyLCAyMjIsIDI1MSwgOTMsIDk5LCAxOTIsIDY3LCAyMiwgMjMzLCA0NiwgOTMsIDk5LCAKLSAgICA2NywgMTkyLCAyMiwgNDMsIDI0MSwgMjIxLCA5MywgOTksIDEyMCwgMTE0LCAyMiwgNDMsIDEyNCwgMjMyLCAyMzAsIDkzLCAKLSAgICA5OSwgMTI0LCAxMTQsIDIyLCA0MywgMTIwLCAyMzIsIDIzMCwgOTMsIDk5LCA2NywgMTE0LCAyMiwgNDMsIDIzMiwgMjMwLCAKLSAgICA5MywgOTksIDEyNCwgMTkyLCAyMiwgNDMsIDEyMCwgMjQxLCAyMjEsIDkzLCA5OSwgMTIwLCAxOTIsIDIyLCA0MywgMTI0LCAKLSAgICAyNDEsIDIyMSwgOTMsIDk5LCAxMTQsIDY3LCAyMiwgMjMzLCA0NiwgOTMsIDk5LCAxOTIsIDEyNCwgMjIsIDI0MSwgNDQsIAotICAgIDkzLCA5OSwgNDMsIDExNCwgMjIsIDQ0LCAxMjQsIDIzMiwgMjMwLCA5MywgOTksIDQ0LCAxMTQsIDIyLCA0MywgMTI0LCAKLSAgICAyMzIsIDIzMCwgOTMsIDk5LCAxMjQsIDE5MiwgMjIsIDIwMywgMjQxLCAyMjEsIDkzLCA5OSwgMTI0LCAxMTQsIDIyLCAyMDMsIAotICAgIDIzMiwgMjMwLCA5MywgOTksIDQ0LCAxOTIsIDIyLCA0MywgMTI0LCAyNDEsIDIyMSwgOTMsIDk5LCA0MywgMTkyLCAyMiwgCi0gICAgNDQsIDEyNCwgMjQxLCAyMjEsIDkzLCA5OSwgMTE0LCAxMjQsIDIyLCAyNDEsIDQ0LCA5MywgOTksIDE5MiwgMTIwLCAyMiwgCi0gICAgMjQxLCA0NCwgOTMsIDk5LCA0MywgMTE0LCAyMiwgNDQsIDEyMCwgMjMyLCAyMzAsIDkzLCA5OSwgNDQsIDExNCwgMjIsIDQzLCAKLSAgICAxMjAsIDIzMiwgMjMwLCA5MywgOTksIDEyMCwgMTkyLCAyMiwgMjAzLCAyNDEsIDIyMSwgOTMsIDk5LCAxMjAsIDExNCwgMjIsIAotICAgIDIwMywgMjMyLCAyMzAsIDkzLCA5OSwgNDQsIDE5MiwgMjIsIDQzLCAxMjAsIDI0MSwgMjIxLCA5MywgOTksIDQzLCAxOTIsIAotICAgIDIyLCA0NCwgMTIwLCAyNDEsIDIyMSwgOTMsIDk5LCAxMTQsIDEyMCwgMjIsIDI0MSwgNDQsIDkzLCA5OSwgMTkyLCA2NywgCi0gICAgMjIsIDI0MSwgNDQsIDkzLCA5OSwgNDMsIDExNCwgMjIsIDQ0LCA2NywgMjMyLCAyMzAsIDkzLCA5OSwgNDQsIDExNCwgMjIsIAotICAgIDQzLCA2NywgMjMyLCAyMzAsIDkzLCA5OSwgNjcsIDE5MiwgMjIsIDIwMywgMjQxLCAyMjEsIDkzLCA5OSwgMTIwLCAxMTQsIAotICAgIDIyLCAxMjQsIDIwMywgMjMyLCAyMzAsIDkzLCA5OSwgMTI0LCAxMTQsIDIyLCAxMjAsIDIwMywgMjMyLCAyMzAsIDkzLCA5OSwgCi0gICAgNjcsIDExNCwgMjIsIDIwMywgMjMyLCAyMzAsIDkzLCA5OSwgNDMsIDEyMCwgMTE0LCAyMiwgNDQsIDEyNCwgMjMyLCAyMzAsIAotICAgIDkzLCA5OSwgNDQsIDEyMCwgMTE0LCAyMiwgNDMsIDEyNCwgMjMyLCAyMzAsIDkzLCA5OSwgNDMsIDEyNCwgMTE0LCAyMiwgCi0gICAgNDQsIDEyMCwgMjMyLCAyMzAsIDkzLCA5OSwgNDQsIDEyNCwgMTE0LCAyMiwgNDMsIDEyMCwgMjMyLCAyMzAsIDkzLCA5OSwgCi0gICAgMTI0LCAxOTIsIDIyLCAxMjAsIDIwMywgMjQxLCAyMjEsIDkzLCA5OSwgMTIwLCAxOTIsIDIyLCAxMjQsIDIwMywgMjQxLCAKLSAgICAyMjEsIDkzLCA5OSwgNDQsIDE5MiwgMjIsIDQzLCA2NywgMjQxLCAyMjEsIDkzLCA5OSwgNDMsIDE5MiwgMjIsIDQ0LCA2NywgCi0gICAgMjQxLCAyMjEsIDkzLCA5OSwgMTE0LCA2NywgMjIsIDI0MSwgNDQsIDkzLCA5OSwgMTkyLCA1MiwgMjQ4LCAxNTcsIDI0MSwgCi0gICAgNDQsIDkzLCA5OSwgMTE0LCA1MiwgMjQ4LCAxNTcsIDI0MSwgNDQsIDkzLCA5OSwgMTkyLCA1MiwgMjQ4LCAxNTcsIDIxMywgCi0gICAgMjM5LCA5MywgOTksIDExNCwgNTIsIDI0OCwgMTU3LCAyMTMsIDIzOSwgOTMsIDk5LCA1MiwgMjQxLCA0NCwgOTMsIDk5LCAKLSAgICA1MiwgMjEzLCAyMzksIDkzLCA5OSwgMTI0LCAyMTksIDE1NSwgMjIsIDQ0LCAyNDYsIDExMywgOTMsIDk5LCAxMjQsIDUyLCAKLSAgICAyMiwgNDQsIDIxOSwgMTU0LCA5MywgOTksIDUyLCAxMjQsIDIyLCAyMjIsIDI1MSwgOTMsIDk5LCAxMjQsIDIxOSwgMTU1LCAKLSAgICAyMiwgNDMsIDI0NiwgMTEzLCA5MywgOTksIDEyNCwgNTIsIDIyLCA0MywgMjE5LCAxNTQsIDkzLCA5OSwgNTIsIDEyNCwgMjIsIAotICAgIDIzMywgNDYsIDkzLCA5OSwgMTIwLCAyMTksIDE1NSwgMjIsIDQ0LCAyNDYsIDExMywgOTMsIDk5LCAxMjAsIDUyLCAyMiwgCi0gICAgNDQsIDIxOSwgMTU0LCA5MywgOTksIDUyLCAxMjAsIDIyLCAyMjIsIDI1MSwgOTMsIDk5LCAxMjAsIDIxOSwgMTU1LCAyMiwgCi0gICAgNDMsIDI0NiwgMTEzLCA5MywgOTksIDEyMCwgNTIsIDIyLCA0MywgMjE5LCAxNTQsIDkzLCA5OSwgNTIsIDEyMCwgMjIsIAotICAgIDIzMywgNDYsIDkzLCA5OSwgNjcsIDIxOSwgMTU1LCAyMiwgNDQsIDI0NiwgMTEzLCA5MywgOTksIDY3LCA1MiwgMjIsIDQ0LCAKLSAgICAyMTksIDE1NCwgOTMsIDk5LCA1MiwgNjcsIDIyLCAyMjIsIDI1MSwgOTMsIDk5LCA2NywgMjE5LCAxNTUsIDIyLCA0MywgCi0gICAgMjQ2LCAxMTMsIDkzLCA5OSwgNjcsIDUyLCAyMiwgNDMsIDIxOSwgMTU0LCA5MywgOTksIDUyLCA2NywgMjIsIDIzMywgNDYsIAotICAgIDkzLCA5OSwgMTI0LCAyMTksIDE1NSwgMjIsIDIwMywgMjQ2LCAxMTMsIDkzLCA5OSwgMTI0LCA1MiwgMjIsIDIwMywgMjE5LCAKLSAgICAxNTQsIDkzLCA5OSwgNTIsIDEyNCwgMjIsIDI0MSwgNDQsIDkzLCA5OSwgMTIwLCAyMTksIDE1NSwgMjIsIDIwMywgMjQ2LCAKLSAgICAxMTMsIDkzLCA5OSwgMTIwLCA1MiwgMjIsIDIwMywgMjE5LCAxNTQsIDkzLCA5OSwgNTIsIDEyMCwgMjIsIDI0MSwgNDQsIAotICAgIDkzLCA5OSwgNjcsIDIxOSwgMTU1LCAyMiwgMjAzLCAyNDYsIDExMywgOTMsIDk5LCA2NywgNTIsIDIyLCAyMDMsIDIxOSwgCi0gICAgMTU0LCA5MywgOTksIDUyLCA2NywgMjIsIDI0MSwgNDQsIDkzLCA5OSwgMTkyLCAyNTQsIDI2LCAxMjQsIDIyLCAyMjIsIAotICAgIDI1MSwgOTMsIDk5LCAxOTIsIDI1NCwgMjYsIDEyNCwgMjIsIDIzMywgNDYsIDkzLCA5OSwgMTkyLCAyNTQsIDI2LCAxMjAsIAotICAgIDIyLCAyMzMsIDQ2LCA5MywgOTksIDE5MiwgMjU0LCAyNiwgMTIwLCAyMiwgMjIyLCAyNTEsIDkzLCA5OSwgMTkyLCAyNDcsIAotICAgIDI1NSwgMjE0LCAxNjAsIDQ0LCAyMTYsIDQyLCAyMzIsIDEwOCwgMjMzLCA0NiwgOTMsIDk5LCAxOTIsIDI0NywgMjU1LCAKLSAgICAyMTQsIDE2MCwgNDMsIDIxNiwgNDIsIDIzMiwgMTA4LCAyMjIsIDI1MSwgOTMsIDk5LCAxOTIsIDI0NywgMjU1LCAyNDksIAotICAgIDEzMCwgOTMsIDk5LCAxOTIsIDIzMywgNDYsIDkzLCA5OSwgMTkyLCAyMTQsIDE2MywgOTMsIDk5LCAxOTIsIDIyMiwgMjUxLCAKLSAgICA5MywgOTksIDE5MiwgMjQ2LCAxMDYsIDkzLCA5OSwgMTE0LCAyMzMsIDQ2LCA5MywgOTksIDExNCwgMjE0LCAxNjMsIDkzLCAKLSAgICA5OSwgMTE0LCAyMjIsIDI1MSwgOTMsIDk5LCAxMTQsIDI0NiwgMTA2LCA5MywgOTksIDE5MiwgNDMsIDIyLCAxMTQsIDIyMiwgCi0gICAgMjUxLCA5MywgOTksIDE5MiwgMTIwLCAyMiwgMTE0LCAyNDYsIDEwNiwgOTMsIDk5LCAxMTQsIDQzLCAyMiwgMTkyLCAyMjIsIAotICAgIDI1MSwgOTMsIDk5LCAxMTQsIDEyMCwgMjIsIDE5MiwgMjQ2LCAxMDYsIDIxNCwgMTYwLCAxNjMsIDI1MSwgMjEzLCAyMzIsIAotICAgIDEwOCwgMTIzLCAyNDUsIDE4OSwgMjUxLCAyMTMsIDIzMiwgMTA4LCAxMjMsIDIyNCwgMjIsIDI1MSwgMjEzLCAyMzIsIDEwOCwgCi0gICAgMTM0LCAyNDUsIDE4NywgMjUxLCAyMTMsIDIzMiwgMTA4LCAxNjMsIDI1MSwgMjEzLCAyMzIsIDEwOCwgMjQ0LCA4MSwgMjQ1LCAKLSAgICAxODcsIDI1MSwgMjEzLCAyMzIsIDEwOCwgMTM0LCAyMjQsIDIwLCAyNTEsIDIxMywgMjMyLCAxMDgsIDIyMCwgMTIyLCAyNDUsIAotICAgIDE4NywgMjUxLCAyMTMsIDI0MywgMjI5LCAyNTEsIDIxMywgNDMsIDIyMCwgMTIyLCAyNDUsIDE4NywgMjUxLCAyMTMsIDQzLCAKLSAgICAxMzQsIDIyNCwgMjAsIDI1MSwgMjEzLCA0MywgMjQ0LCA4MSwgMjQ1LCAxODcsIDI1MSwgMjEzLCA0MywgMTYzLCAyNTEsIAotICAgIDIxMywgNDMsIDEzNCwgMjQ1LCAxODcsIDI1MSwgMjEzLCA0MywgMTIzLCAyMjQsIDIyLCAyNTEsIDIxMywgNDMsIDEyMywgCi0gICAgMjQ1LCAxODksIDI1MSwgMjEzLCA0NCwgMTYzLCAyNTEsIDIxMywgMTkyLCAyMjAsIDkyLCAyMzEsIDgyLCAyMjAsIDkyLCAKLSAgICAyNDgsIDE2MiwgMjIwLCA5MiwgMjE0LCAxNjAsIDEyMywgMjQ1LCAxODksIDI1MSwgMjEzLCA0NCwgMTIzLCAyNDUsIDE4OSwgCi0gICAgMjUxLCAyMTMsIDIyNCwgMjYsIDIzMiwgMTA4LCAyMzMsIDQ2LCAyMjQsIDI2LCAyMzIsIDEwOCwgMjIyLCAyNTEsIDIyNCwgCi0gICAgMjYsIDIxNCwgMTYwLCAyMzMsIDQ2LCAyMjQsIDI2LCAyMTQsIDE2MCwgNDMsIDIyLCAyMzIsIDEwOCwgNDMsIDIyLCAyMzIsIAotICAgIDEwOCwgMjIyLCAyNTEsIDIyNCwgMjYsIDIxNCwgMTYwLCA0MywgMjIsIDIzMiwgMTA4LCAyMjIsIDI1MSwgMjI0LCAyNiwgCi0gICAgMjE0LCAxNjAsIDQzLCAyMiwgMjE0LCAxNjAsIDQ0LCAyMiwgMjMyLCAxMDgsIDIzMywgNDYsIDIyNCwgMjYsIDIxNCwgMTYwLCAKLSAgICA0MywgMjIsIDIxNCwgMTYwLCA0NCwgMjIsIDIzMiwgMTA4LCAyMjIsIDI1MSwgMjI0LCAyNiwgMjE0LCAxNjAsIDIyMiwgCi0gICAgMjUxLCAyMjQsIDI2LCAyMTQsIDE2MCwgNDQsIDIyLCAyMzIsIDEwOCwgMjMzLCA0NiwgMjI0LCAyNiwgMjE0LCAxNjAsIDQ0LCAKLSAgICAyMiwgMjMyLCAxMDgsIDQzLCAyMiwgMjMyLCAxMDgsIDIyMiwgMjUxLCA4NSwgMjE4LCAyMzQsIDcxLCAyMTgsIDIzNCwgNzEsIAotICAgIDQyLCAyLCAyMjIsIDE4MywgMjQ5LCAxNTksIDcxLCA0MiwgMjQ5LCAxODcsIDg1LCA0LCAyMTgsIDIzNCwgNDIsIDIsIDIwMywgCi0gICAgMjQ0LCAxMDUsIDQyLCAyLCA2NywgMjQ0LCAxMDUsIDQyLCAyLCAyMjYsIDE0NCwgMjQ5LCAxMjYsIDI0NCwgMTA1LCA0MiwgCi0gICAgMiwgMjE0LCAxNjAsIDQzLCAyMTYsIDQyLCAyMzIsIDEwOCwgNDQsIDI0NCwgMTA1LCA0MiwgMiwgMjE0LCAxNjAsIDQ0LCAKLSAgICAyMTYsIDQyLCAyMzIsIDEwOCwgNDMsIDI0NCwgMTA1LCA0MiwgMiwgMjQ3LCAyNTUsIDI0OSwgMTI2LCAyNDQsIDEwNSwgODUsIAotICAgIDQsIDIxOCwgMjM0LCA3MSwgNCwgMjE4LCAyMzQsIDg1LCAyMjMsIDExNiwgNzEsIDIyMywgMTE2LCA4NSwgNjcsIDIyMywgCi0gICAgMTE2LCA3MSwgNjcsIDIyMywgMTE2LCA4NSwgMjI2LCA2LCA3MSwgMjI2LCA2LCA4NSwgMjE0LCAxNjIsIDIxNSwgMjI1LCAKLSAgICA3MSwgMjE0LCAxNjIsIDIxNSwgMjI1LCA4NSwgMjE0LCAxNjIsIDQsIDIxNSwgMjI1LCA3MSwgMjE0LCAxNjIsIDQsIDIxNSwgCi0gICAgMjI1LCA4NSwgMjIyLCAyNDcsIDIxNSwgMjI1LCA3MSwgMjIyLCAyNDcsIDIxNSwgMjI1LCA4NSwgMjIyLCAyNDcsIDQsIAotICAgIDIxNSwgMjI1LCA3MSwgMjIyLCAyNDcsIDQsIDIxNSwgMjI1LCA4NSwgMjIyLCAyNDcsIDIyNSwgOCwgNzEsIDIyMiwgMjQ3LCAKLSAgICAyMjUsIDgsIDg1LCAyNDYsIDEwNSwgMjE1LCAyMjUsIDcxLCAyNDYsIDEwNSwgMjE1LCAyMjUsIDg1LCAyNDYsIDEwNSwgNCwgCi0gICAgMjE1LCAyMjUsIDcxLCAyNDYsIDEwNSwgNCwgMjE1LCAyMjUsIDg1LCAyMzMsIDQyLCAyMTUsIDIyNSwgNzEsIDIzMywgNDIsIAotICAgIDIxNSwgMjI1LCA4NSwgMjMzLCA0MiwgNCwgMjE1LCAyMjUsIDcxLCAyMzMsIDQyLCA0LCAyMTUsIDIyNSwgODUsIDIzMywgCi0gICAgNDIsIDIyNSwgOCwgNzEsIDIzMywgNDIsIDIyNSwgOCwgODUsIDI0NywgMjQ4LCA3MSwgMjQ3LCAyNDgsIDcxLCAyNDcsIAotICAgIDI0OSwgMjQ5LCAxODcsIDg1LCA0LCAyNDcsIDI0OCwgMjQ0LCA4OSwgMjMyLCAxMDQsIDcxLCAyNTAsIDM1LCAyNDYsIDExOCwgCi0gICAgMjUwLCAzNSwgMjUwLCAzNiwgMiwgNjcsIDI0NCwgMTA1LCAyNTEsIDExMSwgODUsIDI1MCwgMzUsIDI1MCwgMzYsIDIsIDQzLCAKLSAgICAxNjMsIDI1MSwgMjIxLCAyNTAsIDM2LCAyLCA0NCwgMTYzLCAyNTEsIDIyMSwgMjUwLCAzNiwgMiwgMjMyLCAxMDgsIDE2MywgCi0gICAgMjUxLCAyMjEsIDI1MCwgMzYsIDIsIDIxNCwgMTYwLCAxNjMsIDI1MSwgMjIxLCAyNTAsIDM2LCAyLCAyMTQsIDE2MCwgNDQsIAotICAgIDIyNCwgMjYsIDI1MSwgMjIxLCAyNTAsIDM2LCAyLCAyNTQsIDE1NSwgMjUxLCA4OCwgMjE0LCAxNjAsIDQzLCAyMjQsIDI2LCAKLSAgICAyNTEsIDIyMSwgNDMsIDE2MywgODUsIDI1MCwgMzUsIDQ0LCAxNjMsIDg1LCAyNTAsIDM1LCAyMzUsIDE5NCwgMjUxLCAxMTMsIAotICAgIDIzNSwgMTk0LCA3MSwgMjUwLCAzNSwgMjE0LCAxNjAsIDE2MywgMjM1LCAxOTQsIDcxLCAyNTAsIDM1LCAyMzIsIDEwOCwgCi0gICAgMTYzLCAyMzUsIDE5NCwgNzEsIDI1MCwgMzUsIDIxNCwgMTYwLCA0MywgMjI0LCAyNiwgMjUwLCAzMywgMjU0LCAyNSwgMjE0LCAKLSAgICAxNjAsIDQ0LCAyMjQsIDI2LCAyNTAsIDMzLCAyNTQsIDI1LCAyMzIsIDEwOCwgNDQsIDIyNCwgMjYsIDI1MCwgMzMsIDI1NCwgCi0gICAgMjUsIDIzMiwgMTA4LCA0MywgMjI0LCAyNiwgMjUwLCAzMywgMjU0LCAyNSwgMjE0LCAxNjAsIDE2MywgMjUwLCAzNSwgMjMyLCAKLSAgICAxMDgsIDE2MywgMjUwLCAzNSwgODUsIDIzMiwgMTA4LCA0NCwgMjE1LCAyMjUsIDg1LCAyMzIsIDEwOCwgNDMsIDIxNSwgCi0gICAgMjI1LCA4NSwgMjE0LCAxNjAsIDQzLCAyMTUsIDIyNSwgODUsIDIxNCwgMTYwLCA0NCwgMjE1LCAyMjUsIDcxLCAyNTEsIAotICAgIDExMywgNDIsIDIsIDQzLCAxNjMsIDI1MSwgMjIxLCA0MiwgMiwgNDQsIDE2MywgMjUxLCAyMjEsIDQyLCAyLCAyMTQsIDE2MCwgCi0gICAgNDMsIDI0NywgMjU1LCAxNjMsIDI1MSwgMjIxLCA0MiwgMiwgMjMyLCAxMDgsIDQ0LCAyNDcsIDI1NSwgMTYzLCAyNTEsIAotICAgIDIyMSwgNzEsIDQyLCAyLCA2NywgMjUxLCAyMzIsIDIzMiwgMjEzLCA3MSwgMjE0LCAxNjIsIDIxNSwgMjI2LCAyLCAyNDcsIAotICAgIDEyMCwgMjE0LCAxNjIsIDIxNSwgMjI2LCAyLCA0MywgMTYzLCAyNTEsIDIyMSwgMjE0LCAxNjIsIDIxNSwgMjI2LCAyLCA0NCwgCi0gICAgMTYzLCAyNTEsIDIyMSwgMjMzLCA4NSwgMjUwLCAzNSwgNzEsIDQyLCAyLCAyMTQsIDE2MCwgNDMsIDIyNCwgMjUsIDcxLCAKLSAgICA0MiwgMiwgMjMyLCAxMDgsIDQzLCAyMjQsIDI1LCA3MSwgNDIsIDIsIDIzMiwgMTA4LCA0NCwgMjI0LCAyNSwgNzEsIDQyLCAKLSAgICAyLCAyMTQsIDE2MCwgNDQsIDIyNCwgMjUsIDcxLCAyNTAsIDM2LCAyLCAyMTQsIDE2MCwgNDMsIDIyNCwgMjUsIDcxLCAyNTAsIAotICAgIDM2LCAyLCAyMzIsIDEwOCwgNDMsIDIyNCwgMjUsIDcxLCAyNTAsIDM2LCAyLCAyMzIsIDEwOCwgNDQsIDIyNCwgMjUsIDcxLCAKLSAgICAyNTAsIDM2LCAyLCAyMTQsIDE2MCwgNDQsIDIyNCwgMjUsIDIxNCwgMTYwLCA0MywgMjE1LCAyMjUsIDIxNCwgMTYwLCA0NCwgCi0gICAgMjE1LCAyMjUsIDIzMiwgMTA4LCA0MywgMjE1LCAyMjUsIDcxLCAyMzEsIDgyLCAyMTgsIDIzNCwgODUsIDIzMSwgODIsIAotICAgIDIxOCwgMjM0LCA3MSwgMjMxLCA4MiwgNCwgMjE4LCAyMzQsIDg1LCAyMzEsIDgyLCA0LCAyMTgsIDIzNCwgMjMyLCAxMDgsIAotICAgIDQ0LCAyMTUsIDIyNSwgODUsIDIxOCwgMzgsIDIsIDIyMywgMTMyLCAyNDksIDI0NywgMjE0LCAxOTQsIDIxOSwgNjAsIDI0OSwgCi0gICAgMjIyLCA4NSwgMjE4LCAxNTYsIDcxLCAyMTgsIDE1NiwgMjMyLCAyMjgsIDIxNiwgMTMyLCAyMTgsIDM3LCAyNTMsIDIzNCwgCi0gICAgMjI4LCA3MSwgMjQ4LCAzOCwgMjI4LCA3MSwgMjQ5LCAxOTUsIDIyNiwgMTYzLCA4NSwgMjE3LCAwLCA3MSwgMjE3LCAwLCAKLSAgICAyNTIsIDE1NiwgMjUxLCAxNjMsIDI1MiwgMTU2LCA5MywgMiwgMjUwLCAxMjksIDI1MiwgMTU2LCA5MywgMiwgMjExLCAxNzgsIAotICAgIDIyMSwgMjU0LCAyMTQsIDE5NSwgMiwgMjIzLCAxNjAsIDI0NiwgODQsIDI0MCwgMjQzLCAyNTIsIDIyLCA3MSwgMjIwLCAyLCAKLSAgICAyMjUsIDEwMSwgODUsIDIyMCwgMiwgMjI1LCAxMDEsIDIyMCwgODcsIDIyMywgNDksIDIyMiwgMTg3LCAyNDQsIDU1LCAyNDEsIAotICAgIDIyOCwgMjUxLCAxMTMsIDg1LCA0MywgMjI1LCA3LCAyMzUsIDI0MiwgODUsIDQ0LCAyMjUsIDcsIDIzNSwgMjQyLCA3MSwgCi0gICAgNDMsIDIyNSwgNywgMjM1LCAyNDIsIDcxLCAxMjAsIDIyNSwgNywgMjM1LCAyNDIsIDcxLCA0NCwgMjI1LCA3LCAyMzUsIAotICAgIDI0MiwgNzEsIDEyNCwgMjI1LCA3LCAyMzUsIDI0MiwgMjE5LCAxMDEsIDIyLCAyNDksIDEyOSwgMjUwLCAyMTksIDUwLCAKLSAgICAyMjMsIDE3MiwgNTAsIDI1MSwgMjM5LCA1MCwgMjUxLCAyNSwgMjU0LCAxMDIsIDIyNiwgMTQ1LCAyNDksIDEzMCwgMjUwLCAKLSAgICAxMTEsIDIyMywgMzcsIDI0OSwgMTMxLCA2NCwgMjMyLCAxMTgsIDI0OSwgMTMxLCA2NCwgMjM1LCAxMTYsIDIxOCwgMTU3LCAKLSAgICAyMiwgMjQ5LCAxMzYsIDI0NCwgMTY4LCA4NywgMjU0LCAyNDgsIDIyMCwgODksIDI0MiwgMjIsIDIyLCAyMTksIDE4OSwgCi0gICAgMjI1LCAyMjAsIDg3LCAyMTAsIDI1NCwgMjExLCA2OSwgMjE1LCAyMTUsIDMxLCAyNDEsIDIyMywgMjE1LCAyMTUsIDMxLCAKLSAgICAyMzMsIDEwNywgMjE1LCAyMTUsIDMxLCAyNDQsIDk2LCAyMTUsIDIxNSwgMzEsIDIxNiwgMTMzLCAyMTUsIDIxNSwgMzEsIAotICAgIDIxMSwgMjM5LCAyMTUsIDIxNSwgMzEsIDIxMiwgNDAsIDIxNSwgMjE1LCAzMSwgMjMwLCAxMTUsIDIxNSwgMjE1LCAzMSwgCi0gICAgMjQ1LCAyMjMsIDIxMiwgMSwgNjQsIDI0OCwgMTgsIDcxLCAyNDMsIDIzOSwgMjQ0LCAxOTAsIDcxLCAyMTksIDc0LCAyNDQsIAotICAgIDE5MCwgODUsIDIxOSwgNzQsIDI0NCwgMTkwLCA3MSwgMjE4LCAzOCwgMiwgMjIzLCAxMzIsIDI0NCwgOTIsIDIyNCwgMjIsIAotICAgIDIzMCwgMTI4LCAyMzMsIDgwLCAyMjQsIDIyLCAyMzAsIDEyOCwgMjMxLCA1NCwgMjQ0LCAxMzgsIDUwLCAyNDUsIDIyMywgCi0gICAgMjMxLCAxOTAsIDUwLCAyMzUsIDM4LCAyMjEsIDIyMCwgMjE0LCAxNDUsIDIyOSwgOTMsIDIyNSwgMjAsIDI1NCwgMTIsIAotICAgIDIxNywgNDAsIDI0MywgNTIsIDI1MSwgMywgMjMzLCAxOSwgMjEzLCAxNTAsIDIzMiwgMjM4LCAyMjEsIDE5MSwgMjIyLCAxOSwgCi0gICAgMjUwLCAyNDgsIDI1NCwgNDIsIDIyNSwgNTIsIDcxLCAyNTAsIDExNywgMjM0LCA3OCwgNzEsIDI1MCwgMTE3LCAyMjQsIDE0LCAKLSAgICA3MSwgMjUwLCAxMTcsIDIyMiwgMTk1LCA3MSwgMjUwLCAxMTcsIDI1MSwgMjMxLCA3MSwgMjUwLCAxMTcsIDIzNCwgMzAsIAotICAgIDcxLCAyNTAsIDExNywgMjI1LCAyMzEsIDg1LCAyNTAsIDExNywgMjM0LCA3OCwgODUsIDI1MCwgMTE3LCAyMjQsIDE0LCA4NSwgCi0gICAgMjUwLCAxMTcsIDIyMiwgMTk1LCA4NSwgMjUwLCAxMTcsIDI1MSwgMjMxLCA4NSwgMjUwLCAxMTcsIDIzNCwgMzAsIDg1LCAKLSAgICAyNTAsIDExNywgMjI1LCAyMzEsIDg1LCAyMTksIDE2LCAyMTgsIDUwLCA3MSwgMjQxLCAyMjgsIDIxOCwgNTAsIDcxLCAyNDcsIAotICAgIDI0OSwgMjE4LCA1MCwgODUsIDI0OSwgMjQ1LCAyMTgsIDUwLCA3MSwgMjE5LCAxNiwgMjE4LCA1MCwgODUsIDI0MSwgMjI4LCAKLSAgICAyMTgsIDUwLCA4NSwgMjQ3LCAyNDksIDIxOCwgNTAsIDcxLCAyNDksIDI0NSwgMjE4LCA1MCwgMjQwLCAyNDMsIDIxOCwgCi0gICAgMjM4LCAyMjQsIDIyLCAyMjgsIDQ3LCAyNDUsIDE4OSwgMjI4LCA0NywgMjUyLCA3MywgMjQ1LCAxODksIDIyOCwgNDIsIAotICAgIDI1MiwgNzMsIDIxOSwgMTE4LCAyMjgsIDQyLCAyMzAsIDU3LCAyNDQsIDY2LCA1MCwgMjMwLCA1NywgMjI5LCAxODgsIDUwLCAKLSAgICAyMzAsIDU3LCAyMjAsIDc2LCA1MCwgMjEyLCA5LCAxODgsIDI0OSwgMTMwLCAyNDUsIDIyMCwgMTg4LCAyNDksIDEzMCwgCi0gICAgMjE0LCAxNzEsIDIyMywgMTEyLCA4NywgMjIzLCAxMTIsIDE2LCAzMSwgMjE1LCA0OCwgMjI1LCAzNCwgMjIzLCAxMTIsIDE2LCAKLSAgICAzMSwgMjE1LCA0NywgMjI1LCAzNCwgMjIzLCAxMTIsIDE2LCAzMSwgMjE1LCA0NiwgMjI1LCAzNCwgMjIzLCAxMTIsIDE2LCAKLSAgICAzMSwgMjE1LCA0NSwgMjI1LCAzNCwgMjIzLCAxMTIsIDE2LCAzMSwgMjE1LCA0NCwgMjI1LCAzNCwgMjIzLCAxMTIsIDE2LCAKLSAgICAzMSwgMjE1LCA0MywgMjI1LCAzNCwgMjIzLCAxMTIsIDE2LCAzMSwgMjE1LCA0MiwgMjI1LCAzNCwgMjIzLCAxMTIsIDE2LCAKLSAgICAzMSwgMjQzLCA1MCwgMjMxLCAxMzgsIDg1LCAyMTQsIDE3MSwgMjIzLCAxMTIsIDg3LCAyMjMsIDExMywgMjI2LCAyMCwgODcsIAotICAgIDIyNSwgMjUyLCAyMjYsIDIwLCA4NywgMjI1LCAxNzQsIDIyNiwgMjAsIDUwLCAyMTEsIDI1NSwgODcsIDI0NywgMjQxLCAKLSAgICAyNDQsIDE4OSwgMjQ3LCAyNDEsIDI0NCwgMTg4LCAyNDcsIDI0MSwgMjQ0LCAxODcsIDI0NywgMjQxLCAyNDQsIDE4NiwgCi0gICAgMjQ3LCAyNDEsIDI0NCwgMTg1LCAyNDcsIDI0MSwgMjQ0LCAxODQsIDcxLCAyNTAsIDM2LCAyLCA1OSwgMjIyLCAyNTEsIDcxLCAKLSAgICAyNTAsIDM2LCAyLCAxMTMsIDI0NywgMTE4LCA4NSwgMjUwLCAzNiwgMiwgNzEsIDU5LCAyMjIsIDI1MSwgODUsIDI1MCwgMzYsIAotICAgIDIsIDExMywgNzEsIDI0NywgMTE4LCAyMzAsIDE0MiwgMzEsIDIxMSwgNjksIDIzMCwgMTQyLCAzMSwgMjEwLCAyNTMsIDI0NywgCi0gICAgMjI0LCAzMSwgMjQyLCAxMzEsIDIxMSwgNjksIDI0NywgMjI0LCAzMSwgMjMzLCAxMywgMjEwLCAyNTMsIDI0NywgMjI0LCAKLSAgICAzMSwgMjMzLCAxMywgMjExLCA2OSwgMjQ3LCAyMjQsIDMxLCAyNDIsIDEzMSwgMjEwLCAyNTMsIDcxLCAyNDQsIDczLCA4NSwgCi0gICAgMjQ0LCA3MywgMjQyLCAyMiwgMjIsIDIyNSwgMTA0LCAyNTQsIDEyMCwgMjQ5LCAxMjgsIDIxNywgMjM1LCAyMTgsIDE2NCwgCi0gICAgNjQsIDI1NCwgMjI2LCAyMjEsIDIwNiwgMjU0LCAxNjksIDI0NCwgNTEsIDI0MywgNjAsIDIxOCwgMTY0LCA2NCwgMjQxLCAKLSAgICAyMDIsIDI1MywgMTk5LCA4NywgMjQ0LCA2MiwgMjI2LCAxMjYsIDcxLCAyMTgsIDE1NiwgMTM0LCAyMzIsIDIwOCwgMjQ5LCAKLSAgICAxNzUsIDIyMiwgMjUxLCAxMzQsIDIzMiwgMjA4LCAyNDksIDE3NSwgMjMzLCA0NiwgMjEyLCA1MCwgNTAsIDEyNSwgMjEzLCAKLSAgICAxMzAsIDUwLCAyNDYsIDExMCwgMjQ0LCAxMzgsIDUwLCAyNDYsIDExMCwgMjMxLCAxOTAsIDUwLCAyMzUsIDIwMywgMjQ0LCAKLSAgICAxMzgsIDIyLCAyMzEsIDE5MCwgNTAsIDIzMSwgMTkwLCAyMiwgMjQ0LCAxMzgsIDUwLCAyMzEsIDE5MCwgMiwgMjE4LCAxMDMsIAotICAgIDUwLCAyMzEsIDE5MCwgMiwgMjE4LCAxMDMsIDIyLCAyMzEsIDE5MCwgMjIsIDI0NCwgMTM4LCA1MCwgNjcsIDIzMSwgMTkwLCAKLSAgICAyLCAyMTgsIDEwMywgNTAsIDIwMywgMjMxLCAxOTAsIDIsIDIxOCwgMTAzLCA1MCwgMjMxLCA4MiwgNzEsIDI1MCwgMzUsIAotICAgIDIzMSwgODIsIDg1LCAyNTAsIDM1LCAyMzEsIDgyLCA0LCA3MSwgMjUwLCAzNSwgMjMxLCAxNTMsIDg3LCAyNDcsIDE2NywgCi0gICAgODcsIDIxNCwgMTY5LCAyMjUsIDI1MSwgODcsIDI0OSwgMjMxLCAyNDMsIDIyNCwgMjE0LCAxNDEsIDIyOSwgODgsIDI1MCwgCi0gICAgMTYxLCAyMjYsIDYxLCAyMzUsIDQ0LCAyMTMsIDE4NSwgMjUwLCA5MywgODUsIDIzMCwgMTI5LCAyMzIsIDIyNSwgMjIwLCAKLSAgICAxMTIsIDIyMCwgMTQ3LCAyMjQsIDUsIDIyMCwgMTMwLCAyMTksIDU1LCAyNTIsIDE1OSwgMjUyLCAxMjYsIDkyLCAyMzQsIAotICAgIDEzOCwgNzEsIDI0NiwgOTMsIDIzMSwgMTg1LCA3MSwgMjQ2LCA5MywgMjM0LCA3OCwgODUsIDI0NiwgOTMsIDIzMSwgMTg1LCAKLSAgICA4NSwgMjQ2LCA5MywgMjM0LCA3OCwgMjE5LCA2MSwgMjExLCAyMzAsIDIxOSwgNjQsIDIxOCwgMzgsIDI1MiwgNTEsIDI0OSwgCi0gICAgMjQ3LCAyMjMsIDE1OSwgODUsIDIxOSwgNjAsIDIxNiwgMTM0LCAyNDksIDI0OCwgMjIsIDIyMywgMTU5LCAyMTUsIDk0LCAKLSAgICA3MSwgMjIwLCAyLCAyMjUsIDEwMSwgMjE1LCA5NCwgODUsIDIyMCwgMiwgMjI1LCAxMDEsIDcxLCAyNDcsIDI0OSwgMjM2LCAKLSAgICAwLCAyMTgsIDIzNCwgMjQ5LCAxMjUsIDIzMywgOTEsIDI0NywgMTkzLCAyNTAsIDI0NCwgMjI2LCAxNjYsIDIyNSwgMTA0LCAKLSAgICAyNTAsIDI0NSwgMjE5LCA4OCwgMjQxLCAyMTIsIDIsIDcxLCAyNDksIDEzMCwgMzcsIDI0OSwgMTI1LCAyMzMsIDkxLCAyNTAsIAotICAgIDE1MywgMjI4LCA3NSwgMjQ1LCAxMjQsIDI1NCwgMTQxLCAyMjYsIDE5MSwgNDMsIDIxMiwgMjYsIDIxNSwgMjUxLCA4NSwgCi0gICAgMjE1LCA1NSwgNDMsIDIxMiwgMjYsIDIxNSwgMjUxLCA3MSwgMjE1LCA1NSwgNDMsIDIxMiwgMjYsIDIxNSwgMjUxLCA4NSwgCi0gICAgNDMsIDIzMywgOTIsIDIzMSwgNTMsIDcxLCA0MywgMjMzLCA5MiwgMjMxLCA1MywgMjQ2LCA4OSwgMjE5LCA4MiwgNTAsIAotICAgIDExNCwgNzEsIDI0NiwgMTA1LCAyMTUsIDIyNSwgNDMsIDI1MCwgMCwgMjQ1LCAxMjQsIDkyLCAyMjEsIDI1NCwgMjQ0LCAKLSAgICAxNzUsIDI0NywgMjU1LCAyMzYsIDAsIDcxLCAyNTAsIDM2LCAyMzYsIDAsIDg1LCAyMTgsIDIzNCwgODUsIDIxNSwgMTkyLCAKLSAgICAyMjMsIDYwLCA0MywgMjQ1LCAxMjMsIDIyMywgNjAsIDQzLCAyNDUsIDEyMiwgMjUzLCAyMTEsIDE2LCAzMSwgMjE0LCAxNDUsIAotICAgIDExNCwgMjUwLCAzNiwgMiwgMjE4LCAxMDMsIDIyLCAxMTMsIDE3MCwgNDgsIDIyNSwgMTg5LCAyMjIsIDI0OCwgMjM1LCAKLSAgICAyMDUsIDIyNSwgMTg5LCAyMzMsIDQzLCAyMzUsIDIwNSwgMjI1LCAxODksIDIzNSwgMTkzLCAyMjUsIDE4OSwgODUsIDI0OSwgCi0gICAgMTMxLCAyMjYsIDE5NywgMjIwLCAyOSwgMjIwLCAxNywgMjE5LCAyMjksIDI1MCwgNjEsIDI1MCwgMjI2LCAyNDEsIDE1NywgCi0gICAgMjE5LCAxMjYsIDI0MywgNjEsIDIxMSwgMjMwLCAyNDAsIDIyMCwgMjQzLCA2MSwgMiwgMjQyLCAxMiwgMjMxLCAxNzMsIDE2LCAKLSAgICAzMSwgMjMyLCAyMjksIDIzMCwgMTE1LCAyMTQsIDE5NSwgMjI2LCAxOTcsIDI0MiwgMTIyLCAyNDQsIDEyLCAyNDQsIDc0LCAKLSAgICAyMzYsIDAsIDI0MSwgNTksIDI0NCwgMTI5LCAyMjIsIDE0LCA0MiwgMjQ0LCAxMSwgMjQ5LCAxNTksIDIxOSwgMTA0LCAyNDAsIAotICAgIDExMiwgMjE5LCAxMDcsIDIyNSwgMTY4LCAyLCAyNTIsIDE1OSwgMjE2LCAyNDIsIDIzNSwgMTMxLCAyNTIsIDE0NiwgODcsIAotICAgIDI0MSwgMjMxLCAyNDIsIDEzMywgODcsIDI0MywgMjMyLCAyMjQsIDE0MiwgMjQ5LCAxMDMsIDIyNiwgMTk3LCA4NSwgMjE4LCAKLSAgICAyMzQsIDcxLCAyNDQsIDc0LCAyLCAyMDMsIDIzMCwgMjI0LCA4NSwgMjE4LCAxMDQsIDIxNCwgMTYwLCAyNTEsIDIxNywgCi0gICAgMjIxLCAxOTMsIDg1LCAyMjEsIDE5MywgMjMyLCAxMDgsIDI1MSwgMjE3LCAyMjEsIDE5MywgNzEsIDIyMSwgMTkzLCA3MSwgCi0gICAgMTE0LCAyNTAsIDEzMCwgNzgsIDIxNywgMSwgMjMyLCAxNTQsIDUwLCAyMTcsIDUzLCAyNDYsIDg4LCAyNTQsIDE5MSwgMjQ1LCAKLSAgICAxMTksIDIyMywgMTU3LCAyNDQsIDg1LCAyMjMsIDE1NywgMjQyLCAxNSwgMjEzLCAxNzQsIDI0MiwgMTUsIDIxMSwgMTk4LCAKLSAgICAyNDIsIDE1LCAyMzIsIDEwOCwgNDQsIDIyNSwgMTk4LCAyMjUsIDE5OCwgMjE0LCAxNjAsIDQ0LCAyMjUsIDE5OCwgNzEsIAotICAgIDIyOCwgMjMwLCA4NSwgMjI4LCAyMzAsIDI1MCwgMTMwLCA3OCwgMTE0LCAyNTAsIDEzMCwgNzgsIDIzMCwgODQsIDIxMSwgCi0gICAgMTc4LCAxMTQsIDIzMCwgODQsIDIxMSwgMTc4LCAyNTIsIDE1NiwgMjExLCAxNzgsIDExNCwgMjUyLCAxNTYsIDIxMSwgMTc4LCAKLSAgICAyMjYsIDEyNiwgMjYsIDI0OSwgMTMwLCAxMTQsIDI2LCAyNDksIDEzMCwgMjA0LCAyNTAsIDE3NSwgMjQ5LCAxMzAsIDExNCwgCi0gICAgMjA0LCAyNTAsIDE3NSwgMjQ5LCAxMzAsIDcsIDI0OSwgMTMwLCAyMjAsIDkxLCA3MSwgNywgMjQ5LCAxMzAsIDIyNiwgMTI2LCAKLSAgICA3LCAyNDksIDEzMCwgMjMxLCAxODcsIDI0OSwgMTMwLCAyMTgsIDE1NywgNjQsIDI0OCwgMTQ5LCAyNDQsIDExLCAyMTcsIAotICAgIDE1LCAyNTMsIDIxNiwgMjQ0LCAxMSwgMjUyLCAxNTcsIDI1MywgMjE2LCAxMTQsIDI0NCwgMTEsIDI1MiwgMTU3LCAyNTMsIAotICAgIDIxNiwgMjQ0LCAxMSwgMjQ5LCAyNDMsIDI1MywgMjE2LCA4NSwgMjQ0LCAxMSwgMjI1LCA5LCAyMTgsIDE1NiwgNzEsIDI0NCwgCi0gICAgMTEsIDIyNSwgOSwgMjE4LCAxNTYsIDIxOSwgMTEsIDIxOCwgMTExLCAyMjYsIDEyNiwgNzEsIDIxOCwgMTU2LCAzNywgNzEsIAotICAgIDIxOCwgMTU2LCAyMDQsIDI1MCwgMTc1LCA4NSwgMjE4LCAxNTYsIDg1LCAyNTAsIDE3NSwgNzEsIDIxOCwgMTU2LCAyMjYsIAotICAgIDEyNiwgODUsIDIxOCwgMTU2LCAxMTQsIDIyNiwgMTI2LCA4NSwgMjE4LCAxNTYsIDIyNSwgNjAsIDIxOCwgMTU2LCAyMjAsIAotICAgIDkxLCA3MSwgMjE4LCAxNTYsIDExNCwgMjUzLCAyMTYsIDIwNCwgMjUwLCAxNzUsIDI1MywgMjE2LCAyNDUsIDE5MywgMjE4LCAKLSAgICAyNDQsIDI1MywgMjE2LCAyNDUsIDE5MywgMjI1LCA5LCA4NSwgMjE4LCAxNTYsIDI0NSwgMTkzLCAyMjUsIDksIDIyNSwgNjAsIAotICAgIDIxOCwgMTU2LCAyMTksIDEyNSwgMjI1LCA5LCA4NSwgMjE4LCAxNTYsIDI0NSwgMTkzLCAyMjUsIDksIDIyMywgMTE0LCA4NSwgCi0gICAgMjE4LCAxNTYsIDExNCwgMjQ1LCAxOTMsIDIyNSwgOSwgMjIzLCAxMTQsIDg1LCAyMTgsIDE1NiwgMjE1LCA3NywgMjI1LCA5LCAKLSAgICA4NSwgMjE4LCAxNTYsIDIxOSwgMTIwLCAyMjUsIDksIDI1MywgMjE2LCAyMTcsIDE1LCAyNTMsIDIxNiwgMjA0LCAyNTAsIAotICAgIDE3NSwgMjE3LCAxNSwgMjUzLCAyMTYsIDExNCwgMjE3LCAxNSwgMjUzLCAyMTYsIDIxOSwgMTI1LCAyMjUsIDE1NywgODUsIAotICAgIDIyLCA3MSwgMjQ0LCA1NCwgODUsIDI0NCwgNTQsIDcxLCAyNDQsIDU0LCAyNDUsIDE5MywgMjI1LCAxNTcsIDIyNiwgMTI2LCAKLSAgICA4NSwgMjQ0LCA1NCwgMzcsIDIwNCwgMjUwLCAxNzUsIDI0NSwgMTkzLCAyMjUsIDksIDIxOCwgMTU2LCAxMTQsIDIxNywgMTUsIAotICAgIDIyNSwgNjAsIDI1MywgMjE2LCAyMTksIDYyLCAyMTYsIDEwNSwgMjE1LCAyMTgsIDIxOSwgNjIsIDExNCwgMjUwLCAxMTQsIAotICAgIDIxOSwgNjIsIDIxOSwgMTMsIDExNCwgMjE5LCAxMywgMjUyLCAxNTcsIDI1MywgMjE2LCAyNDUsIDE5MywgMjE3LCAxNSwgCi0gICAgMjI0LCAxNzEsIDI1MywgMjE2LCAxMTQsIDI0NSwgMTkzLCAyMTcsIDE1LCAyMjQsIDE3MSwgMjUzLCAyMTYsIDI0OSwgMTMxLCAKLSAgICA3OCwgMjIwLCA5MSwgNzEsIDI1MCwgMzUsIDE1MiwgOTIsIDI0OSwgMTMxLCA3OCwgMjMyLCAxMDgsIDQ0LCAyNDYsIDg2LCAKLSAgICA3MSwgMjE4LCAyMzQsIDIxNCwgMTYwLCA0NCwgMjQ2LCA4NiwgNzEsIDIxOCwgMjM0LCAyMzIsIDEwOCwgNDQsIDIyMCwgOTEsIAotICAgIDcxLCAyMTgsIDIzNCwgMjE0LCAxNjAsIDQ0LCAyMjAsIDkxLCA3MSwgMjE4LCAyMzQsIDg1LCAyMjQsIDEzLCAxNjQsIDIyNiwgCi0gICAgMTQ3LCA3MSwgMjI0LCAxMywgMTY0LCAyMjYsIDE0NywgNzEsIDI0NSwgMzEsIDE2NCwgMjI2LCAxNDcsIDg1LCAyNDcsIAotICAgIDI0OSwgMjMwLCAxODIsIDcxLCAyMTEsIDE3OCwgMTE0LCAyNDUsIDMxLCAxNjQsIDg3LCAxOTIsIDY3LCAxMzAsIDIzMSwgCi0gICAgODIsIDY3LCAxMzAsIDExNCwgNjcsIDEzMCwgMTE0LCAyMTksIDE1NSwgMjE1LCA5NCwgMjQ5LCAyMjAsIDIyMywgMjU0LCAKLSAgICAxNjQsIDIyNiwgMTQ3LCAxMTQsIDIxOSwgMTU1LCAyNDksIDIyMCwgMjIzLCAyNTQsIDE2NCwgMjI2LCAxNDcsIDExNCwgNTIsIAotICAgIDIxNSwgOTQsIDI0OSwgMjIwLCAyMjMsIDI1NCwgMTY0LCAyMjYsIDE0NywgMTE0LCA1MiwgMjQ5LCAyMjAsIDIyMywgMjU0LCAKLSAgICAxNjQsIDIyNiwgMTQ3LCAxMTQsIDEyMSwgMjE5LCAxNTUsIDI0OSwgMjIwLCAyMjMsIDI1NCwgMTY0LCAyMjYsIDE0NywgCi0gICAgMTE0LCAxMjEsIDUyLCAyNDksIDIyMCwgMjIzLCAyNTQsIDE2NCwgMjI2LCAxNDcsIDI0OSwgOTEsIDIxOCwgMTQwLCAyMjYsIAotICAgIDE1LCA1LCAyMjYsIDE0NywgMTE0LCAyNDUsIDMxLCAxNjQsIDIyNiwgMTQ3LCAxMTQsIDI0MSwgMjI4LCAyNDUsIDMxLCAKLSAgICAxNjQsIDIyNiwgMTQ3LCAxMTQsIDg1LCAyNDEsIDIyNywgMjIyLCAxODcsIDExNCwgODUsIDI0MSwgMjI4LCAyNTEsIDExMywgCi0gICAgMjQ0LCA1NSwgMjQxLCAyMjcsIDIyMiwgMTg3LCAyNDQsIDU1LCAyNDEsIDIyOCwgMjUxLCAxMTMsIDIzMSwgODIsIDQzLCAKLSAgICAyMjYsIDQsIDIyNiwgMTQ3LCAyMzEsIDgyLCA0NCwgMjI2LCA0LCAyMjYsIDE0NywgMjMxLCA4MiwgMjQ0LCA2MywgNDMsIAotICAgIDIyNiwgNCwgMjI2LCAxNDcsIDIzMSwgODIsIDI0NCwgNjMsIDQ0LCAyMjYsIDQsIDIyNiwgMTQ3LCAyMzEsIDgyLCAyMzMsIAotICAgIDQyLCAyNTQsIDExMCwgMjUxLCAxNTgsIDIyNiwgMTQ3LCAyMzEsIDgyLCAyMjIsIDI0NywgMjU0LCAxMTAsIDI1MSwgMTU4LCAKLSAgICAyMjYsIDE0NywgMTE0LCAyMzMsIDQyLCAyNTQsIDExMCwgMjIzLCAyNTQsIDE2NCwgMjI2LCAxNDcsIDExNCwgMjIyLCAyNDcsIAotICAgIDI1NCwgMTEwLCAyMjMsIDI1NCwgMTY0LCAyMjYsIDE0NywgMTE0LCAyMzMsIDQyLCAyNTQsIDExMCwgMjUxLCAxNTgsIDIyNiwgCi0gICAgMTQ3LCAxMTQsIDIyMiwgMjQ3LCAyNTQsIDExMCwgMjUxLCAxNTgsIDIyNiwgMTQ3LCAxOTIsIDQzLCAyMTYsIDYsIDIyMCwgCi0gICAgNTMsIDI1MSwgMTU4LCAyMjYsIDE0NywgMTkyLCA0NCwgMjE2LCA2LCAyMjAsIDUzLCAyNTEsIDE1OCwgMjI2LCAxNDcsIAotICAgIDIzMSwgODIsIDQzLCAyNDksIDk5LCAyNTEsIDE1OCwgMjI2LCAxNDcsIDIzMSwgODIsIDQ0LCAyNDksIDk5LCAyNTEsIDE1OCwgCi0gICAgMjI2LCAxNDcsIDI0NywgMjA0LCAxNTIsIDM3LCAyMSwgMTEwLCAyNDcsIDIwNCwgMTUyLCAzNywgMjEsIDEwNSwgMjQ3LCAKLSAgICAyMDQsIDE1MiwgMzcsIDIxLCAxNTgsIDI0NywgMjA0LCAxNTIsIDM3LCAyMSwgMTYxLCAyNDcsIDIwNCwgMTUyLCAzNywgMjEsIAotICAgIDE4OSwgMjQ3LCAyMDQsIDE1MiwgMzcsIDIxLCAxOTQsIDI0NywgMjA0LCAxNTIsIDM3LCAyMSwgMTk4LCAyNDcsIDIwNCwgCi0gICAgMTUyLCAzNywgMjEsIDE5NSwgMjQ3LCAyMDQsIDE1MiwgMzcsIDIxLCAyMDAsIDI0NywgMjA0LCAxNTIsIDM3LCA1NCwgMjE2LCAKLSAgICAyNDcsIDI0NywgMjA0LCAzNywgMzUsIDIxLCAxMTAsIDI0NywgMjA0LCAzNywgMzUsIDIxLCAxMDUsIDI0NywgMjA0LCAzNywgCi0gICAgMzUsIDIxLCAxNTgsIDI0NywgMjA0LCAzNywgMzUsIDIxLCAxNjEsIDI0NywgMjA0LCAzNywgMzUsIDIxLCAxODksIDI0NywgCi0gICAgMjA0LCAzNywgMzUsIDIxLCAxOTQsIDI0NywgMjA0LCAzNywgMzUsIDIxLCAxOTgsIDI0NywgMjA0LCAzNywgMzUsIDIxLCAKLSAgICAxOTUsIDI0NywgMjA0LCAzNywgMzUsIDIxLCAyMDAsIDI0NywgMjA0LCAzNywgMzUsIDU0LCAyMTYsIDI0NywgMjQ3LCAyMDQsIAotICAgIDE1MiwgMzcsIDM1LCAyMSwgMTEwLCAyNDcsIDIwNCwgMTUyLCAzNywgMzUsIDIxLCAxMDUsIDI0NywgMjA0LCAxNTIsIDM3LCAKLSAgICAzNSwgMjEsIDE1OCwgMjQ3LCAyMDQsIDE1MiwgMzcsIDM1LCAyMSwgMTYxLCAyNDcsIDIwNCwgMTUyLCAzNywgMzUsIDIxLCAKLSAgICAxODksIDI0NywgMjA0LCAxNTIsIDM3LCAzNSwgMjEsIDE5NCwgMjQ3LCAyMDQsIDE1MiwgMzcsIDM1LCAyMSwgMTk4LCAyNDcsIAotICAgIDIwNCwgMTUyLCAzNywgMzUsIDIxLCAxOTUsIDI0NywgMjA0LCAxNTIsIDM3LCAzNSwgMjEsIDIwMCwgMjQ3LCAyMDQsIDE1MiwgCi0gICAgMzcsIDM1LCA1NCwgMjE2LCAyNDcsIDExNCwgMjExLCAyNDYsIDk3LCA3NCwgMTE0LCA5NiwgNTAsIDExNCwgMjMwLCAxODIsIAotICAgIDUwLCAxMTQsIDI0NywgMTY5LCA1MCwgMTE0LCAyMTksIDI4LCAyNDUsIDIyMCwgNzQsIDExNCwgOTcsIDc0LCAxMTQsIDIyOCwgCi0gICAgNTYsIDI0NSwgMjIwLCA3NCwgMjQ2LCA5OCwgMjI1LCAxMSwgOTcsIDc0LCAxMTQsIDIyMiwgMTg0LCA5NywgNzQsIDIxNSwgCi0gICAgMjI0LCA5NywgNzQsIDExNCwgMjE1LCAyMjQsIDk3LCA3NCwgMjQ4LCAxNTUsIDIxNSwgMjI0LCA5NywgNzQsIDExNCwgMjQ4LCAKLSAgICAxNTUsIDIxNSwgMjI0LCA5NywgNzQsIDg1LCA5NywgNzQsIDIxNiwgMTQ0LCAyMTYsIDEyLCA5NywgMjUzLCAyNDksIDIxNiwgCi0gICAgMTQ0LCAyNTEsIDE3MywgOTcsIDI1MywgMjQ5LCA4NSwgOTcsIDI1MywgMjQ5LCAxMTQsIDg1LCAyNDksIDkxLCAyNDYsIAotICAgIDEwNCwgMjIsIDk3LCA3NCwgMTE0LCA4NSwgMjQ5LCA5MSwgMjE0LCAxNTMsIDIyLCA5NywgNzQsIDIxOCwgMjMxLCA4NSwgCi0gICAgOTcsIDc0LCAxMTQsIDI0OSwgMjA2LCA4NSwgOTcsIDc0LCAyMjIsIDI0NiwgNzEsIDk3LCA3NCwgMjMzLCA0MSwgNzEsIDk3LCAKLSAgICA3NCwgMjUyLCAxODMsIDIyMCwgOTEsIDcxLCA5NywgNzQsIDI0MywgMjQxLCAyMjAsIDkxLCA3MSwgOTcsIDc0LCAxMTQsIAotICAgIDIzMiwgMTA4LCAyMjIsIDI0NSwgNzEsIDk3LCA3NCwgMTE0LCAyMTQsIDE2MCwgMjIyLCAyNDUsIDcxLCA5NywgNzQsIDIyOCwgCi0gICAgNDksIDIzMiwgMTA4LCAyMjIsIDI0NSwgNzEsIDk3LCA3NCwgMjQ5LCA5OSwgMjMyLCAxMjMsIDIyOCwgNDksIDIxNCwgMTYwLCAKLSAgICAyMjIsIDI0NSwgNzEsIDk3LCA3NCwgMzcsIDExNCwgNzEsIDk3LCA3NCwgMjExLCAyNTIsIDk3LCA3NCwgMjUxLCAyMjAsIAotICAgIDIxOSwgMjgsIDI0NSwgMjIwLCA3NCwgMjUxLCAyMjAsIDk3LCA3NCwgMjUxLCAyMjAsIDIyOCwgNTYsIDI0NSwgMjIwLCA3NCwgCi0gICAgMTE0LCAyNTEsIDIyMCwgMjE5LCAyOCwgMjQ1LCAyMjAsIDc0LCAxMTQsIDI1MSwgMjIwLCA5NywgNzQsIDExNCwgMjUxLCAKLSAgICAyMjAsIDIyOCwgNTYsIDI0NSwgMjIwLCA3NCwgMjE3LCAxNywgOTcsIDc0LCAxMTQsIDIxNywgMTYsIDk3LCA3NCwgMjEyLCAKLSAgICAxOCwgOTcsIDc0LCAxMTQsIDIxMiwgMTgsIDk3LCA3NCwgMjI2LCAxNzIsIDk3LCA3NCwgNTIsIDI0OSwgOTksIDIzMiwgCi0gICAgMTIzLCAxMzQsIDI0NywgMjE0LCAyNTQsIDEwOSwgNzEsIDIxNSwgMjI2LCAyNDksIDE4NywgNCwgNzEsIDIxNSwgMjI1LCAKLSAgICAyMjUsIDE3MSwgMjA0LCAyMTgsIDYzLCAyMDQsIDIxOCwgMjEsIDQzLCAyMjIsIDkwLCAyNTIsIDE3MywgMjQ4LCA2MCwgNDQsIAotICAgIDIyMiwgOTAsIDI1MiwgMTczLCAyNDgsIDYwLCAxNzcsIDIsIDU5LCAyMzUsIDIxNSwgMjIzLCA1MCwgMjE5LCA0NywgMjI0LCAKLSAgICAyMDEsIDIxOCwgNjMsIDIxOCwgMjIsIDIyNCwgMjAxLCAyMTksIDQ2LCA2NywgMjUyLCAxNDEsIDIsIDIwMywgOTEsIDExLCAKLSAgICAyMjIsIDIyOCwgMjQ3LCAyNTQsIDE5OSwgMjQ3LCAxNjgsIDExLCAyNDQsIDE3NSwgMjQ3LCAyNTQsIDkyLCAyMzIsIDE0NiwgCi0gICAgMjU0LCAxMTgsIDkyLCAyMzIsIDE0NiwgMjI2LCAxNTgsIDcxLCAyNDcsIDI0OSwgMiwgMjUwLCAxNzMsIDI0NywgMTIwLCAKLSAgICAyMiwgMiwgMjQ3LCAxMjAsIDI0NSwgMTcwLCA2NCwgMjI2LCAxNzAsIDIxNCwgMTUyLCAyMzIsIDEwOCwgNDQsIDI0OSwgCi0gICAgMTYxLCAyLCAyNDcsIDEyMCwgMjE0LCAxNjAsIDQzLCAyNDksIDE2MSwgMiwgMjQ3LCAxMjAsIDQzLCAyMjYsIDEyOCwgMjM1LCAKLSAgICA2NiwgNDQsIDIyNiwgMTI4LCAyMzUsIDY2LCAyNDMsIDIyOSwgMjI2LCAxMjgsIDIzNSwgNjYsIDIzMywgODUsIDEyMCwgCi0gICAgMjE3LCA4NywgMjMzLCA4NSwgMTI0LCAyMTcsIDg3LCA0MywgMjIsIDQ0LCA1MiwgMjE1LCA5MywgNDMsIDIyLCA0NCwgMjE3LCAKLSAgICA4NywgNDMsIDIzMCwgODcsIDE5OSwgNDQsIDIxNywgODcsIDE5OSwgNDMsIDIxNywgODcsIDEyMCwgMjE3LCA4OCwgMiwgCi0gICAgMjUwLCAzNiwgNDgsIDIzMiwgMTA1LCAyNDcsIDE3MywgMjUxLCA3OCwgMjAzLCAyMjIsIDEzMywgNzEsIDI0OSwgMjA1LCAKLSAgICAyNDcsIDI0OCwgNzEsIDI0OSwgMjA1LCAyNDcsIDI0OSwgMiwgMTQwLCAyMTYsIDExNCwgNzEsIDI0OSwgMjA1LCAyNDcsIAotICAgIDI0OSwgMiwgOTcsIDIxNiwgMTE0LCA3MSwgNDIsIDIsIDE0MCwgMjE2LCAxMTQsIDcxLCA0MiwgMiwgOTcsIDIxNiwgMTE0LCAKLSAgICAxMSwgNDMsIDcxLCA0MiwgMTI3LCAxMSwgNDQsIDcxLCA0MiwgMTI3LCAxMSwgNDMsIDI1NCwgMTEwLCAxMjcsIDExLCA0NCwgCi0gICAgMjU0LCAxMTAsIDEyNywgMTEsIDQzLCA1MiwgMjU0LCAxMTAsIDEyNywgMTEsIDQ0LCA1MiwgMjU0LCAxMTAsIDEyNywgMTEsIAotICAgIDQzLCA3MSwgMjE2LCA2LCAyMjAsIDUzLCAxMjcsIDExLCA0NCwgNzEsIDIxNiwgNiwgMjIwLCA1MywgMTI3LCAxMSwgNDMsIAotICAgIDI0NCwgNjMsIDIyNiwgMywgMTEsIDQ0LCAyNDQsIDYzLCAyMjYsIDMsIDIxNCwgMTUzLCAyMjQsIDI0LCA3NCwgMjQ2LCAKLSAgICAxMDQsIDIyNCwgMjQsIDc0LCAyNTQsIDg4LCAyNDMsIDk4LCAyNTAsIDM2LCA3NCwgMjUwLCAyLCAyNDMsIDk4LCAyNTAsIAotICAgIDM2LCA3NCwgNDQsIDgwLCAyLCAzNywgMjI1LCAyMiwgMTk5LCAxNDAsIDc0LCAxOTksIDk3LCA3NCwgMTk5LCA0MywgNDQsIAotICAgIDc0LCAxOTksIDE0MCwgNTIsIDc0LCAxOTksIDk3LCA1MiwgNzQsIDE5OSwgNDMsIDQ0LCA1MiwgNzQsIDE5OSwgMTQwLCA4MCwgCi0gICAgMjQzLCAyNDMsIDEzMCwgMTk5LCA5NywgODAsIDI0MywgMjQzLCAxMzAsIDE5OSwgMTQwLCA1MiwgODAsIDI0MywgMjQzLCAKLSAgICAxMzAsIDE5OSwgOTcsIDUyLCA4MCwgMjQzLCAyNDMsIDEzMCwgMTk5LCA5NywgMjE4LCAyMzAsIDc0LCA0NiwgNDcsIDI1MSwgCi0gICAgMjE1LCA0NiwgNDcsIDI0NywgMTE3LCA0NiwgNDcsIDI0NiwgMjQ1LCA0NiwgNDcsIDI0NywgMTE2LCA0NiwgNDcsIDI0NiwgCi0gICAgMTgxLCA0NiwgNDcsIDI0NywgNTIsIDQ2LCA0NywgMjQ2LCAyNDQsIDQ2LCA0NywgMjQ3LCAxMTUsIDQ2LCA0NywgMjQ2LCAKLSAgICAxNDksIDQ2LCA0NywgMjQ3LCAyMCwgNDYsIDQ3LCAyNDYsIDIxMiwgNDYsIDQ3LCAyNDcsIDgzLCA0NiwgNDcsIDI0NiwgCi0gICAgMTgwLCA0NiwgNDcsIDI0NywgNTEsIDQ2LCA0NywgMjQ2LCAyNDMsIDQ2LCA0NywgMjQ3LCAxMTQsIDQ2LCA0NywgMjQ2LCAKLSAgICAxMzMsIDQ2LCA0NywgMjQ3LCA0LCA0NiwgNDcsIDI0NiwgMTk2LCA0NiwgNDcsIDI0NywgNjcsIDQ2LCA0NywgMjQ2LCAxNjQsIAotICAgIDQ2LCA0NywgMjQ3LCAzNSwgNDYsIDQ3LCAyNDYsIDIyNywgNDYsIDQ3LCAyNDcsIDk4LCA0NiwgNDcsIDI0NiwgMTQ4LCA0NiwgCi0gICAgNDcsIDI0NywgMTksIDQ2LCA0NywgMjQ2LCAyMTEsIDQ2LCA0NywgMjQ3LCA4MiwgNDYsIDQ3LCAyNDYsIDE3OSwgNDYsIDQ3LCAKLSAgICAyNDcsIDUwLCA0NiwgNDcsIDI0NiwgMjQyLCA0NiwgNDcsIDI0NywgMTEzLCA0NiwgNDcsIDI0NiwgMTI1LCA0NiwgNDcsIAotICAgIDI0NiwgMjUyLCA0NiwgNDcsIDI0NiwgMTg4LCA0NiwgNDcsIDI0NywgNTksIDQ2LCA0NywgMjQ2LCAxNTYsIDQ2LCA0NywgCi0gICAgMjQ3LCAyNywgNDYsIDQ3LCAyNDYsIDIxOSwgNDYsIDQ3LCAyNDcsIDkwLCA0NiwgNDcsIDI0NiwgMTQwLCA0NiwgNDcsIAotICAgIDI0NywgMTEsIDQ2LCA0NywgMjQ2LCAyMDMsIDQ2LCA0NywgMjQ3LCA3NCwgNDYsIDQ3LCAyNDYsIDE3MSwgNDYsIDQ3LCAKLSAgICAyNDcsIDQyLCA0NiwgNDcsIDI0NiwgMjM0LCA0NiwgNDcsIDI0NywgMTA1LCA0NiwgNDcsIDI0NiwgMTMyLCA0NiwgNDcsIAotICAgIDI0NywgMywgNDYsIDQ3LCAyNDYsIDE5NSwgNDYsIDQ3LCAyNDcsIDY2LCA0NiwgNDcsIDI0NiwgMTYzLCA0NiwgNDcsIDI0NywgCi0gICAgMzQsIDQ2LCA0NywgMjQ2LCAyMjYsIDQ2LCA0NywgMjQ3LCA5NywgNDYsIDQ3LCAyNDYsIDE0NywgNDYsIDQ3LCAyNDcsIDE4LCAKLSAgICA0NiwgNDcsIDI0NiwgMjEwLCA0NiwgNDcsIDI0NywgODEsIDQ2LCA0NywgMjQ2LCAxNzgsIDQ2LCA0NywgMjQ3LCA0OSwgNDYsIAotICAgIDQ3LCAyNDYsIDI0MSwgNDYsIDQ3LCAyNDcsIDExMiwgNDYsIDQ3LCAyNDYsIDEyMSwgNDYsIDQ3LCAyNDYsIDI0OCwgNDYsIAotICAgIDQ3LCAyNDYsIDE4NCwgNDYsIDQ3LCAyNDcsIDU1LCA0NiwgNDcsIDI0NiwgMTUyLCA0NiwgNDcsIDI0NywgMjMsIDQ2LCA0NywgCi0gICAgMjQ2LCAyMTUsIDQ2LCA0NywgMjQ3LCA4NiwgNDYsIDQ3LCAyNDYsIDEzNiwgNDYsIDQ3LCAyNDcsIDcsIDQ2LCA0NywgMjQ2LCAKLSAgICAxOTksIDQ2LCA0NywgMjQ3LCA3MCwgNDYsIDQ3LCAyNDYsIDE2NywgNDYsIDQ3LCAyNDcsIDM4LCA0NiwgNDcsIDI0NiwgCi0gICAgMjMwLCA0NiwgNDcsIDI0NywgMTAxLCA0NiwgNDcsIDI0NiwgMTI4LCA0NiwgNDcsIDI0NiwgMjU1LCA0NiwgNDcsIDI0NiwgCi0gICAgMTkxLCA0NiwgNDcsIDI0NywgNjIsIDQ2LCA0NywgMjQ2LCAxNTksIDQ2LCA0NywgMjQ3LCAzMCwgNDYsIDQ3LCAyNDYsIAotICAgIDIyMiwgNDYsIDQ3LCAyNDcsIDkzLCA0NiwgNDcsIDI0NiwgMTQzLCA0NiwgNDcsIDI0NywgMTQsIDQ2LCA0NywgMjQ2LCAKLSAgICAyMDYsIDQ2LCA0NywgMjQ3LCA3NywgNDYsIDQ3LCAyNDYsIDE3NCwgNDYsIDQ3LCAyNDcsIDQ1LCA0NiwgNDcsIDI0NiwgCi0gICAgMjM3LCA0NiwgNDcsIDI0NywgMTA4LCA0NiwgNDcsIDI0NiwgMTI0LCA0NiwgNDcsIDI0NiwgMjUxLCA0NiwgNDcsIDI0NiwgCi0gICAgMTg3LCA0NiwgNDcsIDI0NywgNTgsIDQ2LCA0NywgMjQ2LCAxNTUsIDQ2LCA0NywgMjQ3LCAyNiwgNDYsIDQ3LCAyNDYsIAotICAgIDIxOCwgNDYsIDQ3LCAyNDcsIDg5LCA0NiwgNDcsIDI0NiwgMTM5LCA0NiwgNDcsIDI0NywgMTAsIDQ2LCA0NywgMjQ2LCAKLSAgICAyMDIsIDQ2LCA0NywgMjQ3LCA3MywgNDYsIDQ3LCAyNDYsIDE3MCwgNDYsIDQ3LCAyNDcsIDQxLCA0NiwgNDcsIDI0NiwgCi0gICAgMjMzLCA0NiwgNDcsIDI0NywgMTA0LCA0NiwgNDcsIDI0NiwgMTMxLCA0NiwgNDcsIDI0NywgMiwgNDYsIDQ3LCAyNDYsIAotICAgIDE5NCwgNDYsIDQ3LCAyNDcsIDY1LCA0NiwgNDcsIDI0NiwgMTYyLCA0NiwgNDcsIDI0NywgMzMsIDQ2LCA0NywgMjQ2LCAKLSAgICAyMjUsIDQ2LCA0NywgMjQ3LCA5NiwgNDYsIDQ3LCAyNDYsIDE0NiwgNDYsIDQ3LCAyNDcsIDE3LCA0NiwgNDcsIDI0NiwgCi0gICAgMjA5LCA0NiwgNDcsIDI0NywgODAsIDQ2LCA0NywgMjQ2LCAxNzcsIDQ2LCA0NywgMjQ3LCA0OCwgNDYsIDQ3LCAyNDYsIAotICAgIDI0MCwgNDYsIDQ3LCAyNDcsIDExMSwgNDYsIDQ3LCAyNDYsIDExOSwgNDYsIDQ3LCAyNDYsIDI0NiwgNDYsIDQ3LCAyNDYsIAotICAgIDE4MiwgNDYsIDQ3LCAyNDcsIDUzLCA0NiwgNDcsIDI0NiwgMTUwLCA0NiwgNDcsIDI0NywgMjEsIDQ2LCA0NywgMjQ2LCAKLSAgICAyMTMsIDQ2LCA0NywgMjQ3LCA4NCwgNDYsIDQ3LCAyNDYsIDEzNCwgNDYsIDQ3LCAyNDcsIDUsIDQ2LCA0NywgMjQ2LCAxOTcsIAotICAgIDQ2LCA0NywgMjQ3LCA2OCwgNDYsIDQ3LCAyNDYsIDE2NSwgNDYsIDQ3LCAyNDcsIDM2LCA0NiwgNDcsIDI0NiwgMjI4LCA0NiwgCi0gICAgNDcsIDI0NywgOTksIDQ2LCA0NywgMjQ2LCAxMjYsIDQ2LCA0NywgMjQ2LCAyNTMsIDQ2LCA0NywgMjQ2LCAxODksIDQ2LCAKLSAgICA0NywgMjQ3LCA2MCwgNDYsIDQ3LCAyNDYsIDE1NywgNDYsIDQ3LCAyNDcsIDI4LCA0NiwgNDcsIDI0NiwgMjIwLCA0NiwgNDcsIAotICAgIDI0NywgOTEsIDQ2LCA0NywgMjQ2LCAxNDEsIDQ2LCA0NywgMjQ3LCAxMiwgNDYsIDQ3LCAyNDYsIDIwNCwgNDYsIDQ3LCAKLSAgICAyNDcsIDc1LCA0NiwgNDcsIDI0NiwgMTcyLCA0NiwgNDcsIDI0NywgNDMsIDQ2LCA0NywgMjQ2LCAyMzUsIDQ2LCA0NywgCi0gICAgMjQ3LCAxMDYsIDQ2LCA0NywgMjQ2LCAxMjIsIDQ2LCA0NywgMjQ2LCAyNDksIDQ2LCA0NywgMjQ2LCAxODUsIDQ2LCA0NywgCi0gICAgMjQ3LCA1NiwgNDYsIDQ3LCAyNDYsIDE1MywgNDYsIDQ3LCAyNDcsIDI0LCA0NiwgNDcsIDI0NiwgMjE2LCA0NiwgNDcsIAotICAgIDI0NywgODcsIDQ2LCA0NywgMjQ2LCAxMzcsIDQ2LCA0NywgMjQ3LCA4LCA0NiwgNDcsIDI0NiwgMjAwLCA0NiwgNDcsIDI0NywgCi0gICAgNzEsIDQ2LCA0NywgMjQ2LCAxNjgsIDQ2LCA0NywgMjQ3LCAzOSwgNDYsIDQ3LCAyNDYsIDIzMSwgNDYsIDQ3LCAyNDcsIAotICAgIDEwMiwgNDYsIDQ3LCAyNDYsIDEyOSwgNDYsIDQ3LCAyNDcsIDAsIDQ2LCA0NywgMjQ2LCAxOTIsIDQ2LCA0NywgMjQ3LCA2MywgCi0gICAgNDYsIDQ3LCAyNDYsIDE2MCwgNDYsIDQ3LCAyNDcsIDMxLCA0NiwgNDcsIDI0NiwgMjIzLCA0NiwgNDcsIDI0NywgOTQsIDQ2LCAKLSAgICA0NywgMjQ2LCAxNDQsIDQ2LCA0NywgMjQ3LCAxNSwgNDYsIDQ3LCAyNDYsIDIwNywgNDYsIDQ3LCAyNDcsIDc4LCA0NiwgNDcsIAotICAgIDI0NiwgMTc1LCA0NiwgNDcsIDI0NywgNDYsIDQ2LCA0NywgMjQ2LCAyMzgsIDQ2LCA0NywgMjQ3LCAxMDksIDQ2LCA0NywgCi0gICAgMjQ2LCAxMjAsIDQ2LCA0NywgMjQ2LCAyNDcsIDQ2LCA0NywgMjQ2LCAxODMsIDQ2LCA0NywgMjQ3LCA1NCwgNDYsIDQ3LCAKLSAgICAyNDYsIDE1MSwgNDYsIDQ3LCAyNDcsIDIyLCA0NiwgNDcsIDI0NiwgMjE0LCA0NiwgNDcsIDI0NywgODUsIDQ2LCA0NywgCi0gICAgMjQ2LCAxMzUsIDQ2LCA0NywgMjQ3LCA2LCA0NiwgNDcsIDI0NiwgMTk4LCA0NiwgNDcsIDI0NywgNjksIDQ2LCA0NywgMjQ2LCAKLSAgICAxNjYsIDQ2LCA0NywgMjQ3LCAzNywgNDYsIDQ3LCAyNDYsIDIyOSwgNDYsIDQ3LCAyNDcsIDEwMCwgNDYsIDQ3LCAyNDYsIAotICAgIDEyNywgNDYsIDQ3LCAyNDYsIDI1NCwgNDYsIDQ3LCAyNDYsIDE5MCwgNDYsIDQ3LCAyNDcsIDYxLCA0NiwgNDcsIDI0NiwgCi0gICAgMTU4LCA0NiwgNDcsIDI0NywgMjksIDQ2LCA0NywgMjQ2LCAyMjEsIDQ2LCA0NywgMjQ3LCA5MiwgNDYsIDQ3LCAyNDYsIAotICAgIDE0MiwgNDYsIDQ3LCAyNDcsIDEzLCA0NiwgNDcsIDI0NiwgMjA1LCA0NiwgNDcsIDI0NywgNzYsIDQ2LCA0NywgMjQ2LCAKLSAgICAxNzMsIDQ2LCA0NywgMjQ3LCA0NCwgNDYsIDQ3LCAyNDYsIDIzNiwgNDYsIDQ3LCAyNDcsIDEwNywgNDYsIDQ3LCAyNDYsIAotICAgIDEyMywgNDYsIDQ3LCAyNDYsIDI1MCwgNDYsIDQ3LCAyNDYsIDE4NiwgNDYsIDQ3LCAyNDcsIDU3LCA0NiwgNDcsIDI0NiwgCi0gICAgMTU0LCA0NiwgNDcsIDI0NywgMjUsIDQ2LCA0NywgMjQ2LCAyMTcsIDQ2LCA0NywgMjQ3LCA4OCwgNDYsIDQ3LCAyNDYsIAotICAgIDEzOCwgNDYsIDQ3LCAyNDcsIDksIDQ2LCA0NywgMjQ2LCAyMDEsIDQ2LCA0NywgMjQ3LCA3MiwgNDYsIDQ3LCAyNDYsIDE2OSwgCi0gICAgNDYsIDQ3LCAyNDcsIDQwLCA0NiwgNDcsIDI0NiwgMjMyLCA0NiwgNDcsIDI0NywgMTAzLCA0NiwgNDcsIDI0NiwgMTMwLCAKLSAgICA0NiwgNDcsIDI0NywgMSwgNDYsIDQ3LCAyNDYsIDE5MywgNDYsIDQ3LCAyNDcsIDY0LCA0NiwgNDcsIDI0NiwgMTYxLCA0NiwgCi0gICAgNDcsIDI0NywgMzIsIDQ2LCA0NywgMjQ2LCAyMjQsIDQ2LCA0NywgMjQ3LCA5NSwgNDYsIDQ3LCAyNDYsIDE0NSwgNDYsIDQ3LCAKLSAgICAyNDcsIDE2LCA0NiwgNDcsIDI0NiwgMjA4LCA0NiwgNDcsIDI0NywgNzksIDQ2LCA0NywgMjQ2LCAxNzYsIDQ2LCA0NywgCi0gICAgMjQ3LCA0NywgNDYsIDQ3LCAyNDYsIDIzOSwgNDYsIDQ3LCAyNDcsIDExMCwgOTcsIDIxNSwgNTgsIDgwLCAyLCA2NywgOTEsIAotICAgIDk3LCAyMTUsIDU4LCA4MCwgMiwgNTIsIDY3LCA5MSwgMTQwLCA1MiwgODAsIDIsIDY3LCA5MSwgOTcsIDUyLCA4MCwgMiwgCi0gICAgNjcsIDkxLCA0MywgNDQsIDUyLCA4MCwgMiwgNjcsIDkxLCA5NywgMjE1LCA1OCwgODAsIDI0MywgMjQzLCAxMzAsIDE0MCwgCi0gICAgNTIsIDgwLCAyNDMsIDI0MywgMTMwLCA5NywgNTIsIDgwLCAyNDMsIDI0MywgMTMwLCAyNDYsIDEwNCwgODAsIDIsIDIwMywgCi0gICAgOTEsIDIxNCwgMTUzLCA4MCwgMiwgMjAzLCA5MSwgMjE0LCAxNTMsIDIxNSwgMjExLCA3NCwgMjQ2LCAxMDQsIDIxNSwgMjExLCAKLSAgICA3NCwgMTQwLCA1MiwgMjQ4LCAxNTcsIDc0LCA5NywgNTIsIDI0OCwgMTU3LCA3NCwgMTQwLCAyMTUsIDIxMSwgMjQ4LCAxNTcsIAotICAgIDc0LCA5NywgMjE1LCAyMTEsIDI0OCwgMTU3LCA3NCwgOTcsIDIxNSwgNTgsIDIxNSwgMjExLCAyNDgsIDE1NywgNzQsIDk3LCAKLSAgICA4MCwgMiwgMjQ2LCAxMTgsIDIxOCwgMTM5LCAyMTQsIDE1MywgODAsIDIxNiwgNDIsIDEzMCwgMjQ2LCAxMDQsIDgwLCAyMTYsIAotICAgIDQyLCAxMzAsIDk3LCA4MCwgMiwgMjE3LCA3OCwgMiwgNjcsIDkxLCA5NywgODAsIDIsIDIxNywgNzgsIDIsIDUyLCA2NywgCi0gICAgOTEsIDk3LCAyMTUsIDU4LCA4MCwgMiwgMjE3LCA3NywgOTcsIDIxNSwgNTgsIDgwLCAyLCAyMTcsIDc4LCAyLCA2NywgOTEsIAotICAgIDk3LCAyMTUsIDU4LCA4MCwgMiwgMjE3LCA3OCwgMiwgNTIsIDY3LCA5MSwgMTQwLCAyNTMsIDI1MSwgOTcsIDI1MywgMjUxLCAKLSAgICAxNDAsIDUyLCAyNTMsIDI1MSwgOTcsIDUyLCAyNTMsIDI1MSwgMTQwLCA4MCwgMjE2LCA0MiwgODUsIDI0NywgMjQ4LCA5NywgCi0gICAgODAsIDIxNiwgNDIsIDg1LCAyNDcsIDI0OCwgMTQwLCA4MCwgMjQzLCAyNDMsIDI1MiwgMTQxLCAyMTYsIDQyLCA4NSwgMjQ3LCAKLSAgICAyNDgsIDk3LCA4MCwgMjQzLCAyNDMsIDI1MiwgMTQxLCAyMTYsIDQyLCA4NSwgMjQ3LCAyNDgsIDIyOCwgNTYsIDIxMiwgOSwgCi0gICAgMjIsIDIxOSwgMjgsIDI0NSwgMjIwLCA3NCwgMjI4LCA1NiwgMjQ1LCAyMjAsIDIyLCAyMTksIDI4LCAyMTIsIDksIDc0LCAKLSAgICAyMjgsIDU2LCAyMTIsIDksIDgwLCAyLCAxMDMsIDIyOCwgNTYsIDI0NSwgMjIwLCA4MCwgMiwgMTAzLCAyMTksIDI4LCAyNDUsIAotICAgIDIyMCwgODAsIDIsIDEwMywgMjE5LCAyOCwgMjEyLCA5LCA4MCwgMiwgMTAzLCAyMjgsIDU2LCAyMTIsIDksIDgwLCAyMiwgCi0gICAgMjI4LCA1NiwgMjQ1LCAyMjAsIDc0LCAyMjgsIDU2LCAyNDUsIDIyMCwgODAsIDIyLCAyMTksIDI4LCAyNDUsIDIyMCwgNzQsIAotICAgIDIxOSwgMjgsIDI0NSwgMjIwLCA4MCwgMjIsIDIxOSwgMjgsIDIxMiwgOSwgNzQsIDIxOSwgMjgsIDIxMiwgOSwgODAsIDIyLCAKLSAgICAyMjgsIDU2LCAyMTIsIDksIDc0LCAyMjIsIDIyOCwgMjQ3LCAyNTUsIDI0OSwgMTI1LCAyNDQsIDE3NSwgMjQ3LCAyNTQsIAotICAgIDI0NCwgMTc1LCAyNDcsIDI1NSwgMjQ5LCAxMjUsIDIyMiwgMjI4LCAyNDcsIDI1NCwgMjE5LCAyOCwgMjQ1LCAyMjAsIDgwLCAKLSAgICAyNDksIDEyNSwgMjI4LCA1NiwgMjQ1LCAyMjAsIDc0LCAyMjgsIDU2LCAyNDUsIDIyMCwgODAsIDI0OSwgMTI1LCAyMTksIAotICAgIDI4LCAyNDUsIDIyMCwgNzQsIDI0NCwgMTc1LCAyNDcsIDI1NSwgMjQ5LCAxMjUsIDIyOCwgNTYsIDI0NSwgMjIwLCA3NCwgCi0gICAgMjIyLCAyMjgsIDI0NywgMjU1LCAyNDksIDEyNSwgMjE5LCAyOCwgMjQ1LCAyMjAsIDc0LCAyMjgsIDU2LCAyNDUsIDIyMCwgCi0gICAgODAsIDI0OSwgMTI1LCAyMjgsIDU2LCAyMTIsIDksIDc0LCAyMjgsIDU2LCAyMTIsIDksIDgwLCAyNDksIDEyNSwgMjI4LCAKLSAgICA1NiwgMjQ1LCAyMjAsIDc0LCAyMTIsIDM2LCA4MCwgMjI1LCA3LCAyNDcsIDE5NSwgMjIyLCAyNTEsIDgwLCAyMjUsIDcsIAotICAgIDk3LCAyMTYsIDE4OCwgMjQ5LCA5MCwgMjE0LCAxNTIsIDgwLCAyMjUsIDcsIDk3LCAyMTYsIDE4OCwgMjQ5LCA5MCwgMjQ2LCAKLSAgICAxMDMsIDgwLCAyMjUsIDcsIDI0NiwgMTA0LCAyMTYsIDE4OCwgMjQ5LCA5MCwgMjMzLCAzNywgODAsIDIyNSwgNywgMjQ2LCAKLSAgICAxMDQsIDIxNiwgMTg4LCAyNDksIDkwLCAyMjIsIDI0MSwgMjIyLCAyNDQsIDI1NCwgMjYsIDI1MCwgMiwgNzQsIDIzMywgNDAsIAotICAgIDI1NCwgMjYsIDI1NCwgODgsIDc0LCAyMTYsIDE0LCAyNTQsIDI2LCAyNTQsIDg4LCA3NCwgMjUxLCAxNzUsIDI1NCwgMjYsIAotICAgIDI1NCwgODgsIDc0LCAyMTYsIDE0LCAyNTQsIDI2LCAyNTAsIDIsIDgwLCAyLCAyMzAsIDE4MSwgMjE2LCAxNCwgMjU0LCAyNiwgCi0gICAgMjU0LCA4OCwgODAsIDIsIDIyNSwgMjIsIDIzMiwgMTA4LCA0NCwgMjIwLCAxNTIsIDI1MCwgMiwgNzQsIDIzMiwgMTA4LCAKLSAgICA0MywgMjIwLCAxNTIsIDI1NCwgODgsIDc0LCAyNTQsIDg4LCAyNTAsIDAsIDI1MCwgMzYsIDc0LCAyNTAsIDIsIDI1MCwgMCwgCi0gICAgMjUwLCAzNiwgNzQsIDk3LCA4MCwgNzcsIDIxOSwgMjUxLCAxNDAsIDc0LCAxNDAsIDgwLCA3NywgMjE5LCAyNTEsIDk3LCAKLSAgICA3NCwgMjE5LCAyNTEsIDk3LCA4MCwgNzcsIDE0MCwgNzQsIDk3LCA4MCwgMiwgOTYsIDUxLCAxNDAsIDgwLCAyLCA5NiwgNTEsIAotICAgIDk3LCA4MCwgMjE2LCAxMzksIDIxMSwgMTc4LCA0MywgNDQsIDgwLCAyMTYsIDEzOSwgNCwgMjUwLCAzNSwgMjE0LCAxNTMsIAotICAgIDIxNSwgNTgsIDgwLCAyNDMsIDI0MywgNCwgMjUwLCAzNSwgNDMsIDI1MiwgMTM5LCAxMjAsIDQ0LCAyNTIsIDEzOSwgMTI0LCAKLSAgICAyNDEsIDI1NCwgNDMsIDI1MiwgMTM5LCAxMjQsIDQ0LCAyNTIsIDEzOSwgMTIwLCAyNDEsIDI1NCwgMTIwLCAyNTIsIDEzOSwgCi0gICAgNDQsIDEyNCwgMjUyLCAxMzksIDQzLCAyNDEsIDI1NCwgMTIwLCAyNTIsIDEzOSwgNDMsIDEyNCwgMjUyLCAxMzksIDQ0LCAKLSAgICAyNDEsIDI1NCwgNDMsIDI1MiwgMTM5LCAxMjAsIDQ0LCAyNTIsIDEzOSwgMTIwLCAyNDEsIDI1NCwgMTIwLCAyNTIsIDEzOSwgCi0gICAgNDQsIDEyNCwgMjUyLCAxMzksIDQ0LCAyNDEsIDI1NCwgNDMsIDI1MiwgMTM5LCAxMjQsIDQ0LCAyNTIsIDEzOSwgMTI0LCAKLSAgICAyNDEsIDI1NCwgMTIwLCAyNTIsIDEzOSwgNDMsIDEyNCwgMjUyLCAxMzksIDQzLCAyNDEsIDI1NCwgMTQwLCAyNDEsIDI1NSwgCi0gICAgMiwgMjUyLCAxMzksIDEyMCwgMjE2LCA0MiwgMTMwLCA5NywgMjQxLCAyNTUsIDIsIDI1MiwgMTM5LCAxMjAsIDIxNiwgNDIsIAotICAgIDEzMCwgMjE0LCAxNTMsIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgNDQsIDIxNiwgNDIsIDEzMCwgMjQ2LCAxMDQsIDI0MSwgCi0gICAgMjU1LCAyLCAyNTIsIDEzOSwgNDQsIDIxNiwgNDIsIDEzMCwgMTQwLCAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIDEyNCwgMjE2LCAKLSAgICA0MiwgMTMwLCA5NywgMjQxLCAyNTUsIDIsIDI1MiwgMTM5LCAxMjQsIDIxNiwgNDIsIDEzMCwgMjE0LCAxNTMsIDI0MSwgCi0gICAgMjU1LCAyLCAyNTIsIDEzOSwgNDMsIDIxNiwgNDIsIDEzMCwgMjQ2LCAxMDQsIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgNDMsIAotICAgIDIxNiwgNDIsIDEzMCwgMTQwLCAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIDEyMCwgMjQzLCAyNDMsIDEzMCwgOTcsIDI0MSwgCi0gICAgMjU1LCAyLCAyNTIsIDEzOSwgMTIwLCAyNDMsIDI0MywgMTMwLCAyMTQsIDE1MywgMjQxLCAyNTUsIDIsIDI1MiwgMTM5LCAKLSAgICA0NCwgMjQzLCAyNDMsIDEzMCwgMjQ2LCAxMDQsIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgNDQsIDI0MywgMjQzLCAxMzAsIAotICAgIDE0MCwgMjQxLCAyNTUsIDIsIDI1MiwgMTM5LCAxMjQsIDI0MywgMjQzLCAxMzAsIDk3LCAyNDEsIDI1NSwgMiwgMjUyLCAKLSAgICAxMzksIDEyNCwgMjQzLCAyNDMsIDEzMCwgMjE0LCAxNTMsIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgNDMsIDI0MywgMjQzLCAKLSAgICAxMzAsIDI0NiwgMTA0LCAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIDQzLCAyNDMsIDI0MywgMTMwLCAxNDAsIDI0MSwgMjU1LCAKLSAgICAyLCAyNTIsIDEzOSwgMTIwLCA3NywgMTQwLCAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIDI0NiwgMTA2LCAyMTQsIDE1MywgCi0gICAgMjQxLCAyNTUsIDIsIDI1MiwgMTM5LCA0MywgMjUyLCAzMCwgMjE0LCAxNTMsIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgMjIyLCAKLSAgICAyNTEsIDk3LCAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIDEyMCwgNzcsIDk3LCAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIDI0NiwgCi0gICAgMTA2LCAyNDYsIDEwNCwgMjQxLCAyNTUsIDIsIDI1MiwgMTM5LCA0MywgMjUyLCAzMCwgMjQ2LCAxMDQsIDI0MSwgMjU1LCAyLCAKLSAgICAyNTIsIDEzOSwgMjIyLCAyNTEsIDE0MCwgMjQxLCAyNTUsIDIsIDI1MiwgMTM5LCAxMjAsIDc3LCA5NywgMjQxLCAyNTUsIDIsIAotICAgIDI1MiwgMTM5LCAyMTQsIDE2MywgMTQwLCAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIDEyNCwgNzcsIDk3LCAyNDEsIDI1NSwgMiwgCi0gICAgMjUyLCAxMzksIDI0NiwgMTA2LCA5NywgMjQxLCAyNTUsIDIsIDI1MiwgMTM5LCAxMjAsIDc3LCAxNDAsIDI0MSwgMjU1LCAyLCAKLSAgICAyNTIsIDEzOSwgMjE0LCAxNjMsIDk3LCAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIDEyNCwgNzcsIDE0MCwgMjQxLCAyNTUsIDIsIAotICAgIDI1MiwgMTM5LCAyNDYsIDEwNiwgMTQwLCAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIDEyMCwgNzcsIDE5OSwgMjQ4LCAxNTYsIAotICAgIDE0MCwgMjQxLCAyNTUsIDIsIDI1MiwgMTM5LCAxMjQsIDI1MiwgNDMsIDE5OSwgMjQ4LCAxNTYsIDk3LCAyNDEsIDI1NSwgMiwgCi0gICAgMjUyLCAxMzksIDEyMCwgNzcsIDE5OSwgMjQ4LCAxNTYsIDk3LCAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIDEyNCwgMjUyLCAKLSAgICA0MywgMTk5LCAyNDgsIDE1NiwgMjE0LCAxNTMsIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgNDMsIDI1MiwgMzAsIDI0NiwgCi0gICAgMTA0LCAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIDIyMiwgMjUxLCAyNDYsIDEwNCwgMjQxLCAyNTUsIDIsIDI1MiwgMTM5LCAKLSAgICA0MywgMjUyLCAzMCwgMjE0LCAxNTMsIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgMjIyLCAyNTEsIDQ0LCA1MiwgODAsIDIsIAotICAgIDIyMiwgMTgzLCAyNDEsIDIzNSwgMjQ1LCA5OCwgNSwgNzcsIDk3LCA3NCwgMjE2LCA4OSwgMjI2LCAxNjgsIDc3LCA5NywgCi0gICAgNzQsIDE0MCwgODAsIDc3LCAyMTYsIDg5LCAyMjYsIDE2NywgOTcsIDgwLCA3NywgMjE2LCA4OSwgMjI2LCAxNjcsIDk3LCAKLSAgICA4MCwgNzcsIDI1NCwgMTQ4LCAxMjgsIDExMSwgMjMzLCAxNSwgNzcsIDE0MCwgNzQsIDE0MCwgODAsIDIxNiwgMTM5LCAyMzMsIAotICAgIDE0LCAyNDIsIDEzMCwgNzcsIDk3LCA3NCwgMjE4LCA2NCwgNzcsIDk3LCA3NCwgMTQwLCA4MCwgMjE2LCAxMzksIDIxOCwgCi0gICAgNjMsIDIxOCwgMjIsIDc3LCAxNDAsIDc0LCA0MywgMjQ0LCA5MSwgMjE3LCA3NywgNDQsIDI0NCwgOTEsIDIxNywgNzcsIAotICAgIDEyMCwgMjQ0LCA5MSwgMjE3LCA3NywgMTI0LCAyNDQsIDkxLCAyMTcsIDc3LCAyMTUsIDIxMSwgNjcsIDI1MiwgMTQxLCAKLSAgICAyNDgsIDYwLCAyMTAsIDE2MCwgMTg3LCAyMTgsIDI0MiwgMjEwLCAxNjAsIDE4NywgMjE1LCA0OSwgMjQ5LCAyMjYsIDQzLCAKLSAgICA3MSwgMjQ5LCA5OSwgMTI3LCA0NCwgNzEsIDI0OSwgOTksIDEyNywgNDMsIDcxLCAyMjYsIDMsIDQ0LCA3MSwgMjI2LCAzLCAKLSAgICAyMTAsIDE2MCwgMTg3LCA0MywgMjM2LCAxNSwgMTI3LCAyMTAsIDE2MCwgMTg3LCA0NCwgMjM2LCAxNSwgMTI3LCAyMTAsIAotICAgIDE2MCwgMTg3LCA0MywgMjUxLCAyNDIsIDEyNywgMjEwLCAxNjAsIDE4NywgNDQsIDI1MSwgMjQyLCAxMjcsIDQzLCA0MiwgCi0gICAgMjUxLCAxNTgsIDIsIDIxNCwgMTgzLCA0NCwgNDIsIDI1MSwgMTU4LCAyLCAyMTQsIDE4MywgNDMsIDQyLCAyNTEsIDE1OCwgCi0gICAgMiwgMjE2LCAxMTUsIDIzNiwgMCwgMjE2LCAxNCwgMjQ5LCAxNjAsIDQ0LCA0MiwgMjUxLCAxNTgsIDIsIDIxNiwgMTE1LCAKLSAgICAyMzYsIDAsIDI1MSwgMTc1LCAyNDksIDE2MCwgNDMsIDQyLCAyNTEsIDE1OCwgMiwgMjE2LCAxMTUsIDIzNiwgMCwgMjUxLCAKLSAgICAxNzUsIDI0OSwgMTYwLCA0NCwgNDIsIDI1MSwgMTU4LCAyLCAyMTYsIDExNSwgMjM2LCAwLCAyMTYsIDE0LCAyNDksIDE2MCwgCi0gICAgNDMsIDI1NCwgMTEwLCAyNTEsIDE1OCwgMiwgMjQ3LCAxMjAsIDQ0LCAyNTQsIDExMCwgMjUxLCAxNTgsIDIsIDI0NywgMTIwLCAKLSAgICA0MywgMjU0LCAyNiwgMjMzLCAxNSwgMTI3LCA0NCwgMjU0LCAyNiwgMjQyLCAxMzAsIDEyNywgNTIsIDQzLCAyNTQsIDI2LCAKLSAgICAyNDIsIDEzMCwgMTI3LCA1MiwgNDQsIDI1NCwgMjYsIDIzMywgMTUsIDEyNywgNDMsIDg1LCAyMTYsIDYsIDIyMCwgNTMsIAotICAgIDEyNywgNDQsIDg1LCAyMTYsIDYsIDIyMCwgNTMsIDEyNywgMjQ2LCAxMTgsIDI0NCwgMTM1LCA2NywgMjEwLCAzNSwgMjMyLCAKLSAgICAyMTMsIDIzMSwgODgsIDI1NCwgMTEwLCAyMjYsIDE3MCwgMjMzLCA0NiwgNDQsIDI1NCwgMTEwLCAyMTQsIDEyLCAyLCAyMTgsIAotICAgIDIzNCwgMjMxLCA4OCwgNDQsIDI1NCwgMTEwLCAyLCAyNDcsIDEyMCwgMjU0LCAxMTAsIDIsIDIyMiwgOTIsIDIzNSwgMjE1LCAKLSAgICAyNTUsIDMsIDI1NCwgMTA5LCAyMTgsIDI1NSwgMjU0LCAxMTAsIDIyNiwgMTcwLCAyMzMsIDQ2LCAyMTgsIDI1NSwgMjU0LCAKLSAgICAxMTAsIDIyNiwgMTcwLCAyMTQsIDE2MywgMjE1LCA5NCwgMjU0LCAxMDksIDIyMywgNDksIDI1NCwgMTA5LCAyNTQsIDExMCwgCi0gICAgMiwgMjE0LCAxODMsIDIyMywgNDksIDI1NCwgMTEwLCAyLCAyMTQsIDE4MywgMjI2LCAyNDgsIDI1NCwgMTEwLCAyMjYsIAotICAgIDE3MCwgMjE0LCAxNjMsIDIyNiwgMjQ4LCAyNTQsIDExMCwgMjI2LCAxNzAsIDI0NiwgMTA2LCAyMzEsIDg4LCAyNTQsIDExMCwgCi0gICAgMiwgMjA0LCAyNTQsIDUsIDI0NSwgMTQwLCAyMzYsIDAsIDgwLCAyMjUsIDcsIDEyMCwgMjIsIDIyMiwgMjUxLCAyMzEsIDg4LCAKLSAgICAyNTQsIDExMCwgMiwgMjA0LCAyNTQsIDUsIDI0NSwgMTQwLCAyMzYsIDAsIDgwLCAyMjUsIDcsIDEyMCwgMjIsIDIzMywgNDYsIAotICAgIDIzMSwgODgsIDI1NCwgMTEwLCAyLCAyMDQsIDI1NCwgNSwgMjQ1LCAxNDAsIDIzNiwgMCwgODAsIDIyNSwgNywgMTI0LCAyMiwgCi0gICAgMjIyLCAyNTEsIDIzMSwgODgsIDI1NCwgMTEwLCAyLCAyMDQsIDI1NCwgNSwgMjQ1LCAxNDAsIDIzNiwgMCwgODAsIDIyNSwgCi0gICAgNywgMTI0LCAyMiwgMjMzLCA0NiwgMjMxLCA4OCwgMjU0LCAxMTAsIDIsIDIwNCwgMjU0LCA1LCAyNDUsIDE0MCwgMjM2LCAwLCAKLSAgICA4MCwgMjI1LCA3LCA0NCwgMjIsIDIxNCwgMTYzLCAyMzEsIDg4LCAyNTQsIDExMCwgMiwgMjA0LCAyNTQsIDUsIDI0NSwgCi0gICAgMTQwLCAyMzYsIDAsIDgwLCAyMjUsIDcsIDQzLCAyMiwgMjE0LCAxNjMsIDIzMSwgODgsIDI1NCwgMTEwLCAyLCAyMDQsIAotICAgIDI1NCwgNSwgMjQ1LCAxNDAsIDIzNiwgMCwgODAsIDIyNSwgNywgNDQsIDIyLCAyNDYsIDEwNiwgMjMxLCA4OCwgMjU0LCAKLSAgICAxMTAsIDIsIDIwNCwgMjU0LCA1LCAyNDUsIDE0MCwgMjM2LCAwLCA4MCwgMjI1LCA3LCA0MywgMjIsIDI0NiwgMTA2LCAyMjMsIAotICAgIDQ5LCAyNDUsIDE1MiwgMjIwLCAxMjcsIDI0NSwgMTUyLCAyMjAsIDEyOCwgMiwgMjI2LCAxMjMsIDI0NSwgMTUyLCAyMjAsIAotICAgIDEyOCwgMiwgNCwgMjUwLCAzNiwgNDgsIDI0NSwgMTUyLCAyMjAsIDEyOCwgMiwgNDQsIDgwLCA0OCwgMjQ1LCAxNTIsIDIyMCwgCi0gICAgMTI4LCAyLCA0MywgODAsIDQ4LCAyNTAsIDM2LCAyLCAyMDMsIDEzMCwgMzcsIDY3LCAxMzAsIDM3LCAyMjYsIDcsIDM3LCAKLSAgICAyMjMsIDUwLCAyMTksIDQ2LCAzNywgMjI1LCAxNzEsIDI1MCwgMzYsIDI0NywgMTczLCAyNTEsIDc4LCAyMDMsIDI1MiwgCi0gICAgMTQxLCAyMiwgMjE2LCAxNCwgMTYzLCAyNDcsIDE3MywgMjUxLCA3OCwgNjcsIDEzMCwgMjUwLCAzNiwgMiwgMjE4LCAyNCwgCi0gICAgMjExLCAxNzgsIDM3LCAyNTQsIDg3LCAyNDcsIDE2OSwgNTAsIDEyMCwgODAsIDIxNiwgMTM5LCAyNTAsIDM1LCAzNywgNzEsIAotICAgIDI1MSwgMTEzLCAzNywgMjUxLCAxMTMsIDM3LCAyMzMsIDE0LCAzNywgMjQyLCAxMjksIDI1MCwgMzYsIDIsIDQsIDI1MCwgCi0gICAgMzYsIDIxNiwgNDIsIDIxNiwgMTk2LCAyMjIsIDI1MSwgMjUwLCAzNiwgMiwgMTEzLCAyMDMsIDIxOCwgOTEsIDIxNiwgNDIsIAotICAgIDIxNiwgMTk2LCAyMjIsIDI1MSwgOTIsIDIyMiwgMjI4LCAyNDcsIDI1NSwgMjE5LCA5NSwgOTIsIDI0NCwgMTc1LCAyNDcsIAotICAgIDI1NSwgMjE5LCA5NSwgOTIsIDI1MywgMjE2LCA5MiwgNCwgMjUwLCAzNSwgOTIsIDIxOCwgMjM0LCAxMTMsIDIzNSwgNjUsIAotICAgIDIxOCwgMjMyLCAyMTUsIDIyNiwgMiwgNTksIDQ4LCAyMTUsIDIyNiwgMiwgMjE0LCAxODMsIDIyMiwgOTIsIDIzNiwgMCwgCi0gICAgMjE1LCAyMjUsIDIxNSwgMjI2LCAyLCAyMjAsIDEzNCwgMjUzLCAyMDcsIDI1MSwgMTc0LCA0NCwgMjE1LCAyMjYsIDc3LCAKLSAgICA0MywgMjE1LCAyMjUsIDQzLCAyMTUsIDIyNiwgMjUyLCAzMCwgNjcsIDEzMCwgNjcsIDI1MiwgMTQxLCAyNTIsIDMwLCA0NCwgCi0gICAgMjE1LCAyMjUsIDI1MSwgMTY1LCAyLCA0MywgMTYzLCAyNTEsIDIyMSwgMjUxLCAxNjUsIDIsIDQ0LCAxNjMsIDI1MSwgMjIxLCAKLSAgICA4NSwgMjUxLCAxNjQsIDMwLCAyLCA0MywgMTYzLCAyNTEsIDIyMSwgMzAsIDIsIDQ0LCAxNjMsIDI1MSwgMjIxLCA3MSwgCi0gICAgMjQwLCAyMzYsIDg1LCAyNDAsIDIzNiwgNDMsIDIxMSwgMjQ0LCAyNDQsIDEzNSwgNDQsIDIxMSwgMjQ0LCAyNDQsIDEzNSwgCi0gICAgNDMsIDUyLCAyMTEsIDI0NCwgMjQ0LCAxMzUsIDQ0LCA1MiwgMjExLCAyNDQsIDI0NCwgMTM1LCAyMzUsIDI0OCwgMjM1LCAKLSAgICAyMzQsIDIxNiwgMTEyLCAxMTcsIDIzNSwgMjM0LCAyMzUsIDIzNSwgMjI5LCAxMDIsIDIsIDY3LCAxMzAsIDI0NiwgMTEyLCAKLSAgICAyMzAsIDg3LCA0MiwgMiwgMjQ5LCAxODEsIDIyNiwgMTI3LCAyMzUsIDI0NiwgMjUzLCAyMzcsIDIxOSwgMjE5LCAyMjQsIAotICAgIDE4MCwgMjQ1LCA5OCwgNSwgMjIsIDIxOSwgOTcsIDIyNiwgNywgMjQ1LCA5OCwgNSwgMjIsIDIxOSwgOTcsIDIyNiwgOCwgMiwgCi0gICAgMjE2LCA4OSwgNDgsIDI0MCwgMTA0LCAyMTYsIDQyLCAyMiwgMjE5LCA5NywgMjI2LCA3LCAyNDIsIDE4MywgMjE4LCAxNTUsIAotICAgIDIxNiwgMTg1LCAyNDYsIDEwNSwgMjE1LCAyMjYsIDIsIDQzLCAxNjMsIDI1MSwgMjIxLCAyNDYsIDEwNSwgMjE1LCAyMjYsIAotICAgIDIsIDQ0LCAxNjMsIDI1MSwgMjIxLCA4NSwgMjQ3LCAyNDksIDIsIDEyNCwgNzQsIDg1LCAyMzIsIDEwNCwgNzEsIDI1MCwgCi0gICAgMzYsIDIsIDEyNCwgNzQsIDg1LCAyNTAsIDM2LCAyLCAxMjQsIDc0LCAyNDUsIDg1LCA3MSwgMjE4LCAyMzQsIDI0NSwgODUsIAotICAgIDg1LCAyMTgsIDIzNCwgMjQ1LCA4NSwgNzEsIDI0NywgMjQ4LCAyNDUsIDg1LCA4NSwgMjQ3LCAyNDgsIDI0NSwgODUsIDcxLCAKLSAgICAyNTAsIDM1LCAyNDUsIDg1LCA4NSwgMjUwLCAzNSwgMjIyLCAxMzIsIDIyMywgNTAsIDIxOSwgNDcsIDIyNiwgMTY3LCAyMTksIAotICAgIDQ3LCAyLCAyMjYsIDEyMywgMjIzLCA1MCwgMjE5LCA0NywgMiwgMjAzLCA5MSwgMjUxLCAyNDksIDIxOSwgNDYsIDI1MSwgCi0gICAgMjQ5LCAyMjMsIDUwLCAyMTksIDQ2LCA1MiwgMjI1LCAyMiwgMjE1LCAyMTEsIDIyNSwgMjIsIDIzMywgNDIsIDI0OSwgOTEsIAotICAgIDI1NCwgMTEwLCAxMjcsIDIyMiwgMjQ3LCAyNDksIDkxLCAyNTQsIDExMCwgMTI3LCAyMTYsIDc4LCAyMzAsIDE3OSwgMjMwLCAKLSAgICAyNCwgMzcsIDU5LCAyMjYsIDE2NywgMjMwLCAyNCwgMzcsIDk2LCAyMjYsIDE2NywgMjMwLCAyNCwgMzcsIDMwLCAyMjYsIAotICAgIDE2NywgMjMwLCAyNCwgMjE0LCAxNzYsIDIyNiwgMTY4LCAyLCAyNDcsIDEyMCwgMjMwLCAyNCwgMjE0LCAxNzYsIDIyNiwgCi0gICAgMTY4LCAyLCAyMjUsIDIyLCAyMzAsIDI0LCA0MiwgMjM1LCAxOTksIDIyNiwgMTY3LCAyMzAsIDI0LCA0MiwgMjE0LCAxNzYsIAotICAgIDIyNiwgMTY3LCAxMTMsIDIzMiwgMTQ2LCAyMiwgMjI2LCAxNjcsIDExMywgMjMyLCAxNDYsIDE3NywgMjI2LCAxNjcsIDIzMCwgCi0gICAgMjQsIDMwLCAyMjYsIDE2NywgMjMwLCAxNTQsIDExMywgMjE4LCA0MywgMjE4LCA0MSwgMiwgMjM1LCAyMTEsIDIyNCwgMjQsIAotICAgIDIzNSwgMjEyLCAyMjYsIDE2NywgMjQ0LCA5OSwgMjI1LCAyNTUsIDIzNSwgMjExLCAyMzUsIDIxMiwgMiwgNTIsIDkxLCAKLSAgICAyMzUsIDIxMiwgMjUzLCAxNzMsIDIsIDIxOSwgOTUsIDI1MCwgMzIsIDI0MywgMjI2LCAyNTQsIDg4LCAyMzUsIDIwOSwgCi0gICAgMjMyLCAyMTQsIDIzNSwgMjEwLCAyLCAyMjMsIDExNSwgMjI1LCAyMzcsIDI1NCwgMiwgMjI1LCAxLCAyMzIsIDIxNCwgMjM1LCAKLSAgICAyMTAsIDIsIDIyMCwgMTUyLCAyMjUsIDIzNywgMjU0LCAyLCAyMjUsIDEsIDIzMiwgMjE0LCAyMzUsIDIxMCwgMjI4LCA1MiwgCi0gICAgMjM1LCAyNTAsIDIxNiwgMTk2LCAyMjUsIDEsIDIzNSwgMjEyLCAyNTQsIDIsIDExNSwgMjI1LCAxMSwgMjI2LCAxNjcsIAotICAgIDIyNCwgMTgsIDIzNSwgMjEyLCAyMjYsIDE2NywgMjM1LCAyMTIsIDIsIDE0MCwgODAsIDIsIDEwMywgMjM1LCAyMTIsIDIsIAotICAgIDMwLCA1MCwgMjM1LCAyMTIsIDIsIDIzNSwgMTk4LCAyMzUsIDIxMiwgMiwgMjE0LCAxNzUsIDIzNSwgMjEyLCAyLCAyMjYsIAotICAgIDEyMywgMjM1LCAyMTIsIDIsIDIxNCwgMTgzLCAyMzUsIDY2LCAyMzMsIDg1LCA0MywgMjE1LCAyMjYsIDIyNiwgMTY3LCAKLSAgICAyMTAsIDE2MCwgMTg3LCAyMjEsIDIwMSwgMjQ5LCAyMDksIDIxMCwgMTYwLCAxODcsIDIyMSwgMjAxLCAyMjUsIDU2LCAyMTAsIAotICAgIDE2MCwgMTg3LCAyMjEsIDIwMSwgMjI0LCAxNzYsIDk2LCA1LCAyLCA0LCAyNTAsIDM2LCA0OCwgOTYsIDUsIDIsIDI1MCwgCi0gICAgMzEsIDI1NSwgMTUsIDQ4LCA5NiwgNSwgMiwgMjE2LCA4OSwgNDgsIDk2LCA1LCAyLCA1OSwgNTEsIDk2LCA1LCAyLCAyMTYsIAotICAgIDg5LCA1MSwgOTYsIDUsIDIsIDIxOCwgNjUsIDEwNSwgOTYsIDUsIDIsIDg1LCAyMTUsIDIyNSwgMjMwLCAxODIsIDUsIDIsIAotICAgIDI0OSwgMjIwLCA0OCwgMjMwLCAxODIsIDUsIDIsIDU5LCA1MSwgMjMwLCAxODIsIDUsIDIsIDI0NCwgMTc1LCAyNDcsIDExOCwgCi0gICAgMjMwLCAxODIsIDUsIDIsIDIyMiwgMjI4LCAyNDcsIDExOCwgOTYsIDUsIDIzNiwgMCwgNDMsIDE2MywgMjUwLCAzNSwgOTYsIAotICAgIDUsIDIzNiwgMCwgNDQsIDE2MywgMjUwLCAzNSwgMjEzLCAyNTQsIDE3NywgMjQ5LCAxMzEsIDIyNCwgMTgwLCAyMzAsIDg0LCAKLSAgICA1LCAyLCA1OSwgNDgsIDIzMCwgODQsIDUsIDIsIDIxNCwgMTgzLCAyMjAsIDE0OSwgMjI0LCAxODEsIDIsIDI1MSwgMTc1LCAKLSAgICAyNDksIDI1NSwgMjE5LCA3NywgMjI0LCAxODAsIDIzMCwgODQsIDUsIDIzNiwgMCwgNDMsIDE2MywgMjUwLCAzNSwgMjMwLCAKLSAgICA4NCwgNSwgMjM2LCAwLCA0NCwgMTYzLCAyNTAsIDM1LCAzNywgMjMwLCA4NCwgNSwgMiwgMjUwLCAzMSwgMjU1LCAxNCwgCi0gICAgMjMwLCA4NCwgNSwgMjM2LCAwLCA1MiwgMjUwLCAzNSwgMzcsIDI0NywgMTY5LCA1MCwgOTYsIDUsIDIzNiwgMCwgMjE1LCAKLSAgICAyMjUsIDIzMCwgMTgyLCA1LCAyMzYsIDAsIDIxNSwgMjI1LCAyMzAsIDg0LCA1LCAyMzYsIDAsIDIxNSwgMjI1LCAyMzUsIAotICAgIDIwNiwgMjI0LCAxODAsIDIyMiwgMjQyLCAyMzUsIDIwNiwgMjI0LCAxODAsIDIxMCwgMTYwLCAxODcsIDIyMywgOTAsIDI0OSwgCi0gICAgMjA5LCAyNTQsIDEzNCwgMTc3LCAyNDksIDE2NSwgMjM1LCAxOTksIDIsIDI0NywgMTIwLCAyMTQsIDE3NiwgMiwgMjMwLCAKLSAgICAxODIsIDUwLCAyMTQsIDE3NiwgMiwgMjI2LCAxMjMsIDIzNSwgMTk5LCAyLCAyMjYsIDEyMywgMjM1LCAxOTksIDIsIDIzMiwgCi0gICAgMTQ2LCAyNTQsIDExOCwgMjE0LCAxNzYsIDIsIDIzMiwgMTQ2LCAyMjYsIDE1OCwgMjE0LCAxNzYsIDc3LCAyMzUsIDE5OCwgCi0gICAgMjM1LCAxOTksIDc3LCAyMTQsIDE3NSwgMjE0LCAxNzYsIDc3LCAyNTIsIDE0MSwgNzcsIDIzNSwgMTk4LCAyMzUsIDE5OSwgCi0gICAgNzcsIDI1MiwgMTQxLCA3NywgMjE0LCAxNzUsIDIxNCwgMTc2LCAyNTIsIDMwLCAyMiwgMjM1LCA2NSwgMiwgMjE0LCAxNzUsIAotICAgIDIzNSwgMTk5LCAyNTIsIDMwLCAyMiwgMjM1LCA2NSwgMiwgMjM1LCAxOTgsIDI1MCwgMCwgMjE0LCAxNzYsIDIsIDIyMCwgCi0gICAgMTMzLCAyNTAsIDAsIDIzNSwgMTk5LCAyLCAyMjAsIDEzMywgNTIsIDQyLCAyMzUsIDE5OCwgNTIsIDQyLCAyMTQsIDE3NSwgCi0gICAgMjUwLCAwLCAyMTQsIDE3NiwgMiwgMjIwLCAxMzQsIDIyLCAyMTksIDc3LCAyMjQsIDE4MCwgMjMyLCAxNDYsIDIyLCAyLCAKLSAgICA1OSwgNDgsIDIzMiwgMTQ2LCAxNzcsIDIsIDU5LCA0OCwgNTIsIDIzMiwgMTQ2LCAyNTQsIDExOCwgNTIsIDIzMiwgMTQ2LCAKLSAgICAyMjYsIDE1OCwgMTEzLCAyMzUsIDIwMCwgMjMyLCAxNDYsIDI1NCwgMTE4LCAxMTMsIDIzNSwgMjAwLCAyMzIsIDE0NiwgCi0gICAgMjI2LCAxNTgsIDIxOSwgODUsIDIzMywgODUsIDIyNiwgMTU4LCAyMTksIDg1LCAyMzMsIDg1LCAyNTQsIDExOCwgMjMyLCAKLSAgICAxNDYsIDE3NywgMjI2LCAxMjEsIDIzMiwgMTQ2LCAyNTQsIDExOCwgMjMyLCAxNDYsIDIyLCAyLCAyMzAsIDIyNCwgMjE4LCAKLSAgICAxMzksIDIzMiwgMTQ2LCAxNzcsIDIsIDIzMCwgMjI0LCAyMTgsIDEzOSwgMjMyLCAxNDYsIDIyLCAyLCAyMDMsIDI0OCwgCi0gICAgMTU2LCAyMzIsIDE0NiwgMTc3LCAyLCAyMDMsIDI0OCwgMTU2LCAyMzIsIDE0NiwgMjIsIDIsIDUyLCAyMjYsIDEyMywgMjMyLCAKLSAgICAxNDYsIDIyLCAyLCAyMTQsIDE4MywgMjMyLCAxNDYsIDIyLCAyLCA1MiwgMjE0LCAxODMsIDQsIDIxMywgMjUxLCAyLCAyMTQsIAotICAgIDE4MywgMjMyLCAxNDYsIDE3NywgMiwgNTIsIDIyNiwgMTIzLCAyMzIsIDE0NiwgMTc3LCAyLCA1MiwgMjE0LCAxODMsIDIxMCwgCi0gICAgMTYwLCAxODcsIDI0NywgMTI5LCAyNTQsIDc5LCAyMTAsIDE2MCwgMTg3LCAyMjMsIDE0OCwgMjU0LCA3OSwgMjQ1LCA5OCwgCi0gICAgNSwgMiwgNTksIDUxLCAyNDAsIDEwNCwgMiwgNTksIDQ4LCAyMTUsIDIxMSwgMjAzLCAyNTIsIDE0MSwgMiwgNTIsIDY3LCAKLSAgICA5MSwgMjE1LCAyMTEsIDIwMywgMjUyLCAxNDEsIDIsIDIxNSwgMjExLCA2NywgOTEsIDIxNiwgODksIDIyNiwgMTY4LCAyLCAKLSAgICA1OSwgNDgsIDIxNiwgODksIDIyNiwgMTY4LCAyLCAyMjIsIDIyOCwgMjQ3LCAxMTgsIDIxOSwgMTYyLCAyMzAsIDE4MiwgCi0gICAgMjE5LCAxNjEsIDI0OSwgMTk5LCAyLCA1OSwgNDgsIDI0NSwgOTgsIDIsIDI1MywgMjE2LCAyNTQsIDE0OCwgMTI4LCAyMTYsIAotICAgIDQyLCAyLCAyNTAsIDMxLCAyNTUsIDE0LCAyNTQsIDQ4LCAxMjgsIDE3NywgMTI4LCAxMTEsIDI0NSwgOTgsIDUsIDc3LCA5NiwgCi0gICAgNTAsIDk2LCA1LCA3NywgMjQ1LCA5OCwgNTAsIDI0NSwgOTgsIDUsIDc3LCAyMTYsIDg5LCAyMjYsIDE2NywgNTIsIDI0OSwgCi0gICAgMjI3LCAyNDUsIDk5LCAxMTMsIDI0OSwgMTk0LCAyNDUsIDk4LCAyMTksIDE3NiwgMTM0LCAyNDksIDE5NCwgMjQ1LCA5OCwgCi0gICAgMjE5LCAxNzYsIDI0NSwgOTgsIDUsIDIsIDExMywgMTcwLCA3NywgMjIsIDExMywgMTcwLCA1MSwgMjQ1LCA5NCwgMiwgMjQ0LCAKLSAgICAxMSwgMTcwLCA0OCwgMjMzLCAxNSwgMiwgMjUwLCAzNiwgMjM1LCAyMTUsIDI0MiwgMTMwLCAyLCAyNTAsIDM2LCAyMzUsIAotICAgIDIxNSwgMjMzLCAxNSwgMiwgMjI0LCAxMywgMTY0LCA0OCwgMjQyLCAxMzAsIDIsIDIyNCwgMTMsIDE2NCwgNDgsIDIzMywgCi0gICAgMTUsIDE3NywgMjE5LCA5NywgMTI4LCAxMTEsIDI0MiwgMTMwLCAxNzcsIDIxOSwgOTcsIDEyOCwgMTExLCAyMzMsIDE1LCAKLSAgICAxNzcsIDIxOSwgOTcsIDEyOCwgMjE2LCA0MiwgMiwgNTksIDIzNSwgMjE1LCAyNDIsIDEzMCwgMTc3LCAyMTksIDk3LCAxMjgsIAotICAgIDIxNiwgNDIsIDIsIDU5LCAyMzUsIDIxNSwgMjMzLCAxNSwgMTc3LCAyMTksIDk3LCAxMjgsIDIxNiwgNDIsIDIsIDU5LCA0OCwgCi0gICAgMjQyLCAxMzAsIDE3NywgMjE5LCA5NywgMTI4LCAyMTYsIDQyLCAyLCA1OSwgNDgsIDIzMywgMTUsIDE3NywgMjE5LCA5NywgCi0gICAgMTI4LCAyMTYsIDQyLCAyLCA1OSwgNzcsIDIyMiwgMjUxLCAyNDIsIDEzMCwgMTc3LCAyMTksIDk3LCAxMjgsIDIxNiwgNDIsIAotICAgIDIsIDU5LCA3NywgMjMzLCA0NiwgMjMzLCAxNSwgMTc3LCAyNTQsIDQ5LCAyNDIsIDEzMCwgMTc3LCAyNTQsIDQ5LCAyMzMsIAotICAgIDE1LCAyMiwgMjE5LCAxNTMsIDIyOCwgNTIsIDEyOCwgMTExLCAyNDIsIDEzMCwgMjIsIDIxOSwgMTUzLCAyMjgsIDUyLCAKLSAgICAxMjgsIDExMSwgMjMzLCAxNSwgMjIsIDIyOCwgNTIsIDI1NCwgNDksIDI0MiwgMTMwLCAyMiwgMjI4LCA1MiwgMjU0LCA0OSwgCi0gICAgMjMzLCAxNSwgNzcsIDI0NiwgMTExLCAxMjgsIDc3LCAyNDIsIDEyOSwgMjQyLCAxMzAsIDc3LCAyNDYsIDExMSwgMTI4LCAKLSAgICA3NywgMjMzLCAxNCwgMjMzLCAxNSwgNzcsIDIxOSwgMTYyLCAxNzcsIDI0NSwgOTksIDI0MiwgMTMwLCA3NywgMjE5LCAxNjIsIAotICAgIDE3NywgMjQ1LCA5OSwgMjMzLCAxNSwgNzcsIDIxOSwgMTYyLCA3NywgMjQyLCAxMjksIDI0MiwgMTMwLCA3NywgMjE5LCAKLSAgICAxNjIsIDc3LCAyMzMsIDE0LCAyMzMsIDE1LCA3NywgMjQyLCAxMzAsIDc3LCAyNDYsIDExMSwgMjQ1LCA5OSwgMjQyLCAxMzAsIAotICAgIDc3LCAyMzMsIDE1LCA3NywgMjQ2LCAxMTEsIDI0NSwgOTksIDIzMywgMTUsIDc3LCAyMTksIDk3LCAxMjgsIDc3LCAyNDIsIAotICAgIDEzMCwgNzcsIDIxOSwgOTcsIDI0NSwgOTksIDI0MiwgMTMwLCA3NywgMjE5LCA5NywgMTI4LCA3NywgMjMzLCAxNSwgNzcsIAotICAgIDIxOSwgOTcsIDI0NSwgOTksIDIxOSwgOTcsIDEyOCwgMjE2LCA0MiwgMTc3LCAyMzMsIDE0LCAyMTksIDk3LCAxMjgsIDIxNiwgCi0gICAgNDIsIDE3NywgMjQyLCAxMjksIDIxOSwgOTcsIDEyOCwgMjE2LCA0MiwgMTc3LCAyMzMsIDE1LCAyLCA1OSwgMjM1LCAyMTUsIAotICAgIDIxOSwgOTcsIDEyOCwgMjE2LCA0MiwgMTc3LCAyNDIsIDEzMCwgMiwgNTksIDIzNSwgMjE1LCAyNDYsIDExMSwgMTI4LCAKLSAgICAyMTYsIDQyLCAxNzcsIDIzMywgMTQsIDI0NiwgMTExLCAxMjgsIDIxNiwgNDIsIDE3NywgMjQyLCAxMjksIDI0NiwgMTExLCAKLSAgICAyMTksIDk3LCAxMjgsIDIxNiwgNDIsIDE3NywgMjMzLCAxNCwgMjQ2LCAxMTEsIDIxOSwgOTcsIDEyOCwgMjE2LCA0MiwgCi0gICAgMTc3LCAyNDIsIDEyOSwgMjE5LCAxNjIsIDE3NywgMjMzLCAxNCwgMjE5LCAxNjIsIDE3NywgMjQyLCAxMjksIDIxOSwgMTYyLCAKLSAgICA3NywgMjMzLCAxNSwgNzcsIDI0NSwgOTgsIDUwLCAyMTksIDE2MiwgNzcsIDI0MiwgMTMwLCA3NywgMjQ1LCA5OCwgNTAsIAotICAgIDUyLCAyMjksIDkxLCAyMzMsIDE0LCA1MiwgMjI5LCA5MSwgMjQyLCAxMjksIDUyLCAyMjksIDkxLCAyMzMsIDE1LCAyLCAKLSAgICAyMTQsIDE4MywgMjQyLCAxMzAsIDIyNiwgMTIxLCAyMzMsIDE0LCAyNDIsIDEzMCwgMjUyLCAzMCwgMjMzLCAxNCwgMjMzLCAKLSAgICAxNSwgMjUwLCAwLCAyNTEsIDc4LCAyNDksIDkyLCAyNDIsIDEzMCwgMjUwLCAwLCAyNTEsIDc4LCAyNDksIDkyLCAyMzMsIAotICAgIDE1LCAyNTAsIDAsIDI1MSwgNzgsIDI0OSwgOTMsIDc3LCAyMTksIDk3LCAyNDUsIDk5LCAyNDIsIDEzMCwgMjUwLCAwLCAKLSAgICAyNTEsIDc4LCAyNDksIDkzLCA3NywgMjE5LCA5NywgMjQ1LCA5OSwgMjE5LCA3OCwgMjE2LCAyMDAsIDIzMywgODMsIDIxNiwgCi0gICAgMjAwLCAyMTksIDc4LCAyMTYsIDIwMSwgMTc3LCAxMjgsIDExMSwgMjMzLCA4MywgMjE2LCAyMDEsIDE3NywgMTI4LCAxMTEsIAotICAgIDI0NSwgOTgsIDUsIDIsIDI1MSwgMTA4LCA0OCwgMjI0LCAyMDMsIDc3LCAyMTksIDE1MywgMjQ1LCA5OCwgNTAsIDIxOCwgCi0gICAgNTYsIDc3LCAyMTksIDE1MywgMjQ1LCA5OCwgNTAsIDIyNCwgMjAzLCA3NywgMjE5LCAxNTMsIDIyOCwgNTIsIDEyOCwgMTExLCAKLSAgICAyMTgsIDU2LCA3NywgMjE5LCAxNTMsIDIyOCwgNTIsIDEyOCwgMTExLCAyMjQsIDIwMywgNzcsIDI0NSwgOTgsIDUwLCAyMTgsIAotICAgIDU2LCA3NywgMjQ1LCA5OCwgNTAsIDIyNCwgMjAzLCA3NywgMjI4LCA1MiwgMTI4LCAxMTEsIDIxOCwgNTYsIDc3LCAyMjgsIAotICAgIDUyLCAxMjgsIDExMSwgMjI0LCAyMDMsIDc3LCAyNTQsIDE0OCwgMTI4LCAxMTEsIDIxOCwgNTYsIDc3LCAyNTQsIDE0OCwgCi0gICAgMTI4LCAxMTEsIDIyNCwgMjAzLCA3NywgMjI4LCA1MiwgMjU0LCAxNDgsIDEyOCwgMTExLCAyMTgsIDU2LCA3NywgMjI4LCAKLSAgICA1MiwgMjU0LCAxNDgsIDEyOCwgMTExLCA1MiwgMjI0LCAyMDIsIDUyLCAyMTgsIDU1LCAyMTgsIDY0LCAyLCAyNDcsIDEyMCwgCi0gICAgMjE4LCAyMiwgMiwgMjQ3LCAxMjAsIDIxOCwgNjQsIDIsIDk2LCA1LCA1MSwgMjE4LCAyMiwgMiwgOTYsIDUsIDUxLCAyMTgsIAotICAgIDY0LCAyLCAyMzAsIDg0LCA1LCA1MSwgMjE4LCAyMiwgMiwgMjMwLCA4NCwgNSwgNTEsIDIxOCwgNjQsIDY0LCAxNzcsIDEyOCwgCi0gICAgMjE2LCA0MiwgMiwgNTksIDQ4LCAyMTgsIDIyLCA2NCwgMTc3LCAxMjgsIDIxNiwgNDIsIDIsIDU5LCA0OCwgMjE4LCA2NCwgCi0gICAgNjQsIDc3LCAyNDUsIDk4LCA1MCwgMjE4LCAyMiwgNjQsIDc3LCAyNDUsIDk4LCA1MCwgMjE4LCA2NCwgNjQsIDc3LCAyMTYsIAotICAgIDg5LCAyMjYsIDE2NywgMjE4LCAyMiwgNjQsIDc3LCAyMTYsIDg5LCAyMjYsIDE2NywgMjE4LCA2NCwgNjQsIDc3LCAyNTQsIAotICAgIDE0OCwgMTI4LCAxMTEsIDIxOCwgMjIsIDY0LCA3NywgMjU0LCAxNDgsIDEyOCwgMTExLCAyMTgsIDY0LCA2NCwgNzcsIDIyOCwgCi0gICAgNTIsIDEyOCwgMTExLCAyMTgsIDIyLCA2NCwgNzcsIDIyOCwgNTIsIDEyOCwgMTExLCA0MiwgNDMsIDIwNCwgOTMsIDIyNiwgCi0gICAgMTY3LCA0MiwgNDQsIDIwNCwgOTMsIDIyNiwgMTY3LCAyNTAsIDAsIDIxOCwgNjMsIDI1MCwgMCwgMjE4LCAyMSwgMjUwLCAwLCAKLSAgICAyMTgsIDY0LCAxNzcsIDEyOCwgMTExLCAyNTAsIDAsIDIxOCwgMjIsIDE3NywgMTI4LCAxMTEsIDIxOCwgNjQsIDc3LCAyMTgsIAotICAgIDIxLCAyMTgsIDIyLCA3NywgMjE4LCA2MywgMjE4LCA2NCwgNzcsIDIxOCwgNjMsIDIxOCwgMjIsIDc3LCAyMTgsIDIxLCAKLSAgICAyMTgsIDIyLCAyNTIsIDMwLCAyMTgsIDYzLCAyMTgsIDIyLCAyNTIsIDMwLCAyMiwgMjM1LCA2NSwgMjUxLCA3OCwgMjQ4LCAKLSAgICAxNTcsIDIsIDIxOCwgNjMsIDI0NSwgMTcwLCA2NCwgMjI2LCAxNzAsIDI0NiwgMTAzLCAyMjUsIDQ4LCAyLCAyMTcsIDEyLCAKLSAgICAyMTYsIDEzLCAyMTUsIDI0MCwgMjM1LCAxOTgsIDI0NCwgMjEsIDIyOCwgNjUsIDIxOSwgMjUxLCA0MywgMjE3LCA4NywgCi0gICAgMjE5LCAyNTEsIDEyNCwgMjE3LCA4NywgMjE5LCAyNTEsIDEyMCwgMjE3LCA4NywgMjI1LCAxNzIsIDIsIDIyMiwgOTEsIDY3LCAKLSAgICAyNTIsIDE0MSwgMjE1LCAyMTEsIDQ0LCAyMTUsIDkzLCA1MiwgNjcsIDI1MiwgMTQxLCA0MywgMjE1LCA5MywgNjcsIDI1MiwgCi0gICAgMTQxLCA1MiwgNDMsIDIxNSwgOTMsIDUyLCA2NywgMjUyLCAxNDEsIDUyLCA0MywgMjE1LCA5MywgMTk5LCAyNDgsIDE1NywgCi0gICAgMjQzLCAyNDMsIDQzLCAyMzEsIDYzLCA2NCwgNTIsIDIxMywgMjM5LCAyMTksIDI1MSwgMTI0LCAyMTcsIDg4LCAyLCAyMjYsIAotICAgIDEyMywgMjE5LCAyNTEsIDEyMCwgMjE3LCA4OCwgMiwgMjE0LCAxODMsIDIxOSwgMjUxLCAxMjAsIDIxNywgODgsIDc3LCAKLSAgICAyMTksIDI1MSwgMTI0LCAyMTcsIDg3LCA1MiwgMTI0LCAyMTcsIDg3LCA1MiwgMTIwLCAyMTcsIDg3LCA1MiwgMjE4LCAxMDMsIAotICAgIDIyOCwgNTIsIDUwLCAyMjMsIDQ5LCA1MiwgMjE4LCAxMDMsIDIyOCwgNTIsIDUwLCAyNDcsIDEzOCwgMjI4LCA1MiwgMjQ3LCAKLSAgICAxNzUsIDIsIDIyMywgNDksIDIyOSwgMTAxLCAyMTksIDk1LCA2NywgMjMyLCAyMTQsIDIsIDI1MCwgMzYsIDQ4LCA2NywgCi0gICAgMjMyLCAyMTQsIDIsIDI1MCwgMzYsIDUxLCAxMjQsIDIxNywgODgsIDIsIDI1MCwgMzYsIDUxLCAyMjYsIDgsIDIsIDIwMywgCi0gICAgOTEsIDIyNiwgOCwgMiwgMjE2LCA4OSwgMjI2LCAxNjcsIDIxNSwgMjExLCA2NywgMjUyLCAxNDEsIDI1MSwgMjQ0LCAyMjMsIAotICAgIDkxLCAyMTUsIDIxMSwgNjcsIDI1MiwgMTQxLCAyLCAyMDMsIDkxLCAyMTUsIDIxMSwgMjQ5LCAyMjcsIDIyNiwgMTY3LCAKLSAgICAyMTUsIDIxMSwgMjI5LCA5MSwgMjMzLCAxNCwgMjE1LCAyMTEsIDIyOSwgOTEsIDI0MiwgMTI5LCAyNDYsIDExMSwgMjE5LCAKLSAgICA5NywgMjMzLCAxNSwgMTc3LCAxMjgsIDExMSwgMjQ2LCAxMTEsIDIxOSwgOTcsIDI0MiwgMTMwLCAxNzcsIDEyOCwgMTExLCAKLSAgICAyMTUsIDIxMSwgMjE5LCA0NywgMjUxLCAyNDQsIDIyMywgOTEsIDIzMywgODUsIDIxNSwgMjExLCA2NywgMjUyLCAxNDEsIAotICAgIDIyNiwgMTY3LCA1MiwgMjE5LCA0NywgMjI2LCAxNjcsIDcxLCA2NywgMTMwLCAyMzAsIDI0LCA3MSwgNjcsIDEzMCwgMjI4LCAKLSAgICA1NiwgMjQ1LCAyMjAsIDcxLCA3NCwgMjI4LCA1NiwgMjEyLCA5LCA3MSwgNzQsIDIxOSwgMjgsIDI0NSwgMjIwLCA3MSwgNzQsIAotICAgIDIxOSwgMjgsIDIxMiwgOSwgNzEsIDc0LCA0MywgNDQsIDcxLCA3NCwgMTQwLCA4NSwgNzQsIDIxNCwgMTUzLCA4NSwgNzQsIAotICAgIDI0NiwgMTA0LCA4NSwgNzQsIDIyOCwgNTYsIDI0NSwgMjIwLCA4NSwgNzQsIDIyOCwgNTYsIDIxMiwgOSwgODUsIDc0LCAKLSAgICAyMTksIDI4LCAyNDUsIDIyMCwgODUsIDc0LCAyMTksIDI4LCAyMTIsIDksIDg1LCA3NCwgNDMsIDQ0LCA4NSwgNzQsIDEyMCwgCi0gICAgMTI0LCA4NSwgNzQsIDk3LCA4MCwgMiwgMjE2LCA3NywgMjQ2LCAxMDMsIDk3LCA4MCwgMiwgMjE2LCA3NywgMjE0LCAxNTIsIAotICAgIDE0MCwgODAsIDIsIDIxNiwgNzcsIDI0NiwgMTAzLCAxNDAsIDgwLCAyLCAyMTYsIDc3LCAyMTQsIDE1MiwgNDIsIDIsIDIxNiwgCi0gICAgMTQsIDE2MywgMjUxLCAyMjEsIDQyLCAyLCAyNTEsIDE3NSwgMTYzLCAyNTEsIDIyMSwgNDIsIDIsIDIxNCwgMTYwLCA0NCwgCi0gICAgMjQ3LCAyNTUsIDE2MywgMjUxLCAyMjEsIDQyLCAyLCAyMzIsIDEwOCwgNDMsIDI0NywgMjU1LCAxNjMsIDI1MSwgMjIxLCAKLSAgICAyNDcsIDI0OSwgMiwgNDMsIDE2MywgMjUxLCAyMjEsIDI0NywgMjQ5LCAyLCA0NCwgMTYzLCAyNTEsIDIyMSwgMjQ3LCAyNDksIAotICAgIDIsIDIxNiwgMTQsIDE2MywgMjUxLCAyMjEsIDI0NywgMjQ5LCAyLCAyNTEsIDE3NSwgMTYzLCAyNTEsIDIyMSwgMjQ2LCAKLSAgICAxMTgsIDIxOCwgMjM0LCA4NSwgMjMzLCA4NSwgMjE4LCAyMzQsIDcxLCAyMzMsIDg1LCAyMTgsIDIzNCwgODUsIDIxMywgCi0gICAgMTg3LCA0LCAyMTgsIDIzNCwgNzEsIDIxMywgMTg3LCA0LCAyMTgsIDIzNCwgODUsIDIyNSwgMTkwLCA3MSwgMjI1LCAxOTAsIAotICAgIDcxLCAyNDEsIDE5MywgODUsIDI0MSwgMTkzLCAyMDMsIDg1LCAyNDEsIDE5MywgODUsIDIzMywgODUsIDI1MCwgMzUsIDg1LCAKLSAgICAyMzEsIDgyLCAyNDcsIDI0OCwgNzEsIDIzMSwgODIsIDI0NywgMjQ4LCA4NSwgMjMxLCA4MiwgMjMyLCAxMDQsIDcxLCAyMzEsIAotICAgIDgyLCAyMzIsIDEwNCwgODUsIDQsIDI0NywgMjQ4LCA4NSwgNCwgMjMyLCAxMDQsIDcxLCA0LCAyMzIsIDEwNCwgODUsIDIwMywgCi0gICAgMjQ1LCAxNjQsIDcxLCAyMDMsIDI0NSwgMTY0LCA4NSwgNjcsIDI0NSwgMTY0LCA3MSwgNjcsIDI0NSwgMTY0LCA0MywgODAsIAotICAgIDIsIDQsIDI1MCwgMzUsIDEzNCwgMTQwLCAyNTMsIDI0NywgNDMsIDgwLCAyLCAzNywgMjI1LCAyMiwgMTk5LCAxNDAsIDIxOCwgCi0gICAgMjMwLCA3NCwgMTQwLCAyMTUsIDU4LCA4MCwgMiwgNjcsIDkxLCAxNDAsIDIxNSwgNTgsIDgwLCAyLCA1MiwgNjcsIDkxLCAKLSAgICAxNDAsIDIxNSwgNTgsIDgwLCAyNDMsIDI0MywgMTMwLCAxNDAsIDIxNSwgNTgsIDIxNSwgMjExLCAyNDgsIDE1NywgNzQsIAotICAgIDE0MCwgODAsIDIsIDI0NiwgMTE4LCAyMTgsIDEzOSwgMTQwLCA4MCwgMiwgMjE3LCA3OCwgMiwgNjcsIDkxLCAxNDAsIDgwLCAKLSAgICAyLCAyMTcsIDc4LCAyLCA1MiwgNjcsIDkxLCAxNDAsIDIxNSwgNTgsIDgwLCAyLCAyMTcsIDc3LCAxNDAsIDIxNSwgNTgsIAotICAgIDgwLCAyLCAyMTcsIDc4LCAyLCA2NywgOTEsIDE0MCwgMjE1LCA1OCwgODAsIDIsIDIxNywgNzgsIDIsIDUyLCA2NywgOTEsIAotICAgIDE0MCwgODAsIDIxNiwgMTM5LCAyMTEsIDE3OCwgMjEyLCAzNiwgODAsIDIyNSwgNywgMjQ3LCAxOTUsIDIzMywgNDYsIDI0NSwgCi0gICAgOTgsIDUsIDc3LCAxNDAsIDc0LCAyMjMsIDUwLCAyMTYsIDg5LCAyMjYsIDE2OCwgNzcsIDE0MCwgNzQsIDE0MCwgODAsIDc3LCAKLSAgICAyMjMsIDUwLCAyNTQsIDE0OCwgMTI4LCAxMTEsIDk3LCA4MCwgMjE2LCAxMzksIDI0MiwgMTI5LCA5NywgODAsIDIxNiwgCi0gICAgMTM5LCAyMTgsIDIxLCAxNDAsIDIyNCwgMjQsIDc0LCA5NywgMjI0LCAyNCwgNzQsIDIyMywgNTAsIDIxNiwgODksIDIyNiwgCi0gICAgMTY4LCA3NywgOTcsIDc0LCA5NywgODAsIDc3LCAyMjMsIDUwLCAyNTQsIDE0OCwgMTI4LCAxMTEsIDIxNiwgODksIDIyNiwgCi0gICAgMTY4LCA3NywgMTQwLCA3NCwgMTQwLCA4MCwgNzcsIDI1NCwgMTQ4LCAxMjgsIDExMSwgMTQwLCA4MCwgNzcsIDIyMywgNTAsIAotICAgIDIxNiwgODksIDIyNiwgMTY3LCA5NywgODAsIDc3LCAyMjMsIDUwLCAyMTYsIDg5LCAyMjYsIDE2NywgNzEsIDIzMSwgODIsIAotICAgIDIxOCwgMTU2LCA4NSwgNCwgMjE4LCAxNTYsIDcxLCA0LCAyMTgsIDE1NiwgODUsIDIyMiwgMjQ3LCAyMjUsIDE5MCwgNzEsIAotICAgIDIyMiwgMjQ3LCAyMjUsIDE5MCwgMTE0LCAyMzMsIDg1LCAyNTAsIDM1LCAxMTQsIDIyNiwgMTI0LCAyLCAyMjYsIDEyNCwgCi0gICAgMjM1LCAyMTUsIDExNCwgMjUwLCAzNiwgMiwgMjUwLCAzNiwgMjM1LCAyMTUsIDExNCwgMjUwLCAzNSwgMTE0LCAzNywgMjIxLCAKLSAgICAyNTQsIDE0NSwgNiwgMSwgMjUzLCAxNTksIDE0NSwgNiwgMSwgMjUxLCAxMTcsIDE0NSwgNiwgMSwgMjEzLCAyNTMsIDE0NSwgCi0gICAgNiwgMSwgMjQyLCAxODUsIDE0NSwgNiwgMSwgMjQ3LCAxNDAsIDE0NSwgNiwgMSwgMjExLCAyMSwgMTQ1LCA2LCAxLCAyMTAsIAotICAgIDY4LCAxNDUsIDYsIDEsIDI0NiwgMzQsIDE0NSwgNiwgMSwgMjEwLCA5MSwgMTQ1LCA2LCAxLCAyMzUsIDE0OCwgMTQ1LCA2LCAKLSAgICAxLCA2NSwgMjM1LCAxNDgsIDE0NSwgNiwgMSwgNzMsIDE0NSwgNiwgMSwgMjQ3LCAxNjAsIDE0NSwgNiwgMSwgMjM0LCAyNDAsIAotICAgIDE0NSwgNiwgMSwgMjMyLCAxODYsIDE0NSwgNiwgMSwgMjMwLCAyOSwgMTQ1LCA2LCAxLCAyMjksIDE5MSwgMTQ1LCA2LCAxLCAKLSAgICAyMjYsIDE4NSwgMTQ1LCA2LCAxLCAyMjUsIDQsIDE0NSwgNiwgMSwgMjIyLCAyMjcsIDE0NSwgNiwgMSwgMjE5LCA4MywgCi0gICAgMTQ1LCA2LCAxLCAyMTUsIDgxLCAxNDUsIDYsIDEsIDIxNCwgMjAxLCAxNDUsIDYsIDEsIDI0MywgMjQ2LCAxNDUsIDYsIDEsIAotICAgIDI0MSwgMTk5LCAxNDUsIDYsIDEsIDIyNiwgMTM1LCAxNDUsIDYsIDEsIDIyNSwgMjIxLCAxNDUsIDYsIDEsIDIxOSwgMjI4LCAKLSAgICAxNDUsIDYsIDEsIDIxNSwgMTY3LCAxNDUsIDYsIDEsIDI1MCwgNzUsIDE0NSwgNiwgMSwgMjIwLCAxMDIsIDE0NSwgNiwgMSwgCi0gICAgMjExLCAyNywgMTQ1LCA2LCAxLCAyMTEsIDI5LCAxNDUsIDYsIDEsIDIxMSwgNTcsIDE0NSwgNiwgMSwgMjE4LCAyNTMsIAotICAgIDE2MiwgMTQ1LCA2LCAxLCAyMTAsIDIxMiwgMTQ1LCA2LCAxLCA0LCAyMTAsIDE4MywgMTQ1LCA2LCAxLCA0LCAyMTAsIDE4NCwgCi0gICAgMiwgMjE3LCA3NywgMTQ1LCA2LCAxLCAyMTAsIDI0NCwgMTQ1LCA2LCAxLCAyMzUsIDE4NCwgNCwgMjEwLCAxODMsIDE0NSwgCi0gICAgNiwgMSwgMjUxLCAyNDksIDIxMCwgMTgzLCAxNDUsIDYsIDEsIDIzNSwgMTg0LCAyNTEsIDI0OSwgMjEwLCAxODMsIDE0NSwgCi0gICAgNiwgMSwgMjQ0LCA4MiwgMTQ1LCA2LCAxLCAyMzUsIDE0NiwgMTQ1LCA2LCAxLCAyMTksIDIyNywgMTQ1LCA2LCAxLCAyMTUsIAotICAgIDIwMiwgNjEsIDE0NSwgNiwgMSwgMjMzLCA3NSwgMjMwLCAyOSwgMTQ1LCA0LCAxLCAyNTMsIDE1OSwgMTQ1LCA0LCAxLCAKLSAgICAyNTEsIDExNywgMTQ1LCA0LCAxLCAyMTMsIDI1MywgMTQ1LCA0LCAxLCAyNDIsIDE4NSwgMTQ1LCA0LCAxLCAyNDcsIDE0MCwgCi0gICAgMTQ1LCA0LCAxLCAyMTEsIDIxLCAxNDUsIDQsIDEsIDIxMCwgNjgsIDE0NSwgNCwgMSwgMjQ2LCAzNCwgMTQ1LCA0LCAxLCAKLSAgICAyMTAsIDkxLCAxNDUsIDQsIDEsIDIzNSwgMTQ4LCAxNDUsIDQsIDEsIDY1LCAyMzUsIDE0OCwgMTQ1LCA0LCAxLCA3MywgCi0gICAgMTQ1LCA0LCAxLCAyNDcsIDE2MCwgMTQ1LCA0LCAxLCAyMzQsIDI0MCwgMTQ1LCA0LCAxLCAyMzIsIDE4NiwgMTQ1LCA0LCAxLCAKLSAgICAyMzAsIDI5LCAxNDUsIDQsIDEsIDIyOSwgMTkxLCAxNDUsIDQsIDEsIDIyNiwgMTg1LCAxNDUsIDQsIDEsIDIyNSwgNCwgCi0gICAgMTQ1LCA0LCAxLCAyMjIsIDIyNywgMTQ1LCA0LCAxLCAyMTksIDgzLCAxNDUsIDQsIDEsIDIxNSwgODEsIDE0NSwgNCwgMSwgCi0gICAgMjE0LCAyMDEsIDE0NSwgNCwgMSwgMjQzLCAyNDYsIDE0NSwgNCwgMSwgMjQxLCAxOTksIDE0NSwgNCwgMSwgMjI2LCAxMzUsIAotICAgIDE0NSwgNCwgMSwgMjI1LCAyMjEsIDE0NSwgNCwgMSwgMjE5LCAyMjgsIDE0NSwgNCwgMSwgMjE1LCAxNjcsIDE0NSwgNCwgMSwgCi0gICAgMjUwLCA3NSwgMTQ1LCA0LCAxLCAyMjAsIDEwMiwgMTQ1LCA0LCAxLCAyMTEsIDI3LCAxNDUsIDQsIDEsIDIxMSwgMjksIAotICAgIDE0NSwgNCwgMSwgMjExLCA1NywgMTQ1LCA0LCAxLCAyMTgsIDI1MywgMTYyLCAxNDUsIDQsIDEsIDIxMCwgMjEyLCAxNDUsIAotICAgIDQsIDEsIDQsIDIxMCwgMTgzLCAxNDUsIDQsIDEsIDQsIDIxMCwgMTg0LCAyLCAyMTcsIDc3LCAxNDUsIDQsIDEsIDIxMCwgCi0gICAgMjQ0LCAxNDUsIDQsIDEsIDIzNSwgMTg0LCA0LCAyMTAsIDE4MywgMTQ1LCA0LCAxLCAyNTEsIDI0OSwgMjEwLCAxODMsIAotICAgIDE0NSwgNCwgMSwgMjM1LCAxODQsIDI1MSwgMjQ5LCAyMTAsIDE4MywgMTQ1LCA0LCAxLCAyNDQsIDgyLCAxNDUsIDQsIDEsIAotICAgIDIzNSwgMTQ2LCAxNDUsIDQsIDEsIDIxOSwgMjI3LCAxNDUsIDQsIDEsIDIxNSwgMjAyLCA2MSwgMTQ1LCA0LCAxLCAyMzMsIAotICAgIDc1LCAyMzAsIDI5LCA3LCA2LCAxLCAyMzMsIDE0OSwgMiwgNTIsIDEzMCwgNywgNCwgMSwgMjMzLCAxNDksIDIsIDUyLCAKLSAgICAxMzAsIDcsIDYsIDEsIDIzMywgMTQ5LCAyLCAyMzAsIDIyNCwgMTgyLCA3LCA2LCAxLCAyMjYsIDEwNiwgMiwgOTEsIDcsIDYsIAotICAgIDEsIDIyMywgMjI0LCAyLCAyMTcsIDc3LCA3LCA0LCAxLCAxMTUsIDIsIDkxLCA3LCA0LCAxLCAyMTcsIDE1MywgMiwgMjQ3LCAKLSAgICAyNTUsIDkxLCA3LCA2LCAxLCAyNDIsIDYxLCAyLCAyNDgsIDM5LCA3LCA0LCAxLCAyNDIsIDYxLCAyLCAyNDgsIDM5LCA3LCAKLSAgICA2LCAxLCAyMzUsIDI0LCAyLCAyNDgsIDM5LCA3LCA0LCAxLCAyMzUsIDI0LCAyLCAyNDgsIDM5LCA3LCA2LCAxLCAyMTAsIAotICAgIDE2MCwgMiwgMjQ4LCAzOSwgNywgNCwgMSwgMjEwLCAxNjAsIDIsIDI0OCwgMzksIDcsIDYsIDEsIDI1NCwgMTQzLCA3LCA2LCAKLSAgICAxLCAyMzIsIDUwLCAyLCAxMDMsIDcsIDYsIDEsIDIxNSwgOTQsIDYxLCA3LCA2LCAxLCAyMTUsIDk0LCAyNTQsIDE0MywgNywgCi0gICAgNCwgMSwgMjE0LCAxMDYsIDIsIDQ0LCAxMDMsIDcsIDYsIDEsIDIxMiwgOTksIDIsIDEwMywgNywgNCwgMSwgMjEyLCA5OSwgCi0gICAgMiwgMTAzLCA3LCA0LCAxLCAyMTQsIDEwNiwgMiwgMjQ5LCAxMDAsIDcsIDYsIDEsIDE2MywgMjQyLCA2MCwgNywgNCwgMSwgCi0gICAgMTYzLCAyNDIsIDYwLCA3LCA0LCAxLCAyMTcsIDc1LCAyMjUsIDEzMywgNywgNCwgMSwgMTYwLCAyLCAyMjgsIDUwLCA3LCA0LCAKLSAgICAxLCAyMTUsIDk0LCAyMjMsIDIyNCwgMiwgMjE3LCA3NywgNywgNCwgMSwgMTQ0LCAyLCAxMjEsIDIyMiwgMjM0LCAyMzUsIAotICAgIDIxNSwgNywgMSwgNCwgNiwgMjE1LCA5NCwgNzUsIDcsIDIxOCwgNjUsIDQsIDEsIDIzNSwgMTQ0LCA1OCwgMSwgNiwgMjE0LCAKLSAgICAxMDUsIDcsIDYsIDEsIDIyMiwgOTIsIDIsIDIxNywgMjUwLCAyMTcsIDc3LCA3LCA2LCAxLCAyMTAsIDE2MCwgMiwgMjE3LCAKLSAgICAyNTAsIDIxNywgNzcsIDgxLCA2LCAxLCAyNTQsIDE2NCwgODEsIDQsIDEsIDI1NCwgMTY0LCA4MSwgNiwgMSwgMjEzLCAxNzMsIAotICAgIDgxLCA0LCAxLCAyMTMsIDE3MywgODEsIDYsIDEsIDI0MywgMTA3LCA4MSwgNCwgMSwgMjQzLCAxMDcsIDgxLCA2LCAxLCAKLSAgICAyNDgsIDE5MSwgODEsIDQsIDEsIDI0OCwgMTkxLCA4MSwgNiwgMSwgMjQ1LCAxOTQsIDgxLCA0LCAxLCAyNDUsIDE5NCwgODEsIAotICAgIDYsIDEsIDIxOSwgMzMsIDgxLCA0LCAxLCAyMTksIDMzLCA4MSwgNiwgMSwgMjEwLCAxMDEsIDgxLCA0LCAxLCAyMTAsIDEwMSwgCi0gICAgODEsIDYsIDEsIDI0MSwgMjQ4LCA4MSwgNCwgMSwgMjQxLCAyNDgsIDgxLCA2LCAxLCAyMTYsIDE3NywgODEsIDQsIDEsIAotICAgIDIxNiwgMTc3LCA4MSwgNiwgMSwgMjQwLCAxMTYsIDgxLCA0LCAxLCAyNDAsIDExNiwgODEsIDYsIDEsIDIzNCwgMjI3LCA4MSwgCi0gICAgNCwgMSwgMjM0LCAyMjcsIDgxLCA2LCAxLCAyMzMsIDcyLCA4MSwgNCwgMSwgMjMzLCA3MiwgODEsIDYsIDEsIDIzMCwgMjMwLCAKLSAgICA4MSwgNCwgMSwgMjMwLCAyMzAsIDgxLCA2LCAxLCAyMjgsIDIzMywgODEsIDQsIDEsIDIyOCwgMjMzLCA4MSwgNiwgMSwgCi0gICAgMjMzLCAyMzMsIDgxLCA0LCAxLCAyMzMsIDIzMywgODEsIDYsIDEsIDc2LCA4MSwgNCwgMSwgNzYsIDgxLCA2LCAxLCAyMjUsIAotICAgIDEwOCwgODEsIDQsIDEsIDIyNSwgMTA4LCA4MSwgNiwgMSwgMjIyLCAyMTEsIDgxLCA0LCAxLCAyMjIsIDIxMSwgODEsIDYsIAotICAgIDEsIDIxOSwgMTY1LCA4MSwgNCwgMSwgMjE5LCAxNjUsIDgxLCA2LCAxLCAyMTcsIDQxLCA4MSwgNCwgMSwgMjE3LCA0MSwgCi0gICAgODEsIDYsIDEsIDIxNCwgMjI5LCA4MSwgNCwgMSwgMjE0LCAyMjksIDgxLCA2LCAxLCAyNDQsIDEyMSwgODEsIDQsIDEsIAotICAgIDI0NCwgMTIxLCA4MSwgNiwgMSwgMjM0LCAxMTIsIDgxLCA0LCAxLCAyMzQsIDExMiwgODEsIDYsIDEsIDIyNCwgMTYxLCA4MSwgCi0gICAgNCwgMSwgMjI0LCAxNjEsIDgxLCA2LCAxLCAyMjYsIDE3OCwgODEsIDQsIDEsIDIyNiwgMTc4LCA4MSwgNiwgMSwgMjQ3LCAKLSAgICAyNTMsIDI1NCwgMTcwLCA4MSwgNCwgMSwgMjQ3LCAyNTMsIDI1NCwgMTcwLCA4MSwgNiwgMSwgNTUsIDgxLCAyNTQsIDE5NiwgCi0gICAgODEsIDQsIDEsIDU1LCA4MSwgMjU0LCAxOTYsIDgxLCA2LCAxLCAyNDksIDExNSwgMjQ1LCAxOTQsIDgxLCA0LCAxLCAyNDksIAotICAgIDExNSwgMjQ1LCAxOTQsIDgxLCA2LCAxLCAyNDcsIDI1MywgMjM0LCAyMjcsIDgxLCA0LCAxLCAyNDcsIDI1MywgMjM0LCAKLSAgICAyMjcsIDgxLCA2LCAxLCAyNDcsIDI1MywgMjI4LCAyMzMsIDgxLCA0LCAxLCAyNDcsIDI1MywgMjI4LCAyMzMsIDgxLCA2LCAKLSAgICAxLCAyNDksIDExNSwgMjI4LCAyMzMsIDgxLCA0LCAxLCAyNDksIDExNSwgMjI4LCAyMzMsIDgxLCA2LCAxLCA1NSwgODEsIAotICAgIDIyNiwgMTc4LCA4MSwgNCwgMSwgNTUsIDgxLCAyMjYsIDE3OCwgODEsIDYsIDEsIDIyMSwgMjQ2LCA4MSwgNCwgMSwgMjIxLCAKLSAgICAyNDYsIDgxLCA2LCAxLCAyNDksIDEyOCwgMjIwLCA1NSwgODEsIDQsIDEsIDI0OSwgMTI4LCAyMjAsIDU1LCA4MSwgNiwgMSwgCi0gICAgNTUsIDgxLCAyMjAsIDU1LCA4MSwgNCwgMSwgNTUsIDgxLCAyMjAsIDU1LCA4MSwgNiwgMSwgNTUsIDgxLCAyNDUsIDc1LCAKLSAgICA4MSwgNCwgMSwgNTUsIDgxLCAyNDUsIDc1LCA4MSwgNiwgMSwgMjU0LCAxODIsIDIzNCwgMTE3LCA4MSwgNCwgMSwgMjU0LCAKLSAgICAxODIsIDIzNCwgMTE3LCA4MSwgNiwgMSwgMjQ3LCAyNTMsIDI0MSwgNDUsIDgxLCA0LCAxLCAyNDcsIDI1MywgMjQxLCA0NSwgCi0gICAgODEsIDYsIDEsIDU1LCA4MSwgMjQxLCA0NSwgODEsIDQsIDEsIDU1LCA4MSwgMjQxLCA0NSwgODEsIDYsIDEsIDU1LCA4MSwgCi0gICAgMTYyLCA4MSwgNCwgMSwgNTUsIDgxLCAxNjIsIDgxLCA2LCAxLCAyMzMsIDE0OCwgMTYyLCA4MSwgNCwgMSwgMjMzLCAxNDgsIAotICAgIDE2MiwgODEsIDYsIDEsIDU1LCA4MSwgMjQxLCAyMTcsIDgxLCA0LCAxLCA1NSwgODEsIDI0MSwgMjE3LCA4MSwgNiwgMSwgCi0gICAgNTUsIDgxLCAyNDEsIDI1MSwgODEsIDQsIDEsIDU1LCA4MSwgMjQxLCAyNTEsIDgxLCA2LCAxLCA1NSwgODEsIDI0MywgMTAyLCAKLSAgICA4MSwgNCwgMSwgNTUsIDgxLCAyNDMsIDEwMiwgODEsIDYsIDEsIDU1LCA4MSwgMjQ3LCAxNjMsIDgxLCA0LCAxLCA1NSwgODEsIAotICAgIDI0NywgMTYzLCA4MSwgNiwgMSwgNTUsIDgxLCAyMjAsIDIyLCA4MSwgNCwgMSwgNTUsIDgxLCAyMjAsIDIyLCA4MSwgNiwgMSwgCi0gICAgNTUsIDIyNywgMjA4LCAyMjAsIDIyLCA4MSwgNCwgMSwgNTUsIDIyNywgMjA4LCAyMjAsIDIyLCA4MSwgNiwgMSwgNTUsIAotICAgIDIyNywgMjA4LCAyMjksIDI3LCA4MSwgNCwgMSwgNTUsIDIyNywgMjA4LCAyMjksIDI3LCA4MSwgNiwgMSwgNTUsIDIyNywgCi0gICAgMjA4LCAyMjcsIDE0OCwgODEsIDQsIDEsIDU1LCAyMjcsIDIwOCwgMjI3LCAxNDgsIDgxLCA2LCAxLCA1NSwgMjI3LCAyMDgsIAotICAgIDIxMiwgMzcsIDgxLCA0LCAxLCA1NSwgMjI3LCAyMDgsIDIxMiwgMzcsIDgxLCAxNiwgMjM0LCAyNDYsIDgxLCAxNiwgMjMwLCAKLSAgICAyMzEsIDIyMiwgMjExLCA4MSwgMTYsIDIyNSwgMTA5LCAyMjIsIDIxMSwgODEsIDE2LCAyMTgsIDE0NywgODEsIDE2LCAyMTcsIAotICAgIDQyLCAyMjIsIDIxMSwgODEsIDE2LCAyMzQsIDExMywgMjIyLCAyMTEsIDgxLCAxNiwgMjIwLCAyMywgMjE5LCAxNjUsIDgxLCAKLSAgICA2LCAxLCAyNDksIDExNSwgMjIwLCA1NSwgODEsIDQsIDEsIDI0OSwgMTE1LCAyMjAsIDU1LCA4MSwgNiwgMSwgMjQ5LCAxMTUsIAotICAgIDI0MywgMTAyLCA4MSwgNCwgMSwgMjQ5LCAxMTUsIDI0MywgMTAyLCA4MSwgMzgsIDIyOCwgMjM0LCA0OCwgODEsIDM4LCAKLSAgICAyMTgsIDI0NywgMjUzLCAyMjQsIDgxLCAzOCwgMjE4LCAyNDcsIDIzMywgMjEsIDgxLCA2LCAxLCAyNTEsIDE5OSwgMjM0LCAKLSAgICAxMTcsIDgxLCA0LCAxLCAyNTEsIDE5OSwgMjM0LCAxMTcsIDgxLCA1NSwgMjI3LCAyMDgsIDI0MywgMjI5LCAyMTgsIDEyOSwgCi0gICAgODEsIDU1LCAyMjcsIDIwOCwgMjQ3LCAxOTcsIDIyNCwgMTMsIDc4LCA4MSwgNTUsIDIyNywgMjA4LCAyMzUsIDIzNywgMjI0LCAKLSAgICAxMywgNzgsIDgxLCA1NSwgMjI3LCAyMDgsIDIxMywgMjQxLCAyNDcsIDE3MiwgODEsIDI0NCwgMiwgMTIzLCAyNDIsIDI3LCAKLSAgICA4MSwgMjQzLCAyMjksIDIxOCwgMTI5LCA4MSwgMjMwLCAxMjQsIDI0NywgMTcyLCA5OCwgNCwgMSwgMjU0LCAxMjMsIDk4LCAKLSAgICA0LCAxLCAyNTIsIDE1MiwgOTgsIDQsIDEsIDI0MywgMTA2LCA5OCwgNCwgMSwgMjQ3LCAxMjgsIDk4LCA0LCAxLCAyNDUsIAotICAgIDE1MCwgOTgsIDQsIDEsIDIxMywgMTYwLCA5OCwgNCwgMSwgMjEwLCA4OSwgOTgsIDQsIDEsIDIxNywgNjAsIDk4LCA0LCAxLCAKLSAgICAyMzUsIDI1NSwgOTgsIDQsIDEsIDIzNCwgMjM0LCA5OCwgNCwgMSwgMjMzLCA4MSwgOTgsIDQsIDEsIDIzMSwgMTg1LCA5OCwgCi0gICAgNCwgMSwgMjI5LCAxOTUsIDk4LCA0LCAxLCAyMjYsIDE5NiwgOTgsIDQsIDEsIDIyNiwgMTcsIDk4LCA0LCAxLCAyMTAsIDc4LCAKLSAgICA5OCwgNCwgMSwgMjIzLCAxNzEsIDk4LCA0LCAxLCAyMjEsIDI0MywgOTgsIDQsIDEsIDIxNywgNTAsIDk4LCA0LCAxLCAyMTQsIAotICAgIDE5MCwgOTgsIDQsIDEsIDIyNSwgMTQwLCA5OCwgNCwgMSwgMjM0LCAxMjEsIDk4LCA0LCAxLCAyNDIsIDI0MSwgOTgsIDQsIAotICAgIDEsIDIyNCwgNzMsIDk4LCA0LCAxLCAyMjAsIDIwLCA5OCwgNCwgMSwgMjUwLCA5NywgOTgsIDQsIDEsIDI1MSwgNywgOTgsIAotICAgIDQsIDEsIDIzNSwgMTAwLCA5OCwgNCwgMSwgMjUwLCA0MCwgOTgsIDQsIDEsIDI1MCwgMTQzLCA5OCwgNCwgMSwgMjExLCAKLSAgICAxNjMsIDk4LCA0LCAxLCAyMzUsIDExMSwgOTgsIDQsIDEsIDI0MiwgNDMsIDk4LCA0LCAxLCAyNDEsIDIzOCwgOTgsIDQsIDEsIAotICAgIDI0MSwgMTc1LCA5OCwgNCwgMSwgMjEyLCAyMiwgOTgsIDQsIDEsIDI0MiwgNCwgOTgsIDQsIDEsIDI0MSwgNjUsIDk4LCA0LCAKLSAgICAxLCAyMTAsIDI0NiwgOTgsIDQsIDEsIDI1NCwgMjMyLCAyMTYsIDEwOCwgMSwgMTkxLCAyMTYsIDEwOCwgMSwgMjExLCA5OSwgCi0gICAgMjE2LCAxMDgsIDEsIDIxMSwgOTgsIDIxNiwgMTA4LCAxLCAyMTEsIDg4LCAyMTYsIDEwOCwgMSwgMjExLCA4NiwgMjE2LCAKLSAgICAxMDgsIDEsIDI1MiwgMzIsIDI1NSwgMTYsIDIxMSwgODEsIDIxNiwgMTA4LCAxLCAyMTEsIDgxLCAyMTYsIDEwOCwgMSwgCi0gICAgMjExLCA5NiwgMjE2LCAxMDgsIDEsIDIxMSwgOTMsIDIxNiwgMTA4LCAxLCAyMTEsIDk1LCAyMTYsIDEwOCwgMSwgMjExLCAKLSAgICA5NCwgMjE2LCAxMDgsIDEsIDIxMSwgMTIsIDIxNiwgMTA4LCAxLCAyMTEsIDkwLCAyMTYsIDEwOCwgMSwgMjExLCA3OSwgCi0gICAgMjE2LCAxMDgsIDEsIDIxNSwgMTE1LCAyMTEsIDc5LCAyMTYsIDEwOCwgMSwgMjExLCA3NiwgMjE2LCAxMDgsIDEsIDIxMSwgCi0gICAgODQsIDIxNiwgMTA4LCAxLCAyNTIsIDMyLCAyNTUsIDE2LCAyMTEsIDg0LCAyMTYsIDEwOCwgMSwgMjE1LCAxMTUsIDIxMSwgCi0gICAgODQsIDIxNiwgMTA4LCAxLCAyMTEsIDgzLCAyMTYsIDEwOCwgMSwgMjExLCAxMDMsIDIxNiwgMTA4LCAxLCAyMTEsIDc3LCAKLSAgICAyMTYsIDEwOCwgMSwgMjE1LCAxMTUsIDIxMSwgNzcsIDIxNiwgMTA4LCAxLCAyMTEsIDY2LCAyMTYsIDEwOCwgMSwgMjE1LCAKLSAgICAxMTUsIDIxMSwgNjYsIDIxNiwgMTA4LCAxLCAyMTEsIDgsIDIxNiwgMTA4LCAxLCAyMTEsIDQ5LCAyMTYsIDEwOCwgMSwgCi0gICAgMjU0LCAyMDcsIDIxMSwgNDksIDIxNiwgMTA4LCAxLCAyMTUsIDExNSwgMjExLCA0OSwgMjE2LCAxMDgsIDEsIDIxMSwgNzUsIAotICAgIDIxNiwgMTA4LCAxLCAyMTEsIDc0LCAyMTYsIDEwOCwgMSwgMjExLCA3MSwgMjE2LCAxMDgsIDEsIDIxNSwgMTE1LCAyMTEsIAotICAgIDg1LCAyMTYsIDEwOCwgMSwgMjE1LCAxMTUsIDIxMSwgNjksIDIxNiwgMTA4LCAxLCAyMTEsIDY3LCAyMTYsIDEwOCwgMSwgCi0gICAgMjEwLCAyMTIsIDIxNiwgMTA4LCAxLCAyMTEsIDY0LCAyMTYsIDEwOCwgMSwgMjExLCA2MywgMjE2LCAxMDgsIDEsIDIxMSwgCi0gICAgODcsIDIxNiwgMTA4LCAxLCAyMTUsIDExNSwgMjExLCA4NywgMjE2LCAxMDgsIDEsIDI1MywgMTYzLCAyMTEsIDg3LCAyMTYsIAotICAgIDEwOCwgMSwgMjExLCA2MiwgMjE2LCAxMDgsIDEsIDIxMSwgNjAsIDIxNiwgMTA4LCAxLCAyMTEsIDYxLCAyMTYsIDEwOCwgMSwgCi0gICAgMjExLCA1OSwgMjE2LCAxMDgsIDEsIDIxMSwgNTgsIDIxNiwgMTA4LCAxLCAyMTEsIDk3LCAyMTYsIDEwOCwgMSwgMjExLCAKLSAgICA1NiwgMjE2LCAxMDgsIDEsIDIxMSwgNTQsIDIxNiwgMTA4LCAxLCAyMTEsIDUzLCAyMTYsIDEwOCwgMSwgMjExLCA1MiwgCi0gICAgMjE2LCAxMDgsIDEsIDIxMSwgNTAsIDIxNiwgMTA4LCAxLCAyMTcsIDM0LCAyMTEsIDUwLCAyMTYsIDEwOCwgMSwgMjExLCAKLSAgICA0OCwgMjE2LCAxMDgsIDEsIDIxMSwgNDcsIDIxNiwgMTA4LCAxLCAyMTAsIDI0NCwgMjE2LCAxMDgsIDU4LCAxLCAyMzMsIAotICAgIDEyNiwgNzgsIDIxNiwgMTA4LCAyMjAsIDEzOCwgNzgsIDIxNiwgMTA4LCAxMTYsIDIzNSwgNjMsIDI5LCAzLCAyMzIsIDE1NSwgCi0gICAgMjksIDMsIDIzMCwgMTYwLCAyOSwgMywgMjIyLCAyMDksIDI5LCAzLCAyMTksIDU3LCAyOSwgMywgMjIwLCA2LCAyOSwgMywgCi0gICAgMjUxLCAyMDQsIDI5LCAzLCAyMTYsIDQxLCAyOSwgMywgMjQ5LCAyMzcsIDI5LCAzLCAyMjgsIDcyLCAyOSwgMywgMjI3LCAKLSAgICAxMzMsIDI5LCAzLCAyNDIsIDE4MCwgMjI3LCAwLCAyOSwgMywgMjEwLCAyMiwgMjksIDMsIDI0NywgMTQzLCAyOSwgMywgCi0gICAgMjQ4LCAxMDQsIDI5LCAzLCAyMzUsIDY3LCAyOSwgMywgMjE2LCAxNTUsIDI5LCAzLCAyNTAsIDg1LCAyOSwgMywgMjI1LCAKLSAgICAxMjAsIDI5LCAzLCAyMjUsIDE1LCAyOSwgMywgMjQyLCAyNTUsIDI5LCAzLCAyNDIsIDI1MSwgMjksIDMsIDI0MiwgMjUyLCAKLSAgICAyOSwgMywgMjQyLCAyNTMsIDI5LCAzLCAyMTgsIDIyMywgMjksIDMsIDIxOCwgMTc5LCAyOSwgMywgMjE4LCAxOTIsIDI5LCAKLSAgICAzLCAyMTgsIDIyMiwgMjksIDMsIDIxOCwgMTk2LCAyOSwgMywgMjE4LCAxOTcsIDI5LCAzLCAyMTgsIDE4NCwgMjksIDMsIAotICAgIDI1MCwgMjEzLCAyOSwgMywgMjUwLCAxOTIsIDI5LCAzLCAyNTAsIDE5NCwgMjksIDMsIDI1MCwgMjEyLCAyOSwgMywgMjUwLCAKLSAgICAyMTAsIDI5LCAzLCAyNTAsIDIxMSwgMjksIDMsIDI1MCwgMTkzLCAyOSwgMywgMjA5LCAyNDMsIDI5LCAzLCAyMDksIDIyMSwgCi0gICAgMjksIDMsIDIwOSwgMjM0LCAyOSwgMywgMjA5LCAyNDIsIDI5LCAzLCAyMDksIDIzNywgMjksIDMsIDIwOSwgMjM4LCAyOSwgCi0gICAgMywgMjA5LCAyMjYsIDI5LCAzLCAyNTAsIDIwOCwgMjksIDMsIDI1MCwgMTk1LCAyOSwgMywgMjUwLCAxOTcsIDI5LCAzLCAKLSAgICAyNTAsIDIwNywgMjksIDMsIDI1MCwgMjA1LCAyOSwgMywgMjUwLCAyMDYsIDI5LCAzLCAyNTAsIDE5NiwgMjksIDMsIDIyMywgCi0gICAgMjM2LCAyOSwgMywgMjIzLCAyMjYsIDI5LCAzLCAyMjMsIDIzMiwgMjksIDMsIDIyMywgMjM1LCAyOSwgMywgMjIzLCAyMzMsIAotICAgIDI5LCAzLCAyMjMsIDIzNCwgMjksIDMsIDIyMywgMjMxLCAyOSwgMywgMjMzLCAxNTksIDI5LCAzLCAyMzMsIDE1MSwgMjksIAotICAgIDMsIDIzMywgMTU0LCAyOSwgMywgMjMzLCAxNTgsIDI5LCAzLCAyMzMsIDE1NSwgMjksIDMsIDIzMywgMTU2LCAyOSwgMywgCi0gICAgMjMzLCAxNTIsIDI5LCAzLCAyMTEsIDEzMCwgMjksIDMsIDIxMSwgMTIwLCAyOSwgMywgMjExLCAxMjYsIDI5LCAzLCAyMTEsIAotICAgIDEyOSwgMjksIDMsIDIxMSwgMTI3LCAyOSwgMywgMjExLCAxMjgsIDI5LCAzLCAyMTEsIDEyNSwgMjksIDMsIDI0MiwgNzEsIAotICAgIDI5LCAzLCAyNDIsIDYyLCAyOSwgMywgMjQyLCA2NSwgMjksIDMsIDI0MiwgNzAsIDI5LCAzLCAyNDIsIDY3LCAyOSwgMywgCi0gICAgMjQyLCA2OCwgMjksIDMsIDI0MiwgNjQsIDM4LCAzMywgMSwgMjUyLCA3NSwgMzgsIDMzLCAxLCAyMTMsIDI1NSwgMzgsIDMzLCAKLSAgICAxLCAyNDIsIDIzNiwgMzgsIDMzLCAxLCAyNDgsIDkwLCAzOCwgMzMsIDEsIDIxMCwgNzQsIDM4LCAzMywgMSwgMjEwLCA5NCwgCi0gICAgMzgsIDMzLCAxLCAxNzYsIDM4LCAzMywgMSwgMjQ1LCAxNzQsIDM4LCAzMywgMSwgMjQ1LCAxNTksIDM4LCAzMywgMSwgMjQ1LCAKLSAgICAxNTAsIDM4LCAzMywgMSwgNzYsIDM4LCAzMywgMSwgMjI1LCAyMjEsIDM4LCAzMywgMSwgMjQ1LCA5MiwgMzgsIDMzLCAxLCAKLSAgICAyNDUsIDgyLCAzOCwgMzMsIDEsIDIxNywgMjIsIDM4LCAzMywgMSwgMTYyLCAzOCwgMzMsIDEsIDIxNSwgMTc4LCAzOCwgMzMsIAotICAgIDEsIDI1MCwgMTMxLCAzOCwgMzMsIDEsIDIyMCwgMTAyLCAzOCwgMzMsIDEsIDIyMCwgNjUsIDM4LCAzMywgMSwgMjQ0LCA4MiwgCi0gICAgMzgsIDMzLCAxLCAyNDUsIDgxLCAzOCwgMzMsIDEsIDYxLCAzOCwgMzMsIDEsIDIzNiwgNjAsIDM4LCAzMywgMSwgMjQ3LCAKLSAgICAxNjEsIDM4LCAzMywgMSwgMjMwLCAxNDAsIDIxNCwgMjA1LCAzOCwgMzMsIDEsIDIxMSwgNTksIDM4LCAzMywgMSwgMjEwLCAKLSAgICAyMTIsIDM4LCAzMywgMSwgMjM1LCAxODMsIDYxLCAzOCwgMzMsIDEsIDIzMiwgMTkyLCAyMTAsIDE4MywgMzgsIDMzLCAxLCAKLSAgICAyNTEsIDI0OSwgMjEwLCAxODMsIDM4LCAzMywgMSwgMjM1LCAxODMsIDI1MSwgMjQ5LCAyMTAsIDE4MywgNDQsIDI1NCwgCi0gICAgMTEwLCAyMTgsIDYwLCAyMzEsIDE1NCwgNDQsIDI1NCwgMTEwLCAyNDYsIDExOCwgMjE4LCA2MCwgMjMxLCAxNTQsIDQzLCAKLSAgICAyMTgsIDYwLCAxMjcsIDQ0LCAyMTgsIDYwLCAxMjcsIDQzLCAyNDYsIDExOCwgMjE4LCA2MCwgMTI3LCA0NCwgMjQ2LCAxMTgsIAotICAgIDIxOCwgNjAsIDEyNywgMjIzLCAxNTcsIDIzNSwgMjAyLCAyMzEsIDE1NCwgMjIzLCAxNTcsIDI0NiwgMTE4LCAyMzUsIDIwMiwgCi0gICAgMjMxLCAxNTQsIDI0NiwgMTE4LCAyMTUsIDI0MSwgMjMxLCAxNTQsIDQzLCAyMTUsIDI0MSwgMTI3LCA0NCwgMjE1LCAyNDEsIAotICAgIDEyNywgMjIzLCAxNTcsIDIxOCwgMjM0LCA0MywgMjIzLCAxNTcsIDIyNiwgMTk4LCAxMjcsIDQ0LCAyMjMsIDE1NywgMjI2LCAKLSAgICAxOTgsIDEyNywgMjQ1LCAyMTAsIDI0OSwgMTU4LCAyMjYsIDEzLCAyNDQsIDIyLCAyMjYsIDEzLCAyMjMsIDQ5LCAyNDQsIAotICAgIDIyLCAyMjYsIDEzLCAyNDAsIDE2NSwgMjQ2LCAxMTgsIDIyNiwgMjUxLCAyNDYsIDEwNCwgMjU0LCAxMTksIDIxNCwgMTUzLCAKLSAgICAyNTQsIDExOSwgMjQ2LCAxMTgsIDIyMiwgMjQ3LCAyNTQsIDEwOSwgNTIsIDIyNiwgMjQ4LCAyNDAsIDE2OCwgMjM1LCAxOTMsIAotICAgIDIzNSwgMjAxLCAyMjYsIDU5LCAyNTEsIDE1NCwgMjQwLCAxNjksIDIsIDI0OCwgMSwgMjE2LCA4OSwgMiwgMjIyLCAyMzQsIAotICAgIDQ4LCA0MywgMTIxLCAyMjYsIDUsIDEyNywgNDQsIDEyMSwgMjI2LCA1LCAxMjcsIDIxNiwgODksIDIsIDU5LCA0OCwgMjE2LCAKLSAgICA4OSwgMiwgNTksIDUxLCA0MywgNjcsIDI1MiwgMTQxLCAyLCAyMjQsIDcsIDQ0LCA2NywgMjUyLCAxNDEsIDIsIDIyNCwgNywgCi0gICAgMjE2LCAxNCwgNDMsIDE2MywgMTI3LCAyMTYsIDE0LCA0NCwgMTYzLCAxMjcsIDI1MSwgMTc1LCA0MywgMTYzLCAxMjcsIAotICAgIDI1MSwgMTc1LCA0NCwgMTYzLCAxMjcsIDQzLCAyMTksIDE4NywgMTA0LCAxMjcsIDQ0LCAyMTksIDE4NywgMTA0LCAxMjcsIAotICAgIDQzLCA1MiwgMjI2LCAzLCA0NCwgNTIsIDIyNiwgMywgMTEzLCAxNzAsIDExNywgMTIzLCA1OSwgMjI0LCAxNDAsIDEyMywgCi0gICAgNTksIDExNywgMTEzLCAxNzAsIDIyNCwgMTQwLCA5MiwgMjQ0LCAxMSwgNTksIDIyNCwgMTQwLCAyNDQsIDgxLCA1OSwgNzgsIAotICAgIDIyMywgNDksIDIyNCwgMTMsIDc4LCA2NywgMTgyLCAyMjIsIDIzNCwgMjI1LCAxMCwgMjExLCAyMDksIDIyMCwgMTM4LCAKLSAgICAyMzAsIDIyNCwgMjQ3LCAxMjAsIDIxNSwgOTQsIDI0OSwgMjE5LCAyMjMsIDE1NywgMjQ3LCAxMjAsIDIyMywgMTU3LCAyNDksIAotICAgIDIxOSwgMjE1LCA5NCwgMjIwLCAxNTAsIDI0OCwgMjA2LCAyLCA0MywgMjQyLCAxMDgsIDI0OCwgMjA2LCAyLCA0NCwgMjQyLCAKLSAgICAxMDgsIDIxNSwgOTQsIDI0OCwgMjA1LCAyMTYsIDE0LCAxNjMsIDIyMSwgMTczLCA1MCwgMjE1LCA1OSwgMjQ4LCAxNTYsIAotICAgIDIxNiwgMTQzLCAyNDgsIDE1NiwgOSwgMzQsIDIyMywgNzYsIDksIDM0LCAyNTAsIDEwLCA5LCAzNCwgMjIxLCAxNzYsIDExMCwgCi0gICAgOSwgMzQsIDIyMSwgMTc2LCAxMDUsIDksIDM0LCAyMjEsIDE3NiwgMTU4LCA5LCAzNCwgMjI1LCAxNjcsIDksIDM0LCAyNTEsIAotICAgIDE2MywgOSwgMzQsIDIxNywgOTIsIDksIDM0LCAyMzQsIDMzLCAxMTAsIDksIDM0LCAyMzQsIDMzLCAxMDUsIDksIDM0LCAKLSAgICAyNDcsIDE3MCwgOSwgMzQsIDIyMSwgMTc5LCA5LCAzNCwgNCwgMTEwLCA5LCAzNCwgNCwgMTA1LCA5LCAzNCwgMjMzLCA5NywgCi0gICAgMTEwLCA5LCAzNCwgMjMzLCA5NywgMTA1LCA5LCAzNCwgMjMzLCA5NywgMTU4LCA5LCAzNCwgMjMzLCA5NywgMTYxLCA5LCAKLSAgICAzNCwgMjE5LCA2OCwgOSwgMzQsIDIxNiwgMTQ1LCA5LCAzNCwgMjE5LCA2NiwgMTEwLCA5LCAzNCwgMjE5LCA2NiwgMTA1LCAKLSAgICA5LCAzNCwgMjQxLCAyMjgsIDExMCwgOSwgMzQsIDI0MSwgMjI4LCAxMDUsIDksIDM0LCAyNDIsIDE1LCA5LCAzNCwgMjIzLCAKLSAgICAxNDcsIDksIDM0LCAyNTAsIDgyLCA5LCAzNCwgMjE4LCAzNywgOSwgMzQsIDIzMCwgMTI4LCA5LCAzNCwgMjQ4LCA4OCwgOSwgCi0gICAgMzQsIDIzMCwgMTIwLCA5LCAzNCwgMjUwLCAyNSwgOSwgMzQsIDIxMiwgNDEsIDExMCwgOSwgMzQsIDIxMiwgNDEsIDEwNSwgCi0gICAgOSwgMzQsIDI0NCwgOTYsIDksIDM0LCAyMjUsIDIzMiwgMTEwLCA5LCAzNCwgMjI1LCAyMzIsIDEwNSwgOSwgMzQsIDIxOSwgCi0gICAgMTYwLCAxNjMsIDIxNSwgMjM2LCAyMTUsIDE4OCwgOSwgMzQsIDI0OSwgMTQ1LCA5LCAzNCwgMjQ3LCAxMzYsIDksIDM0LCAKLSAgICAyMzUsIDEzNywgOSwgMzQsIDI1MSwgMTk4LCA2NCwgMjQ5LCAyNTAsIDksIDM0LCAyNDUsIDE1LCA5LCAzNCwgMjE4LCAyNDksIAotICAgIDExMCwgOSwgMzQsIDIxOCwgMjQ5LCAxMDUsIDksIDM0LCAyNTIsIDE1NCwgOSwgMzQsIDIxOSwgMTY3LCA5LCAzNCwgMjUxLCAKLSAgICA2MywgMjE5LCAxNjcsIDksIDM0LCAyMjksIDkwLCAxMTAsIDksIDM0LCAyMjksIDkwLCAxMDUsIDksIDM0LCAyMjksIDkwLCAKLSAgICAxNTgsIDksIDM0LCAyMjksIDkwLCAxNjEsIDksIDM0LCAyMzEsIDQ2LCA5LCAzNCwgMjIwLCA1NywgOSwgMzQsIDIyMywgCi0gICAgMTUzLCA5LCAzNCwgMjQ1LCAzNywgOSwgMzQsIDIyNiwgMjA5LCA5LCAzNCwgMjUxLCAxMzMsIDExMCwgOSwgMzQsIDI1MSwgCi0gICAgMTMzLCAxMDUsIDksIDM0LCAyMzEsIDg2LCA5LCAzNCwgMjMwLCAxMjMsIDksIDM0LCAyNDIsIDE0MCwgMTEwLCA5LCAzNCwgCi0gICAgMjQyLCAxNDAsIDEwNSwgOSwgMzQsIDI0MiwgMTQwLCAxNTgsIDksIDM0LCAyMTYsIDEwNiwgOSwgMzQsIDI0OSwgMjQ5LCA5LCAKLSAgICAzNCwgMjEyLCA5LCAxMTAsIDksIDM0LCAyMTIsIDksIDEwNSwgOSwgMzQsIDI1MSwgNjMsIDIyMSwgMTcwLCA5LCAzNCwgCi0gICAgMjE5LCAxNjAsIDI0MCwgMjQ4LCA5LCAzNCwgMjQwLCAyNDgsIDksIDM0LCAyNTEsIDYzLCAyMTksIDIsIDksIDM0LCAyNTEsIAotICAgIDYzLCAyMjAsIDUyLCA5LCAzNCwgMjQ0LCAzMiwgOSwgMzQsIDI1MSwgNjMsIDI1MCwgMjI4LCA5LCAzNCwgMjE5LCAxNjAsIAotICAgIDIxMiwgNTcsIDksIDM0LCAyMTIsIDU4LCAxMTAsIDksIDM0LCAyMTIsIDU4LCAxMDUsIDksIDM0LCAyNTAsIDI3LCA5LCAzNCwgCi0gICAgMjUxLCA2MywgMjQyLCAxNjYsIDksIDM0LCAxOTksIDExMCwgOSwgMzQsIDE5OSwgMTA1LCA5LCAzNCwgMjUxLCA2MywgMjMyLCAKLSAgICAxMzcsIDksIDM0LCAyNTEsIDYzLCAyNDMsIDg4LCA5LCAzNCwgMjMwLCAxMTksIDExMCwgOSwgMzQsIDIzMCwgMTE5LCAxMDUsIAotICAgIDksIDM0LCAyMjMsIDE1OSwgOSwgMzQsIDI1MSwgMjA3LCA5LCAzNCwgMjUxLCA2MywgMjE3LCA1NiwgMjMzLCA1MiwgOSwgCi0gICAgMzQsIDI1MSwgNjMsIDIzMywgNTMsIDksIDM0LCAyNTEsIDYzLCAyMTEsIDIzOSwgOSwgMzQsIDI1MSwgNjMsIDI0NCwgNDYsIAotICAgIDksIDM0LCAyNDUsIDIxOCwgMTEwLCA5LCAzNCwgMjQ1LCAyMTgsIDEwNSwgOSwgMzQsIDI0NSwgMjE4LCAxNTgsIDksIDM0LCAKLSAgICAyNTEsIDYzLCAyNDUsIDIxNywgOSwgMzQsIDI0MSwgMjM1LCA5LCAzNCwgMjUxLCA2MywgMjQwLCAyNDUsIDksIDM0LCAyNTEsIAotICAgIDE5NCwgOSwgMzQsIDI0MiwgMjIyLCA5LCAzNCwgMjUxLCA2MywgMjQ0LCA5MCwgOSwgMzQsIDI1MSwgNjMsIDI1MSwgMjM3LCAKLSAgICA5LCAzNCwgMjUxLCA2MywgMjIyLCAxLCA5LCAzNCwgMjE5LCAxNjAsIDIxMiwgMiwgOSwgMzQsIDIxOSwgMTYwLCAyMTEsIAotICAgIDQxLCA5LCAzNCwgMjUxLCA2MywgMjQzLCAyNDQsIDksIDM0LCAyMzUsIDE0MywgMjQ1LCA0MSwgOSwgMzQsIDI1MSwgNjMsIAotICAgIDI0NSwgNDEsIDksIDM0LCAyMzUsIDE0MywgMjE2LCAxNSwgOSwgMzQsIDI1MSwgNjMsIDIxNiwgMTUsIDksIDM0LCAyMzUsIAotICAgIDE0MywgMjQ2LCA5NiwgOSwgMzQsIDI1MSwgNjMsIDI0NiwgOTYsIDksIDM0LCAyMTUsIDkxLCA5LCAzNCwgMjM1LCAxNDMsIAotICAgIDIxNSwgOTEsIDksIDM0LCAyNTEsIDYzLCAyMTUsIDkxLCA2MCwgMzQsIDExMCwgNjAsIDM0LCAyMzIsIDIxMywgNjAsIDM0LCAKLSAgICAyNDcsIDEyMCwgNjAsIDM0LCAyMTksIDk1LCA2MCwgMzQsIDIyMSwgMTc1LCA2MCwgMzQsIDEwMywgNjAsIDM0LCAxMDUsIAotICAgIDYwLCAzNCwgMjMyLCAyMzcsIDYwLCAzNCwgMjMxLCAxODUsIDYwLCAzNCwgMjMzLCAzMywgNjAsIDM0LCAyNDUsIDEyOSwgCi0gICAgNjAsIDM0LCAxOTUsIDYwLCAzNCwgMTI0LCAyNTEsIDE2MywgNjAsIDM0LCAyNDksIDE0NywgNjAsIDM0LCAyNDAsIDExMSwgCi0gICAgNjAsIDM0LCAyMTcsIDkyLCA2MCwgMzQsIDIwNCwgMjUxLCAxNjMsIDYwLCAzNCwgMjM0LCAzMiwgNjAsIDM0LCAyMjQsIAotICAgIDIyNCwgNjAsIDM0LCAyMTEsIDIwMiwgNjAsIDM0LCAyMTgsIDI0MywgNjAsIDM0LCA0NCwgMjA0LCAyNTEsIDE2MywgNjAsIAotICAgIDM0LCAyNDEsIDE3NiwgMjQ1LCAxNDUsIDYwLCAzNCwgMjE2LCAyNDcsIDYwLCAzNCwgMjQ3LCAxNzAsIDYwLCAzNCwgMjIxLCAKLSAgICAxNzksIDYwLCAzNCwgMjUwLCAxMCwgNjAsIDM0LCAyMjQsIDE4MiwgNjAsIDM0LCAyNTQsIDIxNSwgNjAsIDM0LCAyMzAsIAotICAgIDExMCwgNjAsIDM0LCAyNDUsIDE0NSwgNjAsIDM0LCAyNDUsIDIyMywgNjAsIDM0LCAyMjEsIDIwMCwgNjAsIDM0LCAyNDIsIAotICAgIDE3NCwgNjAsIDM0LCAyNDIsIDE3NSwgMjE5LCA4MSwgNjAsIDM0LCAyNDUsIDQwLCA2MCwgMzQsIDI1MSwgMjQ4LCA2MCwgCi0gICAgMzQsIDIxMSwgMjIxLCA2MCwgMzQsIDI1MCwgMTAxLCA2MCwgMzQsIDIyMiwgMTk2LCA2MCwgMzQsIDIzNSwgMjUxLCA2MCwgCi0gICAgMzQsIDIxOSwgNzksIDYwLCAzNCwgMjMzLCA5NiwgNjAsIDM0LCAyNDksIDE1NiwgNjAsIDM0LCAyMTgsIDIzNywgNjAsIDM0LCAKLSAgICAyMzAsIDExNSwgNjAsIDM0LCAyMjIsIDIyNCwgNjAsIDM0LCAyMTEsIDIwNiwgNjAsIDM0LCAyMjYsIDE5MCwgNjAsIDM0LCAKLSAgICAyMTUsIDk3LCA2MCwgMzQsIDI0NiwgODAsIDYwLCAzNCwgMjE5LCAyNTEsIDIxNiwgMTQ1LCA2MCwgMzQsIDI0NiwgMTE4LCAKLSAgICAyNTAsIDEwLCA2MCwgMzQsIDE5OSwgMjE4LCAxMDgsIDYwLCAzNCwgMTEzLCAyNDIsIDEwLCA2MCwgMzQsIDIyMCwgMCwgNjAsIAotICAgIDM0LCAyNTEsIDE2OSwgNjAsIDM0LCAyMTksIDY1LCA2MCwgMzQsIDI1MSwgMTM3LCA2MCwgMzQsIDIxOCwgMTM4LCA2MCwgCi0gICAgMzQsIDI0MSwgMjI3LCA2MCwgMzQsIDI0MiwgMjgsIDYwLCAzNCwgMjQ3LCAxMjMsIDYwLCAzNCwgMjQyLCAxNSwgNjAsIDM0LCAKLSAgICAyNTEsIDE1NCwgNjAsIDM0LCAyMjMsIDE0NywgNjAsIDM0LCAyMjEsIDE4NywgNjAsIDM0LCAyNDcsIDE5OSwgNjAsIDM0LCAKLSAgICAyNTMsIDE2OCwgNjAsIDM0LCAyMTgsIDIzNCwgNjAsIDM0LCAyMjgsIDUxLCA2MCwgMzQsIDIxOCwgMzcsIDYwLCAzNCwgCi0gICAgMjIxLCAyMTEsIDYwLCAzNCwgMjMwLCAxMjgsIDYwLCAzNCwgMjE1LCAyMzUsIDYwLCAzNCwgMjMzLCAxMjIsIDYwLCAzNCwgCi0gICAgMjE4LCAxMjksIDYwLCAzNCwgMjQ4LCA4OCwgNjAsIDM0LCAyMTIsIDIxLCA2MCwgMzQsIDI0NywgMTQ2LCAyMjgsIDUxLCAKLSAgICA2MCwgMzQsIDI0OSwgMjE1LCA2MCwgMzQsIDI0MywgMjIyLCA2MCwgMzQsIDI1MCwgMjEsIDYwLCAzNCwgMjE4LCAxNDIsIAotICAgIDYwLCAzNCwgMjEyLCA0MCwgNjAsIDM0LCAyNDQsIDk2LCA2MCwgMzQsIDI1MCwgMTgsIDYwLCAzNCwgMjQ0LCAxNjEsIDYwLCAKLSAgICAzNCwgNTIsIDIxMSwgMTc4LCA2MCwgMzQsIDE2MywgMjE1LCAyMzYsIDIxNSwgMTg4LCA2MCwgMzQsIDIxOSwgODksIDYwLCAKLSAgICAzNCwgMjQ0LCAxNzEsIDYwLCAzNCwgMjQ5LCAxNDUsIDYwLCAzNCwgMjQ3LCAxMzYsIDYwLCAzNCwgMjI0LCAxNzksIDYwLCAKLSAgICAzNCwgMjM1LCAxMzcsIDYwLCAzNCwgMjMxLCA2NywgNjAsIDM0LCAyMTYsIDg4LCA2MCwgMzQsIDIxNywgMjQ1LCA2MCwgMzQsIAotICAgIDIzMiwgMjMxLCA2MCwgMzQsIDIxNCwgMTMxLCA2MCwgMzQsIDI0NCwgMTIwLCA2MCwgMzQsIDI1MSwgMTk4LCA2NCwgMjQ5LCAKLSAgICAyNTAsIDYwLCAzNCwgMjE5LCAxODgsIDYwLCAzNCwgMjQ2LCAxMTgsIDIxNiwgMjQyLCA2MCwgMzQsIDIxMSwgMjUzLCA2MCwgCi0gICAgMzQsIDIxOSwgMTAzLCA2MCwgMzQsIDI0NywgMTg3LCA2MCwgMzQsIDI0NSwgMTUsIDYwLCAzNCwgMjE5LCA1LCA2MCwgMzQsIAotICAgIDc0LCA2MCwgMzQsIDIxOCwgMTMxLCA2MCwgMzQsIDIxOCwgMjQ4LCA2MCwgMzQsIDIxNSwgMjU1LCA2MCwgMzQsIDI0MiwgCi0gICAgMTQ3LCA2MCwgMzQsIDI1MCwgMjE4LCA2MCwgMzQsIDIxOCwgMTYwLCA2MCwgMzQsIDI1MiwgMTU0LCA2MCwgMzQsIDIyMywgCi0gICAgMzEsIDYwLCAzNCwgMjE5LCAxNjcsIDYwLCAzNCwgMjM1LCAxMzAsIDYwLCAzNCwgMjI5LCA4OSwgNjAsIDM0LCAyMjAsIDU3LCAKLSAgICA2MCwgMzQsIDI0NCwgMTQ5LCA2MCwgMzQsIDIyNiwgMjA5LCA2MCwgMzQsIDI1NCwgMTE4LCA2MCwgMzQsIDIyNSwgMjksIAotICAgIDYwLCAzNCwgMjQ1LCAyMjcsIDYwLCAzNCwgMjUxLCAxMzIsIDYwLCAzNCwgMjMxLCA4NiwgNjAsIDM0LCAyMzAsIDE4MywgCi0gICAgNjAsIDM0LCAyMjAsIDE1NiwgNjAsIDM0LCAyNTMsIDI1MiwgNjAsIDM0LCAyMzAsIDEyMywgNjAsIDM0LCAyMTYsIDE5LCAKLSAgICA2MCwgMzQsIDIyNiwgMTY1LCA2MCwgMzQsIDI1MSwgMjAxLCA2MCwgMzQsIDIxOCwgMTI3LCA2MCwgMzQsIDI0OSwgMjI1LCAKLSAgICA2MCwgMzQsIDI0MiwgMTM5LCA2MCwgMzQsIDIxNiwgMTA2LCA2MCwgMzQsIDIzNSwgMjE3LCA2MCwgMzQsIDI1MSwgMjExLCAKLSAgICA2MCwgMzQsIDIxMiwgNTgsIDI0NSwgMTQ1LCA2MCwgMzQsIDI0OSwgMjQ5LCA2MCwgMzQsIDIxMiwgOCwgNjAsIDM0LCAyMjEsIAotICAgIDE3MCwgNjAsIDM0LCAyNDAsIDI0OCwgNjAsIDM0LCAyMTksIDIsIDYwLCAzNCwgMjE0LCAyMiwgNjAsIDM0LCAyNTIsIDcyLCAKLSAgICA2MCwgMzQsIDIyNSwgNzMsIDYwLCAzNCwgMjUyLCAxNzQsIDYwLCAzNCwgMjIwLCA1MiwgNjAsIDM0LCAyMjMsIDExMCwgNjAsIAotICAgIDM0LCAyMjIsIDEyNiwgNjAsIDM0LCAyNDQsIDMyLCA2MCwgMzQsIDI1MSwgMjAwLCA2MCwgMzQsIDI1MCwgMjI4LCA2MCwgCi0gICAgMzQsIDI1MSwgMjI2LCA2MCwgMzQsIDIzMCwgMTI1LCA2MCwgMzQsIDIxMiwgNTcsIDYwLCAzNCwgMjUwLCAyNywgNjAsIDM0LCAKLSAgICAyMTEsIDIzNiwgNjAsIDM0LCAyNDcsIDE4MCwgNjAsIDM0LCAyMTMsIDE2MSwgNjAsIDM0LCAyNDIsIDE2NiwgNjAsIDM0LCAKLSAgICAyMzIsIDEzNywgNjAsIDM0LCAyNDMsIDg4LCA2MCwgMzQsIDIzMCwgMTE4LCA2MCwgMzQsIDIxOSwgOTQsIDYwLCAzNCwgCi0gICAgMjE5LCAyNTEsIDIxNywgNzYsIDI1MSwgMjM3LCA2MCwgMzQsIDIyMywgMTU5LCA2MCwgMzQsIDI1MSwgMjA3LCA2MCwgMzQsIAotICAgIDIxMSwgMTk3LCA2MCwgMzQsIDI0NCwgMTkwLCA2MCwgMzQsIDIzMywgNTIsIDYwLCAzNCwgMjE3LCA1NiwgMjMzLCA1MiwgCi0gICAgNjAsIDM0LCAyMzMsIDQ4LCA2MCwgMzQsIDIxOSwgMzAsIDYwLCAzNCwgMjMzLCA1MywgNjAsIDM0LCAyMTEsIDIzOSwgNjAsIAotICAgIDM0LCAyNDQsIDQ2LCA2MCwgMzQsIDI0NSwgMjE3LCA2MCwgMzQsIDI0MSwgMjM1LCA2MCwgMzQsIDI0NCwgMCwgNjAsIDM0LCAKLSAgICAyNDAsIDI0NSwgNjAsIDM0LCAyNTEsIDE5NCwgNjAsIDM0LCAyMTcsIDYzLCA2MCwgMzQsIDI0MiwgMzQsIDYwLCAzNCwgCi0gICAgMjQ0LCAxMTMsIDYwLCAzNCwgMjIyLCAyOCwgMjExLCAyMzYsIDYwLCAzNCwgMjUwLCAyMjAsIDYwLCAzNCwgMjQyLCAyMjIsIAotICAgIDYwLCAzNCwgMjQ0LCA5MCwgNjAsIDM0LCAyNTEsIDIzNywgNjAsIDM0LCAyMjIsIDEsIDYwLCAzNCwgMjQ4LCA3NCwgNjAsIAotICAgIDM0LCAyMTIsIDIsIDYwLCAzNCwgMjQxLCAyMTAsIDYwLCAzNCwgMjExLCA0MSwgNjAsIDM0LCAyMzAsIDE5MiwgNjAsIDM0LCAKLSAgICAyNTEsIDIyMSwgNjAsIDM0LCAyNDUsIDE1NSwgNjAsIDM0LCAyNDMsIDI0NCwgNjAsIDM0LCAyMTUsIDIwOSwgNjAsIDM0LCAKLSAgICAyNDYsIDgyLCA2MCwgMzQsIDIyMywgMTQxLCA2MCwgMzQsIDIyOCwgNTMsIDYwLCAzNCwgMjQ1LCA0MSwgNjAsIDM0LCAyMTYsIAotICAgIDE1LCA2MCwgMzQsIDI0NiwgOTYsIDYwLCAzNCwgMjE1LCA5MSwgNjAsIDM0LCAyNDQsIDQ4LCAxMDksIDI0OCwgMzcsIDEzNSwgCi0gICAgNDMsIDIxNiwgNDIsIDIyMiwgMjUxLCAxMDksIDI0OCwgMzcsIDEzNSwgNzcsIDIxNiwgNDIsIDUxLCAxMDksIDI0OCwgMzcsIAotICAgIDEzNSwgNDMsIDIxNiwgNDIsIDIzMCwgMjI0LCAyMiwgMjIyLCAyNTEsIDEwOSwgMjQ4LCAzNywgMTM1LCA3NywgMjE2LCA0MiwgCi0gICAgMjMwLCAyMjQsIDIyLCA1MSwgMTA5LCAyNDgsIDM3LCAxMzUsIDI0MywgMjI5LCAyMTgsIDEwLCAxMDksIDI0OCwgMzcsIAotICAgIDEzNSwgMjE4LCAxMSwgMjQzLCAyNDMsIDQ4LCAxMDksIDI0OCwgMzcsIDEzNSwgMjE4LCAxMSwgMjQzLCAyNDMsIDUxLCAKLSAgICAxMDksIDI0OCwgMzcsIDEzNSwgMjE4LCAxMSwgMjQzLCAyNDMsIDIzMywgNDYsIDEwOSwgMjQ4LCAzNywgMTM1LCAyMTgsIAotICAgIDExLCAyNDMsIDI0MywgMjE0LCAxNjAsIDIzMywgNDYsIDEwOSwgMjQ4LCAzNywgMTM1LCAyMTgsIDExLCAyNDMsIDI0MywgCi0gICAgMjE0LCAxNjAsIDIyMiwgMjUxLCAxMDksIDI0OCwgMzcsIDEzNSwgMjE4LCAxMSwgMjQzLCAyNDMsIDIzMiwgMTA4LCAyMzMsIAotICAgIDQ2LCAxMDksIDI0OCwgMzcsIDEzNSwgMjI2LCAxMjIsIDEwOSwgMjE5LCAxOCwgMTA5LCAyNDksIDIxOSwgMTA5LCAyNDMsIAotICAgIDIyOSwgMjE4LCAxMjksIDI0NywgMTc3LCA3OCwgMjM1LCAxMzEsIDIzNSwgMjM2LCAyMTgsIDE1OSwgODcsIDEwOSwgMjM1LCAKLSAgICAxNTgsIDc4LCAxMDksIDI0OSwgMjUyLCA3OCwgMTA5LCA1NCwgMjEwLCA4NiwgNDMsIDI1NCwgMTEwLCAxMjcsIDQ0LCAyNTQsIAotICAgIDExMCwgMTI3LCA0MywgNTIsIDI1NCwgMTEwLCAxMjcsIDQ0LCA1MiwgMjU0LCAxMTAsIDEyNywgNDMsIDI0OSwgMTYxLCAKLSAgICAxMjcsIDQ0LCAyNDksIDE2MSwgMTI3LCA0MywgNzEsIDI0OSwgMTYxLCAxMjcsIDQ0LCA3MSwgMjQ5LCAxNjEsIDEyNywgNDMsIAotICAgIDg1LCAyMzMsIDIwLCAxMjcsIDQ0LCA4NSwgMjMzLCAyMCwgMTI3LCAyMjQsIDIzNywgNzgsIDI0MywgMzIsIDc4LCA0MywgCi0gICAgMjE2LCA2LCAyMjAsIDUzLCAxMjcsIDQ0LCAyMTYsIDYsIDIyMCwgNTMsIDEyNywgNDMsIDcxLCAyMzMsIDIwLCAxMjcsIDQ0LCAKLSAgICA3MSwgMjMzLCAyMCwgMTI3LCA0MywgNzEsIDIxNiwgNiwgMjIwLCA1MywgMTI3LCA0NCwgNzEsIDIxNiwgNiwgMjIwLCA1MywgCi0gICAgMTI3LCA0MywgNzEsIDQyLCAxMjcsIDQ0LCA3MSwgNDIsIDEyNywgMjEyLCAzNiwgMjQ4LCAxNTYsIDIyMywgNDksIDUyLCAKLSAgICAyMjQsIDE5MSwgMjIzLCAyNTQsIDc4LCA1MiwgMjI0LCAxOTEsIDIyMywgMjU0LCA3OCwgMTIxLCA1MiwgMjI0LCAxOTEsIAotICAgIDIyMywgMjU0LCA3OCwgMjI0LCAyMzcsIDE2NCwgMjQ0LCAxOTAsIDI0MiwgOCwgMjI3LCAxOTgsIDExMCwgMjQyLCA4LCAKLSAgICAyMjcsIDE5OCwgMTA1LCAyNDIsIDgsIDIyNywgMTk4LCAxNTgsIDI0MiwgOCwgMjI3LCAxOTgsIDE2MSwgMjQyLCA4LCAyMjcsIAotICAgIDE5OCwgMTg5LCAyNDIsIDgsIDIyNywgMTk4LCAxOTQsIDI0MiwgOCwgMjI3LCAxOTgsIDE5OCwgMjQyLCA4LCAyMjcsIDE5OCwgCi0gICAgMTk1LCAyNDIsIDgsIDIyNywgMTk4LCAyMDAsIDEwOSwgMjMzLCAzLCAxMzgsIDc4LCAxMDksIDIyMiwgMjI4LCAxMzgsIDc4LCAKLSAgICAxMDksIDI0OCwgNDQsIDEzOCwgNzgsIDEwOSwgMjQ1LCAxMjgsIDEzOCwgNzgsIDI0LCAyMTksIDE1NSwgNTksIDEzOCwgNzgsIAotICAgIDI0LCA1MiwgNTksIDEzOCwgNzgsIDIxMiwgMzIsIDI0OCwgMTU2LCA2NywgMjM0LCAyMzMsIDIyMywgNzcsIDc4LCA2NywgCi0gICAgMjM0LCAyMzMsIDIyMywgNzcsIDIsIDIxMywgMTM1LCAyMTksIDMxLCA3OCwgNjcsIDIzNCwgMjMzLCAyMjMsIDc3LCAxNjQsIAotICAgIDIxNCwgMTYwLCAyNDIsIDI3LCA2NywgMjM0LCAyMzMsIDIyMywgNzcsIDIsIDIxMywgMTM1LCAyMTksIDMxLCAxNjQsIDIxNCwgCi0gICAgMTYwLCAyNDIsIDI3LCA2NywgMjM0LCAyMzMsIDIyMywgNzcsIDE2NCwgMjMyLCAxMDgsIDI0MiwgMjcsIDM3LCAyMjQsIAotICAgIDIzNywgNzgsIDEwOSwgMjE3LCAzLCAyMzIsIDIxNCwgMjQ0LCAxNDYsIDIyMCwgMTM4LCA4NywgMjQyLCA4LCAyMjcsIDE5OCwgCi0gICAgMjE2LCAyNDcsIDI0MiwgOCwgMjI3LCAxOTgsIDIxNSwgNzMsIDI0MiwgOCwgMjI3LCAxOTgsIDIxNiwgMTYyLCA2NywgMTA5LCAKLSAgICAyMzUsIDE1OCwgNzgsIDIzMSwgMTQwLCA3OCwgMjI1LCAyNTUsIDI1NCwgMTQwLCA3OCwgMTA5LCA0NSwgMjM1LCAyMzgsIAotICAgIDEwOSwgMTYzLCAyNDQsIDEwNiwgMjE5LCAxOCwgMTQxLCAxLCA0LCA2MSwgMTQxLCAxLCA2MSwgMTQxLCAxLCA0LCA3MywgCi0gICAgMTQxLCAxLCA3MywgMTQxLCAxLCA0LCA3MCwgMTQxLCAxLCA3MCwgMTQxLCAxLCA0LCA3NSwgMTQxLCAxLCA3NSwgMTQxLCAxLCAKLSAgICA0LCA3NiwgMTQxLCAxLCA3NiwgMTQxLCAxLCAxNzYsIDE0MSwgMSwgMjQzLCAxMzUsIDE0MSwgMSwgMjM0LCA5MiwgMTQxLCAKLSAgICAxLCAyNDIsIDIxNCwgMTQxLCAxLCAyMzMsIDIxNywgMTQxLCAxLCAyNDIsIDExMywgMTQxLCAxLCAyMzQsIDE4MiwgMTQxLCAKLSAgICAxLCAyNDMsIDYyLCAxNDEsIDEsIDIzNCwgMjgsIDE0MSwgMSwgMjQyLCAxNzQsIDE0MSwgMSwgMjA2LCAxNDEsIDEsIDIxMCwgCi0gICAgMTE2LCAxNDEsIDEsIDIxOSwgMTkxLCAxNDEsIDEsIDIxMCwgNDQsIDE0MSwgMSwgMjE4LCA4MywgMTQxLCAxLCAyMTAsIDEzLCAKLSAgICAxNDEsIDEsIDIyMSwgMTgxLCAxNDEsIDEsIDIxMCwgOTQsIDE0MSwgMSwgMjE5LCA1OCwgMTQxLCAxLCAyMTAsIDIzLCAxNDEsIAotICAgIDEsIDIxNywgMTA1LCAxNDEsIDEsIDI0OCwgMjIxLCAxNDEsIDEsIDIxNiwgMTE3LCAxNDEsIDEsIDI0OCwgMywgMTQxLCAxLCAKLSAgICA0LCAyMTUsIDExOCwgMTQxLCAxLCAyMTUsIDExOCwgMTQxLCAxLCAyNDYsIDc4LCAxNDEsIDEsIDIxNywgMjIsIDE0MSwgMSwgCi0gICAgMjQ4LCA5MCwgMTQxLCAxLCAxMTEsIDE0MSwgMSwgMjQ3LCAxNDUsIDE0MSwgMSwgMTk3LCAxNDEsIDEsIDIyOCwgMjMzLCAKLSAgICAxNDEsIDEsIDIyNywgMjM3LCAxNDEsIDEsIDIyOSwgMTA3LCAxNDEsIDEsIDIyOCwgNzQsIDE0MSwgMSwgMTYyLCAxNDEsIDEsIAotICAgIDI1MiwgMTkxLCAxNDEsIDEsIDE5MCwgMTQxLCAxLCAyNDEsIDE4MCwgMTQxLCAxLCAyNTIsIDYsIDE0MSwgMSwgMjI1LCAKLSAgICAxMDgsIDE0MSwgMSwgMjQwLCAyMjIsIDE0MSwgMSwgMjUxLCAxMjUsIDE0MSwgMSwgMjI0LCAxNTAsIDE0MSwgMSwgMjQxLCAKLSAgICAyMzgsIDE0MSwgMSwgMjUyLCA3NSwgMTQxLCAxLCAyMjUsIDIyMSwgMTQxLCAxLCAyNDEsIDY4LCAxNDEsIDEsIDI1MSwgCi0gICAgMjA1LCAxNDEsIDEsIDIyNSwgMTYsIDE0MSwgMSwgMTg0LCAxNDEsIDEsIDIzMCwgMjMwLCAxNDEsIDEsIDIzMCwgMTAyLCAKLSAgICAxNDEsIDEsIDIzMSwgOTEsIDE0MSwgMSwgMjMwLCAxNjEsIDE0MSwgMSwgNCwgMTkxLCAxNDEsIDEsIDE5MSwgMTQxLCAxLCAKLSAgICA0LCAyMTAsIDIxMiwgMTQxLCAxLCAyMTAsIDIxMiwgMTQxLCAxLCA0LCAyMTAsIDI0NCwgMTQxLCAxLCAyMTAsIDI0NCwgCi0gICAgMTQxLCAxLCAyMDUsIDE0MSwgMSwgMjIzLCAzNSwgMTQxLCAxLCAyMjIsIDE0MCwgMTQxLCAxLCAyMjMsIDEyOCwgMTQxLCAxLCAKLSAgICAyMjIsIDIxMSwgMTQxLCAxLCA0LCAyMTIsIDY1LCAxNDEsIDEsIDIxMiwgNjUsIDE0MSwgMSwgMjExLCAyNTAsIDE0MSwgMSwgCi0gICAgMjEyLCAyMiwgMTQxLCAxLCAyMTEsIDIyNywgMTQxLCAxLCAyMzAsIDI1LCAxNDEsIDEsIDIxMiwgMTE2LCAxNDEsIDEsIDQsIAotICAgIDE3NiwgMTQxLCAxLCA0LCAyMzQsIDE4MiwgMzgsIDIzNCwgMjAxLCAyMTMsIDEzNSwgMjE5LCAzMSwgNzgsIDM4LCAyMzQsIAotICAgIDIwMSwgMjIwLCAxNTUsIDIxOSwgMzEsIDc4LCAyMzQsIDIwMSwgMjEzLCAxMzUsIDIxOSwgMzEsIDc4LCAyMzQsIDIwMSwgCi0gICAgMjIwLCAxNTUsIDIxOSwgMzEsIDc4LCAxNDEsIDIzNSwgMTU4LCA3OCwgMTQxLCAyMTMsIDEzNSwgMjM1LCAxNTgsIDc4LCAKLSAgICAxNDEsIDI0NywgMjIxLCAyMTAsIDIyNSwgMjM0LCAyMDEsIDUyLCAyNDAsIDE2OCwgNTYsIDEsIDQsIDYxLCA1NiwgMSwgNjEsIAotICAgIDU2LCAxLCA0LCA3MywgNTYsIDEsIDczLCA1NiwgMSwgNCwgNzAsIDU2LCAxLCA3MCwgNTYsIDEsIDQsIDc1LCA1NiwgMSwgCi0gICAgNzUsIDU2LCAxLCA0LCA3NiwgNTYsIDEsIDc2LCA1NiwgMSwgMTc2LCA1NiwgMSwgMjQzLCAxMzUsIDU2LCAxLCAyMzQsIDkyLCAKLSAgICA1NiwgMSwgMjQyLCAyMTQsIDU2LCAxLCAyMzMsIDIxNywgNTYsIDEsIDI0MiwgMTEzLCA1NiwgMSwgMjM0LCAxODIsIDU2LCAKLSAgICAxLCAyNDMsIDYyLCA1NiwgMSwgMjM0LCAyOCwgNTYsIDEsIDI0MiwgMTc0LCA1NiwgMSwgMjA2LCA1NiwgMSwgMjEwLCAxMTYsIAotICAgIDU2LCAxLCAyMTksIDE5MSwgNTYsIDEsIDIxMCwgNDQsIDU2LCAxLCAyMTgsIDgzLCA1NiwgMSwgMjEwLCAxMywgNTYsIDEsIAotICAgIDIyMSwgMTgxLCA1NiwgMSwgMjEwLCA5NCwgNTYsIDEsIDIxOSwgNTgsIDU2LCAxLCAyMTAsIDIzLCA1NiwgMSwgMjE3LCAKLSAgICAxMDUsIDU2LCAxLCAyNDgsIDIyMSwgNTYsIDEsIDIxNiwgMTE3LCA1NiwgMSwgMjQ4LCAzLCA1NiwgMSwgNCwgMjE1LCAxMTgsIAotICAgIDU2LCAxLCAyMTUsIDExOCwgNTYsIDEsIDI0NiwgNzgsIDU2LCAxLCAyMTcsIDIyLCA1NiwgMSwgMjQ4LCA5MCwgNTYsIDEsIAotICAgIDExMSwgNTYsIDEsIDI0NywgMTQ1LCA1NiwgMSwgMTk3LCA1NiwgMSwgMjI4LCAyMzMsIDU2LCAxLCAyMjcsIDIzNywgNTYsIAotICAgIDEsIDIyOSwgMTA3LCA1NiwgMSwgMjI4LCA3NCwgNTYsIDEsIDE2MiwgNTYsIDEsIDI1MiwgMTkxLCA1NiwgMSwgMTkwLCA1NiwgCi0gICAgMSwgMjQxLCAxODAsIDU2LCAxLCAyNTIsIDYsIDU2LCAxLCAyMjUsIDEwOCwgNTYsIDEsIDI0MCwgMjIyLCA1NiwgMSwgMjUxLCAKLSAgICAxMjUsIDU2LCAxLCAyMjQsIDE1MCwgNTYsIDEsIDI0MSwgMjM4LCA1NiwgMSwgMjUyLCA3NSwgNTYsIDEsIDIyNSwgMjIxLCAKLSAgICA1NiwgMSwgMjQxLCA2OCwgNTYsIDEsIDI1MSwgMjA1LCA1NiwgMSwgMjI1LCAxNiwgNTYsIDEsIDE4NCwgNTYsIDEsIDIzMCwgCi0gICAgMjMwLCA1NiwgMSwgMjMwLCAxMDIsIDU2LCAxLCAyMzEsIDkxLCA1NiwgMSwgMjMwLCAxNjEsIDU2LCAxLCA0LCAxOTEsIDU2LCAKLSAgICAxLCAxOTEsIDU2LCAxLCA0LCAyMTAsIDIxMiwgNTYsIDEsIDIxMCwgMjEyLCA1NiwgMSwgNCwgMjEwLCAyNDQsIDU2LCAxLCAKLSAgICAyMTAsIDI0NCwgNTYsIDEsIDIwNSwgNTYsIDEsIDIyMywgMzUsIDU2LCAxLCAyMjIsIDE0MCwgNTYsIDEsIDIyMywgMTI4LCAKLSAgICA1NiwgMSwgMjIyLCAyMTEsIDU2LCAxLCA0LCAyMTIsIDY1LCA1NiwgMSwgMjEyLCA2NSwgNTYsIDEsIDIxMSwgMjUwLCA1NiwgCi0gICAgMSwgMjEyLCAyMiwgNTYsIDEsIDIxMSwgMjI3LCA1NiwgMSwgMjMwLCAyNSwgNTYsIDEsIDIxMiwgMTE2LCA1NiwgMSwgNCwgCi0gICAgMTc2LCA1NiwgMSwgNCwgMjM0LCAxODIsIDU2LCAxLCAyMTQsIDI3LCA1NiwgMSwgMjEzLCAxNzYsIDU2LCAxLCAyMTMsIAotICAgIDI1NSwgNTYsIDEsIDIxMywgMTM4LCA1NiwgMjMwLCAyMjQsIDI0NywgMTIwLCAyMzQsIDIwMSwgMjI0LCAxNzMsIDIxOSwgCi0gICAgMzEsIDc4LCA1NiwgMjM1LCAxNTgsIDc4LCA1NiwgMjEzLCAxMzUsIDIzNSwgMTU4LCA3OCwgNTYsIDI0NywgMjIxLCAyMzMsIAotICAgIDI1NSwgMjUxLCAxODQsIDEsIDI1MywgMTU4LCAyNTEsIDE4NCwgMSwgMjI2LCAxMDUsIDI1MSwgMTg0LCAxLCAxOTMsIDI1MSwgCi0gICAgMTg0LCAxLCAyNDUsIDYsIDI1MSwgMTg0LCAxLCAyNDksIDYwLCAyNTEsIDE4NCwgMSwgMjE3LCAxNTIsIDI1MSwgMTg0LCAxLCAKLSAgICAyMzAsIDI1LCAyNTEsIDE4NCwgMSwgMTU2LCAyNTEsIDE4NCwgMSwgMjQzLCAyMDIsIDI1MSwgMTg0LCAxLCAyMzUsIDIzLCAKLSAgICAyNTEsIDE4NCwgMSwgMjQyLCA2MCwgMjUxLCAxODQsIDEsIDIzNSwgMTQ0LCAyNTEsIDE4NCwgMSwgMjI0LCA5NiwgMjUxLCAKLSAgICAxODQsIDEsIDIxMSwgMTc4LCAyNTEsIDE4NCwgMSwgMjEwLCA4MywgMjUxLCAxODQsIDEsIDI1MCwgMTU4LCAyNTEsIDE4NCwgCi0gICAgMSwgMjIwLCAxMDQsIDI1MSwgMTg0LCAxLCAxNTMsIDI1MSwgMTg0LCAxLCAyMTAsIDE1OSwgMjUxLCAxODQsIDEsIDI1MSwgCi0gICAgNjYsIDI1MSwgMTg0LCAxLCAyMjIsIDkxLCAyNTEsIDE4NCwgMSwgNjEsIDI1MSwgMTg0LCAxLCA3NiwgMjUxLCAxODQsIDEsIAotICAgIDc1LCAyNTEsIDE4NCwgMSwgMjQ1LCAxOTcsIDI1MSwgMTg0LCAxLCAyNTQsIDIwMSwgMjUxLCAxODQsIDEsIDI0NSwgMTk1LCAKLSAgICAyNTEsIDE4NCwgMSwgMjUzLCAxOTIsIDI1MSwgMTg0LCAxLCAyMjYsIDEzNCwgMjUxLCAxODQsIDEsIDI1NCwgMTIzLCAyNTEsIAotICAgIDE4NCwgMSwgMjQ1LCAxNTAsIDI1MSwgMTg0LCAxLCAyNTQsIDExNSwgMjUxLCAxODQsIDEsIDI0NSwgMTM4LCAyNTEsIDE4NCwgCi0gICAgMSwgMjQ1LCA5MiwgMjUxLCAxODQsIDEsIDczLCAyNTEsIDE4NCwgMSwgNzAsIDI1MSwgMTg0LCAxLCAyMzUsIDE1NiwgMjUxLCAKLSAgICAxODQsIDEsIDIxNCwgMTA1LCAyNTEsIDE4NCwgMSwgMjI5LCA3OSwgMjUxLCAxODQsIDEsIDI0MiwgMTc4LCAyNTEsIDE4NCwgCi0gICAgMSwgMjM2LCAzNCwgMjQsIDEsIDIzNCwgNTgsIDI0LCAxLCAyMTgsIDIxNSwgMjQsIDEsIDIzNCwgNTEsIDI0LCAxLCAyMjgsIAotICAgIDIyNiwgMjQsIDEsIDIyOCwgMjI0LCAyNCwgMSwgMjI4LCAyMjMsIDI0LCAxLCAyMTYsIDEwMSwgMjQsIDEsIDIxOCwgMjA0LCAKLSAgICAyNCwgMSwgMjIzLCAyNiwgMjQsIDEsIDIyMywgMjEsIDI0LCAxLCAyMjMsIDE4LCAyNCwgMSwgMjIzLCAxMSwgMjQsIDEsIAotICAgIDIyMywgNiwgMjQsIDEsIDIyMywgMSwgMjQsIDEsIDIyMywgMTIsIDI0LCAxLCAyMjMsIDI0LCAyNCwgMSwgMjMwLCAyMTcsIAotICAgIDI0LCAxLCAyMjUsIDk1LCAyNCwgMSwgMjE4LCAyMTIsIDI0LCAxLCAyMjUsIDg0LCAyNCwgMSwgMjE5LCAxNDgsIDI0LCAxLCAKLSAgICAyMTgsIDIwOSwgMjQsIDEsIDIzNiwgNTYsIDI0LCAxLCAyNTAsIDQ2LCAyNCwgMSwgMjE4LCAyMTksIDI0LCAxLCAyNTAsIAotICAgIDEwNiwgMjQsIDEsIDIzNCwgMTEwLCAyNCwgMSwgMjE2LCAxNzMsIDI0LCAxLCAyMjUsIDEzMSwgMjQsIDEsIDI0MSwgMTcyLCAKLSAgICAyNCwgMSwgNjEsIDI0LCAxLCAyNTQsIDI0MywgMjQsIDEsIDE5MSwgMjQsIDEsIDIxMSwgOTIsIDI0LCAxLCAyNDUsIDExNywgCi0gICAgMjQsIDEsIDc1LCAyNCwgMSwgMjExLCAzNiwgMjQsIDEsIDIxMSwgNDcsIDI0LCAxLCA3NiwgMjQsIDEsIDIxMiwgNjUsIDI0LCAKLSAgICAxLCAyMTIsIDYyLCAyNCwgMSwgMjI2LCAyMzQsIDI0LCAxLCAyMTAsIDI0NCwgMjQsIDEsIDcwLCAyNCwgMSwgMjEyLCAxMSwgCi0gICAgMjQsIDEsIDIxMiwgMjIsIDI0LCAxLCAyMTEsIDI1MCwgMjQsIDEsIDIxMCwgMjEyLCAyNCwgMSwgMjQ1LCA1NSwgMjQsIDEsIAotICAgIDIxMSwgOCwgMjQsIDEsIDczLCAyNCwgMjQ0LCAxMDMsIDI0LCAxLCAyMTgsIDIxMywgMjQsIDEsIDIyOCwgMjE2LCAyNCwgMSwgCi0gICAgMjI4LCAyMTgsIDI0LCAxLCAyMjgsIDIyMSwgMjQsIDEsIDIyMywgMTksIDI0LCAxLCAyMjMsIDAsIDI0LCAxLCAyMjMsIDgsIAotICAgIDI0LCAxLCAyMjMsIDEzLCAyNCwgMSwgMjIyLCAyNTQsIDI0LCAxLCAyMzAsIDIxMCwgMjQsIDEsIDIzMCwgMjA3LCAyNCwgMSwgCi0gICAgMjMwLCAyMTEsIDI0LCAxLCAyMzQsIDIyMSwgMjQsIDEsIDIyNSwgOTAsIDI0LCAxLCAyMjUsIDc2LCAyNCwgMSwgMjI1LCAKLSAgICA4MiwgMjQsIDEsIDIyNSwgNzksIDI0LCAxLCAyMjUsIDkzLCAyNCwgMSwgMjI1LCA3NywgMjQsIDEsIDIzNCwgMjE5LCAyNCwgCi0gICAgMSwgMjM0LCAyMTcsIDI0LCAxLCAyMTksIDE0MSwgMjQsIDEsIDIxOSwgMTM5LCAyNCwgMSwgMjE5LCAxMzEsIDI0LCAxLCAKLSAgICAyMTksIDEzNiwgMjQsIDEsIDIxOSwgMTQ2LCAyNCwgMSwgMjI2LCAzMiwgMjQsIDEsIDIxOCwgMjE2LCAyNCwgMSwgMjExLCAKLSAgICAyNiwgMjQsIDEsIDIxMSwgMjIsIDI0LCAxLCAyMTEsIDIzLCAyNCwgMSwgMjM0LCAyMjAsIDI0LCAxLCAyMTgsIDIxNywgMjQsIAotICAgIDEsIDIxMSwgMzIsIDI0LCAxLCAyMTAsIDIzOCwgMjQsIDEsIDIxMCwgMjM3LCAyNCwgMSwgMjEwLCAyNDAsIDI0LCAxLCAKLSAgICAyMTAsIDIwMywgMjQsIDEsIDIxMCwgMjA0LCAyNCwgMSwgMjEwLCAyMDcsIDI0LCAxLCAyNTQsIDM0LCAyNCwgMSwgMjU0LCAKLSAgICAyOCwgMTA5LCAyNTQsIDk5LCAyMzIsIDIwMywgNzgsIDEwOSwgMjU0LCA5OSwgMjIzLCA1MCwgNzgsIDEwOSwgMjU0LCA5OSwgCi0gICAgMTIzLCA3OCwgMTA5LCAyNTQsIDk5LCAxMTMsIDc4LCAxMDksIDI1NCwgOTksIDEzNCwgNzgsIDEwOSwgMjU0LCA5OSwgMjQ0LCAKLSAgICAxMSwgNzgsIDEwOSwgMjU0LCA5OSwgMjE2LCAxNCwgNzgsIDEwOSwgMjU0LCA5OSwgMjMwLCAyMjQsIDc4LCAxMDksIDI1NCwgCi0gICAgOTksIDI1MSwgMTc1LCA3OCwgMTA5LCAyNTQsIDk5LCAyNDQsIDkyLCA3OCwgMTA5LCAyNTQsIDk5LCAyMjEsIDE3NiwgNzgsIAotICAgIDEwOSwgMjU0LCA5OSwgMjE2LCAxNjksIDc4LCAxMDksIDI1NCwgOTksIDI0NCwgNCwgNzgsIDEwOSwgMjU0LCA5OSwgMjQxLCAKLSAgICAyMjQsIDc4LCAxMDksIDI1NCwgOTksIDI0NSwgMjI0LCA3OCwgMTA5LCAyNTQsIDk5LCAyMzEsIDE4NiwgNzgsIDI1MSwgCi0gICAgMTg0LCAxLCAyNTEsIDEyNSwgMjUxLCAxODQsIDEsIDIxMCwgNDQsIDI1MSwgMTg0LCAxLCAyMzUsIDEwOCwgMjUxLCAxODQsIAotICAgIDEsIDI0MiwgMTEzLCAyNTEsIDE4NCwgMSwgMjQ1LCAyMDksIDI1MSwgMTg0LCAxLCAyNDUsIDEzNSwgMjUxLCAxODQsIDEsIAotICAgIDIyNiwgMTgzLCAyNTEsIDE4NCwgMSwgMjI2LCAxODcsIDI1MSwgMTg0LCAxLCAyMzUsIDE3OSwgMjUxLCAxODQsIDEsIDI1NCwgCi0gICAgMTAxLCAyNTEsIDE4NCwgMSwgMjM1LCAyMjQsIDI1MSwgMTg0LCAxLCAyMTQsIDE2OCwgMjUxLCAxODQsIDEsIDIzNiwgMTYsIAotICAgIDI1MSwgMTg0LCAxLCAyMjksIDU3LCAyNTEsIDE4NCwgMSwgMjU0LCAxOTUsIDI1MSwgMTg0LCAxLCAyNTMsIDE4NywgMjUxLCAKLSAgICAxODQsIDEsIDI1NCwgMTM2LCAyNTEsIDE4NCwgMSwgMjI2LCAyMDQsIDI1MSwgMTg0LCAxLCAyMjYsIDE4OSwgMjUxLCAxODQsIAotICAgIDEsIDIzNSwgMjIxLCAyNTEsIDE4NCwgNDAsIDEsIDIyNiwgMTA1LCAyNTEsIDE4NCwgNDAsIDEsIDIxNywgMTUyLCAyNTEsIAotICAgIDE4NCwgNDAsIDEsIDIzNSwgMjMsIDI1MSwgMTg0LCA0MCwgMSwgMjQyLCA2MCwgMjUxLCAxODQsIDEsIDI0MiwgMjUwLCAKLSAgICAyNTEsIDE4NCwgMSwgMjMyLCAyNTUsIDI1MSwgMTg0LCAxLCAyMDksIDI1MCwgOSwgMjE4LCAxMDMsIDIxNywgMTUyLCA5LCAKLSAgICAyMTgsIDEwMywgMjEyLCA0LCA5LCAyMTgsIDEwMywgMjExLCAxNTgsIDksIDIxOCwgMTAzLCAyNTEsIDc5LCA5LCAyMTgsIAotICAgIDEwMywgMjE3LCAyNTQsIDksIDIxOCwgMTAzLCAyNDAsIDE1OCwgOSwgMjE4LCAxMDMsIDI0MCwgMTYyLCA5LCAyMTgsIDEwMywgCi0gICAgMjQwLCAyMzEsIDksIDIxOCwgMTAzLCAyNDAsIDE1OSwgOSwgMjE4LCAxMDMsIDIxNywgMTU1LCA5LCAyMTgsIDEwMywgMjQwLCAKLSAgICAxNjEsIDksIDIxOCwgMTAzLCAyNDAsIDE1NywgOSwgMjE4LCAxMDMsIDI0MCwgMjI5LCA5LCAyMTgsIDEwMywgMjQwLCAxNjAsIAotICAgIDksIDIxOCwgMTAzLCAyNDAsIDE1NiwgOSwgMjE4LCAxMDMsIDIzMCwgMjUsIDksIDIxOCwgMTAzLCAyNDIsIDYwLCA5LCAKLSAgICAyMTgsIDEwMywgMjIyLCA5MSwgOSwgMjE4LCAxMDMsIDIyNiwgMTA1LCA5LCAyMTgsIDEwMywgMjE5LCAyMSwgOSwgMjE4LCAKLSAgICAxMDMsIDI0OSwgNjAsIDksIDIxOCwgMTAzLCAyNDAsIDE2MywgOSwgMjE4LCAxMDMsIDI0MSwgMTkwLCA5LCAyMTgsIDEwMywgCi0gICAgMjE3LCAxNjQsIDksIDIxOCwgMTAzLCAyMTcsIDIzMywgOSwgMjE4LCAxMDMsIDIxOCwgMTY4LCA5LCAyMTgsIDEwMywgMjIwLCAKLSAgICAxMTAsIDksIDIxOCwgMTAzLCAyMjUsIDIyNCwgOSwgMjE4LCAxMDMsIDIyNCwgOTgsIDksIDIxOCwgMTAzLCAyMTYsIDQzLCAKLSAgICA5LCAyMTgsIDEwMywgMjE3LCAxNTQsIDksIDIxOCwgMTAzLCAyMTcsIDI0NCwgOSwgMjE4LCAxMDMsIDI0MCwgMTcwLCA5LCAKLSAgICAyMTgsIDEwMywgMjQwLCAxNTUsIDksIDIxOCwgMTAzLCAyMjUsIDE0OSwgOSwgMjE4LCAxMDMsIDIyNCwgOTYsIDU2LCAxLCAKLSAgICA0LCAyMzMsIDIxNywgNTYsIDEsIDQsIDIxOSwgMTkxLCA1NiwgMSwgNCwgMjE4LCA4MywgNTYsIDEsIDQsIDExMSwgNTYsIDEsIAotICAgIDQsIDIyNywgMjM3LCA1NiwgMSwgNCwgMTYyLCA1NiwgMSwgNCwgMjQxLCAxODAsIDU2LCAxLCA0LCAyNDAsIDIyMiwgNTYsIAotICAgIDEsIDQsIDI0MSwgMjM4LCA1NiwgMSwgNCwgMjQxLCA2OCwgNTYsIDEsIDQsIDIzMCwgMTAyLCA1NiwgMSwgNCwgMjA1LCA1NiwgCi0gICAgMSwgNCwgMjIzLCAzNSwgNTYsIDEsIDQsIDIyMiwgMTQwLCA1NiwgMSwgNCwgMjIzLCAxMjgsIDU2LCAxLCA0LCAyMjIsIAotICAgIDIxMSwgODgsIDI0LCAyMzQsIDU4LCA4OCwgMjQsIDIyOCwgMjI2LCA4OCwgMjQsIDIxNiwgMTAxLCA4OCwgMjQsIDIyMywgCi0gICAgMjYsIDg4LCAyNCwgMjMwLCAyMTcsIDg4LCAyNCwgMjI1LCA5NSwgODgsIDI0LCAyMTksIDE0OCwgODgsIDI0LCAyMzYsIDU2LCAKLSAgICA4OCwgMjQsIDI1MCwgNDYsIDg4LCAyNCwgMjUwLCAxMDYsIDg4LCAyNCwgMjM0LCAxMTAsIDg4LCAyNCwgMjE2LCAxNzMsIAotICAgIDg4LCAyNCwgMjI1LCAxMzEsIDg4LCAyNCwgMjQxLCAxNzIsIDg4LCAyNCwgMjM0LCA1OSwgNjEsIDg4LCAyNCwgMjI4LCAKLSAgICAyMjcsIDYxLCA4OCwgMjQsIDIxNiwgMTAyLCA2MSwgODgsIDI0LCAyMjMsIDI3LCA2MSwgODgsIDI0LCAyMzAsIDIxOCwgNjEsIAotICAgIDg4LCAyNCwgMjI1LCA5NiwgNjEsIDg4LCAyNCwgMjE5LCAxNDksIDYxLCA4OCwgMjQsIDIzNiwgNTcsIDYxLCA4OCwgMjQsIAotICAgIDI1MCwgNDcsIDYxLCA4OCwgMjQsIDI1MCwgMTA3LCA2MSwgODgsIDI0LCAyMzQsIDExMSwgNjEsIDg4LCAyNCwgMjE2LCAKLSAgICAxNzQsIDYxLCA4OCwgMjQsIDIyNSwgMTMyLCA2MSwgODgsIDI0LCAyNDEsIDE3MywgNjEsIDg4LCAyNCwgMjUwLCA0NywgNzAsIAotICAgIDg4LCAyMzQsIDMsIDEzNSwgMjI2LCAyMTcsIDg4LCAyMzQsIDMsIDEzNSwgMTQ0LCAyNDAsIDIyMiwgODgsIDE1NCwgMTEwLCAKLSAgICA4OCwgMTU0LCAxMDUsIDg4LCAxNTQsIDE1OCwgODgsIDE1NCwgMTYxLCA4OCwgMTU0LCAxODksIDg4LCAxNTQsIDE5NCwgODgsIAotICAgIDE1NCwgMTk4LCA4OCwgMTU0LCAxOTUsIDg4LCAxNTQsIDIwMCwgODgsIDE1NCwgMjE2LCAyNDcsIDg4LCAxNTQsIDIzMCwgCi0gICAgMTI4LCA4OCwgMTU0LCAyNDQsIDk2LCA4OCwgMTU0LCAyMTIsIDQwLCA4OCwgMTU0LCAyMTEsIDIxNCwgODgsIDE1NCwgMjMxLCAKLSAgICAzOSwgODgsIDE1NCwgMjQ1LCAyMjMsIDg4LCAxNTQsIDIxOCwgMzcsIDg4LCAxNTQsIDIxOCwgMTMyLCA4OCwgMTU0LCAyNDEsIAotICAgIDI0NCwgODgsIDE1NCwgMjE5LCA1NCwgODgsIDE1NCwgMjI5LCAyMDQsIDg4LCAxNTQsIDIxOSwgNCwgODgsIDE1NCwgMjQ0LCAKLSAgICAxMDIsIDg4LCAxNTQsIDI0OSwgMjAwLCA4OCwgMTU0LCAyMzMsIDEyNSwgODgsIDE1NCwgMjIzLCA3MSwgODgsIDE1NCwgCi0gICAgMjUxLCAxNSwgODgsIDE1NCwgMjE4LCA4NywgODgsIDE1NCwgMjE4LCAyMCwgODgsIDE1NCwgMjQ1LCAxMjcsIDg4LCAxNTQsIAotICAgIDIyMywgNjMsIDg4LCAxNTQsIDI1NCwgMTUwLCA4OCwgMTU0LCAyNDQsIDEyOCwgODgsIDE1NCwgMjIzLCA2MSwgODgsIDE1NCwgCi0gICAgMjIwLCAxNTYsIDg4LCAxNTQsIDIyMywgMTI3LCAzNywgMTU0LCAyMjQsIDEyLCAzNywgMTU0LCAyMzQsIDgwLCAzNywgMTU0LCAKLSAgICAyMjEsIDE5OCwgMzcsIDE1NCwgMjMzLCAyNTUsIDM3LCA1NCwgMjE2LCAyNDgsIDIyNiwgMTk3LCA4NSwgMjE4LCAyMzQsIAotICAgIDM3LCA1NCwgMjE1LCA3NCwgMjI2LCAxOTcsIDg1LCAyMTgsIDIzNCwgMzcsIDU0LCAyMTYsIDE2MywgMjI2LCAxOTcsIDg1LCAKLSAgICAyMTgsIDIzNCwgMzcsIDU0LCAyNDQsIDE2LCAyMjYsIDE5NywgODUsIDIxOCwgMjM0LCAzNywgNTQsIDI0NCwgMTE1LCAyMjYsIAotICAgIDE5NywgODUsIDIxOCwgMjM0LCAzNywgNTQsIDIxOSwgMTEyLCAyMjYsIDE5NywgODUsIDIxOCwgMjM0LCAzNywgNTQsIDIyMCwgCi0gICAgMTE3LCAyMjYsIDE5NywgODUsIDIxOCwgMjM0LCAzNywgNTQsIDI0NSwgMTg1LCAyMjYsIDE5NywgODUsIDIxOCwgMjM0LCAKLSAgICAyMjUsIDI1MSwgNTAsIDM3LCA1NCwgMjE1LCA3NCwgMTEwLCAzNywgNTQsIDIxNSwgNzQsIDEwNSwgMzcsIDU0LCAyMTUsIAotICAgIDc0LCAxNTgsIDM3LCA1NCwgMjE1LCA3NCwgMTYxLCAzNywgNTQsIDIxNSwgNzQsIDE4OSwgMzcsIDU0LCAyMTUsIDc0LCAKLSAgICAxOTQsIDM3LCA1NCwgMjE1LCA3NCwgMTk4LCAzNywgNTQsIDIxNSwgNzQsIDE5NSwgMzcsIDU0LCAyMTUsIDc0LCAyMDAsIAotICAgIDM3LCA1NCwgMjE2LCAxNjIsIDM3LCA1NCwgMjE2LCAxNjMsIDExMCwgMzcsIDU0LCAyMTYsIDE2MywgMTA1LCAzNywgNTQsIAotICAgIDIxNiwgMTYzLCAxNTgsIDM3LCA1NCwgMjE2LCAxNjMsIDE2MSwgMzcsIDU0LCAyMTYsIDE2MywgMTg5LCAzNywgMjQsIDIzNCwgCi0gICAgNTgsIDM3LCAyNCwgMjI4LCAyMjYsIDM3LCAyNCwgMjE2LCAxMDEsIDM3LCAyNCwgMjIzLCAyNiwgMzcsIDI0LCAyMzAsIAotICAgIDIxNywgMzcsIDI0LCAyMjUsIDk1LCAzNywgMjQsIDIxOSwgMTQ4LCAzNywgMjQsIDIzNiwgNTYsIDM3LCAyNCwgMjUwLCA0NiwgCi0gICAgMzcsIDI0LCAyNTAsIDEwNiwgMzcsIDI0LCAyMzQsIDExMCwgMzcsIDI0LCAyMTYsIDE3MywgMzcsIDI0LCAyMjUsIDEzMSwgCi0gICAgMzcsIDI0LCAyNDEsIDE3MiwgMzcsIDI0LCAyMzQsIDU5LCA2MSwgMzcsIDI0LCAyMjgsIDIyNywgNjEsIDM3LCAyNCwgMjE2LCAKLSAgICAxMDIsIDYxLCAzNywgMjQsIDIyMywgMjcsIDYxLCAzNywgMjQsIDIzMCwgMjE4LCA2MSwgMzcsIDI0LCAyMjUsIDk2LCA2MSwgCi0gICAgMzcsIDI0LCAyMTksIDE0OSwgNjEsIDM3LCAyNCwgMjM2LCA1NywgNjEsIDM3LCAyNCwgMjUwLCA0NywgNjEsIDM3LCAyNCwgCi0gICAgMjUwLCAxMDcsIDYxLCAzNywgMjQsIDIzNCwgMTExLCA2MSwgMzcsIDI0LCAyMTYsIDE3NCwgNjEsIDM3LCAyNCwgMjI1LCAKLSAgICAxMzIsIDYxLCAzNywgMjQsIDI0MSwgMTczLCA2MSwgMzcsIDIzNCwgMywgMTM1LCAyNTAsIDE0OCwgMzcsIDIzNCwgMywgCi0gICAgMTM1LCAyMzUsIDQ3LCAzNywgMjQsIDIzNiwgNTcsIDcwLCAyMzQsIDMsIDIxOCwgMTU5LCA4NywgMzcsIDE1NCwgMTEwLCAKLSAgICAzNywgMTU0LCAxMDUsIDM3LCAxNTQsIDE1OCwgMzcsIDE1NCwgMTYxLCAzNywgMTU0LCAxODksIDM3LCAxNTQsIDE5NCwgMzcsIAotICAgIDE1NCwgMTk4LCAzNywgMTU0LCAxOTUsIDM3LCAxNTQsIDIwMCwgMzcsIDE1NCwgMjE2LCAyNDcsIDM3LCAxNTQsIDIzMCwgCi0gICAgMTI4LCAzNywgMTU0LCAyNDQsIDk2LCAzNywgMTU0LCAyMTIsIDQwLCAzNywgMTU0LCAyMTEsIDIxNCwgMzcsIDE1NCwgMjMxLCAKLSAgICAzOSwgMzcsIDE1NCwgMjQ1LCAyMjMsIDM3LCAxNTQsIDIxOCwgMzcsIDM3LCAxNTQsIDIxOCwgMTMyLCAzNywgMTU0LCAyNDEsIAotICAgIDI0NCwgMzcsIDE1NCwgMjE5LCA1NCwgMzcsIDE1NCwgMjI5LCAyMDQsIDM3LCAxNTQsIDIxOSwgNCwgMzcsIDE1NCwgMjQ0LCAKLSAgICAxMDIsIDM3LCAxNTQsIDI0OSwgMjAwLCAzNywgMTU0LCAyMzMsIDEyNSwgMzcsIDE1NCwgMjIxLCAxNzQsIDM3LCAxNTQsIAotICAgIDIzMSwgMTg5LCAzNywgMTU0LCAyNDQsIDEzNywgMzcsIDE1NCwgMjE4LCA0OSwgMzcsIDE1NCwgMjQ1LCAzNCwgMzcsIDE1NCwgCi0gICAgMjI0LCAxODcsIDM3LCAxNTQsIDI1MywgMTk2LCAzNywgMTU0LCAyMzUsIDE1OSwgMzcsIDE1NCwgMjIzLCA2MSwgMzcsIAotICAgIDE1NCwgMjQ5LCAxNjQsIDM3LCAxNTQsIDI0OSwgMTU1LCAzNywgMTU0LCAyNDEsIDE2NSwgMzcsIDE1NCwgMjUwLCAxNzQsIAotICAgIDM3LCAxNTQsIDIzMiwgMTEwLCAzNywgMTU0LCAyMzMsIDQ2LCAzNywgMTU0LCAyMjIsIDI1MSwgMzcsIDE1NCwgMjMxLCA4MywgCi0gICAgMzcsIDE1NCwgMjIzLCA4NywgMzcsIDE1NCwgMjE4LCA4NywgMzcsIDE1NCwgMjE4LCAyMCwgMzcsIDE1NCwgMjQ1LCAxMjcsIAotICAgIDM3LCAxNTQsIDIyMywgNjMsIDM3LCAxNTQsIDI1NCwgMTUwLCAzNywgMTU0LCAyMjgsIDIxMiwgMzcsIDU0LCAyMTYsIDE2MywgCi0gICAgMTk0LCAzNywgNTQsIDIxNiwgMTYzLCAxOTgsIDM3LCA1NCwgMjE2LCAxNjMsIDE5NSwgMzcsIDU0LCAyMTYsIDE2MywgMjAwLCAKLSAgICAzNywgNTQsIDI0NCwgMTUsIDM3LCA1NCwgMjQ0LCAxNiwgMTEwLCAzNywgNTQsIDI0NCwgMTYsIDEwNSwgMzcsIDU0LCAyNDQsIAotICAgIDE2LCAxNTgsIDM3LCA1NCwgMjQ0LCAxNiwgMTYxLCAzNywgNTQsIDI0NCwgMTYsIDE4OSwgMzcsIDU0LCAyNDQsIDE2LCAKLSAgICAxOTQsIDM3LCA1NCwgMjQ0LCAxNiwgMTk4LCAzNywgNTQsIDI0NCwgMTYsIDE5NSwgMzcsIDU0LCAyNDQsIDE2LCAyMDAsIAotICAgIDM3LCA1NCwgMjQ0LCAxMTQsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDIzNSwgMTMzLCAxMDksIDIxNywgMywgMTYsIDMxLCAKLSAgICAyNDQsIDE0OCwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjMxLCAxNjAsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI1NCwgNDcsIAotICAgIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDIzMSwgMTMyLCAxMDksIDIxNywgMywgMTYsIDMxLCAyMzUsIDQ1LCAxMDksIDIxNywgMywgCi0gICAgMTYsIDMxLCAyMzUsIDQ2LCAxMDksIDIxNywgMywgMTYsIDMxLCAyNTMsIDE4OCwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjIwLCAKLSAgICAxMzYsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDIyNiwgMjM5LCAxMDksIDIxNywgMywgMTYsIDMxLCAyMjgsIDQwLCAxMDksIAotICAgIDIxNywgMywgMTYsIDMxLCAyNDgsIDg1LCA0MiwgMjQxLCAxOTAsIDQyLCAyNDUsIDg4LCA0MiwgMjQ1LCA0MywgMjMyLCAKLSAgICAyMTksIDIzMiwgMjQwLCA1MCwgMzcsIDU2LCA2MSwgMzcsIDU2LCA3MywgMzcsIDU2LCA3MCwgMzcsIDU2LCA3NSwgMzcsIAotICAgIDU2LCA3NiwgMzcsIDU2LCAxNzYsIDM3LCA1NiwgMjM0LCA5MiwgMzcsIDU2LCAyMzMsIDIxNywgMzcsIDU2LCAyMzQsIDE4MiwgCi0gICAgMzcsIDU2LCAyMzQsIDI4LCAzNywgNTYsIDIwNiwgMzcsIDU2LCAyMTksIDE5MSwgMzcsIDU2LCAyMTgsIDgzLCAzNywgNTYsIAotICAgIDIyMSwgMTgxLCAzNywgNTYsIDIxOSwgNTgsIDM3LCA1NiwgMjE3LCAxMDUsIDM3LCA1NiwgMjE2LCAxMTcsIDM3LCA1NiwgCi0gICAgMjE1LCAxMTgsIDM3LCA1NiwgMjE3LCAyMiwgMzcsIDU2LCAxMTEsIDM3LCA1NiwgMTk3LCAzNywgNTYsIDIyOCwgMjMzLCAKLSAgICAzNywgNTYsIDIyNywgMjM3LCAzNywgNTYsIDIyOSwgMTA3LCAzNywgNTYsIDIyOCwgNzQsIDM3LCA1NiwgMTYyLCAzNywgNTYsIAotICAgIDI0MSwgMTgwLCAzNywgNTYsIDI0MCwgMjIyLCAzNywgNTYsIDI0MSwgMjM4LCAzNywgNTYsIDI0MSwgNjgsIDM3LCA1NiwgCi0gICAgMTg0LCAzNywgNTYsIDIzMCwgMjMwLCAzNywgNTYsIDIzMCwgMTAyLCAzNywgNTYsIDIzMSwgOTEsIDM3LCA1NiwgMjMwLCAKLSAgICAxNjEsIDM3LCA1NiwgMTkxLCAzNywgNTYsIDIxMCwgMjEyLCAzNywgNTYsIDIxMCwgMjQ0LCAzNywgNTYsIDIwNSwgMzcsIAotICAgIDU2LCAyMjMsIDM1LCAzNywgNTYsIDIyMiwgMTQwLCAzNywgNTYsIDIyMywgMTI4LCAzNywgNTYsIDIyMiwgMjExLCAzNywgCi0gICAgNTYsIDIxMiwgNjUsIDM3LCA1NiwgMjExLCAyNTAsIDM3LCA1NiwgMjEyLCAyMiwgMzcsIDU2LCAyMTEsIDIyNywgNDIsIAotICAgIDI1NCwgNzEsIDQyLCAyNTMsIDIzOSwgNDIsIDI1NCwgOTUsIDQyLCAyNTUsIDMxLCA0MiwgMjM1LCAyMjYsIDQyLCAyMzUsIAotICAgIDE5NiwgNDIsIDIxNCwgMTY2LCA0MiwgMjQ1LCA2NiwgNDIsIDI0NSwgMjA2LCA0MiwgMjI2LCAxODYsIDQyLCAyMjYsIDE4MCwgCi0gICAgNDIsIDIzNCwgMjQ1LCA0MiwgMjM0LCAyMTQsIDQyLCAyMzQsIDIxMSwgNDIsIDI0MywgOTIsIDQyLCAyNDMsIDEwMSwgNDIsIAotICAgIDI0MiwgMjA0LCA0MiwgMjQyLCAyMDAsIDQyLCAyMzMsIDE1MCwgNDIsIDI0MiwgMTkzLCA0MiwgMjM0LCA3MiwgNDIsIDIzNCwgCi0gICAgNzEsIDQyLCAyMzQsIDcwLCA0MiwgMjM0LCA2OSwgNDIsIDI0MiwgODYsIDQyLCAyNDIsIDg1LCA0MiwgMjMzLCAxOTMsIDQyLCAKLSAgICAyMzMsIDE5NSwgNDIsIDIzNCwgMTc4LCA0MiwgMjM0LCAxLCA0MiwgMjM0LCA4LCA0MiwgMjIyLCAxNiwgNDIsIDIyMSwgCi0gICAgMjM3LCA0MiwgMjE5LCAxMjksIDQyLCAyMjAsIDE0MSwgNDIsIDIyMCwgMTQwLCA0MiwgMjQ4LCAyMTgsIDQyLCAyNDgsIDM2LCAKLSAgICA0MiwgMjQ3LCAxMjEsIDQyLCAyMTYsIDMyLCA0MiwgMjI5LCAyMDAsIDQyLCAyMjgsIDQxLCA0MiwgMjQyLCAzMiwgNDIsIAotICAgIDIyNiwgODQsIDQyLCAyMjYsIDgzLCA0MiwgMjUyLCAxODgsIDQyLCAyMjUsIDEwNSwgNDIsIDIyNSwgNjksIDQyLCAyMjUsIAotICAgIDcwLCA0MiwgMjUxLCAyMzQsIDQyLCAyNDAsIDIyMSwgNDIsIDI0MCwgMjE3LCA0MiwgMjUxLCA5MSwgNDIsIDI0MCwgMjA0LCAKLSAgICA0MiwgMjQxLCAyMTUsIDQyLCAyMjUsIDE1OSwgNDIsIDIyNSwgMTk0LCA0MiwgMjQxLCAxOTgsIDQyLCAyMjUsIDE5MSwgNDIsIAotICAgIDIyNSwgMjA3LCA0MiwgMjUyLCA2MSwgNDIsIDIyNSwgNiwgNDIsIDI1MSwgMTgwLCA0MiwgMjQxLCA1NiwgNDIsIDIyNCwgCi0gICAgMjUwLCA0MiwgMjQxLCA0OCwgNDIsIDI0MSwgNTAsIDQyLCAyMzEsIDIwMSwgNDIsIDIzMSwgMTk3LCA0MiwgMjMxLCAyMDYsIAotICAgIDQyLCAyMzEsIDE1MCwgNDIsIDIzMSwgMTc1LCA0MiwgMjMwLCAxOTcsIDQyLCAyMzAsIDE3NiwgNDIsIDIzMCwgMTc1LCA0MiwgCi0gICAgMjMxLCA3NCwgNDIsIDIzMSwgNzEsIDQyLCAyMzEsIDc1LCA0MiwgMjExLCAxMDIsIDQyLCAyMTEsIDEwMCwgNDIsIDIxMCwgCi0gICAgMjAxLCA0MiwgMjIyLCAyMjYsIDQyLCAyMjIsIDIzMCwgNDIsIDIyMiwgMTE3LCA0MiwgMjIyLCAxMTEsIDQyLCAyMjMsIDg1LCAKLSAgICA0MiwgMjIzLCA4MiwgNDIsIDIxMiwgMzgsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0MCwgMjM5LCAyMTAsIDg2LCAxMDksIAotICAgIDIxNywgMywgMTYsIDMxLCAyNDAsIDIzOSwgMTEwLCAxMDksIDIxNywgMywgMTYsIDMxLCAyNDAsIDIzOSwgMTA1LCAxMDksIAotICAgIDIxNywgMywgMTYsIDMxLCAyNDAsIDIzOSwgMTU4LCAxMDksIDIxNywgMywgMTYsIDMxLCAyNDAsIDIzOSwgMTYxLCAxMDksIAotICAgIDIxNywgMywgMTYsIDMxLCAyNDAsIDIzOSwgMTg5LCAxMDksIDIxNywgMywgMTYsIDMxLCAyNDAsIDIzOSwgMTk0LCAxMDksIAotICAgIDIxNywgMywgMTYsIDMxLCAyNDAsIDIzOSwgMTk4LCAxMDksIDIxNywgMywgMTYsIDMxLCAyNDAsIDIzOSwgMTk1LCAxMDksIAotICAgIDIxNywgMywgMTYsIDMxLCAyNDAsIDIzOSwgMjAwLCAxMDksIDIxNywgMywgMTYsIDMxLCAyNDAsIDIzOSwgMjE2LCAyNDcsIAotICAgIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0MCwgMjM5LCAyNDUsIDE2NywgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQwLCAyMzksIAotICAgIDIxNSwgNzYsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0MCwgMjM5LCAyMTYsIDE2NCwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgCi0gICAgMjQwLCAyMzksIDI0NCwgNSwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQwLCAyMzksIDI0NCwgMTE4LCAxMDksIDIxNywgMywgCi0gICAgMTYsIDMxLCAyNDAsIDIzOSwgMjE5LCAxMTksIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0MCwgMjM5LCAyMjAsIDExOSwgMTA5LCAKLSAgICAyMTcsIDMsIDE2LCAzMSwgMjQwLCAyMzksIDI0NSwgMTkwLCAxMDksIDIxNywgMywgMTYsIDMxLCAyNDAsIDIzOSwgMjI4LCAKLSAgICAxOTcsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0MCwgMjM5LCAyMTUsIDczLCAxMDksIDIxNywgMywgMTYsIDMxLCAyNDAsIAotICAgIDIzOSwgMjE1LCA2NywgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQwLCAyMzksIDIxNSwgNjMsIDEwOSwgMjE3LCAzLCAxNiwgCi0gICAgMzEsIDI0MCwgMjM5LCAyMTUsIDY0LCAxMDksIDIxNywgMywgMTYsIDMxLCAyNDAsIDIzOSwgMjE1LCA2OSwgNDIsIDI0MCwgCi0gICAgMjMwLCA0MiwgMjQ4LCAyMjEsIDQyLCAyNTMsIDE5MiwgNDIsIDEzMCwgNDIsIDIyNiwgMTI1LCA0MiwgMjI1LCAyMjUsIDQyLCAKLSAgICAyNDcsIDE0NywgNDIsIDI0NywgMTQ4LCAyMTgsIDIzMywgNDIsIDI0NywgMTQ4LCAyNDksIDEwOCwgNDIsIDIzNSwgMTU2LCAKLSAgICA0MiwgMjQ1LCA5MSwgMjI5LCAyMDUsIDI0MSwgMjE2LCA0MiwgMjQ1LCA5MSwgMjI5LCAyMDUsIDIxNywgMTc0LCA0MiwgCi0gICAgMjQ1LCA5MSwgMjI5LCAyMDUsIDIxNywgNzQsIDQyLCAyNDUsIDkxLCAyMjksIDIwNSwgMjMxLCA3MCwgNDIsIDI0OSwgMTU3LCAKLSAgICA0MiwgMjI2LCA5MCwgMjU0LCAxMjUsIDQyLCAxOTcsIDQyLCAyMzAsIDEwMywgNjEsIDQyLCAxODQsIDQyLCAxNzYsIDQyLCAKLSAgICAyMzQsIDE4NSwgNDIsIDIzMSwgMTI5LCA0MiwgMjQzLCA4MCwgNDIsIDI1MSwgMTgsIDQyLCAyMzQsIDE4NCwgNDIsIDIyNSwgCi0gICAgMTUwLCA0MiwgMjI5LCA4MSwgNDIsIDIzMCwgMTAzLCAyNDUsIDYsIDQyLCAyMzAsIDEwMywgMjQzLCAyMDIsIDQyLCAyMzEsIAotICAgIDE1LCA0MiwgMjM0LCAxMzQsIDQyLCAyNDAsIDE2MywgNDIsIDIzNCwgOTQsIDQyLCAyMzAsIDIzMiwgNDIsIDI0MiwgMjE2LCAKLSAgICA0MiwgMjE2LCAxMTksIDQyLCAyMzAsIDEwMywgMTU2LCA0MiwgMjMwLCAxNjksIDQyLCAyNDcsIDE1NywgNDIsIDIzNCwgNDAsIAotICAgIDQyLCAyNDQsIDQ1LCA0MiwgMjI4LCAxMTIsIDQyLCAyMzAsIDEwMywgMTkzLCA0MiwgMjMwLCAxNjYsIDQyLCAyNDksIDIzOSwgCi0gICAgNDIsIDIzNCwgMzQsIDQyLCAyMzAsIDE2NywgMjE4LCAyMzMsIDQyLCAyNDksIDI0MCwgMjE4LCAyMzMsIDQyLCAyMzIsIDUwLCAKLSAgICAyMTgsIDIzMywgNDIsIDIzNCwgMzUsIDIxOCwgMjMzLCA0MiwgMjMwLCAxNjcsIDI0OSwgMTA4LCA0MiwgMjQ5LCAyNDAsIAotICAgIDI0OSwgMTA4LCA0MiwgMjMyLCA1MCwgMjQ5LCAxMDgsIDQyLCAyMzQsIDM1LCAyNDksIDEwOCwgNDIsIDIzMiwgNTAsIDExNywgCi0gICAgMjIyLCA5MSwgNDIsIDIzMiwgNTAsIDExNywgMjIyLCA5MiwgMjE4LCAyMzMsIDQyLCAxOTAsIDQyLCAyMzMsIDI1MSwgNDIsIAotICAgIDIzMCwgMTA1LCA0MiwgMjQyLCAxNTEsIDQyLCAyMjMsIDE3NiwgNDIsIDIyMywgMTc3LCAxMTcsIDIyMiwgOTEsIDQyLCAKLSAgICAyMjMsIDE3NywgMTE3LCAyMjIsIDkyLCAyMTgsIDIzMywgNDIsIDIyNCwgMTYyLCA0MiwgMjI4LCAxMywgNDIsIDIzMCwgCi0gICAgMTAzLCAyMjIsIDkxLCA0MiwgMjMwLCAxMDQsIDQyLCAyMjQsIDExNiwgNDIsIDIyNywgMTc2LCA0MiwgMjMwLCAxMDMsIAotICAgIDIxNCwgMTA1LCA0MiwgMjMwLCA0OSwgNDIsIDIzMywgMTg1LCA0MiwgMjMwLCA1MCwgMjMxLCA3NCwgNDIsIDIyNCwgMTE1LCAKLSAgICA0MiwgMjI3LCAxNzUsIDQyLCAyMzAsIDEwMywgMjEyLCA5OCwgNDIsIDIzMCwgNDMsIDQyLCAyMzMsIDE4MywgNDIsIDIzMCwgCi0gICAgNDQsIDIzMSwgNzQsIDQyLCAyMzUsIDI0LCAyMjYsIDIyMCwgNDIsIDIzMiwgNTAsIDIyNiwgMjIwLCA0MiwgMjU0LCAxMzYsIAotICAgIDQyLCAyNTEsIDE2MCwgNDIsIDI1MCwgMjE0LCA0MiwgMjUwLCAxOTEsIDQyLCAyNTEsIDY3LCAxMTcsIDIzNCwgMTM0LCA0MiwgCi0gICAgMjQ5LCAyMzgsIDQyLCAyNDgsIDE0MiwgNDIsIDI0MiwgNzIsIDQyLCAxNjIsIDQyLCAyNDAsIDIzMSwgNDIsIDIzNSwgMjU1LCAKLSAgICA0MiwgMjM0LCA0NywgNDIsIDIzNCwgMzUsIDI1MCwgMjUwLCA0MiwgMjMzLCAyMTksIDQyLCAyMzIsIDE1OSwgNDIsIDIzMiwgCi0gICAgMTU4LCA0MiwgMjMyLCAxNDcsIDQyLCAyMzIsIDYzLCA0MiwgMjMxLCAxMzAsIDIxOSwgNzksIDQyLCAyMzAsIDE5NiwgNDIsIAotICAgIDIzMCwgMTUyLCA0MiwgMjI1LCAxNDgsIDQyLCAyMjUsIDE5LCA0MiwgMjI0LCAyMTksIDQyLCAyMjQsIDIxNywgNDIsIDIxOCwgCi0gICAgMjI3LCA0MiwgMjE4LCAyLCA0MiwgMjEyLCAyNCwgNDIsIDIxNCwgMTA2LCAxMTcsIDE5MywgNDIsIDExNSwgMTE3LCAxOTMsIAotICAgIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0OCwgMTQ2LCAxMTAsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0OCwgMTQ2LCAxMDUsIAotICAgIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0OCwgMTQ2LCAxNTgsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0OCwgMTQ2LCAxNjEsIAotICAgIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0OCwgMTQ2LCAxODksIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0OCwgMTQ2LCAxOTQsIAotICAgIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0OCwgMTQ2LCAxOTgsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0OCwgMTQ2LCAxOTUsIAotICAgIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0OCwgMTQ2LCAyMDAsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0OCwgMTQ2LCAyMTYsIAotICAgIDI0NywgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQ4LCAxNDYsIDI0NSwgMTY3LCAxMDksIDIxNywgMywgMTYsIDMxLCAyNDgsIAotICAgIDE0NiwgMjE1LCA3NiwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQ4LCAxNDYsIDIxNiwgMTY0LCAxMDksIDIxNywgMywgMTYsIAotICAgIDMxLCAyNDgsIDE0NiwgMjQ0LCA1LCAxMDksIDIxNywgMywgMTYsIDMxLCAyNDgsIDE0NiwgMjQ0LCAxMTgsIDEwOSwgMjE3LCAKLSAgICAzLCAxNiwgMzEsIDI0OCwgMTQ2LCAyMTksIDExOSwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQ4LCAxNDYsIDIyMCwgMTE5LCAKLSAgICAxMDksIDIxNywgMywgMTYsIDMxLCAyNDgsIDE0NiwgMjQ1LCAxOTAsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0OCwgMTQ2LCAKLSAgICAyMjgsIDE5NywgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQ4LCAxNDYsIDIxNSwgNzMsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIAotICAgIDI0OCwgMTQ2LCAyMTUsIDY3LCAxMDksIDIxNywgMywgMTYsIDMxLCAyNDgsIDE0NiwgMjE1LCA2MywgMTA5LCAyMTcsIDMsIAotICAgIDE2LCAzMSwgMjQ4LCAxNDYsIDIxNSwgNjQsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0OCwgMTQ2LCAyMTUsIDY5LCAxMDksIAotICAgIDIxNywgMywgMTYsIDMxLCAyNDgsIDE0NiwgMjE1LCA3MCwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQ4LCAxNDYsIDIxNSwgCi0gICAgNjUsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0OCwgMTQ2LCAyMTUsIDY2LCAxMDksIDIxNywgMywgMTYsIDMxLCAyNDgsIAotICAgIDE0NiwgMjE1LCA3MiwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQ4LCAxNDYsIDIxNSwgNjgsIDEwOSwgMjE3LCAzLCAxNiwgCi0gICAgMzEsIDI0OCwgMTQ2LCAyMTYsIDE2MiwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQ4LCAxNDYsIDIxNiwgMTYxLCA0MiwgMjQzLCAKLSAgICAxMTgsIDI0MSwgMTkyLCAzMSwgMjE2LCAxOTYsIDI0OSwgMTQwLCAyNDEsIDIyMywgMjQxLCAxOTIsIDMxLCAyMTYsIDE5NiwgCi0gICAgMjIzLCAxMjIsIDI0NSwgMjIzLCAyNDEsIDE5MiwgMzEsIDI0NywgMjMxLCAyNTMsIDIwNywgMjE2LCAxOTYsIDI1MiwgNTYsIAotICAgIDI0MSwgMTkyLCAzMSwgMjEwLCAyMjMsIDI0NCwgMzgsIDI0MSwgMTkyLCAzMSwgMjEyLCA1OSwgMjQxLCAxOTIsIDMxLCAKLSAgICAyNDksIDIwMywgMjQxLCAxOTIsIDMxLCAyMTYsIDE5NiwgMjU0LCAzLCAyNDEsIDE5MiwgMzEsIDI0MSwgNjAsIDIxNiwgMzgsIAotICAgIDI0MSwgMTkyLCAzMSwgNCwgMjE3LCA2MSwgMjQxLCAxOTIsIDMxLCAyMTUsIDIzNywgMjQxLCAxOTIsIDMxLCAyMjUsIDIxOSwgCi0gICAgMjQxLCAxOTIsIDMxLCAyMTgsIDE1OCwgMjQxLCAxOTIsIDMxLCAyNDQsIDEzOSwgMjQxLCAxOTIsIDMxLCAyNDIsIDEzMiwgCi0gICAgMjI0LCAyNDAsIDI0MSwgMTkyLCAzMSwgMjMwLCAxNTUsIDI0MSwgMTkyLCAzMSwgMjQ1LCAxMjYsIDI0MSwgMTkyLCAzMSwgCi0gICAgMjQ0LCAzOSwgMjQxLCAxOTIsIDMxLCAyMTEsIDIwNywgMjI2LCAxOTcsIDIxNiwgMTk2LCAyNDgsIDg2LCAyNDEsIDE5MiwgCi0gICAgMzEsIDI1NCwgNTEsIDI0MSwgMTkyLCAzMSwgMjQ5LCAxODUsIDI0MSwgMTkyLCAzMSwgMjUxLCAyMjcsIDIxNiwgMTM4LCAKLSAgICAyNDEsIDE5MiwgMzEsIDI0MiwgMTQ5LCAyNDEsIDE5MiwgMzEsIDIxOCwgMjQ1LCAyNTQsIDcwLCAyNDEsIDE5MiwgMzEsIAotICAgIDIyMywgNTMsIDI0MSwgMTkyLCAzMSwgMjM1LCAyMjAsIDI0MSwgMTkyLCAzMSwgMjQyLCAxMzIsIDIxNywgNjEsIDI0MSwgCi0gICAgMTkyLCAzMSwgMjMwLCAxMTEsIDI0OSwgMTU5LCAyNDEsIDE5MiwgMzEsIDI0MiwgMTMyLCAyMjQsIDE5NywgMjQxLCAxOTIsIAotICAgIDMxLCAyMTYsIDE5NiwgMjU1LCAxOCwgMjEyLCA0MCwgMjQxLCAxOTIsIDMxLCAyMTYsIDE5NiwgMjUwLCA4LCAyNDQsIDk2LCAKLSAgICAyNDEsIDE5MiwgMzEsIDIzNSwgMjMzLCAyNDEsIDE5MiwgMzEsIDI0NiwgNTcsIDI0MSwgMTkyLCAzMSwgMjIzLCA1NiwgCi0gICAgMjQxLCAxOTIsIDMxLCAyNDIsIDEzMiwgMjI0LCAyMjQsIDI0MSwgMTkyLCAzMSwgMjI0LCAxNzcsIDI0MSwgMTkyLCAzMSwgCi0gICAgMjQ4LCAxNjEsIDY0LCAyMTYsIDE5NiwgMjMyLCAyMzAsIDI0MSwgMTkyLCAzMSwgMjE2LCAxOTYsIDI0NCwgMTc0LCAyNDEsIAotICAgIDE5MiwgMzEsIDIyNiwgMTYzLCAyNDEsIDE5MiwgMzEsIDIyNiwgMjQ0LCAyNDEsIDE5MiwgMzEsIDI0OCwgNTksIDI0MSwgCi0gICAgMTkyLCAzMSwgMjQ4LCA3OSwgMjQxLCAxOTIsIDMxLCAyMzUsIDI0NywgMjQxLCAxOTIsIDMxLCAyNTEsIDE0OSwgMjQxLCAKLSAgICAxOTIsIDMxLCAyNDksIDIyMSwgMjE2LCA0MiwgMjMxLCA3NiwgMjQxLCAxOTIsIDMxLCAyNDMsIDg3LCAyMTYsIDM4LCAyNDEsIAotICAgIDE5MiwgMzEsIDIyNCwgMTI1LCAyMTQsIDE1NCwgMjQxLCAxOTIsIDMxLCAyMjYsIDE2MiwgMjQxLCAxOTIsIDMxLCAyMTYsIAotICAgIDE5NiwgMjEyLCAxMywgMjQxLCAxOTIsIDMxLCAyMjMsIDQ1LCAyNDEsIDE5MiwgMzEsIDIxNiwgMTk2LCAyNTAsIDIyMCwgCi0gICAgMjQxLCAxOTIsIDMxLCAyMTYsIDE5NiwgMjUzLCAyNTUsIDIxNiwgMTMzLCAyNDEsIDE5MiwgMzEsIDIxNiwgMTk2LCAyMzQsIAotICAgIDE3OSwgMjE4LCAxMzQsIDIzMCwgMTE1LCAyNDEsIDE5MiwgMzEsIDI0OCwgMzIsIDI0MSwgMTkyLCAzMSwgMjE2LCAxOTYsIAotICAgIDIzMSwgMTUyLCAyMzEsIDIwMiwgMjQxLCAxOTIsIDMxLCAyNTUsIDE5LCAyNDEsIDE5MiwgMzEsIDIxNiwgMTk2LCAyMTIsIAotICAgIDU0LCAyNDEsIDE5MiwgMzEsIDIxNiwgMTk2LCAyNDMsIDQ3LCAyMTEsIDIzOSwgMjQxLCAxOTIsIDMxLCAyMTYsIDE5NiwgCi0gICAgMjM1LCA1MiwgMjMzLCAxMDcsIDI0MSwgMTkyLCAzMSwgMjQ3LCAxODQsIDI0MSwgMTkyLCAzMSwgMjMyLCAyMjAsIDI0MSwgCi0gICAgMTkyLCAzMSwgMjM1LCAyMjMsIDIxNSwgMTg3LCAyNDEsIDE5MiwgMzEsIDQsIDIyNCwgMTk3LCAyNDEsIDE5MiwgMzEsIAotICAgIDI1NCwgMjE3LCAyNDksIDIxMiwgMjQxLCAxOTIsIDMxLCAyNTIsIDU5LCAyNDksIDIxMiwgOCwgMywgMjM1LCAxNjAsIDgsIAotICAgIDMsIDIzNSwgMTUzLCA4LCAzLCA3MywgOCwgMywgMjM1LCAxODIsIDgsIDMsIDIzNiwgNTgsIDgsIDMsIDIzNiwgNDEsIDgsIAotICAgIDMsIDIzNiwgNjAsIDgsIDMsIDIzNiwgNTksIDgsIDMsIDI1MywgMjA2LCA4LCAzLCAyNTMsIDE2OSwgOCwgMywgNjEsIDgsIAotICAgIDMsIDI1NCwgNzIsIDgsIDMsIDIxNCwgMTY0LCA4LCAzLCAyMTQsIDE2NywgOCwgMywgMjE0LCAxNjUsIDgsIDMsIDIyNiwgCi0gICAgMTQwLCA4LCAzLCAyMjYsIDExNCwgOCwgMywgNzYsIDgsIDMsIDIyNiwgMTc1LCA4LCAzLCAyNDUsIDM1LCA4LCAzLCA3NSwgCi0gICAgOCwgMywgMjExLCAxOTUsIDgsIDMsIDI1MSwgMjI4LCA4LCAzLCAyNTEsIDIyNSwgOCwgMywgMjUyLCA2LCA4LCAzLCAyNTEsIAotICAgIDIzOCwgOCwgMywgMjUxLCAyNTEsIDgsIDMsIDI1MSwgMjUwLCA4LCAzLCAyNTEsIDI1MywgOCwgMywgMjUxLCAyNTIsIDgsIAotICAgIDMsIDI1MiwgMTIxLCA4LCAzLCAyNTIsIDExMywgOCwgMywgMjUyLCAxOTEsIDgsIDMsIDI1MiwgMTQyLCA4LCAzLCAyNTEsIAotICAgIDEwMSwgOCwgMywgMjUxLCAxMDUsIDgsIDMsIDI1MSwgMTAyLCA4LCAzLCAyNTEsIDE3OSwgOCwgMywgMjUxLCAxNjMsIDgsIAotICAgIDMsIDI1MSwgMjA1LCA4LCAzLCAyNTEsIDE4NSwgOCwgMywgMjUyLCAyMSwgOCwgMywgMjUyLCA3NSwgOCwgMywgMjUyLCAzMywgCi0gICAgOCwgMywgMjUxLCA4NywgOCwgMywgMjUxLCA4NCwgOCwgMywgMjUxLCAxMjUsIDgsIDMsIDI1MSwgMTAwLCA4LCAzLCAyNTEsIAotICAgIDk0LCA4LCAzLCAyNTEsIDk4LCA4LCAzLCAyNTEsIDcyLCA4LCAzLCAyNTEsIDcwLCA4LCAzLCAyNTEsIDc3LCA4LCAzLCAKLSAgICAyNTEsIDc1LCA4LCAzLCAyNTEsIDczLCA4LCAzLCAyNTEsIDc0LCA4LCAzLCAyMjUsIDQ5LCA4LCAzLCAyMjUsIDQ1LCA4LCAKLSAgICAzLCAyMjUsIDEwOCwgOCwgMywgMjI1LCA1OSwgOCwgMywgMjI1LCA3NSwgOCwgMywgMjI1LCAxMDIsIDgsIDMsIDIyNSwgOTgsIAotICAgIDgsIDMsIDIyNSwgMjQwLCA4LCAzLCAyMjUsIDIzMCwgOCwgMywgMTkwLCA4LCAzLCAyMjYsIDIxLCA4LCAzLCAyMjQsIDEzNSwgCi0gICAgOCwgMywgMjI0LCAxMzcsIDgsIDMsIDIyNCwgMTM2LCA4LCAzLCAyMjQsIDIzMywgOCwgMywgMjI0LCAyMjIsIDgsIDMsIAotICAgIDIyNSwgMTYsIDgsIDMsIDIyNCwgMjQ1LCA4LCAzLCAyMjQsIDEyMSwgOCwgMywgMjI0LCAxMTcsIDgsIDMsIDIyNCwgMTUwLCAKLSAgICA4LCAzLCAyMjQsIDEzNCwgOCwgMywgMjI0LCAxMjYsIDgsIDMsIDIyNCwgMTMyLCA4LCAzLCAyMjQsIDEwMCwgOCwgMywgCi0gICAgMjI0LCA5OSwgOCwgMywgMjI0LCAxMDQsIDgsIDMsIDIyNCwgMTAzLCA4LCAzLCAyMjQsIDEwMSwgOCwgMywgMjI0LCAxMDIsIAotICAgIDgsIDMsIDI1MiwgOTYsIDgsIDMsIDI1MiwgOTUsIDgsIDMsIDI1MiwgMTAyLCA4LCAzLCAyNTIsIDk3LCA4LCAzLCAyNTIsIAotICAgIDk5LCA4LCAzLCAyNTIsIDk4LCA4LCAzLCAyNTIsIDEwMSwgOCwgMywgMjUyLCAxMDAsIDgsIDMsIDI1MiwgMTA4LCA4LCAzLCAKLSAgICAyNTIsIDEwNywgOCwgMywgMjUyLCAxMTEsIDgsIDMsIDI1MiwgMTA5LCA4LCAzLCAyNTIsIDg3LCA4LCAzLCAyNTIsIDg5LCAKLSAgICA4LCAzLCAyNTIsIDg4LCA4LCAzLCAyNTIsIDkyLCA4LCAzLCAyNTIsIDkxLCA4LCAzLCAyNTIsIDk0LCA4LCAzLCAyNTIsIAotICAgIDkzLCA4LCAzLCAyNTIsIDEwMywgOCwgMywgMjUyLCAxMDYsIDgsIDMsIDI1MiwgMTA0LCA4LCAzLCAyNTIsIDgzLCA4LCAzLCAKLSAgICAyNTIsIDgyLCA4LCAzLCAyNTIsIDkwLCA4LCAzLCAyNTIsIDg2LCA4LCAzLCAyNTIsIDg0LCA4LCAzLCAyNTIsIDg1LCA4LCAKLSAgICAzLCAyNTIsIDc5LCA4LCAzLCAyNTIsIDc4LCA4LCAzLCAyNTIsIDgxLCA4LCAzLCAyNTIsIDgwLCA4LCAzLCAyMjksIDE2OSwgCi0gICAgOCwgMywgMjI5LCAxNjgsIDgsIDMsIDIyOSwgMTc0LCA4LCAzLCAyMjksIDE3MCwgOCwgMywgMjI5LCAxNzEsIDgsIDMsIAotICAgIDIyOSwgMTczLCA4LCAzLCAyMjksIDE3MiwgOCwgMywgMjI5LCAxNzcsIDgsIDMsIDIyOSwgMTc2LCA4LCAzLCAyMjksIDE3OSwgCi0gICAgOCwgMywgMjI5LCAxNzgsIDgsIDMsIDIyOSwgMTY1LCA4LCAzLCAyMjksIDE2NCwgOCwgMywgMjI5LCAxNjcsIDgsIDMsIAotICAgIDIyOSwgMTY2LCA4LCAzLCAyMjksIDE1OCwgOCwgMywgMjI5LCAxNTcsIDgsIDMsIDIyOSwgMTYyLCA4LCAzLCAyMjksIDE2MSwgCi0gICAgOCwgMywgMjI5LCAxNTksIDgsIDMsIDIyOSwgMTYwLCA4LCAzLCAyMjksIDE1MiwgOCwgMywgMjI5LCAxNTEsIDgsIDMsIAotICAgIDIyOSwgMTU2LCA4LCAzLCAyMjksIDE1NSwgOCwgMywgMjI5LCAxNTMsIDgsIDMsIDIyOSwgMTU0LCA4LCAzLCAyNDEsIDExMCwgCi0gICAgOCwgMywgMjQxLCAxMDksIDgsIDMsIDI0MSwgMTE1LCA4LCAzLCAyNDEsIDExMSwgOCwgMywgMjQxLCAxMTIsIDgsIDMsIAotICAgIDI0MSwgMTE0LCA4LCAzLCAyNDEsIDExMywgOCwgMywgMjQxLCAxMTgsIDgsIDMsIDI0MSwgMTE3LCA4LCAzLCAyNDEsIDEyMCwgCi0gICAgOCwgMywgMjQxLCAxMTksIDgsIDMsIDI0MSwgMTAxLCA4LCAzLCAyNDEsIDEwMywgOCwgMywgMjQxLCAxMDIsIDgsIDMsIAotICAgIDI0MSwgMTA2LCA4LCAzLCAyNDEsIDEwNSwgOCwgMywgMjQxLCAxMDgsIDgsIDMsIDI0MSwgMTA3LCA4LCAzLCAyNDEsIDk3LCAKLSAgICA4LCAzLCAyNDEsIDk2LCA4LCAzLCAyNDEsIDEwNCwgOCwgMywgMjQxLCAxMDAsIDgsIDMsIDI0MSwgOTgsIDgsIDMsIDI0MSwgCi0gICAgOTksIDgsIDMsIDI0MSwgOTEsIDgsIDMsIDI0MSwgOTUsIDgsIDMsIDI0MSwgOTQsIDgsIDMsIDI0MSwgOTIsIDgsIDMsIAotICAgIDI0MSwgOTMsIDgsIDMsIDIzMCwgMTcyLCA4LCAzLCAyMzAsIDE3MSwgOCwgMywgMjMwLCAyMzAsIDgsIDMsIDIzMCwgMTc4LCAKLSAgICA4LCAzLCAyMzAsIDIwMywgOCwgMywgMjMwLCAyMjEsIDgsIDMsIDIzMCwgMjE5LCA4LCAzLCAyMzEsIDEzOSwgOCwgMywgCi0gICAgMjMxLCAxMzQsIDgsIDMsIDE4NCwgOCwgMywgMjMxLCAxNzIsIDgsIDMsIDIzMCwgNzQsIDgsIDMsIDIzMCwgNzMsIDgsIDMsIAotICAgIDIzMCwgNzcsIDgsIDMsIDIzMCwgNzUsIDgsIDMsIDIzMCwgMTIxLCA4LCAzLCAyMzAsIDEwNywgOCwgMywgMjMwLCAxNjEsIAotICAgIDgsIDMsIDIzMCwgMTI2LCA4LCAzLCAyMzEsIDI2LCA4LCAzLCAyMzEsIDkxLCA4LCAzLCAyMzAsIDU1LCA4LCAzLCAyMzAsIAotICAgIDUxLCA4LCAzLCAyMzAsIDEwMiwgOCwgMywgMjMwLCA3MCwgOCwgMywgMjMwLCA2MywgOCwgMywgMjMwLCA2OCwgOCwgMywgCi0gICAgMjMwLCAyOCwgOCwgMywgMjMwLCAyNywgOCwgMywgMjMwLCAzMywgOCwgMywgMjMwLCAzMCwgOCwgMywgMjQ0LCA4MywgOCwgCi0gICAgMywgMjQ0LCA3OCwgOCwgMywgMjQ0LCAxMjEsIDgsIDMsIDI0NCwgOTgsIDgsIDMsIDI0NCwgMTY3LCA4LCAzLCAyNDQsIAotICAgIDE1OCwgOCwgMywgMjQ0LCAxOTYsIDgsIDMsIDI0NCwgMTcwLCA4LCAzLCAyNDQsIDMsIDgsIDMsIDI0NCwgNDMsIDgsIDMsIAotICAgIDI0NCwgMjcsIDgsIDMsIDI0MywgMjE4LCA4LCAzLCAyNDMsIDIxNywgOCwgMywgMjQzLCAyMzQsIDgsIDMsIDI0MywgMjIzLCAKLSAgICA4LCAzLCAyNDMsIDIyMSwgOCwgMywgMjQzLCAyMjIsIDgsIDMsIDI0MywgMjA1LCA4LCAzLCAyNDMsIDIwNCwgOCwgMywgCi0gICAgMjQzLCAyMDgsIDgsIDMsIDI0MywgMjA2LCA4LCAzLCAyMTMsIDE0NCwgOCwgMywgMjEzLCAxMzksIDgsIDMsIDIxMywgMTc2LCAKLSAgICA4LCAzLCAyMTMsIDE1MywgOCwgMywgMjEzLCAxNjYsIDgsIDMsIDIxMywgMTYzLCA4LCAzLCAyMTMsIDE2OCwgOCwgMywgCi0gICAgMjEzLCAxNjcsIDgsIDMsIDIxNCwgNywgOCwgMywgMjE0LCAyLCA4LCAzLCAyMTQsIDI3LCA4LCAzLCAyMTQsIDE4LCA4LCAzLCAKLSAgICAyMTMsIDEyNSwgOCwgMywgMjEzLCAxMjEsIDgsIDMsIDIxMywgMTM4LCA4LCAzLCAyMTMsIDEyNiwgOCwgMywgMjEzLCAxNzgsIAotICAgIDgsIDMsIDIxMywgMjQ0LCA4LCAzLCAyMTIsIDExMCwgOCwgMywgMjEyLCAxMDgsIDgsIDMsIDIxMiwgMTE2LCA4LCAzLCAKLSAgICAyMTIsIDExMywgOCwgMywgMjEyLCAxMTEsIDgsIDMsIDIxMiwgMTEyLCA4LCAzLCAyMTIsIDEwMiwgOCwgMywgMjEyLCAxMDEsIAotICAgIDgsIDMsIDIxMiwgMTA2LCA4LCAzLCAyMTIsIDEwNSwgOCwgMywgMjEyLCAxMDMsIDgsIDMsIDIxMiwgMTA0LCA4LCAzLCAKLSAgICAyNDcsIDE3OCwgOCwgMywgMjQ3LCAxNjYsIDgsIDMsIDI0OCwgMywgOCwgMywgMjQ3LCAyMDMsIDgsIDMsIDI0NywgMjM2LCAKLSAgICA4LCAzLCAyNDcsIDI0MCwgOCwgMywgMjQ3LCAyMzksIDgsIDMsIDI0OCwgMTUyLCA4LCAzLCAyNDgsIDE0NywgOCwgMywgCi0gICAgMjQ4LCAyMjEsIDgsIDMsIDI0OCwgMTcyLCA4LCAzLCAyNDYsIDYyLCA4LCAzLCAyNDYsIDYzLCA4LCAzLCAyNDcsIDEyMCwgCi0gICAgOCwgMywgMjQ2LCAxMDIsIDgsIDMsIDI0NywgMTQ1LCA4LCAzLCAyNDcsIDEyMiwgOCwgMywgMjQ4LCAzMCwgOCwgMywgMjQ4LCAKLSAgICA5MCwgOCwgMywgMjQ4LCA0NSwgOCwgMywgMjQ2LCA1MywgOCwgMywgMjQ2LCA1MSwgOCwgMywgMjQ2LCA3OCwgOCwgMywgCi0gICAgMjQ2LCA2MSwgOCwgMywgMjQ2LCA1NiwgOCwgMywgMjQ2LCA1OSwgOCwgMywgMjE2LCA2NywgOCwgMywgMjE2LCA2MSwgOCwgCi0gICAgMywgMjE2LCAxMTcsIDgsIDMsIDIxNiwgNzYsIDgsIDMsIDIxNiwgMTA5LCA4LCAzLCAyMTYsIDExMSwgOCwgMywgMjE2LCAKLSAgICAxMTAsIDgsIDMsIDIxNywgNDYsIDgsIDMsIDIxNywgMzMsIDgsIDMsIDIxNywgMTA1LCA4LCAzLCAyMTcsIDU0LCA4LCAzLCAKLSAgICAyMTUsIDEwMiwgOCwgMywgMjE1LCAxMDEsIDgsIDMsIDIxNSwgMTA0LCA4LCAzLCAyMTUsIDEwMywgOCwgMywgMjE2LCA1LCAKLSAgICA4LCAzLCAyMTYsIDEsIDgsIDMsIDExMSwgOCwgMywgMjE2LCAxMywgOCwgMywgMjE2LCAyMTMsIDgsIDMsIDIxNywgMjIsIDgsIAotICAgIDMsIDIxNiwgMjM3LCA4LCAzLCAyMTUsIDg4LCA4LCAzLCAyMTUsIDgzLCA4LCAzLCAyMTUsIDExOCwgOCwgMywgMjE1LCAKLSAgICAxMDAsIDgsIDMsIDIxNSwgODksIDgsIDMsIDIxNSwgOTgsIDgsIDMsIDI0OCwgMTA3LCA4LCAzLCAyNDgsIDEwNiwgOCwgMywgCi0gICAgMjQ4LCAxMTIsIDgsIDMsIDI0OCwgMTA4LCA4LCAzLCAyNDgsIDEwOSwgOCwgMywgMjQ4LCAxMTEsIDgsIDMsIDI0OCwgMTEwLCAKLSAgICA4LCAzLCAyNDgsIDEyOCwgOCwgMywgMjQ4LCAxMjcsIDgsIDMsIDI0OCwgMTM1LCA4LCAzLCAyNDgsIDEyOSwgOCwgMywgCi0gICAgMjQ4LCA5NywgOCwgMywgMjQ4LCA5OSwgOCwgMywgMjQ4LCA5OCwgOCwgMywgMjQ4LCAxMDIsIDgsIDMsIDI0OCwgMTAxLCA4LCAKLSAgICAzLCAyNDgsIDEwNSwgOCwgMywgMjQ4LCAxMDMsIDgsIDMsIDI0OCwgMTIwLCA4LCAzLCAyNDgsIDEyMywgOCwgMywgMjQ4LCAKLSAgICAxMjEsIDgsIDMsIDI0OCwgOTMsIDgsIDMsIDI0OCwgOTIsIDgsIDMsIDI0OCwgMTAwLCA4LCAzLCAyNDgsIDk2LCA4LCAzLCAKLSAgICAyNDgsIDk0LCA4LCAzLCAyNDgsIDk1LCA4LCAzLCAyMjksIDEyNiwgOCwgMywgMjI5LCAxMjUsIDgsIDMsIDIyOSwgMTMzLCAKLSAgICA4LCAzLCAyMjksIDEyOCwgOCwgMywgMjI5LCAxMjksIDgsIDMsIDIyOSwgMTMwLCA4LCAzLCAyMjksIDE0MiwgOCwgMywgCi0gICAgMjI5LCAxNDEsIDgsIDMsIDIyOSwgMTQ4LCA4LCAzLCAyMjksIDE0MywgOCwgMywgMjI5LCAxMTgsIDgsIDMsIDIyOSwgMTE3LCAKLSAgICA4LCAzLCAyMjksIDEyNCwgOCwgMywgMjI5LCAxMTksIDgsIDMsIDIyOSwgMTM0LCA4LCAzLCAyMjksIDE0MCwgOCwgMywgCi0gICAgMjI5LCAxMzgsIDgsIDMsIDIyOSwgMTEwLCA4LCAzLCAyMjksIDEwOSwgOCwgMywgMjI5LCAxMTUsIDgsIDMsIDIyOSwgMTEzLCAKLSAgICA4LCAzLCAyMjksIDExMSwgOCwgMywgMjI5LCAxMTIsIDgsIDMsIDI0MSwgNzcsIDgsIDMsIDI0MSwgNzYsIDgsIDMsIDI0MSwgCi0gICAgODMsIDgsIDMsIDI0MSwgNzgsIDgsIDMsIDI0MSwgODAsIDgsIDMsIDI0MSwgNzksIDgsIDMsIDI0MSwgODIsIDgsIDMsIAotICAgIDI0MSwgODEsIDgsIDMsIDI0MSwgODgsIDgsIDMsIDI0MSwgODcsIDgsIDMsIDI0MSwgOTAsIDgsIDMsIDI0MSwgODksIDgsIAotICAgIDMsIDI0MSwgNzEsIDgsIDMsIDI0MSwgNzIsIDgsIDMsIDI0MSwgNzQsIDgsIDMsIDI0MSwgNzMsIDgsIDMsIDI0MSwgNzUsIAotICAgIDgsIDMsIDI0MSwgODQsIDgsIDMsIDI0MSwgODYsIDgsIDMsIDI0MSwgODUsIDgsIDMsIDI0MSwgNzAsIDgsIDMsIDIyOCwgCi0gICAgMTg5LCA4LCAzLCAyMjgsIDE4NywgOCwgMywgMjI4LCAyMzMsIDgsIDMsIDIyOCwgMTkyLCA4LCAzLCAyMjgsIDIxNSwgOCwgCi0gICAgMywgMjI4LCAyMjksIDgsIDMsIDIyOCwgMjI4LCA4LCAzLCAyMjksIDE4MywgOCwgMywgMTk3LCA4LCAzLCAyMjksIDE5NywgCi0gICAgOCwgMywgMjI3LCAxODYsIDgsIDMsIDIyNywgMTg4LCA4LCAzLCAyMjcsIDE4NywgOCwgMywgMjI4LCA1MSwgOCwgMywgMjI4LCAKLSAgICAzOCwgOCwgMywgMjI4LCA3NCwgOCwgMywgMjI4LCA2MCwgOCwgMywgMjI5LCA4MywgOCwgMywgMjI5LCAxMDcsIDgsIDMsIAotICAgIDIyOSwgOTQsIDgsIDMsIDIyNywgMTgxLCA4LCAzLCAyMjcsIDE3NywgOCwgMywgMjI3LCAyMzcsIDgsIDMsIDIyNywgMTg1LCAKLSAgICA4LCAzLCAyMjcsIDE4MywgOCwgMywgMjI3LCAxODQsIDgsIDMsIDI0MSwgMTQxLCA4LCAzLCAyNDEsIDE0MCwgOCwgMywgCi0gICAgMjQxLCAxNDYsIDgsIDMsIDI0MSwgMTQyLCA4LCAzLCAyNDEsIDE0MywgOCwgMywgMjQxLCAxNDUsIDgsIDMsIDI0MSwgMTQ0LCAKLSAgICA4LCAzLCAyNDEsIDE1MSwgOCwgMywgMjQxLCAxNTAsIDgsIDMsIDI0MSwgMTUzLCA4LCAzLCAyNDEsIDE1MiwgOCwgMywgCi0gICAgMjQxLCAxMzMsIDgsIDMsIDI0MSwgMTM1LCA4LCAzLCAyNDEsIDEzNCwgOCwgMywgMjQxLCAxMzcsIDgsIDMsIDI0MSwgMTM5LCAKLSAgICA4LCAzLCAyNDEsIDEzOCwgOCwgMywgMjQxLCAxNDcsIDgsIDMsIDI0MSwgMTQ5LCA4LCAzLCAyNDEsIDE0OCwgOCwgMywgCi0gICAgMjQxLCAxMjksIDgsIDMsIDI0MSwgMTI4LCA4LCAzLCAyNDEsIDEzNiwgOCwgMywgMjQxLCAxMzIsIDgsIDMsIDI0MSwgMTMwLCAKLSAgICA4LCAzLCAyNDEsIDEzMSwgOCwgMywgMjQxLCAxMjMsIDgsIDMsIDI0MSwgMTIyLCA4LCAzLCAyNDEsIDEyNywgOCwgMywgCi0gICAgMjQxLCAxMjYsIDgsIDMsIDI0MSwgMTI0LCA4LCAzLCAyNDEsIDEyNSwgOCwgMywgMjMyLCAxOTUsIDgsIDMsIDIzMiwgMTg5LCAKLSAgICA4LCAzLCAyMzIsIDI0MSwgOCwgMywgMjMyLCAyMDIsIDgsIDMsIDIzMiwgMjMzLCA4LCAzLCAyMzIsIDIzMiwgOCwgMywgCi0gICAgMjMyLCAyMzYsIDgsIDMsIDIzMiwgMjM0LCA4LCAzLCAyMzMsIDc5LCA4LCAzLCAyMzMsIDY5LCA4LCAzLCAyMzMsIDEzNSwgCi0gICAgOCwgMywgMjMzLCA4OCwgOCwgMywgMjMyLCA3OSwgOCwgMywgMjMyLCA3OCwgOCwgMywgMjMyLCA4MSwgOCwgMywgMjMyLCAKLSAgICA4MCwgOCwgMywgMjMyLCAxMTYsIDgsIDMsIDIzMiwgMTA2LCA4LCAzLCAyMzIsIDE1NiwgOCwgMywgMjMyLCAxMjAsIDgsIDMsIAotICAgIDIzMywgMiwgOCwgMywgMjMzLCA1OCwgOCwgMywgMjMzLCAxNywgOCwgMywgMjMyLCA3NCwgOCwgMywgMjMyLCA3MiwgOCwgMywgCi0gICAgMjMyLCA5OCwgOCwgMywgMjMyLCA3NywgOCwgMywgMjMyLCA3NSwgOCwgMywgMjMyLCA3NiwgOCwgMywgMjMyLCA1NCwgOCwgCi0gICAgMywgMjMyLCA1MywgOCwgMywgMjMyLCA2MiwgOCwgMywgMjMyLCA1NywgOCwgMywgMjMyLCA1NSwgOCwgMywgMjMyLCA1NiwgCi0gICAgOCwgMywgMjQyLCAxODksIDgsIDMsIDI0MiwgMTg4LCA4LCAzLCAyNDIsIDIxNCwgOCwgMywgMjQyLCAxOTksIDgsIDMsIAotICAgIDI0MiwgMjA2LCA4LCAzLCAyNDIsIDIwNSwgOCwgMywgMjQyLCAyMDgsIDgsIDMsIDI0MiwgMjA3LCA4LCAzLCAyNDMsIDg5LCAKLSAgICA4LCAzLCAyNDMsIDg0LCA4LCAzLCAyNDMsIDEzNSwgOCwgMywgMjQzLCA5OSwgOCwgMywgMjQyLCA5MSwgOCwgMywgMjQyLCAKLSAgICA5MCwgOCwgMywgMjQyLCA5MywgOCwgMywgMjQyLCA5MiwgOCwgMywgMjQyLCAxNTQsIDgsIDMsIDI0MiwgMTUyLCA4LCAzLCAKLSAgICAyNDIsIDE3NCwgOCwgMywgMjQyLCAxNjIsIDgsIDMsIDI0MywgMzMsIDgsIDMsIDI0MywgMzEsIDgsIDMsIDI0MywgNjIsIDgsIAotICAgIDMsIDI0MywgNDQsIDgsIDMsIDI0MiwgODEsIDgsIDMsIDI0MiwgODAsIDgsIDMsIDI0MiwgMTEzLCA4LCAzLCAyNDIsIDg5LCAKLSAgICA4LCAzLCAyNDIsIDgyLCA4LCAzLCAyNDIsIDg4LCA4LCAzLCAyMzQsIDYxLCA4LCAzLCAyMzQsIDYwLCA4LCAzLCAyMzQsIAotICAgIDkyLCA4LCAzLCAyMzQsIDc1LCA4LCAzLCAyMzQsIDg1LCA4LCAzLCAyMzQsIDg4LCA4LCAzLCAyMzQsIDg2LCA4LCAzLCAKLSAgICAyMzQsIDIwMiwgOCwgMywgMjM0LCAxOTAsIDgsIDMsIDE3NiwgOCwgMywgMjM0LCAyMjgsIDgsIDMsIDIzMywgMjAwLCA4LCAKLSAgICAzLCAyMzMsIDIwNSwgOCwgMywgMjMzLCAyMDIsIDgsIDMsIDIzNCwgMCwgOCwgMywgMjMzLCAyNTIsIDgsIDMsIDIzNCwgMjgsIAotICAgIDgsIDMsIDIzNCwgNywgOCwgMywgMjM0LCAxNTYsIDgsIDMsIDIzNCwgMTQwLCA4LCAzLCAyMzQsIDE4MiwgOCwgMywgMjM0LCAKLSAgICAxNTksIDgsIDMsIDIzMywgMTg5LCA4LCAzLCAyMzMsIDE4NiwgOCwgMywgMjMzLCAyMTcsIDgsIDMsIDIzMywgMTk5LCA4LCAKLSAgICAzLCAyMzMsIDE5MiwgOCwgMywgMjMzLCAxOTYsIDgsIDMsIDI0MywgMTUsIDgsIDMsIDI0MywgMTQsIDgsIDMsIDI0MywgMTksIAotICAgIDgsIDMsIDI0MywgMTYsIDgsIDMsIDI0MywgMTgsIDgsIDMsIDI0MywgMTcsIDgsIDMsIDI0MywgMjYsIDgsIDMsIDI0MywgCi0gICAgMjUsIDgsIDMsIDI0MywgMjksIDgsIDMsIDI0MywgMjcsIDgsIDMsIDI0MywgNiwgOCwgMywgMjQzLCA1LCA4LCAzLCAyNDMsIAotICAgIDgsIDgsIDMsIDI0MywgNywgOCwgMywgMjQzLCAxMSwgOCwgMywgMjQzLCAxMCwgOCwgMywgMjQzLCAxMywgOCwgMywgMjQzLCAKLSAgICAxMiwgOCwgMywgMjQzLCAyMSwgOCwgMywgMjQzLCAyMCwgOCwgMywgMjQzLCAyNCwgOCwgMywgMjQzLCAyMiwgOCwgMywgCi0gICAgMjQzLCAxLCA4LCAzLCAyNDMsIDAsIDgsIDMsIDI0MywgOSwgOCwgMywgMjQzLCA0LCA4LCAzLCAyNDMsIDIsIDgsIDMsIAotICAgIDI0MywgMywgOCwgMywgMjMwLCAyNDksIDgsIDMsIDIzMCwgMjUwLCA4LCAzLCAyMzEsIDEyLCA4LCAzLCAyMzEsIDExLCA4LCAKLSAgICAzLCAyMzEsIDE0LCA4LCAzLCAyMzEsIDEzLCA4LCAzLCAyMzAsIDI0MCwgOCwgMywgMjMwLCAyNDIsIDgsIDMsIDIzMCwgCi0gICAgMjQxLCA4LCAzLCAyMzAsIDI0NSwgOCwgMywgMjMwLCAyNDQsIDgsIDMsIDIzMCwgMjQ3LCA4LCAzLCAyMzAsIDI0NiwgOCwgCi0gICAgMywgMjMwLCAyNTEsIDgsIDMsIDIzMCwgMjUzLCA4LCAzLCAyMzAsIDI1MiwgOCwgMywgMjMwLCAyMzYsIDgsIDMsIDIzMCwgCi0gICAgMjM1LCA4LCAzLCAyMzAsIDI0MywgOCwgMywgMjMwLCAyMzksIDgsIDMsIDIzMCwgMjM3LCA4LCAzLCAyMzAsIDIzOCwgOCwgCi0gICAgMywgMjQwLCAxODAsIDgsIDMsIDI0MCwgMTc5LCA4LCAzLCAyNDAsIDE4NiwgOCwgMywgMjQwLCAxODEsIDgsIDMsIDI0MCwgCi0gICAgMTgzLCA4LCAzLCAyNDAsIDE4MiwgOCwgMywgMjQwLCAxODUsIDgsIDMsIDI0MCwgMTg0LCA4LCAzLCAyNDAsIDE5MSwgOCwgCi0gICAgMywgMjQwLCAxOTAsIDgsIDMsIDI0MCwgMTkzLCA4LCAzLCAyNDAsIDE5MiwgOCwgMywgMjQwLCAxNzIsIDgsIDMsIDI0MCwgCi0gICAgMTcxLCA4LCAzLCAyNDAsIDE3NCwgOCwgMywgMjQwLCAxNzMsIDgsIDMsIDI0MCwgMTc2LCA4LCAzLCAyNDAsIDE3NSwgOCwgCi0gICAgMywgMjQwLCAxNzgsIDgsIDMsIDI0MCwgMTc3LCA4LCAzLCAyNDAsIDE4NywgOCwgMywgMjQwLCAxODksIDgsIDMsIDI0MCwgCi0gICAgMTg4LCA4LCAzLCAyMjksIDI0LCA4LCAzLCAyMjksIDI2LCA4LCAzLCAyMjksIDI1LCA4LCAzLCAyMjksIDY3LCA4LCAzLCAKLSAgICAyMjksIDY1LCA4LCAzLCAyMjksIDc3LCA4LCAzLCAyMjksIDcwLCA4LCAzLCAyMjgsIDI0MywgOCwgMywgMjI4LCAyNDIsIDgsIAotICAgIDMsIDIyOCwgMjQ0LCA4LCAzLCAyMjgsIDI1MiwgOCwgMywgMjI4LCAyNDksIDgsIDMsIDIyOSwgNCwgOCwgMywgMjI4LCAKLSAgICAyNTQsIDgsIDMsIDIyOSwgNTgsIDgsIDMsIDIyOSwgNjQsIDgsIDMsIDIyOSwgNjAsIDgsIDMsIDI0MSwgMTU2LCA4LCAzLCAKLSAgICAyNDEsIDE2NiwgOCwgMywgMjQxLCAxNzUsIDgsIDMsIDI0MSwgMjUxLCA4LCAzLCAyNDEsIDI0MywgOCwgMywgMTYyLCA4LCAKLSAgICAzLCAyNDIsIDYsIDgsIDMsIDI0MCwgMjA2LCA4LCAzLCAyNDAsIDIwNSwgOCwgMywgMjQwLCAyMDgsIDgsIDMsIDI0MCwgCi0gICAgMjA3LCA4LCAzLCAyNDAsIDI0MiwgOCwgMywgMjQwLCAyMzMsIDgsIDMsIDI0MSwgNjgsIDgsIDMsIDI0MSwgNDcsIDgsIDMsIAotICAgIDI0MSwgMTk0LCA4LCAzLCAyNDEsIDIzOCwgOCwgMywgMjQxLCAyMDYsIDgsIDMsIDIxMiwgNDMsIDgsIDMsIDIxMiwgMjgsIAotICAgIDgsIDMsIDIxMiwgNjUsIDgsIDMsIDIxMiwgNTEsIDgsIDMsIDIxMSwgMTg1LCA4LCAzLCAyMTEsIDE4NywgOCwgMywgMjExLCAKLSAgICAxODYsIDgsIDMsIDIxMSwgMjAzLCA4LCAzLCAyMTEsIDIyNywgOCwgMywgMjExLCAyMTAsIDgsIDMsIDIxMiwgNSwgOCwgMywgCi0gICAgMjEyLCAyMiwgOCwgMywgMjEyLCAxMCwgOCwgMywgMjEwLCAzMCwgOCwgMywgMjEwLCAyOSwgOCwgMywgMjEwLCA0NCwgOCwgCi0gICAgMywgMjEwLCAzMiwgOCwgMywgMjEwLCAzNywgOCwgMywgMjEwLCAzOSwgOCwgMywgMjEwLCAzOCwgOCwgMywgMjEwLCAxMDIsIAotICAgIDgsIDMsIDIxMCwgOTksIDgsIDMsIDIxMCwgMTE2LCA4LCAzLCAyMTAsIDEwNSwgOCwgMywgMjEwLCA2LCA4LCAzLCAyMTAsIAotICAgIDgsIDgsIDMsIDIxMCwgNywgOCwgMywgMjEwLCAxOSwgOCwgMywgMjEwLCAxOCwgOCwgMywgMjEwLCAyMywgOCwgMywgMjEwLCAKLSAgICAyMCwgOCwgMywgMjEwLCA4NCwgOCwgMywgMjEwLCA5NCwgOCwgMywgMjEwLCA4OCwgOCwgMywgMjEwLCAyLCA4LCAzLCAyMTAsIAotICAgIDEsIDgsIDMsIDIxMCwgMTMsIDgsIDMsIDIxMCwgNSwgOCwgMywgMjEwLCAzLCA4LCAzLCAyMTAsIDQsIDgsIDMsIDIwOSwgCi0gICAgMjQ1LCA4LCAzLCAyMDksIDI0NCwgOCwgMywgMjA5LCAyNTAsIDgsIDMsIDIwOSwgMjQ4LCA4LCAzLCAyMDksIDI0NiwgOCwgCi0gICAgMywgMjA5LCAyNDcsIDgsIDMsIDI1MCwgMjgsIDgsIDMsIDI1MCwgMjQsIDgsIDMsIDI1MCwgNTEsIDgsIDMsIDI1MCwgMzcsIAotICAgIDgsIDMsIDI1MCwgNDgsIDgsIDMsIDI1MCwgNDIsIDgsIDMsIDI1MCwgNTAsIDgsIDMsIDI1MCwgNDksIDgsIDMsIDI1MCwgCi0gICAgMjI0LCA4LCAzLCAyNTAsIDIxNywgOCwgMywgMjUxLCAzMywgOCwgMywgMjUwLCAyNTEsIDgsIDMsIDI0OSwgMTA0LCA4LCAzLCAKLSAgICAyNDksIDEwNiwgOCwgMywgMjQ5LCAxMDUsIDgsIDMsIDI0OSwgMTUzLCA4LCAzLCAyNDksIDE0NCwgOCwgMywgMjQ5LCAyMzgsIAotICAgIDgsIDMsIDI0OSwgMTY5LCA4LCAzLCAyNTAsIDE2MCwgOCwgMywgMjUwLCAxOTAsIDgsIDMsIDI1MCwgMTY1LCA4LCAzLCAKLSAgICAyNDksIDg0LCA4LCAzLCAyNDksIDgyLCA4LCAzLCAyNDksIDExMiwgOCwgMywgMjQ5LCAxMDIsIDgsIDMsIDI0OSwgODksIDgsIAotICAgIDMsIDI0OSwgMTAxLCA4LCAzLCAyNDksIDYzLCA4LCAzLCAyNDksIDYyLCA4LCAzLCAyNDksIDczLCA4LCAzLCAyNDksIDY5LCAKLSAgICA4LCAzLCAyNDksIDY0LCA4LCAzLCAyNDksIDY2LCA4LCAzLCAyMDksIDIyOCwgOCwgMywgMjA5LCAyMjcsIDgsIDMsIDIwOSwgCi0gICAgMjM0LCA4LCAzLCAyMDksIDIyOSwgOCwgMywgMjA5LCAyMzEsIDgsIDMsIDIwOSwgMjMwLCA4LCAzLCAyMDksIDIzMywgOCwgCi0gICAgMywgMjA5LCAyMzIsIDgsIDMsIDIwOSwgMjQwLCA4LCAzLCAyMDksIDIzOSwgOCwgMywgMjA5LCAyNDMsIDgsIDMsIDIwOSwgCi0gICAgMjQxLCA4LCAzLCAyMDksIDIyNCwgOCwgMywgMjA5LCAyMjYsIDgsIDMsIDIwOSwgMjI1LCA4LCAzLCAyMDksIDIzNSwgOCwgCi0gICAgMywgMjA5LCAyMzgsIDgsIDMsIDIwOSwgMjM2LCA4LCAzLCAyMDksIDIxNywgOCwgMywgMjA5LCAyMjEsIDgsIDMsIDIwOSwgCi0gICAgMjIwLCA4LCAzLCAyMDksIDIxOCwgOCwgMywgMjA5LCAyMTksIDgsIDMsIDIwOSwgMjExLCA4LCAzLCAyMDksIDIxMCwgOCwgCi0gICAgMywgMjA5LCAyMTYsIDgsIDMsIDIwOSwgMjE0LCA4LCAzLCAyMDksIDIxMiwgOCwgMywgMjA5LCAyMTMsIDgsIDMsIDIyNywgCi0gICAgMTA0LCA4LCAzLCAyMjcsIDEwMywgOCwgMywgMjI3LCAxMDksIDgsIDMsIDIyNywgMTA1LCA4LCAzLCAyMjcsIDEwNiwgOCwgCi0gICAgMywgMjI3LCAxMDgsIDgsIDMsIDIyNywgMTA3LCA4LCAzLCAyMjcsIDExNCwgOCwgMywgMjI3LCAxMTMsIDgsIDMsIDIyNywgCi0gICAgMTE3LCA4LCAzLCAyMjcsIDExNiwgOCwgMywgMjI3LCA5NywgOCwgMywgMjI3LCA5OCwgOCwgMywgMjI3LCAxMDEsIDgsIDMsIAotICAgIDIyNywgMTAyLCA4LCAzLCAyMjcsIDExMCwgOCwgMywgMjI3LCAxMTIsIDgsIDMsIDIyNywgOTIsIDgsIDMsIDIyNywgMTAwLCAKLSAgICA4LCAzLCAyMjcsIDk2LCA4LCAzLCAyMjcsIDkzLCA4LCAzLCAyMjcsIDk0LCA4LCAzLCAyMjcsIDg3LCA4LCAzLCAyMjcsIAotICAgIDg2LCA4LCAzLCAyMjcsIDkxLCA4LCAzLCAyMjcsIDkwLCA4LCAzLCAyMjcsIDg4LCA4LCAzLCAyMjcsIDg5LCA4LCAzLCAKLSAgICAyMTksIDEyNywgOCwgMywgMTk0LCA4LCAzLCAyMTksIDE5MSwgOCwgMywgMjE5LCAxMzAsIDgsIDMsIDIxOSwgMTgzLCA4LCAKLSAgICAzLCAyMTksIDE4NiwgOCwgMywgMjE5LCAxODQsIDgsIDMsIDIyMSwgMjI2LCA4LCAzLCAyMjEsIDIxNCwgOCwgMywgMjA2LCAKLSAgICA4LCAzLCAyMjEsIDIzNCwgOCwgMywgMjE4LCAyOCwgOCwgMywgMjE4LCAzMCwgOCwgMywgMjE4LCAyOSwgOCwgMywgMjE5LCAKLSAgICAzNCwgOCwgMywgMjE5LCAyMywgOCwgMywgMjE5LCA1OCwgOCwgMywgMjE5LCAzOCwgOCwgMywgMjIwLCAxMTQsIDgsIDMsIAotICAgIDIyMSwgMTgxLCA4LCAzLCAyMjAsIDEzOSwgOCwgMywgMjE4LCA1LCA4LCAzLCAyMTgsIDMsIDgsIDMsIDIxOCwgODMsIDgsIAotICAgIDMsIDIxOCwgMjcsIDgsIDMsIDIxOCwgOSwgOCwgMywgMjE4LCAxNywgOCwgMywgMjE3LCAxNjYsIDgsIDMsIDIxNywgMTY1LCAKLSAgICA4LCAzLCAyMTcsIDIzMiwgOCwgMywgMjE3LCAxNzMsIDgsIDMsIDIxNywgMTY4LCA4LCAzLCAyMTcsIDE3MiwgOCwgMywgCi0gICAgMjE4LCAxODYsIDgsIDMsIDIxOCwgMTg1LCA4LCAzLCAyMTgsIDE5MiwgOCwgMywgMjE4LCAxODcsIDgsIDMsIDIxOCwgMTg5LCAKLSAgICA4LCAzLCAyMTgsIDE5MSwgOCwgMywgMjE4LCAxOTAsIDgsIDMsIDIxOCwgMjAwLCA4LCAzLCAyMTgsIDE5OCwgOCwgMywgCi0gICAgMjE4LCAyMjMsIDgsIDMsIDIxOCwgMjAxLCA4LCAzLCAyMTgsIDE4MSwgOCwgMywgMjE4LCAxODAsIDgsIDMsIDIxOCwgMTg0LCAKLSAgICA4LCAzLCAyMTgsIDE4MiwgOCwgMywgMjE4LCAxOTQsIDgsIDMsIDIxOCwgMTk3LCA4LCAzLCAyMTgsIDE5NSwgOCwgMywgCi0gICAgMjE4LCAxNzcsIDgsIDMsIDIxOCwgMTc1LCA4LCAzLCAyMTgsIDE3OSwgOCwgMywgMjE4LCAxNzgsIDgsIDMsIDIxOCwgMTcwLCAKLSAgICA4LCAzLCAyMTgsIDE2OSwgOCwgMywgMjE4LCAxNzQsIDgsIDMsIDIxOCwgMTczLCA4LCAzLCAyMTgsIDE3MSwgOCwgMywgCi0gICAgMjE4LCAxNzIsIDgsIDMsIDIxMCwgNzcsIDgsIDMsIDIxMCwgNzYsIDgsIDMsIDIxMCwgODIsIDgsIDMsIDIxMCwgNzksIDgsIAotICAgIDMsIDIxMCwgNTksIDgsIDMsIDIxMCwgNjEsIDgsIDMsIDIxMCwgNjAsIDgsIDMsIDIxMCwgNjQsIDgsIDMsIDIxMCwgNjMsIAotICAgIDgsIDMsIDIxMCwgNjcsIDgsIDMsIDIxMCwgNjUsIDgsIDMsIDIxMCwgNzEsIDgsIDMsIDIxMCwgNzAsIDgsIDMsIDIxMCwgCi0gICAgNzQsIDgsIDMsIDIxMCwgNzIsIDgsIDMsIDIxMCwgNTUsIDgsIDMsIDIxMCwgNTQsIDgsIDMsIDIxMCwgNjIsIDgsIDMsIAotICAgIDIxMCwgNTgsIDgsIDMsIDIxMCwgNTYsIDgsIDMsIDIxMCwgNTcsIDgsIDMsIDIxMCwgNDcsIDgsIDMsIDIxMCwgNDYsIDgsIAotICAgIDMsIDIxMCwgNTEsIDgsIDMsIDIxMCwgNTAsIDgsIDMsIDIxMCwgNDgsIDgsIDMsIDIxMCwgNDksIDgsIDMsIDI1MCwgMTM2LCAKLSAgICA4LCAzLCAyNTAsIDEzMywgOCwgMywgMjUwLCAxNTcsIDgsIDMsIDI1MCwgMTQ0LCA4LCAzLCAyNTAsIDY1LCA4LCAzLCAyNTAsIAotICAgIDY0LCA4LCAzLCAyNTAsIDY3LCA4LCAzLCAyNTAsIDY2LCA4LCAzLCAyNTAsIDc5LCA4LCAzLCAyNTAsIDc4LCA4LCAzLCAKLSAgICAyNTAsIDg2LCA4LCAzLCAyNTAsIDgxLCA4LCAzLCAyNTAsIDExNSwgOCwgMywgMjUwLCAxMTMsIDgsIDMsIDI1MCwgMTMxLCAKLSAgICA4LCAzLCAyNTAsIDEyMSwgOCwgMywgMjUwLCA1OSwgOCwgMywgMjUwLCA2OSwgOCwgMywgMjUwLCA2MywgOCwgMywgMjUwLCAKLSAgICA2MCwgOCwgMywgMjUwLCA2MiwgOCwgMywgMjUwLCA1MywgOCwgMywgMjUwLCA1MiwgOCwgMywgMjUwLCA1NywgOCwgMywgCi0gICAgMjUwLCA1NiwgOCwgMywgMjUwLCA1NCwgOCwgMywgMjUwLCA1NSwgOCwgMywgMjIyLCAxNzUsIDgsIDMsIDIyMiwgMTc5LCA4LCAKLSAgICAzLCAyMjIsIDE1OCwgOCwgMywgMjIyLCAxNTksIDgsIDMsIDIyMiwgMTYyLCA4LCAzLCAyMjIsIDE2MSwgOCwgMywgMjIyLCAKLSAgICAxNjUsIDgsIDMsIDIyMiwgMTYzLCA4LCAzLCAyMjIsIDE2OSwgOCwgMywgMjIyLCAxNjgsIDgsIDMsIDIyMiwgMTc0LCA4LCAKLSAgICAzLCAyMjIsIDE3MCwgOCwgMywgMjIyLCAxNTQsIDgsIDMsIDIyMiwgMTUyLCA4LCAzLCAyMjIsIDE2MCwgOCwgMywgMjIyLCAKLSAgICAxNTcsIDgsIDMsIDIyMiwgMTU1LCA4LCAzLCAyMjIsIDE1NiwgOCwgMywgMjIyLCAxNDcsIDgsIDMsIDIyMiwgMTQ2LCA4LCAKLSAgICAzLCAyMjIsIDE1MSwgOCwgMywgMjIyLCAxNTAsIDgsIDMsIDIyMiwgMTQ4LCA4LCAzLCAyMjIsIDE0OSwgOCwgMywgMjI4LCAKLSAgICAzNCwgOCwgMywgMjI4LCAzMywgOCwgMywgMjI4LCAzNiwgOCwgMywgMjI4LCAzNSwgOCwgMywgMjI4LCAyNiwgOCwgMywgCi0gICAgMjI4LCAyOCwgOCwgMywgMjI4LCAyNywgOCwgMywgMjI4LCAzMCwgOCwgMywgMjI4LCAyOSwgOCwgMywgMjI4LCAzMiwgOCwgCi0gICAgMywgMjI4LCAzMSwgOCwgMywgMjI4LCAyMSwgOCwgMywgMjI4LCAyMCwgOCwgMywgMjI4LCAyNSwgOCwgMywgMjI4LCAyNCwgCi0gICAgOCwgMywgMjI4LCAyMiwgOCwgMywgMjI4LCAyMywgOCwgMywgMjI4LCAxNSwgOCwgMywgMjI4LCAxNCwgOCwgMywgMjI4LCAKLSAgICAxOSwgOCwgMywgMjI4LCAxOCwgOCwgMywgMjI4LCAxNiwgOCwgMywgMjI4LCAxNywgOCwgMywgMjIwLCA3MiwgOCwgMywgCi0gICAgMjIwLCA2NywgOCwgMywgMjIwLCAxMDIsIDgsIDMsIDIyMCwgODMsIDgsIDMsIDIxOSwgMjE1LCA4LCAzLCAyMTksIDIxNywgCi0gICAgOCwgMywgMjE5LCAyMTYsIDgsIDMsIDIxOSwgMjM2LCA4LCAzLCAyMTksIDIzMywgOCwgMywgMjIwLCA3LCA4LCAzLCAyMTksIAotICAgIDI1NCwgOCwgMywgMjIwLCA0MiwgOCwgMywgMjIwLCAzNSwgOCwgMywgMjIwLCA2MywgOCwgMywgMjIwLCA1MCwgOCwgMywgCi0gICAgMjE5LCAyMTEsIDgsIDMsIDIxOSwgMjA5LCA4LCAzLCAyMTksIDIyNSwgOCwgMywgMjE5LCAyMTQsIDgsIDMsIDIxOSwgMjEyLCAKLSAgICA4LCAzLCAyMTksIDIxMywgOCwgMywgMjE5LCAxOTQsIDgsIDMsIDIxOSwgMTkzLCA4LCAzLCAyMTksIDIwMCwgOCwgMywgCi0gICAgMjE5LCAxOTcsIDgsIDMsIDIxOSwgMTk1LCA4LCAzLCAyMTksIDE5NiwgOCwgMywgMjIzLCAxNDEsIDgsIDMsIDIyMywgMTM1LCAKLSAgICA4LCAzLCAyMDUsIDgsIDMsIDIyMywgMTQ3LCA4LCAzLCAyMjIsIDEyMCwgOCwgMywgMjIyLCAxMjIsIDgsIDMsIDIyMiwgCi0gICAgMTIxLCA4LCAzLCAyMjIsIDE4OCwgOCwgMywgMjIyLCAxODEsIDgsIDMsIDIyMiwgMjExLCA4LCAzLCAyMjIsIDE5MiwgOCwgCi0gICAgMywgMjIzLCA0MywgOCwgMywgMjIzLCAxMjgsIDgsIDMsIDIyMywgODEsIDgsIDMsIDIyMiwgMTEzLCA4LCAzLCAyMjIsIAotICAgIDExMCwgOCwgMywgMjIyLCAxNDAsIDgsIDMsIDIyMiwgMTE5LCA4LCAzLCAyMjIsIDExNSwgOCwgMywgMjIyLCAxMTYsIDgsIAotICAgIDMsIDIyMiwgOTUsIDgsIDMsIDIyMiwgOTQsIDgsIDMsIDIyMiwgMTAwLCA4LCAzLCAyMjIsIDk4LCA4LCAzLCAyMjIsIDk2LCAKLSAgICA4LCAzLCAyMjIsIDk3LCA4LCAzLCAyMzUsIDk4LCA4LCAzLCAyMzUsIDk3LCA4LCAzLCAyMzUsIDEwOCwgOCwgMywgMjM1LCAKLSAgICA5OSwgOCwgMywgMjM1LCAxMDQsIDgsIDMsIDIzNSwgMTAzLCA4LCAzLCAyMzUsIDEwNiwgOCwgMywgMjM1LCAxMDUsIDgsIDMsIAotICAgIDIzNSwgNDEsIDgsIDMsIDIzNSwgNDAsIDgsIDMsIDIzNSwgNDMsIDgsIDMsIDIzNSwgNDIsIDgsIDMsIDIzNSwgNTYsIDgsIAotICAgIDMsIDIzNSwgNTQsIDgsIDMsIDIzNSwgNjgsIDgsIDMsIDIzNSwgNTgsIDgsIDMsIDIzNSwgMzQsIDgsIDMsIDIzNSwgMzIsIAotICAgIDgsIDMsIDIzNSwgNTEsIDgsIDMsIDIzNSwgMzksIDgsIDMsIDIzNSwgMzYsIDgsIDMsIDIzNSwgMzcsIDgsIDMsIDIzNSwgCi0gICAgMjYsIDgsIDMsIDIzNSwgMjUsIDgsIDMsIDIzNSwgMzAsIDgsIDMsIDIzNSwgMjksIDgsIDMsIDIzNSwgMjcsIDgsIDMsIAotICAgIDIzNSwgMjgsIDgsIDMsIDIyNCwgNDYsIDgsIDMsIDIyNCwgNDQsIDgsIDMsIDIyNCwgNTMsIDgsIDMsIDIyNCwgNDcsIDgsIAotICAgIDMsIDIyNCwgNTAsIDgsIDMsIDIyNCwgNDksIDgsIDMsIDIyNCwgNTIsIDgsIDMsIDIyNCwgNTEsIDgsIDMsIDIyMywgMjU1LCAKLSAgICA4LCAzLCAyMjMsIDI1MiwgOCwgMywgMjI0LCAxLCA4LCAzLCAyMjQsIDAsIDgsIDMsIDIyNCwgMzMsIDgsIDMsIDIyNCwgMzIsIAotICAgIDgsIDMsIDIyNCwgNDIsIDgsIDMsIDIyNCwgMzYsIDgsIDMsIDIyMywgMjQ3LCA4LCAzLCAyMjMsIDI0MywgOCwgMywgMjI0LCAKLSAgICAzMCwgOCwgMywgMjIzLCAyNTEsIDgsIDMsIDIyMywgMjQ5LCA4LCAzLCAyMjMsIDI1MCwgOCwgMywgMjIzLCAyMjcsIDgsIDMsIAotICAgIDIyMywgMjI1LCA4LCAzLCAyMjMsIDIzNywgOCwgMywgMjIzLCAyMzAsIDgsIDMsIDIyMywgMjI4LCA4LCAzLCAyMjMsIDIyOSwgCi0gICAgOCwgMywgMjM1LCA4NywgOCwgMywgMjM1LCA4NiwgOCwgMywgMjM1LCA5MywgOCwgMywgMjM1LCA4OCwgOCwgMywgMjM1LCAKLSAgICA5MCwgOCwgMywgMjM1LCA4OSwgOCwgMywgMjM1LCA5MiwgOCwgMywgMjM1LCA5MSwgOCwgMywgMjM1LCA3OCwgOCwgMywgCi0gICAgMjM1LCA4MCwgOCwgMywgMjM1LCA3OSwgOCwgMywgMjM1LCA4MywgOCwgMywgMjM1LCA4MiwgOCwgMywgMjM1LCA4NSwgOCwgCi0gICAgMywgMjM1LCA4NCwgOCwgMywgMjM1LCA3NCwgOCwgMywgMjM1LCA3MywgOCwgMywgMjM1LCA4MSwgOCwgMywgMjM1LCA3NywgCi0gICAgOCwgMywgMjM1LCA3NSwgOCwgMywgMjM1LCA3NiwgOCwgMywgMjM1LCA3MCwgOCwgMywgMjM1LCA2OSwgOCwgMywgMjM1LCAKLSAgICA3MiwgOCwgMywgMjM1LCA3MSwgOCwgMywgMjI4LCAxNjIsIDgsIDMsIDIyOCwgMTYxLCA4LCAzLCAyMjgsIDE2OSwgOCwgMywgCi0gICAgMjI4LCAxNjMsIDgsIDMsIDIyOCwgMTY1LCA4LCAzLCAyMjgsIDE2NCwgOCwgMywgMjI4LCAxNjgsIDgsIDMsIDIyOCwgMTY2LCAKLSAgICA4LCAzLCAyMjgsIDE1MSwgOCwgMywgMjI4LCAxNTIsIDgsIDMsIDIyOCwgMTU3LCA4LCAzLCAyMjgsIDE1NiwgOCwgMywgCi0gICAgMjI4LCAxNjAsIDgsIDMsIDIyOCwgMTU4LCA4LCAzLCAyMjgsIDE0NiwgOCwgMywgMjI4LCAxNTUsIDgsIDMsIDIyOCwgMTUwLCAKLSAgICA4LCAzLCAyMjgsIDE0NywgOCwgMywgMjI4LCAxNDgsIDgsIDMsIDIyOCwgMTQxLCA4LCAzLCAyMjgsIDE0MCwgOCwgMywgCi0gICAgMjI4LCAxNDUsIDgsIDMsIDIyOCwgMTQ0LCA4LCAzLCAyMjgsIDE0MiwgOCwgMywgMjI4LCAxNDMsIDgsIDMsIDIyNywgMTM3LCAKLSAgICA4LCAzLCAyMjcsIDEzNiwgOCwgMywgMjI3LCAxNDgsIDgsIDMsIDIyNywgMTQxLCA4LCAzLCAyMjcsIDE0NSwgOCwgMywgCi0gICAgMjI3LCAxNDQsIDgsIDMsIDIyNywgMTQ3LCA4LCAzLCAyMjcsIDE0NiwgOCwgMywgMjI3LCAxMjQsIDgsIDMsIDIyNywgMTI2LCAKLSAgICA4LCAzLCAyMjcsIDEyNSwgOCwgMywgMjI3LCAxMzAsIDgsIDMsIDIyNywgMTI5LCA4LCAzLCAyMjcsIDEzNCwgOCwgMywgCi0gICAgMjI3LCAxMzEsIDgsIDMsIDIyNywgMTIyLCA4LCAzLCAyMjcsIDEyMCwgOCwgMywgMjI3LCAxMjgsIDgsIDMsIDIyNywgMTIzLCAKLSAgICA4LCAzLCAyMTEsIDE1MCwgOCwgMywgMjExLCAxNDksIDgsIDMsIDIxMSwgMTU3LCA4LCAzLCAyMTEsIDE1MiwgOCwgMywgCi0gICAgMjExLCAxNTQsIDgsIDMsIDIxMSwgMTUzLCA4LCAzLCAyMTEsIDE1NiwgOCwgMywgMjExLCAxNTUsIDgsIDMsIDIxMSwgMTM5LCAKLSAgICA4LCAzLCAyMTEsIDE0MCwgOCwgMywgMjExLCAxNDQsIDgsIDMsIDIxMSwgMTQzLCA4LCAzLCAyMTEsIDE0OCwgOCwgMywgCi0gICAgMjExLCAxNDYsIDgsIDMsIDIxMSwgMTIxLCA4LCAzLCAyMTEsIDExOSwgOCwgMywgMjExLCAxMzEsIDgsIDMsIDIxMSwgMTI0LCAKLSAgICA4LCAzLCAyMTEsIDEyMiwgOCwgMywgMjExLCAxMjMsIDgsIDMsIDIxMCwgMjUwLCA4LCAzLCAyMTAsIDI0OCwgOCwgMywgCi0gICAgMjExLCA4LCA4LCAzLCAyMTAsIDI1MSwgOCwgMywgMjExLCAyLCA4LCAzLCAyMTEsIDEsIDgsIDMsIDIxMSwgNSwgOCwgMywgCi0gICAgMjExLCAzLCA4LCAzLCAyMTAsIDE5MSwgOCwgMywgMjEwLCAxOTAsIDgsIDMsIDIxMCwgMTk0LCA4LCAzLCAyMTAsIDE5MiwgCi0gICAgOCwgMywgMjEwLCAyMjQsIDgsIDMsIDIxMCwgMjIxLCA4LCAzLCAyMTAsIDI0NCwgOCwgMywgMjEwLCAyMjgsIDgsIDMsIAotICAgIDIxMCwgMTgyLCA4LCAzLCAyMTAsIDE3OCwgOCwgMywgMjEwLCAyMTIsIDgsIDMsIDIxMCwgMTg5LCA4LCAzLCAyMTAsIDE4NSwgCi0gICAgOCwgMywgMjEwLCAxODYsIDgsIDMsIDIxMCwgMTYyLCA4LCAzLCAyMTAsIDE2MSwgOCwgMywgMjEwLCAxNjksIDgsIDMsIAotICAgIDIxMCwgMTY1LCA4LCAzLCAyMTAsIDE2MywgOCwgMywgMjEwLCAxNjQsIDgsIDM0LCAyMjQsIDMzLCA4LCAzNCwgMjMyLCAKLSAgICAyNDEsIDgsIDM0LCAyMzQsIDYxLCA4LCAzNCwgMjI3LCAxNDEsIDgsIDM0LCAyNDksIDY5LCA4LCAzNCwgMjE4LCAxOTIsIDgsIAotICAgIDM0LCAyNDMsIDEyLCA4LCAzNCwgMjQzLCA0NCwgOCwgMzQsIDIzMCwgMjMwLCA4LCAzNCwgMjQwLCAxODAsIDgsIDM0LCAKLSAgICAyMzIsIDU2LCA4LCAzNCwgMjUyLCA4MywgOCwgMzQsIDIzMCwgMTI2LCA4LCAzNCwgMjEwLCAyNDQsIDgsIDM0LCAyMjQsIAotICAgIDEyMSwgOCwgMzQsIDI0MCwgMTc0LCA4LCAzNCwgMjE3LCA0NiwgOCwgMzQsIDI0MywgMTM1LCA4LCAzNCwgMjEwLCA1LCA4LCAKLSAgICAzNCwgMjQ5LCA2MywgOCwgMzQsIDI0OCwgOTUsIDgsIDM0LCAyNTEsIDk4LCA4LCAzNCwgMjQzLCA4LCA4LCAzNCwgMjI3LCAKLSAgICAxMzEsIDgsIDM0LCAyMTUsIDExOCwgOCwgMzQsIDIyNiwgMTc1LCA4LCAzNCwgMjM1LCA3NCwgOCwgMzQsIDIxMCwgMTksIDgsIAotICAgIDM0LCAyMjQsIDEwMCwgOCwgMzQsIDI0MSwgMTA4LCA4LCAzNCwgMjEwLCAyNTAsIDgsIDM0LCAyMTIsIDExMiwgOCwgMzQsIAotICAgIDIxOSwgMjAwLCA4LCAzNCwgMjEzLCAyNDQsIDgsIDM0LCAyMTAsIDExNiwgOCwgMzQsIDIzNSwgNjgsIDgsIDM0LCAyMjcsIAotICAgIDk2LCA4LCAzNCwgMjM1LCA3MiwgOCwgMzQsIDI0MiwgMTU0LCA4LCAzNCwgMjM1LCA5MiwgOCwgMzQsIDIxMSwgMjI3LCA4LCAKLSAgICAzNCwgMjQ2LCA3OCwgOCwgMzQsIDIxOSwgMjEzLCA4LCAzNCwgMjMyLCAyMzYsIDgsIDM0LCAyNDksIDczLCA4LCAzNCwgCi0gICAgMjQ5LCAxMDUsIDgsIDM0LCAyNTAsIDM3LCA4LCAzNCwgMjQwLCAxNzcsIDgsIDM0LCAyMjAsIDcyLCA4LCAzNCwgMjEwLCA0LCAKLSAgICA4LCAzNCwgMjE5LCAyNTQsIDgsIDM0LCAyNTAsIDEzMSwgOCwgMzQsIDIwOSwgMjMxLCA4LCAzNCwgMjI5LCAxNzMsIDgsIAotICAgIDM0LCAyMzQsIDE4MiwgMjMyLCAxOTYsIDEsIDI1MiwgMTkxLCAyMzIsIDE5NiwgMSwgMTkwLCAyMzIsIDE5NiwgMSwgMjI1LCAKLSAgICAxNDcsIDIzMiwgMTk2LCAxLCAyNDgsIDIyMSwgMjMyLCAxOTYsIDEsIDIxNywgMTA1LCAyMzIsIDE5NiwgMSwgMjE2LCAyMDgsIAotICAgIDIzMiwgMTk2LCAxLCAyNDMsIDEzNSwgMjMyLCAxOTYsIDEsIDE3NiwgMjMyLCAxOTYsIDEsIDIzNCwgMTMyLCAyMzIsIDE5NiwgCi0gICAgMSwgMjM1LCAxNDEsIDIzMiwgMTk2LCAxLCAyNTEsIDMzLCAyMzIsIDE5NiwgMSwgMjUwLCAxNTcsIDIzMiwgMTk2LCAxLCAKLSAgICAyNDYsIDM4LCAyMzIsIDE5NiwgMSwgMjE1LCAxODMsIDIzMiwgMTk2LCAxLCAyMTUsIDE3NSwgMjMyLCAxOTYsIDEsIDE4NCwgCi0gICAgMjMyLCAxOTYsIDEsIDE5NywgMjMyLCAxOTYsIDEsIDIzMywgMTM1LCAyMzIsIDE5NiwgMSwgMjA2LCAyMzIsIDE5NiwgMSwgCi0gICAgMjEwLCA4MiwgMjMyLCAxOTYsIDEsIDIxMCwgMTE2LCAyMzIsIDE5NiwgMSwgMjI5LCA3NywgMjMyLCAxOTYsIDEsIDE2MiwgCi0gICAgMjMyLCAxOTYsIDEsIDIxMSwgMTY1LCAyMzIsIDE5NiwgMSwgMjQxLCAxODksIDIzMiwgMTk2LCAxLCAyNDQsIDE5NiwgMjMyLCAKLSAgICAxOTYsIDEsIDIxMiwgNjUsIDIzMiwgMTk2LCAxLCAyMjAsIDEwMiwgMjMyLCAxOTYsIDEsIDE5MSwgMjMyLCAxOTYsIDEsIAotICAgIDI0MiwgMjQ5LCAyMzIsIDE5NiwgMSwgNjEsIDIzMiwgMTk2LCAxLCAyNTQsIDI0MywgMjMyLCAxOTYsIDEsIDc1LCAyMzIsIAotICAgIDE5NiwgMSwgMjQ1LCA1NSwgMjMyLCAxOTYsIDEsIDczLCAyMzIsIDE5NiwgMSwgNzYsIDIzMiwgMTk2LCAxLCA3MCwgMjMyLCAKLSAgICAxOTYsIDEsIDIxNCwgMjE0LCAyMzIsIDE5NiwgMSwgMjE0LCAyMDgsIDIzMiwgMTk2LCAxLCAyMjYsIDIzNCwgMjMyLCAxOTYsIAotICAgIDEsIDEzOCwgMjMwLCAzMiwgMjE2LCAxMTcsIDIzMiwgMTk2LCAxLCAxMzgsIDIyOSwgMjI5LCAyMjUsIDE2LCAyMzIsIDE5NiwgCi0gICAgMSwgMTM4LCAyMzAsIDMyLCAyNDksIDcyLCAyMzIsIDE5NiwgMSwgMTM4LCAyMzAsIDMyLCAyNTEsIDIwNSwgMjMyLCAxOTYsIAotICAgIDEsIDEzOCwgMjMwLCAzMiwgMTk3LCAyMzIsIDE5NiwgMSwgMTM4LCAyMzAsIDMyLCAyMzUsIDExNSwgMjMyLCAxOTYsIDIyNCwgCi0gICAgMTQxLCAyNDksIDIxOSwgMjMyLCAxOTYsIDIyNCwgMTQxLCAyNDMsIDIyOSwgMjE4LCAxMjksIDQxLCAzLCAyNDUsIDIwOSwgCi0gICAgNDEsIDMsIDI0NSwgMjA1LCA0MSwgMywgMjQxLCAyMjAsIDQxLCAzLCAyMTIsIDE3LCA0MSwgMywgMjEyLCAxNiwgNDEsIDMsIAotICAgIDIyNSwgMjExLCA0MSwgMywgMjUyLCAxMywgNDEsIDMsIDI1MiwgNjYsIDQxLCAzLCAyMzEsIDExNiwgNDEsIDMsIDIzMywgCi0gICAgMjQ3LCA0MSwgMywgMjMxLCA2LCA0MSwgMywgMjQzLCA3NSwgNDEsIDMsIDI0NCwgMTQ3LCA0MSwgMywgMjEzLCAyNTAsIDQxLCAKLSAgICAzLCAyMTcsIDExLCA0MSwgMywgMjE2LCAxOTQsIDQxLCAzLCAyNDgsIDE2LCA0MSwgMywgMjQ4LCAxMywgNDEsIDMsIDIzMywgCi0gICAgNTAsIDQxLCAzLCAyMjMsIDEwOCwgNDEsIDMsIDI0OCwgNzcsIDQxLCAzLCAyMjksIDEzOSwgNDEsIDMsIDIyMSwgMTcwLCAKLSAgICA0MSwgMywgMjIwLCA2MSwgNDEsIDMsIDIxMCwgOTIsIDQxLCAzLCAyMTAsIDczLCA0MSwgMywgMjUwLCAxODIsIDQxLCAzLCAKLSAgICAyMzUsIDEyNCwgNDEsIDMsIDIyOCwgMTc2LCA0MSwgMywgMjExLCA0NCwgNDEsIDMsIDIzNCwgMTgxLCA0MSwgMywgMjI5LCAKLSAgICA1MSwgNDEsIDMsIDI0MywgNTUsIDQxLCAzLCAyMzEsIDgwLCA0MSwgMywgMjI5LCAxMDMsIDQxLCAzLCAyMjcsIDE1NSwgNDEsIAotICAgIDMsIDczLCA0MSwgMywgMjM1LCAyNTUsIDQxLCAzLCAyNDEsIDE4MCwgNDEsIDMsIDI0MSwgMTYwLCA0MSwgMywgMjExLCAKLSAgICAyNTAsIDQxLCAzLCAyMTEsIDI0MSwgNDEsIDMsIDIyNSwgMTA4LCA0MSwgMywgMjUyLCAxMSwgNDEsIDMsIDI1MiwgNiwgNDEsIAotICAgIDMsIDIzMSwgMTA5LCA0MSwgMywgMjMzLCAyNDQsIDQxLCAzLCAyMzEsIDMsIDQxLCAzLCAyNDMsIDcxLCA0MSwgMywgMjQ0LCAKLSAgICAxMjEsIDQxLCAzLCAyMTMsIDE3NiwgNDEsIDMsIDIxNiwgMTE3LCA0MSwgMywgMjE2LCAxNzUsIDQxLCAzLCAyNDgsIDgsIAotICAgIDQxLCAzLCAyNDgsIDEyLCA0MSwgMywgMjMyLCAyNDEsIDQxLCAzLCAyMjMsIDM1LCA0MSwgMywgMjQ4LCAzLCA0MSwgMywgCi0gICAgMjI5LCAxMzMsIDQxLCAzLCAyMTksIDE5MSwgNDEsIDMsIDIyMCwgMzIsIDQxLCAzLCAyMTAsIDQ0LCA0MSwgMywgMjEwLCAKLSAgICA2OSwgNDEsIDMsIDI1MCwgNTEsIDQxLCAzLCAyMzUsIDEwOCwgNDEsIDMsIDIyOCwgMTY5LCA0MSwgMywgMjExLCA4LCA0MSwgCi0gICAgMywgMjM0LCA5MiwgNDEsIDMsIDIyOSwgNDMsIDQxLCAzLCAyNDIsIDIxNCwgNDEsIDMsIDIzMCwgMjMwLCA0MSwgMywgMjI4LCAKLSAgICAyMzMsIDQxLCAzLCAyMjcsIDE0OCwgNDEsIDMsIDYxLCA0MSwgMywgMjU0LCAxMjMsIDQxLCAzLCAyMjksIDcyLCA0MSwgMywgCi0gICAgMTYyLCA0MSwgMywgMjQyLCAxOCwgNDEsIDMsIDIxMiwgNjUsIDQxLCAzLCAyMTIsIDU1LCA0MSwgMywgMTkwLCA0MSwgMywgCi0gICAgMjUyLCAxOCwgNDEsIDMsIDI1MiwgMTkxLCA0MSwgMywgMjMxLCAxMjQsIDQxLCAzLCAyMzMsIDI1MSwgNDEsIDMsIDIzMywgCi0gICAgMjUwLCA0MSwgMywgMjMxLCAxMCwgNDEsIDMsIDI0MywgNzksIDQxLCAzLCAyNDQsIDE5NiwgNDEsIDMsIDIxNCwgMjcsIDQxLCAKLSAgICAzLCAyMTcsIDEwNSwgNDEsIDMsIDIxNiwgMjA4LCA0MSwgMywgMjQ4LCAyNSwgNDEsIDMsIDI0OCwgMTUsIDQxLCAzLCAyMzMsIAotICAgIDEzNSwgNDEsIDMsIDIwNSwgNDEsIDMsIDI0OCwgMjIxLCA0MSwgMywgMjI5LCAxNDgsIDQxLCAzLCAyMDYsIDQxLCAzLCAKLSAgICAyMjAsIDEwMiwgNDEsIDMsIDIxMCwgMTE2LCA0MSwgMywgMjEwLCA4MiwgNDEsIDMsIDI1MSwgMzMsIDQxLCAzLCAyMzUsIAotICAgIDE0MSwgNDEsIDMsIDIyOCwgMTg1LCA0MSwgMywgMTkxLCA0MSwgMywgMTc2LCA0MSwgMywgMjM0LCAyMzQsIDQxLCAzLCAKLSAgICAyMjksIDU2LCA0MSwgMywgMjQzLCAxMzUsIDQxLCAzLCAxODQsIDQxLCAzLCAxOTcsIDQxLCAzLCAyMjcsIDE2NSwgNDEsIDMsIAotICAgIDIyNiwgMTgzLCA0MSwgMywgMjI2LCAxNzksIDQxLCAzLCAyNDEsIDUzLCA0MSwgMywgMjExLCAyMTUsIDQxLCAzLCAyMTEsIAotICAgIDIxMSwgNDEsIDMsIDIyNCwgMjQ5LCA0MSwgMywgMjUyLCA5LCA0MSwgMywgMjUxLCAxOTMsIDQxLCAzLCAyMzEsIDEwNCwgCi0gICAgNDEsIDMsIDIzMywgMjQyLCA0MSwgMywgMjMwLCAyNTUsIDQxLCAzLCAyNDMsIDY3LCA0MSwgMywgMjQ0LCAzNCwgNDEsIDMsIAotICAgIDIxMywgMTI3LCA0MSwgMywgMjE2LCAxNywgNDEsIDMsIDIxNiwgMTUzLCA0MSwgMywgMjQ4LCA2LCA0MSwgMywgMjQ4LCAxMCwgCi0gICAgNDEsIDMsIDIzMiwgMTI3LCA0MSwgMywgMjIyLCAxOTcsIDQxLCAzLCAyNDcsIDEyNSwgNDEsIDMsIDIyOSwgMTIwLCA0MSwgCi0gICAgMywgMjE5LCA0MCwgNDEsIDMsIDIyMCwgMSwgNDEsIDMsIDIxMCwgMjEsIDQxLCAzLCAyMTAsIDY2LCA0MSwgMywgMjQ5LCAKLSAgICAxNzQsIDQxLCAzLCAyMzUsIDU5LCA0MSwgMywgMjI4LCAxNTksIDQxLCAzLCAyMTAsIDIyOSwgNDEsIDMsIDIzNCwgMTAsIAotICAgIDQxLCAzLCAyMjksIDQxLCA0MSwgMywgMjQyLCAxNjQsIDQxLCAzLCAyMzAsIDEzMiwgNDEsIDMsIDIyOCwgNjQsIDQxLCAzLCAKLSAgICAyMjcsIDEzMiwgNDEsIDMsIDcwLCA0MSwgMywgMjE0LCAxOTAsIDQxLCAzLCAyNDAsIDIyMiwgNDEsIDMsIDI0MCwgMjEyLCAKLSAgICA0MSwgMywgMjExLCAxOTUsIDQxLCAzLCAyMTEsIDE4OSwgNDEsIDMsIDIyNCwgMTUwLCA0MSwgMywgMjUyLCA4LCA0MSwgMywgCi0gICAgMjUxLCAxMjUsIDQxLCAzLCAyMzEsIDEwMywgNDEsIDMsIDIzMywgMjQwLCA0MSwgMywgMjMwLCAyNTQsIDQxLCAzLCAyNDMsIAotICAgIDY2LCA0MSwgMywgMjQzLCAyMzQsIDQxLCAzLCAyMTIsIDExNiwgNDEsIDMsIDIxNSwgMTE4LCA0MSwgMywgMjE2LCAxMzYsIAotICAgIDQxLCAzLCAyNDgsIDQsIDQxLCAzLCAyNDgsIDksIDQxLCAzLCAyMzIsIDk4LCA0MSwgMywgMjIyLCAxNDAsIDQxLCAzLCAKLSAgICAyNDYsIDc4LCA0MSwgMywgMjI5LCAxMTUsIDQxLCAzLCAyMTgsIDgzLCA0MSwgMywgMjE5LCAyMjUsIDQxLCAzLCAyMTAsIAotICAgIDEzLCA0MSwgMywgMjEwLCA2MiwgNDEsIDMsIDI0OSwgMTEyLCA0MSwgMywgMjM1LCA1MSwgNDEsIDMsIDIyOCwgMTU1LCA0MSwgCi0gICAgMywgMjEwLCAyMTIsIDQxLCAzLCAyMzMsIDIxNywgNDEsIDMsIDIyOSwgNDAsIDQxLCAzLCAyNDIsIDExMywgNDEsIDMsIAotICAgIDIzMCwgMTAyLCA0MSwgMywgMjI3LCAyMzcsIDQxLCAzLCAyMjcsIDEyOCwgNDEsIDMsIDc2LCA0MSwgMywgMjI2LCAxOTYsIAotICAgIDQxLCAzLCAyMjksIDAsIDQxLCAzLCAyNDEsIDY4LCA0MSwgMywgMjQxLCA1NiwgNDEsIDMsIDIxMSwgMjI3LCA0MSwgMywgCi0gICAgMjExLCAyMTYsIDQxLCAzLCAyMjUsIDE2LCA0MSwgMywgMjUyLCAxMCwgNDEsIDMsIDI1MSwgMjA1LCA0MSwgMywgMjMxLCAKLSAgICAxMDUsIDQxLCAzLCAyMzMsIDI0MywgNDEsIDMsIDIzMSwgMSwgNDEsIDMsIDI0MywgNjksIDQxLCAzLCAyNDMsIDY4LCA0MSwgCi0gICAgMywgMjQ0LCA0MywgNDEsIDMsIDIxMywgMTM4LCA0MSwgMywgMTExLCA0MSwgMywgMjE2LCAxNTYsIDQxLCAzLCAyNDgsIDcsIAotICAgIDQxLCAzLCAyNDgsIDExLCA0MSwgMywgMjMyLCAxNTYsIDQxLCAzLCAyMjIsIDIxMSwgNDEsIDMsIDI0NywgMTQ1LCA0MSwgMywgCi0gICAgMjI5LCAxMjQsIDQxLCAzLCAyMTksIDU4LCA0MSwgMywgMjIwLCA3LCA0MSwgMywgMjEwLCAyMywgNDEsIDMsIDIxMCwgNjcsIAotICAgIDQxLCAzLCAyNDksIDIzOCwgNDEsIDMsIDIzNSwgNjgsIDQxLCAzLCAyMjgsIDE2MCwgNDEsIDMsIDIxMCwgMjQ0LCA0MSwgMywgCi0gICAgMjM0LCAyOCwgNDEsIDMsIDIyOSwgNDIsIDQxLCAzLCAyNDIsIDE3NCwgNDEsIDMsIDIzMCwgMTYxLCA0MSwgMywgMjI4LCAKLSAgICA3NCwgNDEsIDMsIDIyNywgMTM0LCA0MSwgMywgNzUsIDQxLCAzLCAyNDUsIDE1MCwgNDEsIDMsIDIyOSwgNjEsIDQxLCAzLCAKLSAgICAyNDEsIDIzOCwgNDEsIDMsIDI0MSwgMjA5LCA0MSwgMywgMjEyLCAyMiwgNDEsIDMsIDIxMiwgMTIsIDQxLCAzLCAyMjUsIAotICAgIDIyMSwgNDEsIDMsIDI1MiwgMTQsIDQxLCAzLCAyNTIsIDc1LCA0MSwgMywgMjMxLCAxMTcsIDQxLCAzLCAyMzMsIDI0OCwgCi0gICAgNDEsIDMsIDIzMywgMjQ2LCA0MSwgMywgMjMxLCA3LCA0MSwgMywgMjQzLCA3NiwgNDEsIDMsIDI0MywgNzQsIDQxLCAzLCAKLSAgICAyNDQsIDE1NCwgNDEsIDMsIDIxMywgMjU1LCA0MSwgMywgMjE3LCAyMiwgNDEsIDMsIDIxNiwgMTk1LCA0MSwgMywgMjQ4LCAKLSAgICAxNywgNDEsIDMsIDI0OCwgMTQsIDQxLCAzLCAyMzMsIDU4LCA0MSwgMywgMjIzLCAxMjgsIDQxLCAzLCAyNDgsIDkwLCA0MSwgCi0gICAgMywgMjI5LCAxNDAsIDQxLCAzLCAyMjEsIDE4MSwgNDEsIDMsIDIyMCwgNjMsIDQxLCAzLCAyMTAsIDk0LCA0MSwgMywgMjEwLCAKLSAgICA3NCwgNDEsIDMsIDI1MCwgMTkwLCA0MSwgMywgMjM1LCAxMjYsIDQxLCAzLCAyMjgsIDE3OCwgNDEsIDMsIDIxMSwgNDcsIAotICAgIDQxLCAzLCAyMzQsIDE4MiwgNDEsIDMsIDIyOSwgNTIsIDQxLCAzLCAyMjksIDQ4LCA0MSwgMywgMjQzLCA2MiwgNDEsIDMsIAotICAgIDI0MywgNTEsIDQxLCAzLCAyMzEsIDkxLCA0MSwgMywgMjI5LCAxMDcsIDQxLCAzLCAyMjcsIDE1NiwgNDEsIDMsIDIyOSwgCi0gICAgNzksIDQxLCAzLCAyMzMsIDIyLCA0MSwgMjQ5LCAyMTksIDQxLCAyNDMsIDIyOSwgMjE4LCAxMjksIDQxLCAyMjQsIDEzLCAKLSAgICA3OCwgNDEsIDMsIDIyOSwgMTIzLCAyNDQsIDE5NiwgNDEsIDMsIDIyOSwgMTIzLCAxNzYsIDQxLCAzLCAyMjksIDEyMywgCi0gICAgMjE5LCA0MCwgNDEsIDE2LCAyNDQsIDE0NCwgNDEsIDE2LCAyMzQsIDE4MCwgNDEsIDE2LCAyMTYsIDgxLCA0MSwgMTYsIAotICAgIDIyOCwgMjA4LCA0MSwgMTYsIDI1MiwgMTQ3LCA0MSwgMTYsIDI0NCwgMTk1LCA0MSwgMTYsIDIxNywgMTAxLCA0MSwgMTYsIAotICAgIDI0OCwgMTc2LCA0MSwgMTYsIDI0NywgMTI0LCA0MSwgMTYsIDIzMywgMjA2LCA0MSwgMTYsIDIxNiwgMjEsIDQxLCAxNiwgCi0gICAgMjQ3LCAxNDQsIDQxLCAxNiwgMjM1LCA2MCwgNDEsIDIxLCAyMTAsIDg2LCA0MSwgMjEsIDExMCwgNDEsIDIxLCAxMDUsIDQxLCAKLSAgICAyMSwgMTU4LCA0MSwgMjEsIDE2MSwgNDEsIDIxLCAxODksIDQxLCAyMSwgMTk0LCA0MSwgMjEsIDE5OCwgNDEsIDIxLCAxOTUsIAotICAgIDQxLCAyMSwgMjAwLCA0MSwgMywgMjI5LCAxMjMsIDE4NCwgNDEsIDMsIDIyOSwgMTIzLCAyNDcsIDE0NSwgMzMsIDYsIDEsIAotICAgIDIxMCwgOTAsIDMzLCA0LCAxLCAyMTAsIDkwLCAzMywgNiwgMSwgMjQ2LCAzNCwgMzMsIDQsIDEsIDI0NiwgMzQsIDMzLCA2LCAKLSAgICAxLCAyMjMsIDQ5LCAyNDYsIDM2LCAzMywgNCwgMSwgMjIzLCA0OSwgMjQ2LCAzNiwgMzMsIDYsIDEsIDIzNSwgMTg1LCAzMywgCi0gICAgNCwgMSwgMjM1LCAxODUsIDMzLCA2LCAxLCAyNDcsIDE2MSwgMzMsIDQsIDEsIDI0NywgMTYxLCAzMywgNiwgMSwgMjMwLCAKLSAgICAxNDAsIDIxNCwgMjA1LCAzMywgNCwgMSwgMjMwLCAxNDAsIDIxNCwgMjA1LCAzMywgNiwgMSwgMjUxLCAxMzYsIDIyNiwgCi0gICAgMjAxLCAzMywgNCwgMSwgMjUxLCAxMzYsIDIyNiwgMjAxLCAzMywgNiwgMSwgMjI5LCA4NywgMjExLCAzMSwgMzMsIDQsIDEsIAotICAgIDIyOSwgODcsIDIxMSwgMzEsIDMzLCA2LCAxLCAyMTEsIDI4LCAyLCAyNTIsIDE4NSwgMjExLCAzMSwgMzMsIDQsIDEsIDIxMSwgCi0gICAgMjgsIDIsIDI1MiwgMTg1LCAyMTEsIDMxLCAzMywgNiwgMSwgMjM1LCAxODMsIDIxMSwgNTksIDMzLCA0LCAxLCAyMzUsIAotICAgIDE4MywgMjExLCA1OSwgMzMsIDYsIDEsIDIyMywgNDksIDIxMCwgMjEyLCAzMywgNCwgMSwgMjIzLCA0OSwgMjEwLCAyMTIsIAotICAgIDMzLCA2LCAxLCAyMzUsIDE4MywgNjEsIDMzLCA0LCAxLCAyMzUsIDE4MywgNjEsIDMzLCA2LCAxLCAyNTAsIDAsIDIzMiwgCi0gICAgMTkyLCAyMTAsIDE4MywgMzMsIDQsIDEsIDI1MCwgMCwgMjMyLCAxOTIsIDIxMCwgMTgzLCAzMywgNiwgMSwgMjUxLCAyMTQsIAotICAgIDIxMCwgMTgzLCAzMywgNCwgMSwgMjUxLCAyMTQsIDIxMCwgMTgzLCAzMywgNiwgMSwgMjM1LCAxODMsIDI1MCwgMCwgMjMyLCAKLSAgICAxOTIsIDIxMCwgMTgzLCAzMywgNCwgMSwgMjM1LCAxODMsIDI1MCwgMCwgMjMyLCAxOTIsIDIxMCwgMTgzLCAzMywgNiwgMSwgCi0gICAgMjEwLCAyNDYsIDMzLCA0LCAxLCAyMTAsIDI0NiwgMzMsIDYsIDEsIDIyMywgNDksIDIxNSwgMTc4LCAzMywgNCwgMSwgMjIzLCAKLSAgICA0OSwgMjE1LCAxNzgsIDMzLCA2LCAxLCAyMTksIDUyLCAyNDgsIDkwLCAzMywgNCwgMSwgMjE5LCA1MiwgMjQ4LCA5MCwgMzMsIAotICAgIDYsIDEsIDIxOSwgNTIsIDI0NSwgMTc0LCAzMywgNCwgMSwgMjE5LCA1MiwgMjQ1LCAxNzQsIDMzLCA2LCAxLCAyMTksIDUyLCAKLSAgICAyNDUsIDE1OSwgMzMsIDQsIDEsIDIxOSwgNTIsIDI0NSwgMTU5LCAzMywgNiwgMSwgMjMwLCAxNDQsIDc2LCAzMywgNCwgMSwgCi0gICAgMjMwLCAxNDQsIDc2LCAzMywgNiwgMSwgMjUxLCAyNDAsIDc2LCAzMywgNCwgMSwgMjUxLCAyNDAsIDc2LCAzMywgNiwgMSwgCi0gICAgNTIsIDIzMCwgMTQ0LCA3NiwgMzMsIDQsIDEsIDUyLCAyMzAsIDE0NCwgNzYsIDMzLCAxLCAyMzAsIDg2LCA3NiwgMzgsIDMzLCAKLSAgICAyMTIsIDEwMCwgMzgsIDMzLCAyMTYsIDI0OCwgMjMwLCAxOTEsIDUwLCAzOCwgMzMsIDI0MCwgMjExLCAyMzAsIDE5MSwgNTAsIAotICAgIDM4LCAzMywgMjE2LCAxNDgsIDIzMCwgMTkxLCA1MCwgMjE5LCA5MywgMjUzLCAyMTYsIDM4LCAzMywgMSwgMjE0LCAyMDIsIAotICAgIDIzNiwgNjAsIDM4LCAzMywgMSwgNzMsIDM4LCAzMywgMSwgMjExLCA4LCAzOCwgMzMsIDEsIDcwLCAzOCwgMzMsIDEsIDI0MiwgCi0gICAgMywgNTAsIDM4LCAzMywgMSwgMjExLCAyNywgMzgsIDMzLCAxLCAyMTksIDUyLCA1MCwgMzgsIDMzLCAxLCAyMjYsIDIwMSwgCi0gICAgMzgsIDMzLCAyMzQsIDE5MiwgMzgsIDMzLCAyMjUsIDIyNywgMzMsIDIzNCwgMTkyLCAzMywgMjI1LCAyMjcsIDMzLCA2LCAxLCAKLSAgICAyNDYsIDQ2LCAzMywgNCwgMSwgMjQ2LCA0NiwgMzMsIDYsIDEsIDI0NiwgMjcsIDMzLCA0LCAxLCAyNDYsIDI3LCAzMywgNiwgCi0gICAgMSwgMjEwLCA1MiwgMzMsIDQsIDEsIDIxMCwgNTIsIDMzLCA2LCAxLCAyNTAsIDIwNiwgMzMsIDQsIDEsIDI1MCwgMjA2LCAKLSAgICAzMywgNiwgMSwgMjQ2LCAyNSwgMzMsIDQsIDEsIDI0NiwgMjUsIDMzLCA2LCAxLCAyMTcsIDIzLCAyLCAyMzAsIDIyNCwgCi0gICAgMTAzLCAzMywgNCwgMSwgMjE3LCAyMywgMiwgMjMwLCAyMjQsIDEwMywgMzMsIDYsIDEsIDIxNSwgNzgsIDMzLCA0LCAxLCAKLSAgICAyMTUsIDc4LCAzMywgNiwgMSwgMjE1LCAxNjAsIDMzLCA0LCAxLCAyMTUsIDE2MCwgMzMsIDYsIDEsIDIxNSwgMTY0LCAzMywgCi0gICAgNCwgMSwgMjE1LCAxNjQsIDMzLCA2LCAxLCAyMTcsIDI4LCAzMywgNCwgMSwgMjE3LCAyOCwgMzMsIDYsIDEsIDI0MCwgMTk4LCAKLSAgICAzMywgNCwgMSwgMjQwLCAxOTgsIDMzLCA2LCAxLCAyMTksIDIwNiwgMzMsIDQsIDEsIDIxOSwgMjA2LCAzOCwgMzMsIDEsIAotICAgIDIzNSwgMTgzLCA3NSwgMjAsIDEsIDYxLCAyMCwgMSwgMTc2LCAyMCwgMSwgNzAsIDIwLCAxLCAyMzMsIDIxNywgMjAsIDEsIAotICAgIDI0NSwgMjA5LCAyMCwgMSwgMjIzLCAxMDgsIDIwLCAxLCAyMTcsIDg2LCAyMCwgMSwgNzYsIDIwLCAxLCAyMjcsIDE0OCwgCi0gICAgMjAsIDEsIDczLCAyMCwgMSwgMjMzLCAxMzUsIDIwLCAxLCAxOTAsIDIwLCAxLCAyMjIsIDIzOSwgMjAsIDEsIDIyMywgMjksIAotICAgIDIwLCAxLCAyMzMsIDQ5LCAyMCwgMSwgMjMxLCA3OSwgMjAsIDEsIDIxNywgMTAxLCAyMCwgMSwgMjI5LCAxNDYsIDIwLCAxLCAKLSAgICAyMjgsIDE4MywgMjAsIDEsIDE5MywgMjAsIDEsIDIxOCwgNCwgMjAsIDEsIDIzMCwgMTAyLCAyMCwgMSwgMjIwLCAyNywgMjAsIAotICAgIDEsIDIxOSwgMTkxLCAyMCwgMSwgMjIwLCAzNywgMjAsIDEsIDIyMCwgMTIzLCAyMCwgMSwgMjMzLCAxNTUsIDIwLCAxLCAKLSAgICAyMzQsIDE1NiwgMjAsIDEsIDIyNywgMjA5LCAyMCwgMSwgMjI3LCAyMzcsIDIwLCAxLCAyMjgsIDE1NCwgMjAsIDEsIDIxMCwgCi0gICAgMjI2LCAyMCwgMSwgMjE5LCAyMjUsIDIwLCAxLCAyMTAsIDE4NywgMjAsIDEsIDE5MSwgMjAsIDEsIDIyOCwgOSwgMjAsIDEsIAotICAgIDIzNCwgMTQyLCAyMCwgMSwgMjI1LCAxNTEsIDIwLCAxLCAyMjgsIDE3NiwgMjAsIDEsIDIyNywgMjQ2LCAyMCwgMSwgMjI0LCAKLSAgICAxNDQsIDIwLCAxLCAyMTEsIDE5MiwgMjAsIDEsIDIyNSwgMjExLCAyMCwgMSwgMjQ0LCAxNDcsIDIwLCAxLCAyMjIsIDE0MCwgCi0gICAgMjAsIDEsIDIzMiwgOTgsIDIwLCAxLCAyMzAsIDIzMCwgMjAsIDEsIDIyOCwgMjMzLCAyMCwgMSwgMjIzLCA1MSwgMjAsIDEsIAotICAgIDIyMywgMTcxLCAyMCwgMSwgMjM0LCAxNjUsIDIwLCAxLCAyMjksIDcsIDIwLCAxLCAyMjksIDU2LCAyMCwgMSwgMjI5LCA3NywgCi0gICAgMjAsIDEsIDIyMCwgNywgMjAsIDEsIDIyNCwgMTQ3LCAyMCwgMSwgMjQzLCAyMzQsIDIwLCAxLCAyNDQsIDM3LCAyMCwgMSwgCi0gICAgMjEyLCA2NSwgMjAsIDEsIDE5NywgMjAsIDEsIDIzMiwgMjQxLCAyMCwgMSwgMjI1LCAxMDgsIDIwLCAxLCAyMzIsIDExOSwgCi0gICAgMjAsIDEsIDIzNCwgMjgsIDIwLCAxLCAyMzEsIDExNCwgMjAsIDEsIDIyMywgODMsIDIwLCAxLCAyMzEsIDU4LCAyMCwgMSwgCi0gICAgMTg0LCAyMCwgMSwgMjE2LCAxMTcsIDIwLCAxLCAyMzQsIDkyLCAyMCwgMSwgMjMwLCAxNjEsIDIwLCAxLCAyMzEsIDEyMiwgCi0gICAgMjAsIDEsIDIxNiwgMjMwLCAyMCwgMSwgMjMzLCAyNTEsIDIwLCAxLCAyMTYsIDI0NywgMjAsIDEsIDIyNywgMjM4LCAyMCwgCi0gICAgMSwgMjIxLCAyNTEsIDIwLCAxLCAyNDQsIDE5MiwgMjAsIDEsIDIzMywgMjUzLCAyMCwgMSwgMjM0LCAyNCwgMjAsIDM4LCAKLSAgICAxNjQsIDIzNCwgNSwgMjAsIDM4LCAxNjQsIDIxNSwgMTEwLCAyMCwgMjI4LCAxODIsIDIwLCAyNDMsIDIyOSwgMjE4LCAxMjksIAotICAgIDIwLCAyNDksIDIyNiwgMjAsIDI0OSwgMjE5LCAyMCwgMjIwLCAxNTAsIDIwLCAyMjQsIDEzLCA3OCwgNTgsIDEsIDI1MCwgCi0gICAgOTYsIDEzOCwgMjEwLCAyNTQsIDIyNSwgNjEsIDU4LCAxLCAyNTAsIDk2LCAxMzgsIDIxMSwgNzAsIDIyNSwgNjEsIDU4LCAxLCAKLSAgICAyNTAsIDk2LCAxMzgsIDIxMCwgMjU0LCAyMjAsIDg0LCA1OCwgMSwgMjUwLCA5NiwgMTM4LCAyMTEsIDcwLCAyMjAsIDg0LCAKLSAgICA1OCwgMSwgMjUwLCA5NiwgMTM4LCAyMTAsIDI1NCwgMjI0LCAzMCwgNTgsIDEsIDI1MCwgOTYsIDEzOCwgMjExLCA3MCwgCi0gICAgMjI0LCAzMCwgNTgsIDEsIDI1MCwgOTYsIDEzOCwgMjEwLCAyNTQsIDIyMiwgMTQwLCA1OCwgMSwgMjUwLCA5NiwgMTM4LCAKLSAgICAyMTEsIDcwLCAyMjIsIDE0MCwgNTgsIDEsIDI0NSwgMjAsIDI0NiwgMTE4LCAxMzgsIDEzMCwgNTgsIDEsIDEyNSwgMjQ2LCAKLSAgICAxMTgsIDEzOCwgMTMwLCA1OCwgMSwgMjMwLCAyMjUsIDI0NiwgMTE4LCAxMzgsIDEzMCwgNTgsIDEsIDEyMSwgMjQ2LCAxMTgsIAotICAgIDEzOCwgMTMwLCA1OCwgMSwgMjQ1LCAxOSwgMjQ2LCAxMTgsIDEzOCwgMTMwLCA1OCwgMSwgMjQ1LCAyMCwgMjQ2LCAxMTgsIAotICAgIDIzMywgMzksIDEzOCwgMTMwLCA1OCwgMSwgMTI1LCAyNDYsIDExOCwgMjMzLCAzOSwgMTM4LCAxMzAsIDU4LCAxLCAyMzAsIAotICAgIDIyNSwgMjQ2LCAxMTgsIDIzMywgMzksIDEzOCwgMTMwLCA1OCwgMSwgMTIxLCAyNDYsIDExOCwgMjMzLCAzOSwgMTM4LCAKLSAgICAxMzAsIDU4LCAxLCAyNDUsIDE5LCAyNDYsIDExOCwgMjMzLCAzOSwgMTM4LCAxMzAsIDU4LCAxLCAyNDUsIDIwLCAyMzMsIAotICAgIDM5LCAxMzgsIDEzMCwgNTgsIDEsIDEyNSwgMjMzLCAzOSwgMTM4LCAxMzAsIDU4LCAxLCAyMzAsIDIyNSwgMjMzLCAzOSwgCi0gICAgMTM4LCAxMzAsIDU4LCAxLCAxMjEsIDIzMywgMzksIDEzOCwgMTMwLCA1OCwgMSwgMjQ1LCAxOSwgMjMzLCAzOSwgMTM4LCAKLSAgICAxMzAsIDU4LCAxLCA1OSwgNjcsIDEzMCwgNTgsIDEsIDU5LCAyMTksIDk1LCA1OCwgMSwgNTksIDIwMywgMTMwLCA1OCwgMSwgCi0gICAgMjMyLCAxMDgsIDQ0LCAyNDksIDE2MSwgMjU0LCAxMDksIDU4LCAxLCAyMjMsIDE1NywgMTIwLCA3NCwgNTgsIDEsIDIyMywgCi0gICAgMTU3LCAxMjQsIDc0LCA1OCwgMSwgMjIzLCAxNTcsIDI0NSwgMzEsIDc4LCA1OCwgMSwgMjIzLCAxNTcsIDIzNSwgMTkzLCAKLSAgICAyNDUsIDMxLCA3OCwgNTgsIDEsIDEyMSwgMjM1LCAxOTMsIDI0NSwgMzEsIDc4LCA1OCwgMSwgMjE4LCAxMTEsIDIyLCAxMjUsIAotICAgIDIxNiwgMzAsIDU4LCAxLCAyMTgsIDExMSwgMjIsIDEyMSwgMjE2LCAzMCwgNywgNiwgMSwgMjQ1LCAxOTksIDI1NCwgMTcwLCAKLSAgICA3LCA0LCAxLCAyNDUsIDE5OSwgMjU0LCAxNzAsIDcsIDYsIDEsIDI0NSwgMTk5LCAyNTQsIDE5NiwgNywgNCwgMSwgMjQ1LCAKLSAgICAxOTksIDI1NCwgMTk2LCA3LCA2LCAxLCAyNDEsIDIwNywgNywgNCwgMSwgMjQxLCAyMDcsIDcsIDYsIDEsIDIxNSwgNDAsIDcsIAotICAgIDQsIDEsIDIxNSwgNDAsIDcsIDYsIDEsIDIxNSwgMjI5LCA3LCA0LCAxLCAyMTUsIDIyOSwgNywgNiwgMSwgMjQ5LCAxMTAsIAotICAgIDcsIDQsIDEsIDI0OSwgMTEwLCA3LCA2LCAxLCAyNDksIDExMSwgMiwgMjQ5LCAyMTksIDcsIDQsIDEsIDI0OSwgMTExLCAyLCAKLSAgICAyNDksIDIxOSwgNywgMSwgNCwgNiwgMjQ1LCA2LCA3LCAxLCA0LCA2LCAyMjIsIDkxLCA3LCA2LCAxLCAyNTUsIDczLCA3LCAKLSAgICA0LCAxLCAyNTUsIDczLCA3LCA2LCAxLCAyNTQsIDczLCA3LCA0LCAxLCAyNTQsIDczLCA3LCA2LCAxLCAyNTMsIDE5MiwgNywgCi0gICAgNCwgMSwgMjUzLCAxOTIsIDcsIDYsIDEsIDI1MywgMTc2LCA3LCA0LCAxLCAyNTMsIDE3NiwgNywgNiwgMSwgMjUzLCAxNzcsIAotICAgIDIsIDIwMywgMTMwLCA3LCA0LCAxLCAyNTMsIDE3NywgMiwgMjAzLCAxMzAsIDcsIDYsIDEsIDI1MywgMTY3LCA3LCA0LCAxLCAKLSAgICAyNTMsIDE2NywgNywgNiwgMSwgMjIzLCA0OSwgMjUxLCA2NywgMiwgMjQ3LCAxMjAsIDcsIDQsIDEsIDIyMywgNDksIDI1MSwgCi0gICAgNjcsIDIsIDI0NywgMTIwLCA3LCA2LCAxLCAyMzUsIDI0LCAyLCA5MSwgNywgNCwgMSwgMjM1LCAyNCwgMiwgOTEsIDcsIDYsIAotICAgIDEsIDIzNSwgMjQsIDIsIDI0NywgMjU1LCA5MSwgNywgNCwgMSwgMjM1LCAyNCwgMiwgMjQ3LCAyNTUsIDkxLCA3LCA2LCAxLCAKLSAgICAyMzUsIDI0LCAyLCAyMTgsIDEwMywgMjIsIDI0NywgMjU1LCA5MSwgNywgNCwgMSwgMjM1LCAyNCwgMiwgMjE4LCAxMDMsIAotICAgIDIyLCAyNDcsIDI1NSwgOTEsIDcsIDYsIDEsIDI1MSwgMTM1LCAxNTYsIDcsIDQsIDEsIDI1MSwgMTM1LCAxNTYsIDcsIDYsIAotICAgIDEsIDIzMywgMTQ5LCAyLCAxMjUsIDkxLCA3LCA0LCAxLCAyMzMsIDE0OSwgMiwgMTI1LCA5MSwgNywgNiwgMSwgMTQ0LCAyLCAKLSAgICAxOTksIDIxOCwgMTAzLCAyMjYsIDEyMCwgNywgNCwgMSwgMTQ0LCAyLCAxOTksIDIxOCwgMTAzLCAyMjYsIDEyMCwgNywgNiwgCi0gICAgMSwgMTQ0LCAyLCAyMzIsIDEyMywgNywgNCwgMSwgMTQ0LCAyLCAyMzIsIDEyMywgNywgNiwgMSwgMjI2LCAxODMsIDcsIDQsIAotICAgIDEsIDIyNiwgMTgzLCA3LCA2LCAxLCAyMjYsIDEwNiwgMiwgMjE4LCAxMDMsIDIxNiwgMTM5LCAyNDgsIDM5LCA3LCA0LCAxLCAKLSAgICAyMjYsIDEwNiwgMiwgMjE4LCAxMDMsIDIxNiwgMTM5LCAyNDgsIDM5LCA3LCA2LCAxLCAyMjYsIDEwNiwgMiwgMjQ0LCA1MywgCi0gICAgNywgNCwgMSwgMjI2LCAxMDYsIDIsIDI0NCwgNTMsIDcsIDYsIDEsIDIyNiwgMTA2LCAyLCAyMTgsIDIyOSwgMjE3LCA3NywgCi0gICAgNywgNCwgMSwgMjI2LCAxMDYsIDIsIDIxOCwgMjI5LCAyMTcsIDc3LCA3LCA2LCAxLCAyMjQsIDk3LCAyLCAyMTgsIDEwMywgCi0gICAgMjE2LCAxMzksIDI0OCwgMzksIDcsIDQsIDEsIDIyNCwgOTcsIDIsIDIxOCwgMTAzLCAyMTYsIDEzOSwgMjQ4LCAzOSwgNywgCi0gICAgNiwgMSwgMjI0LCA5NywgMiwgMjQ3LCAyNTUsIDkxLCA3LCA0LCAxLCAyMjQsIDk3LCAyLCAyNDcsIDI1NSwgOTEsIDcsIDYsIAotICAgIDEsIDIyMywgMjI0LCAyMjIsIDE4NiwgNywgNCwgMSwgMjIzLCAyMjQsIDIyMiwgMTg2LCA3LCA2LCAxLCAyMjIsIDEzMCwgCi0gICAgMjIyLCAxODYsIDcsIDQsIDEsIDIyMiwgMTMwLCAyMjIsIDE4NiwgNywgNiwgMSwgMjE0LCAxMDYsIDIsIDI0NywgMjU1LCAKLSAgICA5MSwgNywgNCwgMSwgMjE0LCAxMDYsIDIsIDI0NywgMjU1LCA5MSwgNywgNiwgMSwgMjEyLCAxMDYsIDcsIDQsIDEsIDIxMiwgCi0gICAgMTA2LCA3LCA2LCAxLCAyMTMsIDE0NSwgMjEwLCAxNTksIDcsIDQsIDEsIDIxMywgMTQ1LCAyMTAsIDE1OSwgNywgNiwgMSwgCi0gICAgMjE2LCAxNTIsIDIsIDkxLCA3LCA0LCAxLCAyMTYsIDE1MiwgMiwgOTEsIDcsIDYsIDEsIDIxNiwgMTUyLCAyLCAyMTgsIAotICAgIDEwMywgMjE2LCAxMzksIDI0OCwgMzksIDcsIDQsIDEsIDIxNiwgMTUyLCAyLCAyMTgsIDEwMywgMjE2LCAxMzksIDI0OCwgCi0gICAgMzksIDcsIDYsIDEsIDIxMywgMjQ1LCA3LCA0LCAxLCAyMTMsIDI0NSwgNywgNiwgMSwgMjQ1LCA2NSwgNywgNCwgMSwgMjQ1LCAKLSAgICA2NSwgNywgNiwgMSwgMjM1LCAxNzEsIDcsIDQsIDEsIDIzNSwgMTcxLCA3LCA2LCAxLCAyNDksIDIwNywgNywgNCwgMSwgCi0gICAgMjQ5LCAyMDcsIDU4LCAxLCAyMTQsIDEzMywgNywgNCwgMSwgMjQ2LCA2OSwgNywgNCwgMSwgMjMyLCA4NCwgNywgNCwgMSwgCi0gICAgMjMwLCA4MCwgNywgNCwgMSwgMjI3LCAyMDEsIDcsIDQsIDEsIDIyMiwgMTI5LCA3LCAxLCA0LCA2LCAyMjIsIDEyOSwgNywgCi0gICAgNCwgMSwgMjE1LCAxMDgsIDcsIDQsIDEsIDIxNCwgMTk3LCA3LCA2LCAxLCAyMzUsIDIxMywgMjQ5LCA2MCwgNywgNCwgMSwgCi0gICAgMjM1LCAyMTMsIDI0OSwgNjAsIDcsIDYsIDEsIDIzNSwgMjEzLCAyNDUsIDYsIDcsIDQsIDEsIDIzNSwgMjEzLCAyNDUsIDYsIAotICAgIDcsIDYsIDEsIDIzNSwgMjEzLCAyNDMsIDIwMiwgNywgNiwgMSwgMjE1LCA5NCwgMjM1LCAyMTMsIDI0MywgMjAyLCA3LCA0LCAKLSAgICAxLCAyMTUsIDk0LCAyMzUsIDIxMywgMjQzLCAyMDIsIDcsIDYsIDEsIDIxNSwgOTQsIDE1NiwgNywgNCwgMSwgMjE1LCA5NCwgCi0gICAgMTU2LCA3LCA2LCAxLCAyMzUsIDIxMywgMTUzLCA3LCA0LCAxLCAyMzUsIDIxMywgMTUzLCA3LCA2LCAxLCAyMzUsIDIxMywgCi0gICAgMjIyLCA5MSwgNywgNCwgMSwgMjM1LCAyMTMsIDIyMiwgOTEsIDcsIDYsIDEsIDIzNSwgMjEzLCAyMTcsIDE1MiwgNywgNCwgCi0gICAgMSwgMjM1LCAyMTMsIDIxNywgMTUyLCA1OCwgMSwgMTIxLCAyNTAsIDMxLCAyNTUsIDE0LCA1OCwgMSwgMjQ5LCAyMjYsIDU4LCAKLSAgICAxLCAyMTksIDI1MSwgMjQ1LCA5OCwgNTAsIDcsIDYsIDEsIDIyMSwgMjU1LCA3LCA0LCAxLCAyMjEsIDI1NSwgNywgNiwgMSwgCi0gICAgMjE1LCA5NCwgMjQyLCA2MCwgNywgNCwgMSwgMjMzLCAxNDksIDIsIDIyMywgNTUsIDI0MSwgNTIsIDIyLCAyNTIsIDQxLCA3LCAKLSAgICA2LCAxLCAyMzAsIDI2LCAyLCAyNDgsIDM5LCA3LCA0LCAxLCAyMzAsIDI2LCAyLCAyNDgsIDM5LCA3LCA2LCAxLCAyNTEsIAotICAgIDY3LCAyLCAxMzAsIDcsIDQsIDEsIDI1MSwgNjcsIDIsIDEzMCwgNywgNiwgMSwgMjQzLCAyMDMsIDIsIDIyNiwgMjQ4LCA5MSwgCi0gICAgNywgNCwgMSwgMjQzLCAyMDMsIDIsIDIyNiwgMjQ4LCA5MSwgNywgNiwgMSwgMjM1LCAyNCwgMiwgMjI2LCAyNDgsIDkxLCA3LCAKLSAgICA0LCAxLCAyMzUsIDI0LCAyLCAyMjYsIDI0OCwgOTEsIDcsIDYsIDEsIDIzMCwgMjYsIDIsIDIyNiwgMjQ4LCA5MSwgNywgNCwgCi0gICAgMSwgMjMwLCAyNiwgMiwgMjI2LCAyNDgsIDkxLCA3LCA2LCAxLCAyMjMsIDIyNCwgMiwgMjI2LCAyNDgsIDkxLCA3LCA0LCAxLCAKLSAgICAyMjMsIDIyNCwgMiwgMjI2LCAyNDgsIDkxLCA3LCA2LCAxLCAyMjIsIDkyLCAyLCAyMjYsIDI0OCwgOTEsIDcsIDQsIDEsIAotICAgIDIyMiwgOTIsIDIsIDIyNiwgMjQ4LCA5MSwgNywgNiwgMSwgMjQyLCA2MSwgMiwgMTAzLCA1OCwgMSwgNiwgMjQyLCA2MSwgMiwgCi0gICAgOTEsIDU4LCAxLCA0LCAyNywgMjI2LCAyMzQsIDcsIDEsIDQsIDYsIDIxNSwgOTQsIDE5MywgNywgMjQ1LCAxMDMsIDEsIAotICAgIDIyMywgNDksIDI0NSwgNiwgNywgMjQ1LCAxMDMsIDEsIDIyMywgNDksIDIyNiwgMTA1LCA3LCAyNDUsIDEwMywgMSwgMjM1LCAKLSAgICAxOTMsIDE5MywgNywgMjQ1LCAxMDMsIDEsIDI0MCwgMTU0LCAyMzIsIDEyOSwgNywgMjQ1LCAxMDMsIDEsIDI1NCwgMjMsIAotICAgIDE5MywgMjE3LCAyMzAsIDIyOSwgMjE0LCAxLCA2MSwgMjE3LCAyMzAsIDIyOSwgMjE0LCAxLCA3MywgMjE3LCAyMzAsIDIyOSwgCi0gICAgMjE0LCA1LCAyNDYsIDQ4LCAyMTcsIDIzMCwgMjI5LCAyMTQsIDEsIDcwLCAyMTcsIDIzMCwgMjI5LCAyMTQsIDEsIDc1LCAKLSAgICAyMTcsIDIzMCwgMjI5LCAyMTQsIDEsIDc2LCAyMTcsIDIzMCwgMjI5LCAyMTQsIDUsIDI0MSwgMjUzLCAyMTcsIDIzMCwgCi0gICAgMjI5LCAyMTQsIDEsIDIzNCwgMjgsIDIxNywgMjMwLCAyMjksIDIxNCwgMSwgMjM0LCAxMDUsIDIxNywgMjMwLCAyMjksIAotICAgIDIxNCwgMSwgMjQyLCAxNzQsIDIxNywgMjMwLCAyMjksIDIxNCwgMSwgMjQyLCAyMjQsIDIxNywgMjMwLCAyMjksIDIxNCwgNSwgCi0gICAgMjU0LCA3NSwgMjE3LCAyMzAsIDIyOSwgMjE0LCAxLCAyNDksIDIzOCwgMjE3LCAyMzAsIDIyOSwgMjE0LCAxLCAyNTAsIDg2LCAKLSAgICAyMTcsIDIzMCwgMjI5LCAyMTQsIDEsIDIzNSwgNjgsIDIxNywgMjMwLCAyMjksIDIxNCwgMSwgMjM1LCAxMDksIDIxNywgCi0gICAgMjMwLCAyMjksIDIxNCwgMSwgMjE1LCAxMzMsIDIxNywgMjMwLCAyMjksIDIxNCwgMSwgMjE1LCAxMzksIDIxNywgMjMwLCAKLSAgICAyMjksIDIxNCwgMSwgMjQ4LCAxMDUsIDIxNywgMjMwLCAyMjksIDIxNCwgMSwgMjQ4LCAxMTQsIDIxNywgMjMwLCAyMjksIAotICAgIDIxNCwgMSwgMTExLCAyMTcsIDIzMCwgMjI5LCAyMTQsIDEsIDIxNiwgMTU2LCAyMTcsIDIzMCwgMjI5LCAyMTQsIDEsIDI0NywgCi0gICAgMTQ1LCAyMTcsIDIzMCwgMjI5LCAyMTQsIDEsIDI0OCwgNywgMjE3LCAyMzAsIDIyOSwgMjE0LCAxLCAyMjgsIDc0LCAyMTcsIAotICAgIDIzMCwgMjI5LCAyMTQsIDEsIDIyNSwgMTYsIDIxNywgMjMwLCAyMjksIDIxNCwgMSwgMjI1LCAxMjEsIDIxNywgMjMwLCAKLSAgICAyMjksIDIxNCwgMSwgMjUxLCAyMDUsIDIxNywgMjMwLCAyMjksIDIxNCwgMSwgMjUyLCAxMCwgMjE3LCAyMzAsIDIyOSwgCi0gICAgMjE0LCAxLCAyMzAsIDE2MSwgMjE3LCAyMzAsIDIyOSwgMjE0LCAxLCAyMjIsIDIxMSwgMjE3LCAyMzAsIDIyOSwgMjE0LCAxLCAKLSAgICAyMzIsIDE1NiwgMjE3LCAyMzAsIDIyOSwgMjE0LCAxLCAyMjIsIDE2NSwgMjE3LCAyMzAsIDIyOSwgMjE0LCAxLCAyMTksIAotICAgIDU4LCAyMTcsIDIzMCwgMjI5LCAyMTQsIDEsIDI0MSwgNjgsIDIxNywgMjMwLCAyMjksIDIxNCwgMjUsIDUsIDYxLCAyMTcsIAotICAgIDIzMCwgMjI5LCAyMTQsIDI1LCA1LCA3MywgMjE3LCAyMzAsIDIyOSwgMjE0LCAyNSwgNSwgNzAsIDIxNywgMjMwLCAyMjksIAotICAgIDIxNCwgMjUsIDUsIDc1LCAyMTcsIDIzMCwgMjI5LCAyMTQsIDI1LCA1LCAyMjYsIDE4MywgMjE3LCAyMzAsIDIyOSwgMjE0LCAKLSAgICAyMjUsIDEyLCAyMzEsIDE1OCwgMjE3LCAyMzAsIDIyOSwgMjE0LCAyMjUsIDEyLCAyMzEsIDE1NywgMjE3LCAyMzAsIDIyOSwgCi0gICAgMjE0LCAyMjUsIDEyLCAyMzEsIDE1NiwgMjE3LCAyMzAsIDIyOSwgMjE0LCAyMjUsIDEyLCAyMzEsIDE1NSwgMjI4LCA1NiwgCi0gICAgMjM1LCAyNDAsIDI0NCwgMiwgMTIzLCAyMjQsIDIxLCAyMjgsIDU2LCAyMzUsIDI0MCwgMjQ0LCAyLCAxMjMsIDI0MiwgMjcsIAotICAgIDIyOCwgNTYsIDIzNSwgMjQwLCAyNDQsIDIsIDEzNCwgMjI0LCAxOSwgMjI4LCA1NiwgMjM1LCAyNDAsIDI0NCwgMiwgMTIzLCAKLSAgICAyMTksIDExNywgMjI4LCA1NiwgMjM1LCAyNDAsIDI0NCwgMiwgMTIzLCAyNDUsIDE4OCwgMjI4LCA1NiwgMjM1LCAyNDAsIAotICAgIDI0NCwgMiwgMTM0LCAyMTksIDExNiwgMjI4LCA1NiwgMjM1LCAyNDAsIDIyNCwgMjIsIDc4LCAyMjgsIDU2LCAyMzUsIDI0MCwgCi0gICAgMjI1LCA0MCwgNzgsIDIyOCwgNTYsIDIzNSwgMjQwLCAyMjIsIDExOCwgNzgsIDIyOCwgNTYsIDIzNSwgMjQwLCAyMjQsIDIzLCAKLSAgICA3OCwgMjI1LCAxNDQsIDEsIDE3NiwgMjI1LCAxNDQsIDEsIDIzNCwgMTMyLCAyMjUsIDE0NCwgMSwgMjQzLCAxMzUsIDIyNSwgCi0gICAgMTQ0LCAxLCAyMjksIDc3LCAyMjUsIDE0NCwgMSwgMjUxLCAzMywgMjI1LCAxNDQsIDEsIDI1MCwgMTU3LCAyMjUsIDE0NCwgCi0gICAgMSwgMjM1LCAxNDEsIDIyNSwgMTQ0LCAxLCAyMjcsIDE2NSwgMjI1LCAxNDQsIDEsIDIxNywgMTA1LCAyMjUsIDE0NCwgMSwgCi0gICAgMjE2LCAyMDgsIDIyNSwgMTQ0LCAxLCAyNDgsIDIyMSwgMjI1LCAxNDQsIDEsIDE5NywgMjI1LCAxNDQsIDEsIDE5MCwgMjI1LCAKLSAgICAxNDQsIDEsIDIyNSwgMTQ3LCAyMjUsIDE0NCwgMSwgMjUyLCAxOTEsIDIyNSwgMTQ0LCAxLCAxODQsIDIyNSwgMTQ0LCAxLCAKLSAgICAyMTUsIDE4MywgMjI1LCAxNDQsIDEsIDIxNSwgMTc1LCAyMjUsIDE0NCwgMSwgMjQ2LCAzOCwgMjI1LCAxNDQsIDEsIDIxMiwgCi0gICAgNjUsIDIyNSwgMTQ0LCAxLCAyMTAsIDgyLCAyMjUsIDE0NCwgMSwgMjEwLCAxMTYsIDIyNSwgMTQ0LCAxLCA0LCA2MSwgMjI1LCAKLSAgICAxNDQsIDEsIDE5MSwgMjI1LCAxNDQsIDEsIDIwNSwgMjI1LCAxNDQsIDEsIDIzMywgMTM1LCAyMjUsIDE0NCwgMSwgMjIwLCAKLSAgICAxMDIsIDIyNSwgMTQ0LCAxLCAyMDYsIDIyNSwgMTQ0LCAxLCAxNjIsIDIyNSwgMTQ0LCAxLCA2MSwgMjI1LCAxNDQsIDEsIAotICAgIDczLCAyMjUsIDE0NCwgMSwgNzAsIDIyNSwgMTQ0LCAxLCA3NSwgMjI1LCAxNDQsIDEsIDc2LCAyMjUsIDE0NCwgMSwgMjI0LCAKLSAgICA4OCwgMjI1LCAxNDQsIDEsIDIxMSwgMTY1LCAyMjUsIDE0NCwgMSwgMjQ0LCAxOTYsIDIyNSwgMTQ0LCAxLCAyNDMsIDI5LCAKLSAgICAyMjUsIDE0NCwgMSwgMjQ1LCAyMDksIDIyNSwgMTQ0LCAyMTgsIDczLCAxLCAyMTIsIDY1LCAyMjUsIDE0NCwgMjE4LCA3MywgCi0gICAgMSwgMTkxLCAyMjUsIDE0NCwgMSwgMjE1LCAxNTYsIDIyNSwgMTQ0LCAxLCAyMTUsIDE0NCwgMjI1LCAxNDQsIDEsIDI0OCwgCi0gICAgMTM1LCAyMjUsIDE0NCwgMSwgMjI4LCAxMTAsIDIyNSwgMTQ0LCAxLCAyNTQsIDE0MSwgMTkxLCAyMjUsIDE0NCwgMSwgMjEzLCAKLSAgICAxMzQsIDIyMCwgMTAyLCAyMjUsIDE0NCwgMSwgMjEzLCAxMzUsIDE2MiwgMjI1LCAxNDQsIDEsIDI1MywgMjIzLCAyNDQsIAotICAgIDE5NiwgMjI1LCAxNDQsIDIxOCwgNzMsIDEsIDIwNSwgMjI1LCAxNDQsIDIxOCwgMjUsIDEsIDIwNSwgMjI1LCAxNDQsIDEsIAotICAgIDI1MCwgMjU1LCAyMjUsIDE0NCwgMjE5LCAxNTUsIDI0MSwgMjM2LCA3OCwgMjI1LCAxNDQsIDUyLCAyNDEsIDIzNiwgNzgsIAotICAgIDIyNSwgMTQ0LCAxNjQsIDIyMCwgOTUsIDIyNSwgMTQ0LCAxNjQsIDUyLCAyMjAsIDk1LCAxNzksIDUsIDI1NCwgNzUsIDE3OSwgCi0gICAgNSwgMjEzLCAxNDcsIDE3OSwgMSwgNjEsIDE3OSwgMSwgMjU1LCA3MywgMTc5LCAxLCA3MywgMTc5LCAxLCAyMzYsIDMzLCAKLSAgICAxNzksIDEsIDcwLCAxNzksIDEsIDIxNCwgMTE4LCAxNzksIDEsIDE0OSwgMTUzLCAxNzksIDEsIDE0OSwgMjIyLCAxODAsIAotICAgIDE3OSwgMSwgMTQ5LCAxNTYsIDE3OSwgMSwgMTQ5LCAyMzIsIDE4NSwgMTc5LCAxLCA3NSwgMTc5LCAxLCAyNDUsIDIwOSwgCi0gICAgMTc5LCAxLCAyNTQsIDIwMSwgMTc5LCAxLCA3NiwgMTc5LCAxLCAyMjYsIDE4MywgMTc5LCAxLCAyNTMsIDE5MiwgMTc5LCAxLCAKLSAgICAxNzYsIDE3OSwgMSwgMjM0LCAxMzIsIDE3OSwgMSwgMjQzLCAxMzUsIDE3OSwgMSwgMjQyLCAyNDksIDE3OSwgMSwgMjI5LCAKLSAgICA3NywgMTc5LCAxLCAyNTEsIDMzLCAxNzksIDEsIDI1MCwgMTU3LCAxNzksIDEsIDIzNSwgMTQxLCAxNzksIDEsIDIzNSwgCi0gICAgMTE0LCAxNzksIDEsIDIyNywgMTY1LCAxNzksIDEsIDIxNSwgMTU2LCAxNzksIDEsIDIxNSwgMTQ0LCAxNzksIDEsIDI0OCwgCi0gICAgMTM1LCAxNzksIDEsIDI0OCwgMTE5LCAxNzksIDEsIDIyOCwgMTEwLCAxNzksIDEsIDIxNywgMTA1LCAxNzksIDEsIDIxNiwgCi0gICAgMjA4LCAxNzksIDEsIDI0OCwgMjIxLCAxNzksIDEsIDI0OCwgMjUsIDE3OSwgMSwgMTk3LCAxNzksIDEsIDE5MCwgMTc5LCAxLCAKLSAgICAyMjUsIDE0NywgMTc5LCAxLCAyNTIsIDE5MSwgMTc5LCAxLCAyNTIsIDE4LCAxNzksIDEsIDE4NCwgMTc5LCAxLCAxOTEsIAotICAgIDE3OSwgMSwgMjA1LCAxNzksIDEsIDIzMywgMTM1LCAxNzksIDEsIDIxNCwgMjcsIDE3OSwgMSwgMjIwLCAxMDIsIDE3OSwgMSwgCi0gICAgMjE4LCAyMjMsIDE3OSwgMSwgMjA2LCAxNzksIDEsIDE2MiwgMTc5LCAxLCAyMzIsIDE4NCwgMTc5LCAxMTYsIDUsIDI0MiwgCi0gICAgNDQsIDE3OSwgMjUsIDUsIDI1NSwgNzMsIDE3OSwgMjUsIDUsIDczLCAxNzksIDI1LCA1LCAyMzYsIDMzLCAxNzksIDI1LCA1LCAKLSAgICA3MCwgMTc5LCAyNSwgNSwgMjE0LCAxMTgsIDE3OSwgMjUsIDUsIDE0OSwgMTUzLCAxNzksIDI1LCA1LCAxNDksIDIyMiwgCi0gICAgMTgwLCAxNzksIDI1LCA1LCAxNDksIDE1NiwgMTc5LCAyNSwgNSwgMTQ5LCAyMzIsIDE4NSwgMTc5LCAyNSwgNSwgNzUsIAotICAgIDE3OSwgMjUsIDUsIDI0NSwgMjA5LCAxNzksIDI1LCA1LCAyNTQsIDIwMSwgMTc5LCAyNSwgNSwgNzYsIDE3OSwgMjUsIDUsIAotICAgIDIyNiwgMTgzLCAxNzksIDI1LCA1LCAyNTMsIDE5MiwgMTc5LCA1LCAyMTMsIDE1MiwgMTc5LCAyNDgsIDE3OCwgMTc5LCA1MiwgCi0gICAgMjQ4LCAxNzgsIDE3OSwgMjEsIDIxMCwgODYsIDE3OSwgMjEsIDExMCwgMTc5LCAyMSwgMTA1LCAxNzksIDIxLCAxNTgsIAotICAgIDE3OSwgMjEsIDE2MSwgMTc5LCAyMSwgMTg5LCAxNzksIDIxLCAxOTQsIDE3OSwgMjEsIDE5OCwgMTc5LCAyMSwgMTk1LCAKLSAgICAxNzksIDIxLCAyMDAsIDM4LCA4NCwgMjEsIDIxMCwgODYsIDM4LCA4NCwgMjEsIDExMCwgMzgsIDg0LCAyMSwgMTA1LCAzOCwgCi0gICAgODQsIDIxLCAxNTgsIDM4LCA4NCwgMjEsIDE2MSwgMzgsIDg0LCAyMSwgMTg5LCAzOCwgODQsIDIxLCAxOTQsIDM4LCA4NCwgCi0gICAgMjEsIDE5OCwgMzgsIDg0LCAyMSwgMTk1LCAzOCwgODQsIDIxLCAyMDAsIDM4LCA4NCwgMSwgNjEsIDM4LCA4NCwgMSwgNzAsIAotICAgIDM4LCA4NCwgMSwgMTc2LCAzOCwgODQsIDEsIDE5NywgMzgsIDg0LCAxLCAxOTAsIDM4LCA4NCwgMSwgMjA1LCAzOCwgODQsIAotICAgIDEsIDIxMywgMTc2LCAzOCwgODQsIDUsIDI1MywgMTc1LCA4NCwgNSwgMjE5LCAxNywgMjUwLCAyNTUsIDg0LCA1LCAyNTEsIAotICAgIDAsIDIxMywgMTUyLCA4NCwgNSwgNTIsIDI1MSwgMCwgMjEzLCAxNTIsIDg0LCA1LCAyNTEsIDAsIDEwNSwgODQsIDUsIDI1MSwgCi0gICAgMCwgMTU4LCA4NCwgNSwgMjUxLCAwLCAyNTMsIDE3NSwgODQsIDUsIDIyNCwgMTI0LCA4NCwgMjQzLCAxMDAsIDI0NCwgMTAzLCAKLSAgICA4NCwgMjUwLCAyMzgsIDg0LCAyNDEsIDIzMCwgMjM0LCAxODgsIDIzMiwgMjQyLCAyMSwgMjEwLCA4NiwgMjM0LCAxODgsIAotICAgIDIzMiwgMjQyLCAyMSwgMTEwLCAyMzQsIDE4OCwgMjMyLCAyNDIsIDIxLCAxMDUsIDIzNCwgMTg4LCAyMzIsIDI0MiwgMjEsIAotICAgIDE1OCwgMjM0LCAxODgsIDIzMiwgMjQyLCAyMSwgMTYxLCAyMzQsIDE4OCwgMjMyLCAyNDIsIDIxLCAxODksIDIzNCwgMTg4LCAKLSAgICAyMzIsIDI0MiwgMjEsIDE5NCwgMjM0LCAxODgsIDIzMiwgMjQyLCAyMSwgMTk4LCAyMzQsIDE4OCwgMjMyLCAyNDIsIDIxLCAKLSAgICAxOTUsIDIzNCwgMTg4LCAyMzIsIDI0MiwgMjEsIDIwMCwgMjM0LCAxODgsIDIzMiwgMjQyLCAxLCAxNzYsIDIzNCwgMTg4LCAKLSAgICAyMzIsIDI0MiwgMSwgMjM0LCAxMzIsIDIzNCwgMTg4LCAyMzIsIDI0MiwgMSwgMjQzLCAxMzUsIDIzNCwgMTg4LCAyMzIsIAotICAgIDI0MiwgMSwgMjI5LCA3NywgMjM0LCAxODgsIDIzMiwgMjQyLCAxLCAyMDYsIDIzNCwgMTg4LCAyMzIsIDI0MiwgMSwgMjIwLCAKLSAgICAxMDIsIDIzNCwgMTg4LCAyMzIsIDI0MiwgMSwgMjEwLCAxMTYsIDIzNCwgMTg4LCAyMzIsIDI0MiwgMSwgMjI3LCAxNjUsIAotICAgIDIzNCwgMTg4LCAyMzIsIDI0MiwgMSwgMjE3LCAxMDUsIDIzNCwgMTg4LCAyMzIsIDI0MiwgMSwgMjQwLCAyMjYsIDIzNCwgCi0gICAgMTg4LCAyMzIsIDI0MiwgMSwgMTk3LCAyMzQsIDE4OCwgMjMyLCAyNDIsIDEsIDE5MCwgMjM0LCAxODgsIDIzMiwgMjQyLCAxLCAKLSAgICAyMjUsIDE0NywgMjM0LCAxODgsIDIzMiwgMjQyLCAxLCAxODQsIDIzNCwgMTg4LCAyMzIsIDI0MiwgMSwgMjQ4LCAyMjEsIAotICAgIDIzNCwgMTg4LCAyMzIsIDI0MiwgMSwgMjUyLCAxOTEsIDIzNCwgMTg4LCAyMzIsIDI0MiwgMSwgMjA1LCAyMzQsIDE4OCwgCi0gICAgMjMyLCAyNDIsIDEsIDE5MSwgMjM0LCAxODgsIDIzMiwgMjQyLCAxLCAyMzMsIDEzNSwgMjM0LCAxODgsIDIzMiwgMjQyLCAxLCAKLSAgICAyMTIsIDY1LCAyMzQsIDE4OCwgMjMyLCAyNDIsIDEsIDIxNiwgMjA4LCAyMzQsIDE4OCwgMjMyLCAyNDIsIDEsIDE2MiwgCi0gICAgMjM0LCAxODgsIDIzMiwgMjQyLCAxLCAyMTQsIDI3LCAyMzQsIDE4OCwgMjMyLCAyNDIsIDEsIDI1MSwgMzMsIDIzNCwgMTg4LCAKLSAgICAyMzIsIDI0MiwgMSwgNjEsIDIzNCwgMTg4LCAyMzIsIDI0MiwgMSwgMjI2LCAyMzQsIDIzNCwgMTg4LCAyMzIsIDI0MiwgMSwgCi0gICAgNzMsIDIzNCwgMTg4LCAyMzIsIDI0MiwgMSwgMjI2LCAxODMsIDIzNCwgMTg4LCAyMzIsIDI0MiwgMjUsIDIxNCwgMjE0LCAKLSAgICAyMzQsIDE4OCwgMjMyLCAyNDIsIDI1LCA3NSwgMjM0LCAxODgsIDIzMiwgMjQyLCAyNSwgNzAsIDIzNCwgMTg4LCAyMzIsIAotICAgIDI0MiwgMjUsIDI0NSwgMjA5LCAyMzQsIDE4OCwgMjMyLCAyNDIsIDI1LCA3NiwgMjM0LCAxODgsIDIzMiwgMjQyLCAxMzgsIAotICAgIDIyNSwgMzAsIDIzNCwgMTg4LCAyMzIsIDI0MiwgMTM4LCAyNTEsIDEyLCAyMzQsIDE4OCwgMjMyLCAyNDIsIDEzOCwgMjUxLCAKLSAgICAxMywgMjI1LCAzMCwgMjM0LCAxODgsIDIzMiwgMjQyLCA1LCAyNDksIDc3LCAyMzQsIDE4OCwgMjMyLCAyNDIsIDUsIDIxOSwgCi0gICAgMTk5LCAyMjMsIDkzLCAxLCAxNzYsIDIyMywgOTMsIDEsIDI0MywgMTM1LCAyMjMsIDkzLCAxLCAyMjksIDc3LCAyMjMsIDkzLCAKLSAgICAxLCAyMTcsIDEwNSwgMjIzLCA5MywgMSwgMjQ4LCAyMjEsIDIyMywgOTMsIDEsIDE5NywgMjIzLCA5MywgMSwgMTkwLCAyMjMsIAotICAgIDkzLCAxLCAyNTIsIDE5MSwgMjIzLCA5MywgMSwgMTg0LCAyMjMsIDkzLCAxLCAyNTEsIDMzLCAyMjMsIDkzLCAxLCAyMzUsIAotICAgIDE0MSwgMjIzLCA5MywgMSwgMjI3LCAxNjUsIDIyMywgOTMsIDEsIDIwNiwgMjIzLCA5MywgMSwgMjA1LCAyMjMsIDkzLCAxLCAKLSAgICAyMzMsIDEzNSwgMjIzLCA5MywgMSwgMTkxLCAyMjMsIDkzLCAxLCAyMTIsIDY1LCAyMjMsIDkzLCAxLCAxNjIsIDIyMywgOTMsIAotICAgIDEsIDIzMSwgMTI0LCAyMjMsIDkzLCAxLCAyMjksIDU2LCAyMjMsIDkzLCAxLCAyMjksIDE0OCwgMjIzLCA5MywgMSwgMjI3LCAKLSAgICAxMzUsIDIyMywgOTMsIDEsIDYxLCAyMjMsIDkzLCAyNSwgNSwgNzMsIDIyMywgOTMsIDI1LCA1LCA3MCwgMjIzLCA5MywgMjUsIAotICAgIDUsIDc1LCAyMjMsIDkzLCAyNSwgNSwgMjU0LCAyMDEsIDIyMywgOTMsIDI1LCA1LCA3NiwgMjIzLCA5MywgMjUsIDUsIDI1MywgCi0gICAgMTkyLCAyMjMsIDkzLCAyNSwgNSwgMjQ1LCA1NSwgMjIzLCA5MywgMjUsIDUsIDI0NSwgMjMzLCAyMjMsIDkzLCAxMTYsIDUsIAotICAgIDIyOSwgNzksIDIyMywgOTMsIDExNiwgNSwgMjMwLCAyNSwgMjIzLCA5MywgMTE2LCA1LCAxNTMsIDIyMywgOTMsIDExNiwgNSwgCi0gICAgMjQyLCA2MCwgMjIzLCA5MywgMjEzLCAxNTIsIDIyMywgOTMsIDIyMSwgMTczLCA3OCwgMjQsIDEwMCwgMjE2LCA5NywgMjQsIAotICAgIDEwMCwgMjE2LCA5NiwgMjQsIDEwMCwgMjE2LCA5NCwgMjQsIDEwMCwgMjE2LCA5OSwgMjQsIDEwMCwgMjIzLCAyMSwgMjQsIAotICAgIDEwMCwgMjIzLCA1LCAyNCwgMTAwLCAyMjMsIDAsIDI0LCAxMDAsIDIyMywgMiwgMjQsIDEwMCwgMjIzLCAxOCwgMjQsIDEwMCwgCi0gICAgMjIzLCAxMSwgMjQsIDEwMCwgMjIzLCA0LCAyNCwgMTAwLCAyMjMsIDIzLCAyNCwgMTAwLCAyMjMsIDYsIDI0LCAxMDAsIAotICAgIDIyMywgMjUsIDI0LCAxMDAsIDIyMywgMjIsIDI0LCAxMDAsIDIzMCwgMjEzLCAyNCwgMTAwLCAyMzAsIDIwNCwgMjQsIDEwMCwgCi0gICAgMjMwLCAyMDcsIDI0LCAxMDAsIDIyNSwgODAsIDI0LCAxMDAsIDIyNSwgOTEsIDI0LCAxMDAsIDIyNSwgOTIsIDI0LCAxMDAsIAotICAgIDIxOCwgMjA3LCAyNCwgMTAwLCAyMzYsIDQ2LCAyNCwgMTAwLCAyMzYsIDUzLCAyNCwgMTAwLCAyMTgsIDIxOCwgMjQsIDEwMCwgCi0gICAgMjE4LCAyMDUsIDI0LCAxMDAsIDIyNSwgMTMwLCAyNCwgMTAwLCAyNDEsIDE2NywgMjQsIDEwMCwgMjE4LCAyMDIsIDE1NSwgCi0gICAgNSwgMjI2LCAyNywgMTU1LCA1LCAyNTAsIDE4NywgMTU1LCA1LCAyMzMsIDY2LCAxNTUsIDUsIDIxMSwgMjQzLCAxNTUsIDEsIAotICAgIDYxLCAxNTUsIDEsIDI0MCwgMTU0LCAyMzQsIDE5MSwgMTU1LCAxLCA3MywgMTU1LCAxLCAyMzYsIDMzLCAxNTUsIDEsIDcwLCAKLSAgICAxNTUsIDEsIDIyNiwgOTAsIDI1MCwgMTYzLCAxNTUsIDEsIDIyOSwgNzgsIDIzMywgMjgsIDE1NSwgMSwgMjI5LCA3OCwgCi0gICAgMjMzLCAyOSwgMjIzLCAxNDIsIDE1NSwgMSwgNzUsIDE1NSwgMSwgMjU0LCAyMDEsIDE1NSwgMSwgNzYsIDE1NSwgMSwgMTc2LCAKLSAgICAxNTUsIDEsIDIzNSwgMTMsIDIyMSwgMjI4LCAxNTUsIDEsIDIzNSwgMTMsIDIzMCwgNjYsIDE1NSwgMSwgMjQzLCAxMzUsIAotICAgIDE1NSwgMSwgMjQzLCAxMzYsIDIzMCwgNjYsIDE1NSwgMSwgMjI5LCA3NywgMTU1LCAxLCAyNTEsIDMzLCAxNTUsIDEsIDI1MSwgCi0gICAgMzQsIDIzMCwgNjYsIDE1NSwgMSwgMjM1LCAxNDEsIDE1NSwgMSwgMjI3LCAxNjYsIDIzMCwgNjYsIDE1NSwgMSwgMjM1LCAKLSAgICAxNDIsIDIzMSwgMjA3LCAxNTUsIDEsIDIyNywgMTY1LCAxNTUsIDEsIDIxNSwgMTU2LCAxNTUsIDEsIDIxNSwgMTU3LCAyMzEsIAotICAgIDIwNywgMTU1LCAxLCAyNDgsIDEzNSwgMTU1LCAxLCAyNDgsIDEzNiwgMjMxLCAyMDcsIDE1NSwgMSwgMjI5LCAyMjksIDIzMCwgCi0gICAgNjYsIDE1NSwgMSwgMjE3LCAxMDUsIDE1NSwgMSwgMjE3LCAxMDYsIDIzMCwgNjYsIDE1NSwgMSwgMjQ4LCAyMjEsIDE1NSwgCi0gICAgMSwgMjQ4LCAyMjIsIDIzMSwgMjA3LCAxNTUsIDEsIDE5NywgMTU1LCAxLCAxOTAsIDE1NSwgMSwgMjI2LCA5MCwgMjMwLCAKLSAgICA2NiwgMTU1LCAxLCAyNTIsIDE5MSwgMTU1LCAxLCAyNTIsIDE5MiwgMjMwLCA2NiwgMTU1LCAxLCAxODQsIDE1NSwgMSwgCi0gICAgMTkxLCAxNTUsIDEsIDIwNSwgMTU1LCAxLCAyMjMsIDE4OCwgMjU0LCAyMTAsIDE1NSwgMSwgMjMzLCAxMzUsIDE1NSwgMSwgCi0gICAgMjEyLCA2NSwgMTU1LCAxLCAyMjIsIDM0LCAyMzAsIDY2LCAxNTUsIDEsIDIyMiwgMzQsIDIzMSwgMjA3LCAxNTUsIDEsIAotICAgIDIwNiwgMTU1LCAxLCAxNjIsIDE1NSwgNSwgMjUwLCAxODgsIDIxNiwgMjUwLCAxNTUsIDI1LCA1LCAyMTcsIDQ3LCAxNTUsIAotICAgIDI1LCA1LCAyMTYsIDM1LCAxNTUsIDI1LCA1LCAyMTEsIDE5MCwgMTU1LCAyNSwgNSwgMjExLCAxOTEsIDIzMSwgNjksIDE1NSwgCi0gICAgMjUsIDUsIDIxOCwgNDcsIDE1NSwgMjUsIDUsIDIxOCwgNDgsIDIzMSwgNTcsIDE1NSwgMjUsIDUsIDIxNywgNjUsIDE1NSwgCi0gICAgMjUsIDUsIDI0NywgMTk0LCAyMzAsIDY1LCAxNTUsIDI1LCA1LCAyMjUsIDE4NCwgMTU1LCAxMTYsIDUsIDIzNCwgMTU4LCAKLSAgICAxNTUsIDExNiwgNSwgMjI1LCAxOTYsIDE1NSwgMTE2LCA1LCAyNTEsIDE5LCAxNTUsIDIyNiwgNDAsIDE1NSwgNDMsIDIyMywgCi0gICAgNjksIDE1NSwgNDQsIDIyMywgNjksIDE1NSwgMjI2LCA3OSwgMjU0LCAxMTcsIDE1NSwgMjI2LCA3OSwgMjMxLCAyMjQsIAotICAgIDE1NSwgMjI2LCA3OSwgMjMyLCA4OCwgMTU1LCAyMjYsIDc5LCAyMTEsIDIzOCwgMTU1LCAyMjYsIDc5LCAyMjYsIDQxLCAKLSAgICAxNTUsIDIyNiwgNzksIDIzMiwgMjA1LCAxNTUsIDIyNiwgNzksIDIzMiwgODIsIDE1NSwgMjI2LCA3OSwgMjU0LCAyNDksIAotICAgIDE1NSwgMjI2LCA3OSwgMjU0LCAyNTAsIDI1NCwgMjQ5LCAxNTUsIDIyNiwgNzksIDIyNSwgNTEsIDE1NSwgMjE1LCA5NCwgCi0gICAgMjI2LCA3OSwgMjI1LCA1MSwgMTU1LCAyMjYsIDM2LCAxNTUsIDIxLCAyMTAsIDg2LCAxNTUsIDIxLCAxMTAsIDE1NSwgMjEsIAotICAgIDEwNSwgMTU1LCAyMSwgMTU4LCAxNTUsIDIxLCAxNjEsIDE1NSwgMjEsIDE4OSwgMTU1LCAyMSwgMTk0LCAxNTUsIDIxLCAKLSAgICAxOTgsIDE1NSwgMjEsIDE5NSwgMTU1LCAyMSwgMjAwLCAxNTUsIDIyNiwgNzksIDIxNiwgNjksIDIxNSwgMTA2LCAxNTUsIAotICAgIDIyNiwgNzksIDIzNSwgMTY3LCAxNzIsIDEsIDYxLCAxNzIsIDEsIDczLCAxNzIsIDEsIDcwLCAxNzIsIDEsIDc1LCAxNzIsIAotICAgIDEsIDI1NCwgMjAxLCAxNzIsIDEsIDc2LCAxNzIsIDEsIDE3NiwgMTcyLCAxLCAyMzQsIDEzMiwgMTcyLCAxLCAyNDMsIDEzNSwgCi0gICAgMTcyLCAxLCAyNDIsIDI0OSwgMTcyLCAxLCAyMjgsIDI0NSwgMTcyLCAxLCAyMjksIDc3LCAxNzIsIDEsIDI1MCwgMTU3LCAKLSAgICAxNzIsIDEsIDI1MCwgMTEyLCAxNzIsIDEsIDIzNSwgMTQxLCAxNzIsIDEsIDIzNSwgMTE0LCAxNzIsIDEsIDIyOCwgMjM1LCAKLSAgICAxNzIsIDEsIDIyOCwgMjM3LCAxNzIsIDEsIDIyOCwgMjM2LCAxNzIsIDEsIDIxNywgMTA1LCAxNzIsIDEsIDIxNiwgMjA4LCAKLSAgICAxNzIsIDEsIDI0OCwgMjIxLCAxNzIsIDEsIDI0OCwgMjUsIDE3MiwgMSwgMjI3LCAyMDcsIDE3MiwgMSwgMTk3LCAxNzIsIDEsIAotICAgIDI0OCwgMTM1LCAxNzIsIDEsIDE5MCwgMTcyLCAxLCAyMjQsIDIyMCwgMTcyLCAxLCAyMjUsIDE0NywgMTcyLCAxLCAyNTIsIAotICAgIDE5MSwgMTcyLCAxLCAyNTIsIDE4LCAxNzIsIDEsIDIzMCwgOTUsIDE3MiwgMSwgMTg0LCAxNzIsIDEsIDI1MiwgMTExLCAKLSAgICAxNzIsIDEsIDE5MSwgMTcyLCAxLCAyMDUsIDE3MiwgMSwgMjMzLCAxMzUsIDE3MiwgMSwgMjE0LCAyNywgMTcyLCAxLCAyMTgsIAotICAgIDIyMywgMTcyLCAxLCAyMDYsIDE3MiwgMSwgMTYyLCAxNzIsIDI1LCA1LCAyNTUsIDczLCAxNzIsIDI1LCA1LCA3MywgMTcyLCAKLSAgICAyNSwgNSwgMjM2LCAzMywgMTcyLCAyNSwgNSwgMjQ1LCAxOTUsIDE3MiwgMjUsIDUsIDcwLCAxNzIsIDI1LCA1LCAyMjYsIAotICAgIDIzNCwgMTcyLCAyNSwgNSwgNzYsIDE3MiwgMjUsIDUsIDI1NCwgMjAxLCAxNzIsIDI1LCA1LCAyNTMsIDE5MiwgMTcyLCAyNSwgCi0gICAgNSwgMjE0LCAyMTQsIDE3MiwgMTE2LCA1LCAxOTEsIDE3MiwgMTE2LCA1LCAyMDUsIDE3MiwgMTE2LCA1LCAyMzMsIDEzNSwgCi0gICAgMTcyLCAxMTYsIDUsIDIxMiwgNjUsIDE3MiwgMSwgNDAsIDIzNSwgMjMsIDE3MiwgMSwgNDAsIDI0MywgMjAyLCAxNzIsIDEsIAotICAgIDQwLCAyMjksIDc5LCAxNzIsIDExNiwgNSwgNDAsIDIyOSwgNzksIDE3MiwgMSwgNDAsIDI1MCwgMTU4LCAxNzIsIDEsIDQwLCAKLSAgICAyMTcsIDE1MiwgMTcyLCAxLCA0MCwgMjMwLCAyNSwgMTcyLCAxLCA0MCwgMjI2LCAxMDUsIDE3MiwgMSwgNDAsIDIxMSwgCi0gICAgMTE3LCAxNzIsIDEsIDQwLCAxNTMsIDE3MiwgMSwgNDAsIDE1NiwgMTcyLCAxLCA0MCwgMjE4LCAyMjYsIDE3MiwgMTE2LCA1LCAKLSAgICA0MCwgMTkzLCAxNzIsIDExNiwgNSwgNDAsIDI0MiwgNjAsIDE3MiwgMjEsIDIxMCwgODYsIDE3MiwgMjEsIDExMCwgMTcyLCAKLSAgICAyMSwgMTA1LCAxNzIsIDIxLCAxNTgsIDE3MiwgMjEsIDE2MSwgMTcyLCAyMSwgMTg5LCAxNzIsIDIxLCAxOTQsIDE3MiwgMjEsIAotICAgIDE5OCwgMTcyLCAyMSwgMTk1LCAxNzIsIDIxLCAyMDAsIDE3MiwgMjI0LCAxNDEsIDIxOCwgMjUxLCAxNzIsIDIyNCwgMTQxLCAKLSAgICAyNDgsIDE3OCwgMTcyLCAyMjQsIDE0MSwgNTIsIDI0OCwgMTc4LCAxNzIsIDIyNCwgMTQxLCAyMTUsIDIxMSwgMjQ4LCAxNzgsIAotICAgIDY4LCAxLCAyMzQsIDEyNiwgMjQzLCAxMzUsIDY4LCAxLCAyMzQsIDEyNiwgMjUxLCAzMywgNjgsIDEsIDIzNCwgMTI2LCAKLSAgICAyNTAsIDE1NywgNjgsIDEsIDIzNCwgMTI2LCAyMzUsIDE0MSwgNjgsIDEsIDIzNCwgMTI2LCAyMzUsIDExNCwgNjgsIDEsIAotICAgIDIzNCwgMTI2LCAyMjcsIDE2NSwgNjgsIDEsIDIzNCwgMTI2LCAyMTUsIDE1NiwgNjgsIDEsIDIzNCwgMTI2LCAyMTUsIDE0NCwgCi0gICAgNjgsIDEsIDIzNCwgMTI2LCAyNDgsIDEzNSwgNjgsIDEsIDIzNCwgMTI2LCAyNDgsIDExOSwgNjgsIDEsIDIzNCwgMTI2LCAKLSAgICAyNDgsIDI1LCA2OCwgMSwgMjM0LCAxMjYsIDE5NywgNjgsIDEsIDIzNCwgMTI2LCAyMDYsIDY4LCAxLCAyMzQsIDEyNiwgCi0gICAgMTYyLCA2OCwgMSwgMjM0LCAxMjYsIDI0MSwgMTg5LCA2OCwgMSwgMjM0LCAxMjYsIDI0NCwgMTk2LCA2OCwgNTgsIDEsIAotICAgIDIzNCwgMTI2LCAyMjMsIDEwOSwgNjgsIDEsIDIzNCwgMTI2LCAyMTEsIDE2NSwgNjgsIDEsIDIzNCwgMTI2LCAyMTAsIDExNiwgCi0gICAgNjgsIDEsIDIzNCwgMTI2LCAyMDUsIDY4LCAyMzIsIDE0NSwgMjM0LCAxMjYsIDIyNiwgMjUzLCA2OCwgMjMyLCAxNDUsIAotICAgIDIzNCwgMTI2LCAyMjQsIDQzLCA2OCwgMjMyLCAxNDUsIDIzNCwgMTI2LCAyNDEsIDEyMSwgNjgsIDE2LCAyNTQsIDE5MCwgCi0gICAgMjQ1LCAzMCwgNjgsIDE2LCAyNTQsIDE5MCwgMTEwLCA2OCwgMTYsIDI1NCwgMTkwLCAxMDUsIDY4LCAxLCAyNTQsIDE5MCwgCi0gICAgMjA1LCA2OCwgNSwgMjI2LCAyMywgMjM0LCAyMTMsIDIxNiwgMzAsIDM5LCAyMDgsIDEsIDEyMSwgMjM0LCAyOCwgMzksIAotICAgIDIwOCwgMSwgMTI1LCAyMzQsIDI4LCAzOSwgMjA4LCAxLCAxMjEsIDIzNCwgMTA1LCAzOSwgMjA4LCAxLCAxMjUsIDIzNCwgCi0gICAgMTA1LCAzOSwgMjA4LCAxLCAxMjEsIDIzNCwgMTE0LCAzOSwgMjA4LCAxLCAxMjUsIDIzNCwgMTE0LCAzOSwgMjA4LCAxLCAKLSAgICAxMjEsIDI0MiwgMTc0LCAzOSwgMjA4LCAxLCAxMjUsIDI0MiwgMTc0LCAzOSwgMjA4LCAxLCAxMjEsIDIyOSwgNCwgMzksIAotICAgIDIwOCwgMSwgMTI1LCAyMjksIDQsIDM5LCAyMDgsIDEsIDEyMSwgMjQ5LCAyMzgsIDM5LCAyMDgsIDEsIDEyNSwgMjQ5LCAKLSAgICAyMzgsIDM5LCAyMDgsIDEsIDEyMSwgMjUwLCA4NiwgMzksIDIwOCwgMSwgMTI1LCAyNTAsIDg2LCAzOSwgMjA4LCAxLCAxMjEsIAotICAgIDIxOSwgNTgsIDM5LCAyMDgsIDEsIDEyNSwgMjE5LCA1OCwgMzksIDIwOCwgMSwgMTIxLCAyMjcsIDEzNCwgMzksIDIwOCwgMSwgCi0gICAgMTI1LCAyMjcsIDEzNCwgMzksIDIwOCwgMSwgMTIxLCAyNDcsIDE0NSwgMzksIDIwOCwgMSwgMTI1LCAyNDcsIDE0NSwgMzksIAotICAgIDIwOCwgMSwgMTIxLCAxMTEsIDM5LCAyMDgsIDEsIDEyNSwgMTExLCAzOSwgMjA4LCAxLCAxMjEsIDIxNiwgMTU2LCAzOSwgCi0gICAgMjA4LCAxLCAxMjUsIDIxNiwgMTU2LCAzOSwgMjA4LCAxLCAxMjEsIDIyOCwgNzQsIDM5LCAyMDgsIDEsIDEyNSwgMjI4LCAKLSAgICA3NCwgMzksIDIwOCwgMSwgMTIxLCAyNTEsIDIwNSwgMzksIDIwOCwgMSwgMTI1LCAyNTEsIDIwNSwgMzksIDIwOCwgMSwgCi0gICAgMTIxLCAyMjUsIDE2LCAzOSwgMjA4LCAxLCAxMjUsIDIyNSwgMTYsIDM5LCAyMDgsIDEsIDEyMSwgMjI1LCAxMjEsIDM5LCAKLSAgICAyMDgsIDEsIDEyNSwgMjI1LCAxMjEsIDM5LCAyMDgsIDEsIDEyMSwgMjQ0LCA0MywgMzksIDIwOCwgMSwgMTI1LCAyNDQsIAotICAgIDQzLCAzOSwgMjA4LCAxLCAxMjEsIDIzMCwgMTYxLCAzOSwgMjA4LCAxLCAxMjUsIDIzMCwgMTYxLCAzOSwgMjA4LCAxLCAKLSAgICAxMjEsIDIxMCwgMjQ0LCAzOSwgMjA4LCAxLCAxMjUsIDIxMCwgMjQ0LCAzOSwgMjA4LCAxLCAxMjEsIDIyMiwgMjExLCAzOSwgCi0gICAgMjA4LCAxLCAxMjUsIDIyMiwgMjExLCAzOSwgMjA4LCAxLCAxMjEsIDIzMiwgMTU2LCAzOSwgMjA4LCAxLCAxMjUsIDIzMiwgCi0gICAgMTU2LCAzOSwgMjA4LCAxLCAxMjEsIDIxMywgMTM4LCAzOSwgMjA4LCAxLCAxMjUsIDIxMywgMTM4LCAzOSwgMjA4LCAxLCAKLSAgICAxMjEsIDI0MSwgNjgsIDM5LCAyMDgsIDEsIDEyNSwgMjQxLCA2OCwgMzksIDIwOCwgMSwgMTIxLCA3NiwgMzksIDIwOCwgMSwgCi0gICAgMTI1LCA3NiwgMzksIDIwOCwgMjMxLCAyMDQsIDIzNCwgMjMwLCAzOSwgMjA4LCAyNSwgMjU1LCA3MywgMzksIDIwOCwgMjUsIAotICAgIDczLCAzOSwgMjA4LCAyNSwgMjE0LCAyMTQsIDM5LCAyMDgsIDI1LCA3MCwgMzksIDIwOCwgMjUsIDc1LCAzOSwgMjA4LCAyNSwgCi0gICAgNzYsIDM5LCAyMDgsIDIzMSwgMjA0LCAyMzQsIDEwOCwgMzksIDIwOCwgMjUsIDI0MCwgMTE5LCAzOSwgMjA4LCAyNSwgMjE0LCAKLSAgICAyMTMsIDM5LCAyMDgsIDI1LCAyMTQsIDIyOSwgMzksIDIwOCwgMjUsIDI1MywgMTkwLCAzOSwgMjA4LCAyNSwgMjUzLCAxNjcsIAotICAgIDM5LCAyMDgsIDI1LCAyNTQsIDEyMywgMzksIDIwOCwgMjUsIDI1NCwgMTM2LCAzOSwgMjA4LCAxMzgsIDIzMSwgMjA0LCAKLSAgICAyNDUsIDE4MCwgMzksIDIwOCwgMTM4LCAyMzEsIDIwNCwgMjI3LCAyMDYsIDM5LCAyMDgsIDEzOCwgMjMxLCAyMDQsIDIxNiwgCi0gICAgMTU2LCAzOSwgMjA4LCAxMzgsIDIzMSwgMjA0LCAyMTksIDQyLCAzOSwgMjA4LCAxNiwgMjM0LCAxMywgMzksIDIwOCwgMTYsIAotICAgIDIyNywgMjA2LCAzOSwgMjA4LCAxNiwgMjIxLCAyNTMsIDM5LCAyMDgsIDE2LCAyNDEsIDY5LCAyNDEsIDY0LCAzOSwgMjA4LCAKLSAgICAxNiwgMjM0LCAyMiwgMjM0LCAyMSwgMTg2LCAxODUsIDEsIDc1LCAxODYsIDE4NSwgMSwgNzYsIDE4NiwgMTg1LCAxLCAyNTAsIAotICAgIDE1NywgMTg2LCAxODUsIDEsIDIyNywgMTY1LCAxODYsIDE4NSwgMSwgMjE1LCAxNTYsIDE4NiwgMTg1LCAxLCAyMTUsIDE0NCwgCi0gICAgMTg2LCAxODUsIDEsIDI0OCwgMTM1LCAxODYsIDE4NSwgMSwgMjQ4LCAxMTksIDE4NiwgMTg1LCAxLCAyMjgsIDExMCwgMTg2LCAKLSAgICAxODUsIDEsIDIyMCwgMTAyLCAxODYsIDE4NSwgMSwgMjE4LCAyMjMsIDE4NiwgMTg1LCAyNSwgNSwgMjM2LCAzMywgMTg2LCAKLSAgICAxODUsIDI1LCA1LCAyMTQsIDExOCwgMTg2LCAxODUsIDI1LCA1LCAyNTUsIDM3LCAxODYsIDE4NSwgMjUsIDUsIDI1MywgCi0gICAgMTkyLCAxODYsIDE4NSwgMjUsIDUsIDI1NSwgMzAsIDE4NiwgMTg1LCAyNTAsIDEyNSwgMTg2LCAxODUsIDI1NCwgMjA2LCAKLSAgICAyMzQsIDk4LCAxODYsIDE4NSwgMjU0LCAxMDMsIDE4NiwgMTg1LCAzLCAyMjMsIDc0LCA3OCwgMTg2LCAxODUsIDIxMSwgCi0gICAgMjA5LCAyMjMsIDc0LCA3OCwgMTg2LCAxODUsIDI1LCA1LCAyMTMsIDE0NywgMTg2LCAxODUsIDIxMywgMTUyLCAyOSwgMywgCi0gICAgMjE1LCAxMzcsIDI5LCAzLCAyMTUsIDE0MCwgMjksIDMsIDIxNSwgMTQzLCAyOSwgMywgMjE1LCAxNDEsIDI5LCAzLCAyMTUsIAotICAgIDE0MiwgMjksIDMsIDIxNSwgMTM5LCAyOSwgMywgMjQ4LCAxMTMsIDI5LCAzLCAyNDgsIDExNSwgMjksIDMsIDI0OCwgMTE4LCAKLSAgICAyOSwgMywgMjQ4LCAxMTYsIDI5LCAzLCAyNDgsIDExNywgMjksIDMsIDI0OCwgMTE0LCAyOSwgMywgMjQ2LCAyOCwgMjksIDMsIAotICAgIDI0NiwgMzEsIDI5LCAzLCAyNDYsIDM3LCAyOSwgMywgMjQ2LCAzNSwgMjksIDMsIDI0NiwgMzYsIDI5LCAzLCAyNDYsIDI5LCAKLSAgICAyOSwgMywgMjUwLCAyMDQsIDI5LCAzLCAyNTAsIDE5OCwgMjksIDMsIDI1MCwgMjAwLCAyOSwgMywgMjUwLCAyMDMsIDI5LCAKLSAgICAzLCAyNTAsIDIwMSwgMjksIDMsIDI1MCwgMjAyLCAyOSwgMywgMjUwLCAxOTksIDI5LCAzLCAyNTIsIDExMSwgMjksIDMsIAotICAgIDI1MiwgOTAsIDI5LCAzLCAyNTIsIDEwMiwgMjksIDMsIDI1MiwgMTEwLCAyOSwgMywgMjUyLCAxMDUsIDI5LCAzLCAyNTIsIAotICAgIDEwNiwgMjksIDMsIDI1MiwgOTQsIDE4NiwgMTg1LCAxLCAyMzQsIDE5LCAxODYsIDE4NSwgMSwgMjIxLCAyNTMsIDE4NiwgCi0gICAgMTg1LCAxLCAyMzMsIDEwOSwgMTg2LCAxODUsIDEsIDIzMCwgMTcyLCAxODYsIDE4NSwgMSwgMTkwLCAxODYsIDE4NSwgMSwgCi0gICAgMTk3LCAxODYsIDE4NSwgMSwgMjUwLCAxMDIsIDE4NiwgMTg1LCAxLCAyMTYsIDkwLCAxODYsIDE4NSwgMSwgMjM0LCAxMDEsIAotICAgIDE4NiwgMTg1LCAxLCAyMjgsIDI1MCwgMTg2LCAxODUsIDEsIDIxNiwgMTUwLCAxODYsIDE4NSwgMSwgMjEyLCA2MCwgMTg2LCAKLSAgICAxODUsIDEsIDIxMSwgNjksIDE4NiwgMTg1LCAxLCAyNDAsIDIxNiwgMTg2LCAxODUsIDEsIDIxNCwgMTkwLCAxODYsIDE4NSwgCi0gICAgMSwgNzMsIDE4NiwgMTg1LCAxLCAyMjUsIDE0MiwgMTg2LCAxODUsIDEsIDI1MywgMjAyLCAxODYsIDE4NSwgMSwgMjQyLCAKLSAgICAxNjcsIDE4NiwgMTg1LCAxLCAyMzUsIDExMiwgMTg2LCAxODUsIDEsIDIyMywgMTY2LCAxODYsIDE4NSwgMSwgMjUyLCAxOTEsIAotICAgIDE4NiwgMTg1LCAxLCAyMzUsIDEwMCwgMTg2LCAxODUsIDEsIDI0NywgMjE5LCAxODYsIDE4NSwgMSwgMjQyLCAyMjEsIDE4NiwgCi0gICAgMTg1LCAxLCAyNDgsIDUsIDE4NiwgMTg1LCAxLCAyNTIsIDE2LCAxODYsIDE4NSwgMSwgMjM0LCAyMCwgMjMyLCAxMjgsIAotICAgIDE4NiwgMTg1LCAxLCAyMzMsIDExMCwgMjMyLCAxMjgsIDE4NiwgMTg1LCAxLCAyMzAsIDE3MywgMjMyLCAxMjgsIDE4NiwgCi0gICAgMTg1LCAxLCAyMjYsIDkwLCAyMzIsIDEyOCwgMTg2LCAxODUsIDEsIDIyOSwgMjI5LCAyMzIsIDEyOCwgMTg2LCAxODUsIDEsIAotICAgIDIxNiwgOTEsIDIzMiwgMTI4LCAxODYsIDE4NSwgMSwgMjI4LCAyNTEsIDIzMiwgMTI4LCAxODYsIDE4NSwgMSwgMjQwLCAKLSAgICAxNTQsIDIzMiwgMTI4LCAxODYsIDE4NSwgMjUsIDUsIDIyNiwgMTk1LCAxODYsIDE4NSwgMjUsIDUsIDIzNSwgMjUzLCAxODYsIAotICAgIDE4NSwgMjUsIDUsIDI1NCwgMTIyLCAxODYsIDE4NSwgMjUsIDUsIDIxMSwgMzgsIDE4NiwgMTg1LCAyNSwgNSwgMjE5LCAzMiwgCi0gICAgMTg2LCAxODUsIDI1LCA1LCAyMTQsIDE4NywgMTg2LCAxODUsIDI1LCA1LCAyNTAsIDEyMywgMTg2LCAxODUsIDI1LCA1LCAKLSAgICAyMjcsIDE5MSwgMTg2LCAxODUsIDI1MCwgMTI0LCAxODYsIDE4NSwgMjMyLCA4NSwgMjM1LCAxNTAsIDE4NiwgMTg1LCAyNTQsIAotICAgIDQ2LCAyMzUsIDE1MCwgMTg2LCAxODUsIDIxLCAyMTAsIDg2LCAxODYsIDE4NSwgMjEsIDExMCwgMTg2LCAxODUsIDIxLCAKLSAgICAxMDUsIDE4NiwgMTg1LCAyMSwgMTU4LCAxODYsIDE4NSwgMjEsIDE2MSwgMTg2LCAxODUsIDIxLCAxODksIDE4NiwgMTg1LCAKLSAgICAyMSwgMTk0LCAxODYsIDE4NSwgMjEsIDE5OCwgMTg2LCAxODUsIDIxLCAxOTUsIDE4NiwgMTg1LCAyMSwgMjAwLCAyNCwgCi0gICAgMTQzLCAyMjcsIDc3LCAyNCwgMTQzLCAyMjcsIDgyLCAyNCwgMTQzLCAyMTAsIDI0MywgMjQsIDE0MywgMjEwLCAyNDIsIDI0LCAKLSAgICAxNDMsIDIxMCwgMjQxLCAyNCwgMTQzLCAyMTUsIDIzLCAyNCwgMTQzLCAyMTUsIDI2LCAyNCwgMTQzLCAyMTAsIDIxMCwgMjQsIAotICAgIDE0MywgMjEwLCAyMDYsIDI0LCAxNDMsIDI0NSwgNTQsIDI0LCAxNDMsIDI0NSwgNTIsIDI0LCAxNDMsIDI0NSwgNTMsIDI0LCAKLSAgICAxNDMsIDI0NSwgNTAsIDI0LCAxNDMsIDI0MCwgMTQ0LCAyNCwgMTQzLCAyNDAsIDE0MywgMjQsIDE0MywgMjQwLCAxNDEsIAotICAgIDI0LCAxNDMsIDI0MCwgMTQyLCAyNCwgMTQzLCAyNDAsIDE0NywgMjQsIDE0MywgMjQwLCAxNDAsIDI0LCAxNDMsIDI0MCwgCi0gICAgMTM5LCAyNCwgMTQzLCAyNDAsIDE0OSwgMjQsIDE0MywgMjU0LCAzMywgMjQsIDE0MywgMjU0LCAzMiwgMjQsIDkwLCAyMjgsIAotICAgIDIxOSwgMjQsIDkwLCAyMjgsIDIyNSwgMjQsIDkwLCAyMTgsIDIwNCwgMjQsIDkwLCAyMTgsIDIwMywgMjQsIDkwLCAyMTYsIAotICAgIDk2LCAyNCwgOTAsIDIxNiwgOTQsIDI0LCA5MCwgMjE2LCA5MywgMjQsIDkwLCAyMTYsIDk5LCAyNCwgOTAsIDIxNiwgMTAwLCAKLSAgICAyNCwgOTAsIDIxNiwgOTIsIDI0LCA5MCwgMjIzLCA1LCAyNCwgOTAsIDIyMywgMjAsIDI0LCA5MCwgMjE4LCAyMTAsIDI0LCAKLSAgICA5MCwgMjIzLCAxNywgMjQsIDkwLCAyMjMsIDcsIDI0LCA5MCwgMjIzLCA5LCAyNCwgOTAsIDIyMiwgMjUyLCAyNCwgOTAsIAotICAgIDIyMiwgMjUzLCAyNCwgOTAsIDIzNCwgMjE4LCAyNCwgOTAsIDIzMCwgMjEyLCAyNCwgOTAsIDIzMCwgMjA2LCAyNCwgOTAsIAotICAgIDIxOCwgMjE0LCAyNCwgOTAsIDIzMCwgMjA5LCAyNCwgOTAsIDIzMCwgMjE1LCAyNCwgOTAsIDIyNSwgNzYsIDI0LCA5MCwgCi0gICAgMjI1LCA4NSwgMjQsIDkwLCAyMjUsIDg5LCAyNCwgOTAsIDIxOCwgMjEyLCAyNCwgOTAsIDIyNSwgNzksIDI0LCA5MCwgMjI1LCAKLSAgICA5MywgMjQsIDkwLCAyMjUsIDk0LCAyNCwgOTAsIDIxOSwgMTQwLCAyNCwgOTAsIDIxOSwgMTQzLCAyNCwgOTAsIDIxOCwgCi0gICAgMjA4LCAyNCwgOTAsIDIxOCwgMjA2LCAyNCwgOTAsIDIxOSwgMTM4LCAyNCwgOTAsIDIxOSwgMTQ2LCAyNCwgOTAsIDIxOSwgCi0gICAgMTQ3LCAyNCwgOTAsIDIxOSwgMTMyLCAyNCwgOTAsIDIxOSwgMTQ1LCAyNCwgOTAsIDIyNiwgMzAsIDI0LCA5MCwgMjI2LCAKLSAgICAzMSwgMjQsIDkwLCAyMTEsIDI0LCAyNCwgOTAsIDIxMSwgMjUsIDI0LCA5MCwgMjUwLCA0NCwgMjQsIDkwLCAyNTAsIDQzLCAKLSAgICAyNCwgOTAsIDIxOCwgMjE5LCAyNCwgOTAsIDIyNSwgMTI4LCAyNCwgOTAsIDIyNSwgMTI3LCA5LCAxNCwgMjM4LCAyNCwgOSwgCi0gICAgMTQsIDIzOCwgMjMsIDksIDE0LCAyMzgsIDIyLCA5LCAxNCwgMjM4LCAyMSwgOSwgMTQsIDIzOCwgMjAsIDksIDE0LCAyMzgsIAotICAgIDE5LCA5LCAxNCwgMjM4LCAxOCwgOSwgMTQsIDIzOCwgMTcsIDksIDE0LCAyMzgsIDE2LCA5LCAxNCwgMjM4LCAxNSwgOSwgCi0gICAgMTQsIDIzOCwgMTQsIDksIDE0LCAyMzgsIDEzLCA5LCAxNCwgMjM4LCAxMiwgOSwgMTQsIDIzOCwgMTEsIDksIDE0LCAyMzgsIAotICAgIDEwLCA5LCAxNCwgMjM4LCA5LCA5LCAxNCwgMjM4LCA4LCA5LCAxNCwgMjM4LCA3LCA5LCAxNCwgMjM4LCA2LCA5LCAxNCwgCi0gICAgMjM4LCA1LCA5LCAxNCwgMjM4LCA0LCA5LCAxNCwgMjM4LCAzLCA5LCAxNCwgMjM4LCAyLCA5LCAxNCwgMjM4LCAxLCA5LCAKLSAgICAxNCwgMjM4LCAwLCA5LCAxNCwgMjM3LCAyNTUsIDksIDE0LCAyMzcsIDI1NCwgOSwgMTQsIDIzNywgMjUzLCA5LCAxNCwgCi0gICAgMjM3LCAyNTIsIDksIDE0LCAyMzcsIDI1MSwgOSwgMTQsIDIzNywgMjUwLCA5LCAxNCwgMjM3LCAyNDksIDksIDE0LCAyMzcsIAotICAgIDI0OCwgOSwgMTQsIDIzNywgMjQ3LCA5LCAxNCwgMjM3LCAyNDYsIDksIDE0LCAyMzcsIDI0NSwgOSwgMTQsIDIzNywgMjQ0LCAKLSAgICA5LCAxNCwgMjM3LCAyNDMsIDksIDE0LCAyMzcsIDI0MiwgOSwgMTQsIDIzNywgMjQxLCA5LCAxNCwgMjM3LCAyNDAsIDksIAotICAgIDE0LCAyMzcsIDIzOSwgOSwgMTQsIDIzNywgMjM4LCA5LCAxNCwgMjM3LCAyMzcsIDksIDE0LCAyMzcsIDIzNiwgOSwgMTQsIAotICAgIDIzNywgMjM1LCA5LCAxNCwgMjM3LCAyMzQsIDksIDE0LCAyMzcsIDIzMywgOSwgMTQsIDIzNywgMjMyLCA5LCAxNCwgMjM3LCAKLSAgICAyMzEsIDksIDE0LCAyMzcsIDIzMCwgOSwgMTQsIDIzNywgMjI5LCA5LCAxNCwgMjM3LCAyMjgsIDksIDE0LCAyMzcsIDIyNywgCi0gICAgOSwgMTQsIDIzNywgMjI2LCA5LCAxNCwgMjM3LCAyMjUsIDksIDE0LCAyMzcsIDIyNCwgOSwgMTQsIDIzNywgMjIzLCA5LCAKLSAgICAxNCwgMjM3LCAyMjIsIDksIDE0LCAyMzcsIDIyMSwgOSwgMTQsIDIzNywgMjIwLCA5LCAxNCwgMjM3LCAyMTksIDksIDE0LCAKLSAgICAyMzcsIDIxOCwgOSwgMTQsIDIzNywgMjE3LCA5LCAxNCwgMjM3LCAyMTYsIDksIDE0LCAyMzcsIDIxNSwgOSwgMTQsIDIzNywgCi0gICAgMjE0LCA5LCAxNCwgMjM3LCAyMTMsIDksIDE0LCAyMzcsIDIxMiwgOSwgMTQsIDIzNywgMjExLCA5LCAxNCwgMjM3LCAyMTAsIAotICAgIDksIDE0LCAyMzcsIDIwOSwgOSwgMTQsIDIzNywgMjA4LCA5LCAxNCwgMjM3LCAyMDcsIDksIDE0LCAyMzcsIDIwNiwgOSwgCi0gICAgMTQsIDIzNywgMjA1LCA5LCAxNCwgMjM3LCAyMDQsIDksIDE0LCAyMzcsIDIwMywgOSwgMTQsIDIzNywgMjAyLCA5LCAxNCwgCi0gICAgMjM3LCAyMDEsIDksIDE0LCAyMzcsIDIwMCwgOSwgMTQsIDIzNywgMTk5LCA5LCAxNCwgMjM3LCAxOTgsIDksIDE0LCAyMzcsIAotICAgIDE5NywgOSwgMTQsIDIzNywgMTk2LCA5LCAxNCwgMjM3LCAxOTUsIDksIDE0LCAyMzcsIDE5NCwgOSwgMTQsIDIzNywgMTkzLCAKLSAgICA5LCAxNCwgMjM3LCAxOTIsIDksIDE0LCAyMzcsIDE5MSwgOSwgMTQsIDIzNywgMTkwLCA5LCAxNCwgMjM3LCAxODksIDksIAotICAgIDE0LCAyMzcsIDE4OCwgOSwgMTQsIDIzNywgMTg3LCA5LCAxNCwgMjM3LCAxODYsIDksIDE0LCAyMzcsIDE4NSwgOSwgMTQsIAotICAgIDIzNywgMTg0LCA5LCAxNCwgMjM3LCAxODMsIDksIDE0LCAyMzcsIDE4MiwgOSwgMTQsIDIzNywgMTgxLCA5LCAxNCwgMjM3LCAKLSAgICAxODAsIDksIDE0LCAyMzcsIDE3OSwgOSwgMTQsIDIzNywgMTc4LCA5LCAxNCwgMjM3LCAxNzcsIDksIDE0LCAyMzcsIDE3NiwgCi0gICAgOSwgMTQsIDIzNywgMTc1LCA5LCAxNCwgMjM3LCAxNzQsIDksIDE0LCAyMzcsIDE3MywgOSwgMTQsIDIzNywgMTcyLCA5LCAKLSAgICAxNCwgMjM3LCAxNzEsIDksIDE0LCAyMzcsIDE3MCwgOSwgMTQsIDIzNywgMTY5LCA5LCAxNCwgMjM3LCAxNjgsIDksIDE0LCAKLSAgICAyMzcsIDE2NywgOSwgMTQsIDIzNywgMTY2LCA5LCAxNCwgMjM3LCAxNjUsIDksIDE0LCAyMzcsIDE2NCwgOSwgMTQsIDIzNywgCi0gICAgMTYzLCA5LCAxNCwgMjM3LCAxNjIsIDksIDE0LCAyMzcsIDE2MSwgOSwgMTQsIDIzNywgMTYwLCA5LCAxNCwgMjM3LCAxNTksIAotICAgIDksIDE0LCAyMzcsIDE1OCwgOSwgMTQsIDIzNywgMTU3LCA5LCAxNCwgMjM3LCAxNTYsIDksIDE0LCAyMzcsIDE1NSwgOSwgCi0gICAgMTQsIDIzNywgMTU0LCA5LCAxNCwgMjM3LCAxNTMsIDksIDE0LCAyMzcsIDE1MiwgOSwgMTQsIDIzNywgMTUxLCA5LCAxNCwgCi0gICAgMjM3LCAxNTAsIDksIDE0LCAyMzcsIDE0OSwgOSwgMTQsIDIzNywgMTQ4LCA5LCAxNCwgMjM3LCAxNDcsIDksIDE0LCAyMzcsIAotICAgIDE0NiwgOSwgMTQsIDIzNywgMTQ1LCA5LCAxNCwgMjM3LCAxNDQsIDksIDE0LCAyMzcsIDE0MywgOSwgMTQsIDIzNywgMTQyLCAKLSAgICA5LCAxNCwgMjM3LCAxNDEsIDksIDE0LCAyMzcsIDE0MCwgOSwgMTQsIDIzNywgMTM5LCA5LCAxNCwgMjM3LCAxMzgsIDksIAotICAgIDE0LCAyMzcsIDEzNywgOSwgMTQsIDIzNywgMTM2LCA5LCAxNCwgMjM3LCAxMzUsIDksIDE0LCAyMzcsIDEzNCwgOSwgMTQsIAotICAgIDIzNywgMTMzLCA5LCAxNCwgMjM3LCAxMzIsIDksIDE0LCAyMzcsIDEzMSwgOSwgMTQsIDIzNywgMTMwLCA5LCAxNCwgMjM3LCAKLSAgICAxMjksIDksIDE0LCAyMzcsIDEyOCwgOSwgMTQsIDIzNywgMTI3LCA5LCAxNCwgMjM3LCAxMjYsIDksIDE0LCAyMzcsIDEyNSwgCi0gICAgOSwgMTQsIDIzNywgMTI0LCA5LCAxNCwgMjM3LCAxMjMsIDksIDE0LCAyMzcsIDEyMiwgOSwgMTQsIDIzNywgMTIxLCA5LCAKLSAgICAxNCwgMjM3LCAxMjAsIDksIDE0LCAyMzcsIDExOSwgOSwgMTQsIDIzNywgMTE4LCA5LCAxNCwgMjM3LCAxMTcsIDksIDE0LCAKLSAgICAyMzcsIDExNiwgOSwgMTQsIDIzNywgMTE1LCA5LCAxNCwgMjM3LCAxMTQsIDksIDE0LCAyMzcsIDExMywgOSwgMTQsIDIzNywgCi0gICAgMTEyLCA5LCAxNCwgMjM3LCAxMTEsIDksIDE0LCAyMzcsIDExMCwgOSwgMTQsIDIzNywgMTA5LCA5LCAxNCwgMjM3LCAxMDgsIAotICAgIDksIDE0LCAyMzcsIDEwNywgOSwgMTQsIDIzNywgMTA2LCA5LCAxNCwgMjM3LCAxMDUsIDksIDE0LCAyMzcsIDEwNCwgOSwgCi0gICAgMTQsIDIzNywgMTAzLCA5LCAxNCwgMjM3LCAxMDIsIDksIDE0LCAyMzcsIDEwMSwgOSwgMTQsIDIzNywgMTAwLCA5LCAxNCwgCi0gICAgMjM3LCA5OSwgOSwgMTQsIDIzNywgOTgsIDksIDE0LCAyMzcsIDk3LCA5LCAxNCwgMjM3LCA5NiwgOSwgMTQsIDIzNywgOTUsIAotICAgIDksIDE0LCAyMzcsIDk0LCA5LCAxNCwgMjM3LCA5MywgOSwgMTQsIDIzNywgOTIsIDksIDE0LCAyMzcsIDkxLCA5LCAxNCwgCi0gICAgMjM3LCA5MCwgOSwgMTQsIDIzNywgODksIDksIDE0LCAyMzcsIDg4LCA5LCAxNCwgMjM3LCA4NywgOSwgMTQsIDIzNywgODYsIAotICAgIDksIDE0LCAyMzcsIDg1LCA5LCAxNCwgMjM3LCA4NCwgOSwgMTQsIDIzNywgODMsIDksIDE0LCAyMzcsIDgyLCA5LCAxNCwgCi0gICAgMjM3LCA4MSwgOSwgMTQsIDIzNywgODAsIDksIDE0LCAyMzcsIDc5LCA5LCAxNCwgMjM3LCA3OCwgOSwgMTQsIDIzNywgNzcsIAotICAgIDksIDE0LCAyMzcsIDc2LCA5LCAxNCwgMjM3LCA3NSwgOSwgMTQsIDIzNywgNzQsIDksIDE0LCAyMzcsIDczLCA5LCAxNCwgCi0gICAgMjM3LCA3MiwgOSwgMTQsIDIzNywgNzEsIDksIDE0LCAyMzcsIDcwLCA5LCAxNCwgMjM3LCA2OSwgOSwgMTQsIDIzNywgNjgsIAotICAgIDksIDE0LCAyMzcsIDY3LCA5LCAxNCwgMjM3LCA2NiwgOSwgMTQsIDIzNywgNjUsIDksIDE0LCAyMzcsIDY0LCA5LCAxNCwgCi0gICAgMjM3LCA2MywgOSwgMTQsIDIzNywgNjIsIDksIDE0LCAyMzcsIDYxLCA5LCAxNCwgMjM3LCA2MCwgOSwgMTQsIDIzNywgNTksIAotICAgIDksIDE0LCAyMzcsIDU4LCA5LCAxNCwgMjM3LCA1NywgOSwgMTQsIDIzNywgNTYsIDksIDE0LCAyMzcsIDU1LCA5LCAxNCwgCi0gICAgMjM3LCA1NCwgOSwgMTQsIDIzNywgNTMsIDksIDE0LCAyMzcsIDUyLCA5LCAxNCwgMjM3LCA1MSwgOSwgMTQsIDIzNywgNTAsIAotICAgIDksIDE0LCAyMzcsIDQ5LCA5LCAxNCwgMjM3LCA0OCwgOSwgMTQsIDIzNywgNDcsIDksIDE0LCAyMzcsIDQ2LCA5LCAxNCwgCi0gICAgMjM3LCA0NSwgOSwgMTQsIDIzNywgNDQsIDksIDE0LCAyMzcsIDQzLCA5LCAxNCwgMjM3LCA0MiwgOSwgMTQsIDIzNywgNDEsIAotICAgIDksIDE0LCAyMzcsIDQwLCA5LCAxNCwgMjM3LCAzOSwgOSwgMTQsIDIzNywgMzgsIDksIDE0LCAyMzcsIDM3LCA5LCAxNCwgCi0gICAgMjM3LCAzNiwgOSwgMTQsIDIzNywgMzUsIDksIDE0LCAyMzcsIDM0LCA5LCAxNCwgMjM3LCAzMywgOSwgMTQsIDIzNywgMzIsIAotICAgIDksIDE0LCAyMzcsIDMxLCA5LCAxNCwgMjM3LCAzMCwgOSwgMTQsIDIzNywgMjksIDksIDE0LCAyMzcsIDI4LCA5LCAxNCwgCi0gICAgMjM3LCAyNywgOSwgMTQsIDIzNywgMjYsIDksIDE0LCAyMzcsIDI1LCA5LCAxNCwgMjM3LCAyNCwgOSwgMTQsIDIzNywgMjMsIAotICAgIDksIDE0LCAyMzcsIDIyLCA5LCAxNCwgMjM3LCAyMSwgOSwgMTQsIDIzNywgMjAsIDksIDE0LCAyMzcsIDE5LCA5LCAxNCwgCi0gICAgMjM3LCAxOCwgOSwgMTQsIDIzNywgMTcsIDksIDE0LCAyMzcsIDE2LCA5LCAxNCwgMjM3LCAxNSwgOSwgMTQsIDIzNywgMTQsIAotICAgIDksIDE0LCAyMzcsIDEzLCA5LCAxNCwgMjM3LCAxMiwgOSwgMTQsIDIzNywgMTEsIDksIDE0LCAyMzcsIDEwLCA5LCAxNCwgCi0gICAgMjM3LCA5LCA5LCAxNCwgMjM3LCA4LCA5LCAxNCwgMjM3LCA3LCA5LCAxNCwgMjM3LCA2LCA5LCAxNCwgMjM3LCA1LCA5LCAKLSAgICAxNCwgMjM3LCA0LCA5LCAxNCwgMjM3LCAzLCA5LCAxNCwgMjM3LCAyLCA5LCAxNCwgMjM3LCAxLCA5LCAxNCwgMjM3LCAwLCAKLSAgICA5LCAxNCwgMjM2LCAyNTUsIDksIDE0LCAyMzYsIDI1NCwgOSwgMTQsIDIzNiwgMjUzLCA5LCAxNCwgMjM2LCAyNTIsIDksIAotICAgIDE0LCAyMzYsIDI1MSwgOSwgMTQsIDIzNiwgMjUwLCA5LCAxNCwgMjM2LCAyNDksIDksIDE0LCAyMzYsIDI0OCwgOSwgMTQsIAotICAgIDIzNiwgMjQ3LCA5LCAxNCwgMjM2LCAyNDYsIDksIDE0LCAyMzYsIDI0NSwgOSwgMTQsIDIzNiwgMjQ0LCA5LCAxNCwgMjM2LCAKLSAgICAyNDMsIDksIDE0LCAyMzYsIDI0MiwgOSwgMTQsIDIzNiwgMjQxLCA5LCAxNCwgMjM2LCAyNDAsIDksIDE0LCAyMzYsIDIzOSwgCi0gICAgOSwgMTQsIDIzNiwgMjM4LCA5LCAxNCwgMjM2LCAyMzcsIDksIDE0LCAyMzYsIDIzNiwgOSwgMTQsIDIzNiwgMjM1LCA5LCAKLSAgICAxNCwgMjM2LCAyMzQsIDksIDE0LCAyMzYsIDIzMywgOSwgMTQsIDIzNiwgMjMyLCA5LCAxNCwgMjM2LCAyMzEsIDksIDE0LCAKLSAgICAyMzYsIDIzMCwgOSwgMTQsIDIzNiwgMjI5LCA5LCAxNCwgMjM2LCAyMjgsIDksIDE0LCAyMzYsIDIyNywgOSwgMTQsIDIzNiwgCi0gICAgMjI2LCA5LCAxNCwgMjM2LCAyMjUsIDksIDE0LCAyMzYsIDIyNCwgOSwgMTQsIDIzNiwgMjIzLCA5LCAxNCwgMjM2LCAyMjIsIAotICAgIDksIDE0LCAyMzYsIDIyMSwgOSwgMTQsIDIzNiwgMjIwLCA5LCAxNCwgMjM2LCAyMTksIDksIDE0LCAyMzYsIDIxOCwgOSwgCi0gICAgMTQsIDIzNiwgMjE3LCA5LCAxNCwgMjM2LCAyMTYsIDksIDE0LCAyMzYsIDIxNSwgOSwgMTQsIDIzNiwgMjE0LCA5LCAxNCwgCi0gICAgMjM2LCAyMTMsIDksIDE0LCAyMzYsIDIxMiwgOSwgMTQsIDIzNiwgMjExLCA5LCAxNCwgMjM2LCAyMTAsIDksIDE0LCAyMzYsIAotICAgIDIwOSwgOSwgMTQsIDIzNiwgMjA4LCA5LCAxNCwgMjM2LCAyMDcsIDksIDE0LCAyMzYsIDIwNiwgOSwgMTQsIDIzNiwgMjA1LCAKLSAgICA5LCAxNCwgMjM2LCAyMDQsIDksIDE0LCAyMzYsIDIwMywgOSwgMTQsIDIzNiwgMjAyLCA5LCAxNCwgMjM2LCAyMDEsIDksIAotICAgIDE0LCAyMzYsIDIwMCwgOSwgMTQsIDIzNiwgMTk5LCA5LCAxNCwgMjM2LCAxOTgsIDksIDE0LCAyMzYsIDE5NywgOSwgMTQsIAotICAgIDIzNiwgMTk2LCA5LCAxNCwgMjM2LCAxOTUsIDksIDE0LCAyMzYsIDE5NCwgOSwgMTQsIDIzNiwgMTkzLCA5LCAxNCwgMjM2LCAKLSAgICAxOTIsIDksIDE0LCAyMzYsIDE5MSwgOSwgMTQsIDIzNiwgMTkwLCA5LCAxNCwgMjM2LCAxODksIDksIDE0LCAyMzYsIDE4OCwgCi0gICAgOSwgMTQsIDIzNiwgMTg3LCA5LCAxNCwgMjM2LCAxODYsIDksIDE0LCAyMzYsIDE4NSwgOSwgMTQsIDIzNiwgMTg0LCA5LCAKLSAgICAxNCwgMjM2LCAxODMsIDksIDE0LCAyMzYsIDE4MiwgOSwgMTQsIDIzNiwgMTgxLCA5LCAxNCwgMjM2LCAxODAsIDksIDE0LCAKLSAgICAyMzYsIDE3OSwgOSwgMTQsIDIzNiwgMTc4LCA5LCAxNCwgMjM2LCAxNzcsIDksIDE0LCAyMzYsIDE3NiwgOSwgMTQsIDIzNiwgCi0gICAgMTc1LCA5LCAxNCwgMjM2LCAxNzQsIDksIDE0LCAyMzYsIDE3MywgOSwgMTQsIDIzNiwgMTcyLCA5LCAxNCwgMjM2LCAxNzEsIAotICAgIDksIDE0LCAyMzYsIDE3MCwgOSwgMTQsIDIzNiwgMTY5LCA5LCAxNCwgMjM2LCAxNjgsIDksIDE0LCAyMzYsIDE2NywgOSwgCi0gICAgMTQsIDIzNiwgMTY2LCA5LCAxNCwgMjM2LCAxNjUsIDksIDE0LCAyMzYsIDE2NCwgOSwgMTQsIDIzNiwgMTYzLCA5LCAxNCwgCi0gICAgMjM2LCAxNjIsIDksIDE0LCAyMzYsIDE2MSwgOSwgMTQsIDIzNiwgMTYwLCA5LCAxNCwgMjM2LCAxNTksIDksIDE0LCAyMzYsIAotICAgIDE1OCwgOSwgMTQsIDIzNiwgMTU3LCA5LCAxNCwgMjM2LCAxNTYsIDksIDE0LCAyMzYsIDE1NSwgOSwgMTQsIDIzNiwgMTU0LCAKLSAgICA5LCAxNCwgMjM2LCAxNTMsIDksIDE0LCAyMzYsIDE1MiwgOSwgMTQsIDIzNiwgMTUxLCA5LCAxNCwgMjM2LCAxNTAsIDksIAotICAgIDE0LCAyMzYsIDE0OSwgOSwgMTQsIDIzNiwgMTQ4LCA5LCAxNCwgMjM2LCAxNDcsIDksIDE0LCAyMzYsIDE0NiwgOSwgMTQsIAotICAgIDIzNiwgMTQ1LCA5LCAxNCwgMjM2LCAxNDQsIDksIDE0LCAyMzYsIDE0MywgOSwgMTQsIDIzNiwgMTQyLCA5LCAxNCwgMjM2LCAKLSAgICAxNDEsIDksIDE0LCAyMzYsIDE0MCwgOSwgMTQsIDIzNiwgMTM5LCA5LCAxNCwgMjM2LCAxMzgsIDksIDE0LCAyMzYsIDEzNywgCi0gICAgOSwgMTQsIDIzNiwgMTM2LCA5LCAxNCwgMjM2LCAxMzUsIDksIDE0LCAyMzYsIDEzNCwgOSwgMTQsIDIzNiwgMTMzLCA5LCAKLSAgICAxNCwgMjM2LCAxMzIsIDksIDE0LCAyMzYsIDEzMSwgOSwgMTQsIDIzNiwgMTMwLCA5LCAxNCwgMjM2LCAxMjksIDksIDE0LCAKLSAgICAyMzYsIDEyOCwgOSwgMTQsIDIzNiwgMTI3LCA5LCAxNCwgMjM2LCAxMjYsIDksIDE0LCAyMzYsIDEyNSwgOSwgMTQsIDIzNiwgCi0gICAgMTI0LCA5LCAxNCwgMjM2LCAxMjMsIDksIDE0LCAyMzYsIDEyMiwgOSwgMTQsIDIzNiwgMTIxLCA5LCAxNCwgMjM2LCAxMjAsIAotICAgIDksIDE0LCAyMzYsIDExOSwgOSwgMTQsIDIzNiwgMTE4LCA5LCAxNCwgMjM2LCAxMTcsIDksIDE0LCAyMzYsIDExNiwgOSwgCi0gICAgMTQsIDIzNiwgMTE1LCA5LCAxNCwgMjM2LCAxMTQsIDksIDE0LCAyMzYsIDExMywgOSwgMTQsIDIzNiwgMTEyLCA5LCAxNCwgCi0gICAgMjM2LCAxMTEsIDksIDE0LCAyMzYsIDExMCwgOSwgMTQsIDIzNiwgMTA5LCA5LCAxNCwgMjM2LCAxMDgsIDksIDE0LCAyMzYsIAotICAgIDEwNywgOSwgMTQsIDIzNiwgMTA2LCA5LCAxNCwgMjM2LCAxMDUsIDksIDE0LCAyMzYsIDEwNCwgOSwgMTQsIDIzNiwgMTAzLCAKLSAgICA5LCAxNCwgMjM2LCAxMDIsIDksIDE0LCAyMzYsIDEwMSwgOSwgMTQsIDIzNiwgMTAwLCA5LCAxNCwgMjM2LCA5OSwgOSwgMTQsIAotICAgIDIzNiwgOTgsIDksIDE0LCAyMzYsIDk3LCA5LCAxNCwgMjM2LCA5NiwgOSwgMTQsIDIzNiwgOTUsIDksIDE0LCAyMzYsIDk0LCAKLSAgICA5LCAxNCwgMjM2LCA5MywgOSwgMTQsIDIzNiwgOTIsIDksIDE0LCAyMzYsIDkxLCA5LCAxNCwgMjM2LCA5MCwgOSwgMTQsIAotICAgIDIzNiwgODksIDksIDE0LCAyMzYsIDg4LCA5LCAxNCwgMjM2LCA4NywgOSwgMTQsIDIzNiwgODYsIDksIDE0LCAyMzYsIDg1LCAKLSAgICA5LCAxNCwgMjM2LCA4NCwgOSwgMTQsIDIzNiwgODMsIDksIDE0LCAyMzYsIDgyLCA5LCAxNCwgMjM2LCA4MSwgOSwgMTQsIAotICAgIDIzNiwgODAsIDksIDE0LCAyMzYsIDc5LCA5LCAxNCwgMjM2LCA3OCwgOSwgMTQsIDIzNiwgNzcsIDksIDE0LCAyMzYsIDc2LCAKLSAgICA5LCAxNCwgMjM2LCA3NSwgOSwgMTQsIDIzNiwgNzQsIDksIDE0LCAyMzYsIDczLCA5LCAxNCwgMjM2LCA3MiwgOSwgMTQsIAotICAgIDIzNiwgNzEsIDksIDE0LCAyMzYsIDcwLCA5LCAxNCwgMjM2LCA2OSwgOSwgMTQsIDIzNiwgNjgsIDksIDE0LCAyMzYsIDY3LCAKLSAgICA5LCAxNCwgMjM2LCA2NiwgOSwgMTQsIDIzNiwgNjUsIDcsIDQsIDI3LCAyNDQsIDEyNSwgNywgNCwgMjcsIDI0NCwgMTIxLCAKLSAgICA3LCA0LCAyNywgMjQ0LCA3NiwgNywgNCwgMjcsIDI0NCwgMTI0LCA3LCA0LCAyNywgMjQ0LCAxMjMsIDcsIDQsIDI3LCAxOTksIAotICAgIDIyMiwgOTIsIDIxNywgMTUyLCA3LCA0LCAyNywgMjE4LCAxNjgsIDE1MCwgNCwgMjcsIDIzMSwgNTksIDIyOCwgMzksIDE1MCwgCi0gICAgNCwgMjcsIDIzMSwgNTksIDI0NSwgMjEzLCAxNTAsIDQsIDI3LCAyMzEsIDU5LCAyMzUsIDIyNywgMTUwLCA0LCAyNywgMjEzLCAKLSAgICAxODAsIDIyOCwgMzksIDE1MCwgNCwgMjcsIDIzMSwgNTksIDIxMSwgMTYwLCA5NCwgMSwgMjEwLCAyMzQsIDIsIDI0MSwgCi0gICAgMTU4LCA5NCwgMjI1LCAxMSwgMjM1LCA1MCwgMjE0LCAxMSwgOTQsIDI3LCAyMTEsIDYsIDIxMCwgMjM0LCAyMTAsIDIzNCwgCi0gICAgMjI1LCAyMzksIDk0LCAxLCAyNTQsIDEzOSwgMjUzLCAxNjIsIDk0LCAxLCAyMTEsIDI0NywgMjU0LCAxNzAsIDk0LCAxLCAKLSAgICAyMTEsIDI0NywgMjQ4LCAxODksIDk0LCAxLCAyMTEsIDI0NywgMjQxLCAyMzgsIDk0LCAxLCAyMTEsIDI0NywgMjM0LCAyNTAsIAotICAgIDk0LCAxLCAyMTEsIDI0NywgMjMzLCA5NCwgOTQsIDEsIDIxMSwgMjQ3LCA0MCwgMjMxLCA2NSwgOTQsIDEsIDIxMSwgMjQ3LCAKLSAgICAyMjMsIDY3LCA5NCwgMSwgMjExLCAyNDcsIDIxNywgMzgsIDk0LCAxLCAyNTQsIDEzOSwgOTYsIDUwLCA5NCwgMSwgMjIwLCAKLSAgICAyMSwgMiwgMjIwLCAyMSwgMjQ3LCAxMjAsIDk0LCAxLCAyMjAsIDIxLCAyLCAyMTksIDE1OSwgMjQ3LCAxMjAsIDk0LCAxLCAKLSAgICAyMjAsIDIxLCAyLCAyNDgsIDIwOCwgMjIsIDIyMCwgMjEsIDI0NywgMTIwLCA5NCwgMSwgMjIwLCAyMSwgMiwgMjQ4LCAyMDgsIAotICAgIDIyLCAyMTksIDE1OSwgMjQ3LCAxMjAsIDk0LCAxLCAxMTIsIDIsIDIyNSwgMjM5LCA5NCwgMSwgMTEyLCAyLCAyMjQsIDc2LCAKLSAgICA5NCwgMSwgMTEyLCAyLCAyMzEsIDE3MSwgOTQsIDEsIDI1MiwgMjksIDIsIDI0OCwgMjA3LCA5NCwgMSwgMjQyLCAyMDIsIDIsIAotICAgIDI0OCwgMjA3LCA5NCwgMSwgMjQ4LCAxOTAsIDIsIDI0OCwgMjA3LCA5NCwgMSwgMjQxLCAyMzksIDIsIDIzMSwgMTcxLCA5NCwgCi0gICAgMSwgMjE0LCA0LCAyLCAyNDgsIDIwNywgOTQsIDEsIDIxMCwgOTgsIDIsIDI0OCwgMjA3LCA5NCwgMSwgMjE2LCAyMzEsIDIsIAotICAgIDI0OCwgMjA3LCA5NCwgMSwgMjEwLCAyMzQsIDIsIDI0OCwgMjA3LCA5NCwgMSwgNDAsIDIzNCwgMjUxLCAyLCAyNDgsIDIwNywgCi0gICAgOTQsIDEsIDIzNCwgMjUxLCAyLCAyNDgsIDIwNywgOTQsIDEsIDIzMywgOTUsIDIsIDI0OCwgMjA3LCA5NCwgMSwgMjMxLCAKLSAgICA2NiwgMiwgMjQ4LCAyMDcsIDk0LCAxLCAyMjcsIDE5NSwgMiwgMjQ4LCAyMDcsIDk0LCAxLCAyMjEsIDI1MCwgMiwgMjQ4LCAKLSAgICAyMDcsIDk0LCAxLCA0MCwgMjI1LCAyMjIsIDIsIDI0OCwgMjA3LCA5NCwgMSwgMjI1LCAyMjIsIDIsIDI0OCwgMjA3LCA5NCwgCi0gICAgMSwgMjE1LCAxODAsIDIsIDI0OCwgMjA3LCA5NCwgMSwgMjI0LCA0MCwgMiwgMjQ4LCAyMDcsIDk0LCAxLCAyMjMsIDY4LCAyLCAKLSAgICAyNDgsIDIwNywgOTQsIDEsIDIyMCwgMjEsIDIsIDI0OCwgMjA3LCA5NCwgMSwgMjE3LCAzOSwgMiwgMjQ4LCAyMDcsIDk0LCAKLSAgICAxLCAyMTQsIDQsIDIsIDI0MSwgNjEsIDk0LCAxLCAyNTIsIDI5LCAyLCAyMjMsIDE2OSwgOTQsIDEsIDIzNCwgMjUxLCAyLCAKLSAgICAyMjMsIDE2OSwgOTQsIDEsIDIyNSwgMjIyLCAyLCAyMjMsIDE2OSwgOTQsIDI3LCAxMTIsIDIzMywgOTQsIDEwLCAxLCAxMTIsIAotICAgIDIxMiwgNDcsIDUzLCAxNywgMTAsIDEsIDExMiwgMjEyLCA0NywgNDAsIDE3LCAxMCwgMSwgMjUyLCA2NSwgNTMsIDE3LCAxMCwgCi0gICAgMSwgMjUyLCA2NSwgNDAsIDE3LCAxMCwgMSwgMjUyLCA2NSwgNjUsIDE3LCAxMCwgMSwgMjUyLCA2NSwgMTQ3LCAxNywgMTAsIAotICAgIDEsIDIyNSwgMjA2LCA1MywgMTcsIDEwLCAxLCAyMjUsIDIwNiwgNDAsIDE3LCAxMCwgMSwgMjI1LCAyMDYsIDY1LCAxNywgCi0gICAgMTAsIDEsIDIyNSwgMjA2LCAxNDcsIDE3LCAxMCwgMSwgMjUyLCA1MywgNTMsIDE3LCAxMCwgMSwgMjUyLCA1MywgNDAsIDE3LCAKLSAgICAxMCwgMSwgMjUyLCA1MywgNjUsIDE3LCAxMCwgMSwgMjUyLCA1MywgMTQ3LCAxNywgMTAsIDEsIDIxNSwgMTQ3LCA1MywgMTcsIAotICAgIDEwLCAxLCAyMTUsIDE0NywgNDAsIDE3LCAxMCwgMSwgMjE1LCAxNDcsIDY1LCAxNywgMTAsIDEsIDIxNSwgMTQ3LCAxNDcsIAotICAgIDE3LCAxMCwgMSwgMjE3LCA2LCA1MywgMTcsIDEwLCAxLCAyMTcsIDYsIDQwLCAxNywgMTAsIDEsIDIxNywgNiwgNjUsIDE3LCAKLSAgICAxMCwgMSwgMjE3LCA2LCAxNDcsIDE3LCAxMCwgMSwgMjE1LCAxNDksIDUzLCAxNywgMTAsIDEsIDIxNSwgMTQ5LCA0MCwgMTcsIAotICAgIDEwLCAxLCAyMTUsIDE0OSwgNjUsIDE3LCAxMCwgMSwgMjE1LCAxNDksIDE0NywgMTcsIDEwLCAxLCAyMTMsIDI0OSwgNTMsIAotICAgIDE3LCAxMCwgMSwgMjEzLCAyNDksIDQwLCAxNywgMTAsIDEsIDIxMywgMjQ5LCA2NSwgMTcsIDEwLCAxLCAyMTMsIDI0OSwgCi0gICAgMTQ3LCAxNywgMTAsIDEsIDIyNSwgMjA0LCA1MywgMTcsIDEwLCAxLCAyMjUsIDIwNCwgNDAsIDE3LCAxMCwgMSwgMjI1LCAKLSAgICAyMDQsIDY1LCAxNywgMTAsIDEsIDIyNSwgMjA0LCAxNDcsIDE3LCAxMCwgMSwgMjQ2LCA0NCwgNTMsIDE3LCAxMCwgMSwgCi0gICAgMjQ2LCA0NCwgNDAsIDE3LCAxMCwgMSwgMjQ2LCA0NCwgNjUsIDE3LCAxMCwgMSwgMjQ2LCA0NCwgMTQ3LCAxNywgMTAsIDEsIAotICAgIDIyNywgMTU0LCA1MywgMTcsIDEwLCAxLCAyMjcsIDE1NCwgNDAsIDE3LCAxMCwgMSwgMjI3LCAxNTQsIDY1LCAxNywgMTAsIAotICAgIDEsIDIyNywgMTU0LCAxNDcsIDE3LCAxMCwgMSwgMjE3LCAyNywgNTMsIDE3LCAxMCwgMSwgMjE3LCAyNywgNDAsIDE3LCAxMCwgCi0gICAgMSwgMjE3LCAyNywgNjUsIDE3LCAxMCwgMSwgMjE3LCAyNywgMTQ3LCAxNywgMTAsIDEsIDIxNywgMjUsIDUzLCAxNywgMTAsIAotICAgIDEsIDIxNywgMjUsIDQwLCAxNywgMTAsIDEsIDIxNywgMjUsIDY1LCAxNywgMTAsIDEsIDIxNywgMjUsIDE0NywgMTcsIDEwLCAKLSAgICAxLCAyNDgsIDEzMywgNTMsIDE3LCAxMCwgMSwgMjQ4LCAxMzMsIDQwLCAxNywgMTAsIDEsIDI0OCwgMjAyLCA1MywgMTcsIAotICAgIDEwLCAxLCAyNDgsIDIwMiwgNDAsIDE3LCAxMCwgMSwgMjQ2LCA3MSwgNTMsIDE3LCAxMCwgMSwgMjQ2LCA3MSwgNDAsIDE3LCAKLSAgICAxMCwgMSwgMjQ4LCAxMzEsIDUzLCAxNywgMTAsIDEsIDI0OCwgMTMxLCA0MCwgMTcsIDEwLCAxLCAyMzUsIDEyMSwgNTMsIAotICAgIDE3LCAxMCwgMSwgMjM1LCAxMjEsIDQwLCAxNywgMTAsIDEsIDIyMiwgMTcyLCA1MywgMTcsIDEwLCAxLCAyMjIsIDE3MiwgCi0gICAgNDAsIDE3LCAxMCwgMSwgMjM0LCAxNzUsIDUzLCAxNywgMTAsIDEsIDIzNCwgMTc1LCA0MCwgMTcsIDEwLCAxLCAyMzQsIAotICAgIDE3NSwgNjUsIDE3LCAxMCwgMSwgMjM0LCAxNzUsIDE0NywgMTcsIDEwLCAxLCAyNDMsIDEyMywgNTMsIDE3LCAxMCwgMSwgCi0gICAgMjQzLCAxMjMsIDQwLCAxNywgMTAsIDEsIDI0MywgMTIzLCA2NSwgMTcsIDEwLCAxLCAyNDMsIDEyMywgMTQ3LCAxNywgMTAsIAotICAgIDEsIDI0MiwgMTAyLCA1MywgMTcsIDEwLCAxLCAyNDIsIDEwMiwgNDAsIDE3LCAxMCwgMSwgMjQyLCAxMDIsIDY1LCAxNywgCi0gICAgMTAsIDEsIDI0MiwgMTAyLCAxNDcsIDE3LCAxMCwgMSwgMjI5LCAzLCA1MywgMTcsIDEwLCAxLCAyMjksIDMsIDQwLCAxNywgCi0gICAgMTAsIDEsIDIyOSwgMywgNjUsIDE3LCAxMCwgMSwgMjI5LCAzLCAxNDcsIDE3LCAxMCwgMSwgMjI4LCA2MywgMjQyLCAyMTksIAotICAgIDUzLCAxNywgMTAsIDEsIDIyOCwgNjMsIDI0MiwgMjE5LCA0MCwgMTcsIDEwLCAxLCAyMjIsIDIxNSwgNTMsIDE3LCAxMCwgMSwgCi0gICAgMjIyLCAyMTUsIDQwLCAxNywgMTAsIDEsIDIyMiwgMjE1LCA2NSwgMTcsIDEwLCAxLCAyMjIsIDIxNSwgMTQ3LCAxNywgMTAsIAotICAgIDEsIDI0MSwgMjE5LCAyLCA3OSwgNzcsIDUzLCAxNywgMTAsIDEsIDI0MSwgMjE5LCAyLCA3OSwgNzcsIDQwLCAxNywgMTAsIAotICAgIDEsIDI0MSwgMjE5LCAyNDIsIDE3MiwgNTMsIDE3LCAxMCwgMSwgMjQxLCAyMTksIDI0MiwgMTcyLCA0MCwgMTcsIDEwLCAxLCAKLSAgICAyNDEsIDIxOSwgMjQyLCAxNzIsIDY1LCAxNywgMTAsIDEsIDI0MSwgMjE5LCAyNDIsIDE3MiwgMTQ3LCAxNywgMTAsIDEsIAotICAgIDI0MSwgMjE5LCAyNDcsIDE0MiwgNTMsIDE3LCAxMCwgMSwgMjQxLCAyMTksIDI0NywgMTQyLCA0MCwgMTcsIDEwLCAxLCAKLSAgICAyNDEsIDIxOSwgMjQ3LCAxNDIsIDY1LCAxNywgMTAsIDEsIDI0MSwgMjE5LCAyNDcsIDE0MiwgMTQ3LCAxNywgMTAsIDEsIAotICAgIDc5LCAyNTIsIDEzMywgNTMsIDE3LCAxMCwgMSwgNzksIDI1MiwgMTMzLCA0MCwgMTcsIDEwLCAxLCA3OSwgMjUyLCAxMzMsIAotICAgIDIsIDIwMiwgNzcsIDUzLCAxNywgMTAsIDEsIDc5LCAyNTIsIDEzMywgMiwgMjAyLCA3NywgNDAsIDE3LCAxMCwgMTYsIDU5LCAKLSAgICA0OCwgMTAsIDE2LCA1OSwgNTEsIDEwLCAxNiwgMTEzLCAxNzAsIDQ4LCAxMCwgMTYsIDExMywgMTcwLCA1MSwgMTAsIDE2LCAKLSAgICAxMzQsIDE3MCwgNDgsIDEwLCAxNiwgMTM0LCAxNzAsIDUxLCAxMCwgMTYsIDEzNCwgMTcwLCAyMjUsIDcsIDI0NiwgMTA0LCAKLSAgICA0OCwgMTAsIDE2LCAxMzQsIDE3MCwgMjI1LCA3LCAyNDYsIDEwNCwgNTEsIDEwLCAxNiwgMjQ0LCAxMSwgMTcwLCA0OCwgMTAsIAotICAgIDE2LCAyNDQsIDExLCAxNzAsIDUxLCAxMCwgMTYsIDUyLCA2NywgMjUyLCAxNDEsIDUxLCAxMCwgMTYsIDExMywgMTcwLCAKLSAgICAyMTMsIDE4OSwgNDgsIDEwLCAxNiwgMTEzLCAxNzAsIDIxMywgMTg5LCA1MSwgMTAsIDE2LCAyMjIsIDIzMywgMTAsIDE2LCAKLSAgICA0LCAyMTcsIDgxLCA0OCwgMTAsIDE2LCA0LCAyMTcsIDgxLCA1MSwgMTAsIDEsIDIyOSwgODAsIDUzLCAxNywgMTAsIDEsIAotICAgIDIyOSwgODAsIDQwLCAxNywgMTAsIDEsIDIyOSwgODAsIDY1LCAxNywgMTAsIDEsIDIyOSwgODAsIDE0NywgMTcsIDEwLCAxLCAKLSAgICAxMDQsIDUzLCAxNywgMTAsIDEsIDEwNCwgNDAsIDE3LCAxMCwgMSwgMjI2LCAyMzUsIDUzLCAxNywgMTAsIDEsIDIyNiwgCi0gICAgMjM1LCA0MCwgMTcsIDEwLCAxLCAyMTAsIDIxMywgNTMsIDE3LCAxMCwgMSwgMjEwLCAyMTMsIDQwLCAxNywgMTAsIDEsIAotICAgIDEwNCwgMiwgMjAyLCA3NywgNTMsIDE3LCAxMCwgMSwgMjE0LCAwLCA1MywgMTcsIDEwLCAxLCAyMTQsIDAsIDQwLCAxNywgCi0gICAgMTAsIDEsIDIzNCwgNzMsIDIyNiwgMjM1LCA1MywgMTcsIDEwLCAxLCAyMzQsIDczLCAyMjYsIDIzNSwgNDAsIDE3LCAxMCwgCi0gICAgMSwgMjM0LCA3MywgMjEwLCAyMTMsIDUzLCAxNywgMTAsIDEsIDIzNCwgNzMsIDIxMCwgMjEzLCA0MCwgMTcsIDEwLCAxLCAKLSAgICAxNjAsIDUzLCAxNywgMTAsIDEsIDE2MCwgNDAsIDE3LCAxMCwgMSwgMTYwLCA2NSwgMTcsIDEwLCAxLCAxNjAsIDE0NywgMTcsIAotICAgIDEwLCAxLCAyMTQsIDIwNywgMjM0LCAxODYsIDIzNCwgNzMsIDExMiwgMjMxLCAxOTMsIDY1LCAxNywgMTAsIDEsIDIxNCwgCi0gICAgMjA3LCAyMzQsIDE4NiwgMjM0LCA3MywgMTEyLCAyMzEsIDE5MywgMTQ3LCAxNywgMTAsIDI3LCA3OSwgMiwgMjAyLCA3NywgCi0gICAgMiwgMTEyLCA1MywgMTcsIDEwLCAyNywgNzksIDIsIDIwMiwgNzcsIDIsIDExMiwgNDAsIDE3LCAxMCwgMjcsIDc5LCAyLCAKLSAgICAyMDIsIDc3LCAyLCAyNTQsIDI0NCwgNTMsIDE3LCAxMCwgMjcsIDc5LCAyLCAyMDIsIDc3LCAyLCAyNTQsIDI0NCwgNDAsIAotICAgIDE3LCAxMCwgMjcsIDc5LCAyLCAyMDIsIDc3LCAyLCAyMTIsIDMxLCA1MywgMTcsIDEwLCAyNywgNzksIDIsIDIwMiwgNzcsIAotICAgIDIsIDIxMiwgMzEsIDQwLCAxNywgMTAsIDI3LCA3OSwgMiwgMjAyLCA3NywgMiwgMTA0LCA1MywgMTcsIDEwLCAyNywgNzksIAotICAgIDIsIDIwMiwgNzcsIDIsIDEwNCwgNDAsIDE3LCAxMCwgMjcsIDc5LCAyLCAyMDIsIDc3LCAyLCAyMjYsIDIzNSwgNTMsIDE3LCAKLSAgICAxMCwgMjcsIDc5LCAyLCAyMDIsIDc3LCAyLCAyMjYsIDIzNSwgNDAsIDE3LCAxMCwgMjcsIDc5LCAyLCAyMDIsIDc3LCAyLCAKLSAgICAyMTAsIDIxMywgNTMsIDE3LCAxMCwgMjcsIDc5LCAyLCAyMDIsIDc3LCAyLCAyMTAsIDIxMywgNDAsIDE3LCAxMCwgMjcsIAotICAgIDc5LCAyLCAyMDIsIDc3LCAyLCAxNjAsIDUzLCAxNywgMTAsIDI3LCA3OSwgMiwgMjAyLCA3NywgMiwgMTYwLCA0MCwgMTcsIAotICAgIDEwLCAyNywgNzksIDIsIDIwMiwgNzcsIDIsIDE2MCwgNjUsIDE3LCAxMCwgMjcsIDIxNCwgMjA3LCAyMzQsIDczLCA3OSwgMiwgCi0gICAgMjAyLCA3NywgMiwgMTEyLCAyMzEsIDE5MywgNTMsIDE3LCAxMCwgMjcsIDIxNCwgMjA3LCAyMzQsIDczLCA3OSwgMiwgMjAyLCAKLSAgICA3NywgMiwgMTEyLCAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIDIxNCwgMjA3LCAyMzQsIDczLCA3OSwgMiwgMjAyLCA3NywgCi0gICAgMiwgMTEyLCAyMzEsIDE5MywgNjUsIDE3LCAxMCwgMSwgMjQ0LCAxNjgsIDc5LCA1MywgMTcsIDEwLCAxLCAyNDQsIDE2OCwgCi0gICAgNzksIDQwLCAxNywgMTAsIDEsIDI0NCwgMTY4LCA3OSwgNjUsIDE3LCAxMCwgMSwgMjQ0LCAxNjgsIDc5LCAxNDcsIDE3LCAKLSAgICAxMCwgMjcsIDc5LCAyLCAyMDIsIDc3LCAyLCAxNTEsIDUzLCAxNywgMTAsIDI3LCA3OSwgMiwgMjAyLCA3NywgMiwgMTIyLCAKLSAgICA1MywgMTcsIDEwLCAyNywgNzksIDIsIDIwMiwgNzcsIDIsIDY2LCA1MywgMTcsIDEwLCAyNywgNzksIDIsIDIwMiwgNzcsIDIsIAotICAgIDExMiwgMjMxLCAxOTMsIDUzLCAxNywgMTAsIDI3LCA3OSwgMiwgMjAyLCA3NywgMiwgNzksIDUzLCAxNywgMTAsIDI3LCAKLSAgICAyNTIsIDU1LCAyLCAxNTEsIDUzLCAxNywgMTAsIDI3LCAyNTIsIDU1LCAyLCAxMjIsIDUzLCAxNywgMTAsIDI3LCAyNTIsIAotICAgIDU1LCAyLCAyMzQsIDEzMCwgNTMsIDE3LCAxMCwgMjcsIDI1MiwgNTUsIDIsIDY2LCA1MywgMTcsIDEwLCAyNywgMjUyLCA1NSwgCi0gICAgMiwgMTEyLCAyMzEsIDE5MywgNTMsIDE3LCAxMCwgMjcsIDI1MiwgNTUsIDIsIDc5LCA1MywgMTcsIDEwLCAyNywgMjE3LCA4LCAKLSAgICAyLCAxNTEsIDUzLCAxNywgMTAsIDI3LCAyMTcsIDgsIDIsIDEyMiwgNTMsIDE3LCAxMCwgMjcsIDIxNywgOCwgMiwgMjM0LCAKLSAgICAxMzAsIDUzLCAxNywgMTAsIDI3LCAyMTcsIDgsIDIsIDY2LCA1MywgMTcsIDEwLCAyNywgMjE3LCA4LCAyLCAxMTIsIDIzMSwgCi0gICAgMTkzLCA1MywgMTcsIDEwLCAyNywgMjE3LCA4LCAyLCA3OSwgNTMsIDE3LCAxMCwgMjcsIDIxNiwgMTkzLCAyLCAxNTEsIDUzLCAKLSAgICAxNywgMTAsIDI3LCAyMTYsIDE5MywgMiwgNjYsIDUzLCAxNywgMTAsIDI3LCAyMTYsIDE5MywgMiwgMTEyLCAyMzEsIDE5MywgCi0gICAgNTMsIDE3LCAxMCwgMjcsIDIxNiwgMTkzLCAyLCA3OSwgNTMsIDE3LCAxMCwgMjcsIDE1MSwgMiwgMTIyLCA1MywgMTcsIDEwLCAKLSAgICAyNywgMTUxLCAyLCA2NiwgNTMsIDE3LCAxMCwgMjcsIDEyMiwgMiwgMTUxLCA1MywgMTcsIDEwLCAyNywgMTIyLCAyLCA2NiwgCi0gICAgNTMsIDE3LCAxMCwgMjcsIDIzNCwgMTMwLCAyLCAxNTEsIDUzLCAxNywgMTAsIDI3LCAyMzQsIDEzMCwgMiwgMTIyLCA1MywgCi0gICAgMTcsIDEwLCAyNywgMjM0LCAxMzAsIDIsIDY2LCA1MywgMTcsIDEwLCAyNywgMjIxLCAxNjcsIDIsIDE1MSwgNTMsIDE3LCAKLSAgICAxMCwgMjcsIDIyMSwgMTY3LCAyLCAxMjIsIDUzLCAxNywgMTAsIDI3LCAyMjEsIDE2NywgMiwgMjM0LCAxMzAsIDUzLCAxNywgCi0gICAgMTAsIDI3LCAyMjEsIDE2NywgMiwgNjYsIDUzLCAxNywgMTAsIDI3LCAyMjIsIDI3LCAyLCAxMjIsIDUzLCAxNywgMTAsIDI3LCAKLSAgICAyMjIsIDI3LCAyLCA2NiwgNTMsIDE3LCAxMCwgMjcsIDI0OCwgMjE3LCAyLCAxNTEsIDUzLCAxNywgMTAsIDI3LCAyNDgsIAotICAgIDIxNywgMiwgMTIyLCA1MywgMTcsIDEwLCAyNywgMjQ4LCAyMTcsIDIsIDIzNCwgMTMwLCA1MywgMTcsIDEwLCAyNywgMjQ4LCAKLSAgICAyMTcsIDIsIDY2LCA1MywgMTcsIDEwLCAyNywgMjE3LCA4MSwgMiwgMTIyLCA1MywgMTcsIDEwLCAyNywgMjE3LCA4MSwgMiwgCi0gICAgNjYsIDUzLCAxNywgMTAsIDI3LCAyMTAsIDExMiwgMiwgNjYsIDUzLCAxNywgMTAsIDI3LCAyNTQsIDE5NywgMiwgMTUxLCAKLSAgICA1MywgMTcsIDEwLCAyNywgMjU0LCAxOTcsIDIsIDY2LCA1MywgMTcsIDEwLCAyNywgMjQyLCAyNDUsIDIsIDE1MSwgNTMsIAotICAgIDE3LCAxMCwgMjcsIDI0MiwgMjQ1LCAyLCA2NiwgNTMsIDE3LCAxMCwgMjcsIDI0NCwgMTQzLCAyLCAxNTEsIDUzLCAxNywgCi0gICAgMTAsIDI3LCAyNDQsIDE0MywgMiwgMTIyLCA1MywgMTcsIDEwLCAyNywgMjQ0LCAxNDMsIDIsIDIzNCwgMTMwLCA1MywgMTcsIAotICAgIDEwLCAyNywgMjQ0LCAxNDMsIDIsIDY2LCA1MywgMTcsIDEwLCAyNywgMjQ0LCAxNDMsIDIsIDExMiwgMjMxLCAxOTMsIDUzLCAKLSAgICAxNywgMTAsIDI3LCAyNDQsIDE0MywgMiwgNzksIDUzLCAxNywgMTAsIDI3LCAyMjQsIDgyLCAyLCAxMjIsIDUzLCAxNywgMTAsIAotICAgIDI3LCAyMjQsIDgyLCAyLCA2NiwgNTMsIDE3LCAxMCwgMjcsIDIyNCwgODIsIDIsIDExMiwgMjMxLCAxOTMsIDUzLCAxNywgCi0gICAgMTAsIDI3LCAyMjQsIDgyLCAyLCA3OSwgNTMsIDE3LCAxMCwgMjcsIDIzNCwgMjUxLCAyLCAxMTIsIDUzLCAxNywgMTAsIDI3LCAKLSAgICAyMzQsIDI1MSwgMiwgMTUxLCA1MywgMTcsIDEwLCAyNywgMjM0LCAyNTEsIDIsIDEyMiwgNTMsIDE3LCAxMCwgMjcsIDIzNCwgCi0gICAgMjUxLCAyLCAyMzQsIDEzMCwgNTMsIDE3LCAxMCwgMjcsIDIzNCwgMjUxLCAyLCAyMzMsIDEwMywgNTMsIDE3LCAxMCwgMjcsIAotICAgIDIzNCwgMjUxLCAyLCA2NiwgNTMsIDE3LCAxMCwgMjcsIDIzNCwgMjUxLCAyLCAxMTIsIDIzMSwgMTkzLCA1MywgMTcsIDEwLCAKLSAgICAyNywgMjM0LCAyNTEsIDIsIDc5LCA1MywgMTcsIDEwLCAyNywgMjMzLCAxMDMsIDIsIDE1MSwgNTMsIDE3LCAxMCwgMjcsIAotICAgIDIzMywgMTAzLCAyLCAxMjIsIDUzLCAxNywgMTAsIDI3LCAyMzMsIDEwMywgMiwgMjM0LCAxMzAsIDUzLCAxNywgMTAsIDI3LCAKLSAgICAyMzMsIDEwMywgMiwgNjYsIDUzLCAxNywgMTAsIDI3LCAyMzMsIDEwMywgMiwgMTEyLCAyMzEsIDE5MywgNTMsIDE3LCAxMCwgCi0gICAgMjcsIDIzMywgMTAzLCAyLCA3OSwgNTMsIDE3LCAxMCwgMjcsIDY2LCAyLCAxNTEsIDUzLCAxNywgMTAsIDI3LCA2NiwgMiwgCi0gICAgMTIyLCA1MywgMTcsIDEwLCAyNywgNjYsIDIsIDIzNCwgMTMwLCA1MywgMTcsIDEwLCAyNywgNjYsIDIsIDY2LCA1MywgMTcsIAotICAgIDEwLCAyNywgNjYsIDIsIDExMiwgMjMxLCAxOTMsIDUzLCAxNywgMTAsIDI3LCA2NiwgMiwgNzksIDUzLCAxNywgMTAsIDI3LCAKLSAgICAyMjgsIDYzLCAyLCAxNTEsIDUzLCAxNywgMTAsIDI3LCAyMjgsIDYzLCAyLCAxMjIsIDUzLCAxNywgMTAsIDI3LCAyMjgsIAotICAgIDYzLCAyLCAyMzQsIDEzMCwgNTMsIDE3LCAxMCwgMjcsIDIyOCwgNjMsIDIsIDY2LCA1MywgMTcsIDEwLCAyNywgMjI4LCA2MywgCi0gICAgMiwgMTEyLCAyMzEsIDE5MywgNTMsIDE3LCAxMCwgMjcsIDIyOCwgNjMsIDIsIDc5LCA1MywgMTcsIDEwLCAyNywgMjQxLCAKLSAgICAyMTksIDIsIDE1MSwgNTMsIDE3LCAxMCwgMjcsIDI0MSwgMjE5LCAyLCA2NiwgNTMsIDE3LCAxMCwgMjcsIDI0MSwgMjE5LCAKLSAgICAyLCAxMTIsIDIzMSwgMTkzLCA1MywgMTcsIDEwLCAyNywgMjQxLCAyMTksIDIsIDc5LCA1MywgMTcsIDEwLCAyNywgNzksIDIsIAotICAgIDE1MSwgNTMsIDE3LCAxMCwgMjcsIDc5LCAyLCAxMjIsIDUzLCAxNywgMTAsIDI3LCA3OSwgMiwgMjM0LCAxMzAsIDUzLCAxNywgCi0gICAgMTAsIDI3LCA3OSwgMiwgNjYsIDUzLCAxNywgMTAsIDI3LCA3OSwgMiwgMTEyLCAyMzEsIDE5MywgNTMsIDE3LCAxMCwgMjcsIAotICAgIDc5LCAyLCA3OSwgNTMsIDE3LCAxMCwgMjcsIDIxNiwgMjAzLCAyLCAyMTgsIDIzLCAxMTIsIDUzLCAxNywgMTAsIDI3LCAKLSAgICAyMjMsIDk2LCAyLCAyMTgsIDIzLCAxMTIsIDUzLCAxNywgMTAsIDI3LCAxMTIsIDIzMSwgMTkzLCAyLCAyMTgsIDIzLCAxMTIsIAotICAgIDUzLCAxNywgMTAsIDI3LCAyMjAsIDk0LCAyLCAyNDgsIDE4MywgNTMsIDE3LCAxMCwgMjcsIDIyMCwgOTQsIDIsIDIzNCwgCi0gICAgMjA0LCA1MywgMTcsIDEwLCAyNywgMjIwLCA5NCwgMiwgMjQ0LCAxNjYsIDUzLCAxNywgMTAsIDI3LCAyMjAsIDk0LCAyLCAKLSAgICAyNDgsIDE4NSwgNTMsIDE3LCAxMCwgMjcsIDIyMCwgOTQsIDIsIDIzNCwgMjA2LCA1MywgMTcsIDEwLCAyNywgMjIwLCA5NCwgCi0gICAgMiwgMjE4LCAyMywgMTEyLCA1MywgMTcsIDEwLCAyNywgNzksIDIsIDIwMiwgNzcsIDIsIDIyMywgOTYsIDQwLCAxNywgMTAsIAotICAgIDI3LCA3OSwgMiwgMjAyLCA3NywgMiwgMjEwLCAxMDksIDQwLCAxNywgMTAsIDI3LCA3OSwgMiwgMjAyLCA3NywgMiwgNjYsIAotICAgIDQwLCAxNywgMTAsIDI3LCA3OSwgMiwgMjAyLCA3NywgMiwgMjI4LCA2MywgNDAsIDE3LCAxMCwgMjcsIDc5LCAyLCAyMDIsIAotICAgIDc3LCAyLCAxMTIsIDIzMSwgMTkzLCA0MCwgMTcsIDEwLCAyNywgNzksIDIsIDIwMiwgNzcsIDIsIDc5LCA0MCwgMTcsIDEwLCAKLSAgICAyNywgMjUyLCA1NSwgMiwgMjIzLCA5NiwgNDAsIDE3LCAxMCwgMjcsIDI1MiwgNTUsIDIsIDIxMCwgMTA5LCA0MCwgMTcsIAotICAgIDEwLCAyNywgMjUyLCA1NSwgMiwgNjYsIDQwLCAxNywgMTAsIDI3LCAyNTIsIDU1LCAyLCAyMjgsIDYzLCA0MCwgMTcsIDEwLCAKLSAgICAyNywgMjUyLCA1NSwgMiwgMTEyLCAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIDI1MiwgNTUsIDIsIDc5LCA0MCwgMTcsIAotICAgIDEwLCAyNywgMjE3LCA4LCAyLCAyMjMsIDk2LCA0MCwgMTcsIDEwLCAyNywgMjE3LCA4LCAyLCAyMTAsIDEwOSwgNDAsIDE3LCAKLSAgICAxMCwgMjcsIDIxNywgOCwgMiwgNjYsIDQwLCAxNywgMTAsIDI3LCAyMTcsIDgsIDIsIDIyOCwgNjMsIDQwLCAxNywgMTAsIAotICAgIDI3LCAyMTcsIDgsIDIsIDExMiwgMjMxLCAxOTMsIDQwLCAxNywgMTAsIDI3LCAyMTcsIDgsIDIsIDc5LCA0MCwgMTcsIDEwLCAKLSAgICAyNywgMjE2LCAxOTMsIDIsIDIyMywgOTYsIDQwLCAxNywgMTAsIDI3LCAyMTYsIDE5MywgMiwgMjEwLCAxMDksIDQwLCAxNywgCi0gICAgMTAsIDI3LCAyMTYsIDE5MywgMiwgNjYsIDQwLCAxNywgMTAsIDI3LCAyMTYsIDE5MywgMiwgMjI4LCA2MywgNDAsIDE3LCAKLSAgICAxMCwgMjcsIDIxNiwgMTkzLCAyLCAxMTIsIDIzMSwgMTkzLCA0MCwgMTcsIDEwLCAyNywgMjE2LCAxOTMsIDIsIDc5LCA0MCwgCi0gICAgMTcsIDEwLCAyNywgMjQ0LCAxNDMsIDIsIDExMiwgMjMxLCAxOTMsIDQwLCAxNywgMTAsIDI3LCAyNDQsIDE0MywgMiwgNzksIAotICAgIDQwLCAxNywgMTAsIDI3LCAyMjQsIDgyLCAyLCAxMTIsIDIzMSwgMTkzLCA0MCwgMTcsIDEwLCAyNywgMjI0LCA4MiwgMiwgCi0gICAgNzksIDQwLCAxNywgMTAsIDI3LCAyMzQsIDI1MSwgMiwgMTEyLCA0MCwgMTcsIDEwLCAyNywgMjM0LCAyNTEsIDIsIDIzMywgCi0gICAgMTAzLCA0MCwgMTcsIDEwLCAyNywgMjM0LCAyNTEsIDIsIDY2LCA0MCwgMTcsIDEwLCAyNywgMjM0LCAyNTEsIDIsIDExMiwgCi0gICAgMjMxLCAxOTMsIDQwLCAxNywgMTAsIDI3LCAyMzQsIDI1MSwgMiwgNzksIDQwLCAxNywgMTAsIDI3LCAyMzMsIDEwMywgMiwgCi0gICAgNjYsIDQwLCAxNywgMTAsIDI3LCAyMzMsIDEwMywgMiwgMTEyLCAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIDIzMywgMTAzLCAKLSAgICAyLCA3OSwgNDAsIDE3LCAxMCwgMjcsIDY2LCAyLCAxMTIsIDQwLCAxNywgMTAsIDI3LCA2NiwgMiwgNjYsIDQwLCAxNywgMTAsIAotICAgIDI3LCAyMjgsIDYzLCAyLCAyMjMsIDk2LCA0MCwgMTcsIDEwLCAyNywgMjI4LCA2MywgMiwgMjEwLCAxMDksIDQwLCAxNywgCi0gICAgMTAsIDI3LCAyMjgsIDYzLCAyLCA2NiwgNDAsIDE3LCAxMCwgMjcsIDIyOCwgNjMsIDIsIDIyOCwgNjMsIDQwLCAxNywgMTAsIAotICAgIDI3LCAyMjgsIDYzLCAyLCAxMTIsIDIzMSwgMTkzLCA0MCwgMTcsIDEwLCAyNywgMjI4LCA2MywgMiwgNzksIDQwLCAxNywgCi0gICAgMTAsIDI3LCAxMTIsIDIzMSwgMTkzLCAyLCAyMTgsIDIzLCAxMTIsIDQwLCAxNywgMTAsIDI3LCA3OSwgMiwgMjIzLCA5NiwgCi0gICAgNDAsIDE3LCAxMCwgMjcsIDc5LCAyLCAyMTAsIDEwOSwgNDAsIDE3LCAxMCwgMjcsIDc5LCAyLCA2NiwgNDAsIDE3LCAxMCwgCi0gICAgMjcsIDc5LCAyLCAyMjgsIDYzLCA0MCwgMTcsIDEwLCAyNywgNzksIDIsIDExMiwgMjMxLCAxOTMsIDQwLCAxNywgMTAsIDI3LCAKLSAgICA3OSwgMiwgNzksIDQwLCAxNywgMTAsIDI3LCA3OSwgMiwgMjAyLCA3NywgMiwgMTUxLCA2NSwgMTcsIDEwLCAyNywgNzksIDIsIAotICAgIDIwMiwgNzcsIDIsIDEyMiwgNjUsIDE3LCAxMCwgMjcsIDc5LCAyLCAyMDIsIDc3LCAyLCAyMzQsIDEzMCwgNjUsIDE3LCAxMCwgCi0gICAgMjcsIDc5LCAyLCAyMDIsIDc3LCAyLCA2NiwgNjUsIDE3LCAxMCwgMjcsIDc5LCAyLCAyMDIsIDc3LCAyLCAyNDEsIDIxOSwgCi0gICAgNjUsIDE3LCAxMCwgMjcsIDI1MiwgNTUsIDIsIDE1MSwgNjUsIDE3LCAxMCwgMjcsIDI1MiwgNTUsIDIsIDEyMiwgNjUsIDE3LCAKLSAgICAxMCwgMjcsIDI1MiwgNTUsIDIsIDIzNCwgMTMwLCA2NSwgMTcsIDEwLCAyNywgMjUyLCA1NSwgMiwgNjYsIDY1LCAxNywgMTAsIAotICAgIDI3LCAyNTIsIDU1LCAyLCAyNDEsIDIxOSwgNjUsIDE3LCAxMCwgMjcsIDIxNywgOCwgMiwgMTUxLCA2NSwgMTcsIDEwLCAyNywgCi0gICAgMjE3LCA4LCAyLCAxMjIsIDY1LCAxNywgMTAsIDI3LCAyMTcsIDgsIDIsIDIzNCwgMTMwLCA2NSwgMTcsIDEwLCAyNywgMjE3LCAKLSAgICA4LCAyLCA2NiwgNjUsIDE3LCAxMCwgMjcsIDIxNywgOCwgMiwgMjQxLCAyMTksIDY1LCAxNywgMTAsIDI3LCAyMTYsIDE5MywgCi0gICAgMiwgNjYsIDY1LCAxNywgMTAsIDI3LCAxNTEsIDIsIDEyMiwgNjUsIDE3LCAxMCwgMjcsIDE1MSwgMiwgNjYsIDY1LCAxNywgCi0gICAgMTAsIDI3LCAxMjIsIDIsIDE1MSwgNjUsIDE3LCAxMCwgMjcsIDEyMiwgMiwgNjYsIDY1LCAxNywgMTAsIDI3LCAyMzQsIAotICAgIDEzMCwgMiwgMTUxLCA2NSwgMTcsIDEwLCAyNywgMjM0LCAxMzAsIDIsIDY2LCA2NSwgMTcsIDEwLCAyNywgMjIxLCAxNjcsIAotICAgIDIsIDE1MSwgNjUsIDE3LCAxMCwgMjcsIDIyMSwgMTY3LCAyLCAxMjIsIDY1LCAxNywgMTAsIDI3LCAyMjEsIDE2NywgMiwgCi0gICAgMjM0LCAxMzAsIDY1LCAxNywgMTAsIDI3LCAyMjEsIDE2NywgMiwgNjYsIDY1LCAxNywgMTAsIDI3LCAyMjIsIDI3LCAyLCAKLSAgICAxMjIsIDY1LCAxNywgMTAsIDI3LCAyMjIsIDI3LCAyLCAyMzQsIDEzMCwgNjUsIDE3LCAxMCwgMjcsIDIyMiwgMjcsIDIsIAotICAgIDY2LCA2NSwgMTcsIDEwLCAyNywgMjQ4LCAyMTcsIDIsIDE1MSwgNjUsIDE3LCAxMCwgMjcsIDI0OCwgMjE3LCAyLCAxMjIsIAotICAgIDY1LCAxNywgMTAsIDI3LCAyNDgsIDIxNywgMiwgMjM0LCAxMzAsIDY1LCAxNywgMTAsIDI3LCAyNDgsIDIxNywgMiwgNjYsIAotICAgIDY1LCAxNywgMTAsIDI3LCAyMTcsIDgxLCAyLCAxMjIsIDY1LCAxNywgMTAsIDI3LCAyMTAsIDExMiwgMiwgNjYsIDY1LCAxNywgCi0gICAgMTAsIDI3LCAyNTQsIDE5NywgMiwgMTUxLCA2NSwgMTcsIDEwLCAyNywgMjU0LCAxOTcsIDIsIDY2LCA2NSwgMTcsIDEwLCAKLSAgICAyNywgMjQyLCAyNDUsIDIsIDE1MSwgNjUsIDE3LCAxMCwgMjcsIDI0MiwgMjQ1LCAyLCA2NiwgNjUsIDE3LCAxMCwgMjcsIAotICAgIDI0NCwgMTQzLCAyLCAxNTEsIDY1LCAxNywgMTAsIDI3LCAyNDQsIDE0MywgMiwgMTIyLCA2NSwgMTcsIDEwLCAyNywgMjQ0LCAKLSAgICAxNDMsIDIsIDIzNCwgMTMwLCA2NSwgMTcsIDEwLCAyNywgMjQ0LCAxNDMsIDIsIDY2LCA2NSwgMTcsIDEwLCAyNywgMjI0LCAKLSAgICA4MiwgMiwgMTIyLCA2NSwgMTcsIDEwLCAyNywgMjI0LCA4MiwgMiwgNjYsIDY1LCAxNywgMTAsIDI3LCAyMzQsIDI1MSwgMiwgCi0gICAgMTUxLCA2NSwgMTcsIDEwLCAyNywgMjM0LCAyNTEsIDIsIDEyMiwgNjUsIDE3LCAxMCwgMjcsIDIzNCwgMjUxLCAyLCAyMzQsIAotICAgIDEzMCwgNjUsIDE3LCAxMCwgMjcsIDIzNCwgMjUxLCAyLCAyMzMsIDEwMywgNjUsIDE3LCAxMCwgMjcsIDIzNCwgMjUxLCAyLCAKLSAgICA2NiwgNjUsIDE3LCAxMCwgMjcsIDIzMywgMTAzLCAyLCAxNTEsIDY1LCAxNywgMTAsIDI3LCAyMzMsIDEwMywgMiwgMTIyLCAKLSAgICA2NSwgMTcsIDEwLCAyNywgMjMzLCAxMDMsIDIsIDIzNCwgMTMwLCA2NSwgMTcsIDEwLCAyNywgMjMzLCAxMDMsIDIsIDY2LCAKLSAgICA2NSwgMTcsIDEwLCAyNywgMjMzLCAxMDMsIDIsIDI0MSwgMjE5LCA2NSwgMTcsIDEwLCAyNywgNjYsIDIsIDE1MSwgNjUsIAotICAgIDE3LCAxMCwgMjcsIDY2LCAyLCAxMjIsIDY1LCAxNywgMTAsIDI3LCA2NiwgMiwgMjM0LCAxMzAsIDY1LCAxNywgMTAsIDI3LCAKLSAgICA2NiwgMiwgNjYsIDY1LCAxNywgMTAsIDI3LCAyMjgsIDYzLCAyLCAxNTEsIDY1LCAxNywgMTAsIDI3LCAyMjgsIDYzLCAyLCAKLSAgICAxMjIsIDY1LCAxNywgMTAsIDI3LCAyMjgsIDYzLCAyLCAyMzQsIDEzMCwgNjUsIDE3LCAxMCwgMjcsIDIyOCwgNjMsIDIsIAotICAgIDY2LCA2NSwgMTcsIDEwLCAyNywgMjI4LCA2MywgMiwgMjQxLCAyMTksIDY1LCAxNywgMTAsIDI3LCAyNDEsIDIxOSwgMiwgCi0gICAgMTUxLCA2NSwgMTcsIDEwLCAyNywgMjQxLCAyMTksIDIsIDY2LCA2NSwgMTcsIDEwLCAyNywgMjQxLCAyMTksIDIsIDIxOCwgCi0gICAgMjMsIDExMiwgNjUsIDE3LCAxMCwgMjcsIDc5LCAyLCAxNTEsIDY1LCAxNywgMTAsIDI3LCA3OSwgMiwgMTIyLCA2NSwgMTcsIAotICAgIDEwLCAyNywgNzksIDIsIDIzNCwgMTMwLCA2NSwgMTcsIDEwLCAyNywgNzksIDIsIDY2LCA2NSwgMTcsIDEwLCAyNywgNzksIAotICAgIDIsIDI0MSwgMjE5LCA2NSwgMTcsIDEwLCAyNywgNzksIDIsIDIwMiwgNzcsIDIsIDY2LCAxNDcsIDE3LCAxMCwgMjcsIDc5LCAKLSAgICAyLCAyMDIsIDc3LCAyLCAyNDEsIDIxOSwgMTQ3LCAxNywgMTAsIDI3LCAyNTIsIDU1LCAyLCA2NiwgMTQ3LCAxNywgMTAsIAotICAgIDI3LCAyNTIsIDU1LCAyLCAyNDEsIDIxOSwgMTQ3LCAxNywgMTAsIDI3LCAyMTcsIDgsIDIsIDY2LCAxNDcsIDE3LCAxMCwgCi0gICAgMjcsIDIxNywgOCwgMiwgMjQxLCAyMTksIDE0NywgMTcsIDEwLCAyNywgMjE2LCAxOTMsIDIsIDY2LCAxNDcsIDE3LCAxMCwgCi0gICAgMjcsIDIxNiwgMTkzLCAyLCAyNDEsIDIxOSwgMTQ3LCAxNywgMTAsIDI3LCAyMjEsIDE2NywgMiwgNjYsIDE0NywgMTcsIDEwLCAKLSAgICAyNywgMjIxLCAxNjcsIDIsIDI0MSwgMjE5LCAxNDcsIDE3LCAxMCwgMjcsIDIyMCwgNjAsIDIsIDY2LCAxNDcsIDE3LCAxMCwgCi0gICAgMjcsIDIyMCwgNjAsIDIsIDI0MSwgMjE5LCAxNDcsIDE3LCAxMCwgMjcsIDIzNCwgMjUxLCAyLCAyMzMsIDEwMywgMTQ3LCAKLSAgICAxNywgMTAsIDI3LCAyMzQsIDI1MSwgMiwgNjYsIDE0NywgMTcsIDEwLCAyNywgMjMzLCAxMDMsIDIsIDY2LCAxNDcsIDE3LCAKLSAgICAxMCwgMjcsIDIyOCwgNjMsIDIsIDY2LCAxNDcsIDE3LCAxMCwgMjcsIDIyOCwgNjMsIDIsIDI0MSwgMjE5LCAxNDcsIDE3LCAKLSAgICAxMCwgMjcsIDc5LCAyLCA2NiwgMTQ3LCAxNywgMTAsIDI3LCA3OSwgMiwgMjQxLCAyMTksIDE0NywgMTcsIDEwLCAyNywgCi0gICAgMjIwLCA5NCwgMiwgMjQ0LCAxNjYsIDE0NywgMTcsIDEwLCAyNywgMjIwLCA5NCwgMiwgMjQ4LCAxODUsIDE0NywgMTcsIDEwLCAKLSAgICAyNywgMjIwLCA5NCwgMiwgMjM0LCAyMDYsIDE0NywgMTcsIDEwLCAyNywgMjE3LCA4MSwgMiwgMTEyLCAyMzEsIDE5MywgNTMsIAotICAgIDE3LCAxMCwgMjcsIDIxNywgODEsIDIsIDc5LCA1MywgMTcsIDEwLCAyNywgMjU0LCAxOTcsIDIsIDExMiwgMjMxLCAxOTMsIAotICAgIDUzLCAxNywgMTAsIDI3LCAyNTQsIDE5NywgMiwgNzksIDUzLCAxNywgMTAsIDI3LCAyNDIsIDI0NSwgMiwgMTEyLCAyMzEsIAotICAgIDE5MywgNTMsIDE3LCAxMCwgMjcsIDI0MiwgMjQ1LCAyLCA3OSwgNTMsIDE3LCAxMCwgMjcsIDIyMSwgMTY3LCAyLCAxMTIsIAotICAgIDIzMSwgMTkzLCA1MywgMTcsIDEwLCAyNywgMjIxLCAxNjcsIDIsIDc5LCA1MywgMTcsIDEwLCAyNywgMjIwLCA2MCwgMiwgCi0gICAgMTEyLCAyMzEsIDE5MywgNTMsIDE3LCAxMCwgMjcsIDIyMCwgNjAsIDIsIDc5LCA1MywgMTcsIDEwLCAyNywgMTIyLCAyLCAKLSAgICAxMTIsIDIzMSwgMTkzLCA1MywgMTcsIDEwLCAyNywgMTIyLCAyLCA3OSwgNTMsIDE3LCAxMCwgMjcsIDE1MSwgMiwgMTEyLCAKLSAgICAyMzEsIDE5MywgNTMsIDE3LCAxMCwgMjcsIDE1MSwgMiwgNzksIDUzLCAxNywgMTAsIDI3LCAyMzQsIDEzMCwgMiwgMTEyLCAKLSAgICAyMzEsIDE5MywgNTMsIDE3LCAxMCwgMjcsIDIzNCwgMTMwLCAyLCA3OSwgNTMsIDE3LCAxMCwgMjcsIDIyMiwgMjcsIDIsIAotICAgIDExMiwgMjMxLCAxOTMsIDUzLCAxNywgMTAsIDI3LCAyMjIsIDI3LCAyLCA3OSwgNTMsIDE3LCAxMCwgMjcsIDI0OCwgMjE3LCAKLSAgICAyLCAxMTIsIDIzMSwgMTkzLCA1MywgMTcsIDEwLCAyNywgMjQ4LCAyMTcsIDIsIDc5LCA1MywgMTcsIDEwLCAyNywgMjIwLCAKLSAgICA2MCwgMiwgMTUxLCA1MywgMTcsIDEwLCAyNywgMjIwLCA2MCwgMiwgMTIyLCA1MywgMTcsIDEwLCAyNywgMjIwLCA2MCwgMiwgCi0gICAgMjM0LCAxMzAsIDUzLCAxNywgMTAsIDI3LCAyMjAsIDYwLCAyLCA2NiwgNTMsIDE3LCAxMCwgMjcsIDIyMCwgNjAsIDIsIAotICAgIDIyMywgOTYsIDUzLCAxNywgMTAsIDI3LCAyMjEsIDE2NywgMiwgMjIzLCA5NiwgNTMsIDE3LCAxMCwgMjcsIDIyMiwgMjcsIAotICAgIDIsIDIyMywgOTYsIDUzLCAxNywgMTAsIDI3LCAyNDgsIDIxNywgMiwgMjIzLCA5NiwgNTMsIDE3LCAxMCwgMjcsIDIxNywgCi0gICAgODEsIDIsIDExMiwgMjMxLCAxOTMsIDQwLCAxNywgMTAsIDI3LCAyMTcsIDgxLCAyLCA3OSwgNDAsIDE3LCAxMCwgMjcsIAotICAgIDI1NCwgMTk3LCAyLCAxMTIsIDIzMSwgMTkzLCA0MCwgMTcsIDEwLCAyNywgMjU0LCAxOTcsIDIsIDc5LCA0MCwgMTcsIDEwLCAKLSAgICAyNywgMjQyLCAyNDUsIDIsIDExMiwgMjMxLCAxOTMsIDQwLCAxNywgMTAsIDI3LCAyNDIsIDI0NSwgMiwgNzksIDQwLCAxNywgCi0gICAgMTAsIDI3LCAyMjEsIDE2NywgMiwgMTEyLCAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIDIyMSwgMTY3LCAyLCA3OSwgNDAsIAotICAgIDE3LCAxMCwgMjcsIDIyMCwgNjAsIDIsIDExMiwgMjMxLCAxOTMsIDQwLCAxNywgMTAsIDI3LCAyMjAsIDYwLCAyLCA3OSwgCi0gICAgNDAsIDE3LCAxMCwgMjcsIDEyMiwgMiwgMTEyLCAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIDEyMiwgMiwgNzksIDQwLCAKLSAgICAxNywgMTAsIDI3LCAxNTEsIDIsIDExMiwgMjMxLCAxOTMsIDQwLCAxNywgMTAsIDI3LCAxNTEsIDIsIDc5LCA0MCwgMTcsIAotICAgIDEwLCAyNywgMjM0LCAxMzAsIDIsIDExMiwgMjMxLCAxOTMsIDQwLCAxNywgMTAsIDI3LCAyMzQsIDEzMCwgMiwgNzksIDQwLCAKLSAgICAxNywgMTAsIDI3LCAyMjIsIDI3LCAyLCAxMTIsIDIzMSwgMTkzLCA0MCwgMTcsIDEwLCAyNywgMjIyLCAyNywgMiwgNzksIAotICAgIDQwLCAxNywgMTAsIDI3LCAyNDgsIDIxNywgMiwgMTEyLCAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIDI0OCwgMjE3LCAyLCAKLSAgICA3OSwgNDAsIDE3LCAxMCwgMjcsIDIyMCwgNjAsIDIsIDE1MSwgNDAsIDE3LCAxMCwgMjcsIDIyMCwgNjAsIDIsIDEyMiwgNDAsIAotICAgIDE3LCAxMCwgMjcsIDIyMCwgNjAsIDIsIDIzNCwgMTMwLCA0MCwgMTcsIDEwLCAyNywgMjIwLCA2MCwgMiwgNjYsIDQwLCAxNywgCi0gICAgMTAsIDI3LCAyMjAsIDYwLCAyLCAyMjMsIDk2LCA0MCwgMTcsIDEwLCAyNywgMjIxLCAxNjcsIDIsIDIyMywgOTYsIDQwLCAKLSAgICAxNywgMTAsIDI3LCAyMjIsIDI3LCAyLCAyMjMsIDk2LCA0MCwgMTcsIDEwLCAyNywgMjQ4LCAyMTcsIDIsIDIyMywgOTYsIAotICAgIDQwLCAxNywgMTAsIDI3LCAyMjAsIDYwLCAyLCAxNTEsIDY1LCAxNywgMTAsIDI3LCAyMjAsIDYwLCAyLCAxMjIsIDY1LCAxNywgCi0gICAgMTAsIDI3LCAyMjAsIDYwLCAyLCAyMzQsIDEzMCwgNjUsIDE3LCAxMCwgMjcsIDIyMCwgNjAsIDIsIDY2LCA2NSwgMTcsIDEwLCAKLSAgICAyNywgMjIxLCAxNjcsIDIsIDI0MSwgMjE5LCA2NSwgMTcsIDEwLCAyNywgMjIwLCA2MCwgMiwgMjQxLCAyMTksIDY1LCAxNywgCi0gICAgMTAsIDI3LCAyMTcsIDgxLCAyLCA2NiwgNjUsIDE3LCAxMCwgMjcsIDIyMSwgMTY3LCAyLCAxNTEsIDE0NywgMTcsIDEwLCAKLSAgICAyNywgMjIxLCAxNjcsIDIsIDEyMiwgMTQ3LCAxNywgMTAsIDI3LCAyMjEsIDE2NywgMiwgMjM0LCAxMzAsIDE0NywgMTcsIAotICAgIDEwLCAyNywgMjIwLCA2MCwgMiwgMTUxLCAxNDcsIDE3LCAxMCwgMjcsIDIyMCwgNjAsIDIsIDEyMiwgMTQ3LCAxNywgMTAsIAotICAgIDI3LCAyMjAsIDYwLCAyLCAyMzQsIDEzMCwgMTQ3LCAxNywgMTAsIDI3LCAyMTcsIDgxLCAyLCA2NiwgMTQ3LCAxNywgMTAsIAotICAgIDI3LCAyMTAsIDExMiwgMiwgNjYsIDE0NywgMTcsIDEwLCAyNywgMTEyLCAyLCAyNDQsIDE2NCwgNDAsIDE3LCAxMCwgMjcsIAotICAgIDExMiwgMiwgMjQ0LCAxNjQsIDUzLCAxNywgMjI2LCAxNDYsIDQzLCAyMjYsIDMsIDIyNiwgMTQ2LCA0NCwgMjI2LCAzLCAxMCwgCi0gICAgMjcsIDIxNywgOCwgMiwgMTUxLCAyLCA2NiwgNjUsIDE3LCAxMCwgMjcsIDIxNywgOCwgMiwgMTIyLCAyLCAxNTEsIDQwLCAKLSAgICAxNywgMTAsIDI3LCAyMTcsIDgsIDIsIDEyMiwgMiwgMTUxLCA2NSwgMTcsIDEwLCAyNywgMjE3LCA4LCAyLCAxMjIsIDIsIAotICAgIDY2LCA2NSwgMTcsIDEwLCAyNywgMjE3LCA4LCAyLCAyMzQsIDEzMCwgMiwgNjYsIDY1LCAxNywgMTAsIDI3LCAyMTcsIDgsIAotICAgIDIsIDY2LCAyLCAxNTEsIDY1LCAxNywgMTAsIDI3LCAyMTcsIDgsIDIsIDY2LCAyLCAxMjIsIDY1LCAxNywgMTAsIDI3LCAKLSAgICAyMTcsIDgsIDIsIDY2LCAyLCAyMzQsIDEzMCwgNjUsIDE3LCAxMCwgMjcsIDE1MSwgMiwgNjYsIDIsIDEyMiwgNDAsIDE3LCAKLSAgICAxMCwgMjcsIDE1MSwgMiwgNjYsIDIsIDEyMiwgNjUsIDE3LCAxMCwgMjcsIDEyMiwgMiwgNjYsIDIsIDc5LCA0MCwgMTcsIAotICAgIDEwLCAyNywgMTIyLCAyLCA2NiwgMiwgMTEyLCAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIDIyMSwgMTY3LCAyLCAxMjIsIAotICAgIDIsIDE1MSwgNjUsIDE3LCAxMCwgMjcsIDIyMSwgMTY3LCAyLCAxNTEsIDIsIDEyMiwgNjUsIDE3LCAxMCwgMjcsIDIyMSwgCi0gICAgMTY3LCAyLCAxNTEsIDIsIDExMiwgMjMxLCAxOTMsIDQwLCAxNywgMTAsIDI3LCAyMjEsIDE2NywgMiwgNjYsIDIsIDEyMiwgCi0gICAgNDAsIDE3LCAxMCwgMjcsIDIyMSwgMTY3LCAyLCA2NiwgMiwgMTIyLCA2NSwgMTcsIDEwLCAyNywgMjIxLCAxNjcsIDIsIDY2LCAKLSAgICAyLCAxNTEsIDY1LCAxNywgMTAsIDI3LCAyMjEsIDE2NywgMiwgNjYsIDIsIDY2LCA0MCwgMTcsIDEwLCAyNywgMjIxLCAxNjcsIAotICAgIDIsIDY2LCAyLCA2NiwgNjUsIDE3LCAxMCwgMjcsIDIyMiwgMjcsIDIsIDEyMiwgMiwgMTIyLCA0MCwgMTcsIDEwLCAyNywgCi0gICAgMjIyLCAyNywgMiwgMTIyLCAyLCAxMjIsIDY1LCAxNywgMTAsIDI3LCAyMjIsIDI3LCAyLCA2NiwgMiwgNjYsIDQwLCAxNywgCi0gICAgMTAsIDI3LCAyMjAsIDYwLCAyLCAxMjIsIDIsIDY2LCA0MCwgMTcsIDEwLCAyNywgMjIwLCA2MCwgMiwgMTIyLCAyLCA2NiwgCi0gICAgNjUsIDE3LCAxMCwgMjcsIDIyMCwgNjAsIDIsIDE1MSwgMiwgNzksIDQwLCAxNywgMTAsIDI3LCAyMjAsIDYwLCAyLCA2NiwgCi0gICAgMiwgMjM0LCAxMzAsIDQwLCAxNywgMTAsIDI3LCAyMjAsIDYwLCAyLCA2NiwgMiwgMjM0LCAxMzAsIDY1LCAxNywgMTAsIDI3LCAKLSAgICAyMjAsIDYwLCAyLCA2NiwgMiwgNjYsIDQwLCAxNywgMTAsIDI3LCAyMjAsIDYwLCAyLCA2NiwgMiwgNjYsIDY1LCAxNywgMTAsIAotICAgIDI3LCAyNDgsIDIxNywgMiwgMTIyLCAyLCAxMTIsIDIzMSwgMTkzLCA0MCwgMTcsIDEwLCAyNywgMjQ4LCAyMTcsIDIsIDIzNCwgCi0gICAgMTMwLCAyLCA2NiwgNDAsIDE3LCAxMCwgMjcsIDI0OCwgMjE3LCAyLCAyMzQsIDEzMCwgMiwgNjYsIDY1LCAxNywgMTAsIDI3LCAKLSAgICAyMTcsIDgxLCAyLCA2NiwgMiwgMTIyLCA0MCwgMTcsIDEwLCAyNywgMjE3LCA4MSwgMiwgNjYsIDIsIDEyMiwgNjUsIDE3LCAKLSAgICAxMCwgMjcsIDIxNywgODEsIDIsIDY2LCAyLCA2NiwgNjUsIDE3LCAxMCwgMjcsIDIxNywgODEsIDIsIDY2LCAyLCA3OSwgNDAsIAotICAgIDE3LCAxMCwgMjcsIDI1NCwgMTk3LCAyLCAxNTEsIDIsIDY2LCA0MCwgMTcsIDEwLCAyNywgMjU0LCAxOTcsIDIsIDY2LCAyLCAKLSAgICA2NiwgNDAsIDE3LCAxMCwgMjcsIDI1NCwgMTk3LCAyLCA2NiwgMiwgNjYsIDY1LCAxNywgMTAsIDI3LCAyNTQsIDE5NywgMiwgCi0gICAgNjYsIDIsIDExMiwgMjMxLCAxOTMsIDQwLCAxNywgMTAsIDI3LCAyNDIsIDI0NSwgMiwgNjYsIDIsIDY2LCA0MCwgMTcsIDEwLCAKLSAgICAyNywgMjQyLCAyNDUsIDIsIDY2LCAyLCA3OSwgNDAsIDE3LCAxMCwgMjcsIDI0MiwgMjQ1LCAyLCA2NiwgMiwgMTEyLCAyMzEsIAotICAgIDE5MywgNDAsIDE3LCAxMCwgMjcsIDI0NCwgMTQzLCAyLCAyMzQsIDEzMCwgMiwgNjYsIDQwLCAxNywgMTAsIDI3LCAyNDQsIAotICAgIDE0MywgMiwgMjM0LCAxMzAsIDIsIDY2LCA2NSwgMTcsIDEwLCAyNywgMjI0LCA4MiwgMiwgNjYsIDIsIDEyMiwgNDAsIDE3LCAKLSAgICAxMCwgMjcsIDIyNCwgODIsIDIsIDY2LCAyLCA2NiwgNDAsIDE3LCAxMCwgMjcsIDIzMywgMTAzLCAyLCAxMjIsIDIsIDY2LCAKLSAgICA0MCwgMTcsIDEwLCAyNywgMjMzLCAxMDMsIDIsIDEyMiwgMiwgNzksIDQwLCAxNywgMTAsIDI3LCAyMzMsIDEwMywgMiwgCi0gICAgMTIyLCAyLCAxMTIsIDIzMSwgMTkzLCA0MCwgMTcsIDEwLCAyNywgMjMzLCAxMDMsIDIsIDE1MSwgMiwgMTUxLCA2NSwgMTcsIAotICAgIDEwLCAyNywgMjMzLCAxMDMsIDIsIDE1MSwgMiwgMTUxLCA0MCwgMTcsIDEwLCAyNywgMjMzLCAxMDMsIDIsIDIzNCwgMTMwLCAKLSAgICAyLCA2NiwgNDAsIDE3LCAxMCwgMjcsIDIzMywgMTAzLCAyLCAyMzQsIDEzMCwgMiwgNjYsIDY1LCAxNywgMTAsIDI3LCAyMzMsIAotICAgIDEwMywgMiwgNjYsIDIsIDEyMiwgNDAsIDE3LCAxMCwgMjcsIDIzMywgMTAzLCAyLCA2NiwgMiwgMTIyLCA2NSwgMTcsIDEwLCAKLSAgICAyNywgNjYsIDIsIDEyMiwgMiwgMTUxLCA2NSwgMTcsIDEwLCAyNywgNjYsIDIsIDEyMiwgMiwgNjYsIDY1LCAxNywgMTAsIAotICAgIDI3LCA2NiwgMiwgMTIyLCAyLCA3OSwgNDAsIDE3LCAxMCwgMjcsIDY2LCAyLCAxNTEsIDIsIDEyMiwgNjUsIDE3LCAxMCwgCi0gICAgMjcsIDY2LCAyLCAxNTEsIDIsIDY2LCA2NSwgMTcsIDEwLCAyNywgNjYsIDIsIDIzNCwgMTMwLCAyLCAxNTEsIDY1LCAxNywgCi0gICAgMTAsIDI3LCA2NiwgMiwgMjM0LCAxMzAsIDIsIDY2LCA2NSwgMTcsIDEwLCAyNywgNjYsIDIsIDE1MSwgMiwgMjM0LCAxMzAsIAotICAgIDY1LCAxNywgMTAsIDI3LCAyNDEsIDIxOSwgMiwgNjYsIDIsIDE1MSwgNjUsIDE3LCAxMCwgMjcsIDI0MSwgMjE5LCAyLCA2NiwgCi0gICAgMiwgNjYsIDY1LCAxNywgMTAsIDI3LCAyMjgsIDYzLCAyLCAxMjIsIDIsIDY2LCA2NSwgMTcsIDEwLCAyNywgMjI4LCA2MywgCi0gICAgMiwgMTIyLCAyLCAxMTIsIDIzMSwgMTkzLCA0MCwgMTcsIDEwLCAyNywgMjI4LCA2MywgMiwgMTUxLCAyLCA2NiwgNDAsIDE3LCAKLSAgICAxMCwgMjcsIDIyOCwgNjMsIDIsIDE1MSwgMiwgNjYsIDY1LCAxNywgMTAsIDI3LCAyMjgsIDYzLCAyLCAxNTEsIDIsIDExMiwgCi0gICAgMjMxLCAxOTMsIDQwLCAxNywgMTAsIDI3LCAyMjgsIDYzLCAyLCA2NiwgMiwgNzksIDQwLCAxNywgMTAsIDI3LCAyMjgsIDYzLCAKLSAgICAyLCA2NiwgMiwgMTEyLCAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIDc5LCAyLCA2NiwgMiwgNjYsIDQwLCAxNywgMTAsIAotICAgIDI3LCA3OSwgMiwgNjYsIDIsIDY2LCA2NSwgMTcsIDEwLCAyNywgMjUyLCA1NSwgMiwgMjM0LCAxMzAsIDIsIDc5LCA0MCwgCi0gICAgMTcsIDEwLCAyNywgMjE3LCA4LCAyLCAxNTEsIDIsIDc5LCA0MCwgMTcsIDEwLCAyNywgMjE3LCA4LCAyLCAxNTEsIDIsIAotICAgIDExMiwgMjMxLCAxOTMsIDQwLCAxNywgMTAsIDI3LCAyMTcsIDgsIDIsIDIzNCwgMTMwLCAyLCA3OSwgNDAsIDE3LCAxMCwgCi0gICAgMjcsIDIxNywgOCwgMiwgMjM0LCAxMzAsIDIsIDExMiwgMjMxLCAxOTMsIDQwLCAxNywgMTAsIDI3LCAyMTcsIDgsIDIsIDY2LCAKLSAgICAyLCA3OSwgNDAsIDE3LCAxMCwgMjcsIDIxNywgOCwgMiwgNjYsIDIsIDExMiwgMjMxLCAxOTMsIDQwLCAxNywgMTAsIDI3LCAKLSAgICAxNTEsIDIsIDY2LCAyLCA3OSwgNDAsIDE3LCAxMCwgMjcsIDE1MSwgMiwgMTIyLCAyLCAxMTIsIDIzMSwgMTkzLCA0MCwgMTcsIAotICAgIDEwLCAyNywgMTUxLCAyLCA2NiwgMiwgMTEyLCAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIDIyMSwgMTY3LCAyLCAyMzQsIAotICAgIDEzMCwgMiwgMTEyLCAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIDIyMiwgMjcsIDIsIDEyMiwgMiwgNzksIDQwLCAxNywgCi0gICAgMTAsIDI3LCAyMjAsIDYwLCAyLCAxMjIsIDIsIDc5LCA0MCwgMTcsIDEwLCAyNywgMjQ4LCAyMTcsIDIsIDEyMiwgMiwgNzksIAotICAgIDQwLCAxNywgMTAsIDI3LCAyMzMsIDEwMywgMiwgMTUxLCAyLCA3OSwgNDAsIDE3LCAxMCwgMjcsIDIzMywgMTAzLCAyLCA2NiwgCi0gICAgMiwgNzksIDQwLCAxNywgMTAsIDI3LCA3OSwgMiwgMTIyLCAyLCA3OSwgNDAsIDE3LCAxMCwgMjcsIDc5LCAyLCAxNTEsIDIsIAotICAgIDc5LCA0MCwgMTcsIDEwLCAyNywgNzksIDIsIDY2LCAyLCA3OSwgNDAsIDE3LCAxMCwgMjcsIDY2LCAyLCA2NiwgMiwgNzksIAotICAgIDQwLCAxNywgMTAsIDI3LCAyMjQsIDgyLCAyLCA2NiwgMiwgNzksIDQwLCAxNywgMTAsIDI3LCAyMjgsIDYzLCAyLCAxMjIsIAotICAgIDIsIDc5LCA0MCwgMTcsIDEwLCAyNywgMjI0LCA4MiwgMiwgNjYsIDIsIDEyMiwgNjUsIDE3LCAxMCwgMjcsIDIzMywgMTAzLCAKLSAgICAyLCAxMjIsIDIsIDY2LCA2NSwgMTcsIDEwLCAyNywgMjU0LCAxOTcsIDIsIDY2LCAyLCA3OSwgNDAsIDE3LCAxMCwgMjcsIAotICAgIDIzNCwgMjUxLCAyLCA2NiwgMiwgNzksIDQwLCAxNywgMTAsIDI3LCAyMjgsIDYzLCAyLCAxNTEsIDIsIDEyMiwgNjUsIDE3LCAKLSAgICAxMCwgMjcsIDY2LCAyLCAyMzQsIDEzMCwgMiwgNzksIDQwLCAxNywgMTAsIDI3LCAyMzMsIDEwMywgMiwgMTUxLCAyLCA2NiwgCi0gICAgNjUsIDE3LCAxMCwgMjcsIDIzNCwgMjUxLCAyLCA2NiwgMiwgNjYsIDQwLCAxNywgMTAsIDI3LCAyMzMsIDEwMywgMiwgMTUxLCAKLSAgICAyLCA2NiwgNDAsIDE3LCAxMCwgMjcsIDIyOCwgNjMsIDIsIDE1MSwgMiwgMTIyLCA0MCwgMTcsIDEwLCAyNywgMTUxLCAyLCAKLSAgICAxMjIsIDIsIDc5LCA0MCwgMTcsIDEwLCAyNywgMTIyLCAyLCAxNTEsIDIsIDc5LCA0MCwgMTcsIDEwLCAyNywgNjYsIDIsIAotICAgIDE1MSwgMiwgNzksIDQwLCAxNywgMTAsIDI3LCAyNDQsIDE0MywgMiwgNjYsIDIsIDc5LCA0MCwgMTcsIDEwLCAyNywgMjUyLCAKLSAgICA1NSwgMiwgMTIyLCAyLCA3OSwgNDAsIDE3LCAxMCwgMjcsIDIzNCwgMjUxLCAyLCA2NiwgMiwgNjYsIDY1LCAxNywgMTAsIAotICAgIDI3LCAyNTQsIDE5NywgMiwgMTUxLCAyLCA2NiwgNjUsIDE3LCAxMCwgMjcsIDIyMiwgMjcsIDIsIDY2LCAyLCA2NiwgNjUsIAotICAgIDE3LCAxMCwgMjcsIDIyMSwgMTY3LCAyLCAyMzQsIDEzMCwgMiwgNzksIDQwLCAxNywgMTAsIDI3LCAyMjgsIDYzLCAyLCAKLSAgICAxNTEsIDIsIDc5LCA0MCwgMTcsIDEwLCAyNywgMjIyLCA0LCAyMTQsIDEyOCwgMjUzLCAyMzgsIDIzNCwgNCwgMjE4LCAxMzAsIAotICAgIDUsIDUzLCAxNywgMTAsIDI3LCAyMjQsIDc4LCAyMTQsIDEyOCwgMjUzLCAyMzgsIDIzNCwgNCwgMjE4LCAxMzAsIDUsIDUzLCAKLSAgICAxNywgMTAsIDI3LCAyNTQsIDE1MywgNTMsIDE3LCAxMCwgMjcsIDI1NCwgMTgzLCA1MywgMTcsIDEwLCAyNywgMjMwLCAxNTMsIAotICAgIDUzLCAxNywgMTAsIDI3LCAyMjIsIDUsIDUzLCAxNywgMTAsIDI3LCAyMjMsIDE0MywgNTMsIDE3LCAxMCwgMjcsIDI1NCwgCi0gICAgMTcyLCA1MywgMTcsIDEwLCAyNywgMjEyLCA0OSwgNTMsIDE3LCAxMCwgMjcsIDIyMiwgNCwgNTMsIDE3LCAxMCwgMjcsIAotICAgIDIyMiwgMywgMjU0LCAxNzIsIDIxMiwgNDgsIDEwLCAyNywgMjM1LCAxMzQsIDIyMywgMzQsIDUwLCAxMCwgMjcsIDI1MSwgCi0gICAgMjMwLCAyNTQsIDM5LCAyNTQsIDQwLCA0NSwgMjIxLCAxNTYsIDQ1LCAyMjEsIDQ1LCA0NSwgMjIwLCAyMzMsIDQ1LCAyMjAsIAotICAgIDIyMiwgNDUsIDIyMCwgMjExLCA0NSwgMjIwLCAyMDAsIDQ1LCAyMjAsIDE4OSwgNDUsIDIyMCwgMTc4LCA0NSwgMjIwLCAKLSAgICAxNjcsIDQ1LCAyMjEsIDE1NSwgNDUsIDIyMSwgMTQ0LCA0NSwgMjIxLCAxMzMsIDQ1LCAyMjEsIDEyMiwgNDUsIDIyMSwgCi0gICAgMTExLCA0NSwgMjIxLCAxMDAsIDQ1LCAyMjEsIDg5LCAyMjQsIDE5NCwgMjQ0LCAyMCwgMzEsIDY3LCAyNDksIDIxOSwgMjI0LCAKLSAgICAxOTQsIDI0NCwgMjAsIDMxLCA2NywgMTA5LCAyNDksIDIxOSwgMjI0LCAxOTQsIDI0NCwgMjAsIDMxLCA2NywgMTA5LCAyNDMsIAotICAgIDIyOSwgMjE4LCAxMjksIDIyNCwgMTk0LCAyNDQsIDIwLCAzMSwgNjcsIDI0OSwgMjI2LCAyMjQsIDE5NCwgMjQ0LCAyMCwgCi0gICAgMzEsIDY3LCAyMjAsIDE1MCwgMjI0LCAxOTQsIDI0NCwgMjAsIDMxLCA2NywgMjQ1LCAzMSwgNzgsIDIyNCwgMTk0LCAyNDQsIAotICAgIDIwLCAzMSwgNjcsIDIyNCwgMTMsIDc4LCAyMjQsIDE5NCwgMjQ0LCAyMCwgMzEsIDY3LCA0MywgNzEsIDIzMywgMjAsIDEyNywgCi0gICAgMjI0LCAxOTQsIDI0NCwgMjAsIDMxLCA2NywgNDQsIDcxLCAyMzMsIDIwLCAyNTEsIDE1NiwgMjI0LCAxOTQsIDI0NCwgMjAsIAotICAgIDMxLCA2NywgMjAzLCAyNDUsIDE2MywgMzgsIDI3LCA0MywgMjQyLCAyNywgMzgsIDI3LCA0NCwgMjQyLCAyNywgMzgsIDUyLCAKLSAgICAyMTYsIDg5LCA0MywgMjQyLCAyNywgMzgsIDUyLCAyMTYsIDg5LCA0NCwgMjQyLCAyNywgMzgsIDIzMSwgMjMzLCA0MywgCi0gICAgMjQyLCAyNywgMzgsIDIzMSwgMjMzLCA0NCwgMjQyLCAyNywgMzgsIDI0OSwgMTk3LCAyMzEsIDIzMiwgMjI0LCAxOTQsIAotICAgIDI0NCwgMjAsIDMxLCA2NywgMTEzLCA1OSwgMjMzLCA1NiwgMjI0LCAxOTQsIDI0NCwgMjAsIDMxLCA2NywgMjQ1LCAxNjAsIAotICAgIDI0OCwgMTU2LCAyMjQsIDE5NCwgMjQ0LCAyMCwgMzEsIDY3LCAyNDUsIDE1MSwgMjQ4LCAxNTYsIDIyNCwgMTk0LCAyNDQsIAotICAgIDIwLCAzMSwgNjcsIDEyMSwgMjMyLCAyMTMsIDIyNCwgMTk0LCAyNDQsIDIwLCAzMSwgNjcsIDIxMiwgMzIsIDEyMSwgMjMyLCAKLSAgICAyMTMsIDIyNCwgMTk0LCAyNDQsIDIwLCAzMSwgNjcsIDQzLCAyMjYsIDMsIDIyNCwgMTk0LCAyNDQsIDIwLCAzMSwgNjcsIAotICAgIDQ0LCAyMjYsIDMsIDIyNCwgMTk0LCAyNDQsIDIwLCAzMSwgNjcsIDQzLCAyNDksIDk5LCAxMjcsIDIyNCwgMTk0LCAyNDQsIAotICAgIDIwLCAzMSwgNjcsIDQ0LCAyNDksIDk5LCAxMjcsIDIyNCwgMTk0LCAyNDQsIDIwLCAzMSwgNjcsIDQzLCAyMTYsIDYsIDIyMCwgCi0gICAgNTMsIDEyNywgMjI0LCAxOTQsIDI0NCwgMjAsIDMxLCA2NywgNDQsIDIxNiwgNiwgMjIwLCA1MywgMTI3LCAyMjQsIDE5NCwgCi0gICAgMjQ0LCAyMCwgMzEsIDY3LCA0MywgODUsIDIzMywgMjAsIDEyNywgMjI0LCAxOTQsIDI0NCwgMjAsIDMxLCA2NywgNDQsIDg1LCAKLSAgICAyMzMsIDIwLCAxMjcsIDIyNCwgMTk0LCAyNDQsIDIwLCAzMSwgNjcsIDQzLCA1MiwgMjU0LCAxMTAsIDEyNywgMjI0LCAxOTQsIAotICAgIDI0NCwgMjAsIDMxLCA2NywgNDQsIDUyLCAyNTQsIDExMCwgMTI3LCAyMjQsIDE5NCwgMjQ0LCAyMCwgMzEsIDY3LCA0MywgCi0gICAgMjU0LCAxMTAsIDEyNywgMjI0LCAxOTQsIDI0NCwgMjAsIDMxLCA2NywgNDQsIDI1NCwgMTEwLCAxMjcsIDIyNCwgMTk0LCAKLSAgICAyNDQsIDIwLCAzMSwgNjcsIDQzLCAyNDksIDE2MSwgMTI3LCAyMjQsIDE5NCwgMjQ0LCAyMCwgMzEsIDY3LCA0NCwgMjQ5LCAKLSAgICAxNjEsIDEyNywgMjI0LCAxOTQsIDI0NCwgMjAsIDMxLCA2NywgNDMsIDcxLCAyNDksIDE2MSwgMTI3LCAyMjQsIDE5NCwgCi0gICAgMjQ0LCAyMCwgMzEsIDY3LCA0NCwgNzEsIDI0OSwgMTYxLCAxMjcsIDIyMCwgMTMxLCAyNDcsIDEyMCwgNzEsIDIyMCwgMTMxLCAKLSAgICAyNDcsIDEyMCwgMjI0LCAxOTQsIDI0NCwgMjAsIDMxLCA2NywgNDMsIDQyLCAxMjcsIDIyNCwgMTk0LCAyNDQsIDIwLCAzMSwgCi0gICAgNjcsIDQ0LCA0MiwgMTI3LCAyNDgsIDE1NSwgMjI2LCAxMTksIDI1MCwgMTcyLCAyMjYsIDExOSwgMjEyLCAzMiwgMjI2LCAKLSAgICAxMTksIDUyLCAyMTIsIDMyLCAyMjYsIDExOSwgMjQ4LCAxNTUsIDEyMSwgMjMyLCAyMTMsIDI1MCwgMTcyLCAxMjEsIDIzMiwgCi0gICAgMjEzLCAyMTIsIDMyLCAxMjEsIDIzMiwgMjEzLCA0LCAyNDksIDIxOSwgNCwgMTA5LCAyNDksIDIxOSwgNCwgMjQzLCAyMjksIAotICAgIDIxOCwgMTI5LCA0LCAyMjAsIDE1MCwgNCwgMjQ5LCAyMjYsIDQsIDIyNCwgMTMsIDc4LCA0LCAyNDUsIDMxLCA3OCwgNCwgCi0gICAgMjQ1LCAxNjAsIDI0OCwgMTU2LCA0LCA0MywgMjI2LCAzLCA0LCA0NCwgMjI2LCAzLCA0LCA0MywgMjQ5LCA5OSwgMTI3LCA0LCAKLSAgICA0NCwgMjQ5LCA5OSwgMTI3LCA0LCA0MywgMjE2LCA2LCAyMjAsIDUzLCAxMjcsIDQsIDQ0LCAyMTYsIDYsIDIyMCwgNTMsIAotICAgIDEyNywgNCwgNTQsIDUwLCA0LCAyNTQsIDEyNiwgNCwgMjUzLCAyMTYsIDQsIDk2LCA1MCwgNCwgMjQwLCAxNjcsIDQsIDIzMywgCi0gICAgMTUsIDUwLCA0LCAyNDIsIDEzMCwgNTAsIDQsIDI0NSwgOTgsIDUwLCA0LCAyMjMsIDUwLCAyMTksIDQ2LCA0LCAyNDcsIAotICAgIDEzMiwgNTAsIDQsIDIyNSwgMTgyLCA1MCwgNCwgMjQ5LCAyMTcsIDI1MywgMjA2LCAxMCwgMjQ0LCAxNjQsIDUzLCAxNywgCi0gICAgMTAsIDIxNywgNDQsIDIsIDI0NCwgMTY0LCA0OCwgMTAsIDI0OCwgMTgzLCA1MywgMTcsIDEwLCAyMTcsIDc4LCAyNDQsIDEsIAotICAgIDEwLCAyMzQsIDIwNCwgNTMsIDE3LCAxMCwgMjQ0LCAxNjYsIDUzLCAxNywgMTAsIDI0NCwgMTY2LCAxNDcsIDE3LCAxMCwgCi0gICAgMjQ4LCAxODUsIDUzLCAxNywgMTAsIDI0OCwgMTg1LCAxNDcsIDE3LCAxMCwgMjM0LCAyMDYsIDUzLCAxNywgMTAsIDIzNCwgCi0gICAgMjA2LCAxNDcsIDE3LCAxMCwgMjIwLCA5NCwgNTMsIDE3LCAxMCwgMjIwLCA5NCwgMTQ3LCAxNywgMTAsIDIxOCwgNDYsIDUzLCAKLSAgICAxNywgMTAsIDIxOCwgNDYsIDE0NywgMTcsIDEwLCAxLCAyMDIsIDUzLCAxNywgMTAsIDEsIDExMiwgMiwgMjMxLCAyMjgsIAotICAgIDc3LCA1MywgMTcsIDEwLCAxLCAxMTIsIDIsIDIzMSwgMjI4LCA3NywgNDAsIDE3LCAxMCwgMSwgMTEyLCAyLCAyMDIsIDc3LCAKLSAgICA1MywgMTcsIDEwLCAxLCAxMTIsIDIsIDIwMiwgNzcsIDQwLCAxNywgMTAsIDEsIDIxMiwgMzEsIDIsIDIwMiwgNzcsIDUzLCAKLSAgICAxNywgMTAsIDEsIDIxMiwgMzEsIDIsIDIwMiwgNzcsIDQwLCAxNywgMTAsIDEsIDExMiwgMiwgMjAyLCAyNTIsIDQzLCA1MywgCi0gICAgMTcsIDEwLCAxLCAxMTIsIDIsIDIwMiwgMjUyLCA0MywgNDAsIDE3LCAxMCwgMSwgNzksIDIsIDIwMiwgNzcsIDUzLCAxNywgCi0gICAgMTAsIDEsIDc5LCAyLCAyMDIsIDc3LCA0MCwgMTcsIDEwLCAxLCA3OSwgMiwgMjAyLCA3NywgNjUsIDE3LCAxMCwgMSwgNzksIAotICAgIDIsIDIwMiwgNzcsIDE0NywgMTcsIDEwLCAxLCAxMTIsIDUzLCAxNywgMTAsIDEsIDExMiwgNDAsIDE3LCAxMCwgMSwgMjUyLCAKLSAgICA1NSwgNTMsIDE3LCAxMCwgMSwgMjUyLCA1NSwgNDAsIDE3LCAxMCwgMSwgMjUyLCA1NSwgNjUsIDE3LCAxMCwgMSwgMjUyLCAKLSAgICA1NSwgMTQ3LCAxNywgMTAsIDEsIDIxNywgOCwgMjMxLCAxNjUsIDUzLCAxNywgMTAsIDEsIDIxNywgOCwgMjMxLCAxNjUsIAotICAgIDQwLCAxNywgMTAsIDEsIDIxNywgOCwgNTMsIDE3LCAxMCwgMSwgMjE3LCA4LCA0MCwgMTcsIDEwLCAxLCAyMTcsIDgsIDY1LCAKLSAgICAxNywgMTAsIDEsIDIxNywgOCwgMTQ3LCAxNywgMTAsIDEsIDIxNiwgMTkzLCA1MywgMTcsIDEwLCAxLCAyMTYsIDE5MywgNDAsIAotICAgIDE3LCAxMCwgMSwgMjE2LCAxOTMsIDY1LCAxNywgMTAsIDEsIDIxNiwgMTkzLCAxNDcsIDE3LCAxMCwgMSwgMTUxLCA1MywgCi0gICAgMTcsIDEwLCAxLCAxNTEsIDQwLCAxNywgMTAsIDEsIDE1MSwgNjUsIDE3LCAxMCwgMSwgMTUxLCAxNDcsIDE3LCAxMCwgMSwgCi0gICAgMTIyLCA1MywgMTcsIDEwLCAxLCAxMjIsIDQwLCAxNywgMTAsIDEsIDEyMiwgNjUsIDE3LCAxMCwgMSwgMTIyLCAxNDcsIDE3LCAKLSAgICAxMCwgMSwgMjM0LCAxMzAsIDUzLCAxNywgMTAsIDEsIDIzNCwgMTMwLCA0MCwgMTcsIDEwLCAxLCAyMzQsIDEzMCwgNjUsIAotICAgIDE3LCAxMCwgMSwgMjM0LCAxMzAsIDE0NywgMTcsIDEwLCAxLCAyNDgsIDE5NiwgNTMsIDE3LCAxMCwgMSwgMjQ4LCAxOTYsIAotICAgIDQwLCAxNywgMTAsIDEsIDIxNiwgMjAzLCA1MywgMTcsIDEwLCAxLCAyMTYsIDIwMywgNDAsIDE3LCAxMCwgMSwgMjIzLCA5NiwgCi0gICAgNTMsIDE3LCAxMCwgMSwgMjIzLCA5NiwgNDAsIDE3LCAxMCwgMSwgMjEwLCAxMDksIDUzLCAxNywgMTAsIDEsIDIxMCwgMTA5LCAKLSAgICA0MCwgMTcsIDEwLCAxLCAyMjEsIDE2NywgNTMsIDE3LCAxMCwgMSwgMjIxLCAxNjcsIDQwLCAxNywgMTAsIDEsIDIyMSwgCi0gICAgMTY3LCA2NSwgMTcsIDEwLCAxLCAyMjEsIDE2NywgMTQ3LCAxNywgMTAsIDEsIDIyMCwgNjAsIDUzLCAxNywgMTAsIDEsIAotICAgIDIyMCwgNjAsIDQwLCAxNywgMTAsIDEsIDIyMCwgNjAsIDY1LCAxNywgMTAsIDEsIDIyMCwgNjAsIDE0NywgMTcsIDEwLCAxLCAKLSAgICAyMjIsIDI3LCA1MywgMTcsIDEwLCAxLCAyMjIsIDI3LCA0MCwgMTcsIDEwLCAxLCAyMjIsIDI3LCA2NSwgMTcsIDEwLCAxLCAKLSAgICAyMjIsIDI3LCAxNDcsIDE3LCAxMCwgMSwgMjQ4LCAyMTcsIDUzLCAxNywgMTAsIDEsIDI0OCwgMjE3LCA0MCwgMTcsIDEwLCAKLSAgICAxLCAyNDgsIDIxNywgNjUsIDE3LCAxMCwgMSwgMjQ4LCAyMTcsIDE0NywgMTcsIDEwLCAxLCAyMTcsIDgxLCA1MywgMTcsIAotICAgIDEwLCAxLCAyMTcsIDgxLCA0MCwgMTcsIDEwLCAxLCAyMTcsIDgxLCA2NSwgMTcsIDEwLCAxLCAyMTcsIDgxLCAxNDcsIDE3LCAKLSAgICAxMCwgMSwgMjEwLCAxMTIsIDUzLCAxNywgMTAsIDEsIDIxMCwgMTEyLCA0MCwgMTcsIDEwLCAxLCAyMTAsIDExMiwgNjUsIAotICAgIDE3LCAxMCwgMSwgMjEwLCAxMTIsIDE0NywgMTcsIDEwLCAxLCAyNTQsIDE5NywgNTMsIDE3LCAxMCwgMSwgMjU0LCAxOTcsIAotICAgIDQwLCAxNywgMTAsIDEsIDI1NCwgMTk3LCA2NSwgMTcsIDEwLCAxLCAyNTQsIDE5NywgMTQ3LCAxNywgMTAsIDEsIDI0MiwgCi0gICAgMjQ1LCA1MywgMTcsIDEwLCAxLCAyNDIsIDI0NSwgNDAsIDE3LCAxMCwgMSwgMjQyLCAyNDUsIDY1LCAxNywgMTAsIDEsIAotICAgIDI0MiwgMjQ1LCAxNDcsIDE3LCAxMCwgMSwgMjQ0LCAxNDMsIDUzLCAxNywgMTAsIDEsIDI0NCwgMTQzLCA0MCwgMTcsIDEwLCAKLSAgICAxLCAyNDQsIDE0MywgNjUsIDE3LCAxMCwgMSwgMjQ0LCAxNDMsIDE0NywgMTcsIDEwLCAxLCAyMjQsIDgyLCA1MywgMTcsIAotICAgIDEwLCAxLCAyMjQsIDgyLCA0MCwgMTcsIDEwLCAxLCAyMjQsIDgyLCA2NSwgMTcsIDEwLCAxLCAyMjQsIDgyLCAxNDcsIDE3LCAKLSAgICAxMCwgMSwgMjM0LCAyNTEsIDUzLCAxNywgMTAsIDEsIDIzNCwgMjUxLCA0MCwgMTcsIDEwLCAxLCAyMzQsIDI1MSwgNjUsIAotICAgIDE3LCAxMCwgMSwgMjM0LCAyNTEsIDE0NywgMTcsIDEwLCAxLCAyMzMsIDEwMywgNTMsIDE3LCAxMCwgMSwgMjMzLCAxMDMsIAotICAgIDQwLCAxNywgMTAsIDEsIDIzMywgMTAzLCA2NSwgMTcsIDEwLCAxLCAyMzMsIDEwMywgMTQ3LCAxNywgMTAsIDEsIDY2LCA1MywgCi0gICAgMTcsIDEwLCAxLCA2NiwgNDAsIDE3LCAxMCwgMSwgNjYsIDY1LCAxNywgMTAsIDEsIDY2LCAxNDcsIDE3LCAxMCwgMSwgMjI4LCAKLSAgICA2MywgNTMsIDE3LCAxMCwgMSwgMjI4LCA2MywgNDAsIDE3LCAxMCwgMSwgMjI4LCA2MywgNjUsIDE3LCAxMCwgMSwgMjI4LCAKLSAgICA2MywgMTQ3LCAxNywgMTAsIDEsIDI0MSwgMjE5LCA1MywgMTcsIDEwLCAxLCAyNDEsIDIxOSwgNDAsIDE3LCAxMCwgMSwgCi0gICAgMjQxLCAyMTksIDY1LCAxNywgMTAsIDEsIDI0MSwgMjE5LCAxNDcsIDE3LCAxMCwgMSwgMjEyLCAzMSwgNTMsIDE3LCAxMCwgCi0gICAgMSwgMjEyLCAzMSwgNDAsIDE3LCAxMCwgMSwgMTEyLCAyMzEsIDE5MywgNTMsIDE3LCAxMCwgMSwgMTEyLCAyMzEsIDE5MywgCi0gICAgNDAsIDE3LCAxMCwgMSwgNzksIDUzLCAxNywgMTAsIDEsIDc5LCA0MCwgMTcsIDEwLCAxLCA3OSwgNjUsIDE3LCAxMCwgMSwgCi0gICAgNzksIDE0NywgMTcsIDEwLCAyNywgMjMzLCAxMDMsIDIsIDExMiwgMiwgMjMxLCAyMjgsIDc3LCA1MywgMTcsIDEwLCAyNywgCi0gICAgMjMzLCAxMDMsIDIsIDExMiwgMiwgMjMxLCAyMjgsIDc3LCA0MCwgMTcsIDEwLCAyNywgMjMzLCAxMDMsIDIsIDExMiwgMiwgCi0gICAgMjAyLCA3NywgNTMsIDE3LCAxMCwgMjcsIDIzMywgMTAzLCAyLCAxMTIsIDIsIDIwMiwgNzcsIDQwLCAxNywgMTAsIDI3LCAKLSAgICAyMzMsIDEwMywgMiwgMTEyLCAyLCAyMDIsIDI1MiwgNDMsIDUzLCAxNywgMTAsIDI3LCAyMzMsIDEwMywgMiwgMTEyLCAyLCAKLSAgICAyMDIsIDI1MiwgNDMsIDQwLCAxNywgMTAsIDI3LCAyMzMsIDEwMywgMiwgMTEyLCA1MywgMTcsIDEwLCAyNywgMjMzLCAxMDMsIAotICAgIDIsIDExMiwgNDAsIDE3LCAyMTAsIDg3LCAyMTEsIDI0NSwgMjI4LCA3MywgMjE5LCAxOCwgMTI2LCAyNDUsIDMxLCA3OCwgCi0gICAgMTI2LCAyMjMsIDI1NCwgNzgsIDEyNiwgNTQsIDUwLCAxMjYsIDI0NywgMTMyLCA1MCwgMTI2LCAyMjUsIDE4MiwgNTAsIAotICAgIDEyNiwgMjU0LCAxMjYsIDEyNiwgMjU0LCA1NywgMTI2LCA0MywgMjI2LCAzLCAxMjYsIDQ0LCAyMjYsIDMsIDEyNiwgMjUzLCAKLSAgICAyMTYsIDEyNiwgOTYsIDUwLCAxMjYsIDI0OSwgMjE5LCAxMjYsIDI0MCwgMTY3LCAxMjYsIDI0MywgMjI5LCAyMTgsIDEyOSwgCi0gICAgMTI2LCAyMTksIDQ2LCAxMjYsIDIxLCAyMTAsIDg2LCAxMjYsIDIxLCAxMTAsIDEyNiwgMjEsIDEwNSwgMTI2LCAyMSwgMTU4LCAKLSAgICAxMjYsIDIxLCAxNjEsIDEyNiwgMjEsIDE4OSwgMTI2LCAyMSwgMTk0LCAxMjYsIDIxLCAxOTgsIDEyNiwgMjEsIDE5NSwgCi0gICAgMTI2LCAyMSwgMjAwLCAxMjYsIDI0OSwgMjI2LCAxMjYsIDIyMCwgMTUwLCAxMjYsIDIzMywgMTUsIDUwLCAxMjYsIDI0NSwgCi0gICAgOTgsIDUwLCAxMjYsIDI0MiwgMTMwLCA1MCwgMTI2LCAyMjQsIDEzLCA3OCwgMTI2LCAyNDksIDIxNywgMjUzLCAyMDYsIAotICAgIDEyNiwgNywgNiwgMSwgNjEsIDEyNiwgNywgNiwgMSwgMjUzLCAxNTgsIDEyNiwgNywgNiwgMSwgMjUxLCA2NiwgMTI2LCA3LCAKLSAgICA2LCAxLCAyNDksIDYwLCAxMjYsIDcsIDYsIDEsIDc1LCAxMjYsIDcsIDYsIDEsIDI0NSwgNiwgMTI2LCA3LCA2LCAxLCAyNDMsIAotICAgIDIwMiwgMTI2LCA3LCA2LCAxLCAyNDIsIDYwLCAxMjYsIDcsIDYsIDEsIDczLCAxMjYsIDcsIDYsIDEsIDIzNSwgMTQ0LCAKLSAgICAxMjYsIDcsIDYsIDEsIDIzNSwgMjMsIDEyNiwgNywgNiwgMSwgMTU2LCAxMjYsIDcsIDYsIDEsIDE5MywgMTI2LCA3LCA2LCAKLSAgICAxLCAyMzAsIDI1LCAxMjYsIDcsIDYsIDEsIDc2LCAxMjYsIDcsIDYsIDEsIDIyNiwgMTA1LCAxMjYsIDcsIDYsIDEsIDIyNCwgCi0gICAgOTYsIDEyNiwgNywgNiwgMSwgMTUzLCAxMjYsIDcsIDYsIDEsIDIyMiwgOTEsIDEyNiwgNywgNiwgMSwgMjE3LCAxNTIsIAotICAgIDEyNiwgNywgNiwgMSwgNzAsIDEyNiwgNywgNiwgMSwgMjE0LCAxMDUsIDEyNiwgNywgNiwgMSwgMjEyLCA5OCwgMTI2LCA3LCAKLSAgICA2LCAxLCAyMTEsIDE3OCwgMTI2LCA3LCA2LCAxLCAyMTEsIDExNywgMTI2LCA3LCA2LCAxLCAyMTAsIDE1OSwgMTI2LCA0MywgCi0gICAgNDIsIDEyNywgMTI2LCAyMjMsIDUwLCAyMTksIDQ2LCAxMjYsIDQ0LCA0MiwgMTI3LCAxMjYsIDI1MCwgMzEsIDI1NSwgMTQsIAotICAgIDEyNiwgMTIxLCAyMzIsIDIxMywgMTI2LCAyNDIsIDEzNywgMjU1LCAxNCwgMTI2LCA3LCA0LCAxLCA2MSwgMTI2LCA3LCA0LCAKLSAgICAxLCAyNTMsIDE1OCwgMTI2LCA3LCA0LCAxLCAyNTEsIDY2LCAxMjYsIDcsIDQsIDEsIDI0OSwgNjAsIDEyNiwgNywgNCwgMSwgCi0gICAgNzUsIDEyNiwgNywgNCwgMSwgMjQ1LCA2LCAxMjYsIDcsIDQsIDEsIDI0MywgMjAyLCAxMjYsIDcsIDQsIDEsIDI0MiwgNjAsIAotICAgIDEyNiwgNywgNCwgMSwgNzMsIDEyNiwgNywgNCwgMSwgMjM1LCAxNDQsIDEyNiwgNywgNCwgMSwgMjM1LCAyMywgMTI2LCA3LCAKLSAgICA0LCAxLCAxNTYsIDEyNiwgNywgNCwgMSwgMTkzLCAxMjYsIDcsIDQsIDEsIDIzMCwgMjUsIDEyNiwgNywgNCwgMSwgNzYsIAotICAgIDEyNiwgNywgNCwgMSwgMjI2LCAxMDUsIDEyNiwgNywgNCwgMSwgMjI0LCA5NiwgMTI2LCA3LCA0LCAxLCAxNTMsIDEyNiwgNywgCi0gICAgNCwgMSwgMjIyLCA5MSwgMTI2LCA3LCA0LCAxLCAyMTcsIDE1MiwgMTI2LCA3LCA0LCAxLCA3MCwgMTI2LCA3LCA0LCAxLCAKLSAgICAyMTQsIDEwNSwgMTI2LCA3LCA0LCAxLCAyMTIsIDk4LCAxMjYsIDcsIDQsIDEsIDIxMSwgMTc4LCAxMjYsIDcsIDQsIDEsIAotICAgIDIxMSwgMTE3LCAxMjYsIDcsIDQsIDEsIDIxMCwgMTU5LCAxMjYsIDQzLCAyNDksIDk5LCAxMjcsIDEyNiwgNjcsIDIzMiwgCi0gICAgMjEzLCAxMjYsIDQ0LCAyNDksIDk5LCAxMjcsIDEyNiwgMTgyLCAxMjYsIDQzLCA3MSwgMjI2LCAzLCAxMjYsIDQ0LCA3MSwgCi0gICAgMjI2LCAzLCAxMDEsIDEwOSwgMjQzLCAyMjksIDIxOCwgMTI5LCAxMDEsIDQzLCAyNDksIDE2MSwgMTI3LCAxMDEsIDQ0LCAKLSAgICAyNDksIDE2MSwgMTI3LCAxMDEsIDEwOSwgMjQ5LCAyMTksIDEwMSwgNTYsIDIzMCwgMjI0LCAyNDcsIDEyMCwgMTAxLCA1NiwgCi0gICAgMSwgMjExLCAyMjcsIDEwMSwgNTYsIDEsIDQsIDYxLCAxMDEsIDU2LCAxLCA0LCA3MywgMTAxLCA1NiwgMSwgNCwgNzAsIAotICAgIDEwMSwgNTYsIDEsIDQsIDc1LCAxMDEsIDU2LCAxLCA0LCA3NiwgMTAxLCA1NiwgMSwgNCwgMTkxLCAxMDEsIDU2LCAxLCA0LCAKLSAgICAyMTAsIDIxMiwgMTAxLCA1NiwgMSwgNCwgMjEwLCAyNDQsIDEwMSwgNTYsIDEsIDQsIDIxNSwgMTE4LCAxMDEsIDIzNCwgCi0gICAgMjAxLCAyMjQsIDE3MywgMjE5LCAzMSwgNzgsIDEwMSwgNTYsIDEsIDYxLCAxMDEsIDU2LCAxLCA3MywgMTAxLCA1NiwgMSwgCi0gICAgNzAsIDEwMSwgNTYsIDEsIDc1LCAxMDEsIDU2LCAxLCA3NiwgMTAxLCA1NiwgMSwgMTc2LCAxMDEsIDU2LCAxLCAyMzQsIDkyLCAKLSAgICAxMDEsIDU2LCAxLCAyMzMsIDIxNywgMTAxLCA1NiwgMSwgMjM0LCAxODIsIDEwMSwgNTYsIDEsIDIzNCwgMjgsIDEwMSwgNTYsIAotICAgIDEsIDIwNiwgMTAxLCA1NiwgMSwgMjE5LCAxOTEsIDEwMSwgNTYsIDEsIDIxOCwgODMsIDEwMSwgNTYsIDEsIDIyMSwgMTgxLCAKLSAgICAxMDEsIDU2LCAxLCAyMTksIDU4LCAxMDEsIDU2LCAxLCAyMTcsIDEwNSwgMTAxLCA1NiwgMSwgMjE2LCAxMTcsIDEwMSwgNTYsIAotICAgIDEsIDIxNSwgMTE4LCAxMDEsIDU2LCAxLCAyMTcsIDIyLCAxMDEsIDU2LCAxLCAxMTEsIDEwMSwgNTYsIDEsIDE5NywgMTAxLCAKLSAgICA1NiwgMSwgMjI4LCAyMzMsIDEwMSwgNTYsIDEsIDIyNywgMjM3LCAxMDEsIDU2LCAxLCAyMjksIDEwNywgMTAxLCA1NiwgMSwgCi0gICAgMjI4LCA3NCwgMTAxLCA1NiwgMSwgMTYyLCAxMDEsIDU2LCAxLCAyNDEsIDE4MCwgMTAxLCA1NiwgMSwgMjQwLCAyMjIsIAotICAgIDEwMSwgNTYsIDEsIDI0MSwgMjM4LCAxMDEsIDU2LCAxLCAyNDEsIDY4LCAxMDEsIDU2LCAxLCAxODQsIDEwMSwgNTYsIDEsIAotICAgIDIzMCwgMjMwLCAxMDEsIDU2LCAxLCAyMzAsIDEwMiwgMTAxLCA1NiwgMSwgMjMxLCA5MSwgMTAxLCA1NiwgMSwgMjMwLCAKLSAgICAxNjEsIDEwMSwgNTYsIDEsIDE5MSwgMTAxLCA1NiwgMSwgMjEwLCAyMTIsIDEwMSwgNTYsIDEsIDIxMCwgMjQ0LCAxMDEsIAotICAgIDU2LCAxLCAyMDUsIDEwMSwgNTYsIDEsIDIyMywgMzUsIDEwMSwgNTYsIDEsIDIyMiwgMTQwLCAxMDEsIDU2LCAxLCAyMjMsIAotICAgIDEyOCwgMTAxLCA1NiwgMSwgMjIyLCAyMTEsIDEwMSwgNTYsIDEsIDIxMiwgNjUsIDEwMSwgNTYsIDEsIDIzMCwgMjUsIDEwMSwgCi0gICAgNTYsIDIxMywgMTM1LCAyMTksIDMxLCA3OCwgMTAxLCA1NiwgMjIwLCAxNTUsIDIxOSwgMzEsIDc4LCAxMDEsIDI0LCAyNDQsIAotICAgIDEwMywgMTAxLCAyNCwgMSwgMjM0LCA1OCwgMTAxLCAyNCwgMSwgMjE4LCAyMTUsIDEwMSwgMjQsIDEsIDIzNCwgNTEsIDEwMSwgCi0gICAgMjQsIDEsIDIyOCwgMjI2LCAxMDEsIDI0LCAxLCAyMjgsIDIyNCwgMTAxLCAyNCwgMSwgMjI4LCAyMjMsIDEwMSwgMjQsIDEsIAotICAgIDIxNiwgMTAxLCAxMDEsIDI0LCAxLCAyMTgsIDIwNCwgMTAxLCAyNCwgMSwgMjIzLCAyNiwgMTAxLCAyNCwgMSwgMjIzLCAyMSwgCi0gICAgMTAxLCAyNCwgMSwgMjIzLCAxOCwgMTAxLCAyNCwgMSwgMjIzLCAxMSwgMTAxLCAyNCwgMSwgMjIzLCA2LCAxMDEsIDI0LCAxLCAKLSAgICAyMjMsIDEsIDEwMSwgMjQsIDEsIDIyMywgMTIsIDEwMSwgMjQsIDEsIDIyMywgMjQsIDEwMSwgMjQsIDEsIDIzMCwgMjE3LCAKLSAgICAxMDEsIDI0LCAxLCAyMjUsIDk1LCAxMDEsIDI0LCAxLCAyMTgsIDIxMiwgMTAxLCAyNCwgMSwgMjI1LCA4NCwgMTAxLCAyNCwgCi0gICAgMSwgMjE5LCAxNDgsIDEwMSwgMjQsIDEsIDIxOCwgMjA5LCAxMDEsIDI0LCAxLCAyMzYsIDU2LCAxMDEsIDI0LCAxLCAyNTAsIAotICAgIDQ2LCAxMDEsIDI0LCAxLCAyMTgsIDIxOSwgMTAxLCAyNCwgMSwgMjUwLCAxMDYsIDEwMSwgMjQsIDEsIDIzNCwgMTEwLCAKLSAgICAxMDEsIDI0LCAxLCAyMTYsIDE3MywgMTAxLCAyNCwgMSwgMjI1LCAxMzEsIDEwMSwgMjQsIDEsIDI0MSwgMTcyLCAxMDEsIAotICAgIDI0LCAxLCA2MSwgMTAxLCAyNCwgMSwgMjU0LCAyNDMsIDEwMSwgMjQsIDEsIDE5MSwgMTAxLCAyNCwgMSwgMjExLCA5MiwgCi0gICAgMTAxLCAyNCwgMSwgMjQ1LCAxMTcsIDEwMSwgMjQsIDEsIDc1LCAxMDEsIDI0LCAxLCAyMTEsIDM2LCAxMDEsIDI0LCAxLCAKLSAgICAyMTEsIDQ3LCAxMDEsIDI0LCAxLCA3NiwgMTAxLCAyNCwgMSwgMjEyLCA2NSwgMTAxLCAyNCwgMSwgMjEyLCA2MiwgMTAxLCAKLSAgICAyNCwgMSwgMjI2LCAyMzQsIDEwMSwgMjQsIDEsIDIxMCwgMjQ0LCAxMDEsIDI0LCAxLCA3MCwgMTAxLCAyNCwgMSwgMjEyLCAKLSAgICAxMSwgMTAxLCAyNCwgMSwgMjEyLCAyMiwgMTAxLCAyNCwgMSwgMjExLCAyNTAsIDEwMSwgMjQsIDEsIDIxMCwgMjEyLCAxMDEsIAotICAgIDI0LCAxLCAyNDUsIDU1LCAxMDEsIDI0LCAxLCAyMTEsIDgsIDEwMSwgMjQsIDEsIDczLCAxMjYsIDI1MCwgMTc2LCA1MCwgCi0gICAgMTI2LCAyMjQsIDIyOCwgNTAsIDEyNiwgMjI4LCA1MiwgNTAsIDEyNiwgMjMxLCAyMzIsIDEyNiwgMjUxLCAxMzUsIDEzMCwgCi0gICAgMTI2LCAyMTEsIDQwLCA1MCwgMTI2LCAyMTEsIDIxNywgNTAsIDEwMSwgMjQ0LCAxOCwgMTkyLCAyMTMsIDIzOSwgMTAxLCAKLSAgICAxNDAsIDc0LCAxMDEsIDIxNCwgMTUzLCA3NCwgMTAxLCA5NywgNzQsIDEwMSwgMjQ2LCAxMDQsIDc0LCAxMDEsIDg1LCAyMTgsIAotICAgIDIzNCwgMTAxLCA3MSwgMjUwLCAzNSwgMjM1LCAyMDQsIDI1NCwgOTksIDI1NCwgMTIwLCAyMzUsIDIwNCwgMjU0LCA5OSwgCi0gICAgMjIwLCAxMzcsIDIzNSwgMjA0LCAyNTQsIDk5LCAyMTYsIDIzNiwgMjI2LCAyNDksIDIyMywgNzIsIDI1MCwgMTQyLCAyMjMsIAotICAgIDcyLCAyNTAsIDE0MiwgNjIsIDU3LCAzLCAyNTMsIDE0MiwgNjEsIDYyLCA1NywgMywgMjUzLCAxMTEsIDc1LCA2MiwgNTcsIAotICAgIDMsIDI1MywgMTIwLCA3MywgNjIsIDU3LCAzLCAyNTMsIDg4LCA3NiwgNjIsIDU3LCAzLCAyNTMsIDEzOCwgNzAsIDYyLCA1NywgCi0gICAgMywgMjUzLCAxNTcsIDI0OCwgMjIxLCA2MiwgNTcsIDMsIDI1MywgMTA0LCAyNDgsIDkwLCA2MiwgNTcsIDMsIDI1MywgMTQ0LCAKLSAgICAyNDgsIDMsIDYyLCA1NywgMywgMjUzLCAxMzQsIDI0NywgMTQ1LCA2MiwgNTcsIDMsIDI1MywgOTgsIDI0NiwgNzgsIDYyLCAKLSAgICA1NywgMywgMjUzLCA5MiwgMjM1LCAxNDEsIDYyLCA1NywgMywgMjUzLCAxMDMsIDIzNSwgMTI2LCA2MiwgNTcsIDMsIDI1MywgCi0gICAgMTEzLCAyMzUsIDY4LCA2MiwgNTcsIDMsIDI1MywgODQsIDIzNSwgNTEsIDYyLCA1NywgMywgMjUzLCA3MiwgMTc2LCA2MiwgCi0gICAgNTcsIDMsIDI1MywgMTA1LCAyMzQsIDE4MiwgNjIsIDU3LCAzLCAyNTMsIDgyLCAyMzQsIDkyLCA2MiwgNTcsIDMsIDI1MywgCi0gICAgNzksIDIzNCwgMjgsIDYyLCA1NywgMywgMjUzLCA2OCwgMjMzLCAyMTcsIDYyLCA1NywgMywgMjUzLCA2OSwgMTg0LCA2MiwgCi0gICAgNTcsIDMsIDI1MywgMTM1LCAyMzEsIDkxLCA2MiwgNTcsIDMsIDI1MywgNzYsIDIzMCwgMjMwLCA2MiwgNTcsIDMsIDI1MywgCi0gICAgMTMzLCAyMzAsIDE2MSwgNjIsIDU3LCAzLCAyNTMsIDEyNSwgMjMwLCAxMDIsIDYyLCA1NywgMywgMjUzLCAxNDYsIDE5NywgCi0gICAgNjIsIDU3LCAzLCAyNTMsIDEyNCwgMjI5LCAxMDcsIDYyLCA1NywgMywgMjUzLCAxMTgsIDIyOCwgMjMzLCA2MiwgNTcsIDMsIAotICAgIDI1MywgOTcsIDIyOCwgNzQsIDYyLCA1NywgMywgMjUzLCA5NCwgMjI3LCAyMzcsIDYyLCA1NywgMywgMjUzLCAxNTMsIDE5MCwgCi0gICAgNjIsIDU3LCAzLCAyNTMsIDc3LCAyMjUsIDIyMSwgNjIsIDU3LCAzLCAyNTMsIDExMCwgMjI1LCAxMDgsIDYyLCA1NywgMywgCi0gICAgMjUzLCAxMzcsIDIyNSwgMTYsIDYyLCA1NywgMywgMjUzLCA5OSwgMjI0LCAxNTAsIDYyLCA1NywgMywgMjUzLCAxMzIsIAotICAgIDIyNCwgODgsIDYyLCA1NywgMywgMjUzLCA3MSwgMjI0LCA2OSwgNjIsIDU3LCAzLCAyNTMsIDEyNywgMjI0LCA1MywgNjIsIAotICAgIDU3LCAzLCAyNTMsIDExNiwgMjI0LCA0MiwgNjIsIDU3LCAzLCAyNTMsIDg5LCAyMDUsIDYyLCA1NywgMywgMjUzLCAxMjEsIAotICAgIDIyMywgMTI4LCA2MiwgNTcsIDMsIDI1MywgOTYsIDIyMywgMzUsIDYyLCA1NywgMywgMjUzLCAxNTUsIDIyMiwgMjExLCA2MiwgCi0gICAgNTcsIDMsIDI1MywgMTIyLCAyMjIsIDE0MCwgNjIsIDU3LCAzLCAyNTMsIDExNywgMjA2LCA2MiwgNTcsIDMsIDI1MywgMTQwLCAKLSAgICAyMjEsIDE4MSwgNjIsIDU3LCAzLCAyNTMsIDEwOCwgMjE5LCAxOTEsIDYyLCA1NywgMywgMjUzLCAxMzYsIDIxOSwgNTgsIAotICAgIDYyLCA1NywgMywgMjUzLCA5MSwgMjE4LCA4MywgNjIsIDU3LCAzLCAyNTMsIDkwLCAyMTcsIDEwNSwgNjIsIDU3LCAzLCAKLSAgICAyNTMsIDE1MSwgMjE3LCAyMiwgNjIsIDU3LCAzLCAyNTMsIDExMiwgMjE2LCAxMTcsIDYyLCA1NywgMywgMjUzLCAxNDksIAotICAgIDExMSwgNjIsIDU3LCAzLCAyNTMsIDgwLCAyMTUsIDExOCwgNjIsIDU3LCAzLCAyNTMsIDk1LCAyMTIsIDY1LCA2MiwgNTcsIAotICAgIDMsIDI1MywgNzQsIDIxMiwgMjIsIDYyLCA1NywgMywgMjUzLCAxMDksIDIxMSwgMjUwLCA2MiwgNTcsIDMsIDI1MywgMTA3LCAKLSAgICAyMTEsIDIyNywgNjIsIDU3LCAzLCAyNTMsIDEzMSwgMjEwLCAxMTYsIDYyLCA1NywgMywgMjUzLCA3NSwgMjEwLCA5NCwgNjIsIAotICAgIDU3LCAzLCAyNTMsIDEyOCwgMjEwLCAyMywgNjIsIDU3LCAzLCAyNTMsIDEyMywgMjU1LCA3NSwgNjIsIDU3LCAzLCAyNTMsIAotICAgIDEwNiwgMjU1LCA3NCwgNjIsIDU3LCAzLCAyNTMsIDY1LCAyNTMsIDE5MiwgNjIsIDU3LCAzLCAyNTMsIDc4LCAyNDYsIDQ2LCAKLSAgICA2MiwgNTcsIDMsIDI1MywgNjEsIDI0NiwgNDUsIDYyLCA1NywgMywgMjUzLCAxMDEsIDIyNywgMTc0LCA2MiwgNTcsIDMsIAotICAgIDI1MywgMTE5LCAyMjQsIDE0OCwgNjIsIDU3LCAzLCAyNTMsIDg3LCAyMjQsIDE1MiwgNjIsIDU3LCAzLCAyNTMsIDczLCAKLSAgICAyMjMsIDE4NiwgNjIsIDU3LCAzLCAyNTMsIDExNSwgMjIzLCAxODUsIDYyLCA1NywgMywgMjUzLCA4MSwgMjIyLCAyMTAsIAotICAgIDYyLCA1NywgMywgMjUzLCA4MywgMjE3LCAxMDIsIDYyLCA1NywgMywgMjUzLCA2MywgMjE1LCA3OCwgNjIsIDU3LCAzLCAKLSAgICAyNTMsIDYwLCAxMDUsIDYyLCA1NywgMTYsIDI1MywgMTMwLCA2MiwgNTcsIDE2LCAyNTMsIDEyOSwgNjIsIDU3LCAxNiwgCi0gICAgMjUzLCAxMjYsIDYyLCA1NywgMTYsIDI1MywgMTE0LCA2MiwgNTcsIDE2LCAyNTMsIDEwMiwgNjIsIDU3LCAxNiwgMjUzLCAKLSAgICAxMDAsIDYyLCA1NywgMTYsIDI1MywgOTMsIDYyLCA1NywgMTYsIDI1MywgODYsIDYyLCA1NywgMTYsIDI1MywgODUsIDYyLCAKLSAgICA1NywgMTYsIDI1MywgNzAsIDYyLCA1NywgMTYsIDI1MywgNjcsIDYyLCA1NywgMTYsIDI1MywgNjYsIDYyLCA1NywgMTYsIAotICAgIDI1MywgNjQsIDYyLCA1NywgMTYsIDI1MywgNjIsIDYyLCA1NywgMTA2LCAyNTMsIDU5LCAyMzEsIDE4NSwgNjIsIDU3LCAKLSAgICAxMDYsIDI1MywgNTgsIDIxMSwgMjIxLCA2MiwgNTcsIDEwNiwgMjUzLCA1NywgMjQ4LCA3NCwgNjIsIDU3LCAxMDYsIDI1MywgCi0gICAgNTYsIDI0NSwgOTUsIDYyLCA1NywgMTA2LCAyNTMsIDU1LCAyMzEsIDE1OSwgNjIsIDU3LCAxMDYsIDI1MywgNTQsIDIxOCwgCi0gICAgMTYyLCA2MiwgNTcsIDEwNiwgMjUzLCA1MywgMjQ1LCAzNywgNjIsIDU3LCAxMDYsIDI1MywgNTIsIDIyMywgMTUzLCA2MiwgCi0gICAgNTcsIDEwNiwgMjUzLCA1MSwgMjIwLCA2MiwgNjIsIDU3LCAxMDYsIDI1MywgNTAsIDI0MSwgMjM3LCA2MiwgNTcsIDEwNiwgCi0gICAgMjUzLCA0OSwgMjE5LCAyNSwgNjIsIDU3LCAxMDYsIDI1MywgNDgsIDI1MSwgMjAzLCA2MiwgNTcsIDEwNiwgMjUzLCA0NywgCi0gICAgMjQ5LCAxNDUsIDYyLCA1NywgMTA2LCAyNTMsIDQ2LCAyNTEsIDExNSwgNjIsIDU3LCAxMDYsIDI1MywgNDUsIDIxMiwgMiwgCi0gICAgNjIsIDU3LCAxMDYsIDI1MywgNDQsIDI1MiwgMTM2LCA2MiwgNTcsIDEwNiwgMjUzLCA0MywgMjI2LCAyMDUsIDYyLCA1NywgCi0gICAgMTA2LCAyNTMsIDQyLCAyMTgsIDI1NCwgNjIsIDU3LCAxMDYsIDI1MywgNDEsIDI0OSwgNjgsIDYyLCA1NywgMjMwLCAxNDIsIAotICAgIDI1MywgNDAsIDIzNCwgMjI0LCA2MiwgNTcsIDIzMCwgMTQyLCAyNTMsIDM5LCAyMzQsIDIzMiwgNjIsIDU3LCAxMDYsIDI1MywgCi0gICAgMzgsIDIyNiwgMjE4LCA2MiwgNTcsIDEwNiwgMjUzLCAzNywgMjExLCAyMzYsIDYyLCA1NywgMTA2LCAyNTMsIDM2LCA2MiwgCi0gICAgNTcsIDIzMCwgMTQyLCAyNTMsIDM1LCAyNTQsIDE3LCA2MiwgNTcsIDIzMCwgMTQyLCAyNTMsIDM0LCAyMzEsIDUyLCA2MiwgCi0gICAgNTcsIDEwNiwgMjUzLCAzMywgMjUxLCAxMzQsIDYyLCA1NywgMTA2LCAyNTMsIDMyLCAyNDIsIDE2NiwgNjIsIDU3LCAxMDYsIAotICAgIDI1MywgMzEsIDYyLCA1NywgMTA2LCAyNTMsIDMwLCAyMTEsIDIxMiwgNjIsIDU3LCAxMDYsIDI1MywgMjksIDYyLCA1NywgCi0gICAgMTA2LCAyNTMsIDI4LCA2MiwgNTcsIDEwNiwgMjUzLCAyNywgMjQwLCAyNDgsIDYyLCA1NywgMTA2LCAyNTMsIDI2LCA2MiwgCi0gICAgNTcsIDEwNiwgMjUzLCAyNSwgNjIsIDU3LCAxMDYsIDI1MywgMjQsIDYyLCA1NywgMjMwLCAxNDIsIDI1MywgMjIsIDIxNSwgCi0gICAgOTIsIDYyLCA1NywgMTA2LCAyNTMsIDIxLCA2MiwgNTcsIDEwNiwgMjUzLCAyMCwgNjIsIDU3LCAxMDYsIDI1MywgMTksIAotICAgIDI0OSwgMjUwLCA2MiwgNTcsIDEwNiwgMjUzLCAxOCwgNjIsIDU3LCAxMDYsIDI1MywgMTcsIDYyLCA1NywgMTA2LCAyNTMsIAotICAgIDE2LCAyNDMsIDkzLCA2MiwgNTcsIDEwNiwgMjUzLCAxNSwgMjU0LCA0LCA2MiwgNTcsIDEwNiwgMjUzLCAxNCwgNjIsIDU3LCAKLSAgICAxMDYsIDI1MywgMTMsIDYyLCA1NywgMTA2LCAyNTMsIDEyLCA2MiwgNTcsIDEwNiwgMjUzLCAxMSwgNjIsIDU3LCAxMDYsIAotICAgIDI1MywgMTAsIDYyLCA1NywgMTA2LCAyNTMsIDksIDYyLCA1NywgMTA2LCAyNTMsIDgsIDYyLCA1NywgMTA2LCAyNTMsIDcsIAotICAgIDYyLCA1NywgMTA2LCAyNTMsIDYsIDYyLCA1NywgMTA2LCAyNTMsIDUsIDIzMCwgMTM0LCA2MiwgNTcsIDEwNiwgMjUzLCA0LCAKLSAgICA2MiwgNTcsIDEwNiwgMjUzLCAzLCAyMTUsIDIzNSwgNjIsIDU3LCAxMDYsIDI1MywgMiwgNjIsIDU3LCAxMDYsIDI1MywgMSwgCi0gICAgNjIsIDU3LCAxMDYsIDI1MywgMCwgNjIsIDU3LCAxMDYsIDI1MiwgMjU1LCA2MiwgNTcsIDEwNiwgMjUyLCAyNTQsIDYyLCAKLSAgICA1NywgMTA2LCAyNTIsIDI1MywgNjIsIDU3LCAxMDYsIDI1MiwgMjUyLCA2MiwgNTcsIDEwNiwgMjUyLCAyNTEsIDYyLCA1NywgCi0gICAgMTA2LCAyNTIsIDI1MCwgNjIsIDU3LCAxMDYsIDI1MiwgMjQ5LCA2MiwgNTcsIDEwNiwgMjUyLCAyNDgsIDYyLCA1NywgMTA2LCAKLSAgICAyNTIsIDI0NywgMjQxLCAyMTEsIDYyLCA1NywgMTA2LCAyNTIsIDIyNiwgMjQ0LCAyOCwgNjIsIDU3LCAxMDYsIDI1MiwgCi0gICAgMjIzLCAyNTIsIDExNiwgNjIsIDU3LCAxMDYsIDI1MiwgMjE4LCAyMTksIDUsIDYyLCA1NywgMTA2LCAyNTIsIDIxNywgNzQsIAotICAgIDYyLCA1NywgMTA2LCAyNTIsIDIxNiwgNjIsIDU3LCAxMDYsIDI1MiwgMjE1LCAyMTcsIDIzNiwgNjIsIDU3LCAxMDYsIDI1MiwgCi0gICAgMjE0LCA2MiwgNTcsIDEwNiwgMjUyLCAyMTMsIDYyLCA1NywgMTA2LCAyNTIsIDIxMiwgMjExLCAyNTQsIDI1MCwgMTM5LCAKLSAgICA2MiwgNTcsIDEwNiwgMjUyLCAyMTEsIDI1MCwgMTM5LCA2MiwgNTcsIDEwNiwgMjUyLCAyMTAsIDI1MCwgMTQwLCAyNDMsIAotICAgIDI1NSwgNjIsIDU3LCAxMDYsIDI1MiwgMjA5LCAyMTIsIDAsIDYyLCA1NywgMTA2LCAyNTIsIDIwOCwgNjIsIDU3LCAxMDYsIAotICAgIDI1MiwgMjA3LCA2MiwgNTcsIDIzMCwgMTQyLCAyNTIsIDIwNiwgMjQ3LCAxOTgsIDYyLCA1NywgMTA2LCAyNTIsIDIwNSwgCi0gICAgNjIsIDU3LCAxMDYsIDI1MiwgMjA0LCA2MiwgNTcsIDEwNiwgMjUyLCAyMDIsIDYyLCA1NywgMTA2LCAyNTIsIDIwMSwgNjIsIAotICAgIDU3LCAxMDYsIDI1MiwgMjAwLCA2MiwgNTcsIDEwNiwgMjUyLCAxOTksIDI0OCwgMTU5LCA2MiwgNTcsIDEwNiwgMjUyLCAKLSAgICAxOTgsIDYyLCA1NywgMTA2LCAyNTIsIDE5NywgNjIsIDU3LCAxMDYsIDI1MiwgMTk2LCA2MiwgNTcsIDEwNiwgMjUyLCAxOTUsIAotICAgIDYyLCA1NywgMTA2LCAyNTIsIDE5NCwgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTMsIDIzLCA2MiwgNTcsIDEwNiwgMjEzLCAKLSAgICAxODYsIDI1MiwgMjQ2LCA2MiwgNTcsIDEwNiwgMjEzLCAxODYsIDI1MiwgMjQ1LCA2MiwgNTcsIDEwNiwgMjEzLCAxODYsIAotICAgIDI1MiwgMjQ0LCA2MiwgNTcsIDEwNiwgMjEzLCAxODYsIDI1MiwgMjQzLCA2MiwgNTcsIDEwNiwgMjEzLCAxODYsIDI1MiwgCi0gICAgMjQyLCA2MiwgNTcsIDEwNiwgMjEzLCAxODYsIDI1MiwgMjQxLCA2MiwgNTcsIDEwNiwgMjEzLCAxODYsIDI1MiwgMjQwLCAKLSAgICA2MiwgNTcsIDEwNiwgMjEzLCAxODYsIDI1MiwgMjM5LCA2MiwgNTcsIDEwNiwgMjEzLCAxODYsIDI1MiwgMjM4LCA2MiwgNTcsIAotICAgIDEwNiwgMjEzLCAxODYsIDI1MiwgMjM3LCA2MiwgNTcsIDEwNiwgMjEzLCAxODYsIDI1MiwgMjM2LCA2MiwgNTcsIDEwNiwgCi0gICAgMjEzLCAxODYsIDI1MiwgMjM1LCA2MiwgNTcsIDEwNiwgMjEzLCAxODYsIDI1MiwgMjM0LCA2MiwgNTcsIDEwNiwgMjEzLCAKLSAgICAxODYsIDI1MiwgMjMzLCA2MiwgNTcsIDEwNiwgMjEzLCAxODYsIDI1MiwgMjMyLCA2MiwgNTcsIDEwNiwgMjEzLCAxODYsIAotICAgIDI1MiwgMjMxLCA2MiwgNTcsIDEwNiwgMjEzLCAxODYsIDI1MiwgMjMwLCA2MiwgNTcsIDEwNiwgMjEzLCAxODYsIDI1MiwgCi0gICAgMjI5LCA2MiwgNTcsIDEwNiwgMjEzLCAxODYsIDI1MiwgMjI4LCA2MiwgNTcsIDEwNiwgMjEzLCAxODYsIDI1MiwgMjI3LCAKLSAgICA2MiwgNTcsIDEwNiwgMjEzLCAxODYsIDI1MiwgMjI1LCA2MiwgNTcsIDEwNiwgMjEzLCAxODYsIDI1MiwgMjI0LCA2MiwgNTcsIAotICAgIDEwNiwgMjEzLCAxODYsIDI1MiwgMjIyLCA2MiwgNTcsIDEwNiwgMjEzLCAxODYsIDI1MiwgMjIxLCA2MiwgNTcsIDEwNiwgCi0gICAgMjEzLCAxODYsIDI1MiwgMjIwLCA2MiwgNTcsIDEwNiwgMjEzLCAxODYsIDI1MiwgMjE5LCA2MiwgNTcsIDEwNiwgMjEzLCAKLSAgICAxODYsIDI1MiwgMjAzLCA2MiwgNTcsIDEwNiwgMjEzLCAxODYsIDI1MiwgMTkzLCAyNTQsIDIzNiwgMjExLCAyMDksIDIyMCwgCi0gICAgMTM4LCAyMzIsIDIxMywgMjU0LCAyMzYsIDIxMSwgMjA5LCAyMjAsIDEzOCwgMjQ3LCAxMjAsIDI1NCwgMjM2LCAyNTAsIAotICAgIDEzMCwgNzgsIDI1NCwgMjM2LCA1NCwgMTEwLCAyNTQsIDIzNiwgNTQsIDEwNSwgMjU0LCAyMzYsIDU0LCAxNTgsIDI1NCwgCi0gICAgMjM2LCA1NCwgMTYxLCAyNTQsIDIzNiwgNTQsIDE4OSwgMjU0LCAyMzYsIDU0LCAxOTQsIDI1NCwgMjM2LCA1NCwgMTk4LCAKLSAgICAyNTQsIDIzNiwgNTQsIDE5NSwgMjU0LCAyMzYsIDU0LCAyMDAsIDI1NCwgMjM2LCA1NCwgMjE2LCAyNDcsIDI1NCwgMjM2LCAKLSAgICA1NCwgMjE1LCA3MywgMjU0LCAyMzYsIDU0LCAyMTYsIDE2MiwgMjU0LCAyMzYsIDU0LCAyNDQsIDE1LCAyNTQsIDIzNiwgNTQsIAotICAgIDI0NCwgMTE0LCAyNTQsIDIzNiwgNTQsIDIxOSwgMTExLCAyNTQsIDIzNiwgNTQsIDIyMCwgMTE2LCAyNTQsIDIzNiwgNTQsIAotICAgIDI0NSwgMTg0LCAyNTQsIDIzNiwgNTQsIDIyOCwgMTk1LCAyNTQsIDIzNiwgNTQsIDEyMywgMjQwLCAyMTAsIDI1NCwgMjM2LCAKLSAgICA1NCwgMTEzLCAyNDAsIDIxMCwgMjU0LCAyMzYsIDU0LCAxMzQsIDI0MCwgMjEwLCAyNTQsIDIzNiwgNTQsIDI0NCwgMTEsIAotICAgIDI0MCwgMjEwLCAyNTQsIDIzNiwgNTQsIDI0NCwgODEsIDI0MCwgMjEwLCAyNTQsIDIzNiwgNTQsIDIxOSwgMTI1LCAyNDAsIAotICAgIDIxMCwgMjU0LCAyMzYsIDU0LCAyMjAsIDEyMiwgMjQwLCAyMTAsIDI1NCwgMjM2LCA1NCwgMjQ1LCAxOTMsIDI0MCwgMjEwLCAKLSAgICAyNTQsIDIzNiwgNTQsIDIyOCwgMjAwLCAyNDAsIDIxMCwgMjU0LCAyMzYsIDU0LCAxMjMsIDIxNiwgMTQ3LCAyNTQsIDIzNiwgCi0gICAgNTQsIDExMywgMjE2LCAxNDcsIDI1NCwgMjM2LCA1NCwgMTM0LCAyMTYsIDE0NywgMjU0LCAyMzYsIDU0LCAyNDQsIDExLCAKLSAgICAyMTYsIDE0NywgMjU0LCAyMzYsIDU0LCAyNDQsIDgxLCAyMTYsIDE0NywgMjU0LCAyMzYsIDU0LCAyMTksIDEyNSwgMjE2LCAKLSAgICAxNDcsIDI1NCwgMjM2LCA1NCwgMjIwLCAxMjIsIDIxNiwgMTQ3LCAyNTQsIDIzNiwgNTQsIDI0NSwgMTkzLCAyMTYsIDE0NywgCi0gICAgMjU0LCAyMzYsIDU0LCAyMjgsIDIwMCwgMjE2LCAxNDcsIDI1NCwgMjM2LCA1NCwgMjE2LCAyNDgsIDIxNiwgMTQ3LCAyNTQsIAotICAgIDIzNiwgNTQsIDIxNSwgNzQsIDIxNiwgMTQ3LCAyNTQsIDIzNiwgNTQsIDIxNiwgMTYzLCAyMTYsIDE0NywgMjU0LCAyMzYsIAotICAgIDU0LCAyNDQsIDE2LCAyMTYsIDE0NywgMjU0LCAyMzYsIDU0LCAyNDQsIDExNSwgMjE2LCAxNDcsIDI1NCwgMjM2LCA1NCwgCi0gICAgMjE5LCAxMTIsIDIxNiwgMTQ3LCAyNTQsIDIzNiwgNTQsIDIyMCwgMTE3LCAyMTYsIDE0NywgMjU0LCAyMzYsIDU0LCAyNDUsIAotICAgIDE4NSwgMjE2LCAxNDcsIDI1NCwgMjM2LCA1NCwgMjI4LCAxOTYsIDIxNiwgMTQ3LCAyNTQsIDIzNiwgMjEyLCAxNCwgMjUyLCAKLSAgICAxMjgsIDIxNCwgMTczLCAyNTQsIDIzNiwgMjEyLCAxNCwgMjQ0LCA5MiwgMjE4LCA1OSwgMjU0LCAyMzYsIDIxMiwgMTQsIAotICAgIDIyMSwgMTc2LCAyMTgsIDU5LCAyNTQsIDIzNiwgMjEyLCAxNCwgMjE2LCAxNjksIDIxOCwgNTksIDI1NCwgMjM2LCAyMTIsIAotICAgIDE0LCAyNDQsIDQsIDIxOCwgNTksIDI1NCwgMjM2LCAyNDYsIDgxLCAyMzEsIDkwLCAyNDQsIDkyLCAyMTgsIDU5LCAyNTQsIAotICAgIDIzNiwgMjMyLCAxOTksIDIzMSwgOTAsIDI0NCwgOTIsIDIxOCwgNTksIDI1NCwgMjM2LCAyMzEsIDkwLCAyMjEsIDE3NiwgCi0gICAgMjE4LCA1OSwgMjU0LCAyMzYsIDIzMSwgOTAsIDIxNiwgMTY5LCAyMTgsIDU5LCAyNiwgMjU1LCA2LCAyNTMsIDE5NCwgMTIzLCAKLSAgICAyMjQsIDIxLCAyNiwgMjU1LCA2LCAyNTMsIDE5NCwgMTIzLCAyNDIsIDI3LCAyNiwgMjU1LCA2LCAyNTMsIDE5NCwgMTIzLCAKLSAgICAyNDYsIDEwMCwgMjYsIDI1NSwgNiwgMjUzLCAxOTQsIDE4OSwgMjYsIDI1NSwgNiwgMjUzLCAxOTQsIDI0NCwgMTE0LCAyNiwgCi0gICAgMjU1LCA2LCAyNTMsIDE5NCwgMjQ0LCA4MSwgMjQwLCAyMTAsIDI2LCAyNTUsIDYsIDI1MywgMTk0LCAyNDQsIDgxLCAyMTYsIAotICAgIDE0NywgMjYsIDI1NSwgNiwgMjUzLCAxOTQsIDI0NCwgMTE1LCAyMTYsIDE0NywgMjYsIDI1NSwgNiwgMjUzLCAxOTQsIDI0NCwgCi0gICAgODEsIDIxNywgNjcsIDI2LCAyNTUsIDYsIDI1MywgMTk0LCAyMTYsIDI0OCwgMjE3LCA2NywgMjYsIDI1NSwgNiwgMjUzLCAKLSAgICAxOTQsIDI0NCwgMTE1LCAyMTcsIDY3LCAyNiwgMjU1LCA2LCAyNTMsIDE5NCwgMTIzLCAyNDAsIDIxMSwgMjE3LCA2NywgMjYsIAotICAgIDI1NSwgNiwgMjUzLCAxOTQsIDI0NCwgODEsIDI0MCwgMjExLCAyMTcsIDY3LCAyNiwgMjU1LCA2LCAyNTMsIDE5NCwgMTIzLCAKLSAgICAyMTYsIDE0OCwgMjE3LCA2NywgMjYsIDI1NSwgNiwgMjUzLCAxOTQsIDI0NCwgODEsIDIxNiwgMTQ4LCAyMTcsIDY3LCAyNiwgCi0gICAgMjU1LCA2LCAyNTMsIDE5NCwgMjQ0LCA4MSwgMjE4LCAxNTAsIDI2LCAyNTUsIDYsIDI1MywgMTk0LCAyMTYsIDI0OCwgMjE4LCAKLSAgICAxNTAsIDI2LCAyNTUsIDYsIDI1MywgMTk0LCAyNDQsIDExNSwgMjE4LCAxNTAsIDI2LCAyNTUsIDYsIDI1MywgMTk0LCAxMjMsIAotICAgIDI0MCwgMjExLCAyMTgsIDE1MCwgMjYsIDI1NSwgNiwgMjUzLCAxOTQsIDI0NCwgODEsIDI0MCwgMjExLCAyMTgsIDE1MCwgCi0gICAgMjYsIDI1NSwgNiwgMjUzLCAxOTQsIDEyMywgMjE2LCAxNDgsIDIxOCwgMTUwLCAyNiwgMjU1LCA2LCAyNTMsIDE5NCwgMjE2LCAKLSAgICAyNDgsIDIxNiwgMTQ4LCAyMTgsIDE1MCwgMjYsIDI1NSwgNiwgMjUzLCAxOTQsIDI0NCwgMTE1LCAyMTYsIDE0OCwgMjE4LCAKLSAgICAxNTAsIDI2LCAyNTUsIDYsIDI1MywgMTk0LCAyMTYsIDI0OCwgMjMwLCAxNjQsIDI2LCAyNTUsIDYsIDI0MSwgMjA1LCAxMjMsIAotICAgIDIyNSwgMzEsIDI2LCAyNTUsIDYsIDIxNiwgMTgxLCAxMTAsIDI2LCAyNTUsIDYsIDI0MSwgMjAxLCAxMTAsIDI2LCAyNTUsIAotICAgIDYsIDI0NSwgMTA0LCAxMDUsIDI2LCAyNTUsIDYsIDIxNiwgMTgxLCAxMDUsIDI2LCAyNTUsIDYsIDI0OSwgNjUsIDExMywgCi0gICAgMjQ2LCA5OSwgMjYsIDI1NSwgNiwgMjQ1LCAxMDQsIDExMywgMjQ2LCA5OSwgMjYsIDI1NSwgNiwgMjE1LCAyMDMsIDE4OSwgCi0gICAgMjYsIDI1NSwgNiwgMjE1LCAyMDMsIDIxNiwgMjQ3LCAyNiwgMjU1LCA2LCAyMTUsIDIwMywgMjE2LCAyNDgsIDI1NCwgMTQxLCAKLSAgICAxNywgMjYsIDI1NSwgNiwgMjQxLCAyMDEsIDIxNiwgMjQ3LCAyNiwgMjU1LCA2LCAyMzEsIDQxLCAyMTYsIDI0NywgMjYsIAotICAgIDI1NSwgNiwgMjE2LCAxODEsIDIxNiwgMjQ3LCAyNiwgMjU1LCA2LCAyMTYsIDE4MSwgMjE2LCAxNjIsIDI2LCAyNTUsIDYsIAotICAgIDIxNSwgMjAzLCAyNDQsIDExNCwgMjYsIDI1NSwgNiwgMjE1LCAyMDMsIDI0NCwgMTE1LCAyNTQsIDE0MSwgMTcsIDI2LCAKLSAgICAyNTUsIDYsIDI0MSwgMjAxLCAyNDQsIDExNCwgMjYsIDI1NSwgNiwgMjE2LCAxODEsIDI0NCwgMTE0LCAyNiwgMjU1LCA2LCAKLSAgICAyMTYsIDE4MSwgMTIzLCAyNDAsIDIxMCwgMjYsIDI1NSwgNiwgMjE2LCAxODEsIDEzNCwgMjQwLCAyMTAsIDI2LCAyNTUsIDYsIAotICAgIDI0NSwgMTA0LCAyNDQsIDgxLCAyNDAsIDIxMCwgMjYsIDI1NSwgNiwgMjE1LCAyMDMsIDI0NCwgODEsIDI0MCwgMjEwLCAyNiwgCi0gICAgMjU1LCA2LCAyMTYsIDE4MSwgMjQ0LCA4MSwgMjQwLCAyMTAsIDI2LCAyNTUsIDYsIDI1MCwgMjI3LCAyNDQsIDgxLCAyNDAsIAotICAgIDIxMCwgMjYsIDI1NSwgNiwgMjI5LCAxODIsIDI0NCwgODEsIDI0MCwgMjEwLCAyNiwgMjU1LCA2LCAyMTYsIDE4MSwgMTIzLCAKLSAgICAyMTYsIDE0NywgMjYsIDI1NSwgNiwgMjE2LCAxODEsIDI0NCwgODEsIDIxNiwgMTQ3LCAyNiwgMjU1LCA2LCAyNDgsIDU3LCAKLSAgICAyNDQsIDgxLCAyMzAsIDE2NCwgMjYsIDI1NSwgNiwgMjE4LCAxMTgsIDI0NCwgMTE1LCAyMzAsIDE2NCwgMjYsIDEyMywgCi0gICAgMTYzLCA1MCwgMjYsIDEyMywgMTYzLCA1LCAyNTQsIDE0MSwgMTcsIDI2LCAxMTMsIDIxNiwgMTY3LCA1MCwgMjYsIDEzNCwgCi0gICAgMjI0LCAyMCwgNTAsIDI2LCAyMTEsIDQ1LCA1MCwgMjYsIDIxNywgNjgsIDUwLCAyNiwgMjQ2LCAxMDEsIDUwLCAyNiwgMjI2LCAKLSAgICAyNDYsIDUwLCAyNiwgMTEzLCAyMjYsIDI0NSwgNTAsIDI2LCAxMzQsIDIyNiwgMjQ1LCA1MCwgMjYsIDI0NCwgMTEsIDIyNiwgCi0gICAgMjQ1LCA1MCwgMjYsIDI0NCwgODEsIDIyNiwgMjQ1LCA1MCwgMjYsIDIzMSwgMzUsIDUwLCAyNiwgMjMzLCAxNTcsIDI1MiwgCi0gICAgMTI4LCA1MCwgMjYsIDIzMiwgMTk0LCA1MCwgMjYsIDIyNiwgMTMxLCA1MCwgMjYsIDIxMSwgMTU5LCA1MCwgMjYsIDI1MywgCi0gICAgMjQzLCA1MCwgMjYsIDI1NCwgMCwgNTAsIDI2LCAyNDIsIDE0NCwgNTAsIDI2LCAyMTUsIDE4NiwgMjUyLCAxMjgsIDUwLCAKLSAgICAyNiwgMjEwLCA4NywgNTAsIDIyMiwgMTk4LCAyMjAsIDExMywgNTAsIDIyMiwgMTk4LCAyMTQsIDE4NSwgNTAsIDIyMiwgCi0gICAgMTk4LCAyMjAsIDE0MiwgNTAsIDIyMiwgMTk4LCAyMjAsIDExMSwgNTAsIDIyMiwgMTk4LCAyNDcsIDIxMywgMjIwLCAxMTEsIAotICAgIDUwLCAyMjIsIDE5OCwgMjE5LCAxNjgsIDUwLCAyMjIsIDE5OCwgMjQ4LCA1MywgNTAsIDIyMiwgMTk4LCAyMjQsIDYsIDUwLCAKLSAgICAyMjIsIDE5OCwgMjIwLCAxMjksIDUwLCAyMjIsIDE5OCwgMjQ2LCA2MCwgNTAsIDIyMiwgMTk4LCAyNTMsIDIzOCwgNTAsIAotICAgIDIyMiwgMTk4LCAyNTAsIDE3MSwgNTAsIDIyNSwgMTQzLCAyNDcsIDE5MSwgNSwgMjI1LCAyMTMsIDIyNSwgMTQzLCAyNDcsIAotICAgIDE5MSwgNSwgMjI1LCAyNCwgMjQxLCAyMzUsIDIyNSwgMTQzLCAyNDcsIDE5MSwgNSwgMjE3LCA0NSwgMjQxLCAyMzUsIDIyNSwgCi0gICAgMTQzLCAyNDcsIDE5MSwgNSwgMjUwLCAyNDcsIDIyNSwgMTQzLCAyNDcsIDE5MSwgNSwgMjUwLCAxMDEsIDIyNSwgMTQzLCAKLSAgICAyNDcsIDE5MSwgNSwgMjExLCAyMjEsIDIyNSwgMTQzLCAyNDcsIDE5MSwgNSwgMjQxLCAyMTEsIDIyNSwgMTQzLCAyNDcsIAotICAgIDE5MSwgNSwgMjQzLCA4NSwgMjI1LCAxNDMsIDI0NywgMTkxLCA1LCAyMTYsIDExNiwgMjI1LCAxNDMsIDI0NywgMTkxLCA1LCAKLSAgICA3NCwgMjI1LCAxNDMsIDI0NywgMTkxLCA1LCAyNTEsIDE2OSwgMjI1LCAxNDMsIDI0NywgMTkxLCA1LCAyMjAsIDI5LCAyMjUsIAotICAgIDE0MywgMjQ3LCAxOTEsIDUsIDI0OSwgMjQ0LCAyMjUsIDE0MywgMjQ3LCAxOTEsIDUsIDIzMSwgMTg0LCAyMjUsIDE0MywgCi0gICAgMjQ3LCAxOTEsIDUsIDIzMSwgMTM2LCAyMjUsIDE0MywgMjQ3LCAxOTEsIDUsIDIyMSwgMjE2LCAyMjUsIDE0MywgMjQ3LCAKLSAgICAxOTEsIDUsIDIzMiwgMjM3LCAyMjUsIDE0MywgMjQ3LCAxOTEsIDUsIDI1MSwgMTg4LCAyMjUsIDE0MywgMjQ3LCAxOTEsIDUsIAotICAgIDI1MCwgMjMxLCAyMjUsIDM1LCAyMjUsIDE0MywgMjQ3LCAxOTEsIDUsIDI0NywgMTMzLCAyMjUsIDE0MywgMjQ3LCAxOTEsIAotICAgIDUsIDI0OSwgMjIzLCAyMjUsIDE0MywgMjQ3LCAxOTEsIDUsIDIxOSwgODcsIDIyNSwgMTQzLCAyNDcsIDE5MSwgNSwgMjQ5LCAKLSAgICAyMjQsIDIyNSwgMTQzLCAyNDcsIDE5MSwgNSwgMjUyLCA2MywgMjI1LCAxNDMsIDI0NywgMTkxLCA1LCAyMjAsIDE2LCAyMjUsIAotICAgIDE0MywgMjQ3LCAxOTEsIDUsIDI0MCwgMjQ4LCAyMjUsIDE0MywgMjQ3LCAxOTEsIDUsIDI0MSwgMTc4LCAyMjUsIDE0MywgCi0gICAgMjQ3LCAxOTEsIDUsIDI1MSwgMTEyLCAyMzMsIDM2LCAyMjUsIDE0MywgMjQ3LCAxOTEsIDUsIDI1MCwgMjI0LCAyMjUsIAotICAgIDE0MywgMjQ3LCAxOTEsIDUsIDIyMywgMTUzLCAyMjUsIDE0MywgMjQ3LCAxOTEsIDUsIDI0NSwgMjMwLCAyMjUsIDE0MywgCi0gICAgMjQ3LCAxOTEsIDUsIDI0NiwgMTA3LCAyMjUsIDE0MywgMjQ3LCAxOTEsIDUsIDIxNSwgMTA1LCAyMjUsIDE0MywgMjQ3LCAKLSAgICAxOTEsIDUsIDI1MiwgNjYsIDIyNSwgMTQzLCAyNDcsIDE5MSwgNSwgMjI1LCAzNiwgMjE1LCAyMzUsIDIyNSwgMTQzLCAyNDcsIAotICAgIDE5MSwgNSwgMjEzLCAxNTksIDIyNSwgMTQzLCAyNDcsIDE5MSwgNSwgMjI2LCAxOCwgMjI1LCAxNDMsIDI0NywgMTkxLCA1LCAKLSAgICAyMjIsIDE5MCwgMjI1LCAxNDMsIDI0NywgMTkxLCA1LCAyMzIsIDIyNCwgMjI1LCAxNDMsIDI0NywgMTkxLCA1LCAyMjYsIAotICAgIDExNSwgMjUyLCAxODQsIDIyNSwgMTQzLCAyNDcsIDE5MSwgNSwgMjQ0LCA0OCwgMjI1LCAxNDMsIDI0NywgMTkxLCA1LCAKLSAgICAyNDIsIDEzOCwgMjI1LCAxNDMsIDI0NywgMTkxLCA1LCAyMTgsIDExOSwgMjI1LCAxNDMsIDI0NywgMTkxLCA1LCA0LCAyNTMsIAotICAgIDE2OCwgMjI1LCAxNDMsIDI0NywgMTkxLCA1LCAyMTIsIDMyLCAyNTIsIDE0OCwgMjI1LCAxNDMsIDI0NywgMTkxLCA1LCAzOCwgCi0gICAgMjI2LCAyNDgsIDkxLCAyMzIsIDYwLCAxLCA2MSwgMjMyLCA2MCwgMSwgNzUsIDIzMiwgNjAsIDEsIDI1MywgMTU4LCAyMzIsIAotICAgIDYwLCAxLCAyNTIsIDE5LCAyMzIsIDYwLCAxLCAyNDMsIDIwMiwgMjMyLCA2MCwgMSwgMjQ5LCA2MCwgMjMyLCA2MCwgMSwgCi0gICAgNzMsIDIzMiwgNjAsIDEsIDIxMiwgOTgsIDIzMiwgNjAsIDEsIDIxMCwgMTU5LCAyMzIsIDYwLCAxLCAyMTYsIDIxMCwgMjMyLCAKLSAgICA2MCwgMSwgMjM1LCAxNDQsIDIzMiwgNjAsIDEsIDIzNSwgMjMsIDIzMiwgNjAsIDEsIDIyNCwgOTYsIDIzMiwgNjAsIDEsIAotICAgIDE1NiwgMjMyLCA2MCwgMSwgMTkzLCAyMzIsIDYwLCAxLCAyMzAsIDI1LCAyMzIsIDYwLCAxLCAyMzAsIDE2NiwgMjMyLCA2MCwgCi0gICAgMSwgMjI4LCAxMTEsIDIzMiwgNjAsIDEsIDcwLCAyMzIsIDYwLCAxLCAyMjYsIDEwNSwgMjMyLCA2MCwgMSwgMjM0LCA0NywgCi0gICAgMjMyLCA2MCwgMSwgMTUzLCAyMzIsIDYwLCAxLCAyMjIsIDkxLCAyMzIsIDYwLCAxLCAyMTcsIDE1MiwgMjMyLCA2MCwgMSwgCi0gICAgMjE1LCAxNTksIDIzMiwgNjAsIDEsIDI1NCwgMTIzLCAyMzIsIDYwLCAxLCAyNDUsIDE1MCwgMjMyLCA2MCwgMSwgMjQyLCAKLSAgICA2MCwgMjMyLCA2MCwgMSwgMjExLCAxNzgsIDI1MCwgMjM3LCAxLCA2MSwgMjUwLCAyMzcsIDEsIDIyNiwgOTEsIDI1MCwgCi0gICAgMjM3LCAxLCAyNDksIDYwLCAyNTAsIDIzNywgMSwgMTU2LCAyNTAsIDIzNywgMSwgMjE0LCAxMTYsIDI1MCwgMjM3LCAxLCAKLSAgICAxNTMsIDI1MCwgMjM3LCAxLCAyMzMsIDYyLCAyNTAsIDIzNywgMSwgMjU1LCA3NSwgMjUwLCAyMzcsIDEsIDIyNCwgOTYsIAotICAgIDI1MCwgMjM3LCAxLCAyNTMsIDE1OCwgMjUwLCAyMzcsIDEsIDE5MywgMjUwLCAyMzcsIDEsIDc2LCAyNTAsIDIzNywgMSwgCi0gICAgMjQ4LCAyMjMsIDI1MCwgMjM3LCAxLCAyMTcsIDE1MiwgMjUwLCAyMzcsIDEsIDIyMCwgMTA0LCAyNTAsIDIzNywgMSwgMjIwLCAKLSAgICAxMDMsIDI1MCwgMjM3LCAxLCAyMjIsIDkxLCAyNTAsIDIzNywgMSwgMjUxLCA2NSwgMjUwLCAyMzcsIDEsIDcwLCAyNTAsIAotICAgIDIzNywgMSwgMjI4LCAxMTEsIDI1MCwgMjM3LCAxLCAyMTEsIDE3OCwgMjUwLCAyMzcsIDEsIDIzMCwgMjUsIDI1MCwgMjM3LCAKLSAgICAxLCAyMTUsIDE1OCwgMjUwLCAyMzcsIDEsIDIyNiwgMTA1LCAyNTAsIDIzNywgMSwgMjE4LCAyMjYsIDI1MCwgMjM3LCAxLCAKLSAgICA3MywgMjUwLCAyMzcsIDEsIDc1LCAyNTAsIDIzNywgMSwgMjE0LCAxMTMsIDI1MCwgMjM3LCAxLCAyMzUsIDIzLCAyNTAsIAotICAgIDIzNywgMSwgMjM1LCAxNCwgMjUwLCAyMzcsIDEsIDIyOSwgMTUwLCAyNTAsIDIzNywgMSwgMjE0LCAxMTgsIDI1MCwgMjM3LCAKLSAgICAxLCAyNDMsIDIwMiwgMjUwLCAyMzcsIDEsIDI0MywgMTM3LCAyNTAsIDIzNywgMSwgMjE4LCAxNjgsIDI1MCwgMjM3LCAxLCAKLSAgICAyMTgsIDE2NywgMjUwLCAyMzcsIDEsIDIyOSwgNzksIDI1MCwgMjM3LCAxLCAyMzYsIDMzLCAyNTAsIDIzNywgMSwgMjUxLCAKLSAgICA2NCwgMjUwLCAyMzcsIDEsIDIxNSwgMTU5LCAyNTAsIDIzNywgMSwgMjE0LCAxMTUsIDI1MCwgMjM3LCAxLCAyMjIsIDE4MCwgCi0gICAgMjUwLCAyMzcsIDEsIDIzMSwgMTI5LCAyNTAsIDIzNywgMSwgMjMxLCAxMjgsIDI1MCwgMjM3LCAxLCAyMzEsIDEyNywgMjUwLCAKLSAgICAyMzcsIDEsIDIzMSwgMTI2LCAyNTAsIDIzNywgMSwgMjMzLCA2MSwgMjUwLCAyMzcsIDEsIDI0NSwgMjM0LCAyNTAsIDIzNywgCi0gICAgMSwgMjE0LCAxMTQsIDU1LCAzMiwgMSwgNjEsIDU1LCAzMiwgMSwgMjUyLCA3NSwgNTUsIDMyLCAxLCAyMzQsIDE4MiwgNTUsIAotICAgIDMyLCAxLCAyNDgsIDkwLCA1NSwgMzIsIDEsIDc1LCA1NSwgMzIsIDEsIDIxMywgMjU1LCA1NSwgMzIsIDEsIDIxMCwgOTQsIAotICAgIDU1LCAzMiwgMSwgMjQxLCAyMzgsIDU1LCAzMiwgMSwgMjE2LCAxOTUsIDU1LCAzMiwgMSwgNzMsIDU1LCAzMiwgMSwgMTc2LCAKLSAgICA1NSwgMzIsIDEsIDI0NSwgMTc0LCA1NSwgMzIsIDEsIDI0NSwgMTU5LCA1NSwgMzIsIDEsIDI0NSwgMTUwLCA1NSwgMzIsIDEsIAotICAgIDI0NSwgNzUsIDU1LCAzMiwgMSwgNzYsIDU1LCAzMiwgMSwgMjI1LCAyMjEsIDU1LCAzMiwgMSwgMjIwLCA2MywgNTUsIDMyLCAKLSAgICAxLCAyMzMsIDIxNywgNTUsIDMyLCAxLCAyNDUsIDkyLCA1NSwgMzIsIDEsIDI0NSwgODIsIDU1LCAzMiwgMSwgMjE3LCAyMiwgCi0gICAgNTUsIDMyLCAxLCA3MCwgNTUsIDMyLCAxLCAyNDUsIDE3NywgNTUsIDMyLCAxLCAyMjUsIDEzNiwgNTUsIDMyLCAxLCAyMzQsIAotICAgIDExOSwgNTUsIDMyLCAxLCAyNDUsIDIwMiwgNTUsIDMyLCAxLCAyNDUsIDg0LCA1NSwgMzIsIDEsIDI1MCwgMTMxLCA1NSwgCi0gICAgMzIsIDEsIDIzNiwgMzMsIDU1LCAzMiwgMSwgMjE0LCAxMTgsIDU1LCAzMiwgMjI3LCAxOTgsIDExMCwgNTUsIDMyLCAyMjcsIAotICAgIDE5OCwgMTg5LCA1NSwgMzIsIDIyNywgMTk4LCAyMTYsIDI0NywgNTUsIDMyLCAyMjcsIDE5OCwgMjQ0LCAxMTQsIDI0MiwgCi0gICAgMTUzLCAxLCAyNTQsIDIwNCwgMjQyLCAxNTMsIDEsIDI1MiwgMTYzLCAyNDIsIDE1MywgMSwgMjQyLCAyMTEsIDI0MiwgMTUzLCAKLSAgICAxLCAyNDgsIDIwNCwgMjQyLCAxNTMsIDEsIDI1NCwgMjAwLCAyNDIsIDE1MywgMSwgMjI0LCA3OSwgMjQyLCAxNTMsIDEsIAotICAgIDIzNSwgMTU1LCAyNDIsIDE1MywgMSwgMjQyLCAzOSwgMjQyLCAxNTMsIDEsIDIxNiwgMTU4LCAyNDIsIDE1MywgMSwgMjQ1LCAKLSAgICAxODMsIDI0MiwgMTUzLCAxLCAyMzMsIDE5MCwgMjQyLCAxNTMsIDEsIDIzMywgMTEzLCAyNDIsIDE1MywgMSwgMjMxLCAxNzksIAotICAgIDI0MiwgMTUzLCAxLCAyMjksIDE4NCwgMjQyLCAxNTMsIDEsIDIzNSwgMTE5LCAyNDIsIDE1MywgMSwgMjE0LCAxMzYsIDI0MiwgCi0gICAgMTUzLCAxLCAyMjYsIDY5LCAyNDIsIDE1MywgMSwgMjI4LCAxOTUsIDI0MiwgMTUzLCAxLCAyMjMsIDE2NSwgMjQyLCAxNTMsIAotICAgIDEsIDIyMSwgMjE4LCAyNDIsIDE1MywgMSwgMjE3LCA0LCAyNDIsIDE1MywgMSwgMjExLCAyMzQsIDI0MiwgMTUzLCAxLCAKLSAgICAyNDQsIDE3OCwgMjQyLCAxNTMsIDEsIDIzNiwgMzcsIDI0MiwgMTUzLCAxLCAyNDAsIDE5OSwgMjQyLCAxNTMsIDEsIDIyNiwgCi0gICAgMTM5LCAyNDIsIDE1MywgMSwgMjI4LCAyMDAsIDI0MCwgMjEwLCAyMTQsIDIwOSwgMSwgMjU0LCAxNDcsIDIxNCwgMjA5LCAxLCAKLSAgICAyNTIsIDI2LCAyMTQsIDIwOSwgMSwgMjQzLCAxMDgsIDIxNCwgMjA5LCAxLCAyMzQsIDEzMiwgMjE0LCAyMDksIDEsIDI0OCwgCi0gICAgNTQsIDIxNCwgMjA5LCAxLCAyNDEsIDY4LCAyMTQsIDIwOSwgMSwgMjExLCAyMjcsIDIxNCwgMjA5LCAxLCAyMTAsIDg1LCAKLSAgICAyMTQsIDIwOSwgMSwgMjQwLCAyNDEsIDIxNCwgMjA5LCAxLCAyMTYsIDIzMCwgMjE0LCAyMDksIDEsIDIxMCwgMjMzLCAyMTQsIAotICAgIDIwOSwgMSwgMjM0LCAyNTAsIDIxNCwgMjA5LCAxLCAyMjAsIDIwLCAyMTQsIDIwOSwgMSwgMjMzLCA5OCwgMjE0LCAyMDksIAotICAgIDEsIDIzMSwgNjUsIDIxNCwgMjA5LCAxLCAyNDgsIDIxLCAyMTQsIDIwOSwgMSwgMjI3LCAxOTQsIDIxNCwgMjA5LCAxLCAKLSAgICAyMTAsIDEzLCAyMTQsIDIwOSwgMSwgMjIxLCAyNDgsIDIxNCwgMjA5LCAxLCAyNTQsIDE5NiwgMjE0LCAyMDksIDEsIDIyNCwgCi0gICAgMTUwLCAyMTQsIDIwOSwgMSwgMjIyLCAyNSwgMjE0LCAyMDksIDEsIDIyNCwgMzUsIDIxNCwgMjA5LCAxLCAyMjMsIDE0NCwgCi0gICAgMjE0LCAyMDksIDEsIDIxNiwgMTk5LCAyMTQsIDIwOSwgMSwgMjQyLCAyNDQsIDIxNCwgMjA5LCAxLCAxMTEsIDIxNCwgMjA5LCAKLSAgICAxLCA3MywgMjE0LCAyMDksIDEsIDcwLCAyMTQsIDIwOSwgMSwgMjE4LCAxNzksIDIxNCwgMjA5LCAyMTEsIDIwOSwgMjQ3LCAKLSAgICAxNzIsIDU1LCAyMjUsIDE2OSwgNSwgNjEsIDU1LCAyMjUsIDE2OSwgNSwgNzMsIDU1LCAyMjUsIDE2OSwgNSwgNzAsIDU1LCAKLSAgICAyMjUsIDE2OSwgNSwgMTc2LCA1NSwgMjI1LCAxNjksIDUsIDIzMywgMjE3LCA1NSwgMjI1LCAxNjksIDUsIDI0MywgMTM1LCAKLSAgICA1NSwgMjI1LCAxNjksIDUsIDI0MiwgMTEzLCA1NSwgMjI1LCAxNjksIDUsIDIxMSwgMTY1LCA1NSwgMjI1LCAxNjksIDUsIAotICAgIDI1MSwgMzMsIDU1LCAyMjUsIDE2OSwgNSwgMjM1LCAxNDEsIDU1LCAyMjUsIDE2OSwgNSwgMjM1LCAxMDgsIDU1LCAyMjUsIAotICAgIDE2OSwgNSwgMjE3LCAxMDUsIDU1LCAyMjUsIDE2OSwgNSwgMjE1LCAxMTgsIDU1LCAyMjUsIDE2OSwgNSwgMjQ4LCAyMjEsIAotICAgIDU1LCAyMjUsIDE2OSwgNSwgMjQ4LCAzLCA1NSwgMjI1LCAxNjksIDUsIDI0NiwgNzgsIDU1LCAyMjUsIDE2OSwgNSwgMjE2LCAKLSAgICAyMDgsIDU1LCAyMjUsIDE2OSwgNSwgMTkwLCA1NSwgMjI1LCAxNjksIDUsIDI1MiwgMTkxLCA1NSwgMjI1LCAxNjksIDUsIAotICAgIDI0NCwgMTk2LCA1NSwgMjI1LCAxNjksIDUsIDE5NywgNTUsIDIyNSwgMTY5LCA1LCAyMjcsIDIzNywgNTUsIDIyNSwgMTY5LCAKLSAgICA1LCAxODQsIDU1LCAyMjUsIDE2OSwgNSwgMjMwLCAyMzAsIDU1LCAyMjUsIDE2OSwgNSwgMjMwLCAxMDIsIDU1LCAyMjUsIAotICAgIDE2OSwgNSwgMTkxLCA1NSwgMjI1LCAxNjksIDUsIDIxNCwgMjcsIDU1LCAyMjUsIDE2OSwgNSwgMjEzLCAxNzYsIDU1LCAKLSAgICAyMjUsIDE2OSwgNSwgMjA1LCA1NSwgMjI1LCAxNjksIDUsIDIyMiwgMTQwLCA1NSwgMjI1LCAxNjksIDUsIDIzMywgMTM1LCAKLSAgICA1NSwgMjI1LCAxNjksIDUsIDIwNiwgNTUsIDIyNSwgMTY5LCA1LCAyMTAsIDExNiwgNTUsIDIyNSwgMTY5LCA1LCAyMjAsIAotICAgIDEwMiwgNTUsIDIyNSwgMTY5LCA1LCAyMTgsIDIyMywgNTUsIDIyNSwgMTY5LCA1LCAxNjIsIDU1LCAyMjUsIDE2OSwgNSwgCi0gICAgMjUzLCAxODYsIDU1LCAyMjUsIDE2OSwgNSwgMjUzLCAxODUsIDU1LCAyMjUsIDE2OSwgNSwgMjUzLCAxODQsIDU1LCAyMjUsIAotICAgIDE2OSwgNSwgMjExLCAxNDIsIDU1LCAyMjUsIDE2OSwgNSwgMjQ4LCAyMDAsIDU1LCAyMjUsIDE2OSwgNSwgMjQ4LCAxOTksIAotICAgIDU1LCAyMjUsIDE2OSwgNSwgMjUyLCAxNzAsIDU1LCAyMjUsIDE2OSwgNSwgMjUxLCA4NSwgNTUsIDIyNSwgMTY5LCAyMTEsIAotICAgIDIwOSwgMjQ3LCAxNzIsIDU1LCAyMjUsIDE2OSwgNTQsIDExMCwgNTUsIDIyNSwgMTY5LCA1NCwgMTA1LCA1NSwgMjI1LCAKLSAgICAxNjksIDU0LCAyMTYsIDI0NywgNTUsIDIyNSwgMTY5LCA1NCwgMjE1LCA3MywgNTUsIDIyNSwgMTY5LCA1NCwgMjQwLCAyMTAsIAotICAgIDE4MSwgNiwgMSwgMTk5LCA3MywgMTgxLCA2LCAxLCAxOTksIDc1LCAxODEsIDYsIDEsIDE5OSwgNjEsIDE4MSwgNiwgMSwgCi0gICAgMTk5LCAyNTQsIDIwOSwgMTgxLCA2LCAxLCAxOTksIDc2LCAxODEsIDYsIDEsIDE5OSwgMjI2LCAxODMsIDE4MSwgNiwgMSwgCi0gICAgMjE5LCAyNTEsIDczLCAxODEsIDYsIDEsIDIxOSwgMjUxLCA3NSwgMTgxLCA2LCAxLCAyMTksIDI1MSwgNjEsIDE4MSwgNiwgCi0gICAgMSwgMjE5LCAyNTEsIDI1NCwgMjA5LCAxODEsIDYsIDEsIDIxOSwgMjUxLCA3NiwgMTgxLCA2LCAxLCAyMTksIDI1MSwgMjI2LCAKLSAgICAxODMsIDE4MSwgNiwgMSwgMjUzLCAxNjcsIDE4MSwgNiwgMSwgMjI2LCAxMTYsIDE4MSwgNiwgMSwgMjExLCAxOTUsIDE4MSwgCi0gICAgNiwgMSwgMjExLCA0NCwgMTgxLCA2LCAxLCAyNDIsIDYwLCAxODEsIDYsIDEsIDIyNSwgMjExLCAxODEsIDYsIDEsIDI1MiwgCi0gICAgNjYsIDE4MSwgNiwgMSwgMjE3LCAxMSwgMTgxLCA2LCAxLCAyNDgsIDc3LCAxODEsIDYsIDEsIDI1MCwgMTI4LCAxODEsIDYsIAotICAgIDEsIDIzNSwgMTI0LCAxODEsIDYsIDEsIDIzNCwgMTg5LCAxODEsIDYsIDEsIDI0MywgODMsIDE4MSwgNiwgMSwgMjQ1LCAKLSAgICAyMDIsIDE4MSwgNiwgMSwgMjEzLCAyNTAsIDE4MSwgNiwgMSwgMjQ1LCA1OSwgMTgxLCA2LCAxLCAyMTYsIDE5NCwgMTgxLCAKLSAgICA2LCAxLCAyNDUsIDgyLCAxODEsIDYsIDEsIDIxMCwgOTIsIDE4MSwgNiwgMSwgMjQ1LCA3NSwgMTgxLCA2LCAxLCAyMTAsIAotICAgIDczLCAxODEsIDYsIDEsIDI0NSwgOTIsIDE4MSwgNiwgMSwgMjQ1LCAxNzQsIDE4MSwgNiwgMSwgMjQ1LCAxNTksIDE4MSwgNiwgCi0gICAgMSwgMjQ1LCAxNTAsIDE4MSwgNiwgMSwgMjQ1LCAxMzgsIDE4MSwgNiwgMSwgMjI2LCAyMTksIDE4MSwgNiwgMSwgMjQ1LCAKLSAgICAzOCwgMTgxLCA0LCAxLCAxOTksIDczLCAxODEsIDQsIDEsIDE5OSwgNzUsIDE4MSwgNCwgMSwgMTk5LCA2MSwgMTgxLCA0LCAKLSAgICAxLCAxOTksIDI1NCwgMjA5LCAxODEsIDQsIDEsIDE5OSwgNzYsIDE4MSwgNCwgMSwgMTk5LCAyMjYsIDE4MywgMTgxLCA0LCAKLSAgICAxLCAyMTksIDI1MSwgNzMsIDE4MSwgNCwgMSwgMjE5LCAyNTEsIDc1LCAxODEsIDQsIDEsIDIxOSwgMjUxLCA2MSwgMTgxLCAKLSAgICA0LCAxLCAyMTksIDI1MSwgMjU0LCAyMDksIDE4MSwgNCwgMSwgMjE5LCAyNTEsIDc2LCAxODEsIDQsIDEsIDIxOSwgMjUxLCAKLSAgICAyMjYsIDE4MywgMTgxLCA0LCAxLCAyNTMsIDE2NywgMTgxLCA0LCAxLCAyMjYsIDExNiwgMTgxLCA0LCAxLCAyMTEsIDE5NSwgCi0gICAgMTgxLCA0LCAxLCAyMTEsIDQ0LCAxODEsIDQsIDEsIDI0MiwgNjAsIDE4MSwgNCwgMSwgMjI1LCAyMTEsIDE4MSwgNCwgMSwgCi0gICAgMjUyLCA2NiwgMTgxLCA0LCAxLCAyMTcsIDExLCAxODEsIDQsIDEsIDI0OCwgNzcsIDE4MSwgNCwgMSwgMjUwLCAxMjgsIAotICAgIDE4MSwgNCwgMSwgMjM1LCAxMjQsIDE4MSwgNCwgMSwgMjM0LCAxODksIDE4MSwgNCwgMSwgMjQzLCA4MywgMTgxLCA0LCAxLCAKLSAgICAyNDUsIDIwMiwgMTgxLCA0LCAxLCAyMTMsIDI1MCwgMTgxLCA0LCAxLCAyNDUsIDU5LCAxODEsIDQsIDEsIDIxNiwgMTk0LCAKLSAgICAxODEsIDQsIDEsIDI0NSwgODIsIDE4MSwgNCwgMSwgMjEwLCA5MiwgMTgxLCA0LCAxLCAyNDUsIDc1LCAxODEsIDQsIDEsIAotICAgIDIxMCwgNzMsIDE4MSwgNCwgMSwgMjQ1LCA5MiwgMTgxLCA0LCAxLCAyNDUsIDE3NCwgMTgxLCA0LCAxLCAyNDUsIDE1OSwgCi0gICAgMTgxLCA0LCAxLCAyNDUsIDE1MCwgMTgxLCA0LCAxLCAyNDUsIDEzOCwgMTgxLCA0LCAxLCAyMjYsIDIxOSwgMTgxLCA0LCAxLCAKLSAgICAyNDUsIDM4LCAyMjAsIDY5LCAxLCAyMjUsIDIwOSwgMjIwLCA2OSwgMSwgMjE2LCA1LCAyMjAsIDY5LCAxLCAyMzQsIDkxLCAKLSAgICAyMjAsIDY5LCAxLCAyNDQsIDE0NywgMjIwLCA2OSwgMSwgMjE2LCAxNzIsIDIyMCwgNjksIDEsIDIxOSwgNTgsIDIyMCwgNjksIAotICAgIDEsIDIxOCwgMTQsIDIyMCwgNjksIDEsIDI1MCwgNjEsIDIyMCwgNjksIDEsIDIxMSwgNDYsIDIyMCwgNjksIDEsIDI0MCwgCi0gICAgMjA5LCAyMjAsIDY5LCAxLCAyNTIsIDUsIDIyMCwgNjksIDEsIDI0OCwgODksIDIyMCwgNjksIDEsIDI0MywgMTIxLCAyMjAsIAotICAgIDY5LCAxLCAyMTMsIDEyMywgMjIwLCA2OSwgMSwgMjE2LCAxNzYsIDIyMCwgNjksIDEsIDIxMCwgMjEsIDIyMCwgNjksIDEsIAotICAgIDIzMSwgODksIDIyMCwgNjksIDEsIDIzNSwgNDksIDIyMCwgNjksIDEsIDIxMSwgMjI1LCAyMjAsIDY5LCAxLCAyNDIsIDQ4LCAKLSAgICAyMjAsIDY5LCAxLCAyMzIsIDE0MiwgMjIwLCA2OSwgMSwgMjMwLCAxODksIDIyMCwgNjksIDEsIDIzNiwgNDAsIDIyMCwgNjksIAotICAgIDEsIDI0NSwgMjAxLCAyMjAsIDY5LCAxLCAyNTMsIDIzMSwgMjIwLCA2OSwgMSwgMjU0LCAyNDcsIDIyMCwgNjksIDEsIDIyNiwgCi0gICAgMTk2LCAyMjAsIDY5LCAxLCAyMTEsIDIxMiwgMjIwLCA2OSwgMSwgMjI2LCAxMzAsIDIyMCwgNjksIDEsIDI1NCwgMjA5LCAKLSAgICAyMjAsIDY5LCAxLCAyMjIsIDIwOCwgMjIwLCA2OSwgMSwgMjI3LCAxOTQsIDIyMCwgNjksIDEsIDI0NSwgMjE3LCAyMjAsIAotICAgIDY5LCAxLCAyNTQsIDIxNCwgMjIwLCA2OSwgMSwgMjQwLCAxMTEsIDIyMCwgNjksIDEsIDIxNCwgMTYzLCAyMjAsIDY5LCAxLCAKLSAgICAyMjYsIDI1NCwgMjIwLCA2OSwgMSwgMjI2LCAxNzYsIDIyMCwgNjksIDEsIDIyNiwgMjE4LCAyMjAsIDY5LCAxLCAyNTMsIAotICAgIDE3MCwgMjIwLCA2OSwgMSwgMjU0LCAxOSwgMjIwLCA2OSwgMSwgMjI2LCAxNTgsIDIyMCwgNjksIDEsIDI1NCwgMTkyLCAKLSAgICAyMjAsIDY5LCAxLCAyNDUsIDg2LCAyMjAsIDY5LCAxLCAyNTMsIDI1MywgMjIwLCA2OSwgMSwgMjQ1LCAyMjcsIDIyMCwgNjksIAotICAgIDEsIDI0MCwgMTE4LCAyMjAsIDY5LCAxLCAyMTEsIDEzLCAyMjYsIDE0MSwgMSwgMjU0LCAxNzAsIDIyNiwgMTQxLCAxLCAKLSAgICAyNTIsIDE5MSwgMjI2LCAxNDEsIDEsIDIxNywgMTA1LCAyMjYsIDE0MSwgMSwgMjM1LCAxNDEsIDIyNiwgMTQxLCAxLCAyMTEsIAotICAgIDE2NSwgMjI2LCAxNDEsIDEsIDIzNCwgMTMyLCAyMjYsIDE0MSwgMSwgMjQ4LCA3NiwgMjI2LCAxNDEsIDEsIDIwNSwgMjI2LCAKLSAgICAxNDEsIDEsIDIwNiwgMjI2LCAxNDEsIDEsIDIyMCwgMjYsIDIyNiwgMTQxLCAxLCAyNDgsIDI1LCAyMjYsIDE0MSwgMSwgCi0gICAgMjUwLCAyMTUsIDIyNiwgMTQxLCAxLCAyNDMsIDEzNSwgMjI2LCAxNDEsIDEsIDI0NCwgMTk2LCAyMjYsIDE0MSwgMSwgMjI0LCAKLSAgICA4NiwgMjI2LCAxNDEsIDEsIDIzNSwgOSwgMjI2LCAxNDEsIDEsIDIzMywgMTMwLCAyMjYsIDE0MSwgMSwgMjMwLCAyMDAsIAotICAgIDIyNiwgMTQxLCAxLCAyMjcsIDE3OCwgMjI2LCAxNDEsIDEsIDIxMiwgMzAsIDIyNiwgMTQxLCAxLCAxNjIsIDIyNiwgMTQxLCAKLSAgICAxLCAxOTEsIDIyNiwgMTQxLCAxLCA2MSwgMjI2LCAxNDEsIDEsIDc1LCAyMjYsIDE0MSwgMSwgNzMsIDIyNiwgMTQxLCAxLCAKLSAgICA3NiwgMjI2LCAxNDEsIDEsIDcwLCAyMjYsIDE0MSwgMSwgMjU1LCA3MywgMjI2LCAxNDEsIDEsIDI0NSwgMjA5LCAyMjYsIAotICAgIDE0MSwgMSwgMjI2LCAxODMsIDIyNiwgMTQxLCAyMSwgMjEwLCA4NiwgMjI2LCAxNDEsIDIxLCAxMTAsIDIyNiwgMTQxLCAyMSwgCi0gICAgMTA1LCAyMjYsIDE0MSwgMjEsIDE1OCwgMjI2LCAxNDEsIDIxLCAxNjEsIDIyNiwgMTQxLCAyMSwgMTg5LCAyMjYsIDE0MSwgCi0gICAgMjEsIDE5NCwgMjI2LCAxNDEsIDIxLCAxOTgsIDIyNiwgMTQxLCAyMSwgMTk1LCAyMjYsIDE0MSwgMjEsIDIwMCwgMjQ5LCAKLSAgICA2NywgMywgNjEsIDI0OSwgNjcsIDMsIDc1LCAyNDksIDY3LCAzLCA3MywgMjQ5LCA2NywgMywgNzYsIDI0OSwgNjcsIDMsIAotICAgIDcwLCAyNDksIDY3LCAzLCAyMzUsIDE0MSwgMjQ5LCA2NywgMywgMjM1LCA2OCwgMjQ5LCA2NywgMywgMTc2LCAyNDksIDY3LCAKLSAgICAzLCAyMzQsIDE4MiwgMjQ5LCA2NywgMywgMjM0LCA5MiwgMjQ5LCA2NywgMywgMjM0LCAyOCwgMjQ5LCA2NywgMywgMjMzLCAKLSAgICAyMTcsIDI0OSwgNjcsIDMsIDIzMywgMTM1LCAyNDksIDY3LCAzLCAyMzMsIDU4LCAyNDksIDY3LCAzLCAyMzIsIDI0MSwgCi0gICAgMjQ5LCA2NywgMywgMjMyLCAxNTYsIDI0OSwgNjcsIDMsIDIzMiwgOTgsIDI0OSwgNjcsIDMsIDE4NCwgMjQ5LCA2NywgMywgCi0gICAgMjMxLCA5MSwgMjQ5LCA2NywgMywgMjMwLCAyMzAsIDI0OSwgNjcsIDMsIDIzMCwgMTYxLCAyNDksIDY3LCAzLCAyMzAsIAotICAgIDEwMiwgMjQ5LCA2NywgMywgMTk3LCAyNDksIDY3LCAzLCAyMjksIDEwNywgMjQ5LCA2NywgMywgMjI4LCAyMzMsIDI0OSwgCi0gICAgNjcsIDMsIDIyOCwgNzQsIDI0OSwgNjcsIDMsIDIyNywgMjM3LCAyNDksIDY3LCAzLCAxOTAsIDI0OSwgNjcsIDMsIDIyNSwgCi0gICAgMjIxLCAyNDksIDY3LCAzLCAyMjUsIDEwOCwgMjQ5LCA2NywgMywgMjI1LCAxNiwgMjQ5LCA2NywgMywgMjI0LCAxNTAsIAotICAgIDI0OSwgNjcsIDMsIDIwNSwgMjQ5LCA2NywgMywgMjIzLCAxMjgsIDI0OSwgNjcsIDMsIDIyMywgMzUsIDI0OSwgNjcsIDMsIAotICAgIDIyMiwgMjExLCAyNDksIDY3LCAzLCAyMjIsIDE0MCwgMjQ5LCA2NywgMywgMjA2LCAyNDksIDY3LCAzLCAyMjEsIDE4MSwgCi0gICAgMjQ5LCA2NywgMywgMjE5LCAxOTEsIDI0OSwgNjcsIDMsIDIxOSwgNTgsIDI0OSwgNjcsIDMsIDIxOCwgODMsIDI0OSwgNjcsIAotICAgIDMsIDIxNywgMTA1LCAyNDksIDY3LCAzLCAyMTcsIDIyLCAyNDksIDY3LCAzLCAyMTYsIDExNywgMjQ5LCA2NywgMywgMTExLCAKLSAgICAyNDksIDY3LCAzLCAyMTUsIDExOCwgMjQ5LCA2NywgMywgMjEyLCA2NSwgMjQ5LCA2NywgMywgMjEyLCAyMiwgMjQ5LCA2NywgCi0gICAgMywgMjExLCAyNTAsIDI0OSwgNjcsIDMsIDIxMSwgMjI3LCAyNDksIDY3LCAzLCAyMTEsIDE2NSwgMjQ5LCA2NywgMywgMjExLCAKLSAgICAxNjIsIDI0OSwgNjcsIDMsIDIxMCwgMTE2LCAyNDksIDY3LCAzLCAyMTAsIDIzLCAyMzYsIDEsIDI1NCwgMjcsIDEsIDI1NCwgCi0gICAgMTY4LCAyMzYsIDEsIDI1NCwgMjcsIDEsIDI1MiwgMjUsIDIzNiwgMSwgMjU0LCAyNywgMSwgMjQyLCAyMDEsIDIzNiwgMSwgCi0gICAgMjU0LCAyNywgMSwgMjQ4LCAxODgsIDIzNiwgMSwgMjU0LCAyNywgMSwgMjQxLCAyMzgsIDIzNiwgMSwgMjU0LCAyNywgMSwgCi0gICAgMjEyLCAzMCwgMjM2LCAxLCAyNTQsIDI3LCAxLCAyMTAsIDk3LCAyMzYsIDEsIDI1NCwgMjcsIDEsIDI0MSwgMTk1LCAyMzYsIAotICAgIDEsIDI1NCwgMjcsIDEsIDIxNiwgMjI2LCAyMzYsIDEsIDI1NCwgMjcsIDEsIDIxMCwgMjMyLCAyMzYsIDEsIDI1NCwgMjcsIAotICAgIDEsIDIzNCwgMjI1LCAyMzYsIDEsIDI1NCwgMjcsIDEsIDIzMywgOTMsIDIzNiwgMSwgMjU0LCAyNywgMSwgMjMxLCA2NSwgCi0gICAgMjM2LCAxLCAyNTQsIDI3LCAxLCAyMjcsIDE5NCwgMjM2LCAxLCAyNTQsIDI3LCAxLCAyMjEsIDI0OSwgMjM2LCAxLCAyNTQsIAotICAgIDI3LCAxLCAyNTMsIDE2MiwgMjM2LCAxLCAyNTQsIDI3LCAxLCAyMjUsIDIyMSwgMjM2LCAxLCAyNTQsIDI3LCAxLCAyMjIsIAotICAgIDI0LCAyMzYsIDEsIDI1NCwgMjcsIDEsIDIyNCwgMzQsIDIzNiwgMSwgMjU0LCAyNywgMSwgMjIzLCA2NywgMjM2LCAxLCAKLSAgICAyNTQsIDI3LCAxLCAyMjAsIDIwLCAyMzYsIDEsIDI1NCwgMjcsIDEsIDIxNywgMzYsIDIzNiwgMSwgMjU0LCAyNywgMjIxLCAKLSAgICAxNzMsIDUwLCAyMzYsIDEsIDI1NCwgMjcsIDU0LCAxMTAsIDIzNiwgMSwgMjU0LCAyNywgNTQsIDEwNSwgMjM2LCAxLCAyNTQsIAotICAgIDI3LCA1NCwgMTU4LCAyMzYsIDEsIDI1NCwgMjcsIDU0LCAyMTYsIDI0NywgMjM2LCAxLCAyNTQsIDI3LCA1NCwgMjE1LCA3MywgCi0gICAgMjM2LCAxLCAyNTQsIDI3LCA1NCwgMTIzLCAyNDAsIDIxMCwgMjM2LCAxLCAyNTQsIDI3LCA1NCwgMTIzLCAyMTYsIDE0NywgCi0gICAgMjM2LCAxLCAyNTQsIDI3LCA1NCwgMjE2LCAyNDgsIDIxNiwgMTQ3LCAyMjUsIDExOSwgMSwgMjU0LCAxNjUsIDIyNSwgMTE5LCAKLSAgICAxLCAyNTIsIDI4LCAyMjUsIDExOSwgMSwgMjQzLCAxMDksIDIyNSwgMTE5LCAxLCAyNDgsIDU2LCAyMjUsIDExOSwgMSwgCi0gICAgMjQxLCAyMzgsIDIyNSwgMTE5LCAxLCAyMTIsIDM3LCAyMjUsIDExOSwgMSwgMjEwLCAxMTAsIDIyNSwgMTE5LCAxLCAyNDEsIAotICAgIDE5NywgMjI1LCAxMTksIDEsIDIxNiwgMjMwLCAyMjUsIDExOSwgMSwgMjEwLCAyMzMsIDIyNSwgMTE5LCAxLCAyMzQsIDI1MCwgCi0gICAgMjI1LCAxMTksIDEsIDIzMywgOTksIDIyNSwgMTE5LCAxLCAyMzEsIDY1LCAyMjUsIDExOSwgMSwgMjI3LCAxOTQsIDIyNSwgCi0gICAgMTE5LCAxLCAyMjAsIDE0NCwgMjI1LCAxMTksIDEsIDI1NCwgMTk2LCAyMjUsIDExOSwgMSwgMjI1LCAyMjEsIDIyNSwgMTE5LCAKLSAgICAxLCAyMjIsIDI1LCAyMjUsIDExOSwgMSwgMjI0LCAzOSwgMjI1LCAxMTksIDEsIDIyMiwgMTg5LCAyMjUsIDExOSwgMSwgCi0gICAgMjIwLCAyMCwgMjI1LCAxMTksIDEsIDIxNywgNDEsIDIyNSwgMTE5LCA1NCwgMTEwLCAyMjUsIDExOSwgNTQsIDIxNiwgMjQ3LCAKLSAgICAyMjUsIDExOSwgNTQsIDIxNSwgNzMsIDIyNSwgMTE5LCA1NCwgMTIzLCAyNDAsIDIxMCwgMjI1LCAxMTksIDU0LCAxMDUsIAotICAgIDIyNSwgMTE5LCA1NCwgMTU4LCAyMjUsIDExOSwgMjExLCAyMDksIDIyMCwgMTM3LCAyMzIsIDU5LCAxLCA2MSwgMjMyLCA1OSwgCi0gICAgMSwgMjUzLCAxNTgsIDIzMiwgNTksIDEsIDI0MywgMjAyLCAyMzIsIDU5LCAxLCAyNDksIDYwLCAyMzIsIDU5LCAxLCA3NSwgCi0gICAgMjMyLCA1OSwgMSwgMjE0LCAxMDUsIDIzMiwgNTksIDEsIDczLCAyMzIsIDU5LCAxLCAyMTEsIDExNywgMjMyLCA1OSwgMSwgCi0gICAgMjM1LCAyMywgMjMyLCA1OSwgMSwgMTU2LCAyMzIsIDU5LCAxLCAxOTMsIDIzMiwgNTksIDEsIDIzMCwgMjUsIDIzMiwgNTksIAotICAgIDEsIDc2LCAyMzIsIDU5LCAxLCAxNTMsIDIzMiwgNTksIDEsIDIxOCwgMjI2LCAyMzIsIDU5LCAxLCAyMTcsIDE1MiwgMjMyLCAKLSAgICA1OSwgMSwgNzAsIDIzMiwgNTksIDEsIDI0NSwgNiwgMjMyLCA1OSwgMSwgMjI0LCA5NiwgMjMyLCA1OSwgMSwgMjIyLCA5MSwgCi0gICAgMjMyLCA1OSwgMSwgMjE1LCAxNTksIDIzMiwgNTksIDEsIDI1NCwgMTIzLCAyMzIsIDU5LCAxLCAyNDUsIDE1MCwgMjMyLCAKLSAgICA1OSwgMSwgMjMyLCA2MiwgMjMyLCA1OSwgMSwgMjI4LCAxMTEsIDIzMiwgNTksIDEsIDI1MSwgNjYsIDIzMiwgNTksIDIxNSwgCi0gICAgMjIyLCA3OCwgMjMxLCA0OCwgMjQxLCAxNzQsIDEsIDYxLCAyMzEsIDQ4LCAyNDEsIDE3NCwgMSwgNzUsIDIzMSwgNDgsIAotICAgIDI0MSwgMTc0LCAxLCA3MywgMjMxLCA0OCwgMjQxLCAxNzQsIDEsIDc2LCAyMzEsIDQ4LCAyNDEsIDE3NCwgMSwgMTkxLCAKLSAgICAyMzEsIDQ4LCAyNDEsIDE3NCwgMSwgMjEyLCA2NSwgMjMxLCA0OCwgMjQxLCAxNzQsIDEsIDI1MiwgMTkxLCAyMzEsIDQ4LCAKLSAgICAyNDEsIDE3NCwgMSwgMjUyLCAxOTAsIDIzMSwgNDgsIDI0MSwgMTc0LCAxLCAxOTAsIDIzMSwgNDgsIDI0MSwgMTc0LCAxLCAKLSAgICAxODQsIDIzMSwgNDgsIDI0MSwgMTc0LCAxLCAxOTcsIDIzMSwgNDgsIDI0MSwgMTc0LCAxLCAyMjksIDIyOCwgMjMxLCA0OCwgCi0gICAgMjQxLCAxNzQsIDEsIDIyOSwgMTA3LCAyMzEsIDQ4LCAyNDEsIDE3NCwgMSwgMjI5LCAxMDYsIDIzMSwgNDgsIDI0MSwgMTc0LCAKLSAgICAxLCAyMDUsIDIzMSwgNDgsIDI0MSwgMTc0LCAxLCAyMjMsIDE4NywgMjMxLCA0OCwgMjQxLCAxNzQsIDEsIDIzMywgMTM1LCAKLSAgICAyMzEsIDQ4LCAyNDEsIDE3NCwgMSwgMjM0LCAxMzIsIDIzMSwgNDgsIDI0MSwgMTc0LCAxLCAyNDEsIDE4OSwgMjMxLCA0OCwgCi0gICAgMjQxLCAxNzQsIDEsIDIwNiwgMjMxLCA0OCwgMjQxLCAxNzQsIDEsIDIyMiwgMzMsIDIzMSwgNDgsIDI0MSwgMTc0LCAxLCAKLSAgICAyMjEsIDE4MSwgMjMxLCA0OCwgMjQxLCAxNzQsIDEsIDE3NiwgMjMxLCA0OCwgMjQxLCAxNzQsIDEsIDIyNCwgODgsIDIzMSwgCi0gICAgNDgsIDI0MSwgMTc0LCAxLCAyMTcsIDEwNSwgMjMxLCA0OCwgMjQxLCAxNzQsIDEsIDIxNywgMTA0LCAyMzEsIDQ4LCAyNDEsIAotICAgIDE3NCwgMSwgMjE3LCAyMiwgMjMxLCA0OCwgMjQxLCAxNzQsIDEsIDIxNywgMjEsIDIzMSwgNDgsIDI0MSwgMTc0LCAxLCAKLSAgICAxMTEsIDIzMSwgNDgsIDI0MSwgMTc0LCAxLCAyNDgsIDIyMSwgMjMxLCA0OCwgMjQxLCAxNzQsIDE2LCAyMTMsIDE3MCwgCi0gICAgMjMxLCA0OCwgMjQxLCAxNzQsIDE2LCAyMTMsIDE2OSwgMjMxLCA0OCwgMjQ5LCA5NCwgMSwgNjEsIDIzMSwgNDgsIDI0OSwgCi0gICAgOTQsIDEsIDc1LCAyMzEsIDQ4LCAyNDksIDk0LCAxLCA3MywgMjMxLCA0OCwgMjQ5LCA5NCwgMSwgNzYsIDIzMSwgNDgsIAotICAgIDI0OSwgOTQsIDEsIDE5MSwgMjMxLCA0OCwgMjQ5LCA5NCwgMSwgMjEyLCA2NSwgMjMxLCA0OCwgMjQ5LCA5NCwgMSwgMjUyLCAKLSAgICAxOTEsIDIzMSwgNDgsIDI0OSwgOTQsIDEsIDE5MCwgMjMxLCA0OCwgMjQ5LCA5NCwgMSwgMTg0LCAyMzEsIDQ4LCAyNDksIAotICAgIDk0LCAxLCAxOTcsIDIzMSwgNDgsIDI0OSwgOTQsIDEsIDIyOSwgMTA3LCAyMzEsIDQ4LCAyNDksIDk0LCAxLCAyMDUsIDIzMSwgCi0gICAgNDgsIDI0OSwgOTQsIDEsIDIzMywgMTM1LCAyMzEsIDQ4LCAyNDksIDk0LCAxLCAyMzQsIDEzMiwgMjMxLCA0OCwgMjQ5LCAKLSAgICA5NCwgMSwgMjQxLCAxODksIDIzMSwgNDgsIDI0OSwgOTQsIDEsIDIwNiwgMjMxLCA0OCwgMjQ5LCA5NCwgMSwgMjU0LCAyMywgCi0gICAgMjA2LCAyMzEsIDQ4LCAyNDksIDk0LCAxLCAyMjEsIDE4MSwgMjMxLCA0OCwgMjQ5LCA5NCwgMSwgMTc2LCAyMzEsIDQ4LCAKLSAgICAyNDksIDk0LCAxLCAyMjQsIDg4LCAyMzEsIDQ4LCAyNDksIDk0LCAxLCAyMTcsIDEwNSwgMjMxLCA0OCwgMjQ5LCA5NCwgMSwgCi0gICAgMjE3LCAyMiwgMjMxLCA0OCwgMjQ5LCA5NCwgMSwgMTExLCAyMzEsIDQ4LCAyNDksIDk0LCAxLCAyNDgsIDIyMSwgMjMxLCAKLSAgICA0OCwgMjQ5LCA5NCwgMjMyLCAxNDUsIDIyMiwgMjE3LCAyMzEsIDQ4LCAyNDksIDk0LCAyMzIsIDE0NSwgMjM2LCA2LCAyMzQsIAotICAgIDEyMCwgMSwgNjEsIDIzNCwgMTIwLCAyNSwgNSwgNzMsIDIzNCwgMTIwLCAyNSwgNSwgNzAsIDIzNCwgMTIwLCAyNSwgNSwgCi0gICAgMTQ5LCAxNTMsIDIzNCwgMTIwLCAyNSwgNSwgNzUsIDIzNCwgMTIwLCAyNSwgNSwgNzYsIDIzNCwgMTIwLCAyNSwgMjMzLCAKLSAgICAyMywgNzgsIDIzNCwgMTIwLCA1LCA1MiwgMjIyLCAyMzQsIDUxLCAyMzQsIDEyMCwgNSwgMjU0LCA3NSwgMjM0LCAxMjAsIDUsIAotICAgIDIxMywgMTQ3LCAyMzQsIDEyMCwgMSwgMTc2LCAyMzQsIDEyMCwgMSwgMjM0LCAxMzIsIDIzNCwgMTIwLCAxLCAyNDMsIDEzNSwgCi0gICAgMjM0LCAxMjAsIDEsIDI0MiwgMjQ5LCAyMzQsIDEyMCwgMSwgMjUxLCAzMywgMjM0LCAxMjAsIDEsIDI1MCwgMTU3LCAyMzQsIAotICAgIDEyMCwgMSwgMjM1LCAxNDEsIDIzNCwgMTIwLCAxLCAyMjcsIDE2NSwgMjM0LCAxMjAsIDEsIDIxNSwgMTU2LCAyMzQsIDEyMCwgCi0gICAgMSwgMjE1LCAxNDQsIDIzNCwgMTIwLCAxLCAyNDgsIDEzNSwgMjM0LCAxMjAsIDEsIDI0OCwgMTE5LCAyMzQsIDEyMCwgMSwgCi0gICAgMjI4LCAxMTAsIDIzNCwgMTIwLCAxLCAyMTcsIDEwNSwgMjM0LCAxMjAsIDEsIDIxNiwgMjA4LCAyMzQsIDEyMCwgMSwgMjQ4LCAKLSAgICAyMjEsIDIzNCwgMTIwLCAxLCAyNDgsIDI1LCAyMzQsIDEyMCwgMSwgMTk3LCAyMzQsIDEyMCwgMSwgMTkwLCAyMzQsIDEyMCwgCi0gICAgMSwgMjI1LCAxNDcsIDIzNCwgMTIwLCAxLCAyNTIsIDE5MSwgMjM0LCAxMjAsIDEsIDI1MiwgMTgsIDIzNCwgMTIwLCAxLCAKLSAgICAxODQsIDIzNCwgMTIwLCAxLCAxOTEsIDIzNCwgMTIwLCAxLCAyMDUsIDIzNCwgMTIwLCAxLCAyMzMsIDEzNSwgMjM0LCAxMjAsIAotICAgIDEsIDIxNCwgMjcsIDIzNCwgMTIwLCAxLCAyMjAsIDEwMiwgMjM0LCAxMjAsIDEsIDIxOCwgMjIzLCAyMzQsIDEyMCwgMSwgCi0gICAgMjA2LCAyMzQsIDEyMCwgMSwgMjEwLCAxMTYsIDIzNCwgMTIwLCAxLCAxNjIsIDIzNCwgMTIwLCAxLCAyMzQsIDQ2LCAyMzQsIAotICAgIDEyMCwgMSwgMjE1LCAxMjQsIDIzNCwgMTIwLCA1LCAyNTIsIDE0MSwgNDgsIDIzNCwgMTIwLCA1LCAyNTAsIDIyMSwgMjM0LCAKLSAgICAxMjAsIDUsIDU5LCA1MSwgMjM0LCAxMjAsIDIxMywgMTUyLCAyMzQsIDEyMCwgMjEsIDExMCwgMjM0LCAxMjAsIDIxLCAxMDUsIAotICAgIDIzNCwgMTIwLCAyMSwgMTU4LCAyMzQsIDEyMCwgMjEsIDE2MSwgMjM0LCAxMjAsIDU0LCAyMTYsIDI0NywgMjM0LCAxMjAsIAotICAgIDU0LCAyMTUsIDczLCAyMzQsIDEyMCwgNTQsIDEyMywgMjQwLCAyMTAsIDIzNCwgMTIwLCA1NCwgMTIzLCAyMTYsIDE0NywgCi0gICAgMjM0LCAxMjAsIDIyNCwgMTQxLCAyNDcsIDEyMCwgMjM0LCAxMjAsIDIyNCwgMTQxLCA0LCAyNTAsIDM1LCAyMzQsIDEyMCwgCi0gICAgMjI0LCAxNDEsIDI1MCwgMzUsIDIzNCwgMTIwLCAyMjQsIDE0MSwgMjQ5LCAxMzcsIDEzMCwgMjM0LCAxMjAsIDIyNCwgMTQxLCAKLSAgICAyMzEsIDE4MCwgMjM0LCAxMjAsIDIyNCwgMTQxLCAyMzIsIDExNSwgMjM0LCAxMjAsIDIyNCwgMTQxLCAyNDgsIDE3OCwgCi0gICAgMjM0LCAxMjAsIDIyNCwgMTQxLCA1MiwgMjQ4LCAxNzgsIDIzNCwgMTIwLCAyMjQsIDE0MSwgMjMyLCAyMDcsIDU1LCAyMTksIAotICAgIDI4LCAyNTQsIDM4LCAxLCAyNDEsIDIzOCwgNTUsIDIxOSwgMjgsIDI1NCwgMzgsIDEsIDIzMywgOTMsIDU1LCAyMTksIDI4LCAKLSAgICAyNTQsIDM4LCAxLCAyNDEsIDE5NSwgNTUsIDIxOSwgMjgsIDI1NCwgMzgsIDEsIDIzMSwgNjUsIDU1LCAyMTksIDI4LCAyNTQsIAotICAgIDM4LCAxLCAyMjQsIDM0LCA1NSwgMjE5LCAyOCwgMjU0LCAzOCwgMSwgMjEyLCAzMCwgNTUsIDIxOSwgMjgsIDI1NCwgMzgsIAotICAgIDEsIDIyMCwgMjAsIDU1LCAyMTksIDI4LCAyNTQsIDM4LCAxLCAyMjMsIDY3LCA1NSwgMjE5LCAyOCwgMjU0LCAzOCwgMSwgCi0gICAgMjUyLCAyNSwgNTUsIDIxOSwgMjgsIDI1NCwgMzgsIDEsIDIxNywgMzYsIDU1LCAyMTksIDI4LCAyNTQsIDM4LCAxLCAyMjEsIAotICAgIDIyNiwgNTUsIDIxOSwgMjgsIDI1NCwgMzgsIDEsIDIzNCwgMjI1LCA1NSwgMjE5LCAyOCwgMjU0LCAzOCwgMSwgMjI3LCAKLSAgICAxOTQsIDU1LCAyMTksIDI4LCAyNTQsIDM4LCAxLCAyMzQsIDExNiwgNTUsIDIxOSwgMjgsIDI1NCwgMzgsIDEsIDIyMiwgMjQsIAotICAgIDU1LCAyMTksIDI4LCAyNTQsIDM4LCAxLCAyMjEsIDI0OSwgNTUsIDIxOSwgMjgsIDI1NCwgMzgsIDEsIDI0NCwgMTU0LCA1NSwgCi0gICAgMjE5LCAyOCwgMjU0LCAzOCwgMSwgMjU0LCAxNzAsIDU1LCAyMTksIDI4LCAyNTQsIDM4LCAxLCAyNTMsIDE2MSwgNTUsIAotICAgIDIxOSwgMjgsIDI1NCwgMzgsIDEsIDI0OCwgMjIsIDU1LCAyMTksIDI4LCAyNTQsIDM4LCAxLCAyNDIsIDIwMSwgNTUsIDIxOSwgCi0gICAgMjgsIDI1NCwgMzgsIDEsIDI0OCwgMTg4LCA1NSwgMjE5LCAyOCwgMjU0LCAzOCwgMSwgMjQyLCAyMzgsIDU1LCAyMTksIDI4LCAKLSAgICAyNTQsIDM4LCAxLCAyMTYsIDIyNiwgNTUsIDIxOSwgMjgsIDI1NCwgMzgsIDEsIDIxMCwgOTYsIDU1LCAyMTksIDI4LCAyNTQsIAotICAgIDM4LCAxLCAyNDgsIDE5LCA1NSwgMjE5LCAyOCwgMjU0LCAzOCwgMSwgMjEwLCAyMzIsIDU1LCAyMTksIDI4LCAyNTQsIDM4LCAKLSAgICAxLCAyMTYsIDE5NywgNTUsIDIxOSwgMjgsIDI1NCwgMzgsIDEsIDIxNiwgMTc4LCA1NSwgMjE5LCAyOCwgMjU0LCAzOCwgNTQsIAotICAgIDExMCwgNTUsIDIxOSwgMjgsIDI1NCwgMzgsIDU0LCAyNDQsIDExNCwgNTUsIDIxOSwgMjgsIDI1NCwgMzgsIDEzMiwgMjM1LCAKLSAgICAyMzgsIDI1MywgMTcyLCAxLCA2MSwgMjUzLCAxNzIsIDEsIDI1NSwgNzMsIDI1MywgMTcyLCAxLCAyNTQsIDczLCAyNTMsIAotICAgIDE3MiwgMSwgMjU1LCAzMiwgMjUzLCAxNzIsIDEsIDI1NCwgMTIzLCAyNTMsIDE3MiwgMSwgMjU1LCAzMywgMjUzLCAxNzIsIAotICAgIDEsIDI1NCwgMjQzLCAyNTMsIDE3MiwgMSwgMjU0LCAyMzksIDI1MywgMTcyLCAxLCA3NSwgMjUzLCAxNzIsIDEsIDI0NSwgCi0gICAgMjA5LCAyNTMsIDE3MiwgMSwgNzYsIDI1MywgMTcyLCAxLCAyMjYsIDE4MywgMjUzLCAxNzIsIDEsIDczLCAyNTMsIDE3MiwgCi0gICAgMSwgMjM2LCAzMywgMjUzLCAxNzIsIDEsIDcwLCAyNTMsIDE3MiwgMSwgMjE0LCAxMTgsIDI1MywgMTcyLCAxLCAyMzQsIAotICAgIDE4MiwgMjUzLCAxNzIsIDEsIDIxMSwgMTYyLCAyNTMsIDE3MiwgMSwgMjExLCAxMjgsIDI1MywgMTcyLCAxLCAyMTEsIDEzNywgCi0gICAgMjUzLCAxNzIsIDEsIDI0MywgNjIsIDI1MywgMTcyLCAxLCAyNDMsIDI0LCAyNTMsIDE3MiwgMSwgMjQyLCAyMzYsIDI1MywgCi0gICAgMTcyLCAxLCAyNTAsIDE5MCwgMjUzLCAxNzIsIDEsIDIzNSwgMTI2LCAyNTMsIDE3MiwgMSwgMjE3LCAyMiwgMjUzLCAxNzIsIAotICAgIDEsIDIxNiwgMTk1LCAyNTMsIDE3MiwgMSwgMjQ4LCA5MCwgMjUzLCAxNzIsIDEsIDI0OCwgMTcsIDI1MywgMTcyLCAxLCAKLSAgICAyMTUsIDE1MSwgMjUzLCAxNzIsIDEsIDIyNSwgMjIxLCAyNTMsIDE3MiwgMSwgMjQ0LCAxNTQsIDI1MywgMTcyLCAxLCAyNTIsIAotICAgIDc1LCAyNTMsIDE3MiwgMSwgMjUyLCAxNCwgMjUzLCAxNzIsIDEsIDIyOSwgNjQsIDI1MywgMTcyLCAxLCAyMjgsIDIzOSwgCi0gICAgMjUzLCAxNzIsIDEsIDIyOCwgMjQwLCAyNTMsIDE3MiwgMSwgMjI5LCAxMDcsIDI1MywgMTcyLCAxLCAyMjcsIDE1NiwgMjUzLCAKLSAgICAxNzIsIDEsIDIyOCwgMTA1LCAyNTMsIDE3MiwgMSwgMjMxLCA5MSwgMjUzLCAxNzIsIDEsIDI0MSwgMTE2LCAyNTMsIDE3MiwgCi0gICAgMSwgMjEwLCAxNjYsIDI1MywgMTcyLCAxLCAyMTEsIDQ3LCAyNTMsIDE3MiwgMSwgMjEzLCAyNTUsIDI1MywgMTcyLCAxLCAKLSAgICAyMjMsIDEyOCwgMjUzLCAxNzIsIDEsIDIzMywgNTgsIDI1MywgMTcyLCAxLCAyMjEsIDE4MSwgMjUzLCAxNzIsIDEsIDIxMCwgCi0gICAgOTQsIDI1MywgMTcyLCAxLCAyMjAsIDYzLCAyNTMsIDE3MiwgMSwgMjEwLCA3NCwgMjUzLCAxNzIsIDEsIDIxOSwgMTk4LCAKLSAgICAyNTMsIDE3MiwgMSwgMjE4LCAxOTMsIDI1MywgMTcyLCAxLCAyNDEsIDIzOCwgMjUzLCAxNzIsIDI1NSwgMjEsIDc4LCAyMTYsIAotICAgIDc5LCAxMTMsIDE3MCwgMTE3LCAxMjMsIDU5LCAyMjQsIDE0MCwgNCwgMTEzLCAxNzAsIDExNywgMTIzLCA1OSwgMjI0LCAKLSAgICAxNDAsIDIzMywgODUsIDExMywgMTcwLCAxMTcsIDEyMywgNTksIDIyNCwgMTQwLCAyMzMsIDg1LCAxMjMsIDU5LCAxMTcsIAotICAgIDExMywgMTcwLCAyMjQsIDE0MCwgMjMzLCA4NSwgMTEzLCAyMjIsIDIzMiwgMTE3LCAxMjMsIDIyMiwgMjM0LCAyMjQsIDE0MCwgCi0gICAgMjMzLCA4NSwgMTIzLCAyMjIsIDIzNCwgMTE3LCAxMTMsIDIyMiwgMjMyLCAyMjQsIDE0MCwgMjM1LCAyMTgsIDIyNSwgMjU0LCAKLSAgICAxLCAyNTQsIDE2OCwgMjM1LCAyMTgsIDIyNSwgMjU0LCAxLCAyNTIsIDI1LCAyMzUsIDIxOCwgMjI1LCAyNTQsIDEsIDI0MiwgCi0gICAgMjAxLCAyMzUsIDIxOCwgMjI1LCAyNTQsIDEsIDI0OCwgMTg4LCAyMzUsIDIxOCwgMjI1LCAyNTQsIDEsIDI0MSwgMjM4LCAKLSAgICAyMzUsIDIxOCwgMjI1LCAyNTQsIDEsIDIxMiwgMzAsIDIzNSwgMjE4LCAyMjUsIDI1NCwgMSwgMjEwLCA5NywgMjM1LCAyMTgsIAotICAgIDIyNSwgMjU0LCAxLCAyNDEsIDE5NSwgMjM1LCAyMTgsIDIyNSwgMjU0LCAxLCAyMTYsIDIyNiwgMjM1LCAyMTgsIDIyNSwgCi0gICAgMjU0LCAxLCAyMTAsIDIzMiwgMjM1LCAyMTgsIDIyNSwgMjU0LCAxLCAyMzQsIDIyNSwgMjM1LCAyMTgsIDIyNSwgMjU0LCAxLCAKLSAgICAyMzMsIDkzLCAyMzUsIDIxOCwgMjI1LCAyNTQsIDEsIDIzMSwgNjUsIDIzNSwgMjE4LCAyMjUsIDI1NCwgMSwgMjI3LCAxOTQsIAotICAgIDIzNSwgMjE4LCAyMjUsIDI1NCwgMSwgMjIxLCAyNDksIDIzNSwgMjE4LCAyMjUsIDI1NCwgMSwgMjUzLCAxNjIsIDIzNSwgCi0gICAgMjE4LCAyMjUsIDI1NCwgMSwgMjI1LCAyMjEsIDIzNSwgMjE4LCAyMjUsIDI1NCwgMSwgMjIyLCAyNCwgMjM1LCAyMTgsIAotICAgIDIyNSwgMjU0LCAxLCAyMjQsIDM0LCAyMzUsIDIxOCwgMjI1LCAyNTQsIDEsIDIyMywgNjcsIDIzNSwgMjE4LCAyMjUsIDI1NCwgCi0gICAgMSwgMjIwLCAyMCwgMjM1LCAyMTgsIDIyNSwgMjU0LCAxLCAyMTcsIDM2LCAyMzUsIDIxOCwgMjI1LCAyNTQsIDU0LCAxMTAsIAotICAgIDIzNSwgMjE4LCAyMjUsIDI1NCwgNTQsIDEwNSwgMjM1LCAyMTgsIDIyNSwgMjU0LCA1NCwgMTU4LCAyMzUsIDIxOCwgMjI1LCAKLSAgICAyNTQsIDU0LCAxNjEsIDIzNSwgMjE4LCAyMjUsIDI1NCwgNTQsIDIxNiwgMjQ3LCAyMzUsIDIxOCwgMjI1LCAyNTQsIDU0LCAKLSAgICAyMTUsIDczLCAyMzUsIDIxOCwgMjI1LCAyNTQsIDU0LCAxMjMsIDI0MCwgMjEwLCAyMzUsIDIxOCwgMjI1LCAyNTQsIDU0LCAKLSAgICAxMjMsIDIxNiwgMTQ3LCAyMzUsIDIxOCwgMjI2LCA3MiwgMSwgMjU0LCAxNjgsIDIzNSwgMjE4LCAyMjYsIDcyLCAxLCAyNTIsIAotICAgIDI1LCAyMzUsIDIxOCwgMjI2LCA3MiwgMSwgMjQyLCAyMDEsIDIzNSwgMjE4LCAyMjYsIDcyLCAxLCAyNDgsIDE4OCwgMjM1LCAKLSAgICAyMTgsIDIyNiwgNzIsIDEsIDI0MSwgMjM4LCAyMzUsIDIxOCwgMjI2LCA3MiwgMSwgMjEyLCAyOSwgMjM1LCAyMTgsIDIyNiwgCi0gICAgNzIsIDEsIDIxMCwgOTcsIDIzNSwgMjE4LCAyMjYsIDcyLCAxLCAyNDEsIDE5NSwgMjM1LCAyMTgsIDIyNiwgNzIsIDEsIAotICAgIDIxNiwgMjI2LCAyMzUsIDIxOCwgMjI2LCA3MiwgMSwgMjEwLCAyMzIsIDIzNSwgMjE4LCAyMjYsIDcyLCAxLCAyMzQsIDIyNSwgCi0gICAgMjM1LCAyMTgsIDIyNiwgNzIsIDEsIDIzMywgOTMsIDIzNSwgMjE4LCAyMjYsIDcyLCAxLCAyMzEsIDY0LCAyMzUsIDIxOCwgCi0gICAgMjI2LCA3MiwgMSwgMjI3LCAxOTQsIDIzNSwgMjE4LCAyMjYsIDcyLCAxLCAyMjEsIDI0OSwgMjM1LCAyMTgsIDIyNiwgNzIsIAotICAgIDEsIDIyNSwgMjIxLCAyMzUsIDIxOCwgMjI2LCA3MiwgMSwgMjIyLCAyNCwgMjM1LCAyMTgsIDIyNiwgNzIsIDEsIDIyMCwgCi0gICAgMjAsIDIzNSwgMjE4LCAyMjYsIDcyLCAxLCAyMTcsIDM2LCAyMzUsIDIxOCwgMjI2LCA3MiwgNTQsIDExMCwgMjM1LCAyMTgsIAotICAgIDIyNiwgNzIsIDU0LCAxMDUsIDIzNSwgMjE4LCAyMjYsIDcyLCA1NCwgMTU4LCAyMzUsIDIxOCwgMjI2LCA3MiwgNTQsIDE2MSwgCi0gICAgMjM1LCAyMTgsIDIyNiwgNzIsIDU0LCAyMTYsIDI0NywgMjM1LCAyMTgsIDIyNiwgNzIsIDU0LCAyMTUsIDczLCAyMzUsIAotICAgIDIxOCwgMjI2LCA3MiwgNTQsIDEyMywgMjQwLCAyMTAsIDIzNSwgMjE4LCAyMjYsIDcyLCA1NCwgMTIzLCAyMTYsIDE0NywgCi0gICAgNTUsIDIwMSwgMSwgMjI2LCAxNDksIDYxLCA1NSwgMjAxLCAxLCAyMTEsIDM3LCA2MSwgNTUsIDIwMSwgMSwgMjExLCAzNywgCi0gICAgMjU0LCAyNDMsIDU1LCAyMDEsIDEsIDIyNiwgMTQ5LCA3MywgNTUsIDIwMSwgMSwgMjExLCAzNywgNzMsIDU1LCAyMDEsIDEsIAotICAgIDIxMSwgMzcsIDc1LCA1NSwgMjAxLCAxLCAyMjYsIDE0OSwgNzYsIDU1LCAyMDEsIDEsIDIyNiwgMTQ5LCAyMjYsIDIzNCwgCi0gICAgNTUsIDIwMSwgMSwgMjExLCAzNywgMjI2LCAyMzQsIDU1LCAyMDEsIDEsIDIyNiwgMTQ5LCAyNTUsIDI1LCA1NSwgMjAxLCAxLCAKLSAgICAyMTEsIDM3LCAyNTUsIDI1LCA1NSwgMjAxLCAxLCAyMjYsIDE0OSwgMjU0LCAyNDIsIDU1LCAyMDEsIDEsIDIxMSwgMzcsIAotICAgIDI1NCwgMjQyLCA1NSwgMjAxLCAxLCAyMjYsIDE0OSwgMjU0LCAyMTYsIDU1LCAyMDEsIDEsIDIxMSwgMzcsIDI1NCwgMjE2LCAKLSAgICA1NSwgMjAxLCAxLCAyMjYsIDE0OSwgMjU0LCAyMzcsIDU1LCAyMDEsIDEsIDIxMSwgMzcsIDI1NCwgMjM3LCA1NSwgMjAxLCAKLSAgICAxLCAyMjYsIDE0OSwgMjU0LCAyNTUsIDU1LCAyMDEsIDEsIDIxMSwgMzcsIDI1NCwgMjU1LCA1NSwgMjAxLCAxLCAyMjYsIAotICAgIDE0OSwgMjU0LCAyNDEsIDU1LCAyMDEsIDEsIDIyNiwgMTQ5LCAyNDUsIDEyLCA1NSwgMjAxLCAxLCAyMTEsIDM3LCAyNDUsIAotICAgIDEyLCA1NSwgMjAxLCAxLCAyMjYsIDE0OSwgMjUzLCAxNjcsIDU1LCAyMDEsIDEsIDIxMSwgMzcsIDI1MywgMTY3LCA1NSwgCi0gICAgMjAxLCAxLCAyMjYsIDE0OSwgMjU0LCAyMjQsIDU1LCAyMDEsIDEsIDIxMSwgMzcsIDI1NCwgMjI0LCA1NSwgMjAxLCAxLCAKLSAgICAyMjYsIDE0OSwgMjU0LCAyMzUsIDU1LCAyMDEsIDEsIDIxMSwgMzcsIDI1NCwgMjM1LCA1NSwgMjAxLCAxLCAyMjYsIDE0OSwgCi0gICAgMjI2LCAyMzMsIDU1LCAyMDEsIDEsIDIxMSwgMzcsIDIyNiwgMjMzLCA1NSwgMjAxLCAxLCAyMjYsIDE0OSwgMjU0LCAxNzgsIAotICAgIDU1LCAyMDEsIDEsIDIxMSwgMzcsIDI1NCwgMTc4LCA1NSwgMjAxLCAxLCAyMjYsIDE0OSwgMjU0LCAyMzQsIDU1LCAyMDEsIAotICAgIDEsIDIyNiwgMTQ5LCAyNDUsIDE2MSwgNTUsIDIwMSwgMSwgMjI2LCAxNDksIDI0NSwgMTU5LCA1NSwgMjAxLCAxLCAyMjYsIAotICAgIDE0OSwgMjU0LCAxMjMsIDU1LCAyMDEsIDEsIDIyNiwgMTQ5LCAyNTQsIDIzMiwgNTUsIDIwMSwgMSwgMjExLCAzNywgMjU0LCAKLSAgICAyMzIsIDU1LCAyMDEsIDEsIDIyNiwgMTQ5LCAyNDUsIDEzMSwgNTUsIDIwMSwgMSwgMjExLCAzNywgMjQ1LCAxMzEsIDU1LCAKLSAgICAyMDEsIDEsIDIyNiwgMTQ5LCAyNDUsIDE0NywgNTUsIDIwMSwgMSwgMjExLCAzNywgMjQ1LCAxNDcsIDU1LCAyMDEsIDEsIAotICAgIDIyNiwgMTQ5LCAyNDUsIDExOCwgNTUsIDIwMSwgMSwgMjExLCAzNywgMjQ1LCAxMTgsIDU1LCAyMDEsIDEsIDIxMSwgMzcsIAotICAgIDI1NCwgMTE1LCA1NSwgMjAxLCAxLCAyMjYsIDE0OSwgMjQ1LCAxMzgsIDU1LCAyMDEsIDEsIDIxMSwgMzcsIDI1NCwgMjMxLCAKLSAgICA1NSwgMjAxLCAxLCAyMjYsIDE0OSwgMjQ1LCAxMDgsIDU1LCAyMDEsIDEsIDIyNiwgMTQ5LCAyMjYsIDE3NSwgNTUsIDIwMSwgCi0gICAgMSwgMjI2LCAxNDksIDI0MCwgMTEzLCA1NSwgMjAxLCAxLCAyMjYsIDE0OSwgMjQ1LCAyMTUsIDU1LCAyMDEsIDEsIDIxMSwgCi0gICAgMzcsIDI0NSwgMjE1LCA1NSwgMjAxLCAxLCAyMjYsIDE0OSwgMjU0LCA0NSwgNTUsIDIwMSwgMSwgMjExLCAzNywgMjU0LCAKLSAgICA0NSwgNTUsIDIwMSwgMSwgMjI2LCAxNDksIDIzNSwgMTgxLCA1NSwgMjAxLCAxLCAyMTEsIDM3LCAyMzUsIDE4MSwgNTUsIAotICAgIDIwMSwgMSwgMjI2LCAxNDksIDIyNiwgMTU5LCA1NSwgMjAxLCAxLCAyMTEsIDM3LCAyMjYsIDE1OSwgNTUsIDIwMSwgMSwgCi0gICAgMjI2LCAxNDksIDI1NCwgNDEsIDU1LCAyMDEsIDEsIDIxMSwgMzcsIDI1NCwgNDEsIDU1LCAyMDEsIDEsIDIyNiwgMTQ5LCAKLSAgICAyNTQsIDIzMCwgNTUsIDIwMSwgMSwgMjI2LCAxNDksIDI1MywgMjM3LCA1NSwgMjAxLCAxLCAyMjYsIDE0OSwgMjU0LCAyMjgsIAotICAgIDU1LCAyMDEsIDEsIDIyNiwgMTQ5LCAyNTMsIDIzMSwgNTUsIDIwMSwgMSwgMjExLCAzNywgMjUzLCAyMzEsIDU1LCAyMDEsIAotICAgIDEsIDIyNiwgMTQ5LCAyNDUsIDc1LCA1NSwgMjAxLCAxLCAyMTEsIDM3LCAyNDUsIDc1LCA1NSwgMjAxLCAxLCAyMjYsIDE0OSwgCi0gICAgMjUzLCAyMDYsIDU1LCAyMDEsIDEsIDIxMSwgMzcsIDI1MywgMjA2LCA1NSwgMjAxLCAxLCAyMjYsIDE0OSwgMjU0LCAyMjUsIAotICAgIDU1LCAyMDEsIDEsIDIxMSwgMzcsIDI1NCwgMjI1LCA1NSwgMjAxLCAxLCAyMjYsIDE0OSwgMjI2LCAxNDAsIDU1LCAyMDEsIAotICAgIDEsIDIyNiwgMTQ5LCAyNTIsIDEyNSwgMjIyLCAxMjcsIDIxLCAxMTAsIDIyMiwgMTI3LCAyMSwgMTA1LCAyMjIsIDEyNywgCi0gICAgMjEsIDE1OCwgMjIyLCAxMjcsIDIxLCAxNjEsIDIyMiwgMTI3LCAyMSwgMTg5LCAyMjIsIDEyNywgMjEsIDE5NCwgMjIyLCAKLSAgICAxMjcsIDIxLCAxOTgsIDIyMiwgMTI3LCAyMSwgMTk1LCAyMjIsIDEyNywgMjEsIDIwMCwgMjIyLCAxMjcsIDU0LCAyMTYsIAotICAgIDI0NywgMjIyLCAxMjcsIDU0LCAyMTUsIDczLCAyMjIsIDEyNywgNTQsIDIxNiwgMTYyLCAyMjIsIDEyNywgNTQsIDI0NCwgCi0gICAgMTUsIDIyMiwgMTI3LCA1NCwgMjQ0LCAxMTQsIDIyMiwgMTI3LCA1NCwgMjE5LCAxMTEsIDIyMiwgMTI3LCA1NCwgMjIwLCAKLSAgICAxMTYsIDIyMiwgMTI3LCA1NCwgMjQ1LCAxODQsIDIyMiwgMTI3LCA1NCwgMjI4LCAxOTUsIDIyMiwgMTI3LCA1NCwgMTIzLCAKLSAgICAyNDAsIDIxMCwgMjIyLCAxMjcsIDU0LCAxMTMsIDI0MCwgMjEwLCAyMjIsIDEyNywgNTQsIDEzNCwgMjQwLCAyMTAsIDIyMiwgCi0gICAgMTI3LCA1NCwgMjQ0LCAxMSwgMjQwLCAyMTAsIDIyMiwgMTI3LCA1NCwgMjQ0LCA4MSwgMjQwLCAyMTAsIDIyMiwgMTI3LCAKLSAgICA1NCwgMjE5LCAxMjUsIDI0MCwgMjEwLCAyMjIsIDEyNywgNTQsIDIyMCwgMTIyLCAyNDAsIDIxMCwgMjIyLCAxMjcsIDU0LCAKLSAgICAyNDUsIDE5MywgMjQwLCAyMTAsIDIyMiwgMTI3LCA1NCwgMjI4LCAyMDAsIDI0MCwgMjEwLCAyMjIsIDEyNywgMjQ0LCAyLCAKLSAgICAxMjMsIDI0MiwgMjcsIDIyMiwgMTI3LCAyNDQsIDIsIDEyMywgMjI0LCAyMSwgMjIyLCAxMjcsIDI0NCwgMiwgMTIzLCAyMTYsIAotICAgIDE2OCwgMjIyLCAxMjcsIDI0NCwgMiwgMTEzLCAyMTYsIDE2NiwgMTE4LCA1LCAyNTAsIDI1NSwgMTE4LCA1LCAyNTQsIDc1LCAKLSAgICAxMTgsIDUsIDIxMywgMTQ3LCAxMTgsIDUsIDIzNSwgMTAyLCAxMTgsIDUsIDIxNCwgMTYxLCAxMTgsIDEsIDYxLCAxMTgsIDEsIAotICAgIDI1NSwgNzMsIDExOCwgMSwgNzMsIDExOCwgMSwgMjM2LCAzMywgMTE4LCAxLCA3MCwgMTE4LCAxLCAyMTQsIDExOCwgMTE4LCAKLSAgICAxLCAxNDksIDE1MywgMTE4LCAxLCAxNDksIDIyMiwgMTgwLCAxMTgsIDEsIDE0OSwgMTU2LCAxMTgsIDEsIDE0OSwgMjMyLCAKLSAgICAxODUsIDExOCwgMSwgNzUsIDExOCwgMSwgMjU0LCAyMDEsIDExOCwgMSwgNzYsIDExOCwgMSwgMjUzLCAxOTIsIDExOCwgMSwgCi0gICAgMTc2LCAxMTgsIDEsIDIzNCwgMTMyLCAxMTgsIDEsIDI0MywgMTM1LCAxMTgsIDEsIDI0MiwgMjQ5LCAxMTgsIDEsIDIyOSwgCi0gICAgNzcsIDExOCwgMSwgMjUxLCAzMywgMTE4LCAxLCAyNTAsIDE1NywgMTE4LCAxLCAyMzUsIDE0MSwgMTE4LCAxLCAyMzUsIAotICAgIDExNCwgMTE4LCAxLCAyMjcsIDE2NSwgMTE4LCAxLCAyMTUsIDE1NiwgMTE4LCAxLCAyMTUsIDE0NCwgMTE4LCAxLCAyNDgsIAotICAgIDEzNSwgMTE4LCAxLCAyNDgsIDExOSwgMTE4LCAxLCAyMjgsIDExMCwgMTE4LCAxLCAyMTcsIDEwNSwgMTE4LCAxLCAyMTYsIAotICAgIDIwOCwgMTE4LCAxLCAyNDgsIDIyMSwgMTE4LCAxLCAyNDgsIDI1LCAxMTgsIDEsIDE5NywgMTE4LCAxLCAxOTAsIDExOCwgMSwgCi0gICAgMjI1LCAxNDcsIDExOCwgMSwgMjUyLCAxOTEsIDExOCwgMSwgMjUyLCAxOCwgMTE4LCAxLCAxODQsIDExOCwgMSwgMTkxLCAKLSAgICAxMTgsIDEsIDIwNSwgMTE4LCAxLCAyMzMsIDEzNSwgMTE4LCAxLCAyMTQsIDI3LCAxMTgsIDEsIDIyMCwgMTAyLCAxMTgsIDEsIAotICAgIDIxOCwgMjIzLCAxMTgsIDEsIDIwNiwgMTE4LCAxLCAxNjIsIDExOCwgMSwgMjMyLCAxODQsIDExOCwgMSwgNTUsIDM2LCAKLSAgICAyMzIsIDE3NSwgMTE4LCAxLCA1NSwgMzYsIDIyMiwgMTc5LCAxMTgsIDEsIDU1LCAzNiwgMjI4LCA5MiwgMTE4LCAyNSwgNSwgCi0gICAgMjU1LCA3MywgMTE4LCAyNSwgNSwgMjUyLCAxNSwgMjU1LCA3MywgMTE4LCAyNSwgNSwgNzMsIDExOCwgMjUsIDUsIDIzNiwgCi0gICAgMzMsIDExOCwgMjUsIDUsIDcwLCAxMTgsIDI1LCA1LCAyMTQsIDExOCwgMTE4LCAyNSwgNSwgMTQ5LCAxNTMsIDExOCwgMjUsIAotICAgIDUsIDE0OSwgMjIyLCAxODAsIDExOCwgMjUsIDUsIDE0OSwgMTU2LCAxMTgsIDI1LCA1LCAxNDksIDIzMiwgMTg1LCAxMTgsIAotICAgIDI1LCA1LCA3NSwgMTE4LCAyNSwgNSwgMjU0LCAyMDEsIDExOCwgMjUsIDUsIDc2LCAxMTgsIDI1LCA1LCAyNTMsIDE5MiwgCi0gICAgMTE4LCAyMTMsIDE1MiwgMTE4LCAyNDgsIDE3OCwgMTE4LCA1MiwgMjQ4LCAxNzgsIDExOCwgMjI0LCAxNDEsIDI0NywgMTIwLCAKLSAgICAxMTgsIDIyNCwgMTQxLCA1MiwgMjQ3LCAxMjAsIDExOCwgMjI0LCAxNDEsIDIzMiwgMjEzLCAxMTgsIDIyNCwgMTQxLCAyNDksIAotICAgIDEzNywgMTMwLCAxMTgsIDIyNCwgMTQxLCAyMzIsIDExNSwgMTE4LCA1NCwgMTEwLCAxMTgsIDU0LCAxMDUsIDExOCwgNTQsIAotICAgIDE1OCwgMTE4LCA1NCwgMTYxLCAxMTgsIDU0LCAxODksIDExOCwgNTQsIDE5NCwgMTE4LCA1NCwgMTk4LCAxMTgsIDU0LCAKLSAgICAxOTUsIDExOCwgNTQsIDIwMCwgMTE4LCA1NCwgMjE2LCAyNDcsIDExOCwgNTQsIDIxNSwgNzMsIDExOCwgNTQsIDIxNiwgCi0gICAgMTYyLCAxMTgsIDU0LCAyNDQsIDE1LCAxMTgsIDU0LCAyNDQsIDExNCwgMTE4LCA1NCwgMjE5LCAxMTEsIDExOCwgNTQsIAotICAgIDIyMCwgMTE2LCAxMTgsIDU0LCAyNDUsIDE4NCwgMTE4LCA1NCwgMjI4LCAxOTUsIDExOCwgNTQsIDEyMywgMjQwLCAyMTAsIAotICAgIDExOCwgNTQsIDEyMywgMjE2LCAxNDcsIDExOCwgMjEsIDIxMCwgODYsIDExOCwgMjEsIDExMCwgMTE4LCAyMSwgMTA1LCAKLSAgICAxMTgsIDIxLCAxNTgsIDExOCwgMjEsIDE2MSwgMTE4LCAyMSwgMTg5LCAxMTgsIDIxLCAxOTQsIDExOCwgMjEsIDE5OCwgCi0gICAgMTE4LCAyMSwgMTk1LCAxMTgsIDIxLCAyMDAsIDIzNCwgMjQ0LCA1LCAyNTAsIDI1NSwgMjM0LCAyNDQsIDUsIDI1NCwgNzUsIAotICAgIDIzNCwgMjQ0LCA1LCAyMTMsIDE0NywgMjM0LCAyNDQsIDEsIDYxLCAyMzQsIDI0NCwgMSwgMjU1LCA3MywgMjM0LCAyNDQsIAotICAgIDEsIDczLCAyMzQsIDI0NCwgMSwgMjM2LCAzMywgMjM0LCAyNDQsIDEsIDcwLCAyMzQsIDI0NCwgMSwgMjE0LCAxMTgsIDIzNCwgCi0gICAgMjQ0LCAxLCA3NSwgMjM0LCAyNDQsIDEsIDI1NCwgMjAxLCAyMzQsIDI0NCwgMSwgNzYsIDIzNCwgMjQ0LCAxLCAyNTMsIAotICAgIDE5MiwgMjM0LCAyNDQsIDEsIDE3NiwgMjM0LCAyNDQsIDEsIDIzNCwgMTMyLCAyMzQsIDI0NCwgMSwgMjQzLCAxMzUsIDIzNCwgCi0gICAgMjQ0LCAxLCAyNDIsIDI0OSwgMjM0LCAyNDQsIDEsIDIyOSwgNzcsIDIzNCwgMjQ0LCAxLCAyNTEsIDMzLCAyMzQsIDI0NCwgCi0gICAgMSwgMjUwLCAxNTcsIDIzNCwgMjQ0LCAxLCAyMzUsIDE0MSwgMjM0LCAyNDQsIDEsIDIzNSwgMTE0LCAyMzQsIDI0NCwgMSwgCi0gICAgMjI3LCAxNjUsIDIzNCwgMjQ0LCAxLCAyMTUsIDE1NiwgMjM0LCAyNDQsIDEsIDIxNSwgMTQ0LCAyMzQsIDI0NCwgMSwgMjQ4LCAKLSAgICAxMzUsIDIzNCwgMjQ0LCAxLCAyNDgsIDEyNCwgMjM0LCAyNDQsIDEsIDI0OCwgMTE5LCAyMzQsIDI0NCwgMSwgMjIzLCAzOSwgCi0gICAgMjM0LCAyNDQsIDEsIDIyOCwgMTEwLCAyMzQsIDI0NCwgMSwgMjE3LCAxMDUsIDIzNCwgMjQ0LCAxLCAyMTYsIDIwOCwgMjM0LCAKLSAgICAyNDQsIDEsIDI0OCwgMjIxLCAyMzQsIDI0NCwgMSwgMjQ4LCAyNSwgMjM0LCAyNDQsIDEsIDE5NywgMjM0LCAyNDQsIDEsIAotICAgIDE5MCwgMjM0LCAyNDQsIDEsIDIyNSwgMTQ3LCAyMzQsIDI0NCwgMSwgMjUyLCAxOTEsIDIzNCwgMjQ0LCAxLCAyNTIsIDE4LCAKLSAgICAyMzQsIDI0NCwgMSwgMTg0LCAyMzQsIDI0NCwgMSwgMTkxLCAyMzQsIDI0NCwgMSwgMjA1LCAyMzQsIDI0NCwgMSwgMjMzLCAKLSAgICAxMzUsIDIzNCwgMjQ0LCAxLCAyMTQsIDI3LCAyMzQsIDI0NCwgMSwgMjIwLCAxMDIsIDIzNCwgMjQ0LCAxLCAyMTgsIDIyMywgCi0gICAgMjM0LCAyNDQsIDEsIDIwNiwgMjM0LCAyNDQsIDEsIDE2MiwgMjM0LCAyNDQsIDI1LCA1LCAyNTUsIDczLCAyMzQsIDI0NCwgCi0gICAgMjUsIDUsIDczLCAyMzQsIDI0NCwgMjUsIDUsIDIzNiwgMzMsIDIzNCwgMjQ0LCAyNSwgNSwgNzAsIDIzNCwgMjQ0LCAyNSwgCi0gICAgNSwgMjE0LCAxMTgsIDIzNCwgMjQ0LCAyNSwgNSwgNzUsIDIzNCwgMjQ0LCAyNSwgNSwgMjU0LCAyMDEsIDIzNCwgMjQ0LCAKLSAgICAyNSwgNSwgNzYsIDIzNCwgMjQ0LCAyNSwgNSwgMjUzLCAxOTIsIDIzNCwgMjQ0LCA1LCAyMTMsIDE1MiwgMjM0LCAyNDQsIDUsIAotICAgIDIyNywgMjA1LCAyMzQsIDI0NCwgMjU1LCAyMSwgNTAsIDIzNCwgMjQ0LCAyNDUsIDEyMSwgNTAsIDIzNCwgMjQ0LCA1NCwgCi0gICAgNTAsIDIzNCwgMjQ0LCAyMjEsIDE3MywgNzgsIDIzNCwgMjQ0LCA1MiwgMjIxLCAxNzMsIDc4LCAyMzQsIDI0NCwgMjQ4LCAKLSAgICAxNzgsIDIzNCwgMjQ0LCA1MiwgMjQ4LCAxNzgsIDIxOSwgMzYsIDIxOSwgNDQsIDEsIDIyMiwgMTgsIDIxOSwgMzYsIDIxOSwgCi0gICAgNDQsIDEsIDIxNywgODAsIDIxOSwgMzYsIDIxOSwgNDQsIDEsIDI1MiwgMTY4LCAyMTksIDM2LCAyMTksIDQ0LCAxLCAyNTEsIAotICAgIDIzLCAyMTksIDM2LCAyMTksIDQ0LCAxLCAyNDgsIDIwMywgMjE5LCAzNiwgMjE5LCA0NCwgMSwgMjQzLCAxMjAsIDIxOSwgCi0gICAgMzYsIDIxOSwgNDQsIDEsIDIzMSwgMjEwLCAyMTksIDM2LCAyMTksIDQ0LCAxLCAyMjksIDc0LCAyMTksIDM2LCAyMTksIDQ0LCAKLSAgICAxLCAyMzMsIDExMiwgMjE5LCAzNiwgMjE5LCA0NCwgMSwgMjI5LCAyMTMsIDIxOSwgMzYsIDIxOSwgNDQsIDEsIDIxNCwgMjQsIAotICAgIDIxOSwgMzYsIDIxOSwgNDQsIDEsIDIyNiwgNzMsIDIxOSwgMzYsIDIxOSwgNDQsIDEsIDIxMSwgODQsIDIxOSwgMzYsIDIxOSwgCi0gICAgNDQsIDEsIDIyMywgMTY4LCAyMTksIDM2LCAyMTksIDQ0LCAxLCAyNDIsIDM3LCAyMTksIDM2LCAyMTksIDQ0LCAxLCAyMzQsIAotICAgIDI0OCwgMjE5LCAzNiwgMjE5LCA0NCwgMSwgMjM1LCAxMzYsIDIxOSwgMzYsIDIxOSwgNDQsIDEsIDIyNywgMTYyLCAyMTksIAotICAgIDM2LCAyMTksIDQ0LCAxLCAyNTQsIDIwOSwgMjE5LCAzNiwgMjE5LCA0NCwgMSwgMjQ1LCAyMDcsIDIxOSwgMzYsIDIxOSwgCi0gICAgNDQsIDEsIDIzNiwgMzQsIDIxOSwgMzYsIDIxOSwgNDQsIDEsIDIxNCwgMjA4LCAyMTksIDM2LCAyMTksIDQ0LCAxLCAyMjYsIAotICAgIDIyMiwgMjE5LCAzNiwgMjE5LCA0NCwgMSwgMjQ1LCAxOTcsIDIxOSwgMzYsIDIxOSwgNDQsIDEsIDIzMSwgMjIzLCAyMTksIAotICAgIDM2LCAyMTksIDQ0LCAyMSwgMjEwLCA4NiwgMjE5LCAzNiwgMjE5LCA0NCwgMjEsIDExMCwgMjE5LCAzNiwgMjE5LCA0NCwgCi0gICAgMjEsIDEwNSwgMjE5LCAzNiwgMjE5LCA0NCwgMjEsIDE1OCwgMjE5LCAzNiwgMjE5LCA0NCwgMjEsIDE2MSwgMjE5LCAzNiwgCi0gICAgMjE5LCA0NCwgMjEsIDE4OSwgMjE5LCAzNiwgMjE5LCA0NCwgMjEsIDE5NCwgMjE5LCAzNiwgMjE5LCA0NCwgMjEsIDE5OCwgCi0gICAgMjE5LCAzNiwgMjE5LCA0NCwgMjEsIDE5NSwgMjE5LCAzNiwgMjE5LCA0NCwgMjEsIDIwMCwgMjUwLCAxNTEsIDUsIDI1MCwgCi0gICAgMjU1LCAyNTAsIDE1MSwgNSwgMjU0LCA3NSwgMjUwLCAxNTEsIDUsIDIxMywgMTQ3LCAyNTAsIDE1MSwgMSwgMjU1LCA3MywgCi0gICAgMjUwLCAxNTEsIDEsIDczLCAyNTAsIDE1MSwgMSwgNzAsIDI1MCwgMTUxLCAxLCA3NSwgMjUwLCAxNTEsIDEsIDIzNSwgMTAsIAotICAgIDI1MCwgMTUxLCAxLCAyMzQsIDEzMSwgMjUwLCAxNTEsIDEsIDI0MywgMTMyLCAyNTAsIDE1MSwgMSwgMjQyLCAyNDgsIDI1MCwgCi0gICAgMTUxLCAxLCAyMjksIDc2LCAyNTAsIDE1MSwgMSwgMjUxLCAzMiwgMjUwLCAxNTEsIDEsIDI1MCwgMTU2LCAyNTAsIDE1MSwgCi0gICAgMSwgMjM1LCAxNDAsIDI1MCwgMTUxLCAxLCAyMzUsIDExMywgMjUwLCAxNTEsIDEsIDIyNywgMTY0LCAyNTAsIDE1MSwgMSwgCi0gICAgMjE1LCAxNTUsIDI1MCwgMTUxLCAxLCAyMTUsIDE0MywgMjUwLCAxNTEsIDEsIDI0OCwgMTM0LCAyNTAsIDE1MSwgMSwgMjQ4LCAKLSAgICAxMTgsIDI1MCwgMTUxLCAxLCAyMjgsIDEwOSwgMjUwLCAxNTEsIDEsIDIxNywgMTAxLCAyNTAsIDE1MSwgMSwgMjE2LCAyMDcsIAotICAgIDI1MCwgMTUxLCAxLCAyNDgsIDIyMCwgMjUwLCAxNTEsIDEsIDI0OCwgMjQsIDI1MCwgMTUxLCAxLCAyMjksIDIyNSwgMjUwLCAKLSAgICAxNTEsIDEsIDIyNiwgODksIDI1MCwgMTUxLCAxLCAyMjUsIDE0NiwgMjUwLCAxNTEsIDEsIDI1MiwgMTg5LCAyNTAsIDE1MSwgCi0gICAgMSwgMjUyLCAxNywgMjUwLCAxNTEsIDEsIDIzMSwgMjM3LCAyNTAsIDE1MSwgMSwgMjEwLCAxNjcsIDI1MCwgMTUxLCAxLCAKLSAgICAyMTEsIDEwMywgMjUwLCAxNTEsIDEsIDIyMywgMTg0LCAyNTAsIDE1MSwgMSwgMjMzLCAxMzQsIDI1MCwgMTUxLCAxLCAyMTIsIAotICAgIDY0LCAyNTAsIDE1MSwgMSwgMjIyLCAzMSwgMjUwLCAxNTEsIDEsIDI0MiwgNDYsIDI1MCwgMTUxLCAyNSwgNSwgNjEsIDI1MCwgCi0gICAgMTUxLCAyNSwgNSwgNzMsIDI1MCwgMTUxLCAyNSwgNSwgMjM2LCAzMywgMjUwLCAxNTEsIDI1LCA1LCA3MCwgMjUwLCAxNTEsIAotICAgIDI1LCA1LCAyMTQsIDExOCwgMjUwLCAxNTEsIDI1LCA1LCA3NSwgMjUwLCAxNTEsIDI1LCA1LCAyNTQsIDIwMSwgMjUwLCAKLSAgICAxNTEsIDI1LCA1LCA3NiwgMjUwLCAxNTEsIDI1LCA1LCAyNTMsIDE5MiwgMjUwLCAxNTEsIDI1LCA1LCAyMjYsIDIxOSwgCi0gICAgMjUwLCAxNTEsIDE0NCwgNzgsIDI1MCwgMTUxLCAyNTMsIDE5MywgNzgsIDI1MCwgMTUxLCAyMTMsIDE1MiwgMjUwLCAxNTEsIAotICAgIDIzMSwgMjM1LCAyNTAsIDE1MSwgMjEsIDIxMCwgODYsIDI1MCwgMTUxLCAyMSwgMTEwLCAyNTAsIDE1MSwgMjEsIDEwNSwgCi0gICAgMjUwLCAxNTEsIDIxLCAxNTgsIDI1MCwgMTUxLCAyMSwgMTYxLCAyNTAsIDE1MSwgMjEsIDE4OSwgMjUwLCAxNTEsIDIxLCAKLSAgICAxOTQsIDI1MCwgMTUxLCAyMSwgMTk4LCAyNTAsIDE1MSwgMjEsIDE5NSwgMjUwLCAxNTEsIDIxLCAyMDAsIDI1MCwgMTUxLCAKLSAgICAyMjEsIDE3MywgNzgsIDI1MCwgMTUxLCAyNDgsIDE3OCwgMjUwLCAxNTEsIDUyLCAyNDgsIDE3OCwgMjUwLCAxNTEsIDIyNCwgCi0gICAgMTMsIDc4LCAxNzQsIDUsIDI1MCwgMjU1LCAxNzQsIDUsIDI1NCwgNzUsIDE3NCwgNSwgMjEzLCAxNDcsIDE3NCwgMSwgNjEsIAotICAgIDE3NCwgMSwgMjU1LCA3MywgMTc0LCAxLCA3MywgMTc0LCAxLCAyMzYsIDMzLCAxNzQsIDEsIDcwLCAxNzQsIDEsIDIxNCwgCi0gICAgMTE4LCAxNzQsIDEsIDE0OSwgMTUzLCAxNzQsIDEsIDE0OSwgMjIyLCAxODAsIDE3NCwgMSwgMTQ5LCAxNTYsIDE3NCwgMSwgCi0gICAgMTQ5LCAyMzIsIDE4NSwgMTc0LCAxLCA3NSwgMTc0LCAxLCAyNTQsIDIwMSwgMTc0LCAxLCA3NiwgMTc0LCAxLCAyNTMsIAotICAgIDE5MiwgMTc0LCAxLCAxNzYsIDE3NCwgMSwgMjM0LCAxMzIsIDE3NCwgMSwgMjQzLCAxMzUsIDE3NCwgMSwgMjQyLCAyNDksIAotICAgIDE3NCwgMSwgMjI5LCA3NywgMTc0LCAxLCAyNTEsIDMzLCAxNzQsIDEsIDI1MCwgMTU3LCAxNzQsIDEsIDIzNSwgMTQxLCAKLSAgICAxNzQsIDEsIDIzNSwgMTE0LCAxNzQsIDEsIDIyNywgMTY1LCAxNzQsIDEsIDIxNSwgMTU2LCAxNzQsIDEsIDIxNSwgMTQ0LCAKLSAgICAxNzQsIDEsIDI0OCwgMTM1LCAxNzQsIDEsIDI0OCwgMTE5LCAxNzQsIDEsIDIyOCwgMTEwLCAxNzQsIDEsIDIxNywgMTA1LCAKLSAgICAxNzQsIDEsIDIxNiwgMjA4LCAxNzQsIDEsIDI0OCwgMjIxLCAxNzQsIDEsIDI0OCwgMjUsIDE3NCwgMSwgMTk3LCAxNzQsIDEsIAotICAgIDE5MCwgMTc0LCAxLCAyMjUsIDE0NywgMTc0LCAxLCAyNTIsIDE5MSwgMTc0LCAxLCAyNTIsIDE4LCAxNzQsIDEsIDE4NCwgCi0gICAgMTc0LCAxLCAxOTEsIDE3NCwgMSwgMjA1LCAxNzQsIDEsIDIzMywgMTM1LCAxNzQsIDEsIDIzMiwgMTg0LCAxNzQsIDEsIAotICAgIDIxNCwgMjcsIDE3NCwgMSwgMjIwLCAxMDIsIDE3NCwgMSwgMjE4LCAyMjMsIDE3NCwgMSwgMjA2LCAxNzQsIDEsIDE2MiwgCi0gICAgMTc0LCAyNSwgNSwgMjU1LCA3MywgMTc0LCAyNSwgNSwgNzMsIDE3NCwgMjUsIDUsIDIzNiwgMzMsIDE3NCwgMjUsIDUsIDcwLCAKLSAgICAxNzQsIDI1LCA1LCAyMTQsIDExOCwgMTc0LCAyNSwgNSwgMTQ5LCAxNTMsIDE3NCwgMjUsIDUsIDE0OSwgMjIyLCAxODAsIAotICAgIDE3NCwgMjUsIDUsIDE0OSwgMTU2LCAxNzQsIDI1LCA1LCAxNDksIDIzMiwgMTg1LCAxNzQsIDI1LCA1LCA3NSwgMTc0LCAyNSwgCi0gICAgNSwgMjU0LCAyMDEsIDE3NCwgMjUsIDUsIDc2LCAxNzQsIDI1LCA1LCAyNTMsIDE5MiwgMTc0LCA1LCAyMTMsIDE1MiwgMTc0LCAKLSAgICA1LCAyNTMsIDE3NSwgMTc0LCA1LCAyMzUsIDEwMiwgMTc0LCA1LCAyMTQsIDE2MSwgMTc0LCAyMjYsIDIwNCwgMTc0LCAyNDgsIAotICAgIDE3OCwgMTc0LCA1MiwgMjQ4LCAxNzgsIDE3NCwgMjU1LCAyMSwgNTAsIDE3NCwgMjIwLCAxMzcsIDE3NCwgMjEsIDIxMCwgCi0gICAgODYsIDE3NCwgMjEsIDExMCwgMTc0LCAyMSwgMTA1LCAxNzQsIDIxLCAxNTgsIDE3NCwgMjEsIDE2MSwgMTc0LCAyMSwgMTg5LCAKLSAgICAxNzQsIDIxLCAxOTQsIDE3NCwgMjEsIDE5OCwgMTc0LCAyMSwgMTk1LCAxNzQsIDIxLCAyMDAsIDIxNywgNjksIDEsIDYxLCAKLSAgICAyMTcsIDY5LCAxLCAyNTUsIDczLCAyMTcsIDY5LCAxLCA3MywgMjE3LCA2OSwgMSwgMjM2LCAzMywgMjE3LCA2OSwgMSwgNzAsIAotICAgIDIxNywgNjksIDEsIDIxNCwgMTE4LCAyMTcsIDY5LCAxLCA3NSwgMjE3LCA2OSwgMSwgMjU0LCAyMDEsIDIxNywgNjksIDEsIAotICAgIDc2LCAyMTcsIDY5LCAxLCAyNTMsIDE5MiwgMjE3LCA2OSwgMSwgMTc2LCAyMTcsIDY5LCAxLCAyMzQsIDEzMiwgMjE3LCA2OSwgCi0gICAgMSwgMjQzLCAxMzUsIDIxNywgNjksIDEsIDI0MiwgMjQ5LCAyMTcsIDY5LCAxLCAyMjksIDc3LCAyMTcsIDY5LCAxLCAyNTEsIAotICAgIDMzLCAyMTcsIDY5LCAxLCAyNTAsIDE1NywgMjE3LCA2OSwgMSwgMjM1LCAxNDEsIDIxNywgNjksIDEsIDIzNSwgMTE0LCAKLSAgICAyMTcsIDY5LCAxLCAyMjcsIDE2NSwgMjE3LCA2OSwgMSwgMjE1LCAxNTYsIDIxNywgNjksIDEsIDIxNSwgMTQ0LCAyMTcsIAotICAgIDY5LCAxLCAyNDgsIDEzNSwgMjE3LCA2OSwgMSwgMjQ4LCAxMTksIDIxNywgNjksIDEsIDIyOCwgMTEwLCAyMTcsIDY5LCAxLCAKLSAgICAyMTcsIDEwNSwgMjE3LCA2OSwgMSwgMjE2LCAyMDgsIDIxNywgNjksIDEsIDI0OCwgMjIxLCAyMTcsIDY5LCAxLCAyNDgsIAotICAgIDI1LCAyMTcsIDY5LCAxLCAxOTcsIDIxNywgNjksIDEsIDE5MCwgMjE3LCA2OSwgMSwgMjI1LCAxNDcsIDIxNywgNjksIDEsIAotICAgIDI1MiwgMTkxLCAyMTcsIDY5LCAxLCAyNTIsIDE4LCAyMTcsIDY5LCAxLCAxODQsIDIxNywgNjksIDEsIDE5MSwgMjE3LCA2OSwgCi0gICAgMSwgMjA1LCAyMTcsIDY5LCAxLCAyMzMsIDEzNSwgMjE3LCA2OSwgMSwgMjE0LCAyNywgMjE3LCA2OSwgMSwgMjIwLCAxMDIsIAotICAgIDIxNywgNjksIDEsIDIwNiwgMjE3LCA2OSwgMSwgMTYyLCAyMTcsIDY5LCAxLCAyMjIsIDE3OSwgMjE3LCA2OSwgNSwgMjU0LCAKLSAgICA3NSwgMjE3LCA2OSwgNSwgMjEzLCAxNDcsIDIxNywgNjksIDI1LCA1LCAyNTUsIDczLCAyMTcsIDY5LCAyNSwgNSwgNzMsIAotICAgIDIxNywgNjksIDI1LCA1LCAyMzYsIDMzLCAyMTcsIDY5LCAyNSwgNSwgNzAsIDIxNywgNjksIDI1LCA1LCAyMTQsIDExOCwgCi0gICAgMjE3LCA2OSwgMjUsIDUsIDc1LCAyMTcsIDY5LCAyNSwgNSwgMjU0LCAyMDEsIDIxNywgNjksIDI1LCA1LCA3NiwgMjE3LCAKLSAgICA2OSwgMjUsIDUsIDI1MywgMTkyLCAyMTcsIDY5LCA1LCAyMTMsIDE1MiwgMjE3LCA2OSwgNSwgMjI3LCAyMDUsIDIxNywgNjksIAotICAgIDIxLCAyMTAsIDg2LCAyMTcsIDY5LCAyMSwgMTEwLCAyMTcsIDY5LCAyMSwgMTA1LCAyMTcsIDY5LCAyMSwgMTU4LCAyMTcsIAotICAgIDY5LCAyMSwgMTYxLCAyMTcsIDY5LCAyMSwgMTg5LCAyMTcsIDY5LCAyMSwgMTk0LCAyMTcsIDY5LCAyMSwgMTk4LCAyMTcsIAotICAgIDY5LCAyMSwgMTk1LCAyMTcsIDY5LCAyMSwgMjAwLCAxNSwgNSwgNjEsIDE1LCA1LCAxMTUsIDMwLCA2MSwgMTUsIDUsIDExNSwgCi0gICAgMzAsIDI1MiwgMTc2LCAxNSwgNSwgMTE1LCAzMCwgMjQzLCAxMDUsIDIxNiwgMjM5LCAxNSwgNSwgMTE1LCAzMCwgMTYyLCAKLSAgICAxNSwgNSwgMTE1LCAzMCwgMjM2LCAzNSwgMTUsIDUsIDExNSwgMzAsIDIzMywgMTE2LCAyNDIsIDk0LCAxNSwgNSwgMTE1LCAKLSAgICAzMCwgMjMwLCA2MSwgMTUsIDUsIDExNSwgMzAsIDIyMiwgMjEsIDE1LCA1LCAyNTUsIDc1LCAxNSwgNSwgMjU1LCAyNSwgMTUsIAotICAgIDUsIDI1NSwgMjYsIDMwLCAyNTMsIDIyOSwgMTUsIDUsIDI1NSwgMjYsIDMwLCAyNDYsIDY3LCAyNDIsIDk0LCAxNSwgNSwgCi0gICAgMjU1LCAyNiwgMzAsIDI0MywgMTE4LCAxNSwgNSwgMjU1LCAyNiwgMzAsIDI0MywgMTA1LCAyMTYsIDIzOSwgMTUsIDUsIAotICAgIDI1NSwgMjYsIDMwLCAxNjIsIDE1LCA1LCAyNTUsIDI2LCAzMCwgMjM2LCAzNiwgMjQyLCA5NCwgMTUsIDUsIDI1NSwgMjYsIAotICAgIDMwLCAyMzYsIDksIDE1LCA1LCAyNTUsIDI2LCAzMCwgMjMzLCAxMTcsIDE1LCA1LCAyNTUsIDI2LCAzMCwgMjIwLCA0OCwgCi0gICAgMTUsIDUsIDI1NSwgMjYsIDMwLCAxMDQsIDk2LCAxMDQsIDk2LCA3MCwgMTUsIDUsIDI1NSwgMjYsIDI0MiwgOTQsIDE1LCA1LCAKLSAgICAyNTUsIDIzLCAxNSwgNSwgMjU1LCAyNCwgMzAsIDI1MiwgMTYwLCAxNSwgNSwgMjU1LCAyNCwgMzAsIDI0MywgMTA1LCAyMTYsIAotICAgIDIzOSwgMTUsIDUsIDI1NSwgMjQsIDMwLCAyMzEsIDkyLCA5NiwgMjQ1LCAxNTAsIDE1LCA1LCAyNTUsIDI0LCAzMCwgMjIwLCAKLSAgICAxMDAsIDE1LCA1LCAyNTUsIDI0LCAzMCwgMjE3LCA3MiwgMTUsIDUsIDI1NCwgMjU1LCAxNSwgNSwgMjU0LCAxODYsIDE1LCAKLSAgICA1LCAyNTQsIDE4NywgMzAsIDI0NSwgODcsIDE1LCA1LCAyNTQsIDE4NywgMzAsIDIyMCwgMTAsIDk2LCAyNDIsIDE5MCwgMTUsIAotICAgIDUsIDI1NCwgMTc4LCAxNSwgNSwgMjU0LCAxNzksIDMwLCAyNTQsIDE3OCwgMTUsIDUsIDI1NCwgMTc5LCAzMCwgMjQ3LCAKLSAgICAyMTYsIDE1LCA1LCAyNTQsIDE3OSwgMzAsIDI0MiwgMTkwLCAxNSwgNSwgMjU0LCAxNzksIDMwLCAxNjIsIDE1LCA1LCAyNTQsIAotICAgIDE3OSwgMzAsIDIzNCwgMjU1LCAxNSwgNSwgMjU0LCAxNzksIDMwLCAyMzQsIDkyLCAxNSwgNSwgMjU0LCAxNzksIDMwLCAKLSAgICAyMjAsIDYzLCAxNSwgNSwgMjU0LCAxNzksIDMwLCAyMTQsIDEyNiwgMTUsIDUsIDI1NCwgMTc1LCAxNSwgNSwgMjU0LCAxNjgsIAotICAgIDE1LCA1LCAyNTQsIDEzMiwgMTUsIDUsIDI1NCwgMTMzLCAzMCwgMjIwLCA2MywgMTUsIDUsIDI1NCwgMTIzLCAxNSwgNSwgCi0gICAgMjU0LCAxMjQsIDExNywgMjU0LCAxMjMsIDE1LCA1LCAyNTQsIDEyNCwgMTM0LCAyMTYsIDg1LCAxNSwgNSwgMjU0LCAxMjQsIAotICAgIDk2LCAyMjksIDIxNywgMjI2LCAxNjQsIDI1NCwgMTI0LCA5NiwgMjI5LCAyMTYsIDE1LCA1LCAyNTQsIDEyNCwgOTYsIDIyOSwgCi0gICAgMjE3LCAyMTgsIDIzMywgMTUsIDUsIDI1NCwgOTQsIDE1LCA1LCAyNTQsIDY3LCAxNSwgNSwgMjU0LCAzNSwgMTUsIDUsIAotICAgIDI1NCwgMzYsIDMwLCAyMzMsIDE5NiwgMTUsIDUsIDI1NCwgOCwgMTUsIDUsIDI1MywgMjM2LCAxNSwgNSwgMjUzLCAyMzEsIAotICAgIDE1LCA1LCAyNTMsIDIzMiwgMjEwLCA0MCwgMjE2LCAyMzksIDE1LCA1LCAyNTMsIDIzMiwgMjM1LCAzLCAyMTYsIDIzOSwgCi0gICAgMTUsIDUsIDI1MywgMjMyLCAxMTcsIDI1MywgMjMyLCAyMTUsIDExNCwgMTE3LCAyMTUsIDExNCwgMjE1LCAxMTQsIDExNywgCi0gICAgMjE1LCAxMTQsIDIyNiwgMjEsIDE1LCA1LCAyNTMsIDIzMiwgMTE3LCAyNTMsIDIzMiwgMTE3LCAyNTMsIDIzMSwgMTUsIDUsIAotICAgIDI1MywgMjMyLCAxMTcsIDI1MywgMjMyLCAxMTcsIDI1MywgMjMyLCAyNDksIDEyNSwgMjUzLCAyMzIsIDExNywgMjUzLCAKLSAgICAyMzIsIDExNywgMjUzLCAyMzEsIDE1LCA1LCAyNTMsIDIyOSwgMTUsIDUsIDI1MywgMjI2LCAxNSwgNSwgMjUyLCAxOTEsIAotICAgIDE1LCA1LCAyNTIsIDE3NiwgMTUsIDUsIDI1MiwgMTcxLCAxNSwgNSwgMjUyLCAxNjcsIDE1LCA1LCAyNTIsIDE2MSwgMTUsIAotICAgIDUsIDI1MiwgMTYyLCAxMTcsIDI1MiwgMTYxLCAxNSwgNSwgMjUyLCAxNjAsIDE1LCA1LCAxMzAsIDE1LCA1LCAyNTIsIDE0MCwgCi0gICAgMTUsIDUsIDI1MiwgNiwgMTUsIDUsIDI1MiwgNywgMzAsIDYxLCAxNSwgNSwgMjUyLCA3LCAzMCwgMjQzLCA5NiwgMTUsIDUsIAotICAgIDI1MiwgNywgMzAsIDIzNiwgMzYsIDI0MiwgOTQsIDE1LCA1LCAyNTEsIDEyNSwgMTUsIDUsIDI1MSwgMTI2LCAxMTcsIDI1MSwgCi0gICAgMTI2LCAyNTUsIDI1LCAxNSwgNSwgMjUxLCAxMjYsIDExNywgMjUxLCAxMjYsIDIxNCwgMTkwLCAxNSwgNSwgMjUxLCAxMjYsIAotICAgIDI0OSwgMTI1LCAyNTEsIDEyNSwgMTUsIDUsIDI1MSwgMTA5LCAxNSwgNSwgMjUxLCAxMTAsIDExNywgMjUxLCAxMDksIDE1LCAKLSAgICA1LCAyNTEsIDk4LCAxNSwgNSwgMjUxLCA5NywgMTUsIDUsIDI0OCwgMjIxLCAxNSwgNSwgMjQ4LCAyMTIsIDE1LCA1LCAyNDgsIAotICAgIDIxMywgMjM0LCA2NiwgMzAsIDExNSwgOTYsIDIzMSwgMTQ3LCAxNSwgNSwgMjQ4LCAyMTMsIDIzNCwgNjYsIDMwLCAyNTQsIAotICAgIDEzMiwgMTUsIDUsIDI0OCwgMjEzLCAyMzQsIDY2LCAzMCwgMjUyLCAxNjAsIDE1LCA1LCAyNDgsIDIxMywgMjM0LCA2NiwgCi0gICAgMzAsIDI1MiwgNiwgMTUsIDUsIDI0OCwgMjEzLCAyMzQsIDY2LCAzMCwgMjQzLCAxMzUsIDE1LCA1LCAyNDgsIDIxMywgMjM0LCAKLSAgICA2NiwgMzAsIDI0MywgMTM2LCA5NiwgMjMxLCAxNDcsIDE1LCA1LCAyNDgsIDIxMywgMjM0LCA2NiwgMzAsIDI0MiwgMjE0LCAKLSAgICAxNSwgNSwgMjQ4LCAyMTMsIDIzNCwgNjYsIDMwLCAyNDIsIDE5NywgMTUsIDUsIDI0OCwgMjEzLCAyMzQsIDY2LCAzMCwgCi0gICAgMjQyLCAxMDMsIDE1LCA1LCAyNDgsIDIxMywgMjM0LCA2NiwgMzAsIDE2MiwgMTUsIDUsIDI0OCwgMjEzLCAyMzQsIDY2LCAKLSAgICAzMCwgMjM1LCAxNzksIDE1LCA1LCAyNDgsIDIxMywgMjM0LCA2NiwgMzAsIDIzNSwgMTgwLCA5NiwgMjMyLCA5OCwgMTUsIDUsIAotICAgIDI0OCwgMjEzLCAyMzQsIDY2LCAzMCwgMjM0LCAyNDIsIDE1LCA1LCAyNDgsIDIxMywgMjM0LCA2NiwgMzAsIDIzMywgMTM1LCAKLSAgICAxNSwgNSwgMjQ4LCAyMTMsIDIzNCwgNjYsIDMwLCAyMzIsIDk4LCAxNSwgNSwgMjQ4LCAyMTMsIDIzNCwgNjYsIDMwLCAyMzIsIAotICAgIDk5LCA5NiwgMjMxLCAxNDYsIDE1LCA1LCAyNDgsIDIxMywgMjM0LCA2NiwgMzAsIDIzMiwgODQsIDE1LCA1LCAyNDgsIDIxMywgCi0gICAgMjM0LCA2NiwgMzAsIDIyOSwgMTA3LCAxNSwgNSwgMjQ4LCAyMTMsIDIzNCwgNjYsIDMwLCAyMjYsIDIyLCA5NiwgMjI2LCAKLSAgICAyMSwgMTUsIDUsIDI0OCwgMjEzLCAyMzQsIDY2LCAzMCwgMjE5LCAxOTEsIDE1LCA1LCAyNDgsIDIxMywgMjM0LCA2NiwgMzAsIAotICAgIDIxNywgNzIsIDE1LCA1LCAyNDgsIDIxMywgMjM0LCA2NiwgMzAsIDIxNCwgMjMxLCA5NiwgMjQyLCAxOTcsIDE1LCA1LCAKLSAgICAyNDgsIDIxMywgMjM0LCA2NiwgMzAsIDIxNCwgMTI2LCAxNSwgNSwgMjQ4LCAxODcsIDE1LCA1LCAyNDgsIDE2NiwgMTUsIDUsIAotICAgIDI0OCwgMTY1LCAxNSwgNSwgMjQ4LCAxNjQsIDE1LCA1LCAyNDgsIDMsIDE1LCA1LCAyNDcsIDI0MiwgMTUsIDUsIDI0NywgCi0gICAgMjE3LCAxNSwgNSwgMjQ3LCAyMTgsIDMwLCAyMjAsIDYzLCAxNSwgNSwgMjQ3LCAyMTYsIDE1LCA1LCAyNDcsIDIwNiwgMTUsIAotICAgIDUsIDI0NywgMjA3LCAyMzQsIDIwOCwgMTA0LCAyNDIsIDk1LCAyNDcsIDE4NywgMTUsIDUsIDI0NywgMTg3LCAxNSwgNSwgCi0gICAgMjQ2LCA3OCwgMTUsIDUsIDI0NiwgNzksIDExNywgMjQ2LCA3OCwgMTUsIDUsIDI0NiwgNzksIDI0MiwgOTQsIDE1LCA1LCAKLSAgICAyNDYsIDc5LCAyMjAsIDQ1LCAxNSwgNSwgMjQ2LCA3NiwgMTUsIDUsIDI0NiwgNzcsIDMwLCAyNDUsIDcyLCAxNSwgNSwgCi0gICAgMjQ2LCA3NSwgMTUsIDUsIDI0NiwgNzQsIDE1LCA1LCAyNDYsIDczLCAxNSwgNSwgMjQ2LCA3MiwgMTUsIDUsIDI0NiwgNjgsIAotICAgIDE1LCA1LCAyNDYsIDY2LCAxNSwgNSwgMjQ2LCA2NywgMjQyLCA5NCwgMTUsIDUsIDI0NiwgNjcsIDI0MiwgOTUsIDI0MiwgCi0gICAgOTQsIDE1LCA1LCAyNDYsIDY1LCAxNSwgNSwgMjQ2LCA1OCwgMTUsIDUsIDc1LCAxNSwgNSwgMTYwLCAzMCwgMjI2LCAyMSwgCi0gICAgMTUsIDUsIDE2MCwgMTE3LCAxNjAsIDIyNywgMTk1LCAxMTcsIDIyNywgMTk0LCAxNSwgNSwgMjQ1LCAyMzQsIDE1LCA1LCAKLSAgICAyNDUsIDIzNSwgMzAsIDExNSwgOTYsIDI0MiwgNDksIDk2LCAyNDgsIDIyMSwgMTUsIDUsIDI0NSwgMjM1LCAzMCwgMjQzLCAKLSAgICA5NiwgMTUsIDUsIDI0NSwgMjM1LCAzMCwgMjMwLCAyMzAsIDE1LCA1LCAyNDUsIDIzNSwgMzAsIDIyMiwgOCwgMTUsIDUsIAotICAgIDI0NSwgMjM1LCAzMCwgMjIwLCA2MywgMTUsIDUsIDI0NSwgMjM1LCAzMCwgNzAsIDE1LCA1LCAyNDUsIDIxMSwgMTUsIDUsIAotICAgIDI0NSwgMjAwLCAxNSwgNSwgMjQ1LCAxNzQsIDE1LCA1LCAyNDUsIDE1MCwgMTUsIDUsIDI0NSwgMTUxLCAzMCwgMjQzLCAKLSAgICAxMDQsIDE1LCA1LCAyNDUsIDE1MSwgMzAsIDI0MywgMTA1LCAyMTYsIDIzOSwgMTUsIDUsIDI0NSwgMTUxLCAzMCwgMjMxLCAKLSAgICA5MSwgMTUsIDUsIDI0NSwgMTUxLCAyNDksIDEyNSwgMjQ1LCAxNTAsIDE1LCA1LCAyNDUsIDE1MSwgMjI2LCAxNjQsIDI0NSwgCi0gICAgMTUwLCAxNSwgNSwgMjQ1LCAxNTEsIDIxOCwgMjMzLCAxNSwgNSwgMjQ1LCA4OSwgMTUsIDUsIDI0NSwgODcsIDE1LCA1LCAKLSAgICAyNDUsIDcyLCAxNSwgNSwgMjQ1LCAxMCwgMTUsIDUsIDI0NSwgMTEsIDMwLCA2MSwgMTUsIDUsIDI0NSwgMTEsIDMwLCAxMTUsIAotICAgIDk2LCAyMzMsIDEwNCwgMTUsIDUsIDI0NSwgMTEsIDMwLCAxMTUsIDk2LCAyMzMsIDEwNSwgMzAsIDIzMywgMTA0LCAxNSwgNSwgCi0gICAgMjQ1LCAxMSwgMzAsIDI1NCwgMTIzLCAxNSwgNSwgMjQ1LCAxMSwgMzAsIDI1MiwgMTc2LCAxNSwgNSwgMjQ1LCAxMSwgMzAsIAotICAgIDI0NiwgNjcsIDI0MiwgOTQsIDE1LCA1LCAyNDUsIDExLCAzMCwgMjQ2LCA2NywgMjQyLCA5NSwgMjQyLCA5NCwgMTUsIDUsIAotICAgIDI0NSwgMTEsIDMwLCAxNjIsIDE1LCA1LCAyNDUsIDExLCAzMCwgMjQyLCA0OSwgMjQyLCA5NCwgMTUsIDUsIDI0NSwgMTEsIAotICAgIDMwLCAyMzYsIDM2LCAyNDIsIDk0LCAxNSwgNSwgMjQ1LCAxMSwgMzAsIDIzNCwgMjA3LCAxNSwgNSwgMjQ1LCAxMSwgMzAsIAotICAgIDIzNCwgMjA4LCAyMTgsIDIzMywgMTUsIDUsIDI0NSwgMTEsIDMwLCAyMzMsIDIxNSwgMTUsIDUsIDI0NSwgMTEsIDMwLCAKLSAgICAyMzMsIDEzNSwgMTUsIDUsIDI0NSwgMTEsIDMwLCAyMzMsIDEwNSwgMzAsIDIzMywgMTA0LCAxNSwgNSwgMjQ1LCAxMSwgMzAsIAotICAgIDIzMiwgMjQxLCAxNSwgNSwgMjQ1LCAxMSwgMzAsIDIzMiwgOTgsIDE1LCA1LCAyNDUsIDExLCAzMCwgMjE0LCAyMzAsIDE1LCAKLSAgICA1LCAyNDUsIDExLCAzMCwgMjE0LCAyMTksIDE1LCA1LCAyNDMsIDEzNSwgMTUsIDUsIDI0MywgMTM2LCAyNDIsIDk0LCAxNSwgCi0gICAgNSwgMjQzLCAxMzMsIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDExNSwgOTYsIDI0OCwgMjIyLCA5NiwgMTYyLCAxNSwgNSwgMjQzLCAKLSAgICAxMzQsIDMwLCAxMTUsIDk2LCAxNjIsIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDExNSwgOTYsIDIzNiwgMzUsIDE1LCA1LCAyNDMsIAotICAgIDEzNCwgMzAsIDI1NSwgMjQsIDIxNiwgMjQwLCA5NiwgMjE3LCA5MywgMTUsIDUsIDI0MywgMTM0LCAzMCwgMjU0LCAxMjMsIAotICAgIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDI1MywgMjMxLCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAyNTMsIDIzMCwgOTYsIDI0MywgCi0gICAgMTE4LCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAyNTIsIDE3NiwgMTUsIDUsIDI0MywgMTM0LCAzMCwgMjUyLCAxNDEsIDk2LCAKLSAgICAyMDUsIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDI1MSwgOTgsIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDI1MSwgOTksIDk2LCAyMDUsIAotICAgIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDI0OCwgMjIxLCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAyNDgsIDMsIDE1LCA1LCAyNDMsIAotICAgIDEzNCwgMzAsIDI0NywgMjE4LCAzMCwgMjIwLCA2MywgMTUsIDUsIDI0MywgMTM0LCAzMCwgMjQ2LCA3NiwgMTUsIDUsIDI0MywgCi0gICAgMTM0LCAzMCwgMjQ1LCAxNzQsIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDI0NSwgMTc1LCA5NiwgMjMzLCAxMzUsIDE1LCA1LCAKLSAgICAyNDMsIDEzNCwgMzAsIDI0NSwgMTUwLCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAyNDUsIDE1MSwgMzAsIDI0MywgMTA1LCAyMTYsIAotICAgIDIzOSwgMTUsIDUsIDI0MywgMTM0LCAzMCwgMjQzLCAxMDUsIDIxNiwgMjM5LCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAyNDMsIAotICAgIDk2LCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAyNDIsIDIxNCwgMTUsIDUsIDI0MywgMTM0LCAzMCwgMjQyLCAyMTIsIDE1LCA1LCAKLSAgICAyNDMsIDEzNCwgMzAsIDI0MiwgMjEzLCA5NiwgNjEsIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDI0MiwgMTk4LCA5NiwgMjE4LCAKLSAgICA4MywgMTUsIDUsIDI0MywgMTM0LCAzMCwgMjQyLCA0OSwgOTYsIDIzMiwgOTksIDk2LCAyNDUsIDcyLCAxNSwgNSwgMjQzLCAKLSAgICAxMzQsIDMwLCAyNDIsIDMwLCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAyNDIsIDMxLCA5NiwgMjMzLCAxMzUsIDE1LCA1LCAyNDMsIAotICAgIDEzNCwgMzAsIDI0MSwgMTgxLCA5NiwgMjMyLCAyNDEsIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDI0MCwgMjE4LCAxNSwgNSwgCi0gICAgMjQzLCAxMzQsIDMwLCAyMzYsIDM2LCAyNDIsIDk0LCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAyMzUsIDE2NiwgOTYsIDI0MCwgCi0gICAgMjIzLCA5NiwgMjUzLCAyMzEsIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDIzNCwgMjQyLCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAKLSAgICAyMzQsIDIwNywgMTUsIDUsIDI0MywgMTM0LCAzMCwgMjM0LCA4OSwgMTUsIDUsIDI0MywgMTM0LCAzMCwgMjM0LCA5MCwgOTYsIAotICAgIDIzMywgMTA0LCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAyMzMsIDIxNiwgOTYsIDI1NCwgMTIzLCAxNSwgNSwgMjQzLCAxMzQsIAotICAgIDMwLCAyMzMsIDEzNSwgMTUsIDUsIDI0MywgMTM0LCAzMCwgMjMxLCA5MiwgOTYsIDI0NSwgMTUwLCAxNSwgNSwgMjQzLCAKLSAgICAxMzQsIDMwLCAyMzAsIDIzMCwgMTUsIDUsIDI0MywgMTM0LCAzMCwgMjI3LCAxOTQsIDE1LCA1LCAyNDMsIDEzNCwgMzAsIAotICAgIDIyNywgMTk1LCAxMTcsIDIyNywgMTk0LCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAxOTAsIDE1LCA1LCAyNDMsIDEzNCwgMzAsIAotICAgIDIyMiwgOCwgMTUsIDUsIDI0MywgMTM0LCAzMCwgMjIxLCAyMzEsIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDIyMCwgNjMsIDE1LCAKLSAgICA1LCAyNDMsIDEzNCwgMzAsIDIyMCwgNjQsIDk2LCAyMTUsIDk4LCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAyMjAsIDMwLCAxNSwgCi0gICAgNSwgMjQzLCAxMzQsIDMwLCAyMTgsIDQzLCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAyMTcsIDcyLCAxNSwgNSwgMjQzLCAxMzQsIAotICAgIDMwLCA3MCwgMTUsIDUsIDI0MywgMTM0LCAzMCwgMjE0LCAyMTksIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDIxNCwgMjIwLCA5NiwgCi0gICAgMjQ2LCA3OCwgMTUsIDUsIDI0MywgMTM0LCAxMTcsIDI0MywgMTMzLCAxNSwgNSwgMjQzLCAxMjgsIDE1LCA1LCAyNDMsIAotICAgIDEyOSwgMjQ5LCAxMjUsIDI0MywgMTI4LCAxNSwgNSwgMjQzLCAxMjYsIDE1LCA1LCAyNDMsIDEyNywgMTE3LCAyNDMsIDEyNywgCi0gICAgMjQzLCA5NywgMTE3LCAyNDMsIDk2LCAxNSwgNSwgMjQzLCAxMTgsIDE1LCA1LCAyNDMsIDExOSwgMjQzLCAxMjcsIDExNywgCi0gICAgMjQzLCAxMjcsIDI0MywgOTcsIDExNywgMjQzLCA5NiwgMTUsIDUsIDI0MywgMTE3LCAxNSwgNSwgMjQzLCAxMTUsIDE1LCA1LCAKLSAgICAyNDMsIDEwNiwgMTUsIDUsIDI0MywgMTA0LCAxNSwgNSwgMjQzLCAxMDUsIDIxNiwgMjM5LCAxNSwgNSwgMjQzLCAxMDUsIAotICAgIDExNywgMjQzLCAxMDQsIDE1LCA1LCAyNDMsIDEwNSwgMjQ5LCAxMjUsIDI0MywgMTA0LCAxNSwgNSwgMjQzLCA5NiwgMTUsIAotICAgIDUsIDI0MywgOTUsIDE1LCA1LCAyNDMsIDkwLCAxNSwgNSwgMjQzLCAzNiwgMTUsIDUsIDI0MywgMzcsIDMwLCAyMzMsIDE5NiwgCi0gICAgMTUsIDUsIDI0MiwgMjE0LCAxNSwgNSwgMjQyLCAyMTUsIDMwLCA3NSwgMTUsIDUsIDI0MiwgMjE1LCAzMCwgNzAsIDE1LCA1LCAKLSAgICAyNDIsIDIxNSwgMjQ5LCAxMjUsIDI0MiwgMjE0LCAxNSwgNSwgMjQyLCAyMTIsIDE1LCA1LCAyNDIsIDIxMywgMTE3LCAyNDIsIAotICAgIDIxMiwgMTUsIDUsIDI0MiwgMjEzLCAyNDksIDEyNSwgMjQyLCAyMTIsIDE1LCA1LCAyNDIsIDIwOSwgMTUsIDUsIDI0MiwgCi0gICAgMTk3LCAxNSwgNSwgMjQyLCAxOTgsIDI0MiwgOTQsIDE1LCA1LCAyNDIsIDE5NSwgMTUsIDUsIDI0MiwgMTk2LCAzMCwgMTE1LCAKLSAgICA5NiwgMjM2LCAzNSwgMTUsIDUsIDI0MiwgMTk2LCAzMCwgMjQzLCAxMDUsIDIxNiwgMjM5LCAxNSwgNSwgMjQyLCAxOTYsIAotICAgIDMwLCAyMzYsIDM1LCAxNSwgNSwgMjQyLCAxOTYsIDMwLCAyMzIsIDk5LCA5NiwgMjM2LCAzNSwgMTUsIDUsIDI0MiwgMTk2LCAKLSAgICAzMCwgMTkwLCAxNSwgNSwgMjQyLCAxOTIsIDE1LCA1LCAyNDIsIDE5MCwgMTUsIDUsIDI0MiwgMTkxLCAyNDksIDEyNSwgCi0gICAgMjQyLCAxOTAsIDE1LCA1LCAyNDIsIDE5MSwgMzAsIDI1MiwgMTc2LCAxNSwgNSwgMjQyLCAxOTEsIDMwLCAyMTcsIDcyLCAKLSAgICAxNSwgNSwgMjQyLCAxOTEsIDIxNiwgMjM5LCAxNSwgNSwgMjQyLCAxMTMsIDE1LCA1LCAyNDIsIDExNCwgMjQ5LCAxMjUsIAotICAgIDI0MiwgMTEzLCAxNSwgNSwgMjQyLCAxMTEsIDE1LCA1LCAyNDIsIDExMiwgMzAsIDIzNCwgMjQyLCAxNSwgNSwgMjQyLCAKLSAgICAxMTIsIDMwLCAyMzQsIDI0MywgMzAsIDIzNiwgMzYsIDI0MiwgOTQsIDE1LCA1LCAyNDIsIDExMiwgMzAsIDIyNywgMTk0LCAKLSAgICAxNSwgNSwgMjQyLCAxMTIsIDMwLCAyMjIsIDksIDk2LCAyMTUsIDExMywgMTUsIDUsIDI0MiwgMTEyLCAyNDIsIDk0LCAxNSwgCi0gICAgNSwgMjQyLCAxMDMsIDE1LCA1LCAyNDIsIDEwNCwgMzAsIDExNSwgOTYsIDIzMywgMTk2LCAxNSwgNSwgMjQyLCAxMDQsIDMwLCAKLSAgICAyMzMsIDE5NiwgMTUsIDUsIDI0MiwgMTA0LCAxMTcsIDI0MiwgMTA0LCAyMzIsIDkxLCAxNSwgNSwgMjQyLCA5OCwgMTUsIDUsIAotICAgIDI0MiwgOTYsIDE1LCA1LCAyNDIsIDk3LCAzMCwgMjIwLCA2MywgMTUsIDUsIDI0MiwgODgsIDE1LCA1LCAyNDIsIDg3LCAxNSwgCi0gICAgNSwgMjQyLCA4NCwgMTUsIDUsIDI0MiwgODMsIDE1LCA1LCAxNjIsIDE1LCA1LCAyNDIsIDQ5LCAyMTYsIDIzOSwgMTUsIDUsIAotICAgIDI0MiwgNDksIDI0MiwgOTQsIDE1LCA1LCAyNDIsIDMwLCAxNSwgNSwgMjQxLCAxODAsIDE1LCA1LCAyNDEsIDE4MSwgMzAsIAotICAgIDI1MywgMjMxLCAxNSwgNSwgMjQxLCAxODEsIDMwLCAyNTMsIDIyOSwgMTUsIDUsIDI0MSwgMTgxLCAzMCwgMjUyLCAxNzYsIAotICAgIDE1LCA1LCAyNDEsIDE4MSwgMzAsIDI0NywgMTg3LCAxNSwgNSwgMjQxLCAxODEsIDMwLCAyNDMsIDEyNiwgMTUsIDUsIDI0MSwgCi0gICAgMTgxLCAzMCwgMjM0LCA4MSwgMTUsIDUsIDI0MSwgMTgxLCAzMCwgMjI3LCAxOTQsIDE1LCA1LCAyNDEsIDE4MSwgMzAsIAotICAgIDIyMCwgNjMsIDE1LCA1LCAyNDEsIDE4MSwgMzAsIDcwLCAxNSwgNSwgMjQwLCAyMjIsIDE1LCA1LCAyNDAsIDIxOCwgMTUsIAotICAgIDUsIDI0MCwgMjE5LCAzMCwgMjU0LCAxMjMsIDE1LCA1LCAyNDAsIDIxOSwgMzAsIDI0MiwgMzAsIDE1LCA1LCAyNDAsIDIxOSwgCi0gICAgMzAsIDIzNCwgMjA3LCAxNSwgNSwgMjQwLCAyMTksIDMwLCAyMzIsIDE5NywgMTUsIDUsIDI0MCwgMjE5LCAzMCwgMjE0LCAKLSAgICAyMTksIDE1LCA1LCAyNDAsIDIxNSwgMTUsIDUsIDczLCAxNSwgNSwgMjQwLCAxNTQsIDYxLCAxNSwgNSwgMjQwLCAxMTUsIAotICAgIDE1LCA1LCAyMzYsIDYzLCAxNSwgNSwgMjM2LCA2NCwgMTE3LCAyMzYsIDY0LCAyNTEsIDk4LCAxNSwgNSwgMjM2LCA2NCwgCi0gICAgMTE3LCAyMzYsIDY0LCAyMTgsIDIzMywgMTUsIDUsIDIzNiwgMzgsIDE1LCA1LCAyMzYsIDM1LCAxNSwgNSwgMjM2LCAzNiwgCi0gICAgMjQ3LCAyNDIsIDE1LCA1LCAyMzYsIDM2LCAyMjMsIDM1LCAxNSwgNSwgMjM2LCAzNiwgMTE3LCAyMzYsIDM2LCAyMjAsIDE0LCAKLSAgICAxMTcsIDIyMCwgMTQsIDIxNCwgMjIwLCAxMTcsIDIxNCwgMjE5LCAxNSwgNSwgMjM2LCAzNiwgMjQyLCA5NCwgMTUsIDUsIAotICAgIDIzNiwgMjcsIDE1LCA1LCAyMzYsIDI4LCAzMCwgMjQzLCAxMDUsIDIxNiwgMjM5LCAxNSwgNSwgMjM2LCAyNiwgMTUsIDUsIAotICAgIDIzNiwgMTYsIDE1LCA1LCAyMzYsIDE3LCAzMCwgMjE3LCA3MiwgMTUsIDUsIDIzNiwgMTcsIDI0OSwgMTI1LCAyMzYsIDE2LCAKLSAgICAxNSwgNSwgMjM2LCAxNywgMjI2LCAxNjQsIDIzNiwgMTYsIDE1LCA1LCAyMzYsIDE3LCAyMTgsIDIzMywgMTUsIDUsIDIzNiwgCi0gICAgOSwgMTUsIDUsIDIzNSwgMjU1LCAxNSwgNSwgMjM1LCAxNzksIDE1LCA1LCAyMzUsIDE2NSwgMTUsIDUsIDE3NiwgMTUsIDUsIAotICAgIDIzNSwgMTMsIDMwLCA2MSwgMTUsIDUsIDIzNSwgMTMsIDMwLCAyNTQsIDI1NSwgMTUsIDUsIDIzNSwgMTMsIDMwLCAyNTUsIAotICAgIDAsIDk2LCAyMzMsIDIxNSwgMTUsIDUsIDIzNSwgMTMsIDMwLCAyNTMsIDIyOSwgMTUsIDUsIDIzNSwgMTMsIDMwLCAyNTIsIAotICAgIDE3NiwgMTUsIDUsIDIzNSwgMTMsIDMwLCAyNTIsIDE2MCwgMTUsIDUsIDIzNSwgMTMsIDMwLCAxMzAsIDE1LCA1LCAyMzUsIAotICAgIDEzLCAzMCwgMjUyLCA2LCAxNSwgNSwgMjM1LCAxMywgMzAsIDI0NSwgODcsIDE1LCA1LCAyMzUsIDEzLCAzMCwgMjQ1LCA3MiwgCi0gICAgMTUsIDUsIDIzNSwgMTMsIDMwLCAyNDMsIDEzNSwgMTUsIDUsIDIzNSwgMTMsIDMwLCAyNDMsIDExOCwgMTUsIDUsIDIzNSwgCi0gICAgMTMsIDMwLCAyNDMsIDEwNSwgMjE2LCAyMzksIDE1LCA1LCAyMzUsIDEzLCAzMCwgMjQzLCA5NiwgMTUsIDUsIDIzNSwgMTMsIAotICAgIDMwLCAyNDMsIDk3LCA5NiwgMjIwLCAxMDEsIDk2LCA2MSwgMTUsIDUsIDIzNSwgMTMsIDMwLCAyNDIsIDIxNCwgMTUsIDUsIAotICAgIDIzNSwgMTMsIDMwLCAyNDIsIDE5NywgMTUsIDUsIDIzNSwgMTMsIDMwLCAyNDIsIDE5MSwgOTYsIDIyMSwgMjMxLCAxNSwgNSwgCi0gICAgMjM1LCAxMywgMzAsIDI0MiwgMTkxLCAyNDksIDEyNSwgMjQyLCAxOTAsIDE1LCA1LCAyMzUsIDEzLCAzMCwgMjQyLCAxMTMsIAotICAgIDE1LCA1LCAyMzUsIDEzLCAzMCwgMjQyLCA4NywgMTUsIDUsIDIzNSwgMTMsIDMwLCAyMzYsIDM1LCAxNSwgNSwgMjM1LCAxMywgCi0gICAgMzAsIDIzNiwgMTYsIDE1LCA1LCAyMzUsIDEzLCAzMCwgMjM0LCAyNDIsIDE1LCA1LCAyMzUsIDEzLCAzMCwgMjM0LCA5MiwgCi0gICAgMTUsIDUsIDIzNSwgMTMsIDMwLCAyMzQsIDg5LCAxNSwgNSwgMjM1LCAxMywgMzAsIDIzMiwgMjQxLCAxNSwgNSwgMjM1LCAKLSAgICAxMywgMzAsIDIzMiwgOTgsIDE1LCA1LCAyMzUsIDEzLCAzMCwgMjMxLCA5MSwgMTUsIDUsIDIzNSwgMTMsIDMwLCAyMzEsIAotICAgIDkyLCA5NiwgMjQ2LCA3OCwgMTUsIDUsIDIzNSwgMTMsIDMwLCAyMzEsIDkyLCA5NiwgMjQyLCAyMTQsIDE1LCA1LCAyMzUsIAotICAgIDEzLCAzMCwgMjMxLCA5MiwgOTYsIDIxNywgMjIsIDE1LCA1LCAyMzUsIDEzLCAzMCwgMjMwLCAyMzAsIDE1LCA1LCAyMzUsIAotICAgIDEzLCAzMCwgMjMwLCAyMzEsIDk2LCAyMjcsIDE4OSwgMTUsIDUsIDIzNSwgMTMsIDMwLCAyMjksIDEwNywgMTUsIDUsIDIzNSwgCi0gICAgMTMsIDMwLCAyMjcsIDE5NCwgMTUsIDUsIDIzNSwgMTMsIDMwLCAyMjUsIDEwOCwgMTUsIDUsIDIzNSwgMTMsIDMwLCAyMjIsIAotICAgIDE0MCwgMTUsIDUsIDIzNSwgMTMsIDMwLCAyMDYsIDE1LCA1LCAyMzUsIDEzLCAzMCwgMjIxLCAyMzEsIDE1LCA1LCAyMzUsIAotICAgIDEzLCAzMCwgMjIwLCAxMDIsIDE1LCA1LCAyMzUsIDEzLCAzMCwgMjIwLCA2MywgMTUsIDUsIDIzNSwgMTMsIDMwLCAyMjAsIAotICAgIDMwLCAxNSwgNSwgMjM1LCAxMywgMzAsIDIxOSwgMjI1LCAxNSwgNSwgMjM1LCAxMywgMzAsIDIxOSwgMTgyLCAxNSwgNSwgCi0gICAgMjM1LCAxMywgMzAsIDIxOCwgNTEsIDE1LCA1LCAyMzUsIDEzLCAzMCwgMjE3LCA1MCwgMTUsIDUsIDIzNSwgMTMsIDMwLCAKLSAgICA3MCwgMTUsIDUsIDIzNSwgMTMsIDMwLCAyMTQsIDIzMCwgMTUsIDUsIDIzNSwgMTMsIDMwLCAyMTQsIDIxOSwgMTUsIDUsIAotICAgIDIzNSwgMTMsIDMwLCAyMTQsIDE5MywgMzAsIDE5MCwgMTUsIDUsIDIzNSwgMTMsIDMwLCAyMTQsIDEyNiwgMTUsIDUsIDIzNSwgCi0gICAgMTMsIDMwLCAyMTAsIDQ0LCAxNSwgNSwgMjM1LCAxMSwgMTUsIDUsIDIzNSwgMTIsIDI0OSwgMTI1LCAyMzUsIDExLCAxNSwgCi0gICAgNSwgMjM1LCA0LCAxNSwgNSwgMjM1LCAxLCAxNSwgNSwgMjM0LCAyNTUsIDE1LCA1LCAyMzQsIDI1NCwgMTUsIDUsIDIzNCwgCi0gICAgMjUyLCAxNSwgNSwgMjM0LCAyNTMsIDExNywgMjM0LCAyNTIsIDE1LCA1LCAyMzQsIDI0MiwgMTUsIDUsIDIzNCwgMjQzLCAKLSAgICAzMCwgMjM2LCAzNiwgMjQyLCA5NCwgMTUsIDUsIDIzNCwgMjM4LCAxNSwgNSwgMjM0LCAyMzksIDMwLCAyNTIsIDE3NiwgMTUsIAotICAgIDUsIDIzNCwgMjM5LCAyNDksIDEyNSwgMjM0LCAyMzgsIDE1LCA1LCAyMzQsIDIzNiwgMTUsIDUsIDIzNCwgMjM1LCAxNSwgNSwgCi0gICAgMjM0LCAyMDcsIDE1LCA1LCAyMzQsIDIwOCwgMjMzLCAxMTgsIDMwLCAxMDQsIDExNywgMjMzLCAxMTgsIDMwLCA3MCwgMTUsIAotICAgIDUsIDIzNCwgMjA4LCAxMTcsIDIzNCwgMjA4LCAyMzMsIDExOCwgMzAsIDEwNCwgMTE3LCAyMzMsIDExOCwgMzAsIDcwLCAxNSwgCi0gICAgNSwgMjM0LCAxNTcsIDE1LCA1LCAyMzQsIDkyLCAxNSwgNSwgMjM0LCA5MywgMzAsIDI1MiwgMTc2LCAxNSwgNSwgMjM0LCAKLSAgICA5MywgMzAsIDcwLCAxNSwgNSwgMjM0LCA5MywgMzAsIDIxNCwgMjE5LCAxNSwgNSwgMjM0LCA4OSwgMTUsIDUsIDIzNCwgODEsIAotICAgIDE1LCA1LCAyMzQsIDY4LCAxNSwgNSwgMjM0LCA2NywgMTUsIDUsIDIzNCwgNjUsIDE1LCA1LCAyMzQsIDY2LCAxMTcsIDIzNCwgCi0gICAgNjUsIDE1LCA1LCAyMzMsIDIxNywgMTUsIDUsIDIzMywgMjE4LCAxMTcsIDI0MSwgMTgxLCAzMCwgMjUzLCAyMzAsIDIzMywgCi0gICAgMjE4LCAxMTcsIDI0MSwgMTgxLCAzMCwgMjUzLCAyMjksIDE1LCA1LCAyMzMsIDIxNSwgMTUsIDUsIDIzMywgMjEzLCAxNSwgCi0gICAgNSwgMjMzLCAyMTQsIDIxNCwgMTIsIDE3LCAxNSwgNSwgMjMzLCAyMTIsIDE1LCA1LCAyMzMsIDIwOSwgMTUsIDUsIDIzMywgCi0gICAgMjEwLCAyNDIsIDk0LCAxNSwgNSwgMjMzLCAyMDgsIDE1LCA1LCAyMzMsIDE5NiwgMTUsIDUsIDIzMywgMTk3LCAyMjYsIAotICAgIDE2NCwgMjMzLCAxOTYsIDE1LCA1LCAyMzMsIDE5MSwgMTUsIDUsIDIzMywgMTcyLCAxNSwgNSwgMjMzLCAxMzUsIDE1LCA1LCAKLSAgICAyMzMsIDExNywgMTUsIDUsIDIzMywgMTE4LCAzMCwgNjEsIDE1LCA1LCAyMzMsIDExOCwgMzAsIDExNSwgOTYsIDI0OCwgCi0gICAgMjIyLCA5NiwgMTYyLCAxNSwgNSwgMjMzLCAxMTgsIDMwLCAxMTUsIDk2LCAyNDMsIDk2LCAxNSwgNSwgMjMzLCAxMTgsIDMwLCAKLSAgICAxMTUsIDk2LCAyMzMsIDEwNCwgMTUsIDUsIDIzMywgMTE4LCAzMCwgMjU0LCAxNzgsIDE1LCA1LCAyMzMsIDExOCwgMzAsIAotICAgIDI1NCwgMTIzLCAxNSwgNSwgMjMzLCAxMTgsIDMwLCAyNTMsIDIzMiwgMjEwLCA0MCwgMjE2LCAyMzksIDE1LCA1LCAyMzMsIAotICAgIDExOCwgMzAsIDI1MiwgMTc2LCAxNSwgNSwgMjMzLCAxMTgsIDMwLCAyNTIsIDYsIDE1LCA1LCAyMzMsIDExOCwgMzAsIDI0OCwgCi0gICAgMTY2LCAxNSwgNSwgMjMzLCAxMTgsIDMwLCAyNDUsIDE1MCwgMTUsIDUsIDIzMywgMTE4LCAzMCwgMjQzLCAxMzUsIDE1LCA1LCAKLSAgICAyMzMsIDExOCwgMzAsIDI0MywgOTYsIDE1LCA1LCAyMzMsIDExOCwgMzAsIDI0MiwgMTAzLCAxNSwgNSwgMjMzLCAxMTgsIAotICAgIDMwLCAyNDIsIDEwNCwgOTYsIDI0MiwgMTAzLCAxNSwgNSwgMjMzLCAxMTgsIDMwLCAxNjIsIDE1LCA1LCAyMzMsIDExOCwgCi0gICAgMzAsIDI0MiwgMzAsIDE1LCA1LCAyMzMsIDExOCwgMzAsIDI0MSwgMTgxLCAzMCwgMjI3LCAxOTQsIDE1LCA1LCAyMzMsIAotICAgIDExOCwgMzAsIDIzNiwgMzYsIDI0MiwgOTQsIDE1LCA1LCAyMzMsIDExOCwgMzAsIDIzNiwgMTYsIDE1LCA1LCAyMzMsIDExOCwgCi0gICAgMzAsIDIzNiwgMTcsIDk2LCAxNjIsIDE1LCA1LCAyMzMsIDExOCwgMzAsIDIzNiwgMTcsIDk2LCAyMzIsIDk4LCAxNSwgNSwgCi0gICAgMjMzLCAxMTgsIDMwLCAyMzQsIDkyLCAxNSwgNSwgMjMzLCAxMTgsIDMwLCAyMzQsIDgxLCAxNSwgNSwgMjMzLCAxMTgsIDMwLCAKLSAgICAyMzMsIDIxNSwgMTUsIDUsIDIzMywgMTE4LCAzMCwgMjMzLCAyMDksIDE1LCA1LCAyMzMsIDExOCwgMzAsIDIzMywgMjEwLCAKLSAgICA5NiwgMjQxLCAxODEsIDk2LCA2MSwgMTUsIDUsIDIzMywgMTE4LCAzMCwgMjMzLCAxMTcsIDE1LCA1LCAyMzMsIDExOCwgMzAsIAotICAgIDIzMiwgMTk3LCAxNSwgNSwgMjMzLCAxMTgsIDMwLCAyMzIsIDk4LCAxNSwgNSwgMjMzLCAxMTgsIDMwLCAyMzIsIDg2LCAxNSwgCi0gICAgNSwgMjMzLCAxMTgsIDMwLCAyMzEsIDkxLCAxNSwgNSwgMjMzLCAxMTgsIDMwLCAyMzEsIDkyLCA5NiwgMjQ1LCAxNTAsIDE1LCAKLSAgICA1LCAyMzMsIDExOCwgMzAsIDIzMCwgNjEsIDE1LCA1LCAyMzMsIDExOCwgMzAsIDIyOSwgMTA3LCAxNSwgNSwgMjMzLCAxMTgsIAotICAgIDMwLCAyMjAsIDY0LCA5NiwgMjE4LCA0MywgMTUsIDUsIDIzMywgMTE4LCAzMCwgMjIwLCAxMCwgOTYsIDI0MiwgMTkxLCA5NiwgCi0gICAgMjQ1LCA4NywgMTUsIDUsIDIzMywgMTE4LCAzMCwgMjIwLCAxMCwgOTYsIDI0MiwgMTkxLCAyMTYsIDIzOSwgMTUsIDUsIAotICAgIDIzMywgMTE4LCAzMCwgMjE5LCAyMjMsIDE1LCA1LCAyMzMsIDExOCwgMzAsIDIxOSwgMjI0LCA5NiwgMjE5LCAyMjMsIDE1LCAKLSAgICA1LCAyMzMsIDExOCwgMzAsIDIxOCwgNDMsIDE1LCA1LCAyMzMsIDExOCwgMzAsIDIxNywgODQsIDE1LCA1LCAyMzMsIDExOCwgCi0gICAgMzAsIDIxNywgNzIsIDE1LCA1LCAyMzMsIDExOCwgMzAsIDIxNywgMjMsIDk2LCAxMTUsIDk2LCAyMTgsIDg0LCA5NiwgMTk3LCAKLSAgICAxNSwgNSwgMjMzLCAxMTgsIDMwLCA3MCwgMTUsIDUsIDIzMywgMTE4LCAzMCwgMTA0LCA5NiwgNjEsIDE1LCA1LCAyMzMsIAotICAgIDExOCwgMzAsIDEwNCwgOTYsIDEwNCwgOTYsIDcwLCAxNSwgNSwgMjMzLCAxMTgsIDMwLCAyMTQsIDIzMSwgOTYsIDI1MywgCi0gICAgMjMxLCAxNSwgNSwgMjMzLCAxMTgsIDMwLCAyMTQsIDIxOSwgMTUsIDUsIDIzMywgMTE4LCAzMCwgMjE0LCAxMjYsIDE1LCA1LCAKLSAgICAyMzMsIDExOCwgMjE4LCAyMzMsIDE1LCA1LCAyMzMsIDExNSwgMTUsIDUsIDIzMywgMTE2LCAzMCwgMjIwLCA2MywgMTUsIDUsIAotICAgIDIzMywgMTE2LCAzMCwgMjIwLCA2NCwgOTYsIDIxOCwgNDMsIDE1LCA1LCAyMzMsIDExNiwgMjQyLCA5NCwgMTUsIDUsIDIzMywgCi0gICAgMTE2LCAyNDIsIDk1LCAxMTcsIDIzMywgMTE2LCAyNDIsIDk1LCAyMjAsIDYzLCAxNSwgNSwgMjMzLCAxMTEsIDE1LCA1LCAKLSAgICAyMzMsIDEwNCwgMTUsIDUsIDIzMywgMTA1LCAzMCwgMjMzLCAxMDQsIDE1LCA1LCAyMzMsIDEwMiwgMTUsIDUsIDIzMywgCi0gICAgMTAzLCAzMCwgMjMzLCAxOTYsIDE1LCA1LCAyMzMsIDEwMywgMzAsIDIzMywgMTk3LCA5NiwgMjIyLCAxNDAsIDE1LCA1LCAKLSAgICAyMzIsIDI0MSwgMTUsIDUsIDIzMiwgMjI2LCAxNSwgNSwgMjMyLCAyMTYsIDE1LCA1LCAyMzIsIDE5NywgMTUsIDUsIDIzMiwgCi0gICAgOTgsIDE1LCA1LCAyMzIsIDk5LCAzMCwgMjUyLCAxNzYsIDE1LCA1LCAyMzIsIDk2LCAxNSwgNSwgMjMyLCA5NywgMzAsIAotICAgIDI1NCwgMTc4LCAxNSwgNSwgMjMyLCA5NywgMzAsIDI1MiwgMTc2LCAxNSwgNSwgMjMyLCA5NywgMzAsIDI0NSwgNzIsIDE1LCAKLSAgICA1LCAyMzIsIDk3LCAzMCwgMjQ1LCA3MywgMjE2LCAyMzksIDE1LCA1LCAyMzIsIDk3LCAzMCwgMjQzLCAxMDUsIDIxNiwgCi0gICAgMjM5LCAxNSwgNSwgMjMyLCA5NywgMzAsIDI0MSwgMTgxLCAzMCwgMjUyLCAxNzYsIDE1LCA1LCAyMzIsIDk3LCAzMCwgMjM2LCAKLSAgICAxNiwgMTUsIDUsIDIzMiwgOTcsIDMwLCAyMzUsIDEsIDE1LCA1LCAyMzIsIDk3LCAzMCwgMjM0LCAyNTUsIDE1LCA1LCAyMzIsIAotICAgIDk3LCAzMCwgMjM1LCAwLCA5NiwgMjUzLCAyMzEsIDE1LCA1LCAyMzIsIDk3LCAzMCwgMjM0LCA5MiwgMTUsIDUsIDIzMiwgCi0gICAgOTcsIDMwLCAyMzMsIDEzNiwgOTYsIDI1MywgMjMxLCAxNSwgNSwgMjMyLCA5NywgMzAsIDIzMywgMTE3LCAxNSwgNSwgMjMyLCAKLSAgICA5NywgMzAsIDIzMSwgOTIsIDk2LCAyNDUsIDE1MCwgMTUsIDUsIDIzMiwgOTcsIDMwLCAyMjksIDEwNywgMTUsIDUsIDIzMiwgCi0gICAgOTcsIDMwLCAyMjcsIDIzNywgMTUsIDUsIDIzMiwgOTcsIDMwLCAyMTksIDE5MiwgOTYsIDI1MywgMjMxLCAxNSwgNSwgMjMyLCAKLSAgICA5NywgMzAsIDIxOSwgMTc0LCA5NiwgMjUxLCAxMjUsIDE1LCA1LCAyMzIsIDk3LCAzMCwgMjE1LCAxMTMsIDE1LCA1LCAyMzIsIAotICAgIDk3LCAyMTYsIDIzOSwgMTUsIDUsIDIzMiwgOTcsIDI0OSwgMTI1LCAyMzIsIDk2LCAxNSwgNSwgMjMyLCA5NywgMjI2LCAKLSAgICAxNjQsIDIzMiwgOTYsIDE1LCA1LCAyMzIsIDk3LCAyMTgsIDIzMywgMTUsIDUsIDIzMiwgOTcsIDIyMCwgNDUsIDE1LCA1LCAKLSAgICAyMzIsIDk1LCAxNSwgNSwgMjMyLCA5MSwgMTUsIDUsIDIzMiwgOTIsIDExNywgMjMyLCA5MSwgMTUsIDUsIDIzMiwgOTIsIAotICAgIDIyNiwgMTY0LCAyMzIsIDkxLCAxNSwgNSwgMjMyLCA5MiwgMjIwLCA0NSwgMTUsIDUsIDIzMiwgODksIDE1LCA1LCAyMzIsIAotICAgIDg2LCAxNSwgNSwgMjMyLCA4NCwgMTUsIDUsIDIzMiwgODUsIDExNywgMjMyLCA4NCwgMTUsIDUsIDIzMiwgODUsIDExNywgCi0gICAgMjMyLCA4NSwgMjQzLCA5NywgMTE3LCAyNDMsIDk2LCAxNSwgNSwgMTg0LCAxNSwgNSwgMjMxLCAyMzksIDMwLCAyMTcsIDcyLCAKLSAgICAxNSwgNSwgMjMxLCAyMzksIDI0MiwgOTQsIDE1LCA1LCAyMzEsIDIzOCwgMTUsIDUsIDIzMSwgMjEwLCAxNSwgNSwgMjMxLCAKLSAgICAxNjYsIDE1LCA1LCAyMzEsIDE0NywgMTUsIDUsIDIzMSwgMTQ2LCAxNSwgNSwgMjMxLCA5MSwgMTUsIDUsIDIzMSwgNDcsIAotICAgIDE1LCA1LCAyMzAsIDIzMCwgMTUsIDUsIDIzMCwgMTg4LCAxNSwgNSwgMjMwLCAxMDIsIDE1LCA1LCAyMzAsIDEwMywgMTE3LCAKLSAgICAyMzAsIDEwMiwgMTUsIDUsIDIzMCwgOTMsIDE1LCA1LCAyMzAsIDk0LCAyNDIsIDk0LCAxNSwgNSwgMjMwLCA3OCwgMTUsIDUsIAotICAgIDIzMCwgNjQsIDE1LCA1LCAyMzAsIDYxLCAxNSwgNSwgMjMwLCA2MiwgMzAsIDYxLCAxNSwgNSwgMjMwLCA2MiwgMzAsIDIzMywgCi0gICAgMTk2LCAxNSwgNSwgMjMwLCA2MiwgMzAsIDIxMCwgMTE2LCAxNSwgNSwgMjMwLCA2MiwgMTE3LCAyMzAsIDYxLCAxNSwgNSwgCi0gICAgMjMwLCA2MiwgMTE3LCAyMzAsIDYyLCAzMCwgMTE1LCA5NiwgMTk3LCAxNSwgNSwgMjMwLCA2MiwgMjQ5LCAxMjUsIDIzMCwgCi0gICAgNjEsIDE1LCA1LCAyMzAsIDU5LCAxNSwgNSwgMjMwLCA2MCwgMzAsIDYxLCAxNSwgNSwgMjMwLCA2MCwgMzAsIDExNSwgOTYsIAotICAgIDI0OCwgMywgMTUsIDUsIDIzMCwgNjAsIDMwLCAyNDgsIDMsIDE1LCA1LCAyMzAsIDYwLCAyNDIsIDk0LCAxNSwgNSwgMTk3LCAKLSAgICAxNSwgNSwgMjI5LCAyMjcsIDE1LCA1LCAyMjksIDIxNiwgMTUsIDUsIDIyOSwgMjE3LCAyMzUsIDE5MiwgMTUsIDUsIDIyOSwgCi0gICAgMjE3LCAzMCwgMjE5LCAyMjYsIDIxNiwgMjM5LCAxNSwgNSwgMjI5LCAyMTcsIDIyNiwgMTY0LCAyMjksIDIxNiwgMTUsIDUsIAotICAgIDIyOSwgMjE1LCAxNSwgNSwgMjI5LCAyMDgsIDIyNywgMTgwLCAxNSwgNSwgMjI5LCAyMDcsIDE1LCA1LCAyMjksIDIwNiwgCi0gICAgMTUsIDUsIDIyOSwgMTA3LCAxNSwgNSwgMjI5LCAxMDgsIDMwLCA2MSwgMTUsIDUsIDIyOSwgMTA4LCAzMCwgMjE0LCAyMTksIAotICAgIDE1LCA1LCAyMjksIDEwOCwgMjIwLCA0NSwgMTUsIDUsIDIyOCwgMjMzLCAxNSwgNSwgMjI4LCAyMzQsIDMwLCA3NSwgMTUsIAotICAgIDUsIDIyOCwgMjMyLCAxNSwgNSwgMjI4LCAyMDMsIDE1LCA1LCAyMjgsIDIwNCwgMzAsIDI0MywgMTA1LCAyMTYsIDIzOSwgCi0gICAgMTUsIDUsIDIyOCwgMjA0LCAzMCwgMjQzLCA5NywgOTYsIDI0MywgMTA1LCAyMTYsIDIzOSwgMTUsIDUsIDIyOCwgMjAxLCAKLSAgICAxNSwgNSwgMjI4LCAyMDIsIDMwLCAyNTQsIDEyMywgMTUsIDUsIDIyOCwgMjAyLCAzMCwgMjUzLCAyMzEsIDE1LCA1LCAyMjgsIAotICAgIDIwMiwgMzAsIDI1MywgMjMyLCA5NiwgMjUzLCAyMzEsIDE1LCA1LCAyMjgsIDIwMiwgMzAsIDI0MiwgMTAzLCAxNSwgNSwgCi0gICAgMjI4LCAyMDIsIDMwLCAyMzEsIDkyLCA5NiwgMjQzLCAxMDUsIDIxNiwgMjM5LCAxNSwgNSwgMjI4LCAyMDIsIDMwLCAyMjksIAotICAgIDEwNywgMTUsIDUsIDIyOCwgMjAyLCAzMCwgMjI3LCAxOTQsIDE1LCA1LCAyMjgsIDIwMiwgMzAsIDIyMCwgNjMsIDE1LCA1LCAKLSAgICAyMjgsIDIwMiwgMzAsIDIyMCwgNjQsIDk2LCAxMTUsIDI1NCwgMTIzLCAxNSwgNSwgMjI4LCAyMDIsIDMwLCAyMjAsIDY0LCAKLSAgICA5NiwgMjUzLCAyMzEsIDE1LCA1LCAyMjgsIDIwMiwgMzAsIDIyMCwgNjQsIDk2LCAyNTMsIDIzMiwgOTYsIDI1MywgMjMxLCAKLSAgICAxNSwgNSwgMjI4LCAyMDIsIDMwLCAyMTQsIDIzMSwgOTYsIDI1MywgMjMxLCAxNSwgNSwgMjI4LCAyMDIsIDMwLCAyMTQsIAotICAgIDEyNiwgMTUsIDUsIDIyOCwgMTkwLCAxNSwgNSwgMjI3LCAyMzcsIDE1LCA1LCAyMjcsIDIxMCwgMTUsIDUsIDIyNywgMTk0LCAKLSAgICAxNSwgNSwgMjI3LCAxOTUsIDIzMywgMTE2LCAzMCwgMjQzLCA5NiwgMTUsIDUsIDIyNywgMTk1LCAyMzMsIDExNiwgMzAsIAotICAgIDIzMSwgMTQ3LCAxNSwgNSwgMjI3LCAxOTUsIDIzMywgMTE2LCAzMCwgMjIyLCA4LCAxNSwgNSwgMjI3LCAxOTUsIDIzMywgCi0gICAgMTE2LCAzMCwgMjIyLCA5LCAxMTcsIDIyNywgMTk1LCAyMzMsIDExNiwgMzAsIDIyMiwgOCwgMTUsIDUsIDIyNywgMTk1LCAKLSAgICAyMzMsIDExNiwgMzAsIDIxNCwgMTI2LCAxNSwgNSwgMjI3LCAxOTUsIDIxNiwgMjM5LCAxNSwgNSwgMjI3LCAxOTUsIDExNywgCi0gICAgMjI3LCAxOTQsIDE1LCA1LCAyMjcsIDE5NSwgMjQ5LCAxMjUsIDIyNywgMTk0LCAxNSwgNSwgMjI3LCAxOTUsIDI0OSwgMTI1LCAKLSAgICAyMjcsIDE5NSwgMjMzLCAxMTYsIDExNywgMjMzLCAxMTUsIDE1LCA1LCAyMjcsIDE4OSwgMTUsIDUsIDIyNywgMTkwLCAyNTUsIAotICAgIDI0LCAzMCwgMjUzLCAyMjYsIDE1LCA1LCAyMjcsIDE5MCwgMjU1LCAyNCwgMzAsIDI1MiwgNiwgMTUsIDUsIDIyNywgMTkwLCAKLSAgICAyNTUsIDI0LCAzMCwgMjQ2LCA3NCwgMTUsIDUsIDIyNywgMTkwLCAyNTUsIDI0LCAzMCwgMjQyLCAxMDMsIDE1LCA1LCAyMjcsIAotICAgIDE5MCwgMjU1LCAyNCwgMzAsIDIzNiwgMzYsIDI0MiwgOTQsIDE1LCA1LCAyMjcsIDE5MCwgMjU1LCAyNCwgMzAsIDIzNCwgCi0gICAgMjU1LCAxNSwgNSwgMjI3LCAxOTAsIDI1NSwgMjQsIDMwLCAyMzMsIDEzNSwgMTUsIDUsIDIyNywgMTkwLCAyNTUsIDI0LCAKLSAgICAzMCwgMjI5LCAxMDcsIDE1LCA1LCAyMjcsIDE5MCwgMjU1LCAyNCwgMzAsIDIxOSwgMTcxLCAxNSwgNSwgMjI3LCAxOTAsIAotICAgIDI1NSwgMjQsIDMwLCAyMTQsIDIzMCwgMTUsIDUsIDIyNywgMTkwLCAyMzQsIDY2LCAzMCwgMjUyLCA2LCAxNSwgNSwgMjI3LCAKLSAgICAxOTAsIDIzNCwgNjYsIDMwLCAyNTIsIDcsIDcwLCAxNSwgNSwgMTkwLCAxNSwgNSwgMjI2LCA4MCwgMTUsIDUsIDIyNiwgNDcsIAotICAgIDE1LCA1LCAyMjYsIDIxLCAxNSwgNSwgMjI1LCAxNjEsIDE1LCA1LCAyMjUsIDEwOCwgMTUsIDUsIDIyNSwgMTA5LCAzMCwgCi0gICAgNjEsIDE1LCA1LCAyMjUsIDEwOSwgMzAsIDI1NSwgMjUsIDE1LCA1LCAyMjUsIDEwOSwgMzAsIDI1MiwgNiwgMTUsIDUsIAotICAgIDIyNSwgMTA5LCAzMCwgMjUxLCAxMjUsIDE1LCA1LCAyMjUsIDEwOSwgMzAsIDc1LCAxNSwgNSwgMjI1LCAxMDksIDMwLCA3MywgCi0gICAgMTUsIDUsIDIyNSwgMTA5LCAzMCwgMjQwLCAxMTUsIDE1LCA1LCAyMjUsIDEwOSwgMzAsIDcwLCAxNSwgNSwgMjI1LCAxMDksIAotICAgIDMwLCAyMTQsIDIzMCwgMTUsIDUsIDIyNSwgMTA5LCAyNDksIDEyNSwgMjI1LCAxMDgsIDE1LCA1LCAyMjUsIDUzLCAxNSwgNSwgCi0gICAgMjI1LCA1NCwgMzAsIDIzNCwgMjM4LCAxNSwgNSwgMjI1LCA1NCwgMzAsIDIxNCwgMjE5LCAxNSwgNSwgMjI1LCA1NCwgMzAsIAotICAgIDIxMCwgMTE2LCAxNSwgNSwgMjI1LCA1NCwgMjI2LCAxNjQsIDIyNSwgNTMsIDE1LCA1LCAyMDUsIDE1LCA1LCAyMjMsIDE4MiwgCi0gICAgMTUsIDUsIDIyMywgMzUsIDE1LCA1LCAyMjIsIDE0MCwgMTUsIDUsIDIwNiwgMTUsIDUsIDIyMiwgMjIsIDIyNywgMTgwLCAKLSAgICAxNSwgNSwgMjIyLCAyMSwgMTUsIDUsIDIyMiwgMjIsIDMwLCA2MSwgMTUsIDUsIDIyMiwgMjIsIDMwLCAyNDYsIDc4LCAxNSwgCi0gICAgNSwgMjIyLCAyMiwgMzAsIDI0NiwgNzYsIDE1LCA1LCAyMjIsIDIyLCAzMCwgMTYyLCAxNSwgNSwgMjIyLCAyMiwgMzAsIAotICAgIDIzNCwgMjQyLCAxNSwgNSwgMjIyLCAyMiwgMzAsIDIzMywgMTk2LCAxNSwgNSwgMjIyLCAyMiwgMzAsIDIzMiwgODQsIDE1LCAKLSAgICA1LCAyMjIsIDIyLCAzMCwgMjMwLCAyMzAsIDE1LCA1LCAyMjIsIDIyLCAzMCwgMjI3LCAxOTQsIDE1LCA1LCAyMjIsIDIyLCAKLSAgICAzMCwgMjIyLCA4LCAxNSwgNSwgMjIyLCAyMiwgMzAsIDIyMCwgMzAsIDE1LCA1LCAyMjIsIDIyLCAzMCwgMjE3LCA5MywgMTUsIAotICAgIDUsIDIyMiwgMjIsIDMwLCAyMTQsIDIzMCwgMTUsIDUsIDIyMiwgMjIsIDMwLCAyMTQsIDIyNSwgMTUsIDUsIDIyMiwgMjIsIAotICAgIDMwLCAyMTQsIDE5NywgMTUsIDUsIDIyMiwgMjIsIDMwLCAyMTQsIDE1MCwgMTUsIDUsIDIyMiwgMjIsIDMwLCAyMTQsIDEyNiwgCi0gICAgMTUsIDUsIDIyMiwgMjIsIDExNywgMjIyLCAyMSwgMTUsIDUsIDIyMiwgMjIsIDI0MiwgOTQsIDE1LCA1LCAyMjIsIDgsIDE1LCAKLSAgICA1LCAyMjIsIDksIDIzMywgMTE4LCAzMCwgMjUzLCAyMjksIDE1LCA1LCAyMjEsIDIzOSwgMTUsIDUsIDIyMSwgMjMxLCAxNSwgCi0gICAgNSwgMjIwLCAxMDIsIDE1LCA1LCAyMjAsIDEwMCwgMTUsIDUsIDIyMCwgMTAxLCAzMCwgNjEsIDE1LCA1LCAyMjAsIDEwMSwgCi0gICAgMzAsIDI1MiwgMTc2LCAxNSwgNSwgMjIwLCAxMDEsIDMwLCAyNDIsIDE5MCwgMTUsIDUsIDIyMCwgMTAxLCAzMCwgMjI5LCAKLSAgICAxMDcsIDE1LCA1LCAyMjAsIDEwMSwgMzAsIDIxOSwgMjIzLCAxNSwgNSwgMjIwLCAxMDEsIDMwLCAyMTUsIDk4LCAxNSwgNSwgCi0gICAgMjIwLCAxMDEsIDMwLCA3MCwgMTUsIDUsIDIyMCwgMTAxLCAzMCwgMTA0LCA5NiwgNjEsIDE1LCA1LCAyMjAsIDk5LCAxNSwgCi0gICAgNSwgMjIwLCA5NywgMTUsIDUsIDIyMCwgNzgsIDE1LCA1LCAyMjAsIDYzLCAxNSwgNSwgMjIwLCA2NCwgMjQwLCAyMjIsIDE1LCAKLSAgICA1LCAyMjAsIDY0LCAxMTcsIDIyMCwgNjQsIDI0MywgMTI3LCAxMTcsIDI0MywgMTI3LCAyNDMsIDk3LCAxMTcsIDI0MywgOTYsIAotICAgIDE1LCA1LCAyMjAsIDY0LCAxMTcsIDIyMCwgNjQsIDIxNywgOTQsIDExNywgMjE3LCA5NCwgMjQzLCA5NywgMTE3LCAyNDMsIAotICAgIDk2LCAxNSwgNSwgMjIwLCA1NiwgMTUsIDUsIDIyMCwgNTEsIDE1LCA1LCAyMjAsIDQ4LCAxNSwgNSwgMjIwLCA0NywgMTUsIAotICAgIDUsIDIyMCwgNDQsIDE1LCA1LCAyMjAsIDMwLCAxNSwgNSwgMjIwLCAzMSwgMzAsIDYxLCAxNSwgNSwgMjIwLCAzMSwgMzAsIAotICAgIDIzNiwgMTYsIDE1LCA1LCAyMjAsIDI0LCAxNSwgNSwgMjIwLCAyNSwgMzAsIDYxLCAxNSwgNSwgMjIwLCAyNSwgMzAsIDI1MiwgCi0gICAgMTYxLCAxNSwgNSwgMjIwLCAyNSwgMzAsIDI1MSwgMTA5LCAxNSwgNSwgMjIwLCAyNSwgMzAsIDI0NywgMjA2LCAxNSwgNSwgCi0gICAgMjIwLCAyNSwgMzAsIDI0MywgOTYsIDE1LCA1LCAyMjAsIDI1LCAzMCwgMjM2LCAzNSwgMTUsIDUsIDIyMCwgMjUsIDMwLCAKLSAgICAyMzYsIDM2LCAyNDIsIDk0LCAxNSwgNSwgMjIwLCAyNSwgMzAsIDIzMywgMTkxLCAxNSwgNSwgMjIwLCAyNSwgMzAsIDIzMiwgCi0gICAgODYsIDE1LCA1LCAyMjAsIDI1LCAzMCwgMjMwLCA5MywgMTUsIDUsIDIyMCwgMjUsIDMwLCAyMjIsIDgsIDE1LCA1LCAyMjAsIAotICAgIDE4LCAxNSwgNSwgMjIwLCAxMywgMTUsIDUsIDIyMCwgMTQsIDIxNiwgMjM5LCAxNSwgNSwgMjIwLCAxNCwgMTE3LCAyMjAsIAotICAgIDE0LCAyNTEsIDk5LCAxMTcsIDI1MSwgOTgsIDE1LCA1LCAyMjAsIDksIDE1LCA1LCAyMTksIDIyNSwgMTUsIDUsIDIxOSwgCi0gICAgMjI2LCAxMTcsIDIzNSwgMTkzLCAyMTksIDIyNSwgMTUsIDUsIDIxOSwgMjIzLCAxNSwgNSwgMjE5LCAyMjIsIDE1LCA1LCAKLSAgICAyMTksIDE5MSwgMTUsIDUsIDIxOSwgMTkyLCAyNDIsIDk0LCAxNSwgNSwgMjE5LCAxODIsIDE1LCA1LCAyMTksIDE4MCwgMTUsIAotICAgIDUsIDIxOSwgMTgxLCAxMTcsIDIxOSwgMTgxLCAyMTksIDIyMywgMTUsIDUsIDIxOSwgMTczLCAxNSwgNSwgMjE5LCAxNzEsIAotICAgIDE1LCA1LCAyMTgsIDgzLCAxNSwgNSwgMjE4LCA4NCwgMTE3LCAyMTgsIDgzLCAxNSwgNSwgMjE4LCA1NCwgMTUsIDUsIDIxOCwgCi0gICAgNTMsIDE1LCA1LCAyMTgsIDUxLCAxNSwgNSwgMjE4LCA0MywgMTUsIDUsIDIxOCwgNDIsIDE1LCA1LCAyMTgsIDE3LCAxNSwgCi0gICAgNSwgMjE4LCAxNiwgMTUsIDUsIDIxNywgMTA1LCAxNSwgNSwgMjE3LCAxMDYsIDI1MywgMjE2LCAxNSwgNSwgMjE3LCAxMDYsIAotICAgIDMwLCAyNDEsIDE4MCwgMTUsIDUsIDIxNywgMTA2LCAzMCwgMjMwLCAyMzAsIDE1LCA1LCAyMTcsIDEwNiwgMjQyLCA5NCwgCi0gICAgMTUsIDUsIDIxNywgOTMsIDE1LCA1LCAyMTcsIDk0LCAxMTcsIDIxNywgOTQsIDIyOCwgMjM0LCAxMTcsIDIyOCwgMjM0LCAKLSAgICAyNDcsIDE4OCwgMTE3LCAyNDcsIDE4NywgMTUsIDUsIDIxNywgOTQsIDIxOCwgMjMzLCAxNSwgNSwgMjE3LCA4NCwgMTUsIDUsIAotICAgIDEyOSwgMzAsIDI1MiwgNiwgMTUsIDUsIDEyOSwgMzAsIDI0MiwgMTAzLCAxNSwgNSwgMTI5LCAzMCwgMjIwLCA2MywgMTUsIAotICAgIDUsIDEyOSwgMzAsIDIxOSwgMjI1LCAxNSwgNSwgMTI5LCAzMCwgMjE1LCAxMTMsIDE1LCA1LCAxMjksIDMwLCAyMTQsIDIxOSwgCi0gICAgMTUsIDUsIDIxNywgNzIsIDE1LCA1LCAyMTcsIDUwLCAxNSwgNSwgMjE3LCAyMiwgMTUsIDUsIDIxNywgMjMsIDI0MiwgOTQsIAotICAgIDE1LCA1LCAyMTYsIDExNywgMTUsIDUsIDIxNiwgMTE4LCAyMTYsIDIzOSwgMTUsIDUsIDIxNiwgOTAsIDE1LCA1LCAyMTYsIAotICAgIDcyLCAxNSwgNSwgMjE2LCA3MywgMzAsIDIxNywgNzIsIDE1LCA1LCAyMTYsIDczLCAxMTcsIDIxNiwgNzIsIDE1LCA1LCAKLSAgICAyMTYsIDczLCAxMTcsIDIxNiwgNzMsIDI0MywgMTI3LCAxMTcsIDI0MywgMTI3LCAyNDMsIDk3LCAxMTcsIDI0MywgOTYsIAotICAgIDE1LCA1LCAyMTUsIDExOCwgMTUsIDUsIDIxNSwgMTEzLCAxNSwgNSwgMjE1LCAxMTEsIDE1LCA1LCAyMTUsIDEwOCwgMTUsIAotICAgIDUsIDIxNSwgOTgsIDE1LCA1LCAyMTUsIDk5LCAxMTcsIDIxNSwgOTksIDIxMCwgMTE3LCAxMTcsIDIxMCwgMTE2LCAxNSwgNSwgCi0gICAgNzAsIDE1LCA1LCAxMDQsIDI0MiwgMTAzLCAxNSwgNSwgMTA0LCAxMDQsIDcwLCAxNSwgNSwgMTA0LCAxMTcsIDEwNCwgMjI2LCAKLSAgICA5MCwgMTE3LCAyMjYsIDkwLCAyNDMsIDk3LCAxMTcsIDI0MywgOTYsIDE1LCA1LCAxMDQsIDExNywgMTA0LCAyMTgsIDE4LCAKLSAgICAxMTcsIDIxOCwgMTcsIDE1LCA1LCAxMDQsIDExNywgMTA0LCAxMDQsIDIyMywgNDksIDExNywgMTA0LCAyMjMsIDQ4LCAxNSwgCi0gICAgNSwgMjE0LCAyMzAsIDE1LCA1LCAyMTQsIDIyNSwgMTUsIDUsIDIxNCwgMjE5LCAxNSwgNSwgMjE0LCAyMjAsIDIzMywgMTkxLCAKLSAgICAxNSwgNSwgMjE0LCAyMjAsIDMwLCAyNTIsIDE3NiwgMTUsIDUsIDIxNCwgMjIwLCAzMCwgMjMwLCAyMzAsIDE1LCA1LCAyMTQsIAotICAgIDIyMCwgMzAsIDEwNCwgOTYsIDEwNCwgOTYsIDcwLCAxNSwgNSwgMjE0LCAyMjAsIDMwLCAxMDQsIDk2LCAxMDQsIDk2LCAKLSAgICAxMDQsIDI0MiwgOTQsIDE1LCA1LCAyMTQsIDIyMCwgMjQyLCA5NCwgMTUsIDUsIDIxNCwgMjIwLCAyMjAsIDQ1LCAxNSwgNSwgCi0gICAgMjE0LCAyMjAsIDIyMCwgNDYsIDMwLCAyNTIsIDE3NiwgMTUsIDUsIDIxNCwgMjE1LCAxNSwgNSwgMjE0LCAxOTcsIDE1LCA1LCAKLSAgICAyMTQsIDE5OCwgMzAsIDIzMywgMTE3LCAxNSwgNSwgMjE0LCAxOTgsIDMwLCAyMzEsIDkyLCA5NiwgMjQ4LCAyMjEsIDE1LCAKLSAgICA1LCAyMTQsIDE5OCwgMzAsIDIyMCwgMTAwLCAxNSwgNSwgMjE0LCAxOTgsIDMwLCA3MCwgMTUsIDUsIDIxNCwgMTk2LCAxNSwgCi0gICAgNSwgMjE0LCAxOTIsIDE1LCA1LCAyMTQsIDE5MywgMzAsIDIzNCwgMjA3LCAxNSwgNSwgMjE0LCAxOTMsIDMwLCAxOTAsIDE1LCAKLSAgICA1LCAyMTQsIDE5MCwgMTUsIDUsIDIxNCwgMTkxLCAyNDIsIDk0LCAxNSwgNSwgMjE0LCAxNTAsIDE1LCA1LCAyMTQsIDE1MSwgCi0gICAgMjQ5LCAxMjUsIDIxNCwgMTUwLCAxNSwgNSwgMjE0LCAxNTEsIDIyMCwgNDUsIDE1LCA1LCAyMTQsIDE0OCwgMTUsIDUsIAotICAgIDIxNCwgMTQ5LCAzMCwgMTE1LCA5NiwgMTYyLCAxNSwgNSwgMjE0LCAxNDksIDMwLCAxMTUsIDk2LCAxOTcsIDE1LCA1LCAKLSAgICAyMTQsIDE0OSwgMzAsIDI1NCwgMTc4LCAxNSwgNSwgMjE0LCAxNDksIDMwLCAxNjIsIDE1LCA1LCAyMTQsIDE0OSwgMzAsIAotICAgIDIyNywgMTk0LCAxNSwgNSwgMjE0LCAxNDksIDMwLCAyMTQsIDIzMCwgMTUsIDUsIDIxNCwgMTQ5LCAzMCwgMjE0LCAyMzEsIAotICAgIDk2LCAyNTMsIDIzMSwgMTUsIDUsIDIxNCwgMTQ5LCAzMCwgMjE0LCAyMzEsIDk2LCAyNTIsIDYsIDE1LCA1LCAyMTQsIDE0NywgCi0gICAgMTUsIDUsIDIxNCwgMTQ0LCAxNSwgNSwgMjE0LCAxNDMsIDE1LCA1LCAyMTQsIDEzOSwgMTUsIDUsIDIxNCwgMTQwLCAzMCwgCi0gICAgNjEsIDE1LCA1LCAyMTQsIDE0MCwgMzAsIDI1MywgMjI2LCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAxMzAsIDE1LCA1LCAyMTQsIAotICAgIDE0MCwgMzAsIDI0NiwgNjgsIDE1LCA1LCAyMTQsIDE0MCwgMzAsIDI0MywgMTM1LCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAKLSAgICAyNDMsIDExOCwgMTUsIDUsIDIxNCwgMTQwLCAzMCwgMjQzLCAxMDUsIDIxNiwgMjM5LCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAKLSAgICAyNDMsIDk2LCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAyNDIsIDExMywgMTUsIDUsIDIxNCwgMTQwLCAzMCwgMTYyLCAxNSwgNSwgCi0gICAgMjE0LCAxNDAsIDMwLCAyMzYsIDM1LCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAyMzYsIDE2LCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAKLSAgICAyMzUsIDE2NSwgMTUsIDUsIDIxNCwgMTQwLCAzMCwgMjM0LCA5MiwgMTUsIDUsIDIxNCwgMTQwLCAzMCwgMjMyLCA4NCwgMTUsIAotICAgIDUsIDIxNCwgMTQwLCAzMCwgMjMwLCAxODgsIDE1LCA1LCAyMTQsIDE0MCwgMzAsIDE5MCwgMTUsIDUsIDIxNCwgMTQwLCAzMCwgCi0gICAgMjIwLCA2MywgMTUsIDUsIDIxNCwgMTQwLCAzMCwgMjE5LCAxODAsIDE1LCA1LCAyMTQsIDE0MCwgMzAsIDIxNSwgMTE4LCAKLSAgICAxNSwgNSwgMjE0LCAxNDAsIDMwLCAxMDQsIDk2LCAyNDIsIDEwMywgMTUsIDUsIDIxNCwgMTQwLCAzMCwgMjE0LCAyMTksIAotICAgIDE1LCA1LCAyMTQsIDE0MCwgMzAsIDIxNCwgMTM3LCAxNSwgNSwgMjE0LCAxMzcsIDE1LCA1LCAyMTQsIDEzOCwgMzAsIDcwLCAKLSAgICAxNSwgNSwgMjE0LCAxMjYsIDE1LCA1LCAyMTQsIDEyNywgMzAsIDYxLCAxNSwgNSwgMjE0LCAxMjcsIDMwLCAyMzMsIDIxNywgCi0gICAgMTUsIDUsIDIxNCwgMTI3LCAzMCwgMjMzLCAxOTYsIDE1LCA1LCAyMTQsIDEyNywgMzAsIDIxNywgNzIsIDE1LCA1LCAyMTQsIAotICAgIDEyMiwgMTUsIDUsIDIxNCwgMTI1LCAxNSwgNSwgMjE0LCAxMjMsIDE1LCA1LCAyMTQsIDExOSwgMTUsIDUsIDIxNCwgMTA4LCAKLSAgICAxNSwgNSwgMjE0LCAxMDksIDMwLCAyMzQsIDIwNywgMTUsIDUsIDIxNCwgMTA3LCAxNSwgNSwgMjEwLCAxMTYsIDE1LCA1LCAKLSAgICAyMTAsIDExNywgMjE2LCAyMzksIDE1LCA1LCAyMTAsIDExNywgOTIsIDMwLCAyMzMsIDE5NiwgMTUsIDUsIDIxMCwgMTEzLCAKLSAgICAxNSwgNSwgMjEwLCAxMDYsIDE1LCA1LCAyMTAsIDkzLCAxNSwgNSwgMjEwLCA0NCwgMTUsIDUsIDIxMCwgNDUsIDExNywgCi0gICAgMjEwLCA0NCwgMTUsIDUsIDIxMCwgNDMsIDE1LCA1LCAyMTAsIDQxLCAxNSwgNSwgMjEwLCA0MiwgMjM1LCAzLCAyMTYsIAotICAgIDIzOSwgMTUsIDUsIDIxMCwgMzYsIDE1LCA1LCAyMTAsIDI4LCAxNSwgNSwgMjEwLCAxMywgMTUsIDUsIDIxMCwgMTEsIDE1LCAKLSAgICA1LCAyMTAsIDEyLCAzMCwgNjEsIDE1LCA1LCAyMTAsIDEwLCAxNSwgNSwgMjEwLCA5LCAxNSwgMTMyLCA1LCAxMTMsIDI1MywgCi0gICAgMjMxLCAxNSwgMTMyLCA1LCAxMzQsIDI1MywgMjMxLCAxNSwgMTMyLCA1LCAyNDQsIDExLCAyNTMsIDIzMSwgMTUsIDEzMiwgCi0gICAgNSwgMjQ0LCA4MSwgMjUzLCAyMzEsIDE1LCAxMzIsIDUsIDIxOSwgMTI1LCAyNTMsIDIzMSwgMTUsIDEzMiwgNSwgMjIwLCAKLSAgICAxMjIsIDI1MywgMjMxLCAxNSwgMTMyLCA1LCAyNDUsIDE5MywgMjUzLCAyMzEsIDE1LCAxMzIsIDUsIDIyOCwgMjAwLCAyNTMsIAotICAgIDIzMSwgMTUsIDEzMiwgNSwgMTM0LCAyNDcsIDE4NywgMTUsIDEzMiwgNSwgMjQ0LCAxMSwgMjQ3LCAxODcsIDE1LCAxMzIsIAotICAgIDUsIDI0NCwgODEsIDI0NywgMTg3LCAxNSwgMTMyLCA1LCAyMTksIDEyNSwgMjQ3LCAxODcsIDE1LCAxMzIsIDUsIDIyMCwgCi0gICAgMTIyLCAyNDcsIDE4NywgMTUsIDEzMiwgNSwgMjQ1LCAxOTMsIDI0NywgMTg3LCAxNSwgMTMyLCA1LCAyMjgsIDIwMCwgMjQ3LCAKLSAgICAxODcsIDE1LCAxMzIsIDUsIDI0NCwgMTEsIDcwLCAxNSwgMTMyLCA1LCAyNDQsIDgxLCA3MCwgMTUsIDEzMiwgNSwgMjE5LCAKLSAgICAxMjUsIDcwLCAxNSwgMTMyLCA1LCAyMjAsIDEyMiwgNzAsIDE1LCAxMzIsIDUsIDI0NSwgMTkzLCA3MCwgMTUsIDEzMiwgNSwgCi0gICAgMjI4LCAyMDAsIDcwLCAxNSwgMTMyLCA1LCAxMjMsIDI0MywgMzgsIDE1LCAxMzIsIDUsIDExMywgMjQzLCAzOCwgMTUsIAotICAgIDEzMiwgNSwgMTM0LCAyNDMsIDM4LCAxNSwgMTMyLCA1LCAyNDQsIDExLCAyNDMsIDM4LCAxNSwgMTMyLCA1LCAyNDQsIDgxLCAKLSAgICAyNDMsIDM4LCAxNSwgMTMyLCA1LCAyMTksIDEyNSwgMjQzLCAzOCwgMTUsIDEzMiwgNSwgMjIwLCAxMjIsIDI0MywgMzgsIAotICAgIDE1LCAxMzIsIDUsIDI0NSwgMTkzLCAyNDMsIDM4LCAxNSwgMTMyLCA1LCAyMjgsIDIwMCwgMjQzLCAzOCwgMTUsIDEzMiwgNSwgCi0gICAgMTIzLCAyNDMsIDM1LCAxNSwgMTMyLCA1LCAxMTMsIDI0MywgMzUsIDE1LCAxMzIsIDUsIDEzNCwgMjQzLCAzNSwgMTUsIAotICAgIDEzMiwgNSwgMjQ0LCAxMSwgMjQzLCAzNSwgMTUsIDEzMiwgNSwgMjQ0LCA4MSwgMjQzLCAzNSwgMTUsIDEzMiwgNSwgMTEzLCAKLSAgICAyMjAsIDc4LCAxNSwgMTMyLCA1LCAxMzQsIDIyMCwgNzgsIDE1LCAxMzIsIDUsIDEzNCwgMjIwLCA3OSwgMjE0LCAxMiwgMTcsIAotICAgIDE1LCAxMzIsIDUsIDI0NCwgMTEsIDIyMCwgNzgsIDE1LCAxMzIsIDUsIDI0NCwgODEsIDIyMCwgNzgsIDE1LCAxMzIsIDUsIAotICAgIDIxOSwgMTI1LCAyMjAsIDc4LCAxNSwgMTMyLCA1LCAyMjAsIDEyMiwgMjIwLCA3OCwgMTUsIDEzMiwgNSwgMjQ1LCAxOTMsIAotICAgIDIyMCwgNzgsIDE1LCAxMzIsIDUsIDIyOCwgMjAwLCAyMjAsIDc4LCAxNSwgMTMyLCA1LCAxMjMsIDIyMCwgNzMsIDE1LCAKLSAgICAxMzIsIDUsIDExMywgMjIwLCA3MywgMTUsIDEzMiwgNSwgMTM0LCAyMjAsIDczLCAxNSwgMTMyLCA1LCAxMzQsIDIyMCwgNzQsIAotICAgIDIxNCwgMTIsIDE3LCAxNSwgMTMyLCA1LCAyNDQsIDExLCAyMjAsIDczLCAxNSwgMTMyLCA1LCAyNDQsIDgxLCAyMjAsIDczLCAKLSAgICAxNSwgMTMyLCA1LCAyMjAsIDc5LCAzMCwgMjQzLCAxMTksIDk2LCAyNDcsIDE4NywgMTUsIDEzMiwgNSwgMjIwLCA3OSwgMzAsIAotICAgIDI0MywgMTE5LCA5NiwgMjMwLCAxODgsIDE1LCAxMzIsIDUsIDEyMywgMjUxLCA5NSwgMTUsIDEzMiwgNSwgMTEzLCAyNTEsIAotICAgIDk1LCAxNSwgMTMyLCA1LCAxMzQsIDI1MSwgOTUsIDE1LCAxMzIsIDUsIDEzNCwgMjUxLCA5NiwgMjE0LCAxMiwgMTcsIDE1LCAKLSAgICAxMzIsIDUsIDI0NCwgMTEsIDI1MSwgOTUsIDE1LCAxMzIsIDUsIDI0NCwgODEsIDI1MSwgOTUsIDE1LCAxMzIsIDUsIDEzNCwgCi0gICAgMjE0LCAxMiwgMjQ0LCAyMCwgMjQ1LCA3NCwgMTUsIDEzMiwgNSwgMTM0LCAyMTQsIDEyLCAyNDQsIDIwLCAyNDUsIDcxLCAKLSAgICAxNSwgMTMyLCA1LCAyNDQsIDExLCAyMTQsIDEyLCAyNDQsIDIwLCAyMzIsIDIxNywgMTUsIDEzMiwgNSwgMjQ0LCAxMSwgCi0gICAgMjE0LCAxMiwgMjQ0LCAyMCwgMjMyLCAyMTUsIDE1LCAxMzIsIDUsIDI0NCwgMTEsIDIxNCwgMTIsIDI0NCwgMjAsIDIzMiwgCi0gICAgMjE4LCA2MSwgMTUsIDEzMiwgNSwgMjQ0LCAxMSwgMjE0LCAxMiwgMjQ0LCAyMCwgMjMyLCAyMTgsIDI1MywgMTU4LCAxNSwgCi0gICAgMTMyLCA1LCAyMTksIDEyNSwgMjE0LCAxMiwgMjQ0LCAyMCwgMjUzLCAyMjgsIDE1LCAxMzIsIDUsIDIyMCwgMTIyLCAyMTQsIAotICAgIDEyLCAyNDQsIDIwLCAyMzYsIDgsIDE1LCAxMzIsIDUsIDIyMCwgMTIyLCAyMTQsIDEyLCAyNDQsIDIwLCAyMzYsIDEwLCA2MSwgCi0gICAgMTUsIDEzMiwgNSwgMjIwLCAxMjIsIDIxNCwgMTIsIDI0NCwgMjAsIDIzNiwgMTAsIDI1MywgMTU4LCAxNSwgMTMyLCA1LCAKLSAgICAyNDUsIDE5MywgMjE0LCAxMiwgMjQ0LCAyMCwgMjE0LCAxMjEsIDE1LCAxMzIsIDUsIDI0NSwgMTkzLCAyMTQsIDEyLCAyNDQsIAotICAgIDIwLCAyMTQsIDEyMCwgMTUsIDEzMiwgNSwgMjI4LCAyMDAsIDIxNCwgMTIsIDI0NCwgMjAsIDIzNiwgMjQsIDE1LCAxMzIsIAotICAgIDUsIDIyOCwgMjAwLCAyMTQsIDEyLCAyNDQsIDIwLCAyMzYsIDIzLCAxNSwgMTMyLCA1LCAyMjgsIDIwMCwgMjE0LCAxMiwgCi0gICAgMjQ0LCAyMCwgMjM2LCAyMiwgMTUsIDEzMiwgNSwgMjI4LCAyMDAsIDIxNCwgMTIsIDI0NCwgMjAsIDIzNiwgMjUsIDYxLCAKLSAgICAxNSwgMTMyLCA1LCAxMTMsIDI1MywgMjMyLCAyMTYsIDIzOSwgMTUsIDEzMiwgNSwgMTM0LCAyNTMsIDIzMiwgMjE2LCAyMzksIAotICAgIDE1LCAxMzIsIDUsIDI0NCwgMTEsIDI1MywgMjMyLCAyMTYsIDIzOSwgMTUsIDEzMiwgNSwgMjQ0LCA4MSwgMjUzLCAyMzIsIAotICAgIDIxNiwgMjM5LCAxNSwgMTMyLCA1LCAyMTksIDEyNSwgMjUzLCAyMzIsIDIxNiwgMjM5LCAxNSwgMTMyLCA1LCAxMjMsIDI1MiwgCi0gICAgMTUwLCAxNSwgMTMyLCA1LCAxMTMsIDI1MiwgMTUwLCAxNSwgMTMyLCA1LCAxMzQsIDI1MiwgMTUwLCAxNSwgMTMyLCA1LCAKLSAgICAyNDQsIDExLCAyNTIsIDE1MCwgMTUsIDEzMiwgNSwgMjQ0LCAxMSwgMjUyLCAxNTEsIDIxNCwgMTIsIDE3LCAxNSwgMTMyLCAKLSAgICA1LCAyNDQsIDgxLCAyNTIsIDE1MCwgMTUsIDEzMiwgNSwgMjQ0LCA4MSwgMjUyLCAxNTEsIDIxNCwgMTIsIDE3LCAxNSwgCi0gICAgMTMyLCA1LCAyMjgsIDIxMCwgMTUsIDEzMiwgNSwgMjI4LCAyMTEsIDE1LCAxMzIsIDUsIDEyMywgMjQ1LCA3MCwgMTUsIAotICAgIDEzMiwgNSwgMTEzLCAyNDUsIDcwLCAxNSwgMTMyLCA1LCAxMjMsIDIxNiwgMTY5LCAyNDcsIDE4NywgMTUsIDEzMiwgNSwgCi0gICAgMTEzLCAyMTYsIDE2NywgMjQ3LCAxODcsIDE1LCAxMzIsIDUsIDI0NCwgODEsIDIxOSwgMTE0LCAyNDcsIDE4NywgMTUsIAotICAgIDEzMiwgNSwgMTIzLCAyMTYsIDE2OSwgMjE0LCAxMiwgMjQ0LCAyMCwgNjEsIDE1LCAxMzIsIDUsIDExMywgMjE2LCAxNjcsIAotICAgIDIxNCwgMTIsIDI0NCwgMjAsIDYxLCAxNSwgMTMyLCA1LCAxMjMsIDI0NSwgMTg5LCAyNTMsIDIzMSwgMTUsIDEzMiwgNSwgCi0gICAgMTIzLCAyMjQsIDIyLCAyNTMsIDIzMSwgMTUsIDEzMiwgNSwgNTUsIDI1MywgMjE5LCAxMjMsIDIxOSwgMTE1LCAxNSwgMTMyLCAKLSAgICA1LCA1NSwgMjUzLCAyMTksIDEyMywgMjI0LCAyMSwgMTUsIDIyNCwgMTQxLCA1LCA1NSwgMjUzLCAyMTksIDIxMSwgMjA5LCAKLSAgICAyNDcsIDE3MiwgMTUsIDIyNCwgMTQxLCA1LCA2NywgMjQ5LCAyMjYsIDE1LCAyMjQsIDE0MSwgNSwgMjQ3LCAyNTUsIDI0OSwgCi0gICAgMjI2LCAxNSwgMjI0LCAxNDEsIDUsIDI0NywgMjU1LCAyMTUsIDIyMSwgMTIsIDEzLCAyNTUsIDE1NSwgMTIsIDEzLCAyNTUsIAotICAgIDE1NCwgMTIsIDEzLCAyNTUsIDE1MywgMTIsIDEzLCAyNTUsIDE1MiwgMTIsIDEzLCAyNTUsIDE1MSwgMTIsIDEzLCAyNTUsIAotICAgIDE1MCwgMTIsIDEzLCAyNTUsIDE0OSwgMTIsIDEzLCAyNTUsIDE0OCwgMTIsIDEzLCAyNTUsIDE0NywgMTIsIDEzLCAyNTUsIAotICAgIDE0NiwgMTIsIDEzLCAyNTUsIDE0NSwgMTIsIDEzLCAyNTUsIDE0NCwgMTIsIDEzLCAyNTUsIDE0MywgMTIsIDEzLCAyNTUsIAotICAgIDE0MiwgMTIsIDEzLCAyNTUsIDE0MSwgMTIsIDEzLCAyNTUsIDE0MCwgMTIsIDEzLCAyNTUsIDEzOSwgMTIsIDEzLCAyNTUsIAotICAgIDEzOCwgMTIsIDEzLCAyNTUsIDEzNywgMTIsIDEzLCAyNTUsIDEzNiwgMTIsIDEzLCAyNTUsIDEzNSwgMTIsIDEzLCAyNTUsIAotICAgIDEzNCwgMTIsIDEzLCAyNTUsIDEzMywgMTIsIDEzLCAyNTUsIDEzMiwgMTIsIDEzLCAyNTUsIDEzMSwgMTIsIDEzLCAyNTUsIAotICAgIDEzMCwgMTIsIDEzLCAyNTUsIDEyOSwgMTIsIDEzLCAyNTUsIDEyOCwgMTIsIDEzLCAyNTUsIDEyNywgMTIsIDEzLCAyNTUsIAotICAgIDEyNiwgMTIsIDEzLCAyNTUsIDEyNSwgMTIsIDEzLCAyNTUsIDEyNCwgMTIsIDEzLCAyNTUsIDEyMywgMTIsIDEzLCAyNTUsIAotICAgIDEyMiwgMTIsIDEzLCAyNTUsIDEyMSwgMTIsIDEzLCAyNTUsIDEyMCwgMTIsIDEzLCAyNTUsIDExOSwgMTIsIDEzLCAyNTUsIAotICAgIDExOCwgMTIsIDEzLCAyNTUsIDExNywgMTIsIDEzLCAyNTUsIDExNiwgMTIsIDEzLCAyNTUsIDExNSwgMTIsIDEzLCAyNTUsIAotICAgIDExNCwgMTIsIDEzLCAyNTUsIDExMywgMTIsIDEzLCAyNTUsIDExMiwgMTIsIDEzLCAyNTUsIDExMSwgMTIsIDEzLCAyNTUsIAotICAgIDExMCwgMTIsIDEzLCAyNTUsIDEwOSwgMTIsIDEzLCAyNTUsIDEwOCwgMTIsIDEzLCAyNTUsIDEwNywgMTIsIDEzLCAyNTUsIAotICAgIDEwNiwgMTIsIDEzLCAyNTUsIDEwNSwgMTIsIDEzLCAyNTUsIDEwNCwgMTIsIDEzLCAyNTUsIDEwMywgMTIsIDEzLCAyNTUsIAotICAgIDEwMiwgMTIsIDEzLCAyNTUsIDEwMSwgMTIsIDEzLCAyNTUsIDEwMCwgMTIsIDEzLCAyNTUsIDk5LCAxMiwgMTMsIDI1NSwgCi0gICAgOTgsIDEyLCAxMywgMjU1LCA5NywgMTIsIDEzLCAyNTUsIDk2LCAxMiwgMTMsIDI1NSwgOTUsIDEyLCAxMywgMjU1LCA5NCwgCi0gICAgMTIsIDEzLCAyNTUsIDkzLCAxMiwgMTMsIDI1NSwgOTIsIDEyLCAxMywgMjU1LCA5MSwgMTIsIDEzLCAyNTUsIDkwLCAxMiwgCi0gICAgMTMsIDI1NSwgODksIDEyLCAxMywgMjU1LCA4OCwgMTIsIDEzLCAyNTUsIDg3LCAxMiwgMTMsIDI1NSwgODYsIDEyLCAxMywgCi0gICAgMjU1LCA4NSwgMTIsIDEzLCAyNTUsIDg0LCAxMiwgMTMsIDI1NSwgODMsIDEyLCAxMywgMjU1LCA4MiwgMTIsIDEzLCAyNTUsIAotICAgIDgxLCAxMiwgMTMsIDI1NSwgODAsIDEyLCAxMywgMjU1LCA3OSwgMTIsIDEzLCAyNTUsIDc4LCAxMiwgMTMsIDI1NSwgNzcsIAotICAgIDEyLCAxMywgMjU1LCA3NiwgMTIsIDEzLCAyNTMsIDE1NiwgMTIsIDEzLCAyNTMsIDE1NCwgMTIsIDEzLCAyNTMsIDE1MiwgCi0gICAgMTIsIDEzLCAyNTMsIDE1MCwgMTIsIDEzLCAyNTMsIDE0OCwgMTIsIDEzLCAyNTMsIDE0NywgMTIsIDEzLCAyNTMsIDE0NSwgCi0gICAgMTIsIDEzLCAyNTMsIDE0MywgMTIsIDEzLCAyNTMsIDE0MSwgMTIsIDEzLCAyNTMsIDEzOSwgMTIsIDEzLCAyNTEsIDYyLCAKLSAgICAxMiwgMTMsIDI1MSwgNjEsIDEyLCAxMywgMjUxLCA2MCwgMTIsIDEzLCAyNTEsIDU5LCAxMiwgMTMsIDI1MSwgNTgsIDEyLCAKLSAgICAxMywgMjUxLCA1NywgMTIsIDEzLCAyNTEsIDU2LCAxMiwgMTMsIDI1MSwgNTUsIDEyLCAxMywgMjUxLCA1NCwgMTIsIDEzLCAKLSAgICAyNTEsIDUzLCAxMiwgMTMsIDI1MSwgNTIsIDEyLCAxMywgMjUxLCA1MSwgMTIsIDEzLCAyNTEsIDUwLCAxMiwgMTMsIDI1MSwgCi0gICAgNDksIDEyLCAxMywgMjUxLCA0OCwgMTIsIDEzLCAyNTEsIDQ3LCAxMiwgMTMsIDI1MSwgNDYsIDEyLCAxMywgMjUxLCA0NSwgCi0gICAgMTIsIDEzLCAyNTEsIDQ0LCAxMiwgMTMsIDI1MSwgNDMsIDEyLCAxMywgMjUxLCA0MiwgMTIsIDEzLCAyNTEsIDQxLCAxMiwgCi0gICAgMTMsIDI1MSwgNDAsIDEyLCAxMywgMjUxLCAzOSwgMTIsIDEzLCAyNTEsIDM4LCAxMiwgMTMsIDI1MSwgMzcsIDEyLCAxMywgCi0gICAgMjUxLCAzNiwgMTIsIDEzLCAyNTEsIDM1LCAxMiwgMTMsIDI0OSwgNTksIDEyLCAxMywgMjQ5LCA1OCwgMTIsIDEzLCAyNDksIAotICAgIDU3LCAxMiwgMTMsIDI0OSwgNTYsIDEyLCAxMywgMjQ5LCA1NSwgMTIsIDEzLCAyNDksIDU0LCAxMiwgMTMsIDI0OSwgNTMsIAotICAgIDEyLCAxMywgMjQ5LCA1MiwgMTIsIDEzLCAyNDksIDUxLCAxMiwgMTMsIDI0OSwgNTAsIDEyLCAxMywgMjQ5LCA0OSwgMTIsIAotICAgIDEzLCAyNDksIDQ4LCAxMiwgMTMsIDI0OSwgNDcsIDEyLCAxMywgMjQ5LCA0NiwgMTIsIDEzLCAyNDksIDQ1LCAxMiwgMTMsIAotICAgIDI0OSwgNDQsIDEyLCAxMywgMjQ5LCA0MywgMTIsIDEzLCAyNDksIDQyLCAxMiwgMTMsIDI0OSwgNDEsIDEyLCAxMywgMjQ5LCAKLSAgICA0MCwgMTIsIDEzLCAyNDksIDM5LCAxMiwgMTMsIDI0OSwgMzgsIDEyLCAxMywgMjQ5LCAzNywgMTIsIDEzLCAyNDksIDM2LCAKLSAgICAxMiwgMTMsIDI0OSwgMzUsIDEyLCAxMywgMjQ5LCAzNCwgMTIsIDEzLCAyNDksIDMzLCAxMiwgMTMsIDI0OSwgMzIsIDEyLCAKLSAgICAxMywgMjQ5LCAzMSwgMTIsIDEzLCAyNDksIDMwLCAxMiwgMTMsIDI0OSwgMjksIDEyLCAxMywgMjQ5LCAyOCwgMTIsIDEzLCAKLSAgICAyNDksIDI3LCAxMiwgMTMsIDI0OSwgMjYsIDEyLCAxMywgMjQ5LCAyNSwgMTIsIDEzLCAyNDksIDI0LCAxMiwgMTMsIDI0OSwgCi0gICAgMjMsIDEyLCAxMywgMjQ5LCAyMiwgMTIsIDEzLCAyNDksIDIxLCAxMiwgMTMsIDI0OSwgMjAsIDEyLCAxMywgMjQ5LCAxOSwgCi0gICAgMTIsIDEzLCAyNDksIDE4LCAxMiwgMTMsIDI0OSwgMTcsIDEyLCAxMywgMjQ5LCAxNiwgMTIsIDEzLCAyNDksIDE1LCAxMiwgCi0gICAgMTMsIDI0OSwgMTQsIDEyLCAxMywgMjQ5LCAxMywgMTIsIDEzLCAyNDksIDEyLCAxMiwgMTMsIDI0OSwgMTEsIDEyLCAxMywgCi0gICAgMjQ5LCAxMCwgMTIsIDEzLCAyNDksIDksIDEyLCAxMywgMjQ5LCA4LCAxMiwgMTMsIDI0OSwgNywgMTIsIDEzLCAyNDksIDYsIAotICAgIDEyLCAxMywgMjQ5LCA1LCAxMiwgMTMsIDI0OSwgNCwgMTIsIDEzLCAyNDksIDMsIDEyLCAxMywgMjQ5LCAyLCAxMiwgMTMsIAotICAgIDI0OSwgMSwgMTIsIDEzLCAyNDksIDAsIDEyLCAxMywgMjQ4LCAyNTUsIDEyLCAxMywgMjQ4LCAyNTQsIDEyLCAxMywgMjQ4LCAKLSAgICAyNTMsIDEyLCAxMywgMjQ4LCAyNTIsIDEyLCAxMywgMjQ4LCAyNTEsIDEyLCAxMywgMjQ4LCAyNTAsIDEyLCAxMywgMjQ4LCAKLSAgICAyNDksIDEyLCAxMywgMjQ4LCAyNDgsIDEyLCAxMywgMjQ4LCAyNDcsIDEyLCAxMywgMjQ4LCAyNDYsIDEyLCAxMywgMjQ4LCAKLSAgICAyNDUsIDEyLCAxMywgMjQ4LCAyNDQsIDEyLCAxMywgMjQ4LCAyNDMsIDEyLCAxMywgMjQ4LCAyNDIsIDEyLCAxMywgMjQ4LCAKLSAgICAyNDEsIDEyLCAxMywgMjQ4LCAyNDAsIDEyLCAxMywgMjQ4LCAyMzksIDEyLCAxMywgMjQ4LCAyMzgsIDEyLCAxMywgMjQ4LCAKLSAgICAyMzcsIDEyLCAxMywgMjQ4LCAyMzYsIDEyLCAxMywgMjQ4LCAyMzUsIDEyLCAxMywgMjQ4LCAyMzQsIDEyLCAxMywgMjQ4LCAKLSAgICAyMzMsIDEyLCAxMywgMjQ4LCAyMzIsIDEyLCAxMywgMjQ4LCAyMzEsIDEyLCAxMywgMjQ4LCAyMzAsIDEyLCAxMywgMjQ4LCAKLSAgICAyMjksIDEyLCAxMywgMjQ4LCAyMjgsIDEyLCAxMywgMjQ4LCAyMjcsIDEyLCAxMywgMjQ4LCAyMjYsIDEyLCAxMywgMjQ4LCAKLSAgICAyMjUsIDEyLCAxMywgMjQ4LCAyMjQsIDEyLCAxMywgMjQ2LCAyMywgMTIsIDEzLCAyNDYsIDIyLCAxMiwgMTMsIDI0NiwgMjEsIAotICAgIDEyLCAxMywgMjQ2LCAyMCwgMTIsIDEzLCAyNDYsIDE5LCAxMiwgMTMsIDI0NiwgMTgsIDEyLCAxMywgMjQ2LCAxNywgMTIsIAotICAgIDEzLCAyNDYsIDE2LCAxMiwgMTMsIDI0NiwgMTUsIDEyLCAxMywgMjQ2LCAxNCwgMTIsIDEzLCAyNDYsIDEzLCAxMiwgMTMsIAotICAgIDI0NiwgMTIsIDEyLCAxMywgMjQ2LCAxMSwgMTIsIDEzLCAyNDYsIDEwLCAxMiwgMTMsIDI0NiwgOSwgMTIsIDEzLCAyNDYsIAotICAgIDgsIDEyLCAxMywgMjQ2LCA3LCAxMiwgMTMsIDI0NiwgNiwgMTIsIDEzLCAyNDYsIDUsIDEyLCAxMywgMjQ2LCA0LCAxMiwgCi0gICAgMTMsIDI0NiwgMywgMTIsIDEzLCAyNDYsIDIsIDEyLCAxMywgMjQ2LCAxLCAxMiwgMTMsIDI0NiwgMCwgMTIsIDEzLCAyNDUsIAotICAgIDI1NSwgMTIsIDEzLCAyNDUsIDI1NCwgMTIsIDEzLCAyNDUsIDI1MywgMTIsIDEzLCAyNDUsIDI1MiwgMTIsIDEzLCAyNDUsIAotICAgIDI1MSwgMTIsIDEzLCAyNDUsIDI1MCwgMTIsIDEzLCAyNDUsIDI0OSwgMTIsIDEzLCAyNDUsIDI0OCwgMTIsIDEzLCAyNDUsIAotICAgIDI0NywgMTIsIDEzLCAyNDUsIDI0NiwgMTIsIDEzLCAyNDUsIDI0NSwgMTIsIDEzLCAyNDUsIDI0NCwgMTIsIDEzLCAyNDUsIAotICAgIDI0MywgMTIsIDEzLCAyNDUsIDI0MiwgMTIsIDEzLCAyNDUsIDI0MSwgMTIsIDEzLCAyNDUsIDI0MCwgMTIsIDEzLCAyNDUsIAotICAgIDIzOSwgMTIsIDEzLCAyNDUsIDIzOCwgMTIsIDEzLCAyNDUsIDIzNywgMTIsIDEzLCAyNDUsIDIzNiwgMTIsIDEzLCAyNDUsIAotICAgIDUsIDEyLCAxMywgMjQ1LCA0LCAxMiwgMTMsIDI0NSwgMywgMTIsIDEzLCAyNDUsIDIsIDEyLCAxMywgMjQ1LCAxLCAxMiwgCi0gICAgMTMsIDI0NSwgMCwgMTIsIDEzLCAyNDQsIDI1NSwgMTIsIDEzLCAyNDQsIDI1NCwgMTIsIDEzLCAyNDQsIDI1MywgMTIsIDEzLCAKLSAgICAyNDQsIDI1MiwgMTIsIDEzLCAyNDQsIDI1MSwgMTIsIDEzLCAyNDQsIDI1MCwgMTIsIDEzLCAyNDQsIDI0OSwgMTIsIDEzLCAKLSAgICAyNDQsIDI0OCwgMTIsIDEzLCAyNDQsIDI0NywgMTIsIDEzLCAyNDQsIDI0NiwgMTIsIDEzLCAyNDQsIDI0NSwgMTIsIDEzLCAKLSAgICAyNDQsIDI0NCwgMTIsIDEzLCAyNDQsIDI0MywgMTIsIDEzLCAyNDQsIDI0MiwgMTIsIDEzLCAyNDQsIDI0MSwgMTIsIDEzLCAKLSAgICAyNDQsIDI0MCwgMTIsIDEzLCAyNDQsIDIzOSwgMTIsIDEzLCAyNDQsIDIzOCwgMTIsIDEzLCAyNDQsIDIzNywgMTIsIDEzLCAKLSAgICAyNDQsIDIzNiwgMTIsIDEzLCAyNDQsIDIzNSwgMTIsIDEzLCAyNDQsIDIzNCwgMTIsIDEzLCAyNDQsIDIzMywgMTIsIDEzLCAKLSAgICAyNDQsIDIzMiwgMTIsIDEzLCAyNDQsIDIzMSwgMTIsIDEzLCAyNDQsIDIzMCwgMTIsIDEzLCAyNDQsIDIyOSwgMTIsIDEzLCAKLSAgICAyNDQsIDIyOCwgMTIsIDEzLCAyNDQsIDIyNywgMTIsIDEzLCAyNDQsIDIyNiwgMTIsIDEzLCAyNDQsIDIyNSwgMTIsIDEzLCAKLSAgICAyNDQsIDIyNCwgMTIsIDEzLCAyNDQsIDIyMywgMTIsIDEzLCAyNDQsIDIyMiwgMTIsIDEzLCAyNDQsIDIyMSwgMTIsIDEzLCAKLSAgICAyNDQsIDIyMCwgMTIsIDEzLCAyNDQsIDIxOSwgMTIsIDEzLCAyNDQsIDIxOCwgMTIsIDEzLCAyNDQsIDIxNywgMTIsIDEzLCAKLSAgICAyNDQsIDIxNiwgMTIsIDEzLCAyNDQsIDIxNSwgMTIsIDEzLCAyNDQsIDIxNCwgMTIsIDEzLCAyNDQsIDIxMywgMTIsIDEzLCAKLSAgICAyNDQsIDIxMiwgMTIsIDEzLCAyNDQsIDIxMSwgMTIsIDEzLCAyNDQsIDIxMCwgMTIsIDEzLCAyNDQsIDIwOSwgMTIsIDEzLCAKLSAgICAyNDQsIDIwOCwgMTIsIDEzLCAyNDQsIDIwNywgMTIsIDEzLCAyNDQsIDIwNiwgMTIsIDEzLCAyNDQsIDIwNSwgMTIsIDEzLCAKLSAgICAyNDQsIDIwNCwgMTIsIDEzLCAyNDQsIDIwMywgMTIsIDEzLCAyNDQsIDIwMiwgMTIsIDEzLCAyNDQsIDIwMSwgMTIsIDEzLCAKLSAgICAyNDQsIDIwMCwgMTIsIDEzLCAyNDQsIDE5OSwgMTIsIDEzLCAyNDQsIDE5OCwgMTIsIDEzLCAyNDQsIDE5NywgMTIsIDEzLCAKKyAgICAyNDEsIDU5LCA0OCwgNywgNCwgMSwgMTYwLCAyLCAyNDEsIDU5LCA0OCwgNywgNiwgMSwgMTYwLCAyLCAxODQsIDcsIDQsIDEsIAorICAgIDE2MCwgMiwgMTg0LCA3LCA2LCAxLCAxNjAsIDIsIDI1MCwgMzksIDIyLCAxNDIsIDcsIDQsIDEsIDE2MCwgMiwgMjUwLCAzOSwgCisgICAgMjIsIDE0MiwgNywgNiwgMSwgMTYwLCAyLCAyNTAsIDM5LCAyMiwgMjQyLCAxNDMsIDcsIDQsIDEsIDE2MCwgMiwgMjUwLCAKKyAgICAzOSwgMjIsIDI0MiwgMTQzLCA3LCA2LCAxLCAxNjAsIDIsIDI1MCwgMzksIDIyLCAyNDEsIDU5LCA0OCwgNywgNCwgMSwgCisgICAgMTYwLCAyLCAyNTAsIDM5LCAyMiwgMjQxLCA1OSwgNDgsIDcsIDYsIDEsIDE2MCwgMiwgMjUwLCAzOSwgMjIsIDE4NCwgNywgCisgICAgNCwgMSwgMTYwLCAyLCAyNTAsIDM5LCAyMiwgMTg0LCA3LCA2LCAxLCAxNjAsIDIsIDI1MCwgMzksIDIyLCA1OSwgNTEsIDcsIAorICAgIDQsIDEsIDE2MCwgMiwgMjUwLCAzOSwgMjIsIDU5LCA1MSwgNywgNiwgMSwgMjQwLCAxNjEsIDIsIDI0MSwgNTksIDQ4LCA3LCAKKyAgICA0LCAxLCAyNDAsIDE2MSwgMiwgMjQxLCA1OSwgNDgsIDcsIDYsIDEsIDI0MCwgMTYxLCAyLCA1OSwgNTEsIDcsIDQsIDEsIAorICAgIDI0MCwgMTYxLCAyLCA1OSwgNTEsIDcsIDYsIDEsIDE0NCwgMiwgNTksIDUxLCA3LCA0LCAxLCAxNDQsIDIsIDU5LCA1MSwgNywgCisgICAgNiwgMSwgMTQ0LCAyLCAyNDEsIDU5LCA0OCwgNywgNCwgMSwgMTQ0LCAyLCAyNDEsIDU5LCA0OCwgNywgNiwgMSwgMTQ0LCAyLCAKKyAgICAyNTAsIDM5LCAyMiwgMTQyLCA3LCA0LCAxLCAxNDQsIDIsIDI1MCwgMzksIDIyLCAxNDIsIDcsIDYsIDEsIDE0NCwgMiwgCisgICAgMjUwLCAzOSwgMjIsIDI0MiwgMTQzLCA3LCA0LCAxLCAxNDQsIDIsIDI1MCwgMzksIDIyLCAyNDIsIDE0MywgNywgNiwgMSwgCisgICAgMTQ0LCAyLCAyNTAsIDM5LCAyMiwgMjQxLCA1OSwgNDgsIDcsIDQsIDEsIDE0NCwgMiwgMjUwLCAzOSwgMjIsIDI0MSwgNTksIAorICAgIDQ4LCA3LCA2LCAxLCAxNDQsIDIsIDI1MCwgMzksIDIyLCAxODQsIDcsIDQsIDEsIDE0NCwgMiwgMjUwLCAzOSwgMjIsIDE4NCwgCisgICAgNywgNiwgMSwgMTQ0LCAyLCAyNTAsIDM5LCAyMiwgNTksIDUxLCA3LCA0LCAxLCAxNDQsIDIsIDI1MCwgMzksIDIyLCA1OSwgCisgICAgNTEsIDcsIDYsIDEsIDE0NCwgMiwgMjQxLCAwLCAyMiwgMTQyLCA3LCA0LCAxLCAxNDQsIDIsIDI0MSwgMCwgMjIsIDE0MiwgCisgICAgNywgNiwgMSwgMTQ0LCAyLCAyNDEsIDAsIDIyLCAyNDIsIDE0MywgNywgNCwgMSwgMTQ0LCAyLCAyNDEsIDAsIDIyLCAyNDIsIAorICAgIDE0MywgNywgNiwgMSwgMTQ0LCAyLCAyNDEsIDAsIDIyLCAyNDEsIDU5LCA0OCwgNywgNCwgMSwgMTQ0LCAyLCAyNDEsIDAsIAorICAgIDIyLCAyNDEsIDU5LCA0OCwgNywgNiwgMSwgMTQ0LCAyLCAyNDEsIDAsIDIyLCAxODQsIDcsIDQsIDEsIDE0NCwgMiwgMjQxLCAKKyAgICAwLCAyMiwgMTg0LCA3LCA2LCAxLCAxNDQsIDIsIDI0MSwgMCwgMjIsIDU5LCA1MSwgNywgNCwgMSwgMTQ0LCAyLCAyNDEsIDAsIAorICAgIDIyLCA1OSwgNTEsIDcsIDYsIDEsIDEwNCwgMiwgNTksIDUxLCA3LCA0LCAxLCAxMDQsIDIsIDU5LCA1MSwgNywgNiwgMSwgCisgICAgMTA0LCAyLCAyNDEsIDU5LCA0OCwgNywgNCwgMSwgMTA0LCAyLCAyNDEsIDU5LCA0OCwgNywgNiwgMSwgMTA0LCAyLCAyNDEsIAorICAgIDAsIDIyLCAxNDIsIDcsIDQsIDEsIDEwNCwgMiwgMjQxLCAwLCAyMiwgMTQyLCA3LCA2LCAxLCAxMDQsIDIsIDI0MSwgMCwgCisgICAgMjIsIDI0MiwgMTQzLCA3LCA0LCAxLCAxMDQsIDIsIDI0MSwgMCwgMjIsIDI0MiwgMTQzLCA3LCA2LCAxLCAxMDQsIDIsIAorICAgIDI0MSwgMCwgMjIsIDI0MSwgNTksIDQ4LCA3LCA0LCAxLCAxMDQsIDIsIDI0MSwgMCwgMjIsIDI0MSwgNTksIDQ4LCA3LCA2LCAKKyAgICAxLCAxMDQsIDIsIDI0MSwgMCwgMjIsIDE4NCwgNywgNCwgMSwgMTA0LCAyLCAyNDEsIDAsIDIyLCAxODQsIDcsIDYsIDEsIAorICAgIDEwNCwgMiwgMjQxLCAwLCAyMiwgNTksIDUxLCA3LCA0LCAxLCAxMDQsIDIsIDI0MSwgMCwgMjIsIDU5LCA1MSwgNywgNiwgMSwgCisgICAgMjExLCAxMTgsIDIsIDI0MiwgMTQzLCA3LCA0LCAxLCAyMTEsIDExOCwgMiwgMjQyLCAxNDMsIDcsIDYsIDEsIDIxMSwgMTE4LCAKKyAgICAyLCA1OSwgNTEsIDcsIDQsIDEsIDIxMSwgMTE4LCAyLCA1OSwgNTEsIDcsIDYsIDEsIDIxMSwgMTE4LCAyLCAyNDEsIDU5LCAKKyAgICA0OCwgNywgNCwgMSwgMjExLCAxMTgsIDIsIDI0MSwgNTksIDQ4LCA3LCA2LCAxLCAyMTEsIDExOCwgMiwgMTg0LCA3LCA0LCAKKyAgICAxLCAyMTEsIDExOCwgMiwgMTg0LCA3LCA2LCAxLCAyMzAsIDIyOCwgMjMyLCAxOTEsIDcsIDQsIDEsIDIzMCwgMjI4LCAyMzIsIAorICAgIDE5MSwgNywgNiwgMSwgMjMwLCAyMjgsIDIxNCwgMTA1LCA3LCA0LCAxLCAyMzAsIDIyOCwgMjE0LCAxMDUsIDcsIDYsIDEsIAorICAgIDIxMSwgMTE4LCAyLCAyMzIsIDEyOSwgNywgNCwgMSwgMjExLCAxMTgsIDIsIDIzMiwgMTI5LCAyNiwgNCwgMSwgMjU0LCAKKyAgICAxNTIsIDIsIDIyNCwgMTU3LCAyNiwgNCwgMSwgMjU0LCAxNTIsIDIsIDI0OCwgMTYxLCAyNiwgNCwgMSwgMjU0LCAxNTIsIDIsIAorICAgIDIyNCwgMTU4LCAyMiwgMjE0LCAxMywgMjYsIDQsIDEsIDI1NCwgMTUyLCAyLCAyNDgsIDE2MiwgMjIsIDIxNCwgMTMsIDI2LCAKKyAgICA0LCAxLCAyNTQsIDE1MiwgMiwgMjI0LCAxNTgsIDIyLCAyMjYsIDExNCwgMjYsIDQsIDEsIDI1NCwgMTUyLCAyLCAyNDgsIAorICAgIDE2MiwgMjIsIDIyNiwgMTE0LCAyNiwgNCwgMSwgMjU0LCAxNTIsIDIsIDIyNCwgMTU4LCAyMiwgMjI1LCAxNzgsIDI2LCA0LCAKKyAgICAxLCAyNTQsIDE1MiwgMiwgMjQ4LCAxNjIsIDIyLCAyMjUsIDE3OCwgMjYsIDYsIDEsIDI1NCwgMTUyLCAyLCAyMjQsIDE1NywgCisgICAgMjYsIDYsIDEsIDI1NCwgMTUyLCAyLCAyNDgsIDE2MSwgMjYsIDYsIDEsIDI1NCwgMTUyLCAyLCAyMjQsIDE1OCwgMjIsIAorICAgIDIxNCwgMTMsIDI2LCA2LCAxLCAyNTQsIDE1MiwgMiwgMjQ4LCAxNjIsIDIyLCAyMTQsIDEzLCAyNiwgNiwgMSwgMjU0LCAKKyAgICAxNTIsIDIsIDIyNCwgMTU4LCAyMiwgMjI2LCAxMTQsIDI2LCA2LCAxLCAyNTQsIDE1MiwgMiwgMjQ4LCAxNjIsIDIyLCAyMjYsIAorICAgIDExNCwgMjYsIDYsIDEsIDI1NCwgMTUyLCAyLCAyMjQsIDE1OCwgMjIsIDIyNSwgMTc4LCAyNiwgNiwgMSwgMjU0LCAxNTIsIAorICAgIDIsIDI0OCwgMTYyLCAyMiwgMjI1LCAxNzgsIDI2LCA0LCAxLCAyNDUsIDEwOSwgMiwgMjI0LCAxNTcsIDI2LCA0LCAxLCAKKyAgICAyNDUsIDEwOSwgMiwgMjQ4LCAxNjEsIDI2LCA0LCAxLCAyNDUsIDEwOSwgMiwgMjI0LCAxNTgsIDIyLCAyMTQsIDEzLCAyNiwgCisgICAgNCwgMSwgMjQ1LCAxMDksIDIsIDI0OCwgMTYyLCAyMiwgMjE0LCAxMywgMjYsIDQsIDEsIDI0NSwgMTA5LCAyLCAyMjQsIAorICAgIDE1OCwgMjIsIDIyNiwgMTE0LCAyNiwgNCwgMSwgMjQ1LCAxMDksIDIsIDI0OCwgMTYyLCAyMiwgMjI2LCAxMTQsIDI2LCA2LCAKKyAgICAxLCAyNDUsIDEwOSwgMiwgMjI0LCAxNTcsIDI2LCA2LCAxLCAyNDUsIDEwOSwgMiwgMjQ4LCAxNjEsIDI2LCA2LCAxLCAyNDUsIAorICAgIDEwOSwgMiwgMjI0LCAxNTgsIDIyLCAyMTQsIDEzLCAyNiwgNiwgMSwgMjQ1LCAxMDksIDIsIDI0OCwgMTYyLCAyMiwgMjE0LCAKKyAgICAxMywgMjYsIDYsIDEsIDI0NSwgMTA5LCAyLCAyMjQsIDE1OCwgMjIsIDIyNiwgMTE0LCAyNiwgNiwgMSwgMjQ1LCAxMDksIDIsIAorICAgIDI0OCwgMTYyLCAyMiwgMjI2LCAxMTQsIDI2LCA0LCAxLCAyNDUsIDcyLCAyLCAyMjQsIDE1NywgMjYsIDQsIDEsIDI0NSwgCisgICAgNzIsIDIsIDI0OCwgMTYxLCAyNiwgNCwgMSwgMjQ1LCA3MiwgMiwgMjI0LCAxNTgsIDIyLCAyMTQsIDEzLCAyNiwgNCwgMSwgCisgICAgMjQ1LCA3MiwgMiwgMjQ4LCAxNjIsIDIyLCAyMTQsIDEzLCAyNiwgNCwgMSwgMjQ1LCA3MiwgMiwgMjI0LCAxNTgsIDIyLCAKKyAgICAyMjYsIDExNCwgMjYsIDQsIDEsIDI0NSwgNzIsIDIsIDI0OCwgMTYyLCAyMiwgMjI2LCAxMTQsIDI2LCA0LCAxLCAyNDUsIAorICAgIDcyLCAyLCAyMjQsIDE1OCwgMjIsIDIyNSwgMTc4LCAyNiwgNCwgMSwgMjQ1LCA3MiwgMiwgMjQ4LCAxNjIsIDIyLCAyMjUsIAorICAgIDE3OCwgMjYsIDYsIDEsIDI0NSwgNzIsIDIsIDIyNCwgMTU3LCAyNiwgNiwgMSwgMjQ1LCA3MiwgMiwgMjQ4LCAxNjEsIDI2LCAKKyAgICA2LCAxLCAyNDUsIDcyLCAyLCAyMjQsIDE1OCwgMjIsIDIxNCwgMTMsIDI2LCA2LCAxLCAyNDUsIDcyLCAyLCAyNDgsIDE2MiwgCisgICAgMjIsIDIxNCwgMTMsIDI2LCA2LCAxLCAyNDUsIDcyLCAyLCAyMjQsIDE1OCwgMjIsIDIyNiwgMTE0LCAyNiwgNiwgMSwgMjQ1LCAKKyAgICA3MiwgMiwgMjQ4LCAxNjIsIDIyLCAyMjYsIDExNCwgMjYsIDYsIDEsIDI0NSwgNzIsIDIsIDIyNCwgMTU4LCAyMiwgMjI1LCAKKyAgICAxNzgsIDI2LCA2LCAxLCAyNDUsIDcyLCAyLCAyNDgsIDE2MiwgMjIsIDIyNSwgMTc4LCAyNiwgNCwgMSwgMjM1LCAxOTMsIDIsIAorICAgIDIyNCwgMTU3LCAyNiwgNCwgMSwgMjM1LCAxOTMsIDIsIDI0OCwgMTYxLCAyNiwgNCwgMSwgMjM1LCAxOTMsIDIsIDIyNCwgCisgICAgMTU4LCAyMiwgMjE0LCAxMywgMjYsIDQsIDEsIDIzNSwgMTkzLCAyLCAyNDgsIDE2MiwgMjIsIDIxNCwgMTMsIDI2LCA0LCAxLCAKKyAgICAyMzUsIDE5MywgMiwgMjI0LCAxNTgsIDIyLCAyMjYsIDExNCwgMjYsIDQsIDEsIDIzNSwgMTkzLCAyLCAyNDgsIDE2MiwgMjIsIAorICAgIDIyNiwgMTE0LCAyNiwgNCwgMSwgMjM1LCAxOTMsIDIsIDIyNCwgMTU4LCAyMiwgMjI1LCAxNzgsIDI2LCA0LCAxLCAyMzUsIAorICAgIDE5MywgMiwgMjQ4LCAxNjIsIDIyLCAyMjUsIDE3OCwgMjYsIDYsIDEsIDIzNSwgMTkzLCAyLCAyMjQsIDE1NywgMjYsIDYsIAorICAgIDEsIDIzNSwgMTkzLCAyLCAyNDgsIDE2MSwgMjYsIDYsIDEsIDIzNSwgMTkzLCAyLCAyMjQsIDE1OCwgMjIsIDIxNCwgMTMsIAorICAgIDI2LCA2LCAxLCAyMzUsIDE5MywgMiwgMjQ4LCAxNjIsIDIyLCAyMTQsIDEzLCAyNiwgNiwgMSwgMjM1LCAxOTMsIDIsIDIyNCwgCisgICAgMTU4LCAyMiwgMjI2LCAxMTQsIDI2LCA2LCAxLCAyMzUsIDE5MywgMiwgMjQ4LCAxNjIsIDIyLCAyMjYsIDExNCwgMjYsIDYsIAorICAgIDEsIDIzNSwgMTkzLCAyLCAyMjQsIDE1OCwgMjIsIDIyNSwgMTc4LCAyNiwgNiwgMSwgMjM1LCAxOTMsIDIsIDI0OCwgMTYyLCAKKyAgICAyMiwgMjI1LCAxNzgsIDI2LCA0LCAxLCAyMjYsIDIwNCwgMiwgMjI0LCAxNTcsIDI2LCA0LCAxLCAyMjYsIDIwNCwgMiwgCisgICAgMjQ4LCAxNjEsIDI2LCA0LCAxLCAyMjYsIDIwNCwgMiwgMjI0LCAxNTgsIDIyLCAyMTQsIDEzLCAyNiwgNCwgMSwgMjI2LCAKKyAgICAyMDQsIDIsIDI0OCwgMTYyLCAyMiwgMjE0LCAxMywgMjYsIDQsIDEsIDIyNiwgMjA0LCAyLCAyMjQsIDE1OCwgMjIsIDIyNiwgCisgICAgMTE0LCAyNiwgNCwgMSwgMjI2LCAyMDQsIDIsIDI0OCwgMTYyLCAyMiwgMjI2LCAxMTQsIDI2LCA2LCAxLCAyMjYsIDIwNCwgCisgICAgMiwgMjI0LCAxNTcsIDI2LCA2LCAxLCAyMjYsIDIwNCwgMiwgMjQ4LCAxNjEsIDI2LCA2LCAxLCAyMjYsIDIwNCwgMiwgMjI0LCAKKyAgICAxNTgsIDIyLCAyMTQsIDEzLCAyNiwgNiwgMSwgMjI2LCAyMDQsIDIsIDI0OCwgMTYyLCAyMiwgMjE0LCAxMywgMjYsIDYsIDEsIAorICAgIDIyNiwgMjA0LCAyLCAyMjQsIDE1OCwgMjIsIDIyNiwgMTE0LCAyNiwgNiwgMSwgMjI2LCAyMDQsIDIsIDI0OCwgMTYyLCAyMiwgCisgICAgMjI2LCAxMTQsIDI2LCA0LCAxLCAyMTQsIDE1OCwgMiwgMjI0LCAxNTcsIDI2LCA0LCAxLCAyMTQsIDE1OCwgMiwgMjQ4LCAKKyAgICAxNjEsIDI2LCA0LCAxLCAyMTQsIDE1OCwgMiwgMjI0LCAxNTgsIDIyLCAyMTQsIDEzLCAyNiwgNCwgMSwgMjE0LCAxNTgsIDIsIAorICAgIDI0OCwgMTYyLCAyMiwgMjE0LCAxMywgMjYsIDQsIDEsIDIxNCwgMTU4LCAyLCAyMjQsIDE1OCwgMjIsIDIyNiwgMTE0LCAyNiwgCisgICAgNCwgMSwgMjE0LCAxNTgsIDIsIDI0OCwgMTYyLCAyMiwgMjI2LCAxMTQsIDI2LCA0LCAxLCAyMTQsIDE1OCwgMiwgMjI0LCAKKyAgICAxNTgsIDIyLCAyMjUsIDE3OCwgMjYsIDQsIDEsIDIxNCwgMTU4LCAyLCAyNDgsIDE2MiwgMjIsIDIyNSwgMTc4LCAyNiwgNiwgCisgICAgMSwgMjE0LCAxNTgsIDIsIDI0OCwgMTYxLCAyNiwgNiwgMSwgMjE0LCAxNTgsIDIsIDI0OCwgMTYyLCAyMiwgMjE0LCAxMywgCisgICAgMjYsIDYsIDEsIDIxNCwgMTU4LCAyLCAyNDgsIDE2MiwgMjIsIDIyNiwgMTE0LCAyNiwgNiwgMSwgMjE0LCAxNTgsIDIsIAorICAgIDI0OCwgMTYyLCAyMiwgMjI1LCAxNzgsIDI2LCA0LCAxLCAyMjYsIDIwNiwgMiwgMjI0LCAxNTcsIDI2LCA0LCAxLCAyMjYsIAorICAgIDIwNiwgMiwgMjQ4LCAxNjEsIDI2LCA0LCAxLCAyMjYsIDIwNiwgMiwgMjI0LCAxNTgsIDIyLCAyMTQsIDEzLCAyNiwgNCwgMSwgCisgICAgMjI2LCAyMDYsIDIsIDI0OCwgMTYyLCAyMiwgMjE0LCAxMywgMjYsIDQsIDEsIDIyNiwgMjA2LCAyLCAyMjQsIDE1OCwgMjIsIAorICAgIDIyNiwgMTE0LCAyNiwgNCwgMSwgMjI2LCAyMDYsIDIsIDI0OCwgMTYyLCAyMiwgMjI2LCAxMTQsIDI2LCA0LCAxLCAyMjYsIAorICAgIDIwNiwgMiwgMjI0LCAxNTgsIDIyLCAyMjUsIDE3OCwgMjYsIDQsIDEsIDIyNiwgMjA2LCAyLCAyNDgsIDE2MiwgMjIsIDIyNSwgCisgICAgMTc4LCAyNiwgNiwgMSwgMjI2LCAyMDYsIDIsIDIyNCwgMTU3LCAyNiwgNiwgMSwgMjI2LCAyMDYsIDIsIDI0OCwgMTYxLCAKKyAgICAyNiwgNiwgMSwgMjI2LCAyMDYsIDIsIDIyNCwgMTU4LCAyMiwgMjE0LCAxMywgMjYsIDYsIDEsIDIyNiwgMjA2LCAyLCAyNDgsIAorICAgIDE2MiwgMjIsIDIxNCwgMTMsIDI2LCA2LCAxLCAyMjYsIDIwNiwgMiwgMjI0LCAxNTgsIDIyLCAyMjYsIDExNCwgMjYsIDYsIAorICAgIDEsIDIyNiwgMjA2LCAyLCAyNDgsIDE2MiwgMjIsIDIyNiwgMTE0LCAyNiwgNiwgMSwgMjI2LCAyMDYsIDIsIDIyNCwgMTU4LCAKKyAgICAyMiwgMjI1LCAxNzgsIDI2LCA2LCAxLCAyMjYsIDIwNiwgMiwgMjQ4LCAxNjIsIDIyLCAyMjUsIDE3OCwgMjYsIDQsIDEsIAorICAgIDI1NCwgMTUyLCAyLCAyMTQsIDEzLCAyNiwgNCwgMSwgMjU0LCAxNTIsIDIsIDIyNiwgMTE0LCAyNiwgNCwgMSwgMjQ1LCAKKyAgICAxMDksIDIsIDIxNCwgMTMsIDI2LCA0LCAxLCAyNDUsIDEwOSwgMiwgMjI2LCAxMTQsIDI2LCA0LCAxLCAyNDUsIDcyLCAyLCAKKyAgICAyMTQsIDEzLCAyNiwgNCwgMSwgMjQ1LCA3MiwgMiwgMjI2LCAxMTQsIDI2LCA0LCAxLCAyMzUsIDE5MywgMiwgMjE0LCAxMywgCisgICAgMjYsIDQsIDEsIDIzNSwgMTkzLCAyLCAyMjYsIDExNCwgMjYsIDQsIDEsIDIyNiwgMjA0LCAyLCAyMTQsIDEzLCAyNiwgNCwgCisgICAgMSwgMjI2LCAyMDQsIDIsIDIyNiwgMTE0LCAyNiwgNCwgMSwgMjE0LCAxNTgsIDIsIDIxNCwgMTMsIDI2LCA0LCAxLCAyMTQsIAorICAgIDE1OCwgMiwgMjI2LCAxMTQsIDI2LCA0LCAxLCAyMjYsIDIwNiwgMiwgMjE0LCAxMywgMjYsIDQsIDEsIDIyNiwgMjA2LCAyLCAKKyAgICAyMjYsIDExNCwgMjYsIDQsIDEsIDI1NCwgMTUyLCAyLCAyMjQsIDE1OCwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjU0LCAKKyAgICAxNTIsIDIsIDI0OCwgMTYyLCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyNTQsIDE1MiwgMiwgMjI0LCAxNTgsIDIyLCAyMTQsIAorICAgIDE0LCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyNTQsIDE1MiwgMiwgMjQ4LCAxNjIsIDIyLCAyMTQsIDE0LCAyMiwgMjEwLCAKKyAgICAyMTksIDI2LCA0LCAxLCAyNTQsIDE1MiwgMiwgMjI0LCAxNTgsIDIyLCAyMjYsIDExNSwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgCisgICAgMSwgMjU0LCAxNTIsIDIsIDI0OCwgMTYyLCAyMiwgMjI2LCAxMTUsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDI1NCwgMTUyLCAKKyAgICAyLCAyMjQsIDE1OCwgMjIsIDIyNSwgMTc5LCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyNTQsIDE1MiwgMiwgMjQ4LCAxNjIsIAorICAgIDIyLCAyMjUsIDE3OSwgMjIsIDIxMCwgMjE5LCAyNiwgNiwgMSwgMjU0LCAxNTIsIDIsIDIyNCwgMTU4LCAyMiwgMjI0LCAKKyAgICAxNzAsIDI2LCA2LCAxLCAyNTQsIDE1MiwgMiwgMjQ4LCAxNjIsIDIyLCAyMjQsIDE3MCwgMjYsIDYsIDEsIDI1NCwgMTUyLCAKKyAgICAyLCAyMjQsIDE1OCwgMjIsIDIxNCwgMTQsIDIyLCAyMjQsIDE3MCwgMjYsIDYsIDEsIDI1NCwgMTUyLCAyLCAyNDgsIDE2MiwgCisgICAgMjIsIDIxNCwgMTQsIDIyLCAyMjQsIDE3MCwgMjYsIDYsIDEsIDI1NCwgMTUyLCAyLCAyMjQsIDE1OCwgMjIsIDIyNiwgMTE1LCAKKyAgICAyMiwgMjI0LCAxNzAsIDI2LCA2LCAxLCAyNTQsIDE1MiwgMiwgMjQ4LCAxNjIsIDIyLCAyMjYsIDExNSwgMjIsIDIyNCwgCisgICAgMTcwLCAyNiwgNiwgMSwgMjU0LCAxNTIsIDIsIDIyNCwgMTU4LCAyMiwgMjI1LCAxNzksIDIyLCAyMjQsIDE3MCwgMjYsIDYsIAorICAgIDEsIDI1NCwgMTUyLCAyLCAyNDgsIDE2MiwgMjIsIDIyNSwgMTc5LCAyMiwgMjI0LCAxNzAsIDI2LCA0LCAxLCAyNDUsIDcyLCAKKyAgICAyLCAyMjQsIDE1OCwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjQ1LCA3MiwgMiwgMjQ4LCAxNjIsIDIyLCAyMTAsIDIxOSwgCisgICAgMjYsIDQsIDEsIDI0NSwgNzIsIDIsIDIyNCwgMTU4LCAyMiwgMjE0LCAxNCwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjQ1LCAKKyAgICA3MiwgMiwgMjQ4LCAxNjIsIDIyLCAyMTQsIDE0LCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyNDUsIDcyLCAyLCAyMjQsIAorICAgIDE1OCwgMjIsIDIyNiwgMTE1LCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyNDUsIDcyLCAyLCAyNDgsIDE2MiwgMjIsIDIyNiwgCisgICAgMTE1LCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyNDUsIDcyLCAyLCAyMjQsIDE1OCwgMjIsIDIyNSwgMTc5LCAyMiwgMjEwLCAKKyAgICAyMTksIDI2LCA0LCAxLCAyNDUsIDcyLCAyLCAyNDgsIDE2MiwgMjIsIDIyNSwgMTc5LCAyMiwgMjEwLCAyMTksIDI2LCA2LCAKKyAgICAxLCAyNDUsIDcyLCAyLCAyMjQsIDE1OCwgMjIsIDIyNCwgMTcwLCAyNiwgNiwgMSwgMjQ1LCA3MiwgMiwgMjQ4LCAxNjIsIAorICAgIDIyLCAyMjQsIDE3MCwgMjYsIDYsIDEsIDI0NSwgNzIsIDIsIDIyNCwgMTU4LCAyMiwgMjE0LCAxNCwgMjIsIDIyNCwgMTcwLCAKKyAgICAyNiwgNiwgMSwgMjQ1LCA3MiwgMiwgMjQ4LCAxNjIsIDIyLCAyMTQsIDE0LCAyMiwgMjI0LCAxNzAsIDI2LCA2LCAxLCAyNDUsIAorICAgIDcyLCAyLCAyMjQsIDE1OCwgMjIsIDIyNiwgMTE1LCAyMiwgMjI0LCAxNzAsIDI2LCA2LCAxLCAyNDUsIDcyLCAyLCAyNDgsIAorICAgIDE2MiwgMjIsIDIyNiwgMTE1LCAyMiwgMjI0LCAxNzAsIDI2LCA2LCAxLCAyNDUsIDcyLCAyLCAyMjQsIDE1OCwgMjIsIDIyNSwgCisgICAgMTc5LCAyMiwgMjI0LCAxNzAsIDI2LCA2LCAxLCAyNDUsIDcyLCAyLCAyNDgsIDE2MiwgMjIsIDIyNSwgMTc5LCAyMiwgMjI0LCAKKyAgICAxNzAsIDI2LCA0LCAxLCAyMjYsIDIwNiwgMiwgMjI0LCAxNTgsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDIyNiwgMjA2LCAKKyAgICAyLCAyNDgsIDE2MiwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjI2LCAyMDYsIDIsIDIyNCwgMTU4LCAyMiwgMjE0LCAxNCwgCisgICAgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjI2LCAyMDYsIDIsIDI0OCwgMTYyLCAyMiwgMjE0LCAxNCwgMjIsIDIxMCwgMjE5LCAKKyAgICAyNiwgNCwgMSwgMjI2LCAyMDYsIDIsIDIyNCwgMTU4LCAyMiwgMjI2LCAxMTUsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIAorICAgIDIyNiwgMjA2LCAyLCAyNDgsIDE2MiwgMjIsIDIyNiwgMTE1LCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyMjYsIDIwNiwgMiwgCisgICAgMjI0LCAxNTgsIDIyLCAyMjUsIDE3OSwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjI2LCAyMDYsIDIsIDI0OCwgMTYyLCAKKyAgICAyMiwgMjI1LCAxNzksIDIyLCAyMTAsIDIxOSwgMjYsIDYsIDEsIDIyNiwgMjA2LCAyLCAyMjQsIDE1OCwgMjIsIDIyNCwgCisgICAgMTcwLCAyNiwgNiwgMSwgMjI2LCAyMDYsIDIsIDI0OCwgMTYyLCAyMiwgMjI0LCAxNzAsIDI2LCA2LCAxLCAyMjYsIDIwNiwgCisgICAgMiwgMjI0LCAxNTgsIDIyLCAyMTQsIDE0LCAyMiwgMjI0LCAxNzAsIDI2LCA2LCAxLCAyMjYsIDIwNiwgMiwgMjQ4LCAxNjIsIAorICAgIDIyLCAyMTQsIDE0LCAyMiwgMjI0LCAxNzAsIDI2LCA2LCAxLCAyMjYsIDIwNiwgMiwgMjI0LCAxNTgsIDIyLCAyMjYsIDExNSwgCisgICAgMjIsIDIyNCwgMTcwLCAyNiwgNiwgMSwgMjI2LCAyMDYsIDIsIDI0OCwgMTYyLCAyMiwgMjI2LCAxMTUsIDIyLCAyMjQsIAorICAgIDE3MCwgMjYsIDYsIDEsIDIyNiwgMjA2LCAyLCAyMjQsIDE1OCwgMjIsIDIyNSwgMTc5LCAyMiwgMjI0LCAxNzAsIDI2LCA2LCAKKyAgICAxLCAyMjYsIDIwNiwgMiwgMjQ4LCAxNjIsIDIyLCAyMjUsIDE3OSwgMjIsIDIyNCwgMTcwLCAyNiwgNCwgMSwgMjU0LCAxNTIsIAorICAgIDIsIDIxMywgMTIwLCAyNiwgNCwgMSwgMjU0LCAxNTIsIDIsIDIzMSwgMjM3LCAyNiwgNCwgMSwgMjU0LCAxNTIsIDIsIDIxNCwgCisgICAgMTQsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDI1NCwgMTUyLCAyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDI1NCwgMTUyLCAyLCAKKyAgICAyMjYsIDExNSwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjU0LCAxNTIsIDIsIDIyNSwgMTc4LCAyNiwgNCwgMSwgMjU0LCAKKyAgICAxNTIsIDIsIDIyNSwgMTc5LCAyMiwgMjEwLCAyMTksIDI2LCA2LCAxLCAyNTQsIDE1MiwgMiwgMjEzLCAxMjAsIDI2LCA2LCAKKyAgICAxLCAyNTQsIDE1MiwgMiwgMjMxLCAyMzcsIDI2LCA2LCAxLCAyNTQsIDE1MiwgMiwgMjE0LCAxMywgMjYsIDYsIDEsIDI1NCwgCisgICAgMTUyLCAyLCAyMjYsIDExNCwgMjYsIDYsIDEsIDI1NCwgMTUyLCAyLCAyMjQsIDE3MCwgMjYsIDIzNCwgOCwgMjYsIDIyNCwgCisgICAgMTcwLCAyNiwgMjI0LCAxNTcsIDI2LCAyMjUsIDE3OCwgMjYsIDI0OCwgNCwgMjIsIDIyNSwgMTc4LCAyNiwgNCwgMSwgMjQ1LCAKKyAgICA3MiwgMiwgMjE0LCAxNCwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjQ1LCA3MiwgMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAKKyAgICAyNDUsIDcyLCAyLCAyMjYsIDExNSwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjQ1LCA3MiwgMiwgMjI1LCAxNzgsIDI2LCAKKyAgICA0LCAxLCAyNDUsIDcyLCAyLCAyMjUsIDE3OSwgMjIsIDIxMCwgMjE5LCAyNiwgNiwgMSwgMjQ1LCAxMDksIDIsIDIxNCwgMTMsIAorICAgIDI2LCA2LCAxLCAyNDUsIDEwOSwgMiwgMjI2LCAxMTQsIDI2LCA2LCAxLCAyNDUsIDcyLCAyLCAyMTQsIDEzLCAyNiwgNiwgMSwgCisgICAgMjQ1LCA3MiwgMiwgMjI2LCAxMTQsIDI2LCA2LCAxLCAyNDUsIDcyLCAyLCAyMjQsIDE3MCwgMjYsIDIyNCwgMTU4LCAyMiwgCisgICAgMjE0LCAxMywgMjYsIDIyNCwgMTU4LCAyMiwgMjI2LCAxMTQsIDI2LCAyMjQsIDE1OCwgMjIsIDIyNSwgMTc4LCAyNiwgNCwgCisgICAgMSwgMjM1LCAxOTMsIDIsIDIxMywgMTIwLCAyNiwgNCwgMSwgMjM1LCAxOTMsIDIsIDIzMSwgMjM3LCAyNiwgNCwgMSwgMjM1LCAKKyAgICAxOTMsIDIsIDI0OCwgNCwgMjIsIDIxNCwgMTMsIDI2LCA0LCAxLCAyMzUsIDE5MywgMiwgMjQ4LCA0LCAyMiwgMjI2LCAxMTQsIAorICAgIDI2LCA0LCAxLCAyMzUsIDE5MywgMiwgMjI1LCAxNzgsIDI2LCA0LCAxLCAyMzUsIDE5MywgMiwgMjQ4LCA0LCAyMiwgMjI1LCAKKyAgICAxNzgsIDI2LCA2LCAxLCAyMzUsIDE5MywgMiwgMjEzLCAxMjAsIDI2LCA2LCAxLCAyMzUsIDE5MywgMiwgMjMxLCAyMzcsIAorICAgIDI2LCA2LCAxLCAyMzUsIDE5MywgMiwgMjE0LCAxMywgMjYsIDYsIDEsIDIzNSwgMTkzLCAyLCAyMjYsIDExNCwgMjYsIDI0OCwgCisgICAgMTYyLCAyMiwgMjE0LCAxMywgMjYsIDI0OCwgMTYyLCAyMiwgMjI2LCAxMTQsIDI2LCAyNDgsIDE2MiwgMjIsIDIyNSwgMTc4LCAKKyAgICAyNiwgNCwgMSwgMjE0LCAxNTgsIDIsIDIxMywgMTIwLCAyNiwgNCwgMSwgMjE0LCAxNTgsIDIsIDIzMSwgMjM3LCAyNiwgNCwgCisgICAgMSwgMjE0LCAxNTgsIDIsIDI0OCwgNCwgMjIsIDIxNCwgMTMsIDI2LCA0LCAxLCAyMTQsIDE1OCwgMiwgMjQ4LCA0LCAyMiwgCisgICAgMjI2LCAxMTQsIDI2LCA0LCAxLCAyMjMsIDQxLCAyLCAyMjQsIDE1NywgMjYsIDQsIDEsIDIyMywgNDEsIDIsIDI0OCwgMTYxLCAKKyAgICAyNiwgNCwgMSwgMjE0LCAxNTgsIDIsIDIyNSwgMTc4LCAyNiwgNCwgMSwgMjE0LCAxNTgsIDIsIDI0OCwgNCwgMjIsIDIyNSwgCisgICAgMTc4LCAyNiwgNiwgMSwgMjE0LCAxNTgsIDIsIDIxMywgMTIwLCAyNiwgNiwgMSwgMjE0LCAxNTgsIDIsIDIzMSwgMjM3LCAKKyAgICAyNiwgNiwgMSwgMjE0LCAxNTgsIDIsIDIxNCwgMTMsIDI2LCA2LCAxLCAyMTQsIDE1OCwgMiwgMjI2LCAxMTQsIDI2LCA2LCAKKyAgICAxLCAyMjMsIDQxLCAyLCAyNDgsIDE2MSwgMjYsIDI0OCwgNCwgMjIsIDIxNCwgMTMsIDI2LCAyNDgsIDQsIDIyLCAyMjYsIAorICAgIDExNCwgMjYsIDIxNCwgMTMsIDI2LCA0LCAxLCAyMjYsIDIwNiwgMiwgMjE0LCAxNCwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgCisgICAgMjI2LCAyMDYsIDIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjI2LCAyMDYsIDIsIDIyNiwgMTE1LCAyMiwgMjEwLCAyMTksIDI2LCAKKyAgICA0LCAxLCAyMjYsIDIwNiwgMiwgMjI1LCAxNzgsIDI2LCA0LCAxLCAyMjYsIDIwNiwgMiwgMjI1LCAxNzksIDIyLCAyMTAsIAorICAgIDIxOSwgMjYsIDYsIDEsIDIyNiwgMjA0LCAyLCAyMTQsIDEzLCAyNiwgNiwgMSwgMjI2LCAyMDQsIDIsIDIyNiwgMTE0LCAyNiwgCisgICAgNiwgMSwgMjI2LCAyMDYsIDIsIDIxNCwgMTMsIDI2LCA2LCAxLCAyMjYsIDIwNiwgMiwgMjI2LCAxMTQsIDI2LCA2LCAxLCAKKyAgICAyMjYsIDIwNiwgMiwgMjI0LCAxNzAsIDI2LCAyMjYsIDExNCwgMjYsIDI0OCwgMTYxLCAyNDUsIDE1OSwgMjI0LCAzMCwgCisgICAgMjQ1LCAxNjgsIDIyNCwgMzAsIDI0NSwgMTU5LCAyMTksIDIwLCAyNDUsIDE2OCwgMjE5LCAyMCwgMjE2LCAxNDIsIDIxOSwgCisgICAgMjAsIDI0NCwgMTcsIDIxOSwgMjAsIDIxOSwgMTI1LCAyMTksIDIwLCAyNDQsIDEyMCwgMjE5LCAyMCwgMjI0LCAxNDQsIAorICAgIDIxOSwgMjAsIDIxNiwgMTcxLCAyMTksIDIwLCAyNDIsIDQyLCAyMTksIDIwLCAyMTAsIDg3LCAyMTEsIDI0NSwgMjE5LCAyMCwgCisgICAgMjEwLCA4NywgMjExLCAyNDUsIDIyOCwgNzIsIDIxMCwgODcsIDIxMSwgMjQ1LCAyMzUsIDY5LCAyMzMsIDQ0LCA3OSwgMjIyLCAKKyAgICAyNDYsIDc5LCAyNDAsIDE3NSwgMjI4LCA3MywgMjQwLCAxNzUsIDI0NCwgMTIwLCAyNDgsIDE2NCwgMjQ1LCAxNTksIDI0OCwgCisgICAgMTY0LCAyNDUsIDE2OCwgMjQ4LCAxNjQsIDIwMywgMTMwLCA1MiwgNjcsIDIzMiwgMjE5LCA1MiwgMTIxLCAyMzIsIDIxOSwgCisgICAgNDMsIDIxOSwgMTU3LCAyMjQsIDEsIDc5LCA0NCwgMjE5LCAxNTcsIDIyNCwgMSwgNzksIDIxOSwgMTU3LCAyMzIsIDExNSwgCisgICAgMjI0LCAxLCA3OSwgMjE5LCAxNTcsIDI0MSwgMTcwLCAyMjQsIDEsIDc5LCA0MywgNTIsIDIyNCwgMSwgNzksIDQ0LCA1MiwgCisgICAgMjI0LCAxLCA3OSwgNTIsIDIzMiwgMTE1LCAyMjQsIDEsIDc5LCA1MiwgMjQxLCAxNzAsIDIyNCwgMSwgNzksIDI0OCwgMjEzLCAKKyAgICA1MiwgMjQ4LCAyMTMsIDI1MSwgMTIxLCAyMTUsIDIyMywgMjUxLCAxMjEsIDEyMywgNTksIDIzMywgNjIsIDExMywgNTksIAorICAgIDIzMywgNjIsIDIwMywgMjQ1LCAxNzEsIDI0MCwgMTczLCAyMjUsIDEzLCAyMzIsIDIyMCwgMjIwLCAxMzksIDIyNiwgMTksIAorICAgIDIyMCwgMTM5LCAyMzMsIDQ0LCAyNDUsIDE2NiwgMjIyLCAyNDYsIDI0NSwgMTY2LCAyMjQsIDI0OSwgMjQ3LCAyMDQsIDI0NCwgCisgICAgMjcsIDIzMywgNDQsIDIyNiwgMTIxLCAyMjIsIDI0NiwgMjI2LCAxMjEsIDIyOSwgMTk5LCAyMjgsIDc4LCAyMTksIDIwLCAKKyAgICAyMjUsIDE4NiwgMjMwLCAxOTgsIDUwLCAyMjUsIDE4NiwgMjE2LCAyNDksIDIxNiwgMTQ5LCA1MCwgMjI0LCAxOTMsIDUyLCAKKyAgICAyMjQsIDE5MywgMjE1LCAyMTIsIDIyNCwgMTkzLCAyMjMsIDUyLCAyMjQsIDE5MywgMjIzLCA1MiwgNTIsIDIyNCwgMTkzLCAKKyAgICAyMjMsIDUyLCAyMTUsIDIxMiwgMjI0LCAxOTMsIDI1MCwgMjQ2LCAyMTksIDE1NywgMjMzLCA0OCwgMjU0LCAxMTgsIDIyNCwgCisgICAgMSwgNzksIDIxOSwgMTU3LCAyMjIsIDI1MCwgMjU0LCAxMTgsIDIyNCwgMSwgNzksIDIyMywgMTEwLCA3OSwgNTIsIDI0NSwgCisgICAgMzksIDc5LCAyMzUsIDIwOCwgMjI2LCAxMjMsIDIxNCwgMTgwLCAxMzUsIDIxNiwgMTEyLCAyNTAsIDI0NywgMjM1LCAyMjMsIAorICAgIDIyNSwgMTMsIDI1MywgMjIyLCAyNDAsIDE3NiwgMjUxLCAxMjEsIDI0NCwgMTAsIDIxOSwgOTcsIDQzLCA0MiwgMjUxLCAKKyAgICAxNjYsIDIsIDIyNCwgMTAsIDQ0LCA0MiwgMjUxLCAxNjYsIDIsIDIyNCwgMTAsIDUyLCAyMjQsIDE2LCA3OSwgMjI0LCAxNiwgCisgICAgMjQ1LCAzOSwgNzksIDI0NSwgMzksIDIyNCwgMTYsIDc5LCAyMTYsIDcxLCA1LCAyNDUsIDczLCAyMjMsIDUyLCAyMjUsIDcxLCAKKyAgICA1MCwgODUsIDE0MCwgMjUxLCAxMjEsIDg1LCA5NywgMjUxLCAxMjEsIDEyMSwgMjUzLCAyMjQsIDIyMywgNTIsIDIyMCwgCisgICAgMTUyLCAyNTAsIDksIDIxNCwgMTYzLCAxMTMsIDI1MywgMjIzLCAyNTQsIDE2NywgMjEzLCAxODgsIDI0OSwgMjI1LCAyMzAsIAorICAgIDE4NywgNTAsIDIxNywgMjM1LCAyNDgsIDE2NCwgMjM1LCAyMDAsIDIxNCwgMTgwLCAyNDQsIDYwLCAyMjQsIDE0NCwgNzksIAorICAgIDEzNCwgNTksIDIyNCwgMTQzLCAyMjQsIDI3LCAyMjQsIDE5MywgMjQ0LCAxOSwgNTksIDIyNCwgMTQzLCAyNDQsIDg5LCA1OSwgCisgICAgMjI0LCAxNDMsIDExMywgNTksIDIyNCwgMTQzLCAyNDQsIDE5LCA1OSwgNzksIDI0NiwgMTI2LCAyNDksIDEzOCwgMjE1LCAKKyAgICAyMjIsIDY3LCAyNDQsIDE5LCAyNDcsIDEyNiwgMjMxLCA4NywgMTEsIDIxOSwgMjAsIDIxMSwgMjA5LCAyMzUsIDY5LCAyNDMsIAorICAgIDIzNCwgMjU0LCA2MCwgMjM1LCAxOTgsIDIxNiwgODYsIDIzNSwgMTk4LCAyMjAsIDEzOSwgMjM1LCAxOTgsIDIyNSwgMjUsIAorICAgIDIzMywgNDQsIDIzNSwgMTcxLCAyMjIsIDI0NiwgMjM1LCAxNzEsIDI0NCwgMTAwLCAyMTgsIDkxLCAyMzUsIDE3MSwgMjI0LCAKKyAgICAyNDksIDI0NywgMjA0LCAyMzUsIDE3MSwgMjM1LCAyMzUsIDIxNywgMTgzLCAyMTcsIDI1MiwgMjU1LCAxNCwgMjE3LCAxODMsIAorICAgIDIxNywgMjUyLCAyMzUsIDIzNSwgOSwgMjQ0LCAyOCwgMjIwLCA4MiwgMjU1LCAxNCwgOSwgMjQ0LCAyOCwgMjIwLCA4MiwgCisgICAgMjI5LCAxOTQsIDIxLCAyMjAsIDgzLCAyMjgsIDc0LCAyMSwgMjIwLCA4MywgMjE4LCAyNCwgMjEwLCA4NiwgMjE4LCAyNCwgCisgICAgNywgNCwgMSwgNzQsIDIxOCwgMjQsIDE2MSwgMjE4LCAyNCwgMTkwLCAyMTgsIDI0LCAxOTUsIDIxOCwgMjQsIDE5OSwgMjE4LCAKKyAgICAyNCwgMTk2LCAyMTgsIDI0LCAyMDEsIDIxOCwgMjQsIDk2LCA1MCwgMjE4LCAyNCwgMjMwLCAxODYsIDIxOCwgMjQsIDI0NSwgCisgICAgMTA2LCA1MCwgMjE4LCAyNCwgNDMsIDIyNiwgNywgMjE4LCAyNCwgNDQsIDIyNiwgNywgMjE4LCAyNCwgNywgNCwgMSwgMjMwLCAKKyAgICAzMCwgMjE4LCA2NiwgMjEwLCA4NiwgMjE4LCA2NiwgMTExLCAyMTgsIDY2LCAxMDUsIDIxOCwgNjYsIDE1OCwgMjE4LCA2NiwgCisgICAgMTYxLCAyMTgsIDY2LCAxOTAsIDIxOCwgNjYsIDE5NSwgMjE4LCA2NiwgMTk5LCAyMTgsIDY2LCAxOTYsIDIxOCwgNjYsIAorICAgIDIwMSwgMjE4LCA2NiwgOTYsIDUwLCAyMTgsIDY2LCAyMzAsIDE4NiwgMjE4LCA2NiwgMjQ1LCAxMDYsIDUwLCAyMTgsIDY2LCAKKyAgICA0MywgMjI2LCA3LCAyMTgsIDY2LCA0NCwgMjI2LCA3LCA3LCAyMTgsIDY2LCA0LCAxLCA2MSwgNywgMjE4LCA2NiwgNCwgMSwgCisgICAgNzYsIDcsIDIxOCwgNjYsIDQsIDEsIDc4LCA3LCAyMTgsIDY2LCA0LCAxLCAyMTEsIDE3OCwgNywgMjE4LCA2NiwgNCwgMSwgCisgICAgMjIxLCAxOTcsIDcsIDIxOCwgNjYsIDQsIDEsIDI0MiwgNjcsIDcsIDIxOCwgNjYsIDQsIDEsIDIzNSwgMjksIDcsIDIxOCwgCisgICAgNjYsIDQsIDEsIDE1NiwgNywgMjE4LCA2NiwgNCwgMSwgMTk0LCA3LCAyMTgsIDY2LCA0LCAxLCAyMzAsIDMwLCA3LCAyMTgsIAorICAgIDY2LCA0LCAxLCAyMjYsIDEwOSwgNywgMjE4LCA2NiwgNCwgMSwgMjIyLCA5MywgNywgMjE4LCA2NiwgNCwgMSwgMjE3LCAKKyAgICAxNTMsIDI0NSwgNTQsIDUwLCAyNDksIDIzNSwgNTAsIDI0OSwgMTI1LCA1MCwgMjQ0LCAzLCAyNDQsIDYsIDUwLCAyMzIsIAorICAgIDIwNCwgNTAsIDIzMCwgMTk5LCA1MCwgMjI5LCAyMTUsIDUwLCAyMjUsIDE2NSwgNTAsIDIyMiwgMTIwLCA1MCwgMjExLCAKKyAgICAyMTcsIDUwLCAxNjYsIDIyMCwgNTEsIDUwLCAyNDcsIDEzNSwgNTAsIDI0NSwgNTUsIDUwLCAyMzQsIDgyLCA1MCwgMjE1LCAKKyAgICAxMTMsIDUwLCAyNDYsIDEwOSwgNTAsIDI0MywgNDcsIDIyNSwgMTk2LCA1MCwgMjI1LCAxNjMsIDUwLCAyNDIsIDExNiwgNTAsIAorICAgIDI1MywgMTkwLCA1MCwgMjQwLCAyMzUsIDUwLCAyNTAsIDE5MywgNTAsIDIzMiwgMTk3LCAyMTYsIDQsIDUwLCAyMTksIDIsIAorICAgIDUwLCAyMTYsIDI0NiwgNTAsIDIzNSwgMjQ4LCAyMjIsIDEyMCwgNTAsIDIxNSwgOTcsIDIzMiwgMjA0LCA1MCwgMzgsIDQzLCAKKyAgICAyNDIsIDYsIDQ4LCAzOCwgNDQsIDI0MiwgNiwgNDgsIDM4LCAyMDAsIDY3LCAyMzIsIDIyMCwgMjI2LCAxMjQsIDM4LCAyMTksIAorICAgIDI1MywgNjcsIDIzMiwgMjIwLCAyMjYsIDEyNCwgMzgsIDI1NCwgOTYsIDgwLCA0OCwgMzgsIDI1MCwgMTAsIDgwLCA0OCwgCisgICAgMzgsIDQzLCA4MCwgNDgsIDM4LCA0NCwgODAsIDQ4LCAzOCwgMjIyLCAyMzcsIDIyNiwgMTI0LCAzOCwgMjUwLCAxMCwgMjIyLCAKKyAgICAyMzcsIDIyNiwgMTI0LCAzOCwgMjU0LCA5NiwgMjIyLCAyMzcsIDIyNiwgMTI0LCAzOCwgMTM0LCAxNzAsIDQ4LCAzOCwgCisgICAgMjQ0LCAxOSwgMTcwLCA0OCwgMzgsIDI0NSwgMTU0LCAyNTAsIDQzLCAzOCwgMjQ1LCAxNTQsIDIxOCwgMjM2LCAzOCwgMjQ1LCAKKyAgICAxNTQsIDI0OCwgMCwgMzgsIDI0NSwgMTU0LCAyNTAsIDQ0LCAyNTIsIDE4OCwgMzgsIDQzLCA0NCwgODAsIDQ4LCAzOCwgCisgICAgMjQ1LCAxNTQsIDIyMSwgMTkwLCAzOCwgMjQ1LCAxNTQsIDIzNCwgMTQxLCAzOCwgMjQ1LCAxNTQsIDIxNCwgMTU1LCAyMjUsIAorICAgIDEwLCAyMTUsIDIyNiwgMzgsIDIyMywgNTMsIDIxOSwgNDksIDIyNiwgMTI0LCAzOCwgNTIsIDY3LCAyMTgsIDEwNSwgMjI2LCAKKyAgICAxMjQsIDM4LCAyNTQsIDEwNiwgODcsIDM4LCAyMTUsIDIxMiwgMjE0LCAxODIsIDM4LCAyMTEsIDI0NywgMjUxLCAxNDgsIAorICAgIDQ4LCAzOCwgMTQwLCA4MCwgMjI2LCAxMjQsIDM4LCAyMDAsIDUyLCAyMTksIDQ5LCAyMjYsIDEyNCwgMzgsIDk3LCAyNDIsIAorICAgIDYsIDIsIDI1MiwgMTQ3LCAyNDYsIDExMSwgMzgsIDE0MCwgMjQyLCA2LCAyLCAyNTIsIDE0NywgMjQ2LCAxMTEsIDM4LCA0MywgCisgICAgODAsIDUxLCAzOCwgNDQsIDgwLCA1MSwgMzgsIDI1MywgMjI1LCA0OCwgMjU1LCAyMCwgMjI2LCAyMzUsIDI1NSwgNCwgMjE2LCAKKyAgICA0MywgMjE2LCAxOTcsIDIxOCwgNzUsIDEzOSwgNiwgMjUxLCA3NCwgMjQ4LCA3OSwgMjUwLCAxODYsIDI1MCwgMTgzLCAyMzIsIAorICAgIDIyMCwgODcsIDI1MCwgMjQ4LCAyMjYsIDIzNSwgMjUxLCAzNCwgMjE0LCAxODksIDI0NSwgNTYsIDI0OSwgMTk5LCAyMjEsIAorICAgIDE4NywgMjQ4LCA3OSwgMjQ0LCAxODcsIDExOSwgNCwgMjQzLCAyMDksIDExOSwgNiwgMjQyLCA2NywgMjUxLCAyMjcsIDYsIAorICAgIDI0MiwgNjcsIDEzOSwgNiwgMjQyLCA2NywgMjI1LCA0MCwgMjQ5LCAxOTksIDIyNSwgNDAsIDI0OSwgMjAwLCAxMTUsIDExMywgCisgICAgMjI1LCAxMTEsIDExOSwgNiwgNzQsIDI1MSwgMjI3LCA2LCA3NCwgMTE5LCA2LCAxNTYsIDExOSwgNCwgMTU2LCAyMzMsIAorICAgIDE1NSwgNTcsIDI1MiwgMTQ5LCA4NywgMTM5LCA2LCAyMzAsIDMwLCAyMjcsIDIwMCwgNTAsIDIxOSwgMzMsIDIyMywgMTIyLCAKKyAgICAyNDksIDE3MCwgMTE5LCA2LCAyMjYsIDEwOSwgMTM5LCA2LCAyMjYsIDEwOSwgMTM5LCA2LCAyMjQsIDk5LCAxMTksIDYsIAorICAgIDE1MywgMjUxLCAyMjcsIDYsIDE1MywgMTM5LCA2LCAxNTMsIDIyNCwgMTk5LCAyMTcsIDcyLCAyMjMsIDY1LCAyMjAsIDEzNCwgCisgICAgNzksIDIxNywgMiwgNTAsIDIxNSwgMjU0LCAxNjQsIDUwLCAyMTMsIDI0MCwgMTM5LCA2LCAyMTAsIDE1OSwgMjI2LCAxMzcsIAorICAgIDUwLCAyMjYsIDIyNSwgNTAsIDIzNSwgMjAwLCAyMjYsIDIyNSwgNTAsIDI1MSwgMjI3LCA2LCAyMTAsIDE1OSwgMjE1LCA5NCwgCisgICAgMjYsIDQsIDEsIDIzNSwgMTkyLCAyMzQsIDE3OSwgNTAsIDI1NCwgMTE1LCA1MCwgMTE5LCA2LCAyNTMsIDE2NiwgMjUxLCAKKyAgICAyMjcsIDYsIDI1MSwgNzQsIDI0NSwgNzYsIDg3LCAxMTksIDQsIDc2LCAxMTksIDYsIDc2LCAxMTksIDYsIDI0NSwgMTQsIAorICAgIDIxNSwgOTQsIDYsIDI0NSwgMTQsIDExOSwgNiwgMTk0LCAxMTksIDQsIDc4LCAxMDksIDg3LCAyNTIsIDM3LCA4NywgMjQyLCAKKyAgICAyMDksIDg3LCAyNDgsIDE5OCwgODcsIDIzNSwgMjM5LCAyMTksIDMxLCAyMjIsIDE4OSwgNiwgMjI0LCA5OSwgMjQ0LCAxOTAsIAorICAgIDUwLCAxMzksIDQsIDIyNSwgMTExLCAxMzksIDQsIDI0MywgMTE0LCAxMzksIDYsIDI0MywgMTE0LCAxMzksIDYsIDIyNSwgCisgICAgMTExLCAxMzksIDIzMCwgMjksIDIxOCwgNDEsIDIxNSwgOTQsIDM1LCA2LCAyNDMsIDIwOSwgMjE1LCA5NCwgMzUsIDYsIAorICAgIDE1NiwgMjIzLCA1MiwgMzUsIDYsIDE1NiwgMjE1LCA5NCwgMzUsIDYsIDIxMSwgMTE3LCAxMzksIDMyLCA2LCAyNDksIDY4LCAKKyAgICAxMzksIDMyLCA0LCAyNDksIDY4LCAxMzksIDMyLCA0LCA3NiwgMTM5LCAzMiwgNCwgNzQsIDEzOSwgMzIsIDQsIDIzNSwgCisgICAgMTUwLCAyMjQsIDE3MywgMjMyLCAyMTksIDIxNSwgOTQsIDI1NCwgMTM0LCAyMjUsIDE4NiwgNTAsIDI1NCwgMTg5LCAyMTUsIAorICAgIDk0LCA0LCAyNDUsIDE0LCAxNiwgMzEsIDIyMSwgMjU0LCAyMTksIDMxLCAyMTIsIDExNCwgMjQ0LCAxMCwgMTIzLCAyMjAsIAorICAgIDEyMCwgMjEyLCAxMTQsIDI0NCwgMTAsIDEyMywgMjI4LCAxOTksIDIxMiwgMTE0LCAyNDQsIDEwLCAxMjMsIDIxNiwgMjQyLCAKKyAgICAyMTIsIDExNCwgMjQ0LCAxMCwgMTIzLCAyMTYsIDE2OSwgMjEyLCAxMTQsIDI0NCwgMTAsIDExMywgMjE2LCAxNjcsIDIxMiwgCisgICAgMTE0LCAyNDQsIDEwLCAxMjMsIDI0NCwgMTI1LCAyMTIsIDExNCwgMjQ0LCAxMCwgMTEzLCAyNDQsIDEyNCwgMjEyLCAxMTQsIAorICAgIDI0NCwgMTAsIDEzNCwgMjQ0LCAxMjQsIDIxMiwgMTE0LCAyNDQsIDEwLCAyNDQsIDE5LCAyNDQsIDEyNCwgMjEyLCAxMTQsIAorICAgIDI0NCwgMTAsIDEyMywgMjE5LCAxMTcsIDIxMiwgMTE0LCAyNDQsIDEwLCAyNDQsIDg5LCAyMTksIDExNSwgMjEyLCAxMTQsIAorICAgIDI0NCwgMTAsIDEyMywgMjQ1LCAxOTYsIDIxMiwgMTE0LCAyNDQsIDEwLCAxMzQsIDI0NSwgMTk0LCAyMTIsIDExNCwgMjQ0LCAKKyAgICAxMCwgMjQ0LCA4OSwgMjQ1LCAxOTQsIDIxMiwgMTE0LCAyNDQsIDEwLCAyMjAsIDEyNCwgMjQ1LCAxOTQsIDI0NCwgMTAsIAorICAgIDIyNywgMjAxLCAxMTEsIDIyMiwgMjAwLCAyMjcsIDIwMiwgMTExLCAyMjIsIDIwMCwgMjI3LCAyMDIsIDEwNSwgMjIyLCAKKyAgICAyMDAsIDIyNywgMjAyLCAxNTgsIDIyMiwgMjAwLCAyMjcsIDIwMiwgMTYxLCAyMjIsIDIwMCwgMjI3LCAyMDIsIDE5MCwgCisgICAgMjIyLCAyMDAsIDIyNywgMjAyLCAxOTUsIDIyMiwgMjAwLCAyMjcsIDIwMiwgMTk5LCAyMjIsIDIwMCwgMjI3LCAyMDIsIAorICAgIDE5NiwgMjIyLCAyMDAsIDIyNywgMjAyLCAyMDEsIDIyMiwgMjAwLCAyMjcsIDIwMiwgMjE2LCAyNDgsIDIyMiwgMjAwLCAKKyAgICAyMjcsIDIwMiwgMjQ1LCAxNzUsIDIyMiwgMjAwLCAyMjcsIDIwMiwgMjE1LCA3NiwgMjIyLCAyMDAsIDIyNywgMjAyLCAyNDQsIAorICAgIDEyMiwgMjIyLCAyMDAsIDIyNywgMjAyLCAxMjMsIDI0MCwgMjE3LCAyMjIsIDIwMCwgMjI3LCAyMDIsIDI0NCwgODksIDI0MCwgCisgICAgMjE3LCAyMjIsIDIwMCwgMjI3LCAyMDIsIDEyMywgMjE2LCAxNDgsIDQsIDIyMiwgMjAwLCAyMjcsIDIwMiwgMTExLCA0LCAKKyAgICAyMjIsIDIwMCwgMjI3LCAyMDIsIDEwNSwgNCwgMjIyLCAyMDAsIDIyNywgMjAyLCAxNTgsIDQsIDIyMiwgMjAwLCAyMjcsIAorICAgIDIwMiwgMTYxLCA0LCAyMjIsIDIwMCwgMjI3LCAyMDIsIDE5MCwgNCwgMjIyLCAyMDAsIDIyNywgMjAyLCAxOTUsIDQsIDIyMiwgCisgICAgMjAwLCAyMjcsIDIwMiwgMTk5LCA0LCAyMjIsIDIwMCwgMjI3LCAyMDIsIDE5NiwgNCwgMjIyLCAyMDAsIDIyNywgMjAyLCAKKyAgICAyMDEsIDQsIDIyMiwgMjAwLCAyMjcsIDIwMiwgMjE2LCAyNDgsIDQsIDIyMiwgMjAwLCAyMjcsIDIwMiwgMjQ1LCAxNzUsIDQsIAorICAgIDIyMiwgMjAwLCAyMjcsIDIwMiwgMjE1LCA3NiwgNCwgMjIyLCAyMDAsIDIyNywgMjAyLCAyNDQsIDEyMiwgNCwgMjIyLCAKKyAgICAyMDAsIDIyNywgMjAyLCAxMjMsIDI0MCwgMjE3LCA0LCAyMjIsIDIwMCwgMjI3LCAyMDIsIDI0NCwgODksIDI0MCwgMjE3LCAKKyAgICA0LCAyMjIsIDIwMCwgMjI3LCAyMDIsIDEyMywgMjE2LCAxNDgsIDIyMiwgMjAwLCAyMjcsIDIwMiwgMTIzLCAyMTYsIDE0OSwgCisgICAgMjUxLCA3NSwgMjQ5LCA2OCwgMjIyLCAyMDAsIDIyNywgMjAyLCAyNDQsIDg5LCAyMTYsIDE0OCwgMjIyLCAyMDAsIDIyNywgCisgICAgMjAyLCAyMTYsIDI0OSwgMjE2LCAxNDgsIDIyMiwgMjAwLCAyMjcsIDIwMiwgMjIzLCA1MiwgMTIzLCAyNDAsIDIxNywgNywgCisgICAgNCwgMSwgMjIzLCA1MiwgMjUxLCA3NCwgMjIyLCAyMDAsIDIyNywgMjAyLCAyMTksIDEyNywgMjMzLCA4NCwgMTcsIDIyMiwgCisgICAgMjAwLCAyMjcsIDIwMiwgMjQ0LCAxMjMsIDI0NSwgMjM0LCAxNywgMjIyLCAyMDAsIDIyNywgMjAyLCAyNDQsIDEyMywgMjE2LCAKKyAgICAxNDgsIDIyMiwgMjAwLCAyMjcsIDIwMiwgMTIzLCAyNDAsIDIxOCwgMjE2LCAxNDgsIDIxMiwgMTE0LCAyNDQsIDEwLCAyMTAsIAorICAgIDg3LCAyMTYsIDE2NywgMTQwLCA3NSwgMjE0LCAxNTMsIDc1LCA5NywgNzUsIDI0NiwgMTEyLCA3NSwgNDMsIDQ0LCA3NSwgCisgICAgMTIwLCAxMjQsIDc1LCAyMjgsIDYxLCAyMTIsIDksIDc1LCAyMjgsIDYxLCAyNDUsIDIyOCwgNzUsIDIxOSwgMzAsIDI0NSwgCisgICAgMjI4LCA3NSwgMjE5LCAzMCwgMjEyLCA5LCA3NSwgMTQwLCA4MCwgMiwgOTEsIDk3LCA4MCwgMiwgOTEsIDE0MCwgMjEyLCAKKyAgICAzNiwgNzUsIDk3LCAyMTIsIDM2LCA3NSwgMTQwLCAxMTMsIDI0MSwgMjQxLCA3NSwgMjE0LCAxNTMsIDExMywgMjQxLCAyNDEsIAorICAgIDc1LCA5NywgMTEzLCAyNDEsIDI0MSwgNzUsIDI0NiwgMTEyLCAxMTMsIDI0MSwgMjQxLCA3NSwgMTQwLCA4MCwgMiwgMjE3LCAKKyAgICA3OCwgOTcsIDgwLCAyLCAyMTcsIDc4LCAxNDAsIDgwLCAyNDMsIDI1MSwgMTMwLCAyMTQsIDE1MywgODAsIDI0MywgMjUxLCAKKyAgICAxMzAsIDk3LCA4MCwgMjQzLCAyNTEsIDEzMCwgMjQ2LCAxMTIsIDgwLCAyNDMsIDI1MSwgMTMwLCAxMjAsIDEyNCwgODAsIDIsIAorICAgIDI1MiwgMTM1LCAxNDAsIDgwLCAyLCAxMDMsIDk3LCA4MCwgMiwgMTAzLCAxNDAsIDgwLCAyLCAyMzIsIDEyOSwgOTcsIDgwLCAKKyAgICAyLCAyMzIsIDEyOSwgNDMsIDQ0LCAyMTIsIDM2LCA3NSwgNDMsIDQ0LCA4MCwgMiwgOTEsIDI0NiwgMTEyLCAyMTAsIDM1LCAKKyAgICA3NSwgMjE0LCAxNTMsIDgwLCAyLCAyMTYsIDc4LCAyMzMsIDQzLCAyMTQsIDE1MywgODAsIDIsIDIxNiwgNzgsIDIyMiwgCisgICAgMjQ0LCAyNDYsIDExMiwgODAsIDIsIDIxNiwgNzgsIDIzMywgNDMsIDI0NiwgMTEyLCA4MCwgMiwgMjE2LCA3OCwgMjIyLCAKKyAgICAyNDQsIDk3LCA4MCwgMiwgMjQ5LCAxNjksIDI0NiwgMTExLCAyNDYsIDExMiwgODAsIDIsIDI0OSwgMTY5LCAyMzMsIDQzLCAKKyAgICAyNTQsIDk2LCAyMTYsIDE1LCAyMjAsIDE1NSwgNzUsIDI1MCwgMTAsIDIxNiwgMTUsIDIyMCwgMTU1LCA3NSwgMjI4LCA2MSwgCisgICAgMjEyLCA5LCA4MCwgMjE2LCA0MywgMjAwLCAxMzAsIDE0MCwgODAsIDIxNiwgNDMsIDI1MiwgMTQ5LCAxMTUsIDk3LCA4MCwgCisgICAgMjE2LCA0MywgMTMwLCAyNTQsIDk2LCAyMDQsIDI1MCwgNDQsIDc1LCAyNTAsIDEwLCAyMDQsIDI1MCwgNDQsIDc1LCAxNDAsIAorICAgIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDIxNCwgMTUyLCAxNDAsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDI0NiwgMTExLCAyMTQsIAorICAgIDE1MywgMjQyLCA2LCAyLCAyNTIsIDE0NywgMjIyLCAyNDQsIDIxNCwgMTUzLCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAyMzMsIAorICAgIDQzLCA5NywgMjQyLCA2LCAyLCAyNTIsIDE0NywgMjE0LCAxNTIsIDk3LCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAyNDYsIDExMSwgCisgICAgMjQ2LCAxMTIsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDIyMiwgMjQ0LCAyNDYsIDExMiwgMjQyLCA2LCAyLCAyNTIsIDE0NywgCisgICAgMjMzLCA0MywgOTcsIDgwLCAxMTUsIDE0MCwgNzUsIDIxNCwgMTUzLCA4MCwgMTQwLCA2NCwgMjQ2LCAxMTIsIDc1LCAxNDAsIAorICAgIDgwLCAxMTUsIDk3LCA3NSwgMTQwLCAyMjYsIDc0LCAyNTMsIDI1NSwgMjE0LCAxNTMsIDIyNiwgNzQsIDI1MywgMjU1LCA5NywgCisgICAgMjI2LCA3NCwgMjUzLCAyNTUsIDI0NiwgMTEyLCAyMjYsIDc0LCAyNTMsIDI1NSwgMTQwLCAyNDIsIDYsIDExNSwgOTcsIAorICAgIDI0MiwgNSwgOTcsIDI0MiwgNiwgMTE1LCAxNDAsIDI0MiwgNSwgMTQwLCA1MiwgODAsIDIsIDkxLCA0MywgNDQsIDUyLCA4MCwgCisgICAgMiwgOTEsIDk3LCA1MiwgODAsIDIsIDkxLCAxNDAsIDUyLCA3NSwgMjE0LCAxNTMsIDUyLCA3NSwgOTcsIDUyLCA3NSwgMjQ2LCAKKyAgICAxMTIsIDUyLCA3NSwgNDMsIDQ0LCA1MiwgNzUsIDEyMCwgMTI0LCA1MiwgNzUsIDIyOCwgNjEsIDIxMiwgOSwgNTIsIDc1LCAKKyAgICAyMjgsIDYxLCAyNDUsIDIyOCwgNTIsIDc1LCAyMTksIDMwLCAyNDUsIDIyOCwgNTIsIDc1LCAyMTksIDMwLCAyMTIsIDksIAorICAgIDUyLCA3NSwgMTQwLCAyMTUsIDIxMiwgNzUsIDk3LCAyMTUsIDIxMiwgNzUsIDE0MCwgMjE4LCAyMzIsIDc1LCA5NywgMjE4LCAKKyAgICAyMzIsIDc1LCAyMTQsIDE1MywgODAsIDIsIDUyLCA5MSwgMjQ2LCAxMTIsIDgwLCAyLCA1MiwgOTEsIDE0MCwgMjQ4LCAxNjMsIAorICAgIDc1LCAyMTQsIDE1MywgMjQ4LCAxNjMsIDc1LCA5NywgMjQ4LCAxNjMsIDc1LCAyNDYsIDExMiwgMjQ4LCAxNjMsIDc1LCAKKyAgICAxNDAsIDgwLCAyMTYsIDQzLCAxMzAsIDk3LCA4MCwgMjE2LCA0MywgMTMwLCAxNDAsIDcxLCA3NSwgMjE0LCAxNTMsIDcxLCAKKyAgICA3NSwgOTcsIDcxLCA3NSwgMjQ2LCAxMTIsIDcxLCA3NSwgMjE0LCAxNTMsIDcxLCA4MCwgMjQzLCAyNTEsIDEzMCwgMjE0LCAKKyAgICAxNTMsIDcxLCA4MCwgMjI2LCAyMDEsIDIyNSwgMjE3LCAyMTQsIDE1MywgNzEsIDgwLCAyMjYsIDIwMSwgMjI1LCAyMTgsIDIsIAorICAgIDIwMywgMTMwLCAyMTQsIDE1MywgNzEsIDgwLCAyMjYsIDIwMSwgMjI1LCAyMTgsIDIsIDY3LCAxMzAsIDIxNCwgMTUzLCA3MSwgCisgICAgNTIsIDc1LCAyMTQsIDE1MywgNzEsIDUyLCA4MCwgMjI2LCAyMDEsIDIyNSwgMjE3LCA5NywgNzEsIDgwLCAyNDMsIDI1MSwgCisgICAgMjEyLCA1NiwgMjI4LCA2MSwgMjEyLCA5LCA4MCwgMjE2LCA0MywgMjQ5LCAxNjgsIDIxOSwgMzAsIDI0NSwgMjI4LCA4MCwgCisgICAgMjE2LCA0MywgMjQ5LCAxNjgsIDEyMCwgMTI0LCA3MSwgNzUsIDQ0LCA4MCwgMiwgNCwgMjUwLCA0MywgMjQ2LCAxMTIsIDgwLCAKKyAgICAxNDAsIDY0LCAyMTQsIDE1MywgNzUsIDEzNCwgOTcsIDI1MywgMjU1LCAxNDAsIDgwLCAyLCA2NywgOTEsIDk3LCA4MCwgMiwgCisgICAgNjcsIDkxLCA0MywgNDQsIDgwLCAyLCA2NywgOTEsIDE0MCwgODAsIDIsIDUyLCA2NywgOTEsIDk3LCA4MCwgMiwgNTIsIDY3LCAKKyAgICA5MSwgNDMsIDQ0LCA4MCwgMiwgNTIsIDY3LCA5MSwgMTQwLCAyMjYsIDE3NywgNzUsIDk3LCAyMjYsIDE3NywgNzUsIDQzLCAKKyAgICA0NCwgMjI2LCAxNzcsIDc1LCAzMSwgMjU0LCAxNjMsIDI0OSwgMjIyLCAyMjYsIDEsIDI0NywgMjQxLCAyMTYsIDE4OCwgCisgICAgMjQ1LCAzNSwgMjE2LCAxODgsIDI0NywgMTQ2LCAyMjgsIDU3LCAyNDUsIDM2LCAyNDUsIDE2MCwgMjIwLCAxMjksIDIzNSwgCisgICAgMjUyLCAyMjksIDIyNiwgMjQ1LCAxNzgsIDIyNiwgMjM1LCAyMjgsIDU3LCAyNTQsIDEzMiwgMjQ1LCAxNzgsIDIyNiwgMjM1LCAKKyAgICA0LCAyNDUsIDE3OCwgMjI2LCAyMzUsIDI0OSwgMTk0LCAyNTMsIDI0NiwgMjMxLCA2NywgMjQ3LCAxNDYsIDIyOCwgNTcsIAorICAgIDI0OSwgMTk2LCAyNTMsIDI0NiwgMjMxLCA2NywgNCwgMjQ5LCAxOTQsIDI1MywgMjQ2LCAyMzEsIDY3LCAyNDUsIDE1MSwgCisgICAgNjQsIDIyNCwgMTc1LCAyMzAsIDI5LCAyMjQsIDE4MywgMjMwLCAyOSwgMjQ5LCAxNzMsIDIzMCwgMjksIDIxOCwgNDEsIAorICAgIDIzMCwgMTg3LCA1MCwgMjMwLCAxODUsIDUwLCA1OSwgMjI1LCAyNSwgMjQ3LCAxNzcsIDIxOSwgOTcsIDIyMCwgMTMwLCAKKyAgICAyMzAsIDE4NiwgMjUzLCAyMjUsIDIyNiwgMTcxLCAyMjIsIDIzNywgMjI2LCAxNzEsIDI1MSwgMTIyLCAyMjYsIDE3MSwgNDIsIAorICAgIDIyMiwgMTk1LCAyNDksIDExNywgMjIyLCAxOTUsIDI0NCwgMTIsIDIyMiwgMTk1LCAyMjQsIDE3MSwgMTEyLCAyMzUsIDI0MSwgCisgICAgNDQsIDI1NCwgMTE3LCAyNTQsIDExNywgMjMxLCA5MywgMjU0LCAxMTcsIDIxOSwgMSwgMjU0LCAxMTcsIDI0NywgMTc5LCAKKyAgICAyNDcsIDE0NiwgMjI4LCA1NywgMjQ3LCAxODIsIDIyNiwgMTIsIDExMiwgMjI4LCA1NywgMjI2LCAxMiwgMTEyLCAyMzIsIAorICAgIDE1MiwgMjU0LCAxMjYsIDIzMiwgMTUyLCAyMjYsIDE2MiwgMjM1LCAyMDUsIDIxNCwgMTc1LCAyMzUsIDIxOCwgNTIsIDIzNSwgCisgICAgMjE4LCAyMTUsIDIxMiwgMjM1LCAyMTgsIDI0OSwgMTkwLCAyMzUsIDIxOCwgMjE4LCAxNCwgMjM1LCAyMTgsIDIxMywgMTI5LCAKKyAgICAyMzUsIDIxOCwgMjUwLCAxMCwgMjM1LCAyMTgsIDI1MCwgMTAsIDI0OSwgMTkwLCAyMzUsIDIxOCwgMjU0LCA5NiwgMjQ5LCAKKyAgICAxOTAsIDIzNSwgMjE4LCAyMTYsIDE4NywgMjUyLCA3NSwgMjIzLCAxNDAsIDIyNCwgMTcyLCA1OSwgMjMwLCAxODYsIDI0NSwgCisgICAgNDEsIDI0MywgNTMsIDIyNCwgMTcyLCAyNDEsIDY0LCAyMTYsIDkwLCAyMjYsIDE3MSwgMjIzLCA1MiwgMTg0LCAyMzUsIAorICAgIDIwMCwgMjMzLCA3MSwgMjIyLCA5MywgMjE5LCAxNTksIDIxMiwgMzUsIDIxMSwgMjAwLCAyMjQsIDE4MywgMjI4LCA1NywgCisgICAgMTg0LCAyMzAsIDE4NywgMTg0LCAyNTMsIDIxOCwgMTI4LCAxMTIsIDIyOCwgNTcsIDI1MywgMjE4LCAxMjgsIDExMiwgMjU0LCAKKyAgICA1NiwgMTI4LCAxMTIsIDI1NCwgNTYsIDI1MSwgOTYsIDIyOCwgNTcsIDI1NSwgMTMsIDEyOCwgMTEyLCAyMjksIDEwNSwgCisgICAgMjU0LCA1NiwgMjI4LCA2NCwgMjU1LCAxMywgMTI4LCAxMTIsIDI1NCwgMTU2LCAxMjgsIDExMiwgMjI4LCA1NywgMjU0LCAKKyAgICAxNTYsIDEyOCwgMTEyLCAyNTQsIDE1NiwgMTI4LCAxNzcsIDEyOCwgMTEyLCAyMTUsIDIxMiwgMTg0LCAyNTQsIDE2NCwgCisgICAgMTI4LCAxMTIsIDI0NSwgMTAyLCAxMTIsIDI0MywgNTIsIDI0NSwgMTAyLCAxMTIsIDI0NywgMjQyLCAyNTIsIDMxLCAyNTQsIAorICAgIDU4LCAyMTYsIDE5NywgMjMyLCAyMjcsIDI0MywgNTIsIDEyOCwgMTEyLCAyNTQsIDU2LCAxMjgsIDIxNiwgNDMsIDE3NywgCisgICAgMjE2LCAxOTcsIDIzNiwgMjIsIDIyNiwgMjM1LCAyMzYsIDIyLCA2NCwgMTc3LCAyNTQsIDU2LCAxMjgsIDExMiwgMjQ5LCAKKyAgICAyMzUsIDI0NSwgMTA1LCAyNDUsIDEwNiwgMjQ5LCAyMzQsIDIyMiwgMjM3LCAyMzYsIDcsIDEyOCwgMTEyLCAyMjIsIDIzNywgCisgICAgMTI4LCAxMTIsIDI0OSwgMTYyLCAxMTIsIDI0NSwgNzUsIDI0NSwgMTA0LCAxMTIsIDIxOCwgMTU5LCAyNDUsIDEwNSwgMjQ4LCAKKyAgICA2MywgMTI4LCAxMTIsIDEyOCwgMjE2LCA0MywgMjUxLCA4NiwgMjQ4LCA4MCwgMjMxLCA5MywgMjUxLCA4NSwgMjI0LCAxNCwgCisgICAgMTI4LCAxMTIsIDIyOCwgNTcsIDEyOCwgMTEyLCAyNDAsIDExMSwgMTEyLCAyMjgsIDU3LCAyNDAsIDExMSwgMTEyLCAyMTgsIAorICAgIDExMSwgMjQ1LCAxMDIsIDExMiwgMjMzLCAyMSwgMTc3LCAxMjgsIDExMiwgMjQyLCAxMzcsIDE3NywgMTI4LCAxMTIsIDIzMywgCisgICAgMjEsIDExNSwgMTI4LCAxMTIsIDI0MiwgMTM3LCAxMTUsIDEyOCwgMTEyLCAyMzMsIDIxLCAyNTEsIDk2LCAyMjgsIDU3LCAKKyAgICAxMjgsIDExMiwgMjQyLCAxMzcsIDI1MSwgOTYsIDIyOCwgNTcsIDEyOCwgMTEyLCAyMzAsIDEwMiwgMjMzLCAyMCwgMjMwLCAKKyAgICAxMDIsIDI0MiwgMTM2LCAyNTIsIDMxLCAyMjgsIDU3LCAyNDUsIDEwMiwgMTEyLCAyMjgsIDU3LCAyMzMsIDIwLCAyMjgsIAorICAgIDU3LCAyNDIsIDEzNiwgMjI5LCAxMDUsIDIzMywgMjEsIDIyOCwgNjQsIDEyOCwgMTEyLCAyMjksIDEwNSwgMjQyLCAxMzcsIAorICAgIDIyOCwgNjQsIDEyOCwgMTEyLCAyMzMsIDIxLCAxNzcsIDI0NSwgMTAyLCAxMTIsIDI0MiwgMTM3LCAxNzcsIDI0NSwgMTAyLCAKKyAgICAxMTIsIDIyOSwgMTA1LCAyMzMsIDIxLCAyMjgsIDY0LCAyNDUsIDEwMiwgMTEyLCAyMjksIDEwNSwgMjQyLCAxMzcsIDIyOCwgCisgICAgNjQsIDI0NSwgMTAyLCAxMTIsIDIzMywgMjEsIDE3NywgMjQyLCAxMzYsIDI0MiwgMTM3LCAxNzcsIDIzMywgMjAsIDIyOSwgCisgICAgMTA1LCAyMzMsIDIxLCAyMjgsIDY0LCAyNDIsIDEzNiwgMjI5LCAxMDUsIDI0MiwgMTM3LCAyMjgsIDY0LCAyMzMsIDIwLCAKKyAgICAyMjQsIDIwNSwgMjE4LCA1NiwgMjI0LCAyMDYsIDE3NywgMTI4LCAxMTIsIDIxOCwgNTcsIDE3NywgMTI4LCAxMTIsIDIyNCwgCisgICAgMjA2LCAxNzcsIDI0NSwgMTAyLCAxMTIsIDIxOCwgNTcsIDE3NywgMjQ1LCAxMDIsIDExMiwgMjQ3LCAxNDYsIDIyOCwgNTcsIAorICAgIDIyNCwgMjA4LCAyNDcsIDE0NiwgMjI4LCA1NywgMjE4LCA1OCwgMjE4LCA2NSwgMjI2LCAyMzUsIDIxOCwgMjMsIDIyNiwgCisgICAgMjM1LCAyMjgsIDU3LCAxMTYsIDIxOCwgNjUsIDIyNiwgMjM1LCAyMjgsIDU3LCAxMTYsIDIxOCwgMjMsIDIyNiwgMjM1LCAKKyAgICAyMTgsIDY1LCA2NCwgMTc3LCAxMjgsIDExMiwgMjE4LCAyMywgNjQsIDE3NywgMTI4LCAxMTIsIDIyOSwgMTA1LCAxMTYsIAorICAgIDIxOCwgNjUsIDY0LCAyMjgsIDY0LCAxMjgsIDExMiwgMjI5LCAxMDUsIDExNiwgMjE4LCAyMywgNjQsIDIyOCwgNjQsIDEyOCwgCisgICAgMTEyLCAyMTgsIDY1LCA2NCwgMiwgMjI4LCA1NywgMTI4LCAxMTIsIDIxOCwgMjMsIDY0LCAyLCAyMjgsIDU3LCAxMjgsIAorICAgIDExMiwgMjMwLCA4NiwgMjMwLCA4NywgMjMwLCA4OCwgMjMwLCA4NywgMjE0LCAxNzUsIDQyLCAyMzYsIDIyLCAyMjYsIDIzNSwgCisgICAgNDIsIDIyNiwgMTU0LCAyMjYsIDIzNSwgNDIsIDIzNiwgMjIsIDY0LCAxNzcsIDEyOCwgMTEyLCA0MiwgMjI2LCAxNTQsIDY0LCAKKyAgICAxNzcsIDEyOCwgMTEyLCA0MiwgMjUxLCAzLCA0MiwgMjQ5LCAxMTAsIDM3LCAyMjUsIDI1LCAzNywgMjMwLCAxODYsIDM3LCAKKyAgICAyMTYsIDg2LCAzNywgMjQ3LCAxNzcsIDIxOSwgOTcsIDM3LCA1OSwgMjI2LCAxNzEsIDM3LCAyMjIsIDIzNywgMjI2LCAxNzEsIAorICAgIDM3LCAyNTMsIDIyNSwgMjI2LCAxNzEsIDM3LCAyNDUsIDEwNSwgMzcsIDI0OCwgMTY0LCA5MiwgMjI1LCAyNSwgOTIsIDIzMCwgCisgICAgMTg2LCA5MiwgMjE2LCA4NiwgOTIsIDU5LCAyMjYsIDE3MSwgNDQsIDIxNywgODgsIDQzLCAyMTcsIDg4LCAxMjQsIDIxNywgCisgICAgODgsIDEyMCwgMjE3LCA4OCwgMjUzLCAyMjgsIDIzMCwgMTYxLCAyMTUsIDE5MiwgMjQ0LCAzMywgMjE1LCAyMTIsIDY3LCAKKyAgICAyNTIsIDE0OSwgNDQsIDIxNSwgOTMsIDUyLCA2NywgMjUyLCAxNDksIDUyLCA0NCwgMjE1LCA5MywgMjQ3LCAxNDYsIDIyOCwgCisgICAgNTcsIDIyNCwgMTY2LCAyMjgsIDU3LCAyMTUsIDE5MiwgMjQ3LCAxNDYsIDIyOCwgNTcsIDI0NCwgMzQsIDIyOSwgMTA3LCAKKyAgICA1MiwgNjcsIDI1MiwgMTQ5LCA1MiwgNDQsIDIxNSwgOTMsIDIyNCwgMjA2LCAyMTQsIDE4NCwgMjIzLCA5NCwgMjE4LCA1NywgCisgICAgMjE0LCAxODQsIDIyMywgOTQsIDIyOCwgNjIsIDIxOCwgNzgsIDIyNiwgMjM1LCAyNDksIDE5NCwgMjUzLCAyNDYsIDIyOCwgCisgICAgNjIsIDIxOCwgNzcsIDIyOCwgNjIsIDIxOCwgNzgsIDY0LCAxNzcsIDEyOCwgMTEyLCAyNDksIDE5NCwgMjUzLCAyNDYsIAorICAgIDIyOCwgNjIsIDIxOCwgNzgsIDE3NywgMTI4LCAxMTIsIDIyNiwgMTU0LCAyMjYsIDIzNSwgMjM2LCAyMiwgMjI2LCAyMzUsIAorICAgIDIzMCwgOTIsIDI0MSwgMjA3LCAyNDksIDIwNCwgMjMxLCAxNDIsIDIzNSwgMjE1LCAyMTEsIDE0NSwgMjI5LCAyMDcsIDIyOCwgCisgICAgNjMsIDQ0LCAyNTQsIDExOCwgMiwgMjU0LCAzMywgNDQsIDIxNSwgMjI2LCAyMzAsIDI5LCAyMzIsIDE1MiwgMjU0LCAxMjYsIAorICAgIDIzMCwgMjksIDIzMiwgMTUyLCAyMjYsIDE2MiwgMjMwLCAyOSwgMjM1LCAyMDUsIDIzMCwgMjksIDIxNCwgMTc1LCAyNDgsIAorICAgIDEsIDIyNiwgMTcxLCA1OSwgMjI2LCAxNzEsIDIxOCwgMTU5LCAyMjYsIDE3MSwgMjQ3LCAxNzcsIDIxNiwgODYsIDI1MSwgCisgICAgMTcyLCA0MywgMjI4LCA2MiwgMjQ0LCAxODksIDIyMCwgMTUxLCAyMjQsIDE4MywgNDQsIDIyOCwgNjIsIDI0NCwgMTg5LCAKKyAgICAyMjAsIDE1MSwgMjI0LCAxODMsIDQzLCAyMjAsIDE1MSwgMjI0LCAxODMsIDQ0LCAyMjAsIDE1MSwgMjI0LCAxODMsIDIyMywgCisgICAgNTIsIDIxNiwgOTAsIDI0NSwgMTA1LCAyNDksIDEwNywgMjMyLCAxNTIsIDIyNiwgMTYyLCAyNDksIDEwNywgMjMyLCAxNTIsIAorICAgIDI1NCwgMTI2LCA1MiwgMjE4LCA2NCwgNTIsIDIxOCwgMjIsIDUyLCAyMzUsIDIwNSwgNTIsIDIxNCwgMTc1LCAyMjUsIDUwLCAKKyAgICAxMjgsIDIyLCAyMjYsIDEyLCAxMTIsIDIzMywgMjEsIDIsIDI0NywgMTI4LCAyNDIsIDEzNywgMiwgMjQ3LCAxMjgsIDIxMywgCisgICAgMTg3LCAyMzAsIDEwMiwgMjMzLCAyMCwgMjEzLCAxODcsIDIzMCwgMTAyLCAyNDIsIDEzNiwgMjMzLCAyMSwgMTI4LCAyMTYsIAorICAgIDQzLCAxNzcsIDI0MiwgMTM2LCAyNDIsIDEzNywgMTI4LCAyMTYsIDQzLCAxNzcsIDIzMywgMjAsIDEyOCwgMjE2LCA0MywgCisgICAgMTc3LCAyMzMsIDIwLCAxMjgsIDIxNiwgNDMsIDE3NywgMjQyLCAxMzYsIDEyOCwgMjE2LCA0MywgMTc3LCAyMjQsIDIwNSwgCisgICAgMTI4LCAyMTYsIDQzLCAxNzcsIDIxOCwgNTYsIDI0NywgMTQ2LCAyMjgsIDU3LCAyMjQsIDIwOSwgMTc3LCAyNDUsIDEwNywgCisgICAgMjQ3LCAxNDYsIDIyOCwgNTcsIDIxOCwgNTksIDE3NywgMjQ1LCAxMDcsIDIyOCwgNTcsIDQyLCAyMzYsIDIyLCA2NCwgMTc3LCAKKyAgICAxMjgsIDExMiwgMjI4LCA1NywgNDIsIDIyNiwgMTU0LCA2NCwgMTc3LCAxMjgsIDExMiwgNDIsIDIzNiwgMjIsIDY0LCAxNzcsIAorICAgIDIyOCwgNTcsIDEyOCwgMTEyLCA0MiwgMjI2LCAxNTQsIDY0LCAxNzcsIDIyOCwgNTcsIDEyOCwgMTEyLCAyMzMsIDIxLCAKKyAgICAyNTEsIDk2LCAyMjgsIDU3LCAyNDUsIDEwMiwgMTEyLCAyNDIsIDEzNywgMjUxLCA5NiwgMjI4LCA1NywgMjQ1LCAxMDIsIAorICAgIDExMiwgMjI0LCAyMDYsIDI1MSwgOTYsIDIyOCwgNTcsIDI0NSwgMTAyLCAxMTIsIDIxOCwgNTcsIDI1MSwgOTYsIDIyOCwgCisgICAgNTcsIDI0NSwgMTAyLCAxMTIsIDIyOCwgNTcsIDIyOCwgNjIsIDIxOCwgNzgsIDIyNiwgMjM1LCAyNDcsIDE0NiwgMjI4LCAKKyAgICA1NywgMjQ5LCAxOTYsIDI1MywgMjQ2LCAyMjgsIDYyLCAyMTgsIDc3LCAyMjgsIDU3LCAyMjgsIDYyLCAyMTgsIDc4LCA2NCwgCisgICAgMTc3LCAxMjgsIDExMiwgMjQ3LCAxNDYsIDIyOCwgNTcsIDI0OSwgMTk2LCAyNTMsIDI0NiwgMjI4LCA2MiwgMjE4LCA3OCwgCisgICAgMTc3LCAyNDUsIDEwNywgNjcsIDI0NSwgMTcxLCAyMzAsIDIyNywgMjAzLCAyNDUsIDE3MSwgMTIwLCA0NCwgMjQ4LCA3LCAKKyAgICAyNDUsIDE3MSwgMTI0LCA0NCwgMjQ4LCA3LCAyNDUsIDE3MSwgMjQ1LCAxNzgsIDY0LCAyLCAyMDAsIDIwMywgOTEsIDI0NSwgCisgICAgMTc4LCA2NCwgMiwgNjcsIDI1MiwgMTQ5LCAyNTMsIDIxNSwgMjQ1LCAxNTEsIDY0LCAyMDMsIDkxLCA0LCAyNDUsIDE3OCwgCisgICAgNjQsIDIsIDY3LCAyNTIsIDE0OSwgMjUzLCAyMTUsIDI0NSwgMTUxLCA2NCwgMjAzLCA5MSwgMjQ1LCAxNzgsIDY0LCAyLCAKKyAgICA1OSwgNDgsIDI0NSwgMTc4LCA2NCwgMiwgMjI2LCAxMjcsIDQsIDI0NSwgMTc4LCA2NCwgMiwgMjI2LCAxMjcsIDI0NSwgCisgICAgMTc4LCA2NCwgMiwgMjE0LCAxODMsIDI0NSwgMTc4LCA2NCwgMiwgMTEzLCAyMDMsIDIxOCwgOTIsIDI0OSwgMTk0LCAyLCAKKyAgICAyMDAsIDIwMywgOTEsIDI0OSwgMTk0LCAyLCA2NywgMjUyLCAxNDksIDI1MywgMjE1LCAyNDUsIDE1MSwgNjQsIDIwMywgOTEsIAorICAgIDQsIDI0OSwgMTk0LCAyLCA2NywgMjUyLCAxNDksIDI1MywgMjE1LCAyNDUsIDE1MSwgNjQsIDIwMywgOTEsIDI0OSwgMTk0LCAKKyAgICAyLCAyMjYsIDEyNywgNCwgMjQ5LCAxOTQsIDIsIDIyNiwgMTI3LCAyMTAsIDE2MCwgMTg5LCAyNTIsIDE4MSwgMjMxLCA2NiwgCisgICAgMjQ4LCAyLCA1MCwgMjQ1LCAxODAsIDc1LCAyNDAsIDI0MSwgMTIwLCAyNTQsIDEsIDEyNCwgMjU0LCAxLCAyMjQsIDE3OCwgCisgICAgMjI1LCAxNjgsIDIxMiwgMzIsIDIzMiwgMjE5LCA0MywgMjUwLCAxODksIDQ0LCAyNTAsIDE4OSwgNDMsIDI0NCwgNjUsIDQ0LCAKKyAgICAyNDQsIDY1LCAyNTEsIDE4MywgNDQsIDI0OSwgMTQwLCAyNTEsIDE4MywgNDMsIDI0OSwgMTQwLCAyMTYsIDE1LCA0NCwgCisgICAgMjQ5LCAxNDAsIDIxNiwgMTUsIDQzLCAyNDksIDE0MCwgMjIzLCA1MiwgMjI4LCA1NywgNTAsIDQyLCAyMzIsIDExMCwgMjU0LCAKKyAgICAzMywgMjIxLCAxNjYsIDIyMSwgMTczLCAyMTcsIDIsIDIyMywgMTIzLCAyMjQsIDI0NCwgMjM1LCAyNDUsIDIxMywgMTY1LCAKKyAgICAyMTgsIDIzNiwgMjI1LCA0NCwgNjQsIDIzNSwgMjE0LCA1MCwgMjE1LCA5NCwgMjI4LCA1NywgNTAsIDIxMiwgNDIsIDI0MCwgCisgICAgMjQzLCAyMTYsIDE1LCA0MywgMjQ5LCAxNjgsIDIxNiwgMTUsIDQ0LCAyNDksIDE2OCwgMjUxLCAxODMsIDQzLCAyNDksIAorICAgIDE2OCwgMjUxLCAxODMsIDQ0LCAyNDksIDE2OCwgMjE2LCAxNSwgMTYzLCAyMzUsIDIxOCwgMjUxLCAxODMsIDE2MywgMjM1LCAKKyAgICAyMTgsIDI0MywgMjQ4LCAyMTksIDc3LCAxMjAsIDI1NCwgMiwgMjUyLCAzMiwgMTEzLCAyMDMsIDI1MiwgMTM3LCAyMjYsIAorICAgIDE2NCwgMjM0LCAxNDQsIDI0NSwgOTgsIDIxNiwgNDMsIDIxNiwgMTk3LCAyMjIsIDI1NCwgMjExLCAxNzksIDIzNiwgNywgCisgICAgMTE2LCAyMjMsIDEyMCwgMjUxLCAxNzEsIDIzNCwgMTQzLCAyMzMsIDQ4LCAyNTQsIDExOCwgMTI3LCAyMjIsIDI1MCwgMjU0LCAKKyAgICAxMTgsIDEyNywgMjQ1LCA5OCwgMjE2LCA0MywgMjE2LCAxOTcsIDIzMywgNTIsIDI1MiwgNDMsIDIyMiwgMjM2LCAyNDksIAorICAgIDc4LCAyNTQsIDE2NCwgMjU0LCA5LCAyMTcsIDE4MiwgMjE2LCA1LCAyMjIsIDEyNSwgMjQ3LCAyMjMsIDIyNiwgMTU1LCAKKyAgICAyNDksIDIwNiwgMjE3LCA1MywgMjE5LCA4OCwgMjQ5LCAxNTksIDI0OSwgMTU4LCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIAorICAgIDI0MCwgMTU4LCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDIxOCwgMjMwLCAyMjQsIDMwLCAyNTQsIDc0LCAyNDMsIDIzMiwgCisgICAgMTYsIDIyNCwgMzEsIDI0NSwgMTA3LCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDIyNCwgMzEsIDI0NywgMTgyLCAyNTQsIDc0LCAKKyAgICAyNDMsIDIzMiwgMTYsIDIyNCwgMzEsIDI0OCwgMCwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyMjQsIDMxLCAyMzUsIDYyLCAKKyAgICAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDIyNCwgMzEsIDI1MCwgNDMsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjUwLCA0NCwgCisgICAgMjE4LCAxMzcsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjUwLCA0NCwgMjM1LCA2MiwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAKKyAgICAyMTksIDk4LCAxMzAsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjUyLCAxODksIDEzMCwgMjU0LCA3NCwgMjQzLCAyMzIsIAorICAgIDE2LCAyMjQsIDMxLCAyMTksIDk3LCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDIyNCwgMzEsIDI1MiwgMTg4LCAyNTQsIDc0LCAKKyAgICAyNDMsIDIzMiwgMTYsIDIyNCwgMzEsIDIzMywgMjAsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjI0LCAzMSwgMjQyLCAxMzYsIAorICAgIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMTQwLCAyMTQsIDE5LCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDk3LCAyMTQsIDE5LCAKKyAgICAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDIyNCwgMzEsIDE0MCwgNzUsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjI0LCAzMSwgCisgICAgOTcsIDc1LCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDI1MCwgNDQsIDI1MiwgMTg4LCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIAorICAgIDEyNCwgMjE3LCA4OSwgMjE0LCAxODMsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjQ4LCA2MywgMjE4LCAxMzcsIDI1NCwgCisgICAgNzQsIDI0MywgMjMyLCAxNiwgMjI0LCAzMSwgMTI0LCAyNTAsIDI0NiwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyMjQsIDMxLCAKKyAgICAyNDgsIDYyLCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDEyNCwgMjE3LCA4OSwgMjM1LCA2MiwgMjU0LCA3NCwgMjQzLCAyMzIsIAorICAgIDE2LCAyMTQsIDE1MywgMjE0LCAxOSwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyMjQsIDMxLCAyMTQsIDE1MywgNzUsIDI1NCwgCisgICAgNzQsIDI0MywgMjMyLCAxNiwgMTIwLCAyMTcsIDg5LCAyMjYsIDEyNywgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyNDgsIDc0LCAKKyAgICAyMTgsIDEzNywgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyMjQsIDMxLCAxMjAsIDI1MCwgMjQ2LCAyNTQsIDc0LCAyNDMsIAorICAgIDIzMiwgMTYsIDIyNCwgMzEsIDI0OCwgNzMsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMTIwLCAyMTcsIDg5LCAyMzUsIDYyLCAKKyAgICAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDI0NiwgMTEyLCAyMTQsIDE5LCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDIyNCwgMzEsIAorICAgIDI0NiwgMTEyLCA3NSwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyMjQsIDAsIDIxNCwgMTgzLCAyNTQsIDc0LCAyNDMsIDIzMiwgCisgICAgMTYsIDI0OCwgNjMsIDIxNCwgMTgzLCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDI0OCwgMSwgMjE0LCAxODMsIDI1NCwgNzQsIAorICAgIDI0MywgMjMyLCAxNiwgMjM1LCA2MywgMjE0LCAxODMsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjUwLCA0NCwgMjE0LCAKKyAgICAxODMsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMTIwLCAyMjAsIDcsIDIzNSwgNjIsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgCisgICAgMjI0LCAwLCAyMjQsIDMwLCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDI1MCwgNDQsIDIxOCwgMTU4LCAyNTQsIDc0LCAyNDMsIAorICAgIDIzMiwgMTYsIDIyNCwgMzEsIDI0OSwgMjM0LCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDEyMCwgMjE3LCA4OSwgMjQ4LCA5LCAKKyAgICAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDI0OCwgNzQsIDI0OCwgOSwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyMTgsIDE1OSwgCisgICAgMjQ4LCA5LCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDIzNSwgNjMsIDI0OCwgOSwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAKKyAgICAyNTAsIDQ0LCAyNDgsIDksIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMTI0LCAyMjAsIDcsIDIxOCwgMTM3LCAyNTQsIDc0LCAKKyAgICAyNDMsIDIzMiwgMTYsIDQzLCAyMjAsIDcsIDIxOCwgMTM3LCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDIxNiwgOTAsIDI0OCwgCisgICAgOSwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyNDIsIDEzNywgMjQ4LCA5LCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDI0OSwgCisgICAgMjI4LCAxMzAsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjQ4LCA3NCwgMTg0LCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIAorICAgIDIxMCwgMzQsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjE4LCAxMzgsIDE4NCwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAKKyAgICAyMjAsIDE1MywgMjE0LCAxODMsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjI0LCAzMSwgMjI4LCA1NywgMjQ1LCAxMDcsIAorICAgIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjI0LCAzMSwgMjI0LCAxNSwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAxMjQsIDI1MCwgCisgICAgMjQ3LCAxODQsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMTIwLCAyNTAsIDI0NywgMTg0LCAyNTQsIDc0LCAyNDMsIDIzMiwgCisgICAgMTYsIDIzNSwgMTkyLCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDIyMywgNDAsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjI2LCAKKyAgICAyMDUsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjU0LCAxNTIsIDIxNCwgMTgzLCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIAorICAgIDI0NSwgMTA5LCAyMTQsIDE4MywgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyMzUsIDE5MywgMjE0LCAxODMsIDI1NCwgNzQsIAorICAgIDI0MywgMjMyLCAxNiwgMjI2LCAyMDYsIDIxNCwgMTgzLCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDI1NCwgMTUxLCAyMjgsIAorICAgIDU3LCAyNTAsIDEzOCwgNzksIDQ0LCAyNTQsIDExOCwgMiwgMjQ2LCAxMTIsIDIxMCwgMzUsIDc1LCAyMTksIDIzNywgMjA0LCAKKyAgICAyNTEsIDE3MSwgMjUyLCA1MywgODcsIDY3LCAyMzIsIDIyMCwgMiwgMjMwLCAyMjksIDI0NywgMTI4LCAyMzUsIDIyMywgODcsIAorICAgIDI0OSwgMTkxLCAyMTQsIDE4MSwgODcsIDI0NywgMTk3LCAyMTQsIDE4MSwgODcsIDI0NSwgMTYyLCA4NywgMjQ5LCAyMTgsIAorICAgIDg3LCA3MSwgNDIsIDIsIDI1MCwgMTgzLCA2NywgMjMyLCAyMTksIDI0NSwgMTM4LCA4NywgMjU0LCAxNDcsIDIzNCwgMTQ1LCAKKyAgICA4NywgMjQxLCAyMjAsIDg3LCAzNywgMjAzLCAyNTIsIDE0OSwgMiwgMjI4LCA1NSwgMzcsIDIxNSwgMjI3LCAyNDYsIDExNCwgCisgICAgMjUxLCAxNDMsIDI1MCwgNDQsIDIsIDIyOCwgNTksIDc1LCAyMTQsIDE3OSwgODcsIDIzMCwgMTQyLCA4NywgMjQwLCAxNzEsIAorICAgIDg3LCAyMjYsIDE3OCwgMjQyLCA2NiwgODcsIDIyNiwgMTc4LCAyMzMsIDE1MywgODcsIDIyNSwgMjQ4LCA4NywgMjI1LCAKKyAgICAyNDcsIDg3LCAyNDcsIDIwNSwgMjQ5LCAxMDUsIDE2LCAyNDQsIDI4LCAxMDUsIDIxOSwgNTIsIDg3LCAyNTQsIDc0LCAyNDMsIAorICAgIDIzMiwgMTYsIDIyNCwgMzAsIDI0OCwgOTEsIDIyMCwgMTQwLCAyMzQsIDE0NSwgODcsIDIyNCwgMTk1LCAyMjYsIDc5LCAKKyAgICAyMjksIDg3LCAyMjYsIDc5LCAyMjQsIDE5MSwgMjIxLCAxOTEsIDg3LCAyNTAsIDI1LCAyMjEsIDE5MSwgODcsIDQzLCAyMjYsIAorICAgIDgsIDIxNCwgMTYwLCAxMDMsIDQzLCAyMjYsIDgsIDI0NSwgMjksIDQzLCAyMjYsIDgsIDIzMiwgMTE0LCAxMDMsIDQ0LCAKKyAgICAyMjYsIDgsIDIxNCwgMTYwLCAxMDMsIDQ0LCAyMjYsIDgsIDI0NSwgMjksIDQ0LCAyMjYsIDgsIDIzMiwgMTE0LCAxMDMsIAorICAgIDQzLCA0MiwgMjUxLCAxNjYsIDIxNCwgMTYwLCAyNDksIDE2OCwgNDMsIDQyLCAyNTEsIDE2NiwgMjQ1LCAyOSwgNDMsIDQyLCAKKyAgICAyNTEsIDE2NiwgMjMyLCAxMTQsIDI0OSwgMTY4LCA0NCwgNDIsIDI1MSwgMTY2LCAyMTQsIDE2MCwgMjQ5LCAxNjgsIDQ0LCAKKyAgICA0MiwgMjUxLCAxNjYsIDI0NSwgMjksIDQ0LCA0MiwgMjUxLCAxNjYsIDIzMiwgMTE0LCAyNDksIDE2OCwgNDMsIDI0OSwgCisgICAgMTA3LCAyNTEsIDE2NiwgMjE0LCAxNjAsIDEwMywgNDMsIDI0OSwgMTA3LCAyNTEsIDE2NiwgMjMwLCAyMjksIDIyNSwgMTA0LCAKKyAgICA0MywgMjQ5LCAxMDcsIDI1MSwgMTY2LCAyMzIsIDExNCwgMTAzLCAyNDksIDEwNywgMjUxLCAxNjYsIDI0NSwgMjksIDQ0LCAKKyAgICAyNDksIDEwNywgMjUxLCAxNjYsIDIxNCwgMTYwLCAxMDMsIDQ0LCAyNDksIDEwNywgMjUxLCAxNjYsIDIzMCwgMjI5LCAyMjUsIAorICAgIDEwNCwgNDQsIDI0OSwgMTA3LCAyNTEsIDE2NiwgMjMyLCAxMTQsIDEwMywgMjM1LCAyMTksIDI0NSwgMjksIDIwMywgMjMyLCAKKyAgICAyMjAsIDI0NSwgMjksIDIxNCwgMTYwLCA0MywgMTc3LCAyMzIsIDExNCwgNDQsIDI0OSwgMTA3LCAyNTEsIDE2NiwgMjIxLCAKKyAgICAxNzQsIDIxNCwgMTYwLCA0NCwgMTc3LCAyMzIsIDExNCwgNDMsIDI0OSwgMTA3LCAyNTEsIDE2NiwgMjIxLCAxNzQsIDIxOCwgCisgICAgNDIsIDIxNiwgMTQsIDIxOCwgNDIsIDI1MSwgMTgyLCAyMTYsIDE1LCA0MiwgMTI3LCAyNTEsIDE4MywgNDIsIDEyNywgMjUxLCAKKyAgICAxODMsIDQyLCAyNTEsIDE2NiwgMTE1LCAyMTYsIDE1LCA0MiwgMTI3LCAzNCwgMTYsIDI1MSwgMTgyLCA0MywgNjcsIDkzLCAKKyAgICAyMzIsIDIxOSwgNDQsIDY3LCA5MywgMjMyLCAyMTksIDIwMywgMjIxLCAyMDcsIDIzMiwgMjE4LCAyMDMsIDIyMSwgMjA3LCAKKyAgICAyMzIsIDIxNywgMjAzLCAyMjEsIDIwNywgMjMyLCAyMTYsIDIwMywgMjIxLCAyMDcsIDIzMiwgMjE1LCAyNDgsIDU0LCAxNiwgCisgICAgMTkzLCA2NywgMjIsIDIxNiwgMTUsIDIyMiwgMjU0LCAyNDgsIDU0LCAxNiwgMTkzLCA2NywgMjIsIDI1MSwgMTgzLCAyMjIsIAorICAgIDI1NCwgMjQ4LCA1NCwgMTYsIDE5MywgNjcsIDIsIDI1MCwgNDMsIDI0OCwgNTQsIDE2LCAxOTMsIDEyNCwgMjIsIDIwMywgMiwgCisgICAgMjUwLCA0MywgMjQ4LCA1NCwgMTYsIDE5MywgMTIwLCAyMiwgMjAzLCAyLCAyNTAsIDQzLCAyNDgsIDU0LCAxNiwgMTkzLCAKKyAgICA2NywgMiwgMjE1LCAyMjYsIDI0OCwgNTQsIDE2LCAxOTMsIDEyNCwgMjIsIDIwMywgMiwgMjE1LCAyMjYsIDI0OCwgNTQsIAorICAgIDE2LCAxOTMsIDEyMCwgMjIsIDIwMywgMiwgMjE1LCAyMjYsIDI0OCwgNTQsIDE2LCAxOTMsIDY3LCAyMiwgMjEyLCAzNSwgCisgICAgMjQ4LCA1NCwgMTYsIDE5MywgMTI0LCAyMiwgMjAzLCAyLCAyMTIsIDM1LCAyNDgsIDU0LCAxNiwgMTkzLCAxMjAsIDIyLCAKKyAgICAyMDMsIDIsIDIxMiwgMzUsIDI0OCwgNTQsIDE2LCAxOTMsIDEyNCwgMjIsIDI0MSwgNTEsIDI0OCwgNTQsIDE2LCAxOTMsIAorICAgIDEyMCwgMjIsIDI0MSwgNTEsIDI0OCwgNTQsIDE2LCAxOTMsIDY3LCAyMiwgMjE2LCAxNSwgMjMzLCA1MiwgMjQ4LCA1NCwgCisgICAgMTYsIDE5MywgNjcsIDIyLCAyNTEsIDE4MywgMjMzLCA1MiwgNDIsIDI0NCwgNDAsIDIyMywgNTcsIDg3LCAyNDUsIDE5MCwgCisgICAgODcsIDY3LCAyMzIsIDIyMCwgMjQ1LCAyOSwgMjMxLCAzOCwgMjUxLCAxNTQsIDIzMSwgMzgsIDIwMCwgMTE1LCAyMTksIAorICAgIDI1MiwgMjMxLCAzOCwgMjE5LCAyNTMsIDExNSwgMjMyLCAxNDMsIDIzMSwgMzgsIDIwMCwgMTE1LCAxMTMsIDIxOSwgMjM5LCAKKyAgICAyMzEsIDM4LCAxMTMsIDIxOSwgMjQwLCAxMTUsIDIzMiwgMTQzLCAyMzEsIDM4LCAxMTMsIDIxOSwgMjQwLCAyMzUsIDcwLCAKKyAgICAyMzEsIDM4LCAyMTUsIDIwOSwgMjMxLCAzOCwgMjE2LCAyMjQsIDIzMSwgMzgsIDIyNSwgMTkxLCAyNDUsIDIzMiwgMjQyLCAKKyAgICAxMjksIDI0MywgMjI2LCAyMTYsIDE1LCAyMjYsIDcsIDI1MSwgMTgzLCAyMjYsIDcsIDIxNiwgMTUsIDI0OSwgMTA3LCAxMjcsIAorICAgIDI1MSwgMTgzLCAyNDksIDEwNywgMTI3LCAyMTYsIDE1LCAyMTYsIDcsIDIyMCwgNTUsIDEyNywgMjUxLCAxODMsIDIxNiwgNywgCisgICAgMjIwLCA1NSwgMTI3LCA3MSwgMjE1LCAyNDAsIDI1MiwgNDMsIDIyMiwgMjM3LCAyLCAyNTAsIDQzLCAyMTgsIDEyMiwgMjQ0LCAKKyAgICA3MiwgMjU1LCAyNiwgMjQ5LCAxMDQsIDI0NSwgMTc5LCAyMzUsIDIwNSwgMjQ4LCA5MSwgMjQ1LCAzMiwgODcsIDg1LCAyMjIsIAorICAgIDI1MCwgNTIsIDIxNSwgMjI2LCA4NSwgMjMzLCA0OCwgNTIsIDIxNSwgMjI2LCA4NSwgMjE0LCAxNjIsIDUyLCAyMTUsIDIyNiwgCisgICAgODUsIDI0NiwgMTEzLCA1MiwgMjE1LCAyMjYsIDg1LCAyMjIsIDI1MCwgNTIsIDIxNSwgMjI3LCAyLCA2NywgMTMwLCA4NSwgCisgICAgMjMzLCA0OCwgNTIsIDIxNSwgMjI3LCAyLCA2NywgMTMwLCA4NSwgMjIyLCAyNTAsIDIxNSwgMjI3LCAyLCA1MiwgNjcsIAorICAgIDEzMCwgMjU0LCAxODIsIDI1MCwgMTEsIDIxOCwgMTI4LCAyMTYsIDg3LCAyNTAsIDExLCAyNDAsIDI0NCwgMiwgMjQ0LCA1OCwgCisgICAgMjIxLCAyNDMsIDE2LCAzMSwgMjI3LCAyMDYsIDE2LCAzMSwgMjE4LCAxNTQsIDY0LCAyNDEsIDI0MCwgMTYsIDMxLCAyMTgsIAorICAgIDE1NCwgNjQsIDIxNiwgMjEzLCAxNiwgMzEsIDI0NSwgMTUxLCA2NCwgMjE2LCAyMTMsIDE2LCAzMSwgMjQ1LCAxNTEsIDY0LCAKKyAgICAyMTUsIDI0NCwgMTYsIDMxLCAyNDUsIDE0MCwgMTYsIDMxLCAyNTUsIDE2LCAxNiwgMzEsIDI1MiwgNTIsIDE2LCAzMSwgCisgICAgMjUyLCAxODcsIDE2LCAzMSwgMjAzLCAyMTcsIDkwLCAxNiwgMzEsIDIzMiwgMjIwLCAyNDQsIDE1MywgMTYsIDMxLCA2NywgCisgICAgMjE3LCA5MCwgMTYsIDMxLCAyNDQsIDI4LCAyNDQsIDE1MywgMTYsIDMxLCAyNTAsIDIzOCwgMjIzLCA1NiwgMTYsIDMxLCAKKyAgICAyMjAsIDMwLCAyMjYsIDEzNCwgMTYsIDMxLCAyMjAsIDMwLCAyMzYsIDYsIDE2LCAzMSwgMjQ4LCAxNTksIDIzMiwgMjEwLCAKKyAgICAyNDUsIDg1LCAxNiwgMzEsIDI0OCwgMzksIDI0OSwgMTg2LCAxMTEsIDE2LCAzMSwgMjQ4LCAzOSwgMjQ5LCAxODYsIDEwNSwgCisgICAgMTYsIDMxLCAyNDgsIDM5LCAyNDksIDE4NiwgMTU4LCAxNiwgMzEsIDI0OCwgMzksIDI0OSwgMTg2LCAxNjEsIDE2LCAzMSwgCisgICAgMTUyLCAyNTUsIDE2LCAxNiwgMzEsIDIxNywgMTc4LCAyMzYsIDY5LCAxNiwgMzEsIDI0NSwgMTUxLCA2NCwgMjE1LCAyNDUsIAorICAgIDI1MSwgMjIxLCAxNiwgMzEsIDI1MSwgMTMsIDE2LCAzMSwgMjQ1LCAxNTEsIDY0LCAyMzEsIDg2LCAxNiwgMzEsIDIxOCwgCisgICAgNjIsIDE2LCAzMSwgMjQ1LCA4NSwgMTYsIDMxLCAyNDQsIDExNSwgMjIwLCAxMzksIDE2LCAzMSwgMjQyLCAxMjgsIDIyMCwgCisgICAgMTM5LCAxNiwgMzEsIDIyMywgMTI0LCAyMjAsIDEzOSwgMTYsIDMxLCAyMTQsIDE3NCwgMjIwLCAxMzksIDE2LCAzMSwgMjE5LCAKKyAgICAyMCwgMTYsIDMxLCAyNDgsIDcxLCAyNTEsIDIyNCwgODcsIDIwNCwgMjUxLCAxNzEsIDE2LCAzMSwgMjI5LCA5MCwgMTYsIAorICAgIDMxLCAyNDgsIDcyLCAyNDQsIDI4LCAxMDUsIDE2LCAzMSwgMjE4LCA2MywgMjQ0LCAyOCwgMTA1LCAyMjYsIDI0NSwgMTAzLCAKKyAgICAyMjYsIDI0NSwgMjUwLCAxNjAsIDIyNiwgMjQ1LCAyNDQsIDMxLCAyMjYsIDI0NSwgMjM1LCAyMDAsIDI0NCwgMzEsIDIyNiwgCisgICAgMjQ1LCAyNTIsIDUwLCAyNTEsIDEzMiwgMjI2LCAyNDUsIDI1MSwgMTc4LCAyMTYsIDExMiwgMjI2LCAyNDUsIDI1MSwgMTYzLCAKKyAgICAyNTIsIDE1NCwgMjQwLCAxMTAsIDIyNiwgMjQ1LCAyNTQsIDEzNSwgNjQsIDI1MCwgMTM3LCAyMjYsIDI0NSwgMjQ4LCAxNjQsIAorICAgIDIyNiwgMjQ1LCAyNDksIDk1LCAyNTUsIDIwLCAyMjcsIDIwNCwgMjI2LCAyNDUsIDUyLCAyNTIsIDE4OCwgMzcsIDIxLCAKKyAgICAxMTEsIDM3LCAyMSwgMTA1LCAzNywgMjEsIDE1OCwgMzcsIDIxLCAxNjEsIDM3LCAyMSwgMTkwLCAzNywgMjEsIDE5NSwgMzcsIAorICAgIDIxLCAxOTksIDM3LCAyMSwgMTk2LCAzNywgMjEsIDIwMSwgMzcsIDU0LCAyMTYsIDI0OCwgMzcsIDU0LCAyNDUsIDE3NSwgCisgICAgMzcsIDU0LCAyMTUsIDc2LCAzNywgNTQsIDIxNiwgMTY1LCAzNywgNTQsIDI0NCwgMTMsIDM3LCA1NCwgMjQ0LCAxMjYsIDM3LCAKKyAgICA1NCwgMjE5LCAxMjEsIDM3LCA1NCwgMjIwLCAxMjEsIDM3LCA1NCwgMjQ1LCAxOTgsIDM3LCA1NCwgMjI4LCAyMDIsIDM3LCAKKyAgICA1NCwgMjE1LCA3MywgODgsIDIxLCAxMTEsIDg4LCAyMSwgMTA1LCA4OCwgMjEsIDE1OCwgODgsIDIxLCAxNjEsIDg4LCAyMSwgCisgICAgMTkwLCA4OCwgMjEsIDE5NSwgODgsIDIxLCAxOTksIDg4LCAyMSwgMTk2LCA4OCwgMjEsIDIwMSwgODgsIDU0LCAyMTYsIAorICAgIDI0OCwgODgsIDU0LCAyNDUsIDE3NSwgODgsIDU0LCAyMTUsIDc2LCA4OCwgNTQsIDIxNiwgMTY1LCA4OCwgNTQsIDI0NCwgCisgICAgMTMsIDg4LCA1NCwgMjQ0LCAxMjYsIDg4LCA1NCwgMjE5LCAxMjEsIDg4LCA1NCwgMjIwLCAxMjEsIDg4LCA1NCwgMjQ1LCAKKyAgICAxOTgsIDg4LCA1NCwgMjI4LCAyMDIsIDg4LCA1NCwgMjE1LCA3MywgMjEsIDEyMywgMjQzLCAyMzYsIDIxOCwgMTMxLCAyMSwgCisgICAgMTEzLCAyNDMsIDIzNiwgMjE4LCAxMzEsIDIxLCAxMzQsIDI0MywgMjM2LCAyMTgsIDEzMSwgMjEsIDI0NCwgMTksIDI0MywgCisgICAgMjM2LCAyMTgsIDEzMSwgMjEsIDI0NCwgODksIDI0MywgMjM2LCAyMTgsIDEzMSwgMjEsIDIxOSwgMTI3LCAyNDMsIDIzNiwgCisgICAgMjE4LCAxMzEsIDIxLCAyMjAsIDEyNCwgMjQzLCAyMzYsIDIxOCwgMTMxLCAyMSwgMjQ1LCAyMDEsIDI0MywgMjM2LCAyMTgsIAorICAgIDEzMSwgMjEsIDIyOCwgMjA1LCAyNDMsIDIzNiwgMjE4LCAxMzEsIDU0LCAyMTYsIDI0OSwgMjQzLCAyMzYsIDIxOCwgMTMxLCAKKyAgICA1NCwgMjQ1LCAxNzYsIDI0MywgMjM2LCAyMTgsIDEzMSwgNTQsIDIxNSwgNzcsIDI0MywgMjM2LCAyMTgsIDEzMSwgNTQsIAorICAgIDIxNiwgMTY2LCAyNDMsIDIzNiwgMjE4LCAxMzEsIDU0LCAyNDQsIDE0LCAyNDMsIDIzNiwgMjE4LCAxMzEsIDU0LCAyNDQsIAorICAgIDEyNywgMjQzLCAyMzYsIDIxOCwgMTMxLCA1NCwgMjE5LCAxMjIsIDI0MywgMjM2LCAyMTgsIDEzMSwgNTQsIDIyMCwgMTIyLCAKKyAgICAyNDMsIDIzNiwgMjE4LCAxMzEsIDU0LCAyNDUsIDE5OSwgMjQzLCAyMzYsIDIxOCwgMTMxLCA1NCwgMjI4LCAyMDMsIDI0MywgCisgICAgMjM2LCAyMTgsIDEzMSwgNTQsIDIxNSwgNzQsIDI0MywgMjM2LCAyMTgsIDEzMSwgODgsIDcsIDQsIDEsIDYxLCA4OCwgNywgCisgICAgNCwgMSwgMjUzLCAxNjYsIDg4LCA3LCA0LCAxLCAyNTEsIDc0LCA4OCwgNywgNCwgMSwgMjQ5LCA2OCwgODgsIDcsIDQsIDEsIAorICAgIDc2LCA4OCwgNywgNCwgMSwgMjQ1LCAxNCwgODgsIDcsIDQsIDEsIDI0MywgMjA5LCA4OCwgNywgNCwgMSwgMjQyLCA2NywgCisgICAgODgsIDcsIDQsIDEsIDc0LCA4OCwgNywgNCwgMSwgMjM1LCAxNTAsIDg4LCA3LCA0LCAxLCAyMzUsIDI5LCA4OCwgNywgNCwgCisgICAgMSwgMTU2LCA4OCwgNywgNCwgMSwgMTk0LCA4OCwgNywgNCwgMSwgMjMwLCAzMCwgODgsIDcsIDQsIDEsIDc4LCA4OCwgNywgCisgICAgNCwgMSwgMjI2LCAxMDksIDg4LCA3LCA0LCAxLCAyMjQsIDk5LCA4OCwgNywgNCwgMSwgMTUzLCA4OCwgNywgNCwgMSwgMjIyLCAKKyAgICA5MywgODgsIDcsIDQsIDEsIDIxNywgMTUzLCA4OCwgNywgNCwgMSwgNjksIDg4LCA3LCA0LCAxLCAyMTQsIDEwNSwgODgsIDcsIAorICAgIDQsIDEsIDIxMiwgOTgsIDg4LCA3LCA0LCAxLCAyMTEsIDE3OCwgODgsIDcsIDQsIDEsIDIxMSwgMTE3LCA4OCwgNywgNCwgMSwgCisgICAgMjEwLCAxNTksIDM3LCA3LCA2LCAxLCA2MSwgMzcsIDcsIDYsIDEsIDI1MywgMTY2LCAzNywgNywgNiwgMSwgMjUxLCA3NCwgCisgICAgMzcsIDcsIDYsIDEsIDI0OSwgNjgsIDM3LCA3LCA2LCAxLCA3NiwgMzcsIDcsIDYsIDEsIDI0NSwgMTQsIDM3LCA3LCA2LCAxLCAKKyAgICAyNDMsIDIwOSwgMzcsIDcsIDYsIDEsIDI0MiwgNjcsIDM3LCA3LCA2LCAxLCA3NCwgMzcsIDcsIDYsIDEsIDIzNSwgMTUwLCAKKyAgICAzNywgNywgNiwgMSwgMjM1LCAyOSwgMzcsIDcsIDYsIDEsIDE1NiwgMzcsIDcsIDYsIDEsIDE5NCwgMzcsIDcsIDYsIDEsIAorICAgIDIzMCwgMzAsIDM3LCA3LCA2LCAxLCA3OCwgMzcsIDcsIDYsIDEsIDIyNiwgMTA5LCAzNywgNywgNiwgMSwgMjI0LCA5OSwgCisgICAgMzcsIDcsIDYsIDEsIDE1MywgMzcsIDcsIDYsIDEsIDIyMiwgOTMsIDM3LCA3LCA2LCAxLCAyMTcsIDE1MywgMzcsIDcsIDYsIAorICAgIDEsIDY5LCAzNywgNywgNiwgMSwgMjE0LCAxMDUsIDM3LCA3LCA2LCAxLCAyMTIsIDk4LCAzNywgNywgNiwgMSwgMjExLCAKKyAgICAxNzgsIDM3LCA3LCA2LCAxLCAyMTEsIDExNywgMzcsIDcsIDYsIDEsIDIxMCwgMTU5LCAzNywgNywgNCwgMSwgNjEsIDM3LCAKKyAgICA3LCA0LCAxLCAyNTMsIDE2NiwgMzcsIDcsIDQsIDEsIDI1MSwgNzQsIDM3LCA3LCA0LCAxLCAyNDksIDY4LCAzNywgNywgNCwgCisgICAgMSwgNzYsIDM3LCA3LCA0LCAxLCAyNDUsIDE0LCAzNywgNywgNCwgMSwgMjQzLCAyMDksIDM3LCA3LCA0LCAxLCAyNDIsIDY3LCAKKyAgICAzNywgNywgNCwgMSwgNzQsIDM3LCA3LCA0LCAxLCAyMzUsIDE1MCwgMzcsIDcsIDQsIDEsIDIzNSwgMjksIDM3LCA3LCA0LCAKKyAgICAxLCAxNTYsIDM3LCA3LCA0LCAxLCAxOTQsIDM3LCA3LCA0LCAxLCAyMzAsIDMwLCAzNywgNywgNCwgMSwgNzgsIDM3LCA3LCAKKyAgICA0LCAxLCAyMjYsIDEwOSwgMzcsIDcsIDQsIDEsIDIyNCwgOTksIDM3LCA3LCA0LCAxLCAxNTMsIDM3LCA3LCA0LCAxLCAyMjIsIAorICAgIDkzLCAzNywgNywgNCwgMSwgMjE3LCAxNTMsIDM3LCA3LCA0LCAxLCA2OSwgMzcsIDcsIDQsIDEsIDIxNCwgMTA1LCAzNywgNywgCisgICAgNCwgMSwgMjEyLCA5OCwgMzcsIDcsIDQsIDEsIDIxMSwgMTc4LCAzNywgNywgNCwgMSwgMjExLCAxMTcsIDM3LCA3LCA0LCAxLCAKKyAgICAyMTAsIDE1OSwgMzcsIDIxLCAyMTAsIDg2LCAxNTIsIDM3LCA1NCwgMjQ1LCAxNzUsIDE1MiwgMzcsIDU0LCAyMTUsIDc2LCAKKyAgICAxNTIsIDM3LCA1NCwgMjE2LCAxNjUsIDE1MiwgMzcsIDU0LCAyNDQsIDEzLCAxNTIsIDM3LCA1NCwgMjQ0LCAxMjYsIDE1MiwgCisgICAgMzcsIDU0LCAyMTksIDEyMSwgMTUyLCAzNywgNTQsIDIyMCwgMTIxLCAxNTIsIDM3LCA1NCwgMjQ1LCAxOTgsIDE1MiwgMzcsIAorICAgIDU0LCAyMjgsIDIwMiwgMTUyLCAzNywgNTQsIDIxNSwgNzMsIDUyLCAzNywgMjEsIDExMSwgNTIsIDM3LCAyMSwgMTA1LCA1MiwgCisgICAgMzcsIDIxLCAxNTgsIDUyLCAzNywgMjEsIDE2MSwgNTIsIDM3LCAyMSwgMTkwLCA1MiwgMzcsIDIxLCAxOTUsIDUyLCAzNywgCisgICAgMjEsIDE5OSwgNTIsIDM3LCAyMSwgMTk2LCA1MiwgMzcsIDIxLCAyMDEsIDUyLCAzNywgNTQsIDIxNiwgMjQ4LCAxNTIsIDM3LCAKKyAgICAyMSwgMjEwLCA4NiwgOTMsIDk5LCAxOTMsIDI0MSwgNTEsIDkzLCA5OSwgMTE0LCAyNDEsIDUxLCA5MywgOTksIDE5MywgCisgICAgMjEzLCAyMzksIDkzLCA5OSwgMTE0LCAyMTMsIDIzOSwgOTMsIDk5LCAxOTMsIDIxNSwgMjEyLCAyNDgsIDE2NSwgMjQxLCAKKyAgICA1MSwgOTMsIDk5LCAxMTQsIDIxNSwgMjEyLCAyNDgsIDE2NSwgMjQxLCA1MSwgOTMsIDk5LCAxOTMsIDIxNSwgMjEyLCAyNDgsIAorICAgIDE2NSwgMjEzLCAyMzksIDkzLCA5OSwgMTE0LCAyMTUsIDIxMiwgMjQ4LCAxNjUsIDIxMywgMjM5LCA5MywgOTksIDE5MywgCisgICAgMjI0LCAyNywgMjQ4LCAxNjUsIDI0MSwgNTEsIDkzLCA5OSwgMTE0LCAyMjQsIDI3LCAyNDgsIDE2NSwgMjQxLCA1MSwgOTMsIAorICAgIDk5LCAxOTMsIDIyNCwgMjcsIDI0OCwgMTY1LCAyMTMsIDIzOSwgOTMsIDk5LCAxMTQsIDIyNCwgMjcsIDI0OCwgMTY1LCAKKyAgICAyMTMsIDIzOSwgOTMsIDk5LCAxOTMsIDEyNCwgMjIsIDIyMiwgMjU0LCA5MywgOTksIDEyNCwgMTkzLCAyMiwgNDQsIDI0MSwgCisgICAgMjI4LCA5MywgOTksIDEyNCwgMTE0LCAyMiwgNDQsIDIzMiwgMjM2LCA5MywgOTksIDExNCwgMTI0LCAyMiwgMjIyLCAyNTQsIAorICAgIDkzLCA5OSwgMTkzLCAxMjQsIDIyLCAyMzMsIDUyLCA5MywgOTksIDEyNCwgMTkzLCAyMiwgNDMsIDI0MSwgMjI4LCA5MywgCisgICAgOTksIDEyNCwgMTE0LCAyMiwgNDMsIDIzMiwgMjM2LCA5MywgOTksIDExNCwgMTI0LCAyMiwgMjMzLCA1MiwgOTMsIDk5LCAKKyAgICAxOTMsIDEyMCwgMjIsIDIyMiwgMjU0LCA5MywgOTksIDEyMCwgMTkzLCAyMiwgNDQsIDI0MSwgMjI4LCA5MywgOTksIDEyMCwgCisgICAgMTE0LCAyMiwgNDQsIDIzMiwgMjM2LCA5MywgOTksIDExNCwgMTIwLCAyMiwgMjIyLCAyNTQsIDkzLCA5OSwgMTkzLCAxMjAsIAorICAgIDIyLCAyMzMsIDUyLCA5MywgOTksIDEyMCwgMTkzLCAyMiwgNDMsIDI0MSwgMjI4LCA5MywgOTksIDEyMCwgMTE0LCAyMiwgCisgICAgNDMsIDIzMiwgMjM2LCA5MywgOTksIDExNCwgMTIwLCAyMiwgMjMzLCA1MiwgOTMsIDk5LCAxOTMsIDY3LCAyMiwgMjIyLCAKKyAgICAyNTQsIDkzLCA5OSwgNjcsIDE5MywgMjIsIDQ0LCAyNDEsIDIyOCwgOTMsIDk5LCAxMjAsIDExNCwgMjIsIDQ0LCAxMjQsIAorICAgIDIzMiwgMjM2LCA5MywgOTksIDEyNCwgMTE0LCAyMiwgNDQsIDEyMCwgMjMyLCAyMzYsIDkzLCA5OSwgNjcsIDExNCwgMjIsIAorICAgIDQ0LCAyMzIsIDIzNiwgOTMsIDk5LCAxMjQsIDE5MywgMjIsIDQ0LCAxMjAsIDI0MSwgMjI4LCA5MywgOTksIDEyMCwgMTkzLCAKKyAgICAyMiwgNDQsIDEyNCwgMjQxLCAyMjgsIDkzLCA5OSwgMTE0LCA2NywgMjIsIDIyMiwgMjU0LCA5MywgOTksIDE5MywgNjcsIAorICAgIDIyLCAyMzMsIDUyLCA5MywgOTksIDY3LCAxOTMsIDIyLCA0MywgMjQxLCAyMjgsIDkzLCA5OSwgMTIwLCAxMTQsIDIyLCA0MywgCisgICAgMTI0LCAyMzIsIDIzNiwgOTMsIDk5LCAxMjQsIDExNCwgMjIsIDQzLCAxMjAsIDIzMiwgMjM2LCA5MywgOTksIDY3LCAxMTQsIAorICAgIDIyLCA0MywgMjMyLCAyMzYsIDkzLCA5OSwgMTI0LCAxOTMsIDIyLCA0MywgMTIwLCAyNDEsIDIyOCwgOTMsIDk5LCAxMjAsIAorICAgIDE5MywgMjIsIDQzLCAxMjQsIDI0MSwgMjI4LCA5MywgOTksIDExNCwgNjcsIDIyLCAyMzMsIDUyLCA5MywgOTksIDE5MywgCisgICAgMTI0LCAyMiwgMjQxLCA1MSwgOTMsIDk5LCA0MywgMTE0LCAyMiwgNDQsIDEyNCwgMjMyLCAyMzYsIDkzLCA5OSwgNDQsIAorICAgIDExNCwgMjIsIDQzLCAxMjQsIDIzMiwgMjM2LCA5MywgOTksIDEyNCwgMTkzLCAyMiwgMjAzLCAyNDEsIDIyOCwgOTMsIDk5LCAKKyAgICAxMjQsIDExNCwgMjIsIDIwMywgMjMyLCAyMzYsIDkzLCA5OSwgNDQsIDE5MywgMjIsIDQzLCAxMjQsIDI0MSwgMjI4LCA5MywgCisgICAgOTksIDQzLCAxOTMsIDIyLCA0NCwgMTI0LCAyNDEsIDIyOCwgOTMsIDk5LCAxMTQsIDEyNCwgMjIsIDI0MSwgNTEsIDkzLCAKKyAgICA5OSwgMTkzLCAxMjAsIDIyLCAyNDEsIDUxLCA5MywgOTksIDQzLCAxMTQsIDIyLCA0NCwgMTIwLCAyMzIsIDIzNiwgOTMsIAorICAgIDk5LCA0NCwgMTE0LCAyMiwgNDMsIDEyMCwgMjMyLCAyMzYsIDkzLCA5OSwgMTIwLCAxOTMsIDIyLCAyMDMsIDI0MSwgMjI4LCAKKyAgICA5MywgOTksIDEyMCwgMTE0LCAyMiwgMjAzLCAyMzIsIDIzNiwgOTMsIDk5LCA0NCwgMTkzLCAyMiwgNDMsIDEyMCwgMjQxLCAKKyAgICAyMjgsIDkzLCA5OSwgNDMsIDE5MywgMjIsIDQ0LCAxMjAsIDI0MSwgMjI4LCA5MywgOTksIDExNCwgMTIwLCAyMiwgMjQxLCAKKyAgICA1MSwgOTMsIDk5LCAxOTMsIDY3LCAyMiwgMjQxLCA1MSwgOTMsIDk5LCA0MywgMTE0LCAyMiwgNDQsIDY3LCAyMzIsIDIzNiwgCisgICAgOTMsIDk5LCA0NCwgMTE0LCAyMiwgNDMsIDY3LCAyMzIsIDIzNiwgOTMsIDk5LCA2NywgMTkzLCAyMiwgMjAzLCAyNDEsIAorICAgIDIyOCwgOTMsIDk5LCAxMjAsIDExNCwgMjIsIDEyNCwgMjAzLCAyMzIsIDIzNiwgOTMsIDk5LCAxMjQsIDExNCwgMjIsIDEyMCwgCisgICAgMjAzLCAyMzIsIDIzNiwgOTMsIDk5LCA2NywgMTE0LCAyMiwgMjAzLCAyMzIsIDIzNiwgOTMsIDk5LCA0MywgMTIwLCAxMTQsIAorICAgIDIyLCA0NCwgMTI0LCAyMzIsIDIzNiwgOTMsIDk5LCA0NCwgMTIwLCAxMTQsIDIyLCA0MywgMTI0LCAyMzIsIDIzNiwgOTMsIAorICAgIDk5LCA0MywgMTI0LCAxMTQsIDIyLCA0NCwgMTIwLCAyMzIsIDIzNiwgOTMsIDk5LCA0NCwgMTI0LCAxMTQsIDIyLCA0MywgCisgICAgMTIwLCAyMzIsIDIzNiwgOTMsIDk5LCAxMjQsIDE5MywgMjIsIDEyMCwgMjAzLCAyNDEsIDIyOCwgOTMsIDk5LCAxMjAsIAorICAgIDE5MywgMjIsIDEyNCwgMjAzLCAyNDEsIDIyOCwgOTMsIDk5LCA0NCwgMTkzLCAyMiwgNDMsIDY3LCAyNDEsIDIyOCwgOTMsIAorICAgIDk5LCA0MywgMTkzLCAyMiwgNDQsIDY3LCAyNDEsIDIyOCwgOTMsIDk5LCAxMTQsIDY3LCAyMiwgMjQxLCA1MSwgOTMsIDk5LCAKKyAgICAxOTMsIDUyLCAyNDgsIDE2NSwgMjQxLCA1MSwgOTMsIDk5LCAxMTQsIDUyLCAyNDgsIDE2NSwgMjQxLCA1MSwgOTMsIDk5LCAKKyAgICAxOTMsIDUyLCAyNDgsIDE2NSwgMjEzLCAyMzksIDkzLCA5OSwgMTE0LCA1MiwgMjQ4LCAxNjUsIDIxMywgMjM5LCA5MywgOTksIAorICAgIDUyLCAyNDEsIDUxLCA5MywgOTksIDUyLCAyMTMsIDIzOSwgOTMsIDk5LCAxMjQsIDIxOSwgMTU3LCAyMiwgNDQsIDI0NiwgCisgICAgMTIxLCA5MywgOTksIDEyNCwgNTIsIDIyLCA0NCwgMjE5LCAxNTYsIDkzLCA5OSwgNTIsIDEyNCwgMjIsIDIyMiwgMjU0LCAKKyAgICA5MywgOTksIDEyNCwgMjE5LCAxNTcsIDIyLCA0MywgMjQ2LCAxMjEsIDkzLCA5OSwgMTI0LCA1MiwgMjIsIDQzLCAyMTksIAorICAgIDE1NiwgOTMsIDk5LCA1MiwgMTI0LCAyMiwgMjMzLCA1MiwgOTMsIDk5LCAxMjAsIDIxOSwgMTU3LCAyMiwgNDQsIDI0NiwgCisgICAgMTIxLCA5MywgOTksIDEyMCwgNTIsIDIyLCA0NCwgMjE5LCAxNTYsIDkzLCA5OSwgNTIsIDEyMCwgMjIsIDIyMiwgMjU0LCAKKyAgICA5MywgOTksIDEyMCwgMjE5LCAxNTcsIDIyLCA0MywgMjQ2LCAxMjEsIDkzLCA5OSwgMTIwLCA1MiwgMjIsIDQzLCAyMTksIAorICAgIDE1NiwgOTMsIDk5LCA1MiwgMTIwLCAyMiwgMjMzLCA1MiwgOTMsIDk5LCA2NywgMjE5LCAxNTcsIDIyLCA0NCwgMjQ2LCAKKyAgICAxMjEsIDkzLCA5OSwgNjcsIDUyLCAyMiwgNDQsIDIxOSwgMTU2LCA5MywgOTksIDUyLCA2NywgMjIsIDIyMiwgMjU0LCA5MywgCisgICAgOTksIDY3LCAyMTksIDE1NywgMjIsIDQzLCAyNDYsIDEyMSwgOTMsIDk5LCA2NywgNTIsIDIyLCA0MywgMjE5LCAxNTYsIDkzLCAKKyAgICA5OSwgNTIsIDY3LCAyMiwgMjMzLCA1MiwgOTMsIDk5LCAxMjQsIDIxOSwgMTU3LCAyMiwgMjAzLCAyNDYsIDEyMSwgOTMsIAorICAgIDk5LCAxMjQsIDUyLCAyMiwgMjAzLCAyMTksIDE1NiwgOTMsIDk5LCA1MiwgMTI0LCAyMiwgMjQxLCA1MSwgOTMsIDk5LCAKKyAgICAxMjAsIDIxOSwgMTU3LCAyMiwgMjAzLCAyNDYsIDEyMSwgOTMsIDk5LCAxMjAsIDUyLCAyMiwgMjAzLCAyMTksIDE1NiwgOTMsIAorICAgIDk5LCA1MiwgMTIwLCAyMiwgMjQxLCA1MSwgOTMsIDk5LCA2NywgMjE5LCAxNTcsIDIyLCAyMDMsIDI0NiwgMTIxLCA5MywgCisgICAgOTksIDY3LCA1MiwgMjIsIDIwMywgMjE5LCAxNTYsIDkzLCA5OSwgNTIsIDY3LCAyMiwgMjQxLCA1MSwgOTMsIDk5LCAxOTMsIAorICAgIDI1NCwgMzQsIDEyNCwgMjIsIDIyMiwgMjU0LCA5MywgOTksIDE5MywgMjU0LCAzNCwgMTI0LCAyMiwgMjMzLCA1MiwgOTMsIAorICAgIDk5LCAxOTMsIDI1NCwgMzQsIDEyMCwgMjIsIDIzMywgNTIsIDkzLCA5OSwgMTkzLCAyNTQsIDM0LCAxMjAsIDIyLCAyMjIsIAorICAgIDI1NCwgOTMsIDk5LCAxOTMsIDI0OCwgNywgMjE0LCAxNjAsIDQ0LCAyMTYsIDQzLCAyMzIsIDExNCwgMjMzLCA1MiwgOTMsIAorICAgIDk5LCAxOTMsIDI0OCwgNywgMjE0LCAxNjAsIDQzLCAyMTYsIDQzLCAyMzIsIDExNCwgMjIyLCAyNTQsIDkzLCA5OSwgMTkzLCAKKyAgICAyNDgsIDcsIDI0OSwgMTM4LCA5MywgOTksIDE5MywgMjMzLCA1MiwgOTMsIDk5LCAxOTMsIDIxNCwgMTYzLCA5MywgOTksIAorICAgIDE5MywgMjIyLCAyNTQsIDkzLCA5OSwgMTkzLCAyNDYsIDExNCwgOTMsIDk5LCAxMTQsIDIzMywgNTIsIDkzLCA5OSwgMTE0LCAKKyAgICAyMTQsIDE2MywgOTMsIDk5LCAxMTQsIDIyMiwgMjU0LCA5MywgOTksIDExNCwgMjQ2LCAxMTQsIDkzLCA5OSwgMTkzLCA0MywgCisgICAgMjIsIDExNCwgMjIyLCAyNTQsIDkzLCA5OSwgMTkzLCAxMjAsIDIyLCAxMTQsIDI0NiwgMTE0LCA5MywgOTksIDExNCwgNDMsIAorICAgIDIyLCAxOTMsIDIyMiwgMjU0LCA5MywgOTksIDExNCwgMTIwLCAyMiwgMTkzLCAyNDYsIDExNCwgMjE0LCAxNjAsIDE2MywgCisgICAgMjUxLCAyMjEsIDIzMiwgMTE0LCAxMjMsIDI0NSwgMTk3LCAyNTEsIDIyMSwgMjMyLCAxMTQsIDEyMywgMjI0LCAyNSwgMjUxLCAKKyAgICAyMjEsIDIzMiwgMTE0LCAxMzQsIDI0NSwgMTk1LCAyNTEsIDIyMSwgMjMyLCAxMTQsIDE2MywgMjUxLCAyMjEsIDIzMiwgCisgICAgMTE0LCAyNDQsIDg5LCAyNDUsIDE5NSwgMjUxLCAyMjEsIDIzMiwgMTE0LCAxMzQsIDIyNCwgMjMsIDI1MSwgMjIxLCAyMzIsIAorICAgIDExNCwgMjIwLCAxMjQsIDI0NSwgMTk1LCAyNTEsIDIyMSwgMjQzLCAyMzYsIDI1MSwgMjIxLCA0MywgMjIwLCAxMjQsIDI0NSwgCisgICAgMTk1LCAyNTEsIDIyMSwgNDMsIDEzNCwgMjI0LCAyMywgMjUxLCAyMjEsIDQzLCAyNDQsIDg5LCAyNDUsIDE5NSwgMjUxLCAKKyAgICAyMjEsIDQzLCAxNjMsIDI1MSwgMjIxLCA0MywgMTM0LCAyNDUsIDE5NSwgMjUxLCAyMjEsIDQzLCAxMjMsIDIyNCwgMjUsIAorICAgIDI1MSwgMjIxLCA0MywgMTIzLCAyNDUsIDE5NywgMjUxLCAyMjEsIDQ0LCAxNjMsIDI1MSwgMjIxLCAxOTMsIDIyMCwgOTQsIAorICAgIDIzMSwgODcsIDIyMCwgOTQsIDI0OCwgMTcwLCAyMjAsIDk0LCAyMTQsIDE2MCwgMTIzLCAyNDUsIDE5NywgMjUxLCAyMjEsIAorICAgIDQ0LCAxMjMsIDI0NSwgMTk3LCAyNTEsIDIyMSwgMjI0LCAyOSwgMjMyLCAxMTQsIDIzMywgNTIsIDIyNCwgMjksIDIzMiwgCisgICAgMTE0LCAyMjIsIDI1NCwgMjI0LCAyOSwgMjE0LCAxNjAsIDIzMywgNTIsIDIyNCwgMjksIDIxNCwgMTYwLCA0MywgMjIsIAorICAgIDIzMiwgMTE0LCA0MywgMjIsIDIzMiwgMTE0LCAyMjIsIDI1NCwgMjI0LCAyOSwgMjE0LCAxNjAsIDQzLCAyMiwgMjMyLCAKKyAgICAxMTQsIDIyMiwgMjU0LCAyMjQsIDI5LCAyMTQsIDE2MCwgNDMsIDIyLCAyMTQsIDE2MCwgNDQsIDIyLCAyMzIsIDExNCwgCisgICAgMjMzLCA1MiwgMjI0LCAyOSwgMjE0LCAxNjAsIDQzLCAyMiwgMjE0LCAxNjAsIDQ0LCAyMiwgMjMyLCAxMTQsIDIyMiwgMjU0LCAKKyAgICAyMjQsIDI5LCAyMTQsIDE2MCwgMjIyLCAyNTQsIDIyNCwgMjksIDIxNCwgMTYwLCA0NCwgMjIsIDIzMiwgMTE0LCAyMzMsIAorICAgIDUyLCAyMjQsIDI5LCAyMTQsIDE2MCwgNDQsIDIyLCAyMzIsIDExNCwgNDMsIDIyLCAyMzIsIDExNCwgMjIyLCAyNTQsIDg1LCAKKyAgICAyMTgsIDIzNiwgNzEsIDIxOCwgMjM2LCA3MSwgNDIsIDIsIDIyMiwgMTg1LCAyNDksIDE2NywgNzEsIDQyLCAyNDksIDE5NSwgCisgICAgODUsIDQsIDIxOCwgMjM2LCA0MiwgMiwgMjAzLCAyNDQsIDExMywgNDIsIDIsIDY3LCAyNDQsIDExMywgNDIsIDIsIDIyNiwgCisgICAgMTQ4LCAyNDksIDEzNCwgMjQ0LCAxMTMsIDQyLCAyLCAyMTQsIDE2MCwgNDMsIDIxNiwgNDMsIDIzMiwgMTE0LCA0NCwgMjQ0LCAKKyAgICAxMTMsIDQyLCAyLCAyMTQsIDE2MCwgNDQsIDIxNiwgNDMsIDIzMiwgMTE0LCA0MywgMjQ0LCAxMTMsIDQyLCAyLCAyNDgsIDcsIAorICAgIDI0OSwgMTM0LCAyNDQsIDExMywgODUsIDQsIDIxOCwgMjM2LCA3MSwgNCwgMjE4LCAyMzYsIDg1LCAyMjMsIDExOSwgNzEsIAorICAgIDIyMywgMTE5LCA4NSwgNjcsIDIyMywgMTE5LCA3MSwgNjcsIDIyMywgMTE5LCA4NSwgMjI2LCAxMCwgNzEsIDIyNiwgMTAsIAorICAgIDg1LCAyMTQsIDE2MiwgMjE1LCAyMjYsIDcxLCAyMTQsIDE2MiwgMjE1LCAyMjYsIDg1LCAyMTQsIDE2MiwgNCwgMjE1LCAKKyAgICAyMjYsIDcxLCAyMTQsIDE2MiwgNCwgMjE1LCAyMjYsIDg1LCAyMjIsIDI1MCwgMjE1LCAyMjYsIDcxLCAyMjIsIDI1MCwgCisgICAgMjE1LCAyMjYsIDg1LCAyMjIsIDI1MCwgNCwgMjE1LCAyMjYsIDcxLCAyMjIsIDI1MCwgNCwgMjE1LCAyMjYsIDg1LCAyMjIsIAorICAgIDI1MCwgMjI1LCAxMSwgNzEsIDIyMiwgMjUwLCAyMjUsIDExLCA4NSwgMjQ2LCAxMTMsIDIxNSwgMjI2LCA3MSwgMjQ2LCAKKyAgICAxMTMsIDIxNSwgMjI2LCA4NSwgMjQ2LCAxMTMsIDQsIDIxNSwgMjI2LCA3MSwgMjQ2LCAxMTMsIDQsIDIxNSwgMjI2LCA4NSwgCisgICAgMjMzLCA0OCwgMjE1LCAyMjYsIDcxLCAyMzMsIDQ4LCAyMTUsIDIyNiwgODUsIDIzMywgNDgsIDQsIDIxNSwgMjI2LCA3MSwgCisgICAgMjMzLCA0OCwgNCwgMjE1LCAyMjYsIDg1LCAyMzMsIDQ4LCAyMjUsIDExLCA3MSwgMjMzLCA0OCwgMjI1LCAxMSwgODUsIAorICAgIDI0OCwgMCwgNzEsIDI0OCwgMCwgNzEsIDI0OCwgMSwgMjQ5LCAxOTUsIDg1LCA0LCAyNDgsIDAsIDI0NCwgOTcsIDIzMiwgCisgICAgMTEwLCA3MSwgMjUwLCA0MywgMjQ2LCAxMjYsIDI1MCwgNDMsIDI1MCwgNDQsIDIsIDY3LCAyNDQsIDExMywgMjUxLCAxMTksIAorICAgIDg1LCAyNTAsIDQzLCAyNTAsIDQ0LCAyLCA0MywgMTYzLCAyNTEsIDIyOSwgMjUwLCA0NCwgMiwgNDQsIDE2MywgMjUxLCAKKyAgICAyMjksIDI1MCwgNDQsIDIsIDIzMiwgMTE0LCAxNjMsIDI1MSwgMjI5LCAyNTAsIDQ0LCAyLCAyMTQsIDE2MCwgMTYzLCAyNTEsIAorICAgIDIyOSwgMjUwLCA0NCwgMiwgMjE0LCAxNjAsIDQ0LCAyMjQsIDI5LCAyNTEsIDIyOSwgMjUwLCA0NCwgMiwgMjU0LCAxNjQsIAorICAgIDI1MSwgOTYsIDIxNCwgMTYwLCA0MywgMjI0LCAyOSwgMjUxLCAyMjksIDQzLCAxNjMsIDg1LCAyNTAsIDQzLCA0NCwgMTYzLCAKKyAgICA4NSwgMjUwLCA0MywgMjM1LCAyMDEsIDI1MSwgMTIxLCAyMzUsIDIwMSwgNzEsIDI1MCwgNDMsIDIxNCwgMTYwLCAxNjMsIAorICAgIDIzNSwgMjAxLCA3MSwgMjUwLCA0MywgMjMyLCAxMTQsIDE2MywgMjM1LCAyMDEsIDcxLCAyNTAsIDQzLCAyMTQsIDE2MCwgCisgICAgNDMsIDIyNCwgMjksIDI1MCwgNDEsIDI1NCwgMzMsIDIxNCwgMTYwLCA0NCwgMjI0LCAyOSwgMjUwLCA0MSwgMjU0LCAzMywgCisgICAgMjMyLCAxMTQsIDQ0LCAyMjQsIDI5LCAyNTAsIDQxLCAyNTQsIDMzLCAyMzIsIDExNCwgNDMsIDIyNCwgMjksIDI1MCwgNDEsIAorICAgIDI1NCwgMzMsIDIxNCwgMTYwLCAxNjMsIDI1MCwgNDMsIDIzMiwgMTE0LCAxNjMsIDI1MCwgNDMsIDg1LCAyMzIsIDExNCwgCisgICAgNDQsIDIxNSwgMjI2LCA4NSwgMjMyLCAxMTQsIDQzLCAyMTUsIDIyNiwgODUsIDIxNCwgMTYwLCA0MywgMjE1LCAyMjYsIDg1LCAKKyAgICAyMTQsIDE2MCwgNDQsIDIxNSwgMjI2LCA3MSwgMjUxLCAxMjEsIDQyLCAyLCA0MywgMTYzLCAyNTEsIDIyOSwgNDIsIDIsIAorICAgIDQ0LCAxNjMsIDI1MSwgMjI5LCA0MiwgMiwgMjE0LCAxNjAsIDQzLCAyNDgsIDcsIDE2MywgMjUxLCAyMjksIDQyLCAyLCAKKyAgICAyMzIsIDExNCwgNDQsIDI0OCwgNywgMTYzLCAyNTEsIDIyOSwgNzEsIDQyLCAyLCA2NywgMjUxLCAyNDAsIDIzMiwgMjE5LCAKKyAgICA3MSwgMjE0LCAxNjIsIDIxNSwgMjI3LCAyLCAyNDcsIDEyOCwgMjE0LCAxNjIsIDIxNSwgMjI3LCAyLCA0MywgMTYzLCAyNTEsIAorICAgIDIyOSwgMjE0LCAxNjIsIDIxNSwgMjI3LCAyLCA0NCwgMTYzLCAyNTEsIDIyOSwgMjMzLCA5MSwgMjUwLCA0MywgNzEsIDQyLCAKKyAgICAyLCAyMTQsIDE2MCwgNDMsIDIyNCwgMjgsIDcxLCA0MiwgMiwgMjMyLCAxMTQsIDQzLCAyMjQsIDI4LCA3MSwgNDIsIDIsIAorICAgIDIzMiwgMTE0LCA0NCwgMjI0LCAyOCwgNzEsIDQyLCAyLCAyMTQsIDE2MCwgNDQsIDIyNCwgMjgsIDcxLCAyNTAsIDQ0LCAyLCAKKyAgICAyMTQsIDE2MCwgNDMsIDIyNCwgMjgsIDcxLCAyNTAsIDQ0LCAyLCAyMzIsIDExNCwgNDMsIDIyNCwgMjgsIDcxLCAyNTAsIAorICAgIDQ0LCAyLCAyMzIsIDExNCwgNDQsIDIyNCwgMjgsIDcxLCAyNTAsIDQ0LCAyLCAyMTQsIDE2MCwgNDQsIDIyNCwgMjgsIDIxNCwgCisgICAgMTYwLCA0MywgMjE1LCAyMjYsIDIxNCwgMTYwLCA0NCwgMjE1LCAyMjYsIDIzMiwgMTE0LCA0MywgMjE1LCAyMjYsIDcxLCAKKyAgICAyMzEsIDg3LCAyMTgsIDIzNiwgODUsIDIzMSwgODcsIDIxOCwgMjM2LCA3MSwgMjMxLCA4NywgNCwgMjE4LCAyMzYsIDg1LCAKKyAgICAyMzEsIDg3LCA0LCAyMTgsIDIzNiwgMjMyLCAxMTQsIDQ0LCAyMTUsIDIyNiwgODUsIDIxOCwgMzksIDIsIDIyMywgMTM1LCAKKyAgICAyNDksIDI1NSwgMjE0LCAxOTQsIDIxOSwgNjIsIDI0OSwgMjMwLCA4NSwgMjE4LCAxNTgsIDcxLCAyMTgsIDE1OCwgMjMyLCAKKyAgICAyMzQsIDIxNiwgMTMzLCAyMTgsIDM4LCAyNTMsIDI0MiwgMjI4LCA3NiwgMjQ4LCA0NiwgMjI4LCA3NiwgMjQ5LCAyMDMsIAorICAgIDIyNiwgMTY3LCA4NSwgMjE3LCAxLCA3MSwgMjE3LCAxLCAyNTIsIDE2NCwgMjUxLCAxNzEsIDI1MiwgMTY0LCA5MywgMiwgCisgICAgMjUwLCAxMzcsIDI1MiwgMTY0LCA5MywgMiwgMjExLCAxNzgsIDIyMiwgMCwgMjE0LCAxOTUsIDIsIDIyMywgMTYzLCAyNDYsIAorICAgIDkyLCAyNDAsIDI1MCwgMjUyLCAzMCwgNzEsIDIyMCwgNCwgMjI1LCAxMDQsIDg1LCAyMjAsIDQsIDIyNSwgMTA0LCAyMjAsIAorICAgIDg5LCAyMjMsIDUyLCAyMjIsIDE4OSwgMjQ0LCA2MywgMjQxLCAyMzUsIDI1MSwgMTIxLCA4NSwgNDMsIDIyNSwgMTAsIDIzNSwgCisgICAgMjQ5LCA4NSwgNDQsIDIyNSwgMTAsIDIzNSwgMjQ5LCA3MSwgNDMsIDIyNSwgMTAsIDIzNSwgMjQ5LCA3MSwgMTIwLCAyMjUsIAorICAgIDEwLCAyMzUsIDI0OSwgNzEsIDQ0LCAyMjUsIDEwLCAyMzUsIDI0OSwgNzEsIDEyNCwgMjI1LCAxMCwgMjM1LCAyNDksIDIxOSwgCisgICAgMTAzLCAyMiwgMjQ5LCAxMzcsIDI1MCwgMjI3LCA1MCwgMjIzLCAxNzUsIDUwLCAyNTEsIDI0NywgNTAsIDI1MSwgMzMsIAorICAgIDI1NCwgMTEwLCAyMjYsIDE0OSwgMjQ5LCAxMzgsIDI1MCwgMTE5LCAyMjMsIDQwLCAyNDksIDEzOSwgNjQsIDIzMiwgMTI0LCAKKyAgICAyNDksIDEzOSwgNjQsIDIzNSwgMTIyLCAyMTgsIDE1OSwgMjIsIDI0OSwgMTQ0LCAyNDQsIDE3NiwgODcsIDI1NSwgMSwgCisgICAgMjIwLCA5MSwgMjQyLCAyOSwgMjIsIDIxOSwgMTkxLCAyMjUsIDIyMywgODcsIDIxMCwgMjU0LCAyMTEsIDY5LCAyMTUsIAorICAgIDIxNiwgMzEsIDI0MSwgMjMwLCAyMTUsIDIxNiwgMzEsIDIzMywgMTEzLCAyMTUsIDIxNiwgMzEsIDI0NCwgMTA0LCAyMTUsIAorICAgIDIxNiwgMzEsIDIxNiwgMTM0LCAyMTUsIDIxNiwgMzEsIDIxMSwgMjM5LCAyMTUsIDIxNiwgMzEsIDIxMiwgNDAsIDIxNSwgCisgICAgMjE2LCAzMSwgMjMwLCAxMjAsIDIxNSwgMjE2LCAzMSwgMjQ1LCAyMzEsIDIxMiwgMSwgNjQsIDI0OCwgMjYsIDcxLCAyNDMsIAorICAgIDI0NywgMjQ0LCAxOTgsIDcxLCAyMTksIDc2LCAyNDQsIDE5OCwgODUsIDIxOSwgNzYsIDI0NCwgMTk4LCA3MSwgMjE4LCAzOSwgCisgICAgMiwgMjIzLCAxMzUsIDI0NCwgMTAwLCAyMjQsIDI1LCAyMzAsIDEzMywgMjMzLCA4NiwgMjI0LCAyNSwgMjMwLCAxMzMsIAorICAgIDIzMSwgNTksIDI0NCwgMTQ2LCA1MCwgMjQ1LCAyMzEsIDIzMSwgMTk1LCA1MCwgMjM1LCA0NCwgMjIxLCAyMjIsIDIxNCwgCisgICAgMTQ1LCAyMjksIDk4LCAyMjUsIDIzLCAyNTQsIDIwLCAyMTcsIDQxLCAyNDMsIDU5LCAyNTEsIDExLCAyMzMsIDI1LCAyMTMsIAorICAgIDE1MCwgMjMyLCAyNDQsIDIyMSwgMTkzLCAyMjIsIDIxLCAyNTEsIDAsIDI1NCwgNTAsIDIyNSwgNTUsIDcxLCAyNTAsIDEyNSwgCisgICAgMjM0LCA4NCwgNzEsIDI1MCwgMTI1LCAyMjQsIDE3LCA3MSwgMjUwLCAxMjUsIDIyMiwgMTk3LCA3MSwgMjUwLCAxMjUsIAorICAgIDI1MSwgMjM5LCA3MSwgMjUwLCAxMjUsIDIzNCwgMzYsIDcxLCAyNTAsIDEyNSwgMjI1LCAyMzUsIDg1LCAyNTAsIDEyNSwgCisgICAgMjM0LCA4NCwgODUsIDI1MCwgMTI1LCAyMjQsIDE3LCA4NSwgMjUwLCAxMjUsIDIyMiwgMTk3LCA4NSwgMjUwLCAxMjUsIAorICAgIDI1MSwgMjM5LCA4NSwgMjUwLCAxMjUsIDIzNCwgMzYsIDg1LCAyNTAsIDEyNSwgMjI1LCAyMzUsIDg1LCAyMTksIDE4LCAKKyAgICAyMTgsIDUxLCA3MSwgMjQxLCAyMzUsIDIxOCwgNTEsIDcxLCAyNDgsIDEsIDIxOCwgNTEsIDg1LCAyNDksIDI1MywgMjE4LCAKKyAgICA1MSwgNzEsIDIxOSwgMTgsIDIxOCwgNTEsIDg1LCAyNDEsIDIzNSwgMjE4LCA1MSwgODUsIDI0OCwgMSwgMjE4LCA1MSwgNzEsIAorICAgIDI0OSwgMjUzLCAyMTgsIDUxLCAyNDAsIDI1MCwgMjE4LCAyNDAsIDIyNCwgMjUsIDIyOCwgNTIsIDI0NSwgMTk3LCAyMjgsIAorICAgIDUyLCAyNTIsIDgxLCAyNDUsIDE5NywgMjI4LCA0NywgMjUyLCA4MSwgMjE5LCAxMjAsIDIyOCwgNDcsIDIzMCwgNjIsIDI0NCwgCisgICAgNzQsIDUwLCAyMzAsIDYyLCAyMjksIDE5MywgNTAsIDIzMCwgNjIsIDIyMCwgNzgsIDUwLCAyMTIsIDksIDE4MywgMjQ5LCAKKyAgICAxMzgsIDI0NSwgMjI4LCAxODMsIDI0OSwgMTM4LCAyMTQsIDE3MSwgMjIzLCAxMTUsIDg3LCAyMjMsIDExNSwgMTYsIDMxLCAKKyAgICAyMTUsIDQ4LCAyMjUsIDM3LCAyMjMsIDExNSwgMTYsIDMxLCAyMTUsIDQ3LCAyMjUsIDM3LCAyMjMsIDExNSwgMTYsIDMxLCAKKyAgICAyMTUsIDQ2LCAyMjUsIDM3LCAyMjMsIDExNSwgMTYsIDMxLCAyMTUsIDQ1LCAyMjUsIDM3LCAyMjMsIDExNSwgMTYsIDMxLCAKKyAgICAyMTUsIDQ0LCAyMjUsIDM3LCAyMjMsIDExNSwgMTYsIDMxLCAyMTUsIDQzLCAyMjUsIDM3LCAyMjMsIDExNSwgMTYsIDMxLCAKKyAgICAyMTUsIDQyLCAyMjUsIDM3LCAyMjMsIDExNSwgMTYsIDMxLCAyNDMsIDU3LCAyMzEsIDE0MywgODUsIDIxNCwgMTcxLCAyMjMsIAorICAgIDExNSwgODcsIDIyMywgMTE2LCAyMjYsIDI0LCA4NywgMjI2LCAwLCAyMjYsIDI0LCA4NywgMjI1LCAxNzcsIDIyNiwgMjQsIAorICAgIDUwLCAyMTEsIDI1NSwgODcsIDI0NywgMjQ5LCAyNDQsIDE5NywgMjQ3LCAyNDksIDI0NCwgMTk2LCAyNDcsIDI0OSwgMjQ0LCAKKyAgICAxOTUsIDI0NywgMjQ5LCAyNDQsIDE5NCwgMjQ3LCAyNDksIDI0NCwgMTkzLCAyNDcsIDI0OSwgMjQ0LCAxOTIsIDcxLCAyNTAsIAorICAgIDQ0LCAyLCA1OSwgMjIyLCAyNTQsIDcxLCAyNTAsIDQ0LCAyLCAxMTMsIDI0NywgMTI2LCA4NSwgMjUwLCA0NCwgMiwgNzEsIAorICAgIDU5LCAyMjIsIDI1NCwgODUsIDI1MCwgNDQsIDIsIDExMywgNzEsIDI0NywgMTI2LCAyMzAsIDE0NywgMzEsIDIxMSwgNjksIAorICAgIDIzMCwgMTQ3LCAzMSwgMjEwLCAyNTMsIDI0NywgMjMyLCAzMSwgMjQyLCAxMzgsIDIxMSwgNjksIDI0NywgMjMyLCAzMSwgCisgICAgMjMzLCAxOSwgMjEwLCAyNTMsIDI0NywgMjMyLCAzMSwgMjMzLCAxOSwgMjExLCA2OSwgMjQ3LCAyMzIsIDMxLCAyNDIsIAorICAgIDEzOCwgMjEwLCAyNTMsIDcxLCAyNDQsIDgxLCA4NSwgMjQ0LCA4MSwgMjQyLCAyOSwgMjIsIDIyNSwgMTA3LCAyNTQsIDEyOCwgCisgICAgMjQ5LCAxMzYsIDIxNywgMjM2LCAyMTgsIDE2NiwgNjQsIDI1NCwgMjM1LCAyMjEsIDIwOCwgMjU0LCAxNzgsIDI0NCwgNTksIAorICAgIDI0MywgNjcsIDIxOCwgMTY2LCA2NCwgMjQxLCAyMDksIDI1MywgMjA3LCA4NywgMjQ0LCA3MCwgMjI2LCAxMzAsIDcxLCAKKyAgICAyMTgsIDE1OCwgMTM0LCAyMzIsIDIxNCwgMjQ5LCAxODMsIDIyMiwgMjU0LCAxMzQsIDIzMiwgMjE0LCAyNDksIDE4MywgCisgICAgMjMzLCA1MiwgMjEyLCA1MCwgNTAsIDEyNSwgMjEzLCAxMzAsIDUwLCAyNDYsIDExOCwgMjQ0LCAxNDYsIDUwLCAyNDYsIAorICAgIDExOCwgMjMxLCAxOTUsIDUwLCAyMzUsIDIxMCwgMjQ0LCAxNDYsIDIyLCAyMzEsIDE5NSwgNTAsIDIzMSwgMTk1LCAyMiwgCisgICAgMjQ0LCAxNDYsIDUwLCAyMzEsIDE5NSwgMiwgMjE4LCAxMDUsIDUwLCAyMzEsIDE5NSwgMiwgMjE4LCAxMDUsIDIyLCAyMzEsIAorICAgIDE5NSwgMjIsIDI0NCwgMTQ2LCA1MCwgNjcsIDIzMSwgMTk1LCAyLCAyMTgsIDEwNSwgNTAsIDIwMywgMjMxLCAxOTUsIDIsIAorICAgIDIxOCwgMTA1LCA1MCwgMjMxLCA4NywgNzEsIDI1MCwgNDMsIDIzMSwgODcsIDg1LCAyNTAsIDQzLCAyMzEsIDg3LCA0LCA3MSwgCisgICAgMjUwLCA0MywgMjMxLCAxNTgsIDg3LCAyNDcsIDE3NSwgODcsIDIxNCwgMTY5LCAyMjUsIDI1NSwgODcsIDI0OSwgMjM5LCAKKyAgICAyNDMsIDIzMSwgMjE0LCAxNDEsIDIyOSwgOTMsIDI1MCwgMTY5LCAyMjYsIDY1LCAyMzUsIDUwLCAyMTMsIDE4NSwgMjUwLCAKKyAgICAxMDEsIDg1LCAyMzAsIDEzNCwgMjMyLCAyMzEsIDIyMCwgMTE0LCAyMjAsIDE0OSwgMjI0LCA4LCAyMjAsIDEzMiwgMjE5LCAKKyAgICA1NywgMjUyLCAxNjcsIDI1MiwgMTM0LCA5MiwgMjM0LCAxNDQsIDcxLCAyNDYsIDEwMSwgMjMxLCAxOTAsIDcxLCAyNDYsIAorICAgIDEwMSwgMjM0LCA4NCwgODUsIDI0NiwgMTAxLCAyMzEsIDE5MCwgODUsIDI0NiwgMTAxLCAyMzQsIDg0LCAyMTksIDYzLCAKKyAgICAyMTEsIDIzMCwgMjE5LCA2NiwgMjE4LCAzOSwgMjUyLCA1OSwgMjQ5LCAyNTUsIDIyMywgMTYyLCA4NSwgMjE5LCA2MiwgCisgICAgMjE2LCAxMzUsIDI1MCwgMCwgMjIsIDIyMywgMTYyLCAyMTUsIDk0LCA3MSwgMjIwLCA0LCAyMjUsIDEwNCwgMjE1LCA5NCwgCisgICAgODUsIDIyMCwgNCwgMjI1LCAxMDQsIDcxLCAyNDgsIDEsIDIzNiwgNywgMjE4LCAyMzYsIDI0OSwgMTMzLCAyMzMsIDk3LCAKKyAgICAyNDcsIDIwMSwgMjUwLCAyNTIsIDIyNiwgMTcwLCAyMjUsIDEwNywgMjUwLCAyNTMsIDIxOSwgOTAsIDI0MSwgMjE5LCAyLCAKKyAgICA3MSwgMjQ5LCAxMzgsIDM3LCAyNDksIDEzMywgMjMzLCA5NywgMjUwLCAxNjEsIDIyOCwgODAsIDI0NSwgMTMyLCAyNTQsIAorICAgIDE0OSwgMjI2LCAxOTUsIDQzLCAyMTIsIDI2LCAyMTUsIDI1MiwgODUsIDIxNSwgNTUsIDQzLCAyMTIsIDI2LCAyMTUsIDI1MiwgCisgICAgNzEsIDIxNSwgNTUsIDQzLCAyMTIsIDI2LCAyMTUsIDI1MiwgODUsIDQzLCAyMzMsIDk4LCAyMzEsIDU4LCA3MSwgNDMsIAorICAgIDIzMywgOTgsIDIzMSwgNTgsIDI0NiwgOTcsIDIxOSwgODQsIDUwLCAxMTQsIDcxLCAyNDYsIDExMywgMjE1LCAyMjYsIDQzLCAKKyAgICAyNTAsIDgsIDI0NSwgMTMyLCA5MiwgMjIyLCAwLCAyNDQsIDE4MywgMjQ4LCA3LCAyMzYsIDcsIDcxLCAyNTAsIDQ0LCAyMzYsIAorICAgIDcsIDg1LCAyMTgsIDIzNiwgODUsIDIxNSwgMTkzLCAyMjMsIDYzLCA0MywgMjQ1LCAxMzEsIDIyMywgNjMsIDQzLCAyNDUsIAorICAgIDEzMCwgMjUzLCAyMTksIDE2LCAzMSwgMjE0LCAxNDUsIDExNCwgMjUwLCA0NCwgMiwgMjE4LCAxMDUsIDIyLCAxMTMsIDE3MCwgCisgICAgNDgsIDIyNSwgMTkyLCAyMjIsIDI1MSwgMjM1LCAyMTIsIDIyNSwgMTkyLCAyMzMsIDQ5LCAyMzUsIDIxMiwgMjI1LCAxOTIsIAorICAgIDIzNSwgMjAwLCAyMjUsIDE5MiwgODUsIDI0OSwgMTM5LCAyMjYsIDIwMSwgMjIwLCAzMSwgMjIwLCAxOSwgMjE5LCAyMzEsIAorICAgIDI1MCwgNjksIDI1MCwgMjM0LCAyNDEsIDE2NCwgMjE5LCAxMjgsIDI0MywgNjgsIDIxMSwgMjMwLCAyNDAsIDIyNywgMjQzLCAKKyAgICA2OCwgMiwgMjQyLCAxOSwgMjMxLCAxNzgsIDE2LCAzMSwgMjMyLCAyMzUsIDIzMCwgMTIwLCAyMTQsIDE5NSwgMjI2LCAyMDEsIAorICAgIDI0MiwgMTI5LCAyNDQsIDIwLCAyNDQsIDgyLCAyMzYsIDcsIDI0MSwgNjYsIDI0NCwgMTM3LCAyMjIsIDE2LCA0MiwgMjQ0LCAKKyAgICAxOSwgMjQ5LCAxNjcsIDIxOSwgMTA2LCAyNDAsIDExOSwgMjE5LCAxMDksIDIyNSwgMTcxLCAyLCAyNTIsIDE2NywgMjE2LCAKKyAgICAyNDMsIDIzNSwgMTM3LCAyNTIsIDE1NCwgODcsIDI0MSwgMjM4LCAyNDIsIDE0MCwgODcsIDI0MywgMjM5LCAyMjQsIDE0NSwgCisgICAgMjQ5LCAxMTEsIDIyNiwgMjAxLCA4NSwgMjE4LCAyMzYsIDcxLCAyNDQsIDgyLCAyLCAyMDMsIDIzMCwgMjI5LCA4NSwgMjE4LCAKKyAgICAxMDYsIDIxNCwgMTYwLCAyNTEsIDIyNSwgMjIxLCAxOTUsIDg1LCAyMjEsIDE5NSwgMjMyLCAxMTQsIDI1MSwgMjI1LCAyMjEsIAorICAgIDE5NSwgNzEsIDIyMSwgMTk1LCA3MSwgMTE0LCAyNTAsIDEzOCwgNzksIDIxNywgMiwgMjMyLCAxNjAsIDUwLCAyMTcsIDU0LCAKKyAgICAyNDYsIDk2LCAyNTQsIDIwMCwgMjQ1LCAxMjcsIDIyMywgMTYwLCAyNDQsIDkzLCAyMjMsIDE2MCwgMjQyLCAyMiwgMjEzLCAKKyAgICAxNzQsIDI0MiwgMjIsIDIxMSwgMTk4LCAyNDIsIDIyLCAyMzIsIDExNCwgNDQsIDIyNSwgMjAxLCAyMjUsIDIwMSwgMjE0LCAKKyAgICAxNjAsIDQ0LCAyMjUsIDIwMSwgNzEsIDIyOCwgMjM1LCA4NSwgMjI4LCAyMzUsIDI1MCwgMTM4LCA3OSwgMTE0LCAyNTAsIAorICAgIDEzOCwgNzksIDIzMCwgODksIDIxMSwgMTc4LCAxMTQsIDIzMCwgODksIDIxMSwgMTc4LCAyNTIsIDE2NCwgMjExLCAxNzgsIAorICAgIDExNCwgMjUyLCAxNjQsIDIxMSwgMTc4LCAyMjYsIDEzMCwgMjYsIDI0OSwgMTM4LCAxMTQsIDI2LCAyNDksIDEzOCwgMjA0LCAKKyAgICAyNTAsIDE4MywgMjQ5LCAxMzgsIDExNCwgMjA0LCAyNTAsIDE4MywgMjQ5LCAxMzgsIDcsIDI0OSwgMTM4LCAyMjAsIDkzLCAKKyAgICA3MSwgNywgMjQ5LCAxMzgsIDIyNiwgMTMwLCA3LCAyNDksIDEzOCwgMjMxLCAxOTIsIDI0OSwgMTM4LCAyMTgsIDE1OSwgNjQsIAorICAgIDI0OCwgMTU3LCAyNDQsIDE5LCAyMTcsIDE2LCAyNTMsIDIyNCwgMjQ0LCAxOSwgMjUyLCAxNjUsIDI1MywgMjI0LCAxMTQsIAorICAgIDI0NCwgMTksIDI1MiwgMTY1LCAyNTMsIDIyNCwgMjQ0LCAxOSwgMjQ5LCAyNTEsIDI1MywgMjI0LCA4NSwgMjQ0LCAxOSwgCisgICAgMjI1LCAxMiwgMjE4LCAxNTgsIDcxLCAyNDQsIDE5LCAyMjUsIDEyLCAyMTgsIDE1OCwgMjE5LCAxMywgMjE4LCAxMTMsIAorICAgIDIyNiwgMTMwLCA3MSwgMjE4LCAxNTgsIDM3LCA3MSwgMjE4LCAxNTgsIDIwNCwgMjUwLCAxODMsIDg1LCAyMTgsIDE1OCwgCisgICAgODUsIDI1MCwgMTgzLCA3MSwgMjE4LCAxNTgsIDIyNiwgMTMwLCA4NSwgMjE4LCAxNTgsIDExNCwgMjI2LCAxMzAsIDg1LCAKKyAgICAyMTgsIDE1OCwgMjI1LCA2MywgMjE4LCAxNTgsIDIyMCwgOTMsIDcxLCAyMTgsIDE1OCwgMTE0LCAyNTMsIDIyNCwgMjA0LCAKKyAgICAyNTAsIDE4MywgMjUzLCAyMjQsIDI0NSwgMjAxLCAyMTgsIDI0NiwgMjUzLCAyMjQsIDI0NSwgMjAxLCAyMjUsIDEyLCA4NSwgCisgICAgMjE4LCAxNTgsIDI0NSwgMjAxLCAyMjUsIDEyLCAyMjUsIDYzLCAyMTgsIDE1OCwgMjE5LCAxMjcsIDIyNSwgMTIsIDg1LCAKKyAgICAyMTgsIDE1OCwgMjQ1LCAyMDEsIDIyNSwgMTIsIDIyMywgMTE3LCA4NSwgMjE4LCAxNTgsIDExNCwgMjQ1LCAyMDEsIDIyNSwgCisgICAgMTIsIDIyMywgMTE3LCA4NSwgMjE4LCAxNTgsIDIxNSwgNzcsIDIyNSwgMTIsIDg1LCAyMTgsIDE1OCwgMjE5LCAxMjIsIAorICAgIDIyNSwgMTIsIDI1MywgMjI0LCAyMTcsIDE2LCAyNTMsIDIyNCwgMjA0LCAyNTAsIDE4MywgMjE3LCAxNiwgMjUzLCAyMjQsIAorICAgIDExNCwgMjE3LCAxNiwgMjUzLCAyMjQsIDIxOSwgMTI3LCAyMjUsIDE2MCwgODUsIDIyLCA3MSwgMjQ0LCA2MiwgODUsIDI0NCwgCisgICAgNjIsIDcxLCAyNDQsIDYyLCAyNDUsIDIwMSwgMjI1LCAxNjAsIDIyNiwgMTMwLCA4NSwgMjQ0LCA2MiwgMzcsIDIwNCwgMjUwLCAKKyAgICAxODMsIDI0NSwgMjAxLCAyMjUsIDEyLCAyMTgsIDE1OCwgMTE0LCAyMTcsIDE2LCAyMjUsIDYzLCAyNTMsIDIyNCwgMjE5LCAKKyAgICA2NCwgMjE2LCAxMDYsIDIxNSwgMjE5LCAyMTksIDY0LCAxMTQsIDI1MCwgMTIyLCAyMTksIDY0LCAyMTksIDE1LCAxMTQsIAorICAgIDIxOSwgMTUsIDI1MiwgMTY1LCAyNTMsIDIyNCwgMjQ1LCAyMDEsIDIxNywgMTYsIDIyNCwgMTc0LCAyNTMsIDIyNCwgMTE0LCAKKyAgICAyNDUsIDIwMSwgMjE3LCAxNiwgMjI0LCAxNzQsIDI1MywgMjI0LCAyNDksIDEzOSwgNzksIDIyMCwgOTMsIDcxLCAyNTAsIAorICAgIDQzLCAxNTIsIDkyLCAyNDksIDEzOSwgNzksIDIzMiwgMTE0LCA0NCwgMjQ2LCA5NCwgNzEsIDIxOCwgMjM2LCAyMTQsIDE2MCwgCisgICAgNDQsIDI0NiwgOTQsIDcxLCAyMTgsIDIzNiwgMjMyLCAxMTQsIDQ0LCAyMjAsIDkzLCA3MSwgMjE4LCAyMzYsIDIxNCwgMTYwLCAKKyAgICA0NCwgMjIwLCA5MywgNzEsIDIxOCwgMjM2LCA4NSwgMjI0LCAxNiwgMTY0LCAyMjYsIDE1MSwgNzEsIDIyNCwgMTYsIDE2NCwgCisgICAgMjI2LCAxNTEsIDcxLCAyNDUsIDM5LCAxNjQsIDIyNiwgMTUxLCA4NSwgMjQ4LCAxLCAyMzAsIDE4NywgNzEsIDIxMSwgMTc4LCAKKyAgICAxMTQsIDI0NSwgMzksIDE2NCwgODcsIDE5MywgNjcsIDEzMCwgMjMxLCA4NywgNjcsIDEzMCwgMTE0LCA2NywgMTMwLCAxMTQsIAorICAgIDIxOSwgMTU3LCAyMTUsIDk0LCAyNDksIDIyOCwgMjI0LCAxLCAxNjQsIDIyNiwgMTUxLCAxMTQsIDIxOSwgMTU3LCAyNDksIAorICAgIDIyOCwgMjI0LCAxLCAxNjQsIDIyNiwgMTUxLCAxMTQsIDUyLCAyMTUsIDk0LCAyNDksIDIyOCwgMjI0LCAxLCAxNjQsIDIyNiwgCisgICAgMTUxLCAxMTQsIDUyLCAyNDksIDIyOCwgMjI0LCAxLCAxNjQsIDIyNiwgMTUxLCAxMTQsIDEyMSwgMjE5LCAxNTcsIDI0OSwgCisgICAgMjI4LCAyMjQsIDEsIDE2NCwgMjI2LCAxNTEsIDExNCwgMTIxLCA1MiwgMjQ5LCAyMjgsIDIyNCwgMSwgMTY0LCAyMjYsIAorICAgIDE1MSwgMjQ5LCA5OSwgMjE4LCAxNDIsIDIyNiwgMTksIDUsIDIyNiwgMTUxLCAxMTQsIDI0NSwgMzksIDE2NCwgMjI2LCAKKyAgICAxNTEsIDExNCwgMjQxLCAyMzUsIDI0NSwgMzksIDE2NCwgMjI2LCAxNTEsIDExNCwgODUsIDI0MSwgMjM0LCAyMjIsIDE4OSwgCisgICAgMTE0LCA4NSwgMjQxLCAyMzUsIDI1MSwgMTIxLCAyNDQsIDYzLCAyNDEsIDIzNCwgMjIyLCAxODksIDI0NCwgNjMsIDI0MSwgCisgICAgMjM1LCAyNTEsIDEyMSwgMjMxLCA4NywgNDMsIDIyNiwgOCwgMjI2LCAxNTEsIDIzMSwgODcsIDQ0LCAyMjYsIDgsIDIyNiwgCisgICAgMTUxLCAyMzEsIDg3LCAyNDQsIDcxLCA0MywgMjI2LCA4LCAyMjYsIDE1MSwgMjMxLCA4NywgMjQ0LCA3MSwgNDQsIDIyNiwgCisgICAgOCwgMjI2LCAxNTEsIDIzMSwgODcsIDIzMywgNDgsIDI1NCwgMTE4LCAyNTEsIDE2NiwgMjI2LCAxNTEsIDIzMSwgODcsIAorICAgIDIyMiwgMjUwLCAyNTQsIDExOCwgMjUxLCAxNjYsIDIyNiwgMTUxLCAxMTQsIDIzMywgNDgsIDI1NCwgMTE4LCAyMjQsIDEsIAorICAgIDE2NCwgMjI2LCAxNTEsIDExNCwgMjIyLCAyNTAsIDI1NCwgMTE4LCAyMjQsIDEsIDE2NCwgMjI2LCAxNTEsIDExNCwgMjMzLCAKKyAgICA0OCwgMjU0LCAxMTgsIDI1MSwgMTY2LCAyMjYsIDE1MSwgMTE0LCAyMjIsIDI1MCwgMjU0LCAxMTgsIDI1MSwgMTY2LCAyMjYsIAorICAgIDE1MSwgMTkzLCA0MywgMjE2LCA3LCAyMjAsIDU1LCAyNTEsIDE2NiwgMjI2LCAxNTEsIDE5MywgNDQsIDIxNiwgNywgMjIwLCAKKyAgICA1NSwgMjUxLCAxNjYsIDIyNiwgMTUxLCAyMzEsIDg3LCA0MywgMjQ5LCAxMDcsIDI1MSwgMTY2LCAyMjYsIDE1MSwgMjMxLCAKKyAgICA4NywgNDQsIDI0OSwgMTA3LCAyNTEsIDE2NiwgMjI2LCAxNTEsIDI0NywgMjEyLCAxNTIsIDM3LCAyMSwgMTExLCAyNDcsIAorICAgIDIxMiwgMTUyLCAzNywgMjEsIDEwNSwgMjQ3LCAyMTIsIDE1MiwgMzcsIDIxLCAxNTgsIDI0NywgMjEyLCAxNTIsIDM3LCAyMSwgCisgICAgMTYxLCAyNDcsIDIxMiwgMTUyLCAzNywgMjEsIDE5MCwgMjQ3LCAyMTIsIDE1MiwgMzcsIDIxLCAxOTUsIDI0NywgMjEyLCAKKyAgICAxNTIsIDM3LCAyMSwgMTk5LCAyNDcsIDIxMiwgMTUyLCAzNywgMjEsIDE5NiwgMjQ3LCAyMTIsIDE1MiwgMzcsIDIxLCAyMDEsIAorICAgIDI0NywgMjEyLCAxNTIsIDM3LCA1NCwgMjE2LCAyNDgsIDI0NywgMjEyLCAzNywgMzUsIDIxLCAxMTEsIDI0NywgMjEyLCAzNywgCisgICAgMzUsIDIxLCAxMDUsIDI0NywgMjEyLCAzNywgMzUsIDIxLCAxNTgsIDI0NywgMjEyLCAzNywgMzUsIDIxLCAxNjEsIDI0NywgCisgICAgMjEyLCAzNywgMzUsIDIxLCAxOTAsIDI0NywgMjEyLCAzNywgMzUsIDIxLCAxOTUsIDI0NywgMjEyLCAzNywgMzUsIDIxLCAKKyAgICAxOTksIDI0NywgMjEyLCAzNywgMzUsIDIxLCAxOTYsIDI0NywgMjEyLCAzNywgMzUsIDIxLCAyMDEsIDI0NywgMjEyLCAzNywgCisgICAgMzUsIDU0LCAyMTYsIDI0OCwgMjQ3LCAyMTIsIDE1MiwgMzcsIDM1LCAyMSwgMTExLCAyNDcsIDIxMiwgMTUyLCAzNywgMzUsIAorICAgIDIxLCAxMDUsIDI0NywgMjEyLCAxNTIsIDM3LCAzNSwgMjEsIDE1OCwgMjQ3LCAyMTIsIDE1MiwgMzcsIDM1LCAyMSwgMTYxLCAKKyAgICAyNDcsIDIxMiwgMTUyLCAzNywgMzUsIDIxLCAxOTAsIDI0NywgMjEyLCAxNTIsIDM3LCAzNSwgMjEsIDE5NSwgMjQ3LCAyMTIsIAorICAgIDE1MiwgMzcsIDM1LCAyMSwgMTk5LCAyNDcsIDIxMiwgMTUyLCAzNywgMzUsIDIxLCAxOTYsIDI0NywgMjEyLCAxNTIsIDM3LCAKKyAgICAzNSwgMjEsIDIwMSwgMjQ3LCAyMTIsIDE1MiwgMzcsIDM1LCA1NCwgMjE2LCAyNDgsIDExNCwgMjExLCAyNDYsIDk3LCA3NSwgCisgICAgMTE0LCA5NiwgNTAsIDExNCwgMjMwLCAxODcsIDUwLCAxMTQsIDI0NywgMTc3LCA1MCwgMTE0LCAyMTksIDMwLCAyNDUsIAorICAgIDIyOCwgNzUsIDExNCwgOTcsIDc1LCAxMTQsIDIyOCwgNjEsIDI0NSwgMjI4LCA3NSwgMjQ2LCAxMDYsIDIyNSwgMTQsIDk3LCAKKyAgICA3NSwgMTE0LCAyMjIsIDE4NiwgOTcsIDc1LCAyMTUsIDIyNSwgOTcsIDc1LCAxMTQsIDIxNSwgMjI1LCA5NywgNzUsIDI0OCwgCisgICAgMTYzLCAyMTUsIDIyNSwgOTcsIDc1LCAxMTQsIDI0OCwgMTYzLCAyMTUsIDIyNSwgOTcsIDc1LCA4NSwgOTcsIDc1LCAyMTYsIAorICAgIDE0NSwgMjE2LCAxMywgOTcsIDI1NCwgMSwgMjE2LCAxNDUsIDI1MSwgMTgxLCA5NywgMjU0LCAxLCA4NSwgOTcsIDI1NCwgMSwgCisgICAgMTE0LCA4NSwgMjQ5LCA5OSwgMjQ2LCAxMTIsIDIyLCA5NywgNzUsIDExNCwgODUsIDI0OSwgOTksIDIxNCwgMTUzLCAyMiwgCisgICAgOTcsIDc1LCAyMTgsIDIzMywgODUsIDk3LCA3NSwgMTE0LCAyNDksIDIxNCwgODUsIDk3LCA3NSwgMjIyLCAyNDksIDcxLCAKKyAgICA5NywgNzUsIDIzMywgNDcsIDcxLCA5NywgNzUsIDI1MiwgMTkxLCAyMjAsIDkzLCA3MSwgOTcsIDc1LCAyNDMsIDI0OSwgCisgICAgMjIwLCA5MywgNzEsIDk3LCA3NSwgMTE0LCAyMzIsIDExNCwgMjIyLCAyNDgsIDcxLCA5NywgNzUsIDExNCwgMjE0LCAxNjAsIAorICAgIDIyMiwgMjQ4LCA3MSwgOTcsIDc1LCAyMjgsIDU0LCAyMzIsIDExNCwgMjIyLCAyNDgsIDcxLCA5NywgNzUsIDI0OSwgMTA3LCAKKyAgICAyMzIsIDEyOSwgMjI4LCA1NCwgMjE0LCAxNjAsIDIyMiwgMjQ4LCA3MSwgOTcsIDc1LCAzNywgMTE0LCA3MSwgOTcsIDc1LCAKKyAgICAyMTEsIDI1MiwgOTcsIDc1LCAyNTEsIDIyOCwgMjE5LCAzMCwgMjQ1LCAyMjgsIDc1LCAyNTEsIDIyOCwgOTcsIDc1LCAyNTEsIAorICAgIDIyOCwgMjI4LCA2MSwgMjQ1LCAyMjgsIDc1LCAxMTQsIDI1MSwgMjI4LCAyMTksIDMwLCAyNDUsIDIyOCwgNzUsIDExNCwgCisgICAgMjUxLCAyMjgsIDk3LCA3NSwgMTE0LCAyNTEsIDIyOCwgMjI4LCA2MSwgMjQ1LCAyMjgsIDc1LCAyMTcsIDE4LCA5NywgNzUsIAorICAgIDExNCwgMjE3LCAxNywgOTcsIDc1LCAyMTIsIDE4LCA5NywgNzUsIDExNCwgMjEyLCAxOCwgOTcsIDc1LCAyMjYsIDE3NiwgCisgICAgOTcsIDc1LCA1MiwgMjQ5LCAxMDcsIDIzMiwgMTI5LCAxMzQsIDI0NywgMjIyLCAyNTQsIDExNywgNzEsIDIxNSwgMjI3LCAKKyAgICAyNDksIDE5NSwgNCwgNzEsIDIxNSwgMjI2LCAyMjUsIDE3NCwgMjA0LCAyMTgsIDY0LCAyMDQsIDIxOCwgMjIsIDQzLCAyMjIsIAorICAgIDkyLCAyNTIsIDE4MSwgMjQ4LCA2OCwgNDQsIDIyMiwgOTIsIDI1MiwgMTgxLCAyNDgsIDY4LCAxNzcsIDIsIDU5LCAyMzUsIAorICAgIDIyMiwgMjIzLCA1MywgMjE5LCA0OSwgMjI0LCAyMDQsIDIxOCwgNjQsIDIxOCwgMjMsIDIyNCwgMjA0LCAyMTksIDQ4LCA2NywgCisgICAgMjUyLCAxNDksIDIsIDIwMywgOTEsIDExLCAyMjIsIDIzMSwgMjQ4LCA2LCAyMDAsIDI0NywgMTc2LCAxMSwgMjQ0LCAxODMsIAorICAgIDI0OCwgNiwgOTIsIDIzMiwgMTUyLCAyNTQsIDEyNiwgOTIsIDIzMiwgMTUyLCAyMjYsIDE2MiwgNzEsIDI0OCwgMSwgMiwgCisgICAgMjUwLCAxODEsIDI0NywgMTI4LCAyMiwgMiwgMjQ3LCAxMjgsIDI0NSwgMTc4LCA2NCwgMjI2LCAxNzQsIDIxNCwgMTUyLCAKKyAgICAyMzIsIDExNCwgNDQsIDI0OSwgMTY5LCAyLCAyNDcsIDEyOCwgMjE0LCAxNjAsIDQzLCAyNDksIDE2OSwgMiwgMjQ3LCAxMjgsIAorICAgIDQzLCAyMjYsIDEzMiwgMjM1LCA3MiwgNDQsIDIyNiwgMTMyLCAyMzUsIDcyLCAyNDMsIDIzNiwgMjI2LCAxMzIsIDIzNSwgCisgICAgNzIsIDIzMywgOTEsIDEyMCwgMjE3LCA4OCwgMjMzLCA5MSwgMTI0LCAyMTcsIDg4LCA0MywgMjIsIDQ0LCA1MiwgMjE1LCAKKyAgICA5MywgNDMsIDIyLCA0NCwgMjE3LCA4OCwgNDMsIDIzMCwgOTIsIDIwMCwgNDQsIDIxNywgODgsIDIwMCwgNDMsIDIxNywgODgsIAorICAgIDEyMCwgMjE3LCA4OSwgMiwgMjUwLCA0NCwgNDgsIDIzMiwgMTExLCAyNDcsIDE4MSwgMjUxLCA4NiwgMjAzLCAyMjIsIDEzNSwgCisgICAgNzEsIDI0OSwgMjEzLCAyNDgsIDAsIDcxLCAyNDksIDIxMywgMjQ4LCAxLCAyLCAxNDAsIDIxNiwgMTE1LCA3MSwgMjQ5LCAKKyAgICAyMTMsIDI0OCwgMSwgMiwgOTcsIDIxNiwgMTE1LCA3MSwgNDIsIDIsIDE0MCwgMjE2LCAxMTUsIDcxLCA0MiwgMiwgOTcsIAorICAgIDIxNiwgMTE1LCAxMSwgNDMsIDcxLCA0MiwgMTI3LCAxMSwgNDQsIDcxLCA0MiwgMTI3LCAxMSwgNDMsIDI1NCwgMTE4LCAKKyAgICAxMjcsIDExLCA0NCwgMjU0LCAxMTgsIDEyNywgMTEsIDQzLCA1MiwgMjU0LCAxMTgsIDEyNywgMTEsIDQ0LCA1MiwgMjU0LCAKKyAgICAxMTgsIDEyNywgMTEsIDQzLCA3MSwgMjE2LCA3LCAyMjAsIDU1LCAxMjcsIDExLCA0NCwgNzEsIDIxNiwgNywgMjIwLCA1NSwgCisgICAgMTI3LCAxMSwgNDMsIDI0NCwgNzEsIDIyNiwgNywgMTEsIDQ0LCAyNDQsIDcxLCAyMjYsIDcsIDIxNCwgMTUzLCAyMjQsIDI3LCAKKyAgICA3NSwgMjQ2LCAxMTIsIDIyNCwgMjcsIDc1LCAyNTQsIDk2LCAyNDMsIDEwNSwgMjUwLCA0NCwgNzUsIDI1MCwgMTAsIDI0MywgCisgICAgMTA1LCAyNTAsIDQ0LCA3NSwgNDQsIDgwLCAyLCAzNywgMjI1LCAyNSwgMjAwLCAxNDAsIDc1LCAyMDAsIDk3LCA3NSwgMjAwLCAKKyAgICA0MywgNDQsIDc1LCAyMDAsIDE0MCwgNTIsIDc1LCAyMDAsIDk3LCA1MiwgNzUsIDIwMCwgNDMsIDQ0LCA1MiwgNzUsIDIwMCwgCisgICAgMTQwLCA4MCwgMjQzLCAyNTEsIDEzMCwgMjAwLCA5NywgODAsIDI0MywgMjUxLCAxMzAsIDIwMCwgMTQwLCA1MiwgODAsIAorICAgIDI0MywgMjUxLCAxMzAsIDIwMCwgOTcsIDUyLCA4MCwgMjQzLCAyNTEsIDEzMCwgMjAwLCA5NywgMjE4LCAyMzIsIDc1LCA0NiwgCisgICAgNDcsIDI1MSwgMjIzLCA0NiwgNDcsIDI0NywgMTI1LCA0NiwgNDcsIDI0NiwgMjUzLCA0NiwgNDcsIDI0NywgMTI0LCA0NiwgCisgICAgNDcsIDI0NiwgMTg5LCA0NiwgNDcsIDI0NywgNjAsIDQ2LCA0NywgMjQ2LCAyNTIsIDQ2LCA0NywgMjQ3LCAxMjMsIDQ2LCAKKyAgICA0NywgMjQ2LCAxNTcsIDQ2LCA0NywgMjQ3LCAyOCwgNDYsIDQ3LCAyNDYsIDIyMCwgNDYsIDQ3LCAyNDcsIDkxLCA0NiwgNDcsIAorICAgIDI0NiwgMTg4LCA0NiwgNDcsIDI0NywgNTksIDQ2LCA0NywgMjQ2LCAyNTEsIDQ2LCA0NywgMjQ3LCAxMjIsIDQ2LCA0NywgCisgICAgMjQ2LCAxNDEsIDQ2LCA0NywgMjQ3LCAxMiwgNDYsIDQ3LCAyNDYsIDIwNCwgNDYsIDQ3LCAyNDcsIDc1LCA0NiwgNDcsIAorICAgIDI0NiwgMTcyLCA0NiwgNDcsIDI0NywgNDMsIDQ2LCA0NywgMjQ2LCAyMzUsIDQ2LCA0NywgMjQ3LCAxMDYsIDQ2LCA0NywgCisgICAgMjQ2LCAxNTYsIDQ2LCA0NywgMjQ3LCAyNywgNDYsIDQ3LCAyNDYsIDIxOSwgNDYsIDQ3LCAyNDcsIDkwLCA0NiwgNDcsIAorICAgIDI0NiwgMTg3LCA0NiwgNDcsIDI0NywgNTgsIDQ2LCA0NywgMjQ2LCAyNTAsIDQ2LCA0NywgMjQ3LCAxMjEsIDQ2LCA0NywgCisgICAgMjQ2LCAxMzMsIDQ2LCA0NywgMjQ3LCA0LCA0NiwgNDcsIDI0NiwgMTk2LCA0NiwgNDcsIDI0NywgNjcsIDQ2LCA0NywgMjQ2LCAKKyAgICAxNjQsIDQ2LCA0NywgMjQ3LCAzNSwgNDYsIDQ3LCAyNDYsIDIyNywgNDYsIDQ3LCAyNDcsIDk4LCA0NiwgNDcsIDI0NiwgCisgICAgMTQ4LCA0NiwgNDcsIDI0NywgMTksIDQ2LCA0NywgMjQ2LCAyMTEsIDQ2LCA0NywgMjQ3LCA4MiwgNDYsIDQ3LCAyNDYsIAorICAgIDE3OSwgNDYsIDQ3LCAyNDcsIDUwLCA0NiwgNDcsIDI0NiwgMjQyLCA0NiwgNDcsIDI0NywgMTEzLCA0NiwgNDcsIDI0NiwgCisgICAgMTQwLCA0NiwgNDcsIDI0NywgMTEsIDQ2LCA0NywgMjQ2LCAyMDMsIDQ2LCA0NywgMjQ3LCA3NCwgNDYsIDQ3LCAyNDYsIAorICAgIDE3MSwgNDYsIDQ3LCAyNDcsIDQyLCA0NiwgNDcsIDI0NiwgMjM0LCA0NiwgNDcsIDI0NywgMTA1LCA0NiwgNDcsIDI0NiwgCisgICAgMTU1LCA0NiwgNDcsIDI0NywgMjYsIDQ2LCA0NywgMjQ2LCAyMTgsIDQ2LCA0NywgMjQ3LCA4OSwgNDYsIDQ3LCAyNDYsIAorICAgIDE4NiwgNDYsIDQ3LCAyNDcsIDU3LCA0NiwgNDcsIDI0NiwgMjQ5LCA0NiwgNDcsIDI0NywgMTIwLCA0NiwgNDcsIDI0NiwgCisgICAgMTI5LCA0NiwgNDcsIDI0NywgMCwgNDYsIDQ3LCAyNDYsIDE5MiwgNDYsIDQ3LCAyNDcsIDYzLCA0NiwgNDcsIDI0NiwgMTYwLCAKKyAgICA0NiwgNDcsIDI0NywgMzEsIDQ2LCA0NywgMjQ2LCAyMjMsIDQ2LCA0NywgMjQ3LCA5NCwgNDYsIDQ3LCAyNDYsIDE0NCwgNDYsIAorICAgIDQ3LCAyNDcsIDE1LCA0NiwgNDcsIDI0NiwgMjA3LCA0NiwgNDcsIDI0NywgNzgsIDQ2LCA0NywgMjQ2LCAxNzUsIDQ2LCA0NywgCisgICAgMjQ3LCA0NiwgNDYsIDQ3LCAyNDYsIDIzOCwgNDYsIDQ3LCAyNDcsIDEwOSwgNDYsIDQ3LCAyNDYsIDEzNiwgNDYsIDQ3LCAKKyAgICAyNDcsIDcsIDQ2LCA0NywgMjQ2LCAxOTksIDQ2LCA0NywgMjQ3LCA3MCwgNDYsIDQ3LCAyNDYsIDE2NywgNDYsIDQ3LCAyNDcsIAorICAgIDM4LCA0NiwgNDcsIDI0NiwgMjMwLCA0NiwgNDcsIDI0NywgMTAxLCA0NiwgNDcsIDI0NiwgMTUxLCA0NiwgNDcsIDI0NywgCisgICAgMjIsIDQ2LCA0NywgMjQ2LCAyMTQsIDQ2LCA0NywgMjQ3LCA4NSwgNDYsIDQ3LCAyNDYsIDE4MiwgNDYsIDQ3LCAyNDcsIDUzLCAKKyAgICA0NiwgNDcsIDI0NiwgMjQ1LCA0NiwgNDcsIDI0NywgMTE2LCA0NiwgNDcsIDI0NiwgMTMyLCA0NiwgNDcsIDI0NywgMywgNDYsIAorICAgIDQ3LCAyNDYsIDE5NSwgNDYsIDQ3LCAyNDcsIDY2LCA0NiwgNDcsIDI0NiwgMTYzLCA0NiwgNDcsIDI0NywgMzQsIDQ2LCA0NywgCisgICAgMjQ2LCAyMjYsIDQ2LCA0NywgMjQ3LCA5NywgNDYsIDQ3LCAyNDYsIDE0NywgNDYsIDQ3LCAyNDcsIDE4LCA0NiwgNDcsIAorICAgIDI0NiwgMjEwLCA0NiwgNDcsIDI0NywgODEsIDQ2LCA0NywgMjQ2LCAxNzgsIDQ2LCA0NywgMjQ3LCA0OSwgNDYsIDQ3LCAKKyAgICAyNDYsIDI0MSwgNDYsIDQ3LCAyNDcsIDExMiwgNDYsIDQ3LCAyNDYsIDEzOSwgNDYsIDQ3LCAyNDcsIDEwLCA0NiwgNDcsIAorICAgIDI0NiwgMjAyLCA0NiwgNDcsIDI0NywgNzMsIDQ2LCA0NywgMjQ2LCAxNzAsIDQ2LCA0NywgMjQ3LCA0MSwgNDYsIDQ3LCAKKyAgICAyNDYsIDIzMywgNDYsIDQ3LCAyNDcsIDEwNCwgNDYsIDQ3LCAyNDYsIDE1NCwgNDYsIDQ3LCAyNDcsIDI1LCA0NiwgNDcsIAorICAgIDI0NiwgMjE3LCA0NiwgNDcsIDI0NywgODgsIDQ2LCA0NywgMjQ2LCAxODUsIDQ2LCA0NywgMjQ3LCA1NiwgNDYsIDQ3LCAKKyAgICAyNDYsIDI0OCwgNDYsIDQ3LCAyNDcsIDExOSwgNDYsIDQ3LCAyNDYsIDEyNywgNDYsIDQ3LCAyNDYsIDI1NCwgNDYsIDQ3LCAKKyAgICAyNDYsIDE5MCwgNDYsIDQ3LCAyNDcsIDYxLCA0NiwgNDcsIDI0NiwgMTU4LCA0NiwgNDcsIDI0NywgMjksIDQ2LCA0NywgCisgICAgMjQ2LCAyMjEsIDQ2LCA0NywgMjQ3LCA5MiwgNDYsIDQ3LCAyNDYsIDE0MiwgNDYsIDQ3LCAyNDcsIDEzLCA0NiwgNDcsIAorICAgIDI0NiwgMjA1LCA0NiwgNDcsIDI0NywgNzYsIDQ2LCA0NywgMjQ2LCAxNzMsIDQ2LCA0NywgMjQ3LCA0NCwgNDYsIDQ3LCAKKyAgICAyNDYsIDIzNiwgNDYsIDQ3LCAyNDcsIDEwNywgNDYsIDQ3LCAyNDYsIDEzNCwgNDYsIDQ3LCAyNDcsIDUsIDQ2LCA0NywgCisgICAgMjQ2LCAxOTcsIDQ2LCA0NywgMjQ3LCA2OCwgNDYsIDQ3LCAyNDYsIDE2NSwgNDYsIDQ3LCAyNDcsIDM2LCA0NiwgNDcsIAorICAgIDI0NiwgMjI4LCA0NiwgNDcsIDI0NywgOTksIDQ2LCA0NywgMjQ2LCAxNDksIDQ2LCA0NywgMjQ3LCAyMCwgNDYsIDQ3LCAKKyAgICAyNDYsIDIxMiwgNDYsIDQ3LCAyNDcsIDgzLCA0NiwgNDcsIDI0NiwgMTgwLCA0NiwgNDcsIDI0NywgNTEsIDQ2LCA0NywgCisgICAgMjQ2LCAyNDMsIDQ2LCA0NywgMjQ3LCAxMTQsIDQ2LCA0NywgMjQ2LCAxMzAsIDQ2LCA0NywgMjQ3LCAxLCA0NiwgNDcsIAorICAgIDI0NiwgMTkzLCA0NiwgNDcsIDI0NywgNjQsIDQ2LCA0NywgMjQ2LCAxNjEsIDQ2LCA0NywgMjQ3LCAzMiwgNDYsIDQ3LCAKKyAgICAyNDYsIDIyNCwgNDYsIDQ3LCAyNDcsIDk1LCA0NiwgNDcsIDI0NiwgMTQ1LCA0NiwgNDcsIDI0NywgMTYsIDQ2LCA0NywgCisgICAgMjQ2LCAyMDgsIDQ2LCA0NywgMjQ3LCA3OSwgNDYsIDQ3LCAyNDYsIDE3NiwgNDYsIDQ3LCAyNDcsIDQ3LCA0NiwgNDcsIAorICAgIDI0NiwgMjM5LCA0NiwgNDcsIDI0NywgMTEwLCA0NiwgNDcsIDI0NiwgMTM3LCA0NiwgNDcsIDI0NywgOCwgNDYsIDQ3LCAKKyAgICAyNDYsIDIwMCwgNDYsIDQ3LCAyNDcsIDcxLCA0NiwgNDcsIDI0NiwgMTY4LCA0NiwgNDcsIDI0NywgMzksIDQ2LCA0NywgCisgICAgMjQ2LCAyMzEsIDQ2LCA0NywgMjQ3LCAxMDIsIDQ2LCA0NywgMjQ2LCAxNTIsIDQ2LCA0NywgMjQ3LCAyMywgNDYsIDQ3LCAKKyAgICAyNDYsIDIxNSwgNDYsIDQ3LCAyNDcsIDg2LCA0NiwgNDcsIDI0NiwgMTgzLCA0NiwgNDcsIDI0NywgNTQsIDQ2LCA0NywgCisgICAgMjQ2LCAyNDYsIDQ2LCA0NywgMjQ3LCAxMTcsIDQ2LCA0NywgMjQ2LCAxMjgsIDQ2LCA0NywgMjQ2LCAyNTUsIDQ2LCA0NywgCisgICAgMjQ2LCAxOTEsIDQ2LCA0NywgMjQ3LCA2MiwgNDYsIDQ3LCAyNDYsIDE1OSwgNDYsIDQ3LCAyNDcsIDMwLCA0NiwgNDcsIAorICAgIDI0NiwgMjIyLCA0NiwgNDcsIDI0NywgOTMsIDQ2LCA0NywgMjQ2LCAxNDMsIDQ2LCA0NywgMjQ3LCAxNCwgNDYsIDQ3LCAKKyAgICAyNDYsIDIwNiwgNDYsIDQ3LCAyNDcsIDc3LCA0NiwgNDcsIDI0NiwgMTc0LCA0NiwgNDcsIDI0NywgNDUsIDQ2LCA0NywgCisgICAgMjQ2LCAyMzcsIDQ2LCA0NywgMjQ3LCAxMDgsIDQ2LCA0NywgMjQ2LCAxMzUsIDQ2LCA0NywgMjQ3LCA2LCA0NiwgNDcsIAorICAgIDI0NiwgMTk4LCA0NiwgNDcsIDI0NywgNjksIDQ2LCA0NywgMjQ2LCAxNjYsIDQ2LCA0NywgMjQ3LCAzNywgNDYsIDQ3LCAKKyAgICAyNDYsIDIyOSwgNDYsIDQ3LCAyNDcsIDEwMCwgNDYsIDQ3LCAyNDYsIDE1MCwgNDYsIDQ3LCAyNDcsIDIxLCA0NiwgNDcsIAorICAgIDI0NiwgMjEzLCA0NiwgNDcsIDI0NywgODQsIDQ2LCA0NywgMjQ2LCAxODEsIDQ2LCA0NywgMjQ3LCA1MiwgNDYsIDQ3LCAKKyAgICAyNDYsIDI0NCwgNDYsIDQ3LCAyNDcsIDExNSwgNDYsIDQ3LCAyNDYsIDEzMSwgNDYsIDQ3LCAyNDcsIDIsIDQ2LCA0NywgCisgICAgMjQ2LCAxOTQsIDQ2LCA0NywgMjQ3LCA2NSwgNDYsIDQ3LCAyNDYsIDE2MiwgNDYsIDQ3LCAyNDcsIDMzLCA0NiwgNDcsIAorICAgIDI0NiwgMjI1LCA0NiwgNDcsIDI0NywgOTYsIDQ2LCA0NywgMjQ2LCAxNDYsIDQ2LCA0NywgMjQ3LCAxNywgNDYsIDQ3LCAKKyAgICAyNDYsIDIwOSwgNDYsIDQ3LCAyNDcsIDgwLCA0NiwgNDcsIDI0NiwgMTc3LCA0NiwgNDcsIDI0NywgNDgsIDQ2LCA0NywgCisgICAgMjQ2LCAyNDAsIDQ2LCA0NywgMjQ3LCAxMTEsIDQ2LCA0NywgMjQ2LCAxMzgsIDQ2LCA0NywgMjQ3LCA5LCA0NiwgNDcsIAorICAgIDI0NiwgMjAxLCA0NiwgNDcsIDI0NywgNzIsIDQ2LCA0NywgMjQ2LCAxNjksIDQ2LCA0NywgMjQ3LCA0MCwgNDYsIDQ3LCAKKyAgICAyNDYsIDIzMiwgNDYsIDQ3LCAyNDcsIDEwMywgNDYsIDQ3LCAyNDYsIDE1MywgNDYsIDQ3LCAyNDcsIDI0LCA0NiwgNDcsIAorICAgIDI0NiwgMjE2LCA0NiwgNDcsIDI0NywgODcsIDQ2LCA0NywgMjQ2LCAxODQsIDQ2LCA0NywgMjQ3LCA1NSwgNDYsIDQ3LCAKKyAgICAyNDYsIDI0NywgNDYsIDQ3LCAyNDcsIDExOCwgOTcsIDIxNSwgNTgsIDgwLCAyLCA2NywgOTEsIDk3LCAyMTUsIDU4LCA4MCwgCisgICAgMiwgNTIsIDY3LCA5MSwgMTQwLCA1MiwgODAsIDIsIDY3LCA5MSwgOTcsIDUyLCA4MCwgMiwgNjcsIDkxLCA0MywgNDQsIDUyLCAKKyAgICA4MCwgMiwgNjcsIDkxLCA5NywgMjE1LCA1OCwgODAsIDI0MywgMjUxLCAxMzAsIDE0MCwgNTIsIDgwLCAyNDMsIDI1MSwgCisgICAgMTMwLCA5NywgNTIsIDgwLCAyNDMsIDI1MSwgMTMwLCAyNDYsIDExMiwgODAsIDIsIDIwMywgOTEsIDIxNCwgMTUzLCA4MCwgCisgICAgMiwgMjAzLCA5MSwgMjE0LCAxNTMsIDIxNSwgMjEyLCA3NSwgMjQ2LCAxMTIsIDIxNSwgMjEyLCA3NSwgMTQwLCA1MiwgMjQ4LCAKKyAgICAxNjUsIDc1LCA5NywgNTIsIDI0OCwgMTY1LCA3NSwgMTQwLCAyMTUsIDIxMiwgMjQ4LCAxNjUsIDc1LCA5NywgMjE1LCAyMTIsIAorICAgIDI0OCwgMTY1LCA3NSwgOTcsIDIxNSwgNTgsIDIxNSwgMjEyLCAyNDgsIDE2NSwgNzUsIDk3LCA4MCwgMiwgMjQ2LCAxMjYsIAorICAgIDIxOCwgMTQxLCAyMTQsIDE1MywgODAsIDIxNiwgNDMsIDEzMCwgMjQ2LCAxMTIsIDgwLCAyMTYsIDQzLCAxMzAsIDk3LCA4MCwgCisgICAgMiwgMjE3LCA3OSwgMiwgNjcsIDkxLCA5NywgODAsIDIsIDIxNywgNzksIDIsIDUyLCA2NywgOTEsIDk3LCAyMTUsIDU4LCAKKyAgICA4MCwgMiwgMjE3LCA3OCwgOTcsIDIxNSwgNTgsIDgwLCAyLCAyMTcsIDc5LCAyLCA2NywgOTEsIDk3LCAyMTUsIDU4LCA4MCwgCisgICAgMiwgMjE3LCA3OSwgMiwgNTIsIDY3LCA5MSwgMTQwLCAyNTQsIDMsIDk3LCAyNTQsIDMsIDE0MCwgNTIsIDI1NCwgMywgOTcsIAorICAgIDUyLCAyNTQsIDMsIDE0MCwgODAsIDIxNiwgNDMsIDg1LCAyNDgsIDAsIDk3LCA4MCwgMjE2LCA0MywgODUsIDI0OCwgMCwgCisgICAgMTQwLCA4MCwgMjQzLCAyNTEsIDI1MiwgMTQ5LCAyMTYsIDQzLCA4NSwgMjQ4LCAwLCA5NywgODAsIDI0MywgMjUxLCAyNTIsIAorICAgIDE0OSwgMjE2LCA0MywgODUsIDI0OCwgMCwgMjI4LCA2MSwgMjEyLCA5LCAyMiwgMjE5LCAzMCwgMjQ1LCAyMjgsIDc1LCAKKyAgICAyMjgsIDYxLCAyNDUsIDIyOCwgMjIsIDIxOSwgMzAsIDIxMiwgOSwgNzUsIDIyOCwgNjEsIDIxMiwgOSwgODAsIDIsIDEwMywgCisgICAgMjI4LCA2MSwgMjQ1LCAyMjgsIDgwLCAyLCAxMDMsIDIxOSwgMzAsIDI0NSwgMjI4LCA4MCwgMiwgMTAzLCAyMTksIDMwLCAKKyAgICAyMTIsIDksIDgwLCAyLCAxMDMsIDIyOCwgNjEsIDIxMiwgOSwgODAsIDIyLCAyMjgsIDYxLCAyNDUsIDIyOCwgNzUsIDIyOCwgCisgICAgNjEsIDI0NSwgMjI4LCA4MCwgMjIsIDIxOSwgMzAsIDI0NSwgMjI4LCA3NSwgMjE5LCAzMCwgMjQ1LCAyMjgsIDgwLCAyMiwgCisgICAgMjE5LCAzMCwgMjEyLCA5LCA3NSwgMjE5LCAzMCwgMjEyLCA5LCA4MCwgMjIsIDIyOCwgNjEsIDIxMiwgOSwgNzUsIDIyMiwgCisgICAgMjMxLCAyNDgsIDcsIDI0OSwgMTMzLCAyNDQsIDE4MywgMjQ4LCA2LCAyNDQsIDE4MywgMjQ4LCA3LCAyNDksIDEzMywgMjIyLCAKKyAgICAyMzEsIDI0OCwgNiwgMjE5LCAzMCwgMjQ1LCAyMjgsIDgwLCAyNDksIDEzMywgMjI4LCA2MSwgMjQ1LCAyMjgsIDc1LCAyMjgsIAorICAgIDYxLCAyNDUsIDIyOCwgODAsIDI0OSwgMTMzLCAyMTksIDMwLCAyNDUsIDIyOCwgNzUsIDI0NCwgMTgzLCAyNDgsIDcsIDI0OSwgCisgICAgMTMzLCAyMjgsIDYxLCAyNDUsIDIyOCwgNzUsIDIyMiwgMjMxLCAyNDgsIDcsIDI0OSwgMTMzLCAyMTksIDMwLCAyNDUsIAorICAgIDIyOCwgNzUsIDIyOCwgNjEsIDI0NSwgMjI4LCA4MCwgMjQ5LCAxMzMsIDIyOCwgNjEsIDIxMiwgOSwgNzUsIDIyOCwgNjEsIAorICAgIDIxMiwgOSwgODAsIDI0OSwgMTMzLCAyMjgsIDYxLCAyNDUsIDIyOCwgNzUsIDIxMiwgMzYsIDgwLCAyMjUsIDEwLCAyNDcsIAorICAgIDIwMywgMjIyLCAyNTQsIDgwLCAyMjUsIDEwLCA5NywgMjE2LCAxODksIDI0OSwgOTgsIDIxNCwgMTUyLCA4MCwgMjI1LCAxMCwgCisgICAgOTcsIDIxNiwgMTg5LCAyNDksIDk4LCAyNDYsIDExMSwgODAsIDIyNSwgMTAsIDI0NiwgMTEyLCAyMTYsIDE4OSwgMjQ5LCAKKyAgICA5OCwgMjMzLCA0MywgODAsIDIyNSwgMTAsIDI0NiwgMTEyLCAyMTYsIDE4OSwgMjQ5LCA5OCwgMjIyLCAyNDQsIDIyMiwgCisgICAgMjQ3LCAyNTQsIDM0LCAyNTAsIDEwLCA3NSwgMjMzLCA0NiwgMjU0LCAzNCwgMjU0LCA5NiwgNzUsIDIxNiwgMTUsIDI1NCwgCisgICAgMzQsIDI1NCwgOTYsIDc1LCAyNTEsIDE4MywgMjU0LCAzNCwgMjU0LCA5NiwgNzUsIDIxNiwgMTUsIDI1NCwgMzQsIDI1MCwgCisgICAgMTAsIDgwLCAyLCAyMzAsIDE4NiwgMjE2LCAxNSwgMjU0LCAzNCwgMjU0LCA5NiwgODAsIDIsIDIyNSwgMjUsIDIzMiwgMTE0LCAKKyAgICA0NCwgMjIwLCAxNTQsIDI1MCwgMTAsIDc1LCAyMzIsIDExNCwgNDMsIDIyMCwgMTU0LCAyNTQsIDk2LCA3NSwgMjU0LCA5NiwgCisgICAgMjUwLCA4LCAyNTAsIDQ0LCA3NSwgMjUwLCAxMCwgMjUwLCA4LCAyNTAsIDQ0LCA3NSwgOTcsIDgwLCA3MiwgMjE5LCAyNTMsIAorICAgIDE0MCwgNzUsIDE0MCwgODAsIDcyLCAyMTksIDI1MywgOTcsIDc1LCAyMTksIDI1MywgOTcsIDgwLCA3MiwgMTQwLCA3NSwgCisgICAgOTcsIDgwLCAyLCA5NiwgNTEsIDE0MCwgODAsIDIsIDk2LCA1MSwgOTcsIDgwLCAyMTYsIDE0MCwgMjExLCAxNzgsIDQzLCAKKyAgICA0NCwgODAsIDIxNiwgMTQwLCA0LCAyNTAsIDQzLCAyMTQsIDE1MywgMjE1LCA1OCwgODAsIDI0MywgMjUxLCA0LCAyNTAsIAorICAgIDQzLCA0MywgMjUyLCAxNDcsIDEyMCwgNDQsIDI1MiwgMTQ3LCAxMjQsIDI0MiwgNSwgNDMsIDI1MiwgMTQ3LCAxMjQsIDQ0LCAKKyAgICAyNTIsIDE0NywgMTIwLCAyNDIsIDUsIDEyMCwgMjUyLCAxNDcsIDQ0LCAxMjQsIDI1MiwgMTQ3LCA0MywgMjQyLCA1LCAxMjAsIAorICAgIDI1MiwgMTQ3LCA0MywgMTI0LCAyNTIsIDE0NywgNDQsIDI0MiwgNSwgNDMsIDI1MiwgMTQ3LCAxMjAsIDQ0LCAyNTIsIDE0NywgCisgICAgMTIwLCAyNDIsIDUsIDEyMCwgMjUyLCAxNDcsIDQ0LCAxMjQsIDI1MiwgMTQ3LCA0NCwgMjQyLCA1LCA0MywgMjUyLCAxNDcsIAorICAgIDEyNCwgNDQsIDI1MiwgMTQ3LCAxMjQsIDI0MiwgNSwgMTIwLCAyNTIsIDE0NywgNDMsIDEyNCwgMjUyLCAxNDcsIDQzLCAKKyAgICAyNDIsIDUsIDE0MCwgMjQyLCA2LCAyLCAyNTIsIDE0NywgMTIwLCAyMTYsIDQzLCAxMzAsIDk3LCAyNDIsIDYsIDIsIDI1MiwgCisgICAgMTQ3LCAxMjAsIDIxNiwgNDMsIDEzMCwgMjE0LCAxNTMsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDQ0LCAyMTYsIDQzLCAxMzAsIAorICAgIDI0NiwgMTEyLCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCA0NCwgMjE2LCA0MywgMTMwLCAxNDAsIDI0MiwgNiwgMiwgMjUyLCAKKyAgICAxNDcsIDEyNCwgMjE2LCA0MywgMTMwLCA5NywgMjQyLCA2LCAyLCAyNTIsIDE0NywgMTI0LCAyMTYsIDQzLCAxMzAsIDIxNCwgCisgICAgMTUzLCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCA0MywgMjE2LCA0MywgMTMwLCAyNDYsIDExMiwgMjQyLCA2LCAyLCAyNTIsIAorICAgIDE0NywgNDMsIDIxNiwgNDMsIDEzMCwgMTQwLCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAxMjAsIDI0MywgMjUxLCAxMzAsIDk3LCAKKyAgICAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAxMjAsIDI0MywgMjUxLCAxMzAsIDIxNCwgMTUzLCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAKKyAgICA0NCwgMjQzLCAyNTEsIDEzMCwgMjQ2LCAxMTIsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDQ0LCAyNDMsIDI1MSwgMTMwLCAxNDAsIAorICAgIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDEyNCwgMjQzLCAyNTEsIDEzMCwgOTcsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDEyNCwgCisgICAgMjQzLCAyNTEsIDEzMCwgMjE0LCAxNTMsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDQzLCAyNDMsIDI1MSwgMTMwLCAyNDYsIAorICAgIDExMiwgMjQyLCA2LCAyLCAyNTIsIDE0NywgNDMsIDI0MywgMjUxLCAxMzAsIDE0MCwgMjQyLCA2LCAyLCAyNTIsIDE0NywgCisgICAgMTIwLCA3MiwgMTQwLCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAyNDYsIDExNCwgMjE0LCAxNTMsIDI0MiwgNiwgMiwgMjUyLCAKKyAgICAxNDcsIDQzLCAyNTIsIDM4LCAyMTQsIDE1MywgMjQyLCA2LCAyLCAyNTIsIDE0NywgMjIyLCAyNTQsIDk3LCAyNDIsIDYsIDIsIAorICAgIDI1MiwgMTQ3LCAxMjAsIDcyLCA5NywgMjQyLCA2LCAyLCAyNTIsIDE0NywgMjQ2LCAxMTQsIDI0NiwgMTEyLCAyNDIsIDYsIAorICAgIDIsIDI1MiwgMTQ3LCA0MywgMjUyLCAzOCwgMjQ2LCAxMTIsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDIyMiwgMjU0LCAxNDAsIAorICAgIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDEyMCwgNzIsIDk3LCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAyMTQsIDE2MywgMTQwLCAKKyAgICAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAxMjQsIDcyLCA5NywgMjQyLCA2LCAyLCAyNTIsIDE0NywgMjQ2LCAxMTQsIDk3LCAyNDIsIAorICAgIDYsIDIsIDI1MiwgMTQ3LCAxMjAsIDcyLCAxNDAsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDIxNCwgMTYzLCA5NywgMjQyLCA2LCAKKyAgICAyLCAyNTIsIDE0NywgMTI0LCA3MiwgMTQwLCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAyNDYsIDExNCwgMTQwLCAyNDIsIDYsIDIsIAorICAgIDI1MiwgMTQ3LCAxMjAsIDcyLCAyMDAsIDI0OCwgMTY0LCAxNDAsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDEyNCwgMjUyLCA1MSwgCisgICAgMjAwLCAyNDgsIDE2NCwgOTcsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDEyMCwgNzIsIDIwMCwgMjQ4LCAxNjQsIDk3LCAyNDIsIAorICAgIDYsIDIsIDI1MiwgMTQ3LCAxMjQsIDI1MiwgNTEsIDIwMCwgMjQ4LCAxNjQsIDIxNCwgMTUzLCAyNDIsIDYsIDIsIDI1MiwgCisgICAgMTQ3LCA0MywgMjUyLCAzOCwgMjQ2LCAxMTIsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDIyMiwgMjU0LCAyNDYsIDExMiwgMjQyLCAKKyAgICA2LCAyLCAyNTIsIDE0NywgNDMsIDI1MiwgMzgsIDIxNCwgMTUzLCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAyMjIsIDI1NCwgNDQsIAorICAgIDUyLCA4MCwgMiwgMjIyLCAxODUsIDI0MSwgMjQyLCAyNDUsIDEwNiwgNSwgNzIsIDk3LCA3NSwgMjE2LCA5MCwgMjI2LCAKKyAgICAxNzIsIDcyLCA5NywgNzUsIDE0MCwgODAsIDcyLCAyMTYsIDkwLCAyMjYsIDE3MSwgOTcsIDgwLCA3MiwgMjE2LCA5MCwgCisgICAgMjI2LCAxNzEsIDk3LCA4MCwgNzIsIDI1NCwgMTU2LCAxMjgsIDExMiwgMjMzLCAyMSwgNzIsIDE0MCwgNzUsIDE0MCwgODAsIAorICAgIDIxNiwgMTQwLCAyMzMsIDIwLCAyNDIsIDEzNywgNzIsIDk3LCA3NSwgMjE4LCA2NSwgNzIsIDk3LCA3NSwgMTQwLCA4MCwgCisgICAgMjE2LCAxNDAsIDIxOCwgNjQsIDIxOCwgMjMsIDcyLCAxNDAsIDc1LCA0MywgMjQ0LCA5OSwgMjE3LCA3OCwgNDQsIDI0NCwgCisgICAgOTksIDIxNywgNzgsIDEyMCwgMjQ0LCA5OSwgMjE3LCA3OCwgMTI0LCAyNDQsIDk5LCAyMTcsIDc4LCAyMTUsIDIxMiwgNjcsIAorICAgIDI1MiwgMTQ5LCAyNDgsIDY4LCAyMTAsIDE2MCwgMTg5LCAyMTgsIDI0NCwgMjEwLCAxNjAsIDE4OSwgMjE1LCA0OSwgMjQ5LCAKKyAgICAyMzQsIDQzLCA3MSwgMjQ5LCAxMDcsIDEyNywgNDQsIDcxLCAyNDksIDEwNywgMTI3LCA0MywgNzEsIDIyNiwgNywgNDQsIAorICAgIDcxLCAyMjYsIDcsIDIxMCwgMTYwLCAxODksIDQzLCAyMzYsIDIyLCAxMjcsIDIxMCwgMTYwLCAxODksIDQ0LCAyMzYsIDIyLCAKKyAgICAxMjcsIDIxMCwgMTYwLCAxODksIDQzLCAyNTEsIDI1MCwgMTI3LCAyMTAsIDE2MCwgMTg5LCA0NCwgMjUxLCAyNTAsIDEyNywgCisgICAgNDMsIDQyLCAyNTEsIDE2NiwgMiwgMjE0LCAxODMsIDQ0LCA0MiwgMjUxLCAxNjYsIDIsIDIxNCwgMTgzLCA0MywgNDIsIAorICAgIDI1MSwgMTY2LCAyLCAyMTYsIDExNiwgMjM2LCA3LCAyMTYsIDE1LCAyNDksIDE2OCwgNDQsIDQyLCAyNTEsIDE2NiwgMiwgCisgICAgMjE2LCAxMTYsIDIzNiwgNywgMjUxLCAxODMsIDI0OSwgMTY4LCA0MywgNDIsIDI1MSwgMTY2LCAyLCAyMTYsIDExNiwgMjM2LCAKKyAgICA3LCAyNTEsIDE4MywgMjQ5LCAxNjgsIDQ0LCA0MiwgMjUxLCAxNjYsIDIsIDIxNiwgMTE2LCAyMzYsIDcsIDIxNiwgMTUsIAorICAgIDI0OSwgMTY4LCA0MywgMjU0LCAxMTgsIDI1MSwgMTY2LCAyLCAyNDcsIDEyOCwgNDQsIDI1NCwgMTE4LCAyNTEsIDE2NiwgMiwgCisgICAgMjQ3LCAxMjgsIDQzLCAyNTQsIDM0LCAyMzMsIDIxLCAxMjcsIDQ0LCAyNTQsIDM0LCAyNDIsIDEzNywgMTI3LCA1MiwgNDMsIAorICAgIDI1NCwgMzQsIDI0MiwgMTM3LCAxMjcsIDUyLCA0NCwgMjU0LCAzNCwgMjMzLCAyMSwgMTI3LCA0MywgODUsIDIxNiwgNywgCisgICAgMjIwLCA1NSwgMTI3LCA0NCwgODUsIDIxNiwgNywgMjIwLCA1NSwgMTI3LCAyNDYsIDEyNiwgMjQ0LCAxNDMsIDY3LCAyMTAsIAorICAgIDM1LCAyMzIsIDIxOSwgMjMxLCA5MywgMjU0LCAxMTgsIDIyNiwgMTc0LCAyMzMsIDUyLCA0NCwgMjU0LCAxMTgsIDIxNCwgCisgICAgMTIsIDIsIDIxOCwgMjM2LCAyMzEsIDkzLCA0NCwgMjU0LCAxMTgsIDIsIDI0NywgMTI4LCAyNTQsIDExOCwgMiwgMjIyLCAKKyAgICA5NCwgMjM1LCAyMjIsIDI1NSwgMTIsIDI1NCwgMTE3LCAyMTksIDEsIDI1NCwgMTE4LCAyMjYsIDE3NCwgMjMzLCA1MiwgCisgICAgMjE5LCAxLCAyNTQsIDExOCwgMjI2LCAxNzQsIDIxNCwgMTYzLCAyMTUsIDk0LCAyNTQsIDExNywgMjIzLCA1MiwgMjU0LCAKKyAgICAxMTcsIDI1NCwgMTE4LCAyLCAyMTQsIDE4MywgMjIzLCA1MiwgMjU0LCAxMTgsIDIsIDIxNCwgMTgzLCAyMjYsIDI1MiwgCisgICAgMjU0LCAxMTgsIDIyNiwgMTc0LCAyMTQsIDE2MywgMjI2LCAyNTIsIDI1NCwgMTE4LCAyMjYsIDE3NCwgMjQ2LCAxMTQsIAorICAgIDIzMSwgOTMsIDI1NCwgMTE4LCAyLCAyMDQsIDI1NCwgMTMsIDI0NSwgMTQ4LCAyMzYsIDcsIDgwLCAyMjUsIDEwLCAxMjAsIAorICAgIDIyLCAyMjIsIDI1NCwgMjMxLCA5MywgMjU0LCAxMTgsIDIsIDIwNCwgMjU0LCAxMywgMjQ1LCAxNDgsIDIzNiwgNywgODAsIAorICAgIDIyNSwgMTAsIDEyMCwgMjIsIDIzMywgNTIsIDIzMSwgOTMsIDI1NCwgMTE4LCAyLCAyMDQsIDI1NCwgMTMsIDI0NSwgMTQ4LCAKKyAgICAyMzYsIDcsIDgwLCAyMjUsIDEwLCAxMjQsIDIyLCAyMjIsIDI1NCwgMjMxLCA5MywgMjU0LCAxMTgsIDIsIDIwNCwgMjU0LCAKKyAgICAxMywgMjQ1LCAxNDgsIDIzNiwgNywgODAsIDIyNSwgMTAsIDEyNCwgMjIsIDIzMywgNTIsIDIzMSwgOTMsIDI1NCwgMTE4LCAKKyAgICAyLCAyMDQsIDI1NCwgMTMsIDI0NSwgMTQ4LCAyMzYsIDcsIDgwLCAyMjUsIDEwLCA0NCwgMjIsIDIxNCwgMTYzLCAyMzEsIAorICAgIDkzLCAyNTQsIDExOCwgMiwgMjA0LCAyNTQsIDEzLCAyNDUsIDE0OCwgMjM2LCA3LCA4MCwgMjI1LCAxMCwgNDMsIDIyLCAKKyAgICAyMTQsIDE2MywgMjMxLCA5MywgMjU0LCAxMTgsIDIsIDIwNCwgMjU0LCAxMywgMjQ1LCAxNDgsIDIzNiwgNywgODAsIDIyNSwgCisgICAgMTAsIDQ0LCAyMiwgMjQ2LCAxMTQsIDIzMSwgOTMsIDI1NCwgMTE4LCAyLCAyMDQsIDI1NCwgMTMsIDI0NSwgMTQ4LCAyMzYsIAorICAgIDcsIDgwLCAyMjUsIDEwLCA0MywgMjIsIDI0NiwgMTE0LCAyMjMsIDUyLCAyNDUsIDE2MCwgMjIwLCAxMjksIDI0NSwgMTYwLCAKKyAgICAyMjAsIDEzMCwgMiwgMjI2LCAxMjcsIDI0NSwgMTYwLCAyMjAsIDEzMCwgMiwgNCwgMjUwLCA0NCwgNDgsIDI0NSwgMTYwLCAKKyAgICAyMjAsIDEzMCwgMiwgNDQsIDgwLCA0OCwgMjQ1LCAxNjAsIDIyMCwgMTMwLCAyLCA0MywgODAsIDQ4LCAyNTAsIDQ0LCAyLCAKKyAgICAyMDMsIDEzMCwgMzcsIDY3LCAxMzAsIDM3LCAyMjYsIDExLCAzNywgMjIzLCA1MywgMjE5LCA0OCwgMzcsIDIyNSwgMTc0LCAKKyAgICAyNTAsIDQ0LCAyNDcsIDE4MSwgMjUxLCA4NiwgMjAzLCAyNTIsIDE0OSwgMjIsIDIxNiwgMTUsIDE2MywgMjQ3LCAxODEsIAorICAgIDI1MSwgODYsIDY3LCAxMzAsIDI1MCwgNDQsIDIsIDIxOCwgMjUsIDIxMSwgMTc4LCAzNywgMjU0LCA5NSwgMjQ3LCAxNzcsIAorICAgIDUwLCAxMjAsIDgwLCAyMTYsIDE0MCwgMjUwLCA0MywgMzcsIDcxLCAyNTEsIDEyMSwgMzcsIDI1MSwgMTIxLCAzNywgMjMzLCAKKyAgICAyMCwgMzcsIDI0MiwgMTM2LCAyNTAsIDQ0LCAyLCA0LCAyNTAsIDQ0LCAyMTYsIDQzLCAyMTYsIDE5NywgMjIyLCAyNTQsIAorICAgIDI1MCwgNDQsIDIsIDExMywgMjAzLCAyMTgsIDkzLCAyMTYsIDQzLCAyMTYsIDE5NywgMjIyLCAyNTQsIDkyLCAyMjIsIDIzMSwgCisgICAgMjQ4LCA3LCAyMTksIDk3LCA5MiwgMjQ0LCAxODMsIDI0OCwgNywgMjE5LCA5NywgOTIsIDI1MywgMjI0LCA5MiwgNCwgMjUwLCAKKyAgICA0MywgOTIsIDIxOCwgMjM2LCAxMTMsIDIzNSwgNzEsIDIxOCwgMjM0LCAyMTUsIDIyNywgMiwgNTksIDQ4LCAyMTUsIDIyNywgCisgICAgMiwgMjE0LCAxODMsIDIyMiwgOTQsIDIzNiwgNywgMjE1LCAyMjYsIDIxNSwgMjI3LCAyLCAyMjAsIDEzNiwgMjUzLCAyMTUsIAorICAgIDI1MSwgMTgyLCA0NCwgMjE1LCAyMjcsIDcyLCA0MywgMjE1LCAyMjYsIDQzLCAyMTUsIDIyNywgMjUyLCAzOCwgNjcsIDEzMCwgCisgICAgNjcsIDI1MiwgMTQ5LCAyNTIsIDM4LCA0NCwgMjE1LCAyMjYsIDI1MSwgMTczLCAyLCA0MywgMTYzLCAyNTEsIDIyOSwgMjUxLCAKKyAgICAxNzMsIDIsIDQ0LCAxNjMsIDI1MSwgMjI5LCA4NSwgMjUxLCAxNzIsIDMwLCAyLCA0MywgMTYzLCAyNTEsIDIyOSwgMzAsIDIsIAorICAgIDQ0LCAxNjMsIDI1MSwgMjI5LCA3MSwgMjQwLCAyNDMsIDg1LCAyNDAsIDI0MywgNDMsIDIxMSwgMjQ0LCAyNDQsIDE0MywgCisgICAgNDQsIDIxMSwgMjQ0LCAyNDQsIDE0MywgNDMsIDUyLCAyMTEsIDI0NCwgMjQ0LCAxNDMsIDQ0LCA1MiwgMjExLCAyNDQsIAorICAgIDI0NCwgMTQzLCAyMzUsIDI1NSwgMjM1LCAyNDEsIDIxNiwgMTEzLCAxMTUsIDIzNSwgMjQxLCAyMzUsIDI0MiwgMjI5LCAKKyAgICAxMDcsIDIsIDY3LCAxMzAsIDI0NiwgMTIwLCAyMzAsIDkyLCA0MiwgMiwgMjQ5LCAxODksIDIyNiwgMTMxLCAyMzUsIDI1MywgCisgICAgMjUzLCAyNDUsIDIxOSwgMjIxLCAyMjQsIDE4MywgMjQ1LCAxMDYsIDUsIDIyLCAyMTksIDk5LCAyMjYsIDExLCAyNDUsIAorICAgIDEwNiwgNSwgMjIsIDIxOSwgOTksIDIyNiwgMTIsIDIsIDIxNiwgOTAsIDQ4LCAyNDAsIDExMSwgMjE2LCA0MywgMjIsIDIxOSwgCisgICAgOTksIDIyNiwgMTEsIDI0MiwgMTkwLCAyMTgsIDE1NywgMjE2LCAxODYsIDI0NiwgMTEzLCAyMTUsIDIyNywgMiwgNDMsIAorICAgIDE2MywgMjUxLCAyMjksIDI0NiwgMTEzLCAyMTUsIDIyNywgMiwgNDQsIDE2MywgMjUxLCAyMjksIDg1LCAyNDgsIDEsIDIsIAorICAgIDEyNCwgNzUsIDg1LCAyMzIsIDExMCwgNzEsIDI1MCwgNDQsIDIsIDEyNCwgNzUsIDg1LCAyNTAsIDQ0LCAyLCAxMjQsIDc1LCAKKyAgICAyNDUsIDkzLCA3MSwgMjE4LCAyMzYsIDI0NSwgOTMsIDg1LCAyMTgsIDIzNiwgMjQ1LCA5MywgNzEsIDI0OCwgMCwgMjQ1LCAKKyAgICA5MywgODUsIDI0OCwgMCwgMjQ1LCA5MywgNzEsIDI1MCwgNDMsIDI0NSwgOTMsIDg1LCAyNTAsIDQzLCAyMjIsIDEzNCwgCisgICAgMjIzLCA1MywgMjE5LCA0OSwgMjI2LCAxNzEsIDIxOSwgNDksIDIsIDIyNiwgMTI3LCAyMjMsIDUzLCAyMTksIDQ5LCAyLCAKKyAgICAyMDMsIDkxLCAyNTIsIDEsIDIxOSwgNDgsIDI1MiwgMSwgMjIzLCA1MywgMjE5LCA0OCwgNTIsIDIyNSwgMjUsIDIxNSwgCisgICAgMjEyLCAyMjUsIDI1LCAyMzMsIDQ4LCAyNDksIDk5LCAyNTQsIDExOCwgMTI3LCAyMjIsIDI1MCwgMjQ5LCA5OSwgMjU0LCAKKyAgICAxMTgsIDEyNywgMjE2LCA3OSwgMjMwLCAxODQsIDIzMCwgMjksIDM3LCA1OSwgMjI2LCAxNzEsIDIzMCwgMjksIDM3LCA5NiwgCisgICAgMjI2LCAxNzEsIDIzMCwgMjksIDM3LCAzMCwgMjI2LCAxNzEsIDIzMCwgMjksIDIxNCwgMTc2LCAyMjYsIDE3MiwgMiwgMjQ3LCAKKyAgICAxMjgsIDIzMCwgMjksIDIxNCwgMTc2LCAyMjYsIDE3MiwgMiwgMjI1LCAyNSwgMjMwLCAyOSwgNDIsIDIzNSwgMjA2LCAyMjYsIAorICAgIDE3MSwgMjMwLCAyOSwgNDIsIDIxNCwgMTc2LCAyMjYsIDE3MSwgMTEzLCAyMzIsIDE1MiwgMjIsIDIyNiwgMTcxLCAxMTMsIAorICAgIDIzMiwgMTUyLCAxNzcsIDIyNiwgMTcxLCAyMzAsIDI5LCAzMCwgMjI2LCAxNzEsIDIzMCwgMTU5LCAxMTMsIDIxOCwgNDQsIAorICAgIDIxOCwgNDIsIDIsIDIzNSwgMjE4LCAyMjQsIDI3LCAyMzUsIDIxOSwgMjI2LCAxNzEsIDI0NCwgMTA3LCAyMjYsIDMsIDIzNSwgCisgICAgMjE4LCAyMzUsIDIxOSwgMiwgNTIsIDkxLCAyMzUsIDIxOSwgMjUzLCAxODEsIDIsIDIxOSwgOTcsIDI1MCwgNDAsIDI0MywgCisgICAgMjMzLCAyNTQsIDk2LCAyMzUsIDIxNiwgMjMyLCAyMjAsIDIzNSwgMjE3LCAyLCAyMjMsIDExOCwgMjI1LCAyNDEsIDI1NCwgCisgICAgMTAsIDIyNSwgNCwgMjMyLCAyMjAsIDIzNSwgMjE3LCAyLCAyMjAsIDE1NCwgMjI1LCAyNDEsIDI1NCwgMTAsIDIyNSwgNCwgCisgICAgMjMyLCAyMjAsIDIzNSwgMjE3LCAyMjgsIDU3LCAyMzYsIDEsIDIxNiwgMTk3LCAyMjUsIDQsIDIzNSwgMjE5LCAyNTQsIDEwLCAKKyAgICAxMTYsIDIyNSwgMTQsIDIyNiwgMTcxLCAyMjQsIDIxLCAyMzUsIDIxOSwgMjI2LCAxNzEsIDIzNSwgMjE5LCAyLCAxNDAsIAorICAgIDgwLCAyLCAxMDMsIDIzNSwgMjE5LCAyLCAzMCwgNTAsIDIzNSwgMjE5LCAyLCAyMzUsIDIwNSwgMjM1LCAyMTksIDIsIDIxNCwgCisgICAgMTc1LCAyMzUsIDIxOSwgMiwgMjI2LCAxMjcsIDIzNSwgMjE5LCAyLCAyMTQsIDE4MywgMjM1LCA3MiwgMjMzLCA5MSwgNDMsIAorICAgIDIxNSwgMjI3LCAyMjYsIDE3MSwgMjEwLCAxNjAsIDE4OSwgMjIxLCAyMDMsIDI0OSwgMjE3LCAyMTAsIDE2MCwgMTg5LCAKKyAgICAyMjEsIDIwMywgMjI1LCA1OSwgMjEwLCAxNjAsIDE4OSwgMjIxLCAyMDMsIDIyNCwgMTc5LCA5NiwgNSwgMiwgNCwgMjUwLCAKKyAgICA0NCwgNDgsIDk2LCA1LCAyLCAyNTAsIDM5LCAyNTUsIDI0LCA0OCwgOTYsIDUsIDIsIDIxNiwgOTAsIDQ4LCA5NiwgNSwgMiwgCisgICAgNTksIDUxLCA5NiwgNSwgMiwgMjE2LCA5MCwgNTEsIDk2LCA1LCAyLCAyMTgsIDY2LCAxMDUsIDk2LCA1LCAyLCA4NSwgMjE1LCAKKyAgICAyMjYsIDIzMCwgMTg3LCA1LCAyLCAyNDksIDIyOCwgNDgsIDIzMCwgMTg3LCA1LCAyLCA1OSwgNTEsIDIzMCwgMTg3LCA1LCAKKyAgICAyLCAyNDQsIDE4MywgMjQ3LCAxMjYsIDIzMCwgMTg3LCA1LCAyLCAyMjIsIDIzMSwgMjQ3LCAxMjYsIDk2LCA1LCAyMzYsIDcsIAorICAgIDQzLCAxNjMsIDI1MCwgNDMsIDk2LCA1LCAyMzYsIDcsIDQ0LCAxNjMsIDI1MCwgNDMsIDIxMywgMjU0LCAxNzcsIDI0OSwgCisgICAgMTM5LCAyMjQsIDE4MywgMjMwLCA4OSwgNSwgMiwgNTksIDQ4LCAyMzAsIDg5LCA1LCAyLCAyMTQsIDE4MywgMjIwLCAxNTEsIAorICAgIDIyNCwgMTg0LCAyLCAyNTEsIDE4MywgMjUwLCA3LCAyMTksIDc5LCAyMjQsIDE4MywgMjMwLCA4OSwgNSwgMjM2LCA3LCA0MywgCisgICAgMTYzLCAyNTAsIDQzLCAyMzAsIDg5LCA1LCAyMzYsIDcsIDQ0LCAxNjMsIDI1MCwgNDMsIDM3LCAyMzAsIDg5LCA1LCAyLCAKKyAgICAyNTAsIDM5LCAyNTUsIDIzLCAyMzAsIDg5LCA1LCAyMzYsIDcsIDUyLCAyNTAsIDQzLCAzNywgMjQ3LCAxNzcsIDUwLCA5NiwgCisgICAgNSwgMjM2LCA3LCAyMTUsIDIyNiwgMjMwLCAxODcsIDUsIDIzNiwgNywgMjE1LCAyMjYsIDIzMCwgODksIDUsIDIzNiwgNywgCisgICAgMjE1LCAyMjYsIDIzNSwgMjEzLCAyMjQsIDE4MywgMjIyLCAyNDUsIDIzNSwgMjEzLCAyMjQsIDE4MywgMjEwLCAxNjAsIAorICAgIDE4OSwgMjIzLCA5MywgMjQ5LCAyMTcsIDI1NCwgMTQyLCAxNzcsIDI0OSwgMTczLCAyMzUsIDIwNiwgMiwgMjQ3LCAxMjgsIAorICAgIDIxNCwgMTc2LCAyLCAyMzAsIDE4NywgNTAsIDIxNCwgMTc2LCAyLCAyMjYsIDEyNywgMjM1LCAyMDYsIDIsIDIyNiwgMTI3LCAKKyAgICAyMzUsIDIwNiwgMiwgMjMyLCAxNTIsIDI1NCwgMTI2LCAyMTQsIDE3NiwgMiwgMjMyLCAxNTIsIDIyNiwgMTYyLCAyMTQsIAorICAgIDE3NiwgNzIsIDIzNSwgMjA1LCAyMzUsIDIwNiwgNzIsIDIxNCwgMTc1LCAyMTQsIDE3NiwgNzIsIDI1MiwgMTQ5LCA3MiwgCisgICAgMjM1LCAyMDUsIDIzNSwgMjA2LCA3MiwgMjUyLCAxNDksIDcyLCAyMTQsIDE3NSwgMjE0LCAxNzYsIDI1MiwgMzgsIDIyLCAKKyAgICAyMzUsIDcxLCAyLCAyMTQsIDE3NSwgMjM1LCAyMDYsIDI1MiwgMzgsIDIyLCAyMzUsIDcxLCAyLCAyMzUsIDIwNSwgMjUwLCAKKyAgICA4LCAyMTQsIDE3NiwgMiwgMjIwLCAxMzUsIDI1MCwgOCwgMjM1LCAyMDYsIDIsIDIyMCwgMTM1LCA1MiwgNDIsIDIzNSwgCisgICAgMjA1LCA1MiwgNDIsIDIxNCwgMTc1LCAyNTAsIDgsIDIxNCwgMTc2LCAyLCAyMjAsIDEzNiwgMjIsIDIxOSwgNzksIDIyNCwgCisgICAgMTgzLCAyMzIsIDE1MiwgMjIsIDIsIDU5LCA0OCwgMjMyLCAxNTIsIDE3NywgMiwgNTksIDQ4LCA1MiwgMjMyLCAxNTIsIAorICAgIDI1NCwgMTI2LCA1MiwgMjMyLCAxNTIsIDIyNiwgMTYyLCAxMTMsIDIzNSwgMjA3LCAyMzIsIDE1MiwgMjU0LCAxMjYsIDExMywgCisgICAgMjM1LCAyMDcsIDIzMiwgMTUyLCAyMjYsIDE2MiwgMjE5LCA4NywgMjMzLCA5MSwgMjI2LCAxNjIsIDIxOSwgODcsIDIzMywgCisgICAgOTEsIDI1NCwgMTI2LCAyMzIsIDE1MiwgMTc3LCAyMjYsIDEyNSwgMjMyLCAxNTIsIDI1NCwgMTI2LCAyMzIsIDE1MiwgMjIsIAorICAgIDIsIDIzMCwgMjI5LCAyMTgsIDE0MSwgMjMyLCAxNTIsIDE3NywgMiwgMjMwLCAyMjksIDIxOCwgMTQxLCAyMzIsIDE1MiwgCisgICAgMjIsIDIsIDIwMywgMjQ4LCAxNjQsIDIzMiwgMTUyLCAxNzcsIDIsIDIwMywgMjQ4LCAxNjQsIDIzMiwgMTUyLCAyMiwgMiwgCisgICAgNTIsIDIyNiwgMTI3LCAyMzIsIDE1MiwgMjIsIDIsIDIxNCwgMTgzLCAyMzIsIDE1MiwgMjIsIDIsIDUyLCAyMTQsIDE4MywgCisgICAgNCwgMjEzLCAyNTEsIDIsIDIxNCwgMTgzLCAyMzIsIDE1MiwgMTc3LCAyLCA1MiwgMjI2LCAxMjcsIDIzMiwgMTUyLCAxNzcsIAorICAgIDIsIDUyLCAyMTQsIDE4MywgMjEwLCAxNjAsIDE4OSwgMjQ3LCAxMzcsIDI1NCwgODcsIDIxMCwgMTYwLCAxODksIDIyMywgCisgICAgMTUxLCAyNTQsIDg3LCAyNDUsIDEwNiwgNSwgMiwgNTksIDUxLCAyNDAsIDExMSwgMiwgNTksIDQ4LCAyMTUsIDIxMiwgMjAzLCAKKyAgICAyNTIsIDE0OSwgMiwgNTIsIDY3LCA5MSwgMjE1LCAyMTIsIDIwMywgMjUyLCAxNDksIDIsIDIxNSwgMjEyLCA2NywgOTEsIAorICAgIDIxNiwgOTAsIDIyNiwgMTcyLCAyLCA1OSwgNDgsIDIxNiwgOTAsIDIyNiwgMTcyLCAyLCAyMjIsIDIzMSwgMjQ3LCAxMjYsIAorICAgIDIxOSwgMTY0LCAyMzAsIDE4NywgMjE5LCAxNjMsIDI0OSwgMjA3LCAyLCA1OSwgNDgsIDI0NSwgMTA2LCAyLCAyNTMsIDIyNCwgCisgICAgMjU0LCAxNTYsIDEyOCwgMjE2LCA0MywgMiwgMjUwLCAzOSwgMjU1LCAyMywgMjU0LCA1NiwgMTI4LCAxNzcsIDEyOCwgMTEyLCAKKyAgICAyNDUsIDEwNiwgNSwgNzIsIDk2LCA1MCwgOTYsIDUsIDcyLCAyNDUsIDEwNiwgNTAsIDI0NSwgMTA2LCA1LCA3MiwgMjE2LCAKKyAgICA5MCwgMjI2LCAxNzEsIDUyLCAyNDksIDIzNSwgMjQ1LCAxMDcsIDExMywgMjQ5LCAyMDIsIDI0NSwgMTA2LCAyMTksIDE3OCwgCisgICAgMTM0LCAyNDksIDIwMiwgMjQ1LCAxMDYsIDIxOSwgMTc4LCAyNDUsIDEwNiwgNSwgMiwgMTEzLCAxNzAsIDcyLCAyMiwgMTEzLCAKKyAgICAxNzAsIDUxLCAyNDUsIDEwMiwgMiwgMjQ0LCAxOSwgMTcwLCA0OCwgMjMzLCAyMSwgMiwgMjUwLCA0NCwgMjM1LCAyMjIsIAorICAgIDI0MiwgMTM3LCAyLCAyNTAsIDQ0LCAyMzUsIDIyMiwgMjMzLCAyMSwgMiwgMjI0LCAxNiwgMTY0LCA0OCwgMjQyLCAxMzcsIAorICAgIDIsIDIyNCwgMTYsIDE2NCwgNDgsIDIzMywgMjEsIDE3NywgMjE5LCA5OSwgMTI4LCAxMTIsIDI0MiwgMTM3LCAxNzcsIDIxOSwgCisgICAgOTksIDEyOCwgMTEyLCAyMzMsIDIxLCAxNzcsIDIxOSwgOTksIDEyOCwgMjE2LCA0MywgMiwgNTksIDIzNSwgMjIyLCAyNDIsIAorICAgIDEzNywgMTc3LCAyMTksIDk5LCAxMjgsIDIxNiwgNDMsIDIsIDU5LCAyMzUsIDIyMiwgMjMzLCAyMSwgMTc3LCAyMTksIDk5LCAKKyAgICAxMjgsIDIxNiwgNDMsIDIsIDU5LCA0OCwgMjQyLCAxMzcsIDE3NywgMjE5LCA5OSwgMTI4LCAyMTYsIDQzLCAyLCA1OSwgNDgsIAorICAgIDIzMywgMjEsIDE3NywgMjE5LCA5OSwgMTI4LCAyMTYsIDQzLCAyLCA1OSwgNzIsIDIyMiwgMjU0LCAyNDIsIDEzNywgMTc3LCAKKyAgICAyMTksIDk5LCAxMjgsIDIxNiwgNDMsIDIsIDU5LCA3MiwgMjMzLCA1MiwgMjMzLCAyMSwgMTc3LCAyNTQsIDU3LCAyNDIsIAorICAgIDEzNywgMTc3LCAyNTQsIDU3LCAyMzMsIDIxLCAyMiwgMjE5LCAxNTUsIDIyOCwgNTcsIDEyOCwgMTEyLCAyNDIsIDEzNywgCisgICAgMjIsIDIxOSwgMTU1LCAyMjgsIDU3LCAxMjgsIDExMiwgMjMzLCAyMSwgMjIsIDIyOCwgNTcsIDI1NCwgNTcsIDI0MiwgMTM3LCAKKyAgICAyMiwgMjI4LCA1NywgMjU0LCA1NywgMjMzLCAyMSwgNzIsIDI0NiwgMTE5LCAxMjgsIDcyLCAyNDIsIDEzNiwgMjQyLCAxMzcsIAorICAgIDcyLCAyNDYsIDExOSwgMTI4LCA3MiwgMjMzLCAyMCwgMjMzLCAyMSwgNzIsIDIxOSwgMTY0LCAxNzcsIDI0NSwgMTA3LCAKKyAgICAyNDIsIDEzNywgNzIsIDIxOSwgMTY0LCAxNzcsIDI0NSwgMTA3LCAyMzMsIDIxLCA3MiwgMjE5LCAxNjQsIDcyLCAyNDIsIAorICAgIDEzNiwgMjQyLCAxMzcsIDcyLCAyMTksIDE2NCwgNzIsIDIzMywgMjAsIDIzMywgMjEsIDcyLCAyNDIsIDEzNywgNzIsIDI0NiwgCisgICAgMTE5LCAyNDUsIDEwNywgMjQyLCAxMzcsIDcyLCAyMzMsIDIxLCA3MiwgMjQ2LCAxMTksIDI0NSwgMTA3LCAyMzMsIDIxLCAKKyAgICA3MiwgMjE5LCA5OSwgMTI4LCA3MiwgMjQyLCAxMzcsIDcyLCAyMTksIDk5LCAyNDUsIDEwNywgMjQyLCAxMzcsIDcyLCAyMTksIAorICAgIDk5LCAxMjgsIDcyLCAyMzMsIDIxLCA3MiwgMjE5LCA5OSwgMjQ1LCAxMDcsIDIxOSwgOTksIDEyOCwgMjE2LCA0MywgMTc3LCAKKyAgICAyMzMsIDIwLCAyMTksIDk5LCAxMjgsIDIxNiwgNDMsIDE3NywgMjQyLCAxMzYsIDIxOSwgOTksIDEyOCwgMjE2LCA0MywgCisgICAgMTc3LCAyMzMsIDIxLCAyLCA1OSwgMjM1LCAyMjIsIDIxOSwgOTksIDEyOCwgMjE2LCA0MywgMTc3LCAyNDIsIDEzNywgMiwgCisgICAgNTksIDIzNSwgMjIyLCAyNDYsIDExOSwgMTI4LCAyMTYsIDQzLCAxNzcsIDIzMywgMjAsIDI0NiwgMTE5LCAxMjgsIDIxNiwgCisgICAgNDMsIDE3NywgMjQyLCAxMzYsIDI0NiwgMTE5LCAyMTksIDk5LCAxMjgsIDIxNiwgNDMsIDE3NywgMjMzLCAyMCwgMjQ2LCAKKyAgICAxMTksIDIxOSwgOTksIDEyOCwgMjE2LCA0MywgMTc3LCAyNDIsIDEzNiwgMjE5LCAxNjQsIDE3NywgMjMzLCAyMCwgMjE5LCAKKyAgICAxNjQsIDE3NywgMjQyLCAxMzYsIDIxOSwgMTY0LCA3MiwgMjMzLCAyMSwgNzIsIDI0NSwgMTA2LCA1MCwgMjE5LCAxNjQsIAorICAgIDcyLCAyNDIsIDEzNywgNzIsIDI0NSwgMTA2LCA1MCwgNTIsIDIyOSwgOTYsIDIzMywgMjAsIDUyLCAyMjksIDk2LCAyNDIsIAorICAgIDEzNiwgNTIsIDIyOSwgOTYsIDIzMywgMjEsIDIsIDIxNCwgMTgzLCAyNDIsIDEzNywgMjI2LCAxMjUsIDIzMywgMjAsIDI0MiwgCisgICAgMTM3LCAyNTIsIDM4LCAyMzMsIDIwLCAyMzMsIDIxLCAyNTAsIDgsIDI1MSwgODYsIDI0OSwgMTAwLCAyNDIsIDEzNywgMjUwLCAKKyAgICA4LCAyNTEsIDg2LCAyNDksIDEwMCwgMjMzLCAyMSwgMjUwLCA4LCAyNTEsIDg2LCAyNDksIDEwMSwgNzIsIDIxOSwgOTksIAorICAgIDI0NSwgMTA3LCAyNDIsIDEzNywgMjUwLCA4LCAyNTEsIDg2LCAyNDksIDEwMSwgNzIsIDIxOSwgOTksIDI0NSwgMTA3LCAKKyAgICAyMTksIDgwLCAyMTYsIDIwMSwgMjMzLCA4OSwgMjE2LCAyMDEsIDIxOSwgODAsIDIxNiwgMjAyLCAxNzcsIDEyOCwgMTEyLCAKKyAgICAyMzMsIDg5LCAyMTYsIDIwMiwgMTc3LCAxMjgsIDExMiwgMjQ1LCAxMDYsIDUsIDIsIDI1MSwgMTE2LCA0OCwgMjI0LCAyMDYsIAorICAgIDcyLCAyMTksIDE1NSwgMjQ1LCAxMDYsIDUwLCAyMTgsIDU3LCA3MiwgMjE5LCAxNTUsIDI0NSwgMTA2LCA1MCwgMjI0LCAKKyAgICAyMDYsIDcyLCAyMTksIDE1NSwgMjI4LCA1NywgMTI4LCAxMTIsIDIxOCwgNTcsIDcyLCAyMTksIDE1NSwgMjI4LCA1NywgCisgICAgMTI4LCAxMTIsIDIyNCwgMjA2LCA3MiwgMjQ1LCAxMDYsIDUwLCAyMTgsIDU3LCA3MiwgMjQ1LCAxMDYsIDUwLCAyMjQsIAorICAgIDIwNiwgNzIsIDIyOCwgNTcsIDEyOCwgMTEyLCAyMTgsIDU3LCA3MiwgMjI4LCA1NywgMTI4LCAxMTIsIDIyNCwgMjA2LCA3MiwgCisgICAgMjU0LCAxNTYsIDEyOCwgMTEyLCAyMTgsIDU3LCA3MiwgMjU0LCAxNTYsIDEyOCwgMTEyLCAyMjQsIDIwNiwgNzIsIDIyOCwgCisgICAgNTcsIDI1NCwgMTU2LCAxMjgsIDExMiwgMjE4LCA1NywgNzIsIDIyOCwgNTcsIDI1NCwgMTU2LCAxMjgsIDExMiwgNTIsIAorICAgIDIyNCwgMjA1LCA1MiwgMjE4LCA1NiwgMjE4LCA2NSwgMiwgMjQ3LCAxMjgsIDIxOCwgMjMsIDIsIDI0NywgMTI4LCAyMTgsIAorICAgIDY1LCAyLCA5NiwgNSwgNTEsIDIxOCwgMjMsIDIsIDk2LCA1LCA1MSwgMjE4LCA2NSwgMiwgMjMwLCA4OSwgNSwgNTEsIDIxOCwgCisgICAgMjMsIDIsIDIzMCwgODksIDUsIDUxLCAyMTgsIDY1LCA2NCwgMTc3LCAxMjgsIDIxNiwgNDMsIDIsIDU5LCA0OCwgMjE4LCAKKyAgICAyMywgNjQsIDE3NywgMTI4LCAyMTYsIDQzLCAyLCA1OSwgNDgsIDIxOCwgNjUsIDY0LCA3MiwgMjQ1LCAxMDYsIDUwLCAyMTgsIAorICAgIDIzLCA2NCwgNzIsIDI0NSwgMTA2LCA1MCwgMjE4LCA2NSwgNjQsIDcyLCAyMTYsIDkwLCAyMjYsIDE3MSwgMjE4LCAyMywgCisgICAgNjQsIDcyLCAyMTYsIDkwLCAyMjYsIDE3MSwgMjE4LCA2NSwgNjQsIDcyLCAyNTQsIDE1NiwgMTI4LCAxMTIsIDIxOCwgMjMsIAorICAgIDY0LCA3MiwgMjU0LCAxNTYsIDEyOCwgMTEyLCAyMTgsIDY1LCA2NCwgNzIsIDIyOCwgNTcsIDEyOCwgMTEyLCAyMTgsIDIzLCAKKyAgICA2NCwgNzIsIDIyOCwgNTcsIDEyOCwgMTEyLCA0MiwgNDMsIDIwNCwgOTMsIDIyNiwgMTcxLCA0MiwgNDQsIDIwNCwgOTMsIAorICAgIDIyNiwgMTcxLCAyNTAsIDgsIDIxOCwgNjQsIDI1MCwgOCwgMjE4LCAyMiwgMjUwLCA4LCAyMTgsIDY1LCAxNzcsIDEyOCwgCisgICAgMTEyLCAyNTAsIDgsIDIxOCwgMjMsIDE3NywgMTI4LCAxMTIsIDIxOCwgNjUsIDcyLCAyMTgsIDIyLCAyMTgsIDIzLCA3MiwgCisgICAgMjE4LCA2NCwgMjE4LCA2NSwgNzIsIDIxOCwgNjQsIDIxOCwgMjMsIDcyLCAyMTgsIDIyLCAyMTgsIDIzLCAyNTIsIDM4LCAKKyAgICAyMTgsIDY0LCAyMTgsIDIzLCAyNTIsIDM4LCAyMiwgMjM1LCA3MSwgMjUxLCA4NiwgMjQ4LCAxNjUsIDIsIDIxOCwgNjQsIAorICAgIDI0NSwgMTc4LCA2NCwgMjI2LCAxNzQsIDI0NiwgMTExLCAyMjUsIDUxLCAyLCAyMTcsIDEzLCAyMTYsIDE0LCAyMTUsIDI0MSwgCisgICAgMjM1LCAyMDUsIDI0NCwgMjksIDIyOCwgNzAsIDIxOSwgMjUzLCA0MywgMjE3LCA4OCwgMjE5LCAyNTMsIDEyNCwgMjE3LCAKKyAgICA4OCwgMjE5LCAyNTMsIDEyMCwgMjE3LCA4OCwgMjI1LCAxNzUsIDIsIDIyMiwgOTMsIDY3LCAyNTIsIDE0OSwgMjE1LCAyMTIsIAorICAgIDQ0LCAyMTUsIDkzLCA1MiwgNjcsIDI1MiwgMTQ5LCA0MywgMjE1LCA5MywgNjcsIDI1MiwgMTQ5LCA1MiwgNDMsIDIxNSwgCisgICAgOTMsIDUyLCA2NywgMjUyLCAxNDksIDUyLCA0MywgMjE1LCA5MywgMjAwLCAyNDgsIDE2NSwgMjQzLCAyNTEsIDQzLCAyMzEsIAorICAgIDY4LCA2NCwgNTIsIDIxMywgMjM5LCAyMTksIDI1MywgMTI0LCAyMTcsIDg5LCAyLCAyMjYsIDEyNywgMjE5LCAyNTMsIDEyMCwgCisgICAgMjE3LCA4OSwgMiwgMjE0LCAxODMsIDIxOSwgMjUzLCAxMjAsIDIxNywgODksIDcyLCAyMTksIDI1MywgMTI0LCAyMTcsIDg4LCAKKyAgICA1MiwgMTI0LCAyMTcsIDg4LCA1MiwgMTIwLCAyMTcsIDg4LCA1MiwgMjE4LCAxMDUsIDIyOCwgNTcsIDUwLCAyMjMsIDUyLCAKKyAgICA1MiwgMjE4LCAxMDUsIDIyOCwgNTcsIDUwLCAyNDcsIDE0NiwgMjI4LCA1NywgMjQ3LCAxODMsIDIsIDIyMywgNTIsIDIyOSwgCisgICAgMTA2LCAyMTksIDk3LCA2NywgMjMyLCAyMjAsIDIsIDI1MCwgNDQsIDQ4LCA2NywgMjMyLCAyMjAsIDIsIDI1MCwgNDQsIDUxLCAKKyAgICAxMjQsIDIxNywgODksIDIsIDI1MCwgNDQsIDUxLCAyMjYsIDEyLCAyLCAyMDMsIDkxLCAyMjYsIDEyLCAyLCAyMTYsIDkwLCAKKyAgICAyMjYsIDE3MSwgMjE1LCAyMTIsIDY3LCAyNTIsIDE0OSwgMjUxLCAyNTIsIDIyMywgOTQsIDIxNSwgMjEyLCA2NywgMjUyLCAKKyAgICAxNDksIDIsIDIwMywgOTEsIDIxNSwgMjEyLCAyNDksIDIzNSwgMjI2LCAxNzEsIDIxNSwgMjEyLCAyMjksIDk2LCAyMzMsIAorICAgIDIwLCAyMTUsIDIxMiwgMjI5LCA5NiwgMjQyLCAxMzYsIDI0NiwgMTE5LCAyMTksIDk5LCAyMzMsIDIxLCAxNzcsIDEyOCwgCisgICAgMTEyLCAyNDYsIDExOSwgMjE5LCA5OSwgMjQyLCAxMzcsIDE3NywgMTI4LCAxMTIsIDIxNSwgMjEyLCAyMTksIDQ5LCAyNTEsIAorICAgIDI1MiwgMjIzLCA5NCwgMjMzLCA5MSwgMjE1LCAyMTIsIDY3LCAyNTIsIDE0OSwgMjI2LCAxNzEsIDUyLCAyMTksIDQ5LCAKKyAgICAyMjYsIDE3MSwgNzEsIDY3LCAxMzAsIDIzMCwgMjksIDcxLCA2NywgMTMwLCAyMjgsIDYxLCAyNDUsIDIyOCwgNzEsIDc1LCAKKyAgICAyMjgsIDYxLCAyMTIsIDksIDcxLCA3NSwgMjE5LCAzMCwgMjQ1LCAyMjgsIDcxLCA3NSwgMjE5LCAzMCwgMjEyLCA5LCA3MSwgCisgICAgNzUsIDQzLCA0NCwgNzEsIDc1LCAxNDAsIDg1LCA3NSwgMjE0LCAxNTMsIDg1LCA3NSwgMjQ2LCAxMTIsIDg1LCA3NSwgMjI4LCAKKyAgICA2MSwgMjQ1LCAyMjgsIDg1LCA3NSwgMjI4LCA2MSwgMjEyLCA5LCA4NSwgNzUsIDIxOSwgMzAsIDI0NSwgMjI4LCA4NSwgNzUsIAorICAgIDIxOSwgMzAsIDIxMiwgOSwgODUsIDc1LCA0MywgNDQsIDg1LCA3NSwgMTIwLCAxMjQsIDg1LCA3NSwgOTcsIDgwLCAyLCAKKyAgICAyMTYsIDc4LCAyNDYsIDExMSwgOTcsIDgwLCAyLCAyMTYsIDc4LCAyMTQsIDE1MiwgMTQwLCA4MCwgMiwgMjE2LCA3OCwgCisgICAgMjQ2LCAxMTEsIDE0MCwgODAsIDIsIDIxNiwgNzgsIDIxNCwgMTUyLCA0MiwgMiwgMjE2LCAxNSwgMTYzLCAyNTEsIDIyOSwgCisgICAgNDIsIDIsIDI1MSwgMTgzLCAxNjMsIDI1MSwgMjI5LCA0MiwgMiwgMjE0LCAxNjAsIDQ0LCAyNDgsIDcsIDE2MywgMjUxLCAKKyAgICAyMjksIDQyLCAyLCAyMzIsIDExNCwgNDMsIDI0OCwgNywgMTYzLCAyNTEsIDIyOSwgMjQ4LCAxLCAyLCA0MywgMTYzLCAyNTEsIAorICAgIDIyOSwgMjQ4LCAxLCAyLCA0NCwgMTYzLCAyNTEsIDIyOSwgMjQ4LCAxLCAyLCAyMTYsIDE1LCAxNjMsIDI1MSwgMjI5LCAKKyAgICAyNDgsIDEsIDIsIDI1MSwgMTgzLCAxNjMsIDI1MSwgMjI5LCAyNDYsIDEyNiwgMjE4LCAyMzYsIDg1LCAyMzMsIDkxLCAyMTgsIAorICAgIDIzNiwgNzEsIDIzMywgOTEsIDIxOCwgMjM2LCA4NSwgMjEzLCAxODcsIDQsIDIxOCwgMjM2LCA3MSwgMjEzLCAxODcsIDQsIAorICAgIDIxOCwgMjM2LCA4NSwgMjI1LCAxOTMsIDcxLCAyMjUsIDE5MywgNzEsIDI0MSwgMjAwLCA4NSwgMjQxLCAyMDAsIDIwMywgCisgICAgODUsIDI0MSwgMjAwLCA4NSwgMjMzLCA5MSwgMjUwLCA0MywgODUsIDIzMSwgODcsIDI0OCwgMCwgNzEsIDIzMSwgODcsIAorICAgIDI0OCwgMCwgODUsIDIzMSwgODcsIDIzMiwgMTEwLCA3MSwgMjMxLCA4NywgMjMyLCAxMTAsIDg1LCA0LCAyNDgsIDAsIDg1LCAKKyAgICA0LCAyMzIsIDExMCwgNzEsIDQsIDIzMiwgMTEwLCA4NSwgMjAzLCAyNDUsIDE3MiwgNzEsIDIwMywgMjQ1LCAxNzIsIDg1LCAKKyAgICA2NywgMjQ1LCAxNzIsIDcxLCA2NywgMjQ1LCAxNzIsIDQzLCA4MCwgMiwgNCwgMjUwLCA0MywgMTM0LCAxNDAsIDI1MywgCisgICAgMjU1LCA0MywgODAsIDIsIDM3LCAyMjUsIDI1LCAyMDAsIDE0MCwgMjE4LCAyMzIsIDc1LCAxNDAsIDIxNSwgNTgsIDgwLCAyLCAKKyAgICA2NywgOTEsIDE0MCwgMjE1LCA1OCwgODAsIDIsIDUyLCA2NywgOTEsIDE0MCwgMjE1LCA1OCwgODAsIDI0MywgMjUxLCAxMzAsIAorICAgIDE0MCwgMjE1LCA1OCwgMjE1LCAyMTIsIDI0OCwgMTY1LCA3NSwgMTQwLCA4MCwgMiwgMjQ2LCAxMjYsIDIxOCwgMTQxLCAKKyAgICAxNDAsIDgwLCAyLCAyMTcsIDc5LCAyLCA2NywgOTEsIDE0MCwgODAsIDIsIDIxNywgNzksIDIsIDUyLCA2NywgOTEsIDE0MCwgCisgICAgMjE1LCA1OCwgODAsIDIsIDIxNywgNzgsIDE0MCwgMjE1LCA1OCwgODAsIDIsIDIxNywgNzksIDIsIDY3LCA5MSwgMTQwLCAKKyAgICAyMTUsIDU4LCA4MCwgMiwgMjE3LCA3OSwgMiwgNTIsIDY3LCA5MSwgMTQwLCA4MCwgMjE2LCAxNDAsIDIxMSwgMTc4LCAyMTIsIAorICAgIDM2LCA4MCwgMjI1LCAxMCwgMjQ3LCAyMDMsIDIzMywgNTIsIDI0NSwgMTA2LCA1LCA3MiwgMTQwLCA3NSwgMjIzLCA1MywgCisgICAgMjE2LCA5MCwgMjI2LCAxNzIsIDcyLCAxNDAsIDc1LCAxNDAsIDgwLCA3MiwgMjIzLCA1MywgMjU0LCAxNTYsIDEyOCwgMTEyLCAKKyAgICA5NywgODAsIDIxNiwgMTQwLCAyNDIsIDEzNiwgOTcsIDgwLCAyMTYsIDE0MCwgMjE4LCAyMiwgMTQwLCAyMjQsIDI3LCA3NSwgCisgICAgOTcsIDIyNCwgMjcsIDc1LCAyMjMsIDUzLCAyMTYsIDkwLCAyMjYsIDE3MiwgNzIsIDk3LCA3NSwgOTcsIDgwLCA3MiwgMjIzLCAKKyAgICA1MywgMjU0LCAxNTYsIDEyOCwgMTEyLCAyMTYsIDkwLCAyMjYsIDE3MiwgNzIsIDE0MCwgNzUsIDE0MCwgODAsIDcyLCAyNTQsIAorICAgIDE1NiwgMTI4LCAxMTIsIDE0MCwgODAsIDcyLCAyMjMsIDUzLCAyMTYsIDkwLCAyMjYsIDE3MSwgOTcsIDgwLCA3MiwgMjIzLCAKKyAgICA1MywgMjE2LCA5MCwgMjI2LCAxNzEsIDcxLCAyMzEsIDg3LCAyMTgsIDE1OCwgODUsIDQsIDIxOCwgMTU4LCA3MSwgNCwgCisgICAgMjE4LCAxNTgsIDg1LCAyMjIsIDI1MCwgMjI1LCAxOTMsIDcxLCAyMjIsIDI1MCwgMjI1LCAxOTMsIDExNCwgMjMzLCA5MSwgCisgICAgMjUwLCA0MywgMTE0LCAyMjYsIDEyOCwgMiwgMjI2LCAxMjgsIDIzNSwgMjIyLCAxMTQsIDI1MCwgNDQsIDIsIDI1MCwgNDQsIAorICAgIDIzNSwgMjIyLCAxMTQsIDI1MCwgNDMsIDExNCwgMzcsIDIyMiwgMCwgMTQ1LCA2LCAxLCAyNTMsIDE2NywgMTQ1LCA2LCAxLCAKKyAgICAyNTEsIDEyNSwgMTQ1LCA2LCAxLCAyMTMsIDI1MywgMTQ1LCA2LCAxLCAyNDIsIDE5MiwgMTQ1LCA2LCAxLCAyNDcsIDE0OCwgCisgICAgMTQ1LCA2LCAxLCAyMTEsIDIxLCAxNDUsIDYsIDEsIDIxMCwgNjgsIDE0NSwgNiwgMSwgMjQ2LCA0MiwgMTQ1LCA2LCAxLCAKKyAgICAyMTAsIDkxLCAxNDUsIDYsIDEsIDIzNSwgMTU0LCAxNDUsIDYsIDEsIDY1LCAyMzUsIDE1NCwgMTQ1LCA2LCAxLCA3NCwgCisgICAgMTQ1LCA2LCAxLCAyNDcsIDE2OCwgMTQ1LCA2LCAxLCAyMzQsIDI0NiwgMTQ1LCA2LCAxLCAyMzIsIDE5MiwgMTQ1LCA2LCAxLCAKKyAgICAyMzAsIDM0LCAxNDUsIDYsIDEsIDIyOSwgMTk2LCAxNDUsIDYsIDEsIDIyNiwgMTg5LCAxNDUsIDYsIDEsIDIyNSwgNywgCisgICAgMTQ1LCA2LCAxLCAyMjIsIDIzMCwgMTQ1LCA2LCAxLCAyMTksIDg1LCAxNDUsIDYsIDEsIDIxNSwgODEsIDE0NSwgNiwgMSwgCisgICAgMjE0LCAyMDEsIDE0NSwgNiwgMSwgMjQzLCAyNTQsIDE0NSwgNiwgMSwgMjQxLCAyMDYsIDE0NSwgNiwgMSwgMjI2LCAxMzksIAorICAgIDE0NSwgNiwgMSwgMjI1LCAyMjQsIDE0NSwgNiwgMSwgMjE5LCAyMzAsIDE0NSwgNiwgMSwgMjE1LCAxNjgsIDE0NSwgNiwgMSwgCisgICAgMjUwLCA4MywgMTQ1LCA2LCAxLCAyMjAsIDEwNCwgMTQ1LCA2LCAxLCAyMTEsIDI3LCAxNDUsIDYsIDEsIDIxMSwgMjksIAorICAgIDE0NSwgNiwgMSwgMjExLCA1NywgMTQ1LCA2LCAxLCAyMTgsIDI1NSwgMTYyLCAxNDUsIDYsIDEsIDIxMCwgMjEyLCAxNDUsIAorICAgIDYsIDEsIDQsIDIxMCwgMTgzLCAxNDUsIDYsIDEsIDQsIDIxMCwgMTg0LCAyLCAyMTcsIDc4LCAxNDUsIDYsIDEsIDIxMCwgCisgICAgMjQ0LCAxNDUsIDYsIDEsIDIzNSwgMTkxLCA0LCAyMTAsIDE4MywgMTQ1LCA2LCAxLCAyNTIsIDEsIDIxMCwgMTgzLCAxNDUsIAorICAgIDYsIDEsIDIzNSwgMTkxLCAyNTIsIDEsIDIxMCwgMTgzLCAxNDUsIDYsIDEsIDI0NCwgOTAsIDE0NSwgNiwgMSwgMjM1LCAKKyAgICAxNTIsIDE0NSwgNiwgMSwgMjE5LCAyMjksIDE0NSwgNiwgMSwgMjE1LCAyMDMsIDYxLCAxNDUsIDYsIDEsIDIzMywgODEsIAorICAgIDIzMCwgMzQsIDE0NSwgNCwgMSwgMjUzLCAxNjcsIDE0NSwgNCwgMSwgMjUxLCAxMjUsIDE0NSwgNCwgMSwgMjEzLCAyNTMsIAorICAgIDE0NSwgNCwgMSwgMjQyLCAxOTIsIDE0NSwgNCwgMSwgMjQ3LCAxNDgsIDE0NSwgNCwgMSwgMjExLCAyMSwgMTQ1LCA0LCAxLCAKKyAgICAyMTAsIDY4LCAxNDUsIDQsIDEsIDI0NiwgNDIsIDE0NSwgNCwgMSwgMjEwLCA5MSwgMTQ1LCA0LCAxLCAyMzUsIDE1NCwgCisgICAgMTQ1LCA0LCAxLCA2NSwgMjM1LCAxNTQsIDE0NSwgNCwgMSwgNzQsIDE0NSwgNCwgMSwgMjQ3LCAxNjgsIDE0NSwgNCwgMSwgCisgICAgMjM0LCAyNDYsIDE0NSwgNCwgMSwgMjMyLCAxOTIsIDE0NSwgNCwgMSwgMjMwLCAzNCwgMTQ1LCA0LCAxLCAyMjksIDE5NiwgCisgICAgMTQ1LCA0LCAxLCAyMjYsIDE4OSwgMTQ1LCA0LCAxLCAyMjUsIDcsIDE0NSwgNCwgMSwgMjIyLCAyMzAsIDE0NSwgNCwgMSwgCisgICAgMjE5LCA4NSwgMTQ1LCA0LCAxLCAyMTUsIDgxLCAxNDUsIDQsIDEsIDIxNCwgMjAxLCAxNDUsIDQsIDEsIDI0MywgMjU0LCAKKyAgICAxNDUsIDQsIDEsIDI0MSwgMjA2LCAxNDUsIDQsIDEsIDIyNiwgMTM5LCAxNDUsIDQsIDEsIDIyNSwgMjI0LCAxNDUsIDQsIDEsIAorICAgIDIxOSwgMjMwLCAxNDUsIDQsIDEsIDIxNSwgMTY4LCAxNDUsIDQsIDEsIDI1MCwgODMsIDE0NSwgNCwgMSwgMjIwLCAxMDQsIAorICAgIDE0NSwgNCwgMSwgMjExLCAyNywgMTQ1LCA0LCAxLCAyMTEsIDI5LCAxNDUsIDQsIDEsIDIxMSwgNTcsIDE0NSwgNCwgMSwgCisgICAgMjE4LCAyNTUsIDE2MiwgMTQ1LCA0LCAxLCAyMTAsIDIxMiwgMTQ1LCA0LCAxLCA0LCAyMTAsIDE4MywgMTQ1LCA0LCAxLCA0LCAKKyAgICAyMTAsIDE4NCwgMiwgMjE3LCA3OCwgMTQ1LCA0LCAxLCAyMTAsIDI0NCwgMTQ1LCA0LCAxLCAyMzUsIDE5MSwgNCwgMjEwLCAKKyAgICAxODMsIDE0NSwgNCwgMSwgMjUyLCAxLCAyMTAsIDE4MywgMTQ1LCA0LCAxLCAyMzUsIDE5MSwgMjUyLCAxLCAyMTAsIDE4MywgCisgICAgMTQ1LCA0LCAxLCAyNDQsIDkwLCAxNDUsIDQsIDEsIDIzNSwgMTUyLCAxNDUsIDQsIDEsIDIxOSwgMjI5LCAxNDUsIDQsIDEsIAorICAgIDIxNSwgMjAzLCA2MSwgMTQ1LCA0LCAxLCAyMzMsIDgxLCAyMzAsIDM0LCA3LCA2LCAxLCAyMzMsIDE1NSwgMiwgNTIsIDEzMCwgCisgICAgNywgNCwgMSwgMjMzLCAxNTUsIDIsIDUyLCAxMzAsIDcsIDYsIDEsIDIzMywgMTU1LCAyLCAyMzAsIDIyOSwgMTg0LCA3LCA2LCAKKyAgICAxLCAyMjYsIDExMCwgMiwgOTEsIDcsIDYsIDEsIDIyMywgMjI3LCAyLCAyMTcsIDc4LCA3LCA0LCAxLCAxMTYsIDIsIDkxLCAKKyAgICA3LCA0LCAxLCAyMTcsIDE1NCwgMiwgMjQ4LCA3LCA5MSwgNywgNiwgMSwgMjQyLCA2OCwgMiwgMjQ4LCA0NywgNywgNCwgMSwgCisgICAgMjQyLCA2OCwgMiwgMjQ4LCA0NywgNywgNiwgMSwgMjM1LCAzMCwgMiwgMjQ4LCA0NywgNywgNCwgMSwgMjM1LCAzMCwgMiwgCisgICAgMjQ4LCA0NywgNywgNiwgMSwgMjEwLCAxNjAsIDIsIDI0OCwgNDcsIDcsIDQsIDEsIDIxMCwgMTYwLCAyLCAyNDgsIDQ3LCA3LCAKKyAgICA2LCAxLCAyNTQsIDE1MSwgNywgNiwgMSwgMjMyLCA1NSwgMiwgMTAzLCA3LCA2LCAxLCAyMTUsIDk0LCA2MSwgNywgNiwgMSwgCisgICAgMjE1LCA5NCwgMjU0LCAxNTEsIDcsIDQsIDEsIDIxNCwgMTA2LCAyLCA0NCwgMTAzLCA3LCA2LCAxLCAyMTIsIDk5LCAyLCAKKyAgICAxMDMsIDcsIDQsIDEsIDIxMiwgOTksIDIsIDEwMywgNywgNCwgMSwgMjE0LCAxMDYsIDIsIDI0OSwgMTA4LCA3LCA2LCAxLCAKKyAgICAxNjMsIDI0MiwgNjcsIDcsIDQsIDEsIDE2MywgMjQyLCA2NywgNywgNCwgMSwgMjE3LCA3NiwgMjI1LCAxMzYsIDcsIDQsIDEsIAorICAgIDE2MCwgMiwgMjI4LCA1NSwgNywgNCwgMSwgMjE1LCA5NCwgMjIzLCAyMjcsIDIsIDIxNywgNzgsIDcsIDQsIDEsIDE0NCwgMiwgCisgICAgMTIxLCAyMjIsIDIzNywgMjM1LCAyMjIsIDcsIDEsIDQsIDYsIDIxNSwgOTQsIDc2LCA3LCAyMTgsIDY2LCA0LCAxLCAyMzUsIAorICAgIDE1MCwgNTgsIDEsIDYsIDIxNCwgMTA1LCA3LCA2LCAxLCAyMjIsIDk0LCAyLCAyMTcsIDI1MSwgMjE3LCA3OCwgNywgNiwgMSwgCisgICAgMjEwLCAxNjAsIDIsIDIxNywgMjUxLCAyMTcsIDc4LCA4MSwgNiwgMSwgMjU0LCAxNzMsIDgxLCA0LCAxLCAyNTQsIDE3MywgCisgICAgODEsIDYsIDEsIDIxMywgMTczLCA4MSwgNCwgMSwgMjEzLCAxNzMsIDgxLCA2LCAxLCAyNDMsIDExNCwgODEsIDQsIDEsIAorICAgIDI0MywgMTE0LCA4MSwgNiwgMSwgMjQ4LCAxOTksIDgxLCA0LCAxLCAyNDgsIDE5OSwgODEsIDYsIDEsIDI0NSwgMjAyLCA4MSwgCisgICAgNCwgMSwgMjQ1LCAyMDIsIDgxLCA2LCAxLCAyMTksIDM1LCA4MSwgNCwgMSwgMjE5LCAzNSwgODEsIDYsIDEsIDIxMCwgMTAxLCAKKyAgICA4MSwgNCwgMSwgMjEwLCAxMDEsIDgxLCA2LCAxLCAyNDEsIDI1NSwgODEsIDQsIDEsIDI0MSwgMjU1LCA4MSwgNiwgMSwgCisgICAgMjE2LCAxNzgsIDgxLCA0LCAxLCAyMTYsIDE3OCwgODEsIDYsIDEsIDI0MCwgMTIzLCA4MSwgNCwgMSwgMjQwLCAxMjMsIDgxLCAKKyAgICA2LCAxLCAyMzQsIDIzMywgODEsIDQsIDEsIDIzNCwgMjMzLCA4MSwgNiwgMSwgMjMzLCA3OCwgODEsIDQsIDEsIDIzMywgNzgsIAorICAgIDgxLCA2LCAxLCAyMzAsIDIzNSwgODEsIDQsIDEsIDIzMCwgMjM1LCA4MSwgNiwgMSwgMjI4LCAyMzgsIDgxLCA0LCAxLCAKKyAgICAyMjgsIDIzOCwgODEsIDYsIDEsIDIzMywgMjM5LCA4MSwgNCwgMSwgMjMzLCAyMzksIDgxLCA2LCAxLCA3OCwgODEsIDQsIDEsIAorICAgIDc4LCA4MSwgNiwgMSwgMjI1LCAxMTEsIDgxLCA0LCAxLCAyMjUsIDExMSwgODEsIDYsIDEsIDIyMiwgMjEzLCA4MSwgNCwgMSwgCisgICAgMjIyLCAyMTMsIDgxLCA2LCAxLCAyMTksIDE2NywgODEsIDQsIDEsIDIxOSwgMTY3LCA4MSwgNiwgMSwgMjE3LCA0MiwgODEsIAorICAgIDQsIDEsIDIxNywgNDIsIDgxLCA2LCAxLCAyMTQsIDIyOSwgODEsIDQsIDEsIDIxNCwgMjI5LCA4MSwgNiwgMSwgMjQ0LCAKKyAgICAxMjksIDgxLCA0LCAxLCAyNDQsIDEyOSwgODEsIDYsIDEsIDIzNCwgMTE4LCA4MSwgNCwgMSwgMjM0LCAxMTgsIDgxLCA2LCAKKyAgICAxLCAyMjQsIDE2NCwgODEsIDQsIDEsIDIyNCwgMTY0LCA4MSwgNiwgMSwgMjI2LCAxODIsIDgxLCA0LCAxLCAyMjYsIDE4MiwgCisgICAgODEsIDYsIDEsIDI0OCwgNSwgMjU0LCAxNzksIDgxLCA0LCAxLCAyNDgsIDUsIDI1NCwgMTc5LCA4MSwgNiwgMSwgNTUsIDgxLCAKKyAgICAyNTQsIDIwNSwgODEsIDQsIDEsIDU1LCA4MSwgMjU0LCAyMDUsIDgxLCA2LCAxLCAyNDksIDEyMywgMjQ1LCAyMDIsIDgxLCAKKyAgICA0LCAxLCAyNDksIDEyMywgMjQ1LCAyMDIsIDgxLCA2LCAxLCAyNDgsIDUsIDIzNCwgMjMzLCA4MSwgNCwgMSwgMjQ4LCA1LCAKKyAgICAyMzQsIDIzMywgODEsIDYsIDEsIDI0OCwgNSwgMjI4LCAyMzgsIDgxLCA0LCAxLCAyNDgsIDUsIDIyOCwgMjM4LCA4MSwgNiwgCisgICAgMSwgMjQ5LCAxMjMsIDIyOCwgMjM4LCA4MSwgNCwgMSwgMjQ5LCAxMjMsIDIyOCwgMjM4LCA4MSwgNiwgMSwgNTUsIDgxLCAKKyAgICAyMjYsIDE4MiwgODEsIDQsIDEsIDU1LCA4MSwgMjI2LCAxODIsIDgxLCA2LCAxLCAyMjEsIDI0OCwgODEsIDQsIDEsIDIyMSwgCisgICAgMjQ4LCA4MSwgNiwgMSwgMjQ5LCAxMzYsIDIyMCwgNTcsIDgxLCA0LCAxLCAyNDksIDEzNiwgMjIwLCA1NywgODEsIDYsIDEsIAorICAgIDU1LCA4MSwgMjIwLCA1NywgODEsIDQsIDEsIDU1LCA4MSwgMjIwLCA1NywgODEsIDYsIDEsIDU1LCA4MSwgMjQ1LCA4MywgCisgICAgODEsIDQsIDEsIDU1LCA4MSwgMjQ1LCA4MywgODEsIDYsIDEsIDI1NCwgMTkxLCAyMzQsIDEyMywgODEsIDQsIDEsIDI1NCwgCisgICAgMTkxLCAyMzQsIDEyMywgODEsIDYsIDEsIDI0OCwgNSwgMjQxLCA1MiwgODEsIDQsIDEsIDI0OCwgNSwgMjQxLCA1MiwgODEsIAorICAgIDYsIDEsIDU1LCA4MSwgMjQxLCA1MiwgODEsIDQsIDEsIDU1LCA4MSwgMjQxLCA1MiwgODEsIDYsIDEsIDU1LCA4MSwgMTYyLCAKKyAgICA4MSwgNCwgMSwgNTUsIDgxLCAxNjIsIDgxLCA2LCAxLCAyMzMsIDE1NCwgMTYyLCA4MSwgNCwgMSwgMjMzLCAxNTQsIDE2MiwgCisgICAgODEsIDYsIDEsIDU1LCA4MSwgMjQxLCAyMjQsIDgxLCA0LCAxLCA1NSwgODEsIDI0MSwgMjI0LCA4MSwgNiwgMSwgNTUsIDgxLCAKKyAgICAyNDIsIDIsIDgxLCA0LCAxLCA1NSwgODEsIDI0MiwgMiwgODEsIDYsIDEsIDU1LCA4MSwgMjQzLCAxMDksIDgxLCA0LCAxLCAKKyAgICA1NSwgODEsIDI0MywgMTA5LCA4MSwgNiwgMSwgNTUsIDgxLCAyNDcsIDE3MSwgODEsIDQsIDEsIDU1LCA4MSwgMjQ3LCAxNzEsIAorICAgIDgxLCA2LCAxLCA1NSwgODEsIDIyMCwgMjQsIDgxLCA0LCAxLCA1NSwgODEsIDIyMCwgMjQsIDgxLCA2LCAxLCA1NSwgMjI3LCAKKyAgICAyMTIsIDIyMCwgMjQsIDgxLCA0LCAxLCA1NSwgMjI3LCAyMTIsIDIyMCwgMjQsIDgxLCA2LCAxLCA1NSwgMjI3LCAyMTIsIAorICAgIDIyOSwgMzIsIDgxLCA0LCAxLCA1NSwgMjI3LCAyMTIsIDIyOSwgMzIsIDgxLCA2LCAxLCA1NSwgMjI3LCAyMTIsIDIyNywgCisgICAgMTUyLCA4MSwgNCwgMSwgNTUsIDIyNywgMjEyLCAyMjcsIDE1MiwgODEsIDYsIDEsIDU1LCAyMjcsIDIxMiwgMjEyLCAzNywgCisgICAgODEsIDQsIDEsIDU1LCAyMjcsIDIxMiwgMjEyLCAzNywgODEsIDE2LCAyMzQsIDI1MiwgODEsIDE2LCAyMzAsIDIzNiwgMjIyLCAKKyAgICAyMTMsIDgxLCAxNiwgMjI1LCAxMTIsIDIyMiwgMjEzLCA4MSwgMTYsIDIxOCwgMTQ5LCA4MSwgMTYsIDIxNywgNDMsIDIyMiwgCisgICAgMjEzLCA4MSwgMTYsIDIzNCwgMTE5LCAyMjIsIDIxMywgODEsIDE2LCAyMjAsIDI1LCAyMTksIDE2NywgODEsIDYsIDEsIAorICAgIDI0OSwgMTIzLCAyMjAsIDU3LCA4MSwgNCwgMSwgMjQ5LCAxMjMsIDIyMCwgNTcsIDgxLCA2LCAxLCAyNDksIDEyMywgMjQzLCAKKyAgICAxMDksIDgxLCA0LCAxLCAyNDksIDEyMywgMjQzLCAxMDksIDgxLCAzOCwgMjI4LCAyMzksIDQ4LCA4MSwgMzgsIDIxOCwgCisgICAgMjQ5LCAyNTMsIDIzMiwgODEsIDM4LCAyMTgsIDI0OSwgMjMzLCAyNywgODEsIDYsIDEsIDI1MSwgMjA3LCAyMzQsIDEyMywgCisgICAgODEsIDQsIDEsIDI1MSwgMjA3LCAyMzQsIDEyMywgODEsIDU1LCAyMjcsIDIxMiwgMjQzLCAyMzYsIDIxOCwgMTMxLCA4MSwgCisgICAgNTUsIDIyNywgMjEyLCAyNDcsIDIwNSwgMjI0LCAxNiwgNzksIDgxLCA1NSwgMjI3LCAyMTIsIDIzNSwgMjQ0LCAyMjQsIDE2LCAKKyAgICA3OSwgODEsIDU1LCAyMjcsIDIxMiwgMjEzLCAyNDEsIDI0NywgMTgwLCA4MSwgMjQ0LCAxMCwgMTIzLCAyNDIsIDM0LCA4MSwgCisgICAgMjQzLCAyMzYsIDIxOCwgMTMxLCA4MSwgMjMwLCAxMjksIDI0NywgMTgwLCA5OCwgNCwgMSwgMjU0LCAxMzEsIDk4LCA0LCAxLCAKKyAgICAyNTIsIDE2MCwgOTgsIDQsIDEsIDI0MywgMTEzLCA5OCwgNCwgMSwgMjQ3LCAxMzYsIDk4LCA0LCAxLCAyNDUsIDE1OCwgOTgsIAorICAgIDQsIDEsIDIxMywgMTYwLCA5OCwgNCwgMSwgMjEwLCA4OSwgOTgsIDQsIDEsIDIxNywgNjEsIDk4LCA0LCAxLCAyMzYsIDYsIAorICAgIDk4LCA0LCAxLCAyMzQsIDI0MCwgOTgsIDQsIDEsIDIzMywgODcsIDk4LCA0LCAxLCAyMzEsIDE5MCwgOTgsIDQsIDEsIDIyOSwgCisgICAgMjAwLCA5OCwgNCwgMSwgMjI2LCAyMDAsIDk4LCA0LCAxLCAyMjYsIDIxLCA5OCwgNCwgMSwgMjEwLCA3OCwgOTgsIDQsIDEsIAorICAgIDIyMywgMTc0LCA5OCwgNCwgMSwgMjIxLCAyNDUsIDk4LCA0LCAxLCAyMTcsIDUxLCA5OCwgNCwgMSwgMjE0LCAxOTAsIDk4LCAKKyAgICA0LCAxLCAyMjUsIDE0MywgOTgsIDQsIDEsIDIzNCwgMTI3LCA5OCwgNCwgMSwgMjQyLCAyNDgsIDk4LCA0LCAxLCAyMjQsIAorICAgIDc2LCA5OCwgNCwgMSwgMjIwLCAyMiwgOTgsIDQsIDEsIDI1MCwgMTA1LCA5OCwgNCwgMSwgMjUxLCAxNSwgOTgsIDQsIDEsIAorICAgIDIzNSwgMTA2LCA5OCwgNCwgMSwgMjUwLCA0OCwgOTgsIDQsIDEsIDI1MCwgMTUxLCA5OCwgNCwgMSwgMjExLCAxNjMsIDk4LCAKKyAgICA0LCAxLCAyMzUsIDExNywgOTgsIDQsIDEsIDI0MiwgNTAsIDk4LCA0LCAxLCAyNDEsIDI0NSwgOTgsIDQsIDEsIDI0MSwgCisgICAgMTgyLCA5OCwgNCwgMSwgMjEyLCAyMiwgOTgsIDQsIDEsIDI0MiwgMTEsIDk4LCA0LCAxLCAyNDEsIDcyLCA5OCwgNCwgMSwgCisgICAgMjEwLCAyNDYsIDk4LCA0LCAxLCAyNTQsIDI0MSwgMjE2LCAxMDksIDEsIDE5MiwgMjE2LCAxMDksIDEsIDIxMSwgOTksIAorICAgIDIxNiwgMTA5LCAxLCAyMTEsIDk4LCAyMTYsIDEwOSwgMSwgMjExLCA4OCwgMjE2LCAxMDksIDEsIDIxMSwgODYsIDIxNiwgCisgICAgMTA5LCAxLCAyNTIsIDQwLCAyNTUsIDI1LCAyMTEsIDgxLCAyMTYsIDEwOSwgMSwgMjExLCA4MSwgMjE2LCAxMDksIDEsIAorICAgIDIxMSwgOTYsIDIxNiwgMTA5LCAxLCAyMTEsIDkzLCAyMTYsIDEwOSwgMSwgMjExLCA5NSwgMjE2LCAxMDksIDEsIDIxMSwgCisgICAgOTQsIDIxNiwgMTA5LCAxLCAyMTEsIDEyLCAyMTYsIDEwOSwgMSwgMjExLCA5MCwgMjE2LCAxMDksIDEsIDIxMSwgNzksIAorICAgIDIxNiwgMTA5LCAxLCAyMTUsIDExNiwgMjExLCA3OSwgMjE2LCAxMDksIDEsIDIxMSwgNzYsIDIxNiwgMTA5LCAxLCAyMTEsIAorICAgIDg0LCAyMTYsIDEwOSwgMSwgMjUyLCA0MCwgMjU1LCAyNSwgMjExLCA4NCwgMjE2LCAxMDksIDEsIDIxNSwgMTE2LCAyMTEsIAorICAgIDg0LCAyMTYsIDEwOSwgMSwgMjExLCA4MywgMjE2LCAxMDksIDEsIDIxMSwgMTAzLCAyMTYsIDEwOSwgMSwgMjExLCA3NywgCisgICAgMjE2LCAxMDksIDEsIDIxNSwgMTE2LCAyMTEsIDc3LCAyMTYsIDEwOSwgMSwgMjExLCA2NiwgMjE2LCAxMDksIDEsIDIxNSwgCisgICAgMTE2LCAyMTEsIDY2LCAyMTYsIDEwOSwgMSwgMjExLCA4LCAyMTYsIDEwOSwgMSwgMjExLCA0OSwgMjE2LCAxMDksIDEsIAorICAgIDI1NCwgMjE2LCAyMTEsIDQ5LCAyMTYsIDEwOSwgMSwgMjE1LCAxMTYsIDIxMSwgNDksIDIxNiwgMTA5LCAxLCAyMTEsIDc1LCAKKyAgICAyMTYsIDEwOSwgMSwgMjExLCA3NCwgMjE2LCAxMDksIDEsIDIxMSwgNzEsIDIxNiwgMTA5LCAxLCAyMTUsIDExNiwgMjExLCAKKyAgICA4NSwgMjE2LCAxMDksIDEsIDIxNSwgMTE2LCAyMTEsIDY5LCAyMTYsIDEwOSwgMSwgMjExLCA2NywgMjE2LCAxMDksIDEsIAorICAgIDIxMCwgMjEyLCAyMTYsIDEwOSwgMSwgMjExLCA2NCwgMjE2LCAxMDksIDEsIDIxMSwgNjMsIDIxNiwgMTA5LCAxLCAyMTEsIAorICAgIDg3LCAyMTYsIDEwOSwgMSwgMjE1LCAxMTYsIDIxMSwgODcsIDIxNiwgMTA5LCAxLCAyNTMsIDE3MSwgMjExLCA4NywgMjE2LCAKKyAgICAxMDksIDEsIDIxMSwgNjIsIDIxNiwgMTA5LCAxLCAyMTEsIDYwLCAyMTYsIDEwOSwgMSwgMjExLCA2MSwgMjE2LCAxMDksIDEsIAorICAgIDIxMSwgNTksIDIxNiwgMTA5LCAxLCAyMTEsIDU4LCAyMTYsIDEwOSwgMSwgMjExLCA5NywgMjE2LCAxMDksIDEsIDIxMSwgCisgICAgNTYsIDIxNiwgMTA5LCAxLCAyMTEsIDU0LCAyMTYsIDEwOSwgMSwgMjExLCA1MywgMjE2LCAxMDksIDEsIDIxMSwgNTIsIAorICAgIDIxNiwgMTA5LCAxLCAyMTEsIDUwLCAyMTYsIDEwOSwgMSwgMjE3LCAzNSwgMjExLCA1MCwgMjE2LCAxMDksIDEsIDIxMSwgCisgICAgNDgsIDIxNiwgMTA5LCAxLCAyMTEsIDQ3LCAyMTYsIDEwOSwgMSwgMjEwLCAyNDQsIDIxNiwgMTA5LCA1OCwgMSwgMjMzLCAKKyAgICAxMzIsIDc5LCAyMTYsIDEwOSwgMjIwLCAxNDAsIDc5LCAyMTYsIDEwOSwgMTE3LCAyMzUsIDY5LCAyOSwgMywgMjMyLCAxNjEsIAorICAgIDI5LCAzLCAyMzAsIDE2NSwgMjksIDMsIDIyMiwgMjExLCAyOSwgMywgMjE5LCA1OSwgMjksIDMsIDIyMCwgOCwgMjksIDMsIAorICAgIDI1MSwgMjEyLCAyOSwgMywgMjE2LCA0MiwgMjksIDMsIDI0OSwgMjQ1LCAyOSwgMywgMjI4LCA3NywgMjksIDMsIDIyNywgCisgICAgMTM3LCAyOSwgMywgMjQyLCAxODcsIDIyNywgNCwgMjksIDMsIDIxMCwgMjIsIDI5LCAzLCAyNDcsIDE1MSwgMjksIDMsIAorICAgIDI0OCwgMTEyLCAyOSwgMywgMjM1LCA3MywgMjksIDMsIDIxNiwgMTU2LCAyOSwgMywgMjUwLCA5MywgMjksIDMsIDIyNSwgCisgICAgMTIzLCAyOSwgMywgMjI1LCAxOCwgMjksIDMsIDI0MywgNiwgMjksIDMsIDI0MywgMiwgMjksIDMsIDI0MywgMywgMjksIDMsIAorICAgIDI0MywgNCwgMjksIDMsIDIxOCwgMjI1LCAyOSwgMywgMjE4LCAxODEsIDI5LCAzLCAyMTgsIDE5NCwgMjksIDMsIDIxOCwgCisgICAgMjI0LCAyOSwgMywgMjE4LCAxOTgsIDI5LCAzLCAyMTgsIDE5OSwgMjksIDMsIDIxOCwgMTg2LCAyOSwgMywgMjUwLCAyMjEsIAorICAgIDI5LCAzLCAyNTAsIDIwMCwgMjksIDMsIDI1MCwgMjAyLCAyOSwgMywgMjUwLCAyMjAsIDI5LCAzLCAyNTAsIDIxOCwgMjksIAorICAgIDMsIDI1MCwgMjE5LCAyOSwgMywgMjUwLCAyMDEsIDI5LCAzLCAyMDksIDI0MywgMjksIDMsIDIwOSwgMjIxLCAyOSwgMywgCisgICAgMjA5LCAyMzQsIDI5LCAzLCAyMDksIDI0MiwgMjksIDMsIDIwOSwgMjM3LCAyOSwgMywgMjA5LCAyMzgsIDI5LCAzLCAyMDksIAorICAgIDIyNiwgMjksIDMsIDI1MCwgMjE2LCAyOSwgMywgMjUwLCAyMDMsIDI5LCAzLCAyNTAsIDIwNSwgMjksIDMsIDI1MCwgMjE1LCAKKyAgICAyOSwgMywgMjUwLCAyMTMsIDI5LCAzLCAyNTAsIDIxNCwgMjksIDMsIDI1MCwgMjA0LCAyOSwgMywgMjIzLCAyMzksIDI5LCAKKyAgICAzLCAyMjMsIDIyOSwgMjksIDMsIDIyMywgMjM1LCAyOSwgMywgMjIzLCAyMzgsIDI5LCAzLCAyMjMsIDIzNiwgMjksIDMsIAorICAgIDIyMywgMjM3LCAyOSwgMywgMjIzLCAyMzQsIDI5LCAzLCAyMzMsIDE2NSwgMjksIDMsIDIzMywgMTU3LCAyOSwgMywgMjMzLCAKKyAgICAxNjAsIDI5LCAzLCAyMzMsIDE2NCwgMjksIDMsIDIzMywgMTYxLCAyOSwgMywgMjMzLCAxNjIsIDI5LCAzLCAyMzMsIDE1OCwgCisgICAgMjksIDMsIDIxMSwgMTMwLCAyOSwgMywgMjExLCAxMjAsIDI5LCAzLCAyMTEsIDEyNiwgMjksIDMsIDIxMSwgMTI5LCAyOSwgCisgICAgMywgMjExLCAxMjcsIDI5LCAzLCAyMTEsIDEyOCwgMjksIDMsIDIxMSwgMTI1LCAyOSwgMywgMjQyLCA3OCwgMjksIDMsIAorICAgIDI0MiwgNjksIDI5LCAzLCAyNDIsIDcyLCAyOSwgMywgMjQyLCA3NywgMjksIDMsIDI0MiwgNzQsIDI5LCAzLCAyNDIsIDc1LCAKKyAgICAyOSwgMywgMjQyLCA3MSwgMzgsIDMzLCAxLCAyNTIsIDgzLCAzOCwgMzMsIDEsIDIxMywgMjU1LCAzOCwgMzMsIDEsIDI0MiwgCisgICAgMjQzLCAzOCwgMzMsIDEsIDI0OCwgOTgsIDM4LCAzMywgMSwgMjEwLCA3NCwgMzgsIDMzLCAxLCAyMTAsIDk0LCAzOCwgMzMsIAorICAgIDEsIDE3NiwgMzgsIDMzLCAxLCAyNDUsIDE4MiwgMzgsIDMzLCAxLCAyNDUsIDE2NywgMzgsIDMzLCAxLCAyNDUsIDE1OCwgCisgICAgMzgsIDMzLCAxLCA3OCwgMzgsIDMzLCAxLCAyMjUsIDIyNCwgMzgsIDMzLCAxLCAyNDUsIDEwMCwgMzgsIDMzLCAxLCAyNDUsIAorICAgIDkwLCAzOCwgMzMsIDEsIDIxNywgMjMsIDM4LCAzMywgMSwgMTYyLCAzOCwgMzMsIDEsIDIxNSwgMTc5LCAzOCwgMzMsIDEsIAorICAgIDI1MCwgMTM5LCAzOCwgMzMsIDEsIDIyMCwgMTA0LCAzOCwgMzMsIDEsIDIyMCwgNjcsIDM4LCAzMywgMSwgMjQ0LCA5MCwgCisgICAgMzgsIDMzLCAxLCAyNDUsIDg5LCAzOCwgMzMsIDEsIDYxLCAzOCwgMzMsIDEsIDIzNiwgNjcsIDM4LCAzMywgMSwgMjQ3LCAKKyAgICAxNjksIDM4LCAzMywgMSwgMjMwLCAxNDUsIDIxNCwgMjA1LCAzOCwgMzMsIDEsIDIxMSwgNTksIDM4LCAzMywgMSwgMjEwLCAKKyAgICAyMTIsIDM4LCAzMywgMSwgMjM1LCAxOTAsIDYxLCAzOCwgMzMsIDEsIDIzMiwgMTk4LCAyMTAsIDE4MywgMzgsIDMzLCAxLCAKKyAgICAyNTIsIDEsIDIxMCwgMTgzLCAzOCwgMzMsIDEsIDIzNSwgMTkwLCAyNTIsIDEsIDIxMCwgMTgzLCA0NCwgMjU0LCAxMTgsIAorICAgIDIxOCwgNjEsIDIzMSwgMTU5LCA0NCwgMjU0LCAxMTgsIDI0NiwgMTI2LCAyMTgsIDYxLCAyMzEsIDE1OSwgNDMsIDIxOCwgCisgICAgNjEsIDEyNywgNDQsIDIxOCwgNjEsIDEyNywgNDMsIDI0NiwgMTI2LCAyMTgsIDYxLCAxMjcsIDQ0LCAyNDYsIDEyNiwgMjE4LCAKKyAgICA2MSwgMTI3LCAyMjMsIDE2MCwgMjM1LCAyMDksIDIzMSwgMTU5LCAyMjMsIDE2MCwgMjQ2LCAxMjYsIDIzNSwgMjA5LCAyMzEsIAorICAgIDE1OSwgMjQ2LCAxMjYsIDIxNSwgMjQyLCAyMzEsIDE1OSwgNDMsIDIxNSwgMjQyLCAxMjcsIDQ0LCAyMTUsIDI0MiwgMTI3LCAKKyAgICAyMjMsIDE2MCwgMjE4LCAyMzYsIDQzLCAyMjMsIDE2MCwgMjI2LCAyMDIsIDEyNywgNDQsIDIyMywgMTYwLCAyMjYsIDIwMiwgCisgICAgMTI3LCAyNDUsIDIxOCwgMjQ5LCAxNjYsIDIyNiwgMTcsIDI0NCwgMzAsIDIyNiwgMTcsIDIyMywgNTIsIDI0NCwgMzAsIAorICAgIDIyNiwgMTcsIDI0MCwgMTcyLCAyNDYsIDEyNiwgMjI2LCAyNTUsIDI0NiwgMTEyLCAyNTQsIDEyNywgMjE0LCAxNTMsIDI1NCwgCisgICAgMTI3LCAyNDYsIDEyNiwgMjIyLCAyNTAsIDI1NCwgMTE3LCA1MiwgMjI2LCAyNTIsIDI0MCwgMTc1LCAyMzUsIDIwMCwgMjM1LCAKKyAgICAyMDgsIDIyNiwgNjMsIDI1MSwgMTYyLCAyNDAsIDE3NiwgMiwgMjQ4LCA5LCAyMTYsIDkwLCAyLCAyMjIsIDIzNywgNDgsIAorICAgIDQzLCAxMjEsIDIyNiwgOSwgMTI3LCA0NCwgMTIxLCAyMjYsIDksIDEyNywgMjE2LCA5MCwgMiwgNTksIDQ4LCAyMTYsIDkwLCAKKyAgICAyLCA1OSwgNTEsIDQzLCA2NywgMjUyLCAxNDksIDIsIDIyNCwgMTAsIDQ0LCA2NywgMjUyLCAxNDksIDIsIDIyNCwgMTAsIAorICAgIDIxNiwgMTUsIDQzLCAxNjMsIDEyNywgMjE2LCAxNSwgNDQsIDE2MywgMTI3LCAyNTEsIDE4MywgNDMsIDE2MywgMTI3LCAKKyAgICAyNTEsIDE4MywgNDQsIDE2MywgMTI3LCA0MywgMjE5LCAxODksIDEwNCwgMTI3LCA0NCwgMjE5LCAxODksIDEwNCwgMTI3LCAKKyAgICA0MywgNTIsIDIyNiwgNywgNDQsIDUyLCAyMjYsIDcsIDExMywgMTcwLCAxMTUsIDEyMywgNTksIDIyNCwgMTQzLCAxMjMsIAorICAgIDU5LCAxMTUsIDExMywgMTcwLCAyMjQsIDE0MywgOTIsIDI0NCwgMTksIDU5LCAyMjQsIDE0MywgMjQ0LCA4OSwgNTksIDc5LCAKKyAgICAyMjMsIDUyLCAyMjQsIDE2LCA3OSwgNjcsIDE4NCwgMjIyLCAyMzcsIDIyNSwgMTMsIDIxMSwgMjA5LCAyMjAsIDE0MCwgCisgICAgMjMwLCAyMjksIDI0NywgMTI4LCAyMTUsIDk0LCAyNDksIDIyNywgMjIzLCAxNjAsIDI0NywgMTI4LCAyMjMsIDE2MCwgMjQ5LCAKKyAgICAyMjcsIDIxNSwgOTQsIDIyMCwgMTUyLCAyNDgsIDIxNCwgMiwgNDMsIDI0MiwgMTE1LCAyNDgsIDIxNCwgMiwgNDQsIDI0MiwgCisgICAgMTE1LCAyMTUsIDk0LCAyNDgsIDIxMywgMjE2LCAxNSwgMTYzLCAyMjEsIDE3NSwgNTAsIDIxNSwgNTksIDI0OCwgMTY0LCAKKyAgICAyMTYsIDE0NCwgMjQ4LCAxNjQsIDEwLCAzNCwgMjIzLCA3OSwgMTAsIDM0LCAyNTAsIDE4LCAxMCwgMzQsIDIyMSwgMTc4LCAKKyAgICAxMTEsIDEwLCAzNCwgMjIxLCAxNzgsIDEwNSwgMTAsIDM0LCAyMjEsIDE3OCwgMTU4LCAxMCwgMzQsIDIyNSwgMTcwLCAxMCwgCisgICAgMzQsIDI1MSwgMTcxLCAxMCwgMzQsIDIxNywgOTMsIDEwLCAzNCwgMjM0LCAzOSwgMTExLCAxMCwgMzQsIDIzNCwgMzksIAorICAgIDEwNSwgMTAsIDM0LCAyNDcsIDE3OCwgMTAsIDM0LCAyMjEsIDE4MSwgMTAsIDM0LCA0LCAxMTEsIDEwLCAzNCwgNCwgMTA1LCAKKyAgICAxMCwgMzQsIDIzMywgMTAzLCAxMTEsIDEwLCAzNCwgMjMzLCAxMDMsIDEwNSwgMTAsIDM0LCAyMzMsIDEwMywgMTU4LCAxMCwgCisgICAgMzQsIDIzMywgMTAzLCAxNjEsIDEwLCAzNCwgMjE5LCA3MCwgMTAsIDM0LCAyMTYsIDE0NiwgMTAsIDM0LCAyMTksIDY4LCAKKyAgICAxMTEsIDEwLCAzNCwgMjE5LCA2OCwgMTA1LCAxMCwgMzQsIDI0MSwgMjM1LCAxMTEsIDEwLCAzNCwgMjQxLCAyMzUsIDEwNSwgCisgICAgMTAsIDM0LCAyNDIsIDIyLCAxMCwgMzQsIDIyMywgMTUwLCAxMCwgMzQsIDI1MCwgOTAsIDEwLCAzNCwgMjE4LCAzOCwgMTAsIAorICAgIDM0LCAyMzAsIDEzMywgMTAsIDM0LCAyNDgsIDk2LCAxMCwgMzQsIDIzMCwgMTI1LCAxMCwgMzQsIDI1MCwgMzMsIDEwLCAzNCwgCisgICAgMjEyLCA0MSwgMTExLCAxMCwgMzQsIDIxMiwgNDEsIDEwNSwgMTAsIDM0LCAyNDQsIDEwNCwgMTAsIDM0LCAyMjUsIDIzNiwgCisgICAgMTExLCAxMCwgMzQsIDIyNSwgMjM2LCAxMDUsIDEwLCAzNCwgMjE5LCAxNjIsIDE2MywgMjE1LCAyMzcsIDIxNSwgMTg5LCAKKyAgICAxMCwgMzQsIDI0OSwgMTUzLCAxMCwgMzQsIDI0NywgMTQ0LCAxMCwgMzQsIDIzNSwgMTQzLCAxMCwgMzQsIDI1MSwgMjA2LCAKKyAgICA2NCwgMjUwLCAyLCAxMCwgMzQsIDI0NSwgMjMsIDEwLCAzNCwgMjE4LCAyNTEsIDExMSwgMTAsIDM0LCAyMTgsIDI1MSwgCisgICAgMTA1LCAxMCwgMzQsIDI1MiwgMTYyLCAxMCwgMzQsIDIxOSwgMTY5LCAxMCwgMzQsIDI1MSwgNzEsIDIxOSwgMTY5LCAxMCwgCisgICAgMzQsIDIyOSwgOTUsIDExMSwgMTAsIDM0LCAyMjksIDk1LCAxMDUsIDEwLCAzNCwgMjI5LCA5NSwgMTU4LCAxMCwgMzQsIAorICAgIDIyOSwgOTUsIDE2MSwgMTAsIDM0LCAyMzEsIDUxLCAxMCwgMzQsIDIyMCwgNTksIDEwLCAzNCwgMjIzLCAxNTYsIDEwLCAzNCwgCisgICAgMjQ1LCA0NSwgMTAsIDM0LCAyMjYsIDIxMywgMTAsIDM0LCAyNTEsIDE0MSwgMTExLCAxMCwgMzQsIDI1MSwgMTQxLCAxMDUsIAorICAgIDEwLCAzNCwgMjMxLCA5MSwgMTAsIDM0LCAyMzAsIDEyOCwgMTAsIDM0LCAyNDIsIDE0NywgMTExLCAxMCwgMzQsIDI0MiwgCisgICAgMTQ3LCAxMDUsIDEwLCAzNCwgMjQyLCAxNDcsIDE1OCwgMTAsIDM0LCAyMTYsIDEwNywgMTAsIDM0LCAyNTAsIDEsIDEwLCAKKyAgICAzNCwgMjEyLCA5LCAxMTEsIDEwLCAzNCwgMjEyLCA5LCAxMDUsIDEwLCAzNCwgMjUxLCA3MSwgMjIxLCAxNzIsIDEwLCAzNCwgCisgICAgMjE5LCAxNjIsIDI0MCwgMjU1LCAxMCwgMzQsIDI0MCwgMjU1LCAxMCwgMzQsIDI1MSwgNzEsIDIxOSwgNCwgMTAsIDM0LCAKKyAgICAyNTEsIDcxLCAyMjAsIDU0LCAxMCwgMzQsIDI0NCwgNDAsIDEwLCAzNCwgMjUxLCA3MSwgMjUwLCAyMzYsIDEwLCAzNCwgCisgICAgMjE5LCAxNjIsIDIxMiwgNTcsIDEwLCAzNCwgMjEyLCA1OCwgMTExLCAxMCwgMzQsIDIxMiwgNTgsIDEwNSwgMTAsIDM0LCAKKyAgICAyNTAsIDM1LCAxMCwgMzQsIDI1MSwgNzEsIDI0MiwgMTczLCAxMCwgMzQsIDIwMCwgMTExLCAxMCwgMzQsIDIwMCwgMTA1LCAKKyAgICAxMCwgMzQsIDI1MSwgNzEsIDIzMiwgMTQzLCAxMCwgMzQsIDI1MSwgNzEsIDI0MywgOTUsIDEwLCAzNCwgMjMwLCAxMjQsIAorICAgIDExMSwgMTAsIDM0LCAyMzAsIDEyNCwgMTA1LCAxMCwgMzQsIDIyMywgMTYyLCAxMCwgMzQsIDI1MSwgMjE1LCAxMCwgMzQsIAorICAgIDI1MSwgNzEsIDIxNywgNTcsIDIzMywgNTgsIDEwLCAzNCwgMjUxLCA3MSwgMjMzLCA1OSwgMTAsIDM0LCAyNTEsIDcxLCAKKyAgICAyMTEsIDIzOSwgMTAsIDM0LCAyNTEsIDcxLCAyNDQsIDU0LCAxMCwgMzQsIDI0NSwgMjI2LCAxMTEsIDEwLCAzNCwgMjQ1LCAKKyAgICAyMjYsIDEwNSwgMTAsIDM0LCAyNDUsIDIyNiwgMTU4LCAxMCwgMzQsIDI1MSwgNzEsIDI0NSwgMjI1LCAxMCwgMzQsIDI0MSwgCisgICAgMjQyLCAxMCwgMzQsIDI1MSwgNzEsIDI0MCwgMjUyLCAxMCwgMzQsIDI1MSwgMjAyLCAxMCwgMzQsIDI0MiwgMjI5LCAxMCwgCisgICAgMzQsIDI1MSwgNzEsIDI0NCwgOTgsIDEwLCAzNCwgMjUxLCA3MSwgMjUxLCAyNDUsIDEwLCAzNCwgMjUxLCA3MSwgMjIyLCAzLCAKKyAgICAxMCwgMzQsIDIxOSwgMTYyLCAyMTIsIDIsIDEwLCAzNCwgMjE5LCAxNjIsIDIxMSwgNDEsIDEwLCAzNCwgMjUxLCA3MSwgCisgICAgMjQzLCAyNTIsIDEwLCAzNCwgMjM1LCAxNDksIDI0NSwgNDksIDEwLCAzNCwgMjUxLCA3MSwgMjQ1LCA0OSwgMTAsIDM0LCAKKyAgICAyMzUsIDE0OSwgMjE2LCAxNiwgMTAsIDM0LCAyNTEsIDcxLCAyMTYsIDE2LCAxMCwgMzQsIDIzNSwgMTQ5LCAyNDYsIDEwNCwgCisgICAgMTAsIDM0LCAyNTEsIDcxLCAyNDYsIDEwNCwgMTAsIDM0LCAyMTUsIDkxLCAxMCwgMzQsIDIzNSwgMTQ5LCAyMTUsIDkxLCAKKyAgICAxMCwgMzQsIDI1MSwgNzEsIDIxNSwgOTEsIDYwLCAzNCwgMTExLCA2MCwgMzQsIDIzMiwgMjE5LCA2MCwgMzQsIDI0NywgCisgICAgMTI4LCA2MCwgMzQsIDIxOSwgOTcsIDYwLCAzNCwgMjIxLCAxNzcsIDYwLCAzNCwgMTAzLCA2MCwgMzQsIDEwNSwgNjAsIDM0LCAKKyAgICAyMzIsIDI0MywgNjAsIDM0LCAyMzEsIDE5MCwgNjAsIDM0LCAyMzMsIDM5LCA2MCwgMzQsIDI0NSwgMTM3LCA2MCwgMzQsIAorICAgIDE5NiwgNjAsIDM0LCAxMjQsIDI1MSwgMTcxLCA2MCwgMzQsIDI0OSwgMTU1LCA2MCwgMzQsIDI0MCwgMTE4LCA2MCwgMzQsIAorICAgIDIxNywgOTMsIDYwLCAzNCwgMjA0LCAyNTEsIDE3MSwgNjAsIDM0LCAyMzQsIDM4LCA2MCwgMzQsIDIyNCwgMjI3LCA2MCwgCisgICAgMzQsIDIxMSwgMjAyLCA2MCwgMzQsIDIxOCwgMjQ1LCA2MCwgMzQsIDQ0LCAyMDQsIDI1MSwgMTcxLCA2MCwgMzQsIDI0MSwgCisgICAgMTgzLCAyNDUsIDE1MywgNjAsIDM0LCAyMTYsIDI0OCwgNjAsIDM0LCAyNDcsIDE3OCwgNjAsIDM0LCAyMjEsIDE4MSwgNjAsIAorICAgIDM0LCAyNTAsIDE4LCA2MCwgMzQsIDIyNCwgMTg1LCA2MCwgMzQsIDI1NCwgMjI0LCA2MCwgMzQsIDIzMCwgMTE1LCA2MCwgCisgICAgMzQsIDI0NSwgMTUzLCA2MCwgMzQsIDI0NSwgMjMxLCA2MCwgMzQsIDIyMSwgMjAyLCA2MCwgMzQsIDI0MiwgMTgxLCA2MCwgCisgICAgMzQsIDI0MiwgMTgyLCAyMTksIDgzLCA2MCwgMzQsIDI0NSwgNDgsIDYwLCAzNCwgMjUyLCAwLCA2MCwgMzQsIDIxMSwgMjIxLCAKKyAgICA2MCwgMzQsIDI1MCwgMTA5LCA2MCwgMzQsIDIyMiwgMTk4LCA2MCwgMzQsIDIzNiwgMiwgNjAsIDM0LCAyMTksIDgxLCA2MCwgCisgICAgMzQsIDIzMywgMTAyLCA2MCwgMzQsIDI0OSwgMTY0LCA2MCwgMzQsIDIxOCwgMjM5LCA2MCwgMzQsIDIzMCwgMTIwLCA2MCwgCisgICAgMzQsIDIyMiwgMjI3LCA2MCwgMzQsIDIxMSwgMjA2LCA2MCwgMzQsIDIyNiwgMTk0LCA2MCwgMzQsIDIxNSwgOTgsIDYwLCAKKyAgICAzNCwgMjQ2LCA4OCwgNjAsIDM0LCAyMTksIDI1MywgMjE2LCAxNDYsIDYwLCAzNCwgMjQ2LCAxMjYsIDI1MCwgMTgsIDYwLCAKKyAgICAzNCwgMjAwLCAyMTgsIDExMCwgNjAsIDM0LCAxMTMsIDI0MiwgMTcsIDYwLCAzNCwgMjIwLCAyLCA2MCwgMzQsIDI1MSwgCisgICAgMTc3LCA2MCwgMzQsIDIxOSwgNjcsIDYwLCAzNCwgMjUxLCAxNDUsIDYwLCAzNCwgMjE4LCAxNDAsIDYwLCAzNCwgMjQxLCAKKyAgICAyMzQsIDYwLCAzNCwgMjQyLCAzNSwgNjAsIDM0LCAyNDcsIDEzMSwgNjAsIDM0LCAyNDIsIDIyLCA2MCwgMzQsIDI1MSwgCisgICAgMTYyLCA2MCwgMzQsIDIyMywgMTUwLCA2MCwgMzQsIDIyMSwgMTg5LCA2MCwgMzQsIDI0NywgMjA3LCA2MCwgMzQsIDI1MywgCisgICAgMTc2LCA2MCwgMzQsIDIxOCwgMjM2LCA2MCwgMzQsIDIyOCwgNTYsIDYwLCAzNCwgMjE4LCAzOCwgNjAsIDM0LCAyMjEsIAorICAgIDIxMywgNjAsIDM0LCAyMzAsIDEzMywgNjAsIDM0LCAyMTUsIDIzNiwgNjAsIDM0LCAyMzMsIDEyOCwgNjAsIDM0LCAyMTgsIAorICAgIDEzMSwgNjAsIDM0LCAyNDgsIDk2LCA2MCwgMzQsIDIxMiwgMjEsIDYwLCAzNCwgMjQ3LCAxNTQsIDIyOCwgNTYsIDYwLCAzNCwgCisgICAgMjQ5LCAyMjMsIDYwLCAzNCwgMjQzLCAyMjksIDYwLCAzNCwgMjUwLCAyOSwgNjAsIDM0LCAyMTgsIDE0NCwgNjAsIDM0LCAKKyAgICAyMTIsIDQwLCA2MCwgMzQsIDI0NCwgMTA0LCA2MCwgMzQsIDI1MCwgMjYsIDYwLCAzNCwgMjQ0LCAxNjksIDYwLCAzNCwgNTIsIAorICAgIDIxMSwgMTc4LCA2MCwgMzQsIDE2MywgMjE1LCAyMzcsIDIxNSwgMTg5LCA2MCwgMzQsIDIxOSwgOTEsIDYwLCAzNCwgMjQ0LCAKKyAgICAxNzksIDYwLCAzNCwgMjQ5LCAxNTMsIDYwLCAzNCwgMjQ3LCAxNDQsIDYwLCAzNCwgMjI0LCAxODIsIDYwLCAzNCwgMjM1LCAKKyAgICAxNDMsIDYwLCAzNCwgMjMxLCA3MiwgNjAsIDM0LCAyMTYsIDg5LCA2MCwgMzQsIDIxNywgMjQ2LCA2MCwgMzQsIDIzMiwgCisgICAgMjM3LCA2MCwgMzQsIDIxNCwgMTMxLCA2MCwgMzQsIDI0NCwgMTI4LCA2MCwgMzQsIDI1MSwgMjA2LCA2NCwgMjUwLCAyLCAKKyAgICA2MCwgMzQsIDIxOSwgMTkwLCA2MCwgMzQsIDI0NiwgMTI2LCAyMTYsIDI0MywgNjAsIDM0LCAyMTEsIDI1MywgNjAsIDM0LCAKKyAgICAyMTksIDEwNSwgNjAsIDM0LCAyNDcsIDE5NSwgNjAsIDM0LCAyNDUsIDIzLCA2MCwgMzQsIDIxOSwgNywgNjAsIDM0LCA3NSwgCisgICAgNjAsIDM0LCAyMTgsIDEzMywgNjAsIDM0LCAyMTgsIDI1MCwgNjAsIDM0LCAyMTYsIDAsIDYwLCAzNCwgMjQyLCAxNTQsIDYwLCAKKyAgICAzNCwgMjUwLCAyMjYsIDYwLCAzNCwgMjE4LCAxNjIsIDYwLCAzNCwgMjUyLCAxNjIsIDYwLCAzNCwgMjIzLCAzNCwgNjAsIAorICAgIDM0LCAyMTksIDE2OSwgNjAsIDM0LCAyMzUsIDEzNiwgNjAsIDM0LCAyMjksIDk0LCA2MCwgMzQsIDIyMCwgNTksIDYwLCAzNCwgCisgICAgMjQ0LCAxNTcsIDYwLCAzNCwgMjI2LCAyMTMsIDYwLCAzNCwgMjU0LCAxMjYsIDYwLCAzNCwgMjI1LCAzMiwgNjAsIDM0LCAKKyAgICAyNDUsIDIzNSwgNjAsIDM0LCAyNTEsIDE0MCwgNjAsIDM0LCAyMzEsIDkxLCA2MCwgMzQsIDIzMCwgMTg4LCA2MCwgMzQsIAorICAgIDIyMCwgMTU4LCA2MCwgMzQsIDI1NCwgNCwgNjAsIDM0LCAyMzAsIDEyOCwgNjAsIDM0LCAyMTYsIDIwLCA2MCwgMzQsIDIyNiwgCisgICAgMTY5LCA2MCwgMzQsIDI1MSwgMjA5LCA2MCwgMzQsIDIxOCwgMTI5LCA2MCwgMzQsIDI0OSwgMjMzLCA2MCwgMzQsIDI0MiwgCisgICAgMTQ2LCA2MCwgMzQsIDIxNiwgMTA3LCA2MCwgMzQsIDIzNSwgMjI0LCA2MCwgMzQsIDI1MSwgMjE5LCA2MCwgMzQsIDIxMiwgCisgICAgNTgsIDI0NSwgMTUzLCA2MCwgMzQsIDI1MCwgMSwgNjAsIDM0LCAyMTIsIDgsIDYwLCAzNCwgMjIxLCAxNzIsIDYwLCAzNCwgCisgICAgMjQwLCAyNTUsIDYwLCAzNCwgMjE5LCA0LCA2MCwgMzQsIDIxNCwgMjIsIDYwLCAzNCwgMjUyLCA4MCwgNjAsIDM0LCAyMjUsIAorICAgIDc2LCA2MCwgMzQsIDI1MiwgMTgyLCA2MCwgMzQsIDIyMCwgNTQsIDYwLCAzNCwgMjIzLCAxMTMsIDYwLCAzNCwgMjIyLCAKKyAgICAxMjgsIDYwLCAzNCwgMjQ0LCA0MCwgNjAsIDM0LCAyNTEsIDIwOCwgNjAsIDM0LCAyNTAsIDIzNiwgNjAsIDM0LCAyNTEsIAorICAgIDIzNCwgNjAsIDM0LCAyMzAsIDEzMCwgNjAsIDM0LCAyMTIsIDU3LCA2MCwgMzQsIDI1MCwgMzUsIDYwLCAzNCwgMjExLCAKKyAgICAyMzYsIDYwLCAzNCwgMjQ3LCAxODgsIDYwLCAzNCwgMjEzLCAxNjEsIDYwLCAzNCwgMjQyLCAxNzMsIDYwLCAzNCwgMjMyLCAKKyAgICAxNDMsIDYwLCAzNCwgMjQzLCA5NSwgNjAsIDM0LCAyMzAsIDEyMywgNjAsIDM0LCAyMTksIDk2LCA2MCwgMzQsIDIxOSwgCisgICAgMjUzLCAyMTcsIDc3LCAyNTEsIDI0NSwgNjAsIDM0LCAyMjMsIDE2MiwgNjAsIDM0LCAyNTEsIDIxNSwgNjAsIDM0LCAyMTEsIAorICAgIDE5NywgNjAsIDM0LCAyNDQsIDE5OCwgNjAsIDM0LCAyMzMsIDU4LCA2MCwgMzQsIDIxNywgNTcsIDIzMywgNTgsIDYwLCAzNCwgCisgICAgMjMzLCA1NCwgNjAsIDM0LCAyMTksIDMyLCA2MCwgMzQsIDIzMywgNTksIDYwLCAzNCwgMjExLCAyMzksIDYwLCAzNCwgMjQ0LCAKKyAgICA1NCwgNjAsIDM0LCAyNDUsIDIyNSwgNjAsIDM0LCAyNDEsIDI0MiwgNjAsIDM0LCAyNDQsIDgsIDYwLCAzNCwgMjQwLCAyNTIsIAorICAgIDYwLCAzNCwgMjUxLCAyMDIsIDYwLCAzNCwgMjE3LCA2NCwgNjAsIDM0LCAyNDIsIDQxLCA2MCwgMzQsIDI0NCwgMTIxLCA2MCwgCisgICAgMzQsIDIyMiwgMzAsIDIxMSwgMjM2LCA2MCwgMzQsIDI1MCwgMjI4LCA2MCwgMzQsIDI0MiwgMjI5LCA2MCwgMzQsIDI0NCwgCisgICAgOTgsIDYwLCAzNCwgMjUxLCAyNDUsIDYwLCAzNCwgMjIyLCAzLCA2MCwgMzQsIDI0OCwgODIsIDYwLCAzNCwgMjEyLCAyLCAKKyAgICA2MCwgMzQsIDI0MSwgMjE3LCA2MCwgMzQsIDIxMSwgNDEsIDYwLCAzNCwgMjMwLCAxOTcsIDYwLCAzNCwgMjUxLCAyMjksIAorICAgIDYwLCAzNCwgMjQ1LCAxNjMsIDYwLCAzNCwgMjQzLCAyNTIsIDYwLCAzNCwgMjE1LCAyMTAsIDYwLCAzNCwgMjQ2LCA5MCwgCisgICAgNjAsIDM0LCAyMjMsIDE0NCwgNjAsIDM0LCAyMjgsIDU4LCA2MCwgMzQsIDI0NSwgNDksIDYwLCAzNCwgMjE2LCAxNiwgNjAsIAorICAgIDM0LCAyNDYsIDEwNCwgNjAsIDM0LCAyMTUsIDkxLCA2MCwgMzQsIDI0NCwgNTYsIDExMCwgMjQ4LCA0NSwgMTM1LCA0MywgCisgICAgMjE2LCA0MywgMjIyLCAyNTQsIDExMCwgMjQ4LCA0NSwgMTM1LCA3MiwgMjE2LCA0MywgNTEsIDExMCwgMjQ4LCA0NSwgMTM1LCAKKyAgICA0MywgMjE2LCA0MywgMjMwLCAyMjksIDIyLCAyMjIsIDI1NCwgMTEwLCAyNDgsIDQ1LCAxMzUsIDcyLCAyMTYsIDQzLCAyMzAsIAorICAgIDIyOSwgMjIsIDUxLCAxMTAsIDI0OCwgNDUsIDEzNSwgMjQzLCAyMzYsIDIxOCwgMTEsIDExMCwgMjQ4LCA0NSwgMTM1LCAKKyAgICAyMTgsIDEyLCAyNDMsIDI1MSwgNDgsIDExMCwgMjQ4LCA0NSwgMTM1LCAyMTgsIDEyLCAyNDMsIDI1MSwgNTEsIDExMCwgCisgICAgMjQ4LCA0NSwgMTM1LCAyMTgsIDEyLCAyNDMsIDI1MSwgMjMzLCA1MiwgMTEwLCAyNDgsIDQ1LCAxMzUsIDIxOCwgMTIsIAorICAgIDI0MywgMjUxLCAyMTQsIDE2MCwgMjMzLCA1MiwgMTEwLCAyNDgsIDQ1LCAxMzUsIDIxOCwgMTIsIDI0MywgMjUxLCAyMTQsIAorICAgIDE2MCwgMjIyLCAyNTQsIDExMCwgMjQ4LCA0NSwgMTM1LCAyMTgsIDEyLCAyNDMsIDI1MSwgMjMyLCAxMTQsIDIzMywgNTIsIAorICAgIDExMCwgMjQ4LCA0NSwgMTM1LCAyMjYsIDEyNiwgMTEwLCAyMTksIDIwLCAxMTAsIDI0OSwgMjI3LCAxMTAsIDI0MywgMjM2LCAKKyAgICAyMTgsIDEzMSwgMjQ3LCAxODUsIDc5LCAyMzUsIDEzNywgMjM1LCAyNDMsIDIxOCwgMTYxLCA4NywgMTEwLCAyMzUsIDE2NCwgCisgICAgNzksIDExMCwgMjUwLCA0LCA3OSwgMTEwLCA1NCwgMjEwLCA4NiwgNDMsIDI1NCwgMTE4LCAxMjcsIDQ0LCAyNTQsIDExOCwgCisgICAgMTI3LCA0MywgNTIsIDI1NCwgMTE4LCAxMjcsIDQ0LCA1MiwgMjU0LCAxMTgsIDEyNywgNDMsIDI0OSwgMTY5LCAxMjcsIDQ0LCAKKyAgICAyNDksIDE2OSwgMTI3LCA0MywgNzEsIDI0OSwgMTY5LCAxMjcsIDQ0LCA3MSwgMjQ5LCAxNjksIDEyNywgNDMsIDg1LCAyMzMsIAorICAgIDI2LCAxMjcsIDQ0LCA4NSwgMjMzLCAyNiwgMTI3LCAyMjQsIDI0MCwgNzksIDI0MywgMzksIDc5LCA0MywgMjE2LCA3LCAKKyAgICAyMjAsIDU1LCAxMjcsIDQ0LCAyMTYsIDcsIDIyMCwgNTUsIDEyNywgNDMsIDcxLCAyMzMsIDI2LCAxMjcsIDQ0LCA3MSwgCisgICAgMjMzLCAyNiwgMTI3LCA0MywgNzEsIDIxNiwgNywgMjIwLCA1NSwgMTI3LCA0NCwgNzEsIDIxNiwgNywgMjIwLCA1NSwgMTI3LCAKKyAgICA0MywgNzEsIDQyLCAxMjcsIDQ0LCA3MSwgNDIsIDEyNywgMjEyLCAzNiwgMjQ4LCAxNjQsIDIyMywgNTIsIDUyLCAyMjQsIAorICAgIDE5NCwgMjI0LCAxLCA3OSwgNTIsIDIyNCwgMTk0LCAyMjQsIDEsIDc5LCAxMjEsIDUyLCAyMjQsIDE5NCwgMjI0LCAxLCA3OSwgCisgICAgMjI0LCAyNDAsIDE2NCwgMjQ0LCAxOTgsIDI0MiwgMTUsIDIyNywgMjAyLCAxMTEsIDI0MiwgMTUsIDIyNywgMjAyLCAxMDUsIAorICAgIDI0MiwgMTUsIDIyNywgMjAyLCAxNTgsIDI0MiwgMTUsIDIyNywgMjAyLCAxNjEsIDI0MiwgMTUsIDIyNywgMjAyLCAxOTAsIAorICAgIDI0MiwgMTUsIDIyNywgMjAyLCAxOTUsIDI0MiwgMTUsIDIyNywgMjAyLCAxOTksIDI0MiwgMTUsIDIyNywgMjAyLCAxOTYsIAorICAgIDI0MiwgMTUsIDIyNywgMjAyLCAyMDEsIDExMCwgMjMzLCA5LCAxMzgsIDc5LCAxMTAsIDIyMiwgMjMxLCAxMzgsIDc5LCAKKyAgICAxMTAsIDI0OCwgNTIsIDEzOCwgNzksIDExMCwgMjQ1LCAxMzYsIDEzOCwgNzksIDI0LCAyMTksIDE1NywgNTksIDEzOCwgNzksIAorICAgIDI0LCA1MiwgNTksIDEzOCwgNzksIDIxMiwgMzIsIDI0OCwgMTY0LCA2NywgMjM0LCAyMzksIDIyMywgODAsIDc5LCA2NywgCisgICAgMjM0LCAyMzksIDIyMywgODAsIDIsIDIxMywgMTM1LCAyMTksIDMzLCA3OSwgNjcsIDIzNCwgMjM5LCAyMjMsIDgwLCAxNjQsIAorICAgIDIxNCwgMTYwLCAyNDIsIDM0LCA2NywgMjM0LCAyMzksIDIyMywgODAsIDIsIDIxMywgMTM1LCAyMTksIDMzLCAxNjQsIDIxNCwgCisgICAgMTYwLCAyNDIsIDM0LCA2NywgMjM0LCAyMzksIDIyMywgODAsIDE2NCwgMjMyLCAxMTQsIDI0MiwgMzQsIDM3LCAyMjQsIAorICAgIDI0MCwgNzksIDExMCwgMjE3LCA0LCAyMzIsIDIyMCwgMjQ0LCAxNTQsIDIyMCwgMTQwLCA4NywgMjQyLCAxNSwgMjI3LCAKKyAgICAyMDIsIDIxNiwgMjQ4LCAyNDIsIDE1LCAyMjcsIDIwMiwgMjE1LCA3MywgMjQyLCAxNSwgMjI3LCAyMDIsIDIxNiwgMTYzLCAKKyAgICA2NywgMTEwLCAyMzUsIDE2NCwgNzksIDIzMSwgMTQ1LCA3OSwgMjI2LCAzLCAyNTQsIDE0OCwgNzksIDExMCwgNDUsIDIzNSwgCisgICAgMjQ1LCAxMTAsIDE2MywgMjQ0LCAxMTQsIDIxOSwgMjAsIDE0MSwgMSwgNCwgNjEsIDE0MSwgMSwgNjEsIDE0MSwgMSwgNCwgCisgICAgNzQsIDE0MSwgMSwgNzQsIDE0MSwgMSwgNCwgNjksIDE0MSwgMSwgNjksIDE0MSwgMSwgNCwgNzYsIDE0MSwgMSwgNzYsIAorICAgIDE0MSwgMSwgNCwgNzgsIDE0MSwgMSwgNzgsIDE0MSwgMSwgMTc2LCAxNDEsIDEsIDI0MywgMTQyLCAxNDEsIDEsIDIzNCwgCisgICAgOTgsIDE0MSwgMSwgMjQyLCAyMjEsIDE0MSwgMSwgMjMzLCAyMjMsIDE0MSwgMSwgMjQyLCAxMjAsIDE0MSwgMSwgMjM0LCAKKyAgICAxODgsIDE0MSwgMSwgMjQzLCA2OSwgMTQxLCAxLCAyMzQsIDM0LCAxNDEsIDEsIDI0MiwgMTgxLCAxNDEsIDEsIDIwNiwgCisgICAgMTQxLCAxLCAyMTAsIDExNiwgMTQxLCAxLCAyMTksIDE5MywgMTQxLCAxLCAyMTAsIDQ0LCAxNDEsIDEsIDIxOCwgODQsIAorICAgIDE0MSwgMSwgMjEwLCAxMywgMTQxLCAxLCAyMjEsIDE4MywgMTQxLCAxLCAyMTAsIDk0LCAxNDEsIDEsIDIxOSwgNjAsIDE0MSwgCisgICAgMSwgMjEwLCAyMywgMTQxLCAxLCAyMTcsIDEwNiwgMTQxLCAxLCAyNDgsIDIyOSwgMTQxLCAxLCAyMTYsIDExOCwgMTQxLCAxLCAKKyAgICAyNDgsIDExLCAxNDEsIDEsIDQsIDIxNSwgMTE5LCAxNDEsIDEsIDIxNSwgMTE5LCAxNDEsIDEsIDI0NiwgODYsIDE0MSwgMSwgCisgICAgMjE3LCAyMywgMTQxLCAxLCAyNDgsIDk4LCAxNDEsIDEsIDExMiwgMTQxLCAxLCAyNDcsIDE1MywgMTQxLCAxLCAxOTgsIAorICAgIDE0MSwgMSwgMjI4LCAyMzgsIDE0MSwgMSwgMjI3LCAyNDIsIDE0MSwgMSwgMjI5LCAxMTIsIDE0MSwgMSwgMjI4LCA3OSwgCisgICAgMTQxLCAxLCAxNjIsIDE0MSwgMSwgMjUyLCAxOTksIDE0MSwgMSwgMTkxLCAxNDEsIDEsIDI0MSwgMTg3LCAxNDEsIDEsIAorICAgIDI1MiwgMTQsIDE0MSwgMSwgMjI1LCAxMTEsIDE0MSwgMSwgMjQwLCAyMjksIDE0MSwgMSwgMjUxLCAxMzMsIDE0MSwgMSwgCisgICAgMjI0LCAxNTMsIDE0MSwgMSwgMjQxLCAyNDUsIDE0MSwgMSwgMjUyLCA4MywgMTQxLCAxLCAyMjUsIDIyNCwgMTQxLCAxLCAKKyAgICAyNDEsIDc1LCAxNDEsIDEsIDI1MSwgMjEzLCAxNDEsIDEsIDIyNSwgMTksIDE0MSwgMSwgMTg2LCAxNDEsIDEsIDIzMCwgCisgICAgMjM1LCAxNDEsIDEsIDIzMCwgMTA3LCAxNDEsIDEsIDIzMSwgOTYsIDE0MSwgMSwgMjMwLCAxNjYsIDE0MSwgMSwgNCwgMTkyLCAKKyAgICAxNDEsIDEsIDE5MiwgMTQxLCAxLCA0LCAyMTAsIDIxMiwgMTQxLCAxLCAyMTAsIDIxMiwgMTQxLCAxLCA0LCAyMTAsIDI0NCwgCisgICAgMTQxLCAxLCAyMTAsIDI0NCwgMTQxLCAxLCAyMDUsIDE0MSwgMSwgMjIzLCAzOCwgMTQxLCAxLCAyMjIsIDE0MiwgMTQxLCAxLCAKKyAgICAyMjMsIDEzMSwgMTQxLCAxLCAyMjIsIDIxMywgMTQxLCAxLCA0LCAyMTIsIDY1LCAxNDEsIDEsIDIxMiwgNjUsIDE0MSwgMSwgCisgICAgMjExLCAyNTAsIDE0MSwgMSwgMjEyLCAyMiwgMTQxLCAxLCAyMTEsIDIyNywgMTQxLCAxLCAyMzAsIDMwLCAxNDEsIDEsIAorICAgIDIxMiwgMTE2LCAxNDEsIDEsIDQsIDE3NiwgMTQxLCAxLCA0LCAyMzQsIDE4OCwgMzgsIDIzNCwgMjA3LCAyMTMsIDEzNSwgCisgICAgMjE5LCAzMywgNzksIDM4LCAyMzQsIDIwNywgMjIwLCAxNTcsIDIxOSwgMzMsIDc5LCAyMzQsIDIwNywgMjEzLCAxMzUsIAorICAgIDIxOSwgMzMsIDc5LCAyMzQsIDIwNywgMjIwLCAxNTcsIDIxOSwgMzMsIDc5LCAxNDEsIDIzNSwgMTY0LCA3OSwgMTQxLCAKKyAgICAyMTMsIDEzNSwgMjM1LCAxNjQsIDc5LCAxNDEsIDI0NywgMjI5LCAyMTAsIDIyNSwgMjM0LCAyMDcsIDUyLCAyNDAsIDE3NSwgCisgICAgNTYsIDEsIDQsIDYxLCA1NiwgMSwgNjEsIDU2LCAxLCA0LCA3NCwgNTYsIDEsIDc0LCA1NiwgMSwgNCwgNjksIDU2LCAxLCAKKyAgICA2OSwgNTYsIDEsIDQsIDc2LCA1NiwgMSwgNzYsIDU2LCAxLCA0LCA3OCwgNTYsIDEsIDc4LCA1NiwgMSwgMTc2LCA1NiwgMSwgCisgICAgMjQzLCAxNDIsIDU2LCAxLCAyMzQsIDk4LCA1NiwgMSwgMjQyLCAyMjEsIDU2LCAxLCAyMzMsIDIyMywgNTYsIDEsIDI0MiwgCisgICAgMTIwLCA1NiwgMSwgMjM0LCAxODgsIDU2LCAxLCAyNDMsIDY5LCA1NiwgMSwgMjM0LCAzNCwgNTYsIDEsIDI0MiwgMTgxLCAKKyAgICA1NiwgMSwgMjA2LCA1NiwgMSwgMjEwLCAxMTYsIDU2LCAxLCAyMTksIDE5MywgNTYsIDEsIDIxMCwgNDQsIDU2LCAxLCAyMTgsIAorICAgIDg0LCA1NiwgMSwgMjEwLCAxMywgNTYsIDEsIDIyMSwgMTgzLCA1NiwgMSwgMjEwLCA5NCwgNTYsIDEsIDIxOSwgNjAsIDU2LCAKKyAgICAxLCAyMTAsIDIzLCA1NiwgMSwgMjE3LCAxMDYsIDU2LCAxLCAyNDgsIDIyOSwgNTYsIDEsIDIxNiwgMTE4LCA1NiwgMSwgCisgICAgMjQ4LCAxMSwgNTYsIDEsIDQsIDIxNSwgMTE5LCA1NiwgMSwgMjE1LCAxMTksIDU2LCAxLCAyNDYsIDg2LCA1NiwgMSwgMjE3LCAKKyAgICAyMywgNTYsIDEsIDI0OCwgOTgsIDU2LCAxLCAxMTIsIDU2LCAxLCAyNDcsIDE1MywgNTYsIDEsIDE5OCwgNTYsIDEsIDIyOCwgCisgICAgMjM4LCA1NiwgMSwgMjI3LCAyNDIsIDU2LCAxLCAyMjksIDExMiwgNTYsIDEsIDIyOCwgNzksIDU2LCAxLCAxNjIsIDU2LCAxLCAKKyAgICAyNTIsIDE5OSwgNTYsIDEsIDE5MSwgNTYsIDEsIDI0MSwgMTg3LCA1NiwgMSwgMjUyLCAxNCwgNTYsIDEsIDIyNSwgMTExLCAKKyAgICA1NiwgMSwgMjQwLCAyMjksIDU2LCAxLCAyNTEsIDEzMywgNTYsIDEsIDIyNCwgMTUzLCA1NiwgMSwgMjQxLCAyNDUsIDU2LCAKKyAgICAxLCAyNTIsIDgzLCA1NiwgMSwgMjI1LCAyMjQsIDU2LCAxLCAyNDEsIDc1LCA1NiwgMSwgMjUxLCAyMTMsIDU2LCAxLCAyMjUsIAorICAgIDE5LCA1NiwgMSwgMTg2LCA1NiwgMSwgMjMwLCAyMzUsIDU2LCAxLCAyMzAsIDEwNywgNTYsIDEsIDIzMSwgOTYsIDU2LCAxLCAKKyAgICAyMzAsIDE2NiwgNTYsIDEsIDQsIDE5MiwgNTYsIDEsIDE5MiwgNTYsIDEsIDQsIDIxMCwgMjEyLCA1NiwgMSwgMjEwLCAyMTIsIAorICAgIDU2LCAxLCA0LCAyMTAsIDI0NCwgNTYsIDEsIDIxMCwgMjQ0LCA1NiwgMSwgMjA1LCA1NiwgMSwgMjIzLCAzOCwgNTYsIDEsIAorICAgIDIyMiwgMTQyLCA1NiwgMSwgMjIzLCAxMzEsIDU2LCAxLCAyMjIsIDIxMywgNTYsIDEsIDQsIDIxMiwgNjUsIDU2LCAxLCAKKyAgICAyMTIsIDY1LCA1NiwgMSwgMjExLCAyNTAsIDU2LCAxLCAyMTIsIDIyLCA1NiwgMSwgMjExLCAyMjcsIDU2LCAxLCAyMzAsIAorICAgIDMwLCA1NiwgMSwgMjEyLCAxMTYsIDU2LCAxLCA0LCAxNzYsIDU2LCAxLCA0LCAyMzQsIDE4OCwgNTYsIDEsIDIxNCwgMjcsIAorICAgIDU2LCAxLCAyMTMsIDE3NiwgNTYsIDEsIDIxMywgMjU1LCA1NiwgMSwgMjEzLCAxMzgsIDU2LCAyMzAsIDIyOSwgMjQ3LCAKKyAgICAxMjgsIDIzNCwgMjA3LCAyMjQsIDE3NiwgMjE5LCAzMywgNzksIDU2LCAyMzUsIDE2NCwgNzksIDU2LCAyMTMsIDEzNSwgCisgICAgMjM1LCAxNjQsIDc5LCA1NiwgMjQ3LCAyMjksIDIzNCwgNSwgMjUxLCAxOTIsIDEsIDI1MywgMTY2LCAyNTEsIDE5MiwgMSwgCisgICAgMjI2LCAxMDksIDI1MSwgMTkyLCAxLCAxOTQsIDI1MSwgMTkyLCAxLCAyNDUsIDE0LCAyNTEsIDE5MiwgMSwgMjQ5LCA2OCwgCisgICAgMjUxLCAxOTIsIDEsIDIxNywgMTUzLCAyNTEsIDE5MiwgMSwgMjMwLCAzMCwgMjUxLCAxOTIsIDEsIDE1NiwgMjUxLCAxOTIsIAorICAgIDEsIDI0MywgMjA5LCAyNTEsIDE5MiwgMSwgMjM1LCAyOSwgMjUxLCAxOTIsIDEsIDI0MiwgNjcsIDI1MSwgMTkyLCAxLCAKKyAgICAyMzUsIDE1MCwgMjUxLCAxOTIsIDEsIDIyNCwgOTksIDI1MSwgMTkyLCAxLCAyMTEsIDE3OCwgMjUxLCAxOTIsIDEsIDIxMCwgCisgICAgODMsIDI1MSwgMTkyLCAxLCAyNTAsIDE2NiwgMjUxLCAxOTIsIDEsIDIyMCwgMTA2LCAyNTEsIDE5MiwgMSwgMTUzLCAyNTEsIAorICAgIDE5MiwgMSwgMjEwLCAxNTksIDI1MSwgMTkyLCAxLCAyNTEsIDc0LCAyNTEsIDE5MiwgMSwgMjIyLCA5MywgMjUxLCAxOTIsIAorICAgIDEsIDYxLCAyNTEsIDE5MiwgMSwgNzgsIDI1MSwgMTkyLCAxLCA3NiwgMjUxLCAxOTIsIDEsIDI0NSwgMjA1LCAyNTEsIDE5MiwgCisgICAgMSwgMjU0LCAyMTAsIDI1MSwgMTkyLCAxLCAyNDUsIDIwMywgMjUxLCAxOTIsIDEsIDI1MywgMjAwLCAyNTEsIDE5MiwgMSwgCisgICAgMjI2LCAxMzgsIDI1MSwgMTkyLCAxLCAyNTQsIDEzMSwgMjUxLCAxOTIsIDEsIDI0NSwgMTU4LCAyNTEsIDE5MiwgMSwgMjU0LCAKKyAgICAxMjMsIDI1MSwgMTkyLCAxLCAyNDUsIDE0NiwgMjUxLCAxOTIsIDEsIDI0NSwgMTAwLCAyNTEsIDE5MiwgMSwgNzQsIDI1MSwgCisgICAgMTkyLCAxLCA2OSwgMjUxLCAxOTIsIDEsIDIzNSwgMTYyLCAyNTEsIDE5MiwgMSwgMjE0LCAxMDUsIDI1MSwgMTkyLCAxLCAKKyAgICAyMjksIDg0LCAyNTEsIDE5MiwgMSwgMjQyLCAxODUsIDI1MSwgMTkyLCAxLCAyMzYsIDQxLCAyNCwgMSwgMjM0LCA2NCwgMjQsIAorICAgIDEsIDIxOCwgMjE3LCAyNCwgMSwgMjM0LCA1NywgMjQsIDEsIDIyOCwgMjMxLCAyNCwgMSwgMjI4LCAyMjksIDI0LCAxLCAKKyAgICAyMjgsIDIyOCwgMjQsIDEsIDIxNiwgMTAyLCAyNCwgMSwgMjE4LCAyMDYsIDI0LCAxLCAyMjMsIDI5LCAyNCwgMSwgMjIzLCAKKyAgICAyNCwgMjQsIDEsIDIyMywgMjEsIDI0LCAxLCAyMjMsIDE0LCAyNCwgMSwgMjIzLCA5LCAyNCwgMSwgMjIzLCA0LCAyNCwgMSwgCisgICAgMjIzLCAxNSwgMjQsIDEsIDIyMywgMjcsIDI0LCAxLCAyMzAsIDIyMiwgMjQsIDEsIDIyNSwgOTgsIDI0LCAxLCAyMTgsIAorICAgIDIxNCwgMjQsIDEsIDIyNSwgODcsIDI0LCAxLCAyMTksIDE1MCwgMjQsIDEsIDIxOCwgMjExLCAyNCwgMSwgMjM2LCA2MywgCisgICAgMjQsIDEsIDI1MCwgNTQsIDI0LCAxLCAyMTgsIDIyMSwgMjQsIDEsIDI1MCwgMTE0LCAyNCwgMSwgMjM0LCAxMTYsIDI0LCAxLCAKKyAgICAyMTYsIDE3NCwgMjQsIDEsIDIyNSwgMTM0LCAyNCwgMSwgMjQxLCAxNzksIDI0LCAxLCA2MSwgMjQsIDEsIDI1NCwgMjUyLCAKKyAgICAyNCwgMSwgMTkyLCAyNCwgMSwgMjExLCA5MiwgMjQsIDEsIDI0NSwgMTI1LCAyNCwgMSwgNzYsIDI0LCAxLCAyMTEsIDM2LCAKKyAgICAyNCwgMSwgMjExLCA0NywgMjQsIDEsIDc4LCAyNCwgMSwgMjEyLCA2NSwgMjQsIDEsIDIxMiwgNjIsIDI0LCAxLCAyMjYsIAorICAgIDIzOCwgMjQsIDEsIDIxMCwgMjQ0LCAyNCwgMSwgNjksIDI0LCAxLCAyMTIsIDExLCAyNCwgMSwgMjEyLCAyMiwgMjQsIDEsIAorICAgIDIxMSwgMjUwLCAyNCwgMSwgMjEwLCAyMTIsIDI0LCAxLCAyNDUsIDYzLCAyNCwgMSwgMjExLCA4LCAyNCwgMSwgNzQsIDI0LCAKKyAgICAyNDQsIDExMSwgMjQsIDEsIDIxOCwgMjE1LCAyNCwgMSwgMjI4LCAyMjEsIDI0LCAxLCAyMjgsIDIyMywgMjQsIDEsIDIyOCwgCisgICAgMjI2LCAyNCwgMSwgMjIzLCAyMiwgMjQsIDEsIDIyMywgMywgMjQsIDEsIDIyMywgMTEsIDI0LCAxLCAyMjMsIDE2LCAyNCwgCisgICAgMSwgMjIzLCAxLCAyNCwgMSwgMjMwLCAyMTUsIDI0LCAxLCAyMzAsIDIxMiwgMjQsIDEsIDIzMCwgMjE2LCAyNCwgMSwgMjM0LCAKKyAgICAyMjcsIDI0LCAxLCAyMjUsIDkzLCAyNCwgMSwgMjI1LCA3OSwgMjQsIDEsIDIyNSwgODUsIDI0LCAxLCAyMjUsIDgyLCAyNCwgCisgICAgMSwgMjI1LCA5NiwgMjQsIDEsIDIyNSwgODAsIDI0LCAxLCAyMzQsIDIyNSwgMjQsIDEsIDIzNCwgMjIzLCAyNCwgMSwgMjE5LCAKKyAgICAxNDMsIDI0LCAxLCAyMTksIDE0MSwgMjQsIDEsIDIxOSwgMTMzLCAyNCwgMSwgMjE5LCAxMzgsIDI0LCAxLCAyMTksIDE0OCwgCisgICAgMjQsIDEsIDIyNiwgMzYsIDI0LCAxLCAyMTgsIDIxOCwgMjQsIDEsIDIxMSwgMjYsIDI0LCAxLCAyMTEsIDIyLCAyNCwgMSwgCisgICAgMjExLCAyMywgMjQsIDEsIDIzNCwgMjI2LCAyNCwgMSwgMjE4LCAyMTksIDI0LCAxLCAyMTEsIDMyLCAyNCwgMSwgMjEwLCAKKyAgICAyMzgsIDI0LCAxLCAyMTAsIDIzNywgMjQsIDEsIDIxMCwgMjQwLCAyNCwgMSwgMjEwLCAyMDMsIDI0LCAxLCAyMTAsIDIwNCwgCisgICAgMjQsIDEsIDIxMCwgMjA3LCAyNCwgMSwgMjU0LCA0MiwgMjQsIDEsIDI1NCwgMzYsIDExMCwgMjU0LCAxMDcsIDIzMiwgMjA5LCAKKyAgICA3OSwgMTEwLCAyNTQsIDEwNywgMjIzLCA1MywgNzksIDExMCwgMjU0LCAxMDcsIDEyMywgNzksIDExMCwgMjU0LCAxMDcsIAorICAgIDExMywgNzksIDExMCwgMjU0LCAxMDcsIDEzNCwgNzksIDExMCwgMjU0LCAxMDcsIDI0NCwgMTksIDc5LCAxMTAsIDI1NCwgCisgICAgMTA3LCAyMTYsIDE1LCA3OSwgMTEwLCAyNTQsIDEwNywgMjMwLCAyMjksIDc5LCAxMTAsIDI1NCwgMTA3LCAyNTEsIDE4MywgCisgICAgNzksIDExMCwgMjU0LCAxMDcsIDI0NCwgMTAwLCA3OSwgMTEwLCAyNTQsIDEwNywgMjIxLCAxNzgsIDc5LCAxMTAsIDI1NCwgCisgICAgMTA3LCAyMTYsIDE3MCwgNzksIDExMCwgMjU0LCAxMDcsIDI0NCwgMTIsIDc5LCAxMTAsIDI1NCwgMTA3LCAyNDEsIDIzMSwgCisgICAgNzksIDExMCwgMjU0LCAxMDcsIDI0NSwgMjMyLCA3OSwgMTEwLCAyNTQsIDEwNywgMjMxLCAxOTEsIDc5LCAyNTEsIDE5MiwgCisgICAgMSwgMjUxLCAxMzMsIDI1MSwgMTkyLCAxLCAyMTAsIDQ0LCAyNTEsIDE5MiwgMSwgMjM1LCAxMTQsIDI1MSwgMTkyLCAxLCAKKyAgICAyNDIsIDEyMCwgMjUxLCAxOTIsIDEsIDI0NSwgMjE3LCAyNTEsIDE5MiwgMSwgMjQ1LCAxNDMsIDI1MSwgMTkyLCAxLCAyMjYsIAorICAgIDE4NywgMjUxLCAxOTIsIDEsIDIyNiwgMTkxLCAyNTEsIDE5MiwgMSwgMjM1LCAxODYsIDI1MSwgMTkyLCAxLCAyNTQsIDEwOSwgCisgICAgMjUxLCAxOTIsIDEsIDIzNSwgMjMxLCAyNTEsIDE5MiwgMSwgMjE0LCAxNjgsIDI1MSwgMTkyLCAxLCAyMzYsIDIzLCAyNTEsIAorICAgIDE5MiwgMSwgMjI5LCA2MiwgMjUxLCAxOTIsIDEsIDI1NCwgMjA0LCAyNTEsIDE5MiwgMSwgMjUzLCAxOTUsIDI1MSwgMTkyLCAKKyAgICAxLCAyNTQsIDE0NCwgMjUxLCAxOTIsIDEsIDIyNiwgMjA4LCAyNTEsIDE5MiwgMSwgMjI2LCAxOTMsIDI1MSwgMTkyLCAxLCAKKyAgICAyMzUsIDIyOCwgMjUxLCAxOTIsIDQwLCAxLCAyMjYsIDEwOSwgMjUxLCAxOTIsIDQwLCAxLCAyMTcsIDE1MywgMjUxLCAxOTIsIAorICAgIDQwLCAxLCAyMzUsIDI5LCAyNTEsIDE5MiwgNDAsIDEsIDI0MiwgNjcsIDI1MSwgMTkyLCAxLCAyNDMsIDEsIDI1MSwgMTkyLCAKKyAgICAxLCAyMzMsIDUsIDI1MSwgMTkyLCAxLCAyMDksIDI1MCwgMTAsIDIxOCwgMTA1LCAyMTcsIDE1MywgMTAsIDIxOCwgMTA1LCAKKyAgICAyMTIsIDQsIDEwLCAyMTgsIDEwNSwgMjExLCAxNTgsIDEwLCAyMTgsIDEwNSwgMjUxLCA4NywgMTAsIDIxOCwgMTA1LCAyMTcsIAorICAgIDI1NSwgMTAsIDIxOCwgMTA1LCAyNDAsIDE2NSwgMTAsIDIxOCwgMTA1LCAyNDAsIDE2OSwgMTAsIDIxOCwgMTA1LCAyNDAsIAorICAgIDIzOCwgMTAsIDIxOCwgMTA1LCAyNDAsIDE2NiwgMTAsIDIxOCwgMTA1LCAyMTcsIDE1NiwgMTAsIDIxOCwgMTA1LCAyNDAsIAorICAgIDE2OCwgMTAsIDIxOCwgMTA1LCAyNDAsIDE2NCwgMTAsIDIxOCwgMTA1LCAyNDAsIDIzNiwgMTAsIDIxOCwgMTA1LCAyNDAsIAorICAgIDE2NywgMTAsIDIxOCwgMTA1LCAyNDAsIDE2MywgMTAsIDIxOCwgMTA1LCAyMzAsIDMwLCAxMCwgMjE4LCAxMDUsIDI0MiwgCisgICAgNjcsIDEwLCAyMTgsIDEwNSwgMjIyLCA5MywgMTAsIDIxOCwgMTA1LCAyMjYsIDEwOSwgMTAsIDIxOCwgMTA1LCAyMTksIDIzLCAKKyAgICAxMCwgMjE4LCAxMDUsIDI0OSwgNjgsIDEwLCAyMTgsIDEwNSwgMjQwLCAxNzAsIDEwLCAyMTgsIDEwNSwgMjQxLCAxOTcsIAorICAgIDEwLCAyMTgsIDEwNSwgMjE3LCAxNjUsIDEwLCAyMTgsIDEwNSwgMjE3LCAyMzQsIDEwLCAyMTgsIDEwNSwgMjE4LCAxNzAsIAorICAgIDEwLCAyMTgsIDEwNSwgMjIwLCAxMTIsIDEwLCAyMTgsIDEwNSwgMjI1LCAyMjgsIDEwLCAyMTgsIDEwNSwgMjI0LCAxMDEsIAorICAgIDEwLCAyMTgsIDEwNSwgMjE2LCA0NCwgMTAsIDIxOCwgMTA1LCAyMTcsIDE1NSwgMTAsIDIxOCwgMTA1LCAyMTcsIDI0NSwgCisgICAgMTAsIDIxOCwgMTA1LCAyNDAsIDE3NywgMTAsIDIxOCwgMTA1LCAyNDAsIDE2MiwgMTAsIDIxOCwgMTA1LCAyMjUsIDE1MiwgCisgICAgMTAsIDIxOCwgMTA1LCAyMjQsIDk5LCA1NiwgMSwgNCwgMjMzLCAyMjMsIDU2LCAxLCA0LCAyMTksIDE5MywgNTYsIDEsIDQsIAorICAgIDIxOCwgODQsIDU2LCAxLCA0LCAxMTIsIDU2LCAxLCA0LCAyMjcsIDI0MiwgNTYsIDEsIDQsIDE2MiwgNTYsIDEsIDQsIDI0MSwgCisgICAgMTg3LCA1NiwgMSwgNCwgMjQwLCAyMjksIDU2LCAxLCA0LCAyNDEsIDI0NSwgNTYsIDEsIDQsIDI0MSwgNzUsIDU2LCAxLCA0LCAKKyAgICAyMzAsIDEwNywgNTYsIDEsIDQsIDIwNSwgNTYsIDEsIDQsIDIyMywgMzgsIDU2LCAxLCA0LCAyMjIsIDE0MiwgNTYsIDEsIDQsIAorICAgIDIyMywgMTMxLCA1NiwgMSwgNCwgMjIyLCAyMTMsIDg4LCAyNCwgMjM0LCA2NCwgODgsIDI0LCAyMjgsIDIzMSwgODgsIDI0LCAKKyAgICAyMTYsIDEwMiwgODgsIDI0LCAyMjMsIDI5LCA4OCwgMjQsIDIzMCwgMjIyLCA4OCwgMjQsIDIyNSwgOTgsIDg4LCAyNCwgCisgICAgMjE5LCAxNTAsIDg4LCAyNCwgMjM2LCA2MywgODgsIDI0LCAyNTAsIDU0LCA4OCwgMjQsIDI1MCwgMTE0LCA4OCwgMjQsIAorICAgIDIzNCwgMTE2LCA4OCwgMjQsIDIxNiwgMTc0LCA4OCwgMjQsIDIyNSwgMTM0LCA4OCwgMjQsIDI0MSwgMTc5LCA4OCwgMjQsIAorICAgIDIzNCwgNjUsIDYxLCA4OCwgMjQsIDIyOCwgMjMyLCA2MSwgODgsIDI0LCAyMTYsIDEwMywgNjEsIDg4LCAyNCwgMjIzLCAzMCwgCisgICAgNjEsIDg4LCAyNCwgMjMwLCAyMjMsIDYxLCA4OCwgMjQsIDIyNSwgOTksIDYxLCA4OCwgMjQsIDIxOSwgMTUxLCA2MSwgODgsIAorICAgIDI0LCAyMzYsIDY0LCA2MSwgODgsIDI0LCAyNTAsIDU1LCA2MSwgODgsIDI0LCAyNTAsIDExNSwgNjEsIDg4LCAyNCwgMjM0LCAKKyAgICAxMTcsIDYxLCA4OCwgMjQsIDIxNiwgMTc1LCA2MSwgODgsIDI0LCAyMjUsIDEzNSwgNjEsIDg4LCAyNCwgMjQxLCAxODAsIAorICAgIDYxLCA4OCwgMjQsIDI1MCwgNTUsIDY5LCA4OCwgMjM0LCA5LCAxMzUsIDIyNiwgMjIxLCA4OCwgMjM0LCA5LCAxMzUsIDE0NCwgCisgICAgMjQwLCAyMjksIDg4LCAxNTQsIDExMSwgODgsIDE1NCwgMTA1LCA4OCwgMTU0LCAxNTgsIDg4LCAxNTQsIDE2MSwgODgsIAorICAgIDE1NCwgMTkwLCA4OCwgMTU0LCAxOTUsIDg4LCAxNTQsIDE5OSwgODgsIDE1NCwgMTk2LCA4OCwgMTU0LCAyMDEsIDg4LCAKKyAgICAxNTQsIDIxNiwgMjQ4LCA4OCwgMTU0LCAyMzAsIDEzMywgODgsIDE1NCwgMjQ0LCAxMDQsIDg4LCAxNTQsIDIxMiwgNDAsIAorICAgIDg4LCAxNTQsIDIxMSwgMjE0LCA4OCwgMTU0LCAyMzEsIDQ0LCA4OCwgMTU0LCAyNDUsIDIzMSwgODgsIDE1NCwgMjE4LCAzOCwgCisgICAgODgsIDE1NCwgMjE4LCAxMzQsIDg4LCAxNTQsIDI0MSwgMjUxLCA4OCwgMTU0LCAyMTksIDU2LCA4OCwgMTU0LCAyMjksIAorICAgIDIwOSwgODgsIDE1NCwgMjE5LCA2LCA4OCwgMTU0LCAyNDQsIDExMCwgODgsIDE1NCwgMjQ5LCAyMDgsIDg4LCAxNTQsIDIzMywgCisgICAgMTMxLCA4OCwgMTU0LCAyMjMsIDc0LCA4OCwgMTU0LCAyNTEsIDIzLCA4OCwgMTU0LCAyMTgsIDg4LCA4OCwgMTU0LCAyMTgsIAorICAgIDIxLCA4OCwgMTU0LCAyNDUsIDEzNSwgODgsIDE1NCwgMjIzLCA2NiwgODgsIDE1NCwgMjU0LCAxNTksIDg4LCAxNTQsIDI0NCwgCisgICAgMTM2LCA4OCwgMTU0LCAyMjMsIDY0LCA4OCwgMTU0LCAyMjAsIDE1OCwgODgsIDE1NCwgMjIzLCAxMzAsIDM3LCAxNTQsIAorICAgIDIyNCwgMTUsIDM3LCAxNTQsIDIzNCwgODYsIDM3LCAxNTQsIDIyMSwgMjAwLCAzNywgMTU0LCAyMzQsIDUsIDM3LCA1NCwgCisgICAgMjE2LCAyNDksIDIyNiwgMjAxLCA4NSwgMjE4LCAyMzYsIDM3LCA1NCwgMjE1LCA3NCwgMjI2LCAyMDEsIDg1LCAyMTgsIAorICAgIDIzNiwgMzcsIDU0LCAyMTYsIDE2NCwgMjI2LCAyMDEsIDg1LCAyMTgsIDIzNiwgMzcsIDU0LCAyNDQsIDI0LCAyMjYsIDIwMSwgCisgICAgODUsIDIxOCwgMjM2LCAzNywgNTQsIDI0NCwgMTIzLCAyMjYsIDIwMSwgODUsIDIxOCwgMjM2LCAzNywgNTQsIDIxOSwgMTE0LCAKKyAgICAyMjYsIDIwMSwgODUsIDIxOCwgMjM2LCAzNywgNTQsIDIyMCwgMTE5LCAyMjYsIDIwMSwgODUsIDIxOCwgMjM2LCAzNywgNTQsIAorICAgIDI0NSwgMTkzLCAyMjYsIDIwMSwgODUsIDIxOCwgMjM2LCAyMjUsIDI1NSwgNTAsIDM3LCA1NCwgMjE1LCA3NCwgMTExLCAzNywgCisgICAgNTQsIDIxNSwgNzQsIDEwNSwgMzcsIDU0LCAyMTUsIDc0LCAxNTgsIDM3LCA1NCwgMjE1LCA3NCwgMTYxLCAzNywgNTQsIAorICAgIDIxNSwgNzQsIDE5MCwgMzcsIDU0LCAyMTUsIDc0LCAxOTUsIDM3LCA1NCwgMjE1LCA3NCwgMTk5LCAzNywgNTQsIDIxNSwgCisgICAgNzQsIDE5NiwgMzcsIDU0LCAyMTUsIDc0LCAyMDEsIDM3LCA1NCwgMjE2LCAxNjMsIDM3LCA1NCwgMjE2LCAxNjQsIDExMSwgCisgICAgMzcsIDU0LCAyMTYsIDE2NCwgMTA1LCAzNywgNTQsIDIxNiwgMTY0LCAxNTgsIDM3LCA1NCwgMjE2LCAxNjQsIDE2MSwgMzcsIAorICAgIDU0LCAyMTYsIDE2NCwgMTkwLCAzNywgMjQsIDIzNCwgNjQsIDM3LCAyNCwgMjI4LCAyMzEsIDM3LCAyNCwgMjE2LCAxMDIsIAorICAgIDM3LCAyNCwgMjIzLCAyOSwgMzcsIDI0LCAyMzAsIDIyMiwgMzcsIDI0LCAyMjUsIDk4LCAzNywgMjQsIDIxOSwgMTUwLCAzNywgCisgICAgMjQsIDIzNiwgNjMsIDM3LCAyNCwgMjUwLCA1NCwgMzcsIDI0LCAyNTAsIDExNCwgMzcsIDI0LCAyMzQsIDExNiwgMzcsIDI0LCAKKyAgICAyMTYsIDE3NCwgMzcsIDI0LCAyMjUsIDEzNCwgMzcsIDI0LCAyNDEsIDE3OSwgMzcsIDI0LCAyMzQsIDY1LCA2MSwgMzcsIAorICAgIDI0LCAyMjgsIDIzMiwgNjEsIDM3LCAyNCwgMjE2LCAxMDMsIDYxLCAzNywgMjQsIDIyMywgMzAsIDYxLCAzNywgMjQsIDIzMCwgCisgICAgMjIzLCA2MSwgMzcsIDI0LCAyMjUsIDk5LCA2MSwgMzcsIDI0LCAyMTksIDE1MSwgNjEsIDM3LCAyNCwgMjM2LCA2NCwgNjEsIAorICAgIDM3LCAyNCwgMjUwLCA1NSwgNjEsIDM3LCAyNCwgMjUwLCAxMTUsIDYxLCAzNywgMjQsIDIzNCwgMTE3LCA2MSwgMzcsIDI0LCAKKyAgICAyMTYsIDE3NSwgNjEsIDM3LCAyNCwgMjI1LCAxMzUsIDYxLCAzNywgMjQsIDI0MSwgMTgwLCA2MSwgMzcsIDIzNCwgOSwgCisgICAgMTM1LCAyNTAsIDE1NiwgMzcsIDIzNCwgOSwgMTM1LCAyMzUsIDUzLCAzNywgMjQsIDIzNiwgNjQsIDY5LCAyMzQsIDksIAorICAgIDIxOCwgMTYxLCA4NywgMzcsIDE1NCwgMTExLCAzNywgMTU0LCAxMDUsIDM3LCAxNTQsIDE1OCwgMzcsIDE1NCwgMTYxLCAzNywgCisgICAgMTU0LCAxOTAsIDM3LCAxNTQsIDE5NSwgMzcsIDE1NCwgMTk5LCAzNywgMTU0LCAxOTYsIDM3LCAxNTQsIDIwMSwgMzcsIAorICAgIDE1NCwgMjE2LCAyNDgsIDM3LCAxNTQsIDIzMCwgMTMzLCAzNywgMTU0LCAyNDQsIDEwNCwgMzcsIDE1NCwgMjEyLCA0MCwgCisgICAgMzcsIDE1NCwgMjExLCAyMTQsIDM3LCAxNTQsIDIzMSwgNDQsIDM3LCAxNTQsIDI0NSwgMjMxLCAzNywgMTU0LCAyMTgsIDM4LCAKKyAgICAzNywgMTU0LCAyMTgsIDEzNCwgMzcsIDE1NCwgMjQxLCAyNTEsIDM3LCAxNTQsIDIxOSwgNTYsIDM3LCAxNTQsIDIyOSwgCisgICAgMjA5LCAzNywgMTU0LCAyMTksIDYsIDM3LCAxNTQsIDI0NCwgMTEwLCAzNywgMTU0LCAyNDksIDIwOCwgMzcsIDE1NCwgMjMzLCAKKyAgICAxMzEsIDM3LCAxNTQsIDIyMSwgMTc2LCAzNywgMTU0LCAyMzEsIDE5NCwgMzcsIDE1NCwgMjQ0LCAxNDUsIDM3LCAxNTQsIAorICAgIDIxOCwgNTAsIDM3LCAxNTQsIDI0NSwgNDIsIDM3LCAxNTQsIDIyNCwgMTkwLCAzNywgMTU0LCAyNTMsIDIwNCwgMzcsIDE1NCwgCisgICAgMjM1LCAxNjUsIDM3LCAxNTQsIDIyMywgNjQsIDM3LCAxNTQsIDI0OSwgMTcyLCAzNywgMTU0LCAyNDksIDE2MywgMzcsIAorICAgIDE1NCwgMjQxLCAxNzIsIDM3LCAxNTQsIDI1MCwgMTgyLCAzNywgMTU0LCAyMzIsIDExNiwgMzcsIDE1NCwgMjMzLCA1MiwgCisgICAgMzcsIDE1NCwgMjIyLCAyNTQsIDM3LCAxNTQsIDIzMSwgODgsIDM3LCAxNTQsIDIyMywgOTAsIDM3LCAxNTQsIDIxOCwgODgsIAorICAgIDM3LCAxNTQsIDIxOCwgMjEsIDM3LCAxNTQsIDI0NSwgMTM1LCAzNywgMTU0LCAyMjMsIDY2LCAzNywgMTU0LCAyNTQsIDE1OSwgCisgICAgMzcsIDE1NCwgMjI4LCAyMTcsIDM3LCA1NCwgMjE2LCAxNjQsIDE5NSwgMzcsIDU0LCAyMTYsIDE2NCwgMTk5LCAzNywgNTQsIAorICAgIDIxNiwgMTY0LCAxOTYsIDM3LCA1NCwgMjE2LCAxNjQsIDIwMSwgMzcsIDU0LCAyNDQsIDIzLCAzNywgNTQsIDI0NCwgMjQsIAorICAgIDExMSwgMzcsIDU0LCAyNDQsIDI0LCAxMDUsIDM3LCA1NCwgMjQ0LCAyNCwgMTU4LCAzNywgNTQsIDI0NCwgMjQsIDE2MSwgCisgICAgMzcsIDU0LCAyNDQsIDI0LCAxOTAsIDM3LCA1NCwgMjQ0LCAyNCwgMTk1LCAzNywgNTQsIDI0NCwgMjQsIDE5OSwgMzcsIDU0LCAKKyAgICAyNDQsIDI0LCAxOTYsIDM3LCA1NCwgMjQ0LCAyNCwgMjAxLCAzNywgNTQsIDI0NCwgMTIyLCAxMTAsIDIxNywgNCwgMTYsIAorICAgIDMxLCAyMzUsIDEzOSwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQ0LCAxNTYsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDIzMSwgCisgICAgMTY1LCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNTQsIDU1LCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyMzEsIDEzNywgMTEwLCAKKyAgICAyMTcsIDQsIDE2LCAzMSwgMjM1LCA1MSwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjM1LCA1MiwgMTEwLCAyMTcsIDQsIDE2LCAKKyAgICAzMSwgMjUzLCAxOTYsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDIyMCwgMTM4LCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyMjYsIAorICAgIDI0MywgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjI4LCA0NSwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQ4LCA5MywgNDIsIDI0MSwgCisgICAgMTk3LCA0MiwgMjQ1LCA5NiwgNDIsIDI0NSwgNTEsIDIzMiwgMjI1LCAyMzIsIDI0NiwgNTAsIDM3LCA1NiwgNjEsIDM3LCAKKyAgICA1NiwgNzQsIDM3LCA1NiwgNjksIDM3LCA1NiwgNzYsIDM3LCA1NiwgNzgsIDM3LCA1NiwgMTc2LCAzNywgNTYsIDIzNCwgOTgsIAorICAgIDM3LCA1NiwgMjMzLCAyMjMsIDM3LCA1NiwgMjM0LCAxODgsIDM3LCA1NiwgMjM0LCAzNCwgMzcsIDU2LCAyMDYsIDM3LCA1NiwgCisgICAgMjE5LCAxOTMsIDM3LCA1NiwgMjE4LCA4NCwgMzcsIDU2LCAyMjEsIDE4MywgMzcsIDU2LCAyMTksIDYwLCAzNywgNTYsIAorICAgIDIxNywgMTA2LCAzNywgNTYsIDIxNiwgMTE4LCAzNywgNTYsIDIxNSwgMTE5LCAzNywgNTYsIDIxNywgMjMsIDM3LCA1NiwgCisgICAgMTEyLCAzNywgNTYsIDE5OCwgMzcsIDU2LCAyMjgsIDIzOCwgMzcsIDU2LCAyMjcsIDI0MiwgMzcsIDU2LCAyMjksIDExMiwgCisgICAgMzcsIDU2LCAyMjgsIDc5LCAzNywgNTYsIDE2MiwgMzcsIDU2LCAyNDEsIDE4NywgMzcsIDU2LCAyNDAsIDIyOSwgMzcsIDU2LCAKKyAgICAyNDEsIDI0NSwgMzcsIDU2LCAyNDEsIDc1LCAzNywgNTYsIDE4NiwgMzcsIDU2LCAyMzAsIDIzNSwgMzcsIDU2LCAyMzAsIAorICAgIDEwNywgMzcsIDU2LCAyMzEsIDk2LCAzNywgNTYsIDIzMCwgMTY2LCAzNywgNTYsIDE5MiwgMzcsIDU2LCAyMTAsIDIxMiwgCisgICAgMzcsIDU2LCAyMTAsIDI0NCwgMzcsIDU2LCAyMDUsIDM3LCA1NiwgMjIzLCAzOCwgMzcsIDU2LCAyMjIsIDE0MiwgMzcsIDU2LCAKKyAgICAyMjMsIDEzMSwgMzcsIDU2LCAyMjIsIDIxMywgMzcsIDU2LCAyMTIsIDY1LCAzNywgNTYsIDIxMSwgMjUwLCAzNywgNTYsIAorICAgIDIxMiwgMjIsIDM3LCA1NiwgMjExLCAyMjcsIDQyLCAyNTQsIDc5LCA0MiwgMjUzLCAyNDcsIDQyLCAyNTQsIDEwMywgNDIsIAorICAgIDI1NSwgNDAsIDQyLCAyMzUsIDIzMywgNDIsIDIzNSwgMjAzLCA0MiwgMjE0LCAxNjYsIDQyLCAyNDUsIDc0LCA0MiwgMjQ1LCAKKyAgICAyMTQsIDQyLCAyMjYsIDE5MCwgNDIsIDIyNiwgMTg0LCA0MiwgMjM0LCAyNTEsIDQyLCAyMzQsIDIyMCwgNDIsIDIzNCwgCisgICAgMjE3LCA0MiwgMjQzLCA5OSwgNDIsIDI0MywgMTA4LCA0MiwgMjQyLCAyMTEsIDQyLCAyNDIsIDIwNywgNDIsIDIzMywgMTU2LCAKKyAgICA0MiwgMjQyLCAyMDAsIDQyLCAyMzQsIDc4LCA0MiwgMjM0LCA3NywgNDIsIDIzNCwgNzYsIDQyLCAyMzQsIDc1LCA0MiwgCisgICAgMjQyLCA5MywgNDIsIDI0MiwgOTIsIDQyLCAyMzMsIDE5OSwgNDIsIDIzMywgMjAxLCA0MiwgMjM0LCAxODQsIDQyLCAyMzQsIAorICAgIDcsIDQyLCAyMzQsIDE0LCA0MiwgMjIyLCAxOCwgNDIsIDIyMSwgMjM5LCA0MiwgMjE5LCAxMzEsIDQyLCAyMjAsIDE0MywgCisgICAgNDIsIDIyMCwgMTQyLCA0MiwgMjQ4LCAyMjYsIDQyLCAyNDgsIDQ0LCA0MiwgMjQ3LCAxMjksIDQyLCAyMTYsIDMzLCA0MiwgCisgICAgMjI5LCAyMDUsIDQyLCAyMjgsIDQ2LCA0MiwgMjQyLCAzOSwgNDIsIDIyNiwgODgsIDQyLCAyMjYsIDg3LCA0MiwgMjUyLCAKKyAgICAxOTYsIDQyLCAyMjUsIDEwOCwgNDIsIDIyNSwgNzIsIDQyLCAyMjUsIDczLCA0MiwgMjUxLCAyNDIsIDQyLCAyNDAsIDIyOCwgCisgICAgNDIsIDI0MCwgMjI0LCA0MiwgMjUxLCA5OSwgNDIsIDI0MCwgMjExLCA0MiwgMjQxLCAyMjIsIDQyLCAyMjUsIDE2MiwgNDIsIAorICAgIDIyNSwgMTk3LCA0MiwgMjQxLCAyMDUsIDQyLCAyMjUsIDE5NCwgNDIsIDIyNSwgMjEwLCA0MiwgMjUyLCA2OSwgNDIsIDIyNSwgCisgICAgOSwgNDIsIDI1MSwgMTg4LCA0MiwgMjQxLCA2MywgNDIsIDIyNCwgMjUzLCA0MiwgMjQxLCA1NSwgNDIsIDI0MSwgNTcsIDQyLCAKKyAgICAyMzEsIDIwNiwgNDIsIDIzMSwgMjAyLCA0MiwgMjMxLCAyMTEsIDQyLCAyMzEsIDE1NSwgNDIsIDIzMSwgMTgwLCA0MiwgCisgICAgMjMwLCAyMDIsIDQyLCAyMzAsIDE4MSwgNDIsIDIzMCwgMTgwLCA0MiwgMjMxLCA3OSwgNDIsIDIzMSwgNzYsIDQyLCAyMzEsIAorICAgIDgwLCA0MiwgMjExLCAxMDIsIDQyLCAyMTEsIDEwMCwgNDIsIDIxMCwgMjAxLCA0MiwgMjIyLCAyMjksIDQyLCAyMjIsIDIzMywgCisgICAgNDIsIDIyMiwgMTE5LCA0MiwgMjIyLCAxMTMsIDQyLCAyMjMsIDg4LCA0MiwgMjIzLCA4NSwgNDIsIDIxMiwgMzgsIDExMCwgCisgICAgMjE3LCA0LCAxNiwgMzEsIDI0MCwgMjQ2LCAyMTAsIDg2LCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDAsIDI0NiwgMTExLCAKKyAgICAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDAsIDI0NiwgMTA1LCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDAsIDI0NiwgMTU4LCAKKyAgICAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDAsIDI0NiwgMTYxLCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDAsIDI0NiwgMTkwLCAKKyAgICAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDAsIDI0NiwgMTk1LCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDAsIDI0NiwgMTk5LCAKKyAgICAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDAsIDI0NiwgMTk2LCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDAsIDI0NiwgMjAxLCAKKyAgICAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDAsIDI0NiwgMjE2LCAyNDgsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0MCwgMjQ2LCAKKyAgICAyNDUsIDE3NSwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQwLCAyNDYsIDIxNSwgNzYsIDExMCwgMjE3LCA0LCAxNiwgMzEsIAorICAgIDI0MCwgMjQ2LCAyMTYsIDE2NSwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQwLCAyNDYsIDI0NCwgMTMsIDExMCwgMjE3LCA0LCAKKyAgICAxNiwgMzEsIDI0MCwgMjQ2LCAyNDQsIDEyNiwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQwLCAyNDYsIDIxOSwgMTIxLCAxMTAsIAorICAgIDIxNywgNCwgMTYsIDMxLCAyNDAsIDI0NiwgMjIwLCAxMjEsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0MCwgMjQ2LCAyNDUsIAorICAgIDE5OCwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQwLCAyNDYsIDIyOCwgMjAyLCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDAsIAorICAgIDI0NiwgMjE1LCA3MywgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQwLCAyNDYsIDIxNSwgNjcsIDExMCwgMjE3LCA0LCAxNiwgCisgICAgMzEsIDI0MCwgMjQ2LCAyMTUsIDYzLCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDAsIDI0NiwgMjE1LCA2NCwgMTEwLCAyMTcsIAorICAgIDQsIDE2LCAzMSwgMjQwLCAyNDYsIDIxNSwgNjksIDQyLCAyNDAsIDIzNywgNDIsIDI0OCwgMjI5LCA0MiwgMjUzLCAyMDAsIAorICAgIDQyLCAxMzAsIDQyLCAyMjYsIDEyOSwgNDIsIDIyNSwgMjI5LCA0MiwgMjQ3LCAxNTUsIDQyLCAyNDcsIDE1NiwgMjE4LCAKKyAgICAyMzUsIDQyLCAyNDcsIDE1NiwgMjQ5LCAxMTYsIDQyLCAyMzUsIDE2MiwgNDIsIDI0NSwgOTksIDIyOSwgMjEwLCAyNDEsIAorICAgIDIyMywgNDIsIDI0NSwgOTksIDIyOSwgMjEwLCAyMTcsIDE3NSwgNDIsIDI0NSwgOTksIDIyOSwgMjEwLCAyMTcsIDc1LCA0MiwgCisgICAgMjQ1LCA5OSwgMjI5LCAyMTAsIDIzMSwgNzUsIDQyLCAyNDksIDE2NSwgNDIsIDIyNiwgOTQsIDI1NCwgMTMzLCA0MiwgMTk4LCAKKyAgICA0MiwgMjMwLCAxMDgsIDYxLCA0MiwgMTg2LCA0MiwgMTc2LCA0MiwgMjM0LCAxOTEsIDQyLCAyMzEsIDEzNCwgNDIsIDI0MywgCisgICAgODcsIDQyLCAyNTEsIDI2LCA0MiwgMjM0LCAxOTAsIDQyLCAyMjUsIDE1MywgNDIsIDIyOSwgODYsIDQyLCAyMzAsIDEwOCwgCisgICAgMjQ1LCAxNCwgNDIsIDIzMCwgMTA4LCAyNDMsIDIwOSwgNDIsIDIzMSwgMjAsIDQyLCAyMzQsIDE0MCwgNDIsIDI0MCwgMTcwLCAKKyAgICA0MiwgMjM0LCAxMDAsIDQyLCAyMzAsIDIzNywgNDIsIDI0MiwgMjIzLCA0MiwgMjE2LCAxMjAsIDQyLCAyMzAsIDEwOCwgCisgICAgMTU2LCA0MiwgMjMwLCAxNzQsIDQyLCAyNDcsIDE2NSwgNDIsIDIzNCwgNDYsIDQyLCAyNDQsIDUzLCA0MiwgMjI4LCAxMTcsIAorICAgIDQyLCAyMzAsIDEwOCwgMTk0LCA0MiwgMjMwLCAxNzEsIDQyLCAyNDksIDI0NywgNDIsIDIzNCwgNDAsIDQyLCAyMzAsIDE3MiwgCisgICAgMjE4LCAyMzUsIDQyLCAyNDksIDI0OCwgMjE4LCAyMzUsIDQyLCAyMzIsIDU1LCAyMTgsIDIzNSwgNDIsIDIzNCwgNDEsIAorICAgIDIxOCwgMjM1LCA0MiwgMjMwLCAxNzIsIDI0OSwgMTE2LCA0MiwgMjQ5LCAyNDgsIDI0OSwgMTE2LCA0MiwgMjMyLCA1NSwgCisgICAgMjQ5LCAxMTYsIDQyLCAyMzQsIDQxLCAyNDksIDExNiwgNDIsIDIzMiwgNTUsIDExNSwgMjIyLCA5MywgNDIsIDIzMiwgNTUsIAorICAgIDExNSwgMjIyLCA5NCwgMjE4LCAyMzUsIDQyLCAxOTEsIDQyLCAyMzQsIDEsIDQyLCAyMzAsIDExMCwgNDIsIDI0MiwgMTU4LCAKKyAgICA0MiwgMjIzLCAxNzksIDQyLCAyMjMsIDE4MCwgMTE1LCAyMjIsIDkzLCA0MiwgMjIzLCAxODAsIDExNSwgMjIyLCA5NCwgCisgICAgMjE4LCAyMzUsIDQyLCAyMjQsIDE2NSwgNDIsIDIyOCwgMTgsIDQyLCAyMzAsIDEwOCwgMjIyLCA5MywgNDIsIDIzMCwgMTA5LCAKKyAgICA0MiwgMjI0LCAxMTksIDQyLCAyMjcsIDE4MCwgNDIsIDIzMCwgMTA4LCAyMTQsIDEwNSwgNDIsIDIzMCwgNTQsIDQyLCAyMzMsIAorICAgIDE5MSwgNDIsIDIzMCwgNTUsIDIzMSwgNzksIDQyLCAyMjQsIDExOCwgNDIsIDIyNywgMTc5LCA0MiwgMjMwLCAxMDgsIDIxMiwgCisgICAgOTgsIDQyLCAyMzAsIDQ4LCA0MiwgMjMzLCAxODksIDQyLCAyMzAsIDQ5LCAyMzEsIDc5LCA0MiwgMjM1LCAzMCwgMjI2LCAKKyAgICAyMjQsIDQyLCAyMzIsIDU1LCAyMjYsIDIyNCwgNDIsIDI1NCwgMTQ0LCA0MiwgMjUxLCAxNjgsIDQyLCAyNTAsIDIyMiwgNDIsIAorICAgIDI1MCwgMTk5LCA0MiwgMjUxLCA3NSwgMTE1LCAyMzQsIDE0MCwgNDIsIDI0OSwgMjQ2LCA0MiwgMjQ4LCAxNTAsIDQyLCAKKyAgICAyNDIsIDc5LCA0MiwgMTYyLCA0MiwgMjQwLCAyMzgsIDQyLCAyMzYsIDYsIDQyLCAyMzQsIDUzLCA0MiwgMjM0LCA0MSwgCisgICAgMjUxLCAyLCA0MiwgMjMzLCAyMjUsIDQyLCAyMzIsIDE2NSwgNDIsIDIzMiwgMTY0LCA0MiwgMjMyLCAxNTMsIDQyLCAyMzIsIAorICAgIDY4LCA0MiwgMjMxLCAxMzUsIDIxOSwgODEsIDQyLCAyMzAsIDIwMSwgNDIsIDIzMCwgMTU3LCA0MiwgMjI1LCAxNTEsIDQyLCAKKyAgICAyMjUsIDIyLCA0MiwgMjI0LCAyMjIsIDQyLCAyMjQsIDIyMCwgNDIsIDIxOCwgMjI5LCA0MiwgMjE4LCAzLCA0MiwgMjEyLCAKKyAgICAyNCwgNDIsIDIxNCwgMTA2LCAxMTUsIDE5NCwgNDIsIDExNiwgMTE1LCAxOTQsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0OCwgCisgICAgMTU0LCAxMTEsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0OCwgMTU0LCAxMDUsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0OCwgCisgICAgMTU0LCAxNTgsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0OCwgMTU0LCAxNjEsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0OCwgCisgICAgMTU0LCAxOTAsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0OCwgMTU0LCAxOTUsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0OCwgCisgICAgMTU0LCAxOTksIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0OCwgMTU0LCAxOTYsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0OCwgCisgICAgMTU0LCAyMDEsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0OCwgMTU0LCAyMTYsIDI0OCwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgCisgICAgMjQ4LCAxNTQsIDI0NSwgMTc1LCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDgsIDE1NCwgMjE1LCA3NiwgMTEwLCAyMTcsIDQsIAorICAgIDE2LCAzMSwgMjQ4LCAxNTQsIDIxNiwgMTY1LCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDgsIDE1NCwgMjQ0LCAxMywgMTEwLCAKKyAgICAyMTcsIDQsIDE2LCAzMSwgMjQ4LCAxNTQsIDI0NCwgMTI2LCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDgsIDE1NCwgMjE5LCAKKyAgICAxMjEsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0OCwgMTU0LCAyMjAsIDEyMSwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQ4LCAKKyAgICAxNTQsIDI0NSwgMTk4LCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDgsIDE1NCwgMjI4LCAyMDIsIDExMCwgMjE3LCA0LCAxNiwgCisgICAgMzEsIDI0OCwgMTU0LCAyMTUsIDczLCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDgsIDE1NCwgMjE1LCA2NywgMTEwLCAyMTcsIAorICAgIDQsIDE2LCAzMSwgMjQ4LCAxNTQsIDIxNSwgNjMsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0OCwgMTU0LCAyMTUsIDY0LCAKKyAgICAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDgsIDE1NCwgMjE1LCA2OSwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQ4LCAxNTQsIAorICAgIDIxNSwgNzAsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0OCwgMTU0LCAyMTUsIDY1LCAxMTAsIDIxNywgNCwgMTYsIDMxLCAKKyAgICAyNDgsIDE1NCwgMjE1LCA2NiwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQ4LCAxNTQsIDIxNSwgNzIsIDExMCwgMjE3LCA0LCAKKyAgICAxNiwgMzEsIDI0OCwgMTU0LCAyMTUsIDY4LCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDgsIDE1NCwgMjE2LCAxNjMsIDExMCwgCisgICAgMjE3LCA0LCAxNiwgMzEsIDI0OCwgMTU0LCAyMTYsIDE2MiwgNDIsIDI0MywgMTI1LCAyNDEsIDE5OSwgMzEsIDIxNiwgMTk3LCAKKyAgICAyNDksIDE0OCwgMjQxLCAyMzAsIDI0MSwgMTk5LCAzMSwgMjE2LCAxOTcsIDIyMywgMTI1LCAyNDUsIDIzMSwgMjQxLCAxOTksIAorICAgIDMxLCAyNDcsIDIzOSwgMjUzLCAyMTUsIDIxNiwgMTk3LCAyNTIsIDY0LCAyNDEsIDE5OSwgMzEsIDIxMCwgMjIzLCAyNDQsIAorICAgIDQ2LCAyNDEsIDE5OSwgMzEsIDIxMiwgNTksIDI0MSwgMTk5LCAzMSwgMjQ5LCAyMTEsIDI0MSwgMTk5LCAzMSwgMjE2LCAKKyAgICAxOTcsIDI1NCwgMTEsIDI0MSwgMTk5LCAzMSwgMjQxLCA2NywgMjE2LCAzOSwgMjQxLCAxOTksIDMxLCA0LCAyMTcsIDYyLCAKKyAgICAyNDEsIDE5OSwgMzEsIDIxNSwgMjM4LCAyNDEsIDE5OSwgMzEsIDIyNSwgMjIyLCAyNDEsIDE5OSwgMzEsIDIxOCwgMTYwLCAKKyAgICAyNDEsIDE5OSwgMzEsIDI0NCwgMTQ3LCAyNDEsIDE5OSwgMzEsIDI0MiwgMTM5LCAyMjQsIDI0MywgMjQxLCAxOTksIDMxLCAKKyAgICAyMzAsIDE2MCwgMjQxLCAxOTksIDMxLCAyNDUsIDEzNCwgMjQxLCAxOTksIDMxLCAyNDQsIDQ3LCAyNDEsIDE5OSwgMzEsIAorICAgIDIxMSwgMjA3LCAyMjYsIDIwMSwgMjE2LCAxOTcsIDI0OCwgOTQsIDI0MSwgMTk5LCAzMSwgMjU0LCA1OSwgMjQxLCAxOTksIAorICAgIDMxLCAyNDksIDE5MywgMjQxLCAxOTksIDMxLCAyNTEsIDIzNSwgMjE2LCAxMzksIDI0MSwgMTk5LCAzMSwgMjQyLCAxNTYsIAorICAgIDI0MSwgMTk5LCAzMSwgMjE4LCAyNDcsIDI1NCwgNzgsIDI0MSwgMTk5LCAzMSwgMjIzLCA1NiwgMjQxLCAxOTksIDMxLCAKKyAgICAyMzUsIDIyNywgMjQxLCAxOTksIDMxLCAyNDIsIDEzOSwgMjE3LCA2MiwgMjQxLCAxOTksIDMxLCAyMzAsIDExNiwgMjQ5LCAKKyAgICAxNjcsIDI0MSwgMTk5LCAzMSwgMjQyLCAxMzksIDIyNCwgMjAwLCAyNDEsIDE5OSwgMzEsIDIxNiwgMTk3LCAyNTUsIDI3LCAKKyAgICAyMTIsIDQwLCAyNDEsIDE5OSwgMzEsIDIxNiwgMTk3LCAyNTAsIDE2LCAyNDQsIDEwNCwgMjQxLCAxOTksIDMxLCAyMzUsIAorICAgIDI0MCwgMjQxLCAxOTksIDMxLCAyNDYsIDY1LCAyNDEsIDE5OSwgMzEsIDIyMywgNTksIDI0MSwgMTk5LCAzMSwgMjQyLCAKKyAgICAxMzksIDIyNCwgMjI3LCAyNDEsIDE5OSwgMzEsIDIyNCwgMTgwLCAyNDEsIDE5OSwgMzEsIDI0OCwgMTY5LCA2NCwgMjE2LCAKKyAgICAxOTcsIDIzMiwgMjM2LCAyNDEsIDE5OSwgMzEsIDIxNiwgMTk3LCAyNDQsIDE4MiwgMjQxLCAxOTksIDMxLCAyMjYsIDE2NywgCisgICAgMjQxLCAxOTksIDMxLCAyMjYsIDI0OCwgMjQxLCAxOTksIDMxLCAyNDgsIDY3LCAyNDEsIDE5OSwgMzEsIDI0OCwgODcsIAorICAgIDI0MSwgMTk5LCAzMSwgMjM1LCAyNTQsIDI0MSwgMTk5LCAzMSwgMjUxLCAxNTcsIDI0MSwgMTk5LCAzMSwgMjQ5LCAyMjksIAorICAgIDIxNiwgNDMsIDIzMSwgODEsIDI0MSwgMTk5LCAzMSwgMjQzLCA5NCwgMjE2LCAzOSwgMjQxLCAxOTksIDMxLCAyMjQsIDEyOCwgCisgICAgMjE0LCAxNTQsIDI0MSwgMTk5LCAzMSwgMjI2LCAxNjYsIDI0MSwgMTk5LCAzMSwgMjE2LCAxOTcsIDIxMiwgMTMsIDI0MSwgCisgICAgMTk5LCAzMSwgMjIzLCA0OCwgMjQxLCAxOTksIDMxLCAyMTYsIDE5NywgMjUwLCAyMjgsIDI0MSwgMTk5LCAzMSwgMjE2LCAKKyAgICAxOTcsIDI1NCwgNywgMjE2LCAxMzQsIDI0MSwgMTk5LCAzMSwgMjE2LCAxOTcsIDIzNCwgMTg1LCAyMTgsIDEzNiwgMjMwLCAKKyAgICAxMjAsIDI0MSwgMTk5LCAzMSwgMjQ4LCA0MCwgMjQxLCAxOTksIDMxLCAyMTYsIDE5NywgMjMxLCAxNTcsIDIzMSwgMjA3LCAKKyAgICAyNDEsIDE5OSwgMzEsIDI1NSwgMjgsIDI0MSwgMTk5LCAzMSwgMjE2LCAxOTcsIDIxMiwgNTQsIDI0MSwgMTk5LCAzMSwgCisgICAgMjE2LCAxOTcsIDI0MywgNTQsIDIxMSwgMjM5LCAyNDEsIDE5OSwgMzEsIDIxNiwgMTk3LCAyMzUsIDU4LCAyMzMsIDExMywgCisgICAgMjQxLCAxOTksIDMxLCAyNDcsIDE5MiwgMjQxLCAxOTksIDMxLCAyMzIsIDIyNiwgMjQxLCAxOTksIDMxLCAyMzUsIDIzMCwgCisgICAgMjE1LCAxODgsIDI0MSwgMTk5LCAzMSwgNCwgMjI0LCAyMDAsIDI0MSwgMTk5LCAzMSwgMjU0LCAyMjYsIDI0OSwgMjIwLCAKKyAgICAyNDEsIDE5OSwgMzEsIDI1MiwgNjcsIDI0OSwgMjIwLCA4LCAzLCAyMzUsIDE2NiwgOCwgMywgMjM1LCAxNTksIDgsIDMsIAorICAgIDc0LCA4LCAzLCAyMzUsIDE4OSwgOCwgMywgMjM2LCA2NSwgOCwgMywgMjM2LCA0OCwgOCwgMywgMjM2LCA2NywgOCwgMywgCisgICAgMjM2LCA2NiwgOCwgMywgMjUzLCAyMTQsIDgsIDMsIDI1MywgMTc3LCA4LCAzLCA2MSwgOCwgMywgMjU0LCA4MCwgOCwgMywgCisgICAgMjE0LCAxNjQsIDgsIDMsIDIxNCwgMTY3LCA4LCAzLCAyMTQsIDE2NSwgOCwgMywgMjI2LCAxNDQsIDgsIDMsIDIyNiwgMTE4LCAKKyAgICA4LCAzLCA3OCwgOCwgMywgMjI2LCAxNzksIDgsIDMsIDI0NSwgNDMsIDgsIDMsIDc2LCA4LCAzLCAyMTEsIDE5NSwgOCwgMywgCisgICAgMjUxLCAyMzYsIDgsIDMsIDI1MSwgMjMzLCA4LCAzLCAyNTIsIDE0LCA4LCAzLCAyNTEsIDI0NiwgOCwgMywgMjUyLCAzLCA4LCAKKyAgICAzLCAyNTIsIDIsIDgsIDMsIDI1MiwgNSwgOCwgMywgMjUyLCA0LCA4LCAzLCAyNTIsIDEyOSwgOCwgMywgMjUyLCAxMjEsIDgsIAorICAgIDMsIDI1MiwgMTk5LCA4LCAzLCAyNTIsIDE1MCwgOCwgMywgMjUxLCAxMDksIDgsIDMsIDI1MSwgMTEzLCA4LCAzLCAyNTEsIAorICAgIDExMCwgOCwgMywgMjUxLCAxODcsIDgsIDMsIDI1MSwgMTcxLCA4LCAzLCAyNTEsIDIxMywgOCwgMywgMjUxLCAxOTMsIDgsIAorICAgIDMsIDI1MiwgMjksIDgsIDMsIDI1MiwgODMsIDgsIDMsIDI1MiwgNDEsIDgsIDMsIDI1MSwgOTUsIDgsIDMsIDI1MSwgOTIsIAorICAgIDgsIDMsIDI1MSwgMTMzLCA4LCAzLCAyNTEsIDEwOCwgOCwgMywgMjUxLCAxMDIsIDgsIDMsIDI1MSwgMTA2LCA4LCAzLCAKKyAgICAyNTEsIDgwLCA4LCAzLCAyNTEsIDc4LCA4LCAzLCAyNTEsIDg1LCA4LCAzLCAyNTEsIDgzLCA4LCAzLCAyNTEsIDgxLCA4LCAKKyAgICAzLCAyNTEsIDgyLCA4LCAzLCAyMjUsIDUyLCA4LCAzLCAyMjUsIDQ4LCA4LCAzLCAyMjUsIDExMSwgOCwgMywgMjI1LCA2MiwgCisgICAgOCwgMywgMjI1LCA3OCwgOCwgMywgMjI1LCAxMDUsIDgsIDMsIDIyNSwgMTAxLCA4LCAzLCAyMjUsIDI0NCwgOCwgMywgMjI1LCAKKyAgICAyMzQsIDgsIDMsIDE5MSwgOCwgMywgMjI2LCAyNSwgOCwgMywgMjI0LCAxMzgsIDgsIDMsIDIyNCwgMTQwLCA4LCAzLCAyMjQsIAorICAgIDEzOSwgOCwgMywgMjI0LCAyMzYsIDgsIDMsIDIyNCwgMjI1LCA4LCAzLCAyMjUsIDE5LCA4LCAzLCAyMjQsIDI0OCwgOCwgMywgCisgICAgMjI0LCAxMjQsIDgsIDMsIDIyNCwgMTIwLCA4LCAzLCAyMjQsIDE1MywgOCwgMywgMjI0LCAxMzcsIDgsIDMsIDIyNCwgMTI5LCAKKyAgICA4LCAzLCAyMjQsIDEzNSwgOCwgMywgMjI0LCAxMDMsIDgsIDMsIDIyNCwgMTAyLCA4LCAzLCAyMjQsIDEwNywgOCwgMywgCisgICAgMjI0LCAxMDYsIDgsIDMsIDIyNCwgMTA0LCA4LCAzLCAyMjQsIDEwNSwgOCwgMywgMjUyLCAxMDQsIDgsIDMsIDI1MiwgMTAzLCAKKyAgICA4LCAzLCAyNTIsIDExMCwgOCwgMywgMjUyLCAxMDUsIDgsIDMsIDI1MiwgMTA3LCA4LCAzLCAyNTIsIDEwNiwgOCwgMywgCisgICAgMjUyLCAxMDksIDgsIDMsIDI1MiwgMTA4LCA4LCAzLCAyNTIsIDExNiwgOCwgMywgMjUyLCAxMTUsIDgsIDMsIDI1MiwgMTE5LCAKKyAgICA4LCAzLCAyNTIsIDExNywgOCwgMywgMjUyLCA5NSwgOCwgMywgMjUyLCA5NywgOCwgMywgMjUyLCA5NiwgOCwgMywgMjUyLCAKKyAgICAxMDAsIDgsIDMsIDI1MiwgOTksIDgsIDMsIDI1MiwgMTAyLCA4LCAzLCAyNTIsIDEwMSwgOCwgMywgMjUyLCAxMTEsIDgsIDMsIAorICAgIDI1MiwgMTE0LCA4LCAzLCAyNTIsIDExMiwgOCwgMywgMjUyLCA5MSwgOCwgMywgMjUyLCA5MCwgOCwgMywgMjUyLCA5OCwgOCwgCisgICAgMywgMjUyLCA5NCwgOCwgMywgMjUyLCA5MiwgOCwgMywgMjUyLCA5MywgOCwgMywgMjUyLCA4NywgOCwgMywgMjUyLCA4NiwgCisgICAgOCwgMywgMjUyLCA4OSwgOCwgMywgMjUyLCA4OCwgOCwgMywgMjI5LCAxNzQsIDgsIDMsIDIyOSwgMTczLCA4LCAzLCAyMjksIAorICAgIDE3OSwgOCwgMywgMjI5LCAxNzUsIDgsIDMsIDIyOSwgMTc2LCA4LCAzLCAyMjksIDE3OCwgOCwgMywgMjI5LCAxNzcsIDgsIAorICAgIDMsIDIyOSwgMTgyLCA4LCAzLCAyMjksIDE4MSwgOCwgMywgMjI5LCAxODQsIDgsIDMsIDIyOSwgMTgzLCA4LCAzLCAyMjksIAorICAgIDE3MCwgOCwgMywgMjI5LCAxNjksIDgsIDMsIDIyOSwgMTcyLCA4LCAzLCAyMjksIDE3MSwgOCwgMywgMjI5LCAxNjMsIDgsIAorICAgIDMsIDIyOSwgMTYyLCA4LCAzLCAyMjksIDE2NywgOCwgMywgMjI5LCAxNjYsIDgsIDMsIDIyOSwgMTY0LCA4LCAzLCAyMjksIAorICAgIDE2NSwgOCwgMywgMjI5LCAxNTcsIDgsIDMsIDIyOSwgMTU2LCA4LCAzLCAyMjksIDE2MSwgOCwgMywgMjI5LCAxNjAsIDgsIAorICAgIDMsIDIyOSwgMTU4LCA4LCAzLCAyMjksIDE1OSwgOCwgMywgMjQxLCAxMTcsIDgsIDMsIDI0MSwgMTE2LCA4LCAzLCAyNDEsIAorICAgIDEyMiwgOCwgMywgMjQxLCAxMTgsIDgsIDMsIDI0MSwgMTE5LCA4LCAzLCAyNDEsIDEyMSwgOCwgMywgMjQxLCAxMjAsIDgsIAorICAgIDMsIDI0MSwgMTI1LCA4LCAzLCAyNDEsIDEyNCwgOCwgMywgMjQxLCAxMjcsIDgsIDMsIDI0MSwgMTI2LCA4LCAzLCAyNDEsIAorICAgIDEwOCwgOCwgMywgMjQxLCAxMTAsIDgsIDMsIDI0MSwgMTA5LCA4LCAzLCAyNDEsIDExMywgOCwgMywgMjQxLCAxMTIsIDgsIAorICAgIDMsIDI0MSwgMTE1LCA4LCAzLCAyNDEsIDExNCwgOCwgMywgMjQxLCAxMDQsIDgsIDMsIDI0MSwgMTAzLCA4LCAzLCAyNDEsIAorICAgIDExMSwgOCwgMywgMjQxLCAxMDcsIDgsIDMsIDI0MSwgMTA1LCA4LCAzLCAyNDEsIDEwNiwgOCwgMywgMjQxLCA5OCwgOCwgMywgCisgICAgMjQxLCAxMDIsIDgsIDMsIDI0MSwgMTAxLCA4LCAzLCAyNDEsIDk5LCA4LCAzLCAyNDEsIDEwMCwgOCwgMywgMjMwLCAxNzcsIAorICAgIDgsIDMsIDIzMCwgMTc2LCA4LCAzLCAyMzAsIDIzNSwgOCwgMywgMjMwLCAxODMsIDgsIDMsIDIzMCwgMjA4LCA4LCAzLCAKKyAgICAyMzAsIDIyNiwgOCwgMywgMjMwLCAyMjQsIDgsIDMsIDIzMSwgMTQ0LCA4LCAzLCAyMzEsIDEzOSwgOCwgMywgMTg2LCA4LCAKKyAgICAzLCAyMzEsIDE3NywgOCwgMywgMjMwLCA3OSwgOCwgMywgMjMwLCA3OCwgOCwgMywgMjMwLCA4MiwgOCwgMywgMjMwLCA4MCwgCisgICAgOCwgMywgMjMwLCAxMjYsIDgsIDMsIDIzMCwgMTEyLCA4LCAzLCAyMzAsIDE2NiwgOCwgMywgMjMwLCAxMzEsIDgsIDMsIAorICAgIDIzMSwgMzEsIDgsIDMsIDIzMSwgOTYsIDgsIDMsIDIzMCwgNjAsIDgsIDMsIDIzMCwgNTYsIDgsIDMsIDIzMCwgMTA3LCA4LCAKKyAgICAzLCAyMzAsIDc1LCA4LCAzLCAyMzAsIDY4LCA4LCAzLCAyMzAsIDczLCA4LCAzLCAyMzAsIDMzLCA4LCAzLCAyMzAsIDMyLCAKKyAgICA4LCAzLCAyMzAsIDM4LCA4LCAzLCAyMzAsIDM1LCA4LCAzLCAyNDQsIDkxLCA4LCAzLCAyNDQsIDg2LCA4LCAzLCAyNDQsIAorICAgIDEyOSwgOCwgMywgMjQ0LCAxMDYsIDgsIDMsIDI0NCwgMTc1LCA4LCAzLCAyNDQsIDE2NiwgOCwgMywgMjQ0LCAyMDQsIDgsIAorICAgIDMsIDI0NCwgMTc4LCA4LCAzLCAyNDQsIDExLCA4LCAzLCAyNDQsIDUxLCA4LCAzLCAyNDQsIDM1LCA4LCAzLCAyNDMsIDIyNSwgCisgICAgOCwgMywgMjQzLCAyMjQsIDgsIDMsIDI0MywgMjQxLCA4LCAzLCAyNDMsIDIzMCwgOCwgMywgMjQzLCAyMjgsIDgsIDMsIAorICAgIDI0MywgMjI5LCA4LCAzLCAyNDMsIDIxMiwgOCwgMywgMjQzLCAyMTEsIDgsIDMsIDI0MywgMjE1LCA4LCAzLCAyNDMsIDIxMywgCisgICAgOCwgMywgMjEzLCAxNDQsIDgsIDMsIDIxMywgMTM5LCA4LCAzLCAyMTMsIDE3NiwgOCwgMywgMjEzLCAxNTMsIDgsIDMsIAorICAgIDIxMywgMTY2LCA4LCAzLCAyMTMsIDE2MywgOCwgMywgMjEzLCAxNjgsIDgsIDMsIDIxMywgMTY3LCA4LCAzLCAyMTQsIDcsIAorICAgIDgsIDMsIDIxNCwgMiwgOCwgMywgMjE0LCAyNywgOCwgMywgMjE0LCAxOCwgOCwgMywgMjEzLCAxMjUsIDgsIDMsIDIxMywgCisgICAgMTIxLCA4LCAzLCAyMTMsIDEzOCwgOCwgMywgMjEzLCAxMjYsIDgsIDMsIDIxMywgMTc4LCA4LCAzLCAyMTMsIDI0NCwgOCwgCisgICAgMywgMjEyLCAxMTAsIDgsIDMsIDIxMiwgMTA4LCA4LCAzLCAyMTIsIDExNiwgOCwgMywgMjEyLCAxMTMsIDgsIDMsIDIxMiwgCisgICAgMTExLCA4LCAzLCAyMTIsIDExMiwgOCwgMywgMjEyLCAxMDIsIDgsIDMsIDIxMiwgMTAxLCA4LCAzLCAyMTIsIDEwNiwgOCwgCisgICAgMywgMjEyLCAxMDUsIDgsIDMsIDIxMiwgMTAzLCA4LCAzLCAyMTIsIDEwNCwgOCwgMywgMjQ3LCAxODYsIDgsIDMsIDI0NywgCisgICAgMTc0LCA4LCAzLCAyNDgsIDExLCA4LCAzLCAyNDcsIDIxMSwgOCwgMywgMjQ3LCAyNDQsIDgsIDMsIDI0NywgMjQ4LCA4LCAzLCAKKyAgICAyNDcsIDI0NywgOCwgMywgMjQ4LCAxNjAsIDgsIDMsIDI0OCwgMTU1LCA4LCAzLCAyNDgsIDIyOSwgOCwgMywgMjQ4LCAxODAsIAorICAgIDgsIDMsIDI0NiwgNzAsIDgsIDMsIDI0NiwgNzEsIDgsIDMsIDI0NywgMTI4LCA4LCAzLCAyNDYsIDExMCwgOCwgMywgMjQ3LCAKKyAgICAxNTMsIDgsIDMsIDI0NywgMTMwLCA4LCAzLCAyNDgsIDM4LCA4LCAzLCAyNDgsIDk4LCA4LCAzLCAyNDgsIDUzLCA4LCAzLCAKKyAgICAyNDYsIDYxLCA4LCAzLCAyNDYsIDU5LCA4LCAzLCAyNDYsIDg2LCA4LCAzLCAyNDYsIDY5LCA4LCAzLCAyNDYsIDY0LCA4LCAKKyAgICAzLCAyNDYsIDY3LCA4LCAzLCAyMTYsIDY4LCA4LCAzLCAyMTYsIDYyLCA4LCAzLCAyMTYsIDExOCwgOCwgMywgMjE2LCA3NywgCisgICAgOCwgMywgMjE2LCAxMTAsIDgsIDMsIDIxNiwgMTEyLCA4LCAzLCAyMTYsIDExMSwgOCwgMywgMjE3LCA0NywgOCwgMywgMjE3LCAKKyAgICAzNCwgOCwgMywgMjE3LCAxMDYsIDgsIDMsIDIxNywgNTUsIDgsIDMsIDIxNSwgMTAzLCA4LCAzLCAyMTUsIDEwMiwgOCwgMywgCisgICAgMjE1LCAxMDUsIDgsIDMsIDIxNSwgMTA0LCA4LCAzLCAyMTYsIDYsIDgsIDMsIDIxNiwgMiwgOCwgMywgMTEyLCA4LCAzLCAKKyAgICAyMTYsIDE0LCA4LCAzLCAyMTYsIDIxNCwgOCwgMywgMjE3LCAyMywgOCwgMywgMjE2LCAyMzgsIDgsIDMsIDIxNSwgODgsIDgsIAorICAgIDMsIDIxNSwgODMsIDgsIDMsIDIxNSwgMTE5LCA4LCAzLCAyMTUsIDEwMSwgOCwgMywgMjE1LCA4OSwgOCwgMywgMjE1LCA5OSwgCisgICAgOCwgMywgMjQ4LCAxMTUsIDgsIDMsIDI0OCwgMTE0LCA4LCAzLCAyNDgsIDEyMCwgOCwgMywgMjQ4LCAxMTYsIDgsIDMsIAorICAgIDI0OCwgMTE3LCA4LCAzLCAyNDgsIDExOSwgOCwgMywgMjQ4LCAxMTgsIDgsIDMsIDI0OCwgMTM2LCA4LCAzLCAyNDgsIDEzNSwgCisgICAgOCwgMywgMjQ4LCAxNDMsIDgsIDMsIDI0OCwgMTM3LCA4LCAzLCAyNDgsIDEwNSwgOCwgMywgMjQ4LCAxMDcsIDgsIDMsIAorICAgIDI0OCwgMTA2LCA4LCAzLCAyNDgsIDExMCwgOCwgMywgMjQ4LCAxMDksIDgsIDMsIDI0OCwgMTEzLCA4LCAzLCAyNDgsIDExMSwgCisgICAgOCwgMywgMjQ4LCAxMjgsIDgsIDMsIDI0OCwgMTMxLCA4LCAzLCAyNDgsIDEyOSwgOCwgMywgMjQ4LCAxMDEsIDgsIDMsIAorICAgIDI0OCwgMTAwLCA4LCAzLCAyNDgsIDEwOCwgOCwgMywgMjQ4LCAxMDQsIDgsIDMsIDI0OCwgMTAyLCA4LCAzLCAyNDgsIDEwMywgCisgICAgOCwgMywgMjI5LCAxMzEsIDgsIDMsIDIyOSwgMTMwLCA4LCAzLCAyMjksIDEzOCwgOCwgMywgMjI5LCAxMzMsIDgsIDMsIAorICAgIDIyOSwgMTM0LCA4LCAzLCAyMjksIDEzNSwgOCwgMywgMjI5LCAxNDcsIDgsIDMsIDIyOSwgMTQ2LCA4LCAzLCAyMjksIDE1MywgCisgICAgOCwgMywgMjI5LCAxNDgsIDgsIDMsIDIyOSwgMTIzLCA4LCAzLCAyMjksIDEyMiwgOCwgMywgMjI5LCAxMjksIDgsIDMsIAorICAgIDIyOSwgMTI0LCA4LCAzLCAyMjksIDEzOSwgOCwgMywgMjI5LCAxNDUsIDgsIDMsIDIyOSwgMTQzLCA4LCAzLCAyMjksIDExNSwgCisgICAgOCwgMywgMjI5LCAxMTQsIDgsIDMsIDIyOSwgMTIwLCA4LCAzLCAyMjksIDExOCwgOCwgMywgMjI5LCAxMTYsIDgsIDMsIAorICAgIDIyOSwgMTE3LCA4LCAzLCAyNDEsIDg0LCA4LCAzLCAyNDEsIDgzLCA4LCAzLCAyNDEsIDkwLCA4LCAzLCAyNDEsIDg1LCA4LCAKKyAgICAzLCAyNDEsIDg3LCA4LCAzLCAyNDEsIDg2LCA4LCAzLCAyNDEsIDg5LCA4LCAzLCAyNDEsIDg4LCA4LCAzLCAyNDEsIDk1LCAKKyAgICA4LCAzLCAyNDEsIDk0LCA4LCAzLCAyNDEsIDk3LCA4LCAzLCAyNDEsIDk2LCA4LCAzLCAyNDEsIDc4LCA4LCAzLCAyNDEsIAorICAgIDc5LCA4LCAzLCAyNDEsIDgxLCA4LCAzLCAyNDEsIDgwLCA4LCAzLCAyNDEsIDgyLCA4LCAzLCAyNDEsIDkxLCA4LCAzLCAKKyAgICAyNDEsIDkzLCA4LCAzLCAyNDEsIDkyLCA4LCAzLCAyNDEsIDc3LCA4LCAzLCAyMjgsIDE5NCwgOCwgMywgMjI4LCAxOTIsIDgsIAorICAgIDMsIDIyOCwgMjM4LCA4LCAzLCAyMjgsIDE5NywgOCwgMywgMjI4LCAyMjAsIDgsIDMsIDIyOCwgMjM0LCA4LCAzLCAyMjgsIAorICAgIDIzMywgOCwgMywgMjI5LCAxODgsIDgsIDMsIDE5OCwgOCwgMywgMjI5LCAyMDIsIDgsIDMsIDIyNywgMTkwLCA4LCAzLCAKKyAgICAyMjcsIDE5MiwgOCwgMywgMjI3LCAxOTEsIDgsIDMsIDIyOCwgNTYsIDgsIDMsIDIyOCwgNDMsIDgsIDMsIDIyOCwgNzksIDgsIAorICAgIDMsIDIyOCwgNjUsIDgsIDMsIDIyOSwgODgsIDgsIDMsIDIyOSwgMTEyLCA4LCAzLCAyMjksIDk5LCA4LCAzLCAyMjcsIDE4NSwgCisgICAgOCwgMywgMjI3LCAxODEsIDgsIDMsIDIyNywgMjQyLCA4LCAzLCAyMjcsIDE4OSwgOCwgMywgMjI3LCAxODcsIDgsIDMsIAorICAgIDIyNywgMTg4LCA4LCAzLCAyNDEsIDE0OCwgOCwgMywgMjQxLCAxNDcsIDgsIDMsIDI0MSwgMTUzLCA4LCAzLCAyNDEsIDE0OSwgCisgICAgOCwgMywgMjQxLCAxNTAsIDgsIDMsIDI0MSwgMTUyLCA4LCAzLCAyNDEsIDE1MSwgOCwgMywgMjQxLCAxNTgsIDgsIDMsIAorICAgIDI0MSwgMTU3LCA4LCAzLCAyNDEsIDE2MCwgOCwgMywgMjQxLCAxNTksIDgsIDMsIDI0MSwgMTQwLCA4LCAzLCAyNDEsIDE0MiwgCisgICAgOCwgMywgMjQxLCAxNDEsIDgsIDMsIDI0MSwgMTQ0LCA4LCAzLCAyNDEsIDE0NiwgOCwgMywgMjQxLCAxNDUsIDgsIDMsIAorICAgIDI0MSwgMTU0LCA4LCAzLCAyNDEsIDE1NiwgOCwgMywgMjQxLCAxNTUsIDgsIDMsIDI0MSwgMTM2LCA4LCAzLCAyNDEsIDEzNSwgCisgICAgOCwgMywgMjQxLCAxNDMsIDgsIDMsIDI0MSwgMTM5LCA4LCAzLCAyNDEsIDEzNywgOCwgMywgMjQxLCAxMzgsIDgsIDMsIAorICAgIDI0MSwgMTMwLCA4LCAzLCAyNDEsIDEyOSwgOCwgMywgMjQxLCAxMzQsIDgsIDMsIDI0MSwgMTMzLCA4LCAzLCAyNDEsIDEzMSwgCisgICAgOCwgMywgMjQxLCAxMzIsIDgsIDMsIDIzMiwgMjAxLCA4LCAzLCAyMzIsIDE5NSwgOCwgMywgMjMyLCAyNDcsIDgsIDMsIAorICAgIDIzMiwgMjA4LCA4LCAzLCAyMzIsIDIzOSwgOCwgMywgMjMyLCAyMzgsIDgsIDMsIDIzMiwgMjQyLCA4LCAzLCAyMzIsIDI0MCwgCisgICAgOCwgMywgMjMzLCA4NSwgOCwgMywgMjMzLCA3NSwgOCwgMywgMjMzLCAxNDEsIDgsIDMsIDIzMywgOTQsIDgsIDMsIDIzMiwgCisgICAgODQsIDgsIDMsIDIzMiwgODMsIDgsIDMsIDIzMiwgODYsIDgsIDMsIDIzMiwgODUsIDgsIDMsIDIzMiwgMTIyLCA4LCAzLCAKKyAgICAyMzIsIDExMiwgOCwgMywgMjMyLCAxNjIsIDgsIDMsIDIzMiwgMTI2LCA4LCAzLCAyMzMsIDgsIDgsIDMsIDIzMywgNjQsIDgsIAorICAgIDMsIDIzMywgMjMsIDgsIDMsIDIzMiwgNzksIDgsIDMsIDIzMiwgNzcsIDgsIDMsIDIzMiwgMTAzLCA4LCAzLCAyMzIsIDgyLCAKKyAgICA4LCAzLCAyMzIsIDgwLCA4LCAzLCAyMzIsIDgxLCA4LCAzLCAyMzIsIDU5LCA4LCAzLCAyMzIsIDU4LCA4LCAzLCAyMzIsIAorICAgIDY3LCA4LCAzLCAyMzIsIDYyLCA4LCAzLCAyMzIsIDYwLCA4LCAzLCAyMzIsIDYxLCA4LCAzLCAyNDIsIDE5NiwgOCwgMywgCisgICAgMjQyLCAxOTUsIDgsIDMsIDI0MiwgMjIxLCA4LCAzLCAyNDIsIDIwNiwgOCwgMywgMjQyLCAyMTMsIDgsIDMsIDI0MiwgMjEyLCAKKyAgICA4LCAzLCAyNDIsIDIxNSwgOCwgMywgMjQyLCAyMTQsIDgsIDMsIDI0MywgOTYsIDgsIDMsIDI0MywgOTEsIDgsIDMsIDI0MywgCisgICAgMTQyLCA4LCAzLCAyNDMsIDEwNiwgOCwgMywgMjQyLCA5OCwgOCwgMywgMjQyLCA5NywgOCwgMywgMjQyLCAxMDAsIDgsIDMsIAorICAgIDI0MiwgOTksIDgsIDMsIDI0MiwgMTYxLCA4LCAzLCAyNDIsIDE1OSwgOCwgMywgMjQyLCAxODEsIDgsIDMsIDI0MiwgMTY5LCAKKyAgICA4LCAzLCAyNDMsIDQwLCA4LCAzLCAyNDMsIDM4LCA4LCAzLCAyNDMsIDY5LCA4LCAzLCAyNDMsIDUxLCA4LCAzLCAyNDIsIAorICAgIDg4LCA4LCAzLCAyNDIsIDg3LCA4LCAzLCAyNDIsIDEyMCwgOCwgMywgMjQyLCA5NiwgOCwgMywgMjQyLCA4OSwgOCwgMywgCisgICAgMjQyLCA5NSwgOCwgMywgMjM0LCA2NywgOCwgMywgMjM0LCA2NiwgOCwgMywgMjM0LCA5OCwgOCwgMywgMjM0LCA4MSwgOCwgCisgICAgMywgMjM0LCA5MSwgOCwgMywgMjM0LCA5NCwgOCwgMywgMjM0LCA5MiwgOCwgMywgMjM0LCAyMDgsIDgsIDMsIDIzNCwgMTk2LCAKKyAgICA4LCAzLCAxNzYsIDgsIDMsIDIzNCwgMjM0LCA4LCAzLCAyMzMsIDIwNiwgOCwgMywgMjMzLCAyMTEsIDgsIDMsIDIzMywgCisgICAgMjA4LCA4LCAzLCAyMzQsIDYsIDgsIDMsIDIzNCwgMiwgOCwgMywgMjM0LCAzNCwgOCwgMywgMjM0LCAxMywgOCwgMywgMjM0LCAKKyAgICAxNjIsIDgsIDMsIDIzNCwgMTQ2LCA4LCAzLCAyMzQsIDE4OCwgOCwgMywgMjM0LCAxNjUsIDgsIDMsIDIzMywgMTk1LCA4LCAKKyAgICAzLCAyMzMsIDE5MiwgOCwgMywgMjMzLCAyMjMsIDgsIDMsIDIzMywgMjA1LCA4LCAzLCAyMzMsIDE5OCwgOCwgMywgMjMzLCAKKyAgICAyMDIsIDgsIDMsIDI0MywgMjIsIDgsIDMsIDI0MywgMjEsIDgsIDMsIDI0MywgMjYsIDgsIDMsIDI0MywgMjMsIDgsIDMsIAorICAgIDI0MywgMjUsIDgsIDMsIDI0MywgMjQsIDgsIDMsIDI0MywgMzMsIDgsIDMsIDI0MywgMzIsIDgsIDMsIDI0MywgMzYsIDgsIAorICAgIDMsIDI0MywgMzQsIDgsIDMsIDI0MywgMTMsIDgsIDMsIDI0MywgMTIsIDgsIDMsIDI0MywgMTUsIDgsIDMsIDI0MywgMTQsIAorICAgIDgsIDMsIDI0MywgMTgsIDgsIDMsIDI0MywgMTcsIDgsIDMsIDI0MywgMjAsIDgsIDMsIDI0MywgMTksIDgsIDMsIDI0MywgCisgICAgMjgsIDgsIDMsIDI0MywgMjcsIDgsIDMsIDI0MywgMzEsIDgsIDMsIDI0MywgMjksIDgsIDMsIDI0MywgOCwgOCwgMywgMjQzLCAKKyAgICA3LCA4LCAzLCAyNDMsIDE2LCA4LCAzLCAyNDMsIDExLCA4LCAzLCAyNDMsIDksIDgsIDMsIDI0MywgMTAsIDgsIDMsIDIzMCwgCisgICAgMjU0LCA4LCAzLCAyMzAsIDI1NSwgOCwgMywgMjMxLCAxNywgOCwgMywgMjMxLCAxNiwgOCwgMywgMjMxLCAxOSwgOCwgMywgCisgICAgMjMxLCAxOCwgOCwgMywgMjMwLCAyNDUsIDgsIDMsIDIzMCwgMjQ3LCA4LCAzLCAyMzAsIDI0NiwgOCwgMywgMjMwLCAyNTAsIAorICAgIDgsIDMsIDIzMCwgMjQ5LCA4LCAzLCAyMzAsIDI1MiwgOCwgMywgMjMwLCAyNTEsIDgsIDMsIDIzMSwgMCwgOCwgMywgMjMxLCAKKyAgICAyLCA4LCAzLCAyMzEsIDEsIDgsIDMsIDIzMCwgMjQxLCA4LCAzLCAyMzAsIDI0MCwgOCwgMywgMjMwLCAyNDgsIDgsIDMsIAorICAgIDIzMCwgMjQ0LCA4LCAzLCAyMzAsIDI0MiwgOCwgMywgMjMwLCAyNDMsIDgsIDMsIDI0MCwgMTg3LCA4LCAzLCAyNDAsIDE4NiwgCisgICAgOCwgMywgMjQwLCAxOTMsIDgsIDMsIDI0MCwgMTg4LCA4LCAzLCAyNDAsIDE5MCwgOCwgMywgMjQwLCAxODksIDgsIDMsIAorICAgIDI0MCwgMTkyLCA4LCAzLCAyNDAsIDE5MSwgOCwgMywgMjQwLCAxOTgsIDgsIDMsIDI0MCwgMTk3LCA4LCAzLCAyNDAsIDIwMCwgCisgICAgOCwgMywgMjQwLCAxOTksIDgsIDMsIDI0MCwgMTc5LCA4LCAzLCAyNDAsIDE3OCwgOCwgMywgMjQwLCAxODEsIDgsIDMsIAorICAgIDI0MCwgMTgwLCA4LCAzLCAyNDAsIDE4MywgOCwgMywgMjQwLCAxODIsIDgsIDMsIDI0MCwgMTg1LCA4LCAzLCAyNDAsIDE4NCwgCisgICAgOCwgMywgMjQwLCAxOTQsIDgsIDMsIDI0MCwgMTk2LCA4LCAzLCAyNDAsIDE5NSwgOCwgMywgMjI5LCAyOSwgOCwgMywgMjI5LCAKKyAgICAzMSwgOCwgMywgMjI5LCAzMCwgOCwgMywgMjI5LCA3MiwgOCwgMywgMjI5LCA3MCwgOCwgMywgMjI5LCA4MiwgOCwgMywgCisgICAgMjI5LCA3NSwgOCwgMywgMjI4LCAyNDgsIDgsIDMsIDIyOCwgMjQ3LCA4LCAzLCAyMjgsIDI0OSwgOCwgMywgMjI5LCAxLCA4LCAKKyAgICAzLCAyMjgsIDI1NCwgOCwgMywgMjI5LCA5LCA4LCAzLCAyMjksIDMsIDgsIDMsIDIyOSwgNjMsIDgsIDMsIDIyOSwgNjksIDgsIAorICAgIDMsIDIyOSwgNjUsIDgsIDMsIDI0MSwgMTYzLCA4LCAzLCAyNDEsIDE3MywgOCwgMywgMjQxLCAxODIsIDgsIDMsIDI0MiwgMiwgCisgICAgOCwgMywgMjQxLCAyNTAsIDgsIDMsIDE2MiwgOCwgMywgMjQyLCAxMywgOCwgMywgMjQwLCAyMTMsIDgsIDMsIDI0MCwgMjEyLCAKKyAgICA4LCAzLCAyNDAsIDIxNSwgOCwgMywgMjQwLCAyMTQsIDgsIDMsIDI0MCwgMjQ5LCA4LCAzLCAyNDAsIDI0MCwgOCwgMywgCisgICAgMjQxLCA3NSwgOCwgMywgMjQxLCA1NCwgOCwgMywgMjQxLCAyMDEsIDgsIDMsIDI0MSwgMjQ1LCA4LCAzLCAyNDEsIDIxMywgCisgICAgOCwgMywgMjEyLCA0MywgOCwgMywgMjEyLCAyOCwgOCwgMywgMjEyLCA2NSwgOCwgMywgMjEyLCA1MSwgOCwgMywgMjExLCAKKyAgICAxODUsIDgsIDMsIDIxMSwgMTg3LCA4LCAzLCAyMTEsIDE4NiwgOCwgMywgMjExLCAyMDMsIDgsIDMsIDIxMSwgMjI3LCA4LCAKKyAgICAzLCAyMTEsIDIxMCwgOCwgMywgMjEyLCA1LCA4LCAzLCAyMTIsIDIyLCA4LCAzLCAyMTIsIDEwLCA4LCAzLCAyMTAsIDMwLCAKKyAgICA4LCAzLCAyMTAsIDI5LCA4LCAzLCAyMTAsIDQ0LCA4LCAzLCAyMTAsIDMyLCA4LCAzLCAyMTAsIDM3LCA4LCAzLCAyMTAsIAorICAgIDM5LCA4LCAzLCAyMTAsIDM4LCA4LCAzLCAyMTAsIDEwMiwgOCwgMywgMjEwLCA5OSwgOCwgMywgMjEwLCAxMTYsIDgsIDMsIAorICAgIDIxMCwgMTA1LCA4LCAzLCAyMTAsIDYsIDgsIDMsIDIxMCwgOCwgOCwgMywgMjEwLCA3LCA4LCAzLCAyMTAsIDE5LCA4LCAzLCAKKyAgICAyMTAsIDE4LCA4LCAzLCAyMTAsIDIzLCA4LCAzLCAyMTAsIDIwLCA4LCAzLCAyMTAsIDg0LCA4LCAzLCAyMTAsIDk0LCA4LCAKKyAgICAzLCAyMTAsIDg4LCA4LCAzLCAyMTAsIDIsIDgsIDMsIDIxMCwgMSwgOCwgMywgMjEwLCAxMywgOCwgMywgMjEwLCA1LCA4LCAKKyAgICAzLCAyMTAsIDMsIDgsIDMsIDIxMCwgNCwgOCwgMywgMjA5LCAyNDUsIDgsIDMsIDIwOSwgMjQ0LCA4LCAzLCAyMDksIDI1MCwgCisgICAgOCwgMywgMjA5LCAyNDgsIDgsIDMsIDIwOSwgMjQ2LCA4LCAzLCAyMDksIDI0NywgOCwgMywgMjUwLCAzNiwgOCwgMywgMjUwLCAKKyAgICAzMiwgOCwgMywgMjUwLCA1OSwgOCwgMywgMjUwLCA0NSwgOCwgMywgMjUwLCA1NiwgOCwgMywgMjUwLCA1MCwgOCwgMywgCisgICAgMjUwLCA1OCwgOCwgMywgMjUwLCA1NywgOCwgMywgMjUwLCAyMzIsIDgsIDMsIDI1MCwgMjI1LCA4LCAzLCAyNTEsIDQxLCA4LCAKKyAgICAzLCAyNTEsIDMsIDgsIDMsIDI0OSwgMTEyLCA4LCAzLCAyNDksIDExNCwgOCwgMywgMjQ5LCAxMTMsIDgsIDMsIDI0OSwgCisgICAgMTYxLCA4LCAzLCAyNDksIDE1MiwgOCwgMywgMjQ5LCAyNDYsIDgsIDMsIDI0OSwgMTc3LCA4LCAzLCAyNTAsIDE2OCwgOCwgCisgICAgMywgMjUwLCAxOTgsIDgsIDMsIDI1MCwgMTczLCA4LCAzLCAyNDksIDkyLCA4LCAzLCAyNDksIDkwLCA4LCAzLCAyNDksIAorICAgIDEyMCwgOCwgMywgMjQ5LCAxMTAsIDgsIDMsIDI0OSwgOTcsIDgsIDMsIDI0OSwgMTA5LCA4LCAzLCAyNDksIDcxLCA4LCAzLCAKKyAgICAyNDksIDcwLCA4LCAzLCAyNDksIDgxLCA4LCAzLCAyNDksIDc3LCA4LCAzLCAyNDksIDcyLCA4LCAzLCAyNDksIDc0LCA4LCAKKyAgICAzLCAyMDksIDIyOCwgOCwgMywgMjA5LCAyMjcsIDgsIDMsIDIwOSwgMjM0LCA4LCAzLCAyMDksIDIyOSwgOCwgMywgMjA5LCAKKyAgICAyMzEsIDgsIDMsIDIwOSwgMjMwLCA4LCAzLCAyMDksIDIzMywgOCwgMywgMjA5LCAyMzIsIDgsIDMsIDIwOSwgMjQwLCA4LCAKKyAgICAzLCAyMDksIDIzOSwgOCwgMywgMjA5LCAyNDMsIDgsIDMsIDIwOSwgMjQxLCA4LCAzLCAyMDksIDIyNCwgOCwgMywgMjA5LCAKKyAgICAyMjYsIDgsIDMsIDIwOSwgMjI1LCA4LCAzLCAyMDksIDIzNSwgOCwgMywgMjA5LCAyMzgsIDgsIDMsIDIwOSwgMjM2LCA4LCAKKyAgICAzLCAyMDksIDIxNywgOCwgMywgMjA5LCAyMjEsIDgsIDMsIDIwOSwgMjIwLCA4LCAzLCAyMDksIDIxOCwgOCwgMywgMjA5LCAKKyAgICAyMTksIDgsIDMsIDIwOSwgMjExLCA4LCAzLCAyMDksIDIxMCwgOCwgMywgMjA5LCAyMTYsIDgsIDMsIDIwOSwgMjE0LCA4LCAKKyAgICAzLCAyMDksIDIxMiwgOCwgMywgMjA5LCAyMTMsIDgsIDMsIDIyNywgMTA4LCA4LCAzLCAyMjcsIDEwNywgOCwgMywgMjI3LCAKKyAgICAxMTMsIDgsIDMsIDIyNywgMTA5LCA4LCAzLCAyMjcsIDExMCwgOCwgMywgMjI3LCAxMTIsIDgsIDMsIDIyNywgMTExLCA4LCAKKyAgICAzLCAyMjcsIDExOCwgOCwgMywgMjI3LCAxMTcsIDgsIDMsIDIyNywgMTIxLCA4LCAzLCAyMjcsIDEyMCwgOCwgMywgMjI3LCAKKyAgICAxMDEsIDgsIDMsIDIyNywgMTAyLCA4LCAzLCAyMjcsIDEwNSwgOCwgMywgMjI3LCAxMDYsIDgsIDMsIDIyNywgMTE0LCA4LCAKKyAgICAzLCAyMjcsIDExNiwgOCwgMywgMjI3LCA5NiwgOCwgMywgMjI3LCAxMDQsIDgsIDMsIDIyNywgMTAwLCA4LCAzLCAyMjcsIAorICAgIDk3LCA4LCAzLCAyMjcsIDk4LCA4LCAzLCAyMjcsIDkxLCA4LCAzLCAyMjcsIDkwLCA4LCAzLCAyMjcsIDk1LCA4LCAzLCAKKyAgICAyMjcsIDk0LCA4LCAzLCAyMjcsIDkyLCA4LCAzLCAyMjcsIDkzLCA4LCAzLCAyMTksIDEyOSwgOCwgMywgMTk1LCA4LCAzLCAKKyAgICAyMTksIDE5MywgOCwgMywgMjE5LCAxMzIsIDgsIDMsIDIxOSwgMTg1LCA4LCAzLCAyMTksIDE4OCwgOCwgMywgMjE5LCAxODYsIAorICAgIDgsIDMsIDIyMSwgMjI4LCA4LCAzLCAyMjEsIDIxNiwgOCwgMywgMjA2LCA4LCAzLCAyMjEsIDIzNiwgOCwgMywgMjE4LCAyOSwgCisgICAgOCwgMywgMjE4LCAzMSwgOCwgMywgMjE4LCAzMCwgOCwgMywgMjE5LCAzNiwgOCwgMywgMjE5LCAyNSwgOCwgMywgMjE5LCAKKyAgICA2MCwgOCwgMywgMjE5LCA0MCwgOCwgMywgMjIwLCAxMTYsIDgsIDMsIDIyMSwgMTgzLCA4LCAzLCAyMjAsIDE0MSwgOCwgMywgCisgICAgMjE4LCA2LCA4LCAzLCAyMTgsIDQsIDgsIDMsIDIxOCwgODQsIDgsIDMsIDIxOCwgMjgsIDgsIDMsIDIxOCwgMTAsIDgsIDMsIAorICAgIDIxOCwgMTgsIDgsIDMsIDIxNywgMTY3LCA4LCAzLCAyMTcsIDE2NiwgOCwgMywgMjE3LCAyMzMsIDgsIDMsIDIxNywgMTc0LCAKKyAgICA4LCAzLCAyMTcsIDE2OSwgOCwgMywgMjE3LCAxNzMsIDgsIDMsIDIxOCwgMTg4LCA4LCAzLCAyMTgsIDE4NywgOCwgMywgCisgICAgMjE4LCAxOTQsIDgsIDMsIDIxOCwgMTg5LCA4LCAzLCAyMTgsIDE5MSwgOCwgMywgMjE4LCAxOTMsIDgsIDMsIDIxOCwgMTkyLCAKKyAgICA4LCAzLCAyMTgsIDIwMiwgOCwgMywgMjE4LCAyMDAsIDgsIDMsIDIxOCwgMjI1LCA4LCAzLCAyMTgsIDIwMywgOCwgMywgCisgICAgMjE4LCAxODMsIDgsIDMsIDIxOCwgMTgyLCA4LCAzLCAyMTgsIDE4NiwgOCwgMywgMjE4LCAxODQsIDgsIDMsIDIxOCwgMTk2LCAKKyAgICA4LCAzLCAyMTgsIDE5OSwgOCwgMywgMjE4LCAxOTcsIDgsIDMsIDIxOCwgMTc5LCA4LCAzLCAyMTgsIDE3NywgOCwgMywgCisgICAgMjE4LCAxODEsIDgsIDMsIDIxOCwgMTgwLCA4LCAzLCAyMTgsIDE3MiwgOCwgMywgMjE4LCAxNzEsIDgsIDMsIDIxOCwgMTc2LCAKKyAgICA4LCAzLCAyMTgsIDE3NSwgOCwgMywgMjE4LCAxNzMsIDgsIDMsIDIxOCwgMTc0LCA4LCAzLCAyMTAsIDc3LCA4LCAzLCAyMTAsIAorICAgIDc2LCA4LCAzLCAyMTAsIDgyLCA4LCAzLCAyMTAsIDc5LCA4LCAzLCAyMTAsIDU5LCA4LCAzLCAyMTAsIDYxLCA4LCAzLCAKKyAgICAyMTAsIDYwLCA4LCAzLCAyMTAsIDY0LCA4LCAzLCAyMTAsIDYzLCA4LCAzLCAyMTAsIDY3LCA4LCAzLCAyMTAsIDY1LCA4LCAKKyAgICAzLCAyMTAsIDcxLCA4LCAzLCAyMTAsIDcwLCA4LCAzLCAyMTAsIDc0LCA4LCAzLCAyMTAsIDcyLCA4LCAzLCAyMTAsIDU1LCAKKyAgICA4LCAzLCAyMTAsIDU0LCA4LCAzLCAyMTAsIDYyLCA4LCAzLCAyMTAsIDU4LCA4LCAzLCAyMTAsIDU2LCA4LCAzLCAyMTAsIAorICAgIDU3LCA4LCAzLCAyMTAsIDQ3LCA4LCAzLCAyMTAsIDQ2LCA4LCAzLCAyMTAsIDUxLCA4LCAzLCAyMTAsIDUwLCA4LCAzLCAKKyAgICAyMTAsIDQ4LCA4LCAzLCAyMTAsIDQ5LCA4LCAzLCAyNTAsIDE0NCwgOCwgMywgMjUwLCAxNDEsIDgsIDMsIDI1MCwgMTY1LCAKKyAgICA4LCAzLCAyNTAsIDE1MiwgOCwgMywgMjUwLCA3MywgOCwgMywgMjUwLCA3MiwgOCwgMywgMjUwLCA3NSwgOCwgMywgMjUwLCAKKyAgICA3NCwgOCwgMywgMjUwLCA4NywgOCwgMywgMjUwLCA4NiwgOCwgMywgMjUwLCA5NCwgOCwgMywgMjUwLCA4OSwgOCwgMywgCisgICAgMjUwLCAxMjMsIDgsIDMsIDI1MCwgMTIxLCA4LCAzLCAyNTAsIDEzOSwgOCwgMywgMjUwLCAxMjksIDgsIDMsIDI1MCwgNjcsIAorICAgIDgsIDMsIDI1MCwgNzcsIDgsIDMsIDI1MCwgNzEsIDgsIDMsIDI1MCwgNjgsIDgsIDMsIDI1MCwgNzAsIDgsIDMsIDI1MCwgCisgICAgNjEsIDgsIDMsIDI1MCwgNjAsIDgsIDMsIDI1MCwgNjUsIDgsIDMsIDI1MCwgNjQsIDgsIDMsIDI1MCwgNjIsIDgsIDMsIAorICAgIDI1MCwgNjMsIDgsIDMsIDIyMiwgMTc3LCA4LCAzLCAyMjIsIDE4MSwgOCwgMywgMjIyLCAxNjAsIDgsIDMsIDIyMiwgMTYxLCAKKyAgICA4LCAzLCAyMjIsIDE2NCwgOCwgMywgMjIyLCAxNjMsIDgsIDMsIDIyMiwgMTY3LCA4LCAzLCAyMjIsIDE2NSwgOCwgMywgCisgICAgMjIyLCAxNzEsIDgsIDMsIDIyMiwgMTcwLCA4LCAzLCAyMjIsIDE3NiwgOCwgMywgMjIyLCAxNzIsIDgsIDMsIDIyMiwgMTU2LCAKKyAgICA4LCAzLCAyMjIsIDE1NCwgOCwgMywgMjIyLCAxNjIsIDgsIDMsIDIyMiwgMTU5LCA4LCAzLCAyMjIsIDE1NywgOCwgMywgCisgICAgMjIyLCAxNTgsIDgsIDMsIDIyMiwgMTQ5LCA4LCAzLCAyMjIsIDE0OCwgOCwgMywgMjIyLCAxNTMsIDgsIDMsIDIyMiwgMTUyLCAKKyAgICA4LCAzLCAyMjIsIDE1MCwgOCwgMywgMjIyLCAxNTEsIDgsIDMsIDIyOCwgMzksIDgsIDMsIDIyOCwgMzgsIDgsIDMsIDIyOCwgCisgICAgNDEsIDgsIDMsIDIyOCwgNDAsIDgsIDMsIDIyOCwgMzEsIDgsIDMsIDIyOCwgMzMsIDgsIDMsIDIyOCwgMzIsIDgsIDMsIAorICAgIDIyOCwgMzUsIDgsIDMsIDIyOCwgMzQsIDgsIDMsIDIyOCwgMzcsIDgsIDMsIDIyOCwgMzYsIDgsIDMsIDIyOCwgMjYsIDgsIAorICAgIDMsIDIyOCwgMjUsIDgsIDMsIDIyOCwgMzAsIDgsIDMsIDIyOCwgMjksIDgsIDMsIDIyOCwgMjcsIDgsIDMsIDIyOCwgMjgsIAorICAgIDgsIDMsIDIyOCwgMjAsIDgsIDMsIDIyOCwgMTksIDgsIDMsIDIyOCwgMjQsIDgsIDMsIDIyOCwgMjMsIDgsIDMsIDIyOCwgCisgICAgMjEsIDgsIDMsIDIyOCwgMjIsIDgsIDMsIDIyMCwgNzQsIDgsIDMsIDIyMCwgNjksIDgsIDMsIDIyMCwgMTA0LCA4LCAzLCAKKyAgICAyMjAsIDg1LCA4LCAzLCAyMTksIDIxNywgOCwgMywgMjE5LCAyMTksIDgsIDMsIDIxOSwgMjE4LCA4LCAzLCAyMTksIDIzOCwgCisgICAgOCwgMywgMjE5LCAyMzUsIDgsIDMsIDIyMCwgOSwgOCwgMywgMjIwLCAwLCA4LCAzLCAyMjAsIDQ0LCA4LCAzLCAyMjAsIDM3LCAKKyAgICA4LCAzLCAyMjAsIDY1LCA4LCAzLCAyMjAsIDUyLCA4LCAzLCAyMTksIDIxMywgOCwgMywgMjE5LCAyMTEsIDgsIDMsIDIxOSwgCisgICAgMjI3LCA4LCAzLCAyMTksIDIxNiwgOCwgMywgMjE5LCAyMTQsIDgsIDMsIDIxOSwgMjE1LCA4LCAzLCAyMTksIDE5NiwgOCwgCisgICAgMywgMjE5LCAxOTUsIDgsIDMsIDIxOSwgMjAyLCA4LCAzLCAyMTksIDE5OSwgOCwgMywgMjE5LCAxOTcsIDgsIDMsIDIxOSwgCisgICAgMTk4LCA4LCAzLCAyMjMsIDE0NCwgOCwgMywgMjIzLCAxMzgsIDgsIDMsIDIwNSwgOCwgMywgMjIzLCAxNTAsIDgsIDMsIAorICAgIDIyMiwgMTIyLCA4LCAzLCAyMjIsIDEyNCwgOCwgMywgMjIyLCAxMjMsIDgsIDMsIDIyMiwgMTkwLCA4LCAzLCAyMjIsIDE4MywgCisgICAgOCwgMywgMjIyLCAyMTMsIDgsIDMsIDIyMiwgMTk0LCA4LCAzLCAyMjMsIDQ2LCA4LCAzLCAyMjMsIDEzMSwgOCwgMywgMjIzLCAKKyAgICA4NCwgOCwgMywgMjIyLCAxMTUsIDgsIDMsIDIyMiwgMTEyLCA4LCAzLCAyMjIsIDE0MiwgOCwgMywgMjIyLCAxMjEsIDgsIDMsIAorICAgIDIyMiwgMTE3LCA4LCAzLCAyMjIsIDExOCwgOCwgMywgMjIyLCA5NywgOCwgMywgMjIyLCA5NiwgOCwgMywgMjIyLCAxMDIsIAorICAgIDgsIDMsIDIyMiwgMTAwLCA4LCAzLCAyMjIsIDk4LCA4LCAzLCAyMjIsIDk5LCA4LCAzLCAyMzUsIDEwNCwgOCwgMywgMjM1LCAKKyAgICAxMDMsIDgsIDMsIDIzNSwgMTE0LCA4LCAzLCAyMzUsIDEwNSwgOCwgMywgMjM1LCAxMTAsIDgsIDMsIDIzNSwgMTA5LCA4LCAKKyAgICAzLCAyMzUsIDExMiwgOCwgMywgMjM1LCAxMTEsIDgsIDMsIDIzNSwgNDcsIDgsIDMsIDIzNSwgNDYsIDgsIDMsIDIzNSwgNDksIAorICAgIDgsIDMsIDIzNSwgNDgsIDgsIDMsIDIzNSwgNjIsIDgsIDMsIDIzNSwgNjAsIDgsIDMsIDIzNSwgNzQsIDgsIDMsIDIzNSwgCisgICAgNjQsIDgsIDMsIDIzNSwgNDAsIDgsIDMsIDIzNSwgMzgsIDgsIDMsIDIzNSwgNTcsIDgsIDMsIDIzNSwgNDUsIDgsIDMsIAorICAgIDIzNSwgNDIsIDgsIDMsIDIzNSwgNDMsIDgsIDMsIDIzNSwgMzIsIDgsIDMsIDIzNSwgMzEsIDgsIDMsIDIzNSwgMzYsIDgsIAorICAgIDMsIDIzNSwgMzUsIDgsIDMsIDIzNSwgMzMsIDgsIDMsIDIzNSwgMzQsIDgsIDMsIDIyNCwgNDksIDgsIDMsIDIyNCwgNDcsIAorICAgIDgsIDMsIDIyNCwgNTYsIDgsIDMsIDIyNCwgNTAsIDgsIDMsIDIyNCwgNTMsIDgsIDMsIDIyNCwgNTIsIDgsIDMsIDIyNCwgCisgICAgNTUsIDgsIDMsIDIyNCwgNTQsIDgsIDMsIDIyNCwgMiwgOCwgMywgMjIzLCAyNTUsIDgsIDMsIDIyNCwgNCwgOCwgMywgMjI0LCAKKyAgICAzLCA4LCAzLCAyMjQsIDM2LCA4LCAzLCAyMjQsIDM1LCA4LCAzLCAyMjQsIDQ1LCA4LCAzLCAyMjQsIDM5LCA4LCAzLCAyMjMsIAorICAgIDI1MCwgOCwgMywgMjIzLCAyNDYsIDgsIDMsIDIyNCwgMzMsIDgsIDMsIDIyMywgMjU0LCA4LCAzLCAyMjMsIDI1MiwgOCwgMywgCisgICAgMjIzLCAyNTMsIDgsIDMsIDIyMywgMjMwLCA4LCAzLCAyMjMsIDIyOCwgOCwgMywgMjIzLCAyNDAsIDgsIDMsIDIyMywgMjMzLCAKKyAgICA4LCAzLCAyMjMsIDIzMSwgOCwgMywgMjIzLCAyMzIsIDgsIDMsIDIzNSwgOTMsIDgsIDMsIDIzNSwgOTIsIDgsIDMsIDIzNSwgCisgICAgOTksIDgsIDMsIDIzNSwgOTQsIDgsIDMsIDIzNSwgOTYsIDgsIDMsIDIzNSwgOTUsIDgsIDMsIDIzNSwgOTgsIDgsIDMsIAorICAgIDIzNSwgOTcsIDgsIDMsIDIzNSwgODQsIDgsIDMsIDIzNSwgODYsIDgsIDMsIDIzNSwgODUsIDgsIDMsIDIzNSwgODksIDgsIAorICAgIDMsIDIzNSwgODgsIDgsIDMsIDIzNSwgOTEsIDgsIDMsIDIzNSwgOTAsIDgsIDMsIDIzNSwgODAsIDgsIDMsIDIzNSwgNzksIAorICAgIDgsIDMsIDIzNSwgODcsIDgsIDMsIDIzNSwgODMsIDgsIDMsIDIzNSwgODEsIDgsIDMsIDIzNSwgODIsIDgsIDMsIDIzNSwgCisgICAgNzYsIDgsIDMsIDIzNSwgNzUsIDgsIDMsIDIzNSwgNzgsIDgsIDMsIDIzNSwgNzcsIDgsIDMsIDIyOCwgMTY3LCA4LCAzLCAKKyAgICAyMjgsIDE2NiwgOCwgMywgMjI4LCAxNzQsIDgsIDMsIDIyOCwgMTY4LCA4LCAzLCAyMjgsIDE3MCwgOCwgMywgMjI4LCAxNjksIAorICAgIDgsIDMsIDIyOCwgMTczLCA4LCAzLCAyMjgsIDE3MSwgOCwgMywgMjI4LCAxNTYsIDgsIDMsIDIyOCwgMTU3LCA4LCAzLCAKKyAgICAyMjgsIDE2MiwgOCwgMywgMjI4LCAxNjEsIDgsIDMsIDIyOCwgMTY1LCA4LCAzLCAyMjgsIDE2MywgOCwgMywgMjI4LCAxNTEsIAorICAgIDgsIDMsIDIyOCwgMTYwLCA4LCAzLCAyMjgsIDE1NSwgOCwgMywgMjI4LCAxNTIsIDgsIDMsIDIyOCwgMTUzLCA4LCAzLCAKKyAgICAyMjgsIDE0NiwgOCwgMywgMjI4LCAxNDUsIDgsIDMsIDIyOCwgMTUwLCA4LCAzLCAyMjgsIDE0OSwgOCwgMywgMjI4LCAxNDcsIAorICAgIDgsIDMsIDIyOCwgMTQ4LCA4LCAzLCAyMjcsIDE0MSwgOCwgMywgMjI3LCAxNDAsIDgsIDMsIDIyNywgMTUyLCA4LCAzLCAKKyAgICAyMjcsIDE0NSwgOCwgMywgMjI3LCAxNDksIDgsIDMsIDIyNywgMTQ4LCA4LCAzLCAyMjcsIDE1MSwgOCwgMywgMjI3LCAxNTAsIAorICAgIDgsIDMsIDIyNywgMTI4LCA4LCAzLCAyMjcsIDEzMCwgOCwgMywgMjI3LCAxMjksIDgsIDMsIDIyNywgMTM0LCA4LCAzLCAKKyAgICAyMjcsIDEzMywgOCwgMywgMjI3LCAxMzgsIDgsIDMsIDIyNywgMTM1LCA4LCAzLCAyMjcsIDEyNiwgOCwgMywgMjI3LCAxMjQsIAorICAgIDgsIDMsIDIyNywgMTMyLCA4LCAzLCAyMjcsIDEyNywgOCwgMywgMjExLCAxNTAsIDgsIDMsIDIxMSwgMTQ5LCA4LCAzLCAKKyAgICAyMTEsIDE1NywgOCwgMywgMjExLCAxNTIsIDgsIDMsIDIxMSwgMTU0LCA4LCAzLCAyMTEsIDE1MywgOCwgMywgMjExLCAxNTYsIAorICAgIDgsIDMsIDIxMSwgMTU1LCA4LCAzLCAyMTEsIDEzOSwgOCwgMywgMjExLCAxNDAsIDgsIDMsIDIxMSwgMTQ0LCA4LCAzLCAKKyAgICAyMTEsIDE0MywgOCwgMywgMjExLCAxNDgsIDgsIDMsIDIxMSwgMTQ2LCA4LCAzLCAyMTEsIDEyMSwgOCwgMywgMjExLCAxMTksIAorICAgIDgsIDMsIDIxMSwgMTMxLCA4LCAzLCAyMTEsIDEyNCwgOCwgMywgMjExLCAxMjIsIDgsIDMsIDIxMSwgMTIzLCA4LCAzLCAKKyAgICAyMTAsIDI1MCwgOCwgMywgMjEwLCAyNDgsIDgsIDMsIDIxMSwgOCwgOCwgMywgMjEwLCAyNTEsIDgsIDMsIDIxMSwgMiwgOCwgCisgICAgMywgMjExLCAxLCA4LCAzLCAyMTEsIDUsIDgsIDMsIDIxMSwgMywgOCwgMywgMjEwLCAxOTEsIDgsIDMsIDIxMCwgMTkwLCA4LCAKKyAgICAzLCAyMTAsIDE5NCwgOCwgMywgMjEwLCAxOTIsIDgsIDMsIDIxMCwgMjI0LCA4LCAzLCAyMTAsIDIyMSwgOCwgMywgMjEwLCAKKyAgICAyNDQsIDgsIDMsIDIxMCwgMjI4LCA4LCAzLCAyMTAsIDE4MiwgOCwgMywgMjEwLCAxNzgsIDgsIDMsIDIxMCwgMjEyLCA4LCAKKyAgICAzLCAyMTAsIDE4OSwgOCwgMywgMjEwLCAxODUsIDgsIDMsIDIxMCwgMTg2LCA4LCAzLCAyMTAsIDE2MiwgOCwgMywgMjEwLCAKKyAgICAxNjEsIDgsIDMsIDIxMCwgMTY5LCA4LCAzLCAyMTAsIDE2NSwgOCwgMywgMjEwLCAxNjMsIDgsIDMsIDIxMCwgMTY0LCA4LCAKKyAgICAzNCwgMjI0LCAzNiwgOCwgMzQsIDIzMiwgMjQ3LCA4LCAzNCwgMjM0LCA2NywgOCwgMzQsIDIyNywgMTQ1LCA4LCAzNCwgCisgICAgMjQ5LCA3NywgOCwgMzQsIDIxOCwgMTk0LCA4LCAzNCwgMjQzLCAxOSwgOCwgMzQsIDI0MywgNTEsIDgsIDM0LCAyMzAsIAorICAgIDIzNSwgOCwgMzQsIDI0MCwgMTg3LCA4LCAzNCwgMjMyLCA2MSwgOCwgMzQsIDI1MiwgOTEsIDgsIDM0LCAyMzAsIDEzMSwgOCwgCisgICAgMzQsIDIxMCwgMjQ0LCA4LCAzNCwgMjI0LCAxMjQsIDgsIDM0LCAyNDAsIDE4MSwgOCwgMzQsIDIxNywgNDcsIDgsIDM0LCAKKyAgICAyNDMsIDE0MiwgOCwgMzQsIDIxMCwgNSwgOCwgMzQsIDI0OSwgNzEsIDgsIDM0LCAyNDgsIDEwMywgOCwgMzQsIDI1MSwgCisgICAgMTA2LCA4LCAzNCwgMjQzLCAxNSwgOCwgMzQsIDIyNywgMTM1LCA4LCAzNCwgMjE1LCAxMTksIDgsIDM0LCAyMjYsIDE3OSwgCisgICAgOCwgMzQsIDIzNSwgODAsIDgsIDM0LCAyMTAsIDE5LCA4LCAzNCwgMjI0LCAxMDMsIDgsIDM0LCAyNDEsIDExNSwgOCwgMzQsIAorICAgIDIxMCwgMjUwLCA4LCAzNCwgMjEyLCAxMTIsIDgsIDM0LCAyMTksIDIwMiwgOCwgMzQsIDIxMywgMjQ0LCA4LCAzNCwgMjEwLCAKKyAgICAxMTYsIDgsIDM0LCAyMzUsIDc0LCA4LCAzNCwgMjI3LCAxMDAsIDgsIDM0LCAyMzUsIDc4LCA4LCAzNCwgMjQyLCAxNjEsIDgsIAorICAgIDM0LCAyMzUsIDk4LCA4LCAzNCwgMjExLCAyMjcsIDgsIDM0LCAyNDYsIDg2LCA4LCAzNCwgMjE5LCAyMTUsIDgsIDM0LCAKKyAgICAyMzIsIDI0MiwgOCwgMzQsIDI0OSwgODEsIDgsIDM0LCAyNDksIDExMywgOCwgMzQsIDI1MCwgNDUsIDgsIDM0LCAyNDAsIAorICAgIDE4NCwgOCwgMzQsIDIyMCwgNzQsIDgsIDM0LCAyMTAsIDQsIDgsIDM0LCAyMjAsIDAsIDgsIDM0LCAyNTAsIDEzOSwgOCwgCisgICAgMzQsIDIwOSwgMjMxLCA4LCAzNCwgMjI5LCAxNzgsIDgsIDM0LCAyMzQsIDE4OCwgMjMyLCAyMDIsIDEsIDI1MiwgMTk5LCAKKyAgICAyMzIsIDIwMiwgMSwgMTkxLCAyMzIsIDIwMiwgMSwgMjI1LCAxNTAsIDIzMiwgMjAyLCAxLCAyNDgsIDIyOSwgMjMyLCAyMDIsIAorICAgIDEsIDIxNywgMTA2LCAyMzIsIDIwMiwgMSwgMjE2LCAyMDksIDIzMiwgMjAyLCAxLCAyNDMsIDE0MiwgMjMyLCAyMDIsIDEsIAorICAgIDE3NiwgMjMyLCAyMDIsIDEsIDIzNCwgMTM4LCAyMzIsIDIwMiwgMSwgMjM1LCAxNDcsIDIzMiwgMjAyLCAxLCAyNTEsIDQxLCAKKyAgICAyMzIsIDIwMiwgMSwgMjUwLCAxNjUsIDIzMiwgMjAyLCAxLCAyNDYsIDQ2LCAyMzIsIDIwMiwgMSwgMjE1LCAxODQsIDIzMiwgCisgICAgMjAyLCAxLCAyMTUsIDE3NiwgMjMyLCAyMDIsIDEsIDE4NiwgMjMyLCAyMDIsIDEsIDE5OCwgMjMyLCAyMDIsIDEsIDIzMywgCisgICAgMTQxLCAyMzIsIDIwMiwgMSwgMjA2LCAyMzIsIDIwMiwgMSwgMjEwLCA4MiwgMjMyLCAyMDIsIDEsIDIxMCwgMTE2LCAyMzIsIAorICAgIDIwMiwgMSwgMjI5LCA4MiwgMjMyLCAyMDIsIDEsIDE2MiwgMjMyLCAyMDIsIDEsIDIxMSwgMTY1LCAyMzIsIDIwMiwgMSwgCisgICAgMjQxLCAxOTYsIDIzMiwgMjAyLCAxLCAyNDQsIDIwNCwgMjMyLCAyMDIsIDEsIDIxMiwgNjUsIDIzMiwgMjAyLCAxLCAyMjAsIAorICAgIDEwNCwgMjMyLCAyMDIsIDEsIDE5MiwgMjMyLCAyMDIsIDEsIDI0MywgMCwgMjMyLCAyMDIsIDEsIDYxLCAyMzIsIDIwMiwgMSwgCisgICAgMjU0LCAyNTIsIDIzMiwgMjAyLCAxLCA3NiwgMjMyLCAyMDIsIDEsIDI0NSwgNjMsIDIzMiwgMjAyLCAxLCA3NCwgMjMyLCAKKyAgICAyMDIsIDEsIDc4LCAyMzIsIDIwMiwgMSwgNjksIDIzMiwgMjAyLCAxLCAyMTQsIDIxNCwgMjMyLCAyMDIsIDEsIDIxNCwgCisgICAgMjA4LCAyMzIsIDIwMiwgMSwgMjI2LCAyMzgsIDIzMiwgMjAyLCAxLCAxMzgsIDIzMCwgMzcsIDIxNiwgMTE4LCAyMzIsIAorICAgIDIwMiwgMSwgMTM4LCAyMjksIDIzNCwgMjI1LCAxOSwgMjMyLCAyMDIsIDEsIDEzOCwgMjMwLCAzNywgMjQ5LCA4MCwgMjMyLCAKKyAgICAyMDIsIDEsIDEzOCwgMjMwLCAzNywgMjUxLCAyMTMsIDIzMiwgMjAyLCAxLCAxMzgsIDIzMCwgMzcsIDE5OCwgMjMyLCAyMDIsIAorICAgIDEsIDEzOCwgMjMwLCAzNywgMjM1LCAxMjEsIDIzMiwgMjAyLCAyMjQsIDE0NCwgMjQ5LCAyMjcsIDIzMiwgMjAyLCAyMjQsIAorICAgIDE0NCwgMjQzLCAyMzYsIDIxOCwgMTMxLCA0MSwgMywgMjQ1LCAyMTcsIDQxLCAzLCAyNDUsIDIxMywgNDEsIDMsIDI0MSwgCisgICAgMjI3LCA0MSwgMywgMjEyLCAxNywgNDEsIDMsIDIxMiwgMTYsIDQxLCAzLCAyMjUsIDIxNCwgNDEsIDMsIDI1MiwgMjEsIDQxLCAKKyAgICAzLCAyNTIsIDc0LCA0MSwgMywgMjMxLCAxMjEsIDQxLCAzLCAyMzMsIDI1MywgNDEsIDMsIDIzMSwgMTEsIDQxLCAzLCAyNDMsIAorICAgIDgyLCA0MSwgMywgMjQ0LCAxNTUsIDQxLCAzLCAyMTMsIDI1MCwgNDEsIDMsIDIxNywgMTIsIDQxLCAzLCAyMTYsIDE5NSwgCisgICAgNDEsIDMsIDI0OCwgMjQsIDQxLCAzLCAyNDgsIDIxLCA0MSwgMywgMjMzLCA1NiwgNDEsIDMsIDIyMywgMTExLCA0MSwgMywgCisgICAgMjQ4LCA4NSwgNDEsIDMsIDIyOSwgMTQ0LCA0MSwgMywgMjIxLCAxNzIsIDQxLCAzLCAyMjAsIDYzLCA0MSwgMywgMjEwLCAKKyAgICA5MiwgNDEsIDMsIDIxMCwgNzMsIDQxLCAzLCAyNTAsIDE5MCwgNDEsIDMsIDIzNSwgMTMwLCA0MSwgMywgMjI4LCAxODEsIAorICAgIDQxLCAzLCAyMTEsIDQ0LCA0MSwgMywgMjM0LCAxODcsIDQxLCAzLCAyMjksIDU2LCA0MSwgMywgMjQzLCA2MiwgNDEsIDMsIAorICAgIDIzMSwgODUsIDQxLCAzLCAyMjksIDEwOCwgNDEsIDMsIDIyNywgMTU5LCA0MSwgMywgNzQsIDQxLCAzLCAyMzYsIDYsIDQxLCAKKyAgICAzLCAyNDEsIDE4NywgNDEsIDMsIDI0MSwgMTY3LCA0MSwgMywgMjExLCAyNTAsIDQxLCAzLCAyMTEsIDI0MSwgNDEsIDMsIAorICAgIDIyNSwgMTExLCA0MSwgMywgMjUyLCAxOSwgNDEsIDMsIDI1MiwgMTQsIDQxLCAzLCAyMzEsIDExNCwgNDEsIDMsIDIzMywgCisgICAgMjUwLCA0MSwgMywgMjMxLCA4LCA0MSwgMywgMjQzLCA3OCwgNDEsIDMsIDI0NCwgMTI5LCA0MSwgMywgMjEzLCAxNzYsIDQxLCAKKyAgICAzLCAyMTYsIDExOCwgNDEsIDMsIDIxNiwgMTc2LCA0MSwgMywgMjQ4LCAxNiwgNDEsIDMsIDI0OCwgMjAsIDQxLCAzLCAyMzIsIAorICAgIDI0NywgNDEsIDMsIDIyMywgMzgsIDQxLCAzLCAyNDgsIDExLCA0MSwgMywgMjI5LCAxMzgsIDQxLCAzLCAyMTksIDE5MywgCisgICAgNDEsIDMsIDIyMCwgMzQsIDQxLCAzLCAyMTAsIDQ0LCA0MSwgMywgMjEwLCA2OSwgNDEsIDMsIDI1MCwgNTksIDQxLCAzLCAKKyAgICAyMzUsIDExNCwgNDEsIDMsIDIyOCwgMTc0LCA0MSwgMywgMjExLCA4LCA0MSwgMywgMjM0LCA5OCwgNDEsIDMsIDIyOSwgNDgsIAorICAgIDQxLCAzLCAyNDIsIDIyMSwgNDEsIDMsIDIzMCwgMjM1LCA0MSwgMywgMjI4LCAyMzgsIDQxLCAzLCAyMjcsIDE1MiwgNDEsIAorICAgIDMsIDYxLCA0MSwgMywgMjU0LCAxMzEsIDQxLCAzLCAyMjksIDc3LCA0MSwgMywgMTYyLCA0MSwgMywgMjQyLCAyNSwgNDEsIAorICAgIDMsIDIxMiwgNjUsIDQxLCAzLCAyMTIsIDU1LCA0MSwgMywgMTkxLCA0MSwgMywgMjUyLCAyNiwgNDEsIDMsIDI1MiwgMTk5LCAKKyAgICA0MSwgMywgMjMxLCAxMjksIDQxLCAzLCAyMzQsIDEsIDQxLCAzLCAyMzQsIDAsIDQxLCAzLCAyMzEsIDE1LCA0MSwgMywgCisgICAgMjQzLCA4NiwgNDEsIDMsIDI0NCwgMjA0LCA0MSwgMywgMjE0LCAyNywgNDEsIDMsIDIxNywgMTA2LCA0MSwgMywgMjE2LCAKKyAgICAyMDksIDQxLCAzLCAyNDgsIDMzLCA0MSwgMywgMjQ4LCAyMywgNDEsIDMsIDIzMywgMTQxLCA0MSwgMywgMjA1LCA0MSwgMywgCisgICAgMjQ4LCAyMjksIDQxLCAzLCAyMjksIDE1MywgNDEsIDMsIDIwNiwgNDEsIDMsIDIyMCwgMTA0LCA0MSwgMywgMjEwLCAxMTYsIAorICAgIDQxLCAzLCAyMTAsIDgyLCA0MSwgMywgMjUxLCA0MSwgNDEsIDMsIDIzNSwgMTQ3LCA0MSwgMywgMjI4LCAxOTAsIDQxLCAzLCAKKyAgICAxOTIsIDQxLCAzLCAxNzYsIDQxLCAzLCAyMzQsIDI0MCwgNDEsIDMsIDIyOSwgNjEsIDQxLCAzLCAyNDMsIDE0MiwgNDEsIDMsIAorICAgIDE4NiwgNDEsIDMsIDE5OCwgNDEsIDMsIDIyNywgMTY5LCA0MSwgMywgMjI2LCAxODcsIDQxLCAzLCAyMjYsIDE4MywgNDEsIAorICAgIDMsIDI0MSwgNjAsIDQxLCAzLCAyMTEsIDIxNSwgNDEsIDMsIDIxMSwgMjExLCA0MSwgMywgMjI0LCAyNTIsIDQxLCAzLCAKKyAgICAyNTIsIDE3LCA0MSwgMywgMjUxLCAyMDEsIDQxLCAzLCAyMzEsIDEwOSwgNDEsIDMsIDIzMywgMjQ4LCA0MSwgMywgMjMxLCAKKyAgICA0LCA0MSwgMywgMjQzLCA3NCwgNDEsIDMsIDI0NCwgNDIsIDQxLCAzLCAyMTMsIDEyNywgNDEsIDMsIDIxNiwgMTgsIDQxLCAKKyAgICAzLCAyMTYsIDE1NCwgNDEsIDMsIDI0OCwgMTQsIDQxLCAzLCAyNDgsIDE4LCA0MSwgMywgMjMyLCAxMzMsIDQxLCAzLCAyMjIsIAorICAgIDE5OSwgNDEsIDMsIDI0NywgMTMzLCA0MSwgMywgMjI5LCAxMjUsIDQxLCAzLCAyMTksIDQyLCA0MSwgMywgMjIwLCAzLCA0MSwgCisgICAgMywgMjEwLCAyMSwgNDEsIDMsIDIxMCwgNjYsIDQxLCAzLCAyNDksIDE4MiwgNDEsIDMsIDIzNSwgNjUsIDQxLCAzLCAyMjgsIAorICAgIDE2NCwgNDEsIDMsIDIxMCwgMjI5LCA0MSwgMywgMjM0LCAxNiwgNDEsIDMsIDIyOSwgNDYsIDQxLCAzLCAyNDIsIDE3MSwgCisgICAgNDEsIDMsIDIzMCwgMTM3LCA0MSwgMywgMjI4LCA2OSwgNDEsIDMsIDIyNywgMTM2LCA0MSwgMywgNjksIDQxLCAzLCAyMTQsIAorICAgIDE5MCwgNDEsIDMsIDI0MCwgMjI5LCA0MSwgMywgMjQwLCAyMTksIDQxLCAzLCAyMTEsIDE5NSwgNDEsIDMsIDIxMSwgMTg5LCAKKyAgICA0MSwgMywgMjI0LCAxNTMsIDQxLCAzLCAyNTIsIDE2LCA0MSwgMywgMjUxLCAxMzMsIDQxLCAzLCAyMzEsIDEwOCwgNDEsIDMsIAorICAgIDIzMywgMjQ2LCA0MSwgMywgMjMxLCAzLCA0MSwgMywgMjQzLCA3MywgNDEsIDMsIDI0MywgMjQxLCA0MSwgMywgMjEyLCAKKyAgICAxMTYsIDQxLCAzLCAyMTUsIDExOSwgNDEsIDMsIDIxNiwgMTM3LCA0MSwgMywgMjQ4LCAxMiwgNDEsIDMsIDI0OCwgMTcsIAorICAgIDQxLCAzLCAyMzIsIDEwMywgNDEsIDMsIDIyMiwgMTQyLCA0MSwgMywgMjQ2LCA4NiwgNDEsIDMsIDIyOSwgMTIwLCA0MSwgMywgCisgICAgMjE4LCA4NCwgNDEsIDMsIDIxOSwgMjI3LCA0MSwgMywgMjEwLCAxMywgNDEsIDMsIDIxMCwgNjIsIDQxLCAzLCAyNDksIAorICAgIDEyMCwgNDEsIDMsIDIzNSwgNTcsIDQxLCAzLCAyMjgsIDE2MCwgNDEsIDMsIDIxMCwgMjEyLCA0MSwgMywgMjMzLCAyMjMsIAorICAgIDQxLCAzLCAyMjksIDQ1LCA0MSwgMywgMjQyLCAxMjAsIDQxLCAzLCAyMzAsIDEwNywgNDEsIDMsIDIyNywgMjQyLCA0MSwgMywgCisgICAgMjI3LCAxMzIsIDQxLCAzLCA3OCwgNDEsIDMsIDIyNiwgMjAwLCA0MSwgMywgMjI5LCA1LCA0MSwgMywgMjQxLCA3NSwgNDEsIAorICAgIDMsIDI0MSwgNjMsIDQxLCAzLCAyMTEsIDIyNywgNDEsIDMsIDIxMSwgMjE2LCA0MSwgMywgMjI1LCAxOSwgNDEsIDMsIDI1MiwgCisgICAgMTgsIDQxLCAzLCAyNTEsIDIxMywgNDEsIDMsIDIzMSwgMTEwLCA0MSwgMywgMjMzLCAyNDksIDQxLCAzLCAyMzEsIDYsIDQxLCAKKyAgICAzLCAyNDMsIDc2LCA0MSwgMywgMjQzLCA3NSwgNDEsIDMsIDI0NCwgNTEsIDQxLCAzLCAyMTMsIDEzOCwgNDEsIDMsIDExMiwgCisgICAgNDEsIDMsIDIxNiwgMTU3LCA0MSwgMywgMjQ4LCAxNSwgNDEsIDMsIDI0OCwgMTksIDQxLCAzLCAyMzIsIDE2MiwgNDEsIDMsIAorICAgIDIyMiwgMjEzLCA0MSwgMywgMjQ3LCAxNTMsIDQxLCAzLCAyMjksIDEyOSwgNDEsIDMsIDIxOSwgNjAsIDQxLCAzLCAyMjAsIAorICAgIDksIDQxLCAzLCAyMTAsIDIzLCA0MSwgMywgMjEwLCA2NywgNDEsIDMsIDI0OSwgMjQ2LCA0MSwgMywgMjM1LCA3NCwgNDEsIAorICAgIDMsIDIyOCwgMTY1LCA0MSwgMywgMjEwLCAyNDQsIDQxLCAzLCAyMzQsIDM0LCA0MSwgMywgMjI5LCA0NywgNDEsIDMsIDI0MiwgCisgICAgMTgxLCA0MSwgMywgMjMwLCAxNjYsIDQxLCAzLCAyMjgsIDc5LCA0MSwgMywgMjI3LCAxMzgsIDQxLCAzLCA3NiwgNDEsIDMsIAorICAgIDI0NSwgMTU4LCA0MSwgMywgMjI5LCA2NiwgNDEsIDMsIDI0MSwgMjQ1LCA0MSwgMywgMjQxLCAyMTYsIDQxLCAzLCAyMTIsIAorICAgIDIyLCA0MSwgMywgMjEyLCAxMiwgNDEsIDMsIDIyNSwgMjI0LCA0MSwgMywgMjUyLCAyMiwgNDEsIDMsIDI1MiwgODMsIDQxLCAKKyAgICAzLCAyMzEsIDEyMiwgNDEsIDMsIDIzMywgMjU0LCA0MSwgMywgMjMzLCAyNTIsIDQxLCAzLCAyMzEsIDEyLCA0MSwgMywgCisgICAgMjQzLCA4MywgNDEsIDMsIDI0MywgODEsIDQxLCAzLCAyNDQsIDE2MiwgNDEsIDMsIDIxMywgMjU1LCA0MSwgMywgMjE3LCAKKyAgICAyMywgNDEsIDMsIDIxNiwgMTk2LCA0MSwgMywgMjQ4LCAyNSwgNDEsIDMsIDI0OCwgMjIsIDQxLCAzLCAyMzMsIDY0LCA0MSwgCisgICAgMywgMjIzLCAxMzEsIDQxLCAzLCAyNDgsIDk4LCA0MSwgMywgMjI5LCAxNDUsIDQxLCAzLCAyMjEsIDE4MywgNDEsIDMsIAorICAgIDIyMCwgNjUsIDQxLCAzLCAyMTAsIDk0LCA0MSwgMywgMjEwLCA3NCwgNDEsIDMsIDI1MCwgMTk4LCA0MSwgMywgMjM1LCAKKyAgICAxMzIsIDQxLCAzLCAyMjgsIDE4MywgNDEsIDMsIDIxMSwgNDcsIDQxLCAzLCAyMzQsIDE4OCwgNDEsIDMsIDIyOSwgNTcsIAorICAgIDQxLCAzLCAyMjksIDUzLCA0MSwgMywgMjQzLCA2OSwgNDEsIDMsIDI0MywgNTgsIDQxLCAzLCAyMzEsIDk2LCA0MSwgMywgCisgICAgMjI5LCAxMTIsIDQxLCAzLCAyMjcsIDE2MCwgNDEsIDMsIDIyOSwgODQsIDQxLCAzLCAyMzMsIDI4LCA0MSwgMjQ5LCAyMjcsIAorICAgIDQxLCAyNDMsIDIzNiwgMjE4LCAxMzEsIDQxLCAyMjQsIDE2LCA3OSwgNDEsIDMsIDIyOSwgMTI4LCAyNDQsIDIwNCwgNDEsIAorICAgIDMsIDIyOSwgMTI4LCAxNzYsIDQxLCAzLCAyMjksIDEyOCwgMjE5LCA0MiwgNDEsIDE2LCAyNDQsIDE1MiwgNDEsIDE2LCAKKyAgICAyMzQsIDE4NiwgNDEsIDE2LCAyMTYsIDgyLCA0MSwgMTYsIDIyOCwgMjEzLCA0MSwgMTYsIDI1MiwgMTU1LCA0MSwgMTYsIAorICAgIDI0NCwgMjAzLCA0MSwgMTYsIDIxNywgMTAyLCA0MSwgMTYsIDI0OCwgMTg0LCA0MSwgMTYsIDI0NywgMTMyLCA0MSwgMTYsIAorICAgIDIzMywgMjEyLCA0MSwgMTYsIDIxNiwgMjIsIDQxLCAxNiwgMjQ3LCAxNTIsIDQxLCAxNiwgMjM1LCA2NiwgNDEsIDIxLCAKKyAgICAyMTAsIDg2LCA0MSwgMjEsIDExMSwgNDEsIDIxLCAxMDUsIDQxLCAyMSwgMTU4LCA0MSwgMjEsIDE2MSwgNDEsIDIxLCAxOTAsIAorICAgIDQxLCAyMSwgMTk1LCA0MSwgMjEsIDE5OSwgNDEsIDIxLCAxOTYsIDQxLCAyMSwgMjAxLCA0MSwgMywgMjI5LCAxMjgsIDE4NiwgCisgICAgNDEsIDMsIDIyOSwgMTI4LCAyNDcsIDE1MywgMzMsIDYsIDEsIDIxMCwgOTAsIDMzLCA0LCAxLCAyMTAsIDkwLCAzMywgNiwgCisgICAgMSwgMjQ2LCA0MiwgMzMsIDQsIDEsIDI0NiwgNDIsIDMzLCA2LCAxLCAyMjMsIDUyLCAyNDYsIDQ0LCAzMywgNCwgMSwgMjIzLCAKKyAgICA1MiwgMjQ2LCA0NCwgMzMsIDYsIDEsIDIzNSwgMTkyLCAzMywgNCwgMSwgMjM1LCAxOTIsIDMzLCA2LCAxLCAyNDcsIDE2OSwgCisgICAgMzMsIDQsIDEsIDI0NywgMTY5LCAzMywgNiwgMSwgMjMwLCAxNDUsIDIxNCwgMjA1LCAzMywgNCwgMSwgMjMwLCAxNDUsIAorICAgIDIxNCwgMjA1LCAzMywgNiwgMSwgMjUxLCAxNDQsIDIyNiwgMjA1LCAzMywgNCwgMSwgMjUxLCAxNDQsIDIyNiwgMjA1LCAzMywgCisgICAgNiwgMSwgMjI5LCA5MiwgMjExLCAzMSwgMzMsIDQsIDEsIDIyOSwgOTIsIDIxMSwgMzEsIDMzLCA2LCAxLCAyMTEsIDI4LCAyLCAKKyAgICAyNTIsIDE5MywgMjExLCAzMSwgMzMsIDQsIDEsIDIxMSwgMjgsIDIsIDI1MiwgMTkzLCAyMTEsIDMxLCAzMywgNiwgMSwgCisgICAgMjM1LCAxOTAsIDIxMSwgNTksIDMzLCA0LCAxLCAyMzUsIDE5MCwgMjExLCA1OSwgMzMsIDYsIDEsIDIyMywgNTIsIDIxMCwgCisgICAgMjEyLCAzMywgNCwgMSwgMjIzLCA1MiwgMjEwLCAyMTIsIDMzLCA2LCAxLCAyMzUsIDE5MCwgNjEsIDMzLCA0LCAxLCAyMzUsIAorICAgIDE5MCwgNjEsIDMzLCA2LCAxLCAyNTAsIDgsIDIzMiwgMTk4LCAyMTAsIDE4MywgMzMsIDQsIDEsIDI1MCwgOCwgMjMyLCAKKyAgICAxOTgsIDIxMCwgMTgzLCAzMywgNiwgMSwgMjUxLCAyMjIsIDIxMCwgMTgzLCAzMywgNCwgMSwgMjUxLCAyMjIsIDIxMCwgCisgICAgMTgzLCAzMywgNiwgMSwgMjM1LCAxOTAsIDI1MCwgOCwgMjMyLCAxOTgsIDIxMCwgMTgzLCAzMywgNCwgMSwgMjM1LCAxOTAsIAorICAgIDI1MCwgOCwgMjMyLCAxOTgsIDIxMCwgMTgzLCAzMywgNiwgMSwgMjEwLCAyNDYsIDMzLCA0LCAxLCAyMTAsIDI0NiwgMzMsIAorICAgIDYsIDEsIDIyMywgNTIsIDIxNSwgMTc5LCAzMywgNCwgMSwgMjIzLCA1MiwgMjE1LCAxNzksIDMzLCA2LCAxLCAyMTksIDU0LCAKKyAgICAyNDgsIDk4LCAzMywgNCwgMSwgMjE5LCA1NCwgMjQ4LCA5OCwgMzMsIDYsIDEsIDIxOSwgNTQsIDI0NSwgMTgyLCAzMywgNCwgCisgICAgMSwgMjE5LCA1NCwgMjQ1LCAxODIsIDMzLCA2LCAxLCAyMTksIDU0LCAyNDUsIDE2NywgMzMsIDQsIDEsIDIxOSwgNTQsIAorICAgIDI0NSwgMTY3LCAzMywgNiwgMSwgMjMwLCAxNDksIDc4LCAzMywgNCwgMSwgMjMwLCAxNDksIDc4LCAzMywgNiwgMSwgMjUxLCAKKyAgICAyNDgsIDc4LCAzMywgNCwgMSwgMjUxLCAyNDgsIDc4LCAzMywgNiwgMSwgNTIsIDIzMCwgMTQ5LCA3OCwgMzMsIDQsIDEsIAorICAgIDUyLCAyMzAsIDE0OSwgNzgsIDMzLCAxLCAyMzAsIDkxLCA3OCwgMzgsIDMzLCAyMTIsIDEwMCwgMzgsIDMzLCAyMTYsIDI0OSwgCisgICAgMjMwLCAxOTYsIDUwLCAzOCwgMzMsIDI0MCwgMjE4LCAyMzAsIDE5NiwgNTAsIDM4LCAzMywgMjE2LCAxNDksIDIzMCwgMTk2LCAKKyAgICA1MCwgMjE5LCA5NSwgMjUzLCAyMjQsIDM4LCAzMywgMSwgMjE0LCAyMDIsIDIzNiwgNjcsIDM4LCAzMywgMSwgNzQsIDM4LCAKKyAgICAzMywgMSwgMjExLCA4LCAzOCwgMzMsIDEsIDY5LCAzOCwgMzMsIDEsIDI0MiwgMTAsIDUwLCAzOCwgMzMsIDEsIDIxMSwgMjcsIAorICAgIDM4LCAzMywgMSwgMjE5LCA1NCwgNTAsIDM4LCAzMywgMSwgMjI2LCAyMDUsIDM4LCAzMywgMjM0LCAxOTgsIDM4LCAzMywgCisgICAgMjI1LCAyMzEsIDMzLCAyMzQsIDE5OCwgMzMsIDIyNSwgMjMxLCAzMywgNiwgMSwgMjQ2LCA1NCwgMzMsIDQsIDEsIDI0NiwgCisgICAgNTQsIDMzLCA2LCAxLCAyNDYsIDM1LCAzMywgNCwgMSwgMjQ2LCAzNSwgMzMsIDYsIDEsIDIxMCwgNTIsIDMzLCA0LCAxLCAKKyAgICAyMTAsIDUyLCAzMywgNiwgMSwgMjUwLCAyMTQsIDMzLCA0LCAxLCAyNTAsIDIxNCwgMzMsIDYsIDEsIDI0NiwgMzMsIDMzLCAKKyAgICA0LCAxLCAyNDYsIDMzLCAzMywgNiwgMSwgMjE3LCAyNCwgMiwgMjMwLCAyMjksIDEwMywgMzMsIDQsIDEsIDIxNywgMjQsIDIsIAorICAgIDIzMCwgMjI5LCAxMDMsIDMzLCA2LCAxLCAyMTUsIDc4LCAzMywgNCwgMSwgMjE1LCA3OCwgMzMsIDYsIDEsIDIxNSwgMTYxLCAKKyAgICAzMywgNCwgMSwgMjE1LCAxNjEsIDMzLCA2LCAxLCAyMTUsIDE2NSwgMzMsIDQsIDEsIDIxNSwgMTY1LCAzMywgNiwgMSwgCisgICAgMjE3LCAyOSwgMzMsIDQsIDEsIDIxNywgMjksIDMzLCA2LCAxLCAyNDAsIDIwNSwgMzMsIDQsIDEsIDI0MCwgMjA1LCAzMywgCisgICAgNiwgMSwgMjE5LCAyMDgsIDMzLCA0LCAxLCAyMTksIDIwOCwgMzgsIDMzLCAxLCAyMzUsIDE5MCwgNzYsIDIwLCAxLCA2MSwgCisgICAgMjAsIDEsIDE3NiwgMjAsIDEsIDY5LCAyMCwgMSwgMjMzLCAyMjMsIDIwLCAxLCAyNDUsIDIxNywgMjAsIDEsIDIyMywgMTExLCAKKyAgICAyMCwgMSwgMjE3LCA4NywgMjAsIDEsIDc4LCAyMCwgMSwgMjI3LCAxNTIsIDIwLCAxLCA3NCwgMjAsIDEsIDIzMywgMTQxLCAKKyAgICAyMCwgMSwgMTkxLCAyMCwgMSwgMjIyLCAyNDIsIDIwLCAxLCAyMjMsIDMyLCAyMCwgMSwgMjMzLCA1NSwgMjAsIDEsIDIzMSwgCisgICAgODQsIDIwLCAxLCAyMTcsIDEwMiwgMjAsIDEsIDIyOSwgMTUxLCAyMCwgMSwgMjI4LCAxODgsIDIwLCAxLCAxOTQsIDIwLCAxLCAKKyAgICAyMTgsIDUsIDIwLCAxLCAyMzAsIDEwNywgMjAsIDEsIDIyMCwgMjksIDIwLCAxLCAyMTksIDE5MywgMjAsIDEsIDIyMCwgMzksIAorICAgIDIwLCAxLCAyMjAsIDEyNSwgMjAsIDEsIDIzMywgMTYxLCAyMCwgMSwgMjM0LCAxNjIsIDIwLCAxLCAyMjcsIDIxMywgMjAsIAorICAgIDEsIDIyNywgMjQyLCAyMCwgMSwgMjI4LCAxNTksIDIwLCAxLCAyMTAsIDIyNiwgMjAsIDEsIDIxOSwgMjI3LCAyMCwgMSwgCisgICAgMjEwLCAxODcsIDIwLCAxLCAxOTIsIDIwLCAxLCAyMjgsIDE0LCAyMCwgMSwgMjM0LCAxNDgsIDIwLCAxLCAyMjUsIDE1NCwgCisgICAgMjAsIDEsIDIyOCwgMTgxLCAyMCwgMSwgMjI3LCAyNTEsIDIwLCAxLCAyMjQsIDE0NywgMjAsIDEsIDIxMSwgMTkyLCAyMCwgCisgICAgMSwgMjI1LCAyMTQsIDIwLCAxLCAyNDQsIDE1NSwgMjAsIDEsIDIyMiwgMTQyLCAyMCwgMSwgMjMyLCAxMDMsIDIwLCAxLCAKKyAgICAyMzAsIDIzNSwgMjAsIDEsIDIyOCwgMjM4LCAyMCwgMSwgMjIzLCA1NCwgMjAsIDEsIDIyMywgMTc0LCAyMCwgMSwgMjM0LCAKKyAgICAxNzEsIDIwLCAxLCAyMjksIDEyLCAyMCwgMSwgMjI5LCA2MSwgMjAsIDEsIDIyOSwgODIsIDIwLCAxLCAyMjAsIDksIDIwLCAKKyAgICAxLCAyMjQsIDE1MCwgMjAsIDEsIDI0MywgMjQxLCAyMCwgMSwgMjQ0LCA0NSwgMjAsIDEsIDIxMiwgNjUsIDIwLCAxLCAxOTgsIAorICAgIDIwLCAxLCAyMzIsIDI0NywgMjAsIDEsIDIyNSwgMTExLCAyMCwgMSwgMjMyLCAxMjUsIDIwLCAxLCAyMzQsIDM0LCAyMCwgMSwgCisgICAgMjMxLCAxMTksIDIwLCAxLCAyMjMsIDg2LCAyMCwgMSwgMjMxLCA2MywgMjAsIDEsIDE4NiwgMjAsIDEsIDIxNiwgMTE4LCAKKyAgICAyMCwgMSwgMjM0LCA5OCwgMjAsIDEsIDIzMCwgMTY2LCAyMCwgMSwgMjMxLCAxMjcsIDIwLCAxLCAyMTYsIDIzMSwgMjAsIDEsIAorICAgIDIzNCwgMSwgMjAsIDEsIDIxNiwgMjQ4LCAyMCwgMSwgMjI3LCAyNDMsIDIwLCAxLCAyMjEsIDI1MywgMjAsIDEsIDI0NCwgCisgICAgMjAwLCAyMCwgMSwgMjM0LCAzLCAyMCwgMSwgMjM0LCAzMCwgMjAsIDM4LCAxNjQsIDIzNCwgMTEsIDIwLCAzOCwgMTY0LCAKKyAgICAyMTUsIDExMSwgMjAsIDIyOCwgMTg3LCAyMCwgMjQzLCAyMzYsIDIxOCwgMTMxLCAyMCwgMjQ5LCAyMzQsIDIwLCAyNDksIAorICAgIDIyNywgMjAsIDIyMCwgMTUyLCAyMCwgMjI0LCAxNiwgNzksIDU4LCAxLCAyNTAsIDEwNCwgMTM4LCAyMTAsIDI1NCwgMjI1LCAKKyAgICA2NCwgNTgsIDEsIDI1MCwgMTA0LCAxMzgsIDIxMSwgNzAsIDIyNSwgNjQsIDU4LCAxLCAyNTAsIDEwNCwgMTM4LCAyMTAsIAorICAgIDI1NCwgMjIwLCA4NiwgNTgsIDEsIDI1MCwgMTA0LCAxMzgsIDIxMSwgNzAsIDIyMCwgODYsIDU4LCAxLCAyNTAsIDEwNCwgCisgICAgMTM4LCAyMTAsIDI1NCwgMjI0LCAzMywgNTgsIDEsIDI1MCwgMTA0LCAxMzgsIDIxMSwgNzAsIDIyNCwgMzMsIDU4LCAxLCAKKyAgICAyNTAsIDEwNCwgMTM4LCAyMTAsIDI1NCwgMjIyLCAxNDIsIDU4LCAxLCAyNTAsIDEwNCwgMTM4LCAyMTEsIDcwLCAyMjIsIAorICAgIDE0MiwgNTgsIDEsIDI0NSwgMjgsIDI0NiwgMTI2LCAxMzgsIDEzMCwgNTgsIDEsIDEyNSwgMjQ2LCAxMjYsIDEzOCwgMTMwLCAKKyAgICA1OCwgMSwgMjMwLCAyMzAsIDI0NiwgMTI2LCAxMzgsIDEzMCwgNTgsIDEsIDEyMSwgMjQ2LCAxMjYsIDEzOCwgMTMwLCA1OCwgCisgICAgMSwgMjQ1LCAyNywgMjQ2LCAxMjYsIDEzOCwgMTMwLCA1OCwgMSwgMjQ1LCAyOCwgMjQ2LCAxMjYsIDIzMywgNDUsIDEzOCwgCisgICAgMTMwLCA1OCwgMSwgMTI1LCAyNDYsIDEyNiwgMjMzLCA0NSwgMTM4LCAxMzAsIDU4LCAxLCAyMzAsIDIzMCwgMjQ2LCAxMjYsIAorICAgIDIzMywgNDUsIDEzOCwgMTMwLCA1OCwgMSwgMTIxLCAyNDYsIDEyNiwgMjMzLCA0NSwgMTM4LCAxMzAsIDU4LCAxLCAyNDUsIAorICAgIDI3LCAyNDYsIDEyNiwgMjMzLCA0NSwgMTM4LCAxMzAsIDU4LCAxLCAyNDUsIDI4LCAyMzMsIDQ1LCAxMzgsIDEzMCwgNTgsIAorICAgIDEsIDEyNSwgMjMzLCA0NSwgMTM4LCAxMzAsIDU4LCAxLCAyMzAsIDIzMCwgMjMzLCA0NSwgMTM4LCAxMzAsIDU4LCAxLCAKKyAgICAxMjEsIDIzMywgNDUsIDEzOCwgMTMwLCA1OCwgMSwgMjQ1LCAyNywgMjMzLCA0NSwgMTM4LCAxMzAsIDU4LCAxLCA1OSwgNjcsIAorICAgIDEzMCwgNTgsIDEsIDU5LCAyMTksIDk3LCA1OCwgMSwgNTksIDIwMywgMTMwLCA1OCwgMSwgMjMyLCAxMTQsIDQ0LCAyNDksIAorICAgIDE2OSwgMjU0LCAxMTcsIDU4LCAxLCAyMjMsIDE2MCwgMTIwLCA3NSwgNTgsIDEsIDIyMywgMTYwLCAxMjQsIDc1LCA1OCwgMSwgCisgICAgMjIzLCAxNjAsIDI0NSwgMzksIDc5LCA1OCwgMSwgMjIzLCAxNjAsIDIzNSwgMjAwLCAyNDUsIDM5LCA3OSwgNTgsIDEsIAorICAgIDEyMSwgMjM1LCAyMDAsIDI0NSwgMzksIDc5LCA1OCwgMSwgMjE4LCAxMTMsIDIyLCAxMjUsIDIxNiwgMzEsIDU4LCAxLCAKKyAgICAyMTgsIDExMywgMjIsIDEyMSwgMjE2LCAzMSwgNywgNiwgMSwgMjQ1LCAyMDcsIDI1NCwgMTc5LCA3LCA0LCAxLCAyNDUsIAorICAgIDIwNywgMjU0LCAxNzksIDcsIDYsIDEsIDI0NSwgMjA3LCAyNTQsIDIwNSwgNywgNCwgMSwgMjQ1LCAyMDcsIDI1NCwgMjA1LCAKKyAgICA3LCA2LCAxLCAyNDEsIDIxNCwgNywgNCwgMSwgMjQxLCAyMTQsIDcsIDYsIDEsIDIxNSwgNDAsIDcsIDQsIDEsIDIxNSwgNDAsIAorICAgIDcsIDYsIDEsIDIxNSwgMjMwLCA3LCA0LCAxLCAyMTUsIDIzMCwgNywgNiwgMSwgMjQ5LCAxMTgsIDcsIDQsIDEsIDI0OSwgCisgICAgMTE4LCA3LCA2LCAxLCAyNDksIDExOSwgMiwgMjQ5LCAyMjcsIDcsIDQsIDEsIDI0OSwgMTE5LCAyLCAyNDksIDIyNywgNywgCisgICAgMSwgNCwgNiwgMjQ1LCAxNCwgNywgMSwgNCwgNiwgMjIyLCA5MywgNywgNiwgMSwgMjU1LCA4MiwgNywgNCwgMSwgMjU1LCAKKyAgICA4MiwgNywgNiwgMSwgMjU0LCA4MSwgNywgNCwgMSwgMjU0LCA4MSwgNywgNiwgMSwgMjUzLCAyMDAsIDcsIDQsIDEsIDI1MywgCisgICAgMjAwLCA3LCA2LCAxLCAyNTMsIDE4NCwgNywgNCwgMSwgMjUzLCAxODQsIDcsIDYsIDEsIDI1MywgMTg1LCAyLCAyMDMsIAorICAgIDEzMCwgNywgNCwgMSwgMjUzLCAxODUsIDIsIDIwMywgMTMwLCA3LCA2LCAxLCAyNTMsIDE3NSwgNywgNCwgMSwgMjUzLCAKKyAgICAxNzUsIDcsIDYsIDEsIDIyMywgNTIsIDI1MSwgNzUsIDIsIDI0NywgMTI4LCA3LCA0LCAxLCAyMjMsIDUyLCAyNTEsIDc1LCAKKyAgICAyLCAyNDcsIDEyOCwgNywgNiwgMSwgMjM1LCAzMCwgMiwgOTEsIDcsIDQsIDEsIDIzNSwgMzAsIDIsIDkxLCA3LCA2LCAxLCAKKyAgICAyMzUsIDMwLCAyLCAyNDgsIDcsIDkxLCA3LCA0LCAxLCAyMzUsIDMwLCAyLCAyNDgsIDcsIDkxLCA3LCA2LCAxLCAyMzUsIAorICAgIDMwLCAyLCAyMTgsIDEwNSwgMjIsIDI0OCwgNywgOTEsIDcsIDQsIDEsIDIzNSwgMzAsIDIsIDIxOCwgMTA1LCAyMiwgMjQ4LCAKKyAgICA3LCA5MSwgNywgNiwgMSwgMjUxLCAxNDMsIDE1NiwgNywgNCwgMSwgMjUxLCAxNDMsIDE1NiwgNywgNiwgMSwgMjMzLCAxNTUsIAorICAgIDIsIDEyNSwgOTEsIDcsIDQsIDEsIDIzMywgMTU1LCAyLCAxMjUsIDkxLCA3LCA2LCAxLCAxNDQsIDIsIDIwMCwgMjE4LCAKKyAgICAxMDUsIDIyNiwgMTI0LCA3LCA0LCAxLCAxNDQsIDIsIDIwMCwgMjE4LCAxMDUsIDIyNiwgMTI0LCA3LCA2LCAxLCAxNDQsIDIsIAorICAgIDIzMiwgMTI5LCA3LCA0LCAxLCAxNDQsIDIsIDIzMiwgMTI5LCA3LCA2LCAxLCAyMjYsIDE4NywgNywgNCwgMSwgMjI2LCAKKyAgICAxODcsIDcsIDYsIDEsIDIyNiwgMTEwLCAyLCAyMTgsIDEwNSwgMjE2LCAxNDAsIDI0OCwgNDcsIDcsIDQsIDEsIDIyNiwgCisgICAgMTEwLCAyLCAyMTgsIDEwNSwgMjE2LCAxNDAsIDI0OCwgNDcsIDcsIDYsIDEsIDIyNiwgMTEwLCAyLCAyNDQsIDYxLCA3LCA0LCAKKyAgICAxLCAyMjYsIDExMCwgMiwgMjQ0LCA2MSwgNywgNiwgMSwgMjI2LCAxMTAsIDIsIDIxOCwgMjMxLCAyMTcsIDc4LCA3LCA0LCAKKyAgICAxLCAyMjYsIDExMCwgMiwgMjE4LCAyMzEsIDIxNywgNzgsIDcsIDYsIDEsIDIyNCwgMTAwLCAyLCAyMTgsIDEwNSwgMjE2LCAKKyAgICAxNDAsIDI0OCwgNDcsIDcsIDQsIDEsIDIyNCwgMTAwLCAyLCAyMTgsIDEwNSwgMjE2LCAxNDAsIDI0OCwgNDcsIDcsIDYsIDEsIAorICAgIDIyNCwgMTAwLCAyLCAyNDgsIDcsIDkxLCA3LCA0LCAxLCAyMjQsIDEwMCwgMiwgMjQ4LCA3LCA5MSwgNywgNiwgMSwgMjIzLCAKKyAgICAyMjcsIDIyMiwgMTg4LCA3LCA0LCAxLCAyMjMsIDIyNywgMjIyLCAxODgsIDcsIDYsIDEsIDIyMiwgMTMyLCAyMjIsIDE4OCwgCisgICAgNywgNCwgMSwgMjIyLCAxMzIsIDIyMiwgMTg4LCA3LCA2LCAxLCAyMTQsIDEwNiwgMiwgMjQ4LCA3LCA5MSwgNywgNCwgMSwgCisgICAgMjE0LCAxMDYsIDIsIDI0OCwgNywgOTEsIDcsIDYsIDEsIDIxMiwgMTA2LCA3LCA0LCAxLCAyMTIsIDEwNiwgNywgNiwgMSwgCisgICAgMjEzLCAxNDUsIDIxMCwgMTU5LCA3LCA0LCAxLCAyMTMsIDE0NSwgMjEwLCAxNTksIDcsIDYsIDEsIDIxNiwgMTUzLCAyLCAKKyAgICA5MSwgNywgNCwgMSwgMjE2LCAxNTMsIDIsIDkxLCA3LCA2LCAxLCAyMTYsIDE1MywgMiwgMjE4LCAxMDUsIDIxNiwgMTQwLCAKKyAgICAyNDgsIDQ3LCA3LCA0LCAxLCAyMTYsIDE1MywgMiwgMjE4LCAxMDUsIDIxNiwgMTQwLCAyNDgsIDQ3LCA3LCA2LCAxLCAyMTMsIAorICAgIDI0NSwgNywgNCwgMSwgMjEzLCAyNDUsIDcsIDYsIDEsIDI0NSwgNzMsIDcsIDQsIDEsIDI0NSwgNzMsIDcsIDYsIDEsIDIzNSwgCisgICAgMTc4LCA3LCA0LCAxLCAyMzUsIDE3OCwgNywgNiwgMSwgMjQ5LCAyMTUsIDcsIDQsIDEsIDI0OSwgMjE1LCA1OCwgMSwgMjE0LCAKKyAgICAxMzMsIDcsIDQsIDEsIDI0NiwgNzcsIDcsIDQsIDEsIDIzMiwgODksIDcsIDQsIDEsIDIzMCwgODUsIDcsIDQsIDEsIDIyNywgCisgICAgMjA1LCA3LCA0LCAxLCAyMjIsIDEzMSwgNywgMSwgNCwgNiwgMjIyLCAxMzEsIDcsIDQsIDEsIDIxNSwgMTA5LCA3LCA0LCAxLCAKKyAgICAyMTQsIDE5NywgNywgNiwgMSwgMjM1LCAyMjAsIDI0OSwgNjgsIDcsIDQsIDEsIDIzNSwgMjIwLCAyNDksIDY4LCA3LCA2LCAKKyAgICAxLCAyMzUsIDIyMCwgMjQ1LCAxNCwgNywgNCwgMSwgMjM1LCAyMjAsIDI0NSwgMTQsIDcsIDYsIDEsIDIzNSwgMjIwLCAyNDMsIAorICAgIDIwOSwgNywgNiwgMSwgMjE1LCA5NCwgMjM1LCAyMjAsIDI0MywgMjA5LCA3LCA0LCAxLCAyMTUsIDk0LCAyMzUsIDIyMCwgCisgICAgMjQzLCAyMDksIDcsIDYsIDEsIDIxNSwgOTQsIDE1NiwgNywgNCwgMSwgMjE1LCA5NCwgMTU2LCA3LCA2LCAxLCAyMzUsIAorICAgIDIyMCwgMTUzLCA3LCA0LCAxLCAyMzUsIDIyMCwgMTUzLCA3LCA2LCAxLCAyMzUsIDIyMCwgMjIyLCA5MywgNywgNCwgMSwgCisgICAgMjM1LCAyMjAsIDIyMiwgOTMsIDcsIDYsIDEsIDIzNSwgMjIwLCAyMTcsIDE1MywgNywgNCwgMSwgMjM1LCAyMjAsIDIxNywgCisgICAgMTUzLCA1OCwgMSwgMTIxLCAyNTAsIDM5LCAyNTUsIDIzLCA1OCwgMSwgMjQ5LCAyMzQsIDU4LCAxLCAyMTksIDI1MywgMjQ1LCAKKyAgICAxMDYsIDUwLCA3LCA2LCAxLCAyMjIsIDEsIDcsIDQsIDEsIDIyMiwgMSwgNywgNiwgMSwgMjE1LCA5NCwgMjQyLCA2NywgNywgCisgICAgNCwgMSwgMjMzLCAxNTUsIDIsIDIyMywgNTgsIDI0MSwgNTksIDIyLCAyNTIsIDQ5LCA3LCA2LCAxLCAyMzAsIDMxLCAyLCAKKyAgICAyNDgsIDQ3LCA3LCA0LCAxLCAyMzAsIDMxLCAyLCAyNDgsIDQ3LCA3LCA2LCAxLCAyNTEsIDc1LCAyLCAxMzAsIDcsIDQsIDEsIAorICAgIDI1MSwgNzUsIDIsIDEzMCwgNywgNiwgMSwgMjQzLCAyMTAsIDIsIDIyNiwgMjUyLCA5MSwgNywgNCwgMSwgMjQzLCAyMTAsIAorICAgIDIsIDIyNiwgMjUyLCA5MSwgNywgNiwgMSwgMjM1LCAzMCwgMiwgMjI2LCAyNTIsIDkxLCA3LCA0LCAxLCAyMzUsIDMwLCAyLCAKKyAgICAyMjYsIDI1MiwgOTEsIDcsIDYsIDEsIDIzMCwgMzEsIDIsIDIyNiwgMjUyLCA5MSwgNywgNCwgMSwgMjMwLCAzMSwgMiwgCisgICAgMjI2LCAyNTIsIDkxLCA3LCA2LCAxLCAyMjMsIDIyNywgMiwgMjI2LCAyNTIsIDkxLCA3LCA0LCAxLCAyMjMsIDIyNywgMiwgCisgICAgMjI2LCAyNTIsIDkxLCA3LCA2LCAxLCAyMjIsIDk0LCAyLCAyMjYsIDI1MiwgOTEsIDcsIDQsIDEsIDIyMiwgOTQsIDIsIAorICAgIDIyNiwgMjUyLCA5MSwgNywgNiwgMSwgMjQyLCA2OCwgMiwgMTAzLCA1OCwgMSwgNiwgMjQyLCA2OCwgMiwgOTEsIDU4LCAxLCAKKyAgICA0LCAyNywgMjI2LCAyMzgsIDcsIDEsIDQsIDYsIDIxNSwgOTQsIDE5NCwgNywgMjQ1LCAxMTEsIDEsIDIyMywgNTIsIDI0NSwgCisgICAgMTQsIDcsIDI0NSwgMTExLCAxLCAyMjMsIDUyLCAyMjYsIDEwOSwgNywgMjQ1LCAxMTEsIDEsIDIzNSwgMjAwLCAxOTQsIDcsIAorICAgIDI0NSwgMTExLCAxLCAyNDAsIDE2MSwgMjMyLCAxMzUsIDcsIDI0NSwgMTExLCAxLCAyNTQsIDMxLCAxOTQsIDIxNywgMjMxLCAKKyAgICAyMjksIDIxOSwgMSwgNjEsIDIxNywgMjMxLCAyMjksIDIxOSwgMSwgNzQsIDIxNywgMjMxLCAyMjksIDIxOSwgNSwgMjQ2LCAKKyAgICA1NiwgMjE3LCAyMzEsIDIyOSwgMjE5LCAxLCA2OSwgMjE3LCAyMzEsIDIyOSwgMjE5LCAxLCA3NiwgMjE3LCAyMzEsIDIyOSwgCisgICAgMjE5LCAxLCA3OCwgMjE3LCAyMzEsIDIyOSwgMjE5LCA1LCAyNDIsIDQsIDIxNywgMjMxLCAyMjksIDIxOSwgMSwgMjM0LCAKKyAgICAzNCwgMjE3LCAyMzEsIDIyOSwgMjE5LCAxLCAyMzQsIDExMSwgMjE3LCAyMzEsIDIyOSwgMjE5LCAxLCAyNDIsIDE4MSwgCisgICAgMjE3LCAyMzEsIDIyOSwgMjE5LCAxLCAyNDIsIDIzMSwgMjE3LCAyMzEsIDIyOSwgMjE5LCA1LCAyNTQsIDgzLCAyMTcsIAorICAgIDIzMSwgMjI5LCAyMTksIDEsIDI0OSwgMjQ2LCAyMTcsIDIzMSwgMjI5LCAyMTksIDEsIDI1MCwgOTQsIDIxNywgMjMxLCAKKyAgICAyMjksIDIxOSwgMSwgMjM1LCA3NCwgMjE3LCAyMzEsIDIyOSwgMjE5LCAxLCAyMzUsIDExNSwgMjE3LCAyMzEsIDIyOSwgCisgICAgMjE5LCAxLCAyMTUsIDEzNCwgMjE3LCAyMzEsIDIyOSwgMjE5LCAxLCAyMTUsIDE0MCwgMjE3LCAyMzEsIDIyOSwgMjE5LCAxLCAKKyAgICAyNDgsIDExMywgMjE3LCAyMzEsIDIyOSwgMjE5LCAxLCAyNDgsIDEyMiwgMjE3LCAyMzEsIDIyOSwgMjE5LCAxLCAxMTIsIAorICAgIDIxNywgMjMxLCAyMjksIDIxOSwgMSwgMjE2LCAxNTcsIDIxNywgMjMxLCAyMjksIDIxOSwgMSwgMjQ3LCAxNTMsIDIxNywgCisgICAgMjMxLCAyMjksIDIxOSwgMSwgMjQ4LCAxNSwgMjE3LCAyMzEsIDIyOSwgMjE5LCAxLCAyMjgsIDc5LCAyMTcsIDIzMSwgMjI5LCAKKyAgICAyMTksIDEsIDIyNSwgMTksIDIxNywgMjMxLCAyMjksIDIxOSwgMSwgMjI1LCAxMjQsIDIxNywgMjMxLCAyMjksIDIxOSwgMSwgCisgICAgMjUxLCAyMTMsIDIxNywgMjMxLCAyMjksIDIxOSwgMSwgMjUyLCAxOCwgMjE3LCAyMzEsIDIyOSwgMjE5LCAxLCAyMzAsIAorICAgIDE2NiwgMjE3LCAyMzEsIDIyOSwgMjE5LCAxLCAyMjIsIDIxMywgMjE3LCAyMzEsIDIyOSwgMjE5LCAxLCAyMzIsIDE2MiwgCisgICAgMjE3LCAyMzEsIDIyOSwgMjE5LCAxLCAyMjIsIDE2NywgMjE3LCAyMzEsIDIyOSwgMjE5LCAxLCAyMTksIDYwLCAyMTcsIAorICAgIDIzMSwgMjI5LCAyMTksIDEsIDI0MSwgNzUsIDIxNywgMjMxLCAyMjksIDIxOSwgMjUsIDUsIDYxLCAyMTcsIDIzMSwgMjI5LCAKKyAgICAyMTksIDI1LCA1LCA3NCwgMjE3LCAyMzEsIDIyOSwgMjE5LCAyNSwgNSwgNjksIDIxNywgMjMxLCAyMjksIDIxOSwgMjUsIDUsIAorICAgIDc2LCAyMTcsIDIzMSwgMjI5LCAyMTksIDI1LCA1LCAyMjYsIDE4NywgMjE3LCAyMzEsIDIyOSwgMjE5LCAyMjUsIDE1LCAKKyAgICAyMzEsIDE2MywgMjE3LCAyMzEsIDIyOSwgMjE5LCAyMjUsIDE1LCAyMzEsIDE2MiwgMjE3LCAyMzEsIDIyOSwgMjE5LCAyMjUsIAorICAgIDE1LCAyMzEsIDE2MSwgMjE3LCAyMzEsIDIyOSwgMjE5LCAyMjUsIDE1LCAyMzEsIDE2MCwgMjI4LCA2MSwgMjM1LCAyNDcsIAorICAgIDI0NCwgMTAsIDEyMywgMjI0LCAyNCwgMjI4LCA2MSwgMjM1LCAyNDcsIDI0NCwgMTAsIDEyMywgMjQyLCAzNCwgMjI4LCA2MSwgCisgICAgMjM1LCAyNDcsIDI0NCwgMTAsIDEzNCwgMjI0LCAyMiwgMjI4LCA2MSwgMjM1LCAyNDcsIDI0NCwgMTAsIDEyMywgMjE5LCAKKyAgICAxMTksIDIyOCwgNjEsIDIzNSwgMjQ3LCAyNDQsIDEwLCAxMjMsIDI0NSwgMTk2LCAyMjgsIDYxLCAyMzUsIDI0NywgMjQ0LCAKKyAgICAxMCwgMTM0LCAyMTksIDExOCwgMjI4LCA2MSwgMjM1LCAyNDcsIDIyNCwgMjUsIDc5LCAyMjgsIDYxLCAyMzUsIDI0NywgCisgICAgMjI1LCA0MywgNzksIDIyOCwgNjEsIDIzNSwgMjQ3LCAyMjIsIDEyMCwgNzksIDIyOCwgNjEsIDIzNSwgMjQ3LCAyMjQsIDI2LCAKKyAgICA3OSwgMjI1LCAxNDcsIDEsIDE3NiwgMjI1LCAxNDcsIDEsIDIzNCwgMTM4LCAyMjUsIDE0NywgMSwgMjQzLCAxNDIsIDIyNSwgCisgICAgMTQ3LCAxLCAyMjksIDgyLCAyMjUsIDE0NywgMSwgMjUxLCA0MSwgMjI1LCAxNDcsIDEsIDI1MCwgMTY1LCAyMjUsIDE0NywgCisgICAgMSwgMjM1LCAxNDcsIDIyNSwgMTQ3LCAxLCAyMjcsIDE2OSwgMjI1LCAxNDcsIDEsIDIxNywgMTA2LCAyMjUsIDE0NywgMSwgCisgICAgMjE2LCAyMDksIDIyNSwgMTQ3LCAxLCAyNDgsIDIyOSwgMjI1LCAxNDcsIDEsIDE5OCwgMjI1LCAxNDcsIDEsIDE5MSwgMjI1LCAKKyAgICAxNDcsIDEsIDIyNSwgMTUwLCAyMjUsIDE0NywgMSwgMjUyLCAxOTksIDIyNSwgMTQ3LCAxLCAxODYsIDIyNSwgMTQ3LCAxLCAKKyAgICAyMTUsIDE4NCwgMjI1LCAxNDcsIDEsIDIxNSwgMTc2LCAyMjUsIDE0NywgMSwgMjQ2LCA0NiwgMjI1LCAxNDcsIDEsIDIxMiwgCisgICAgNjUsIDIyNSwgMTQ3LCAxLCAyMTAsIDgyLCAyMjUsIDE0NywgMSwgMjEwLCAxMTYsIDIyNSwgMTQ3LCAxLCA0LCA2MSwgMjI1LCAKKyAgICAxNDcsIDEsIDE5MiwgMjI1LCAxNDcsIDEsIDIwNSwgMjI1LCAxNDcsIDEsIDIzMywgMTQxLCAyMjUsIDE0NywgMSwgMjIwLCAKKyAgICAxMDQsIDIyNSwgMTQ3LCAxLCAyMDYsIDIyNSwgMTQ3LCAxLCAxNjIsIDIyNSwgMTQ3LCAxLCA2MSwgMjI1LCAxNDcsIDEsIAorICAgIDc0LCAyMjUsIDE0NywgMSwgNjksIDIyNSwgMTQ3LCAxLCA3NiwgMjI1LCAxNDcsIDEsIDc4LCAyMjUsIDE0NywgMSwgMjI0LCAKKyAgICA5MSwgMjI1LCAxNDcsIDEsIDIxMSwgMTY1LCAyMjUsIDE0NywgMSwgMjQ0LCAyMDQsIDIyNSwgMTQ3LCAxLCAyNDMsIDM2LCAKKyAgICAyMjUsIDE0NywgMSwgMjQ1LCAyMTcsIDIyNSwgMTQ3LCAyMTgsIDc0LCAxLCAyMTIsIDY1LCAyMjUsIDE0NywgMjE4LCA3NCwgCisgICAgMSwgMTkyLCAyMjUsIDE0NywgMSwgMjE1LCAxNTcsIDIyNSwgMTQ3LCAxLCAyMTUsIDE0NSwgMjI1LCAxNDcsIDEsIDI0OCwgCisgICAgMTQzLCAyMjUsIDE0NywgMSwgMjI4LCAxMTUsIDIyNSwgMTQ3LCAxLCAyNTQsIDE0OSwgMTkyLCAyMjUsIDE0NywgMSwgMjEzLCAKKyAgICAxMzQsIDIyMCwgMTA0LCAyMjUsIDE0NywgMSwgMjEzLCAxMzUsIDE2MiwgMjI1LCAxNDcsIDEsIDI1MywgMjMxLCAyNDQsIAorICAgIDIwNCwgMjI1LCAxNDcsIDIxOCwgNzQsIDEsIDIwNSwgMjI1LCAxNDcsIDIxOCwgMjYsIDEsIDIwNSwgMjI1LCAxNDcsIDEsIAorICAgIDI1MSwgNywgMjI1LCAxNDcsIDIxOSwgMTU3LCAyNDEsIDI0MywgNzksIDIyNSwgMTQ3LCA1MiwgMjQxLCAyNDMsIDc5LCAKKyAgICAyMjUsIDE0NywgMTY0LCAyMjAsIDk3LCAyMjUsIDE0NywgMTY0LCA1MiwgMjIwLCA5NywgMTc5LCA1LCAyNTQsIDgzLCAxNzksIAorICAgIDUsIDIxMywgMTQ3LCAxNzksIDEsIDYxLCAxNzksIDEsIDI1NSwgODIsIDE3OSwgMSwgNzQsIDE3OSwgMSwgMjM2LCA0MCwgCisgICAgMTc5LCAxLCA2OSwgMTc5LCAxLCAyMTQsIDExOCwgMTc5LCAxLCAxNDksIDE1MywgMTc5LCAxLCAxNDksIDIyMiwgMTgyLCAKKyAgICAxNzksIDEsIDE0OSwgMTU2LCAxNzksIDEsIDE0OSwgMjMyLCAxOTEsIDE3OSwgMSwgNzYsIDE3OSwgMSwgMjQ1LCAyMTcsIAorICAgIDE3OSwgMSwgMjU0LCAyMTAsIDE3OSwgMSwgNzgsIDE3OSwgMSwgMjI2LCAxODcsIDE3OSwgMSwgMjUzLCAyMDAsIDE3OSwgMSwgCisgICAgMTc2LCAxNzksIDEsIDIzNCwgMTM4LCAxNzksIDEsIDI0MywgMTQyLCAxNzksIDEsIDI0MywgMCwgMTc5LCAxLCAyMjksIDgyLCAKKyAgICAxNzksIDEsIDI1MSwgNDEsIDE3OSwgMSwgMjUwLCAxNjUsIDE3OSwgMSwgMjM1LCAxNDcsIDE3OSwgMSwgMjM1LCAxMjAsIAorICAgIDE3OSwgMSwgMjI3LCAxNjksIDE3OSwgMSwgMjE1LCAxNTcsIDE3OSwgMSwgMjE1LCAxNDUsIDE3OSwgMSwgMjQ4LCAxNDMsIAorICAgIDE3OSwgMSwgMjQ4LCAxMjcsIDE3OSwgMSwgMjI4LCAxMTUsIDE3OSwgMSwgMjE3LCAxMDYsIDE3OSwgMSwgMjE2LCAyMDksIAorICAgIDE3OSwgMSwgMjQ4LCAyMjksIDE3OSwgMSwgMjQ4LCAzMywgMTc5LCAxLCAxOTgsIDE3OSwgMSwgMTkxLCAxNzksIDEsIDIyNSwgCisgICAgMTUwLCAxNzksIDEsIDI1MiwgMTk5LCAxNzksIDEsIDI1MiwgMjYsIDE3OSwgMSwgMTg2LCAxNzksIDEsIDE5MiwgMTc5LCAxLCAKKyAgICAyMDUsIDE3OSwgMSwgMjMzLCAxNDEsIDE3OSwgMSwgMjE0LCAyNywgMTc5LCAxLCAyMjAsIDEwNCwgMTc5LCAxLCAyMTgsIAorICAgIDIyNSwgMTc5LCAxLCAyMDYsIDE3OSwgMSwgMTYyLCAxNzksIDEsIDIzMiwgMTkwLCAxNzksIDExNywgNSwgMjQyLCA1MSwgCisgICAgMTc5LCAyNSwgNSwgMjU1LCA4MiwgMTc5LCAyNSwgNSwgNzQsIDE3OSwgMjUsIDUsIDIzNiwgNDAsIDE3OSwgMjUsIDUsIDY5LCAKKyAgICAxNzksIDI1LCA1LCAyMTQsIDExOCwgMTc5LCAyNSwgNSwgMTQ5LCAxNTMsIDE3OSwgMjUsIDUsIDE0OSwgMjIyLCAxODIsIAorICAgIDE3OSwgMjUsIDUsIDE0OSwgMTU2LCAxNzksIDI1LCA1LCAxNDksIDIzMiwgMTkxLCAxNzksIDI1LCA1LCA3NiwgMTc5LCAyNSwgCisgICAgNSwgMjQ1LCAyMTcsIDE3OSwgMjUsIDUsIDI1NCwgMjEwLCAxNzksIDI1LCA1LCA3OCwgMTc5LCAyNSwgNSwgMjI2LCAxODcsIAorICAgIDE3OSwgMjUsIDUsIDI1MywgMjAwLCAxNzksIDUsIDIxMywgMTUyLCAxNzksIDI0OCwgMTg2LCAxNzksIDUyLCAyNDgsIDE4NiwgCisgICAgMTc5LCAyMSwgMjEwLCA4NiwgMTc5LCAyMSwgMTExLCAxNzksIDIxLCAxMDUsIDE3OSwgMjEsIDE1OCwgMTc5LCAyMSwgMTYxLCAKKyAgICAxNzksIDIxLCAxOTAsIDE3OSwgMjEsIDE5NSwgMTc5LCAyMSwgMTk5LCAxNzksIDIxLCAxOTYsIDE3OSwgMjEsIDIwMSwgMzgsIAorICAgIDg0LCAyMSwgMjEwLCA4NiwgMzgsIDg0LCAyMSwgMTExLCAzOCwgODQsIDIxLCAxMDUsIDM4LCA4NCwgMjEsIDE1OCwgMzgsIAorICAgIDg0LCAyMSwgMTYxLCAzOCwgODQsIDIxLCAxOTAsIDM4LCA4NCwgMjEsIDE5NSwgMzgsIDg0LCAyMSwgMTk5LCAzOCwgODQsIAorICAgIDIxLCAxOTYsIDM4LCA4NCwgMjEsIDIwMSwgMzgsIDg0LCAxLCA2MSwgMzgsIDg0LCAxLCA2OSwgMzgsIDg0LCAxLCAxNzYsIAorICAgIDM4LCA4NCwgMSwgMTk4LCAzOCwgODQsIDEsIDE5MSwgMzgsIDg0LCAxLCAyMDUsIDM4LCA4NCwgMSwgMjEzLCAxNzYsIDM4LCAKKyAgICA4NCwgNSwgMjUzLCAxODMsIDg0LCA1LCAyMTksIDE5LCAyNTEsIDcsIDg0LCA1LCAyNTEsIDgsIDIxMywgMTUyLCA4NCwgNSwgCisgICAgNTIsIDI1MSwgOCwgMjEzLCAxNTIsIDg0LCA1LCAyNTEsIDgsIDEwNSwgODQsIDUsIDI1MSwgOCwgMTU4LCA4NCwgNSwgMjUxLCAKKyAgICA4LCAyNTMsIDE4MywgODQsIDUsIDIyNCwgMTI3LCA4NCwgMjQzLCAxMDcsIDI0NCwgMTExLCA4NCwgMjUwLCAyNDYsIDg0LCAKKyAgICAyNDEsIDIzNywgMjM0LCAxOTQsIDIzMiwgMjQ4LCAyMSwgMjEwLCA4NiwgMjM0LCAxOTQsIDIzMiwgMjQ4LCAyMSwgMTExLCAKKyAgICAyMzQsIDE5NCwgMjMyLCAyNDgsIDIxLCAxMDUsIDIzNCwgMTk0LCAyMzIsIDI0OCwgMjEsIDE1OCwgMjM0LCAxOTQsIDIzMiwgCisgICAgMjQ4LCAyMSwgMTYxLCAyMzQsIDE5NCwgMjMyLCAyNDgsIDIxLCAxOTAsIDIzNCwgMTk0LCAyMzIsIDI0OCwgMjEsIDE5NSwgCisgICAgMjM0LCAxOTQsIDIzMiwgMjQ4LCAyMSwgMTk5LCAyMzQsIDE5NCwgMjMyLCAyNDgsIDIxLCAxOTYsIDIzNCwgMTk0LCAyMzIsIAorICAgIDI0OCwgMjEsIDIwMSwgMjM0LCAxOTQsIDIzMiwgMjQ4LCAxLCAxNzYsIDIzNCwgMTk0LCAyMzIsIDI0OCwgMSwgMjM0LCAKKyAgICAxMzgsIDIzNCwgMTk0LCAyMzIsIDI0OCwgMSwgMjQzLCAxNDIsIDIzNCwgMTk0LCAyMzIsIDI0OCwgMSwgMjI5LCA4MiwgCisgICAgMjM0LCAxOTQsIDIzMiwgMjQ4LCAxLCAyMDYsIDIzNCwgMTk0LCAyMzIsIDI0OCwgMSwgMjIwLCAxMDQsIDIzNCwgMTk0LCAKKyAgICAyMzIsIDI0OCwgMSwgMjEwLCAxMTYsIDIzNCwgMTk0LCAyMzIsIDI0OCwgMSwgMjI3LCAxNjksIDIzNCwgMTk0LCAyMzIsIAorICAgIDI0OCwgMSwgMjE3LCAxMDYsIDIzNCwgMTk0LCAyMzIsIDI0OCwgMSwgMjQwLCAyMzMsIDIzNCwgMTk0LCAyMzIsIDI0OCwgMSwgCisgICAgMTk4LCAyMzQsIDE5NCwgMjMyLCAyNDgsIDEsIDE5MSwgMjM0LCAxOTQsIDIzMiwgMjQ4LCAxLCAyMjUsIDE1MCwgMjM0LCAKKyAgICAxOTQsIDIzMiwgMjQ4LCAxLCAxODYsIDIzNCwgMTk0LCAyMzIsIDI0OCwgMSwgMjQ4LCAyMjksIDIzNCwgMTk0LCAyMzIsIAorICAgIDI0OCwgMSwgMjUyLCAxOTksIDIzNCwgMTk0LCAyMzIsIDI0OCwgMSwgMjA1LCAyMzQsIDE5NCwgMjMyLCAyNDgsIDEsIDE5MiwgCisgICAgMjM0LCAxOTQsIDIzMiwgMjQ4LCAxLCAyMzMsIDE0MSwgMjM0LCAxOTQsIDIzMiwgMjQ4LCAxLCAyMTIsIDY1LCAyMzQsIAorICAgIDE5NCwgMjMyLCAyNDgsIDEsIDIxNiwgMjA5LCAyMzQsIDE5NCwgMjMyLCAyNDgsIDEsIDE2MiwgMjM0LCAxOTQsIDIzMiwgCisgICAgMjQ4LCAxLCAyMTQsIDI3LCAyMzQsIDE5NCwgMjMyLCAyNDgsIDEsIDI1MSwgNDEsIDIzNCwgMTk0LCAyMzIsIDI0OCwgMSwgCisgICAgNjEsIDIzNCwgMTk0LCAyMzIsIDI0OCwgMSwgMjI2LCAyMzgsIDIzNCwgMTk0LCAyMzIsIDI0OCwgMSwgNzQsIDIzNCwgMTk0LCAKKyAgICAyMzIsIDI0OCwgMSwgMjI2LCAxODcsIDIzNCwgMTk0LCAyMzIsIDI0OCwgMjUsIDIxNCwgMjE0LCAyMzQsIDE5NCwgMjMyLCAKKyAgICAyNDgsIDI1LCA3NiwgMjM0LCAxOTQsIDIzMiwgMjQ4LCAyNSwgNjksIDIzNCwgMTk0LCAyMzIsIDI0OCwgMjUsIDI0NSwgCisgICAgMjE3LCAyMzQsIDE5NCwgMjMyLCAyNDgsIDI1LCA3OCwgMjM0LCAxOTQsIDIzMiwgMjQ4LCAxMzgsIDIyNSwgMzMsIDIzNCwgCisgICAgMTk0LCAyMzIsIDI0OCwgMTM4LCAyNTEsIDIwLCAyMzQsIDE5NCwgMjMyLCAyNDgsIDEzOCwgMjUxLCAyMSwgMjI1LCAzMywgCisgICAgMjM0LCAxOTQsIDIzMiwgMjQ4LCA1LCAyNDksIDg1LCAyMzQsIDE5NCwgMjMyLCAyNDgsIDUsIDIxOSwgMjAxLCAyMjMsIDk2LCAKKyAgICAxLCAxNzYsIDIyMywgOTYsIDEsIDI0MywgMTQyLCAyMjMsIDk2LCAxLCAyMjksIDgyLCAyMjMsIDk2LCAxLCAyMTcsIDEwNiwgCisgICAgMjIzLCA5NiwgMSwgMjQ4LCAyMjksIDIyMywgOTYsIDEsIDE5OCwgMjIzLCA5NiwgMSwgMTkxLCAyMjMsIDk2LCAxLCAyNTIsIAorICAgIDE5OSwgMjIzLCA5NiwgMSwgMTg2LCAyMjMsIDk2LCAxLCAyNTEsIDQxLCAyMjMsIDk2LCAxLCAyMzUsIDE0NywgMjIzLCA5NiwgCisgICAgMSwgMjI3LCAxNjksIDIyMywgOTYsIDEsIDIwNiwgMjIzLCA5NiwgMSwgMjA1LCAyMjMsIDk2LCAxLCAyMzMsIDE0MSwgMjIzLCAKKyAgICA5NiwgMSwgMTkyLCAyMjMsIDk2LCAxLCAyMTIsIDY1LCAyMjMsIDk2LCAxLCAxNjIsIDIyMywgOTYsIDEsIDIzMSwgMTI5LCAKKyAgICAyMjMsIDk2LCAxLCAyMjksIDYxLCAyMjMsIDk2LCAxLCAyMjksIDE1MywgMjIzLCA5NiwgMSwgMjI3LCAxMzksIDIyMywgOTYsIAorICAgIDEsIDYxLCAyMjMsIDk2LCAyNSwgNSwgNzQsIDIyMywgOTYsIDI1LCA1LCA2OSwgMjIzLCA5NiwgMjUsIDUsIDc2LCAyMjMsIAorICAgIDk2LCAyNSwgNSwgMjU0LCAyMTAsIDIyMywgOTYsIDI1LCA1LCA3OCwgMjIzLCA5NiwgMjUsIDUsIDI1MywgMjAwLCAyMjMsIAorICAgIDk2LCAyNSwgNSwgMjQ1LCA2MywgMjIzLCA5NiwgMjUsIDUsIDI0NSwgMjQxLCAyMjMsIDk2LCAxMTcsIDUsIDIyOSwgODQsIAorICAgIDIyMywgOTYsIDExNywgNSwgMjMwLCAzMCwgMjIzLCA5NiwgMTE3LCA1LCAxNTMsIDIyMywgOTYsIDExNywgNSwgMjQyLCA2NywgCisgICAgMjIzLCA5NiwgMjEzLCAxNTIsIDIyMywgOTYsIDIyMSwgMTc1LCA3OSwgMjQsIDEwMCwgMjE2LCA5OCwgMjQsIDEwMCwgMjE2LCAKKyAgICA5NywgMjQsIDEwMCwgMjE2LCA5NSwgMjQsIDEwMCwgMjE2LCAxMDAsIDI0LCAxMDAsIDIyMywgMjQsIDI0LCAxMDAsIDIyMywgCisgICAgOCwgMjQsIDEwMCwgMjIzLCAzLCAyNCwgMTAwLCAyMjMsIDUsIDI0LCAxMDAsIDIyMywgMjEsIDI0LCAxMDAsIDIyMywgMTQsIAorICAgIDI0LCAxMDAsIDIyMywgNywgMjQsIDEwMCwgMjIzLCAyNiwgMjQsIDEwMCwgMjIzLCA5LCAyNCwgMTAwLCAyMjMsIDI4LCAyNCwgCisgICAgMTAwLCAyMjMsIDI1LCAyNCwgMTAwLCAyMzAsIDIxOCwgMjQsIDEwMCwgMjMwLCAyMDksIDI0LCAxMDAsIDIzMCwgMjEyLCAKKyAgICAyNCwgMTAwLCAyMjUsIDgzLCAyNCwgMTAwLCAyMjUsIDk0LCAyNCwgMTAwLCAyMjUsIDk1LCAyNCwgMTAwLCAyMTgsIDIwOSwgCisgICAgMjQsIDEwMCwgMjM2LCA1MywgMjQsIDEwMCwgMjM2LCA2MCwgMjQsIDEwMCwgMjE4LCAyMjAsIDI0LCAxMDAsIDIxOCwgMjA3LCAKKyAgICAyNCwgMTAwLCAyMjUsIDEzMywgMjQsIDEwMCwgMjQxLCAxNzQsIDI0LCAxMDAsIDIxOCwgMjA0LCAxNTUsIDUsIDIyNiwgMzEsIAorICAgIDE1NSwgNSwgMjUwLCAxOTUsIDE1NSwgNSwgMjMzLCA3MiwgMTU1LCA1LCAyMTEsIDI0MywgMTU1LCAxLCA2MSwgMTU1LCAxLCAKKyAgICAyNDAsIDE2MSwgMjM0LCAxOTcsIDE1NSwgMSwgNzQsIDE1NSwgMSwgMjM2LCA0MCwgMTU1LCAxLCA2OSwgMTU1LCAxLCAyMjYsIAorICAgIDk0LCAyNTAsIDE3MSwgMTU1LCAxLCAyMjksIDgzLCAyMzMsIDM0LCAxNTUsIDEsIDIyOSwgODMsIDIzMywgMzUsIDIyMywgCisgICAgMTQ1LCAxNTUsIDEsIDc2LCAxNTUsIDEsIDI1NCwgMjEwLCAxNTUsIDEsIDc4LCAxNTUsIDEsIDE3NiwgMTU1LCAxLCAyMzUsIAorICAgIDE5LCAyMjEsIDIzMCwgMTU1LCAxLCAyMzUsIDE5LCAyMzAsIDcxLCAxNTUsIDEsIDI0MywgMTQyLCAxNTUsIDEsIDI0MywgCisgICAgMTQzLCAyMzAsIDcxLCAxNTUsIDEsIDIyOSwgODIsIDE1NSwgMSwgMjUxLCA0MSwgMTU1LCAxLCAyNTEsIDQyLCAyMzAsIDcxLCAKKyAgICAxNTUsIDEsIDIzNSwgMTQ3LCAxNTUsIDEsIDIyNywgMTcwLCAyMzAsIDcxLCAxNTUsIDEsIDIzNSwgMTQ4LCAyMzEsIDIxMiwgCisgICAgMTU1LCAxLCAyMjcsIDE2OSwgMTU1LCAxLCAyMTUsIDE1NywgMTU1LCAxLCAyMTUsIDE1OCwgMjMxLCAyMTIsIDE1NSwgMSwgCisgICAgMjQ4LCAxNDMsIDE1NSwgMSwgMjQ4LCAxNDQsIDIzMSwgMjEyLCAxNTUsIDEsIDIyOSwgMjM0LCAyMzAsIDcxLCAxNTUsIDEsIAorICAgIDIxNywgMTA2LCAxNTUsIDEsIDIxNywgMTA3LCAyMzAsIDcxLCAxNTUsIDEsIDI0OCwgMjI5LCAxNTUsIDEsIDI0OCwgMjMwLCAKKyAgICAyMzEsIDIxMiwgMTU1LCAxLCAxOTgsIDE1NSwgMSwgMTkxLCAxNTUsIDEsIDIyNiwgOTQsIDIzMCwgNzEsIDE1NSwgMSwgCisgICAgMjUyLCAxOTksIDE1NSwgMSwgMjUyLCAyMDAsIDIzMCwgNzEsIDE1NSwgMSwgMTg2LCAxNTUsIDEsIDE5MiwgMTU1LCAxLCAKKyAgICAyMDUsIDE1NSwgMSwgMjIzLCAxOTEsIDI1NCwgMjE5LCAxNTUsIDEsIDIzMywgMTQxLCAxNTUsIDEsIDIxMiwgNjUsIDE1NSwgCisgICAgMSwgMjIyLCAzNiwgMjMwLCA3MSwgMTU1LCAxLCAyMjIsIDM2LCAyMzEsIDIxMiwgMTU1LCAxLCAyMDYsIDE1NSwgMSwgMTYyLCAKKyAgICAxNTUsIDUsIDI1MCwgMTk2LCAyMTYsIDI1MSwgMTU1LCAyNSwgNSwgMjE3LCA0OCwgMTU1LCAyNSwgNSwgMjE2LCAzNiwgCisgICAgMTU1LCAyNSwgNSwgMjExLCAxOTAsIDE1NSwgMjUsIDUsIDIxMSwgMTkxLCAyMzEsIDc0LCAxNTUsIDI1LCA1LCAyMTgsIDQ4LCAKKyAgICAxNTUsIDI1LCA1LCAyMTgsIDQ5LCAyMzEsIDYyLCAxNTUsIDI1LCA1LCAyMTcsIDY2LCAxNTUsIDI1LCA1LCAyNDcsIDIwMiwgCisgICAgMjMwLCA3MCwgMTU1LCAyNSwgNSwgMjI1LCAxODcsIDE1NSwgMTE3LCA1LCAyMzQsIDE2NCwgMTU1LCAxMTcsIDUsIDIyNSwgCisgICAgMTk5LCAxNTUsIDExNywgNSwgMjUxLCAyNywgMTU1LCAyMjYsIDQ0LCAxNTUsIDQzLCAyMjMsIDcyLCAxNTUsIDQ0LCAyMjMsIAorICAgIDcyLCAxNTUsIDIyNiwgODMsIDI1NCwgMTI1LCAxNTUsIDIyNiwgODMsIDIzMSwgMjI5LCAxNTUsIDIyNiwgODMsIDIzMiwgCisgICAgOTMsIDE1NSwgMjI2LCA4MywgMjExLCAyMzgsIDE1NSwgMjI2LCA4MywgMjI2LCA0NSwgMTU1LCAyMjYsIDgzLCAyMzIsIAorICAgIDIxMSwgMTU1LCAyMjYsIDgzLCAyMzIsIDg3LCAxNTUsIDIyNiwgODMsIDI1NSwgMiwgMTU1LCAyMjYsIDgzLCAyNTUsIDMsIAorICAgIDI1NSwgMiwgMTU1LCAyMjYsIDgzLCAyMjUsIDU0LCAxNTUsIDIxNSwgOTQsIDIyNiwgODMsIDIyNSwgNTQsIDE1NSwgMjI2LCAKKyAgICA0MCwgMTU1LCAyMSwgMjEwLCA4NiwgMTU1LCAyMSwgMTExLCAxNTUsIDIxLCAxMDUsIDE1NSwgMjEsIDE1OCwgMTU1LCAyMSwgCisgICAgMTYxLCAxNTUsIDIxLCAxOTAsIDE1NSwgMjEsIDE5NSwgMTU1LCAyMSwgMTk5LCAxNTUsIDIxLCAxOTYsIDE1NSwgMjEsIAorICAgIDIwMSwgMTU1LCAyMjYsIDgzLCAyMTYsIDcwLCAyMTUsIDEwNywgMTU1LCAyMjYsIDgzLCAyMzUsIDE3NCwgMTcyLCAxLCA2MSwgCisgICAgMTcyLCAxLCA3NCwgMTcyLCAxLCA2OSwgMTcyLCAxLCA3NiwgMTcyLCAxLCAyNTQsIDIxMCwgMTcyLCAxLCA3OCwgMTcyLCAxLCAKKyAgICAxNzYsIDE3MiwgMSwgMjM0LCAxMzgsIDE3MiwgMSwgMjQzLCAxNDIsIDE3MiwgMSwgMjQzLCAwLCAxNzIsIDEsIDIyOCwgCisgICAgMjUwLCAxNzIsIDEsIDIyOSwgODIsIDE3MiwgMSwgMjUwLCAxNjUsIDE3MiwgMSwgMjUwLCAxMjAsIDE3MiwgMSwgMjM1LCAKKyAgICAxNDcsIDE3MiwgMSwgMjM1LCAxMjAsIDE3MiwgMSwgMjI4LCAyNDAsIDE3MiwgMSwgMjI4LCAyNDIsIDE3MiwgMSwgMjI4LCAKKyAgICAyNDEsIDE3MiwgMSwgMjE3LCAxMDYsIDE3MiwgMSwgMjE2LCAyMDksIDE3MiwgMSwgMjQ4LCAyMjksIDE3MiwgMSwgMjQ4LCAKKyAgICAzMywgMTcyLCAxLCAyMjcsIDIxMSwgMTcyLCAxLCAxOTgsIDE3MiwgMSwgMjQ4LCAxNDMsIDE3MiwgMSwgMTkxLCAxNzIsIDEsIAorICAgIDIyNCwgMjIzLCAxNzIsIDEsIDIyNSwgMTUwLCAxNzIsIDEsIDI1MiwgMTk5LCAxNzIsIDEsIDI1MiwgMjYsIDE3MiwgMSwgCisgICAgMjMwLCAxMDAsIDE3MiwgMSwgMTg2LCAxNzIsIDEsIDI1MiwgMTE5LCAxNzIsIDEsIDE5MiwgMTcyLCAxLCAyMDUsIDE3MiwgCisgICAgMSwgMjMzLCAxNDEsIDE3MiwgMSwgMjE0LCAyNywgMTcyLCAxLCAyMTgsIDIyNSwgMTcyLCAxLCAyMDYsIDE3MiwgMSwgMTYyLCAKKyAgICAxNzIsIDI1LCA1LCAyNTUsIDgyLCAxNzIsIDI1LCA1LCA3NCwgMTcyLCAyNSwgNSwgMjM2LCA0MCwgMTcyLCAyNSwgNSwgCisgICAgMjQ1LCAyMDMsIDE3MiwgMjUsIDUsIDY5LCAxNzIsIDI1LCA1LCAyMjYsIDIzOCwgMTcyLCAyNSwgNSwgNzgsIDE3MiwgMjUsIAorICAgIDUsIDI1NCwgMjEwLCAxNzIsIDI1LCA1LCAyNTMsIDIwMCwgMTcyLCAyNSwgNSwgMjE0LCAyMTQsIDE3MiwgMTE3LCA1LCAKKyAgICAxOTIsIDE3MiwgMTE3LCA1LCAyMDUsIDE3MiwgMTE3LCA1LCAyMzMsIDE0MSwgMTcyLCAxMTcsIDUsIDIxMiwgNjUsIDE3MiwgCisgICAgMSwgNDAsIDIzNSwgMjksIDE3MiwgMSwgNDAsIDI0MywgMjA5LCAxNzIsIDEsIDQwLCAyMjksIDg0LCAxNzIsIDExNywgNSwgCisgICAgNDAsIDIyOSwgODQsIDE3MiwgMSwgNDAsIDI1MCwgMTY2LCAxNzIsIDEsIDQwLCAyMTcsIDE1MywgMTcyLCAxLCA0MCwgMjMwLCAKKyAgICAzMCwgMTcyLCAxLCA0MCwgMjI2LCAxMDksIDE3MiwgMSwgNDAsIDIxMSwgMTE3LCAxNzIsIDEsIDQwLCAxNTMsIDE3MiwgMSwgCisgICAgNDAsIDE1NiwgMTcyLCAxLCA0MCwgMjE4LCAyMjgsIDE3MiwgMTE3LCA1LCA0MCwgMTk0LCAxNzIsIDExNywgNSwgNDAsIAorICAgIDI0MiwgNjcsIDE3MiwgMjEsIDIxMCwgODYsIDE3MiwgMjEsIDExMSwgMTcyLCAyMSwgMTA1LCAxNzIsIDIxLCAxNTgsIDE3MiwgCisgICAgMjEsIDE2MSwgMTcyLCAyMSwgMTkwLCAxNzIsIDIxLCAxOTUsIDE3MiwgMjEsIDE5OSwgMTcyLCAyMSwgMTk2LCAxNzIsIDIxLCAKKyAgICAyMDEsIDE3MiwgMjI0LCAxNDQsIDIxOCwgMjUzLCAxNzIsIDIyNCwgMTQ0LCAyNDgsIDE4NiwgMTcyLCAyMjQsIDE0NCwgNTIsIAorICAgIDI0OCwgMTg2LCAxNzIsIDIyNCwgMTQ0LCAyMTUsIDIxMiwgMjQ4LCAxODYsIDY4LCAxLCAyMzQsIDEzMiwgMjQzLCAxNDIsIAorICAgIDY4LCAxLCAyMzQsIDEzMiwgMjUxLCA0MSwgNjgsIDEsIDIzNCwgMTMyLCAyNTAsIDE2NSwgNjgsIDEsIDIzNCwgMTMyLCAKKyAgICAyMzUsIDE0NywgNjgsIDEsIDIzNCwgMTMyLCAyMzUsIDEyMCwgNjgsIDEsIDIzNCwgMTMyLCAyMjcsIDE2OSwgNjgsIDEsIAorICAgIDIzNCwgMTMyLCAyMTUsIDE1NywgNjgsIDEsIDIzNCwgMTMyLCAyMTUsIDE0NSwgNjgsIDEsIDIzNCwgMTMyLCAyNDgsIDE0MywgCisgICAgNjgsIDEsIDIzNCwgMTMyLCAyNDgsIDEyNywgNjgsIDEsIDIzNCwgMTMyLCAyNDgsIDMzLCA2OCwgMSwgMjM0LCAxMzIsIAorICAgIDE5OCwgNjgsIDEsIDIzNCwgMTMyLCAyMDYsIDY4LCAxLCAyMzQsIDEzMiwgMTYyLCA2OCwgMSwgMjM0LCAxMzIsIDI0MSwgCisgICAgMTk2LCA2OCwgMSwgMjM0LCAxMzIsIDI0NCwgMjA0LCA2OCwgNTgsIDEsIDIzNCwgMTMyLCAyMjMsIDExMiwgNjgsIDEsIAorICAgIDIzNCwgMTMyLCAyMTEsIDE2NSwgNjgsIDEsIDIzNCwgMTMyLCAyMTAsIDExNiwgNjgsIDEsIDIzNCwgMTMyLCAyMDUsIDY4LCAKKyAgICAyMzIsIDE1MSwgMjM0LCAxMzIsIDIyNywgMSwgNjgsIDIzMiwgMTUxLCAyMzQsIDEzMiwgMjI0LCA0NiwgNjgsIDIzMiwgCisgICAgMTUxLCAyMzQsIDEzMiwgMjQxLCAxMjgsIDY4LCAxNiwgMjU0LCAxOTksIDI0NSwgMzgsIDY4LCAxNiwgMjU0LCAxOTksIAorICAgIDExMSwgNjgsIDE2LCAyNTQsIDE5OSwgMTA1LCA2OCwgMSwgMjU0LCAxOTksIDIwNSwgNjgsIDUsIDIyNiwgMjcsIDIzNCwgCisgICAgMjE5LCAyMTYsIDMxLCAzOSwgMjA4LCAxLCAxMjEsIDIzNCwgMzQsIDM5LCAyMDgsIDEsIDEyNSwgMjM0LCAzNCwgMzksIAorICAgIDIwOCwgMSwgMTIxLCAyMzQsIDExMSwgMzksIDIwOCwgMSwgMTI1LCAyMzQsIDExMSwgMzksIDIwOCwgMSwgMTIxLCAyMzQsIAorICAgIDEyMCwgMzksIDIwOCwgMSwgMTI1LCAyMzQsIDEyMCwgMzksIDIwOCwgMSwgMTIxLCAyNDIsIDE4MSwgMzksIDIwOCwgMSwgCisgICAgMTI1LCAyNDIsIDE4MSwgMzksIDIwOCwgMSwgMTIxLCAyMjksIDksIDM5LCAyMDgsIDEsIDEyNSwgMjI5LCA5LCAzOSwgMjA4LCAKKyAgICAxLCAxMjEsIDI0OSwgMjQ2LCAzOSwgMjA4LCAxLCAxMjUsIDI0OSwgMjQ2LCAzOSwgMjA4LCAxLCAxMjEsIDI1MCwgOTQsIAorICAgIDM5LCAyMDgsIDEsIDEyNSwgMjUwLCA5NCwgMzksIDIwOCwgMSwgMTIxLCAyMTksIDYwLCAzOSwgMjA4LCAxLCAxMjUsIDIxOSwgCisgICAgNjAsIDM5LCAyMDgsIDEsIDEyMSwgMjI3LCAxMzgsIDM5LCAyMDgsIDEsIDEyNSwgMjI3LCAxMzgsIDM5LCAyMDgsIDEsIAorICAgIDEyMSwgMjQ3LCAxNTMsIDM5LCAyMDgsIDEsIDEyNSwgMjQ3LCAxNTMsIDM5LCAyMDgsIDEsIDEyMSwgMTEyLCAzOSwgMjA4LCAKKyAgICAxLCAxMjUsIDExMiwgMzksIDIwOCwgMSwgMTIxLCAyMTYsIDE1NywgMzksIDIwOCwgMSwgMTI1LCAyMTYsIDE1NywgMzksIAorICAgIDIwOCwgMSwgMTIxLCAyMjgsIDc5LCAzOSwgMjA4LCAxLCAxMjUsIDIyOCwgNzksIDM5LCAyMDgsIDEsIDEyMSwgMjUxLCAKKyAgICAyMTMsIDM5LCAyMDgsIDEsIDEyNSwgMjUxLCAyMTMsIDM5LCAyMDgsIDEsIDEyMSwgMjI1LCAxOSwgMzksIDIwOCwgMSwgCisgICAgMTI1LCAyMjUsIDE5LCAzOSwgMjA4LCAxLCAxMjEsIDIyNSwgMTI0LCAzOSwgMjA4LCAxLCAxMjUsIDIyNSwgMTI0LCAzOSwgCisgICAgMjA4LCAxLCAxMjEsIDI0NCwgNTEsIDM5LCAyMDgsIDEsIDEyNSwgMjQ0LCA1MSwgMzksIDIwOCwgMSwgMTIxLCAyMzAsIAorICAgIDE2NiwgMzksIDIwOCwgMSwgMTI1LCAyMzAsIDE2NiwgMzksIDIwOCwgMSwgMTIxLCAyMTAsIDI0NCwgMzksIDIwOCwgMSwgCisgICAgMTI1LCAyMTAsIDI0NCwgMzksIDIwOCwgMSwgMTIxLCAyMjIsIDIxMywgMzksIDIwOCwgMSwgMTI1LCAyMjIsIDIxMywgMzksIAorICAgIDIwOCwgMSwgMTIxLCAyMzIsIDE2MiwgMzksIDIwOCwgMSwgMTI1LCAyMzIsIDE2MiwgMzksIDIwOCwgMSwgMTIxLCAyMTMsIAorICAgIDEzOCwgMzksIDIwOCwgMSwgMTI1LCAyMTMsIDEzOCwgMzksIDIwOCwgMSwgMTIxLCAyNDEsIDc1LCAzOSwgMjA4LCAxLCAKKyAgICAxMjUsIDI0MSwgNzUsIDM5LCAyMDgsIDEsIDEyMSwgNzgsIDM5LCAyMDgsIDEsIDEyNSwgNzgsIDM5LCAyMDgsIDIzMSwgCisgICAgMjA5LCAyMzQsIDIzNiwgMzksIDIwOCwgMjUsIDI1NSwgODIsIDM5LCAyMDgsIDI1LCA3NCwgMzksIDIwOCwgMjUsIDIxNCwgCisgICAgMjE0LCAzOSwgMjA4LCAyNSwgNjksIDM5LCAyMDgsIDI1LCA3NiwgMzksIDIwOCwgMjUsIDc4LCAzOSwgMjA4LCAyMzEsIAorICAgIDIwOSwgMjM0LCAxMTQsIDM5LCAyMDgsIDI1LCAyNDAsIDEyNiwgMzksIDIwOCwgMjUsIDIxNCwgMjEzLCAzOSwgMjA4LCAyNSwgCisgICAgMjE0LCAyMjksIDM5LCAyMDgsIDI1LCAyNTMsIDE5OCwgMzksIDIwOCwgMjUsIDI1MywgMTc1LCAzOSwgMjA4LCAyNSwgMjU0LCAKKyAgICAxMzEsIDM5LCAyMDgsIDI1LCAyNTQsIDE0NCwgMzksIDIwOCwgMTM4LCAyMzEsIDIwOSwgMjQ1LCAxODgsIDM5LCAyMDgsIAorICAgIDEzOCwgMjMxLCAyMDksIDIyNywgMjEwLCAzOSwgMjA4LCAxMzgsIDIzMSwgMjA5LCAyMTYsIDE1NywgMzksIDIwOCwgMTM4LCAKKyAgICAyMzEsIDIwOSwgMjE5LCA0NCwgMzksIDIwOCwgMTYsIDIzNCwgMTksIDM5LCAyMDgsIDE2LCAyMjcsIDIxMCwgMzksIDIwOCwgCisgICAgMTYsIDIyMSwgMjU1LCAzOSwgMjA4LCAxNiwgMjQxLCA3NiwgMjQxLCA3MSwgMzksIDIwOCwgMTYsIDIzNCwgMjgsIDIzNCwgCisgICAgMjcsIDE4OCwgMTg3LCAxLCA3NiwgMTg4LCAxODcsIDEsIDc4LCAxODgsIDE4NywgMSwgMjUwLCAxNjUsIDE4OCwgMTg3LCAxLCAKKyAgICAyMjcsIDE2OSwgMTg4LCAxODcsIDEsIDIxNSwgMTU3LCAxODgsIDE4NywgMSwgMjE1LCAxNDUsIDE4OCwgMTg3LCAxLCAyNDgsIAorICAgIDE0MywgMTg4LCAxODcsIDEsIDI0OCwgMTI3LCAxODgsIDE4NywgMSwgMjI4LCAxMTUsIDE4OCwgMTg3LCAxLCAyMjAsIDEwNCwgCisgICAgMTg4LCAxODcsIDEsIDIxOCwgMjI1LCAxODgsIDE4NywgMjUsIDUsIDIzNiwgNDAsIDE4OCwgMTg3LCAyNSwgNSwgMjE0LCAKKyAgICAxMTgsIDE4OCwgMTg3LCAyNSwgNSwgMjU1LCA0NiwgMTg4LCAxODcsIDI1LCA1LCAyNTMsIDIwMCwgMTg4LCAxODcsIDI1LCAKKyAgICA1LCAyNTUsIDM5LCAxODgsIDE4NywgMjUwLCAxMzMsIDE4OCwgMTg3LCAyNTQsIDIxNSwgMjM0LCAxMDQsIDE4OCwgMTg3LCAKKyAgICAyNTQsIDExMSwgMTg4LCAxODcsIDMsIDIyMywgNzcsIDc5LCAxODgsIDE4NywgMjExLCAyMDksIDIyMywgNzcsIDc5LCAxODgsIAorICAgIDE4NywgMjUsIDUsIDIxMywgMTQ3LCAxODgsIDE4NywgMjEzLCAxNTIsIDI5LCAzLCAyMTUsIDEzOCwgMjksIDMsIDIxNSwgCisgICAgMTQxLCAyOSwgMywgMjE1LCAxNDQsIDI5LCAzLCAyMTUsIDE0MiwgMjksIDMsIDIxNSwgMTQzLCAyOSwgMywgMjE1LCAxNDAsIAorICAgIDI5LCAzLCAyNDgsIDEyMSwgMjksIDMsIDI0OCwgMTIzLCAyOSwgMywgMjQ4LCAxMjYsIDI5LCAzLCAyNDgsIDEyNCwgMjksIAorICAgIDMsIDI0OCwgMTI1LCAyOSwgMywgMjQ4LCAxMjIsIDI5LCAzLCAyNDYsIDM2LCAyOSwgMywgMjQ2LCAzOSwgMjksIDMsIDI0NiwgCisgICAgNDUsIDI5LCAzLCAyNDYsIDQzLCAyOSwgMywgMjQ2LCA0NCwgMjksIDMsIDI0NiwgMzcsIDI5LCAzLCAyNTAsIDIxMiwgMjksIAorICAgIDMsIDI1MCwgMjA2LCAyOSwgMywgMjUwLCAyMDgsIDI5LCAzLCAyNTAsIDIxMSwgMjksIDMsIDI1MCwgMjA5LCAyOSwgMywgCisgICAgMjUwLCAyMTAsIDI5LCAzLCAyNTAsIDIwNywgMjksIDMsIDI1MiwgMTE5LCAyOSwgMywgMjUyLCA5OCwgMjksIDMsIDI1MiwgCisgICAgMTEwLCAyOSwgMywgMjUyLCAxMTgsIDI5LCAzLCAyNTIsIDExMywgMjksIDMsIDI1MiwgMTE0LCAyOSwgMywgMjUyLCAxMDIsIAorICAgIDE4OCwgMTg3LCAxLCAyMzQsIDI1LCAxODgsIDE4NywgMSwgMjIxLCAyNTUsIDE4OCwgMTg3LCAxLCAyMzMsIDExNSwgMTg4LCAKKyAgICAxODcsIDEsIDIzMCwgMTc3LCAxODgsIDE4NywgMSwgMTkxLCAxODgsIDE4NywgMSwgMTk4LCAxODgsIDE4NywgMSwgMjUwLCAKKyAgICAxMTAsIDE4OCwgMTg3LCAxLCAyMTYsIDkxLCAxODgsIDE4NywgMSwgMjM0LCAxMDcsIDE4OCwgMTg3LCAxLCAyMjgsIDI1NSwgCisgICAgMTg4LCAxODcsIDEsIDIxNiwgMTUxLCAxODgsIDE4NywgMSwgMjEyLCA2MCwgMTg4LCAxODcsIDEsIDIxMSwgNjksIDE4OCwgCisgICAgMTg3LCAxLCAyNDAsIDIyMywgMTg4LCAxODcsIDEsIDIxNCwgMTkwLCAxODgsIDE4NywgMSwgNzQsIDE4OCwgMTg3LCAxLCAKKyAgICAyMjUsIDE0NSwgMTg4LCAxODcsIDEsIDI1MywgMjEwLCAxODgsIDE4NywgMSwgMjQyLCAxNzQsIDE4OCwgMTg3LCAxLCAyMzUsIAorICAgIDExOCwgMTg4LCAxODcsIDEsIDIyMywgMTY5LCAxODgsIDE4NywgMSwgMjUyLCAxOTksIDE4OCwgMTg3LCAxLCAyMzUsIDEwNiwgCisgICAgMTg4LCAxODcsIDEsIDI0NywgMjI3LCAxODgsIDE4NywgMSwgMjQyLCAyMjgsIDE4OCwgMTg3LCAxLCAyNDgsIDEzLCAxODgsIAorICAgIDE4NywgMSwgMjUyLCAyNCwgMTg4LCAxODcsIDEsIDIzNCwgMjYsIDIzMiwgMTM0LCAxODgsIDE4NywgMSwgMjMzLCAxMTYsIAorICAgIDIzMiwgMTM0LCAxODgsIDE4NywgMSwgMjMwLCAxNzgsIDIzMiwgMTM0LCAxODgsIDE4NywgMSwgMjI2LCA5NCwgMjMyLCAKKyAgICAxMzQsIDE4OCwgMTg3LCAxLCAyMjksIDIzNCwgMjMyLCAxMzQsIDE4OCwgMTg3LCAxLCAyMTYsIDkyLCAyMzIsIDEzNCwgCisgICAgMTg4LCAxODcsIDEsIDIyOSwgMCwgMjMyLCAxMzQsIDE4OCwgMTg3LCAxLCAyNDAsIDE2MSwgMjMyLCAxMzQsIDE4OCwgMTg3LCAKKyAgICAyNSwgNSwgMjI2LCAxOTksIDE4OCwgMTg3LCAyNSwgNSwgMjM2LCA0LCAxODgsIDE4NywgMjUsIDUsIDI1NCwgMTMwLCAxODgsIAorICAgIDE4NywgMjUsIDUsIDIxMSwgMzgsIDE4OCwgMTg3LCAyNSwgNSwgMjE5LCAzNCwgMTg4LCAxODcsIDI1LCA1LCAyMTQsIDE4NywgCisgICAgMTg4LCAxODcsIDI1LCA1LCAyNTAsIDEzMSwgMTg4LCAxODcsIDI1LCA1LCAyMjcsIDE5NSwgMTg4LCAxODcsIDI1MCwgMTMyLCAKKyAgICAxODgsIDE4NywgMjMyLCA5MCwgMjM1LCAxNTYsIDE4OCwgMTg3LCAyNTQsIDU0LCAyMzUsIDE1NiwgMTg4LCAxODcsIDIxLCAKKyAgICAyMTAsIDg2LCAxODgsIDE4NywgMjEsIDExMSwgMTg4LCAxODcsIDIxLCAxMDUsIDE4OCwgMTg3LCAyMSwgMTU4LCAxODgsIAorICAgIDE4NywgMjEsIDE2MSwgMTg4LCAxODcsIDIxLCAxOTAsIDE4OCwgMTg3LCAyMSwgMTk1LCAxODgsIDE4NywgMjEsIDE5OSwgCisgICAgMTg4LCAxODcsIDIxLCAxOTYsIDE4OCwgMTg3LCAyMSwgMjAxLCAyNCwgMTQzLCAyMjcsIDgxLCAyNCwgMTQzLCAyMjcsIDg2LCAKKyAgICAyNCwgMTQzLCAyMTAsIDI0MywgMjQsIDE0MywgMjEwLCAyNDIsIDI0LCAxNDMsIDIxMCwgMjQxLCAyNCwgMTQzLCAyMTUsIAorICAgIDIzLCAyNCwgMTQzLCAyMTUsIDI2LCAyNCwgMTQzLCAyMTAsIDIxMCwgMjQsIDE0MywgMjEwLCAyMDYsIDI0LCAxNDMsIDI0NSwgCisgICAgNjIsIDI0LCAxNDMsIDI0NSwgNjAsIDI0LCAxNDMsIDI0NSwgNjEsIDI0LCAxNDMsIDI0NSwgNTgsIDI0LCAxNDMsIDI0MCwgCisgICAgMTUxLCAyNCwgMTQzLCAyNDAsIDE1MCwgMjQsIDE0MywgMjQwLCAxNDgsIDI0LCAxNDMsIDI0MCwgMTQ5LCAyNCwgMTQzLCAKKyAgICAyNDAsIDE1NCwgMjQsIDE0MywgMjQwLCAxNDcsIDI0LCAxNDMsIDI0MCwgMTQ2LCAyNCwgMTQzLCAyNDAsIDE1NiwgMjQsIAorICAgIDE0MywgMjU0LCA0MSwgMjQsIDE0MywgMjU0LCA0MCwgMjQsIDkwLCAyMjgsIDIyNCwgMjQsIDkwLCAyMjgsIDIzMCwgMjQsIAorICAgIDkwLCAyMTgsIDIwNiwgMjQsIDkwLCAyMTgsIDIwNSwgMjQsIDkwLCAyMTYsIDk3LCAyNCwgOTAsIDIxNiwgOTUsIDI0LCA5MCwgCisgICAgMjE2LCA5NCwgMjQsIDkwLCAyMTYsIDEwMCwgMjQsIDkwLCAyMTYsIDEwMSwgMjQsIDkwLCAyMTYsIDkzLCAyNCwgOTAsIAorICAgIDIyMywgOCwgMjQsIDkwLCAyMjMsIDIzLCAyNCwgOTAsIDIxOCwgMjEyLCAyNCwgOTAsIDIyMywgMjAsIDI0LCA5MCwgMjIzLCAKKyAgICAxMCwgMjQsIDkwLCAyMjMsIDEyLCAyNCwgOTAsIDIyMiwgMjU1LCAyNCwgOTAsIDIyMywgMCwgMjQsIDkwLCAyMzQsIDIyNCwgCisgICAgMjQsIDkwLCAyMzAsIDIxNywgMjQsIDkwLCAyMzAsIDIxMSwgMjQsIDkwLCAyMTgsIDIxNiwgMjQsIDkwLCAyMzAsIDIxNCwgCisgICAgMjQsIDkwLCAyMzAsIDIyMCwgMjQsIDkwLCAyMjUsIDc5LCAyNCwgOTAsIDIyNSwgODgsIDI0LCA5MCwgMjI1LCA5MiwgMjQsIAorICAgIDkwLCAyMTgsIDIxNCwgMjQsIDkwLCAyMjUsIDgyLCAyNCwgOTAsIDIyNSwgOTYsIDI0LCA5MCwgMjI1LCA5NywgMjQsIDkwLCAKKyAgICAyMTksIDE0MiwgMjQsIDkwLCAyMTksIDE0NSwgMjQsIDkwLCAyMTgsIDIxMCwgMjQsIDkwLCAyMTgsIDIwOCwgMjQsIDkwLCAKKyAgICAyMTksIDE0MCwgMjQsIDkwLCAyMTksIDE0OCwgMjQsIDkwLCAyMTksIDE0OSwgMjQsIDkwLCAyMTksIDEzNCwgMjQsIDkwLCAKKyAgICAyMTksIDE0NywgMjQsIDkwLCAyMjYsIDM0LCAyNCwgOTAsIDIyNiwgMzUsIDI0LCA5MCwgMjExLCAyNCwgMjQsIDkwLCAyMTEsIAorICAgIDI1LCAyNCwgOTAsIDI1MCwgNTIsIDI0LCA5MCwgMjUwLCA1MSwgMjQsIDkwLCAyMTgsIDIyMSwgMjQsIDkwLCAyMjUsIDEzMSwgCisgICAgMjQsIDkwLCAyMjUsIDEzMCwgMTAsIDE0LCAyMzgsIDMxLCAxMCwgMTQsIDIzOCwgMzAsIDEwLCAxNCwgMjM4LCAyOSwgMTAsIAorICAgIDE0LCAyMzgsIDI4LCAxMCwgMTQsIDIzOCwgMjcsIDEwLCAxNCwgMjM4LCAyNiwgMTAsIDE0LCAyMzgsIDI1LCAxMCwgMTQsIAorICAgIDIzOCwgMjQsIDEwLCAxNCwgMjM4LCAyMywgMTAsIDE0LCAyMzgsIDIyLCAxMCwgMTQsIDIzOCwgMjEsIDEwLCAxNCwgMjM4LCAKKyAgICAyMCwgMTAsIDE0LCAyMzgsIDE5LCAxMCwgMTQsIDIzOCwgMTgsIDEwLCAxNCwgMjM4LCAxNywgMTAsIDE0LCAyMzgsIDE2LCAKKyAgICAxMCwgMTQsIDIzOCwgMTUsIDEwLCAxNCwgMjM4LCAxNCwgMTAsIDE0LCAyMzgsIDEzLCAxMCwgMTQsIDIzOCwgMTIsIDEwLCAKKyAgICAxNCwgMjM4LCAxMSwgMTAsIDE0LCAyMzgsIDEwLCAxMCwgMTQsIDIzOCwgOSwgMTAsIDE0LCAyMzgsIDgsIDEwLCAxNCwgCisgICAgMjM4LCA3LCAxMCwgMTQsIDIzOCwgNiwgMTAsIDE0LCAyMzgsIDUsIDEwLCAxNCwgMjM4LCA0LCAxMCwgMTQsIDIzOCwgMywgCisgICAgMTAsIDE0LCAyMzgsIDIsIDEwLCAxNCwgMjM4LCAxLCAxMCwgMTQsIDIzOCwgMCwgMTAsIDE0LCAyMzcsIDI1NSwgMTAsIDE0LCAKKyAgICAyMzcsIDI1NCwgMTAsIDE0LCAyMzcsIDI1MywgMTAsIDE0LCAyMzcsIDI1MiwgMTAsIDE0LCAyMzcsIDI1MSwgMTAsIDE0LCAKKyAgICAyMzcsIDI1MCwgMTAsIDE0LCAyMzcsIDI0OSwgMTAsIDE0LCAyMzcsIDI0OCwgMTAsIDE0LCAyMzcsIDI0NywgMTAsIDE0LCAKKyAgICAyMzcsIDI0NiwgMTAsIDE0LCAyMzcsIDI0NSwgMTAsIDE0LCAyMzcsIDI0NCwgMTAsIDE0LCAyMzcsIDI0MywgMTAsIDE0LCAKKyAgICAyMzcsIDI0MiwgMTAsIDE0LCAyMzcsIDI0MSwgMTAsIDE0LCAyMzcsIDI0MCwgMTAsIDE0LCAyMzcsIDIzOSwgMTAsIDE0LCAKKyAgICAyMzcsIDIzOCwgMTAsIDE0LCAyMzcsIDIzNywgMTAsIDE0LCAyMzcsIDIzNiwgMTAsIDE0LCAyMzcsIDIzNSwgMTAsIDE0LCAKKyAgICAyMzcsIDIzNCwgMTAsIDE0LCAyMzcsIDIzMywgMTAsIDE0LCAyMzcsIDIzMiwgMTAsIDE0LCAyMzcsIDIzMSwgMTAsIDE0LCAKKyAgICAyMzcsIDIzMCwgMTAsIDE0LCAyMzcsIDIyOSwgMTAsIDE0LCAyMzcsIDIyOCwgMTAsIDE0LCAyMzcsIDIyNywgMTAsIDE0LCAKKyAgICAyMzcsIDIyNiwgMTAsIDE0LCAyMzcsIDIyNSwgMTAsIDE0LCAyMzcsIDIyNCwgMTAsIDE0LCAyMzcsIDIyMywgMTAsIDE0LCAKKyAgICAyMzcsIDIyMiwgMTAsIDE0LCAyMzcsIDIyMSwgMTAsIDE0LCAyMzcsIDIyMCwgMTAsIDE0LCAyMzcsIDIxOSwgMTAsIDE0LCAKKyAgICAyMzcsIDIxOCwgMTAsIDE0LCAyMzcsIDIxNywgMTAsIDE0LCAyMzcsIDIxNiwgMTAsIDE0LCAyMzcsIDIxNSwgMTAsIDE0LCAKKyAgICAyMzcsIDIxNCwgMTAsIDE0LCAyMzcsIDIxMywgMTAsIDE0LCAyMzcsIDIxMiwgMTAsIDE0LCAyMzcsIDIxMSwgMTAsIDE0LCAKKyAgICAyMzcsIDIxMCwgMTAsIDE0LCAyMzcsIDIwOSwgMTAsIDE0LCAyMzcsIDIwOCwgMTAsIDE0LCAyMzcsIDIwNywgMTAsIDE0LCAKKyAgICAyMzcsIDIwNiwgMTAsIDE0LCAyMzcsIDIwNSwgMTAsIDE0LCAyMzcsIDIwNCwgMTAsIDE0LCAyMzcsIDIwMywgMTAsIDE0LCAKKyAgICAyMzcsIDIwMiwgMTAsIDE0LCAyMzcsIDIwMSwgMTAsIDE0LCAyMzcsIDIwMCwgMTAsIDE0LCAyMzcsIDE5OSwgMTAsIDE0LCAKKyAgICAyMzcsIDE5OCwgMTAsIDE0LCAyMzcsIDE5NywgMTAsIDE0LCAyMzcsIDE5NiwgMTAsIDE0LCAyMzcsIDE5NSwgMTAsIDE0LCAKKyAgICAyMzcsIDE5NCwgMTAsIDE0LCAyMzcsIDE5MywgMTAsIDE0LCAyMzcsIDE5MiwgMTAsIDE0LCAyMzcsIDE5MSwgMTAsIDE0LCAKKyAgICAyMzcsIDE5MCwgMTAsIDE0LCAyMzcsIDE4OSwgMTAsIDE0LCAyMzcsIDE4OCwgMTAsIDE0LCAyMzcsIDE4NywgMTAsIDE0LCAKKyAgICAyMzcsIDE4NiwgMTAsIDE0LCAyMzcsIDE4NSwgMTAsIDE0LCAyMzcsIDE4NCwgMTAsIDE0LCAyMzcsIDE4MywgMTAsIDE0LCAKKyAgICAyMzcsIDE4MiwgMTAsIDE0LCAyMzcsIDE4MSwgMTAsIDE0LCAyMzcsIDE4MCwgMTAsIDE0LCAyMzcsIDE3OSwgMTAsIDE0LCAKKyAgICAyMzcsIDE3OCwgMTAsIDE0LCAyMzcsIDE3NywgMTAsIDE0LCAyMzcsIDE3NiwgMTAsIDE0LCAyMzcsIDE3NSwgMTAsIDE0LCAKKyAgICAyMzcsIDE3NCwgMTAsIDE0LCAyMzcsIDE3MywgMTAsIDE0LCAyMzcsIDE3MiwgMTAsIDE0LCAyMzcsIDE3MSwgMTAsIDE0LCAKKyAgICAyMzcsIDE3MCwgMTAsIDE0LCAyMzcsIDE2OSwgMTAsIDE0LCAyMzcsIDE2OCwgMTAsIDE0LCAyMzcsIDE2NywgMTAsIDE0LCAKKyAgICAyMzcsIDE2NiwgMTAsIDE0LCAyMzcsIDE2NSwgMTAsIDE0LCAyMzcsIDE2NCwgMTAsIDE0LCAyMzcsIDE2MywgMTAsIDE0LCAKKyAgICAyMzcsIDE2MiwgMTAsIDE0LCAyMzcsIDE2MSwgMTAsIDE0LCAyMzcsIDE2MCwgMTAsIDE0LCAyMzcsIDE1OSwgMTAsIDE0LCAKKyAgICAyMzcsIDE1OCwgMTAsIDE0LCAyMzcsIDE1NywgMTAsIDE0LCAyMzcsIDE1NiwgMTAsIDE0LCAyMzcsIDE1NSwgMTAsIDE0LCAKKyAgICAyMzcsIDE1NCwgMTAsIDE0LCAyMzcsIDE1MywgMTAsIDE0LCAyMzcsIDE1MiwgMTAsIDE0LCAyMzcsIDE1MSwgMTAsIDE0LCAKKyAgICAyMzcsIDE1MCwgMTAsIDE0LCAyMzcsIDE0OSwgMTAsIDE0LCAyMzcsIDE0OCwgMTAsIDE0LCAyMzcsIDE0NywgMTAsIDE0LCAKKyAgICAyMzcsIDE0NiwgMTAsIDE0LCAyMzcsIDE0NSwgMTAsIDE0LCAyMzcsIDE0NCwgMTAsIDE0LCAyMzcsIDE0MywgMTAsIDE0LCAKKyAgICAyMzcsIDE0MiwgMTAsIDE0LCAyMzcsIDE0MSwgMTAsIDE0LCAyMzcsIDE0MCwgMTAsIDE0LCAyMzcsIDEzOSwgMTAsIDE0LCAKKyAgICAyMzcsIDEzOCwgMTAsIDE0LCAyMzcsIDEzNywgMTAsIDE0LCAyMzcsIDEzNiwgMTAsIDE0LCAyMzcsIDEzNSwgMTAsIDE0LCAKKyAgICAyMzcsIDEzNCwgMTAsIDE0LCAyMzcsIDEzMywgMTAsIDE0LCAyMzcsIDEzMiwgMTAsIDE0LCAyMzcsIDEzMSwgMTAsIDE0LCAKKyAgICAyMzcsIDEzMCwgMTAsIDE0LCAyMzcsIDEyOSwgMTAsIDE0LCAyMzcsIDEyOCwgMTAsIDE0LCAyMzcsIDEyNywgMTAsIDE0LCAKKyAgICAyMzcsIDEyNiwgMTAsIDE0LCAyMzcsIDEyNSwgMTAsIDE0LCAyMzcsIDEyNCwgMTAsIDE0LCAyMzcsIDEyMywgMTAsIDE0LCAKKyAgICAyMzcsIDEyMiwgMTAsIDE0LCAyMzcsIDEyMSwgMTAsIDE0LCAyMzcsIDEyMCwgMTAsIDE0LCAyMzcsIDExOSwgMTAsIDE0LCAKKyAgICAyMzcsIDExOCwgMTAsIDE0LCAyMzcsIDExNywgMTAsIDE0LCAyMzcsIDExNiwgMTAsIDE0LCAyMzcsIDExNSwgMTAsIDE0LCAKKyAgICAyMzcsIDExNCwgMTAsIDE0LCAyMzcsIDExMywgMTAsIDE0LCAyMzcsIDExMiwgMTAsIDE0LCAyMzcsIDExMSwgMTAsIDE0LCAKKyAgICAyMzcsIDExMCwgMTAsIDE0LCAyMzcsIDEwOSwgMTAsIDE0LCAyMzcsIDEwOCwgMTAsIDE0LCAyMzcsIDEwNywgMTAsIDE0LCAKKyAgICAyMzcsIDEwNiwgMTAsIDE0LCAyMzcsIDEwNSwgMTAsIDE0LCAyMzcsIDEwNCwgMTAsIDE0LCAyMzcsIDEwMywgMTAsIDE0LCAKKyAgICAyMzcsIDEwMiwgMTAsIDE0LCAyMzcsIDEwMSwgMTAsIDE0LCAyMzcsIDEwMCwgMTAsIDE0LCAyMzcsIDk5LCAxMCwgMTQsIAorICAgIDIzNywgOTgsIDEwLCAxNCwgMjM3LCA5NywgMTAsIDE0LCAyMzcsIDk2LCAxMCwgMTQsIDIzNywgOTUsIDEwLCAxNCwgMjM3LCAKKyAgICA5NCwgMTAsIDE0LCAyMzcsIDkzLCAxMCwgMTQsIDIzNywgOTIsIDEwLCAxNCwgMjM3LCA5MSwgMTAsIDE0LCAyMzcsIDkwLCAKKyAgICAxMCwgMTQsIDIzNywgODksIDEwLCAxNCwgMjM3LCA4OCwgMTAsIDE0LCAyMzcsIDg3LCAxMCwgMTQsIDIzNywgODYsIDEwLCAKKyAgICAxNCwgMjM3LCA4NSwgMTAsIDE0LCAyMzcsIDg0LCAxMCwgMTQsIDIzNywgODMsIDEwLCAxNCwgMjM3LCA4MiwgMTAsIDE0LCAKKyAgICAyMzcsIDgxLCAxMCwgMTQsIDIzNywgODAsIDEwLCAxNCwgMjM3LCA3OSwgMTAsIDE0LCAyMzcsIDc4LCAxMCwgMTQsIDIzNywgCisgICAgNzcsIDEwLCAxNCwgMjM3LCA3NiwgMTAsIDE0LCAyMzcsIDc1LCAxMCwgMTQsIDIzNywgNzQsIDEwLCAxNCwgMjM3LCA3MywgCisgICAgMTAsIDE0LCAyMzcsIDcyLCAxMCwgMTQsIDIzNywgNzEsIDEwLCAxNCwgMjM3LCA3MCwgMTAsIDE0LCAyMzcsIDY5LCAxMCwgCisgICAgMTQsIDIzNywgNjgsIDEwLCAxNCwgMjM3LCA2NywgMTAsIDE0LCAyMzcsIDY2LCAxMCwgMTQsIDIzNywgNjUsIDEwLCAxNCwgCisgICAgMjM3LCA2NCwgMTAsIDE0LCAyMzcsIDYzLCAxMCwgMTQsIDIzNywgNjIsIDEwLCAxNCwgMjM3LCA2MSwgMTAsIDE0LCAyMzcsIAorICAgIDYwLCAxMCwgMTQsIDIzNywgNTksIDEwLCAxNCwgMjM3LCA1OCwgMTAsIDE0LCAyMzcsIDU3LCAxMCwgMTQsIDIzNywgNTYsIAorICAgIDEwLCAxNCwgMjM3LCA1NSwgMTAsIDE0LCAyMzcsIDU0LCAxMCwgMTQsIDIzNywgNTMsIDEwLCAxNCwgMjM3LCA1MiwgMTAsIAorICAgIDE0LCAyMzcsIDUxLCAxMCwgMTQsIDIzNywgNTAsIDEwLCAxNCwgMjM3LCA0OSwgMTAsIDE0LCAyMzcsIDQ4LCAxMCwgMTQsIAorICAgIDIzNywgNDcsIDEwLCAxNCwgMjM3LCA0NiwgMTAsIDE0LCAyMzcsIDQ1LCAxMCwgMTQsIDIzNywgNDQsIDEwLCAxNCwgMjM3LCAKKyAgICA0MywgMTAsIDE0LCAyMzcsIDQyLCAxMCwgMTQsIDIzNywgNDEsIDEwLCAxNCwgMjM3LCA0MCwgMTAsIDE0LCAyMzcsIDM5LCAKKyAgICAxMCwgMTQsIDIzNywgMzgsIDEwLCAxNCwgMjM3LCAzNywgMTAsIDE0LCAyMzcsIDM2LCAxMCwgMTQsIDIzNywgMzUsIDEwLCAKKyAgICAxNCwgMjM3LCAzNCwgMTAsIDE0LCAyMzcsIDMzLCAxMCwgMTQsIDIzNywgMzIsIDEwLCAxNCwgMjM3LCAzMSwgMTAsIDE0LCAKKyAgICAyMzcsIDMwLCAxMCwgMTQsIDIzNywgMjksIDEwLCAxNCwgMjM3LCAyOCwgMTAsIDE0LCAyMzcsIDI3LCAxMCwgMTQsIDIzNywgCisgICAgMjYsIDEwLCAxNCwgMjM3LCAyNSwgMTAsIDE0LCAyMzcsIDI0LCAxMCwgMTQsIDIzNywgMjMsIDEwLCAxNCwgMjM3LCAyMiwgCisgICAgMTAsIDE0LCAyMzcsIDIxLCAxMCwgMTQsIDIzNywgMjAsIDEwLCAxNCwgMjM3LCAxOSwgMTAsIDE0LCAyMzcsIDE4LCAxMCwgCisgICAgMTQsIDIzNywgMTcsIDEwLCAxNCwgMjM3LCAxNiwgMTAsIDE0LCAyMzcsIDE1LCAxMCwgMTQsIDIzNywgMTQsIDEwLCAxNCwgCisgICAgMjM3LCAxMywgMTAsIDE0LCAyMzcsIDEyLCAxMCwgMTQsIDIzNywgMTEsIDEwLCAxNCwgMjM3LCAxMCwgMTAsIDE0LCAyMzcsIAorICAgIDksIDEwLCAxNCwgMjM3LCA4LCAxMCwgMTQsIDIzNywgNywgMTAsIDE0LCAyMzcsIDYsIDEwLCAxNCwgMjM3LCA1LCAxMCwgCisgICAgMTQsIDIzNywgNCwgMTAsIDE0LCAyMzcsIDMsIDEwLCAxNCwgMjM3LCAyLCAxMCwgMTQsIDIzNywgMSwgMTAsIDE0LCAyMzcsIAorICAgIDAsIDEwLCAxNCwgMjM2LCAyNTUsIDEwLCAxNCwgMjM2LCAyNTQsIDEwLCAxNCwgMjM2LCAyNTMsIDEwLCAxNCwgMjM2LCAKKyAgICAyNTIsIDEwLCAxNCwgMjM2LCAyNTEsIDEwLCAxNCwgMjM2LCAyNTAsIDEwLCAxNCwgMjM2LCAyNDksIDEwLCAxNCwgMjM2LCAKKyAgICAyNDgsIDEwLCAxNCwgMjM2LCAyNDcsIDEwLCAxNCwgMjM2LCAyNDYsIDEwLCAxNCwgMjM2LCAyNDUsIDEwLCAxNCwgMjM2LCAKKyAgICAyNDQsIDEwLCAxNCwgMjM2LCAyNDMsIDEwLCAxNCwgMjM2LCAyNDIsIDEwLCAxNCwgMjM2LCAyNDEsIDEwLCAxNCwgMjM2LCAKKyAgICAyNDAsIDEwLCAxNCwgMjM2LCAyMzksIDEwLCAxNCwgMjM2LCAyMzgsIDEwLCAxNCwgMjM2LCAyMzcsIDEwLCAxNCwgMjM2LCAKKyAgICAyMzYsIDEwLCAxNCwgMjM2LCAyMzUsIDEwLCAxNCwgMjM2LCAyMzQsIDEwLCAxNCwgMjM2LCAyMzMsIDEwLCAxNCwgMjM2LCAKKyAgICAyMzIsIDEwLCAxNCwgMjM2LCAyMzEsIDEwLCAxNCwgMjM2LCAyMzAsIDEwLCAxNCwgMjM2LCAyMjksIDEwLCAxNCwgMjM2LCAKKyAgICAyMjgsIDEwLCAxNCwgMjM2LCAyMjcsIDEwLCAxNCwgMjM2LCAyMjYsIDEwLCAxNCwgMjM2LCAyMjUsIDEwLCAxNCwgMjM2LCAKKyAgICAyMjQsIDEwLCAxNCwgMjM2LCAyMjMsIDEwLCAxNCwgMjM2LCAyMjIsIDEwLCAxNCwgMjM2LCAyMjEsIDEwLCAxNCwgMjM2LCAKKyAgICAyMjAsIDEwLCAxNCwgMjM2LCAyMTksIDEwLCAxNCwgMjM2LCAyMTgsIDEwLCAxNCwgMjM2LCAyMTcsIDEwLCAxNCwgMjM2LCAKKyAgICAyMTYsIDEwLCAxNCwgMjM2LCAyMTUsIDEwLCAxNCwgMjM2LCAyMTQsIDEwLCAxNCwgMjM2LCAyMTMsIDEwLCAxNCwgMjM2LCAKKyAgICAyMTIsIDEwLCAxNCwgMjM2LCAyMTEsIDEwLCAxNCwgMjM2LCAyMTAsIDEwLCAxNCwgMjM2LCAyMDksIDEwLCAxNCwgMjM2LCAKKyAgICAyMDgsIDEwLCAxNCwgMjM2LCAyMDcsIDEwLCAxNCwgMjM2LCAyMDYsIDEwLCAxNCwgMjM2LCAyMDUsIDEwLCAxNCwgMjM2LCAKKyAgICAyMDQsIDEwLCAxNCwgMjM2LCAyMDMsIDEwLCAxNCwgMjM2LCAyMDIsIDEwLCAxNCwgMjM2LCAyMDEsIDEwLCAxNCwgMjM2LCAKKyAgICAyMDAsIDEwLCAxNCwgMjM2LCAxOTksIDEwLCAxNCwgMjM2LCAxOTgsIDEwLCAxNCwgMjM2LCAxOTcsIDEwLCAxNCwgMjM2LCAKKyAgICAxOTYsIDEwLCAxNCwgMjM2LCAxOTUsIDEwLCAxNCwgMjM2LCAxOTQsIDEwLCAxNCwgMjM2LCAxOTMsIDEwLCAxNCwgMjM2LCAKKyAgICAxOTIsIDEwLCAxNCwgMjM2LCAxOTEsIDEwLCAxNCwgMjM2LCAxOTAsIDEwLCAxNCwgMjM2LCAxODksIDEwLCAxNCwgMjM2LCAKKyAgICAxODgsIDEwLCAxNCwgMjM2LCAxODcsIDEwLCAxNCwgMjM2LCAxODYsIDEwLCAxNCwgMjM2LCAxODUsIDEwLCAxNCwgMjM2LCAKKyAgICAxODQsIDEwLCAxNCwgMjM2LCAxODMsIDEwLCAxNCwgMjM2LCAxODIsIDEwLCAxNCwgMjM2LCAxODEsIDEwLCAxNCwgMjM2LCAKKyAgICAxODAsIDEwLCAxNCwgMjM2LCAxNzksIDEwLCAxNCwgMjM2LCAxNzgsIDEwLCAxNCwgMjM2LCAxNzcsIDEwLCAxNCwgMjM2LCAKKyAgICAxNzYsIDEwLCAxNCwgMjM2LCAxNzUsIDEwLCAxNCwgMjM2LCAxNzQsIDEwLCAxNCwgMjM2LCAxNzMsIDEwLCAxNCwgMjM2LCAKKyAgICAxNzIsIDEwLCAxNCwgMjM2LCAxNzEsIDEwLCAxNCwgMjM2LCAxNzAsIDEwLCAxNCwgMjM2LCAxNjksIDEwLCAxNCwgMjM2LCAKKyAgICAxNjgsIDEwLCAxNCwgMjM2LCAxNjcsIDEwLCAxNCwgMjM2LCAxNjYsIDEwLCAxNCwgMjM2LCAxNjUsIDEwLCAxNCwgMjM2LCAKKyAgICAxNjQsIDEwLCAxNCwgMjM2LCAxNjMsIDEwLCAxNCwgMjM2LCAxNjIsIDEwLCAxNCwgMjM2LCAxNjEsIDEwLCAxNCwgMjM2LCAKKyAgICAxNjAsIDEwLCAxNCwgMjM2LCAxNTksIDEwLCAxNCwgMjM2LCAxNTgsIDEwLCAxNCwgMjM2LCAxNTcsIDEwLCAxNCwgMjM2LCAKKyAgICAxNTYsIDEwLCAxNCwgMjM2LCAxNTUsIDEwLCAxNCwgMjM2LCAxNTQsIDEwLCAxNCwgMjM2LCAxNTMsIDEwLCAxNCwgMjM2LCAKKyAgICAxNTIsIDEwLCAxNCwgMjM2LCAxNTEsIDEwLCAxNCwgMjM2LCAxNTAsIDEwLCAxNCwgMjM2LCAxNDksIDEwLCAxNCwgMjM2LCAKKyAgICAxNDgsIDEwLCAxNCwgMjM2LCAxNDcsIDEwLCAxNCwgMjM2LCAxNDYsIDEwLCAxNCwgMjM2LCAxNDUsIDEwLCAxNCwgMjM2LCAKKyAgICAxNDQsIDEwLCAxNCwgMjM2LCAxNDMsIDEwLCAxNCwgMjM2LCAxNDIsIDEwLCAxNCwgMjM2LCAxNDEsIDEwLCAxNCwgMjM2LCAKKyAgICAxNDAsIDEwLCAxNCwgMjM2LCAxMzksIDEwLCAxNCwgMjM2LCAxMzgsIDEwLCAxNCwgMjM2LCAxMzcsIDEwLCAxNCwgMjM2LCAKKyAgICAxMzYsIDEwLCAxNCwgMjM2LCAxMzUsIDEwLCAxNCwgMjM2LCAxMzQsIDEwLCAxNCwgMjM2LCAxMzMsIDEwLCAxNCwgMjM2LCAKKyAgICAxMzIsIDEwLCAxNCwgMjM2LCAxMzEsIDEwLCAxNCwgMjM2LCAxMzAsIDEwLCAxNCwgMjM2LCAxMjksIDEwLCAxNCwgMjM2LCAKKyAgICAxMjgsIDEwLCAxNCwgMjM2LCAxMjcsIDEwLCAxNCwgMjM2LCAxMjYsIDEwLCAxNCwgMjM2LCAxMjUsIDEwLCAxNCwgMjM2LCAKKyAgICAxMjQsIDEwLCAxNCwgMjM2LCAxMjMsIDEwLCAxNCwgMjM2LCAxMjIsIDEwLCAxNCwgMjM2LCAxMjEsIDEwLCAxNCwgMjM2LCAKKyAgICAxMjAsIDEwLCAxNCwgMjM2LCAxMTksIDEwLCAxNCwgMjM2LCAxMTgsIDEwLCAxNCwgMjM2LCAxMTcsIDEwLCAxNCwgMjM2LCAKKyAgICAxMTYsIDEwLCAxNCwgMjM2LCAxMTUsIDEwLCAxNCwgMjM2LCAxMTQsIDEwLCAxNCwgMjM2LCAxMTMsIDEwLCAxNCwgMjM2LCAKKyAgICAxMTIsIDEwLCAxNCwgMjM2LCAxMTEsIDEwLCAxNCwgMjM2LCAxMTAsIDEwLCAxNCwgMjM2LCAxMDksIDEwLCAxNCwgMjM2LCAKKyAgICAxMDgsIDEwLCAxNCwgMjM2LCAxMDcsIDEwLCAxNCwgMjM2LCAxMDYsIDEwLCAxNCwgMjM2LCAxMDUsIDEwLCAxNCwgMjM2LCAKKyAgICAxMDQsIDEwLCAxNCwgMjM2LCAxMDMsIDEwLCAxNCwgMjM2LCAxMDIsIDEwLCAxNCwgMjM2LCAxMDEsIDEwLCAxNCwgMjM2LCAKKyAgICAxMDAsIDEwLCAxNCwgMjM2LCA5OSwgMTAsIDE0LCAyMzYsIDk4LCAxMCwgMTQsIDIzNiwgOTcsIDEwLCAxNCwgMjM2LCA5NiwgCisgICAgMTAsIDE0LCAyMzYsIDk1LCAxMCwgMTQsIDIzNiwgOTQsIDEwLCAxNCwgMjM2LCA5MywgMTAsIDE0LCAyMzYsIDkyLCAxMCwgCisgICAgMTQsIDIzNiwgOTEsIDEwLCAxNCwgMjM2LCA5MCwgMTAsIDE0LCAyMzYsIDg5LCAxMCwgMTQsIDIzNiwgODgsIDEwLCAxNCwgCisgICAgMjM2LCA4NywgMTAsIDE0LCAyMzYsIDg2LCAxMCwgMTQsIDIzNiwgODUsIDEwLCAxNCwgMjM2LCA4NCwgMTAsIDE0LCAyMzYsIAorICAgIDgzLCAxMCwgMTQsIDIzNiwgODIsIDEwLCAxNCwgMjM2LCA4MSwgMTAsIDE0LCAyMzYsIDgwLCAxMCwgMTQsIDIzNiwgNzksIAorICAgIDEwLCAxNCwgMjM2LCA3OCwgMTAsIDE0LCAyMzYsIDc3LCAxMCwgMTQsIDIzNiwgNzYsIDEwLCAxNCwgMjM2LCA3NSwgMTAsIAorICAgIDE0LCAyMzYsIDc0LCAxMCwgMTQsIDIzNiwgNzMsIDEwLCAxNCwgMjM2LCA3MiwgNywgNCwgMjcsIDI0NCwgMTMzLCA3LCA0LCAKKyAgICAyNywgMjQ0LCAxMjksIDcsIDQsIDI3LCAyNDQsIDg0LCA3LCA0LCAyNywgMjQ0LCAxMzIsIDcsIDQsIDI3LCAyNDQsIDEzMSwgCisgICAgNywgNCwgMjcsIDIwMCwgMjIyLCA5NCwgMjE3LCAxNTMsIDcsIDQsIDI3LCAyMTgsIDE3MCwgMTUwLCA0LCAyNywgMjMxLCAKKyAgICA2NCwgMjI4LCA0NCwgMTUwLCA0LCAyNywgMjMxLCA2NCwgMjQ1LCAyMjEsIDE1MCwgNCwgMjcsIDIzMSwgNjQsIDIzNSwgCisgICAgMjM0LCAxNTAsIDQsIDI3LCAyMTMsIDE4MCwgMjI4LCA0NCwgMTUwLCA0LCAyNywgMjMxLCA2NCwgMjExLCAxNjAsIDk0LCAxLCAKKyAgICAyMTAsIDIzNCwgMiwgMjQxLCAxNjUsIDk0LCAyMjUsIDE0LCAyMzUsIDU2LCAyMTQsIDExLCA5NCwgMjcsIDIxMSwgNiwgCisgICAgMjEwLCAyMzQsIDIxMCwgMjM0LCAyMjUsIDI0MywgOTQsIDEsIDI1NCwgMTQ3LCAyNTMsIDE3MCwgOTQsIDEsIDIxMSwgMjQ3LCAKKyAgICAyNTQsIDE3OSwgOTQsIDEsIDIxMSwgMjQ3LCAyNDgsIDE5NywgOTQsIDEsIDIxMSwgMjQ3LCAyNDEsIDI0NSwgOTQsIDEsIAorICAgIDIxMSwgMjQ3LCAyMzUsIDAsIDk0LCAxLCAyMTEsIDI0NywgMjMzLCAxMDAsIDk0LCAxLCAyMTEsIDI0NywgNDAsIDIzMSwgCisgICAgNzAsIDk0LCAxLCAyMTEsIDI0NywgMjIzLCA3MCwgOTQsIDEsIDIxMSwgMjQ3LCAyMTcsIDM5LCA5NCwgMSwgMjU0LCAxNDcsIAorICAgIDk2LCA1MCwgOTQsIDEsIDIyMCwgMjMsIDIsIDIyMCwgMjMsIDI0NywgMTI4LCA5NCwgMSwgMjIwLCAyMywgMiwgMjE5LCAKKyAgICAxNjEsIDI0NywgMTI4LCA5NCwgMSwgMjIwLCAyMywgMiwgMjQ4LCAyMTYsIDIyLCAyMjAsIDIzLCAyNDcsIDEyOCwgOTQsIDEsIAorICAgIDIyMCwgMjMsIDIsIDI0OCwgMjE2LCAyMiwgMjE5LCAxNjEsIDI0NywgMTI4LCA5NCwgMSwgMTA5LCAyLCAyMjUsIDI0MywgCisgICAgOTQsIDEsIDEwOSwgMiwgMjI0LCA3OSwgOTQsIDEsIDEwOSwgMiwgMjMxLCAxNzYsIDk0LCAxLCAyNTIsIDM3LCAyLCAyNDgsIAorICAgIDIxNSwgOTQsIDEsIDI0MiwgMjA5LCAyLCAyNDgsIDIxNSwgOTQsIDEsIDI0OCwgMTk4LCAyLCAyNDgsIDIxNSwgOTQsIDEsIAorICAgIDI0MSwgMjQ2LCAyLCAyMzEsIDE3NiwgOTQsIDEsIDIxNCwgNCwgMiwgMjQ4LCAyMTUsIDk0LCAxLCAyMTAsIDk4LCAyLCAKKyAgICAyNDgsIDIxNSwgOTQsIDEsIDIxNiwgMjMyLCAyLCAyNDgsIDIxNSwgOTQsIDEsIDIxMCwgMjM0LCAyLCAyNDgsIDIxNSwgOTQsIAorICAgIDEsIDQwLCAyMzUsIDEsIDIsIDI0OCwgMjE1LCA5NCwgMSwgMjM1LCAxLCAyLCAyNDgsIDIxNSwgOTQsIDEsIDIzMywgMTAxLCAKKyAgICAyLCAyNDgsIDIxNSwgOTQsIDEsIDIzMSwgNzEsIDIsIDI0OCwgMjE1LCA5NCwgMSwgMjI3LCAxOTksIDIsIDI0OCwgMjE1LCAKKyAgICA5NCwgMSwgMjIxLCAyNTIsIDIsIDI0OCwgMjE1LCA5NCwgMSwgNDAsIDIyNSwgMjI1LCAyLCAyNDgsIDIxNSwgOTQsIDEsIAorICAgIDIyNSwgMjI1LCAyLCAyNDgsIDIxNSwgOTQsIDEsIDIxNSwgMTgxLCAyLCAyNDgsIDIxNSwgOTQsIDEsIDIyNCwgNDMsIDIsIAorICAgIDI0OCwgMjE1LCA5NCwgMSwgMjIzLCA3MSwgMiwgMjQ4LCAyMTUsIDk0LCAxLCAyMjAsIDIzLCAyLCAyNDgsIDIxNSwgOTQsIAorICAgIDEsIDIxNywgNDAsIDIsIDI0OCwgMjE1LCA5NCwgMSwgMjE0LCA0LCAyLCAyNDEsIDY4LCA5NCwgMSwgMjUyLCAzNywgMiwgCisgICAgMjIzLCAxNzIsIDk0LCAxLCAyMzUsIDEsIDIsIDIyMywgMTcyLCA5NCwgMSwgMjI1LCAyMjUsIDIsIDIyMywgMTcyLCA5NCwgCisgICAgMjcsIDEwOSwgMjMzLCAxMDAsIDksIDEsIDEwOSwgMjEyLCA0NywgNTMsIDE3LCA5LCAxLCAxMDksIDIxMiwgNDcsIDQwLCAKKyAgICAxNywgOSwgMSwgMjUyLCA3MywgNTMsIDE3LCA5LCAxLCAyNTIsIDczLCA0MCwgMTcsIDksIDEsIDI1MiwgNzMsIDY1LCAxNywgCisgICAgOSwgMSwgMjUyLCA3MywgMTQ3LCAxNywgOSwgMSwgMjI1LCAyMDksIDUzLCAxNywgOSwgMSwgMjI1LCAyMDksIDQwLCAxNywgCisgICAgOSwgMSwgMjI1LCAyMDksIDY1LCAxNywgOSwgMSwgMjI1LCAyMDksIDE0NywgMTcsIDksIDEsIDI1MiwgNjEsIDUzLCAxNywgCisgICAgOSwgMSwgMjUyLCA2MSwgNDAsIDE3LCA5LCAxLCAyNTIsIDYxLCA2NSwgMTcsIDksIDEsIDI1MiwgNjEsIDE0NywgMTcsIDksIAorICAgIDEsIDIxNSwgMTQ4LCA1MywgMTcsIDksIDEsIDIxNSwgMTQ4LCA0MCwgMTcsIDksIDEsIDIxNSwgMTQ4LCA2NSwgMTcsIDksIAorICAgIDEsIDIxNSwgMTQ4LCAxNDcsIDE3LCA5LCAxLCAyMTcsIDcsIDUzLCAxNywgOSwgMSwgMjE3LCA3LCA0MCwgMTcsIDksIDEsIAorICAgIDIxNywgNywgNjUsIDE3LCA5LCAxLCAyMTcsIDcsIDE0NywgMTcsIDksIDEsIDIxNSwgMTUwLCA1MywgMTcsIDksIDEsIDIxNSwgCisgICAgMTUwLCA0MCwgMTcsIDksIDEsIDIxNSwgMTUwLCA2NSwgMTcsIDksIDEsIDIxNSwgMTUwLCAxNDcsIDE3LCA5LCAxLCAyMTMsIAorICAgIDI0OSwgNTMsIDE3LCA5LCAxLCAyMTMsIDI0OSwgNDAsIDE3LCA5LCAxLCAyMTMsIDI0OSwgNjUsIDE3LCA5LCAxLCAyMTMsIAorICAgIDI0OSwgMTQ3LCAxNywgOSwgMSwgMjI1LCAyMDcsIDUzLCAxNywgOSwgMSwgMjI1LCAyMDcsIDQwLCAxNywgOSwgMSwgMjI1LCAKKyAgICAyMDcsIDY1LCAxNywgOSwgMSwgMjI1LCAyMDcsIDE0NywgMTcsIDksIDEsIDI0NiwgNTIsIDUzLCAxNywgOSwgMSwgMjQ2LCAKKyAgICA1MiwgNDAsIDE3LCA5LCAxLCAyNDYsIDUyLCA2NSwgMTcsIDksIDEsIDI0NiwgNTIsIDE0NywgMTcsIDksIDEsIDIyNywgCisgICAgMTU4LCA1MywgMTcsIDksIDEsIDIyNywgMTU4LCA0MCwgMTcsIDksIDEsIDIyNywgMTU4LCA2NSwgMTcsIDksIDEsIDIyNywgCisgICAgMTU4LCAxNDcsIDE3LCA5LCAxLCAyMTcsIDI4LCA1MywgMTcsIDksIDEsIDIxNywgMjgsIDQwLCAxNywgOSwgMSwgMjE3LCAKKyAgICAyOCwgNjUsIDE3LCA5LCAxLCAyMTcsIDI4LCAxNDcsIDE3LCA5LCAxLCAyMTcsIDI2LCA1MywgMTcsIDksIDEsIDIxNywgMjYsIAorICAgIDQwLCAxNywgOSwgMSwgMjE3LCAyNiwgNjUsIDE3LCA5LCAxLCAyMTcsIDI2LCAxNDcsIDE3LCA5LCAxLCAyNDgsIDE0MSwgCisgICAgNTMsIDE3LCA5LCAxLCAyNDgsIDE0MSwgNDAsIDE3LCA5LCAxLCAyNDgsIDIxMCwgNTMsIDE3LCA5LCAxLCAyNDgsIDIxMCwgCisgICAgNDAsIDE3LCA5LCAxLCAyNDYsIDc5LCA1MywgMTcsIDksIDEsIDI0NiwgNzksIDQwLCAxNywgOSwgMSwgMjQ4LCAxMzksIDUzLCAKKyAgICAxNywgOSwgMSwgMjQ4LCAxMzksIDQwLCAxNywgOSwgMSwgMjM1LCAxMjcsIDUzLCAxNywgOSwgMSwgMjM1LCAxMjcsIDQwLCAKKyAgICAxNywgOSwgMSwgMjIyLCAxNzQsIDUzLCAxNywgOSwgMSwgMjIyLCAxNzQsIDQwLCAxNywgOSwgMSwgMjM0LCAxODEsIDUzLCAKKyAgICAxNywgOSwgMSwgMjM0LCAxODEsIDQwLCAxNywgOSwgMSwgMjM0LCAxODEsIDY1LCAxNywgOSwgMSwgMjM0LCAxODEsIDE0NywgCisgICAgMTcsIDksIDEsIDI0MywgMTMwLCA1MywgMTcsIDksIDEsIDI0MywgMTMwLCA0MCwgMTcsIDksIDEsIDI0MywgMTMwLCA2NSwgCisgICAgMTcsIDksIDEsIDI0MywgMTMwLCAxNDcsIDE3LCA5LCAxLCAyNDIsIDEwOSwgNTMsIDE3LCA5LCAxLCAyNDIsIDEwOSwgNDAsIAorICAgIDE3LCA5LCAxLCAyNDIsIDEwOSwgNjUsIDE3LCA5LCAxLCAyNDIsIDEwOSwgMTQ3LCAxNywgOSwgMSwgMjI5LCA4LCA1MywgCisgICAgMTcsIDksIDEsIDIyOSwgOCwgNDAsIDE3LCA5LCAxLCAyMjksIDgsIDY1LCAxNywgOSwgMSwgMjI5LCA4LCAxNDcsIDE3LCA5LCAKKyAgICAxLCAyMjgsIDY4LCAyNDIsIDIyNiwgNTMsIDE3LCA5LCAxLCAyMjgsIDY4LCAyNDIsIDIyNiwgNDAsIDE3LCA5LCAxLCAyMjIsIAorICAgIDIxNywgNTMsIDE3LCA5LCAxLCAyMjIsIDIxNywgNDAsIDE3LCA5LCAxLCAyMjIsIDIxNywgNjUsIDE3LCA5LCAxLCAyMjIsIAorICAgIDIxNywgMTQ3LCAxNywgOSwgMSwgMjQxLCAyMjYsIDIsIDc3LCA3MiwgNTMsIDE3LCA5LCAxLCAyNDEsIDIyNiwgMiwgNzcsIAorICAgIDcyLCA0MCwgMTcsIDksIDEsIDI0MSwgMjI2LCAyNDIsIDE3OSwgNTMsIDE3LCA5LCAxLCAyNDEsIDIyNiwgMjQyLCAxNzksIAorICAgIDQwLCAxNywgOSwgMSwgMjQxLCAyMjYsIDI0MiwgMTc5LCA2NSwgMTcsIDksIDEsIDI0MSwgMjI2LCAyNDIsIDE3OSwgMTQ3LCAKKyAgICAxNywgOSwgMSwgMjQxLCAyMjYsIDI0NywgMTUwLCA1MywgMTcsIDksIDEsIDI0MSwgMjI2LCAyNDcsIDE1MCwgNDAsIDE3LCAKKyAgICA5LCAxLCAyNDEsIDIyNiwgMjQ3LCAxNTAsIDY1LCAxNywgOSwgMSwgMjQxLCAyMjYsIDI0NywgMTUwLCAxNDcsIDE3LCA5LCAKKyAgICAxLCA3NywgMjUyLCAxNDEsIDUzLCAxNywgOSwgMSwgNzcsIDI1MiwgMTQxLCA0MCwgMTcsIDksIDEsIDc3LCAyNTIsIDE0MSwgCisgICAgMiwgMTgyLCA3MiwgNTMsIDE3LCA5LCAxLCA3NywgMjUyLCAxNDEsIDIsIDE4MiwgNzIsIDQwLCAxNywgOSwgMTYsIDU5LCAKKyAgICA0OCwgOSwgMTYsIDU5LCA1MSwgOSwgMTYsIDExMywgMTcwLCA0OCwgOSwgMTYsIDExMywgMTcwLCA1MSwgOSwgMTYsIDEzNCwgCisgICAgMTcwLCA0OCwgOSwgMTYsIDEzNCwgMTcwLCA1MSwgOSwgMTYsIDEzNCwgMTcwLCAyMjUsIDEwLCAyNDYsIDExMiwgNDgsIDksIAorICAgIDE2LCAxMzQsIDE3MCwgMjI1LCAxMCwgMjQ2LCAxMTIsIDUxLCA5LCAxNiwgMjQ0LCAxOSwgMTcwLCA0OCwgOSwgMTYsIDI0NCwgCisgICAgMTksIDE3MCwgNTEsIDksIDE2LCA1MiwgNjcsIDI1MiwgMTQ5LCA1MSwgOSwgMTYsIDExMywgMTcwLCAyMTMsIDE4OSwgNDgsIAorICAgIDksIDE2LCAxMTMsIDE3MCwgMjEzLCAxODksIDUxLCA5LCAxNiwgMjIyLCAyMzYsIDksIDE2LCA0LCAyMTcsIDgyLCA0OCwgOSwgCisgICAgMTYsIDQsIDIxNywgODIsIDUxLCA5LCAxLCAyMjksIDg1LCA1MywgMTcsIDksIDEsIDIyOSwgODUsIDQwLCAxNywgOSwgMSwgCisgICAgMjI5LCA4NSwgNjUsIDE3LCA5LCAxLCAyMjksIDg1LCAxNDcsIDE3LCA5LCAxLCAxMDQsIDUzLCAxNywgOSwgMSwgMTA0LCAKKyAgICA0MCwgMTcsIDksIDEsIDIyNiwgMjM5LCA1MywgMTcsIDksIDEsIDIyNiwgMjM5LCA0MCwgMTcsIDksIDEsIDIxMCwgMjEzLCAKKyAgICA1MywgMTcsIDksIDEsIDIxMCwgMjEzLCA0MCwgMTcsIDksIDEsIDEwNCwgMiwgMTgyLCA3MiwgNTMsIDE3LCA5LCAxLCAyMTQsIAorICAgIDAsIDUzLCAxNywgOSwgMSwgMjE0LCAwLCA0MCwgMTcsIDksIDEsIDIzNCwgNzksIDIyNiwgMjM5LCA1MywgMTcsIDksIDEsIAorICAgIDIzNCwgNzksIDIyNiwgMjM5LCA0MCwgMTcsIDksIDEsIDIzNCwgNzksIDIxMCwgMjEzLCA1MywgMTcsIDksIDEsIDIzNCwgCisgICAgNzksIDIxMCwgMjEzLCA0MCwgMTcsIDksIDEsIDE2MCwgNTMsIDE3LCA5LCAxLCAxNjAsIDQwLCAxNywgOSwgMSwgMTYwLCAKKyAgICA2NSwgMTcsIDksIDEsIDE2MCwgMTQ3LCAxNywgOSwgMSwgMjE0LCAyMDcsIDIzNCwgMTkyLCAyMzQsIDc5LCAxMDksIDIzMSwgCisgICAgMTk4LCA2NSwgMTcsIDksIDEsIDIxNCwgMjA3LCAyMzQsIDE5MiwgMjM0LCA3OSwgMTA5LCAyMzEsIDE5OCwgMTQ3LCAxNywgCisgICAgOSwgMjcsIDc3LCAyLCAxODIsIDcyLCAyLCAxMDksIDUzLCAxNywgOSwgMjcsIDc3LCAyLCAxODIsIDcyLCAyLCAxMDksIDQwLCAKKyAgICAxNywgOSwgMjcsIDc3LCAyLCAxODIsIDcyLCAyLCAyNTQsIDI1MywgNTMsIDE3LCA5LCAyNywgNzcsIDIsIDE4MiwgNzIsIDIsIAorICAgIDI1NCwgMjUzLCA0MCwgMTcsIDksIDI3LCA3NywgMiwgMTgyLCA3MiwgMiwgMjEyLCAzMSwgNTMsIDE3LCA5LCAyNywgNzcsIAorICAgIDIsIDE4MiwgNzIsIDIsIDIxMiwgMzEsIDQwLCAxNywgOSwgMjcsIDc3LCAyLCAxODIsIDcyLCAyLCAxMDQsIDUzLCAxNywgOSwgCisgICAgMjcsIDc3LCAyLCAxODIsIDcyLCAyLCAxMDQsIDQwLCAxNywgOSwgMjcsIDc3LCAyLCAxODIsIDcyLCAyLCAyMjYsIDIzOSwgCisgICAgNTMsIDE3LCA5LCAyNywgNzcsIDIsIDE4MiwgNzIsIDIsIDIyNiwgMjM5LCA0MCwgMTcsIDksIDI3LCA3NywgMiwgMTgyLCAKKyAgICA3MiwgMiwgMjEwLCAyMTMsIDUzLCAxNywgOSwgMjcsIDc3LCAyLCAxODIsIDcyLCAyLCAyMTAsIDIxMywgNDAsIDE3LCA5LCAKKyAgICAyNywgNzcsIDIsIDE4MiwgNzIsIDIsIDE2MCwgNTMsIDE3LCA5LCAyNywgNzcsIDIsIDE4MiwgNzIsIDIsIDE2MCwgNDAsIAorICAgIDE3LCA5LCAyNywgNzcsIDIsIDE4MiwgNzIsIDIsIDE2MCwgNjUsIDE3LCA5LCAyNywgMjE0LCAyMDcsIDIzNCwgNzksIDc3LCAKKyAgICAyLCAxODIsIDcyLCAyLCAxMDksIDIzMSwgMTk4LCA1MywgMTcsIDksIDI3LCAyMTQsIDIwNywgMjM0LCA3OSwgNzcsIDIsIAorICAgIDE4MiwgNzIsIDIsIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMjcsIDIxNCwgMjA3LCAyMzQsIDc5LCA3NywgMiwgMTgyLCAKKyAgICA3MiwgMiwgMTA5LCAyMzEsIDE5OCwgNjUsIDE3LCA5LCAxLCAyNDQsIDE3NiwgNzcsIDUzLCAxNywgOSwgMSwgMjQ0LCAxNzYsIAorICAgIDc3LCA0MCwgMTcsIDksIDEsIDI0NCwgMTc2LCA3NywgNjUsIDE3LCA5LCAxLCAyNDQsIDE3NiwgNzcsIDE0NywgMTcsIDksIAorICAgIDI3LCA3NywgMiwgMTgyLCA3MiwgMiwgMTUxLCA1MywgMTcsIDksIDI3LCA3NywgMiwgMTgyLCA3MiwgMiwgMTIyLCA1MywgCisgICAgMTcsIDksIDI3LCA3NywgMiwgMTgyLCA3MiwgMiwgNjYsIDUzLCAxNywgOSwgMjcsIDc3LCAyLCAxODIsIDcyLCAyLCAxMDksIAorICAgIDIzMSwgMTk4LCA1MywgMTcsIDksIDI3LCA3NywgMiwgMTgyLCA3MiwgMiwgNzcsIDUzLCAxNywgOSwgMjcsIDI1MiwgNjMsIAorICAgIDIsIDE1MSwgNTMsIDE3LCA5LCAyNywgMjUyLCA2MywgMiwgMTIyLCA1MywgMTcsIDksIDI3LCAyNTIsIDYzLCAyLCAyMzQsIAorICAgIDEzNiwgNTMsIDE3LCA5LCAyNywgMjUyLCA2MywgMiwgNjYsIDUzLCAxNywgOSwgMjcsIDI1MiwgNjMsIDIsIDEwOSwgMjMxLCAKKyAgICAxOTgsIDUzLCAxNywgOSwgMjcsIDI1MiwgNjMsIDIsIDc3LCA1MywgMTcsIDksIDI3LCAyMTcsIDksIDIsIDE1MSwgNTMsIAorICAgIDE3LCA5LCAyNywgMjE3LCA5LCAyLCAxMjIsIDUzLCAxNywgOSwgMjcsIDIxNywgOSwgMiwgMjM0LCAxMzYsIDUzLCAxNywgOSwgCisgICAgMjcsIDIxNywgOSwgMiwgNjYsIDUzLCAxNywgOSwgMjcsIDIxNywgOSwgMiwgMTA5LCAyMzEsIDE5OCwgNTMsIDE3LCA5LCAKKyAgICAyNywgMjE3LCA5LCAyLCA3NywgNTMsIDE3LCA5LCAyNywgMjE2LCAxOTQsIDIsIDE1MSwgNTMsIDE3LCA5LCAyNywgMjE2LCAKKyAgICAxOTQsIDIsIDY2LCA1MywgMTcsIDksIDI3LCAyMTYsIDE5NCwgMiwgMTA5LCAyMzEsIDE5OCwgNTMsIDE3LCA5LCAyNywgCisgICAgMjE2LCAxOTQsIDIsIDc3LCA1MywgMTcsIDksIDI3LCAxNTEsIDIsIDEyMiwgNTMsIDE3LCA5LCAyNywgMTUxLCAyLCA2NiwgCisgICAgNTMsIDE3LCA5LCAyNywgMTIyLCAyLCAxNTEsIDUzLCAxNywgOSwgMjcsIDEyMiwgMiwgNjYsIDUzLCAxNywgOSwgMjcsIAorICAgIDIzNCwgMTM2LCAyLCAxNTEsIDUzLCAxNywgOSwgMjcsIDIzNCwgMTM2LCAyLCAxMjIsIDUzLCAxNywgOSwgMjcsIDIzNCwgCisgICAgMTM2LCAyLCA2NiwgNTMsIDE3LCA5LCAyNywgMjIxLCAxNjksIDIsIDE1MSwgNTMsIDE3LCA5LCAyNywgMjIxLCAxNjksIDIsIAorICAgIDEyMiwgNTMsIDE3LCA5LCAyNywgMjIxLCAxNjksIDIsIDIzNCwgMTM2LCA1MywgMTcsIDksIDI3LCAyMjEsIDE2OSwgMiwgCisgICAgNjYsIDUzLCAxNywgOSwgMjcsIDIyMiwgMjksIDIsIDEyMiwgNTMsIDE3LCA5LCAyNywgMjIyLCAyOSwgMiwgNjYsIDUzLCAKKyAgICAxNywgOSwgMjcsIDI0OCwgMjI1LCAyLCAxNTEsIDUzLCAxNywgOSwgMjcsIDI0OCwgMjI1LCAyLCAxMjIsIDUzLCAxNywgOSwgCisgICAgMjcsIDI0OCwgMjI1LCAyLCAyMzQsIDEzNiwgNTMsIDE3LCA5LCAyNywgMjQ4LCAyMjUsIDIsIDY2LCA1MywgMTcsIDksIDI3LCAKKyAgICAyMTcsIDgyLCAyLCAxMjIsIDUzLCAxNywgOSwgMjcsIDIxNywgODIsIDIsIDY2LCA1MywgMTcsIDksIDI3LCAyMTAsIDExMiwgCisgICAgMiwgNjYsIDUzLCAxNywgOSwgMjcsIDI1NCwgMjA2LCAyLCAxNTEsIDUzLCAxNywgOSwgMjcsIDI1NCwgMjA2LCAyLCA2NiwgCisgICAgNTMsIDE3LCA5LCAyNywgMjQyLCAyNTIsIDIsIDE1MSwgNTMsIDE3LCA5LCAyNywgMjQyLCAyNTIsIDIsIDY2LCA1MywgMTcsIAorICAgIDksIDI3LCAyNDQsIDE1MSwgMiwgMTUxLCA1MywgMTcsIDksIDI3LCAyNDQsIDE1MSwgMiwgMTIyLCA1MywgMTcsIDksIDI3LCAKKyAgICAyNDQsIDE1MSwgMiwgMjM0LCAxMzYsIDUzLCAxNywgOSwgMjcsIDI0NCwgMTUxLCAyLCA2NiwgNTMsIDE3LCA5LCAyNywgCisgICAgMjQ0LCAxNTEsIDIsIDEwOSwgMjMxLCAxOTgsIDUzLCAxNywgOSwgMjcsIDI0NCwgMTUxLCAyLCA3NywgNTMsIDE3LCA5LCAKKyAgICAyNywgMjI0LCA4NSwgMiwgMTIyLCA1MywgMTcsIDksIDI3LCAyMjQsIDg1LCAyLCA2NiwgNTMsIDE3LCA5LCAyNywgMjI0LCAKKyAgICA4NSwgMiwgMTA5LCAyMzEsIDE5OCwgNTMsIDE3LCA5LCAyNywgMjI0LCA4NSwgMiwgNzcsIDUzLCAxNywgOSwgMjcsIDIzNSwgCisgICAgMSwgMiwgMTA5LCA1MywgMTcsIDksIDI3LCAyMzUsIDEsIDIsIDE1MSwgNTMsIDE3LCA5LCAyNywgMjM1LCAxLCAyLCAxMjIsIAorICAgIDUzLCAxNywgOSwgMjcsIDIzNSwgMSwgMiwgMjM0LCAxMzYsIDUzLCAxNywgOSwgMjcsIDIzNSwgMSwgMiwgMjMzLCAxMDksIAorICAgIDUzLCAxNywgOSwgMjcsIDIzNSwgMSwgMiwgNjYsIDUzLCAxNywgOSwgMjcsIDIzNSwgMSwgMiwgMTA5LCAyMzEsIDE5OCwgCisgICAgNTMsIDE3LCA5LCAyNywgMjM1LCAxLCAyLCA3NywgNTMsIDE3LCA5LCAyNywgMjMzLCAxMDksIDIsIDE1MSwgNTMsIDE3LCA5LCAKKyAgICAyNywgMjMzLCAxMDksIDIsIDEyMiwgNTMsIDE3LCA5LCAyNywgMjMzLCAxMDksIDIsIDIzNCwgMTM2LCA1MywgMTcsIDksIAorICAgIDI3LCAyMzMsIDEwOSwgMiwgNjYsIDUzLCAxNywgOSwgMjcsIDIzMywgMTA5LCAyLCAxMDksIDIzMSwgMTk4LCA1MywgMTcsIAorICAgIDksIDI3LCAyMzMsIDEwOSwgMiwgNzcsIDUzLCAxNywgOSwgMjcsIDY2LCAyLCAxNTEsIDUzLCAxNywgOSwgMjcsIDY2LCAyLCAKKyAgICAxMjIsIDUzLCAxNywgOSwgMjcsIDY2LCAyLCAyMzQsIDEzNiwgNTMsIDE3LCA5LCAyNywgNjYsIDIsIDY2LCA1MywgMTcsIDksIAorICAgIDI3LCA2NiwgMiwgMTA5LCAyMzEsIDE5OCwgNTMsIDE3LCA5LCAyNywgNjYsIDIsIDc3LCA1MywgMTcsIDksIDI3LCAyMjgsIAorICAgIDY4LCAyLCAxNTEsIDUzLCAxNywgOSwgMjcsIDIyOCwgNjgsIDIsIDEyMiwgNTMsIDE3LCA5LCAyNywgMjI4LCA2OCwgMiwgCisgICAgMjM0LCAxMzYsIDUzLCAxNywgOSwgMjcsIDIyOCwgNjgsIDIsIDY2LCA1MywgMTcsIDksIDI3LCAyMjgsIDY4LCAyLCAxMDksIAorICAgIDIzMSwgMTk4LCA1MywgMTcsIDksIDI3LCAyMjgsIDY4LCAyLCA3NywgNTMsIDE3LCA5LCAyNywgMjQxLCAyMjYsIDIsIDE1MSwgCisgICAgNTMsIDE3LCA5LCAyNywgMjQxLCAyMjYsIDIsIDY2LCA1MywgMTcsIDksIDI3LCAyNDEsIDIyNiwgMiwgMTA5LCAyMzEsIAorICAgIDE5OCwgNTMsIDE3LCA5LCAyNywgMjQxLCAyMjYsIDIsIDc3LCA1MywgMTcsIDksIDI3LCA3NywgMiwgMTUxLCA1MywgMTcsIAorICAgIDksIDI3LCA3NywgMiwgMTIyLCA1MywgMTcsIDksIDI3LCA3NywgMiwgMjM0LCAxMzYsIDUzLCAxNywgOSwgMjcsIDc3LCAyLCAKKyAgICA2NiwgNTMsIDE3LCA5LCAyNywgNzcsIDIsIDEwOSwgMjMxLCAxOTgsIDUzLCAxNywgOSwgMjcsIDc3LCAyLCA3NywgNTMsIAorICAgIDE3LCA5LCAyNywgMjE2LCAyMDQsIDIsIDIxOCwgMjQsIDEwOSwgNTMsIDE3LCA5LCAyNywgMjIzLCA5OSwgMiwgMjE4LCAyNCwgCisgICAgMTA5LCA1MywgMTcsIDksIDI3LCAxMDksIDIzMSwgMTk4LCAyLCAyMTgsIDI0LCAxMDksIDUzLCAxNywgOSwgMjcsIDIyMCwgCisgICAgOTYsIDIsIDI0OCwgMTkxLCA1MywgMTcsIDksIDI3LCAyMjAsIDk2LCAyLCAyMzQsIDIxMCwgNTMsIDE3LCA5LCAyNywgMjIwLCAKKyAgICA5NiwgMiwgMjQ0LCAxNzQsIDUzLCAxNywgOSwgMjcsIDIyMCwgOTYsIDIsIDI0OCwgMTkzLCA1MywgMTcsIDksIDI3LCAyMjAsIAorICAgIDk2LCAyLCAyMzQsIDIxMiwgNTMsIDE3LCA5LCAyNywgMjIwLCA5NiwgMiwgMjE4LCAyNCwgMTA5LCA1MywgMTcsIDksIDI3LCAKKyAgICA3NywgMiwgMTgyLCA3MiwgMiwgMjIzLCA5OSwgNDAsIDE3LCA5LCAyNywgNzcsIDIsIDE4MiwgNzIsIDIsIDIxMCwgMTA5LCAKKyAgICA0MCwgMTcsIDksIDI3LCA3NywgMiwgMTgyLCA3MiwgMiwgNjYsIDQwLCAxNywgOSwgMjcsIDc3LCAyLCAxODIsIDcyLCAyLCAKKyAgICAyMjgsIDY4LCA0MCwgMTcsIDksIDI3LCA3NywgMiwgMTgyLCA3MiwgMiwgMTA5LCAyMzEsIDE5OCwgNDAsIDE3LCA5LCAyNywgCisgICAgNzcsIDIsIDE4MiwgNzIsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAyNTIsIDYzLCAyLCAyMjMsIDk5LCA0MCwgMTcsIDksIDI3LCAKKyAgICAyNTIsIDYzLCAyLCAyMTAsIDEwOSwgNDAsIDE3LCA5LCAyNywgMjUyLCA2MywgMiwgNjYsIDQwLCAxNywgOSwgMjcsIDI1MiwgCisgICAgNjMsIDIsIDIyOCwgNjgsIDQwLCAxNywgOSwgMjcsIDI1MiwgNjMsIDIsIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMjcsIAorICAgIDI1MiwgNjMsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAyMTcsIDksIDIsIDIyMywgOTksIDQwLCAxNywgOSwgMjcsIDIxNywgOSwgCisgICAgMiwgMjEwLCAxMDksIDQwLCAxNywgOSwgMjcsIDIxNywgOSwgMiwgNjYsIDQwLCAxNywgOSwgMjcsIDIxNywgOSwgMiwgMjI4LCAKKyAgICA2OCwgNDAsIDE3LCA5LCAyNywgMjE3LCA5LCAyLCAxMDksIDIzMSwgMTk4LCA0MCwgMTcsIDksIDI3LCAyMTcsIDksIDIsIAorICAgIDc3LCA0MCwgMTcsIDksIDI3LCAyMTYsIDE5NCwgMiwgMjIzLCA5OSwgNDAsIDE3LCA5LCAyNywgMjE2LCAxOTQsIDIsIDIxMCwgCisgICAgMTA5LCA0MCwgMTcsIDksIDI3LCAyMTYsIDE5NCwgMiwgNjYsIDQwLCAxNywgOSwgMjcsIDIxNiwgMTk0LCAyLCAyMjgsIDY4LCAKKyAgICA0MCwgMTcsIDksIDI3LCAyMTYsIDE5NCwgMiwgMTA5LCAyMzEsIDE5OCwgNDAsIDE3LCA5LCAyNywgMjE2LCAxOTQsIDIsIAorICAgIDc3LCA0MCwgMTcsIDksIDI3LCAyNDQsIDE1MSwgMiwgMTA5LCAyMzEsIDE5OCwgNDAsIDE3LCA5LCAyNywgMjQ0LCAxNTEsIAorICAgIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAyMjQsIDg1LCAyLCAxMDksIDIzMSwgMTk4LCA0MCwgMTcsIDksIDI3LCAyMjQsIDg1LCAKKyAgICAyLCA3NywgNDAsIDE3LCA5LCAyNywgMjM1LCAxLCAyLCAxMDksIDQwLCAxNywgOSwgMjcsIDIzNSwgMSwgMiwgMjMzLCAxMDksIAorICAgIDQwLCAxNywgOSwgMjcsIDIzNSwgMSwgMiwgNjYsIDQwLCAxNywgOSwgMjcsIDIzNSwgMSwgMiwgMTA5LCAyMzEsIDE5OCwgCisgICAgNDAsIDE3LCA5LCAyNywgMjM1LCAxLCAyLCA3NywgNDAsIDE3LCA5LCAyNywgMjMzLCAxMDksIDIsIDY2LCA0MCwgMTcsIDksIAorICAgIDI3LCAyMzMsIDEwOSwgMiwgMTA5LCAyMzEsIDE5OCwgNDAsIDE3LCA5LCAyNywgMjMzLCAxMDksIDIsIDc3LCA0MCwgMTcsIAorICAgIDksIDI3LCA2NiwgMiwgMTA5LCA0MCwgMTcsIDksIDI3LCA2NiwgMiwgNjYsIDQwLCAxNywgOSwgMjcsIDIyOCwgNjgsIDIsIAorICAgIDIyMywgOTksIDQwLCAxNywgOSwgMjcsIDIyOCwgNjgsIDIsIDIxMCwgMTA5LCA0MCwgMTcsIDksIDI3LCAyMjgsIDY4LCAyLCAKKyAgICA2NiwgNDAsIDE3LCA5LCAyNywgMjI4LCA2OCwgMiwgMjI4LCA2OCwgNDAsIDE3LCA5LCAyNywgMjI4LCA2OCwgMiwgMTA5LCAKKyAgICAyMzEsIDE5OCwgNDAsIDE3LCA5LCAyNywgMjI4LCA2OCwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDEwOSwgMjMxLCAxOTgsIDIsIAorICAgIDIxOCwgMjQsIDEwOSwgNDAsIDE3LCA5LCAyNywgNzcsIDIsIDIyMywgOTksIDQwLCAxNywgOSwgMjcsIDc3LCAyLCAyMTAsIAorICAgIDEwOSwgNDAsIDE3LCA5LCAyNywgNzcsIDIsIDY2LCA0MCwgMTcsIDksIDI3LCA3NywgMiwgMjI4LCA2OCwgNDAsIDE3LCA5LCAKKyAgICAyNywgNzcsIDIsIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMjcsIDc3LCAyLCA3NywgNDAsIDE3LCA5LCAyNywgNzcsIDIsIAorICAgIDE4MiwgNzIsIDIsIDE1MSwgNjUsIDE3LCA5LCAyNywgNzcsIDIsIDE4MiwgNzIsIDIsIDEyMiwgNjUsIDE3LCA5LCAyNywgCisgICAgNzcsIDIsIDE4MiwgNzIsIDIsIDIzNCwgMTM2LCA2NSwgMTcsIDksIDI3LCA3NywgMiwgMTgyLCA3MiwgMiwgNjYsIDY1LCAKKyAgICAxNywgOSwgMjcsIDc3LCAyLCAxODIsIDcyLCAyLCAyNDEsIDIyNiwgNjUsIDE3LCA5LCAyNywgMjUyLCA2MywgMiwgMTUxLCAKKyAgICA2NSwgMTcsIDksIDI3LCAyNTIsIDYzLCAyLCAxMjIsIDY1LCAxNywgOSwgMjcsIDI1MiwgNjMsIDIsIDIzNCwgMTM2LCA2NSwgCisgICAgMTcsIDksIDI3LCAyNTIsIDYzLCAyLCA2NiwgNjUsIDE3LCA5LCAyNywgMjUyLCA2MywgMiwgMjQxLCAyMjYsIDY1LCAxNywgCisgICAgOSwgMjcsIDIxNywgOSwgMiwgMTUxLCA2NSwgMTcsIDksIDI3LCAyMTcsIDksIDIsIDEyMiwgNjUsIDE3LCA5LCAyNywgMjE3LCAKKyAgICA5LCAyLCAyMzQsIDEzNiwgNjUsIDE3LCA5LCAyNywgMjE3LCA5LCAyLCA2NiwgNjUsIDE3LCA5LCAyNywgMjE3LCA5LCAyLCAKKyAgICAyNDEsIDIyNiwgNjUsIDE3LCA5LCAyNywgMjE2LCAxOTQsIDIsIDY2LCA2NSwgMTcsIDksIDI3LCAxNTEsIDIsIDEyMiwgNjUsIAorICAgIDE3LCA5LCAyNywgMTUxLCAyLCA2NiwgNjUsIDE3LCA5LCAyNywgMTIyLCAyLCAxNTEsIDY1LCAxNywgOSwgMjcsIDEyMiwgMiwgCisgICAgNjYsIDY1LCAxNywgOSwgMjcsIDIzNCwgMTM2LCAyLCAxNTEsIDY1LCAxNywgOSwgMjcsIDIzNCwgMTM2LCAyLCA2NiwgNjUsIAorICAgIDE3LCA5LCAyNywgMjIxLCAxNjksIDIsIDE1MSwgNjUsIDE3LCA5LCAyNywgMjIxLCAxNjksIDIsIDEyMiwgNjUsIDE3LCA5LCAKKyAgICAyNywgMjIxLCAxNjksIDIsIDIzNCwgMTM2LCA2NSwgMTcsIDksIDI3LCAyMjEsIDE2OSwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIAorICAgIDIyMiwgMjksIDIsIDEyMiwgNjUsIDE3LCA5LCAyNywgMjIyLCAyOSwgMiwgMjM0LCAxMzYsIDY1LCAxNywgOSwgMjcsIDIyMiwgCisgICAgMjksIDIsIDY2LCA2NSwgMTcsIDksIDI3LCAyNDgsIDIyNSwgMiwgMTUxLCA2NSwgMTcsIDksIDI3LCAyNDgsIDIyNSwgMiwgCisgICAgMTIyLCA2NSwgMTcsIDksIDI3LCAyNDgsIDIyNSwgMiwgMjM0LCAxMzYsIDY1LCAxNywgOSwgMjcsIDI0OCwgMjI1LCAyLCAKKyAgICA2NiwgNjUsIDE3LCA5LCAyNywgMjE3LCA4MiwgMiwgMTIyLCA2NSwgMTcsIDksIDI3LCAyMTAsIDExMiwgMiwgNjYsIDY1LCAKKyAgICAxNywgOSwgMjcsIDI1NCwgMjA2LCAyLCAxNTEsIDY1LCAxNywgOSwgMjcsIDI1NCwgMjA2LCAyLCA2NiwgNjUsIDE3LCA5LCAKKyAgICAyNywgMjQyLCAyNTIsIDIsIDE1MSwgNjUsIDE3LCA5LCAyNywgMjQyLCAyNTIsIDIsIDY2LCA2NSwgMTcsIDksIDI3LCAyNDQsIAorICAgIDE1MSwgMiwgMTUxLCA2NSwgMTcsIDksIDI3LCAyNDQsIDE1MSwgMiwgMTIyLCA2NSwgMTcsIDksIDI3LCAyNDQsIDE1MSwgMiwgCisgICAgMjM0LCAxMzYsIDY1LCAxNywgOSwgMjcsIDI0NCwgMTUxLCAyLCA2NiwgNjUsIDE3LCA5LCAyNywgMjI0LCA4NSwgMiwgMTIyLCAKKyAgICA2NSwgMTcsIDksIDI3LCAyMjQsIDg1LCAyLCA2NiwgNjUsIDE3LCA5LCAyNywgMjM1LCAxLCAyLCAxNTEsIDY1LCAxNywgOSwgCisgICAgMjcsIDIzNSwgMSwgMiwgMTIyLCA2NSwgMTcsIDksIDI3LCAyMzUsIDEsIDIsIDIzNCwgMTM2LCA2NSwgMTcsIDksIDI3LCAKKyAgICAyMzUsIDEsIDIsIDIzMywgMTA5LCA2NSwgMTcsIDksIDI3LCAyMzUsIDEsIDIsIDY2LCA2NSwgMTcsIDksIDI3LCAyMzMsIAorICAgIDEwOSwgMiwgMTUxLCA2NSwgMTcsIDksIDI3LCAyMzMsIDEwOSwgMiwgMTIyLCA2NSwgMTcsIDksIDI3LCAyMzMsIDEwOSwgMiwgCisgICAgMjM0LCAxMzYsIDY1LCAxNywgOSwgMjcsIDIzMywgMTA5LCAyLCA2NiwgNjUsIDE3LCA5LCAyNywgMjMzLCAxMDksIDIsIAorICAgIDI0MSwgMjI2LCA2NSwgMTcsIDksIDI3LCA2NiwgMiwgMTUxLCA2NSwgMTcsIDksIDI3LCA2NiwgMiwgMTIyLCA2NSwgMTcsIAorICAgIDksIDI3LCA2NiwgMiwgMjM0LCAxMzYsIDY1LCAxNywgOSwgMjcsIDY2LCAyLCA2NiwgNjUsIDE3LCA5LCAyNywgMjI4LCA2OCwgCisgICAgMiwgMTUxLCA2NSwgMTcsIDksIDI3LCAyMjgsIDY4LCAyLCAxMjIsIDY1LCAxNywgOSwgMjcsIDIyOCwgNjgsIDIsIDIzNCwgCisgICAgMTM2LCA2NSwgMTcsIDksIDI3LCAyMjgsIDY4LCAyLCA2NiwgNjUsIDE3LCA5LCAyNywgMjI4LCA2OCwgMiwgMjQxLCAyMjYsIAorICAgIDY1LCAxNywgOSwgMjcsIDI0MSwgMjI2LCAyLCAxNTEsIDY1LCAxNywgOSwgMjcsIDI0MSwgMjI2LCAyLCA2NiwgNjUsIDE3LCAKKyAgICA5LCAyNywgMjQxLCAyMjYsIDIsIDIxOCwgMjQsIDEwOSwgNjUsIDE3LCA5LCAyNywgNzcsIDIsIDE1MSwgNjUsIDE3LCA5LCAKKyAgICAyNywgNzcsIDIsIDEyMiwgNjUsIDE3LCA5LCAyNywgNzcsIDIsIDIzNCwgMTM2LCA2NSwgMTcsIDksIDI3LCA3NywgMiwgNjYsIAorICAgIDY1LCAxNywgOSwgMjcsIDc3LCAyLCAyNDEsIDIyNiwgNjUsIDE3LCA5LCAyNywgNzcsIDIsIDE4MiwgNzIsIDIsIDY2LCAKKyAgICAxNDcsIDE3LCA5LCAyNywgNzcsIDIsIDE4MiwgNzIsIDIsIDI0MSwgMjI2LCAxNDcsIDE3LCA5LCAyNywgMjUyLCA2MywgMiwgCisgICAgNjYsIDE0NywgMTcsIDksIDI3LCAyNTIsIDYzLCAyLCAyNDEsIDIyNiwgMTQ3LCAxNywgOSwgMjcsIDIxNywgOSwgMiwgNjYsIAorICAgIDE0NywgMTcsIDksIDI3LCAyMTcsIDksIDIsIDI0MSwgMjI2LCAxNDcsIDE3LCA5LCAyNywgMjE2LCAxOTQsIDIsIDY2LCAKKyAgICAxNDcsIDE3LCA5LCAyNywgMjE2LCAxOTQsIDIsIDI0MSwgMjI2LCAxNDcsIDE3LCA5LCAyNywgMjIxLCAxNjksIDIsIDY2LCAKKyAgICAxNDcsIDE3LCA5LCAyNywgMjIxLCAxNjksIDIsIDI0MSwgMjI2LCAxNDcsIDE3LCA5LCAyNywgMjIwLCA2MiwgMiwgNjYsIAorICAgIDE0NywgMTcsIDksIDI3LCAyMjAsIDYyLCAyLCAyNDEsIDIyNiwgMTQ3LCAxNywgOSwgMjcsIDIzNSwgMSwgMiwgMjMzLCAKKyAgICAxMDksIDE0NywgMTcsIDksIDI3LCAyMzUsIDEsIDIsIDY2LCAxNDcsIDE3LCA5LCAyNywgMjMzLCAxMDksIDIsIDY2LCAxNDcsIAorICAgIDE3LCA5LCAyNywgMjI4LCA2OCwgMiwgNjYsIDE0NywgMTcsIDksIDI3LCAyMjgsIDY4LCAyLCAyNDEsIDIyNiwgMTQ3LCAxNywgCisgICAgOSwgMjcsIDc3LCAyLCA2NiwgMTQ3LCAxNywgOSwgMjcsIDc3LCAyLCAyNDEsIDIyNiwgMTQ3LCAxNywgOSwgMjcsIDIyMCwgCisgICAgOTYsIDIsIDI0NCwgMTc0LCAxNDcsIDE3LCA5LCAyNywgMjIwLCA5NiwgMiwgMjQ4LCAxOTMsIDE0NywgMTcsIDksIDI3LCAKKyAgICAyMjAsIDk2LCAyLCAyMzQsIDIxMiwgMTQ3LCAxNywgOSwgMjcsIDIxNywgODIsIDIsIDEwOSwgMjMxLCAxOTgsIDUzLCAxNywgCisgICAgOSwgMjcsIDIxNywgODIsIDIsIDc3LCA1MywgMTcsIDksIDI3LCAyNTQsIDIwNiwgMiwgMTA5LCAyMzEsIDE5OCwgNTMsIDE3LCAKKyAgICA5LCAyNywgMjU0LCAyMDYsIDIsIDc3LCA1MywgMTcsIDksIDI3LCAyNDIsIDI1MiwgMiwgMTA5LCAyMzEsIDE5OCwgNTMsIAorICAgIDE3LCA5LCAyNywgMjQyLCAyNTIsIDIsIDc3LCA1MywgMTcsIDksIDI3LCAyMjEsIDE2OSwgMiwgMTA5LCAyMzEsIDE5OCwgCisgICAgNTMsIDE3LCA5LCAyNywgMjIxLCAxNjksIDIsIDc3LCA1MywgMTcsIDksIDI3LCAyMjAsIDYyLCAyLCAxMDksIDIzMSwgMTk4LCAKKyAgICA1MywgMTcsIDksIDI3LCAyMjAsIDYyLCAyLCA3NywgNTMsIDE3LCA5LCAyNywgMTIyLCAyLCAxMDksIDIzMSwgMTk4LCA1MywgCisgICAgMTcsIDksIDI3LCAxMjIsIDIsIDc3LCA1MywgMTcsIDksIDI3LCAxNTEsIDIsIDEwOSwgMjMxLCAxOTgsIDUzLCAxNywgOSwgCisgICAgMjcsIDE1MSwgMiwgNzcsIDUzLCAxNywgOSwgMjcsIDIzNCwgMTM2LCAyLCAxMDksIDIzMSwgMTk4LCA1MywgMTcsIDksIDI3LCAKKyAgICAyMzQsIDEzNiwgMiwgNzcsIDUzLCAxNywgOSwgMjcsIDIyMiwgMjksIDIsIDEwOSwgMjMxLCAxOTgsIDUzLCAxNywgOSwgMjcsIAorICAgIDIyMiwgMjksIDIsIDc3LCA1MywgMTcsIDksIDI3LCAyNDgsIDIyNSwgMiwgMTA5LCAyMzEsIDE5OCwgNTMsIDE3LCA5LCAyNywgCisgICAgMjQ4LCAyMjUsIDIsIDc3LCA1MywgMTcsIDksIDI3LCAyMjAsIDYyLCAyLCAxNTEsIDUzLCAxNywgOSwgMjcsIDIyMCwgNjIsIAorICAgIDIsIDEyMiwgNTMsIDE3LCA5LCAyNywgMjIwLCA2MiwgMiwgMjM0LCAxMzYsIDUzLCAxNywgOSwgMjcsIDIyMCwgNjIsIDIsIAorICAgIDY2LCA1MywgMTcsIDksIDI3LCAyMjAsIDYyLCAyLCAyMjMsIDk5LCA1MywgMTcsIDksIDI3LCAyMjEsIDE2OSwgMiwgMjIzLCAKKyAgICA5OSwgNTMsIDE3LCA5LCAyNywgMjIyLCAyOSwgMiwgMjIzLCA5OSwgNTMsIDE3LCA5LCAyNywgMjQ4LCAyMjUsIDIsIDIyMywgCisgICAgOTksIDUzLCAxNywgOSwgMjcsIDIxNywgODIsIDIsIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMjcsIDIxNywgODIsIDIsIAorICAgIDc3LCA0MCwgMTcsIDksIDI3LCAyNTQsIDIwNiwgMiwgMTA5LCAyMzEsIDE5OCwgNDAsIDE3LCA5LCAyNywgMjU0LCAyMDYsIAorICAgIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAyNDIsIDI1MiwgMiwgMTA5LCAyMzEsIDE5OCwgNDAsIDE3LCA5LCAyNywgMjQyLCAKKyAgICAyNTIsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAyMjEsIDE2OSwgMiwgMTA5LCAyMzEsIDE5OCwgNDAsIDE3LCA5LCAyNywgCisgICAgMjIxLCAxNjksIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAyMjAsIDYyLCAyLCAxMDksIDIzMSwgMTk4LCA0MCwgMTcsIDksIDI3LCAKKyAgICAyMjAsIDYyLCAyLCA3NywgNDAsIDE3LCA5LCAyNywgMTIyLCAyLCAxMDksIDIzMSwgMTk4LCA0MCwgMTcsIDksIDI3LCAxMjIsIAorICAgIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAxNTEsIDIsIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMjcsIDE1MSwgMiwgNzcsIAorICAgIDQwLCAxNywgOSwgMjcsIDIzNCwgMTM2LCAyLCAxMDksIDIzMSwgMTk4LCA0MCwgMTcsIDksIDI3LCAyMzQsIDEzNiwgMiwgCisgICAgNzcsIDQwLCAxNywgOSwgMjcsIDIyMiwgMjksIDIsIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMjcsIDIyMiwgMjksIDIsIAorICAgIDc3LCA0MCwgMTcsIDksIDI3LCAyNDgsIDIyNSwgMiwgMTA5LCAyMzEsIDE5OCwgNDAsIDE3LCA5LCAyNywgMjQ4LCAyMjUsIAorICAgIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAyMjAsIDYyLCAyLCAxNTEsIDQwLCAxNywgOSwgMjcsIDIyMCwgNjIsIDIsIDEyMiwgCisgICAgNDAsIDE3LCA5LCAyNywgMjIwLCA2MiwgMiwgMjM0LCAxMzYsIDQwLCAxNywgOSwgMjcsIDIyMCwgNjIsIDIsIDY2LCA0MCwgCisgICAgMTcsIDksIDI3LCAyMjAsIDYyLCAyLCAyMjMsIDk5LCA0MCwgMTcsIDksIDI3LCAyMjEsIDE2OSwgMiwgMjIzLCA5OSwgNDAsIAorICAgIDE3LCA5LCAyNywgMjIyLCAyOSwgMiwgMjIzLCA5OSwgNDAsIDE3LCA5LCAyNywgMjQ4LCAyMjUsIDIsIDIyMywgOTksIDQwLCAKKyAgICAxNywgOSwgMjcsIDIyMCwgNjIsIDIsIDE1MSwgNjUsIDE3LCA5LCAyNywgMjIwLCA2MiwgMiwgMTIyLCA2NSwgMTcsIDksIAorICAgIDI3LCAyMjAsIDYyLCAyLCAyMzQsIDEzNiwgNjUsIDE3LCA5LCAyNywgMjIwLCA2MiwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIAorICAgIDIyMSwgMTY5LCAyLCAyNDEsIDIyNiwgNjUsIDE3LCA5LCAyNywgMjIwLCA2MiwgMiwgMjQxLCAyMjYsIDY1LCAxNywgOSwgCisgICAgMjcsIDIxNywgODIsIDIsIDY2LCA2NSwgMTcsIDksIDI3LCAyMjEsIDE2OSwgMiwgMTUxLCAxNDcsIDE3LCA5LCAyNywgMjIxLCAKKyAgICAxNjksIDIsIDEyMiwgMTQ3LCAxNywgOSwgMjcsIDIyMSwgMTY5LCAyLCAyMzQsIDEzNiwgMTQ3LCAxNywgOSwgMjcsIDIyMCwgCisgICAgNjIsIDIsIDE1MSwgMTQ3LCAxNywgOSwgMjcsIDIyMCwgNjIsIDIsIDEyMiwgMTQ3LCAxNywgOSwgMjcsIDIyMCwgNjIsIDIsIAorICAgIDIzNCwgMTM2LCAxNDcsIDE3LCA5LCAyNywgMjE3LCA4MiwgMiwgNjYsIDE0NywgMTcsIDksIDI3LCAyMTAsIDExMiwgMiwgCisgICAgNjYsIDE0NywgMTcsIDksIDI3LCAxMDksIDIsIDI0NCwgMTcyLCA0MCwgMTcsIDksIDI3LCAxMDksIDIsIDI0NCwgMTcyLCAKKyAgICA1MywgMTcsIDIyNiwgMTUwLCA0MywgMjI2LCA3LCAyMjYsIDE1MCwgNDQsIDIyNiwgNywgOSwgMjcsIDIxNywgOSwgMiwgCisgICAgMTUxLCAyLCA2NiwgNjUsIDE3LCA5LCAyNywgMjE3LCA5LCAyLCAxMjIsIDIsIDE1MSwgNDAsIDE3LCA5LCAyNywgMjE3LCA5LCAKKyAgICAyLCAxMjIsIDIsIDE1MSwgNjUsIDE3LCA5LCAyNywgMjE3LCA5LCAyLCAxMjIsIDIsIDY2LCA2NSwgMTcsIDksIDI3LCAyMTcsIAorICAgIDksIDIsIDIzNCwgMTM2LCAyLCA2NiwgNjUsIDE3LCA5LCAyNywgMjE3LCA5LCAyLCA2NiwgMiwgMTUxLCA2NSwgMTcsIDksIAorICAgIDI3LCAyMTcsIDksIDIsIDY2LCAyLCAxMjIsIDY1LCAxNywgOSwgMjcsIDIxNywgOSwgMiwgNjYsIDIsIDIzNCwgMTM2LCA2NSwgCisgICAgMTcsIDksIDI3LCAxNTEsIDIsIDY2LCAyLCAxMjIsIDQwLCAxNywgOSwgMjcsIDE1MSwgMiwgNjYsIDIsIDEyMiwgNjUsIDE3LCAKKyAgICA5LCAyNywgMTIyLCAyLCA2NiwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDEyMiwgMiwgNjYsIDIsIDEwOSwgMjMxLCAxOTgsIAorICAgIDQwLCAxNywgOSwgMjcsIDIyMSwgMTY5LCAyLCAxMjIsIDIsIDE1MSwgNjUsIDE3LCA5LCAyNywgMjIxLCAxNjksIDIsIDE1MSwgCisgICAgMiwgMTIyLCA2NSwgMTcsIDksIDI3LCAyMjEsIDE2OSwgMiwgMTUxLCAyLCAxMDksIDIzMSwgMTk4LCA0MCwgMTcsIDksIDI3LCAKKyAgICAyMjEsIDE2OSwgMiwgNjYsIDIsIDEyMiwgNDAsIDE3LCA5LCAyNywgMjIxLCAxNjksIDIsIDY2LCAyLCAxMjIsIDY1LCAxNywgCisgICAgOSwgMjcsIDIyMSwgMTY5LCAyLCA2NiwgMiwgMTUxLCA2NSwgMTcsIDksIDI3LCAyMjEsIDE2OSwgMiwgNjYsIDIsIDY2LCAKKyAgICA0MCwgMTcsIDksIDI3LCAyMjEsIDE2OSwgMiwgNjYsIDIsIDY2LCA2NSwgMTcsIDksIDI3LCAyMjIsIDI5LCAyLCAxMjIsIDIsIAorICAgIDEyMiwgNDAsIDE3LCA5LCAyNywgMjIyLCAyOSwgMiwgMTIyLCAyLCAxMjIsIDY1LCAxNywgOSwgMjcsIDIyMiwgMjksIDIsIAorICAgIDY2LCAyLCA2NiwgNDAsIDE3LCA5LCAyNywgMjIwLCA2MiwgMiwgMTIyLCAyLCA2NiwgNDAsIDE3LCA5LCAyNywgMjIwLCA2MiwgCisgICAgMiwgMTIyLCAyLCA2NiwgNjUsIDE3LCA5LCAyNywgMjIwLCA2MiwgMiwgMTUxLCAyLCA3NywgNDAsIDE3LCA5LCAyNywgMjIwLCAKKyAgICA2MiwgMiwgNjYsIDIsIDIzNCwgMTM2LCA0MCwgMTcsIDksIDI3LCAyMjAsIDYyLCAyLCA2NiwgMiwgMjM0LCAxMzYsIDY1LCAKKyAgICAxNywgOSwgMjcsIDIyMCwgNjIsIDIsIDY2LCAyLCA2NiwgNDAsIDE3LCA5LCAyNywgMjIwLCA2MiwgMiwgNjYsIDIsIDY2LCAKKyAgICA2NSwgMTcsIDksIDI3LCAyNDgsIDIyNSwgMiwgMTIyLCAyLCAxMDksIDIzMSwgMTk4LCA0MCwgMTcsIDksIDI3LCAyNDgsIAorICAgIDIyNSwgMiwgMjM0LCAxMzYsIDIsIDY2LCA0MCwgMTcsIDksIDI3LCAyNDgsIDIyNSwgMiwgMjM0LCAxMzYsIDIsIDY2LCA2NSwgCisgICAgMTcsIDksIDI3LCAyMTcsIDgyLCAyLCA2NiwgMiwgMTIyLCA0MCwgMTcsIDksIDI3LCAyMTcsIDgyLCAyLCA2NiwgMiwgMTIyLCAKKyAgICA2NSwgMTcsIDksIDI3LCAyMTcsIDgyLCAyLCA2NiwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDIxNywgODIsIDIsIDY2LCAyLCAKKyAgICA3NywgNDAsIDE3LCA5LCAyNywgMjU0LCAyMDYsIDIsIDE1MSwgMiwgNjYsIDQwLCAxNywgOSwgMjcsIDI1NCwgMjA2LCAyLCAKKyAgICA2NiwgMiwgNjYsIDQwLCAxNywgOSwgMjcsIDI1NCwgMjA2LCAyLCA2NiwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDI1NCwgCisgICAgMjA2LCAyLCA2NiwgMiwgMTA5LCAyMzEsIDE5OCwgNDAsIDE3LCA5LCAyNywgMjQyLCAyNTIsIDIsIDY2LCAyLCA2NiwgNDAsIAorICAgIDE3LCA5LCAyNywgMjQyLCAyNTIsIDIsIDY2LCAyLCA3NywgNDAsIDE3LCA5LCAyNywgMjQyLCAyNTIsIDIsIDY2LCAyLCAKKyAgICAxMDksIDIzMSwgMTk4LCA0MCwgMTcsIDksIDI3LCAyNDQsIDE1MSwgMiwgMjM0LCAxMzYsIDIsIDY2LCA0MCwgMTcsIDksIAorICAgIDI3LCAyNDQsIDE1MSwgMiwgMjM0LCAxMzYsIDIsIDY2LCA2NSwgMTcsIDksIDI3LCAyMjQsIDg1LCAyLCA2NiwgMiwgMTIyLCAKKyAgICA0MCwgMTcsIDksIDI3LCAyMjQsIDg1LCAyLCA2NiwgMiwgNjYsIDQwLCAxNywgOSwgMjcsIDIzMywgMTA5LCAyLCAxMjIsIDIsIAorICAgIDY2LCA0MCwgMTcsIDksIDI3LCAyMzMsIDEwOSwgMiwgMTIyLCAyLCA3NywgNDAsIDE3LCA5LCAyNywgMjMzLCAxMDksIDIsIAorICAgIDEyMiwgMiwgMTA5LCAyMzEsIDE5OCwgNDAsIDE3LCA5LCAyNywgMjMzLCAxMDksIDIsIDE1MSwgMiwgMTUxLCA2NSwgMTcsIAorICAgIDksIDI3LCAyMzMsIDEwOSwgMiwgMTUxLCAyLCAxNTEsIDQwLCAxNywgOSwgMjcsIDIzMywgMTA5LCAyLCAyMzQsIDEzNiwgMiwgCisgICAgNjYsIDQwLCAxNywgOSwgMjcsIDIzMywgMTA5LCAyLCAyMzQsIDEzNiwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDIzMywgMTA5LCAKKyAgICAyLCA2NiwgMiwgMTIyLCA0MCwgMTcsIDksIDI3LCAyMzMsIDEwOSwgMiwgNjYsIDIsIDEyMiwgNjUsIDE3LCA5LCAyNywgNjYsIAorICAgIDIsIDEyMiwgMiwgMTUxLCA2NSwgMTcsIDksIDI3LCA2NiwgMiwgMTIyLCAyLCA2NiwgNjUsIDE3LCA5LCAyNywgNjYsIDIsIAorICAgIDEyMiwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDY2LCAyLCAxNTEsIDIsIDEyMiwgNjUsIDE3LCA5LCAyNywgNjYsIDIsIDE1MSwgCisgICAgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDY2LCAyLCAyMzQsIDEzNiwgMiwgMTUxLCA2NSwgMTcsIDksIDI3LCA2NiwgMiwgMjM0LCAKKyAgICAxMzYsIDIsIDY2LCA2NSwgMTcsIDksIDI3LCA2NiwgMiwgMTUxLCAyLCAyMzQsIDEzNiwgNjUsIDE3LCA5LCAyNywgMjQxLCAKKyAgICAyMjYsIDIsIDY2LCAyLCAxNTEsIDY1LCAxNywgOSwgMjcsIDI0MSwgMjI2LCAyLCA2NiwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIAorICAgIDIyOCwgNjgsIDIsIDEyMiwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDIyOCwgNjgsIDIsIDEyMiwgMiwgMTA5LCAyMzEsIDE5OCwgCisgICAgNDAsIDE3LCA5LCAyNywgMjI4LCA2OCwgMiwgMTUxLCAyLCA2NiwgNDAsIDE3LCA5LCAyNywgMjI4LCA2OCwgMiwgMTUxLCAyLCAKKyAgICA2NiwgNjUsIDE3LCA5LCAyNywgMjI4LCA2OCwgMiwgMTUxLCAyLCAxMDksIDIzMSwgMTk4LCA0MCwgMTcsIDksIDI3LCAyMjgsIAorICAgIDY4LCAyLCA2NiwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDIyOCwgNjgsIDIsIDY2LCAyLCAxMDksIDIzMSwgMTk4LCA0MCwgCisgICAgMTcsIDksIDI3LCA3NywgMiwgNjYsIDIsIDY2LCA0MCwgMTcsIDksIDI3LCA3NywgMiwgNjYsIDIsIDY2LCA2NSwgMTcsIDksIAorICAgIDI3LCAyNTIsIDYzLCAyLCAyMzQsIDEzNiwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDIxNywgOSwgMiwgMTUxLCAyLCA3NywgCisgICAgNDAsIDE3LCA5LCAyNywgMjE3LCA5LCAyLCAxNTEsIDIsIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMjcsIDIxNywgOSwgCisgICAgMiwgMjM0LCAxMzYsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAyMTcsIDksIDIsIDIzNCwgMTM2LCAyLCAxMDksIDIzMSwgMTk4LCAKKyAgICA0MCwgMTcsIDksIDI3LCAyMTcsIDksIDIsIDY2LCAyLCA3NywgNDAsIDE3LCA5LCAyNywgMjE3LCA5LCAyLCA2NiwgMiwgCisgICAgMTA5LCAyMzEsIDE5OCwgNDAsIDE3LCA5LCAyNywgMTUxLCAyLCA2NiwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDE1MSwgMiwgCisgICAgMTIyLCAyLCAxMDksIDIzMSwgMTk4LCA0MCwgMTcsIDksIDI3LCAxNTEsIDIsIDY2LCAyLCAxMDksIDIzMSwgMTk4LCA0MCwgCisgICAgMTcsIDksIDI3LCAyMjEsIDE2OSwgMiwgMjM0LCAxMzYsIDIsIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMjcsIDIyMiwgCisgICAgMjksIDIsIDEyMiwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDIyMCwgNjIsIDIsIDEyMiwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIAorICAgIDI0OCwgMjI1LCAyLCAxMjIsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAyMzMsIDEwOSwgMiwgMTUxLCAyLCA3NywgNDAsIDE3LCAKKyAgICA5LCAyNywgMjMzLCAxMDksIDIsIDY2LCAyLCA3NywgNDAsIDE3LCA5LCAyNywgNzcsIDIsIDEyMiwgMiwgNzcsIDQwLCAxNywgCisgICAgOSwgMjcsIDc3LCAyLCAxNTEsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCA3NywgMiwgNjYsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAKKyAgICA2NiwgMiwgNjYsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAyMjQsIDg1LCAyLCA2NiwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIAorICAgIDIyOCwgNjgsIDIsIDEyMiwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDIyNCwgODUsIDIsIDY2LCAyLCAxMjIsIDY1LCAxNywgOSwgCisgICAgMjcsIDIzMywgMTA5LCAyLCAxMjIsIDIsIDY2LCA2NSwgMTcsIDksIDI3LCAyNTQsIDIwNiwgMiwgNjYsIDIsIDc3LCA0MCwgCisgICAgMTcsIDksIDI3LCAyMzUsIDEsIDIsIDY2LCAyLCA3NywgNDAsIDE3LCA5LCAyNywgMjI4LCA2OCwgMiwgMTUxLCAyLCAxMjIsIAorICAgIDY1LCAxNywgOSwgMjcsIDY2LCAyLCAyMzQsIDEzNiwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDIzMywgMTA5LCAyLCAxNTEsIAorICAgIDIsIDY2LCA2NSwgMTcsIDksIDI3LCAyMzUsIDEsIDIsIDY2LCAyLCA2NiwgNDAsIDE3LCA5LCAyNywgMjMzLCAxMDksIDIsIAorICAgIDE1MSwgMiwgNjYsIDQwLCAxNywgOSwgMjcsIDIyOCwgNjgsIDIsIDE1MSwgMiwgMTIyLCA0MCwgMTcsIDksIDI3LCAxNTEsIAorICAgIDIsIDEyMiwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDEyMiwgMiwgMTUxLCAyLCA3NywgNDAsIDE3LCA5LCAyNywgNjYsIDIsIAorICAgIDE1MSwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDI0NCwgMTUxLCAyLCA2NiwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDI1MiwgCisgICAgNjMsIDIsIDEyMiwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDIzNSwgMSwgMiwgNjYsIDIsIDY2LCA2NSwgMTcsIDksIDI3LCAKKyAgICAyNTQsIDIwNiwgMiwgMTUxLCAyLCA2NiwgNjUsIDE3LCA5LCAyNywgMjIyLCAyOSwgMiwgNjYsIDIsIDY2LCA2NSwgMTcsIDksIAorICAgIDI3LCAyMjEsIDE2OSwgMiwgMjM0LCAxMzYsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAyMjgsIDY4LCAyLCAxNTEsIDIsIDc3LCAKKyAgICA0MCwgMTcsIDksIDI3LCAyMjIsIDYsIDIxNCwgMTI4LCAyNTMsIDI0NiwgMjM0LCAxMCwgMjE4LCAxMzIsIDUsIDUzLCAxNywgCisgICAgOSwgMjcsIDIyNCwgODEsIDIxNCwgMTI4LCAyNTMsIDI0NiwgMjM0LCAxMCwgMjE4LCAxMzIsIDUsIDUzLCAxNywgOSwgMjcsIAorICAgIDI1NCwgMTYyLCA1MywgMTcsIDksIDI3LCAyNTQsIDE5MiwgNTMsIDE3LCA5LCAyNywgMjMwLCAxNTgsIDUzLCAxNywgOSwgCisgICAgMjcsIDIyMiwgNywgNTMsIDE3LCA5LCAyNywgMjIzLCAxNDYsIDUzLCAxNywgOSwgMjcsIDI1NCwgMTgxLCA1MywgMTcsIDksIAorICAgIDI3LCAyMTIsIDQ5LCA1MywgMTcsIDksIDI3LCAyMjIsIDYsIDUzLCAxNywgOSwgMjcsIDIyMiwgNSwgMjU0LCAxODEsIDIxMiwgCisgICAgNDgsIDksIDI3LCAyMzUsIDE0MCwgMjIzLCAzNywgNTAsIDksIDI3LCAyNTEsIDIzOCwgMjU0LCA0NywgMjU0LCA0OCwgNDUsIAorICAgIDIyMSwgMTU4LCA0NSwgMjIxLCA0NywgNDUsIDIyMCwgMjM1LCA0NSwgMjIwLCAyMjQsIDQ1LCAyMjAsIDIxMywgNDUsIDIyMCwgCisgICAgMjAyLCA0NSwgMjIwLCAxOTEsIDQ1LCAyMjAsIDE4MCwgNDUsIDIyMCwgMTY5LCA0NSwgMjIxLCAxNTcsIDQ1LCAyMjEsIAorICAgIDE0NiwgNDUsIDIyMSwgMTM1LCA0NSwgMjIxLCAxMjQsIDQ1LCAyMjEsIDExMywgNDUsIDIyMSwgMTAyLCA0NSwgMjIxLCA5MSwgCisgICAgMjI0LCAxOTcsIDI0NCwgMjgsIDMxLCA2NywgMjQ5LCAyMjcsIDIyNCwgMTk3LCAyNDQsIDI4LCAzMSwgNjcsIDExMCwgMjQ5LCAKKyAgICAyMjcsIDIyNCwgMTk3LCAyNDQsIDI4LCAzMSwgNjcsIDExMCwgMjQzLCAyMzYsIDIxOCwgMTMxLCAyMjQsIDE5NywgMjQ0LCAKKyAgICAyOCwgMzEsIDY3LCAyNDksIDIzNCwgMjI0LCAxOTcsIDI0NCwgMjgsIDMxLCA2NywgMjIwLCAxNTIsIDIyNCwgMTk3LCAyNDQsIAorICAgIDI4LCAzMSwgNjcsIDI0NSwgMzksIDc5LCAyMjQsIDE5NywgMjQ0LCAyOCwgMzEsIDY3LCAyMjQsIDE2LCA3OSwgMjI0LCAKKyAgICAxOTcsIDI0NCwgMjgsIDMxLCA2NywgNDMsIDcxLCAyMzMsIDI2LCAxMjcsIDIyNCwgMTk3LCAyNDQsIDI4LCAzMSwgNjcsIAorICAgIDQ0LCA3MSwgMjMzLCAyNiwgMjUxLCAxNjQsIDIyNCwgMTk3LCAyNDQsIDI4LCAzMSwgNjcsIDIwMywgMjQ1LCAxNzEsIDM4LCAKKyAgICAyNywgNDMsIDI0MiwgMzQsIDM4LCAyNywgNDQsIDI0MiwgMzQsIDM4LCA1MiwgMjE2LCA5MCwgNDMsIDI0MiwgMzQsIDM4LCAKKyAgICA1MiwgMjE2LCA5MCwgNDQsIDI0MiwgMzQsIDM4LCAyMzEsIDIzOCwgNDMsIDI0MiwgMzQsIDM4LCAyMzEsIDIzOCwgNDQsIAorICAgIDI0MiwgMzQsIDM4LCAyNDksIDIwNSwgMjMxLCAyMzcsIDIyNCwgMTk3LCAyNDQsIDI4LCAzMSwgNjcsIDExMywgNTksIDIzMywgCisgICAgNjIsIDIyNCwgMTk3LCAyNDQsIDI4LCAzMSwgNjcsIDI0NSwgMTY4LCAyNDgsIDE2NCwgMjI0LCAxOTcsIDI0NCwgMjgsIDMxLCAKKyAgICA2NywgMjQ1LCAxNTksIDI0OCwgMTY0LCAyMjQsIDE5NywgMjQ0LCAyOCwgMzEsIDY3LCAxMjEsIDIzMiwgMjE5LCAyMjQsIAorICAgIDE5NywgMjQ0LCAyOCwgMzEsIDY3LCAyMTIsIDMyLCAxMjEsIDIzMiwgMjE5LCAyMjQsIDE5NywgMjQ0LCAyOCwgMzEsIDY3LCAKKyAgICA0MywgMjI2LCA3LCAyMjQsIDE5NywgMjQ0LCAyOCwgMzEsIDY3LCA0NCwgMjI2LCA3LCAyMjQsIDE5NywgMjQ0LCAyOCwgMzEsIAorICAgIDY3LCA0MywgMjQ5LCAxMDcsIDEyNywgMjI0LCAxOTcsIDI0NCwgMjgsIDMxLCA2NywgNDQsIDI0OSwgMTA3LCAxMjcsIDIyNCwgCisgICAgMTk3LCAyNDQsIDI4LCAzMSwgNjcsIDQzLCAyMTYsIDcsIDIyMCwgNTUsIDEyNywgMjI0LCAxOTcsIDI0NCwgMjgsIDMxLCAKKyAgICA2NywgNDQsIDIxNiwgNywgMjIwLCA1NSwgMTI3LCAyMjQsIDE5NywgMjQ0LCAyOCwgMzEsIDY3LCA0MywgODUsIDIzMywgMjYsIAorICAgIDEyNywgMjI0LCAxOTcsIDI0NCwgMjgsIDMxLCA2NywgNDQsIDg1LCAyMzMsIDI2LCAxMjcsIDIyNCwgMTk3LCAyNDQsIDI4LCAKKyAgICAzMSwgNjcsIDQzLCA1MiwgMjU0LCAxMTgsIDEyNywgMjI0LCAxOTcsIDI0NCwgMjgsIDMxLCA2NywgNDQsIDUyLCAyNTQsIAorICAgIDExOCwgMTI3LCAyMjQsIDE5NywgMjQ0LCAyOCwgMzEsIDY3LCA0MywgMjU0LCAxMTgsIDEyNywgMjI0LCAxOTcsIDI0NCwgCisgICAgMjgsIDMxLCA2NywgNDQsIDI1NCwgMTE4LCAxMjcsIDIyNCwgMTk3LCAyNDQsIDI4LCAzMSwgNjcsIDQzLCAyNDksIDE2OSwgCisgICAgMTI3LCAyMjQsIDE5NywgMjQ0LCAyOCwgMzEsIDY3LCA0NCwgMjQ5LCAxNjksIDEyNywgMjI0LCAxOTcsIDI0NCwgMjgsIDMxLCAKKyAgICA2NywgNDMsIDcxLCAyNDksIDE2OSwgMTI3LCAyMjQsIDE5NywgMjQ0LCAyOCwgMzEsIDY3LCA0NCwgNzEsIDI0OSwgMTY5LCAKKyAgICAxMjcsIDIyMCwgMTMzLCAyNDcsIDEyOCwgNzEsIDIyMCwgMTMzLCAyNDcsIDEyOCwgMjI0LCAxOTcsIDI0NCwgMjgsIDMxLCAKKyAgICA2NywgNDMsIDQyLCAxMjcsIDIyNCwgMTk3LCAyNDQsIDI4LCAzMSwgNjcsIDQ0LCA0MiwgMTI3LCAyNDgsIDE2MywgMjI2LCAKKyAgICAxMjMsIDI1MCwgMTgwLCAyMjYsIDEyMywgMjEyLCAzMiwgMjI2LCAxMjMsIDUyLCAyMTIsIDMyLCAyMjYsIDEyMywgMjQ4LCAKKyAgICAxNjMsIDEyMSwgMjMyLCAyMTksIDI1MCwgMTgwLCAxMjEsIDIzMiwgMjE5LCAyMTIsIDMyLCAxMjEsIDIzMiwgMjE5LCA0LCAKKyAgICAyNDksIDIyNywgNCwgMTEwLCAyNDksIDIyNywgNCwgMjQzLCAyMzYsIDIxOCwgMTMxLCA0LCAyMjAsIDE1MiwgNCwgMjQ5LCAKKyAgICAyMzQsIDQsIDIyNCwgMTYsIDc5LCA0LCAyNDUsIDM5LCA3OSwgNCwgMjQ1LCAxNjgsIDI0OCwgMTY0LCA0LCA0MywgMjI2LCAKKyAgICA3LCA0LCA0NCwgMjI2LCA3LCA0LCA0MywgMjQ5LCAxMDcsIDEyNywgNCwgNDQsIDI0OSwgMTA3LCAxMjcsIDQsIDQzLCAyMTYsIAorICAgIDcsIDIyMCwgNTUsIDEyNywgNCwgNDQsIDIxNiwgNywgMjIwLCA1NSwgMTI3LCA0LCA1NCwgNTAsIDQsIDI1NCwgMTM0LCA0LCAKKyAgICAyNTMsIDIyNCwgNCwgOTYsIDUwLCA0LCAyNDAsIDE3NCwgNCwgMjMzLCAyMSwgNTAsIDQsIDI0MiwgMTM3LCA1MCwgNCwgCisgICAgMjQ1LCAxMDYsIDUwLCA0LCAyMjMsIDUzLCAyMTksIDQ4LCA0LCAyNDcsIDE0MCwgNTAsIDQsIDIyNSwgMTg1LCA1MCwgNCwgCisgICAgMjQ5LCAyMjUsIDI1MywgMjE0LCA5LCAyNDQsIDE3MiwgNTMsIDE3LCA5LCAyMTcsIDQ1LCAyLCAyNDQsIDE3MiwgNDgsIDksIAorICAgIDI0OCwgMTkxLCA1MywgMTcsIDksIDIxNywgNzksIDI0NCwgOSwgOSwgMjM0LCAyMTAsIDUzLCAxNywgOSwgMjQ0LCAxNzQsIAorICAgIDUzLCAxNywgOSwgMjQ0LCAxNzQsIDE0NywgMTcsIDksIDI0OCwgMTkzLCA1MywgMTcsIDksIDI0OCwgMTkzLCAxNDcsIDE3LCAKKyAgICA5LCAyMzQsIDIxMiwgNTMsIDE3LCA5LCAyMzQsIDIxMiwgMTQ3LCAxNywgOSwgMjIwLCA5NiwgNTMsIDE3LCA5LCAyMjAsIAorICAgIDk2LCAxNDcsIDE3LCA5LCAyMTgsIDQ3LCA1MywgMTcsIDksIDIxOCwgNDcsIDE0NywgMTcsIDksIDEsIDE4MiwgNTMsIDE3LCAKKyAgICA5LCAxLCAxMDksIDIsIDIzMSwgMjMzLCA3MiwgNTMsIDE3LCA5LCAxLCAxMDksIDIsIDIzMSwgMjMzLCA3MiwgNDAsIDE3LCAKKyAgICA5LCAxLCAxMDksIDIsIDE4MiwgNzIsIDUzLCAxNywgOSwgMSwgMTA5LCAyLCAxODIsIDcyLCA0MCwgMTcsIDksIDEsIDIxMiwgCisgICAgMzEsIDIsIDE4MiwgNzIsIDUzLCAxNywgOSwgMSwgMjEyLCAzMSwgMiwgMTgyLCA3MiwgNDAsIDE3LCA5LCAxLCAxMDksIDIsIAorICAgIDE4MiwgMjUyLCA1MSwgNTMsIDE3LCA5LCAxLCAxMDksIDIsIDE4MiwgMjUyLCA1MSwgNDAsIDE3LCA5LCAxLCA3NywgMiwgCisgICAgMTgyLCA3MiwgNTMsIDE3LCA5LCAxLCA3NywgMiwgMTgyLCA3MiwgNDAsIDE3LCA5LCAxLCA3NywgMiwgMTgyLCA3MiwgNjUsIAorICAgIDE3LCA5LCAxLCA3NywgMiwgMTgyLCA3MiwgMTQ3LCAxNywgOSwgMSwgMTA5LCA1MywgMTcsIDksIDEsIDEwOSwgNDAsIDE3LCAKKyAgICA5LCAxLCAyNTIsIDYzLCA1MywgMTcsIDksIDEsIDI1MiwgNjMsIDQwLCAxNywgOSwgMSwgMjUyLCA2MywgNjUsIDE3LCA5LCAKKyAgICAxLCAyNTIsIDYzLCAxNDcsIDE3LCA5LCAxLCAyMTcsIDksIDIzMSwgMTcwLCA1MywgMTcsIDksIDEsIDIxNywgOSwgMjMxLCAKKyAgICAxNzAsIDQwLCAxNywgOSwgMSwgMjE3LCA5LCA1MywgMTcsIDksIDEsIDIxNywgOSwgNDAsIDE3LCA5LCAxLCAyMTcsIDksIAorICAgIDY1LCAxNywgOSwgMSwgMjE3LCA5LCAxNDcsIDE3LCA5LCAxLCAyMTYsIDE5NCwgNTMsIDE3LCA5LCAxLCAyMTYsIDE5NCwgCisgICAgNDAsIDE3LCA5LCAxLCAyMTYsIDE5NCwgNjUsIDE3LCA5LCAxLCAyMTYsIDE5NCwgMTQ3LCAxNywgOSwgMSwgMTUxLCA1MywgCisgICAgMTcsIDksIDEsIDE1MSwgNDAsIDE3LCA5LCAxLCAxNTEsIDY1LCAxNywgOSwgMSwgMTUxLCAxNDcsIDE3LCA5LCAxLCAxMjIsIAorICAgIDUzLCAxNywgOSwgMSwgMTIyLCA0MCwgMTcsIDksIDEsIDEyMiwgNjUsIDE3LCA5LCAxLCAxMjIsIDE0NywgMTcsIDksIDEsIAorICAgIDIzNCwgMTM2LCA1MywgMTcsIDksIDEsIDIzNCwgMTM2LCA0MCwgMTcsIDksIDEsIDIzNCwgMTM2LCA2NSwgMTcsIDksIDEsIAorICAgIDIzNCwgMTM2LCAxNDcsIDE3LCA5LCAxLCAyNDgsIDIwNCwgNTMsIDE3LCA5LCAxLCAyNDgsIDIwNCwgNDAsIDE3LCA5LCAxLCAKKyAgICAyMTYsIDIwNCwgNTMsIDE3LCA5LCAxLCAyMTYsIDIwNCwgNDAsIDE3LCA5LCAxLCAyMjMsIDk5LCA1MywgMTcsIDksIDEsIAorICAgIDIyMywgOTksIDQwLCAxNywgOSwgMSwgMjEwLCAxMDksIDUzLCAxNywgOSwgMSwgMjEwLCAxMDksIDQwLCAxNywgOSwgMSwgCisgICAgMjIxLCAxNjksIDUzLCAxNywgOSwgMSwgMjIxLCAxNjksIDQwLCAxNywgOSwgMSwgMjIxLCAxNjksIDY1LCAxNywgOSwgMSwgCisgICAgMjIxLCAxNjksIDE0NywgMTcsIDksIDEsIDIyMCwgNjIsIDUzLCAxNywgOSwgMSwgMjIwLCA2MiwgNDAsIDE3LCA5LCAxLCAKKyAgICAyMjAsIDYyLCA2NSwgMTcsIDksIDEsIDIyMCwgNjIsIDE0NywgMTcsIDksIDEsIDIyMiwgMjksIDUzLCAxNywgOSwgMSwgCisgICAgMjIyLCAyOSwgNDAsIDE3LCA5LCAxLCAyMjIsIDI5LCA2NSwgMTcsIDksIDEsIDIyMiwgMjksIDE0NywgMTcsIDksIDEsIAorICAgIDI0OCwgMjI1LCA1MywgMTcsIDksIDEsIDI0OCwgMjI1LCA0MCwgMTcsIDksIDEsIDI0OCwgMjI1LCA2NSwgMTcsIDksIDEsIAorICAgIDI0OCwgMjI1LCAxNDcsIDE3LCA5LCAxLCAyMTcsIDgyLCA1MywgMTcsIDksIDEsIDIxNywgODIsIDQwLCAxNywgOSwgMSwgCisgICAgMjE3LCA4MiwgNjUsIDE3LCA5LCAxLCAyMTcsIDgyLCAxNDcsIDE3LCA5LCAxLCAyMTAsIDExMiwgNTMsIDE3LCA5LCAxLCAKKyAgICAyMTAsIDExMiwgNDAsIDE3LCA5LCAxLCAyMTAsIDExMiwgNjUsIDE3LCA5LCAxLCAyMTAsIDExMiwgMTQ3LCAxNywgOSwgMSwgCisgICAgMjU0LCAyMDYsIDUzLCAxNywgOSwgMSwgMjU0LCAyMDYsIDQwLCAxNywgOSwgMSwgMjU0LCAyMDYsIDY1LCAxNywgOSwgMSwgCisgICAgMjU0LCAyMDYsIDE0NywgMTcsIDksIDEsIDI0MiwgMjUyLCA1MywgMTcsIDksIDEsIDI0MiwgMjUyLCA0MCwgMTcsIDksIDEsIAorICAgIDI0MiwgMjUyLCA2NSwgMTcsIDksIDEsIDI0MiwgMjUyLCAxNDcsIDE3LCA5LCAxLCAyNDQsIDE1MSwgNTMsIDE3LCA5LCAxLCAKKyAgICAyNDQsIDE1MSwgNDAsIDE3LCA5LCAxLCAyNDQsIDE1MSwgNjUsIDE3LCA5LCAxLCAyNDQsIDE1MSwgMTQ3LCAxNywgOSwgMSwgCisgICAgMjI0LCA4NSwgNTMsIDE3LCA5LCAxLCAyMjQsIDg1LCA0MCwgMTcsIDksIDEsIDIyNCwgODUsIDY1LCAxNywgOSwgMSwgMjI0LCAKKyAgICA4NSwgMTQ3LCAxNywgOSwgMSwgMjM1LCAxLCA1MywgMTcsIDksIDEsIDIzNSwgMSwgNDAsIDE3LCA5LCAxLCAyMzUsIDEsIAorICAgIDY1LCAxNywgOSwgMSwgMjM1LCAxLCAxNDcsIDE3LCA5LCAxLCAyMzMsIDEwOSwgNTMsIDE3LCA5LCAxLCAyMzMsIDEwOSwgCisgICAgNDAsIDE3LCA5LCAxLCAyMzMsIDEwOSwgNjUsIDE3LCA5LCAxLCAyMzMsIDEwOSwgMTQ3LCAxNywgOSwgMSwgNjYsIDUzLCAKKyAgICAxNywgOSwgMSwgNjYsIDQwLCAxNywgOSwgMSwgNjYsIDY1LCAxNywgOSwgMSwgNjYsIDE0NywgMTcsIDksIDEsIDIyOCwgNjgsIAorICAgIDUzLCAxNywgOSwgMSwgMjI4LCA2OCwgNDAsIDE3LCA5LCAxLCAyMjgsIDY4LCA2NSwgMTcsIDksIDEsIDIyOCwgNjgsIDE0NywgCisgICAgMTcsIDksIDEsIDI0MSwgMjI2LCA1MywgMTcsIDksIDEsIDI0MSwgMjI2LCA0MCwgMTcsIDksIDEsIDI0MSwgMjI2LCA2NSwgCisgICAgMTcsIDksIDEsIDI0MSwgMjI2LCAxNDcsIDE3LCA5LCAxLCAyMTIsIDMxLCA1MywgMTcsIDksIDEsIDIxMiwgMzEsIDQwLCAKKyAgICAxNywgOSwgMSwgMTA5LCAyMzEsIDE5OCwgNTMsIDE3LCA5LCAxLCAxMDksIDIzMSwgMTk4LCA0MCwgMTcsIDksIDEsIDc3LCAKKyAgICA1MywgMTcsIDksIDEsIDc3LCA0MCwgMTcsIDksIDEsIDc3LCA2NSwgMTcsIDksIDEsIDc3LCAxNDcsIDE3LCA5LCAyNywgCisgICAgMjMzLCAxMDksIDIsIDEwOSwgMiwgMjMxLCAyMzMsIDcyLCA1MywgMTcsIDksIDI3LCAyMzMsIDEwOSwgMiwgMTA5LCAyLCAKKyAgICAyMzEsIDIzMywgNzIsIDQwLCAxNywgOSwgMjcsIDIzMywgMTA5LCAyLCAxMDksIDIsIDE4MiwgNzIsIDUzLCAxNywgOSwgMjcsIAorICAgIDIzMywgMTA5LCAyLCAxMDksIDIsIDE4MiwgNzIsIDQwLCAxNywgOSwgMjcsIDIzMywgMTA5LCAyLCAxMDksIDIsIDE4MiwgCisgICAgMjUyLCA1MSwgNTMsIDE3LCA5LCAyNywgMjMzLCAxMDksIDIsIDEwOSwgMiwgMTgyLCAyNTIsIDUxLCA0MCwgMTcsIDksIDI3LCAKKyAgICAyMzMsIDEwOSwgMiwgMTA5LCA1MywgMTcsIDksIDI3LCAyMzMsIDEwOSwgMiwgMTA5LCA0MCwgMTcsIDIxMCwgODcsIDIxMSwgCisgICAgMjQ1LCAyMjgsIDc4LCAyMTksIDIwLCAxMjYsIDI0NSwgMzksIDc5LCAxMjYsIDIyNCwgMSwgNzksIDEyNiwgNTQsIDUwLCAKKyAgICAxMjYsIDI0NywgMTQwLCA1MCwgMTI2LCAyMjUsIDE4NSwgNTAsIDEyNiwgMjU0LCAxMzQsIDEyNiwgMjU0LCA2NSwgMTI2LCAKKyAgICA0MywgMjI2LCA3LCAxMjYsIDQ0LCAyMjYsIDcsIDEyNiwgMjUzLCAyMjQsIDEyNiwgOTYsIDUwLCAxMjYsIDI0OSwgMjI3LCAKKyAgICAxMjYsIDI0MCwgMTc0LCAxMjYsIDI0MywgMjM2LCAyMTgsIDEzMSwgMTI2LCAyMTksIDQ4LCAxMjYsIDIxLCAyMTAsIDg2LCAKKyAgICAxMjYsIDIxLCAxMTEsIDEyNiwgMjEsIDEwNSwgMTI2LCAyMSwgMTU4LCAxMjYsIDIxLCAxNjEsIDEyNiwgMjEsIDE5MCwgCisgICAgMTI2LCAyMSwgMTk1LCAxMjYsIDIxLCAxOTksIDEyNiwgMjEsIDE5NiwgMTI2LCAyMSwgMjAxLCAxMjYsIDI0OSwgMjM0LCAKKyAgICAxMjYsIDIyMCwgMTUyLCAxMjYsIDIzMywgMjEsIDUwLCAxMjYsIDI0NSwgMTA2LCA1MCwgMTI2LCAyNDIsIDEzNywgNTAsIAorICAgIDEyNiwgMjI0LCAxNiwgNzksIDEyNiwgMjQ5LCAyMjUsIDI1MywgMjE0LCAxMjYsIDcsIDYsIDEsIDYxLCAxMjYsIDcsIDYsIAorICAgIDEsIDI1MywgMTY2LCAxMjYsIDcsIDYsIDEsIDI1MSwgNzQsIDEyNiwgNywgNiwgMSwgMjQ5LCA2OCwgMTI2LCA3LCA2LCAxLCAKKyAgICA3NiwgMTI2LCA3LCA2LCAxLCAyNDUsIDE0LCAxMjYsIDcsIDYsIDEsIDI0MywgMjA5LCAxMjYsIDcsIDYsIDEsIDI0MiwgNjcsIAorICAgIDEyNiwgNywgNiwgMSwgNzQsIDEyNiwgNywgNiwgMSwgMjM1LCAxNTAsIDEyNiwgNywgNiwgMSwgMjM1LCAyOSwgMTI2LCA3LCAKKyAgICA2LCAxLCAxNTYsIDEyNiwgNywgNiwgMSwgMTk0LCAxMjYsIDcsIDYsIDEsIDIzMCwgMzAsIDEyNiwgNywgNiwgMSwgNzgsIAorICAgIDEyNiwgNywgNiwgMSwgMjI2LCAxMDksIDEyNiwgNywgNiwgMSwgMjI0LCA5OSwgMTI2LCA3LCA2LCAxLCAxNTMsIDEyNiwgNywgCisgICAgNiwgMSwgMjIyLCA5MywgMTI2LCA3LCA2LCAxLCAyMTcsIDE1MywgMTI2LCA3LCA2LCAxLCA2OSwgMTI2LCA3LCA2LCAxLCAKKyAgICAyMTQsIDEwNSwgMTI2LCA3LCA2LCAxLCAyMTIsIDk4LCAxMjYsIDcsIDYsIDEsIDIxMSwgMTc4LCAxMjYsIDcsIDYsIDEsIAorICAgIDIxMSwgMTE3LCAxMjYsIDcsIDYsIDEsIDIxMCwgMTU5LCAxMjYsIDQzLCA0MiwgMTI3LCAxMjYsIDIyMywgNTMsIDIxOSwgCisgICAgNDgsIDEyNiwgNDQsIDQyLCAxMjcsIDEyNiwgMjUwLCAzOSwgMjU1LCAyMywgMTI2LCAxMjEsIDIzMiwgMjE5LCAxMjYsIAorICAgIDI0MiwgMTQ0LCAyNTUsIDIzLCAxMjYsIDcsIDQsIDEsIDYxLCAxMjYsIDcsIDQsIDEsIDI1MywgMTY2LCAxMjYsIDcsIDQsIAorICAgIDEsIDI1MSwgNzQsIDEyNiwgNywgNCwgMSwgMjQ5LCA2OCwgMTI2LCA3LCA0LCAxLCA3NiwgMTI2LCA3LCA0LCAxLCAyNDUsIAorICAgIDE0LCAxMjYsIDcsIDQsIDEsIDI0MywgMjA5LCAxMjYsIDcsIDQsIDEsIDI0MiwgNjcsIDEyNiwgNywgNCwgMSwgNzQsIDEyNiwgCisgICAgNywgNCwgMSwgMjM1LCAxNTAsIDEyNiwgNywgNCwgMSwgMjM1LCAyOSwgMTI2LCA3LCA0LCAxLCAxNTYsIDEyNiwgNywgNCwgCisgICAgMSwgMTk0LCAxMjYsIDcsIDQsIDEsIDIzMCwgMzAsIDEyNiwgNywgNCwgMSwgNzgsIDEyNiwgNywgNCwgMSwgMjI2LCAxMDksIAorICAgIDEyNiwgNywgNCwgMSwgMjI0LCA5OSwgMTI2LCA3LCA0LCAxLCAxNTMsIDEyNiwgNywgNCwgMSwgMjIyLCA5MywgMTI2LCA3LCAKKyAgICA0LCAxLCAyMTcsIDE1MywgMTI2LCA3LCA0LCAxLCA2OSwgMTI2LCA3LCA0LCAxLCAyMTQsIDEwNSwgMTI2LCA3LCA0LCAxLCAKKyAgICAyMTIsIDk4LCAxMjYsIDcsIDQsIDEsIDIxMSwgMTc4LCAxMjYsIDcsIDQsIDEsIDIxMSwgMTE3LCAxMjYsIDcsIDQsIDEsIAorICAgIDIxMCwgMTU5LCAxMjYsIDQzLCAyNDksIDEwNywgMTI3LCAxMjYsIDY3LCAyMzIsIDIxOSwgMTI2LCA0NCwgMjQ5LCAxMDcsIAorICAgIDEyNywgMTI2LCAxODQsIDEyNiwgNDMsIDcxLCAyMjYsIDcsIDEyNiwgNDQsIDcxLCAyMjYsIDcsIDEwMSwgMTEwLCAyNDMsIAorICAgIDIzNiwgMjE4LCAxMzEsIDEwMSwgNDMsIDI0OSwgMTY5LCAxMjcsIDEwMSwgNDQsIDI0OSwgMTY5LCAxMjcsIDEwMSwgMTEwLCAKKyAgICAyNDksIDIyNywgMTAxLCA1NiwgMjMwLCAyMjksIDI0NywgMTI4LCAxMDEsIDU2LCAxLCAyMTEsIDIyNywgMTAxLCA1NiwgMSwgCisgICAgNCwgNjEsIDEwMSwgNTYsIDEsIDQsIDc0LCAxMDEsIDU2LCAxLCA0LCA2OSwgMTAxLCA1NiwgMSwgNCwgNzYsIDEwMSwgNTYsIAorICAgIDEsIDQsIDc4LCAxMDEsIDU2LCAxLCA0LCAxOTIsIDEwMSwgNTYsIDEsIDQsIDIxMCwgMjEyLCAxMDEsIDU2LCAxLCA0LCAKKyAgICAyMTAsIDI0NCwgMTAxLCA1NiwgMSwgNCwgMjE1LCAxMTksIDEwMSwgMjM0LCAyMDcsIDIyNCwgMTc2LCAyMTksIDMzLCA3OSwgCisgICAgMTAxLCA1NiwgMSwgNjEsIDEwMSwgNTYsIDEsIDc0LCAxMDEsIDU2LCAxLCA2OSwgMTAxLCA1NiwgMSwgNzYsIDEwMSwgNTYsIAorICAgIDEsIDc4LCAxMDEsIDU2LCAxLCAxNzYsIDEwMSwgNTYsIDEsIDIzNCwgOTgsIDEwMSwgNTYsIDEsIDIzMywgMjIzLCAxMDEsIAorICAgIDU2LCAxLCAyMzQsIDE4OCwgMTAxLCA1NiwgMSwgMjM0LCAzNCwgMTAxLCA1NiwgMSwgMjA2LCAxMDEsIDU2LCAxLCAyMTksIAorICAgIDE5MywgMTAxLCA1NiwgMSwgMjE4LCA4NCwgMTAxLCA1NiwgMSwgMjIxLCAxODMsIDEwMSwgNTYsIDEsIDIxOSwgNjAsIDEwMSwgCisgICAgNTYsIDEsIDIxNywgMTA2LCAxMDEsIDU2LCAxLCAyMTYsIDExOCwgMTAxLCA1NiwgMSwgMjE1LCAxMTksIDEwMSwgNTYsIDEsIAorICAgIDIxNywgMjMsIDEwMSwgNTYsIDEsIDExMiwgMTAxLCA1NiwgMSwgMTk4LCAxMDEsIDU2LCAxLCAyMjgsIDIzOCwgMTAxLCA1NiwgCisgICAgMSwgMjI3LCAyNDIsIDEwMSwgNTYsIDEsIDIyOSwgMTEyLCAxMDEsIDU2LCAxLCAyMjgsIDc5LCAxMDEsIDU2LCAxLCAxNjIsIAorICAgIDEwMSwgNTYsIDEsIDI0MSwgMTg3LCAxMDEsIDU2LCAxLCAyNDAsIDIyOSwgMTAxLCA1NiwgMSwgMjQxLCAyNDUsIDEwMSwgCisgICAgNTYsIDEsIDI0MSwgNzUsIDEwMSwgNTYsIDEsIDE4NiwgMTAxLCA1NiwgMSwgMjMwLCAyMzUsIDEwMSwgNTYsIDEsIDIzMCwgCisgICAgMTA3LCAxMDEsIDU2LCAxLCAyMzEsIDk2LCAxMDEsIDU2LCAxLCAyMzAsIDE2NiwgMTAxLCA1NiwgMSwgMTkyLCAxMDEsIDU2LCAKKyAgICAxLCAyMTAsIDIxMiwgMTAxLCA1NiwgMSwgMjEwLCAyNDQsIDEwMSwgNTYsIDEsIDIwNSwgMTAxLCA1NiwgMSwgMjIzLCAzOCwgCisgICAgMTAxLCA1NiwgMSwgMjIyLCAxNDIsIDEwMSwgNTYsIDEsIDIyMywgMTMxLCAxMDEsIDU2LCAxLCAyMjIsIDIxMywgMTAxLCAKKyAgICA1NiwgMSwgMjEyLCA2NSwgMTAxLCA1NiwgMSwgMjMwLCAzMCwgMTAxLCA1NiwgMjEzLCAxMzUsIDIxOSwgMzMsIDc5LCAxMDEsIAorICAgIDU2LCAyMjAsIDE1NywgMjE5LCAzMywgNzksIDEwMSwgMjQsIDI0NCwgMTExLCAxMDEsIDI0LCAxLCAyMzQsIDY0LCAxMDEsIAorICAgIDI0LCAxLCAyMTgsIDIxNywgMTAxLCAyNCwgMSwgMjM0LCA1NywgMTAxLCAyNCwgMSwgMjI4LCAyMzEsIDEwMSwgMjQsIDEsIAorICAgIDIyOCwgMjI5LCAxMDEsIDI0LCAxLCAyMjgsIDIyOCwgMTAxLCAyNCwgMSwgMjE2LCAxMDIsIDEwMSwgMjQsIDEsIDIxOCwgCisgICAgMjA2LCAxMDEsIDI0LCAxLCAyMjMsIDI5LCAxMDEsIDI0LCAxLCAyMjMsIDI0LCAxMDEsIDI0LCAxLCAyMjMsIDIxLCAxMDEsIAorICAgIDI0LCAxLCAyMjMsIDE0LCAxMDEsIDI0LCAxLCAyMjMsIDksIDEwMSwgMjQsIDEsIDIyMywgNCwgMTAxLCAyNCwgMSwgMjIzLCAKKyAgICAxNSwgMTAxLCAyNCwgMSwgMjIzLCAyNywgMTAxLCAyNCwgMSwgMjMwLCAyMjIsIDEwMSwgMjQsIDEsIDIyNSwgOTgsIDEwMSwgCisgICAgMjQsIDEsIDIxOCwgMjE0LCAxMDEsIDI0LCAxLCAyMjUsIDg3LCAxMDEsIDI0LCAxLCAyMTksIDE1MCwgMTAxLCAyNCwgMSwgCisgICAgMjE4LCAyMTEsIDEwMSwgMjQsIDEsIDIzNiwgNjMsIDEwMSwgMjQsIDEsIDI1MCwgNTQsIDEwMSwgMjQsIDEsIDIxOCwgMjIxLCAKKyAgICAxMDEsIDI0LCAxLCAyNTAsIDExNCwgMTAxLCAyNCwgMSwgMjM0LCAxMTYsIDEwMSwgMjQsIDEsIDIxNiwgMTc0LCAxMDEsIAorICAgIDI0LCAxLCAyMjUsIDEzNCwgMTAxLCAyNCwgMSwgMjQxLCAxNzksIDEwMSwgMjQsIDEsIDYxLCAxMDEsIDI0LCAxLCAyNTQsIAorICAgIDI1MiwgMTAxLCAyNCwgMSwgMTkyLCAxMDEsIDI0LCAxLCAyMTEsIDkyLCAxMDEsIDI0LCAxLCAyNDUsIDEyNSwgMTAxLCAyNCwgCisgICAgMSwgNzYsIDEwMSwgMjQsIDEsIDIxMSwgMzYsIDEwMSwgMjQsIDEsIDIxMSwgNDcsIDEwMSwgMjQsIDEsIDc4LCAxMDEsIDI0LCAKKyAgICAxLCAyMTIsIDY1LCAxMDEsIDI0LCAxLCAyMTIsIDYyLCAxMDEsIDI0LCAxLCAyMjYsIDIzOCwgMTAxLCAyNCwgMSwgMjEwLCAKKyAgICAyNDQsIDEwMSwgMjQsIDEsIDY5LCAxMDEsIDI0LCAxLCAyMTIsIDExLCAxMDEsIDI0LCAxLCAyMTIsIDIyLCAxMDEsIDI0LCAKKyAgICAxLCAyMTEsIDI1MCwgMTAxLCAyNCwgMSwgMjEwLCAyMTIsIDEwMSwgMjQsIDEsIDI0NSwgNjMsIDEwMSwgMjQsIDEsIDIxMSwgCisgICAgOCwgMTAxLCAyNCwgMSwgNzQsIDEyNiwgMjUwLCAxODQsIDUwLCAxMjYsIDIyNCwgMjMxLCA1MCwgMTI2LCAyMjgsIDU3LCAKKyAgICA1MCwgMTI2LCAyMzEsIDIzNywgMTI2LCAyNTEsIDE0MywgMTMwLCAxMjYsIDIxMSwgNDAsIDUwLCAxMjYsIDIxMSwgMjE3LCAKKyAgICA1MCwgMTAxLCAyNDQsIDI2LCAxOTMsIDIxMywgMjM5LCAxMDEsIDE0MCwgNzUsIDEwMSwgMjE0LCAxNTMsIDc1LCAxMDEsIAorICAgIDk3LCA3NSwgMTAxLCAyNDYsIDExMiwgNzUsIDEwMSwgODUsIDIxOCwgMjM2LCAxMDEsIDcxLCAyNTAsIDQzLCAyMzUsIDIxMSwgCisgICAgMjU0LCAxMDcsIDI1NCwgMTI4LCAyMzUsIDIxMSwgMjU0LCAxMDcsIDIyMCwgMTM5LCAyMzUsIDIxMSwgMjU0LCAxMDcsIAorICAgIDIxNiwgMjM3LCAyMjYsIDI1MywgMjIzLCA3NSwgMjUwLCAxNTAsIDIyMywgNzUsIDI1MCwgMTUwLCA2MiwgNTcsIDMsIDI1MywgCisgICAgMTUwLCA2MSwgNjIsIDU3LCAzLCAyNTMsIDExOSwgNzYsIDYyLCA1NywgMywgMjUzLCAxMjgsIDc0LCA2MiwgNTcsIDMsIAorICAgIDI1MywgOTYsIDc4LCA2MiwgNTcsIDMsIDI1MywgMTQ2LCA2OSwgNjIsIDU3LCAzLCAyNTMsIDE2NSwgMjQ4LCAyMjksIDYyLCAKKyAgICA1NywgMywgMjUzLCAxMTIsIDI0OCwgOTgsIDYyLCA1NywgMywgMjUzLCAxNTIsIDI0OCwgMTEsIDYyLCA1NywgMywgMjUzLCAKKyAgICAxNDIsIDI0NywgMTUzLCA2MiwgNTcsIDMsIDI1MywgMTA2LCAyNDYsIDg2LCA2MiwgNTcsIDMsIDI1MywgMTAwLCAyMzUsIAorICAgIDE0NywgNjIsIDU3LCAzLCAyNTMsIDExMSwgMjM1LCAxMzIsIDYyLCA1NywgMywgMjUzLCAxMjEsIDIzNSwgNzQsIDYyLCA1NywgCisgICAgMywgMjUzLCA5MiwgMjM1LCA1NywgNjIsIDU3LCAzLCAyNTMsIDgwLCAxNzYsIDYyLCA1NywgMywgMjUzLCAxMTMsIDIzNCwgCisgICAgMTg4LCA2MiwgNTcsIDMsIDI1MywgOTAsIDIzNCwgOTgsIDYyLCA1NywgMywgMjUzLCA4NywgMjM0LCAzNCwgNjIsIDU3LCAzLCAKKyAgICAyNTMsIDc2LCAyMzMsIDIyMywgNjIsIDU3LCAzLCAyNTMsIDc3LCAxODYsIDYyLCA1NywgMywgMjUzLCAxNDMsIDIzMSwgOTYsIAorICAgIDYyLCA1NywgMywgMjUzLCA4NCwgMjMwLCAyMzUsIDYyLCA1NywgMywgMjUzLCAxNDEsIDIzMCwgMTY2LCA2MiwgNTcsIDMsIAorICAgIDI1MywgMTMzLCAyMzAsIDEwNywgNjIsIDU3LCAzLCAyNTMsIDE1NCwgMTk4LCA2MiwgNTcsIDMsIDI1MywgMTMyLCAyMjksIAorICAgIDExMiwgNjIsIDU3LCAzLCAyNTMsIDEyNiwgMjI4LCAyMzgsIDYyLCA1NywgMywgMjUzLCAxMDUsIDIyOCwgNzksIDYyLCA1NywgCisgICAgMywgMjUzLCAxMDIsIDIyNywgMjQyLCA2MiwgNTcsIDMsIDI1MywgMTYxLCAxOTEsIDYyLCA1NywgMywgMjUzLCA4NSwgMjI1LCAKKyAgICAyMjQsIDYyLCA1NywgMywgMjUzLCAxMTgsIDIyNSwgMTExLCA2MiwgNTcsIDMsIDI1MywgMTQ1LCAyMjUsIDE5LCA2MiwgNTcsIAorICAgIDMsIDI1MywgMTA3LCAyMjQsIDE1MywgNjIsIDU3LCAzLCAyNTMsIDE0MCwgMjI0LCA5MSwgNjIsIDU3LCAzLCAyNTMsIDc5LCAKKyAgICAyMjQsIDcyLCA2MiwgNTcsIDMsIDI1MywgMTM1LCAyMjQsIDU2LCA2MiwgNTcsIDMsIDI1MywgMTI0LCAyMjQsIDQ1LCA2MiwgCisgICAgNTcsIDMsIDI1MywgOTcsIDIwNSwgNjIsIDU3LCAzLCAyNTMsIDEyOSwgMjIzLCAxMzEsIDYyLCA1NywgMywgMjUzLCAxMDQsIAorICAgIDIyMywgMzgsIDYyLCA1NywgMywgMjUzLCAxNjMsIDIyMiwgMjEzLCA2MiwgNTcsIDMsIDI1MywgMTMwLCAyMjIsIDE0MiwgCisgICAgNjIsIDU3LCAzLCAyNTMsIDEyNSwgMjA2LCA2MiwgNTcsIDMsIDI1MywgMTQ4LCAyMjEsIDE4MywgNjIsIDU3LCAzLCAyNTMsIAorICAgIDExNiwgMjE5LCAxOTMsIDYyLCA1NywgMywgMjUzLCAxNDQsIDIxOSwgNjAsIDYyLCA1NywgMywgMjUzLCA5OSwgMjE4LCA4NCwgCisgICAgNjIsIDU3LCAzLCAyNTMsIDk4LCAyMTcsIDEwNiwgNjIsIDU3LCAzLCAyNTMsIDE1OSwgMjE3LCAyMywgNjIsIDU3LCAzLCAKKyAgICAyNTMsIDEyMCwgMjE2LCAxMTgsIDYyLCA1NywgMywgMjUzLCAxNTcsIDExMiwgNjIsIDU3LCAzLCAyNTMsIDg4LCAyMTUsIAorICAgIDExOSwgNjIsIDU3LCAzLCAyNTMsIDEwMywgMjEyLCA2NSwgNjIsIDU3LCAzLCAyNTMsIDgyLCAyMTIsIDIyLCA2MiwgNTcsIAorICAgIDMsIDI1MywgMTE3LCAyMTEsIDI1MCwgNjIsIDU3LCAzLCAyNTMsIDExNSwgMjExLCAyMjcsIDYyLCA1NywgMywgMjUzLCAKKyAgICAxMzksIDIxMCwgMTE2LCA2MiwgNTcsIDMsIDI1MywgODMsIDIxMCwgOTQsIDYyLCA1NywgMywgMjUzLCAxMzYsIDIxMCwgMjMsIAorICAgIDYyLCA1NywgMywgMjUzLCAxMzEsIDI1NSwgODQsIDYyLCA1NywgMywgMjUzLCAxMTQsIDI1NSwgODMsIDYyLCA1NywgMywgCisgICAgMjUzLCA3MywgMjUzLCAyMDAsIDYyLCA1NywgMywgMjUzLCA4NiwgMjQ2LCA1NCwgNjIsIDU3LCAzLCAyNTMsIDY5LCAyNDYsIAorICAgIDUzLCA2MiwgNTcsIDMsIDI1MywgMTA5LCAyMjcsIDE3OCwgNjIsIDU3LCAzLCAyNTMsIDEyNywgMjI0LCAxNTEsIDYyLCA1NywgCisgICAgMywgMjUzLCA5NSwgMjI0LCAxNTUsIDYyLCA1NywgMywgMjUzLCA4MSwgMjIzLCAxODksIDYyLCA1NywgMywgMjUzLCAxMjMsIAorICAgIDIyMywgMTg4LCA2MiwgNTcsIDMsIDI1MywgODksIDIyMiwgMjEyLCA2MiwgNTcsIDMsIDI1MywgOTEsIDIxNywgMTAzLCA2MiwgCisgICAgNTcsIDMsIDI1MywgNzEsIDIxNSwgNzgsIDYyLCA1NywgMywgMjUzLCA2OCwgMTA1LCA2MiwgNTcsIDE2LCAyNTMsIDEzOCwgCisgICAgNjIsIDU3LCAxNiwgMjUzLCAxMzcsIDYyLCA1NywgMTYsIDI1MywgMTM0LCA2MiwgNTcsIDE2LCAyNTMsIDEyMiwgNjIsIDU3LCAKKyAgICAxNiwgMjUzLCAxMTAsIDYyLCA1NywgMTYsIDI1MywgMTA4LCA2MiwgNTcsIDE2LCAyNTMsIDEwMSwgNjIsIDU3LCAxNiwgCisgICAgMjUzLCA5NCwgNjIsIDU3LCAxNiwgMjUzLCA5MywgNjIsIDU3LCAxNiwgMjUzLCA3OCwgNjIsIDU3LCAxNiwgMjUzLCA3NSwgCisgICAgNjIsIDU3LCAxNiwgMjUzLCA3NCwgNjIsIDU3LCAxNiwgMjUzLCA3MiwgNjIsIDU3LCAxNiwgMjUzLCA3MCwgNjIsIDU3LCAKKyAgICAxMDYsIDI1MywgNjcsIDIzMSwgMTkwLCA2MiwgNTcsIDEwNiwgMjUzLCA2NiwgMjExLCAyMjEsIDYyLCA1NywgMTA2LCAyNTMsIAorICAgIDY1LCAyNDgsIDgyLCA2MiwgNTcsIDEwNiwgMjUzLCA2NCwgMjQ1LCAxMDMsIDYyLCA1NywgMTA2LCAyNTMsIDYzLCAyMzEsIAorICAgIDE2NCwgNjIsIDU3LCAxMDYsIDI1MywgNjIsIDIxOCwgMTY0LCA2MiwgNTcsIDEwNiwgMjUzLCA2MSwgMjQ1LCA0NSwgNjIsIAorICAgIDU3LCAxMDYsIDI1MywgNjAsIDIyMywgMTU2LCA2MiwgNTcsIDEwNiwgMjUzLCA1OSwgMjIwLCA2NCwgNjIsIDU3LCAxMDYsIAorICAgIDI1MywgNTgsIDI0MSwgMjQ0LCA2MiwgNTcsIDEwNiwgMjUzLCA1NywgMjE5LCAyNywgNjIsIDU3LCAxMDYsIDI1MywgNTYsIAorICAgIDI1MSwgMjExLCA2MiwgNTcsIDEwNiwgMjUzLCA1NSwgMjQ5LCAxNTMsIDYyLCA1NywgMTA2LCAyNTMsIDU0LCAyNTEsIDEyMywgCisgICAgNjIsIDU3LCAxMDYsIDI1MywgNTMsIDIxMiwgMiwgNjIsIDU3LCAxMDYsIDI1MywgNTIsIDI1MiwgMTQ0LCA2MiwgNTcsIAorICAgIDEwNiwgMjUzLCA1MSwgMjI2LCAyMDksIDYyLCA1NywgMTA2LCAyNTMsIDUwLCAyMTksIDAsIDYyLCA1NywgMTA2LCAyNTMsIAorICAgIDQ5LCAyNDksIDc2LCA2MiwgNTcsIDIzMCwgMTQ3LCAyNTMsIDQ4LCAyMzQsIDIzMCwgNjIsIDU3LCAyMzAsIDE0NywgMjUzLCAKKyAgICA0NywgMjM0LCAyMzgsIDYyLCA1NywgMTA2LCAyNTMsIDQ2LCAyMjYsIDIyMiwgNjIsIDU3LCAxMDYsIDI1MywgNDUsIDIxMSwgCisgICAgMjM2LCA2MiwgNTcsIDEwNiwgMjUzLCA0NCwgNjIsIDU3LCAyMzAsIDE0NywgMjUzLCA0MywgMjU0LCAyNSwgNjIsIDU3LCAKKyAgICAyMzAsIDE0NywgMjUzLCA0MiwgMjMxLCA1NywgNjIsIDU3LCAxMDYsIDI1MywgNDEsIDI1MSwgMTQyLCA2MiwgNTcsIDEwNiwgCisgICAgMjUzLCA0MCwgMjQyLCAxNzMsIDYyLCA1NywgMTA2LCAyNTMsIDM5LCA2MiwgNTcsIDEwNiwgMjUzLCAzOCwgMjExLCAyMTIsIAorICAgIDYyLCA1NywgMTA2LCAyNTMsIDM3LCA2MiwgNTcsIDEwNiwgMjUzLCAzNiwgNjIsIDU3LCAxMDYsIDI1MywgMzUsIDI0MCwgCisgICAgMjU1LCA2MiwgNTcsIDEwNiwgMjUzLCAzNCwgNjIsIDU3LCAxMDYsIDI1MywgMzMsIDYyLCA1NywgMTA2LCAyNTMsIDMyLCAKKyAgICA2MiwgNTcsIDIzMCwgMTQ3LCAyNTMsIDMwLCAyMTUsIDkyLCA2MiwgNTcsIDEwNiwgMjUzLCAyOSwgNjIsIDU3LCAxMDYsIAorICAgIDI1MywgMjgsIDYyLCA1NywgMTA2LCAyNTMsIDI3LCAyNTAsIDIsIDYyLCA1NywgMTA2LCAyNTMsIDI2LCA2MiwgNTcsIDEwNiwgCisgICAgMjUzLCAyNSwgNjIsIDU3LCAxMDYsIDI1MywgMjQsIDI0MywgMTAwLCA2MiwgNTcsIDEwNiwgMjUzLCAyMywgMjU0LCAxMiwgCisgICAgNjIsIDU3LCAxMDYsIDI1MywgMjIsIDYyLCA1NywgMTA2LCAyNTMsIDIxLCA2MiwgNTcsIDEwNiwgMjUzLCAyMCwgNjIsIDU3LCAKKyAgICAxMDYsIDI1MywgMTksIDYyLCA1NywgMTA2LCAyNTMsIDE4LCA2MiwgNTcsIDEwNiwgMjUzLCAxNywgNjIsIDU3LCAxMDYsIAorICAgIDI1MywgMTYsIDYyLCA1NywgMTA2LCAyNTMsIDE1LCA2MiwgNTcsIDEwNiwgMjUzLCAxNCwgNjIsIDU3LCAxMDYsIDI1MywgCisgICAgMTMsIDIzMCwgMTM5LCA2MiwgNTcsIDEwNiwgMjUzLCAxMiwgNjIsIDU3LCAxMDYsIDI1MywgMTEsIDIxNSwgMjM2LCA2MiwgCisgICAgNTcsIDEwNiwgMjUzLCAxMCwgNjIsIDU3LCAxMDYsIDI1MywgOSwgNjIsIDU3LCAxMDYsIDI1MywgOCwgNjIsIDU3LCAxMDYsIAorICAgIDI1MywgNywgNjIsIDU3LCAxMDYsIDI1MywgNiwgNjIsIDU3LCAxMDYsIDI1MywgNSwgNjIsIDU3LCAxMDYsIDI1MywgNCwgCisgICAgNjIsIDU3LCAxMDYsIDI1MywgMywgNjIsIDU3LCAxMDYsIDI1MywgMiwgNjIsIDU3LCAxMDYsIDI1MywgMSwgNjIsIDU3LCAKKyAgICAxMDYsIDI1MywgMCwgNjIsIDU3LCAxMDYsIDI1MiwgMjU1LCAyNDEsIDIxOCwgNjIsIDU3LCAxMDYsIDI1MiwgMjM0LCAyNDQsIAorICAgIDM2LCA2MiwgNTcsIDEwNiwgMjUyLCAyMzEsIDI1MiwgMTI0LCA2MiwgNTcsIDEwNiwgMjUyLCAyMjYsIDIxOSwgNywgNjIsIAorICAgIDU3LCAxMDYsIDI1MiwgMjI1LCA3NSwgNjIsIDU3LCAxMDYsIDI1MiwgMjI0LCA2MiwgNTcsIDEwNiwgMjUyLCAyMjMsIDIxNywgCisgICAgMjM3LCA2MiwgNTcsIDEwNiwgMjUyLCAyMjIsIDYyLCA1NywgMTA2LCAyNTIsIDIyMSwgNjIsIDU3LCAxMDYsIDI1MiwgMjIwLCAKKyAgICAyMTEsIDI1NCwgMjUwLCAxNDcsIDYyLCA1NywgMTA2LCAyNTIsIDIxOSwgMjUwLCAxNDcsIDYyLCA1NywgMTA2LCAyNTIsIAorICAgIDIxOCwgMjUwLCAxNDgsIDI0NCwgNywgNjIsIDU3LCAxMDYsIDI1MiwgMjE3LCAyMTIsIDAsIDYyLCA1NywgMTA2LCAyNTIsIAorICAgIDIxNiwgNjIsIDU3LCAxMDYsIDI1MiwgMjE1LCA2MiwgNTcsIDIzMCwgMTQ3LCAyNTIsIDIxNCwgMjQ3LCAyMDYsIDYyLCA1NywgCisgICAgMTA2LCAyNTIsIDIxMywgNjIsIDU3LCAxMDYsIDI1MiwgMjEyLCA2MiwgNTcsIDEwNiwgMjUyLCAyMTAsIDYyLCA1NywgMTA2LCAKKyAgICAyNTIsIDIwOSwgNjIsIDU3LCAxMDYsIDI1MiwgMjA4LCA2MiwgNTcsIDEwNiwgMjUyLCAyMDcsIDI0OCwgMTY3LCA2MiwgNTcsIAorICAgIDEwNiwgMjUyLCAyMDYsIDYyLCA1NywgMTA2LCAyNTIsIDIwNSwgNjIsIDU3LCAxMDYsIDI1MiwgMjA0LCA2MiwgNTcsIDEwNiwgCisgICAgMjUyLCAyMDMsIDYyLCA1NywgMTA2LCAyNTIsIDIwMiwgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTMsIDMxLCA2MiwgNTcsIAorICAgIDEwNiwgMjEzLCAxODYsIDI1MiwgMjU0LCA2MiwgNTcsIDEwNiwgMjEzLCAxODYsIDI1MiwgMjUzLCA2MiwgNTcsIDEwNiwgCisgICAgMjEzLCAxODYsIDI1MiwgMjUyLCA2MiwgNTcsIDEwNiwgMjEzLCAxODYsIDI1MiwgMjUxLCA2MiwgNTcsIDEwNiwgMjEzLCAKKyAgICAxODYsIDI1MiwgMjUwLCA2MiwgNTcsIDEwNiwgMjEzLCAxODYsIDI1MiwgMjQ5LCA2MiwgNTcsIDEwNiwgMjEzLCAxODYsIAorICAgIDI1MiwgMjQ4LCA2MiwgNTcsIDEwNiwgMjEzLCAxODYsIDI1MiwgMjQ3LCA2MiwgNTcsIDEwNiwgMjEzLCAxODYsIDI1MiwgCisgICAgMjQ2LCA2MiwgNTcsIDEwNiwgMjEzLCAxODYsIDI1MiwgMjQ1LCA2MiwgNTcsIDEwNiwgMjEzLCAxODYsIDI1MiwgMjQ0LCAKKyAgICA2MiwgNTcsIDEwNiwgMjEzLCAxODYsIDI1MiwgMjQzLCA2MiwgNTcsIDEwNiwgMjEzLCAxODYsIDI1MiwgMjQyLCA2MiwgNTcsIAorICAgIDEwNiwgMjEzLCAxODYsIDI1MiwgMjQxLCA2MiwgNTcsIDEwNiwgMjEzLCAxODYsIDI1MiwgMjQwLCA2MiwgNTcsIDEwNiwgCisgICAgMjEzLCAxODYsIDI1MiwgMjM5LCA2MiwgNTcsIDEwNiwgMjEzLCAxODYsIDI1MiwgMjM4LCA2MiwgNTcsIDEwNiwgMjEzLCAKKyAgICAxODYsIDI1MiwgMjM3LCA2MiwgNTcsIDEwNiwgMjEzLCAxODYsIDI1MiwgMjM2LCA2MiwgNTcsIDEwNiwgMjEzLCAxODYsIAorICAgIDI1MiwgMjM1LCA2MiwgNTcsIDEwNiwgMjEzLCAxODYsIDI1MiwgMjMzLCA2MiwgNTcsIDEwNiwgMjEzLCAxODYsIDI1MiwgCisgICAgMjMyLCA2MiwgNTcsIDEwNiwgMjEzLCAxODYsIDI1MiwgMjMwLCA2MiwgNTcsIDEwNiwgMjEzLCAxODYsIDI1MiwgMjI5LCAKKyAgICA2MiwgNTcsIDEwNiwgMjEzLCAxODYsIDI1MiwgMjI4LCA2MiwgNTcsIDEwNiwgMjEzLCAxODYsIDI1MiwgMjI3LCA2MiwgNTcsIAorICAgIDEwNiwgMjEzLCAxODYsIDI1MiwgMjExLCA2MiwgNTcsIDEwNiwgMjEzLCAxODYsIDI1MiwgMjAxLCAyNTQsIDI0NSwgMjExLCAKKyAgICAyMDksIDIyMCwgMTQwLCAyMzIsIDIxOSwgMjU0LCAyNDUsIDIxMSwgMjA5LCAyMjAsIDE0MCwgMjQ3LCAxMjgsIDI1NCwgCisgICAgMjQ1LCAyNTAsIDEzOCwgNzksIDI1NCwgMjQ1LCA1NCwgMTExLCAyNTQsIDI0NSwgNTQsIDEwNSwgMjU0LCAyNDUsIDU0LCAKKyAgICAxNTgsIDI1NCwgMjQ1LCA1NCwgMTYxLCAyNTQsIDI0NSwgNTQsIDE5MCwgMjU0LCAyNDUsIDU0LCAxOTUsIDI1NCwgMjQ1LCAKKyAgICA1NCwgMTk5LCAyNTQsIDI0NSwgNTQsIDE5NiwgMjU0LCAyNDUsIDU0LCAyMDEsIDI1NCwgMjQ1LCA1NCwgMjE2LCAyNDgsIAorICAgIDI1NCwgMjQ1LCA1NCwgMjE1LCA3MywgMjU0LCAyNDUsIDU0LCAyMTYsIDE2MywgMjU0LCAyNDUsIDU0LCAyNDQsIDIzLCAKKyAgICAyNTQsIDI0NSwgNTQsIDI0NCwgMTIyLCAyNTQsIDI0NSwgNTQsIDIxOSwgMTEzLCAyNTQsIDI0NSwgNTQsIDIyMCwgMTE4LCAKKyAgICAyNTQsIDI0NSwgNTQsIDI0NSwgMTkyLCAyNTQsIDI0NSwgNTQsIDIyOCwgMjAwLCAyNTQsIDI0NSwgNTQsIDEyMywgMjQwLCAKKyAgICAyMTcsIDI1NCwgMjQ1LCA1NCwgMTEzLCAyNDAsIDIxNywgMjU0LCAyNDUsIDU0LCAxMzQsIDI0MCwgMjE3LCAyNTQsIDI0NSwgCisgICAgNTQsIDI0NCwgMTksIDI0MCwgMjE3LCAyNTQsIDI0NSwgNTQsIDI0NCwgODksIDI0MCwgMjE3LCAyNTQsIDI0NSwgNTQsIAorICAgIDIxOSwgMTI3LCAyNDAsIDIxNywgMjU0LCAyNDUsIDU0LCAyMjAsIDEyNCwgMjQwLCAyMTcsIDI1NCwgMjQ1LCA1NCwgMjQ1LCAKKyAgICAyMDEsIDI0MCwgMjE3LCAyNTQsIDI0NSwgNTQsIDIyOCwgMjA1LCAyNDAsIDIxNywgMjU0LCAyNDUsIDU0LCAxMjMsIDIxNiwgCisgICAgMTQ4LCAyNTQsIDI0NSwgNTQsIDExMywgMjE2LCAxNDgsIDI1NCwgMjQ1LCA1NCwgMTM0LCAyMTYsIDE0OCwgMjU0LCAyNDUsIAorICAgIDU0LCAyNDQsIDE5LCAyMTYsIDE0OCwgMjU0LCAyNDUsIDU0LCAyNDQsIDg5LCAyMTYsIDE0OCwgMjU0LCAyNDUsIDU0LCAKKyAgICAyMTksIDEyNywgMjE2LCAxNDgsIDI1NCwgMjQ1LCA1NCwgMjIwLCAxMjQsIDIxNiwgMTQ4LCAyNTQsIDI0NSwgNTQsIDI0NSwgCisgICAgMjAxLCAyMTYsIDE0OCwgMjU0LCAyNDUsIDU0LCAyMjgsIDIwNSwgMjE2LCAxNDgsIDI1NCwgMjQ1LCA1NCwgMjE2LCAyNDksIAorICAgIDIxNiwgMTQ4LCAyNTQsIDI0NSwgNTQsIDIxNSwgNzQsIDIxNiwgMTQ4LCAyNTQsIDI0NSwgNTQsIDIxNiwgMTY0LCAyMTYsIAorICAgIDE0OCwgMjU0LCAyNDUsIDU0LCAyNDQsIDI0LCAyMTYsIDE0OCwgMjU0LCAyNDUsIDU0LCAyNDQsIDEyMywgMjE2LCAxNDgsIAorICAgIDI1NCwgMjQ1LCA1NCwgMjE5LCAxMTQsIDIxNiwgMTQ4LCAyNTQsIDI0NSwgNTQsIDIyMCwgMTE5LCAyMTYsIDE0OCwgMjU0LCAKKyAgICAyNDUsIDU0LCAyNDUsIDE5MywgMjE2LCAxNDgsIDI1NCwgMjQ1LCA1NCwgMjI4LCAyMDEsIDIxNiwgMTQ4LCAyNTQsIDI0NSwgCisgICAgMjEyLCAxNCwgMjUyLCAxMzYsIDIxNCwgMTczLCAyNTQsIDI0NSwgMjEyLCAxNCwgMjQ0LCAxMDAsIDIxOCwgNjAsIDI1NCwgCisgICAgMjQ1LCAyMTIsIDE0LCAyMjEsIDE3OCwgMjE4LCA2MCwgMjU0LCAyNDUsIDIxMiwgMTQsIDIxNiwgMTcwLCAyMTgsIDYwLCAKKyAgICAyNTQsIDI0NSwgMjEyLCAxNCwgMjQ0LCAxMiwgMjE4LCA2MCwgMjU0LCAyNDUsIDI0NiwgODksIDIzMSwgOTUsIDI0NCwgCisgICAgMTAwLCAyMTgsIDYwLCAyNTQsIDI0NSwgMjMyLCAyMDUsIDIzMSwgOTUsIDI0NCwgMTAwLCAyMTgsIDYwLCAyNTQsIDI0NSwgCisgICAgMjMxLCA5NSwgMjIxLCAxNzgsIDIxOCwgNjAsIDI1NCwgMjQ1LCAyMzEsIDk1LCAyMTYsIDE3MCwgMjE4LCA2MCwgMjYsIAorICAgIDI1NSwgMTUsIDI1MywgMjAyLCAxMjMsIDIyNCwgMjQsIDI2LCAyNTUsIDE1LCAyNTMsIDIwMiwgMTIzLCAyNDIsIDM0LCAyNiwgCisgICAgMjU1LCAxNSwgMjUzLCAyMDIsIDEyMywgMjQ2LCAxMDgsIDI2LCAyNTUsIDE1LCAyNTMsIDIwMiwgMTkwLCAyNiwgMjU1LCAKKyAgICAxNSwgMjUzLCAyMDIsIDI0NCwgMTIyLCAyNiwgMjU1LCAxNSwgMjUzLCAyMDIsIDI0NCwgODksIDI0MCwgMjE3LCAyNiwgCisgICAgMjU1LCAxNSwgMjUzLCAyMDIsIDI0NCwgODksIDIxNiwgMTQ4LCAyNiwgMjU1LCAxNSwgMjUzLCAyMDIsIDI0NCwgMTIzLCAKKyAgICAyMTYsIDE0OCwgMjYsIDI1NSwgMTUsIDI1MywgMjAyLCAyNDQsIDg5LCAyMTcsIDY4LCAyNiwgMjU1LCAxNSwgMjUzLCAyMDIsIAorICAgIDIxNiwgMjQ5LCAyMTcsIDY4LCAyNiwgMjU1LCAxNSwgMjUzLCAyMDIsIDI0NCwgMTIzLCAyMTcsIDY4LCAyNiwgMjU1LCAxNSwgCisgICAgMjUzLCAyMDIsIDEyMywgMjQwLCAyMTgsIDIxNywgNjgsIDI2LCAyNTUsIDE1LCAyNTMsIDIwMiwgMjQ0LCA4OSwgMjQwLCAKKyAgICAyMTgsIDIxNywgNjgsIDI2LCAyNTUsIDE1LCAyNTMsIDIwMiwgMTIzLCAyMTYsIDE0OSwgMjE3LCA2OCwgMjYsIDI1NSwgMTUsIAorICAgIDI1MywgMjAyLCAyNDQsIDg5LCAyMTYsIDE0OSwgMjE3LCA2OCwgMjYsIDI1NSwgMTUsIDI1MywgMjAyLCAyNDQsIDg5LCAKKyAgICAyMTgsIDE1MiwgMjYsIDI1NSwgMTUsIDI1MywgMjAyLCAyMTYsIDI0OSwgMjE4LCAxNTIsIDI2LCAyNTUsIDE1LCAyNTMsIAorICAgIDIwMiwgMjQ0LCAxMjMsIDIxOCwgMTUyLCAyNiwgMjU1LCAxNSwgMjUzLCAyMDIsIDEyMywgMjQwLCAyMTgsIDIxOCwgMTUyLCAKKyAgICAyNiwgMjU1LCAxNSwgMjUzLCAyMDIsIDI0NCwgODksIDI0MCwgMjE4LCAyMTgsIDE1MiwgMjYsIDI1NSwgMTUsIDI1MywgCisgICAgMjAyLCAxMjMsIDIxNiwgMTQ5LCAyMTgsIDE1MiwgMjYsIDI1NSwgMTUsIDI1MywgMjAyLCAyMTYsIDI0OSwgMjE2LCAxNDksIAorICAgIDIxOCwgMTUyLCAyNiwgMjU1LCAxNSwgMjUzLCAyMDIsIDI0NCwgMTIzLCAyMTYsIDE0OSwgMjE4LCAxNTIsIDI2LCAyNTUsIAorICAgIDE1LCAyNTMsIDIwMiwgMjE2LCAyNDksIDIzMCwgMTY5LCAyNiwgMjU1LCAxNSwgMjQxLCAyMTIsIDEyMywgMjI1LCAzNCwgCisgICAgMjYsIDI1NSwgMTUsIDIxNiwgMTgyLCAxMTEsIDI2LCAyNTUsIDE1LCAyNDEsIDIwOCwgMTExLCAyNiwgMjU1LCAxNSwgMjQ1LCAKKyAgICAxMTIsIDEwNSwgMjYsIDI1NSwgMTUsIDIxNiwgMTgyLCAxMDUsIDI2LCAyNTUsIDE1LCAyNDksIDczLCAxMTMsIDI0NiwgCisgICAgMTA3LCAyNiwgMjU1LCAxNSwgMjQ1LCAxMTIsIDExMywgMjQ2LCAxMDcsIDI2LCAyNTUsIDE1LCAyMTUsIDIwNCwgMTkwLCAKKyAgICAyNiwgMjU1LCAxNSwgMjE1LCAyMDQsIDIxNiwgMjQ4LCAyNiwgMjU1LCAxNSwgMjE1LCAyMDQsIDIxNiwgMjQ5LCAyNTQsIAorICAgIDE0OSwgMTcsIDI2LCAyNTUsIDE1LCAyNDEsIDIwOCwgMjE2LCAyNDgsIDI2LCAyNTUsIDE1LCAyMzEsIDQ2LCAyMTYsIDI0OCwgCisgICAgMjYsIDI1NSwgMTUsIDIxNiwgMTgyLCAyMTYsIDI0OCwgMjYsIDI1NSwgMTUsIDIxNiwgMTgyLCAyMTYsIDE2MywgMjYsIAorICAgIDI1NSwgMTUsIDIxNSwgMjA0LCAyNDQsIDEyMiwgMjYsIDI1NSwgMTUsIDIxNSwgMjA0LCAyNDQsIDEyMywgMjU0LCAxNDksIAorICAgIDE3LCAyNiwgMjU1LCAxNSwgMjQxLCAyMDgsIDI0NCwgMTIyLCAyNiwgMjU1LCAxNSwgMjE2LCAxODIsIDI0NCwgMTIyLCAyNiwgCisgICAgMjU1LCAxNSwgMjE2LCAxODIsIDEyMywgMjQwLCAyMTcsIDI2LCAyNTUsIDE1LCAyMTYsIDE4MiwgMTM0LCAyNDAsIDIxNywgCisgICAgMjYsIDI1NSwgMTUsIDI0NSwgMTEyLCAyNDQsIDg5LCAyNDAsIDIxNywgMjYsIDI1NSwgMTUsIDIxNSwgMjA0LCAyNDQsIDg5LCAKKyAgICAyNDAsIDIxNywgMjYsIDI1NSwgMTUsIDIxNiwgMTgyLCAyNDQsIDg5LCAyNDAsIDIxNywgMjYsIDI1NSwgMTUsIDI1MCwgCisgICAgMjM1LCAyNDQsIDg5LCAyNDAsIDIxNywgMjYsIDI1NSwgMTUsIDIyOSwgMTg3LCAyNDQsIDg5LCAyNDAsIDIxNywgMjYsIAorICAgIDI1NSwgMTUsIDIxNiwgMTgyLCAxMjMsIDIxNiwgMTQ4LCAyNiwgMjU1LCAxNSwgMjE2LCAxODIsIDI0NCwgODksIDIxNiwgCisgICAgMTQ4LCAyNiwgMjU1LCAxNSwgMjQ4LCA2NSwgMjQ0LCA4OSwgMjMwLCAxNjksIDI2LCAyNTUsIDE1LCAyMTgsIDEyMCwgMjQ0LCAKKyAgICAxMjMsIDIzMCwgMTY5LCAyNiwgMTIzLCAxNjMsIDUwLCAyNiwgMTIzLCAxNjMsIDUsIDI1NCwgMTQ5LCAxNywgMjYsIDExMywgCisgICAgMjE2LCAxNjgsIDUwLCAyNiwgMTM0LCAyMjQsIDIzLCA1MCwgMjYsIDIxMSwgNDUsIDUwLCAyNiwgMjE3LCA2OSwgNTAsIDI2LCAKKyAgICAyNDYsIDEwOSwgNTAsIDI2LCAyMjYsIDI1MCwgNTAsIDI2LCAxMTMsIDIyNiwgMjQ5LCA1MCwgMjYsIDEzNCwgMjI2LCAyNDksIAorICAgIDUwLCAyNiwgMjQ0LCAxOSwgMjI2LCAyNDksIDUwLCAyNiwgMjQ0LCA4OSwgMjI2LCAyNDksIDUwLCAyNiwgMjMxLCA0MCwgCisgICAgNTAsIDI2LCAyMzMsIDE2MywgMjUyLCAxMzYsIDUwLCAyNiwgMjMyLCAyMDAsIDUwLCAyNiwgMjI2LCAxMzUsIDUwLCAyNiwgCisgICAgMjExLCAxNTksIDUwLCAyNiwgMjUzLCAyNTEsIDUwLCAyNiwgMjU0LCA4LCA1MCwgMjYsIDI0MiwgMTUxLCA1MCwgMjYsIAorICAgIDIxNSwgMTg3LCAyNTIsIDEzNiwgNTAsIDI2LCAyMTAsIDg3LCA1MCwgMjIyLCAyMDAsIDIyMCwgMTE1LCA1MCwgMjIyLCAKKyAgICAyMDAsIDIxNCwgMTg1LCA1MCwgMjIyLCAyMDAsIDIyMCwgMTQ0LCA1MCwgMjIyLCAyMDAsIDIyMCwgMTEzLCA1MCwgMjIyLCAKKyAgICAyMDAsIDI0NywgMjIxLCAyMjAsIDExMywgNTAsIDIyMiwgMjAwLCAyMTksIDE3MCwgNTAsIDIyMiwgMjAwLCAyNDgsIDYxLCAKKyAgICA1MCwgMjIyLCAyMDAsIDIyNCwgOSwgNTAsIDIyMiwgMjAwLCAyMjAsIDEzMSwgNTAsIDIyMiwgMjAwLCAyNDYsIDY4LCA1MCwgCisgICAgMjIyLCAyMDAsIDI1MywgMjQ2LCA1MCwgMjIyLCAyMDAsIDI1MCwgMTc5LCA1MCwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAKKyAgICAyMjUsIDIxNiwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAyMjUsIDI3LCAyNDEsIDI0MiwgMjI1LCAxNDYsIDI0NywgMTk5LCAKKyAgICA1LCAyMTcsIDQ2LCAyNDEsIDI0MiwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAyNTAsIDI1NSwgMjI1LCAxNDYsIDI0NywgCisgICAgMTk5LCA1LCAyNTAsIDEwOSwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAyMTEsIDIyMSwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAKKyAgICAyNDEsIDIxOCwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAyNDMsIDkyLCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIDIxNiwgCisgICAgMTE3LCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIDc1LCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIDI1MSwgMTc3LCAyMjUsIAorICAgIDE0NiwgMjQ3LCAxOTksIDUsIDIyMCwgMzEsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgMjQ5LCAyNTIsIDIyNSwgMTQ2LCAKKyAgICAyNDcsIDE5OSwgNSwgMjMxLCAxODksIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgMjMxLCAxNDEsIDIyNSwgMTQ2LCAyNDcsIAorICAgIDE5OSwgNSwgMjIxLCAyMTgsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgMjMyLCAyNDMsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgCisgICAgMjUxLCAxOTYsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgMjUwLCAyMzksIDIyNSwgMzgsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgCisgICAgNSwgMjQ3LCAxNDEsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgMjQ5LCAyMzEsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgMjE5LCAKKyAgICA4OSwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAyNDksIDIzMiwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAyNTIsIDcxLCAyMjUsIAorICAgIDE0NiwgMjQ3LCAxOTksIDUsIDIyMCwgMTgsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgMjQwLCAyNTUsIDIyNSwgMTQ2LCAKKyAgICAyNDcsIDE5OSwgNSwgMjQxLCAxODUsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgMjUxLCAxMjAsIDIzMywgNDIsIDIyNSwgCisgICAgMTQ2LCAyNDcsIDE5OSwgNSwgMjUwLCAyMzIsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgMjIzLCAxNTYsIDIyNSwgMTQ2LCAKKyAgICAyNDcsIDE5OSwgNSwgMjQ1LCAyMzgsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgMjQ2LCAxMTUsIDIyNSwgMTQ2LCAyNDcsIAorICAgIDE5OSwgNSwgMjE1LCAxMDYsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgMjUyLCA3NCwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAKKyAgICAyMjUsIDM5LCAyMTUsIDIzNiwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAyMTMsIDE1OSwgMjI1LCAxNDYsIDI0NywgMTk5LCAKKyAgICA1LCAyMjYsIDIyLCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIDIyMiwgMTkyLCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIDIzMiwgCisgICAgMjMwLCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIDIyNiwgMTE5LCAyNTIsIDE5MiwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAKKyAgICAyNDQsIDU2LCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIDI0MiwgMTQ1LCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIDIxOCwgCisgICAgMTIxLCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIDQsIDI1MywgMTc2LCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIDIxMiwgMzIsIAorICAgIDI1MiwgMTU2LCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIDM4LCAyMjYsIDI1MiwgOTEsIDIzMiwgNjUsIDEsIDYxLCAyMzIsIAorICAgIDY1LCAxLCA3NiwgMjMyLCA2NSwgMSwgMjUzLCAxNjYsIDIzMiwgNjUsIDEsIDI1MiwgMjcsIDIzMiwgNjUsIDEsIDI0MywgCisgICAgMjA5LCAyMzIsIDY1LCAxLCAyNDksIDY4LCAyMzIsIDY1LCAxLCA3NCwgMjMyLCA2NSwgMSwgMjEyLCA5OCwgMjMyLCA2NSwgCisgICAgMSwgMjEwLCAxNTksIDIzMiwgNjUsIDEsIDIxNiwgMjExLCAyMzIsIDY1LCAxLCAyMzUsIDE1MCwgMjMyLCA2NSwgMSwgMjM1LCAKKyAgICAyOSwgMjMyLCA2NSwgMSwgMjI0LCA5OSwgMjMyLCA2NSwgMSwgMTU2LCAyMzIsIDY1LCAxLCAxOTQsIDIzMiwgNjUsIDEsIAorICAgIDIzMCwgMzAsIDIzMiwgNjUsIDEsIDIzMCwgMTcxLCAyMzIsIDY1LCAxLCAyMjgsIDExNiwgMjMyLCA2NSwgMSwgNjksIDIzMiwgCisgICAgNjUsIDEsIDIyNiwgMTA5LCAyMzIsIDY1LCAxLCAyMzQsIDUzLCAyMzIsIDY1LCAxLCAxNTMsIDIzMiwgNjUsIDEsIDIyMiwgCisgICAgOTMsIDIzMiwgNjUsIDEsIDIxNywgMTUzLCAyMzIsIDY1LCAxLCAyMTUsIDE2MCwgMjMyLCA2NSwgMSwgMjU0LCAxMzEsIAorICAgIDIzMiwgNjUsIDEsIDI0NSwgMTU4LCAyMzIsIDY1LCAxLCAyNDIsIDY3LCAyMzIsIDY1LCAxLCAyMTEsIDE3OCwgMjUwLCAKKyAgICAyNDUsIDEsIDYxLCAyNTAsIDI0NSwgMSwgMjI2LCA5NSwgMjUwLCAyNDUsIDEsIDI0OSwgNjgsIDI1MCwgMjQ1LCAxLCAxNTYsIAorICAgIDI1MCwgMjQ1LCAxLCAyMTQsIDExNiwgMjUwLCAyNDUsIDEsIDE1MywgMjUwLCAyNDUsIDEsIDIzMywgNjgsIDI1MCwgMjQ1LCAKKyAgICAxLCAyNTUsIDg0LCAyNTAsIDI0NSwgMSwgMjI0LCA5OSwgMjUwLCAyNDUsIDEsIDI1MywgMTY2LCAyNTAsIDI0NSwgMSwgCisgICAgMTk0LCAyNTAsIDI0NSwgMSwgNzgsIDI1MCwgMjQ1LCAxLCAyNDgsIDIzMSwgMjUwLCAyNDUsIDEsIDIxNywgMTUzLCAyNTAsIAorICAgIDI0NSwgMSwgMjIwLCAxMDYsIDI1MCwgMjQ1LCAxLCAyMjAsIDEwNSwgMjUwLCAyNDUsIDEsIDIyMiwgOTMsIDI1MCwgMjQ1LCAKKyAgICAxLCAyNTEsIDczLCAyNTAsIDI0NSwgMSwgNjksIDI1MCwgMjQ1LCAxLCAyMjgsIDExNiwgMjUwLCAyNDUsIDEsIDIxMSwgCisgICAgMTc4LCAyNTAsIDI0NSwgMSwgMjMwLCAzMCwgMjUwLCAyNDUsIDEsIDIxNSwgMTU5LCAyNTAsIDI0NSwgMSwgMjI2LCAxMDksIAorICAgIDI1MCwgMjQ1LCAxLCAyMTgsIDIyOCwgMjUwLCAyNDUsIDEsIDc0LCAyNTAsIDI0NSwgMSwgNzYsIDI1MCwgMjQ1LCAxLCAKKyAgICAyMTQsIDExMywgMjUwLCAyNDUsIDEsIDIzNSwgMjksIDI1MCwgMjQ1LCAxLCAyMzUsIDIwLCAyNTAsIDI0NSwgMSwgMjI5LCAKKyAgICAxNTUsIDI1MCwgMjQ1LCAxLCAyMTQsIDExOCwgMjUwLCAyNDUsIDEsIDI0MywgMjA5LCAyNTAsIDI0NSwgMSwgMjQzLCAxNDQsIAorICAgIDI1MCwgMjQ1LCAxLCAyMTgsIDE3MCwgMjUwLCAyNDUsIDEsIDIxOCwgMTY5LCAyNTAsIDI0NSwgMSwgMjI5LCA4NCwgMjUwLCAKKyAgICAyNDUsIDEsIDIzNiwgNDAsIDI1MCwgMjQ1LCAxLCAyNTEsIDcyLCAyNTAsIDI0NSwgMSwgMjE1LCAxNjAsIDI1MCwgMjQ1LCAKKyAgICAxLCAyMTQsIDExNSwgMjUwLCAyNDUsIDEsIDIyMiwgMTgyLCAyNTAsIDI0NSwgMSwgMjMxLCAxMzQsIDI1MCwgMjQ1LCAxLCAKKyAgICAyMzEsIDEzMywgMjUwLCAyNDUsIDEsIDIzMSwgMTMyLCAyNTAsIDI0NSwgMSwgMjMxLCAxMzEsIDI1MCwgMjQ1LCAxLCAyMzMsIAorICAgIDY3LCAyNTAsIDI0NSwgMSwgMjQ1LCAyNDIsIDI1MCwgMjQ1LCAxLCAyMTQsIDExNCwgNTUsIDMyLCAxLCA2MSwgNTUsIDMyLCAKKyAgICAxLCAyNTIsIDgzLCA1NSwgMzIsIDEsIDIzNCwgMTg4LCA1NSwgMzIsIDEsIDI0OCwgOTgsIDU1LCAzMiwgMSwgNzYsIDU1LCAKKyAgICAzMiwgMSwgMjEzLCAyNTUsIDU1LCAzMiwgMSwgMjEwLCA5NCwgNTUsIDMyLCAxLCAyNDEsIDI0NSwgNTUsIDMyLCAxLCAyMTYsIAorICAgIDE5NiwgNTUsIDMyLCAxLCA3NCwgNTUsIDMyLCAxLCAxNzYsIDU1LCAzMiwgMSwgMjQ1LCAxODIsIDU1LCAzMiwgMSwgMjQ1LCAKKyAgICAxNjcsIDU1LCAzMiwgMSwgMjQ1LCAxNTgsIDU1LCAzMiwgMSwgMjQ1LCA4MywgNTUsIDMyLCAxLCA3OCwgNTUsIDMyLCAxLCAKKyAgICAyMjUsIDIyNCwgNTUsIDMyLCAxLCAyMjAsIDY1LCA1NSwgMzIsIDEsIDIzMywgMjIzLCA1NSwgMzIsIDEsIDI0NSwgMTAwLCAKKyAgICA1NSwgMzIsIDEsIDI0NSwgOTAsIDU1LCAzMiwgMSwgMjE3LCAyMywgNTUsIDMyLCAxLCA2OSwgNTUsIDMyLCAxLCAyNDUsIAorICAgIDE4NSwgNTUsIDMyLCAxLCAyMjUsIDEzOSwgNTUsIDMyLCAxLCAyMzQsIDEyNSwgNTUsIDMyLCAxLCAyNDUsIDIxMCwgNTUsIAorICAgIDMyLCAxLCAyNDUsIDkyLCA1NSwgMzIsIDEsIDI1MCwgMTM5LCA1NSwgMzIsIDEsIDIzNiwgNDAsIDU1LCAzMiwgMSwgMjE0LCAKKyAgICAxMTgsIDU1LCAzMiwgMjI3LCAyMDIsIDExMSwgNTUsIDMyLCAyMjcsIDIwMiwgMTkwLCA1NSwgMzIsIDIyNywgMjAyLCAyMTYsIAorICAgIDI0OCwgNTUsIDMyLCAyMjcsIDIwMiwgMjQ0LCAxMjIsIDI0MiwgMTYwLCAxLCAyNTQsIDIxMywgMjQyLCAxNjAsIDEsIDI1MiwgCisgICAgMTcxLCAyNDIsIDE2MCwgMSwgMjQyLCAyMTgsIDI0MiwgMTYwLCAxLCAyNDgsIDIxMiwgMjQyLCAxNjAsIDEsIDI1NCwgMjA5LCAKKyAgICAyNDIsIDE2MCwgMSwgMjI0LCA4MiwgMjQyLCAxNjAsIDEsIDIzNSwgMTYxLCAyNDIsIDE2MCwgMSwgMjQyLCA0NiwgMjQyLCAKKyAgICAxNjAsIDEsIDIxNiwgMTU5LCAyNDIsIDE2MCwgMSwgMjQ1LCAxOTEsIDI0MiwgMTYwLCAxLCAyMzMsIDE5NiwgMjQyLCAxNjAsIAorICAgIDEsIDIzMywgMTE5LCAyNDIsIDE2MCwgMSwgMjMxLCAxODQsIDI0MiwgMTYwLCAxLCAyMjksIDE4OSwgMjQyLCAxNjAsIDEsIAorICAgIDIzNSwgMTI1LCAyNDIsIDE2MCwgMSwgMjE0LCAxMzYsIDI0MiwgMTYwLCAxLCAyMjYsIDczLCAyNDIsIDE2MCwgMSwgMjI4LCAKKyAgICAyMDAsIDI0MiwgMTYwLCAxLCAyMjMsIDE2OCwgMjQyLCAxNjAsIDEsIDIyMSwgMjIwLCAyNDIsIDE2MCwgMSwgMjE3LCA1LCAKKyAgICAyNDIsIDE2MCwgMSwgMjExLCAyMzQsIDI0MiwgMTYwLCAxLCAyNDQsIDE4NiwgMjQyLCAxNjAsIDEsIDIzNiwgNDQsIDI0MiwgCisgICAgMTYwLCAxLCAyNDAsIDIwNiwgMjQyLCAxNjAsIDEsIDIyNiwgMTQzLCAyNDIsIDE2MCwgMSwgMjI4LCAyMDUsIDI0MCwgMjE3LCAKKyAgICAyMTQsIDIwOSwgMSwgMjU0LCAxNTUsIDIxNCwgMjA5LCAxLCAyNTIsIDM0LCAyMTQsIDIwOSwgMSwgMjQzLCAxMTUsIDIxNCwgCisgICAgMjA5LCAxLCAyMzQsIDEzOCwgMjE0LCAyMDksIDEsIDI0OCwgNjIsIDIxNCwgMjA5LCAxLCAyNDEsIDc1LCAyMTQsIDIwOSwgCisgICAgMSwgMjExLCAyMjcsIDIxNCwgMjA5LCAxLCAyMTAsIDg1LCAyMTQsIDIwOSwgMSwgMjQwLCAyNDgsIDIxNCwgMjA5LCAxLCAKKyAgICAyMTYsIDIzMSwgMjE0LCAyMDksIDEsIDIxMCwgMjMzLCAyMTQsIDIwOSwgMSwgMjM1LCAwLCAyMTQsIDIwOSwgMSwgMjIwLCAKKyAgICAyMiwgMjE0LCAyMDksIDEsIDIzMywgMTA0LCAyMTQsIDIwOSwgMSwgMjMxLCA3MCwgMjE0LCAyMDksIDEsIDI0OCwgMjksIAorICAgIDIxNCwgMjA5LCAxLCAyMjcsIDE5OCwgMjE0LCAyMDksIDEsIDIxMCwgMTMsIDIxNCwgMjA5LCAxLCAyMjEsIDI1MCwgMjE0LCAKKyAgICAyMDksIDEsIDI1NCwgMjA1LCAyMTQsIDIwOSwgMSwgMjI0LCAxNTMsIDIxNCwgMjA5LCAxLCAyMjIsIDI3LCAyMTQsIDIwOSwgCisgICAgMSwgMjI0LCAzOCwgMjE0LCAyMDksIDEsIDIyMywgMTQ3LCAyMTQsIDIwOSwgMSwgMjE2LCAyMDAsIDIxNCwgMjA5LCAxLCAKKyAgICAyNDIsIDI1MSwgMjE0LCAyMDksIDEsIDExMiwgMjE0LCAyMDksIDEsIDc0LCAyMTQsIDIwOSwgMSwgNjksIDIxNCwgMjA5LCAKKyAgICAxLCAyMTgsIDE4MSwgMjE0LCAyMDksIDIxMSwgMjA5LCAyNDcsIDE4MCwgNTUsIDIyNSwgMTcyLCA1LCA2MSwgNTUsIDIyNSwgCisgICAgMTcyLCA1LCA3NCwgNTUsIDIyNSwgMTcyLCA1LCA2OSwgNTUsIDIyNSwgMTcyLCA1LCAxNzYsIDU1LCAyMjUsIDE3MiwgNSwgCisgICAgMjMzLCAyMjMsIDU1LCAyMjUsIDE3MiwgNSwgMjQzLCAxNDIsIDU1LCAyMjUsIDE3MiwgNSwgMjQyLCAxMjAsIDU1LCAyMjUsIAorICAgIDE3MiwgNSwgMjExLCAxNjUsIDU1LCAyMjUsIDE3MiwgNSwgMjUxLCA0MSwgNTUsIDIyNSwgMTcyLCA1LCAyMzUsIDE0NywgCisgICAgNTUsIDIyNSwgMTcyLCA1LCAyMzUsIDExNCwgNTUsIDIyNSwgMTcyLCA1LCAyMTcsIDEwNiwgNTUsIDIyNSwgMTcyLCA1LCAKKyAgICAyMTUsIDExOSwgNTUsIDIyNSwgMTcyLCA1LCAyNDgsIDIyOSwgNTUsIDIyNSwgMTcyLCA1LCAyNDgsIDExLCA1NSwgMjI1LCAKKyAgICAxNzIsIDUsIDI0NiwgODYsIDU1LCAyMjUsIDE3MiwgNSwgMjE2LCAyMDksIDU1LCAyMjUsIDE3MiwgNSwgMTkxLCA1NSwgCisgICAgMjI1LCAxNzIsIDUsIDI1MiwgMTk5LCA1NSwgMjI1LCAxNzIsIDUsIDI0NCwgMjA0LCA1NSwgMjI1LCAxNzIsIDUsIDE5OCwgCisgICAgNTUsIDIyNSwgMTcyLCA1LCAyMjcsIDI0MiwgNTUsIDIyNSwgMTcyLCA1LCAxODYsIDU1LCAyMjUsIDE3MiwgNSwgMjMwLCAKKyAgICAyMzUsIDU1LCAyMjUsIDE3MiwgNSwgMjMwLCAxMDcsIDU1LCAyMjUsIDE3MiwgNSwgMTkyLCA1NSwgMjI1LCAxNzIsIDUsIAorICAgIDIxNCwgMjcsIDU1LCAyMjUsIDE3MiwgNSwgMjEzLCAxNzYsIDU1LCAyMjUsIDE3MiwgNSwgMjA1LCA1NSwgMjI1LCAxNzIsIAorICAgIDUsIDIyMiwgMTQyLCA1NSwgMjI1LCAxNzIsIDUsIDIzMywgMTQxLCA1NSwgMjI1LCAxNzIsIDUsIDIwNiwgNTUsIDIyNSwgCisgICAgMTcyLCA1LCAyMTAsIDExNiwgNTUsIDIyNSwgMTcyLCA1LCAyMjAsIDEwNCwgNTUsIDIyNSwgMTcyLCA1LCAyMTgsIDIyNSwgCisgICAgNTUsIDIyNSwgMTcyLCA1LCAxNjIsIDU1LCAyMjUsIDE3MiwgNSwgMjUzLCAxOTQsIDU1LCAyMjUsIDE3MiwgNSwgMjUzLCAKKyAgICAxOTMsIDU1LCAyMjUsIDE3MiwgNSwgMjUzLCAxOTIsIDU1LCAyMjUsIDE3MiwgNSwgMjExLCAxNDIsIDU1LCAyMjUsIDE3MiwgCisgICAgNSwgMjQ4LCAyMDgsIDU1LCAyMjUsIDE3MiwgNSwgMjQ4LCAyMDcsIDU1LCAyMjUsIDE3MiwgNSwgMjUyLCAxNzgsIDU1LCAKKyAgICAyMjUsIDE3MiwgNSwgMjUxLCA5MywgNTUsIDIyNSwgMTcyLCAyMTEsIDIwOSwgMjQ3LCAxODAsIDU1LCAyMjUsIDE3MiwgNTQsIAorICAgIDExMSwgNTUsIDIyNSwgMTcyLCA1NCwgMTA1LCA1NSwgMjI1LCAxNzIsIDU0LCAyMTYsIDI0OCwgNTUsIDIyNSwgMTcyLCA1NCwgCisgICAgMjE1LCA3MywgNTUsIDIyNSwgMTcyLCA1NCwgMjQwLCAyMTcsIDE4MSwgNiwgMSwgMjAwLCA3NCwgMTgxLCA2LCAxLCAyMDAsIAorICAgIDc2LCAxODEsIDYsIDEsIDIwMCwgNjEsIDE4MSwgNiwgMSwgMjAwLCAyNTQsIDIxOCwgMTgxLCA2LCAxLCAyMDAsIDc4LCAKKyAgICAxODEsIDYsIDEsIDIwMCwgMjI2LCAxODcsIDE4MSwgNiwgMSwgMjE5LCAyNTMsIDc0LCAxODEsIDYsIDEsIDIxOSwgMjUzLCAKKyAgICA3NiwgMTgxLCA2LCAxLCAyMTksIDI1MywgNjEsIDE4MSwgNiwgMSwgMjE5LCAyNTMsIDI1NCwgMjE4LCAxODEsIDYsIDEsIAorICAgIDIxOSwgMjUzLCA3OCwgMTgxLCA2LCAxLCAyMTksIDI1MywgMjI2LCAxODcsIDE4MSwgNiwgMSwgMjUzLCAxNzUsIDE4MSwgNiwgCisgICAgMSwgMjI2LCAxMjAsIDE4MSwgNiwgMSwgMjExLCAxOTUsIDE4MSwgNiwgMSwgMjExLCA0NCwgMTgxLCA2LCAxLCAyNDIsIDY3LCAKKyAgICAxODEsIDYsIDEsIDIyNSwgMjE0LCAxODEsIDYsIDEsIDI1MiwgNzQsIDE4MSwgNiwgMSwgMjE3LCAxMiwgMTgxLCA2LCAxLCAKKyAgICAyNDgsIDg1LCAxODEsIDYsIDEsIDI1MCwgMTM2LCAxODEsIDYsIDEsIDIzNSwgMTMwLCAxODEsIDYsIDEsIDIzNCwgMTk1LCAKKyAgICAxODEsIDYsIDEsIDI0MywgOTAsIDE4MSwgNiwgMSwgMjQ1LCAyMTAsIDE4MSwgNiwgMSwgMjEzLCAyNTAsIDE4MSwgNiwgMSwgCisgICAgMjQ1LCA2NywgMTgxLCA2LCAxLCAyMTYsIDE5NSwgMTgxLCA2LCAxLCAyNDUsIDkwLCAxODEsIDYsIDEsIDIxMCwgOTIsIAorICAgIDE4MSwgNiwgMSwgMjQ1LCA4MywgMTgxLCA2LCAxLCAyMTAsIDczLCAxODEsIDYsIDEsIDI0NSwgMTAwLCAxODEsIDYsIDEsIAorICAgIDI0NSwgMTgyLCAxODEsIDYsIDEsIDI0NSwgMTY3LCAxODEsIDYsIDEsIDI0NSwgMTU4LCAxODEsIDYsIDEsIDI0NSwgMTQ2LCAKKyAgICAxODEsIDYsIDEsIDIyNiwgMjIzLCAxODEsIDYsIDEsIDI0NSwgNDYsIDE4MSwgNCwgMSwgMjAwLCA3NCwgMTgxLCA0LCAxLCAKKyAgICAyMDAsIDc2LCAxODEsIDQsIDEsIDIwMCwgNjEsIDE4MSwgNCwgMSwgMjAwLCAyNTQsIDIxOCwgMTgxLCA0LCAxLCAyMDAsIAorICAgIDc4LCAxODEsIDQsIDEsIDIwMCwgMjI2LCAxODcsIDE4MSwgNCwgMSwgMjE5LCAyNTMsIDc0LCAxODEsIDQsIDEsIDIxOSwgCisgICAgMjUzLCA3NiwgMTgxLCA0LCAxLCAyMTksIDI1MywgNjEsIDE4MSwgNCwgMSwgMjE5LCAyNTMsIDI1NCwgMjE4LCAxODEsIDQsIAorICAgIDEsIDIxOSwgMjUzLCA3OCwgMTgxLCA0LCAxLCAyMTksIDI1MywgMjI2LCAxODcsIDE4MSwgNCwgMSwgMjUzLCAxNzUsIDE4MSwgCisgICAgNCwgMSwgMjI2LCAxMjAsIDE4MSwgNCwgMSwgMjExLCAxOTUsIDE4MSwgNCwgMSwgMjExLCA0NCwgMTgxLCA0LCAxLCAyNDIsIAorICAgIDY3LCAxODEsIDQsIDEsIDIyNSwgMjE0LCAxODEsIDQsIDEsIDI1MiwgNzQsIDE4MSwgNCwgMSwgMjE3LCAxMiwgMTgxLCA0LCAKKyAgICAxLCAyNDgsIDg1LCAxODEsIDQsIDEsIDI1MCwgMTM2LCAxODEsIDQsIDEsIDIzNSwgMTMwLCAxODEsIDQsIDEsIDIzNCwgCisgICAgMTk1LCAxODEsIDQsIDEsIDI0MywgOTAsIDE4MSwgNCwgMSwgMjQ1LCAyMTAsIDE4MSwgNCwgMSwgMjEzLCAyNTAsIDE4MSwgCisgICAgNCwgMSwgMjQ1LCA2NywgMTgxLCA0LCAxLCAyMTYsIDE5NSwgMTgxLCA0LCAxLCAyNDUsIDkwLCAxODEsIDQsIDEsIDIxMCwgCisgICAgOTIsIDE4MSwgNCwgMSwgMjQ1LCA4MywgMTgxLCA0LCAxLCAyMTAsIDczLCAxODEsIDQsIDEsIDI0NSwgMTAwLCAxODEsIDQsIAorICAgIDEsIDI0NSwgMTgyLCAxODEsIDQsIDEsIDI0NSwgMTY3LCAxODEsIDQsIDEsIDI0NSwgMTU4LCAxODEsIDQsIDEsIDI0NSwgCisgICAgMTQ2LCAxODEsIDQsIDEsIDIyNiwgMjIzLCAxODEsIDQsIDEsIDI0NSwgNDYsIDIyMCwgNzEsIDEsIDIyNSwgMjEyLCAyMjAsIAorICAgIDcxLCAxLCAyMTYsIDYsIDIyMCwgNzEsIDEsIDIzNCwgOTcsIDIyMCwgNzEsIDEsIDI0NCwgMTU1LCAyMjAsIDcxLCAxLCAKKyAgICAyMTYsIDE3MywgMjIwLCA3MSwgMSwgMjE5LCA2MCwgMjIwLCA3MSwgMSwgMjE4LCAxNSwgMjIwLCA3MSwgMSwgMjUwLCA2OSwgCisgICAgMjIwLCA3MSwgMSwgMjExLCA0NiwgMjIwLCA3MSwgMSwgMjQwLCAyMTYsIDIyMCwgNzEsIDEsIDI1MiwgMTMsIDIyMCwgNzEsIAorICAgIDEsIDI0OCwgOTcsIDIyMCwgNzEsIDEsIDI0MywgMTI4LCAyMjAsIDcxLCAxLCAyMTMsIDEyMywgMjIwLCA3MSwgMSwgMjE2LCAKKyAgICAxNzcsIDIyMCwgNzEsIDEsIDIxMCwgMjEsIDIyMCwgNzEsIDEsIDIzMSwgOTQsIDIyMCwgNzEsIDEsIDIzNSwgNTUsIDIyMCwgCisgICAgNzEsIDEsIDIxMSwgMjI1LCAyMjAsIDcxLCAxLCAyNDIsIDU1LCAyMjAsIDcxLCAxLCAyMzIsIDE0OCwgMjIwLCA3MSwgMSwgCisgICAgMjMwLCAxOTQsIDIyMCwgNzEsIDEsIDIzNiwgNDcsIDIyMCwgNzEsIDEsIDI0NSwgMjA5LCAyMjAsIDcxLCAxLCAyNTMsIAorICAgIDIzOSwgMjIwLCA3MSwgMSwgMjU1LCAwLCAyMjAsIDcxLCAxLCAyMjYsIDIwMCwgMjIwLCA3MSwgMSwgMjExLCAyMTIsIDIyMCwgCisgICAgNzEsIDEsIDIyNiwgMTM0LCAyMjAsIDcxLCAxLCAyNTQsIDIxOCwgMjIwLCA3MSwgMSwgMjIyLCAyMTAsIDIyMCwgNzEsIDEsIAorICAgIDIyNywgMTk4LCAyMjAsIDcxLCAxLCAyNDUsIDIyNSwgMjIwLCA3MSwgMSwgMjU0LCAyMjMsIDIyMCwgNzEsIDEsIDI0MCwgCisgICAgMTE4LCAyMjAsIDcxLCAxLCAyMTQsIDE2MywgMjIwLCA3MSwgMSwgMjI3LCAyLCAyMjAsIDcxLCAxLCAyMjYsIDE4MCwgMjIwLCAKKyAgICA3MSwgMSwgMjI2LCAyMjIsIDIyMCwgNzEsIDEsIDI1MywgMTc4LCAyMjAsIDcxLCAxLCAyNTQsIDI3LCAyMjAsIDcxLCAxLCAKKyAgICAyMjYsIDE2MiwgMjIwLCA3MSwgMSwgMjU0LCAyMDEsIDIyMCwgNzEsIDEsIDI0NSwgOTQsIDIyMCwgNzEsIDEsIDI1NCwgNSwgCisgICAgMjIwLCA3MSwgMSwgMjQ1LCAyMzUsIDIyMCwgNzEsIDEsIDI0MCwgMTI1LCAyMjAsIDcxLCAxLCAyMTEsIDEzLCAyMjYsIAorICAgIDE0NSwgMSwgMjU0LCAxNzksIDIyNiwgMTQ1LCAxLCAyNTIsIDE5OSwgMjI2LCAxNDUsIDEsIDIxNywgMTA2LCAyMjYsIDE0NSwgCisgICAgMSwgMjM1LCAxNDcsIDIyNiwgMTQ1LCAxLCAyMTEsIDE2NSwgMjI2LCAxNDUsIDEsIDIzNCwgMTM4LCAyMjYsIDE0NSwgMSwgCisgICAgMjQ4LCA4NCwgMjI2LCAxNDUsIDEsIDIwNSwgMjI2LCAxNDUsIDEsIDIwNiwgMjI2LCAxNDUsIDEsIDIyMCwgMjgsIDIyNiwgCisgICAgMTQ1LCAxLCAyNDgsIDMzLCAyMjYsIDE0NSwgMSwgMjUwLCAyMjMsIDIyNiwgMTQ1LCAxLCAyNDMsIDE0MiwgMjI2LCAxNDUsIAorICAgIDEsIDI0NCwgMjA0LCAyMjYsIDE0NSwgMSwgMjI0LCA4OSwgMjI2LCAxNDUsIDEsIDIzNSwgMTUsIDIyNiwgMTQ1LCAxLCAKKyAgICAyMzMsIDEzNiwgMjI2LCAxNDUsIDEsIDIzMCwgMjA1LCAyMjYsIDE0NSwgMSwgMjI3LCAxODIsIDIyNiwgMTQ1LCAxLCAyMTIsIAorICAgIDMwLCAyMjYsIDE0NSwgMSwgMTYyLCAyMjYsIDE0NSwgMSwgMTkyLCAyMjYsIDE0NSwgMSwgNjEsIDIyNiwgMTQ1LCAxLCA3NiwgCisgICAgMjI2LCAxNDUsIDEsIDc0LCAyMjYsIDE0NSwgMSwgNzgsIDIyNiwgMTQ1LCAxLCA2OSwgMjI2LCAxNDUsIDEsIDI1NSwgODIsIAorICAgIDIyNiwgMTQ1LCAxLCAyNDUsIDIxNywgMjI2LCAxNDUsIDEsIDIyNiwgMTg3LCAyMjYsIDE0NSwgMjEsIDIxMCwgODYsIDIyNiwgCisgICAgMTQ1LCAyMSwgMTExLCAyMjYsIDE0NSwgMjEsIDEwNSwgMjI2LCAxNDUsIDIxLCAxNTgsIDIyNiwgMTQ1LCAyMSwgMTYxLCAKKyAgICAyMjYsIDE0NSwgMjEsIDE5MCwgMjI2LCAxNDUsIDIxLCAxOTUsIDIyNiwgMTQ1LCAyMSwgMTk5LCAyMjYsIDE0NSwgMjEsIAorICAgIDE5NiwgMjI2LCAxNDUsIDIxLCAyMDEsIDI0OSwgNzUsIDMsIDYxLCAyNDksIDc1LCAzLCA3NiwgMjQ5LCA3NSwgMywgNzQsIAorICAgIDI0OSwgNzUsIDMsIDc4LCAyNDksIDc1LCAzLCA2OSwgMjQ5LCA3NSwgMywgMjM1LCAxNDcsIDI0OSwgNzUsIDMsIDIzNSwgCisgICAgNzQsIDI0OSwgNzUsIDMsIDE3NiwgMjQ5LCA3NSwgMywgMjM0LCAxODgsIDI0OSwgNzUsIDMsIDIzNCwgOTgsIDI0OSwgNzUsIAorICAgIDMsIDIzNCwgMzQsIDI0OSwgNzUsIDMsIDIzMywgMjIzLCAyNDksIDc1LCAzLCAyMzMsIDE0MSwgMjQ5LCA3NSwgMywgMjMzLCAKKyAgICA2NCwgMjQ5LCA3NSwgMywgMjMyLCAyNDcsIDI0OSwgNzUsIDMsIDIzMiwgMTYyLCAyNDksIDc1LCAzLCAyMzIsIDEwMywgCisgICAgMjQ5LCA3NSwgMywgMTg2LCAyNDksIDc1LCAzLCAyMzEsIDk2LCAyNDksIDc1LCAzLCAyMzAsIDIzNSwgMjQ5LCA3NSwgMywgCisgICAgMjMwLCAxNjYsIDI0OSwgNzUsIDMsIDIzMCwgMTA3LCAyNDksIDc1LCAzLCAxOTgsIDI0OSwgNzUsIDMsIDIyOSwgMTEyLCAKKyAgICAyNDksIDc1LCAzLCAyMjgsIDIzOCwgMjQ5LCA3NSwgMywgMjI4LCA3OSwgMjQ5LCA3NSwgMywgMjI3LCAyNDIsIDI0OSwgNzUsIAorICAgIDMsIDE5MSwgMjQ5LCA3NSwgMywgMjI1LCAyMjQsIDI0OSwgNzUsIDMsIDIyNSwgMTExLCAyNDksIDc1LCAzLCAyMjUsIDE5LCAKKyAgICAyNDksIDc1LCAzLCAyMjQsIDE1MywgMjQ5LCA3NSwgMywgMjA1LCAyNDksIDc1LCAzLCAyMjMsIDEzMSwgMjQ5LCA3NSwgMywgCisgICAgMjIzLCAzOCwgMjQ5LCA3NSwgMywgMjIyLCAyMTMsIDI0OSwgNzUsIDMsIDIyMiwgMTQyLCAyNDksIDc1LCAzLCAyMDYsIAorICAgIDI0OSwgNzUsIDMsIDIyMSwgMTgzLCAyNDksIDc1LCAzLCAyMTksIDE5MywgMjQ5LCA3NSwgMywgMjE5LCA2MCwgMjQ5LCA3NSwgCisgICAgMywgMjE4LCA4NCwgMjQ5LCA3NSwgMywgMjE3LCAxMDYsIDI0OSwgNzUsIDMsIDIxNywgMjMsIDI0OSwgNzUsIDMsIDIxNiwgCisgICAgMTE4LCAyNDksIDc1LCAzLCAxMTIsIDI0OSwgNzUsIDMsIDIxNSwgMTE5LCAyNDksIDc1LCAzLCAyMTIsIDY1LCAyNDksIDc1LCAKKyAgICAzLCAyMTIsIDIyLCAyNDksIDc1LCAzLCAyMTEsIDI1MCwgMjQ5LCA3NSwgMywgMjExLCAyMjcsIDI0OSwgNzUsIDMsIDIxMSwgCisgICAgMTY1LCAyNDksIDc1LCAzLCAyMTEsIDE2MiwgMjQ5LCA3NSwgMywgMjEwLCAxMTYsIDI0OSwgNzUsIDMsIDIxMCwgMjMsIAorICAgIDIzNiwgOCwgMjU0LCAzNSwgMSwgMjU0LCAxNzcsIDIzNiwgOCwgMjU0LCAzNSwgMSwgMjUyLCAzMywgMjM2LCA4LCAyNTQsIAorICAgIDM1LCAxLCAyNDIsIDIwOCwgMjM2LCA4LCAyNTQsIDM1LCAxLCAyNDgsIDE5NiwgMjM2LCA4LCAyNTQsIDM1LCAxLCAyNDEsIAorICAgIDI0NSwgMjM2LCA4LCAyNTQsIDM1LCAxLCAyMTIsIDMwLCAyMzYsIDgsIDI1NCwgMzUsIDEsIDIxMCwgOTcsIDIzNiwgOCwgCisgICAgMjU0LCAzNSwgMSwgMjQxLCAyMDIsIDIzNiwgOCwgMjU0LCAzNSwgMSwgMjE2LCAyMjcsIDIzNiwgOCwgMjU0LCAzNSwgMSwgCisgICAgMjEwLCAyMzIsIDIzNiwgOCwgMjU0LCAzNSwgMSwgMjM0LCAyMzEsIDIzNiwgOCwgMjU0LCAzNSwgMSwgMjMzLCA5OSwgMjM2LCAKKyAgICA4LCAyNTQsIDM1LCAxLCAyMzEsIDcwLCAyMzYsIDgsIDI1NCwgMzUsIDEsIDIyNywgMTk4LCAyMzYsIDgsIDI1NCwgMzUsIDEsIAorICAgIDIyMSwgMjUxLCAyMzYsIDgsIDI1NCwgMzUsIDEsIDI1MywgMTcwLCAyMzYsIDgsIDI1NCwgMzUsIDEsIDIyNSwgMjI0LCAKKyAgICAyMzYsIDgsIDI1NCwgMzUsIDEsIDIyMiwgMjYsIDIzNiwgOCwgMjU0LCAzNSwgMSwgMjI0LCAzNywgMjM2LCA4LCAyNTQsIAorICAgIDM1LCAxLCAyMjMsIDcwLCAyMzYsIDgsIDI1NCwgMzUsIDEsIDIyMCwgMjIsIDIzNiwgOCwgMjU0LCAzNSwgMSwgMjE3LCAzNywgCisgICAgMjM2LCA4LCAyNTQsIDM1LCAyMjEsIDE3NSwgNTAsIDIzNiwgOCwgMjU0LCAzNSwgNTQsIDExMSwgMjM2LCA4LCAyNTQsIDM1LCAKKyAgICA1NCwgMTA1LCAyMzYsIDgsIDI1NCwgMzUsIDU0LCAxNTgsIDIzNiwgOCwgMjU0LCAzNSwgNTQsIDIxNiwgMjQ4LCAyMzYsIDgsIAorICAgIDI1NCwgMzUsIDU0LCAyMTUsIDczLCAyMzYsIDgsIDI1NCwgMzUsIDU0LCAxMjMsIDI0MCwgMjE3LCAyMzYsIDgsIDI1NCwgCisgICAgMzUsIDU0LCAxMjMsIDIxNiwgMTQ4LCAyMzYsIDgsIDI1NCwgMzUsIDU0LCAyMTYsIDI0OSwgMjE2LCAxNDgsIDIyNSwgMTIyLCAKKyAgICAxLCAyNTQsIDE3NCwgMjI1LCAxMjIsIDEsIDI1MiwgMzYsIDIyNSwgMTIyLCAxLCAyNDMsIDExNiwgMjI1LCAxMjIsIDEsIAorICAgIDI0OCwgNjQsIDIyNSwgMTIyLCAxLCAyNDEsIDI0NSwgMjI1LCAxMjIsIDEsIDIxMiwgMzcsIDIyNSwgMTIyLCAxLCAyMTAsIAorICAgIDExMCwgMjI1LCAxMjIsIDEsIDI0MSwgMjA0LCAyMjUsIDEyMiwgMSwgMjE2LCAyMzEsIDIyNSwgMTIyLCAxLCAyMTAsIDIzMywgCisgICAgMjI1LCAxMjIsIDEsIDIzNSwgMCwgMjI1LCAxMjIsIDEsIDIzMywgMTA1LCAyMjUsIDEyMiwgMSwgMjMxLCA3MCwgMjI1LCAKKyAgICAxMjIsIDEsIDIyNywgMTk4LCAyMjUsIDEyMiwgMSwgMjIwLCAxNDYsIDIyNSwgMTIyLCAxLCAyNTQsIDIwNSwgMjI1LCAxMjIsIAorICAgIDEsIDIyNSwgMjI0LCAyMjUsIDEyMiwgMSwgMjIyLCAyNywgMjI1LCAxMjIsIDEsIDIyNCwgNDIsIDIyNSwgMTIyLCAxLCAKKyAgICAyMjIsIDE5MSwgMjI1LCAxMjIsIDEsIDIyMCwgMjIsIDIyNSwgMTIyLCAxLCAyMTcsIDQyLCAyMjUsIDEyMiwgNTQsIDExMSwgCisgICAgMjI1LCAxMjIsIDU0LCAyMTYsIDI0OCwgMjI1LCAxMjIsIDU0LCAyMTUsIDczLCAyMjUsIDEyMiwgNTQsIDEyMywgMjQwLCAKKyAgICAyMTcsIDIyNSwgMTIyLCA1NCwgMTA1LCAyMjUsIDEyMiwgNTQsIDE1OCwgMjI1LCAxMjIsIDIxMSwgMjA5LCAyMjAsIDEzOSwgCisgICAgMjMyLCA2NCwgMSwgNjEsIDIzMiwgNjQsIDEsIDI1MywgMTY2LCAyMzIsIDY0LCAxLCAyNDMsIDIwOSwgMjMyLCA2NCwgMSwgCisgICAgMjQ5LCA2OCwgMjMyLCA2NCwgMSwgNzYsIDIzMiwgNjQsIDEsIDIxNCwgMTA1LCAyMzIsIDY0LCAxLCA3NCwgMjMyLCA2NCwgCisgICAgMSwgMjExLCAxMTcsIDIzMiwgNjQsIDEsIDIzNSwgMjksIDIzMiwgNjQsIDEsIDE1NiwgMjMyLCA2NCwgMSwgMTk0LCAyMzIsIAorICAgIDY0LCAxLCAyMzAsIDMwLCAyMzIsIDY0LCAxLCA3OCwgMjMyLCA2NCwgMSwgMTUzLCAyMzIsIDY0LCAxLCAyMTgsIDIyOCwgCisgICAgMjMyLCA2NCwgMSwgMjE3LCAxNTMsIDIzMiwgNjQsIDEsIDY5LCAyMzIsIDY0LCAxLCAyNDUsIDE0LCAyMzIsIDY0LCAxLCAKKyAgICAyMjQsIDk5LCAyMzIsIDY0LCAxLCAyMjIsIDkzLCAyMzIsIDY0LCAxLCAyMTUsIDE2MCwgMjMyLCA2NCwgMSwgMjU0LCAxMzEsIAorICAgIDIzMiwgNjQsIDEsIDI0NSwgMTU4LCAyMzIsIDY0LCAxLCAyMzIsIDY3LCAyMzIsIDY0LCAxLCAyMjgsIDExNiwgMjMyLCA2NCwgCisgICAgMSwgMjUxLCA3NCwgMjMyLCA2NCwgMjE1LCAyMjMsIDc5LCAyMzEsIDUzLCAyNDEsIDE4MSwgMSwgNjEsIDIzMSwgNTMsIAorICAgIDI0MSwgMTgxLCAxLCA3NiwgMjMxLCA1MywgMjQxLCAxODEsIDEsIDc0LCAyMzEsIDUzLCAyNDEsIDE4MSwgMSwgNzgsIDIzMSwgCisgICAgNTMsIDI0MSwgMTgxLCAxLCAxOTIsIDIzMSwgNTMsIDI0MSwgMTgxLCAxLCAyMTIsIDY1LCAyMzEsIDUzLCAyNDEsIDE4MSwgCisgICAgMSwgMjUyLCAxOTksIDIzMSwgNTMsIDI0MSwgMTgxLCAxLCAyNTIsIDE5OCwgMjMxLCA1MywgMjQxLCAxODEsIDEsIDE5MSwgCisgICAgMjMxLCA1MywgMjQxLCAxODEsIDEsIDE4NiwgMjMxLCA1MywgMjQxLCAxODEsIDEsIDE5OCwgMjMxLCA1MywgMjQxLCAxODEsIAorICAgIDEsIDIyOSwgMjMzLCAyMzEsIDUzLCAyNDEsIDE4MSwgMSwgMjI5LCAxMTIsIDIzMSwgNTMsIDI0MSwgMTgxLCAxLCAyMjksIAorICAgIDExMSwgMjMxLCA1MywgMjQxLCAxODEsIDEsIDIwNSwgMjMxLCA1MywgMjQxLCAxODEsIDEsIDIyMywgMTkwLCAyMzEsIDUzLCAKKyAgICAyNDEsIDE4MSwgMSwgMjMzLCAxNDEsIDIzMSwgNTMsIDI0MSwgMTgxLCAxLCAyMzQsIDEzOCwgMjMxLCA1MywgMjQxLCAxODEsIAorICAgIDEsIDI0MSwgMTk2LCAyMzEsIDUzLCAyNDEsIDE4MSwgMSwgMjA2LCAyMzEsIDUzLCAyNDEsIDE4MSwgMSwgMjIyLCAzNSwgCisgICAgMjMxLCA1MywgMjQxLCAxODEsIDEsIDIyMSwgMTgzLCAyMzEsIDUzLCAyNDEsIDE4MSwgMSwgMTc2LCAyMzEsIDUzLCAyNDEsIAorICAgIDE4MSwgMSwgMjI0LCA5MSwgMjMxLCA1MywgMjQxLCAxODEsIDEsIDIxNywgMTA2LCAyMzEsIDUzLCAyNDEsIDE4MSwgMSwgCisgICAgMjE3LCAxMDUsIDIzMSwgNTMsIDI0MSwgMTgxLCAxLCAyMTcsIDIzLCAyMzEsIDUzLCAyNDEsIDE4MSwgMSwgMjE3LCAyMiwgCisgICAgMjMxLCA1MywgMjQxLCAxODEsIDEsIDExMiwgMjMxLCA1MywgMjQxLCAxODEsIDEsIDI0OCwgMjI5LCAyMzEsIDUzLCAyNDEsIAorICAgIDE4MSwgMTYsIDIxMywgMTcwLCAyMzEsIDUzLCAyNDEsIDE4MSwgMTYsIDIxMywgMTY5LCAyMzEsIDUzLCAyNDksIDEwMiwgMSwgCisgICAgNjEsIDIzMSwgNTMsIDI0OSwgMTAyLCAxLCA3NiwgMjMxLCA1MywgMjQ5LCAxMDIsIDEsIDc0LCAyMzEsIDUzLCAyNDksIAorICAgIDEwMiwgMSwgNzgsIDIzMSwgNTMsIDI0OSwgMTAyLCAxLCAxOTIsIDIzMSwgNTMsIDI0OSwgMTAyLCAxLCAyMTIsIDY1LCAKKyAgICAyMzEsIDUzLCAyNDksIDEwMiwgMSwgMjUyLCAxOTksIDIzMSwgNTMsIDI0OSwgMTAyLCAxLCAxOTEsIDIzMSwgNTMsIDI0OSwgCisgICAgMTAyLCAxLCAxODYsIDIzMSwgNTMsIDI0OSwgMTAyLCAxLCAxOTgsIDIzMSwgNTMsIDI0OSwgMTAyLCAxLCAyMjksIDExMiwgCisgICAgMjMxLCA1MywgMjQ5LCAxMDIsIDEsIDIwNSwgMjMxLCA1MywgMjQ5LCAxMDIsIDEsIDIzMywgMTQxLCAyMzEsIDUzLCAyNDksIAorICAgIDEwMiwgMSwgMjM0LCAxMzgsIDIzMSwgNTMsIDI0OSwgMTAyLCAxLCAyNDEsIDE5NiwgMjMxLCA1MywgMjQ5LCAxMDIsIDEsIAorICAgIDIwNiwgMjMxLCA1MywgMjQ5LCAxMDIsIDEsIDI1NCwgMzEsIDIwNiwgMjMxLCA1MywgMjQ5LCAxMDIsIDEsIDIyMSwgMTgzLCAKKyAgICAyMzEsIDUzLCAyNDksIDEwMiwgMSwgMTc2LCAyMzEsIDUzLCAyNDksIDEwMiwgMSwgMjI0LCA5MSwgMjMxLCA1MywgMjQ5LCAKKyAgICAxMDIsIDEsIDIxNywgMTA2LCAyMzEsIDUzLCAyNDksIDEwMiwgMSwgMjE3LCAyMywgMjMxLCA1MywgMjQ5LCAxMDIsIDEsIAorICAgIDExMiwgMjMxLCA1MywgMjQ5LCAxMDIsIDEsIDI0OCwgMjI5LCAyMzEsIDUzLCAyNDksIDEwMiwgMjMyLCAxNTEsIDIyMiwgCisgICAgMjE5LCAyMzEsIDUzLCAyNDksIDEwMiwgMjMyLCAxNTEsIDIzNiwgMTMsIDIzNCwgMTI2LCAxLCA2MSwgMjM0LCAxMjYsIDI1LCAKKyAgICA1LCA3NCwgMjM0LCAxMjYsIDI1LCA1LCA2OSwgMjM0LCAxMjYsIDI1LCA1LCAxNDksIDE1MywgMjM0LCAxMjYsIDI1LCA1LCAKKyAgICA3NiwgMjM0LCAxMjYsIDI1LCA1LCA3OCwgMjM0LCAxMjYsIDI1LCAyMzMsIDI5LCA3OSwgMjM0LCAxMjYsIDUsIDUyLCAyMjIsIAorICAgIDIzNywgNTEsIDIzNCwgMTI2LCA1LCAyNTQsIDgzLCAyMzQsIDEyNiwgNSwgMjEzLCAxNDcsIDIzNCwgMTI2LCAxLCAxNzYsIAorICAgIDIzNCwgMTI2LCAxLCAyMzQsIDEzOCwgMjM0LCAxMjYsIDEsIDI0MywgMTQyLCAyMzQsIDEyNiwgMSwgMjQzLCAwLCAyMzQsIAorICAgIDEyNiwgMSwgMjUxLCA0MSwgMjM0LCAxMjYsIDEsIDI1MCwgMTY1LCAyMzQsIDEyNiwgMSwgMjM1LCAxNDcsIDIzNCwgMTI2LCAKKyAgICAxLCAyMjcsIDE2OSwgMjM0LCAxMjYsIDEsIDIxNSwgMTU3LCAyMzQsIDEyNiwgMSwgMjE1LCAxNDUsIDIzNCwgMTI2LCAxLCAKKyAgICAyNDgsIDE0MywgMjM0LCAxMjYsIDEsIDI0OCwgMTI3LCAyMzQsIDEyNiwgMSwgMjI4LCAxMTUsIDIzNCwgMTI2LCAxLCAyMTcsIAorICAgIDEwNiwgMjM0LCAxMjYsIDEsIDIxNiwgMjA5LCAyMzQsIDEyNiwgMSwgMjQ4LCAyMjksIDIzNCwgMTI2LCAxLCAyNDgsIDMzLCAKKyAgICAyMzQsIDEyNiwgMSwgMTk4LCAyMzQsIDEyNiwgMSwgMTkxLCAyMzQsIDEyNiwgMSwgMjI1LCAxNTAsIDIzNCwgMTI2LCAxLCAKKyAgICAyNTIsIDE5OSwgMjM0LCAxMjYsIDEsIDI1MiwgMjYsIDIzNCwgMTI2LCAxLCAxODYsIDIzNCwgMTI2LCAxLCAxOTIsIDIzNCwgCisgICAgMTI2LCAxLCAyMDUsIDIzNCwgMTI2LCAxLCAyMzMsIDE0MSwgMjM0LCAxMjYsIDEsIDIxNCwgMjcsIDIzNCwgMTI2LCAxLCAKKyAgICAyMjAsIDEwNCwgMjM0LCAxMjYsIDEsIDIxOCwgMjI1LCAyMzQsIDEyNiwgMSwgMjA2LCAyMzQsIDEyNiwgMSwgMjEwLCAxMTYsIAorICAgIDIzNCwgMTI2LCAxLCAxNjIsIDIzNCwgMTI2LCAxLCAyMzQsIDUyLCAyMzQsIDEyNiwgMSwgMjE1LCAxMjUsIDIzNCwgMTI2LCAKKyAgICA1LCAyNTIsIDE0OSwgNDgsIDIzNCwgMTI2LCA1LCAyNTAsIDIyOSwgMjM0LCAxMjYsIDUsIDU5LCA1MSwgMjM0LCAxMjYsIAorICAgIDIxMywgMTUyLCAyMzQsIDEyNiwgMjEsIDExMSwgMjM0LCAxMjYsIDIxLCAxMDUsIDIzNCwgMTI2LCAyMSwgMTU4LCAyMzQsIAorICAgIDEyNiwgMjEsIDE2MSwgMjM0LCAxMjYsIDU0LCAyMTYsIDI0OCwgMjM0LCAxMjYsIDU0LCAyMTUsIDczLCAyMzQsIDEyNiwgCisgICAgNTQsIDEyMywgMjQwLCAyMTcsIDIzNCwgMTI2LCA1NCwgMTIzLCAyMTYsIDE0OCwgMjM0LCAxMjYsIDIyNCwgMTQ0LCAyNDcsIAorICAgIDEyOCwgMjM0LCAxMjYsIDIyNCwgMTQ0LCA0LCAyNTAsIDQzLCAyMzQsIDEyNiwgMjI0LCAxNDQsIDI1MCwgNDMsIDIzNCwgCisgICAgMTI2LCAyMjQsIDE0NCwgMjQ5LCAxNDUsIDEzMCwgMjM0LCAxMjYsIDIyNCwgMTQ0LCAyMzEsIDE4NSwgMjM0LCAxMjYsIAorICAgIDIyNCwgMTQ0LCAyMzIsIDEyMSwgMjM0LCAxMjYsIDIyNCwgMTQ0LCAyNDgsIDE4NiwgMjM0LCAxMjYsIDIyNCwgMTQ0LCA1MiwgCisgICAgMjQ4LCAxODYsIDIzNCwgMTI2LCAyMjQsIDE0NCwgMjMyLCAyMTMsIDU1LCAyMTksIDMwLCAyNTQsIDQ2LCAxLCAyNDEsIAorICAgIDI0NSwgNTUsIDIxOSwgMzAsIDI1NCwgNDYsIDEsIDIzMywgOTksIDU1LCAyMTksIDMwLCAyNTQsIDQ2LCAxLCAyNDEsIDIwMiwgCisgICAgNTUsIDIxOSwgMzAsIDI1NCwgNDYsIDEsIDIzMSwgNzAsIDU1LCAyMTksIDMwLCAyNTQsIDQ2LCAxLCAyMjQsIDM3LCA1NSwgCisgICAgMjE5LCAzMCwgMjU0LCA0NiwgMSwgMjEyLCAzMCwgNTUsIDIxOSwgMzAsIDI1NCwgNDYsIDEsIDIyMCwgMjIsIDU1LCAyMTksIAorICAgIDMwLCAyNTQsIDQ2LCAxLCAyMjMsIDcwLCA1NSwgMjE5LCAzMCwgMjU0LCA0NiwgMSwgMjUyLCAzMywgNTUsIDIxOSwgMzAsIAorICAgIDI1NCwgNDYsIDEsIDIxNywgMzcsIDU1LCAyMTksIDMwLCAyNTQsIDQ2LCAxLCAyMjEsIDIyOCwgNTUsIDIxOSwgMzAsIDI1NCwgCisgICAgNDYsIDEsIDIzNCwgMjMxLCA1NSwgMjE5LCAzMCwgMjU0LCA0NiwgMSwgMjI3LCAxOTgsIDU1LCAyMTksIDMwLCAyNTQsIDQ2LCAKKyAgICAxLCAyMzQsIDEyMiwgNTUsIDIxOSwgMzAsIDI1NCwgNDYsIDEsIDIyMiwgMjYsIDU1LCAyMTksIDMwLCAyNTQsIDQ2LCAxLCAKKyAgICAyMjEsIDI1MSwgNTUsIDIxOSwgMzAsIDI1NCwgNDYsIDEsIDI0NCwgMTYyLCA1NSwgMjE5LCAzMCwgMjU0LCA0NiwgMSwgCisgICAgMjU0LCAxNzksIDU1LCAyMTksIDMwLCAyNTQsIDQ2LCAxLCAyNTMsIDE2OSwgNTUsIDIxOSwgMzAsIDI1NCwgNDYsIDEsIAorICAgIDI0OCwgMzAsIDU1LCAyMTksIDMwLCAyNTQsIDQ2LCAxLCAyNDIsIDIwOCwgNTUsIDIxOSwgMzAsIDI1NCwgNDYsIDEsIDI0OCwgCisgICAgMTk2LCA1NSwgMjE5LCAzMCwgMjU0LCA0NiwgMSwgMjQyLCAyNDUsIDU1LCAyMTksIDMwLCAyNTQsIDQ2LCAxLCAyMTYsIAorICAgIDIyNywgNTUsIDIxOSwgMzAsIDI1NCwgNDYsIDEsIDIxMCwgOTYsIDU1LCAyMTksIDMwLCAyNTQsIDQ2LCAxLCAyNDgsIDI3LCAKKyAgICA1NSwgMjE5LCAzMCwgMjU0LCA0NiwgMSwgMjEwLCAyMzIsIDU1LCAyMTksIDMwLCAyNTQsIDQ2LCAxLCAyMTYsIDE5OCwgNTUsIAorICAgIDIxOSwgMzAsIDI1NCwgNDYsIDEsIDIxNiwgMTc5LCA1NSwgMjE5LCAzMCwgMjU0LCA0NiwgNTQsIDExMSwgNTUsIDIxOSwgCisgICAgMzAsIDI1NCwgNDYsIDU0LCAyNDQsIDEyMiwgNTUsIDIxOSwgMzAsIDI1NCwgNDYsIDEzMiwgMjM1LCAyNDUsIDI1MywgMTgwLCAKKyAgICAxLCA2MSwgMjUzLCAxODAsIDEsIDI1NSwgODIsIDI1MywgMTgwLCAxLCAyNTQsIDgxLCAyNTMsIDE4MCwgMSwgMjU1LCA0MSwgCisgICAgMjUzLCAxODAsIDEsIDI1NCwgMTMxLCAyNTMsIDE4MCwgMSwgMjU1LCA0MiwgMjUzLCAxODAsIDEsIDI1NCwgMjUyLCAyNTMsIAorICAgIDE4MCwgMSwgMjU0LCAyNDgsIDI1MywgMTgwLCAxLCA3NiwgMjUzLCAxODAsIDEsIDI0NSwgMjE3LCAyNTMsIDE4MCwgMSwgCisgICAgNzgsIDI1MywgMTgwLCAxLCAyMjYsIDE4NywgMjUzLCAxODAsIDEsIDc0LCAyNTMsIDE4MCwgMSwgMjM2LCA0MCwgMjUzLCAKKyAgICAxODAsIDEsIDY5LCAyNTMsIDE4MCwgMSwgMjE0LCAxMTgsIDI1MywgMTgwLCAxLCAyMzQsIDE4OCwgMjUzLCAxODAsIDEsIAorICAgIDIxMSwgMTYyLCAyNTMsIDE4MCwgMSwgMjExLCAxMjgsIDI1MywgMTgwLCAxLCAyMTEsIDEzNywgMjUzLCAxODAsIDEsIDI0MywgCisgICAgNjksIDI1MywgMTgwLCAxLCAyNDMsIDMxLCAyNTMsIDE4MCwgMSwgMjQyLCAyNDMsIDI1MywgMTgwLCAxLCAyNTAsIDE5OCwgCisgICAgMjUzLCAxODAsIDEsIDIzNSwgMTMyLCAyNTMsIDE4MCwgMSwgMjE3LCAyMywgMjUzLCAxODAsIDEsIDIxNiwgMTk2LCAyNTMsIAorICAgIDE4MCwgMSwgMjQ4LCA5OCwgMjUzLCAxODAsIDEsIDI0OCwgMjUsIDI1MywgMTgwLCAxLCAyMTUsIDE1MiwgMjUzLCAxODAsIAorICAgIDEsIDIyNSwgMjI0LCAyNTMsIDE4MCwgMSwgMjQ0LCAxNjIsIDI1MywgMTgwLCAxLCAyNTIsIDgzLCAyNTMsIDE4MCwgMSwgCisgICAgMjUyLCAyMiwgMjUzLCAxODAsIDEsIDIyOSwgNjksIDI1MywgMTgwLCAxLCAyMjgsIDI0NCwgMjUzLCAxODAsIDEsIDIyOCwgCisgICAgMjQ1LCAyNTMsIDE4MCwgMSwgMjI5LCAxMTIsIDI1MywgMTgwLCAxLCAyMjcsIDE2MCwgMjUzLCAxODAsIDEsIDIyOCwgMTEwLCAKKyAgICAyNTMsIDE4MCwgMSwgMjMxLCA5NiwgMjUzLCAxODAsIDEsIDI0MSwgMTIzLCAyNTMsIDE4MCwgMSwgMjEwLCAxNjYsIDI1MywgCisgICAgMTgwLCAxLCAyMTEsIDQ3LCAyNTMsIDE4MCwgMSwgMjEzLCAyNTUsIDI1MywgMTgwLCAxLCAyMjMsIDEzMSwgMjUzLCAxODAsIAorICAgIDEsIDIzMywgNjQsIDI1MywgMTgwLCAxLCAyMjEsIDE4MywgMjUzLCAxODAsIDEsIDIxMCwgOTQsIDI1MywgMTgwLCAxLCAKKyAgICAyMjAsIDY1LCAyNTMsIDE4MCwgMSwgMjEwLCA3NCwgMjUzLCAxODAsIDEsIDIxOSwgMjAwLCAyNTMsIDE4MCwgMSwgMjE4LCAKKyAgICAxOTUsIDI1MywgMTgwLCAxLCAyNDEsIDI0NSwgMjUzLCAxODAsIDI1NSwgMzAsIDc5LCAyMTYsIDgwLCAxMTMsIDE3MCwgCisgICAgMTE1LCAxMjMsIDU5LCAyMjQsIDE0MywgNCwgMTEzLCAxNzAsIDExNSwgMTIzLCA1OSwgMjI0LCAxNDMsIDIzMywgOTEsIAorICAgIDExMywgMTcwLCAxMTUsIDEyMywgNTksIDIyNCwgMTQzLCAyMzMsIDkxLCAxMjMsIDU5LCAxMTUsIDExMywgMTcwLCAyMjQsIAorICAgIDE0MywgMjMzLCA5MSwgMTEzLCAyMjIsIDIzNSwgMTE1LCAxMjMsIDIyMiwgMjM3LCAyMjQsIDE0MywgMjMzLCA5MSwgMTIzLCAKKyAgICAyMjIsIDIzNywgMTE1LCAxMTMsIDIyMiwgMjM1LCAyMjQsIDE0MywgMjM1LCAyMjUsIDIyNiwgMiwgMSwgMjU0LCAxNzcsIAorICAgIDIzNSwgMjI1LCAyMjYsIDIsIDEsIDI1MiwgMzMsIDIzNSwgMjI1LCAyMjYsIDIsIDEsIDI0MiwgMjA4LCAyMzUsIDIyNSwgCisgICAgMjI2LCAyLCAxLCAyNDgsIDE5NiwgMjM1LCAyMjUsIDIyNiwgMiwgMSwgMjQxLCAyNDUsIDIzNSwgMjI1LCAyMjYsIDIsIDEsIAorICAgIDIxMiwgMzAsIDIzNSwgMjI1LCAyMjYsIDIsIDEsIDIxMCwgOTcsIDIzNSwgMjI1LCAyMjYsIDIsIDEsIDI0MSwgMjAyLCAKKyAgICAyMzUsIDIyNSwgMjI2LCAyLCAxLCAyMTYsIDIyNywgMjM1LCAyMjUsIDIyNiwgMiwgMSwgMjEwLCAyMzIsIDIzNSwgMjI1LCAKKyAgICAyMjYsIDIsIDEsIDIzNCwgMjMxLCAyMzUsIDIyNSwgMjI2LCAyLCAxLCAyMzMsIDk5LCAyMzUsIDIyNSwgMjI2LCAyLCAxLCAKKyAgICAyMzEsIDcwLCAyMzUsIDIyNSwgMjI2LCAyLCAxLCAyMjcsIDE5OCwgMjM1LCAyMjUsIDIyNiwgMiwgMSwgMjIxLCAyNTEsIAorICAgIDIzNSwgMjI1LCAyMjYsIDIsIDEsIDI1MywgMTcwLCAyMzUsIDIyNSwgMjI2LCAyLCAxLCAyMjUsIDIyNCwgMjM1LCAyMjUsIAorICAgIDIyNiwgMiwgMSwgMjIyLCAyNiwgMjM1LCAyMjUsIDIyNiwgMiwgMSwgMjI0LCAzNywgMjM1LCAyMjUsIDIyNiwgMiwgMSwgCisgICAgMjIzLCA3MCwgMjM1LCAyMjUsIDIyNiwgMiwgMSwgMjIwLCAyMiwgMjM1LCAyMjUsIDIyNiwgMiwgMSwgMjE3LCAzNywgMjM1LCAKKyAgICAyMjUsIDIyNiwgMiwgNTQsIDExMSwgMjM1LCAyMjUsIDIyNiwgMiwgNTQsIDEwNSwgMjM1LCAyMjUsIDIyNiwgMiwgNTQsIAorICAgIDE1OCwgMjM1LCAyMjUsIDIyNiwgMiwgNTQsIDE2MSwgMjM1LCAyMjUsIDIyNiwgMiwgNTQsIDIxNiwgMjQ4LCAyMzUsIDIyNSwgCisgICAgMjI2LCAyLCA1NCwgMjE1LCA3MywgMjM1LCAyMjUsIDIyNiwgMiwgNTQsIDEyMywgMjQwLCAyMTcsIDIzNSwgMjI1LCAyMjYsIAorICAgIDIsIDU0LCAxMjMsIDIxNiwgMTQ4LCAyMzUsIDIyNSwgMjI2LCA3NiwgMSwgMjU0LCAxNzcsIDIzNSwgMjI1LCAyMjYsIDc2LCAKKyAgICAxLCAyNTIsIDMzLCAyMzUsIDIyNSwgMjI2LCA3NiwgMSwgMjQyLCAyMDgsIDIzNSwgMjI1LCAyMjYsIDc2LCAxLCAyNDgsIAorICAgIDE5NiwgMjM1LCAyMjUsIDIyNiwgNzYsIDEsIDI0MSwgMjQ1LCAyMzUsIDIyNSwgMjI2LCA3NiwgMSwgMjEyLCAyOSwgMjM1LCAKKyAgICAyMjUsIDIyNiwgNzYsIDEsIDIxMCwgOTcsIDIzNSwgMjI1LCAyMjYsIDc2LCAxLCAyNDEsIDIwMiwgMjM1LCAyMjUsIDIyNiwgCisgICAgNzYsIDEsIDIxNiwgMjI3LCAyMzUsIDIyNSwgMjI2LCA3NiwgMSwgMjEwLCAyMzIsIDIzNSwgMjI1LCAyMjYsIDc2LCAxLCAKKyAgICAyMzQsIDIzMSwgMjM1LCAyMjUsIDIyNiwgNzYsIDEsIDIzMywgOTksIDIzNSwgMjI1LCAyMjYsIDc2LCAxLCAyMzEsIDY5LCAKKyAgICAyMzUsIDIyNSwgMjI2LCA3NiwgMSwgMjI3LCAxOTgsIDIzNSwgMjI1LCAyMjYsIDc2LCAxLCAyMjEsIDI1MSwgMjM1LCAyMjUsIAorICAgIDIyNiwgNzYsIDEsIDIyNSwgMjI0LCAyMzUsIDIyNSwgMjI2LCA3NiwgMSwgMjIyLCAyNiwgMjM1LCAyMjUsIDIyNiwgNzYsIAorICAgIDEsIDIyMCwgMjIsIDIzNSwgMjI1LCAyMjYsIDc2LCAxLCAyMTcsIDM3LCAyMzUsIDIyNSwgMjI2LCA3NiwgNTQsIDExMSwgCisgICAgMjM1LCAyMjUsIDIyNiwgNzYsIDU0LCAxMDUsIDIzNSwgMjI1LCAyMjYsIDc2LCA1NCwgMTU4LCAyMzUsIDIyNSwgMjI2LCAKKyAgICA3NiwgNTQsIDE2MSwgMjM1LCAyMjUsIDIyNiwgNzYsIDU0LCAyMTYsIDI0OCwgMjM1LCAyMjUsIDIyNiwgNzYsIDU0LCAyMTUsIAorICAgIDczLCAyMzUsIDIyNSwgMjI2LCA3NiwgNTQsIDEyMywgMjQwLCAyMTcsIDIzNSwgMjI1LCAyMjYsIDc2LCA1NCwgMTIzLCAKKyAgICAyMTYsIDE0OCwgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDYxLCA1NSwgMjAyLCAxLCAyMTEsIDM3LCA2MSwgNTUsIDIwMiwgMSwgCisgICAgMjExLCAzNywgMjU0LCAyNTIsIDU1LCAyMDIsIDEsIDIyNiwgMTUzLCA3NCwgNTUsIDIwMiwgMSwgMjExLCAzNywgNzQsIDU1LCAKKyAgICAyMDIsIDEsIDIxMSwgMzcsIDc2LCA1NSwgMjAyLCAxLCAyMjYsIDE1MywgNzgsIDU1LCAyMDIsIDEsIDIyNiwgMTUzLCAyMjYsIAorICAgIDIzOCwgNTUsIDIwMiwgMSwgMjExLCAzNywgMjI2LCAyMzgsIDU1LCAyMDIsIDEsIDIyNiwgMTUzLCAyNTUsIDM0LCA1NSwgCisgICAgMjAyLCAxLCAyMTEsIDM3LCAyNTUsIDM0LCA1NSwgMjAyLCAxLCAyMjYsIDE1MywgMjU0LCAyNTEsIDU1LCAyMDIsIDEsIAorICAgIDIxMSwgMzcsIDI1NCwgMjUxLCA1NSwgMjAyLCAxLCAyMjYsIDE1MywgMjU0LCAyMjUsIDU1LCAyMDIsIDEsIDIxMSwgMzcsIAorICAgIDI1NCwgMjI1LCA1NSwgMjAyLCAxLCAyMjYsIDE1MywgMjU0LCAyNDYsIDU1LCAyMDIsIDEsIDIxMSwgMzcsIDI1NCwgMjQ2LCAKKyAgICA1NSwgMjAyLCAxLCAyMjYsIDE1MywgMjU1LCA4LCA1NSwgMjAyLCAxLCAyMTEsIDM3LCAyNTUsIDgsIDU1LCAyMDIsIDEsIAorICAgIDIyNiwgMTUzLCAyNTQsIDI1MCwgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDI0NSwgMjAsIDU1LCAyMDIsIDEsIDIxMSwgMzcsIAorICAgIDI0NSwgMjAsIDU1LCAyMDIsIDEsIDIyNiwgMTUzLCAyNTMsIDE3NSwgNTUsIDIwMiwgMSwgMjExLCAzNywgMjUzLCAxNzUsIAorICAgIDU1LCAyMDIsIDEsIDIyNiwgMTUzLCAyNTQsIDIzMywgNTUsIDIwMiwgMSwgMjExLCAzNywgMjU0LCAyMzMsIDU1LCAyMDIsIAorICAgIDEsIDIyNiwgMTUzLCAyNTQsIDI0NCwgNTUsIDIwMiwgMSwgMjExLCAzNywgMjU0LCAyNDQsIDU1LCAyMDIsIDEsIDIyNiwgCisgICAgMTUzLCAyMjYsIDIzNywgNTUsIDIwMiwgMSwgMjExLCAzNywgMjI2LCAyMzcsIDU1LCAyMDIsIDEsIDIyNiwgMTUzLCAyNTQsIAorICAgIDE4NywgNTUsIDIwMiwgMSwgMjExLCAzNywgMjU0LCAxODcsIDU1LCAyMDIsIDEsIDIyNiwgMTUzLCAyNTQsIDI0MywgNTUsIAorICAgIDIwMiwgMSwgMjI2LCAxNTMsIDI0NSwgMTY5LCA1NSwgMjAyLCAxLCAyMjYsIDE1MywgMjQ1LCAxNjcsIDU1LCAyMDIsIDEsIAorICAgIDIyNiwgMTUzLCAyNTQsIDEzMSwgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDI1NCwgMjQxLCA1NSwgMjAyLCAxLCAyMTEsIDM3LCAKKyAgICAyNTQsIDI0MSwgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDI0NSwgMTM5LCA1NSwgMjAyLCAxLCAyMTEsIDM3LCAyNDUsIDEzOSwgCisgICAgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDI0NSwgMTU1LCA1NSwgMjAyLCAxLCAyMTEsIDM3LCAyNDUsIDE1NSwgNTUsIDIwMiwgCisgICAgMSwgMjI2LCAxNTMsIDI0NSwgMTI2LCA1NSwgMjAyLCAxLCAyMTEsIDM3LCAyNDUsIDEyNiwgNTUsIDIwMiwgMSwgMjExLCAKKyAgICAzNywgMjU0LCAxMjMsIDU1LCAyMDIsIDEsIDIyNiwgMTUzLCAyNDUsIDE0NiwgNTUsIDIwMiwgMSwgMjExLCAzNywgMjU0LCAKKyAgICAyNDAsIDU1LCAyMDIsIDEsIDIyNiwgMTUzLCAyNDUsIDExNiwgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDIyNiwgMTc5LCA1NSwgCisgICAgMjAyLCAxLCAyMjYsIDE1MywgMjQwLCAxMjAsIDU1LCAyMDIsIDEsIDIyNiwgMTUzLCAyNDUsIDIyMywgNTUsIDIwMiwgMSwgCisgICAgMjExLCAzNywgMjQ1LCAyMjMsIDU1LCAyMDIsIDEsIDIyNiwgMTUzLCAyNTQsIDUzLCA1NSwgMjAyLCAxLCAyMTEsIDM3LCAKKyAgICAyNTQsIDUzLCA1NSwgMjAyLCAxLCAyMjYsIDE1MywgMjM1LCAxODgsIDU1LCAyMDIsIDEsIDIxMSwgMzcsIDIzNSwgMTg4LCAKKyAgICA1NSwgMjAyLCAxLCAyMjYsIDE1MywgMjI2LCAxNjMsIDU1LCAyMDIsIDEsIDIxMSwgMzcsIDIyNiwgMTYzLCA1NSwgMjAyLCAKKyAgICAxLCAyMjYsIDE1MywgMjU0LCA0OSwgNTUsIDIwMiwgMSwgMjExLCAzNywgMjU0LCA0OSwgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIAorICAgIDI1NCwgMjM5LCA1NSwgMjAyLCAxLCAyMjYsIDE1MywgMjUzLCAyNDUsIDU1LCAyMDIsIDEsIDIyNiwgMTUzLCAyNTQsIDIzNywgCisgICAgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDI1MywgMjM5LCA1NSwgMjAyLCAxLCAyMTEsIDM3LCAyNTMsIDIzOSwgNTUsIDIwMiwgCisgICAgMSwgMjI2LCAxNTMsIDI0NSwgODMsIDU1LCAyMDIsIDEsIDIxMSwgMzcsIDI0NSwgODMsIDU1LCAyMDIsIDEsIDIyNiwgMTUzLCAKKyAgICAyNTMsIDIxNCwgNTUsIDIwMiwgMSwgMjExLCAzNywgMjUzLCAyMTQsIDU1LCAyMDIsIDEsIDIyNiwgMTUzLCAyNTQsIDIzNCwgCisgICAgNTUsIDIwMiwgMSwgMjExLCAzNywgMjU0LCAyMzQsIDU1LCAyMDIsIDEsIDIyNiwgMTUzLCAyMjYsIDE0NCwgNTUsIDIwMiwgCisgICAgMSwgMjI2LCAxNTMsIDI1MiwgMTMzLCAyMjIsIDEyOSwgMjEsIDExMSwgMjIyLCAxMjksIDIxLCAxMDUsIDIyMiwgMTI5LCAKKyAgICAyMSwgMTU4LCAyMjIsIDEyOSwgMjEsIDE2MSwgMjIyLCAxMjksIDIxLCAxOTAsIDIyMiwgMTI5LCAyMSwgMTk1LCAyMjIsIAorICAgIDEyOSwgMjEsIDE5OSwgMjIyLCAxMjksIDIxLCAxOTYsIDIyMiwgMTI5LCAyMSwgMjAxLCAyMjIsIDEyOSwgNTQsIDIxNiwgCisgICAgMjQ4LCAyMjIsIDEyOSwgNTQsIDIxNSwgNzMsIDIyMiwgMTI5LCA1NCwgMjE2LCAxNjMsIDIyMiwgMTI5LCA1NCwgMjQ0LCAKKyAgICAyMywgMjIyLCAxMjksIDU0LCAyNDQsIDEyMiwgMjIyLCAxMjksIDU0LCAyMTksIDExMywgMjIyLCAxMjksIDU0LCAyMjAsIAorICAgIDExOCwgMjIyLCAxMjksIDU0LCAyNDUsIDE5MiwgMjIyLCAxMjksIDU0LCAyMjgsIDIwMCwgMjIyLCAxMjksIDU0LCAxMjMsIAorICAgIDI0MCwgMjE3LCAyMjIsIDEyOSwgNTQsIDExMywgMjQwLCAyMTcsIDIyMiwgMTI5LCA1NCwgMTM0LCAyNDAsIDIxNywgMjIyLCAKKyAgICAxMjksIDU0LCAyNDQsIDE5LCAyNDAsIDIxNywgMjIyLCAxMjksIDU0LCAyNDQsIDg5LCAyNDAsIDIxNywgMjIyLCAxMjksIAorICAgIDU0LCAyMTksIDEyNywgMjQwLCAyMTcsIDIyMiwgMTI5LCA1NCwgMjIwLCAxMjQsIDI0MCwgMjE3LCAyMjIsIDEyOSwgNTQsIAorICAgIDI0NSwgMjAxLCAyNDAsIDIxNywgMjIyLCAxMjksIDU0LCAyMjgsIDIwNSwgMjQwLCAyMTcsIDIyMiwgMTI5LCAyNDQsIDEwLCAKKyAgICAxMjMsIDI0MiwgMzQsIDIyMiwgMTI5LCAyNDQsIDEwLCAxMjMsIDIyNCwgMjQsIDIyMiwgMTI5LCAyNDQsIDEwLCAxMjMsIAorICAgIDIxNiwgMTY5LCAyMjIsIDEyOSwgMjQ0LCAxMCwgMTEzLCAyMTYsIDE2NywgMTE4LCA1LCAyNTEsIDcsIDExOCwgNSwgMjU0LCAKKyAgICA4MywgMTE4LCA1LCAyMTMsIDE0NywgMTE4LCA1LCAyMzUsIDEwOCwgMTE4LCA1LCAyMTQsIDE2MSwgMTE4LCAxLCA2MSwgCisgICAgMTE4LCAxLCAyNTUsIDgyLCAxMTgsIDEsIDc0LCAxMTgsIDEsIDIzNiwgNDAsIDExOCwgMSwgNjksIDExOCwgMSwgMjE0LCAKKyAgICAxMTgsIDExOCwgMSwgMTQ5LCAxNTMsIDExOCwgMSwgMTQ5LCAyMjIsIDE4MiwgMTE4LCAxLCAxNDksIDE1NiwgMTE4LCAxLCAKKyAgICAxNDksIDIzMiwgMTkxLCAxMTgsIDEsIDc2LCAxMTgsIDEsIDI1NCwgMjEwLCAxMTgsIDEsIDc4LCAxMTgsIDEsIDI1MywgCisgICAgMjAwLCAxMTgsIDEsIDE3NiwgMTE4LCAxLCAyMzQsIDEzOCwgMTE4LCAxLCAyNDMsIDE0MiwgMTE4LCAxLCAyNDMsIDAsIAorICAgIDExOCwgMSwgMjI5LCA4MiwgMTE4LCAxLCAyNTEsIDQxLCAxMTgsIDEsIDI1MCwgMTY1LCAxMTgsIDEsIDIzNSwgMTQ3LCAKKyAgICAxMTgsIDEsIDIzNSwgMTIwLCAxMTgsIDEsIDIyNywgMTY5LCAxMTgsIDEsIDIxNSwgMTU3LCAxMTgsIDEsIDIxNSwgMTQ1LCAKKyAgICAxMTgsIDEsIDI0OCwgMTQzLCAxMTgsIDEsIDI0OCwgMTI3LCAxMTgsIDEsIDIyOCwgMTE1LCAxMTgsIDEsIDIxNywgMTA2LCAKKyAgICAxMTgsIDEsIDIxNiwgMjA5LCAxMTgsIDEsIDI0OCwgMjI5LCAxMTgsIDEsIDI0OCwgMzMsIDExOCwgMSwgMTk4LCAxMTgsIDEsIAorICAgIDE5MSwgMTE4LCAxLCAyMjUsIDE1MCwgMTE4LCAxLCAyNTIsIDE5OSwgMTE4LCAxLCAyNTIsIDI2LCAxMTgsIDEsIDE4NiwgCisgICAgMTE4LCAxLCAxOTIsIDExOCwgMSwgMjA1LCAxMTgsIDEsIDIzMywgMTQxLCAxMTgsIDEsIDIxNCwgMjcsIDExOCwgMSwgMjIwLCAKKyAgICAxMDQsIDExOCwgMSwgMjE4LCAyMjUsIDExOCwgMSwgMjA2LCAxMTgsIDEsIDE2MiwgMTE4LCAxLCAyMzIsIDE5MCwgMTE4LCAKKyAgICAxLCA1NSwgMzYsIDIzMiwgMTgxLCAxMTgsIDEsIDU1LCAzNiwgMjIyLCAxODEsIDExOCwgMSwgNTUsIDM2LCAyMjgsIDk3LCAKKyAgICAxMTgsIDI1LCA1LCAyNTUsIDgyLCAxMTgsIDI1LCA1LCAyNTIsIDIzLCAyNTUsIDgyLCAxMTgsIDI1LCA1LCA3NCwgMTE4LCAKKyAgICAyNSwgNSwgMjM2LCA0MCwgMTE4LCAyNSwgNSwgNjksIDExOCwgMjUsIDUsIDIxNCwgMTE4LCAxMTgsIDI1LCA1LCAxNDksIAorICAgIDE1MywgMTE4LCAyNSwgNSwgMTQ5LCAyMjIsIDE4MiwgMTE4LCAyNSwgNSwgMTQ5LCAxNTYsIDExOCwgMjUsIDUsIDE0OSwgCisgICAgMjMyLCAxOTEsIDExOCwgMjUsIDUsIDc2LCAxMTgsIDI1LCA1LCAyNTQsIDIxMCwgMTE4LCAyNSwgNSwgNzgsIDExOCwgMjUsIAorICAgIDUsIDI1MywgMjAwLCAxMTgsIDIxMywgMTUyLCAxMTgsIDI0OCwgMTg2LCAxMTgsIDUyLCAyNDgsIDE4NiwgMTE4LCAyMjQsIAorICAgIDE0NCwgMjQ3LCAxMjgsIDExOCwgMjI0LCAxNDQsIDUyLCAyNDcsIDEyOCwgMTE4LCAyMjQsIDE0NCwgMjMyLCAyMTksIDExOCwgCisgICAgMjI0LCAxNDQsIDI0OSwgMTQ1LCAxMzAsIDExOCwgMjI0LCAxNDQsIDIzMiwgMTIxLCAxMTgsIDU0LCAxMTEsIDExOCwgNTQsIAorICAgIDEwNSwgMTE4LCA1NCwgMTU4LCAxMTgsIDU0LCAxNjEsIDExOCwgNTQsIDE5MCwgMTE4LCA1NCwgMTk1LCAxMTgsIDU0LCAKKyAgICAxOTksIDExOCwgNTQsIDE5NiwgMTE4LCA1NCwgMjAxLCAxMTgsIDU0LCAyMTYsIDI0OCwgMTE4LCA1NCwgMjE1LCA3MywgCisgICAgMTE4LCA1NCwgMjE2LCAxNjMsIDExOCwgNTQsIDI0NCwgMjMsIDExOCwgNTQsIDI0NCwgMTIyLCAxMTgsIDU0LCAyMTksIAorICAgIDExMywgMTE4LCA1NCwgMjIwLCAxMTgsIDExOCwgNTQsIDI0NSwgMTkyLCAxMTgsIDU0LCAyMjgsIDIwMCwgMTE4LCA1NCwgCisgICAgMTIzLCAyNDAsIDIxNywgMTE4LCA1NCwgMTIzLCAyMTYsIDE0OCwgMTE4LCAyMSwgMjEwLCA4NiwgMTE4LCAyMSwgMTExLCAKKyAgICAxMTgsIDIxLCAxMDUsIDExOCwgMjEsIDE1OCwgMTE4LCAyMSwgMTYxLCAxMTgsIDIxLCAxOTAsIDExOCwgMjEsIDE5NSwgCisgICAgMTE4LCAyMSwgMTk5LCAxMTgsIDIxLCAxOTYsIDExOCwgMjEsIDIwMSwgMjM0LCAyNTAsIDUsIDI1MSwgNywgMjM0LCAyNTAsIAorICAgIDUsIDI1NCwgODMsIDIzNCwgMjUwLCA1LCAyMTMsIDE0NywgMjM0LCAyNTAsIDEsIDYxLCAyMzQsIDI1MCwgMSwgMjU1LCA4MiwgCisgICAgMjM0LCAyNTAsIDEsIDc0LCAyMzQsIDI1MCwgMSwgMjM2LCA0MCwgMjM0LCAyNTAsIDEsIDY5LCAyMzQsIDI1MCwgMSwgMjE0LCAKKyAgICAxMTgsIDIzNCwgMjUwLCAxLCA3NiwgMjM0LCAyNTAsIDEsIDI1NCwgMjEwLCAyMzQsIDI1MCwgMSwgNzgsIDIzNCwgMjUwLCAKKyAgICAxLCAyNTMsIDIwMCwgMjM0LCAyNTAsIDEsIDE3NiwgMjM0LCAyNTAsIDEsIDIzNCwgMTM4LCAyMzQsIDI1MCwgMSwgMjQzLCAKKyAgICAxNDIsIDIzNCwgMjUwLCAxLCAyNDMsIDAsIDIzNCwgMjUwLCAxLCAyMjksIDgyLCAyMzQsIDI1MCwgMSwgMjUxLCA0MSwgCisgICAgMjM0LCAyNTAsIDEsIDI1MCwgMTY1LCAyMzQsIDI1MCwgMSwgMjM1LCAxNDcsIDIzNCwgMjUwLCAxLCAyMzUsIDEyMCwgMjM0LCAKKyAgICAyNTAsIDEsIDIyNywgMTY5LCAyMzQsIDI1MCwgMSwgMjE1LCAxNTcsIDIzNCwgMjUwLCAxLCAyMTUsIDE0NSwgMjM0LCAyNTAsIAorICAgIDEsIDI0OCwgMTQzLCAyMzQsIDI1MCwgMSwgMjQ4LCAxMzIsIDIzNCwgMjUwLCAxLCAyNDgsIDEyNywgMjM0LCAyNTAsIDEsIAorICAgIDIyMywgNDIsIDIzNCwgMjUwLCAxLCAyMjgsIDExNSwgMjM0LCAyNTAsIDEsIDIxNywgMTA2LCAyMzQsIDI1MCwgMSwgMjE2LCAKKyAgICAyMDksIDIzNCwgMjUwLCAxLCAyNDgsIDIyOSwgMjM0LCAyNTAsIDEsIDI0OCwgMzMsIDIzNCwgMjUwLCAxLCAxOTgsIDIzNCwgCisgICAgMjUwLCAxLCAxOTEsIDIzNCwgMjUwLCAxLCAyMjUsIDE1MCwgMjM0LCAyNTAsIDEsIDI1MiwgMTk5LCAyMzQsIDI1MCwgMSwgCisgICAgMjUyLCAyNiwgMjM0LCAyNTAsIDEsIDE4NiwgMjM0LCAyNTAsIDEsIDE5MiwgMjM0LCAyNTAsIDEsIDIwNSwgMjM0LCAyNTAsIAorICAgIDEsIDIzMywgMTQxLCAyMzQsIDI1MCwgMSwgMjE0LCAyNywgMjM0LCAyNTAsIDEsIDIyMCwgMTA0LCAyMzQsIDI1MCwgMSwgCisgICAgMjE4LCAyMjUsIDIzNCwgMjUwLCAxLCAyMDYsIDIzNCwgMjUwLCAxLCAxNjIsIDIzNCwgMjUwLCAyNSwgNSwgMjU1LCA4MiwgCisgICAgMjM0LCAyNTAsIDI1LCA1LCA3NCwgMjM0LCAyNTAsIDI1LCA1LCAyMzYsIDQwLCAyMzQsIDI1MCwgMjUsIDUsIDY5LCAyMzQsIAorICAgIDI1MCwgMjUsIDUsIDIxNCwgMTE4LCAyMzQsIDI1MCwgMjUsIDUsIDc2LCAyMzQsIDI1MCwgMjUsIDUsIDI1NCwgMjEwLCAKKyAgICAyMzQsIDI1MCwgMjUsIDUsIDc4LCAyMzQsIDI1MCwgMjUsIDUsIDI1MywgMjAwLCAyMzQsIDI1MCwgNSwgMjEzLCAxNTIsIAorICAgIDIzNCwgMjUwLCA1LCAyMjcsIDIwOSwgMjM0LCAyNTAsIDI1NSwgMzAsIDUwLCAyMzQsIDI1MCwgMjQ1LCAxMjksIDUwLCAKKyAgICAyMzQsIDI1MCwgNTQsIDUwLCAyMzQsIDI1MCwgMjIxLCAxNzUsIDc5LCAyMzQsIDI1MCwgNTIsIDIyMSwgMTc1LCA3OSwgCisgICAgMjM0LCAyNTAsIDI0OCwgMTg2LCAyMzQsIDI1MCwgNTIsIDI0OCwgMTg2LCAyMTksIDM4LCAyMTksIDQ2LCAxLCAyMjIsIDIwLCAKKyAgICAyMTksIDM4LCAyMTksIDQ2LCAxLCAyMTcsIDgxLCAyMTksIDM4LCAyMTksIDQ2LCAxLCAyNTIsIDE3NiwgMjE5LCAzOCwgCisgICAgMjE5LCA0NiwgMSwgMjUxLCAzMSwgMjE5LCAzOCwgMjE5LCA0NiwgMSwgMjQ4LCAyMTEsIDIxOSwgMzgsIDIxOSwgNDYsIDEsIAorICAgIDI0MywgMTI3LCAyMTksIDM4LCAyMTksIDQ2LCAxLCAyMzEsIDIxNSwgMjE5LCAzOCwgMjE5LCA0NiwgMSwgMjI5LCA3OSwgCisgICAgMjE5LCAzOCwgMjE5LCA0NiwgMSwgMjMzLCAxMTgsIDIxOSwgMzgsIDIxOSwgNDYsIDEsIDIyOSwgMjE4LCAyMTksIDM4LCAKKyAgICAyMTksIDQ2LCAxLCAyMTQsIDI0LCAyMTksIDM4LCAyMTksIDQ2LCAxLCAyMjYsIDc3LCAyMTksIDM4LCAyMTksIDQ2LCAxLCAKKyAgICAyMTEsIDg0LCAyMTksIDM4LCAyMTksIDQ2LCAxLCAyMjMsIDE3MSwgMjE5LCAzOCwgMjE5LCA0NiwgMSwgMjQyLCA0NCwgCisgICAgMjE5LCAzOCwgMjE5LCA0NiwgMSwgMjM0LCAyNTQsIDIxOSwgMzgsIDIxOSwgNDYsIDEsIDIzNSwgMTQyLCAyMTksIDM4LCAKKyAgICAyMTksIDQ2LCAxLCAyMjcsIDE2NiwgMjE5LCAzOCwgMjE5LCA0NiwgMSwgMjU0LCAyMTgsIDIxOSwgMzgsIDIxOSwgNDYsIDEsIAorICAgIDI0NSwgMjE1LCAyMTksIDM4LCAyMTksIDQ2LCAxLCAyMzYsIDQxLCAyMTksIDM4LCAyMTksIDQ2LCAxLCAyMTQsIDIwOCwgCisgICAgMjE5LCAzOCwgMjE5LCA0NiwgMSwgMjI2LCAyMjYsIDIxOSwgMzgsIDIxOSwgNDYsIDEsIDI0NSwgMjA1LCAyMTksIDM4LCAKKyAgICAyMTksIDQ2LCAxLCAyMzEsIDIyOCwgMjE5LCAzOCwgMjE5LCA0NiwgMjEsIDIxMCwgODYsIDIxOSwgMzgsIDIxOSwgNDYsIAorICAgIDIxLCAxMTEsIDIxOSwgMzgsIDIxOSwgNDYsIDIxLCAxMDUsIDIxOSwgMzgsIDIxOSwgNDYsIDIxLCAxNTgsIDIxOSwgMzgsIAorICAgIDIxOSwgNDYsIDIxLCAxNjEsIDIxOSwgMzgsIDIxOSwgNDYsIDIxLCAxOTAsIDIxOSwgMzgsIDIxOSwgNDYsIDIxLCAxOTUsIAorICAgIDIxOSwgMzgsIDIxOSwgNDYsIDIxLCAxOTksIDIxOSwgMzgsIDIxOSwgNDYsIDIxLCAxOTYsIDIxOSwgMzgsIDIxOSwgNDYsIAorICAgIDIxLCAyMDEsIDI1MCwgMTU5LCA1LCAyNTEsIDcsIDI1MCwgMTU5LCA1LCAyNTQsIDgzLCAyNTAsIDE1OSwgNSwgMjEzLCAKKyAgICAxNDcsIDI1MCwgMTU5LCAxLCAyNTUsIDgyLCAyNTAsIDE1OSwgMSwgNzQsIDI1MCwgMTU5LCAxLCA2OSwgMjUwLCAxNTksIDEsIAorICAgIDc2LCAyNTAsIDE1OSwgMSwgMjM1LCAxNiwgMjUwLCAxNTksIDEsIDIzNCwgMTM3LCAyNTAsIDE1OSwgMSwgMjQzLCAxMzksIAorICAgIDI1MCwgMTU5LCAxLCAyNDIsIDI1NSwgMjUwLCAxNTksIDEsIDIyOSwgODEsIDI1MCwgMTU5LCAxLCAyNTEsIDQwLCAyNTAsIAorICAgIDE1OSwgMSwgMjUwLCAxNjQsIDI1MCwgMTU5LCAxLCAyMzUsIDE0NiwgMjUwLCAxNTksIDEsIDIzNSwgMTE5LCAyNTAsIDE1OSwgCisgICAgMSwgMjI3LCAxNjgsIDI1MCwgMTU5LCAxLCAyMTUsIDE1NiwgMjUwLCAxNTksIDEsIDIxNSwgMTQ0LCAyNTAsIDE1OSwgMSwgCisgICAgMjQ4LCAxNDIsIDI1MCwgMTU5LCAxLCAyNDgsIDEyNiwgMjUwLCAxNTksIDEsIDIyOCwgMTE0LCAyNTAsIDE1OSwgMSwgMjE3LCAKKyAgICAxMDIsIDI1MCwgMTU5LCAxLCAyMTYsIDIwOCwgMjUwLCAxNTksIDEsIDI0OCwgMjI4LCAyNTAsIDE1OSwgMSwgMjQ4LCAzMiwgCisgICAgMjUwLCAxNTksIDEsIDIyOSwgMjMwLCAyNTAsIDE1OSwgMSwgMjI2LCA5MywgMjUwLCAxNTksIDEsIDIyNSwgMTQ5LCAyNTAsIAorICAgIDE1OSwgMSwgMjUyLCAxOTcsIDI1MCwgMTU5LCAxLCAyNTIsIDI1LCAyNTAsIDE1OSwgMSwgMjMxLCAyNDIsIDI1MCwgMTU5LCAKKyAgICAxLCAyMTAsIDE2NywgMjUwLCAxNTksIDEsIDIxMSwgMTAzLCAyNTAsIDE1OSwgMSwgMjIzLCAxODcsIDI1MCwgMTU5LCAxLCAKKyAgICAyMzMsIDE0MCwgMjUwLCAxNTksIDEsIDIxMiwgNjQsIDI1MCwgMTU5LCAxLCAyMjIsIDMzLCAyNTAsIDE1OSwgMSwgMjQyLCAKKyAgICA1MywgMjUwLCAxNTksIDI1LCA1LCA2MSwgMjUwLCAxNTksIDI1LCA1LCA3NCwgMjUwLCAxNTksIDI1LCA1LCAyMzYsIDQwLCAKKyAgICAyNTAsIDE1OSwgMjUsIDUsIDY5LCAyNTAsIDE1OSwgMjUsIDUsIDIxNCwgMTE4LCAyNTAsIDE1OSwgMjUsIDUsIDc2LCAyNTAsIAorICAgIDE1OSwgMjUsIDUsIDI1NCwgMjEwLCAyNTAsIDE1OSwgMjUsIDUsIDc4LCAyNTAsIDE1OSwgMjUsIDUsIDI1MywgMjAwLCAKKyAgICAyNTAsIDE1OSwgMjUsIDUsIDIyNiwgMjIzLCAyNTAsIDE1OSwgMTQ0LCA3OSwgMjUwLCAxNTksIDI1MywgMjAxLCA3OSwgCisgICAgMjUwLCAxNTksIDIxMywgMTUyLCAyNTAsIDE1OSwgMjMxLCAyNDAsIDI1MCwgMTU5LCAyMSwgMjEwLCA4NiwgMjUwLCAxNTksIAorICAgIDIxLCAxMTEsIDI1MCwgMTU5LCAyMSwgMTA1LCAyNTAsIDE1OSwgMjEsIDE1OCwgMjUwLCAxNTksIDIxLCAxNjEsIDI1MCwgCisgICAgMTU5LCAyMSwgMTkwLCAyNTAsIDE1OSwgMjEsIDE5NSwgMjUwLCAxNTksIDIxLCAxOTksIDI1MCwgMTU5LCAyMSwgMTk2LCAKKyAgICAyNTAsIDE1OSwgMjEsIDIwMSwgMjUwLCAxNTksIDIyMSwgMTc1LCA3OSwgMjUwLCAxNTksIDI0OCwgMTg2LCAyNTAsIDE1OSwgCisgICAgNTIsIDI0OCwgMTg2LCAyNTAsIDE1OSwgMjI0LCAxNiwgNzksIDE3NCwgNSwgMjUxLCA3LCAxNzQsIDUsIDI1NCwgODMsIAorICAgIDE3NCwgNSwgMjEzLCAxNDcsIDE3NCwgMSwgNjEsIDE3NCwgMSwgMjU1LCA4MiwgMTc0LCAxLCA3NCwgMTc0LCAxLCAyMzYsIAorICAgIDQwLCAxNzQsIDEsIDY5LCAxNzQsIDEsIDIxNCwgMTE4LCAxNzQsIDEsIDE0OSwgMTUzLCAxNzQsIDEsIDE0OSwgMjIyLCAKKyAgICAxODIsIDE3NCwgMSwgMTQ5LCAxNTYsIDE3NCwgMSwgMTQ5LCAyMzIsIDE5MSwgMTc0LCAxLCA3NiwgMTc0LCAxLCAyNTQsIAorICAgIDIxMCwgMTc0LCAxLCA3OCwgMTc0LCAxLCAyNTMsIDIwMCwgMTc0LCAxLCAxNzYsIDE3NCwgMSwgMjM0LCAxMzgsIDE3NCwgMSwgCisgICAgMjQzLCAxNDIsIDE3NCwgMSwgMjQzLCAwLCAxNzQsIDEsIDIyOSwgODIsIDE3NCwgMSwgMjUxLCA0MSwgMTc0LCAxLCAyNTAsIAorICAgIDE2NSwgMTc0LCAxLCAyMzUsIDE0NywgMTc0LCAxLCAyMzUsIDEyMCwgMTc0LCAxLCAyMjcsIDE2OSwgMTc0LCAxLCAyMTUsIAorICAgIDE1NywgMTc0LCAxLCAyMTUsIDE0NSwgMTc0LCAxLCAyNDgsIDE0MywgMTc0LCAxLCAyNDgsIDEyNywgMTc0LCAxLCAyMjgsIAorICAgIDExNSwgMTc0LCAxLCAyMTcsIDEwNiwgMTc0LCAxLCAyMTYsIDIwOSwgMTc0LCAxLCAyNDgsIDIyOSwgMTc0LCAxLCAyNDgsIAorICAgIDMzLCAxNzQsIDEsIDE5OCwgMTc0LCAxLCAxOTEsIDE3NCwgMSwgMjI1LCAxNTAsIDE3NCwgMSwgMjUyLCAxOTksIDE3NCwgMSwgCisgICAgMjUyLCAyNiwgMTc0LCAxLCAxODYsIDE3NCwgMSwgMTkyLCAxNzQsIDEsIDIwNSwgMTc0LCAxLCAyMzMsIDE0MSwgMTc0LCAxLCAKKyAgICAyMzIsIDE5MCwgMTc0LCAxLCAyMTQsIDI3LCAxNzQsIDEsIDIyMCwgMTA0LCAxNzQsIDEsIDIxOCwgMjI1LCAxNzQsIDEsIAorICAgIDIwNiwgMTc0LCAxLCAxNjIsIDE3NCwgMjUsIDUsIDI1NSwgODIsIDE3NCwgMjUsIDUsIDc0LCAxNzQsIDI1LCA1LCAyMzYsIAorICAgIDQwLCAxNzQsIDI1LCA1LCA2OSwgMTc0LCAyNSwgNSwgMjE0LCAxMTgsIDE3NCwgMjUsIDUsIDE0OSwgMTUzLCAxNzQsIDI1LCAKKyAgICA1LCAxNDksIDIyMiwgMTgyLCAxNzQsIDI1LCA1LCAxNDksIDE1NiwgMTc0LCAyNSwgNSwgMTQ5LCAyMzIsIDE5MSwgMTc0LCAKKyAgICAyNSwgNSwgNzYsIDE3NCwgMjUsIDUsIDI1NCwgMjEwLCAxNzQsIDI1LCA1LCA3OCwgMTc0LCAyNSwgNSwgMjUzLCAyMDAsIAorICAgIDE3NCwgNSwgMjEzLCAxNTIsIDE3NCwgNSwgMjUzLCAxODMsIDE3NCwgNSwgMjM1LCAxMDgsIDE3NCwgNSwgMjE0LCAxNjEsIAorICAgIDE3NCwgMjI2LCAyMDgsIDE3NCwgMjQ4LCAxODYsIDE3NCwgNTIsIDI0OCwgMTg2LCAxNzQsIDI1NSwgMzAsIDUwLCAxNzQsIAorICAgIDIyMCwgMTM5LCAxNzQsIDIxLCAyMTAsIDg2LCAxNzQsIDIxLCAxMTEsIDE3NCwgMjEsIDEwNSwgMTc0LCAyMSwgMTU4LCAKKyAgICAxNzQsIDIxLCAxNjEsIDE3NCwgMjEsIDE5MCwgMTc0LCAyMSwgMTk1LCAxNzQsIDIxLCAxOTksIDE3NCwgMjEsIDE5NiwgCisgICAgMTc0LCAyMSwgMjAxLCAyMTcsIDcwLCAxLCA2MSwgMjE3LCA3MCwgMSwgMjU1LCA4MiwgMjE3LCA3MCwgMSwgNzQsIDIxNywgCisgICAgNzAsIDEsIDIzNiwgNDAsIDIxNywgNzAsIDEsIDY5LCAyMTcsIDcwLCAxLCAyMTQsIDExOCwgMjE3LCA3MCwgMSwgNzYsIAorICAgIDIxNywgNzAsIDEsIDI1NCwgMjEwLCAyMTcsIDcwLCAxLCA3OCwgMjE3LCA3MCwgMSwgMjUzLCAyMDAsIDIxNywgNzAsIDEsIAorICAgIDE3NiwgMjE3LCA3MCwgMSwgMjM0LCAxMzgsIDIxNywgNzAsIDEsIDI0MywgMTQyLCAyMTcsIDcwLCAxLCAyNDMsIDAsIDIxNywgCisgICAgNzAsIDEsIDIyOSwgODIsIDIxNywgNzAsIDEsIDI1MSwgNDEsIDIxNywgNzAsIDEsIDI1MCwgMTY1LCAyMTcsIDcwLCAxLCAKKyAgICAyMzUsIDE0NywgMjE3LCA3MCwgMSwgMjM1LCAxMjAsIDIxNywgNzAsIDEsIDIyNywgMTY5LCAyMTcsIDcwLCAxLCAyMTUsIAorICAgIDE1NywgMjE3LCA3MCwgMSwgMjE1LCAxNDUsIDIxNywgNzAsIDEsIDI0OCwgMTQzLCAyMTcsIDcwLCAxLCAyNDgsIDEyNywgCisgICAgMjE3LCA3MCwgMSwgMjI4LCAxMTUsIDIxNywgNzAsIDEsIDIxNywgMTA2LCAyMTcsIDcwLCAxLCAyMTYsIDIwOSwgMjE3LCAKKyAgICA3MCwgMSwgMjQ4LCAyMjksIDIxNywgNzAsIDEsIDI0OCwgMzMsIDIxNywgNzAsIDEsIDE5OCwgMjE3LCA3MCwgMSwgMTkxLCAKKyAgICAyMTcsIDcwLCAxLCAyMjUsIDE1MCwgMjE3LCA3MCwgMSwgMjUyLCAxOTksIDIxNywgNzAsIDEsIDI1MiwgMjYsIDIxNywgNzAsIAorICAgIDEsIDE4NiwgMjE3LCA3MCwgMSwgMTkyLCAyMTcsIDcwLCAxLCAyMDUsIDIxNywgNzAsIDEsIDIzMywgMTQxLCAyMTcsIDcwLCAKKyAgICAxLCAyMTQsIDI3LCAyMTcsIDcwLCAxLCAyMjAsIDEwNCwgMjE3LCA3MCwgMSwgMjA2LCAyMTcsIDcwLCAxLCAxNjIsIDIxNywgCisgICAgNzAsIDEsIDIyMiwgMTgxLCAyMTcsIDcwLCA1LCAyNTQsIDgzLCAyMTcsIDcwLCA1LCAyMTMsIDE0NywgMjE3LCA3MCwgMjUsIAorICAgIDUsIDI1NSwgODIsIDIxNywgNzAsIDI1LCA1LCA3NCwgMjE3LCA3MCwgMjUsIDUsIDIzNiwgNDAsIDIxNywgNzAsIDI1LCA1LCAKKyAgICA2OSwgMjE3LCA3MCwgMjUsIDUsIDIxNCwgMTE4LCAyMTcsIDcwLCAyNSwgNSwgNzYsIDIxNywgNzAsIDI1LCA1LCAyNTQsIAorICAgIDIxMCwgMjE3LCA3MCwgMjUsIDUsIDc4LCAyMTcsIDcwLCAyNSwgNSwgMjUzLCAyMDAsIDIxNywgNzAsIDUsIDIxMywgMTUyLCAKKyAgICAyMTcsIDcwLCA1LCAyMjcsIDIwOSwgMjE3LCA3MCwgMjEsIDIxMCwgODYsIDIxNywgNzAsIDIxLCAxMTEsIDIxNywgNzAsIAorICAgIDIxLCAxMDUsIDIxNywgNzAsIDIxLCAxNTgsIDIxNywgNzAsIDIxLCAxNjEsIDIxNywgNzAsIDIxLCAxOTAsIDIxNywgNzAsIAorICAgIDIxLCAxOTUsIDIxNywgNzAsIDIxLCAxOTksIDIxNywgNzAsIDIxLCAxOTYsIDIxNywgNzAsIDIxLCAyMDEsIDE1LCA1LCA2MSwgCisgICAgMTUsIDUsIDExNiwgMzAsIDYxLCAxNSwgNSwgMTE2LCAzMCwgMjUyLCAxODQsIDE1LCA1LCAxMTYsIDMwLCAyNDMsIDExMiwgCisgICAgMjE2LCAyNDAsIDE1LCA1LCAxMTYsIDMwLCAxNjIsIDE1LCA1LCAxMTYsIDMwLCAyMzYsIDQyLCAxNSwgNSwgMTE2LCAzMCwgCisgICAgMjMzLCAxMjIsIDI0MiwgMTAxLCAxNSwgNSwgMTE2LCAzMCwgMjMwLCA2NiwgMTUsIDUsIDExNiwgMzAsIDIyMiwgMjMsIDE1LCAKKyAgICA1LCAyNTUsIDg0LCAxNSwgNSwgMjU1LCAzNCwgMTUsIDUsIDI1NSwgMzUsIDMwLCAyNTMsIDIzNywgMTUsIDUsIDI1NSwgMzUsIAorICAgIDMwLCAyNDYsIDc1LCAyNDIsIDEwMSwgMTUsIDUsIDI1NSwgMzUsIDMwLCAyNDMsIDEyNSwgMTUsIDUsIDI1NSwgMzUsIDMwLCAKKyAgICAyNDMsIDExMiwgMjE2LCAyNDAsIDE1LCA1LCAyNTUsIDM1LCAzMCwgMTYyLCAxNSwgNSwgMjU1LCAzNSwgMzAsIDIzNiwgNDMsIAorICAgIDI0MiwgMTAxLCAxNSwgNSwgMjU1LCAzNSwgMzAsIDIzNiwgMTYsIDE1LCA1LCAyNTUsIDM1LCAzMCwgMjMzLCAxMjMsIDE1LCAKKyAgICA1LCAyNTUsIDM1LCAzMCwgMjIwLCA1MCwgMTUsIDUsIDI1NSwgMzUsIDMwLCAxMDQsIDk2LCAxMDQsIDk2LCA2OSwgMTUsIDUsIAorICAgIDI1NSwgMzUsIDI0MiwgMTAxLCAxNSwgNSwgMjU1LCAzMiwgMTUsIDUsIDI1NSwgMzMsIDMwLCAyNTIsIDE2OCwgMTUsIDUsIAorICAgIDI1NSwgMzMsIDMwLCAyNDMsIDExMiwgMjE2LCAyNDAsIDE1LCA1LCAyNTUsIDMzLCAzMCwgMjMxLCA5NywgOTYsIDI0NSwgCisgICAgMTU4LCAxNSwgNSwgMjU1LCAzMywgMzAsIDIyMCwgMTAyLCAxNSwgNSwgMjU1LCAzMywgMzAsIDIxNywgNzMsIDE1LCA1LCAKKyAgICAyNTUsIDgsIDE1LCA1LCAyNTQsIDE5NSwgMTUsIDUsIDI1NCwgMTk2LCAzMCwgMjQ1LCA5NSwgMTUsIDUsIDI1NCwgMTk2LCAKKyAgICAzMCwgMjIwLCAxMiwgOTYsIDI0MiwgMTk3LCAxNSwgNSwgMjU0LCAxODcsIDE1LCA1LCAyNTQsIDE4OCwgMzAsIDI1NCwgCisgICAgMTg3LCAxNSwgNSwgMjU0LCAxODgsIDMwLCAyNDcsIDIyNCwgMTUsIDUsIDI1NCwgMTg4LCAzMCwgMjQyLCAxOTcsIDE1LCA1LCAKKyAgICAyNTQsIDE4OCwgMzAsIDE2MiwgMTUsIDUsIDI1NCwgMTg4LCAzMCwgMjM1LCA1LCAxNSwgNSwgMjU0LCAxODgsIDMwLCAyMzQsIAorICAgIDk4LCAxNSwgNSwgMjU0LCAxODgsIDMwLCAyMjAsIDY1LCAxNSwgNSwgMjU0LCAxODgsIDMwLCAyMTQsIDEyNiwgMTUsIDUsIAorICAgIDI1NCwgMTg0LCAxNSwgNSwgMjU0LCAxNzcsIDE1LCA1LCAyNTQsIDE0MCwgMTUsIDUsIDI1NCwgMTQxLCAzMCwgMjIwLCA2NSwgCisgICAgMTUsIDUsIDI1NCwgMTMxLCAxNSwgNSwgMjU0LCAxMzIsIDExNSwgMjU0LCAxMzEsIDE1LCA1LCAyNTQsIDEzMiwgMTM0LCAKKyAgICAyMTYsIDg2LCAxNSwgNSwgMjU0LCAxMzIsIDk2LCAyMjksIDIyMiwgMjI2LCAxNjgsIDI1NCwgMTMyLCA5NiwgMjI5LCAyMjEsIAorICAgIDE1LCA1LCAyNTQsIDEzMiwgOTYsIDIyOSwgMjIyLCAyMTgsIDIzNSwgMTUsIDUsIDI1NCwgMTAyLCAxNSwgNSwgMjU0LCA3NSwgCisgICAgMTUsIDUsIDI1NCwgNDMsIDE1LCA1LCAyNTQsIDQ0LCAzMCwgMjMzLCAyMDIsIDE1LCA1LCAyNTQsIDE2LCAxNSwgNSwgMjUzLCAKKyAgICAyNDQsIDE1LCA1LCAyNTMsIDIzOSwgMTUsIDUsIDI1MywgMjQwLCAyMTAsIDQwLCAyMTYsIDI0MCwgMTUsIDUsIDI1MywgCisgICAgMjQwLCAyMzUsIDksIDIxNiwgMjQwLCAxNSwgNSwgMjUzLCAyNDAsIDExNSwgMjUzLCAyNDAsIDIxNSwgMTE1LCAxMTUsIAorICAgIDIxNSwgMTE1LCAyMTUsIDExNSwgMTE1LCAyMTUsIDExNSwgMjI2LCAyNSwgMTUsIDUsIDI1MywgMjQwLCAxMTUsIDI1MywgCisgICAgMjQwLCAxMTUsIDI1MywgMjM5LCAxNSwgNSwgMjUzLCAyNDAsIDExNSwgMjUzLCAyNDAsIDExNSwgMjUzLCAyNDAsIDI0OSwgCisgICAgMTMzLCAyNTMsIDI0MCwgMTE1LCAyNTMsIDI0MCwgMTE1LCAyNTMsIDIzOSwgMTUsIDUsIDI1MywgMjM3LCAxNSwgNSwgMjUzLCAKKyAgICAyMzQsIDE1LCA1LCAyNTIsIDE5OSwgMTUsIDUsIDI1MiwgMTg0LCAxNSwgNSwgMjUyLCAxNzksIDE1LCA1LCAyNTIsIDE3NSwgCisgICAgMTUsIDUsIDI1MiwgMTY5LCAxNSwgNSwgMjUyLCAxNzAsIDExNSwgMjUyLCAxNjksIDE1LCA1LCAyNTIsIDE2OCwgMTUsIDUsIAorICAgIDEzMCwgMTUsIDUsIDI1MiwgMTQ4LCAxNSwgNSwgMjUyLCAxNCwgMTUsIDUsIDI1MiwgMTUsIDMwLCA2MSwgMTUsIDUsIDI1MiwgCisgICAgMTUsIDMwLCAyNDMsIDEwMywgMTUsIDUsIDI1MiwgMTUsIDMwLCAyMzYsIDQzLCAyNDIsIDEwMSwgMTUsIDUsIDI1MSwgMTMzLCAKKyAgICAxNSwgNSwgMjUxLCAxMzQsIDExNSwgMjUxLCAxMzQsIDI1NSwgMzQsIDE1LCA1LCAyNTEsIDEzNCwgMTE1LCAyNTEsIDEzNCwgCisgICAgMjE0LCAxOTAsIDE1LCA1LCAyNTEsIDEzNCwgMjQ5LCAxMzMsIDI1MSwgMTMzLCAxNSwgNSwgMjUxLCAxMTcsIDE1LCA1LCAKKyAgICAyNTEsIDExOCwgMTE1LCAyNTEsIDExNywgMTUsIDUsIDI1MSwgMTA2LCAxNSwgNSwgMjUxLCAxMDUsIDE1LCA1LCAyNDgsIAorICAgIDIyOSwgMTUsIDUsIDI0OCwgMjIwLCAxNSwgNSwgMjQ4LCAyMjEsIDIzNCwgNzIsIDMwLCAxMTYsIDk2LCAyMzEsIDE1MiwgCisgICAgMTUsIDUsIDI0OCwgMjIxLCAyMzQsIDcyLCAzMCwgMjU0LCAxNDAsIDE1LCA1LCAyNDgsIDIyMSwgMjM0LCA3MiwgMzAsIAorICAgIDI1MiwgMTY4LCAxNSwgNSwgMjQ4LCAyMjEsIDIzNCwgNzIsIDMwLCAyNTIsIDE0LCAxNSwgNSwgMjQ4LCAyMjEsIDIzNCwgCisgICAgNzIsIDMwLCAyNDMsIDE0MiwgMTUsIDUsIDI0OCwgMjIxLCAyMzQsIDcyLCAzMCwgMjQzLCAxNDMsIDk2LCAyMzEsIDE1MiwgCisgICAgMTUsIDUsIDI0OCwgMjIxLCAyMzQsIDcyLCAzMCwgMjQyLCAyMjEsIDE1LCA1LCAyNDgsIDIyMSwgMjM0LCA3MiwgMzAsIAorICAgIDI0MiwgMjA0LCAxNSwgNSwgMjQ4LCAyMjEsIDIzNCwgNzIsIDMwLCAyNDIsIDExMCwgMTUsIDUsIDI0OCwgMjIxLCAyMzQsIAorICAgIDcyLCAzMCwgMTYyLCAxNSwgNSwgMjQ4LCAyMjEsIDIzNCwgNzIsIDMwLCAyMzUsIDE4NiwgMTUsIDUsIDI0OCwgMjIxLCAKKyAgICAyMzQsIDcyLCAzMCwgMjM1LCAxODcsIDk2LCAyMzIsIDEwMywgMTUsIDUsIDI0OCwgMjIxLCAyMzQsIDcyLCAzMCwgMjM0LCAKKyAgICAyNDgsIDE1LCA1LCAyNDgsIDIyMSwgMjM0LCA3MiwgMzAsIDIzMywgMTQxLCAxNSwgNSwgMjQ4LCAyMjEsIDIzNCwgNzIsIAorICAgIDMwLCAyMzIsIDEwMywgMTUsIDUsIDI0OCwgMjIxLCAyMzQsIDcyLCAzMCwgMjMyLCAxMDQsIDk2LCAyMzEsIDE1MSwgMTUsIAorICAgIDUsIDI0OCwgMjIxLCAyMzQsIDcyLCAzMCwgMjMyLCA4OSwgMTUsIDUsIDI0OCwgMjIxLCAyMzQsIDcyLCAzMCwgMjI5LCAKKyAgICAxMTIsIDE1LCA1LCAyNDgsIDIyMSwgMjM0LCA3MiwgMzAsIDIyNiwgMjYsIDk2LCAyMjYsIDI1LCAxNSwgNSwgMjQ4LCAyMjEsIAorICAgIDIzNCwgNzIsIDMwLCAyMTksIDE5MywgMTUsIDUsIDI0OCwgMjIxLCAyMzQsIDcyLCAzMCwgMjE3LCA3MywgMTUsIDUsIDI0OCwgCisgICAgMjIxLCAyMzQsIDcyLCAzMCwgMjE0LCAyMzEsIDk2LCAyNDIsIDIwNCwgMTUsIDUsIDI0OCwgMjIxLCAyMzQsIDcyLCAzMCwgCisgICAgMjE0LCAxMjYsIDE1LCA1LCAyNDgsIDE5NSwgMTUsIDUsIDI0OCwgMTc0LCAxNSwgNSwgMjQ4LCAxNzMsIDE1LCA1LCAyNDgsIAorICAgIDE3MiwgMTUsIDUsIDI0OCwgMTEsIDE1LCA1LCAyNDcsIDI1MCwgMTUsIDUsIDI0NywgMjI1LCAxNSwgNSwgMjQ3LCAyMjYsIAorICAgIDMwLCAyMjAsIDY1LCAxNSwgNSwgMjQ3LCAyMjQsIDE1LCA1LCAyNDcsIDIxNCwgMTUsIDUsIDI0NywgMjE1LCAyMzQsIDIxNCwgCisgICAgMTA0LCAyNDIsIDEwMiwgMjQ3LCAxOTUsIDE1LCA1LCAyNDcsIDE5NSwgMTUsIDUsIDI0NiwgODYsIDE1LCA1LCAyNDYsIDg3LCAKKyAgICAxMTUsIDI0NiwgODYsIDE1LCA1LCAyNDYsIDg3LCAyNDIsIDEwMSwgMTUsIDUsIDI0NiwgODcsIDIyMCwgNDcsIDE1LCA1LCAKKyAgICAyNDYsIDg0LCAxNSwgNSwgMjQ2LCA4NSwgMzAsIDI0NSwgODAsIDE1LCA1LCAyNDYsIDgzLCAxNSwgNSwgMjQ2LCA4MiwgMTUsIAorICAgIDUsIDI0NiwgODEsIDE1LCA1LCAyNDYsIDgwLCAxNSwgNSwgMjQ2LCA3NiwgMTUsIDUsIDI0NiwgNzQsIDE1LCA1LCAyNDYsIAorICAgIDc1LCAyNDIsIDEwMSwgMTUsIDUsIDI0NiwgNzUsIDI0MiwgMTAyLCAyNDIsIDEwMSwgMTUsIDUsIDI0NiwgNzMsIDE1LCA1LCAKKyAgICAyNDYsIDY2LCAxNSwgNSwgNzYsIDE1LCA1LCAxNjAsIDMwLCAyMjYsIDI1LCAxNSwgNSwgMTYwLCAxMTUsIDE2MCwgMjI3LCAKKyAgICAxOTksIDExNSwgMjI3LCAxOTgsIDE1LCA1LCAyNDUsIDI0MiwgMTUsIDUsIDI0NSwgMjQzLCAzMCwgMTE2LCA5NiwgMjQyLCAKKyAgICA1NiwgOTYsIDI0OCwgMjI5LCAxNSwgNSwgMjQ1LCAyNDMsIDMwLCAyNDMsIDEwMywgMTUsIDUsIDI0NSwgMjQzLCAzMCwgCisgICAgMjMwLCAyMzUsIDE1LCA1LCAyNDUsIDI0MywgMzAsIDIyMiwgMTAsIDE1LCA1LCAyNDUsIDI0MywgMzAsIDIyMCwgNjUsIDE1LCAKKyAgICA1LCAyNDUsIDI0MywgMzAsIDY5LCAxNSwgNSwgMjQ1LCAyMTksIDE1LCA1LCAyNDUsIDIwOCwgMTUsIDUsIDI0NSwgMTgyLCAKKyAgICAxNSwgNSwgMjQ1LCAxNTgsIDE1LCA1LCAyNDUsIDE1OSwgMzAsIDI0MywgMTExLCAxNSwgNSwgMjQ1LCAxNTksIDMwLCAyNDMsIAorICAgIDExMiwgMjE2LCAyNDAsIDE1LCA1LCAyNDUsIDE1OSwgMzAsIDIzMSwgOTYsIDE1LCA1LCAyNDUsIDE1OSwgMjQ5LCAxMzMsIAorICAgIDI0NSwgMTU4LCAxNSwgNSwgMjQ1LCAxNTksIDIyNiwgMTY4LCAyNDUsIDE1OCwgMTUsIDUsIDI0NSwgMTU5LCAyMTgsIDIzNSwgCisgICAgMTUsIDUsIDI0NSwgOTcsIDE1LCA1LCAyNDUsIDk1LCAxNSwgNSwgMjQ1LCA4MCwgMTUsIDUsIDI0NSwgMTgsIDE1LCA1LCAKKyAgICAyNDUsIDE5LCAzMCwgNjEsIDE1LCA1LCAyNDUsIDE5LCAzMCwgMTE2LCA5NiwgMjMzLCAxMTAsIDE1LCA1LCAyNDUsIDE5LCAKKyAgICAzMCwgMTE2LCA5NiwgMjMzLCAxMTEsIDMwLCAyMzMsIDExMCwgMTUsIDUsIDI0NSwgMTksIDMwLCAyNTQsIDEzMSwgMTUsIDUsIAorICAgIDI0NSwgMTksIDMwLCAyNTIsIDE4NCwgMTUsIDUsIDI0NSwgMTksIDMwLCAyNDYsIDc1LCAyNDIsIDEwMSwgMTUsIDUsIDI0NSwgCisgICAgMTksIDMwLCAyNDYsIDc1LCAyNDIsIDEwMiwgMjQyLCAxMDEsIDE1LCA1LCAyNDUsIDE5LCAzMCwgMTYyLCAxNSwgNSwgMjQ1LCAKKyAgICAxOSwgMzAsIDI0MiwgNTYsIDI0MiwgMTAxLCAxNSwgNSwgMjQ1LCAxOSwgMzAsIDIzNiwgNDMsIDI0MiwgMTAxLCAxNSwgNSwgCisgICAgMjQ1LCAxOSwgMzAsIDIzNCwgMjEzLCAxNSwgNSwgMjQ1LCAxOSwgMzAsIDIzNCwgMjE0LCAyMTgsIDIzNSwgMTUsIDUsIAorICAgIDI0NSwgMTksIDMwLCAyMzMsIDIyMSwgMTUsIDUsIDI0NSwgMTksIDMwLCAyMzMsIDE0MSwgMTUsIDUsIDI0NSwgMTksIDMwLCAKKyAgICAyMzMsIDExMSwgMzAsIDIzMywgMTEwLCAxNSwgNSwgMjQ1LCAxOSwgMzAsIDIzMiwgMjQ3LCAxNSwgNSwgMjQ1LCAxOSwgMzAsIAorICAgIDIzMiwgMTAzLCAxNSwgNSwgMjQ1LCAxOSwgMzAsIDIxNCwgMjMwLCAxNSwgNSwgMjQ1LCAxOSwgMzAsIDIxNCwgMjE5LCAxNSwgCisgICAgNSwgMjQzLCAxNDIsIDE1LCA1LCAyNDMsIDE0MywgMjQyLCAxMDEsIDE1LCA1LCAyNDMsIDE0MCwgMTUsIDUsIDI0MywgMTQxLCAKKyAgICAzMCwgMTE2LCA5NiwgMjQ4LCAyMzAsIDk2LCAxNjIsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDExNiwgOTYsIDE2MiwgMTUsIDUsIAorICAgIDI0MywgMTQxLCAzMCwgMTE2LCA5NiwgMjM2LCA0MiwgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjU1LCAzMywgMjE2LCAyNDEsIAorICAgIDk2LCAyMTcsIDk0LCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyNTQsIDEzMSwgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjUzLCAKKyAgICAyMzksIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDI1MywgMjM4LCA5NiwgMjQzLCAxMjUsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIAorICAgIDI1MiwgMTg0LCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyNTIsIDE0OSwgOTYsIDIwNSwgMTUsIDUsIDI0MywgMTQxLCAzMCwgCisgICAgMjUxLCAxMDYsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDI1MSwgMTA3LCA5NiwgMjA1LCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAKKyAgICAyNDgsIDIyOSwgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjQ4LCAxMSwgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjQ3LCAyMjYsIAorICAgIDMwLCAyMjAsIDY1LCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyNDYsIDg0LCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyNDUsIDE4MiwgCisgICAgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjQ1LCAxODMsIDk2LCAyMzMsIDE0MSwgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjQ1LCAKKyAgICAxNTgsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDI0NSwgMTU5LCAzMCwgMjQzLCAxMTIsIDIxNiwgMjQwLCAxNSwgNSwgMjQzLCAKKyAgICAxNDEsIDMwLCAyNDMsIDExMiwgMjE2LCAyNDAsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDI0MywgMTAzLCAxNSwgNSwgMjQzLCAKKyAgICAxNDEsIDMwLCAyNDIsIDIyMSwgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjQyLCAyMTksIDE1LCA1LCAyNDMsIDE0MSwgMzAsIAorICAgIDI0MiwgMjIwLCA5NiwgNjEsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDI0MiwgMjA1LCA5NiwgMjE4LCA4NCwgMTUsIDUsIDI0MywgCisgICAgMTQxLCAzMCwgMjQyLCA1NiwgOTYsIDIzMiwgMTA0LCA5NiwgMjQ1LCA4MCwgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjQyLCAKKyAgICAzNywgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjQyLCAzOCwgOTYsIDIzMywgMTQxLCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyNDEsIAorICAgIDE4OCwgOTYsIDIzMiwgMjQ3LCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyNDAsIDIyNSwgMTUsIDUsIDI0MywgMTQxLCAzMCwgCisgICAgMjM2LCA0MywgMjQyLCAxMDEsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDIzNSwgMTczLCA5NiwgMjQwLCAyMzAsIDk2LCAyNTMsIAorICAgIDIzOSwgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjM0LCAyNDgsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDIzNCwgMjEzLCAxNSwgNSwgCisgICAgMjQzLCAxNDEsIDMwLCAyMzQsIDk1LCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyMzQsIDk2LCA5NiwgMjMzLCAxMTAsIDE1LCA1LCAKKyAgICAyNDMsIDE0MSwgMzAsIDIzMywgMjIyLCA5NiwgMjU0LCAxMzEsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDIzMywgMTQxLCAxNSwgCisgICAgNSwgMjQzLCAxNDEsIDMwLCAyMzEsIDk3LCA5NiwgMjQ1LCAxNTgsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDIzMCwgMjM1LCAKKyAgICAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyMjcsIDE5OCwgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjI3LCAxOTksIDExNSwgMjI3LCAKKyAgICAxOTgsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDE5MSwgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjIyLCAxMCwgMTUsIDUsIDI0MywgCisgICAgMTQxLCAzMCwgMjIxLCAyMzMsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDIyMCwgNjUsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIAorICAgIDIyMCwgNjYsIDk2LCAyMTUsIDk5LCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyMjAsIDMyLCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAKKyAgICAyMTgsIDQ0LCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyMTcsIDczLCAxNSwgNSwgMjQzLCAxNDEsIDMwLCA2OSwgMTUsIDUsIAorICAgIDI0MywgMTQxLCAzMCwgMjE0LCAyMTksIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDIxNCwgMjIwLCA5NiwgMjQ2LCA4NiwgMTUsIAorICAgIDUsIDI0MywgMTQxLCAxMTUsIDI0MywgMTQwLCAxNSwgNSwgMjQzLCAxMzUsIDE1LCA1LCAyNDMsIDEzNiwgMjQ5LCAxMzMsIAorICAgIDI0MywgMTM1LCAxNSwgNSwgMjQzLCAxMzMsIDE1LCA1LCAyNDMsIDEzNCwgMTE1LCAyNDMsIDEzNCwgMjQzLCAxMDQsIDExNSwgCisgICAgMjQzLCAxMDMsIDE1LCA1LCAyNDMsIDEyNSwgMTUsIDUsIDI0MywgMTI2LCAyNDMsIDEzNCwgMTE1LCAyNDMsIDEzNCwgMjQzLCAKKyAgICAxMDQsIDExNSwgMjQzLCAxMDMsIDE1LCA1LCAyNDMsIDEyNCwgMTUsIDUsIDI0MywgMTIyLCAxNSwgNSwgMjQzLCAxMTMsIAorICAgIDE1LCA1LCAyNDMsIDExMSwgMTUsIDUsIDI0MywgMTEyLCAyMTYsIDI0MCwgMTUsIDUsIDI0MywgMTEyLCAxMTUsIDI0MywgCisgICAgMTExLCAxNSwgNSwgMjQzLCAxMTIsIDI0OSwgMTMzLCAyNDMsIDExMSwgMTUsIDUsIDI0MywgMTAzLCAxNSwgNSwgMjQzLCAKKyAgICAxMDIsIDE1LCA1LCAyNDMsIDk3LCAxNSwgNSwgMjQzLCA0MywgMTUsIDUsIDI0MywgNDQsIDMwLCAyMzMsIDIwMiwgMTUsIDUsIAorICAgIDI0MiwgMjIxLCAxNSwgNSwgMjQyLCAyMjIsIDMwLCA3NiwgMTUsIDUsIDI0MiwgMjIyLCAzMCwgNjksIDE1LCA1LCAyNDIsIAorICAgIDIyMiwgMjQ5LCAxMzMsIDI0MiwgMjIxLCAxNSwgNSwgMjQyLCAyMTksIDE1LCA1LCAyNDIsIDIyMCwgMTE1LCAyNDIsIDIxOSwgCisgICAgMTUsIDUsIDI0MiwgMjIwLCAyNDksIDEzMywgMjQyLCAyMTksIDE1LCA1LCAyNDIsIDIxNiwgMTUsIDUsIDI0MiwgMjA0LCAKKyAgICAxNSwgNSwgMjQyLCAyMDUsIDI0MiwgMTAxLCAxNSwgNSwgMjQyLCAyMDIsIDE1LCA1LCAyNDIsIDIwMywgMzAsIDExNiwgOTYsIAorICAgIDIzNiwgNDIsIDE1LCA1LCAyNDIsIDIwMywgMzAsIDI0MywgMTEyLCAyMTYsIDI0MCwgMTUsIDUsIDI0MiwgMjAzLCAzMCwgCisgICAgMjM2LCA0MiwgMTUsIDUsIDI0MiwgMjAzLCAzMCwgMjMyLCAxMDQsIDk2LCAyMzYsIDQyLCAxNSwgNSwgMjQyLCAyMDMsIDMwLCAKKyAgICAxOTEsIDE1LCA1LCAyNDIsIDE5OSwgMTUsIDUsIDI0MiwgMTk3LCAxNSwgNSwgMjQyLCAxOTgsIDI0OSwgMTMzLCAyNDIsIAorICAgIDE5NywgMTUsIDUsIDI0MiwgMTk4LCAzMCwgMjUyLCAxODQsIDE1LCA1LCAyNDIsIDE5OCwgMzAsIDIxNywgNzMsIDE1LCA1LCAKKyAgICAyNDIsIDE5OCwgMjE2LCAyNDAsIDE1LCA1LCAyNDIsIDEyMCwgMTUsIDUsIDI0MiwgMTIxLCAyNDksIDEzMywgMjQyLCAxMjAsIAorICAgIDE1LCA1LCAyNDIsIDExOCwgMTUsIDUsIDI0MiwgMTE5LCAzMCwgMjM0LCAyNDgsIDE1LCA1LCAyNDIsIDExOSwgMzAsIDIzNCwgCisgICAgMjQ5LCAzMCwgMjM2LCA0MywgMjQyLCAxMDEsIDE1LCA1LCAyNDIsIDExOSwgMzAsIDIyNywgMTk4LCAxNSwgNSwgMjQyLCAKKyAgICAxMTksIDMwLCAyMjIsIDExLCA5NiwgMjE1LCAxMTQsIDE1LCA1LCAyNDIsIDExOSwgMjQyLCAxMDEsIDE1LCA1LCAyNDIsIAorICAgIDExMCwgMTUsIDUsIDI0MiwgMTExLCAzMCwgMTE2LCA5NiwgMjMzLCAyMDIsIDE1LCA1LCAyNDIsIDExMSwgMzAsIDIzMywgCisgICAgMjAyLCAxNSwgNSwgMjQyLCAxMTEsIDExNSwgMjQyLCAxMTEsIDIzMiwgOTYsIDE1LCA1LCAyNDIsIDEwNSwgMTUsIDUsIAorICAgIDI0MiwgMTAzLCAxNSwgNSwgMjQyLCAxMDQsIDMwLCAyMjAsIDY1LCAxNSwgNSwgMjQyLCA5NSwgMTUsIDUsIDI0MiwgOTQsIAorICAgIDE1LCA1LCAyNDIsIDkxLCAxNSwgNSwgMjQyLCA5MCwgMTUsIDUsIDE2MiwgMTUsIDUsIDI0MiwgNTYsIDIxNiwgMjQwLCAxNSwgCisgICAgNSwgMjQyLCA1NiwgMjQyLCAxMDEsIDE1LCA1LCAyNDIsIDM3LCAxNSwgNSwgMjQxLCAxODcsIDE1LCA1LCAyNDEsIDE4OCwgCisgICAgMzAsIDI1MywgMjM5LCAxNSwgNSwgMjQxLCAxODgsIDMwLCAyNTMsIDIzNywgMTUsIDUsIDI0MSwgMTg4LCAzMCwgMjUyLCAKKyAgICAxODQsIDE1LCA1LCAyNDEsIDE4OCwgMzAsIDI0NywgMTk1LCAxNSwgNSwgMjQxLCAxODgsIDMwLCAyNDMsIDEzMywgMTUsIDUsIAorICAgIDI0MSwgMTg4LCAzMCwgMjM0LCA4NywgMTUsIDUsIDI0MSwgMTg4LCAzMCwgMjI3LCAxOTgsIDE1LCA1LCAyNDEsIDE4OCwgCisgICAgMzAsIDIyMCwgNjUsIDE1LCA1LCAyNDEsIDE4OCwgMzAsIDY5LCAxNSwgNSwgMjQwLCAyMjksIDE1LCA1LCAyNDAsIDIyNSwgCisgICAgMTUsIDUsIDI0MCwgMjI2LCAzMCwgMjU0LCAxMzEsIDE1LCA1LCAyNDAsIDIyNiwgMzAsIDI0MiwgMzcsIDE1LCA1LCAyNDAsIAorICAgIDIyNiwgMzAsIDIzNCwgMjEzLCAxNSwgNSwgMjQwLCAyMjYsIDMwLCAyMzIsIDIwMywgMTUsIDUsIDI0MCwgMjI2LCAzMCwgCisgICAgMjE0LCAyMTksIDE1LCA1LCAyNDAsIDIyMiwgMTUsIDUsIDc0LCAxNSwgNSwgMjQwLCAxNjEsIDYxLCAxNSwgNSwgMjQwLCAKKyAgICAxMjIsIDE1LCA1LCAyMzYsIDcwLCAxNSwgNSwgMjM2LCA3MSwgMTE1LCAyMzYsIDcxLCAyNTEsIDEwNiwgMTUsIDUsIDIzNiwgCisgICAgNzEsIDExNSwgMjM2LCA3MSwgMjE4LCAyMzUsIDE1LCA1LCAyMzYsIDQ1LCAxNSwgNSwgMjM2LCA0MiwgMTUsIDUsIDIzNiwgCisgICAgNDMsIDI0NywgMjUwLCAxNSwgNSwgMjM2LCA0MywgMjIzLCAzOCwgMTUsIDUsIDIzNiwgNDMsIDExNSwgMjM2LCA0MywgMjIwLCAKKyAgICAxNiwgMTE1LCAyMjAsIDE2LCAyMTQsIDIyMCwgMTE1LCAyMTQsIDIxOSwgMTUsIDUsIDIzNiwgNDMsIDI0MiwgMTAxLCAxNSwgCisgICAgNSwgMjM2LCAzNCwgMTUsIDUsIDIzNiwgMzUsIDMwLCAyNDMsIDExMiwgMjE2LCAyNDAsIDE1LCA1LCAyMzYsIDMzLCAxNSwgCisgICAgNSwgMjM2LCAyMywgMTUsIDUsIDIzNiwgMjQsIDMwLCAyMTcsIDczLCAxNSwgNSwgMjM2LCAyNCwgMjQ5LCAxMzMsIDIzNiwgCisgICAgMjMsIDE1LCA1LCAyMzYsIDI0LCAyMjYsIDE2OCwgMjM2LCAyMywgMTUsIDUsIDIzNiwgMjQsIDIxOCwgMjM1LCAxNSwgNSwgCisgICAgMjM2LCAxNiwgMTUsIDUsIDIzNiwgNiwgMTUsIDUsIDIzNSwgMTg2LCAxNSwgNSwgMjM1LCAxNzIsIDE1LCA1LCAxNzYsIDE1LCAKKyAgICA1LCAyMzUsIDE5LCAzMCwgNjEsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjU1LCA4LCAxNSwgNSwgMjM1LCAxOSwgMzAsIDI1NSwgCisgICAgOSwgOTYsIDIzMywgMjIxLCAxNSwgNSwgMjM1LCAxOSwgMzAsIDI1MywgMjM3LCAxNSwgNSwgMjM1LCAxOSwgMzAsIDI1MiwgCisgICAgMTg0LCAxNSwgNSwgMjM1LCAxOSwgMzAsIDI1MiwgMTY4LCAxNSwgNSwgMjM1LCAxOSwgMzAsIDEzMCwgMTUsIDUsIDIzNSwgCisgICAgMTksIDMwLCAyNTIsIDE0LCAxNSwgNSwgMjM1LCAxOSwgMzAsIDI0NSwgOTUsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjQ1LCAKKyAgICA4MCwgMTUsIDUsIDIzNSwgMTksIDMwLCAyNDMsIDE0MiwgMTUsIDUsIDIzNSwgMTksIDMwLCAyNDMsIDEyNSwgMTUsIDUsIAorICAgIDIzNSwgMTksIDMwLCAyNDMsIDExMiwgMjE2LCAyNDAsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjQzLCAxMDMsIDE1LCA1LCAKKyAgICAyMzUsIDE5LCAzMCwgMjQzLCAxMDQsIDk2LCAyMjAsIDEwMywgOTYsIDYxLCAxNSwgNSwgMjM1LCAxOSwgMzAsIDI0MiwgCisgICAgMjIxLCAxNSwgNSwgMjM1LCAxOSwgMzAsIDI0MiwgMjA0LCAxNSwgNSwgMjM1LCAxOSwgMzAsIDI0MiwgMTk4LCA5NiwgMjIxLCAKKyAgICAyMzMsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjQyLCAxOTgsIDI0OSwgMTMzLCAyNDIsIDE5NywgMTUsIDUsIDIzNSwgMTksIAorICAgIDMwLCAyNDIsIDEyMCwgMTUsIDUsIDIzNSwgMTksIDMwLCAyNDIsIDk0LCAxNSwgNSwgMjM1LCAxOSwgMzAsIDIzNiwgNDIsIAorICAgIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjM2LCAyMywgMTUsIDUsIDIzNSwgMTksIDMwLCAyMzQsIDI0OCwgMTUsIDUsIDIzNSwgCisgICAgMTksIDMwLCAyMzQsIDk4LCAxNSwgNSwgMjM1LCAxOSwgMzAsIDIzNCwgOTUsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjMyLCAKKyAgICAyNDcsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjMyLCAxMDMsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjMxLCA5NiwgMTUsIDUsIAorICAgIDIzNSwgMTksIDMwLCAyMzEsIDk3LCA5NiwgMjQ2LCA4NiwgMTUsIDUsIDIzNSwgMTksIDMwLCAyMzEsIDk3LCA5NiwgMjQyLCAKKyAgICAyMjEsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjMxLCA5NywgOTYsIDIxNywgMjMsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjMwLCAKKyAgICAyMzUsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjMwLCAyMzYsIDk2LCAyMjcsIDE5MywgMTUsIDUsIDIzNSwgMTksIDMwLCAyMjksIAorICAgIDExMiwgMTUsIDUsIDIzNSwgMTksIDMwLCAyMjcsIDE5OCwgMTUsIDUsIDIzNSwgMTksIDMwLCAyMjUsIDExMSwgMTUsIDUsIAorICAgIDIzNSwgMTksIDMwLCAyMjIsIDE0MiwgMTUsIDUsIDIzNSwgMTksIDMwLCAyMDYsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjIxLCAKKyAgICAyMzMsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjIwLCAxMDQsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjIwLCA2NSwgMTUsIDUsIAorICAgIDIzNSwgMTksIDMwLCAyMjAsIDMyLCAxNSwgNSwgMjM1LCAxOSwgMzAsIDIxOSwgMjI3LCAxNSwgNSwgMjM1LCAxOSwgMzAsIAorICAgIDIxOSwgMTg0LCAxNSwgNSwgMjM1LCAxOSwgMzAsIDIxOCwgNTIsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjE3LCA1MSwgMTUsIAorICAgIDUsIDIzNSwgMTksIDMwLCA2OSwgMTUsIDUsIDIzNSwgMTksIDMwLCAyMTQsIDIzMCwgMTUsIDUsIDIzNSwgMTksIDMwLCAKKyAgICAyMTQsIDIxOSwgMTUsIDUsIDIzNSwgMTksIDMwLCAyMTQsIDE5MywgMzAsIDE5MSwgMTUsIDUsIDIzNSwgMTksIDMwLCAyMTQsIAorICAgIDEyNiwgMTUsIDUsIDIzNSwgMTksIDMwLCAyMTAsIDQ0LCAxNSwgNSwgMjM1LCAxNywgMTUsIDUsIDIzNSwgMTgsIDI0OSwgCisgICAgMTMzLCAyMzUsIDE3LCAxNSwgNSwgMjM1LCAxMCwgMTUsIDUsIDIzNSwgNywgMTUsIDUsIDIzNSwgNSwgMTUsIDUsIDIzNSwgCisgICAgNCwgMTUsIDUsIDIzNSwgMiwgMTUsIDUsIDIzNSwgMywgMTE1LCAyMzUsIDIsIDE1LCA1LCAyMzQsIDI0OCwgMTUsIDUsIAorICAgIDIzNCwgMjQ5LCAzMCwgMjM2LCA0MywgMjQyLCAxMDEsIDE1LCA1LCAyMzQsIDI0NCwgMTUsIDUsIDIzNCwgMjQ1LCAzMCwgCisgICAgMjUyLCAxODQsIDE1LCA1LCAyMzQsIDI0NSwgMjQ5LCAxMzMsIDIzNCwgMjQ0LCAxNSwgNSwgMjM0LCAyNDIsIDE1LCA1LCAKKyAgICAyMzQsIDI0MSwgMTUsIDUsIDIzNCwgMjEzLCAxNSwgNSwgMjM0LCAyMTQsIDIzMywgMTI0LCAzMCwgMTA0LCAxMTUsIDIzMywgCisgICAgMTI0LCAzMCwgNjksIDE1LCA1LCAyMzQsIDIxNCwgMTE1LCAyMzQsIDIxNCwgMjMzLCAxMjQsIDMwLCAxMDQsIDExNSwgMjMzLCAKKyAgICAxMjQsIDMwLCA2OSwgMTUsIDUsIDIzNCwgMTYzLCAxNSwgNSwgMjM0LCA5OCwgMTUsIDUsIDIzNCwgOTksIDMwLCAyNTIsIAorICAgIDE4NCwgMTUsIDUsIDIzNCwgOTksIDMwLCA2OSwgMTUsIDUsIDIzNCwgOTksIDMwLCAyMTQsIDIxOSwgMTUsIDUsIDIzNCwgCisgICAgOTUsIDE1LCA1LCAyMzQsIDg3LCAxNSwgNSwgMjM0LCA3NCwgMTUsIDUsIDIzNCwgNzMsIDE1LCA1LCAyMzQsIDcxLCAxNSwgCisgICAgNSwgMjM0LCA3MiwgMTE1LCAyMzQsIDcxLCAxNSwgNSwgMjMzLCAyMjMsIDE1LCA1LCAyMzMsIDIyNCwgMTE1LCAyNDEsIAorICAgIDE4OCwgMzAsIDI1MywgMjM4LCAyMzMsIDIyNCwgMTE1LCAyNDEsIDE4OCwgMzAsIDI1MywgMjM3LCAxNSwgNSwgMjMzLCAKKyAgICAyMjEsIDE1LCA1LCAyMzMsIDIxOSwgMTUsIDUsIDIzMywgMjIwLCAyMTQsIDEyLCAxNywgMTUsIDUsIDIzMywgMjE4LCAxNSwgCisgICAgNSwgMjMzLCAyMTUsIDE1LCA1LCAyMzMsIDIxNiwgMjQyLCAxMDEsIDE1LCA1LCAyMzMsIDIxNCwgMTUsIDUsIDIzMywgMjAyLCAKKyAgICAxNSwgNSwgMjMzLCAyMDMsIDIyNiwgMTY4LCAyMzMsIDIwMiwgMTUsIDUsIDIzMywgMTk3LCAxNSwgNSwgMjMzLCAxNzgsIAorICAgIDE1LCA1LCAyMzMsIDE0MSwgMTUsIDUsIDIzMywgMTIzLCAxNSwgNSwgMjMzLCAxMjQsIDMwLCA2MSwgMTUsIDUsIDIzMywgCisgICAgMTI0LCAzMCwgMTE2LCA5NiwgMjQ4LCAyMzAsIDk2LCAxNjIsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDExNiwgOTYsIDI0MywgCisgICAgMTAzLCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAxMTYsIDk2LCAyMzMsIDExMCwgMTUsIDUsIDIzMywgMTI0LCAzMCwgMjU0LCAKKyAgICAxODcsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDI1NCwgMTMxLCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAyNTMsIDI0MCwgMjEwLCAKKyAgICA0MCwgMjE2LCAyNDAsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDI1MiwgMTg0LCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAyNTIsIAorICAgIDE0LCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAyNDgsIDE3NCwgMTUsIDUsIDIzMywgMTI0LCAzMCwgMjQ1LCAxNTgsIDE1LCA1LCAKKyAgICAyMzMsIDEyNCwgMzAsIDI0MywgMTQyLCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAyNDMsIDEwMywgMTUsIDUsIDIzMywgMTI0LCAKKyAgICAzMCwgMjQyLCAxMTAsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDI0MiwgMTExLCA5NiwgMjQyLCAxMTAsIDE1LCA1LCAyMzMsIAorICAgIDEyNCwgMzAsIDE2MiwgMTUsIDUsIDIzMywgMTI0LCAzMCwgMjQyLCAzNywgMTUsIDUsIDIzMywgMTI0LCAzMCwgMjQxLCAKKyAgICAxODgsIDMwLCAyMjcsIDE5OCwgMTUsIDUsIDIzMywgMTI0LCAzMCwgMjM2LCA0MywgMjQyLCAxMDEsIDE1LCA1LCAyMzMsIAorICAgIDEyNCwgMzAsIDIzNiwgMjMsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDIzNiwgMjQsIDk2LCAxNjIsIDE1LCA1LCAyMzMsIDEyNCwgCisgICAgMzAsIDIzNiwgMjQsIDk2LCAyMzIsIDEwMywgMTUsIDUsIDIzMywgMTI0LCAzMCwgMjM0LCA5OCwgMTUsIDUsIDIzMywgMTI0LCAKKyAgICAzMCwgMjM0LCA4NywgMTUsIDUsIDIzMywgMTI0LCAzMCwgMjMzLCAyMjEsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDIzMywgCisgICAgMjE1LCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAyMzMsIDIxNiwgOTYsIDI0MSwgMTg4LCA5NiwgNjEsIDE1LCA1LCAyMzMsIAorICAgIDEyNCwgMzAsIDIzMywgMTIzLCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAyMzIsIDIwMywgMTUsIDUsIDIzMywgMTI0LCAzMCwgCisgICAgMjMyLCAxMDMsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDIzMiwgOTEsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDIzMSwgOTYsIDE1LCAKKyAgICA1LCAyMzMsIDEyNCwgMzAsIDIzMSwgOTcsIDk2LCAyNDUsIDE1OCwgMTUsIDUsIDIzMywgMTI0LCAzMCwgMjMwLCA2NiwgMTUsIAorICAgIDUsIDIzMywgMTI0LCAzMCwgMjI5LCAxMTIsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDIyMCwgNjYsIDk2LCAyMTgsIDQ0LCAxNSwgCisgICAgNSwgMjMzLCAxMjQsIDMwLCAyMjAsIDEyLCA5NiwgMjQyLCAxOTgsIDk2LCAyNDUsIDk1LCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAKKyAgICAyMjAsIDEyLCA5NiwgMjQyLCAxOTgsIDIxNiwgMjQwLCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAyMTksIDIyNSwgMTUsIDUsIAorICAgIDIzMywgMTI0LCAzMCwgMjE5LCAyMjYsIDk2LCAyMTksIDIyNSwgMTUsIDUsIDIzMywgMTI0LCAzMCwgMjE4LCA0NCwgMTUsIAorICAgIDUsIDIzMywgMTI0LCAzMCwgMjE3LCA4NSwgMTUsIDUsIDIzMywgMTI0LCAzMCwgMjE3LCA3MywgMTUsIDUsIDIzMywgMTI0LCAKKyAgICAzMCwgMjE3LCAyNCwgOTYsIDExNiwgOTYsIDIxOCwgODUsIDk2LCAxOTgsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDY5LCAxNSwgCisgICAgNSwgMjMzLCAxMjQsIDMwLCAxMDQsIDk2LCA2MSwgMTUsIDUsIDIzMywgMTI0LCAzMCwgMTA0LCA5NiwgMTA0LCA5NiwgNjksIAorICAgIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDIxNCwgMjMxLCA5NiwgMjUzLCAyMzksIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDIxNCwgCisgICAgMjE5LCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAyMTQsIDEyNiwgMTUsIDUsIDIzMywgMTI0LCAyMTgsIDIzNSwgMTUsIDUsIAorICAgIDIzMywgMTIxLCAxNSwgNSwgMjMzLCAxMjIsIDMwLCAyMjAsIDY1LCAxNSwgNSwgMjMzLCAxMjIsIDMwLCAyMjAsIDY2LCA5NiwgCisgICAgMjE4LCA0NCwgMTUsIDUsIDIzMywgMTIyLCAyNDIsIDEwMSwgMTUsIDUsIDIzMywgMTIyLCAyNDIsIDEwMiwgMTE1LCAyMzMsIAorICAgIDEyMiwgMjQyLCAxMDIsIDIyMCwgNjUsIDE1LCA1LCAyMzMsIDExNywgMTUsIDUsIDIzMywgMTEwLCAxNSwgNSwgMjMzLCAKKyAgICAxMTEsIDMwLCAyMzMsIDExMCwgMTUsIDUsIDIzMywgMTA4LCAxNSwgNSwgMjMzLCAxMDksIDMwLCAyMzMsIDIwMiwgMTUsIDUsIAorICAgIDIzMywgMTA5LCAzMCwgMjMzLCAyMDMsIDk2LCAyMjIsIDE0MiwgMTUsIDUsIDIzMiwgMjQ3LCAxNSwgNSwgMjMyLCAyMzIsIAorICAgIDE1LCA1LCAyMzIsIDIyMiwgMTUsIDUsIDIzMiwgMjAzLCAxNSwgNSwgMjMyLCAxMDMsIDE1LCA1LCAyMzIsIDEwNCwgMzAsIAorICAgIDI1MiwgMTg0LCAxNSwgNSwgMjMyLCAxMDEsIDE1LCA1LCAyMzIsIDEwMiwgMzAsIDI1NCwgMTg3LCAxNSwgNSwgMjMyLCAKKyAgICAxMDIsIDMwLCAyNTIsIDE4NCwgMTUsIDUsIDIzMiwgMTAyLCAzMCwgMjQ1LCA4MCwgMTUsIDUsIDIzMiwgMTAyLCAzMCwgCisgICAgMjQ1LCA4MSwgMjE2LCAyNDAsIDE1LCA1LCAyMzIsIDEwMiwgMzAsIDI0MywgMTEyLCAyMTYsIDI0MCwgMTUsIDUsIDIzMiwgCisgICAgMTAyLCAzMCwgMjQxLCAxODgsIDMwLCAyNTIsIDE4NCwgMTUsIDUsIDIzMiwgMTAyLCAzMCwgMjM2LCAyMywgMTUsIDUsIAorICAgIDIzMiwgMTAyLCAzMCwgMjM1LCA3LCAxNSwgNSwgMjMyLCAxMDIsIDMwLCAyMzUsIDUsIDE1LCA1LCAyMzIsIDEwMiwgMzAsIAorICAgIDIzNSwgNiwgOTYsIDI1MywgMjM5LCAxNSwgNSwgMjMyLCAxMDIsIDMwLCAyMzQsIDk4LCAxNSwgNSwgMjMyLCAxMDIsIDMwLCAKKyAgICAyMzMsIDE0MiwgOTYsIDI1MywgMjM5LCAxNSwgNSwgMjMyLCAxMDIsIDMwLCAyMzMsIDEyMywgMTUsIDUsIDIzMiwgMTAyLCAKKyAgICAzMCwgMjMxLCA5NywgOTYsIDI0NSwgMTU4LCAxNSwgNSwgMjMyLCAxMDIsIDMwLCAyMjksIDExMiwgMTUsIDUsIDIzMiwgCisgICAgMTAyLCAzMCwgMjI3LCAyNDIsIDE1LCA1LCAyMzIsIDEwMiwgMzAsIDIxOSwgMTk0LCA5NiwgMjUzLCAyMzksIDE1LCA1LCAKKyAgICAyMzIsIDEwMiwgMzAsIDIxOSwgMTc2LCA5NiwgMjUxLCAxMzMsIDE1LCA1LCAyMzIsIDEwMiwgMzAsIDIxNSwgMTE0LCAxNSwgCisgICAgNSwgMjMyLCAxMDIsIDIxNiwgMjQwLCAxNSwgNSwgMjMyLCAxMDIsIDI0OSwgMTMzLCAyMzIsIDEwMSwgMTUsIDUsIDIzMiwgCisgICAgMTAyLCAyMjYsIDE2OCwgMjMyLCAxMDEsIDE1LCA1LCAyMzIsIDEwMiwgMjE4LCAyMzUsIDE1LCA1LCAyMzIsIDEwMiwgMjIwLCAKKyAgICA0NywgMTUsIDUsIDIzMiwgMTAwLCAxNSwgNSwgMjMyLCA5NiwgMTUsIDUsIDIzMiwgOTcsIDExNSwgMjMyLCA5NiwgMTUsIDUsIAorICAgIDIzMiwgOTcsIDIyNiwgMTY4LCAyMzIsIDk2LCAxNSwgNSwgMjMyLCA5NywgMjIwLCA0NywgMTUsIDUsIDIzMiwgOTQsIDE1LCAKKyAgICA1LCAyMzIsIDkxLCAxNSwgNSwgMjMyLCA4OSwgMTUsIDUsIDIzMiwgOTAsIDExNSwgMjMyLCA4OSwgMTUsIDUsIDIzMiwgOTAsIAorICAgIDExNSwgMjMyLCA5MCwgMjQzLCAxMDQsIDExNSwgMjQzLCAxMDMsIDE1LCA1LCAxODYsIDE1LCA1LCAyMzEsIDI0NCwgMzAsIAorICAgIDIxNywgNzMsIDE1LCA1LCAyMzEsIDI0NCwgMjQyLCAxMDEsIDE1LCA1LCAyMzEsIDI0MywgMTUsIDUsIDIzMSwgMjE1LCAxNSwgCisgICAgNSwgMjMxLCAxNzEsIDE1LCA1LCAyMzEsIDE1MiwgMTUsIDUsIDIzMSwgMTUxLCAxNSwgNSwgMjMxLCA5NiwgMTUsIDUsIAorICAgIDIzMSwgNTIsIDE1LCA1LCAyMzAsIDIzNSwgMTUsIDUsIDIzMCwgMTkzLCAxNSwgNSwgMjMwLCAxMDcsIDE1LCA1LCAyMzAsIAorICAgIDEwOCwgMTE1LCAyMzAsIDEwNywgMTUsIDUsIDIzMCwgOTgsIDE1LCA1LCAyMzAsIDk5LCAyNDIsIDEwMSwgMTUsIDUsIDIzMCwgCisgICAgODMsIDE1LCA1LCAyMzAsIDY5LCAxNSwgNSwgMjMwLCA2NiwgMTUsIDUsIDIzMCwgNjcsIDMwLCA2MSwgMTUsIDUsIDIzMCwgCisgICAgNjcsIDMwLCAyMzMsIDIwMiwgMTUsIDUsIDIzMCwgNjcsIDMwLCAyMTAsIDExNiwgMTUsIDUsIDIzMCwgNjcsIDExNSwgMjMwLCAKKyAgICA2NiwgMTUsIDUsIDIzMCwgNjcsIDExNSwgMjMwLCA2NywgMzAsIDExNiwgOTYsIDE5OCwgMTUsIDUsIDIzMCwgNjcsIDI0OSwgCisgICAgMTMzLCAyMzAsIDY2LCAxNSwgNSwgMjMwLCA2NCwgMTUsIDUsIDIzMCwgNjUsIDMwLCA2MSwgMTUsIDUsIDIzMCwgNjUsIDMwLCAKKyAgICAxMTYsIDk2LCAyNDgsIDExLCAxNSwgNSwgMjMwLCA2NSwgMzAsIDI0OCwgMTEsIDE1LCA1LCAyMzAsIDY1LCAyNDIsIDEwMSwgCisgICAgMTUsIDUsIDE5OCwgMTUsIDUsIDIyOSwgMjMyLCAxNSwgNSwgMjI5LCAyMjEsIDE1LCA1LCAyMjksIDIyMiwgMjM1LCAxOTksIAorICAgIDE1LCA1LCAyMjksIDIyMiwgMzAsIDIxOSwgMjI4LCAyMTYsIDI0MCwgMTUsIDUsIDIyOSwgMjIyLCAyMjYsIDE2OCwgMjI5LCAKKyAgICAyMjEsIDE1LCA1LCAyMjksIDIyMCwgMTUsIDUsIDIyOSwgMjEzLCAyMjcsIDE4NCwgMTUsIDUsIDIyOSwgMjEyLCAxNSwgNSwgCisgICAgMjI5LCAyMTEsIDE1LCA1LCAyMjksIDExMiwgMTUsIDUsIDIyOSwgMTEzLCAzMCwgNjEsIDE1LCA1LCAyMjksIDExMywgMzAsIAorICAgIDIxNCwgMjE5LCAxNSwgNSwgMjI5LCAxMTMsIDIyMCwgNDcsIDE1LCA1LCAyMjgsIDIzOCwgMTUsIDUsIDIyOCwgMjM5LCAzMCwgCisgICAgNzYsIDE1LCA1LCAyMjgsIDIzNywgMTUsIDUsIDIyOCwgMjA4LCAxNSwgNSwgMjI4LCAyMDksIDMwLCAyNDMsIDExMiwgMjE2LCAKKyAgICAyNDAsIDE1LCA1LCAyMjgsIDIwOSwgMzAsIDI0MywgMTA0LCA5NiwgMjQzLCAxMTIsIDIxNiwgMjQwLCAxNSwgNSwgMjI4LCAKKyAgICAyMDYsIDE1LCA1LCAyMjgsIDIwNywgMzAsIDI1NCwgMTMxLCAxNSwgNSwgMjI4LCAyMDcsIDMwLCAyNTMsIDIzOSwgMTUsIDUsIAorICAgIDIyOCwgMjA3LCAzMCwgMjUzLCAyNDAsIDk2LCAyNTMsIDIzOSwgMTUsIDUsIDIyOCwgMjA3LCAzMCwgMjQyLCAxMTAsIDE1LCAKKyAgICA1LCAyMjgsIDIwNywgMzAsIDIzMSwgOTcsIDk2LCAyNDMsIDExMiwgMjE2LCAyNDAsIDE1LCA1LCAyMjgsIDIwNywgMzAsIAorICAgIDIyOSwgMTEyLCAxNSwgNSwgMjI4LCAyMDcsIDMwLCAyMjcsIDE5OCwgMTUsIDUsIDIyOCwgMjA3LCAzMCwgMjIwLCA2NSwgCisgICAgMTUsIDUsIDIyOCwgMjA3LCAzMCwgMjIwLCA2NiwgOTYsIDExNiwgMjU0LCAxMzEsIDE1LCA1LCAyMjgsIDIwNywgMzAsIAorICAgIDIyMCwgNjYsIDk2LCAyNTMsIDIzOSwgMTUsIDUsIDIyOCwgMjA3LCAzMCwgMjIwLCA2NiwgOTYsIDI1MywgMjQwLCA5NiwgCisgICAgMjUzLCAyMzksIDE1LCA1LCAyMjgsIDIwNywgMzAsIDIxNCwgMjMxLCA5NiwgMjUzLCAyMzksIDE1LCA1LCAyMjgsIDIwNywgCisgICAgMzAsIDIxNCwgMTI2LCAxNSwgNSwgMjI4LCAxOTUsIDE1LCA1LCAyMjcsIDI0MiwgMTUsIDUsIDIyNywgMjE0LCAxNSwgNSwgCisgICAgMjI3LCAxOTgsIDE1LCA1LCAyMjcsIDE5OSwgMjMzLCAxMjIsIDMwLCAyNDMsIDEwMywgMTUsIDUsIDIyNywgMTk5LCAyMzMsIAorICAgIDEyMiwgMzAsIDIzMSwgMTUyLCAxNSwgNSwgMjI3LCAxOTksIDIzMywgMTIyLCAzMCwgMjIyLCAxMCwgMTUsIDUsIDIyNywgCisgICAgMTk5LCAyMzMsIDEyMiwgMzAsIDIyMiwgMTEsIDExNSwgMjI3LCAxOTksIDIzMywgMTIyLCAzMCwgMjIyLCAxMCwgMTUsIDUsIAorICAgIDIyNywgMTk5LCAyMzMsIDEyMiwgMzAsIDIxNCwgMTI2LCAxNSwgNSwgMjI3LCAxOTksIDIxNiwgMjQwLCAxNSwgNSwgMjI3LCAKKyAgICAxOTksIDExNSwgMjI3LCAxOTgsIDE1LCA1LCAyMjcsIDE5OSwgMjQ5LCAxMzMsIDIyNywgMTk4LCAxNSwgNSwgMjI3LCAxOTksIAorICAgIDI0OSwgMTMzLCAyMjcsIDE5OSwgMjMzLCAxMjIsIDExNSwgMjMzLCAxMjEsIDE1LCA1LCAyMjcsIDE5MywgMTUsIDUsIDIyNywgCisgICAgMTk0LCAyNTUsIDMzLCAzMCwgMjUzLCAyMzQsIDE1LCA1LCAyMjcsIDE5NCwgMjU1LCAzMywgMzAsIDI1MiwgMTQsIDE1LCA1LCAKKyAgICAyMjcsIDE5NCwgMjU1LCAzMywgMzAsIDI0NiwgODIsIDE1LCA1LCAyMjcsIDE5NCwgMjU1LCAzMywgMzAsIDI0MiwgMTEwLCAKKyAgICAxNSwgNSwgMjI3LCAxOTQsIDI1NSwgMzMsIDMwLCAyMzYsIDQzLCAyNDIsIDEwMSwgMTUsIDUsIDIyNywgMTk0LCAyNTUsIAorICAgIDMzLCAzMCwgMjM1LCA1LCAxNSwgNSwgMjI3LCAxOTQsIDI1NSwgMzMsIDMwLCAyMzMsIDE0MSwgMTUsIDUsIDIyNywgMTk0LCAKKyAgICAyNTUsIDMzLCAzMCwgMjI5LCAxMTIsIDE1LCA1LCAyMjcsIDE5NCwgMjU1LCAzMywgMzAsIDIxOSwgMTczLCAxNSwgNSwgCisgICAgMjI3LCAxOTQsIDI1NSwgMzMsIDMwLCAyMTQsIDIzMCwgMTUsIDUsIDIyNywgMTk0LCAyMzQsIDcyLCAzMCwgMjUyLCAxNCwgCisgICAgMTUsIDUsIDIyNywgMTk0LCAyMzQsIDcyLCAzMCwgMjUyLCAxNSwgNjksIDE1LCA1LCAxOTEsIDE1LCA1LCAyMjYsIDg0LCAKKyAgICAxNSwgNSwgMjI2LCA1MSwgMTUsIDUsIDIyNiwgMjUsIDE1LCA1LCAyMjUsIDE2NCwgMTUsIDUsIDIyNSwgMTExLCAxNSwgNSwgCisgICAgMjI1LCAxMTIsIDMwLCA2MSwgMTUsIDUsIDIyNSwgMTEyLCAzMCwgMjU1LCAzNCwgMTUsIDUsIDIyNSwgMTEyLCAzMCwgMjUyLCAKKyAgICAxNCwgMTUsIDUsIDIyNSwgMTEyLCAzMCwgMjUxLCAxMzMsIDE1LCA1LCAyMjUsIDExMiwgMzAsIDc2LCAxNSwgNSwgMjI1LCAKKyAgICAxMTIsIDMwLCA3NCwgMTUsIDUsIDIyNSwgMTEyLCAzMCwgMjQwLCAxMjIsIDE1LCA1LCAyMjUsIDExMiwgMzAsIDY5LCAxNSwgCisgICAgNSwgMjI1LCAxMTIsIDMwLCAyMTQsIDIzMCwgMTUsIDUsIDIyNSwgMTEyLCAyNDksIDEzMywgMjI1LCAxMTEsIDE1LCA1LCAKKyAgICAyMjUsIDU2LCAxNSwgNSwgMjI1LCA1NywgMzAsIDIzNCwgMjQ0LCAxNSwgNSwgMjI1LCA1NywgMzAsIDIxNCwgMjE5LCAxNSwgCisgICAgNSwgMjI1LCA1NywgMzAsIDIxMCwgMTE2LCAxNSwgNSwgMjI1LCA1NywgMjI2LCAxNjgsIDIyNSwgNTYsIDE1LCA1LCAyMDUsIAorICAgIDE1LCA1LCAyMjMsIDE4NSwgMTUsIDUsIDIyMywgMzgsIDE1LCA1LCAyMjIsIDE0MiwgMTUsIDUsIDIwNiwgMTUsIDUsIDIyMiwgCisgICAgMjQsIDIyNywgMTg0LCAxNSwgNSwgMjIyLCAyMywgMTUsIDUsIDIyMiwgMjQsIDMwLCA2MSwgMTUsIDUsIDIyMiwgMjQsIDMwLCAKKyAgICAyNDYsIDg2LCAxNSwgNSwgMjIyLCAyNCwgMzAsIDI0NiwgODQsIDE1LCA1LCAyMjIsIDI0LCAzMCwgMTYyLCAxNSwgNSwgCisgICAgMjIyLCAyNCwgMzAsIDIzNCwgMjQ4LCAxNSwgNSwgMjIyLCAyNCwgMzAsIDIzMywgMjAyLCAxNSwgNSwgMjIyLCAyNCwgMzAsIAorICAgIDIzMiwgODksIDE1LCA1LCAyMjIsIDI0LCAzMCwgMjMwLCAyMzUsIDE1LCA1LCAyMjIsIDI0LCAzMCwgMjI3LCAxOTgsIDE1LCAKKyAgICA1LCAyMjIsIDI0LCAzMCwgMjIyLCAxMCwgMTUsIDUsIDIyMiwgMjQsIDMwLCAyMjAsIDMyLCAxNSwgNSwgMjIyLCAyNCwgMzAsIAorICAgIDIxNywgOTQsIDE1LCA1LCAyMjIsIDI0LCAzMCwgMjE0LCAyMzAsIDE1LCA1LCAyMjIsIDI0LCAzMCwgMjE0LCAyMjUsIDE1LCAKKyAgICA1LCAyMjIsIDI0LCAzMCwgMjE0LCAxOTcsIDE1LCA1LCAyMjIsIDI0LCAzMCwgMjE0LCAxNTAsIDE1LCA1LCAyMjIsIDI0LCAKKyAgICAzMCwgMjE0LCAxMjYsIDE1LCA1LCAyMjIsIDI0LCAxMTUsIDIyMiwgMjMsIDE1LCA1LCAyMjIsIDI0LCAyNDIsIDEwMSwgMTUsIAorICAgIDUsIDIyMiwgMTAsIDE1LCA1LCAyMjIsIDExLCAyMzMsIDEyNCwgMzAsIDI1MywgMjM3LCAxNSwgNSwgMjIxLCAyNDEsIDE1LCAKKyAgICA1LCAyMjEsIDIzMywgMTUsIDUsIDIyMCwgMTA0LCAxNSwgNSwgMjIwLCAxMDIsIDE1LCA1LCAyMjAsIDEwMywgMzAsIDYxLCAKKyAgICAxNSwgNSwgMjIwLCAxMDMsIDMwLCAyNTIsIDE4NCwgMTUsIDUsIDIyMCwgMTAzLCAzMCwgMjQyLCAxOTcsIDE1LCA1LCAyMjAsIAorICAgIDEwMywgMzAsIDIyOSwgMTEyLCAxNSwgNSwgMjIwLCAxMDMsIDMwLCAyMTksIDIyNSwgMTUsIDUsIDIyMCwgMTAzLCAzMCwgCisgICAgMjE1LCA5OSwgMTUsIDUsIDIyMCwgMTAzLCAzMCwgNjksIDE1LCA1LCAyMjAsIDEwMywgMzAsIDEwNCwgOTYsIDYxLCAxNSwgCisgICAgNSwgMjIwLCAxMDEsIDE1LCA1LCAyMjAsIDk5LCAxNSwgNSwgMjIwLCA4MCwgMTUsIDUsIDIyMCwgNjUsIDE1LCA1LCAyMjAsIAorICAgIDY2LCAyNDAsIDIyOSwgMTUsIDUsIDIyMCwgNjYsIDExNSwgMjIwLCA2NiwgMjQzLCAxMzQsIDExNSwgMjQzLCAxMzQsIDI0MywgCisgICAgMTA0LCAxMTUsIDI0MywgMTAzLCAxNSwgNSwgMjIwLCA2NiwgMTE1LCAyMjAsIDY2LCAyMTcsIDk1LCAxMTUsIDIxNywgOTUsIAorICAgIDI0MywgMTA0LCAxMTUsIDI0MywgMTAzLCAxNSwgNSwgMjIwLCA1OCwgMTUsIDUsIDIyMCwgNTMsIDE1LCA1LCAyMjAsIDUwLCAKKyAgICAxNSwgNSwgMjIwLCA0OSwgMTUsIDUsIDIyMCwgNDYsIDE1LCA1LCAyMjAsIDMyLCAxNSwgNSwgMjIwLCAzMywgMzAsIDYxLCAKKyAgICAxNSwgNSwgMjIwLCAzMywgMzAsIDIzNiwgMjMsIDE1LCA1LCAyMjAsIDI2LCAxNSwgNSwgMjIwLCAyNywgMzAsIDYxLCAxNSwgCisgICAgNSwgMjIwLCAyNywgMzAsIDI1MiwgMTY5LCAxNSwgNSwgMjIwLCAyNywgMzAsIDI1MSwgMTE3LCAxNSwgNSwgMjIwLCAyNywgCisgICAgMzAsIDI0NywgMjE0LCAxNSwgNSwgMjIwLCAyNywgMzAsIDI0MywgMTAzLCAxNSwgNSwgMjIwLCAyNywgMzAsIDIzNiwgNDIsIAorICAgIDE1LCA1LCAyMjAsIDI3LCAzMCwgMjM2LCA0MywgMjQyLCAxMDEsIDE1LCA1LCAyMjAsIDI3LCAzMCwgMjMzLCAxOTcsIDE1LCAKKyAgICA1LCAyMjAsIDI3LCAzMCwgMjMyLCA5MSwgMTUsIDUsIDIyMCwgMjcsIDMwLCAyMzAsIDk4LCAxNSwgNSwgMjIwLCAyNywgMzAsIAorICAgIDIyMiwgMTAsIDE1LCA1LCAyMjAsIDIwLCAxNSwgNSwgMjIwLCAxNSwgMTUsIDUsIDIyMCwgMTYsIDIxNiwgMjQwLCAxNSwgNSwgCisgICAgMjIwLCAxNiwgMTE1LCAyMjAsIDE2LCAyNTEsIDEwNywgMTE1LCAyNTEsIDEwNiwgMTUsIDUsIDIyMCwgMTEsIDE1LCA1LCAKKyAgICAyMTksIDIyNywgMTUsIDUsIDIxOSwgMjI4LCAxMTUsIDIzNSwgMjAwLCAyMTksIDIyNywgMTUsIDUsIDIxOSwgMjI1LCAxNSwgCisgICAgNSwgMjE5LCAyMjQsIDE1LCA1LCAyMTksIDE5MywgMTUsIDUsIDIxOSwgMTk0LCAyNDIsIDEwMSwgMTUsIDUsIDIxOSwgMTg0LCAKKyAgICAxNSwgNSwgMjE5LCAxODIsIDE1LCA1LCAyMTksIDE4MywgMTE1LCAyMTksIDE4MywgMjE5LCAyMjUsIDE1LCA1LCAyMTksIAorICAgIDE3NSwgMTUsIDUsIDIxOSwgMTczLCAxNSwgNSwgMjE4LCA4NCwgMTUsIDUsIDIxOCwgODUsIDExNSwgMjE4LCA4NCwgMTUsIAorICAgIDUsIDIxOCwgNTUsIDE1LCA1LCAyMTgsIDU0LCAxNSwgNSwgMjE4LCA1MiwgMTUsIDUsIDIxOCwgNDQsIDE1LCA1LCAyMTgsIAorICAgIDQzLCAxNSwgNSwgMjE4LCAxOCwgMTUsIDUsIDIxOCwgMTcsIDE1LCA1LCAyMTcsIDEwNiwgMTUsIDUsIDIxNywgMTA3LCAKKyAgICAyNTMsIDIyNCwgMTUsIDUsIDIxNywgMTA3LCAzMCwgMjQxLCAxODcsIDE1LCA1LCAyMTcsIDEwNywgMzAsIDIzMCwgMjM1LCAKKyAgICAxNSwgNSwgMjE3LCAxMDcsIDI0MiwgMTAxLCAxNSwgNSwgMjE3LCA5NCwgMTUsIDUsIDIxNywgOTUsIDExNSwgMjE3LCA5NSwgCisgICAgMjI4LCAyMzksIDExNSwgMjI4LCAyMzksIDI0NywgMTk2LCAxMTUsIDI0NywgMTk1LCAxNSwgNSwgMjE3LCA5NSwgMjE4LCAKKyAgICAyMzUsIDE1LCA1LCAyMTcsIDg1LCAxNSwgNSwgMTI5LCAzMCwgMjUyLCAxNCwgMTUsIDUsIDEyOSwgMzAsIDI0MiwgMTEwLCAKKyAgICAxNSwgNSwgMTI5LCAzMCwgMjIwLCA2NSwgMTUsIDUsIDEyOSwgMzAsIDIxOSwgMjI3LCAxNSwgNSwgMTI5LCAzMCwgMjE1LCAKKyAgICAxMTQsIDE1LCA1LCAxMjksIDMwLCAyMTQsIDIxOSwgMTUsIDUsIDIxNywgNzMsIDE1LCA1LCAyMTcsIDUxLCAxNSwgNSwgCisgICAgMjE3LCAyMywgMTUsIDUsIDIxNywgMjQsIDI0MiwgMTAxLCAxNSwgNSwgMjE2LCAxMTgsIDE1LCA1LCAyMTYsIDExOSwgMjE2LCAKKyAgICAyNDAsIDE1LCA1LCAyMTYsIDkxLCAxNSwgNSwgMjE2LCA3MywgMTUsIDUsIDIxNiwgNzQsIDMwLCAyMTcsIDczLCAxNSwgNSwgCisgICAgMjE2LCA3NCwgMTE1LCAyMTYsIDczLCAxNSwgNSwgMjE2LCA3NCwgMTE1LCAyMTYsIDc0LCAyNDMsIDEzNCwgMTE1LCAyNDMsIAorICAgIDEzNCwgMjQzLCAxMDQsIDExNSwgMjQzLCAxMDMsIDE1LCA1LCAyMTUsIDExOSwgMTUsIDUsIDIxNSwgMTE0LCAxNSwgNSwgCisgICAgMjE1LCAxMTIsIDE1LCA1LCAyMTUsIDEwOSwgMTUsIDUsIDIxNSwgOTksIDE1LCA1LCAyMTUsIDEwMCwgMTE1LCAyMTUsIAorICAgIDEwMCwgMjEwLCAxMTcsIDExNSwgMjEwLCAxMTYsIDE1LCA1LCA2OSwgMTUsIDUsIDEwNCwgMjQyLCAxMTAsIDE1LCA1LCAKKyAgICAxMDQsIDEwNCwgNjksIDE1LCA1LCAxMDQsIDExNSwgMTA0LCAyMjYsIDk0LCAxMTUsIDIyNiwgOTQsIDI0MywgMTA0LCAxMTUsIAorICAgIDI0MywgMTAzLCAxNSwgNSwgMTA0LCAxMTUsIDEwNCwgMjE4LCAxOSwgMTE1LCAyMTgsIDE4LCAxNSwgNSwgMTA0LCAxMTUsIAorICAgIDEwNCwgMTA0LCAyMjMsIDUyLCAxMTUsIDEwNCwgMjIzLCA1MSwgMTUsIDUsIDIxNCwgMjMwLCAxNSwgNSwgMjE0LCAyMjUsIAorICAgIDE1LCA1LCAyMTQsIDIxOSwgMTUsIDUsIDIxNCwgMjIwLCAyMzMsIDE5NywgMTUsIDUsIDIxNCwgMjIwLCAzMCwgMjUyLCAKKyAgICAxODQsIDE1LCA1LCAyMTQsIDIyMCwgMzAsIDIzMCwgMjM1LCAxNSwgNSwgMjE0LCAyMjAsIDMwLCAxMDQsIDk2LCAxMDQsIAorICAgIDk2LCA2OSwgMTUsIDUsIDIxNCwgMjIwLCAzMCwgMTA0LCA5NiwgMTA0LCA5NiwgMTA0LCAyNDIsIDEwMSwgMTUsIDUsIDIxNCwgCisgICAgMjIwLCAyNDIsIDEwMSwgMTUsIDUsIDIxNCwgMjIwLCAyMjAsIDQ3LCAxNSwgNSwgMjE0LCAyMjAsIDIyMCwgNDgsIDMwLCAKKyAgICAyNTIsIDE4NCwgMTUsIDUsIDIxNCwgMjE1LCAxNSwgNSwgMjE0LCAxOTcsIDE1LCA1LCAyMTQsIDE5OCwgMzAsIDIzMywgCisgICAgMTIzLCAxNSwgNSwgMjE0LCAxOTgsIDMwLCAyMzEsIDk3LCA5NiwgMjQ4LCAyMjksIDE1LCA1LCAyMTQsIDE5OCwgMzAsIAorICAgIDIyMCwgMTAyLCAxNSwgNSwgMjE0LCAxOTgsIDMwLCA2OSwgMTUsIDUsIDIxNCwgMTk2LCAxNSwgNSwgMjE0LCAxOTIsIDE1LCAKKyAgICA1LCAyMTQsIDE5MywgMzAsIDIzNCwgMjEzLCAxNSwgNSwgMjE0LCAxOTMsIDMwLCAxOTEsIDE1LCA1LCAyMTQsIDE5MCwgMTUsIAorICAgIDUsIDIxNCwgMTkxLCAyNDIsIDEwMSwgMTUsIDUsIDIxNCwgMTUwLCAxNSwgNSwgMjE0LCAxNTEsIDI0OSwgMTMzLCAyMTQsIAorICAgIDE1MCwgMTUsIDUsIDIxNCwgMTUxLCAyMjAsIDQ3LCAxNSwgNSwgMjE0LCAxNDgsIDE1LCA1LCAyMTQsIDE0OSwgMzAsIDExNiwgCisgICAgOTYsIDE2MiwgMTUsIDUsIDIxNCwgMTQ5LCAzMCwgMTE2LCA5NiwgMTk4LCAxNSwgNSwgMjE0LCAxNDksIDMwLCAyNTQsIAorICAgIDE4NywgMTUsIDUsIDIxNCwgMTQ5LCAzMCwgMTYyLCAxNSwgNSwgMjE0LCAxNDksIDMwLCAyMjcsIDE5OCwgMTUsIDUsIDIxNCwgCisgICAgMTQ5LCAzMCwgMjE0LCAyMzAsIDE1LCA1LCAyMTQsIDE0OSwgMzAsIDIxNCwgMjMxLCA5NiwgMjUzLCAyMzksIDE1LCA1LCAKKyAgICAyMTQsIDE0OSwgMzAsIDIxNCwgMjMxLCA5NiwgMjUyLCAxNCwgMTUsIDUsIDIxNCwgMTQ3LCAxNSwgNSwgMjE0LCAxNDQsIAorICAgIDE1LCA1LCAyMTQsIDE0MywgMTUsIDUsIDIxNCwgMTM5LCAxNSwgNSwgMjE0LCAxNDAsIDMwLCA2MSwgMTUsIDUsIDIxNCwgCisgICAgMTQwLCAzMCwgMjUzLCAyMzQsIDE1LCA1LCAyMTQsIDE0MCwgMzAsIDEzMCwgMTUsIDUsIDIxNCwgMTQwLCAzMCwgMjQ2LCAKKyAgICA3NiwgMTUsIDUsIDIxNCwgMTQwLCAzMCwgMjQzLCAxNDIsIDE1LCA1LCAyMTQsIDE0MCwgMzAsIDI0MywgMTI1LCAxNSwgNSwgCisgICAgMjE0LCAxNDAsIDMwLCAyNDMsIDExMiwgMjE2LCAyNDAsIDE1LCA1LCAyMTQsIDE0MCwgMzAsIDI0MywgMTAzLCAxNSwgNSwgCisgICAgMjE0LCAxNDAsIDMwLCAyNDIsIDEyMCwgMTUsIDUsIDIxNCwgMTQwLCAzMCwgMTYyLCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAKKyAgICAyMzYsIDQyLCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAyMzYsIDIzLCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAyMzUsIDE3MiwgMTUsIAorICAgIDUsIDIxNCwgMTQwLCAzMCwgMjM0LCA5OCwgMTUsIDUsIDIxNCwgMTQwLCAzMCwgMjMyLCA4OSwgMTUsIDUsIDIxNCwgMTQwLCAKKyAgICAzMCwgMjMwLCAxOTMsIDE1LCA1LCAyMTQsIDE0MCwgMzAsIDE5MSwgMTUsIDUsIDIxNCwgMTQwLCAzMCwgMjIwLCA2NSwgMTUsIAorICAgIDUsIDIxNCwgMTQwLCAzMCwgMjE5LCAxODIsIDE1LCA1LCAyMTQsIDE0MCwgMzAsIDIxNSwgMTE5LCAxNSwgNSwgMjE0LCAKKyAgICAxNDAsIDMwLCAxMDQsIDk2LCAyNDIsIDExMCwgMTUsIDUsIDIxNCwgMTQwLCAzMCwgMjE0LCAyMTksIDE1LCA1LCAyMTQsIAorICAgIDE0MCwgMzAsIDIxNCwgMTM3LCAxNSwgNSwgMjE0LCAxMzcsIDE1LCA1LCAyMTQsIDEzOCwgMzAsIDY5LCAxNSwgNSwgMjE0LCAKKyAgICAxMjYsIDE1LCA1LCAyMTQsIDEyNywgMzAsIDYxLCAxNSwgNSwgMjE0LCAxMjcsIDMwLCAyMzMsIDIyMywgMTUsIDUsIDIxNCwgCisgICAgMTI3LCAzMCwgMjMzLCAyMDIsIDE1LCA1LCAyMTQsIDEyNywgMzAsIDIxNywgNzMsIDE1LCA1LCAyMTQsIDEyMiwgMTUsIDUsIAorICAgIDIxNCwgMTI1LCAxNSwgNSwgMjE0LCAxMjMsIDE1LCA1LCAyMTQsIDExOSwgMTUsIDUsIDIxNCwgMTA4LCAxNSwgNSwgMjE0LCAKKyAgICAxMDksIDMwLCAyMzQsIDIxMywgMTUsIDUsIDIxNCwgMTA3LCAxNSwgNSwgMjEwLCAxMTYsIDE1LCA1LCAyMTAsIDExNywgCisgICAgMjE2LCAyNDAsIDE1LCA1LCAyMTAsIDExNywgOTIsIDMwLCAyMzMsIDIwMiwgMTUsIDUsIDIxMCwgMTEzLCAxNSwgNSwgMjEwLCAKKyAgICAxMDYsIDE1LCA1LCAyMTAsIDkzLCAxNSwgNSwgMjEwLCA0NCwgMTUsIDUsIDIxMCwgNDUsIDExNSwgMjEwLCA0NCwgMTUsIDUsIAorICAgIDIxMCwgNDMsIDE1LCA1LCAyMTAsIDQxLCAxNSwgNSwgMjEwLCA0MiwgMjM1LCA5LCAyMTYsIDI0MCwgMTUsIDUsIDIxMCwgCisgICAgMzYsIDE1LCA1LCAyMTAsIDI4LCAxNSwgNSwgMjEwLCAxMywgMTUsIDUsIDIxMCwgMTEsIDE1LCA1LCAyMTAsIDEyLCAzMCwgCisgICAgNjEsIDE1LCA1LCAyMTAsIDEwLCAxNSwgNSwgMjEwLCA5LCAxNSwgMTMyLCA1LCAxMTMsIDI1MywgMjM5LCAxNSwgMTMyLCA1LCAKKyAgICAxMzQsIDI1MywgMjM5LCAxNSwgMTMyLCA1LCAyNDQsIDE5LCAyNTMsIDIzOSwgMTUsIDEzMiwgNSwgMjQ0LCA4OSwgMjUzLCAKKyAgICAyMzksIDE1LCAxMzIsIDUsIDIxOSwgMTI3LCAyNTMsIDIzOSwgMTUsIDEzMiwgNSwgMjIwLCAxMjQsIDI1MywgMjM5LCAxNSwgCisgICAgMTMyLCA1LCAyNDUsIDIwMSwgMjUzLCAyMzksIDE1LCAxMzIsIDUsIDIyOCwgMjA1LCAyNTMsIDIzOSwgMTUsIDEzMiwgNSwgCisgICAgMTM0LCAyNDcsIDE5NSwgMTUsIDEzMiwgNSwgMjQ0LCAxOSwgMjQ3LCAxOTUsIDE1LCAxMzIsIDUsIDI0NCwgODksIDI0NywgCisgICAgMTk1LCAxNSwgMTMyLCA1LCAyMTksIDEyNywgMjQ3LCAxOTUsIDE1LCAxMzIsIDUsIDIyMCwgMTI0LCAyNDcsIDE5NSwgMTUsIAorICAgIDEzMiwgNSwgMjQ1LCAyMDEsIDI0NywgMTk1LCAxNSwgMTMyLCA1LCAyMjgsIDIwNSwgMjQ3LCAxOTUsIDE1LCAxMzIsIDUsIAorICAgIDI0NCwgMTksIDY5LCAxNSwgMTMyLCA1LCAyNDQsIDg5LCA2OSwgMTUsIDEzMiwgNSwgMjE5LCAxMjcsIDY5LCAxNSwgMTMyLCAKKyAgICA1LCAyMjAsIDEyNCwgNjksIDE1LCAxMzIsIDUsIDI0NSwgMjAxLCA2OSwgMTUsIDEzMiwgNSwgMjI4LCAyMDUsIDY5LCAxNSwgCisgICAgMTMyLCA1LCAxMjMsIDI0MywgNDUsIDE1LCAxMzIsIDUsIDExMywgMjQzLCA0NSwgMTUsIDEzMiwgNSwgMTM0LCAyNDMsIDQ1LCAKKyAgICAxNSwgMTMyLCA1LCAyNDQsIDE5LCAyNDMsIDQ1LCAxNSwgMTMyLCA1LCAyNDQsIDg5LCAyNDMsIDQ1LCAxNSwgMTMyLCA1LCAKKyAgICAyMTksIDEyNywgMjQzLCA0NSwgMTUsIDEzMiwgNSwgMjIwLCAxMjQsIDI0MywgNDUsIDE1LCAxMzIsIDUsIDI0NSwgMjAxLCAKKyAgICAyNDMsIDQ1LCAxNSwgMTMyLCA1LCAyMjgsIDIwNSwgMjQzLCA0NSwgMTUsIDEzMiwgNSwgMTIzLCAyNDMsIDQyLCAxNSwgCisgICAgMTMyLCA1LCAxMTMsIDI0MywgNDIsIDE1LCAxMzIsIDUsIDEzNCwgMjQzLCA0MiwgMTUsIDEzMiwgNSwgMjQ0LCAxOSwgMjQzLCAKKyAgICA0MiwgMTUsIDEzMiwgNSwgMjQ0LCA4OSwgMjQzLCA0MiwgMTUsIDEzMiwgNSwgMTEzLCAyMjAsIDgwLCAxNSwgMTMyLCA1LCAKKyAgICAxMzQsIDIyMCwgODAsIDE1LCAxMzIsIDUsIDEzNCwgMjIwLCA4MSwgMjE0LCAxMiwgMTcsIDE1LCAxMzIsIDUsIDI0NCwgMTksIAorICAgIDIyMCwgODAsIDE1LCAxMzIsIDUsIDI0NCwgODksIDIyMCwgODAsIDE1LCAxMzIsIDUsIDIxOSwgMTI3LCAyMjAsIDgwLCAxNSwgCisgICAgMTMyLCA1LCAyMjAsIDEyNCwgMjIwLCA4MCwgMTUsIDEzMiwgNSwgMjQ1LCAyMDEsIDIyMCwgODAsIDE1LCAxMzIsIDUsIAorICAgIDIyOCwgMjA1LCAyMjAsIDgwLCAxNSwgMTMyLCA1LCAxMjMsIDIyMCwgNzUsIDE1LCAxMzIsIDUsIDExMywgMjIwLCA3NSwgCisgICAgMTUsIDEzMiwgNSwgMTM0LCAyMjAsIDc1LCAxNSwgMTMyLCA1LCAxMzQsIDIyMCwgNzYsIDIxNCwgMTIsIDE3LCAxNSwgMTMyLCAKKyAgICA1LCAyNDQsIDE5LCAyMjAsIDc1LCAxNSwgMTMyLCA1LCAyNDQsIDg5LCAyMjAsIDc1LCAxNSwgMTMyLCA1LCAyMjAsIDgxLCAKKyAgICAzMCwgMjQzLCAxMjYsIDk2LCAyNDcsIDE5NSwgMTUsIDEzMiwgNSwgMjIwLCA4MSwgMzAsIDI0MywgMTI2LCA5NiwgMjMwLCAKKyAgICAxOTMsIDE1LCAxMzIsIDUsIDEyMywgMjUxLCAxMDMsIDE1LCAxMzIsIDUsIDExMywgMjUxLCAxMDMsIDE1LCAxMzIsIDUsIAorICAgIDEzNCwgMjUxLCAxMDMsIDE1LCAxMzIsIDUsIDEzNCwgMjUxLCAxMDQsIDIxNCwgMTIsIDE3LCAxNSwgMTMyLCA1LCAyNDQsIAorICAgIDE5LCAyNTEsIDEwMywgMTUsIDEzMiwgNSwgMjQ0LCA4OSwgMjUxLCAxMDMsIDE1LCAxMzIsIDUsIDEzNCwgMjE0LCAxMiwgCisgICAgMjQ0LCAyOCwgMjQ1LCA4MiwgMTUsIDEzMiwgNSwgMTM0LCAyMTQsIDEyLCAyNDQsIDI4LCAyNDUsIDc5LCAxNSwgMTMyLCA1LCAKKyAgICAyNDQsIDE5LCAyMTQsIDEyLCAyNDQsIDI4LCAyMzIsIDIyMywgMTUsIDEzMiwgNSwgMjQ0LCAxOSwgMjE0LCAxMiwgMjQ0LCAKKyAgICAyOCwgMjMyLCAyMjEsIDE1LCAxMzIsIDUsIDI0NCwgMTksIDIxNCwgMTIsIDI0NCwgMjgsIDIzMiwgMjI0LCA2MSwgMTUsIAorICAgIDEzMiwgNSwgMjQ0LCAxOSwgMjE0LCAxMiwgMjQ0LCAyOCwgMjMyLCAyMjQsIDI1MywgMTY2LCAxNSwgMTMyLCA1LCAyMTksIAorICAgIDEyNywgMjE0LCAxMiwgMjQ0LCAyOCwgMjUzLCAyMzYsIDE1LCAxMzIsIDUsIDIyMCwgMTI0LCAyMTQsIDEyLCAyNDQsIDI4LCAKKyAgICAyMzYsIDE1LCAxNSwgMTMyLCA1LCAyMjAsIDEyNCwgMjE0LCAxMiwgMjQ0LCAyOCwgMjM2LCAxNywgNjEsIDE1LCAxMzIsIDUsIAorICAgIDIyMCwgMTI0LCAyMTQsIDEyLCAyNDQsIDI4LCAyMzYsIDE3LCAyNTMsIDE2NiwgMTUsIDEzMiwgNSwgMjQ1LCAyMDEsIDIxNCwgCisgICAgMTIsIDI0NCwgMjgsIDIxNCwgMTIxLCAxNSwgMTMyLCA1LCAyNDUsIDIwMSwgMjE0LCAxMiwgMjQ0LCAyOCwgMjE0LCAxMjAsIAorICAgIDE1LCAxMzIsIDUsIDIyOCwgMjA1LCAyMTQsIDEyLCAyNDQsIDI4LCAyMzYsIDMxLCAxNSwgMTMyLCA1LCAyMjgsIDIwNSwgCisgICAgMjE0LCAxMiwgMjQ0LCAyOCwgMjM2LCAzMCwgMTUsIDEzMiwgNSwgMjI4LCAyMDUsIDIxNCwgMTIsIDI0NCwgMjgsIDIzNiwgCisgICAgMjksIDE1LCAxMzIsIDUsIDIyOCwgMjA1LCAyMTQsIDEyLCAyNDQsIDI4LCAyMzYsIDMyLCA2MSwgMTUsIDEzMiwgNSwgMTEzLCAKKyAgICAyNTMsIDI0MCwgMjE2LCAyNDAsIDE1LCAxMzIsIDUsIDEzNCwgMjUzLCAyNDAsIDIxNiwgMjQwLCAxNSwgMTMyLCA1LCAyNDQsIAorICAgIDE5LCAyNTMsIDI0MCwgMjE2LCAyNDAsIDE1LCAxMzIsIDUsIDI0NCwgODksIDI1MywgMjQwLCAyMTYsIDI0MCwgMTUsIDEzMiwgCisgICAgNSwgMjE5LCAxMjcsIDI1MywgMjQwLCAyMTYsIDI0MCwgMTUsIDEzMiwgNSwgMTIzLCAyNTIsIDE1OCwgMTUsIDEzMiwgNSwgCisgICAgMTEzLCAyNTIsIDE1OCwgMTUsIDEzMiwgNSwgMTM0LCAyNTIsIDE1OCwgMTUsIDEzMiwgNSwgMjQ0LCAxOSwgMjUyLCAxNTgsIAorICAgIDE1LCAxMzIsIDUsIDI0NCwgMTksIDI1MiwgMTU5LCAyMTQsIDEyLCAxNywgMTUsIDEzMiwgNSwgMjQ0LCA4OSwgMjUyLCAKKyAgICAxNTgsIDE1LCAxMzIsIDUsIDI0NCwgODksIDI1MiwgMTU5LCAyMTQsIDEyLCAxNywgMTUsIDEzMiwgNSwgMjI4LCAyMTUsIAorICAgIDE1LCAxMzIsIDUsIDIyOCwgMjE2LCAxNSwgMTMyLCA1LCAxMjMsIDI0NSwgNzgsIDE1LCAxMzIsIDUsIDExMywgMjQ1LCA3OCwgCisgICAgMTUsIDEzMiwgNSwgMTIzLCAyMTYsIDE3MCwgMjQ3LCAxOTUsIDE1LCAxMzIsIDUsIDExMywgMjE2LCAxNjgsIDI0NywgMTk1LCAKKyAgICAxNSwgMTMyLCA1LCAyNDQsIDg5LCAyMTksIDExNiwgMjQ3LCAxOTUsIDE1LCAxMzIsIDUsIDEyMywgMjE2LCAxNzAsIDIxNCwgCisgICAgMTIsIDI0NCwgMjgsIDYxLCAxNSwgMTMyLCA1LCAxMTMsIDIxNiwgMTY4LCAyMTQsIDEyLCAyNDQsIDI4LCA2MSwgMTUsIAorICAgIDEzMiwgNSwgMTIzLCAyNDUsIDE5NywgMjUzLCAyMzksIDE1LCAxMzIsIDUsIDEyMywgMjI0LCAyNSwgMjUzLCAyMzksIDE1LCAKKyAgICAxMzIsIDUsIDU1LCAyNTMsIDIyNywgMTIzLCAyMTksIDExNywgMTUsIDEzMiwgNSwgNTUsIDI1MywgMjI3LCAxMjMsIDIyNCwgCisgICAgMjQsIDE1LCAyMjQsIDE0NCwgNSwgNTUsIDI1MywgMjI3LCAyMTEsIDIwOSwgMjQ3LCAxODAsIDE1LCAyMjQsIDE0NCwgNSwgCisgICAgNjcsIDI0OSwgMjM0LCAxNSwgMjI0LCAxNDQsIDUsIDI0OCwgNywgMjQ5LCAyMzQsIDE1LCAyMjQsIDE0NCwgNSwgMjQ4LCA3LCAKKyAgICAyMTUsIDIyMiwgMTIsIDEzLCAyNTUsIDE2NCwgMTIsIDEzLCAyNTUsIDE2MywgMTIsIDEzLCAyNTUsIDE2MiwgMTIsIDEzLCAKKyAgICAyNTUsIDE2MSwgMTIsIDEzLCAyNTUsIDE2MCwgMTIsIDEzLCAyNTUsIDE1OSwgMTIsIDEzLCAyNTUsIDE1OCwgMTIsIDEzLCAKKyAgICAyNTUsIDE1NywgMTIsIDEzLCAyNTUsIDE1NiwgMTIsIDEzLCAyNTUsIDE1NSwgMTIsIDEzLCAyNTUsIDE1NCwgMTIsIDEzLCAKKyAgICAyNTUsIDE1MywgMTIsIDEzLCAyNTUsIDE1MiwgMTIsIDEzLCAyNTUsIDE1MSwgMTIsIDEzLCAyNTUsIDE1MCwgMTIsIDEzLCAKKyAgICAyNTUsIDE0OSwgMTIsIDEzLCAyNTUsIDE0OCwgMTIsIDEzLCAyNTUsIDE0NywgMTIsIDEzLCAyNTUsIDE0NiwgMTIsIDEzLCAKKyAgICAyNTUsIDE0NSwgMTIsIDEzLCAyNTUsIDE0NCwgMTIsIDEzLCAyNTUsIDE0MywgMTIsIDEzLCAyNTUsIDE0MiwgMTIsIDEzLCAKKyAgICAyNTUsIDE0MSwgMTIsIDEzLCAyNTUsIDE0MCwgMTIsIDEzLCAyNTUsIDEzOSwgMTIsIDEzLCAyNTUsIDEzOCwgMTIsIDEzLCAKKyAgICAyNTUsIDEzNywgMTIsIDEzLCAyNTUsIDEzNiwgMTIsIDEzLCAyNTUsIDEzNSwgMTIsIDEzLCAyNTUsIDEzNCwgMTIsIDEzLCAKKyAgICAyNTUsIDEzMywgMTIsIDEzLCAyNTUsIDEzMiwgMTIsIDEzLCAyNTUsIDEzMSwgMTIsIDEzLCAyNTUsIDEzMCwgMTIsIDEzLCAKKyAgICAyNTUsIDEyOSwgMTIsIDEzLCAyNTUsIDEyOCwgMTIsIDEzLCAyNTUsIDEyNywgMTIsIDEzLCAyNTUsIDEyNiwgMTIsIDEzLCAKKyAgICAyNTUsIDEyNSwgMTIsIDEzLCAyNTUsIDEyNCwgMTIsIDEzLCAyNTUsIDEyMywgMTIsIDEzLCAyNTUsIDEyMiwgMTIsIDEzLCAKKyAgICAyNTUsIDEyMSwgMTIsIDEzLCAyNTUsIDEyMCwgMTIsIDEzLCAyNTUsIDExOSwgMTIsIDEzLCAyNTUsIDExOCwgMTIsIDEzLCAKKyAgICAyNTUsIDExNywgMTIsIDEzLCAyNTUsIDExNiwgMTIsIDEzLCAyNTUsIDExNSwgMTIsIDEzLCAyNTUsIDExNCwgMTIsIDEzLCAKKyAgICAyNTUsIDExMywgMTIsIDEzLCAyNTUsIDExMiwgMTIsIDEzLCAyNTUsIDExMSwgMTIsIDEzLCAyNTUsIDExMCwgMTIsIDEzLCAKKyAgICAyNTUsIDEwOSwgMTIsIDEzLCAyNTUsIDEwOCwgMTIsIDEzLCAyNTUsIDEwNywgMTIsIDEzLCAyNTUsIDEwNiwgMTIsIDEzLCAKKyAgICAyNTUsIDEwNSwgMTIsIDEzLCAyNTUsIDEwNCwgMTIsIDEzLCAyNTUsIDEwMywgMTIsIDEzLCAyNTUsIDEwMiwgMTIsIDEzLCAKKyAgICAyNTUsIDEwMSwgMTIsIDEzLCAyNTUsIDEwMCwgMTIsIDEzLCAyNTUsIDk5LCAxMiwgMTMsIDI1NSwgOTgsIDEyLCAxMywgCisgICAgMjU1LCA5NywgMTIsIDEzLCAyNTUsIDk2LCAxMiwgMTMsIDI1NSwgOTUsIDEyLCAxMywgMjU1LCA5NCwgMTIsIDEzLCAyNTUsIAorICAgIDkzLCAxMiwgMTMsIDI1NSwgOTIsIDEyLCAxMywgMjU1LCA5MSwgMTIsIDEzLCAyNTUsIDkwLCAxMiwgMTMsIDI1NSwgODksIAorICAgIDEyLCAxMywgMjU1LCA4OCwgMTIsIDEzLCAyNTUsIDg3LCAxMiwgMTMsIDI1NSwgODYsIDEyLCAxMywgMjU1LCA4NSwgMTIsIAorICAgIDEzLCAyNTMsIDE2NCwgMTIsIDEzLCAyNTMsIDE2MiwgMTIsIDEzLCAyNTMsIDE2MCwgMTIsIDEzLCAyNTMsIDE1OCwgMTIsIAorICAgIDEzLCAyNTMsIDE1NiwgMTIsIDEzLCAyNTMsIDE1NSwgMTIsIDEzLCAyNTMsIDE1MywgMTIsIDEzLCAyNTMsIDE1MSwgMTIsIAorICAgIDEzLCAyNTMsIDE0OSwgMTIsIDEzLCAyNTMsIDE0NywgMTIsIDEzLCAyNTEsIDcwLCAxMiwgMTMsIDI1MSwgNjksIDEyLCAxMywgCisgICAgMjUxLCA2OCwgMTIsIDEzLCAyNTEsIDY3LCAxMiwgMTMsIDI1MSwgNjYsIDEyLCAxMywgMjUxLCA2NSwgMTIsIDEzLCAyNTEsIAorICAgIDY0LCAxMiwgMTMsIDI1MSwgNjMsIDEyLCAxMywgMjUxLCA2MiwgMTIsIDEzLCAyNTEsIDYxLCAxMiwgMTMsIDI1MSwgNjAsIAorICAgIDEyLCAxMywgMjUxLCA1OSwgMTIsIDEzLCAyNTEsIDU4LCAxMiwgMTMsIDI1MSwgNTcsIDEyLCAxMywgMjUxLCA1NiwgMTIsIAorICAgIDEzLCAyNTEsIDU1LCAxMiwgMTMsIDI1MSwgNTQsIDEyLCAxMywgMjUxLCA1MywgMTIsIDEzLCAyNTEsIDUyLCAxMiwgMTMsIAorICAgIDI1MSwgNTEsIDEyLCAxMywgMjUxLCA1MCwgMTIsIDEzLCAyNTEsIDQ5LCAxMiwgMTMsIDI1MSwgNDgsIDEyLCAxMywgMjUxLCAKKyAgICA0NywgMTIsIDEzLCAyNTEsIDQ2LCAxMiwgMTMsIDI1MSwgNDUsIDEyLCAxMywgMjUxLCA0NCwgMTIsIDEzLCAyNTEsIDQzLCAKKyAgICAxMiwgMTMsIDI0OSwgNjcsIDEyLCAxMywgMjQ5LCA2NiwgMTIsIDEzLCAyNDksIDY1LCAxMiwgMTMsIDI0OSwgNjQsIDEyLCAKKyAgICAxMywgMjQ5LCA2MywgMTIsIDEzLCAyNDksIDYyLCAxMiwgMTMsIDI0OSwgNjEsIDEyLCAxMywgMjQ5LCA2MCwgMTIsIDEzLCAKKyAgICAyNDksIDU5LCAxMiwgMTMsIDI0OSwgNTgsIDEyLCAxMywgMjQ5LCA1NywgMTIsIDEzLCAyNDksIDU2LCAxMiwgMTMsIDI0OSwgCisgICAgNTUsIDEyLCAxMywgMjQ5LCA1NCwgMTIsIDEzLCAyNDksIDUzLCAxMiwgMTMsIDI0OSwgNTIsIDEyLCAxMywgMjQ5LCA1MSwgCisgICAgMTIsIDEzLCAyNDksIDUwLCAxMiwgMTMsIDI0OSwgNDksIDEyLCAxMywgMjQ5LCA0OCwgMTIsIDEzLCAyNDksIDQ3LCAxMiwgCisgICAgMTMsIDI0OSwgNDYsIDEyLCAxMywgMjQ5LCA0NSwgMTIsIDEzLCAyNDksIDQ0LCAxMiwgMTMsIDI0OSwgNDMsIDEyLCAxMywgCisgICAgMjQ5LCA0MiwgMTIsIDEzLCAyNDksIDQxLCAxMiwgMTMsIDI0OSwgNDAsIDEyLCAxMywgMjQ5LCAzOSwgMTIsIDEzLCAyNDksIAorICAgIDM4LCAxMiwgMTMsIDI0OSwgMzcsIDEyLCAxMywgMjQ5LCAzNiwgMTIsIDEzLCAyNDksIDM1LCAxMiwgMTMsIDI0OSwgMzQsIAorICAgIDEyLCAxMywgMjQ5LCAzMywgMTIsIDEzLCAyNDksIDMyLCAxMiwgMTMsIDI0OSwgMzEsIDEyLCAxMywgMjQ5LCAzMCwgMTIsIAorICAgIDEzLCAyNDksIDI5LCAxMiwgMTMsIDI0OSwgMjgsIDEyLCAxMywgMjQ5LCAyNywgMTIsIDEzLCAyNDksIDI2LCAxMiwgMTMsIAorICAgIDI0OSwgMjUsIDEyLCAxMywgMjQ5LCAyNCwgMTIsIDEzLCAyNDksIDIzLCAxMiwgMTMsIDI0OSwgMjIsIDEyLCAxMywgMjQ5LCAKKyAgICAyMSwgMTIsIDEzLCAyNDksIDIwLCAxMiwgMTMsIDI0OSwgMTksIDEyLCAxMywgMjQ5LCAxOCwgMTIsIDEzLCAyNDksIDE3LCAKKyAgICAxMiwgMTMsIDI0OSwgMTYsIDEyLCAxMywgMjQ5LCAxNSwgMTIsIDEzLCAyNDksIDE0LCAxMiwgMTMsIDI0OSwgMTMsIDEyLCAKKyAgICAxMywgMjQ5LCAxMiwgMTIsIDEzLCAyNDksIDExLCAxMiwgMTMsIDI0OSwgMTAsIDEyLCAxMywgMjQ5LCA5LCAxMiwgMTMsIAorICAgIDI0OSwgOCwgMTIsIDEzLCAyNDksIDcsIDEyLCAxMywgMjQ5LCA2LCAxMiwgMTMsIDI0OSwgNSwgMTIsIDEzLCAyNDksIDQsIAorICAgIDEyLCAxMywgMjQ5LCAzLCAxMiwgMTMsIDI0OSwgMiwgMTIsIDEzLCAyNDksIDEsIDEyLCAxMywgMjQ5LCAwLCAxMiwgMTMsIAorICAgIDI0OCwgMjU1LCAxMiwgMTMsIDI0OCwgMjU0LCAxMiwgMTMsIDI0OCwgMjUzLCAxMiwgMTMsIDI0OCwgMjUyLCAxMiwgMTMsIAorICAgIDI0OCwgMjUxLCAxMiwgMTMsIDI0OCwgMjUwLCAxMiwgMTMsIDI0OCwgMjQ5LCAxMiwgMTMsIDI0OCwgMjQ4LCAxMiwgMTMsIAorICAgIDI0OCwgMjQ3LCAxMiwgMTMsIDI0OCwgMjQ2LCAxMiwgMTMsIDI0OCwgMjQ1LCAxMiwgMTMsIDI0OCwgMjQ0LCAxMiwgMTMsIAorICAgIDI0OCwgMjQzLCAxMiwgMTMsIDI0OCwgMjQyLCAxMiwgMTMsIDI0OCwgMjQxLCAxMiwgMTMsIDI0OCwgMjQwLCAxMiwgMTMsIAorICAgIDI0OCwgMjM5LCAxMiwgMTMsIDI0OCwgMjM4LCAxMiwgMTMsIDI0OCwgMjM3LCAxMiwgMTMsIDI0OCwgMjM2LCAxMiwgMTMsIAorICAgIDI0OCwgMjM1LCAxMiwgMTMsIDI0OCwgMjM0LCAxMiwgMTMsIDI0OCwgMjMzLCAxMiwgMTMsIDI0OCwgMjMyLCAxMiwgMTMsIAorICAgIDI0NiwgMzEsIDEyLCAxMywgMjQ2LCAzMCwgMTIsIDEzLCAyNDYsIDI5LCAxMiwgMTMsIDI0NiwgMjgsIDEyLCAxMywgMjQ2LCAKKyAgICAyNywgMTIsIDEzLCAyNDYsIDI2LCAxMiwgMTMsIDI0NiwgMjUsIDEyLCAxMywgMjQ2LCAyNCwgMTIsIDEzLCAyNDYsIDIzLCAKKyAgICAxMiwgMTMsIDI0NiwgMjIsIDEyLCAxMywgMjQ2LCAyMSwgMTIsIDEzLCAyNDYsIDIwLCAxMiwgMTMsIDI0NiwgMTksIDEyLCAKKyAgICAxMywgMjQ2LCAxOCwgMTIsIDEzLCAyNDYsIDE3LCAxMiwgMTMsIDI0NiwgMTYsIDEyLCAxMywgMjQ2LCAxNSwgMTIsIDEzLCAKKyAgICAyNDYsIDE0LCAxMiwgMTMsIDI0NiwgMTMsIDEyLCAxMywgMjQ2LCAxMiwgMTIsIDEzLCAyNDYsIDExLCAxMiwgMTMsIDI0NiwgCisgICAgMTAsIDEyLCAxMywgMjQ2LCA5LCAxMiwgMTMsIDI0NiwgOCwgMTIsIDEzLCAyNDYsIDcsIDEyLCAxMywgMjQ2LCA2LCAxMiwgCisgICAgMTMsIDI0NiwgNSwgMTIsIDEzLCAyNDYsIDQsIDEyLCAxMywgMjQ2LCAzLCAxMiwgMTMsIDI0NiwgMiwgMTIsIDEzLCAyNDYsIAorICAgIDEsIDEyLCAxMywgMjQ2LCAwLCAxMiwgMTMsIDI0NSwgMjU1LCAxMiwgMTMsIDI0NSwgMjU0LCAxMiwgMTMsIDI0NSwgMjUzLCAKKyAgICAxMiwgMTMsIDI0NSwgMjUyLCAxMiwgMTMsIDI0NSwgMjUxLCAxMiwgMTMsIDI0NSwgMjUwLCAxMiwgMTMsIDI0NSwgMjQ5LCAKKyAgICAxMiwgMTMsIDI0NSwgMjQ4LCAxMiwgMTMsIDI0NSwgMjQ3LCAxMiwgMTMsIDI0NSwgMjQ2LCAxMiwgMTMsIDI0NSwgMjQ1LCAKKyAgICAxMiwgMTMsIDI0NSwgMjQ0LCAxMiwgMTMsIDI0NSwgMTMsIDEyLCAxMywgMjQ1LCAxMiwgMTIsIDEzLCAyNDUsIDExLCAxMiwgCisgICAgMTMsIDI0NSwgMTAsIDEyLCAxMywgMjQ1LCA5LCAxMiwgMTMsIDI0NSwgOCwgMTIsIDEzLCAyNDUsIDcsIDEyLCAxMywgMjQ1LCAKKyAgICA2LCAxMiwgMTMsIDI0NSwgNSwgMTIsIDEzLCAyNDUsIDQsIDEyLCAxMywgMjQ1LCAzLCAxMiwgMTMsIDI0NSwgMiwgMTIsIAorICAgIDEzLCAyNDUsIDEsIDEyLCAxMywgMjQ1LCAwLCAxMiwgMTMsIDI0NCwgMjU1LCAxMiwgMTMsIDI0NCwgMjU0LCAxMiwgMTMsIAorICAgIDI0NCwgMjUzLCAxMiwgMTMsIDI0NCwgMjUyLCAxMiwgMTMsIDI0NCwgMjUxLCAxMiwgMTMsIDI0NCwgMjUwLCAxMiwgMTMsIAorICAgIDI0NCwgMjQ5LCAxMiwgMTMsIDI0NCwgMjQ4LCAxMiwgMTMsIDI0NCwgMjQ3LCAxMiwgMTMsIDI0NCwgMjQ2LCAxMiwgMTMsIAorICAgIDI0NCwgMjQ1LCAxMiwgMTMsIDI0NCwgMjQ0LCAxMiwgMTMsIDI0NCwgMjQzLCAxMiwgMTMsIDI0NCwgMjQyLCAxMiwgMTMsIAorICAgIDI0NCwgMjQxLCAxMiwgMTMsIDI0NCwgMjQwLCAxMiwgMTMsIDI0NCwgMjM5LCAxMiwgMTMsIDI0NCwgMjM4LCAxMiwgMTMsIAorICAgIDI0NCwgMjM3LCAxMiwgMTMsIDI0NCwgMjM2LCAxMiwgMTMsIDI0NCwgMjM1LCAxMiwgMTMsIDI0NCwgMjM0LCAxMiwgMTMsIAorICAgIDI0NCwgMjMzLCAxMiwgMTMsIDI0NCwgMjMyLCAxMiwgMTMsIDI0NCwgMjMxLCAxMiwgMTMsIDI0NCwgMjMwLCAxMiwgMTMsIAorICAgIDI0NCwgMjI5LCAxMiwgMTMsIDI0NCwgMjI4LCAxMiwgMTMsIDI0NCwgMjI3LCAxMiwgMTMsIDI0NCwgMjI2LCAxMiwgMTMsIAorICAgIDI0NCwgMjI1LCAxMiwgMTMsIDI0NCwgMjI0LCAxMiwgMTMsIDI0NCwgMjIzLCAxMiwgMTMsIDI0NCwgMjIyLCAxMiwgMTMsIAorICAgIDI0NCwgMjIxLCAxMiwgMTMsIDI0NCwgMjIwLCAxMiwgMTMsIDI0NCwgMjE5LCAxMiwgMTMsIDI0NCwgMjE4LCAxMiwgMTMsIAorICAgIDI0NCwgMjE3LCAxMiwgMTMsIDI0NCwgMjE2LCAxMiwgMTMsIDI0NCwgMjE1LCAxMiwgMTMsIDI0NCwgMjE0LCAxMiwgMTMsIAorICAgIDI0NCwgMjEzLCAxMiwgMTMsIDI0NCwgMjEyLCAxMiwgMTMsIDI0NCwgMjExLCAxMiwgMTMsIDI0NCwgMjEwLCAxMiwgMTMsIAorICAgIDI0NCwgMjA5LCAxMiwgMTMsIDI0NCwgMjA4LCAxMiwgMTMsIDI0NCwgMjA3LCAxMiwgMTMsIDI0NCwgMjA2LCAxMiwgMTMsIAorICAgIDI0NCwgMjA1LCAxMiwgMTMsIDI0MywgMjA4LCAxMiwgMTMsIDI0MywgMjA3LCAxMiwgMTMsIDI0MywgMjA2LCAxMiwgMTMsIAorICAgIDI0MywgMjA1LCAxMiwgMTMsIDI0MywgMjA0LCAxMiwgMTMsIDI0MywgMjAzLCAxMiwgMTMsIDI0MywgMjAyLCAxMiwgMTMsIAogICAgIDI0MywgMjAxLCAxMiwgMTMsIDI0MywgMjAwLCAxMiwgMTMsIDI0MywgMTk5LCAxMiwgMTMsIDI0MywgMTk4LCAxMiwgMTMsIAogICAgIDI0MywgMTk3LCAxMiwgMTMsIDI0MywgMTk2LCAxMiwgMTMsIDI0MywgMTk1LCAxMiwgMTMsIDI0MywgMTk0LCAxMiwgMTMsIAogICAgIDI0MywgMTkzLCAxMiwgMTMsIDI0MywgMTkyLCAxMiwgMTMsIDI0MywgMTkxLCAxMiwgMTMsIDI0MywgMTkwLCAxMiwgMTMsIApAQCAtMTIwMTUsODEgKzEyMDE2LDgwIEBACiAgICAgMjQzLCAxNTcsIDEyLCAxMywgMjQzLCAxNTYsIDEyLCAxMywgMjQzLCAxNTUsIDEyLCAxMywgMjQzLCAxNTQsIDEyLCAxMywgCiAgICAgMjQzLCAxNTMsIDEyLCAxMywgMjQzLCAxNTIsIDEyLCAxMywgMjQzLCAxNTEsIDEyLCAxMywgMjQzLCAxNTAsIDEyLCAxMywgCiAgICAgMjQzLCAxNDksIDEyLCAxMywgMjQzLCAxNDgsIDEyLCAxMywgMjQzLCAxNDcsIDEyLCAxMywgMjQzLCAxNDYsIDEyLCAxMywgCi0gICAgMjQzLCAxNDUsIDEyLCAxMywgMjQzLCAxNDQsIDEyLCAxMywgMjQzLCAxNDMsIDEyLCAxMywgMjQzLCAxNDIsIDEyLCAxMywgCi0gICAgMjQzLCAxNDEsIDEyLCAxMywgMjQzLCAxNDAsIDEyLCAxMywgMjQzLCAxMzksIDEyLCAxMywgMjQzLCAxMzgsIDEyLCAxMywgCi0gICAgMjQyLCA1OCwgMTIsIDEzLCAyNDIsIDU3LCAxMiwgMTMsIDI0MiwgNTYsIDEyLCAxMywgMjQyLCA1NSwgMTIsIDEzLCAyNDIsIAotICAgIDU0LCAxMiwgMTMsIDI0MiwgNTMsIDEyLCAxMywgMjQyLCA1MiwgMTIsIDEzLCAyNDIsIDUxLCAxMiwgMTMsIDI0MiwgNTAsIAorICAgIDI0MywgMTQ1LCAxMiwgMTMsIDI0MiwgNjUsIDEyLCAxMywgMjQyLCA2NCwgMTIsIDEzLCAyNDIsIDYzLCAxMiwgMTMsIDI0MiwgCisgICAgNjIsIDEyLCAxMywgMjQyLCA2MSwgMTIsIDEzLCAyNDIsIDYwLCAxMiwgMTMsIDI0MiwgNTksIDEyLCAxMywgMjQyLCA1OCwgCisgICAgMTIsIDEzLCAyNDIsIDU3LCAxMiwgMTMsIDI0MCwgMTQ1LCAxMiwgMTMsIDI0MCwgMTQ0LCAxMiwgMTMsIDI0MCwgMTQzLCAKKyAgICAxMiwgMTMsIDI0MCwgMTQyLCAxMiwgMTMsIDI0MCwgMTQxLCAxMiwgMTMsIDI0MCwgMTQwLCAxMiwgMTMsIDI0MCwgMTM5LCAKICAgICAxMiwgMTMsIDI0MCwgMTM4LCAxMiwgMTMsIDI0MCwgMTM3LCAxMiwgMTMsIDI0MCwgMTM2LCAxMiwgMTMsIDI0MCwgMTM1LCAKICAgICAxMiwgMTMsIDI0MCwgMTM0LCAxMiwgMTMsIDI0MCwgMTMzLCAxMiwgMTMsIDI0MCwgMTMyLCAxMiwgMTMsIDI0MCwgMTMxLCAKICAgICAxMiwgMTMsIDI0MCwgMTMwLCAxMiwgMTMsIDI0MCwgMTI5LCAxMiwgMTMsIDI0MCwgMTI4LCAxMiwgMTMsIDI0MCwgMTI3LCAKLSAgICAxMiwgMTMsIDI0MCwgMTI2LCAxMiwgMTMsIDI0MCwgMTI1LCAxMiwgMTMsIDI0MCwgMTI0LCAxMiwgMTMsIDI0MCwgMTIzLCAKLSAgICAxMiwgMTMsIDI0MCwgMTIyLCAxMiwgMTMsIDI0MCwgMTIxLCAxMiwgMTMsIDI0MCwgMTIwLCAxMiwgMTMsIDIzNSwgMjIsIAotICAgIDEyLCAxMywgMjM1LCAyMSwgMTIsIDEzLCAyMzUsIDIwLCAxMiwgMTMsIDIzNSwgMTksIDEyLCAxMywgMjM1LCAxOCwgMTIsIAotICAgIDEzLCAyMzUsIDE3LCAxMiwgMTMsIDIzNSwgMTYsIDEyLCAxMywgMjM1LCAxNSwgMTIsIDEzLCAyMzMsIDE0NiwgMTIsIDEzLCAKLSAgICAyMzMsIDE0NSwgMTIsIDEzLCAyMzMsIDE0NCwgMTIsIDEzLCAyMzMsIDE0MywgMTIsIDEzLCAyMzMsIDE0MiwgMTIsIDEzLCAKLSAgICAyMzMsIDE0MSwgMTIsIDEzLCAyMzMsIDE0MCwgMTIsIDEzLCAyMzMsIDEzOSwgMTIsIDEzLCAyMzMsIDEzOCwgMTIsIDEzLCAKLSAgICAyMzMsIDEzNywgMTIsIDEzLCAyMzIsIDQ5LCAxMiwgMTMsIDIzMiwgNDgsIDEyLCAxMywgMjMyLCA0NywgMTIsIDEzLCAyMzIsIAotICAgIDQ2LCAxMiwgMTMsIDIzMiwgNDUsIDEyLCAxMywgMjMyLCA0NCwgMTIsIDEzLCAyMzIsIDQzLCAxMiwgMTMsIDIzMiwgNDIsIAotICAgIDEyLCAxMywgMjMyLCA0MSwgMTIsIDEzLCAyMzIsIDQwLCAxMiwgMTMsIDIzMiwgMzksIDEyLCAxMywgMjMyLCAzOCwgMTIsIAotICAgIDEzLCAyMzIsIDM3LCAxMiwgMTMsIDIzMiwgMzYsIDEyLCAxMywgMjMyLCAzNSwgMTIsIDEzLCAyMzIsIDM0LCAxMiwgMTMsIAotICAgIDIzMiwgMzMsIDEyLCAxMywgMjMyLCAzMiwgMTIsIDEzLCAyMzIsIDMxLCAxMiwgMTMsIDIzMiwgMzAsIDEyLCAxMywgMjMyLCAKLSAgICAyOSwgMTIsIDEzLCAyMzIsIDI4LCAxMiwgMTMsIDIzMiwgMjcsIDEyLCAxMywgMjMyLCAyNiwgMTIsIDEzLCAyMzIsIDI1LCAKLSAgICAxMiwgMTMsIDIzMiwgMjQsIDEyLCAxMywgMjMyLCAyMywgMTIsIDEzLCAyMzIsIDIyLCAxMiwgMTMsIDIzMiwgMjEsIDEyLCAKLSAgICAxMywgMjMyLCAyMCwgMTIsIDEzLCAyMzIsIDE5LCAxMiwgMTMsIDIzMiwgMTgsIDEyLCAxMywgMjMyLCAxNywgMTIsIDEzLCAKLSAgICAyMzIsIDE2LCAxMiwgMTMsIDIzMiwgMTUsIDEyLCAxMywgMjMyLCAxNCwgMTIsIDEzLCAyMzIsIDEzLCAxMiwgMTMsIDIzMiwgCi0gICAgMTIsIDEyLCAxMywgMjMyLCAxMSwgMTIsIDEzLCAyMzIsIDEwLCAxMiwgMTMsIDIzMiwgOSwgMTIsIDEzLCAyMzIsIDgsIDEyLCAKLSAgICAxMywgMjMyLCA3LCAxMiwgMTMsIDIzMiwgNiwgMTIsIDEzLCAyMzIsIDUsIDEyLCAxMywgMjMyLCA0LCAxMiwgMTMsIDIzMiwgCi0gICAgMywgMTIsIDEzLCAyMzIsIDIsIDEyLCAxMywgMjMyLCAxLCAxMiwgMTMsIDIzMiwgMCwgMTIsIDEzLCAyMzEsIDI1NSwgMTIsIAotICAgIDEzLCAyMzEsIDI1NCwgMTIsIDEzLCAyMzEsIDI1MywgMTIsIDEzLCAyMzEsIDI1MiwgMTIsIDEzLCAyMzEsIDI1MSwgMTIsIAotICAgIDEzLCAyMzEsIDI1MCwgMTIsIDEzLCAyMzEsIDI0OSwgMTIsIDEzLCAyMzEsIDI0OCwgMTIsIDEzLCAyMzEsIDI0NywgMTIsIAotICAgIDEzLCAyMzEsIDI0NiwgMTIsIDEzLCAyMzEsIDI0NSwgMTIsIDEzLCAyMzEsIDI0NCwgMTIsIDEzLCAyMzEsIDI0MywgMTIsIAotICAgIDEzLCAyMzEsIDI0MiwgMTIsIDEzLCAyMzEsIDI0MSwgMTIsIDEzLCAyMzEsIDI0MCwgMTIsIDEzLCAyMzAsIDIyLCAxMiwgCi0gICAgMTMsIDIzMCwgMjEsIDEyLCAxMywgMjMwLCAyMCwgMTIsIDEzLCAyMzAsIDE5LCAxMiwgMTMsIDIzMCwgMTgsIDEyLCAxMywgCi0gICAgMjMwLCAxNywgMTIsIDEzLCAyMzAsIDE2LCAxMiwgMTMsIDIzMCwgMTUsIDEyLCAxMywgMjMwLCAxNCwgMTIsIDEzLCAyMzAsIAotICAgIDEzLCAxMiwgMTMsIDIzMCwgMTIsIDEyLCAxMywgMjMwLCAxMSwgMTIsIDEzLCAyMzAsIDEwLCAxMiwgMTMsIDIzMCwgOSwgCi0gICAgMTIsIDEzLCAyMzAsIDgsIDEyLCAxMywgMjMwLCA3LCAxMiwgMTMsIDIzMCwgNiwgMTIsIDEzLCAyMzAsIDUsIDEyLCAxMywgCi0gICAgMjMwLCA0LCAxMiwgMTMsIDIzMCwgMywgMTIsIDEzLCAyMzAsIDIsIDEyLCAxMywgMjMwLCAxLCAxMiwgMTMsIDIzMCwgMCwgCi0gICAgMTIsIDEzLCAyMjksIDI1NSwgMTIsIDEzLCAyMjksIDI1NCwgMTIsIDEzLCAyMjksIDI1MywgMTIsIDEzLCAyMjksIDI1MiwgCi0gICAgMTIsIDEzLCAyMjksIDI1MSwgMTIsIDEzLCAyMjksIDI1MCwgMTIsIDEzLCAyMjksIDI0OSwgMTIsIDEzLCAyMjksIDI0OCwgCi0gICAgMTIsIDEzLCAyMjksIDI0NywgMTIsIDEzLCAyMjksIDI0NiwgMTIsIDEzLCAyMjksIDI0NSwgMTIsIDEzLCAyMjksIDI0NCwgCi0gICAgMTIsIDEzLCAyMjksIDI0MywgMTIsIDEzLCAyMjksIDI0MiwgMTIsIDEzLCAyMjksIDI0MSwgMTIsIDEzLCAyMjksIDI0MCwgCi0gICAgMTIsIDEzLCAyMjksIDIzOSwgMTIsIDEzLCAyMjksIDIzOCwgMTIsIDEzLCAyMjksIDIzNywgMTIsIDEzLCAyMjksIDIzNiwgCi0gICAgMTIsIDEzLCAyMjksIDIzNSwgMTIsIDEzLCAyMjksIDIzNCwgMTIsIDEzLCAyMjksIDIzMywgMTIsIDEzLCAyMjksIDIzMiwgCi0gICAgMTIsIDEzLCAyMjksIDIzMSwgMTIsIDEzLCAyMjksIDIzMCwgMTIsIDEzLCAyMjgsIDEzNCwgMTIsIDEzLCAyMjgsIDEzMywgCi0gICAgMTIsIDEzLCAyMjgsIDEzMiwgMTIsIDEzLCAyMjgsIDEzMSwgMTIsIDEzLCAyMjgsIDEzMCwgMTIsIDEzLCAyMjgsIDEyOSwgCi0gICAgMTIsIDEzLCAyMjgsIDEyOCwgMTIsIDEzLCAyMjgsIDEyNywgMTIsIDEzLCAyMjgsIDEyNiwgMTIsIDEzLCAyMjgsIDEyNSwgCi0gICAgMTIsIDEzLCAyMjgsIDEyNCwgMTIsIDEzLCAyMjgsIDEyMywgMTIsIDEzLCAyMjgsIDEyMiwgMTIsIDEzLCAyMjgsIDEyMSwgCi0gICAgMTIsIDEzLCAyMjgsIDEyMCwgMTIsIDEzLCAyMjgsIDExOSwgMTIsIDEzLCAyMjgsIDExOCwgMTIsIDEzLCAyMjgsIDExNywgCi0gICAgMTIsIDEzLCAyMjgsIDExNiwgMTIsIDEzLCAyMjgsIDExNSwgMTIsIDEzLCAyMjgsIDExNCwgMTIsIDEzLCAyMjgsIDExMywgCi0gICAgMTIsIDEzLCAyMjcsIDIzNiwgMTIsIDEzLCAyMjcsIDIzNSwgMTIsIDEzLCAyMjcsIDIzNCwgMTIsIDEzLCAyMjcsIDIzMywgCi0gICAgMTIsIDEzLCAyMjcsIDIzMiwgMTIsIDEzLCAyMjcsIDIzMSwgMTIsIDEzLCAyMjcsIDIzMCwgMTIsIDEzLCAyMjcsIDIyOSwgCi0gICAgMTIsIDEzLCAyMjcsIDIyOCwgMTIsIDEzLCAyMjcsIDIyNywgMTIsIDEzLCAyMjcsIDIyNiwgMTIsIDEzLCAyMjcsIDIyNSwgCi0gICAgMTIsIDEzLCAyMjcsIDIyNCwgMTIsIDEzLCAyMjcsIDIyMywgMTIsIDEzLCAyMjcsIDIyMiwgMTIsIDEzLCAyMjcsIDIyMSwgCi0gICAgMTIsIDEzLCAyMjcsIDIyMCwgMTIsIDEzLCAyMjcsIDIxOSwgMTIsIDEzLCAyMjcsIDIxOCwgMTIsIDEzLCAyMjcsIDIxNywgCi0gICAgMTIsIDEzLCAyMjcsIDIxNiwgMTIsIDEzLCAyMjcsIDIxNSwgMTIsIDEzLCAyMjcsIDIxNCwgMTIsIDEzLCAyMjcsIDIxMywgCi0gICAgMTIsIDEzLCAyMjcsIDIxMiwgMTIsIDEzLCAyMjcsIDIxMSwgMTIsIDEzLCAyMjcsIDc2LCAxMiwgMTMsIDIyNywgNzUsIDEyLCAKLSAgICAxMywgMjI3LCA3NCwgMTIsIDEzLCAyMjcsIDczLCAxMiwgMTMsIDIyNywgNzIsIDEyLCAxMywgMjI3LCA3MSwgMTIsIDEzLCAKLSAgICAyMjcsIDcwLCAxMiwgMTMsIDIyNywgNjksIDEyLCAxMywgMjI3LCA2OCwgMTIsIDEzLCAyMjcsIDY3LCAxMiwgMTMsIDIyNywgCi0gICAgNjYsIDEyLCAxMywgMjI3LCA2NSwgMTIsIDEzLCAyMjcsIDY0LCAxMiwgMTMsIDIyNywgNjMsIDEyLCAxMywgMjI3LCA2MiwgCi0gICAgMTIsIDEzLCAyMjcsIDYxLCAxMiwgMTMsIDIyNywgNjAsIDEyLCAxMywgMjI3LCA1OSwgMTIsIDEzLCAyMjcsIDU4LCAxMiwgCi0gICAgMTMsIDIyNywgNTcsIDEyLCAxMywgMjI3LCA1NiwgMTIsIDEzLCAyMjcsIDU1LCAxMiwgMTMsIDIyNywgNTQsIDEyLCAxMywgCi0gICAgMjI3LCA1MywgMTIsIDEzLCAyMjcsIDUyLCAxMiwgMTMsIDIyNywgNTEsIDEyLCAxMywgMjI3LCA1MCwgMTIsIDEzLCAyMjcsIAotICAgIDQ5LCAxMiwgMTMsIDIyNywgNDgsIDEyLCAxMywgMjI3LCA0NywgMTIsIDEzLCAyMjcsIDQ2LCAxMiwgMTMsIDIyNywgNDUsIAotICAgIDEyLCAxMywgMjI3LCA0NCwgMTIsIDEzLCAyMjcsIDQzLCAxMiwgMTMsIDIyNywgNDIsIDEyLCAxMywgMjI3LCA0MSwgMTIsIAotICAgIDEzLCAyMjcsIDQwLCAxMiwgMTMsIDIyNywgMzksIDEyLCAxMywgMjI3LCAzOCwgMTIsIDEzLCAyMjcsIDM3LCAxMiwgMTMsIAotICAgIDIyNywgMzYsIDEyLCAxMywgMjI3LCAzNSwgMTIsIDEzLCAyMjcsIDM0LCAxMiwgMTMsIDIyNywgMzMsIDEyLCAxMywgMjI3LCAKLSAgICAzMiwgMTIsIDEzLCAyMjcsIDMxLCAxMiwgMTMsIDIyNywgMzAsIDEyLCAxMywgMjI3LCAyOSwgMTIsIDEzLCAyMjcsIDI4LCAKLSAgICAxMiwgMTMsIDIyNywgMjcsIDEyLCAxMywgMjI3LCAyNiwgMTIsIDEzLCAyMjcsIDI1LCAxMiwgMTMsIDIyNywgMjQsIDEyLCAKLSAgICAxMywgMjI3LCAyMywgMTIsIDEzLCAyMjcsIDIyLCAxMiwgMTMsIDIyNywgMjEsIDEyLCAxMywgMjI3LCAyMCwgMTIsIDEzLCAKLSAgICAyMjcsIDE5LCAxMiwgMTMsIDIyNywgMTgsIDEyLCAxMywgMjI3LCAxNywgMTIsIDEzLCAyMjcsIDE2LCAxMiwgMTMsIDIyNywgCi0gICAgMTUsIDEyLCAxMywgMjI3LCAxNCwgMTIsIDEzLCAyMjcsIDEzLCAxMiwgMTMsIDIyNywgMTIsIDEyLCAxMywgMjI3LCAxMSwgCi0gICAgMTIsIDEzLCAyMjcsIDEwLCAxMiwgMTMsIDIyNywgOSwgMTIsIDEzLCAyMjcsIDgsIDEyLCAxMywgMjI3LCA3LCAxMiwgMTMsIAotICAgIDIyNywgNiwgMTIsIDEzLCAyMjcsIDUsIDEyLCAxMywgMjI3LCA0LCAxMiwgMTMsIDIyNywgMywgMTIsIDEzLCAyMjcsIDIsIAotICAgIDEyLCAxMywgMjI2LCAxMDQsIDEyLCAxMywgMjI2LCAxMDMsIDEyLCAxMywgMjI2LCAxMDIsIDEyLCAxMywgMjI2LCAxMDEsIAotICAgIDEyLCAxMywgMjI2LCAxMDAsIDEyLCAxMywgMjI2LCA5OSwgMTIsIDEzLCAyMjYsIDk4LCAxMiwgMTMsIDIyNiwgOTcsIDEyLCAKLSAgICAxMywgMjI2LCA5NiwgMTIsIDEzLCAyMjYsIDk1LCAxMiwgMTMsIDIyNiwgOTQsIDEyLCAxMywgMjI2LCA5MywgMTIsIDEzLCAKLSAgICAyMjYsIDkyLCAxMiwgMTMsIDIyNCwgOTUsIDEyLCAxMywgMjI0LCA5NCwgMTIsIDEzLCAyMjQsIDkzLCAxMiwgMTMsIDIyNCwgCi0gICAgOTIsIDEyLCAxMywgMjI0LCA5MSwgMTIsIDEzLCAyMjQsIDkwLCAxMiwgMTMsIDIyNCwgODksIDEyLCAxMywgMjIzLCAyMjIsIAorICAgIDEyLCAxMywgMjM1LCAyOCwgMTIsIDEzLCAyMzUsIDI3LCAxMiwgMTMsIDIzNSwgMjYsIDEyLCAxMywgMjM1LCAyNSwgMTIsIAorICAgIDEzLCAyMzUsIDI0LCAxMiwgMTMsIDIzNSwgMjMsIDEyLCAxMywgMjM1LCAyMiwgMTIsIDEzLCAyMzUsIDIxLCAxMiwgMTMsIAorICAgIDIzMywgMTUyLCAxMiwgMTMsIDIzMywgMTUxLCAxMiwgMTMsIDIzMywgMTUwLCAxMiwgMTMsIDIzMywgMTQ5LCAxMiwgMTMsIAorICAgIDIzMywgMTQ4LCAxMiwgMTMsIDIzMywgMTQ3LCAxMiwgMTMsIDIzMywgMTQ2LCAxMiwgMTMsIDIzMywgMTQ1LCAxMiwgMTMsIAorICAgIDIzMywgMTQ0LCAxMiwgMTMsIDIzMywgMTQzLCAxMiwgMTMsIDIzMiwgNTQsIDEyLCAxMywgMjMyLCA1MywgMTIsIDEzLCAKKyAgICAyMzIsIDUyLCAxMiwgMTMsIDIzMiwgNTEsIDEyLCAxMywgMjMyLCA1MCwgMTIsIDEzLCAyMzIsIDQ5LCAxMiwgMTMsIDIzMiwgCisgICAgNDgsIDEyLCAxMywgMjMyLCA0NywgMTIsIDEzLCAyMzIsIDQ2LCAxMiwgMTMsIDIzMiwgNDUsIDEyLCAxMywgMjMyLCA0NCwgCisgICAgMTIsIDEzLCAyMzIsIDQzLCAxMiwgMTMsIDIzMiwgNDIsIDEyLCAxMywgMjMyLCA0MSwgMTIsIDEzLCAyMzIsIDQwLCAxMiwgCisgICAgMTMsIDIzMiwgMzksIDEyLCAxMywgMjMyLCAzOCwgMTIsIDEzLCAyMzIsIDM3LCAxMiwgMTMsIDIzMiwgMzYsIDEyLCAxMywgCisgICAgMjMyLCAzNSwgMTIsIDEzLCAyMzIsIDM0LCAxMiwgMTMsIDIzMiwgMzMsIDEyLCAxMywgMjMyLCAzMiwgMTIsIDEzLCAyMzIsIAorICAgIDMxLCAxMiwgMTMsIDIzMiwgMzAsIDEyLCAxMywgMjMyLCAyOSwgMTIsIDEzLCAyMzIsIDI4LCAxMiwgMTMsIDIzMiwgMjcsIAorICAgIDEyLCAxMywgMjMyLCAyNiwgMTIsIDEzLCAyMzIsIDI1LCAxMiwgMTMsIDIzMiwgMjQsIDEyLCAxMywgMjMyLCAyMywgMTIsIAorICAgIDEzLCAyMzIsIDIyLCAxMiwgMTMsIDIzMiwgMjEsIDEyLCAxMywgMjMyLCAyMCwgMTIsIDEzLCAyMzIsIDE5LCAxMiwgMTMsIAorICAgIDIzMiwgMTgsIDEyLCAxMywgMjMyLCAxNywgMTIsIDEzLCAyMzIsIDE2LCAxMiwgMTMsIDIzMiwgMTUsIDEyLCAxMywgMjMyLCAKKyAgICAxNCwgMTIsIDEzLCAyMzIsIDEzLCAxMiwgMTMsIDIzMiwgMTIsIDEyLCAxMywgMjMyLCAxMSwgMTIsIDEzLCAyMzIsIDEwLCAKKyAgICAxMiwgMTMsIDIzMiwgOSwgMTIsIDEzLCAyMzIsIDgsIDEyLCAxMywgMjMyLCA3LCAxMiwgMTMsIDIzMiwgNiwgMTIsIDEzLCAKKyAgICAyMzIsIDUsIDEyLCAxMywgMjMyLCA0LCAxMiwgMTMsIDIzMiwgMywgMTIsIDEzLCAyMzIsIDIsIDEyLCAxMywgMjMyLCAxLCAKKyAgICAxMiwgMTMsIDIzMiwgMCwgMTIsIDEzLCAyMzEsIDI1NSwgMTIsIDEzLCAyMzEsIDI1NCwgMTIsIDEzLCAyMzEsIDI1MywgMTIsIAorICAgIDEzLCAyMzEsIDI1MiwgMTIsIDEzLCAyMzEsIDI1MSwgMTIsIDEzLCAyMzEsIDI1MCwgMTIsIDEzLCAyMzEsIDI0OSwgMTIsIAorICAgIDEzLCAyMzEsIDI0OCwgMTIsIDEzLCAyMzEsIDI0NywgMTIsIDEzLCAyMzEsIDI0NiwgMTIsIDEzLCAyMzEsIDI0NSwgMTIsIAorICAgIDEzLCAyMzAsIDI3LCAxMiwgMTMsIDIzMCwgMjYsIDEyLCAxMywgMjMwLCAyNSwgMTIsIDEzLCAyMzAsIDI0LCAxMiwgMTMsIAorICAgIDIzMCwgMjMsIDEyLCAxMywgMjMwLCAyMiwgMTIsIDEzLCAyMzAsIDIxLCAxMiwgMTMsIDIzMCwgMjAsIDEyLCAxMywgMjMwLCAKKyAgICAxOSwgMTIsIDEzLCAyMzAsIDE4LCAxMiwgMTMsIDIzMCwgMTcsIDEyLCAxMywgMjMwLCAxNiwgMTIsIDEzLCAyMzAsIDE1LCAKKyAgICAxMiwgMTMsIDIzMCwgMTQsIDEyLCAxMywgMjMwLCAxMywgMTIsIDEzLCAyMzAsIDEyLCAxMiwgMTMsIDIzMCwgMTEsIDEyLCAKKyAgICAxMywgMjMwLCAxMCwgMTIsIDEzLCAyMzAsIDksIDEyLCAxMywgMjMwLCA4LCAxMiwgMTMsIDIzMCwgNywgMTIsIDEzLCAyMzAsIAorICAgIDYsIDEyLCAxMywgMjMwLCA1LCAxMiwgMTMsIDIzMCwgNCwgMTIsIDEzLCAyMzAsIDMsIDEyLCAxMywgMjMwLCAyLCAxMiwgCisgICAgMTMsIDIzMCwgMSwgMTIsIDEzLCAyMzAsIDAsIDEyLCAxMywgMjI5LCAyNTUsIDEyLCAxMywgMjI5LCAyNTQsIDEyLCAxMywgCisgICAgMjI5LCAyNTMsIDEyLCAxMywgMjI5LCAyNTIsIDEyLCAxMywgMjI5LCAyNTEsIDEyLCAxMywgMjI5LCAyNTAsIDEyLCAxMywgCisgICAgMjI5LCAyNDksIDEyLCAxMywgMjI5LCAyNDgsIDEyLCAxMywgMjI5LCAyNDcsIDEyLCAxMywgMjI5LCAyNDYsIDEyLCAxMywgCisgICAgMjI5LCAyNDUsIDEyLCAxMywgMjI5LCAyNDQsIDEyLCAxMywgMjI5LCAyNDMsIDEyLCAxMywgMjI5LCAyNDIsIDEyLCAxMywgCisgICAgMjI5LCAyNDEsIDEyLCAxMywgMjI5LCAyNDAsIDEyLCAxMywgMjI5LCAyMzksIDEyLCAxMywgMjI5LCAyMzgsIDEyLCAxMywgCisgICAgMjI5LCAyMzcsIDEyLCAxMywgMjI5LCAyMzYsIDEyLCAxMywgMjI5LCAyMzUsIDEyLCAxMywgMjI4LCAxMzksIDEyLCAxMywgCisgICAgMjI4LCAxMzgsIDEyLCAxMywgMjI4LCAxMzcsIDEyLCAxMywgMjI4LCAxMzYsIDEyLCAxMywgMjI4LCAxMzUsIDEyLCAxMywgCisgICAgMjI4LCAxMzQsIDEyLCAxMywgMjI4LCAxMzMsIDEyLCAxMywgMjI4LCAxMzIsIDEyLCAxMywgMjI4LCAxMzEsIDEyLCAxMywgCisgICAgMjI4LCAxMzAsIDEyLCAxMywgMjI4LCAxMjksIDEyLCAxMywgMjI4LCAxMjgsIDEyLCAxMywgMjI4LCAxMjcsIDEyLCAxMywgCisgICAgMjI4LCAxMjYsIDEyLCAxMywgMjI4LCAxMjUsIDEyLCAxMywgMjI4LCAxMjQsIDEyLCAxMywgMjI4LCAxMjMsIDEyLCAxMywgCisgICAgMjI4LCAxMjIsIDEyLCAxMywgMjI4LCAxMjEsIDEyLCAxMywgMjI4LCAxMjAsIDEyLCAxMywgMjI4LCAxMTksIDEyLCAxMywgCisgICAgMjI4LCAxMTgsIDEyLCAxMywgMjI3LCAyNDEsIDEyLCAxMywgMjI3LCAyNDAsIDEyLCAxMywgMjI3LCAyMzksIDEyLCAxMywgCisgICAgMjI3LCAyMzgsIDEyLCAxMywgMjI3LCAyMzcsIDEyLCAxMywgMjI3LCAyMzYsIDEyLCAxMywgMjI3LCAyMzUsIDEyLCAxMywgCisgICAgMjI3LCAyMzQsIDEyLCAxMywgMjI3LCAyMzMsIDEyLCAxMywgMjI3LCAyMzIsIDEyLCAxMywgMjI3LCAyMzEsIDEyLCAxMywgCisgICAgMjI3LCAyMzAsIDEyLCAxMywgMjI3LCAyMjksIDEyLCAxMywgMjI3LCAyMjgsIDEyLCAxMywgMjI3LCAyMjcsIDEyLCAxMywgCisgICAgMjI3LCAyMjYsIDEyLCAxMywgMjI3LCAyMjUsIDEyLCAxMywgMjI3LCAyMjQsIDEyLCAxMywgMjI3LCAyMjMsIDEyLCAxMywgCisgICAgMjI3LCAyMjIsIDEyLCAxMywgMjI3LCAyMjEsIDEyLCAxMywgMjI3LCAyMjAsIDEyLCAxMywgMjI3LCAyMTksIDEyLCAxMywgCisgICAgMjI3LCAyMTgsIDEyLCAxMywgMjI3LCAyMTcsIDEyLCAxMywgMjI3LCAyMTYsIDEyLCAxMywgMjI3LCA4MCwgMTIsIDEzLCAKKyAgICAyMjcsIDc5LCAxMiwgMTMsIDIyNywgNzgsIDEyLCAxMywgMjI3LCA3NywgMTIsIDEzLCAyMjcsIDc2LCAxMiwgMTMsIDIyNywgCisgICAgNzUsIDEyLCAxMywgMjI3LCA3NCwgMTIsIDEzLCAyMjcsIDczLCAxMiwgMTMsIDIyNywgNzIsIDEyLCAxMywgMjI3LCA3MSwgCisgICAgMTIsIDEzLCAyMjcsIDcwLCAxMiwgMTMsIDIyNywgNjksIDEyLCAxMywgMjI3LCA2OCwgMTIsIDEzLCAyMjcsIDY3LCAxMiwgCisgICAgMTMsIDIyNywgNjYsIDEyLCAxMywgMjI3LCA2NSwgMTIsIDEzLCAyMjcsIDY0LCAxMiwgMTMsIDIyNywgNjMsIDEyLCAxMywgCisgICAgMjI3LCA2MiwgMTIsIDEzLCAyMjcsIDYxLCAxMiwgMTMsIDIyNywgNjAsIDEyLCAxMywgMjI3LCA1OSwgMTIsIDEzLCAyMjcsIAorICAgIDU4LCAxMiwgMTMsIDIyNywgNTcsIDEyLCAxMywgMjI3LCA1NiwgMTIsIDEzLCAyMjcsIDU1LCAxMiwgMTMsIDIyNywgNTQsIAorICAgIDEyLCAxMywgMjI3LCA1MywgMTIsIDEzLCAyMjcsIDUyLCAxMiwgMTMsIDIyNywgNTEsIDEyLCAxMywgMjI3LCA1MCwgMTIsIAorICAgIDEzLCAyMjcsIDQ5LCAxMiwgMTMsIDIyNywgNDgsIDEyLCAxMywgMjI3LCA0NywgMTIsIDEzLCAyMjcsIDQ2LCAxMiwgMTMsIAorICAgIDIyNywgNDUsIDEyLCAxMywgMjI3LCA0NCwgMTIsIDEzLCAyMjcsIDQzLCAxMiwgMTMsIDIyNywgNDIsIDEyLCAxMywgMjI3LCAKKyAgICA0MSwgMTIsIDEzLCAyMjcsIDQwLCAxMiwgMTMsIDIyNywgMzksIDEyLCAxMywgMjI3LCAzOCwgMTIsIDEzLCAyMjcsIDM3LCAKKyAgICAxMiwgMTMsIDIyNywgMzYsIDEyLCAxMywgMjI3LCAzNSwgMTIsIDEzLCAyMjcsIDM0LCAxMiwgMTMsIDIyNywgMzMsIDEyLCAKKyAgICAxMywgMjI3LCAzMiwgMTIsIDEzLCAyMjcsIDMxLCAxMiwgMTMsIDIyNywgMzAsIDEyLCAxMywgMjI3LCAyOSwgMTIsIDEzLCAKKyAgICAyMjcsIDI4LCAxMiwgMTMsIDIyNywgMjcsIDEyLCAxMywgMjI3LCAyNiwgMTIsIDEzLCAyMjcsIDI1LCAxMiwgMTMsIDIyNywgCisgICAgMjQsIDEyLCAxMywgMjI3LCAyMywgMTIsIDEzLCAyMjcsIDIyLCAxMiwgMTMsIDIyNywgMjEsIDEyLCAxMywgMjI3LCAyMCwgCisgICAgMTIsIDEzLCAyMjcsIDE5LCAxMiwgMTMsIDIyNywgMTgsIDEyLCAxMywgMjI3LCAxNywgMTIsIDEzLCAyMjcsIDE2LCAxMiwgCisgICAgMTMsIDIyNywgMTUsIDEyLCAxMywgMjI3LCAxNCwgMTIsIDEzLCAyMjcsIDEzLCAxMiwgMTMsIDIyNywgMTIsIDEyLCAxMywgCisgICAgMjI3LCAxMSwgMTIsIDEzLCAyMjcsIDEwLCAxMiwgMTMsIDIyNywgOSwgMTIsIDEzLCAyMjcsIDgsIDEyLCAxMywgMjI3LCA3LCAKKyAgICAxMiwgMTMsIDIyNywgNiwgMTIsIDEzLCAyMjYsIDEwOCwgMTIsIDEzLCAyMjYsIDEwNywgMTIsIDEzLCAyMjYsIDEwNiwgMTIsIAorICAgIDEzLCAyMjYsIDEwNSwgMTIsIDEzLCAyMjYsIDEwNCwgMTIsIDEzLCAyMjYsIDEwMywgMTIsIDEzLCAyMjYsIDEwMiwgMTIsIAorICAgIDEzLCAyMjYsIDEwMSwgMTIsIDEzLCAyMjYsIDEwMCwgMTIsIDEzLCAyMjYsIDk5LCAxMiwgMTMsIDIyNiwgOTgsIDEyLCAxMywgCisgICAgMjI2LCA5NywgMTIsIDEzLCAyMjYsIDk2LCAxMiwgMTMsIDIyNCwgOTgsIDEyLCAxMywgMjI0LCA5NywgMTIsIDEzLCAyMjQsIAorICAgIDk2LCAxMiwgMTMsIDIyNCwgOTUsIDEyLCAxMywgMjI0LCA5NCwgMTIsIDEzLCAyMjQsIDkzLCAxMiwgMTMsIDIyNCwgOTIsIAorICAgIDEyLCAxMywgMjIzLCAyMjUsIDEyLCAxMywgMjIzLCAyMjQsIDEyLCAxMywgMjIzLCAyMjMsIDEyLCAxMywgMjIzLCAyMjIsIAogICAgIDEyLCAxMywgMjIzLCAyMjEsIDEyLCAxMywgMjIzLCAyMjAsIDEyLCAxMywgMjIzLCAyMTksIDEyLCAxMywgMjIzLCAyMTgsIAogICAgIDEyLCAxMywgMjIzLCAyMTcsIDEyLCAxMywgMjIzLCAyMTYsIDEyLCAxMywgMjIzLCAyMTUsIDEyLCAxMywgMjIzLCAyMTQsIAogICAgIDEyLCAxMywgMjIzLCAyMTMsIDEyLCAxMywgMjIzLCAyMTIsIDEyLCAxMywgMjIzLCAyMTEsIDEyLCAxMywgMjIzLCAyMTAsIApAQCAtMTIwOTcsMTcyNiArMTIwOTcsMTc0MyBAQAogICAgIDEyLCAxMywgMjIzLCAyMDUsIDEyLCAxMywgMjIzLCAyMDQsIDEyLCAxMywgMjIzLCAyMDMsIDEyLCAxMywgMjIzLCAyMDIsIAogICAgIDEyLCAxMywgMjIzLCAyMDEsIDEyLCAxMywgMjIzLCAyMDAsIDEyLCAxMywgMjIzLCAxOTksIDEyLCAxMywgMjIzLCAxOTgsIAogICAgIDEyLCAxMywgMjIzLCAxOTcsIDEyLCAxMywgMjIzLCAxOTYsIDEyLCAxMywgMjIzLCAxOTUsIDEyLCAxMywgMjIzLCAxOTQsIAotICAgIDEyLCAxMywgMjIzLCAxOTMsIDEyLCAxMywgMjIzLCAxOTIsIDEyLCAxMywgMjIzLCAxOTEsIDEyLCAxMywgMjIzLCAxOTAsIAotICAgIDEyLCAxMywgMjIzLCAxODksIDEyLCAxMywgMjIyLCA4OCwgMTIsIDEzLCAyMjIsIDg3LCAxMiwgMTMsIDIyMiwgODYsIDEyLCAKLSAgICAxMywgMjIyLCA4NSwgMTIsIDEzLCAyMjIsIDg0LCAxMiwgMTMsIDIyMiwgODMsIDEyLCAxMywgMjIyLCA4MiwgMTIsIDEzLCAKLSAgICAyMjIsIDgxLCAxMiwgMTMsIDIyMiwgODAsIDEyLCAxMywgMjIyLCA3OSwgMTIsIDEzLCAyMjIsIDc4LCAxMiwgMTMsIDIyMiwgCi0gICAgNzcsIDEyLCAxMywgMjIyLCA3NiwgMTIsIDEzLCAyMjIsIDc1LCAxMiwgMTMsIDIyMiwgNzQsIDEyLCAxMywgMjIyLCA3MywgCi0gICAgMTIsIDEzLCAyMjIsIDcyLCAxMiwgMTMsIDIyMiwgNzEsIDEyLCAxMywgMjIyLCA3MCwgMTIsIDEzLCAyMjIsIDY5LCAxMiwgCi0gICAgMTMsIDIyMiwgNjgsIDEyLCAxMywgMjIyLCA2NywgMTIsIDEzLCAyMjIsIDY2LCAxMiwgMTMsIDIyMiwgNjUsIDEyLCAxMywgCi0gICAgMjIyLCA2NCwgMTIsIDEzLCAyMjIsIDYzLCAxMiwgMTMsIDIyMiwgNjIsIDEyLCAxMywgMjIyLCA2MSwgMTIsIDEzLCAyMjIsIAotICAgIDYwLCAxMiwgMTMsIDIyMiwgNTksIDEyLCAxMywgMjIyLCA1OCwgMTIsIDEzLCAyMjIsIDU3LCAxMiwgMTMsIDIyMiwgNTYsIAotICAgIDEyLCAxMywgMjIyLCA1NSwgMTIsIDEzLCAyMjIsIDU0LCAxMiwgMTMsIDIyMiwgNTMsIDEyLCAxMywgMjIyLCA1MiwgMTIsIAotICAgIDEzLCAyMjIsIDUxLCAxMiwgMTMsIDIyMiwgNTAsIDEyLCAxMywgMjIyLCA0OSwgMTIsIDEzLCAyMjIsIDQ4LCAxMiwgMTMsIAotICAgIDIyMiwgNDcsIDEyLCAxMywgMjIyLCA0NiwgMTIsIDEzLCAyMjIsIDQ1LCAxMiwgMTMsIDIyMiwgNDQsIDEyLCAxMywgMjIyLCAKLSAgICA0MywgMTIsIDEzLCAyMjIsIDQyLCAxMiwgMTMsIDIyMiwgNDEsIDEyLCAxMywgMjIyLCA0MCwgMTIsIDEzLCAyMjIsIDM5LCAKLSAgICAxMiwgMTMsIDIyMiwgMzgsIDEyLCAxMywgMjIyLCAzNywgMTIsIDEzLCAyMjIsIDM2LCAxMiwgMTMsIDIyMiwgMzUsIDEyLCAKLSAgICAxMywgMjE3LCAxNTAsIDEyLCAxMywgMjE3LCAxNDksIDEyLCAxMywgMjE3LCAxNDgsIDEyLCAxMywgMjE3LCAxNDcsIDEyLCAKLSAgICAxMywgMjE3LCAxNDYsIDEyLCAxMywgMjE3LCAxNDUsIDEyLCAxMywgMjE3LCAxNDQsIDEyLCAxMywgMjE3LCAxNDMsIDEyLCAKLSAgICAxMywgMjE3LCAxNDIsIDEyLCAxMywgMjE3LCAxNDEsIDEyLCAxMywgMjE3LCAxNDAsIDEyLCAxMywgMjE3LCAxMzksIDEyLCAKLSAgICAxMywgMjE3LCAxMzgsIDEyLCAxMywgMjE3LCAxMzcsIDEyLCAxMywgMjE3LCAxMzYsIDEyLCAxMywgMjE3LCAxMzUsIDEyLCAKLSAgICAxMywgMjE3LCAxMzQsIDEyLCAxMywgMjE3LCAxMzMsIDEyLCAxMywgMjE3LCAxMzIsIDEyLCAxMywgMjE3LCAxMzEsIDEyLCAKLSAgICAxMywgMjE3LCAxMzAsIDEyLCAxMywgMjE3LCAxMjksIDEyLCAxMywgMjE3LCAxMjgsIDEyLCAxMywgMjE3LCAxMjcsIDEyLCAKLSAgICAxMywgMjE3LCAxMjYsIDEyLCAxMywgMjE3LCAxMjUsIDEyLCAxMywgMjE3LCAxMjQsIDEyLCAxMywgMjE3LCAxMjMsIDEyLCAKLSAgICAxMywgMjE3LCAxMjIsIDEyLCAxMywgMjE3LCAxMjEsIDEyLCAxMywgMjE3LCAxMjAsIDEyLCAxMywgMjE3LCAxMTksIDEyLCAKLSAgICAxMywgMjE3LCAxMTgsIDEyLCAxMywgMjE3LCAxMTcsIDEyLCAxMywgMjE3LCAxMTYsIDEyLCAxMywgMjE3LCAxMTUsIDEyLCAKLSAgICAxMywgMjE3LCAxMTQsIDEyLCAxMywgMjE3LCAxMTMsIDEyLCAxMywgMjE3LCAxMTIsIDEyLCAxMywgMjE3LCAxMTEsIDEyLCAKLSAgICAxMywgMjE3LCAxMTAsIDEyLCAxMywgMjE3LCAxMDksIDEyLCAxMywgMjE3LCAxMDgsIDEyLCAxMywgMjE3LCAxMDcsIDEyLCAKLSAgICAxMywgMjE1LCAyMiwgMTIsIDEzLCAyMTUsIDIxLCAxMiwgMTMsIDIxNSwgMjAsIDEyLCAxMywgMjE1LCAxOSwgMTIsIDEzLCAKLSAgICAyMTUsIDE4LCAxMiwgMTMsIDIxNSwgMTcsIDEyLCAxMywgMjE1LCAxNiwgMTIsIDEzLCAyMTUsIDE1LCAxMiwgMTMsIDIxNSwgCi0gICAgMTQsIDEyLCAxMywgMjE1LCAxMywgMTIsIDEzLCAyMTUsIDEyLCAxMiwgMTMsIDIxNSwgMTEsIDEyLCAxMywgMjE1LCAxMCwgCi0gICAgMTIsIDEzLCAyMTUsIDksIDEyLCAxMywgMjE1LCA4LCAxMiwgMTMsIDIxNSwgNywgMTIsIDEzLCAyMTUsIDYsIDEyLCAxMywgCi0gICAgMjE1LCA1LCAxMiwgMTMsIDIxNSwgNCwgMTIsIDEzLCAyMTUsIDMsIDEyLCAxMywgMjE1LCAyLCAxMiwgMTMsIDIxNSwgMSwgCi0gICAgMTIsIDEzLCAyMTUsIDAsIDEyLCAxMywgMjE0LCAyNTUsIDEyLCAxMywgMjE0LCAyNTQsIDEyLCAxMywgMjE0LCAyNTMsIDEyLCAKLSAgICAxMywgMjE0LCAyNTIsIDEyLCAxMywgMjE0LCAyNTEsIDEyLCAxMywgMjE0LCAyNTAsIDEyLCAxMywgMjE0LCAyNDksIDEyLCAKLSAgICAxMywgMjE0LCAyNDgsIDEyLCAxMywgMjE0LCAyNDcsIDEyLCAxMywgMjE0LCAyNDYsIDEyLCAxMywgMjE0LCAyNDUsIDEyLCAKLSAgICAxMywgMjE0LCAyNDQsIDEyLCAxMywgMjE0LCAyNDMsIDEyLCAxMywgMjE0LCAyNDIsIDEyLCAxMywgMjE0LCAyNDEsIDEyLCAKLSAgICAxMywgMjE0LCAyNDAsIDEyLCAxMywgMjE0LCAyMzksIDEyLCAxMywgMjE0LCAyMzgsIDEyLCAxMywgMjE0LCAyMzcsIDEyLCAKLSAgICAxMywgMjE0LCAyMzYsIDEyLCAxMywgMjE0LCAyMzUsIDEyLCAxMywgMjE0LCAyMzQsIDEyLCAxMywgMjE0LCAyMzMsIDEyLCAKLSAgICAxMywgMjE0LCAyMzIsIDEyLCAxMywgMjE0LCAxMDQsIDEyLCAxMywgMjE0LCAxMDMsIDEyLCAxMywgMjE0LCAxMDIsIDEyLCAKLSAgICAxMywgMjE0LCAxMDEsIDEyLCAxMywgMjE0LCAxMDAsIDEyLCAxMywgMjE0LCA5OSwgMTIsIDEzLCAyMTQsIDk4LCAxMiwgMTMsIAotICAgIDIxNCwgOTcsIDEyLCAxMywgMjE0LCA5NiwgMTIsIDEzLCAyMTQsIDk1LCAxMiwgMTMsIDIxNCwgOTQsIDEyLCAxMywgMjE0LCAKLSAgICA5MywgMTIsIDEzLCAyMTQsIDkyLCAxMiwgMTMsIDIxNCwgOTEsIDEyLCAxMywgMjE0LCA5MCwgMTIsIDEzLCAyMTQsIDg5LCAKLSAgICAxMiwgMTMsIDIxNCwgODgsIDEyLCAxMywgMjE0LCA4NywgMTIsIDEzLCAyMTQsIDg2LCAxMiwgMTMsIDIxNCwgODUsIDEyLCAKLSAgICAxMywgMjE0LCA4NCwgMTIsIDEzLCAyMTQsIDgzLCAxMiwgMTMsIDIxNCwgODIsIDEyLCAxMywgMjE0LCA4MSwgMTIsIDEzLCAKLSAgICAyMTQsIDgwLCAxMiwgMTMsIDIxNCwgNzksIDEyLCAxMywgMjE0LCA3OCwgMTIsIDEzLCAyMTQsIDc3LCAxMiwgMTMsIDIxNCwgCi0gICAgNzYsIDEyLCAxMywgMjE0LCA3NSwgMTIsIDEzLCAyMTQsIDc0LCAxMiwgMTMsIDIxNCwgNzMsIDEyLCAxMywgMjE0LCA3MiwgCi0gICAgMTIsIDEzLCAyMTQsIDcxLCAxMiwgMTMsIDIxNCwgNzAsIDEyLCAxMywgMjE0LCA2OSwgMTIsIDEzLCAyMTQsIDY4LCAxMiwgCi0gICAgMTMsIDIxNCwgNjcsIDEyLCAxMywgMjE0LCA2NiwgMTIsIDEzLCAyMTQsIDY1LCAxMiwgMTMsIDIxNCwgNjQsIDEyLCAxMywgCi0gICAgMjE0LCA2MywgMTIsIDEzLCAyMTQsIDYyLCAxMiwgMTMsIDIxNCwgNjEsIDEyLCAxMywgMjE0LCA2MCwgMTIsIDEzLCAyMTQsIAotICAgIDU5LCAxMiwgMTMsIDIxNCwgNTgsIDEyLCAxMywgMjE0LCA1NywgMTIsIDEzLCAyMTQsIDU2LCAxMiwgMTMsIDIxNCwgNTUsIAotICAgIDEyLCAxMywgMjE0LCA1NCwgMTIsIDEzLCAyMTQsIDUzLCAxMiwgMTMsIDIxNCwgNTIsIDEyLCAxMywgMjE0LCA1MSwgMTIsIAotICAgIDEzLCAyMTQsIDUwLCAxMiwgMTMsIDIxNCwgNDksIDEyLCAxMywgMjE0LCA0OCwgMTIsIDEzLCAyMTQsIDQ3LCAxMiwgMTMsIAotICAgIDIxNCwgNDYsIDEyLCAxMywgMjE0LCA0NSwgMTIsIDEzLCAyMTQsIDQ0LCAxMiwgMTMsIDIxNCwgNDMsIDEyLCAxMywgMjE0LCAKLSAgICA0MiwgMTIsIDEzLCAyMTQsIDQxLCAxMiwgMTMsIDIxNCwgNDAsIDEyLCAxMywgMjE0LCAzOSwgMTIsIDEzLCAyMTQsIDM4LCAKLSAgICAxMiwgMTMsIDIxNCwgMzcsIDEyLCAxMywgMjE0LCAzNiwgMTIsIDEzLCAyMTQsIDM1LCAxMiwgMTMsIDIxNCwgMzQsIDEyLCAKLSAgICAxMywgMjE0LCAzMywgMTIsIDEzLCAyMTQsIDMyLCAxMiwgMTMsIDIxNCwgMzEsIDEyLCAxMywgMjE0LCAzMCwgMTIsIDEzLCAKLSAgICAyMTQsIDI5LCAxMiwgMTMsIDIxNCwgMjgsIDEyLCAxMywgMjEyLCA5NywgMTIsIDEzLCAyMTIsIDk2LCAxMiwgMTMsIDIxMiwgCi0gICAgOTUsIDEyLCAxMywgMjEyLCA5NCwgMTIsIDEzLCAyMTIsIDkzLCAxMiwgMTMsIDIxMiwgOTIsIDEyLCAxMywgMjEyLCA5MSwgCi0gICAgMTIsIDEzLCAyMTIsIDkwLCAxMiwgMTMsIDIxMiwgODksIDEyLCAxMywgMjEyLCA4OCwgMTIsIDEzLCAyMTIsIDg3LCAxMiwgCi0gICAgMTMsIDIxMiwgODYsIDEyLCAxMywgMjEyLCA4NSwgMTIsIDEzLCAyMTIsIDg0LCAxMiwgMTMsIDIxMiwgODMsIDEyLCAxMywgCi0gICAgMjEyLCA4MiwgMTIsIDEzLCAyMTIsIDgxLCAxMiwgMTMsIDIxMiwgODAsIDEyLCAxMywgMjEyLCA3OSwgMTIsIDEzLCAyMTIsIAotICAgIDc4LCAxMiwgMTMsIDIxMiwgNzcsIDEyLCAxMywgMjEyLCA3NiwgMTIsIDEzLCAyMTIsIDc1LCAxMiwgMTMsIDIxMiwgNzQsIAotICAgIDEyLCAxMywgMjEyLCA3MywgMTIsIDEzLCAyMTIsIDcyLCAxMiwgMTMsIDIxMiwgNzEsIDEyLCAxMywgMjEyLCA3MCwgMTIsIAotICAgIDEzLCAyMTIsIDY5LCAxMiwgMTMsIDIxMiwgNjgsIDEyLCAxMywgMjEyLCA2NywgMTIsIDEzLCAyMTIsIDY2LCAxMiwgMTMsIAotICAgIDIxMSwgMTc3LCAxMiwgMTMsIDIxMSwgMTc2LCAxMiwgMTMsIDIxMSwgMTc1LCAxMiwgMTMsIDIxMSwgMTc0LCAxMiwgMTMsIAotICAgIDIxMSwgMTczLCAxMiwgMTMsIDIxMSwgMTcyLCAxMiwgMTMsIDIxMSwgMTcxLCAxMiwgMTMsIDIxMSwgMTcwLCAxMiwgMTMsIAotICAgIDIxMSwgMTY5LCAxMiwgMTMsIDIxMSwgMTY4LCAxMiwgMTMsIDIxMSwgMTY3LCAxMiwgMTMsIDIxMSwgMTY2LCAxMiwgMTMsIAotICAgIDIxMSwgMTE1LCAxMiwgMTMsIDIxMSwgMTE0LCAxMiwgMTMsIDIxMSwgMTEzLCAxMiwgMTMsIDIxMSwgMTEyLCAxMiwgMTMsIAotICAgIDIxMSwgMTExLCAxMiwgMTMsIDIxMSwgMTEwLCAxMiwgMTMsIDIxMSwgMTA5LCAxMiwgMTMsIDIxMSwgMTA4LCAxMiwgMTMsIAotICAgIDIxMSwgMTA3LCAxMiwgMTMsIDIxMCwgMTU4LCAxMiwgMTMsIDIxMCwgMTU3LCAxMiwgMTMsIDIxMCwgMTU2LCAxMiwgMTMsIAotICAgIDIxMCwgMTU1LCAxMiwgMTMsIDIxMCwgMTU0LCAxMiwgMTMsIDIxMCwgMTUzLCAxMiwgMTMsIDIxMCwgMTUyLCAxMiwgMTMsIAotICAgIDIxMCwgMTUxLCAxMiwgMTMsIDIxMCwgMTUwLCAxMiwgMTMsIDIxMCwgMTQ5LCAxMiwgMTMsIDIxMCwgMTQ4LCAxMiwgMTMsIAotICAgIDIxMCwgMTQ3LCAxMiwgMTMsIDIxMCwgMTQ2LCAxMiwgMTMsIDIxMCwgMTQ1LCAxMiwgMTMsIDIxMCwgMTQ0LCAxMiwgMTMsIAotICAgIDIxMCwgMTQzLCAxMiwgMTMsIDIxMCwgMTQyLCAxMiwgMTMsIDIxMCwgMTQxLCAxMiwgMTMsIDIxMCwgMTQwLCAxMiwgMTMsIAotICAgIDIxMCwgMTM5LCAxMiwgMTMsIDIxMCwgMTM4LCAxMiwgMTMsIDIxMCwgMTM3LCAxMiwgMTMsIDIxMCwgMTM2LCAxMiwgMTMsIAotICAgIDIxMCwgMTM1LCAxMiwgMTMsIDIxMCwgMTM0LCAxMiwgMTMsIDIxMCwgMTMzLCAxMiwgMTMsIDIxMCwgMTMyLCAxMiwgMTMsIAotICAgIDIxMCwgMTMxLCAxMiwgMTMsIDIxMCwgMTMwLCAxMiwgMTMsIDIxMCwgMTI5LCAxMiwgMTMsIDIxMCwgMTI4LCAxMiwgMTMsIAotICAgIDIxMCwgMTI3LCAxMiwgMTMsIDIxMCwgMTI2LCAxMiwgMTMsIDIxMCwgMTI1LCAxMiwgMTMsIDIxMCwgMTI0LCAxMiwgMTMsIAotICAgIDIxMCwgMTIzLCAxMiwgMTMsIDIxMCwgMTIyLCAxMiwgMTMsIDIxMCwgMTIxLCAxMiwgMTMsIDIxMCwgMTIwLCAxMiwgMTMsIAotICAgIDIxMCwgMTE5LCAxMiwgMTMsIDIxMCwgMTE4LCAxMiwgMTMsIDI1NSwgNzIsIDEyLCAxMywgMjU1LCA3MSwgMTIsIDEzLCAKLSAgICAyNTUsIDcwLCAxMiwgMTMsIDI1NSwgNjksIDEyLCAxMywgMjU1LCA2OCwgMTIsIDEzLCAyNTUsIDY3LCAxMiwgMTMsIDI1NSwgCi0gICAgNjYsIDEyLCAxMywgMjU1LCA2NSwgMTIsIDEzLCAyNTUsIDY0LCAxMiwgMTMsIDI1NSwgNjMsIDEyLCAxMywgMjU1LCA2MiwgCi0gICAgMTIsIDEzLCAyNTUsIDYxLCAxMiwgMTMsIDI1NSwgNjAsIDEyLCAxMywgMjU1LCA1OSwgMTIsIDEzLCAyNTUsIDU4LCAxMiwgCi0gICAgMTMsIDI1NSwgNTcsIDEyLCAxMywgMjU1LCA1NiwgMTIsIDEzLCAyNTUsIDU1LCAxMiwgMTMsIDI1NSwgNTQsIDEyLCAxMywgCi0gICAgMjU1LCA1MywgMTIsIDEzLCAyNTUsIDUyLCAxMiwgMTMsIDI1NSwgNTEsIDEyLCAxMywgMjU1LCA1MCwgMTIsIDEzLCAyNTUsIAotICAgIDQ5LCAxMiwgMTMsIDI1NSwgNDgsIDEyLCAxMywgMjU1LCA0NywgMTIsIDEzLCAyNTUsIDQ2LCAxMiwgMTMsIDI1NSwgNDUsIAotICAgIDEyLCAxMywgMjU1LCA0NCwgMTIsIDEzLCAyNTUsIDQzLCAxMiwgMTMsIDI1NSwgNDIsIDEyLCAxMywgMjU1LCA0MSwgMTIsIAotICAgIDEzLCAyNTUsIDQwLCAxMiwgMTMsIDI1NSwgMzksIDIwLCAxLCAxNjcsIDIyOSwgMTIsIDIzMSwgMTYsIDIwLCAxLCAxNjcsIAotICAgIDI0MywgNzAsIDI0NCwgMzYsIDIwLCAxLCAxNjcsIDIyNCwgMjUxLCAyMzEsIDE3LCAyMjUsIDU3LCAyMCwgMSwgMTY3LCAKLSAgICAyMjQsIDI1MSwgMjMxLCAxNywgMjI1LCA1OCwgMjAsIDEsIDE2NywgMjI5LCAyMjYsIDIzMSwgMTYsIDIwLCAxLCAxNjcsIAotICAgIDIxOSwgMjIxLCAyMCwgMSwgMTY3LCAyMTYsIDY2LCAyMzEsIDE2LCAyMCwgMSwgMTY3LCAyMjcsIDExOCwgMjMxLCAxNiwgCi0gICAgMjAsIDEsIDE2NywgMjIwLCAxOSwgMjI2LCA5MCwgMjI4LCAxNjksIDIwLCAxLCAxNjcsIDIyNCwgMjUxLCAyMjYsIDkwLCAKLSAgICAyMjgsIDE3MCwgMjI1LCA1NywgMjAsIDEsIDE2NywgMjI0LCAyNTEsIDIyNiwgOTAsIDIyOCwgMTcwLCAyMjUsIDU4LCAyMCwgCi0gICAgMSwgMTY3LCAyMzEsIDIxOCwgMjAsIDEsIDE2NywgMjE1LCAxMTksIDIzMSwgMjE5LCAyMCwgMSwgMTY3LCAyMjksIDcxLCAKLSAgICAyMCwgMSwgMTY3LCAyMzEsIDIxNSwgMjAsIDEsIDE2NywgMjMxLCAxNzYsIDIwLCAxLCAxNjcsIDIzMCwgNDgsIDIwLCAxLCAKLSAgICAxNjcsIDIyMCwgMTI0LCAyMCwgMSwgMTY3LCAyMjcsIDI0MSwgMjAsIDEsIDE2NywgMjM0LCAxNDksIDIwLCAxLCAxNjcsIAotICAgIDIyOCwgMTM4LCAyMCwgMSwgMTY3LCAyMTgsIDQsIDIwLCAxLCAxNjcsIDIyOSwgMTEsIDIwLCAxLCAxNjcsIDIzMywgODcsIAotICAgIDIwLCAxLCAxNjcsIDIzMywgMTIsIDIzMywgMTg5LCAyMCwgMSwgMTY3LCAyMjcsIDI0OCwgMjMxLCAyNCwgMjAsIDEsIDE2NywgCi0gICAgMjMxLCAyMjIsIDIwLCAxLCAxNjcsIDIyNSwgMjQ2LCAyMCwgMSwgMTY3LCAyNDIsIDIzMSwgMjAsIDEsIDE2NywgMjI2LCAKLSAgICA1MCwgMjAsIDEsIDE2NywgMjMwLCAxNTEsIDIyOSwgNDUsIDIwLCAxLCAxNjcsIDIyNywgOTksIDIzMSwgMjcsIDIwLCAxLCAKLSAgICAxNjcsIDEwNCwgMjEwLCAxODgsIDIyOSwgMjIwLCAyMCwgMSwgMTY3LCAyNDIsIDIzMiwgMjAsIDEsIDE2NywgMjI3LCAyNDgsIAotICAgIDIyNywgMjQ5LCAyMCwgMSwgMTY3LCAyMTksIDEyOCwgMjAsIDEsIDE2NywgMjMxLCA5LCAyMCwgMSwgMTY3LCAyMzEsIDMwLCAKLSAgICAyMCwgMSwgMTY3LCAyMzAsIDEzMCwgMjAsIDEsIDE2NywgMjM0LCAyNDksIDIwLCAxLCAxNjcsIDIyNiwgOTAsIDIzMywgNDcsIAotICAgIDIwLCAxLCAxNjcsIDIyOSwgMTQ5LCAyMzMsIDQ3LCAyMCwgMSwgMTY3LCAyMjUsIDE1OCwgMjAsIDEsIDE2NywgMjMxLCAKLSAgICAyMTYsIDIwLCAxLCAxNjcsIDIyOCwgMjA3LCAyMCwgMSwgMTY3LCAyMjQsIDEzNCwgMjAsIDEsIDE2NywgMjE1LCAxMTYsIAotICAgIDIwLCAxLCAxNjcsIDIzMiwgOTQsIDIwLCAxLCAxNjcsIDIxOSwgNDEsIDIwLCAxLCAxNjcsIDIxNiwgMjE2LCAyMCwgMSwgCi0gICAgMTY3LCAyMzEsIDIxMywgMjAsIDEsIDE2NywgMjM0LCAxNTYsIDIwLCAxLCAxNjcsIDIyOSwgMTQ1LCAyMCwgMSwgMTY3LCAKLSAgICAyMzMsIDIwMSwgMjAsIDEsIDE2NywgMjMwLCAxMzEsIDIwLCAxLCAxNjcsIDIxOSwgMjE4LCAyMCwgMSwgMTY3LCAyMzIsIAotICAgIDEzOCwgMjAsIDEsIDE2NywgMjQ0LCA5MywgMjAsIDEsIDE2NywgMjIyLCAxOTksIDIwLCAxLCAxNjcsIDIzMywgMjQxLCAyMCwgCi0gICAgMSwgMTY3LCAyMTksIDM3LCAyMCwgMSwgMTY3LCAyMzEsIDE3MywgMjI1LCA5OSwgMjAsIDEsIDE2NywgMjIwLCAxMiwgMjAsIAotICAgIDEsIDE2NywgMjI3LCAyNDcsIDIwLCAxLCAxNjcsIDIxOSwgMjUzLCAyMjgsIDIsIDIxMCwgMTk2LCAyMCwgMSwgMTY3LCAKLSAgICAyMjcsIDEzOCwgMjMwLCAxNDgsIDIwLCAxLCAxNjcsIDIyNiwgODUsIDIwLCAxLCAxNjcsIDIyOCwgMTM5LCAyMCwgMSwgCi0gICAgMTY3LCAyMTQsIDE3MCwgMjAsIDEsIDE2NywgMjI5LCA0OCwgMjAsIDEsIDE2NywgMjMxLCAyMTIsIDIwLCAxLCAxNjcsIAotICAgIDIyOCwgMTgxLCAyMCwgMSwgMTY3LCAyMzEsIDExOSwgMjAsIDEsIDE2NywgMjI3LCAxNTEsIDIwLCAxLCAxNjcsIDIxNiwgCi0gICAgMjIwLCAyMCwgMSwgMTY3LCAyMTksIDM0LCAyMCwgMSwgMTY3LCAyMjYsIDg2LCAyMCwgMSwgMTY3LCAyMjgsIDYsIDIwLCAxLCAKLSAgICAxNjcsIDIzMSwgMjIwLCAyMCwgMSwgMTY3LCAyMjcsIDE0OCwgMjAsIDEsIDE2NywgMjM0LCAyMTYsIDIwLCAxLCAxNjcsIAotICAgIDIyOCwgOSwgMjAsIDEsIDE2NywgMjEzLCAyNTAsIDIwLCAxLCAxNjcsIDIzMiwgOTgsIDIwLCAxLCAxNjcsIDIyOSwgOTgsIAotICAgIDIwLCAxLCAxNjcsIDIyOSwgMTk2LCAyMCwgMSwgMTY3LCAyMzEsIDExOCwgMjAsIDEsIDIyNSwgMTM4LCAyMjgsIDQsIDIwLCAKLSAgICAxLCAyMjUsIDEzOCwgMjE1LCAxMTksIDIzMSwgMjE3LCAyMCwgMSwgMjI1LCAxMzgsIDIxOSwgMTg1LCAyMCwgMSwgMjI1LCAKLSAgICAxMzgsIDIyMCwgMTI4LCAyMTUsIDExOCwgMjAsIDEsIDIyNSwgMTM4LCAyMzIsIDE0MCwgMjI3LCAyNDQsIDIwLCAxLCAyMjUsIAotICAgIDEzOCwgMjMxLCAxMjUsIDIzMSwgMjIxLCAyMCwgMSwgMjI1LCAxMzgsIDIzNCwgODcsIDIwLCAxLCAyMjUsIDEzOCwgMjExLCAKLSAgICAxNSwgMjAsIDEsIDIyNSwgMTM4LCAyMzEsIDEyMCwgMjAsIDEsIDIyNSwgMTM4LCAyMzQsIDIzNywgMjAsIDEsIDIyNSwgCi0gICAgMTM4LCAyMjUsIDIwOCwgMjAsIDEsIDIyNSwgMTM4LCAyMTEsIDg5LCAyMzMsIDQ3LCAyMCwgMSwgMjI1LCAxMzgsIDIzMywgCi0gICAgMTAzLCAyMjgsIDIsIDIyNywgMTYwLCAyMCwgMSwgMjI1LCAxMzgsIDIyNywgMjQyLCAyMjAsIDM4LCAyMCwgMSwgMjI1LCAKLSAgICAxMzgsIDIyOSwgMTE2LCAyMjgsIDE4NCwgMjAsIDEsIDIyNSwgMTM4LCAyNDIsIDIyOSwgMjAsIDEsIDIyNSwgMTM4LCAyMjUsIAotICAgIDQ5LCAyMCwgMSwgMjI1LCAxMzgsIDIxNSwgMTE5LCAyMjgsIDAsIDIwLCAxLCAyMjUsIDEzOCwgMjIwLCA0MywgMjI4LCAKLSAgICAxNzksIDIwLCAxLCAyMjUsIDEzOCwgMjIwLCAzOSwgMjAsIDEsIDIyNSwgMTM4LCAyMzEsIDE3LCAyMTYsIDIxOSwgMjAsIDEsIAotICAgIDIyNSwgMTM4LCAyMzEsIDEwNywgMjMxLCAxMjEsIDIwLCAxLCAyMjUsIDEzOCwgMjI3LCAxNDksIDIyNywgMjQ0LCAyMCwgMSwgCi0gICAgMjI1LCAxMzgsIDIzNCwgMTQ1LCAyMCwgMSwgMjI1LCAxMzgsIDI0MiwgMjMwLCAyMCwgMSwgMjI1LCAxMzgsIDIzNCwgMTQxLCAKLSAgICAyMCwgMSwgMjI1LCAxMzgsIDIzMywgMTI5LCAyMCwgMSwgMjI1LCAxMzgsIDIyNSwgMjQ5LCAyMCwgMSwgMjI1LCAxMzgsIAotICAgIDIxMywgMTgyLCAyMCwgMSwgMjI1LCAxMzgsIDIyOSwgMTMsIDIzMCwgNDYsIDIwLCAxLCAyMjUsIDEzOCwgMjI5LCA0NywgCi0gICAgMjMxLCAxMDMsIDIwLCAxLCAyMjUsIDEzOCwgMjExLCAxOTMsIDIwLCAxLCAyMjUsIDEzOCwgMjIyLCAxMSwgMjAsIDEsIAotICAgIDIyNSwgMTM4LCAyMTcsIDk3LCAyMCwgMSwgMjI1LCAxMzgsIDIzMSwgMjksIDIwLCAxLCAyMjUsIDEzOCwgMjI5LCAzMiwgCi0gICAgMjAsIDEsIDIyNSwgMTM4LCAyMjksIDMzLCAyMzMsIDg0LCAyMCwgMSwgMjI1LCAxMzgsIDIzMSwgMTksIDIwLCAxLCAyMjUsIAotICAgIDEzOCwgMjE4LCA1MiwgMjAsIDEsIDIyNSwgMTM4LCAyMzEsIDExMSwgMjAsIDEsIDIyNSwgMTM4LCAyMzAsIDEzMywgMjAsIAotICAgIDEsIDIyNSwgMTM4LCAyMjcsIDE2MywgMjAsIDEsIDIyNSwgMTM4LCAyMjQsIDEzOCwgMjAsIDEsIDIyNSwgMTM4LCAyMzEsIAotICAgIDI4LCAyMjksIDQ5LCAyMCwgMSwgMjI1LCAxMzgsIDI0NCwgMTI2LCAyMCwgMSwgMjI1LCAxMzgsIDIzMSwgOTgsIDIwLCAxLCAKLSAgICAyMjUsIDEzOCwgMjQ0LCAxNDcsIDIwLCAxLCAyMjUsIDEzOCwgMjM0LCAxNTMsIDIwLCAxLCAyMjUsIDEzOCwgMjMxLCAyMzksIAotICAgIDIyOCwgMTczLCAyMCwgMSwgMjI1LCAxMzgsIDIzMSwgMjM5LCAyMjgsIDE0OSwgMjAsIDEsIDIyNSwgMTM4LCAyMzMsIDExLCAKLSAgICAyMCwgMSwgMjI1LCAxMzgsIDIyOSwgNTUsIDIwLCAxLCAyMjUsIDEzOCwgMjI4LCAxMSwgMjAsIDEsIDIyNSwgMTM4LCAxODQsIAotICAgIDIwLCAxLCAyMjUsIDEzOCwgMjM0LCA3NCwgMjAsIDEsIDIyNSwgMTM4LCAyMjksIDEsIDIwLCAxLCAxMzcsIDIyOSwgMTIsIAotICAgIDIzMSwgMjE5LCAyMCwgMSwgMTM3LCAyMjcsIDExNywgMjAsIDEsIDEzNywgMjEwLCAxOTYsIDIwLCAxLCAxMzcsIDIxMiwgCi0gICAgNTMsIDIwLCAxLCAxMzcsIDIyOSwgNDgsIDIwLCAxLCAxMzcsIDIyOSwgMTM3LCAyMCwgMSwgMTM3LCAyMjksIDE5LCAyMCwgCi0gICAgMSwgMTM3LCAyNDIsIDIzOSwgMjAsIDEsIDEzNywgMjMxLCAxMTUsIDIwLCAxLCAxMzcsIDI0MywgNzcsIDIwLCAxLCAxMzcsIAotICAgIDIyNywgMTQwLCAyMzAsIDE3MCwgMjMxLCAzMSwgMjAsIDEsIDEzNywgMjI3LCAyNDAsIDIzMSwgMTA2LCAyMCwgMSwgMTM3LCAKLSAgICAyMzEsIDExMiwgMjAsIDEsIDEzNywgMjI1LCA1NSwgMjAsIDEsIDEzNywgMjI5LCAxMjIsIDIwLCAxLCAxMzcsIDIzMSwgCi0gICAgMTIzLCAyNTEsIDI5LCAyMCwgMSwgMTM3LCAyMzQsIDE0MywgMjAsIDEsIDEzNywgMjQyLCAyNDAsIDIwLCAxLCAxMzcsIAotICAgIDIzNCwgMTUwLCAyMCwgMSwgMTM3LCAyMTAsIDIxMywgMjMwLCA3NiwgMjAsIDEsIDEzNywgMjI3LCAxMTEsIDIwLCAxLCAKLSAgICAxMzcsIDIzMSwgMTAwLCAyMCwgMSwgMTM3LCAyMjgsIDEwLCAyMCwgMSwgMTM3LCAyMzEsIDEwNiwgMjAsIDEsIDEzNywgCi0gICAgMjExLCAxNiwgMjAsIDEsIDEzNywgMjMzLCAyNDksIDIwLCAxLCAxMzcsIDIzNSwgMTAsIDIwLCAxLCAxMzcsIDIyMCwgMTIzLCAKLSAgICAyMCwgMSwgMTM3LCAyMjksIDEzMSwgMjAsIDEsIDEzNywgMjE3LCA5NSwgMjAsIDEsIDEzNywgMjI4LCAxNTMsIDIwLCAxLCAKLSAgICAxMzcsIDIxNiwgNjYsIDIxMCwgMTk4LCAyMCwgMSwgMTM3LCAyMTgsIDc5LCAyMCwgMSwgMTM3LCAyMjksIDM5LCAyMjcsIAotICAgIDE2MCwgMjAsIDEsIDEzNywgMjEzLCAxODEsIDIwLCAxLCAxMzcsIDIyOSwgMTk5LCAyMCwgMSwgMTM3LCAyMzEsIDIzOSwgCi0gICAgMjM0LCAxNTIsIDIwLCAxLCAxMzcsIDIyNywgMjQ5LCAyMCwgMSwgMTM3LCAyMjksIDM0LCAyMCwgMSwgMTM3LCAyMzMsIDg4LCAKLSAgICAyMCwgMSwgMTM3LCAyMzEsIDEwOCwgMjAsIDEsIDEzNywgMjMxLCA4LCAyMCwgMSwgMTM3LCAyMjcsIDI0MywgMjAsIDEsIAotICAgIDEzNywgMjE2LCAyMTUsIDIwLCAxLCAxMzcsIDIyOSwgMzYsIDIwLCAxLCAxMzcsIDI0MywgMjMzLCAyMCwgMSwgMTM3LCAKLSAgICAyMjksIDEzNiwgMjAsIDEsIDEzNywgMjI4LCAxMiwgMjAsIDEsIDEzNywgMjI4LCA4LCAyMCwgMSwgMTM3LCAyNTEsIDEwNywgCi0gICAgMjAsIDEsIDEzNywgMjEzLCAxODMsIDIwLCAxLCAxMzcsIDIzMSwgMTEzLCAyMCwgMSwgMTM3LCAyMjIsIDE0MCwgMjAsIDEsIAotICAgIDEzNywgMjI4LCAxODMsIDIwLCAxLCAxMzcsIDIzMywgMTAyLCAyMCwgMSwgMTM3LCAyMTYsIDY0LCAyMCwgMSwgMTM3LCAKLSAgICAyMjcsIDI1MCwgMjI5LCAxLCAyMCwgMSwgMTM3LCAyMjgsIDE3NSwgMjAsIDEsIDEzNywgMjM0LCAxNTYsIDIwLCAxLCAxMzcsIAotICAgIDIyOSwgNDAsIDIwLCAxLCAxMzcsIDIzMSwgMjEyLCAyMCwgMSwgMTM3LCAyMzEsIDEwMSwgMjAsIDEsIDEzNywgMjMyLCA5OCwgCi0gICAgMjAsIDEsIDEzNywgMjMzLCAxODksIDIwLCAxLCAxMzcsIDIyOCwgMTgxLCAyMCwgMSwgMTM3LCAyMjksIDEsIDIwLCAxLCAKLSAgICAxMzcsIDIxMSwgMTg0LCAyMCwgMSwgMTM3LCAyMjksIDM3LCAyMCwgMSwgMTM3LCAyMjcsIDI1MywgMjAsIDEsIDEzNywgCi0gICAgMjI3LCAyNDUsIDIwLCAxLCAxMzcsIDIzMywgMjAzLCAyMjgsIDEzOSwgMjAsIDEsIDEzNywgMjI3LCAyNTEsIDIwLCAxLCAKLSAgICAxMzcsIDIyOSwgMTQ0LCAyMCwgMSwgMTM3LCAyMzEsIDIzOSwgMjI4LCAwLCAyMCwgMSwgMTM3LCAyMTEsIDEwMywgMjAsIDEsIAotICAgIDEzNywgMjI5LCAxNDMsIDIwLCAxLCAxMzcsIDIxOSwgMjIwLCAyMCwgMSwgMTM3LCAyMjAsIDEyNiwgMjAsIDEsIDEzNywgCi0gICAgMjMxLCAxMDksIDIwLCAxLCAxMzcsIDIzMSwgMjE5LCAyMCwgMSwgMTM3LCAyMzEsIDExOSwgMjAsIDEsIDEzNywgMjM0LCAKLSAgICAxNDQsIDIwLCAxLCAxMzcsIDIzMSwgMTEwLCAyMCwgMSwgMTM3LCAyMzQsIDE0OCwgMjAsIDEsIDEzNywgMjMxLCAxMjMsIAotICAgIDIyNSwgMTAzLCAyMCwgMSwgMTM3LCAyMTAsIDE3OSwgMjAsIDEsIDEzNywgMjI4LCAxNzEsIDIwLCAxLCAxMzcsIDIzMCwgCi0gICAgMjIwLCAyMCwgMSwgMTM3LCAyMzAsIDEwMCwgMjAsIDEsIDEzNywgMjIwLCAxNSwgMjAsIDEsIDEzNywgMjM0LCAxNjYsIAotICAgIDIzMywgNzAsIDIwLCAxLCAxMzcsIDIzNCwgMTY2LCAyNDQsIDE2MCwgMjAsIDEsIDEzNywgMjI5LCA2OSwgMjAsIDEsIDEzNywgCi0gICAgMjI5LCAxOTYsIDIwLCAxLCAxMzcsIDIzMiwgMjAwLCAyMCwgMSwgMTM3LCAyMjUsIDY1LCAyMCwgMSwgMTM3LCAyMjUsIAotICAgIDE5OSwgMjAsIDEsIDEzNywgMjE2LCAyMzAsIDIwLCAxLCAxMDcsIDIzMSwgOTksIDIwLCAxLCAxMDcsIDIxMiwgNTEsIDIwLCAKLSAgICAxLCAxMDcsIDIyOCwgMTY5LCAyMCwgMSwgMTA3LCAyMzEsIDE2LCAyMCwgMSwgMTA3LCAyMjgsIDE2NywgMjAsIDEsIDEwNywgCi0gICAgMjMyLCAyMzUsIDIwLCAxLCAxMDcsIDIyOCwgMTcyLCAyMCwgMSwgMTA3LCAyMjgsIDcsIDIwLCAxLCAxMDcsIDIyOSwgNTQsIAotICAgIDIwLCAxLCAxMDcsIDIyNywgMTYwLCAyMCwgMSwgMTA3LCAyMTEsIDE5NCwgMjAsIDEsIDEwNywgMjI5LCA5LCAyMCwgMSwgCi0gICAgMTA3LCAyMjAsIDYxLCAyMCwgMSwgMTA3LCAyMjksIDIwLCAyMCwgMSwgMTA3LCAyMzQsIDE1MSwgMjAsIDEsIDEwNywgMjE2LCAKLSAgICAyMTcsIDIwLCAxLCAxMDcsIDIyMCwgNDEsIDIwLCAxLCAxMDcsIDIyOCwgMTgwLCAyMCwgMSwgMTA3LCAyMTgsIDUyLCAyMCwgCi0gICAgMSwgMTA3LCAyMzQsIDE1NiwgMjAsIDEsIDEwNywgMjExLCA5MSwgMjAsIDEsIDEwNywgMjMzLCAyMDQsIDIwLCAxLCAxMDcsIAotICAgIDIyMSwgMjM0LCAyMCwgMSwgMTA3LCAyMzEsIDIxLCAyMCwgMSwgMTA3LCAyMjksIDEzNSwgMjAsIDEsIDEwNywgMjMxLCAKLSAgICAxODgsIDIwLCAxLCAxMDcsIDIzMSwgMjcsIDIwLCAxLCAxMDcsIDIyMCwgMTI1LCAyMCwgMSwgMTA3LCAyMTEsIDM5LCAyMCwgCi0gICAgMSwgMTA3LCAyMjgsIDE3NCwgMjAsIDEsIDEwNywgMjM0LCAxNDcsIDIzMSwgMTAyLCAyMCwgMSwgMTA3LCAyMjksIDE2LCAKLSAgICAyMCwgMSwgMTA3LCAyMTUsIDExOCwgMjAsIDEsIDEwNywgMjQyLCAyNDgsIDIwLCAxLCAxMDcsIDIyOSwgNiwgMjAsIDEsIAotICAgIDEwNywgMjQ0LCAxMjcsIDIwLCAxLCAxMDcsIDIyOSwgMTM5LCAyMCwgMSwgMTA3LCAyMzEsIDAsIDIwLCAxLCAxMDcsIDIzMywgCi0gICAgNSwgMjAsIDEsIDEwNywgMjI5LCAxMjEsIDIwLCAxLCAxMDcsIDIzMCwgMTQ3LCAyMCwgMSwgMTA3LCAyMzEsIDQsIDIwLCAxLCAKLSAgICAxMDcsIDIyNCwgMTE4LCAyMCwgMSwgMTA3LCAyMzEsIDIsIDIwLCAxLCAxMDcsIDIzMSwgMTgsIDIwLCAxLCAxMDcsIDIzMiwgCi0gICAgODQsIDIwLCAxLCAxMDcsIDIyNywgMjU1LCAyMCwgMSwgMTA3LCAyMzEsIDEyMiwgMjAsIDEsIDEwNywgMjMzLCAxODAsIDIwLCAKLSAgICAxLCAxMDcsIDIyNywgMTUxLCAyMCwgMSwgMTA3LCAyMTYsIDIyMCwgMjAsIDEsIDEwNywgMjE5LCAzNCwgMjAsIDEsIDEwNywgCi0gICAgMjEwLCAxNzksIDIwLCAxLCAxMDcsIDIzNCwgMTQ4LCAyMCwgMSwgMTA3LCAyMjMsIDE3MCwgMjAsIDEsIDEwNywgMjE3LCAKLSAgICAxMCwgMjAsIDEsIDEwNywgMjI5LCAxNywgMjAsIDEsIDEwNywgMjMxLCAyMywgMjAsIDEsIDEwNywgMjI3LCAyNTQsIDIwLCAKLSAgICAxLCAxMDcsIDIzNCwgMTQ2LCAyMCwgMSwgMTA3LCAyMjUsIDU5LCAyMCwgMSwgMTA3LCAyMjUsIDE1MiwgMjAsIDEsIDEwNywgCi0gICAgMjI3LCAxMjcsIDIwLCAxLCAxMDcsIDIzMywgMTEsIDIwLCAxLCAxMDcsIDIyOSwgNTUsIDIwLCAxLCAxMDcsIDIzMSwgMjAsIAotICAgIDIwLCAxLCAxMDcsIDIyOSwgMjksIDIwLCAxLCAxMDcsIDIxMCwgMTkzLCAyMCwgMSwgMTA3LCAyMjYsIDIxLCAyMCwgMSwgCi0gICAgMTA3LCAyMTAsIDE5MiwgMjAsIDEsIDEwNywgMjI5LCAxNDQsIDIwLCAxLCAxMDcsIDIyNywgMjQ0LCAyMCwgMSwgMTA3LCAKLSAgICAyMTgsIDgxLCAyMCwgMSwgMTA3LCAyMzMsIDIwOCwgMjAsIDEsIDEwNywgMjI5LCA0NCwgMjAsIDEsIDEwNywgMjI5LCAxNCwgCi0gICAgMjAsIDEsIDEwNywgMjE1LCAxMDIsIDIwLCAxLCAxMDcsIDIzMSwgMzEsIDIwLCAxLCAxMDcsIDIzMywgMTk4LCAyMCwgMSwgCi0gICAgMTA3LCAyMjcsIDI1MiwgMjAsIDEsIDEwNywgMjE2LCAyMTgsIDIwLCAxLCAxMDcsIDIzMSwgMjE0LCAyMCwgMSwgMTA3LCAKLSAgICAyMjksIDUzLCAyMCwgMSwgMTA3LCAyMzMsIDQsIDIwLCAxLCAxMDcsIDIyOSwgMzUsIDIwLCAxLCAxMDcsIDIyOCwgMSwgMjAsIAotICAgIDEsIDEwNywgMjI4LCAxNTMsIDIwLCAxLCAxMDcsIDI0MiwgMjMzLCAyMCwgMSwgMTA3LCAyMzMsIDIxNywgMjAsIDEsIDEwNywgCi0gICAgMjIzLCA4NCwgMjI2LCAyMDksIDIwLCAxLCAxMDcsIDIxNywgODYsIDIwLCAxLCAxMDcsIDIxNiwgMTAsIDIwLCAxLCAxMDcsIAotICAgIDIyNywgMTQ4LCAyMCwgMSwgMTA3LCAyMjIsIDIzOSwgMjAsIDEsIDEwNywgMjMzLCA0OSwgMjAsIDEsIDEwNywgMjMxLCA3OSwgCi0gICAgMjAsIDEsIDEwNywgMTkzLCAyMCwgMSwgMTA3LCAyMTgsIDQsIDIwLCAxLCAxMDcsIDIzMCwgMTAyLCAyMCwgMSwgMTA3LCAKLSAgICAyMjAsIDI3LCAyMCwgMSwgMTA3LCAyMjAsIDM3LCAyMCwgMSwgMTA3LCAyMzMsIDE1NSwgMjAsIDEsIDEwNywgMjI3LCAyMzcsIAotICAgIDIwLCAxLCAxMDcsIDIxOSwgMjI1LCAyMCwgMSwgMTA3LCAyMjcsIDI0NiwgMjAsIDEsIDEwNywgMjI1LCAyMTEsIDIwLCAxLCAKLSAgICAxMDcsIDIyOCwgMjMzLCAyMCwgMSwgMTA3LCAyMTksIDI1MiwgMjAsIDEsIDEwNywgMjI0LCAxMzMsIDIwLCAxLCAxMDcsIAotICAgIDIzMCwgNDYsIDIwLCAxLCAxMDcsIDIzMiwgMTE5LCAyMCwgMSwgMTA3LCAyMjMsIDg0LCAyMzAsIDk2LCAyMCwgMSwgMTA3LCAKLSAgICAyMTYsIDExNywgMjAsIDEsIDEwNywgMjI3LCAyMzgsIDIwLCAxLCAxMDcsIDIzMSwgMTIzLCAxOTgsIDIwLCAxLCAxMDcsIAotICAgIDIyMSwgMjMyLCAyMCwgMSwgMTA3LCAyNDQsIDE5NSwgMjAsIDEsIDgyLCAyMjksIDE0MywgMjAsIDEsIDgyLCAyMTYsIDE2LCAKLSAgICAyMCwgMSwgODIsIDIzMSwgMTEyLCAyMCwgMSwgODIsIDIzMywgODgsIDIwLCAxLCA4MiwgMjEzLCAxMjgsIDIwLCAxLCA4MiwgCi0gICAgMjMyLCAxMjUsIDIwLCAxLCA4MiwgMjI2LCA4OSwgMjAsIDEsIDgyLCAyMTksIDQ1LCAyMCwgMSwgODIsIDIyMywgMTQ1LCAKLSAgICAyMCwgMSwgODIsIDIyOCwgMywgMjAsIDEsIDgyLCAyMjksIDExNCwgMjAsIDEsIDgyLCAyMjQsIDE0NywgMjAsIDEsIDgyLCAKLSAgICAyMTcsIDYyLCAyMCwgMSwgODIsIDIyOSwgMjIsIDIwLCAxLCA4MiwgMjMzLCAyNDUsIDIwLCAxLCA4MiwgMjExLCAxODcsIAotICAgIDIwLCAxLCA4MiwgMjIxLCAxNzAsIDIwLCAxLCA4MiwgMjI5LCA0NSwgMjAsIDEsIDgyLCAyMjYsIDg2LCAyMCwgMSwgODIsIAotICAgIDIxNiwgMTcsIDIwLCAxLCA4MiwgMjMzLCAyMDIsIDIwLCAxLCA4MiwgMjMyLCAxMzksIDIwLCAxLCA4MiwgMjI4LCA2LCAyMCwgCi0gICAgMSwgODIsIDIyOCwgMjU0LCAyMCwgMSwgODIsIDIzMSwgMjIwLCAyMCwgMSwgODIsIDIyOSwgMTUsIDIwLCAxLCA4MiwgMjI4LCAKLSAgICAyNTMsIDIwLCAxLCA4MiwgMjI4LCA1LCAyMCwgMSwgODIsIDIyMiwgMjM3LCAyMCwgMSwgODIsIDIyOCwgMTcxLCAyMCwgMSwgCi0gICAgODIsIDIyNSwgMjEwLCAyMCwgMSwgODIsIDIyMiwgMzEsIDIwLCAxLCA4MiwgMjI5LCAzMCwgMjAsIDEsIDgyLCAyMzEsIDEwLCAKLSAgICAyMCwgMSwgODIsIDI0MiwgMjI3LCAyMCwgMSwgODIsIDIyOSwgMTgsIDIwLCAxLCA4MiwgMjI4LCAxODIsIDIwLCAxLCA4MiwgCi0gICAgMjMxLCAxNzIsIDIwLCAxLCA4MiwgMjMyLCAxMjEsIDIwLCAxLCA4MiwgMjI5LCA1MCwgMjAsIDEsIDgyLCAyMjksIDEyNywgCi0gICAgMjAsIDEsIDgyLCAyMTcsIDg1LCAyMjcsIDI0NCwgMjAsIDEsIDgyLCAyMjAsIDEyNywgMjAsIDEsIDgyLCAyMjQsIDE0MywgCi0gICAgMjAsIDEsIDgyLCAyMjksIDE0NywgMjE5LCA1MSwgMjAsIDEsIDgyLCAyMjksIDM4LCAyMjcsIDE2MCwgMjAsIDEsIDgyLCAKLSAgICAyMTEsIDQsIDIwLCAxLCA4MiwgMjQyLCAyMjgsIDIwLCAxLCA4MiwgMjE1LCAxMTcsIDIwLCAxLCA4MiwgMjExLCAxOSwgMjAsIAotICAgIDEsIDgyLCAyMjUsIDE2LCAyMCwgMSwgODIsIDIxNSwgMTA3LCAyMCwgMSwgODIsIDIzNCwgMTU0LCAyMCwgMSwgODIsIDIxOCwgCi0gICAgODAsIDIwLCAxLCA4MiwgMjE2LCAyMTksIDIwLCAxLCA4MiwgMjEzLCAxODQsIDIwLCAxLCA4MiwgMjEyLCA2LCAyMCwgMSwgCi0gICAgODIsIDIzMywgMTMyLCAyMCwgMSwgODIsIDIyNCwgMTUwLCAyMCwgMSwgODIsIDIxNywgOTYsIDIwLCAxLCA4MiwgMjQyLCAKLSAgICAyNDcsIDIwLCAxLCA4MiwgMjI5LCA1OSwgMjAsIDEsIDgyLCAyMjAsIDQwLCAyMCwgMSwgODIsIDIzMSwgNSwgMjAsIDEsIAotICAgIDgyLCAyMzEsIDExNiwgMjAsIDEsIDgyLCAyMjcsIDExNSwgMjAsIDEsIDgyLCAyMjgsIDEzNiwgMjAsIDEsIDgyLCAyNDMsIAotICAgIDczLCAyMCwgMSwgODIsIDIxNSwgMTA4LCAyMCwgMSwgODIsIDIzMywgMjExLCAyMCwgMSwgODIsIDIxMSwgNjcsIDIwLCAxLCAKLSAgICA4MiwgMjI3LCAxNDksIDI1MCwgMTYsIDIwLCAxLCA4MiwgMjEwLCAyNTAsIDIwLCAxLCA4MiwgMjMxLCAyMiwgMjAsIDEsIAotICAgIDgyLCAyMjksIDEzMiwgMjAsIDEsIDgyLCAyMjUsIDEwMCwgMjAsIDEsIDgyLCAyMTAsIDE5NywgMjAsIDEsIDgyLCAyMzMsIAotICAgIDYsIDIwLCAxLCA4MiwgMjQzLCAyMzMsIDIwLCAxLCA4MiwgMjQzLCA3MiwgMjAsIDEsIDgyLCAyMjksIDgsIDIwLCAxLCA4MiwgCi0gICAgMjM0LCAxNTYsIDIwLCAxLCA4MiwgMjMxLCAyMjMsIDIwLCAxLCA4MiwgMjI5LCAyMSwgMjAsIDEsIDgyLCAyNDIsIDIzNCwgCi0gICAgMjAsIDEsIDgyLCAyNDQsIDE5NiwgMjAsIDEsIDgyLCAyMjcsIDIzOSwgMjAsIDEsIDgyLCAyMjUsIDE1MywgMjAsIDEsIDgyLCAKLSAgICAyMTEsIDE3LCAyMCwgMSwgODIsIDIyOSwgNDYsIDIwLCAxLCA4MiwgMjI3LCAxNDksIDI1MiwgMjMsIDIwLCAxLCA4MiwgCi0gICAgMjI3LCA5NSwgMjAsIDEsIDgyLCAyMjQsIDI0NywgMjAsIDEsIDgyLCAyMzAsIDIyMCwgMjAsIDEsIDgyLCAyNDMsIDIzMSwgCi0gICAgMjAsIDEsIDgyLCAyMjksIDIyMCwgMjAsIDEsIDgyLCAyMzAsIDEwMCwgMjAsIDEsIDgyLCAyNDIsIDIzMywgMjAsIDEsIDgyLCAKLSAgICAyNDMsIDIzNSwgNzMsIDIwLCAxLCA4MiwgMjMwLCA0NywgMjAsIDEsIDgyLCAyMjQsIDE0NiwgMjAsIDEsIDgyLCAyMjksIAotICAgIDEwLCAyMCwgMSwgODIsIDIzMywgMTg5LCAyMCwgMSwgODIsIDIyNSwgOTcsIDIwLCAxLCA4MiwgMjI3LCAyNDcsIDIwLCAxLCAKLSAgICA4MiwgMjExLCAxOCwgMjAsIDEsIDgyLCAyMjksIDMxLCAyMCwgMSwgODIsIDIyNiwgOTAsIDIyNSwgMTg3LCAyMCwgMSwgODIsIAotICAgIDI0MywgMjM1LCAyNTEsIDE1LCAyMCwgMSwgODIsIDI0NCwgMzcsIDIwLCAxLCA4MiwgMjI4LCAxNzYsIDIwLCAxLCA4MiwgCi0gICAgNjEsIDIwLCAxLCA4MiwgMjE2LCAxMCwgMjAsIDEsIDgyLCA3NiwgMjAsIDEsIDgyLCA3MywgMjAsIDEsIDgyLCAyMzMsIDg2LCAKLSAgICAyMCwgMSwgODIsIDIyNiwgOTAsIDIyNSwgMjMsIDIwLCAxLCA4MiwgMjE3LCAxMDEsIDIwLCAxLCA4MiwgMjE3LCA1MSwgMjAsIAotICAgIDEsIDgyLCAyMjksIDE0NywgMjMwLCAzNCwgMjQwLCAyMzQsIDIwLCAxLCA4MiwgMjIwLCAxNSwgMjAsIDEsIDgyLCAyMTEsIAotICAgIDE0LCAyMCwgMSwgODIsIDIyOCwgMjQ3LCAyMCwgMSwgODIsIDIxMCwgMjAyLCAyMCwgMSwgODIsIDIxMCwgMjI3LCAyMTcsIAotICAgIDI0MCwgMjAsIDEsIDgyLCAyMTAsIDIyNywgMjQ5LCAxNDcsIDIwLCAxLCA4MiwgMjEwLCAxODcsIDIwLCAxLCA4MiwgMjEwLCAKLSAgICAxOTUsIDIwLCAxLCA4MiwgMjM0LCAxNDIsIDIwLCAxLCA4MiwgMjI1LCAxNTEsIDIwLCAxLCA4MiwgMjI4LCAxNzcsIDI0NSwgCi0gICAgMTAyLCAyMCwgMSwgODIsIDIyNCwgMTQ0LCAyMCwgMSwgODIsIDIxMSwgMTkyLCAyMCwgMSwgODIsIDI0NCwgMTQ3LCAyMCwgCi0gICAgMSwgODIsIDIxMywgMjUwLCAyMCwgMSwgODIsIDIzMiwgOTgsIDIwLCAxLCA4MiwgMjMwLCAyMzAsIDIwLCAxLCA4MiwgMjIzLCAKLSAgICA1MSwgMjAsIDEsIDgyLCAyMjMsIDE3MSwgMjAsIDEsIDgyLCAyMjgsIDI0NiwgMjAsIDEsIDgyLCAyMjksIDc3LCAyMCwgMSwgCi0gICAgODIsIDIyMCwgNywgMjAsIDEsIDgyLCAyMTksIDI1MiwgMjAsIDEsIDgyLCAyNDMsIDIzNSwgMjIzLCA4NiwgMjAsIDEsIDgyLCAKLSAgICAxOTcsIDIwLCAxLCA4MiwgMjI1LCAxMDgsIDIwLCAxLCA4MiwgMjMyLCAxMTksIDIwLCAxLCA4MiwgMjM0LCAyOCwgMjAsIDEsIAotICAgIDgyLCAyMzEsIDU4LCAyMCwgMSwgODIsIDE4NCwgMjAsIDEsIDgyLCAyMzEsIDE2OSwgMjAsIDEsIDgyLCAyMTYsIDIyMSwgCi0gICAgMjAsIDEsIDgyLCAyMzQsIDkyLCAyMCwgMSwgODIsIDIzMCwgMTUwLCAyMCwgMSwgODIsIDIxNiwgMjQ3LCAyMCwgMSwgODIsIAotICAgIDI0NCwgMTY5LCAyMCwgMSwgODIsIDI0MiwgMjIzLCAyMCwgMSwgMjI1LCAxMzcsIDE3NiwgMjAsIDEsIDIyNSwgMTM3LCA3MCwgCi0gICAgMjAsIDEsIDIyNSwgMTM3LCAyMzMsIDIxNywgMjAsIDEsIDIyNSwgMTM3LCAyNDUsIDIwOSwgMjAsIDEsIDIyNSwgMTM3LCAKLSAgICAyMjMsIDEwOCwgMjAsIDEsIDIyNSwgMTM3LCAyMTcsIDg2LCAyMCwgMSwgMjI1LCAxMzcsIDIyNywgMTQ4LCAyMCwgMSwgCi0gICAgMjI1LCAxMzcsIDIzMywgMTM1LCAyMCwgMSwgMjI1LCAxMzcsIDIyMiwgMjM5LCAyMCwgMSwgMjI1LCAxMzcsIDIyMywgMjksIAotICAgIDIwLCAxLCAyMjUsIDEzNywgMjMxLCA3OSwgMjAsIDEsIDIyNSwgMTM3LCAyMTcsIDEwMSwgMjAsIDEsIDIyNSwgMTM3LCAKLSAgICAyMjksIDE0NiwgMjAsIDEsIDIyNSwgMTM3LCAyMjgsIDE4MywgMjAsIDEsIDIyNSwgMTM3LCAxOTMsIDIwLCAxLCAyMjUsIAotICAgIDEzNywgMjE4LCA0LCAyMCwgMSwgMjI1LCAxMzcsIDIyMCwgMjcsIDIwLCAxLCAyMjUsIDEzNywgMjE5LCAxOTEsIDIwLCAxLCAKLSAgICAyMjUsIDEzNywgMjIwLCAxMjMsIDIwLCAxLCAyMjUsIDEzNywgMjMzLCAxNTUsIDIwLCAxLCAyMjUsIDEzNywgMjM0LCAxNTYsIAotICAgIDIwLCAxLCAyMjUsIDEzNywgMjI3LCAyMDksIDIwLCAxLCAyMjUsIDEzNywgMjI3LCAyMzcsIDIwLCAxLCAyMjUsIDEzNywgCi0gICAgMjI4LCAxNTQsIDIwLCAxLCAyMjUsIDEzNywgMjEwLCAyMjYsIDIwLCAxLCAyMjUsIDEzNywgMjE5LCAyMjUsIDIwLCAxLCAKLSAgICAyMjUsIDEzNywgMTkxLCAyMCwgMSwgMjI1LCAxMzcsIDIyOCwgOSwgMjAsIDEsIDIyNSwgMTM3LCAyMjUsIDE1MSwgMjAsIDEsIAotICAgIDIyNSwgMTM3LCAyMjcsIDI0NiwgMjAsIDEsIDIyNSwgMTM3LCAyMTEsIDE5MiwgMjAsIDEsIDIyNSwgMTM3LCAyMjUsIDIxMSwgCi0gICAgMjAsIDEsIDIyNSwgMTM3LCAyMjIsIDE0MCwgMjAsIDEsIDIyNSwgMTM3LCAyMjgsIDIzMywgMjAsIDEsIDIyNSwgMTM3LCAKLSAgICAyMjMsIDUxLCAyMCwgMSwgMjI1LCAxMzcsIDIzNCwgMTY1LCAyMCwgMSwgMjI1LCAxMzcsIDIyOSwgNywgMjAsIDEsIDIyNSwgCi0gICAgMTM3LCAyMjksIDU2LCAyMCwgMSwgMjI1LCAxMzcsIDIyMCwgNywgMjAsIDEsIDIyNSwgMTM3LCAyMjQsIDE0NywgMjAsIDEsIAotICAgIDIyNSwgMTM3LCAyNDQsIDM3LCAyMCwgMSwgMjI1LCAxMzcsIDIxMiwgNjUsIDIwLCAxLCAyMjUsIDEzNywgMjMyLCAyNDEsIAotICAgIDIwLCAxLCAyMjUsIDEzNywgMjMyLCAxMTksIDIwLCAxLCAyMjUsIDEzNywgMjM0LCAyOCwgMjAsIDEsIDIyNSwgMTM3LCAKLSAgICAyMzEsIDExNCwgMjAsIDEsIDIyNSwgMTM3LCAyMjMsIDgzLCAyMCwgMSwgMjI1LCAxMzcsIDE4NCwgMjAsIDEsIDIyNSwgCi0gICAgMTM3LCAyMzAsIDE2MSwgMjAsIDEsIDIyNSwgMTM3LCAyMzEsIDEyMiwgMjAsIDEsIDIyNSwgMTM3LCAyMTYsIDIzMCwgMjAsIAotICAgIDEsIDIyNSwgMTM3LCAyMzMsIDI1MSwgMjAsIDEsIDIyNSwgMTM3LCAyMjEsIDI1MSwgMjAsIDEsIDIyNSwgMTM3LCAyMTIsIAotICAgIDExNSwgOTUsIDEsIDE5MCwgOTUsIDEsIDI1MiwgMTkxLCA5NSwgMSwgOCwgMTkwLCA5NSwgMSwgMjI1LCA0MiwgOTUsIDEsIAotICAgIDE4NCwgOTUsIDEsIDIzMCwgMjMzLCA5NSwgMSwgMjU0LCAyMywgMTg0LCA5NSwgMSwgMjQ0LCAxOTYsIDk1LCAxLCAyMTQsIAotICAgIDI3LCA5NSwgMSwgMjEzLCAxNzcsIDk1LCAxLCAyMTcsIDEwNSwgOTUsIDEsIDI0OCwgMjIxLCA5NSwgMSwgOCwgMjE1LCAKLSAgICAxNTYsIDk1LCAxLCA4LCAyMTcsIDEwNSwgOTUsIDEsIDIxNSwgMTU2LCA5NSwgMSwgMjQ4LCAxMzUsIDk1LCAxLCAxOTcsIAotICAgIDk1LCAxLCAyMjgsIDIzNywgOTUsIDEsIDgsIDIyOCwgMTEwLCA5NSwgMSwgMjU0LCAyMywgMTk3LCA5NSwgMSwgMjI4LCAKLSAgICAxMTAsIDk1LCAxLCAyMjgsIDk2LCA5NSwgMSwgMjMzLCAxMzUsIDk1LCAxLCAyMzIsIDYxLCA5NSwgMSwgMjMyLCAyNTQsIAotICAgIDk1LCAxLCAyMzIsIDI0MywgOTUsIDEsIDIxNiwgNTYsIDk1LCAxLCAyNDcsIDE1MywgOTUsIDEsIDIxNiwgNDgsIDk1LCAxLCAKLSAgICAyNDcsIDE1MiwgOTUsIDEsIDE3NiwgOTUsIDEsIDI0MywgMTM1LCA5NSwgMSwgOCwgMTc2LCA5NSwgMSwgMjI0LCA4OCwgOTUsIAotICAgIDEsIDIyNCwgNjYsIDk1LCAxLCAyMjksIDc3LCA5NSwgMSwgMjI5LCAyOCwgOTUsIDEsIDI1NCwgMjMsIDIyOSwgNzcsIDk1LCAKLSAgICAxLCAxNjIsIDk1LCAxLCAyMTEsIDE2NSwgOTUsIDEsIDI0MiwgMjQ5LCA5NSwgMSwgMjQyLCAyMjYsIDk1LCAxLCAyMTUsIAotICAgIDE2NSwgOTUsIDEsIDI0NiwgMjYsIDk1LCAxLCAyMjcsIDE2NSwgOTUsIDEsIDIyNywgMTUwLCA5NSwgMSwgMjE1LCAxNzUsIAotICAgIDk1LCAxLCAyNDYsIDMzLCA5NSwgMSwgOCwgMjE1LCAxNzUsIDk1LCAxLCA4LCAyNDYsIDMzLCA5NSwgMSwgMjIzLCAxMDYsIAotICAgIDIxNSwgMTc1LCA5NSwgMSwgMjIwLCAxMDIsIDk1LCAxLCAyMTgsIDIyMywgOTUsIDEsIDIxMCwgODIsIDk1LCAxLCAyMTAsIAotICAgIDE0LCA5NSwgMSwgMjE1LCAxODMsIDk1LCAxLCAyNDYsIDM4LCA5NSwgMSwgOCwgMjE1LCAxODMsIDk1LCAxLCAyMDYsIDk1LCAKLSAgICAxLCAyMTAsIDExNiwgOTUsIDEsIDIxMCwgMTUsIDk1LCAxLCAyMDksIDI0MywgOTUsIDEsIDIwOSwgMjIzLCA5NSwgMSwgCi0gICAgMjU0LCAyMywgMjA5LCAyNDMsIDk1LCAxLCAyMDksIDIxNSwgOTUsIDEsIDIwOSwgMjIyLCA5NSwgMSwgMjEyLCA2NSwgOTUsIAotICAgIDEsIDI1NCwgMjA5LCA5NSwgMSwgMjQxLCAxODksIDk1LCAxLCAyMjksIDE5MiwgOTUsIDUsIDI1MywgMjIyLCA5NSwgNSwgCi0gICAgMjIzLCAxMDYsIDIxMywgMTMzLCA5NSwgNSwgMjIzLCAxMDYsIDI1MywgMjIyLCA5NSwgMjUsIDUsIDYxLCA5NSwgMjUsIDUsIAotICAgIDI1NSwgNzMsIDk1LCAyNSwgNSwgMjU0LCAyMDUsIDk1LCAyNSwgNSwgMjU0LCAxMjMsIDk1LCAyNSwgNSwgMjU0LCAxMTUsIAotICAgIDk1LCAyNSwgNSwgNzYsIDk1LCAyNSwgNSwgMjI2LCAxODMsIDk1LCAyNSwgNSwgMjExLCAyMjcsIDk1LCAyNSwgNSwgMjEyLCAKLSAgICA5OCwgOTUsIDI1LCA1LCA3NSwgOTUsIDI1LCA1LCAyNDUsIDE1MCwgOTUsIDI1LCA1LCAyNDUsIDEzOCwgOTUsIDI1LCA1LCAKLSAgICAyMjYsIDIzMiwgOTUsIDI1LCA1LCA3MywgOTUsIDI1LCA1LCAyNDAsIDExOSwgOTUsIDI1LCA1LCAyNDAsIDExOCwgOTUsIAotICAgIDI1LCA1LCAyNDAsIDExNywgOTUsIDI1LCA1LCAyMzUsIDE4OSwgOTUsIDI1LCA1LCAyMzYsIDYwLCA5NSwgMjUsIDUsIDIzNiwgCi0gICAgMzMsIDk1LCAyNSwgNSwgMjM1LCAxNTYsIDk1LCAyNSwgNSwgMjM1LCAyMzEsIDk1LCAyNSwgNSwgNzAsIDk1LCAyNSwgNSwgCi0gICAgMjE0LCAyMjksIDk1LCAyNSwgNSwgMjE0LCAyMjgsIDk1LCAyNSwgNSwgMjE0LCAyMjcsIDk1LCAyNSwgNSwgMjE0LCAxMTgsIAotICAgIDk1LCAyNSwgNSwgMjE0LCAyMTEsIDk1LCAyNSwgNSwgMjE0LCAxNzgsIDk1LCAyNSwgNSwgMjExLCAxMTcsIDk1LCAyNSwgNSwgCi0gICAgMjExLCA4LCA5NSwgMjUsIDUsIDI1NCwgMjQzLCA5NSwgMjUsIDUsIDI1NCwgMjM5LCA5NSwgMjUsIDUsIDI0NSwgODYsIDk1LCAKLSAgICAyNSwgNSwgMjIyLCAxODMsIDI0NSwgODYsIDk1LCAyNSwgNSwgMjQ1LCA5MiwgOTUsIDI1LCA1LCAyMjIsIDE4MywgMjQ1LCAKLSAgICA5MiwgOTUsIDI1LCA1LCAyNTQsIDIwMSwgOTUsIDI1LCA1LCAyNDUsIDE5NSwgOTUsIDI1LCA1LCAyNTMsIDE5MiwgOTUsIAotICAgIDI1LCA1LCAyMjYsIDEzNCwgOTUsIDI1LCA1LCAyMzAsIDI1LCA5NSwgMjUsIDUsIDIyOSwgNzksIDk1LCAxMzgsIDIyMiwgCi0gICAgMjUxLCA5NSwgMTM4LCAyMTYsIDE0LCAyMjIsIDI1MSwgOTUsIDEzOCwgNDgsIDk1LCAxMzgsIDUxLCA5NSwgMSwgMjE2LCAKLSAgICAyOCwgOTUsIDEsIDIxNiwgMjcsIDk1LCAxLCAyMTYsIDI2LCA5NSwgMSwgMjE2LCAyNSwgOTUsIDEsIDIxNiwgMjQsIDk1LCAKLSAgICAxLCAyMTYsIDIzLCA5NSwgMSwgMjE2LCAyMiwgOTUsIDEsIDIyMywgMTA2LCAyMTYsIDI5LCA5NSwgMSwgMjIzLCAxMDYsIAotICAgIDIxNiwgMjgsIDk1LCAxLCAyMjMsIDEwNiwgMjE2LCAyNiwgOTUsIDEsIDIyMywgMTA2LCAyMTYsIDI1LCA5NSwgMSwgMjIzLCAKLSAgICAxMDYsIDIxNiwgMjQsIDk1LCAxLCAyMjMsIDEwNiwgMjE2LCAyMiwgNTYsIDEsIDI1NCwgMjMsIDc1LCAxNDEsIDEsIDI1NCwgCi0gICAgMjMsIDIxMSwgNDcsIDQ5LCAyOCwgMTYsIDIyNCwgMTU0LCA0OSwgMjgsIDE2LCAyNDgsIDE1OCwgNDksIDI4LCAxNiwgMjI1LCAKLSAgICAxNzUsIDQ5LCAyOCwgMTYsIDIyNiwgMTEzLCAyNDUsIDE3OCwgNDksIDI4LCAxNiwgMjI2LCAxMTMsIDI0NywgMjAxLCA0OSwgCi0gICAgMjgsIDE2LCAyMTQsIDE2LCAyNDUsIDE3OCwgNDksIDI4LCAxNiwgMjE0LCAxNiwgMjQ3LCAyMDEsIDQ5LCAyOCwgMTYsIAotICAgIDIzNCwgMTk3LCA0OSwgMjgsIDE2LCAyMTcsIDE2OSwgNDksIDI4LCAxNiwgMjI2LCA5LCA0OSwgMjgsIDE2LCAyMTAsIDIxNywgCi0gICAgNDksIDI4LCAxNiwgMjEwLCAyMTgsIDI0NywgMjAxLCA0OSwgMjgsIDE2LCAyMzMsIDIzNCwgNDksIDI4LCAxNiwgMjU0LCAKLSAgICA2OCwgMjQ1LCAxNzgsIDQ5LCAyOCwgMTYsIDI0NSwgMjYsIDI0NSwgMTc4LCA0OSwgMjgsIDE2LCAyMTcsIDIsIDQ5LCAyOCwgCi0gICAgMTYsIDIzNCwgMTYxLCA0OSwgMjgsIDE2LCAyNTQsIDU4LCA0OSwgMjgsIDE2LCAyNTQsIDU5LCAyNDcsIDIwMSwgNDksIDI4LCAKLSAgICAxNiwgMjE3LCAxNzUsIDQ5LCAyOCwgMTYsIDIxNiwgMTU5LCA0OSwgMjgsIDE2LCAyMjYsIDIwNiwgMjU0LCAyMSwgNDksIAotICAgIDI4LCAxNiwgMjQyLCAxNTksIDI1NCwgMjEsIDQ5LCAyOCwgMTYsIDIyNCwgMTUzLCA0OSwgMjgsIDE2LCAyNTAsIDE0OSwgCi0gICAgNDksIDI4LCAxNiwgMjE0LCA2LCA0OSwgMjgsIDE2LCAyMzUsIDE2NCwgMjU0LCAyMSwgNDksIDI4LCAxNiwgMjM0LCAxNjMsIAotICAgIDI1NCwgMjEsIDQ5LCAyOCwgMTYsIDIzNCwgMTYyLCAyNTQsIDIxLCA0OSwgMjgsIDE2LCAyMjEsIDIxMywgNDksIDI4LCAxNiwgCi0gICAgMjI2LCAwLCA0OSwgMjgsIDE2LCAyMTgsIDE0NiwgMjU0LCA2MSwgNDksIDI4LCAxNiwgMjI2LCAxMTIsIDI1NCwgMjEsIDQ5LCAKLSAgICAyOCwgMTYsIDIxNCwgMTUsIDI1NCwgMjEsIDQ5LCAyOCwgMTYsIDI1NCwgNjIsIDI1NCwgMjEsIDQ5LCAyOCwgMTYsIDI1NCwgCi0gICAgNTYsIDQ5LCAyOCwgMTYsIDIzNCwgMzcsIDQ5LCAyOCwgMTYsIDIyMywgNDYsIDQ5LCAyOCwgMTYsIDIyNSwgMTA2LCAyNTQsIAotICAgIDIxLCA0OSwgMjgsIDE2LCAyMTYsIDgzLCA0OSwgMjgsIDE2LCAyNTQsIDEyMSwgNDksIDI4LCAxNiwgMjIxLCAxNTksIDQ5LCAKLSAgICAyOCwgMTYsIDIxNywgMTc4LCAyNTQsIDIxLCA0OSwgMjgsIDE2LCAyMTcsIDE3OCwgMjMxLCA0MCwgMjE4LCAxNDQsIDQ5LCAKLSAgICAyOCwgMTYsIDIyNiwgMTA3LCAyNTQsIDIxLCA0OSwgMjgsIDE2LCAyMTYsIDE5MCwgNDksIDI4LCAxNiwgMjMzLCAyNywgNDksIAotICAgIDI4LCAxNiwgMjQ2LCA0MSwgNDksIDI4LCAxNiwgMjE1LCAyMjcsIDQ5LCAyOCwgMTYsIDIxNiwgMjMyLCA0OSwgMjgsIDE2LCAKLSAgICAyMzMsIDIzNywgNDksIDI4LCAxNiwgMjU0LCA2OCwgMjQ1LCAyNiwgMjI5LCA5NSwgNDksIDI4LCAxNiwgMjQzLCAyMzYsIAotICAgIDI1NCwgMjEsIDQ5LCAyOCwgMTYsIDIzNiwgMTIsIDQ5LCAyOCwgMTYsIDIxNSwgMTk5LCAyNTQsIDIxLCA0OSwgMjgsIDE2LCAKLSAgICAyMzQsIDIwMCwgMjE1LCAxOTgsIDQ5LCAyOCwgMTYsIDIyNSwgMjAwLCA0OSwgMjgsIDE2LCAyMjQsIDE1OCwgNDksIDI4LCAKLSAgICAxNiwgMjM0LCAxMSwgNDksIDI4LCAxNiwgMjUwLCA4MCwgMjU0LCAyMSwgNDksIDI4LCAxNiwgMjIzLCAxNDYsIDQ5LCAyOCwgCi0gICAgMTYsIDIyNiwgMTIsIDI1NCwgMjEsIDQ5LCAyOCwgMTYsIDIyNiwgMTAsIDI1NCwgMjEsIDQ5LCAyOCwgMTYsIDI0MCwgMTA5LCAKLSAgICA0OSwgMjgsIDE2LCAyMjksIDIwMywgNDksIDI4LCAxNiwgMjI1LCAxNTYsIDQ5LCAyOCwgMTYsIDIzNCwgMTIsIDI1NCwgCi0gICAgMTQ5LCA0OSwgMjgsIDE2LCAyMTUsIDE5OSwgMjU0LCAxNDksIDQ5LCAyOCwgMTYsIDIxOCwgMTIzLCA0OSwgMjgsIDE2LCAKLSAgICAyNDIsIDEyMywgNDksIDI4LCAxNiwgMjM1LCAxNjQsIDIyOSwgOTUsIDQ5LCAyOCwgMTYsIDIyNiwgMjA2LCAyMjksIDk1LCAKLSAgICA0OSwgMjgsIDE2LCAyMjYsIDExMywgMjI5LCA5NSwgNDksIDI4LCAxNiwgMjI1LCAxNTUsIDQ5LCAyOCwgMTYsIDIzMywgCi0gICAgMjU0LCA0OSwgMjgsIDE2LCAyMjUsIDE1NCwgNDksIDI4LCAxNiwgMjMzLCAyMzYsIDQ5LCAyOCwgMTYsIDIyNSwgMjAxLCAKLSAgICAyMjksIDk1LCA0OSwgMjgsIDE2LCAyMzQsIDE2MiwgMjI5LCA5NiwgMjU0LCA5NiwgNDksIDI4LCAxNiwgMjM0LCAxNjMsIAotICAgIDIyOSwgOTYsIDI1NCwgOTYsIDQ5LCAyOCwgMTYsIDIxMCwgMjE1LCA0OSwgMjgsIDE2LCAyNTQsIDU5LCAyMjksIDk1LCA0OSwgCi0gICAgMjgsIDE2LCAyNTQsIDYwLCAyMTcsIDE3NiwgMjI5LCA5NSwgNDksIDI4LCAxNiwgMjEwLCAyMTYsIDQ5LCAyOCwgMTYsIAotICAgIDIzMywgMjM1LCA0OSwgMjgsIDE2LCAyNDUsIDE3MywgNDksIDI4LCAxNiwgMjUwLCAxNTAsIDQ5LCAyOCwgMTYsIDIzMCwgCi0gICAgMTk4LCAyMzUsIDE2MywgNDksIDI4LCAxNiwgMjE0LCAxNiwgMjI5LCA5NSwgNDksIDI4LCAxNiwgMjI1LCAxMDYsIDIyOSwgCi0gICAgOTUsIDQ5LCAyOCwgMTYsIDIyNCwgMTU5LCAyMjksIDk1LCA0OSwgMjgsIDE2LCAyMjYsIDIwMywgNDksIDI4LCAxNiwgMjU0LCAKLSAgICA4NCwgNDksIDI4LCAxNiwgMjMyLCA1OCwgNDksIDI4LCAxNiwgMjI2LCAxMCwgMjI5LCA5NSwgNDksIDI4LCAxNiwgMjI2LCAKLSAgICAxMiwgMjI5LCA5NSwgNDksIDI4LCAxNiwgMjQ1LCA2MCwgMjI2LCAxMSwgNDksIDI4LCAxNiwgMjMzLCAxNTMsIDQ5LCAyOCwgCi0gICAgMTYsIDI1NCwgODUsIDQ5LCAyOCwgMTYsIDIxNSwgMTk5LCAyMjksIDk1LCA0OSwgMjgsIDE2LCAyNDUsIDE3NiwgNDksIDI4LCAKLSAgICAxNiwgMjE3LCAxNzgsIDIyOSwgOTUsIDQ5LCAyOCwgMTYsIDIxNywgMTcwLCA0OSwgMjgsIDE2LCAyNTAsIDgwLCAyMjksIAotICAgIDk1LCA0OSwgMjgsIDE2LCAyNDUsIDEwNiwgNDksIDI4LCAxNiwgMjIxLCAxNjAsIDIyOSwgOTUsIDQ5LCAyOCwgMTYsIDIxMSwgCi0gICAgMTUxLCAyMzQsIDM3LCA0OSwgMjgsIDE2LCAyMTUsIDE5NiwgNDksIDI4LCAxNiwgMjI0LCAxNjAsIDQ5LCAyOCwgMTYsIAotICAgIDIxNSwgMjAwLCA0OSwgMjgsIDE2LCAyMTUsIDE5NywgNDksIDI4LCAxNiwgMjI0LCAxNTcsIDQ5LCAyOCwgMTYsIDIxNSwgCi0gICAgMTk1LCA0OSwgMjgsIDE2LCAyMjQsIDE1NiwgNDksIDI4LCAxNiwgMjQyLCAxNTgsIDQ5LCAyOCwgMTYsIDI1NCwgMTQsIDQ5LCAKLSAgICAyOCwgMTYsIDI0NSwgNjAsIDI1NCwgMTQsIDQ5LCAyOCwgMTYsIDIyNiwgMTA3LCAyMjksIDk1LCA0OSwgMjgsIDE2LCAyMTYsIAotICAgIDE4OSwgMjQ1LCA2OSwgNDksIDI4LCAxNiwgMjE2LCAxODksIDI0NSwgMjUsIDQ5LCAyOCwgMTYsIDIxNiwgMTkxLCAyNTQsIAotICAgIDYzLCA0OSwgMjgsIDE2LCAyMTYsIDE4NCwgMjM0LCAyNDcsIDI1NCwgNTUsIDQ5LCAyOCwgMTYsIDIzNCwgMTk5LCA0OSwgCi0gICAgMjgsIDE2LCAyNDUsIDEzOSwgNDksIDI4LCAxNiwgMjExLCAxMSwgMjM0LCAxOTYsIDQ5LCAyOCwgMTYsIDIxMSwgMTEsIAotICAgIDI1NCwgOTYsIDQ5LCAyOCwgMTYsIDIxOCwgMTQ1LCA0OSwgMjgsIDE2LCAyMzQsIDM4LCAyNTQsIDk2LCA0OSwgMjgsIDE2LCAKLSAgICAyNDcsIDIwMiwgMjU0LCAyMSwgNDksIDI4LCAxNiwgMjMzLCAyMzgsIDI1NCwgMjEsIDQ5LCAyOCwgMTYsIDIzMywgMjM4LCAKLSAgICAyNTQsIDE0OSwgNDksIDI4LCAxNiwgMjMzLCAyMzgsIDIyOSwgOTUsIDQ5LCAyOCwgMTYsIDI1NCwgNjIsIDIyOSwgOTUsIAotICAgIDQ5LCAyOCwgMTYsIDI1NCwgNjQsIDQ5LCAyOCwgMTYsIDI0NywgMjAxLCA0OSwgMjgsIDE2LCAyMTUsIDIxMCwgNDksIDI4LCAKLSAgICAxNiwgMjE2LCAyMjQsIDQ5LCAyOCwgMTYsIDIzNCwgMiwgNDksIDI4LCAxNiwgMjMzLCAzMiwgMjQ1LCAxMzQsIDI1MCwgNzEsIAotICAgIDQ5LCAyOCwgMTYsIDIzMywgMzIsIDI0NiwgNDIsIDI1MCwgNzIsIDQ5LCAyOCwgMTYsIDIzMywgMzIsIDIxNSwgMjEyLCAKLSAgICAyNTAsIDcyLCA0OSwgMjgsIDE2LCAyMzMsIDMyLCAyMTYsIDIzNCwgMjUwLCA3MiwgNDksIDI4LCAxNiwgMjMzLCAzMiwgCi0gICAgMjM2LCA3LCAyNTAsIDcxLCA0OSwgMjgsIDE2LCAyNDIsIDE1OSwgMjI5LCA5NiwgMjU0LCA5NiwgNDksIDI4LCAxNiwgMjQyLCAKLSAgICAxNTksIDIyNiwgMSwgMjU0LCAxMCwgNDksIDI4LCAxNiwgMjQyLCAxNTksIDIyNiwgMSwgMjQ4LCAyOSwgNDksIDI4LCAxNiwgCi0gICAgMjQ3LCAyMjUsIDQ5LCAyOCwgMTYsIDI0NywgMjI2LCAyMjYsIDEsIDI1NCwgMTEsIDIzNCwgMTk2LCA0OSwgMjgsIDE2LCAKLSAgICAyNDcsIDIyNiwgMjI2LCAxLCAyNTQsIDExLCAyNTQsIDk2LCA0OSwgMjgsIDE2LCAyNDcsIDIyNiwgMjI2LCAxLCAyNDgsIAotICAgIDI5LCA0OSwgMjgsIDE2LCAyMTUsIDIxNiwgNDksIDI4LCAxNiwgMjU0LCAxNSwgNDksIDI4LCAxNiwgMjM2LCAxNCwgNDksIAotICAgIDI4LCAxNiwgMjQ3LCAyNDYsIDQ5LCAyOCwgMTYsIDI1NCwgMjExLCAyMjUsIDAsIDI1NCwgMTYsIDQ5LCAyOCwgMTYsIDI1NCwgCi0gICAgMjExLCAyNTQsIDEzLCA0OSwgMjgsIDE2LCAyNTQsIDIxMSwgMjU0LCAxNiwgNDksIDI4LCAxNiwgMjU0LCAyMTEsIDIzMSwgCi0gICAgMzQsIDQ5LCAyOCwgMTYsIDI1NCwgMjExLCAyMzEsIDQ1LCA0OSwgMjgsIDE2LCAyNTQsIDIxMSwgMjQyLCAxNjAsIDQ5LCAKLSAgICAyOCwgMTYsIDI1NCwgMjExLCAyNDIsIDE1NywgNDksIDI4LCAxNiwgMjU0LCAyMTEsIDIyNSwgMCwgMjQyLCAxNjAsIDQ5LCAKLSAgICAyOCwgMTYsIDIzMSwgMTUxLCAyMjQsIDE2NSwgMjQwLCAxMDcsIDQ5LCAyOCwgMTYsIDIzMSwgMTUxLCAyNTQsIDE1MSwgCi0gICAgMjI0LCAxNjUsIDI0MCwgMTA3LCA0OSwgMjgsIDE2LCAyMzEsIDE1MSwgMjQ4LCAyOCwgMjQwLCAxMDcsIDQ5LCAyOCwgMTYsIAotICAgIDIzMSwgMTUxLCAyNTQsIDE1MSwgMjQ4LCAyOCwgMjQwLCAxMDcsIDQ5LCAyOCwgMTYsIDIzMSwgMTUxLCAyMTUsIDIwNSwgCi0gICAgMjQwLCAxMDcsIDQ5LCAyOCwgMTYsIDIzMSwgMTUxLCAyMTUsIDIxNywgNDksIDI4LCAxNiwgMjMxLCAxNTEsIDIxNiwgMjI4LCAKLSAgICAyNDAsIDEwNywgNDksIDI4LCAxNiwgMjMxLCAxNTEsIDIxNiwgMjI4LCAyMzMsIDM1LCAyNDAsIDEwNywgNDksIDI4LCAxNiwgCi0gICAgMjMxLCAxNTEsIDIzMywgMzUsIDI0MCwgMTA3LCA0OSwgMjgsIDE2LCAyMzEsIDE1MSwgMjI1LCAzOSwgMjQwLCAxMDcsIDQ5LCAKLSAgICAyOCwgMTYsIDIzNSwgMTY5LCAyMTYsIDI1MSwgMjQwLCAxMDgsIDQ5LCAyOCwgMTYsIDI1NCwgNjAsIDIxNiwgMjUxLCAyNDAsIAotICAgIDEwOCwgNDksIDI4LCAxNiwgMjQ0LCAxNzIsIDIxNiwgMjI1LCA0OSwgMjgsIDE2LCAyNDQsIDE3MiwgMjMwLCAxNDMsIDQ5LCAKLSAgICAyOCwgMTYsIDI0NCwgMTcyLCAyNDcsIDIzMCwgNDksIDI4LCAxNiwgMjMxLCAxNTEsIDIxNCwgMTAsIDI0MCwgMTA3LCA0OSwgCi0gICAgMjgsIDE2LCAyMzEsIDE1MSwgMjI0LCAxNjQsIDI0MCwgMTA3LCA0OSwgMjgsIDE2LCAyMzEsIDE1MSwgMjI1LCAzOSwgMjE2LCAKLSAgICAyMjgsIDI0MCwgMTA3LCA0OSwgMjgsIDE2LCAyNDIsIDE1NSwgMjMwLCAyNiwgMjU0LCA2MywgNDksIDI4LCAxNiwgMjQyLCAKLSAgICAxNTUsIDIzMCwgMjYsIDI0NywgMjAwLCA0OSwgMjgsIDE2LCAyNDUsIDE0OCwgMjM0LCAyNDcsIDI0MywgMjM2LCAyMTMsIAotICAgIDEyNCwgNDksIDI4LCAxNiwgMjM2LCAxMywgNDksIDI4LCAxNiwgMjM2LCAxMSwgNDksIDI4LCAxNiwgMjQzLCAyMzYsIDI1NCwgCi0gICAgMjIsIDI0OCwgMjcsIDI0MCwgMTA2LCA0OSwgMjgsIDE2LCAyNDMsIDIzNiwgMjQ3LCAyNDQsIDE5MCwgNDksIDI4LCAxNiwgCi0gICAgMjQzLCAyMzYsIDI0NywgMjQ0LCAyMjksIDIwMywgNDksIDI4LCAxNiwgMjQzLCAyMzYsIDIyOSwgMTk4LCAyNDAsIDEwNywgCi0gICAgNDksIDI4LCAxNiwgMjQzLCAyMzYsIDI0NywgMjQ0LCAyNDgsIDMsIDQ5LCAyOCwgMTYsIDI0MywgMjM2LCAyMTksIDEwMiwgCi0gICAgMjQ3LCAyNDMsIDI0OCwgMywgNDksIDI4LCAxNiwgMjQzLCAyMzYsIDI0NywgMjQ0LCAyMzQsIDE4MiwgNDksIDI4LCAxNiwgCi0gICAgMjQzLCAyMzYsIDI0NywgMjQ0LCAyMTAsIDIzLCA0OSwgMjgsIDE2LCAyNDMsIDIzNiwgMjQ3LCAyNDQsIDIyOCwgMjM0LCAKLSAgICAyMzQsIDE5NiwgNDksIDI4LCAxNiwgMjQzLCAyMzYsIDI0NywgMjQ0LCAyMjgsIDIzNCwgMjU0LCA5NiwgNDksIDI4LCAxNiwgCi0gICAgMjQzLCAyMzYsIDIzMSwgMTkxLCAyNTAsIDczLCAyNDcsIDIzMCwgNDksIDI4LCAxNiwgMjQzLCAyMzYsIDIzMSwgMTkxLCAKLSAgICAyNTAsIDczLCAyMzAsIDE0MywgNDksIDI4LCAxNiwgMjQ0LCAxMjIsIDIxOSwgMTAyLCAyNTAsIDczLCAyMTQsIDksIDQ5LCAKLSAgICAyOCwgMTYsIDI0MywgMjM2LCAyMTksIDEwMiwgMjUwLCA3MywgMjE3LCAxNzksIDQ5LCAyOCwgMTYsIDI0MywgMjM2LCAyMjksIAotICAgIDk3LCA0OSwgMjgsIDE2LCAyNTAsIDc0LCAyMDksIDI0OSwgNDksIDI4LCAxNiwgMjUwLCA3NCwgMjM0LCAzNiwgNDksIDI4LCAKLSAgICAxNiwgMjUwLCA3NCwgMjE5LCA5LCA0OSwgMjgsIDE2LCAyNDMsIDIzNiwgMjQwLCAxNTQsIDIxMSwgMTAsIDIxNiwgMjI5LCAKLSAgICA0OSwgMjgsIDE2LCAyNDMsIDIzNiwgMjQ1LCAxNDksIDI1NCwgODYsIDQ5LCAyOCwgMTYsIDIxMSwgMTAsIDIxNSwgMjA2LCAKLSAgICA0OSwgMjgsIDE2LCAyNDcsIDIzOCwgMjE1LCAyMDYsIDQ5LCAyOCwgMTYsIDI0NywgMjM4LCAyMTYsIDIyOSwgNDksIDI4LCAKLSAgICAxNiwgMjQ3LCAyMzgsIDI1NCwgNjUsIDI0NiwgNDIsIDI0NywgMTM5LCA0OSwgMjgsIDE2LCAyNDcsIDIzOCwgMjMwLCAxNDEsIAotICAgIDIxNiwgMjMzLCAyNDcsIDEzOSwgNDksIDI4LCAxNiwgMjQ3LCAyMzgsIDI0NywgMjIyLCAyNDUsIDM2LCAyNDcsIDEzOSwgCi0gICAgNDksIDI4LCAxNiwgMjQ3LCAyMzgsIDIxNSwgMjE0LCAyMjYsIDIxMSwgMjQ3LCAxMzksIDQ5LCAyOCwgMTYsIDIxMSwgMTAsIAotICAgIDI1NCwgNjUsIDI0NiwgNDIsIDI0NywgMTM5LCA0OSwgMjgsIDE2LCAyMTEsIDEwLCAyMzAsIDE0MSwgMjE2LCAyMzMsIDI0NywgCi0gICAgMTM5LCA0OSwgMjgsIDE2LCAyMTEsIDEwLCAyNDcsIDIyMiwgMjQ1LCAzNiwgMjQ3LCAxMzksIDQ5LCAyOCwgMTYsIDIxMSwgCi0gICAgMTAsIDIxNSwgMjE0LCAyMjYsIDIxMSwgMjQ3LCAxMzksIDQ5LCAyOCwgMTYsIDI0MywgNDksIDI0NywgMjM3LCA0OSwgMjgsIAotICAgIDE2LCAyNDMsIDQ5LCAyMTEsIDksIDQ5LCAyOCwgMTYsIDI0NywgMjQ1LCAyNTQsIDY1LCAyMzAsIDE5OSwgNDksIDI4LCAxNiwgCi0gICAgMjQ3LCAyNDUsIDI1NCwgNjUsIDIzMSwgNzMsIDQ5LCAyOCwgMTYsIDI0NywgMjQ1LCAyNDcsIDIwMSwgNDksIDI4LCAxNiwgCi0gICAgMjQ3LCAyNDUsIDIxNiwgMTgyLCA0OSwgMjgsIDE2LCAyMTksIDE2MywgMjE2LCAxODIsIDQ5LCAyOCwgMTYsIDIxOSwgMTYzLCAKLSAgICAyMTYsIDE4MywgMjQ3LCAxODYsIDQ5LCAyOCwgMTYsIDIxOSwgMTYzLCAyMTYsIDE4MywgMjE1LCAyMDcsIDQ5LCAyOCwgMTYsIAotICAgIDIxOSwgMTYzLCAyMTYsIDE4MywgMjE2LCAyMjIsIDQ5LCAyOCwgMTYsIDIxOSwgMTYzLCAyNTMsIDI0NCwgNDksIDI4LCAxNiwgCi0gICAgMjE5LCAxNjMsIDI1MywgMjQ1LCAyNDcsIDE4NiwgNDksIDI4LCAxNiwgMjE5LCAxNjMsIDI1MywgMjQ1LCAyMTUsIDIwNywgCi0gICAgNDksIDI4LCAxNiwgMjE5LCAxNjMsIDI1MywgMjQ1LCAyMTYsIDIyMiwgNDksIDI4LCAxNiwgMjQ3LCAyMjMsIDI0MywgMzAsIAotICAgIDQ5LCAyOCwgMTYsIDI0NywgMjI5LCAyMjYsIDEzNCwgNDksIDI4LCAxNiwgMjE4LCAxMzcsIDQ5LCAyOCwgMTYsIDI1NCwgNywgCi0gICAgMTkwLCA0OSwgMjgsIDE2LCAyNTQsIDcsIDIxMywgMTI0LCA0OSwgMjgsIDE2LCAyNTQsIDcsIDI0MywgMTM1LCA0OSwgMjgsIAotICAgIDE2LCAyNTQsIDcsIDI0OCwgMywgNDksIDI4LCAxNiwgMjU0LCA3LCAyMzQsIDE4MiwgNDksIDI4LCAxNiwgMjU0LCA3LCAKLSAgICAyMTAsIDIzLCA0OSwgMjgsIDE2LCAyNTQsIDcsIDIyOCwgMjMzLCA0OSwgMjgsIDE2LCAyMzQsIDE2MiwgMjI5LCA5NiwgCi0gICAgMjMxLCA0NCwgNDksIDI4LCAxNiwgMjM0LCAxNjMsIDIyOSwgOTYsIDIzMSwgNDQsIDQ5LCAyOCwgMTYsIDIzNCwgMTYyLCAKLSAgICAyMjksIDk2LCAyMzQsIDE5NiwgNDksIDI4LCAxNiwgMjM0LCAxNjMsIDIyOSwgOTYsIDIzNCwgMTk2LCA0OSwgMjgsIDE2LCAKLSAgICAyMzQsIDM4LCAyMzQsIDE5NiwgNDksIDI4LCAxNiwgMjQyLCAxNTksIDIyOSwgOTYsIDIzNCwgMTk2LCAyOCwgMTYsIDIxOSwgCi0gICAgMTU1LCAyNTIsIDEzNSwgMjgsIDE2LCA1MiwgMjUyLCAxMzUsIDI4LCAxNiwgNDAsIDI1MiwgMTM1LCAyOCwgMTYsIDIyMywgCi0gICAgNTAsIDQwLCAyNTIsIDEzNSwgMjgsIDE2LCAyNDgsIDE1NSwgMjUyLCAxMzUsIDI4LCAxNiwgMjE5LCAyNTEsIDI1MiwgMTM1LCAKLSAgICAyOCwgMTYsIDQzLCAyMjMsIDc3LCA1MCwgMjgsIDE2LCA0NCwgMjIzLCA3NywgNTAsIDI4LCAxNiwgMjIzLCA3NywgMjQ3LCAKLSAgICAxMTgsIDI4LCAxNiwgMjQ4LCAxOTYsIDIyMSwgMTYzLCAyOCwgMTYsIDI0OCwgMjIyLCAyNTAsIDI0OSwgMjgsIDE2LCAyMjEsIAotICAgIDE2MywgMjgsIDE2LCAyNDksIDIzNCwgMjgsIDE2LCAyMjMsIDc1LCAyNDQsIDExMSwgMjgsIDE2LCAyMjMsIDc1LCAyNDQsIAotICAgIDExMCwgMjgsIDE2LCAyMjMsIDc1LCAyNDQsIDEwOSwgMjgsIDE2LCAyNDQsIDEzMSwgMjgsIDE2LCAyNDQsIDEzMiwgNTEsIAotICAgIDI4LCAxNiwgMjUxLCAxNDgsIDc4LCAyOCwgMTYsIDI1MSwgMjQsIDI4LCAxNiwgMjUxLCAxNTksIDI4LCAxNiwgMTI3LCAyOCwgCi0gICAgMTYsIDIyNiwgMTkzLCAyMTgsIDE2MywgMjgsIDE2LCAyMTUsIDU3LCAyMTgsIDE2MywgMjgsIDE2LCAyMTYsIDE0MiwgMjE4LCAKLSAgICAxNjMsIDI4LCAxNiwgMjQ0LCAxMCwgMjE4LCAxNjMsIDI4LCAxNiwgMjQ0LCA4MCwgMjE4LCAxNjMsIDI4LCAxNiwgMjE5LCAKLSAgICAxMjQsIDIxOCwgMTYzLCAyOCwgMTYsIDIxOSwgMTIyLCAyNDMsIDI1MCwgMjgsIDE2LCAyNDQsIDgsIDI0MywgMjUwLCAyOCwgCi0gICAgMTYsIDI0MywgMjAzLCAyNTAsIDE0LCAyOCwgMTYsIDI0MywgMjAzLCAyNTAsIDE1LCAyMjYsIDEzNiwgMjU0LCAxNDIsIDI4LCAKLSAgICAxNiwgMjQzLCAyMDMsIDI1MCwgMTUsIDIyNiwgMTM2LCAyNTIsIDEyMiwgMjgsIDE2LCAyNTEsIDY3LCAyNTAsIDE0LCAyOCwgCi0gICAgMTYsIDI0NSwgNywgMjUwLCAxNCwgMjgsIDE2LCAyNDUsIDcsIDI1MCwgMTUsIDIyNiwgMTM2LCAyNTQsIDE0MiwgMjgsIDE2LCAKLSAgICAyNDUsIDcsIDI1MCwgMTUsIDIyNiwgMTM2LCAyNTIsIDEyMiwgMjgsIDE2LCAyNDYsIDgzLCAyNTAsIDEzLCAyOCwgMTYsIAotICAgIDI0NiwgODMsIDI1MCwgMTIsIDI4LCAxNiwgMjMwLCA4NSwgMjMxLCA5MCwgMjIzLCA2MSwgMjgsIDE2LCA1MiwgMjIwLCA3NSwgCi0gICAgMjgsIDE2LCA1MiwgMjQ0LCA2NSwgMjgsIDE2LCAyNDQsIDY2LCAyMTQsIDE2MywgMjgsIDE2LCAyNDQsIDY2LCAyNDYsIAotICAgIDEwNiwgMjgsIDE2LCAyMjksIDE4OCwgMjE0LCAxNjMsIDI4LCAxNiwgMjI5LCAxODgsIDI0NiwgMTA2LCAyOCwgMTYsIDIyMCwgCi0gICAgNzYsIDIxNCwgMTYzLCAyOCwgMTYsIDIyMCwgNzYsIDI0NiwgMTA2LCAyOCwgMTYsIDIyNCwgMjIsIDEzOCwgMjIwLCA3NSwgCi0gICAgMjgsIDE2LCAyMjQsIDIyLCAxMzgsIDI0NCwgNjUsIDI4LCAxNiwgMjQ5LCAyMTYsIDIxNiwgODcsIDI4LCAxNiwgMjQ5LCAKLSAgICA4NSwgMjE2LCA4NywgMjgsIDE2LCAyMjYsIDEzNiwgMjU0LCAxNDIsIDI4LCAxNiwgMjI2LCAxMzYsIDI1MiwgMTIyLCAyOCwgCi0gICAgMTYsIDIyNCwgNCwgMjU0LCAxNDIsIDI4LCAxNiwgMjI0LCA0LCAyNTIsIDEyMiwgMjgsIDE2LCAyMzAsIDg4LCAyMjMsIDYxLCAKLSAgICAyOCwgMTYsIDIxMSwgMjUxLCAyMjMsIDYxLCAyOCwgMTYsIDE2MywgMjIzLCA2MSwgMjgsIDE2LCAyMjQsIDIyLCAyMjMsIAotICAgIDYxLCAyOCwgMTYsIDI0NSwgMTg5LCAyMjMsIDYxLCAyOCwgMTYsIDIxOSwgMTE4LCAyMjMsIDYxLCAyOCwgMTYsIDIxNiwgCi0gICAgMTYwLCAyMjMsIDYxLCAyOCwgMTYsIDIxOSwgMTEwLCAyMjMsIDYxLCAyOCwgMTYsIDEyMywgMjQwLCAyMTEsIDIxNSwgNzEsIAotICAgIDIyMywgNjEsIDI4LCAxNiwgMjExLCAxNzksIDIyOCwgNDMsIDI4LCAxNiwgOTYsIDIyOCwgNDMsIDI4LCAxNiwgMjUwLCAzNiwgCi0gICAgMjExLCAxNzksIDIyOCwgNDMsIDI4LCAxNiwgNDIsIDIyOCwgNDQsIDIxMSwgMjUzLCAyOCwgMTYsIDQyLCAyMjgsIDQ0LCAKLSAgICAyNTEsIDIyMSwgMjgsIDE2LCAyMTUsIDIyNiwgMjI4LCA0NCwgMTIwLCAyMTEsIDI1MywgMjgsIDE2LCAyMTUsIDIyNiwgCi0gICAgMjI4LCA0NCwgMTIwLCAyNTEsIDIyMSwgMjgsIDE2LCAyMTUsIDIyNiwgMjI4LCA0NCwgNDMsIDIxMSwgMjUzLCAyOCwgMTYsIAotICAgIDIxNSwgMjI2LCAyMjgsIDQ0LCA0MywgMjUxLCAyMjEsIDI4LCAxNiwgMjE1LCAyMjYsIDIyOCwgNDQsIDQ0LCAyMTEsIDI1MywgCi0gICAgMjgsIDE2LCAyMTUsIDIyNiwgMjI4LCA0NCwgNDQsIDI1MSwgMjIxLCAyOCwgMTYsIDIxNSwgMjI2LCAyMjgsIDQ0LCAxMjQsIAotICAgIDIxMSwgMjUzLCAyOCwgMTYsIDIxNSwgMjI2LCAyMjgsIDQ0LCAxMjQsIDI1MSwgMjIxLCAyOCwgMTYsIDIxNSwgMjI2LCAKLSAgICAyMjgsIDQ0LCAxMjAsIDQ0LCAyMTEsIDI1MywgMjgsIDE2LCAyMTUsIDIyNiwgMjI4LCA0NCwgMTIwLCA0NCwgMjUxLCAyMjEsIAotICAgIDI4LCAxNiwgMjMwLCAxMjksIDIyOCwgNDQsIDIxMSwgMjUzLCAyOCwgMTYsIDIzMCwgMTI5LCAyMjgsIDQ0LCAyNTEsIDIyMSwgCi0gICAgMjgsIDE2LCAyMTUsIDIyMywgMjI4LCA0NCwgMTI0LCAyMTEsIDI1MywgMjgsIDE2LCAyMTUsIDIyMywgMjI4LCA0NCwgMTI0LCAKLSAgICAyNTEsIDIyMSwgMjgsIDE2LCAyMjYsIDQsIDIyOCwgNDMsIDI4LCAxNiwgMjEzLCAxMzIsIDIyOCwgNDMsIDI4LCAxNiwgCi0gICAgMjI4LCA0NCwgMjUxLCAyMjEsIDI4LCAxNiwgMjI3LCAyMDMsIDIyOCwgNDMsIDI4LCAxNiwgMjQ5LCAyNDEsIDIyOCwgNDQsIAotICAgIDIxMSwgMjUzLCAyOCwgMTYsIDI0OSwgMjQxLCAyMjgsIDQ0LCAyNTEsIDIyMSwgMjgsIDE2LCAyNTEsIDE0NiwgMjgsIDE2LCAKLSAgICAyMTEsIDI1MSwgMjI4LCA0NywgMjgsIDE2LCAxNjMsIDIyOCwgNDcsIDI4LCAxNiwgMjI0LCAyMiwgMjI4LCA0NywgMjgsIAotICAgIDE2LCAyNDUsIDE4OSwgMjI4LCA0NywgMjgsIDE2LCAyMTksIDExOCwgMjI4LCA0NywgMjgsIDE2LCAyMTYsIDE2MCwgMjI4LCAKLSAgICA0NywgMjgsIDE2LCAyMTksIDExMCwgMjI4LCA0NywgMjgsIDE2LCAxMjMsIDI0MCwgMjExLCAyMTUsIDcxLCAyMjgsIDQ3LCAKLSAgICAyOCwgMTYsIDM4LCAyMTgsIDEzOSwgMjgsIDE2LCAzOCwgMjE4LCAyNDAsIDIxOCwgMTM5LCAyOCwgMTYsIDM4LCAyMTUsIAotICAgIDIzNCwgMjgsIDE2LCAzOCwgMjE1LCAyMzMsIDI4LCAxNiwgMzgsIDIxNSwgMjMyLCAyOCwgMTYsIDI0NCwgMTAxLCAyMTUsIAotICAgIDIzNCwgMjgsIDE2LCAyNDQsIDEwMSwgMjE1LCAyMzMsIDI4LCAxNiwgMjQ0LCAxMDEsIDIxNSwgMjMyLCAyOCwgMTYsIDM4LCAKLSAgICAyNTMsIDE4OSwgMjQ3LCAxMjAsIDI4LCAxNiwgMzgsIDI0NCwgNzIsIDI4LCAxNiwgMzgsIDI0NCwgNzEsIDI4LCAxNiwgMzgsIAotICAgIDI0NCwgNzAsIDI4LCAxNiwgMzgsIDI0NCwgNjksIDI4LCAxNiwgMzgsIDI0NCwgNjgsIDI4LCAxNiwgMjUyLCA1OCwgMjUyLCAKLSAgICA3NCwgMjgsIDE2LCAyNDUsIDE0MywgMjUyLCA3NCwgMjgsIDE2LCAyNTIsIDU4LCAyMTYsIDExMSwgMjgsIDE2LCAyNDUsIAotICAgIDE0MywgMjE2LCAxMTEsIDI4LCAxNiwgMjUyLCA1OCwgMjE5LCA4MCwgMjgsIDE2LCAyNDUsIDE0MywgMjE5LCA4MCwgMjgsIAotICAgIDE2LCAyNTIsIDU4LCAyMjUsIDExNSwgMjgsIDE2LCAyNDUsIDE0MywgMjI1LCAxMTUsIDI4LCAxNiwgMzgsIDI1NSwgMTQsIAotICAgIDI4LCAxNiwgMzgsIDIxOCwgMTY1LCAyOCwgMTYsIDM4LCAyMTYsIDIzOCwgMjgsIDE2LCAzOCwgMjE4LCAxNjYsIDI4LCAxNiwgCi0gICAgMzgsIDIzMSwgMTYyLCAyOCwgMTYsIDM4LCAyMzEsIDE2MSwgMjgsIDE2LCAzOCwgMjU1LCAxMywgMjgsIDE2LCAzOCwgMjMyLCAKLSAgICAxMTIsIDI4LCAxNiwgMjUzLCAyNTQsIDIxNCwgMTYzLCAyOCwgMTYsIDI1MywgMjU0LCAyNDYsIDEwNiwgMjgsIDE2LCAzOCwgCi0gICAgMjQ3LCAxMzUsIDI4LCAxNiwgMzgsIDIyMiwgMjMxLCAyOCwgMTYsIDM4LCAyNDQsIDU4LCAyOCwgMTYsIDM4LCAyMTksIDc2LCAKLSAgICAyOCwgMTYsIDM4LCAyNTIsIDM4LCAyOCwgMTYsIDM4LCA1MiwgMjE2LCAxOSwgMjgsIDE2LCAzOCwgMjE1LCAyMTEsIDIxNiwgCi0gICAgMTksIDI4LCAxNiwgMjIyLCAyMzUsIDI4LCAxNiwgMjE4LCA3NSwgMjgsIDE2LCAyMTAsIDE1OSwgMjgsIDE2LCAyMjUsIAotICAgIDEwNywgMjgsIDE2LCAyMzEsIDI1LCAyOCwgMTYsIDI0NCwgMTcsIDI4LCAxNiwgMjQ5LCAxMzgsIDI4LCAxNiwgMjQ4LCA3OCwgCi0gICAgMjgsIDE2LCAyNDIsIDE1MCwgMjI4LCA0OCwgMjE5LCA5NSwgMjgsIDE2LCAyNDIsIDE1MCwgMjI4LCA0OCwgMjI4LCA3NSwgCi0gICAgMjE5LCA5NSwgMjgsIDE2LCAyMTYsIDAsIDI4LCAxNiwgMjE1LCA5NSwgMjgsIDE2LCAyMzUsIDE5MywgMjE1LCA5NSwgMjgsIAotICAgIDE2LCAyMTUsIDk2LCAyMTksIDk1LCAyOCwgMTYsIDIxNSwgOTYsIDIxNCwgMTYzLCAyOCwgMTYsIDIyNiwgMTQ4LCAyMTgsIAotICAgIDEwMiwgMjgsIDE2LCAyMjYsIDE0OCwgMjE4LCA5OSwgMjgsIDE2LCAyMjYsIDE0OCwgMjE4LCA5OCwgMjgsIDE2LCAyMjYsIAotICAgIDE0OCwgMjE4LCA5NywgMjgsIDE2LCAyMjYsIDE0OCwgMjE4LCA5NiwgMjgsIDE2LCAyMjYsIDE0OCwgMjE4LCA5NSwgMjgsIAotICAgIDE2LCAyMjYsIDE0OCwgMjE4LCA5NCwgMjgsIDE2LCAyMjYsIDE0OCwgMjE4LCA5MywgMjgsIDE2LCAyMjYsIDE0OCwgMjE4LCAKLSAgICA5MiwgMjgsIDE2LCAyMjYsIDE0OCwgMjE4LCAxMDEsIDI4LCAxNiwgMjI2LCAxNDgsIDIxOCwgMTAwLCAyOCwgMTYsIDI0MSwgCi0gICAgMjQ1LCAyOCwgMTYsIDIyOSwgMTA1LCAyOCwgMTYsIDI0NSwgMTQzLCA2NCwgMjE4LCAxMzMsIDI4LCAxNiwgMjQ4LCA3MSwgCi0gICAgMjE5LCA5NSwgMjgsIDE2LCAzOCwgMTI0LCAyNTEsIDE2OSwgMjgsIDE2LCAzOCwgMTIwLCAyNTEsIDE2OSwgMjgsIDE2LCAKLSAgICAzOCwgMjQyLCAwLCAyOCwgMTYsIDM4LCAyMTksIDY3LCAyMjUsIDQzLCAyOCwgMTYsIDIyNSwgMjE2LCA3OCwgMjgsIDE2LCAKLSAgICAyMjUsIDIxNiwgMTIwLCA3OCwgMjgsIDE2LCAxNjMsIDIyNSwgMjE2LCA3OCwgMjgsIDE2LCAyNDIsIDE4MiwgMjE0LCAxNjMsIAotICAgIDI4LCAxNiwgMjQyLCAxODIsIDI0NiwgMTA2LCAyOCwgMTYsIDIsIDI0NCwgMTAwLCAyOCwgMTYsIDI0OCwgMTgwLCAyOCwgCi0gICAgMTYsIDI0OCwgMTgxLCAyNTQsIDE1NCwgMjgsIDE2LCAyMzEsIDEzMywgMjgsIDE2LCAyMzIsIDEyOSwgMjgsIDE2LCAyNTEsIAotICAgIDE0MywgMjgsIDE2LCAyMjAsIDE1NCwgMjExLCAyNTMsIDI4LCAxNiwgMjIwLCAxNTQsIDI1MSwgMjIxLCAyOCwgMTYsIDIzMCwgCi0gICAgMTg0LCAyOCwgMTYsIDIzMCwgMTg1LCAyNTEsIDIyMSwgMjgsIDE2LCAyMjAsIDE0OCwgMjExLCAyNTMsIDI4LCAxNiwgMjIwLCAKLSAgICAxNDgsIDI1MSwgMjIxLCAyOCwgMTYsIDI0MywgMjIwLCAyMTEsIDI1MywgMjgsIDE2LCAyNDMsIDIyMCwgMjUxLCAyMjEsIAotICAgIDI4LCAxNiwgMjMyLCAxMzAsIDIyNSwgMTgwLCAyMjMsIDYxLCAyOCwgMTYsIDIzMiwgMTMwLCAyMzYsIDQsIDIyMywgNjEsIAotICAgIDI4LCAxNiwgMjUxLCAxNDQsIDIyMywgNjEsIDI4LCAxNiwgMjIwLCAxNTQsIDIyMywgNjEsIDI4LCAxNiwgMjMwLCAxODUsIAotICAgIDIyMywgNjEsIDI4LCAxNiwgMjIwLCAxNDgsIDIyMywgNjEsIDI4LCAxNiwgMjE2LCAyNDksIDIyNSwgMTc4LCAyNDksIDEwNywgCi0gICAgMjI0LCAxNzQsIDIyNSwgMTc5LCAyOCwgMTYsIDIxNiwgMjQ5LCAyMjUsIDE3OCwgMjQ5LCAxMDcsIDIyNCwgMTc0LCAyMzYsIAotICAgIDMsIDI4LCAxNiwgMjE2LCAyNDksIDIyNSwgMTc4LCAyNDksIDEwNywgMjI0LCAxNzQsIDIyNSwgMTgwLCAyNDcsIDIxMSwgCi0gICAgMjgsIDE2LCAyMTYsIDI0OSwgMjM2LCAyLCAyNDksIDEwNywgMjI0LCAxNzQsIDIyNSwgMTc5LCAyOCwgMTYsIDIxNiwgMjQ5LCAKLSAgICAyMzYsIDIsIDI0OSwgMTA3LCAyMjQsIDE3NCwgMjM2LCAzLCAyOCwgMTYsIDIxNiwgMjQ5LCAyMzYsIDIsIDI0OSwgMTA3LCAKLSAgICAyMjQsIDE3NCwgMjM2LCA0LCAyNDcsIDIxMSwgMjgsIDE2LCAyMTYsIDI0OSwgMjM2LCAyLCAyNDksIDEwNywgMjI0LCAxNzQsIAotICAgIDIzNiwgNCwgMjQ3LCAyMTAsIDI4LCAxNiwgMjE2LCAyNDksIDIzNiwgMiwgMjQ5LCAxMDcsIDIyNCwgMTc0LCAyMzYsIDQsIAotICAgIDI0NywgMjA5LCAyOCwgMTYsIDI0OSwgMTMzLCAyOCwgMTYsIDI0MiwgMTI2LCAyNTEsIDY3LCAyNTAsIDE0LCAyOCwgMTYsIAotICAgIDI0MiwgMTI2LCAyNDUsIDcsIDI1MCwgMTQsIDI4LCAxNiwgNDIsIDI1MywgMTU4LCAyOCwgMTYsIDIxMywgMTUxLCAyOCwgCi0gICAgMTYsIDIyNSwgMTQsIDI4LCAxNiwgMjUwLCA1LCAyOCwgMTYsIDIyMSwgMjAzLCAyOCwgMTYsIDI1MCwgOSwgMjgsIDE2LCAKLSAgICAyMTYsIDcsIDI4LCAxNiwgMjI0LCAyNDIsIDI4LCAxNiwgMjI0LCAyNDMsIDI0NCwgNjAsIDI4LCAxNiwgMjIxLCAyMDQsIAotICAgIDI0NCwgNjAsIDI4LCAxNiwgMjE2LCA4LCAyMjMsIDU4LCAyOCwgMTYsIDIyNSwgMTYzLCAyMTgsIDY2LCAyNiwgMjEzLCAKLSAgICAxMzcsIDE4NywgMjE3LCAyMjksIDI2LCAyMTMsIDEzNywgMTg3LCAyMTcsIDIxOCwgMjYsIDIxMywgMTM3LCAxODcsIDIxNywgCi0gICAgMjA4LCAyNiwgMjEzLCAxMzcsIDE4NywgMjE3LCAyMDEsIDI2LCAyMTMsIDEzNywgMTg3LCAyMTcsIDE5MywgMjYsIDIxMywgCi0gICAgMTM3LCAxODcsIDIxNywgMTg3LCAyNiwgMjEzLCAxMzcsIDE4NywgMjE3LCAxODYsIDI2LCAyMTMsIDEzNywgMTg3LCAyMTcsIAotICAgIDE4NSwgMjYsIDIxMywgMTM3LCAxODcsIDIxNywgMTg0LCAyNiwgMjEzLCAxMzcsIDE4NywgMjE3LCAyMjgsIDI2LCAyMTMsIAotICAgIDEzNywgMTg3LCAyMTcsIDIyNywgMjYsIDIxMywgMTM3LCAxODcsIDIxNywgMjI2LCAyNiwgMjEzLCAxMzcsIDE4NywgMjE3LCAKLSAgICAyMjUsIDI2LCAyMTMsIDEzNywgMTg3LCAyMTcsIDIyNCwgMjYsIDIxMywgMTM3LCAxODcsIDIxNywgMjIzLCAyNiwgMjEzLCAKLSAgICAxMzcsIDE4NywgMjE3LCAyMjIsIDI2LCAyMTMsIDEzNywgMTg3LCAyMTcsIDIyMSwgMjYsIDIxMywgMTM3LCAxODcsIDIxNywgCi0gICAgMjIwLCAyNiwgMjEzLCAxMzcsIDE4NywgMjE3LCAyMTksIDI2LCAyMTMsIDEzNywgMTg3LCAyMTcsIDIxNywgMjYsIDIxMywgCi0gICAgMTM3LCAxODcsIDIxNywgMjE2LCAyNiwgMjEzLCAxMzcsIDE4NywgMjE3LCAyMTUsIDI2LCAyMTMsIDEzNywgMTg3LCAyMTcsIAotICAgIDIxNCwgMjYsIDIxMywgMTM3LCAxODcsIDIxNywgMjEzLCAyNiwgMjEzLCAxMzcsIDE4NywgMjE3LCAxOTIsIDI2LCAyMTMsIAotICAgIDEzNywgMTg3LCAyMTcsIDE5MSwgMjYsIDIxMywgMTM3LCAxODcsIDIxNywgMTkwLCAyNiwgMjEzLCAxMzcsIDE4NywgMjE3LCAKLSAgICAxODksIDI2LCAyMTMsIDEzNywgMTg3LCAyMTcsIDE4OCwgMjYsIDIzNSwgMjE0LCAxODcsIDIxNywgMjI5LCAyNiwgMjM1LCAKLSAgICAyMTQsIDE4NywgMjE3LCAyMTgsIDI2LCAyMzUsIDIxNCwgMTg3LCAyMTcsIDIwMSwgMjYsIDIzNSwgMjE0LCAxODcsIDIxNywgCi0gICAgMTkzLCAyNiwgMjM1LCAyMTQsIDE4NywgMjE3LCAxODYsIDI2LCAyMzUsIDIxNCwgMTg3LCAyMTcsIDE4NSwgMjYsIDIzNSwgCi0gICAgMjE0LCAxODcsIDIxNywgMjI3LCAyNiwgMjM1LCAyMTQsIDE4NywgMjE3LCAyMjYsIDI2LCAyMzUsIDIxNCwgMTg3LCAyMTcsIAotICAgIDIyNSwgMjYsIDIzNSwgMjE0LCAxODcsIDIxNywgMjI0LCAyNiwgMjM1LCAyMTQsIDE4NywgMjE3LCAyMjEsIDI2LCAyMzUsIAotICAgIDIxNCwgMTg3LCAyMTcsIDIyMCwgMjYsIDIzNSwgMjE0LCAxODcsIDIxNywgMjE5LCAyNiwgMjM1LCAyMTQsIDE4NywgMjE3LCAKLSAgICAyMTQsIDI2LCAyMzUsIDIxNCwgMTg3LCAyMTcsIDIxMywgMjYsIDIzNSwgMjE0LCAxODcsIDIxNywgMjEyLCAyNiwgMjM1LCAKLSAgICAyMTQsIDE4NywgMjE3LCAyMTEsIDI2LCAyMzUsIDIxNCwgMTg3LCAyMTcsIDIxMCwgMjYsIDIzNSwgMjE0LCAxODcsIDIxNywgCi0gICAgMjA5LCAyNiwgMjM1LCAyMTQsIDE4NywgMjE3LCAyMDcsIDI2LCAyMzUsIDIxNCwgMTg3LCAyMTcsIDIwNiwgMjYsIDIzNSwgCi0gICAgMjE0LCAxODcsIDIxNywgMjA1LCAyNiwgMjM1LCAyMTQsIDE4NywgMjE3LCAyMDQsIDI2LCAyMzUsIDIxNCwgMTg3LCAyMTcsIAotICAgIDIwMywgMjYsIDIzNSwgMjE0LCAxODcsIDIxNywgMjAyLCAyNiwgMjM1LCAyMTQsIDE4NywgMjE3LCAyMDAsIDI2LCAyMzUsIAotICAgIDIxNCwgMTg3LCAyMTcsIDE5OSwgMjYsIDIzNSwgMjE0LCAxODcsIDIxNywgMTk4LCAyNiwgMjM1LCAyMTQsIDE4NywgMjE3LCAKLSAgICAxOTcsIDI2LCAyMzUsIDIxNCwgMTg3LCAyMTcsIDE5NiwgMjYsIDIzNSwgMjE0LCAxODcsIDIxNywgMTk1LCAyNiwgMjM1LCAKLSAgICAyMTQsIDE4NywgMjE3LCAxOTQsIDI2LCAyMzUsIDIxNCwgMTg3LCAyMTcsIDE5MiwgMjYsIDIzNSwgMjE0LCAxODcsIDIxNywgCi0gICAgMTkxLCAyNiwgMjM1LCAyMTQsIDE4NywgMjE3LCAxOTAsIDI2LCAyMzUsIDIxNCwgMTg3LCAyMTcsIDE4OSwgMjYsIDIzNSwgCi0gICAgMjE0LCAxODcsIDIxNywgMTg4LCAzOCwgMjYsIDI4LCAyMTUsIDIwOCwgMzgsIDI2LCAyOCwgMjE2LCAyMjMsIDM4LCAyNiwgCi0gICAgMjgsIDIyNSwgMTg4LCAyNiwgMjgsIDIzMywgMzEsIDIzMCwgMTQyLCAzMSwgMjQ1LCAyMjMsIDI0NywgMjI0LCAzMSwgMjQxLCAKLSAgICAyMjIsIDI0NSwgMjIzLCAyNDcsIDIyNCwgMzEsIDI0MCwgMjE0LCAyNDUsIDIyMywgMjQ3LCAyMjQsIDMxLCAyNDUsIDIyMiwgCi0gICAgMjQxLCAyMjMsIDI0NywgMjI0LCAzMSwgMjQ1LCAyMjIsIDI0MCwgMjEzLCAyNDcsIDIyNCwgMzEsIDI0NSwgMjIzLCAxODAsIAotICAgIDMxLCAyNTAsIDE3NCwgMTgwLCAzMSwgMjQzLCAyMjksIDI1MCwgMzUsIDE4MCwgMzEsIDIzMCwgMTc3LCAxODAsIDMxLCAKLSAgICAyNTIsIDEzMCwgMTgwLCAzMSwgMjM0LCAxNzksIDIxOSwgNzksIDE4MCwgMzEsIDI0OSwgMTc5LCAxODAsIDMxLCAyNTMsIAotICAgIDIzMywgMTgwLCAzMSwgMjI2LCAxNjMsIDE4MCwgMzEsIDI1MSwgMTUzLCAyMjYsIDEzMCwgMTgwLCAzMSwgMjQ4LCA3MywgCi0gICAgMTc3LCAyNDcsIDE3OSwgMTgwLCAzMSwgMjQ3LCAxNzYsIDE4MCwgMzEsIDIxMCwgMjIyLCAxODAsIDMxLCAyMzUsIDI0NywgCi0gICAgMTgwLCAzMSwgMjI1LCAxOTcsIDE4MCwgMzEsIDIyMywgMTI3LCAxODAsIDMxLCAyNDksIDE4OSwgMTgwLCAzMSwgMjQxLCAKLSAgICA2MCwgMjUyLCAxODQsIDE4MCwgMzEsIDIxMiwgNTksIDE4MCwgMzEsIDI0NCwgMzksIDE4MCwgMzEsIDI1NCwgMjQ2LCAxODAsIAotICAgIDMxLCAyMjMsIDg5LCAxODAsIDMxLCAyMjMsIDY1LCAxODAsIDMxLCAyNDUsIDIyMSwgMTgwLCAzMSwgMjM1LCA1MywgMTgwLCAKLSAgICAzMSwgMjQ5LCAxODQsIDE4MCwgMzEsIDI0NSwgMTQyLCAxODAsIDMxLCAyNDYsIDUyLCAxODAsIDMxLCAyNTAsIDE0NSwgCi0gICAgMTgwLCAzMSwgMjQ4LCA4MiwgMTgwLCAzMSwgMjMsIDIyMywgNjQsIDE4MCwgMzEsIDIyNiwgODEsIDE4MCwgMzEsIDIzMywgCi0gICAgMzQsIDE4MCwgMzEsIDI0OSwgMjU0LCAxODAsIDMxLCAyMzQsIDc3LCAxODAsIDMxLCAyNDMsIDg2LCAxODAsIDMxLCAyMTgsIAotICAgIDExMiwgMTgwLCAzMSwgMjI0LCAxMzAsIDE4MCwgMzEsIDI0MywgMjI4LCAxODAsIDMxLCAyMjMsIDY2LCAxODAsIDMxLCAKLSAgICAyMzMsIDcxLCAxNzcsIDIzMCwgMTU3LCAxODAsIDMxLCAyMjMsIDYyLCAxODAsIDMxLCAyNDIsIDE2OCwgMjE2LCA0MiwgCi0gICAgMjMxLCA3NiwgMTgwLCAzMSwgMjQ1LCAxNDQsIDE4MCwgMzEsIDIxOCwgMTI0LCAxODAsIDMxLCAyNDIsIDEyOCwgMTgwLCAKLSAgICAzMSwgMjQ1LCAxMzYsIDE4MCwgMzEsIDIyNSwgMjM1LCAxODAsIDMxLCAyMjIsIDIyNSwgMTgwLCAzMSwgMjQ0LCA1OSwgCi0gICAgMTgwLCAzMSwgMjE0LCA4LCAxNzcsIDIxMiwgNDQsIDE4MCwgMzEsIDI0OSwgMTkzLCAxODAsIDMxLCAyMzEsIDg5LCAxODAsIAotICAgIDMxLCAyNDUsIDYxLCAxODAsIDMxLCAyMTQsIDE3MiwgMTgwLCAzMSwgMjQ3LCAyMTIsIDE4MCwgMzEsIDI1MCwgMCwgMjMwLCAKLSAgICAxMTAsIDE4MCwgMzEsIDI0MiwgMTA2LCAxODAsIDMxLCAyNDMsIDg3LCAyMzUsIDI1NSwgMTgwLCAzMSwgMjMxLCAxNDEsIAotICAgIDE4MCwgMzEsIDI1NSwgMTAsIDE4MCwgMzEsIDI0NSwgMTU3LCAxODAsIDMxLCAyNDYsIDEwOSwgMTgwLCAzMSwgMjEyLCA0MiwgCi0gICAgMTgwLCAzMSwgMjE5LCAxNTAsIDE4MCwgMzEsIDIzNSwgMjIyLCAxODAsIDMxLCAyNDgsIDQyLCAxODAsIDMxLCAyNDgsIAotICAgIDE2MCwgMTgwLCAzMSwgMjQ3LCAyMDgsIDE4MCwgMzEsIDI0NSwgMjksIDE4MCwgMzEsIDIyMCwgMTE1LCAxODAsIDMxLCAKLSAgICAyMTgsIDEyOCwgMTgwLCAzMSwgMjQyLCAyLCAxODAsIDMxLCAyNDksIDIxMiwgMTgwLCAzMSwgMjQ5LCAyNTEsIDE4MCwgMzEsIAotICAgIDI0NCwgMTc3LCAxODAsIDMxLCAyNTQsIDIxMiwgMTgwLCAzMSwgMjQ5LCAyMTEsIDE4MCwgMzEsIDIyNiwgMTk3LCAyMTYsIAotICAgIDE5NiwgMjEzLCAyNDIsIDE4MCwgMzEsIDI0NywgMjMyLCAxODAsIDMxLCAyMzMsIDEyNCwgMTgwLCAzMSwgMjQ0LCAxMywgCi0gICAgMjQ5LCAxNDksIDIyMiwgMjAyLCAyMTQsIDE3NCwgMjEsIDExMCwgMjQ5LCAxNDksIDIyMiwgMjAyLCAyMTQsIDE3NCwgMjEsIAotICAgIDEwNSwgMjQ5LCAxNDksIDIyMiwgMjAyLCAyMTQsIDE3NCwgMjEsIDE1OCwgMjQ5LCAxNDksIDIyMiwgMjAyLCAyMTQsIDE3NCwgCi0gICAgMjEsIDE2MSwgMjQ5LCAxNDksIDIyMiwgMjAyLCAyMTQsIDE3NCwgMjEsIDE4OSwgMjQ5LCAxNDksIDIyMiwgMjAyLCAyMTQsIAotICAgIDE3NCwgMjEsIDE5NCwgMjQ5LCAxNDksIDIyMiwgMjAyLCAyMTQsIDE3NCwgMjEsIDE5OCwgMjQ5LCAxNDksIDIyMiwgMjAyLCAKLSAgICAyMTQsIDE3NCwgMjEsIDE5NSwgMjQ5LCAxNDksIDIyMiwgMjAyLCAyMTQsIDE3NCwgMjEsIDIwMCwgMjQ5LCAxNDksIDIyMiwgCi0gICAgMjAyLCAyMTYsIDI0MywgMjEsIDExMCwgMjQ5LCAxNDksIDIyMiwgMjAyLCAyMTYsIDI0MywgMjEsIDEwNSwgMjQ5LCAxNDksIAotICAgIDIyMiwgMjAyLCAyMTYsIDI0MywgMjEsIDE1OCwgMjQ5LCAxNDksIDIyMiwgMjAyLCAyMTYsIDI0MywgMjEsIDE2MSwgMjQ5LCAKLSAgICAxNDksIDIyMiwgMjAyLCAyMTYsIDI0MywgMjEsIDE4OSwgMjQ5LCAxNDksIDIyMiwgMjAyLCAyMTYsIDI0MywgMjEsIDE5NCwgCi0gICAgMjQ5LCAxNDksIDIyMiwgMjAyLCAyMTYsIDI0MywgMjEsIDE5OCwgMjQ5LCAxNDksIDIyMiwgMjAyLCAyMTYsIDI0MywgMjEsIAotICAgIDE5NSwgMjQ5LCAxNDksIDIyMiwgMjAyLCAyMTYsIDI0MywgMjEsIDIwMCwgMTEsIDIzLCA2LCA2MSwgMTEsIDIzLCA2LCAKLSAgICAyNTMsIDE1OCwgMTEsIDIzLCA2LCAyNTEsIDY2LCAxMSwgMjMsIDYsIDI0OSwgNjAsIDExLCAyMywgNiwgNzUsIDExLCAyMywgCi0gICAgNiwgMjQ1LCA2LCAxMSwgMjMsIDYsIDI0MywgMjAyLCAxMSwgMjMsIDYsIDI0MiwgNjAsIDExLCAyMywgNiwgNzMsIDExLCAKLSAgICAyMywgNiwgMjM1LCAxNDQsIDExLCAyMywgNiwgMjM1LCAyMywgMTEsIDIzLCA2LCAxNTYsIDExLCAyMywgNiwgMTkzLCAxMSwgCi0gICAgMjMsIDYsIDIzMCwgMjUsIDExLCAyMywgNiwgNzYsIDExLCAyMywgNiwgMjI2LCAxMDUsIDExLCAyMywgNiwgMjI0LCA5NiwgCi0gICAgMTEsIDIzLCA2LCAxNTMsIDExLCAyMywgNiwgMjIyLCA5MSwgMTEsIDIzLCA2LCAyMTcsIDE1MiwgMTEsIDIzLCA2LCA3MCwgCi0gICAgMTEsIDIzLCA2LCAyMTQsIDEwNSwgMTEsIDIzLCA2LCAyMTIsIDk4LCAxMSwgMjMsIDYsIDIxMSwgMTc4LCAxMSwgMjMsIDYsIAotICAgIDIxMSwgMTE3LCAxMSwgMjMsIDYsIDIxMCwgMTU5LCAxMSwgMjMsIDQsIDYxLCAxMSwgMjMsIDQsIDI1MywgMTU4LCAxMSwgCi0gICAgMjMsIDQsIDI1MSwgNjYsIDExLCAyMywgNCwgMjQ5LCA2MCwgMTEsIDIzLCA0LCA3NSwgMTEsIDIzLCA0LCAyNDUsIDYsIDExLCAKLSAgICAyMywgNCwgMjQzLCAyMDIsIDExLCAyMywgNCwgMjQyLCA2MCwgMTEsIDIzLCA0LCA3MywgMTEsIDIzLCA0LCAyMzUsIDE0NCwgCi0gICAgMTEsIDIzLCA0LCAyMzUsIDIzLCAxMSwgMjMsIDQsIDE1NiwgMTEsIDIzLCA0LCAxOTMsIDExLCAyMywgNCwgMjMwLCAyNSwgCi0gICAgMTEsIDIzLCA0LCA3NiwgMTEsIDIzLCA0LCAyMjYsIDEwNSwgMTEsIDIzLCA0LCAyMjQsIDk2LCAxMSwgMjMsIDQsIDE1MywgCi0gICAgMTEsIDIzLCA0LCAyMjIsIDkxLCAxMSwgMjMsIDQsIDIxNywgMTUyLCAxMSwgMjMsIDQsIDcwLCAxMSwgMjMsIDQsIDIxNCwgCi0gICAgMTA1LCAxMSwgMjMsIDQsIDIxMiwgOTgsIDExLCAyMywgNCwgMjExLCAxNzgsIDExLCAyMywgNCwgMjExLCAxMTcsIDExLCAKLSAgICAyMywgNCwgMjEwLCAxNTksIDExLCAzMiwgNiwgNjEsIDExLCAzMiwgNiwgMjUzLCAxNTgsIDExLCAzMiwgNiwgMjUxLCA2NiwgCi0gICAgMTEsIDMyLCA2LCAyNDksIDYwLCAxMSwgMzIsIDYsIDc1LCAxMSwgMzIsIDYsIDI0NSwgNiwgMTEsIDMyLCA2LCAyNDMsIAotICAgIDIwMiwgMTEsIDMyLCA2LCAyNDIsIDYwLCAxMSwgMzIsIDYsIDczLCAxMSwgMzIsIDYsIDIzNSwgMTQ0LCAxMSwgMzIsIDYsIAotICAgIDIzNSwgMjMsIDExLCAzMiwgNiwgMTU2LCAxMSwgMzIsIDYsIDE5MywgMTEsIDMyLCA2LCAyMzAsIDI1LCAxMSwgMzIsIDYsIAotICAgIDc2LCAxMSwgMzIsIDYsIDIyNiwgMTA1LCAxMSwgMzIsIDYsIDIyNCwgOTYsIDExLCAzMiwgNiwgMTUzLCAxMSwgMzIsIDYsIAotICAgIDIyMiwgOTEsIDExLCAzMiwgNiwgMjE3LCAxNTIsIDExLCAzMiwgNiwgNzAsIDExLCAzMiwgNiwgMjE0LCAxMDUsIDExLCAzMiwgCi0gICAgNiwgMjEyLCA5OCwgMTEsIDMyLCA2LCAyMTEsIDE3OCwgMTEsIDMyLCA2LCAyMTEsIDExNywgMTEsIDMyLCA2LCAyMTAsIAotICAgIDE1OSwgMTEsIDMyLCA0LCA2MSwgMTEsIDMyLCA0LCAyNTMsIDE1OCwgMTEsIDMyLCA0LCAyNTEsIDY2LCAxMSwgMzIsIDQsIAotICAgIDI0OSwgNjAsIDExLCAzMiwgNCwgNzUsIDExLCAzMiwgNCwgMjQ1LCA2LCAxMSwgMzIsIDQsIDI0MywgMjAyLCAxMSwgMzIsIAotICAgIDQsIDczLCAxMSwgMzIsIDQsIDIzNSwgMTQ0LCAxMSwgMzIsIDQsIDIzNSwgMjMsIDExLCAzMiwgNCwgMTU2LCAxMSwgMzIsIAotICAgIDQsIDE5MywgMTEsIDMyLCA0LCAyMzAsIDI1LCAxMSwgMzIsIDQsIDc2LCAxMSwgMzIsIDQsIDIyNiwgMTA1LCAxMSwgMzIsIAotICAgIDQsIDIyNCwgOTYsIDExLCAzMiwgNCwgMTUzLCAxMSwgMzIsIDQsIDIyMiwgOTEsIDExLCAzMiwgNCwgMjE3LCAxNTIsIDExLCAKLSAgICAzMiwgNCwgNzAsIDExLCAzMiwgNCwgMjE0LCAxMDUsIDExLCAzMiwgNCwgMjEyLCA5OCwgMTEsIDMyLCA0LCAyMTEsIDE3OCwgCi0gICAgMTEsIDMyLCA0LCAyMTEsIDExNywgMTEsIDMyLCA0LCAyMTAsIDE1OSwgMTEsIDIzLCAzMiwgNiwgNjEsIDExLCAyMywgMzIsIAotICAgIDYsIDI1MywgMTU4LCAxMSwgMjMsIDMyLCA2LCAyNTEsIDY2LCAxMSwgMjMsIDMyLCA2LCAyNDksIDYwLCAxMSwgMjMsIDMyLCAKLSAgICA2LCA3NSwgMTEsIDIzLCAzMiwgNiwgMjQ1LCA2LCAxMSwgMjMsIDMyLCA2LCAyNDMsIDIwMiwgMTEsIDIzLCAzMiwgNiwgCi0gICAgMjQyLCA2MCwgMTEsIDIzLCAzMiwgNiwgNzMsIDExLCAyMywgMzIsIDYsIDIzNSwgMTQ0LCAxMSwgMjMsIDMyLCA2LCAyMzUsIAotICAgIDIzLCAxMSwgMjMsIDMyLCA2LCAxNTYsIDExLCAyMywgMzIsIDYsIDE5MywgMTEsIDIzLCAzMiwgNiwgMjMwLCAyNSwgMTEsIAotICAgIDIzLCAzMiwgNiwgNzYsIDExLCAyMywgMzIsIDYsIDIyNiwgMTA1LCAxMSwgMjMsIDMyLCA2LCAyMjQsIDk2LCAxMSwgMjMsIAotICAgIDMyLCA2LCAxNTMsIDExLCAyMywgMzIsIDYsIDIyMiwgOTEsIDExLCAyMywgMzIsIDYsIDIxNywgMTUyLCAxMSwgMjMsIDMyLCAKLSAgICA2LCA3MCwgMTEsIDIzLCAzMiwgNiwgMjE0LCAxMDUsIDExLCAyMywgMzIsIDYsIDIxMiwgOTgsIDExLCAyMywgMzIsIDYsIAotICAgIDIxMSwgMTc4LCAxMSwgMjMsIDMyLCA2LCAyMTEsIDExNywgMTEsIDIzLCAzMiwgNiwgMjEwLCAxNTksIDExLCAyMywgMzIsIAotICAgIDQsIDYxLCAxMSwgMjMsIDMyLCA0LCAyNTMsIDE1OCwgMTEsIDIzLCAzMiwgNCwgMjUxLCA2NiwgMTEsIDIzLCAzMiwgNCwgCi0gICAgMjQ5LCA2MCwgMTEsIDIzLCAzMiwgNCwgNzUsIDExLCAyMywgMzIsIDQsIDI0NSwgNiwgMTEsIDIzLCAzMiwgNCwgMjQzLCAKLSAgICAyMDIsIDExLCAyMywgMzIsIDQsIDI0MiwgNjAsIDExLCAyMywgMzIsIDQsIDczLCAxMSwgMjMsIDMyLCA0LCAyMzUsIDE0NCwgCi0gICAgMTEsIDIzLCAzMiwgNCwgMjM1LCAyMywgMTEsIDIzLCAzMiwgNCwgMTU2LCAxMSwgMjMsIDMyLCA0LCAxOTMsIDExLCAyMywgCi0gICAgMzIsIDQsIDIzMCwgMjUsIDExLCAyMywgMzIsIDQsIDc2LCAxMSwgMjMsIDMyLCA0LCAyMjYsIDEwNSwgMTEsIDIzLCAzMiwgCi0gICAgNCwgMjI0LCA5NiwgMTEsIDIzLCAzMiwgNCwgMTUzLCAxMSwgMjMsIDMyLCA0LCAyMjIsIDkxLCAxMSwgMjMsIDMyLCA0LCAKLSAgICAyMTcsIDE1MiwgMTEsIDIzLCAzMiwgNCwgNzAsIDExLCAyMywgMzIsIDQsIDIxNCwgMTA1LCAxMSwgMjMsIDMyLCA0LCAyMTIsIAotICAgIDk4LCAxMSwgMjMsIDMyLCA0LCAyMTEsIDE3OCwgMTEsIDIzLCAzMiwgNCwgMjExLCAxMTcsIDExLCAyMywgMzIsIDQsIDIxMCwgCi0gICAgMTU5LCAxMSwgMTE5LCA2LCA2MSwgMTEsIDExOSwgNiwgMjUxLCA2NiwgMTEsIDExOSwgNiwgMjQ5LCA2MCwgMTEsIDExOSwgCi0gICAgNiwgMjQzLCAyMDIsIDExLCAxMTksIDYsIDIzNSwgMTQ0LCAxMSwgMTE5LCA2LCAyMzUsIDIzLCAxMSwgMTE5LCA2LCAyMzAsIAotICAgIDI1LCAxMSwgMTE5LCA2LCA3NiwgMTEsIDExOSwgNiwgMjI2LCAxMDUsIDExLCAxMTksIDYsIDIyNCwgOTYsIDExLCAxMTksIAotICAgIDYsIDIyMiwgOTEsIDExLCAxMTksIDYsIDIxNywgMTUyLCAxMSwgMTE5LCA2LCA3MCwgMTEsIDExOSwgNiwgMjE0LCAxMDUsIAotICAgIDExLCAxMTksIDYsIDIxMiwgOTgsIDExLCAxMTksIDYsIDIxMSwgMTc4LCAxMSwgMTE5LCA2LCAyMTEsIDExNywgMTEsIDExOSwgCi0gICAgNiwgMjEwLCAxNTksIDExLCAxMTksIDQsIDYxLCAxMSwgMTE5LCA0LCAyNTMsIDE1OCwgMTEsIDExOSwgNCwgMjUxLCA2NiwgCi0gICAgMTEsIDExOSwgNCwgMjQ5LCA2MCwgMTEsIDExOSwgNCwgMjQ1LCA2LCAxMSwgMTE5LCA0LCAyNDIsIDYwLCAxMSwgMTE5LCA0LCAKLSAgICA3MywgMTEsIDExOSwgNCwgMjM1LCAxNDQsIDExLCAxMTksIDQsIDIzNSwgMjMsIDExLCAxMTksIDQsIDE1NiwgMTEsIDExOSwgCi0gICAgNCwgMTkzLCAxMSwgMTE5LCA0LCAyMzAsIDI1LCAxMSwgMTE5LCA0LCAyMjYsIDEwNSwgMTEsIDExOSwgNCwgMjI0LCA5NiwgCi0gICAgMTEsIDExOSwgNCwgMTUzLCAxMSwgMTE5LCA0LCAyMjIsIDkxLCAxMSwgMTE5LCA0LCAyMTcsIDE1MiwgMTEsIDExOSwgNCwgCi0gICAgNzAsIDExLCAxMTksIDQsIDIxNCwgMTA1LCAxMSwgMTE5LCA0LCAyMTIsIDk4LCAxMSwgMTE5LCA0LCAyMTEsIDE3OCwgMTEsIAotICAgIDExOSwgNCwgMjExLCAxMTcsIDExLCAxMTksIDQsIDIxMCwgMTU5LCAxMSwgMjMsIDExOSwgNiwgNjEsIDExLCAyMywgMTE5LCAKLSAgICA2LCAyNTMsIDE1OCwgMTEsIDIzLCAxMTksIDYsIDI1MSwgNjYsIDExLCAyMywgMTE5LCA2LCAyNDksIDYwLCAxMSwgMjMsIAotICAgIDExOSwgNiwgNzUsIDExLCAyMywgMTE5LCA2LCAyNDUsIDYsIDExLCAyMywgMTE5LCA2LCAyNDMsIDIwMiwgMTEsIDIzLCAKLSAgICAxMTksIDYsIDI0MiwgNjAsIDExLCAyMywgMTE5LCA2LCA3MywgMTEsIDIzLCAxMTksIDYsIDIzNSwgMTQ0LCAxMSwgMjMsIAotICAgIDExOSwgNiwgMjM1LCAyMywgMTEsIDIzLCAxMTksIDYsIDE1NiwgMTEsIDIzLCAxMTksIDYsIDE5MywgMTEsIDIzLCAxMTksIAotICAgIDYsIDIzMCwgMjUsIDExLCAyMywgMTE5LCA2LCA3NiwgMTEsIDIzLCAxMTksIDYsIDIyNiwgMTA1LCAxMSwgMjMsIDExOSwgNiwgCi0gICAgMjI0LCA5NiwgMTEsIDIzLCAxMTksIDYsIDE1MywgMTEsIDIzLCAxMTksIDYsIDIyMiwgOTEsIDExLCAyMywgMTE5LCA2LCAKLSAgICAyMTcsIDE1MiwgMTEsIDIzLCAxMTksIDYsIDcwLCAxMSwgMjMsIDExOSwgNiwgMjE0LCAxMDUsIDExLCAyMywgMTE5LCA2LCAKLSAgICAyMTIsIDk4LCAxMSwgMjMsIDExOSwgNiwgMjExLCAxNzgsIDExLCAyMywgMTE5LCA2LCAyMTEsIDExNywgMTEsIDIzLCAxMTksIAotICAgIDYsIDIxMCwgMTU5LCAxMSwgMjMsIDExOSwgNCwgNjEsIDExLCAyMywgMTE5LCA0LCAyNTMsIDE1OCwgMTEsIDIzLCAxMTksIAotICAgIDQsIDI1MSwgNjYsIDExLCAyMywgMTE5LCA0LCAyNDksIDYwLCAxMSwgMjMsIDExOSwgNCwgNzUsIDExLCAyMywgMTE5LCA0LCAKLSAgICAyNDUsIDYsIDExLCAyMywgMTE5LCA0LCAyNDMsIDIwMiwgMTEsIDIzLCAxMTksIDQsIDI0MiwgNjAsIDExLCAyMywgMTE5LCAKLSAgICA0LCA3MywgMTEsIDIzLCAxMTksIDQsIDIzNSwgMTQ0LCAxMSwgMjMsIDExOSwgNCwgMjM1LCAyMywgMTEsIDIzLCAxMTksIDQsIAotICAgIDE1NiwgMTEsIDIzLCAxMTksIDQsIDE5MywgMTEsIDIzLCAxMTksIDQsIDIzMCwgMjUsIDExLCAyMywgMTE5LCA0LCA3NiwgCi0gICAgMTEsIDIzLCAxMTksIDQsIDIyNiwgMTA1LCAxMSwgMjMsIDExOSwgNCwgMjI0LCA5NiwgMTEsIDIzLCAxMTksIDQsIDE1MywgCi0gICAgMTEsIDIzLCAxMTksIDQsIDIyMiwgOTEsIDExLCAyMywgMTE5LCA0LCAyMTcsIDE1MiwgMTEsIDIzLCAxMTksIDQsIDcwLCAKKyAgICAxMiwgMTMsIDIyMywgMTkzLCAxMiwgMTMsIDIyMywgMTkyLCAxMiwgMTMsIDIyMiwgOTAsIDEyLCAxMywgMjIyLCA4OSwgMTIsIAorICAgIDEzLCAyMjIsIDg4LCAxMiwgMTMsIDIyMiwgODcsIDEyLCAxMywgMjIyLCA4NiwgMTIsIDEzLCAyMjIsIDg1LCAxMiwgMTMsIAorICAgIDIyMiwgODQsIDEyLCAxMywgMjIyLCA4MywgMTIsIDEzLCAyMjIsIDgyLCAxMiwgMTMsIDIyMiwgODEsIDEyLCAxMywgMjIyLCAKKyAgICA4MCwgMTIsIDEzLCAyMjIsIDc5LCAxMiwgMTMsIDIyMiwgNzgsIDEyLCAxMywgMjIyLCA3NywgMTIsIDEzLCAyMjIsIDc2LCAKKyAgICAxMiwgMTMsIDIyMiwgNzUsIDEyLCAxMywgMjIyLCA3NCwgMTIsIDEzLCAyMjIsIDczLCAxMiwgMTMsIDIyMiwgNzIsIDEyLCAKKyAgICAxMywgMjIyLCA3MSwgMTIsIDEzLCAyMjIsIDcwLCAxMiwgMTMsIDIyMiwgNjksIDEyLCAxMywgMjIyLCA2OCwgMTIsIDEzLCAKKyAgICAyMjIsIDY3LCAxMiwgMTMsIDIyMiwgNjYsIDEyLCAxMywgMjIyLCA2NSwgMTIsIDEzLCAyMjIsIDY0LCAxMiwgMTMsIDIyMiwgCisgICAgNjMsIDEyLCAxMywgMjIyLCA2MiwgMTIsIDEzLCAyMjIsIDYxLCAxMiwgMTMsIDIyMiwgNjAsIDEyLCAxMywgMjIyLCA1OSwgCisgICAgMTIsIDEzLCAyMjIsIDU4LCAxMiwgMTMsIDIyMiwgNTcsIDEyLCAxMywgMjIyLCA1NiwgMTIsIDEzLCAyMjIsIDU1LCAxMiwgCisgICAgMTMsIDIyMiwgNTQsIDEyLCAxMywgMjIyLCA1MywgMTIsIDEzLCAyMjIsIDUyLCAxMiwgMTMsIDIyMiwgNTEsIDEyLCAxMywgCisgICAgMjIyLCA1MCwgMTIsIDEzLCAyMjIsIDQ5LCAxMiwgMTMsIDIyMiwgNDgsIDEyLCAxMywgMjIyLCA0NywgMTIsIDEzLCAyMjIsIAorICAgIDQ2LCAxMiwgMTMsIDIyMiwgNDUsIDEyLCAxMywgMjIyLCA0NCwgMTIsIDEzLCAyMjIsIDQzLCAxMiwgMTMsIDIyMiwgNDIsIAorICAgIDEyLCAxMywgMjIyLCA0MSwgMTIsIDEzLCAyMjIsIDQwLCAxMiwgMTMsIDIyMiwgMzksIDEyLCAxMywgMjIyLCAzOCwgMTIsIAorICAgIDEzLCAyMjIsIDM3LCAxMiwgMTMsIDIxNywgMTUxLCAxMiwgMTMsIDIxNywgMTUwLCAxMiwgMTMsIDIxNywgMTQ5LCAxMiwgCisgICAgMTMsIDIxNywgMTQ4LCAxMiwgMTMsIDIxNywgMTQ3LCAxMiwgMTMsIDIxNywgMTQ2LCAxMiwgMTMsIDIxNywgMTQ1LCAxMiwgCisgICAgMTMsIDIxNywgMTQ0LCAxMiwgMTMsIDIxNywgMTQzLCAxMiwgMTMsIDIxNywgMTQyLCAxMiwgMTMsIDIxNywgMTQxLCAxMiwgCisgICAgMTMsIDIxNywgMTQwLCAxMiwgMTMsIDIxNywgMTM5LCAxMiwgMTMsIDIxNywgMTM4LCAxMiwgMTMsIDIxNywgMTM3LCAxMiwgCisgICAgMTMsIDIxNywgMTM2LCAxMiwgMTMsIDIxNywgMTM1LCAxMiwgMTMsIDIxNywgMTM0LCAxMiwgMTMsIDIxNywgMTMzLCAxMiwgCisgICAgMTMsIDIxNywgMTMyLCAxMiwgMTMsIDIxNywgMTMxLCAxMiwgMTMsIDIxNywgMTMwLCAxMiwgMTMsIDIxNywgMTI5LCAxMiwgCisgICAgMTMsIDIxNywgMTI4LCAxMiwgMTMsIDIxNywgMTI3LCAxMiwgMTMsIDIxNywgMTI2LCAxMiwgMTMsIDIxNywgMTI1LCAxMiwgCisgICAgMTMsIDIxNywgMTI0LCAxMiwgMTMsIDIxNywgMTIzLCAxMiwgMTMsIDIxNywgMTIyLCAxMiwgMTMsIDIxNywgMTIxLCAxMiwgCisgICAgMTMsIDIxNywgMTIwLCAxMiwgMTMsIDIxNywgMTE5LCAxMiwgMTMsIDIxNywgMTE4LCAxMiwgMTMsIDIxNywgMTE3LCAxMiwgCisgICAgMTMsIDIxNywgMTE2LCAxMiwgMTMsIDIxNywgMTE1LCAxMiwgMTMsIDIxNywgMTE0LCAxMiwgMTMsIDIxNywgMTEzLCAxMiwgCisgICAgMTMsIDIxNywgMTEyLCAxMiwgMTMsIDIxNywgMTExLCAxMiwgMTMsIDIxNywgMTEwLCAxMiwgMTMsIDIxNywgMTA5LCAxMiwgCisgICAgMTMsIDIxNywgMTA4LCAxMiwgMTMsIDIxNSwgMjIsIDEyLCAxMywgMjE1LCAyMSwgMTIsIDEzLCAyMTUsIDIwLCAxMiwgMTMsIAorICAgIDIxNSwgMTksIDEyLCAxMywgMjE1LCAxOCwgMTIsIDEzLCAyMTUsIDE3LCAxMiwgMTMsIDIxNSwgMTYsIDEyLCAxMywgMjE1LCAKKyAgICAxNSwgMTIsIDEzLCAyMTUsIDE0LCAxMiwgMTMsIDIxNSwgMTMsIDEyLCAxMywgMjE1LCAxMiwgMTIsIDEzLCAyMTUsIDExLCAKKyAgICAxMiwgMTMsIDIxNSwgMTAsIDEyLCAxMywgMjE1LCA5LCAxMiwgMTMsIDIxNSwgOCwgMTIsIDEzLCAyMTUsIDcsIDEyLCAxMywgCisgICAgMjE1LCA2LCAxMiwgMTMsIDIxNSwgNSwgMTIsIDEzLCAyMTUsIDQsIDEyLCAxMywgMjE1LCAzLCAxMiwgMTMsIDIxNSwgMiwgCisgICAgMTIsIDEzLCAyMTUsIDEsIDEyLCAxMywgMjE1LCAwLCAxMiwgMTMsIDIxNCwgMjU1LCAxMiwgMTMsIDIxNCwgMjU0LCAxMiwgCisgICAgMTMsIDIxNCwgMjUzLCAxMiwgMTMsIDIxNCwgMjUyLCAxMiwgMTMsIDIxNCwgMjUxLCAxMiwgMTMsIDIxNCwgMjUwLCAxMiwgCisgICAgMTMsIDIxNCwgMjQ5LCAxMiwgMTMsIDIxNCwgMjQ4LCAxMiwgMTMsIDIxNCwgMjQ3LCAxMiwgMTMsIDIxNCwgMjQ2LCAxMiwgCisgICAgMTMsIDIxNCwgMjQ1LCAxMiwgMTMsIDIxNCwgMjQ0LCAxMiwgMTMsIDIxNCwgMjQzLCAxMiwgMTMsIDIxNCwgMjQyLCAxMiwgCisgICAgMTMsIDIxNCwgMjQxLCAxMiwgMTMsIDIxNCwgMjQwLCAxMiwgMTMsIDIxNCwgMjM5LCAxMiwgMTMsIDIxNCwgMjM4LCAxMiwgCisgICAgMTMsIDIxNCwgMjM3LCAxMiwgMTMsIDIxNCwgMjM2LCAxMiwgMTMsIDIxNCwgMjM1LCAxMiwgMTMsIDIxNCwgMjM0LCAxMiwgCisgICAgMTMsIDIxNCwgMjMzLCAxMiwgMTMsIDIxNCwgMjMyLCAxMiwgMTMsIDIxNCwgMTA0LCAxMiwgMTMsIDIxNCwgMTAzLCAxMiwgCisgICAgMTMsIDIxNCwgMTAyLCAxMiwgMTMsIDIxNCwgMTAxLCAxMiwgMTMsIDIxNCwgMTAwLCAxMiwgMTMsIDIxNCwgOTksIDEyLCAKKyAgICAxMywgMjE0LCA5OCwgMTIsIDEzLCAyMTQsIDk3LCAxMiwgMTMsIDIxNCwgOTYsIDEyLCAxMywgMjE0LCA5NSwgMTIsIDEzLCAKKyAgICAyMTQsIDk0LCAxMiwgMTMsIDIxNCwgOTMsIDEyLCAxMywgMjE0LCA5MiwgMTIsIDEzLCAyMTQsIDkxLCAxMiwgMTMsIDIxNCwgCisgICAgOTAsIDEyLCAxMywgMjE0LCA4OSwgMTIsIDEzLCAyMTQsIDg4LCAxMiwgMTMsIDIxNCwgODcsIDEyLCAxMywgMjE0LCA4NiwgCisgICAgMTIsIDEzLCAyMTQsIDg1LCAxMiwgMTMsIDIxNCwgODQsIDEyLCAxMywgMjE0LCA4MywgMTIsIDEzLCAyMTQsIDgyLCAxMiwgCisgICAgMTMsIDIxNCwgODEsIDEyLCAxMywgMjE0LCA4MCwgMTIsIDEzLCAyMTQsIDc5LCAxMiwgMTMsIDIxNCwgNzgsIDEyLCAxMywgCisgICAgMjE0LCA3NywgMTIsIDEzLCAyMTQsIDc2LCAxMiwgMTMsIDIxNCwgNzUsIDEyLCAxMywgMjE0LCA3NCwgMTIsIDEzLCAyMTQsIAorICAgIDczLCAxMiwgMTMsIDIxNCwgNzIsIDEyLCAxMywgMjE0LCA3MSwgMTIsIDEzLCAyMTQsIDcwLCAxMiwgMTMsIDIxNCwgNjksIAorICAgIDEyLCAxMywgMjE0LCA2OCwgMTIsIDEzLCAyMTQsIDY3LCAxMiwgMTMsIDIxNCwgNjYsIDEyLCAxMywgMjE0LCA2NSwgMTIsIAorICAgIDEzLCAyMTQsIDY0LCAxMiwgMTMsIDIxNCwgNjMsIDEyLCAxMywgMjE0LCA2MiwgMTIsIDEzLCAyMTQsIDYxLCAxMiwgMTMsIAorICAgIDIxNCwgNjAsIDEyLCAxMywgMjE0LCA1OSwgMTIsIDEzLCAyMTQsIDU4LCAxMiwgMTMsIDIxNCwgNTcsIDEyLCAxMywgMjE0LCAKKyAgICA1NiwgMTIsIDEzLCAyMTQsIDU1LCAxMiwgMTMsIDIxNCwgNTQsIDEyLCAxMywgMjE0LCA1MywgMTIsIDEzLCAyMTQsIDUyLCAKKyAgICAxMiwgMTMsIDIxNCwgNTEsIDEyLCAxMywgMjE0LCA1MCwgMTIsIDEzLCAyMTQsIDQ5LCAxMiwgMTMsIDIxNCwgNDgsIDEyLCAKKyAgICAxMywgMjE0LCA0NywgMTIsIDEzLCAyMTQsIDQ2LCAxMiwgMTMsIDIxNCwgNDUsIDEyLCAxMywgMjE0LCA0NCwgMTIsIDEzLCAKKyAgICAyMTQsIDQzLCAxMiwgMTMsIDIxNCwgNDIsIDEyLCAxMywgMjE0LCA0MSwgMTIsIDEzLCAyMTQsIDQwLCAxMiwgMTMsIDIxNCwgCisgICAgMzksIDEyLCAxMywgMjE0LCAzOCwgMTIsIDEzLCAyMTQsIDM3LCAxMiwgMTMsIDIxNCwgMzYsIDEyLCAxMywgMjE0LCAzNSwgCisgICAgMTIsIDEzLCAyMTQsIDM0LCAxMiwgMTMsIDIxNCwgMzMsIDEyLCAxMywgMjE0LCAzMiwgMTIsIDEzLCAyMTQsIDMxLCAxMiwgCisgICAgMTMsIDIxNCwgMzAsIDEyLCAxMywgMjE0LCAyOSwgMTIsIDEzLCAyMTQsIDI4LCAxMiwgMTMsIDIxMiwgOTcsIDEyLCAxMywgCisgICAgMjEyLCA5NiwgMTIsIDEzLCAyMTIsIDk1LCAxMiwgMTMsIDIxMiwgOTQsIDEyLCAxMywgMjEyLCA5MywgMTIsIDEzLCAyMTIsIAorICAgIDkyLCAxMiwgMTMsIDIxMiwgOTEsIDEyLCAxMywgMjEyLCA5MCwgMTIsIDEzLCAyMTIsIDg5LCAxMiwgMTMsIDIxMiwgODgsIAorICAgIDEyLCAxMywgMjEyLCA4NywgMTIsIDEzLCAyMTIsIDg2LCAxMiwgMTMsIDIxMiwgODUsIDEyLCAxMywgMjEyLCA4NCwgMTIsIAorICAgIDEzLCAyMTIsIDgzLCAxMiwgMTMsIDIxMiwgODIsIDEyLCAxMywgMjEyLCA4MSwgMTIsIDEzLCAyMTIsIDgwLCAxMiwgMTMsIAorICAgIDIxMiwgNzksIDEyLCAxMywgMjEyLCA3OCwgMTIsIDEzLCAyMTIsIDc3LCAxMiwgMTMsIDIxMiwgNzYsIDEyLCAxMywgMjEyLCAKKyAgICA3NSwgMTIsIDEzLCAyMTIsIDc0LCAxMiwgMTMsIDIxMiwgNzMsIDEyLCAxMywgMjEyLCA3MiwgMTIsIDEzLCAyMTIsIDcxLCAKKyAgICAxMiwgMTMsIDIxMiwgNzAsIDEyLCAxMywgMjEyLCA2OSwgMTIsIDEzLCAyMTIsIDY4LCAxMiwgMTMsIDIxMiwgNjcsIDEyLCAKKyAgICAxMywgMjEyLCA2NiwgMTIsIDEzLCAyMTEsIDE3NywgMTIsIDEzLCAyMTEsIDE3NiwgMTIsIDEzLCAyMTEsIDE3NSwgMTIsIAorICAgIDEzLCAyMTEsIDE3NCwgMTIsIDEzLCAyMTEsIDE3MywgMTIsIDEzLCAyMTEsIDE3MiwgMTIsIDEzLCAyMTEsIDE3MSwgMTIsIAorICAgIDEzLCAyMTEsIDE3MCwgMTIsIDEzLCAyMTEsIDE2OSwgMTIsIDEzLCAyMTEsIDE2OCwgMTIsIDEzLCAyMTEsIDE2NywgMTIsIAorICAgIDEzLCAyMTEsIDE2NiwgMTIsIDEzLCAyMTEsIDExNSwgMTIsIDEzLCAyMTEsIDExNCwgMTIsIDEzLCAyMTEsIDExMywgMTIsIAorICAgIDEzLCAyMTEsIDExMiwgMTIsIDEzLCAyMTEsIDExMSwgMTIsIDEzLCAyMTEsIDExMCwgMTIsIDEzLCAyMTEsIDEwOSwgMTIsIAorICAgIDEzLCAyMTEsIDEwOCwgMTIsIDEzLCAyMTEsIDEwNywgMTIsIDEzLCAyMTAsIDE1OCwgMTIsIDEzLCAyMTAsIDE1NywgMTIsIAorICAgIDEzLCAyMTAsIDE1NiwgMTIsIDEzLCAyMTAsIDE1NSwgMTIsIDEzLCAyMTAsIDE1NCwgMTIsIDEzLCAyMTAsIDE1MywgMTIsIAorICAgIDEzLCAyMTAsIDE1MiwgMTIsIDEzLCAyMTAsIDE1MSwgMTIsIDEzLCAyMTAsIDE1MCwgMTIsIDEzLCAyMTAsIDE0OSwgMTIsIAorICAgIDEzLCAyMTAsIDE0OCwgMTIsIDEzLCAyMTAsIDE0NywgMTIsIDEzLCAyMTAsIDE0NiwgMTIsIDEzLCAyMTAsIDE0NSwgMTIsIAorICAgIDEzLCAyMTAsIDE0NCwgMTIsIDEzLCAyMTAsIDE0MywgMTIsIDEzLCAyMTAsIDE0MiwgMTIsIDEzLCAyMTAsIDE0MSwgMTIsIAorICAgIDEzLCAyMTAsIDE0MCwgMTIsIDEzLCAyMTAsIDEzOSwgMTIsIDEzLCAyMTAsIDEzOCwgMTIsIDEzLCAyMTAsIDEzNywgMTIsIAorICAgIDEzLCAyMTAsIDEzNiwgMTIsIDEzLCAyMTAsIDEzNSwgMTIsIDEzLCAyMTAsIDEzNCwgMTIsIDEzLCAyMTAsIDEzMywgMTIsIAorICAgIDEzLCAyMTAsIDEzMiwgMTIsIDEzLCAyMTAsIDEzMSwgMTIsIDEzLCAyMTAsIDEzMCwgMTIsIDEzLCAyMTAsIDEyOSwgMTIsIAorICAgIDEzLCAyMTAsIDEyOCwgMTIsIDEzLCAyMTAsIDEyNywgMTIsIDEzLCAyMTAsIDEyNiwgMTIsIDEzLCAyMTAsIDEyNSwgMTIsIAorICAgIDEzLCAyMTAsIDEyNCwgMTIsIDEzLCAyMTAsIDEyMywgMTIsIDEzLCAyMTAsIDEyMiwgMTIsIDEzLCAyMTAsIDEyMSwgMTIsIAorICAgIDEzLCAyMTAsIDEyMCwgMTIsIDEzLCAyMTAsIDExOSwgMTIsIDEzLCAyMTAsIDExOCwgMTIsIDEzLCAyNTUsIDgxLCAxMiwgCisgICAgMTMsIDI1NSwgODAsIDEyLCAxMywgMjU1LCA3OSwgMTIsIDEzLCAyNTUsIDc4LCAxMiwgMTMsIDI1NSwgNzcsIDEyLCAxMywgCisgICAgMjU1LCA3NiwgMTIsIDEzLCAyNTUsIDc1LCAxMiwgMTMsIDI1NSwgNzQsIDEyLCAxMywgMjU1LCA3MywgMTIsIDEzLCAyNTUsIAorICAgIDcyLCAxMiwgMTMsIDI1NSwgNzEsIDEyLCAxMywgMjU1LCA3MCwgMTIsIDEzLCAyNTUsIDY5LCAxMiwgMTMsIDI1NSwgNjgsIAorICAgIDEyLCAxMywgMjU1LCA2NywgMTIsIDEzLCAyNTUsIDY2LCAxMiwgMTMsIDI1NSwgNjUsIDEyLCAxMywgMjU1LCA2NCwgMTIsIAorICAgIDEzLCAyNTUsIDYzLCAxMiwgMTMsIDI1NSwgNjIsIDEyLCAxMywgMjU1LCA2MSwgMTIsIDEzLCAyNTUsIDYwLCAxMiwgMTMsIAorICAgIDI1NSwgNTksIDEyLCAxMywgMjU1LCA1OCwgMTIsIDEzLCAyNTUsIDU3LCAxMiwgMTMsIDI1NSwgNTYsIDEyLCAxMywgMjU1LCAKKyAgICA1NSwgMTIsIDEzLCAyNTUsIDU0LCAxMiwgMTMsIDI1NSwgNTMsIDEyLCAxMywgMjU1LCA1MiwgMTIsIDEzLCAyNTUsIDUxLCAKKyAgICAxMiwgMTMsIDI1NSwgNTAsIDEyLCAxMywgMjU1LCA0OSwgMTIsIDEzLCAyNTUsIDQ4LCAyMCwgMSwgMTY3LCAyMjksIDE3LCAKKyAgICAyMzEsIDIxLCAyMCwgMSwgMTY3LCAyNDMsIDc3LCAyNDQsIDQ0LCAyMCwgMSwgMTY3LCAyMjQsIDI1NCwgMjMxLCAyMiwgCisgICAgMjI1LCA2MCwgMjAsIDEsIDE2NywgMjI0LCAyNTQsIDIzMSwgMjIsIDIyNSwgNjEsIDIwLCAxLCAxNjcsIDIyOSwgMjMxLCAKKyAgICAyMzEsIDIxLCAyMCwgMSwgMTY3LCAyMTksIDIyMywgMjAsIDEsIDE2NywgMjE2LCA2NywgMjMxLCAyMSwgMjAsIDEsIDE2NywgCisgICAgMjI3LCAxMjIsIDIzMSwgMjEsIDIwLCAxLCAxNjcsIDIyMCwgMjEsIDIyNiwgOTQsIDIyOCwgMTc0LCAyMCwgMSwgMTY3LCAKKyAgICAyMjQsIDI1NCwgMjI2LCA5NCwgMjI4LCAxNzUsIDIyNSwgNjAsIDIwLCAxLCAxNjcsIDIyNCwgMjU0LCAyMjYsIDk0LCAyMjgsIAorICAgIDE3NSwgMjI1LCA2MSwgMjAsIDEsIDE2NywgMjMxLCAyMjMsIDIwLCAxLCAxNjcsIDIxNSwgMTIwLCAyMzEsIDIyNCwgMjAsIAorICAgIDEsIDE2NywgMjI5LCA3NiwgMjAsIDEsIDE2NywgMjMxLCAyMjAsIDIwLCAxLCAxNjcsIDIzMSwgMTgxLCAyMCwgMSwgMTY3LCAKKyAgICAyMzAsIDUzLCAyMCwgMSwgMTY3LCAyMjAsIDEyNiwgMjAsIDEsIDE2NywgMjI3LCAyNDYsIDIwLCAxLCAxNjcsIDIzNCwgCisgICAgMTU1LCAyMCwgMSwgMTY3LCAyMjgsIDE0MywgMjAsIDEsIDE2NywgMjE4LCA1LCAyMCwgMSwgMTY3LCAyMjksIDE2LCAyMCwgCisgICAgMSwgMTY3LCAyMzMsIDkzLCAyMCwgMSwgMTY3LCAyMzMsIDE4LCAyMzMsIDE5NSwgMjAsIDEsIDE2NywgMjI3LCAyNTMsIAorICAgIDIzMSwgMjksIDIwLCAxLCAxNjcsIDIzMSwgMjI3LCAyMCwgMSwgMTY3LCAyMjUsIDI1MCwgMjAsIDEsIDE2NywgMjQyLCAKKyAgICAyMzgsIDIwLCAxLCAxNjcsIDIyNiwgNTQsIDIwLCAxLCAxNjcsIDIzMCwgMTU2LCAyMjksIDUwLCAyMCwgMSwgMTY3LCAyMjcsIAorICAgIDEwMywgMjMxLCAzMiwgMjAsIDEsIDE2NywgMTA0LCAyMTAsIDE4OCwgMjI5LCAyMjUsIDIwLCAxLCAxNjcsIDI0MiwgMjM5LCAKKyAgICAyMCwgMSwgMTY3LCAyMjcsIDI1MywgMjI3LCAyNTQsIDIwLCAxLCAxNjcsIDIxOSwgMTMwLCAyMCwgMSwgMTY3LCAyMzEsIAorICAgIDE0LCAyMCwgMSwgMTY3LCAyMzEsIDM1LCAyMCwgMSwgMTY3LCAyMzAsIDEzNSwgMjAsIDEsIDE2NywgMjM0LCAyNTUsIDIwLCAKKyAgICAxLCAxNjcsIDIyNiwgOTQsIDIzMywgNTMsIDIwLCAxLCAxNjcsIDIyOSwgMTU0LCAyMzMsIDUzLCAyMCwgMSwgMTY3LCAyMjUsIAorICAgIDE2MSwgMjAsIDEsIDE2NywgMjMxLCAyMjEsIDIwLCAxLCAxNjcsIDIyOCwgMjEyLCAyMCwgMSwgMTY3LCAyMjQsIDEzNywgCisgICAgMjAsIDEsIDE2NywgMjE1LCAxMTcsIDIwLCAxLCAxNjcsIDIzMiwgOTksIDIwLCAxLCAxNjcsIDIxOSwgNDMsIDIwLCAxLCAKKyAgICAxNjcsIDIxNiwgMjE3LCAyMCwgMSwgMTY3LCAyMzEsIDIxOCwgMjAsIDEsIDE2NywgMjM0LCAxNjIsIDIwLCAxLCAxNjcsIAorICAgIDIyOSwgMTUwLCAyMCwgMSwgMTY3LCAyMzMsIDIwNywgMjAsIDEsIDE2NywgMjMwLCAxMzYsIDIwLCAxLCAxNjcsIDIxOSwgCisgICAgMjIwLCAyMCwgMSwgMTY3LCAyMzIsIDE0NCwgMjAsIDEsIDE2NywgMjQ0LCAxMDEsIDIwLCAxLCAxNjcsIDIyMiwgMjAxLCAKKyAgICAyMCwgMSwgMTY3LCAyMzMsIDI0NywgMjAsIDEsIDE2NywgMjE5LCAzOSwgMjAsIDEsIDE2NywgMjMxLCAxNzgsIDIyNSwgCisgICAgMTAyLCAyMCwgMSwgMTY3LCAyMjAsIDE0LCAyMCwgMSwgMTY3LCAyMjcsIDI1MiwgMjAsIDEsIDE2NywgMjE5LCAyNTUsIAorICAgIDIyOCwgNywgMjEwLCAxOTYsIDIwLCAxLCAxNjcsIDIyNywgMTQyLCAyMzAsIDE1MywgMjAsIDEsIDE2NywgMjI2LCA4OSwgCisgICAgMjAsIDEsIDE2NywgMjI4LCAxNDQsIDIwLCAxLCAxNjcsIDIxNCwgMTcwLCAyMCwgMSwgMTY3LCAyMjksIDUzLCAyMCwgMSwgCisgICAgMTY3LCAyMzEsIDIxNywgMjAsIDEsIDE2NywgMjI4LCAxODYsIDIwLCAxLCAxNjcsIDIzMSwgMTI0LCAyMCwgMSwgMTY3LCAKKyAgICAyMjcsIDE1NSwgMjAsIDEsIDE2NywgMjE2LCAyMjEsIDIwLCAxLCAxNjcsIDIxOSwgMzYsIDIwLCAxLCAxNjcsIDIyNiwgOTAsIAorICAgIDIwLCAxLCAxNjcsIDIyOCwgMTEsIDIwLCAxLCAxNjcsIDIzMSwgMjI1LCAyMCwgMSwgMTY3LCAyMjcsIDE1MiwgMjAsIDEsIAorICAgIDE2NywgMjM0LCAyMjIsIDIwLCAxLCAxNjcsIDIyOCwgMTQsIDIwLCAxLCAxNjcsIDIxMywgMjUwLCAyMCwgMSwgMTY3LCAKKyAgICAyMzIsIDEwMywgMjAsIDEsIDE2NywgMjI5LCAxMDMsIDIwLCAxLCAxNjcsIDIyOSwgMjAxLCAyMCwgMSwgMTY3LCAyMzEsIAorICAgIDEyMywgMjAsIDEsIDIyNSwgMTQxLCAyMjgsIDksIDIwLCAxLCAyMjUsIDE0MSwgMjE1LCAxMjAsIDIzMSwgMjIyLCAyMCwgMSwgCisgICAgMjI1LCAxNDEsIDIxOSwgMTg3LCAyMCwgMSwgMjI1LCAxNDEsIDIyMCwgMTMwLCAyMTUsIDExOSwgMjAsIDEsIDIyNSwgMTQxLCAKKyAgICAyMzIsIDE0NiwgMjI3LCAyNDksIDIwLCAxLCAyMjUsIDE0MSwgMjMxLCAxMzAsIDIzMSwgMjI2LCAyMCwgMSwgMjI1LCAxNDEsIAorICAgIDIzNCwgOTMsIDIwLCAxLCAyMjUsIDE0MSwgMjExLCAxNSwgMjAsIDEsIDIyNSwgMTQxLCAyMzEsIDEyNSwgMjAsIDEsIDIyNSwgCisgICAgMTQxLCAyMzQsIDI0MywgMjAsIDEsIDIyNSwgMTQxLCAyMjUsIDIxMSwgMjAsIDEsIDIyNSwgMTQxLCAyMTEsIDg5LCAyMzMsIAorICAgIDUzLCAyMCwgMSwgMjI1LCAxNDEsIDIzMywgMTA5LCAyMjgsIDcsIDIyNywgMTY0LCAyMCwgMSwgMjI1LCAxNDEsIDIyNywgCisgICAgMjQ3LCAyMjAsIDQwLCAyMCwgMSwgMjI1LCAxNDEsIDIyOSwgMTIxLCAyMjgsIDE4OSwgMjAsIDEsIDIyNSwgMTQxLCAyNDIsIAorICAgIDIzNiwgMjAsIDEsIDIyNSwgMTQxLCAyMjUsIDUyLCAyMCwgMSwgMjI1LCAxNDEsIDIxNSwgMTIwLCAyMjgsIDUsIDIwLCAxLCAKKyAgICAyMjUsIDE0MSwgMjIwLCA0NSwgMjI4LCAxODQsIDIwLCAxLCAyMjUsIDE0MSwgMjIwLCA0MSwgMjAsIDEsIDIyNSwgMTQxLCAKKyAgICAyMzEsIDIyLCAyMTYsIDIyMCwgMjAsIDEsIDIyNSwgMTQxLCAyMzEsIDExMiwgMjMxLCAxMjYsIDIwLCAxLCAyMjUsIDE0MSwgCisgICAgMjI3LCAxNTMsIDIyNywgMjQ5LCAyMCwgMSwgMjI1LCAxNDEsIDIzNCwgMTUxLCAyMCwgMSwgMjI1LCAxNDEsIDI0MiwgMjM3LCAKKyAgICAyMCwgMSwgMjI1LCAxNDEsIDIzNCwgMTQ3LCAyMCwgMSwgMjI1LCAxNDEsIDIzMywgMTM1LCAyMCwgMSwgMjI1LCAxNDEsIAorICAgIDIyNSwgMjUzLCAyMCwgMSwgMjI1LCAxNDEsIDIxMywgMTgyLCAyMCwgMSwgMjI1LCAxNDEsIDIyOSwgMTgsIDIzMCwgNTEsIAorICAgIDIwLCAxLCAyMjUsIDE0MSwgMjI5LCA1MiwgMjMxLCAxMDgsIDIwLCAxLCAyMjUsIDE0MSwgMjExLCAxOTMsIDIwLCAxLCAKKyAgICAyMjUsIDE0MSwgMjIyLCAxMywgMjAsIDEsIDIyNSwgMTQxLCAyMTcsIDk4LCAyMCwgMSwgMjI1LCAxNDEsIDIzMSwgMzQsIAorICAgIDIwLCAxLCAyMjUsIDE0MSwgMjI5LCAzNywgMjAsIDEsIDIyNSwgMTQxLCAyMjksIDM4LCAyMzMsIDkwLCAyMCwgMSwgMjI1LCAKKyAgICAxNDEsIDIzMSwgMjQsIDIwLCAxLCAyMjUsIDE0MSwgMjE4LCA1MywgMjAsIDEsIDIyNSwgMTQxLCAyMzEsIDExNiwgMjAsIDEsIAorICAgIDIyNSwgMTQxLCAyMzAsIDEzOCwgMjAsIDEsIDIyNSwgMTQxLCAyMjcsIDE2NywgMjAsIDEsIDIyNSwgMTQxLCAyMjQsIDE0MSwgCisgICAgMjAsIDEsIDIyNSwgMTQxLCAyMzEsIDMzLCAyMjksIDU0LCAyMCwgMSwgMjI1LCAxNDEsIDI0NCwgMTM0LCAyMCwgMSwgMjI1LCAKKyAgICAxNDEsIDIzMSwgMTAzLCAyMCwgMSwgMjI1LCAxNDEsIDI0NCwgMTU1LCAyMCwgMSwgMjI1LCAxNDEsIDIzNCwgMTU5LCAyMCwgCisgICAgMSwgMjI1LCAxNDEsIDIzMSwgMjQ0LCAyMjgsIDE3OCwgMjAsIDEsIDIyNSwgMTQxLCAyMzEsIDI0NCwgMjI4LCAxNTQsIDIwLCAKKyAgICAxLCAyMjUsIDE0MSwgMjMzLCAxNywgMjAsIDEsIDIyNSwgMTQxLCAyMjksIDYwLCAyMCwgMSwgMjI1LCAxNDEsIDIyOCwgMTYsIAorICAgIDIwLCAxLCAyMjUsIDE0MSwgMTg2LCAyMCwgMSwgMjI1LCAxNDEsIDIzNCwgODAsIDIwLCAxLCAyMjUsIDE0MSwgMjI5LCA2LCAKKyAgICAyMCwgMSwgMTM3LCAyMjksIDE3LCAyMzEsIDIyNCwgMjAsIDEsIDEzNywgMjI3LCAxMjEsIDIwLCAxLCAxMzcsIDIxMCwgCisgICAgMTk2LCAyMCwgMSwgMTM3LCAyMTIsIDUzLCAyMCwgMSwgMTM3LCAyMjksIDUzLCAyMCwgMSwgMTM3LCAyMjksIDE0MiwgMjAsIAorICAgIDEsIDEzNywgMjI5LCAyNCwgMjAsIDEsIDEzNywgMjQyLCAyNDYsIDIwLCAxLCAxMzcsIDIzMSwgMTIwLCAyMCwgMSwgMTM3LCAKKyAgICAyNDMsIDg0LCAyMCwgMSwgMTM3LCAyMjcsIDE0NCwgMjMwLCAxNzUsIDIzMSwgMzYsIDIwLCAxLCAxMzcsIDIyNywgMjQ1LCAKKyAgICAyMzEsIDExMSwgMjAsIDEsIDEzNywgMjMxLCAxMTcsIDIwLCAxLCAxMzcsIDIyNSwgNTgsIDIwLCAxLCAxMzcsIDIyOSwgCisgICAgMTI3LCAyMCwgMSwgMTM3LCAyMzEsIDEyOCwgMjUxLCAzNywgMjAsIDEsIDEzNywgMjM0LCAxNDksIDIwLCAxLCAxMzcsIAorICAgIDI0MiwgMjQ3LCAyMCwgMSwgMTM3LCAyMzQsIDE1NiwgMjAsIDEsIDEzNywgMjEwLCAyMTMsIDIzMCwgODEsIDIwLCAxLCAKKyAgICAxMzcsIDIyNywgMTE1LCAyMCwgMSwgMTM3LCAyMzEsIDEwNSwgMjAsIDEsIDEzNywgMjI4LCAxNSwgMjAsIDEsIDEzNywgCisgICAgMjMxLCAxMTEsIDIwLCAxLCAxMzcsIDIxMSwgMTYsIDIwLCAxLCAxMzcsIDIzMywgMjU1LCAyMCwgMSwgMTM3LCAyMzUsIDE2LCAKKyAgICAyMCwgMSwgMTM3LCAyMjAsIDEyNSwgMjAsIDEsIDEzNywgMjI5LCAxMzYsIDIwLCAxLCAxMzcsIDIxNywgOTYsIDIwLCAxLCAKKyAgICAxMzcsIDIyOCwgMTU4LCAyMCwgMSwgMTM3LCAyMTYsIDY3LCAyMTAsIDE5OCwgMjAsIDEsIDEzNywgMjE4LCA4MCwgMjAsIDEsIAorICAgIDEzNywgMjI5LCA0NCwgMjI3LCAxNjQsIDIwLCAxLCAxMzcsIDIxMywgMTgxLCAyMCwgMSwgMTM3LCAyMjksIDIwNCwgMjAsIAorICAgIDEsIDEzNywgMjMxLCAyNDQsIDIzNCwgMTU4LCAyMCwgMSwgMTM3LCAyMjcsIDI1NCwgMjAsIDEsIDEzNywgMjI5LCAzOSwgCisgICAgMjAsIDEsIDEzNywgMjMzLCA5NCwgMjAsIDEsIDEzNywgMjMxLCAxMTMsIDIwLCAxLCAxMzcsIDIzMSwgMTMsIDIwLCAxLCAKKyAgICAxMzcsIDIyNywgMjQ4LCAyMCwgMSwgMTM3LCAyMTYsIDIxNiwgMjAsIDEsIDEzNywgMjI5LCA0MSwgMjAsIDEsIDEzNywgCisgICAgMjQzLCAyNDAsIDIwLCAxLCAxMzcsIDIyOSwgMTQxLCAyMCwgMSwgMTM3LCAyMjgsIDE3LCAyMCwgMSwgMTM3LCAyMjgsIDEzLCAKKyAgICAyMCwgMSwgMTM3LCAyNTEsIDExNSwgMjAsIDEsIDEzNywgMjEzLCAxODMsIDIwLCAxLCAxMzcsIDIzMSwgMTE4LCAyMCwgMSwgCisgICAgMTM3LCAyMjIsIDE0MiwgMjAsIDEsIDEzNywgMjI4LCAxODgsIDIwLCAxLCAxMzcsIDIzMywgMTA4LCAyMCwgMSwgMTM3LCAKKyAgICAyMTYsIDY1LCAyMCwgMSwgMTM3LCAyMjcsIDI1NSwgMjI5LCA2LCAyMCwgMSwgMTM3LCAyMjgsIDE4MCwgMjAsIDEsIDEzNywgCisgICAgMjM0LCAxNjIsIDIwLCAxLCAxMzcsIDIyOSwgNDUsIDIwLCAxLCAxMzcsIDIzMSwgMjE3LCAyMCwgMSwgMTM3LCAyMzEsIAorICAgIDEwNiwgMjAsIDEsIDEzNywgMjMyLCAxMDMsIDIwLCAxLCAxMzcsIDIzMywgMTk1LCAyMCwgMSwgMTM3LCAyMjgsIDE4NiwgCisgICAgMjAsIDEsIDEzNywgMjI5LCA2LCAyMCwgMSwgMTM3LCAyMTEsIDE4NCwgMjAsIDEsIDEzNywgMjI5LCA0MiwgMjAsIDEsIAorICAgIDEzNywgMjI4LCAyLCAyMCwgMSwgMTM3LCAyMjcsIDI1MCwgMjAsIDEsIDEzNywgMjMzLCAyMDksIDIyOCwgMTQ0LCAyMCwgMSwgCisgICAgMTM3LCAyMjgsIDAsIDIwLCAxLCAxMzcsIDIyOSwgMTQ5LCAyMCwgMSwgMTM3LCAyMzEsIDI0NCwgMjI4LCA1LCAyMCwgMSwgCisgICAgMTM3LCAyMTEsIDEwMywgMjAsIDEsIDEzNywgMjI5LCAxNDgsIDIwLCAxLCAxMzcsIDIxOSwgMjIyLCAyMCwgMSwgMTM3LCAKKyAgICAyMjAsIDEyOCwgMjAsIDEsIDEzNywgMjMxLCAxMTQsIDIwLCAxLCAxMzcsIDIzMSwgMjI0LCAyMCwgMSwgMTM3LCAyMzEsIAorICAgIDEyNCwgMjAsIDEsIDEzNywgMjM0LCAxNTAsIDIwLCAxLCAxMzcsIDIzMSwgMTE1LCAyMCwgMSwgMTM3LCAyMzQsIDE1NCwgCisgICAgMjAsIDEsIDEzNywgMjMxLCAxMjgsIDIyNSwgMTA2LCAyMCwgMSwgMTM3LCAyMTAsIDE3OSwgMjAsIDEsIDEzNywgMjI4LCAKKyAgICAxNzYsIDIwLCAxLCAxMzcsIDIzMCwgMjI1LCAyMCwgMSwgMTM3LCAyMzAsIDEwNSwgMjAsIDEsIDEzNywgMjIwLCAxNywgMjAsIAorICAgIDEsIDEzNywgMjM0LCAxNzIsIDIzMywgNzYsIDIwLCAxLCAxMzcsIDIzNCwgMTcyLCAyNDQsIDE2OCwgMjAsIDEsIDEzNywgCisgICAgMjI5LCA3NCwgMjAsIDEsIDEzNywgMjI5LCAyMDEsIDIwLCAxLCAxMzcsIDIzMiwgMjA2LCAyMCwgMSwgMTM3LCAyMjUsIDY4LCAKKyAgICAyMCwgMSwgMTM3LCAyMjUsIDIwMiwgMjAsIDEsIDEzNywgMjE2LCAyMzEsIDIwLCAxLCAxMDcsIDIzMSwgMTA0LCAyMCwgMSwgCisgICAgMTA3LCAyMTIsIDUxLCAyMCwgMSwgMTA3LCAyMjgsIDE3NCwgMjAsIDEsIDEwNywgMjMxLCAyMSwgMjAsIDEsIDEwNywgMjI4LCAKKyAgICAxNzIsIDIwLCAxLCAxMDcsIDIzMiwgMjQxLCAyMCwgMSwgMTA3LCAyMjgsIDE3NywgMjAsIDEsIDEwNywgMjI4LCAxMiwgMjAsIAorICAgIDEsIDEwNywgMjI5LCA1OSwgMjAsIDEsIDEwNywgMjI3LCAxNjQsIDIwLCAxLCAxMDcsIDIxMSwgMTk0LCAyMCwgMSwgMTA3LCAKKyAgICAyMjksIDE0LCAyMCwgMSwgMTA3LCAyMjAsIDYzLCAyMCwgMSwgMTA3LCAyMjksIDI1LCAyMCwgMSwgMTA3LCAyMzQsIDE1NywgCisgICAgMjAsIDEsIDEwNywgMjE2LCAyMTgsIDIwLCAxLCAxMDcsIDIyMCwgNDMsIDIwLCAxLCAxMDcsIDIyOCwgMTg1LCAyMCwgMSwgCisgICAgMTA3LCAyMTgsIDUzLCAyMCwgMSwgMTA3LCAyMzQsIDE2MiwgMjAsIDEsIDEwNywgMjExLCA5MSwgMjAsIDEsIDEwNywgMjMzLCAKKyAgICAyMTAsIDIwLCAxLCAxMDcsIDIyMSwgMjM2LCAyMCwgMSwgMTA3LCAyMzEsIDI2LCAyMCwgMSwgMTA3LCAyMjksIDE0MCwgMjAsIAorICAgIDEsIDEwNywgMjMxLCAxOTMsIDIwLCAxLCAxMDcsIDIzMSwgMzIsIDIwLCAxLCAxMDcsIDIyMCwgMTI3LCAyMCwgMSwgMTA3LCAKKyAgICAyMTEsIDM5LCAyMCwgMSwgMTA3LCAyMjgsIDE3OSwgMjAsIDEsIDEwNywgMjM0LCAxNTMsIDIzMSwgMTA3LCAyMCwgMSwgCisgICAgMTA3LCAyMjksIDIxLCAyMCwgMSwgMTA3LCAyMTUsIDExOSwgMjAsIDEsIDEwNywgMjQyLCAyNTUsIDIwLCAxLCAxMDcsIAorICAgIDIyOSwgMTEsIDIwLCAxLCAxMDcsIDI0NCwgMTM1LCAyMCwgMSwgMTA3LCAyMjksIDE0NCwgMjAsIDEsIDEwNywgMjMxLCA1LCAKKyAgICAyMCwgMSwgMTA3LCAyMzMsIDExLCAyMCwgMSwgMTA3LCAyMjksIDEyNiwgMjAsIDEsIDEwNywgMjMwLCAxNTIsIDIwLCAxLCAKKyAgICAxMDcsIDIzMSwgOSwgMjAsIDEsIDEwNywgMjI0LCAxMjEsIDIwLCAxLCAxMDcsIDIzMSwgNywgMjAsIDEsIDEwNywgMjMxLCAKKyAgICAyMywgMjAsIDEsIDEwNywgMjMyLCA4OSwgMjAsIDEsIDEwNywgMjI4LCA0LCAyMCwgMSwgMTA3LCAyMzEsIDEyNywgMjAsIDEsIAorICAgIDEwNywgMjMzLCAxODYsIDIwLCAxLCAxMDcsIDIyNywgMTU1LCAyMCwgMSwgMTA3LCAyMTYsIDIyMSwgMjAsIDEsIDEwNywgCisgICAgMjE5LCAzNiwgMjAsIDEsIDEwNywgMjEwLCAxNzksIDIwLCAxLCAxMDcsIDIzNCwgMTU0LCAyMCwgMSwgMTA3LCAyMjMsIAorICAgIDE3MywgMjAsIDEsIDEwNywgMjE3LCAxMSwgMjAsIDEsIDEwNywgMjI5LCAyMiwgMjAsIDEsIDEwNywgMjMxLCAyOCwgMjAsIAorICAgIDEsIDEwNywgMjI4LCAzLCAyMCwgMSwgMTA3LCAyMzQsIDE1MiwgMjAsIDEsIDEwNywgMjI1LCA2MiwgMjAsIDEsIDEwNywgCisgICAgMjI1LCAxNTUsIDIwLCAxLCAxMDcsIDIyNywgMTMxLCAyMCwgMSwgMTA3LCAyMzMsIDE3LCAyMCwgMSwgMTA3LCAyMjksIDYwLCAKKyAgICAyMCwgMSwgMTA3LCAyMzEsIDI1LCAyMCwgMSwgMTA3LCAyMjksIDM0LCAyMCwgMSwgMTA3LCAyMTAsIDE5MywgMjAsIDEsIAorICAgIDEwNywgMjI2LCAyNSwgMjAsIDEsIDEwNywgMjEwLCAxOTIsIDIwLCAxLCAxMDcsIDIyOSwgMTQ5LCAyMCwgMSwgMTA3LCAKKyAgICAyMjcsIDI0OSwgMjAsIDEsIDEwNywgMjE4LCA4MiwgMjAsIDEsIDEwNywgMjMzLCAyMTQsIDIwLCAxLCAxMDcsIDIyOSwgNDksIAorICAgIDIwLCAxLCAxMDcsIDIyOSwgMTksIDIwLCAxLCAxMDcsIDIxNSwgMTAzLCAyMCwgMSwgMTA3LCAyMzEsIDM2LCAyMCwgMSwgCisgICAgMTA3LCAyMzMsIDIwNCwgMjAsIDEsIDEwNywgMjI4LCAxLCAyMCwgMSwgMTA3LCAyMTYsIDIxOSwgMjAsIDEsIDEwNywgMjMxLCAKKyAgICAyMTksIDIwLCAxLCAxMDcsIDIyOSwgNTgsIDIwLCAxLCAxMDcsIDIzMywgMTAsIDIwLCAxLCAxMDcsIDIyOSwgNDAsIDIwLCAKKyAgICAxLCAxMDcsIDIyOCwgNiwgMjAsIDEsIDEwNywgMjI4LCAxNTgsIDIwLCAxLCAxMDcsIDI0MiwgMjQwLCAyMCwgMSwgMTA3LCAKKyAgICAyMzMsIDIyMywgMjAsIDEsIDEwNywgMjIzLCA4NywgMjI2LCAyMTMsIDIwLCAxLCAxMDcsIDIxNywgODcsIDIwLCAxLCAxMDcsIAorICAgIDIxNiwgMTEsIDIwLCAxLCAxMDcsIDIyNywgMTUyLCAyMCwgMSwgMTA3LCAyMjIsIDI0MiwgMjAsIDEsIDEwNywgMjMzLCA1NSwgCisgICAgMjAsIDEsIDEwNywgMjMxLCA4NCwgMjAsIDEsIDEwNywgMTk0LCAyMCwgMSwgMTA3LCAyMTgsIDUsIDIwLCAxLCAxMDcsIAorICAgIDIzMCwgMTA3LCAyMCwgMSwgMTA3LCAyMjAsIDI5LCAyMCwgMSwgMTA3LCAyMjAsIDM5LCAyMCwgMSwgMTA3LCAyMzMsIDE2MSwgCisgICAgMjAsIDEsIDEwNywgMjI3LCAyNDIsIDIwLCAxLCAxMDcsIDIxOSwgMjI3LCAyMCwgMSwgMTA3LCAyMjcsIDI1MSwgMjAsIDEsIAorICAgIDEwNywgMjI1LCAyMTQsIDIwLCAxLCAxMDcsIDIyOCwgMjM4LCAyMCwgMSwgMTA3LCAyMTksIDI1NCwgMjAsIDEsIDEwNywgCisgICAgMjI0LCAxMzYsIDIwLCAxLCAxMDcsIDIzMCwgNTEsIDIwLCAxLCAxMDcsIDIzMiwgMTI1LCAyMCwgMSwgMTA3LCAyMjMsIDg3LCAKKyAgICAyMzAsIDEwMSwgMjAsIDEsIDEwNywgMjE2LCAxMTgsIDIwLCAxLCAxMDcsIDIyNywgMjQzLCAyMCwgMSwgMTA3LCAyMzEsIAorICAgIDEyOCwgMTk5LCAyMCwgMSwgMTA3LCAyMjEsIDIzNCwgMjAsIDEsIDEwNywgMjQ0LCAyMDMsIDIwLCAxLCA4MiwgMjI5LCAKKyAgICAxNDgsIDIwLCAxLCA4MiwgMjE2LCAxNywgMjAsIDEsIDgyLCAyMzEsIDExNywgMjAsIDEsIDgyLCAyMzMsIDk0LCAyMCwgMSwgCisgICAgODIsIDIxMywgMTI4LCAyMCwgMSwgODIsIDIzMiwgMTMxLCAyMCwgMSwgODIsIDIyNiwgOTMsIDIwLCAxLCA4MiwgMjE5LCAKKyAgICA0NywgMjAsIDEsIDgyLCAyMjMsIDE0OCwgMjAsIDEsIDgyLCAyMjgsIDgsIDIwLCAxLCA4MiwgMjI5LCAxMTksIDIwLCAxLCAKKyAgICA4MiwgMjI0LCAxNTAsIDIwLCAxLCA4MiwgMjE3LCA2MywgMjAsIDEsIDgyLCAyMjksIDI3LCAyMCwgMSwgODIsIDIzMywgCisgICAgMjUxLCAyMCwgMSwgODIsIDIxMSwgMTg3LCAyMCwgMSwgODIsIDIyMSwgMTcyLCAyMCwgMSwgODIsIDIyOSwgNTAsIDIwLCAxLCAKKyAgICA4MiwgMjI2LCA5MCwgMjAsIDEsIDgyLCAyMTYsIDE4LCAyMCwgMSwgODIsIDIzMywgMjA4LCAyMCwgMSwgODIsIDIzMiwgCisgICAgMTQ1LCAyMCwgMSwgODIsIDIyOCwgMTEsIDIwLCAxLCA4MiwgMjI5LCAzLCAyMCwgMSwgODIsIDIzMSwgMjI1LCAyMCwgMSwgCisgICAgODIsIDIyOSwgMjAsIDIwLCAxLCA4MiwgMjI5LCAyLCAyMCwgMSwgODIsIDIyOCwgMTAsIDIwLCAxLCA4MiwgMjIyLCAyNDAsIAorICAgIDIwLCAxLCA4MiwgMjI4LCAxNzYsIDIwLCAxLCA4MiwgMjI1LCAyMTMsIDIwLCAxLCA4MiwgMjIyLCAzMywgMjAsIDEsIDgyLCAKKyAgICAyMjksIDM1LCAyMCwgMSwgODIsIDIzMSwgMTUsIDIwLCAxLCA4MiwgMjQyLCAyMzQsIDIwLCAxLCA4MiwgMjI5LCAyMywgMjAsIAorICAgIDEsIDgyLCAyMjgsIDE4NywgMjAsIDEsIDgyLCAyMzEsIDE3NywgMjAsIDEsIDgyLCAyMzIsIDEyNywgMjAsIDEsIDgyLCAKKyAgICAyMjksIDU1LCAyMCwgMSwgODIsIDIyOSwgMTMyLCAyMCwgMSwgODIsIDIxNywgODYsIDIyNywgMjQ5LCAyMCwgMSwgODIsIAorICAgIDIyMCwgMTI5LCAyMCwgMSwgODIsIDIyNCwgMTQ2LCAyMCwgMSwgODIsIDIyOSwgMTUyLCAyMTksIDUzLCAyMCwgMSwgODIsIAorICAgIDIyOSwgNDMsIDIyNywgMTY0LCAyMCwgMSwgODIsIDIxMSwgNCwgMjAsIDEsIDgyLCAyNDIsIDIzNSwgMjAsIDEsIDgyLCAKKyAgICAyMTUsIDExOCwgMjAsIDEsIDgyLCAyMTEsIDE5LCAyMCwgMSwgODIsIDIyNSwgMTksIDIwLCAxLCA4MiwgMjE1LCAxMDgsIAorICAgIDIwLCAxLCA4MiwgMjM0LCAxNjAsIDIwLCAxLCA4MiwgMjE4LCA4MSwgMjAsIDEsIDgyLCAyMTYsIDIyMCwgMjAsIDEsIDgyLCAKKyAgICAyMTMsIDE4NCwgMjAsIDEsIDgyLCAyMTIsIDYsIDIwLCAxLCA4MiwgMjMzLCAxMzgsIDIwLCAxLCA4MiwgMjI0LCAxNTMsIAorICAgIDIwLCAxLCA4MiwgMjE3LCA5NywgMjAsIDEsIDgyLCAyNDIsIDI1NCwgMjAsIDEsIDgyLCAyMjksIDY0LCAyMCwgMSwgODIsIAorICAgIDIyMCwgNDIsIDIwLCAxLCA4MiwgMjMxLCAxMCwgMjAsIDEsIDgyLCAyMzEsIDEyMSwgMjAsIDEsIDgyLCAyMjcsIDExOSwgCisgICAgMjAsIDEsIDgyLCAyMjgsIDE0MSwgMjAsIDEsIDgyLCAyNDMsIDgwLCAyMCwgMSwgODIsIDIxNSwgMTA5LCAyMCwgMSwgODIsIAorICAgIDIzMywgMjE3LCAyMCwgMSwgODIsIDIxMSwgNjcsIDIwLCAxLCA4MiwgMjI3LCAxNTMsIDI1MCwgMjQsIDIwLCAxLCA4MiwgCisgICAgMjEwLCAyNTAsIDIwLCAxLCA4MiwgMjMxLCAyNywgMjAsIDEsIDgyLCAyMjksIDEzNywgMjAsIDEsIDgyLCAyMjUsIDEwMywgCisgICAgMjAsIDEsIDgyLCAyMTAsIDE5NywgMjAsIDEsIDgyLCAyMzMsIDEyLCAyMCwgMSwgODIsIDI0MywgMjQwLCAyMCwgMSwgODIsIAorICAgIDI0MywgNzksIDIwLCAxLCA4MiwgMjI5LCAxMywgMjAsIDEsIDgyLCAyMzQsIDE2MiwgMjAsIDEsIDgyLCAyMzEsIDIyOCwgCisgICAgMjAsIDEsIDgyLCAyMjksIDI2LCAyMCwgMSwgODIsIDI0MiwgMjQxLCAyMCwgMSwgODIsIDI0NCwgMjA0LCAyMCwgMSwgODIsIAorICAgIDIyNywgMjQ0LCAyMCwgMSwgODIsIDIyNSwgMTU2LCAyMCwgMSwgODIsIDIxMSwgMTcsIDIwLCAxLCA4MiwgMjI5LCA1MSwgCisgICAgMjAsIDEsIDgyLCAyMjcsIDE1MywgMjUyLCAzMSwgMjAsIDEsIDgyLCAyMjcsIDk5LCAyMCwgMSwgODIsIDIyNCwgMjUwLCAKKyAgICAyMCwgMSwgODIsIDIzMCwgMjI1LCAyMCwgMSwgODIsIDI0MywgMjM4LCAyMCwgMSwgODIsIDIyOSwgMjI1LCAyMCwgMSwgODIsIAorICAgIDIzMCwgMTA1LCAyMCwgMSwgODIsIDI0MiwgMjQwLCAyMCwgMSwgODIsIDI0MywgMjQyLCA3NCwgMjAsIDEsIDgyLCAyMzAsIAorICAgIDUyLCAyMCwgMSwgODIsIDIyNCwgMTQ5LCAyMCwgMSwgODIsIDIyOSwgMTUsIDIwLCAxLCA4MiwgMjMzLCAxOTUsIDIwLCAxLCAKKyAgICA4MiwgMjI1LCAxMDAsIDIwLCAxLCA4MiwgMjI3LCAyNTIsIDIwLCAxLCA4MiwgMjExLCAxOCwgMjAsIDEsIDgyLCAyMjksIAorICAgIDM2LCAyMCwgMSwgODIsIDIyNiwgOTQsIDIyNSwgMTkwLCAyMCwgMSwgODIsIDI0MywgMjQyLCAyNTEsIDIzLCAyMCwgMSwgCisgICAgODIsIDI0NCwgNDUsIDIwLCAxLCA4MiwgMjI4LCAxODEsIDIwLCAxLCA4MiwgNjEsIDIwLCAxLCA4MiwgMjE2LCAxMSwgMjAsIAorICAgIDEsIDgyLCA3OCwgMjAsIDEsIDgyLCA3NCwgMjAsIDEsIDgyLCAyMzMsIDkyLCAyMCwgMSwgODIsIDIyNiwgOTQsIDIyNSwgCisgICAgMjYsIDIwLCAxLCA4MiwgMjE3LCAxMDIsIDIwLCAxLCA4MiwgMjE3LCA1MiwgMjAsIDEsIDgyLCAyMjksIDE1MiwgMjMwLCAKKyAgICAzOSwgMjQwLCAyNDEsIDIwLCAxLCA4MiwgMjIwLCAxNywgMjAsIDEsIDgyLCAyMTEsIDE0LCAyMCwgMSwgODIsIDIyOCwgCisgICAgMjUyLCAyMCwgMSwgODIsIDIxMCwgMjAyLCAyMCwgMSwgODIsIDIxMCwgMjI3LCAyMTcsIDI0MSwgMjAsIDEsIDgyLCAyMTAsIAorICAgIDIyNywgMjQ5LCAxNTUsIDIwLCAxLCA4MiwgMjEwLCAxODcsIDIwLCAxLCA4MiwgMjEwLCAxOTUsIDIwLCAxLCA4MiwgMjM0LCAKKyAgICAxNDgsIDIwLCAxLCA4MiwgMjI1LCAxNTQsIDIwLCAxLCA4MiwgMjI4LCAxODIsIDI0NSwgMTEwLCAyMCwgMSwgODIsIDIyNCwgCisgICAgMTQ3LCAyMCwgMSwgODIsIDIxMSwgMTkyLCAyMCwgMSwgODIsIDI0NCwgMTU1LCAyMCwgMSwgODIsIDIxMywgMjUwLCAyMCwgCisgICAgMSwgODIsIDIzMiwgMTAzLCAyMCwgMSwgODIsIDIzMCwgMjM1LCAyMCwgMSwgODIsIDIyMywgNTQsIDIwLCAxLCA4MiwgMjIzLCAKKyAgICAxNzQsIDIwLCAxLCA4MiwgMjI4LCAyNTEsIDIwLCAxLCA4MiwgMjI5LCA4MiwgMjAsIDEsIDgyLCAyMjAsIDksIDIwLCAxLCAKKyAgICA4MiwgMjE5LCAyNTQsIDIwLCAxLCA4MiwgMjQzLCAyNDIsIDIyMywgODksIDIwLCAxLCA4MiwgMTk4LCAyMCwgMSwgODIsIAorICAgIDIyNSwgMTExLCAyMCwgMSwgODIsIDIzMiwgMTI1LCAyMCwgMSwgODIsIDIzNCwgMzQsIDIwLCAxLCA4MiwgMjMxLCA2MywgCisgICAgMjAsIDEsIDgyLCAxODYsIDIwLCAxLCA4MiwgMjMxLCAxNzQsIDIwLCAxLCA4MiwgMjE2LCAyMjIsIDIwLCAxLCA4MiwgMjM0LCAKKyAgICA5OCwgMjAsIDEsIDgyLCAyMzAsIDE1NSwgMjAsIDEsIDgyLCAyMTYsIDI0OCwgMjAsIDEsIDgyLCAyNDQsIDE3NywgMjAsIDEsIAorICAgIDgyLCAyNDIsIDIzMCwgMjAsIDEsIDIyNSwgMTQwLCAxNzYsIDIwLCAxLCAyMjUsIDE0MCwgNjksIDIwLCAxLCAyMjUsIDE0MCwgCisgICAgMjMzLCAyMjMsIDIwLCAxLCAyMjUsIDE0MCwgMjQ1LCAyMTcsIDIwLCAxLCAyMjUsIDE0MCwgMjIzLCAxMTEsIDIwLCAxLCAKKyAgICAyMjUsIDE0MCwgMjE3LCA4NywgMjAsIDEsIDIyNSwgMTQwLCAyMjcsIDE1MiwgMjAsIDEsIDIyNSwgMTQwLCAyMzMsIDE0MSwgCisgICAgMjAsIDEsIDIyNSwgMTQwLCAyMjIsIDI0MiwgMjAsIDEsIDIyNSwgMTQwLCAyMjMsIDMyLCAyMCwgMSwgMjI1LCAxNDAsIAorICAgIDIzMSwgODQsIDIwLCAxLCAyMjUsIDE0MCwgMjE3LCAxMDIsIDIwLCAxLCAyMjUsIDE0MCwgMjI5LCAxNTEsIDIwLCAxLCAKKyAgICAyMjUsIDE0MCwgMjI4LCAxODgsIDIwLCAxLCAyMjUsIDE0MCwgMTk0LCAyMCwgMSwgMjI1LCAxNDAsIDIxOCwgNSwgMjAsIDEsIAorICAgIDIyNSwgMTQwLCAyMjAsIDI5LCAyMCwgMSwgMjI1LCAxNDAsIDIxOSwgMTkzLCAyMCwgMSwgMjI1LCAxNDAsIDIyMCwgMTI1LCAKKyAgICAyMCwgMSwgMjI1LCAxNDAsIDIzMywgMTYxLCAyMCwgMSwgMjI1LCAxNDAsIDIzNCwgMTYyLCAyMCwgMSwgMjI1LCAxNDAsIAorICAgIDIyNywgMjEzLCAyMCwgMSwgMjI1LCAxNDAsIDIyNywgMjQyLCAyMCwgMSwgMjI1LCAxNDAsIDIyOCwgMTU5LCAyMCwgMSwgCisgICAgMjI1LCAxNDAsIDIxMCwgMjI2LCAyMCwgMSwgMjI1LCAxNDAsIDIxOSwgMjI3LCAyMCwgMSwgMjI1LCAxNDAsIDE5MiwgMjAsIAorICAgIDEsIDIyNSwgMTQwLCAyMjgsIDE0LCAyMCwgMSwgMjI1LCAxNDAsIDIyNSwgMTU0LCAyMCwgMSwgMjI1LCAxNDAsIDIyNywgCisgICAgMjUxLCAyMCwgMSwgMjI1LCAxNDAsIDIxMSwgMTkyLCAyMCwgMSwgMjI1LCAxNDAsIDIyNSwgMjE0LCAyMCwgMSwgMjI1LCAKKyAgICAxNDAsIDIyMiwgMTQyLCAyMCwgMSwgMjI1LCAxNDAsIDIyOCwgMjM4LCAyMCwgMSwgMjI1LCAxNDAsIDIyMywgNTQsIDIwLCAKKyAgICAxLCAyMjUsIDE0MCwgMjM0LCAxNzEsIDIwLCAxLCAyMjUsIDE0MCwgMjI5LCAxMiwgMjAsIDEsIDIyNSwgMTQwLCAyMjksIAorICAgIDYxLCAyMCwgMSwgMjI1LCAxNDAsIDIyMCwgOSwgMjAsIDEsIDIyNSwgMTQwLCAyMjQsIDE1MCwgMjAsIDEsIDIyNSwgMTQwLCAKKyAgICAyNDQsIDQ1LCAyMCwgMSwgMjI1LCAxNDAsIDIxMiwgNjUsIDIwLCAxLCAyMjUsIDE0MCwgMjMyLCAyNDcsIDIwLCAxLCAyMjUsIAorICAgIDE0MCwgMjMyLCAxMjUsIDIwLCAxLCAyMjUsIDE0MCwgMjM0LCAzNCwgMjAsIDEsIDIyNSwgMTQwLCAyMzEsIDExOSwgMjAsIAorICAgIDEsIDIyNSwgMTQwLCAyMjMsIDg2LCAyMCwgMSwgMjI1LCAxNDAsIDE4NiwgMjAsIDEsIDIyNSwgMTQwLCAyMzAsIDE2NiwgCisgICAgMjAsIDEsIDIyNSwgMTQwLCAyMzEsIDEyNywgMjAsIDEsIDIyNSwgMTQwLCAyMTYsIDIzMSwgMjAsIDEsIDIyNSwgMTQwLCAKKyAgICAyMzQsIDEsIDIwLCAxLCAyMjUsIDE0MCwgMjIxLCAyNTMsIDIwLCAxLCAyMjUsIDE0MCwgMjEyLCAxMTUsIDk1LCAxLCAxOTEsIAorICAgIDk1LCAxLCAyNTIsIDE5OSwgOTUsIDEsIDgsIDE5MSwgOTUsIDEsIDIyNSwgNDUsIDk1LCAxLCAxODYsIDk1LCAxLCAyMzAsIAorICAgIDIzOCwgOTUsIDEsIDI1NCwgMzEsIDE4NiwgOTUsIDEsIDI0NCwgMjA0LCA5NSwgMSwgMjE0LCAyNywgOTUsIDEsIDIxMywgCisgICAgMTc3LCA5NSwgMSwgMjE3LCAxMDYsIDk1LCAxLCAyNDgsIDIyOSwgOTUsIDEsIDgsIDIxNSwgMTU3LCA5NSwgMSwgOCwgMjE3LCAKKyAgICAxMDYsIDk1LCAxLCAyMTUsIDE1NywgOTUsIDEsIDI0OCwgMTQzLCA5NSwgMSwgMTk4LCA5NSwgMSwgMjI4LCAyNDIsIDk1LCAKKyAgICAxLCA4LCAyMjgsIDExNSwgOTUsIDEsIDI1NCwgMzEsIDE5OCwgOTUsIDEsIDIyOCwgMTE1LCA5NSwgMSwgMjI4LCAxMDEsIAorICAgIDk1LCAxLCAyMzMsIDE0MSwgOTUsIDEsIDIzMiwgNjYsIDk1LCAxLCAyMzMsIDQsIDk1LCAxLCAyMzIsIDI0OSwgOTUsIDEsIAorICAgIDIxNiwgNTcsIDk1LCAxLCAyNDcsIDE2MSwgOTUsIDEsIDIxNiwgNDksIDk1LCAxLCAyNDcsIDE2MCwgOTUsIDEsIDE3NiwgCisgICAgOTUsIDEsIDI0MywgMTQyLCA5NSwgMSwgOCwgMTc2LCA5NSwgMSwgMjI0LCA5MSwgOTUsIDEsIDIyNCwgNjksIDk1LCAxLCAKKyAgICAyMjksIDgyLCA5NSwgMSwgMjI5LCAzMywgOTUsIDEsIDI1NCwgMzEsIDIyOSwgODIsIDk1LCAxLCAxNjIsIDk1LCAxLCAyMTEsIAorICAgIDE2NSwgOTUsIDEsIDI0MywgMCwgOTUsIDEsIDI0MiwgMjMzLCA5NSwgMSwgMjE1LCAxNjYsIDk1LCAxLCAyNDYsIDM0LCA5NSwgCisgICAgMSwgMjI3LCAxNjksIDk1LCAxLCAyMjcsIDE1NCwgOTUsIDEsIDIxNSwgMTc2LCA5NSwgMSwgMjQ2LCA0MSwgOTUsIDEsIDgsIAorICAgIDIxNSwgMTc2LCA5NSwgMSwgOCwgMjQ2LCA0MSwgOTUsIDEsIDIyMywgMTA5LCAyMTUsIDE3NiwgOTUsIDEsIDIyMCwgMTA0LCAKKyAgICA5NSwgMSwgMjE4LCAyMjUsIDk1LCAxLCAyMTAsIDgyLCA5NSwgMSwgMjEwLCAxNCwgOTUsIDEsIDIxNSwgMTg0LCA5NSwgMSwgCisgICAgMjQ2LCA0NiwgOTUsIDEsIDgsIDIxNSwgMTg0LCA5NSwgMSwgMjA2LCA5NSwgMSwgMjEwLCAxMTYsIDk1LCAxLCAyMTAsIDE1LCAKKyAgICA5NSwgMSwgMjA5LCAyNDMsIDk1LCAxLCAyMDksIDIyMywgOTUsIDEsIDI1NCwgMzEsIDIwOSwgMjQzLCA5NSwgMSwgMjA5LCAKKyAgICAyMTUsIDk1LCAxLCAyMDksIDIyMiwgOTUsIDEsIDIxMiwgNjUsIDk1LCAxLCAyNTQsIDIxOCwgOTUsIDEsIDI0MSwgMTk2LCAKKyAgICA5NSwgMSwgMjI5LCAxOTcsIDk1LCA1LCAyNTMsIDIzMCwgOTUsIDUsIDIyMywgMTA5LCAyMTMsIDEzMywgOTUsIDUsIDIyMywgCisgICAgMTA5LCAyNTMsIDIzMCwgOTUsIDI1LCA1LCA2MSwgOTUsIDI1LCA1LCAyNTUsIDgyLCA5NSwgMjUsIDUsIDI1NCwgMjE0LCAKKyAgICA5NSwgMjUsIDUsIDI1NCwgMTMxLCA5NSwgMjUsIDUsIDI1NCwgMTIzLCA5NSwgMjUsIDUsIDc4LCA5NSwgMjUsIDUsIDIyNiwgCisgICAgMTg3LCA5NSwgMjUsIDUsIDIxMSwgMjI3LCA5NSwgMjUsIDUsIDIxMiwgOTgsIDk1LCAyNSwgNSwgNzYsIDk1LCAyNSwgNSwgCisgICAgMjQ1LCAxNTgsIDk1LCAyNSwgNSwgMjQ1LCAxNDYsIDk1LCAyNSwgNSwgMjI2LCAyMzYsIDk1LCAyNSwgNSwgNzQsIDk1LCAKKyAgICAyNSwgNSwgMjQwLCAxMjYsIDk1LCAyNSwgNSwgMjQwLCAxMjUsIDk1LCAyNSwgNSwgMjQwLCAxMjQsIDk1LCAyNSwgNSwgCisgICAgMjM1LCAxOTYsIDk1LCAyNSwgNSwgMjM2LCA2NywgOTUsIDI1LCA1LCAyMzYsIDQwLCA5NSwgMjUsIDUsIDIzNSwgMTYyLCAKKyAgICA5NSwgMjUsIDUsIDIzNSwgMjM4LCA5NSwgMjUsIDUsIDY5LCA5NSwgMjUsIDUsIDIxNCwgMjI5LCA5NSwgMjUsIDUsIDIxNCwgCisgICAgMjI4LCA5NSwgMjUsIDUsIDIxNCwgMjI3LCA5NSwgMjUsIDUsIDIxNCwgMTE4LCA5NSwgMjUsIDUsIDIxNCwgMjExLCA5NSwgCisgICAgMjUsIDUsIDIxNCwgMTc4LCA5NSwgMjUsIDUsIDIxMSwgMTE3LCA5NSwgMjUsIDUsIDIxMSwgOCwgOTUsIDI1LCA1LCAyNTQsIAorICAgIDI1MiwgOTUsIDI1LCA1LCAyNTQsIDI0OCwgOTUsIDI1LCA1LCAyNDUsIDk0LCA5NSwgMjUsIDUsIDIyMiwgMTg1LCAyNDUsIAorICAgIDk0LCA5NSwgMjUsIDUsIDI0NSwgMTAwLCA5NSwgMjUsIDUsIDIyMiwgMTg1LCAyNDUsIDEwMCwgOTUsIDI1LCA1LCAyNTQsIAorICAgIDIxMCwgOTUsIDI1LCA1LCAyNDUsIDIwMywgOTUsIDI1LCA1LCAyNTMsIDIwMCwgOTUsIDI1LCA1LCAyMjYsIDEzOCwgOTUsIAorICAgIDI1LCA1LCAyMzAsIDMwLCA5NSwgMjUsIDUsIDIyOSwgODQsIDk1LCAxMzgsIDIyMiwgMjU0LCA5NSwgMTM4LCAyMTYsIDE1LCAKKyAgICAyMjIsIDI1NCwgOTUsIDEzOCwgNDgsIDk1LCAxMzgsIDUxLCA5NSwgMSwgMjE2LCAyOSwgOTUsIDEsIDIxNiwgMjgsIDk1LCAKKyAgICAxLCAyMTYsIDI3LCA5NSwgMSwgMjE2LCAyNiwgOTUsIDEsIDIxNiwgMjUsIDk1LCAxLCAyMTYsIDI0LCA5NSwgMSwgMjE2LCAKKyAgICAyMywgOTUsIDEsIDIyMywgMTA5LCAyMTYsIDMwLCA5NSwgMSwgMjIzLCAxMDksIDIxNiwgMjksIDk1LCAxLCAyMjMsIDEwOSwgCisgICAgMjE2LCAyNywgOTUsIDEsIDIyMywgMTA5LCAyMTYsIDI2LCA5NSwgMSwgMjIzLCAxMDksIDIxNiwgMjUsIDk1LCAxLCAyMjMsIAorICAgIDEwOSwgMjE2LCAyMywgNTYsIDEsIDI1NCwgMzEsIDc2LCAxNDEsIDEsIDI1NCwgMzEsIDIxMSwgNDcsIDQ5LCAyOCwgMTYsIAorICAgIDIyNCwgMTU3LCA0OSwgMjgsIDE2LCAyNDgsIDE2NiwgNDksIDI4LCAxNiwgMjI1LCAxNzgsIDQ5LCAyOCwgMTYsIDIyNiwgCisgICAgMTE3LCAyNDUsIDE4NiwgNDksIDI4LCAxNiwgMjI2LCAxMTcsIDI0NywgMjA5LCA0OSwgMjgsIDE2LCAyMTQsIDE2LCAyNDUsIAorICAgIDE4NiwgNDksIDI4LCAxNiwgMjE0LCAxNiwgMjQ3LCAyMDksIDQ5LCAyOCwgMTYsIDIzNCwgMjAzLCA0OSwgMjgsIDE2LCAKKyAgICAyMTcsIDE3MCwgNDksIDI4LCAxNiwgMjI2LCAxMywgNDksIDI4LCAxNiwgMjEwLCAyMTcsIDQ5LCAyOCwgMTYsIDIxMCwgCisgICAgMjE4LCAyNDcsIDIwOSwgNDksIDI4LCAxNiwgMjMzLCAyNDAsIDQ5LCAyOCwgMTYsIDI1NCwgNzYsIDI0NSwgMTg2LCA0OSwgCisgICAgMjgsIDE2LCAyNDUsIDM0LCAyNDUsIDE4NiwgNDksIDI4LCAxNiwgMjE3LCAzLCA0OSwgMjgsIDE2LCAyMzQsIDE2NywgNDksIAorICAgIDI4LCAxNiwgMjU0LCA2NiwgNDksIDI4LCAxNiwgMjU0LCA2NywgMjQ3LCAyMDksIDQ5LCAyOCwgMTYsIDIxNywgMTc2LCA0OSwgCisgICAgMjgsIDE2LCAyMTYsIDE2MCwgNDksIDI4LCAxNiwgMjI2LCAyMTAsIDI1NCwgMjksIDQ5LCAyOCwgMTYsIDI0MiwgMTY2LCAKKyAgICAyNTQsIDI5LCA0OSwgMjgsIDE2LCAyMjQsIDE1NiwgNDksIDI4LCAxNiwgMjUwLCAxNTcsIDQ5LCAyOCwgMTYsIDIxNCwgNiwgCisgICAgNDksIDI4LCAxNiwgMjM1LCAxNzAsIDI1NCwgMjksIDQ5LCAyOCwgMTYsIDIzNCwgMTY5LCAyNTQsIDI5LCA0OSwgMjgsIDE2LCAKKyAgICAyMzQsIDE2OCwgMjU0LCAyOSwgNDksIDI4LCAxNiwgMjIxLCAyMTUsIDQ5LCAyOCwgMTYsIDIyNiwgNCwgNDksIDI4LCAxNiwgCisgICAgMjE4LCAxNDgsIDI1NCwgNjksIDQ5LCAyOCwgMTYsIDIyNiwgMTE2LCAyNTQsIDI5LCA0OSwgMjgsIDE2LCAyMTQsIDE1LCAKKyAgICAyNTQsIDI5LCA0OSwgMjgsIDE2LCAyNTQsIDcwLCAyNTQsIDI5LCA0OSwgMjgsIDE2LCAyNTQsIDY0LCA0OSwgMjgsIDE2LCAKKyAgICAyMzQsIDQzLCA0OSwgMjgsIDE2LCAyMjMsIDQ5LCA0OSwgMjgsIDE2LCAyMjUsIDEwOSwgMjU0LCAyOSwgNDksIDI4LCAxNiwgCisgICAgMjE2LCA4NCwgNDksIDI4LCAxNiwgMjU0LCAxMjksIDQ5LCAyOCwgMTYsIDIyMSwgMTYxLCA0OSwgMjgsIDE2LCAyMTcsIAorICAgIDE3OSwgMjU0LCAyOSwgNDksIDI4LCAxNiwgMjE3LCAxNzksIDIzMSwgNDUsIDIxOCwgMTQ2LCA0OSwgMjgsIDE2LCAyMjYsIAorICAgIDExMSwgMjU0LCAyOSwgNDksIDI4LCAxNiwgMjE2LCAxOTEsIDQ5LCAyOCwgMTYsIDIzMywgMzMsIDQ5LCAyOCwgMTYsIDI0NiwgCisgICAgNDksIDQ5LCAyOCwgMTYsIDIxNSwgMjI4LCA0OSwgMjgsIDE2LCAyMTYsIDIzMywgNDksIDI4LCAxNiwgMjMzLCAyNDMsIDQ5LCAKKyAgICAyOCwgMTYsIDI1NCwgNzYsIDI0NSwgMzQsIDIyOSwgMTAwLCA0OSwgMjgsIDE2LCAyNDMsIDI0MywgMjU0LCAyOSwgNDksIAorICAgIDI4LCAxNiwgMjM2LCAxOSwgNDksIDI4LCAxNiwgMjE1LCAyMDAsIDI1NCwgMjksIDQ5LCAyOCwgMTYsIDIzNCwgMjA2LCAKKyAgICAyMTUsIDE5OSwgNDksIDI4LCAxNiwgMjI1LCAyMDMsIDQ5LCAyOCwgMTYsIDIyNCwgMTYxLCA0OSwgMjgsIDE2LCAyMzQsIAorICAgIDE3LCA0OSwgMjgsIDE2LCAyNTAsIDg4LCAyNTQsIDI5LCA0OSwgMjgsIDE2LCAyMjMsIDE0OSwgNDksIDI4LCAxNiwgMjI2LCAKKyAgICAxNiwgMjU0LCAyOSwgNDksIDI4LCAxNiwgMjI2LCAxNCwgMjU0LCAyOSwgNDksIDI4LCAxNiwgMjQwLCAxMTYsIDQ5LCAyOCwgCisgICAgMTYsIDIyOSwgMjA4LCA0OSwgMjgsIDE2LCAyMjUsIDE1OSwgNDksIDI4LCAxNiwgMjM0LCAxOCwgMjU0LCAxNTgsIDQ5LCAKKyAgICAyOCwgMTYsIDIxNSwgMjAwLCAyNTQsIDE1OCwgNDksIDI4LCAxNiwgMjE4LCAxMjUsIDQ5LCAyOCwgMTYsIDI0MiwgMTMwLCAKKyAgICA0OSwgMjgsIDE2LCAyMzUsIDE3MCwgMjI5LCAxMDAsIDQ5LCAyOCwgMTYsIDIyNiwgMjEwLCAyMjksIDEwMCwgNDksIDI4LCAKKyAgICAxNiwgMjI2LCAxMTcsIDIyOSwgMTAwLCA0OSwgMjgsIDE2LCAyMjUsIDE1OCwgNDksIDI4LCAxNiwgMjM0LCA0LCA0OSwgMjgsIAorICAgIDE2LCAyMjUsIDE1NywgNDksIDI4LCAxNiwgMjMzLCAyNDIsIDQ5LCAyOCwgMTYsIDIyNSwgMjA0LCAyMjksIDEwMCwgNDksIAorICAgIDI4LCAxNiwgMjM0LCAxNjgsIDIyOSwgMTAxLCAyNTQsIDEwNCwgNDksIDI4LCAxNiwgMjM0LCAxNjksIDIyOSwgMTAxLCAKKyAgICAyNTQsIDEwNCwgNDksIDI4LCAxNiwgMjEwLCAyMTUsIDQ5LCAyOCwgMTYsIDI1NCwgNjcsIDIyOSwgMTAwLCA0OSwgMjgsIAorICAgIDE2LCAyNTQsIDY4LCAyMTcsIDE3NywgMjI5LCAxMDAsIDQ5LCAyOCwgMTYsIDIxMCwgMjE2LCA0OSwgMjgsIDE2LCAyMzMsIAorICAgIDI0MSwgNDksIDI4LCAxNiwgMjQ1LCAxODEsIDQ5LCAyOCwgMTYsIDI1MCwgMTU4LCA0OSwgMjgsIDE2LCAyMzAsIDIwMywgCisgICAgMjM1LCAxNjksIDQ5LCAyOCwgMTYsIDIxNCwgMTYsIDIyOSwgMTAwLCA0OSwgMjgsIDE2LCAyMjUsIDEwOSwgMjI5LCAxMDAsIAorICAgIDQ5LCAyOCwgMTYsIDIyNCwgMTYyLCAyMjksIDEwMCwgNDksIDI4LCAxNiwgMjI2LCAyMDcsIDQ5LCAyOCwgMTYsIDI1NCwgCisgICAgOTIsIDQ5LCAyOCwgMTYsIDIzMiwgNjMsIDQ5LCAyOCwgMTYsIDIyNiwgMTQsIDIyOSwgMTAwLCA0OSwgMjgsIDE2LCAyMjYsIAorICAgIDE2LCAyMjksIDEwMCwgNDksIDI4LCAxNiwgMjQ1LCA2OCwgMjI2LCAxNSwgNDksIDI4LCAxNiwgMjMzLCAxNTksIDQ5LCAyOCwgCisgICAgMTYsIDI1NCwgOTMsIDQ5LCAyOCwgMTYsIDIxNSwgMjAwLCAyMjksIDEwMCwgNDksIDI4LCAxNiwgMjQ1LCAxODQsIDQ5LCAKKyAgICAyOCwgMTYsIDIxNywgMTc5LCAyMjksIDEwMCwgNDksIDI4LCAxNiwgMjE3LCAxNzEsIDQ5LCAyOCwgMTYsIDI1MCwgODgsIAorICAgIDIyOSwgMTAwLCA0OSwgMjgsIDE2LCAyNDUsIDExNCwgNDksIDI4LCAxNiwgMjIxLCAxNjIsIDIyOSwgMTAwLCA0OSwgMjgsIAorICAgIDE2LCAyMTEsIDE1MSwgMjM0LCA0MywgNDksIDI4LCAxNiwgMjE1LCAxOTcsIDQ5LCAyOCwgMTYsIDIyNCwgMTYzLCA0OSwgCisgICAgMjgsIDE2LCAyMTUsIDIwMSwgNDksIDI4LCAxNiwgMjE1LCAxOTgsIDQ5LCAyOCwgMTYsIDIyNCwgMTYwLCA0OSwgMjgsIDE2LCAKKyAgICAyMTUsIDE5NiwgNDksIDI4LCAxNiwgMjI0LCAxNTksIDQ5LCAyOCwgMTYsIDI0MiwgMTY1LCA0OSwgMjgsIDE2LCAyNTQsIAorICAgIDIyLCA0OSwgMjgsIDE2LCAyNDUsIDY4LCAyNTQsIDIyLCA0OSwgMjgsIDE2LCAyMjYsIDExMSwgMjI5LCAxMDAsIDQ5LCAyOCwgCisgICAgMTYsIDIxNiwgMTkwLCAyNDUsIDc3LCA0OSwgMjgsIDE2LCAyMTYsIDE5MCwgMjQ1LCAzMywgNDksIDI4LCAxNiwgMjE2LCAKKyAgICAxOTIsIDI1NCwgNzEsIDQ5LCAyOCwgMTYsIDIxNiwgMTg1LCAyMzQsIDI1MywgMjU0LCA2MywgNDksIDI4LCAxNiwgMjM0LCAKKyAgICAyMDUsIDQ5LCAyOCwgMTYsIDI0NSwgMTQ3LCA0OSwgMjgsIDE2LCAyMTEsIDExLCAyMzQsIDIwMiwgNDksIDI4LCAxNiwgCisgICAgMjExLCAxMSwgMjU0LCAxMDQsIDQ5LCAyOCwgMTYsIDIxOCwgMTQ3LCA0OSwgMjgsIDE2LCAyMzQsIDQ0LCAyNTQsIDEwNCwgCisgICAgNDksIDI4LCAxNiwgMjQ3LCAyMTAsIDI1NCwgMjksIDQ5LCAyOCwgMTYsIDIzMywgMjQ0LCAyNTQsIDI5LCA0OSwgMjgsIDE2LCAKKyAgICAyMzMsIDI0NCwgMjU0LCAxNTgsIDQ5LCAyOCwgMTYsIDIzMywgMjQ0LCAyMjksIDEwMCwgNDksIDI4LCAxNiwgMjU0LCA3MCwgCisgICAgMjI5LCAxMDAsIDQ5LCAyOCwgMTYsIDI1NCwgNzIsIDQ5LCAyOCwgMTYsIDI0NywgMjA5LCA0OSwgMjgsIDE2LCAyMTUsIAorICAgIDIxMSwgNDksIDI4LCAxNiwgMjE2LCAyMjUsIDQ5LCAyOCwgMTYsIDIzNCwgOCwgNDksIDI4LCAxNiwgMjMzLCAzOCwgMjQ1LCAKKyAgICAxNDIsIDI1MCwgNzksIDQ5LCAyOCwgMTYsIDIzMywgMzgsIDI0NiwgNTAsIDI1MCwgODAsIDQ5LCAyOCwgMTYsIDIzMywgMzgsIAorICAgIDIxNSwgMjEzLCAyNTAsIDgwLCA0OSwgMjgsIDE2LCAyMzMsIDM4LCAyMTYsIDIzNSwgMjUwLCA4MCwgNDksIDI4LCAxNiwgCisgICAgMjMzLCAzOCwgMjM2LCAxNCwgMjUwLCA3OSwgNDksIDI4LCAxNiwgMjQyLCAxNjYsIDIyOSwgMTAxLCAyNTQsIDEwNCwgNDksIAorICAgIDI4LCAxNiwgMjQyLCAxNjYsIDIyNiwgNSwgMjU0LCAxOCwgNDksIDI4LCAxNiwgMjQyLCAxNjYsIDIyNiwgNSwgMjQ4LCAzNywgCisgICAgNDksIDI4LCAxNiwgMjQ3LCAyMzMsIDQ5LCAyOCwgMTYsIDI0NywgMjM0LCAyMjYsIDUsIDI1NCwgMTksIDIzNCwgMjAyLCAKKyAgICA0OSwgMjgsIDE2LCAyNDcsIDIzNCwgMjI2LCA1LCAyNTQsIDE5LCAyNTQsIDEwNCwgNDksIDI4LCAxNiwgMjQ3LCAyMzQsIAorICAgIDIyNiwgNSwgMjQ4LCAzNywgNDksIDI4LCAxNiwgMjE1LCAyMTcsIDQ5LCAyOCwgMTYsIDI1NCwgMjMsIDQ5LCAyOCwgMTYsIAorICAgIDIzNiwgMjEsIDQ5LCAyOCwgMTYsIDI0NywgMjU0LCA0OSwgMjgsIDE2LCAyNTQsIDIyMCwgMjI1LCAzLCAyNTQsIDI0LCA0OSwgCisgICAgMjgsIDE2LCAyNTQsIDIyMCwgMjU0LCAyMSwgNDksIDI4LCAxNiwgMjU0LCAyMjAsIDI1NCwgMjQsIDQ5LCAyOCwgMTYsIAorICAgIDI1NCwgMjIwLCAyMzEsIDM5LCA0OSwgMjgsIDE2LCAyNTQsIDIyMCwgMjMxLCA1MCwgNDksIDI4LCAxNiwgMjU0LCAyMjAsIAorICAgIDI0MiwgMTY3LCA0OSwgMjgsIDE2LCAyNTQsIDIyMCwgMjQyLCAxNjQsIDQ5LCAyOCwgMTYsIDI1NCwgMjIwLCAyMjUsIDMsIAorICAgIDI0MiwgMTY3LCA0OSwgMjgsIDE2LCAyMzEsIDE1NiwgMjI0LCAxNjgsIDI0MCwgMTE0LCA0OSwgMjgsIDE2LCAyMzEsIDE1NiwgCisgICAgMjU0LCAxNjAsIDIyNCwgMTY4LCAyNDAsIDExNCwgNDksIDI4LCAxNiwgMjMxLCAxNTYsIDI0OCwgMzYsIDI0MCwgMTE0LCAKKyAgICA0OSwgMjgsIDE2LCAyMzEsIDE1NiwgMjU0LCAxNjAsIDI0OCwgMzYsIDI0MCwgMTE0LCA0OSwgMjgsIDE2LCAyMzEsIDE1NiwgCisgICAgMjE1LCAyMDYsIDI0MCwgMTE0LCA0OSwgMjgsIDE2LCAyMzEsIDE1NiwgMjE1LCAyMTgsIDQ5LCAyOCwgMTYsIDIzMSwgMTU2LCAKKyAgICAyMTYsIDIyOSwgMjQwLCAxMTQsIDQ5LCAyOCwgMTYsIDIzMSwgMTU2LCAyMTYsIDIyOSwgMjMzLCA0MSwgMjQwLCAxMTQsIAorICAgIDQ5LCAyOCwgMTYsIDIzMSwgMTU2LCAyMzMsIDQxLCAyNDAsIDExNCwgNDksIDI4LCAxNiwgMjMxLCAxNTYsIDIyNSwgNDIsIAorICAgIDI0MCwgMTE0LCA0OSwgMjgsIDE2LCAyMzUsIDE3NiwgMjE2LCAyNTIsIDI0MCwgMTE1LCA0OSwgMjgsIDE2LCAyNTQsIDY4LCAKKyAgICAyMTYsIDI1MiwgMjQwLCAxMTUsIDQ5LCAyOCwgMTYsIDI0NCwgMTgwLCAyMTYsIDIyNiwgNDksIDI4LCAxNiwgMjQ0LCAxODAsIAorICAgIDIzMCwgMTQ4LCA0OSwgMjgsIDE2LCAyNDQsIDE4MCwgMjQ3LCAyMzgsIDQ5LCAyOCwgMTYsIDIzMSwgMTU2LCAyMTQsIDEwLCAKKyAgICAyNDAsIDExNCwgNDksIDI4LCAxNiwgMjMxLCAxNTYsIDIyNCwgMTY3LCAyNDAsIDExNCwgNDksIDI4LCAxNiwgMjMxLCAxNTYsIAorICAgIDIyNSwgNDIsIDIxNiwgMjI5LCAyNDAsIDExNCwgNDksIDI4LCAxNiwgMjQyLCAxNjIsIDIzMCwgMzEsIDI1NCwgNzEsIDQ5LCAKKyAgICAyOCwgMTYsIDI0MiwgMTYyLCAyMzAsIDMxLCAyNDcsIDIwOCwgNDksIDI4LCAxNiwgMjQ1LCAxNTYsIDIzNCwgMjUzLCAyNDMsIAorICAgIDI0MywgMjEzLCAxMjQsIDQ5LCAyOCwgMTYsIDIzNiwgMjAsIDQ5LCAyOCwgMTYsIDIzNiwgMTgsIDQ5LCAyOCwgMTYsIDI0MywgCisgICAgMjQzLCAyNTQsIDMwLCAyNDgsIDM1LCAyNDAsIDExMywgNDksIDI4LCAxNiwgMjQzLCAyNDMsIDI0NywgMjUyLCAxOTEsIDQ5LCAKKyAgICAyOCwgMTYsIDI0MywgMjQzLCAyNDcsIDI1MiwgMjI5LCAyMDgsIDQ5LCAyOCwgMTYsIDI0MywgMjQzLCAyMjksIDIwMywgCisgICAgMjQwLCAxMTQsIDQ5LCAyOCwgMTYsIDI0MywgMjQzLCAyNDcsIDI1MiwgMjQ4LCAxMSwgNDksIDI4LCAxNiwgMjQzLCAyNDMsIAorICAgIDIxOSwgMTA0LCAyNDcsIDI1MSwgMjQ4LCAxMSwgNDksIDI4LCAxNiwgMjQzLCAyNDMsIDI0NywgMjUyLCAyMzQsIDE4OCwgCisgICAgNDksIDI4LCAxNiwgMjQzLCAyNDMsIDI0NywgMjUyLCAyMTAsIDIzLCA0OSwgMjgsIDE2LCAyNDMsIDI0MywgMjQ3LCAyNTIsIAorICAgIDIyOCwgMjM5LCAyMzQsIDIwMiwgNDksIDI4LCAxNiwgMjQzLCAyNDMsIDI0NywgMjUyLCAyMjgsIDIzOSwgMjU0LCAxMDQsIAorICAgIDQ5LCAyOCwgMTYsIDI0MywgMjQzLCAyMzEsIDE5NiwgMjUwLCA4MSwgMjQ3LCAyMzgsIDQ5LCAyOCwgMTYsIDI0MywgMjQzLCAKKyAgICAyMzEsIDE5NiwgMjUwLCA4MSwgMjMwLCAxNDgsIDQ5LCAyOCwgMTYsIDI0NCwgMTMwLCAyMTksIDEwNCwgMjUwLCA4MSwgCisgICAgMjE0LCA5LCA0OSwgMjgsIDE2LCAyNDMsIDI0MywgMjE5LCAxMDQsIDI1MCwgODEsIDIxNywgMTgwLCA0OSwgMjgsIDE2LCAKKyAgICAyNDMsIDI0MywgMjI5LCAxMDIsIDQ5LCAyOCwgMTYsIDI1MCwgODIsIDIwOSwgMjQ5LCA0OSwgMjgsIDE2LCAyNTAsIDgyLCAKKyAgICAyMzQsIDQyLCA0OSwgMjgsIDE2LCAyNTAsIDgyLCAyMTksIDExLCA0OSwgMjgsIDE2LCAyNDMsIDI0MywgMjQwLCAxNjEsIAorICAgIDIxMSwgMTAsIDIxNiwgMjMwLCA0OSwgMjgsIDE2LCAyNDMsIDI0MywgMjQ1LCAxNTcsIDI1NCwgOTQsIDQ5LCAyOCwgMTYsIAorICAgIDIxMSwgMTAsIDIxNSwgMjA3LCA0OSwgMjgsIDE2LCAyNDcsIDI0NiwgMjE1LCAyMDcsIDQ5LCAyOCwgMTYsIDI0NywgMjQ2LCAKKyAgICAyMTYsIDIzMCwgNDksIDI4LCAxNiwgMjQ3LCAyNDYsIDI1NCwgNzMsIDI0NiwgNTAsIDI0NywgMTQ3LCA0OSwgMjgsIDE2LCAKKyAgICAyNDcsIDI0NiwgMjMwLCAxNDYsIDIxNiwgMjM0LCAyNDcsIDE0NywgNDksIDI4LCAxNiwgMjQ3LCAyNDYsIDI0NywgMjMwLCAKKyAgICAyNDUsIDQ0LCAyNDcsIDE0NywgNDksIDI4LCAxNiwgMjQ3LCAyNDYsIDIxNSwgMjE1LCAyMjYsIDIxNSwgMjQ3LCAxNDcsIAorICAgIDQ5LCAyOCwgMTYsIDIxMSwgMTAsIDI1NCwgNzMsIDI0NiwgNTAsIDI0NywgMTQ3LCA0OSwgMjgsIDE2LCAyMTEsIDEwLCAKKyAgICAyMzAsIDE0NiwgMjE2LCAyMzQsIDI0NywgMTQ3LCA0OSwgMjgsIDE2LCAyMTEsIDEwLCAyNDcsIDIzMCwgMjQ1LCA0NCwgCisgICAgMjQ3LCAxNDcsIDQ5LCAyOCwgMTYsIDIxMSwgMTAsIDIxNSwgMjE1LCAyMjYsIDIxNSwgMjQ3LCAxNDcsIDQ5LCAyOCwgMTYsIAorICAgIDI0MywgNTYsIDI0NywgMjQ1LCA0OSwgMjgsIDE2LCAyNDMsIDU2LCAyMTEsIDksIDQ5LCAyOCwgMTYsIDI0NywgMjUzLCAKKyAgICAyNTQsIDczLCAyMzAsIDIwNCwgNDksIDI4LCAxNiwgMjQ3LCAyNTMsIDI1NCwgNzMsIDIzMSwgNzgsIDQ5LCAyOCwgMTYsIAorICAgIDI0NywgMjUzLCAyNDcsIDIwOSwgNDksIDI4LCAxNiwgMjQ3LCAyNTMsIDIxNiwgMTgzLCA0OSwgMjgsIDE2LCAyMTksIDE2NSwgCisgICAgMjE2LCAxODMsIDQ5LCAyOCwgMTYsIDIxOSwgMTY1LCAyMTYsIDE4NCwgMjQ3LCAxOTQsIDQ5LCAyOCwgMTYsIDIxOSwgMTY1LCAKKyAgICAyMTYsIDE4NCwgMjE1LCAyMDgsIDQ5LCAyOCwgMTYsIDIxOSwgMTY1LCAyMTYsIDE4NCwgMjE2LCAyMjMsIDQ5LCAyOCwgMTYsIAorICAgIDIxOSwgMTY1LCAyNTMsIDI1MiwgNDksIDI4LCAxNiwgMjE5LCAxNjUsIDI1MywgMjUzLCAyNDcsIDE5NCwgNDksIDI4LCAxNiwgCisgICAgMjE5LCAxNjUsIDI1MywgMjUzLCAyMTUsIDIwOCwgNDksIDI4LCAxNiwgMjE5LCAxNjUsIDI1MywgMjUzLCAyMTYsIDIyMywgCisgICAgNDksIDI4LCAxNiwgMjQ3LCAyMzEsIDI0MywgMzcsIDQ5LCAyOCwgMTYsIDI0NywgMjM3LCAyMjYsIDEzOCwgNDksIDI4LCAKKyAgICAxNiwgMjE4LCAxMzksIDQ5LCAyOCwgMTYsIDI1NCwgMTUsIDE5MSwgNDksIDI4LCAxNiwgMjU0LCAxNSwgMjEzLCAxMjQsIAorICAgIDQ5LCAyOCwgMTYsIDI1NCwgMTUsIDI0MywgMTQyLCA0OSwgMjgsIDE2LCAyNTQsIDE1LCAyNDgsIDExLCA0OSwgMjgsIDE2LCAKKyAgICAyNTQsIDE1LCAyMzQsIDE4OCwgNDksIDI4LCAxNiwgMjU0LCAxNSwgMjEwLCAyMywgNDksIDI4LCAxNiwgMjU0LCAxNSwgCisgICAgMjI4LCAyMzgsIDQ5LCAyOCwgMTYsIDIzNCwgMTY4LCAyMjksIDEwMSwgMjMxLCA0OSwgNDksIDI4LCAxNiwgMjM0LCAxNjksIAorICAgIDIyOSwgMTAxLCAyMzEsIDQ5LCA0OSwgMjgsIDE2LCAyMzQsIDE2OCwgMjI5LCAxMDEsIDIzNCwgMjAyLCA0OSwgMjgsIDE2LCAKKyAgICAyMzQsIDE2OSwgMjI5LCAxMDEsIDIzNCwgMjAyLCA0OSwgMjgsIDE2LCAyMzQsIDQ0LCAyMzQsIDIwMiwgNDksIDI4LCAxNiwgCisgICAgMjQyLCAxNjYsIDIyOSwgMTAxLCAyMzQsIDIwMiwgMjgsIDE2LCAyMTksIDE1NywgMjUyLCAxNDMsIDI4LCAxNiwgNTIsIAorICAgIDI1MiwgMTQzLCAyOCwgMTYsIDQwLCAyNTIsIDE0MywgMjgsIDE2LCAyMjMsIDUzLCA0MCwgMjUyLCAxNDMsIDI4LCAxNiwgCisgICAgMjQ4LCAxNjMsIDI1MiwgMTQzLCAyOCwgMTYsIDIxOSwgMjUzLCAyNTIsIDE0MywgMjgsIDE2LCA0MywgMjIzLCA4MCwgNTAsIAorICAgIDI4LCAxNiwgNDQsIDIyMywgODAsIDUwLCAyOCwgMTYsIDIyMywgODAsIDI0NywgMTI2LCAyOCwgMTYsIDI0OCwgMjA0LCAKKyAgICAyMjEsIDE2NSwgMjgsIDE2LCAyNDgsIDIzMCwgMjUxLCAxLCAyOCwgMTYsIDIyMSwgMTY1LCAyOCwgMTYsIDI0OSwgMjQyLCAKKyAgICAyOCwgMTYsIDIyMywgNzgsIDI0NCwgMTE5LCAyOCwgMTYsIDIyMywgNzgsIDI0NCwgMTE4LCAyOCwgMTYsIDIyMywgNzgsIAorICAgIDI0NCwgMTE3LCAyOCwgMTYsIDI0NCwgMTM5LCAyOCwgMTYsIDI0NCwgMTQwLCA1MSwgMjgsIDE2LCAyNTEsIDE1NiwgNzksIAorICAgIDI4LCAxNiwgMjUxLCAzMiwgMjgsIDE2LCAyNTEsIDE2NywgMjgsIDE2LCAxMjcsIDI4LCAxNiwgMjI2LCAxOTcsIDIxOCwgCisgICAgMTY1LCAyOCwgMTYsIDIxNSwgNTcsIDIxOCwgMTY1LCAyOCwgMTYsIDIxNiwgMTQzLCAyMTgsIDE2NSwgMjgsIDE2LCAyNDQsIAorICAgIDE4LCAyMTgsIDE2NSwgMjgsIDE2LCAyNDQsIDg4LCAyMTgsIDE2NSwgMjgsIDE2LCAyMTksIDEyNiwgMjE4LCAxNjUsIDI4LCAKKyAgICAxNiwgMjE5LCAxMjQsIDI0NCwgMiwgMjgsIDE2LCAyNDQsIDE2LCAyNDQsIDIsIDI4LCAxNiwgMjQzLCAyMTAsIDI1MCwgMjIsIAorICAgIDI4LCAxNiwgMjQzLCAyMTAsIDI1MCwgMjMsIDIyNiwgMTQwLCAyNTQsIDE1MCwgMjgsIDE2LCAyNDMsIDIxMCwgMjUwLCAyMywgCisgICAgMjI2LCAxNDAsIDI1MiwgMTMwLCAyOCwgMTYsIDI1MSwgNzUsIDI1MCwgMjIsIDI4LCAxNiwgMjQ1LCAxNSwgMjUwLCAyMiwgCisgICAgMjgsIDE2LCAyNDUsIDE1LCAyNTAsIDIzLCAyMjYsIDE0MCwgMjU0LCAxNTAsIDI4LCAxNiwgMjQ1LCAxNSwgMjUwLCAyMywgCisgICAgMjI2LCAxNDAsIDI1MiwgMTMwLCAyOCwgMTYsIDI0NiwgOTEsIDI1MCwgMjEsIDI4LCAxNiwgMjQ2LCA5MSwgMjUwLCAyMCwgCisgICAgMjgsIDE2LCAyMzAsIDkwLCAyMzEsIDk1LCAyMjMsIDY0LCAyOCwgMTYsIDUyLCAyMjAsIDc3LCAyOCwgMTYsIDUyLCAyNDQsIAorICAgIDczLCAyOCwgMTYsIDI0NCwgNzQsIDIxNCwgMTYzLCAyOCwgMTYsIDI0NCwgNzQsIDI0NiwgMTE0LCAyOCwgMTYsIDIyOSwgCisgICAgMTkzLCAyMTQsIDE2MywgMjgsIDE2LCAyMjksIDE5MywgMjQ2LCAxMTQsIDI4LCAxNiwgMjIwLCA3OCwgMjE0LCAxNjMsIDI4LCAKKyAgICAxNiwgMjIwLCA3OCwgMjQ2LCAxMTQsIDI4LCAxNiwgMjI0LCAyNSwgMTM4LCAyMjAsIDc3LCAyOCwgMTYsIDIyNCwgMjUsIAorICAgIDEzOCwgMjQ0LCA3MywgMjgsIDE2LCAyNDksIDIyNCwgMjE2LCA4OCwgMjgsIDE2LCAyNDksIDkzLCAyMTYsIDg4LCAyOCwgCisgICAgMTYsIDIyNiwgMTQwLCAyNTQsIDE1MCwgMjgsIDE2LCAyMjYsIDE0MCwgMjUyLCAxMzAsIDI4LCAxNiwgMjI0LCA3LCAyNTQsIAorICAgIDE1MCwgMjgsIDE2LCAyMjQsIDcsIDI1MiwgMTMwLCAyOCwgMTYsIDIzMCwgOTMsIDIyMywgNjQsIDI4LCAxNiwgMjExLCAKKyAgICAyNTEsIDIyMywgNjQsIDI4LCAxNiwgMTYzLCAyMjMsIDY0LCAyOCwgMTYsIDIyNCwgMjUsIDIyMywgNjQsIDI4LCAxNiwgCisgICAgMjQ1LCAxOTcsIDIyMywgNjQsIDI4LCAxNiwgMjE5LCAxMjAsIDIyMywgNjQsIDI4LCAxNiwgMjE2LCAxNjEsIDIyMywgNjQsIAorICAgIDI4LCAxNiwgMjE5LCAxMTIsIDIyMywgNjQsIDI4LCAxNiwgMTIzLCAyNDAsIDIxOCwgMjE1LCA3MSwgMjIzLCA2NCwgMjgsIAorICAgIDE2LCAyMTEsIDE3OSwgMjI4LCA0OCwgMjgsIDE2LCA5NiwgMjI4LCA0OCwgMjgsIDE2LCAyNTAsIDQ0LCAyMTEsIDE3OSwgCisgICAgMjI4LCA0OCwgMjgsIDE2LCA0MiwgMjI4LCA0OSwgMjExLCAyNTMsIDI4LCAxNiwgNDIsIDIyOCwgNDksIDI1MSwgMjI5LCAKKyAgICAyOCwgMTYsIDIxNSwgMjI3LCAyMjgsIDQ5LCAxMjAsIDIxMSwgMjUzLCAyOCwgMTYsIDIxNSwgMjI3LCAyMjgsIDQ5LCAxMjAsIAorICAgIDI1MSwgMjI5LCAyOCwgMTYsIDIxNSwgMjI3LCAyMjgsIDQ5LCA0MywgMjExLCAyNTMsIDI4LCAxNiwgMjE1LCAyMjcsIDIyOCwgCisgICAgNDksIDQzLCAyNTEsIDIyOSwgMjgsIDE2LCAyMTUsIDIyNywgMjI4LCA0OSwgNDQsIDIxMSwgMjUzLCAyOCwgMTYsIDIxNSwgCisgICAgMjI3LCAyMjgsIDQ5LCA0NCwgMjUxLCAyMjksIDI4LCAxNiwgMjE1LCAyMjcsIDIyOCwgNDksIDEyNCwgMjExLCAyNTMsIDI4LCAKKyAgICAxNiwgMjE1LCAyMjcsIDIyOCwgNDksIDEyNCwgMjUxLCAyMjksIDI4LCAxNiwgMjE1LCAyMjcsIDIyOCwgNDksIDEyMCwgNDQsIAorICAgIDIxMSwgMjUzLCAyOCwgMTYsIDIxNSwgMjI3LCAyMjgsIDQ5LCAxMjAsIDQ0LCAyNTEsIDIyOSwgMjgsIDE2LCAyMzAsIDEzNCwgCisgICAgMjI4LCA0OSwgMjExLCAyNTMsIDI4LCAxNiwgMjMwLCAxMzQsIDIyOCwgNDksIDI1MSwgMjI5LCAyOCwgMTYsIDIxNSwgMjI0LCAKKyAgICAyMjgsIDQ5LCAxMjQsIDIxMSwgMjUzLCAyOCwgMTYsIDIxNSwgMjI0LCAyMjgsIDQ5LCAxMjQsIDI1MSwgMjI5LCAyOCwgMTYsIAorICAgIDIyNiwgOCwgMjI4LCA0OCwgMjgsIDE2LCAyMTMsIDEzMiwgMjI4LCA0OCwgMjgsIDE2LCAyMjgsIDQ5LCAyNTEsIDIyOSwgCisgICAgMjgsIDE2LCAyMjcsIDIwNywgMjI4LCA0OCwgMjgsIDE2LCAyNDksIDI0OSwgMjI4LCA0OSwgMjExLCAyNTMsIDI4LCAxNiwgCisgICAgMjQ5LCAyNDksIDIyOCwgNDksIDI1MSwgMjI5LCAyOCwgMTYsIDI1MSwgMTU0LCAyOCwgMTYsIDIxMSwgMjUxLCAyMjgsIDUyLCAKKyAgICAyOCwgMTYsIDE2MywgMjI4LCA1MiwgMjgsIDE2LCAyMjQsIDI1LCAyMjgsIDUyLCAyOCwgMTYsIDI0NSwgMTk3LCAyMjgsIAorICAgIDUyLCAyOCwgMTYsIDIxOSwgMTIwLCAyMjgsIDUyLCAyOCwgMTYsIDIxNiwgMTYxLCAyMjgsIDUyLCAyOCwgMTYsIDIxOSwgCisgICAgMTEyLCAyMjgsIDUyLCAyOCwgMTYsIDEyMywgMjQwLCAyMTgsIDIxNSwgNzEsIDIyOCwgNTIsIDI4LCAxNiwgMzgsIDIxOCwgCisgICAgMTQxLCAyOCwgMTYsIDM4LCAyMTgsIDI0MiwgMjE4LCAxNDEsIDI4LCAxNiwgMzgsIDIxNSwgMjM1LCAyOCwgMTYsIDM4LCAKKyAgICAyMTUsIDIzNCwgMjgsIDE2LCAzOCwgMjE1LCAyMzMsIDI4LCAxNiwgMjQ0LCAxMDksIDIxNSwgMjM1LCAyOCwgMTYsIDI0NCwgCisgICAgMTA5LCAyMTUsIDIzNCwgMjgsIDE2LCAyNDQsIDEwOSwgMjE1LCAyMzMsIDI4LCAxNiwgMzgsIDI1MywgMTk3LCAyNDcsIAorICAgIDEyOCwgMjgsIDE2LCAzOCwgMjQ0LCA4MCwgMjgsIDE2LCAzOCwgMjQ0LCA3OSwgMjgsIDE2LCAzOCwgMjQ0LCA3OCwgMjgsIAorICAgIDE2LCAzOCwgMjQ0LCA3NywgMjgsIDE2LCAzOCwgMjQ0LCA3NiwgMjgsIDE2LCAyNTIsIDY2LCAyNTIsIDgyLCAyOCwgMTYsIAorICAgIDI0NSwgMTUxLCAyNTIsIDgyLCAyOCwgMTYsIDI1MiwgNjYsIDIxNiwgMTEyLCAyOCwgMTYsIDI0NSwgMTUxLCAyMTYsIDExMiwgCisgICAgMjgsIDE2LCAyNTIsIDY2LCAyMTksIDgyLCAyOCwgMTYsIDI0NSwgMTUxLCAyMTksIDgyLCAyOCwgMTYsIDI1MiwgNjYsIAorICAgIDIyNSwgMTE4LCAyOCwgMTYsIDI0NSwgMTUxLCAyMjUsIDExOCwgMjgsIDE2LCAzOCwgMjU1LCAyMywgMjgsIDE2LCAzOCwgCisgICAgMjE4LCAxNjcsIDI4LCAxNiwgMzgsIDIxNiwgMjM5LCAyOCwgMTYsIDM4LCAyMTgsIDE2OCwgMjgsIDE2LCAzOCwgMjMxLCAKKyAgICAxNjcsIDI4LCAxNiwgMzgsIDIzMSwgMTY2LCAyOCwgMTYsIDM4LCAyNTUsIDIyLCAyOCwgMTYsIDM4LCAyMzIsIDExOCwgMjgsIAorICAgIDE2LCAyNTQsIDYsIDIxNCwgMTYzLCAyOCwgMTYsIDI1NCwgNiwgMjQ2LCAxMTQsIDI4LCAxNiwgMzgsIDI0NywgMTQzLCAyOCwgCisgICAgMTYsIDM4LCAyMjIsIDIzNCwgMjgsIDE2LCAzOCwgMjQ0LCA2NiwgMjgsIDE2LCAzOCwgMjE5LCA3OCwgMjgsIDE2LCAzOCwgCisgICAgMjUyLCA0NiwgMjgsIDE2LCAzOCwgNTIsIDIxNiwgMjAsIDI4LCAxNiwgMzgsIDIxNSwgMjEyLCAyMTYsIDIwLCAyOCwgMTYsIAorICAgIDIyMiwgMjM4LCAyOCwgMTYsIDIxOCwgNzYsIDI4LCAxNiwgMjEwLCAxNTksIDI4LCAxNiwgMjI1LCAxMTAsIDI4LCAxNiwgCisgICAgMjMxLCAzMCwgMjgsIDE2LCAyNDQsIDI1LCAyOCwgMTYsIDI0OSwgMTQ2LCAyOCwgMTYsIDI0OCwgODYsIDI4LCAxNiwgMjQyLCAKKyAgICAxNTcsIDIyOCwgNTMsIDIxOSwgOTcsIDI4LCAxNiwgMjQyLCAxNTcsIDIyOCwgNTMsIDIyOCwgODAsIDIxOSwgOTcsIDI4LCAKKyAgICAxNiwgMjE2LCAxLCAyOCwgMTYsIDIxNSwgOTUsIDI4LCAxNiwgMjM1LCAyMDAsIDIxNSwgOTUsIDI4LCAxNiwgMjE1LCA5NiwgCisgICAgMjE5LCA5NywgMjgsIDE2LCAyMTUsIDk2LCAyMTQsIDE2MywgMjgsIDE2LCAyMjYsIDE1MiwgMjE4LCAxMDQsIDI4LCAxNiwgCisgICAgMjI2LCAxNTIsIDIxOCwgMTAxLCAyOCwgMTYsIDIyNiwgMTUyLCAyMTgsIDEwMCwgMjgsIDE2LCAyMjYsIDE1MiwgMjE4LCAKKyAgICA5OSwgMjgsIDE2LCAyMjYsIDE1MiwgMjE4LCA5OCwgMjgsIDE2LCAyMjYsIDE1MiwgMjE4LCA5NywgMjgsIDE2LCAyMjYsIAorICAgIDE1MiwgMjE4LCA5NiwgMjgsIDE2LCAyMjYsIDE1MiwgMjE4LCA5NSwgMjgsIDE2LCAyMjYsIDE1MiwgMjE4LCA5NCwgMjgsIAorICAgIDE2LCAyMjYsIDE1MiwgMjE4LCAxMDMsIDI4LCAxNiwgMjI2LCAxNTIsIDIxOCwgMTAyLCAyOCwgMTYsIDI0MSwgMjUyLCAyOCwgCisgICAgMTYsIDIyOSwgMTEwLCAyOCwgMTYsIDI0NSwgMTUxLCA2NCwgMjE4LCAxMzUsIDI4LCAxNiwgMjQ4LCA3OSwgMjE5LCA5NywgCisgICAgMjgsIDE2LCAzOCwgMTI0LCAyNTEsIDE3NywgMjgsIDE2LCAzOCwgMTIwLCAyNTEsIDE3NywgMjgsIDE2LCAzOCwgMjQyLCA3LCAKKyAgICAyOCwgMTYsIDM4LCAyMTksIDY5LCAyMjUsIDQ2LCAyOCwgMTYsIDIyNSwgMjE5LCA3OSwgMjgsIDE2LCAyMjUsIDIxOSwgCisgICAgMTIwLCA3OSwgMjgsIDE2LCAxNjMsIDIyNSwgMjE5LCA3OSwgMjgsIDE2LCAyNDIsIDE4OSwgMjE0LCAxNjMsIDI4LCAxNiwgCisgICAgMjQyLCAxODksIDI0NiwgMTE0LCAyOCwgMTYsIDIsIDI0NCwgMTA4LCAyOCwgMTYsIDI0OCwgMTg4LCAyOCwgMTYsIDI0OCwgCisgICAgMTg5LCAyNTQsIDE2MywgMjgsIDE2LCAyMzEsIDEzOCwgMjgsIDE2LCAyMzIsIDEzNSwgMjgsIDE2LCAyNTEsIDE1MSwgMjgsIAorICAgIDE2LCAyMjAsIDE1NiwgMjExLCAyNTMsIDI4LCAxNiwgMjIwLCAxNTYsIDI1MSwgMjI5LCAyOCwgMTYsIDIzMCwgMTg5LCAyOCwgCisgICAgMTYsIDIzMCwgMTkwLCAyNTEsIDIyOSwgMjgsIDE2LCAyMjAsIDE1MCwgMjExLCAyNTMsIDI4LCAxNiwgMjIwLCAxNTAsIAorICAgIDI1MSwgMjI5LCAyOCwgMTYsIDI0MywgMjI3LCAyMTEsIDI1MywgMjgsIDE2LCAyNDMsIDIyNywgMjUxLCAyMjksIDI4LCAxNiwgCisgICAgMjMyLCAxMzYsIDIyNSwgMTgzLCAyMjMsIDY0LCAyOCwgMTYsIDIzMiwgMTM2LCAyMzYsIDExLCAyMjMsIDY0LCAyOCwgMTYsIAorICAgIDI1MSwgMTUyLCAyMjMsIDY0LCAyOCwgMTYsIDIyMCwgMTU2LCAyMjMsIDY0LCAyOCwgMTYsIDIzMCwgMTkwLCAyMjMsIDY0LCAKKyAgICAyOCwgMTYsIDIyMCwgMTUwLCAyMjMsIDY0LCAyOCwgMTYsIDIxNiwgMjUwLCAyMjUsIDE4MSwgMjQ5LCAxMTUsIDIyNCwgCisgICAgMTc3LCAyMjUsIDE4MiwgMjgsIDE2LCAyMTYsIDI1MCwgMjI1LCAxODEsIDI0OSwgMTE1LCAyMjQsIDE3NywgMjM2LCAxMCwgCisgICAgMjgsIDE2LCAyMTYsIDI1MCwgMjI1LCAxODEsIDI0OSwgMTE1LCAyMjQsIDE3NywgMjI1LCAxODMsIDI0NywgMjE5LCAyOCwgCisgICAgMTYsIDIxNiwgMjUwLCAyMzYsIDksIDI0OSwgMTE1LCAyMjQsIDE3NywgMjI1LCAxODIsIDI4LCAxNiwgMjE2LCAyNTAsIAorICAgIDIzNiwgOSwgMjQ5LCAxMTUsIDIyNCwgMTc3LCAyMzYsIDEwLCAyOCwgMTYsIDIxNiwgMjUwLCAyMzYsIDksIDI0OSwgMTE1LCAKKyAgICAyMjQsIDE3NywgMjM2LCAxMSwgMjQ3LCAyMTksIDI4LCAxNiwgMjE2LCAyNTAsIDIzNiwgOSwgMjQ5LCAxMTUsIDIyNCwgCisgICAgMTc3LCAyMzYsIDExLCAyNDcsIDIxOCwgMjgsIDE2LCAyMTYsIDI1MCwgMjM2LCA5LCAyNDksIDExNSwgMjI0LCAxNzcsIAorICAgIDIzNiwgMTEsIDI0NywgMjE3LCAyOCwgMTYsIDI0OSwgMTQxLCAyOCwgMTYsIDI0MiwgMTMzLCAyNTEsIDc1LCAyNTAsIDIyLCAKKyAgICAyOCwgMTYsIDI0MiwgMTMzLCAyNDUsIDE1LCAyNTAsIDIyLCAyOCwgMTYsIDQyLCAyNTMsIDE2NiwgMjgsIDE2LCAyMTMsIAorICAgIDE1MSwgMjgsIDE2LCAyMjUsIDE3LCAyOCwgMTYsIDI1MCwgMTMsIDI4LCAxNiwgMjIxLCAyMDUsIDI4LCAxNiwgMjUwLCAxNywgCisgICAgMjgsIDE2LCAyMTYsIDgsIDI4LCAxNiwgMjI0LCAyNDUsIDI4LCAxNiwgMjI0LCAyNDYsIDI0NCwgNjgsIDI4LCAxNiwgMjIxLCAKKyAgICAyMDYsIDI0NCwgNjgsIDI4LCAxNiwgMjE2LCA5LCAyMjMsIDYxLCAyOCwgMTYsIDIyNSwgMTY2LCAyMTgsIDY3LCAyNiwgCisgICAgMjEzLCAxMzcsIDE4OSwgMjE3LCAyMzAsIDI2LCAyMTMsIDEzNywgMTg5LCAyMTcsIDIxOSwgMjYsIDIxMywgMTM3LCAxODksIAorICAgIDIxNywgMjA5LCAyNiwgMjEzLCAxMzcsIDE4OSwgMjE3LCAyMDIsIDI2LCAyMTMsIDEzNywgMTg5LCAyMTcsIDE5NCwgMjYsIAorICAgIDIxMywgMTM3LCAxODksIDIxNywgMTg4LCAyNiwgMjEzLCAxMzcsIDE4OSwgMjE3LCAxODcsIDI2LCAyMTMsIDEzNywgMTg5LCAKKyAgICAyMTcsIDE4NiwgMjYsIDIxMywgMTM3LCAxODksIDIxNywgMTg1LCAyNiwgMjEzLCAxMzcsIDE4OSwgMjE3LCAyMjksIDI2LCAKKyAgICAyMTMsIDEzNywgMTg5LCAyMTcsIDIyOCwgMjYsIDIxMywgMTM3LCAxODksIDIxNywgMjI3LCAyNiwgMjEzLCAxMzcsIDE4OSwgCisgICAgMjE3LCAyMjYsIDI2LCAyMTMsIDEzNywgMTg5LCAyMTcsIDIyNSwgMjYsIDIxMywgMTM3LCAxODksIDIxNywgMjI0LCAyNiwgCisgICAgMjEzLCAxMzcsIDE4OSwgMjE3LCAyMjMsIDI2LCAyMTMsIDEzNywgMTg5LCAyMTcsIDIyMiwgMjYsIDIxMywgMTM3LCAxODksIAorICAgIDIxNywgMjIxLCAyNiwgMjEzLCAxMzcsIDE4OSwgMjE3LCAyMjAsIDI2LCAyMTMsIDEzNywgMTg5LCAyMTcsIDIxOCwgMjYsIAorICAgIDIxMywgMTM3LCAxODksIDIxNywgMjE3LCAyNiwgMjEzLCAxMzcsIDE4OSwgMjE3LCAyMTYsIDI2LCAyMTMsIDEzNywgMTg5LCAKKyAgICAyMTcsIDIxNSwgMjYsIDIxMywgMTM3LCAxODksIDIxNywgMjE0LCAyNiwgMjEzLCAxMzcsIDE4OSwgMjE3LCAxOTMsIDI2LCAKKyAgICAyMTMsIDEzNywgMTg5LCAyMTcsIDE5MiwgMjYsIDIxMywgMTM3LCAxODksIDIxNywgMTkxLCAyNiwgMjEzLCAxMzcsIDE4OSwgCisgICAgMjE3LCAxOTAsIDI2LCAyMTMsIDEzNywgMTg5LCAyMTcsIDE4OSwgMjYsIDIzNSwgMjIxLCAxODksIDIxNywgMjMwLCAyNiwgCisgICAgMjM1LCAyMjEsIDE4OSwgMjE3LCAyMTksIDI2LCAyMzUsIDIyMSwgMTg5LCAyMTcsIDIwMiwgMjYsIDIzNSwgMjIxLCAxODksIAorICAgIDIxNywgMTk0LCAyNiwgMjM1LCAyMjEsIDE4OSwgMjE3LCAxODcsIDI2LCAyMzUsIDIyMSwgMTg5LCAyMTcsIDE4NiwgMjYsIAorICAgIDIzNSwgMjIxLCAxODksIDIxNywgMjI4LCAyNiwgMjM1LCAyMjEsIDE4OSwgMjE3LCAyMjcsIDI2LCAyMzUsIDIyMSwgMTg5LCAKKyAgICAyMTcsIDIyNiwgMjYsIDIzNSwgMjIxLCAxODksIDIxNywgMjI1LCAyNiwgMjM1LCAyMjEsIDE4OSwgMjE3LCAyMjIsIDI2LCAKKyAgICAyMzUsIDIyMSwgMTg5LCAyMTcsIDIyMSwgMjYsIDIzNSwgMjIxLCAxODksIDIxNywgMjIwLCAyNiwgMjM1LCAyMjEsIDE4OSwgCisgICAgMjE3LCAyMTUsIDI2LCAyMzUsIDIyMSwgMTg5LCAyMTcsIDIxNCwgMjYsIDIzNSwgMjIxLCAxODksIDIxNywgMjEzLCAyNiwgCisgICAgMjM1LCAyMjEsIDE4OSwgMjE3LCAyMTIsIDI2LCAyMzUsIDIyMSwgMTg5LCAyMTcsIDIxMSwgMjYsIDIzNSwgMjIxLCAxODksIAorICAgIDIxNywgMjEwLCAyNiwgMjM1LCAyMjEsIDE4OSwgMjE3LCAyMDgsIDI2LCAyMzUsIDIyMSwgMTg5LCAyMTcsIDIwNywgMjYsIAorICAgIDIzNSwgMjIxLCAxODksIDIxNywgMjA2LCAyNiwgMjM1LCAyMjEsIDE4OSwgMjE3LCAyMDUsIDI2LCAyMzUsIDIyMSwgMTg5LCAKKyAgICAyMTcsIDIwNCwgMjYsIDIzNSwgMjIxLCAxODksIDIxNywgMjAzLCAyNiwgMjM1LCAyMjEsIDE4OSwgMjE3LCAyMDEsIDI2LCAKKyAgICAyMzUsIDIyMSwgMTg5LCAyMTcsIDIwMCwgMjYsIDIzNSwgMjIxLCAxODksIDIxNywgMTk5LCAyNiwgMjM1LCAyMjEsIDE4OSwgCisgICAgMjE3LCAxOTgsIDI2LCAyMzUsIDIyMSwgMTg5LCAyMTcsIDE5NywgMjYsIDIzNSwgMjIxLCAxODksIDIxNywgMTk2LCAyNiwgCisgICAgMjM1LCAyMjEsIDE4OSwgMjE3LCAxOTUsIDI2LCAyMzUsIDIyMSwgMTg5LCAyMTcsIDE5MywgMjYsIDIzNSwgMjIxLCAxODksIAorICAgIDIxNywgMTkyLCAyNiwgMjM1LCAyMjEsIDE4OSwgMjE3LCAxOTEsIDI2LCAyMzUsIDIyMSwgMTg5LCAyMTcsIDE5MCwgMjYsIAorICAgIDIzNSwgMjIxLCAxODksIDIxNywgMTg5LCAzOCwgMjYsIDI4LCAyMTUsIDIwOSwgMzgsIDI2LCAyOCwgMjE2LCAyMjQsIDM4LCAKKyAgICAyNiwgMjgsIDIyNSwgMTkxLCAyNiwgMjgsIDIzMywgMzcsIDIzMCwgMTQ3LCAzMSwgMjQ1LCAyMzEsIDI0NywgMjMyLCAzMSwgCisgICAgMjQxLCAyMjksIDI0NSwgMjMxLCAyNDcsIDIzMiwgMzEsIDI0MCwgMjIxLCAyNDUsIDIzMSwgMjQ3LCAyMzIsIDMxLCAyNDUsIAorICAgIDIzMCwgMjQxLCAyMzAsIDI0NywgMjMyLCAzMSwgMjQ1LCAyMzAsIDI0MCwgMjIwLCAyNDcsIDIzMiwgMzEsIDI0NSwgMjMxLCAKKyAgICAxODAsIDMxLCAyNTAsIDE4MiwgMTgwLCAzMSwgMjQzLCAyMzYsIDI1MCwgNDMsIDE4MCwgMzEsIDIzMCwgMTgyLCAxODAsIAorICAgIDMxLCAyNTIsIDEzOCwgMTgwLCAzMSwgMjM0LCAxODUsIDIxOSwgODEsIDE4MCwgMzEsIDI0OSwgMTg3LCAxODAsIDMxLCAKKyAgICAyNTMsIDI0MSwgMTgwLCAzMSwgMjI2LCAxNjcsIDE4MCwgMzEsIDI1MSwgMTYxLCAyMjYsIDEzNCwgMTgwLCAzMSwgMjQ4LCAKKyAgICA4MSwgMTc3LCAyNDcsIDE4NywgMTgwLCAzMSwgMjQ3LCAxODQsIDE4MCwgMzEsIDIxMCwgMjIyLCAxODAsIDMxLCAyMzUsIAorICAgIDI1NCwgMTgwLCAzMSwgMjI1LCAyMDAsIDE4MCwgMzEsIDIyMywgMTMwLCAxODAsIDMxLCAyNDksIDE5NywgMTgwLCAzMSwgCisgICAgMjQxLCA2NywgMjUyLCAxOTIsIDE4MCwgMzEsIDIxMiwgNTksIDE4MCwgMzEsIDI0NCwgNDcsIDE4MCwgMzEsIDI1NCwgMjU1LCAKKyAgICAxODAsIDMxLCAyMjMsIDkyLCAxODAsIDMxLCAyMjMsIDY4LCAxODAsIDMxLCAyNDUsIDIyOSwgMTgwLCAzMSwgMjM1LCA1OSwgCisgICAgMTgwLCAzMSwgMjQ5LCAxOTIsIDE4MCwgMzEsIDI0NSwgMTUwLCAxODAsIDMxLCAyNDYsIDYwLCAxODAsIDMxLCAyNTAsIAorICAgIDE1MywgMTgwLCAzMSwgMjQ4LCA5MCwgMTgwLCAzMSwgMjMsIDIyMywgNjcsIDE4MCwgMzEsIDIyNiwgODUsIDE4MCwgMzEsIAorICAgIDIzMywgNDAsIDE4MCwgMzEsIDI1MCwgNiwgMTgwLCAzMSwgMjM0LCA4MywgMTgwLCAzMSwgMjQzLCA5MywgMTgwLCAzMSwgCisgICAgMjE4LCAxMTQsIDE4MCwgMzEsIDIyNCwgMTMzLCAxODAsIDMxLCAyNDMsIDIzNSwgMTgwLCAzMSwgMjIzLCA2OSwgMTgwLCAKKyAgICAzMSwgMjMzLCA3NywgMTc3LCAyMzAsIDE2MiwgMTgwLCAzMSwgMjIzLCA2NSwgMTgwLCAzMSwgMjQyLCAxNzUsIDIxNiwgNDMsIAorICAgIDIzMSwgODEsIDE4MCwgMzEsIDI0NSwgMTUyLCAxODAsIDMxLCAyMTgsIDEyNiwgMTgwLCAzMSwgMjQyLCAxMzUsIDE4MCwgCisgICAgMzEsIDI0NSwgMTQ0LCAxODAsIDMxLCAyMjUsIDIzOSwgMTgwLCAzMSwgMjIyLCAyMjgsIDE4MCwgMzEsIDI0NCwgNjcsIAorICAgIDE4MCwgMzEsIDIxNCwgOCwgMTc3LCAyMTIsIDQ0LCAxODAsIDMxLCAyNDksIDIwMSwgMTgwLCAzMSwgMjMxLCA5NCwgMTgwLCAKKyAgICAzMSwgMjQ1LCA2OSwgMTgwLCAzMSwgMjE0LCAxNzIsIDE4MCwgMzEsIDI0NywgMjIwLCAxODAsIDMxLCAyNTAsIDgsIDIzMCwgCisgICAgMTE1LCAxODAsIDMxLCAyNDIsIDExMywgMTgwLCAzMSwgMjQzLCA5NCwgMjM2LCA2LCAxODAsIDMxLCAyMzEsIDE0NiwgMTgwLCAKKyAgICAzMSwgMjU1LCAxOSwgMTgwLCAzMSwgMjQ1LCAxNjUsIDE4MCwgMzEsIDI0NiwgMTE3LCAxODAsIDMxLCAyMTIsIDQyLCAxODAsIAorICAgIDMxLCAyMTksIDE1MiwgMTgwLCAzMSwgMjM1LCAyMjksIDE4MCwgMzEsIDI0OCwgNTAsIDE4MCwgMzEsIDI0OCwgMTY4LCAKKyAgICAxODAsIDMxLCAyNDcsIDIxNiwgMTgwLCAzMSwgMjQ1LCAzNywgMTgwLCAzMSwgMjIwLCAxMTcsIDE4MCwgMzEsIDIxOCwgCisgICAgMTMwLCAxODAsIDMxLCAyNDIsIDksIDE4MCwgMzEsIDI0OSwgMjIwLCAxODAsIDMxLCAyNTAsIDMsIDE4MCwgMzEsIDI0NCwgCisgICAgMTg1LCAxODAsIDMxLCAyNTQsIDIyMSwgMTgwLCAzMSwgMjQ5LCAyMTksIDE4MCwgMzEsIDIyNiwgMjAxLCAyMTYsIDE5NywgCisgICAgMjEzLCAyNDIsIDE4MCwgMzEsIDI0NywgMjQwLCAxODAsIDMxLCAyMzMsIDEzMCwgMTgwLCAzMSwgMjQ0LCAyMSwgMjQ5LCAKKyAgICAxNTcsIDIyMiwgMjA0LCAyMTQsIDE3NCwgMjEsIDExMSwgMjQ5LCAxNTcsIDIyMiwgMjA0LCAyMTQsIDE3NCwgMjEsIDEwNSwgCisgICAgMjQ5LCAxNTcsIDIyMiwgMjA0LCAyMTQsIDE3NCwgMjEsIDE1OCwgMjQ5LCAxNTcsIDIyMiwgMjA0LCAyMTQsIDE3NCwgMjEsIAorICAgIDE2MSwgMjQ5LCAxNTcsIDIyMiwgMjA0LCAyMTQsIDE3NCwgMjEsIDE5MCwgMjQ5LCAxNTcsIDIyMiwgMjA0LCAyMTQsIDE3NCwgCisgICAgMjEsIDE5NSwgMjQ5LCAxNTcsIDIyMiwgMjA0LCAyMTQsIDE3NCwgMjEsIDE5OSwgMjQ5LCAxNTcsIDIyMiwgMjA0LCAyMTQsIAorICAgIDE3NCwgMjEsIDE5NiwgMjQ5LCAxNTcsIDIyMiwgMjA0LCAyMTQsIDE3NCwgMjEsIDIwMSwgMjQ5LCAxNTcsIDIyMiwgMjA0LCAKKyAgICAyMTYsIDI0NCwgMjEsIDExMSwgMjQ5LCAxNTcsIDIyMiwgMjA0LCAyMTYsIDI0NCwgMjEsIDEwNSwgMjQ5LCAxNTcsIDIyMiwgCisgICAgMjA0LCAyMTYsIDI0NCwgMjEsIDE1OCwgMjQ5LCAxNTcsIDIyMiwgMjA0LCAyMTYsIDI0NCwgMjEsIDE2MSwgMjQ5LCAxNTcsIAorICAgIDIyMiwgMjA0LCAyMTYsIDI0NCwgMjEsIDE5MCwgMjQ5LCAxNTcsIDIyMiwgMjA0LCAyMTYsIDI0NCwgMjEsIDE5NSwgMjQ5LCAKKyAgICAxNTcsIDIyMiwgMjA0LCAyMTYsIDI0NCwgMjEsIDE5OSwgMjQ5LCAxNTcsIDIyMiwgMjA0LCAyMTYsIDI0NCwgMjEsIDE5NiwgCisgICAgMjQ5LCAxNTcsIDIyMiwgMjA0LCAyMTYsIDI0NCwgMjEsIDIwMSwgMTEsIDIzLCA2LCA2MSwgMTEsIDIzLCA2LCAyNTMsIAorICAgIDE2NiwgMTEsIDIzLCA2LCAyNTEsIDc0LCAxMSwgMjMsIDYsIDI0OSwgNjgsIDExLCAyMywgNiwgNzYsIDExLCAyMywgNiwgCisgICAgMjQ1LCAxNCwgMTEsIDIzLCA2LCAyNDMsIDIwOSwgMTEsIDIzLCA2LCAyNDIsIDY3LCAxMSwgMjMsIDYsIDc0LCAxMSwgMjMsIAorICAgIDYsIDIzNSwgMTUwLCAxMSwgMjMsIDYsIDIzNSwgMjksIDExLCAyMywgNiwgMTU2LCAxMSwgMjMsIDYsIDE5NCwgMTEsIDIzLCAKKyAgICA2LCAyMzAsIDMwLCAxMSwgMjMsIDYsIDc4LCAxMSwgMjMsIDYsIDIyNiwgMTA5LCAxMSwgMjMsIDYsIDIyNCwgOTksIDExLCAKKyAgICAyMywgNiwgMTUzLCAxMSwgMjMsIDYsIDIyMiwgOTMsIDExLCAyMywgNiwgMjE3LCAxNTMsIDExLCAyMywgNiwgNjksIDExLCAKKyAgICAyMywgNiwgMjE0LCAxMDUsIDExLCAyMywgNiwgMjEyLCA5OCwgMTEsIDIzLCA2LCAyMTEsIDE3OCwgMTEsIDIzLCA2LCAyMTEsIAorICAgIDExNywgMTEsIDIzLCA2LCAyMTAsIDE1OSwgMTEsIDIzLCA0LCA2MSwgMTEsIDIzLCA0LCAyNTMsIDE2NiwgMTEsIDIzLCA0LCAKKyAgICAyNTEsIDc0LCAxMSwgMjMsIDQsIDI0OSwgNjgsIDExLCAyMywgNCwgNzYsIDExLCAyMywgNCwgMjQ1LCAxNCwgMTEsIDIzLCAKKyAgICA0LCAyNDMsIDIwOSwgMTEsIDIzLCA0LCAyNDIsIDY3LCAxMSwgMjMsIDQsIDc0LCAxMSwgMjMsIDQsIDIzNSwgMTUwLCAxMSwgCisgICAgMjMsIDQsIDIzNSwgMjksIDExLCAyMywgNCwgMTU2LCAxMSwgMjMsIDQsIDE5NCwgMTEsIDIzLCA0LCAyMzAsIDMwLCAxMSwgCisgICAgMjMsIDQsIDc4LCAxMSwgMjMsIDQsIDIyNiwgMTA5LCAxMSwgMjMsIDQsIDIyNCwgOTksIDExLCAyMywgNCwgMTUzLCAxMSwgCisgICAgMjMsIDQsIDIyMiwgOTMsIDExLCAyMywgNCwgMjE3LCAxNTMsIDExLCAyMywgNCwgNjksIDExLCAyMywgNCwgMjE0LCAxMDUsIAorICAgIDExLCAyMywgNCwgMjEyLCA5OCwgMTEsIDIzLCA0LCAyMTEsIDE3OCwgMTEsIDIzLCA0LCAyMTEsIDExNywgMTEsIDIzLCA0LCAKKyAgICAyMTAsIDE1OSwgMTEsIDMyLCA2LCA2MSwgMTEsIDMyLCA2LCAyNTMsIDE2NiwgMTEsIDMyLCA2LCAyNTEsIDc0LCAxMSwgMzIsIAorICAgIDYsIDI0OSwgNjgsIDExLCAzMiwgNiwgNzYsIDExLCAzMiwgNiwgMjQ1LCAxNCwgMTEsIDMyLCA2LCAyNDMsIDIwOSwgMTEsIAorICAgIDMyLCA2LCAyNDIsIDY3LCAxMSwgMzIsIDYsIDc0LCAxMSwgMzIsIDYsIDIzNSwgMTUwLCAxMSwgMzIsIDYsIDIzNSwgMjksIAorICAgIDExLCAzMiwgNiwgMTU2LCAxMSwgMzIsIDYsIDE5NCwgMTEsIDMyLCA2LCAyMzAsIDMwLCAxMSwgMzIsIDYsIDc4LCAxMSwgCisgICAgMzIsIDYsIDIyNiwgMTA5LCAxMSwgMzIsIDYsIDIyNCwgOTksIDExLCAzMiwgNiwgMTUzLCAxMSwgMzIsIDYsIDIyMiwgOTMsIAorICAgIDExLCAzMiwgNiwgMjE3LCAxNTMsIDExLCAzMiwgNiwgNjksIDExLCAzMiwgNiwgMjE0LCAxMDUsIDExLCAzMiwgNiwgMjEyLCAKKyAgICA5OCwgMTEsIDMyLCA2LCAyMTEsIDE3OCwgMTEsIDMyLCA2LCAyMTEsIDExNywgMTEsIDMyLCA2LCAyMTAsIDE1OSwgMTEsIAorICAgIDMyLCA0LCA2MSwgMTEsIDMyLCA0LCAyNTMsIDE2NiwgMTEsIDMyLCA0LCAyNTEsIDc0LCAxMSwgMzIsIDQsIDI0OSwgNjgsIAorICAgIDExLCAzMiwgNCwgNzYsIDExLCAzMiwgNCwgMjQ1LCAxNCwgMTEsIDMyLCA0LCAyNDMsIDIwOSwgMTEsIDMyLCA0LCA3NCwgCisgICAgMTEsIDMyLCA0LCAyMzUsIDE1MCwgMTEsIDMyLCA0LCAyMzUsIDI5LCAxMSwgMzIsIDQsIDE1NiwgMTEsIDMyLCA0LCAxOTQsIAorICAgIDExLCAzMiwgNCwgMjMwLCAzMCwgMTEsIDMyLCA0LCA3OCwgMTEsIDMyLCA0LCAyMjYsIDEwOSwgMTEsIDMyLCA0LCAyMjQsIAorICAgIDk5LCAxMSwgMzIsIDQsIDE1MywgMTEsIDMyLCA0LCAyMjIsIDkzLCAxMSwgMzIsIDQsIDIxNywgMTUzLCAxMSwgMzIsIDQsIAorICAgIDY5LCAxMSwgMzIsIDQsIDIxNCwgMTA1LCAxMSwgMzIsIDQsIDIxMiwgOTgsIDExLCAzMiwgNCwgMjExLCAxNzgsIDExLCAzMiwgCisgICAgNCwgMjExLCAxMTcsIDExLCAzMiwgNCwgMjEwLCAxNTksIDExLCAyMywgMzIsIDYsIDYxLCAxMSwgMjMsIDMyLCA2LCAyNTMsIAorICAgIDE2NiwgMTEsIDIzLCAzMiwgNiwgMjUxLCA3NCwgMTEsIDIzLCAzMiwgNiwgMjQ5LCA2OCwgMTEsIDIzLCAzMiwgNiwgNzYsIAorICAgIDExLCAyMywgMzIsIDYsIDI0NSwgMTQsIDExLCAyMywgMzIsIDYsIDI0MywgMjA5LCAxMSwgMjMsIDMyLCA2LCAyNDIsIDY3LCAKKyAgICAxMSwgMjMsIDMyLCA2LCA3NCwgMTEsIDIzLCAzMiwgNiwgMjM1LCAxNTAsIDExLCAyMywgMzIsIDYsIDIzNSwgMjksIDExLCAKKyAgICAyMywgMzIsIDYsIDE1NiwgMTEsIDIzLCAzMiwgNiwgMTk0LCAxMSwgMjMsIDMyLCA2LCAyMzAsIDMwLCAxMSwgMjMsIDMyLCAKKyAgICA2LCA3OCwgMTEsIDIzLCAzMiwgNiwgMjI2LCAxMDksIDExLCAyMywgMzIsIDYsIDIyNCwgOTksIDExLCAyMywgMzIsIDYsIAorICAgIDE1MywgMTEsIDIzLCAzMiwgNiwgMjIyLCA5MywgMTEsIDIzLCAzMiwgNiwgMjE3LCAxNTMsIDExLCAyMywgMzIsIDYsIDY5LCAKKyAgICAxMSwgMjMsIDMyLCA2LCAyMTQsIDEwNSwgMTEsIDIzLCAzMiwgNiwgMjEyLCA5OCwgMTEsIDIzLCAzMiwgNiwgMjExLCAxNzgsIAorICAgIDExLCAyMywgMzIsIDYsIDIxMSwgMTE3LCAxMSwgMjMsIDMyLCA2LCAyMTAsIDE1OSwgMTEsIDIzLCAzMiwgNCwgNjEsIDExLCAKKyAgICAyMywgMzIsIDQsIDI1MywgMTY2LCAxMSwgMjMsIDMyLCA0LCAyNTEsIDc0LCAxMSwgMjMsIDMyLCA0LCAyNDksIDY4LCAxMSwgCisgICAgMjMsIDMyLCA0LCA3NiwgMTEsIDIzLCAzMiwgNCwgMjQ1LCAxNCwgMTEsIDIzLCAzMiwgNCwgMjQzLCAyMDksIDExLCAyMywgCisgICAgMzIsIDQsIDI0MiwgNjcsIDExLCAyMywgMzIsIDQsIDc0LCAxMSwgMjMsIDMyLCA0LCAyMzUsIDE1MCwgMTEsIDIzLCAzMiwgCisgICAgNCwgMjM1LCAyOSwgMTEsIDIzLCAzMiwgNCwgMTU2LCAxMSwgMjMsIDMyLCA0LCAxOTQsIDExLCAyMywgMzIsIDQsIDIzMCwgCisgICAgMzAsIDExLCAyMywgMzIsIDQsIDc4LCAxMSwgMjMsIDMyLCA0LCAyMjYsIDEwOSwgMTEsIDIzLCAzMiwgNCwgMjI0LCA5OSwgCisgICAgMTEsIDIzLCAzMiwgNCwgMTUzLCAxMSwgMjMsIDMyLCA0LCAyMjIsIDkzLCAxMSwgMjMsIDMyLCA0LCAyMTcsIDE1MywgMTEsIAorICAgIDIzLCAzMiwgNCwgNjksIDExLCAyMywgMzIsIDQsIDIxNCwgMTA1LCAxMSwgMjMsIDMyLCA0LCAyMTIsIDk4LCAxMSwgMjMsIAorICAgIDMyLCA0LCAyMTEsIDE3OCwgMTEsIDIzLCAzMiwgNCwgMjExLCAxMTcsIDExLCAyMywgMzIsIDQsIDIxMCwgMTU5LCAxMSwgCisgICAgMTE5LCA2LCA2MSwgMTEsIDExOSwgNiwgMjUxLCA3NCwgMTEsIDExOSwgNiwgMjQ5LCA2OCwgMTEsIDExOSwgNiwgMjQzLCAKKyAgICAyMDksIDExLCAxMTksIDYsIDIzNSwgMTUwLCAxMSwgMTE5LCA2LCAyMzUsIDI5LCAxMSwgMTE5LCA2LCAyMzAsIDMwLCAxMSwgCisgICAgMTE5LCA2LCA3OCwgMTEsIDExOSwgNiwgMjI2LCAxMDksIDExLCAxMTksIDYsIDIyNCwgOTksIDExLCAxMTksIDYsIDIyMiwgCisgICAgOTMsIDExLCAxMTksIDYsIDIxNywgMTUzLCAxMSwgMTE5LCA2LCA2OSwgMTEsIDExOSwgNiwgMjE0LCAxMDUsIDExLCAxMTksIAorICAgIDYsIDIxMiwgOTgsIDExLCAxMTksIDYsIDIxMSwgMTc4LCAxMSwgMTE5LCA2LCAyMTEsIDExNywgMTEsIDExOSwgNiwgMjEwLCAKKyAgICAxNTksIDExLCAxMTksIDQsIDYxLCAxMSwgMTE5LCA0LCAyNTMsIDE2NiwgMTEsIDExOSwgNCwgMjUxLCA3NCwgMTEsIDExOSwgCisgICAgNCwgMjQ5LCA2OCwgMTEsIDExOSwgNCwgMjQ1LCAxNCwgMTEsIDExOSwgNCwgMjQyLCA2NywgMTEsIDExOSwgNCwgNzQsIDExLCAKKyAgICAxMTksIDQsIDIzNSwgMTUwLCAxMSwgMTE5LCA0LCAyMzUsIDI5LCAxMSwgMTE5LCA0LCAxNTYsIDExLCAxMTksIDQsIDE5NCwgCisgICAgMTEsIDExOSwgNCwgMjMwLCAzMCwgMTEsIDExOSwgNCwgMjI2LCAxMDksIDExLCAxMTksIDQsIDIyNCwgOTksIDExLCAxMTksIAorICAgIDQsIDE1MywgMTEsIDExOSwgNCwgMjIyLCA5MywgMTEsIDExOSwgNCwgMjE3LCAxNTMsIDExLCAxMTksIDQsIDY5LCAxMSwgCisgICAgMTE5LCA0LCAyMTQsIDEwNSwgMTEsIDExOSwgNCwgMjEyLCA5OCwgMTEsIDExOSwgNCwgMjExLCAxNzgsIDExLCAxMTksIDQsIAorICAgIDIxMSwgMTE3LCAxMSwgMTE5LCA0LCAyMTAsIDE1OSwgMTEsIDIzLCAxMTksIDYsIDYxLCAxMSwgMjMsIDExOSwgNiwgMjUzLCAKKyAgICAxNjYsIDExLCAyMywgMTE5LCA2LCAyNTEsIDc0LCAxMSwgMjMsIDExOSwgNiwgMjQ5LCA2OCwgMTEsIDIzLCAxMTksIDYsIAorICAgIDc2LCAxMSwgMjMsIDExOSwgNiwgMjQ1LCAxNCwgMTEsIDIzLCAxMTksIDYsIDI0MywgMjA5LCAxMSwgMjMsIDExOSwgNiwgCisgICAgMjQyLCA2NywgMTEsIDIzLCAxMTksIDYsIDc0LCAxMSwgMjMsIDExOSwgNiwgMjM1LCAxNTAsIDExLCAyMywgMTE5LCA2LCAKKyAgICAyMzUsIDI5LCAxMSwgMjMsIDExOSwgNiwgMTU2LCAxMSwgMjMsIDExOSwgNiwgMTk0LCAxMSwgMjMsIDExOSwgNiwgMjMwLCAKKyAgICAzMCwgMTEsIDIzLCAxMTksIDYsIDc4LCAxMSwgMjMsIDExOSwgNiwgMjI2LCAxMDksIDExLCAyMywgMTE5LCA2LCAyMjQsIAorICAgIDk5LCAxMSwgMjMsIDExOSwgNiwgMTUzLCAxMSwgMjMsIDExOSwgNiwgMjIyLCA5MywgMTEsIDIzLCAxMTksIDYsIDIxNywgCisgICAgMTUzLCAxMSwgMjMsIDExOSwgNiwgNjksIDExLCAyMywgMTE5LCA2LCAyMTQsIDEwNSwgMTEsIDIzLCAxMTksIDYsIDIxMiwgCisgICAgOTgsIDExLCAyMywgMTE5LCA2LCAyMTEsIDE3OCwgMTEsIDIzLCAxMTksIDYsIDIxMSwgMTE3LCAxMSwgMjMsIDExOSwgNiwgCisgICAgMjEwLCAxNTksIDExLCAyMywgMTE5LCA0LCA2MSwgMTEsIDIzLCAxMTksIDQsIDI1MywgMTY2LCAxMSwgMjMsIDExOSwgNCwgCisgICAgMjUxLCA3NCwgMTEsIDIzLCAxMTksIDQsIDI0OSwgNjgsIDExLCAyMywgMTE5LCA0LCA3NiwgMTEsIDIzLCAxMTksIDQsIAorICAgIDI0NSwgMTQsIDExLCAyMywgMTE5LCA0LCAyNDMsIDIwOSwgMTEsIDIzLCAxMTksIDQsIDI0MiwgNjcsIDExLCAyMywgMTE5LCAKKyAgICA0LCA3NCwgMTEsIDIzLCAxMTksIDQsIDIzNSwgMTUwLCAxMSwgMjMsIDExOSwgNCwgMjM1LCAyOSwgMTEsIDIzLCAxMTksIDQsIAorICAgIDE1NiwgMTEsIDIzLCAxMTksIDQsIDE5NCwgMTEsIDIzLCAxMTksIDQsIDIzMCwgMzAsIDExLCAyMywgMTE5LCA0LCA3OCwgCisgICAgMTEsIDIzLCAxMTksIDQsIDIyNiwgMTA5LCAxMSwgMjMsIDExOSwgNCwgMjI0LCA5OSwgMTEsIDIzLCAxMTksIDQsIDE1MywgCisgICAgMTEsIDIzLCAxMTksIDQsIDIyMiwgOTMsIDExLCAyMywgMTE5LCA0LCAyMTcsIDE1MywgMTEsIDIzLCAxMTksIDQsIDY5LCAKICAgICAxMSwgMjMsIDExOSwgNCwgMjE0LCAxMDUsIDExLCAyMywgMTE5LCA0LCAyMTIsIDk4LCAxMSwgMjMsIDExOSwgNCwgMjExLCAKICAgICAxNzgsIDExLCAyMywgMTE5LCA0LCAyMTEsIDExNywgMTEsIDIzLCAxMTksIDQsIDIxMCwgMTU5LCAxMSwgMTMzLCA2LCA2MSwgCi0gICAgMTEsIDEzMywgNiwgMjUzLCAxNTgsIDExLCAxMzMsIDYsIDI0OSwgNjAsIDExLCAxMzMsIDYsIDc1LCAxMSwgMTMzLCA2LCAKLSAgICAyNDUsIDYsIDExLCAxMzMsIDYsIDI0MywgMjAyLCAxMSwgMTMzLCA2LCAyMzUsIDE0NCwgMTEsIDEzMywgNiwgMjM1LCAyMywgCi0gICAgMTEsIDEzMywgNiwgMTU2LCAxMSwgMTMzLCA2LCAxOTMsIDExLCAxMzMsIDYsIDIzMCwgMjUsIDExLCAxMzMsIDYsIDc2LCAKLSAgICAxMSwgMTMzLCA2LCAyMjYsIDEwNSwgMTEsIDEzMywgNiwgMjI0LCA5NiwgMTEsIDEzMywgNiwgMjIyLCA5MSwgMTEsIDEzMywgCi0gICAgNiwgMjE3LCAxNTIsIDExLCAxMzMsIDYsIDcwLCAxMSwgMTMzLCA2LCAyMTQsIDEwNSwgMTEsIDEzMywgNiwgMjEyLCA5OCwgCisgICAgMTEsIDEzMywgNiwgMjUzLCAxNjYsIDExLCAxMzMsIDYsIDI0OSwgNjgsIDExLCAxMzMsIDYsIDc2LCAxMSwgMTMzLCA2LCAKKyAgICAyNDUsIDE0LCAxMSwgMTMzLCA2LCAyNDMsIDIwOSwgMTEsIDEzMywgNiwgMjM1LCAxNTAsIDExLCAxMzMsIDYsIDIzNSwgMjksIAorICAgIDExLCAxMzMsIDYsIDE1NiwgMTEsIDEzMywgNiwgMTk0LCAxMSwgMTMzLCA2LCAyMzAsIDMwLCAxMSwgMTMzLCA2LCA3OCwgCisgICAgMTEsIDEzMywgNiwgMjI2LCAxMDksIDExLCAxMzMsIDYsIDIyNCwgOTksIDExLCAxMzMsIDYsIDIyMiwgOTMsIDExLCAxMzMsIAorICAgIDYsIDIxNywgMTUzLCAxMSwgMTMzLCA2LCA2OSwgMTEsIDEzMywgNiwgMjE0LCAxMDUsIDExLCAxMzMsIDYsIDIxMiwgOTgsIAogICAgIDExLCAxMzMsIDYsIDIxMSwgMTc4LCAxMSwgMTMzLCA2LCAyMTEsIDExNywgMTEsIDEzMywgNCwgNjEsIDExLCAxMzMsIDQsIAotICAgIDI1MywgMTU4LCAxMSwgMTMzLCA0LCAyNTEsIDY2LCAxMSwgMTMzLCA0LCAyNDksIDYwLCAxMSwgMTMzLCA0LCA3NSwgMTEsIAotICAgIDEzMywgNCwgMjQ1LCA2LCAxMSwgMTMzLCA0LCAyNDMsIDIwMiwgMTEsIDEzMywgNCwgMjQyLCA2MCwgMTEsIDEzMywgNCwgCi0gICAgNzMsIDExLCAxMzMsIDQsIDIzNSwgMTQ0LCAxMSwgMTMzLCA0LCAyMzUsIDIzLCAxMSwgMTMzLCA0LCAxNTYsIDExLCAxMzMsIAotICAgIDQsIDE5MywgMTEsIDEzMywgNCwgMjMwLCAyNSwgMTEsIDEzMywgNCwgNzYsIDExLCAxMzMsIDQsIDIyNiwgMTA1LCAxMSwgCi0gICAgMTMzLCA0LCAyMjQsIDk2LCAxMSwgMTMzLCA0LCAxNTMsIDExLCAxMzMsIDQsIDIyMiwgOTEsIDExLCAxMzMsIDQsIDIxNywgCi0gICAgMTUyLCAxMSwgMTMzLCA0LCA3MCwgMTEsIDEzMywgNCwgMjE0LCAxMDUsIDExLCAxMzMsIDQsIDIxMiwgOTgsIDExLCAxMzMsIAorICAgIDI1MywgMTY2LCAxMSwgMTMzLCA0LCAyNTEsIDc0LCAxMSwgMTMzLCA0LCAyNDksIDY4LCAxMSwgMTMzLCA0LCA3NiwgMTEsIAorICAgIDEzMywgNCwgMjQ1LCAxNCwgMTEsIDEzMywgNCwgMjQzLCAyMDksIDExLCAxMzMsIDQsIDI0MiwgNjcsIDExLCAxMzMsIDQsIAorICAgIDc0LCAxMSwgMTMzLCA0LCAyMzUsIDE1MCwgMTEsIDEzMywgNCwgMjM1LCAyOSwgMTEsIDEzMywgNCwgMTU2LCAxMSwgMTMzLCAKKyAgICA0LCAxOTQsIDExLCAxMzMsIDQsIDIzMCwgMzAsIDExLCAxMzMsIDQsIDc4LCAxMSwgMTMzLCA0LCAyMjYsIDEwOSwgMTEsIAorICAgIDEzMywgNCwgMjI0LCA5OSwgMTEsIDEzMywgNCwgMTUzLCAxMSwgMTMzLCA0LCAyMjIsIDkzLCAxMSwgMTMzLCA0LCAyMTcsIAorICAgIDE1MywgMTEsIDEzMywgNCwgNjksIDExLCAxMzMsIDQsIDIxNCwgMTA1LCAxMSwgMTMzLCA0LCAyMTIsIDk4LCAxMSwgMTMzLCAKICAgICA0LCAyMTEsIDE3OCwgMTEsIDEzMywgNCwgMjExLCAxMTcsIDExLCAxMzMsIDQsIDIxMCwgMTU5LCAxMSwgMTM5LCA2LCA2MSwgCi0gICAgMTEsIDEzOSwgNiwgMjUzLCAxNTgsIDExLCAxMzksIDYsIDI0OSwgNjAsIDExLCAxMzksIDYsIDc1LCAxMSwgMTM5LCA2LCAKLSAgICAyNDUsIDYsIDExLCAxMzksIDYsIDI0MywgMjAyLCAxMSwgMTM5LCA2LCA3MywgMTEsIDEzOSwgNiwgMjM1LCAxNDQsIDExLCAKLSAgICAxMzksIDYsIDIzNSwgMjMsIDExLCAxMzksIDYsIDE1NiwgMTEsIDEzOSwgNiwgMTkzLCAxMSwgMTM5LCA2LCA3NiwgMTEsIAotICAgIDEzOSwgNiwgMjIyLCA5MSwgMTEsIDEzOSwgNiwgMjE3LCAxNTIsIDExLCAxMzksIDYsIDcwLCAxMSwgMTM5LCA2LCAyMTQsIAorICAgIDExLCAxMzksIDYsIDI1MywgMTY2LCAxMSwgMTM5LCA2LCAyNDksIDY4LCAxMSwgMTM5LCA2LCA3NiwgMTEsIDEzOSwgNiwgCisgICAgMjQ1LCAxNCwgMTEsIDEzOSwgNiwgMjQzLCAyMDksIDExLCAxMzksIDYsIDc0LCAxMSwgMTM5LCA2LCAyMzUsIDE1MCwgMTEsIAorICAgIDEzOSwgNiwgMjM1LCAyOSwgMTEsIDEzOSwgNiwgMTU2LCAxMSwgMTM5LCA2LCAxOTQsIDExLCAxMzksIDYsIDc4LCAxMSwgCisgICAgMTM5LCA2LCAyMjIsIDkzLCAxMSwgMTM5LCA2LCAyMTcsIDE1MywgMTEsIDEzOSwgNiwgNjksIDExLCAxMzksIDYsIDIxNCwgCiAgICAgMTA1LCAxMSwgMTM5LCA2LCAyMTIsIDk4LCAxMSwgMTM5LCA2LCAyMTEsIDE3OCwgMTEsIDEzOSwgNiwgMjExLCAxMTcsIDExLCAKLSAgICAxMzksIDQsIDYxLCAxMSwgMTM5LCA0LCAyNTMsIDE1OCwgMTEsIDEzOSwgNCwgMjUxLCA2NiwgMTEsIDEzOSwgNCwgMjQ5LCAKLSAgICA2MCwgMTEsIDEzOSwgNCwgNzUsIDExLCAxMzksIDQsIDI0NSwgNiwgMTEsIDEzOSwgNCwgMjQzLCAyMDIsIDExLCAxMzksIDQsIAotICAgIDI0MiwgNjAsIDExLCAxMzksIDQsIDczLCAxMSwgMTM5LCA0LCAyMzUsIDE0NCwgMTEsIDEzOSwgNCwgMjM1LCAyMywgMTEsIAotICAgIDEzOSwgNCwgMTU2LCAxMSwgMTM5LCA0LCAxOTMsIDExLCAxMzksIDQsIDIzMCwgMjUsIDExLCAxMzksIDQsIDc2LCAxMSwgCi0gICAgMTM5LCA0LCAyMjYsIDEwNSwgMTEsIDEzOSwgNCwgMjI0LCA5NiwgMTEsIDEzOSwgNCwgMTUzLCAxMSwgMTM5LCA0LCAyMjIsIAotICAgIDkxLCAxMSwgMTM5LCA0LCAyMTcsIDE1MiwgMTEsIDEzOSwgNCwgNzAsIDExLCAxMzksIDQsIDIxNCwgMTA1LCAxMSwgMTM5LCAKLSAgICA0LCAyMTIsIDk4LCAxMSwgMTM5LCA0LCAyMTEsIDE3OCwgMTEsIDEzOSwgNCwgMjExLCAxMTcsIDExLCAxMzksIDQsIDIxMCwgCi0gICAgMTU5LCAxMSwgMjMsIDEzMywgNiwgNjEsIDExLCAyMywgMTMzLCA2LCAyNTMsIDE1OCwgMTEsIDIzLCAxMzMsIDYsIDI1MSwgCi0gICAgNjYsIDExLCAyMywgMTMzLCA2LCAyNDksIDYwLCAxMSwgMjMsIDEzMywgNiwgNzUsIDExLCAyMywgMTMzLCA2LCAyNDUsIDYsIAotICAgIDExLCAyMywgMTMzLCA2LCAyNDMsIDIwMiwgMTEsIDIzLCAxMzMsIDYsIDI0MiwgNjAsIDExLCAyMywgMTMzLCA2LCA3MywgCi0gICAgMTEsIDIzLCAxMzMsIDYsIDIzNSwgMTQ0LCAxMSwgMjMsIDEzMywgNiwgMjM1LCAyMywgMTEsIDIzLCAxMzMsIDYsIDE1NiwgCi0gICAgMTEsIDIzLCAxMzMsIDYsIDE5MywgMTEsIDIzLCAxMzMsIDYsIDIzMCwgMjUsIDExLCAyMywgMTMzLCA2LCA3NiwgMTEsIDIzLCAKLSAgICAxMzMsIDYsIDIyNiwgMTA1LCAxMSwgMjMsIDEzMywgNiwgMjI0LCA5NiwgMTEsIDIzLCAxMzMsIDYsIDE1MywgMTEsIDIzLCAKLSAgICAxMzMsIDYsIDIyMiwgOTEsIDExLCAyMywgMTMzLCA2LCAyMTcsIDE1MiwgMTEsIDIzLCAxMzMsIDYsIDcwLCAxMSwgMjMsIAotICAgIDEzMywgNiwgMjE0LCAxMDUsIDExLCAyMywgMTMzLCA2LCAyMTIsIDk4LCAxMSwgMjMsIDEzMywgNiwgMjExLCAxNzgsIDExLCAKLSAgICAyMywgMTMzLCA2LCAyMTEsIDExNywgMTEsIDIzLCAxMzMsIDYsIDIxMCwgMTU5LCAxMSwgMjMsIDEzMywgNCwgNjEsIDExLCAKLSAgICAyMywgMTMzLCA0LCAyNTMsIDE1OCwgMTEsIDIzLCAxMzMsIDQsIDI1MSwgNjYsIDExLCAyMywgMTMzLCA0LCAyNDksIDYwLCAKLSAgICAxMSwgMjMsIDEzMywgNCwgNzUsIDExLCAyMywgMTMzLCA0LCAyNDUsIDYsIDExLCAyMywgMTMzLCA0LCAyNDMsIDIwMiwgMTEsIAotICAgIDIzLCAxMzMsIDQsIDI0MiwgNjAsIDExLCAyMywgMTMzLCA0LCA3MywgMTEsIDIzLCAxMzMsIDQsIDIzNSwgMTQ0LCAxMSwgCi0gICAgMjMsIDEzMywgNCwgMjM1LCAyMywgMTEsIDIzLCAxMzMsIDQsIDE1NiwgMTEsIDIzLCAxMzMsIDQsIDE5MywgMTEsIDIzLCAKLSAgICAxMzMsIDQsIDIzMCwgMjUsIDExLCAyMywgMTMzLCA0LCA3NiwgMTEsIDIzLCAxMzMsIDQsIDIyNiwgMTA1LCAxMSwgMjMsIAotICAgIDEzMywgNCwgMjI0LCA5NiwgMTEsIDIzLCAxMzMsIDQsIDE1MywgMTEsIDIzLCAxMzMsIDQsIDIyMiwgOTEsIDExLCAyMywgCi0gICAgMTMzLCA0LCAyMTcsIDE1MiwgMTEsIDIzLCAxMzMsIDQsIDcwLCAxMSwgMjMsIDEzMywgNCwgMjE0LCAxMDUsIDExLCAyMywgCi0gICAgMTMzLCA0LCAyMTIsIDk4LCAxMSwgMjMsIDEzMywgNCwgMjExLCAxNzgsIDExLCAyMywgMTMzLCA0LCAyMTEsIDExNywgMTEsIAotICAgIDIzLCAxMzMsIDQsIDIxMCwgMTU5LCAxMSwgMzUsIDYsIDYxLCAxMSwgMzUsIDYsIDI1MywgMTU4LCAxMSwgMzUsIDYsIDI1MSwgCi0gICAgNjYsIDExLCAzNSwgNiwgMjQ5LCA2MCwgMTEsIDM1LCA2LCA3NSwgMTEsIDM1LCA2LCAyNDUsIDYsIDExLCAzNSwgNiwgMjQzLCAKLSAgICAyMDIsIDExLCAzNSwgNiwgMjQyLCA2MCwgMTEsIDM1LCA2LCA3MywgMTEsIDM1LCA2LCAyMzUsIDE0NCwgMTEsIDM1LCA2LCAKLSAgICAyMzUsIDIzLCAxMSwgMzUsIDYsIDE1NiwgMTEsIDM1LCA2LCAxOTMsIDExLCAzNSwgNiwgMjMwLCAyNSwgMTEsIDM1LCA2LCAKLSAgICA3NiwgMTEsIDM1LCA2LCAyMjYsIDEwNSwgMTEsIDM1LCA2LCAyMjQsIDk2LCAxMSwgMzUsIDYsIDE1MywgMTEsIDM1LCA2LCAKLSAgICAyMjIsIDkxLCAxMSwgMzUsIDYsIDIxNywgMTUyLCAxMSwgMzUsIDYsIDcwLCAxMSwgMzUsIDYsIDIxNCwgMTA1LCAxMSwgMzUsIAotICAgIDYsIDIxMiwgOTgsIDExLCAzNSwgNiwgMjExLCAxNzgsIDExLCAzNSwgNiwgMjExLCAxMTcsIDExLCAzNSwgNiwgMjEwLCAKLSAgICAxNTksIDExLCAzNSwgNCwgNjEsIDExLCAzNSwgNCwgMjUzLCAxNTgsIDExLCAzNSwgNCwgMjUxLCA2NiwgMTEsIDM1LCA0LCAKLSAgICAyNDksIDYwLCAxMSwgMzUsIDQsIDc1LCAxMSwgMzUsIDQsIDI0NSwgNiwgMTEsIDM1LCA0LCAyNDMsIDIwMiwgMTEsIDM1LCAKLSAgICA0LCAyNDIsIDYwLCAxMSwgMzUsIDQsIDczLCAxMSwgMzUsIDQsIDIzNSwgMTQ0LCAxMSwgMzUsIDQsIDIzNSwgMjMsIDExLCAKLSAgICAzNSwgNCwgMTU2LCAxMSwgMzUsIDQsIDE5MywgMTEsIDM1LCA0LCAyMzAsIDI1LCAxMSwgMzUsIDQsIDc2LCAxMSwgMzUsIDQsIAotICAgIDIyNiwgMTA1LCAxMSwgMzUsIDQsIDIyNCwgOTYsIDExLCAzNSwgNCwgMTUzLCAxMSwgMzUsIDQsIDIyMiwgOTEsIDExLCAzNSwgCi0gICAgNCwgMjE3LCAxNTIsIDExLCAzNSwgNCwgNzAsIDExLCAzNSwgNCwgMjE0LCAxMDUsIDExLCAzNSwgNCwgMjEyLCA5OCwgMTEsIAotICAgIDM1LCA0LCAyMTEsIDE3OCwgMTEsIDM1LCA0LCAyMTEsIDExNywgMTEsIDM1LCA0LCAyMTAsIDE1OSwgMTEsIDM1LCAyMywgNiwgCi0gICAgNjEsIDExLCAzNSwgMjMsIDYsIDI1MywgMTU4LCAxMSwgMzUsIDIzLCA2LCAyNTEsIDY2LCAxMSwgMzUsIDIzLCA2LCAyNDksIAotICAgIDYwLCAxMSwgMzUsIDIzLCA2LCA3NSwgMTEsIDM1LCAyMywgNiwgMjQ1LCA2LCAxMSwgMzUsIDIzLCA2LCAyNDMsIDIwMiwgCi0gICAgMTEsIDM1LCAyMywgNiwgMjQyLCA2MCwgMTEsIDM1LCAyMywgNiwgNzMsIDExLCAzNSwgMjMsIDYsIDIzNSwgMTQ0LCAxMSwgCi0gICAgMzUsIDIzLCA2LCAyMzUsIDIzLCAxMSwgMzUsIDIzLCA2LCAxNTYsIDExLCAzNSwgMjMsIDYsIDE5MywgMTEsIDM1LCAyMywgCi0gICAgNiwgMjMwLCAyNSwgMTEsIDM1LCAyMywgNiwgNzYsIDExLCAzNSwgMjMsIDYsIDIyNiwgMTA1LCAxMSwgMzUsIDIzLCA2LCAKLSAgICAyMjQsIDk2LCAxMSwgMzUsIDIzLCA2LCAxNTMsIDExLCAzNSwgMjMsIDYsIDIyMiwgOTEsIDExLCAzNSwgMjMsIDYsIDIxNywgCi0gICAgMTUyLCAxMSwgMzUsIDIzLCA2LCA3MCwgMTEsIDM1LCAyMywgNiwgMjE0LCAxMDUsIDExLCAzNSwgMjMsIDYsIDIxMiwgOTgsIAotICAgIDExLCAzNSwgMjMsIDYsIDIxMSwgMTc4LCAxMSwgMzUsIDIzLCA2LCAyMTEsIDExNywgMTEsIDM1LCAyMywgNiwgMjEwLCAKLSAgICAxNTksIDExLCAzNSwgMjMsIDQsIDYxLCAxMSwgMzUsIDIzLCA0LCAyNTMsIDE1OCwgMTEsIDM1LCAyMywgNCwgMjUxLCA2NiwgCi0gICAgMTEsIDM1LCAyMywgNCwgMjQ5LCA2MCwgMTEsIDM1LCAyMywgNCwgNzUsIDExLCAzNSwgMjMsIDQsIDI0NSwgNiwgMTEsIDM1LCAKLSAgICAyMywgNCwgMjQzLCAyMDIsIDExLCAzNSwgMjMsIDQsIDI0MiwgNjAsIDExLCAzNSwgMjMsIDQsIDczLCAxMSwgMzUsIDIzLCAKLSAgICA0LCAyMzUsIDE0NCwgMTEsIDM1LCAyMywgNCwgMjM1LCAyMywgMTEsIDM1LCAyMywgNCwgMTU2LCAxMSwgMzUsIDIzLCA0LCAKLSAgICAxOTMsIDExLCAzNSwgMjMsIDQsIDIzMCwgMjUsIDExLCAzNSwgMjMsIDQsIDc2LCAxMSwgMzUsIDIzLCA0LCAyMjYsIDEwNSwgCi0gICAgMTEsIDM1LCAyMywgNCwgMjI0LCA5NiwgMTEsIDM1LCAyMywgNCwgMTUzLCAxMSwgMzUsIDIzLCA0LCAyMjIsIDkxLCAxMSwgCi0gICAgMzUsIDIzLCA0LCAyMTcsIDE1MiwgMTEsIDM1LCAyMywgNCwgNzAsIDExLCAzNSwgMjMsIDQsIDIxNCwgMTA1LCAxMSwgMzUsIAotICAgIDIzLCA0LCAyMTIsIDk4LCAxMSwgMzUsIDIzLCA0LCAyMTEsIDE3OCwgMTEsIDM1LCAyMywgNCwgMjExLCAxMTcsIDExLCAzNSwgCi0gICAgMjMsIDQsIDIxMCwgMTU5LCAxMSwgMzUsIDMyLCA2LCA2MSwgMTEsIDM1LCAzMiwgNiwgMjUzLCAxNTgsIDExLCAzNSwgMzIsIAotICAgIDYsIDI1MSwgNjYsIDExLCAzNSwgMzIsIDYsIDI0OSwgNjAsIDExLCAzNSwgMzIsIDYsIDc1LCAxMSwgMzUsIDMyLCA2LCAKLSAgICAyNDUsIDYsIDExLCAzNSwgMzIsIDYsIDI0MywgMjAyLCAxMSwgMzUsIDMyLCA2LCAyNDIsIDYwLCAxMSwgMzUsIDMyLCA2LCAKLSAgICA3MywgMTEsIDM1LCAzMiwgNiwgMjM1LCAxNDQsIDExLCAzNSwgMzIsIDYsIDIzNSwgMjMsIDExLCAzNSwgMzIsIDYsIDE1NiwgCi0gICAgMTEsIDM1LCAzMiwgNiwgMTkzLCAxMSwgMzUsIDMyLCA2LCAyMzAsIDI1LCAxMSwgMzUsIDMyLCA2LCA3NiwgMTEsIDM1LCAKLSAgICAzMiwgNiwgMjI2LCAxMDUsIDExLCAzNSwgMzIsIDYsIDIyNCwgOTYsIDExLCAzNSwgMzIsIDYsIDE1MywgMTEsIDM1LCAzMiwgCi0gICAgNiwgMjIyLCA5MSwgMTEsIDM1LCAzMiwgNiwgMjE3LCAxNTIsIDExLCAzNSwgMzIsIDYsIDcwLCAxMSwgMzUsIDMyLCA2LCAKLSAgICAyMTQsIDEwNSwgMTEsIDM1LCAzMiwgNiwgMjEyLCA5OCwgMTEsIDM1LCAzMiwgNiwgMjExLCAxNzgsIDExLCAzNSwgMzIsIDYsIAotICAgIDIxMSwgMTE3LCAxMSwgMzUsIDMyLCA2LCAyMTAsIDE1OSwgMTEsIDM1LCAzMiwgNCwgNjEsIDExLCAzNSwgMzIsIDQsIDI1MywgCi0gICAgMTU4LCAxMSwgMzUsIDMyLCA0LCAyNTEsIDY2LCAxMSwgMzUsIDMyLCA0LCAyNDksIDYwLCAxMSwgMzUsIDMyLCA0LCA3NSwgCi0gICAgMTEsIDM1LCAzMiwgNCwgMjQ1LCA2LCAxMSwgMzUsIDMyLCA0LCAyNDMsIDIwMiwgMTEsIDM1LCAzMiwgNCwgMjQyLCA2MCwgCi0gICAgMTEsIDM1LCAzMiwgNCwgNzMsIDExLCAzNSwgMzIsIDQsIDIzNSwgMTQ0LCAxMSwgMzUsIDMyLCA0LCAyMzUsIDIzLCAxMSwgCi0gICAgMzUsIDMyLCA0LCAxNTYsIDExLCAzNSwgMzIsIDQsIDE5MywgMTEsIDM1LCAzMiwgNCwgMjMwLCAyNSwgMTEsIDM1LCAzMiwgCi0gICAgNCwgNzYsIDExLCAzNSwgMzIsIDQsIDIyNiwgMTA1LCAxMSwgMzUsIDMyLCA0LCAyMjQsIDk2LCAxMSwgMzUsIDMyLCA0LCAKLSAgICAxNTMsIDExLCAzNSwgMzIsIDQsIDIyMiwgOTEsIDExLCAzNSwgMzIsIDQsIDIxNywgMTUyLCAxMSwgMzUsIDMyLCA0LCA3MCwgCi0gICAgMTEsIDM1LCAzMiwgNCwgMjE0LCAxMDUsIDExLCAzNSwgMzIsIDQsIDIxMiwgOTgsIDExLCAzNSwgMzIsIDQsIDIxMSwgMTc4LCAKLSAgICAxMSwgMzUsIDMyLCA0LCAyMTEsIDExNywgMTEsIDM1LCAzMiwgNCwgMjEwLCAxNTksIDExLCAzNSwgMjMsIDMyLCA2LCA2MSwgCi0gICAgMTEsIDM1LCAyMywgMzIsIDYsIDI1MywgMTU4LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjUxLCA2NiwgMTEsIDM1LCAyMywgMzIsIAotICAgIDYsIDI0OSwgNjAsIDExLCAzNSwgMjMsIDMyLCA2LCA3NSwgMTEsIDM1LCAyMywgMzIsIDYsIDI0NSwgNiwgMTEsIDM1LCAyMywgCi0gICAgMzIsIDYsIDI0MywgMjAyLCAxMSwgMzUsIDIzLCAzMiwgNiwgMjQyLCA2MCwgMTEsIDM1LCAyMywgMzIsIDYsIDczLCAxMSwgCi0gICAgMzUsIDIzLCAzMiwgNiwgMjM1LCAxNDQsIDExLCAzNSwgMjMsIDMyLCA2LCAyMzUsIDIzLCAxMSwgMzUsIDIzLCAzMiwgNiwgCi0gICAgMTU2LCAxMSwgMzUsIDIzLCAzMiwgNiwgMTkzLCAxMSwgMzUsIDIzLCAzMiwgNiwgMjMwLCAyNSwgMTEsIDM1LCAyMywgMzIsIAotICAgIDYsIDc2LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjI2LCAxMDUsIDExLCAzNSwgMjMsIDMyLCA2LCAyMjQsIDk2LCAxMSwgMzUsIAotICAgIDIzLCAzMiwgNiwgMTUzLCAxMSwgMzUsIDIzLCAzMiwgNiwgMjIyLCA5MSwgMTEsIDM1LCAyMywgMzIsIDYsIDIxNywgMTUyLCAKLSAgICAxMSwgMzUsIDIzLCAzMiwgNiwgNzAsIDExLCAzNSwgMjMsIDMyLCA2LCAyMTQsIDEwNSwgMTEsIDM1LCAyMywgMzIsIDYsIAotICAgIDIxMiwgOTgsIDExLCAzNSwgMjMsIDMyLCA2LCAyMTEsIDE3OCwgMTEsIDM1LCAyMywgMzIsIDYsIDIxMSwgMTE3LCAxMSwgCi0gICAgMzUsIDIzLCAzMiwgNiwgMjEwLCAxNTksIDExLCAzNSwgMjMsIDMyLCA0LCA2MSwgMTEsIDM1LCAyMywgMzIsIDQsIDI1MywgCi0gICAgMTU4LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjUxLCA2NiwgMTEsIDM1LCAyMywgMzIsIDQsIDI0OSwgNjAsIDExLCAzNSwgMjMsIAotICAgIDMyLCA0LCA3NSwgMTEsIDM1LCAyMywgMzIsIDQsIDI0NSwgNiwgMTEsIDM1LCAyMywgMzIsIDQsIDI0MywgMjAyLCAxMSwgCi0gICAgMzUsIDIzLCAzMiwgNCwgMjQyLCA2MCwgMTEsIDM1LCAyMywgMzIsIDQsIDczLCAxMSwgMzUsIDIzLCAzMiwgNCwgMjM1LCAKLSAgICAxNDQsIDExLCAzNSwgMjMsIDMyLCA0LCAyMzUsIDIzLCAxMSwgMzUsIDIzLCAzMiwgNCwgMTU2LCAxMSwgMzUsIDIzLCAzMiwgCi0gICAgNCwgMTkzLCAxMSwgMzUsIDIzLCAzMiwgNCwgMjMwLCAyNSwgMTEsIDM1LCAyMywgMzIsIDQsIDc2LCAxMSwgMzUsIDIzLCAKLSAgICAzMiwgNCwgMjI2LCAxMDUsIDExLCAzNSwgMjMsIDMyLCA0LCAyMjQsIDk2LCAxMSwgMzUsIDIzLCAzMiwgNCwgMTUzLCAxMSwgCi0gICAgMzUsIDIzLCAzMiwgNCwgMjIyLCA5MSwgMTEsIDM1LCAyMywgMzIsIDQsIDIxNywgMTUyLCAxMSwgMzUsIDIzLCAzMiwgNCwgCi0gICAgNzAsIDExLCAzNSwgMjMsIDMyLCA0LCAyMTQsIDEwNSwgMTEsIDM1LCAyMywgMzIsIDQsIDIxMiwgOTgsIDExLCAzNSwgMjMsIAotICAgIDMyLCA0LCAyMTEsIDE3OCwgMTEsIDM1LCAyMywgMzIsIDQsIDIxMSwgMTE3LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjEwLCAKLSAgICAxNTksIDExLCAyMzAsIDEzOCwgNiwgNjEsIDExLCAyMzAsIDEzOCwgNiwgMjUzLCAxNTgsIDExLCAyMzAsIDEzOCwgNiwgCi0gICAgMjUxLCA2NiwgMTEsIDIzMCwgMTM4LCA2LCAyNDksIDYwLCAxMSwgMjMwLCAxMzgsIDYsIDc1LCAxMSwgMjMwLCAxMzgsIDYsIAotICAgIDI0NSwgNiwgMTEsIDIzMCwgMTM4LCA2LCAyNDMsIDIwMiwgMTEsIDIzMCwgMTM4LCA2LCAyNDIsIDYwLCAxMSwgMjMwLCAKLSAgICAxMzgsIDYsIDczLCAxMSwgMjMwLCAxMzgsIDYsIDIzNSwgMTQ0LCAxMSwgMjMwLCAxMzgsIDYsIDIzNSwgMjMsIDExLCAyMzAsIAotICAgIDEzOCwgNiwgMTU2LCAxMSwgMjMwLCAxMzgsIDYsIDE5MywgMTEsIDIzMCwgMTM4LCA2LCAyMzAsIDI1LCAxMSwgMjMwLCAKLSAgICAxMzgsIDYsIDc2LCAxMSwgMjMwLCAxMzgsIDYsIDIyNiwgMTA1LCAxMSwgMjMwLCAxMzgsIDYsIDIyNCwgOTYsIDExLCAyMzAsIAotICAgIDEzOCwgNiwgMTUzLCAxMSwgMjMwLCAxMzgsIDYsIDIyMiwgOTEsIDExLCAyMzAsIDEzOCwgNiwgMjE3LCAxNTIsIDExLCAKLSAgICAyMzAsIDEzOCwgNiwgNzAsIDExLCAyMzAsIDEzOCwgNiwgMjE0LCAxMDUsIDExLCAyMzAsIDEzOCwgNiwgMjEyLCA5OCwgMTEsIAotICAgIDIzMCwgMTM4LCA2LCAyMTEsIDE3OCwgMTEsIDIzMCwgMTM4LCA2LCAyMTEsIDExNywgMTEsIDIzMCwgMTM4LCA2LCAyMTAsIAotICAgIDE1OSwgMTEsIDIzMCwgMTM4LCA0LCA2MSwgMTEsIDIzMCwgMTM4LCA0LCAyNTMsIDE1OCwgMTEsIDIzMCwgMTM4LCA0LCAKLSAgICAyNTEsIDY2LCAxMSwgMjMwLCAxMzgsIDQsIDI0OSwgNjAsIDExLCAyMzAsIDEzOCwgNCwgNzUsIDExLCAyMzAsIDEzOCwgNCwgCi0gICAgMjQ1LCA2LCAxMSwgMjMwLCAxMzgsIDQsIDI0MywgMjAyLCAxMSwgMjMwLCAxMzgsIDQsIDI0MiwgNjAsIDExLCAyMzAsIAotICAgIDEzOCwgNCwgNzMsIDExLCAyMzAsIDEzOCwgNCwgMjM1LCAxNDQsIDExLCAyMzAsIDEzOCwgNCwgMjM1LCAyMywgMTEsIDIzMCwgCi0gICAgMTM4LCA0LCAxNTYsIDExLCAyMzAsIDEzOCwgNCwgMTkzLCAxMSwgMjMwLCAxMzgsIDQsIDIzMCwgMjUsIDExLCAyMzAsIAotICAgIDEzOCwgNCwgNzYsIDExLCAyMzAsIDEzOCwgNCwgMjI2LCAxMDUsIDExLCAyMzAsIDEzOCwgNCwgMjI0LCA5NiwgMTEsIDIzMCwgCi0gICAgMTM4LCA0LCAxNTMsIDExLCAyMzAsIDEzOCwgNCwgMjIyLCA5MSwgMTEsIDIzMCwgMTM4LCA0LCAyMTcsIDE1MiwgMTEsIAotICAgIDIzMCwgMTM4LCA0LCA3MCwgMTEsIDIzMCwgMTM4LCA0LCAyMTQsIDEwNSwgMTEsIDIzMCwgMTM4LCA0LCAyMTIsIDk4LCAxMSwgCi0gICAgMjMwLCAxMzgsIDQsIDIxMSwgMTc4LCAxMSwgMjMwLCAxMzgsIDQsIDIxMSwgMTE3LCAxMSwgMjMwLCAxMzgsIDQsIDIxMCwgCi0gICAgMTU5LCAxMSwgMzIsIDQsIDI0NywgMTE5LCA3MywgMTEsIDMyLCA0LCAyNDcsIDExOSwgMjM1LCAxNDQsIDExLCAyMywgNiwgCi0gICAgMjU0LCAxNDMsIDExLCAyMywgNiwgMjUyLCAyNiwgMTEsIDIzLCA2LCAyNDMsIDEwNywgMTEsIDIzLCA2LCAyNDgsIDU0LCAKLSAgICAxMSwgMjMsIDYsIDI0NSwgMTAwLCAxMSwgMjMsIDYsIDIxMCwgODUsIDExLCAyMywgNiwgMjQ1LCA2MywgMTEsIDIzLCA2LCAKLSAgICAyMTYsIDE3OSwgMTEsIDIzLCA2LCAyMzUsIDE4NSwgMTEsIDIzLCA2LCAyMzQsIDIyMiwgMTEsIDIzLCA2LCAyMzMsIDk4LCAKLSAgICAxMSwgMjMsIDYsIDIzMCwgMTAyLCAxMSwgMjMsIDYsIDIyNywgMjM3LCAxMSwgMjMsIDYsIDIxMSwgMTU3LCAxMSwgMjMsIDYsIAotICAgIDIyNiwgMTk5LCAxMSwgMjMsIDYsIDIyNSwgMTA4LCAxMSwgMjMsIDYsIDIyMywgMzcsIDExLCAyMywgNiwgMjE2LCAxODAsIAotICAgIDg3LCAxMSwgMjMsIDYsIDIxOSwgMTc3LCAxMSwgMjMsIDYsIDIxNywgNDEsIDExLCAyMywgNiwgMjE0LCAxNTcsIDExLCAyMywgCi0gICAgNiwgMjI1LCAxMzMsIDExLCAyMywgNiwgMjUwLCAxMTAsIDExLCAyMywgNiwgMjI0LCAxNjEsIDExLCAyMywgNiwgMjI2LCAKLSAgICAyMDEsIDExLCAyMywgMjI5LCAyMjEsIDExLCAyMywgNCwgMjU0LCAxNDMsIDExLCAyMywgNCwgMjUyLCAyNiwgMTEsIDIzLCAKLSAgICA0LCAyNDMsIDEwNywgMTEsIDIzLCA0LCAyNDgsIDU0LCAxMSwgMjMsIDQsIDI0NSwgMTAwLCAxMSwgMjMsIDQsIDIxMCwgODUsIAotICAgIDExLCAyMywgNCwgMjQ1LCA2MywgMTEsIDIzLCA0LCAyMTYsIDE3OSwgMTEsIDIzLCA0LCAyMzUsIDE4NSwgMTEsIDIzLCA0LCAKLSAgICAyMzQsIDIyMiwgMTEsIDIzLCA0LCAyMzMsIDk4LCAxMSwgMjMsIDQsIDIzMCwgMTAyLCAxMSwgMjMsIDQsIDIyNywgMjM3LCAKLSAgICAxMSwgMjMsIDQsIDIxMSwgMTU3LCAxMSwgMjMsIDQsIDIyNiwgMTk5LCAxMSwgMjMsIDQsIDIyNSwgMTA4LCAxMSwgMjMsIDQsIAotICAgIDIyMywgMzcsIDExLCAyMywgNCwgNDAsIDIxOSwgMTc3LCAxMSwgMjMsIDQsIDIxOSwgMTc3LCAxMSwgMjMsIDQsIDIxNywgCi0gICAgNDEsIDExLCAyMywgNCwgMjE0LCAxNTcsIDExLCAyMywgNCwgMjI1LCAxMzMsIDExLCAyMywgNCwgMjUwLCAxMTAsIDExLCAKLSAgICAyMywgNCwgMjI0LCAxNjEsIDExLCAyMywgNCwgMjI2LCAyMDEsIDExLCAyMywgMjI1LCAyNTMsIDI0NywgMjMzLCAxMSwgMjMsIAotICAgIDI0NSwgMTAxLCA4NywgMTEsIDIzLCAyMTYsIDE4MCwgODcsIDExLCAyMywgMjM0LCAyMjMsIDg3LCAxMSwgMjMsIDIyNSwgCi0gICAgMTM0LCA4NywgMTEsIDIzLCAyMjMsIDM4LCA4NywgMTEsIDIzLCAyMjUsIDEwOSwgODcsIDExLCAzMiwgNiwgMjU0LCAxNDMsIAotICAgIDExLCAzMiwgNiwgMjUyLCAyNiwgMTEsIDMyLCA2LCAyNDMsIDEwNywgMTEsIDMyLCA2LCAyNDgsIDU0LCAxMSwgMzIsIDYsIAotICAgIDI0NSwgMTAwLCAxMSwgMzIsIDYsIDIxMCwgODUsIDExLCAzMiwgNiwgMjQ1LCA2MywgMTEsIDMyLCA2LCAyMTYsIDE3OSwgCi0gICAgMTEsIDMyLCA2LCAyMzUsIDE4NSwgMTEsIDMyLCA2LCAyMzQsIDIyMiwgMTEsIDMyLCA2LCAyMzMsIDk4LCAxMSwgMzIsIDYsIAotICAgIDIzMCwgMTAyLCAxMSwgMzIsIDYsIDIyNywgMjM3LCAxMSwgMzIsIDYsIDIxMSwgMTU3LCAxMSwgMzIsIDYsIDIyNiwgMTk5LCAKLSAgICAxMSwgMzIsIDYsIDIyNSwgMTA4LCAxMSwgMzIsIDYsIDIyMywgMzcsIDExLCAzMiwgNiwgMjE2LCAxODAsIDg3LCAxMSwgMzIsIAotICAgIDYsIDIxOSwgMTc3LCAxMSwgMzIsIDYsIDIxNywgNDEsIDExLCAzMiwgNiwgMjE0LCAxNTcsIDExLCAzMiwgNiwgMjI1LCAKLSAgICAxMzMsIDExLCAzMiwgNiwgMjUwLCAxMTAsIDExLCAzMiwgNiwgMjI0LCAxNjEsIDExLCAzMiwgNiwgMjI2LCAyMDEsIDExLCAKLSAgICAzMiwgMjI5LCAyMjEsIDExLCAzMiwgNCwgMjU0LCAxNDMsIDExLCAzMiwgNCwgMjUyLCAyNiwgMTEsIDMyLCA0LCAyNDMsIAotICAgIDEwNywgMTEsIDMyLCA0LCAyNDgsIDU0LCAxMSwgMzIsIDQsIDI0NSwgMTAwLCAxMSwgMzIsIDQsIDIxMCwgODUsIDExLCAzMiwgCi0gICAgNCwgMjQ1LCA2MywgMTEsIDMyLCA0LCAyMTYsIDE3OSwgMTEsIDMyLCA0LCAyMzUsIDE4NSwgMTEsIDMyLCA0LCAyMzQsIAotICAgIDIyMiwgMTEsIDMyLCA0LCAyMzMsIDk4LCAxMSwgMzIsIDQsIDIzMCwgMTAyLCAxMSwgMzIsIDQsIDIyNywgMjM3LCAxMSwgCi0gICAgMzIsIDQsIDIxMSwgMTU3LCAxMSwgMzIsIDQsIDIyNiwgMTk5LCAxMSwgMzIsIDQsIDIyNSwgMTA4LCAxMSwgMzIsIDQsIAotICAgIDIyMywgMzcsIDExLCAzMiwgNCwgNDAsIDIxOSwgMTc3LCAxMSwgMzIsIDQsIDIxOSwgMTc3LCAxMSwgMzIsIDQsIDIxNywgCi0gICAgNDEsIDExLCAzMiwgNCwgMjE0LCAxNTcsIDExLCAzMiwgNCwgMjI1LCAxMzMsIDExLCAzMiwgNCwgMjUwLCAxMTAsIDExLCAKLSAgICAzMiwgNCwgMjI0LCAxNjEsIDExLCAzMiwgNCwgMjI2LCAyMDEsIDExLCAzMiwgMjI1LCAyNTMsIDI0NywgMjMzLCAxMSwgMzIsIAotICAgIDI0NSwgMTAxLCA4NywgMTEsIDMyLCAyMTYsIDE4MCwgODcsIDExLCAzMiwgMjM0LCAyMjMsIDg3LCAxMSwgMzIsIDIyNSwgCi0gICAgMTM0LCA4NywgMTEsIDMyLCAyMjMsIDM4LCA4NywgMTEsIDMyLCAyMjUsIDEwOSwgODcsIDExLCAyMywgMzIsIDYsIDI1NCwgCi0gICAgMTQzLCAxMSwgMjMsIDMyLCA2LCAyNTIsIDI2LCAxMSwgMjMsIDMyLCA2LCAyNDMsIDEwNywgMTEsIDIzLCAzMiwgNiwgMjQ4LCAKLSAgICA1NCwgMTEsIDIzLCAzMiwgNiwgMjQ1LCAxMDAsIDExLCAyMywgMzIsIDYsIDIxMCwgODUsIDExLCAyMywgMzIsIDYsIDI0NSwgCi0gICAgNjMsIDExLCAyMywgMzIsIDYsIDIxNiwgMTc5LCAxMSwgMjMsIDMyLCA2LCAyMzUsIDE4NSwgMTEsIDIzLCAzMiwgNiwgMjM0LCAKLSAgICAyMjIsIDExLCAyMywgMzIsIDYsIDIzMywgOTgsIDExLCAyMywgMzIsIDYsIDIzMCwgMTAyLCAxMSwgMjMsIDMyLCA2LCAyMjcsIAotICAgIDIzNywgMTEsIDIzLCAzMiwgNiwgMjExLCAxNTcsIDExLCAyMywgMzIsIDYsIDIyNiwgMTk5LCAxMSwgMjMsIDMyLCA2LCAKLSAgICAyMjUsIDEwOCwgMTEsIDIzLCAzMiwgNiwgMjIzLCAzNywgMTEsIDIzLCAzMiwgNiwgMjE2LCAxODAsIDg3LCAxMSwgMjMsIAotICAgIDMyLCA2LCAyMTksIDE3NywgMTEsIDIzLCAzMiwgNiwgMjE3LCA0MSwgMTEsIDIzLCAzMiwgNiwgMjE0LCAxNTcsIDExLCAyMywgCi0gICAgMzIsIDYsIDIyNSwgMTMzLCAxMSwgMjMsIDMyLCA2LCAyNTAsIDExMCwgMTEsIDIzLCAzMiwgNiwgMjI0LCAxNjEsIDExLCAKLSAgICAyMywgMzIsIDYsIDIyNiwgMjAxLCAxMSwgMjMsIDMyLCAyMjksIDIyMSwgMTEsIDIzLCAzMiwgNCwgMjU0LCAxNDMsIDExLCAKLSAgICAyMywgMzIsIDQsIDI1MiwgMjYsIDExLCAyMywgMzIsIDQsIDI0MywgMTA3LCAxMSwgMjMsIDMyLCA0LCAyNDgsIDU0LCAxMSwgCi0gICAgMjMsIDMyLCA0LCAyNDUsIDEwMCwgMTEsIDIzLCAzMiwgNCwgMjEwLCA4NSwgMTEsIDIzLCAzMiwgNCwgMjQ1LCA2MywgMTEsIAotICAgIDIzLCAzMiwgNCwgMjE2LCAxNzksIDExLCAyMywgMzIsIDQsIDIzNSwgMTg1LCAxMSwgMjMsIDMyLCA0LCAyMzQsIDIyMiwgCi0gICAgMTEsIDIzLCAzMiwgNCwgMjMzLCA5OCwgMTEsIDIzLCAzMiwgNCwgMjMwLCAxMDIsIDExLCAyMywgMzIsIDQsIDIyNywgMjM3LCAKLSAgICAxMSwgMjMsIDMyLCA0LCAyMTEsIDE1NywgMTEsIDIzLCAzMiwgNCwgMjI2LCAxOTksIDExLCAyMywgMzIsIDQsIDIyNSwgCi0gICAgMTA4LCAxMSwgMjMsIDMyLCA0LCAyMjMsIDM3LCAxMSwgMjMsIDMyLCA0LCA0MCwgMjE5LCAxNzcsIDExLCAyMywgMzIsIDQsIAotICAgIDIxOSwgMTc3LCAxMSwgMjMsIDMyLCA0LCAyMTcsIDQxLCAxMSwgMjMsIDMyLCA0LCAyMTQsIDE1NywgMTEsIDIzLCAzMiwgNCwgCi0gICAgMjI1LCAxMzMsIDExLCAyMywgMzIsIDQsIDI1MCwgMTEwLCAxMSwgMjMsIDMyLCA0LCAyMjQsIDE2MSwgMTEsIDIzLCAzMiwgCi0gICAgNCwgMjI2LCAyMDEsIDExLCAyMywgMzIsIDIyNSwgMjUzLCAyNDcsIDIzMywgMTEsIDIzLCAzMiwgMjQ1LCAxMDEsIDg3LCAKLSAgICAxMSwgMjMsIDMyLCAyMTYsIDE4MCwgODcsIDExLCAyMywgMzIsIDIzNCwgMjIzLCA4NywgMTEsIDIzLCAzMiwgMjI1LCAxMzQsIAotICAgIDg3LCAxMSwgMjMsIDMyLCAyMjMsIDM4LCA4NywgMTEsIDIzLCAzMiwgMjI1LCAxMDksIDg3LCAxMSwgMzUsIDIzLCA2LCAKLSAgICAyNTQsIDE0MywgMTEsIDM1LCAyMywgNiwgMjUyLCAyNiwgMTEsIDM1LCAyMywgNiwgMjQzLCAxMDcsIDExLCAzNSwgMjMsIDYsIAotICAgIDI0OCwgNTQsIDExLCAzNSwgMjMsIDYsIDI0NSwgMTAwLCAxMSwgMzUsIDIzLCA2LCAyMTAsIDg1LCAxMSwgMzUsIDIzLCA2LCAKLSAgICAyNDUsIDYzLCAxMSwgMzUsIDIzLCA2LCAyMTYsIDE3OSwgMTEsIDM1LCAyMywgNiwgMjM1LCAxODUsIDExLCAzNSwgMjMsIDYsIAotICAgIDIzNCwgMjIyLCAxMSwgMzUsIDIzLCA2LCAyMzMsIDk4LCAxMSwgMzUsIDIzLCA2LCAyMzAsIDEwMiwgMTEsIDM1LCAyMywgNiwgCi0gICAgMjI3LCAyMzcsIDExLCAzNSwgMjMsIDYsIDIxMSwgMTU3LCAxMSwgMzUsIDIzLCA2LCAyMjYsIDE5OSwgMTEsIDM1LCAyMywgCi0gICAgNiwgMjI1LCAxMDgsIDExLCAzNSwgMjMsIDYsIDIyMywgMzcsIDExLCAzNSwgMjMsIDYsIDIxNiwgMTgwLCA4NywgMTEsIDM1LCAKLSAgICAyMywgNiwgMjE5LCAxNzcsIDExLCAzNSwgMjMsIDYsIDIxNywgNDEsIDExLCAzNSwgMjMsIDYsIDIxNCwgMTU3LCAxMSwgMzUsIAotICAgIDIzLCA2LCAyMjUsIDEzMywgMTEsIDM1LCAyMywgNiwgMjUwLCAxMTAsIDExLCAzNSwgMjMsIDYsIDIyNCwgMTYxLCAxMSwgCi0gICAgMzUsIDIzLCA2LCAyMjYsIDIwMSwgMTEsIDM1LCAyMywgMjI5LCAyMjEsIDExLCAzNSwgMjMsIDQsIDI1NCwgMTQzLCAxMSwgCi0gICAgMzUsIDIzLCA0LCAyNTIsIDI2LCAxMSwgMzUsIDIzLCA0LCAyNDMsIDEwNywgMTEsIDM1LCAyMywgNCwgMjQ4LCA1NCwgMTEsIAotICAgIDM1LCAyMywgNCwgMjQ1LCAxMDAsIDExLCAzNSwgMjMsIDQsIDIxMCwgODUsIDExLCAzNSwgMjMsIDQsIDI0NSwgNjMsIDExLCAKLSAgICAzNSwgMjMsIDQsIDIxNiwgMTc5LCAxMSwgMzUsIDIzLCA0LCAyMzUsIDE4NSwgMTEsIDM1LCAyMywgNCwgMjM0LCAyMjIsIAotICAgIDExLCAzNSwgMjMsIDQsIDIzMywgOTgsIDExLCAzNSwgMjMsIDQsIDIzMCwgMTAyLCAxMSwgMzUsIDIzLCA0LCAyMjcsIDIzNywgCi0gICAgMTEsIDM1LCAyMywgNCwgMjExLCAxNTcsIDExLCAzNSwgMjMsIDQsIDIyNiwgMTk5LCAxMSwgMzUsIDIzLCA0LCAyMjUsIAotICAgIDEwOCwgMTEsIDM1LCAyMywgNCwgMjIzLCAzNywgMTEsIDM1LCAyMywgNCwgNDAsIDIxOSwgMTc3LCAxMSwgMzUsIDIzLCA0LCAKLSAgICAyMTksIDE3NywgMTEsIDM1LCAyMywgNCwgMjE3LCA0MSwgMTEsIDM1LCAyMywgNCwgMjE0LCAxNTcsIDExLCAzNSwgMjMsIDQsIAotICAgIDIyNSwgMTMzLCAxMSwgMzUsIDIzLCA0LCAyNTAsIDExMCwgMTEsIDM1LCAyMywgNCwgMjI0LCAxNjEsIDExLCAzNSwgMjMsIAotICAgIDQsIDIyNiwgMjAxLCAxMSwgMzUsIDIzLCAyMjUsIDI1MywgMjQ3LCAyMzMsIDExLCAzNSwgMjMsIDI0NSwgMTAxLCA4NywgCi0gICAgMTEsIDM1LCAyMywgMjE2LCAxODAsIDg3LCAxMSwgMzUsIDIzLCAyMzQsIDIyMywgODcsIDExLCAzNSwgMjMsIDIyNSwgMTM0LCAKLSAgICA4NywgMTEsIDM1LCAyMywgMjIzLCAzOCwgODcsIDExLCAzNSwgMjMsIDIyNSwgMTA5LCA4NywgMTEsIDM1LCAyMywgMzIsIDYsIAotICAgIDI1NCwgMTQzLCAxMSwgMzUsIDIzLCAzMiwgNiwgMjUyLCAyNiwgMTEsIDM1LCAyMywgMzIsIDYsIDI0MywgMTA3LCAxMSwgCi0gICAgMzUsIDIzLCAzMiwgNiwgMjQ4LCA1NCwgMTEsIDM1LCAyMywgMzIsIDYsIDI0NSwgMTAwLCAxMSwgMzUsIDIzLCAzMiwgNiwgCi0gICAgMjEwLCA4NSwgMTEsIDM1LCAyMywgMzIsIDYsIDI0NSwgNjMsIDExLCAzNSwgMjMsIDMyLCA2LCAyMTYsIDE3OSwgMTEsIDM1LCAKLSAgICAyMywgMzIsIDYsIDIzNSwgMTg1LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjM0LCAyMjIsIDExLCAzNSwgMjMsIDMyLCA2LCAyMzMsIAotICAgIDk4LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjMwLCAxMDIsIDExLCAzNSwgMjMsIDMyLCA2LCAyMjcsIDIzNywgMTEsIDM1LCAyMywgCi0gICAgMzIsIDYsIDIxMSwgMTU3LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjI2LCAxOTksIDExLCAzNSwgMjMsIDMyLCA2LCAyMjUsIAotICAgIDEwOCwgMTEsIDM1LCAyMywgMzIsIDYsIDIyMywgMzcsIDExLCAzNSwgMjMsIDMyLCA2LCAyMTYsIDE4MCwgODcsIDExLCAzNSwgCi0gICAgMjMsIDMyLCA2LCAyMTksIDE3NywgMTEsIDM1LCAyMywgMzIsIDYsIDIxNywgNDEsIDExLCAzNSwgMjMsIDMyLCA2LCAyMTQsIAotICAgIDE1NywgMTEsIDM1LCAyMywgMzIsIDYsIDIyNSwgMTMzLCAxMSwgMzUsIDIzLCAzMiwgNiwgMjUwLCAxMTAsIDExLCAzNSwgCi0gICAgMjMsIDMyLCA2LCAyMjQsIDE2MSwgMTEsIDM1LCAyMywgMzIsIDYsIDIyNiwgMjAxLCAxMSwgMzUsIDIzLCAzMiwgMjI5LCAKLSAgICAyMjEsIDExLCAzNSwgMjMsIDMyLCA0LCAyNTQsIDE0MywgMTEsIDM1LCAyMywgMzIsIDQsIDI1MiwgMjYsIDExLCAzNSwgMjMsIAotICAgIDMyLCA0LCAyNDMsIDEwNywgMTEsIDM1LCAyMywgMzIsIDQsIDI0OCwgNTQsIDExLCAzNSwgMjMsIDMyLCA0LCAyNDUsIDEwMCwgCi0gICAgMTEsIDM1LCAyMywgMzIsIDQsIDIxMCwgODUsIDExLCAzNSwgMjMsIDMyLCA0LCAyNDUsIDYzLCAxMSwgMzUsIDIzLCAzMiwgCi0gICAgNCwgMjE2LCAxNzksIDExLCAzNSwgMjMsIDMyLCA0LCAyMzUsIDE4NSwgMTEsIDM1LCAyMywgMzIsIDQsIDIzNCwgMjIyLCAKLSAgICAxMSwgMzUsIDIzLCAzMiwgNCwgMjMzLCA5OCwgMTEsIDM1LCAyMywgMzIsIDQsIDIzMCwgMTAyLCAxMSwgMzUsIDIzLCAzMiwgCi0gICAgNCwgMjI3LCAyMzcsIDExLCAzNSwgMjMsIDMyLCA0LCAyMTEsIDE1NywgMTEsIDM1LCAyMywgMzIsIDQsIDIyNiwgMTk5LCAKLSAgICAxMSwgMzUsIDIzLCAzMiwgNCwgMjI1LCAxMDgsIDExLCAzNSwgMjMsIDMyLCA0LCAyMjMsIDM3LCAxMSwgMzUsIDIzLCAzMiwgCi0gICAgNCwgNDAsIDIxOSwgMTc3LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjE5LCAxNzcsIDExLCAzNSwgMjMsIDMyLCA0LCAyMTcsIDQxLCAKLSAgICAxMSwgMzUsIDIzLCAzMiwgNCwgMjE0LCAxNTcsIDExLCAzNSwgMjMsIDMyLCA0LCAyMjUsIDEzMywgMTEsIDM1LCAyMywgMzIsIAotICAgIDQsIDI1MCwgMTEwLCAxMSwgMzUsIDIzLCAzMiwgNCwgMjI0LCAxNjEsIDExLCAzNSwgMjMsIDMyLCA0LCAyMjYsIDIwMSwgCi0gICAgMTEsIDM1LCAyMywgMzIsIDIyNSwgMjUzLCAyNDcsIDIzMywgMTEsIDM1LCAyMywgMzIsIDI0NSwgMTAxLCA4NywgMTEsIDM1LCAKLSAgICAyMywgMzIsIDIxNiwgMTgwLCA4NywgMTEsIDM1LCAyMywgMzIsIDIzNCwgMjIzLCA4NywgMTEsIDM1LCAyMywgMzIsIDIyNSwgCi0gICAgMTM0LCA4NywgMTEsIDM1LCAyMywgMzIsIDIyMywgMzgsIDg3LCAxMSwgMzUsIDIzLCAzMiwgMjI1LCAxMDksIDg3LCAxMSwgCi0gICAgMjMsIDYsIDI0NywgMjI3LCAxMSwgMjMsIDQsIDI0NywgMjI3LCAxMSwgMjMsIDIxLCAyMTAsIDg2LCAxMSwgMjMsIDIxLCAKLSAgICAxMTAsIDExLCAyMywgMjEsIDEwNSwgMTEsIDIzLCAyMSwgMTU4LCAxMSwgMjMsIDIxLCAxNjEsIDExLCAyMywgMjEsIDE4OSwgCi0gICAgMTEsIDIzLCAyMSwgMTk0LCAxMSwgMjMsIDIxLCAxOTgsIDExLCAyMywgMjEsIDE5NSwgMTEsIDIzLCAyMSwgMjAwLCAxMSwgCi0gICAgMTM5LCAyMSwgMjEwLCA4NiwgMTEsIDEzOSwgMjEsIDExMCwgMTEsIDEzOSwgMjEsIDEwNSwgMTEsIDEzOSwgMjEsIDE1OCwgCi0gICAgMTEsIDEzOSwgMjEsIDE2MSwgMTEsIDEzOSwgMjEsIDE4OSwgMTEsIDEzOSwgMjEsIDE5NCwgMTEsIDEzOSwgMjEsIDE5OCwgCi0gICAgMTEsIDEzOSwgMjEsIDE5NSwgMTEsIDEzOSwgMjEsIDIwMCwgMTEsIDM1LCAyMSwgMjEwLCA4NiwgMTEsIDM1LCAyMSwgMTEwLCAKLSAgICAxMSwgMzUsIDIxLCAxMDUsIDExLCAzNSwgMjEsIDE1OCwgMTEsIDM1LCAyMSwgMTYxLCAxMSwgMzUsIDIxLCAxODksIDExLCAKLSAgICAzNSwgMjEsIDE5NCwgMTEsIDM1LCAyMSwgMTk4LCAxMSwgMzUsIDIxLCAxOTUsIDExLCAzNSwgMjEsIDIwMCwgMTEsIDM1LCAKLSAgICAyMywgMjEsIDIxMCwgODYsIDExLCAzNSwgMjMsIDIxLCAxMTAsIDExLCAzNSwgMjMsIDIxLCAxMDUsIDExLCAzNSwgMjMsIAotICAgIDIxLCAxNTgsIDExLCAzNSwgMjMsIDIxLCAxNjEsIDExLCAzNSwgMjMsIDIxLCAxODksIDExLCAzNSwgMjMsIDIxLCAxOTQsIAotICAgIDExLCAzNSwgMjMsIDIxLCAxOTgsIDExLCAzNSwgMjMsIDIxLCAxOTUsIDExLCAzNSwgMjMsIDIxLCAyMDAsIDExLCAyMzAsIAotICAgIDEzOCwgMjEsIDIxMCwgODYsIDExLCAyMzAsIDEzOCwgMjEsIDExMCwgMTEsIDIzMCwgMTM4LCAyMSwgMTA1LCAxMSwgMjMwLCAKLSAgICAxMzgsIDIxLCAxNTgsIDExLCAyMzAsIDEzOCwgMjEsIDE2MSwgMTEsIDIzMCwgMTM4LCAyMSwgMTg5LCAxMSwgMjMwLCAxMzgsIAotICAgIDIxLCAxOTQsIDExLCAyMzAsIDEzOCwgMjEsIDE5OCwgMTEsIDIzMCwgMTM4LCAyMSwgMTk1LCAxMSwgMjMwLCAxMzgsIDIxLCAKLSAgICAyMDAsIDEwLCAxMSwgMjU0LCAxNzAsIDEwLCAxMSwgMjUyLCA1NCwgMTAsIDExLCAyMzUsIDEyMywgMTAsIDExLCAyNDgsIAotICAgIDE5NSwgMTAsIDExLCAyMTIsIDMwLCAxMCwgMTEsIDIxMCwgMTA4LCAxMCwgMTEsIDI0MiwgMzcsIDEwLCAxMSwgMjE3LCA4MCwgCi0gICAgMTAsIDExLCAyMTEsIDQzLCAxMCwgMTEsIDIzNCwgMjUwLCAxMCwgMTEsIDIzMywgMTAyLCAxMCwgMTEsIDIzMSwgNzgsIDEwLCAKLSAgICAxMSwgMjI4LCA2MiwgMTAsIDExLCAyMjEsIDE2NiwgMTAsIDExLCAyNTQsIDE5NiwgMTAsIDExLCAyNDQsIDE0MiwgMTAsIAotICAgIDExLCAyMjIsIDI2LCAxMCwgMTEsIDIyNCwgODEsIDEwLCAxMSwgMjIzLCA5NSwgMTAsIDExLCAyMjAsIDU5LCAxMCwgMTEsIAotICAgIDIxNywgNywgMTAsIDExLCAyMTYsIDE5MiwgMTAsIDExLCAyMzQsIDEyOSwgMTAsIDExLCAyMTYsIDIwMiwgMTAsIDExLCAKLSAgICAyNDgsIDIxNiwgMTAsIDExLCAyMTAsIDExMSwgMTAsIDExLCAyNDIsIDI0NCwgMTAsIDExLCAyNDcsIDExOSwgMjUyLCA1NCwgCi0gICAgMTAsIDExLCAyNDcsIDExOSwgMjI4LCA2MiwgMTAsIDExLCAyNDcsIDExOSwgMjQ0LCAxNDIsIDEwLCAxMSwgMjQ3LCAxMTksIAotICAgIDIyNCwgODEsIDEwLCAxMSwgNjUsIDI1MiwgNTQsIDEwLCAxMSwgNjUsIDIzNSwgMTIzLCAxMCwgMTEsIDY1LCAyNDEsIDIxOCwgCi0gICAgMTAsIDExLCA2NSwgMjQyLCAzNywgMTAsIDExLCA2NSwgMjExLCA0MywgMTAsIDExLCA2NSwgMjM0LCAyNTAsIDEwLCAxMSwgCi0gICAgNjUsIDIzMywgMTAyLCAxMCwgMTEsIDY1LCAyMzEsIDc4LCAxMCwgMTEsIDY1LCAyMjgsIDYyLCAxMCwgMTEsIDY1LCAyMjEsIAotICAgIDE2NiwgMTAsIDExLCA2NSwgMjU0LCAxOTYsIDEwLCAxMSwgNjUsIDI0NCwgMTQyLCAxMCwgMTEsIDY1LCAyMjIsIDI2LCAxMCwgCi0gICAgMTEsIDY1LCAyMjQsIDgxLCAxMCwgMTEsIDY1LCAyMjAsIDU5LCAxMCwgMTEsIDY1LCAyMTcsIDcsIDEwLCAxMSwgNjUsIAotICAgIDIxNiwgMTkyLCAxMCwgMTEsIDY1LCAyMzQsIDEyOSwgMTAsIDExLCA2NSwgMjQ4LCAyMTYsIDEwLCAxMSwgNjUsIDI0MiwgCi0gICAgMjQ0LCAxMCwgMTEsIDIxNywgNzYsIDIzNSwgMTIzLCAxMCwgMTEsIDIxNywgNzYsIDI0MiwgMzcsIDEwLCAxMSwgMjE3LCAKLSAgICA3NiwgMjExLCA0MywgMTAsIDExLCAyMTcsIDc2LCAyMzMsIDEwMiwgMTAsIDExLCAyMTcsIDc2LCAyMjgsIDYyLCAxMCwgMTEsIAotICAgIDIxNywgNzYsIDIyMSwgMTY2LCAxMCwgMTEsIDIxNywgNzYsIDI1NCwgMTk2LCAxMCwgMTEsIDIxNywgNzYsIDIyMiwgMjYsIAotICAgIDEwLCAxMSwgMjE3LCA3NiwgMjI0LCA4MSwgMTAsIDExLCAyMTcsIDc2LCAyMjAsIDU5LCAxMCwgMTEsIDIxNywgNzYsIDIzNCwgCi0gICAgMTI5LCAxMCwgMTEsIDIxNywgNzYsIDI0OCwgMjE2LCAxMCwgMTEsIDIxNywgNzYsIDI0MiwgMjQ0LCAxMCwgMTEsIDIxNywgCi0gICAgNzYsIDI0NywgMTE5LCAyMjgsIDYyLCAxMCwgMTEsIDIxNywgNzYsIDI0NywgMTE5LCAyMjQsIDgxLCAxMCwgMTEsIDIxOCwgCi0gICAgMTEwLCAyNTIsIDU0LCAxMCwgMTEsIDIxOCwgMTEwLCAyMzUsIDEyMywgMTAsIDExLCAyMTgsIDExMCwgMjQxLCAyMTgsIDEwLCAKLSAgICAxMSwgMjE4LCAxMTAsIDI0MiwgMzcsIDEwLCAxMSwgMjE4LCAxMTAsIDIxNywgODAsIDEwLCAxMSwgMjE4LCAxMTAsIDIxMSwgCi0gICAgNDMsIDEwLCAxMSwgMjE4LCAxMTAsIDIzNCwgMjUwLCAxMCwgMTEsIDIxOCwgMTEwLCAyMzEsIDc4LCAxMCwgMTEsIDIxOCwgCi0gICAgMTEwLCAyMjgsIDYyLCAxMCwgMTEsIDIxOCwgMTEwLCAyMjEsIDE2NiwgMTAsIDExLCAyMTgsIDExMCwgMjU0LCAxOTYsIDEwLCAKLSAgICAxMSwgMjE4LCAxMTAsIDI0NCwgMTQyLCAxMCwgMTEsIDIxOCwgMTEwLCAyMjIsIDI2LCAxMCwgMTEsIDIxOCwgMTEwLCAyMjQsIAotICAgIDgxLCAxMCwgMTEsIDIxOCwgMTEwLCAyMjAsIDU5LCAxMCwgMTEsIDIxOCwgMTEwLCAyMTcsIDcsIDEwLCAxMSwgMjE4LCAKLSAgICAxMTAsIDIxNiwgMTkyLCAxMCwgMTEsIDIxOCwgMTEwLCAyMzQsIDEyOSwgMTAsIDExLCAyMTgsIDExMCwgMjQ4LCAyMTYsIAotICAgIDEwLCAxMSwgMjE4LCAxMTAsIDIxMCwgMTExLCAxMCwgMTEsIDIxOCwgMTEwLCAyNDIsIDI0NCwgMTAsIDExLCAyMTgsIDExMCwgCi0gICAgMjQ3LCAxMTksIDI1MiwgNTQsIDEwLCAxMSwgMjE4LCAxMTAsIDI0NywgMTE5LCAyNDQsIDE0MiwgMTAsIDExLCAyMzIsIAotICAgIDEyMiwgMjU0LCAxNzAsIDEwLCAxMSwgMjMyLCAxMjIsIDI1MiwgNTQsIDEwLCAxMSwgMjMyLCAxMjIsIDIzNSwgMTIzLCAxMCwgCi0gICAgMTEsIDIzMiwgMTIyLCAyNDgsIDE5NSwgMTAsIDExLCAyMzIsIDEyMiwgMjQxLCAyMTgsIDEwLCAxMSwgMjMyLCAxMjIsIAotICAgIDIxMiwgMzAsIDEwLCAxMSwgMjMyLCAxMjIsIDIxMCwgMTA4LCAxMCwgMTEsIDIzMiwgMTIyLCAyNDIsIDM3LCAxMCwgMTEsIAotICAgIDIzMiwgMTIyLCAyMTcsIDgwLCAxMCwgMTEsIDIzMiwgMTIyLCAyMTEsIDQzLCAxMCwgMTEsIDIzMiwgMTIyLCAyMzMsIDEwMiwgCi0gICAgMTAsIDExLCAyMzIsIDEyMiwgMjMxLCA3OCwgMTAsIDExLCAyMzIsIDEyMiwgMjI4LCA2MiwgMTAsIDExLCAyMzIsIDEyMiwgCi0gICAgMjIxLCAxNjYsIDEwLCAxMSwgMjMyLCAxMjIsIDI1NCwgMTk2LCAxMCwgMTEsIDIzMiwgMTIyLCAyNDQsIDE0MiwgMTAsIDExLCAKLSAgICAyMzIsIDEyMiwgMjIyLCAyNiwgMTAsIDExLCAyMzIsIDEyMiwgMjI0LCA4MSwgMTAsIDExLCAyMzIsIDEyMiwgMjIzLCA5NSwgCi0gICAgMTAsIDExLCAyMzIsIDEyMiwgMjIwLCA1OSwgMTAsIDExLCAyMzIsIDEyMiwgMjE3LCA3LCAxMCwgMTEsIDIzMiwgMTIyLCAKLSAgICAyMTYsIDE5MiwgMTAsIDExLCAyMzIsIDEyMiwgMjM0LCAxMjksIDEwLCAxMSwgMjMyLCAxMjIsIDIxNiwgMjAyLCAxMCwgMTEsIAotICAgIDIzMiwgMTIyLCAyNDgsIDIxNiwgMTAsIDExLCAyMzIsIDEyMiwgMjEwLCAxMTEsIDEwLCAxMSwgMjMyLCAxMjIsIDI0MiwgCi0gICAgMjQ0LCAxMCwgMTEsIDEzOSwgMjUyLCA1NCwgMTAsIDExLCAxMzksIDIzNSwgMTIzLCAxMCwgMTEsIDEzOSwgMjQ4LCAxOTUsIAotICAgIDEwLCAxMSwgMTM5LCAyMTIsIDMwLCAxMCwgMTEsIDEzOSwgMjEwLCAxMDgsIDEwLCAxMSwgMTM5LCAyNDIsIDM3LCAxMCwgCi0gICAgMTEsIDEzOSwgMjE3LCA4MCwgMTAsIDExLCAxMzksIDIxMSwgNDMsIDEwLCAxMSwgMTM5LCAyMzMsIDEwMiwgMTAsIDExLCAKLSAgICAxMzksIDIzMSwgNzgsIDEwLCAxMSwgMTM5LCAyMjgsIDYyLCAxMCwgMTEsIDEzOSwgMjIxLCAxNjYsIDEwLCAxMSwgMTM5LCAKLSAgICAyNTQsIDE5NiwgMTAsIDExLCAxMzksIDI0NCwgMTQyLCAxMCwgMTEsIDEzOSwgMjIyLCAyNiwgMTAsIDExLCAxMzksIDIyNCwgCi0gICAgODEsIDEwLCAxMSwgMTM5LCAyMjMsIDk1LCAxMCwgMTEsIDEzOSwgMjIwLCA1OSwgMTAsIDExLCAxMzksIDIxNywgNywgMTAsIAotICAgIDExLCAxMzksIDIxNiwgMTkyLCAxMCwgMTEsIDEzOSwgMjM0LCAxMjksIDEwLCAxMSwgMTM5LCAyMTYsIDIwMiwgMTAsIDExLCAKLSAgICAxMzksIDI0OCwgMjE2LCAxMCwgMTEsIDEzOSwgMjEwLCAxMTEsIDEwLCAxMSwgMTM5LCAyNDIsIDI0NCwgMTAsIDExLCAyMjYsIAotICAgIDE2OCwgNjYsIDIsIDEyMiwgMiwgMjE3LCA0MywgMTAsIDExLCAyMjYsIDE2OCwgMTIyLCAyLCAyNDgsIDE5NSwgMjMxLCAKLSAgICAyMDUsIDg2LCAyNDUsIDIyMCwgMjExLCAyMzksIDIzMSwgMjA1LCA4NiwgMjE5LCAyOCwgMjExLCAyMzksIDIzMSwgMjA1LCAKLSAgICA4NiwgMjEyLCA5LCAyMTEsIDIzOSwgMjMxLCAyMDUsIDg2LCAyMjgsIDU2LCAyMTEsIDIzOSwgMjMxLCAyMDUsIDg2LCAyMjMsIAotICAgIDExMSwgMjQ2LCA5NiwgMjMxLCAyMDUsIDg2LCAyNDIsIDEyNywgMjQ2LCA5NiwgMjMxLCAyMDUsIDg2LCA3MSwgMjQ2LCA5NiwgCi0gICAgMjMxLCAyMDUsIDg2LCAxMjMsIDY0LCAyNTAsIDE0MSwgMjMxLCAyMDUsIDg2LCAxMTMsIDY0LCAyNTAsIDE0MSwgMjMxLCAKLSAgICAyMDUsIDg2LCAxMzQsIDY0LCAyNTAsIDE0MSwgMjMxLCAyMDUsIDg2LCAyNDQsIDExLCA2NCwgMjUwLCAxNDEsIDIzMSwgCi0gICAgMjA1LCA4NiwgMjQ0LCA4MSwgNjQsIDI1MCwgMTQxLCAyMzEsIDIwNSwgODYsIDIxOSwgMTI1LCA2NCwgMjUwLCAxNDEsIAotICAgIDIzMSwgMjA1LCA4NiwgMjIwLCAxMjIsIDY0LCAyNTAsIDE0MSwgMjMxLCAyMDUsIDg2LCAyNDUsIDE5MywgNjQsIDI1MCwgCi0gICAgMTQxLCAyMzEsIDIwNSwgODYsIDIyOCwgMjAwLCA2NCwgMjUwLCAxNDEsIDIzMSwgMjA1LCA4NiwgMTIzLCA2NCwgMjUyLCAKLSAgICAxNTMsIDIzMSwgMjA1LCA4NiwgMTEzLCA2NCwgMjUyLCAxNTMsIDIzMSwgMjA1LCA4NiwgMTM0LCA2NCwgMjUyLCAxNTMsIAotICAgIDIzMSwgMjA1LCA4NiwgMjQ0LCAxMSwgNjQsIDI1MiwgMTUzLCAyMzEsIDIwNSwgODYsIDI0NCwgODEsIDY0LCAyNTIsIDE1MywgCi0gICAgMjMxLCAyMDUsIDg2LCAyMTksIDEyNSwgNjQsIDI1MiwgMTUzLCAyMzEsIDIwNSwgODYsIDIyMCwgMTIyLCA2NCwgMjUyLCAKLSAgICAxNTMsIDIzMSwgMjA1LCA4NiwgMjQ1LCAxOTMsIDY0LCAyNTIsIDE1MywgMjMxLCAyMDUsIDg2LCAyMjgsIDIwMCwgNjQsIAotICAgIDI1MiwgMTUzLCAyMzEsIDIwNSwgODYsIDEyMywgNjQsIDI1MCwgMzQsIDIzMSwgMjA1LCA4NiwgMTEzLCA2NCwgMjUwLCAzNCwgCi0gICAgMjMxLCAyMDUsIDg2LCAxMzQsIDY0LCAyNTAsIDM0LCAyMzEsIDIwNSwgODYsIDI0NCwgMTEsIDY0LCAyNTAsIDM0LCAyMzEsIAotICAgIDIwNSwgODYsIDI0NCwgODEsIDY0LCAyNTAsIDM0LCAyMzEsIDIwNSwgODYsIDIxOSwgMTI1LCA2NCwgMjUwLCAzNCwgMjMxLCAKLSAgICAyMDUsIDg2LCAyMjAsIDEyMiwgNjQsIDI1MCwgMzQsIDIzMSwgMjA1LCA4NiwgMjQ1LCAxOTMsIDY0LCAyNTAsIDM0LCAyMzEsIAotICAgIDIwNSwgODYsIDIyOCwgMjAwLCA2NCwgMjUwLCAzNCwgMjMxLCAyMDUsIDg2LCAyMjUsIDI1LCAyMzEsIDIwNSwgODYsIDIyNiwgCi0gICAgMTU2LCAyMzEsIDIwNSwgODYsIDI1MiwgMTU0LCAyMzEsIDIwNSwgODYsIDI1MCwgNzAsIDIzMSwgMjA1LCA4NiwgMjE4LCAKLSAgICAyMzksIDIzMSwgMjA1LCA4NiwgMjE4LCAzOSwgMjMxLCAyMDUsIDg2LCAyNTMsIDE3OSwgMjMxLCAyMDUsIDg2LCAyMTEsIAotICAgIDIzMiwgMjMxLCAyMDUsIDg2LCAyMzUsIDYyLCAyMzEsIDIwNSwgODYsIDI1MiwgMTg0LCAxMzEsIDg2LCAyMDMsIDI1MiwgCi0gICAgMTg0LCAxMzEsIDg2LCAyNDEsIDQzLCAxMzEsIDg2LCAyNDEsIDQyLCAxMzEsIDg2LCAyNDEsIDQxLCAxMzEsIDg2LCAyNDEsIAotICAgIDQwLCAxMzEsIDg2LCAyNDEsIDM5LCAxMzEsIDg2LCAyNDEsIDM4LCAxMzEsIDg2LCAyNDEsIDM3LCAxMzEsIDg2LCAyNDEsIAotICAgIDM2LCAxMzEsIDg2LCAyNDEsIDM1LCAxMzEsIDg2LCAyNDEsIDM0LCAxMzEsIDg2LCAyNDEsIDMzLCAxMzEsIDg2LCAyNDEsIAotICAgIDMyLCAxMzEsIDg2LCAyNDEsIDMxLCAxMzEsIDg2LCAyNDEsIDMwLCAxMzEsIDg2LCAyNDEsIDI5LCAxMzEsIDg2LCAyNDEsIAotICAgIDI4LCAxMzEsIDg2LCAyNDEsIDI3LCAxMzEsIDg2LCAyNDEsIDI2LCAxMzEsIDg2LCAyNDEsIDI1LCAxMzEsIDg2LCAyNDEsIAotICAgIDI0LCAxMzEsIDg2LCAyNDEsIDIzLCAxMzEsIDg2LCAyNDEsIDIyLCAxMzEsIDg2LCAyNDEsIDIxLCAxMzEsIDg2LCAyNDEsIAotICAgIDIwLCAxMzEsIDg2LCAyNDEsIDE5LCAxMzEsIDg2LCAyNDEsIDE4LCAxMzEsIDg2LCAyNDEsIDE3LCAxMzEsIDg2LCAyNDEsIAotICAgIDE2LCAxMzEsIDg2LCAyNDEsIDE1LCAxMzEsIDg2LCAyNDEsIDE0LCAxMzEsIDg2LCAyNDEsIDEzLCAxMzEsIDg2LCAyNDEsIAotICAgIDEyLCAxMzEsIDg2LCAyNDEsIDExLCAxMzEsIDg2LCAyNDEsIDEwLCAxMzEsIDg2LCAyNDEsIDksIDEzMSwgODYsIDI0MSwgOCwgCi0gICAgMTMxLCA4NiwgMjQxLCA3LCAxMzEsIDg2LCAyNDEsIDYsIDEzMSwgODYsIDI0MSwgNSwgMTMxLCA4NiwgMjQxLCA0LCAxMzEsIAotICAgIDg2LCAyNDEsIDMsIDEzMSwgODYsIDI0MSwgMiwgMTMxLCA4NiwgMjQxLCAxLCAxMzEsIDg2LCAyNDEsIDAsIDEzMSwgODYsIAotICAgIDI0MCwgMjU1LCAxMzEsIDg2LCAyNDAsIDI1NCwgMTMxLCA4NiwgMjQwLCAyNTMsIDEzMSwgODYsIDI0MCwgMjUyLCAxMzEsIAotICAgIDg2LCAyNDAsIDI1MSwgMTMxLCA4NiwgNjcsIDI1MiwgMTg0LCAxMzEsIDg2LCAyMTMsIDIzOCwgMTMxLCA4NiwgMjEzLCAKLSAgICAyMzcsIDEzMSwgODYsIDIxMywgMjM2LCAxMzEsIDg2LCAyMTMsIDIzNSwgMTMxLCA4NiwgMjEzLCAyMzQsIDEzMSwgODYsIAotICAgIDIxMywgMjMzLCAxMzEsIDg2LCAyMTMsIDIzMiwgMTMxLCA4NiwgMjEzLCAyMzEsIDEzMSwgODYsIDIxMywgMjMwLCAxMzEsIAotICAgIDg2LCAyMTMsIDIyOSwgMTMxLCA4NiwgMjEzLCAyMjgsIDEzMSwgODYsIDIxMywgMjI3LCAxMzEsIDg2LCAyMTMsIDIyNiwgCi0gICAgMTMxLCA4NiwgMjEzLCAyMjUsIDEzMSwgODYsIDIxMywgMjI0LCAxMzEsIDg2LCAyMTMsIDIyMywgMTMxLCA4NiwgMjEzLCAKLSAgICAyMjIsIDEzMSwgODYsIDIxMywgMjIxLCAxMzEsIDg2LCAyMTMsIDIyMCwgMTMxLCA4NiwgMjEzLCAyMTksIDEzMSwgODYsIAotICAgIDIxMywgMjE4LCAxMzEsIDg2LCAyMTMsIDIxNywgMTMxLCA4NiwgMjEzLCAyMTYsIDEzMSwgODYsIDIxMywgMjE1LCAxMzEsIAotICAgIDg2LCAyMTMsIDIxNCwgMTMxLCA4NiwgMjEzLCAyMTMsIDEzMSwgODYsIDIxMywgMjEyLCAxMzEsIDg2LCAyMTMsIDIxMSwgCi0gICAgMTMxLCA4NiwgMjEzLCAyMTAsIDEzMSwgODYsIDIxMywgMjA5LCAxMzEsIDg2LCAyMTMsIDIwOCwgMTMxLCA4NiwgMjEzLCAKLSAgICAyMDcsIDEzMSwgODYsIDIxMywgMjA2LCAxMzEsIDg2LCAyMTMsIDIwNSwgMTMxLCA4NiwgMjEzLCAyMDQsIDEzMSwgODYsIAotICAgIDIxMywgMjAzLCAxMzEsIDg2LCAyMTMsIDIwMiwgMTMxLCA4NiwgMjEzLCAyMDEsIDEzMSwgODYsIDIxMywgMjAwLCAxMzEsIAotICAgIDg2LCAyMTMsIDE5OSwgMTMxLCA4NiwgMjEzLCAxOTgsIDEzMSwgODYsIDIxMywgMTk3LCAxMzEsIDg2LCAyMTMsIDE5NiwgCi0gICAgMTMxLCA4NiwgMjEzLCAxOTUsIDEzMSwgODYsIDIxMywgMTk0LCAxMzEsIDg2LCAyMTMsIDE5MywgMTMxLCA4NiwgMjEzLCAKLSAgICAxOTIsIDEzMSwgODYsIDIxMywgMTkxLCAxMzEsIDg2LCAyMTMsIDE5MCwgMjI1LCAzMywgMjUwLCAyNDMsIDI1MiwgMTg0LCAKLSAgICAyMjUsIDMzLCAyNTAsIDI0MywgMjU1LCA5LCA2NCwgMjE5LCAxNSwgMjI1LCAzMywgMjUwLCAyNDMsIDExMywgNjQsIDIxOSwgCi0gICAgMTUsIDIyNSwgMzMsIDI1MCwgMjQzLCAxMzQsIDY0LCAyMTksIDE1LCAyMjUsIDMzLCAyNTAsIDI0MywgMjQ0LCAxMSwgNjQsIAotICAgIDIxOSwgMTUsIDIyNSwgMzMsIDI1MCwgMjQzLCAyNDQsIDgxLCA2NCwgMjE5LCAxNSwgMjI1LCAzMywgMjUwLCAyNDMsIDIxOSwgCi0gICAgMTI1LCA2NCwgMjE5LCAxNSwgMjI1LCAzMywgMjUwLCAyNDMsIDIyMCwgMTIyLCA2NCwgMjE5LCAxNSwgMjI1LCAzMywgMjUwLCAKLSAgICAyNDMsIDI0NSwgMTkzLCA2NCwgMjE5LCAxNSwgMjI1LCAzMywgMjUwLCAyNDMsIDIyOCwgMjAwLCA2NCwgMjE5LCAxNSwgCi0gICAgMjI1LCAzMywgMjUwLCAyNDMsIDIxNiwgMjQ4LCA2NCwgMjE5LCAxNSwgMjI1LCAzMywgMjUwLCAyNDMsIDIzNSwgMTM5LCAKLSAgICA2NCwgMjE5LCAxNSwgMjI1LCAzMywgMjUwLCAyNDMsIDIzNCwgMzEsIDY0LCAyMTksIDE1LCAyMjUsIDMzLCAyNTAsIDI0MywgCi0gICAgMjI0LCAxNSwgNjQsIDIxOSwgMTUsIDIyNSwgMzMsIDI1MCwgMjQzLCAyMzQsIDc5LCA2NCwgMjE5LCAxNSwgMjI1LCAzMywgCi0gICAgMjUwLCAyNDMsIDI1NSwgOSwgNjQsIDI0MSwgMjI1LCAyMjUsIDMzLCAyNTAsIDI0MywgMTEzLCA2NCwgMjQxLCAyMjUsIAotICAgIDIyNSwgMzMsIDI1MCwgMjQzLCAxMzQsIDY0LCAyNDEsIDIyNSwgMjI1LCAzMywgMjUwLCAyNDMsIDI0NCwgMTEsIDY0LCAKLSAgICAyNDEsIDIyNSwgMjI1LCAzMywgMjUwLCAyNDMsIDI0NCwgODEsIDY0LCAyNDEsIDIyNSwgMjI1LCAzMywgMjUwLCAyNDMsIAotICAgIDIxOSwgMTI1LCA2NCwgMjQxLCAyMjUsIDIyNSwgMzMsIDI1MCwgMjQzLCAyMjAsIDEyMiwgNjQsIDI0MSwgMjI1LCAyMjUsIAotICAgIDMzLCAyNTAsIDI0MywgMjQ1LCAxOTMsIDY0LCAyNDEsIDIyNSwgMjI1LCAzMywgMjUwLCAyNDMsIDIyOCwgMjAwLCA2NCwgCi0gICAgMjQxLCAyMjUsIDIyNSwgMzMsIDI1MCwgMjQzLCAyMTYsIDI0OCwgNjQsIDI0MSwgMjI1LCAyMjUsIDMzLCAyNTAsIDI0MywgCi0gICAgMjM1LCAxMzksIDY0LCAyNDEsIDIyNSwgMjI1LCAzMywgMjUwLCAyNDMsIDIzNCwgMzEsIDY0LCAyNDEsIDIyNSwgMjI1LCAKLSAgICAzMywgMjUwLCAyNDMsIDIyNCwgMTUsIDY0LCAyNDEsIDIyNSwgMjI1LCAzMywgMjUwLCAyNDMsIDIzNCwgNzksIDY0LCAyNDEsIAotICAgIDIyNSwgMjI1LCAzMywgMjUwLCAyNDMsIDI1NSwgOSwgNjQsIDI0NywgMjQ3LCAyMjUsIDMzLCAyNTAsIDI0MywgMTEzLCA2NCwgCi0gICAgMjQ3LCAyNDcsIDIyNSwgMzMsIDI1MCwgMjQzLCAxMzQsIDY0LCAyNDcsIDI0NywgMjI1LCAzMywgMjUwLCAyNDMsIDI0NCwgCi0gICAgMTEsIDY0LCAyNDcsIDI0NywgMjI1LCAzMywgMjUwLCAyNDMsIDI0NCwgODEsIDY0LCAyNDcsIDI0NywgMjI1LCAzMywgMjUwLCAKLSAgICAyNDMsIDIxOSwgMTI1LCA2NCwgMjQ3LCAyNDcsIDIyNSwgMzMsIDI1MCwgMjQzLCAyMjAsIDEyMiwgNjQsIDI0NywgMjQ3LCAKLSAgICAyMjUsIDMzLCAyNTAsIDI0MywgMjQ1LCAxOTMsIDY0LCAyNDcsIDI0NywgMjI1LCAzMywgMjUwLCAyNDMsIDIyOCwgMjAwLCAKLSAgICA2NCwgMjQ3LCAyNDcsIDIyNSwgMzMsIDI1MCwgMjQzLCAyMTYsIDI0OCwgNjQsIDI0NywgMjQ3LCAyMjUsIDMzLCAyNTAsIAotICAgIDI0MywgMjM1LCAxMzksIDY0LCAyNDcsIDI0NywgMjI1LCAzMywgMjUwLCAyNDMsIDIzNCwgMzEsIDY0LCAyNDcsIDI0NywgCi0gICAgMjI1LCAzMywgMjUwLCAyNDMsIDIyNCwgMTUsIDY0LCAyNDcsIDI0NywgMjI1LCAzMywgMjUwLCAyNDMsIDIzNCwgNzksIDY0LCAKLSAgICAyNDcsIDI0NywgMjI1LCAzMywgMjUwLCAyNDMsIDg1LCAyMzUsIDYyLCAyMjUsIDMzLCAyNTAsIDI0MywgMjU1LCA5LCA2NCwgCi0gICAgMjQ5LCAyNDIsIDIyNSwgMzMsIDI1MCwgMjQzLCAxMTMsIDY0LCAyNDksIDI0MiwgMjI1LCAzMywgMjUwLCAyNDMsIDEzNCwgCi0gICAgNjQsIDI0OSwgMjQyLCAyMjUsIDMzLCAyNTAsIDI0MywgMjQ0LCAxMSwgNjQsIDI0OSwgMjQyLCAyMjUsIDMzLCAyNTAsIAotICAgIDI0MywgMjQ0LCA4MSwgNjQsIDI0OSwgMjQyLCAyMjUsIDMzLCAyNTAsIDI0MywgMjE5LCAxMjUsIDY0LCAyNDksIDI0MiwgCi0gICAgMjI1LCAzMywgMjUwLCAyNDMsIDIyMCwgMTIyLCA2NCwgMjQ5LCAyNDIsIDIyNSwgMzMsIDI1MCwgMjQzLCAyNDUsIDE5MywgCi0gICAgNjQsIDI0OSwgMjQyLCAyMjUsIDMzLCAyNTAsIDI0MywgMjI4LCAyMDAsIDY0LCAyNDksIDI0MiwgMjI1LCAzMywgMjUwLCAKLSAgICAyNDMsIDIxNiwgMjQ4LCA2NCwgMjQ5LCAyNDIsIDIyNSwgMzMsIDI1MCwgMjQzLCAyMzUsIDEzOSwgNjQsIDI0OSwgMjQyLCAKLSAgICAyMjUsIDMzLCAyNTAsIDI0MywgMjM0LCAzMSwgNjQsIDI0OSwgMjQyLCAyMjUsIDMzLCAyNTAsIDI0MywgMjI0LCAxNSwgNjQsIAotICAgIDI0OSwgMjQyLCAyMjUsIDMzLCAyNTAsIDI0MywgMjM0LCA3OSwgNjQsIDI0OSwgMjQyLCAyMjUsIDMzLCAyNTAsIDI0MywgCi0gICAgNzEsIDIzNSwgNjIsIDIxLCAyMTAsIDg3LCAyNDMsIDIyOSwgMjE4LCAxMjksIDIxLCAyMTAsIDg3LCAyNDksIDIxOSwgMjEsIAotICAgIDEyMywgMjQ5LCAyMTksIDIxLCAxMTMsIDI0OSwgMjE5LCAyMSwgMTM0LCAyNDksIDIxOSwgMjEsIDI0NCwgMTEsIDI0OSwgCi0gICAgMjE5LCAyMSwgMjQ0LCA4MSwgMjQ5LCAyMTksIDIxLCAyMTksIDEyNSwgMjQ5LCAyMTksIDIxLCAyMjAsIDEyMiwgMjQ5LCAKLSAgICAyMTksIDIxLCAyNDUsIDE5MywgMjQ5LCAyMTksIDIxLCAyMjgsIDIwMCwgMjQ5LCAyMTksIDg4LCA3LCA2LCAxLCA2MSwgODgsIAotICAgIDcsIDYsIDEsIDI1MywgMTU4LCA4OCwgNywgNiwgMSwgMjUxLCA2NiwgODgsIDcsIDYsIDEsIDI0OSwgNjAsIDg4LCA3LCA2LCAKLSAgICAxLCA3NSwgODgsIDcsIDYsIDEsIDI0NSwgNiwgODgsIDcsIDYsIDEsIDI0MywgMjAyLCA4OCwgNywgNiwgMSwgMjQyLCA2MCwgCi0gICAgODgsIDcsIDYsIDEsIDczLCA4OCwgNywgNiwgMSwgMjM1LCAxNDQsIDg4LCA3LCA2LCAxLCAyMzUsIDIzLCA4OCwgNywgNiwgCi0gICAgMSwgMTU2LCA4OCwgNywgNiwgMSwgMTkzLCA4OCwgNywgNiwgMSwgMjMwLCAyNSwgODgsIDcsIDYsIDEsIDc2LCA4OCwgNywgCi0gICAgNiwgMSwgMjI2LCAxMDUsIDg4LCA3LCA2LCAxLCAyMjQsIDk2LCA4OCwgNywgNiwgMSwgMTUzLCA4OCwgNywgNiwgMSwgMjIyLCAKLSAgICA5MSwgODgsIDcsIDYsIDEsIDIxNywgMTUyLCA4OCwgNywgNiwgMSwgNzAsIDg4LCA3LCA2LCAxLCAyMTQsIDEwNSwgODgsIDcsIAotICAgIDYsIDEsIDIxMiwgOTgsIDg4LCA3LCA2LCAxLCAyMTEsIDE3OCwgODgsIDcsIDYsIDEsIDIxMSwgMTE3LCA4OCwgNywgNiwgMSwgCi0gICAgMjEwLCAxNTksIDIxNiwgNiwgMjIwLCA1MywgMjUxLCAxNTcsIDcsIDYsIDEsIDIyMiwgOTEsIDM3LCAzMiwgNywgNiwgMSwgCi0gICAgMjUxLCA2NiwgMzcsIDMyLCA3LCA2LCAxLCAxNTMsIDM3LCAyNTAsIDE5MSwgMzcsIDIxMSwgMTgwLCA5MiwgNywgNiwgMSwgCi0gICAgNjEsIDkyLCA3LCA2LCAxLCAyNTMsIDE1OCwgOTIsIDcsIDYsIDEsIDI1MSwgNjYsIDkyLCA3LCA2LCAxLCAyNDksIDYwLCAKLSAgICA5MiwgNywgNiwgMSwgNzUsIDkyLCA3LCA2LCAxLCAyNDUsIDYsIDkyLCA3LCA2LCAxLCAyNDMsIDIwMiwgOTIsIDcsIDYsIDEsIAotICAgIDI0MiwgNjAsIDkyLCA3LCA2LCAxLCA3MywgOTIsIDcsIDYsIDEsIDIzNSwgMTQ0LCA5MiwgNywgNiwgMSwgMjM1LCAyMywgCi0gICAgOTIsIDcsIDYsIDEsIDE1NiwgOTIsIDcsIDYsIDEsIDE5MywgOTIsIDcsIDYsIDEsIDIzMCwgMjUsIDkyLCA3LCA2LCAxLCAKLSAgICA3NiwgOTIsIDcsIDYsIDEsIDIyNiwgMTA1LCA5MiwgNywgNiwgMSwgMjI0LCA5NiwgOTIsIDcsIDYsIDEsIDE1MywgOTIsIDcsIAotICAgIDYsIDEsIDIyMiwgOTEsIDkyLCA3LCA2LCAxLCAyMTcsIDE1MiwgOTIsIDcsIDYsIDEsIDcwLCA5MiwgNywgNiwgMSwgMjE0LCAKLSAgICAxMDUsIDkyLCA3LCA2LCAxLCAyMTIsIDk4LCA5MiwgNywgNiwgMSwgMjExLCAxNzgsIDkyLCA3LCA2LCAxLCAyMTEsIDExNywgCi0gICAgOTIsIDcsIDYsIDEsIDIxMCwgMTU5LCA5MiwgMjQwLCAyMDEsIDkyLCAyMzAsIDQ5LCA5MiwgMjIxLCAxODMsIDkyLCAyMTgsIAotICAgIDIyNiwgOTIsIDIyNCwgMjE4LCA5MiwgMjEyLCAyMywgMTUyLCAzNywgNywgNiwgMSwgNjEsIDE1MiwgMzcsIDcsIDYsIDEsIAotICAgIDI1MywgMTU4LCAxNTIsIDM3LCA3LCA2LCAxLCAyNTEsIDY2LCAxNTIsIDM3LCA3LCA2LCAxLCAyNDksIDYwLCAxNTIsIDM3LCAKLSAgICA3LCA2LCAxLCA3NSwgMTUyLCAzNywgNywgNiwgMSwgMjQ1LCA2LCAxNTIsIDM3LCA3LCA2LCAxLCAyNDMsIDIwMiwgMTUyLCAKLSAgICAzNywgNywgNiwgMSwgMjQyLCA2MCwgMTUyLCAzNywgNywgNiwgMSwgNzMsIDE1MiwgMzcsIDcsIDYsIDEsIDIzNSwgMTQ0LCAKLSAgICAxNTIsIDM3LCA3LCA2LCAxLCAyMzUsIDIzLCAxNTIsIDM3LCA3LCA2LCAxLCAxNTYsIDE1MiwgMzcsIDcsIDYsIDEsIDE5MywgCi0gICAgMTUyLCAzNywgNywgNiwgMSwgMjMwLCAyNSwgMTUyLCAzNywgNywgNiwgMSwgNzYsIDE1MiwgMzcsIDcsIDYsIDEsIDIyNiwgCi0gICAgMTA1LCAxNTIsIDM3LCA3LCA2LCAxLCAyMjQsIDk2LCAxNTIsIDM3LCA3LCA2LCAxLCAxNTMsIDE1MiwgMzcsIDcsIDYsIDEsIAotICAgIDIyMiwgOTEsIDE1MiwgMzcsIDcsIDYsIDEsIDIxNywgMTUyLCAxNTIsIDM3LCA3LCA2LCAxLCA3MCwgMTUyLCAzNywgNywgNiwgCi0gICAgMSwgMjE0LCAxMDUsIDE1MiwgMzcsIDcsIDYsIDEsIDIxMiwgOTgsIDE1MiwgMzcsIDcsIDYsIDEsIDIxMSwgMTc4LCAxNTIsIAotICAgIDM3LCA3LCA2LCAxLCAyMTEsIDExNywgMTUyLCAzNywgNywgNiwgMSwgMjEwLCAxNTksIDIyMywgMTU3LCAyMzEsIDk3LCA1MCwgCi0gICAgMjIzLCAxNTcsIDIzMSwgOTQsIDUwLCAxNTIsIDkyLCA3LCA2LCAxLCA2MSwgMTUyLCA5MiwgNywgNiwgMSwgMjUzLCAxNTgsIAotICAgIDE1MiwgOTIsIDcsIDYsIDEsIDI1MSwgNjYsIDE1MiwgOTIsIDcsIDYsIDEsIDI0OSwgNjAsIDE1MiwgOTIsIDcsIDYsIDEsIAotICAgIDc1LCAxNTIsIDkyLCA3LCA2LCAxLCAyNDUsIDYsIDE1MiwgOTIsIDcsIDYsIDEsIDI0MywgMjAyLCAxNTIsIDkyLCA3LCA2LCAKLSAgICAxLCAyNDIsIDYwLCAxNTIsIDkyLCA3LCA2LCAxLCA3MywgMTUyLCA5MiwgNywgNiwgMSwgMjM1LCAxNDQsIDE1MiwgOTIsIDcsIAotICAgIDYsIDEsIDIzNSwgMjMsIDE1MiwgOTIsIDcsIDYsIDEsIDE1NiwgMTUyLCA5MiwgNywgNiwgMSwgMTkzLCAxNTIsIDkyLCA3LCAKLSAgICA2LCAxLCAyMzAsIDI1LCAxNTIsIDkyLCA3LCA2LCAxLCA3NiwgMTUyLCA5MiwgNywgNiwgMSwgMjI2LCAxMDUsIDE1MiwgOTIsIAotICAgIDcsIDYsIDEsIDIyNCwgOTYsIDE1MiwgOTIsIDcsIDYsIDEsIDE1MywgMTUyLCA5MiwgNywgNiwgMSwgMjIyLCA5MSwgMTUyLCAKLSAgICA5MiwgNywgNiwgMSwgMjE3LCAxNTIsIDE1MiwgOTIsIDcsIDYsIDEsIDcwLCAxNTIsIDkyLCA3LCA2LCAxLCAyMTQsIDEwNSwgCi0gICAgMTUyLCA5MiwgNywgNiwgMSwgMjEyLCA5OCwgMTUyLCA5MiwgNywgNiwgMSwgMjExLCAxNzgsIDE1MiwgOTIsIDcsIDYsIDEsIAotICAgIDIxMSwgMTE3LCAxNTIsIDkyLCA3LCA2LCAxLCAyMTAsIDE1OSwgMjQ5LCAxMjgsIDE1MiwgOTIsIDcsIDYsIDEsIDIyNiwgCi0gICAgMTA1LCAxNTIsIDkyLCAyNDAsIDExMywgMTUyLCA5MiwgMTkwLCAxNTIsIDkyLCAyMDYsIDE1MiwgOTIsIDI1NSwgMjUsIAotICAgIDE1MiwgOTIsIDIxMiwgMjMsIDQyLCAyNDcsIDE2NCwgOTIsIDI1MCwgMjMsIDkyLCAyNDksIDE3MCwgOTIsIDI0MywgMjUyLCAKLSAgICA5MiwgMjQwLCAxMDUsIDkyLCAyMjksIDg2LCA5MiwgMjI5LCA3OSwgOTIsIDIyNiwgMjE0LCA5MiwgMjE5LCAzNSwgOTIsIAotICAgIDEyMCwgMiwgMjQ1LCAzMSwgNzgsIDkyLCAyMTMsIDExOSwgMjIzLCAxMDMsIDIzNSwgMjM5LCAxNiwgMSwgNjEsIDIyMywgCi0gICAgMTAzLCAyMzUsIDIzOSwgMTYsIDEsIDI1MywgMTU4LCAyMjMsIDEwMywgMjM1LCAyMzksIDE2LCAxLCAyNTEsIDY2LCAyMjMsIAotICAgIDEwMywgMjM1LCAyMzksIDE2LCAxLCAyNDksIDYwLCAyMjMsIDEwMywgMjM1LCAyMzksIDE2LCAxLCA3NSwgMjIzLCAxMDMsIAotICAgIDIzNSwgMjM5LCAxNiwgMSwgMjQ1LCA2LCAyMjMsIDEwMywgMjM1LCAyMzksIDE2LCAxLCAyNDMsIDIwMiwgMjIzLCAxMDMsIAotICAgIDIzNSwgMjM5LCAxNiwgMSwgMjQyLCA2MCwgMjIzLCAxMDMsIDIzNSwgMjM5LCAxNiwgMSwgNzMsIDIyMywgMTAzLCAyMzUsIAotICAgIDIzOSwgMTYsIDEsIDIzNSwgMTQ0LCAyMjMsIDEwMywgMjM1LCAyMzksIDE2LCAxLCAyMzUsIDIzLCAyMjMsIDEwMywgMjM1LCAKLSAgICAyMzksIDE2LCAxLCAxNTYsIDIyMywgMTAzLCAyMzUsIDIzOSwgMTYsIDEsIDE5MywgMjIzLCAxMDMsIDIzNSwgMjM5LCAxNiwgCi0gICAgMSwgMjMwLCAyNSwgMjIzLCAxMDMsIDIzNSwgMjM5LCAxNiwgMSwgNzYsIDIyMywgMTAzLCAyMzUsIDIzOSwgMTYsIDEsIAotICAgIDIyNiwgMTA1LCAyMjMsIDEwMywgMjM1LCAyMzksIDE2LCAxLCAyMjQsIDk2LCAyMjMsIDEwMywgMjM1LCAyMzksIDE2LCAxLCAKLSAgICAxNTMsIDIyMywgMTAzLCAyMzUsIDIzOSwgMTYsIDEsIDIyMiwgOTEsIDIyMywgMTAzLCAyMzUsIDIzOSwgMTYsIDEsIDIxNywgCi0gICAgMTUyLCAyMjMsIDEwMywgMjM1LCAyMzksIDE2LCAxLCA3MCwgMjIzLCAxMDMsIDIzNSwgMjM5LCAxNiwgMSwgMjE0LCAxMDUsIAotICAgIDIyMywgMTAzLCAyMzUsIDIzOSwgMTYsIDEsIDIxMiwgOTgsIDIyMywgMTAzLCAyMzUsIDIzOSwgMTYsIDEsIDIxMSwgMTc4LCAKLSAgICAyMjMsIDEwMywgMjM1LCAyMzksIDE2LCAxLCAyMTEsIDExNywgMjIzLCAxMDMsIDIzNSwgMjM5LCAxNiwgMSwgMjEwLCAxNTksIAotICAgIDQyLCAxNDEsIDI0MSwgNjMsIDkyLCA1NiwgMjM0LCAxOCwgOTIsIDU2LCAyMDYsIDkyLCA5LCAyMTQsIDE3NywgMjM4LCA1MCwgCi0gICAgOTIsIDksIDIxNCwgMTc3LCAyMzgsIDU0LCA5MiwgOSwgMjE0LCAxNzcsIDIzOCwgNjIsIDkyLCA1NiwgMjQ4LCA5MCwgOTIsIAotICAgIDksIDIxNCwgMTc3LCAyMzgsIDY5LCA5MiwgOSwgMjE0LCAxNzcsIDIzOCwgNTYsIDkyLCA5LCAyMTQsIDE3NywgMjM4LCAyOCwgCi0gICAgOTIsIDksIDIxNCwgMTc3LCAyMzgsIDU1LCA5MiwgOSwgMjE0LCAxNzcsIDIzOCwgNjgsIDkyLCA5LCAyMTQsIDE3NywgMjM4LCAKLSAgICA0MiwgOTIsIDksIDIxNCwgMTc3LCAyMzgsIDM1LCA5MiwgOSwgMjE0LCAxNzcsIDIzOCwgNDQsIDkyLCA5LCAyMTQsIDE3NywgCi0gICAgMjM4LCA2NSwgOTIsIDksIDIxNCwgMTc3LCAyMzgsIDUxLCA5MiwgOSwgMjE0LCAxNzcsIDIzOCwgNjcsIDkyLCA5LCAyMTQsIAotICAgIDE3NywgMjM4LCA0MywgOTIsIDksIDIxNCwgMTc3LCAyMzgsIDY2LCA5MiwgOSwgMjE0LCAxNzcsIDIzOCwgMjksIDkyLCA5LCAKLSAgICAyMTQsIDE3NywgMjM4LCAzNCwgOTIsIDksIDIxNCwgMTc3LCAyMzgsIDI3LCA5MiwgOSwgMjE0LCAxNzcsIDIzOCwgNTcsIAotICAgIDkyLCA5LCAyMTQsIDE3NywgMjM4LCA1OSwgOTIsIDksIDIxNCwgMTc3LCAyMzgsIDM3LCA5MiwgOSwgMjE0LCAxNzcsIDIzOCwgCi0gICAgNDgsIDkyLCA5LCAyMTQsIDE3NywgMjM4LCA0NiwgOTIsIDksIDIxNCwgMTc3LCAyMzgsIDcyLCA5MiwgOSwgMjE0LCAxNzcsIAotICAgIDIzOCwgNzEsIDkyLCA5LCAyMTQsIDE3NywgMjM4LCAyNSwgOTIsIDksIDIxNCwgMTc3LCAyMzgsIDUyLCA5MiwgOSwgMjE0LCAKLSAgICAxNzcsIDIzOCwgNzAsIDkyLCA5LCAyMTQsIDE3NywgMjM4LCA2MSwgOTIsIDksIDIxNCwgMTc3LCAyMzgsIDQ3LCA5MiwgOSwgCi0gICAgMjE0LCAxNzcsIDIzOCwgMjYsIDkyLCA5LCAyMTQsIDE3NywgMjM4LCA0OSwgOTIsIDksIDIxNCwgMTc3LCAyMzgsIDMxLCAKLSAgICA5MiwgOSwgMjE0LCAxNzcsIDIzOCwgMzAsIDkyLCA5LCAyMTQsIDE3NywgMjM4LCA2MCwgOTIsIDksIDIxNCwgMTc3LCAyMzgsIAotICAgIDM4LCA5MiwgOSwgMjE0LCAxNzcsIDIzOCwgNDAsIDkyLCA5LCAyMTQsIDE3NywgMjM4LCA0MSwgOTIsIDksIDIxNCwgMTc3LCAKLSAgICAyMzgsIDMzLCA5MiwgOSwgMjE0LCAxNzcsIDIzOCwgNjQsIDkyLCA5LCAyMTQsIDE3NywgMjM4LCA1OCwgMjE2LCA2LCAyMjAsIAotICAgIDUzLCAyNTEsIDE1NywgOSwgMjE0LCAxNzcsIDIzOCwgMzksIDIxNiwgNiwgMjIwLCA1MywgMjUxLCAxNTcsIDksIDIxNCwgCi0gICAgMTc3LCAyMzgsIDcxLCAyMTYsIDYsIDIyMCwgNTMsIDI1MSwgMTU3LCA5LCAyMTQsIDE3NywgMjM4LCA2OSwgMjE2LCA2LCAKLSAgICAyMjAsIDUzLCAyNTEsIDE1NywgOSwgMjE0LCAxNzcsIDIzOCwgNTMsIDIxNiwgNiwgMjIwLCA1MywgMjUxLCAxNTcsIDksIAotICAgIDIxNCwgMTc3LCAyMzgsIDM2LCAyMTYsIDYsIDIyMCwgNTMsIDI1MSwgMTU3LCA5LCAyMTQsIDE3NywgMjM4LCA0OSwgMjE2LCAKLSAgICA2LCAyMjAsIDUzLCAyNTEsIDE1NywgOSwgMjE0LCAxNzcsIDIzOCwgMzIsIDIxNiwgNiwgMjIwLCA1MywgMjUxLCAxNTcsIDksIAotICAgIDIxNCwgMTc3LCAyMzgsIDYzLCAyMTYsIDYsIDIyMCwgNTMsIDI1MSwgMTU3LCA5LCAyMTQsIDE3NywgMjM4LCA0NSwgMzcsIAotICAgIDE1NCwgMjU0LCAyNDUsIDM3LCAxNTQsIDI1NSwgMTIsIDI0OSwgNzEsIDI0NCwgNDIsIDI1MCwgMCwgMjE0LCAxOTQsIDIyOCwgCi0gICAgMjEzLCAyLCAyMTgsIDE1MywgMjE4LCAzMywgMTE3LCAyMzAsIDExNCwgMjE4LCAzMiwgMjUwLCAyNiwgMjUzLCAyMDcsIAotICAgIDI0NiwgNTQsIDIxOCwgMzEsIDExNywgMjUxLCAxMTgsIDIyMywgMTU4LCAyNTEsIDE0MCwgMjUzLCAyMDcsIDIyOCwgMjEyLCAKLSAgICAyMTIsIDQxLCAyMTIsIDM1LCAyMTMsIDEzMSwgMjMwLCAxOTUsIDIxMiwgMjUsIDI0NSwgMjI0LCAyNDIsIDE4MSwgMjQ1LCAKLSAgICA0NSwgMjQ1LCAyMjQsIDI0MiwgMTgxLCAyNTQsIDEyOCwgMjQ1LCAyMjQsIDI0MiwgMTgxLCAyNTMsIDIyNSwgMjQyLCAxODEsIAotICAgIDIsIDIzMSwgNTEsIDE2NiwgMjMwLCAxMjksIDg3LCAyMTIsIDI3LCAyNDksIDEzNywgMjMwLCAxMjksIDg3LCAyNDQsIDkyLCAKLSAgICAyMjQsIDIyLCAyMzAsIDEyOSwgODcsIDIxMiwgMjcsIDI0MiwgMjEwLCAyMzAsIDEyOSwgODcsIDI0MywgMjI5LCAyMzAsIAotICAgIDEyOSwgODcsIDIxMiwgNTIsIDI0MiwgMjEwLCAyMzAsIDEyOSwgODcsIDIzMywgODAsIDIyNCwgMjIsIDIzMCwgMTI5LCA4NywgCi0gICAgMjEyLCA1MiwgMjQ5LCAxMzcsIDIzMCwgMTI5LCA4NywgMjQ5LCAxMzcsIDIzMCwgMTI4LCAxNjYsIDIzMCwgMTI5LCAyLCAKLSAgICAyNDQsIDE5MCwgMjQ0LCA5MiwgMjI0LCAyMiwgMjMwLCAxMjksIDIsIDI0NCwgMTkwLCAyMzMsIDgwLCAyMjQsIDIyLCAyMzAsIAotICAgIDEyOSwgMiwgMjQ0LCAxOTAsIDI0MywgMjI5LCAyMzAsIDEyOSwgMiwgMjQ0LCAxOTAsIDIxOCwgMzgsIDIsIDI0NCwgMTkwLCAKLSAgICAyNDIsIDE3OSwgMjE4LCAxNTYsIDIxOSwgMjU1LCAyMTgsIDE1NiwgMjUwLCAxMTYsIDIyMSwgMTY4LCAyNDUsIDM5LCAyMTUsIAotICAgIDIzNSwgMjQ4LCA4NCwgMjE1LCAyMzUsIDIyNiwgNTksIDIxNSwgMjM1LCAyNTEsIDI3LCAyMTUsIDEwOSwgMjUwLCAxMTgsIAotICAgIDI1MSwgMjEwLCAyMjIsIDE5MSwgMjQxLCAxNzksIDIxOCwgMzYsIDI1MSwgMjEwLCAyNDUsIDIyOCwgNjQsIDIzMSwgMTk0LCAKLSAgICAyNDUsIDIyOCwgNjQsIDIyMywgMzEsIDI0MSwgMjA0LCAyNDQsIDExLCAyMzMsIDU0LCAyNDksIDI0NiwgMjMxLCAxNzAsIAotICAgIDIzMywgNTMsIDI0NCwgMTc2LCAyMzMsIDUzLCAyMzMsIDU0LCAyNDQsIDQ3LCAyMzYsIDAsIDIxMSwgMjM5LCAyMzAsIDU4LCAKLSAgICAyMTYsIDM0LCAyNTMsIDE5MSwgMjQyLCAxNDMsIDIzMSwgNjcsIDIxMiwgMzksIDIxNywgNTcsIDIzMywgMjYsIDI1MiwgCi0gICAgMTQ5LCAyMjUsIDYyLCAyMjMsIDExMSwgMjU0LCA1NCwgMjQyLCAxMjcsIDI1NCwgNTQsIDIyNSwgMjE3LCAyMjUsIDIxOCwgCi0gICAgMjUwLCAxMTksIDIxOCwgMTE0LCAyNDIsIDIzLCAyMTksIDkwLCA2NCwgMjI1LCA0NCwgMjMxLCA4NywgMjI2LCAxOTcsIAotICAgIDI1MSwgMTk0LCAyMjQsIDIyOSwgMjMzLCAzNiwgMjIzLCAzMiwgMjQ5LCAxNDIsIDIyMywgMzIsIDI1MiwgMTU5LCAyNDksIAotICAgIDE3MywgMjIzLCAzMSwgMjQ5LCA5NSwgMjIsIDIyMywgMzEsIDIxOCwgMTQxLCAyNTEsIDE2NywgMjE5LCAxNCwgMjUxLCAKLSAgICAxNTEsIDI0MywgMjUxLCAyNDMsIDI0NywgMjIyLCAyMDcsIDIxNywgMjQ2LCAyMjQsIDIzMSwgMjQ4LCAxNzUsIDIyNiwgCi0gICAgMjM2LCAyMTgsIDcsIDI0MywgMjQ4LCAyMTksIDIzMCwgMjQ0LCA5MSwgMjUxLCAyMSwgMiwgMjE3LCAyMzksIDI0OCwgMzUsIAotICAgIDIxOSwgNTIsIDI0MCwgMTEyLCAyNDksIDE0MSwgMjIwLCA3MCwgMjQwLCAxMTEsIDI0MCwgMTEyLCAyNDksIDE0MSwgMjQ2LCAKLSAgICAxMDgsIDI0OSwgMTcyLCAyNTAsIDg0LCAxMzAsIDI1MCwgMjU0LCAyMzIsIDE0MSwgMjQ5LCA4OCwgMjQxLCA1NSwgMjI0LCAKLSAgICAyMzMsIDIxOSwgMjQwLCAyNTIsIDM2LCAyNTEsIDE2MywgMjI0LCAyMzQsIDY0LCAyNDQsIDMzLCAyNDksIDE3MSwgMjQ0LCAKLSAgICAyNCwgMjIsIDIzNCwgMzIsIDIxNywgMTksIDIxMSwgMjMwLCAyNDIsIDEzLCAyMjIsIDEyLCAyNTEsIDE3NywgMjIsIDI0OSwgCi0gICAgMTAyLCAyMTEsIDIzNywgMjQyLCAxODQsIDI0OSwgMjM1LCAyNDIsIDE4NCwgMjE1LCAxOTMsIDI0NiwgOTAsIDI1MiwgNjIsIAotICAgIDIzMCwgOTMsIDI1MCwgNywgMjUyLCA2MiwgMjMwLCA5MiwgMjUyLCAxODcsIDI1MSwgMTc2LCAyMjMsIDMzLCAyMTEsIDIwMSwgCi0gICAgMjI0LCAxOTUsIDI1MSwgMjM1LCAyNTEsIDIwLCAyMzUsIDEzOCwgMjUwLCA3NywgMjE1LCAyMzUsIDI0NCwgMTYyLCAyNTAsIAotICAgIDc2LCAyNDQsIDk0LCAyNDQsIDk1LCAyMTksIDEyLCAyNTIsIDE1OCwgMjI1LCAyNTAsIDIyNCwgMjQ0LCAyNDksIDIwNCwgCi0gICAgMjUyLCAxNTksIDIxNywgNTksIDIxNSwgMjM1LCAyNDksIDEyOCwgMjQ0LCA2NywgMjI1LCA2MywgMjQ4LCA4MSwgMjM1LCAKLSAgICAxMzEsIDI0NywgMTMxLCAyNTAsIDIzMiwgMjE4LCAxMTMsIDIxMSwgMjQwLCAyNTAsIDk4LCAyMzAsIDEyOSwgMjEzLCAxNjQsIAotICAgIDI1MCwgMTYyLCAyMjEsIDE5OSwgMjIxLCAyMjQsIDI0MiwgMTQ4LCAyNTAsIDI1MSwgMjUwLCAyMzMsIDI0MCwgMjQ1LCAKLSAgICAyNDQsIDEzMCwgMjEyLCAwLCAyMjIsIDIwMCwgMjQ5LCAyMzYsIDI0NCwgODYsIDIyNSwgMiwgMjIsIDI0NCwgOTAsIDIzMCwgCi0gICAgMjI3LCAyMzAsIDEwOCwgMjUxLCAxMCwgMjUwLCAzOSwgMjQxLCAyMzIsIDI1MywgMjQxLCAyMjYsIDYyLCAyMTYsIDE0LCAKLSAgICAyNDEsIDI1MSwgMjUwLCAyOSwgMjE2LCAyNDIsIDIxNiwgMTEzLCAyNTAsIDIwLCAyNTEsIDIwMiwgMjI1LCAxNzcsIDI1MywgCi0gICAgMjQwLCAyMTMsIDE3MiwgMjQzLCAxMTAsIDI0NywgMTk3LCAyNDEsIDE1NiwgMjE5LCA4NCwgMjMxLCAyMzQsIDI1MSwgMjQ1LCAKLSAgICAyNDMsIDExMSwgMjQ3LCAyNDAsIDI1MSwgMTY2LCAyNDQsIDUyLCAyMjUsIDMzLCAyNTAsIDI0MSwgMjgsIDIyOCwgNDcsIAotICAgIDIzMCwgODUsIDI4LCAyMjgsIDQyLCAyMjEsIDIxMiwgMjQyLCA5OSwgMjgsIDIzNCwgMTM3LCAyMTUsIDE5MCwgMjEzLCAKLSAgICAxNTQsIDI4LCAyMjEsIDE5MiwgMjIyLCAxMjQsIDIyMCwgMTEsIDIsIDIyMSwgMjI3LCAyMTYsIDI0NCwgMjIzLCAxNzgsIAotICAgIDIyLCAyNTIsIDE1OSwgMjE5LCAxMDUsIDIyLCAyMTksIDEwNSwgMjUxLCAxODcsIDI1MiwgMTIzLCAyMiwgMjQxLCA0OSwgCi0gICAgMjUwLCAxMjAsIDI0NCwgNzMsIDIxOSwgNjMsIDIyMiwgMTI1LCAyMTgsIDEyLCAyMTUsIDE5NCwgMjQwLCAyNDYsIDIyMywgCi0gICAgMTc5LCAyNTQsIDEyOSwgMjQ0LCAzMSwgMjIyLCAxMzYsIDI0NCwgMzEsIDIxNywgMjQxLCAyNDAsIDIzNSwgMjUxLCAxMTksIAotICAgIDI0MCwgMjM1LCAyLCAyNDMsIDk0LCAyMjYsIDIyOSwgMjUxLCAxMTksIDIzNSwgMTMxLCAyMjQsIDIzOSwgMjI2LCAyMjgsIAotICAgIDI0NSwgNDQsIDIyNCwgMjM5LCAyMjYsIDIyOCwgMjQwLCAyNDQsIDI1MiwgMTQ1LCAyNTMsIDE4MSwgMjE2LCAyNTIsIDIzMSwgCi0gICAgMjM0LCAyNDAsIDI0MCwgMjMyLCAxMTEsIDI0MCwgMjQwLCAyNDksIDE3NiwgMjE4LCAxMjUsIDIyMSwgMTk4LCAyNDgsIDQzLCAKLSAgICAyMTgsIDEyNSwgMjQ0LCAxODAsIDIzNSwgMTQ5LCAyMzMsIDg5LCAyMzUsIDEzMSwgMjUwLCAyMjYsIDI0NSwgNDQsIDI1MCwgCi0gICAgMjI2LCAyMjMsIDE0MSwgMjMwLCAxMTIsIDIyNiwgMTE0LCAyMTIsIDQxLCAyNTEsIDEyMywgMjQ5LCAxNDUsIDIxNiwgMTA2LCAKLSAgICAyMzMsIDE4LCAyMjMsIDE4MCwgMjUwLCAyMjQsIDI0NiwgOTYsIDI0OSwgMTM1LCAyMTIsIDMsIDIxOSwgNzAsIDIxOSwgNjgsIAotICAgIDI0MCwgMjQ1LCAyMjMsIDE1MywgMjQyLCAxNzAsIDIyMCwgNTcsIDIzMCwgMTQ1LCAyMjIsIDE5NCwgMjUwLCAxMDgsIDI0NywgCi0gICAgMTM2LCAyMjUsIDczLCAyNTEsIDIwMywgMjQ1LCAxNjksIDIyNiwgMjM4LCAyMTgsIDI1MiwgMjIwLCA1MiwgMjUxLCAxMjIsIAotICAgIDI1NCwgOTIsIDI0MSwgNTQsIDIzMywgMTIxLCAyNTIsIDYwLCAyNDQsIDkwLCAyMTUsIDE5MywgMjQ0LCA5MCwgMjUxLCAKLSAgICAyMDksIDIxNSwgOTEsIDI0MSwgMjQ5LCAyNTAsIDEwOSwgMjUyLCAxODcsIDI1MCwgMTA5LCAyNDMsIDI0MiwgMjUyLCAxODcsIAotICAgIDI1MCwgMTA5LCAyNTEsIDIzNywgMjI1LCAxOTUsIDIzNCwgMjYsIDIyNCwgMjQ4LCAyNDYsIDg3LCAyNTEsIDExLCAyNTIsIAotICAgIDE3NywgMjUxLCAxMSwgMjQ3LCAxMzAsIDIzMCwgMTEzLCAyNDQsIDE5MCwgMjQ5LCAxNDYsIDI0NCwgMTkwLCAyMTYsIDEwNywgCi0gICAgMjQ0LCAxOTAsIDIyMywgMTgxLCAyNDQsIDE5MCwgMjUwLCAyMjUsIDI0NCwgMTkwLCAyNDYsIDk3LCAyNDQsIDE5MCwgMjE4LCAKLSAgICAyNDEsIDIxMiwgMywgMjQwLCAyNDYsIDI0NCwgMTkwLCAyMzAsIDE0NiwgMjQ0LCAxOTAsIDI0NywgMTM3LCAyNDQsIDE5MCwgCi0gICAgMjI1LCA3NCwgMjQ0LCAxOTAsIDI0MywgMjQ1LCAyNDQsIDE5MCwgMjQyLCAyMCwgMjQ0LCAxOTAsIDIxMSwgMjI0LCAyNDQsIAotICAgIDE5MCwgMjUyLCA3MSwgMjQ0LCAxOTAsIDIyNiwgNDUsIDI0NCwgMTkwLCAyMjUsIDc0LCAyMjgsIDUzLCAyMjUsIDIzMiwgCi0gICAgMjI0LCAxODYsIDI0NSwgMTMsIDI0NSwgMjI3LCAyMjgsIDUzLCAyMzAsIDExMCwgMjE2LCAxOSwgNzEsIDEyMCwgMjI1LCA3LCAKLSAgICAyNTIsIDE4MiwgMjM1LCAyNDIsIDcxLCAxMjQsIDIyNSwgNywgMjUyLCAxODIsIDIzNSwgMjQyLCA3MSwgNDMsIDIyNSwgNywgCi0gICAgMjUyLCAxODIsIDIzNSwgMjQyLCA3MSwgNDQsIDIyNSwgNywgMjUyLCAxODIsIDIzNSwgMjQyLCAyNDQsIDg0LCAyNDIsIDE2LCAKLSAgICA1MCwgMjEyLCAzMywgMjQyLCAxNiwgNTAsIDIyNiwgMjE1LCAyNDIsIDE2LCA1MCwgMjE2LCAxMzUsIDEyMCwgNTAsIDIxNiwgCi0gICAgMTM1LCAxMjQsIDUwLCAyNTAsIDE5LCAyNDIsIDExLCA1MCwgMjA0LCAyNDIsIDExLCA1MCwgMjQ5LCAxMjMsIDIxMSwgMjIwLCAKLSAgICAyNDEsIDI1MSwgMjQ1LCAxNCwgMjI5LCAxMDQsIDIxNywgMTUxLCAyMzUsIDEyNSwgMjQ2LCA5MiwgMjM0LCA4MiwgMjUxLCAKLSAgICAyNDcsIDIxMSwgMjIwLCAyNDksIDI0OSwgMjI0LCAxMjcsIDI0MiwgMTQsIDIyNCwgMjMwLCAyMzEsIDE3NywgMjIwLCA0LCAKLSAgICAyNTMsIDIwMywgMjIwLCA0LCAyNDEsIDE2NCwgMjIwLCA0LCAyMTEsIDIyMCwgMjIxLCAyNDAsIDIxMSwgMjIwLCAyNTEsIAotICAgIDE4NiwgMjQ0LCAyOSwgMjUxLCA5MCwgMjM2LCAwLCAyMTksIDE2OSwgMjUxLCA4OSwgMjM2LCAwLCAyMTksIDE2OSwgMjUxLCAKLSAgICAxNjIsIDI0MiwgMTk0LCAyMzEsIDE4NSwgMjExLCAyMjEsIDI0NCwgMTc0LCAyMzEsIDE4NiwgMjIsIDIxMSwgMjIyLCAyNDEsIAotICAgIDYwLCAyNDIsIDEwLCAxMTMsIDIzMSwgNTksIDI0MSwgNjAsIDI0MiwgMTAsIDExMywgMjExLCAyMTksIDI0MSwgNjAsIDI0MiwgCi0gICAgMTAsIDIyNCwgMjU1LCAyMjYsIDIyNywgMjExLCAyMjIsIDIsIDI1MSwgMTA2LCAyNDUsIDIyNSwgMjUxLCAxNDEsIDIsIAotICAgIDIxMywgMjQ2LCAyMjUsIDE2OCwgMiwgMjUxLCAyMTIsIDI0MiwgMzQsIDIzMSwgMTg2LCAyLCAyNDIsIDExMCwgMjI1LCAKLSAgICAxMDksIDIzMSwgMTc0LCAyMzEsIDE4NiwgMiwgMjE1LCA5NywgMjI2LCAyMDgsIDIzMSwgMTg1LCAyMjYsIDIwOCwgMjExLCAKLSAgICAyMjEsIDI1MiwgMTg2LCAyNDksIDE5MCwgMjExLCAyMDUsIDIyNCwgMTg5LCAyMzUsIDEzMSwgMjI2LCAyMjMsIDIzNSwgCi0gICAgMTMxLCAyNDIsIDE2OSwgMjQyLCAyMjIsIDI1MiwgMTg3LCAyNTQsIDExMywgMjQ1LCAxOCwgMjU0LCAxNjAsIDI1NCwgMTYxLCAKLSAgICAyMzAsIDEzNiwgMjM2LCA1LCAyMTksIDEwMCwgMjM1LCAyMzIsIDI0OCwgMzQsIDIyNSwgMTY3LCAyNDIsIDEwNSwgMjQ4LCAKLSAgICAxNzksIDIzMiwgMjAxLCAyMjksIDIxMSwgMjI0LCAyNTQsIDI0NCwgMTkxLCAyMzEsIDE0MiwgMjQyLCAzMywgMjUyLCAxMzgsIAotICAgIDIyNSwgMSwgMjE3LCAxNzEsIDIyNSwgNjYsIDIzNCwgNjQsIDc4LCAyMzIsIDExMSwgMjMzLCAxMCwgMjIyLCAyMzMsIDI0MywgCi0gICAgNTQsIDIxOCwgMTMxLCAyMzQsIDYzLCAyNTEsIDE3MSwgMjQ5LCAxNDgsIDIsIDI0MSwgMjI3LCAyMTIsIDE5LCAyNTIsIDY5LCAKLSAgICAyNDEsIDIyNywgMjUxLCAxMzUsIDI0MSwgMjI3LCAxMTMsIDI0MSwgMjI1LCAyMTksIDEwLCAyNDEsIDIyNywgMjQyLCAxMjAsIAotICAgIDI0MSwgMjI3LCAyNDEsIDIyOCwgMiwgNzQsIDI1MSwgMjA4LCAyNDEsIDIyNywgMjQyLCAxMjcsIDI0MSwgMjI3LCAyMTEsIAotICAgIDQyLCAyNDEsIDIyNywgMjI0LCAxMjgsIDI0MSwgMjI3LCAyNDEsIDIyOCwgMiwgMjIzLCAzMywgMjIzLCA0NCwgMjQxLCAKLSAgICAyMjUsIDI0MSwgMjI4LCAyNDgsIDgxLCAyNDcsIDI0OSwgMjIwLCA4MiwgMiwgMTE1LCA1OSwgMjM1LCAyMTUsIDI0NSwgCi0gICAgMTcyLCAxOTIsIDI1MSwgMTE2LCAyNTQsIDExMiwgODcsIDI1MSwgMTk1LCAyMTksIDkyLCA4NywgMjQ5LCAyMjgsIDg3LCAKLSAgICAyMTgsIDI0NiwgMjE3LCAyNDgsIDg3LCAyNDYsIDg1LCAyNDgsIDE1NywgODcsIDIyNSwgNjcsIDY0LCAyMjQsIDI0OSwgCi0gICAgMjQ0LCA2MSwgMjUyLCAzLCAyNDcsIDE2NSwgODcsIDIxOSwgMywgMjUyLCAxNTgsIDIxNiwgMTQ5LCAyNTIsIDE1OCwgNzEsIAotICAgIDI0NCwgNTEsIDI0MCwgMjExLCAyMjUsIDUsIDg3LCAyMzAsIDE0OSwgMjUyLCAxNzIsIDI0OSwgOTgsIDI0NSwgMzIsIDExNCwgCi0gICAgMjQ3LCAxMzIsIDUwLCAyNDksIDEzOSwgMjUwLCAyNDIsIDI1MiwgMTQ0LCAyLCAyMTEsIDQwLCA1MCwgMjUyLCAxNDQsIDIsIAotICAgIDI0NywgMTMyLCA1MCwgMjUyLCAxNDQsIDIsIDI0NSwgNDcsIDUwLCAyNTIsIDE0NCwgMiwgMjI0LCAyMjgsIDUwLCAyMzAsIAotICAgIDE0OSwgMiwgMjExLCAyMzUsIDI1MCwgMTM4LCAyLCAyMTQsIDE1MywgMjE1LCAyMzEsIDIyLCAyMTEsIDQwLCA1MCwgMjIxLCAKLSAgICAxNzgsIDIyNSwgMTY2LCAyNDksIDIwOCwgMjUxLCAxMzksIDIzMCwgMTg2LCAyNDQsIDU2LCAyNDcsIDE4NSwgMjI2LCAxNjEsIAotICAgIDI0NywgMTkwLCAyNDYsIDQ5LCAyNDQsIDEwNywgMjQ0LCA0MCwgMjA0LCAyNDQsIDEwNywgMjQ0LCA0MCwgMjI2LCA3NiwgMiwgCi0gICAgMjQ5LCAxMDAsIDIyNiwgNzYsIDI0NCwgMTgzLCAyMTQsIDE2MywgMjUxLCAxNiwgMjE3LCAxOCwgMjUxLCAxNiwgMjUwLCAKLSAgICAyNDMsIDIzNSwgMjQyLCAyNTAsIDEzOCwgMiwgMjE0LCAxNTMsIDIxNSwgMjMwLCAyNTAsIDEzOCwgMiwgMjQ2LCAxMDQsIAotICAgIDIxNSwgMjMwLCAyNTIsIDE0MSwgMjUwLCAxMzcsIDI1MCwgNiwgMjI0LCAxMjMsIDIyMiwgMTg1LCAyMjQsIDEyMywgMjI2LCAKLSAgICAxOSwgMjE4LCAxMjEsIDIyMiwgMTMxLCAyMTUsIDIyMiwgMjIyLCAxMzEsIDI1MSwgMTkxLCAyMTcsIDkxLCAyMzMsIDUxLCAKLSAgICAyMjgsIDQ1LCAyMjgsIDQ2LCAyLCAyNDgsIDgwLCAyNDksIDE0NywgMjUwLCAwLCAyNTEsIDE5MiwgMjA0LCAyNTEsIDE5MiwgCi0gICAgMjQyLCAxMjcsIDI1MSwgMTkyLCAyNTEsIDIwOCwgMjUxLCAxOTIsIDIyNiwgMTU3LCAyNTEsIDE5MiwgMjUxLCAxODksIAotICAgIDIyOSwgMjA1LCAyNTIsIDE3NSwgMjIxLCAxODYsIDIzMSwgNjAsIDIxNywgMSwgMjIzLCAxMjMsIDIyNiwgNzQsIDI0NCwgCi0gICAgMTU5LCAyMzEsIDIzNCwgMjIxLCAyMjMsIDI1NCwgODksIDIyNCwgMTQ1LCAyNTQsIDI1MiwgMjMyLCAxMTMsIDI1MCwgMTI3LCAKLSAgICAyMzEsIDcyLCAyMjYsIDEyOSwgMjE1LCAyMzgsIDIzNSwgMjUyLCAyMTUsIDIzOCwgMjI2LCA4MiwgMjQ2LCAyNCwgODcsIAotICAgIDIzNSwgMjQ5LCAyNDUsIDExOSwgMjQ1LCAxMjAsIDIsIDI0NiwgMTA0LCA4MCwgNDgsIDI1MCwgMCwgMjMxLCAyMDAsIDIsIAotICAgIDIzMiwgMTA3LCAyNDQsIDczLCAyNTAsIDAsIDIzMSwgMjAwLCAyLCAyMjMsIDE1NywgMjQ0LCA3MywgMjA0LCAyMzEsIDIwMCwgCi0gICAgMiwgMjIzLCAxNTcsIDI0NCwgNzMsIDIwNCwgMjMxLCAyMDAsIDIsIDIzMiwgMTA3LCAyNDQsIDczLCAyMjQsIDIzNiwgMjI0LCAKLSAgICAyMzcsIDI0MCwgMjQ4LCAyMjksIDg0LCAyMzAsIDE1OSwgMjI1LCAxMTcsIDIzMCwgMTU5LCAyMjUsIDExOCwgMiwgOTcsIAotICAgIDgwLCAyNTMsIDIwNywgMjMzLCA0NiwgMjEzLCAxNzUsIDIzMCwgMTU4LCAyMzAsIDE1OSwgMjI1LCAxMTgsIDIyNiwgMjMwLCAKLSAgICAyMjgsIDc1LCAyMzAsIDE1OSwgMjI1LCAxMTYsIDI1NCwgOTAsIDIsIDI1MiwgMTI5LCAyNTEsIDEwLCAyMTMsIDE3MiwgCi0gICAgMjUxLCAxMCwgMjE2LCAyNTQsIDIyMywgMTczLCAyMTMsIDE3MSwgMjE1LCA2MCwgOTcsIDI1MywgMjQ3LCAyNTAsIDIsIDk3LCAKLSAgICAyMiwgMTQwLCAyMDQsIDI1MCwgMzYsIDI1MywgMjQ3LCAyNTAsIDIsIDk3LCAyMiwgMTQwLCAyMDQsIDI1MCwgMzYsIDI1MywgCi0gICAgMjQ4LCAyLCAzNywgMTIzLCAyMjYsIDEyMCwgMjUwLCAyLCAyNDYsIDEwNCwgMjIsIDIxNCwgMTUzLCAyMDQsIDI1MCwgMzYsIAotICAgIDI1MywgMjQ3LCAyNTQsIDg4LCAyNDYsIDEwNCwgMjIsIDIxNCwgMTUzLCAyMDQsIDI1MCwgMzYsIDI1MywgMjQ3LCAxMjEsIAotICAgIDI1MSwgMTM4LCA4NywgMTI1LCAyNTEsIDEzOCwgODcsIDIxOSwgNywgMiwgMjUxLCA0LCA5MSwgMjE5LCA2LCAyMTksIDcsIAotICAgIDIsIDEyMywgMjE5LCAzMSwgMjEyLCAzNSwgMjE5LCA3LCAyLCAxMzQsIDIxOSwgMzEsIDIxMiwgMzQsIDI1MiwgMTE1LCAKLSAgICAyNDUsIDE3MiwgMjI1LCAyNywgMjMzLCA0MiwgMjMxLCAyMTEsIDI0MiwgMTg0LCAyMjIsIDI0NywgMjMxLCAyMTEsIDI0MiwgCi0gICAgMTg0LCAyMzIsIDE1MiwgMiwgMjM1LCAyMjUsIDIyNSwgMTk5LCAyNTAsIDAsIDIzMiwgMTUyLCAyLCAyMzQsIDEzOCwgMjM0LCAKLSAgICAxMzgsIDIzMiwgMTUxLCAyMDQsIDIzMiwgMTUxLCAyNTIsIDQ0LCAyNTIsIDQ1LCAyLCAyNTEsIDQsIDkxLCAyNTEsIDE5MCwgCi0gICAgMjMyLCAyMDQsIDg3LCAyMjMsIDE3NCwgMjUxLCA4NiwgMjUyLCAxODUsIDIsIDE0MCwgODAsIDQ4LCAyNDUsIDE0MywgMiwgCi0gICAgMTQwLCA4MCwgNDgsIDIyNiwgMTk3LCAyLCAyNDUsIDMxLCAxNjQsIDIsIDQzLCA0NCwgODAsIDQ4LCAyMTksIDM5LCAyLCAKLSAgICA5NywgODAsIDQ4LCAyMTYsIDE0LCAyLCAyMTQsIDE1MywgODAsIDQ4LCAyMjgsIDc1LCAxMjMsIDIxNCwgMTg0LCAyNDUsIAotICAgIDE5MSwgODcsIDIzNCwgMTM2LCAyMTYsIDI0NywgMjM1LCAyMTksIDE2LCAzMSwgNywgNiwgMjMzLCA5LCAyMzUsIDIxOSwgCi0gICAgMTYsIDMxLCA3LCA0LCAyMzMsIDksIDIzNSwgMjE5LCAxNiwgMzEsIDIyNywgMTk5LCAyMzUsIDIxOSwgMTYsIDMxLCAyMTcsIAotICAgIDE4MywgMjM1LCAyMTksIDE2LCAzMSwgNywgMjMzLCA5LCAyNDQsIDk2LCAyNDUsIDE3MiwgMjE2LCA5LCAyMTEsIDE5OSwgCi0gICAgMjQyLCAyMSwgMjI3LCAxODIsIDIyLCAyNTEsIDE5NywgMjQxLCA2NiwgMjI1LCA1MCwgMjMwLCAyMjYsIDIxNiwgMjU1LCAKLSAgICAyNDksIDExNCwgMjUyLCAxNTksIDIxOSwgMTI1LCAyMjUsIDksIDIxOCwgMTU3LCAyLCAyMzAsIDIyNCwgMjQ3LCAxMjAsIAotICAgIDIzNSwgMTMxLCAxNiwgMzEsIDI1MiwgNTcsIDIxNSwgMjIwLCAyNDUsIDE1NiwgODUsIDQyLCAyNTEsIDg2LCA3MSwgNDIsIAotICAgIDI1MSwgODYsIDIzMywgODUsIDIyMywgMTExLCAyNTAsIDM1LCAyMzMsIDg1LCAyNTEsIDIwOCwgMjUwLCAzNSwgMjMzLCA4NSwgCi0gICAgMjI2LCAxNTcsIDI0NywgMjQ4LCAyMzMsIDg1LCAyNTEsIDIwOCwgMjQ3LCAyNDgsIDQsIDIyNiwgMTU3LCAyNDcsIDI0OCwgCi0gICAgNCwgMjUxLCAyMDgsIDI0NywgMjQ4LCAyMTQsIDE2MiwgMjIzLCAxMTEsIDIxNSwgMjI1LCAyNDYsIDEwNSwgMjIzLCAxMTEsIAotICAgIDIxNSwgMjI1LCAyMTQsIDE2MiwgNCwgMjIzLCAxMTEsIDIxNSwgMjI1LCAyNDYsIDEwNSwgNCwgMjIzLCAxMTEsIDIxNSwgCi0gICAgMjI1LCAzNywgMjQ5LCAxMzEsIDIyNCwgMjUyLCAyNDksIDEzMSwgMjI0LCAyNTMsIDIsIDI0MiwgMjYsIDUxLCAyNDksIAotICAgIDEzMSwgMjI0LCAyNTIsIDIyOCwgNDksIDQzLCAyMjAsIDE1MywgMiwgMTM0LCAyNDcsIDExOCwgMjUwLCA0LCAyNDQsIDE5MSwgCi0gICAgMTIzLCAyMjYsIDI0MiwgMjUwLCA0LCAyNDQsIDE5MSwgMTEzLCAyMjYsIDI0MiwgMjUwLCA0LCAyNDQsIDE5MSwgMTM0LCAKLSAgICAyMjYsIDI0MiwgMjUwLCA0LCAyNDQsIDE5MSwgMjQ0LCAxMSwgMjI2LCAyNDIsIDI1MCwgNCwgMjQ0LCAxOTEsIDI0NCwgODEsIAotICAgIDIyNiwgMjQyLCAyNTAsIDQsIDI0NCwgMTkxLCAyMTksIDEyNSwgMjI2LCAyNDIsIDI1MCwgNCwgMjQ0LCAxOTEsIDIyMCwgCi0gICAgMTIyLCAyMjYsIDI0MiwgMjUwLCA0LCAyNDQsIDE5MSwgMjQ1LCAxOTMsIDIyNiwgMjQyLCAyNTAsIDQsIDI0NCwgMTkxLCAKLSAgICAyMjgsIDIwMCwgMjI2LCAyNDIsIDI1MCwgNCwgMjQ0LCAxOTEsIDIxNiwgMjQ4LCAyMjYsIDI0MiwgMjUwLCA0LCAyNDQsIAotICAgIDE5MSwgMjQ1LCAxNjgsIDIyNiwgMjQyLCAyNTAsIDQsIDI0NCwgMTkxLCAyMTUsIDc3LCAyMjYsIDI0MiwgMjUwLCA0LCAKLSAgICAyNDQsIDE5MSwgMjI2LCAxOTIsIDI1MCwgNCwgMjQ0LCAxOTEsIDIxNSwgNTYsIDI1MCwgNCwgMjQ0LCAxOTEsIDIxNiwgCi0gICAgMTQwLCAyNTAsIDQsIDI0NCwgMTkxLCAyNDQsIDcsIDI1MCwgNCwgMjQ0LCAxOTEsIDI0NCwgNzksIDI1MCwgNCwgMjQ0LCAKLSAgICAxOTEsIDIxOSwgMTIxLCAyNTAsIDQsIDI0NCwgMTkxLCAyMjAsIDEyMSwgMjUwLCA0LCAyNDQsIDE5MSwgMjQ1LCAxOTIsIAotICAgIDI1MCwgNCwgMjQ0LCAxOTEsIDIyOCwgMTk5LCAyNTAsIDQsIDI0NCwgMTkxLCAyMTYsIDI0NiwgMjUwLCA0LCAyNDQsIDE5MSwgCi0gICAgMjQ1LCAxNjYsIDI1MCwgNCwgMjQ0LCAxOTEsIDIxNSwgNzUsIDIzMCwgMTE3LCAyNDMsIDIzMCwgMjE2LCAzNiwgMjE2LCAyLCAKLSAgICAyMTgsIDE0OCwgNjQsIDIzMiwgMjM5LCAyMTksIDE3MCwgNjQsIDIzNSwgMTMyLCAyMzAsIDEwNiwgMjQyLCAxMjQsIDI0NCwgCi0gICAgMTkwLCAyNDIsIDEyNCwgMjQ0LCAxOTEsIDIsIDIxOSwgNzQsIDI0NSwgMTMsIDI0NCwgMTkxLCAyLCAyMTcsIDE0LCA2NCwgCi0gICAgMjM1LCA1MywgMjE5LCA3NCwgMjQ0LCAxOTEsIDIsIDIwNCwgMjMwLCAxMTAsIDIxOSwgNzQsIDI0NCwgMTkxLCAyLCAyMDQsIAotICAgIDIzMCwgMTExLCAyMiwgMjE5LCA3NCwgMjQ1LCAxMywgMjE5LCA3NCwgMjQ0LCAxOTEsIDIsIDIwNCwgMjMwLCAxMTEsIDIyLCAKLSAgICAyNDksIDIzMCwgMjE3LCAyNDcsIDIxOSwgNzQsIDI0NCwgMTkxLCAyLCAyMDQsIDIzMCwgMTExLCAyMiwgMjE2LCAxMDQsIAotICAgIDI0NSwgMTMsIDIxOSwgNzQsIDI0NCwgMTkxLCAyLCAyNDIsIDI1LCAyMTksIDc0LCAyNDQsIDE5MSwgMiwgMjQwLCAyNDcsIAotICAgIDIxMSwgMjMzLCAyNDQsIDE5MCwgMjE5LCA3NCwgMjQ0LCAxOTEsIDIsIDIxOSwgNzQsIDI0NSwgMTMsIDI0NCwgMTkxLCAKLSAgICAyMjEsIDIxNywgMjQ4LCA2MiwgMjQ0LCAzMywgMjIzLCA4OCwgMjQ0LCAxOTAsIDIxOSwgNzQsIDI0NCwgMTkxLCAyLCAyNDEsIAotICAgIDIyNiwgMjQ1LCAxMywgMjE5LCA3NCwgMjQ0LCAxOTEsIDIsIDIxOCwgMzQsIDIxOSwgNzMsIDI0NCwgMTkwLCAyMjksIDg3LCAKLSAgICAyNDQsIDE5MCwgMjQ1LCAyMywgMjQ0LCAxOTAsIDIxNCwgMTg4LCAyNDQsIDE5MCwgMjQ0LCAxOTEsIDIsIDI0OSwgMjMwLCAKLSAgICAyMTcsIDI0NywgMjI1LCAxOTIsIDI0NCwgMTkwLCAyNDksIDIwMSwgMjQ0LCAxOTAsIDI0OSwgMjAyLCAyNDQsIDE5MCwgCi0gICAgMjM0LCA2MiwgMjQ0LCAxOTAsIDI0NCwgMTkxLCAyMTYsIDEzNywgMTE1LCAyMzQsIDYzLCAyMzQsIDYyLCAyNDQsIDE5MSwgCi0gICAgMiwgMjE5LCA3NCwgMjQ1LCAxMywgMjM0LCA2MiwgMjQ0LCAxOTEsIDIsIDI1MCwgMCwgMjQ1LCAxMywgMjQ0LCAxOTEsIDIsIAotICAgIDIxOCwgODgsIDIxNiwgMTksIDI0NCwgMTkxLCAyLCAyMTgsIDg4LCAyMTYsIDIwLCAyMiwgMjExLCAyMzMsIDI0NSwgMTUsIAotICAgIDI0NCwgMTkxLCAyLCAyMTgsIDg4LCAyMTYsIDIwLCAyMiwgMjE2LCAxMDQsIDI0NSwgMTMsIDI0NywgMTkyLCAyNDQsIDE5MCwgCi0gICAgMjExLCAyMDQsIDI0NCwgMTkwLCAyNTQsIDEwOCwgMjQ0LCAxOTAsIDIyNCwgMjI3LCAyNDQsIDE5MCwgMjQ5LCAxMTYsIAotICAgIDI0NCwgMTkwLCAyMjUsIDE3MCwgMjQ0LCAxOTAsIDI0NCwgMTkxLCAyLCAyMzIsIDEyNiwgNjQsIDIxNSwgMjA0LCAyNDcsIAotICAgIDE5MiwgMjUxLCA4OCwgMjIzLCA4OCwgMjQ0LCAxOTAsIDI0MywgMjM5LCAyNDQsIDE5MSwgMiwgMjA0LCAyMzAsIDExMCwgCi0gICAgMjU0LCAxMDYsIDI0NCwgMTkwLCAyNDQsIDE1MiwgMjQ0LCAxOTAsIDIxMiwgMjAsIDI0NCwgMTkwLCAyMTksIDkxLCAyNDQsIAotICAgIDE5MCwgMjE2LCA3MSwgMjQ0LCAxOTAsIDI0MiwgMTI1LCAyNDQsIDE5MCwgMjMyLCAxMTQsIDI0OSwgMTE2LCAyNDQsIDE5MCwgCi0gICAgMjQ0LCAxOTEsIDIsIDIwNCwgMjMwLCAxMTAsIDI0MCwgMjAzLCAyNDQsIDE5MCwgMjQ0LCAxOTEsIDIsIDIwNCwgMjMwLCAKLSAgICAxMTEsIDIyLCAyNDksIDIzMCwgMjE3LCAyNDcsIDI0NCwgMTkxLCAyMjEsIDE5MCwgMjM2LCAwLCAyNDQsIDE1MywgMjUzLCAKLSAgICAyMTMsIDI0NCwgMTkwLCAyNDQsIDQ5LCAyNDQsIDE5MCwgMjE5LCA5MiwgMjQ0LCAxOTAsIDI0NywgMTY1LCAyNDQsIDE5MCwgCi0gICAgMjQ0LCAxOTEsIDIxMSwgMjMwLCAyMzAsIDExMCwgMjQ0LCAxOTEsIDIsIDIzMSwgODQsIDIzMSwgMTQ0LCAyNDIsIDEyNCwgCi0gICAgMjUwLCAyMjUsIDI0NCwgMTkxLCAyLCAyMTksIDc0LCAyNDUsIDEzLCAyNTAsIDIyNSwgMjQ0LCAxOTEsIDIsIDIxNywgMTQsIAotICAgIDY0LCAyMzUsIDUzLCAyMTksIDc0LCAyNTAsIDIyNSwgMjQ0LCAxOTEsIDIsIDIwNCwgMjMwLCAxMTAsIDIxOSwgNzQsIDI1MCwgCi0gICAgMjI1LCAyNDQsIDE5MSwgMiwgMjQxLCAyMjYsIDI0NSwgMTMsIDI1MCwgMjI1LCAyNDQsIDE5MSwgMiwgMjExLCAxOTYsIAotICAgIDIxOSwgNzUsIDIzNCwgNjIsIDI1MCwgMjI1LCAyNDQsIDE5MSwgMiwgMjUwLCAwLCAyNDUsIDEzLCAyMjQsIDIyNywgMjUwLCAKLSAgICAyMjUsIDI0NCwgMTkwLCAyNDksIDExNiwgMjUwLCAyMjUsIDI0NCwgMTkwLCAyMTIsIDIwLCAyNTAsIDIyNSwgMjQ0LCAxOTAsIAotICAgIDI0NCwgMTkxLCAyLCAyMjgsIDc1LCAyNDIsIDE2MywgMjQzLCAzNCwgMjQ0LCAxOTEsIDIsIDIyNiwgMjE1LCAyNDMsIDM0LCAKLSAgICAyMjUsIDE2OCwgMjUxLCAxNjgsIDI0OCwgNzUsIDIyMSwgMTY5LCAyMzAsIDE0NSwgMjQxLCAyMjksIDIzMCwgMTQ1LCAyMTksIAotICAgIDgsIDIzMCwgMTQ1LCAyNDIsIDUsIDIyNSwgMTY4LCAyMjMsIDE1NiwgMTIzLCAyNDIsIDE1LCAyMjUsIDE2OCwgMjIzLCAKLSAgICAxNTYsIDI1MSwgMTc4LCAyNDIsIDExLCAyMzYsIDAsIDI1MCwgMTc5LCAyMjUsIDE2OCwgMjQzLCAyMzgsIDIyNSwgMTY4LCAKLSAgICAyLCAyMjQsIDIyNywgMjQ0LCAxOTAsIDIyNSwgMTY4LCAyLCAyNDQsIDQxLCAyNDIsIDEwLCAyMjIsIDIwMywgMjQxLCAyMTQsIAotICAgIDIxOCwgMTQzLCAyMzIsIDE0OSwgMjIzLCAxNjIsIDI1MCwgMjQ0LCAyNDEsIDE2MiwgMjE1LCAyNDgsIDI0MSwgMTYyLCAKLSAgICAyMTUsIDI0OSwgMiwgMjUxLCAxMTQsIDIyOCwgNTMsIDIxNSwgMjQ4LCAyMzEsIDMyLCAxOTIsIDIyMywgMTYzLCAyMTgsIAotICAgIDE0OSwgMjE1LCAyNDYsIDIxNSwgMjQ3LCAyNTAsIDI0NCwgMjUxLCA5MiwgMjI2LCAxOTQsIDI1MSwgOTIsIDIxNSwgMjAxLCAKLSAgICAyNTEsIDkzLCAyMTgsIDEyOSwgMjMwLCAxODcsIDI1NCwgMTMwLCAyNDQsIDk3LCAyNDUsIDEzNywgMjI0LCAyNTUsIDI1MCwgCi0gICAgMjQ0LCAyMjYsIDE5NCwgMjI0LCAyNTUsIDI1MCwgMjQ0LCAyMTcsIDMyLCAyMjYsIDE5NCwgMjE3LCAzMiwgMjUzLCAxODAsIAotICAgIDIyNiwgMTk0LCAyNTMsIDE4MCwgMjIzLCAxMTgsIDIxMywgMjQ3LCAyNDgsIDU4LCAyMTUsIDE5MiwgMjUzLCAyNDIsIDIzMiwgCi0gICAgMTE3LCAyMTUsIDI1NCwgMjMwLCAxMzksIDIzMCwgMTE2LCAyMjMsIDE2MSwgMjE4LCA2LCAyMjMsIDE2MSwgMjMwLCAxMTYsIAotICAgIDI1MSwgMjgsIDI1NCwgMjI5LCAyMTUsIDI0NSwgMjIwLCAxNiwgMjIyLCAxODIsIDIxOSwgMSwgMjAzLCAyMTUsIDI1MiwgCi0gICAgMjMyLCAyMzAsIDY3LCAyMTUsIDI1MiwgMjMyLCAyMzAsIDI0OSwgMTkwLCA1MCwgMjI0LCAyNTUsIDI1MCwgMjI5LCAyMjMsIAotICAgIDQ0LCAyMzIsIDIzMCwgMjE1LCAyMjIsIDI0NCwgNzQsIDIyNiwgMTk3LCAyMjQsIDIzOCwgMjQ3LCAxMjMsIDIyOCwgNzUsIAotICAgIDI0NSwgMTI1LCA1MCwgMjE5LCA3MiwgODcsIDIyOCwgNzUsIDIxOSwgNzIsIDg3LCAyMjQsIDEyMiwgMjMyLCAxOTMsIDIzNiwgCi0gICAgMCwgMjM1LCAxNTcsIDIyNSwgNDEsIDg3LCAyNDcsIDE0NiwgMjI4LCA1MiwgMjMyLCAxOTMsIDg3LCAyMjQsIDIzMiwgMjEyLCAKLSAgICA0MSwgODcsIDIyOCwgNjYsIDIxMiwgNDEsIDg3LCAyNTIsIDIsIDIyOCwgNzUsIDI1MiwgMSwgMjUyLCAwLCAyMzAsIDExNiwgCi0gICAgMjUyLCAwLCAyMjUsIDIxMywgMjI4LCA3NSwgMjI1LCAyMTIsIDI1MCwgMTAwLCAyNDksIDEyNCwgMjMxLCA1NiwgODcsIAotICAgIDIxMSwgMjE4LCA4NywgMjIzLCA1OSwgMjUyLCAxODcsIDg3LCAyMTYsIDM3LCAyMTIsIDQxLCAyNDksIDI1MywgMjE5LCAKLSAgICAyMzQsIDI1MiwgMTE4LCAyNTIsIDExNiwgMjI1LCAyNDIsIDI0OSwgMTc3LCAyNDksIDg2LCAyNTIsIDE2OSwgMjUwLCAyMiwgCi0gICAgNDMsIDIzMiwgOTAsIDEwOCwgMTYsIDMxLCAyMjQsIDMsIDEwOCwgMTYsIDMxLCAyNTQsIDE5MiwgMTA4LCAxNiwgMzEsIAotICAgIDI0NCwgOTYsIDEwOCwgMTYsIDMxLCAyNDUsIDIyMywgMTA4LCAxNiwgMzEsIDIxMiwgNDAsIDEwOCwgMTYsIDMxLCAyNTQsIAotICAgIDQzLCAxMDgsIDE2LCAzMSwgMjU0LCA0NCwgMjIzLCAxMDUsIDEwOCwgMTYsIDMxLCAyNTQsIDQ0LCAyMjMsIDEwNCwgMTA4LCAKLSAgICAxNiwgMzEsIDI1NCwgNDQsIDIxMywgMTQzLCAxMDgsIDE2LCAzMSwgMjU0LCA0NCwgMjEzLCAxNDIsIDEwOCwgMTYsIDMxLCAKKyAgICAxMzksIDQsIDYxLCAxMSwgMTM5LCA0LCAyNTMsIDE2NiwgMTEsIDEzOSwgNCwgMjUxLCA3NCwgMTEsIDEzOSwgNCwgMjQ5LCAKKyAgICA2OCwgMTEsIDEzOSwgNCwgNzYsIDExLCAxMzksIDQsIDI0NSwgMTQsIDExLCAxMzksIDQsIDI0MywgMjA5LCAxMSwgMTM5LCAKKyAgICA0LCAyNDIsIDY3LCAxMSwgMTM5LCA0LCA3NCwgMTEsIDEzOSwgNCwgMjM1LCAxNTAsIDExLCAxMzksIDQsIDIzNSwgMjksIAorICAgIDExLCAxMzksIDQsIDE1NiwgMTEsIDEzOSwgNCwgMTk0LCAxMSwgMTM5LCA0LCAyMzAsIDMwLCAxMSwgMTM5LCA0LCA3OCwgCisgICAgMTEsIDEzOSwgNCwgMjI2LCAxMDksIDExLCAxMzksIDQsIDIyNCwgOTksIDExLCAxMzksIDQsIDE1MywgMTEsIDEzOSwgNCwgCisgICAgMjIyLCA5MywgMTEsIDEzOSwgNCwgMjE3LCAxNTMsIDExLCAxMzksIDQsIDY5LCAxMSwgMTM5LCA0LCAyMTQsIDEwNSwgMTEsIAorICAgIDEzOSwgNCwgMjEyLCA5OCwgMTEsIDEzOSwgNCwgMjExLCAxNzgsIDExLCAxMzksIDQsIDIxMSwgMTE3LCAxMSwgMTM5LCA0LCAKKyAgICAyMTAsIDE1OSwgMTEsIDIzLCAxMzMsIDYsIDYxLCAxMSwgMjMsIDEzMywgNiwgMjUzLCAxNjYsIDExLCAyMywgMTMzLCA2LCAKKyAgICAyNTEsIDc0LCAxMSwgMjMsIDEzMywgNiwgMjQ5LCA2OCwgMTEsIDIzLCAxMzMsIDYsIDc2LCAxMSwgMjMsIDEzMywgNiwgCisgICAgMjQ1LCAxNCwgMTEsIDIzLCAxMzMsIDYsIDI0MywgMjA5LCAxMSwgMjMsIDEzMywgNiwgMjQyLCA2NywgMTEsIDIzLCAxMzMsIAorICAgIDYsIDc0LCAxMSwgMjMsIDEzMywgNiwgMjM1LCAxNTAsIDExLCAyMywgMTMzLCA2LCAyMzUsIDI5LCAxMSwgMjMsIDEzMywgNiwgCisgICAgMTU2LCAxMSwgMjMsIDEzMywgNiwgMTk0LCAxMSwgMjMsIDEzMywgNiwgMjMwLCAzMCwgMTEsIDIzLCAxMzMsIDYsIDc4LCAKKyAgICAxMSwgMjMsIDEzMywgNiwgMjI2LCAxMDksIDExLCAyMywgMTMzLCA2LCAyMjQsIDk5LCAxMSwgMjMsIDEzMywgNiwgMTUzLCAKKyAgICAxMSwgMjMsIDEzMywgNiwgMjIyLCA5MywgMTEsIDIzLCAxMzMsIDYsIDIxNywgMTUzLCAxMSwgMjMsIDEzMywgNiwgNjksIAorICAgIDExLCAyMywgMTMzLCA2LCAyMTQsIDEwNSwgMTEsIDIzLCAxMzMsIDYsIDIxMiwgOTgsIDExLCAyMywgMTMzLCA2LCAyMTEsIAorICAgIDE3OCwgMTEsIDIzLCAxMzMsIDYsIDIxMSwgMTE3LCAxMSwgMjMsIDEzMywgNiwgMjEwLCAxNTksIDExLCAyMywgMTMzLCA0LCAKKyAgICA2MSwgMTEsIDIzLCAxMzMsIDQsIDI1MywgMTY2LCAxMSwgMjMsIDEzMywgNCwgMjUxLCA3NCwgMTEsIDIzLCAxMzMsIDQsIAorICAgIDI0OSwgNjgsIDExLCAyMywgMTMzLCA0LCA3NiwgMTEsIDIzLCAxMzMsIDQsIDI0NSwgMTQsIDExLCAyMywgMTMzLCA0LCAKKyAgICAyNDMsIDIwOSwgMTEsIDIzLCAxMzMsIDQsIDI0MiwgNjcsIDExLCAyMywgMTMzLCA0LCA3NCwgMTEsIDIzLCAxMzMsIDQsIAorICAgIDIzNSwgMTUwLCAxMSwgMjMsIDEzMywgNCwgMjM1LCAyOSwgMTEsIDIzLCAxMzMsIDQsIDE1NiwgMTEsIDIzLCAxMzMsIDQsIAorICAgIDE5NCwgMTEsIDIzLCAxMzMsIDQsIDIzMCwgMzAsIDExLCAyMywgMTMzLCA0LCA3OCwgMTEsIDIzLCAxMzMsIDQsIDIyNiwgCisgICAgMTA5LCAxMSwgMjMsIDEzMywgNCwgMjI0LCA5OSwgMTEsIDIzLCAxMzMsIDQsIDE1MywgMTEsIDIzLCAxMzMsIDQsIDIyMiwgCisgICAgOTMsIDExLCAyMywgMTMzLCA0LCAyMTcsIDE1MywgMTEsIDIzLCAxMzMsIDQsIDY5LCAxMSwgMjMsIDEzMywgNCwgMjE0LCAKKyAgICAxMDUsIDExLCAyMywgMTMzLCA0LCAyMTIsIDk4LCAxMSwgMjMsIDEzMywgNCwgMjExLCAxNzgsIDExLCAyMywgMTMzLCA0LCAKKyAgICAyMTEsIDExNywgMTEsIDIzLCAxMzMsIDQsIDIxMCwgMTU5LCAxMSwgMzUsIDYsIDYxLCAxMSwgMzUsIDYsIDI1MywgMTY2LCAKKyAgICAxMSwgMzUsIDYsIDI1MSwgNzQsIDExLCAzNSwgNiwgMjQ5LCA2OCwgMTEsIDM1LCA2LCA3NiwgMTEsIDM1LCA2LCAyNDUsIAorICAgIDE0LCAxMSwgMzUsIDYsIDI0MywgMjA5LCAxMSwgMzUsIDYsIDI0MiwgNjcsIDExLCAzNSwgNiwgNzQsIDExLCAzNSwgNiwgCisgICAgMjM1LCAxNTAsIDExLCAzNSwgNiwgMjM1LCAyOSwgMTEsIDM1LCA2LCAxNTYsIDExLCAzNSwgNiwgMTk0LCAxMSwgMzUsIDYsIAorICAgIDIzMCwgMzAsIDExLCAzNSwgNiwgNzgsIDExLCAzNSwgNiwgMjI2LCAxMDksIDExLCAzNSwgNiwgMjI0LCA5OSwgMTEsIDM1LCAKKyAgICA2LCAxNTMsIDExLCAzNSwgNiwgMjIyLCA5MywgMTEsIDM1LCA2LCAyMTcsIDE1MywgMTEsIDM1LCA2LCA2OSwgMTEsIDM1LCAKKyAgICA2LCAyMTQsIDEwNSwgMTEsIDM1LCA2LCAyMTIsIDk4LCAxMSwgMzUsIDYsIDIxMSwgMTc4LCAxMSwgMzUsIDYsIDIxMSwgCisgICAgMTE3LCAxMSwgMzUsIDYsIDIxMCwgMTU5LCAxMSwgMzUsIDQsIDYxLCAxMSwgMzUsIDQsIDI1MywgMTY2LCAxMSwgMzUsIDQsIAorICAgIDI1MSwgNzQsIDExLCAzNSwgNCwgMjQ5LCA2OCwgMTEsIDM1LCA0LCA3NiwgMTEsIDM1LCA0LCAyNDUsIDE0LCAxMSwgMzUsIAorICAgIDQsIDI0MywgMjA5LCAxMSwgMzUsIDQsIDI0MiwgNjcsIDExLCAzNSwgNCwgNzQsIDExLCAzNSwgNCwgMjM1LCAxNTAsIDExLCAKKyAgICAzNSwgNCwgMjM1LCAyOSwgMTEsIDM1LCA0LCAxNTYsIDExLCAzNSwgNCwgMTk0LCAxMSwgMzUsIDQsIDIzMCwgMzAsIDExLCAKKyAgICAzNSwgNCwgNzgsIDExLCAzNSwgNCwgMjI2LCAxMDksIDExLCAzNSwgNCwgMjI0LCA5OSwgMTEsIDM1LCA0LCAxNTMsIDExLCAKKyAgICAzNSwgNCwgMjIyLCA5MywgMTEsIDM1LCA0LCAyMTcsIDE1MywgMTEsIDM1LCA0LCA2OSwgMTEsIDM1LCA0LCAyMTQsIDEwNSwgCisgICAgMTEsIDM1LCA0LCAyMTIsIDk4LCAxMSwgMzUsIDQsIDIxMSwgMTc4LCAxMSwgMzUsIDQsIDIxMSwgMTE3LCAxMSwgMzUsIDQsIAorICAgIDIxMCwgMTU5LCAxMSwgMzUsIDIzLCA2LCA2MSwgMTEsIDM1LCAyMywgNiwgMjUzLCAxNjYsIDExLCAzNSwgMjMsIDYsIDI1MSwgCisgICAgNzQsIDExLCAzNSwgMjMsIDYsIDI0OSwgNjgsIDExLCAzNSwgMjMsIDYsIDc2LCAxMSwgMzUsIDIzLCA2LCAyNDUsIDE0LCAKKyAgICAxMSwgMzUsIDIzLCA2LCAyNDMsIDIwOSwgMTEsIDM1LCAyMywgNiwgMjQyLCA2NywgMTEsIDM1LCAyMywgNiwgNzQsIDExLCAKKyAgICAzNSwgMjMsIDYsIDIzNSwgMTUwLCAxMSwgMzUsIDIzLCA2LCAyMzUsIDI5LCAxMSwgMzUsIDIzLCA2LCAxNTYsIDExLCAzNSwgCisgICAgMjMsIDYsIDE5NCwgMTEsIDM1LCAyMywgNiwgMjMwLCAzMCwgMTEsIDM1LCAyMywgNiwgNzgsIDExLCAzNSwgMjMsIDYsIAorICAgIDIyNiwgMTA5LCAxMSwgMzUsIDIzLCA2LCAyMjQsIDk5LCAxMSwgMzUsIDIzLCA2LCAxNTMsIDExLCAzNSwgMjMsIDYsIDIyMiwgCisgICAgOTMsIDExLCAzNSwgMjMsIDYsIDIxNywgMTUzLCAxMSwgMzUsIDIzLCA2LCA2OSwgMTEsIDM1LCAyMywgNiwgMjE0LCAxMDUsIAorICAgIDExLCAzNSwgMjMsIDYsIDIxMiwgOTgsIDExLCAzNSwgMjMsIDYsIDIxMSwgMTc4LCAxMSwgMzUsIDIzLCA2LCAyMTEsIDExNywgCisgICAgMTEsIDM1LCAyMywgNiwgMjEwLCAxNTksIDExLCAzNSwgMjMsIDQsIDYxLCAxMSwgMzUsIDIzLCA0LCAyNTMsIDE2NiwgMTEsIAorICAgIDM1LCAyMywgNCwgMjUxLCA3NCwgMTEsIDM1LCAyMywgNCwgMjQ5LCA2OCwgMTEsIDM1LCAyMywgNCwgNzYsIDExLCAzNSwgCisgICAgMjMsIDQsIDI0NSwgMTQsIDExLCAzNSwgMjMsIDQsIDI0MywgMjA5LCAxMSwgMzUsIDIzLCA0LCAyNDIsIDY3LCAxMSwgMzUsIAorICAgIDIzLCA0LCA3NCwgMTEsIDM1LCAyMywgNCwgMjM1LCAxNTAsIDExLCAzNSwgMjMsIDQsIDIzNSwgMjksIDExLCAzNSwgMjMsIAorICAgIDQsIDE1NiwgMTEsIDM1LCAyMywgNCwgMTk0LCAxMSwgMzUsIDIzLCA0LCAyMzAsIDMwLCAxMSwgMzUsIDIzLCA0LCA3OCwgCisgICAgMTEsIDM1LCAyMywgNCwgMjI2LCAxMDksIDExLCAzNSwgMjMsIDQsIDIyNCwgOTksIDExLCAzNSwgMjMsIDQsIDE1MywgMTEsIAorICAgIDM1LCAyMywgNCwgMjIyLCA5MywgMTEsIDM1LCAyMywgNCwgMjE3LCAxNTMsIDExLCAzNSwgMjMsIDQsIDY5LCAxMSwgMzUsIAorICAgIDIzLCA0LCAyMTQsIDEwNSwgMTEsIDM1LCAyMywgNCwgMjEyLCA5OCwgMTEsIDM1LCAyMywgNCwgMjExLCAxNzgsIDExLCAzNSwgCisgICAgMjMsIDQsIDIxMSwgMTE3LCAxMSwgMzUsIDIzLCA0LCAyMTAsIDE1OSwgMTEsIDM1LCAzMiwgNiwgNjEsIDExLCAzNSwgMzIsIAorICAgIDYsIDI1MywgMTY2LCAxMSwgMzUsIDMyLCA2LCAyNTEsIDc0LCAxMSwgMzUsIDMyLCA2LCAyNDksIDY4LCAxMSwgMzUsIDMyLCAKKyAgICA2LCA3NiwgMTEsIDM1LCAzMiwgNiwgMjQ1LCAxNCwgMTEsIDM1LCAzMiwgNiwgMjQzLCAyMDksIDExLCAzNSwgMzIsIDYsIAorICAgIDI0MiwgNjcsIDExLCAzNSwgMzIsIDYsIDc0LCAxMSwgMzUsIDMyLCA2LCAyMzUsIDE1MCwgMTEsIDM1LCAzMiwgNiwgMjM1LCAKKyAgICAyOSwgMTEsIDM1LCAzMiwgNiwgMTU2LCAxMSwgMzUsIDMyLCA2LCAxOTQsIDExLCAzNSwgMzIsIDYsIDIzMCwgMzAsIDExLCAKKyAgICAzNSwgMzIsIDYsIDc4LCAxMSwgMzUsIDMyLCA2LCAyMjYsIDEwOSwgMTEsIDM1LCAzMiwgNiwgMjI0LCA5OSwgMTEsIDM1LCAKKyAgICAzMiwgNiwgMTUzLCAxMSwgMzUsIDMyLCA2LCAyMjIsIDkzLCAxMSwgMzUsIDMyLCA2LCAyMTcsIDE1MywgMTEsIDM1LCAzMiwgCisgICAgNiwgNjksIDExLCAzNSwgMzIsIDYsIDIxNCwgMTA1LCAxMSwgMzUsIDMyLCA2LCAyMTIsIDk4LCAxMSwgMzUsIDMyLCA2LCAKKyAgICAyMTEsIDE3OCwgMTEsIDM1LCAzMiwgNiwgMjExLCAxMTcsIDExLCAzNSwgMzIsIDYsIDIxMCwgMTU5LCAxMSwgMzUsIDMyLCAKKyAgICA0LCA2MSwgMTEsIDM1LCAzMiwgNCwgMjUzLCAxNjYsIDExLCAzNSwgMzIsIDQsIDI1MSwgNzQsIDExLCAzNSwgMzIsIDQsIAorICAgIDI0OSwgNjgsIDExLCAzNSwgMzIsIDQsIDc2LCAxMSwgMzUsIDMyLCA0LCAyNDUsIDE0LCAxMSwgMzUsIDMyLCA0LCAyNDMsIAorICAgIDIwOSwgMTEsIDM1LCAzMiwgNCwgMjQyLCA2NywgMTEsIDM1LCAzMiwgNCwgNzQsIDExLCAzNSwgMzIsIDQsIDIzNSwgMTUwLCAKKyAgICAxMSwgMzUsIDMyLCA0LCAyMzUsIDI5LCAxMSwgMzUsIDMyLCA0LCAxNTYsIDExLCAzNSwgMzIsIDQsIDE5NCwgMTEsIDM1LCAKKyAgICAzMiwgNCwgMjMwLCAzMCwgMTEsIDM1LCAzMiwgNCwgNzgsIDExLCAzNSwgMzIsIDQsIDIyNiwgMTA5LCAxMSwgMzUsIDMyLCAKKyAgICA0LCAyMjQsIDk5LCAxMSwgMzUsIDMyLCA0LCAxNTMsIDExLCAzNSwgMzIsIDQsIDIyMiwgOTMsIDExLCAzNSwgMzIsIDQsIAorICAgIDIxNywgMTUzLCAxMSwgMzUsIDMyLCA0LCA2OSwgMTEsIDM1LCAzMiwgNCwgMjE0LCAxMDUsIDExLCAzNSwgMzIsIDQsIDIxMiwgCisgICAgOTgsIDExLCAzNSwgMzIsIDQsIDIxMSwgMTc4LCAxMSwgMzUsIDMyLCA0LCAyMTEsIDExNywgMTEsIDM1LCAzMiwgNCwgMjEwLCAKKyAgICAxNTksIDExLCAzNSwgMjMsIDMyLCA2LCA2MSwgMTEsIDM1LCAyMywgMzIsIDYsIDI1MywgMTY2LCAxMSwgMzUsIDIzLCAzMiwgCisgICAgNiwgMjUxLCA3NCwgMTEsIDM1LCAyMywgMzIsIDYsIDI0OSwgNjgsIDExLCAzNSwgMjMsIDMyLCA2LCA3NiwgMTEsIDM1LCAKKyAgICAyMywgMzIsIDYsIDI0NSwgMTQsIDExLCAzNSwgMjMsIDMyLCA2LCAyNDMsIDIwOSwgMTEsIDM1LCAyMywgMzIsIDYsIDI0MiwgCisgICAgNjcsIDExLCAzNSwgMjMsIDMyLCA2LCA3NCwgMTEsIDM1LCAyMywgMzIsIDYsIDIzNSwgMTUwLCAxMSwgMzUsIDIzLCAzMiwgCisgICAgNiwgMjM1LCAyOSwgMTEsIDM1LCAyMywgMzIsIDYsIDE1NiwgMTEsIDM1LCAyMywgMzIsIDYsIDE5NCwgMTEsIDM1LCAyMywgCisgICAgMzIsIDYsIDIzMCwgMzAsIDExLCAzNSwgMjMsIDMyLCA2LCA3OCwgMTEsIDM1LCAyMywgMzIsIDYsIDIyNiwgMTA5LCAxMSwgCisgICAgMzUsIDIzLCAzMiwgNiwgMjI0LCA5OSwgMTEsIDM1LCAyMywgMzIsIDYsIDE1MywgMTEsIDM1LCAyMywgMzIsIDYsIDIyMiwgCisgICAgOTMsIDExLCAzNSwgMjMsIDMyLCA2LCAyMTcsIDE1MywgMTEsIDM1LCAyMywgMzIsIDYsIDY5LCAxMSwgMzUsIDIzLCAzMiwgCisgICAgNiwgMjE0LCAxMDUsIDExLCAzNSwgMjMsIDMyLCA2LCAyMTIsIDk4LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjExLCAxNzgsIDExLCAKKyAgICAzNSwgMjMsIDMyLCA2LCAyMTEsIDExNywgMTEsIDM1LCAyMywgMzIsIDYsIDIxMCwgMTU5LCAxMSwgMzUsIDIzLCAzMiwgNCwgCisgICAgNjEsIDExLCAzNSwgMjMsIDMyLCA0LCAyNTMsIDE2NiwgMTEsIDM1LCAyMywgMzIsIDQsIDI1MSwgNzQsIDExLCAzNSwgMjMsIAorICAgIDMyLCA0LCAyNDksIDY4LCAxMSwgMzUsIDIzLCAzMiwgNCwgNzYsIDExLCAzNSwgMjMsIDMyLCA0LCAyNDUsIDE0LCAxMSwgCisgICAgMzUsIDIzLCAzMiwgNCwgMjQzLCAyMDksIDExLCAzNSwgMjMsIDMyLCA0LCAyNDIsIDY3LCAxMSwgMzUsIDIzLCAzMiwgNCwgCisgICAgNzQsIDExLCAzNSwgMjMsIDMyLCA0LCAyMzUsIDE1MCwgMTEsIDM1LCAyMywgMzIsIDQsIDIzNSwgMjksIDExLCAzNSwgMjMsIAorICAgIDMyLCA0LCAxNTYsIDExLCAzNSwgMjMsIDMyLCA0LCAxOTQsIDExLCAzNSwgMjMsIDMyLCA0LCAyMzAsIDMwLCAxMSwgMzUsIAorICAgIDIzLCAzMiwgNCwgNzgsIDExLCAzNSwgMjMsIDMyLCA0LCAyMjYsIDEwOSwgMTEsIDM1LCAyMywgMzIsIDQsIDIyNCwgOTksIAorICAgIDExLCAzNSwgMjMsIDMyLCA0LCAxNTMsIDExLCAzNSwgMjMsIDMyLCA0LCAyMjIsIDkzLCAxMSwgMzUsIDIzLCAzMiwgNCwgCisgICAgMjE3LCAxNTMsIDExLCAzNSwgMjMsIDMyLCA0LCA2OSwgMTEsIDM1LCAyMywgMzIsIDQsIDIxNCwgMTA1LCAxMSwgMzUsIDIzLCAKKyAgICAzMiwgNCwgMjEyLCA5OCwgMTEsIDM1LCAyMywgMzIsIDQsIDIxMSwgMTc4LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjExLCAxMTcsIAorICAgIDExLCAzNSwgMjMsIDMyLCA0LCAyMTAsIDE1OSwgMTEsIDIzMCwgMTQzLCA2LCA2MSwgMTEsIDIzMCwgMTQzLCA2LCAyNTMsIAorICAgIDE2NiwgMTEsIDIzMCwgMTQzLCA2LCAyNTEsIDc0LCAxMSwgMjMwLCAxNDMsIDYsIDI0OSwgNjgsIDExLCAyMzAsIDE0MywgNiwgCisgICAgNzYsIDExLCAyMzAsIDE0MywgNiwgMjQ1LCAxNCwgMTEsIDIzMCwgMTQzLCA2LCAyNDMsIDIwOSwgMTEsIDIzMCwgMTQzLCA2LCAKKyAgICAyNDIsIDY3LCAxMSwgMjMwLCAxNDMsIDYsIDc0LCAxMSwgMjMwLCAxNDMsIDYsIDIzNSwgMTUwLCAxMSwgMjMwLCAxNDMsIDYsIAorICAgIDIzNSwgMjksIDExLCAyMzAsIDE0MywgNiwgMTU2LCAxMSwgMjMwLCAxNDMsIDYsIDE5NCwgMTEsIDIzMCwgMTQzLCA2LCAKKyAgICAyMzAsIDMwLCAxMSwgMjMwLCAxNDMsIDYsIDc4LCAxMSwgMjMwLCAxNDMsIDYsIDIyNiwgMTA5LCAxMSwgMjMwLCAxNDMsIDYsIAorICAgIDIyNCwgOTksIDExLCAyMzAsIDE0MywgNiwgMTUzLCAxMSwgMjMwLCAxNDMsIDYsIDIyMiwgOTMsIDExLCAyMzAsIDE0MywgNiwgCisgICAgMjE3LCAxNTMsIDExLCAyMzAsIDE0MywgNiwgNjksIDExLCAyMzAsIDE0MywgNiwgMjE0LCAxMDUsIDExLCAyMzAsIDE0MywgCisgICAgNiwgMjEyLCA5OCwgMTEsIDIzMCwgMTQzLCA2LCAyMTEsIDE3OCwgMTEsIDIzMCwgMTQzLCA2LCAyMTEsIDExNywgMTEsIAorICAgIDIzMCwgMTQzLCA2LCAyMTAsIDE1OSwgMTEsIDIzMCwgMTQzLCA0LCA2MSwgMTEsIDIzMCwgMTQzLCA0LCAyNTMsIDE2NiwgCisgICAgMTEsIDIzMCwgMTQzLCA0LCAyNTEsIDc0LCAxMSwgMjMwLCAxNDMsIDQsIDI0OSwgNjgsIDExLCAyMzAsIDE0MywgNCwgNzYsIAorICAgIDExLCAyMzAsIDE0MywgNCwgMjQ1LCAxNCwgMTEsIDIzMCwgMTQzLCA0LCAyNDMsIDIwOSwgMTEsIDIzMCwgMTQzLCA0LCAKKyAgICAyNDIsIDY3LCAxMSwgMjMwLCAxNDMsIDQsIDc0LCAxMSwgMjMwLCAxNDMsIDQsIDIzNSwgMTUwLCAxMSwgMjMwLCAxNDMsIDQsIAorICAgIDIzNSwgMjksIDExLCAyMzAsIDE0MywgNCwgMTU2LCAxMSwgMjMwLCAxNDMsIDQsIDE5NCwgMTEsIDIzMCwgMTQzLCA0LCAKKyAgICAyMzAsIDMwLCAxMSwgMjMwLCAxNDMsIDQsIDc4LCAxMSwgMjMwLCAxNDMsIDQsIDIyNiwgMTA5LCAxMSwgMjMwLCAxNDMsIDQsIAorICAgIDIyNCwgOTksIDExLCAyMzAsIDE0MywgNCwgMTUzLCAxMSwgMjMwLCAxNDMsIDQsIDIyMiwgOTMsIDExLCAyMzAsIDE0MywgNCwgCisgICAgMjE3LCAxNTMsIDExLCAyMzAsIDE0MywgNCwgNjksIDExLCAyMzAsIDE0MywgNCwgMjE0LCAxMDUsIDExLCAyMzAsIDE0MywgCisgICAgNCwgMjEyLCA5OCwgMTEsIDIzMCwgMTQzLCA0LCAyMTEsIDE3OCwgMTEsIDIzMCwgMTQzLCA0LCAyMTEsIDExNywgMTEsIAorICAgIDIzMCwgMTQzLCA0LCAyMTAsIDE1OSwgMTEsIDMyLCA0LCAyNDcsIDEyNywgNzQsIDExLCAzMiwgNCwgMjQ3LCAxMjcsIDIzNSwgCisgICAgMTUwLCAxMSwgMjMsIDYsIDI1NCwgMTUxLCAxMSwgMjMsIDYsIDI1MiwgMzQsIDExLCAyMywgNiwgMjQzLCAxMTQsIDExLCAKKyAgICAyMywgNiwgMjQ4LCA2MiwgMTEsIDIzLCA2LCAyNDUsIDEwOCwgMTEsIDIzLCA2LCAyMTAsIDg1LCAxMSwgMjMsIDYsIDI0NSwgCisgICAgNzEsIDExLCAyMywgNiwgMjE2LCAxODAsIDExLCAyMywgNiwgMjM1LCAxOTIsIDExLCAyMywgNiwgMjM0LCAyMjgsIDExLCAKKyAgICAyMywgNiwgMjMzLCAxMDQsIDExLCAyMywgNiwgMjMwLCAxMDcsIDExLCAyMywgNiwgMjI3LCAyNDIsIDExLCAyMywgNiwgCisgICAgMjExLCAxNTcsIDExLCAyMywgNiwgMjI2LCAyMDMsIDExLCAyMywgNiwgMjI1LCAxMTEsIDExLCAyMywgNiwgMjIzLCA0MCwgCisgICAgMTEsIDIzLCA2LCAyMTYsIDE4MSwgODcsIDExLCAyMywgNiwgMjE5LCAxNzksIDExLCAyMywgNiwgMjE3LCA0MiwgMTEsIDIzLCAKKyAgICA2LCAyMTQsIDE1NywgMTEsIDIzLCA2LCAyMjUsIDEzNiwgMTEsIDIzLCA2LCAyNTAsIDExOCwgMTEsIDIzLCA2LCAyMjQsIAorICAgIDE2NCwgMTEsIDIzLCA2LCAyMjYsIDIwNSwgMTEsIDIzLCAyMjksIDIyNiwgMTEsIDIzLCA0LCAyNTQsIDE1MSwgMTEsIDIzLCAKKyAgICA0LCAyNTIsIDM0LCAxMSwgMjMsIDQsIDI0MywgMTE0LCAxMSwgMjMsIDQsIDI0OCwgNjIsIDExLCAyMywgNCwgMjQ1LCAxMDgsIAorICAgIDExLCAyMywgNCwgMjEwLCA4NSwgMTEsIDIzLCA0LCAyNDUsIDcxLCAxMSwgMjMsIDQsIDIxNiwgMTgwLCAxMSwgMjMsIDQsIAorICAgIDIzNSwgMTkyLCAxMSwgMjMsIDQsIDIzNCwgMjI4LCAxMSwgMjMsIDQsIDIzMywgMTA0LCAxMSwgMjMsIDQsIDIzMCwgMTA3LCAKKyAgICAxMSwgMjMsIDQsIDIyNywgMjQyLCAxMSwgMjMsIDQsIDIxMSwgMTU3LCAxMSwgMjMsIDQsIDIyNiwgMjAzLCAxMSwgMjMsIDQsIAorICAgIDIyNSwgMTExLCAxMSwgMjMsIDQsIDIyMywgNDAsIDExLCAyMywgNCwgNDAsIDIxOSwgMTc5LCAxMSwgMjMsIDQsIDIxOSwgCisgICAgMTc5LCAxMSwgMjMsIDQsIDIxNywgNDIsIDExLCAyMywgNCwgMjE0LCAxNTcsIDExLCAyMywgNCwgMjI1LCAxMzYsIDExLCAKKyAgICAyMywgNCwgMjUwLCAxMTgsIDExLCAyMywgNCwgMjI0LCAxNjQsIDExLCAyMywgNCwgMjI2LCAyMDUsIDExLCAyMywgMjI2LCAKKyAgICAxLCAyNDcsIDI0MSwgMTEsIDIzLCAyNDUsIDEwOSwgODcsIDExLCAyMywgMjE2LCAxODEsIDg3LCAxMSwgMjMsIDIzNCwgCisgICAgMjI5LCA4NywgMTEsIDIzLCAyMjUsIDEzNywgODcsIDExLCAyMywgMjIzLCA0MSwgODcsIDExLCAyMywgMjI1LCAxMTIsIDg3LCAKKyAgICAxMSwgMzIsIDYsIDI1NCwgMTUxLCAxMSwgMzIsIDYsIDI1MiwgMzQsIDExLCAzMiwgNiwgMjQzLCAxMTQsIDExLCAzMiwgNiwgCisgICAgMjQ4LCA2MiwgMTEsIDMyLCA2LCAyNDUsIDEwOCwgMTEsIDMyLCA2LCAyMTAsIDg1LCAxMSwgMzIsIDYsIDI0NSwgNzEsIDExLCAKKyAgICAzMiwgNiwgMjE2LCAxODAsIDExLCAzMiwgNiwgMjM1LCAxOTIsIDExLCAzMiwgNiwgMjM0LCAyMjgsIDExLCAzMiwgNiwgCisgICAgMjMzLCAxMDQsIDExLCAzMiwgNiwgMjMwLCAxMDcsIDExLCAzMiwgNiwgMjI3LCAyNDIsIDExLCAzMiwgNiwgMjExLCAxNTcsIAorICAgIDExLCAzMiwgNiwgMjI2LCAyMDMsIDExLCAzMiwgNiwgMjI1LCAxMTEsIDExLCAzMiwgNiwgMjIzLCA0MCwgMTEsIDMyLCA2LCAKKyAgICAyMTYsIDE4MSwgODcsIDExLCAzMiwgNiwgMjE5LCAxNzksIDExLCAzMiwgNiwgMjE3LCA0MiwgMTEsIDMyLCA2LCAyMTQsIAorICAgIDE1NywgMTEsIDMyLCA2LCAyMjUsIDEzNiwgMTEsIDMyLCA2LCAyNTAsIDExOCwgMTEsIDMyLCA2LCAyMjQsIDE2NCwgMTEsIAorICAgIDMyLCA2LCAyMjYsIDIwNSwgMTEsIDMyLCAyMjksIDIyNiwgMTEsIDMyLCA0LCAyNTQsIDE1MSwgMTEsIDMyLCA0LCAyNTIsIAorICAgIDM0LCAxMSwgMzIsIDQsIDI0MywgMTE0LCAxMSwgMzIsIDQsIDI0OCwgNjIsIDExLCAzMiwgNCwgMjQ1LCAxMDgsIDExLCAzMiwgCisgICAgNCwgMjEwLCA4NSwgMTEsIDMyLCA0LCAyNDUsIDcxLCAxMSwgMzIsIDQsIDIxNiwgMTgwLCAxMSwgMzIsIDQsIDIzNSwgMTkyLCAKKyAgICAxMSwgMzIsIDQsIDIzNCwgMjI4LCAxMSwgMzIsIDQsIDIzMywgMTA0LCAxMSwgMzIsIDQsIDIzMCwgMTA3LCAxMSwgMzIsIDQsIAorICAgIDIyNywgMjQyLCAxMSwgMzIsIDQsIDIxMSwgMTU3LCAxMSwgMzIsIDQsIDIyNiwgMjAzLCAxMSwgMzIsIDQsIDIyNSwgMTExLCAKKyAgICAxMSwgMzIsIDQsIDIyMywgNDAsIDExLCAzMiwgNCwgNDAsIDIxOSwgMTc5LCAxMSwgMzIsIDQsIDIxOSwgMTc5LCAxMSwgMzIsIAorICAgIDQsIDIxNywgNDIsIDExLCAzMiwgNCwgMjE0LCAxNTcsIDExLCAzMiwgNCwgMjI1LCAxMzYsIDExLCAzMiwgNCwgMjUwLCAKKyAgICAxMTgsIDExLCAzMiwgNCwgMjI0LCAxNjQsIDExLCAzMiwgNCwgMjI2LCAyMDUsIDExLCAzMiwgMjI2LCAxLCAyNDcsIDI0MSwgCisgICAgMTEsIDMyLCAyNDUsIDEwOSwgODcsIDExLCAzMiwgMjE2LCAxODEsIDg3LCAxMSwgMzIsIDIzNCwgMjI5LCA4NywgMTEsIDMyLCAKKyAgICAyMjUsIDEzNywgODcsIDExLCAzMiwgMjIzLCA0MSwgODcsIDExLCAzMiwgMjI1LCAxMTIsIDg3LCAxMSwgMjMsIDMyLCA2LCAKKyAgICAyNTQsIDE1MSwgMTEsIDIzLCAzMiwgNiwgMjUyLCAzNCwgMTEsIDIzLCAzMiwgNiwgMjQzLCAxMTQsIDExLCAyMywgMzIsIDYsIAorICAgIDI0OCwgNjIsIDExLCAyMywgMzIsIDYsIDI0NSwgMTA4LCAxMSwgMjMsIDMyLCA2LCAyMTAsIDg1LCAxMSwgMjMsIDMyLCA2LCAKKyAgICAyNDUsIDcxLCAxMSwgMjMsIDMyLCA2LCAyMTYsIDE4MCwgMTEsIDIzLCAzMiwgNiwgMjM1LCAxOTIsIDExLCAyMywgMzIsIDYsIAorICAgIDIzNCwgMjI4LCAxMSwgMjMsIDMyLCA2LCAyMzMsIDEwNCwgMTEsIDIzLCAzMiwgNiwgMjMwLCAxMDcsIDExLCAyMywgMzIsIAorICAgIDYsIDIyNywgMjQyLCAxMSwgMjMsIDMyLCA2LCAyMTEsIDE1NywgMTEsIDIzLCAzMiwgNiwgMjI2LCAyMDMsIDExLCAyMywgCisgICAgMzIsIDYsIDIyNSwgMTExLCAxMSwgMjMsIDMyLCA2LCAyMjMsIDQwLCAxMSwgMjMsIDMyLCA2LCAyMTYsIDE4MSwgODcsIDExLCAKKyAgICAyMywgMzIsIDYsIDIxOSwgMTc5LCAxMSwgMjMsIDMyLCA2LCAyMTcsIDQyLCAxMSwgMjMsIDMyLCA2LCAyMTQsIDE1NywgMTEsIAorICAgIDIzLCAzMiwgNiwgMjI1LCAxMzYsIDExLCAyMywgMzIsIDYsIDI1MCwgMTE4LCAxMSwgMjMsIDMyLCA2LCAyMjQsIDE2NCwgCisgICAgMTEsIDIzLCAzMiwgNiwgMjI2LCAyMDUsIDExLCAyMywgMzIsIDIyOSwgMjI2LCAxMSwgMjMsIDMyLCA0LCAyNTQsIDE1MSwgCisgICAgMTEsIDIzLCAzMiwgNCwgMjUyLCAzNCwgMTEsIDIzLCAzMiwgNCwgMjQzLCAxMTQsIDExLCAyMywgMzIsIDQsIDI0OCwgNjIsIAorICAgIDExLCAyMywgMzIsIDQsIDI0NSwgMTA4LCAxMSwgMjMsIDMyLCA0LCAyMTAsIDg1LCAxMSwgMjMsIDMyLCA0LCAyNDUsIDcxLCAKKyAgICAxMSwgMjMsIDMyLCA0LCAyMTYsIDE4MCwgMTEsIDIzLCAzMiwgNCwgMjM1LCAxOTIsIDExLCAyMywgMzIsIDQsIDIzNCwgCisgICAgMjI4LCAxMSwgMjMsIDMyLCA0LCAyMzMsIDEwNCwgMTEsIDIzLCAzMiwgNCwgMjMwLCAxMDcsIDExLCAyMywgMzIsIDQsIAorICAgIDIyNywgMjQyLCAxMSwgMjMsIDMyLCA0LCAyMTEsIDE1NywgMTEsIDIzLCAzMiwgNCwgMjI2LCAyMDMsIDExLCAyMywgMzIsIAorICAgIDQsIDIyNSwgMTExLCAxMSwgMjMsIDMyLCA0LCAyMjMsIDQwLCAxMSwgMjMsIDMyLCA0LCA0MCwgMjE5LCAxNzksIDExLCAyMywgCisgICAgMzIsIDQsIDIxOSwgMTc5LCAxMSwgMjMsIDMyLCA0LCAyMTcsIDQyLCAxMSwgMjMsIDMyLCA0LCAyMTQsIDE1NywgMTEsIDIzLCAKKyAgICAzMiwgNCwgMjI1LCAxMzYsIDExLCAyMywgMzIsIDQsIDI1MCwgMTE4LCAxMSwgMjMsIDMyLCA0LCAyMjQsIDE2NCwgMTEsIAorICAgIDIzLCAzMiwgNCwgMjI2LCAyMDUsIDExLCAyMywgMzIsIDIyNiwgMSwgMjQ3LCAyNDEsIDExLCAyMywgMzIsIDI0NSwgMTA5LCAKKyAgICA4NywgMTEsIDIzLCAzMiwgMjE2LCAxODEsIDg3LCAxMSwgMjMsIDMyLCAyMzQsIDIyOSwgODcsIDExLCAyMywgMzIsIDIyNSwgCisgICAgMTM3LCA4NywgMTEsIDIzLCAzMiwgMjIzLCA0MSwgODcsIDExLCAyMywgMzIsIDIyNSwgMTEyLCA4NywgMTEsIDM1LCAyMywgCisgICAgNiwgMjU0LCAxNTEsIDExLCAzNSwgMjMsIDYsIDI1MiwgMzQsIDExLCAzNSwgMjMsIDYsIDI0MywgMTE0LCAxMSwgMzUsIDIzLCAKKyAgICA2LCAyNDgsIDYyLCAxMSwgMzUsIDIzLCA2LCAyNDUsIDEwOCwgMTEsIDM1LCAyMywgNiwgMjEwLCA4NSwgMTEsIDM1LCAyMywgCisgICAgNiwgMjQ1LCA3MSwgMTEsIDM1LCAyMywgNiwgMjE2LCAxODAsIDExLCAzNSwgMjMsIDYsIDIzNSwgMTkyLCAxMSwgMzUsIDIzLCAKKyAgICA2LCAyMzQsIDIyOCwgMTEsIDM1LCAyMywgNiwgMjMzLCAxMDQsIDExLCAzNSwgMjMsIDYsIDIzMCwgMTA3LCAxMSwgMzUsIAorICAgIDIzLCA2LCAyMjcsIDI0MiwgMTEsIDM1LCAyMywgNiwgMjExLCAxNTcsIDExLCAzNSwgMjMsIDYsIDIyNiwgMjAzLCAxMSwgCisgICAgMzUsIDIzLCA2LCAyMjUsIDExMSwgMTEsIDM1LCAyMywgNiwgMjIzLCA0MCwgMTEsIDM1LCAyMywgNiwgMjE2LCAxODEsIDg3LCAKKyAgICAxMSwgMzUsIDIzLCA2LCAyMTksIDE3OSwgMTEsIDM1LCAyMywgNiwgMjE3LCA0MiwgMTEsIDM1LCAyMywgNiwgMjE0LCAxNTcsIAorICAgIDExLCAzNSwgMjMsIDYsIDIyNSwgMTM2LCAxMSwgMzUsIDIzLCA2LCAyNTAsIDExOCwgMTEsIDM1LCAyMywgNiwgMjI0LCAKKyAgICAxNjQsIDExLCAzNSwgMjMsIDYsIDIyNiwgMjA1LCAxMSwgMzUsIDIzLCAyMjksIDIyNiwgMTEsIDM1LCAyMywgNCwgMjU0LCAKKyAgICAxNTEsIDExLCAzNSwgMjMsIDQsIDI1MiwgMzQsIDExLCAzNSwgMjMsIDQsIDI0MywgMTE0LCAxMSwgMzUsIDIzLCA0LCAyNDgsIAorICAgIDYyLCAxMSwgMzUsIDIzLCA0LCAyNDUsIDEwOCwgMTEsIDM1LCAyMywgNCwgMjEwLCA4NSwgMTEsIDM1LCAyMywgNCwgMjQ1LCAKKyAgICA3MSwgMTEsIDM1LCAyMywgNCwgMjE2LCAxODAsIDExLCAzNSwgMjMsIDQsIDIzNSwgMTkyLCAxMSwgMzUsIDIzLCA0LCAyMzQsIAorICAgIDIyOCwgMTEsIDM1LCAyMywgNCwgMjMzLCAxMDQsIDExLCAzNSwgMjMsIDQsIDIzMCwgMTA3LCAxMSwgMzUsIDIzLCA0LCAKKyAgICAyMjcsIDI0MiwgMTEsIDM1LCAyMywgNCwgMjExLCAxNTcsIDExLCAzNSwgMjMsIDQsIDIyNiwgMjAzLCAxMSwgMzUsIDIzLCAKKyAgICA0LCAyMjUsIDExMSwgMTEsIDM1LCAyMywgNCwgMjIzLCA0MCwgMTEsIDM1LCAyMywgNCwgNDAsIDIxOSwgMTc5LCAxMSwgMzUsIAorICAgIDIzLCA0LCAyMTksIDE3OSwgMTEsIDM1LCAyMywgNCwgMjE3LCA0MiwgMTEsIDM1LCAyMywgNCwgMjE0LCAxNTcsIDExLCAzNSwgCisgICAgMjMsIDQsIDIyNSwgMTM2LCAxMSwgMzUsIDIzLCA0LCAyNTAsIDExOCwgMTEsIDM1LCAyMywgNCwgMjI0LCAxNjQsIDExLCAKKyAgICAzNSwgMjMsIDQsIDIyNiwgMjA1LCAxMSwgMzUsIDIzLCAyMjYsIDEsIDI0NywgMjQxLCAxMSwgMzUsIDIzLCAyNDUsIDEwOSwgCisgICAgODcsIDExLCAzNSwgMjMsIDIxNiwgMTgxLCA4NywgMTEsIDM1LCAyMywgMjM0LCAyMjksIDg3LCAxMSwgMzUsIDIzLCAyMjUsIAorICAgIDEzNywgODcsIDExLCAzNSwgMjMsIDIyMywgNDEsIDg3LCAxMSwgMzUsIDIzLCAyMjUsIDExMiwgODcsIDExLCAzNSwgMjMsIAorICAgIDMyLCA2LCAyNTQsIDE1MSwgMTEsIDM1LCAyMywgMzIsIDYsIDI1MiwgMzQsIDExLCAzNSwgMjMsIDMyLCA2LCAyNDMsIDExNCwgCisgICAgMTEsIDM1LCAyMywgMzIsIDYsIDI0OCwgNjIsIDExLCAzNSwgMjMsIDMyLCA2LCAyNDUsIDEwOCwgMTEsIDM1LCAyMywgMzIsIAorICAgIDYsIDIxMCwgODUsIDExLCAzNSwgMjMsIDMyLCA2LCAyNDUsIDcxLCAxMSwgMzUsIDIzLCAzMiwgNiwgMjE2LCAxODAsIDExLCAKKyAgICAzNSwgMjMsIDMyLCA2LCAyMzUsIDE5MiwgMTEsIDM1LCAyMywgMzIsIDYsIDIzNCwgMjI4LCAxMSwgMzUsIDIzLCAzMiwgNiwgCisgICAgMjMzLCAxMDQsIDExLCAzNSwgMjMsIDMyLCA2LCAyMzAsIDEwNywgMTEsIDM1LCAyMywgMzIsIDYsIDIyNywgMjQyLCAxMSwgCisgICAgMzUsIDIzLCAzMiwgNiwgMjExLCAxNTcsIDExLCAzNSwgMjMsIDMyLCA2LCAyMjYsIDIwMywgMTEsIDM1LCAyMywgMzIsIDYsIAorICAgIDIyNSwgMTExLCAxMSwgMzUsIDIzLCAzMiwgNiwgMjIzLCA0MCwgMTEsIDM1LCAyMywgMzIsIDYsIDIxNiwgMTgxLCA4NywgCisgICAgMTEsIDM1LCAyMywgMzIsIDYsIDIxOSwgMTc5LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjE3LCA0MiwgMTEsIDM1LCAyMywgMzIsIAorICAgIDYsIDIxNCwgMTU3LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjI1LCAxMzYsIDExLCAzNSwgMjMsIDMyLCA2LCAyNTAsIDExOCwgCisgICAgMTEsIDM1LCAyMywgMzIsIDYsIDIyNCwgMTY0LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjI2LCAyMDUsIDExLCAzNSwgMjMsIDMyLCAKKyAgICAyMjksIDIyNiwgMTEsIDM1LCAyMywgMzIsIDQsIDI1NCwgMTUxLCAxMSwgMzUsIDIzLCAzMiwgNCwgMjUyLCAzNCwgMTEsIAorICAgIDM1LCAyMywgMzIsIDQsIDI0MywgMTE0LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjQ4LCA2MiwgMTEsIDM1LCAyMywgMzIsIDQsIAorICAgIDI0NSwgMTA4LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjEwLCA4NSwgMTEsIDM1LCAyMywgMzIsIDQsIDI0NSwgNzEsIDExLCAzNSwgCisgICAgMjMsIDMyLCA0LCAyMTYsIDE4MCwgMTEsIDM1LCAyMywgMzIsIDQsIDIzNSwgMTkyLCAxMSwgMzUsIDIzLCAzMiwgNCwgMjM0LCAKKyAgICAyMjgsIDExLCAzNSwgMjMsIDMyLCA0LCAyMzMsIDEwNCwgMTEsIDM1LCAyMywgMzIsIDQsIDIzMCwgMTA3LCAxMSwgMzUsIAorICAgIDIzLCAzMiwgNCwgMjI3LCAyNDIsIDExLCAzNSwgMjMsIDMyLCA0LCAyMTEsIDE1NywgMTEsIDM1LCAyMywgMzIsIDQsIDIyNiwgCisgICAgMjAzLCAxMSwgMzUsIDIzLCAzMiwgNCwgMjI1LCAxMTEsIDExLCAzNSwgMjMsIDMyLCA0LCAyMjMsIDQwLCAxMSwgMzUsIDIzLCAKKyAgICAzMiwgNCwgNDAsIDIxOSwgMTc5LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjE5LCAxNzksIDExLCAzNSwgMjMsIDMyLCA0LCAyMTcsIAorICAgIDQyLCAxMSwgMzUsIDIzLCAzMiwgNCwgMjE0LCAxNTcsIDExLCAzNSwgMjMsIDMyLCA0LCAyMjUsIDEzNiwgMTEsIDM1LCAyMywgCisgICAgMzIsIDQsIDI1MCwgMTE4LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjI0LCAxNjQsIDExLCAzNSwgMjMsIDMyLCA0LCAyMjYsIAorICAgIDIwNSwgMTEsIDM1LCAyMywgMzIsIDIyNiwgMSwgMjQ3LCAyNDEsIDExLCAzNSwgMjMsIDMyLCAyNDUsIDEwOSwgODcsIDExLCAKKyAgICAzNSwgMjMsIDMyLCAyMTYsIDE4MSwgODcsIDExLCAzNSwgMjMsIDMyLCAyMzQsIDIyOSwgODcsIDExLCAzNSwgMjMsIDMyLCAKKyAgICAyMjUsIDEzNywgODcsIDExLCAzNSwgMjMsIDMyLCAyMjMsIDQxLCA4NywgMTEsIDM1LCAyMywgMzIsIDIyNSwgMTEyLCA4NywgCisgICAgMTEsIDIzLCA2LCAyNDcsIDIzNSwgMTEsIDIzLCA0LCAyNDcsIDIzNSwgMTEsIDIzLCAyMSwgMjEwLCA4NiwgMTEsIDIzLCAKKyAgICAyMSwgMTExLCAxMSwgMjMsIDIxLCAxMDUsIDExLCAyMywgMjEsIDE1OCwgMTEsIDIzLCAyMSwgMTYxLCAxMSwgMjMsIDIxLCAKKyAgICAxOTAsIDExLCAyMywgMjEsIDE5NSwgMTEsIDIzLCAyMSwgMTk5LCAxMSwgMjMsIDIxLCAxOTYsIDExLCAyMywgMjEsIDIwMSwgCisgICAgMTEsIDEzOSwgMjEsIDIxMCwgODYsIDExLCAxMzksIDIxLCAxMTEsIDExLCAxMzksIDIxLCAxMDUsIDExLCAxMzksIDIxLCAKKyAgICAxNTgsIDExLCAxMzksIDIxLCAxNjEsIDExLCAxMzksIDIxLCAxOTAsIDExLCAxMzksIDIxLCAxOTUsIDExLCAxMzksIDIxLCAKKyAgICAxOTksIDExLCAxMzksIDIxLCAxOTYsIDExLCAxMzksIDIxLCAyMDEsIDExLCAzNSwgMjEsIDIxMCwgODYsIDExLCAzNSwgMjEsIAorICAgIDExMSwgMTEsIDM1LCAyMSwgMTA1LCAxMSwgMzUsIDIxLCAxNTgsIDExLCAzNSwgMjEsIDE2MSwgMTEsIDM1LCAyMSwgMTkwLCAKKyAgICAxMSwgMzUsIDIxLCAxOTUsIDExLCAzNSwgMjEsIDE5OSwgMTEsIDM1LCAyMSwgMTk2LCAxMSwgMzUsIDIxLCAyMDEsIDExLCAKKyAgICAzNSwgMjMsIDIxLCAyMTAsIDg2LCAxMSwgMzUsIDIzLCAyMSwgMTExLCAxMSwgMzUsIDIzLCAyMSwgMTA1LCAxMSwgMzUsIAorICAgIDIzLCAyMSwgMTU4LCAxMSwgMzUsIDIzLCAyMSwgMTYxLCAxMSwgMzUsIDIzLCAyMSwgMTkwLCAxMSwgMzUsIDIzLCAyMSwgCisgICAgMTk1LCAxMSwgMzUsIDIzLCAyMSwgMTk5LCAxMSwgMzUsIDIzLCAyMSwgMTk2LCAxMSwgMzUsIDIzLCAyMSwgMjAxLCAxMSwgCisgICAgMjMwLCAxNDMsIDIxLCAyMTAsIDg2LCAxMSwgMjMwLCAxNDMsIDIxLCAxMTEsIDExLCAyMzAsIDE0MywgMjEsIDEwNSwgMTEsIAorICAgIDIzMCwgMTQzLCAyMSwgMTU4LCAxMSwgMjMwLCAxNDMsIDIxLCAxNjEsIDExLCAyMzAsIDE0MywgMjEsIDE5MCwgMTEsIDIzMCwgCisgICAgMTQzLCAyMSwgMTk1LCAxMSwgMjMwLCAxNDMsIDIxLCAxOTksIDExLCAyMzAsIDE0MywgMjEsIDE5NiwgMTEsIDIzMCwgMTQzLCAKKyAgICAyMSwgMjAxLCA5LCAxMSwgMjU0LCAxNzksIDksIDExLCAyNTIsIDYyLCA5LCAxMSwgMjM1LCAxMjksIDksIDExLCAyNDgsIAorICAgIDIwMywgOSwgMTEsIDIxMiwgMzAsIDksIDExLCAyMTAsIDEwOCwgOSwgMTEsIDI0MiwgNDQsIDksIDExLCAyMTcsIDgxLCA5LCAKKyAgICAxMSwgMjExLCA0MywgOSwgMTEsIDIzNSwgMCwgOSwgMTEsIDIzMywgMTA4LCA5LCAxMSwgMjMxLCA4MywgOSwgMTEsIDIyOCwgCisgICAgNjcsIDksIDExLCAyMjEsIDE2OCwgOSwgMTEsIDI1NCwgMjA1LCA5LCAxMSwgMjQ0LCAxNTAsIDksIDExLCAyMjIsIDI4LCA5LCAKKyAgICAxMSwgMjI0LCA4NCwgOSwgMTEsIDIyMywgOTgsIDksIDExLCAyMjAsIDYxLCA5LCAxMSwgMjE3LCA4LCA5LCAxMSwgMjE2LCAKKyAgICAxOTMsIDksIDExLCAyMzQsIDEzNSwgOSwgMTEsIDIxNiwgMjAzLCA5LCAxMSwgMjQ4LCAyMjQsIDksIDExLCAyMTAsIDExMSwgCisgICAgOSwgMTEsIDI0MiwgMjUxLCA5LCAxMSwgMjQ3LCAxMjcsIDI1MiwgNjIsIDksIDExLCAyNDcsIDEyNywgMjI4LCA2NywgOSwgCisgICAgMTEsIDI0NywgMTI3LCAyNDQsIDE1MCwgOSwgMTEsIDI0NywgMTI3LCAyMjQsIDg0LCA5LCAxMSwgNjUsIDI1MiwgNjIsIDksIAorICAgIDExLCA2NSwgMjM1LCAxMjksIDksIDExLCA2NSwgMjQxLCAyMjUsIDksIDExLCA2NSwgMjQyLCA0NCwgOSwgMTEsIDY1LCAKKyAgICAyMTEsIDQzLCA5LCAxMSwgNjUsIDIzNSwgMCwgOSwgMTEsIDY1LCAyMzMsIDEwOCwgOSwgMTEsIDY1LCAyMzEsIDgzLCA5LCAKKyAgICAxMSwgNjUsIDIyOCwgNjcsIDksIDExLCA2NSwgMjIxLCAxNjgsIDksIDExLCA2NSwgMjU0LCAyMDUsIDksIDExLCA2NSwgCisgICAgMjQ0LCAxNTAsIDksIDExLCA2NSwgMjIyLCAyOCwgOSwgMTEsIDY1LCAyMjQsIDg0LCA5LCAxMSwgNjUsIDIyMCwgNjEsIDksIAorICAgIDExLCA2NSwgMjE3LCA4LCA5LCAxMSwgNjUsIDIxNiwgMTkzLCA5LCAxMSwgNjUsIDIzNCwgMTM1LCA5LCAxMSwgNjUsIDI0OCwgCisgICAgMjI0LCA5LCAxMSwgNjUsIDI0MiwgMjUxLCA5LCAxMSwgMjE3LCA3NywgMjM1LCAxMjksIDksIDExLCAyMTcsIDc3LCAyNDIsIAorICAgIDQ0LCA5LCAxMSwgMjE3LCA3NywgMjExLCA0MywgOSwgMTEsIDIxNywgNzcsIDIzMywgMTA4LCA5LCAxMSwgMjE3LCA3NywgCisgICAgMjI4LCA2NywgOSwgMTEsIDIxNywgNzcsIDIyMSwgMTY4LCA5LCAxMSwgMjE3LCA3NywgMjU0LCAyMDUsIDksIDExLCAyMTcsIAorICAgIDc3LCAyMjIsIDI4LCA5LCAxMSwgMjE3LCA3NywgMjI0LCA4NCwgOSwgMTEsIDIxNywgNzcsIDIyMCwgNjEsIDksIDExLCAKKyAgICAyMTcsIDc3LCAyMzQsIDEzNSwgOSwgMTEsIDIxNywgNzcsIDI0OCwgMjI0LCA5LCAxMSwgMjE3LCA3NywgMjQyLCAyNTEsIDksIAorICAgIDExLCAyMTcsIDc3LCAyNDcsIDEyNywgMjI4LCA2NywgOSwgMTEsIDIxNywgNzcsIDI0NywgMTI3LCAyMjQsIDg0LCA5LCAxMSwgCisgICAgMjE4LCAxMTIsIDI1MiwgNjIsIDksIDExLCAyMTgsIDExMiwgMjM1LCAxMjksIDksIDExLCAyMTgsIDExMiwgMjQxLCAyMjUsIAorICAgIDksIDExLCAyMTgsIDExMiwgMjQyLCA0NCwgOSwgMTEsIDIxOCwgMTEyLCAyMTcsIDgxLCA5LCAxMSwgMjE4LCAxMTIsIDIxMSwgCisgICAgNDMsIDksIDExLCAyMTgsIDExMiwgMjM1LCAwLCA5LCAxMSwgMjE4LCAxMTIsIDIzMSwgODMsIDksIDExLCAyMTgsIDExMiwgCisgICAgMjI4LCA2NywgOSwgMTEsIDIxOCwgMTEyLCAyMjEsIDE2OCwgOSwgMTEsIDIxOCwgMTEyLCAyNTQsIDIwNSwgOSwgMTEsIAorICAgIDIxOCwgMTEyLCAyNDQsIDE1MCwgOSwgMTEsIDIxOCwgMTEyLCAyMjIsIDI4LCA5LCAxMSwgMjE4LCAxMTIsIDIyNCwgODQsIAorICAgIDksIDExLCAyMTgsIDExMiwgMjIwLCA2MSwgOSwgMTEsIDIxOCwgMTEyLCAyMTcsIDgsIDksIDExLCAyMTgsIDExMiwgMjE2LCAKKyAgICAxOTMsIDksIDExLCAyMTgsIDExMiwgMjM0LCAxMzUsIDksIDExLCAyMTgsIDExMiwgMjQ4LCAyMjQsIDksIDExLCAyMTgsIAorICAgIDExMiwgMjEwLCAxMTEsIDksIDExLCAyMTgsIDExMiwgMjQyLCAyNTEsIDksIDExLCAyMTgsIDExMiwgMjQ3LCAxMjcsIDI1MiwgCisgICAgNjIsIDksIDExLCAyMTgsIDExMiwgMjQ3LCAxMjcsIDI0NCwgMTUwLCA5LCAxMSwgMjMyLCAxMjgsIDI1NCwgMTc5LCA5LCAKKyAgICAxMSwgMjMyLCAxMjgsIDI1MiwgNjIsIDksIDExLCAyMzIsIDEyOCwgMjM1LCAxMjksIDksIDExLCAyMzIsIDEyOCwgMjQ4LCAKKyAgICAyMDMsIDksIDExLCAyMzIsIDEyOCwgMjQxLCAyMjUsIDksIDExLCAyMzIsIDEyOCwgMjEyLCAzMCwgOSwgMTEsIDIzMiwgCisgICAgMTI4LCAyMTAsIDEwOCwgOSwgMTEsIDIzMiwgMTI4LCAyNDIsIDQ0LCA5LCAxMSwgMjMyLCAxMjgsIDIxNywgODEsIDksIDExLCAKKyAgICAyMzIsIDEyOCwgMjExLCA0MywgOSwgMTEsIDIzMiwgMTI4LCAyMzMsIDEwOCwgOSwgMTEsIDIzMiwgMTI4LCAyMzEsIDgzLCAKKyAgICA5LCAxMSwgMjMyLCAxMjgsIDIyOCwgNjcsIDksIDExLCAyMzIsIDEyOCwgMjIxLCAxNjgsIDksIDExLCAyMzIsIDEyOCwgCisgICAgMjU0LCAyMDUsIDksIDExLCAyMzIsIDEyOCwgMjQ0LCAxNTAsIDksIDExLCAyMzIsIDEyOCwgMjIyLCAyOCwgOSwgMTEsIAorICAgIDIzMiwgMTI4LCAyMjQsIDg0LCA5LCAxMSwgMjMyLCAxMjgsIDIyMywgOTgsIDksIDExLCAyMzIsIDEyOCwgMjIwLCA2MSwgOSwgCisgICAgMTEsIDIzMiwgMTI4LCAyMTcsIDgsIDksIDExLCAyMzIsIDEyOCwgMjE2LCAxOTMsIDksIDExLCAyMzIsIDEyOCwgMjM0LCAKKyAgICAxMzUsIDksIDExLCAyMzIsIDEyOCwgMjE2LCAyMDMsIDksIDExLCAyMzIsIDEyOCwgMjQ4LCAyMjQsIDksIDExLCAyMzIsIAorICAgIDEyOCwgMjEwLCAxMTEsIDksIDExLCAyMzIsIDEyOCwgMjQyLCAyNTEsIDksIDExLCAxMzksIDI1MiwgNjIsIDksIDExLCAKKyAgICAxMzksIDIzNSwgMTI5LCA5LCAxMSwgMTM5LCAyNDgsIDIwMywgOSwgMTEsIDEzOSwgMjEyLCAzMCwgOSwgMTEsIDEzOSwgCisgICAgMjEwLCAxMDgsIDksIDExLCAxMzksIDI0MiwgNDQsIDksIDExLCAxMzksIDIxNywgODEsIDksIDExLCAxMzksIDIxMSwgNDMsIAorICAgIDksIDExLCAxMzksIDIzMywgMTA4LCA5LCAxMSwgMTM5LCAyMzEsIDgzLCA5LCAxMSwgMTM5LCAyMjgsIDY3LCA5LCAxMSwgCisgICAgMTM5LCAyMjEsIDE2OCwgOSwgMTEsIDEzOSwgMjU0LCAyMDUsIDksIDExLCAxMzksIDI0NCwgMTUwLCA5LCAxMSwgMTM5LCAKKyAgICAyMjIsIDI4LCA5LCAxMSwgMTM5LCAyMjQsIDg0LCA5LCAxMSwgMTM5LCAyMjMsIDk4LCA5LCAxMSwgMTM5LCAyMjAsIDYxLCAKKyAgICA5LCAxMSwgMTM5LCAyMTcsIDgsIDksIDExLCAxMzksIDIxNiwgMTkzLCA5LCAxMSwgMTM5LCAyMzQsIDEzNSwgOSwgMTEsIAorICAgIDEzOSwgMjE2LCAyMDMsIDksIDExLCAxMzksIDI0OCwgMjI0LCA5LCAxMSwgMTM5LCAyMTAsIDExMSwgOSwgMTEsIDEzOSwgCisgICAgMjQyLCAyNTEsIDksIDExLCAyMjYsIDE3MiwgNjYsIDIsIDEyMiwgMiwgMjE3LCA0NCwgOSwgMTEsIDIyNiwgMTcyLCAxMjIsIAorICAgIDIsIDI0OCwgMjAzLCAyMzEsIDIxMCwgODYsIDI0NSwgMjI4LCAyMTEsIDIzOSwgMjMxLCAyMTAsIDg2LCAyMTksIDMwLCAKKyAgICAyMTEsIDIzOSwgMjMxLCAyMTAsIDg2LCAyMTIsIDksIDIxMSwgMjM5LCAyMzEsIDIxMCwgODYsIDIyOCwgNjEsIDIxMSwgCisgICAgMjM5LCAyMzEsIDIxMCwgODYsIDIyMywgMTE0LCAyNDYsIDEwNCwgMjMxLCAyMTAsIDg2LCAyNDIsIDEzNCwgMjQ2LCAxMDQsIAorICAgIDIzMSwgMjEwLCA4NiwgNzEsIDI0NiwgMTA0LCAyMzEsIDIxMCwgODYsIDEyMywgNjQsIDI1MCwgMTQ5LCAyMzEsIDIxMCwgCisgICAgODYsIDExMywgNjQsIDI1MCwgMTQ5LCAyMzEsIDIxMCwgODYsIDEzNCwgNjQsIDI1MCwgMTQ5LCAyMzEsIDIxMCwgODYsIAorICAgIDI0NCwgMTksIDY0LCAyNTAsIDE0OSwgMjMxLCAyMTAsIDg2LCAyNDQsIDg5LCA2NCwgMjUwLCAxNDksIDIzMSwgMjEwLCA4NiwgCisgICAgMjE5LCAxMjcsIDY0LCAyNTAsIDE0OSwgMjMxLCAyMTAsIDg2LCAyMjAsIDEyNCwgNjQsIDI1MCwgMTQ5LCAyMzEsIDIxMCwgCisgICAgODYsIDI0NSwgMjAxLCA2NCwgMjUwLCAxNDksIDIzMSwgMjEwLCA4NiwgMjI4LCAyMDUsIDY0LCAyNTAsIDE0OSwgMjMxLCAKKyAgICAyMTAsIDg2LCAxMjMsIDY0LCAyNTIsIDE2MSwgMjMxLCAyMTAsIDg2LCAxMTMsIDY0LCAyNTIsIDE2MSwgMjMxLCAyMTAsIAorICAgIDg2LCAxMzQsIDY0LCAyNTIsIDE2MSwgMjMxLCAyMTAsIDg2LCAyNDQsIDE5LCA2NCwgMjUyLCAxNjEsIDIzMSwgMjEwLCA4NiwgCisgICAgMjQ0LCA4OSwgNjQsIDI1MiwgMTYxLCAyMzEsIDIxMCwgODYsIDIxOSwgMTI3LCA2NCwgMjUyLCAxNjEsIDIzMSwgMjEwLCAKKyAgICA4NiwgMjIwLCAxMjQsIDY0LCAyNTIsIDE2MSwgMjMxLCAyMTAsIDg2LCAyNDUsIDIwMSwgNjQsIDI1MiwgMTYxLCAyMzEsIAorICAgIDIxMCwgODYsIDIyOCwgMjA1LCA2NCwgMjUyLCAxNjEsIDIzMSwgMjEwLCA4NiwgMTIzLCA2NCwgMjUwLCA0MiwgMjMxLCAKKyAgICAyMTAsIDg2LCAxMTMsIDY0LCAyNTAsIDQyLCAyMzEsIDIxMCwgODYsIDEzNCwgNjQsIDI1MCwgNDIsIDIzMSwgMjEwLCA4NiwgCisgICAgMjQ0LCAxOSwgNjQsIDI1MCwgNDIsIDIzMSwgMjEwLCA4NiwgMjQ0LCA4OSwgNjQsIDI1MCwgNDIsIDIzMSwgMjEwLCA4NiwgCisgICAgMjE5LCAxMjcsIDY0LCAyNTAsIDQyLCAyMzEsIDIxMCwgODYsIDIyMCwgMTI0LCA2NCwgMjUwLCA0MiwgMjMxLCAyMTAsIDg2LCAKKyAgICAyNDUsIDIwMSwgNjQsIDI1MCwgNDIsIDIzMSwgMjEwLCA4NiwgMjI4LCAyMDUsIDY0LCAyNTAsIDQyLCAyMzEsIDIxMCwgODYsIAorICAgIDIyNSwgMjgsIDIzMSwgMjEwLCA4NiwgMjI2LCAxNjAsIDIzMSwgMjEwLCA4NiwgMjUyLCAxNjIsIDIzMSwgMjEwLCA4NiwgCisgICAgMjUwLCA3OCwgMjMxLCAyMTAsIDg2LCAyMTgsIDI0MSwgMjMxLCAyMTAsIDg2LCAyMTgsIDQwLCAyMzEsIDIxMCwgODYsIAorICAgIDI1MywgMTg3LCAyMzEsIDIxMCwgODYsIDIxMSwgMjMyLCAyMzEsIDIxMCwgODYsIDIzNSwgNjgsIDIzMSwgMjEwLCA4NiwgCisgICAgMjUyLCAxOTIsIDEzMSwgODYsIDIwMywgMjUyLCAxOTIsIDEzMSwgODYsIDI0MSwgNTAsIDEzMSwgODYsIDI0MSwgNDksIAorICAgIDEzMSwgODYsIDI0MSwgNDgsIDEzMSwgODYsIDI0MSwgNDcsIDEzMSwgODYsIDI0MSwgNDYsIDEzMSwgODYsIDI0MSwgNDUsIAorICAgIDEzMSwgODYsIDI0MSwgNDQsIDEzMSwgODYsIDI0MSwgNDMsIDEzMSwgODYsIDI0MSwgNDIsIDEzMSwgODYsIDI0MSwgNDEsIAorICAgIDEzMSwgODYsIDI0MSwgNDAsIDEzMSwgODYsIDI0MSwgMzksIDEzMSwgODYsIDI0MSwgMzgsIDEzMSwgODYsIDI0MSwgMzcsIAorICAgIDEzMSwgODYsIDI0MSwgMzYsIDEzMSwgODYsIDI0MSwgMzUsIDEzMSwgODYsIDI0MSwgMzQsIDEzMSwgODYsIDI0MSwgMzMsIAorICAgIDEzMSwgODYsIDI0MSwgMzIsIDEzMSwgODYsIDI0MSwgMzEsIDEzMSwgODYsIDI0MSwgMzAsIDEzMSwgODYsIDI0MSwgMjksIAorICAgIDEzMSwgODYsIDI0MSwgMjgsIDEzMSwgODYsIDI0MSwgMjcsIDEzMSwgODYsIDI0MSwgMjYsIDEzMSwgODYsIDI0MSwgMjUsIAorICAgIDEzMSwgODYsIDI0MSwgMjQsIDEzMSwgODYsIDI0MSwgMjMsIDEzMSwgODYsIDI0MSwgMjIsIDEzMSwgODYsIDI0MSwgMjEsIAorICAgIDEzMSwgODYsIDI0MSwgMjAsIDEzMSwgODYsIDI0MSwgMTksIDEzMSwgODYsIDI0MSwgMTgsIDEzMSwgODYsIDI0MSwgMTcsIAorICAgIDEzMSwgODYsIDI0MSwgMTYsIDEzMSwgODYsIDI0MSwgMTUsIDEzMSwgODYsIDI0MSwgMTQsIDEzMSwgODYsIDI0MSwgMTMsIAorICAgIDEzMSwgODYsIDI0MSwgMTIsIDEzMSwgODYsIDI0MSwgMTEsIDEzMSwgODYsIDI0MSwgMTAsIDEzMSwgODYsIDI0MSwgOSwgCisgICAgMTMxLCA4NiwgMjQxLCA4LCAxMzEsIDg2LCAyNDEsIDcsIDEzMSwgODYsIDI0MSwgNiwgMTMxLCA4NiwgMjQxLCA1LCAxMzEsIAorICAgIDg2LCAyNDEsIDQsIDEzMSwgODYsIDI0MSwgMywgMTMxLCA4NiwgMjQxLCAyLCAxMzEsIDg2LCA2NywgMjUyLCAxOTIsIDEzMSwgCisgICAgODYsIDIxMywgMjM4LCAxMzEsIDg2LCAyMTMsIDIzNywgMTMxLCA4NiwgMjEzLCAyMzYsIDEzMSwgODYsIDIxMywgMjM1LCAKKyAgICAxMzEsIDg2LCAyMTMsIDIzNCwgMTMxLCA4NiwgMjEzLCAyMzMsIDEzMSwgODYsIDIxMywgMjMyLCAxMzEsIDg2LCAyMTMsIAorICAgIDIzMSwgMTMxLCA4NiwgMjEzLCAyMzAsIDEzMSwgODYsIDIxMywgMjI5LCAxMzEsIDg2LCAyMTMsIDIyOCwgMTMxLCA4NiwgCisgICAgMjEzLCAyMjcsIDEzMSwgODYsIDIxMywgMjI2LCAxMzEsIDg2LCAyMTMsIDIyNSwgMTMxLCA4NiwgMjEzLCAyMjQsIDEzMSwgCisgICAgODYsIDIxMywgMjIzLCAxMzEsIDg2LCAyMTMsIDIyMiwgMTMxLCA4NiwgMjEzLCAyMjEsIDEzMSwgODYsIDIxMywgMjIwLCAKKyAgICAxMzEsIDg2LCAyMTMsIDIxOSwgMTMxLCA4NiwgMjEzLCAyMTgsIDEzMSwgODYsIDIxMywgMjE3LCAxMzEsIDg2LCAyMTMsIAorICAgIDIxNiwgMTMxLCA4NiwgMjEzLCAyMTUsIDEzMSwgODYsIDIxMywgMjE0LCAxMzEsIDg2LCAyMTMsIDIxMywgMTMxLCA4NiwgCisgICAgMjEzLCAyMTIsIDEzMSwgODYsIDIxMywgMjExLCAxMzEsIDg2LCAyMTMsIDIxMCwgMTMxLCA4NiwgMjEzLCAyMDksIDEzMSwgCisgICAgODYsIDIxMywgMjA4LCAxMzEsIDg2LCAyMTMsIDIwNywgMTMxLCA4NiwgMjEzLCAyMDYsIDEzMSwgODYsIDIxMywgMjA1LCAKKyAgICAxMzEsIDg2LCAyMTMsIDIwNCwgMTMxLCA4NiwgMjEzLCAyMDMsIDEzMSwgODYsIDIxMywgMjAyLCAxMzEsIDg2LCAyMTMsIAorICAgIDIwMSwgMTMxLCA4NiwgMjEzLCAyMDAsIDEzMSwgODYsIDIxMywgMTk5LCAxMzEsIDg2LCAyMTMsIDE5OCwgMTMxLCA4NiwgCisgICAgMjEzLCAxOTcsIDEzMSwgODYsIDIxMywgMTk2LCAxMzEsIDg2LCAyMTMsIDE5NSwgMTMxLCA4NiwgMjEzLCAxOTQsIDEzMSwgCisgICAgODYsIDIxMywgMTkzLCAxMzEsIDg2LCAyMTMsIDE5MiwgMTMxLCA4NiwgMjEzLCAxOTEsIDEzMSwgODYsIDIxMywgMTkwLCAKKyAgICAyMjUsIDM2LCAyNTAsIDI1MSwgMjUyLCAxOTIsIDIyNSwgMzYsIDI1MCwgMjUxLCAyNTUsIDE4LCA2NCwgMjE5LCAxNywgCisgICAgMjI1LCAzNiwgMjUwLCAyNTEsIDExMywgNjQsIDIxOSwgMTcsIDIyNSwgMzYsIDI1MCwgMjUxLCAxMzQsIDY0LCAyMTksIDE3LCAKKyAgICAyMjUsIDM2LCAyNTAsIDI1MSwgMjQ0LCAxOSwgNjQsIDIxOSwgMTcsIDIyNSwgMzYsIDI1MCwgMjUxLCAyNDQsIDg5LCA2NCwgCisgICAgMjE5LCAxNywgMjI1LCAzNiwgMjUwLCAyNTEsIDIxOSwgMTI3LCA2NCwgMjE5LCAxNywgMjI1LCAzNiwgMjUwLCAyNTEsIAorICAgIDIyMCwgMTI0LCA2NCwgMjE5LCAxNywgMjI1LCAzNiwgMjUwLCAyNTEsIDI0NSwgMjAxLCA2NCwgMjE5LCAxNywgMjI1LCAzNiwgCisgICAgMjUwLCAyNTEsIDIyOCwgMjA1LCA2NCwgMjE5LCAxNywgMjI1LCAzNiwgMjUwLCAyNTEsIDIxNiwgMjQ5LCA2NCwgMjE5LCAKKyAgICAxNywgMjI1LCAzNiwgMjUwLCAyNTEsIDIzNSwgMTQ1LCA2NCwgMjE5LCAxNywgMjI1LCAzNiwgMjUwLCAyNTEsIDIzNCwgMzcsIAorICAgIDY0LCAyMTksIDE3LCAyMjUsIDM2LCAyNTAsIDI1MSwgMjI0LCAxOCwgNjQsIDIxOSwgMTcsIDIyNSwgMzYsIDI1MCwgMjUxLCAKKyAgICAyMzQsIDg1LCA2NCwgMjE5LCAxNywgMjI1LCAzNiwgMjUwLCAyNTEsIDI1NSwgMTgsIDY0LCAyNDEsIDIzMiwgMjI1LCAzNiwgCisgICAgMjUwLCAyNTEsIDExMywgNjQsIDI0MSwgMjMyLCAyMjUsIDM2LCAyNTAsIDI1MSwgMTM0LCA2NCwgMjQxLCAyMzIsIDIyNSwgCisgICAgMzYsIDI1MCwgMjUxLCAyNDQsIDE5LCA2NCwgMjQxLCAyMzIsIDIyNSwgMzYsIDI1MCwgMjUxLCAyNDQsIDg5LCA2NCwgMjQxLCAKKyAgICAyMzIsIDIyNSwgMzYsIDI1MCwgMjUxLCAyMTksIDEyNywgNjQsIDI0MSwgMjMyLCAyMjUsIDM2LCAyNTAsIDI1MSwgMjIwLCAKKyAgICAxMjQsIDY0LCAyNDEsIDIzMiwgMjI1LCAzNiwgMjUwLCAyNTEsIDI0NSwgMjAxLCA2NCwgMjQxLCAyMzIsIDIyNSwgMzYsIAorICAgIDI1MCwgMjUxLCAyMjgsIDIwNSwgNjQsIDI0MSwgMjMyLCAyMjUsIDM2LCAyNTAsIDI1MSwgMjE2LCAyNDksIDY0LCAyNDEsIAorICAgIDIzMiwgMjI1LCAzNiwgMjUwLCAyNTEsIDIzNSwgMTQ1LCA2NCwgMjQxLCAyMzIsIDIyNSwgMzYsIDI1MCwgMjUxLCAyMzQsIAorICAgIDM3LCA2NCwgMjQxLCAyMzIsIDIyNSwgMzYsIDI1MCwgMjUxLCAyMjQsIDE4LCA2NCwgMjQxLCAyMzIsIDIyNSwgMzYsIDI1MCwgCisgICAgMjUxLCAyMzQsIDg1LCA2NCwgMjQxLCAyMzIsIDIyNSwgMzYsIDI1MCwgMjUxLCAyNTUsIDE4LCA2NCwgMjQ3LCAyNTUsIAorICAgIDIyNSwgMzYsIDI1MCwgMjUxLCAxMTMsIDY0LCAyNDcsIDI1NSwgMjI1LCAzNiwgMjUwLCAyNTEsIDEzNCwgNjQsIDI0NywgCisgICAgMjU1LCAyMjUsIDM2LCAyNTAsIDI1MSwgMjQ0LCAxOSwgNjQsIDI0NywgMjU1LCAyMjUsIDM2LCAyNTAsIDI1MSwgMjQ0LCAKKyAgICA4OSwgNjQsIDI0NywgMjU1LCAyMjUsIDM2LCAyNTAsIDI1MSwgMjE5LCAxMjcsIDY0LCAyNDcsIDI1NSwgMjI1LCAzNiwgCisgICAgMjUwLCAyNTEsIDIyMCwgMTI0LCA2NCwgMjQ3LCAyNTUsIDIyNSwgMzYsIDI1MCwgMjUxLCAyNDUsIDIwMSwgNjQsIDI0NywgCisgICAgMjU1LCAyMjUsIDM2LCAyNTAsIDI1MSwgMjI4LCAyMDUsIDY0LCAyNDcsIDI1NSwgMjI1LCAzNiwgMjUwLCAyNTEsIDIxNiwgCisgICAgMjQ5LCA2NCwgMjQ3LCAyNTUsIDIyNSwgMzYsIDI1MCwgMjUxLCAyMzUsIDE0NSwgNjQsIDI0NywgMjU1LCAyMjUsIDM2LCAKKyAgICAyNTAsIDI1MSwgMjM0LCAzNywgNjQsIDI0NywgMjU1LCAyMjUsIDM2LCAyNTAsIDI1MSwgMjI0LCAxOCwgNjQsIDI0NywgCisgICAgMjU1LCAyMjUsIDM2LCAyNTAsIDI1MSwgMjM0LCA4NSwgNjQsIDI0NywgMjU1LCAyMjUsIDM2LCAyNTAsIDI1MSwgODUsIAorICAgIDIzNSwgNjgsIDIyNSwgMzYsIDI1MCwgMjUxLCAyNTUsIDE4LCA2NCwgMjQ5LCAyNTAsIDIyNSwgMzYsIDI1MCwgMjUxLCAKKyAgICAxMTMsIDY0LCAyNDksIDI1MCwgMjI1LCAzNiwgMjUwLCAyNTEsIDEzNCwgNjQsIDI0OSwgMjUwLCAyMjUsIDM2LCAyNTAsIAorICAgIDI1MSwgMjQ0LCAxOSwgNjQsIDI0OSwgMjUwLCAyMjUsIDM2LCAyNTAsIDI1MSwgMjQ0LCA4OSwgNjQsIDI0OSwgMjUwLCAKKyAgICAyMjUsIDM2LCAyNTAsIDI1MSwgMjE5LCAxMjcsIDY0LCAyNDksIDI1MCwgMjI1LCAzNiwgMjUwLCAyNTEsIDIyMCwgMTI0LCAKKyAgICA2NCwgMjQ5LCAyNTAsIDIyNSwgMzYsIDI1MCwgMjUxLCAyNDUsIDIwMSwgNjQsIDI0OSwgMjUwLCAyMjUsIDM2LCAyNTAsIAorICAgIDI1MSwgMjI4LCAyMDUsIDY0LCAyNDksIDI1MCwgMjI1LCAzNiwgMjUwLCAyNTEsIDIxNiwgMjQ5LCA2NCwgMjQ5LCAyNTAsIAorICAgIDIyNSwgMzYsIDI1MCwgMjUxLCAyMzUsIDE0NSwgNjQsIDI0OSwgMjUwLCAyMjUsIDM2LCAyNTAsIDI1MSwgMjM0LCAzNywgCisgICAgNjQsIDI0OSwgMjUwLCAyMjUsIDM2LCAyNTAsIDI1MSwgMjI0LCAxOCwgNjQsIDI0OSwgMjUwLCAyMjUsIDM2LCAyNTAsIAorICAgIDI1MSwgMjM0LCA4NSwgNjQsIDI0OSwgMjUwLCAyMjUsIDM2LCAyNTAsIDI1MSwgNzEsIDIzNSwgNjgsIDIxLCAyMTAsIDg3LCAKKyAgICAyNDMsIDIzNiwgMjE4LCAxMzEsIDIxLCAyMTAsIDg3LCAyNDksIDIyNywgMjEsIDEyMywgMjQ5LCAyMjcsIDIxLCAxMTMsIAorICAgIDI0OSwgMjI3LCAyMSwgMTM0LCAyNDksIDIyNywgMjEsIDI0NCwgMTksIDI0OSwgMjI3LCAyMSwgMjQ0LCA4OSwgMjQ5LCAKKyAgICAyMjcsIDIxLCAyMTksIDEyNywgMjQ5LCAyMjcsIDIxLCAyMjAsIDEyNCwgMjQ5LCAyMjcsIDIxLCAyNDUsIDIwMSwgMjQ5LCAKKyAgICAyMjcsIDIxLCAyMjgsIDIwNSwgMjQ5LCAyMjcsIDg4LCA3LCA2LCAxLCA2MSwgODgsIDcsIDYsIDEsIDI1MywgMTY2LCA4OCwgCisgICAgNywgNiwgMSwgMjUxLCA3NCwgODgsIDcsIDYsIDEsIDI0OSwgNjgsIDg4LCA3LCA2LCAxLCA3NiwgODgsIDcsIDYsIDEsIAorICAgIDI0NSwgMTQsIDg4LCA3LCA2LCAxLCAyNDMsIDIwOSwgODgsIDcsIDYsIDEsIDI0MiwgNjcsIDg4LCA3LCA2LCAxLCA3NCwgCisgICAgODgsIDcsIDYsIDEsIDIzNSwgMTUwLCA4OCwgNywgNiwgMSwgMjM1LCAyOSwgODgsIDcsIDYsIDEsIDE1NiwgODgsIDcsIDYsIAorICAgIDEsIDE5NCwgODgsIDcsIDYsIDEsIDIzMCwgMzAsIDg4LCA3LCA2LCAxLCA3OCwgODgsIDcsIDYsIDEsIDIyNiwgMTA5LCA4OCwgCisgICAgNywgNiwgMSwgMjI0LCA5OSwgODgsIDcsIDYsIDEsIDE1MywgODgsIDcsIDYsIDEsIDIyMiwgOTMsIDg4LCA3LCA2LCAxLCAKKyAgICAyMTcsIDE1MywgODgsIDcsIDYsIDEsIDY5LCA4OCwgNywgNiwgMSwgMjE0LCAxMDUsIDg4LCA3LCA2LCAxLCAyMTIsIDk4LCAKKyAgICA4OCwgNywgNiwgMSwgMjExLCAxNzgsIDg4LCA3LCA2LCAxLCAyMTEsIDExNywgODgsIDcsIDYsIDEsIDIxMCwgMTU5LCAyMTYsIAorICAgIDcsIDIyMCwgNTUsIDI1MSwgMTY1LCA3LCA2LCAxLCAyMjIsIDkzLCAzNywgMzIsIDcsIDYsIDEsIDI1MSwgNzQsIDM3LCAzMiwgCisgICAgNywgNiwgMSwgMTUzLCAzNywgMjUwLCAxOTksIDM3LCAyMTEsIDE4MCwgOTIsIDcsIDYsIDEsIDYxLCA5MiwgNywgNiwgMSwgCisgICAgMjUzLCAxNjYsIDkyLCA3LCA2LCAxLCAyNTEsIDc0LCA5MiwgNywgNiwgMSwgMjQ5LCA2OCwgOTIsIDcsIDYsIDEsIDc2LCAKKyAgICA5MiwgNywgNiwgMSwgMjQ1LCAxNCwgOTIsIDcsIDYsIDEsIDI0MywgMjA5LCA5MiwgNywgNiwgMSwgMjQyLCA2NywgOTIsIDcsIAorICAgIDYsIDEsIDc0LCA5MiwgNywgNiwgMSwgMjM1LCAxNTAsIDkyLCA3LCA2LCAxLCAyMzUsIDI5LCA5MiwgNywgNiwgMSwgMTU2LCAKKyAgICA5MiwgNywgNiwgMSwgMTk0LCA5MiwgNywgNiwgMSwgMjMwLCAzMCwgOTIsIDcsIDYsIDEsIDc4LCA5MiwgNywgNiwgMSwgCisgICAgMjI2LCAxMDksIDkyLCA3LCA2LCAxLCAyMjQsIDk5LCA5MiwgNywgNiwgMSwgMTUzLCA5MiwgNywgNiwgMSwgMjIyLCA5MywgCisgICAgOTIsIDcsIDYsIDEsIDIxNywgMTUzLCA5MiwgNywgNiwgMSwgNjksIDkyLCA3LCA2LCAxLCAyMTQsIDEwNSwgOTIsIDcsIDYsIAorICAgIDEsIDIxMiwgOTgsIDkyLCA3LCA2LCAxLCAyMTEsIDE3OCwgOTIsIDcsIDYsIDEsIDIxMSwgMTE3LCA5MiwgNywgNiwgMSwgCisgICAgMjEwLCAxNTksIDkyLCAyNDAsIDIwOCwgOTIsIDIzMCwgNTQsIDkyLCAyMjEsIDE4NSwgOTIsIDIxOCwgMjI4LCA5MiwgMjI0LCAKKyAgICAyMjEsIDkyLCAyMTIsIDIzLCAxNTIsIDM3LCA3LCA2LCAxLCA2MSwgMTUyLCAzNywgNywgNiwgMSwgMjUzLCAxNjYsIDE1MiwgCisgICAgMzcsIDcsIDYsIDEsIDI1MSwgNzQsIDE1MiwgMzcsIDcsIDYsIDEsIDI0OSwgNjgsIDE1MiwgMzcsIDcsIDYsIDEsIDc2LCAKKyAgICAxNTIsIDM3LCA3LCA2LCAxLCAyNDUsIDE0LCAxNTIsIDM3LCA3LCA2LCAxLCAyNDMsIDIwOSwgMTUyLCAzNywgNywgNiwgMSwgCisgICAgMjQyLCA2NywgMTUyLCAzNywgNywgNiwgMSwgNzQsIDE1MiwgMzcsIDcsIDYsIDEsIDIzNSwgMTUwLCAxNTIsIDM3LCA3LCA2LCAKKyAgICAxLCAyMzUsIDI5LCAxNTIsIDM3LCA3LCA2LCAxLCAxNTYsIDE1MiwgMzcsIDcsIDYsIDEsIDE5NCwgMTUyLCAzNywgNywgNiwgCisgICAgMSwgMjMwLCAzMCwgMTUyLCAzNywgNywgNiwgMSwgNzgsIDE1MiwgMzcsIDcsIDYsIDEsIDIyNiwgMTA5LCAxNTIsIDM3LCA3LCAKKyAgICA2LCAxLCAyMjQsIDk5LCAxNTIsIDM3LCA3LCA2LCAxLCAxNTMsIDE1MiwgMzcsIDcsIDYsIDEsIDIyMiwgOTMsIDE1MiwgMzcsIAorICAgIDcsIDYsIDEsIDIxNywgMTUzLCAxNTIsIDM3LCA3LCA2LCAxLCA2OSwgMTUyLCAzNywgNywgNiwgMSwgMjE0LCAxMDUsIDE1MiwgCisgICAgMzcsIDcsIDYsIDEsIDIxMiwgOTgsIDE1MiwgMzcsIDcsIDYsIDEsIDIxMSwgMTc4LCAxNTIsIDM3LCA3LCA2LCAxLCAyMTEsIAorICAgIDExNywgMTUyLCAzNywgNywgNiwgMSwgMjEwLCAxNTksIDIyMywgMTYwLCAyMzEsIDEwMiwgNTAsIDIyMywgMTYwLCAyMzEsIAorICAgIDk5LCA1MCwgMTUyLCA5MiwgNywgNiwgMSwgNjEsIDE1MiwgOTIsIDcsIDYsIDEsIDI1MywgMTY2LCAxNTIsIDkyLCA3LCA2LCAKKyAgICAxLCAyNTEsIDc0LCAxNTIsIDkyLCA3LCA2LCAxLCAyNDksIDY4LCAxNTIsIDkyLCA3LCA2LCAxLCA3NiwgMTUyLCA5MiwgNywgCisgICAgNiwgMSwgMjQ1LCAxNCwgMTUyLCA5MiwgNywgNiwgMSwgMjQzLCAyMDksIDE1MiwgOTIsIDcsIDYsIDEsIDI0MiwgNjcsIAorICAgIDE1MiwgOTIsIDcsIDYsIDEsIDc0LCAxNTIsIDkyLCA3LCA2LCAxLCAyMzUsIDE1MCwgMTUyLCA5MiwgNywgNiwgMSwgMjM1LCAKKyAgICAyOSwgMTUyLCA5MiwgNywgNiwgMSwgMTU2LCAxNTIsIDkyLCA3LCA2LCAxLCAxOTQsIDE1MiwgOTIsIDcsIDYsIDEsIDIzMCwgCisgICAgMzAsIDE1MiwgOTIsIDcsIDYsIDEsIDc4LCAxNTIsIDkyLCA3LCA2LCAxLCAyMjYsIDEwOSwgMTUyLCA5MiwgNywgNiwgMSwgCisgICAgMjI0LCA5OSwgMTUyLCA5MiwgNywgNiwgMSwgMTUzLCAxNTIsIDkyLCA3LCA2LCAxLCAyMjIsIDkzLCAxNTIsIDkyLCA3LCA2LCAKKyAgICAxLCAyMTcsIDE1MywgMTUyLCA5MiwgNywgNiwgMSwgNjksIDE1MiwgOTIsIDcsIDYsIDEsIDIxNCwgMTA1LCAxNTIsIDkyLCAKKyAgICA3LCA2LCAxLCAyMTIsIDk4LCAxNTIsIDkyLCA3LCA2LCAxLCAyMTEsIDE3OCwgMTUyLCA5MiwgNywgNiwgMSwgMjExLCAxMTcsIAorICAgIDE1MiwgOTIsIDcsIDYsIDEsIDIxMCwgMTU5LCAyNDksIDEzNiwgMTUyLCA5MiwgNywgNiwgMSwgMjI2LCAxMDksIDE1MiwgCisgICAgOTIsIDI0MCwgMTIwLCAxNTIsIDkyLCAxOTEsIDE1MiwgOTIsIDIwNiwgMTUyLCA5MiwgMjU1LCAzNCwgMTUyLCA5MiwgMjEyLCAKKyAgICAyMywgNDIsIDI0NywgMTcyLCA5MiwgMjUwLCAzMSwgOTIsIDI0OSwgMTc4LCA5MiwgMjQ0LCA0LCA5MiwgMjQwLCAxMTIsIAorICAgIDkyLCAyMjksIDkxLCA5MiwgMjI5LCA4NCwgOTIsIDIyNiwgMjE4LCA5MiwgMjE5LCAzNywgOTIsIDEyMCwgMiwgMjQ1LCAzOSwgCisgICAgNzksIDkyLCAyMTMsIDExOSwgMjIzLCAxMDYsIDIzNSwgMjQ2LCAxNiwgMSwgNjEsIDIyMywgMTA2LCAyMzUsIDI0NiwgMTYsIAorICAgIDEsIDI1MywgMTY2LCAyMjMsIDEwNiwgMjM1LCAyNDYsIDE2LCAxLCAyNTEsIDc0LCAyMjMsIDEwNiwgMjM1LCAyNDYsIDE2LCAKKyAgICAxLCAyNDksIDY4LCAyMjMsIDEwNiwgMjM1LCAyNDYsIDE2LCAxLCA3NiwgMjIzLCAxMDYsIDIzNSwgMjQ2LCAxNiwgMSwgCisgICAgMjQ1LCAxNCwgMjIzLCAxMDYsIDIzNSwgMjQ2LCAxNiwgMSwgMjQzLCAyMDksIDIyMywgMTA2LCAyMzUsIDI0NiwgMTYsIDEsIAorICAgIDI0MiwgNjcsIDIyMywgMTA2LCAyMzUsIDI0NiwgMTYsIDEsIDc0LCAyMjMsIDEwNiwgMjM1LCAyNDYsIDE2LCAxLCAyMzUsIAorICAgIDE1MCwgMjIzLCAxMDYsIDIzNSwgMjQ2LCAxNiwgMSwgMjM1LCAyOSwgMjIzLCAxMDYsIDIzNSwgMjQ2LCAxNiwgMSwgMTU2LCAKKyAgICAyMjMsIDEwNiwgMjM1LCAyNDYsIDE2LCAxLCAxOTQsIDIyMywgMTA2LCAyMzUsIDI0NiwgMTYsIDEsIDIzMCwgMzAsIDIyMywgCisgICAgMTA2LCAyMzUsIDI0NiwgMTYsIDEsIDc4LCAyMjMsIDEwNiwgMjM1LCAyNDYsIDE2LCAxLCAyMjYsIDEwOSwgMjIzLCAxMDYsIAorICAgIDIzNSwgMjQ2LCAxNiwgMSwgMjI0LCA5OSwgMjIzLCAxMDYsIDIzNSwgMjQ2LCAxNiwgMSwgMTUzLCAyMjMsIDEwNiwgMjM1LCAKKyAgICAyNDYsIDE2LCAxLCAyMjIsIDkzLCAyMjMsIDEwNiwgMjM1LCAyNDYsIDE2LCAxLCAyMTcsIDE1MywgMjIzLCAxMDYsIDIzNSwgCisgICAgMjQ2LCAxNiwgMSwgNjksIDIyMywgMTA2LCAyMzUsIDI0NiwgMTYsIDEsIDIxNCwgMTA1LCAyMjMsIDEwNiwgMjM1LCAyNDYsIAorICAgIDE2LCAxLCAyMTIsIDk4LCAyMjMsIDEwNiwgMjM1LCAyNDYsIDE2LCAxLCAyMTEsIDE3OCwgMjIzLCAxMDYsIDIzNSwgMjQ2LCAKKyAgICAxNiwgMSwgMjExLCAxMTcsIDIyMywgMTA2LCAyMzUsIDI0NiwgMTYsIDEsIDIxMCwgMTU5LCA0MiwgMTQxLCAyNDEsIDcwLCAKKyAgICA5MiwgNTYsIDIzNCwgMjQsIDkyLCA1NiwgMjA2LCA5MiwgMTAsIDIxNCwgMTc3LCAyMzgsIDU3LCA5MiwgMTAsIDIxNCwgCisgICAgMTc3LCAyMzgsIDYxLCA5MiwgMTAsIDIxNCwgMTc3LCAyMzgsIDY5LCA5MiwgNTYsIDI0OCwgOTgsIDkyLCAxMCwgMjE0LCAKKyAgICAxNzcsIDIzOCwgNzYsIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgNjMsIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgMzUsIDkyLCAKKyAgICAxMCwgMjE0LCAxNzcsIDIzOCwgNjIsIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgNzUsIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgCisgICAgNDksIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgNDIsIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgNTEsIDkyLCAxMCwgMjE0LCAKKyAgICAxNzcsIDIzOCwgNzIsIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgNTgsIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgNzQsIDkyLCAKKyAgICAxMCwgMjE0LCAxNzcsIDIzOCwgNTAsIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgNzMsIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgCisgICAgMzYsIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgNDEsIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgMzQsIDkyLCAxMCwgMjE0LCAKKyAgICAxNzcsIDIzOCwgNjQsIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgNjYsIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgNDQsIDkyLCAKKyAgICAxMCwgMjE0LCAxNzcsIDIzOCwgNTUsIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgNTMsIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgCisgICAgNzksIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgNzgsIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgMzIsIDkyLCAxMCwgMjE0LCAKKyAgICAxNzcsIDIzOCwgNTksIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgNzcsIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgNjgsIDkyLCAKKyAgICAxMCwgMjE0LCAxNzcsIDIzOCwgNTQsIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgMzMsIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgCisgICAgNTYsIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgMzgsIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgMzcsIDkyLCAxMCwgMjE0LCAKKyAgICAxNzcsIDIzOCwgNjcsIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgNDUsIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgNDcsIDkyLCAKKyAgICAxMCwgMjE0LCAxNzcsIDIzOCwgNDgsIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgNDAsIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgCisgICAgNzEsIDkyLCAxMCwgMjE0LCAxNzcsIDIzOCwgNjUsIDIxNiwgNywgMjIwLCA1NSwgMjUxLCAxNjUsIDEwLCAyMTQsIDE3NywgCisgICAgMjM4LCA0NiwgMjE2LCA3LCAyMjAsIDU1LCAyNTEsIDE2NSwgMTAsIDIxNCwgMTc3LCAyMzgsIDc4LCAyMTYsIDcsIDIyMCwgCisgICAgNTUsIDI1MSwgMTY1LCAxMCwgMjE0LCAxNzcsIDIzOCwgNzYsIDIxNiwgNywgMjIwLCA1NSwgMjUxLCAxNjUsIDEwLCAyMTQsIAorICAgIDE3NywgMjM4LCA2MCwgMjE2LCA3LCAyMjAsIDU1LCAyNTEsIDE2NSwgMTAsIDIxNCwgMTc3LCAyMzgsIDQzLCAyMTYsIDcsIAorICAgIDIyMCwgNTUsIDI1MSwgMTY1LCAxMCwgMjE0LCAxNzcsIDIzOCwgNTYsIDIxNiwgNywgMjIwLCA1NSwgMjUxLCAxNjUsIDEwLCAKKyAgICAyMTQsIDE3NywgMjM4LCAzOSwgMjE2LCA3LCAyMjAsIDU1LCAyNTEsIDE2NSwgMTAsIDIxNCwgMTc3LCAyMzgsIDcwLCAyMTYsIAorICAgIDcsIDIyMCwgNTUsIDI1MSwgMTY1LCAxMCwgMjE0LCAxNzcsIDIzOCwgNTIsIDM3LCAxNTQsIDI1NCwgMjU0LCAzNywgMTU0LCAKKyAgICAyNTUsIDIxLCAyNDksIDc5LCAyNDQsIDUwLCAyNTAsIDgsIDIxNCwgMTk0LCAyMjgsIDIxOCwgMiwgMjE4LCAxNTUsIDIxOCwgCisgICAgMzQsIDExNSwgMjMwLCAxMTksIDIxOCwgMzMsIDI1MCwgMzQsIDI1MywgMjE1LCAyNDYsIDYyLCAyMTgsIDMyLCAxMTUsIAorICAgIDI1MSwgMTI2LCAyMjMsIDE2MSwgMjUxLCAxNDgsIDI1MywgMjE1LCAyMjgsIDIxNywgMjEyLCA0MSwgMjEyLCAzNSwgMjEzLCAKKyAgICAxMzEsIDIzMCwgMjAwLCAyMTIsIDI1LCAyNDUsIDIzMiwgMjQyLCAxODgsIDI0NSwgNTMsIDI0NSwgMjMyLCAyNDIsIDE4OCwgCisgICAgMjU0LCAxMzYsIDI0NSwgMjMyLCAyNDIsIDE4OCwgMjUzLCAyMzMsIDI0MiwgMTg4LCAyLCAyMzEsIDU2LCAxNjYsIDIzMCwgCisgICAgMTM0LCA4NywgMjEyLCAyNywgMjQ5LCAxNDUsIDIzMCwgMTM0LCA4NywgMjQ0LCAxMDAsIDIyNCwgMjUsIDIzMCwgMTM0LCAKKyAgICA4NywgMjEyLCAyNywgMjQyLCAyMTcsIDIzMCwgMTM0LCA4NywgMjQzLCAyMzYsIDIzMCwgMTM0LCA4NywgMjEyLCA1MiwgCisgICAgMjQyLCAyMTcsIDIzMCwgMTM0LCA4NywgMjMzLCA4NiwgMjI0LCAyNSwgMjMwLCAxMzQsIDg3LCAyMTIsIDUyLCAyNDksIAorICAgIDE0NSwgMjMwLCAxMzQsIDg3LCAyNDksIDE0NSwgMjMwLCAxMzMsIDE2NiwgMjMwLCAxMzQsIDIsIDI0NCwgMTk4LCAyNDQsIAorICAgIDEwMCwgMjI0LCAyNSwgMjMwLCAxMzQsIDIsIDI0NCwgMTk4LCAyMzMsIDg2LCAyMjQsIDI1LCAyMzAsIDEzNCwgMiwgMjQ0LCAKKyAgICAxOTgsIDI0MywgMjM2LCAyMzAsIDEzNCwgMiwgMjQ0LCAxOTgsIDIxOCwgMzksIDIsIDI0NCwgMTk4LCAyNDIsIDE4NiwgCisgICAgMjE4LCAxNTgsIDIyMCwgMSwgMjE4LCAxNTgsIDI1MCwgMTI0LCAyMjEsIDE3MCwgMjQ1LCA0NywgMjE1LCAyMzYsIDI0OCwgCisgICAgOTIsIDIxNSwgMjM2LCAyMjYsIDYzLCAyMTUsIDIzNiwgMjUxLCAzNSwgMjE1LCAxMTAsIDI1MCwgMTI2LCAyNTEsIDIxOCwgCisgICAgMjIyLCAxOTMsIDI0MSwgMTg2LCAyMTgsIDM3LCAyNTEsIDIxOCwgMjQ1LCAyMzYsIDY0LCAyMzEsIDE5OSwgMjQ1LCAyMzYsIAorICAgIDY0LCAyMjMsIDM0LCAyNDEsIDIxMSwgMjQ0LCAxOSwgMjMzLCA2MCwgMjQ5LCAyNTQsIDIzMSwgMTc1LCAyMzMsIDU5LCAKKyAgICAyNDQsIDE4NCwgMjMzLCA1OSwgMjMzLCA2MCwgMjQ0LCA1NSwgMjM2LCA3LCAyMTEsIDIzOSwgMjMwLCA2MywgMjE2LCAzNSwgCisgICAgMjUzLCAxOTksIDI0MiwgMTUwLCAyMzEsIDcyLCAyMTIsIDM5LCAyMTcsIDU4LCAyMzMsIDMyLCAyNTIsIDE1NywgMjI1LCAKKyAgICA2NSwgMjIzLCAxMTQsIDI1NCwgNjIsIDI0MiwgMTM0LCAyNTQsIDYyLCAyMjUsIDIyMCwgMjI1LCAyMjEsIDI1MCwgMTI3LCAKKyAgICAyMTgsIDExNiwgMjQyLCAzMCwgMjE5LCA5MiwgNjQsIDIyNSwgNDcsIDIzMSwgOTIsIDIyNiwgMjAxLCAyNTEsIDIwMiwgCisgICAgMjI0LCAyMzIsIDIzMywgNDIsIDIyMywgMzUsIDI0OSwgMTUwLCAyMjMsIDM1LCAyNTIsIDE2NywgMjQ5LCAxODEsIDIyMywgCisgICAgMzQsIDI0OSwgMTAzLCAyMiwgMjIzLCAzNCwgMjE4LCAxNDMsIDI1MSwgMTc1LCAyMTksIDE2LCAyNTEsIDE1OSwgMjQ0LCAzLCAKKyAgICAyNDMsIDI1NSwgMjIyLCAyMDksIDIxNywgMjQ3LCAyMjQsIDIzNCwgMjQ4LCAxODMsIDIyNiwgMjQwLCAyMTgsIDgsIDI0NCwgCisgICAgMCwgMjE5LCAyMzIsIDI0NCwgOTksIDI1MSwgMjksIDIsIDIxNywgMjQwLCAyNDgsIDQzLCAyMTksIDU0LCAyNDAsIDExOSwgCisgICAgMjQ5LCAxNDksIDIyMCwgNzIsIDI0MCwgMTE4LCAyNDAsIDExOSwgMjQ5LCAxNDksIDI0NiwgMTE2LCAyNDksIDE4MCwgMjUwLCAKKyAgICA5MiwgMTMwLCAyNTEsIDYsIDIzMiwgMTQ3LCAyNDksIDk2LCAyNDEsIDYyLCAyMjQsIDIzNiwgMjE5LCAyNDIsIDI1MiwgNDQsIAorICAgIDI1MSwgMTcxLCAyMjQsIDIzNywgNjQsIDI0NCwgNDEsIDI0OSwgMTc5LCAyNDQsIDMyLCAyMiwgMjM0LCAzOCwgMjE3LCAyMCwgCisgICAgMjExLCAyMzAsIDI0MiwgMjAsIDIyMiwgMTQsIDI1MSwgMTg1LCAyMiwgMjQ5LCAxMTAsIDIxMSwgMjM3LCAyNDIsIDE5MSwgCisgICAgMjQ5LCAyNDMsIDI0MiwgMTkxLCAyMTUsIDE5NCwgMjQ2LCA5OCwgMjUyLCA3MCwgMjMwLCA5OCwgMjUwLCAxNSwgMjUyLCAKKyAgICA3MCwgMjMwLCA5NywgMjUyLCAxOTUsIDI1MSwgMTg0LCAyMjMsIDM2LCAyMTEsIDIwMSwgMjI0LCAxOTgsIDI1MSwgMjQzLCAKKyAgICAyNTEsIDI4LCAyMzUsIDE0NCwgMjUwLCA4NSwgMjE1LCAyMzYsIDI0NCwgMTcwLCAyNTAsIDg0LCAyNDQsIDEwMiwgMjQ0LCAKKyAgICAxMDMsIDIxOSwgMTQsIDI1MiwgMTY2LCAyMjUsIDI1NCwgMjI0LCAyNDcsIDI0OSwgMjEyLCAyNTIsIDE2NywgMjE3LCA2MCwgCisgICAgMjE1LCAyMzYsIDI0OSwgMTM2LCAyNDQsIDc1LCAyMjUsIDY2LCAyNDgsIDg5LCAyMzUsIDEzNywgMjQ3LCAxMzksIDI1MCwgCisgICAgMjQwLCAyMTgsIDExNSwgMjExLCAyNDAsIDI1MCwgMTA2LCAyMzAsIDEzNCwgMjEzLCAxNjQsIDI1MCwgMTcwLCAyMjEsIAorICAgIDIwMSwgMjIxLCAyMjYsIDI0MiwgMTU1LCAyNTEsIDMsIDI1MCwgMjQxLCAyNDAsIDI1MiwgMjQ0LCAxMzgsIDIxMiwgMCwgCisgICAgMjIyLCAyMDIsIDI0OSwgMjQ0LCAyNDQsIDk0LCAyMjUsIDUsIDIyLCAyNDQsIDk4LCAyMzAsIDIzMiwgMjMwLCAxMTMsIAorICAgIDI1MSwgMTgsIDI1MCwgNDcsIDI0MSwgMjM5LCAyNTMsIDI0OSwgMjI2LCA2NiwgMjE2LCAxNSwgMjQyLCAyLCAyNTAsIDM3LCAKKyAgICAyMTYsIDI0MywgMjE2LCAxMTQsIDI1MCwgMjgsIDI1MSwgMjEwLCAyMjUsIDE4MCwgMjUzLCAyNDgsIDIxMywgMTcyLCAyNDMsIAorICAgIDExNywgMjQ3LCAyMDUsIDI0MSwgMTYzLCAyMTksIDg2LCAyMzEsIDIzOSwgMjUxLCAyNTMsIDI0MywgMTE4LCAyNDcsIDI0OCwgCisgICAgMjUxLCAxNzQsIDI0NCwgNjAsIDIyNSwgMzYsIDI1MCwgMjQ5LCAyOCwgMjI4LCA1MiwgMjMwLCA5MCwgMjgsIDIyOCwgNDcsIAorICAgIDIyMSwgMjE0LCAyNDIsIDEwNiwgMjgsIDIzNCwgMTQzLCAyMTUsIDE5MSwgMjEzLCAxNTQsIDI4LCAyMjEsIDE5NCwgMjIyLCAKKyAgICAxMjYsIDIyMCwgMTMsIDIsIDIyMSwgMjI5LCAyMTYsIDI0NSwgMjIzLCAxODEsIDIyLCAyNTIsIDE2NywgMjE5LCAxMDcsIAorICAgIDIyLCAyMTksIDEwNywgMjUxLCAxOTUsIDI1MiwgMTMxLCAyMiwgMjQxLCA1NiwgMjUwLCAxMjgsIDI0NCwgODEsIDIxOSwgCisgICAgNjUsIDIyMiwgMTI3LCAyMTgsIDEzLCAyMTUsIDE5NSwgMjQwLCAyNTMsIDIyMywgMTgyLCAyNTQsIDEzNywgMjQ0LCAzOSwgCisgICAgMjIyLCAxMzgsIDI0NCwgMzksIDIxNywgMjQyLCAyNDAsIDI0MiwgMjUxLCAxMjcsIDI0MCwgMjQyLCAyLCAyNDMsIDEwMSwgCisgICAgMjI2LCAyMzMsIDI1MSwgMTI3LCAyMzUsIDEzNywgMjI0LCAyNDIsIDIyNiwgMjMyLCAyNDUsIDUyLCAyMjQsIDI0MiwgMjI2LCAKKyAgICAyMzIsIDI0MCwgMjUxLCAyNTIsIDE1MywgMjUzLCAxODksIDIxNiwgMjUzLCAyMzEsIDIzOSwgMjQwLCAyNDcsIDIzMiwgCisgICAgMTE3LCAyNDAsIDI0NywgMjQ5LCAxODQsIDIxOCwgMTI3LCAyMjEsIDIwMCwgMjQ4LCA1MSwgMjE4LCAxMjcsIDI0NCwgMTg4LCAKKyAgICAyMzUsIDE1NSwgMjMzLCA5NSwgMjM1LCAxMzcsIDI1MCwgMjM0LCAyNDUsIDUyLCAyNTAsIDIzNCwgMjIzLCAxNDQsIDIzMCwgCisgICAgMTE3LCAyMjYsIDExOCwgMjEyLCA0MSwgMjUxLCAxMzEsIDI0OSwgMTUzLCAyMTYsIDEwNywgMjMzLCAyNCwgMjIzLCAxODMsIAorICAgIDI1MCwgMjMyLCAyNDYsIDEwNCwgMjQ5LCAxNDMsIDIxMiwgMywgMjE5LCA3MiwgMjE5LCA3MCwgMjQwLCAyNTIsIDIyMywgCisgICAgMTU2LCAyNDIsIDE3NywgMjIwLCA1OSwgMjMwLCAxNTAsIDIyMiwgMTk2LCAyNTAsIDExNiwgMjQ3LCAxNDQsIDIyNSwgNzYsIAorICAgIDI1MSwgMjExLCAyNDUsIDE3NywgMjI2LCAyNDIsIDIxOCwgMjU0LCAyMjAsIDU0LCAyNTEsIDEzMCwgMjU0LCAxMDAsIDI0MSwgCisgICAgNjEsIDIzMywgMTI3LCAyNTIsIDY4LCAyNDQsIDk4LCAyMTUsIDE5NCwgMjQ0LCA5OCwgMjUxLCAyMTcsIDIxNSwgOTEsIAorICAgIDI0MiwgMCwgMjUwLCAxMTcsIDI1MiwgMTk1LCAyNTAsIDExNywgMjQzLCAyNTAsIDI1MiwgMTk1LCAyNTAsIDExNywgMjUxLCAKKyAgICAyNDUsIDIyNSwgMTk4LCAyMzQsIDMyLCAyMjQsIDI1MSwgMjQ2LCA5NSwgMjUxLCAxOSwgMjUyLCAxODUsIDI1MSwgMTksIAorICAgIDI0NywgMTM4LCAyMzAsIDExOCwgMjQ0LCAxOTgsIDI0OSwgMTU0LCAyNDQsIDE5OCwgMjE2LCAxMDgsIDI0NCwgMTk4LCAKKyAgICAyMjMsIDE4NCwgMjQ0LCAxOTgsIDI1MCwgMjMzLCAyNDQsIDE5OCwgMjQ2LCAxMDUsIDI0NCwgMTk4LCAyMTgsIDI0MywgCisgICAgMjEyLCAzLCAyNDAsIDI1MywgMjQ0LCAxOTgsIDIzMCwgMTUxLCAyNDQsIDE5OCwgMjQ3LCAxNDUsIDI0NCwgMTk4LCAyMjUsIAorICAgIDc3LCAyNDQsIDE5OCwgMjQzLCAyNTMsIDI0NCwgMTk4LCAyNDIsIDI3LCAyNDQsIDE5OCwgMjExLCAyMjQsIDI0NCwgMTk4LCAKKyAgICAyNTIsIDc5LCAyNDQsIDE5OCwgMjI2LCA0OSwgMjQ0LCAxOTgsIDIyNSwgNzcsIDIyOCwgNTgsIDIyNSwgMjM2LCAyMjQsIAorICAgIDE4OSwgMjQ1LCAyMSwgMjQ1LCAyMzUsIDIyOCwgNTgsIDIzMCwgMTE1LCAyMTYsIDIwLCA3MSwgMTIwLCAyMjUsIDEwLCAKKyAgICAyNTIsIDE5MCwgMjM1LCAyNDksIDcxLCAxMjQsIDIyNSwgMTAsIDI1MiwgMTkwLCAyMzUsIDI0OSwgNzEsIDQzLCAyMjUsIAorICAgIDEwLCAyNTIsIDE5MCwgMjM1LCAyNDksIDcxLCA0NCwgMjI1LCAxMCwgMjUyLCAxOTAsIDIzNSwgMjQ5LCAyNDQsIDkyLCAKKyAgICAyNDIsIDIzLCA1MCwgMjEyLCAzMywgMjQyLCAyMywgNTAsIDIyNiwgMjE5LCAyNDIsIDIzLCA1MCwgMjE2LCAxMzYsIDEyMCwgCisgICAgNTAsIDIxNiwgMTM2LCAxMjQsIDUwLCAyNTAsIDI3LCAyNDIsIDE4LCA1MCwgMjA0LCAyNDIsIDE4LCA1MCwgMjQ5LCAxMzEsIAorICAgIDIxMSwgMjIwLCAyNDIsIDIsIDI0NSwgMjIsIDIyOSwgMTA5LCAyMTcsIDE1MiwgMjM1LCAxMzEsIDI0NiwgMTAwLCAyMzQsIAorICAgIDg4LCAyNTEsIDI1NSwgMjExLCAyMjAsIDI1MCwgMSwgMjI0LCAxMzAsIDI0MiwgMjEsIDIyNCwgMjMzLCAyMzEsIDE4MiwgCisgICAgMjIwLCA2LCAyNTMsIDIxMSwgMjIwLCA2LCAyNDEsIDE3MSwgMjIwLCA2LCAyMTEsIDIyMCwgMjIxLCAyNDIsIDIxMSwgMjIwLCAKKyAgICAyNTEsIDE5NCwgMjQ0LCAzNywgMjUxLCA5OCwgMjM2LCA3LCAyMTksIDE3MSwgMjUxLCA5NywgMjM2LCA3LCAyMTksIDE3MSwgCisgICAgMjUxLCAxNzAsIDI0MiwgMjAxLCAyMzEsIDE5MCwgMjExLCAyMjEsIDI0NCwgMTgyLCAyMzEsIDE5MSwgMjIsIDIxMSwgMjIyLCAKKyAgICAyNDEsIDY3LCAyNDIsIDE3LCAxMTMsIDIzMSwgNjQsIDI0MSwgNjcsIDI0MiwgMTcsIDExMywgMjExLCAyMTksIDI0MSwgNjcsIAorICAgIDI0MiwgMTcsIDIyNSwgMiwgMjI2LCAyMzEsIDIxMSwgMjIyLCAyLCAyNTEsIDExNCwgMjQ1LCAyMzMsIDI1MSwgMTQ5LCAyLCAKKyAgICAyMTMsIDI0NiwgMjI1LCAxNzEsIDIsIDI1MSwgMjIwLCAyNDIsIDQxLCAyMzEsIDE5MSwgMiwgMjQyLCAxMTcsIDIyNSwgCisgICAgMTEyLCAyMzEsIDE3OSwgMjMxLCAxOTEsIDIsIDIxNSwgOTgsIDIyNiwgMjEyLCAyMzEsIDE5MCwgMjI2LCAyMTIsIDIxMSwgCisgICAgMjIxLCAyNTIsIDE5NCwgMjQ5LCAxOTgsIDIxMSwgMjA1LCAyMjQsIDE5MiwgMjM1LCAxMzcsIDIyNiwgMjI3LCAyMzUsIAorICAgIDEzNywgMjQyLCAxNzYsIDI0MiwgMjI5LCAyNTIsIDE5NSwgMjU0LCAxMjEsIDI0NSwgMjYsIDI1NCwgMTY5LCAyNTQsIDE3MCwgCisgICAgMjMwLCAxNDEsIDIzNiwgMTIsIDIxOSwgMTAyLCAyMzUsIDIzOSwgMjQ4LCA0MiwgMjI1LCAxNzAsIDI0MiwgMTEyLCAyNDgsIAorICAgIDE4NywgMjMyLCAyMDcsIDIyOSwgMjE2LCAyMjUsIDEsIDI0NCwgMTk5LCAyMzEsIDE0NywgMjQyLCA0MCwgMjUyLCAxNDYsIAorICAgIDIyNSwgNCwgMjE3LCAxNzIsIDIyNSwgNjksIDIzNCwgNzAsIDc5LCAyMzIsIDExNywgMjMzLCAxNiwgMjIyLCAyMzYsIDI0MywgCisgICAgNjEsIDIxOCwgMTMzLCAyMzQsIDY5LCAyNTEsIDE3OSwgMjQ5LCAxNTYsIDIsIDI0MSwgMjM0LCAyMTIsIDE5LCAyNTIsIDc3LCAKKyAgICAyNDEsIDIzNCwgMjUxLCAxNDMsIDI0MSwgMjM0LCAxMTMsIDI0MSwgMjMyLCAyMTksIDEyLCAyNDEsIDIzNCwgMjQyLCAxMjcsIAorICAgIDI0MSwgMjM0LCAyNDEsIDIzNSwgMiwgNzUsIDI1MSwgMjE2LCAyNDEsIDIzNCwgMjQyLCAxMzQsIDI0MSwgMjM0LCAyMTEsIAorICAgIDQyLCAyNDEsIDIzNCwgMjI0LCAxMzEsIDI0MSwgMjM0LCAyNDEsIDIzNSwgMiwgMjIzLCAzNiwgMjIzLCA0NywgMjQxLCAKKyAgICAyMzIsIDI0MSwgMjM1LCAyNDgsIDg5LCAyNDgsIDEsIDIyMCwgODQsIDIsIDExNiwgNTksIDIzNSwgMjIyLCAyNDUsIDE4MCwgCisgICAgMTkzLCAyNTEsIDEyNCwgMjU0LCAxMjAsIDg3LCAyNTEsIDIwMywgMjE5LCA5NCwgODcsIDI0OSwgMjM2LCA4NywgMjE4LCAKKyAgICAyNDgsIDIxNywgMjQ5LCA4NywgMjQ2LCA5MywgMjQ4LCAxNjUsIDg3LCAyMjUsIDcwLCA2NCwgMjI0LCAyNTIsIDI0NCwgNjksIAorICAgIDI1MiwgMTEsIDI0NywgMTczLCA4NywgMjE5LCA1LCAyNTIsIDE2NiwgMjE2LCAxNTAsIDI1MiwgMTY2LCA3MSwgMjQ0LCA1OSwgCisgICAgMjQwLCAyMTgsIDIyNSwgOCwgODcsIDIzMCwgMTU0LCAyNTIsIDE4MCwgMjQ5LCAxMDYsIDI0NSwgNDAsIDExNCwgMjQ3LCAKKyAgICAxNDAsIDUwLCAyNDksIDE0NywgMjUwLCAyNTAsIDI1MiwgMTUyLCAyLCAyMTEsIDQwLCA1MCwgMjUyLCAxNTIsIDIsIDI0NywgCisgICAgMTQwLCA1MCwgMjUyLCAxNTIsIDIsIDI0NSwgNTUsIDUwLCAyNTIsIDE1MiwgMiwgMjI0LCAyMzEsIDUwLCAyMzAsIDE1NCwgCisgICAgMiwgMjExLCAyMzUsIDI1MCwgMTQ2LCAyLCAyMTQsIDE1MywgMjE1LCAyMzIsIDIyLCAyMTEsIDQwLCA1MCwgMjIxLCAxODAsIAorICAgIDIyNSwgMTY5LCAyNDksIDIxNiwgMjUxLCAxNDcsIDIzMCwgMTkxLCAyNDQsIDY0LCAyNDcsIDE5MywgMjI2LCAxNjUsIDI0NywgCisgICAgMTk4LCAyNDYsIDU3LCAyNDQsIDExNSwgMjQ0LCA0OCwgMjA0LCAyNDQsIDExNSwgMjQ0LCA0OCwgMjI2LCA4MCwgMiwgMjQ5LCAKKyAgICAxMDgsIDIyNiwgODAsIDI0NCwgMTkxLCAyMTQsIDE2MywgMjUxLCAyNCwgMjE3LCAxOSwgMjUxLCAyNCwgMjUwLCAyNTEsIAorICAgIDIzNSwgMjQ5LCAyNTAsIDE0NiwgMiwgMjE0LCAxNTMsIDIxNSwgMjMxLCAyNTAsIDE0NiwgMiwgMjQ2LCAxMTIsIDIxNSwgCisgICAgMjMxLCAyNTIsIDE0OSwgMjUwLCAxNDUsIDI1MCwgMTQsIDIyNCwgMTI2LCAyMjIsIDE4NywgMjI0LCAxMjYsIDIyNiwgMjMsIAorICAgIDIxOCwgMTIzLCAyMjIsIDEzMywgMjE1LCAyMjMsIDIyMiwgMTMzLCAyNTEsIDE5OSwgMjE3LCA5MiwgMjMzLCA1NywgMjI4LCAKKyAgICA1MCwgMjI4LCA1MSwgMiwgMjQ4LCA4OCwgMjQ5LCAxNTUsIDI1MCwgOCwgMjUxLCAyMDAsIDIwNCwgMjUxLCAyMDAsIDI0MiwgCisgICAgMTM0LCAyNTEsIDIwMCwgMjUxLCAyMTYsIDI1MSwgMjAwLCAyMjYsIDE2MSwgMjUxLCAyMDAsIDI1MSwgMTk3LCAyMjksIAorICAgIDIxMCwgMjUyLCAxODMsIDIyMSwgMTg4LCAyMzEsIDY1LCAyMTcsIDIsIDIyMywgMTI2LCAyMjYsIDc4LCAyNDQsIDE2NywgCisgICAgMjMxLCAyMzksIDIyMSwgMjI1LCAyNTQsIDk3LCAyMjQsIDE0OCwgMjU1LCA1LCAyMzIsIDExOSwgMjUwLCAxMzUsIDIzMSwgCisgICAgNzcsIDIyNiwgMTMzLCAyMTUsIDIzOSwgMjM2LCAzLCAyMTUsIDIzOSwgMjI2LCA4NiwgMjQ2LCAzMiwgODcsIDIzNiwgMCwgCisgICAgMjQ1LCAxMjcsIDI0NSwgMTI4LCAyLCAyNDYsIDExMiwgODAsIDQ4LCAyNTAsIDgsIDIzMSwgMjA1LCAyLCAyMzIsIDExMywgCisgICAgMjQ0LCA4MSwgMjUwLCA4LCAyMzEsIDIwNSwgMiwgMjIzLCAxNjAsIDI0NCwgODEsIDIwNCwgMjMxLCAyMDUsIDIsIDIyMywgCisgICAgMTYwLCAyNDQsIDgxLCAyMDQsIDIzMSwgMjA1LCAyLCAyMzIsIDExMywgMjQ0LCA4MSwgMjI0LCAyMzksIDIyNCwgMjQwLCAKKyAgICAyNDAsIDI1NSwgMjI5LCA4OSwgMjMwLCAxNjQsIDIyNSwgMTIwLCAyMzAsIDE2NCwgMjI1LCAxMjEsIDIsIDk3LCA4MCwgCisgICAgMjUzLCAyMTUsIDIzMywgNTIsIDIxMywgMTc1LCAyMzAsIDE2MywgMjMwLCAxNjQsIDIyNSwgMTIxLCAyMjYsIDIzNCwgMjI4LCAKKyAgICA4MCwgMjMwLCAxNjQsIDIyNSwgMTE5LCAyNTQsIDk4LCAyLCAyNTIsIDEzNywgMjUxLCAxOCwgMjEzLCAxNzIsIDI1MSwgMTgsIAorICAgIDIxNiwgMjU1LCAyMjMsIDE3NiwgMjEzLCAxNzEsIDIxNSwgNjAsIDk3LCAyNTMsIDI1NSwgMjUwLCAxMCwgOTcsIDIyLCAKKyAgICAxNDAsIDIwNCwgMjUwLCA0NCwgMjUzLCAyNTUsIDI1MCwgMTAsIDk3LCAyMiwgMTQwLCAyMDQsIDI1MCwgNDQsIDI1NCwgMCwgCisgICAgMiwgMzcsIDEyMywgMjI2LCAxMjQsIDI1MCwgMTAsIDI0NiwgMTEyLCAyMiwgMjE0LCAxNTMsIDIwNCwgMjUwLCA0NCwgMjUzLCAKKyAgICAyNTUsIDI1NCwgOTYsIDI0NiwgMTEyLCAyMiwgMjE0LCAxNTMsIDIwNCwgMjUwLCA0NCwgMjUzLCAyNTUsIDEyMSwgMjUxLCAKKyAgICAxNDYsIDg3LCAxMjUsIDI1MSwgMTQ2LCA4NywgMjE5LCA5LCAyLCAyNTEsIDEyLCA5MSwgMjE5LCA4LCAyMTksIDksIDIsIAorICAgIDEyMywgMjE5LCAzMywgMjEyLCAzNSwgMjE5LCA5LCAyLCAxMzQsIDIxOSwgMzMsIDIxMiwgMzQsIDI1MiwgMTIzLCAyNDUsIAorICAgIDE4MCwgMjI1LCAzMCwgMjMzLCA0OCwgMjMxLCAyMTYsIDI0MiwgMTkxLCAyMjIsIDI1MCwgMjMxLCAyMTYsIDI0MiwgMTkxLCAKKyAgICAyMzIsIDE1OCwgMiwgMjM1LCAyMzIsIDIyNSwgMjAyLCAyNTAsIDgsIDIzMiwgMTU4LCAyLCAyMzQsIDE0NCwgMjM0LCAxNDQsIAorICAgIDIzMiwgMTU3LCAyMDQsIDIzMiwgMTU3LCAyNTIsIDUyLCAyNTIsIDUzLCAyLCAyNTEsIDEyLCA5MSwgMjUxLCAxOTgsIDIzMiwgCisgICAgMjEwLCA4NywgMjIzLCAxNzcsIDI1MSwgOTQsIDI1MiwgMTkzLCAyLCAxNDAsIDgwLCA0OCwgMjQ1LCAxNTEsIDIsIDE0MCwgCisgICAgODAsIDQ4LCAyMjYsIDIwMSwgMiwgMjQ1LCAzOSwgMTY0LCAyLCA0MywgNDQsIDgwLCA0OCwgMjE5LCA0MSwgMiwgOTcsIDgwLCAKKyAgICA0OCwgMjE2LCAxNSwgMiwgMjE0LCAxNTMsIDgwLCA0OCwgMjI4LCA4MCwgMTIzLCAyMTQsIDE4NCwgMjQ1LCAxOTksIDg3LCAKKyAgICAyMzQsIDE0MiwgMjE2LCAyNDgsIDIzNSwgMjI2LCAxNiwgMzEsIDcsIDYsIDIzMywgMTUsIDIzNSwgMjI2LCAxNiwgMzEsIDcsIAorICAgIDQsIDIzMywgMTUsIDIzNSwgMjI2LCAxNiwgMzEsIDIyNywgMjAzLCAyMzUsIDIyNiwgMTYsIDMxLCAyMTcsIDE4NCwgMjM1LCAKKyAgICAyMjYsIDE2LCAzMSwgNywgMjMzLCAxNSwgMjQ0LCAxMDQsIDI0NSwgMTgwLCAyMTYsIDEwLCAyMTEsIDE5OSwgMjQyLCAyOCwgCisgICAgMjI3LCAxODYsIDIyLCAyNTEsIDIwNSwgMjQxLCA3MywgMjI1LCA1MywgMjMwLCAyMzEsIDIxNywgMCwgMjQ5LCAxMjIsIAorICAgIDI1MiwgMTY3LCAyMTksIDEyNywgMjI1LCAxMiwgMjE4LCAxNTksIDIsIDIzMCwgMjI5LCAyNDcsIDEyOCwgMjM1LCAxMzcsIAorICAgIDE2LCAzMSwgMjUyLCA2NSwgMjE1LCAyMjEsIDI0NSwgMTY0LCA4NSwgNDIsIDI1MSwgOTQsIDcxLCA0MiwgMjUxLCA5NCwgCisgICAgMjMzLCA5MSwgMjIzLCAxMTQsIDI1MCwgNDMsIDIzMywgOTEsIDI1MSwgMjE2LCAyNTAsIDQzLCAyMzMsIDkxLCAyMjYsIAorICAgIDE2MSwgMjQ4LCAwLCAyMzMsIDkxLCAyNTEsIDIxNiwgMjQ4LCAwLCA0LCAyMjYsIDE2MSwgMjQ4LCAwLCA0LCAyNTEsIDIxNiwgCisgICAgMjQ4LCAwLCAyMTQsIDE2MiwgMjIzLCAxMTQsIDIxNSwgMjI2LCAyNDYsIDExMywgMjIzLCAxMTQsIDIxNSwgMjI2LCAyMTQsIAorICAgIDE2MiwgNCwgMjIzLCAxMTQsIDIxNSwgMjI2LCAyNDYsIDExMywgNCwgMjIzLCAxMTQsIDIxNSwgMjI2LCAzNywgMjQ5LCAKKyAgICAxMzksIDIyNCwgMjU1LCAyNDksIDEzOSwgMjI1LCAwLCAyLCAyNDIsIDMzLCA1MSwgMjQ5LCAxMzksIDIyNCwgMjU1LCAyMjgsIAorICAgIDU0LCA0MywgMjIwLCAxNTUsIDIsIDEzNCwgMjQ3LCAxMjYsIDI1MCwgMTIsIDI0NCwgMTk5LCAxMjMsIDIyNiwgMjQ2LCAKKyAgICAyNTAsIDEyLCAyNDQsIDE5OSwgMTEzLCAyMjYsIDI0NiwgMjUwLCAxMiwgMjQ0LCAxOTksIDEzNCwgMjI2LCAyNDYsIDI1MCwgCisgICAgMTIsIDI0NCwgMTk5LCAyNDQsIDE5LCAyMjYsIDI0NiwgMjUwLCAxMiwgMjQ0LCAxOTksIDI0NCwgODksIDIyNiwgMjQ2LCAKKyAgICAyNTAsIDEyLCAyNDQsIDE5OSwgMjE5LCAxMjcsIDIyNiwgMjQ2LCAyNTAsIDEyLCAyNDQsIDE5OSwgMjIwLCAxMjQsIDIyNiwgCisgICAgMjQ2LCAyNTAsIDEyLCAyNDQsIDE5OSwgMjQ1LCAyMDEsIDIyNiwgMjQ2LCAyNTAsIDEyLCAyNDQsIDE5OSwgMjI4LCAyMDUsIAorICAgIDIyNiwgMjQ2LCAyNTAsIDEyLCAyNDQsIDE5OSwgMjE2LCAyNDksIDIyNiwgMjQ2LCAyNTAsIDEyLCAyNDQsIDE5OSwgMjQ1LCAKKyAgICAxNzYsIDIyNiwgMjQ2LCAyNTAsIDEyLCAyNDQsIDE5OSwgMjE1LCA3NywgMjI2LCAyNDYsIDI1MCwgMTIsIDI0NCwgMTk5LCAKKyAgICAyMjYsIDE5NiwgMjUwLCAxMiwgMjQ0LCAxOTksIDIxNSwgNTYsIDI1MCwgMTIsIDI0NCwgMTk5LCAyMTYsIDE0MSwgMjUwLCAKKyAgICAxMiwgMjQ0LCAxOTksIDI0NCwgMTUsIDI1MCwgMTIsIDI0NCwgMTk5LCAyNDQsIDg3LCAyNTAsIDEyLCAyNDQsIDE5OSwgCisgICAgMjE5LCAxMjMsIDI1MCwgMTIsIDI0NCwgMTk5LCAyMjAsIDEyMywgMjUwLCAxMiwgMjQ0LCAxOTksIDI0NSwgMjAwLCAyNTAsIAorICAgIDEyLCAyNDQsIDE5OSwgMjI4LCAyMDQsIDI1MCwgMTIsIDI0NCwgMTk5LCAyMTYsIDI0NywgMjUwLCAxMiwgMjQ0LCAxOTksIAorICAgIDI0NSwgMTc0LCAyNTAsIDEyLCAyNDQsIDE5OSwgMjE1LCA3NSwgMjMwLCAxMjIsIDI0MywgMjM3LCAyMTYsIDM3LCAyMTYsIAorICAgIDMsIDIxOCwgMTUwLCA2NCwgMjMyLCAyNDUsIDIxOSwgMTcyLCA2NCwgMjM1LCAxMzgsIDIzMCwgMTExLCAyNDIsIDEzMSwgCisgICAgMjQ0LCAxOTgsIDI0MiwgMTMxLCAyNDQsIDE5OSwgMiwgMjE5LCA3NiwgMjQ1LCAyMSwgMjQ0LCAxOTksIDIsIDIxNywgMTUsIAorICAgIDY0LCAyMzUsIDU5LCAyMTksIDc2LCAyNDQsIDE5OSwgMiwgMjA0LCAyMzAsIDExNSwgMjE5LCA3NiwgMjQ0LCAxOTksIDIsIAorICAgIDIwNCwgMjMwLCAxMTYsIDIyLCAyMTksIDc2LCAyNDUsIDIxLCAyMTksIDc2LCAyNDQsIDE5OSwgMiwgMjA0LCAyMzAsIDExNiwgCisgICAgMjIsIDI0OSwgMjM4LCAyMTcsIDI0OCwgMjE5LCA3NiwgMjQ0LCAxOTksIDIsIDIwNCwgMjMwLCAxMTYsIDIyLCAyMTYsIAorICAgIDEwNSwgMjQ1LCAyMSwgMjE5LCA3NiwgMjQ0LCAxOTksIDIsIDI0MiwgMzIsIDIxOSwgNzYsIDI0NCwgMTk5LCAyLCAyNDAsIAorICAgIDI1NCwgMjExLCAyMzMsIDI0NCwgMTk4LCAyMTksIDc2LCAyNDQsIDE5OSwgMiwgMjE5LCA3NiwgMjQ1LCAyMSwgMjQ0LCAKKyAgICAxOTksIDIyMSwgMjE5LCAyNDgsIDcwLCAyNDQsIDQxLCAyMjMsIDkxLCAyNDQsIDE5OCwgMjE5LCA3NiwgMjQ0LCAxOTksIDIsIAorICAgIDI0MSwgMjMzLCAyNDUsIDIxLCAyMTksIDc2LCAyNDQsIDE5OSwgMiwgMjE4LCAzNSwgMjE5LCA3NSwgMjQ0LCAxOTgsIDIyOSwgCisgICAgOTIsIDI0NCwgMTk4LCAyNDUsIDMxLCAyNDQsIDE5OCwgMjE0LCAxODgsIDI0NCwgMTk4LCAyNDQsIDE5OSwgMiwgMjQ5LCAKKyAgICAyMzgsIDIxNywgMjQ4LCAyMjUsIDE5NSwgMjQ0LCAxOTgsIDI0OSwgMjA5LCAyNDQsIDE5OCwgMjQ5LCAyMTAsIDI0NCwgCisgICAgMTk4LCAyMzQsIDY4LCAyNDQsIDE5OCwgMjQ0LCAxOTksIDIxNiwgMTM4LCAxMTYsIDIzNCwgNjksIDIzNCwgNjgsIDI0NCwgCisgICAgMTk5LCAyLCAyMTksIDc2LCAyNDUsIDIxLCAyMzQsIDY4LCAyNDQsIDE5OSwgMiwgMjUwLCA4LCAyNDUsIDIxLCAyNDQsIAorICAgIDE5OSwgMiwgMjE4LCA4OSwgMjE2LCAyMCwgMjQ0LCAxOTksIDIsIDIxOCwgODksIDIxNiwgMjEsIDIyLCAyMTEsIDIzMywgCisgICAgMjQ1LCAyMywgMjQ0LCAxOTksIDIsIDIxOCwgODksIDIxNiwgMjEsIDIyLCAyMTYsIDEwNSwgMjQ1LCAyMSwgMjQ3LCAyMDAsIAorICAgIDI0NCwgMTk4LCAyMTEsIDIwNCwgMjQ0LCAxOTgsIDI1NCwgMTE2LCAyNDQsIDE5OCwgMjI0LCAyMzAsIDI0NCwgMTk4LCAKKyAgICAyNDksIDEyNCwgMjQ0LCAxOTgsIDIyNSwgMTczLCAyNDQsIDE5OCwgMjQ0LCAxOTksIDIsIDIzMiwgMTMyLCA2NCwgMjE1LCAKKyAgICAyMDUsIDI0NywgMjAwLCAyNTEsIDk2LCAyMjMsIDkxLCAyNDQsIDE5OCwgMjQzLCAyNDcsIDI0NCwgMTk5LCAyLCAyMDQsIAorICAgIDIzMCwgMTE1LCAyNTQsIDExNCwgMjQ0LCAxOTgsIDI0NCwgMTYwLCAyNDQsIDE5OCwgMjEyLCAyMCwgMjQ0LCAxOTgsIDIxOSwgCisgICAgOTMsIDI0NCwgMTk4LCAyMTYsIDcyLCAyNDQsIDE5OCwgMjQyLCAxMzIsIDI0NCwgMTk4LCAyMzIsIDEyMCwgMjQ5LCAxMjQsIAorICAgIDI0NCwgMTk4LCAyNDQsIDE5OSwgMiwgMjA0LCAyMzAsIDExNSwgMjQwLCAyMTAsIDI0NCwgMTk4LCAyNDQsIDE5OSwgMiwgCisgICAgMjA0LCAyMzAsIDExNiwgMjIsIDI0OSwgMjM4LCAyMTcsIDI0OCwgMjQ0LCAxOTksIDIyMSwgMTkyLCAyMzYsIDcsIDI0NCwgCisgICAgMTYxLCAyNTMsIDIyMSwgMjQ0LCAxOTgsIDI0NCwgNTcsIDI0NCwgMTk4LCAyMTksIDk0LCAyNDQsIDE5OCwgMjQ3LCAxNzMsIAorICAgIDI0NCwgMTk4LCAyNDQsIDE5OSwgMjExLCAyMzAsIDIzMCwgMTE1LCAyNDQsIDE5OSwgMiwgMjMxLCA4OSwgMjMxLCAxNDksIAorICAgIDI0MiwgMTMxLCAyNTAsIDIzMywgMjQ0LCAxOTksIDIsIDIxOSwgNzYsIDI0NSwgMjEsIDI1MCwgMjMzLCAyNDQsIDE5OSwgMiwgCisgICAgMjE3LCAxNSwgNjQsIDIzNSwgNTksIDIxOSwgNzYsIDI1MCwgMjMzLCAyNDQsIDE5OSwgMiwgMjA0LCAyMzAsIDExNSwgMjE5LCAKKyAgICA3NiwgMjUwLCAyMzMsIDI0NCwgMTk5LCAyLCAyNDEsIDIzMywgMjQ1LCAyMSwgMjUwLCAyMzMsIDI0NCwgMTk5LCAyLCAyMTEsIAorICAgIDE5NiwgMjE5LCA3NywgMjM0LCA2OCwgMjUwLCAyMzMsIDI0NCwgMTk5LCAyLCAyNTAsIDgsIDI0NSwgMjEsIDIyNCwgMjMwLCAKKyAgICAyNTAsIDIzMywgMjQ0LCAxOTgsIDI0OSwgMTI0LCAyNTAsIDIzMywgMjQ0LCAxOTgsIDIxMiwgMjAsIDI1MCwgMjMzLCAyNDQsIAorICAgIDE5OCwgMjQ0LCAxOTksIDIsIDIyOCwgODAsIDI0MiwgMTcwLCAyNDMsIDQxLCAyNDQsIDE5OSwgMiwgMjI2LCAyMTksIDI0MywgCisgICAgNDEsIDIyNSwgMTcxLCAyNTEsIDE3NiwgMjQ4LCA4MywgMjIxLCAxNzEsIDIzMCwgMTUwLCAyNDEsIDIzNiwgMjMwLCAxNTAsIAorICAgIDIxOSwgMTAsIDIzMCwgMTUwLCAyNDIsIDEyLCAyMjUsIDE3MSwgMjIzLCAxNTksIDEyMywgMjQyLCAyMiwgMjI1LCAxNzEsIAorICAgIDIyMywgMTU5LCAyNTEsIDE4NiwgMjQyLCAxOCwgMjM2LCA3LCAyNTAsIDE4NywgMjI1LCAxNzEsIDI0MywgMjQ2LCAyMjUsIAorICAgIDE3MSwgMiwgMjI0LCAyMzAsIDI0NCwgMTk4LCAyMjUsIDE3MSwgMiwgMjQ0LCA0OSwgMjQyLCAxNywgMjIyLCAyMDUsIDI0MSwgCisgICAgMjIxLCAyMTgsIDE0NSwgMjMyLCAxNTUsIDIyMywgMTY1LCAyNTAsIDI1MiwgMjQxLCAxNjksIDIxNSwgMjQ5LCAyNDEsIAorICAgIDE2OSwgMjE1LCAyNTAsIDIsIDI1MSwgMTIyLCAyMjgsIDU4LCAyMTUsIDI0OSwgMjMxLCAzNywgMTkzLCAyMjMsIDE2NiwgCisgICAgMjE4LCAxNTEsIDIxNSwgMjQ3LCAyMTUsIDI0OCwgMjUwLCAyNTIsIDI1MSwgMTAwLCAyMjYsIDE5OCwgMjUxLCAxMDAsIAorICAgIDIxNSwgMjAyLCAyNTEsIDEwMSwgMjE4LCAxMzEsIDIzMCwgMTkyLCAyNTQsIDEzOCwgMjQ0LCAxMDUsIDI0NSwgMTQ1LCAKKyAgICAyMjUsIDIsIDI1MCwgMjUyLCAyMjYsIDE5OCwgMjI1LCAyLCAyNTAsIDI1MiwgMjE3LCAzMywgMjI2LCAxOTgsIDIxNywgMzMsIAorICAgIDI1MywgMTg4LCAyMjYsIDE5OCwgMjUzLCAxODgsIDIyMywgMTIxLCAyMTMsIDI0NywgMjQ4LCA2NiwgMjE1LCAxOTMsIDI1MywgCisgICAgMjUwLCAyMzIsIDEyMywgMjE1LCAyNTUsIDIzMCwgMTQ0LCAyMzAsIDEyMSwgMjIzLCAxNjQsIDIxOCwgNywgMjIzLCAxNjQsIAorICAgIDIzMCwgMTIxLCAyNTEsIDM2LCAyNTQsIDIzOCwgMjE1LCAyNDYsIDIyMCwgMTgsIDIyMiwgMTg0LCAyMTksIDMsIDIwMywgCisgICAgMjE1LCAyNTMsIDIzMiwgMjM2LCA2NywgMjE1LCAyNTMsIDIzMiwgMjM2LCAyNDksIDE5OCwgNTAsIDIyNSwgMiwgMjUwLCAKKyAgICAyMzcsIDIyMywgNDcsIDIzMiwgMjM2LCAyMTUsIDIyMywgMjQ0LCA4MiwgMjI2LCAyMDEsIDIyNCwgMjQxLCAyNDcsIDEzMSwgCisgICAgMjI4LCA4MCwgMjQ1LCAxMzMsIDUwLCAyMTksIDc0LCA4NywgMjI4LCA4MCwgMjE5LCA3NCwgODcsIDIyNCwgMTI1LCAyMzIsIAorICAgIDE5OSwgMjM2LCA3LCAyMzUsIDE2MywgMjI1LCA0NCwgODcsIDI0NywgMTU0LCAyMjgsIDU3LCAyMzIsIDE5OSwgODcsIDIyNCwgCisgICAgMjM1LCAyMTIsIDQxLCA4NywgMjI4LCA3MSwgMjEyLCA0MSwgODcsIDI1MiwgMTAsIDIyOCwgODAsIDI1MiwgOSwgMjUyLCA4LCAKKyAgICAyMzAsIDEyMSwgMjUyLCA4LCAyMjUsIDIxNiwgMjI4LCA4MCwgMjI1LCAyMTUsIDI1MCwgMTA4LCAyNDksIDEzMiwgMjMxLCAKKyAgICA2MSwgODcsIDIxMSwgMjE4LCA4NywgMjIzLCA2MiwgMjUyLCAxOTUsIDg3LCAyMTYsIDM4LCAyMTIsIDQxLCAyNTAsIDUsIAorICAgIDIxOSwgMjM2LCAyNTIsIDEyNiwgMjUyLCAxMjQsIDIyNSwgMjQ2LCAyNDksIDE4NSwgMjQ5LCA5NCwgMjUyLCAxNzcsIDI1MCwgCisgICAgMzAsIDQzLCAyMzIsIDk1LCAxMDgsIDE2LCAzMSwgMjI0LCA2LCAxMDgsIDE2LCAzMSwgMjU0LCAyMDEsIDEwOCwgMTYsIDMxLCAKKyAgICAyNDQsIDEwNCwgMTA4LCAxNiwgMzEsIDI0NSwgMjMxLCAxMDgsIDE2LCAzMSwgMjEyLCA0MCwgMTA4LCAxNiwgMzEsIDI1NCwgCisgICAgNTEsIDEwOCwgMTYsIDMxLCAyNTQsIDUyLCAyMjMsIDEwOCwgMTA4LCAxNiwgMzEsIDI1NCwgNTIsIDIyMywgMTA3LCAxMDgsIAorICAgIDE2LCAzMSwgMjU0LCA1MiwgMjEzLCAxNDMsIDEwOCwgMTYsIDMxLCAyNTQsIDUyLCAyMTMsIDE0MiwgMTA4LCAxNiwgMzEsIAogICAgIDIxMywgMTU3LCAxMDgsIDE2LCAzMSwgMjEzLCAxNTYsIDEwOCwgMTYsIDMxLCAyMTMsIDE1NSwgMTA4LCAxNiwgMzEsIDIxOCwgCi0gICAgNDQsIDEwOCwgMTYsIDMxLCAyMjUsIDEyNSwgMjE4LCA0NCwgMTA4LCAxNiwgMzEsIDg1LCAyMTgsIDQ0LCAxMDgsIDE2LCAKLSAgICAzMSwgMjMxLCA1NSwgMjE4LCA3MSwgMTA4LCAxNiwgMzEsIDIzMSwgNTUsIDIxOCwgNzAsIDEwOCwgMTYsIDMxLCAyMzEsIAotICAgIDU1LCAyMTgsIDY5LCAxMDgsIDE2LCAzMSwgMjUwLCAzOCwgMTA4LCAxNiwgMzEsIDIyMiwgMSwgMTA4LCAxNiwgMzEsIDIyOCwgCi0gICAgMTg4LCAxMDgsIDE2LCAzMSwgMjEzLCAxNDEsIDEwOCwgMTYsIDMxLCAyMTMsIDE0MCwgMTA4LCAxNiwgMzEsIDIyMiwgMjA0LCAKLSAgICAyMjIsIDEsIDEwOCwgMTYsIDMxLCAyMjIsIDIwNCwgMjIyLCAwLCAxMDgsIDE2LCAzMSwgMjQyLCAxNjYsIDEwOCwgMTYsIAotICAgIDMxLCAyMTksIDE2NiwgMTA4LCAxNiwgMzEsIDIzNSwgMTc3LCAyMjYsIDE1MywgMTA4LCAxNiwgMzEsIDIzNSwgMTc3LCAKLSAgICAyMjYsIDE1MiwgMTA4LCAxNiwgMzEsIDI0OSwgMTM0LCA2NCwgMjM1LCAxNzYsIDEwOCwgMTYsIDMxLCAyMjMsIDEwMSwgNjQsIAotICAgIDIzNSwgMTc2LCAxMDgsIDE2LCAzMSwgMjQ5LCAxNjgsIDIyNiwgMTUzLCAxMDgsIDE2LCAzMSwgMjM1LCAxNzUsIDIyNiwgCi0gICAgMTUzLCAxMDgsIDE2LCAzMSwgMjE4LCA3MiwgNjQsIDI0OSwgMTY3LCAxMDgsIDE2LCAzMSwgMjQ5LCAxMzQsIDY0LCAyNDksIAotICAgIDE2NywgMTA4LCAxNiwgMzEsIDI0OSwgMTM0LCA2NCwgMjQ5LCAxNjYsIDEwOCwgMTYsIDMxLCAyNDksIDE2OCwgMjU0LCA4MywgCi0gICAgMTA4LCAxNiwgMzEsIDIyMiwgMiwgNjQsIDI0OSwgMTY4LCAyNTQsIDgzLCAxMDgsIDE2LCAzMSwgMjE4LCA3MiwgNjQsIAotICAgIDIyMiwgMiwgNjQsIDI0OSwgMTY3LCAxMDgsIDE2LCAzMSwgMjEzLCAyNDMsIDEwOCwgMTYsIDMxLCAyMTYsIDg0LCAyMjYsIAotICAgIDE1MywgMTA4LCAxNiwgMzEsIDIzMywgNTcsIDIyNiwgMTUzLCAxMDgsIDE2LCAzMSwgMjU0LCA4MiwgMjI2LCAxNTMsIDEwOCwgCi0gICAgMTYsIDMxLCAyMTgsIDcyLCA2NCwgMjU0LCA4MSwgMTA4LCAxNiwgMzEsIDIyMiwgMiwgNjQsIDI1NCwgODEsIDEwOCwgMTYsIAotICAgIDMxLCAyMTgsIDcyLCA2NCwgMjIyLCAyLCA2NCwgMjU0LCA4MSwgMTA4LCAxNiwgMzEsIDIxMywgMTU4LCA2NCwgMjU0LCA4MSwgCi0gICAgMTA4LCAxNiwgMzEsIDIyMywgMTAxLCA2NCwgMjU0LCA4MSwgMTA4LCAxNiwgMzEsIDIyMywgMTAxLCA2NCwgMjU0LCA4MCwgCi0gICAgMTA4LCAxNiwgMzEsIDIyMywgMTAwLCAxMDgsIDE2LCAzMSwgMjIzLCA5OSwgMTA4LCAxNiwgMzEsIDIyMywgOTgsIDEwOCwgCi0gICAgMTYsIDMxLCAyMjMsIDk3LCAxMDgsIDE2LCAzMSwgMjU0LCAxNTcsIDEwOCwgMTYsIDMxLCAyNTQsIDE1NiwgMTA4LCAxNiwgCi0gICAgMzEsIDIzMSwgMTYzLCAxMDgsIDE2LCAzMSwgMjIyLCA3LCAxMDgsIDE2LCAzMSwgMjUzLCAyNDYsIDEwOCwgMTYsIDMxLCAKLSAgICAyMjMsIDEyNSwgMTA4LCAxNiwgMzEsIDIyMywgMTI0LCAxMDgsIDE2LCAzMSwgMjUzLCAxODMsIDEwOCwgMTYsIDMxLCAyNTEsIAotICAgIDIyOSwgMjI2LCAxNTMsIDEwOCwgMTYsIDMxLCAyMTcsIDQ5LCAxMDgsIDE2LCAzMSwgMjE3LCA0OCwgMTA4LCAxNiwgMzEsIAotICAgIDIyNCwgOCwgMjMyLCAyMjIsIDEwOCwgMTYsIDMxLCAyNTEsIDE4MywgMTA4LCAxNiwgMzEsIDI1MSwgMTgyLCAxMDgsIDE2LCAKLSAgICAzMSwgMjUxLCAxODEsIDEwOCwgMTYsIDMxLCAyNTQsIDEzOCwgMTA4LCAxNiwgMzEsIDIyNiwgMjE4LCAxMDgsIDE2LCAzMSwgCi0gICAgMjE4LCAyNDgsIDEwOCwgMTYsIDMxLCAyMTYsIDgyLCAxMDgsIDE2LCAzMSwgMjQyLCA5NiwgMTA4LCAxNiwgMzEsIDIxMiwgCi0gICAgMjgsIDEwOCwgMTYsIDMxLCAyMjQsIDIyNiwgMTA4LCAxNiwgMzEsIDI1MSwgMTQsIDEwOCwgMTYsIDMxLCAyMTUsIDg2LCAKLSAgICAxMDgsIDE2LCAzMSwgMjUwLCAyNDYsIDIzMCwgMTIyLCAxMDgsIDE2LCAzMSwgMjIxLCAyMDIsIDY0LCAyMzUsIDU1LCAxMDgsIAotICAgIDE2LCAzMSwgMjUxLCAyNSwgMTA4LCAxNiwgMzEsIDIxNSwgMjE5LCAxMDgsIDE2LCAzMSwgMjE4LCAxNTQsIDIxNSwgMjE5LCAKLSAgICAxMDgsIDE2LCAzMSwgMjMyLCAxNDgsIDEwOCwgMTYsIDMxLCAyMTksIDU2LCAxMDgsIDE2LCAzMSwgMjE0LCAxNDIsIDEwOCwgCi0gICAgMTYsIDMxLCAyNDAsIDI0NiwgMjQ2LCA2NCwgMTA4LCAxNiwgMzEsIDI1MywgMjI3LCAxMDgsIDE2LCAzMSwgMjI0LCAyMzQsIAotICAgIDI1MywgMjI3LCAxMDgsIDE2LCAzMSwgMjUxLCAxNDIsIDEwOCwgMTYsIDMxLCAyMjQsIDIyNSwgMjUxLCAxNDIsIDEwOCwgCi0gICAgMTYsIDMxLCAyNTQsIDEzNSwgMTA4LCAxNiwgMzEsIDIxOCwgMTE3LCAyMTgsIDI2LCAyMTgsIDExNiwgMTA4LCAxNiwgMzEsIAotICAgIDIxOCwgMTE3LCAyMTgsIDI2LCAyMTgsIDExNSwgMTA4LCAxNiwgMzEsIDIxOCwgNjgsIDEwOCwgMTYsIDMxLCAyMjQsIDIwMCwgCi0gICAgMTA4LCAxNiwgMzEsIDI0NywgMTgxLCAxMDgsIDE2LCAzMSwgMjQ3LCAxODMsIDEwOCwgMTYsIDMxLCAyNDcsIDE4MiwgMTA4LCAKLSAgICAxNiwgMzEsIDIyNCwgMTMxLCAxMDgsIDE2LCAzMSwgMjI0LCAxMjAsIDEwOCwgMTYsIDMxLCAyNDksIDEyMiwgMTA4LCAxNiwgCi0gICAgMzEsIDI0OSwgMTIxLCAxMDgsIDE2LCAzMSwgMjQ5LCAxMjAsIDEwOCwgMTYsIDMxLCAyNDksIDExOSwgMTA4LCAxNiwgMzEsIAotICAgIDI0OSwgMTE4LCAxMDgsIDE2LCAzMSwgMjU0LCAxNjksIDEwOCwgMTYsIDMxLCAyNTIsIDExOSwgNjQsIDIzMSwgMTQ5LCAKLSAgICAxMDgsIDE2LCAzMSwgMjUyLCAxMTksIDY0LCAyMTQsIDE3LCAxMDgsIDE2LCAzMSwgMjIzLCA1NywgMTA4LCAxNiwgMzEsIAotICAgIDI0MCwgMjM4LCAxMDgsIDE2LCAzMSwgMjI4LCAyMTIsIDEwOCwgMTYsIDMxLCAyNDgsIDE0NSwgMTA4LCAxNiwgMzEsIDIzMCwgCi0gICAgMTM0LCAxMDgsIDE2LCAzMSwgMTYzLCAyNDYsIDk0LCAxMDgsIDE2LCAzMSwgMTYzLCAyMjYsIDEzMiwgOSwgMTQsIDI0MCwgCi0gICAgMTAyLCA5LCAxNCwgMjQwLCAxMDEsIDksIDE0LCAyNDAsIDEwMCwgOSwgMTQsIDI0MCwgOTksIDksIDE0LCAyNDAsIDk4LCA5LCAKLSAgICAxNCwgMjQwLCA5NywgOSwgMTQsIDI0MCwgOTYsIDksIDE0LCAyNDAsIDk1LCA5LCAxNCwgMjQwLCA5NCwgOSwgMTQsIDI0MCwgCi0gICAgOTMsIDksIDE0LCAyNDAsIDkyLCA5LCAxNCwgMjQwLCA5MSwgOSwgMTQsIDI0MCwgOTAsIDksIDE0LCAyNDAsIDg5LCA5LCAKLSAgICAxNCwgMjQwLCA4OCwgOSwgMTQsIDI0MCwgODcsIDksIDE0LCAyNDAsIDg2LCA5LCAxNCwgMjQwLCA4NSwgOSwgMTQsIDI0MCwgCi0gICAgODQsIDksIDE0LCAyNDAsIDgzLCA5LCAxNCwgMjQwLCA4MiwgOSwgMTQsIDI0MCwgODEsIDksIDE0LCAyNDAsIDgwLCA5LCAKLSAgICAxNCwgMjQwLCA3OSwgOSwgMTQsIDI0MCwgNzgsIDksIDE0LCAyNDAsIDc3LCA5LCAxNCwgMjQwLCA3NiwgOSwgMTQsIDI0MCwgCi0gICAgNzUsIDksIDE0LCAyNDAsIDc0LCA5LCAxNCwgMjQwLCA3MywgOSwgMTQsIDI0MCwgNzIsIDksIDE0LCAyNDAsIDcxLCA5LCAKLSAgICAxNCwgMjQwLCA3MCwgOSwgMTQsIDI0MCwgNjksIDksIDE0LCAyNDAsIDY4LCA5LCAxNCwgMjQwLCA2NywgOSwgMTQsIDI0MCwgCi0gICAgNjYsIDksIDE0LCAyNDAsIDY1LCA5LCAxNCwgMjQwLCA2NCwgOSwgMTQsIDI0MCwgNjMsIDksIDE0LCAyNDAsIDYyLCA5LCAKLSAgICAxNCwgMjQwLCA2MSwgOSwgMTQsIDI0MCwgNjAsIDksIDE0LCAyNDAsIDU5LCA5LCAxNCwgMjQwLCA1OCwgOSwgMTQsIDI0MCwgCi0gICAgNTcsIDksIDE0LCAyNDAsIDU2LCA5LCAxNCwgMjQwLCA1NSwgOSwgMTQsIDI0MCwgNTQsIDksIDE0LCAyNDAsIDUzLCA5LCAKLSAgICAxNCwgMjQwLCA1MiwgOSwgMTQsIDI0MCwgNTEsIDksIDE0LCAyNDAsIDUwLCA5LCAxNCwgMjQwLCA0OSwgOSwgMTQsIDI0MCwgCi0gICAgNDgsIDksIDE0LCAyNDAsIDQ3LCA5LCAxNCwgMjQwLCA0NiwgOSwgMTQsIDI0MCwgNDUsIDksIDE0LCAyNDAsIDQ0LCA5LCAKLSAgICAxNCwgMjQwLCA0MywgOSwgMTQsIDI0MCwgNDIsIDksIDE0LCAyNDAsIDQxLCA5LCAxNCwgMjQwLCA0MCwgOSwgMTQsIDI0MCwgCi0gICAgMzksIDksIDE0LCAyNDAsIDM4LCA5LCAxNCwgMjQwLCAzNywgOSwgMTQsIDI0MCwgMzYsIDksIDE0LCAyNDAsIDM1LCA5LCAKLSAgICAxNCwgMjQwLCAzNCwgOSwgMTQsIDI0MCwgMzMsIDksIDE0LCAyNDAsIDMyLCA5LCAxNCwgMjQwLCAzMSwgOSwgMTQsIDI0MCwgCi0gICAgMzAsIDksIDE0LCAyNDAsIDI5LCA5LCAxNCwgMjQwLCAyOCwgOSwgMTQsIDI0MCwgMjcsIDksIDE0LCAyNDAsIDI2LCA5LCAKLSAgICAxNCwgMjQwLCAyNSwgOSwgMTQsIDI0MCwgMjQsIDksIDE0LCAyNDAsIDIzLCA5LCAxNCwgMjQwLCAyMiwgOSwgMTQsIDI0MCwgCi0gICAgMjEsIDksIDE0LCAyNDAsIDIwLCA5LCAxNCwgMjQwLCAxOSwgOSwgMTQsIDI0MCwgMTgsIDksIDE0LCAyNDAsIDE3LCA5LCAKLSAgICAxNCwgMjQwLCAxNiwgOSwgMTQsIDI0MCwgMTUsIDksIDE0LCAyNDAsIDE0LCA5LCAxNCwgMjQwLCAxMywgOSwgMTQsIDI0MCwgCi0gICAgMTIsIDksIDE0LCAyNDAsIDExLCA5LCAxNCwgMjQwLCAxMCwgOSwgMTQsIDI0MCwgOSwgOSwgMTQsIDI0MCwgOCwgOSwgMTQsIAotICAgIDI0MCwgNywgOSwgMTQsIDI0MCwgNiwgOSwgMTQsIDI0MCwgNSwgOSwgMTQsIDI0MCwgNCwgOSwgMTQsIDI0MCwgMywgOSwgCi0gICAgMTQsIDI0MCwgMiwgOSwgMTQsIDI0MCwgMSwgOSwgMTQsIDI0MCwgMCwgOSwgMTQsIDIzOSwgMjU1LCA5LCAxNCwgMjM5LCAKLSAgICAyNTQsIDksIDE0LCAyMzksIDI1MywgOSwgMTQsIDIzOSwgMjUyLCA5LCAxNCwgMjM5LCAyNTEsIDksIDE0LCAyMzksIDI1MCwgCi0gICAgOSwgMTQsIDIzOSwgMjQ5LCA5LCAxNCwgMjM5LCAyNDgsIDksIDE0LCAyMzksIDI0NywgOSwgMTQsIDIzOSwgMjQ2LCA5LCAKLSAgICAxNCwgMjM5LCAyNDUsIDksIDE0LCAyMzksIDI0NCwgOSwgMTQsIDIzOSwgMjQzLCA5LCAxNCwgMjM5LCAyNDIsIDksIDE0LCAKLSAgICAyMzksIDI0MSwgOSwgMTQsIDIzOSwgMjQwLCA5LCAxNCwgMjM5LCAyMzksIDksIDE0LCAyMzksIDIzOCwgOSwgMTQsIDIzOSwgCi0gICAgMjM3LCA5LCAxNCwgMjM5LCAyMzYsIDksIDE0LCAyMzksIDIzNSwgOSwgMTQsIDIzOSwgMjM0LCA5LCAxNCwgMjM5LCAyMzMsIAotICAgIDksIDE0LCAyMzksIDIzMiwgOSwgMTQsIDIzOSwgMjMxLCA5LCAxNCwgMjM5LCAyMzAsIDksIDE0LCAyMzksIDIyOSwgOSwgCi0gICAgMTQsIDIzOSwgMjI4LCA5LCAxNCwgMjM5LCAyMjcsIDksIDE0LCAyMzksIDIyNiwgOSwgMTQsIDIzOSwgMjI1LCA5LCAxNCwgCi0gICAgMjM5LCAyMjQsIDksIDE0LCAyMzksIDIyMywgOSwgMTQsIDIzOSwgMjIyLCA5LCAxNCwgMjM5LCAyMjEsIDksIDE0LCAyMzksIAotICAgIDIyMCwgOSwgMTQsIDIzOSwgMjE5LCA5LCAxNCwgMjM5LCAyMTgsIDksIDE0LCAyMzksIDIxNywgOSwgMTQsIDIzOSwgMjE2LCAKLSAgICA5LCAxNCwgMjM5LCAyMTUsIDksIDE0LCAyMzksIDIxNCwgOSwgMTQsIDIzOSwgMjEzLCA5LCAxNCwgMjM5LCAyMTIsIDksIAotICAgIDE0LCAyMzksIDIxMSwgOSwgMTQsIDIzOSwgMjEwLCA5LCAxNCwgMjM5LCAyMDksIDksIDE0LCAyMzksIDIwOCwgOSwgMTQsIAotICAgIDIzOSwgMjA3LCA5LCAxNCwgMjM5LCAyMDYsIDksIDE0LCAyMzksIDIwNSwgOSwgMTQsIDIzOSwgMjA0LCA5LCAxNCwgMjM5LCAKLSAgICAyMDMsIDksIDE0LCAyMzksIDIwMiwgOSwgMTQsIDIzOSwgMjAxLCA5LCAxNCwgMjM5LCAyMDAsIDksIDE0LCAyMzksIDE5OSwgCi0gICAgOSwgMTQsIDIzOSwgMTk4LCA5LCAxNCwgMjM5LCAxOTcsIDksIDE0LCAyMzksIDE5NiwgOSwgMTQsIDIzOSwgMTk1LCA5LCAKLSAgICAxNCwgMjM5LCAxOTQsIDksIDE0LCAyMzksIDE5MywgOSwgMTQsIDIzOSwgMTkyLCA5LCAxNCwgMjM5LCAxOTEsIDksIDE0LCAKLSAgICAyMzksIDE5MCwgOSwgMTQsIDIzOSwgMTg5LCA5LCAxNCwgMjM5LCAxODgsIDksIDE0LCAyMzksIDE4NywgOSwgMTQsIDIzOSwgCi0gICAgMTg2LCA5LCAxNCwgMjM5LCAxODUsIDksIDE0LCAyMzksIDE4NCwgOSwgMTQsIDIzOSwgMTgzLCA5LCAxNCwgMjM5LCAxODIsIAotICAgIDksIDE0LCAyMzksIDE4MSwgOSwgMTQsIDIzOSwgMTgwLCA5LCAxNCwgMjM5LCAxNzksIDksIDE0LCAyMzksIDE3OCwgOSwgCi0gICAgMTQsIDIzOSwgMTc3LCA5LCAxNCwgMjM5LCAxNzYsIDksIDE0LCAyMzksIDE3NSwgOSwgMTQsIDIzOSwgMTc0LCA5LCAxNCwgCi0gICAgMjM5LCAxNzMsIDksIDE0LCAyMzksIDE3MiwgOSwgMTQsIDIzOSwgMTcxLCA5LCAxNCwgMjM5LCAxNzAsIDksIDE0LCAyMzksIAotICAgIDE2OSwgOSwgMTQsIDIzOSwgMTY4LCA5LCAxNCwgMjM5LCAxNjcsIDksIDE0LCAyMzksIDE2NiwgOSwgMTQsIDIzOSwgMTY1LCAKLSAgICA5LCAxNCwgMjM5LCAxNjQsIDksIDE0LCAyMzksIDE2MywgOSwgMTQsIDIzOSwgMTYyLCA5LCAxNCwgMjM5LCAxNjEsIDksIAotICAgIDE0LCAyMzksIDE2MCwgOSwgMTQsIDIzOSwgMTU5LCA5LCAxNCwgMjM5LCAxNTgsIDksIDE0LCAyMzksIDE1NywgOSwgMTQsIAotICAgIDIzOSwgMTU2LCA5LCAxNCwgMjM5LCAxNTUsIDksIDE0LCAyMzksIDE1NCwgOSwgMTQsIDIzOSwgMTUzLCA5LCAxNCwgMjM5LCAKLSAgICAxNTIsIDksIDE0LCAyMzksIDE1MSwgOSwgMTQsIDIzOSwgMTUwLCA5LCAxNCwgMjM5LCAxNDksIDksIDE0LCAyMzksIDE0OCwgCi0gICAgOSwgMTQsIDIzOSwgMTQ3LCA5LCAxNCwgMjM5LCAxNDYsIDksIDE0LCAyMzksIDE0NSwgOSwgMTQsIDIzOSwgMTQ0LCA5LCAKLSAgICAxNCwgMjM5LCAxNDMsIDksIDE0LCAyMzksIDE0MiwgOSwgMTQsIDIzOSwgMTQxLCA5LCAxNCwgMjM5LCAxNDAsIDksIDE0LCAKLSAgICAyMzksIDEzOSwgOSwgMTQsIDIzOSwgMTM4LCA5LCAxNCwgMjM5LCAxMzcsIDksIDE0LCAyMzksIDEzNiwgOSwgMTQsIDIzOSwgCi0gICAgMTM1LCA5LCAxNCwgMjM5LCAxMzQsIDksIDE0LCAyMzksIDEzMywgOSwgMTQsIDIzOSwgMTMyLCA5LCAxNCwgMjM5LCAxMzEsIAotICAgIDksIDE0LCAyMzksIDEzMCwgOSwgMTQsIDIzOSwgMTI5LCA5LCAxNCwgMjM5LCAxMjgsIDksIDE0LCAyMzksIDEyNywgOSwgCi0gICAgMTQsIDIzOSwgMTI2LCA5LCAxNCwgMjM5LCAxMjUsIDksIDE0LCAyMzksIDEyNCwgOSwgMTQsIDIzOSwgMTIzLCA5LCAxNCwgCi0gICAgMjM5LCAxMjIsIDksIDE0LCAyMzksIDEyMSwgOSwgMTQsIDIzOSwgMTIwLCA5LCAxNCwgMjM5LCAxMTksIDksIDE0LCAyMzksIAotICAgIDExOCwgOSwgMTQsIDIzOSwgMTE3LCA5LCAxNCwgMjM5LCAxMTYsIDksIDE0LCAyMzksIDExNSwgOSwgMTQsIDIzOSwgMTE0LCAKLSAgICA5LCAxNCwgMjM5LCAxMTMsIDksIDE0LCAyMzksIDExMiwgOSwgMTQsIDIzOSwgMTExLCA5LCAxNCwgMjM5LCAxMTAsIDksIAotICAgIDE0LCAyMzksIDEwOSwgOSwgMTQsIDIzOSwgMTA4LCA5LCAxNCwgMjM5LCAxMDcsIDksIDE0LCAyMzksIDEwNiwgOSwgMTQsIAotICAgIDIzOSwgMTA1LCA5LCAxNCwgMjM5LCAxMDQsIDksIDE0LCAyMzksIDEwMywgOSwgMTQsIDIzOSwgMTAyLCA5LCAxNCwgMjM5LCAKLSAgICAxMDEsIDksIDE0LCAyMzksIDEwMCwgOSwgMTQsIDIzOSwgOTksIDksIDE0LCAyMzksIDk4LCA5LCAxNCwgMjM5LCA5NywgOSwgCi0gICAgMTQsIDIzOSwgOTYsIDksIDE0LCAyMzksIDk1LCA5LCAxNCwgMjM5LCA5NCwgOSwgMTQsIDIzOSwgOTMsIDksIDE0LCAyMzksIAotICAgIDkyLCA5LCAxNCwgMjM5LCA5MSwgOSwgMTQsIDIzOSwgOTAsIDksIDE0LCAyMzksIDg5LCA5LCAxNCwgMjM5LCA4OCwgOSwgCi0gICAgMTQsIDIzOSwgODcsIDksIDE0LCAyMzksIDg2LCA5LCAxNCwgMjM5LCA4NSwgOSwgMTQsIDIzOSwgODQsIDksIDE0LCAyMzksIAotICAgIDgzLCA5LCAxNCwgMjM5LCA4MiwgOSwgMTQsIDIzOSwgODEsIDksIDE0LCAyMzksIDgwLCA5LCAxNCwgMjM5LCA3OSwgOSwgCi0gICAgMTQsIDIzOSwgNzgsIDksIDE0LCAyMzksIDc3LCA5LCAxNCwgMjM5LCA3NiwgOSwgMTQsIDIzOSwgNzUsIDksIDE0LCAyMzksIAotICAgIDc0LCA5LCAxNCwgMjM5LCA3MywgOSwgMTQsIDIzOSwgNzIsIDksIDE0LCAyMzksIDcxLCA5LCAxNCwgMjM5LCA3MCwgOSwgCi0gICAgMTQsIDIzOSwgNjksIDksIDE0LCAyMzksIDY4LCA5LCAxNCwgMjM5LCA2NywgOSwgMTQsIDIzOSwgNjYsIDksIDE0LCAyMzksIAotICAgIDY1LCA5LCAxNCwgMjM5LCA2NCwgOSwgMTQsIDIzOSwgNjMsIDksIDE0LCAyMzksIDYyLCA5LCAxNCwgMjM5LCA2MSwgOSwgCi0gICAgMTQsIDIzOSwgNjAsIDksIDE0LCAyMzksIDU5LCA5LCAxNCwgMjM5LCA1OCwgOSwgMTQsIDIzOSwgNTcsIDksIDE0LCAyMzksIAotICAgIDU2LCA5LCAxNCwgMjM5LCA1NSwgOSwgMTQsIDIzOSwgNTQsIDksIDE0LCAyMzksIDUzLCA5LCAxNCwgMjM5LCA1MiwgOSwgCi0gICAgMTQsIDIzOSwgNTEsIDksIDE0LCAyMzksIDUwLCA5LCAxNCwgMjM5LCA0OSwgOSwgMTQsIDIzOSwgNDgsIDksIDE0LCAyMzksIAotICAgIDQ3LCA5LCAxNCwgMjM5LCA0NiwgOSwgMTQsIDIzOSwgNDUsIDksIDE0LCAyMzksIDQ0LCA5LCAxNCwgMjM5LCA0MywgOSwgCi0gICAgMTQsIDIzOSwgNDIsIDksIDE0LCAyMzksIDQxLCA5LCAxNCwgMjM5LCA0MCwgOSwgMTQsIDIzOSwgMzksIDksIDE0LCAyMzksIAotICAgIDM4LCA5LCAxNCwgMjM5LCAzNywgOSwgMTQsIDIzOSwgMzYsIDksIDE0LCAyMzksIDM1LCA5LCAxNCwgMjM5LCAzNCwgOSwgCi0gICAgMTQsIDIzOSwgMzMsIDksIDE0LCAyMzksIDMyLCA5LCAxNCwgMjM5LCAzMSwgOSwgMTQsIDIzOSwgMzAsIDksIDE0LCAyMzksIAotICAgIDI5LCA5LCAxNCwgMjM5LCAyOCwgOSwgMTQsIDIzOSwgMjcsIDksIDE0LCAyMzksIDI2LCA5LCAxNCwgMjM5LCAyNSwgOSwgCi0gICAgMTQsIDIzOSwgMjQsIDksIDE0LCAyMzksIDIzLCA5LCAxNCwgMjM5LCAyMiwgOSwgMTQsIDIzOSwgMjEsIDksIDE0LCAyMzksIAotICAgIDIwLCA5LCAxNCwgMjM5LCAxOSwgOSwgMTQsIDIzOSwgMTgsIDksIDE0LCAyMzksIDE3LCA5LCAxNCwgMjM5LCAxNiwgOSwgCi0gICAgMTQsIDIzOSwgMTUsIDksIDE0LCAyMzksIDE0LCA5LCAxNCwgMjM5LCAxMywgOSwgMTQsIDIzOSwgMTIsIDksIDE0LCAyMzksIAotICAgIDExLCA5LCAxNCwgMjM5LCAxMCwgOSwgMTQsIDIzOSwgOSwgOSwgMTQsIDIzOSwgOCwgOSwgMTQsIDIzOSwgNywgOSwgMTQsIAotICAgIDIzOSwgNiwgOSwgMTQsIDIzOSwgNSwgOSwgMTQsIDIzOSwgNCwgOSwgMTQsIDIzOSwgMywgOSwgMTQsIDIzOSwgMiwgOSwgCi0gICAgMTQsIDIzOSwgMSwgOSwgMTQsIDIzOSwgMCwgOSwgMTQsIDIzOCwgMjU1LCA5LCAxNCwgMjM4LCAyNTQsIDksIDE0LCAyMzgsIAotICAgIDI1MywgOSwgMTQsIDIzOCwgMjUyLCA5LCAxNCwgMjM4LCAyNTEsIDksIDE0LCAyMzgsIDI1MCwgOSwgMTQsIDIzOCwgMjQ5LCAKLSAgICA5LCAxNCwgMjM4LCAyNDgsIDksIDE0LCAyMzgsIDI0NywgOSwgMTQsIDIzOCwgMjQ2LCA5LCAxNCwgMjM4LCAyNDUsIDksIAotICAgIDE0LCAyMzgsIDI0NCwgOSwgMTQsIDIzOCwgMjQzLCA5LCAxNCwgMjM4LCAyNDIsIDksIDE0LCAyMzgsIDI0MSwgOSwgMTQsIAotICAgIDIzOCwgMjQwLCA5LCAxNCwgMjM4LCAyMzksIDksIDE0LCAyMzgsIDIzOCwgOSwgMTQsIDIzOCwgMjM3LCA5LCAxNCwgMjM4LCAKLSAgICAyMzYsIDksIDE0LCAyMzgsIDIzNSwgOSwgMTQsIDIzOCwgMjM0LCA5LCAxNCwgMjM4LCAyMzMsIDksIDE0LCAyMzgsIDIzMiwgCi0gICAgOSwgMTQsIDIzOCwgMjMxLCA5LCAxNCwgMjM4LCAyMzAsIDksIDE0LCAyMzgsIDIyOSwgOSwgMTQsIDIzOCwgMjI4LCA5LCAKLSAgICAxNCwgMjM4LCAyMjcsIDksIDE0LCAyMzgsIDIyNiwgOSwgMTQsIDIzOCwgMjI1LCA5LCAxNCwgMjM4LCAyMjQsIDksIDE0LCAKLSAgICAyMzgsIDIyMywgOSwgMTQsIDIzOCwgMjIyLCA5LCAxNCwgMjM4LCAyMjEsIDksIDE0LCAyMzgsIDIyMCwgOSwgMTQsIDIzOCwgCi0gICAgMjE5LCA5LCAxNCwgMjM4LCAyMTgsIDksIDE0LCAyMzgsIDIxNywgOSwgMTQsIDIzOCwgMjE2LCA5LCAxNCwgMjM4LCAyMTUsIAotICAgIDksIDE0LCAyMzgsIDIxNCwgOSwgMTQsIDIzOCwgMjEzLCA5LCAxNCwgMjM4LCAyMTIsIDksIDE0LCAyMzgsIDIxMSwgOSwgCi0gICAgMTQsIDIzOCwgMjEwLCA5LCAxNCwgMjM4LCAyMDksIDksIDE0LCAyMzgsIDIwOCwgOSwgMTQsIDIzOCwgMjA3LCA5LCAxNCwgCi0gICAgMjM4LCAyMDYsIDksIDE0LCAyMzgsIDIwNSwgOSwgMTQsIDIzOCwgMjA0LCA5LCAxNCwgMjM4LCAyMDMsIDksIDE0LCAyMzgsIAotICAgIDIwMiwgOSwgMTQsIDIzOCwgMjAxLCA5LCAxNCwgMjM4LCAyMDAsIDksIDE0LCAyMzgsIDE5OSwgOSwgMTQsIDIzOCwgMTk4LCAKLSAgICA5LCAxNCwgMjM4LCAxOTcsIDksIDE0LCAyMzgsIDE5NiwgOSwgMTQsIDIzOCwgMTk1LCA5LCAxNCwgMjM4LCAxOTQsIDksIAotICAgIDE0LCAyMzgsIDE5MywgOSwgMTQsIDIzOCwgMTkyLCA5LCAxNCwgMjM4LCAxOTEsIDksIDE0LCAyMzgsIDE5MCwgOSwgMTQsIAotICAgIDIzOCwgMTg5LCA5LCAxNCwgMjM4LCAxODgsIDksIDE0LCAyMzgsIDE4NywgOSwgMTQsIDIzOCwgMTg2LCA5LCAxNCwgMjM4LCAKLSAgICAxODUsIDksIDE0LCAyMzgsIDE4NCwgOSwgMTQsIDIzOCwgMTgzLCA5LCAxNCwgMjM4LCAxODIsIDksIDE0LCAyMzgsIDE4MSwgCi0gICAgOSwgMTQsIDIzOCwgMTgwLCA5LCAxNCwgMjM4LCAxNzksIDksIDE0LCAyMzgsIDE3OCwgOSwgMTQsIDIzOCwgMTc3LCA5LCAKLSAgICAxNCwgMjM4LCAxNzYsIDksIDE0LCAyMzgsIDE3NSwgOSwgMTQsIDIzOCwgMTc0LCA5LCAxNCwgMjM4LCAxNzMsIDksIDE0LCAKLSAgICAyMzgsIDE3MiwgOSwgMTQsIDIzOCwgMTcxLCA5LCAxNCwgMjM4LCAxNzAsIDksIDE0LCAyMzgsIDE2OSwgOSwgMTQsIDIzOCwgCi0gICAgMTY4LCA5LCAxNCwgMjM4LCAxNjcsIDksIDE0LCAyMzgsIDE2NiwgOSwgMTQsIDIzOCwgMTY1LCA5LCAxNCwgMjM4LCAxNjQsIAotICAgIDksIDE0LCAyMzgsIDE2MywgOSwgMTQsIDIzOCwgMTYyLCA5LCAxNCwgMjM4LCAxNjEsIDksIDE0LCAyMzgsIDE2MCwgOSwgCi0gICAgMTQsIDIzOCwgMTU5LCA5LCAxNCwgMjM4LCAxNTgsIDksIDE0LCAyMzgsIDE1NywgOSwgMTQsIDIzOCwgMTU2LCA5LCAxNCwgCi0gICAgMjM4LCAxNTUsIDksIDE0LCAyMzgsIDE1NCwgOSwgMTQsIDIzOCwgMTUzLCA5LCAxNCwgMjM4LCAxNTIsIDksIDE0LCAyMzgsIAotICAgIDE1MSwgOSwgMTQsIDIzOCwgMTUwLCA5LCAxNCwgMjM4LCAxNDksIDksIDE0LCAyMzgsIDE0OCwgOSwgMTQsIDIzOCwgMTQ3LCAKLSAgICA5LCAxNCwgMjM4LCAxNDYsIDksIDE0LCAyMzgsIDE0NSwgOSwgMTQsIDIzOCwgMTQ0LCA5LCAxNCwgMjM4LCAxNDMsIDksIAotICAgIDE0LCAyMzgsIDE0MiwgOSwgMTQsIDIzOCwgMTQxLCA5LCAxNCwgMjM4LCAxNDAsIDksIDE0LCAyMzgsIDEzOSwgOSwgMTQsIAotICAgIDIzOCwgMTM4LCA5LCAxNCwgMjM4LCAxMzcsIDksIDE0LCAyMzgsIDEzNiwgOSwgMTQsIDIzOCwgMTM1LCA5LCAxNCwgMjM4LCAKLSAgICAxMzQsIDksIDE0LCAyMzgsIDEzMywgOSwgMTQsIDIzOCwgMTMyLCA5LCAxNCwgMjM4LCAxMzEsIDksIDE0LCAyMzgsIDEzMCwgCi0gICAgOSwgMTQsIDIzOCwgMTI5LCA5LCAxNCwgMjM4LCAxMjgsIDksIDE0LCAyMzgsIDEyNywgOSwgMTQsIDIzOCwgMTI2LCA5LCAKLSAgICAxNCwgMjM4LCAxMjUsIDksIDE0LCAyMzgsIDEyNCwgOSwgMTQsIDIzOCwgMTIzLCA5LCAxNCwgMjM4LCAxMjIsIDksIDE0LCAKLSAgICAyMzgsIDEyMSwgOSwgMTQsIDIzOCwgMTIwLCA5LCAxNCwgMjM4LCAxMTksIDksIDE0LCAyMzgsIDExOCwgOSwgMTQsIDIzOCwgCi0gICAgMTE3LCA5LCAxNCwgMjM4LCAxMTYsIDksIDE0LCAyMzgsIDExNSwgOSwgMTQsIDIzOCwgMTE0LCA5LCAxNCwgMjM4LCAxMTMsIAotICAgIDksIDE0LCAyMzgsIDExMiwgOSwgMTQsIDIzOCwgMTExLCA5LCAxNCwgMjM4LCAxMTAsIDksIDE0LCAyMzgsIDEwOSwgOSwgCi0gICAgMTQsIDIzOCwgMTA4LCA5LCAxNCwgMjM4LCAxMDcsIDksIDE0LCAyMzgsIDEwNiwgOSwgMTQsIDIzOCwgMTA1LCA5LCAxNCwgCi0gICAgMjM4LCAxMDQsIDksIDE0LCAyMzgsIDEwMywgOSwgMTQsIDIzOCwgMTAyLCA5LCAxNCwgMjM4LCAxMDEsIDksIDE0LCAyMzgsIAotICAgIDEwMCwgOSwgMTQsIDIzOCwgOTksIDksIDE0LCAyMzgsIDk4LCA5LCAxNCwgMjM4LCA5NywgOSwgMTQsIDIzOCwgOTYsIDksIAotICAgIDE0LCAyMzgsIDk1LCA5LCAxNCwgMjM4LCA5NCwgOSwgMTQsIDIzOCwgOTMsIDksIDE0LCAyMzgsIDkyLCA5LCAxNCwgMjM4LCAKLSAgICA5MSwgOSwgMTQsIDIzOCwgOTAsIDksIDE0LCAyMzgsIDg5LCA5LCAxNCwgMjM4LCA4OCwgOSwgMTQsIDIzOCwgODcsIDksIAotICAgIDE0LCAyMzgsIDg2LCA5LCAxNCwgMjM4LCA4NSwgOSwgMTQsIDIzOCwgODQsIDksIDE0LCAyMzgsIDgzLCA5LCAxNCwgMjM4LCAKLSAgICA4MiwgOSwgMTQsIDIzOCwgODEsIDksIDE0LCAyMzgsIDgwLCA5LCAxNCwgMjM4LCA3OSwgOSwgMTQsIDIzOCwgNzgsIDksIAotICAgIDE0LCAyMzgsIDc3LCA5LCAxNCwgMjM4LCA3NiwgOSwgMTQsIDIzOCwgNzUsIDksIDE0LCAyMzgsIDc0LCA5LCAxNCwgMjM4LCAKLSAgICA3MywgMjMzLCA5MCwgMjE3LCA4NCwgMTI5LCAyMTksIDE4LCAxMjksIDI0NSwgMzEsIDc4LCAxMjksIDIyMywgMjU0LCA3OCwgCi0gICAgMTI5LCA1NCwgNTAsIDEyOSwgMjQ3LCAxMzIsIDUwLCAxMjksIDIyNSwgMTgyLCA1MCwgMTI5LCAyNTQsIDEyNiwgMTI5LCAKLSAgICAyNTQsIDU3LCAxMjksIDQzLCAyMjYsIDMsIDEyOSwgNDQsIDIyNiwgMywgMTI5LCAyNTMsIDIxNiwgMTI5LCA5NiwgNTAsIAotICAgIDEyOSwgMjQ5LCAyMTksIDEyOSwgMjQwLCAxNjcsIDEyOSwgMjQzLCAyMjksIDIxOCwgMTI5LCAxMjksIDIxOSwgNDYsIDEyOSwgCi0gICAgMjEsIDIxMCwgODYsIDEyOSwgMjEsIDExMCwgMTI5LCAyMSwgMTA1LCAxMjksIDIxLCAxNTgsIDEyOSwgMjEsIDE2MSwgMTI5LCAKLSAgICAyMSwgMTg5LCAxMjksIDIxLCAxOTQsIDEyOSwgMjEsIDE5OCwgMTI5LCAyMSwgMTk1LCAxMjksIDIxLCAyMDAsIDEyOSwgCi0gICAgMjQ5LCAyMjYsIDEyOSwgMjIwLCAxNTAsIDEyOSwgMjMzLCAxNSwgNTAsIDEyOSwgMjQ1LCA5OCwgNTAsIDEyOSwgMjQyLCAKLSAgICAxMzAsIDUwLCAxMjksIDIyNCwgMTMsIDc4LCAxMjksIDI0OSwgMjE3LCAyNTMsIDIwNiwgMTI5LCA3LCA2LCAxLCA2MSwgCi0gICAgMTI5LCA3LCA2LCAxLCAyNTMsIDE1OCwgMTI5LCA3LCA2LCAxLCAyNTEsIDY2LCAxMjksIDcsIDYsIDEsIDI0OSwgNjAsIAotICAgIDEyOSwgNywgNiwgMSwgNzUsIDEyOSwgNywgNiwgMSwgMjQ1LCA2LCAxMjksIDcsIDYsIDEsIDI0MywgMjAyLCAxMjksIDcsIAotICAgIDYsIDEsIDI0MiwgNjAsIDEyOSwgNywgNiwgMSwgNzMsIDEyOSwgNywgNiwgMSwgMjM1LCAxNDQsIDEyOSwgNywgNiwgMSwgCi0gICAgMjM1LCAyMywgMTI5LCA3LCA2LCAxLCAxNTYsIDEyOSwgNywgNiwgMSwgMTkzLCAxMjksIDcsIDYsIDEsIDIzMCwgMjUsIAotICAgIDEyOSwgNywgNiwgMSwgNzYsIDEyOSwgNywgNiwgMSwgMjI2LCAxMDUsIDEyOSwgNywgNiwgMSwgMjI0LCA5NiwgMTI5LCA3LCAKLSAgICA2LCAxLCAxNTMsIDEyOSwgNywgNiwgMSwgMjIyLCA5MSwgMTI5LCA3LCA2LCAxLCAyMTcsIDE1MiwgMTI5LCA3LCA2LCAxLCAKLSAgICA3MCwgMTI5LCA3LCA2LCAxLCAyMTQsIDEwNSwgMTI5LCA3LCA2LCAxLCAyMTIsIDk4LCAxMjksIDcsIDYsIDEsIDIxMSwgCi0gICAgMTc4LCAxMjksIDcsIDYsIDEsIDIxMSwgMTE3LCAxMjksIDcsIDYsIDEsIDIxMCwgMTU5LCAxMjksIDQzLCA0MiwgMTI3LCAKLSAgICAxMjksIDIyMywgNTAsIDIxOSwgNDYsIDEyOSwgNDQsIDQyLCAxMjcsIDEyOSwgMjUwLCAzMSwgMjU1LCAxNCwgMTI5LCAxMjEsIAotICAgIDIzMiwgMjEzLCAxMjksIDI0MiwgMTM3LCAyNTUsIDE0LCAxMjksIDcsIDQsIDEsIDYxLCAxMjksIDcsIDQsIDEsIDI1MywgCi0gICAgMTU4LCAxMjksIDcsIDQsIDEsIDI1MSwgNjYsIDEyOSwgNywgNCwgMSwgMjQ5LCA2MCwgMTI5LCA3LCA0LCAxLCA3NSwgMTI5LCAKLSAgICA3LCA0LCAxLCAyNDUsIDYsIDEyOSwgNywgNCwgMSwgMjQzLCAyMDIsIDEyOSwgNywgNCwgMSwgMjQyLCA2MCwgMTI5LCA3LCAKLSAgICA0LCAxLCA3MywgMTI5LCA3LCA0LCAxLCAyMzUsIDE0NCwgMTI5LCA3LCA0LCAxLCAyMzUsIDIzLCAxMjksIDcsIDQsIDEsIAotICAgIDE1NiwgMTI5LCA3LCA0LCAxLCAxOTMsIDEyOSwgNywgNCwgMSwgMjMwLCAyNSwgMTI5LCA3LCA0LCAxLCA3NiwgMTI5LCA3LCAKLSAgICA0LCAxLCAyMjYsIDEwNSwgMTI5LCA3LCA0LCAxLCAyMjQsIDk2LCAxMjksIDcsIDQsIDEsIDE1MywgMTI5LCA3LCA0LCAxLCAKLSAgICAyMjIsIDkxLCAxMjksIDcsIDQsIDEsIDIxNywgMTUyLCAxMjksIDcsIDQsIDEsIDcwLCAxMjksIDcsIDQsIDEsIDIxNCwgCi0gICAgMTA1LCAxMjksIDcsIDQsIDEsIDIxMiwgOTgsIDEyOSwgNywgNCwgMSwgMjExLCAxNzgsIDEyOSwgNywgNCwgMSwgMjExLCAKLSAgICAxMTcsIDEyOSwgNywgNCwgMSwgMjEwLCAxNTksIDEyOSwgNDMsIDI0OSwgOTksIDEyNywgMTI5LCA2NywgMjMyLCAyMTMsIAotICAgIDEyOSwgNDQsIDI0OSwgOTksIDEyNywgMTI5LCAxODIsIDI1MSwgNiwgMjE3LCA4NCwgNDUsIDIyMSwgNzgsIDQ1LCAyMjEsIAotICAgIDY3LCA0NSwgMjIxLCA1NiwgNDUsIDIyMSwgNDQsIDQ1LCAyMjEsIDMzLCA0NSwgMjIxLCAyMiwgNDUsIDIyMSwgMTEsIDQ1LCAKLSAgICAyMjEsIDAsIDQ1LCAyMjAsIDI0NSwgNDUsIDIyMCwgMjM3LCA0NSwgMjIwLCAyMzYsIDQ1LCAyMjAsIDIzNSwgNDUsIDIyMCwgCi0gICAgMjM0LCA0NSwgMjIwLCAyMzIsIDQ1LCAyMjAsIDIzMSwgNDUsIDIyMCwgMjMwLCA0NSwgMjIwLCAyMjksIDQ1LCAyMjAsIAotICAgIDIyOCwgNDUsIDIyMCwgMjI3LCA0NSwgMjIwLCAyMjYsIDQ1LCAyMjAsIDIyNSwgNDUsIDIyMCwgMjI0LCA0NSwgMjIwLCAKLSAgICAyMjMsIDQ1LCAyMjAsIDIyMSwgNDUsIDIyMCwgMjIwLCA0NSwgMjIwLCAyMTksIDQ1LCAyMjAsIDIxOCwgNDUsIDIyMCwgCi0gICAgMjE3LCA0NSwgMjIwLCAyMTYsIDQ1LCAyMjAsIDIxNSwgNDUsIDIyMCwgMjE0LCA0NSwgMjIwLCAyMTMsIDQ1LCAyMjAsIAotICAgIDIxMiwgNDUsIDIyMCwgMjEwLCA0NSwgMjIwLCAyMDksIDQ1LCAyMjAsIDIwOCwgNDUsIDIyMCwgMjA3LCA0NSwgMjIwLCAKLSAgICAyMDYsIDQ1LCAyMjAsIDIwNSwgNDUsIDIyMCwgMjA0LCA0NSwgMjIwLCAyMDMsIDQ1LCAyMjAsIDIwMiwgNDUsIDIyMCwgCi0gICAgMjAxLCA0NSwgMjIwLCAxOTksIDQ1LCAyMjAsIDE5OCwgNDUsIDIyMCwgMTk3LCA0NSwgMjIwLCAxOTYsIDQ1LCAyMjAsIAotICAgIDE5NSwgNDUsIDIyMCwgMTk0LCA0NSwgMjIwLCAxOTMsIDQ1LCAyMjAsIDE5MiwgNDUsIDIyMCwgMTkxLCA0NSwgMjIwLCAKLSAgICAxOTAsIDQ1LCAyMjAsIDE4OCwgNDUsIDIyMCwgMTg3LCA0NSwgMjIwLCAxODYsIDQ1LCAyMjAsIDE4NSwgNDUsIDIyMCwgCi0gICAgMTg0LCA0NSwgMjIwLCAxODMsIDQ1LCAyMjAsIDE4MiwgNDUsIDIyMCwgMTgxLCA0NSwgMjIwLCAxODAsIDQ1LCAyMjAsIAotICAgIDE3OSwgNDUsIDIyMCwgMTc3LCA0NSwgMjIwLCAxNzYsIDQ1LCAyMjAsIDE3NSwgNDUsIDIyMCwgMTc0LCA0NSwgMjIwLCAKLSAgICAxNzMsIDQ1LCAyMjAsIDE3MiwgNDUsIDIyMCwgMTcxLCA0NSwgMjIwLCAxNzAsIDQ1LCAyMjAsIDE2OSwgNDUsIDIyMCwgCi0gICAgMTY4LCA0NSwgMjIwLCAxNjYsIDQ1LCAyMjAsIDE2NSwgNDUsIDIyMCwgMTY0LCA0NSwgMjIwLCAxNjMsIDQ1LCAyMjAsIAotICAgIDE2MiwgNDUsIDIyMCwgMTYxLCA0NSwgMjIwLCAxNjAsIDQ1LCAyMjAsIDE1OSwgNDUsIDIyMCwgMTU4LCA0NSwgMjIwLCAKLSAgICAxNTcsIDQ1LCAyMjEsIDE1NCwgNDUsIDIyMSwgMTUzLCA0NSwgMjIxLCAxNTIsIDQ1LCAyMjEsIDE1MSwgNDUsIDIyMSwgCi0gICAgMTUwLCA0NSwgMjIxLCAxNDksIDQ1LCAyMjEsIDE0OCwgNDUsIDIyMSwgMTQ3LCA0NSwgMjIxLCAxNDYsIDQ1LCAyMjEsIAotICAgIDE0NSwgNDUsIDIyMSwgMTQzLCA0NSwgMjIxLCAxNDIsIDQ1LCAyMjEsIDE0MSwgNDUsIDIyMSwgMTQwLCA0NSwgMjIxLCAKLSAgICAxMzksIDQ1LCAyMjEsIDEzOCwgNDUsIDIyMSwgMTM3LCA0NSwgMjIxLCAxMzYsIDQ1LCAyMjEsIDEzNSwgNDUsIDIyMSwgCi0gICAgMTM0LCA0NSwgMjIxLCAxMzIsIDQ1LCAyMjEsIDEzMSwgNDUsIDIyMSwgMTMwLCA0NSwgMjIxLCAxMjksIDQ1LCAyMjEsIAotICAgIDEyOCwgNDUsIDIyMSwgMTI3LCA0NSwgMjIxLCAxMjYsIDQ1LCAyMjEsIDEyNSwgNDUsIDIyMSwgMTI0LCA0NSwgMjIxLCAKLSAgICAxMjMsIDQ1LCAyMjEsIDEyMSwgNDUsIDIyMSwgMTIwLCA0NSwgMjIxLCAxMTksIDQ1LCAyMjEsIDExOCwgNDUsIDIyMSwgCi0gICAgMTE3LCA0NSwgMjIxLCAxMTYsIDQ1LCAyMjEsIDExNSwgNDUsIDIyMSwgMTE0LCA0NSwgMjIxLCAxMTMsIDQ1LCAyMjEsIAotICAgIDExMiwgNDUsIDIyMSwgMTEwLCA0NSwgMjIxLCAxMDksIDQ1LCAyMjEsIDEwOCwgNDUsIDIyMSwgMTA3LCA0NSwgMjIxLCAKLSAgICAxMDYsIDQ1LCAyMjEsIDEwNSwgNDUsIDIyMSwgMTA0LCA0NSwgMjIxLCAxMDMsIDQ1LCAyMjEsIDEwMiwgNDUsIDIyMSwgCi0gICAgMTAxLCA0NSwgMjIxLCA5OSwgNDUsIDIyMSwgOTgsIDQ1LCAyMjEsIDk3LCA0NSwgMjIxLCA5NiwgNDUsIDIyMSwgOTUsIDQ1LCAKLSAgICAyMjEsIDk0LCA0NSwgMjIxLCA5MywgNDUsIDIyMSwgOTIsIDQ1LCAyMjEsIDkxLCA0NSwgMjIxLCA5MCwgNDUsIDIyMSwgODgsIAotICAgIDQ1LCAyMjEsIDg3LCA0NSwgMjIxLCA4NiwgNDUsIDIyMSwgODUsIDQ1LCAyMjEsIDg0LCA0NSwgMjIxLCA4MywgNDUsIDIyMSwgCi0gICAgODIsIDQ1LCAyMjEsIDgxLCA0NSwgMjIxLCA4MCwgNDUsIDIyMSwgNzksIDQ1LCAyMjEsIDc3LCA0NSwgMjIxLCA3NiwgNDUsIAotICAgIDIyMSwgNzUsIDQ1LCAyMjEsIDc0LCA0NSwgMjIxLCA3MywgNDUsIDIyMSwgNzIsIDQ1LCAyMjEsIDcxLCA0NSwgMjIxLCA3MCwgCi0gICAgNDUsIDIyMSwgNjksIDQ1LCAyMjEsIDY4LCA0NSwgMjIxLCA2NiwgNDUsIDIyMSwgNjUsIDQ1LCAyMjEsIDY0LCA0NSwgMjIxLCAKLSAgICA2MywgNDUsIDIyMSwgNjIsIDQ1LCAyMjEsIDYxLCA0NSwgMjIxLCA2MCwgNDUsIDIyMSwgNTksIDQ1LCAyMjEsIDU4LCA0NSwgCi0gICAgMjIxLCA1NywgNDUsIDIyMSwgNTUsIDQ1LCAyMjEsIDU0LCA0NSwgMjIxLCA1MywgNDUsIDIyMSwgNTIsIDQ1LCAyMjEsIDUxLCAKLSAgICA0NSwgMjIxLCA1MCwgNDUsIDIyMSwgNDksIDQ1LCAyMjEsIDQ4LCA0NSwgMjIxLCA0NywgNDUsIDIyMSwgNDYsIDQ1LCAyMjEsIAotICAgIDQzLCA0NSwgMjIxLCA0MiwgNDUsIDIyMSwgNDEsIDQ1LCAyMjEsIDQwLCA0NSwgMjIxLCAzOSwgNDUsIDIyMSwgMzgsIDQ1LCAKLSAgICAyMjEsIDM3LCA0NSwgMjIxLCAzNiwgNDUsIDIyMSwgMzUsIDQ1LCAyMjEsIDM0LCA0NSwgMjIxLCAzMiwgNDUsIDIyMSwgMzEsIAotICAgIDQ1LCAyMjEsIDMwLCA0NSwgMjIxLCAyOSwgNDUsIDIyMSwgMjgsIDQ1LCAyMjEsIDI3LCA0NSwgMjIxLCAyNiwgNDUsIDIyMSwgCi0gICAgMjUsIDQ1LCAyMjEsIDI0LCA0NSwgMjIxLCAyMywgNDUsIDIyMSwgMjEsIDQ1LCAyMjEsIDIwLCA0NSwgMjIxLCAxOSwgNDUsIAotICAgIDIyMSwgMTgsIDQ1LCAyMjEsIDE3LCA0NSwgMjIxLCAxNiwgNDUsIDIyMSwgMTUsIDQ1LCAyMjEsIDE0LCA0NSwgMjIxLCAxMywgCi0gICAgNDUsIDIyMSwgMTIsIDQ1LCAyMjEsIDEwLCA0NSwgMjIxLCA5LCA0NSwgMjIxLCA4LCA0NSwgMjIxLCA3LCA0NSwgMjIxLCA2LCAKLSAgICA0NSwgMjIxLCA1LCA0NSwgMjIxLCA0LCA0NSwgMjIxLCAzLCA0NSwgMjIxLCAyLCA0NSwgMjIxLCAxLCA0NSwgMjIwLCAyNTUsIAotICAgIDQ1LCAyMjAsIDI1NCwgNDUsIDIyMCwgMjUzLCA0NSwgMjIwLCAyNTIsIDQ1LCAyMjAsIDI1MSwgNDUsIDIyMCwgMjUwLCA0NSwgCi0gICAgMjIwLCAyNDksIDQ1LCAyMjAsIDI0OCwgNDUsIDIyMCwgMjQ3LCA0NSwgMjIwLCAyNDYsIDQ1LCAyMjAsIDI0NCwgNDUsIAotICAgIDIyMCwgMjQzLCA0NSwgMjIwLCAyNDIsIDQ1LCAyMjAsIDI0MSwgNDUsIDIyMCwgMjQwLCA0NSwgMjIwLCAyMzksIDQ1LCAKLSAgICAyMjAsIDIzOCwgMjI3LCAyMDIsIDIyNywgMjA0LCAyMTgsIDE1MiwgNjQsIDI0MSwgMjMzLCAyMTksIDQ4LCAyMTgsIDE1MiwgCi0gICAgNjQsIDIxNiwgMjEyLCAyMTgsIDg1LCAyNDUsIDE0MywgNjQsIDIxNiwgMjEyLCAyNDUsIDU2LCAyNDUsIDE0MywgNjQsIAotICAgIDIxNSwgMjQzLCAyNDUsIDEwOSwgMjQ1LCAxMzIsIDI0NSwgMTMzLCAyNTUsIDcsIDI1NSwgOCwgMjU0LCAxNjcsIDI1MiwgCi0gICAgNDcsIDI1MiwgMTc5LCAyNTEsIDEzMSwgMTM1LCAyMTcsIDg5LCAyMDMsIDIxNywgODksIDI0MCwgMjI3LCAyMTcsIDkzLCAKLSAgICAyMzIsIDIxNCwgMjQ0LCAxNDUsIDE2NiwgMjMyLCAyMTMsIDI0NSwgMTQzLCA2NCwgMjMyLCAyMTMsIDIzMywgMCwgMjI4LCAKLSAgICAxMzUsIDI0NSwgMTEyLCAyMzIsIDIxNCwgMjE3LCA4OSwgNjcsIDIxNywgODksIDIxMiwgMTE4LCAyNDQsIDIwLCAyNDQsIAotICAgIDE0NSwgMjQ0LCAxMjUsIDI1MCwgMjMwLCAyMjMsIDUzLCAyNDksIDE0MywgMjIwLCAyOCwgMjI2LCAxMzAsIDIzMiwgMTUwLCAKLSAgICAxMTAsIDIxOSwgNTgsIDIyMCwgMjgsIDIzNSwgMjU1LCAyMzIsIDE1MCwgMjEwLCA4NiwgMjE5LCAxOTEsIDI0OCwgMTUxLCAKLSAgICAyMzIsIDIwNCwgMjQ1LCA3NywgMjQ3LCAxNTUsIDI0OCwgMzEsIDI0OSwgMTc4LCAxMTAsIDI0OCwgMTQxLCAyNDgsIDMxLCAKLSAgICAyNDksIDE3OCwgMTA1LCAyNDgsIDE0MCwgMjQ4LCAzMSwgMjQ5LCAxNzgsIDE1OCwgMjQ4LCAxMzksIDI0OCwgMzEsIDI0OSwgCi0gICAgMTc4LCAxNjEsIDI0OCwgMTM4LCAxNTIsIDI1NSwgNywgMjI5LCAyMDksIDIxNywgMTc3LCAyMzYsIDYyLCAyMTcsIDE4MCwgCi0gICAgMjQ1LCAxNDMsIDY0LCAyMTUsIDI0NCwgMjUxLCAyMTMsIDI0NSwgNjIsIDI1MSwgNSwgMjUxLCA3LCAyNDUsIDE0MywgNjQsIAotICAgIDIzMSwgODEsIDI0NSwgMTEwLCAyMTgsIDYxLCAyMTgsIDc4LCAyNDUsIDc3LCAyNDUsIDc4LCAyMzUsIDIzMiwgMjIwLCAKLSAgICAxMzgsIDE2MSwgMjQ0LCAxMDcsIDIyMCwgMTM3LCAyNDMsIDIzNywgMjM1LCAyMzIsIDIyMCwgMTM4LCAxNTgsIDI0MiwgCi0gICAgMTIxLCAyMjAsIDEzNywgMjQyLCAxMTgsIDIzNSwgMjMyLCAyMjAsIDEzOCwgMTA1LCAyMjMsIDEyMSwgMjIwLCAxMzcsIAotICAgIDIyMiwgMTQ1LCAyMzUsIDIzMiwgMjIwLCAxMzgsIDExMCwgMjE0LCAxNzQsIDIyMCwgMTM3LCAyMTQsIDEzMywgMjE5LCAyMSwgCi0gICAgMjQ4LCA2MywgMjQ4LCA2NSwgMjI2LCA3OCwgMjUwLCAxNDIsIDIyNiwgODAsIDEyNSwgMjI2LCAyNDAsIDIyNCwgMTkzLCAKLSAgICAyNDEsIDQ3LCAyNTEsIDE1MCwgMjI1LCAxNzMsIDI0MSwgMjAzLCAyNTEsIDE2MSwgMjI4LCA3NSwgMjUxLCAxNTAsIDI0MSwgCi0gICAgMjAzLCAyMjksIDE3NSwgMjM1LCAyNDIsIDIzNSwgMjQ0LCAyMjksIDgyLCAyMzIsIDIxMywgMjI5LCA5OSwgMjE4LCAxNTIsIAotICAgIDY0LCAyMjEsIDE1OCwgMjU0LCAxOCwgMjE4LCAyMjMsIDI0NSwgMTQzLCA2NCwgMjIxLCAxNTgsIDI1NCwgMTgsIDI0NSwgCi0gICAgODAsIDEzNSwgMjE3LCA5MCwgMjIwLCAxMjcsIDIwMywgMjE3LCA5MCwgMjIwLCAxMjcsIDI0MCwgMjI0LCAxMzUsIDIxNywgCi0gICAgOTAsIDIsIDIzNSwgMzUsIDIwMywgMjE3LCA5MCwgMiwgMjM1LCAzNSwgMjQwLCAyMjUsIDIzMiwgMjE0LCAyMTcsIDkwLCAKLSAgICAyMjAsIDEyNywgNjcsIDIxNywgOTAsIDIyMCwgMTI3LCAyMTIsIDExNywgMjI1LCAyNTMsIDIzMiwgMjE0LCAyNDQsIDE0LCAKLSAgICAyMjUsIDI1MywgMjMyLCAyMTQsIDI0NiwgMTA2LCAyMjUsIDMyLCAyMjUsIDI1MywgMjMyLCAyMTQsIDI1MiwgMTc4LCAyMjUsIAotICAgIDI1MywgMjMyLCAyMTQsIDIxNCwgMTYzLCAyMjUsIDI4LCAyMjMsIDUwLCAyMzIsIDIxNCwgMjQ0LCAxNDUsIDIyMywgNTAsIAotICAgIDIzNSwgMjQyLCAyMjMsIDM1LCAyMTksIDE1NSwgMjIwLCAyOCwgMTA1LCAyMTksIDE1MiwgMjE4LCAyMjUsIDIxOSwgMTU1LCAKLSAgICAyMjAsIDI4LCAxNTgsIDIxOSwgMTUxLCAyMTgsIDIyNCwgMjQ4LCAzMSwgMjQ5LCAxNzgsIDIxOCwgMTA1LCAyNDgsIDEzNywgCi0gICAgMjI0LCAxODMsIDIxNCwgMTMyLCAxMTAsIDIyNCwgMTgzLCAyMTQsIDEzMCwgMjI0LCAxNDksIDIyNCwgMTgzLCAyMTQsIAotICAgIDEzMiwgMTA1LCAyMjQsIDE4MywgMjE0LCAxMjksIDIyNCwgMTQ4LCAyMjAsIDEyOCwgMjE1LCAyNDIsIDIxOCwgMTUxLCAKLSAgICAyMTgsIDg5LCAyNTEsIDYsIDI1MCwgMTQyLCAyNTAsIDIwOSwgMjMxLCA0MywgMjEyLCA1OSwgMjMwLCA0MywgMjE4LCAxNTIsIAotICAgIDY0LCAyNDIsIDEwNywgMjU0LCAxOCwgMjE4LCAxNTIsIDY0LCAyMjQsIDE2NiwgMjU0LCAxOCwgMjE5LCAyMCwgMjQ1LCAKLSAgICAxNDMsIDY0LCAyNDIsIDEwNywgMjU0LCAxOCwgMjQ1LCAxNDMsIDY0LCAyMjQsIDE2NiwgMjU0LCAxOCwgMjQ1LCAxMDcsIAotICAgIDIxOCwgMTUyLCA2NCwgMjE4LCAxMDUsIDIxOSwgMzUsIDIxOSwgMTU1LCAyNDIsIDE0MSwgMTM1LCAyMzUsIDE5NSwgMjIwLCAKLSAgICAxMDcsIDIxOSwgMTU1LCAxMzUsIDIzNSwgMTk1LCAyMjEsIDE5NCwgMjQ5LCAxNzgsIDIyMCwgMTM1LCAyMzUsIDE5NSwgCi0gICAgMjQ5LCAxMTMsIDIxOCwgMTA2LCAyMTYsIDIzNiwgMjE4LCAxNjgsIDIyNiwgMTY5LCAyMTcsIDE2NywgMjQ5LCAyMTgsIAotICAgIDIyNiwgMTQyLCAyMjQsIDE4NCwgMjMxLCA0MiwgMjI1LCAxOSwgMjU0LCA1MywgMjI0LCAxNzgsIDI0OSwgMjE4LCAyNTQsIAotICAgIDY5LCAyMjksIDE2MywgMjE5LCAyMDAsIDcsIDYsIDEsIDI0MiwgMjQ5LCA3LCA0LCAxLCAyNDIsIDI0OSwgMjUwLCAxNTksIAotICAgIDE2NSwgMSwgMjMyLCAxNzUsIDIwOSwgMjA5LCAxLCAyNDQsIDQ0LCAyNDQsIDM2LCAyMDksIDIwOSwgMSwgMjQ0LCA0NCwgCi0gICAgMjQ0LCAxNTcsIDIwOSwgMjA5LCAxLCAyMjIsIDIxMSwgMjA5LCAyMDksIDEsIDIzMiwgMTU2LCA2MywgMTY0LCAyNTEsIAotICAgIDIyMywgMjIwLCAzLCAyNDIsIDIxNSwgMjMwLCAyNDgsIDIyMywgNDEsIDI0MywgMjE2LCAyNDMsIDIxNSwgMjQzLCAyMTQsIAotICAgIDIzMCwgNDUsIDIwOSwgMjUxLCAyMDksIDI1MiwgMjA5LCAyNTQsIDIzMiwgMTAyLCAyMjIsIDIxOSwgMjMyLCAxMDMsIDIyMiwgCi0gICAgMjIwLCAyMjUsIDIyMywgMjMyLCAxMDEsIDIyMiwgMjE4LCAyMjgsIDEwNiwgMjMwLCAxNjUsIDIxMSwgMjI5LCAyMTIsIDE1LCAKLSAgICAyNDUsIDE2MiwgMjQzLCAyMjYsIDIzMCwgMjI5LCAyMjYsIDE5NywgMjE0LCAxMzQsIDg3LCAyMzAsIDIyOSwgMjQ4LCAxNTcsIAotICAgIDg3LCA4LCAzLCAyMzUsIDE1OCwgNzgsIDIyNCwgMTk0LCAyNDQsIDIwLCAzMSwgNjcsIDQ0LCA3MSwgMjMzLCAyMCwgMTI3LCAKLSAgICAyMTMsIDExOCwgMjEzLCA3LCAyMTIsIDE5NSwgMjEyLCAxODQsIDIxMiwgMTczLCAyMTIsIDE2MiwgMjEyLCAxNTEsIDIxMiwgCi0gICAgMTQwLCAyMTIsIDEyOSwgMjEzLCAxMTcsIDIxMywgMTA2LCAyMTMsIDk1LCAyMTMsIDg0LCAyMTMsIDczLCAyMTMsIDYyLCAKLSAgICAyMTMsIDUxLCAyNTEsIDcxLCAyMjYsIDE1NSwgNzgsIDI1MSwgMTk2LCAyMDksIDI1MywgNDksIDI4LCAxNiwgMjQzLCAyMzYsIAotICAgIDIxOSwgMTAyLCAyNTAsIDczLCAyMTQsIDksIDIxMywgNDAsIDIxMywgMjksIDIxMywgMTgsIDIxMywgNiwgMjEyLCAyNTEsIAotICAgIDIxMiwgMjQwLCAyMTIsIDIyOSwgMjEyLCAyMTgsIDIxMiwgMjA3LCAyMTIsIDE5OSwgMjEyLCAxOTgsIDIxMiwgMTk3LCAKLSAgICAyMTIsIDE5NiwgMjEyLCAxOTQsIDIxMiwgMTkzLCAyMTIsIDE5MiwgMjEyLCAxOTEsIDIxMiwgMTkwLCAyMTIsIDE4OSwgCi0gICAgMjEyLCAxODgsIDIxMiwgMTg3LCAyMTIsIDE4NiwgMjEyLCAxODUsIDIxMiwgMTgzLCAyMTIsIDE4MiwgMjEyLCAxODEsIAotICAgIDIxMiwgMTgwLCAyMTIsIDE3OSwgMjEyLCAxNzgsIDIxMiwgMTc3LCAyMTIsIDE3NiwgMjEyLCAxNzUsIDIxMiwgMTc0LCAKLSAgICAyMTIsIDE3MiwgMjEyLCAxNzEsIDIxMiwgMTcwLCAyMTIsIDE2OSwgMjEyLCAxNjgsIDIxMiwgMTY3LCAyMTIsIDE2NiwgCi0gICAgMjEyLCAxNjUsIDIxMiwgMTY0LCAyMTIsIDE2MywgMjEyLCAxNjEsIDIxMiwgMTYwLCAyMTIsIDE1OSwgMjEyLCAxNTgsIAotICAgIDIxMiwgMTU3LCAyMTIsIDE1NiwgMjEyLCAxNTUsIDIxMiwgMTU0LCAyMTIsIDE1MywgMjEyLCAxNTIsIDIxMiwgMTUwLCAKLSAgICAyMTIsIDE0OSwgMjEyLCAxNDgsIDIxMiwgMTQ3LCAyMTIsIDE0NiwgMjEyLCAxNDUsIDIxMiwgMTQ0LCAyMTIsIDE0MywgCi0gICAgMjEyLCAxNDIsIDIxMiwgMTQxLCAyMTIsIDEzOSwgMjEyLCAxMzgsIDIxMiwgMTM3LCAyMTIsIDEzNiwgMjEyLCAxMzUsIAotICAgIDIxMiwgMTM0LCAyMTIsIDEzMywgMjEyLCAxMzIsIDIxMiwgMTMxLCAyMTIsIDEzMCwgMjEyLCAxMjgsIDIxMiwgMTI3LCAKLSAgICAyMTIsIDEyNiwgMjEyLCAxMjUsIDIxMiwgMTI0LCAyMTIsIDEyMywgMjEyLCAxMjIsIDIxMiwgMTIxLCAyMTIsIDEyMCwgCi0gICAgMjEyLCAxMTksIDIxMywgMTE2LCAyMTMsIDExNSwgMjEzLCAxMTQsIDIxMywgMTEzLCAyMTMsIDExMiwgMjEzLCAxMTEsIAotICAgIDIxMywgMTEwLCAyMTMsIDEwOSwgMjEzLCAxMDgsIDIxMywgMTA3LCAyMTMsIDEwNSwgMjEzLCAxMDQsIDIxMywgMTAzLCAKLSAgICAyMTMsIDEwMiwgMjEzLCAxMDEsIDIxMywgMTAwLCAyMTMsIDk5LCAyMTMsIDk4LCAyMTMsIDk3LCAyMTMsIDk2LCAyMTMsIAotICAgIDk0LCAyMTMsIDkzLCAyMTMsIDkyLCAyMTMsIDkxLCAyMTMsIDkwLCAyMTMsIDg5LCAyMTMsIDg4LCAyMTMsIDg3LCAyMTMsIAotICAgIDg2LCAyMTMsIDg1LCAyMTMsIDgzLCAyMTMsIDgyLCAyMTMsIDgxLCAyMTMsIDgwLCAyMTMsIDc5LCAyMTMsIDc4LCAyMTMsIAotICAgIDc3LCAyMTMsIDc2LCAyMTMsIDc1LCAyMTMsIDc0LCAyMTMsIDcyLCAyMTMsIDcxLCAyMTMsIDcwLCAyMTMsIDY5LCAyMTMsIAotICAgIDY4LCAyMTMsIDY3LCAyMTMsIDY2LCAyMTMsIDY1LCAyMTMsIDY0LCAyMTMsIDYzLCAyMTMsIDYxLCAyMTMsIDYwLCAyMTMsIAotICAgIDU5LCAyMTMsIDU4LCAyMTMsIDU3LCAyMTMsIDU2LCAyMTMsIDU1LCAyMTMsIDU0LCAyMTMsIDUzLCAyMTMsIDUyLCAyMTMsIAotICAgIDUwLCAyMTMsIDQ5LCAyMTMsIDQ4LCAyMTMsIDQ3LCAyMTMsIDQ2LCAyMTMsIDQ1LCAyMTMsIDQ0LCAyMTMsIDQzLCAyMTMsIAotICAgIDQyLCAyMTMsIDQxLCAyMTMsIDM5LCAyMTMsIDM4LCAyMTMsIDM3LCAyMTMsIDM2LCAyMTMsIDM1LCAyMTMsIDM0LCAyMTMsIAotICAgIDMzLCAyMTMsIDMyLCAyMTMsIDMxLCAyMTMsIDMwLCAyMTMsIDI4LCAyMTMsIDI3LCAyMTMsIDI2LCAyMTMsIDI1LCAyMTMsIAotICAgIDI0LCAyMTMsIDIzLCAyMTMsIDIyLCAyMTMsIDIxLCAyMTMsIDIwLCAyMTMsIDE5LCAyMTMsIDE3LCAyMTMsIDE2LCAyMTMsIAotICAgIDE1LCAyMTMsIDE0LCAyMTMsIDEzLCAyMTMsIDEyLCAyMTMsIDExLCAyMTMsIDEwLCAyMTMsIDksIDIxMywgOCwgMjEzLCA1LCAKLSAgICAyMTMsIDQsIDIxMywgMywgMjEzLCAyLCAyMTMsIDEsIDIxMywgMCwgMjEyLCAyNTUsIDIxMiwgMjU0LCAyMTIsIDI1MywgCi0gICAgMjEyLCAyNTIsIDIxMiwgMjUwLCAyMTIsIDI0OSwgMjEyLCAyNDgsIDIxMiwgMjQ3LCAyMTIsIDI0NiwgMjEyLCAyNDUsIAotICAgIDIxMiwgMjQ0LCAyMTIsIDI0MywgMjEyLCAyNDIsIDIxMiwgMjQxLCAyMTIsIDIzOSwgMjEyLCAyMzgsIDIxMiwgMjM3LCAKLSAgICAyMTIsIDIzNiwgMjEyLCAyMzUsIDIxMiwgMjM0LCAyMTIsIDIzMywgMjEyLCAyMzIsIDIxMiwgMjMxLCAyMTIsIDIzMCwgCi0gICAgMjEyLCAyMjgsIDIxMiwgMjI3LCAyMTIsIDIyNiwgMjEyLCAyMjUsIDIxMiwgMjI0LCAyMTIsIDIyMywgMjEyLCAyMjIsIAotICAgIDIxMiwgMjIxLCAyMTIsIDIyMCwgMjEyLCAyMTksIDIxMiwgMjE3LCAyMTIsIDIxNiwgMjEyLCAyMTUsIDIxMiwgMjE0LCAKLSAgICAyMTIsIDIxMywgMjEyLCAyMTIsIDIxMiwgMjExLCAyMTIsIDIxMCwgMjEyLCAyMDksIDIxMiwgMjA4LCAyMTIsIDIwNiwgCi0gICAgMjEyLCAyMDUsIDIxMiwgMjA0LCAyMTIsIDIwMywgMjEyLCAyMDIsIDIxMiwgMjAxLCAyMTIsIDIwMCwgNywgNiwgMSwgMTE1LCAKLSAgICAyLCAyMzEsIDIzMywgMjIsIDI0MiwgMTM2LCA3LCA0LCAxLCAxMTUsIDIsIDIzMSwgMjMzLCAyMiwgMjQyLCAxMzYsIDcsIDYsIAotICAgIDEsIDE2MCwgMiwgNjcsIDIzMiwgMjE0LCA1MSwgNywgNCwgMSwgMTYwLCAyLCA2NywgMjMyLCAyMTQsIDUxLCA3LCA2LCAxLCAKLSAgICAxNjAsIDIsIDY3LCAyMzIsIDIxNCwgMjUyLCA0MywgMjIsIDI0MiwgMTM2LCA3LCA0LCAxLCAxNjAsIDIsIDY3LCAyMzIsIAotICAgIDIxNCwgMjUyLCA0MywgMjIsIDI0MiwgMTM2LCA3LCA2LCAxLCAxNjAsIDIsIDY3LCAyMzIsIDIxNCwgMjUyLCA0MywgMjIsIAotICAgIDE0MiwgNywgNCwgMSwgMTYwLCAyLCA2NywgMjMyLCAyMTQsIDI1MiwgNDMsIDIyLCAxNDIsIDcsIDYsIDEsIDE2MCwgMiwgCi0gICAgMjUwLCAzMSwgMjIsIDIzMSwgMjMyLCA3LCA0LCAxLCAxNjAsIDIsIDI1MCwgMzEsIDIyLCAyMzEsIDIzMiwgNywgNiwgMSwgCi0gICAgMTYwLCAyLCAyNTAsIDMxLCAyMiwgMjUwLCAyMzQsIDcsIDQsIDEsIDE2MCwgMiwgMjUwLCAzMSwgMjIsIDI1MCwgMjM0LCA3LCAKLSAgICA2LCAxLCAyNDAsIDE1NCwgMiwgMjMxLCAyMzMsIDIyLCAyNDIsIDEzNiwgNywgNCwgMSwgMjQwLCAxNTQsIDIsIDIzMSwgCi0gICAgMjMzLCAyMiwgMjQyLCAxMzYsIDcsIDQsIDEsIDI0MCwgMTU0LCAyLCA1OSwgNzcsIDIyLCAxNDIsIDcsIDQsIDEsIDIyOSwgCi0gICAgODAsIDIsIDIxNiwgODksIDQ4LCA3LCA2LCAxLCAxNDQsIDIsIDY3LCAyMzIsIDIxNCwgNTEsIDcsIDQsIDEsIDE0NCwgMiwgCi0gICAgNjcsIDIzMiwgMjE0LCA1MSwgNywgNiwgMSwgMTQ0LCAyLCA2NywgMjMyLCAyMTQsIDI1MiwgNDMsIDIyLCAyNDIsIDEzNiwgCi0gICAgNywgNCwgMSwgMTQ0LCAyLCA2NywgMjMyLCAyMTQsIDI1MiwgNDMsIDIyLCAyNDIsIDEzNiwgNywgNiwgMSwgMTQ0LCAyLCAKLSAgICA2NywgMjMyLCAyMTQsIDI1MiwgNDMsIDIyLCAxNDIsIDcsIDQsIDEsIDE0NCwgMiwgNjcsIDIzMiwgMjE0LCAyNTIsIDQzLCAKLSAgICAyMiwgMTQyLCA3LCA2LCAxLCAyMjIsIDkyLCAyLCA2NywgMjMyLCAyMTQsIDUxLCA3LCA0LCAxLCAyMjIsIDkyLCAyLCA2NywgCi0gICAgMjMyLCAyMTQsIDUxLCA3LCA2LCAxLCAxMDQsIDIsIDIzMSwgMjMzLCAyMiwgMjQyLCAxMzYsIDcsIDQsIDEsIDEwNCwgMiwgCi0gICAgMjMxLCAyMzMsIDIyLCAyNDIsIDEzNiwgNywgNiwgMSwgMTE1LCAyLCAyMjYsIDIyNSwgMjIsIDE0MiwgNywgNCwgMSwgMTE1LCAKLSAgICAyLCAyMjYsIDIyNSwgMjIsIDE0MiwgNywgNiwgMSwgMTE1LCAyLCAyMjYsIDIyNSwgMjIsIDE4MiwgNywgNCwgMSwgMTE1LCAKLSAgICAyLCAyMjYsIDIyNSwgMjIsIDE4MiwgNywgNiwgMSwgMTYwLCAyLCAyMjYsIDIyNSwgMjIsIDE0MiwgNywgNCwgMSwgMTYwLCAKLSAgICAyLCAyMjYsIDIyNSwgMjIsIDE0MiwgNywgNiwgMSwgMTYwLCAyLCAyMjYsIDIyNSwgMjIsIDE4MiwgNywgNCwgMSwgMTYwLCAKLSAgICAyLCAyMjYsIDIyNSwgMjIsIDE4MiwgNywgNiwgMSwgMTYwLCAyLCA1OSwgNzcsIDIyLCAxNDIsIDcsIDQsIDEsIDE2MCwgMiwgCi0gICAgNTksIDc3LCAyMiwgMTQyLCA3LCA2LCAxLCAxNjAsIDIsIDU5LCA3NywgMjIsIDE4MiwgNywgNCwgMSwgMTYwLCAyLCA1OSwgCi0gICAgNzcsIDIyLCAxODIsIDcsIDQsIDEsIDI0MCwgMTU0LCAyLCA1OSwgNzcsIDIyLCAyNDIsIDEzNiwgNywgNCwgMSwgMjQwLCAKLSAgICAxNTQsIDIsIDU5LCA3NywgMjIsIDE4MiwgNywgNiwgMSwgMjQwLCAxNTQsIDIsIDIyNiwgMjI1LCAyMiwgMTQyLCA3LCA0LCAKLSAgICAxLCAyNDAsIDE1NCwgMiwgMjI2LCAyMjUsIDIyLCA1OSwgNzcsIDIyLCAxNDIsIDcsIDYsIDEsIDI0MCwgMTU0LCAyLCAyMjYsIAotICAgIDIyNSwgMjIsIDE4MiwgNywgNCwgMSwgMjQwLCAxNTQsIDIsIDIyNiwgMjI1LCAyMiwgNTksIDc3LCAyMiwgMTgyLCA3LCA2LCAKLSAgICAxLCAyMzUsIDE0NSwgMiwgMTgyLCA3LCA0LCAxLCAyMzUsIDE0NSwgMiwgNTksIDc3LCAyMiwgMTgyLCA3LCA2LCAxLCAyMzMsIAotICAgIDE0OSwgMiwgMTgyLCA3LCA0LCAxLCAyMzMsIDE0OSwgMiwgMTgyLCA3LCA2LCAxLCAyMzIsIDUwLCAyLCAxODIsIDcsIDQsIAotICAgIDEsIDIzMiwgNTAsIDIsIDE4MiwgNywgNiwgMSwgMjIzLCAyMjQsIDIsIDE4MiwgNywgNCwgMSwgMjIzLCAyMjQsIDIsIDE4MiwgCi0gICAgNywgNiwgMSwgMTA0LCAyLCAyMjYsIDIyNSwgMjIsIDE0MiwgNywgNCwgMSwgMTA0LCAyLCAyMjYsIDIyNSwgMjIsIDE0MiwgCi0gICAgNywgNiwgMSwgMTA0LCAyLCAyMjYsIDIyNSwgMjIsIDE4MiwgNywgNCwgMSwgMTA0LCAyLCAyMjYsIDIyNSwgMjIsIDE4MiwgCi0gICAgNywgNiwgMSwgMTA0LCAyLCAyMzEsIDIzMywgMjIsIDE0MiwgNywgNCwgMSwgMTA0LCAyLCAyMzEsIDIzMywgMjIsIDE0MiwgCi0gICAgNywgNiwgMSwgMTA0LCAyLCAyMzEsIDIzMywgMjIsIDE4MiwgNywgNCwgMSwgMTA0LCAyLCAyMzEsIDIzMywgMjIsIDE4MiwgCi0gICAgNywgNCwgMSwgMjU0LCAyNDQsIDIsIDI0MiwgMTM2LCA3LCA0LCAxLCAyMDQsIDE0NCwgMiwgMjQyLCAxMzYsIDcsIDQsIDEsIAotICAgIDIwNCwgMTQ0LCAyLCAxNDIsIDcsIDQsIDEsIDIxNSwgOTQsIDIxNCwgMTA2LCAyLCAyNDIsIDEzNiwgNywgNCwgMSwgMjE1LCAKLSAgICA5NCwgMjE0LCAxMDYsIDIsIDE0MiwgNywgNCwgMSwgMjIxLCAxOTYsIDIsIDI0MiwgMTM2LCA3LCA0LCAxLCAyMjEsIDE5NiwgCi0gICAgMiwgMTQyLCA3LCA0LCAxLCAyNDEsIDUxLCAyMjEsIDE5NiwgMiwgMjQyLCAxMzYsIDcsIDQsIDEsIDI0MSwgNTEsIDIyMSwgCi0gICAgMTk2LCAyLCAxNDIsIDE0NiwgMSwgMjM0LCAxMDksIDM2LCAxMTYsIDIzNSwgMjMsIDM2LCAxMTYsIDIyOSwgNzksIDM2LCAKLSAgICAxMTYsIDI1MSwgNjYsIDM2LCAxMTYsIDIyNywgMTY3LCAzNiwgMTE2LCAyMTUsIDE1OSwgMzYsIDExNiwgMjI4LCAxMTEsIAotICAgIDM2LCAxMTYsIDIxNywgMTUyLCAzNiwgMTE2LCAyMzAsIDI1LCAzNiwgMTE2LCAyMjYsIDEwNSwgMzYsIDExNiwgMTkzLCAzNiwgCi0gICAgMTE2LCAyMTEsIDExNywgMzYsIDExNiwgMTUzLCAzNiwgMTE2LCAxNTYsIDM2LCAxMTYsIDIxNCwgMTA1LCAzNiwgMTE2LCAKLSAgICAyMzIsIDE3NiwgMzYsIDExNiwgMjMyLCAxODUsIDM2LCAxMTYsIDIyMiwgMTgwLCAzNiwgMTE2LCAyMjgsIDkzLCAzNiwgCi0gICAgMTE2LCAyMzUsIDE0NCwgMzYsIDExNiwgMjIwLCAxMDQsIDM2LCAxMTYsIDIxOCwgMjI2LCAzNiwgMTE2LCAyMjIsIDkxLCAKLSAgICAzNiwgMTE2LCAyNDIsIDYwLCAzNiwgMTE2LCAyMzMsIDIzMiwgMzYsIDMsIDIzNSwgMTAsIDM2LCAzLCAyMzQsIDkyLCAzNiwgCi0gICAgMywgMjM0LCA4MywgMzYsIDMsIDIzMywgMjE3LCAzNiwgMywgMjMzLCAxODgsIDM2LCAzLCAyMzQsIDE4MiwgMzYsIDMsIAotICAgIDIzNCwgMTgxLCAzNiwgMywgMjM0LCAyNDYsIDM2LCAzLCAyMzQsIDI4LCAzNiwgMywgMjM0LCAxMCwgMzYsIDMsIDIzNCwgCi0gICAgMTk1LCAzNiwgMywgMjI5LCA3NiwgMzYsIDMsIDIyOSwgMjcsIDM2LCAzLCAyMjksIDIzLCAzNiwgMywgMjI4LCAyNDgsIDM2LCAKLSAgICAzLCAyMjgsIDI0MSwgMzYsIDMsIDIyOSwgNjQsIDM2LCAzLCAyMjksIDYyLCAzNiwgMywgMjI5LCA3MywgMzYsIDMsIDIyOSwgCi0gICAgNCwgMzYsIDMsIDIyOCwgMjU1LCAzNiwgMywgMjI5LCA2NiwgMzYsIDMsIDI1MSwgMzIsIDM2LCAzLCAyNTAsIDUxLCAzNiwgCi0gICAgMywgMjUwLCA0MSwgMzYsIDMsIDI0OSwgMTEyLCAzNiwgMywgMjQ5LCA4MywgMzYsIDMsIDI1MCwgMTkwLCAzNiwgMywgMjUwLCAKLSAgICAxODIsIDM2LCAzLCAyNTEsIDIyLCAzNiwgMywgMjQ5LCAyMzgsIDM2LCAzLCAyNDksIDE3NCwgMzYsIDMsIDI1MCwgMjIyLCAKLSAgICAzNiwgMywgMjI3LCAxNjQsIDM2LCAzLCAyMjcsIDE0OCwgMzYsIDMsIDIyNywgMTQzLCAzNiwgMywgMjI3LCAxMjgsIDM2LCAKLSAgICAzLCAyMjcsIDEyMSwgMzYsIDMsIDIyNywgMTU2LCAzNiwgMywgMjI3LCAxNTUsIDM2LCAzLCAyMjcsIDE2MSwgMzYsIDMsIAotICAgIDIyNywgMTM0LCAzNiwgMywgMjI3LCAxMzIsIDM2LCAzLCAyMjcsIDE1OSwgMzYsIDMsIDIxNSwgMTU1LCAzNiwgMywgMjE1LCAKLSAgICAxMzUsIDM2LCAzLCAyMTUsIDEzNCwgMzYsIDMsIDIxNSwgMTIzLCAzNiwgMywgMjE1LCAxMjAsIDM2LCAzLCAyMTUsIDE1MSwgCi0gICAgMzYsIDMsIDIxNSwgMTUwLCAzNiwgMywgMjE1LCAxNTQsIDM2LCAzLCAyMTUsIDEzMywgMzYsIDMsIDIxNSwgMTMyLCAzNiwgCi0gICAgMywgMjE1LCAxNTMsIDM2LCAzLCAyMjgsIDEwOSwgMzYsIDMsIDIyOCwgOTUsIDM2LCAzLCAyMjgsIDk0LCAzNiwgMywgMjI4LCAKLSAgICA3OCwgMzYsIDMsIDIyOCwgNzcsIDM2LCAzLCAyMjgsIDEwNSwgMzYsIDMsIDIyOCwgMTA0LCAzNiwgMywgMjI4LCAxMDgsIAotICAgIDM2LCAzLCAyMjgsIDgwLCAzNiwgMywgMjI4LCA3OSwgMzYsIDMsIDIyOCwgMTA3LCAzNiwgMywgMjE3LCAxMDEsIDM2LCAzLCAKLSAgICAyMTYsIDExNywgMzYsIDMsIDIxNiwgMTAzLCAzNiwgMywgMjE1LCAxMTgsIDM2LCAzLCAyMTUsIDg1LCAzNiwgMywgMjE3LCAKLSAgICAyMiwgMzYsIDMsIDIxNywgMTEsIDM2LCAzLCAyMTcsIDc5LCAzNiwgMywgMTExLCAzNiwgMywgMjE2LCAxNywgMzYsIDMsIAotICAgIDIxNywgNDEsIDM2LCAzLCAyMjksIDIyNSwgMzYsIDMsIDIyOCwgMjMzLCAzNiwgMywgMjI4LCAyMDgsIDM2LCAzLCAyMjcsIAotICAgIDIzNywgMzYsIDMsIDIyNywgMTc5LCAzNiwgMywgMjI5LCAxMDcsIDM2LCAzLCAyMjksIDEwMywgMzYsIDMsIDIyOSwgMjEyLCAKLSAgICAzNiwgMywgMjI4LCA3NCwgMzYsIDMsIDIyOCwgNjQsIDM2LCAzLCAyMjksIDE4NywgMzYsIDMsIDIyNiwgODksIDM2LCAzLCAKLSAgICAyMjUsIDEwOCwgMzYsIDMsIDIyNSwgNzEsIDM2LCAzLCAyMjQsIDE1MCwgMzYsIDMsIDIyNCwgMTE5LCAzNiwgMywgMjI1LCAKLSAgICAyMjEsIDM2LCAzLCAyMjUsIDIxMSwgMzYsIDMsIDIyNiwgNzEsIDM2LCAzLCAyMjUsIDE2LCAzNiwgMywgMjI0LCAyNDksIAotICAgIDM2LCAzLCAyMjUsIDIzNCwgMzYsIDMsIDIzMSwgMjM3LCAzNiwgMywgMjMwLCAyMzAsIDM2LCAzLCAyMzAsIDIwMSwgMzYsIAotICAgIDMsIDIzMCwgMTAyLCAzNiwgMywgMjMwLCA1NCwgMzYsIDMsIDIzMSwgOTEsIDM2LCAzLCAyMzEsIDgwLCAzNiwgMywgMjMxLCAKLSAgICAyMDMsIDM2LCAzLCAyMzAsIDE2MSwgMzYsIDMsIDIzMCwgMTMyLCAzNiwgMywgMjMxLCAxMzUsIDM2LCAzLCAyMTEsIDEwMywgCi0gICAgMzYsIDMsIDIxMSwgOCwgMzYsIDMsIDIxMCwgMjU1LCAzNiwgMywgMjEwLCAyMTIsIDM2LCAzLCAyMTAsIDE4MSwgMzYsIDMsIAotICAgIDIxMSwgNDcsIDM2LCAzLCAyMTEsIDQ0LCAzNiwgMywgMjExLCA4MiwgMzYsIDMsIDIxMCwgMjQ0LCAzNiwgMywgMjEwLCAKLSAgICAyMjksIDM2LCAzLCAyMTEsIDU1LCAzNiwgMywgMjIzLCAxODQsIDM2LCAzLCAyMjMsIDM1LCAzNiwgMywgMjIyLCAyMzksIAotICAgIDM2LCAzLCAyMjIsIDE0MCwgMzYsIDMsIDIyMiwgMTEyLCAzNiwgMywgMjIzLCAxMjgsIDM2LCAzLCAyMjMsIDEwOCwgMzYsIAotICAgIDMsIDIyMywgMTY2LCAzNiwgMywgMjIyLCAyMTEsIDM2LCAzLCAyMjIsIDE5NywgMzYsIDMsIDIyMywgMTM2LCAzNiwgMywgCi0gICAgMjMzLCAxMzQsIDM2LCAzLCAyMzIsIDI0MSwgMzYsIDMsIDIzMiwgMjI3LCAzNiwgMywgMjMyLCA5OCwgMzYsIDMsIDIzMiwgCi0gICAgNzMsIDM2LCAzLCAyMzMsIDU4LCAzNiwgMywgMjMzLCA1MCwgMzYsIDMsIDIzMywgMTA5LCAzNiwgMywgMjMyLCAxNTYsIDM2LCAKLSAgICAzLCAyMzIsIDEyNywgMzYsIDMsIDIzMywgNzQsIDM2LCAzLCAyMTQsIDI2LCAzNiwgMywgMjEzLCAxNzYsIDM2LCAzLCAyMTMsIAotICAgIDE2MiwgMzYsIDMsIDIxMiwgMTE2LCAzNiwgMywgMjEyLCAxMDksIDM2LCAzLCAyMTMsIDI1NSwgMzYsIDMsIDIxMywgMjUwLCAKLSAgICAzNiwgMywgMjE0LCAyMywgMzYsIDMsIDIxMywgMTM4LCAzNiwgMywgMjEzLCAxMjcsIDM2LCAzLCAyMTQsIDUsIDM2LCAzLCAKLSAgICAyMzIsIDE3NCwgMzYsIDMsIDIzMiwgMTY5LCAzNiwgMywgMjMyLCAxNjgsIDM2LCAzLCAyMzIsIDE2NSwgMzYsIDMsIDIzMiwgCi0gICAgMTY0LCAzNiwgMywgMjMyLCAxNzEsIDM2LCAzLCAyMzIsIDE3MCwgMzYsIDMsIDIzMiwgMTczLCAzNiwgMywgMjMyLCAxNjcsIAotICAgIDM2LCAzLCAyMzIsIDE2NiwgMzYsIDMsIDIzMiwgMTcyLCAzNiwgMywgMjMyLCAxODMsIDM2LCAzLCAyMzIsIDE3OCwgMzYsIAotICAgIDMsIDIzMiwgMTc3LCAzNiwgMywgMjMyLCAxNjEsIDM2LCAzLCAyMzIsIDE2MCwgMzYsIDMsIDIzMiwgMTgwLCAzNiwgMywgCi0gICAgMjMyLCAxNzksIDM2LCAzLCAyMzIsIDE4MiwgMzYsIDMsIDIzMiwgMTYzLCAzNiwgMywgMjMyLCAxNjIsIDM2LCAzLCAyMzIsIAotICAgIDE4MSwgMzYsIDMsIDIyMiwgMTc4LCAzNiwgMywgMjIyLCAxNjcsIDM2LCAzLCAyMjIsIDE2NiwgMzYsIDMsIDIyMiwgMTYwLCAKLSAgICAzNiwgMywgMjIyLCAxNTMsIDM2LCAzLCAyMjIsIDE3NCwgMzYsIDMsIDIyMiwgMTczLCAzNiwgMywgMjIyLCAxNzcsIDM2LCAKLSAgICAzLCAyMjIsIDE2NSwgMzYsIDMsIDIyMiwgMTY0LCAzNiwgMywgMjIyLCAxNzYsIDM2LCAzLCAyMjgsIDkxLCAzNiwgMywgCi0gICAgMjI4LCA4NiwgMzYsIDMsIDIyOCwgODUsIDM2LCAzLCAyMjgsIDgyLCAzNiwgMywgMjI4LCA4MSwgMzYsIDMsIDIyOCwgODgsIAotICAgIDM2LCAzLCAyMjgsIDg3LCAzNiwgMywgMjI4LCA5MCwgMzYsIDMsIDIyOCwgODQsIDM2LCAzLCAyMjgsIDgzLCAzNiwgMywgCi0gICAgMjI4LCA4OSwgMzYsIDMsIDIzNSwgMTQwLCAzNiwgMywgMjM1LCAxMDgsIDM2LCAzLCAyMzUsIDEwMSwgMzYsIDMsIDIzNSwgCi0gICAgNTEsIDM2LCAzLCAyMzUsIDMzLCAzNiwgMywgMjM1LCAxMjYsIDM2LCAzLCAyMzUsIDEyNCwgMzYsIDMsIDIzNSwgMTM1LCAKLSAgICAzNiwgMywgMjM1LCA2OCwgMzYsIDMsIDIzNSwgNTksIDM2LCAzLCAyMzUsIDEyOSwgMzYsIDMsIDIyMCwgOTgsIDM2LCAzLCAKLSAgICAyMjAsIDMyLCAzNiwgMywgMjIwLCAyNywgMzYsIDMsIDIxOSwgMjI1LCAzNiwgMywgMjE5LCAyMTAsIDM2LCAzLCAyMjAsIAotICAgIDYzLCAzNiwgMywgMjIwLCA2MSwgMzYsIDMsIDIyMCwgOTAsIDM2LCAzLCAyMjAsIDcsIDM2LCAzLCAyMjAsIDEsIDM2LCAzLCAKLSAgICAyMjAsIDcxLCAzNiwgMywgMjE4LCAyMjIsIDM2LCAzLCAyMTgsIDE5MiwgMzYsIDMsIDIxOCwgMTg4LCAzNiwgMywgMjE4LCAKLSAgICAxNzksIDM2LCAzLCAyMTgsIDE3NiwgMzYsIDMsIDIxOCwgMTk3LCAzNiwgMywgMjE4LCAxOTYsIDM2LCAzLCAyMTgsIDIyMSwgCi0gICAgMzYsIDMsIDIxOCwgMTg0LCAzNiwgMywgMjE4LCAxODMsIDM2LCAzLCAyMTgsIDE5OSwgMzYsIDMsIDIyMiwgMzEsIDM2LCAzLCAKLSAgICAyMTksIDE5MSwgMzYsIDMsIDIxOSwgMTc1LCAzNiwgMywgMjE4LCA4MywgMzYsIDMsIDIxOCwgNCwgMzYsIDMsIDIyMSwgCi0gICAgMTgxLCAzNiwgMywgMjIxLCAxNzAsIDM2LCAzLCAyMjIsIDE3LCAzNiwgMywgMjE5LCA1OCwgMzYsIDMsIDIxOSwgNDAsIDM2LCAKLSAgICAzLCAyMjEsIDIxOSwgMzYsIDMsIDI0MiwgNDYsIDM2LCAzLCAyNDEsIDE4MCwgMzYsIDMsIDI0MSwgMTYxLCAzNiwgMywgCi0gICAgMjQwLCAyMjIsIDM2LCAzLCAyNDAsIDIwMiwgMzYsIDMsIDI0MSwgMjM4LCAzNiwgMywgMjQxLCAyMjAsIDM2LCAzLCAyNDIsIAotICAgIDM2LCAzNiwgMywgMjQxLCA2OCwgMzYsIDMsIDI0MSwgNTMsIDM2LCAzLCAyNDEsIDI0NiwgMzYsIDMsIDIzMywgMjMxLCAzNiwgCi0gICAgMywgMjMzLCAyMzAsIDM2LCAzLCAyMzMsIDIyNSwgMzYsIDMsIDIzMywgMjI0LCAzNiwgMywgMjMzLCAyMjEsIDM2LCAzLCAKLSAgICAyMzMsIDIyMCwgMzYsIDMsIDIzMywgMjI3LCAzNiwgMywgMjMzLCAyMjYsIDM2LCAzLCAyMzMsIDIyOSwgMzYsIDMsIDIzMywgCi0gICAgMjIzLCAzNiwgMywgMjMzLCAyMjIsIDM2LCAzLCAyMzMsIDIyOCwgMzYsIDMsIDIxOSwgMjMxLCAxNzUsIDExNiwgNSwgMjExLCAKLSAgICA2OCwgMTc1LCAxMTYsIDUsIDIyMywgMTU1LCAxNzUsIDExNiwgNSwgMjIzLCA3OCwgOTgsIDEsIDIxNSwgMjgsIDY5LCAxMTYsIAotICAgIDUsIDI0OSwgMjMzLCAxNzYsIDY5LCAxMTYsIDUsIDI0OSwgMjMzLCAyMzQsIDEzMiwgNjksIDExNiwgNSwgMjQ5LCAyMzMsIAotICAgIDIzNCwgMjgsIDY5LCAxMTYsIDUsIDI0OSwgMjMzLCAyMzQsIDEwNSwgNjksIDExNiwgNSwgMjQ5LCAyMzMsIDIyOSwgNCwgCi0gICAgNjksIDExNiwgNSwgMjQ5LCAyMzMsIDI1MSwgMzMsIDY5LCAxMTYsIDUsIDI0OSwgMjMzLCAyNTAsIDE1NywgNjksIDExNiwgCi0gICAgNSwgMjQ5LCAyMzMsIDI0OSwgMjM4LCA2OSwgMTE2LCA1LCAyNDksIDIzMywgMjUwLCA4NiwgNjksIDExNiwgNSwgMjQ5LCAKLSAgICAyMzMsIDIyNywgMTM0LCA2OSwgMTE2LCA1LCAyNDksIDIzMywgMjQ4LCAyMjEsIDY5LCAxMTYsIDUsIDI0OSwgMjMzLCAyMTUsIAotICAgIDE0NCwgNjksIDExNiwgNSwgMjQ5LCAyMzMsIDI0NywgMTQ1LCA2OSwgMTE2LCA1LCAyNDksIDIzMywgMjE1LCAxMzksIDY5LCAKLSAgICAxMTYsIDUsIDI0OSwgMjMzLCAxOTcsIDY5LCAxMTYsIDUsIDI0OSwgMjMzLCAyMTcsIDEwNSwgNjksIDExNiwgNSwgMjQ5LCAKLSAgICAyMzMsIDIxNiwgMjA4LCA2OSwgMTE2LCA1LCAyNDksIDIzMywgMTExLCA2OSwgMTE2LCA1LCAyNDksIDIzMywgMjE2LCAxNTYsIAotICAgIDY5LCAxMTYsIDUsIDI0OSwgMjMzLCAyMjgsIDc0LCA2OSwgMTE2LCA1LCAyNDksIDIzMywgMjUyLCAxOTEsIDY5LCAxMTYsIAotICAgIDUsIDI0OSwgMjMzLCAyMjUsIDE0NywgNjksIDExNiwgNSwgMjQ5LCAyMzMsIDIyNSwgMTYsIDY5LCAxMTYsIDUsIDI0OSwgCi0gICAgMjMzLCAyMjUsIDEyMSwgNjksIDExNiwgNSwgMjQ5LCAyMzMsIDIzMCwgMTYxLCA2OSwgMTE2LCA1LCAyNDksIDIzMywgMjEwLCAKLSAgICAyNDQsIDY5LCAxMTYsIDUsIDI0OSwgMjMzLCAyMjIsIDIxMSwgNjksIDExNiwgNSwgMjQ5LCAyMzMsIDIzMiwgMTU2LCA2OSwgCi0gICAgMTE2LCA1LCAyNDksIDIzMywgMjEzLCAxMzgsIDY5LCAxMTYsIDUsIDI0OSwgMjMzLCAyMjAsIDEwMiwgNjksIDExNiwgNSwgCi0gICAgMjQ5LCAyMzMsIDIxOCwgMjIzLCA2OSwgMTE2LCA1LCAyNDksIDIzMywgMjA2LCA2OSwgMTE2LCA1LCAyNDksIDIzMywgMTYyLCAKLSAgICA2OSwgMTE2LCA1LCAyNDksIDIzMywgMjMzLCAxMzUsIDY5LCAyNSwgNSwgMjQ5LCAyMzMsIDIyNCwgODgsIDY5LCAyMzUsIAotICAgIDI0MywgMjUsIDUsIDI0OSwgMjMzLCAyMjQsIDMwLCA2OSwgMjM1LCAyNDMsIDI1LCA1LCAyNDksIDIzMywgMjIyLCAxMDAsIAotICAgIDY5LCAyMzUsIDI0MywgMjUsIDUsIDI0OSwgMjMzLCAyMjIsIDkzLCA2OSwgMjM1LCAyNDMsIDI1LCA1LCAyNDksIDIzMywgCi0gICAgMjI0LCA2OSwgNjksIDI1LCA1LCAyMjYsIDIwNCwgNjksIDI1LCA1LCAyNTUsIDM0LCAxNDEsIDEsIDI1MSwgMjU1LCAyMjksIAotICAgIDc3LCAxNDEsIDEsIDI1MSwgMjU1LCAyMjksIDI3LCAxNDEsIDEsIDI1MSwgMjU1LCAyMjgsIDI0OCwgMTQxLCAxLCAyNTEsIAotICAgIDI1NSwgMjI5LCA2NCwgMTQxLCAxLCAyNTEsIDI1NSwgMjI5LCA0LCA1NiwgMSwgMjUxLCAyNTUsIDIyOSwgNzcsIDU2LCAxLCAKLSAgICAyNTEsIDI1NSwgMjI5LCAyNywgNTYsIDEsIDI1MSwgMjU1LCAyMjgsIDI0OCwgNTYsIDEsIDI1MSwgMjU1LCAyMjksIDY0LCAKLSAgICA1NiwgMSwgMjUxLCAyNTUsIDIyOSwgNCwgNTYsIDEsIDI1NCwgMTk0LCAyNTAsIDE5MCwgNTYsIDEsIDI1NCwgMTk0LCAyMTUsIAotICAgIDExOCwgNTYsIDEsIDI1NCwgMTk0LCAxMTEsIDU2LCAxLCAyNTQsIDE5NCwgMjI2LCAxMDUsIDU4LCAxLCAyNDUsIDIwLCAKLSAgICAyNDUsIDE5LCAyNDksIDE4MiwgMTM4LCAxMzAsIDU4LCAxLCAyNDUsIDE5LCAyNDUsIDIwLCAyNDksIDE4MiwgMTM4LCAxMzAsIAorICAgIDQ1LCAxMDgsIDE2LCAzMSwgMjI1LCAxMjgsIDIxOCwgNDUsIDEwOCwgMTYsIDMxLCA4NSwgMjE4LCA0NSwgMTA4LCAxNiwgCisgICAgMzEsIDIzMSwgNjAsIDIxOCwgNzIsIDEwOCwgMTYsIDMxLCAyMzEsIDYwLCAyMTgsIDcxLCAxMDgsIDE2LCAzMSwgMjMxLCAKKyAgICA2MCwgMjE4LCA3MCwgMTA4LCAxNiwgMzEsIDI1MCwgNDYsIDEwOCwgMTYsIDMxLCAyMjIsIDMsIDEwOCwgMTYsIDMxLCAyMjgsIAorICAgIDE5MywgMTA4LCAxNiwgMzEsIDIxMywgMTQxLCAxMDgsIDE2LCAzMSwgMjEzLCAxNDAsIDEwOCwgMTYsIDMxLCAyMjIsIDIwNiwgCisgICAgMjIyLCAzLCAxMDgsIDE2LCAzMSwgMjIyLCAyMDYsIDIyMiwgMiwgMTA4LCAxNiwgMzEsIDI0MiwgMTczLCAxMDgsIDE2LCAKKyAgICAzMSwgMjE5LCAxNjgsIDEwOCwgMTYsIDMxLCAyMzUsIDE4NCwgMjI2LCAxNTcsIDEwOCwgMTYsIDMxLCAyMzUsIDE4NCwgCisgICAgMjI2LCAxNTYsIDEwOCwgMTYsIDMxLCAyNDksIDE0MiwgNjQsIDIzNSwgMTgzLCAxMDgsIDE2LCAzMSwgMjIzLCAxMDQsIDY0LCAKKyAgICAyMzUsIDE4MywgMTA4LCAxNiwgMzEsIDI0OSwgMTc2LCAyMjYsIDE1NywgMTA4LCAxNiwgMzEsIDIzNSwgMTgyLCAyMjYsIAorICAgIDE1NywgMTA4LCAxNiwgMzEsIDIxOCwgNzMsIDY0LCAyNDksIDE3NSwgMTA4LCAxNiwgMzEsIDI0OSwgMTQyLCA2NCwgMjQ5LCAKKyAgICAxNzUsIDEwOCwgMTYsIDMxLCAyNDksIDE0MiwgNjQsIDI0OSwgMTc0LCAxMDgsIDE2LCAzMSwgMjQ5LCAxNzYsIDI1NCwgOTEsIAorICAgIDEwOCwgMTYsIDMxLCAyMjIsIDQsIDY0LCAyNDksIDE3NiwgMjU0LCA5MSwgMTA4LCAxNiwgMzEsIDIxOCwgNzMsIDY0LCAKKyAgICAyMjIsIDQsIDY0LCAyNDksIDE3NSwgMTA4LCAxNiwgMzEsIDIxMywgMjQzLCAxMDgsIDE2LCAzMSwgMjE2LCA4NSwgMjI2LCAKKyAgICAxNTcsIDEwOCwgMTYsIDMxLCAyMzMsIDYzLCAyMjYsIDE1NywgMTA4LCAxNiwgMzEsIDI1NCwgOTAsIDIyNiwgMTU3LCAxMDgsIAorICAgIDE2LCAzMSwgMjE4LCA3MywgNjQsIDI1NCwgODksIDEwOCwgMTYsIDMxLCAyMjIsIDQsIDY0LCAyNTQsIDg5LCAxMDgsIDE2LCAKKyAgICAzMSwgMjE4LCA3MywgNjQsIDIyMiwgNCwgNjQsIDI1NCwgODksIDEwOCwgMTYsIDMxLCAyMTMsIDE1OCwgNjQsIDI1NCwgODksIAorICAgIDEwOCwgMTYsIDMxLCAyMjMsIDEwNCwgNjQsIDI1NCwgODksIDEwOCwgMTYsIDMxLCAyMjMsIDEwNCwgNjQsIDI1NCwgODgsIAorICAgIDEwOCwgMTYsIDMxLCAyMjMsIDEwMywgMTA4LCAxNiwgMzEsIDIyMywgMTAyLCAxMDgsIDE2LCAzMSwgMjIzLCAxMDEsIDEwOCwgCisgICAgMTYsIDMxLCAyMjMsIDEwMCwgMTA4LCAxNiwgMzEsIDI1NCwgMTY2LCAxMDgsIDE2LCAzMSwgMjU0LCAxNjUsIDEwOCwgMTYsIAorICAgIDMxLCAyMzEsIDE2OCwgMTA4LCAxNiwgMzEsIDIyMiwgOSwgMTA4LCAxNiwgMzEsIDI1MywgMjU0LCAxMDgsIDE2LCAzMSwgCisgICAgMjIzLCAxMjgsIDEwOCwgMTYsIDMxLCAyMjMsIDEyNywgMTA4LCAxNiwgMzEsIDI1MywgMTkxLCAxMDgsIDE2LCAzMSwgMjUxLCAKKyAgICAyMzcsIDIyNiwgMTU3LCAxMDgsIDE2LCAzMSwgMjE3LCA1MCwgMTA4LCAxNiwgMzEsIDIxNywgNDksIDEwOCwgMTYsIDMxLCAKKyAgICAyMjQsIDExLCAyMzIsIDIyOCwgMTA4LCAxNiwgMzEsIDI1MSwgMTkxLCAxMDgsIDE2LCAzMSwgMjUxLCAxOTAsIDEwOCwgMTYsIAorICAgIDMxLCAyNTEsIDE4OSwgMTA4LCAxNiwgMzEsIDI1NCwgMTQ2LCAxMDgsIDE2LCAzMSwgMjI2LCAyMjIsIDEwOCwgMTYsIDMxLCAKKyAgICAyMTgsIDI1MCwgMTA4LCAxNiwgMzEsIDIxNiwgODMsIDEwOCwgMTYsIDMxLCAyNDIsIDEwMywgMTA4LCAxNiwgMzEsIDIxMiwgCisgICAgMjgsIDEwOCwgMTYsIDMxLCAyMjQsIDIyOSwgMTA4LCAxNiwgMzEsIDI1MSwgMjIsIDEwOCwgMTYsIDMxLCAyMTUsIDg2LCAKKyAgICAxMDgsIDE2LCAzMSwgMjUwLCAyNTQsIDIzMCwgMTI3LCAxMDgsIDE2LCAzMSwgMjIxLCAyMDQsIDY0LCAyMzUsIDYxLCAxMDgsIAorICAgIDE2LCAzMSwgMjUxLCAzMywgMTA4LCAxNiwgMzEsIDIxNSwgMjIwLCAxMDgsIDE2LCAzMSwgMjE4LCAxNTYsIDIxNSwgMjIwLCAKKyAgICAxMDgsIDE2LCAzMSwgMjMyLCAxNTQsIDEwOCwgMTYsIDMxLCAyMTksIDU4LCAxMDgsIDE2LCAzMSwgMjE0LCAxNDIsIDEwOCwgCisgICAgMTYsIDMxLCAyNDAsIDI1MywgMjQ2LCA3MiwgMTA4LCAxNiwgMzEsIDI1MywgMjM1LCAxMDgsIDE2LCAzMSwgMjI0LCAyMzcsIAorICAgIDI1MywgMjM1LCAxMDgsIDE2LCAzMSwgMjUxLCAxNTAsIDEwOCwgMTYsIDMxLCAyMjQsIDIyOCwgMjUxLCAxNTAsIDEwOCwgCisgICAgMTYsIDMxLCAyNTQsIDE0MywgMTA4LCAxNiwgMzEsIDIxOCwgMTE5LCAyMTgsIDI3LCAyMTgsIDExOCwgMTA4LCAxNiwgMzEsIAorICAgIDIxOCwgMTE5LCAyMTgsIDI3LCAyMTgsIDExNywgMTA4LCAxNiwgMzEsIDIxOCwgNjksIDEwOCwgMTYsIDMxLCAyMjQsIDIwMywgCisgICAgMTA4LCAxNiwgMzEsIDI0NywgMTg5LCAxMDgsIDE2LCAzMSwgMjQ3LCAxOTEsIDEwOCwgMTYsIDMxLCAyNDcsIDE5MCwgMTA4LCAKKyAgICAxNiwgMzEsIDIyNCwgMTM0LCAxMDgsIDE2LCAzMSwgMjI0LCAxMjMsIDEwOCwgMTYsIDMxLCAyNDksIDEzMCwgMTA4LCAxNiwgCisgICAgMzEsIDI0OSwgMTI5LCAxMDgsIDE2LCAzMSwgMjQ5LCAxMjgsIDEwOCwgMTYsIDMxLCAyNDksIDEyNywgMTA4LCAxNiwgMzEsIAorICAgIDI0OSwgMTI2LCAxMDgsIDE2LCAzMSwgMjU0LCAxNzgsIDEwOCwgMTYsIDMxLCAyNTIsIDEyNywgNjQsIDIzMSwgMTU0LCAKKyAgICAxMDgsIDE2LCAzMSwgMjUyLCAxMjcsIDY0LCAyMTQsIDE3LCAxMDgsIDE2LCAzMSwgMjIzLCA2MCwgMTA4LCAxNiwgMzEsIAorICAgIDI0MCwgMjQ1LCAxMDgsIDE2LCAzMSwgMjI4LCAyMTcsIDEwOCwgMTYsIDMxLCAyNDgsIDE1MywgMTA4LCAxNiwgMzEsIDIzMCwgCisgICAgMTM5LCAxMDgsIDE2LCAzMSwgMTYzLCAyNDYsIDEwMiwgMTA4LCAxNiwgMzEsIDE2MywgMjI2LCAxMzYsIDEwLCAxNCwgMjQwLCAKKyAgICAxMDksIDEwLCAxNCwgMjQwLCAxMDgsIDEwLCAxNCwgMjQwLCAxMDcsIDEwLCAxNCwgMjQwLCAxMDYsIDEwLCAxNCwgMjQwLCAKKyAgICAxMDUsIDEwLCAxNCwgMjQwLCAxMDQsIDEwLCAxNCwgMjQwLCAxMDMsIDEwLCAxNCwgMjQwLCAxMDIsIDEwLCAxNCwgMjQwLCAKKyAgICAxMDEsIDEwLCAxNCwgMjQwLCAxMDAsIDEwLCAxNCwgMjQwLCA5OSwgMTAsIDE0LCAyNDAsIDk4LCAxMCwgMTQsIDI0MCwgOTcsIAorICAgIDEwLCAxNCwgMjQwLCA5NiwgMTAsIDE0LCAyNDAsIDk1LCAxMCwgMTQsIDI0MCwgOTQsIDEwLCAxNCwgMjQwLCA5MywgMTAsIAorICAgIDE0LCAyNDAsIDkyLCAxMCwgMTQsIDI0MCwgOTEsIDEwLCAxNCwgMjQwLCA5MCwgMTAsIDE0LCAyNDAsIDg5LCAxMCwgMTQsIAorICAgIDI0MCwgODgsIDEwLCAxNCwgMjQwLCA4NywgMTAsIDE0LCAyNDAsIDg2LCAxMCwgMTQsIDI0MCwgODUsIDEwLCAxNCwgMjQwLCAKKyAgICA4NCwgMTAsIDE0LCAyNDAsIDgzLCAxMCwgMTQsIDI0MCwgODIsIDEwLCAxNCwgMjQwLCA4MSwgMTAsIDE0LCAyNDAsIDgwLCAKKyAgICAxMCwgMTQsIDI0MCwgNzksIDEwLCAxNCwgMjQwLCA3OCwgMTAsIDE0LCAyNDAsIDc3LCAxMCwgMTQsIDI0MCwgNzYsIDEwLCAKKyAgICAxNCwgMjQwLCA3NSwgMTAsIDE0LCAyNDAsIDc0LCAxMCwgMTQsIDI0MCwgNzMsIDEwLCAxNCwgMjQwLCA3MiwgMTAsIDE0LCAKKyAgICAyNDAsIDcxLCAxMCwgMTQsIDI0MCwgNzAsIDEwLCAxNCwgMjQwLCA2OSwgMTAsIDE0LCAyNDAsIDY4LCAxMCwgMTQsIDI0MCwgCisgICAgNjcsIDEwLCAxNCwgMjQwLCA2NiwgMTAsIDE0LCAyNDAsIDY1LCAxMCwgMTQsIDI0MCwgNjQsIDEwLCAxNCwgMjQwLCA2MywgCisgICAgMTAsIDE0LCAyNDAsIDYyLCAxMCwgMTQsIDI0MCwgNjEsIDEwLCAxNCwgMjQwLCA2MCwgMTAsIDE0LCAyNDAsIDU5LCAxMCwgCisgICAgMTQsIDI0MCwgNTgsIDEwLCAxNCwgMjQwLCA1NywgMTAsIDE0LCAyNDAsIDU2LCAxMCwgMTQsIDI0MCwgNTUsIDEwLCAxNCwgCisgICAgMjQwLCA1NCwgMTAsIDE0LCAyNDAsIDUzLCAxMCwgMTQsIDI0MCwgNTIsIDEwLCAxNCwgMjQwLCA1MSwgMTAsIDE0LCAyNDAsIAorICAgIDUwLCAxMCwgMTQsIDI0MCwgNDksIDEwLCAxNCwgMjQwLCA0OCwgMTAsIDE0LCAyNDAsIDQ3LCAxMCwgMTQsIDI0MCwgNDYsIAorICAgIDEwLCAxNCwgMjQwLCA0NSwgMTAsIDE0LCAyNDAsIDQ0LCAxMCwgMTQsIDI0MCwgNDMsIDEwLCAxNCwgMjQwLCA0MiwgMTAsIAorICAgIDE0LCAyNDAsIDQxLCAxMCwgMTQsIDI0MCwgNDAsIDEwLCAxNCwgMjQwLCAzOSwgMTAsIDE0LCAyNDAsIDM4LCAxMCwgMTQsIAorICAgIDI0MCwgMzcsIDEwLCAxNCwgMjQwLCAzNiwgMTAsIDE0LCAyNDAsIDM1LCAxMCwgMTQsIDI0MCwgMzQsIDEwLCAxNCwgMjQwLCAKKyAgICAzMywgMTAsIDE0LCAyNDAsIDMyLCAxMCwgMTQsIDI0MCwgMzEsIDEwLCAxNCwgMjQwLCAzMCwgMTAsIDE0LCAyNDAsIDI5LCAKKyAgICAxMCwgMTQsIDI0MCwgMjgsIDEwLCAxNCwgMjQwLCAyNywgMTAsIDE0LCAyNDAsIDI2LCAxMCwgMTQsIDI0MCwgMjUsIDEwLCAKKyAgICAxNCwgMjQwLCAyNCwgMTAsIDE0LCAyNDAsIDIzLCAxMCwgMTQsIDI0MCwgMjIsIDEwLCAxNCwgMjQwLCAyMSwgMTAsIDE0LCAKKyAgICAyNDAsIDIwLCAxMCwgMTQsIDI0MCwgMTksIDEwLCAxNCwgMjQwLCAxOCwgMTAsIDE0LCAyNDAsIDE3LCAxMCwgMTQsIDI0MCwgCisgICAgMTYsIDEwLCAxNCwgMjQwLCAxNSwgMTAsIDE0LCAyNDAsIDE0LCAxMCwgMTQsIDI0MCwgMTMsIDEwLCAxNCwgMjQwLCAxMiwgCisgICAgMTAsIDE0LCAyNDAsIDExLCAxMCwgMTQsIDI0MCwgMTAsIDEwLCAxNCwgMjQwLCA5LCAxMCwgMTQsIDI0MCwgOCwgMTAsIDE0LCAKKyAgICAyNDAsIDcsIDEwLCAxNCwgMjQwLCA2LCAxMCwgMTQsIDI0MCwgNSwgMTAsIDE0LCAyNDAsIDQsIDEwLCAxNCwgMjQwLCAzLCAKKyAgICAxMCwgMTQsIDI0MCwgMiwgMTAsIDE0LCAyNDAsIDEsIDEwLCAxNCwgMjQwLCAwLCAxMCwgMTQsIDIzOSwgMjU1LCAxMCwgMTQsIAorICAgIDIzOSwgMjU0LCAxMCwgMTQsIDIzOSwgMjUzLCAxMCwgMTQsIDIzOSwgMjUyLCAxMCwgMTQsIDIzOSwgMjUxLCAxMCwgMTQsIAorICAgIDIzOSwgMjUwLCAxMCwgMTQsIDIzOSwgMjQ5LCAxMCwgMTQsIDIzOSwgMjQ4LCAxMCwgMTQsIDIzOSwgMjQ3LCAxMCwgMTQsIAorICAgIDIzOSwgMjQ2LCAxMCwgMTQsIDIzOSwgMjQ1LCAxMCwgMTQsIDIzOSwgMjQ0LCAxMCwgMTQsIDIzOSwgMjQzLCAxMCwgMTQsIAorICAgIDIzOSwgMjQyLCAxMCwgMTQsIDIzOSwgMjQxLCAxMCwgMTQsIDIzOSwgMjQwLCAxMCwgMTQsIDIzOSwgMjM5LCAxMCwgMTQsIAorICAgIDIzOSwgMjM4LCAxMCwgMTQsIDIzOSwgMjM3LCAxMCwgMTQsIDIzOSwgMjM2LCAxMCwgMTQsIDIzOSwgMjM1LCAxMCwgMTQsIAorICAgIDIzOSwgMjM0LCAxMCwgMTQsIDIzOSwgMjMzLCAxMCwgMTQsIDIzOSwgMjMyLCAxMCwgMTQsIDIzOSwgMjMxLCAxMCwgMTQsIAorICAgIDIzOSwgMjMwLCAxMCwgMTQsIDIzOSwgMjI5LCAxMCwgMTQsIDIzOSwgMjI4LCAxMCwgMTQsIDIzOSwgMjI3LCAxMCwgMTQsIAorICAgIDIzOSwgMjI2LCAxMCwgMTQsIDIzOSwgMjI1LCAxMCwgMTQsIDIzOSwgMjI0LCAxMCwgMTQsIDIzOSwgMjIzLCAxMCwgMTQsIAorICAgIDIzOSwgMjIyLCAxMCwgMTQsIDIzOSwgMjIxLCAxMCwgMTQsIDIzOSwgMjIwLCAxMCwgMTQsIDIzOSwgMjE5LCAxMCwgMTQsIAorICAgIDIzOSwgMjE4LCAxMCwgMTQsIDIzOSwgMjE3LCAxMCwgMTQsIDIzOSwgMjE2LCAxMCwgMTQsIDIzOSwgMjE1LCAxMCwgMTQsIAorICAgIDIzOSwgMjE0LCAxMCwgMTQsIDIzOSwgMjEzLCAxMCwgMTQsIDIzOSwgMjEyLCAxMCwgMTQsIDIzOSwgMjExLCAxMCwgMTQsIAorICAgIDIzOSwgMjEwLCAxMCwgMTQsIDIzOSwgMjA5LCAxMCwgMTQsIDIzOSwgMjA4LCAxMCwgMTQsIDIzOSwgMjA3LCAxMCwgMTQsIAorICAgIDIzOSwgMjA2LCAxMCwgMTQsIDIzOSwgMjA1LCAxMCwgMTQsIDIzOSwgMjA0LCAxMCwgMTQsIDIzOSwgMjAzLCAxMCwgMTQsIAorICAgIDIzOSwgMjAyLCAxMCwgMTQsIDIzOSwgMjAxLCAxMCwgMTQsIDIzOSwgMjAwLCAxMCwgMTQsIDIzOSwgMTk5LCAxMCwgMTQsIAorICAgIDIzOSwgMTk4LCAxMCwgMTQsIDIzOSwgMTk3LCAxMCwgMTQsIDIzOSwgMTk2LCAxMCwgMTQsIDIzOSwgMTk1LCAxMCwgMTQsIAorICAgIDIzOSwgMTk0LCAxMCwgMTQsIDIzOSwgMTkzLCAxMCwgMTQsIDIzOSwgMTkyLCAxMCwgMTQsIDIzOSwgMTkxLCAxMCwgMTQsIAorICAgIDIzOSwgMTkwLCAxMCwgMTQsIDIzOSwgMTg5LCAxMCwgMTQsIDIzOSwgMTg4LCAxMCwgMTQsIDIzOSwgMTg3LCAxMCwgMTQsIAorICAgIDIzOSwgMTg2LCAxMCwgMTQsIDIzOSwgMTg1LCAxMCwgMTQsIDIzOSwgMTg0LCAxMCwgMTQsIDIzOSwgMTgzLCAxMCwgMTQsIAorICAgIDIzOSwgMTgyLCAxMCwgMTQsIDIzOSwgMTgxLCAxMCwgMTQsIDIzOSwgMTgwLCAxMCwgMTQsIDIzOSwgMTc5LCAxMCwgMTQsIAorICAgIDIzOSwgMTc4LCAxMCwgMTQsIDIzOSwgMTc3LCAxMCwgMTQsIDIzOSwgMTc2LCAxMCwgMTQsIDIzOSwgMTc1LCAxMCwgMTQsIAorICAgIDIzOSwgMTc0LCAxMCwgMTQsIDIzOSwgMTczLCAxMCwgMTQsIDIzOSwgMTcyLCAxMCwgMTQsIDIzOSwgMTcxLCAxMCwgMTQsIAorICAgIDIzOSwgMTcwLCAxMCwgMTQsIDIzOSwgMTY5LCAxMCwgMTQsIDIzOSwgMTY4LCAxMCwgMTQsIDIzOSwgMTY3LCAxMCwgMTQsIAorICAgIDIzOSwgMTY2LCAxMCwgMTQsIDIzOSwgMTY1LCAxMCwgMTQsIDIzOSwgMTY0LCAxMCwgMTQsIDIzOSwgMTYzLCAxMCwgMTQsIAorICAgIDIzOSwgMTYyLCAxMCwgMTQsIDIzOSwgMTYxLCAxMCwgMTQsIDIzOSwgMTYwLCAxMCwgMTQsIDIzOSwgMTU5LCAxMCwgMTQsIAorICAgIDIzOSwgMTU4LCAxMCwgMTQsIDIzOSwgMTU3LCAxMCwgMTQsIDIzOSwgMTU2LCAxMCwgMTQsIDIzOSwgMTU1LCAxMCwgMTQsIAorICAgIDIzOSwgMTU0LCAxMCwgMTQsIDIzOSwgMTUzLCAxMCwgMTQsIDIzOSwgMTUyLCAxMCwgMTQsIDIzOSwgMTUxLCAxMCwgMTQsIAorICAgIDIzOSwgMTUwLCAxMCwgMTQsIDIzOSwgMTQ5LCAxMCwgMTQsIDIzOSwgMTQ4LCAxMCwgMTQsIDIzOSwgMTQ3LCAxMCwgMTQsIAorICAgIDIzOSwgMTQ2LCAxMCwgMTQsIDIzOSwgMTQ1LCAxMCwgMTQsIDIzOSwgMTQ0LCAxMCwgMTQsIDIzOSwgMTQzLCAxMCwgMTQsIAorICAgIDIzOSwgMTQyLCAxMCwgMTQsIDIzOSwgMTQxLCAxMCwgMTQsIDIzOSwgMTQwLCAxMCwgMTQsIDIzOSwgMTM5LCAxMCwgMTQsIAorICAgIDIzOSwgMTM4LCAxMCwgMTQsIDIzOSwgMTM3LCAxMCwgMTQsIDIzOSwgMTM2LCAxMCwgMTQsIDIzOSwgMTM1LCAxMCwgMTQsIAorICAgIDIzOSwgMTM0LCAxMCwgMTQsIDIzOSwgMTMzLCAxMCwgMTQsIDIzOSwgMTMyLCAxMCwgMTQsIDIzOSwgMTMxLCAxMCwgMTQsIAorICAgIDIzOSwgMTMwLCAxMCwgMTQsIDIzOSwgMTI5LCAxMCwgMTQsIDIzOSwgMTI4LCAxMCwgMTQsIDIzOSwgMTI3LCAxMCwgMTQsIAorICAgIDIzOSwgMTI2LCAxMCwgMTQsIDIzOSwgMTI1LCAxMCwgMTQsIDIzOSwgMTI0LCAxMCwgMTQsIDIzOSwgMTIzLCAxMCwgMTQsIAorICAgIDIzOSwgMTIyLCAxMCwgMTQsIDIzOSwgMTIxLCAxMCwgMTQsIDIzOSwgMTIwLCAxMCwgMTQsIDIzOSwgMTE5LCAxMCwgMTQsIAorICAgIDIzOSwgMTE4LCAxMCwgMTQsIDIzOSwgMTE3LCAxMCwgMTQsIDIzOSwgMTE2LCAxMCwgMTQsIDIzOSwgMTE1LCAxMCwgMTQsIAorICAgIDIzOSwgMTE0LCAxMCwgMTQsIDIzOSwgMTEzLCAxMCwgMTQsIDIzOSwgMTEyLCAxMCwgMTQsIDIzOSwgMTExLCAxMCwgMTQsIAorICAgIDIzOSwgMTEwLCAxMCwgMTQsIDIzOSwgMTA5LCAxMCwgMTQsIDIzOSwgMTA4LCAxMCwgMTQsIDIzOSwgMTA3LCAxMCwgMTQsIAorICAgIDIzOSwgMTA2LCAxMCwgMTQsIDIzOSwgMTA1LCAxMCwgMTQsIDIzOSwgMTA0LCAxMCwgMTQsIDIzOSwgMTAzLCAxMCwgMTQsIAorICAgIDIzOSwgMTAyLCAxMCwgMTQsIDIzOSwgMTAxLCAxMCwgMTQsIDIzOSwgMTAwLCAxMCwgMTQsIDIzOSwgOTksIDEwLCAxNCwgCisgICAgMjM5LCA5OCwgMTAsIDE0LCAyMzksIDk3LCAxMCwgMTQsIDIzOSwgOTYsIDEwLCAxNCwgMjM5LCA5NSwgMTAsIDE0LCAyMzksIAorICAgIDk0LCAxMCwgMTQsIDIzOSwgOTMsIDEwLCAxNCwgMjM5LCA5MiwgMTAsIDE0LCAyMzksIDkxLCAxMCwgMTQsIDIzOSwgOTAsIAorICAgIDEwLCAxNCwgMjM5LCA4OSwgMTAsIDE0LCAyMzksIDg4LCAxMCwgMTQsIDIzOSwgODcsIDEwLCAxNCwgMjM5LCA4NiwgMTAsIAorICAgIDE0LCAyMzksIDg1LCAxMCwgMTQsIDIzOSwgODQsIDEwLCAxNCwgMjM5LCA4MywgMTAsIDE0LCAyMzksIDgyLCAxMCwgMTQsIAorICAgIDIzOSwgODEsIDEwLCAxNCwgMjM5LCA4MCwgMTAsIDE0LCAyMzksIDc5LCAxMCwgMTQsIDIzOSwgNzgsIDEwLCAxNCwgMjM5LCAKKyAgICA3NywgMTAsIDE0LCAyMzksIDc2LCAxMCwgMTQsIDIzOSwgNzUsIDEwLCAxNCwgMjM5LCA3NCwgMTAsIDE0LCAyMzksIDczLCAKKyAgICAxMCwgMTQsIDIzOSwgNzIsIDEwLCAxNCwgMjM5LCA3MSwgMTAsIDE0LCAyMzksIDcwLCAxMCwgMTQsIDIzOSwgNjksIDEwLCAKKyAgICAxNCwgMjM5LCA2OCwgMTAsIDE0LCAyMzksIDY3LCAxMCwgMTQsIDIzOSwgNjYsIDEwLCAxNCwgMjM5LCA2NSwgMTAsIDE0LCAKKyAgICAyMzksIDY0LCAxMCwgMTQsIDIzOSwgNjMsIDEwLCAxNCwgMjM5LCA2MiwgMTAsIDE0LCAyMzksIDYxLCAxMCwgMTQsIDIzOSwgCisgICAgNjAsIDEwLCAxNCwgMjM5LCA1OSwgMTAsIDE0LCAyMzksIDU4LCAxMCwgMTQsIDIzOSwgNTcsIDEwLCAxNCwgMjM5LCA1NiwgCisgICAgMTAsIDE0LCAyMzksIDU1LCAxMCwgMTQsIDIzOSwgNTQsIDEwLCAxNCwgMjM5LCA1MywgMTAsIDE0LCAyMzksIDUyLCAxMCwgCisgICAgMTQsIDIzOSwgNTEsIDEwLCAxNCwgMjM5LCA1MCwgMTAsIDE0LCAyMzksIDQ5LCAxMCwgMTQsIDIzOSwgNDgsIDEwLCAxNCwgCisgICAgMjM5LCA0NywgMTAsIDE0LCAyMzksIDQ2LCAxMCwgMTQsIDIzOSwgNDUsIDEwLCAxNCwgMjM5LCA0NCwgMTAsIDE0LCAyMzksIAorICAgIDQzLCAxMCwgMTQsIDIzOSwgNDIsIDEwLCAxNCwgMjM5LCA0MSwgMTAsIDE0LCAyMzksIDQwLCAxMCwgMTQsIDIzOSwgMzksIAorICAgIDEwLCAxNCwgMjM5LCAzOCwgMTAsIDE0LCAyMzksIDM3LCAxMCwgMTQsIDIzOSwgMzYsIDEwLCAxNCwgMjM5LCAzNSwgMTAsIAorICAgIDE0LCAyMzksIDM0LCAxMCwgMTQsIDIzOSwgMzMsIDEwLCAxNCwgMjM5LCAzMiwgMTAsIDE0LCAyMzksIDMxLCAxMCwgMTQsIAorICAgIDIzOSwgMzAsIDEwLCAxNCwgMjM5LCAyOSwgMTAsIDE0LCAyMzksIDI4LCAxMCwgMTQsIDIzOSwgMjcsIDEwLCAxNCwgMjM5LCAKKyAgICAyNiwgMTAsIDE0LCAyMzksIDI1LCAxMCwgMTQsIDIzOSwgMjQsIDEwLCAxNCwgMjM5LCAyMywgMTAsIDE0LCAyMzksIDIyLCAKKyAgICAxMCwgMTQsIDIzOSwgMjEsIDEwLCAxNCwgMjM5LCAyMCwgMTAsIDE0LCAyMzksIDE5LCAxMCwgMTQsIDIzOSwgMTgsIDEwLCAKKyAgICAxNCwgMjM5LCAxNywgMTAsIDE0LCAyMzksIDE2LCAxMCwgMTQsIDIzOSwgMTUsIDEwLCAxNCwgMjM5LCAxNCwgMTAsIDE0LCAKKyAgICAyMzksIDEzLCAxMCwgMTQsIDIzOSwgMTIsIDEwLCAxNCwgMjM5LCAxMSwgMTAsIDE0LCAyMzksIDEwLCAxMCwgMTQsIDIzOSwgCisgICAgOSwgMTAsIDE0LCAyMzksIDgsIDEwLCAxNCwgMjM5LCA3LCAxMCwgMTQsIDIzOSwgNiwgMTAsIDE0LCAyMzksIDUsIDEwLCAKKyAgICAxNCwgMjM5LCA0LCAxMCwgMTQsIDIzOSwgMywgMTAsIDE0LCAyMzksIDIsIDEwLCAxNCwgMjM5LCAxLCAxMCwgMTQsIDIzOSwgCisgICAgMCwgMTAsIDE0LCAyMzgsIDI1NSwgMTAsIDE0LCAyMzgsIDI1NCwgMTAsIDE0LCAyMzgsIDI1MywgMTAsIDE0LCAyMzgsIAorICAgIDI1MiwgMTAsIDE0LCAyMzgsIDI1MSwgMTAsIDE0LCAyMzgsIDI1MCwgMTAsIDE0LCAyMzgsIDI0OSwgMTAsIDE0LCAyMzgsIAorICAgIDI0OCwgMTAsIDE0LCAyMzgsIDI0NywgMTAsIDE0LCAyMzgsIDI0NiwgMTAsIDE0LCAyMzgsIDI0NSwgMTAsIDE0LCAyMzgsIAorICAgIDI0NCwgMTAsIDE0LCAyMzgsIDI0MywgMTAsIDE0LCAyMzgsIDI0MiwgMTAsIDE0LCAyMzgsIDI0MSwgMTAsIDE0LCAyMzgsIAorICAgIDI0MCwgMTAsIDE0LCAyMzgsIDIzOSwgMTAsIDE0LCAyMzgsIDIzOCwgMTAsIDE0LCAyMzgsIDIzNywgMTAsIDE0LCAyMzgsIAorICAgIDIzNiwgMTAsIDE0LCAyMzgsIDIzNSwgMTAsIDE0LCAyMzgsIDIzNCwgMTAsIDE0LCAyMzgsIDIzMywgMTAsIDE0LCAyMzgsIAorICAgIDIzMiwgMTAsIDE0LCAyMzgsIDIzMSwgMTAsIDE0LCAyMzgsIDIzMCwgMTAsIDE0LCAyMzgsIDIyOSwgMTAsIDE0LCAyMzgsIAorICAgIDIyOCwgMTAsIDE0LCAyMzgsIDIyNywgMTAsIDE0LCAyMzgsIDIyNiwgMTAsIDE0LCAyMzgsIDIyNSwgMTAsIDE0LCAyMzgsIAorICAgIDIyNCwgMTAsIDE0LCAyMzgsIDIyMywgMTAsIDE0LCAyMzgsIDIyMiwgMTAsIDE0LCAyMzgsIDIyMSwgMTAsIDE0LCAyMzgsIAorICAgIDIyMCwgMTAsIDE0LCAyMzgsIDIxOSwgMTAsIDE0LCAyMzgsIDIxOCwgMTAsIDE0LCAyMzgsIDIxNywgMTAsIDE0LCAyMzgsIAorICAgIDIxNiwgMTAsIDE0LCAyMzgsIDIxNSwgMTAsIDE0LCAyMzgsIDIxNCwgMTAsIDE0LCAyMzgsIDIxMywgMTAsIDE0LCAyMzgsIAorICAgIDIxMiwgMTAsIDE0LCAyMzgsIDIxMSwgMTAsIDE0LCAyMzgsIDIxMCwgMTAsIDE0LCAyMzgsIDIwOSwgMTAsIDE0LCAyMzgsIAorICAgIDIwOCwgMTAsIDE0LCAyMzgsIDIwNywgMTAsIDE0LCAyMzgsIDIwNiwgMTAsIDE0LCAyMzgsIDIwNSwgMTAsIDE0LCAyMzgsIAorICAgIDIwNCwgMTAsIDE0LCAyMzgsIDIwMywgMTAsIDE0LCAyMzgsIDIwMiwgMTAsIDE0LCAyMzgsIDIwMSwgMTAsIDE0LCAyMzgsIAorICAgIDIwMCwgMTAsIDE0LCAyMzgsIDE5OSwgMTAsIDE0LCAyMzgsIDE5OCwgMTAsIDE0LCAyMzgsIDE5NywgMTAsIDE0LCAyMzgsIAorICAgIDE5NiwgMTAsIDE0LCAyMzgsIDE5NSwgMTAsIDE0LCAyMzgsIDE5NCwgMTAsIDE0LCAyMzgsIDE5MywgMTAsIDE0LCAyMzgsIAorICAgIDE5MiwgMTAsIDE0LCAyMzgsIDE5MSwgMTAsIDE0LCAyMzgsIDE5MCwgMTAsIDE0LCAyMzgsIDE4OSwgMTAsIDE0LCAyMzgsIAorICAgIDE4OCwgMTAsIDE0LCAyMzgsIDE4NywgMTAsIDE0LCAyMzgsIDE4NiwgMTAsIDE0LCAyMzgsIDE4NSwgMTAsIDE0LCAyMzgsIAorICAgIDE4NCwgMTAsIDE0LCAyMzgsIDE4MywgMTAsIDE0LCAyMzgsIDE4MiwgMTAsIDE0LCAyMzgsIDE4MSwgMTAsIDE0LCAyMzgsIAorICAgIDE4MCwgMTAsIDE0LCAyMzgsIDE3OSwgMTAsIDE0LCAyMzgsIDE3OCwgMTAsIDE0LCAyMzgsIDE3NywgMTAsIDE0LCAyMzgsIAorICAgIDE3NiwgMTAsIDE0LCAyMzgsIDE3NSwgMTAsIDE0LCAyMzgsIDE3NCwgMTAsIDE0LCAyMzgsIDE3MywgMTAsIDE0LCAyMzgsIAorICAgIDE3MiwgMTAsIDE0LCAyMzgsIDE3MSwgMTAsIDE0LCAyMzgsIDE3MCwgMTAsIDE0LCAyMzgsIDE2OSwgMTAsIDE0LCAyMzgsIAorICAgIDE2OCwgMTAsIDE0LCAyMzgsIDE2NywgMTAsIDE0LCAyMzgsIDE2NiwgMTAsIDE0LCAyMzgsIDE2NSwgMTAsIDE0LCAyMzgsIAorICAgIDE2NCwgMTAsIDE0LCAyMzgsIDE2MywgMTAsIDE0LCAyMzgsIDE2MiwgMTAsIDE0LCAyMzgsIDE2MSwgMTAsIDE0LCAyMzgsIAorICAgIDE2MCwgMTAsIDE0LCAyMzgsIDE1OSwgMTAsIDE0LCAyMzgsIDE1OCwgMTAsIDE0LCAyMzgsIDE1NywgMTAsIDE0LCAyMzgsIAorICAgIDE1NiwgMTAsIDE0LCAyMzgsIDE1NSwgMTAsIDE0LCAyMzgsIDE1NCwgMTAsIDE0LCAyMzgsIDE1MywgMTAsIDE0LCAyMzgsIAorICAgIDE1MiwgMTAsIDE0LCAyMzgsIDE1MSwgMTAsIDE0LCAyMzgsIDE1MCwgMTAsIDE0LCAyMzgsIDE0OSwgMTAsIDE0LCAyMzgsIAorICAgIDE0OCwgMTAsIDE0LCAyMzgsIDE0NywgMTAsIDE0LCAyMzgsIDE0NiwgMTAsIDE0LCAyMzgsIDE0NSwgMTAsIDE0LCAyMzgsIAorICAgIDE0NCwgMTAsIDE0LCAyMzgsIDE0MywgMTAsIDE0LCAyMzgsIDE0MiwgMTAsIDE0LCAyMzgsIDE0MSwgMTAsIDE0LCAyMzgsIAorICAgIDE0MCwgMTAsIDE0LCAyMzgsIDEzOSwgMTAsIDE0LCAyMzgsIDEzOCwgMTAsIDE0LCAyMzgsIDEzNywgMTAsIDE0LCAyMzgsIAorICAgIDEzNiwgMTAsIDE0LCAyMzgsIDEzNSwgMTAsIDE0LCAyMzgsIDEzNCwgMTAsIDE0LCAyMzgsIDEzMywgMTAsIDE0LCAyMzgsIAorICAgIDEzMiwgMTAsIDE0LCAyMzgsIDEzMSwgMTAsIDE0LCAyMzgsIDEzMCwgMTAsIDE0LCAyMzgsIDEyOSwgMTAsIDE0LCAyMzgsIAorICAgIDEyOCwgMTAsIDE0LCAyMzgsIDEyNywgMTAsIDE0LCAyMzgsIDEyNiwgMTAsIDE0LCAyMzgsIDEyNSwgMTAsIDE0LCAyMzgsIAorICAgIDEyNCwgMTAsIDE0LCAyMzgsIDEyMywgMTAsIDE0LCAyMzgsIDEyMiwgMTAsIDE0LCAyMzgsIDEyMSwgMTAsIDE0LCAyMzgsIAorICAgIDEyMCwgMTAsIDE0LCAyMzgsIDExOSwgMTAsIDE0LCAyMzgsIDExOCwgMTAsIDE0LCAyMzgsIDExNywgMTAsIDE0LCAyMzgsIAorICAgIDExNiwgMTAsIDE0LCAyMzgsIDExNSwgMTAsIDE0LCAyMzgsIDExNCwgMTAsIDE0LCAyMzgsIDExMywgMTAsIDE0LCAyMzgsIAorICAgIDExMiwgMTAsIDE0LCAyMzgsIDExMSwgMTAsIDE0LCAyMzgsIDExMCwgMTAsIDE0LCAyMzgsIDEwOSwgMTAsIDE0LCAyMzgsIAorICAgIDEwOCwgMTAsIDE0LCAyMzgsIDEwNywgMTAsIDE0LCAyMzgsIDEwNiwgMTAsIDE0LCAyMzgsIDEwNSwgMTAsIDE0LCAyMzgsIAorICAgIDEwNCwgMTAsIDE0LCAyMzgsIDEwMywgMTAsIDE0LCAyMzgsIDEwMiwgMTAsIDE0LCAyMzgsIDEwMSwgMTAsIDE0LCAyMzgsIAorICAgIDEwMCwgMTAsIDE0LCAyMzgsIDk5LCAxMCwgMTQsIDIzOCwgOTgsIDEwLCAxNCwgMjM4LCA5NywgMTAsIDE0LCAyMzgsIDk2LCAKKyAgICAxMCwgMTQsIDIzOCwgOTUsIDEwLCAxNCwgMjM4LCA5NCwgMTAsIDE0LCAyMzgsIDkzLCAxMCwgMTQsIDIzOCwgOTIsIDEwLCAKKyAgICAxNCwgMjM4LCA5MSwgMTAsIDE0LCAyMzgsIDkwLCAxMCwgMTQsIDIzOCwgODksIDEwLCAxNCwgMjM4LCA4OCwgMTAsIDE0LCAKKyAgICAyMzgsIDg3LCAxMCwgMTQsIDIzOCwgODYsIDEwLCAxNCwgMjM4LCA4NSwgMTAsIDE0LCAyMzgsIDg0LCAxMCwgMTQsIDIzOCwgCisgICAgODMsIDEwLCAxNCwgMjM4LCA4MiwgMTAsIDE0LCAyMzgsIDgxLCAxMCwgMTQsIDIzOCwgODAsIDIzMywgOTYsIDIxNywgODUsIAorICAgIDEyOSwgMjE5LCAyMCwgMTI5LCAyNDUsIDM5LCA3OSwgMTI5LCAyMjQsIDEsIDc5LCAxMjksIDU0LCA1MCwgMTI5LCAyNDcsIAorICAgIDE0MCwgNTAsIDEyOSwgMjI1LCAxODUsIDUwLCAxMjksIDI1NCwgMTM0LCAxMjksIDI1NCwgNjUsIDEyOSwgNDMsIDIyNiwgNywgCisgICAgMTI5LCA0NCwgMjI2LCA3LCAxMjksIDI1MywgMjI0LCAxMjksIDk2LCA1MCwgMTI5LCAyNDksIDIyNywgMTI5LCAyNDAsIAorICAgIDE3NCwgMTI5LCAyNDMsIDIzNiwgMjE4LCAxMzEsIDEyOSwgMjE5LCA0OCwgMTI5LCAyMSwgMjEwLCA4NiwgMTI5LCAyMSwgCisgICAgMTExLCAxMjksIDIxLCAxMDUsIDEyOSwgMjEsIDE1OCwgMTI5LCAyMSwgMTYxLCAxMjksIDIxLCAxOTAsIDEyOSwgMjEsIAorICAgIDE5NSwgMTI5LCAyMSwgMTk5LCAxMjksIDIxLCAxOTYsIDEyOSwgMjEsIDIwMSwgMTI5LCAyNDksIDIzNCwgMTI5LCAyMjAsIAorICAgIDE1MiwgMTI5LCAyMzMsIDIxLCA1MCwgMTI5LCAyNDUsIDEwNiwgNTAsIDEyOSwgMjQyLCAxMzcsIDUwLCAxMjksIDIyNCwgCisgICAgMTYsIDc5LCAxMjksIDI0OSwgMjI1LCAyNTMsIDIxNCwgMTI5LCA3LCA2LCAxLCA2MSwgMTI5LCA3LCA2LCAxLCAyNTMsIAorICAgIDE2NiwgMTI5LCA3LCA2LCAxLCAyNTEsIDc0LCAxMjksIDcsIDYsIDEsIDI0OSwgNjgsIDEyOSwgNywgNiwgMSwgNzYsIDEyOSwgCisgICAgNywgNiwgMSwgMjQ1LCAxNCwgMTI5LCA3LCA2LCAxLCAyNDMsIDIwOSwgMTI5LCA3LCA2LCAxLCAyNDIsIDY3LCAxMjksIDcsIAorICAgIDYsIDEsIDc0LCAxMjksIDcsIDYsIDEsIDIzNSwgMTUwLCAxMjksIDcsIDYsIDEsIDIzNSwgMjksIDEyOSwgNywgNiwgMSwgCisgICAgMTU2LCAxMjksIDcsIDYsIDEsIDE5NCwgMTI5LCA3LCA2LCAxLCAyMzAsIDMwLCAxMjksIDcsIDYsIDEsIDc4LCAxMjksIDcsIAorICAgIDYsIDEsIDIyNiwgMTA5LCAxMjksIDcsIDYsIDEsIDIyNCwgOTksIDEyOSwgNywgNiwgMSwgMTUzLCAxMjksIDcsIDYsIDEsIAorICAgIDIyMiwgOTMsIDEyOSwgNywgNiwgMSwgMjE3LCAxNTMsIDEyOSwgNywgNiwgMSwgNjksIDEyOSwgNywgNiwgMSwgMjE0LCAKKyAgICAxMDUsIDEyOSwgNywgNiwgMSwgMjEyLCA5OCwgMTI5LCA3LCA2LCAxLCAyMTEsIDE3OCwgMTI5LCA3LCA2LCAxLCAyMTEsIAorICAgIDExNywgMTI5LCA3LCA2LCAxLCAyMTAsIDE1OSwgMTI5LCA0MywgNDIsIDEyNywgMTI5LCAyMjMsIDUzLCAyMTksIDQ4LCAKKyAgICAxMjksIDQ0LCA0MiwgMTI3LCAxMjksIDI1MCwgMzksIDI1NSwgMjMsIDEyOSwgMTIxLCAyMzIsIDIxOSwgMTI5LCAyNDIsIAorICAgIDE0NCwgMjU1LCAyMywgMTI5LCA3LCA0LCAxLCA2MSwgMTI5LCA3LCA0LCAxLCAyNTMsIDE2NiwgMTI5LCA3LCA0LCAxLCAKKyAgICAyNTEsIDc0LCAxMjksIDcsIDQsIDEsIDI0OSwgNjgsIDEyOSwgNywgNCwgMSwgNzYsIDEyOSwgNywgNCwgMSwgMjQ1LCAxNCwgCisgICAgMTI5LCA3LCA0LCAxLCAyNDMsIDIwOSwgMTI5LCA3LCA0LCAxLCAyNDIsIDY3LCAxMjksIDcsIDQsIDEsIDc0LCAxMjksIDcsIAorICAgIDQsIDEsIDIzNSwgMTUwLCAxMjksIDcsIDQsIDEsIDIzNSwgMjksIDEyOSwgNywgNCwgMSwgMTU2LCAxMjksIDcsIDQsIDEsIAorICAgIDE5NCwgMTI5LCA3LCA0LCAxLCAyMzAsIDMwLCAxMjksIDcsIDQsIDEsIDc4LCAxMjksIDcsIDQsIDEsIDIyNiwgMTA5LCAKKyAgICAxMjksIDcsIDQsIDEsIDIyNCwgOTksIDEyOSwgNywgNCwgMSwgMTUzLCAxMjksIDcsIDQsIDEsIDIyMiwgOTMsIDEyOSwgNywgCisgICAgNCwgMSwgMjE3LCAxNTMsIDEyOSwgNywgNCwgMSwgNjksIDEyOSwgNywgNCwgMSwgMjE0LCAxMDUsIDEyOSwgNywgNCwgMSwgCisgICAgMjEyLCA5OCwgMTI5LCA3LCA0LCAxLCAyMTEsIDE3OCwgMTI5LCA3LCA0LCAxLCAyMTEsIDExNywgMTI5LCA3LCA0LCAxLCAKKyAgICAyMTAsIDE1OSwgMTI5LCA0MywgMjQ5LCAxMDcsIDEyNywgMTI5LCA2NywgMjMyLCAyMTksIDEyOSwgNDQsIDI0OSwgMTA3LCAKKyAgICAxMjcsIDEyOSwgMTg0LCAyNTEsIDE0LCAyMTcsIDg1LCA0NSwgMjIxLCA4MCwgNDUsIDIyMSwgNjksIDQ1LCAyMjEsIDU4LCAKKyAgICA0NSwgMjIxLCA0NiwgNDUsIDIyMSwgMzUsIDQ1LCAyMjEsIDI0LCA0NSwgMjIxLCAxMywgNDUsIDIyMSwgMiwgNDUsIDIyMCwgCisgICAgMjQ3LCA0NSwgMjIwLCAyMzksIDQ1LCAyMjAsIDIzOCwgNDUsIDIyMCwgMjM3LCA0NSwgMjIwLCAyMzYsIDQ1LCAyMjAsIAorICAgIDIzNCwgNDUsIDIyMCwgMjMzLCA0NSwgMjIwLCAyMzIsIDQ1LCAyMjAsIDIzMSwgNDUsIDIyMCwgMjMwLCA0NSwgMjIwLCAKKyAgICAyMjksIDQ1LCAyMjAsIDIyOCwgNDUsIDIyMCwgMjI3LCA0NSwgMjIwLCAyMjYsIDQ1LCAyMjAsIDIyNSwgNDUsIDIyMCwgCisgICAgMjIzLCA0NSwgMjIwLCAyMjIsIDQ1LCAyMjAsIDIyMSwgNDUsIDIyMCwgMjIwLCA0NSwgMjIwLCAyMTksIDQ1LCAyMjAsIAorICAgIDIxOCwgNDUsIDIyMCwgMjE3LCA0NSwgMjIwLCAyMTYsIDQ1LCAyMjAsIDIxNSwgNDUsIDIyMCwgMjE0LCA0NSwgMjIwLCAKKyAgICAyMTIsIDQ1LCAyMjAsIDIxMSwgNDUsIDIyMCwgMjEwLCA0NSwgMjIwLCAyMDksIDQ1LCAyMjAsIDIwOCwgNDUsIDIyMCwgCisgICAgMjA3LCA0NSwgMjIwLCAyMDYsIDQ1LCAyMjAsIDIwNSwgNDUsIDIyMCwgMjA0LCA0NSwgMjIwLCAyMDMsIDQ1LCAyMjAsIAorICAgIDIwMSwgNDUsIDIyMCwgMjAwLCA0NSwgMjIwLCAxOTksIDQ1LCAyMjAsIDE5OCwgNDUsIDIyMCwgMTk3LCA0NSwgMjIwLCAKKyAgICAxOTYsIDQ1LCAyMjAsIDE5NSwgNDUsIDIyMCwgMTk0LCA0NSwgMjIwLCAxOTMsIDQ1LCAyMjAsIDE5MiwgNDUsIDIyMCwgCisgICAgMTkwLCA0NSwgMjIwLCAxODksIDQ1LCAyMjAsIDE4OCwgNDUsIDIyMCwgMTg3LCA0NSwgMjIwLCAxODYsIDQ1LCAyMjAsIAorICAgIDE4NSwgNDUsIDIyMCwgMTg0LCA0NSwgMjIwLCAxODMsIDQ1LCAyMjAsIDE4MiwgNDUsIDIyMCwgMTgxLCA0NSwgMjIwLCAKKyAgICAxNzksIDQ1LCAyMjAsIDE3OCwgNDUsIDIyMCwgMTc3LCA0NSwgMjIwLCAxNzYsIDQ1LCAyMjAsIDE3NSwgNDUsIDIyMCwgCisgICAgMTc0LCA0NSwgMjIwLCAxNzMsIDQ1LCAyMjAsIDE3MiwgNDUsIDIyMCwgMTcxLCA0NSwgMjIwLCAxNzAsIDQ1LCAyMjAsIAorICAgIDE2OCwgNDUsIDIyMCwgMTY3LCA0NSwgMjIwLCAxNjYsIDQ1LCAyMjAsIDE2NSwgNDUsIDIyMCwgMTY0LCA0NSwgMjIwLCAKKyAgICAxNjMsIDQ1LCAyMjAsIDE2MiwgNDUsIDIyMCwgMTYxLCA0NSwgMjIwLCAxNjAsIDQ1LCAyMjAsIDE1OSwgNDUsIDIyMSwgCisgICAgMTU2LCA0NSwgMjIxLCAxNTUsIDQ1LCAyMjEsIDE1NCwgNDUsIDIyMSwgMTUzLCA0NSwgMjIxLCAxNTIsIDQ1LCAyMjEsIAorICAgIDE1MSwgNDUsIDIyMSwgMTUwLCA0NSwgMjIxLCAxNDksIDQ1LCAyMjEsIDE0OCwgNDUsIDIyMSwgMTQ3LCA0NSwgMjIxLCAKKyAgICAxNDUsIDQ1LCAyMjEsIDE0NCwgNDUsIDIyMSwgMTQzLCA0NSwgMjIxLCAxNDIsIDQ1LCAyMjEsIDE0MSwgNDUsIDIyMSwgCisgICAgMTQwLCA0NSwgMjIxLCAxMzksIDQ1LCAyMjEsIDEzOCwgNDUsIDIyMSwgMTM3LCA0NSwgMjIxLCAxMzYsIDQ1LCAyMjEsIAorICAgIDEzNCwgNDUsIDIyMSwgMTMzLCA0NSwgMjIxLCAxMzIsIDQ1LCAyMjEsIDEzMSwgNDUsIDIyMSwgMTMwLCA0NSwgMjIxLCAKKyAgICAxMjksIDQ1LCAyMjEsIDEyOCwgNDUsIDIyMSwgMTI3LCA0NSwgMjIxLCAxMjYsIDQ1LCAyMjEsIDEyNSwgNDUsIDIyMSwgCisgICAgMTIzLCA0NSwgMjIxLCAxMjIsIDQ1LCAyMjEsIDEyMSwgNDUsIDIyMSwgMTIwLCA0NSwgMjIxLCAxMTksIDQ1LCAyMjEsIAorICAgIDExOCwgNDUsIDIyMSwgMTE3LCA0NSwgMjIxLCAxMTYsIDQ1LCAyMjEsIDExNSwgNDUsIDIyMSwgMTE0LCA0NSwgMjIxLCAKKyAgICAxMTIsIDQ1LCAyMjEsIDExMSwgNDUsIDIyMSwgMTEwLCA0NSwgMjIxLCAxMDksIDQ1LCAyMjEsIDEwOCwgNDUsIDIyMSwgCisgICAgMTA3LCA0NSwgMjIxLCAxMDYsIDQ1LCAyMjEsIDEwNSwgNDUsIDIyMSwgMTA0LCA0NSwgMjIxLCAxMDMsIDQ1LCAyMjEsIAorICAgIDEwMSwgNDUsIDIyMSwgMTAwLCA0NSwgMjIxLCA5OSwgNDUsIDIyMSwgOTgsIDQ1LCAyMjEsIDk3LCA0NSwgMjIxLCA5NiwgCisgICAgNDUsIDIyMSwgOTUsIDQ1LCAyMjEsIDk0LCA0NSwgMjIxLCA5MywgNDUsIDIyMSwgOTIsIDQ1LCAyMjEsIDkwLCA0NSwgMjIxLCAKKyAgICA4OSwgNDUsIDIyMSwgODgsIDQ1LCAyMjEsIDg3LCA0NSwgMjIxLCA4NiwgNDUsIDIyMSwgODUsIDQ1LCAyMjEsIDg0LCA0NSwgCisgICAgMjIxLCA4MywgNDUsIDIyMSwgODIsIDQ1LCAyMjEsIDgxLCA0NSwgMjIxLCA3OSwgNDUsIDIyMSwgNzgsIDQ1LCAyMjEsIDc3LCAKKyAgICA0NSwgMjIxLCA3NiwgNDUsIDIyMSwgNzUsIDQ1LCAyMjEsIDc0LCA0NSwgMjIxLCA3MywgNDUsIDIyMSwgNzIsIDQ1LCAyMjEsIAorICAgIDcxLCA0NSwgMjIxLCA3MCwgNDUsIDIyMSwgNjgsIDQ1LCAyMjEsIDY3LCA0NSwgMjIxLCA2NiwgNDUsIDIyMSwgNjUsIDQ1LCAKKyAgICAyMjEsIDY0LCA0NSwgMjIxLCA2MywgNDUsIDIyMSwgNjIsIDQ1LCAyMjEsIDYxLCA0NSwgMjIxLCA2MCwgNDUsIDIyMSwgNTksIAorICAgIDQ1LCAyMjEsIDU3LCA0NSwgMjIxLCA1NiwgNDUsIDIyMSwgNTUsIDQ1LCAyMjEsIDU0LCA0NSwgMjIxLCA1MywgNDUsIDIyMSwgCisgICAgNTIsIDQ1LCAyMjEsIDUxLCA0NSwgMjIxLCA1MCwgNDUsIDIyMSwgNDksIDQ1LCAyMjEsIDQ4LCA0NSwgMjIxLCA0NSwgNDUsIAorICAgIDIyMSwgNDQsIDQ1LCAyMjEsIDQzLCA0NSwgMjIxLCA0MiwgNDUsIDIyMSwgNDEsIDQ1LCAyMjEsIDQwLCA0NSwgMjIxLCAzOSwgCisgICAgNDUsIDIyMSwgMzgsIDQ1LCAyMjEsIDM3LCA0NSwgMjIxLCAzNiwgNDUsIDIyMSwgMzQsIDQ1LCAyMjEsIDMzLCA0NSwgMjIxLCAKKyAgICAzMiwgNDUsIDIyMSwgMzEsIDQ1LCAyMjEsIDMwLCA0NSwgMjIxLCAyOSwgNDUsIDIyMSwgMjgsIDQ1LCAyMjEsIDI3LCA0NSwgCisgICAgMjIxLCAyNiwgNDUsIDIyMSwgMjUsIDQ1LCAyMjEsIDIzLCA0NSwgMjIxLCAyMiwgNDUsIDIyMSwgMjEsIDQ1LCAyMjEsIDIwLCAKKyAgICA0NSwgMjIxLCAxOSwgNDUsIDIyMSwgMTgsIDQ1LCAyMjEsIDE3LCA0NSwgMjIxLCAxNiwgNDUsIDIyMSwgMTUsIDQ1LCAyMjEsIAorICAgIDE0LCA0NSwgMjIxLCAxMiwgNDUsIDIyMSwgMTEsIDQ1LCAyMjEsIDEwLCA0NSwgMjIxLCA5LCA0NSwgMjIxLCA4LCA0NSwgCisgICAgMjIxLCA3LCA0NSwgMjIxLCA2LCA0NSwgMjIxLCA1LCA0NSwgMjIxLCA0LCA0NSwgMjIxLCAzLCA0NSwgMjIxLCAxLCA0NSwgCisgICAgMjIxLCAwLCA0NSwgMjIwLCAyNTUsIDQ1LCAyMjAsIDI1NCwgNDUsIDIyMCwgMjUzLCA0NSwgMjIwLCAyNTIsIDQ1LCAyMjAsIAorICAgIDI1MSwgNDUsIDIyMCwgMjUwLCA0NSwgMjIwLCAyNDksIDQ1LCAyMjAsIDI0OCwgNDUsIDIyMCwgMjQ2LCA0NSwgMjIwLCAKKyAgICAyNDUsIDQ1LCAyMjAsIDI0NCwgNDUsIDIyMCwgMjQzLCA0NSwgMjIwLCAyNDIsIDQ1LCAyMjAsIDI0MSwgNDUsIDIyMCwgCisgICAgMjQwLCAyMjcsIDIwNiwgMjI3LCAyMDgsIDIxOCwgMTU0LCA2NCwgMjQxLCAyNDAsIDIxOSwgNTAsIDIxOCwgMTU0LCA2NCwgCisgICAgMjE2LCAyMTMsIDIxOCwgODYsIDI0NSwgMTUxLCA2NCwgMjE2LCAyMTMsIDI0NSwgNjQsIDI0NSwgMTUxLCA2NCwgMjE1LCAKKyAgICAyNDQsIDI0NSwgMTE3LCAyNDUsIDE0MCwgMjQ1LCAxNDEsIDI1NSwgMTYsIDI1NSwgMTcsIDI1NCwgMTc2LCAyNTIsIDU1LCAKKyAgICAyNTIsIDE4NywgMjUxLCAxMzksIDEzNSwgMjE3LCA5MCwgMjAzLCAyMTcsIDkwLCAyNDAsIDIzNCwgMjE3LCA5NCwgMjMyLCAKKyAgICAyMjAsIDI0NCwgMTUzLCAxNjYsIDIzMiwgMjE5LCAyNDUsIDE1MSwgNjQsIDIzMiwgMjE5LCAyMzMsIDYsIDIyOCwgMTQwLCAKKyAgICAyNDUsIDEyMCwgMjMyLCAyMjAsIDIxNywgOTAsIDY3LCAyMTcsIDkwLCAyMTIsIDExOCwgMjQ0LCAyOCwgMjQ0LCAxNTMsIAorICAgIDI0NCwgMTMzLCAyNTAsIDIzOCwgMjIzLCA1NiwgMjQ5LCAxNTEsIDIyMCwgMzAsIDIyNiwgMTM0LCAyMzIsIDE1NiwgMTExLCAKKyAgICAyMTksIDYwLCAyMjAsIDMwLCAyMzYsIDYsIDIzMiwgMTU2LCAyMTAsIDg2LCAyMTksIDE5MywgMjQ4LCAxNTksIDIzMiwgCisgICAgMjEwLCAyNDUsIDg1LCAyNDcsIDE2MywgMjQ4LCAzOSwgMjQ5LCAxODYsIDExMSwgMjQ4LCAxNDksIDI0OCwgMzksIDI0OSwgCisgICAgMTg2LCAxMDUsIDI0OCwgMTQ4LCAyNDgsIDM5LCAyNDksIDE4NiwgMTU4LCAyNDgsIDE0NywgMjQ4LCAzOSwgMjQ5LCAxODYsIAorICAgIDE2MSwgMjQ4LCAxNDYsIDE1MiwgMjU1LCAxNiwgMjI5LCAyMTQsIDIxNywgMTc4LCAyMzYsIDY5LCAyMTcsIDE4MSwgMjQ1LCAKKyAgICAxNTEsIDY0LCAyMTUsIDI0NSwgMjUxLCAyMjEsIDI0NSwgNzAsIDI1MSwgMTMsIDI1MSwgMTUsIDI0NSwgMTUxLCA2NCwgCisgICAgMjMxLCA4NiwgMjQ1LCAxMTgsIDIxOCwgNjIsIDIxOCwgNzksIDI0NSwgODUsIDI0NSwgODYsIDIzNSwgMjM5LCAyMjAsIAorICAgIDE0MCwgMTYxLCAyNDQsIDExNSwgMjIwLCAxMzksIDI0MywgMjQ1LCAyMzUsIDIzOSwgMjIwLCAxNDAsIDE1OCwgMjQyLCAKKyAgICAxMjgsIDIyMCwgMTM5LCAyNDIsIDEyNSwgMjM1LCAyMzksIDIyMCwgMTQwLCAxMDUsIDIyMywgMTI0LCAyMjAsIDEzOSwgCisgICAgMjIyLCAxNDcsIDIzNSwgMjM5LCAyMjAsIDE0MCwgMTExLCAyMTQsIDE3NCwgMjIwLCAxMzksIDIxNCwgMTMzLCAyMTksIDIzLCAKKyAgICAyNDgsIDcxLCAyNDgsIDczLCAyMjYsIDgyLCAyNTAsIDE1MCwgMjI2LCA4NCwgMTI1LCAyMjYsIDI0NCwgMjI0LCAxOTYsIAorICAgIDI0MSwgNTQsIDI1MSwgMTU4LCAyMjUsIDE3NiwgMjQxLCAyMTAsIDI1MSwgMTY5LCAyMjgsIDgwLCAyNTEsIDE1OCwgMjQxLCAKKyAgICAyMTAsIDIyOSwgMTgwLCAyMzUsIDI0OSwgMjM1LCAyNTEsIDIyOSwgODcsIDIzMiwgMjE5LCAyMjksIDEwNCwgMjE4LCAxNTQsIAorICAgIDY0LCAyMjEsIDE2MCwgMjU0LCAyNiwgMjE4LCAyMjUsIDI0NSwgMTUxLCA2NCwgMjIxLCAxNjAsIDI1NCwgMjYsIDI0NSwgCisgICAgODgsIDEzNSwgMjE3LCA5MSwgMjIwLCAxMjksIDIwMywgMjE3LCA5MSwgMjIwLCAxMjksIDI0MCwgMjMxLCAxMzUsIDIxNywgCisgICAgOTEsIDIsIDIzNSwgNDEsIDIwMywgMjE3LCA5MSwgMiwgMjM1LCA0MSwgMjQwLCAyMzIsIDIzMiwgMjIwLCAyMTcsIDkxLCAKKyAgICAyMjAsIDEyOSwgNjcsIDIxNywgOTEsIDIyMCwgMTI5LCAyMTIsIDExNywgMjI2LCAxLCAyMzIsIDIyMCwgMjQ0LCAyMiwgCisgICAgMjI2LCAxLCAyMzIsIDIyMCwgMjQ2LCAxMTQsIDIyNSwgMzUsIDIyNiwgMSwgMjMyLCAyMjAsIDI1MiwgMTg2LCAyMjYsIDEsIAorICAgIDIzMiwgMjIwLCAyMTQsIDE2MywgMjI1LCAzMSwgMjIzLCA1MywgMjMyLCAyMjAsIDI0NCwgMTUzLCAyMjMsIDUzLCAyMzUsIAorICAgIDI0OSwgMjIzLCAzOCwgMjE5LCAxNTcsIDIyMCwgMzAsIDEwNSwgMjE5LCAxNTQsIDIxOCwgMjI3LCAyMTksIDE1NywgMjIwLCAKKyAgICAzMCwgMTU4LCAyMTksIDE1MywgMjE4LCAyMjYsIDI0OCwgMzksIDI0OSwgMTg2LCAyMTgsIDEwNywgMjQ4LCAxNDUsIDIyNCwgCisgICAgMTg2LCAyMTQsIDEzMiwgMTExLCAyMjQsIDE4NiwgMjE0LCAxMzAsIDIyNCwgMTUyLCAyMjQsIDE4NiwgMjE0LCAxMzIsIAorICAgIDEwNSwgMjI0LCAxODYsIDIxNCwgMTI5LCAyMjQsIDE1MSwgMjIwLCAxMzAsIDIxNSwgMjQzLCAyMTgsIDE1MywgMjE4LCA5MCwgCisgICAgMjUxLCAxNCwgMjUwLCAxNTAsIDI1MCwgMjE3LCAyMzEsIDQ4LCAyMTIsIDU5LCAyMzAsIDQ4LCAyMTgsIDE1NCwgNjQsIAorICAgIDI0MiwgMTE0LCAyNTQsIDI2LCAyMTgsIDE1NCwgNjQsIDIyNCwgMTY5LCAyNTQsIDI2LCAyMTksIDIyLCAyNDUsIDE1MSwgCisgICAgNjQsIDI0MiwgMTE0LCAyNTQsIDI2LCAyNDUsIDE1MSwgNjQsIDIyNCwgMTY5LCAyNTQsIDI2LCAyNDUsIDExNSwgMjE4LCAKKyAgICAxNTQsIDY0LCAyMTgsIDEwNywgMjE5LCAzNywgMjE5LCAxNTcsIDI0MiwgMTQ4LCAxMzUsIDIzNSwgMjAyLCAyMjAsIDEwOSwgCisgICAgMjE5LCAxNTcsIDEzNSwgMjM1LCAyMDIsIDIyMSwgMTk2LCAyNDksIDE4NiwgMjIwLCAxMzcsIDIzNSwgMjAyLCAyNDksIAorICAgIDEyMSwgMjE4LCAxMDgsIDIxNiwgMjM3LCAyMTgsIDE3MCwgMjI2LCAxNzMsIDIxNywgMTY4LCAyNDksIDIyNiwgMjI2LCAKKyAgICAxNDYsIDIyNCwgMTg3LCAyMzEsIDQ3LCAyMjUsIDIyLCAyNTQsIDYxLCAyMjQsIDE4MSwgMjQ5LCAyMjYsIDI1NCwgNzcsIAorICAgIDIyOSwgMTY4LCAyMTksIDIwMiwgNywgNiwgMSwgMjQzLCAwLCA3LCA0LCAxLCAyNDMsIDAsIDI1MCwgMTY3LCAyNTQsIDE1NywgCisgICAgMTgzLCAyMTgsIDY4LCAyNDksIDIzNSwgMjE5LCAxMDgsIDIzMywgNTIsIDE2NSwgMSwgMjMyLCAxODEsIDIwOSwgMjA5LCAxLCAKKyAgICAyNDQsIDUyLCAyNDQsIDQ0LCAyMDksIDIwOSwgMSwgMjQ0LCA1MiwgMjQ0LCAxNjUsIDIwOSwgMjA5LCAxLCAyMjIsIDIxMywgCisgICAgMjA5LCAyMDksIDEsIDIzMiwgMTYyLCA2MywgMTY0LCAyNTEsIDIzMSwgMjIwLCA1LCAyNDIsIDIyMiwgMjMwLCAyNTMsIAorICAgIDIyMywgNDQsIDI0MywgMjIzLCAyNDMsIDIyMiwgMjQzLCAyMjEsIDIzMCwgNTAsIDIwOSwgMjUxLCAyMDksIDI1MiwgMjA5LCAKKyAgICAyNTQsIDIzMiwgMTA3LCAyMjIsIDIyMSwgMjMyLCAxMDksIDIyMiwgMjIzLCAyMjUsIDIyNywgMjMyLCAxMDYsIDIyMiwgCisgICAgMjIwLCAyMjgsIDExMSwgMjMwLCAxNzAsIDIxMSwgMjI5LCAyMzIsIDEwOCwgMjIyLCAyMjIsIDI0MywgMjQ0LCAyMjUsIAorICAgIDIyNiwgMjEyLCAxNSwgMjQ1LCAxNzAsIDI0MywgMjMzLCAyMzAsIDIzNCwgMjI2LCAyMDEsIDIxNCwgMTM0LCA4NywgMjMwLCAKKyAgICAyMzQsIDI0OCwgMTY1LCA4NywgOCwgMywgMjM1LCAxNjQsIDc5LCAyMjQsIDE5NywgMjQ0LCAyOCwgMzEsIDY3LCA0NCwgNzEsIAorICAgIDIzMywgMjYsIDEyNywgMjEzLCAxMTgsIDIxMywgNywgMjEyLCAxOTUsIDIxMiwgMTg0LCAyMTIsIDE3MywgMjEyLCAxNjIsIAorICAgIDIxMiwgMTUxLCAyMTIsIDE0MCwgMjEyLCAxMjksIDIxMywgMTE3LCAyMTMsIDEwNiwgMjEzLCA5NSwgMjEzLCA4NCwgMjEzLCAKKyAgICA3MywgMjEzLCA2MiwgMjEzLCA1MSwgMjUxLCA3OSwgMjI2LCAxNTksIDc5LCAyNTEsIDIwNCwgMjA5LCAyNTMsIDE1LCA1LCAKKyAgICAyMjcsIDIxNSwgMjE2LCAyNDAsIDE1LCA1LCAyMjcsIDIxNSwgMTE1LCAyMjcsIDIxNSwgMjUxLCAxMDcsIDExNSwgMjUxLCAKKyAgICAxMDYsIDQ5LCAyOCwgMTYsIDI0MywgMjQzLCAyMTksIDEwNCwgMjUwLCA4MSwgMjE0LCA5LCAyMTMsIDQwLCAyMTMsIDI5LCAKKyAgICAyMTMsIDE4LCAyMTMsIDYsIDIxMiwgMjUxLCAyMTIsIDI0MCwgMjEyLCAyMjksIDIxMiwgMjE4LCAyMTIsIDIwNywgMjEyLCAKKyAgICAxOTksIDIxMiwgMTk4LCAyMTIsIDE5NywgMjEyLCAxOTYsIDIxMiwgMTk0LCAyMTIsIDE5MywgMjEyLCAxOTIsIDIxMiwgCisgICAgMTkxLCAyMTIsIDE5MCwgMjEyLCAxODksIDIxMiwgMTg4LCAyMTIsIDE4NywgMjEyLCAxODYsIDIxMiwgMTg1LCAyMTIsIAorICAgIDE4MywgMjEyLCAxODIsIDIxMiwgMTgxLCAyMTIsIDE4MCwgMjEyLCAxNzksIDIxMiwgMTc4LCAyMTIsIDE3NywgMjEyLCAKKyAgICAxNzYsIDIxMiwgMTc1LCAyMTIsIDE3NCwgMjEyLCAxNzIsIDIxMiwgMTcxLCAyMTIsIDE3MCwgMjEyLCAxNjksIDIxMiwgCisgICAgMTY4LCAyMTIsIDE2NywgMjEyLCAxNjYsIDIxMiwgMTY1LCAyMTIsIDE2NCwgMjEyLCAxNjMsIDIxMiwgMTYxLCAyMTIsIAorICAgIDE2MCwgMjEyLCAxNTksIDIxMiwgMTU4LCAyMTIsIDE1NywgMjEyLCAxNTYsIDIxMiwgMTU1LCAyMTIsIDE1NCwgMjEyLCAKKyAgICAxNTMsIDIxMiwgMTUyLCAyMTIsIDE1MCwgMjEyLCAxNDksIDIxMiwgMTQ4LCAyMTIsIDE0NywgMjEyLCAxNDYsIDIxMiwgCisgICAgMTQ1LCAyMTIsIDE0NCwgMjEyLCAxNDMsIDIxMiwgMTQyLCAyMTIsIDE0MSwgMjEyLCAxMzksIDIxMiwgMTM4LCAyMTIsIAorICAgIDEzNywgMjEyLCAxMzYsIDIxMiwgMTM1LCAyMTIsIDEzNCwgMjEyLCAxMzMsIDIxMiwgMTMyLCAyMTIsIDEzMSwgMjEyLCAKKyAgICAxMzAsIDIxMiwgMTI4LCAyMTIsIDEyNywgMjEyLCAxMjYsIDIxMiwgMTI1LCAyMTIsIDEyNCwgMjEyLCAxMjMsIDIxMiwgCisgICAgMTIyLCAyMTIsIDEyMSwgMjEyLCAxMjAsIDIxMiwgMTE5LCAyMTMsIDExNiwgMjEzLCAxMTUsIDIxMywgMTE0LCAyMTMsIAorICAgIDExMywgMjEzLCAxMTIsIDIxMywgMTExLCAyMTMsIDExMCwgMjEzLCAxMDksIDIxMywgMTA4LCAyMTMsIDEwNywgMjEzLCAKKyAgICAxMDUsIDIxMywgMTA0LCAyMTMsIDEwMywgMjEzLCAxMDIsIDIxMywgMTAxLCAyMTMsIDEwMCwgMjEzLCA5OSwgMjEzLCA5OCwgCisgICAgMjEzLCA5NywgMjEzLCA5NiwgMjEzLCA5NCwgMjEzLCA5MywgMjEzLCA5MiwgMjEzLCA5MSwgMjEzLCA5MCwgMjEzLCA4OSwgCisgICAgMjEzLCA4OCwgMjEzLCA4NywgMjEzLCA4NiwgMjEzLCA4NSwgMjEzLCA4MywgMjEzLCA4MiwgMjEzLCA4MSwgMjEzLCA4MCwgCisgICAgMjEzLCA3OSwgMjEzLCA3OCwgMjEzLCA3NywgMjEzLCA3NiwgMjEzLCA3NSwgMjEzLCA3NCwgMjEzLCA3MiwgMjEzLCA3MSwgCisgICAgMjEzLCA3MCwgMjEzLCA2OSwgMjEzLCA2OCwgMjEzLCA2NywgMjEzLCA2NiwgMjEzLCA2NSwgMjEzLCA2NCwgMjEzLCA2MywgCisgICAgMjEzLCA2MSwgMjEzLCA2MCwgMjEzLCA1OSwgMjEzLCA1OCwgMjEzLCA1NywgMjEzLCA1NiwgMjEzLCA1NSwgMjEzLCA1NCwgCisgICAgMjEzLCA1MywgMjEzLCA1MiwgMjEzLCA1MCwgMjEzLCA0OSwgMjEzLCA0OCwgMjEzLCA0NywgMjEzLCA0NiwgMjEzLCA0NSwgCisgICAgMjEzLCA0NCwgMjEzLCA0MywgMjEzLCA0MiwgMjEzLCA0MSwgMjEzLCAzOSwgMjEzLCAzOCwgMjEzLCAzNywgMjEzLCAzNiwgCisgICAgMjEzLCAzNSwgMjEzLCAzNCwgMjEzLCAzMywgMjEzLCAzMiwgMjEzLCAzMSwgMjEzLCAzMCwgMjEzLCAyOCwgMjEzLCAyNywgCisgICAgMjEzLCAyNiwgMjEzLCAyNSwgMjEzLCAyNCwgMjEzLCAyMywgMjEzLCAyMiwgMjEzLCAyMSwgMjEzLCAyMCwgMjEzLCAxOSwgCisgICAgMjEzLCAxNywgMjEzLCAxNiwgMjEzLCAxNSwgMjEzLCAxNCwgMjEzLCAxMywgMjEzLCAxMiwgMjEzLCAxMSwgMjEzLCAxMCwgCisgICAgMjEzLCA5LCAyMTMsIDgsIDIxMywgNSwgMjEzLCA0LCAyMTMsIDMsIDIxMywgMiwgMjEzLCAxLCAyMTMsIDAsIDIxMiwgMjU1LCAKKyAgICAyMTIsIDI1NCwgMjEyLCAyNTMsIDIxMiwgMjUyLCAyMTIsIDI1MCwgMjEyLCAyNDksIDIxMiwgMjQ4LCAyMTIsIDI0NywgCisgICAgMjEyLCAyNDYsIDIxMiwgMjQ1LCAyMTIsIDI0NCwgMjEyLCAyNDMsIDIxMiwgMjQyLCAyMTIsIDI0MSwgMjEyLCAyMzksIAorICAgIDIxMiwgMjM4LCAyMTIsIDIzNywgMjEyLCAyMzYsIDIxMiwgMjM1LCAyMTIsIDIzNCwgMjEyLCAyMzMsIDIxMiwgMjMyLCAKKyAgICAyMTIsIDIzMSwgMjEyLCAyMzAsIDIxMiwgMjI4LCAyMTIsIDIyNywgMjEyLCAyMjYsIDIxMiwgMjI1LCAyMTIsIDIyNCwgCisgICAgMjEyLCAyMjMsIDIxMiwgMjIyLCAyMTIsIDIyMSwgMjEyLCAyMjAsIDIxMiwgMjE5LCAyMTIsIDIxNywgMjEyLCAyMTYsIAorICAgIDIxMiwgMjE1LCAyMTIsIDIxNCwgMjEyLCAyMTMsIDIxMiwgMjEyLCAyMTIsIDIxMSwgMjEyLCAyMTAsIDIxMiwgMjA5LCAKKyAgICAyMTIsIDIwOCwgMjEyLCAyMDYsIDIxMiwgMjA1LCAyMTIsIDIwNCwgMjEyLCAyMDMsIDIxMiwgMjAyLCAyMTIsIDIwMSwgCisgICAgMjEyLCAyMDAsIDcsIDYsIDEsIDExNiwgMiwgMjMxLCAyMzgsIDIyLCAyNDIsIDE0MywgNywgNCwgMSwgMTE2LCAyLCAyMzEsIAorICAgIDIzOCwgMjIsIDI0MiwgMTQzLCA3LCA2LCAxLCAxNjAsIDIsIDY3LCAyMzIsIDIyMCwgNTEsIDcsIDQsIDEsIDE2MCwgMiwgCisgICAgNjcsIDIzMiwgMjIwLCA1MSwgNywgNiwgMSwgMTYwLCAyLCA2NywgMjMyLCAyMjAsIDI1MiwgNTEsIDIyLCAyNDIsIDE0MywgCisgICAgNywgNCwgMSwgMTYwLCAyLCA2NywgMjMyLCAyMjAsIDI1MiwgNTEsIDIyLCAyNDIsIDE0MywgNywgNiwgMSwgMTYwLCAyLCAKKyAgICA2NywgMjMyLCAyMjAsIDI1MiwgNTEsIDIyLCAxNDIsIDcsIDQsIDEsIDE2MCwgMiwgNjcsIDIzMiwgMjIwLCAyNTIsIDUxLCAKKyAgICAyMiwgMTQyLCA3LCA2LCAxLCAxNjAsIDIsIDI1MCwgMzksIDIyLCAyMzEsIDIzNywgNywgNCwgMSwgMTYwLCAyLCAyNTAsIAorICAgIDM5LCAyMiwgMjMxLCAyMzcsIDcsIDYsIDEsIDE2MCwgMiwgMjUwLCAzOSwgMjIsIDI1MCwgMjQyLCA3LCA0LCAxLCAxNjAsIAorICAgIDIsIDI1MCwgMzksIDIyLCAyNTAsIDI0MiwgNywgNiwgMSwgMjQwLCAxNjEsIDIsIDIzMSwgMjM4LCAyMiwgMjQyLCAxNDMsIAorICAgIDcsIDQsIDEsIDI0MCwgMTYxLCAyLCAyMzEsIDIzOCwgMjIsIDI0MiwgMTQzLCA3LCA0LCAxLCAyNDAsIDE2MSwgMiwgNTksIAorICAgIDcyLCAyMiwgMTQyLCA3LCA0LCAxLCAyMjksIDg1LCAyLCAyMTYsIDkwLCA0OCwgNywgNiwgMSwgMTQ0LCAyLCA2NywgMjMyLCAKKyAgICAyMjAsIDUxLCA3LCA0LCAxLCAxNDQsIDIsIDY3LCAyMzIsIDIyMCwgNTEsIDcsIDYsIDEsIDE0NCwgMiwgNjcsIDIzMiwgCisgICAgMjIwLCAyNTIsIDUxLCAyMiwgMjQyLCAxNDMsIDcsIDQsIDEsIDE0NCwgMiwgNjcsIDIzMiwgMjIwLCAyNTIsIDUxLCAyMiwgCisgICAgMjQyLCAxNDMsIDcsIDYsIDEsIDE0NCwgMiwgNjcsIDIzMiwgMjIwLCAyNTIsIDUxLCAyMiwgMTQyLCA3LCA0LCAxLCAxNDQsIAorICAgIDIsIDY3LCAyMzIsIDIyMCwgMjUyLCA1MSwgMjIsIDE0MiwgNywgNiwgMSwgMjIyLCA5NCwgMiwgNjcsIDIzMiwgMjIwLCA1MSwgCisgICAgNywgNCwgMSwgMjIyLCA5NCwgMiwgNjcsIDIzMiwgMjIwLCA1MSwgNywgNiwgMSwgMTA0LCAyLCAyMzEsIDIzOCwgMjIsIAorICAgIDI0MiwgMTQzLCA3LCA0LCAxLCAxMDQsIDIsIDIzMSwgMjM4LCAyMiwgMjQyLCAxNDMsIDcsIDYsIDEsIDExNiwgMiwgMjI2LCAKKyAgICAyMjksIDIyLCAxNDIsIDcsIDQsIDEsIDExNiwgMiwgMjI2LCAyMjksIDIyLCAxNDIsIDcsIDYsIDEsIDExNiwgMiwgMjI2LCAKKyAgICAyMjksIDIyLCAxODQsIDcsIDQsIDEsIDExNiwgMiwgMjI2LCAyMjksIDIyLCAxODQsIDcsIDYsIDEsIDE2MCwgMiwgMjI2LCAKKyAgICAyMjksIDIyLCAxNDIsIDcsIDQsIDEsIDE2MCwgMiwgMjI2LCAyMjksIDIyLCAxNDIsIDcsIDYsIDEsIDE2MCwgMiwgMjI2LCAKKyAgICAyMjksIDIyLCAxODQsIDcsIDQsIDEsIDE2MCwgMiwgMjI2LCAyMjksIDIyLCAxODQsIDcsIDYsIDEsIDE2MCwgMiwgNTksIAorICAgIDcyLCAyMiwgMTQyLCA3LCA0LCAxLCAxNjAsIDIsIDU5LCA3MiwgMjIsIDE0MiwgNywgNiwgMSwgMTYwLCAyLCA1OSwgNzIsIAorICAgIDIyLCAxODQsIDcsIDQsIDEsIDE2MCwgMiwgNTksIDcyLCAyMiwgMTg0LCA3LCA0LCAxLCAyNDAsIDE2MSwgMiwgNTksIDcyLCAKKyAgICAyMiwgMjQyLCAxNDMsIDcsIDQsIDEsIDI0MCwgMTYxLCAyLCA1OSwgNzIsIDIyLCAxODQsIDcsIDYsIDEsIDI0MCwgMTYxLCAKKyAgICAyLCAyMjYsIDIyOSwgMjIsIDE0MiwgNywgNCwgMSwgMjQwLCAxNjEsIDIsIDIyNiwgMjI5LCAyMiwgNTksIDcyLCAyMiwgCisgICAgMTQyLCA3LCA2LCAxLCAyNDAsIDE2MSwgMiwgMjI2LCAyMjksIDIyLCAxODQsIDcsIDQsIDEsIDI0MCwgMTYxLCAyLCAyMjYsIAorICAgIDIyOSwgMjIsIDU5LCA3MiwgMjIsIDE4NCwgNywgNiwgMSwgMjM1LCAxNTEsIDIsIDE4NCwgNywgNCwgMSwgMjM1LCAxNTEsIAorICAgIDIsIDU5LCA3MiwgMjIsIDE4NCwgNywgNiwgMSwgMjMzLCAxNTUsIDIsIDE4NCwgNywgNCwgMSwgMjMzLCAxNTUsIDIsIDE4NCwgCisgICAgNywgNiwgMSwgMjMyLCA1NSwgMiwgMTg0LCA3LCA0LCAxLCAyMzIsIDU1LCAyLCAxODQsIDcsIDYsIDEsIDIyMywgMjI3LCAyLCAKKyAgICAxODQsIDcsIDQsIDEsIDIyMywgMjI3LCAyLCAxODQsIDcsIDYsIDEsIDEwNCwgMiwgMjI2LCAyMjksIDIyLCAxNDIsIDcsIDQsIAorICAgIDEsIDEwNCwgMiwgMjI2LCAyMjksIDIyLCAxNDIsIDcsIDYsIDEsIDEwNCwgMiwgMjI2LCAyMjksIDIyLCAxODQsIDcsIDQsIAorICAgIDEsIDEwNCwgMiwgMjI2LCAyMjksIDIyLCAxODQsIDcsIDYsIDEsIDEwNCwgMiwgMjMxLCAyMzgsIDIyLCAxNDIsIDcsIDQsIAorICAgIDEsIDEwNCwgMiwgMjMxLCAyMzgsIDIyLCAxNDIsIDcsIDYsIDEsIDEwNCwgMiwgMjMxLCAyMzgsIDIyLCAxODQsIDcsIDQsIAorICAgIDEsIDEwNCwgMiwgMjMxLCAyMzgsIDIyLCAxODQsIDcsIDQsIDEsIDI1NCwgMjUzLCAyLCAyNDIsIDE0MywgNywgNCwgMSwgCisgICAgMjA0LCAxNDQsIDIsIDI0MiwgMTQzLCA3LCA0LCAxLCAyMDQsIDE0NCwgMiwgMTQyLCA3LCA0LCAxLCAyMTUsIDk0LCAyMTQsIAorICAgIDEwNiwgMiwgMjQyLCAxNDMsIDcsIDQsIDEsIDIxNSwgOTQsIDIxNCwgMTA2LCAyLCAxNDIsIDcsIDQsIDEsIDIyMSwgMTk4LCAKKyAgICAyLCAyNDIsIDE0MywgNywgNCwgMSwgMjIxLCAxOTgsIDIsIDE0MiwgNywgNCwgMSwgMjQxLCA1OCwgMjIxLCAxOTgsIDIsIAorICAgIDI0MiwgMTQzLCA3LCA0LCAxLCAyNDEsIDU4LCAyMjEsIDE5OCwgMiwgMTQyLCA5LCAyMjAsIDEzNywgNzcsIDIsIDE4MiwgCisgICAgNzIsIDIsIDI1NCwgMTc5LCA5LCAyMjAsIDEzNywgNzcsIDIsIDE4MiwgNzIsIDIsIDIxMiwgMzAsIDksIDIyMCwgMTM3LCAKKyAgICA3NywgMiwgMTgyLCA3MiwgMiwgMTA5LCAyMzEsIDE5NywgOSwgMjIwLCAxMzcsIDc3LCAyLCAxODIsIDcyLCAyLCAyMjYsIAorICAgIDIzOCwgOSwgMjIwLCAxMzcsIDc3LCAyLCAxODIsIDcyLCAyLCA2OSwgOSwgMjIwLCAxMzcsIDc3LCAyLCAxODIsIDcyLCAyLCAKKyAgICAyMTAsIDIxMiwgOSwgMjIwLCAxMzcsIDc3LCAyLCAxODIsIDcyLCAyLCA3NiwgOSwgMjIwLCAxMzcsIDc3LCAyLCAxODIsIAorICAgIDcyLCAyLCAyNTQsIDI1MiwgOSwgMjIwLCAxMzcsIDIyOCwgNjgsIDIsIDIzNCwgMTgwLCAxNDYsIDEsIDIzNCwgMTE1LCAzNiwgCisgICAgMTE3LCAyMzUsIDI5LCAzNiwgMTE3LCAyMjksIDg0LCAzNiwgMTE3LCAyNTEsIDc0LCAzNiwgMTE3LCAyMjcsIDE3MSwgMzYsIAorICAgIDExNywgMjE1LCAxNjAsIDM2LCAxMTcsIDIyOCwgMTE2LCAzNiwgMTE3LCAyMTcsIDE1MywgMzYsIDExNywgMjMwLCAzMCwgCisgICAgMzYsIDExNywgMjI2LCAxMDksIDM2LCAxMTcsIDE5NCwgMzYsIDExNywgMjExLCAxMTcsIDM2LCAxMTcsIDE1MywgMzYsIAorICAgIDExNywgMTU2LCAzNiwgMTE3LCAyMTQsIDEwNSwgMzYsIDExNywgMjMyLCAxODIsIDM2LCAxMTcsIDIzMiwgMTkxLCAzNiwgCisgICAgMTE3LCAyMjIsIDE4MiwgMzYsIDExNywgMjI4LCA5OCwgMzYsIDExNywgMjM1LCAxNTAsIDM2LCAxMTcsIDIyMCwgMTA2LCAKKyAgICAzNiwgMTE3LCAyMTgsIDIyOCwgMzYsIDExNywgMjIyLCA5MywgMzYsIDExNywgMjQyLCA2NywgMzYsIDExNywgMjMzLCAyMzgsIAorICAgIDM2LCAzLCAyMzUsIDE2LCAzNiwgMywgMjM0LCA5OCwgMzYsIDMsIDIzNCwgODksIDM2LCAzLCAyMzMsIDIyMywgMzYsIDMsIAorICAgIDIzMywgMTk0LCAzNiwgMywgMjM0LCAxODgsIDM2LCAzLCAyMzQsIDE4NywgMzYsIDMsIDIzNCwgMjUyLCAzNiwgMywgMjM0LCAKKyAgICAzNCwgMzYsIDMsIDIzNCwgMTYsIDM2LCAzLCAyMzQsIDIwMSwgMzYsIDMsIDIyOSwgODEsIDM2LCAzLCAyMjksIDMyLCAzNiwgCisgICAgMywgMjI5LCAyOCwgMzYsIDMsIDIyOCwgMjUzLCAzNiwgMywgMjI4LCAyNDYsIDM2LCAzLCAyMjksIDY5LCAzNiwgMywgMjI5LCAKKyAgICA2NywgMzYsIDMsIDIyOSwgNzgsIDM2LCAzLCAyMjksIDksIDM2LCAzLCAyMjksIDQsIDM2LCAzLCAyMjksIDcxLCAzNiwgMywgCisgICAgMjUxLCA0MCwgMzYsIDMsIDI1MCwgNTksIDM2LCAzLCAyNTAsIDQ5LCAzNiwgMywgMjQ5LCAxMjAsIDM2LCAzLCAyNDksIDkxLCAKKyAgICAzNiwgMywgMjUwLCAxOTgsIDM2LCAzLCAyNTAsIDE5MCwgMzYsIDMsIDI1MSwgMzAsIDM2LCAzLCAyNDksIDI0NiwgMzYsIDMsIAorICAgIDI0OSwgMTgyLCAzNiwgMywgMjUwLCAyMzAsIDM2LCAzLCAyMjcsIDE2OCwgMzYsIDMsIDIyNywgMTUyLCAzNiwgMywgMjI3LCAKKyAgICAxNDcsIDM2LCAzLCAyMjcsIDEzMiwgMzYsIDMsIDIyNywgMTI1LCAzNiwgMywgMjI3LCAxNjAsIDM2LCAzLCAyMjcsIDE1OSwgCisgICAgMzYsIDMsIDIyNywgMTY1LCAzNiwgMywgMjI3LCAxMzgsIDM2LCAzLCAyMjcsIDEzNiwgMzYsIDMsIDIyNywgMTYzLCAzNiwgCisgICAgMywgMjE1LCAxNTYsIDM2LCAzLCAyMTUsIDEzNiwgMzYsIDMsIDIxNSwgMTM1LCAzNiwgMywgMjE1LCAxMjQsIDM2LCAzLCAKKyAgICAyMTUsIDEyMSwgMzYsIDMsIDIxNSwgMTUyLCAzNiwgMywgMjE1LCAxNTEsIDM2LCAzLCAyMTUsIDE1NSwgMzYsIDMsIDIxNSwgCisgICAgMTM0LCAzNiwgMywgMjE1LCAxMzMsIDM2LCAzLCAyMTUsIDE1NCwgMzYsIDMsIDIyOCwgMTE0LCAzNiwgMywgMjI4LCAxMDAsIAorICAgIDM2LCAzLCAyMjgsIDk5LCAzNiwgMywgMjI4LCA4MywgMzYsIDMsIDIyOCwgODIsIDM2LCAzLCAyMjgsIDExMCwgMzYsIDMsIAorICAgIDIyOCwgMTA5LCAzNiwgMywgMjI4LCAxMTMsIDM2LCAzLCAyMjgsIDg1LCAzNiwgMywgMjI4LCA4NCwgMzYsIDMsIDIyOCwgCisgICAgMTEyLCAzNiwgMywgMjE3LCAxMDIsIDM2LCAzLCAyMTYsIDExOCwgMzYsIDMsIDIxNiwgMTA0LCAzNiwgMywgMjE1LCAxMTksIAorICAgIDM2LCAzLCAyMTUsIDg1LCAzNiwgMywgMjE3LCAyMywgMzYsIDMsIDIxNywgMTIsIDM2LCAzLCAyMTcsIDgwLCAzNiwgMywgCisgICAgMTEyLCAzNiwgMywgMjE2LCAxOCwgMzYsIDMsIDIxNywgNDIsIDM2LCAzLCAyMjksIDIzMCwgMzYsIDMsIDIyOCwgMjM4LCAKKyAgICAzNiwgMywgMjI4LCAyMTMsIDM2LCAzLCAyMjcsIDI0MiwgMzYsIDMsIDIyNywgMTgzLCAzNiwgMywgMjI5LCAxMTIsIDM2LCAKKyAgICAzLCAyMjksIDEwOCwgMzYsIDMsIDIyOSwgMjE3LCAzNiwgMywgMjI4LCA3OSwgMzYsIDMsIDIyOCwgNjksIDM2LCAzLCAyMjksIAorICAgIDE5MiwgMzYsIDMsIDIyNiwgOTMsIDM2LCAzLCAyMjUsIDExMSwgMzYsIDMsIDIyNSwgNzQsIDM2LCAzLCAyMjQsIDE1MywgCisgICAgMzYsIDMsIDIyNCwgMTIyLCAzNiwgMywgMjI1LCAyMjQsIDM2LCAzLCAyMjUsIDIxNCwgMzYsIDMsIDIyNiwgNzUsIDM2LCAzLCAKKyAgICAyMjUsIDE5LCAzNiwgMywgMjI0LCAyNTIsIDM2LCAzLCAyMjUsIDIzOCwgMzYsIDMsIDIzMSwgMjQyLCAzNiwgMywgMjMwLCAKKyAgICAyMzUsIDM2LCAzLCAyMzAsIDIwNiwgMzYsIDMsIDIzMCwgMTA3LCAzNiwgMywgMjMwLCA1OSwgMzYsIDMsIDIzMSwgOTYsIAorICAgIDM2LCAzLCAyMzEsIDg1LCAzNiwgMywgMjMxLCAyMDgsIDM2LCAzLCAyMzAsIDE2NiwgMzYsIDMsIDIzMCwgMTM3LCAzNiwgMywgCisgICAgMjMxLCAxNDAsIDM2LCAzLCAyMTEsIDEwMywgMzYsIDMsIDIxMSwgOCwgMzYsIDMsIDIxMCwgMjU1LCAzNiwgMywgMjEwLCAKKyAgICAyMTIsIDM2LCAzLCAyMTAsIDE4MSwgMzYsIDMsIDIxMSwgNDcsIDM2LCAzLCAyMTEsIDQ0LCAzNiwgMywgMjExLCA4MiwgMzYsIAorICAgIDMsIDIxMCwgMjQ0LCAzNiwgMywgMjEwLCAyMjksIDM2LCAzLCAyMTEsIDU1LCAzNiwgMywgMjIzLCAxODcsIDM2LCAzLCAKKyAgICAyMjMsIDM4LCAzNiwgMywgMjIyLCAyNDIsIDM2LCAzLCAyMjIsIDE0MiwgMzYsIDMsIDIyMiwgMTE0LCAzNiwgMywgMjIzLCAKKyAgICAxMzEsIDM2LCAzLCAyMjMsIDExMSwgMzYsIDMsIDIyMywgMTY5LCAzNiwgMywgMjIyLCAyMTMsIDM2LCAzLCAyMjIsIDE5OSwgCisgICAgMzYsIDMsIDIyMywgMTM5LCAzNiwgMywgMjMzLCAxNDAsIDM2LCAzLCAyMzIsIDI0NywgMzYsIDMsIDIzMiwgMjMzLCAzNiwgCisgICAgMywgMjMyLCAxMDMsIDM2LCAzLCAyMzIsIDc4LCAzNiwgMywgMjMzLCA2NCwgMzYsIDMsIDIzMywgNTYsIDM2LCAzLCAyMzMsIAorICAgIDExNSwgMzYsIDMsIDIzMiwgMTYyLCAzNiwgMywgMjMyLCAxMzMsIDM2LCAzLCAyMzMsIDgwLCAzNiwgMywgMjE0LCAyNiwgCisgICAgMzYsIDMsIDIxMywgMTc2LCAzNiwgMywgMjEzLCAxNjIsIDM2LCAzLCAyMTIsIDExNiwgMzYsIDMsIDIxMiwgMTA5LCAzNiwgCisgICAgMywgMjEzLCAyNTUsIDM2LCAzLCAyMTMsIDI1MCwgMzYsIDMsIDIxNCwgMjMsIDM2LCAzLCAyMTMsIDEzOCwgMzYsIDMsIAorICAgIDIxMywgMTI3LCAzNiwgMywgMjE0LCA1LCAzNiwgMywgMjMyLCAxODAsIDM2LCAzLCAyMzIsIDE3NSwgMzYsIDMsIDIzMiwgCisgICAgMTc0LCAzNiwgMywgMjMyLCAxNzEsIDM2LCAzLCAyMzIsIDE3MCwgMzYsIDMsIDIzMiwgMTc3LCAzNiwgMywgMjMyLCAxNzYsIAorICAgIDM2LCAzLCAyMzIsIDE3OSwgMzYsIDMsIDIzMiwgMTczLCAzNiwgMywgMjMyLCAxNzIsIDM2LCAzLCAyMzIsIDE3OCwgMzYsIAorICAgIDMsIDIzMiwgMTg5LCAzNiwgMywgMjMyLCAxODQsIDM2LCAzLCAyMzIsIDE4MywgMzYsIDMsIDIzMiwgMTY3LCAzNiwgMywgCisgICAgMjMyLCAxNjYsIDM2LCAzLCAyMzIsIDE4NiwgMzYsIDMsIDIzMiwgMTg1LCAzNiwgMywgMjMyLCAxODgsIDM2LCAzLCAyMzIsIAorICAgIDE2OSwgMzYsIDMsIDIzMiwgMTY4LCAzNiwgMywgMjMyLCAxODcsIDM2LCAzLCAyMjIsIDE4MCwgMzYsIDMsIDIyMiwgMTY5LCAKKyAgICAzNiwgMywgMjIyLCAxNjgsIDM2LCAzLCAyMjIsIDE2MiwgMzYsIDMsIDIyMiwgMTU1LCAzNiwgMywgMjIyLCAxNzYsIDM2LCAKKyAgICAzLCAyMjIsIDE3NSwgMzYsIDMsIDIyMiwgMTc5LCAzNiwgMywgMjIyLCAxNjcsIDM2LCAzLCAyMjIsIDE2NiwgMzYsIDMsIAorICAgIDIyMiwgMTc4LCAzNiwgMywgMjI4LCA5NiwgMzYsIDMsIDIyOCwgOTEsIDM2LCAzLCAyMjgsIDkwLCAzNiwgMywgMjI4LCA4NywgCisgICAgMzYsIDMsIDIyOCwgODYsIDM2LCAzLCAyMjgsIDkzLCAzNiwgMywgMjI4LCA5MiwgMzYsIDMsIDIyOCwgOTUsIDM2LCAzLCAKKyAgICAyMjgsIDg5LCAzNiwgMywgMjI4LCA4OCwgMzYsIDMsIDIyOCwgOTQsIDM2LCAzLCAyMzUsIDE0NiwgMzYsIDMsIDIzNSwgCisgICAgMTE0LCAzNiwgMywgMjM1LCAxMDcsIDM2LCAzLCAyMzUsIDU3LCAzNiwgMywgMjM1LCAzOSwgMzYsIDMsIDIzNSwgMTMyLCAKKyAgICAzNiwgMywgMjM1LCAxMzAsIDM2LCAzLCAyMzUsIDE0MSwgMzYsIDMsIDIzNSwgNzQsIDM2LCAzLCAyMzUsIDY1LCAzNiwgMywgCisgICAgMjM1LCAxMzUsIDM2LCAzLCAyMjAsIDEwMCwgMzYsIDMsIDIyMCwgMzQsIDM2LCAzLCAyMjAsIDI5LCAzNiwgMywgMjE5LCAKKyAgICAyMjcsIDM2LCAzLCAyMTksIDIxMiwgMzYsIDMsIDIyMCwgNjUsIDM2LCAzLCAyMjAsIDYzLCAzNiwgMywgMjIwLCA5MiwgMzYsIAorICAgIDMsIDIyMCwgOSwgMzYsIDMsIDIyMCwgMywgMzYsIDMsIDIyMCwgNzMsIDM2LCAzLCAyMTgsIDIyNCwgMzYsIDMsIDIxOCwgCisgICAgMTk0LCAzNiwgMywgMjE4LCAxOTAsIDM2LCAzLCAyMTgsIDE4MSwgMzYsIDMsIDIxOCwgMTc4LCAzNiwgMywgMjE4LCAxOTksIAorICAgIDM2LCAzLCAyMTgsIDE5OCwgMzYsIDMsIDIxOCwgMjIzLCAzNiwgMywgMjE4LCAxODYsIDM2LCAzLCAyMTgsIDE4NSwgMzYsIAorICAgIDMsIDIxOCwgMjAxLCAzNiwgMywgMjIyLCAzMywgMzYsIDMsIDIxOSwgMTkzLCAzNiwgMywgMjE5LCAxNzcsIDM2LCAzLCAKKyAgICAyMTgsIDg0LCAzNiwgMywgMjE4LCA1LCAzNiwgMywgMjIxLCAxODMsIDM2LCAzLCAyMjEsIDE3MiwgMzYsIDMsIDIyMiwgMTksIAorICAgIDM2LCAzLCAyMTksIDYwLCAzNiwgMywgMjE5LCA0MiwgMzYsIDMsIDIyMSwgMjIxLCAzNiwgMywgMjQyLCA1MywgMzYsIDMsIAorICAgIDI0MSwgMTg3LCAzNiwgMywgMjQxLCAxNjgsIDM2LCAzLCAyNDAsIDIyOSwgMzYsIDMsIDI0MCwgMjA5LCAzNiwgMywgMjQxLCAKKyAgICAyNDUsIDM2LCAzLCAyNDEsIDIyNywgMzYsIDMsIDI0MiwgNDMsIDM2LCAzLCAyNDEsIDc1LCAzNiwgMywgMjQxLCA2MCwgMzYsIAorICAgIDMsIDI0MSwgMjUzLCAzNiwgMywgMjMzLCAyMzcsIDM2LCAzLCAyMzMsIDIzNiwgMzYsIDMsIDIzMywgMjMxLCAzNiwgMywgCisgICAgMjMzLCAyMzAsIDM2LCAzLCAyMzMsIDIyNywgMzYsIDMsIDIzMywgMjI2LCAzNiwgMywgMjMzLCAyMzMsIDM2LCAzLCAyMzMsIAorICAgIDIzMiwgMzYsIDMsIDIzMywgMjM1LCAzNiwgMywgMjMzLCAyMjksIDM2LCAzLCAyMzMsIDIyOCwgMzYsIDMsIDIzMywgMjM0LCAKKyAgICAzNiwgMywgMjE5LCAyMzMsIDE3NSwgMTE3LCA1LCAyMTEsIDY4LCAxNzUsIDExNywgNSwgMjIzLCAxNTgsIDE3NSwgMTE3LCAKKyAgICA1LCAyMjMsIDgxLCA5OCwgMSwgMjE1LCAyOCwgNzAsIDExNywgNSwgMjQ5LCAyNDEsIDE3NiwgNzAsIDExNywgNSwgMjQ5LCAKKyAgICAyNDEsIDIzNCwgMTM4LCA3MCwgMTE3LCA1LCAyNDksIDI0MSwgMjM0LCAzNCwgNzAsIDExNywgNSwgMjQ5LCAyNDEsIDIzNCwgCisgICAgMTExLCA3MCwgMTE3LCA1LCAyNDksIDI0MSwgMjI5LCA5LCA3MCwgMTE3LCA1LCAyNDksIDI0MSwgMjUxLCA0MSwgNzAsIAorICAgIDExNywgNSwgMjQ5LCAyNDEsIDI1MCwgMTY1LCA3MCwgMTE3LCA1LCAyNDksIDI0MSwgMjQ5LCAyNDYsIDcwLCAxMTcsIDUsIAorICAgIDI0OSwgMjQxLCAyNTAsIDk0LCA3MCwgMTE3LCA1LCAyNDksIDI0MSwgMjI3LCAxMzgsIDcwLCAxMTcsIDUsIDI0OSwgMjQxLCAKKyAgICAyNDgsIDIyOSwgNzAsIDExNywgNSwgMjQ5LCAyNDEsIDIxNSwgMTQ1LCA3MCwgMTE3LCA1LCAyNDksIDI0MSwgMjQ3LCAxNTMsIAorICAgIDcwLCAxMTcsIDUsIDI0OSwgMjQxLCAyMTUsIDE0MCwgNzAsIDExNywgNSwgMjQ5LCAyNDEsIDE5OCwgNzAsIDExNywgNSwgCisgICAgMjQ5LCAyNDEsIDIxNywgMTA2LCA3MCwgMTE3LCA1LCAyNDksIDI0MSwgMjE2LCAyMDksIDcwLCAxMTcsIDUsIDI0OSwgMjQxLCAKKyAgICAxMTIsIDcwLCAxMTcsIDUsIDI0OSwgMjQxLCAyMTYsIDE1NywgNzAsIDExNywgNSwgMjQ5LCAyNDEsIDIyOCwgNzksIDcwLCAKKyAgICAxMTcsIDUsIDI0OSwgMjQxLCAyNTIsIDE5OSwgNzAsIDExNywgNSwgMjQ5LCAyNDEsIDIyNSwgMTUwLCA3MCwgMTE3LCA1LCAKKyAgICAyNDksIDI0MSwgMjI1LCAxOSwgNzAsIDExNywgNSwgMjQ5LCAyNDEsIDIyNSwgMTI0LCA3MCwgMTE3LCA1LCAyNDksIDI0MSwgCisgICAgMjMwLCAxNjYsIDcwLCAxMTcsIDUsIDI0OSwgMjQxLCAyMTAsIDI0NCwgNzAsIDExNywgNSwgMjQ5LCAyNDEsIDIyMiwgMjEzLCAKKyAgICA3MCwgMTE3LCA1LCAyNDksIDI0MSwgMjMyLCAxNjIsIDcwLCAxMTcsIDUsIDI0OSwgMjQxLCAyMTMsIDEzOCwgNzAsIDExNywgCisgICAgNSwgMjQ5LCAyNDEsIDIyMCwgMTA0LCA3MCwgMTE3LCA1LCAyNDksIDI0MSwgMjE4LCAyMjUsIDcwLCAxMTcsIDUsIDI0OSwgCisgICAgMjQxLCAyMDYsIDcwLCAxMTcsIDUsIDI0OSwgMjQxLCAxNjIsIDcwLCAxMTcsIDUsIDI0OSwgMjQxLCAyMzMsIDE0MSwgNzAsIAorICAgIDI1LCA1LCAyNDksIDI0MSwgMjI0LCA5MSwgNzAsIDIzNSwgMjUwLCAyNSwgNSwgMjQ5LCAyNDEsIDIyNCwgMzMsIDcwLCAKKyAgICAyMzUsIDI1MCwgMjUsIDUsIDI0OSwgMjQxLCAyMjIsIDEwMiwgNzAsIDIzNSwgMjUwLCAyNSwgNSwgMjQ5LCAyNDEsIDIyMiwgCisgICAgOTUsIDcwLCAyMzUsIDI1MCwgMjUsIDUsIDI0OSwgMjQxLCAyMjQsIDcyLCA3MCwgMjUsIDUsIDIyNiwgMjA4LCA3MCwgMjUsIAorICAgIDUsIDI1NSwgNDMsIDE0MSwgMSwgMjUyLCA3LCAyMjksIDgyLCAxNDEsIDEsIDI1MiwgNywgMjI5LCAzMiwgMTQxLCAxLCAKKyAgICAyNTIsIDcsIDIyOCwgMjUzLCAxNDEsIDEsIDI1MiwgNywgMjI5LCA2OSwgMTQxLCAxLCAyNTIsIDcsIDIyOSwgOSwgNTYsIDEsIAorICAgIDI1MiwgNywgMjI5LCA4MiwgNTYsIDEsIDI1MiwgNywgMjI5LCAzMiwgNTYsIDEsIDI1MiwgNywgMjI4LCAyNTMsIDU2LCAxLCAKKyAgICAyNTIsIDcsIDIyOSwgNjksIDU2LCAxLCAyNTIsIDcsIDIyOSwgOSwgNTYsIDEsIDI1NCwgMjAzLCAyNTAsIDE5OCwgNTYsIDEsIAorICAgIDI1NCwgMjAzLCAyMTUsIDExOSwgNTYsIDEsIDI1NCwgMjAzLCAxMTIsIDU2LCAxLCAyNTQsIDIwMywgMjI2LCAxMDksIDU4LCAKKyAgICAxLCAyNDUsIDI4LCAyNDUsIDI3LCAyNDksIDE5MCwgMTM4LCAxMzAsIDU4LCAxLCAyNDUsIDI3LCAyNDUsIDI4LCAyNDksIAorICAgIDE5MCwgMTM4LCAxMzAsIAogfTsKIAogc3RhdGljIHVuc2lnbmVkIGNoYXIgcGhyYXNlYm9va19vZmZzZXQxW10gPSB7CkBAIC0xNDQzMSwyNDUxICsxNDQ0OCwyNDUxIEBACiAgICAgODY0NywgMCwgMCwgMCwgMCwgMCwgODY1MSwgODY1OCwgODY2NiwgODY3MywgODY3OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgODY4MywgODY4NiwgODY5MCwgODY5NSwgODY5OSwgMCwgODcwMywgODcwOSwgODcxNSwgODcxOCwgCiAgICAgODcyNSwgODczNCwgODczNywgODc0MCwgODc0NSwgODc1MSwgODc1NSwgODc2MywgODc2OSwgODc3NSwgODc4MywgODc4NywgCi0gICAgODc5MiwgODgwMywgODgwOCwgODgxMiwgODgxNiwgODgyMCwgMCwgMCwgODgyMywgODgzMCwgODgzNCwgODg0MCwgODg0NCwgCi0gICAgODg1MSwgODg1NywgODg2NCwgODg3MCwgODg3NiwgODg4MCwgODg4NCwgODg5MCwgODg5NCwgODg5OCwgODkwMiwgODkwNiwgCi0gICAgODkxMCwgODkxNCwgODkxOCwgODkyMiwgODkyNiwgODkzMCwgODkzNCwgODkzOCwgODk0MiwgODk0NiwgODk1MCwgODk1NCwgCi0gICAgODk1OCwgODk2NiwgODk3NCwgODk4NCwgODk5MywgOTAwMiwgOTAwNSwgOTAwOSwgOTAxMywgOTAxNywgOTAyMSwgOTAyNSwgCi0gICAgOTAyOSwgOTAzMywgOTAzNywgOTA0MiwgOTA0NiwgOTA0OSwgOTA1MiwgOTA1NSwgOTA1OCwgOTA2MSwgOTA2NCwgOTA2NywgCi0gICAgOTA3MCwgOTA3NCwgOTA3NywgOTA4MCwgOTA4NSwgOTA5MCwgOTA5NiwgOTA5OSwgOTEwNiwgOTExNSwgOTEyMCwgOTEyNSwgCi0gICAgOTEzMiwgOTEzNywgOTE0MiwgOTE0NiwgOTE1MCwgOTE1NCwgOTE1OCwgOTE2MiwgOTE2NiwgOTE3MCwgOTE3NCwgOTE3OCwgCi0gICAgOTE4MiwgOTE4NywgOTE5MiwgOTE5OSwgOTIwNSwgOTIxMSwgOTIxNywgOTIyMiwgOTIzMCwgOTIzOCwgOTI0MywgOTI0OSwgCi0gICAgOTI1NSwgOTI2MSwgOTI2NywgOTI3MSwgOTI3NSwgOTI3OSwgOTI4NiwgOTI5NiwgOTMwMCwgOTMwNCwgOTMwOCwgOTMxNCwgCi0gICAgOTMyMiwgOTMyNiwgOTMzMCwgOTMzNywgOTM0MSwgOTM0NSwgOTM0OSwgOTM1NiwgOTM2MywgOTM3NSwgOTM3OSwgOTM4MywgCi0gICAgOTM4NywgOTM5NywgOTQwNiwgOTQxMCwgOTQxOCwgOTQyNSwgOTQzMiwgOTQ0MSwgOTQ1MiwgOTQ2MCwgOTQ2NCwgOTQ3MywgCi0gICAgOTQ4NCwgOTQ5MiwgOTUwNSwgOTUxMywgOTUyMSwgOTUyOSwgOTUzNywgOTU0MywgOTU1MiwgOTU1OSwgOTU2MywgOTU3MSwgCi0gICAgOTU3NSwgOTU4MiwgOTU5MCwgOTU5NCwgOTYwMCwgOTYwNywgOTYxNCwgOTYxOCwgOTYyNiwgOTYzMCwgOTYzNywgOTY0MSwgCi0gICAgOTY0OSwgOTY1MywgOTY2MSwgOTY2OSwgOTY3NiwgOTY4NCwgOTY5MiwgOTY5OSwgOTcwNSwgOTcwOSwgOTcxNiwgOTcyNCwgCi0gICAgOTczMCwgOTczNywgOTc0NCwgOTc1MCwgOTc1OSwgOTc2NywgOTc3NCwgOTc4MCwgOTc4NCwgOTc4NywgOTc5MSwgOTc5NywgCi0gICAgOTgwNSwgOTgwOSwgOTgxNSwgOTgyMSwgOTgyOCwgOTgzNSwgOTgzOCwgOTg0NSwgOTg1MCwgOTg1OCwgOTg2MywgOTg2NywgCi0gICAgOTg4MCwgOTg5MywgOTg5OSwgOTkwNiwgOTkxMSwgOTkxNywgOTkyMiwgOTkyOCwgOTkzOCwgOTk0NSwgOTk1NCwgOTk2NCwgCi0gICAgOTk3MCwgOTk3NSwgOTk4MCwgOTk4NCwgOTk4OCwgOTk5MywgOTk5OCwgMTAwMDQsIDEwMDEyLCAxMDAyMCwgMTAwMzEsIAotICAgIDEwMDM2LCAxMDA0NSwgMTAwNTQsIDEwMDYxLCAxMDA2NywgMTAwNzMsIDEwMDc5LCAxMDA4NSwgMTAwOTEsIDEwMDk3LCAKLSAgICAxMDEwMywgMTAxMDksIDEwMTE1LCAxMDEyMiwgMTAxMjksIDEwMTM2LCAxMDE0MiwgMTAxNTAsIDEwMTU5LCAxMDE2NSwgCi0gICAgMTAxNzIsIDEwMTc5LCAxMDE4NCwgMTAxODksIDEwMTkzLCAxMDIwMCwgMTAyMDcsIDEwMjE2LCAxMDIyNSwgMTAyMjgsIAotICAgIDEwMjMzLCAxMDIzOCwgMCwgMTAyNDMsIDEwMjQ3LCAxMDI1MSwgMTAyNTcsIDEwMjYxLCAxMDI2NSwgMTAyNzEsIDEwMjc1LCAKLSAgICAxMDI4MywgMTAyODcsIDEwMjkxLCAxMDI5NSwgMTAyOTksIDEwMzAzLCAxMDMwOSwgMTAzMTMsIDEwMzE5LCAxMDMyMywgCi0gICAgMTAzMjcsIDEwMzMxLCAxMDMzNSwgMTAzMzksIDEwMzQ0LCAxMDM0NywgMTAzNTEsIDEwMzU3LCAxMDM2MSwgMTAzNjUsIAotICAgIDEwMzY5LCAxMDM3MywgMTAzNzcsIDEwMzgzLCAxMDM4OSwgMTAzOTUsIDEwMzk5LCAxMDQwMywgMTA0MDgsIDEwNDEyLCAKLSAgICAxMDQxNiwgMTA0MjEsIDEwNDI1LCAxMDQyOSwgMTA0MzYsIDEwNDQzLCAxMDQ0NywgMTA0NTEsIDEwNDU2LCAxMDQ2MCwgCi0gICAgMTA0NjQsIDEwNDY3LCAxMDQ3MiwgMTA0NzUsIDEwNDc4LCAxMDQ4MywgMTA0ODgsIDEwNDkyLCAxMDQ5NiwgMTA1MDIsIAotICAgIDEwNTA4LCAxMDUxMSwgMCwgMCwgMTA1MTQsIDEwNTIwLCAxMDUyNiwgMTA1MzIsIDEwNTQyLCAxMDU1NCwgMTA1NjYsIAotICAgIDEwNTgzLCAxMDU5NSwgMTA2MDYsIDEwNjE0LCAxMDYyMSwgMTA2MzIsIDEwNjQ3LCAxMDY1OCwgMTA2NjQsIDEwNjczLCAKLSAgICAxMDY4MSwgMTA2OTMsIDEwNzAzLCAxMDcxMSwgMTA3MjMsIDEwNzMwLCAxMDczOCwgMTA3NTAsIDEwNzU2LCAxMDc2MiwgCi0gICAgMTA3NzAsIDEwNzc4LCAxMDc4NiwgMTA3OTIsIDEwODAyLCAxMDgwOSwgMTA4MTksIDEwODI5LCAxMDg0MiwgMTA4NTYsIAotICAgIDEwODcwLCAxMDg4MCwgMTA4OTEsIDEwOTAyLCAxMDkxNSwgMTA5MjgsIDEwOTQyLCAxMDk1NCwgMTA5NjYsIDEwOTc5LCAKLSAgICAxMDk5MiwgMTEwMDQsIDExMDE3LCAxMTAyNiwgMTEwMzQsIDExMDM5LCAxMTA0NCwgMTEwNDksIDExMDU0LCAxMTA1OSwgCi0gICAgMTEwNjQsIDExMDY5LCAxMTA3NCwgMTEwNzksIDExMDg0LCAxMTA4OSwgMTEwOTQsIDExMDk5LCAxMTEwNCwgMTExMDksIAotICAgIDExMTE0LCAxMTExOSwgMTExMjQsIDExMTI5LCAxMTEzNCwgMTExMzksIDExMTQ0LCAxMTE0OSwgMTExNTQsIDExMTU5LCAKLSAgICAxMTE2NCwgMTExNjksIDExMTc0LCAxMTE3OSwgMTExODQsIDExMTg5LCAxMTE5NCwgMTExOTgsIDExMjAzLCAxMTIwOCwgCi0gICAgMTEyMTMsIDExMjE4LCAxMTIyMywgMTEyMjcsIDExMjMxLCAxMTIzNSwgMTEyMzksIDExMjQzLCAxMTI0NywgMTEyNTEsIAotICAgIDExMjU1LCAxMTI1OSwgMTEyNjMsIDExMjY3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAxMTI3MiwgMTEyNzcsIDExMjgxLCAxMTI4NSwgMTEyODksIDExMjkzLCAxMTI5NywgMTEzMDEsIDExMzA1LCAxMTMwOSwgCi0gICAgMTEzMTMsIDExMzE3LCAxMTMyMiwgMTEzMjYsIDExMzMwLCAxMTMzNCwgMTEzMzksIDExMzQzLCAxMTM0OCwgMTEzNTMsIAotICAgIDExMzU4LCAxMTM2MiwgMTEzNjcsIDExMzcyLCAxMTM3NywgMTEzODIsIDExMzg2LCAxMTM5MSwgMTEzOTUsIDExNDAwLCAKLSAgICAxMTQwNSwgMTE0MDksIDExNDE0LCAxMTQyMSwgMTE0MjUsIDExNDMwLCAxMTQzNCwgMTE0MzgsIDExNDQzLCAxMTQ0NywgCi0gICAgMTE0NTQsIDExNDYxLCAxMTQ2OCwgMTE0NzQsIDExNDgyLCAxMTQ5MCwgMTE0OTksIDExNTA3LCAxMTUxNCwgMTE1MjEsIAotICAgIDExNTI5LCAxMTUzNSwgMTE1NDEsIDExNTQ3LCAxMTU1MywgMTE1NjAsIDExNTY1LCAxMTU2OSwgMTE1NzQsIDAsIDAsIDAsIAotICAgIDAsIDAsIDExNTc4LCAxMTU4MywgMTE1ODgsIDExNTkzLCAxMTU5OCwgMTE2MDMsIDExNjA4LCAxMTYxMywgMTE2MTgsIAotICAgIDExNjIzLCAxMTYyOCwgMTE2MzMsIDExNjM4LCAxMTY0MywgMTE2NDgsIDExNjUzLCAxMTY1OCwgMTE2NjMsIDExNjY4LCAKLSAgICAxMTY3MywgMTE2NzgsIDExNjgzLCAxMTY4OCwgMTE2OTMsIDExNjk4LCAxMTcwMywgMTE3MDgsIDExNzE2LCAxMTcyMywgCi0gICAgMTE3MjksIDExNzM0LCAxMTc0MiwgMTE3NDksIDExNzU1LCAxMTc2MiwgMTE3NjgsIDExNzczLCAxMTc4MCwgMTE3ODcsIAotICAgIDExNzkzLCAxMTc5OCwgMTE4MDMsIDExODA5LCAxMTgxNCwgMTE4MTksIDExODI1LCAwLCAwLCAxMTgzMCwgMTE4MzYsIAotICAgIDExODQyLCAxMTg0OCwgMTE4NTQsIDExODYwLCAxMTg2NiwgMTE4NzEsIDExODc5LCAxMTg4NSwgMTE4OTEsIDExODk3LCAKLSAgICAxMTkwMywgMTE5MDksIDExOTE3LCAwLCAxMTkyMywgMTE5MjgsIDExOTMzLCAxMTkzOCwgMTE5NDMsIDExOTQ4LCAxMTk1MywgCi0gICAgMTE5NTgsIDExOTYzLCAxMTk2OCwgMTE5NzMsIDExOTc4LCAxMTk4MywgMTE5ODgsIDExOTkzLCAxMTk5OCwgMTIwMDMsIAotICAgIDEyMDA4LCAxMjAxMywgMTIwMTgsIDEyMDIzLCAxMjAyOCwgMTIwMzMsIDEyMDM4LCAxMjA0MywgMTIwNDgsIDEyMDUzLCAKLSAgICAxMjA1OCwgMCwgMCwgMTIwNjMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDg3OTIsIDg4MDMsIDg4MDgsIDg4MTIsIDg4MTYsIDg4MjAsIDg4MjMsIDAsIDg4MjYsIDg4MzMsIDg4MzcsIDg4NDMsIAorICAgIDg4NDcsIDg4NTQsIDg4NjAsIDg4NjcsIDg4NzMsIDg4NzksIDg4ODMsIDg4ODcsIDg4OTMsIDg4OTcsIDg5MDEsIDg5MDUsIAorICAgIDg5MDksIDg5MTMsIDg5MTcsIDg5MjEsIDg5MjUsIDg5MjksIDg5MzMsIDg5MzcsIDg5NDEsIDg5NDUsIDg5NDksIDg5NTMsIAorICAgIDg5NTcsIDg5NjEsIDg5NjksIDg5NzcsIDg5ODcsIDg5OTYsIDkwMDUsIDkwMDgsIDkwMTIsIDkwMTYsIDkwMjAsIDkwMjQsIAorICAgIDkwMjgsIDkwMzIsIDkwMzYsIDkwNDAsIDkwNDUsIDkwNDksIDkwNTIsIDkwNTUsIDkwNTgsIDkwNjEsIDkwNjQsIDkwNjcsIAorICAgIDkwNzAsIDkwNzMsIDkwNzcsIDkwODAsIDkwODMsIDkwODgsIDkwOTMsIDkwOTksIDkxMDIsIDkxMDksIDkxMTgsIDkxMjMsIAorICAgIDkxMjgsIDkxMzUsIDkxNDAsIDkxNDUsIDkxNDksIDkxNTMsIDkxNTcsIDkxNjEsIDkxNjUsIDkxNjksIDkxNzMsIDkxNzcsIAorICAgIDkxODEsIDkxODUsIDkxOTAsIDkxOTUsIDkyMDIsIDkyMDgsIDkyMTQsIDkyMjAsIDkyMjUsIDkyMzMsIDkyNDEsIDkyNDYsIAorICAgIDkyNTIsIDkyNTgsIDkyNjQsIDkyNzAsIDkyNzQsIDkyNzgsIDkyODIsIDkyODksIDkyOTksIDkzMDMsIDkzMDcsIDkzMTEsIAorICAgIDkzMTcsIDkzMjUsIDkzMjksIDkzMzMsIDkzNDAsIDkzNDQsIDkzNDgsIDkzNTIsIDkzNTksIDkzNjYsIDkzNzgsIDkzODIsIAorICAgIDkzODYsIDkzOTAsIDk0MDAsIDk0MDksIDk0MTMsIDk0MjEsIDk0MjgsIDk0MzUsIDk0NDQsIDk0NTUsIDk0NjMsIDk0NjcsIAorICAgIDk0NzYsIDk0ODcsIDk0OTUsIDk1MDgsIDk1MTYsIDk1MjQsIDk1MzIsIDk1NDAsIDk1NDYsIDk1NTUsIDk1NjIsIDk1NjYsIAorICAgIDk1NzQsIDk1NzgsIDk1ODUsIDk1OTMsIDk1OTcsIDk2MDMsIDk2MTAsIDk2MTcsIDk2MjEsIDk2MjksIDk2MzMsIDk2NDAsIAorICAgIDk2NDQsIDk2NTIsIDk2NTYsIDk2NjQsIDk2NzIsIDk2NzksIDk2ODcsIDk2OTUsIDk3MDIsIDk3MDgsIDk3MTIsIDk3MTksIAorICAgIDk3MjcsIDk3MzMsIDk3NDAsIDk3NDcsIDk3NTMsIDk3NjIsIDk3NzAsIDk3NzcsIDk3ODMsIDk3ODcsIDk3OTAsIDk3OTQsIAorICAgIDk4MDAsIDk4MDgsIDk4MTIsIDk4MTgsIDk4MjQsIDk4MzEsIDk4MzgsIDk4NDEsIDk4NDgsIDk4NTMsIDk4NjEsIDk4NjYsIAorICAgIDk4NzAsIDk4ODMsIDk4OTYsIDk5MDIsIDk5MDksIDk5MTQsIDk5MjAsIDk5MjUsIDk5MzEsIDk5NDEsIDk5NDgsIDk5NTcsIAorICAgIDk5NjcsIDk5NzMsIDk5NzgsIDk5ODMsIDk5ODcsIDk5OTEsIDk5OTYsIDEwMDAxLCAxMDAwNywgMTAwMTUsIDEwMDIzLCAKKyAgICAxMDAzNCwgMTAwMzksIDEwMDQ4LCAxMDA1NywgMTAwNjQsIDEwMDcwLCAxMDA3NiwgMTAwODIsIDEwMDg4LCAxMDA5NCwgCisgICAgMTAxMDAsIDEwMTA2LCAxMDExMiwgMTAxMTgsIDEwMTI1LCAxMDEzMiwgMTAxMzksIDEwMTQ1LCAxMDE1MywgMTAxNjIsIAorICAgIDEwMTY4LCAxMDE3NSwgMTAxODIsIDEwMTg3LCAxMDE5MiwgMTAxOTYsIDEwMjAzLCAxMDIxMCwgMTAyMTksIDEwMjI4LCAKKyAgICAxMDIzMSwgMTAyMzYsIDEwMjQxLCAwLCAxMDI0NiwgMTAyNTAsIDEwMjU0LCAxMDI2MCwgMTAyNjQsIDEwMjY4LCAxMDI3NCwgCisgICAgMTAyNzgsIDEwMjg2LCAxMDI5MCwgMTAyOTQsIDEwMjk4LCAxMDMwMiwgMTAzMDYsIDEwMzEyLCAxMDMxNiwgMTAzMjIsIAorICAgIDEwMzI2LCAxMDMzMCwgMTAzMzQsIDEwMzM4LCAxMDM0MiwgMTAzNDcsIDEwMzUwLCAxMDM1NCwgMTAzNjAsIDEwMzY0LCAKKyAgICAxMDM2OCwgMTAzNzIsIDEwMzc2LCAxMDM4MCwgMTAzODYsIDEwMzkyLCAxMDM5OCwgMTA0MDIsIDEwNDA2LCAxMDQxMSwgCisgICAgMTA0MTUsIDEwNDE5LCAxMDQyNCwgMTA0MjgsIDEwNDMyLCAxMDQzOSwgMTA0NDYsIDEwNDUwLCAxMDQ1NCwgMTA0NTksIAorICAgIDEwNDYzLCAxMDQ2NywgMTA0NzAsIDEwNDc1LCAxMDQ3OCwgMTA0ODEsIDEwNDg2LCAxMDQ5MSwgMTA0OTUsIDEwNDk5LCAKKyAgICAxMDUwNSwgMTA1MTEsIDEwNTE0LCAwLCAwLCAxMDUxNywgMTA1MjMsIDEwNTI5LCAxMDUzNSwgMTA1NDUsIDEwNTU3LCAKKyAgICAxMDU2OSwgMTA1ODYsIDEwNTk4LCAxMDYwOSwgMTA2MTcsIDEwNjI0LCAxMDYzNSwgMTA2NTAsIDEwNjYxLCAxMDY2NywgCisgICAgMTA2NzYsIDEwNjg0LCAxMDY5NiwgMTA3MDYsIDEwNzE0LCAxMDcyNiwgMTA3MzMsIDEwNzQxLCAxMDc1MywgMTA3NTksIAorICAgIDEwNzY1LCAxMDc3MywgMTA3ODEsIDEwNzg5LCAxMDc5NSwgMTA4MDUsIDEwODEyLCAxMDgyMiwgMTA4MzIsIDEwODQ1LCAKKyAgICAxMDg1OSwgMTA4NzMsIDEwODgzLCAxMDg5NCwgMTA5MDUsIDEwOTE4LCAxMDkzMSwgMTA5NDUsIDEwOTU3LCAxMDk2OSwgCisgICAgMTA5ODIsIDEwOTk1LCAxMTAwNywgMTEwMjAsIDExMDI5LCAxMTAzNywgMTEwNDIsIDExMDQ3LCAxMTA1MiwgMTEwNTcsIAorICAgIDExMDYyLCAxMTA2NywgMTEwNzIsIDExMDc3LCAxMTA4MiwgMTEwODcsIDExMDkyLCAxMTA5NywgMTExMDIsIDExMTA3LCAKKyAgICAxMTExMiwgMTExMTcsIDExMTIyLCAxMTEyNywgMTExMzIsIDExMTM3LCAxMTE0MiwgMTExNDcsIDExMTUyLCAxMTE1NywgCisgICAgMTExNjIsIDExMTY3LCAxMTE3MiwgMTExNzcsIDExMTgyLCAxMTE4NywgMTExOTIsIDExMTk3LCAxMTIwMSwgMTEyMDYsIAorICAgIDExMjExLCAxMTIxNiwgMTEyMjEsIDExMjI2LCAxMTIzMCwgMTEyMzQsIDExMjM4LCAxMTI0MiwgMTEyNDYsIDExMjUwLCAKKyAgICAxMTI1NCwgMTEyNTgsIDExMjYyLCAxMTI2NiwgMTEyNzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDExMjc1LCAxMTI4MCwgMTEyODQsIDExMjg4LCAxMTI5MiwgMTEyOTYsIDExMzAwLCAxMTMwNCwgMTEzMDgsIDExMzEyLCAKKyAgICAxMTMxNiwgMTEzMjAsIDExMzI1LCAxMTMyOSwgMTEzMzMsIDExMzM3LCAxMTM0MiwgMTEzNDYsIDExMzUxLCAxMTM1NiwgCisgICAgMTEzNjEsIDExMzY1LCAxMTM3MCwgMTEzNzUsIDExMzgwLCAxMTM4NSwgMTEzODksIDExMzk0LCAxMTM5OCwgMTE0MDMsIAorICAgIDExNDA4LCAxMTQxMiwgMTE0MTcsIDExNDI0LCAxMTQyOCwgMTE0MzMsIDExNDM3LCAxMTQ0MSwgMTE0NDYsIDExNDUwLCAKKyAgICAxMTQ1NywgMTE0NjQsIDExNDcxLCAxMTQ3NywgMTE0ODUsIDExNDkzLCAxMTUwMiwgMTE1MTAsIDExNTE3LCAxMTUyNCwgCisgICAgMTE1MzIsIDExNTM4LCAxMTU0NCwgMTE1NTAsIDExNTU2LCAxMTU2MywgMTE1NjgsIDExNTcyLCAxMTU3NywgMCwgMCwgMCwgCisgICAgMCwgMCwgMTE1ODEsIDExNTg2LCAxMTU5MSwgMTE1OTYsIDExNjAxLCAxMTYwNiwgMTE2MTEsIDExNjE2LCAxMTYyMSwgCisgICAgMTE2MjYsIDExNjMxLCAxMTYzNiwgMTE2NDEsIDExNjQ2LCAxMTY1MSwgMTE2NTYsIDExNjYxLCAxMTY2NiwgMTE2NzEsIAorICAgIDExNjc2LCAxMTY4MSwgMTE2ODYsIDExNjkxLCAxMTY5NiwgMTE3MDEsIDExNzA2LCAxMTcxMSwgMTE3MTksIDExNzI2LCAKKyAgICAxMTczMiwgMTE3MzcsIDExNzQ1LCAxMTc1MiwgMTE3NTgsIDExNzY1LCAxMTc3MSwgMTE3NzYsIDExNzgzLCAxMTc5MCwgCisgICAgMTE3OTYsIDExODAxLCAxMTgwNiwgMTE4MTIsIDExODE3LCAxMTgyMiwgMTE4MjgsIDAsIDAsIDExODMzLCAxMTgzOSwgCisgICAgMTE4NDUsIDExODUxLCAxMTg1NywgMTE4NjMsIDExODY5LCAxMTg3NCwgMTE4ODIsIDExODg4LCAxMTg5NCwgMTE5MDAsIAorICAgIDExOTA2LCAxMTkxMiwgMTE5MjAsIDAsIDExOTI2LCAxMTkzMSwgMTE5MzYsIDExOTQxLCAxMTk0NiwgMTE5NTEsIDExOTU2LCAKKyAgICAxMTk2MSwgMTE5NjYsIDExOTcxLCAxMTk3NiwgMTE5ODEsIDExOTg2LCAxMTk5MSwgMTE5OTYsIDEyMDAxLCAxMjAwNiwgCisgICAgMTIwMTEsIDEyMDE2LCAxMjAyMSwgMTIwMjYsIDEyMDMxLCAxMjAzNiwgMTIwNDEsIDEyMDQ2LCAxMjA1MSwgMTIwNTYsIAorICAgIDEyMDYxLCAwLCAwLCAxMjA2NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMTIwNjcsIDAsIDEyMDc2LCAxMjA4MywgMTIwOTEsIDEyMTAzLCAxMjExMCwgMTIxMTcsIDEyMTI0LCAxMjEzNSwgMTIxNDYsIAotICAgIDEyMTUzLCAxMjE2MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMTIwNzAsIDAsIDEyMDc5LCAxMjA4NiwgMTIwOTQsIDEyMTA2LCAxMjExMywgMTIxMjAsIDEyMTI3LCAxMjEzOCwgMTIxNDksIAorICAgIDEyMTU2LCAxMjE2NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTIxNjcsIDEyMTcyLCAxMjE3NywgMTIxODIsIDEyMTg3LCAKLSAgICAxMjE5MiwgMTIxOTcsIDEyMjAyLCAxMjIwNywgMTIyMTIsIDEyMjE3LCAxMjIyMiwgMTIyMjcsIDEyMjMxLCAxMjIzNSwgCi0gICAgMTIyMzksIDEyMjQ0LCAxMjI1MCwgMTIyNTYsIDEyMjYyLCAxMjI2NywgMTIyNzIsIDEyMjc3LCAxMjI4MiwgMTIyODgsIAotICAgIDEyMjk3LCAxMjMwNSwgMCwgMTIzMTEsIDEyMzE3LCAxMjMyMSwgMTIzMjUsIDEyMzI5LCAxMjMzNCwgMTIzMzcsIDEyMzQxLCAKLSAgICAxMjM0NCwgMTIzNDgsIDEyMzUxLCAxMjM1NSwgMTIzNTksIDEyMzYzLCAxMjM2OCwgMTIzNzMsIDEyMzc2LCAxMjM4MCwgCi0gICAgMTIzODUsIDEyMzkwLCAxMjM5MywgMTIzOTcsIDEyNDAwLCAxMjQwNCwgMTI0MDgsIDEyNDEyLCAxMjQxNiwgMTI0MjAsIAotICAgIDEyNDI0LCAxMjQyOCwgMTI0MzIsIDEyNDM2LCAxMjQ0MCwgMTI0NDQsIDEyNDQ4LCAxMjQ1MiwgMTI0NTYsIDEyNDYwLCAKLSAgICAxMjQ2NCwgMTI0NjgsIDEyNDcyLCAxMjQ3NSwgMTI0NzksIDEyNDgyLCAxMjQ4NiwgMTI0OTAsIDEyNDk0LCAxMjQ5NywgCi0gICAgMTI1MDAsIDEyNTAzLCAxMjUwNywgMTI1MTEsIDEyNTE1LCAxMjUxOSwgMTI1MjMsIDEyNTI3LCAxMjUzMSwgMTI1MzQsIAotICAgIDEyNTM3LCAxMjU0MiwgMTI1NDcsIDEyNTUxLCAxMjU1NSwgMTI1NjAsIDEyNTY0LCAxMjU2OSwgMTI1NzMsIDEyNTc4LCAKLSAgICAxMjU4MywgMTI1ODksIDEyNTk1LCAxMjYwMSwgMTI2MDUsIDEyNjEwLCAxMjYxNiwgMTI2MjIsIDEyNjI2LCAxMjYzMSwgCi0gICAgMTI2MzUsIDEyNjQxLCAxMjY0NiwgMTI2NDksIDEyNjU1LCAxMjY2MSwgMTI2NjYsIDEyNjcxLCAxMjY3OCwgMTI2ODMsIAotICAgIDEyNjg4LCAxMjY5MiwgMTI2OTYsIDEyNzAwLCAxMjcwNCwgMTI3MDgsIDEyNzEyLCAxMjcxNiwgMTI3MjAsIDEyNzI1LCAKLSAgICAxMjczMCwgMTI3MzUsIDEyNzQxLCAxMjc0NCwgMTI3NDgsIDEyNzUyLCAxMjc1NSwgMTI3NTgsIDEyNzYxLCAxMjc2NCwgCi0gICAgMTI3NjcsIDEyNzcwLCAxMjc3MywgMTI3NzYsIDEyNzc5LCAxMjc4MywgMTI3OTAsIDEyNzk1LCAxMjc5OSwgMTI4MDMsIAotICAgIDEyODA3LCAxMjgxMSwgMCwgMTI4MTUsIDEyODE5LCAxMjgyMywgMTI4MjcsIDEyODMxLCAxMjgzNywgMTI4NDEsIDAsIAotICAgIDEyODQ1LCAxMjg0OSwgMTI4NTMsIDAsIDEyODU3LCAxMjg2MCwgMTI4NjQsIDEyODY3LCAxMjg3MSwgMTI4NzQsIDEyODc4LCAKLSAgICAxMjg4MiwgMCwgMCwgMTI4ODYsIDEyODg5LCAwLCAwLCAxMjg5MywgMTI4OTYsIDEyOTAwLCAxMjkwMywgMTI5MDcsIAotICAgIDEyOTExLCAxMjkxNSwgMTI5MTksIDEyOTIzLCAxMjkyNywgMTI5MzEsIDEyOTM1LCAxMjkzOSwgMTI5NDMsIDEyOTQ3LCAKLSAgICAxMjk1MSwgMTI5NTUsIDEyOTU5LCAxMjk2MywgMTI5NjcsIDEyOTcxLCAxMjk3NSwgMCwgMTI5NzgsIDEyOTgxLCAxMjk4NSwgCi0gICAgMTI5ODksIDEyOTkzLCAxMjk5NiwgMTI5OTksIDAsIDEzMDAyLCAwLCAwLCAwLCAxMzAwNiwgMTMwMTAsIDEzMDE0LCAKLSAgICAxMzAxNywgMCwgMCwgMTMwMjAsIDEzMDI0LCAxMzAyOCwgMTMwMzMsIDEzMDM3LCAxMzA0MiwgMTMwNDYsIDEzMDUxLCAKLSAgICAxMzA1NiwgMCwgMCwgMTMwNjIsIDEzMDY2LCAwLCAwLCAxMzA3MSwgMTMwNzUsIDEzMDgwLCAxMzA4NCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMTMwOTAsIDAsIDAsIDAsIDAsIDEzMDk2LCAxMzEwMCwgMCwgMTMxMDQsIDEzMTA4LCAxMzExMywgCi0gICAgMTMxMTgsIDEzMTIzLCAwLCAwLCAxMzEyOSwgMTMxMzMsIDEzMTM2LCAxMzEzOSwgMTMxNDIsIDEzMTQ1LCAxMzE0OCwgCi0gICAgMTMxNTEsIDEzMTU0LCAxMzE1NywgMTMxNjAsIDEzMTY5LCAxMzE3OCwgMTMxODIsIDEzMTg2LCAxMzE5MiwgMTMxOTgsIAotICAgIDEzMjA0LCAxMzIxMCwgMTMyMjQsIDEzMjMxLCAxMzIzNCwgMCwgMCwgMCwgMCwgMCwgMTMyMzgsIDEzMjQ0LCAxMzI0OCwgMCwgCi0gICAgMTMyNTIsIDEzMjU1LCAxMzI1OSwgMTMyNjIsIDEzMjY2LCAxMzI2OSwgMCwgMCwgMCwgMCwgMTMyNzMsIDEzMjc3LCAwLCAwLCAKLSAgICAxMzI4MSwgMTMyODUsIDEzMjg5LCAxMzI5MiwgMTMyOTYsIDEzMzAwLCAxMzMwNCwgMTMzMDgsIDEzMzEyLCAxMzMxNiwgCi0gICAgMTMzMjAsIDEzMzI0LCAxMzMyOCwgMTMzMzIsIDEzMzM2LCAxMzM0MCwgMTMzNDQsIDEzMzQ4LCAxMzM1MiwgMTMzNTYsIAotICAgIDEzMzYwLCAxMzM2NCwgMCwgMTMzNjcsIDEzMzcwLCAxMzM3NCwgMTMzNzgsIDEzMzgyLCAxMzM4NSwgMTMzODgsIDAsIAotICAgIDEzMzkxLCAxMzM5NSwgMCwgMTMzOTksIDEzNDAzLCAwLCAxMzQwNywgMTM0MTAsIDAsIDAsIDEzNDEzLCAwLCAxMzQxNywgCi0gICAgMTM0MjIsIDEzNDI2LCAxMzQzMSwgMTM0MzUsIDAsIDAsIDAsIDAsIDEzNDQwLCAxMzQ0NSwgMCwgMCwgMTM0NTAsIDEzNDU1LCAKLSAgICAxMzQ2MCwgMCwgMCwgMCwgMTM0NjQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzNDY4LCAxMzQ3MiwgMTM0NzYsIDEzNDgwLCAKLSAgICAwLCAxMzQ4NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTM0ODgsIDEzNDkyLCAxMzQ5NSwgMTM0OTgsIDEzNTAxLCAxMzUwNCwgCi0gICAgMTM1MDcsIDEzNTEwLCAxMzUxMywgMTM1MTYsIDEzNTE5LCAxMzUyMiwgMTM1MjUsIDEzNTI4LCAxMzUzMSwgMTM1MzYsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzNTQwLCAxMzU0NCwgMTM1NDgsIDAsIDEzNTUyLCAxMzU1NSwgCi0gICAgMTM1NTksIDEzNTYyLCAxMzU2NiwgMTM1NjksIDEzNTczLCAxMzU3NywgMTM1ODEsIDAsIDEzNTg2LCAxMzU4OSwgMTM1OTMsIAotICAgIDAsIDEzNTk4LCAxMzYwMSwgMTM2MDUsIDEzNjA4LCAxMzYxMiwgMTM2MTYsIDEzNjIwLCAxMzYyNCwgMTM2MjgsIDEzNjMyLCAKLSAgICAxMzYzNiwgMTM2NDAsIDEzNjQ0LCAxMzY0OCwgMTM2NTIsIDEzNjU2LCAxMzY2MCwgMTM2NjQsIDEzNjY4LCAxMzY3MiwgCi0gICAgMTM2NzYsIDEzNjgwLCAwLCAxMzY4MywgMTM2ODYsIDEzNjkwLCAxMzY5NCwgMTM2OTgsIDEzNzAxLCAxMzcwNCwgMCwgCi0gICAgMTM3MDcsIDEzNzExLCAwLCAxMzcxNSwgMTM3MTksIDEzNzIzLCAxMzcyNywgMTM3MzAsIDAsIDAsIDEzNzMzLCAxMzczNywgCi0gICAgMTM3NDEsIDEzNzQ2LCAxMzc1MCwgMTM3NTUsIDEzNzU5LCAxMzc2NCwgMTM3NjksIDEzNzc1LCAwLCAxMzc4MSwgMTM3ODUsIAotICAgIDEzNzkwLCAwLCAxMzc5NiwgMTM4MDAsIDEzODA1LCAwLCAwLCAxMzgwOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMTM4MTIsIDEzODE3LCAxMzgyMiwgMTM4MjcsIDAsIDAsIDEzODMzLCAxMzgzNywgMTM4NDAsIAotICAgIDEzODQzLCAxMzg0NiwgMTM4NDksIDEzODUyLCAxMzg1NSwgMTM4NTgsIDEzODYxLCAxMzg2NCwgMTM4NjgsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzODcyLCAxMzg3NiwgMTM4ODAsIDAsIDEzODg0LCAxMzg4NywgCi0gICAgMTM4OTEsIDEzODk0LCAxMzg5OCwgMTM5MDEsIDEzOTA1LCAxMzkwOSwgMCwgMCwgMTM5MTMsIDEzOTE2LCAwLCAwLCAKLSAgICAxMzkyMCwgMTM5MjMsIDEzOTI3LCAxMzkzMCwgMTM5MzQsIDEzOTM4LCAxMzk0MiwgMTM5NDYsIDEzOTUwLCAxMzk1NCwgCi0gICAgMTM5NTgsIDEzOTYyLCAxMzk2NiwgMTM5NzAsIDEzOTc0LCAxMzk3OCwgMTM5ODIsIDEzOTg2LCAxMzk5MCwgMTM5OTQsIAotICAgIDEzOTk4LCAxNDAwMiwgMCwgMTQwMDUsIDE0MDA4LCAxNDAxMiwgMTQwMTYsIDE0MDIwLCAxNDAyMywgMTQwMjYsIDAsIAotICAgIDE0MDI5LCAxNDAzMywgMCwgMTQwMzcsIDE0MDQxLCAxNDA0NSwgMTQwNDksIDE0MDUyLCAwLCAwLCAxNDA1NSwgMTQwNTksIAotICAgIDE0MDYzLCAxNDA2OCwgMTQwNzIsIDE0MDc3LCAxNDA4MSwgMTQwODYsIDE0MDkxLCAwLCAwLCAxNDA5NywgMTQxMDEsIDAsIAotICAgIDAsIDE0MTA2LCAxNDExMCwgMTQxMTUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE0MTE5LCAxNDEyNSwgMCwgMCwgMCwgMCwgCi0gICAgMTQxMzEsIDE0MTM1LCAwLCAxNDEzOSwgMTQxNDMsIDE0MTQ4LCAxNDE1MywgMTQxNTgsIDAsIDAsIDE0MTY0LCAxNDE2OCwgCi0gICAgMTQxNzEsIDE0MTc0LCAxNDE3NywgMTQxODAsIDE0MTgzLCAxNDE4NiwgMTQxODksIDE0MTkyLCAxNDE5NSwgMTQxOTgsIAotICAgIDE0MjAyLCAxNDIwOCwgMTQyMTQsIDE0MjIwLCAxNDIyNiwgMTQyMzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDE0MjM4LCAxNDI0MiwgMCwgMTQyNDYsIDE0MjQ5LCAxNDI1MywgMTQyNTYsIDE0MjYwLCAxNDI2MywgMCwgMCwgMCwgCi0gICAgMTQyNjcsIDE0MjcwLCAxNDI3NCwgMCwgMTQyNzgsIDE0MjgxLCAxNDI4NSwgMTQyODksIDAsIDAsIDAsIDE0MjkyLCAKLSAgICAxNDI5NiwgMCwgMTQzMDAsIDAsIDE0MzA0LCAxNDMwOCwgMCwgMCwgMCwgMTQzMTIsIDE0MzE2LCAwLCAwLCAwLCAxNDMyMCwgCi0gICAgMTQzMjMsIDE0MzI3LCAwLCAwLCAwLCAxNDMzMCwgMTQzMzMsIDE0MzM2LCAxNDMzOSwgMTQzNDMsIDE0MzQ3LCAxNDM1MSwgCi0gICAgMTQzNTUsIDE0MzU5LCAxNDM2MywgMTQzNjcsIDE0MzcwLCAwLCAwLCAwLCAwLCAxNDM3MywgMTQzNzgsIDE0MzgyLCAKLSAgICAxNDM4NywgMTQzOTEsIDAsIDAsIDAsIDE0Mzk2LCAxNDQwMCwgMTQ0MDUsIDAsIDE0NDEwLCAxNDQxNCwgMTQ0MTksIAotICAgIDE0NDI0LCAwLCAwLCAxNDQyOCwgMCwgMCwgMCwgMCwgMCwgMCwgMTQ0MzEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDE0NDM3LCAxNDQ0MSwgMTQ0NDQsIDE0NDQ3LCAxNDQ1MCwgMTQ0NTMsIDE0NDU2LCAxNDQ1OSwgCi0gICAgMTQ0NjIsIDE0NDY1LCAxNDQ2OCwgMTQ0NzIsIDE0NDc3LCAxNDQ4MiwgMTQ0ODYsIDE0NDkwLCAxNDQ5NCwgMTQ0OTgsIAotICAgIDE0NTAyLCAxNDUwNywgMTQ1MTEsIDAsIDAsIDAsIDAsIDAsIDAsIDE0NTE0LCAxNDUxOCwgMTQ1MjIsIDAsIDE0NTI2LCAKLSAgICAxNDUyOSwgMTQ1MzMsIDE0NTM2LCAxNDU0MCwgMTQ1NDMsIDE0NTQ3LCAxNDU1MSwgMCwgMTQ1NTUsIDE0NTU4LCAxNDU2MiwgCi0gICAgMCwgMTQ1NjYsIDE0NTY5LCAxNDU3MywgMTQ1NzcsIDE0NTgwLCAxNDU4NCwgMTQ1ODgsIDE0NTkyLCAxNDU5NiwgMTQ2MDAsIAotICAgIDE0NjA0LCAxNDYwOCwgMTQ2MTIsIDE0NjE2LCAxNDYyMCwgMTQ2MjQsIDE0NjI4LCAxNDYzMiwgMTQ2MzYsIDE0NjQwLCAKLSAgICAxNDY0NCwgMTQ2NDgsIDE0NjUyLCAwLCAxNDY1NSwgMTQ2NTgsIDE0NjYyLCAxNDY2NiwgMTQ2NzAsIDE0NjczLCAxNDY3NiwgCi0gICAgMTQ2NzksIDE0NjgzLCAxNDY4NywgMCwgMTQ2OTEsIDE0Njk1LCAxNDY5OSwgMTQ3MDMsIDE0NzA2LCAwLCAwLCAwLCAKLSAgICAxNDcwOSwgMTQ3MTMsIDE0NzE4LCAxNDcyMiwgMTQ3MjcsIDE0NzMxLCAxNDczNiwgMTQ3NDEsIDAsIDE0NzQ3LCAxNDc1MSwgCi0gICAgMTQ3NTYsIDAsIDE0NzYxLCAxNDc2NSwgMTQ3NzAsIDE0Nzc1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNDc3OSwgMTQ3ODMsIAotICAgIDAsIDE0Nzg5LCAxNDc5MywgMCwgMCwgMCwgMCwgMCwgMCwgMTQ3OTcsIDE0ODAyLCAxNDgwNywgMTQ4MTIsIDAsIDAsIAotICAgIDE0ODE4LCAxNDgyMiwgMTQ4MjUsIDE0ODI4LCAxNDgzMSwgMTQ4MzQsIDE0ODM3LCAxNDg0MCwgMTQ4NDMsIDE0ODQ2LCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNDg0OSwgMTQ4NjIsIDE0ODc0LCAxNDg4NiwgMTQ4OTgsIDE0OTEwLCAxNDkyMiwgCi0gICAgMTQ5MzQsIDAsIDAsIDE0OTM4LCAxNDk0MiwgMCwgMTQ5NDYsIDE0OTQ5LCAxNDk1MywgMTQ5NTYsIDE0OTYwLCAxNDk2MywgCi0gICAgMTQ5NjcsIDE0OTcxLCAwLCAxNDk3NSwgMTQ5NzgsIDE0OTgyLCAwLCAxNDk4NiwgMTQ5ODksIDE0OTkzLCAxNDk5NywgCi0gICAgMTUwMDAsIDE1MDA0LCAxNTAwOCwgMTUwMTIsIDE1MDE2LCAxNTAyMCwgMTUwMjQsIDE1MDI4LCAxNTAzMiwgMTUwMzYsIAotICAgIDE1MDQwLCAxNTA0NCwgMTUwNDgsIDE1MDUyLCAxNTA1NiwgMTUwNjAsIDE1MDY0LCAxNTA2OCwgMTUwNzIsIDAsIDE1MDc1LCAKLSAgICAxNTA3OCwgMTUwODIsIDE1MDg2LCAxNTA5MCwgMTUwOTMsIDE1MDk2LCAxNTA5OSwgMTUxMDMsIDE1MTA3LCAwLCAxNTExMSwgCi0gICAgMTUxMTUsIDE1MTE5LCAxNTEyMywgMTUxMjYsIDAsIDAsIDE1MTI5LCAxNTEzMywgMTUxMzcsIDE1MTQyLCAxNTE0NiwgCi0gICAgMTUxNTEsIDE1MTU1LCAxNTE2MCwgMTUxNjUsIDAsIDE1MTcxLCAxNTE3NSwgMTUxODAsIDAsIDE1MTg1LCAxNTE4OSwgCi0gICAgMTUxOTQsIDE1MTk5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNTIwMywgMTUyMDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDE1MjEzLCAwLCAxNTIxNywgMTUyMjIsIDE1MjI3LCAxNTIzMiwgMCwgMCwgMTUyMzgsIDE1MjQyLCAxNTI0NSwgMTUyNDgsIAotICAgIDE1MjUxLCAxNTI1NCwgMTUyNTcsIDE1MjYwLCAxNTI2MywgMTUyNjYsIDAsIDE1MjY5LCAxNTI3MywgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTUyNzcsIDE1MjgxLCAwLCAxNTI4NSwgMTUyODgsIDE1MjkyLCAKLSAgICAxNTI5NSwgMTUyOTksIDE1MzAyLCAxNTMwNiwgMTUzMTAsIDAsIDE1MzE0LCAxNTMxNywgMTUzMjEsIDAsIDE1MzI1LCAKLSAgICAxNTMyOCwgMTUzMzIsIDE1MzM2LCAxNTMzOSwgMTUzNDMsIDE1MzQ3LCAxNTM1MSwgMTUzNTUsIDE1MzU5LCAxNTM2MywgCi0gICAgMTUzNjcsIDE1MzcxLCAxNTM3NSwgMTUzNzksIDE1MzgzLCAxNTM4NywgMTUzOTEsIDE1Mzk1LCAxNTM5OSwgMTU0MDMsIAotICAgIDE1NDA3LCAxNTQxMSwgMTU0MTQsIDE1NDE4LCAxNTQyMSwgMTU0MjUsIDE1NDI5LCAxNTQzMywgMTU0MzYsIDE1NDM5LCAKLSAgICAxNTQ0MiwgMTU0NDYsIDE1NDUwLCAxNTQ1NCwgMTU0NTgsIDE1NDYyLCAxNTQ2NiwgMTU0NzAsIDE1NDczLCAxNTQ3NiwgMCwgCi0gICAgMCwgMTU0ODAsIDE1NDg0LCAxNTQ4OSwgMTU0OTMsIDE1NDk4LCAxNTUwMiwgMTU1MDcsIDE1NTEyLCAwLCAxNTUxOCwgCi0gICAgMTU1MjIsIDE1NTI3LCAwLCAxNTUzMiwgMTU1MzYsIDE1NTQxLCAxNTU0NiwgMTU1NTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDE1NTU1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNTU2MSwgMTU1NjYsIDE1NTcxLCAxNTU3NiwgMCwgMCwgCi0gICAgMTU1ODIsIDE1NTg2LCAxNTU4OSwgMTU1OTIsIDE1NTk1LCAxNTU5OCwgMTU2MDEsIDE1NjA0LCAxNTYwNywgMTU2MTAsIAotICAgIDE1NjEzLCAxNTYxNywgMTU2MjIsIDE1NjI3LCAxNTYzMywgMTU2MzksIDAsIDAsIDAsIDE1NjQ1LCAxNTY0OSwgMTU2NTUsIAotICAgIDE1NjYxLCAxNTY2NywgMTU2NzIsIDE1Njc4LCAwLCAwLCAxNTY4NCwgMTU2ODgsIDAsIDE1NjkyLCAxNTY5NiwgMTU3MDAsIAotICAgIDE1NzA0LCAxNTcwOCwgMTU3MTIsIDE1NzE2LCAxNTcyMCwgMTU3MjQsIDE1NzI4LCAxNTczMiwgMTU3MzYsIDE1NzQwLCAKLSAgICAxNTc0NCwgMTU3NDgsIDE1NzUyLCAxNTc1NiwgMTU3NjAsIDAsIDAsIDAsIDE1NzY0LCAxNTc3MCwgMTU3NzYsIDE1NzgyLCAKLSAgICAxNTc4OCwgMTU3OTQsIDE1ODAwLCAxNTgwNiwgMTU4MTIsIDE1ODE4LCAxNTgyNCwgMTU4MzAsIDE1ODM4LCAxNTg0NCwgCi0gICAgMTU4NTAsIDE1ODU2LCAxNTg2MiwgMTU4NjgsIDE1ODc0LCAxNTg4MCwgMTU4ODYsIDE1ODkyLCAxNTg5OCwgMTU5MDQsIDAsIAotICAgIDE1OTEwLCAxNTkxNiwgMTU5MjIsIDE1OTI4LCAxNTkzNCwgMTU5NDAsIDE1OTQ0LCAxNTk1MCwgMTU5NTQsIDAsIDE1OTU4LCAKLSAgICAwLCAwLCAxNTk2NCwgMTU5NjgsIDE1OTc0LCAxNTk4MCwgMTU5ODYsIDE1OTkwLCAxNTk5NiwgMCwgMCwgMCwgMTYwMDAsIDAsIAotICAgIDAsIDAsIDAsIDE2MDA0LCAxNjAwOSwgMTYwMTYsIDE2MDIzLCAxNjAzMCwgMTYwMzcsIDAsIDE2MDQ0LCAwLCAxNjA1MSwgCi0gICAgMTYwNTYsIDE2MDYxLCAxNjA2OCwgMTYwNzUsIDE2MDg0LCAxNjA5NSwgMTYxMDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE2MTA5LCAxNjExNiwgMTYxMjMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDE2MTI4LCAxNjEzNCwgMTYxNDAsIDE2MTQ2LCAxNjE1MiwgMTYxNTgsIDE2MTY0LCAxNjE3MCwgCi0gICAgMTYxNzYsIDE2MTgyLCAxNjE4OCwgMTYxOTQsIDE2MjAwLCAxNjIwNiwgMTYyMTIsIDE2MjE4LCAxNjIyNCwgMTYyMzAsIAotICAgIDE2MjM2LCAxNjI0MiwgMTYyNDgsIDE2MjU0LCAxNjI2MCwgMTYyNjYsIDE2MjcyLCAxNjI3OCwgMTYyODQsIDE2MjkwLCAKLSAgICAxNjI5NiwgMTYzMDIsIDE2MzA4LCAxNjMxNCwgMTYzMjAsIDE2MzI1LCAxNjMzMSwgMTYzMzcsIDE2MzQxLCAxNjM0NywgCi0gICAgMTYzNTEsIDE2MzU3LCAxNjM2MywgMTYzNjksIDE2Mzc1LCAxNjM4MSwgMTYzODcsIDE2MzkyLCAxNjM5OCwgMTY0MDIsIAotICAgIDE2NDA3LCAxNjQxMywgMTY0MTksIDE2NDI1LCAxNjQzMCwgMTY0MzYsIDE2NDQyLCAxNjQ0OCwgMTY0NTMsIDE2NDU5LCAwLCAKLSAgICAwLCAwLCAwLCAxNjQ2MywgMTY0NjksIDE2NDc0LCAxNjQ4MCwgMTY0ODUsIDE2NDkzLCAxNjUwMSwgMTY1MDUsIDE2NTA5LCAKLSAgICAxNjUxMywgMTY1MTksIDE2NTI1LCAxNjUzMSwgMTY1MzcsIDE2NTQxLCAxNjU0NSwgMTY1NDksIDE2NTUzLCAxNjU1NywgCi0gICAgMTY1NjAsIDE2NTYzLCAxNjU2NiwgMTY1NjksIDE2NTcyLCAxNjU3NSwgMTY1NzgsIDE2NTgxLCAxNjU4NCwgMTY1ODgsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyMTcwLCAxMjE3NSwgMTIxODAsIDEyMTg1LCAxMjE5MCwgCisgICAgMTIxOTUsIDEyMjAwLCAxMjIwNSwgMTIyMTAsIDEyMjE1LCAxMjIyMCwgMTIyMjUsIDEyMjMwLCAxMjIzNCwgMTIyMzgsIAorICAgIDEyMjQyLCAxMjI0NywgMTIyNTMsIDEyMjU5LCAxMjI2NSwgMTIyNzAsIDEyMjc1LCAxMjI4MCwgMTIyODUsIDEyMjkxLCAKKyAgICAxMjMwMCwgMTIzMDgsIDAsIDEyMzE0LCAxMjMyMCwgMTIzMjQsIDEyMzI4LCAxMjMzMiwgMTIzMzcsIDEyMzQwLCAxMjM0NCwgCisgICAgMTIzNDcsIDEyMzUxLCAxMjM1NCwgMTIzNTgsIDEyMzYyLCAxMjM2NiwgMTIzNzEsIDEyMzc2LCAxMjM3OSwgMTIzODMsIAorICAgIDEyMzg4LCAxMjM5MywgMTIzOTYsIDEyNDAwLCAxMjQwMywgMTI0MDcsIDEyNDExLCAxMjQxNSwgMTI0MTksIDEyNDIzLCAKKyAgICAxMjQyNywgMTI0MzEsIDEyNDM1LCAxMjQzOSwgMTI0NDMsIDEyNDQ3LCAxMjQ1MSwgMTI0NTUsIDEyNDU5LCAxMjQ2MywgCisgICAgMTI0NjcsIDEyNDcxLCAxMjQ3NSwgMTI0NzgsIDEyNDgyLCAxMjQ4NSwgMTI0ODksIDEyNDkzLCAxMjQ5NywgMTI1MDAsIAorICAgIDEyNTAzLCAxMjUwNiwgMTI1MTAsIDEyNTE0LCAxMjUxOCwgMTI1MjIsIDEyNTI2LCAxMjUzMCwgMTI1MzQsIDEyNTM3LCAKKyAgICAxMjU0MCwgMTI1NDUsIDEyNTUwLCAxMjU1NCwgMTI1NTgsIDEyNTYzLCAxMjU2NywgMTI1NzIsIDEyNTc2LCAxMjU4MSwgCisgICAgMTI1ODYsIDEyNTkyLCAxMjU5OCwgMTI2MDQsIDEyNjA4LCAxMjYxMywgMTI2MTksIDEyNjI1LCAxMjYyOSwgMTI2MzQsIAorICAgIDEyNjM4LCAxMjY0NCwgMTI2NDksIDEyNjUyLCAxMjY1OCwgMTI2NjQsIDEyNjY5LCAxMjY3NCwgMTI2ODEsIDEyNjg2LCAKKyAgICAxMjY5MSwgMTI2OTUsIDEyNjk5LCAxMjcwMywgMTI3MDcsIDEyNzExLCAxMjcxNSwgMTI3MTksIDEyNzIzLCAxMjcyOCwgCisgICAgMTI3MzMsIDEyNzM4LCAxMjc0NCwgMTI3NDcsIDEyNzUxLCAxMjc1NSwgMTI3NTgsIDEyNzYxLCAxMjc2NCwgMTI3NjcsIAorICAgIDEyNzcwLCAxMjc3MywgMTI3NzYsIDEyNzc5LCAxMjc4MiwgMTI3ODYsIDEyNzkzLCAxMjc5OCwgMTI4MDIsIDEyODA2LCAKKyAgICAxMjgxMCwgMTI4MTQsIDAsIDEyODE4LCAxMjgyMiwgMTI4MjYsIDEyODMwLCAxMjgzNCwgMTI4NDAsIDEyODQ0LCAwLCAKKyAgICAxMjg0OCwgMTI4NTIsIDEyODU2LCAwLCAxMjg2MCwgMTI4NjMsIDEyODY3LCAxMjg3MCwgMTI4NzQsIDEyODc3LCAxMjg4MSwgCisgICAgMTI4ODUsIDAsIDAsIDEyODg5LCAxMjg5MiwgMCwgMCwgMTI4OTYsIDEyODk5LCAxMjkwMywgMTI5MDYsIDEyOTEwLCAKKyAgICAxMjkxNCwgMTI5MTgsIDEyOTIyLCAxMjkyNiwgMTI5MzAsIDEyOTM0LCAxMjkzOCwgMTI5NDIsIDEyOTQ2LCAxMjk1MCwgCisgICAgMTI5NTQsIDEyOTU4LCAxMjk2MiwgMTI5NjYsIDEyOTcwLCAxMjk3NCwgMTI5NzgsIDAsIDEyOTgxLCAxMjk4NCwgMTI5ODgsIAorICAgIDEyOTkyLCAxMjk5NiwgMTI5OTksIDEzMDAyLCAwLCAxMzAwNSwgMCwgMCwgMCwgMTMwMDksIDEzMDEzLCAxMzAxNywgCisgICAgMTMwMjAsIDAsIDAsIDEzMDIzLCAxMzAyNywgMTMwMzEsIDEzMDM2LCAxMzA0MCwgMTMwNDUsIDEzMDQ5LCAxMzA1NCwgCisgICAgMTMwNTksIDAsIDAsIDEzMDY1LCAxMzA2OSwgMCwgMCwgMTMwNzQsIDEzMDc4LCAxMzA4MywgMTMwODcsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDEzMDkzLCAwLCAwLCAwLCAwLCAxMzA5OSwgMTMxMDMsIDAsIDEzMTA3LCAxMzExMSwgMTMxMTYsIAorICAgIDEzMTIxLCAxMzEyNiwgMCwgMCwgMTMxMzIsIDEzMTM2LCAxMzEzOSwgMTMxNDIsIDEzMTQ1LCAxMzE0OCwgMTMxNTEsIAorICAgIDEzMTU0LCAxMzE1NywgMTMxNjAsIDEzMTYzLCAxMzE3MiwgMTMxODEsIDEzMTg1LCAxMzE4OSwgMTMxOTUsIDEzMjAxLCAKKyAgICAxMzIwNywgMTMyMTMsIDEzMjI3LCAxMzIzNCwgMTMyMzcsIDAsIDAsIDAsIDAsIDAsIDEzMjQxLCAxMzI0NywgMTMyNTEsIDAsIAorICAgIDEzMjU1LCAxMzI1OCwgMTMyNjIsIDEzMjY1LCAxMzI2OSwgMTMyNzIsIDAsIDAsIDAsIDAsIDEzMjc2LCAxMzI4MCwgMCwgMCwgCisgICAgMTMyODQsIDEzMjg4LCAxMzI5MiwgMTMyOTUsIDEzMjk5LCAxMzMwMywgMTMzMDcsIDEzMzExLCAxMzMxNSwgMTMzMTksIAorICAgIDEzMzIzLCAxMzMyNywgMTMzMzEsIDEzMzM1LCAxMzMzOSwgMTMzNDMsIDEzMzQ3LCAxMzM1MSwgMTMzNTUsIDEzMzU5LCAKKyAgICAxMzM2MywgMTMzNjcsIDAsIDEzMzcwLCAxMzM3MywgMTMzNzcsIDEzMzgxLCAxMzM4NSwgMTMzODgsIDEzMzkxLCAwLCAKKyAgICAxMzM5NCwgMTMzOTgsIDAsIDEzNDAyLCAxMzQwNiwgMCwgMTM0MTAsIDEzNDEzLCAwLCAwLCAxMzQxNiwgMCwgMTM0MjAsIAorICAgIDEzNDI1LCAxMzQyOSwgMTM0MzQsIDEzNDM4LCAwLCAwLCAwLCAwLCAxMzQ0MywgMTM0NDgsIDAsIDAsIDEzNDUzLCAxMzQ1OCwgCisgICAgMTM0NjMsIDAsIDAsIDAsIDEzNDY3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzQ3MSwgMTM0NzUsIDEzNDc5LCAxMzQ4MywgCisgICAgMCwgMTM0ODcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzNDkxLCAxMzQ5NSwgMTM0OTgsIDEzNTAxLCAxMzUwNCwgMTM1MDcsIAorICAgIDEzNTEwLCAxMzUxMywgMTM1MTYsIDEzNTE5LCAxMzUyMiwgMTM1MjUsIDEzNTI4LCAxMzUzMSwgMTM1MzQsIDEzNTM5LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzU0MywgMTM1NDcsIDEzNTUxLCAwLCAxMzU1NSwgMTM1NTgsIAorICAgIDEzNTYyLCAxMzU2NSwgMTM1NjksIDEzNTcyLCAxMzU3NiwgMTM1ODAsIDEzNTg0LCAwLCAxMzU4OSwgMTM1OTIsIDEzNTk2LCAKKyAgICAwLCAxMzYwMSwgMTM2MDQsIDEzNjA4LCAxMzYxMSwgMTM2MTUsIDEzNjE5LCAxMzYyMywgMTM2MjcsIDEzNjMxLCAxMzYzNSwgCisgICAgMTM2MzksIDEzNjQzLCAxMzY0NywgMTM2NTEsIDEzNjU1LCAxMzY1OSwgMTM2NjMsIDEzNjY3LCAxMzY3MSwgMTM2NzUsIAorICAgIDEzNjc5LCAxMzY4MywgMCwgMTM2ODYsIDEzNjg5LCAxMzY5MywgMTM2OTcsIDEzNzAxLCAxMzcwNCwgMTM3MDcsIDAsIAorICAgIDEzNzEwLCAxMzcxNCwgMCwgMTM3MTgsIDEzNzIyLCAxMzcyNiwgMTM3MzAsIDEzNzMzLCAwLCAwLCAxMzczNiwgMTM3NDAsIAorICAgIDEzNzQ0LCAxMzc0OSwgMTM3NTMsIDEzNzU4LCAxMzc2MiwgMTM3NjcsIDEzNzcyLCAxMzc3OCwgMCwgMTM3ODQsIDEzNzg4LCAKKyAgICAxMzc5MywgMCwgMTM3OTksIDEzODAzLCAxMzgwOCwgMCwgMCwgMTM4MTIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDEzODE1LCAxMzgyMCwgMTM4MjUsIDEzODMwLCAwLCAwLCAxMzgzNiwgMTM4NDAsIDEzODQzLCAKKyAgICAxMzg0NiwgMTM4NDksIDEzODUyLCAxMzg1NSwgMTM4NTgsIDEzODYxLCAxMzg2NCwgMTM4NjcsIDEzODcxLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzg3NSwgMTM4NzksIDEzODgzLCAwLCAxMzg4NywgMTM4OTAsIAorICAgIDEzODk0LCAxMzg5NywgMTM5MDEsIDEzOTA0LCAxMzkwOCwgMTM5MTIsIDAsIDAsIDEzOTE2LCAxMzkxOSwgMCwgMCwgCisgICAgMTM5MjMsIDEzOTI2LCAxMzkzMCwgMTM5MzMsIDEzOTM3LCAxMzk0MSwgMTM5NDUsIDEzOTQ5LCAxMzk1MywgMTM5NTcsIAorICAgIDEzOTYxLCAxMzk2NSwgMTM5NjksIDEzOTczLCAxMzk3NywgMTM5ODEsIDEzOTg1LCAxMzk4OSwgMTM5OTMsIDEzOTk3LCAKKyAgICAxNDAwMSwgMTQwMDUsIDAsIDE0MDA4LCAxNDAxMSwgMTQwMTUsIDE0MDE5LCAxNDAyMywgMTQwMjYsIDE0MDI5LCAwLCAKKyAgICAxNDAzMiwgMTQwMzYsIDAsIDE0MDQwLCAxNDA0NCwgMTQwNDgsIDE0MDUyLCAxNDA1NSwgMCwgMCwgMTQwNTgsIDE0MDYyLCAKKyAgICAxNDA2NiwgMTQwNzEsIDE0MDc1LCAxNDA4MCwgMTQwODQsIDE0MDg5LCAxNDA5NCwgMCwgMCwgMTQxMDAsIDE0MTA0LCAwLCAKKyAgICAwLCAxNDEwOSwgMTQxMTMsIDE0MTE4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNDEyMiwgMTQxMjgsIDAsIDAsIDAsIDAsIAorICAgIDE0MTM0LCAxNDEzOCwgMCwgMTQxNDIsIDE0MTQ2LCAxNDE1MSwgMTQxNTYsIDE0MTYxLCAwLCAwLCAxNDE2NywgMTQxNzEsIAorICAgIDE0MTc0LCAxNDE3NywgMTQxODAsIDE0MTgzLCAxNDE4NiwgMTQxODksIDE0MTkyLCAxNDE5NSwgMTQxOTgsIDE0MjAxLCAKKyAgICAxNDIwNSwgMTQyMTEsIDE0MjE3LCAxNDIyMywgMTQyMjksIDE0MjM1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAxNDI0MSwgMTQyNDUsIDAsIDE0MjQ5LCAxNDI1MiwgMTQyNTYsIDE0MjU5LCAxNDI2MywgMTQyNjYsIDAsIDAsIDAsIAorICAgIDE0MjcwLCAxNDI3MywgMTQyNzcsIDAsIDE0MjgxLCAxNDI4NCwgMTQyODgsIDE0MjkyLCAwLCAwLCAwLCAxNDI5NSwgCisgICAgMTQyOTksIDAsIDE0MzAzLCAwLCAxNDMwNywgMTQzMTEsIDAsIDAsIDAsIDE0MzE1LCAxNDMxOSwgMCwgMCwgMCwgMTQzMjMsIAorICAgIDE0MzI2LCAxNDMzMCwgMCwgMCwgMCwgMTQzMzMsIDE0MzM2LCAxNDMzOSwgMTQzNDIsIDE0MzQ2LCAxNDM1MCwgMTQzNTQsIAorICAgIDE0MzU4LCAxNDM2MiwgMTQzNjYsIDE0MzcwLCAxNDM3MywgMCwgMCwgMCwgMCwgMTQzNzYsIDE0MzgxLCAxNDM4NSwgCisgICAgMTQzOTAsIDE0Mzk0LCAwLCAwLCAwLCAxNDM5OSwgMTQ0MDMsIDE0NDA4LCAwLCAxNDQxMywgMTQ0MTcsIDE0NDIyLCAKKyAgICAxNDQyNywgMCwgMCwgMTQ0MzEsIDAsIDAsIDAsIDAsIDAsIDAsIDE0NDM0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAxNDQ0MCwgMTQ0NDQsIDE0NDQ3LCAxNDQ1MCwgMTQ0NTMsIDE0NDU2LCAxNDQ1OSwgMTQ0NjIsIAorICAgIDE0NDY1LCAxNDQ2OCwgMTQ0NzEsIDE0NDc1LCAxNDQ4MCwgMTQ0ODUsIDE0NDg5LCAxNDQ5MywgMTQ0OTcsIDE0NTAxLCAKKyAgICAxNDUwNSwgMTQ1MTAsIDE0NTE0LCAwLCAwLCAwLCAwLCAwLCAwLCAxNDUxNywgMTQ1MjEsIDE0NTI1LCAwLCAxNDUyOSwgCisgICAgMTQ1MzIsIDE0NTM2LCAxNDUzOSwgMTQ1NDMsIDE0NTQ2LCAxNDU1MCwgMTQ1NTQsIDAsIDE0NTU4LCAxNDU2MSwgMTQ1NjUsIAorICAgIDAsIDE0NTY5LCAxNDU3MiwgMTQ1NzYsIDE0NTgwLCAxNDU4MywgMTQ1ODcsIDE0NTkxLCAxNDU5NSwgMTQ1OTksIDE0NjAzLCAKKyAgICAxNDYwNywgMTQ2MTEsIDE0NjE1LCAxNDYxOSwgMTQ2MjMsIDE0NjI3LCAxNDYzMSwgMTQ2MzUsIDE0NjM5LCAxNDY0MywgCisgICAgMTQ2NDcsIDE0NjUxLCAxNDY1NSwgMCwgMTQ2NTgsIDE0NjYxLCAxNDY2NSwgMTQ2NjksIDE0NjczLCAxNDY3NiwgMTQ2NzksIAorICAgIDE0NjgyLCAxNDY4NiwgMTQ2OTAsIDAsIDE0Njk0LCAxNDY5OCwgMTQ3MDIsIDE0NzA2LCAxNDcwOSwgMCwgMCwgMCwgCisgICAgMTQ3MTIsIDE0NzE2LCAxNDcyMSwgMTQ3MjUsIDE0NzMwLCAxNDczNCwgMTQ3MzksIDE0NzQ0LCAwLCAxNDc1MCwgMTQ3NTQsIAorICAgIDE0NzU5LCAwLCAxNDc2NCwgMTQ3NjgsIDE0NzczLCAxNDc3OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTQ3ODIsIDE0Nzg2LCAKKyAgICAwLCAxNDc5MiwgMTQ3OTYsIDAsIDAsIDAsIDAsIDAsIDAsIDE0ODAwLCAxNDgwNSwgMTQ4MTAsIDE0ODE1LCAwLCAwLCAKKyAgICAxNDgyMSwgMTQ4MjUsIDE0ODI4LCAxNDgzMSwgMTQ4MzQsIDE0ODM3LCAxNDg0MCwgMTQ4NDMsIDE0ODQ2LCAxNDg0OSwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTQ4NTIsIDE0ODY1LCAxNDg3NywgMTQ4ODksIDE0OTAxLCAxNDkxMywgMTQ5MjUsIAorICAgIDE0OTM3LCAwLCAwLCAxNDk0MSwgMTQ5NDUsIDAsIDE0OTQ5LCAxNDk1MiwgMTQ5NTYsIDE0OTU5LCAxNDk2MywgMTQ5NjYsIAorICAgIDE0OTcwLCAxNDk3NCwgMCwgMTQ5NzgsIDE0OTgxLCAxNDk4NSwgMCwgMTQ5ODksIDE0OTkyLCAxNDk5NiwgMTUwMDAsIAorICAgIDE1MDAzLCAxNTAwNywgMTUwMTEsIDE1MDE1LCAxNTAxOSwgMTUwMjMsIDE1MDI3LCAxNTAzMSwgMTUwMzUsIDE1MDM5LCAKKyAgICAxNTA0MywgMTUwNDcsIDE1MDUxLCAxNTA1NSwgMTUwNTksIDE1MDYzLCAxNTA2NywgMTUwNzEsIDE1MDc1LCAwLCAxNTA3OCwgCisgICAgMTUwODEsIDE1MDg1LCAxNTA4OSwgMTUwOTMsIDE1MDk2LCAxNTA5OSwgMTUxMDIsIDE1MTA2LCAxNTExMCwgMCwgMTUxMTQsIAorICAgIDE1MTE4LCAxNTEyMiwgMTUxMjYsIDE1MTI5LCAwLCAwLCAxNTEzMiwgMTUxMzYsIDE1MTQwLCAxNTE0NSwgMTUxNDksIAorICAgIDE1MTU0LCAxNTE1OCwgMTUxNjMsIDE1MTY4LCAwLCAxNTE3NCwgMTUxNzgsIDE1MTgzLCAwLCAxNTE4OCwgMTUxOTIsIAorICAgIDE1MTk3LCAxNTIwMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTUyMDYsIDE1MjEwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAxNTIxNiwgMCwgMTUyMjAsIDE1MjI1LCAxNTIzMCwgMTUyMzUsIDAsIDAsIDE1MjQxLCAxNTI0NSwgMTUyNDgsIDE1MjUxLCAKKyAgICAxNTI1NCwgMTUyNTcsIDE1MjYwLCAxNTI2MywgMTUyNjYsIDE1MjY5LCAwLCAxNTI3MiwgMTUyNzYsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE1MjgwLCAxNTI4NCwgMCwgMTUyODgsIDE1MjkxLCAxNTI5NSwgCisgICAgMTUyOTgsIDE1MzAyLCAxNTMwNSwgMTUzMDksIDE1MzEzLCAwLCAxNTMxNywgMTUzMjAsIDE1MzI0LCAwLCAxNTMyOCwgCisgICAgMTUzMzEsIDE1MzM1LCAxNTMzOSwgMTUzNDIsIDE1MzQ2LCAxNTM1MCwgMTUzNTQsIDE1MzU4LCAxNTM2MiwgMTUzNjYsIAorICAgIDE1MzcwLCAxNTM3NCwgMTUzNzgsIDE1MzgyLCAxNTM4NiwgMTUzOTAsIDE1Mzk0LCAxNTM5OCwgMTU0MDIsIDE1NDA2LCAKKyAgICAxNTQxMCwgMTU0MTQsIDE1NDE3LCAxNTQyMSwgMTU0MjQsIDE1NDI4LCAxNTQzMiwgMTU0MzYsIDE1NDM5LCAxNTQ0MiwgCisgICAgMTU0NDUsIDE1NDQ5LCAxNTQ1MywgMTU0NTcsIDE1NDYxLCAxNTQ2NSwgMTU0NjksIDE1NDczLCAxNTQ3NiwgMTU0NzksIDAsIAorICAgIDAsIDE1NDgzLCAxNTQ4NywgMTU0OTIsIDE1NDk2LCAxNTUwMSwgMTU1MDUsIDE1NTEwLCAxNTUxNSwgMCwgMTU1MjEsIAorICAgIDE1NTI1LCAxNTUzMCwgMCwgMTU1MzUsIDE1NTM5LCAxNTU0NCwgMTU1NDksIDE1NTUzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAxNTU1OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTU1NjQsIDE1NTY5LCAxNTU3NCwgMTU1NzksIDAsIDAsIAorICAgIDE1NTg1LCAxNTU4OSwgMTU1OTIsIDE1NTk1LCAxNTU5OCwgMTU2MDEsIDE1NjA0LCAxNTYwNywgMTU2MTAsIDE1NjEzLCAKKyAgICAxNTYxNiwgMTU2MjAsIDE1NjI1LCAxNTYzMCwgMTU2MzYsIDE1NjQyLCAwLCAwLCAwLCAxNTY0OCwgMTU2NTIsIDE1NjU4LCAKKyAgICAxNTY2NCwgMTU2NzAsIDE1Njc1LCAxNTY4MSwgMCwgMCwgMTU2ODcsIDE1NjkxLCAwLCAxNTY5NSwgMTU2OTksIDE1NzAzLCAKKyAgICAxNTcwNywgMTU3MTEsIDE1NzE1LCAxNTcxOSwgMTU3MjMsIDE1NzI3LCAxNTczMSwgMTU3MzUsIDE1NzM5LCAxNTc0MywgCisgICAgMTU3NDcsIDE1NzUxLCAxNTc1NSwgMTU3NTksIDE1NzYzLCAwLCAwLCAwLCAxNTc2NywgMTU3NzMsIDE1Nzc5LCAxNTc4NSwgCisgICAgMTU3OTEsIDE1Nzk3LCAxNTgwMywgMTU4MDksIDE1ODE1LCAxNTgyMSwgMTU4MjcsIDE1ODMzLCAxNTg0MSwgMTU4NDcsIAorICAgIDE1ODUzLCAxNTg1OSwgMTU4NjUsIDE1ODcxLCAxNTg3NywgMTU4ODMsIDE1ODg5LCAxNTg5NSwgMTU5MDEsIDE1OTA3LCAwLCAKKyAgICAxNTkxMywgMTU5MTksIDE1OTI1LCAxNTkzMSwgMTU5MzcsIDE1OTQzLCAxNTk0NywgMTU5NTMsIDE1OTU3LCAwLCAxNTk2MSwgCisgICAgMCwgMCwgMTU5NjcsIDE1OTcxLCAxNTk3NywgMTU5ODMsIDE1OTg5LCAxNTk5MywgMTU5OTksIDAsIDAsIDAsIDE2MDAzLCAwLCAKKyAgICAwLCAwLCAwLCAxNjAwNywgMTYwMTIsIDE2MDE5LCAxNjAyNiwgMTYwMzMsIDE2MDQwLCAwLCAxNjA0NywgMCwgMTYwNTQsIAorICAgIDE2MDU5LCAxNjA2NCwgMTYwNzEsIDE2MDc4LCAxNjA4NywgMTYwOTgsIDE2MTA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNjExMiwgMTYxMTksIDE2MTI2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAxNjEzMSwgMTYxMzcsIDE2MTQzLCAxNjE0OSwgMTYxNTUsIDE2MTYxLCAxNjE2NywgMTYxNzMsIAorICAgIDE2MTc5LCAxNjE4NSwgMTYxOTEsIDE2MTk3LCAxNjIwMywgMTYyMDksIDE2MjE1LCAxNjIyMSwgMTYyMjcsIDE2MjMzLCAKKyAgICAxNjIzOSwgMTYyNDUsIDE2MjUxLCAxNjI1NywgMTYyNjMsIDE2MjY5LCAxNjI3NSwgMTYyODEsIDE2Mjg3LCAxNjI5MywgCisgICAgMTYyOTksIDE2MzA1LCAxNjMxMSwgMTYzMTcsIDE2MzIzLCAxNjMyOCwgMTYzMzQsIDE2MzQwLCAxNjM0NCwgMTYzNTAsIAorICAgIDE2MzU0LCAxNjM2MCwgMTYzNjYsIDE2MzcyLCAxNjM3OCwgMTYzODQsIDE2MzkwLCAxNjM5NSwgMTY0MDEsIDE2NDA1LCAKKyAgICAxNjQxMCwgMTY0MTYsIDE2NDIyLCAxNjQyOCwgMTY0MzMsIDE2NDM5LCAxNjQ0NSwgMTY0NTEsIDE2NDU2LCAxNjQ2MiwgMCwgCisgICAgMCwgMCwgMCwgMTY0NjYsIDE2NDcyLCAxNjQ3NywgMTY0ODMsIDE2NDg4LCAxNjQ5NiwgMTY1MDQsIDE2NTA4LCAxNjUxMiwgCisgICAgMTY1MTYsIDE2NTIyLCAxNjUyOCwgMTY1MzQsIDE2NTQwLCAxNjU0NCwgMTY1NDgsIDE2NTUyLCAxNjU1NiwgMTY1NjAsIAorICAgIDE2NTYzLCAxNjU2NiwgMTY1NjksIDE2NTcyLCAxNjU3NSwgMTY1NzgsIDE2NTgxLCAxNjU4NCwgMTY1ODcsIDE2NTkxLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNjU5MiwgMTY1OTcsIDAsIDE2NjA0LCAwLCAwLCAxNjYxMSwgCi0gICAgMTY2MTYsIDAsIDE2NjIxLCAwLCAwLCAxNjYyOCwgMCwgMCwgMCwgMCwgMCwgMCwgMTY2MzMsIDE2NjM4LCAxNjY0MiwgCi0gICAgMTY2NDksIDAsIDE2NjU2LCAxNjY2MSwgMTY2NjYsIDE2NjcxLCAxNjY3OCwgMTY2ODUsIDE2NjkyLCAwLCAxNjY5OSwgCi0gICAgMTY3MDQsIDE2NzA5LCAwLCAxNjcxNiwgMCwgMTY3MjMsIDAsIDAsIDE2NzI4LCAxNjczNSwgMCwgMTY3NDIsIDE2NzQ2LCAKLSAgICAxNjc1MywgMTY3NTcsIDE2NzYyLCAxNjc3MCwgMTY3NzYsIDE2NzgyLCAxNjc4NywgMTY3OTMsIDE2Nzk5LCAxNjgwNSwgCi0gICAgMTY4MTAsIDAsIDE2ODE2LCAxNjgyNCwgMTY4MzEsIDAsIDAsIDE2ODM4LCAxNjg0MywgMTY4NDksIDE2ODU0LCAxNjg2MCwgCi0gICAgMCwgMTY4NjYsIDAsIDE2ODcyLCAxNjg3OSwgMTY4ODYsIDE2ODkzLCAxNjkwMCwgMTY5MDUsIDAsIDAsIDE2OTA5LCAKLSAgICAxNjkxNCwgMTY5MTgsIDE2OTIyLCAxNjkyNiwgMTY5MzAsIDE2OTM0LCAxNjkzOCwgMTY5NDIsIDE2OTQ2LCAwLCAwLCAKLSAgICAxNjk1MCwgMTY5NTYsIDE2OTYyLCAxNjk2OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTY5NzYsIDE2OTgwLCAxNjk5MSwgCi0gICAgMTcwMDYsIDE3MDIxLCAxNzAzMSwgMTcwNDIsIDE3MDU1LCAxNzA2NiwgMTcwNzIsIDE3MDgwLCAxNzA5MCwgMTcwOTYsIAotICAgIDE3MTA0LCAxNzEwOCwgMTcxMTQsIDE3MTIwLCAxNzEyOCwgMTcxMzgsIDE3MTQ2LCAxNzE1OSwgMTcxNjUsIDE3MTczLCAKLSAgICAxNzE4MSwgMTcxOTMsIDE3MjAwLCAxNzIwOCwgMTcyMTYsIDE3MjI0LCAxNzIzMiwgMTcyNDAsIDE3MjQ4LCAxNzI1OCwgCi0gICAgMTcyNjIsIDE3MjY1LCAxNzI2OCwgMTcyNzEsIDE3Mjc0LCAxNzI3NywgMTcyODAsIDE3MjgzLCAxNzI4NiwgMTcyODksIAotICAgIDE3MjkzLCAxNzI5NywgMTczMDEsIDE3MzA1LCAxNzMwOSwgMTczMTMsIDE3MzE3LCAxNzMyMSwgMTczMjUsIDE3MzMwLCAKLSAgICAxNzMzNiwgMTczNDYsIDE3MzYwLCAxNzM3MCwgMTczNzYsIDE3MzgyLCAxNzM5MCwgMTczOTgsIDE3NDA2LCAxNzQxNCwgCi0gICAgMTc0MjAsIDE3NDI2LCAxNzQyOSwgMTc0MzMsIDE3NDM3LCAxNzQ0MSwgMTc0NDUsIDE3NDQ5LCAxNzQ1MywgMCwgMTc0NTcsIAotICAgIDE3NDYxLCAxNzQ2NSwgMTc0NjksIDE3NDczLCAxNzQ3NywgMTc0ODEsIDE3NDg1LCAxNzQ4OSwgMTc0OTMsIDE3NDk3LCAKLSAgICAxNzUwMCwgMTc1MDMsIDE3NTA3LCAxNzUxMSwgMTc1MTUsIDE3NTE4LCAxNzUyMiwgMTc1MjYsIDE3NTMwLCAxNzUzNCwgCi0gICAgMTc1MzgsIDE3NTQyLCAxNzU0NiwgMTc1NTAsIDE3NTUzLCAxNzU1NiwgMTc1NjAsIDE3NTY0LCAxNzU2OCwgMTc1NzEsIAotICAgIDE3NTc0LCAxNzU3NywgMTc1ODEsIDE3NTg2LCAxNzU5MCwgMCwgMCwgMCwgMCwgMTc1OTQsIDE3NTk5LCAxNzYwMywgCi0gICAgMTc2MDgsIDE3NjEyLCAxNzYxNywgMTc2MjIsIDE3NjI4LCAxNzYzMywgMTc2MzksIDE3NjQzLCAxNzY0OCwgMTc2NTIsIAotICAgIDE3NjU3LCAxNzY2NywgMTc2NzMsIDE3Njc5LCAxNzY4NiwgMTc2OTYsIDE3NzAyLCAxNzcwNiwgMTc3MTAsIDE3NzE2LCAKLSAgICAxNzcyMiwgMTc3MzAsIDE3NzM2LCAxNzc0NCwgMTc3NTIsIDE3NzYwLCAxNzc3MCwgMTc3NzgsIDE3Nzg4LCAxNzc5MywgCi0gICAgMTc3OTksIDE3ODA1LCAxNzgxMSwgMTc4MTcsIDE3ODIzLCAxNzgyOSwgMCwgMTc4MzUsIDE3ODQxLCAxNzg0NywgMTc4NTMsIAotICAgIDE3ODU5LCAxNzg2NSwgMTc4NzEsIDE3ODc3LCAxNzg4MywgMTc4ODksIDE3ODk1LCAxNzkwMCwgMTc5MDUsIDE3OTExLCAKLSAgICAxNzkxNywgMTc5MjMsIDE3OTI4LCAxNzkzNCwgMTc5NDAsIDE3OTQ2LCAxNzk1MiwgMTc5NTgsIDE3OTY0LCAxNzk3MCwgCi0gICAgMTc5NzYsIDE3OTgxLCAxNzk4NiwgMTc5OTIsIDE3OTk4LCAxODAwNCwgMTgwMDksIDE4MDE0LCAxODAxOSwgMTgwMjUsIAotICAgIDE4MDMzLCAxODA0MCwgMCwgMTgwNDcsIDE4MDU0LCAxODA2NywgMTgwNzQsIDE4MDgxLCAxODA4OSwgMTgwOTcsIDE4MTAzLCAKLSAgICAxODEwOSwgMTgxMTUsIDE4MTI1LCAxODEzMCwgMTgxMzYsIDE4MTQ2LCAxODE1NiwgMCwgMTgxNjYsIDE4MTc2LCAxODE4NCwgCi0gICAgMTgxOTYsIDE4MjA4LCAxODIxNCwgMTgyMjgsIDE4MjQzLCAxODI0OCwgMTgyNTMsIDE4MjYxLCAxODI2OSwgMTgyNzcsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE2NTk1LCAxNjYwMCwgMCwgMTY2MDcsIDAsIDAsIDE2NjE0LCAKKyAgICAxNjYxOSwgMCwgMTY2MjQsIDAsIDAsIDE2NjMxLCAwLCAwLCAwLCAwLCAwLCAwLCAxNjYzNiwgMTY2NDEsIDE2NjQ1LCAKKyAgICAxNjY1MiwgMCwgMTY2NTksIDE2NjY0LCAxNjY2OSwgMTY2NzQsIDE2NjgxLCAxNjY4OCwgMTY2OTUsIDAsIDE2NzAyLCAKKyAgICAxNjcwNywgMTY3MTIsIDAsIDE2NzE5LCAwLCAxNjcyNiwgMCwgMCwgMTY3MzEsIDE2NzM4LCAwLCAxNjc0NSwgMTY3NDksIAorICAgIDE2NzU2LCAxNjc2MCwgMTY3NjUsIDE2NzczLCAxNjc3OSwgMTY3ODUsIDE2NzkwLCAxNjc5NiwgMTY4MDIsIDE2ODA4LCAKKyAgICAxNjgxMywgMCwgMTY4MTksIDE2ODI3LCAxNjgzNCwgMCwgMCwgMTY4NDEsIDE2ODQ2LCAxNjg1MiwgMTY4NTcsIDE2ODYzLCAKKyAgICAwLCAxNjg2OSwgMCwgMTY4NzUsIDE2ODgyLCAxNjg4OSwgMTY4OTYsIDE2OTAzLCAxNjkwOCwgMCwgMCwgMTY5MTIsIAorICAgIDE2OTE3LCAxNjkyMSwgMTY5MjUsIDE2OTI5LCAxNjkzMywgMTY5MzcsIDE2OTQxLCAxNjk0NSwgMTY5NDksIDAsIDAsIAorICAgIDE2OTUzLCAxNjk1OSwgMTY5NjUsIDE2OTcyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNjk3OSwgMTY5ODMsIDE2OTk0LCAKKyAgICAxNzAwOSwgMTcwMjQsIDE3MDM0LCAxNzA0NSwgMTcwNTgsIDE3MDY5LCAxNzA3NSwgMTcwODMsIDE3MDkzLCAxNzA5OSwgCisgICAgMTcxMDcsIDE3MTExLCAxNzExNywgMTcxMjMsIDE3MTMxLCAxNzE0MSwgMTcxNDksIDE3MTYyLCAxNzE2OCwgMTcxNzYsIAorICAgIDE3MTg0LCAxNzE5NiwgMTcyMDMsIDE3MjExLCAxNzIxOSwgMTcyMjcsIDE3MjM1LCAxNzI0MywgMTcyNTEsIDE3MjYxLCAKKyAgICAxNzI2NSwgMTcyNjgsIDE3MjcxLCAxNzI3NCwgMTcyNzcsIDE3MjgwLCAxNzI4MywgMTcyODYsIDE3Mjg5LCAxNzI5MiwgCisgICAgMTcyOTYsIDE3MzAwLCAxNzMwNCwgMTczMDgsIDE3MzEyLCAxNzMxNiwgMTczMjAsIDE3MzI0LCAxNzMyOCwgMTczMzMsIAorICAgIDE3MzM5LCAxNzM0OSwgMTczNjMsIDE3MzczLCAxNzM3OSwgMTczODUsIDE3MzkzLCAxNzQwMSwgMTc0MDksIDE3NDE3LCAKKyAgICAxNzQyMywgMTc0MjksIDE3NDMyLCAxNzQzNiwgMTc0NDAsIDE3NDQ0LCAxNzQ0OCwgMTc0NTIsIDE3NDU2LCAwLCAxNzQ2MCwgCisgICAgMTc0NjQsIDE3NDY4LCAxNzQ3MiwgMTc0NzYsIDE3NDgwLCAxNzQ4NCwgMTc0ODgsIDE3NDkyLCAxNzQ5NiwgMTc1MDAsIAorICAgIDE3NTAzLCAxNzUwNiwgMTc1MTAsIDE3NTE0LCAxNzUxOCwgMTc1MjEsIDE3NTI1LCAxNzUyOSwgMTc1MzMsIDE3NTM3LCAKKyAgICAxNzU0MSwgMTc1NDUsIDE3NTQ5LCAxNzU1MywgMTc1NTYsIDE3NTU5LCAxNzU2MywgMTc1NjcsIDE3NTcxLCAxNzU3NCwgCisgICAgMTc1NzcsIDE3NTgwLCAxNzU4NCwgMTc1ODksIDE3NTkzLCAwLCAwLCAwLCAwLCAxNzU5NywgMTc2MDIsIDE3NjA2LCAKKyAgICAxNzYxMSwgMTc2MTUsIDE3NjIwLCAxNzYyNSwgMTc2MzEsIDE3NjM2LCAxNzY0MiwgMTc2NDYsIDE3NjUxLCAxNzY1NSwgCisgICAgMTc2NjAsIDE3NjcwLCAxNzY3NiwgMTc2ODIsIDE3Njg5LCAxNzY5OSwgMTc3MDUsIDE3NzA5LCAxNzcxMywgMTc3MTksIAorICAgIDE3NzI1LCAxNzczMywgMTc3MzksIDE3NzQ3LCAxNzc1NSwgMTc3NjMsIDE3NzczLCAxNzc4MSwgMTc3OTEsIDE3Nzk2LCAKKyAgICAxNzgwMiwgMTc4MDgsIDE3ODE0LCAxNzgyMCwgMTc4MjYsIDE3ODMyLCAwLCAxNzgzOCwgMTc4NDQsIDE3ODUwLCAxNzg1NiwgCisgICAgMTc4NjIsIDE3ODY4LCAxNzg3NCwgMTc4ODAsIDE3ODg2LCAxNzg5MiwgMTc4OTgsIDE3OTAzLCAxNzkwOCwgMTc5MTQsIAorICAgIDE3OTIwLCAxNzkyNiwgMTc5MzEsIDE3OTM3LCAxNzk0MywgMTc5NDksIDE3OTU1LCAxNzk2MSwgMTc5NjcsIDE3OTczLCAKKyAgICAxNzk3OSwgMTc5ODQsIDE3OTg5LCAxNzk5NSwgMTgwMDEsIDE4MDA3LCAxODAxMiwgMTgwMTcsIDE4MDIyLCAxODAyOCwgCisgICAgMTgwMzYsIDE4MDQzLCAwLCAxODA1MCwgMTgwNTcsIDE4MDcwLCAxODA3NywgMTgwODQsIDE4MDkyLCAxODEwMCwgMTgxMDYsIAorICAgIDE4MTEyLCAxODExOCwgMTgxMjgsIDE4MTMzLCAxODEzOSwgMTgxNDksIDE4MTU5LCAwLCAxODE2OSwgMTgxNzksIDE4MTg3LCAKKyAgICAxODE5OSwgMTgyMTEsIDE4MjE3LCAxODIzMSwgMTgyNDYsIDE4MjUxLCAxODI1NiwgMTgyNjQsIDE4MjcyLCAxODI4MCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTgyODUsIDE4Mjg4LCAxODI5MiwgMTgyOTYsIDE4MzAwLCAKLSAgICAxODMwNCwgMTgzMDgsIDE4MzEyLCAxODMxNiwgMTgzMjAsIDE4MzI0LCAxODMyOCwgMTgzMzIsIDE4MzM2LCAxODM0MCwgCi0gICAgMTgzNDQsIDE4MzQ4LCAxODM1MiwgMTgzNTYsIDE4MzYwLCAxODM2NCwgMTgzNjcsIDE4MzcwLCAxODM3NCwgMTgzNzgsIAotICAgIDE4MzgyLCAxODM4NSwgMTgzODgsIDE4MzkxLCAxODM5NSwgMTgzOTksIDE4NDAyLCAxODQwNSwgMTg0MDksIDE4NDEyLCAKLSAgICAxODQxNywgMTg0MjAsIDE4NDI0LCAxODQyNywgMTg0MzEsIDE4NDM0LCAxODQzOSwgMTg0NDIsIDE4NDQ2LCAxODQ1MywgCi0gICAgMTg0NTgsIDE4NDYyLCAxODQ2NywgMTg0NzEsIDE4NDc2LCAxODQ4MCwgMTg0ODUsIDE4NDkyLCAxODQ5OCwgMTg1MDMsIAotICAgIDE4NTA3LCAxODUxMSwgMTg1MTUsIDE4NTE5LCAxODUyMywgMTg1MjgsIDE4NTMzLCAxODUzOSwgMTg1NDQsIDE4NTQ5LCAKLSAgICAxODU1MywgMTg1NTYsIDE4NTU5LCAxODU2MiwgMTg1NjUsIDE4NTY4LCAxODU3MSwgMTg1NzQsIDE4NTc3LCAxODU4MCwgCi0gICAgMTg1ODYsIDE4NTkwLCAxODU5NCwgMTg1OTgsIDE4NjAyLCAxODYwNiwgMTg2MTAsIDE4NjE0LCAxODYxOCwgMTg2MjMsIAotICAgIDE4NjI3LCAxODYzMiwgMTg2MzcsIDE4NjQzLCAxODY0OCwgMTg2NTQsIDE4NjYwLCAxODY2NiwgMTg2NzIsIDE4Njc4LCAKLSAgICAxODY4NSwgMTg2OTIsIDE4NzAwLCAxODcwOCwgMTg3MTcsIDE4NzI2LCAxODczNywgMTg3NDcsIDE4NzU3LCAxODc2OCwgCi0gICAgMTg3NzksIDE4Nzg5LCAxODc5OSwgMTg4MDksIDE4ODE5LCAxODgyOSwgMTg4MzksIDE4ODQ5LCAxODg1OSwgMTg4NjcsIAotICAgIDE4ODc0LCAxODg4MCwgMTg4ODcsIDE4ODkyLCAxODg5OCwgMTg5MDQsIDE4OTEwLCAxODkxNiwgMTg5MjIsIDE4OTI4LCAKLSAgICAxODkzMywgMTg5MzksIDE4OTQ1LCAxODk1MSwgMTg5NTcsIDE4OTYyLCAxODk3MCwgMTg5NzcsIDE4OTgzLCAxODk5MCwgCi0gICAgMTg5OTgsIDE5MDA0LCAxOTAxMCwgMTkwMTYsIDE5MDIyLCAxOTAzMCwgMTkwMzgsIDE5MDQ4LCAxOTA1NiwgMTkwNjQsIAotICAgIDE5MDcwLCAxOTA3NSwgMTkwODAsIDE5MDg1LCAxOTA5MCwgMTkwOTUsIDE5MTAwLCAxOTEwNSwgMTkxMTAsIDE5MTE1LCAKLSAgICAxOTEyMSwgMTkxMjcsIDE5MTMzLCAxOTE0MCwgMTkxNDUsIDE5MTUxLCAxOTE1NiwgMTkxNjEsIDE5MTY2LCAxOTE3MSwgCi0gICAgMTkxNzYsIDE5MTgxLCAxOTE4NiwgMTkxOTEsIDE5MTk2LCAxOTIwMSwgMTkyMDYsIDE5MjExLCAxOTIxNiwgMTkyMjEsIAotICAgIDE5MjI2LCAxOTIzMSwgMTkyMzYsIDE5MjQxLCAxOTI0NiwgMTkyNTEsIDE5MjU2LCAxOTI2MSwgMTkyNjYsIDE5MjcxLCAKLSAgICAxOTI3NiwgMTkyODEsIDE5Mjg2LCAxOTI5MSwgMTkyOTYsIDE5MzAxLCAxOTMwNiwgMTkzMTEsIDE5MzE2LCAxOTMyMSwgCi0gICAgMTkzMjYsIDE5MzMxLCAxOTMzNiwgMCwgMTkzNDEsIDAsIDAsIDAsIDAsIDAsIDE5MzQ2LCAwLCAwLCAxOTM1MSwgMTkzNTUsIAotICAgIDE5MzU5LCAxOTM2MywgMTkzNjcsIDE5MzcxLCAxOTM3NSwgMTkzNzksIDE5MzgzLCAxOTM4NywgMTkzOTEsIDE5Mzk1LCAKLSAgICAxOTM5OSwgMTk0MDMsIDE5NDA3LCAxOTQxMSwgMTk0MTUsIDE5NDE5LCAxOTQyMywgMTk0MjcsIDE5NDMxLCAxOTQzNSwgCi0gICAgMTk0MzksIDE5NDQzLCAxOTQ0NywgMTk0NTEsIDE5NDU1LCAxOTQ1OSwgMTk0NjMsIDE5NDY3LCAxOTQ3MSwgMTk0NzUsIAotICAgIDE5NDc5LCAxOTQ4MywgMTk0ODcsIDE5NDkxLCAxOTQ5NSwgMTk0OTksIDE5NTAzLCAxOTUwNywgMTk1MTEsIDE5NTE1LCAKLSAgICAxOTUyMSwgMTk1MjUsIDE5NTMwLCAxOTUzNSwgMTk1MzksIDE5NTQ0LCAxOTU0OSwgMTk1NTMsIDE5NTU3LCAxOTU2MSwgCi0gICAgMTk1NjUsIDE5NTY5LCAxOTU3MywgMTk1NzcsIDE5NTgxLCAxOTU4NSwgMTk1ODksIDE5NTkzLCAxOTU5NywgMTk2MDEsIAotICAgIDE5NjA1LCAxOTYwOSwgMTk2MTMsIDE5NjE3LCAxOTYyMSwgMTk2MjUsIDE5NjI5LCAxOTYzMywgMTk2MzcsIDE5NjQxLCAKLSAgICAxOTY0NSwgMTk2NDksIDE5NjUzLCAxOTY1NywgMTk2NjEsIDE5NjY1LCAxOTY2OSwgMTk2NzMsIDE5Njc3LCAxOTY4MSwgCi0gICAgMTk2ODUsIDE5Njg5LCAxOTY5MywgMTk2OTcsIDE5NzAxLCAxOTcwNSwgMTk3MDksIDE5NzEzLCAxOTcxNywgMTk3MjEsIAotICAgIDE5NzI1LCAxOTcyOSwgMTk3MzMsIDE5NzM3LCAxOTc0MSwgMTk3NDUsIDE5NzQ5LCAxOTc1MywgMTk3NTcsIDE5NzYxLCAKLSAgICAxOTc2NSwgMTk3NjksIDE5NzczLCAxOTc3NywgMTk3ODEsIDE5Nzg1LCAxOTc4OSwgMTk3OTMsIDE5Nzk3LCAxOTgwMSwgCi0gICAgMTk4MDUsIDE5ODA5LCAxOTgxMywgMTk4MTcsIDE5ODIxLCAxOTgyNSwgMTk4MjksIDE5ODMzLCAxOTgzNywgMTk4NDEsIAotICAgIDE5ODQ1LCAxOTg0OSwgMTk4NTMsIDE5ODU3LCAxOTg2MSwgMTk4NjUsIDE5ODY5LCAxOTg3MywgMTk4NzcsIDE5ODgxLCAKLSAgICAxOTg4NSwgMTk4ODksIDE5ODkzLCAxOTg5NywgMTk5MDEsIDE5OTA1LCAxOTkwOSwgMTk5MTMsIDE5OTE3LCAxOTkyMSwgCi0gICAgMTk5MjUsIDE5OTI5LCAxOTkzMywgMTk5MzcsIDE5OTQwLCAxOTk0NCwgMTk5NDcsIDE5OTUxLCAxOTk1NSwgMTk5NTgsIAotICAgIDE5OTYyLCAxOTk2NiwgMTk5NjksIDE5OTczLCAxOTk3NywgMTk5ODEsIDE5OTg1LCAxOTk4OCwgMTk5OTIsIDE5OTk2LCAKLSAgICAyMDAwMCwgMjAwMDQsIDIwMDA4LCAyMDAxMiwgMjAwMTUsIDIwMDE5LCAyMDAyMywgMjAwMjcsIDIwMDMxLCAyMDAzNSwgCi0gICAgMjAwMzksIDIwMDQzLCAyMDA0NywgMjAwNTEsIDIwMDU1LCAyMDA1OSwgMjAwNjMsIDIwMDY3LCAyMDA3MSwgMjAwNzUsIAotICAgIDIwMDc5LCAyMDA4MywgMjAwODcsIDIwMDkxLCAyMDA5NSwgMjAwOTksIDIwMTAzLCAyMDEwNywgMjAxMTEsIDIwMTE1LCAKLSAgICAyMDExOSwgMjAxMjMsIDIwMTI3LCAyMDEzMSwgMjAxMzUsIDIwMTM5LCAyMDE0MywgMjAxNDcsIDIwMTUxLCAyMDE1NSwgCi0gICAgMjAxNTksIDIwMTYzLCAyMDE2NywgMjAxNzEsIDIwMTc1LCAyMDE3OSwgMjAxODMsIDIwMTg3LCAyMDE5MSwgMjAxOTUsIAotICAgIDIwMTk5LCAyMDIwMywgMjAyMDcsIDIwMjExLCAyMDIxNSwgMjAyMTksIDIwMjIzLCAyMDIyNywgMjAyMzEsIDIwMjM1LCAKLSAgICAyMDIzOSwgMjAyNDMsIDIwMjQ3LCAyMDI1MSwgMjAyNTUsIDIwMjU5LCAyMDI2MywgMjAyNjcsIDIwMjcxLCAyMDI3NSwgCi0gICAgMjAyNzksIDIwMjgzLCAyMDI4NywgMjAyOTEsIDIwMjk1LCAyMDI5OSwgMjAzMDMsIDIwMzA3LCAyMDMxMSwgMjAzMTUsIAotICAgIDIwMzE5LCAyMDMyMywgMjAzMjcsIDIwMzMxLCAyMDMzNSwgMjAzMzksIDIwMzQzLCAyMDM0NywgMjAzNTEsIDIwMzU1LCAKLSAgICAyMDM1OSwgMjAzNjMsIDIwMzY3LCAyMDM3MSwgMjAzNzUsIDIwMzc5LCAyMDM4MywgMjAzODcsIDIwMzkxLCAyMDM5NSwgCi0gICAgMjAzOTksIDIwNDAzLCAyMDQwNywgMjA0MTEsIDIwNDE1LCAyMDQxOSwgMjA0MjMsIDIwNDI3LCAyMDQzMSwgMjA0MzUsIAotICAgIDIwNDM5LCAyMDQ0MywgMjA0NDcsIDIwNDUxLCAyMDQ1NSwgMjA0NTksIDIwNDYzLCAyMDQ2NywgMjA0NzEsIDIwNDc1LCAKLSAgICAyMDQ3OSwgMjA0ODMsIDIwNDg3LCAyMDQ5MSwgMjA0OTUsIDIwNDk5LCAyMDUwMywgMjA1MDcsIDIwNTExLCAyMDUxNSwgCi0gICAgMjA1MTksIDIwNTIzLCAyMDUyNywgMjA1MzEsIDIwNTM1LCAyMDUzOSwgMjA1NDMsIDIwNTQ3LCAyMDU1MSwgMjA1NTUsIAotICAgIDIwNTU5LCAyMDU2MywgMjA1NjcsIDIwNTcwLCAyMDU3NCwgMjA1NzgsIDIwNTgyLCAyMDU4NiwgMjA1OTAsIDIwNTk0LCAKLSAgICAyMDU5OCwgMjA2MDIsIDIwNjA2LCAyMDYxMCwgMjA2MTQsIDIwNjE4LCAyMDYyMiwgMjA2MjYsIDIwNjMwLCAyMDYzNCwgCi0gICAgMjA2MzgsIDIwNjQyLCAyMDY0NiwgMjA2NTAsIDIwNjU0LCAyMDY1OCwgMjA2NjIsIDIwNjY1LCAyMDY2OSwgMjA2NzMsIAotICAgIDIwNjc3LCAyMDY4MSwgMjA2ODUsIDIwNjg5LCAyMDY5MywgMjA2OTcsIDIwNzAxLCAyMDcwNSwgMjA3MDksIDIwNzEzLCAKLSAgICAyMDcxNywgMjA3MjEsIDIwNzI1LCAyMDcyOCwgMjA3MzIsIDIwNzM2LCAyMDc0MCwgMjA3NDQsIDIwNzQ4LCAyMDc1MiwgCi0gICAgMjA3NTYsIDIwNzU5LCAyMDc2MywgMjA3NjcsIDIwNzcxLCAyMDc3NSwgMjA3NzksIDIwNzgzLCAyMDc4NywgMjA3OTEsIAotICAgIDIwNzk1LCAyMDc5OSwgMjA4MDMsIDIwODA3LCAyMDgxMSwgMjA4MTUsIDIwODE5LCAyMDgyMywgMjA4MjcsIDIwODMxLCAKLSAgICAyMDgzNSwgMjA4MzksIDIwODQzLCAyMDg0NywgMjA4NTEsIDAsIDIwODU1LCAyMDg1OSwgMjA4NjMsIDIwODY3LCAwLCAwLCAKLSAgICAyMDg3MSwgMjA4NzUsIDIwODc5LCAyMDg4MywgMjA4ODcsIDIwODkxLCAyMDg5NSwgMCwgMjA4OTksIDAsIDIwOTAzLCAKLSAgICAyMDkwNywgMjA5MTEsIDIwOTE1LCAwLCAwLCAyMDkxOSwgMjA5MjMsIDIwOTI3LCAyMDkzMSwgMjA5MzUsIDIwOTM5LCAKLSAgICAyMDk0MywgMjA5NDcsIDIwOTUxLCAyMDk1NSwgMjA5NTksIDIwOTYzLCAyMDk2NywgMjA5NzEsIDIwOTc1LCAyMDk3OSwgCi0gICAgMjA5ODMsIDIwOTg3LCAyMDk5MSwgMjA5OTUsIDIwOTk5LCAyMTAwMywgMjEwMDcsIDIxMDEwLCAyMTAxNCwgMjEwMTgsIAotICAgIDIxMDIyLCAyMTAyNiwgMjEwMzAsIDIxMDM0LCAyMTAzOCwgMjEwNDIsIDIxMDQ2LCAyMTA1MCwgMjEwNTQsIDIxMDU4LCAKLSAgICAyMTA2MiwgMjEwNjYsIDIxMDcwLCAyMTA3NCwgMjEwNzgsIDAsIDIxMDgyLCAyMTA4NiwgMjEwOTAsIDIxMDk0LCAwLCAwLCAKLSAgICAyMTA5OCwgMjExMDEsIDIxMTA1LCAyMTEwOSwgMjExMTMsIDIxMTE3LCAyMTEyMSwgMjExMjUsIDIxMTI5LCAyMTEzMywgCi0gICAgMjExMzcsIDIxMTQxLCAyMTE0NSwgMjExNDksIDIxMTUzLCAyMTE1NywgMjExNjEsIDIxMTY2LCAyMTE3MSwgMjExNzYsIAotICAgIDIxMTgyLCAyMTE4OCwgMjExOTMsIDIxMTk4LCAyMTIwNCwgMjEyMDcsIDIxMjExLCAyMTIxNSwgMjEyMTksIDIxMjIzLCAKLSAgICAyMTIyNywgMjEyMzEsIDIxMjM1LCAwLCAyMTIzOSwgMjEyNDMsIDIxMjQ3LCAyMTI1MSwgMCwgMCwgMjEyNTUsIDIxMjU5LCAKLSAgICAyMTI2MywgMjEyNjcsIDIxMjcxLCAyMTI3NSwgMjEyNzksIDAsIDIxMjgzLCAwLCAyMTI4NywgMjEyOTEsIDIxMjk1LCAKLSAgICAyMTI5OSwgMCwgMCwgMjEzMDMsIDIxMzA3LCAyMTMxMSwgMjEzMTUsIDIxMzE5LCAyMTMyMywgMjEzMjcsIDIxMzMxLCAKLSAgICAyMTMzNSwgMjEzNDAsIDIxMzQ1LCAyMTM1MCwgMjEzNTYsIDIxMzYyLCAyMTM2NywgMCwgMjEzNzIsIDIxMzc2LCAyMTM4MCwgCi0gICAgMjEzODQsIDIxMzg4LCAyMTM5MiwgMjEzOTYsIDIxNDAwLCAyMTQwNCwgMjE0MDgsIDIxNDEyLCAyMTQxNiwgMjE0MjAsIAotICAgIDIxNDI0LCAyMTQyOCwgMjE0MzIsIDIxNDM2LCAyMTQzOSwgMjE0NDMsIDIxNDQ3LCAyMTQ1MSwgMjE0NTUsIDIxNDU5LCAKLSAgICAyMTQ2MywgMjE0NjcsIDIxNDcxLCAyMTQ3NSwgMjE0NzksIDIxNDgzLCAyMTQ4NywgMjE0OTEsIDIxNDk1LCAyMTQ5OSwgCi0gICAgMjE1MDMsIDIxNTA3LCAyMTUxMSwgMjE1MTUsIDIxNTE5LCAyMTUyMywgMjE1MjcsIDIxNTMxLCAyMTUzNSwgMjE1MzksIAotICAgIDIxNTQzLCAyMTU0NywgMjE1NTEsIDIxNTU1LCAyMTU1OSwgMjE1NjMsIDIxNTY3LCAyMTU3MSwgMjE1NzUsIDIxNTc5LCAKLSAgICAyMTU4MywgMjE1ODcsIDIxNTkxLCAyMTU5NSwgMCwgMjE1OTksIDIxNjAzLCAyMTYwNywgMjE2MTEsIDAsIDAsIDIxNjE1LCAKLSAgICAyMTYxOSwgMjE2MjMsIDIxNjI3LCAyMTYzMSwgMjE2MzUsIDIxNjM5LCAyMTY0MywgMjE2NDcsIDIxNjUxLCAyMTY1NSwgCi0gICAgMjE2NTksIDIxNjYzLCAyMTY2NywgMjE2NzEsIDIxNjc1LCAyMTY3OSwgMjE2ODMsIDIxNjg3LCAyMTY5MSwgMjE2OTUsIAotICAgIDIxNjk5LCAyMTcwMywgMjE3MDcsIDIxNzExLCAyMTcxNSwgMjE3MTksIDIxNzIzLCAyMTcyNywgMjE3MzEsIDIxNzM1LCAKLSAgICAyMTczOSwgMjE3NDMsIDIxNzQ3LCAyMTc1MSwgMjE3NTUsIDIxNzU5LCAyMTc2MywgMjE3NjcsIDIxNzcxLCAyMTc3NSwgCi0gICAgMjE3NzksIDIxNzgzLCAyMTc4NywgMjE3OTEsIDIxNzk1LCAyMTc5OSwgMjE4MDMsIDIxODA3LCAyMTgxMSwgMjE4MTUsIAotICAgIDIxODE5LCAyMTgyMywgMjE4MjcsIDIxODMxLCAyMTgzNSwgMjE4MzksIDIxODQyLCAyMTg0NiwgMjE4NTAsIDIxODU0LCAKLSAgICAyMTg1OCwgMjE4NjIsIDIxODY2LCAyMTg3MCwgMjE4NzQsIDIxODc4LCAwLCAwLCAyMTg4MiwgMjE4OTEsIDIxODk3LCAKLSAgICAyMTkwMiwgMjE5MDYsIDIxOTA5LCAyMTkxNCwgMjE5MTcsIDIxOTIwLCAyMTkyMywgMjE5MjgsIDIxOTMyLCAyMTkzNywgCi0gICAgMjE5NDAsIDIxOTQzLCAyMTk0NiwgMjE5NDksIDIxOTUyLCAyMTk1NSwgMjE5NTgsIDIxOTYxLCAyMTk2NCwgMjE5NjgsIAotICAgIDIxOTcyLCAyMTk3NiwgMjE5ODAsIDIxOTg0LCAyMTk4OCwgMjE5OTIsIDIxOTk2LCAyMjAwMCwgMjIwMDQsIDAsIDAsIDAsIAotICAgIDIyMDEwLCAyMjAxNiwgMjIwMjAsIDIyMDI0LCAyMjAyOCwgMjIwMzQsIDIyMDM4LCAyMjA0MiwgMjIwNDYsIDIyMDUyLCAKLSAgICAyMjA1NiwgMjIwNjAsIDIyMDY0LCAyMjA3MCwgMjIwNzQsIDIyMDc4LCAyMjA4MiwgMjIwODgsIDIyMDk0LCAyMjEwMCwgCi0gICAgMjIxMDgsIDIyMTE0LCAyMjEyMCwgMjIxMjYsIDIyMTMyLCAyMjEzOCwgMCwgMCwgMCwgMCwgMCwgMCwgMjIxNDQsIDIyMTQ3LCAKLSAgICAyMjE1MCwgMjIxNTMsIDIyMTU2LCAyMjE1OSwgMjIxNjMsIDIyMTY3LCAyMjE3MCwgMjIxNzQsIDIyMTc4LCAyMjE4MiwgCi0gICAgMjIxODYsIDIyMTkwLCAyMjE5MywgMjIxOTcsIDIyMjAxLCAyMjIwNSwgMjIyMDksIDIyMjEzLCAyMjIxNywgMjIyMjEsIAotICAgIDIyMjI1LCAyMjIyOSwgMjIyMzMsIDIyMjM3LCAyMjI0MCwgMjIyNDQsIDIyMjQ4LCAyMjI1MiwgMjIyNTYsIDIyMjU5LCAKLSAgICAyMjI2MywgMjIyNjcsIDIyMjcxLCAyMjI3NSwgMjIyNzksIDIyMjgzLCAyMjI4NywgMjIyOTEsIDIyMjk1LCAyMjI5OSwgCi0gICAgMjIzMDMsIDIyMzA3LCAyMjMxMSwgMjIzMTQsIDIyMzE4LCAyMjMyMiwgMjIzMjYsIDIyMzMwLCAyMjMzNCwgMjIzMzgsIAotICAgIDIyMzQyLCAyMjM0NiwgMjIzNTAsIDIyMzU0LCAyMjM1OCwgMjIzNjIsIDIyMzY2LCAyMjM3MCwgMjIzNzQsIDIyMzc4LCAKLSAgICAyMjM4MiwgMjIzODYsIDIyMzkwLCAyMjM5NCwgMjIzOTgsIDIyNDAyLCAyMjQwNiwgMjI0MTAsIDIyNDE0LCAyMjQxOCwgCi0gICAgMjI0MjIsIDIyNDI2LCAyMjQzMCwgMjI0MzQsIDIyNDM4LCAyMjQ0MiwgMjI0NDYsIDIyNDUwLCAyMjQ1MywgMjI0NTcsIAotICAgIDIyNDYxLCAyMjQ2NSwgMjI0NjksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIyNDczLCAyMjQ3NywgCi0gICAgMjI0ODAsIDIyNDg0LCAyMjQ4NywgMjI0OTEsIDIyNDk0LCAyMjQ5OCwgMjI1MDQsIDIyNTA5LCAyMjUxMywgMjI1MTYsIAotICAgIDIyNTIwLCAyMjUyNCwgMjI1MjksIDIyNTMzLCAyMjUzOCwgMjI1NDIsIDIyNTQ3LCAyMjU1MSwgMjI1NTYsIDIyNTYwLCAKLSAgICAyMjU2NSwgMjI1NzEsIDIyNTc1LCAyMjU4MCwgMjI1ODQsIDIyNTg5LCAyMjU5NSwgMjI1OTksIDIyNjA1LCAyMjYxMSwgCi0gICAgMjI2MTUsIDIyNjIwLCAyMjYyOCwgMjI2MzYsIDIyNjQzLCAyMjY0OCwgMjI2NTMsIDIyNjYyLCAyMjY2OSwgMjI2NzYsIAotICAgIDIyNjgxLCAyMjY4NywgMjI2OTEsIDIyNjk1LCAyMjY5OSwgMjI3MDMsIDIyNzA3LCAyMjcxMSwgMjI3MTUsIDIyNzE5LCAKLSAgICAyMjcyMywgMjI3MjcsIDIyNzMzLCAyMjczOCwgMjI3NDMsIDIyNzQ2LCAyMjc1MCwgMjI3NTQsIDIyNzU5LCAyMjc2MywgCi0gICAgMjI3NjgsIDIyNzcyLCAyMjc3NywgMjI3ODEsIDIyNzg2LCAyMjc5MCwgMjI3OTUsIDIyNzk5LCAyMjgwNCwgMjI4MDgsIAotICAgIDIyODEzLCAyMjgxOSwgMjI4MjMsIDIyODI4LCAyMjgzMywgMjI4MzcsIDIyODQxLCAyMjg0NSwgMjI4NDksIDIyODUyLCAKLSAgICAyMjg1NiwgMjI4NjIsIDIyODY3LCAyMjg3MiwgMjI4NzYsIDIyODgwLCAyMjg4NCwgMjI4ODksIDIyODkzLCAyMjg5OCwgCi0gICAgMjI5MDIsIDIyOTA3LCAyMjkxMCwgMjI5MTQsIDIyOTE4LCAyMjkyMywgMjI5MjcsIDIyOTMyLCAyMjkzNiwgMjI5NDEsIAotICAgIDIyOTQ3LCAyMjk1MSwgMjI5NTUsIDIyOTU5LCAyMjk2MywgMjI5NjcsIDIyOTcxLCAyMjk3NSwgMjI5NzksIDIyOTgzLCAKLSAgICAyMjk4NywgMjI5OTEsIDIyOTk3LCAyMzAwMCwgMjMwMDQsIDIzMDA4LCAyMzAxMywgMjMwMTcsIDIzMDIyLCAyMzAyNiwgCi0gICAgMjMwMzEsIDIzMDM1LCAyMzA0MCwgMjMwNDQsIDIzMDQ5LCAyMzA1MywgMjMwNTgsIDIzMDYyLCAyMzA2NywgMjMwNzMsIAotICAgIDIzMDc3LCAyMzA4MSwgMjMwODcsIDIzMDkzLCAyMzA5OSwgMjMxMDUsIDIzMTA5LCAyMzExMywgMjMxMTcsIDIzMTIxLCAKLSAgICAyMzEyNSwgMjMxMjksIDIzMTM1LCAyMzEzOSwgMjMxNDMsIDIzMTQ3LCAyMzE1MiwgMjMxNTYsIDIzMTYxLCAyMzE2NSwgCi0gICAgMjMxNzAsIDIzMTc0LCAyMzE3OSwgMjMxODMsIDIzMTg4LCAyMzE5MiwgMjMxOTcsIDIzMjAxLCAyMzIwNiwgMjMyMTIsIAotICAgIDIzMjE2LCAyMzIyMiwgMjMyMjYsIDIzMjMwLCAyMzIzNCwgMjMyMzgsIDIzMjQyLCAyMzI0NiwgMjMyNTIsIDIzMjU1LCAKLSAgICAyMzI1OSwgMjMyNjMsIDIzMjY4LCAyMzI3MiwgMjMyNzcsIDIzMjgxLCAyMzI4NiwgMjMyOTAsIDIzMjk1LCAyMzI5OSwgCi0gICAgMjMzMDQsIDIzMzA4LCAyMzMxMywgMjMzMTcsIDIzMzIyLCAyMzMyOCwgMjMzMzEsIDIzMzM1LCAyMzMzOSwgMjMzNDQsIAotICAgIDIzMzQ5LCAyMzM1MywgMjMzNTcsIDIzMzYxLCAyMzM2NSwgMjMzNjksIDIzMzczLCAyMzM3OSwgMjMzODIsIDIzMzg2LCAKLSAgICAyMzM5MCwgMjMzOTUsIDIzMzk5LCAyMzQwNCwgMjM0MDgsIDIzNDEzLCAyMzQxOSwgMjM0MjMsIDIzNDI4LCAyMzQzMiwgCi0gICAgMjM0MzYsIDIzNDQwLCAyMzQ0NCwgMjM0NDgsIDIzNDUyLCAyMzQ1NiwgMjM0NjIsIDIzNDY2LCAyMzQ3MCwgMjM0NzQsIAotICAgIDIzNDc5LCAyMzQ4MywgMjM0ODgsIDIzNDkyLCAyMzQ5NywgMjM1MDEsIDIzNTA2LCAyMzUxMCwgMjM1MTUsIDIzNTE5LCAKLSAgICAyMzUyNCwgMjM1MjgsIDIzNTMzLCAyMzUzNiwgMjM1NDAsIDIzNTQ0LCAyMzU0OCwgMjM1NTIsIDIzNTU2LCAyMzU2MCwgCi0gICAgMjM1NjQsIDIzNTY4LCAyMzU3NCwgMjM1NzcsIDIzNTgxLCAyMzU4NSwgMjM1OTAsIDIzNTk0LCAyMzU5OSwgMjM2MDMsIAotICAgIDIzNjA4LCAyMzYxMiwgMjM2MTcsIDIzNjIxLCAyMzYyNiwgMjM2MzAsIDIzNjM1LCAyMzYzOSwgMjM2NDQsIDIzNjUwLCAKLSAgICAyMzY1NCwgMjM2NjAsIDIzNjY0LCAyMzY3MCwgMjM2NzYsIDIzNjgyLCAyMzY4OCwgMjM2OTQsIDIzNzAwLCAyMzcwNiwgCi0gICAgMjM3MTIsIDIzNzE2LCAyMzcyMCwgMjM3MjQsIDIzNzI4LCAyMzczMiwgMjM3MzYsIDIzNzQwLCAyMzc0NCwgMjM3NDksIAotICAgIDIzNzUzLCAyMzc1OCwgMjM3NjIsIDIzNzY3LCAyMzc3MSwgMjM3NzYsIDIzNzgwLCAyMzc4NSwgMjM3ODksIDIzNzk0LCAKLSAgICAyMzc5OCwgMjM4MDMsIDIzODA3LCAyMzgxMSwgMjM4MTUsIDIzODE5LCAyMzgyMywgMjM4MjcsIDIzODMxLCAyMzgzNywgCi0gICAgMjM4NDAsIDIzODQ0LCAyMzg0OCwgMjM4NTMsIDIzODU3LCAyMzg2MiwgMjM4NjYsIDIzODcxLCAyMzg3NSwgMjM4ODAsIAotICAgIDIzODg0LCAyMzg4OSwgMjM4OTMsIDIzODk4LCAyMzkwMiwgMjM5MDcsIDIzOTEzLCAyMzkxNywgMjM5MjMsIDIzOTI4LCAKLSAgICAyMzkzNCwgMjM5MzgsIDIzOTQ0LCAyMzk0OSwgMjM5NTMsIDIzOTU3LCAyMzk2MSwgMjM5NjUsIDIzOTY5LCAyMzk3NCwgCi0gICAgMjM5NzcsIDIzOTgxLCAyMzk4NiwgMjM5OTAsIDIzOTk1LCAyMzk5OCwgMjQwMDIsIDI0MDA2LCAyNDAxMCwgMjQwMTQsIAotICAgIDI0MDE4LCAyNDAyMiwgMjQwMjYsIDI0MDMwLCAyNDAzNCwgMjQwMzgsIDI0MDQyLCAyNDA0NywgMjQwNTEsIDI0MDU1LCAKLSAgICAyNDA2MSwgMjQwNjUsIDI0MDcxLCAyNDA3NSwgMjQwODEsIDI0MDg1LCAyNDA4OSwgMjQwOTMsIDI0MDk3LCAyNDEwMSwgCi0gICAgMjQxMDYsIDI0MTEwLCAyNDExNCwgMjQxMTgsIDI0MTIyLCAyNDEyNiwgMjQxMzAsIDI0MTM0LCAyNDEzOCwgMjQxNDIsIAotICAgIDI0MTQ2LCAyNDE1MiwgMjQxNTgsIDI0MTY0LCAyNDE3MCwgMjQxNzYsIDI0MTgxLCAyNDE4NywgMjQxOTMsIDI0MTk5LCAKLSAgICAyNDIwMywgMjQyMDcsIDI0MjExLCAyNDIxNSwgMjQyMTksIDI0MjIzLCAyNDIyNywgMjQyMzEsIDI0MjM1LCAyNDIzOSwgCi0gICAgMjQyNDMsIDI0MjQ3LCAyNDI1MSwgMjQyNTYsIDI0MjYxLCAyNDI2NiwgMjQyNzAsIDI0Mjc0LCAyNDI3OCwgMjQyODIsIAotICAgIDI0Mjg2LCAyNDI5MCwgMjQyOTQsIDI0Mjk4LCAyNDMwMiwgMjQzMDYsIDI0MzEyLCAyNDMxOCwgMjQzMjQsIDI0MzMwLCAKLSAgICAyNDMzNiwgMjQzNDIsIDI0MzQ4LCAyNDM1NCwgMjQzNjAsIDI0MzY0LCAyNDM2OCwgMjQzNzIsIDI0Mzc2LCAyNDM4MCwgCi0gICAgMjQzODQsIDI0Mzg4LCAyNDM5NCwgMjQ0MDAsIDI0NDA2LCAyNDQxMiwgMjQ0MTgsIDI0NDI0LCAyNDQzMCwgMjQ0MzYsIAotICAgIDI0NDQyLCAyNDQ0NywgMjQ0NTIsIDI0NDU3LCAyNDQ2MiwgMjQ0NjgsIDI0NDc0LCAyNDQ4MCwgMjQ0ODYsIDI0NDkyLCAKLSAgICAyNDQ5OCwgMjQ1MDQsIDI0NTA5LCAyNDUxNSwgMjQ1MjEsIDI0NTI3LCAyNDUzMiwgMjQ1MzgsIDI0NTQ0LCAyNDU1MCwgCi0gICAgMjQ1NTUsIDI0NTYwLCAyNDU2NSwgMjQ1NzAsIDI0NTc1LCAyNDU4MCwgMjQ1ODUsIDI0NTkwLCAyNDU5NSwgMjQ2MDAsIAotICAgIDI0NjA1LCAyNDYxMCwgMjQ2MTQsIDI0NjE5LCAyNDYyNCwgMjQ2MjksIDI0NjM0LCAyNDYzOSwgMjQ2NDQsIDI0NjQ5LCAKLSAgICAyNDY1NCwgMjQ2NTksIDI0NjY0LCAyNDY2OSwgMjQ2NzQsIDI0Njc5LCAyNDY4NCwgMjQ2ODksIDI0Njk0LCAyNDY5OSwgCi0gICAgMjQ3MDQsIDI0NzA5LCAyNDcxNCwgMjQ3MTksIDI0NzI0LCAyNDcyOSwgMjQ3MzQsIDI0NzM5LCAyNDc0NCwgMjQ3NDksIAotICAgIDI0NzU0LCAyNDc1OSwgMjQ3NjMsIDI0NzY4LCAyNDc3MywgMjQ3NzgsIDI0NzgzLCAyNDc4OCwgMjQ3OTMsIDI0Nzk4LCAKLSAgICAyNDgwMywgMjQ4MDgsIDI0ODEzLCAyNDgxOCwgMjQ4MjMsIDI0ODI4LCAyNDgzMywgMjQ4MzgsIDI0ODQzLCAyNDg0OCwgCi0gICAgMjQ4NTMsIDI0ODU4LCAyNDg2MywgMjQ4NjgsIDI0ODczLCAyNDg3OCwgMjQ4ODMsIDI0ODg4LCAyNDg5MiwgMjQ4OTcsIAotICAgIDI0OTAyLCAyNDkwNywgMjQ5MTIsIDI0OTE3LCAyNDkyMSwgMjQ5MjYsIDI0OTMxLCAyNDkzNiwgMjQ5NDEsIDI0OTQ2LCAKLSAgICAyNDk1MCwgMjQ5NTUsIDI0OTYxLCAyNDk2NiwgMjQ5NzEsIDI0OTc2LCAyNDk4MSwgMjQ5ODcsIDI0OTkyLCAyNDk5NywgCi0gICAgMjUwMDIsIDI1MDA3LCAyNTAxMiwgMjUwMTcsIDI1MDIyLCAyNTAyNywgMjUwMzIsIDI1MDM3LCAyNTA0MiwgMjUwNDcsIAotICAgIDI1MDUyLCAyNTA1NywgMjUwNjIsIDI1MDY3LCAyNTA3MiwgMjUwNzcsIDI1MDgyLCAyNTA4NywgMjUwOTIsIDI1MDk3LCAKLSAgICAyNTEwMiwgMjUxMDcsIDI1MTEyLCAyNTExNywgMjUxMjIsIDI1MTI3LCAyNTEzMiwgMjUxMzcsIDI1MTQyLCAyNTE0NywgCi0gICAgMjUxNTIsIDI1MTU3LCAyNTE2MiwgMjUxNjcsIDI1MTcyLCAyNTE3NywgMjUxODIsIDI1MTg3LCAyNTE5MiwgMjUxOTcsIAotICAgIDI1MjAyLCAyNTIwNywgMjUyMTMsIDI1MjE4LCAyNTIyMywgMjUyMjgsIDI1MjMzLCAyNTIzOCwgMjUyNDMsIDI1MjQ4LCAKLSAgICAyNTI1MywgMjUyNTgsIDI1MjYzLCAyNTI2OCwgMjUyNzIsIDI1Mjc3LCAyNTI4MiwgMjUyODcsIDI1MjkyLCAyNTI5NywgCi0gICAgMjUzMDIsIDI1MzA3LCAyNTMxMiwgMjUzMTcsIDI1MzIyLCAyNTMyNywgMjUzMzIsIDI1MzM3LCAyNTM0MiwgMjUzNDcsIAotICAgIDI1MzUyLCAyNTM1NywgMjUzNjIsIDI1MzY3LCAyNTM3MiwgMjUzNzcsIDI1MzgyLCAyNTM4NywgMjUzOTIsIDI1Mzk3LCAKLSAgICAyNTQwMiwgMjU0MDgsIDI1NDEyLCAyNTQxNiwgMjU0MjAsIDI1NDI0LCAyNTQyOCwgMjU0MzIsIDI1NDM2LCAyNTQ0MCwgCi0gICAgMjU0NDYsIDI1NDUyLCAyNTQ1OCwgMjU0NjQsIDI1NDcwLCAyNTQ3NiwgMjU0ODIsIDI1NDg5LCAyNTQ5NSwgMjU1MDAsIAotICAgIDI1NTA1LCAyNTUxMCwgMjU1MTUsIDI1NTIwLCAyNTUyNSwgMjU1MzAsIDI1NTM1LCAyNTU0MCwgMjU1NDUsIDI1NTUwLCAKLSAgICAyNTU1NSwgMjU1NjAsIDI1NTY1LCAyNTU3MCwgMjU1NzUsIDI1NTgwLCAyNTU4NSwgMjU1OTAsIDI1NTk1LCAyNTYwMCwgCi0gICAgMjU2MDUsIDI1NjEwLCAyNTYxNSwgMjU2MjAsIDI1NjI1LCAyNTYzMCwgMjU2MzUsIDAsIDAsIDAsIDI1NjQyLCAyNTY1MiwgCi0gICAgMjU2NTYsIDI1NjYzLCAyNTY2NywgMjU2NzEsIDI1Njc1LCAyNTY4MywgMjU2ODcsIDI1NjkyLCAyNTY5NywgMjU3MDIsIAotICAgIDI1NzA2LCAyNTcxMSwgMjU3MTYsIDI1NzE5LCAyNTcyMywgMjU3MjcsIDI1NzM2LCAyNTc0MCwgMjU3NDQsIDI1NzUwLCAKLSAgICAyNTc1NCwgMjU3NTgsIDI1NzY2LCAyNTc3MCwgMjU3NzgsIDI1Nzg0LCAyNTc5MCwgMjU3OTYsIDI1ODAyLCAyNTgxMiwgCi0gICAgMjU4MTgsIDI1ODIyLCAyNTgzMSwgMjU4MzQsIDI1ODQwLCAyNTg0NCwgMjU4NTAsIDI1ODU1LCAyNTg2MSwgMjU4NjksIAotICAgIDI1ODc1LCAyNTg4MSwgMjU4ODksIDI1ODk1LCAyNTg5OSwgMjU5MDMsIDI1OTEzLCAyNTkxOSwgMjU5MjMsIDI1OTMzLCAKLSAgICAyNTkzOSwgMjU5NDMsIDI1OTQ3LCAyNTk1NCwgMjU5NjEsIDI1OTY2LCAyNTk3MSwgMjU5ODAsIDI1OTg0LCAyNTk4OCwgCi0gICAgMjU5OTIsIDI2MDAwLCAyNjAwNywgMjYwMTEsIDI2MDE1LCAyNjAxOSwgMjYwMjMsIDI2MDI3LCAyNjAzMSwgMjYwMzUsIAotICAgIDI2MDM5LCAyNjA0MywgMjYwNDcsIDI2MDUxLCAyNjA1NiwgMjYwNjEsIDI2MDY2LCAyNjA3MCwgMjYwNzQsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2MDc4LCAyNjA4MiwgMjYwODYsIDI2MDkwLCAyNjA5NCwgCi0gICAgMjYwOTksIDI2MTA0LCAyNjEwOSwgMjYxMTQsIDI2MTE4LCAyNjEyMiwgMjYxMjcsIDI2MTMxLCAwLCAyNjEzNSwgMjYxNDAsIAotICAgIDI2MTQ1LCAyNjE0OSwgMjYxNTMsIDI2MTU4LCAyNjE2MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMjYxNjgsIDI2MTcyLCAyNjE3NiwgMjYxODAsIDI2MTg0LCAyNjE4OSwgMjYxOTQsIDI2MTk5LCAyNjIwNCwgMjYyMDgsIAotICAgIDI2MjEyLCAyNjIxNywgMjYyMjEsIDI2MjI1LCAyNjIyOSwgMjYyMzQsIDI2MjM5LCAyNjI0MywgMjYyNDcsIDI2MjUyLCAKLSAgICAyNjI1NywgMjYyNjIsIDI2MjY4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNjI3MywgMjYyNzcsIDI2MjgxLCAKLSAgICAyNjI4NSwgMjYyODksIDI2Mjk0LCAyNjI5OSwgMjYzMDQsIDI2MzA5LCAyNjMxMywgMjYzMTcsIDI2MzIyLCAyNjMyNiwgCi0gICAgMjYzMzAsIDI2MzM0LCAyNjMzOSwgMjYzNDQsIDI2MzQ4LCAyNjM1MiwgMjYzNTcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDI2MzYyLCAyNjM2NiwgMjYzNzAsIDI2Mzc0LCAyNjM3OCwgMjYzODMsIDI2Mzg4LCAyNjM5MywgCi0gICAgMjYzOTgsIDI2NDAyLCAyNjQwNiwgMjY0MTEsIDI2NDE1LCAwLCAyNjQxOSwgMjY0MjQsIDI2NDI5LCAwLCAyNjQzMywgCi0gICAgMjY0MzgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2NDQzLCAyNjQ0NiwgMjY0NTAsIDI2NDU0LCAKLSAgICAyNjQ1OCwgMjY0NjIsIDI2NDY2LCAyNjQ3MCwgMjY0NzQsIDI2NDc4LCAyNjQ4MiwgMjY0ODYsIDI2NDkwLCAyNjQ5NCwgCi0gICAgMjY0OTgsIDI2NTAyLCAyNjUwNiwgMjY1MTAsIDI2NTEzLCAyNjUxNywgMjY1MjEsIDI2NTI1LCAyNjUyOSwgMjY1MzMsIAotICAgIDI2NTM3LCAyNjU0MSwgMjY1NDUsIDI2NTQ5LCAyNjU1MywgMjY1NTcsIDI2NTYxLCAyNjU2NSwgMjY1NjgsIDI2NTcxLCAKLSAgICAyNjU3NSwgMjY1NzksIDI2NTg1LCAyNjU5MSwgMjY1OTcsIDI2NjAzLCAyNjYwOSwgMjY2MTUsIDI2NjIxLCAyNjYyNywgCi0gICAgMjY2MzMsIDI2NjM5LCAyNjY0NSwgMjY2NTEsIDI2NjU3LCAyNjY2MywgMjY2NzIsIDI2NjgxLCAyNjY4NywgMjY2OTMsIAotICAgIDI2Njk5LCAyNjcwNCwgMjY3MDgsIDI2NzEzLCAyNjcxOCwgMjY3MjMsIDI2NzI3LCAyNjczMiwgMjY3MzcsIDI2NzQyLCAKLSAgICAyNjc0NiwgMjY3NTEsIDI2NzU1LCAyNjc2MCwgMjY3NjUsIDI2NzcwLCAyNjc3NSwgMjY3NzksIDI2NzgzLCAyNjc4NywgCi0gICAgMjY3OTEsIDI2Nzk1LCAyNjc5OSwgMjY4MDMsIDI2ODA3LCAyNjgxMSwgMjY4MTUsIDI2ODIxLCAyNjgyNSwgMjY4MjksIAotICAgIDI2ODMzLCAyNjgzNywgMjY4NDEsIDI2ODQ5LCAyNjg1NSwgMjY4NTksIDI2ODY1LCAyNjg2OSwgMjY4NzUsIDI2ODc5LCAwLCAKLSAgICAwLCAyNjg4MywgMjY4ODcsIDI2ODkwLCAyNjg5MywgMjY4OTYsIDI2ODk5LCAyNjkwMiwgMjY5MDUsIDI2OTA4LCAyNjkxMSwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMjY5MTQsIDI2OTIyLCAyNjkzMCwgMjY5MzgsIDI2OTQ2LCAyNjk1NCwgMjY5NjIsIDI2OTcwLCAKLSAgICAyNjk3OCwgMjY5ODYsIDAsIDAsIDAsIDAsIDAsIDAsIDI2OTk0LCAyNjk5NywgMjcwMDAsIDI3MDAzLCAyNzAwOCwgMjcwMTEsIAotICAgIDI3MDE2LCAyNzAyMywgMjcwMzEsIDI3MDM2LCAyNzA0MywgMjcwNDYsIDI3MDUzLCAyNzA2MCwgMjcwNjcsIDAsIDI3MDcxLCAKLSAgICAyNzA3NSwgMjcwNzgsIDI3MDgxLCAyNzA4NCwgMjcwODcsIDI3MDkwLCAyNzA5MywgMjcwOTYsIDI3MDk5LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAyNzEwMiwgMjcxMDUsIDI3MTA4LCAyNzExMSwgMjcxMTQsIDI3MTE3LCAyNzEyMSwgMjcxMjUsIDI3MTI5LCAKLSAgICAyNzEzMiwgMjcxMzYsIDI3MTQwLCAyNzE0MywgMjcxNDcsIDI3MTUxLCAyNzE1NCwgMjcxNTgsIDI3MTYxLCAyNzE2NSwgCi0gICAgMjcxNjksIDI3MTczLCAyNzE3NywgMjcxODEsIDI3MTg0LCAyNzE4NywgMjcxOTEsIDI3MTk1LCAyNzE5OCwgMjcyMDIsIAotICAgIDI3MjA2LCAyNzIxMCwgMjcyMTQsIDI3MjE4LCAyNzIyMiwgMjcyMjYsIDI3MjMwLCAyNzIzNywgMjcyNDIsIDI3MjQ3LCAKLSAgICAyNzI1MiwgMjcyNTcsIDI3MjYzLCAyNzI2OSwgMjcyNzUsIDI3MjgxLCAyNzI4NiwgMjcyOTIsIDI3Mjk4LCAyNzMwMywgCi0gICAgMjczMDksIDI3MzE1LCAyNzMyMSwgMjczMjcsIDI3MzMzLCAyNzMzOCwgMjczNDQsIDI3MzQ5LCAyNzM1NSwgMjczNjEsIAotICAgIDI3MzY3LCAyNzM3MywgMjczNzksIDI3Mzg0LCAyNzM4OSwgMjczOTUsIDI3NDAxLCAyNzQwNiwgMjc0MTIsIDI3NDE3LCAKLSAgICAyNzQyMywgMjc0MjgsIDI3NDMzLCAyNzQzOSwgMjc0NDUsIDI3NDUxLCAyNzQ1NywgMjc0NjMsIDI3NDY5LCAyNzQ3NSwgCi0gICAgMjc0ODEsIDI3NDg3LCAyNzQ5MywgMjc0OTksIDI3NTA1LCAyNzUxMCwgMjc1MTUsIDI3NTIwLCAyNzUyNiwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMjc1MzIsIDI3NTQxLCAyNzU1MCwgMjc1NTgsIDI3NTY2LCAyNzU3NiwgMjc1ODQsIDI3NTkzLCAKLSAgICAyNzYwMCwgMjc2MDcsIDI3NjE0LCAyNzYyMiwgMjc2MzAsIDI3NjM4LCAyNzY0NiwgMjc2NTQsIDI3NjYyLCAyNzY3MCwgCi0gICAgMjc2NzgsIDI3Njg1LCAyNzY5MywgMjc3MDEsIDI3NzA5LCAyNzcxNywgMjc3MjUsIDI3NzM1LCAyNzc0NSwgMjc3NTUsIAotICAgIDI3NzY1LCAyNzc3NSwgMjc3ODUsIDI3Nzk1LCAyNzgwNSwgMjc4MTUsIDI3ODI1LCAyNzgzNSwgMjc4NDUsIDI3ODU1LCAKLSAgICAyNzg2NSwgMjc4NzMsIDI3ODgxLCAyNzg5MSwgMjc4OTksIDAsIDAsIDAsIDAsIDAsIDI3OTA5LCAyNzkxMywgMjc5MTcsIAotICAgIDI3OTIxLCAyNzkyNSwgMjc5MjksIDI3OTMzLCAyNzkzNywgMjc5NDEsIDI3OTQ1LCAyNzk0OSwgMjc5NTMsIDI3OTU3LCAKLSAgICAyNzk2MSwgMjc5NjUsIDI3OTY5LCAyNzk3MywgMjc5NzcsIDI3OTgxLCAyNzk4NSwgMjc5ODksIDI3OTkzLCAyNzk5NywgCi0gICAgMjgwMDEsIDI4MDA3LCAyODAxMSwgMjgwMTcsIDI4MDIxLCAyODAyNywgMjgwMzEsIDI4MDM3LCAyODA0MSwgMjgwNDUsIAotICAgIDI4MDQ5LCAyODA1MywgMjgwNTcsIDI4MDYxLCAyODA2NywgMjgwNzMsIDI4MDc5LCAyODA4NSwgMjgwOTAsIDI4MDk2LCAKLSAgICAyODEwMiwgMjgxMDgsIDI4MTE0LCAyODEyMCwgMjgxMjYsIDI4MTMzLCAyODEzOSwgMjgxNDQsIDI4MTQ5LCAyODE1MywgCi0gICAgMjgxNTcsIDI4MTYxLCAyODE2NSwgMjgxNjksIDI4MTczLCAyODE3NywgMjgxODMsIDI4MTg5LCAyODE5NSwgMjgyMDAsIAotICAgIDI4MjA3LCAyODIxMiwgMjgyMTcsIDI4MjIzLCAyODIyOCwgMjgyMzUsIDI4MjQyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAyODI0OSwgMjgyNTUsIDI4MjU5LCAyODI2NCwgMjgyNjksIDI4Mjc0LCAyODI3OSwgMjgyODQsIDI4Mjg5LCAKLSAgICAyODI5NCwgMjgyOTksIDI4MzA0LCAyODMwOSwgMjgzMTQsIDI4MzE5LCAyODMyNCwgMjgzMjgsIDI4MzMyLCAyODMzNywgCi0gICAgMjgzNDIsIDI4MzQ3LCAyODM1MSwgMjgzNTUsIDI4MzU5LCAyODM2NCwgMjgzNjksIDI4Mzc0LCAyODM3OSwgMjgzODMsIDAsIAotICAgIDAsIDAsIDI4Mzg3LCAyODM5MiwgMjgzOTcsIDI4NDAyLCAyODQwOCwgMjg0MTQsIDI4NDIwLCAyODQyNiwgMjg0MzEsIAotICAgIDI4NDM2LCAyODQ0MiwgMjg0NDgsIDAsIDAsIDAsIDAsIDI4NDU1LCAyODQ2MCwgMjg0NjYsIDI4NDcyLCAyODQ3OCwgCi0gICAgMjg0ODMsIDI4NDg4LCAyODQ5MywgMjg0OTgsIDI4NTA0LCAyODUwOSwgMjg1MTQsIDAsIDAsIDAsIDAsIDI4NTE5LCAwLCAwLCAKLSAgICAwLCAyODUyNCwgMjg1MjksIDI4NTM0LCAyODUzOSwgMjg1NDMsIDI4NTQ3LCAyODU1MSwgMjg1NTUsIDI4NTU5LCAyODU2MywgCi0gICAgMjg1NjcsIDI4NTcxLCAyODU3NSwgMjg1ODAsIDI4NTg2LCAyODU5MiwgMjg1OTgsIDI4NjAzLCAyODYwOCwgMjg2MTQsIAotICAgIDI4NjIwLCAyODYyNiwgMjg2MzEsIDI4NjM3LCAyODY0MiwgMjg2NDgsIDI4NjU0LCAyODY1OSwgMjg2NjUsIDI4NjcxLCAKLSAgICAyODY3NywgMjg2ODIsIDI4Njg3LCAyODY5MiwgMjg2OTgsIDI4NzA0LCAyODcwOSwgMjg3MTUsIDI4NzIwLCAyODcyNiwgCi0gICAgMjg3MzEsIDI4NzM3LCAwLCAwLCAyODc0MywgMjg3NDksIDI4NzU1LCAyODc2MSwgMjg3NjcsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDI4NzczLCAyODc4MCwgMjg3ODcsIDI4NzkzLCAyODgwMCwgMjg4MDcsIDI4ODEzLCAyODgyMCwgCi0gICAgMjg4MjcsIDI4ODM0LCAyODg0MCwgMjg4NDYsIDI4ODUzLCAyODg1OSwgMjg4NjUsIDI4ODcyLCAyODg3OSwgMjg4ODUsIAotICAgIDI4ODkyLCAyODg5OSwgMjg5MDUsIDI4OTExLCAyODkxOCwgMjg5MjQsIDI4OTMwLCAyODkzNywgMjg5NDMsIDI4OTUwLCAKLSAgICAyODk1NywgMjg5NjQsIDI4OTcxLCAyODk3OCwgMjg5ODUsIDI4OTkxLCAyODk5OCwgMjkwMDUsIDI5MDExLCAyOTAxOCwgCi0gICAgMjkwMjUsIDI5MDMyLCAyOTAzOSwgMjkwNDYsIDI5MDUzLCAyOTA2MCwgMCwgMCwgMCwgMCwgMjkwNjcsIDI5MDc1LCAKLSAgICAyOTA4MiwgMjkwODksIDI5MDk1LCAyOTEwMiwgMjkxMDgsIDI5MTE1LCAyOTEyMSwgMjkxMjgsIDI5MTM1LCAyOTE0MiwgCi0gICAgMjkxNDksIDI5MTU2LCAyOTE2MywgMjkxNzAsIDI5MTc3LCAyOTE4NCwgMjkxOTEsIDI5MTk4LCAyOTIwNSwgMjkyMTEsIAotICAgIDI5MjE4LCAyOTIyNSwgMjkyMzIsIDI5MjM4LCAwLCAwLCAwLCAwLCAwLCAwLCAyOTI0NCwgMjkyNTAsIDI5MjU1LCAyOTI2MCwgCi0gICAgMjkyNjUsIDI5MjcwLCAyOTI3NSwgMjkyODAsIDI5Mjg1LCAyOTI5MCwgMjkyOTUsIDAsIDAsIDAsIDI5MzAxLCAyOTMwNywgCi0gICAgMjkzMTMsIDI5MzE3LCAyOTMyMywgMjkzMjksIDI5MzM1LCAyOTM0MSwgMjkzNDcsIDI5MzUzLCAyOTM1OSwgMjkzNjUsIAotICAgIDI5MzcxLCAyOTM3NywgMjkzODMsIDI5Mzg5LCAyOTM5NSwgMjk0MDEsIDI5NDA3LCAyOTQxMSwgMjk0MTcsIDI5NDIzLCAKLSAgICAyOTQyOSwgMjk0MzUsIDI5NDQxLCAyOTQ0NywgMjk0NTMsIDI5NDU5LCAyOTQ2NSwgMjk0NzEsIDI5NDc3LCAyOTQ4MywgCi0gICAgMjk0ODksIDI5NDk1LCAyOTUwMSwgMjk1MDUsIDI5NTEwLCAyOTUxNSwgMjk1MjAsIDI5NTI0LCAyOTUyOSwgMjk1MzMsIAotICAgIDI5NTM4LCAyOTU0MywgMjk1NDgsIDI5NTUyLCAyOTU1NywgMjk1NjIsIDI5NTY3LCAyOTU3MiwgMjk1NzcsIDI5NTgxLCAKLSAgICAyOTU4NSwgMjk1OTAsIDI5NTk1LCAyOTU5OSwgMjk2MDMsIDI5NjA3LCAyOTYxMiwgMjk2MTcsIDI5NjIyLCAyOTYyNywgMCwgCi0gICAgMCwgMjk2MzMsIDI5NjM3LCAyOTY0NCwgMjk2NDksIDI5NjU1LCAyOTY2MSwgMjk2NjYsIDI5NjcyLCAyOTY3OCwgMjk2ODMsIAotICAgIDI5Njg5LCAyOTY5NSwgMjk3MDEsIDI5NzA2LCAyOTcxMiwgMjk3MTcsIDI5NzIyLCAyOTcyOCwgMjk3MzMsIDI5NzM5LCAKLSAgICAyOTc0NCwgMjk3NTAsIDI5NzU2LCAyOTc2MiwgMjk3NjgsIDI5NzcyLCAyOTc3NywgMjk3ODIsIDI5Nzg4LCAyOTc5NCwgCi0gICAgMjk3OTksIDI5ODA1LCAyOTgxMSwgMjk4MTUsIDI5ODIwLCAyOTgyNSwgMjk4MjksIDI5ODM0LCAyOTgzOSwgMjk4NDQsIAotICAgIDI5ODQ5LCAyOTg1NSwgMjk4NjEsIDI5ODY2LCAyOTg3MSwgMjk4NzYsIDI5ODgwLCAyOTg4NSwgMjk4ODksIDI5ODk0LCAKLSAgICAyOTg5OCwgMjk5MDMsIDI5OTA4LCAyOTkxMywgMjk5MTgsIDI5OTI0LCAyOTkzMCwgMjk5MzcsIDI5OTQ3LCAyOTk1NiwgCi0gICAgMjk5NjMsIDI5OTY5LCAyOTk3OSwgMjk5ODQsIDI5OTkwLCAwLCAyOTk5NSwgMzAwMDAsIDMwMDA1LCAzMDAxMywgMzAwMTksIAotICAgIDMwMDI3LCAzMDAzMiwgMzAwMzgsIDMwMDQ0LCAzMDA1MCwgMzAwNTUsIDMwMDYxLCAzMDA2NiwgMzAwNzMsIDMwMDc5LCAKLSAgICAzMDA4NCwgMzAwOTAsIDMwMDk2LCAzMDEwMiwgMzAxMDksIDMwMTE2LCAzMDEyMywgMzAxMjgsIDMwMTMzLCAzMDE0MCwgCi0gICAgMzAxNDcsIDMwMTU0LCAzMDE2MSwgMzAxNjgsIDAsIDAsIDMwMTc1LCAzMDE4MiwgMzAxODksIDMwMTk1LCAzMDIwMSwgCi0gICAgMzAyMDcsIDMwMjEzLCAzMDIxOSwgMzAyMjUsIDMwMjMxLCAzMDIzNywgMCwgMCwgMCwgMCwgMCwgMCwgMzAyNDMsIDMwMjQ5LCAKLSAgICAzMDI1NCwgMzAyNTksIDMwMjY0LCAzMDI2OSwgMzAyNzQsIDMwMjc5LCAzMDI4NCwgMzAyODksIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDMwMjk0LCAzMDI5OSwgMzAzMDQsIDMwMzA5LCAzMDMxNCwgMzAzMTksIDMwMzI0LCAzMDMzMywgMzAzNDAsIDMwMzQ1LCAKLSAgICAzMDM1MCwgMzAzNTUsIDMwMzYwLCAzMDM2NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTgyODgsIDE4MjkxLCAxODI5NSwgMTgyOTksIDE4MzAzLCAKKyAgICAxODMwNywgMTgzMTEsIDE4MzE1LCAxODMxOSwgMTgzMjMsIDE4MzI3LCAxODMzMSwgMTgzMzUsIDE4MzM5LCAxODM0MywgCisgICAgMTgzNDcsIDE4MzUxLCAxODM1NSwgMTgzNTksIDE4MzYzLCAxODM2NywgMTgzNzAsIDE4MzczLCAxODM3NywgMTgzODEsIAorICAgIDE4Mzg1LCAxODM4OCwgMTgzOTEsIDE4Mzk0LCAxODM5OCwgMTg0MDIsIDE4NDA1LCAxODQwOCwgMTg0MTIsIDE4NDE1LCAKKyAgICAxODQyMCwgMTg0MjMsIDE4NDI3LCAxODQzMCwgMTg0MzQsIDE4NDM3LCAxODQ0MiwgMTg0NDUsIDE4NDQ5LCAxODQ1NiwgCisgICAgMTg0NjEsIDE4NDY1LCAxODQ3MCwgMTg0NzQsIDE4NDc5LCAxODQ4MywgMTg0ODgsIDE4NDk1LCAxODUwMSwgMTg1MDYsIAorICAgIDE4NTEwLCAxODUxNCwgMTg1MTgsIDE4NTIyLCAxODUyNiwgMTg1MzEsIDE4NTM2LCAxODU0MiwgMTg1NDcsIDE4NTUyLCAKKyAgICAxODU1NiwgMTg1NTksIDE4NTYyLCAxODU2NSwgMTg1NjgsIDE4NTcxLCAxODU3NCwgMTg1NzcsIDE4NTgwLCAxODU4MywgCisgICAgMTg1ODksIDE4NTkzLCAxODU5NywgMTg2MDEsIDE4NjA1LCAxODYwOSwgMTg2MTMsIDE4NjE3LCAxODYyMSwgMTg2MjYsIAorICAgIDE4NjMwLCAxODYzNSwgMTg2NDAsIDE4NjQ2LCAxODY1MSwgMTg2NTcsIDE4NjYzLCAxODY2OSwgMTg2NzUsIDE4NjgxLCAKKyAgICAxODY4OCwgMTg2OTUsIDE4NzAzLCAxODcxMSwgMTg3MjAsIDE4NzI5LCAxODc0MCwgMTg3NTAsIDE4NzYwLCAxODc3MSwgCisgICAgMTg3ODIsIDE4NzkyLCAxODgwMiwgMTg4MTIsIDE4ODIyLCAxODgzMiwgMTg4NDIsIDE4ODUyLCAxODg2MiwgMTg4NzAsIAorICAgIDE4ODc3LCAxODg4MywgMTg4OTAsIDE4ODk1LCAxODkwMSwgMTg5MDcsIDE4OTEzLCAxODkxOSwgMTg5MjUsIDE4OTMxLCAKKyAgICAxODkzNiwgMTg5NDIsIDE4OTQ4LCAxODk1NCwgMTg5NjAsIDE4OTY1LCAxODk3MywgMTg5ODAsIDE4OTg2LCAxODk5MywgCisgICAgMTkwMDEsIDE5MDA3LCAxOTAxMywgMTkwMTksIDE5MDI1LCAxOTAzMywgMTkwNDEsIDE5MDUxLCAxOTA1OSwgMTkwNjcsIAorICAgIDE5MDczLCAxOTA3OCwgMTkwODMsIDE5MDg4LCAxOTA5MywgMTkwOTgsIDE5MTAzLCAxOTEwOCwgMTkxMTMsIDE5MTE4LCAKKyAgICAxOTEyNCwgMTkxMzAsIDE5MTM2LCAxOTE0MywgMTkxNDgsIDE5MTU0LCAxOTE1OSwgMTkxNjQsIDE5MTY5LCAxOTE3NCwgCisgICAgMTkxNzksIDE5MTg0LCAxOTE4OSwgMTkxOTQsIDE5MTk5LCAxOTIwNCwgMTkyMDksIDE5MjE0LCAxOTIxOSwgMTkyMjQsIAorICAgIDE5MjI5LCAxOTIzNCwgMTkyMzksIDE5MjQ0LCAxOTI0OSwgMTkyNTQsIDE5MjU5LCAxOTI2NCwgMTkyNjksIDE5Mjc0LCAKKyAgICAxOTI3OSwgMTkyODQsIDE5Mjg5LCAxOTI5NCwgMTkyOTksIDE5MzA0LCAxOTMwOSwgMTkzMTQsIDE5MzE5LCAxOTMyNCwgCisgICAgMTkzMjksIDE5MzM0LCAxOTMzOSwgMCwgMTkzNDQsIDAsIDAsIDAsIDAsIDAsIDE5MzQ5LCAwLCAwLCAxOTM1NCwgMTkzNTgsIAorICAgIDE5MzYyLCAxOTM2NiwgMTkzNzAsIDE5Mzc0LCAxOTM3OCwgMTkzODIsIDE5Mzg2LCAxOTM5MCwgMTkzOTQsIDE5Mzk4LCAKKyAgICAxOTQwMiwgMTk0MDYsIDE5NDEwLCAxOTQxNCwgMTk0MTgsIDE5NDIyLCAxOTQyNiwgMTk0MzAsIDE5NDM0LCAxOTQzOCwgCisgICAgMTk0NDIsIDE5NDQ2LCAxOTQ1MCwgMTk0NTQsIDE5NDU4LCAxOTQ2MiwgMTk0NjYsIDE5NDcwLCAxOTQ3NCwgMTk0NzgsIAorICAgIDE5NDgyLCAxOTQ4NiwgMTk0OTAsIDE5NDk0LCAxOTQ5OCwgMTk1MDIsIDE5NTA2LCAxOTUxMCwgMTk1MTQsIDE5NTE4LCAKKyAgICAxOTUyNCwgMTk1MjgsIDE5NTMzLCAxOTUzOCwgMTk1NDIsIDE5NTQ3LCAxOTU1MiwgMTk1NTYsIDE5NTYwLCAxOTU2NCwgCisgICAgMTk1NjgsIDE5NTcyLCAxOTU3NiwgMTk1ODAsIDE5NTg0LCAxOTU4OCwgMTk1OTIsIDE5NTk2LCAxOTYwMCwgMTk2MDQsIAorICAgIDE5NjA4LCAxOTYxMiwgMTk2MTYsIDE5NjIwLCAxOTYyNCwgMTk2MjgsIDE5NjMyLCAxOTYzNiwgMTk2NDAsIDE5NjQ0LCAKKyAgICAxOTY0OCwgMTk2NTIsIDE5NjU2LCAxOTY2MCwgMTk2NjQsIDE5NjY4LCAxOTY3MiwgMTk2NzYsIDE5NjgwLCAxOTY4NCwgCisgICAgMTk2ODgsIDE5NjkyLCAxOTY5NiwgMTk3MDAsIDE5NzA0LCAxOTcwOCwgMTk3MTIsIDE5NzE2LCAxOTcyMCwgMTk3MjQsIAorICAgIDE5NzI4LCAxOTczMiwgMTk3MzYsIDE5NzQwLCAxOTc0NCwgMTk3NDgsIDE5NzUyLCAxOTc1NiwgMTk3NjAsIDE5NzY0LCAKKyAgICAxOTc2OCwgMTk3NzIsIDE5Nzc2LCAxOTc4MCwgMTk3ODQsIDE5Nzg4LCAxOTc5MiwgMTk3OTYsIDE5ODAwLCAxOTgwNCwgCisgICAgMTk4MDgsIDE5ODEyLCAxOTgxNiwgMTk4MjAsIDE5ODI0LCAxOTgyOCwgMTk4MzIsIDE5ODM2LCAxOTg0MCwgMTk4NDQsIAorICAgIDE5ODQ4LCAxOTg1MiwgMTk4NTYsIDE5ODYwLCAxOTg2NCwgMTk4NjgsIDE5ODcyLCAxOTg3NiwgMTk4ODAsIDE5ODg0LCAKKyAgICAxOTg4OCwgMTk4OTIsIDE5ODk2LCAxOTkwMCwgMTk5MDQsIDE5OTA4LCAxOTkxMiwgMTk5MTYsIDE5OTIwLCAxOTkyNCwgCisgICAgMTk5MjgsIDE5OTMyLCAxOTkzNiwgMTk5NDAsIDE5OTQzLCAxOTk0NywgMTk5NTAsIDE5OTU0LCAxOTk1OCwgMTk5NjEsIAorICAgIDE5OTY1LCAxOTk2OSwgMTk5NzIsIDE5OTc2LCAxOTk4MCwgMTk5ODQsIDE5OTg4LCAxOTk5MSwgMTk5OTUsIDE5OTk5LCAKKyAgICAyMDAwMywgMjAwMDcsIDIwMDExLCAyMDAxNSwgMjAwMTgsIDIwMDIyLCAyMDAyNiwgMjAwMzAsIDIwMDM0LCAyMDAzOCwgCisgICAgMjAwNDIsIDIwMDQ2LCAyMDA1MCwgMjAwNTQsIDIwMDU4LCAyMDA2MiwgMjAwNjYsIDIwMDcwLCAyMDA3NCwgMjAwNzgsIAorICAgIDIwMDgyLCAyMDA4NiwgMjAwOTAsIDIwMDk0LCAyMDA5OCwgMjAxMDIsIDIwMTA2LCAyMDExMCwgMjAxMTQsIDIwMTE4LCAKKyAgICAyMDEyMiwgMjAxMjYsIDIwMTMwLCAyMDEzNCwgMjAxMzgsIDIwMTQyLCAyMDE0NiwgMjAxNTAsIDIwMTU0LCAyMDE1OCwgCisgICAgMjAxNjIsIDIwMTY2LCAyMDE3MCwgMjAxNzQsIDIwMTc4LCAyMDE4MiwgMjAxODYsIDIwMTkwLCAyMDE5NCwgMjAxOTgsIAorICAgIDIwMjAyLCAyMDIwNiwgMjAyMTAsIDIwMjE0LCAyMDIxOCwgMjAyMjIsIDIwMjI2LCAyMDIzMCwgMjAyMzQsIDIwMjM4LCAKKyAgICAyMDI0MiwgMjAyNDYsIDIwMjUwLCAyMDI1NCwgMjAyNTgsIDIwMjYyLCAyMDI2NiwgMjAyNzAsIDIwMjc0LCAyMDI3OCwgCisgICAgMjAyODIsIDIwMjg2LCAyMDI5MCwgMjAyOTQsIDIwMjk4LCAyMDMwMiwgMjAzMDYsIDIwMzEwLCAyMDMxNCwgMjAzMTgsIAorICAgIDIwMzIyLCAyMDMyNiwgMjAzMzAsIDIwMzM0LCAyMDMzOCwgMjAzNDIsIDIwMzQ2LCAyMDM1MCwgMjAzNTQsIDIwMzU4LCAKKyAgICAyMDM2MiwgMjAzNjYsIDIwMzcwLCAyMDM3NCwgMjAzNzgsIDIwMzgyLCAyMDM4NiwgMjAzOTAsIDIwMzk0LCAyMDM5OCwgCisgICAgMjA0MDIsIDIwNDA2LCAyMDQxMCwgMjA0MTQsIDIwNDE4LCAyMDQyMiwgMjA0MjYsIDIwNDMwLCAyMDQzNCwgMjA0MzgsIAorICAgIDIwNDQyLCAyMDQ0NiwgMjA0NTAsIDIwNDU0LCAyMDQ1OCwgMjA0NjIsIDIwNDY2LCAyMDQ3MCwgMjA0NzQsIDIwNDc4LCAKKyAgICAyMDQ4MiwgMjA0ODYsIDIwNDkwLCAyMDQ5NCwgMjA0OTgsIDIwNTAyLCAyMDUwNiwgMjA1MTAsIDIwNTE0LCAyMDUxOCwgCisgICAgMjA1MjIsIDIwNTI2LCAyMDUzMCwgMjA1MzQsIDIwNTM4LCAyMDU0MiwgMjA1NDYsIDIwNTUwLCAyMDU1NCwgMjA1NTgsIAorICAgIDIwNTYyLCAyMDU2NiwgMjA1NzAsIDIwNTczLCAyMDU3NywgMjA1ODEsIDIwNTg1LCAyMDU4OSwgMjA1OTMsIDIwNTk3LCAKKyAgICAyMDYwMSwgMjA2MDUsIDIwNjA5LCAyMDYxMywgMjA2MTcsIDIwNjIxLCAyMDYyNSwgMjA2MjksIDIwNjMzLCAyMDYzNywgCisgICAgMjA2NDEsIDIwNjQ1LCAyMDY0OSwgMjA2NTMsIDIwNjU3LCAyMDY2MSwgMjA2NjUsIDIwNjY4LCAyMDY3MiwgMjA2NzYsIAorICAgIDIwNjgwLCAyMDY4NCwgMjA2ODgsIDIwNjkyLCAyMDY5NiwgMjA3MDAsIDIwNzA0LCAyMDcwOCwgMjA3MTIsIDIwNzE2LCAKKyAgICAyMDcyMCwgMjA3MjQsIDIwNzI4LCAyMDczMSwgMjA3MzUsIDIwNzM5LCAyMDc0MywgMjA3NDcsIDIwNzUxLCAyMDc1NSwgCisgICAgMjA3NTksIDIwNzYyLCAyMDc2NiwgMjA3NzAsIDIwNzc0LCAyMDc3OCwgMjA3ODIsIDIwNzg2LCAyMDc5MCwgMjA3OTQsIAorICAgIDIwNzk4LCAyMDgwMiwgMjA4MDYsIDIwODEwLCAyMDgxNCwgMjA4MTgsIDIwODIyLCAyMDgyNiwgMjA4MzAsIDIwODM0LCAKKyAgICAyMDgzOCwgMjA4NDIsIDIwODQ2LCAyMDg1MCwgMjA4NTQsIDAsIDIwODU4LCAyMDg2MiwgMjA4NjYsIDIwODcwLCAwLCAwLCAKKyAgICAyMDg3NCwgMjA4NzgsIDIwODgyLCAyMDg4NiwgMjA4OTAsIDIwODk0LCAyMDg5OCwgMCwgMjA5MDIsIDAsIDIwOTA2LCAKKyAgICAyMDkxMCwgMjA5MTQsIDIwOTE4LCAwLCAwLCAyMDkyMiwgMjA5MjYsIDIwOTMwLCAyMDkzNCwgMjA5MzgsIDIwOTQyLCAKKyAgICAyMDk0NiwgMjA5NTAsIDIwOTU0LCAyMDk1OCwgMjA5NjIsIDIwOTY2LCAyMDk3MCwgMjA5NzQsIDIwOTc4LCAyMDk4MiwgCisgICAgMjA5ODYsIDIwOTkwLCAyMDk5NCwgMjA5OTgsIDIxMDAyLCAyMTAwNiwgMjEwMTAsIDIxMDEzLCAyMTAxNywgMjEwMjEsIAorICAgIDIxMDI1LCAyMTAyOSwgMjEwMzMsIDIxMDM3LCAyMTA0MSwgMjEwNDUsIDIxMDQ5LCAyMTA1MywgMjEwNTcsIDIxMDYxLCAKKyAgICAyMTA2NSwgMjEwNjksIDIxMDczLCAyMTA3NywgMjEwODEsIDAsIDIxMDg1LCAyMTA4OSwgMjEwOTMsIDIxMDk3LCAwLCAwLCAKKyAgICAyMTEwMSwgMjExMDQsIDIxMTA4LCAyMTExMiwgMjExMTYsIDIxMTIwLCAyMTEyNCwgMjExMjgsIDIxMTMyLCAyMTEzNiwgCisgICAgMjExNDAsIDIxMTQ0LCAyMTE0OCwgMjExNTIsIDIxMTU2LCAyMTE2MCwgMjExNjQsIDIxMTY5LCAyMTE3NCwgMjExNzksIAorICAgIDIxMTg1LCAyMTE5MSwgMjExOTYsIDIxMjAxLCAyMTIwNywgMjEyMTAsIDIxMjE0LCAyMTIxOCwgMjEyMjIsIDIxMjI2LCAKKyAgICAyMTIzMCwgMjEyMzQsIDIxMjM4LCAwLCAyMTI0MiwgMjEyNDYsIDIxMjUwLCAyMTI1NCwgMCwgMCwgMjEyNTgsIDIxMjYyLCAKKyAgICAyMTI2NiwgMjEyNzAsIDIxMjc0LCAyMTI3OCwgMjEyODIsIDAsIDIxMjg2LCAwLCAyMTI5MCwgMjEyOTQsIDIxMjk4LCAKKyAgICAyMTMwMiwgMCwgMCwgMjEzMDYsIDIxMzEwLCAyMTMxNCwgMjEzMTgsIDIxMzIyLCAyMTMyNiwgMjEzMzAsIDIxMzM0LCAKKyAgICAyMTMzOCwgMjEzNDMsIDIxMzQ4LCAyMTM1MywgMjEzNTksIDIxMzY1LCAyMTM3MCwgMCwgMjEzNzUsIDIxMzc5LCAyMTM4MywgCisgICAgMjEzODcsIDIxMzkxLCAyMTM5NSwgMjEzOTksIDIxNDAzLCAyMTQwNywgMjE0MTEsIDIxNDE1LCAyMTQxOSwgMjE0MjMsIAorICAgIDIxNDI3LCAyMTQzMSwgMjE0MzUsIDIxNDM5LCAyMTQ0MiwgMjE0NDYsIDIxNDUwLCAyMTQ1NCwgMjE0NTgsIDIxNDYyLCAKKyAgICAyMTQ2NiwgMjE0NzAsIDIxNDc0LCAyMTQ3OCwgMjE0ODIsIDIxNDg2LCAyMTQ5MCwgMjE0OTQsIDIxNDk4LCAyMTUwMiwgCisgICAgMjE1MDYsIDIxNTEwLCAyMTUxNCwgMjE1MTgsIDIxNTIyLCAyMTUyNiwgMjE1MzAsIDIxNTM0LCAyMTUzOCwgMjE1NDIsIAorICAgIDIxNTQ2LCAyMTU1MCwgMjE1NTQsIDIxNTU4LCAyMTU2MiwgMjE1NjYsIDIxNTcwLCAyMTU3NCwgMjE1NzgsIDIxNTgyLCAKKyAgICAyMTU4NiwgMjE1OTAsIDIxNTk0LCAyMTU5OCwgMCwgMjE2MDIsIDIxNjA2LCAyMTYxMCwgMjE2MTQsIDAsIDAsIDIxNjE4LCAKKyAgICAyMTYyMiwgMjE2MjYsIDIxNjMwLCAyMTYzNCwgMjE2MzgsIDIxNjQyLCAyMTY0NiwgMjE2NTAsIDIxNjU0LCAyMTY1OCwgCisgICAgMjE2NjIsIDIxNjY2LCAyMTY3MCwgMjE2NzQsIDIxNjc4LCAyMTY4MiwgMjE2ODYsIDIxNjkwLCAyMTY5NCwgMjE2OTgsIAorICAgIDIxNzAyLCAyMTcwNiwgMjE3MTAsIDIxNzE0LCAyMTcxOCwgMjE3MjIsIDIxNzI2LCAyMTczMCwgMjE3MzQsIDIxNzM4LCAKKyAgICAyMTc0MiwgMjE3NDYsIDIxNzUwLCAyMTc1NCwgMjE3NTgsIDIxNzYyLCAyMTc2NiwgMjE3NzAsIDIxNzc0LCAyMTc3OCwgCisgICAgMjE3ODIsIDIxNzg2LCAyMTc5MCwgMjE3OTQsIDIxNzk4LCAyMTgwMiwgMjE4MDYsIDIxODEwLCAyMTgxNCwgMjE4MTgsIAorICAgIDIxODIyLCAyMTgyNiwgMjE4MzAsIDIxODM0LCAyMTgzOCwgMjE4NDIsIDIxODQ1LCAyMTg0OSwgMjE4NTMsIDIxODU3LCAKKyAgICAyMTg2MSwgMjE4NjUsIDIxODY5LCAyMTg3MywgMjE4NzcsIDIxODgxLCAwLCAwLCAyMTg4NSwgMjE4OTQsIDIxOTAwLCAKKyAgICAyMTkwNSwgMjE5MDksIDIxOTEyLCAyMTkxNywgMjE5MjAsIDIxOTIzLCAyMTkyNiwgMjE5MzEsIDIxOTM1LCAyMTk0MCwgCisgICAgMjE5NDMsIDIxOTQ2LCAyMTk0OSwgMjE5NTIsIDIxOTU1LCAyMTk1OCwgMjE5NjEsIDIxOTY0LCAyMTk2NywgMjE5NzEsIAorICAgIDIxOTc1LCAyMTk3OSwgMjE5ODMsIDIxOTg3LCAyMTk5MSwgMjE5OTUsIDIxOTk5LCAyMjAwMywgMjIwMDcsIDAsIDAsIDAsIAorICAgIDIyMDEzLCAyMjAxOSwgMjIwMjMsIDIyMDI3LCAyMjAzMSwgMjIwMzcsIDIyMDQxLCAyMjA0NSwgMjIwNDksIDIyMDU1LCAKKyAgICAyMjA1OSwgMjIwNjMsIDIyMDY3LCAyMjA3MywgMjIwNzcsIDIyMDgxLCAyMjA4NSwgMjIwOTEsIDIyMDk3LCAyMjEwMywgCisgICAgMjIxMTEsIDIyMTE3LCAyMjEyMywgMjIxMjksIDIyMTM1LCAyMjE0MSwgMCwgMCwgMCwgMCwgMCwgMCwgMjIxNDcsIDIyMTUwLCAKKyAgICAyMjE1MywgMjIxNTYsIDIyMTU5LCAyMjE2MiwgMjIxNjYsIDIyMTcwLCAyMjE3MywgMjIxNzcsIDIyMTgxLCAyMjE4NSwgCisgICAgMjIxODksIDIyMTkzLCAyMjE5NiwgMjIyMDAsIDIyMjA0LCAyMjIwOCwgMjIyMTIsIDIyMjE2LCAyMjIyMCwgMjIyMjQsIAorICAgIDIyMjI4LCAyMjIzMiwgMjIyMzYsIDIyMjQwLCAyMjI0MywgMjIyNDcsIDIyMjUxLCAyMjI1NSwgMjIyNTksIDIyMjYyLCAKKyAgICAyMjI2NiwgMjIyNzAsIDIyMjc0LCAyMjI3OCwgMjIyODIsIDIyMjg2LCAyMjI5MCwgMjIyOTQsIDIyMjk4LCAyMjMwMiwgCisgICAgMjIzMDYsIDIyMzEwLCAyMjMxNCwgMjIzMTcsIDIyMzIxLCAyMjMyNSwgMjIzMjksIDIyMzMzLCAyMjMzNywgMjIzNDEsIAorICAgIDIyMzQ1LCAyMjM0OSwgMjIzNTMsIDIyMzU3LCAyMjM2MSwgMjIzNjUsIDIyMzY5LCAyMjM3MywgMjIzNzcsIDIyMzgxLCAKKyAgICAyMjM4NSwgMjIzODksIDIyMzkzLCAyMjM5NywgMjI0MDEsIDIyNDA1LCAyMjQwOSwgMjI0MTMsIDIyNDE3LCAyMjQyMSwgCisgICAgMjI0MjUsIDIyNDI5LCAyMjQzMywgMjI0MzcsIDIyNDQxLCAyMjQ0NSwgMjI0NDksIDIyNDUzLCAyMjQ1NiwgMjI0NjAsIAorICAgIDIyNDY0LCAyMjQ2OCwgMjI0NzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIyNDc2LCAyMjQ4MCwgCisgICAgMjI0ODMsIDIyNDg3LCAyMjQ5MCwgMjI0OTQsIDIyNDk3LCAyMjUwMSwgMjI1MDcsIDIyNTEyLCAyMjUxNiwgMjI1MTksIAorICAgIDIyNTIzLCAyMjUyNywgMjI1MzIsIDIyNTM2LCAyMjU0MSwgMjI1NDUsIDIyNTUwLCAyMjU1NCwgMjI1NTksIDIyNTYzLCAKKyAgICAyMjU2OCwgMjI1NzQsIDIyNTc4LCAyMjU4MywgMjI1ODcsIDIyNTkyLCAyMjU5OCwgMjI2MDIsIDIyNjA4LCAyMjYxNCwgCisgICAgMjI2MTgsIDIyNjIzLCAyMjYzMSwgMjI2MzksIDIyNjQ2LCAyMjY1MSwgMjI2NTYsIDIyNjY1LCAyMjY3MiwgMjI2NzksIAorICAgIDIyNjg0LCAyMjY5MCwgMjI2OTQsIDIyNjk4LCAyMjcwMiwgMjI3MDYsIDIyNzEwLCAyMjcxNCwgMjI3MTgsIDIyNzIyLCAKKyAgICAyMjcyNiwgMjI3MzAsIDIyNzM2LCAyMjc0MSwgMjI3NDYsIDIyNzQ5LCAyMjc1MywgMjI3NTcsIDIyNzYyLCAyMjc2NiwgCisgICAgMjI3NzEsIDIyNzc1LCAyMjc4MCwgMjI3ODQsIDIyNzg5LCAyMjc5MywgMjI3OTgsIDIyODAyLCAyMjgwNywgMjI4MTEsIAorICAgIDIyODE2LCAyMjgyMiwgMjI4MjYsIDIyODMxLCAyMjgzNiwgMjI4NDAsIDIyODQ0LCAyMjg0OCwgMjI4NTIsIDIyODU1LCAKKyAgICAyMjg1OSwgMjI4NjUsIDIyODcwLCAyMjg3NSwgMjI4NzksIDIyODgzLCAyMjg4NywgMjI4OTIsIDIyODk2LCAyMjkwMSwgCisgICAgMjI5MDUsIDIyOTEwLCAyMjkxMywgMjI5MTcsIDIyOTIxLCAyMjkyNiwgMjI5MzAsIDIyOTM1LCAyMjkzOSwgMjI5NDQsIAorICAgIDIyOTUwLCAyMjk1NCwgMjI5NTgsIDIyOTYyLCAyMjk2NiwgMjI5NzAsIDIyOTc0LCAyMjk3OCwgMjI5ODIsIDIyOTg2LCAKKyAgICAyMjk5MCwgMjI5OTQsIDIzMDAwLCAyMzAwMywgMjMwMDcsIDIzMDExLCAyMzAxNiwgMjMwMjAsIDIzMDI1LCAyMzAyOSwgCisgICAgMjMwMzQsIDIzMDM4LCAyMzA0MywgMjMwNDcsIDIzMDUyLCAyMzA1NiwgMjMwNjEsIDIzMDY1LCAyMzA3MCwgMjMwNzYsIAorICAgIDIzMDgwLCAyMzA4NCwgMjMwOTAsIDIzMDk2LCAyMzEwMiwgMjMxMDgsIDIzMTEyLCAyMzExNiwgMjMxMjAsIDIzMTI0LCAKKyAgICAyMzEyOCwgMjMxMzIsIDIzMTM4LCAyMzE0MiwgMjMxNDYsIDIzMTUwLCAyMzE1NSwgMjMxNTksIDIzMTY0LCAyMzE2OCwgCisgICAgMjMxNzMsIDIzMTc3LCAyMzE4MiwgMjMxODYsIDIzMTkxLCAyMzE5NSwgMjMyMDAsIDIzMjA0LCAyMzIwOSwgMjMyMTUsIAorICAgIDIzMjE5LCAyMzIyNSwgMjMyMjksIDIzMjMzLCAyMzIzNywgMjMyNDEsIDIzMjQ1LCAyMzI0OSwgMjMyNTUsIDIzMjU4LCAKKyAgICAyMzI2MiwgMjMyNjYsIDIzMjcxLCAyMzI3NSwgMjMyODAsIDIzMjg0LCAyMzI4OSwgMjMyOTMsIDIzMjk4LCAyMzMwMiwgCisgICAgMjMzMDcsIDIzMzExLCAyMzMxNiwgMjMzMjAsIDIzMzI1LCAyMzMzMSwgMjMzMzQsIDIzMzM4LCAyMzM0MiwgMjMzNDcsIAorICAgIDIzMzUyLCAyMzM1NiwgMjMzNjAsIDIzMzY0LCAyMzM2OCwgMjMzNzIsIDIzMzc2LCAyMzM4MiwgMjMzODUsIDIzMzg5LCAKKyAgICAyMzM5MywgMjMzOTgsIDIzNDAyLCAyMzQwNywgMjM0MTEsIDIzNDE2LCAyMzQyMiwgMjM0MjYsIDIzNDMxLCAyMzQzNSwgCisgICAgMjM0MzksIDIzNDQzLCAyMzQ0NywgMjM0NTEsIDIzNDU1LCAyMzQ1OSwgMjM0NjUsIDIzNDY5LCAyMzQ3MywgMjM0NzcsIAorICAgIDIzNDgyLCAyMzQ4NiwgMjM0OTEsIDIzNDk1LCAyMzUwMCwgMjM1MDQsIDIzNTA5LCAyMzUxMywgMjM1MTgsIDIzNTIyLCAKKyAgICAyMzUyNywgMjM1MzEsIDIzNTM2LCAyMzUzOSwgMjM1NDMsIDIzNTQ3LCAyMzU1MSwgMjM1NTUsIDIzNTU5LCAyMzU2MywgCisgICAgMjM1NjcsIDIzNTcxLCAyMzU3NywgMjM1ODAsIDIzNTg0LCAyMzU4OCwgMjM1OTMsIDIzNTk3LCAyMzYwMiwgMjM2MDYsIAorICAgIDIzNjExLCAyMzYxNSwgMjM2MjAsIDIzNjI0LCAyMzYyOSwgMjM2MzMsIDIzNjM4LCAyMzY0MiwgMjM2NDcsIDIzNjUzLCAKKyAgICAyMzY1NywgMjM2NjMsIDIzNjY3LCAyMzY3MywgMjM2NzksIDIzNjg1LCAyMzY5MSwgMjM2OTcsIDIzNzAzLCAyMzcwOSwgCisgICAgMjM3MTUsIDIzNzE5LCAyMzcyMywgMjM3MjcsIDIzNzMxLCAyMzczNSwgMjM3MzksIDIzNzQzLCAyMzc0NywgMjM3NTIsIAorICAgIDIzNzU2LCAyMzc2MSwgMjM3NjUsIDIzNzcwLCAyMzc3NCwgMjM3NzksIDIzNzgzLCAyMzc4OCwgMjM3OTIsIDIzNzk3LCAKKyAgICAyMzgwMSwgMjM4MDYsIDIzODEwLCAyMzgxNCwgMjM4MTgsIDIzODIyLCAyMzgyNiwgMjM4MzAsIDIzODM0LCAyMzg0MCwgCisgICAgMjM4NDMsIDIzODQ3LCAyMzg1MSwgMjM4NTYsIDIzODYwLCAyMzg2NSwgMjM4NjksIDIzODc0LCAyMzg3OCwgMjM4ODMsIAorICAgIDIzODg3LCAyMzg5MiwgMjM4OTYsIDIzOTAxLCAyMzkwNSwgMjM5MTAsIDIzOTE2LCAyMzkyMCwgMjM5MjYsIDIzOTMxLCAKKyAgICAyMzkzNywgMjM5NDEsIDIzOTQ3LCAyMzk1MiwgMjM5NTYsIDIzOTYwLCAyMzk2NCwgMjM5NjgsIDIzOTcyLCAyMzk3NywgCisgICAgMjM5ODAsIDIzOTg0LCAyMzk4OSwgMjM5OTMsIDIzOTk4LCAyNDAwMSwgMjQwMDUsIDI0MDA5LCAyNDAxMywgMjQwMTcsIAorICAgIDI0MDIxLCAyNDAyNSwgMjQwMjksIDI0MDMzLCAyNDAzNywgMjQwNDEsIDI0MDQ1LCAyNDA1MCwgMjQwNTQsIDI0MDU4LCAKKyAgICAyNDA2NCwgMjQwNjgsIDI0MDc0LCAyNDA3OCwgMjQwODQsIDI0MDg4LCAyNDA5MiwgMjQwOTYsIDI0MTAwLCAyNDEwNCwgCisgICAgMjQxMDksIDI0MTEzLCAyNDExNywgMjQxMjEsIDI0MTI1LCAyNDEyOSwgMjQxMzMsIDI0MTM3LCAyNDE0MSwgMjQxNDUsIAorICAgIDI0MTQ5LCAyNDE1NSwgMjQxNjEsIDI0MTY3LCAyNDE3MywgMjQxNzksIDI0MTg0LCAyNDE5MCwgMjQxOTYsIDI0MjAyLCAKKyAgICAyNDIwNiwgMjQyMTAsIDI0MjE0LCAyNDIxOCwgMjQyMjIsIDI0MjI2LCAyNDIzMCwgMjQyMzQsIDI0MjM4LCAyNDI0MiwgCisgICAgMjQyNDYsIDI0MjUwLCAyNDI1NCwgMjQyNTksIDI0MjY0LCAyNDI2OSwgMjQyNzMsIDI0Mjc3LCAyNDI4MSwgMjQyODUsIAorICAgIDI0Mjg5LCAyNDI5MywgMjQyOTcsIDI0MzAxLCAyNDMwNSwgMjQzMDksIDI0MzE1LCAyNDMyMSwgMjQzMjcsIDI0MzMzLCAKKyAgICAyNDMzOSwgMjQzNDUsIDI0MzUxLCAyNDM1NywgMjQzNjMsIDI0MzY3LCAyNDM3MSwgMjQzNzUsIDI0Mzc5LCAyNDM4MywgCisgICAgMjQzODcsIDI0MzkxLCAyNDM5NywgMjQ0MDMsIDI0NDA5LCAyNDQxNSwgMjQ0MjEsIDI0NDI3LCAyNDQzMywgMjQ0MzksIAorICAgIDI0NDQ1LCAyNDQ1MCwgMjQ0NTUsIDI0NDYwLCAyNDQ2NSwgMjQ0NzEsIDI0NDc3LCAyNDQ4MywgMjQ0ODksIDI0NDk1LCAKKyAgICAyNDUwMSwgMjQ1MDcsIDI0NTEyLCAyNDUxOCwgMjQ1MjQsIDI0NTMwLCAyNDUzNSwgMjQ1NDEsIDI0NTQ3LCAyNDU1MywgCisgICAgMjQ1NTgsIDI0NTYzLCAyNDU2OCwgMjQ1NzMsIDI0NTc4LCAyNDU4MywgMjQ1ODgsIDI0NTkzLCAyNDU5OCwgMjQ2MDMsIAorICAgIDI0NjA4LCAyNDYxMywgMjQ2MTcsIDI0NjIyLCAyNDYyNywgMjQ2MzIsIDI0NjM3LCAyNDY0MiwgMjQ2NDcsIDI0NjUyLCAKKyAgICAyNDY1NywgMjQ2NjIsIDI0NjY3LCAyNDY3MiwgMjQ2NzcsIDI0NjgyLCAyNDY4NywgMjQ2OTIsIDI0Njk3LCAyNDcwMiwgCisgICAgMjQ3MDcsIDI0NzEyLCAyNDcxNywgMjQ3MjIsIDI0NzI3LCAyNDczMiwgMjQ3MzcsIDI0NzQyLCAyNDc0NywgMjQ3NTIsIAorICAgIDI0NzU3LCAyNDc2MiwgMjQ3NjYsIDI0NzcxLCAyNDc3NiwgMjQ3ODEsIDI0Nzg2LCAyNDc5MSwgMjQ3OTYsIDI0ODAxLCAKKyAgICAyNDgwNiwgMjQ4MTEsIDI0ODE2LCAyNDgyMSwgMjQ4MjYsIDI0ODMxLCAyNDgzNiwgMjQ4NDEsIDI0ODQ2LCAyNDg1MSwgCisgICAgMjQ4NTYsIDI0ODYxLCAyNDg2NiwgMjQ4NzEsIDI0ODc2LCAyNDg4MSwgMjQ4ODYsIDI0ODkxLCAyNDg5NSwgMjQ5MDAsIAorICAgIDI0OTA1LCAyNDkxMCwgMjQ5MTUsIDI0OTIwLCAyNDkyNCwgMjQ5MjksIDI0OTM0LCAyNDkzOSwgMjQ5NDQsIDI0OTQ5LCAKKyAgICAyNDk1MywgMjQ5NTgsIDI0OTY0LCAyNDk2OSwgMjQ5NzQsIDI0OTc5LCAyNDk4NCwgMjQ5OTAsIDI0OTk1LCAyNTAwMCwgCisgICAgMjUwMDUsIDI1MDEwLCAyNTAxNSwgMjUwMjAsIDI1MDI1LCAyNTAzMCwgMjUwMzUsIDI1MDQwLCAyNTA0NSwgMjUwNTAsIAorICAgIDI1MDU1LCAyNTA2MCwgMjUwNjUsIDI1MDcwLCAyNTA3NSwgMjUwODAsIDI1MDg1LCAyNTA5MCwgMjUwOTUsIDI1MTAwLCAKKyAgICAyNTEwNSwgMjUxMTAsIDI1MTE1LCAyNTEyMCwgMjUxMjUsIDI1MTMwLCAyNTEzNSwgMjUxNDAsIDI1MTQ1LCAyNTE1MCwgCisgICAgMjUxNTUsIDI1MTYwLCAyNTE2NSwgMjUxNzAsIDI1MTc1LCAyNTE4MCwgMjUxODUsIDI1MTkwLCAyNTE5NSwgMjUyMDAsIAorICAgIDI1MjA1LCAyNTIxMCwgMjUyMTYsIDI1MjIxLCAyNTIyNiwgMjUyMzEsIDI1MjM2LCAyNTI0MSwgMjUyNDYsIDI1MjUxLCAKKyAgICAyNTI1NiwgMjUyNjEsIDI1MjY2LCAyNTI3MSwgMjUyNzUsIDI1MjgwLCAyNTI4NSwgMjUyOTAsIDI1Mjk1LCAyNTMwMCwgCisgICAgMjUzMDUsIDI1MzEwLCAyNTMxNSwgMjUzMjAsIDI1MzI1LCAyNTMzMCwgMjUzMzUsIDI1MzQwLCAyNTM0NSwgMjUzNTAsIAorICAgIDI1MzU1LCAyNTM2MCwgMjUzNjUsIDI1MzcwLCAyNTM3NSwgMjUzODAsIDI1Mzg1LCAyNTM5MCwgMjUzOTUsIDI1NDAwLCAKKyAgICAyNTQwNSwgMjU0MTEsIDI1NDE1LCAyNTQxOSwgMjU0MjMsIDI1NDI3LCAyNTQzMSwgMjU0MzUsIDI1NDM5LCAyNTQ0MywgCisgICAgMjU0NDksIDI1NDU1LCAyNTQ2MSwgMjU0NjcsIDI1NDczLCAyNTQ3OSwgMjU0ODUsIDI1NDkyLCAyNTQ5OCwgMjU1MDMsIAorICAgIDI1NTA4LCAyNTUxMywgMjU1MTgsIDI1NTIzLCAyNTUyOCwgMjU1MzMsIDI1NTM4LCAyNTU0MywgMjU1NDgsIDI1NTUzLCAKKyAgICAyNTU1OCwgMjU1NjMsIDI1NTY4LCAyNTU3MywgMjU1NzgsIDI1NTgzLCAyNTU4OCwgMjU1OTMsIDI1NTk4LCAyNTYwMywgCisgICAgMjU2MDgsIDI1NjEzLCAyNTYxOCwgMjU2MjMsIDI1NjI4LCAyNTYzMywgMjU2MzgsIDAsIDAsIDAsIDI1NjQ1LCAyNTY1NSwgCisgICAgMjU2NTksIDI1NjY2LCAyNTY3MCwgMjU2NzQsIDI1Njc4LCAyNTY4NiwgMjU2OTAsIDI1Njk1LCAyNTcwMCwgMjU3MDUsIAorICAgIDI1NzA5LCAyNTcxNCwgMjU3MTksIDI1NzIyLCAyNTcyNiwgMjU3MzAsIDI1NzM5LCAyNTc0MywgMjU3NDcsIDI1NzUzLCAKKyAgICAyNTc1NywgMjU3NjEsIDI1NzY5LCAyNTc3MywgMjU3ODEsIDI1Nzg3LCAyNTc5MywgMjU3OTksIDI1ODA1LCAyNTgxNSwgCisgICAgMjU4MjEsIDI1ODI1LCAyNTgzNCwgMjU4MzcsIDI1ODQzLCAyNTg0NywgMjU4NTMsIDI1ODU4LCAyNTg2NCwgMjU4NzIsIAorICAgIDI1ODc4LCAyNTg4NCwgMjU4OTIsIDI1ODk4LCAyNTkwMiwgMjU5MDYsIDI1OTE2LCAyNTkyMiwgMjU5MjYsIDI1OTM2LCAKKyAgICAyNTk0MiwgMjU5NDYsIDI1OTUwLCAyNTk1NywgMjU5NjQsIDI1OTY5LCAyNTk3NCwgMjU5ODMsIDI1OTg3LCAyNTk5MSwgCisgICAgMjU5OTUsIDI2MDAzLCAyNjAxMCwgMjYwMTQsIDI2MDE4LCAyNjAyMiwgMjYwMjYsIDI2MDMwLCAyNjAzNCwgMjYwMzgsIAorICAgIDI2MDQyLCAyNjA0NiwgMjYwNTAsIDI2MDU0LCAyNjA1OSwgMjYwNjQsIDI2MDY5LCAyNjA3MywgMjYwNzcsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2MDgxLCAyNjA4NSwgMjYwODksIDI2MDkzLCAyNjA5NywgCisgICAgMjYxMDIsIDI2MTA3LCAyNjExMiwgMjYxMTcsIDI2MTIxLCAyNjEyNSwgMjYxMzAsIDI2MTM0LCAwLCAyNjEzOCwgMjYxNDMsIAorICAgIDI2MTQ4LCAyNjE1MiwgMjYxNTYsIDI2MTYxLCAyNjE2NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMjYxNzEsIDI2MTc1LCAyNjE3OSwgMjYxODMsIDI2MTg3LCAyNjE5MiwgMjYxOTcsIDI2MjAyLCAyNjIwNywgMjYyMTEsIAorICAgIDI2MjE1LCAyNjIyMCwgMjYyMjQsIDI2MjI4LCAyNjIzMiwgMjYyMzcsIDI2MjQyLCAyNjI0NiwgMjYyNTAsIDI2MjU1LCAKKyAgICAyNjI2MCwgMjYyNjUsIDI2MjcxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNjI3NiwgMjYyODAsIDI2Mjg0LCAKKyAgICAyNjI4OCwgMjYyOTIsIDI2Mjk3LCAyNjMwMiwgMjYzMDcsIDI2MzEyLCAyNjMxNiwgMjYzMjAsIDI2MzI1LCAyNjMyOSwgCisgICAgMjYzMzMsIDI2MzM3LCAyNjM0MiwgMjYzNDcsIDI2MzUxLCAyNjM1NSwgMjYzNjAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDI2MzY1LCAyNjM2OSwgMjYzNzMsIDI2Mzc3LCAyNjM4MSwgMjYzODYsIDI2MzkxLCAyNjM5NiwgCisgICAgMjY0MDEsIDI2NDA1LCAyNjQwOSwgMjY0MTQsIDI2NDE4LCAwLCAyNjQyMiwgMjY0MjcsIDI2NDMyLCAwLCAyNjQzNiwgCisgICAgMjY0NDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2NDQ2LCAyNjQ0OSwgMjY0NTMsIDI2NDU3LCAKKyAgICAyNjQ2MSwgMjY0NjUsIDI2NDY5LCAyNjQ3MywgMjY0NzcsIDI2NDgxLCAyNjQ4NSwgMjY0ODksIDI2NDkzLCAyNjQ5NywgCisgICAgMjY1MDEsIDI2NTA1LCAyNjUwOSwgMjY1MTMsIDI2NTE2LCAyNjUyMCwgMjY1MjQsIDI2NTI4LCAyNjUzMiwgMjY1MzYsIAorICAgIDI2NTQwLCAyNjU0NCwgMjY1NDgsIDI2NTUyLCAyNjU1NiwgMjY1NjAsIDI2NTY0LCAyNjU2OCwgMjY1NzEsIDI2NTc0LCAKKyAgICAyNjU3OCwgMjY1ODIsIDI2NTg4LCAyNjU5NCwgMjY2MDAsIDI2NjA2LCAyNjYxMiwgMjY2MTgsIDI2NjI0LCAyNjYzMCwgCisgICAgMjY2MzYsIDI2NjQyLCAyNjY0OCwgMjY2NTQsIDI2NjYwLCAyNjY2NiwgMjY2NzUsIDI2Njg0LCAyNjY5MCwgMjY2OTYsIAorICAgIDI2NzAyLCAyNjcwNywgMjY3MTEsIDI2NzE2LCAyNjcyMSwgMjY3MjYsIDI2NzMwLCAyNjczNSwgMjY3NDAsIDI2NzQ1LCAKKyAgICAyNjc0OSwgMjY3NTQsIDI2NzU4LCAyNjc2MywgMjY3NjgsIDI2NzczLCAyNjc3OCwgMjY3ODIsIDI2Nzg2LCAyNjc5MCwgCisgICAgMjY3OTQsIDI2Nzk4LCAyNjgwMiwgMjY4MDYsIDI2ODEwLCAyNjgxNCwgMjY4MTgsIDI2ODI0LCAyNjgyOCwgMjY4MzIsIAorICAgIDI2ODM2LCAyNjg0MCwgMjY4NDQsIDI2ODUyLCAyNjg1OCwgMjY4NjIsIDI2ODY4LCAyNjg3MiwgMjY4NzgsIDI2ODgyLCAwLCAKKyAgICAwLCAyNjg4NiwgMjY4OTAsIDI2ODkzLCAyNjg5NiwgMjY4OTksIDI2OTAyLCAyNjkwNSwgMjY5MDgsIDI2OTExLCAyNjkxNCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMjY5MTcsIDI2OTI1LCAyNjkzMywgMjY5NDEsIDI2OTQ5LCAyNjk1NywgMjY5NjUsIDI2OTczLCAKKyAgICAyNjk4MSwgMjY5ODksIDAsIDAsIDAsIDAsIDAsIDAsIDI2OTk3LCAyNzAwMCwgMjcwMDMsIDI3MDA2LCAyNzAxMSwgMjcwMTQsIAorICAgIDI3MDE5LCAyNzAyNiwgMjcwMzQsIDI3MDM5LCAyNzA0NiwgMjcwNDksIDI3MDU2LCAyNzA2MywgMjcwNzAsIDAsIDI3MDc0LCAKKyAgICAyNzA3OCwgMjcwODEsIDI3MDg0LCAyNzA4NywgMjcwOTAsIDI3MDkzLCAyNzA5NiwgMjcwOTksIDI3MTAyLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAyNzEwNSwgMjcxMDgsIDI3MTExLCAyNzExNCwgMjcxMTcsIDI3MTIwLCAyNzEyNCwgMjcxMjgsIDI3MTMyLCAKKyAgICAyNzEzNSwgMjcxMzksIDI3MTQzLCAyNzE0NiwgMjcxNTAsIDI3MTU0LCAyNzE1NywgMjcxNjEsIDI3MTY0LCAyNzE2OCwgCisgICAgMjcxNzIsIDI3MTc2LCAyNzE4MCwgMjcxODQsIDI3MTg3LCAyNzE5MCwgMjcxOTQsIDI3MTk4LCAyNzIwMSwgMjcyMDUsIAorICAgIDI3MjA5LCAyNzIxMywgMjcyMTcsIDI3MjIxLCAyNzIyNSwgMjcyMjksIDI3MjMzLCAyNzI0MCwgMjcyNDUsIDI3MjUwLCAKKyAgICAyNzI1NSwgMjcyNjAsIDI3MjY2LCAyNzI3MiwgMjcyNzgsIDI3Mjg0LCAyNzI4OSwgMjcyOTUsIDI3MzAxLCAyNzMwNiwgCisgICAgMjczMTIsIDI3MzE4LCAyNzMyNCwgMjczMzAsIDI3MzM2LCAyNzM0MSwgMjczNDcsIDI3MzUyLCAyNzM1OCwgMjczNjQsIAorICAgIDI3MzcwLCAyNzM3NiwgMjczODIsIDI3Mzg3LCAyNzM5MiwgMjczOTgsIDI3NDA0LCAyNzQwOSwgMjc0MTUsIDI3NDIwLCAKKyAgICAyNzQyNiwgMjc0MzEsIDI3NDM2LCAyNzQ0MiwgMjc0NDgsIDI3NDU0LCAyNzQ2MCwgMjc0NjYsIDI3NDcyLCAyNzQ3OCwgCisgICAgMjc0ODQsIDI3NDkwLCAyNzQ5NiwgMjc1MDIsIDI3NTA4LCAyNzUxMywgMjc1MTgsIDI3NTIzLCAyNzUyOSwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMjc1MzUsIDI3NTQ0LCAyNzU1MywgMjc1NjEsIDI3NTY5LCAyNzU3OSwgMjc1ODcsIDI3NTk2LCAKKyAgICAyNzYwMywgMjc2MTAsIDI3NjE3LCAyNzYyNSwgMjc2MzMsIDI3NjQxLCAyNzY0OSwgMjc2NTcsIDI3NjY1LCAyNzY3MywgCisgICAgMjc2ODEsIDI3Njg4LCAyNzY5NiwgMjc3MDQsIDI3NzEyLCAyNzcyMCwgMjc3MjgsIDI3NzM4LCAyNzc0OCwgMjc3NTgsIAorICAgIDI3NzY4LCAyNzc3OCwgMjc3ODgsIDI3Nzk4LCAyNzgwOCwgMjc4MTgsIDI3ODI4LCAyNzgzOCwgMjc4NDgsIDI3ODU4LCAKKyAgICAyNzg2OCwgMjc4NzYsIDI3ODg0LCAyNzg5NCwgMjc5MDIsIDAsIDAsIDAsIDAsIDAsIDI3OTEyLCAyNzkxNiwgMjc5MjAsIAorICAgIDI3OTI0LCAyNzkyOCwgMjc5MzIsIDI3OTM2LCAyNzk0MCwgMjc5NDQsIDI3OTQ4LCAyNzk1MiwgMjc5NTYsIDI3OTYwLCAKKyAgICAyNzk2NCwgMjc5NjgsIDI3OTcyLCAyNzk3NiwgMjc5ODAsIDI3OTg0LCAyNzk4OCwgMjc5OTIsIDI3OTk2LCAyODAwMCwgCisgICAgMjgwMDQsIDI4MDEwLCAyODAxNCwgMjgwMjAsIDI4MDI0LCAyODAzMCwgMjgwMzQsIDI4MDQwLCAyODA0NCwgMjgwNDgsIAorICAgIDI4MDUyLCAyODA1NiwgMjgwNjAsIDI4MDY0LCAyODA3MCwgMjgwNzYsIDI4MDgyLCAyODA4OCwgMjgwOTMsIDI4MDk5LCAKKyAgICAyODEwNSwgMjgxMTEsIDI4MTE3LCAyODEyMywgMjgxMjksIDI4MTM2LCAyODE0MiwgMjgxNDcsIDI4MTUyLCAyODE1NiwgCisgICAgMjgxNjAsIDI4MTY0LCAyODE2OCwgMjgxNzIsIDI4MTc2LCAyODE4MCwgMjgxODYsIDI4MTkyLCAyODE5OCwgMjgyMDMsIAorICAgIDI4MjEwLCAyODIxNSwgMjgyMjAsIDI4MjI2LCAyODIzMSwgMjgyMzgsIDI4MjQ1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAyODI1MiwgMjgyNTgsIDI4MjYyLCAyODI2NywgMjgyNzIsIDI4Mjc3LCAyODI4MiwgMjgyODcsIDI4MjkyLCAKKyAgICAyODI5NywgMjgzMDIsIDI4MzA3LCAyODMxMiwgMjgzMTcsIDI4MzIyLCAyODMyNywgMjgzMzEsIDI4MzM1LCAyODM0MCwgCisgICAgMjgzNDUsIDI4MzUwLCAyODM1NCwgMjgzNTgsIDI4MzYyLCAyODM2NywgMjgzNzIsIDI4Mzc3LCAyODM4MiwgMjgzODYsIDAsIAorICAgIDAsIDAsIDI4MzkwLCAyODM5NSwgMjg0MDAsIDI4NDA1LCAyODQxMSwgMjg0MTcsIDI4NDIzLCAyODQyOSwgMjg0MzQsIAorICAgIDI4NDM5LCAyODQ0NSwgMjg0NTEsIDAsIDAsIDAsIDAsIDI4NDU4LCAyODQ2MywgMjg0NjksIDI4NDc1LCAyODQ4MSwgCisgICAgMjg0ODYsIDI4NDkxLCAyODQ5NiwgMjg1MDEsIDI4NTA3LCAyODUxMiwgMjg1MTcsIDAsIDAsIDAsIDAsIDI4NTIyLCAwLCAwLCAKKyAgICAwLCAyODUyNywgMjg1MzIsIDI4NTM3LCAyODU0MiwgMjg1NDYsIDI4NTUwLCAyODU1NCwgMjg1NTgsIDI4NTYyLCAyODU2NiwgCisgICAgMjg1NzAsIDI4NTc0LCAyODU3OCwgMjg1ODMsIDI4NTg5LCAyODU5NSwgMjg2MDEsIDI4NjA2LCAyODYxMSwgMjg2MTcsIAorICAgIDI4NjIzLCAyODYyOSwgMjg2MzQsIDI4NjQwLCAyODY0NSwgMjg2NTEsIDI4NjU3LCAyODY2MiwgMjg2NjgsIDI4Njc0LCAKKyAgICAyODY4MCwgMjg2ODUsIDI4NjkwLCAyODY5NSwgMjg3MDEsIDI4NzA3LCAyODcxMiwgMjg3MTgsIDI4NzIzLCAyODcyOSwgCisgICAgMjg3MzQsIDI4NzQwLCAwLCAwLCAyODc0NiwgMjg3NTIsIDI4NzU4LCAyODc2NCwgMjg3NzAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDI4Nzc2LCAyODc4MywgMjg3OTAsIDI4Nzk2LCAyODgwMywgMjg4MTAsIDI4ODE2LCAyODgyMywgCisgICAgMjg4MzAsIDI4ODM3LCAyODg0MywgMjg4NDksIDI4ODU2LCAyODg2MiwgMjg4NjgsIDI4ODc1LCAyODg4MiwgMjg4ODgsIAorICAgIDI4ODk1LCAyODkwMiwgMjg5MDgsIDI4OTE0LCAyODkyMSwgMjg5MjcsIDI4OTMzLCAyODk0MCwgMjg5NDYsIDI4OTUzLCAKKyAgICAyODk2MCwgMjg5NjcsIDI4OTc0LCAyODk4MSwgMjg5ODgsIDI4OTk0LCAyOTAwMSwgMjkwMDgsIDI5MDE0LCAyOTAyMSwgCisgICAgMjkwMjgsIDI5MDM1LCAyOTA0MiwgMjkwNDksIDI5MDU2LCAyOTA2MywgMCwgMCwgMCwgMCwgMjkwNzAsIDI5MDc4LCAKKyAgICAyOTA4NSwgMjkwOTIsIDI5MDk4LCAyOTEwNSwgMjkxMTEsIDI5MTE4LCAyOTEyNCwgMjkxMzEsIDI5MTM4LCAyOTE0NSwgCisgICAgMjkxNTIsIDI5MTU5LCAyOTE2NiwgMjkxNzMsIDI5MTgwLCAyOTE4NywgMjkxOTQsIDI5MjAxLCAyOTIwOCwgMjkyMTQsIAorICAgIDI5MjIxLCAyOTIyOCwgMjkyMzUsIDI5MjQxLCAwLCAwLCAwLCAwLCAwLCAwLCAyOTI0NywgMjkyNTMsIDI5MjU4LCAyOTI2MywgCisgICAgMjkyNjgsIDI5MjczLCAyOTI3OCwgMjkyODMsIDI5Mjg4LCAyOTI5MywgMjkyOTgsIDAsIDAsIDAsIDI5MzA0LCAyOTMxMCwgCisgICAgMjkzMTYsIDI5MzIwLCAyOTMyNiwgMjkzMzIsIDI5MzM4LCAyOTM0NCwgMjkzNTAsIDI5MzU2LCAyOTM2MiwgMjkzNjgsIAorICAgIDI5Mzc0LCAyOTM4MCwgMjkzODYsIDI5MzkyLCAyOTM5OCwgMjk0MDQsIDI5NDEwLCAyOTQxNCwgMjk0MjAsIDI5NDI2LCAKKyAgICAyOTQzMiwgMjk0MzgsIDI5NDQ0LCAyOTQ1MCwgMjk0NTYsIDI5NDYyLCAyOTQ2OCwgMjk0NzQsIDI5NDgwLCAyOTQ4NiwgCisgICAgMjk0OTIsIDI5NDk4LCAyOTUwNCwgMjk1MDgsIDI5NTEzLCAyOTUxOCwgMjk1MjMsIDI5NTI3LCAyOTUzMiwgMjk1MzYsIAorICAgIDI5NTQxLCAyOTU0NiwgMjk1NTEsIDI5NTU1LCAyOTU2MCwgMjk1NjUsIDI5NTcwLCAyOTU3NSwgMjk1ODAsIDI5NTg0LCAKKyAgICAyOTU4OCwgMjk1OTMsIDI5NTk4LCAyOTYwMiwgMjk2MDYsIDI5NjEwLCAyOTYxNSwgMjk2MjAsIDI5NjI1LCAyOTYzMCwgMCwgCisgICAgMCwgMjk2MzYsIDI5NjQwLCAyOTY0NywgMjk2NTIsIDI5NjU4LCAyOTY2NCwgMjk2NjksIDI5Njc1LCAyOTY4MSwgMjk2ODYsIAorICAgIDI5NjkyLCAyOTY5OCwgMjk3MDQsIDI5NzA5LCAyOTcxNSwgMjk3MjAsIDI5NzI1LCAyOTczMSwgMjk3MzYsIDI5NzQyLCAKKyAgICAyOTc0NywgMjk3NTMsIDI5NzU5LCAyOTc2NSwgMjk3NzEsIDI5Nzc1LCAyOTc4MCwgMjk3ODUsIDI5NzkxLCAyOTc5NywgCisgICAgMjk4MDIsIDI5ODA4LCAyOTgxNCwgMjk4MTgsIDI5ODIzLCAyOTgyOCwgMjk4MzIsIDI5ODM3LCAyOTg0MiwgMjk4NDcsIAorICAgIDI5ODUyLCAyOTg1OCwgMjk4NjQsIDI5ODY5LCAyOTg3NCwgMjk4NzksIDI5ODgzLCAyOTg4OCwgMjk4OTIsIDI5ODk3LCAKKyAgICAyOTkwMSwgMjk5MDYsIDI5OTExLCAyOTkxNiwgMjk5MjEsIDI5OTI3LCAyOTkzMywgMjk5NDAsIDI5OTUwLCAyOTk1OSwgCisgICAgMjk5NjYsIDI5OTcyLCAyOTk4MiwgMjk5ODcsIDI5OTkzLCAwLCAyOTk5OCwgMzAwMDMsIDMwMDA4LCAzMDAxNiwgMzAwMjIsIAorICAgIDMwMDMwLCAzMDAzNSwgMzAwNDEsIDMwMDQ3LCAzMDA1MywgMzAwNTgsIDMwMDY0LCAzMDA2OSwgMzAwNzYsIDMwMDgyLCAKKyAgICAzMDA4NywgMzAwOTMsIDMwMDk5LCAzMDEwNSwgMzAxMTIsIDMwMTE5LCAzMDEyNiwgMzAxMzEsIDMwMTM2LCAzMDE0MywgCisgICAgMzAxNTAsIDMwMTU3LCAzMDE2NCwgMzAxNzEsIDAsIDAsIDMwMTc4LCAzMDE4NSwgMzAxOTIsIDMwMTk4LCAzMDIwNCwgCisgICAgMzAyMTAsIDMwMjE2LCAzMDIyMiwgMzAyMjgsIDMwMjM0LCAzMDI0MCwgMCwgMCwgMCwgMCwgMCwgMCwgMzAyNDYsIDMwMjUyLCAKKyAgICAzMDI1NywgMzAyNjIsIDMwMjY3LCAzMDI3MiwgMzAyNzcsIDMwMjgyLCAzMDI4NywgMzAyOTIsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDMwMjk3LCAzMDMwMiwgMzAzMDcsIDMwMzEyLCAzMDMxNywgMzAzMjIsIDMwMzI3LCAzMDMzNiwgMzAzNDMsIDMwMzQ4LCAKKyAgICAzMDM1MywgMzAzNTgsIDMwMzYzLCAzMDM2OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzAzNzAsIDMwMzc2LCAKLSAgICAzMDM4MiwgMzAzODYsIDMwMzkwLCAzMDM5NCwgMzAzOTgsIDMwNDA0LCAzMDQwOCwgMzA0MTQsIDMwNDE4LCAzMDQyNCwgCi0gICAgMzA0MzAsIDMwNDM4LCAzMDQ0NCwgMzA0NTIsIDMwNDU2LCAzMDQ2MCwgMzA0NjQsIDMwNDcwLCAzMDQ3MywgMzA0NzksIAotICAgIDMwNDgzLCAzMDQ4OSwgMzA0OTMsIDMwNDk3LCAzMDUwMywgMzA1MDcsIDMwNTEzLCAzMDUxNywgMzA1MjMsIDMwNTMxLCAKLSAgICAzMDUzOSwgMzA1NDcsIDMwNTUzLCAzMDU1NywgMzA1NjMsIDMwNTY3LCAzMDU3MywgMzA1NzYsIDMwNTc5LCAzMDU4NSwgCi0gICAgMzA1ODksIDMwNTk1LCAzMDU5OCwgMzA2MDEsIDMwNjA0LCAzMDYwOCwgMzA2MTIsIDMwNjE4LCAzMDYyNCwgMzA2MjcsIAotICAgIDMwNjMwLCAzMDYzNCwgMzA2MzksIDMwNjQ0LCAzMDY1MSwgMzA2NTYsIDMwNjYzLCAzMDY3MCwgMzA2NzksIDMwNjg2LCAKLSAgICAzMDY5NSwgMzA3MDAsIDMwNzA3LCAzMDcxNCwgMzA3MjMsIDMwNzI4LCAzMDczNSwgMzA3NDAsIDMwNzQ2LCAzMDc1MiwgCi0gICAgMzA3NTgsIDMwNzY0LCAzMDc3MCwgMzA3NzYsIDAsIDAsIDAsIDAsIDMwNzgyLCAzMDc4NiwgMzA3ODksIDMwNzkyLCAKLSAgICAzMDc5NSwgMzA3OTgsIDMwODAxLCAzMDgwNCwgMzA4MDcsIDMwODEwLCAzMDgxMywgMzA4MTYsIDMwODE5LCAzMDgyMiwgCi0gICAgMzA4MjcsIDMwODMyLCAzMDgzNywgMzA4NDAsIDMwODQ1LCAzMDg1MCwgMzA4NTUsIDMwODYwLCAzMDg2NywgMzA4NzIsIAotICAgIDMwODc3LCAzMDg4MiwgMzA4ODcsIDMwODk0LCAzMDkwMCwgMzA5MDYsIDMwOTEyLCAzMDkxOCwgMzA5MjQsIDMwOTMzLCAKLSAgICAzMDk0MiwgMzA5NDgsIDMwOTU0LCAzMDk2MiwgMzA5NzAsIDMwOTc5LCAzMDk4OCwgMzA5OTYsIDMxMDA0LCAzMTAxMywgCi0gICAgMzEwMjIsIDAsIDAsIDAsIDMxMDMwLCAzMTAzNCwgMzEwMzgsIDMxMDQyLCAzMTA0NSwgMzEwNDgsIDMxMDUxLCAzMTA1NSwgCi0gICAgMzEwNTgsIDMxMDYxLCAzMTA2NSwgMzEwNjgsIDMxMDcyLCAzMTA3NiwgMzEwODAsIDMxMDg0LCAzMTA4OCwgMzEwOTIsIAotICAgIDMxMDk2LCAzMTEwMCwgMzExMDQsIDMxMTA3LCAzMTExMCwgMzExMTQsIDMxMTE4LCAzMTEyMiwgMzExMjUsIDMxMTI4LCAKLSAgICAzMTEzMSwgMzExMzUsIDMxMTM5LCAzMTE0MiwgMzExNDYsIDMxMTQ5LCAzMTE1NCwgMzExNTksIDMxMTY0LCAzMTE2OSwgCi0gICAgMzExNzQsIDMxMTc5LCAzMTE4NCwgMzExODksIDMxMTk0LCAzMTE5OCwgMzEyMDIsIDMxMjA4LCAzMTIxNSwgMzEyMTksIAotICAgIDMxMjIzLCAzMTIyNywgMzEyMzAsIDMxMjMzLCAzMTIzNiwgMzEyMzksIDMxMjQyLCAzMTI0NSwgMzEyNDgsIDMxMjUxLCAKLSAgICAzMTI1NCwgMzEyNTcsIDMxMjYxLCAzMTI2NSwgMzEyNjksIDMxMjc0LCAzMTI3OCwgMzEyODIsIDMxMjg4LCAzMTI5MiwgCi0gICAgMzEyOTgsIDMxMzA0LCAzMTMwOSwgMzEzMTYsIDMxMzIwLCAzMTMyNiwgMzEzMzAsIDMxMzM2LCAzMTM0MSwgMzEzNDgsIAotICAgIDMxMzU1LCAzMTM2MCwgMzEzNjcsIDMxMzcyLCAzMTM3NywgMzEzODEsIDMxMzg3LCAzMTM5MSwgMzEzOTcsIDMxNDA0LCAKLSAgICAzMTQxMSwgMzE0MTUsIDMxNDIxLCAzMTQyNywgMzE0MzEsIDMxNDM3LCAzMTQ0MiwgMzE0NDcsIDMxNDU0LCAzMTQ1OSwgCi0gICAgMzE0NjQsIDMxNDY5LCAzMTQ3NCwgMzE0NzgsIDMxNDgyLCAzMTQ4NywgMzE0OTIsIDMxNDk5LCAzMTUwNSwgMzE1MTAsIAotICAgIDMxNTE3LCAzMTUyMiwgMzE1MjksIDMxNTM0LCAzMTU0MywgMzE1NDksIDMxNTU1LCAzMTU1OSwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMzE1NjMsIDMxNTcyLCAzMTU3OSwgMzE1ODYsIDMxNTkzLCAzMTU5NiwgMzE2MDAsIDMxNjA0LCAzMTYwOCwgCi0gICAgMzE2MTIsIDMxNjE2LCAzMTYyMCwgMzE2MjQsIDMxNjI4LCAzMTYzMiwgMzE2MzYsIDMxNjQwLCAzMTY0NCwgMzE2NDcsIAotICAgIDMxNjUwLCAzMTY1NCwgMzE2NTgsIDMxNjYyLCAzMTY2NiwgMzE2NzAsIDMxNjc0LCAzMTY3NywgMzE2ODEsIDMxNjg1LCAKLSAgICAzMTY4OSwgMzE2OTMsIDMxNjk2LCAzMTY5OSwgMzE3MDMsIDMxNzA2LCAzMTcxMCwgMzE3MTQsIDMxNzE3LCAzMTcyMSwgCi0gICAgMzE3MjUsIDMxNzI4LCAzMTczMywgMzE3MzgsIDMxNzQzLCAzMTc0NywgMzE3NTEsIDMxNzU2LCAzMTc2MCwgMzE3NjUsIAotICAgIDMxNzY5LCAzMTc3NCwgMzE3NzgsIDMxNzgyLCAzMTc4NywgMzE3OTIsIDMxNzk2LCAzMTgwMSwgMzE4MDYsIDMxODExLCAKLSAgICAzMTgxNSwgMCwgMCwgMCwgMzE4MTksIDMxODI0LCAzMTgzMywgMzE4MzgsIDMxODQ1LCAzMTg1MCwgMzE4NTQsIDMxODU3LCAKLSAgICAzMTg2MCwgMzE4NjMsIDMxODY2LCAzMTg2OSwgMzE4NzIsIDMxODc1LCAzMTg3OCwgMCwgMCwgMCwgMzE4ODEsIDMxODg1LCAKLSAgICAzMTg4OSwgMzE4OTMsIDMxOTAwLCAzMTkwNiwgMzE5MTIsIDMxOTE4LCAzMTkyNCwgMzE5MzAsIDMxOTM2LCAzMTk0MiwgCi0gICAgMzE5NDgsIDMxOTU0LCAzMTk2MSwgMzE5NjgsIDMxOTc1LCAzMTk4MiwgMzE5ODksIDMxOTk2LCAzMjAwMywgMzIwMTAsIAotICAgIDMyMDE3LCAzMjAyNCwgMzIwMzEsIDMyMDM4LCAzMjA0NSwgMzIwNTIsIDMyMDU5LCAzMjA2NiwgMzIwNzMsIDMyMDgwLCAKLSAgICAzMjA4NywgMzIwOTQsIDMyMTAxLCAzMjEwOCwgMzIxMTUsIDMyMTIyLCAzMjEyOSwgMzIxMzYsIDMyMTQzLCAzMjE1MCwgCi0gICAgMzIxNTcsIDMyMTY0LCAzMjE3MiwgMzIxODAsIDMyMTg4LCAzMjE5NCwgMzIyMDAsIDMyMjA2LCAzMjIxNCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzAzNzMsIDMwMzc5LCAKKyAgICAzMDM4NSwgMzAzODksIDMwMzkzLCAzMDM5NywgMzA0MDEsIDMwNDA3LCAzMDQxMSwgMzA0MTcsIDMwNDIxLCAzMDQyNywgCisgICAgMzA0MzMsIDMwNDQxLCAzMDQ0NywgMzA0NTUsIDMwNDU5LCAzMDQ2MywgMzA0NjcsIDMwNDczLCAzMDQ3NiwgMzA0ODIsIAorICAgIDMwNDg2LCAzMDQ5MiwgMzA0OTYsIDMwNTAwLCAzMDUwNiwgMzA1MTAsIDMwNTE2LCAzMDUyMCwgMzA1MjYsIDMwNTM0LCAKKyAgICAzMDU0MiwgMzA1NTAsIDMwNTU2LCAzMDU2MCwgMzA1NjYsIDMwNTcwLCAzMDU3NiwgMzA1NzksIDMwNTgyLCAzMDU4OCwgCisgICAgMzA1OTIsIDMwNTk4LCAzMDYwMSwgMzA2MDQsIDMwNjA3LCAzMDYxMSwgMzA2MTUsIDMwNjIxLCAzMDYyNywgMzA2MzAsIAorICAgIDMwNjMzLCAzMDYzNywgMzA2NDIsIDMwNjQ3LCAzMDY1NCwgMzA2NTksIDMwNjY2LCAzMDY3MywgMzA2ODIsIDMwNjg5LCAKKyAgICAzMDY5OCwgMzA3MDMsIDMwNzEwLCAzMDcxNywgMzA3MjYsIDMwNzMxLCAzMDczOCwgMzA3NDMsIDMwNzQ5LCAzMDc1NSwgCisgICAgMzA3NjEsIDMwNzY3LCAzMDc3MywgMzA3NzksIDAsIDAsIDAsIDAsIDMwNzg1LCAzMDc4OSwgMzA3OTIsIDMwNzk1LCAKKyAgICAzMDc5OCwgMzA4MDEsIDMwODA0LCAzMDgwNywgMzA4MTAsIDMwODEzLCAzMDgxNiwgMzA4MTksIDMwODIyLCAzMDgyNSwgCisgICAgMzA4MzAsIDMwODM1LCAzMDg0MCwgMzA4NDMsIDMwODQ4LCAzMDg1MywgMzA4NTgsIDMwODYzLCAzMDg3MCwgMzA4NzUsIAorICAgIDMwODgwLCAzMDg4NSwgMzA4OTAsIDMwODk3LCAzMDkwMywgMzA5MDksIDMwOTE1LCAzMDkyMSwgMzA5MjcsIDMwOTM2LCAKKyAgICAzMDk0NSwgMzA5NTEsIDMwOTU3LCAzMDk2NSwgMzA5NzMsIDMwOTgyLCAzMDk5MSwgMzA5OTksIDMxMDA3LCAzMTAxNiwgCisgICAgMzEwMjUsIDAsIDAsIDAsIDMxMDMzLCAzMTAzNywgMzEwNDEsIDMxMDQ1LCAzMTA0OCwgMzEwNTEsIDMxMDU0LCAzMTA1OCwgCisgICAgMzEwNjEsIDMxMDY0LCAzMTA2OCwgMzEwNzEsIDMxMDc1LCAzMTA3OSwgMzEwODMsIDMxMDg3LCAzMTA5MSwgMzEwOTUsIAorICAgIDMxMDk5LCAzMTEwMywgMzExMDcsIDMxMTEwLCAzMTExMywgMzExMTcsIDMxMTIxLCAzMTEyNSwgMzExMjgsIDMxMTMxLCAKKyAgICAzMTEzNCwgMzExMzgsIDMxMTQyLCAzMTE0NSwgMzExNDksIDMxMTUyLCAzMTE1NywgMzExNjIsIDMxMTY3LCAzMTE3MiwgCisgICAgMzExNzcsIDMxMTgyLCAzMTE4NywgMzExOTIsIDMxMTk3LCAzMTIwMSwgMzEyMDUsIDMxMjExLCAzMTIxOCwgMzEyMjIsIAorICAgIDMxMjI2LCAzMTIzMCwgMzEyMzMsIDMxMjM2LCAzMTIzOSwgMzEyNDIsIDMxMjQ1LCAzMTI0OCwgMzEyNTEsIDMxMjU0LCAKKyAgICAzMTI1NywgMzEyNjAsIDMxMjY0LCAzMTI2OCwgMzEyNzIsIDMxMjc3LCAzMTI4MSwgMzEyODUsIDMxMjkxLCAzMTI5NSwgCisgICAgMzEzMDEsIDMxMzA3LCAzMTMxMiwgMzEzMTksIDMxMzIzLCAzMTMyOSwgMzEzMzMsIDMxMzM5LCAzMTM0NCwgMzEzNTEsIAorICAgIDMxMzU4LCAzMTM2MywgMzEzNzAsIDMxMzc1LCAzMTM4MCwgMzEzODQsIDMxMzkwLCAzMTM5NCwgMzE0MDAsIDMxNDA3LCAKKyAgICAzMTQxNCwgMzE0MTgsIDMxNDI0LCAzMTQzMCwgMzE0MzQsIDMxNDQwLCAzMTQ0NSwgMzE0NTAsIDMxNDU3LCAzMTQ2MiwgCisgICAgMzE0NjcsIDMxNDcyLCAzMTQ3NywgMzE0ODEsIDMxNDg1LCAzMTQ5MCwgMzE0OTUsIDMxNTAyLCAzMTUwOCwgMzE1MTMsIAorICAgIDMxNTIwLCAzMTUyNSwgMzE1MzIsIDMxNTM3LCAzMTU0NiwgMzE1NTIsIDMxNTU4LCAzMTU2MiwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMzE1NjYsIDMxNTc1LCAzMTU4MiwgMzE1ODksIDMxNTk2LCAzMTU5OSwgMzE2MDMsIDMxNjA3LCAzMTYxMSwgCisgICAgMzE2MTUsIDMxNjE5LCAzMTYyMywgMzE2MjcsIDMxNjMxLCAzMTYzNSwgMzE2MzksIDMxNjQzLCAzMTY0NywgMzE2NTAsIAorICAgIDMxNjUzLCAzMTY1NywgMzE2NjEsIDMxNjY1LCAzMTY2OSwgMzE2NzMsIDMxNjc3LCAzMTY4MCwgMzE2ODQsIDMxNjg4LCAKKyAgICAzMTY5MiwgMzE2OTYsIDMxNjk5LCAzMTcwMiwgMzE3MDYsIDMxNzA5LCAzMTcxMywgMzE3MTcsIDMxNzIwLCAzMTcyNCwgCisgICAgMzE3MjgsIDMxNzMxLCAzMTczNiwgMzE3NDEsIDMxNzQ2LCAzMTc1MCwgMzE3NTQsIDMxNzU5LCAzMTc2MywgMzE3NjgsIAorICAgIDMxNzcyLCAzMTc3NywgMzE3ODEsIDMxNzg1LCAzMTc5MCwgMzE3OTUsIDMxNzk5LCAzMTgwNCwgMzE4MDksIDMxODE0LCAKKyAgICAzMTgxOCwgMCwgMCwgMCwgMzE4MjIsIDMxODI3LCAzMTgzNiwgMzE4NDEsIDMxODQ4LCAzMTg1MywgMzE4NTcsIDMxODYwLCAKKyAgICAzMTg2MywgMzE4NjYsIDMxODY5LCAzMTg3MiwgMzE4NzUsIDMxODc4LCAzMTg4MSwgMCwgMCwgMCwgMzE4ODQsIDMxODg4LCAKKyAgICAzMTg5MiwgMzE4OTYsIDMxOTAzLCAzMTkwOSwgMzE5MTUsIDMxOTIxLCAzMTkyNywgMzE5MzMsIDMxOTM5LCAzMTk0NSwgCisgICAgMzE5NTEsIDMxOTU3LCAzMTk2NCwgMzE5NzEsIDMxOTc4LCAzMTk4NSwgMzE5OTIsIDMxOTk5LCAzMjAwNiwgMzIwMTMsIAorICAgIDMyMDIwLCAzMjAyNywgMzIwMzQsIDMyMDQxLCAzMjA0OCwgMzIwNTUsIDMyMDYyLCAzMjA2OSwgMzIwNzYsIDMyMDgzLCAKKyAgICAzMjA5MCwgMzIwOTcsIDMyMTA0LCAzMjExMSwgMzIxMTgsIDMyMTI1LCAzMjEzMiwgMzIxMzksIDMyMTQ2LCAzMjE1MywgCisgICAgMzIxNjAsIDMyMTY3LCAzMjE3NSwgMzIxODMsIDMyMTkxLCAzMjE5NywgMzIyMDMsIDMyMjA5LCAzMjIxNywgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzIyMjMsIDMyMjMwLCAzMjIzNywgMzIyNDQsIDMyMjUxLCAKLSAgICAzMjI2MCwgMzIyNjksIDMyMjc4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMjI4NywgMzIyOTIsIDMyMjk3LCAzMjMwMiwgCi0gICAgMzIzMDcsIDMyMzE2LCAzMjMyNywgMzIzMzYsIDMyMzQ3LCAzMjM1MywgMzIzNjYsIDMyMzcyLCAzMjM3OSwgMzIzODYsIAotICAgIDMyMzkxLCAzMjM5NywgMzI0MDMsIDMyNDE0LCAzMjQyMywgMzI0MzAsIDMyNDM3LCAzMjQ0NiwgMzI0NTMsIDMyNDYyLCAKLSAgICAzMjQ3MiwgMzI0ODIsIDMyNDg5LCAzMjQ5NiwgMzI1MDMsIDMyNTEzLCAzMjUxOCwgMzI1MjYsIDMyNTMyLCAzMjU0MCwgCi0gICAgMzI1NDksIDMyNTU0LCAzMjU2MSwgMzI1NjcsIDMyNTcyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMjU3NywgCi0gICAgMzI1ODIsIDMyNTg4LCAzMjU5NSwgMzI2MDMsIDMyNjA5LCAzMjYxNSwgMzI2MjEsIDMyNjI2LCAzMjYzMywgMzI2MzksIAotICAgIDMyNjQ1LCAzMjY1MSwgMzI2NTksIDMyNjY0LCAzMjY3MiwgMzI2NzcsIDMyNjgzLCAzMjY4OSwgMzI2OTYsIDMyNzA0LCAKLSAgICAzMjcxMSwgMzI3MTcsIDMyNzI0LCAzMjczMSwgMzI3MzcsIDMyNzQ0LCAzMjc1MSwgMzI3NTcsIDMyNzYyLCAzMjc2OCwgCi0gICAgMzI3NzYsIDMyNzg0LCAzMjc5MCwgMzI3OTYsIDMyODAyLCAzMjgwOCwgMzI4MTYsIDMyODIwLCAzMjgyNiwgMzI4MzIsIAotICAgIDMyODM4LCAzMjg0NCwgMzI4NTAsIDMyODU2LCAzMjg2MCwgMzI4NjUsIDMyODcwLCAzMjg3NywgMzI4ODIsIDMyODg2LCAKLSAgICAzMjg5MiwgMzI4OTcsIDMyOTAyLCAzMjkwNiwgMzI5MTEsIDMyOTE2LCAzMjkyMCwgMzI5MjQsIDMyOTI5LCAzMjkzNiwgCi0gICAgMzI5NDAsIDMyOTQ1LCAzMjk1MCwgMzI5NTQsIDMyOTU5LCAzMjk2MywgMzI5NjgsIDMyOTcyLCAzMjk3OCwgMzI5ODMsIAotICAgIDMyOTkwLCAzMjk5NSwgMzMwMDAsIDMzMDA0LCAzMzAwOSwgMzMwMTQsIDMzMDIxLCAzMzAyNiwgMzMwMzIsIDMzMDM3LCAKLSAgICAzMzA0MSwgMzMwNDYsIDMzMDUwLCAzMzA1NSwgMzMwNjIsIDMzMDY5LCAzMzA3NCwgMzMwNzksIDMzMDgzLCAzMzA4OSwgCi0gICAgMzMwOTUsIDMzMTAwLCAzMzEwNSwgMzMxMTAsIDMzMTE2LCAzMzEyMSwgMzMxMjcsIDMzMTMyLCAzMzEzOCwgMzMxNDQsIAotICAgIDMzMTUwLCAzMzE1NywgMzMxNjQsIDMzMTcxLCAzMzE3OCwgMzMxODUsIDMzMTkyLCAzMzE5NywgMzMyMDUsIDMzMjE0LCAKLSAgICAzMzIyMywgMzMyMzIsIDMzMjQxLCAzMzI1MCwgMzMyNTksIDMzMjcxLCAzMzI4MCwgMzMyODksIDMzMjk4LCAzMzMwNSwgCi0gICAgMzMzMTAsIDMzMzE3LCAzMzMyNSwgMzMzMzMsIDMzMzQwLCAzMzM0NywgMzMzNTQsIDMzMzYxLCAzMzM2OSwgMzMzNzgsIAotICAgIDMzMzg3LCAzMzM5NiwgMzM0MDUsIDMzNDE0LCAzMzQyMywgMzM0MzIsIDMzNDQxLCAzMzQ1MCwgMzM0NTksIDMzNDY4LCAKLSAgICAzMzQ3NywgMzM0ODYsIDMzNDk1LCAzMzUwMywgMzM1MTIsIDMzNTIzLCAzMzUzMSwgMzM1NDAsIDMzNTUxLCAzMzU2MCwgCi0gICAgMzM1NjksIDMzNTc4LCAzMzU4NywgMzM1OTUsIDMzNjA0LCAzMzYxMSwgMzM2MTYsIDMzNjI0LCAzMzYyOSwgMzM2MzYsIAotICAgIDMzNjQxLCAzMzY1MCwgMzM2NTYsIDMzNjYzLCAzMzY3MCwgMzM2NzUsIDMzNjgwLCAzMzY4OCwgMzM2OTYsIDMzNzA1LCAKLSAgICAzMzcxNCwgMzM3MTksIDMzNzI2LCAzMzczNywgMzM3NDUsIDMzNzU0LCAzMzc2MCwgMzM3NjYsIDMzNzcxLCAzMzc3OCwgCi0gICAgMzM3ODMsIDMzNzkyLCAzMzc5NywgMzM4MDIsIDMzODA3LCAzMzgxNCwgMzM4MjEsIDMzODI2LCAzMzgzNSwgMzM4NDMsIAotICAgIDMzODQ4LCAzMzg1MywgMzM4NjAsIDMzODY3LCAzMzg3MSwgMzM4NzUsIDMzODc4LCAzMzg4MSwgMzM4ODQsIDMzODg3LCAKLSAgICAzMzg5MCwgMzM4OTMsIDMzOTAwLCAzMzkwMywgMzM5MDYsIDMzOTExLCAzMzkxNSwgMzM5MTksIDMzOTIzLCAzMzkyNywgCi0gICAgMzM5MzEsIDMzOTQwLCAzMzk0NiwgMzM5NTIsIDMzOTU4LCAzMzk2NiwgMzM5NzQsIDMzOTgwLCAzMzk4NiwgMzM5OTMsIAotICAgIDMzOTk5LCAzNDAwNCwgMzQwMTAsIDM0MDE2LCAzNDAyMiwgMzQwMjksIDM0MDM1LCAzNDA0MywgMzQwNDksIDM0MDU2LCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNDA2MiwgMzQwNjksIAotICAgIDM0MDc2LCAzNDA4MSwgMzQwOTAsIDM0MDk4LCAzNDEwNiwgMzQxMTMsIDM0MTIwLCAzNDEyNywgMzQxMzQsIDM0MTQyLCAKLSAgICAzNDE1MCwgMzQxNjAsIDM0MTcwLCAzNDE3OCwgMzQxODYsIDM0MTk0LCAzNDIwMiwgMzQyMTEsIDM0MjIwLCAzNDIyOCwgCi0gICAgMzQyMzYsIDM0MjQ1LCAzNDI1NCwgMzQyNjQsIDM0Mjc0LCAzNDI4MywgMzQyOTIsIDM0MzAwLCAzNDMwOCwgMzQzMTYsIAotICAgIDM0MzI0LCAzNDMzNCwgMzQzNDQsIDM0MzUyLCAzNDM2MCwgMzQzNjgsIDM0Mzc2LCAzNDM4NCwgMzQzOTIsIDM0NDAwLCAKLSAgICAzNDQwOCwgMzQ0MTYsIDM0NDI0LCAzNDQzMiwgMzQ0NDAsIDM0NDQ5LCAzNDQ1OCwgMzQ0NjcsIDM0NDc2LCAzNDQ4NiwgCi0gICAgMzQ0OTYsIDM0NTAzLCAzNDUxMCwgMzQ1MTgsIDM0NTI2LCAzNDUzNSwgMzQ1NDQsIDM0NTUyLCAzNDU2MCwgMzQ1NzIsIAotICAgIDM0NTg0LCAzNDU5MywgMzQ2MDIsIDM0NjExLCAzNDYyMCwgMzQ2MjcsIDM0NjM0LCAzNDY0MiwgMzQ2NTAsIDM0NjU4LCAKLSAgICAzNDY2NiwgMzQ2NzQsIDM0NjgyLCAzNDY5MCwgMzQ2OTgsIDM0NzA3LCAzNDcxNiwgMzQ3MjUsIDM0NzM0LCAzNDc0MywgCi0gICAgMzQ3NTIsIDM0NzYyLCAzNDc3MiwgMzQ3ODIsIDM0NzkyLCAzNDgwMSwgMzQ4MTAsIDM0ODE3LCAzNDgyNCwgMzQ4MzIsIAotICAgIDM0ODQwLCAzNDg0OCwgMzQ4NTYsIDM0ODY0LCAzNDg3MiwgMzQ4ODQsIDM0ODk2LCAzNDkwNSwgMzQ5MTQsIDM0OTIyLCAKLSAgICAzNDkzMCwgMzQ5MzgsIDM0OTQ2LCAzNDk1NywgMzQ5NjgsIDM0OTc5LCAzNDk5MCwgMzUwMDIsIDM1MDE0LCAzNTAyMiwgCi0gICAgMzUwMzAsIDM1MDM4LCAzNTA0NiwgMzUwNTUsIDM1MDY0LCAzNTA3MywgMzUwODIsIDM1MDkwLCAzNTA5OCwgMzUxMDYsIAotICAgIDM1MTE0LCAzNTEyMiwgMzUxMzAsIDM1MTM5LCAzNTE0OCwgMzUxNTgsIDM1MTY4LCAzNTE3NSwgMzUxODIsIDM1MTkwLCAKLSAgICAzNTE5OCwgMzUyMDYsIDM1MjE0LCAzNTIyMSwgMzUyMjgsIDM1MjM2LCAzNTI0NCwgMzUyNTIsIDM1MjYwLCAzNTI2OCwgCi0gICAgMzUyNzYsIDM1Mjg0LCAzNTI5MiwgMzUzMDAsIDM1MzA4LCAzNTMxNiwgMzUzMjQsIDM1MzMyLCAzNTM0MCwgMzUzNDgsIAotICAgIDM1MzU2LCAzNTM2NSwgMzUzNzQsIDM1MzgzLCAzNTM5MSwgMzU0MDAsIDM1NDA5LCAzNTQxOCwgMzU0MjcsIDM1NDM3LCAKLSAgICAzNTQ0NiwgMzU0NTMsIDM1NDU4LCAzNTQ2NSwgMzU0NzIsIDM1NDgwLCAzNTQ4OCwgMzU0OTcsIDM1NTA2LCAzNTUxNiwgCi0gICAgMzU1MjYsIDM1NTM3LCAzNTU0OCwgMzU1NTcsIDM1NTY2LCAzNTU3NiwgMzU1ODYsIDM1NTk1LCAzNTYwNCwgMzU2MTQsIAotICAgIDM1NjI0LCAzNTYzNSwgMzU2NDYsIDM1NjU1LCAzNTY2NCwgMzU2NzQsIDM1Njg0LCAzNTY5MSwgMzU2OTgsIDM1NzA2LCAKLSAgICAzNTcxNCwgMzU3MjAsIDM1NzI2LCAzNTczNSwgMzU3NDQsIDM1NzU0LCAzNTc2NCwgMzU3NzUsIDM1Nzg2LCAzNTc5NSwgCi0gICAgMzU4MDQsIDM1ODE0LCAzNTgyNCwgMzU4MzMsIDM1ODQyLCAzNTg1MCwgMzU4NTgsIDM1ODY1LCAzNTg3MiwgMzU4ODAsIAotICAgIDM1ODg4LCAzNTg5NywgMzU5MDYsIDM1OTE2LCAzNTkyNiwgMzU5MzcsIDM1OTQ4LCAzNTk1NywgMzU5NjYsIDM1OTc2LCAKLSAgICAzNTk4NiwgMzU5OTUsIDM2MDA0LCAzNjAxNCwgMzYwMjQsIDM2MDM1LCAzNjA0NiwgMzYwNTUsIDM2MDY0LCAzNjA3NCwgCi0gICAgMzYwODQsIDM2MDkxLCAzNjA5OCwgMzYxMDYsIDM2MTE0LCAzNjEyMywgMzYxMzIsIDM2MTQyLCAzNjE1MiwgMzYxNjMsIAotICAgIDM2MTc0LCAzNjE4MywgMzYxOTIsIDM2MjAyLCAzNjIxMiwgMzYyMjAsIDM2MjI4LCAzNjIzNiwgMzYyNDQsIDM2MjUzLCAKLSAgICAzNjI2MiwgMzYyNjksIDM2Mjc2LCAzNjI4MywgMzYyOTAsIDM2Mjk3LCAzNjMwNCwgMzYzMTIsIDM2MzIwLCAzNjMyOCwgCi0gICAgMzYzMzYsIDM2MzQ3LCAzNjM1OCwgMzYzNjksIDM2MzgwLCAzNjM5MSwgMzY0MDIsIDM2NDEwLCAzNjQxOCwgMzY0MjksIAotICAgIDM2NDQwLCAzNjQ1MSwgMzY0NjIsIDM2NDczLCAzNjQ4NCwgMzY0OTIsIDM2NTAwLCAzNjUxMSwgMzY1MjIsIDM2NTMzLCAwLCAKLSAgICAwLCAzNjU0NCwgMzY1NTIsIDM2NTYwLCAzNjU3MSwgMzY1ODIsIDM2NTkzLCAwLCAwLCAzNjYwNCwgMzY2MTIsIDM2NjIwLCAKLSAgICAzNjYzMSwgMzY2NDIsIDM2NjUzLCAzNjY2NCwgMzY2NzUsIDM2Njg2LCAzNjY5NCwgMzY3MDIsIDM2NzEzLCAzNjcyNCwgCi0gICAgMzY3MzUsIDM2NzQ2LCAzNjc1NywgMzY3NjgsIDM2Nzc2LCAzNjc4NCwgMzY3OTUsIDM2ODA2LCAzNjgxNywgMzY4MjgsIAotICAgIDM2ODM5LCAzNjg1MCwgMzY4NTgsIDM2ODY2LCAzNjg3NywgMzY4ODgsIDM2ODk5LCAzNjkxMCwgMzY5MjEsIDM2OTMyLCAKLSAgICAzNjk0MCwgMzY5NDgsIDM2OTU5LCAzNjk3MCwgMzY5ODEsIDAsIDAsIDM2OTkyLCAzNzAwMCwgMzcwMDgsIDM3MDE5LCAKLSAgICAzNzAzMCwgMzcwNDEsIDAsIDAsIDM3MDUyLCAzNzA2MCwgMzcwNjgsIDM3MDc5LCAzNzA5MCwgMzcxMDEsIDM3MTEyLCAKLSAgICAzNzEyMywgMCwgMzcxMzQsIDAsIDM3MTQyLCAwLCAzNzE1MywgMCwgMzcxNjQsIDM3MTc1LCAzNzE4MywgMzcxOTEsIAotICAgIDM3MjAyLCAzNzIxMywgMzcyMjQsIDM3MjM1LCAzNzI0NiwgMzcyNTcsIDM3MjY1LCAzNzI3MywgMzcyODQsIDM3Mjk1LCAKLSAgICAzNzMwNiwgMzczMTcsIDM3MzI4LCAzNzMzOSwgMzczNDcsIDM3MzU1LCAzNzM2MywgMzczNzEsIDM3Mzc5LCAzNzM4NywgCi0gICAgMzczOTUsIDM3NDAzLCAzNzQxMSwgMzc0MTksIDM3NDI3LCAzNzQzNSwgMzc0NDMsIDAsIDAsIDM3NDUxLCAzNzQ2MiwgCi0gICAgMzc0NzMsIDM3NDg3LCAzNzUwMSwgMzc1MTUsIDM3NTI5LCAzNzU0MywgMzc1NTcsIDM3NTY4LCAzNzU3OSwgMzc1OTMsIAotICAgIDM3NjA3LCAzNzYyMSwgMzc2MzUsIDM3NjQ5LCAzNzY2MywgMzc2NzQsIDM3Njg1LCAzNzY5OSwgMzc3MTMsIDM3NzI3LCAKLSAgICAzNzc0MSwgMzc3NTUsIDM3NzY5LCAzNzc4MCwgMzc3OTEsIDM3ODA1LCAzNzgxOSwgMzc4MzMsIDM3ODQ3LCAzNzg2MSwgCi0gICAgMzc4NzUsIDM3ODg2LCAzNzg5NywgMzc5MTEsIDM3OTI1LCAzNzkzOSwgMzc5NTMsIDM3OTY3LCAzNzk4MSwgMzc5OTIsIAotICAgIDM4MDAzLCAzODAxNywgMzgwMzEsIDM4MDQ1LCAzODA1OSwgMzgwNzMsIDM4MDg3LCAzODA5NSwgMzgxMDMsIDM4MTE0LCAKLSAgICAzODEyMiwgMCwgMzgxMzMsIDM4MTQxLCAzODE1MiwgMzgxNjAsIDM4MTY4LCAzODE3NiwgMzgxODQsIDM4MTkyLCAzODE5NSwgCi0gICAgMzgxOTgsIDM4MjAxLCAzODIwNCwgMzgyMTAsIDM4MjIxLCAzODIyOSwgMCwgMzgyNDAsIDM4MjQ4LCAzODI1OSwgMzgyNjcsIAotICAgIDM4Mjc1LCAzODI4MywgMzgyOTEsIDM4Mjk5LCAzODMwNSwgMzgzMTEsIDM4MzE3LCAzODMyNSwgMzgzMzMsIDM4MzQ0LCAwLCAKLSAgICAwLCAzODM1NSwgMzgzNjMsIDM4Mzc0LCAzODM4MiwgMzgzOTAsIDM4Mzk4LCAwLCAzODQwNiwgMzg0MTIsIDM4NDE4LCAKLSAgICAzODQyNCwgMzg0MzIsIDM4NDQwLCAzODQ1MSwgMzg0NjIsIDM4NDcwLCAzODQ3OCwgMzg0ODYsIDM4NDk3LCAzODUwNSwgCi0gICAgMzg1MTMsIDM4NTIxLCAzODUyOSwgMzg1MzcsIDM4NTQzLCAzODU0OSwgMCwgMCwgMzg1NTIsIDM4NTYzLCAzODU3MSwgMCwgCi0gICAgMzg1ODIsIDM4NTkwLCAzODYwMSwgMzg2MDksIDM4NjE3LCAzODYyNSwgMzg2MzMsIDM4NjQxLCAzODY0NCwgMCwgMzg2NDcsIAotICAgIDM4NjUxLCAzODY1NSwgMzg2NTksIDM4NjYzLCAzODY2NywgMzg2NzEsIDM4Njc1LCAzODY3OSwgMzg2ODMsIDM4Njg3LCAKLSAgICAzODY5MSwgMzg2OTcsIDM4NzAzLCAzODcwOSwgMzg3MTIsIDM4NzE1LCAzODcxNywgMzg3MjEsIDM4NzI1LCAzODcyOSwgCi0gICAgMzg3MzMsIDM4NzM1LCAzODczOSwgMzg3NDMsIDM4NzQ5LCAzODc1NSwgMzg3NjIsIDM4NzY5LCAzODc3NCwgMzg3NzksIAotICAgIDM4Nzg1LCAzODc5MSwgMzg3OTMsIDM4Nzk2LCAzODc5OCwgMzg4MDIsIDM4ODA2LCAzODgxMCwgMzg4MTMsIDM4ODE3LCAKLSAgICAzODgyMSwgMzg4MjUsIDM4ODI5LCAzODgzMywgMzg4MzksIDM4ODQzLCAzODg0NywgMzg4NTMsIDM4ODU4LCAzODg2NSwgCi0gICAgMzg4NjcsIDM4ODcwLCAzODg3NCwgMzg4NzgsIDM4ODgzLCAzODg4OSwgMzg4OTEsIDM4OTAwLCAzODkwOSwgMzg5MTIsIAotICAgIDM4OTE2LCAzODkxOCwgMzg5MjAsIDM4OTIyLCAzODkyNSwgMzg5MzEsIDM4OTMzLCAzODkzNywgMzg5NDEsIDM4OTQ4LCAKLSAgICAzODk1NSwgMzg5NTksIDM4OTY0LCAzODk2OSwgMzg5NzQsIDM4OTc5LCAzODk4MywgMzg5ODcsIDM4OTkwLCAzODk5NCwgCi0gICAgMzg5OTgsIDM5MDA1LCAzOTAxMCwgMzkwMTQsIDM5MDE4LCAzOTAyMywgMzkwMjcsIDM5MDMxLCAzOTAzNiwgMzkwNDEsIAotICAgIDM5MDQ1LCAzOTA0OSwgMzkwNTMsIDM5MDU1LCAzOTA2MCwgMzkwNjUsIDM5MDY5LCAzOTA3MywgMzkwNzcsIDM5MDgxLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAzOTA4NSwgMzkwOTEsIDM5MDk3LCAzOTEwNCwgMzkxMTEsIDM5MTE2LCAzOTEyMSwgMzkxMjUsIDAsIDAsIAotICAgIDM5MTMxLCAzOTEzNCwgMzkxMzcsIDM5MTQwLCAzOTE0MywgMzkxNDYsIDM5MTQ5LCAzOTE1MywgMzkxNTcsIDM5MTYyLCAKLSAgICAzOTE2NywgMzkxNzIsIDM5MTc5LCAzOTE4MywgMzkxODYsIDM5MTg5LCAzOTE5MiwgMzkxOTUsIDM5MTk4LCAzOTIwMSwgCi0gICAgMzkyMDQsIDM5MjA3LCAzOTIxMCwgMzkyMTQsIDM5MjE4LCAzOTIyMywgMzkyMjgsIDAsIDM5MjMzLCAzOTIzOSwgMzkyNDUsIAotICAgIDM5MjUxLCAzOTI1OCwgMzkyNjUsIDM5MjcyLCAzOTI3OSwgMzkyODUsIDM5MjkxLCAzOTI5OCwgMzkzMDUsIDM5MzEyLCAwLCAKLSAgICAwLCAwLCAzOTMxOSwgMzkzMjIsIDM5MzI1LCAzOTMyOCwgMzkzMzMsIDM5MzM2LCAzOTMzOSwgMzkzNDIsIDM5MzQ1LCAKLSAgICAzOTM0OCwgMzkzNTEsIDM5MzU1LCAzOTM1OCwgMzkzNjEsIDM5MzY0LCAzOTM2NywgMzkzNzAsIDM5Mzc1LCAzOTM3OCwgCi0gICAgMzkzODEsIDM5Mzg0LCAzOTM4NywgMzkzOTAsIDM5Mzk1LCAzOTM5OCwgMzk0MDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM5NDA2LCAzOTQxMSwgMzk0MTYsIDM5NDIzLCAKLSAgICAzOTQzMSwgMzk0MzYsIDM5NDQxLCAzOTQ0NSwgMzk0NDksIDM5NDU0LCAzOTQ2MSwgMzk0NjgsIDM5NDcyLCAzOTQ3NywgCi0gICAgMzk0ODIsIDM5NDg3LCAzOTQ5MiwgMzk0OTksIDM5NTA0LCAzOTUwOSwgMzk1MTQsIDM5NTIzLCAzOTUzMCwgMzk1MzcsIAotICAgIDM5NTQxLCAzOTU0NiwgMzk1NTIsIDM5NTU3LCAzOTU2NCwgMzk1NzMsIDM5NTgyLCAzOTU4NiwgMzk1OTAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM5NTk0LCAzOTU5OCwgMzk2MDYsIDM5NjEwLCAzOTYxNCwgCi0gICAgMzk2MTksIDM5NjIzLCAzOTYyNywgMzk2MzEsIDM5NjMzLCAzOTYzNywgMzk2NDEsIDM5NjQ1LCAzOTY1MCwgMzk2NTQsIAotICAgIDM5NjU4LCAzOTY2NiwgMzk2NjksIDM5NjczLCAzOTY3NiwgMzk2NzksIDM5Njg1LCAzOTY4OSwgMzk2OTIsIDM5Njk4LCAKLSAgICAzOTcwMiwgMzk3MDYsIDM5NzEwLCAzOTcxMywgMzk3MTcsIDM5NzIwLCAzOTcyNCwgMzk3MjYsIDM5NzI5LCAzOTczMiwgCi0gICAgMzk3MzYsIDM5NzM4LCAzOTc0MiwgMzk3NDUsIDM5NzQ4LCAzOTc1MywgMzk3NTgsIDM5NzY1LCAzOTc2OCwgMzk3NzEsIAotICAgIDM5Nzc1LCAzOTc4MCwgMzk3ODMsIDM5Nzg2LCAzOTc4OSwgMzk3OTMsIDM5Nzk4LCAzOTgwMSwgMzk4MDQsIDM5ODA2LCAKLSAgICAzOTgwOSwgMzk4MTIsIDM5ODE1LCAzOTgxOSwgMzk4MjQsIDM5ODI3LCAzOTgzMSwgMzk4MzUsIDM5ODM5LCAzOTg0MywgCi0gICAgMzk4NDgsIDM5ODU0LCAzOTg1OSwgMzk4NjQsIDM5ODcwLCAzOTg3NSwgMzk4ODAsIDM5ODg0LCAzOTg4OCwgMzk4OTMsIAotICAgIDM5ODk3LCAzOTkwMSwgMzk5MDQsIDM5OTA2LCAzOTkxMSwgMzk5MTcsIDM5OTI0LCAzOTkzMSwgMzk5MzgsIDM5OTQ1LCAKLSAgICAzOTk1MiwgMzk5NTksIDM5OTY2LCAzOTk3MywgMzk5ODEsIDM5OTg4LCAzOTk5NiwgNDAwMDMsIDQwMDEwLCA0MDAxOCwgCi0gICAgNDAwMjYsIDQwMDMxLCA0MDAzNiwgNDAwNDEsIDQwMDQ2LCA0MDA1MSwgNDAwNTYsIDQwMDYxLCA0MDA2NiwgNDAwNzEsIAotICAgIDQwMDc2LCA0MDA4MiwgNDAwODgsIDQwMDk0LCA0MDEwMCwgNDAxMDcsIDQwMTE1LCA0MDEyMiwgNDAxMjgsIDQwMTM0LCAKLSAgICA0MDE0MCwgNDAxNDYsIDQwMTUyLCA0MDE1OCwgNDAxNjQsIDQwMTcwLCA0MDE3NiwgNDAxODMsIDQwMTkwLCA0MDE5NywgCi0gICAgNDAyMDQsIDQwMjEyLCA0MDIyMSwgNDAyMjksIDQwMjQwLCA0MDI0OCwgNDAyNTYsIDQwMjY1LCA0MDI3MiwgNDAyODEsIAotICAgIDQwMjkwLCA0MDI5OCwgNDAzMDcsIDAsIDAsIDAsIDAsIDAsIDAsIDQwMzE1LCA0MDMxNywgNDAzMjAsIDQwMzIyLCA0MDMyNSwgCi0gICAgNDAzMjgsIDQwMzMxLCA0MDMzNiwgNDAzNDEsIDQwMzQ2LCA0MDM1MSwgNDAzNTUsIDQwMzU5LCA0MDM2MywgNDAzNjcsIAotICAgIDQwMzcyLCA0MDM3OCwgNDAzODMsIDQwMzg5LCA0MDM5NCwgNDAzOTksIDQwNDA0LCA0MDQxMCwgNDA0MTUsIDQwNDIxLCAKLSAgICA0MDQyNywgNDA0MzEsIDQwNDM1LCA0MDQ0MCwgNDA0NDUsIDQwNDUwLCA0MDQ1NSwgNDA0NjAsIDQwNDY4LCA0MDQ3NiwgCi0gICAgNDA0ODQsIDQwNDkyLCA0MDQ5OSwgNDA1MDcsIDQwNTE0LCA0MDUyMSwgNDA1MzAsIDQwNTQyLCA0MDU0OCwgNDA1NTQsIAotICAgIDQwNTYyLCA0MDU3MCwgNDA1NzksIDQwNTg4LCA0MDU5NiwgNDA2MDQsIDQwNjEzLCA0MDYyMiwgNDA2MjcsIDQwNjM1LCAKLSAgICA0MDY0MCwgNDA2NDUsIDQwNjUxLCA0MDY1NiwgNDA2NjIsIDQwNjY5LCA0MDY3NiwgNDA2ODEsIDQwNjg3LCA0MDY5MiwgCi0gICAgNDA2OTUsIDQwNjk5LCA0MDcwMiwgNDA3MDYsIDQwNzEwLCA0MDcxNCwgNDA3MjAsIDQwNzI2LCA0MDczMiwgNDA3MzgsIAotICAgIDQwNzQyLCA0MDc0NiwgNDA3NTAsIDQwNzU0LCA0MDc2MCwgNDA3NjYsIDQwNzcwLCA0MDc3NSwgNDA3NzksIDQwNzg0LCAKLSAgICA0MDc4OSwgNDA3OTQsIDQwNzk3LCA0MDgwMSwgNDA4MDQsIDQwODA4LCA0MDgxNSwgNDA4MjMsIDQwODM0LCA0MDg0NSwgCi0gICAgNDA4NTAsIDQwODU5LCA0MDg2NiwgNDA4NzUsIDQwODg0LCA0MDg4OCwgNDA4OTQsIDQwOTAyLCA0MDkwNiwgNDA5MTEsIAotICAgIDQwOTE2LCA0MDkyMiwgNDA5MjgsIDQwOTM0LCA0MDk0MSwgNDA5NDUsIDQwOTQ5LCA0MDk1NCwgNDA5NTcsIDQwOTU5LCAKLSAgICA0MDk2MywgNDA5NjcsIDQwOTc1LCA0MDk3OSwgNDA5ODEsIDQwOTgzLCA0MDk4NywgNDA5OTUsIDQxMDAwLCA0MTAwNiwgCi0gICAgNDEwMTYsIDQxMDIzLCA0MTAyOCwgNDEwMzIsIDQxMDM2LCA0MTA0MCwgNDEwNDMsIDQxMDQ2LCA0MTA0OSwgNDEwNTMsIAotICAgIDQxMDU3LCA0MTA2MSwgNDEwNjUsIDQxMDY5LCA0MTA3MiwgNDEwNzYsIDQxMDgwLCA0MTA4MywgNDEwODUsIDQxMDg4LCAKLSAgICA0MTA5MCwgNDEwOTQsIDQxMDk4LCA0MTEwMCwgNDExMDYsIDQxMTA5LCA0MTExNCwgNDExMTgsIDQxMTIyLCA0MTEyNCwgCi0gICAgNDExMjYsIDQxMTI4LCA0MTEzMSwgNDExMzUsIDQxMTM5LCA0MTE0MywgNDExNDcsIDQxMTUxLCA0MTE1NywgNDExNjMsIAotICAgIDQxMTY1LCA0MTE2NywgNDExNjksIDQxMTcxLCA0MTE3NCwgNDExNzYsIDQxMTgwLCA0MTE4MiwgNDExODYsIDQxMTg5LCAKLSAgICA0MTE5NSwgNDExOTksIDQxMjAzLCA0MTIwNiwgNDEyMDksIDQxMjEzLCA0MTIxOSwgNDEyMjMsIDQxMjMzLCA0MTI0MywgCi0gICAgNDEyNDcsIDQxMjUzLCA0MTI1OSwgNDEyNjIsIDQxMjY2LCA0MTI2OSwgNDEyNzQsIDQxMjc4LCA0MTI4NCwgNDEyODgsIAotICAgIDQxMzAwLCA0MTMwOCwgNDEzMTIsIDQxMzE2LCA0MTMyMiwgNDEzMjYsIDQxMzI5LCA0MTMzMSwgNDEzMzQsIDQxMzM4LCAKLSAgICA0MTM0MiwgNDEzNDksIDQxMzUzLCA0MTM1NywgNDEzNjEsIDQxMzY0LCA0MTM2OSwgNDEzNzQsIDQxMzc5LCA0MTM4NCwgCi0gICAgNDEzODksIDQxMzk0LCA0MTQwMiwgNDE0MTAsIDQxNDE0LCA0MTQxOCwgNDE0MjAsIDQxNDI1LCA0MTQyOSwgNDE0MzMsIAotICAgIDQxNDQxLCA0MTQ0OSwgNDE0NTUsIDQxNDYxLCA0MTQ3MCwgNDE0NzksIDQxNDg0LCA0MTQ4OSwgNDE0OTcsIDQxNTA1LCAKLSAgICA0MTUwNywgNDE1MDksIDQxNTE0LCA0MTUxOSwgNDE1MjUsIDQxNTMxLCA0MTUzNywgNDE1NDMsIDQxNTQ3LCA0MTU1MSwgCi0gICAgNDE1NTgsIDQxNTY1LCA0MTU3MSwgNDE1NzcsIDQxNTg3LCA0MTU5NywgNDE2MDUsIDQxNjEzLCA0MTYxNSwgNDE2MTksIAotICAgIDQxNjIzLCA0MTYyOCwgNDE2MzMsIDQxNjQwLCA0MTY0NywgNDE2NTAsIDQxNjUzLCA0MTY1NiwgNDE2NTksIDQxNjYyLCAKLSAgICA0MTY2NywgNDE2NzEsIDQxNjc2LCA0MTY4MSwgNDE2ODQsIDQxNjg3LCA0MTY5MCwgNDE2OTMsIDQxNjk2LCA0MTcwMCwgCi0gICAgNDE3MDMsIDQxNzA2LCA0MTcwOSwgNDE3MTIsIDQxNzE0LCA0MTcxNiwgNDE3MTgsIDQxNzIwLCA0MTcyOCwgNDE3MzYsIAotICAgIDQxNzQyLCA0MTc0NiwgNDE3NTIsIDQxNzYyLCA0MTc2OCwgNDE3NzQsIDQxNzgwLCA0MTc4OCwgNDE3OTYsIDQxODA3LCAKLSAgICA0MTgxMSwgNDE4MTUsIDQxODE3LCA0MTgyMywgNDE4MjUsIDQxODI3LCA0MTgyOSwgNDE4MzEsIDQxODM3LCA0MTg0MCwgCi0gICAgNDE4NDYsIDQxODUyLCA0MTg1NiwgNDE4NjAsIDQxODY0LCA0MTg2NywgNDE4NzEsIDQxODc1LCA0MTg3NywgNDE4ODYsIAotICAgIDQxODk1LCA0MTkwMCwgNDE5MDUsIDQxOTExLCA0MTkxNywgNDE5MjMsIDQxOTI2LCA0MTkyOSwgNDE5MzIsIDQxOTM1LCAKLSAgICA0MTkzNywgNDE5NDIsIDQxOTQ3LCA0MTk1MiwgNDE5NTgsIDQxOTY0LCA0MTk3MiwgNDE5ODAsIDQxOTg2LCA0MTk5MiwgCi0gICAgNDE5OTgsIDQyMDA0LCA0MjAxMywgNDIwMjIsIDQyMDMxLCA0MjA0MCwgNDIwNDksIDQyMDU4LCA0MjA2NywgNDIwNzYsIAotICAgIDQyMDg1LCA0MjA5NCwgNDIxMDIsIDQyMTE0LCA0MjEyNCwgNDIxMzksIDQyMTQyLCA0MjE0NywgNDIxNTMsIDQyMTU5LCAKLSAgICA0MjE2NiwgNDIxODAsIDQyMTk1LCA0MjIwMSwgNDIyMDcsIDQyMjE0LCA0MjIyMCwgNDIyMjgsIDQyMjM0LCA0MjI0NywgCi0gICAgNDIyNjEsIDQyMjY2LCA0MjI3MiwgNDIyNzksIDQyMjgyLCA0MjI4NSwgNDIyODcsIDQyMjkwLCA0MjI5MywgNDIyOTUsIAotICAgIDQyMjk3LCA0MjMwMSwgNDIzMDQsIDQyMzA3LCA0MjMxMCwgNDIzMTMsIDQyMzE4LCA0MjMyMywgNDIzMjgsIDQyMzMzLCAKLSAgICA0MjMzOCwgNDIzNDEsIDQyMzQzLCA0MjM0NSwgNDIzNDcsIDQyMzUxLCA0MjM1NSwgNDIzNTksIDQyMzY1LCA0MjM3MCwgCi0gICAgNDIzNzIsIDQyMzc0LCA0MjM3OSwgNDIzODQsIDQyMzg5LCA0MjM5NCwgNDIzOTksIDQyNDA0LCA0MjQwNiwgNDI0MDgsIAotICAgIDQyNDE3LCA0MjQyMSwgNDI0MjksIDQyNDM4LCA0MjQ0MCwgNDI0NDUsIDQyNDUwLCA0MjQ1OCwgNDI0NjIsIDQyNDY0LCAKLSAgICA0MjQ2OCwgNDI0NzAsIDQyNDc0LCA0MjQ3OCwgNDI0ODIsIDQyNDg0LCA0MjQ4NiwgNDI0ODgsIDQyNDk1LCA0MjUwNCwgCi0gICAgNDI1MTMsIDQyNTIyLCA0MjUzMSwgNDI1NDAsIDQyNTQ5LCA0MjU1OCwgNDI1NjcsIDQyNTc1LCA0MjU4MywgNDI1OTIsIAotICAgIDQyNjAxLCA0MjYxMCwgNDI2MTksIDQyNjI3LCA0MjYzNSwgNDI2NDQsIDQyNjUzLCA0MjY2MiwgNDI2NzIsIDQyNjgxLCAKLSAgICA0MjY5MSwgNDI3MDAsIDQyNzEwLCA0MjcxOSwgNDI3MjksIDQyNzM5LCA0Mjc0OCwgNDI3NTgsIDQyNzY3LCA0Mjc3NywgCi0gICAgNDI3ODYsIDQyNzk2LCA0MjgwNSwgNDI4MTQsIDQyODIzLCA0MjgzMiwgNDI4NDEsIDQyODUxLCA0Mjg2MCwgNDI4NjksIAotICAgIDQyODc4LCA0Mjg4OCwgNDI4OTcsIDQyOTA2LCA0MjkxNSwgNDI5MjQsIDQyOTM0LCA0Mjk0NCwgNDI5NTMsIDQyOTYyLCAKLSAgICA0Mjk3MCwgNDI5NzgsIDQyOTg1LCA0Mjk5MywgNDMwMDIsIDQzMDEzLCA0MzAyMiwgNDMwMzEsIDQzMDQwLCA0MzA0NywgCi0gICAgNDMwNTQsIDQzMDYxLCA0MzA3MCwgNDMwNzksIDQzMDg4LCA0MzA5NywgNDMxMDQsIDQzMTA5LCA0MzExOCwgNDMxMjMsIAotICAgIDQzMTI2LCA0MzEzNCwgNDMxMzcsIDQzMTQyLCA0MzE0NywgNDMxNTAsIDQzMTUzLCA0MzE2MSwgNDMxNjQsIDQzMTY5LCAKLSAgICA0MzE3MiwgNDMxNzksIDQzMTg0LCA0MzE5MiwgNDMxOTUsIDQzMTk4LCA0MzIwMSwgNDMyMDYsIDQzMjExLCA0MzIxNCwgCi0gICAgNDMyMTcsIDQzMjI1LCA0MzIyOCwgNDMyMzUsIDQzMjQyLCA0MzI0NiwgNDMyNTAsIDQzMjU1LCA0MzI2MCwgNDMyNjYsIAotICAgIDQzMjcxLCA0MzI3NywgNDMyODMsIDQzMjg4LCA0MzI5NCwgNDMzMDIsIDQzMzA4LCA0MzMxNiwgNDMzMjQsIDQzMzMwLCAKLSAgICA0MzMzOCwgNDMzNDYsIDQzMzU1LCA0MzM2MywgNDMzNjksIDQzMzc3LCA0MzM4NiwgNDMzOTQsIDQzMzk4LCA0MzQwMywgCi0gICAgNDM0MTYsIDQzNDI5LCA0MzQzMywgNDM0MzcsIDQzNDQxLCA0MzQ0NSwgNDM0NTUsIDQzNDU5LCA0MzQ2NCwgNDM0NjksIAotICAgIDQzNDc0LCA0MzQ3OSwgNDM0ODQsIDQzNDg5LCA0MzQ5OSwgNDM1MDksIDQzNTE3LCA0MzUyNywgNDM1MzcsIDQzNTQ1LCAKLSAgICA0MzU1NSwgNDM1NjUsIDQzNTczLCA0MzU4MywgNDM1OTMsIDQzNjAxLCA0MzYwOSwgNDM2MTksIDQzNjI5LCA0MzYzMiwgCi0gICAgNDM2MzUsIDQzNjM4LCA0MzY0MywgNDM2NDcsIDQzNjUzLCA0MzY2MCwgNDM2NjcsIDQzNjc1LCA0MzY4MiwgNDM2ODYsIAotICAgIDQzNjkwLCA0MzY5NCwgNDM2OTgsIDQzNzAwLCA0MzcwNCwgNDM3MDgsIDQzNzEzLCA0MzcxOCwgNDM3MjUsIDQzNzMyLCAKLSAgICA0MzczNSwgNDM3NDIsIDQzNzQ0LCA0Mzc0NiwgNDM3NTAsIDQzNzU0LCA0Mzc1OSwgNDM3NjUsIDQzNzcxLCA0Mzc3NywgCi0gICAgNDM3ODMsIDQzNzkyLCA0MzgwMSwgNDM4MTAsIDQzODE0LCA0MzgxNiwgNDM4MjAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDQzODI3LCA0MzgzMSwgNDM4MzgsIDQzODQ1LCA0Mzg1MiwgNDM4NTksIDQzODYzLCA0Mzg2NywgCi0gICAgNDM4NzEsIDQzODc1LCA0Mzg4MCwgNDM4ODYsIDQzODkxLCA0Mzg5NywgNDM5MDMsIDQzOTA5LCA0MzkxNSwgNDM5MjMsIAotICAgIDQzOTMwLCA0MzkzNywgNDM5NDQsIDQzOTUxLCA0Mzk1NiwgNDM5NjIsIDQzOTcxLCA0Mzk3NSwgNDM5ODIsIDQzOTg2LCAKLSAgICA0Mzk5MCwgNDM5OTYsIDQ0MDAyLCA0NDAwOCwgNDQwMTQsIDQ0MDE4LCA0NDAyMiwgNDQwMjUsIDQ0MDI4LCA0NDAzMiwgCi0gICAgNDQwMzksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDQ0MDQ2LCA0NDA0OSwgNDQwNTMsIDQ0MDU3LCA0NDA2MywgNDQwNjksIDQ0MDc1LCA0NDA4MywgNDQwOTAsIAotICAgIDQ0MDk0LCA0NDEwMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgNDQxMDcsIDQ0MTEwLCA0NDExMywgNDQxMTYsIDQ0MTE5LCA0NDEyMiwgNDQxMjUsIDQ0MTI4LCA0NDEzMSwgNDQxMzQsIAotICAgIDQ0MTM4LCA0NDE0MiwgNDQxNDYsIDQ0MTUwLCA0NDE1NCwgNDQxNTgsIDQ0MTYyLCA0NDE2NiwgNDQxNzAsIDQ0MTc0LCAKLSAgICA0NDE3OCwgNDQxODEsIDQ0MTg0LCA0NDE4NywgNDQxOTAsIDQ0MTkzLCA0NDE5NiwgNDQxOTksIDQ0MjAyLCA0NDIwNSwgCi0gICAgNDQyMDksIDQ0MjEzLCA0NDIxNywgNDQyMjEsIDQ0MjI1LCA0NDIyOSwgNDQyMzMsIDQ0MjM3LCA0NDI0MSwgNDQyNDUsIAotICAgIDQ0MjQ5LCA0NDI1NSwgNDQyNjEsIDQ0MjY3LCA0NDI3NCwgNDQyODEsIDQ0Mjg4LCA0NDI5NSwgNDQzMDIsIDQ0MzA5LCAKLSAgICA0NDMxNiwgNDQzMjMsIDQ0MzMwLCA0NDMzNywgNDQzNDQsIDQ0MzUxLCA0NDM1OCwgNDQzNjUsIDQ0MzcyLCA0NDM3OSwgCi0gICAgNDQzODYsIDQ0MzkxLCA0NDM5NywgNDQ0MDMsIDQ0NDA5LCA0NDQxNCwgNDQ0MjAsIDQ0NDI2LCA0NDQzMiwgNDQ0MzcsIAotICAgIDQ0NDQzLCA0NDQ0OSwgNDQ0NTQsIDQ0NDU5LCA0NDQ2NSwgNDQ0NzAsIDQ0NDc2LCA0NDQ4MiwgNDQ0ODcsIDQ0NDkzLCAKLSAgICA0NDQ5OSwgNDQ1MDQsIDQ0NTEwLCA0NDUxNiwgNDQ1MjIsIDQ0NTI4LCA0NDUzNCwgNDQ1MzksIDQ0NTQ1LCA0NDU1MSwgCi0gICAgNDQ1NTcsIDQ0NTYyLCA0NDU2OCwgNDQ1NzQsIDQ0NTgwLCA0NDU4NSwgNDQ1OTEsIDQ0NTk3LCA0NDYwMiwgNDQ2MDcsIAotICAgIDQ0NjEzLCA0NDYxOCwgNDQ2MjQsIDQ0NjMwLCA0NDYzNSwgNDQ2NDEsIDQ0NjQ3LCA0NDY1MiwgNDQ2NTgsIDQ0NjY0LCAKLSAgICA0NDY3MCwgNDQ2NzYsIDQ0NjgyLCA0NDY4NywgNDQ2OTMsIDQ0Njk5LCA0NDcwNSwgNDQ3MTAsIDQ0NzE2LCA0NDcyMiwgCi0gICAgNDQ3MjgsIDQ0NzMzLCA0NDczOSwgNDQ3NDUsIDQ0NzUwLCA0NDc1NSwgNDQ3NjEsIDQ0NzY2LCA0NDc3MiwgNDQ3NzgsIAotICAgIDQ0NzgzLCA0NDc4OSwgNDQ3OTUsIDQ0ODAwLCA0NDgwNiwgNDQ4MTIsIDQ0ODE4LCA0NDgyNCwgNDQ4MzAsIDQ0ODM0LCAKLSAgICA0NDgzOSwgNDQ4NDQsIDQ0ODQ5LCA0NDg1NCwgNDQ4NTksIDQ0ODY0LCA0NDg2OSwgNDQ4NzQsIDQ0ODc5LCA0NDg4NCwgCi0gICAgNDQ4ODgsIDQ0ODkyLCA0NDg5NiwgNDQ5MDAsIDQ0OTA0LCA0NDkwOCwgNDQ5MTIsIDQ0OTE2LCA0NDkyMCwgNDQ5MjUsIAotICAgIDQ0OTMwLCA0NDkzNSwgNDQ5NDAsIDQ0OTQ1LCA0NDk1MCwgNDQ5NTksIDQ0OTY4LCA0NDk3NywgNDQ5ODYsIDQ0OTk1LCAKLSAgICA0NTAwNCwgNDUwMTMsIDQ1MDIyLCA0NTAyOSwgNDUwMzcsIDQ1MDQ1LCA0NTA1MiwgNDUwNTksIDQ1MDY3LCA0NTA3NSwgCi0gICAgNDUwODIsIDQ1MDg5LCA0NTA5NywgNDUxMDUsIDQ1MTEyLCA0NTExOSwgNDUxMjcsIDQ1MTM1LCA0NTE0MiwgNDUxNDksIAotICAgIDQ1MTU3LCA0NTE2NiwgNDUxNzUsIDQ1MTgzLCA0NTE5MiwgNDUyMDEsIDQ1MjA4LCA0NTIxNSwgNDUyMjMsIDQ1MjMyLCAKLSAgICA0NTI0MSwgNDUyNDksIDQ1MjU4LCA0NTI2NywgNDUyNzQsIDQ1MjgxLCA0NTI5MCwgNDUyOTksIDQ1MzA3LCA0NTMxNSwgCi0gICAgNDUzMjQsIDQ1MzMzLCA0NTM0MCwgNDUzNDcsIDQ1MzU2LCA0NTM2NSwgNDUzNzMsIDQ1MzgxLCA0NTM5MCwgNDUzOTksIAotICAgIDQ1NDA2LCA0NTQxMywgNDU0MjIsIDQ1NDMxLCA0NTQzOSwgNDU0NDgsIDQ1NDU3LCA0NTQ2NSwgNDU0NzUsIDQ1NDg1LCAKLSAgICA0NTQ5NSwgNDU1MDUsIDQ1NTE0LCA0NTUyMywgNDU1MzIsIDQ1NTQxLCA0NTU0OCwgNDU1NTYsIDQ1NTY0LCA0NTU3MiwgCi0gICAgNDU1ODAsIDQ1NTg1LCA0NTU5MCwgNDU1OTksIDQ1NjA3LCA0NTYxNCwgNDU2MjMsIDQ1NjMxLCA0NTYzOCwgNDU2NDcsIAotICAgIDQ1NjU1LCA0NTY2MiwgNDU2NzEsIDQ1Njc5LCA0NTY4NiwgNDU2OTUsIDQ1NzAzLCA0NTcxMCwgNDU3MTksIDQ1NzI3LCAKLSAgICA0NTczNCwgNDU3NDMsIDQ1NzUxLCA0NTc1OCwgNDU3NjcsIDQ1Nzc1LCA0NTc4MiwgNDU3OTEsIDQ1Nzk5LCA0NTgwNiwgCi0gICAgNDU4MTUsIDQ1ODI0LCA0NTgzMywgNDU4NDIsIDQ1ODU2LCA0NTg3MCwgNDU4NzcsIDQ1ODgyLCA0NTg4NywgNDU4OTIsIAotICAgIDQ1ODk3LCA0NTkwMiwgNDU5MDcsIDQ1OTEyLCA0NTkxNywgNDU5MjUsIDQ1OTMzLCA0NTk0MSwgNDU5NDksIDQ1OTU0LCAKLSAgICA0NTk2MSwgNDU5NjgsIDQ1OTc1LCA0NTk4MCwgNDU5ODgsIDQ1OTk1LCA0NjAwMywgNDYwMDcsIDQ2MDE0LCA0NjAyMCwgCi0gICAgNDYwMjcsIDQ2MDMxLCA0NjAzNywgNDYwNDMsIDQ2MDQ5LCA0NjA1MywgNDYwNTYsIDQ2MDYwLCA0NjA2NCwgNDYwNzEsIAotICAgIDQ2MDc3LCA0NjA4MywgNDYwODksIDQ2MDk1LCA0NjEwOSwgNDYxMTksIDQ2MTMzLCA0NjE0NywgNDYxNTMsIDQ2MTYzLCAKLSAgICA0NjE3NywgNDYxODAsIDQ2MTgzLCA0NjE5MCwgNDYxOTgsIDQ2MjAzLCA0NjIwOCwgNDYyMTYsIDQ2MjI4LCA0NjI0MCwgCi0gICAgNDYyNDgsIDQ2MjUyLCA0NjI1NiwgNDYyNTksIDQ2MjYyLCA0NjI2NiwgNDYyNzAsIDQ2MjczLCA0NjI3NiwgNDYyODEsIAotICAgIDQ2Mjg2LCA0NjI5MiwgNDYyOTgsIDQ2MzAzLCA0NjMwOCwgNDYzMTQsIDQ2MzIwLCA0NjMyNSwgNDYzMzAsIDQ2MzM1LCAKLSAgICA0NjM0MCwgNDYzNDYsIDQ2MzUyLCA0NjM1NywgNDYzNjIsIDQ2MzY4LCA0NjM3NCwgNDYzNzksIDQ2Mzg0LCA0NjM4NywgCi0gICAgNDYzOTAsIDQ2Mzk5LCA0NjQwMSwgNDY0MDMsIDQ2NDA2LCA0NjQxMCwgNDY0MTYsIDQ2NDE4LCA0NjQyMSwgNDY0MjgsIAotICAgIDQ2NDM1LCA0NjQ0MywgNDY0NTEsIDQ2NDYxLCA0NjQ3NSwgNDY0ODAsIDQ2NDg1LCA0NjQ4OSwgNDY0OTQsIDQ2NTAyLCAKLSAgICA0NjUxMCwgNDY1MTksIDQ2NTI4LCA0NjUzNywgNDY1NDYsIDQ2NTUxLCA0NjU1NiwgNDY1NjIsIDQ2NTY4LCA0NjU3NCwgCi0gICAgNDY1ODAsIDQ2NTgzLCA0NjU4OSwgNDY1OTUsIDQ2NjA1LCA0NjYxNSwgNDY2MjMsIDQ2NjMxLCA0NjY0MCwgNDY2NDksIAotICAgIDQ2NjUzLCA0NjY2MSwgNDY2NjksIDQ2Njc3LCA0NjY4NSwgNDY2OTQsIDQ2NzAzLCA0NjcxMiwgNDY3MjEsIDQ2NzI2LCAKLSAgICA0NjczMSwgNDY3MzYsIDQ2NzQxLCA0Njc0NiwgNDY3NTIsIDQ2NzU4LCA0Njc2MywgNDY3NjksIDQ2NzcxLCA0Njc3MywgCi0gICAgNDY3NzUsIDQ2Nzc3LCA0Njc4MCwgNDY3ODMsIDQ2Nzg1LCA0Njc4NywgNDY3ODksIDQ2NzkzLCA0Njc5NywgNDY3OTksIAotICAgIDQ2ODAxLCA0NjgwNCwgNDY4MDcsIDQ2ODExLCA0NjgxNywgNDY4MjMsIDQ2ODI1LCA0NjgzMiwgNDY4MzYsIDQ2ODQxLCAKLSAgICA0Njg0NiwgNDY4NDgsIDQ2ODU4LCA0Njg2NCwgNDY4NzAsIDQ2ODc2LCA0Njg4MiwgNDY4ODgsIDQ2ODk0LCA0Njg5OSwgCi0gICAgNDY5MDIsIDQ2OTA1LCA0NjkwOCwgNDY5MTAsIDQ2OTEyLCA0NjkxNiwgNDY5MjAsIDQ2OTI1LCA0NjkzMCwgNDY5MzUsIAotICAgIDQ2OTM4LCA0Njk0MiwgNDY5NDcsIDQ2OTUwLCA0Njk1NCwgNDY5NTksIDQ2OTY0LCA0Njk2OSwgNDY5NzQsIDQ2OTc5LCAKLSAgICA0Njk4NCwgNDY5ODksIDQ2OTk0LCA0Njk5OSwgNDcwMDQsIDQ3MDA5LCA0NzAxNCwgNDcwMjAsIDQ3MDI2LCA0NzAzMiwgCi0gICAgNDcwMzQsIDQ3MDM3LCA0NzAzOSwgNDcwNDIsIDQ3MDQ0LCA0NzA0NiwgNDcwNDgsIDQ3MDUwLCA0NzA1MiwgNDcwNTQsIAotICAgIDQ3MDU2LCA0NzA1OCwgNDcwNjAsIDQ3MDYyLCA0NzA2NCwgNDcwNjYsIDQ3MDY4LCA0NzA3MCwgNDcwNzIsIDQ3MDc0LCAKLSAgICA0NzA3NiwgNDcwODEsIDQ3MDg2LCA0NzA5MSwgNDcwOTYsIDQ3MTAxLCA0NzEwNiwgNDcxMTEsIDQ3MTE2LCA0NzEyMSwgCi0gICAgNDcxMjYsIDQ3MTMxLCA0NzEzNiwgNDcxNDEsIDQ3MTQ2LCA0NzE1MSwgNDcxNTYsIDQ3MTYxLCA0NzE2NiwgNDcxNzEsIAotICAgIDQ3MTc2LCA0NzE4MCwgNDcxODQsIDQ3MTg4LCA0NzE5NCwgNDcyMDAsIDQ3MjA1LCA0NzIxMCwgNDcyMTUsIDQ3MjIwLCAKLSAgICA0NzIyNSwgNDcyMzAsIDQ3MjM4LCA0NzI0NiwgNDcyNTQsIDQ3MjYyLCA0NzI3MCwgNDcyNzgsIDQ3Mjg2LCA0NzI5NCwgCi0gICAgNDczMDAsIDQ3MzA1LCA0NzMxMCwgNDczMTUsIDQ3MzE4LCA0NzMyMiwgNDczMjYsIDQ3MzMwLCA0NzMzNCwgNDczMzgsIAotICAgIDQ3MzQyLCA0NzM0OSwgNDczNTYsIDQ3MzY0LCA0NzM3MiwgNDczNzcsIDQ3MzgyLCA0NzM4OSwgNDczOTYsIDQ3NDAzLCAKLSAgICA0NzQxMCwgNDc0MTMsIDQ3NDE2LCA0NzQyMSwgNDc0MjMsIDQ3NDI3LCA0NzQzMiwgNDc0MzQsIDQ3NDM2LCA0NzQzOCwgCi0gICAgNDc0NDAsIDQ3NDQ1LCA0NzQ0OCwgNDc0NTAsIDQ3NDU1LCA0NzQ2MiwgNDc0NjksIDQ3NDcyLCA0NzQ3NiwgNDc0ODEsIAotICAgIDQ3NDg2LCA0NzQ5NCwgNDc1MDAsIDQ3NTA2LCA0NzUxOCwgNDc1MjUsIDQ3NTMyLCA0NzUzNywgNDc1NDIsIDQ3NTQ4LCAKLSAgICA0NzU1MSwgNDc1NTQsIDQ3NTU5LCA0NzU2MSwgNDc1NjUsIDQ3NTY3LCA0NzU2OSwgNDc1NzEsIDQ3NTczLCA0NzU3NSwgCi0gICAgNDc1NzcsIDQ3NTgyLCA0NzU4NCwgNDc1ODYsIDQ3NTg4LCA0NzU5MCwgNDc1OTQsIDQ3NTk2LCA0NzU5OSwgNDc2MDQsIAotICAgIDQ3NjA5LCA0NzYxNCwgNDc2MTksIDQ3NjI1LCA0NzYzMSwgNDc2MzMsIDQ3NjM2LCA0NzY0MywgNDc2NTAsIDQ3NjU3LCAKLSAgICA0NzY2NCwgNDc2NjgsIDQ3NjcyLCA0NzY3NCwgNDc2NzYsIDQ3NjgwLCA0NzY4NiwgNDc2OTEsIDQ3NjkzLCA0NzY5NywgCi0gICAgNDc3MDYsIDQ3NzE0LCA0NzcyMiwgNDc3MjgsIDQ3NzM0LCA0NzczOSwgNDc3NDUsIDQ3NzUwLCA0Nzc1MywgNDc3NjcsIAotICAgIDQ3NzcwLCA0Nzc3NSwgNDc3ODAsIDQ3Nzg2LCA0Nzc5NiwgNDc3OTgsIDQ3ODA0LCA0NzgxMCwgNDc4MTQsIDQ3ODIxLCAKLSAgICA0NzgyNSwgNDc4MjcsIDQ3ODI5LCA0NzgzMywgNDc4MzksIDQ3ODQ0LCA0Nzg1MCwgNDc4NTIsIDQ3ODU4LCA0Nzg2MCwgCi0gICAgNDc4NjYsIDQ3ODY4LCA0Nzg3MCwgNDc4NzUsIDQ3ODc3LCA0Nzg4MSwgNDc4ODYsIDQ3ODg4LCA0Nzg5MywgNDc4OTgsIAotICAgIDQ3OTAyLCA0NzkwOSwgMCwgNDc5MTksIDQ3OTI1LCA0NzkyOCwgNDc5MzQsIDQ3OTM3LCA0Nzk0MiwgNDc5NDcsIDQ3OTUxLCAKLSAgICA0Nzk1MywgNDc5NTUsIDQ3OTU5LCA0Nzk2MywgNDc5NjcsIDQ3OTcxLCA0Nzk3NiwgNDc5NzgsIDQ3OTgzLCA0Nzk4NiwgCi0gICAgNDc5ODksIDQ3OTkyLCA0Nzk5NiwgNDgwMDAsIDQ4MDA1LCA0ODAwOSwgNDgwMTQsIDQ4MDE5LCA0ODAyMywgNDgwMjgsIAotICAgIDQ4MDM0LCA0ODAzNywgNDgwNDMsIDQ4MDQ4LCA0ODA1MiwgNDgwNTcsIDQ4MDYzLCA0ODA2OSwgNDgwNzYsIDQ4MDgyLCAKLSAgICA0ODA4OSwgNDgwOTYsIDQ4MDk4LCA0ODEwNSwgNDgxMDksIDQ4MTE1LCA0ODEyMSwgNDgxMjYsIDQ4MTMyLCA0ODEzNiwgCi0gICAgNDgxNDEsIDQ4MTQ0LCA0ODE0OSwgNDgxNTUsIDQ4MTYyLCA0ODE3MCwgNDgxNzcsIDQ4MTg2LCA0ODE5NiwgNDgyMDMsIAotICAgIDQ4MjA5LCA0ODIxMywgNDgyMjAsIDQ4MjI1LCA0ODIzNCwgNDgyMzcsIDQ4MjQwLCA0ODI0OSwgNDgyNTksIDQ4MjY2LCAKLSAgICA0ODI2OCwgNDgyNzQsIDQ4Mjc5LCA0ODI4MSwgNDgyODQsIDQ4Mjg4LCA0ODI5NiwgNDgzMDUsIDQ4MzA4LCA0ODMxMywgCi0gICAgNDgzMTgsIDQ4MzI2LCA0ODMzNCwgNDgzNDIsIDQ4MzUwLCA0ODM1NiwgNDgzNjIsIDQ4MzY4LCA0ODM3NiwgNDgzODEsIAotICAgIDQ4Mzg0LCA0ODM4OCwgNDgzOTEsIDQ4NDAzLCA0ODQxMywgNDg0MjQsIDQ4NDMzLCA0ODQ0NCwgNDg0NTQsIDQ4NDYzLCAKLSAgICA0ODQ2OSwgNDg0NzcsIDQ4NDgxLCA0ODQ4OSwgNDg0OTMsIDQ4NTAxLCA0ODUwOCwgNDg1MTUsIDQ4NTI0LCA0ODUzMywgCi0gICAgNDg1NDMsIDQ4NTUzLCA0ODU2MywgNDg1NzMsIDQ4NTgyLCA0ODU5MSwgNDg2MDEsIDQ4NjExLCA0ODYyMCwgNDg2MjksIAotICAgIDQ4NjM1LCA0ODY0MSwgNDg2NDcsIDQ4NjUzLCA0ODY1OSwgNDg2NjUsIDQ4NjcxLCA0ODY3NywgNDg2ODMsIDQ4NjkwLCAKLSAgICA0ODY5NiwgNDg3MDIsIDQ4NzA4LCA0ODcxNCwgNDg3MjAsIDQ4NzI2LCA0ODczMiwgNDg3MzgsIDQ4NzQ0LCA0ODc1MSwgCi0gICAgNDg3NTgsIDQ4NzY1LCA0ODc3MiwgNDg3NzksIDQ4Nzg2LCA0ODc5MywgNDg4MDAsIDQ4ODA3LCA0ODgxNCwgNDg4MjIsIAotICAgIDQ4ODI3LCA0ODgzMCwgNDg4MzQsIDQ4ODM4LCA0ODg0NCwgNDg4NDcsIDQ4ODUzLCA0ODg1OSwgNDg4NjQsIDQ4ODY4LCAKLSAgICA0ODg3MywgNDg4NzksIDQ4ODg2LCA0ODg4OSwgNDg4OTYsIDQ4OTAzLCA0ODkwNywgNDg5MTYsIDQ4OTI1LCA0ODkzMCwgCi0gICAgNDg5MzYsIDQ4OTQxLCA0ODk0NiwgNDg5NTMsIDQ4OTYwLCA0ODk2OCwgNDg5NzYsIDQ4OTg1LCA0ODk4OSwgNDg5OTgsIAotICAgIDQ5MDAzLCA0OTAwNywgNDkwMTQsIDQ5MDE4LCA0OTAyNSwgNDkwMzMsIDQ5MDM4LCA0OTA0NiwgNDkwNTAsIDQ5MDU1LCAKLSAgICA0OTA1OSwgNDkwNjQsIDQ5MDY4LCA0OTA3MywgNDkwNzgsIDQ5MDg3LCA0OTA4OSwgNDkwOTIsIDQ5MDk1LCA0OTEwMiwgCi0gICAgNDkxMDksIDQ5MTE0LCA0OTEyMiwgNDkxMjgsIDQ5MTM0LCA0OTEzOSwgNDkxNDIsIDQ5MTQ3LCA0OTE1MiwgNDkxNTcsIAotICAgIDQ5MTY1LCA0OTE2OSwgNDkxNzYsIDQ5MTg0LCA0OTE5MiwgNDkxOTcsIDQ5MjAyLCA0OTIwOCwgNDkyMTMsIDQ5MjE4LCAKLSAgICA0OTIyNCwgNDkyMjksIDQ5MjMyLCA0OTIzNiwgNDkyNDAsIDQ5MjQ3LCA0OTI1NiwgNDkyNjEsIDQ5MjcwLCA0OTI3OSwgCi0gICAgNDkyODUsIDQ5MjkxLCA0OTI5NiwgNDkzMDEsIDQ5MzA2LCA0OTMxMSwgNDkzMTcsIDQ5MzIzLCA0OTMzMSwgNDkzMzksIAotICAgIDQ5MzQ1LCA0OTM1MSwgNDkzNTYsIDQ5MzYxLCA0OTM2OCwgNDkzNzUsIDQ5MzgxLCA0OTM4NCwgNDkzODcsIDQ5MzkxLCAKLSAgICA0OTM5NSwgNDkzOTksIDQ5NDA0LCA0OTQxMCwgNDk0MTYsIDQ5NDIzLCA0OTQzMCwgNDk0MzUsIDQ5NDM5LCA0OTQ0MywgCi0gICAgNDk0NDcsIDQ5NDUxLCA0OTQ1NSwgNDk0NTksIDQ5NDYzLCA0OTQ2NywgNDk0NzEsIDQ5NDc1LCA0OTQ3OSwgNDk0ODMsIAotICAgIDQ5NDg3LCA0OTQ5MSwgNDk0OTUsIDQ5NDk5LCA0OTUwMywgNDk1MDcsIDQ5NTExLCA0OTUxNSwgNDk1MTksIDQ5NTIzLCAKLSAgICA0OTUyNywgNDk1MzEsIDQ5NTM1LCA0OTUzOSwgNDk1NDMsIDQ5NTQ3LCA0OTU1MSwgNDk1NTUsIDQ5NTU5LCA0OTU2MywgCi0gICAgNDk1NjcsIDQ5NTcxLCA0OTU3NSwgNDk1NzksIDQ5NTgzLCA0OTU4NywgNDk1OTEsIDQ5NTk1LCA0OTU5OSwgNDk2MDMsIAotICAgIDQ5NjA3LCA0OTYxMSwgNDk2MTUsIDQ5NjE5LCA0OTYyMywgNDk2MjcsIDQ5NjMxLCA0OTYzNSwgNDk2MzksIDQ5NjQzLCAKLSAgICA0OTY0NywgNDk2NTEsIDQ5NjU1LCA0OTY1OSwgNDk2NjMsIDQ5NjY3LCA0OTY3MSwgNDk2NzUsIDQ5Njc5LCA0OTY4MywgCi0gICAgNDk2ODcsIDQ5NjkxLCA0OTY5NSwgNDk2OTksIDQ5NzAzLCA0OTcwNywgNDk3MTEsIDQ5NzE1LCA0OTcxOSwgNDk3MjMsIAotICAgIDQ5NzI3LCA0OTczMSwgNDk3MzUsIDQ5NzM5LCA0OTc0MywgNDk3NDcsIDQ5NzUxLCA0OTc1NSwgNDk3NTksIDQ5NzYzLCAKLSAgICA0OTc2NywgNDk3NzEsIDQ5Nzc1LCA0OTc3OSwgNDk3ODMsIDQ5Nzg3LCA0OTc5MSwgNDk3OTUsIDQ5Nzk5LCA0OTgwMywgCi0gICAgNDk4MDcsIDQ5ODExLCA0OTgxNSwgNDk4MTksIDQ5ODIzLCA0OTgyNywgNDk4MzEsIDQ5ODM1LCA0OTgzOSwgNDk4NDMsIAotICAgIDQ5ODQ3LCA0OTg1MSwgNDk4NTUsIDQ5ODU5LCA0OTg2MywgNDk4NjcsIDQ5ODcxLCA0OTg3NSwgNDk4NzksIDQ5ODgzLCAKLSAgICA0OTg4NywgNDk4OTEsIDQ5ODk1LCA0OTg5OSwgNDk5MDMsIDQ5OTA3LCA0OTkxMSwgNDk5MTUsIDQ5OTE5LCA0OTkyMywgCi0gICAgNDk5MjcsIDQ5OTMxLCA0OTkzNSwgNDk5MzksIDQ5OTQzLCA0OTk0NywgNDk5NTEsIDQ5OTU1LCA0OTk1OSwgNDk5NjMsIAotICAgIDQ5OTY3LCA0OTk3MSwgNDk5NzUsIDQ5OTc5LCA0OTk4MywgNDk5ODcsIDQ5OTkxLCA0OTk5NSwgNDk5OTksIDUwMDAzLCAKLSAgICA1MDAwNywgNTAwMTEsIDUwMDE1LCA1MDAxOSwgNTAwMjMsIDUwMDI3LCA1MDAzMSwgNTAwMzUsIDUwMDM5LCA1MDA0MywgCi0gICAgNTAwNDcsIDUwMDUxLCA1MDA1NSwgNTAwNTksIDUwMDYzLCA1MDA2NywgNTAwNzEsIDUwMDc1LCA1MDA3OSwgNTAwODMsIAotICAgIDUwMDg3LCA1MDA5MSwgNTAwOTUsIDUwMDk5LCA1MDEwMywgNTAxMDcsIDUwMTExLCA1MDExNSwgNTAxMTksIDUwMTIzLCAKLSAgICA1MDEyNywgNTAxMzEsIDUwMTM1LCA1MDEzOSwgNTAxNDMsIDUwMTQ3LCA1MDE1MSwgNTAxNTUsIDUwMTU5LCA1MDE2MywgCi0gICAgNTAxNjcsIDUwMTcxLCA1MDE3NSwgNTAxNzksIDUwMTgzLCA1MDE4NywgNTAxOTEsIDUwMTk1LCA1MDE5OSwgNTAyMDMsIAotICAgIDUwMjA3LCA1MDIxMSwgNTAyMTUsIDUwMjE5LCA1MDIyMywgNTAyMjcsIDUwMjMxLCA1MDIzNSwgNTAyMzksIDUwMjQzLCAKLSAgICA1MDI0NywgNTAyNTEsIDUwMjU1LCA1MDI1OSwgNTAyNjMsIDUwMjY3LCA1MDI3MSwgNTAyNzUsIDUwMjc5LCA1MDI4MywgCi0gICAgNTAyODcsIDUwMjkxLCA1MDI5NSwgNTAyOTksIDUwMzAzLCA1MDMwNywgNTAzMTEsIDUwMzE1LCA1MDMxOSwgNTAzMjMsIAotICAgIDUwMzI3LCA1MDMzMSwgNTAzMzUsIDUwMzM5LCA1MDM0MywgNTAzNDcsIDUwMzUxLCA1MDM1NSwgNTAzNTksIDUwMzYzLCAKLSAgICA1MDM2NywgNTAzNzEsIDUwMzc1LCA1MDM3OSwgNTAzODMsIDUwMzg3LCA1MDM5MSwgNTAzOTUsIDUwMzk5LCA1MDQwMywgCi0gICAgNTA0MDcsIDUwNDExLCA1MDQxNSwgNTA0MTksIDUwNDIzLCA1MDQyNywgNTA0MzEsIDUwNDM1LCA1MDQzOSwgNTA0NDMsIAotICAgIDUwNDQ3LCA1MDQ1MSwgNTA0NTUsIDUwNDU5LCA1MDQ2NiwgNTA0NzQsIDUwNDgwLCA1MDQ4NiwgNTA0OTMsIDUwNTAwLCAKLSAgICA1MDUwNiwgNTA1MTIsIDUwNTE4LCA1MDUyNCwgNTA1MjksIDUwNTM0LCA1MDUzOSwgNTA1NDQsIDUwNTUwLCA1MDU1NiwgCi0gICAgNTA1NjQsIDUwNTcxLCA1MDU3NywgNTA1ODMsIDUwNTkxLCA1MDYwMCwgNTA2MDcsIDUwNjE3LCA1MDYyOCwgNTA2MzEsIAotICAgIDUwNjM0LCA1MDYzOCwgNTA2NDIsIDUwNjQ5LCA1MDY1NiwgNTA2NjcsIDUwNjc4LCA1MDY4OCwgNTA2OTgsIDUwNzA1LCAKLSAgICA1MDcxMiwgNTA3MTksIDUwNzI2LCA1MDczNywgNTA3NDgsIDUwNzU5LCA1MDc3MCwgNTA3ODAsIDUwNzkwLCA1MDgwMiwgCi0gICAgNTA4MTQsIDUwODI1LCA1MDgzNiwgNTA4NDgsIDUwODYwLCA1MDg2OSwgNTA4NzksIDUwODg5LCA1MDkwMCwgNTA5MTEsIAotICAgIDUwOTE4LCA1MDkyNSwgNTA5MzIsIDUwOTM5LCA1MDk0OSwgNTA5NTksIDUwOTY3LCA1MDk3NSwgNTA5ODIsIDUwOTg5LCAKLSAgICA1MDk5NiwgNTEwMDMsIDUxMDEwLCA1MTAxNSwgNTEwMjAsIDUxMDI2LCA1MTAzNCwgNTEwNDQsIDUxMDU0LCA1MTA2NCwgCi0gICAgNTEwNzQsIDUxMDg0LCA1MTA5NCwgNTExMDQsIDUxMTE0LCA1MTEyNCwgNTExMzQsIDUxMTQ0LCA1MTE1NSwgNTExNjYsIAotICAgIDUxMTc2LCA1MTE4NiwgNTExOTcsIDUxMjA4LCA1MTIxOCwgNTEyMjgsIDUxMjM5LCA1MTI1MCwgNTEyNjAsIDUxMjcwLCAKLSAgICA1MTI4MSwgNTEyOTIsIDUxMzA4LCA1MTMyNywgNTEzNDMsIDUxMzYyLCA1MTM3OCwgNTEzOTQsIDUxNDEwLCA1MTQyNiwgCi0gICAgNTE0MzcsIDUxNDQ5LCA1MTQ2MCwgNTE0NzIsIDUxNDkxLCA1MTUxMCwgNTE1MTgsIDUxNTI0LCA1MTUzMSwgNTE1MzgsIAotICAgIDUxNTQ1LCA1MTU1MiwgNTE1NTcsIDUxNTYzLCA1MTU2OCwgNTE1NzMsIDUxNTc5LCA1MTU4NCwgNTE1ODksIDUxNTk0LCAKLSAgICA1MTU5OSwgNTE2MDQsIDUxNjExLCA1MTYxNiwgNTE2MjMsIDUxNjI4LCA1MTYzMywgNTE2MzcsIDUxNjQxLCA1MTY0OCwgCi0gICAgNTE2NTUsIDUxNjYyLCA1MTY2OSwgNTE2NzYsIDUxNjgzLCA1MTY5NiwgNTE3MDksIDUxNzIyLCA1MTczNSwgNTE3NDMsIAotICAgIDUxNzUxLCA1MTc1NywgNTE3NjMsIDUxNzcwLCA1MTc3NywgNTE3ODQsIDUxNzkxLCA1MTc5NSwgNTE4MDAsIDUxODA4LCAKLSAgICA1MTgxNiwgNTE4MjQsIDUxODMxLCA1MTgzNSwgNTE4NDMsIDUxODUxLCA1MTg1NSwgNTE4NTksIDUxODY0LCA1MTg3MSwgCi0gICAgNTE4NzksIDUxODg3LCA1MTkwNiwgNTE5MjUsIDUxOTQ0LCA1MTk2MywgNTE5ODIsIDUyMDAxLCA1MjAyMCwgNTIwMzksIAotICAgIDUyMDQ1LCA1MjA1MiwgNTIwNjEsIDUyMDY5LCA1MjA3NywgNTIwODIsIDUyMDg1LCA1MjA4OCwgNTIwOTMsIDUyMDk2LCAKLSAgICA1MjExNSwgNTIxMjIsIDUyMTI4LCA1MjEzNCwgNTIxMzgsIDUyMTQxLCA1MjE0NCwgNTIxNDcsIDUyMTU5LCA1MjE3MiwgCi0gICAgNTIxNzksIDUyMTg2LCA1MjE4OSwgNTIxOTMsIDUyMTk2LCA1MjIwMSwgNTIyMDYsIDUyMjExLCA1MjIxNywgNTIyMjYsIAotICAgIDUyMjMzLCA1MjI0MCwgNTIyNDgsIDUyMjU1LCA1MjI2MiwgNTIyNjUsIDUyMjcxLCA1MjI3NywgNTIyODAsIDUyMjgzLCAKLSAgICA1MjI4OCwgNTIyOTMsIDUyMjk5LCA1MjMwNSwgNTIzMDksIDUyMzE0LCA1MjMyMSwgNTIzMjUsIDUyMzMxLCA1MjMzNSwgCi0gICAgNTIzMzksIDUyMzQ3LCA1MjM1OSwgNTIzNjgsIDUyMzcyLCA1MjM3NCwgNTIzODMsIDUyMzkyLCA1MjM5OCwgNTI0MDEsIAotICAgIDUyNDA3LCA1MjQxMywgNTI0MTgsIDUyNDIzLCA1MjQyOCwgNTI0MzMsIDUyNDM4LCA1MjQ0MywgNTI0NDUsIDUyNDUxLCAKLSAgICA1MjQ1NiwgNTI0NjMsIDUyNDY3LCA1MjQ3MywgNTI0NzYsIDUyNDgwLCA1MjQ4NywgNTI0OTQsIDUyNDk2LCA1MjQ5OCwgCi0gICAgNTI1MDQsIDUyNTEwLCA1MjUxNiwgNTI1MjUsIDUyNTM0LCA1MjU0MSwgNTI1NDgsIDUyNTU0LCA1MjU2MCwgNTI1NjUsIAotICAgIDUyNTcwLCA1MjU3NSwgNTI1ODEsIDUyNTg3LCA1MjU5MiwgNTI1OTksIDUyNjAzLCA1MjYwNywgNTI2MjAsIDUyNjMzLCAKLSAgICA1MjY0NSwgNTI2NTQsIDUyNjYwLCA1MjY2NywgNTI2NzIsIDUyNjc3LCA1MjY4MiwgNTI2ODcsIDUyNjkyLCA1MjY5NCwgCi0gICAgNTI3MDEsIDUyNzA4LCA1MjcxNSwgNTI3MjIsIDUyNzI5LCA1MjczNywgNTI3NDMsIDUyNzQ4LCA1Mjc1NCwgNTI3NjAsIAotICAgIDUyNzY2LCA1Mjc3MywgNTI3NzksIDUyNzg3LCA1Mjc5NSwgNTI4MDMsIDUyODExLCA1MjgxOCwgNTI4MjQsIDUyODMwLCAKLSAgICA1MjgzOSwgNTI4NDMsIDUyODUyLCA1Mjg2MSwgNTI4NzAsIDUyODc4LCA1Mjg4MiwgNTI4ODgsIDUyODk1LCA1MjkwMiwgCi0gICAgNTI5MDYsIDUyOTEyLCA1MjkxOSwgNTI5MjQsIDUyOTI5LCA1MjkzNSwgNTI5NDAsIDUyOTQ1LCA1Mjk1MiwgNTI5NTksIAotICAgIDUyOTY0LCA1Mjk2OSwgNTI5NzcsIDUyOTg1LCA1Mjk5NSwgNTMwMDUsIDUzMDEyLCA1MzAxOSwgNTMwMjMsIDUzMDI3LCAKLSAgICA1MzAzOSwgNTMwNDUsIDUzMDUxLCA1MzA1NiwgNTMwNjEsIDUzMDY4LCA1MzA3NSwgNTMwODEsIDUzMDg3LCA1MzA5NiwgCi0gICAgNTMxMDQsIDUzMTEyLCA1MzExOSwgNTMxMjYsIDUzMTMzLCA1MzEzOSwgNTMxNDYsIDUzMTUyLCA1MzE1OSwgNTMxNjYsIAotICAgIDUzMTczLCA1MzE4MCwgNTMxODYsIDUzMTkxLCA1MzIwMCwgNTMyMTAsIDUzMjE3LCA1MzIyNiwgNTMyMzIsIDUzMjM3LCAKLSAgICA1MzI0MiwgNTMyNTIsIDUzMjU4LCA1MzI2NCwgNTMyNzAsIDUzMjc4LCA1MzI4MywgNTMyOTAsIDUzMjk3LCA1MzMwOCwgCi0gICAgNTMzMTUsIDUzMzIyLCA1MzMyOSwgNTMzMzYsIDUzMzQzLCA1MzM1MCwgNTMzNTcsIDUzMzY5LCA1MzM4MSwgNTMzOTIsIAotICAgIDUzNDAzLCA1MzQxNiwgNTM0MjksIDUzNDM0LCA1MzQzOSwgNTM0NDgsIDUzNDU3LCA1MzQ2NCwgNTM0NzEsIDUzNDgwLCAKLSAgICA1MzQ4OSwgNTM0OTcsIDUzNTA1LCA1MzUxMywgNTM1MjEsIDUzNTMxLCA1MzU0MSwgNTM1NTUsIDUzNTY5LCA1MzU3NywgCi0gICAgNTM1ODUsIDUzNTk3LCA1MzYwOSwgNTM2MTcsIDUzNjI1LCA1MzYzNSwgNTM2NDUsIDUzNjUwLCA1MzY1NSwgNTM2NjQsIAotICAgIDUzNjczLCA1MzY3OCwgNTM2ODMsIDUzNjkxLCA1MzY5NywgNTM3MDMsIDUzNzExLCA1MzcxOSwgNTM3MzIsIDUzNzQ1LCAKLSAgICA1Mzc0OSwgNTM3NTMsIDUzNzYwLCA1Mzc2NywgNTM3NzQsIDUzNzgyLCA1Mzc5MCwgNTM3OTksIDUzODA4LCA1MzgxNCwgCi0gICAgNTM4MjAsIDUzODI3LCA1MzgzNCwgNTM4NDEsIDUzODQ4LCA1Mzg1NywgNTM4NjYsIDUzODY5LCA1Mzg3MiwgNTM4NzcsIAotICAgIDUzODgyLCA1Mzg4OCwgNTM4OTQsIDUzOTAxLCA1MzkwOCwgNTM5MTgsIDUzOTI4LCA1MzkzNSwgNTM5NDIsIDUzOTUwLCAKLSAgICA1Mzk1OCwgNTM5NjYsIDUzOTc0LCA1Mzk4MiwgNTM5OTAsIDUzOTk2LCA1NDAwMiwgNTQwMDYsIDU0MDEwLCA1NDAxNywgCi0gICAgNTQwMjQsIDU0MDI5LCA1NDAzNCwgNTQwMzksIDU0MDQ0LCA1NDA1MCwgNTQwNjQsIDU0MDcxLCA1NDA3OCwgNTQwODIsIAotICAgIDU0MDg0LCA1NDA4NiwgNTQwOTEsIDU0MDk2LCA1NDEwMSwgNTQxMDYsIDU0MTE0LCA1NDEyMSwgNTQxMjgsIDU0MTM2LCAKLSAgICA1NDE0OCwgNTQxNTYsIDU0MTY0LCA1NDE3NSwgNTQxNzksIDU0MTgzLCA1NDE4OSwgNTQxOTcsIDU0MjEwLCA1NDIxNywgCi0gICAgNTQyMjQsIDU0MjMxLCA1NDIzNiwgNTQyNDMsIDU0MjUyLCA1NDI2MCwgNTQyNjYsIDU0MjcyLCA1NDI3OCwgNTQyODcsIAotICAgIDU0Mjk2LCA1NDMwNCwgNTQzMTMsIDU0MzE4LCA1NDMyMSwgNTQzMjYsIDU0MzMyLCA1NDMzOCwgNTQzNDQsIDU0MzUwLCAKLSAgICA1NDM1NCwgNTQzNTcsIDU0MzYxLCA1NDM2NSwgNTQzNzEsIDU0Mzc3LCA1NDM4MywgNTQzODksIDU0MzkzLCA1NDM5NywgCi0gICAgNTQ0MDQsIDU0NDExLCA1NDQxOCwgNTQ0MjUsIDU0NDMyLCA1NDQzOSwgNTQ0NDksIDU0NDU5LCA1NDQ2NiwgNTQ0NzMsIAotICAgIDU0NDgxLCA1NDQ4OSwgNTQ0OTMsIDU0NDk4LCA1NDUwMywgNTQ1MDksIDU0NTE1LCA1NDUxOCwgNTQ1MjEsIDU0NTI0LCAKLSAgICA1NDUyNywgNTQ1MzEsIDU0NTM2LCA1NDU0MSwgNTQ1NDYsIDU0NTUxLCA1NDU1NiwgNTQ1NjAsIDU0NTY0LCA1NDU2OCwgCi0gICAgNTQ1NzIsIDU0NTc2LCA1NDU4MCwgNTQ1ODQsIDU0NTkwLCA1NDU5NCwgNTQ2MDAsIDU0NjA1LCA1NDYxMiwgNTQ2MjAsIAotICAgIDU0NjI3LCA1NDYzNSwgNTQ2NDIsIDU0NjUwLCA1NDY1OSwgNTQ2NjYsIDU0Njc2LCA1NDY4NywgNTQ2OTMsIDU0NzAyLCAKLSAgICA1NDcwOCwgNTQ3MTcsIDU0NzI2LCA1NDczMiwgNTQ3MzgsIDU0NzQyLCA1NDc0NiwgNTQ3NTUsIDU0NzY0LCA1NDc3MSwgCi0gICAgNTQ3NzgsIDU0Nzg3LCAwLCAwLCAwLCA1NDc5NiwgNTQ4MDEsIDU0ODA1LCA1NDgwOSwgNTQ4MTQsIDU0ODE5LCA1NDgyNCwgCi0gICAgNTQ4MzIsIDU0ODQwLCA1NDg0MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzIyMjYsIDMyMjMzLCAzMjI0MCwgMzIyNDcsIDMyMjU0LCAKKyAgICAzMjI2MywgMzIyNzIsIDMyMjgxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMjI5MCwgMzIyOTUsIDMyMzAwLCAzMjMwNSwgCisgICAgMzIzMTAsIDMyMzE5LCAzMjMzMCwgMzIzMzksIDMyMzUwLCAzMjM1NiwgMzIzNjksIDMyMzc1LCAzMjM4MiwgMzIzODksIAorICAgIDMyMzk0LCAzMjQwMCwgMzI0MDYsIDMyNDE3LCAzMjQyNiwgMzI0MzMsIDMyNDQwLCAzMjQ0OSwgMzI0NTYsIDMyNDY1LCAKKyAgICAzMjQ3NSwgMzI0ODUsIDMyNDkyLCAzMjQ5OSwgMzI1MDYsIDMyNTE2LCAzMjUyMSwgMzI1MjksIDMyNTM1LCAzMjU0MywgCisgICAgMzI1NTIsIDMyNTU3LCAzMjU2NCwgMzI1NzAsIDMyNTc1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMjU4MCwgCisgICAgMzI1ODUsIDMyNTkxLCAzMjU5OCwgMzI2MDYsIDMyNjEyLCAzMjYxOCwgMzI2MjQsIDMyNjI5LCAzMjYzNiwgMzI2NDIsIAorICAgIDMyNjQ4LCAzMjY1NCwgMzI2NjIsIDMyNjY3LCAzMjY3NSwgMzI2ODAsIDMyNjg2LCAzMjY5MiwgMzI2OTksIDMyNzA3LCAKKyAgICAzMjcxNCwgMzI3MjAsIDMyNzI3LCAzMjczNCwgMzI3NDAsIDMyNzQ3LCAzMjc1NCwgMzI3NjAsIDMyNzY1LCAzMjc3MSwgCisgICAgMzI3NzksIDMyNzg3LCAzMjc5MywgMzI3OTksIDMyODA1LCAzMjgxMSwgMzI4MTksIDMyODIzLCAzMjgyOSwgMzI4MzUsIAorICAgIDMyODQxLCAzMjg0NywgMzI4NTMsIDMyODU5LCAzMjg2MywgMzI4NjgsIDMyODczLCAzMjg4MCwgMzI4ODUsIDMyODg5LCAKKyAgICAzMjg5NSwgMzI5MDAsIDMyOTA1LCAzMjkwOSwgMzI5MTQsIDMyOTE5LCAzMjkyMywgMzI5MjcsIDMyOTMyLCAzMjkzOSwgCisgICAgMzI5NDMsIDMyOTQ4LCAzMjk1MywgMzI5NTcsIDMyOTYyLCAzMjk2NiwgMzI5NzEsIDMyOTc1LCAzMjk4MSwgMzI5ODYsIAorICAgIDMyOTkzLCAzMjk5OCwgMzMwMDMsIDMzMDA3LCAzMzAxMiwgMzMwMTcsIDMzMDI0LCAzMzAyOSwgMzMwMzUsIDMzMDQwLCAKKyAgICAzMzA0NCwgMzMwNDksIDMzMDUzLCAzMzA1OCwgMzMwNjUsIDMzMDcyLCAzMzA3NywgMzMwODIsIDMzMDg2LCAzMzA5MiwgCisgICAgMzMwOTgsIDMzMTAzLCAzMzEwOCwgMzMxMTMsIDMzMTE5LCAzMzEyNCwgMzMxMzAsIDMzMTM1LCAzMzE0MSwgMzMxNDcsIAorICAgIDMzMTUzLCAzMzE2MCwgMzMxNjcsIDMzMTc0LCAzMzE4MSwgMzMxODgsIDMzMTk1LCAzMzIwMCwgMzMyMDgsIDMzMjE3LCAKKyAgICAzMzIyNiwgMzMyMzUsIDMzMjQ0LCAzMzI1MywgMzMyNjIsIDMzMjc0LCAzMzI4MywgMzMyOTIsIDMzMzAxLCAzMzMwOCwgCisgICAgMzMzMTMsIDMzMzIwLCAzMzMyOCwgMzMzMzYsIDMzMzQzLCAzMzM1MCwgMzMzNTcsIDMzMzY0LCAzMzM3MiwgMzMzODEsIAorICAgIDMzMzkwLCAzMzM5OSwgMzM0MDgsIDMzNDE3LCAzMzQyNiwgMzM0MzUsIDMzNDQ0LCAzMzQ1MywgMzM0NjIsIDMzNDcxLCAKKyAgICAzMzQ4MCwgMzM0ODksIDMzNDk4LCAzMzUwNiwgMzM1MTUsIDMzNTI2LCAzMzUzNCwgMzM1NDMsIDMzNTU0LCAzMzU2MywgCisgICAgMzM1NzIsIDMzNTgxLCAzMzU5MCwgMzM1OTgsIDMzNjA3LCAzMzYxNCwgMzM2MTksIDMzNjI3LCAzMzYzMiwgMzM2MzksIAorICAgIDMzNjQ0LCAzMzY1MywgMzM2NTksIDMzNjY2LCAzMzY3MywgMzM2NzgsIDMzNjgzLCAzMzY5MSwgMzM2OTksIDMzNzA4LCAKKyAgICAzMzcxNywgMzM3MjIsIDMzNzI5LCAzMzc0MCwgMzM3NDgsIDMzNzU3LCAzMzc2MywgMzM3NjksIDMzNzc0LCAzMzc4MSwgCisgICAgMzM3ODYsIDMzNzk1LCAzMzgwMCwgMzM4MDUsIDMzODEwLCAzMzgxNywgMzM4MjQsIDMzODI5LCAzMzgzOCwgMzM4NDYsIAorICAgIDMzODUxLCAzMzg1NiwgMzM4NjMsIDMzODcwLCAzMzg3NCwgMzM4NzgsIDMzODgxLCAzMzg4NCwgMzM4ODcsIDMzODkwLCAKKyAgICAzMzg5MywgMzM4OTYsIDMzOTAzLCAzMzkwNiwgMzM5MDksIDMzOTE0LCAzMzkxOCwgMzM5MjIsIDMzOTI2LCAzMzkzMCwgCisgICAgMzM5MzQsIDMzOTQzLCAzMzk0OSwgMzM5NTUsIDMzOTYxLCAzMzk2OSwgMzM5NzcsIDMzOTgzLCAzMzk4OSwgMzM5OTYsIAorICAgIDM0MDAyLCAzNDAwNywgMzQwMTMsIDM0MDE5LCAzNDAyNSwgMzQwMzIsIDM0MDM4LCAzNDA0NiwgMzQwNTIsIDM0MDU5LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNDA2NSwgMzQwNzIsIAorICAgIDM0MDc5LCAzNDA4NCwgMzQwOTMsIDM0MTAxLCAzNDEwOSwgMzQxMTYsIDM0MTIzLCAzNDEzMCwgMzQxMzcsIDM0MTQ1LCAKKyAgICAzNDE1MywgMzQxNjMsIDM0MTczLCAzNDE4MSwgMzQxODksIDM0MTk3LCAzNDIwNSwgMzQyMTQsIDM0MjIzLCAzNDIzMSwgCisgICAgMzQyMzksIDM0MjQ4LCAzNDI1NywgMzQyNjcsIDM0Mjc3LCAzNDI4NiwgMzQyOTUsIDM0MzAzLCAzNDMxMSwgMzQzMTksIAorICAgIDM0MzI3LCAzNDMzNywgMzQzNDcsIDM0MzU1LCAzNDM2MywgMzQzNzEsIDM0Mzc5LCAzNDM4NywgMzQzOTUsIDM0NDAzLCAKKyAgICAzNDQxMSwgMzQ0MTksIDM0NDI3LCAzNDQzNSwgMzQ0NDMsIDM0NDUyLCAzNDQ2MSwgMzQ0NzAsIDM0NDc5LCAzNDQ4OSwgCisgICAgMzQ0OTksIDM0NTA2LCAzNDUxMywgMzQ1MjEsIDM0NTI5LCAzNDUzOCwgMzQ1NDcsIDM0NTU1LCAzNDU2MywgMzQ1NzUsIAorICAgIDM0NTg3LCAzNDU5NiwgMzQ2MDUsIDM0NjE0LCAzNDYyMywgMzQ2MzAsIDM0NjM3LCAzNDY0NSwgMzQ2NTMsIDM0NjYxLCAKKyAgICAzNDY2OSwgMzQ2NzcsIDM0Njg1LCAzNDY5MywgMzQ3MDEsIDM0NzEwLCAzNDcxOSwgMzQ3MjgsIDM0NzM3LCAzNDc0NiwgCisgICAgMzQ3NTUsIDM0NzY1LCAzNDc3NSwgMzQ3ODUsIDM0Nzk1LCAzNDgwNCwgMzQ4MTMsIDM0ODIwLCAzNDgyNywgMzQ4MzUsIAorICAgIDM0ODQzLCAzNDg1MSwgMzQ4NTksIDM0ODY3LCAzNDg3NSwgMzQ4ODcsIDM0ODk5LCAzNDkwOCwgMzQ5MTcsIDM0OTI1LCAKKyAgICAzNDkzMywgMzQ5NDEsIDM0OTQ5LCAzNDk2MCwgMzQ5NzEsIDM0OTgyLCAzNDk5MywgMzUwMDUsIDM1MDE3LCAzNTAyNSwgCisgICAgMzUwMzMsIDM1MDQxLCAzNTA0OSwgMzUwNTgsIDM1MDY3LCAzNTA3NiwgMzUwODUsIDM1MDkzLCAzNTEwMSwgMzUxMDksIAorICAgIDM1MTE3LCAzNTEyNSwgMzUxMzMsIDM1MTQyLCAzNTE1MSwgMzUxNjEsIDM1MTcxLCAzNTE3OCwgMzUxODUsIDM1MTkzLCAKKyAgICAzNTIwMSwgMzUyMDksIDM1MjE3LCAzNTIyNCwgMzUyMzEsIDM1MjM5LCAzNTI0NywgMzUyNTUsIDM1MjYzLCAzNTI3MSwgCisgICAgMzUyNzksIDM1Mjg3LCAzNTI5NSwgMzUzMDMsIDM1MzExLCAzNTMxOSwgMzUzMjcsIDM1MzM1LCAzNTM0MywgMzUzNTEsIAorICAgIDM1MzU5LCAzNTM2OCwgMzUzNzcsIDM1Mzg2LCAzNTM5NCwgMzU0MDMsIDM1NDEyLCAzNTQyMSwgMzU0MzAsIDM1NDQwLCAKKyAgICAzNTQ0OSwgMzU0NTYsIDM1NDYxLCAzNTQ2OCwgMzU0NzUsIDM1NDgzLCAzNTQ5MSwgMzU1MDAsIDM1NTA5LCAzNTUxOSwgCisgICAgMzU1MjksIDM1NTQwLCAzNTU1MSwgMzU1NjAsIDM1NTY5LCAzNTU3OSwgMzU1ODksIDM1NTk4LCAzNTYwNywgMzU2MTcsIAorICAgIDM1NjI3LCAzNTYzOCwgMzU2NDksIDM1NjU4LCAzNTY2NywgMzU2NzcsIDM1Njg3LCAzNTY5NCwgMzU3MDEsIDM1NzA5LCAKKyAgICAzNTcxNywgMzU3MjMsIDM1NzI5LCAzNTczOCwgMzU3NDcsIDM1NzU3LCAzNTc2NywgMzU3NzgsIDM1Nzg5LCAzNTc5OCwgCisgICAgMzU4MDcsIDM1ODE3LCAzNTgyNywgMzU4MzYsIDM1ODQ1LCAzNTg1MywgMzU4NjEsIDM1ODY4LCAzNTg3NSwgMzU4ODMsIAorICAgIDM1ODkxLCAzNTkwMCwgMzU5MDksIDM1OTE5LCAzNTkyOSwgMzU5NDAsIDM1OTUxLCAzNTk2MCwgMzU5NjksIDM1OTc5LCAKKyAgICAzNTk4OSwgMzU5OTgsIDM2MDA3LCAzNjAxNywgMzYwMjcsIDM2MDM4LCAzNjA0OSwgMzYwNTgsIDM2MDY3LCAzNjA3NywgCisgICAgMzYwODcsIDM2MDk0LCAzNjEwMSwgMzYxMDksIDM2MTE3LCAzNjEyNiwgMzYxMzUsIDM2MTQ1LCAzNjE1NSwgMzYxNjYsIAorICAgIDM2MTc3LCAzNjE4NiwgMzYxOTUsIDM2MjA1LCAzNjIxNSwgMzYyMjMsIDM2MjMxLCAzNjIzOSwgMzYyNDcsIDM2MjU2LCAKKyAgICAzNjI2NSwgMzYyNzIsIDM2Mjc5LCAzNjI4NiwgMzYyOTMsIDM2MzAwLCAzNjMwNywgMzYzMTUsIDM2MzIzLCAzNjMzMSwgCisgICAgMzYzMzksIDM2MzUwLCAzNjM2MSwgMzYzNzIsIDM2MzgzLCAzNjM5NCwgMzY0MDUsIDM2NDEzLCAzNjQyMSwgMzY0MzIsIAorICAgIDM2NDQzLCAzNjQ1NCwgMzY0NjUsIDM2NDc2LCAzNjQ4NywgMzY0OTUsIDM2NTAzLCAzNjUxNCwgMzY1MjUsIDM2NTM2LCAwLCAKKyAgICAwLCAzNjU0NywgMzY1NTUsIDM2NTYzLCAzNjU3NCwgMzY1ODUsIDM2NTk2LCAwLCAwLCAzNjYwNywgMzY2MTUsIDM2NjIzLCAKKyAgICAzNjYzNCwgMzY2NDUsIDM2NjU2LCAzNjY2NywgMzY2NzgsIDM2Njg5LCAzNjY5NywgMzY3MDUsIDM2NzE2LCAzNjcyNywgCisgICAgMzY3MzgsIDM2NzQ5LCAzNjc2MCwgMzY3NzEsIDM2Nzc5LCAzNjc4NywgMzY3OTgsIDM2ODA5LCAzNjgyMCwgMzY4MzEsIAorICAgIDM2ODQyLCAzNjg1MywgMzY4NjEsIDM2ODY5LCAzNjg4MCwgMzY4OTEsIDM2OTAyLCAzNjkxMywgMzY5MjQsIDM2OTM1LCAKKyAgICAzNjk0MywgMzY5NTEsIDM2OTYyLCAzNjk3MywgMzY5ODQsIDAsIDAsIDM2OTk1LCAzNzAwMywgMzcwMTEsIDM3MDIyLCAKKyAgICAzNzAzMywgMzcwNDQsIDAsIDAsIDM3MDU1LCAzNzA2MywgMzcwNzEsIDM3MDgyLCAzNzA5MywgMzcxMDQsIDM3MTE1LCAKKyAgICAzNzEyNiwgMCwgMzcxMzcsIDAsIDM3MTQ1LCAwLCAzNzE1NiwgMCwgMzcxNjcsIDM3MTc4LCAzNzE4NiwgMzcxOTQsIAorICAgIDM3MjA1LCAzNzIxNiwgMzcyMjcsIDM3MjM4LCAzNzI0OSwgMzcyNjAsIDM3MjY4LCAzNzI3NiwgMzcyODcsIDM3Mjk4LCAKKyAgICAzNzMwOSwgMzczMjAsIDM3MzMxLCAzNzM0MiwgMzczNTAsIDM3MzU4LCAzNzM2NiwgMzczNzQsIDM3MzgyLCAzNzM5MCwgCisgICAgMzczOTgsIDM3NDA2LCAzNzQxNCwgMzc0MjIsIDM3NDMwLCAzNzQzOCwgMzc0NDYsIDAsIDAsIDM3NDU0LCAzNzQ2NSwgCisgICAgMzc0NzYsIDM3NDkwLCAzNzUwNCwgMzc1MTgsIDM3NTMyLCAzNzU0NiwgMzc1NjAsIDM3NTcxLCAzNzU4MiwgMzc1OTYsIAorICAgIDM3NjEwLCAzNzYyNCwgMzc2MzgsIDM3NjUyLCAzNzY2NiwgMzc2NzcsIDM3Njg4LCAzNzcwMiwgMzc3MTYsIDM3NzMwLCAKKyAgICAzNzc0NCwgMzc3NTgsIDM3NzcyLCAzNzc4MywgMzc3OTQsIDM3ODA4LCAzNzgyMiwgMzc4MzYsIDM3ODUwLCAzNzg2NCwgCisgICAgMzc4NzgsIDM3ODg5LCAzNzkwMCwgMzc5MTQsIDM3OTI4LCAzNzk0MiwgMzc5NTYsIDM3OTcwLCAzNzk4NCwgMzc5OTUsIAorICAgIDM4MDA2LCAzODAyMCwgMzgwMzQsIDM4MDQ4LCAzODA2MiwgMzgwNzYsIDM4MDkwLCAzODA5OCwgMzgxMDYsIDM4MTE3LCAKKyAgICAzODEyNSwgMCwgMzgxMzYsIDM4MTQ0LCAzODE1NSwgMzgxNjMsIDM4MTcxLCAzODE3OSwgMzgxODcsIDM4MTk1LCAzODE5OCwgCisgICAgMzgyMDEsIDM4MjA0LCAzODIwNywgMzgyMTMsIDM4MjI0LCAzODIzMiwgMCwgMzgyNDMsIDM4MjUxLCAzODI2MiwgMzgyNzAsIAorICAgIDM4Mjc4LCAzODI4NiwgMzgyOTQsIDM4MzAyLCAzODMwOCwgMzgzMTQsIDM4MzIwLCAzODMyOCwgMzgzMzYsIDM4MzQ3LCAwLCAKKyAgICAwLCAzODM1OCwgMzgzNjYsIDM4Mzc3LCAzODM4NSwgMzgzOTMsIDM4NDAxLCAwLCAzODQwOSwgMzg0MTUsIDM4NDIxLCAKKyAgICAzODQyNywgMzg0MzUsIDM4NDQzLCAzODQ1NCwgMzg0NjUsIDM4NDczLCAzODQ4MSwgMzg0ODksIDM4NTAwLCAzODUwOCwgCisgICAgMzg1MTYsIDM4NTI0LCAzODUzMiwgMzg1NDAsIDM4NTQ2LCAzODU1MiwgMCwgMCwgMzg1NTUsIDM4NTY2LCAzODU3NCwgMCwgCisgICAgMzg1ODUsIDM4NTkzLCAzODYwNCwgMzg2MTIsIDM4NjIwLCAzODYyOCwgMzg2MzYsIDM4NjQ0LCAzODY0NywgMCwgMzg2NTAsIAorICAgIDM4NjU0LCAzODY1OCwgMzg2NjIsIDM4NjY2LCAzODY3MCwgMzg2NzQsIDM4Njc4LCAzODY4MiwgMzg2ODYsIDM4NjkwLCAKKyAgICAzODY5NCwgMzg3MDAsIDM4NzA2LCAzODcxMiwgMzg3MTUsIDM4NzE4LCAzODcyMCwgMzg3MjQsIDM4NzI4LCAzODczMiwgCisgICAgMzg3MzYsIDM4NzM4LCAzODc0MiwgMzg3NDYsIDM4NzUyLCAzODc1OCwgMzg3NjUsIDM4NzcyLCAzODc3NywgMzg3ODIsIAorICAgIDM4Nzg4LCAzODc5NCwgMzg3OTYsIDM4Nzk5LCAzODgwMSwgMzg4MDUsIDM4ODA5LCAzODgxMywgMzg4MTYsIDM4ODIwLCAKKyAgICAzODgyNCwgMzg4MjgsIDM4ODMyLCAzODgzNiwgMzg4NDIsIDM4ODQ2LCAzODg1MCwgMzg4NTYsIDM4ODYxLCAzODg2OCwgCisgICAgMzg4NzAsIDM4ODczLCAzODg3NywgMzg4ODEsIDM4ODg2LCAzODg5MiwgMzg4OTQsIDM4OTAzLCAzODkxMiwgMzg5MTUsIAorICAgIDM4OTE5LCAzODkyMSwgMzg5MjMsIDM4OTI1LCAzODkyOCwgMzg5MzQsIDM4OTM2LCAzODk0MCwgMzg5NDQsIDM4OTUxLCAKKyAgICAzODk1OCwgMzg5NjIsIDM4OTY3LCAzODk3MiwgMzg5NzcsIDM4OTgyLCAzODk4NiwgMzg5OTAsIDM4OTkzLCAzODk5NywgCisgICAgMzkwMDEsIDM5MDA4LCAzOTAxMywgMzkwMTcsIDM5MDIxLCAzOTAyNiwgMzkwMzAsIDM5MDM0LCAzOTAzOSwgMzkwNDQsIAorICAgIDM5MDQ4LCAzOTA1MiwgMzkwNTYsIDM5MDU4LCAzOTA2MywgMzkwNjgsIDM5MDcyLCAzOTA3NiwgMzkwODAsIDM5MDg0LCAwLCAKKyAgICAzOTA4OCwgMzkwOTIsIDM5MDk2LCAzOTEwMiwgMzkxMDgsIDM5MTE0LCAzOTEyMCwgMzkxMjcsIDM5MTM0LCAzOTEzOSwgCisgICAgMzkxNDQsIDM5MTQ4LCAwLCAwLCAzOTE1NCwgMzkxNTcsIDM5MTYwLCAzOTE2MywgMzkxNjYsIDM5MTY5LCAzOTE3MiwgCisgICAgMzkxNzYsIDM5MTgwLCAzOTE4NSwgMzkxOTAsIDM5MTk1LCAzOTIwMiwgMzkyMDYsIDM5MjA5LCAzOTIxMiwgMzkyMTUsIAorICAgIDM5MjE4LCAzOTIyMSwgMzkyMjQsIDM5MjI3LCAzOTIzMCwgMzkyMzMsIDM5MjM3LCAzOTI0MSwgMzkyNDYsIDM5MjUxLCAwLCAKKyAgICAzOTI1NiwgMzkyNjIsIDM5MjY4LCAzOTI3NCwgMzkyODEsIDM5Mjg4LCAzOTI5NSwgMzkzMDIsIDM5MzA4LCAzOTMxNCwgCisgICAgMzkzMjEsIDM5MzI4LCAzOTMzNSwgMCwgMCwgMCwgMzkzNDIsIDM5MzQ1LCAzOTM0OCwgMzkzNTEsIDM5MzU2LCAzOTM1OSwgCisgICAgMzkzNjIsIDM5MzY1LCAzOTM2OCwgMzkzNzEsIDM5Mzc0LCAzOTM3OCwgMzkzODEsIDM5Mzg0LCAzOTM4NywgMzkzOTAsIAorICAgIDM5MzkzLCAzOTM5OCwgMzk0MDEsIDM5NDA0LCAzOTQwNywgMzk0MTAsIDM5NDEzLCAzOTQxOCwgMzk0MjEsIDM5NDI0LCAKKyAgICAzOTQyOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMzk0MzQsIDM5NDM5LCAzOTQ0NCwgMzk0NTEsIDM5NDU5LCAzOTQ2NCwgMzk0NjksIDM5NDczLCAzOTQ3NywgMzk0ODIsIAorICAgIDM5NDg5LCAzOTQ5NiwgMzk1MDAsIDM5NTA1LCAzOTUxMCwgMzk1MTUsIDM5NTIwLCAzOTUyNywgMzk1MzIsIDM5NTM3LCAKKyAgICAzOTU0MiwgMzk1NTEsIDM5NTU4LCAzOTU2NSwgMzk1NjksIDM5NTc0LCAzOTU4MCwgMzk1ODUsIDM5NTkyLCAzOTYwMSwgCisgICAgMzk2MTAsIDM5NjE0LCAzOTYxOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzk2MjIsIAorICAgIDM5NjI2LCAzOTYzNCwgMzk2MzgsIDM5NjQyLCAzOTY0NywgMzk2NTEsIDM5NjU1LCAzOTY1OSwgMzk2NjEsIDM5NjY1LCAKKyAgICAzOTY2OSwgMzk2NzMsIDM5Njc4LCAzOTY4MiwgMzk2ODYsIDM5Njk0LCAzOTY5NywgMzk3MDEsIDM5NzA0LCAzOTcwNywgCisgICAgMzk3MTMsIDM5NzE3LCAzOTcyMCwgMzk3MjYsIDM5NzMwLCAzOTczNCwgMzk3MzgsIDM5NzQxLCAzOTc0NSwgMzk3NDgsIAorICAgIDM5NzUyLCAzOTc1NCwgMzk3NTcsIDM5NzYwLCAzOTc2NCwgMzk3NjYsIDM5NzcwLCAzOTc3MywgMzk3NzYsIDM5NzgxLCAKKyAgICAzOTc4NiwgMzk3OTMsIDM5Nzk2LCAzOTc5OSwgMzk4MDMsIDM5ODA4LCAzOTgxMSwgMzk4MTQsIDM5ODE3LCAzOTgyMSwgCisgICAgMzk4MjYsIDM5ODI5LCAzOTgzMiwgMzk4MzQsIDM5ODM3LCAzOTg0MCwgMzk4NDMsIDM5ODQ3LCAzOTg1MiwgMzk4NTUsIAorICAgIDM5ODU5LCAzOTg2MywgMzk4NjcsIDM5ODcxLCAzOTg3NiwgMzk4ODIsIDM5ODg3LCAzOTg5MiwgMzk4OTgsIDM5OTAzLCAKKyAgICAzOTkwOCwgMzk5MTIsIDM5OTE2LCAzOTkyMSwgMzk5MjUsIDM5OTI5LCAzOTkzMiwgMzk5MzQsIDM5OTM5LCAzOTk0NSwgCisgICAgMzk5NTIsIDM5OTU5LCAzOTk2NiwgMzk5NzMsIDM5OTgwLCAzOTk4NywgMzk5OTQsIDQwMDAxLCA0MDAwOSwgNDAwMTYsIAorICAgIDQwMDI0LCA0MDAzMSwgNDAwMzgsIDQwMDQ2LCA0MDA1NCwgNDAwNTksIDQwMDY0LCA0MDA2OSwgNDAwNzQsIDQwMDc5LCAKKyAgICA0MDA4NCwgNDAwODksIDQwMDk0LCA0MDA5OSwgNDAxMDQsIDQwMTEwLCA0MDExNiwgNDAxMjIsIDQwMTI4LCA0MDEzNSwgCisgICAgNDAxNDMsIDQwMTUwLCA0MDE1NiwgNDAxNjIsIDQwMTY4LCA0MDE3NCwgNDAxODAsIDQwMTg2LCA0MDE5MiwgNDAxOTgsIAorICAgIDQwMjA0LCA0MDIxMSwgNDAyMTgsIDQwMjI1LCA0MDIzMiwgNDAyNDAsIDQwMjQ5LCA0MDI1NywgNDAyNjgsIDQwMjc2LCAKKyAgICA0MDI4NCwgNDAyOTMsIDQwMzAwLCA0MDMwOSwgNDAzMTgsIDQwMzI2LCA0MDMzNSwgMCwgMCwgMCwgMCwgMCwgMCwgNDAzNDMsIAorICAgIDQwMzQ1LCA0MDM0OCwgNDAzNTAsIDQwMzUzLCA0MDM1NiwgNDAzNTksIDQwMzY0LCA0MDM2OSwgNDAzNzQsIDQwMzc5LCAKKyAgICA0MDM4MywgNDAzODcsIDQwMzkxLCA0MDM5NSwgNDA0MDAsIDQwNDA2LCA0MDQxMSwgNDA0MTcsIDQwNDIyLCA0MDQyNywgCisgICAgNDA0MzIsIDQwNDM4LCA0MDQ0MywgNDA0NDksIDQwNDU1LCA0MDQ1OSwgNDA0NjMsIDQwNDY4LCA0MDQ3MywgNDA0NzgsIAorICAgIDQwNDgzLCA0MDQ4OCwgNDA0OTYsIDQwNTA0LCA0MDUxMiwgNDA1MjAsIDQwNTI3LCA0MDUzNSwgNDA1NDIsIDQwNTQ5LCAKKyAgICA0MDU1OCwgNDA1NzAsIDQwNTc2LCA0MDU4MiwgNDA1OTAsIDQwNTk4LCA0MDYwNywgNDA2MTYsIDQwNjI0LCA0MDYzMiwgCisgICAgNDA2NDEsIDQwNjUwLCA0MDY1NSwgNDA2NjMsIDQwNjY4LCA0MDY3MywgNDA2NzksIDQwNjg0LCA0MDY5MCwgNDA2OTcsIAorICAgIDQwNzA0LCA0MDcwOSwgNDA3MTUsIDQwNzIwLCA0MDcyMywgNDA3MjcsIDQwNzMwLCA0MDczNCwgNDA3MzgsIDQwNzQyLCAKKyAgICA0MDc0OCwgNDA3NTQsIDQwNzYwLCA0MDc2NiwgNDA3NzAsIDQwNzc0LCA0MDc3OCwgNDA3ODIsIDQwNzg4LCA0MDc5NCwgCisgICAgNDA3OTgsIDQwODAzLCA0MDgwNywgNDA4MTIsIDQwODE3LCA0MDgyMiwgNDA4MjUsIDQwODI5LCA0MDgzMiwgNDA4MzYsIAorICAgIDQwODQzLCA0MDg1MSwgNDA4NjIsIDQwODczLCA0MDg3OCwgNDA4ODcsIDQwODk0LCA0MDkwMywgNDA5MTIsIDQwOTE2LCAKKyAgICA0MDkyMiwgNDA5MzAsIDQwOTM0LCA0MDkzOSwgNDA5NDQsIDQwOTUwLCA0MDk1NiwgNDA5NjIsIDQwOTY5LCA0MDk3MywgCisgICAgNDA5NzcsIDQwOTgyLCA0MDk4NSwgNDA5ODcsIDQwOTkxLCA0MDk5NSwgNDEwMDMsIDQxMDA3LCA0MTAwOSwgNDEwMTEsIAorICAgIDQxMDE1LCA0MTAyMywgNDEwMjgsIDQxMDM0LCA0MTA0NCwgNDEwNTEsIDQxMDU2LCA0MTA2MCwgNDEwNjQsIDQxMDY4LCAKKyAgICA0MTA3MSwgNDEwNzQsIDQxMDc3LCA0MTA4MSwgNDEwODUsIDQxMDg5LCA0MTA5MywgNDEwOTcsIDQxMTAwLCA0MTEwNCwgCisgICAgNDExMDgsIDQxMTExLCA0MTExMywgNDExMTYsIDQxMTE4LCA0MTEyMiwgNDExMjYsIDQxMTI4LCA0MTEzNCwgNDExMzcsIAorICAgIDQxMTQyLCA0MTE0NiwgNDExNTAsIDQxMTUyLCA0MTE1NCwgNDExNTYsIDQxMTU5LCA0MTE2MywgNDExNjcsIDQxMTcxLCAKKyAgICA0MTE3NSwgNDExNzksIDQxMTg1LCA0MTE5MSwgNDExOTMsIDQxMTk1LCA0MTE5NywgNDExOTksIDQxMjAyLCA0MTIwNCwgCisgICAgNDEyMDgsIDQxMjEwLCA0MTIxNCwgNDEyMTcsIDQxMjIzLCA0MTIyNywgNDEyMzEsIDQxMjM0LCA0MTIzNywgNDEyNDEsIAorICAgIDQxMjQ3LCA0MTI1MSwgNDEyNjEsIDQxMjcxLCA0MTI3NSwgNDEyODEsIDQxMjg3LCA0MTI5MCwgNDEyOTQsIDQxMjk3LCAKKyAgICA0MTMwMiwgNDEzMDYsIDQxMzEyLCA0MTMxNiwgNDEzMjgsIDQxMzM2LCA0MTM0MCwgNDEzNDQsIDQxMzUwLCA0MTM1NCwgCisgICAgNDEzNTcsIDQxMzU5LCA0MTM2MiwgNDEzNjYsIDQxMzcwLCA0MTM3NywgNDEzODEsIDQxMzg1LCA0MTM4OSwgNDEzOTIsIAorICAgIDQxMzk3LCA0MTQwMiwgNDE0MDcsIDQxNDEyLCA0MTQxNywgNDE0MjIsIDQxNDMwLCA0MTQzOCwgNDE0NDIsIDQxNDQ2LCAKKyAgICA0MTQ0OCwgNDE0NTMsIDQxNDU3LCA0MTQ2MSwgNDE0NjksIDQxNDc3LCA0MTQ4MywgNDE0ODksIDQxNDk4LCA0MTUwNywgCisgICAgNDE1MTIsIDQxNTE3LCA0MTUyNSwgNDE1MzMsIDQxNTM1LCA0MTUzNywgNDE1NDIsIDQxNTQ3LCA0MTU1MywgNDE1NTksIAorICAgIDQxNTY1LCA0MTU3MSwgNDE1NzUsIDQxNTc5LCA0MTU4NiwgNDE1OTMsIDQxNTk5LCA0MTYwNSwgNDE2MTUsIDQxNjI1LCAKKyAgICA0MTYzMywgNDE2NDEsIDQxNjQzLCA0MTY0NywgNDE2NTEsIDQxNjU2LCA0MTY2MSwgNDE2NjgsIDQxNjc1LCA0MTY3OCwgCisgICAgNDE2ODEsIDQxNjg0LCA0MTY4NywgNDE2OTAsIDQxNjk1LCA0MTY5OSwgNDE3MDQsIDQxNzA5LCA0MTcxMiwgNDE3MTUsIAorICAgIDQxNzE4LCA0MTcyMSwgNDE3MjQsIDQxNzI4LCA0MTczMSwgNDE3MzQsIDQxNzM3LCA0MTc0MCwgNDE3NDIsIDQxNzQ0LCAKKyAgICA0MTc0NiwgNDE3NDgsIDQxNzU2LCA0MTc2NCwgNDE3NzAsIDQxNzc0LCA0MTc4MCwgNDE3OTAsIDQxNzk2LCA0MTgwMiwgCisgICAgNDE4MDgsIDQxODE2LCA0MTgyNCwgNDE4MzUsIDQxODM5LCA0MTg0MywgNDE4NDUsIDQxODUxLCA0MTg1MywgNDE4NTUsIAorICAgIDQxODU3LCA0MTg1OSwgNDE4NjUsIDQxODY4LCA0MTg3NCwgNDE4ODAsIDQxODg0LCA0MTg4OCwgNDE4OTIsIDQxODk1LCAKKyAgICA0MTg5OSwgNDE5MDMsIDQxOTA1LCA0MTkxNCwgNDE5MjMsIDQxOTI4LCA0MTkzMywgNDE5MzksIDQxOTQ1LCA0MTk1MSwgCisgICAgNDE5NTQsIDQxOTU3LCA0MTk2MCwgNDE5NjMsIDQxOTY1LCA0MTk3MCwgNDE5NzUsIDQxOTgwLCA0MTk4NiwgNDE5OTIsIAorICAgIDQyMDAwLCA0MjAwOCwgNDIwMTQsIDQyMDIwLCA0MjAyNiwgNDIwMzIsIDQyMDQxLCA0MjA1MCwgNDIwNTksIDQyMDY4LCAKKyAgICA0MjA3NywgNDIwODYsIDQyMDk1LCA0MjEwNCwgNDIxMTMsIDQyMTIyLCA0MjEzMCwgNDIxNDIsIDQyMTUyLCA0MjE2NywgCisgICAgNDIxNzAsIDQyMTc1LCA0MjE4MSwgNDIxODcsIDQyMTk0LCA0MjIwOCwgNDIyMjMsIDQyMjI5LCA0MjIzNSwgNDIyNDIsIAorICAgIDQyMjQ4LCA0MjI1NiwgNDIyNjIsIDQyMjc1LCA0MjI4OSwgNDIyOTQsIDQyMzAwLCA0MjMwNywgNDIzMTAsIDQyMzEzLCAKKyAgICA0MjMxNSwgNDIzMTgsIDQyMzIxLCA0MjMyMywgNDIzMjUsIDQyMzI5LCA0MjMzMiwgNDIzMzUsIDQyMzM4LCA0MjM0MSwgCisgICAgNDIzNDYsIDQyMzUxLCA0MjM1NiwgNDIzNjEsIDQyMzY2LCA0MjM2OSwgNDIzNzEsIDQyMzczLCA0MjM3NSwgNDIzNzksIAorICAgIDQyMzgzLCA0MjM4NywgNDIzOTMsIDQyMzk4LCA0MjQwMCwgNDI0MDIsIDQyNDA3LCA0MjQxMiwgNDI0MTcsIDQyNDIyLCAKKyAgICA0MjQyNywgNDI0MzIsIDQyNDM0LCA0MjQzNiwgNDI0NDUsIDQyNDQ5LCA0MjQ1NywgNDI0NjYsIDQyNDY4LCA0MjQ3MywgCisgICAgNDI0NzgsIDQyNDg2LCA0MjQ5MCwgNDI0OTIsIDQyNDk2LCA0MjQ5OCwgNDI1MDIsIDQyNTA2LCA0MjUxMCwgNDI1MTIsIAorICAgIDQyNTE0LCA0MjUxNiwgNDI1MjMsIDQyNTMyLCA0MjU0MSwgNDI1NTAsIDQyNTU5LCA0MjU2OCwgNDI1NzcsIDQyNTg2LCAKKyAgICA0MjU5NSwgNDI2MDMsIDQyNjExLCA0MjYyMCwgNDI2MjksIDQyNjM4LCA0MjY0NywgNDI2NTUsIDQyNjYzLCA0MjY3MiwgCisgICAgNDI2ODEsIDQyNjkwLCA0MjcwMCwgNDI3MDksIDQyNzE5LCA0MjcyOCwgNDI3MzgsIDQyNzQ3LCA0Mjc1NywgNDI3NjcsIAorICAgIDQyNzc2LCA0Mjc4NiwgNDI3OTUsIDQyODA1LCA0MjgxNCwgNDI4MjQsIDQyODMzLCA0Mjg0MiwgNDI4NTEsIDQyODYwLCAKKyAgICA0Mjg2OSwgNDI4NzksIDQyODg4LCA0Mjg5NywgNDI5MDYsIDQyOTE2LCA0MjkyNSwgNDI5MzQsIDQyOTQzLCA0Mjk1MiwgCisgICAgNDI5NjIsIDQyOTcyLCA0Mjk4MSwgNDI5OTAsIDQyOTk4LCA0MzAwNiwgNDMwMTMsIDQzMDIxLCA0MzAzMCwgNDMwNDEsIAorICAgIDQzMDUwLCA0MzA1OSwgNDMwNjgsIDQzMDc1LCA0MzA4MiwgNDMwODksIDQzMDk4LCA0MzEwNywgNDMxMTYsIDQzMTI1LCAKKyAgICA0MzEzMiwgNDMxMzcsIDQzMTQ2LCA0MzE1MSwgNDMxNTQsIDQzMTYyLCA0MzE2NSwgNDMxNzAsIDQzMTc1LCA0MzE3OCwgCisgICAgNDMxODEsIDQzMTg5LCA0MzE5MiwgNDMxOTcsIDQzMjAwLCA0MzIwNywgNDMyMTIsIDQzMjIwLCA0MzIyMywgNDMyMjYsIAorICAgIDQzMjI5LCA0MzIzNCwgNDMyMzksIDQzMjQyLCA0MzI0NSwgNDMyNTMsIDQzMjU2LCA0MzI2MywgNDMyNzAsIDQzMjc0LCAKKyAgICA0MzI3OCwgNDMyODMsIDQzMjg4LCA0MzI5NCwgNDMyOTksIDQzMzA1LCA0MzMxMSwgNDMzMTYsIDQzMzIyLCA0MzMzMCwgCisgICAgNDMzMzYsIDQzMzQ0LCA0MzM1MiwgNDMzNTgsIDQzMzY2LCA0MzM3NCwgNDMzODMsIDQzMzkxLCA0MzM5NywgNDM0MDUsIAorICAgIDQzNDE0LCA0MzQyMiwgNDM0MjYsIDQzNDMxLCA0MzQ0NCwgNDM0NTcsIDQzNDYxLCA0MzQ2NSwgNDM0NjksIDQzNDczLCAKKyAgICA0MzQ4MywgNDM0ODcsIDQzNDkyLCA0MzQ5NywgNDM1MDIsIDQzNTA3LCA0MzUxMiwgNDM1MTcsIDQzNTI3LCA0MzUzNywgCisgICAgNDM1NDUsIDQzNTU1LCA0MzU2NSwgNDM1NzMsIDQzNTgzLCA0MzU5MywgNDM2MDEsIDQzNjExLCA0MzYyMSwgNDM2MjksIAorICAgIDQzNjM3LCA0MzY0NywgNDM2NTcsIDQzNjYwLCA0MzY2MywgNDM2NjYsIDQzNjcxLCA0MzY3NSwgNDM2ODEsIDQzNjg4LCAKKyAgICA0MzY5NSwgNDM3MDMsIDQzNzEwLCA0MzcxNCwgNDM3MTgsIDQzNzIyLCA0MzcyNiwgNDM3MjgsIDQzNzMyLCA0MzczNiwgCisgICAgNDM3NDEsIDQzNzQ2LCA0Mzc1MywgNDM3NjAsIDQzNzYzLCA0Mzc3MCwgNDM3NzIsIDQzNzc0LCA0Mzc3OCwgNDM3ODIsIAorICAgIDQzNzg3LCA0Mzc5MywgNDM3OTksIDQzODA1LCA0MzgxMSwgNDM4MjAsIDQzODI5LCA0MzgzOCwgNDM4NDIsIDQzODQ0LCAKKyAgICA0Mzg0OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDM4NTUsIDQzODU5LCA0Mzg2NiwgNDM4NzMsIAorICAgIDQzODgwLCA0Mzg4NywgNDM4OTEsIDQzODk1LCA0Mzg5OSwgNDM5MDMsIDQzOTA4LCA0MzkxNCwgNDM5MTksIDQzOTI1LCAKKyAgICA0MzkzMSwgNDM5MzcsIDQzOTQzLCA0Mzk1MSwgNDM5NTgsIDQzOTY1LCA0Mzk3MiwgNDM5NzksIDQzOTg0LCA0Mzk5MCwgCisgICAgNDM5OTksIDQ0MDAzLCA0NDAxMCwgNDQwMTQsIDQ0MDE4LCA0NDAyNCwgNDQwMzAsIDQ0MDM2LCA0NDA0MiwgNDQwNDYsIAorICAgIDQ0MDUwLCA0NDA1MywgNDQwNTYsIDQ0MDYwLCA0NDA2NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDQwNzQsIDQ0MDc3LCA0NDA4MSwgNDQwODUsIDQ0MDkxLCAKKyAgICA0NDA5NywgNDQxMDMsIDQ0MTExLCA0NDExOCwgNDQxMjIsIDQ0MTMwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NDEzNSwgNDQxMzgsIDQ0MTQxLCA0NDE0NCwgNDQxNDcsIAorICAgIDQ0MTUwLCA0NDE1MywgNDQxNTYsIDQ0MTU5LCA0NDE2MiwgNDQxNjYsIDQ0MTcwLCA0NDE3NCwgNDQxNzgsIDQ0MTgyLCAKKyAgICA0NDE4NiwgNDQxOTAsIDQ0MTk0LCA0NDE5OCwgNDQyMDIsIDQ0MjA2LCA0NDIwOSwgNDQyMTIsIDQ0MjE1LCA0NDIxOCwgCisgICAgNDQyMjEsIDQ0MjI0LCA0NDIyNywgNDQyMzAsIDQ0MjMzLCA0NDIzNywgNDQyNDEsIDQ0MjQ1LCA0NDI0OSwgNDQyNTMsIAorICAgIDQ0MjU3LCA0NDI2MSwgNDQyNjUsIDQ0MjY5LCA0NDI3MywgNDQyNzcsIDQ0MjgzLCA0NDI4OSwgNDQyOTUsIDQ0MzAyLCAKKyAgICA0NDMwOSwgNDQzMTYsIDQ0MzIzLCA0NDMzMCwgNDQzMzcsIDQ0MzQ0LCA0NDM1MSwgNDQzNTgsIDQ0MzY1LCA0NDM3MiwgCisgICAgNDQzNzksIDQ0Mzg2LCA0NDM5MywgNDQ0MDAsIDQ0NDA3LCA0NDQxNCwgNDQ0MTksIDQ0NDI1LCA0NDQzMSwgNDQ0MzcsIAorICAgIDQ0NDQyLCA0NDQ0OCwgNDQ0NTQsIDQ0NDYwLCA0NDQ2NSwgNDQ0NzEsIDQ0NDc3LCA0NDQ4MiwgNDQ0ODcsIDQ0NDkzLCAKKyAgICA0NDQ5OCwgNDQ1MDQsIDQ0NTEwLCA0NDUxNSwgNDQ1MjEsIDQ0NTI3LCA0NDUzMiwgNDQ1MzgsIDQ0NTQ0LCA0NDU1MCwgCisgICAgNDQ1NTYsIDQ0NTYyLCA0NDU2NywgNDQ1NzMsIDQ0NTc5LCA0NDU4NSwgNDQ1OTAsIDQ0NTk2LCA0NDYwMiwgNDQ2MDgsIAorICAgIDQ0NjEzLCA0NDYxOSwgNDQ2MjUsIDQ0NjMwLCA0NDYzNSwgNDQ2NDEsIDQ0NjQ2LCA0NDY1MiwgNDQ2NTgsIDQ0NjYzLCAKKyAgICA0NDY2OSwgNDQ2NzUsIDQ0NjgwLCA0NDY4NiwgNDQ2OTIsIDQ0Njk4LCA0NDcwNCwgNDQ3MTAsIDQ0NzE1LCA0NDcyMSwgCisgICAgNDQ3MjcsIDQ0NzMzLCA0NDczOCwgNDQ3NDQsIDQ0NzUwLCA0NDc1NiwgNDQ3NjEsIDQ0NzY3LCA0NDc3MywgNDQ3NzgsIAorICAgIDQ0NzgzLCA0NDc4OSwgNDQ3OTQsIDQ0ODAwLCA0NDgwNiwgNDQ4MTEsIDQ0ODE3LCA0NDgyMywgNDQ4MjgsIDQ0ODM0LCAKKyAgICA0NDg0MCwgNDQ4NDYsIDQ0ODUyLCA0NDg1OCwgNDQ4NjIsIDQ0ODY3LCA0NDg3MiwgNDQ4NzcsIDQ0ODgyLCA0NDg4NywgCisgICAgNDQ4OTIsIDQ0ODk3LCA0NDkwMiwgNDQ5MDcsIDQ0OTEyLCA0NDkxNiwgNDQ5MjAsIDQ0OTI0LCA0NDkyOCwgNDQ5MzIsIAorICAgIDQ0OTM2LCA0NDk0MCwgNDQ5NDQsIDQ0OTQ4LCA0NDk1MywgNDQ5NTgsIDQ0OTYzLCA0NDk2OCwgNDQ5NzMsIDQ0OTc4LCAKKyAgICA0NDk4NywgNDQ5OTYsIDQ1MDA1LCA0NTAxNCwgNDUwMjMsIDQ1MDMyLCA0NTA0MSwgNDUwNTAsIDQ1MDU3LCA0NTA2NSwgCisgICAgNDUwNzMsIDQ1MDgwLCA0NTA4NywgNDUwOTUsIDQ1MTAzLCA0NTExMCwgNDUxMTcsIDQ1MTI1LCA0NTEzMywgNDUxNDAsIAorICAgIDQ1MTQ3LCA0NTE1NSwgNDUxNjMsIDQ1MTcwLCA0NTE3NywgNDUxODUsIDQ1MTk0LCA0NTIwMywgNDUyMTEsIDQ1MjIwLCAKKyAgICA0NTIyOSwgNDUyMzYsIDQ1MjQzLCA0NTI1MSwgNDUyNjAsIDQ1MjY5LCA0NTI3NywgNDUyODYsIDQ1Mjk1LCA0NTMwMiwgCisgICAgNDUzMDksIDQ1MzE4LCA0NTMyNywgNDUzMzUsIDQ1MzQzLCA0NTM1MiwgNDUzNjEsIDQ1MzY4LCA0NTM3NSwgNDUzODQsIAorICAgIDQ1MzkzLCA0NTQwMSwgNDU0MDksIDQ1NDE4LCA0NTQyNywgNDU0MzQsIDQ1NDQxLCA0NTQ1MCwgNDU0NTksIDQ1NDY3LCAKKyAgICA0NTQ3NiwgNDU0ODUsIDQ1NDkzLCA0NTUwMywgNDU1MTMsIDQ1NTIzLCA0NTUzMywgNDU1NDIsIDQ1NTUxLCA0NTU2MCwgCisgICAgNDU1NjksIDQ1NTc2LCA0NTU4NCwgNDU1OTIsIDQ1NjAwLCA0NTYwOCwgNDU2MTMsIDQ1NjE4LCA0NTYyNywgNDU2MzUsIAorICAgIDQ1NjQyLCA0NTY1MSwgNDU2NTksIDQ1NjY2LCA0NTY3NSwgNDU2ODMsIDQ1NjkwLCA0NTY5OSwgNDU3MDcsIDQ1NzE0LCAKKyAgICA0NTcyMywgNDU3MzEsIDQ1NzM4LCA0NTc0NywgNDU3NTUsIDQ1NzYyLCA0NTc3MSwgNDU3NzksIDQ1Nzg2LCA0NTc5NSwgCisgICAgNDU4MDMsIDQ1ODEwLCA0NTgxOSwgNDU4MjcsIDQ1ODM0LCA0NTg0MywgNDU4NTIsIDQ1ODYxLCA0NTg3MCwgNDU4ODQsIAorICAgIDQ1ODk4LCA0NTkwNSwgNDU5MTAsIDQ1OTE1LCA0NTkyMCwgNDU5MjUsIDQ1OTMwLCA0NTkzNSwgNDU5NDAsIDQ1OTQ1LCAKKyAgICA0NTk1MywgNDU5NjEsIDQ1OTY5LCA0NTk3NywgNDU5ODIsIDQ1OTg5LCA0NTk5NiwgNDYwMDMsIDQ2MDA4LCA0NjAxNiwgCisgICAgNDYwMjMsIDQ2MDMxLCA0NjAzNSwgNDYwNDIsIDQ2MDQ4LCA0NjA1NSwgNDYwNTksIDQ2MDY1LCA0NjA3MSwgNDYwNzcsIAorICAgIDQ2MDgxLCA0NjA4NCwgNDYwODgsIDQ2MDkyLCA0NjA5OSwgNDYxMDUsIDQ2MTExLCA0NjExNywgNDYxMjMsIDQ2MTM3LCAKKyAgICA0NjE0NywgNDYxNjEsIDQ2MTc1LCA0NjE4MSwgNDYxOTEsIDQ2MjA1LCA0NjIwOCwgNDYyMTEsIDQ2MjE4LCA0NjIyNiwgCisgICAgNDYyMzEsIDQ2MjM2LCA0NjI0NCwgNDYyNTYsIDQ2MjY4LCA0NjI3NiwgNDYyODAsIDQ2Mjg0LCA0NjI4NywgNDYyOTAsIAorICAgIDQ2Mjk0LCA0NjI5OCwgNDYzMDEsIDQ2MzA0LCA0NjMwOSwgNDYzMTQsIDQ2MzIwLCA0NjMyNiwgNDYzMzEsIDQ2MzM2LCAKKyAgICA0NjM0MiwgNDYzNDgsIDQ2MzUzLCA0NjM1OCwgNDYzNjMsIDQ2MzY4LCA0NjM3NCwgNDYzODAsIDQ2Mzg1LCA0NjM5MCwgCisgICAgNDYzOTYsIDQ2NDAyLCA0NjQwNywgNDY0MTIsIDQ2NDE1LCA0NjQxOCwgNDY0MjcsIDQ2NDI5LCA0NjQzMSwgNDY0MzQsIAorICAgIDQ2NDM4LCA0NjQ0NCwgNDY0NDYsIDQ2NDQ5LCA0NjQ1NiwgNDY0NjMsIDQ2NDcxLCA0NjQ3OSwgNDY0ODksIDQ2NTAzLCAKKyAgICA0NjUwOCwgNDY1MTMsIDQ2NTE3LCA0NjUyMiwgNDY1MzAsIDQ2NTM4LCA0NjU0NywgNDY1NTYsIDQ2NTY1LCA0NjU3NCwgCisgICAgNDY1NzksIDQ2NTg0LCA0NjU5MCwgNDY1OTYsIDQ2NjAyLCA0NjYwOCwgNDY2MTEsIDQ2NjE3LCA0NjYyMywgNDY2MzMsIAorICAgIDQ2NjQzLCA0NjY1MSwgNDY2NTksIDQ2NjY4LCA0NjY3NywgNDY2ODEsIDQ2Njg5LCA0NjY5NywgNDY3MDUsIDQ2NzEzLCAKKyAgICA0NjcyMiwgNDY3MzEsIDQ2NzQwLCA0Njc0OSwgNDY3NTQsIDQ2NzU5LCA0Njc2NCwgNDY3NjksIDQ2Nzc0LCA0Njc4MCwgCisgICAgNDY3ODYsIDQ2NzkxLCA0Njc5NywgNDY3OTksIDQ2ODAxLCA0NjgwMywgNDY4MDUsIDQ2ODA4LCA0NjgxMSwgNDY4MTMsIAorICAgIDQ2ODE1LCA0NjgxNywgNDY4MjEsIDQ2ODI1LCA0NjgyNywgNDY4MjksIDQ2ODMyLCA0NjgzNSwgNDY4MzksIDQ2ODQ1LCAKKyAgICA0Njg1MSwgNDY4NTMsIDQ2ODYwLCA0Njg2NCwgNDY4NjksIDQ2ODc0LCA0Njg3NiwgNDY4ODYsIDQ2ODkyLCA0Njg5OCwgCisgICAgNDY5MDQsIDQ2OTEwLCA0NjkxNiwgNDY5MjIsIDQ2OTI3LCA0NjkzMCwgNDY5MzMsIDQ2OTM2LCA0NjkzOCwgNDY5NDAsIAorICAgIDQ2OTQ0LCA0Njk0OCwgNDY5NTMsIDQ2OTU4LCA0Njk2MywgNDY5NjYsIDQ2OTcwLCA0Njk3NSwgNDY5NzgsIDQ2OTgyLCAKKyAgICA0Njk4NywgNDY5OTIsIDQ2OTk3LCA0NzAwMiwgNDcwMDcsIDQ3MDEyLCA0NzAxNywgNDcwMjIsIDQ3MDI3LCA0NzAzMiwgCisgICAgNDcwMzcsIDQ3MDQyLCA0NzA0OCwgNDcwNTQsIDQ3MDYwLCA0NzA2MiwgNDcwNjUsIDQ3MDY3LCA0NzA3MCwgNDcwNzIsIAorICAgIDQ3MDc0LCA0NzA3NiwgNDcwNzgsIDQ3MDgwLCA0NzA4MiwgNDcwODQsIDQ3MDg2LCA0NzA4OCwgNDcwOTAsIDQ3MDkyLCAKKyAgICA0NzA5NCwgNDcwOTYsIDQ3MDk4LCA0NzEwMCwgNDcxMDIsIDQ3MTA0LCA0NzEwOSwgNDcxMTQsIDQ3MTE5LCA0NzEyNCwgCisgICAgNDcxMjksIDQ3MTM0LCA0NzEzOSwgNDcxNDQsIDQ3MTQ5LCA0NzE1NCwgNDcxNTksIDQ3MTY0LCA0NzE2OSwgNDcxNzQsIAorICAgIDQ3MTc5LCA0NzE4NCwgNDcxODksIDQ3MTk0LCA0NzE5OSwgNDcyMDQsIDQ3MjA4LCA0NzIxMiwgNDcyMTYsIDQ3MjIyLCAKKyAgICA0NzIyOCwgNDcyMzMsIDQ3MjM4LCA0NzI0MywgNDcyNDgsIDQ3MjUzLCA0NzI1OCwgNDcyNjYsIDQ3Mjc0LCA0NzI4MiwgCisgICAgNDcyOTAsIDQ3Mjk4LCA0NzMwNiwgNDczMTQsIDQ3MzIyLCA0NzMyOCwgNDczMzMsIDQ3MzM4LCA0NzM0MywgNDczNDYsIAorICAgIDQ3MzUwLCA0NzM1NCwgNDczNTgsIDQ3MzYyLCA0NzM2NiwgNDczNzAsIDQ3Mzc3LCA0NzM4NCwgNDczOTIsIDQ3NDAwLCAKKyAgICA0NzQwNSwgNDc0MTAsIDQ3NDE3LCA0NzQyNCwgNDc0MzEsIDQ3NDM4LCA0NzQ0MSwgNDc0NDQsIDQ3NDQ5LCA0NzQ1MSwgCisgICAgNDc0NTUsIDQ3NDYwLCA0NzQ2MiwgNDc0NjQsIDQ3NDY2LCA0NzQ2OCwgNDc0NzMsIDQ3NDc2LCA0NzQ3OCwgNDc0ODMsIAorICAgIDQ3NDkwLCA0NzQ5NywgNDc1MDAsIDQ3NTA0LCA0NzUwOSwgNDc1MTQsIDQ3NTIyLCA0NzUyOCwgNDc1MzQsIDQ3NTQ2LCAKKyAgICA0NzU1MywgNDc1NjAsIDQ3NTY1LCA0NzU3MCwgNDc1NzYsIDQ3NTc5LCA0NzU4MiwgNDc1ODcsIDQ3NTg5LCA0NzU5MywgCisgICAgNDc1OTUsIDQ3NTk3LCA0NzU5OSwgNDc2MDEsIDQ3NjAzLCA0NzYwNSwgNDc2MTAsIDQ3NjEyLCA0NzYxNCwgNDc2MTYsIAorICAgIDQ3NjE4LCA0NzYyMiwgNDc2MjQsIDQ3NjI3LCA0NzYzMiwgNDc2MzcsIDQ3NjQyLCA0NzY0NywgNDc2NTMsIDQ3NjU5LCAKKyAgICA0NzY2MSwgNDc2NjQsIDQ3NjcxLCA0NzY3OCwgNDc2ODUsIDQ3NjkyLCA0NzY5NiwgNDc3MDAsIDQ3NzAyLCA0NzcwNCwgCisgICAgNDc3MDgsIDQ3NzE0LCA0NzcxOSwgNDc3MjEsIDQ3NzI1LCA0NzczNCwgNDc3NDIsIDQ3NzUwLCA0Nzc1NiwgNDc3NjIsIAorICAgIDQ3NzY3LCA0Nzc3MywgNDc3NzgsIDQ3NzgxLCA0Nzc5NSwgNDc3OTgsIDQ3ODAzLCA0NzgwOCwgNDc4MTQsIDQ3ODI0LCAKKyAgICA0NzgyNiwgNDc4MzIsIDQ3ODM4LCA0Nzg0MiwgNDc4NDksIDQ3ODUzLCA0Nzg1NSwgNDc4NTcsIDQ3ODYxLCA0Nzg2NywgCisgICAgNDc4NzIsIDQ3ODc4LCA0Nzg4MCwgNDc4ODYsIDQ3ODg4LCA0Nzg5NCwgNDc4OTYsIDQ3ODk4LCA0NzkwMywgNDc5MDUsIAorICAgIDQ3OTA5LCA0NzkxNCwgNDc5MTYsIDQ3OTIxLCA0NzkyNiwgNDc5MzAsIDQ3OTM3LCAwLCA0Nzk0NywgNDc5NTMsIDQ3OTU2LCAKKyAgICA0Nzk2MiwgNDc5NjUsIDQ3OTcwLCA0Nzk3NSwgNDc5NzksIDQ3OTgxLCA0Nzk4MywgNDc5ODcsIDQ3OTkxLCA0Nzk5NSwgCisgICAgNDc5OTksIDQ4MDA0LCA0ODAwNiwgNDgwMTEsIDQ4MDE0LCA0ODAxNywgNDgwMjAsIDQ4MDI0LCA0ODAyOCwgNDgwMzMsIAorICAgIDQ4MDM3LCA0ODA0MiwgNDgwNDcsIDQ4MDUxLCA0ODA1NiwgNDgwNjIsIDQ4MDY1LCA0ODA3MSwgNDgwNzYsIDQ4MDgwLCAKKyAgICA0ODA4NSwgNDgwOTEsIDQ4MDk3LCA0ODEwNCwgNDgxMTAsIDQ4MTE3LCA0ODEyNCwgNDgxMjYsIDQ4MTMzLCA0ODEzNywgCisgICAgNDgxNDMsIDQ4MTQ5LCA0ODE1NCwgNDgxNjAsIDQ4MTY0LCA0ODE2OSwgNDgxNzIsIDQ4MTc3LCA0ODE4MywgNDgxOTAsIAorICAgIDQ4MTk4LCA0ODIwNSwgNDgyMTQsIDQ4MjI0LCA0ODIzMSwgNDgyMzcsIDQ4MjQxLCA0ODI0OCwgNDgyNTMsIDQ4MjYyLCAKKyAgICA0ODI2NSwgNDgyNjgsIDQ4Mjc3LCA0ODI4NywgNDgyOTQsIDQ4Mjk2LCA0ODMwMiwgNDgzMDcsIDQ4MzA5LCA0ODMxMiwgCisgICAgNDgzMTYsIDQ4MzI0LCA0ODMzMywgNDgzMzYsIDQ4MzQxLCA0ODM0NiwgNDgzNTQsIDQ4MzYyLCA0ODM3MCwgNDgzNzgsIAorICAgIDQ4Mzg0LCA0ODM5MCwgNDgzOTYsIDQ4NDA0LCA0ODQwOSwgNDg0MTIsIDQ4NDE2LCA0ODQxOSwgNDg0MzEsIDQ4NDQxLCAKKyAgICA0ODQ1MiwgNDg0NjEsIDQ4NDcyLCA0ODQ4MiwgNDg0OTEsIDQ4NDk3LCA0ODUwNSwgNDg1MDksIDQ4NTE3LCA0ODUyMSwgCisgICAgNDg1MjksIDQ4NTM2LCA0ODU0MywgNDg1NTIsIDQ4NTYxLCA0ODU3MSwgNDg1ODEsIDQ4NTkxLCA0ODYwMSwgNDg2MTAsIAorICAgIDQ4NjE5LCA0ODYyOSwgNDg2MzksIDQ4NjQ4LCA0ODY1NywgNDg2NjMsIDQ4NjY5LCA0ODY3NSwgNDg2ODEsIDQ4Njg3LCAKKyAgICA0ODY5MywgNDg2OTksIDQ4NzA1LCA0ODcxMSwgNDg3MTgsIDQ4NzI0LCA0ODczMCwgNDg3MzYsIDQ4NzQyLCA0ODc0OCwgCisgICAgNDg3NTQsIDQ4NzYwLCA0ODc2NiwgNDg3NzIsIDQ4Nzc5LCA0ODc4NiwgNDg3OTMsIDQ4ODAwLCA0ODgwNywgNDg4MTQsIAorICAgIDQ4ODIxLCA0ODgyOCwgNDg4MzUsIDQ4ODQyLCA0ODg1MCwgNDg4NTUsIDQ4ODU4LCA0ODg2MiwgNDg4NjYsIDQ4ODcyLCAKKyAgICA0ODg3NSwgNDg4ODEsIDQ4ODg3LCA0ODg5MiwgNDg4OTYsIDQ4OTAxLCA0ODkwNywgNDg5MTQsIDQ4OTE3LCA0ODkyNCwgCisgICAgNDg5MzEsIDQ4OTM1LCA0ODk0NCwgNDg5NTMsIDQ4OTU4LCA0ODk2NCwgNDg5NjksIDQ4OTc0LCA0ODk4MSwgNDg5ODgsIAorICAgIDQ4OTk2LCA0OTAwNCwgNDkwMTMsIDQ5MDE3LCA0OTAyNiwgNDkwMzEsIDQ5MDM1LCA0OTA0MiwgNDkwNDYsIDQ5MDUzLCAKKyAgICA0OTA2MSwgNDkwNjYsIDQ5MDc0LCA0OTA3OCwgNDkwODMsIDQ5MDg3LCA0OTA5MiwgNDkwOTYsIDQ5MTAxLCA0OTEwNiwgCisgICAgNDkxMTUsIDQ5MTE3LCA0OTEyMCwgNDkxMjMsIDQ5MTMwLCA0OTEzNywgNDkxNDIsIDQ5MTUwLCA0OTE1NiwgNDkxNjIsIAorICAgIDQ5MTY3LCA0OTE3MCwgNDkxNzUsIDQ5MTgwLCA0OTE4NSwgNDkxOTMsIDQ5MTk3LCA0OTIwNCwgNDkyMTIsIDQ5MjIwLCAKKyAgICA0OTIyNSwgNDkyMzAsIDQ5MjM2LCA0OTI0MSwgNDkyNDYsIDQ5MjUyLCA0OTI1NywgNDkyNjAsIDQ5MjY0LCA0OTI2OCwgCisgICAgNDkyNzUsIDQ5Mjg0LCA0OTI4OSwgNDkyOTgsIDQ5MzA3LCA0OTMxMywgNDkzMTksIDQ5MzI0LCA0OTMyOSwgNDkzMzQsIAorICAgIDQ5MzM5LCA0OTM0NSwgNDkzNTEsIDQ5MzU5LCA0OTM2NywgNDkzNzMsIDQ5Mzc5LCA0OTM4NCwgNDkzODksIDQ5Mzk2LCAKKyAgICA0OTQwMywgNDk0MDksIDQ5NDEyLCA0OTQxNSwgNDk0MTksIDQ5NDIzLCA0OTQyNywgNDk0MzIsIDQ5NDM4LCA0OTQ0NCwgCisgICAgNDk0NTEsIDQ5NDU4LCA0OTQ2MywgNDk0NjcsIDQ5NDcxLCA0OTQ3NSwgNDk0NzksIDQ5NDgzLCA0OTQ4NywgNDk0OTEsIAorICAgIDQ5NDk1LCA0OTQ5OSwgNDk1MDMsIDQ5NTA3LCA0OTUxMSwgNDk1MTUsIDQ5NTE5LCA0OTUyMywgNDk1MjcsIDQ5NTMxLCAKKyAgICA0OTUzNSwgNDk1MzksIDQ5NTQzLCA0OTU0NywgNDk1NTEsIDQ5NTU1LCA0OTU1OSwgNDk1NjMsIDQ5NTY3LCA0OTU3MSwgCisgICAgNDk1NzUsIDQ5NTc5LCA0OTU4MywgNDk1ODcsIDQ5NTkxLCA0OTU5NSwgNDk1OTksIDQ5NjAzLCA0OTYwNywgNDk2MTEsIAorICAgIDQ5NjE1LCA0OTYxOSwgNDk2MjMsIDQ5NjI3LCA0OTYzMSwgNDk2MzUsIDQ5NjM5LCA0OTY0MywgNDk2NDcsIDQ5NjUxLCAKKyAgICA0OTY1NSwgNDk2NTksIDQ5NjYzLCA0OTY2NywgNDk2NzEsIDQ5Njc1LCA0OTY3OSwgNDk2ODMsIDQ5Njg3LCA0OTY5MSwgCisgICAgNDk2OTUsIDQ5Njk5LCA0OTcwMywgNDk3MDcsIDQ5NzExLCA0OTcxNSwgNDk3MTksIDQ5NzIzLCA0OTcyNywgNDk3MzEsIAorICAgIDQ5NzM1LCA0OTczOSwgNDk3NDMsIDQ5NzQ3LCA0OTc1MSwgNDk3NTUsIDQ5NzU5LCA0OTc2MywgNDk3NjcsIDQ5NzcxLCAKKyAgICA0OTc3NSwgNDk3NzksIDQ5NzgzLCA0OTc4NywgNDk3OTEsIDQ5Nzk1LCA0OTc5OSwgNDk4MDMsIDQ5ODA3LCA0OTgxMSwgCisgICAgNDk4MTUsIDQ5ODE5LCA0OTgyMywgNDk4MjcsIDQ5ODMxLCA0OTgzNSwgNDk4MzksIDQ5ODQzLCA0OTg0NywgNDk4NTEsIAorICAgIDQ5ODU1LCA0OTg1OSwgNDk4NjMsIDQ5ODY3LCA0OTg3MSwgNDk4NzUsIDQ5ODc5LCA0OTg4MywgNDk4ODcsIDQ5ODkxLCAKKyAgICA0OTg5NSwgNDk4OTksIDQ5OTAzLCA0OTkwNywgNDk5MTEsIDQ5OTE1LCA0OTkxOSwgNDk5MjMsIDQ5OTI3LCA0OTkzMSwgCisgICAgNDk5MzUsIDQ5OTM5LCA0OTk0MywgNDk5NDcsIDQ5OTUxLCA0OTk1NSwgNDk5NTksIDQ5OTYzLCA0OTk2NywgNDk5NzEsIAorICAgIDQ5OTc1LCA0OTk3OSwgNDk5ODMsIDQ5OTg3LCA0OTk5MSwgNDk5OTUsIDQ5OTk5LCA1MDAwMywgNTAwMDcsIDUwMDExLCAKKyAgICA1MDAxNSwgNTAwMTksIDUwMDIzLCA1MDAyNywgNTAwMzEsIDUwMDM1LCA1MDAzOSwgNTAwNDMsIDUwMDQ3LCA1MDA1MSwgCisgICAgNTAwNTUsIDUwMDU5LCA1MDA2MywgNTAwNjcsIDUwMDcxLCA1MDA3NSwgNTAwNzksIDUwMDgzLCA1MDA4NywgNTAwOTEsIAorICAgIDUwMDk1LCA1MDA5OSwgNTAxMDMsIDUwMTA3LCA1MDExMSwgNTAxMTUsIDUwMTE5LCA1MDEyMywgNTAxMjcsIDUwMTMxLCAKKyAgICA1MDEzNSwgNTAxMzksIDUwMTQzLCA1MDE0NywgNTAxNTEsIDUwMTU1LCA1MDE1OSwgNTAxNjMsIDUwMTY3LCA1MDE3MSwgCisgICAgNTAxNzUsIDUwMTc5LCA1MDE4MywgNTAxODcsIDUwMTkxLCA1MDE5NSwgNTAxOTksIDUwMjAzLCA1MDIwNywgNTAyMTEsIAorICAgIDUwMjE1LCA1MDIxOSwgNTAyMjMsIDUwMjI3LCA1MDIzMSwgNTAyMzUsIDUwMjM5LCA1MDI0MywgNTAyNDcsIDUwMjUxLCAKKyAgICA1MDI1NSwgNTAyNTksIDUwMjYzLCA1MDI2NywgNTAyNzEsIDUwMjc1LCA1MDI3OSwgNTAyODMsIDUwMjg3LCA1MDI5MSwgCisgICAgNTAyOTUsIDUwMjk5LCA1MDMwMywgNTAzMDcsIDUwMzExLCA1MDMxNSwgNTAzMTksIDUwMzIzLCA1MDMyNywgNTAzMzEsIAorICAgIDUwMzM1LCA1MDMzOSwgNTAzNDMsIDUwMzQ3LCA1MDM1MSwgNTAzNTUsIDUwMzU5LCA1MDM2MywgNTAzNjcsIDUwMzcxLCAKKyAgICA1MDM3NSwgNTAzNzksIDUwMzgzLCA1MDM4NywgNTAzOTEsIDUwMzk1LCA1MDM5OSwgNTA0MDMsIDUwNDA3LCA1MDQxMSwgCisgICAgNTA0MTUsIDUwNDE5LCA1MDQyMywgNTA0MjcsIDUwNDMxLCA1MDQzNSwgNTA0MzksIDUwNDQzLCA1MDQ0NywgNTA0NTEsIAorICAgIDUwNDU1LCA1MDQ1OSwgNTA0NjMsIDUwNDY3LCA1MDQ3MSwgNTA0NzUsIDUwNDc5LCA1MDQ4MywgNTA0ODcsIDUwNDk0LCAKKyAgICA1MDUwMiwgNTA1MDgsIDUwNTE0LCA1MDUyMSwgNTA1MjgsIDUwNTM0LCA1MDU0MCwgNTA1NDYsIDUwNTUyLCA1MDU1NywgCisgICAgNTA1NjIsIDUwNTY3LCA1MDU3MiwgNTA1NzgsIDUwNTg0LCA1MDU5MiwgNTA1OTksIDUwNjA1LCA1MDYxMSwgNTA2MTksIAorICAgIDUwNjI4LCA1MDYzNSwgNTA2NDUsIDUwNjU2LCA1MDY1OSwgNTA2NjIsIDUwNjY2LCA1MDY3MCwgNTA2NzcsIDUwNjg0LCAKKyAgICA1MDY5NSwgNTA3MDYsIDUwNzE2LCA1MDcyNiwgNTA3MzMsIDUwNzQwLCA1MDc0NywgNTA3NTQsIDUwNzY1LCA1MDc3NiwgCisgICAgNTA3ODcsIDUwNzk4LCA1MDgwOCwgNTA4MTgsIDUwODMwLCA1MDg0MiwgNTA4NTMsIDUwODY0LCA1MDg3NiwgNTA4ODgsIAorICAgIDUwODk3LCA1MDkwNywgNTA5MTcsIDUwOTI4LCA1MDkzOSwgNTA5NDYsIDUwOTUzLCA1MDk2MCwgNTA5NjcsIDUwOTc3LCAKKyAgICA1MDk4NywgNTA5OTUsIDUxMDAzLCA1MTAxMCwgNTEwMTcsIDUxMDI0LCA1MTAzMSwgNTEwMzgsIDUxMDQzLCA1MTA0OCwgCisgICAgNTEwNTQsIDUxMDYyLCA1MTA3MiwgNTEwODIsIDUxMDkyLCA1MTEwMiwgNTExMTIsIDUxMTIyLCA1MTEzMiwgNTExNDIsIAorICAgIDUxMTUyLCA1MTE2MiwgNTExNzIsIDUxMTgzLCA1MTE5NCwgNTEyMDQsIDUxMjE0LCA1MTIyNSwgNTEyMzYsIDUxMjQ2LCAKKyAgICA1MTI1NiwgNTEyNjcsIDUxMjc4LCA1MTI4OCwgNTEyOTgsIDUxMzA5LCA1MTMyMCwgNTEzMzYsIDUxMzU1LCA1MTM3MSwgCisgICAgNTEzOTAsIDUxNDA2LCA1MTQyMiwgNTE0MzgsIDUxNDU0LCA1MTQ2NSwgNTE0NzcsIDUxNDg4LCA1MTUwMCwgNTE1MTksIAorICAgIDUxNTM4LCA1MTU0NiwgNTE1NTIsIDUxNTU5LCA1MTU2NiwgNTE1NzMsIDUxNTgwLCA1MTU4NSwgNTE1OTEsIDUxNTk2LCAKKyAgICA1MTYwMSwgNTE2MDcsIDUxNjEyLCA1MTYxNywgNTE2MjIsIDUxNjI3LCA1MTYzMiwgNTE2MzksIDUxNjQ0LCA1MTY1MSwgCisgICAgNTE2NTYsIDUxNjYxLCA1MTY2NSwgNTE2NjksIDUxNjc2LCA1MTY4MywgNTE2OTAsIDUxNjk3LCA1MTcwNCwgNTE3MTEsIAorICAgIDUxNzI0LCA1MTczNywgNTE3NTAsIDUxNzYzLCA1MTc3MSwgNTE3NzksIDUxNzg1LCA1MTc5MSwgNTE3OTgsIDUxODA1LCAKKyAgICA1MTgxMiwgNTE4MTksIDUxODIzLCA1MTgyOCwgNTE4MzYsIDUxODQ0LCA1MTg1MiwgNTE4NTksIDUxODYzLCA1MTg3MSwgCisgICAgNTE4NzksIDUxODgzLCA1MTg4NywgNTE4OTIsIDUxODk5LCA1MTkwNywgNTE5MTUsIDUxOTM0LCA1MTk1MywgNTE5NzIsIAorICAgIDUxOTkxLCA1MjAxMCwgNTIwMjksIDUyMDQ4LCA1MjA2NywgNTIwNzMsIDUyMDgwLCA1MjA4OSwgNTIwOTcsIDUyMTA1LCAKKyAgICA1MjExMCwgNTIxMTMsIDUyMTE2LCA1MjEyMSwgNTIxMjQsIDUyMTQzLCA1MjE1MCwgNTIxNTYsIDUyMTYyLCA1MjE2NiwgCisgICAgNTIxNjksIDUyMTcyLCA1MjE3NSwgNTIxODcsIDUyMjAwLCA1MjIwNywgNTIyMTQsIDUyMjE3LCA1MjIyMSwgNTIyMjQsIAorICAgIDUyMjI5LCA1MjIzNCwgNTIyMzksIDUyMjQ1LCA1MjI1NCwgNTIyNjEsIDUyMjY4LCA1MjI3NiwgNTIyODMsIDUyMjkwLCAKKyAgICA1MjI5MywgNTIyOTksIDUyMzA1LCA1MjMwOCwgNTIzMTEsIDUyMzE2LCA1MjMyMSwgNTIzMjcsIDUyMzMzLCA1MjMzNywgCisgICAgNTIzNDIsIDUyMzQ5LCA1MjM1MywgNTIzNTksIDUyMzYzLCA1MjM2NywgNTIzNzUsIDUyMzg3LCA1MjM5NiwgNTI0MDAsIAorICAgIDUyNDAyLCA1MjQxMSwgNTI0MjAsIDUyNDI2LCA1MjQyOSwgNTI0MzUsIDUyNDQxLCA1MjQ0NiwgNTI0NTEsIDUyNDU2LCAKKyAgICA1MjQ2MSwgNTI0NjYsIDUyNDcxLCA1MjQ3MywgNTI0NzksIDUyNDg0LCA1MjQ5MSwgNTI0OTUsIDUyNTAxLCA1MjUwNCwgCisgICAgNTI1MDgsIDUyNTE1LCA1MjUyMiwgNTI1MjQsIDUyNTI2LCA1MjUzMiwgNTI1MzgsIDUyNTQ0LCA1MjU1MywgNTI1NjIsIAorICAgIDUyNTY5LCA1MjU3NiwgNTI1ODIsIDUyNTg4LCA1MjU5MywgNTI1OTgsIDUyNjAzLCA1MjYwOSwgNTI2MTUsIDUyNjIwLCAKKyAgICA1MjYyNywgNTI2MzEsIDUyNjM1LCA1MjY0OCwgNTI2NjEsIDUyNjczLCA1MjY4MiwgNTI2ODgsIDUyNjk1LCA1MjcwMCwgCisgICAgNTI3MDUsIDUyNzEwLCA1MjcxNSwgNTI3MjAsIDUyNzIyLCA1MjcyOSwgNTI3MzYsIDUyNzQzLCA1Mjc1MCwgNTI3NTcsIAorICAgIDUyNzY1LCA1Mjc3MSwgNTI3NzYsIDUyNzgyLCA1Mjc4OCwgNTI3OTQsIDUyODAxLCA1MjgwNywgNTI4MTUsIDUyODIzLCAKKyAgICA1MjgzMSwgNTI4MzksIDUyODQ2LCA1Mjg1MiwgNTI4NTgsIDUyODY3LCA1Mjg3MSwgNTI4ODAsIDUyODg5LCA1Mjg5OCwgCisgICAgNTI5MDYsIDUyOTEwLCA1MjkxNiwgNTI5MjMsIDUyOTMwLCA1MjkzNCwgNTI5NDAsIDUyOTQ3LCA1Mjk1MiwgNTI5NTcsIAorICAgIDUyOTYzLCA1Mjk2OCwgNTI5NzMsIDUyOTgwLCA1Mjk4NywgNTI5OTIsIDUyOTk3LCA1MzAwNSwgNTMwMTMsIDUzMDIzLCAKKyAgICA1MzAzMywgNTMwNDAsIDUzMDQ3LCA1MzA1MSwgNTMwNTUsIDUzMDY3LCA1MzA3MywgNTMwNzksIDUzMDg0LCA1MzA4OSwgCisgICAgNTMwOTYsIDUzMTAzLCA1MzEwOSwgNTMxMTUsIDUzMTI0LCA1MzEzMiwgNTMxNDAsIDUzMTQ3LCA1MzE1NCwgNTMxNjEsIAorICAgIDUzMTY3LCA1MzE3NCwgNTMxODAsIDUzMTg3LCA1MzE5NCwgNTMyMDEsIDUzMjA4LCA1MzIxNCwgNTMyMTksIDUzMjI4LCAKKyAgICA1MzIzOCwgNTMyNDUsIDUzMjU0LCA1MzI2MCwgNTMyNjUsIDUzMjcwLCA1MzI4MCwgNTMyODYsIDUzMjkyLCA1MzI5OCwgCisgICAgNTMzMDYsIDUzMzExLCA1MzMxOCwgNTMzMjUsIDUzMzM2LCA1MzM0MywgNTMzNTAsIDUzMzU3LCA1MzM2NCwgNTMzNzEsIAorICAgIDUzMzc4LCA1MzM4NSwgNTMzOTcsIDUzNDA5LCA1MzQyMCwgNTM0MzEsIDUzNDQ0LCA1MzQ1NywgNTM0NjIsIDUzNDY3LCAKKyAgICA1MzQ3NiwgNTM0ODUsIDUzNDkyLCA1MzQ5OSwgNTM1MDgsIDUzNTE3LCA1MzUyNSwgNTM1MzMsIDUzNTQxLCA1MzU0OSwgCisgICAgNTM1NTksIDUzNTY5LCA1MzU4MywgNTM1OTcsIDUzNjA1LCA1MzYxMywgNTM2MjUsIDUzNjM3LCA1MzY0NSwgNTM2NTMsIAorICAgIDUzNjYzLCA1MzY3MywgNTM2NzgsIDUzNjgzLCA1MzY5MiwgNTM3MDEsIDUzNzA2LCA1MzcxMSwgNTM3MTksIDUzNzI1LCAKKyAgICA1MzczMSwgNTM3MzksIDUzNzQ3LCA1Mzc2MCwgNTM3NzMsIDUzNzc3LCA1Mzc4MSwgNTM3ODgsIDUzNzk1LCA1MzgwMiwgCisgICAgNTM4MTAsIDUzODE4LCA1MzgyNywgNTM4MzYsIDUzODQyLCA1Mzg0OCwgNTM4NTUsIDUzODYyLCA1Mzg2OSwgNTM4NzYsIAorICAgIDUzODg1LCA1Mzg5NCwgNTM4OTcsIDUzOTAwLCA1MzkwNSwgNTM5MTAsIDUzOTE2LCA1MzkyMiwgNTM5MjksIDUzOTM2LCAKKyAgICA1Mzk0NiwgNTM5NTYsIDUzOTYzLCA1Mzk3MCwgNTM5NzgsIDUzOTg2LCA1Mzk5NCwgNTQwMDIsIDU0MDEwLCA1NDAxOCwgCisgICAgNTQwMjQsIDU0MDMwLCA1NDAzNCwgNTQwMzgsIDU0MDQ1LCA1NDA1MiwgNTQwNTcsIDU0MDYyLCA1NDA2NywgNTQwNzIsIAorICAgIDU0MDc4LCA1NDA5MiwgNTQwOTksIDU0MTA2LCA1NDExMCwgNTQxMTIsIDU0MTE0LCA1NDExOSwgNTQxMjQsIDU0MTI5LCAKKyAgICA1NDEzNCwgNTQxNDIsIDU0MTQ5LCA1NDE1NiwgNTQxNjQsIDU0MTc2LCA1NDE4NCwgNTQxOTIsIDU0MjAzLCA1NDIwNywgCisgICAgNTQyMTEsIDU0MjE3LCA1NDIyNSwgNTQyMzgsIDU0MjQ1LCA1NDI1MiwgNTQyNTksIDU0MjY0LCA1NDI3MSwgNTQyODAsIAorICAgIDU0Mjg4LCA1NDI5NCwgNTQzMDAsIDU0MzA2LCA1NDMxNSwgNTQzMjQsIDU0MzMyLCA1NDM0MSwgNTQzNDYsIDU0MzQ5LCAKKyAgICA1NDM1NCwgNTQzNjAsIDU0MzY2LCA1NDM3MiwgNTQzNzgsIDU0MzgyLCA1NDM4NSwgNTQzODksIDU0MzkzLCA1NDM5OSwgCisgICAgNTQ0MDUsIDU0NDExLCA1NDQxNywgNTQ0MjEsIDU0NDI1LCA1NDQzMiwgNTQ0MzksIDU0NDQ2LCA1NDQ1MywgNTQ0NjAsIAorICAgIDU0NDY3LCA1NDQ3NywgNTQ0ODcsIDU0NDk0LCA1NDUwMSwgNTQ1MDksIDU0NTE3LCA1NDUyMSwgNTQ1MjYsIDU0NTMxLCAKKyAgICA1NDUzNywgNTQ1NDMsIDU0NTQ2LCA1NDU0OSwgNTQ1NTIsIDU0NTU1LCA1NDU1OSwgNTQ1NjQsIDU0NTY5LCA1NDU3NCwgCisgICAgNTQ1NzksIDU0NTg0LCA1NDU4OCwgNTQ1OTIsIDU0NTk2LCA1NDYwMCwgNTQ2MDQsIDU0NjA4LCA1NDYxMiwgNTQ2MTgsIAorICAgIDU0NjIyLCA1NDYyOCwgNTQ2MzMsIDU0NjQwLCA1NDY0OCwgNTQ2NTUsIDU0NjYzLCA1NDY3MCwgNTQ2NzgsIDU0Njg3LCAKKyAgICA1NDY5NCwgNTQ3MDQsIDU0NzE1LCA1NDcyMSwgNTQ3MzAsIDU0NzM2LCA1NDc0NSwgNTQ3NTQsIDU0NzYwLCA1NDc2NiwgCisgICAgNTQ3NzAsIDU0Nzc0LCA1NDc4MywgNTQ3OTIsIDU0Nzk5LCA1NDgwNiwgNTQ4MTUsIDAsIDAsIDAsIDU0ODI0LCA1NDgyOSwgCisgICAgNTQ4MzMsIDU0ODM3LCA1NDg0MiwgNTQ4NDcsIDU0ODUyLCA1NDg2MCwgNTQ4NjgsIDU0ODcxLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA1NDg0NywgNTQ4NTIsIDU0ODU3LCA1NDg2MiwgNTQ4NjcsIDU0ODcyLCA1NDg3NywgNTQ4ODIsIAotICAgIDU0ODg3LCA1NDg5MiwgNTQ4OTcsIDU0OTAzLCA1NDkwNywgNTQ5MTIsIDU0OTE3LCA1NDkyMiwgNTQ5MjcsIDU0OTMyLCAKLSAgICA1NDkzNywgNTQ5NDIsIDU0OTQ3LCA1NDk1MiwgNTQ5NTcsIDU0OTYyLCA1NDk2NywgNTQ5NzIsIDU0OTc3LCA1NDk4MiwgCi0gICAgNTQ5ODcsIDU0OTkyLCA1NDk5NywgNTUwMDIsIDU1MDA3LCA1NTAxMiwgNTUwMTcsIDU1MDIzLCA1NTAyOCwgNTUwMzQsIAotICAgIDU1MDQzLCA1NTA0OCwgNTUwNTYsIDU1MDYzLCA1NTA3MiwgNTUwNzcsIDU1MDgyLCA1NTA4NywgNTUwOTMsIDAsIDU1MTAwLCAKLSAgICA1NTEwNSwgNTUxMTAsIDU1MTE1LCA1NTEyMCwgNTUxMjUsIDU1MTMwLCA1NTEzNSwgNTUxNDAsIDU1MTQ1LCA1NTE1MCwgCi0gICAgNTUxNTYsIDU1MTYwLCA1NTE2NSwgNTUxNzAsIDU1MTc1LCA1NTE4MCwgNTUxODUsIDU1MTkwLCA1NTE5NSwgNTUyMDAsIAotICAgIDU1MjA1LCA1NTIxMCwgNTUyMTUsIDU1MjIwLCA1NTIyNSwgNTUyMzAsIDU1MjM1LCA1NTI0MCwgNTUyNDUsIDU1MjUwLCAKLSAgICA1NTI1NSwgNTUyNjAsIDU1MjY1LCA1NTI3MCwgNTUyNzYsIDU1MjgxLCA1NTI4NywgNTUyOTYsIDU1MzAxLCA1NTMwOSwgCi0gICAgNTUzMTYsIDU1MzI1LCA1NTMzMCwgNTUzMzUsIDU1MzQwLCA1NTM0NiwgMCwgNTUzNTMsIDU1MzYxLCA1NTM2OSwgNTUzNzgsIAotICAgIDU1Mzg1LCA1NTM5MywgNTUzOTksIDU1NDA4LCA1NTQxNiwgNTU0MjQsIDU1NDMyLCA1NTQ0MCwgNTU0NDgsIDU1NDU2LCAKLSAgICA1NTQ2MSwgNTU0NjgsIDU1NDc0LCA1NTQ4MSwgNTU0ODksIDU1NDk2LCA1NTUwMywgNTU1MTEsIDU1NTE3LCA1NTUyMywgCi0gICAgNTU1MzAsIDU1NTM3LCA1NTU0NywgNTU1NTcsIDU1NTY0LCA1NTU3MSwgNTU1NzYsIDU1NTg2LCA1NTU5NiwgNTU2MDEsIAotICAgIDU1NjA2LCA1NTYxMSwgNTU2MTYsIDU1NjIxLCA1NTYyNiwgNTU2MzEsIDU1NjM2LCA1NTY0MSwgNTU2NDYsIDU1NjUxLCAKLSAgICA1NTY1NiwgNTU2NjEsIDU1NjY2LCA1NTY3MSwgNTU2NzYsIDU1NjgxLCA1NTY4NiwgNTU2OTEsIDU1Njk2LCA1NTcwMSwgCi0gICAgNTU3MDYsIDU1NzExLCA1NTcxNiwgNTU3MjEsIDU1NzI2LCA1NTczMSwgNTU3MzYsIDU1NzQxLCA1NTc0NiwgNTU3NTAsIAotICAgIDU1NzU0LCA1NTc1OSwgNTU3NjQsIDU1NzY5LCA1NTc3NCwgNTU3NzksIDU1Nzg0LCA1NTc4OSwgNTU3OTQsIDU1Nzk5LCAKLSAgICA1NTgwNCwgNTU4MDksIDU1ODE0LCA1NTgxOSwgNTU4MjQsIDU1ODI5LCA1NTgzNCwgNTU4MzksIDU1ODQ0LCA1NTg1MSwgCi0gICAgNTU4NTgsIDU1ODY1LCA1NTg3MiwgNTU4NzksIDU1ODg2LCA1NTg5MywgNTU5MDAsIDU1OTA3LCA1NTkxNCwgNTU5MjEsIAotICAgIDU1OTI4LCA1NTkzNSwgNTU5NDIsIDU1OTQ3LCA1NTk1MiwgNTU5NTksIDU1OTY2LCA1NTk3MywgNTU5ODAsIDU1OTg3LCAKLSAgICA1NTk5NCwgNTYwMDEsIDU2MDA4LCA1NjAxNSwgNTYwMjIsIDU2MDI5LCA1NjAzNiwgNTYwNDIsIDU2MDQ4LCA1NjA1NCwgCi0gICAgNTYwNjAsIDU2MDY3LCA1NjA3NCwgNTYwODEsIDU2MDg4LCA1NjA5NSwgNTYxMDIsIDU2MTA5LCA1NjExNiwgNTYxMjMsIAotICAgIDU2MTMwLCA1NjEzOCwgNTYxNDYsIDU2MTU0LCA1NjE2MiwgNTYxNzAsIDU2MTc4LCA1NjE4NiwgNTYxOTQsIDU2MTk4LCAKLSAgICA1NjIwNCwgNTYyMTAsIDU2MjE0LCA1NjIyMCwgNTYyMjYsIDU2MjMyLCA1NjIzOSwgNTYyNDYsIDU2MjUzLCA1NjI2MCwgCi0gICAgNTYyNjUsIDU2MjcxLCA1NjI3NywgNTYyODQsIDAsIDAsIDAsIDAsIDAsIDU2MjkxLCA1NjI5OSwgNTYzMDgsIDU2MzE3LCAKLSAgICA1NjMyNSwgNTYzMzEsIDU2MzM2LCA1NjM0MSwgNTYzNDYsIDU2MzUxLCA1NjM1NiwgNTYzNjEsIDU2MzY2LCA1NjM3MSwgCi0gICAgNTYzNzYsIDU2MzgxLCA1NjM4NiwgNTYzOTEsIDU2Mzk2LCA1NjQwMSwgNTY0MDYsIDU2NDExLCA1NjQxNiwgNTY0MjEsIAotICAgIDU2NDI2LCA1NjQzMSwgNTY0MzYsIDU2NDQxLCA1NjQ0NiwgNTY0NTEsIDU2NDU2LCA1NjQ2MSwgNTY0NjYsIDU2NDcxLCAKLSAgICA1NjQ3NiwgNTY0ODEsIDU2NDg2LCA1NjQ5MSwgNTY0OTYsIDU2NTAxLCA1NjUwNiwgNTY1MTEsIDU2NTE2LCA1NjUyMSwgCi0gICAgNTY1MjYsIDAsIDU2NTMxLCAwLCAwLCAwLCAwLCAwLCA1NjUzNiwgMCwgMCwgNTY1NDEsIDU2NTQ1LCA1NjU1MCwgNTY1NTUsIAotICAgIDU2NTYwLCA1NjU2NSwgNTY1NzQsIDU2NTc5LCA1NjU4NCwgNTY1ODksIDU2NTk0LCA1NjU5OSwgNTY2MDQsIDU2NjA5LCAKLSAgICA1NjYxNCwgNTY2MjEsIDU2NjI2LCA1NjYzMSwgNTY2NDAsIDU2NjQ3LCA1NjY1MiwgNTY2NTcsIDU2NjYyLCA1NjY2OSwgCi0gICAgNTY2NzQsIDU2NjgxLCA1NjY4NiwgNTY2OTEsIDU2Njk4LCA1NjcwNSwgNTY3MTAsIDU2NzE1LCA1NjcyMCwgNTY3MjcsIAotICAgIDU2NzM0LCA1NjczOSwgNTY3NDQsIDU2NzQ5LCA1Njc1NCwgNTY3NTksIDU2NzY2LCA1Njc3MywgNTY3NzgsIDU2NzgzLCAKLSAgICA1Njc4OCwgNTY3OTMsIDU2Nzk4LCA1NjgwMywgNTY4MDgsIDU2ODEzLCA1NjgxOCwgNTY4MjMsIDU2ODI4LCA1NjgzNSwgCi0gICAgNTY4NDAsIDU2ODQ1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1Njg1MCwgNTY4NTcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDU2ODYyLCA1Njg2NywgNTY4NzEsIDU2ODc1LCA1Njg3OSwgNTY4ODMsIDU2ODg3LCA1Njg5MSwgCi0gICAgNTY4OTUsIDU2ODk5LCA1NjkwMywgNTY5MDcsIDU2OTEzLCA1NjkxNywgNTY5MjEsIDU2OTI1LCA1NjkyOSwgNTY5MzMsIAotICAgIDU2OTM3LCA1Njk0MSwgNTY5NDUsIDU2OTQ5LCA1Njk1MywgNTY5NTcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDU2OTYxLCA1Njk2NSwgNTY5NjksIDU2OTczLCA1Njk3NywgNTY5ODEsIDU2OTg1LCAwLCA1Njk4OSwgNTY5OTMsIDU2OTk3LCAKLSAgICA1NzAwMSwgNTcwMDUsIDU3MDA5LCA1NzAxMywgMCwgNTcwMTcsIDU3MDIxLCA1NzAyNSwgNTcwMjksIDU3MDMzLCA1NzAzNywgCi0gICAgNTcwNDEsIDAsIDU3MDQ1LCA1NzA0OSwgNTcwNTMsIDU3MDU3LCA1NzA2MSwgNTcwNjUsIDU3MDY5LCAwLCA1NzA3MywgCi0gICAgNTcwNzcsIDU3MDgxLCA1NzA4NSwgNTcwODksIDU3MDkzLCA1NzA5NywgMCwgNTcxMDEsIDU3MTA1LCA1NzEwOSwgNTcxMTMsIAotICAgIDU3MTE3LCA1NzEyMSwgNTcxMjUsIDAsIDU3MTI5LCA1NzEzMywgNTcxMzcsIDU3MTQxLCA1NzE0NSwgNTcxNDksIDU3MTUzLCAKLSAgICAwLCA1NzE1NywgNTcxNjEsIDU3MTY1LCA1NzE2OSwgNTcxNzMsIDU3MTc3LCA1NzE4MSwgMCwgNTcxODUsIDU3MTkwLCAKLSAgICA1NzE5NSwgNTcyMDAsIDU3MjA1LCA1NzIxMCwgNTcyMTUsIDU3MjE5LCA1NzIyNCwgNTcyMjksIDU3MjM0LCA1NzIzOCwgCi0gICAgNTcyNDMsIDU3MjQ4LCA1NzI1MywgNTcyNTgsIDU3MjYyLCA1NzI2NywgNTcyNzIsIDU3Mjc3LCA1NzI4MiwgNTcyODcsIAotICAgIDU3MjkyLCA1NzI5NiwgNTczMDEsIDU3MzA2LCA1NzMxMywgNTczMTgsIDU3MzIzLCA1NzMyOSwgNTczMzYsIDU3MzQzLCAKLSAgICA1NzM1MiwgNTczNTksIDU3MzY4LCA1NzM3MiwgNTczNzYsIDU3MzgyLCA1NzM4OCwgNTczOTQsIDU3NDAyLCA1NzQwOCwgCi0gICAgNTc0MTIsIDU3NDE2LCA1NzQyMCwgNTc0MjYsIDU3NDMyLCA1NzQzNiwgNTc0MzgsIDU3NDQyLCA1NzQ0OCwgNTc0NTAsIAotICAgIDU3NDU0LCA1NzQ1OCwgNTc0NjIsIDU3NDY4LCA1NzQ3MywgNTc0NzcsIDU3NDgxLCA1NzQ4NiwgNTc0OTIsIDU3NDk3LCAKLSAgICA1NzUwMiwgNTc1MDcsIDU3NTEyLCA1NzUxOSwgNTc1MjYsIDU3NTMxLCA1NzUzNiwgNTc1NDEsIDU3NTQ2LCA1NzU1MSwgCi0gICAgNTc1NTYsIDU3NTYwLCA1NzU2NCwgNTc1NzEsIDU3NTc4LCA1NzU4NCwgNTc1ODgsIDU3NTkzLCA1NzU5NSwgNTc1OTksIAotICAgIDU3NjA3LCA1NzYxMSwgNTc2MTUsIDU3NjE5LCA1NzYyMywgNTc2MjksIDU3NjM1LCA1NzYzOSwgNTc2NDUsIDU3NjQ5LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NDg3NSwgNTQ4ODAsIDU0ODg1LCAKKyAgICA1NDg5MCwgNTQ4OTUsIDU0OTAwLCA1NDkwNSwgNTQ5MTAsIDU0OTE1LCA1NDkyMCwgNTQ5MjUsIDU0OTMxLCA1NDkzNSwgCisgICAgNTQ5NDAsIDU0OTQ1LCA1NDk1MCwgNTQ5NTUsIDU0OTYwLCA1NDk2NSwgNTQ5NzAsIDU0OTc1LCA1NDk4MCwgNTQ5ODUsIAorICAgIDU0OTkwLCA1NDk5NSwgNTUwMDAsIDU1MDA1LCA1NTAxMCwgNTUwMTUsIDU1MDIwLCA1NTAyNSwgNTUwMzAsIDU1MDM1LCAKKyAgICA1NTA0MCwgNTUwNDUsIDU1MDUxLCA1NTA1NiwgNTUwNjIsIDU1MDcxLCA1NTA3NiwgNTUwODQsIDU1MDkxLCA1NTEwMCwgCisgICAgNTUxMDUsIDU1MTEwLCA1NTExNSwgNTUxMjEsIDAsIDU1MTI4LCA1NTEzMywgNTUxMzgsIDU1MTQzLCA1NTE0OCwgNTUxNTMsIAorICAgIDU1MTU4LCA1NTE2MywgNTUxNjgsIDU1MTczLCA1NTE3OCwgNTUxODQsIDU1MTg4LCA1NTE5MywgNTUxOTgsIDU1MjAzLCAKKyAgICA1NTIwOCwgNTUyMTMsIDU1MjE4LCA1NTIyMywgNTUyMjgsIDU1MjMzLCA1NTIzOCwgNTUyNDMsIDU1MjQ4LCA1NTI1MywgCisgICAgNTUyNTgsIDU1MjYzLCA1NTI2OCwgNTUyNzMsIDU1Mjc4LCA1NTI4MywgNTUyODgsIDU1MjkzLCA1NTI5OCwgNTUzMDQsIAorICAgIDU1MzA5LCA1NTMxNSwgNTUzMjQsIDU1MzI5LCA1NTMzNywgNTUzNDQsIDU1MzUzLCA1NTM1OCwgNTUzNjMsIDU1MzY4LCAKKyAgICA1NTM3NCwgMCwgNTUzODEsIDU1Mzg5LCA1NTM5NywgNTU0MDYsIDU1NDEzLCA1NTQyMSwgNTU0MjcsIDU1NDM2LCA1NTQ0NCwgCisgICAgNTU0NTIsIDU1NDYwLCA1NTQ2OCwgNTU0NzYsIDU1NDg0LCA1NTQ4OSwgNTU0OTYsIDU1NTAyLCA1NTUwOSwgNTU1MTcsIAorICAgIDU1NTI0LCA1NTUzMSwgNTU1MzksIDU1NTQ1LCA1NTU1MSwgNTU1NTgsIDU1NTY1LCA1NTU3NSwgNTU1ODUsIDU1NTkyLCAKKyAgICA1NTU5OSwgNTU2MDQsIDU1NjE0LCA1NTYyNCwgNTU2MjksIDU1NjM0LCA1NTYzOSwgNTU2NDQsIDU1NjQ5LCA1NTY1NCwgCisgICAgNTU2NTksIDU1NjY0LCA1NTY2OSwgNTU2NzQsIDU1Njc5LCA1NTY4NCwgNTU2ODksIDU1Njk0LCA1NTY5OSwgNTU3MDQsIAorICAgIDU1NzA5LCA1NTcxNCwgNTU3MTksIDU1NzI0LCA1NTcyOSwgNTU3MzQsIDU1NzM5LCA1NTc0NCwgNTU3NDksIDU1NzU0LCAKKyAgICA1NTc1OSwgNTU3NjQsIDU1NzY5LCA1NTc3NCwgNTU3NzgsIDU1NzgyLCA1NTc4NywgNTU3OTIsIDU1Nzk3LCA1NTgwMiwgCisgICAgNTU4MDcsIDU1ODEyLCA1NTgxNywgNTU4MjIsIDU1ODI3LCA1NTgzMiwgNTU4MzcsIDU1ODQyLCA1NTg0NywgNTU4NTIsIAorICAgIDU1ODU3LCA1NTg2MiwgNTU4NjcsIDU1ODcyLCA1NTg3OSwgNTU4ODYsIDU1ODkzLCA1NTkwMCwgNTU5MDcsIDU1OTE0LCAKKyAgICA1NTkyMSwgNTU5MjgsIDU1OTM1LCA1NTk0MiwgNTU5NDksIDU1OTU2LCA1NTk2MywgNTU5NzAsIDU1OTc1LCA1NTk4MCwgCisgICAgNTU5ODcsIDU1OTk0LCA1NjAwMSwgNTYwMDgsIDU2MDE1LCA1NjAyMiwgNTYwMjksIDU2MDM2LCA1NjA0MywgNTYwNTAsIAorICAgIDU2MDU3LCA1NjA2NCwgNTYwNzAsIDU2MDc2LCA1NjA4MiwgNTYwODgsIDU2MDk1LCA1NjEwMiwgNTYxMDksIDU2MTE2LCAKKyAgICA1NjEyMywgNTYxMzAsIDU2MTM3LCA1NjE0NCwgNTYxNTEsIDU2MTU4LCA1NjE2NiwgNTYxNzQsIDU2MTgyLCA1NjE5MCwgCisgICAgNTYxOTgsIDU2MjA2LCA1NjIxNCwgNTYyMjIsIDU2MjI2LCA1NjIzMiwgNTYyMzgsIDU2MjQyLCA1NjI0OCwgNTYyNTQsIAorICAgIDU2MjYwLCA1NjI2NywgNTYyNzQsIDU2MjgxLCA1NjI4OCwgNTYyOTMsIDU2Mjk5LCA1NjMwNSwgNTYzMTIsIDAsIDAsIDAsIAorICAgIDAsIDAsIDU2MzE5LCA1NjMyNywgNTYzMzYsIDU2MzQ1LCA1NjM1MywgNTYzNTksIDU2MzY0LCA1NjM2OSwgNTYzNzQsIAorICAgIDU2Mzc5LCA1NjM4NCwgNTYzODksIDU2Mzk0LCA1NjM5OSwgNTY0MDQsIDU2NDA5LCA1NjQxNCwgNTY0MTksIDU2NDI0LCAKKyAgICA1NjQyOSwgNTY0MzQsIDU2NDM5LCA1NjQ0NCwgNTY0NDksIDU2NDU0LCA1NjQ1OSwgNTY0NjQsIDU2NDY5LCA1NjQ3NCwgCisgICAgNTY0NzksIDU2NDg0LCA1NjQ4OSwgNTY0OTQsIDU2NDk5LCA1NjUwNCwgNTY1MDksIDU2NTE0LCA1NjUxOSwgNTY1MjQsIAorICAgIDU2NTI5LCA1NjUzNCwgNTY1MzksIDU2NTQ0LCA1NjU0OSwgNTY1NTQsIDAsIDU2NTU5LCAwLCAwLCAwLCAwLCAwLCA1NjU2NCwgCisgICAgMCwgMCwgNTY1NjksIDU2NTczLCA1NjU3OCwgNTY1ODMsIDU2NTg4LCA1NjU5MywgNTY2MDIsIDU2NjA3LCA1NjYxMiwgCisgICAgNTY2MTcsIDU2NjIyLCA1NjYyNywgNTY2MzIsIDU2NjM3LCA1NjY0MiwgNTY2NDksIDU2NjU0LCA1NjY1OSwgNTY2NjgsIAorICAgIDU2Njc1LCA1NjY4MCwgNTY2ODUsIDU2NjkwLCA1NjY5NywgNTY3MDIsIDU2NzA5LCA1NjcxNCwgNTY3MTksIDU2NzI2LCAKKyAgICA1NjczMywgNTY3MzgsIDU2NzQzLCA1Njc0OCwgNTY3NTUsIDU2NzYyLCA1Njc2NywgNTY3NzIsIDU2Nzc3LCA1Njc4MiwgCisgICAgNTY3ODcsIDU2Nzk0LCA1NjgwMSwgNTY4MDYsIDU2ODExLCA1NjgxNiwgNTY4MjEsIDU2ODI2LCA1NjgzMSwgNTY4MzYsIAorICAgIDU2ODQxLCA1Njg0NiwgNTY4NTEsIDU2ODU2LCA1Njg2MywgNTY4NjgsIDU2ODczLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA1Njg3OCwgNTY4ODUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU2ODkwLCA1Njg5NSwgCisgICAgNTY4OTksIDU2OTAzLCA1NjkwNywgNTY5MTEsIDU2OTE1LCA1NjkxOSwgNTY5MjMsIDU2OTI3LCA1NjkzMSwgNTY5MzUsIAorICAgIDU2OTQxLCA1Njk0NSwgNTY5NDksIDU2OTUzLCA1Njk1NywgNTY5NjEsIDU2OTY1LCA1Njk2OSwgNTY5NzMsIDU2OTc3LCAKKyAgICA1Njk4MSwgNTY5ODUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU2OTg5LCA1Njk5MywgNTY5OTcsIDU3MDAxLCAKKyAgICA1NzAwNSwgNTcwMDksIDU3MDEzLCAwLCA1NzAxNywgNTcwMjEsIDU3MDI1LCA1NzAyOSwgNTcwMzMsIDU3MDM3LCA1NzA0MSwgCisgICAgMCwgNTcwNDUsIDU3MDQ5LCA1NzA1MywgNTcwNTcsIDU3MDYxLCA1NzA2NSwgNTcwNjksIDAsIDU3MDczLCA1NzA3NywgCisgICAgNTcwODEsIDU3MDg1LCA1NzA4OSwgNTcwOTMsIDU3MDk3LCAwLCA1NzEwMSwgNTcxMDUsIDU3MTA5LCA1NzExMywgNTcxMTcsIAorICAgIDU3MTIxLCA1NzEyNSwgMCwgNTcxMjksIDU3MTMzLCA1NzEzNywgNTcxNDEsIDU3MTQ1LCA1NzE0OSwgNTcxNTMsIDAsIAorICAgIDU3MTU3LCA1NzE2MSwgNTcxNjUsIDU3MTY5LCA1NzE3MywgNTcxNzcsIDU3MTgxLCAwLCA1NzE4NSwgNTcxODksIDU3MTkzLCAKKyAgICA1NzE5NywgNTcyMDEsIDU3MjA1LCA1NzIwOSwgMCwgNTcyMTMsIDU3MjE4LCA1NzIyMywgNTcyMjgsIDU3MjMzLCA1NzIzOCwgCisgICAgNTcyNDMsIDU3MjQ3LCA1NzI1MiwgNTcyNTcsIDU3MjYyLCA1NzI2NiwgNTcyNzEsIDU3Mjc2LCA1NzI4MSwgNTcyODYsIAorICAgIDU3MjkwLCA1NzI5NSwgNTczMDAsIDU3MzA1LCA1NzMxMCwgNTczMTUsIDU3MzIwLCA1NzMyNCwgNTczMjksIDU3MzM0LCAKKyAgICA1NzM0MSwgNTczNDYsIDU3MzUxLCA1NzM1NywgNTczNjQsIDU3MzcxLCA1NzM4MCwgNTczODcsIDU3Mzk2LCA1NzQwMCwgCisgICAgNTc0MDQsIDU3NDEwLCA1NzQxNiwgNTc0MjIsIDU3NDMwLCA1NzQzNiwgNTc0NDAsIDU3NDQ0LCA1NzQ0OCwgNTc0NTQsIAorICAgIDU3NDYwLCA1NzQ2NCwgNTc0NjYsIDU3NDcwLCA1NzQ3NiwgNTc0NzgsIDU3NDgyLCA1NzQ4NiwgNTc0OTAsIDU3NDk2LCAKKyAgICA1NzUwMSwgNTc1MDUsIDU3NTA5LCA1NzUxNCwgNTc1MjAsIDU3NTI1LCA1NzUzMCwgNTc1MzUsIDU3NTQwLCA1NzU0NywgCisgICAgNTc1NTQsIDU3NTU5LCA1NzU2NCwgNTc1NjksIDU3NTc0LCA1NzU3OSwgNTc1ODQsIDU3NTg4LCA1NzU5MiwgNTc1OTksIAorICAgIDU3NjA2LCA1NzYxMiwgNTc2MTYsIDU3NjIxLCA1NzYyMywgNTc2MjcsIDU3NjM1LCA1NzYzOSwgNTc2NDMsIDU3NjQ3LCAKKyAgICA1NzY1MSwgNTc2NTcsIDU3NjYzLCA1NzY2NywgNTc2NzMsIDU3Njc3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NzY1MywgNTc2NTcsIAotICAgIDU3NjYxLCA1NzY2NiwgNTc2NzEsIDU3Njc2LCA1NzY4MCwgNTc2ODQsIDU3Njg4LCA1NzY5MywgNTc2OTgsIDU3NzAyLCAKLSAgICA1NzcwNiwgNTc3MTAsIDU3NzE0LCA1NzcxOSwgNTc3MjQsIDU3NzI5LCA1NzczNCwgNTc3MzgsIDU3NzQyLCA1Nzc0NywgCi0gICAgNTc3NTIsIDU3NzU3LCA1Nzc2MiwgNTc3NjYsIDAsIDU3NzcwLCA1Nzc3NCwgNTc3NzgsIDU3NzgyLCA1Nzc4NiwgNTc3OTAsIAotICAgIDU3Nzk0LCA1Nzc5OSwgNTc4MDQsIDU3ODA4LCA1NzgxMywgNTc4MTgsIDU3ODI3LCA1NzgzMSwgNTc4MzUsIDU3ODM5LCAKLSAgICA1Nzg0NiwgNTc4NTAsIDU3ODU1LCA1Nzg2MCwgNTc4NjQsIDU3ODY4LCA1Nzg3NCwgNTc4NzksIDU3ODg0LCA1Nzg4OSwgCi0gICAgNTc4OTQsIDU3ODk4LCA1NzkwMiwgNTc5MDYsIDU3OTEwLCA1NzkxNCwgNTc5MTksIDU3OTI0LCA1NzkyOCwgNTc5MzIsIAotICAgIDU3OTM3LCA1Nzk0MiwgNTc5NDcsIDU3OTUxLCA1Nzk1NSwgNTc5NjAsIDU3OTY1LCA1Nzk3MSwgNTc5NzcsIDU3OTgxLCAKLSAgICA1Nzk4NywgNTc5OTMsIDU3OTk3LCA1ODAwMywgNTgwMDksIDU4MDE0LCA1ODAxOSwgNTgwMjMsIDU4MDI5LCA1ODAzMywgCi0gICAgNTgwMzcsIDU4MDQzLCA1ODA0OSwgNTgwNTQsIDU4MDU5LCA1ODA2MywgNTgwNjcsIDU4MDc1LCA1ODA4MSwgNTgwODcsIAotICAgIDU4MDkzLCA1ODA5OCwgNTgxMDMsIDU4MTA4LCA1ODExNCwgNTgxMTgsIDU4MTI0LCA1ODEyOCwgNTgxMzIsIDU4MTM4LCAKLSAgICA1ODE0NCwgNTgxNTAsIDU4MTU2LCA1ODE2MiwgNTgxNjgsIDU4MTc0LCA1ODE4MCwgNTgxODYsIDU4MTkyLCA1ODE5OCwgCi0gICAgNTgyMDQsIDU4MjA4LCA1ODIxNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTgyMjAsIDU4MjIzLCAKLSAgICA1ODIyNywgNTgyMzEsIDU4MjM1LCA1ODIzOSwgNTgyNDIsIDU4MjQ1LCA1ODI0OSwgNTgyNTMsIDU4MjU3LCA1ODI2MSwgCi0gICAgNTgyNjQsIDU4MjY5LCA1ODI3MywgNTgyNzcsIDU4MjgxLCA1ODI4NiwgNTgyOTAsIDU4Mjk0LCA1ODI5OCwgNTgzMDIsIAotICAgIDU4MzA4LCA1ODMxNCwgNTgzMTgsIDU4MzIyLCA1ODMyNiwgNTgzMzAsIDU4MzM0LCA1ODMzOCwgNTgzNDIsIDU4MzQ2LCAKLSAgICA1ODM1MCwgNTgzNTQsIDU4MzU4LCA1ODM2NCwgNTgzNjgsIDU4MzcyLCA1ODM3NiwgNTgzODAsIDU4Mzg0LCA1ODM4OCwgCi0gICAgNTgzOTIsIDU4Mzk2LCA1ODQwMCwgNTg0MDQsIDU4NDA4LCA1ODQxMiwgNTg0MTYsIDU4NDIwLCA1ODQyNCwgNTg0MjgsIAotICAgIDU4NDM0LCA1ODQ0MCwgNTg0NDUsIDU4NDUwLCA1ODQ1NCwgNTg0NTgsIDU4NDYyLCA1ODQ2NiwgNTg0NzAsIDU4NDc0LCAKLSAgICA1ODQ3OCwgNTg0ODIsIDU4NDg2LCA1ODQ5MCwgNTg0OTQsIDU4NDk4LCA1ODUwMiwgNTg1MDYsIDU4NTEwLCA1ODUxNCwgCi0gICAgNTg1MTgsIDU4NTIyLCA1ODUyNiwgNTg1MzAsIDU4NTM0LCA1ODUzOCwgNTg1NDIsIDU4NTQ2LCA1ODU1MiwgNTg1NTYsIAotICAgIDU4NTYwLCA1ODU2NCwgNTg1NjgsIDU4NTcyLCA1ODU3NiwgNTg1ODAsIDU4NTg0LCA1ODU4OSwgNTg1OTYsIDU4NjAwLCAKLSAgICA1ODYwNCwgNTg2MDgsIDU4NjEyLCA1ODYxNiwgNTg2MjAsIDU4NjI0LCA1ODYyOCwgNTg2MzIsIDU4NjM2LCA1ODY0MCwgCi0gICAgNTg2NDQsIDU4NjUxLCA1ODY1NSwgNTg2NjEsIDU4NjY1LCA1ODY2OSwgNTg2NzMsIDU4Njc3LCA1ODY4MSwgNTg2ODQsIAotICAgIDU4Njg4LCA1ODY5MiwgNTg2OTYsIDU4NzAwLCA1ODcwNCwgNTg3MDgsIDU4NzEyLCA1ODcxNiwgNTg3MjAsIDU4NzI0LCAKLSAgICA1ODcyOCwgNTg3MzIsIDU4NzM2LCA1ODc0MCwgNTg3NDQsIDU4NzQ4LCA1ODc1MiwgNTg3NTYsIDU4NzYwLCA1ODc2NCwgCi0gICAgNTg3NjgsIDU4NzcyLCA1ODc3NiwgNTg3ODAsIDU4Nzg0LCA1ODc4OCwgNTg3OTIsIDU4Nzk2LCA1ODgwMCwgNTg4MDQsIAotICAgIDU4ODA4LCA1ODgxMiwgNTg4MTgsIDU4ODIyLCA1ODgyNiwgNTg4MzAsIDU4ODM0LCA1ODgzOCwgNTg4NDIsIDU4ODQ2LCAKLSAgICA1ODg1MCwgNTg4NTQsIDU4ODU4LCA1ODg2MiwgNTg4NjYsIDU4ODcwLCA1ODg3NCwgNTg4NzgsIDU4ODgyLCA1ODg4NiwgCi0gICAgNTg4OTAsIDU4ODk0LCA1ODg5OCwgNTg5MDIsIDU4OTA2LCA1ODkxMCwgNTg5MTQsIDU4OTE4LCA1ODkyMiwgNTg5MjYsIAotICAgIDU4OTM0LCA1ODkzOCwgNTg5NDIsIDU4OTQ2LCA1ODk1MCwgNTg5NTQsIDU4OTYwLCA1ODk2NCwgNTg5NjgsIDU4OTcyLCAKLSAgICA1ODk3NiwgNTg5ODAsIDU4OTg0LCA1ODk4OCwgNTg5OTIsIDU4OTk2LCA1OTAwMCwgNTkwMDQsIDU5MDA4LCA1OTAxMiwgCi0gICAgNTkwMTgsIDU5MDIyLCA1OTAyNiwgNTkwMzAsIDU5MDM0LCA1OTAzOCwgNTkwNDIsIDU5MDQ2LCA1OTA1MCwgNTkwNTQsIAotICAgIDU5MDU4LCA1OTA2MiwgNTkwNjYsIDU5MDcwLCA1OTA3NCwgNTkwNzgsIDU5MDgyLCA1OTA4NiwgNTkwOTAsIDU5MDk0LCAKLSAgICA1OTA5OCwgNTkxMDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDU5MTA2LCA1OTExNSwgNTkxMjMsIDU5MTM1LCA1OTE0NiwgNTkxNTQsIDU5MTYzLCA1OTE3MiwgCi0gICAgNTkxODIsIDU5MTk0LCA1OTIwNiwgNTkyMTgsIDAsIDAsIDAsIDAsIDU5MjI0LCA1OTIyNywgNTkyMzAsIDU5MjM1LCAKLSAgICA1OTIzOCwgNTkyNDUsIDU5MjQ5LCA1OTI1MywgNTkyNTcsIDU5MjYxLCA1OTI2NSwgNTkyNzAsIDU5Mjc1LCA1OTI3OSwgCi0gICAgNTkyODMsIDU5Mjg4LCA1OTI5MywgNTkyOTgsIDU5MzAzLCA1OTMwNiwgNTkzMDksIDU5MzE1LCA1OTMyMSwgNTkzMjYsIAotICAgIDU5MzMxLCA1OTMzOCwgNTkzNDUsIDU5MzQ5LCA1OTM1MywgNTkzNTcsIDU5MzY1LCA1OTM3MSwgNTkzNzgsIDU5MzgzLCAKLSAgICA1OTM4OCwgNTkzOTMsIDU5Mzk4LCA1OTQwMywgNTk0MDgsIDU5NDEzLCA1OTQxOCwgNTk0MjMsIDU5NDI4LCA1OTQzMywgCi0gICAgNTk0MzgsIDU5NDQzLCA1OTQ0OCwgNTk0NTQsIDU5NDU5LCA1OTQ2MywgNTk0NjksIDU5NDgwLCA1OTQ5MCwgNTk1MDUsIAotICAgIDU5NTE1LCA1OTUxOSwgNTk1MjksIDU5NTM1LCA1OTU0MSwgNTk1NDcsIDU5NTUyLCA1OTU1NSwgNTk1NjAsIDU5NTY0LCAwLCAKLSAgICA1OTU3MCwgNTk1NzQsIDU5NTc3LCA1OTU4MSwgNTk1ODQsIDU5NTg4LCA1OTU5MSwgNTk1OTUsIDU5NTk4LCA1OTYwMiwgCi0gICAgNTk2MDUsIDU5NjA4LCA1OTYxMiwgNTk2MTYsIDU5NjIwLCA1OTYyNCwgNTk2MjgsIDU5NjMyLCA1OTYzNiwgNTk2NDAsIAotICAgIDU5NjQ0LCA1OTY0NywgNTk2NTEsIDU5NjU1LCA1OTY1OSwgNTk2NjMsIDU5NjY3LCA1OTY3MSwgNTk2NzUsIDU5Njc5LCAKLSAgICA1OTY4MywgNTk2ODcsIDU5NjkxLCA1OTY5NSwgNTk2OTksIDU5NzA0LCA1OTcwOCwgNTk3MTIsIDU5NzE2LCA1OTcyMCwgCi0gICAgNTk3MjMsIDU5NzI3LCA1OTczMCwgNTk3MzQsIDU5NzM4LCA1OTc0MiwgNTk3NDYsIDU5NzQ5LCA1OTc1MywgNTk3NTYsIAotICAgIDU5NzYwLCA1OTc2NCwgNTk3NjgsIDU5NzcyLCA1OTc3NiwgNTk3ODAsIDU5Nzg0LCA1OTc4OCwgNTk3OTIsIDU5Nzk2LCAKLSAgICA1OTgwMCwgNTk4MDQsIDU5ODA3LCA1OTgxMSwgNTk4MTUsIDU5ODE5LCA1OTgyMywgNTk4MjcsIDU5ODMwLCA1OTgzNSwgCi0gICAgNTk4MzksIDU5ODQ0LCA1OTg0OCwgNTk4NTEsIDU5ODU1LCA1OTg1OSwgNTk4NjMsIDU5ODY3LCA1OTg3MiwgNTk4NzYsIAotICAgIDU5ODgwLCA1OTg4NCwgNTk4ODgsIDU5ODkyLCA1OTg5NiwgNTk5MDAsIDAsIDAsIDU5OTA1LCA1OTkxMywgNTk5MjEsIAotICAgIDU5OTI4LCA1OTkzNSwgNTk5MzksIDU5OTQ1LCA1OTk1MCwgNTk5NTUsIDU5OTU5LCA1OTk2MiwgNTk5NjYsIDU5OTY5LCAKLSAgICA1OTk3MywgNTk5NzYsIDU5OTgwLCA1OTk4MywgNTk5ODcsIDU5OTkwLCA1OTk5MywgNTk5OTcsIDYwMDAxLCA2MDAwNSwgCi0gICAgNjAwMDksIDYwMDEzLCA2MDAxNywgNjAwMjEsIDYwMDI1LCA2MDAyOSwgNjAwMzIsIDYwMDM2LCA2MDA0MCwgNjAwNDQsIAotICAgIDYwMDQ4LCA2MDA1MiwgNjAwNTYsIDYwMDYwLCA2MDA2NCwgNjAwNjgsIDYwMDcyLCA2MDA3NiwgNjAwODAsIDYwMDg0LCAKLSAgICA2MDA4OSwgNjAwOTMsIDYwMDk3LCA2MDEwMSwgNjAxMDUsIDYwMTA4LCA2MDExMiwgNjAxMTUsIDYwMTE5LCA2MDEyMywgCi0gICAgNjAxMjcsIDYwMTMxLCA2MDEzNCwgNjAxMzgsIDYwMTQxLCA2MDE0NSwgNjAxNDksIDYwMTUzLCA2MDE1NywgNjAxNjEsIAotICAgIDYwMTY1LCA2MDE2OSwgNjAxNzMsIDYwMTc3LCA2MDE4MSwgNjAxODUsIDYwMTg5LCA2MDE5MiwgNjAxOTYsIDYwMjAwLCAKLSAgICA2MDIwNCwgNjAyMDgsIDYwMjEyLCA2MDIxNSwgNjAyMjAsIDYwMjI0LCA2MDIyOSwgNjAyMzMsIDYwMjM2LCA2MDI0MCwgCi0gICAgNjAyNDQsIDYwMjQ4LCA2MDI1MiwgNjAyNTcsIDYwMjYxLCA2MDI2NSwgNjAyNjksIDYwMjczLCA2MDI3NywgNjAyODEsIAotICAgIDYwMjg1LCA2MDI5MCwgNjAyOTQsIDYwMjk4LCA2MDMwMiwgNjAzMDYsIDYwMzExLCA2MDMxOCwgNjAzMjIsIDYwMzI4LCAwLCAKLSAgICAwLCAwLCAwLCAwLCA2MDMzMywgNjAzMzgsIDYwMzQzLCA2MDM0NywgNjAzNTIsIDYwMzU3LCA2MDM2MiwgNjAzNjcsIAotICAgIDYwMzcxLCA2MDM3NiwgNjAzODEsIDYwMzg2LCA2MDM5MSwgNjAzOTYsIDYwNDAxLCA2MDQwNiwgNjA0MTEsIDYwNDE2LCAKLSAgICA2MDQyMCwgNjA0MjUsIDYwNDMwLCA2MDQzNSwgNjA0MzksIDYwNDQzLCA2MDQ0NywgNjA0NTIsIDYwNDU3LCA2MDQ2MiwgCi0gICAgNjA0NjcsIDYwNDcyLCA2MDQ3NywgNjA0ODIsIDYwNDg3LCA2MDQ5MiwgNjA0OTcsIDYwNTAxLCA2MDUwNSwgNjA1MTAsIAotICAgIDYwNTE1LCA2MDUyMCwgNjA1MjUsIDAsIDAsIDAsIDYwNTMwLCA2MDUzNCwgNjA1MzgsIDYwNTQyLCA2MDU0NiwgNjA1NTAsIAotICAgIDYwNTU0LCA2MDU1OCwgNjA1NjIsIDYwNTY2LCA2MDU3MCwgNjA1NzQsIDYwNTc4LCA2MDU4MiwgNjA1ODYsIDYwNTkwLCAKLSAgICA2MDU5NCwgNjA1OTgsIDYwNjAyLCA2MDYwNiwgNjA2MTAsIDYwNjE0LCA2MDYxOCwgNjA2MjIsIDYwNjI2LCA2MDYzMCwgCi0gICAgNjA2MzQsIDYwNjM4LCA2MDY0MiwgNjA2NDYsIDYwNjUwLCA2MDY1MywgNjA2NTcsIDYwNjYwLCA2MDY2NCwgNjA2NjgsIAotICAgIDYwNjcxLCA2MDY3NSwgNjA2NzksIDYwNjgyLCA2MDY4NiwgNjA2OTAsIDYwNjk0LCA2MDY5OCwgNjA3MDEsIDYwNzA1LCAKLSAgICA2MDcwOSwgNjA3MTMsIDYwNzE3LCA2MDcyMSwgNjA3MjUsIDYwNzI4LCA2MDczMSwgNjA3MzUsIDYwNzM5LCA2MDc0MywgCi0gICAgNjA3NDcsIDYwNzUxLCA2MDc1NSwgNjA3NTksIDYwNzYzLCA2MDc2NywgNjA3NzEsIDYwNzc1LCA2MDc3OSwgNjA3ODMsIAotICAgIDYwNzg3LCA2MDc5MSwgNjA3OTUsIDYwNzk5LCA2MDgwMywgNjA4MDcsIDYwODExLCA2MDgxNSwgNjA4MTksIDYwODIzLCAKLSAgICA2MDgyNywgNjA4MzEsIDYwODM1LCA2MDgzOSwgNjA4NDMsIDYwODQ3LCA2MDg1MSwgNjA4NTUsIDYwODU5LCA2MDg2MywgCi0gICAgNjA4NjcsIDYwODcxLCA2MDg3NSwgNjA4NzksIDYwODgzLCA2MDg4NywgNjA4OTEsIDYwODk1LCAwLCA2MDg5OSwgNjA5MDUsIAotICAgIDYwOTExLCA2MDkxNiwgNjA5MjEsIDYwOTI2LCA2MDkzMiwgNjA5MzgsIDYwOTQ0LCA2MDk1MCwgNjA5NTYsIDYwOTYyLCAKLSAgICA2MDk2OCwgNjA5NzQsIDYwOTgwLCA2MDk4NiwgNjA5OTIsIDYwOTk3LCA2MTAwMiwgNjEwMDcsIDYxMDEyLCA2MTAxNywgCi0gICAgNjEwMjIsIDYxMDI3LCA2MTAzMiwgNjEwMzcsIDYxMDQyLCA2MTA0NywgNjEwNTIsIDYxMDU3LCA2MTA2MiwgNjEwNjcsIAotICAgIDYxMDcyLCA2MTA3NywgNjEwODIsIDYxMDg3LCA2MTA5MiwgNjEwOTgsIDYxMTA0LCA2MTExMCwgNjExMTYsIDYxMTIxLCAKLSAgICA2MTEyNiwgMCwgMCwgMCwgMCwgMCwgNjExMzEsIDYxMTM2LCA2MTE0MSwgNjExNDYsIDYxMTUxLCA2MTE1NiwgNjExNjEsIAotICAgIDYxMTY2LCA2MTE3MSwgNjExNzYsIDYxMTgxLCA2MTE4NiwgNjExOTEsIDYxMTk2LCA2MTIwMSwgNjEyMDYsIDYxMjExLCAKLSAgICA2MTIxNiwgNjEyMjEsIDYxMjI2LCA2MTIzMSwgNjEyMzYsIDYxMjQxLCA2MTI0NiwgNjEyNTEsIDYxMjU2LCA2MTI2MSwgCi0gICAgNjEyNjYsIDYxMjcxLCA2MTI3NiwgNjEyODEsIDYxMjg2LCA2MTI5MSwgNjEyOTYsIDYxMzAxLCA2MTMwNiwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjEzMTEsIDYxMzE2LCA2MTMyMSwgNjEzMjYsIDYxMzMwLCA2MTMzNSwgCi0gICAgNjEzMzksIDYxMzQ0LCA2MTM0OSwgNjEzNTQsIDYxMzU5LCA2MTM2NCwgNjEzNjgsIDYxMzczLCA2MTM3OCwgNjEzODMsIAotICAgIDYxMzg4LCA2MTM5MiwgNjEzOTYsIDYxNDAwLCA2MTQwNCwgNjE0MDgsIDYxNDEyLCA2MTQxNiwgNjE0MjAsIDYxNDI0LCAKLSAgICA2MTQyOCwgNjE0MzIsIDYxNDM2LCA2MTQ0MCwgNjE0NDQsIDYxNDQ5LCA2MTQ1NCwgNjE0NTksIDYxNDY0LCA2MTQ2OSwgCi0gICAgNjE0NzQsIDYxNDc5LCA2MTQ4NCwgNjE0ODksIDYxNDk0LCA2MTQ5OSwgNjE1MDQsIDYxNTA5LCA2MTUxNCwgNjE1MTksIAotICAgIDYxNTI1LCAwLCA2MTUzMiwgNjE1MzUsIDYxNTM4LCA2MTU0MSwgNjE1NDQsIDYxNTQ3LCA2MTU1MCwgNjE1NTMsIDYxNTU2LCAKLSAgICA2MTU1OSwgNjE1NjMsIDYxNTY3LCA2MTU3MSwgNjE1NzUsIDYxNTc5LCA2MTU4MywgNjE1ODcsIDYxNTkxLCA2MTU5NSwgCi0gICAgNjE1OTksIDYxNjAzLCA2MTYwNywgNjE2MTEsIDYxNjE1LCA2MTYxOSwgNjE2MjMsIDYxNjI3LCA2MTYzMSwgNjE2MzUsIAotICAgIDYxNjM5LCA2MTY0MywgNjE2NDcsIDYxNjUxLCA2MTY1NSwgNjE2NTksIDYxNjYzLCA2MTY2NywgNjE2NzEsIDYxNjc1LCAKLSAgICA2MTY3OSwgNjE2ODMsIDYxNjkyLCA2MTcwMSwgNjE3MTAsIDYxNzE5LCA2MTcyOCwgNjE3MzcsIDYxNzQ2LCA2MTc1NSwgCi0gICAgNjE3NTgsIDYxNzYzLCA2MTc2OCwgNjE3NzMsIDYxNzc4LCA2MTc4MywgNjE3ODgsIDYxNzkzLCA2MTc5OCwgNjE4MDMsIAotICAgIDYxODA3LCA2MTgxMiwgNjE4MTcsIDYxODIyLCA2MTgyNywgNjE4MzIsIDYxODM2LCA2MTg0MCwgNjE4NDQsIDYxODQ4LCAKLSAgICA2MTg1MiwgNjE4NTYsIDYxODYwLCA2MTg2NCwgNjE4NjgsIDYxODcyLCA2MTg3NiwgNjE4ODAsIDYxODg0LCA2MTg4OCwgCi0gICAgNjE4OTMsIDYxODk4LCA2MTkwMywgNjE5MDgsIDYxOTEzLCA2MTkxOCwgNjE5MjMsIDYxOTI4LCA2MTkzMywgNjE5MzgsIAotICAgIDYxOTQzLCA2MTk0OCwgNjE5NTMsIDYxOTU4LCA2MTk2NCwgNjE5NzAsIDYxOTc1LCA2MTk4MCwgNjE5ODMsIDYxOTg2LCAKLSAgICA2MTk4OSwgNjE5OTIsIDYxOTk1LCA2MTk5OCwgNjIwMDEsIDYyMDA0LCA2MjAwNywgNjIwMTEsIDYyMDE1LCA2MjAxOSwgCi0gICAgNjIwMjMsIDYyMDI3LCA2MjAzMSwgNjIwMzUsIDYyMDM5LCA2MjA0MywgNjIwNDcsIDYyMDUxLCA2MjA1NSwgNjIwNTksIAotICAgIDYyMDYzLCA2MjA2NywgNjIwNzEsIDYyMDc1LCA2MjA3OSwgNjIwODMsIDYyMDg3LCA2MjA5MSwgNjIwOTUsIDYyMDk5LCAKLSAgICA2MjEwMywgNjIxMDcsIDYyMTExLCA2MjExNSwgNjIxMTksIDYyMTIzLCA2MjEyNywgNjIxMzEsIDYyMTM1LCA2MjEzOSwgCi0gICAgNjIxNDMsIDYyMTQ3LCA2MjE1MSwgNjIxNTUsIDYyMTU5LCA2MjE2MywgNjIxNjcsIDYyMTcyLCA2MjE3NywgNjIxODIsIAotICAgIDYyMTg3LCA2MjE5MSwgNjIxOTYsIDYyMjAxLCA2MjIwNiwgNjIyMTEsIDYyMjE2LCA2MjIyMSwgNjIyMjYsIDYyMjMxLCAKLSAgICA2MjIzNiwgNjIyNDAsIDYyMjQ3LCA2MjI1NCwgNjIyNjEsIDYyMjY4LCA2MjI3NSwgNjIyODIsIDYyMjg5LCA2MjI5NiwgCi0gICAgNjIzMDMsIDYyMzEwLCA2MjMxNywgNjIzMjQsIDYyMzI3LCA2MjMzMCwgNjIzMzMsIDYyMzM4LCA2MjM0MSwgNjIzNDQsIAotICAgIDYyMzQ3LCA2MjM1MCwgNjIzNTMsIDYyMzU2LCA2MjM2MCwgNjIzNjQsIDYyMzY4LCA2MjM3MiwgNjIzNzUsIDYyMzc5LCAKLSAgICA2MjM4MywgNjIzODcsIDYyMzkxLCA2MjM5NSwgNjIzOTksIDYyNDAzLCA2MjQwNywgNjI0MTAsIDYyNDEzLCA2MjQxNywgCi0gICAgNjI0MjEsIDYyNDI1LCA2MjQyOSwgNjI0MzIsIDYyNDM2LCA2MjQ0MCwgNjI0NDQsIDYyNDQ4LCA2MjQ1MSwgNjI0NTUsIAotICAgIDYyNDU5LCA2MjQ2MywgNjI0NjcsIDYyNDcwLCA2MjQ3NCwgNjI0NzgsIDYyNDgxLCA2MjQ4NSwgNjI0ODksIDYyNDkzLCAKLSAgICA2MjQ5NywgNjI1MDEsIDYyNTA1LCA2MjUwOSwgMCwgNjI1MTMsIDYyNTE2LCA2MjUxOSwgNjI1MjIsIDYyNTI1LCA2MjUyOCwgCi0gICAgNjI1MzEsIDYyNTM0LCA2MjUzNywgNjI1NDAsIDYyNTQzLCA2MjU0NiwgNjI1NDksIDYyNTUyLCA2MjU1NSwgNjI1NTgsIAotICAgIDYyNTYxLCA2MjU2NCwgNjI1NjcsIDYyNTcwLCA2MjU3MywgNjI1NzYsIDYyNTc5LCA2MjU4MiwgNjI1ODUsIDYyNTg4LCAKLSAgICA2MjU5MSwgNjI1OTQsIDYyNTk3LCA2MjYwMCwgNjI2MDMsIDYyNjA2LCA2MjYwOSwgNjI2MTIsIDYyNjE1LCA2MjYxOCwgCi0gICAgNjI2MjEsIDYyNjI0LCA2MjYyNywgNjI2MzAsIDYyNjMzLCA2MjYzNiwgNjI2MzksIDYyNjQyLCA2MjY0NSwgNjI2NDgsIAotICAgIDYyNjUxLCA2MjY1NCwgNjI2NTcsIDYyNjYwLCA2MjY2MywgNjI2NjYsIDYyNjY5LCA2MjY3MiwgNjI2NzUsIDYyNjc4LCAKLSAgICA2MjY4MSwgNjI2ODQsIDYyNjg3LCA2MjY5MCwgNjI2OTMsIDYyNjk2LCA2MjY5OSwgNjI3MDIsIDYyNzA1LCA2MjcwOCwgCi0gICAgNjI3MTEsIDYyNzE0LCA2MjcxNywgNjI3MjAsIDYyNzIzLCA2MjcyNiwgNjI3MjksIDYyNzMyLCA2MjczNSwgNjI3MzgsIAotICAgIDYyNzQxLCA2Mjc0NCwgNjI3NDcsIDYyNzUwLCA2Mjc1MywgNjI3NTYsIDYyNzU5LCA2Mjc2MiwgNjI3NjUsIDYyNzY4LCAKLSAgICA2Mjc3MSwgNjI3NzQsIDYyNzc3LCA2Mjc4NiwgNjI3OTQsIDYyODAyLCA2MjgxMCwgNjI4MTgsIDYyODI2LCA2MjgzNCwgCi0gICAgNjI4NDIsIDYyODUwLCA2Mjg1OCwgNjI4NjcsIDYyODc2LCA2Mjg4NSwgNjI4OTQsIDYyOTAzLCA2MjkxMiwgNjI5MjEsIAotICAgIDYyOTMwLCA2MjkzOSwgNjI5NDgsIDYyOTU3LCA2Mjk2NiwgNjI5NzUsIDYyOTg0LCA2Mjk5MywgNjI5OTYsIDYyOTk5LCAKLSAgICA2MzAwMiwgNjMwMDQsIDYzMDA3LCA2MzAxMCwgNjMwMTMsIDYzMDE4LCA2MzAyMywgNjMwMjYsIDYzMDMzLCA2MzA0MCwgCi0gICAgNjMwNDcsIDYzMDU0LCA2MzA1NywgNjMwNjIsIDYzMDY0LCA2MzA2OCwgNjMwNzAsIDYzMDcyLCA2MzA3NSwgNjMwNzgsIAotICAgIDYzMDgxLCA2MzA4NCwgNjMwODcsIDYzMDkwLCA2MzA5MywgNjMwOTgsIDYzMTAzLCA2MzEwNiwgNjMxMDksIDYzMTEyLCAKLSAgICA2MzExNSwgNjMxMTgsIDYzMTIxLCA2MzEyNCwgNjMxMjgsIDYzMTMxLCA2MzEzNCwgNjMxMzcsIDYzMTQwLCA2MzE0MywgCi0gICAgNjMxNDcsIDYzMTUwLCA2MzE1MywgNjMxNTYsIDYzMTYxLCA2MzE2NiwgNjMxNzEsIDYzMTc2LCA2MzE4MSwgNjMxODYsIAotICAgIDYzMTkxLCA2MzE5NiwgNjMyMDIsIDYzMjEwLCA2MzIxMiwgNjMyMTUsIDYzMjE4LCA2MzIyMSwgNjMyMjQsIDYzMjMwLCAKLSAgICA2MzIzOCwgNjMyNDEsIDYzMjQ0LCA2MzI0OSwgNjMyNTIsIDYzMjU1LCA2MzI1OCwgNjMyNjMsIDYzMjY2LCA2MzI2OSwgCi0gICAgNjMyNzQsIDYzMjc3LCA2MzI4MCwgNjMyODUsIDYzMjg4LCA2MzI5MSwgNjMyOTYsIDYzMzAxLCA2MzMwNiwgNjMzMDksIAotICAgIDYzMzEyLCA2MzMxNSwgNjMzMTgsIDYzMzI0LCA2MzMyNywgNjMzMzAsIDYzMzMzLCA2MzMzNSwgNjMzMzgsIDYzMzQxLCAKLSAgICA2MzM0NCwgNjMzNDksIDYzMzUyLCA2MzM1NSwgNjMzNTgsIDYzMzYxLCA2MzM2NCwgNjMzNjksIDYzMzcyLCA2MzM3NSwgCi0gICAgNjMzNzgsIDYzMzgxLCA2MzM4NCwgNjMzODcsIDYzMzkwLCA2MzM5MywgNjMzOTYsIDYzNDAxLCA2MzQwNSwgNjM0MTMsIAotICAgIDYzNDIxLCA2MzQyOSwgNjM0MzcsIDYzNDQ1LCA2MzQ1MywgNjM0NjEsIDYzNDY5LCA2MzQ3NywgNjM0ODYsIDYzNDk1LCAKLSAgICA2MzUwNCwgNjM1MTMsIDYzNTIyLCA2MzUzMSwgNjM1NDAsIDYzNTQ5LCA2MzU1OCwgNjM1NjcsIDYzNTc2LCA2MzU4NSwgCi0gICAgNjM1OTQsIDYzNjAzLCA2MzYxMiwgNjM2MjEsIDYzNjMwLCA2MzYzOSwgNjM2NDgsIDYzNjU3LCA2MzY2NiwgNjM2NzUsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU3NjgxLCA1NzY4NSwgNTc2ODksIDU3Njk0LCA1NzY5OSwgNTc3MDQsIAorICAgIDU3NzA4LCA1NzcxMiwgNTc3MTYsIDU3NzIxLCA1NzcyNiwgNTc3MzAsIDU3NzM0LCA1NzczOCwgNTc3NDIsIDU3NzQ3LCAKKyAgICA1Nzc1MiwgNTc3NTcsIDU3NzYyLCA1Nzc2NiwgNTc3NzAsIDU3Nzc1LCA1Nzc4MCwgNTc3ODUsIDU3NzkwLCA1Nzc5NCwgMCwgCisgICAgNTc3OTgsIDU3ODAyLCA1NzgwNiwgNTc4MTAsIDU3ODE0LCA1NzgxOCwgNTc4MjIsIDU3ODI3LCA1NzgzMiwgNTc4MzYsIAorICAgIDU3ODQxLCA1Nzg0NiwgNTc4NTUsIDU3ODU5LCA1Nzg2MywgNTc4NjcsIDU3ODc0LCA1Nzg3OCwgNTc4ODMsIDU3ODg4LCAKKyAgICA1Nzg5MiwgNTc4OTYsIDU3OTAyLCA1NzkwNywgNTc5MTIsIDU3OTE3LCA1NzkyMiwgNTc5MjYsIDU3OTMwLCA1NzkzNCwgCisgICAgNTc5MzgsIDU3OTQyLCA1Nzk0NywgNTc5NTIsIDU3OTU2LCA1Nzk2MCwgNTc5NjUsIDU3OTcwLCA1Nzk3NSwgNTc5NzksIAorICAgIDU3OTgzLCA1Nzk4OCwgNTc5OTMsIDU3OTk5LCA1ODAwNSwgNTgwMDksIDU4MDE1LCA1ODAyMSwgNTgwMjUsIDU4MDMxLCAKKyAgICA1ODAzNywgNTgwNDIsIDU4MDQ3LCA1ODA1MSwgNTgwNTcsIDU4MDYxLCA1ODA2NSwgNTgwNzEsIDU4MDc3LCA1ODA4MiwgCisgICAgNTgwODcsIDU4MDkxLCA1ODA5NSwgNTgxMDMsIDU4MTA5LCA1ODExNSwgNTgxMjEsIDU4MTI2LCA1ODEzMSwgNTgxMzYsIAorICAgIDU4MTQyLCA1ODE0NiwgNTgxNTIsIDU4MTU2LCA1ODE2MCwgNTgxNjYsIDU4MTcyLCA1ODE3OCwgNTgxODQsIDU4MTkwLCAKKyAgICA1ODE5NiwgNTgyMDIsIDU4MjA4LCA1ODIxNCwgNTgyMjAsIDU4MjI2LCA1ODIzMiwgNTgyMzYsIDU4MjQyLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1ODI0OCwgNTgyNTEsIDU4MjU1LCA1ODI1OSwgNTgyNjMsIDU4MjY3LCAKKyAgICA1ODI3MCwgNTgyNzMsIDU4Mjc3LCA1ODI4MSwgNTgyODUsIDU4Mjg5LCA1ODI5MiwgNTgyOTcsIDU4MzAxLCA1ODMwNSwgCisgICAgNTgzMDksIDU4MzE0LCA1ODMxOCwgNTgzMjIsIDU4MzI2LCA1ODMzMCwgNTgzMzYsIDU4MzQyLCA1ODM0NiwgNTgzNTAsIAorICAgIDU4MzU0LCA1ODM1OCwgNTgzNjIsIDU4MzY2LCA1ODM3MCwgNTgzNzQsIDU4Mzc4LCA1ODM4MiwgNTgzODYsIDU4MzkyLCAKKyAgICA1ODM5NiwgNTg0MDAsIDU4NDA0LCA1ODQwOCwgNTg0MTIsIDU4NDE2LCA1ODQyMCwgNTg0MjQsIDU4NDI4LCA1ODQzMiwgCisgICAgNTg0MzYsIDU4NDQwLCA1ODQ0NCwgNTg0NDgsIDU4NDUyLCA1ODQ1NiwgNTg0NjIsIDU4NDY4LCA1ODQ3MywgNTg0NzgsIAorICAgIDU4NDgyLCA1ODQ4NiwgNTg0OTAsIDU4NDk0LCA1ODQ5OCwgNTg1MDIsIDU4NTA2LCA1ODUxMCwgNTg1MTQsIDU4NTE4LCAKKyAgICA1ODUyMiwgNTg1MjYsIDU4NTMwLCA1ODUzNCwgNTg1MzgsIDU4NTQyLCA1ODU0NiwgNTg1NTAsIDU4NTU0LCA1ODU1OCwgCisgICAgNTg1NjIsIDU4NTY2LCA1ODU3MCwgNTg1NzQsIDU4NTgwLCA1ODU4NCwgNTg1ODgsIDU4NTkyLCA1ODU5NiwgNTg2MDAsIAorICAgIDU4NjA0LCA1ODYwOCwgNTg2MTIsIDU4NjE3LCA1ODYyNCwgNTg2MjgsIDU4NjMyLCA1ODYzNiwgNTg2NDAsIDU4NjQ0LCAKKyAgICA1ODY0OCwgNTg2NTIsIDU4NjU2LCA1ODY2MCwgNTg2NjQsIDU4NjY4LCA1ODY3MiwgNTg2NzksIDU4NjgzLCA1ODY4OSwgCisgICAgNTg2OTMsIDU4Njk3LCA1ODcwMSwgNTg3MDUsIDU4NzA5LCA1ODcxMiwgNTg3MTYsIDU4NzIwLCA1ODcyNCwgNTg3MjgsIAorICAgIDU4NzMyLCA1ODczNiwgNTg3NDAsIDU4NzQ0LCA1ODc0OCwgNTg3NTIsIDU4NzU2LCA1ODc2MCwgNTg3NjQsIDU4NzY4LCAKKyAgICA1ODc3MiwgNTg3NzYsIDU4NzgwLCA1ODc4NCwgNTg3ODgsIDU4NzkyLCA1ODc5NiwgNTg4MDAsIDU4ODA0LCA1ODgwOCwgCisgICAgNTg4MTIsIDU4ODE2LCA1ODgyMCwgNTg4MjQsIDU4ODI4LCA1ODgzMiwgNTg4MzYsIDU4ODQwLCA1ODg0NiwgNTg4NTAsIAorICAgIDU4ODU0LCA1ODg1OCwgNTg4NjIsIDU4ODY2LCA1ODg3MCwgNTg4NzQsIDU4ODc4LCA1ODg4MiwgNTg4ODYsIDU4ODkwLCAKKyAgICA1ODg5NCwgNTg4OTgsIDU4OTAyLCA1ODkwNiwgNTg5MTAsIDU4OTE0LCA1ODkxOCwgNTg5MjIsIDU4OTI2LCA1ODkzMCwgCisgICAgNTg5MzQsIDU4OTM4LCA1ODk0MiwgNTg5NDYsIDU4OTUwLCA1ODk1NCwgNTg5NjIsIDU4OTY2LCA1ODk3MCwgNTg5NzQsIAorICAgIDU4OTc4LCA1ODk4MiwgNTg5ODgsIDU4OTkyLCA1ODk5NiwgNTkwMDAsIDU5MDA0LCA1OTAwOCwgNTkwMTIsIDU5MDE2LCAKKyAgICA1OTAyMCwgNTkwMjQsIDU5MDI4LCA1OTAzMiwgNTkwMzYsIDU5MDQwLCA1OTA0NiwgNTkwNTAsIDU5MDU0LCA1OTA1OCwgCisgICAgNTkwNjIsIDU5MDY2LCA1OTA3MCwgNTkwNzQsIDU5MDc4LCA1OTA4MiwgNTkwODYsIDU5MDkwLCA1OTA5NCwgNTkwOTgsIAorICAgIDU5MTAyLCA1OTEwNiwgNTkxMTAsIDU5MTE0LCA1OTExOCwgNTkxMjIsIDU5MTI2LCA1OTEzMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTkxMzQsIDU5MTQzLCAKKyAgICA1OTE1MSwgNTkxNjMsIDU5MTc0LCA1OTE4MiwgNTkxOTEsIDU5MjAwLCA1OTIxMCwgNTkyMjIsIDU5MjM0LCA1OTI0NiwgMCwgCisgICAgMCwgMCwgMCwgNTkyNTIsIDU5MjU1LCA1OTI1OCwgNTkyNjMsIDU5MjY2LCA1OTI3MywgNTkyNzcsIDU5MjgxLCA1OTI4NSwgCisgICAgNTkyODksIDU5MjkzLCA1OTI5OCwgNTkzMDMsIDU5MzA3LCA1OTMxMSwgNTkzMTYsIDU5MzIxLCA1OTMyNiwgNTkzMzEsIAorICAgIDU5MzM0LCA1OTMzNywgNTkzNDMsIDU5MzQ5LCA1OTM1NCwgNTkzNTksIDU5MzY2LCA1OTM3MywgNTkzNzcsIDU5MzgxLCAKKyAgICA1OTM4NSwgNTkzOTMsIDU5Mzk5LCA1OTQwNiwgNTk0MTEsIDU5NDE2LCA1OTQyMSwgNTk0MjYsIDU5NDMxLCA1OTQzNiwgCisgICAgNTk0NDEsIDU5NDQ2LCA1OTQ1MSwgNTk0NTYsIDU5NDYxLCA1OTQ2NiwgNTk0NzEsIDU5NDc2LCA1OTQ4MiwgNTk0ODcsIAorICAgIDU5NDkxLCA1OTQ5NywgNTk1MDgsIDU5NTE4LCA1OTUzMywgNTk1NDMsIDU5NTQ3LCA1OTU1NywgNTk1NjMsIDU5NTY5LCAKKyAgICA1OTU3NSwgNTk1ODAsIDU5NTgzLCA1OTU4OCwgNTk1OTIsIDAsIDU5NTk4LCA1OTYwMiwgNTk2MDUsIDU5NjA5LCA1OTYxMiwgCisgICAgNTk2MTYsIDU5NjE5LCA1OTYyMywgNTk2MjYsIDU5NjMwLCA1OTYzMywgNTk2MzYsIDU5NjQwLCA1OTY0NCwgNTk2NDgsIAorICAgIDU5NjUyLCA1OTY1NiwgNTk2NjAsIDU5NjY0LCA1OTY2OCwgNTk2NzIsIDU5Njc1LCA1OTY3OSwgNTk2ODMsIDU5Njg3LCAKKyAgICA1OTY5MSwgNTk2OTUsIDU5Njk5LCA1OTcwMywgNTk3MDcsIDU5NzExLCA1OTcxNSwgNTk3MTksIDU5NzIzLCA1OTcyNywgCisgICAgNTk3MzIsIDU5NzM2LCA1OTc0MCwgNTk3NDQsIDU5NzQ4LCA1OTc1MSwgNTk3NTUsIDU5NzU4LCA1OTc2MiwgNTk3NjYsIAorICAgIDU5NzcwLCA1OTc3NCwgNTk3NzcsIDU5NzgxLCA1OTc4NCwgNTk3ODgsIDU5NzkyLCA1OTc5NiwgNTk4MDAsIDU5ODA0LCAKKyAgICA1OTgwOCwgNTk4MTIsIDU5ODE2LCA1OTgyMCwgNTk4MjQsIDU5ODI4LCA1OTgzMiwgNTk4MzUsIDU5ODM5LCA1OTg0MywgCisgICAgNTk4NDcsIDU5ODUxLCA1OTg1NSwgNTk4NTgsIDU5ODYzLCA1OTg2NywgNTk4NzIsIDU5ODc2LCA1OTg3OSwgNTk4ODMsIAorICAgIDU5ODg3LCA1OTg5MSwgNTk4OTUsIDU5OTAwLCA1OTkwNCwgNTk5MDgsIDU5OTEyLCA1OTkxNiwgNTk5MjAsIDU5OTI0LCAKKyAgICA1OTkyOCwgMCwgMCwgNTk5MzMsIDU5OTQxLCA1OTk0OSwgNTk5NTYsIDU5OTYzLCA1OTk2NywgNTk5NzMsIDU5OTc4LCAKKyAgICA1OTk4MywgNTk5ODcsIDU5OTkwLCA1OTk5NCwgNTk5OTcsIDYwMDAxLCA2MDAwNCwgNjAwMDgsIDYwMDExLCA2MDAxNSwgCisgICAgNjAwMTgsIDYwMDIxLCA2MDAyNSwgNjAwMjksIDYwMDMzLCA2MDAzNywgNjAwNDEsIDYwMDQ1LCA2MDA0OSwgNjAwNTMsIAorICAgIDYwMDU3LCA2MDA2MCwgNjAwNjQsIDYwMDY4LCA2MDA3MiwgNjAwNzYsIDYwMDgwLCA2MDA4NCwgNjAwODgsIDYwMDkyLCAKKyAgICA2MDA5NiwgNjAxMDAsIDYwMTA0LCA2MDEwOCwgNjAxMTIsIDYwMTE3LCA2MDEyMSwgNjAxMjUsIDYwMTI5LCA2MDEzMywgCisgICAgNjAxMzYsIDYwMTQwLCA2MDE0MywgNjAxNDcsIDYwMTUxLCA2MDE1NSwgNjAxNTksIDYwMTYyLCA2MDE2NiwgNjAxNjksIAorICAgIDYwMTczLCA2MDE3NywgNjAxODEsIDYwMTg1LCA2MDE4OSwgNjAxOTMsIDYwMTk3LCA2MDIwMSwgNjAyMDUsIDYwMjA5LCAKKyAgICA2MDIxMywgNjAyMTcsIDYwMjIwLCA2MDIyNCwgNjAyMjgsIDYwMjMyLCA2MDIzNiwgNjAyNDAsIDYwMjQzLCA2MDI0OCwgCisgICAgNjAyNTIsIDYwMjU3LCA2MDI2MSwgNjAyNjQsIDYwMjY4LCA2MDI3MiwgNjAyNzYsIDYwMjgwLCA2MDI4NSwgNjAyODksIAorICAgIDYwMjkzLCA2MDI5NywgNjAzMDEsIDYwMzA1LCA2MDMwOSwgNjAzMTMsIDYwMzE4LCA2MDMyMiwgNjAzMjYsIDYwMzMwLCAKKyAgICA2MDMzNCwgNjAzMzksIDYwMzQ2LCA2MDM1MCwgNjAzNTYsIDAsIDAsIDAsIDAsIDAsIDYwMzYxLCA2MDM2NiwgNjAzNzEsIAorICAgIDYwMzc1LCA2MDM4MCwgNjAzODUsIDYwMzkwLCA2MDM5NSwgNjAzOTksIDYwNDA0LCA2MDQwOSwgNjA0MTQsIDYwNDE5LCAKKyAgICA2MDQyNCwgNjA0MjksIDYwNDM0LCA2MDQzOSwgNjA0NDQsIDYwNDQ4LCA2MDQ1MywgNjA0NTgsIDYwNDYzLCA2MDQ2NywgCisgICAgNjA0NzEsIDYwNDc1LCA2MDQ4MCwgNjA0ODUsIDYwNDkwLCA2MDQ5NSwgNjA1MDAsIDYwNTA1LCA2MDUxMCwgNjA1MTUsIAorICAgIDYwNTIwLCA2MDUyNSwgNjA1MjksIDYwNTMzLCA2MDUzOCwgNjA1NDMsIDYwNTQ4LCA2MDU1MywgMCwgMCwgMCwgNjA1NTgsIAorICAgIDYwNTYyLCA2MDU2NiwgNjA1NzAsIDYwNTc0LCA2MDU3OCwgNjA1ODIsIDYwNTg2LCA2MDU5MCwgNjA1OTQsIDYwNTk4LCAKKyAgICA2MDYwMiwgNjA2MDYsIDYwNjEwLCA2MDYxNCwgNjA2MTgsIDYwNjIyLCA2MDYyNiwgNjA2MzAsIDYwNjM0LCA2MDYzOCwgCisgICAgNjA2NDIsIDYwNjQ2LCA2MDY1MCwgNjA2NTQsIDYwNjU4LCA2MDY2MiwgNjA2NjYsIDYwNjcwLCA2MDY3NCwgNjA2NzgsIAorICAgIDYwNjgxLCA2MDY4NSwgNjA2ODgsIDYwNjkyLCA2MDY5NiwgNjA2OTksIDYwNzAzLCA2MDcwNywgNjA3MTAsIDYwNzE0LCAKKyAgICA2MDcxOCwgNjA3MjIsIDYwNzI2LCA2MDcyOSwgNjA3MzMsIDYwNzM3LCA2MDc0MSwgNjA3NDUsIDYwNzQ5LCA2MDc1MywgCisgICAgNjA3NTYsIDYwNzU5LCA2MDc2MywgNjA3NjcsIDYwNzcxLCA2MDc3NSwgNjA3NzksIDYwNzgzLCA2MDc4NywgNjA3OTEsIAorICAgIDYwNzk1LCA2MDc5OSwgNjA4MDMsIDYwODA3LCA2MDgxMSwgNjA4MTUsIDYwODE5LCA2MDgyMywgNjA4MjcsIDYwODMxLCAKKyAgICA2MDgzNSwgNjA4MzksIDYwODQzLCA2MDg0NywgNjA4NTEsIDYwODU1LCA2MDg1OSwgNjA4NjMsIDYwODY3LCA2MDg3MSwgCisgICAgNjA4NzUsIDYwODc5LCA2MDg4MywgNjA4ODcsIDYwODkxLCA2MDg5NSwgNjA4OTksIDYwOTAzLCA2MDkwNywgNjA5MTEsIAorICAgIDYwOTE1LCA2MDkxOSwgNjA5MjMsIDAsIDYwOTI3LCA2MDkzMywgNjA5MzksIDYwOTQ0LCA2MDk0OSwgNjA5NTQsIDYwOTYwLCAKKyAgICA2MDk2NiwgNjA5NzIsIDYwOTc4LCA2MDk4NCwgNjA5OTAsIDYwOTk2LCA2MTAwMiwgNjEwMDgsIDYxMDE0LCA2MTAyMCwgCisgICAgNjEwMjUsIDYxMDMwLCA2MTAzNSwgNjEwNDAsIDYxMDQ1LCA2MTA1MCwgNjEwNTUsIDYxMDYwLCA2MTA2NSwgNjEwNzAsIAorICAgIDYxMDc1LCA2MTA4MCwgNjEwODUsIDYxMDkwLCA2MTA5NSwgNjExMDAsIDYxMTA1LCA2MTExMCwgNjExMTUsIDYxMTIwLCAKKyAgICA2MTEyNiwgNjExMzIsIDYxMTM4LCA2MTE0NCwgNjExNDksIDYxMTU0LCAwLCAwLCAwLCAwLCAwLCA2MTE1OSwgNjExNjQsIAorICAgIDYxMTY5LCA2MTE3NCwgNjExNzksIDYxMTg0LCA2MTE4OSwgNjExOTQsIDYxMTk5LCA2MTIwNCwgNjEyMDksIDYxMjE0LCAKKyAgICA2MTIxOSwgNjEyMjQsIDYxMjI5LCA2MTIzNCwgNjEyMzksIDYxMjQ0LCA2MTI0OSwgNjEyNTQsIDYxMjU5LCA2MTI2NCwgCisgICAgNjEyNjksIDYxMjc0LCA2MTI3OSwgNjEyODQsIDYxMjg5LCA2MTI5NCwgNjEyOTksIDYxMzA0LCA2MTMwOSwgNjEzMTQsIAorICAgIDYxMzE5LCA2MTMyNCwgNjEzMjksIDYxMzM0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2MTMzOSwgCisgICAgNjEzNDQsIDYxMzQ5LCA2MTM1NCwgNjEzNTgsIDYxMzYzLCA2MTM2NywgNjEzNzIsIDYxMzc3LCA2MTM4MiwgNjEzODcsIAorICAgIDYxMzkyLCA2MTM5NiwgNjE0MDEsIDYxNDA2LCA2MTQxMSwgNjE0MTYsIDYxNDIwLCA2MTQyNCwgNjE0MjgsIDYxNDMyLCAKKyAgICA2MTQzNiwgNjE0NDAsIDYxNDQ0LCA2MTQ0OCwgNjE0NTIsIDYxNDU2LCA2MTQ2MCwgNjE0NjQsIDYxNDY4LCA2MTQ3MiwgCisgICAgNjE0NzcsIDYxNDgyLCA2MTQ4NywgNjE0OTIsIDYxNDk3LCA2MTUwMiwgNjE1MDcsIDYxNTEyLCA2MTUxNywgNjE1MjIsIAorICAgIDYxNTI3LCA2MTUzMiwgNjE1MzcsIDYxNTQyLCA2MTU0NywgNjE1NTMsIDAsIDYxNTYwLCA2MTU2MywgNjE1NjYsIDYxNTY5LCAKKyAgICA2MTU3MiwgNjE1NzUsIDYxNTc4LCA2MTU4MSwgNjE1ODQsIDYxNTg3LCA2MTU5MSwgNjE1OTUsIDYxNTk5LCA2MTYwMywgCisgICAgNjE2MDcsIDYxNjExLCA2MTYxNSwgNjE2MTksIDYxNjIzLCA2MTYyNywgNjE2MzEsIDYxNjM1LCA2MTYzOSwgNjE2NDMsIAorICAgIDYxNjQ3LCA2MTY1MSwgNjE2NTUsIDYxNjU5LCA2MTY2MywgNjE2NjcsIDYxNjcxLCA2MTY3NSwgNjE2NzksIDYxNjgzLCAKKyAgICA2MTY4NywgNjE2OTEsIDYxNjk1LCA2MTY5OSwgNjE3MDMsIDYxNzA3LCA2MTcxMSwgNjE3MjAsIDYxNzI5LCA2MTczOCwgCisgICAgNjE3NDcsIDYxNzU2LCA2MTc2NSwgNjE3NzQsIDYxNzgzLCA2MTc4NiwgNjE3OTEsIDYxNzk2LCA2MTgwMSwgNjE4MDYsIAorICAgIDYxODExLCA2MTgxNiwgNjE4MjEsIDYxODI2LCA2MTgzMSwgNjE4MzUsIDYxODQwLCA2MTg0NSwgNjE4NTAsIDYxODU1LCAKKyAgICA2MTg2MCwgNjE4NjQsIDYxODY4LCA2MTg3MiwgNjE4NzYsIDYxODgwLCA2MTg4NCwgNjE4ODgsIDYxODkyLCA2MTg5NiwgCisgICAgNjE5MDAsIDYxOTA0LCA2MTkwOCwgNjE5MTIsIDYxOTE2LCA2MTkyMSwgNjE5MjYsIDYxOTMxLCA2MTkzNiwgNjE5NDEsIAorICAgIDYxOTQ2LCA2MTk1MSwgNjE5NTYsIDYxOTYxLCA2MTk2NiwgNjE5NzEsIDYxOTc2LCA2MTk4MSwgNjE5ODYsIDYxOTkyLCAKKyAgICA2MTk5OCwgNjIwMDMsIDYyMDA4LCA2MjAxMSwgNjIwMTQsIDYyMDE3LCA2MjAyMCwgNjIwMjMsIDYyMDI2LCA2MjAyOSwgCisgICAgNjIwMzIsIDYyMDM1LCA2MjAzOSwgNjIwNDMsIDYyMDQ3LCA2MjA1MSwgNjIwNTUsIDYyMDU5LCA2MjA2MywgNjIwNjcsIAorICAgIDYyMDcxLCA2MjA3NSwgNjIwNzksIDYyMDgzLCA2MjA4NywgNjIwOTEsIDYyMDk1LCA2MjA5OSwgNjIxMDMsIDYyMTA3LCAKKyAgICA2MjExMSwgNjIxMTUsIDYyMTE5LCA2MjEyMywgNjIxMjcsIDYyMTMxLCA2MjEzNSwgNjIxMzksIDYyMTQzLCA2MjE0NywgCisgICAgNjIxNTEsIDYyMTU1LCA2MjE1OSwgNjIxNjMsIDYyMTY3LCA2MjE3MSwgNjIxNzUsIDYyMTc5LCA2MjE4MywgNjIxODcsIAorICAgIDYyMTkxLCA2MjE5NSwgNjIyMDAsIDYyMjA1LCA2MjIxMCwgNjIyMTUsIDYyMjE5LCA2MjIyNCwgNjIyMjksIDYyMjM0LCAKKyAgICA2MjIzOSwgNjIyNDQsIDYyMjQ5LCA2MjI1NCwgNjIyNTksIDYyMjY0LCA2MjI2OCwgNjIyNzUsIDYyMjgyLCA2MjI4OSwgCisgICAgNjIyOTYsIDYyMzAzLCA2MjMxMCwgNjIzMTcsIDYyMzI0LCA2MjMzMSwgNjIzMzgsIDYyMzQ1LCA2MjM1MiwgNjIzNTUsIAorICAgIDYyMzU4LCA2MjM2MSwgNjIzNjYsIDYyMzY5LCA2MjM3MiwgNjIzNzUsIDYyMzc4LCA2MjM4MSwgNjIzODQsIDYyMzg4LCAKKyAgICA2MjM5MiwgNjIzOTYsIDYyNDAwLCA2MjQwMywgNjI0MDcsIDYyNDExLCA2MjQxNSwgNjI0MTksIDYyNDIzLCA2MjQyNywgCisgICAgNjI0MzEsIDYyNDM1LCA2MjQzOCwgNjI0NDEsIDYyNDQ1LCA2MjQ0OSwgNjI0NTMsIDYyNDU3LCA2MjQ2MCwgNjI0NjQsIAorICAgIDYyNDY4LCA2MjQ3MiwgNjI0NzYsIDYyNDc5LCA2MjQ4MywgNjI0ODcsIDYyNDkxLCA2MjQ5NSwgNjI0OTgsIDYyNTAyLCAKKyAgICA2MjUwNiwgNjI1MDksIDYyNTEzLCA2MjUxNywgNjI1MjEsIDYyNTI1LCA2MjUyOSwgNjI1MzMsIDYyNTM3LCAwLCA2MjU0MSwgCisgICAgNjI1NDQsIDYyNTQ3LCA2MjU1MCwgNjI1NTMsIDYyNTU2LCA2MjU1OSwgNjI1NjIsIDYyNTY1LCA2MjU2OCwgNjI1NzEsIAorICAgIDYyNTc0LCA2MjU3NywgNjI1ODAsIDYyNTgzLCA2MjU4NiwgNjI1ODksIDYyNTkyLCA2MjU5NSwgNjI1OTgsIDYyNjAxLCAKKyAgICA2MjYwNCwgNjI2MDcsIDYyNjEwLCA2MjYxMywgNjI2MTYsIDYyNjE5LCA2MjYyMiwgNjI2MjUsIDYyNjI4LCA2MjYzMSwgCisgICAgNjI2MzQsIDYyNjM3LCA2MjY0MCwgNjI2NDMsIDYyNjQ2LCA2MjY0OSwgNjI2NTIsIDYyNjU1LCA2MjY1OCwgNjI2NjEsIAorICAgIDYyNjY0LCA2MjY2NywgNjI2NzAsIDYyNjczLCA2MjY3NiwgNjI2NzksIDYyNjgyLCA2MjY4NSwgNjI2ODgsIDYyNjkxLCAKKyAgICA2MjY5NCwgNjI2OTcsIDYyNzAwLCA2MjcwMywgNjI3MDYsIDYyNzA5LCA2MjcxMiwgNjI3MTUsIDYyNzE4LCA2MjcyMSwgCisgICAgNjI3MjQsIDYyNzI3LCA2MjczMCwgNjI3MzMsIDYyNzM2LCA2MjczOSwgNjI3NDIsIDYyNzQ1LCA2Mjc0OCwgNjI3NTEsIAorICAgIDYyNzU0LCA2Mjc1NywgNjI3NjAsIDYyNzYzLCA2Mjc2NiwgNjI3NjksIDYyNzcyLCA2Mjc3NSwgNjI3NzgsIDYyNzgxLCAKKyAgICA2Mjc4NCwgNjI3ODcsIDYyNzkwLCA2Mjc5MywgNjI3OTYsIDYyNzk5LCA2MjgwMiwgNjI4MDUsIDYyODE0LCA2MjgyMiwgCisgICAgNjI4MzAsIDYyODM4LCA2Mjg0NiwgNjI4NTQsIDYyODYyLCA2Mjg3MCwgNjI4NzgsIDYyODg2LCA2Mjg5NSwgNjI5MDQsIAorICAgIDYyOTEzLCA2MjkyMiwgNjI5MzEsIDYyOTQwLCA2Mjk0OSwgNjI5NTgsIDYyOTY3LCA2Mjk3NiwgNjI5ODUsIDYyOTk0LCAKKyAgICA2MzAwMywgNjMwMTIsIDYzMDIxLCA2MzAyNCwgNjMwMjcsIDYzMDMwLCA2MzAzMiwgNjMwMzUsIDYzMDM4LCA2MzA0MSwgCisgICAgNjMwNDYsIDYzMDUxLCA2MzA1NCwgNjMwNjEsIDYzMDY4LCA2MzA3NSwgNjMwODIsIDYzMDg1LCA2MzA5MCwgNjMwOTIsIAorICAgIDYzMDk2LCA2MzA5OCwgNjMxMDAsIDYzMTAzLCA2MzEwNiwgNjMxMDksIDYzMTEyLCA2MzExNSwgNjMxMTgsIDYzMTIxLCAKKyAgICA2MzEyNiwgNjMxMzEsIDYzMTM0LCA2MzEzNywgNjMxNDAsIDYzMTQzLCA2MzE0NiwgNjMxNDksIDYzMTUyLCA2MzE1NiwgCisgICAgNjMxNTksIDYzMTYyLCA2MzE2NSwgNjMxNjgsIDYzMTcxLCA2MzE3NSwgNjMxNzgsIDYzMTgxLCA2MzE4NCwgNjMxODksIAorICAgIDYzMTk0LCA2MzE5OSwgNjMyMDQsIDYzMjA5LCA2MzIxNCwgNjMyMTksIDYzMjI0LCA2MzIzMCwgNjMyMzgsIDYzMjQwLCAKKyAgICA2MzI0MywgNjMyNDYsIDYzMjQ5LCA2MzI1MiwgNjMyNTgsIDYzMjY2LCA2MzI2OSwgNjMyNzIsIDYzMjc3LCA2MzI4MCwgCisgICAgNjMyODMsIDYzMjg2LCA2MzI5MSwgNjMyOTQsIDYzMjk3LCA2MzMwMiwgNjMzMDUsIDYzMzA4LCA2MzMxMywgNjMzMTYsIAorICAgIDYzMzE5LCA2MzMyNCwgNjMzMjksIDYzMzM0LCA2MzMzNywgNjMzNDAsIDYzMzQzLCA2MzM0NiwgNjMzNTIsIDYzMzU1LCAKKyAgICA2MzM1OCwgNjMzNjEsIDYzMzYzLCA2MzM2NiwgNjMzNjksIDYzMzcyLCA2MzM3NywgNjMzODAsIDYzMzgzLCA2MzM4NiwgCisgICAgNjMzODksIDYzMzkyLCA2MzM5NywgNjM0MDAsIDYzNDAzLCA2MzQwNiwgNjM0MDksIDYzNDEyLCA2MzQxNSwgNjM0MTgsIAorICAgIDYzNDIxLCA2MzQyNCwgNjM0MjksIDYzNDMzLCA2MzQ0MSwgNjM0NDksIDYzNDU3LCA2MzQ2NSwgNjM0NzMsIDYzNDgxLCAKKyAgICA2MzQ4OSwgNjM0OTcsIDYzNTA1LCA2MzUxNCwgNjM1MjMsIDYzNTMyLCA2MzU0MSwgNjM1NTAsIDYzNTU5LCA2MzU2OCwgCisgICAgNjM1NzcsIDYzNTg2LCA2MzU5NSwgNjM2MDQsIDYzNjEzLCA2MzYyMiwgNjM2MzEsIDYzNjQwLCA2MzY0OSwgNjM2NTgsIAorICAgIDYzNjY3LCA2MzY3NiwgNjM2ODUsIDYzNjk0LCA2MzcwMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjM2NzgsIDYzNjg3LCA2MzY5NiwgNjM3MDcsIAotICAgIDYzNzE0LCA2MzcxOSwgNjM3MjQsIDYzNzMxLCA2MzczOCwgNjM3NDQsIDYzNzQ5LCA2Mzc1NCwgNjM3NTksIDYzNzY0LCAKLSAgICA2Mzc3MSwgNjM3NzYsIDYzNzgxLCA2Mzc4NiwgNjM3OTcsIDYzODAyLCA2MzgwNywgNjM4MTQsIDYzODE5LCA2MzgyNiwgCi0gICAgNjM4MzEsIDYzODM2LCA2Mzg0MywgNjM4NTAsIDYzODU3LCA2Mzg2NiwgNjM4NzUsIDYzODgwLCA2Mzg4NSwgNjM4OTAsIAotICAgIDYzODk3LCA2MzkwMiwgNjM5MTIsIDYzOTE5LCA2MzkyNCwgNjM5MjksIDYzOTM0LCA2MzkzOSwgNjM5NDQsIDYzOTQ5LCAKLSAgICA2Mzk1OCwgNjM5NjUsIDYzOTcyLCA2Mzk3NywgNjM5ODQsIDYzOTg5LCA2Mzk5NiwgNjQwMDUsIDY0MDE2LCA2NDAyMSwgCi0gICAgNjQwMzAsIDY0MDM1LCA2NDA0MiwgNjQwNTEsIDY0MDYwLCA2NDA2NSwgNjQwNzAsIDY0MDc3LCA2NDA4MywgNjQwOTAsIAotICAgIDY0MDk3LCA2NDEwMSwgNjQxMDUsIDY0MTA4LCA2NDExMiwgNjQxMTYsIDY0MTIwLCA2NDEyNCwgNjQxMjgsIDY0MTMyLCAKLSAgICA2NDEzNiwgNjQxMzksIDY0MTQzLCA2NDE0NywgNjQxNTEsIDY0MTU1LCA2NDE1OSwgNjQxNjMsIDY0MTY2LCA2NDE3MCwgCi0gICAgNjQxNzQsIDY0MTc3LCA2NDE4MSwgNjQxODUsIDY0MTg5LCA2NDE5MywgNjQxOTcsIDY0MjAxLCA2NDIwNSwgNjQyMDksIAotICAgIDY0MjEzLCA2NDIxNywgNjQyMjEsIDY0MjI1LCA2NDIyOSwgNjQyMzMsIDY0MjM3LCA2NDI0MSwgNjQyNDUsIDY0MjQ5LCAKLSAgICA2NDI1MywgNjQyNTcsIDY0MjYxLCA2NDI2NSwgNjQyNjksIDY0MjczLCA2NDI3NywgNjQyODEsIDY0Mjg1LCA2NDI4OSwgCi0gICAgNjQyOTMsIDY0Mjk3LCA2NDMwMSwgNjQzMDUsIDY0MzA5LCA2NDMxMywgNjQzMTcsIDY0MzIxLCA2NDMyNSwgNjQzMjksIAotICAgIDY0MzMzLCA2NDMzNywgNjQzNDEsIDY0MzQ1LCA2NDM0OSwgNjQzNTMsIDY0MzU2LCA2NDM2MCwgNjQzNjQsIDY0MzY4LCAKLSAgICA2NDM3MiwgNjQzNzYsIDY0MzgwLCA2NDM4NCwgNjQzODgsIDY0MzkyLCA2NDM5NiwgNjQ0MDAsIDY0NDA0LCA2NDQwOCwgCi0gICAgNjQ0MTIsIDY0NDE2LCA2NDQyMCwgNjQ0MjQsIDY0NDI4LCA2NDQzMiwgNjQ0MzYsIDY0NDQwLCA2NDQ0NCwgNjQ0NDgsIAotICAgIDY0NDUyLCA2NDQ1NiwgNjQ0NjAsIDY0NDY0LCA2NDQ2OCwgNjQ0NzIsIDY0NDc2LCA2NDQ4MCwgNjQ0ODQsIDY0NDg4LCAKLSAgICA2NDQ5MiwgNjQ0OTYsIDY0NTAwLCA2NDUwNCwgNjQ1MDgsIDY0NTEyLCA2NDUxNiwgNjQ1MjAsIDY0NTI0LCA2NDUyOCwgCi0gICAgNjQ1MzIsIDY0NTM2LCA2NDU0MCwgNjQ1NDQsIDY0NTQ4LCA2NDU1MiwgNjQ1NTYsIDY0NTYwLCA2NDU2NCwgNjQ1NjgsIAotICAgIDY0NTcyLCA2NDU3NiwgNjQ1ODAsIDY0NTg0LCA2NDU4OCwgNjQ1OTIsIDY0NTk2LCA2NDYwMCwgNjQ2MDQsIDY0NjA4LCAKLSAgICA2NDYxMiwgNjQ2MTYsIDY0NjIwLCA2NDYyNCwgNjQ2MjgsIDY0NjMyLCA2NDYzNiwgNjQ2NDAsIDY0NjQ0LCA2NDY0OCwgCi0gICAgNjQ2NTIsIDY0NjU2LCA2NDY2MCwgNjQ2NjQsIDY0NjY4LCA2NDY3MiwgNjQ2NzYsIDY0NjgwLCA2NDY4NCwgNjQ2ODgsIAotICAgIDY0NjkyLCA2NDY5NiwgNjQ3MDAsIDY0NzA0LCA2NDcwOCwgNjQ3MTIsIDY0NzE2LCA2NDcyMCwgNjQ3MjQsIDY0NzI4LCAKLSAgICA2NDczMiwgNjQ3MzYsIDY0NzQwLCA2NDc0NCwgNjQ3NDgsIDY0NzUyLCA2NDc1NiwgNjQ3NjAsIDY0NzY0LCA2NDc2OCwgCi0gICAgNjQ3NzIsIDY0Nzc2LCA2NDc4MCwgNjQ3ODQsIDY0Nzg4LCA2NDc5MiwgNjQ3OTYsIDY0ODAwLCA2NDgwNCwgNjQ4MDgsIAotICAgIDY0ODEyLCA2NDgxNiwgNjQ4MjAsIDY0ODI0LCA2NDgyNywgNjQ4MzEsIDY0ODM1LCA2NDgzOSwgNjQ4NDMsIDY0ODQ3LCAKLSAgICA2NDg1MSwgNjQ4NTUsIDY0ODU5LCA2NDg2MywgNjQ4NjcsIDY0ODcxLCA2NDg3NSwgNjQ4NzksIDY0ODgzLCA2NDg4NywgCi0gICAgNjQ4OTEsIDY0ODk1LCA2NDg5OSwgNjQ5MDMsIDY0OTA3LCA2NDkxMSwgNjQ5MTUsIDY0OTE5LCA2NDkyMywgNjQ5MjcsIAotICAgIDY0OTMxLCA2NDkzNSwgNjQ5MzksIDY0OTQzLCA2NDk0NywgNjQ5NTEsIDY0OTU1LCA2NDk1OSwgNjQ5NjMsIDY0OTY3LCAKLSAgICA2NDk3MSwgNjQ5NzUsIDY0OTc5LCA2NDk4MywgNjQ5ODcsIDY0OTkxLCA2NDk5NSwgNjQ5OTksIDY1MDAzLCA2NTAwNywgCi0gICAgNjUwMTEsIDY1MDE1LCA2NTAxOSwgNjUwMjMsIDY1MDI3LCA2NTAzMSwgNjUwMzUsIDY1MDM5LCA2NTA0MywgNjUwNDcsIAotICAgIDY1MDUxLCA2NTA1NSwgNjUwNTksIDY1MDYzLCA2NTA2NywgNjUwNzEsIDY1MDc1LCA2NTA3OSwgNjUwODMsIDY1MDg3LCAKLSAgICA2NTA5MSwgNjUwOTUsIDY1MDk5LCA2NTEwMywgNjUxMDcsIDY1MTExLCA2NTExNSwgNjUxMTksIDY1MTIzLCA2NTEyNywgCi0gICAgNjUxMzEsIDY1MTM1LCA2NTEzOSwgNjUxNDMsIDY1MTQ3LCA2NTE1MSwgNjUxNTUsIDY1MTU5LCA2NTE2MywgNjUxNjcsIAotICAgIDY1MTcxLCA2NTE3NSwgNjUxNzksIDY1MTgzLCA2NTE4NywgNjUxOTEsIDY1MTk1LCA2NTE5OSwgNjUyMDMsIDY1MjA3LCAKLSAgICA2NTIxMSwgNjUyMTUsIDY1MjE5LCA2NTIyMywgNjUyMjcsIDY1MjMxLCA2NTIzNSwgNjUyMzksIDY1MjQzLCA2NTI0NywgCi0gICAgNjUyNTEsIDY1MjU1LCA2NTI1OSwgNjUyNjMsIDY1MjY3LCA2NTI3MSwgNjUyNzUsIDY1Mjc5LCA2NTI4MywgNjUyODcsIAotICAgIDY1MjkwLCA2NTI5NCwgNjUyOTgsIDY1MzAyLCA2NTMwNiwgNjUzMTAsIDY1MzE0LCA2NTMxOCwgNjUzMjIsIDY1MzI2LCAKLSAgICA2NTMzMCwgNjUzMzQsIDY1MzM4LCA2NTM0MiwgNjUzNDYsIDY1MzUwLCA2NTM1NCwgNjUzNTgsIDY1MzYyLCA2NTM2NiwgCi0gICAgNjUzNzAsIDY1Mzc0LCA2NTM3OCwgNjUzODIsIDY1Mzg2LCA2NTM5MCwgNjUzOTQsIDY1Mzk4LCA2NTQwMiwgNjU0MDYsIAotICAgIDY1NDEwLCA2NTQxNCwgNjU0MTgsIDY1NDIyLCA2NTQyNiwgNjU0MzAsIDY1NDM0LCA2NTQzOCwgNjU0NDIsIDY1NDQ2LCAKLSAgICA2NTQ1MCwgNjU0NTQsIDY1NDU4LCA2NTQ2MiwgNjU0NjYsIDY1NDcwLCA2NTQ3NCwgNjU0NzgsIDY1NDgyLCA2NTQ4NiwgCi0gICAgNjU0OTAsIDY1NDk0LCA2NTQ5OCwgNjU1MDIsIDY1NTA2LCA2NTUxMCwgNjU1MTQsIDY1NTE4LCA2NTUyMiwgNjU1MjYsIAotICAgIDY1NTMwLCA2NTUzNCwgNjU1MzgsIDY1NTQyLCA2NTU0NiwgNjU1NTAsIDY1NTU0LCA2NTU1OCwgNjU1NjIsIDY1NTY2LCAKLSAgICA2NTU3MCwgNjU1NzQsIDY1NTc4LCA2NTU4MiwgNjU1ODYsIDY1NTkwLCA2NTU5NCwgNjU1OTgsIDY1NjAyLCA2NTYwNiwgCi0gICAgNjU2MTAsIDY1NjE0LCA2NTYxOCwgNjU2MjIsIDY1NjI2LCA2NTYzMCwgNjU2MzQsIDY1NjM4LCA2NTY0MiwgNjU2NDYsIAotICAgIDY1NjQ5LCA2NTY1MywgNjU2NTcsIDY1NjYxLCA2NTY2NSwgNjU2NjksIDY1NjczLCA2NTY3NywgNjU2ODEsIDY1Njg1LCAKLSAgICA2NTY4OSwgNjU2OTMsIDY1Njk3LCA2NTcwMSwgNjU3MDUsIDY1NzA5LCA2NTcxMywgNjU3MTcsIDY1NzIxLCA2NTcyNSwgCi0gICAgNjU3MjksIDY1NzMzLCA2NTczNywgNjU3NDEsIDY1NzQ1LCA2NTc0OSwgNjU3NTMsIDY1NzU3LCA2NTc2MSwgNjU3NjUsIAotICAgIDY1NzY5LCA2NTc3MywgNjU3NzcsIDY1NzgxLCA2NTc4NSwgNjU3ODksIDY1NzkzLCA2NTc5NywgNjU4MDEsIDY1ODA1LCAKLSAgICA2NTgwOSwgNjU4MTMsIDY1ODE3LCA2NTgyMSwgNjU4MjUsIDY1ODI5LCA2NTgzMywgNjU4MzcsIDY1ODQxLCA2NTg0NSwgCi0gICAgNjU4NDksIDY1ODUzLCA2NTg1NywgNjU4NjEsIDY1ODY1LCA2NTg2OSwgNjU4NzMsIDY1ODc3LCA2NTg4MSwgNjU4ODUsIAotICAgIDY1ODg5LCA2NTg5MywgNjU4OTcsIDY1OTAxLCA2NTkwNSwgNjU5MDksIDY1OTEzLCA2NTkxNywgNjU5MjEsIDY1OTI1LCAKLSAgICA2NTkyOSwgNjU5MzMsIDY1OTM3LCA2NTk0MSwgNjU5NDUsIDY1OTQ5LCA2NTk1MywgNjU5NTcsIDY1OTYxLCA2NTk2NSwgCi0gICAgNjU5NjksIDY1OTczLCA2NTk3NywgNjU5ODEsIDY1OTg1LCA2NTk4OSwgNjU5OTMsIDY1OTk3LCA2NjAwMSwgNjYwMDUsIAotICAgIDY2MDA5LCA2NjAxMywgNjYwMTcsIDY2MDIxLCA2NjAyNSwgNjYwMjksIDY2MDMzLCA2NjAzNywgNjYwNDEsIDY2MDQ1LCAKLSAgICA2NjA0OSwgNjYwNTMsIDY2MDU3LCA2NjA2MSwgNjYwNjUsIDY2MDY5LCA2NjA3MywgNjYwNzcsIDY2MDgxLCA2NjA4NSwgCi0gICAgNjYwODksIDY2MDkzLCA2NjA5NywgNjYxMDEsIDY2MTA1LCA2NjEwOSwgNjYxMTMsIDY2MTE3LCA2NjEyMSwgNjYxMjUsIAotICAgIDY2MTI5LCA2NjEzMywgNjYxMzcsIDY2MTQxLCA2NjE0NCwgNjYxNDgsIDY2MTUyLCA2NjE1NiwgNjYxNjAsIDY2MTY0LCAKLSAgICA2NjE2OCwgNjYxNzIsIDY2MTc2LCA2NjE4MCwgNjYxODQsIDY2MTg4LCA2NjE5MiwgNjYxOTYsIDY2MjAwLCA2NjIwNCwgCi0gICAgNjYyMDgsIDY2MjEyLCA2NjIxNiwgNjYyMjAsIDY2MjI0LCA2NjIyOCwgNjYyMzIsIDY2MjM2LCA2NjI0MCwgNjYyNDQsIAotICAgIDY2MjQ4LCA2NjI1MiwgNjYyNTYsIDY2MjYwLCA2NjI2NCwgNjYyNjgsIDY2MjcyLCA2NjI3NiwgNjYyODAsIDY2Mjg0LCAKLSAgICA2NjI4OCwgNjYyOTIsIDY2Mjk2LCA2NjMwMCwgNjYzMDQsIDY2MzA4LCA2NjMxMiwgNjYzMTYsIDY2MzIwLCA2NjMyNCwgCi0gICAgNjYzMjgsIDY2MzMyLCA2NjMzNiwgNjYzNDAsIDY2MzQ0LCA2NjM0OCwgNjYzNTIsIDY2MzU2LCA2NjM2MCwgNjYzNjQsIAotICAgIDY2MzY4LCA2NjM3MiwgNjYzNzYsIDY2MzgwLCA2NjM4NCwgNjYzODgsIDY2MzkyLCA2NjM5NiwgNjY0MDAsIDY2NDA0LCAKLSAgICA2NjQwOCwgNjY0MTIsIDY2NDE2LCA2NjQyMCwgNjY0MjQsIDY2NDI4LCA2NjQzMiwgNjY0MzYsIDY2NDQwLCA2NjQ0NCwgCi0gICAgNjY0NDgsIDY2NDUyLCA2NjQ1NiwgNjY0NjAsIDY2NDY0LCA2NjQ2OCwgNjY0NzIsIDY2NDc2LCA2NjQ4MCwgNjY0ODQsIAotICAgIDY2NDg4LCA2NjQ5MiwgNjY0OTYsIDY2NTAwLCA2NjUwNCwgNjY1MDgsIDY2NTEyLCA2NjUxNiwgNjY1MjAsIDY2NTI0LCAKLSAgICA2NjUyOCwgNjY1MzIsIDY2NTM2LCA2NjU0MCwgNjY1NDQsIDY2NTQ4LCA2NjU1MiwgNjY1NTYsIDY2NTYwLCA2NjU2NCwgCi0gICAgNjY1NjgsIDY2NTcyLCA2NjU3NiwgNjY1ODAsIDY2NTg0LCA2NjU4OCwgNjY1OTIsIDY2NTk2LCA2NjU5OSwgNjY2MDMsIAotICAgIDY2NjA3LCA2NjYxMSwgNjY2MTUsIDY2NjE5LCA2NjYyMywgNjY2MjcsIDY2NjMxLCA2NjYzNSwgNjY2MzksIDY2NjQzLCAKLSAgICA2NjY0NywgNjY2NTEsIDY2NjU1LCA2NjY1OSwgNjY2NjMsIDY2NjY3LCA2NjY3MSwgNjY2NzUsIDY2Njc5LCA2NjY4MywgCi0gICAgNjY2ODcsIDY2NjkxLCA2NjY5NSwgNjY2OTksIDY2NzAzLCA2NjcwNywgNjY3MTEsIDY2NzE1LCA2NjcxOSwgNjY3MjMsIAotICAgIDY2NzI3LCA2NjczMSwgNjY3MzUsIDY2NzM5LCA2Njc0MywgNjY3NDcsIDY2NzUxLCA2Njc1NSwgNjY3NTksIDY2NzYzLCAKLSAgICA2Njc2NywgNjY3NzEsIDY2Nzc1LCA2Njc3OSwgNjY3ODMsIDY2Nzg3LCA2Njc5MSwgNjY3OTUsIDY2Nzk5LCA2NjgwMywgCi0gICAgNjY4MDcsIDY2ODExLCA2NjgxNSwgNjY4MTksIDY2ODIzLCA2NjgyNywgNjY4MzEsIDY2ODM1LCA2NjgzOSwgNjY4NDMsIAotICAgIDY2ODQ3LCA2Njg1MSwgNjY4NTUsIDY2ODU5LCA2Njg2MywgNjY4NjcsIDY2ODcxLCA2Njg3NSwgNjY4NzksIDY2ODgzLCAKLSAgICA2Njg4NywgNjY4OTEsIDY2ODk1LCA2Njg5OSwgNjY5MDMsIDY2OTA3LCA2NjkxMSwgNjY5MTUsIDY2OTE5LCA2NjkyMywgCi0gICAgNjY5MjcsIDY2OTMxLCA2NjkzNSwgNjY5MzksIDY2OTQzLCA2Njk0NywgNjY5NTEsIDY2OTU1LCA2Njk1OSwgNjY5NjMsIAotICAgIDY2OTY3LCA2Njk3MSwgNjY5NzUsIDY2OTc5LCA2Njk4MywgNjY5ODcsIDY2OTkxLCA2Njk5NSwgNjY5OTksIDY3MDAzLCAKLSAgICA2NzAwNywgNjcwMTEsIDY3MDE1LCA2NzAxOSwgNjcwMjMsIDY3MDI3LCA2NzAzMSwgNjcwMzUsIDY3MDM5LCA2NzA0MywgCi0gICAgNjcwNDcsIDY3MDUxLCA2NzA1NSwgNjcwNTksIDY3MDYzLCA2NzA2NywgNjcwNzEsIDY3MDc1LCA2NzA3OSwgNjcwODMsIAotICAgIDY3MDg3LCA2NzA5MSwgNjcwOTUsIDY3MDk5LCA2NzEwMywgNjcxMDcsIDY3MTExLCA2NzExNSwgNjcxMTksIDY3MTIzLCAKLSAgICA2NzEyNywgNjcxMzEsIDY3MTM1LCA2NzEzOSwgNjcxNDMsIDY3MTQ3LCA2NzE1MSwgNjcxNTUsIDY3MTU5LCA2NzE2MywgCi0gICAgNjcxNjcsIDY3MTcxLCA2NzE3NSwgNjcxNzksIDY3MTgzLCA2NzE4NywgNjcxOTEsIDY3MTk1LCA2NzE5OSwgNjcyMDIsIAotICAgIDY3MjA2LCA2NzIxMCwgNjcyMTQsIDY3MjE4LCA2NzIyMiwgNjcyMjYsIDY3MjMwLCA2NzIzMywgNjcyMzcsIDY3MjQxLCAKLSAgICA2NzI0NSwgNjcyNDksIDY3MjUzLCA2NzI1NywgNjcyNjEsIDY3MjY1LCA2NzI2OSwgNjcyNzMsIDY3Mjc3LCA2NzI4MSwgCi0gICAgNjcyODUsIDY3Mjg5LCA2NzI5MywgNjcyOTcsIDY3MzAxLCA2NzMwNSwgNjczMDksIDY3MzEzLCA2NzMxNywgNjczMjEsIAotICAgIDY3MzI1LCA2NzMyOSwgNjczMzMsIDY3MzM3LCA2NzM0MSwgNjczNDUsIDY3MzQ5LCA2NzM1MywgNjczNTcsIDY3MzYxLCAKLSAgICA2NzM2NSwgNjczNjksIDY3MzczLCA2NzM3NywgNjczODEsIDY3Mzg1LCA2NzM4OSwgNjczOTMsIDY3Mzk3LCA2NzQwMSwgCi0gICAgNjc0MDUsIDY3NDA5LCA2NzQxMywgNjc0MTcsIDY3NDIxLCA2NzQyNSwgNjc0MjksIDY3NDMzLCA2NzQzNywgNjc0NDEsIAotICAgIDY3NDQ1LCA2NzQ0OSwgNjc0NTMsIDY3NDU3LCA2NzQ2MSwgNjc0NjUsIDY3NDY5LCA2NzQ3MywgNjc0NzcsIDY3NDgxLCAKLSAgICA2NzQ4NSwgNjc0ODksIDY3NDkzLCA2NzQ5NywgNjc1MDEsIDY3NTA1LCA2NzUwOSwgNjc1MTMsIDY3NTE3LCA2NzUyMSwgCi0gICAgNjc1MjUsIDY3NTI5LCA2NzUzMywgNjc1MzcsIDY3NTQxLCA2NzU0NSwgNjc1NDksIDY3NTUzLCA2NzU1NywgNjc1NjEsIAotICAgIDY3NTY1LCA2NzU2OSwgNjc1NzMsIDY3NTc3LCA2NzU4MSwgNjc1ODUsIDY3NTg5LCA2NzU5MywgNjc1OTcsIDY3NjAxLCAKLSAgICA2NzYwNSwgNjc2MDksIDY3NjEzLCA2NzYxNywgNjc2MjEsIDY3NjI1LCA2NzYyOSwgNjc2MzMsIDY3NjM3LCA2NzY0MSwgCi0gICAgNjc2NDUsIDY3NjQ5LCA2NzY1MywgNjc2NTcsIDY3NjYxLCA2NzY2NSwgNjc2NjksIDY3NjczLCA2NzY3NywgNjc2ODEsIAotICAgIDY3Njg1LCA2NzY4OSwgNjc2OTMsIDY3Njk3LCA2NzcwMSwgNjc3MDUsIDY3NzA5LCA2NzcxMywgNjc3MTcsIDY3NzIxLCAKLSAgICA2NzcyNSwgNjc3MjksIDY3NzMzLCA2NzczNywgNjc3NDEsIDY3NzQ1LCA2Nzc0OSwgNjc3NTMsIDY3NzU3LCA2Nzc2MSwgCi0gICAgNjc3NjUsIDY3NzY5LCA2Nzc3MywgNjc3NzcsIDY3NzgxLCA2Nzc4NSwgNjc3ODksIDY3NzkzLCA2Nzc5NywgNjc4MDEsIAotICAgIDY3ODA1LCA2NzgwOSwgNjc4MTMsIDY3ODE3LCA2NzgyMSwgNjc4MjUsIDY3ODI5LCA2NzgzMywgNjc4MzcsIDY3ODQxLCAKLSAgICA2Nzg0NSwgNjc4NDksIDY3ODUzLCA2Nzg1NywgNjc4NjEsIDY3ODY1LCA2Nzg2OSwgNjc4NzMsIDY3ODc3LCA2Nzg4MSwgCi0gICAgNjc4ODUsIDY3ODg5LCA2Nzg5MywgNjc4OTcsIDY3OTAxLCA2NzkwNSwgNjc5MDksIDY3OTEzLCA2NzkxNywgNjc5MjEsIAotICAgIDY3OTI1LCA2NzkyOSwgNjc5MzMsIDY3OTM3LCA2Nzk0MSwgNjc5NDUsIDY3OTQ5LCA2Nzk1MywgNjc5NTcsIDY3OTYwLCAKLSAgICA2Nzk2NCwgNjc5NjgsIDY3OTcyLCA2Nzk3NiwgNjc5ODAsIDY3OTg0LCA2Nzk4OCwgNjc5OTIsIDY3OTk2LCA2ODAwMCwgCi0gICAgNjgwMDQsIDY4MDA4LCA2ODAxMiwgNjgwMTYsIDY4MDIwLCA2ODAyNCwgNjgwMjgsIDY4MDMyLCA2ODAzNiwgNjgwNDAsIAotICAgIDY4MDQ0LCA2ODA0OCwgNjgwNTIsIDY4MDU2LCA2ODA2MCwgNjgwNjQsIDY4MDY4LCA2ODA3MiwgNjgwNzYsIDY4MDgwLCAKLSAgICA2ODA4NCwgNjgwODgsIDY4MDkyLCA2ODA5NiwgNjgxMDAsIDY4MTA0LCA2ODEwOCwgNjgxMTIsIDY4MTE2LCA2ODEyMCwgCi0gICAgNjgxMjQsIDY4MTI4LCA2ODEzMiwgNjgxMzYsIDY4MTQwLCA2ODE0NCwgNjgxNDgsIDY4MTUyLCA2ODE1NiwgNjgxNjAsIAotICAgIDY4MTY0LCA2ODE2OCwgNjgxNzIsIDY4MTc2LCA2ODE4MCwgNjgxODQsIDY4MTg4LCA2ODE5MiwgNjgxOTYsIDY4MjAwLCAKLSAgICA2ODIwNCwgNjgyMDgsIDY4MjEyLCA2ODIxNiwgNjgyMjAsIDY4MjI0LCA2ODIyOCwgNjgyMzIsIDY4MjM2LCA2ODI0MCwgCi0gICAgNjgyNDQsIDY4MjQ4LCA2ODI1MiwgNjgyNTYsIDY4MjYwLCA2ODI2NCwgNjgyNjgsIDY4MjcyLCA2ODI3NiwgNjgyODAsIAotICAgIDY4Mjg0LCA2ODI4OCwgNjgyOTIsIDY4Mjk2LCA2ODMwMCwgNjgzMDQsIDY4MzA4LCA2ODMxMiwgNjgzMTYsIDY4MzIwLCAKLSAgICA2ODMyNCwgNjgzMjgsIDY4MzMyLCA2ODMzNiwgNjgzNDAsIDY4MzQ0LCA2ODM0OCwgNjgzNTIsIDY4MzU2LCA2ODM2MCwgCi0gICAgNjgzNjQsIDY4MzY4LCA2ODM3MiwgNjgzNzYsIDY4MzgwLCA2ODM4NCwgNjgzODgsIDY4MzkyLCA2ODM5NiwgNjg0MDAsIAotICAgIDY4NDA0LCA2ODQwOCwgNjg0MTIsIDY4NDE2LCA2ODQyMCwgNjg0MjQsIDY4NDI4LCA2ODQzMiwgNjg0MzYsIDY4NDQwLCAKLSAgICA2ODQ0NCwgNjg0NDgsIDY4NDUyLCA2ODQ1NiwgNjg0NjAsIDY4NDY0LCA2ODQ2OCwgNjg0NzIsIDY4NDc2LCA2ODQ4MCwgCi0gICAgNjg0ODQsIDY4NDg4LCA2ODQ5MiwgNjg0OTYsIDY4NTAwLCA2ODUwNCwgNjg1MDgsIDY4NTEyLCA2ODUxNiwgNjg1MjAsIAotICAgIDY4NTI0LCA2ODUyOCwgNjg1MzIsIDY4NTM2LCA2ODU0MCwgNjg1NDQsIDY4NTQ4LCA2ODU1MiwgNjg1NTYsIDY4NTYwLCAKLSAgICA2ODU2NCwgNjg1NjgsIDY4NTcyLCA2ODU3NiwgNjg1ODAsIDY4NTg0LCA2ODU4OCwgNjg1OTIsIDY4NTk2LCA2ODYwMCwgCi0gICAgNjg2MDQsIDY4NjA4LCA2ODYxMiwgNjg2MTYsIDY4NjIwLCA2ODYyNCwgNjg2MjgsIDY4NjMyLCA2ODYzNiwgNjg2NDAsIAotICAgIDY4NjQ0LCA2ODY0OCwgNjg2NTIsIDY4NjU2LCA2ODY2MCwgNjg2NjQsIDY4NjY4LCA2ODY3MiwgNjg2NzYsIDY4NjgwLCAKLSAgICA2ODY4NCwgNjg2ODgsIDY4NjkyLCA2ODY5NiwgNjg3MDAsIDY4NzA0LCA2ODcwOCwgNjg3MTIsIDY4NzE2LCA2ODcyMCwgCi0gICAgNjg3MjQsIDY4NzI4LCA2ODczMiwgNjg3MzYsIDY4NzQwLCAwLCAwLCAwLCA2ODc0NCwgNjg3NDgsIDY4NzUyLCA2ODc1NiwgCi0gICAgNjg3NjAsIDY4NzY0LCA2ODc2OCwgNjg3NzIsIDY4Nzc2LCA2ODc4MCwgNjg3ODQsIDY4Nzg4LCA2ODc5MiwgNjg3OTYsIAotICAgIDY4ODAwLCA2ODgwNCwgNjg4MDgsIDY4ODEyLCA2ODgxNiwgNjg4MjAsIDY4ODI0LCA2ODgyOCwgNjg4MzIsIDY4ODM2LCAKLSAgICA2ODg0MCwgNjg4NDQsIDY4ODQ4LCA2ODg1MiwgNjg4NTYsIDY4ODYwLCA2ODg2NCwgNjg4NjgsIDY4ODcyLCA2ODg3NiwgCi0gICAgNjg4ODAsIDY4ODg0LCA2ODg4OCwgNjg4OTIsIDY4ODk2LCA2ODkwMCwgNjg5MDQsIDY4OTA4LCA2ODkxMiwgNjg5MTYsIAotICAgIDY4OTIwLCA2ODkyNCwgNjg5MjgsIDY4OTMyLCA2ODkzNiwgNjg5NDAsIDY4OTQ0LCA2ODk0OCwgNjg5NTIsIDY4OTU2LCAKLSAgICA2ODk2MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjg5NjQsIDY4OTY5LCA2ODk3MywgNjg5NzgsIDY4OTgzLCAKLSAgICA2ODk4OCwgNjg5OTMsIDY4OTk4LCA2OTAwMiwgNjkwMDcsIDY5MDEyLCA2OTAxNywgNjkwMjIsIDY5MDI3LCA2OTAzMiwgCi0gICAgNjkwMzcsIDY5MDQxLCA2OTA0NSwgNjkwNTAsIDY5MDU0LCA2OTA1OSwgNjkwNjQsIDY5MDY5LCA2OTA3MywgNjkwNzgsIAotICAgIDY5MDgzLCA2OTA4OCwgNjkwOTMsIDY5MDk4LCA2OTEwMiwgNjkxMDcsIDY5MTExLCA2OTExNiwgNjkxMjAsIDY5MTI1LCAKLSAgICA2OTEyOSwgNjkxMzMsIDY5MTM3LCA2OTE0MiwgNjkxNDcsIDY5MTUyLCA2OTE2MCwgNjkxNjgsIDY5MTc2LCA2OTE4NCwgCi0gICAgNjkxOTEsIDY5MTk5LCA2OTIwNSwgNjkyMTMsIDY5MjE3LCA2OTIyMSwgNjkyMjUsIDY5MjI5LCA2OTIzMywgNjkyMzcsIAotICAgIDY5MjQxLCA2OTI0NSwgNjkyNDksIDY5MjUzLCA2OTI1NywgNjkyNjEsIDY5MjY1LCA2OTI2OSwgNjkyNzMsIDY5Mjc3LCAKLSAgICA2OTI4MSwgNjkyODUsIDY5Mjg5LCA2OTI5MywgNjkyOTcsIDY5MzAxLCA2OTMwNSwgNjkzMDksIDY5MzEzLCA2OTMxNywgCi0gICAgNjkzMjEsIDY5MzI1LCA2OTMyOSwgNjkzMzMsIDY5MzM3LCA2OTM0MSwgNjkzNDUsIDY5MzQ5LCA2OTM1MywgNjkzNTcsIAotICAgIDY5MzYwLCA2OTM2NCwgNjkzNjgsIDY5MzcyLCA2OTM3NiwgNjkzODAsIDY5Mzg0LCA2OTM4OCwgNjkzOTIsIDY5Mzk2LCAKLSAgICA2OTQwMCwgNjk0MDQsIDY5NDA4LCA2OTQxMiwgNjk0MTYsIDY5NDIwLCA2OTQyNCwgNjk0MjgsIDY5NDMyLCA2OTQzNiwgCi0gICAgNjk0NDAsIDY5NDQ0LCA2OTQ0OCwgNjk0NTIsIDY5NDU2LCA2OTQ2MCwgNjk0NjQsIDY5NDY4LCA2OTQ3MiwgNjk0NzYsIAotICAgIDY5NDgwLCA2OTQ4NCwgNjk0ODgsIDY5NDkyLCA2OTQ5NiwgNjk1MDAsIDY5NTA0LCA2OTUwNywgNjk1MTEsIDY5NTE1LCAKLSAgICA2OTUxOCwgNjk1MjIsIDY5NTI2LCA2OTUzMCwgNjk1MzMsIDY5NTM3LCA2OTU0MSwgNjk1NDUsIDY5NTQ5LCA2OTU1MywgCi0gICAgNjk1NTcsIDY5NTYxLCA2OTU2NSwgNjk1NjksIDY5NTczLCA2OTU3NywgNjk1ODEsIDY5NTg1LCA2OTU4OSwgNjk1OTIsIAotICAgIDY5NTk2LCA2OTYwMCwgNjk2MDMsIDY5NjA3LCA2OTYxMSwgNjk2MTUsIDY5NjE5LCA2OTYyMywgNjk2MjcsIDY5NjMwLCAKLSAgICA2OTYzMywgNjk2MzcsIDY5NjQxLCA2OTY0NSwgNjk2NDgsIDY5NjUxLCA2OTY1NSwgNjk2NTksIDY5NjYzLCA2OTY2NywgCi0gICAgNjk2NzEsIDY5Njc1LCA2OTY3OSwgNjk2ODMsIDY5Njg3LCA2OTY5MSwgNjk2OTUsIDY5Njk5LCA2OTcwMywgNjk3MDcsIAotICAgIDY5NzExLCA2OTcxNSwgNjk3MTksIDY5NzIzLCA2OTcyNywgNjk3MzEsIDY5NzM1LCA2OTczOSwgNjk3NDMsIDY5NzQ3LCAKLSAgICA2OTc1MSwgNjk3NTUsIDY5NzU5LCA2OTc2MywgNjk3NjcsIDY5NzcxLCA2OTc3NSwgNjk3NzksIDY5NzgzLCA2OTc4NywgCi0gICAgNjk3OTEsIDY5Nzk1LCA2OTc5OSwgNjk4MDIsIDY5ODA2LCA2OTgxMCwgNjk4MTQsIDY5ODE4LCA2OTgyMiwgNjk4MjYsIAotICAgIDY5ODMwLCA2OTgzNCwgNjk4MzgsIDY5ODQyLCA2OTg0NiwgNjk4NTAsIDY5ODU0LCA2OTg1OCwgNjk4NjIsIDY5ODY2LCAKLSAgICA2OTg3MCwgNjk4NzQsIDY5ODc4LCA2OTg4MiwgNjk4ODYsIDY5ODkwLCA2OTg5NCwgNjk4OTgsIDY5OTAyLCA2OTkwNiwgCi0gICAgNjk5MTAsIDY5OTE0LCA2OTkxOCwgNjk5MjIsIDY5OTI2LCA2OTkzMCwgNjk5MzQsIDY5OTM4LCA2OTk0MiwgNjk5NDYsIAotICAgIDY5OTQ5LCA2OTk1MywgNjk5NTcsIDY5OTYxLCA2OTk2NSwgNjk5NjksIDY5OTczLCA2OTk3NywgNjk5ODEsIDY5OTg1LCAKLSAgICA2OTk4OSwgNjk5OTMsIDY5OTk3LCA3MDAwMSwgNzAwMDUsIDcwMDA5LCA3MDAxMywgNzAwMTYsIDcwMDIwLCA3MDAyNCwgCi0gICAgNzAwMjgsIDcwMDMyLCA3MDAzNiwgNzAwNDAsIDcwMDQ0LCA3MDA0OCwgNzAwNTIsIDcwMDU2LCA3MDA2MCwgNzAwNjQsIAotICAgIDcwMDY4LCA3MDA3MiwgNzAwNzYsIDcwMDgwLCA3MDA4NCwgNzAwODgsIDcwMDkyLCA3MDA5NiwgNzAxMDAsIDcwMTAzLCAKLSAgICA3MDEwNywgNzAxMTEsIDcwMTE1LCA3MDExOSwgNzAxMjMsIDcwMTI3LCA3MDEzMSwgNzAxMzUsIDcwMTM5LCA3MDE0MywgCi0gICAgNzAxNDcsIDcwMTUxLCA3MDE1NSwgNzAxNTksIDcwMTYzLCA3MDE2NywgNzAxNzEsIDcwMTc1LCA3MDE3OSwgNzAxODMsIAotICAgIDcwMTg3LCA3MDE5MSwgNzAxOTUsIDcwMTk5LCA3MDIwMywgNzAyMDcsIDcwMjExLCA3MDIxNSwgNzAyMTksIDcwMjIzLCAKLSAgICA3MDIyNywgNzAyMzEsIDcwMjM1LCA3MDIzOSwgNzAyNDMsIDcwMjQ3LCA3MDI1MSwgNzAyNTUsIDcwMjU5LCA3MDI2MywgCi0gICAgNzAyNjcsIDcwMjcxLCA3MDI3NSwgNzAyNzgsIDcwMjgzLCA3MDI4NywgNzAyOTMsIDcwMjk4LCA3MDMwNCwgNzAzMDgsIAotICAgIDcwMzEyLCA3MDMxNiwgNzAzMjAsIDcwMzI0LCA3MDMyOCwgNzAzMzIsIDcwMzM2LCA3MDM0MCwgNzAzNDQsIDcwMzQ4LCAKLSAgICA3MDM1MiwgNzAzNTYsIDcwMzYwLCA3MDM2MywgNzAzNjYsIDcwMzY5LCA3MDM3MiwgNzAzNzUsIDcwMzc4LCA3MDM4MSwgCi0gICAgNzAzODQsIDcwMzg3LCA3MDM5MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgNzAzOTgsIDcwNDAzLCA3MDQwOCwgNzA0MTMsIDcwNDE4LCA3MDQyNSwgNzA0MzIsIDcwNDM3LCA3MDQ0MiwgCi0gICAgNzA0NDcsIDcwNDUyLCA3MDQ1OSwgNzA0NjYsIDcwNDczLCA3MDQ4MCwgNzA0ODcsIDcwNDk0LCA3MDUwNCwgNzA1MTQsIAotICAgIDcwNTIxLCA3MDUyOCwgNzA1MzUsIDcwNTQyLCA3MDU0OCwgNzA1NTQsIDcwNTYzLCA3MDU3MiwgNzA1NzksIDcwNTg2LCAKLSAgICA3MDU5NywgNzA2MDgsIDcwNjEzLCA3MDYxOCwgNzA2MjUsIDcwNjMyLCA3MDYzOSwgNzA2NDYsIDcwNjUzLCA3MDY2MCwgCi0gICAgNzA2NjcsIDcwNjc0LCA3MDY4MCwgNzA2ODYsIDcwNjkyLCA3MDY5OCwgNzA3MDUsIDcwNzEyLCA3MDcxNywgNzA3MjEsIAotICAgIDcwNzI4LCA3MDczNSwgNzA3NDIsIDcwNzQ2LCA3MDc1MywgNzA3NTcsIDcwNzYyLCA3MDc2NiwgNzA3NzIsIDcwNzc3LCAKLSAgICA3MDc4MywgNzA3ODgsIDcwNzkyLCA3MDc5NiwgNzA3OTksIDcwODAyLCA3MDgwNywgNzA4MTIsIDcwODE3LCA3MDgyMiwgCi0gICAgNzA4MjcsIDcwODMyLCA3MDgzNywgNzA4NDIsIDcwODQ3LCA3MDg1MiwgNzA4NjEsIDcwODcwLCA3MDg3NSwgNzA4ODAsIAotICAgIDcwODg1LCA3MDg5MCwgNzA4OTUsIDcwOTAwLCA3MDkwNSwgNzA5MTAsIDcwOTE1LCA3MDkyMCwgNzA5MjUsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDcwOTMwLCA3MDkzNiwgNzA5MzksIDcwOTQyLCA3MDk0NSwgNzA5NDksIDcwOTUzLCA3MDk1NywgCi0gICAgNzA5NjEsIDcwOTY0LCA3MDk2OCwgNzA5NzEsIDcwOTc1LCA3MDk3OCwgNzA5ODIsIDcwOTg2LCA3MDk5MCwgNzA5OTQsIAotICAgIDcwOTk4LCA3MTAwMiwgNzEwMDYsIDcxMDA5LCA3MTAxMywgNzEwMTcsIDcxMDIxLCA3MTAyNSwgNzEwMjksIDcxMDMzLCAKLSAgICA3MTAzNywgNzEwNDEsIDcxMDQ1LCA3MTA0OSwgNzEwNTMsIDcxMDU3LCA3MTA2MSwgNzEwNjUsIDcxMDY4LCA3MTA3MiwgCi0gICAgNzEwNzYsIDcxMDgwLCA3MTA4NCwgNzEwODgsIDcxMDkyLCA3MTA5NiwgNzExMDAsIDcxMTA0LCA3MTEwOCwgNzExMTIsIAotICAgIDcxMTE2LCA3MTEyMCwgNzExMjQsIDcxMTI4LCA3MTEzMiwgNzExMzYsIDcxMTQwLCA3MTE0NCwgNzExNDgsIDcxMTUyLCAKLSAgICA3MTE1NiwgNzExNjAsIDcxMTY0LCA3MTE2NywgNzExNzEsIDcxMTc1LCA3MTE3OSwgNzExODMsIDcxMTg3LCA3MTE5MSwgCi0gICAgNzExOTUsIDcxMTk4LCA3MTIwMiwgNzEyMDYsIDcxMjEwLCA3MTIxNCwgNzEyMTgsIDcxMjIyLCA3MTIyNiwgNzEyMzAsIAotICAgIDcxMjM0LCA3MTIzOCwgNzEyNDIsIDcxMjQ2LCA3MTI1MSwgNzEyNTYsIDcxMjU5LCA3MTI2NCwgNzEyNjcsIDcxMjcwLCAKLSAgICA3MTI3MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzEyNzcsIDcxMjg2LCA3MTI5NSwgNzEzMDQsIDcxMzEzLCA3MTMyMiwgCi0gICAgNzEzMzEsIDcxMzQwLCA3MTM0OSwgNzEzNTcsIDcxMzY0LCA3MTM3MiwgNzEzNzksIDcxMzg3LCA3MTM5NywgNzE0MDYsIAotICAgIDcxNDE2LCA3MTQyNSwgNzE0MzUsIDcxNDQzLCA3MTQ1MCwgNzE0NTgsIDcxNDY1LCA3MTQ3MywgNzE0NzgsIDcxNDgzLCAKLSAgICA3MTQ4OCwgNzE0OTcsIDcxNTAzLCA3MTUwOSwgNzE1MTYsIDcxNTI1LCA3MTUzMywgNzE1NDEsIDcxNTQ5LCA3MTU1NiwgCi0gICAgNzE1NjMsIDcxNTcwLCA3MTU3NywgNzE1ODIsIDcxNTg3LCA3MTU5MiwgNzE1OTcsIDcxNjAyLCA3MTYwNywgNzE2MTIsIAotICAgIDcxNjE3LCA3MTYyNSwgNzE2MzMsIDcxNjM5LCA3MTY0NSwgNzE2NTAsIDcxNjU1LCA3MTY2MCwgNzE2NjUsIDcxNjcwLCAKLSAgICA3MTY3NSwgNzE2ODAsIDcxNjg1LCA3MTY5MywgNzE3MDEsIDcxNzA2LCA3MTcxMSwgNzE3MjEsIDcxNzMxLCA3MTczOCwgCi0gICAgNzE3NDUsIDcxNzU0LCA3MTc2MywgNzE3NzUsIDcxNzg3LCA3MTc5MywgNzE3OTksIDcxODA3LCA3MTgxNSwgNzE4MjUsIAotICAgIDcxODM1LCA3MTg0MiwgNzE4NDksIDcxODU0LCA3MTg1OSwgNzE4NzEsIDcxODgzLCA3MTg5MSwgNzE4OTksIDcxOTA5LCAKLSAgICA3MTkxOSwgNzE5MzEsIDcxOTQzLCA3MTk1MiwgNzE5NjEsIDcxOTY4LCA3MTk3NSwgNzE5ODIsIDcxOTg5LCA3MTk5OCwgCi0gICAgNzIwMDcsIDcyMDEyLCA3MjAxNywgNzIwMjQsIDcyMDMxLCA3MjAzOCwgNzIwNDUsIDcyMDU3LCA3MjA2OSwgNzIwNzQsIAotICAgIDcyMDc5LCA3MjA4NCwgNzIwODksIDcyMDk0LCA3MjA5OSwgNzIxMDQsIDcyMTA5LCA3MjExMywgNzIxMTgsIDcyMTIzLCAKLSAgICA3MjEyOCwgNzIxMzMsIDcyMTM4LCA3MjE0NCwgNzIxNDksIDcyMTU0LCA3MjE2MSwgNzIxNjgsIDcyMTc1LCA3MjE4MiwgCi0gICAgNzIxODksIDcyMTk4LCA3MjIwNywgNzIyMTMsIDcyMjE5LCA3MjIyNSwgNzIyMzEsIDcyMjM4LCA3MjI0NSwgNzIyNTIsIAotICAgIDcyMjU5LCA3MjI2NiwgNzIyNzAsIDcyMjc3LCA3MjI4MiwgNzIyODcsIDcyMjk0LCAwLCA3MjMwNywgNzIzMTUsIDcyMzIzLCAKLSAgICA3MjMzMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzIzMzcsIDcyMzQ2LCA3MjM1NSwgNzIzNjQsIAotICAgIDcyMzczLCA3MjM4MiwgNzIzOTEsIDcyNDAwLCA3MjQwOSwgNzI0MTgsIDcyNDI3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCA2MzcwNiwgNjM3MTUsIDYzNzI0LCA2MzczNSwgNjM3NDIsIDYzNzQ3LCA2Mzc1MiwgNjM3NTksIDYzNzY2LCAKKyAgICA2Mzc3MiwgNjM3NzcsIDYzNzgyLCA2Mzc4NywgNjM3OTIsIDYzNzk5LCA2MzgwNCwgNjM4MDksIDYzODE0LCA2MzgyNSwgCisgICAgNjM4MzAsIDYzODM1LCA2Mzg0MiwgNjM4NDcsIDYzODU0LCA2Mzg1OSwgNjM4NjQsIDYzODcxLCA2Mzg3OCwgNjM4ODUsIAorICAgIDYzODk0LCA2MzkwMywgNjM5MDgsIDYzOTEzLCA2MzkxOCwgNjM5MjUsIDYzOTMwLCA2Mzk0MCwgNjM5NDcsIDYzOTUyLCAKKyAgICA2Mzk1NywgNjM5NjIsIDYzOTY3LCA2Mzk3MiwgNjM5NzcsIDYzOTg2LCA2Mzk5MywgNjQwMDAsIDY0MDA1LCA2NDAxMiwgCisgICAgNjQwMTcsIDY0MDI0LCA2NDAzMywgNjQwNDQsIDY0MDQ5LCA2NDA1OCwgNjQwNjMsIDY0MDcwLCA2NDA3OSwgNjQwODgsIAorICAgIDY0MDkzLCA2NDA5OCwgNjQxMDUsIDY0MTExLCA2NDExOCwgNjQxMjUsIDY0MTI5LCA2NDEzMywgNjQxMzYsIDY0MTQwLCAKKyAgICA2NDE0NCwgNjQxNDgsIDY0MTUyLCA2NDE1NiwgNjQxNjAsIDY0MTY0LCA2NDE2NywgNjQxNzEsIDY0MTc1LCA2NDE3OSwgCisgICAgNjQxODMsIDY0MTg3LCA2NDE5MSwgNjQxOTQsIDY0MTk4LCA2NDIwMiwgNjQyMDUsIDY0MjA5LCA2NDIxMywgNjQyMTcsIAorICAgIDY0MjIxLCA2NDIyNSwgNjQyMjksIDY0MjMzLCA2NDIzNywgNjQyNDEsIDY0MjQ1LCA2NDI0OSwgNjQyNTMsIDY0MjU3LCAKKyAgICA2NDI2MSwgNjQyNjUsIDY0MjY5LCA2NDI3MywgNjQyNzcsIDY0MjgxLCA2NDI4NSwgNjQyODksIDY0MjkzLCA2NDI5NywgCisgICAgNjQzMDEsIDY0MzA1LCA2NDMwOSwgNjQzMTMsIDY0MzE3LCA2NDMyMSwgNjQzMjUsIDY0MzI5LCA2NDMzMywgNjQzMzcsIAorICAgIDY0MzQxLCA2NDM0NSwgNjQzNDksIDY0MzUzLCA2NDM1NywgNjQzNjEsIDY0MzY1LCA2NDM2OSwgNjQzNzMsIDY0Mzc3LCAKKyAgICA2NDM4MSwgNjQzODQsIDY0Mzg4LCA2NDM5MiwgNjQzOTYsIDY0NDAwLCA2NDQwNCwgNjQ0MDgsIDY0NDEyLCA2NDQxNiwgCisgICAgNjQ0MjAsIDY0NDI0LCA2NDQyOCwgNjQ0MzIsIDY0NDM2LCA2NDQ0MCwgNjQ0NDQsIDY0NDQ4LCA2NDQ1MiwgNjQ0NTYsIAorICAgIDY0NDYwLCA2NDQ2NCwgNjQ0NjgsIDY0NDcyLCA2NDQ3NiwgNjQ0ODAsIDY0NDg0LCA2NDQ4OCwgNjQ0OTIsIDY0NDk2LCAKKyAgICA2NDUwMCwgNjQ1MDQsIDY0NTA4LCA2NDUxMiwgNjQ1MTYsIDY0NTIwLCA2NDUyNCwgNjQ1MjgsIDY0NTMyLCA2NDUzNiwgCisgICAgNjQ1NDAsIDY0NTQ0LCA2NDU0OCwgNjQ1NTIsIDY0NTU2LCA2NDU2MCwgNjQ1NjQsIDY0NTY4LCA2NDU3MiwgNjQ1NzYsIAorICAgIDY0NTgwLCA2NDU4NCwgNjQ1ODgsIDY0NTkyLCA2NDU5NiwgNjQ2MDAsIDY0NjA0LCA2NDYwOCwgNjQ2MTIsIDY0NjE2LCAKKyAgICA2NDYyMCwgNjQ2MjQsIDY0NjI4LCA2NDYzMiwgNjQ2MzYsIDY0NjQwLCA2NDY0NCwgNjQ2NDgsIDY0NjUyLCA2NDY1NiwgCisgICAgNjQ2NjAsIDY0NjY0LCA2NDY2OCwgNjQ2NzIsIDY0Njc2LCA2NDY4MCwgNjQ2ODQsIDY0Njg4LCA2NDY5MiwgNjQ2OTYsIAorICAgIDY0NzAwLCA2NDcwNCwgNjQ3MDgsIDY0NzEyLCA2NDcxNiwgNjQ3MjAsIDY0NzI0LCA2NDcyOCwgNjQ3MzIsIDY0NzM2LCAKKyAgICA2NDc0MCwgNjQ3NDQsIDY0NzQ4LCA2NDc1MiwgNjQ3NTYsIDY0NzYwLCA2NDc2NCwgNjQ3NjgsIDY0NzcyLCA2NDc3NiwgCisgICAgNjQ3ODAsIDY0Nzg0LCA2NDc4OCwgNjQ3OTIsIDY0Nzk2LCA2NDgwMCwgNjQ4MDQsIDY0ODA4LCA2NDgxMiwgNjQ4MTYsIAorICAgIDY0ODIwLCA2NDgyNCwgNjQ4MjgsIDY0ODMyLCA2NDgzNiwgNjQ4NDAsIDY0ODQ0LCA2NDg0OCwgNjQ4NTIsIDY0ODU1LCAKKyAgICA2NDg1OSwgNjQ4NjMsIDY0ODY3LCA2NDg3MSwgNjQ4NzUsIDY0ODc5LCA2NDg4MywgNjQ4ODcsIDY0ODkxLCA2NDg5NSwgCisgICAgNjQ4OTksIDY0OTAzLCA2NDkwNywgNjQ5MTEsIDY0OTE1LCA2NDkxOSwgNjQ5MjMsIDY0OTI3LCA2NDkzMSwgNjQ5MzUsIAorICAgIDY0OTM5LCA2NDk0MywgNjQ5NDcsIDY0OTUxLCA2NDk1NSwgNjQ5NTksIDY0OTYzLCA2NDk2NywgNjQ5NzEsIDY0OTc1LCAKKyAgICA2NDk3OSwgNjQ5ODMsIDY0OTg3LCA2NDk5MSwgNjQ5OTUsIDY0OTk5LCA2NTAwMywgNjUwMDcsIDY1MDExLCA2NTAxNSwgCisgICAgNjUwMTksIDY1MDIzLCA2NTAyNywgNjUwMzEsIDY1MDM1LCA2NTAzOSwgNjUwNDMsIDY1MDQ3LCA2NTA1MSwgNjUwNTUsIAorICAgIDY1MDU5LCA2NTA2MywgNjUwNjcsIDY1MDcxLCA2NTA3NSwgNjUwNzksIDY1MDgzLCA2NTA4NywgNjUwOTEsIDY1MDk1LCAKKyAgICA2NTA5OSwgNjUxMDMsIDY1MTA3LCA2NTExMSwgNjUxMTUsIDY1MTE5LCA2NTEyMywgNjUxMjcsIDY1MTMxLCA2NTEzNSwgCisgICAgNjUxMzksIDY1MTQzLCA2NTE0NywgNjUxNTEsIDY1MTU1LCA2NTE1OSwgNjUxNjMsIDY1MTY3LCA2NTE3MSwgNjUxNzUsIAorICAgIDY1MTc5LCA2NTE4MywgNjUxODcsIDY1MTkxLCA2NTE5NSwgNjUxOTksIDY1MjAzLCA2NTIwNywgNjUyMTEsIDY1MjE1LCAKKyAgICA2NTIxOSwgNjUyMjMsIDY1MjI3LCA2NTIzMSwgNjUyMzUsIDY1MjM5LCA2NTI0MywgNjUyNDcsIDY1MjUxLCA2NTI1NSwgCisgICAgNjUyNTksIDY1MjYzLCA2NTI2NywgNjUyNzEsIDY1Mjc1LCA2NTI3OSwgNjUyODMsIDY1Mjg3LCA2NTI5MSwgNjUyOTUsIAorICAgIDY1Mjk5LCA2NTMwMywgNjUzMDcsIDY1MzExLCA2NTMxNSwgNjUzMTgsIDY1MzIyLCA2NTMyNiwgNjUzMzAsIDY1MzM0LCAKKyAgICA2NTMzOCwgNjUzNDIsIDY1MzQ2LCA2NTM1MCwgNjUzNTQsIDY1MzU4LCA2NTM2MiwgNjUzNjYsIDY1MzcwLCA2NTM3NCwgCisgICAgNjUzNzgsIDY1MzgyLCA2NTM4NiwgNjUzOTAsIDY1Mzk0LCA2NTM5OCwgNjU0MDIsIDY1NDA2LCA2NTQxMCwgNjU0MTQsIAorICAgIDY1NDE4LCA2NTQyMiwgNjU0MjYsIDY1NDMwLCA2NTQzNCwgNjU0MzgsIDY1NDQyLCA2NTQ0NiwgNjU0NTAsIDY1NDU0LCAKKyAgICA2NTQ1OCwgNjU0NjIsIDY1NDY2LCA2NTQ3MCwgNjU0NzQsIDY1NDc4LCA2NTQ4MiwgNjU0ODYsIDY1NDkwLCA2NTQ5NCwgCisgICAgNjU0OTgsIDY1NTAyLCA2NTUwNiwgNjU1MTAsIDY1NTE0LCA2NTUxOCwgNjU1MjIsIDY1NTI2LCA2NTUzMCwgNjU1MzQsIAorICAgIDY1NTM4LCA2NTU0MiwgNjU1NDYsIDY1NTUwLCA2NTU1NCwgNjU1NTgsIDY1NTYyLCA2NTU2NiwgNjU1NzAsIDY1NTc0LCAKKyAgICA2NTU3OCwgNjU1ODIsIDY1NTg2LCA2NTU5MCwgNjU1OTQsIDY1NTk4LCA2NTYwMiwgNjU2MDYsIDY1NjEwLCA2NTYxNCwgCisgICAgNjU2MTgsIDY1NjIyLCA2NTYyNiwgNjU2MzAsIDY1NjM0LCA2NTYzOCwgNjU2NDIsIDY1NjQ2LCA2NTY1MCwgNjU2NTQsIAorICAgIDY1NjU4LCA2NTY2MiwgNjU2NjYsIDY1NjcwLCA2NTY3NCwgNjU2NzcsIDY1NjgxLCA2NTY4NSwgNjU2ODksIDY1NjkzLCAKKyAgICA2NTY5NywgNjU3MDEsIDY1NzA1LCA2NTcwOSwgNjU3MTMsIDY1NzE3LCA2NTcyMSwgNjU3MjUsIDY1NzI5LCA2NTczMywgCisgICAgNjU3MzcsIDY1NzQxLCA2NTc0NSwgNjU3NDksIDY1NzUzLCA2NTc1NywgNjU3NjEsIDY1NzY1LCA2NTc2OSwgNjU3NzMsIAorICAgIDY1Nzc3LCA2NTc4MSwgNjU3ODUsIDY1Nzg5LCA2NTc5MywgNjU3OTcsIDY1ODAxLCA2NTgwNSwgNjU4MDksIDY1ODEzLCAKKyAgICA2NTgxNywgNjU4MjEsIDY1ODI1LCA2NTgyOSwgNjU4MzMsIDY1ODM3LCA2NTg0MSwgNjU4NDUsIDY1ODQ5LCA2NTg1MywgCisgICAgNjU4NTcsIDY1ODYxLCA2NTg2NSwgNjU4NjksIDY1ODczLCA2NTg3NywgNjU4ODEsIDY1ODg1LCA2NTg4OSwgNjU4OTMsIAorICAgIDY1ODk3LCA2NTkwMSwgNjU5MDUsIDY1OTA5LCA2NTkxMywgNjU5MTcsIDY1OTIxLCA2NTkyNSwgNjU5MjksIDY1OTMzLCAKKyAgICA2NTkzNywgNjU5NDEsIDY1OTQ1LCA2NTk0OSwgNjU5NTMsIDY1OTU3LCA2NTk2MSwgNjU5NjUsIDY1OTY5LCA2NTk3MywgCisgICAgNjU5NzcsIDY1OTgxLCA2NTk4NSwgNjU5ODksIDY1OTkzLCA2NTk5NywgNjYwMDEsIDY2MDA1LCA2NjAwOSwgNjYwMTMsIAorICAgIDY2MDE3LCA2NjAyMSwgNjYwMjUsIDY2MDI5LCA2NjAzMywgNjYwMzcsIDY2MDQxLCA2NjA0NSwgNjYwNDksIDY2MDUzLCAKKyAgICA2NjA1NywgNjYwNjEsIDY2MDY1LCA2NjA2OSwgNjYwNzMsIDY2MDc3LCA2NjA4MSwgNjYwODUsIDY2MDg5LCA2NjA5MywgCisgICAgNjYwOTcsIDY2MTAxLCA2NjEwNSwgNjYxMDksIDY2MTEzLCA2NjExNywgNjYxMjEsIDY2MTI1LCA2NjEyOSwgNjYxMzMsIAorICAgIDY2MTM3LCA2NjE0MSwgNjYxNDUsIDY2MTQ5LCA2NjE1MywgNjYxNTcsIDY2MTYxLCA2NjE2NSwgNjYxNjksIDY2MTcyLCAKKyAgICA2NjE3NiwgNjYxODAsIDY2MTg0LCA2NjE4OCwgNjYxOTIsIDY2MTk2LCA2NjIwMCwgNjYyMDQsIDY2MjA4LCA2NjIxMiwgCisgICAgNjYyMTYsIDY2MjIwLCA2NjIyNCwgNjYyMjgsIDY2MjMyLCA2NjIzNiwgNjYyNDAsIDY2MjQ0LCA2NjI0OCwgNjYyNTIsIAorICAgIDY2MjU2LCA2NjI2MCwgNjYyNjQsIDY2MjY4LCA2NjI3MiwgNjYyNzYsIDY2MjgwLCA2NjI4NCwgNjYyODgsIDY2MjkyLCAKKyAgICA2NjI5NiwgNjYzMDAsIDY2MzA0LCA2NjMwOCwgNjYzMTIsIDY2MzE2LCA2NjMyMCwgNjYzMjQsIDY2MzI4LCA2NjMzMiwgCisgICAgNjYzMzYsIDY2MzQwLCA2NjM0NCwgNjYzNDgsIDY2MzUyLCA2NjM1NiwgNjYzNjAsIDY2MzY0LCA2NjM2OCwgNjYzNzIsIAorICAgIDY2Mzc2LCA2NjM4MCwgNjYzODQsIDY2Mzg4LCA2NjM5MiwgNjYzOTYsIDY2NDAwLCA2NjQwNCwgNjY0MDgsIDY2NDEyLCAKKyAgICA2NjQxNiwgNjY0MjAsIDY2NDI0LCA2NjQyOCwgNjY0MzIsIDY2NDM2LCA2NjQ0MCwgNjY0NDQsIDY2NDQ4LCA2NjQ1MiwgCisgICAgNjY0NTYsIDY2NDYwLCA2NjQ2NCwgNjY0NjgsIDY2NDcyLCA2NjQ3NiwgNjY0ODAsIDY2NDg0LCA2NjQ4OCwgNjY0OTIsIAorICAgIDY2NDk2LCA2NjUwMCwgNjY1MDQsIDY2NTA4LCA2NjUxMiwgNjY1MTYsIDY2NTIwLCA2NjUyNCwgNjY1MjgsIDY2NTMyLCAKKyAgICA2NjUzNiwgNjY1NDAsIDY2NTQ0LCA2NjU0OCwgNjY1NTIsIDY2NTU2LCA2NjU2MCwgNjY1NjQsIDY2NTY4LCA2NjU3MiwgCisgICAgNjY1NzYsIDY2NTgwLCA2NjU4NCwgNjY1ODgsIDY2NTkyLCA2NjU5NiwgNjY2MDAsIDY2NjA0LCA2NjYwOCwgNjY2MTIsIAorICAgIDY2NjE2LCA2NjYyMCwgNjY2MjQsIDY2NjI3LCA2NjYzMSwgNjY2MzUsIDY2NjM5LCA2NjY0MywgNjY2NDcsIDY2NjUxLCAKKyAgICA2NjY1NSwgNjY2NTksIDY2NjYzLCA2NjY2NywgNjY2NzEsIDY2Njc1LCA2NjY3OSwgNjY2ODMsIDY2Njg3LCA2NjY5MSwgCisgICAgNjY2OTUsIDY2Njk5LCA2NjcwMywgNjY3MDcsIDY2NzExLCA2NjcxNSwgNjY3MTksIDY2NzIzLCA2NjcyNywgNjY3MzEsIAorICAgIDY2NzM1LCA2NjczOSwgNjY3NDMsIDY2NzQ3LCA2Njc1MSwgNjY3NTUsIDY2NzU5LCA2Njc2MywgNjY3NjcsIDY2NzcxLCAKKyAgICA2Njc3NSwgNjY3NzksIDY2NzgzLCA2Njc4NywgNjY3OTEsIDY2Nzk1LCA2Njc5OSwgNjY4MDMsIDY2ODA3LCA2NjgxMSwgCisgICAgNjY4MTUsIDY2ODE5LCA2NjgyMywgNjY4MjcsIDY2ODMxLCA2NjgzNSwgNjY4MzksIDY2ODQzLCA2Njg0NywgNjY4NTEsIAorICAgIDY2ODU1LCA2Njg1OSwgNjY4NjMsIDY2ODY3LCA2Njg3MSwgNjY4NzUsIDY2ODc5LCA2Njg4MywgNjY4ODcsIDY2ODkxLCAKKyAgICA2Njg5NSwgNjY4OTksIDY2OTAzLCA2NjkwNywgNjY5MTEsIDY2OTE1LCA2NjkxOSwgNjY5MjMsIDY2OTI3LCA2NjkzMSwgCisgICAgNjY5MzUsIDY2OTM5LCA2Njk0MywgNjY5NDcsIDY2OTUxLCA2Njk1NSwgNjY5NTksIDY2OTYzLCA2Njk2NywgNjY5NzEsIAorICAgIDY2OTc1LCA2Njk3OSwgNjY5ODMsIDY2OTg3LCA2Njk5MSwgNjY5OTUsIDY2OTk5LCA2NzAwMywgNjcwMDcsIDY3MDExLCAKKyAgICA2NzAxNSwgNjcwMTksIDY3MDIzLCA2NzAyNywgNjcwMzEsIDY3MDM1LCA2NzAzOSwgNjcwNDMsIDY3MDQ3LCA2NzA1MSwgCisgICAgNjcwNTUsIDY3MDU5LCA2NzA2MywgNjcwNjcsIDY3MDcxLCA2NzA3NSwgNjcwNzksIDY3MDgzLCA2NzA4NywgNjcwOTEsIAorICAgIDY3MDk1LCA2NzA5OSwgNjcxMDMsIDY3MTA3LCA2NzExMSwgNjcxMTUsIDY3MTE5LCA2NzEyMywgNjcxMjcsIDY3MTMxLCAKKyAgICA2NzEzNSwgNjcxMzksIDY3MTQzLCA2NzE0NywgNjcxNTEsIDY3MTU1LCA2NzE1OSwgNjcxNjMsIDY3MTY3LCA2NzE3MSwgCisgICAgNjcxNzUsIDY3MTc5LCA2NzE4MywgNjcxODcsIDY3MTkxLCA2NzE5NSwgNjcxOTksIDY3MjAzLCA2NzIwNywgNjcyMTEsIAorICAgIDY3MjE1LCA2NzIxOSwgNjcyMjMsIDY3MjI3LCA2NzIzMCwgNjcyMzQsIDY3MjM4LCA2NzI0MiwgNjcyNDYsIDY3MjUwLCAKKyAgICA2NzI1NCwgNjcyNTgsIDY3MjYxLCA2NzI2NSwgNjcyNjksIDY3MjczLCA2NzI3NywgNjcyODEsIDY3Mjg1LCA2NzI4OSwgCisgICAgNjcyOTMsIDY3Mjk3LCA2NzMwMSwgNjczMDUsIDY3MzA5LCA2NzMxMywgNjczMTcsIDY3MzIxLCA2NzMyNSwgNjczMjksIAorICAgIDY3MzMzLCA2NzMzNywgNjczNDEsIDY3MzQ1LCA2NzM0OSwgNjczNTMsIDY3MzU3LCA2NzM2MSwgNjczNjUsIDY3MzY5LCAKKyAgICA2NzM3MywgNjczNzcsIDY3MzgxLCA2NzM4NSwgNjczODksIDY3MzkzLCA2NzM5NywgNjc0MDEsIDY3NDA1LCA2NzQwOSwgCisgICAgNjc0MTMsIDY3NDE3LCA2NzQyMSwgNjc0MjUsIDY3NDI5LCA2NzQzMywgNjc0MzcsIDY3NDQxLCA2NzQ0NSwgNjc0NDksIAorICAgIDY3NDUzLCA2NzQ1NywgNjc0NjEsIDY3NDY1LCA2NzQ2OSwgNjc0NzMsIDY3NDc3LCA2NzQ4MSwgNjc0ODUsIDY3NDg5LCAKKyAgICA2NzQ5MywgNjc0OTcsIDY3NTAxLCA2NzUwNSwgNjc1MDksIDY3NTEzLCA2NzUxNywgNjc1MjEsIDY3NTI1LCA2NzUyOSwgCisgICAgNjc1MzMsIDY3NTM3LCA2NzU0MSwgNjc1NDUsIDY3NTQ5LCA2NzU1MywgNjc1NTcsIDY3NTYxLCA2NzU2NSwgNjc1NjksIAorICAgIDY3NTczLCA2NzU3NywgNjc1ODEsIDY3NTg1LCA2NzU4OSwgNjc1OTMsIDY3NTk3LCA2NzYwMSwgNjc2MDUsIDY3NjA5LCAKKyAgICA2NzYxMywgNjc2MTcsIDY3NjIxLCA2NzYyNSwgNjc2MjksIDY3NjMzLCA2NzYzNywgNjc2NDEsIDY3NjQ1LCA2NzY0OSwgCisgICAgNjc2NTMsIDY3NjU3LCA2NzY2MSwgNjc2NjUsIDY3NjY5LCA2NzY3MywgNjc2NzcsIDY3NjgxLCA2NzY4NSwgNjc2ODksIAorICAgIDY3NjkzLCA2NzY5NywgNjc3MDEsIDY3NzA1LCA2NzcwOSwgNjc3MTMsIDY3NzE3LCA2NzcyMSwgNjc3MjUsIDY3NzI5LCAKKyAgICA2NzczMywgNjc3MzcsIDY3NzQxLCA2Nzc0NSwgNjc3NDksIDY3NzUzLCA2Nzc1NywgNjc3NjEsIDY3NzY1LCA2Nzc2OSwgCisgICAgNjc3NzMsIDY3Nzc3LCA2Nzc4MSwgNjc3ODUsIDY3Nzg5LCA2Nzc5MywgNjc3OTcsIDY3ODAxLCA2NzgwNSwgNjc4MDksIAorICAgIDY3ODEzLCA2NzgxNywgNjc4MjEsIDY3ODI1LCA2NzgyOSwgNjc4MzMsIDY3ODM3LCA2Nzg0MSwgNjc4NDUsIDY3ODQ5LCAKKyAgICA2Nzg1MywgNjc4NTcsIDY3ODYxLCA2Nzg2NSwgNjc4NjksIDY3ODczLCA2Nzg3NywgNjc4ODEsIDY3ODg1LCA2Nzg4OSwgCisgICAgNjc4OTMsIDY3ODk3LCA2NzkwMSwgNjc5MDUsIDY3OTA5LCA2NzkxMywgNjc5MTcsIDY3OTIxLCA2NzkyNSwgNjc5MjksIAorICAgIDY3OTMzLCA2NzkzNywgNjc5NDEsIDY3OTQ1LCA2Nzk0OSwgNjc5NTMsIDY3OTU3LCA2Nzk2MSwgNjc5NjUsIDY3OTY5LCAKKyAgICA2Nzk3MywgNjc5NzcsIDY3OTgxLCA2Nzk4NSwgNjc5ODgsIDY3OTkyLCA2Nzk5NiwgNjgwMDAsIDY4MDA0LCA2ODAwOCwgCisgICAgNjgwMTIsIDY4MDE2LCA2ODAyMCwgNjgwMjQsIDY4MDI4LCA2ODAzMiwgNjgwMzYsIDY4MDQwLCA2ODA0NCwgNjgwNDgsIAorICAgIDY4MDUyLCA2ODA1NiwgNjgwNjAsIDY4MDY0LCA2ODA2OCwgNjgwNzIsIDY4MDc2LCA2ODA4MCwgNjgwODQsIDY4MDg4LCAKKyAgICA2ODA5MiwgNjgwOTYsIDY4MTAwLCA2ODEwNCwgNjgxMDgsIDY4MTEyLCA2ODExNiwgNjgxMjAsIDY4MTI0LCA2ODEyOCwgCisgICAgNjgxMzIsIDY4MTM2LCA2ODE0MCwgNjgxNDQsIDY4MTQ4LCA2ODE1MiwgNjgxNTYsIDY4MTYwLCA2ODE2NCwgNjgxNjgsIAorICAgIDY4MTcyLCA2ODE3NiwgNjgxODAsIDY4MTg0LCA2ODE4OCwgNjgxOTIsIDY4MTk2LCA2ODIwMCwgNjgyMDQsIDY4MjA4LCAKKyAgICA2ODIxMiwgNjgyMTYsIDY4MjIwLCA2ODIyNCwgNjgyMjgsIDY4MjMyLCA2ODIzNiwgNjgyNDAsIDY4MjQ0LCA2ODI0OCwgCisgICAgNjgyNTIsIDY4MjU2LCA2ODI2MCwgNjgyNjQsIDY4MjY4LCA2ODI3MiwgNjgyNzYsIDY4MjgwLCA2ODI4NCwgNjgyODgsIAorICAgIDY4MjkyLCA2ODI5NiwgNjgzMDAsIDY4MzA0LCA2ODMwOCwgNjgzMTIsIDY4MzE2LCA2ODMyMCwgNjgzMjQsIDY4MzI4LCAKKyAgICA2ODMzMiwgNjgzMzYsIDY4MzQwLCA2ODM0NCwgNjgzNDgsIDY4MzUyLCA2ODM1NiwgNjgzNjAsIDY4MzY0LCA2ODM2OCwgCisgICAgNjgzNzIsIDY4Mzc2LCA2ODM4MCwgNjgzODQsIDY4Mzg4LCA2ODM5MiwgNjgzOTYsIDY4NDAwLCA2ODQwNCwgNjg0MDgsIAorICAgIDY4NDEyLCA2ODQxNiwgNjg0MjAsIDY4NDI0LCA2ODQyOCwgNjg0MzIsIDY4NDM2LCA2ODQ0MCwgNjg0NDQsIDY4NDQ4LCAKKyAgICA2ODQ1MiwgNjg0NTYsIDY4NDYwLCA2ODQ2NCwgNjg0NjgsIDY4NDcyLCA2ODQ3NiwgNjg0ODAsIDY4NDg0LCA2ODQ4OCwgCisgICAgNjg0OTIsIDY4NDk2LCA2ODUwMCwgNjg1MDQsIDY4NTA4LCA2ODUxMiwgNjg1MTYsIDY4NTIwLCA2ODUyNCwgNjg1MjgsIAorICAgIDY4NTMyLCA2ODUzNiwgNjg1NDAsIDY4NTQ0LCA2ODU0OCwgNjg1NTIsIDY4NTU2LCA2ODU2MCwgNjg1NjQsIDY4NTY4LCAKKyAgICA2ODU3MiwgNjg1NzYsIDY4NTgwLCA2ODU4NCwgNjg1ODgsIDY4NTkyLCA2ODU5NiwgNjg2MDAsIDY4NjA0LCA2ODYwOCwgCisgICAgNjg2MTIsIDY4NjE2LCA2ODYyMCwgNjg2MjQsIDY4NjI4LCA2ODYzMiwgNjg2MzYsIDY4NjQwLCA2ODY0NCwgNjg2NDgsIAorICAgIDY4NjUyLCA2ODY1NiwgNjg2NjAsIDY4NjY0LCA2ODY2OCwgNjg2NzIsIDY4Njc2LCA2ODY4MCwgNjg2ODQsIDY4Njg4LCAKKyAgICA2ODY5MiwgNjg2OTYsIDY4NzAwLCA2ODcwNCwgNjg3MDgsIDY4NzEyLCA2ODcxNiwgNjg3MjAsIDY4NzI0LCA2ODcyOCwgCisgICAgNjg3MzIsIDY4NzM2LCA2ODc0MCwgNjg3NDQsIDY4NzQ4LCA2ODc1MiwgNjg3NTYsIDY4NzYwLCA2ODc2NCwgNjg3NjgsIDAsIAorICAgIDAsIDAsIDY4NzcyLCA2ODc3NiwgNjg3ODAsIDY4Nzg0LCA2ODc4OCwgNjg3OTIsIDY4Nzk2LCA2ODgwMCwgNjg4MDQsIAorICAgIDY4ODA4LCA2ODgxMiwgNjg4MTYsIDY4ODIwLCA2ODgyNCwgNjg4MjgsIDY4ODMyLCA2ODgzNiwgNjg4NDAsIDY4ODQ0LCAKKyAgICA2ODg0OCwgNjg4NTIsIDY4ODU2LCA2ODg2MCwgNjg4NjQsIDY4ODY4LCA2ODg3MiwgNjg4NzYsIDY4ODgwLCA2ODg4NCwgCisgICAgNjg4ODgsIDY4ODkyLCA2ODg5NiwgNjg5MDAsIDY4OTA0LCA2ODkwOCwgNjg5MTIsIDY4OTE2LCA2ODkyMCwgNjg5MjQsIAorICAgIDY4OTI4LCA2ODkzMiwgNjg5MzYsIDY4OTQwLCA2ODk0NCwgNjg5NDgsIDY4OTUyLCA2ODk1NiwgNjg5NjAsIDY4OTY0LCAKKyAgICA2ODk2OCwgNjg5NzIsIDY4OTc2LCA2ODk4MCwgNjg5ODQsIDY4OTg4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA2ODk5MiwgNjg5OTcsIDY5MDAxLCA2OTAwNiwgNjkwMTEsIDY5MDE2LCA2OTAyMSwgNjkwMjYsIDY5MDMwLCA2OTAzNSwgCisgICAgNjkwNDAsIDY5MDQ1LCA2OTA1MCwgNjkwNTUsIDY5MDYwLCA2OTA2NSwgNjkwNjksIDY5MDczLCA2OTA3OCwgNjkwODIsIAorICAgIDY5MDg3LCA2OTA5MiwgNjkwOTcsIDY5MTAxLCA2OTEwNiwgNjkxMTEsIDY5MTE2LCA2OTEyMSwgNjkxMjYsIDY5MTMwLCAKKyAgICA2OTEzNSwgNjkxMzksIDY5MTQ0LCA2OTE0OCwgNjkxNTMsIDY5MTU3LCA2OTE2MSwgNjkxNjUsIDY5MTcwLCA2OTE3NSwgCisgICAgNjkxODAsIDY5MTg4LCA2OTE5NiwgNjkyMDQsIDY5MjEyLCA2OTIxOSwgNjkyMjcsIDY5MjMzLCA2OTI0MSwgNjkyNDUsIAorICAgIDY5MjQ5LCA2OTI1MywgNjkyNTcsIDY5MjYxLCA2OTI2NSwgNjkyNjksIDY5MjczLCA2OTI3NywgNjkyODEsIDY5Mjg1LCAKKyAgICA2OTI4OSwgNjkyOTMsIDY5Mjk3LCA2OTMwMSwgNjkzMDUsIDY5MzA5LCA2OTMxMywgNjkzMTcsIDY5MzIxLCA2OTMyNSwgCisgICAgNjkzMjksIDY5MzMzLCA2OTMzNywgNjkzNDEsIDY5MzQ1LCA2OTM0OSwgNjkzNTMsIDY5MzU3LCA2OTM2MSwgNjkzNjUsIAorICAgIDY5MzY5LCA2OTM3MywgNjkzNzcsIDY5MzgxLCA2OTM4NSwgNjkzODgsIDY5MzkyLCA2OTM5NiwgNjk0MDAsIDY5NDA0LCAKKyAgICA2OTQwOCwgNjk0MTIsIDY5NDE2LCA2OTQyMCwgNjk0MjQsIDY5NDI4LCA2OTQzMiwgNjk0MzYsIDY5NDQwLCA2OTQ0NCwgCisgICAgNjk0NDgsIDY5NDUyLCA2OTQ1NiwgNjk0NjAsIDY5NDY0LCA2OTQ2OCwgNjk0NzIsIDY5NDc2LCA2OTQ4MCwgNjk0ODQsIAorICAgIDY5NDg4LCA2OTQ5MiwgNjk0OTYsIDY5NTAwLCA2OTUwNCwgNjk1MDgsIDY5NTEyLCA2OTUxNiwgNjk1MjAsIDY5NTI0LCAKKyAgICA2OTUyOCwgNjk1MzIsIDY5NTM1LCA2OTUzOSwgNjk1NDMsIDY5NTQ2LCA2OTU1MCwgNjk1NTQsIDY5NTU4LCA2OTU2MSwgCisgICAgNjk1NjUsIDY5NTY5LCA2OTU3MywgNjk1NzcsIDY5NTgxLCA2OTU4NSwgNjk1ODksIDY5NTkzLCA2OTU5NywgNjk2MDEsIAorICAgIDY5NjA1LCA2OTYwOSwgNjk2MTMsIDY5NjE3LCA2OTYyMCwgNjk2MjQsIDY5NjI4LCA2OTYzMSwgNjk2MzUsIDY5NjM5LCAKKyAgICA2OTY0MywgNjk2NDcsIDY5NjUxLCA2OTY1NSwgNjk2NTgsIDY5NjYxLCA2OTY2NSwgNjk2NjksIDY5NjczLCA2OTY3NiwgCisgICAgNjk2NzksIDY5NjgzLCA2OTY4NywgNjk2OTEsIDY5Njk1LCA2OTY5OSwgNjk3MDMsIDY5NzA3LCA2OTcxMSwgNjk3MTUsIAorICAgIDY5NzE5LCA2OTcyMywgNjk3MjcsIDY5NzMxLCA2OTczNSwgNjk3MzksIDY5NzQzLCA2OTc0NywgNjk3NTEsIDY5NzU1LCAKKyAgICA2OTc1OSwgNjk3NjMsIDY5NzY3LCA2OTc3MSwgNjk3NzUsIDY5Nzc5LCA2OTc4MywgNjk3ODcsIDY5NzkxLCA2OTc5NSwgCisgICAgNjk3OTksIDY5ODAzLCA2OTgwNywgNjk4MTEsIDY5ODE1LCA2OTgxOSwgNjk4MjMsIDY5ODI3LCA2OTgzMCwgNjk4MzQsIAorICAgIDY5ODM4LCA2OTg0MiwgNjk4NDYsIDY5ODUwLCA2OTg1NCwgNjk4NTgsIDY5ODYyLCA2OTg2NiwgNjk4NzAsIDY5ODc0LCAKKyAgICA2OTg3OCwgNjk4ODIsIDY5ODg2LCA2OTg5MCwgNjk4OTQsIDY5ODk4LCA2OTkwMiwgNjk5MDYsIDY5OTEwLCA2OTkxNCwgCisgICAgNjk5MTgsIDY5OTIyLCA2OTkyNiwgNjk5MzAsIDY5OTM0LCA2OTkzOCwgNjk5NDIsIDY5OTQ2LCA2OTk1MCwgNjk5NTQsIAorICAgIDY5OTU4LCA2OTk2MiwgNjk5NjYsIDY5OTcwLCA2OTk3NCwgNjk5NzcsIDY5OTgxLCA2OTk4NSwgNjk5ODksIDY5OTkzLCAKKyAgICA2OTk5NywgNzAwMDEsIDcwMDA1LCA3MDAwOSwgNzAwMTMsIDcwMDE3LCA3MDAyMSwgNzAwMjUsIDcwMDI5LCA3MDAzMywgCisgICAgNzAwMzcsIDcwMDQxLCA3MDA0NCwgNzAwNDgsIDcwMDUyLCA3MDA1NiwgNzAwNjAsIDcwMDY0LCA3MDA2OCwgNzAwNzIsIAorICAgIDcwMDc2LCA3MDA4MCwgNzAwODQsIDcwMDg4LCA3MDA5MiwgNzAwOTYsIDcwMTAwLCA3MDEwNCwgNzAxMDgsIDcwMTEyLCAKKyAgICA3MDExNiwgNzAxMjAsIDcwMTI0LCA3MDEyOCwgNzAxMzEsIDcwMTM1LCA3MDEzOSwgNzAxNDMsIDcwMTQ3LCA3MDE1MSwgCisgICAgNzAxNTUsIDcwMTU5LCA3MDE2MywgNzAxNjcsIDcwMTcxLCA3MDE3NSwgNzAxNzksIDcwMTgzLCA3MDE4NywgNzAxOTEsIAorICAgIDcwMTk1LCA3MDE5OSwgNzAyMDMsIDcwMjA3LCA3MDIxMSwgNzAyMTUsIDcwMjE5LCA3MDIyMywgNzAyMjcsIDcwMjMxLCAKKyAgICA3MDIzNSwgNzAyMzksIDcwMjQzLCA3MDI0NywgNzAyNTEsIDcwMjU1LCA3MDI1OSwgNzAyNjMsIDcwMjY3LCA3MDI3MSwgCisgICAgNzAyNzUsIDcwMjc5LCA3MDI4MywgNzAyODcsIDcwMjkxLCA3MDI5NSwgNzAyOTksIDcwMzAzLCA3MDMwNiwgNzAzMTEsIAorICAgIDcwMzE1LCA3MDMyMSwgNzAzMjYsIDcwMzMyLCA3MDMzNiwgNzAzNDAsIDcwMzQ0LCA3MDM0OCwgNzAzNTIsIDcwMzU2LCAKKyAgICA3MDM2MCwgNzAzNjQsIDcwMzY4LCA3MDM3MiwgNzAzNzYsIDcwMzgwLCA3MDM4NCwgNzAzODgsIDcwMzkxLCA3MDM5NCwgCisgICAgNzAzOTcsIDcwNDAwLCA3MDQwMywgNzA0MDYsIDcwNDA5LCA3MDQxMiwgNzA0MTUsIDcwNDIwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3MDQyNiwgNzA0MzEsIDcwNDM2LCA3MDQ0MSwgCisgICAgNzA0NDYsIDcwNDUzLCA3MDQ2MCwgNzA0NjUsIDcwNDcwLCA3MDQ3NSwgNzA0ODAsIDcwNDg3LCA3MDQ5NCwgNzA1MDEsIAorICAgIDcwNTA4LCA3MDUxNSwgNzA1MjIsIDcwNTMyLCA3MDU0MiwgNzA1NDksIDcwNTU2LCA3MDU2MywgNzA1NzAsIDcwNTc2LCAKKyAgICA3MDU4MiwgNzA1OTEsIDcwNjAwLCA3MDYwNywgNzA2MTQsIDcwNjI1LCA3MDYzNiwgNzA2NDEsIDcwNjQ2LCA3MDY1MywgCisgICAgNzA2NjAsIDcwNjY3LCA3MDY3NCwgNzA2ODEsIDcwNjg4LCA3MDY5NSwgNzA3MDIsIDcwNzA4LCA3MDcxNCwgNzA3MjAsIAorICAgIDcwNzI2LCA3MDczMywgNzA3NDAsIDcwNzQ1LCA3MDc0OSwgNzA3NTYsIDcwNzYzLCA3MDc3MCwgNzA3NzQsIDcwNzgxLCAKKyAgICA3MDc4NSwgNzA3OTAsIDcwNzk0LCA3MDgwMCwgNzA4MDUsIDcwODExLCA3MDgxNiwgNzA4MjAsIDcwODI0LCA3MDgyNywgCisgICAgNzA4MzAsIDcwODM1LCA3MDg0MCwgNzA4NDUsIDcwODUwLCA3MDg1NSwgNzA4NjAsIDcwODY1LCA3MDg3MCwgNzA4NzUsIAorICAgIDcwODgwLCA3MDg4OSwgNzA4OTgsIDcwOTAzLCA3MDkwOCwgNzA5MTMsIDcwOTE4LCA3MDkyMywgNzA5MjgsIDcwOTMzLCAKKyAgICA3MDkzOCwgNzA5NDMsIDcwOTQ4LCA3MDk1MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzA5NTgsIDcwOTY0LCA3MDk2NywgCisgICAgNzA5NzAsIDcwOTczLCA3MDk3NywgNzA5ODEsIDcwOTg1LCA3MDk4OSwgNzA5OTIsIDcwOTk2LCA3MDk5OSwgNzEwMDMsIAorICAgIDcxMDA2LCA3MTAxMCwgNzEwMTQsIDcxMDE4LCA3MTAyMiwgNzEwMjYsIDcxMDMwLCA3MTAzNCwgNzEwMzcsIDcxMDQxLCAKKyAgICA3MTA0NSwgNzEwNDksIDcxMDUzLCA3MTA1NywgNzEwNjEsIDcxMDY1LCA3MTA2OSwgNzEwNzMsIDcxMDc3LCA3MTA4MSwgCisgICAgNzEwODUsIDcxMDg5LCA3MTA5MywgNzEwOTYsIDcxMTAwLCA3MTEwNCwgNzExMDgsIDcxMTEyLCA3MTExNiwgNzExMjAsIAorICAgIDcxMTI0LCA3MTEyOCwgNzExMzIsIDcxMTM2LCA3MTE0MCwgNzExNDQsIDcxMTQ4LCA3MTE1MiwgNzExNTYsIDcxMTYwLCAKKyAgICA3MTE2NCwgNzExNjgsIDcxMTcyLCA3MTE3NiwgNzExODAsIDcxMTg0LCA3MTE4OCwgNzExOTIsIDcxMTk1LCA3MTE5OSwgCisgICAgNzEyMDMsIDcxMjA3LCA3MTIxMSwgNzEyMTUsIDcxMjE5LCA3MTIyMywgNzEyMjYsIDcxMjMwLCA3MTIzNCwgNzEyMzgsIAorICAgIDcxMjQyLCA3MTI0NiwgNzEyNTAsIDcxMjU0LCA3MTI1OCwgNzEyNjIsIDcxMjY2LCA3MTI3MCwgNzEyNzQsIDcxMjc5LCAKKyAgICA3MTI4NCwgNzEyODcsIDcxMjkyLCA3MTI5NSwgNzEyOTgsIDcxMzAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3MTMwNSwgCisgICAgNzEzMTQsIDcxMzIzLCA3MTMzMiwgNzEzNDEsIDcxMzUwLCA3MTM1OSwgNzEzNjgsIDcxMzc3LCA3MTM4NSwgNzEzOTIsIAorICAgIDcxNDAwLCA3MTQwNywgNzE0MTUsIDcxNDI1LCA3MTQzNCwgNzE0NDQsIDcxNDUzLCA3MTQ2MywgNzE0NzEsIDcxNDc4LCAKKyAgICA3MTQ4NiwgNzE0OTMsIDcxNTAxLCA3MTUwNiwgNzE1MTEsIDcxNTE2LCA3MTUyNSwgNzE1MzEsIDcxNTM3LCA3MTU0NCwgCisgICAgNzE1NTMsIDcxNTYxLCA3MTU2OSwgNzE1NzcsIDcxNTg0LCA3MTU5MSwgNzE1OTgsIDcxNjA1LCA3MTYxMCwgNzE2MTUsIAorICAgIDcxNjIwLCA3MTYyNSwgNzE2MzAsIDcxNjM1LCA3MTY0MCwgNzE2NDUsIDcxNjUzLCA3MTY2MSwgNzE2NjcsIDcxNjczLCAKKyAgICA3MTY3OCwgNzE2ODMsIDcxNjg4LCA3MTY5MywgNzE2OTgsIDcxNzAzLCA3MTcwOCwgNzE3MTMsIDcxNzIxLCA3MTcyOSwgCisgICAgNzE3MzQsIDcxNzM5LCA3MTc0OSwgNzE3NTksIDcxNzY2LCA3MTc3MywgNzE3ODIsIDcxNzkxLCA3MTgwMywgNzE4MTUsIAorICAgIDcxODIxLCA3MTgyNywgNzE4MzUsIDcxODQzLCA3MTg1MywgNzE4NjMsIDcxODcwLCA3MTg3NywgNzE4ODIsIDcxODg3LCAKKyAgICA3MTg5OSwgNzE5MTEsIDcxOTE5LCA3MTkyNywgNzE5MzcsIDcxOTQ3LCA3MTk1OSwgNzE5NzEsIDcxOTgwLCA3MTk4OSwgCisgICAgNzE5OTYsIDcyMDAzLCA3MjAxMCwgNzIwMTcsIDcyMDI2LCA3MjAzNSwgNzIwNDAsIDcyMDQ1LCA3MjA1MiwgNzIwNTksIAorICAgIDcyMDY2LCA3MjA3MywgNzIwODUsIDcyMDk3LCA3MjEwMiwgNzIxMDcsIDcyMTEyLCA3MjExNywgNzIxMjIsIDcyMTI3LCAKKyAgICA3MjEzMiwgNzIxMzcsIDcyMTQxLCA3MjE0NiwgNzIxNTEsIDcyMTU2LCA3MjE2MSwgNzIxNjYsIDcyMTcyLCA3MjE3NywgCisgICAgNzIxODIsIDcyMTg5LCA3MjE5NiwgNzIyMDMsIDcyMjEwLCA3MjIxNywgNzIyMjYsIDcyMjM1LCA3MjI0MSwgNzIyNDcsIAorICAgIDcyMjUzLCA3MjI1OSwgNzIyNjYsIDcyMjczLCA3MjI4MCwgNzIyODcsIDcyMjk0LCA3MjI5OCwgNzIzMDUsIDcyMzEwLCAKKyAgICA3MjMxNSwgNzIzMjIsIDAsIDcyMzM1LCA3MjM0MywgNzIzNTEsIDcyMzU4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCA3MjM2NSwgNzIzNzQsIDcyMzgzLCA3MjM5MiwgNzI0MDEsIDcyNDEwLCA3MjQxOSwgNzI0MjgsIDcyNDM3LCAKKyAgICA3MjQ0NiwgNzI0NTUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcyNDM0LCAKLSAgICA3MjQ0MSwgNzI0NDcsIDcyNDU0LCA3MjQ2MiwgNzI0NzAsIDcyNDc3LCA3MjQ4NSwgNzI0OTIsIDcyNDk4LCA3MjUwNCwgCi0gICAgNzI1MTEsIDcyNTE3LCA3MjUyMywgNzI1MjksIDcyNTM2LCA3MjU0MywgNzI1NTAsIDcyNTU3LCA3MjU2NCwgNzI1NzEsIAotICAgIDcyNTc4LCA3MjU4NSwgNzI1OTIsIDcyNTk5LCA3MjYwNiwgNzI2MTMsIDcyNjIwLCA3MjYyNywgNzI2MzMsIDcyNjQwLCAKLSAgICA3MjY0NywgNzI2NTQsIDcyNjYxLCA3MjY2OCwgNzI2NzUsIDcyNjgyLCA3MjY4OSwgNzI2OTYsIDcyNzAzLCA3MjcxMCwgCi0gICAgNzI3MTcsIDcyNzI0LCA3MjczMSwgNzI3MzgsIDcyNzQ1LCA3Mjc1MiwgNzI3NTksIDcyNzY3LCA3Mjc3NSwgNzI3ODMsIAotICAgIDcyNzkxLCAwLCAwLCAwLCAwLCA3Mjc5OSwgNzI4MDgsIDcyODE3LCA3MjgyNiwgNzI4MzUsIDcyODQ0LCA3Mjg1MywgCi0gICAgNzI4NjAsIDcyODY3LCA3Mjg3NCwgMCwgMCwgMCwgMCwgMCwgMCwgNzI4ODEsIDcyODg1LCA3Mjg5MCwgNzI4OTUsIDcyOTAwLCAKLSAgICA3MjkwNSwgNzI5MTAsIDcyOTE1LCA3MjkyMCwgNzI5MjUsIDcyOTMwLCA3MjkzNSwgNzI5MzksIDcyOTQzLCA3Mjk0OCwgCi0gICAgNzI5NTMsIDcyOTU3LCA3Mjk2MiwgNzI5NjcsIDcyOTcyLCA3Mjk3NywgNzI5ODIsIDcyOTg3LCA3Mjk5MiwgNzI5OTYsIAotICAgIDczMDAwLCA3MzAwNSwgNzMwMTAsIDczMDE0LCA3MzAxOCwgNzMwMjIsIDczMDI2LCA3MzAzMCwgNzMwMzQsIDczMDM4LCAKLSAgICA3MzA0MywgNzMwNDgsIDczMDUzLCA3MzA1OCwgNzMwNjMsIDczMDcwLCA3MzA3NiwgNzMwODEsIDczMDg2LCA3MzA5MSwgCi0gICAgNzMwOTYsIDczMTAyLCA3MzEwOSwgNzMxMTUsIDczMTIyLCA3MzEyOCwgNzMxMzQsIDczMTM5LCA3MzE0NiwgNzMxNTIsIAotICAgIDczMTU3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3MzE2MywgNzMxNjcsIDczMTcxLCA3MzE3NCwgNzMxNzgsIDczMTgxLCAKLSAgICA3MzE4NSwgNzMxODgsIDczMTkyLCA3MzE5NiwgNzMyMDEsIDczMjA1LCA3MzIxMCwgNzMyMTMsIDczMjE3LCA3MzIyMSwgCi0gICAgNzMyMjQsIDczMjI4LCA3MzIzMiwgNzMyMzUsIDczMjM5LCA3MzI0MywgNzMyNDcsIDczMjUxLCA3MzI1NSwgNzMyNTksIAotICAgIDczMjYzLCA3MzI2NywgNzMyNzEsIDczMjc1LCA3MzI3OSwgNzMyODMsIDczMjg3LCA3MzI5MSwgNzMyOTUsIDczMjk5LCAKLSAgICA3MzMwMywgNzMzMDcsIDczMzEwLCA3MzMxMywgNzMzMTcsIDczMzIxLCA3MzMyNSwgNzMzMjgsIDczMzMxLCA3MzMzNCwgCi0gICAgNzMzMzgsIDczMzQyLCA3MzM0NiwgNzMzNTAsIDczMzUzLCA3MzM1NiwgNzMzNjAsIDczMzY1LCA3MzM3MCwgNzMzNzQsIAotICAgIDczMzc5LCA3MzM4MywgNzMzODgsIDczMzkzLCA3MzM5OSwgNzM0MDQsIDczNDEwLCA3MzQxNCwgNzM0MTksIDczNDI0LCAKLSAgICA3MzQyOCwgNzM0MzMsIDczNDM4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3MzQ0MiwgNzM0NDUsIDczNDQ5LCAKLSAgICA3MzQ1MywgNzM0NTYsIDczNDU5LCA3MzQ2MiwgNzM0NjUsIDczNDY4LCA3MzQ3MSwgNzM0NzQsIDczNDc3LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCA3MzQ4MCwgNzM0ODUsIDczNDg5LCA3MzQ5MywgNzM0OTcsIDczNTAxLCA3MzUwNSwgNzM1MDksIDczNTEzLCAKLSAgICA3MzUxNywgNzM1MjEsIDczNTI1LCA3MzUyOSwgNzM1MzMsIDczNTM3LCA3MzU0MSwgNzM1NDUsIDczNTUwLCA3MzU1NSwgCi0gICAgNzM1NjEsIDczNTY3LCA3MzU3NCwgNzM1NzksIDczNTg0LCA3MzU5MCwgNzM1OTQsIDczNTk5LCA3MzYwMiwgMCwgMCwgMCwgCi0gICAgMCwgNzM2MDUsIDczNjEyLCA3MzYxOCwgNzM2MjQsIDczNjMwLCA3MzYzNiwgNzM2NDIsIDczNjQ4LCA3MzY1NCwgNzM2NjAsIAotICAgIDczNjY2LCA3MzY3MiwgNzM2NzksIDczNjg2LCA3MzY5MywgNzM2OTksIDczNzA2LCA3MzcxMywgNzM3MjAsIDczNzI3LCAKLSAgICA3MzczNCwgNzM3NDAsIDczNzQ2LCA3Mzc1MywgNzM3NTksIDczNzY2LCA3Mzc3MywgNzM3NzksIDczNzg1LCA3Mzc5MiwgCi0gICAgNzM3OTksIDczODA2LCA3MzgxMiwgNzM4MTksIDczODI2LCA3MzgzMiwgNzM4MzksIDczODQ1LCA3Mzg1MiwgNzM4NTksIAotICAgIDczODY1LCA3Mzg3MSwgNzM4NzgsIDczODg0LCA3Mzg5MSwgNzM4OTgsIDczOTA3LCA3MzkxNCwgNzM5MjEsIDczOTI1LCAKLSAgICA3MzkzMCwgNzM5MzUsIDczOTQwLCA3Mzk0NSwgNzM5NDksIDczOTUzLCA3Mzk1OCwgNzM5NjIsIDczOTY3LCA3Mzk3MiwgCi0gICAgNzM5NzcsIDczOTgxLCA3Mzk4NSwgNzM5OTAsIDczOTk0LCA3Mzk5OSwgNzQwMDMsIDc0MDA4LCA3NDAxMywgNzQwMTgsIAotICAgIDc0MDIzLCA3NDAyNywgNzQwMzIsIDc0MDM3LCA3NDA0MiwgNzQwNDgsIDc0MDUzLCA3NDA1OSwgNzQwNjUsIDc0MDcxLCAKLSAgICA3NDA3NywgNzQwODMsIDc0MDg4LCA3NDA5NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzQwOTgsIAotICAgIDc0MTAzLCA3NDEwNywgNzQxMTEsIDc0MTE1LCA3NDExOSwgNzQxMjMsIDc0MTI3LCA3NDEzMSwgNzQxMzUsIDc0MTM5LCAKLSAgICA3NDE0MywgNzQxNDcsIDc0MTUxLCA3NDE1NSwgNzQxNTksIDc0MTYzLCA3NDE2NywgNzQxNzEsIDc0MTc1LCA3NDE3OSwgCi0gICAgNzQxODMsIDc0MTg3LCA3NDE5MSwgNzQxOTUsIDc0MTk5LCA3NDIwMywgNzQyMDcsIDc0MjExLCA3NDIxNSwgMCwgMCwgMCwgCi0gICAgNzQyMTksIDc0MjIzLCA3NDIyNywgNzQyMzEsIDc0MjM1LCA3NDIzOCwgNzQyNDQsIDc0MjQ3LCA3NDI1MSwgNzQyNTQsIAotICAgIDc0MjYwLCA3NDI2NiwgNzQyNzQsIDc0Mjc3LCA3NDI4MSwgNzQyODQsIDc0Mjg3LCA3NDI5MywgNzQyOTksIDc0MzAzLCAKLSAgICA3NDMwOSwgNzQzMTMsIDc0MzE3LCA3NDMyMywgNzQzMjcsIDc0MzMzLCA3NDMzOSwgNzQzNDMsIDc0MzQ3LCA3NDM1MywgCi0gICAgNzQzNTcsIDc0MzYzLCA3NDM2OSwgNzQzNzMsIDc0Mzc5LCA3NDM4MywgNzQzODksIDc0MzkyLCA3NDM5NSwgNzQ0MDEsIAotICAgIDc0NDA1LCA3NDQxMSwgNzQ0MTQsIDc0NDE3LCA3NDQyMCwgNzQ0MjYsIDc0NDMwLCA3NDQzNCwgNzQ0NDAsIDc0NDQ2LCAKLSAgICA3NDQ0OSwgNzQ0NTIsIDc0NDU4LCA3NDQ2MywgNzQ0NjgsIDc0NDczLCA3NDQ4MCwgNzQ0ODUsIDc0NDkyLCA3NDQ5NywgCi0gICAgNzQ1MDQsIDc0NTA5LCA3NDUxNCwgNzQ1MTksIDc0NTI0LCA3NDUyNywgNzQ1MzEsIDc0NTM1LCA3NDU0MCwgNzQ1NDUsIAotICAgIDc0NTUwLCA3NDU1NSwgNzQ1NjAsIDc0NTY1LCA3NDU3MCwgNzQ1NzUsIDc0NTgyLCA3NDU4NywgMCwgNzQ1OTQsIDc0NTk3LCAKLSAgICA3NDYwMSwgNzQ2MDQsIDc0NjA3LCA3NDYxMCwgNzQ2MTMsIDc0NjE2LCA3NDYxOSwgNzQ2MjIsIDc0NjI1LCAwLCAwLCAwLCAKLSAgICAwLCA3NDYyOCwgNzQ2MzUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc0NjQwLCA3NDY0MywgNzQ2NDYsIDc0NjQ5LCA3NDY1MiwgCi0gICAgNzQ2NTYsIDc0NjU5LCA3NDY2MiwgNzQ2NjYsIDc0NjcwLCA3NDY3NCwgNzQ2NzgsIDc0NjgyLCA3NDY4NiwgNzQ2OTAsIAotICAgIDc0Njk0LCA3NDY5OCwgNzQ3MDIsIDc0NzA2LCA3NDcxMCwgNzQ3MTQsIDc0NzE4LCA3NDcyMiwgNzQ3MjYsIDc0NzMwLCAKLSAgICA3NDczMywgNzQ3MzcsIDc0NzQwLCA3NDc0NCwgNzQ3NDgsIDc0NzUyLCA3NDc1NiwgNzQ3NjAsIDc0NzYzLCA3NDc2NywgCi0gICAgNzQ3NzAsIDc0NzczLCA3NDc3NywgNzQ3ODEsIDc0Nzg1LCA3NDc4OCwgNzQ3OTEsIDc0Nzk2LCA3NDgwMCwgNzQ4MDUsIAotICAgIDc0ODEwLCA3NDgxNCwgNzQ4MTksIDc0ODIzLCA3NDgyOCwgNzQ4MzMsIDc0ODM4LCA3NDg0MiwgNzQ4NDYsIDc0ODUxLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3NDg1NiwgNzQ4NjEsIDc0ODY2LCA3NDg3MSwgNzQ4NzcsIDc0ODgyLCA3NDg4NywgCi0gICAgNzQ4OTIsIDc0ODk3LCA3NDkwMiwgNzQ5MDYsIDc0OTEwLCA3NDkxNSwgNzQ5MjAsIDAsIDAsIDc0OTI2LCA3NDkzMCwgCi0gICAgNzQ5MzMsIDc0OTM2LCA3NDkzOSwgNzQ5NDIsIDc0OTQ1LCA3NDk0OCwgNzQ5NTEsIDc0OTU0LCAwLCAwLCA3NDk1NywgCi0gICAgNzQ5NjIsIDc0OTY3LCA3NDk3MywgNzQ5ODAsIDc0OTg2LCA3NDk5MiwgNzQ5OTgsIDc1MDA0LCA3NTAxMCwgNzUwMTYsIAotICAgIDc1MDIyLCA3NTAyOCwgNzUwMzQsIDc1MDQwLCA3NTA0NiwgNzUwNTEsIDc1MDU2LCA3NTA2MSwgNzUwNjcsIDc1MDczLCAKLSAgICA3NTA4MCwgNzUwODYsIDc1MDkyLCA3NTA5NywgNzUxMDQsIDc1MTExLCA3NTExOCwgNzUxMjQsIDc1MTI5LCA3NTEzNCwgCi0gICAgNzUxMzksIDAsIDAsIDAsIDAsIDc1MTQ3LCA3NTE1MywgNzUxNTksIDc1MTY1LCA3NTE3MSwgNzUxNzcsIDc1MTgzLCAKLSAgICA3NTE4OSwgNzUxOTUsIDc1MjAxLCA3NTIwNywgNzUyMTMsIDc1MjE5LCA3NTIyNSwgNzUyMzEsIDc1MjM3LCA3NTI0MywgCi0gICAgNzUyNDksIDc1MjU1LCA3NTI2MSwgNzUyNjcsIDc1MjcyLCA3NTI3NywgNzUyODMsIDc1Mjg5LCA3NTI5NSwgNzUzMDEsIAotICAgIDc1MzA3LCA3NTMxMywgNzUzMTksIDc1MzI1LCA3NTMzMSwgNzUzMzcsIDc1MzQzLCA3NTM0OSwgNzUzNTUsIDc1MzYxLCAKLSAgICA3NTM2NywgNzUzNzMsIDc1Mzc5LCA3NTM4NSwgNzUzOTEsIDc1Mzk3LCA3NTQwMywgNzU0MDksIDc1NDE1LCA3NTQyMSwgCi0gICAgNzU0MjYsIDc1NDMxLCA3NTQzNywgNzU0NDIsIDc1NDQ2LCA3NTQ1MSwgNzU0NTUsIDc1NDU5LCA3NTQ2MywgNzU0NjksIAotICAgIDc1NDc0LCA3NTQ3OSwgNzU0ODQsIDc1NDg5LCA3NTQ5NCwgNzU0OTksIDc1NTA0LCA3NTUxMSwgNzU1MTgsIDc1NTI1LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3MjQ2MiwgNzI0NjksIDcyNDc1LCA3MjQ4MiwgNzI0OTAsIDcyNDk4LCAKKyAgICA3MjUwNSwgNzI1MTMsIDcyNTIwLCA3MjUyNiwgNzI1MzIsIDcyNTM5LCA3MjU0NSwgNzI1NTEsIDcyNTU3LCA3MjU2NCwgCisgICAgNzI1NzEsIDcyNTc4LCA3MjU4NSwgNzI1OTIsIDcyNTk5LCA3MjYwNiwgNzI2MTMsIDcyNjIwLCA3MjYyNywgNzI2MzQsIAorICAgIDcyNjQxLCA3MjY0OCwgNzI2NTUsIDcyNjYxLCA3MjY2OCwgNzI2NzUsIDcyNjgyLCA3MjY4OSwgNzI2OTYsIDcyNzAzLCAKKyAgICA3MjcxMCwgNzI3MTcsIDcyNzI0LCA3MjczMSwgNzI3MzgsIDcyNzQ1LCA3Mjc1MiwgNzI3NTksIDcyNzY2LCA3Mjc3MywgCisgICAgNzI3ODAsIDcyNzg3LCA3Mjc5NSwgNzI4MDMsIDcyODExLCA3MjgxOSwgMCwgMCwgMCwgMCwgNzI4MjcsIDcyODM2LCAKKyAgICA3Mjg0NSwgNzI4NTQsIDcyODYzLCA3Mjg3MiwgNzI4ODEsIDcyODg4LCA3Mjg5NSwgNzI5MDIsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDcyOTA5LCA3MjkxMywgNzI5MTgsIDcyOTIzLCA3MjkyOCwgNzI5MzMsIDcyOTM4LCA3Mjk0MywgNzI5NDgsIDcyOTUzLCAKKyAgICA3Mjk1OCwgNzI5NjMsIDcyOTY3LCA3Mjk3MSwgNzI5NzYsIDcyOTgxLCA3Mjk4NSwgNzI5OTAsIDcyOTk1LCA3MzAwMCwgCisgICAgNzMwMDUsIDczMDEwLCA3MzAxNSwgNzMwMjAsIDczMDI0LCA3MzAyOCwgNzMwMzMsIDczMDM4LCA3MzA0MiwgNzMwNDYsIAorICAgIDczMDUwLCA3MzA1NCwgNzMwNTgsIDczMDYyLCA3MzA2NiwgNzMwNzEsIDczMDc2LCA3MzA4MSwgNzMwODYsIDczMDkxLCAKKyAgICA3MzA5OCwgNzMxMDQsIDczMTA5LCA3MzExNCwgNzMxMTksIDczMTI0LCA3MzEzMCwgNzMxMzcsIDczMTQzLCA3MzE1MCwgCisgICAgNzMxNTYsIDczMTYyLCA3MzE2NywgNzMxNzQsIDczMTgwLCA3MzE4NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzMxOTEsIAorICAgIDczMTk1LCA3MzE5OSwgNzMyMDIsIDczMjA2LCA3MzIwOSwgNzMyMTMsIDczMjE2LCA3MzIyMCwgNzMyMjQsIDczMjI5LCAKKyAgICA3MzIzMywgNzMyMzgsIDczMjQxLCA3MzI0NSwgNzMyNDksIDczMjUyLCA3MzI1NiwgNzMyNjAsIDczMjYzLCA3MzI2NywgCisgICAgNzMyNzEsIDczMjc1LCA3MzI3OSwgNzMyODMsIDczMjg3LCA3MzI5MSwgNzMyOTUsIDczMjk5LCA3MzMwMywgNzMzMDcsIAorICAgIDczMzExLCA3MzMxNSwgNzMzMTksIDczMzIzLCA3MzMyNywgNzMzMzEsIDczMzM1LCA3MzMzOCwgNzMzNDEsIDczMzQ1LCAKKyAgICA3MzM0OSwgNzMzNTMsIDczMzU2LCA3MzM1OSwgNzMzNjIsIDczMzY2LCA3MzM3MCwgNzMzNzQsIDczMzc4LCA3MzM4MSwgCisgICAgNzMzODQsIDczMzg4LCA3MzM5MywgNzMzOTgsIDczNDAyLCA3MzQwNywgNzM0MTEsIDczNDE2LCA3MzQyMSwgNzM0MjcsIAorICAgIDczNDMyLCA3MzQzOCwgNzM0NDIsIDczNDQ3LCA3MzQ1MiwgNzM0NTYsIDczNDYxLCA3MzQ2NiwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgNzM0NzAsIDczNDczLCA3MzQ3NywgNzM0ODEsIDczNDg0LCA3MzQ4NywgNzM0OTAsIDczNDkzLCA3MzQ5NiwgCisgICAgNzM0OTksIDczNTAyLCA3MzUwNSwgMCwgMCwgMCwgMCwgMCwgMCwgNzM1MDgsIDczNTEzLCA3MzUxNywgNzM1MjEsIDczNTI1LCAKKyAgICA3MzUyOSwgNzM1MzMsIDczNTM3LCA3MzU0MSwgNzM1NDUsIDczNTQ5LCA3MzU1MywgNzM1NTcsIDczNTYxLCA3MzU2NSwgCisgICAgNzM1NjksIDczNTczLCA3MzU3OCwgNzM1ODMsIDczNTg5LCA3MzU5NSwgNzM2MDIsIDczNjA3LCA3MzYxMiwgNzM2MTgsIAorICAgIDczNjIyLCA3MzYyNywgNzM2MzAsIDAsIDAsIDAsIDAsIDczNjMzLCA3MzY0MCwgNzM2NDYsIDczNjUyLCA3MzY1OCwgCisgICAgNzM2NjQsIDczNjcwLCA3MzY3NiwgNzM2ODIsIDczNjg4LCA3MzY5NCwgNzM3MDAsIDczNzA3LCA3MzcxNCwgNzM3MjEsIAorICAgIDczNzI3LCA3MzczNCwgNzM3NDEsIDczNzQ4LCA3Mzc1NSwgNzM3NjIsIDczNzY4LCA3Mzc3NCwgNzM3ODEsIDczNzg3LCAKKyAgICA3Mzc5NCwgNzM4MDEsIDczODA3LCA3MzgxMywgNzM4MjAsIDczODI3LCA3MzgzNCwgNzM4NDAsIDczODQ3LCA3Mzg1NCwgCisgICAgNzM4NjAsIDczODY3LCA3Mzg3MywgNzM4ODAsIDczODg3LCA3Mzg5MywgNzM4OTksIDczOTA2LCA3MzkxMiwgNzM5MTksIAorICAgIDczOTI2LCA3MzkzNSwgNzM5NDIsIDczOTQ5LCA3Mzk1MywgNzM5NTgsIDczOTYzLCA3Mzk2OCwgNzM5NzMsIDczOTc3LCAKKyAgICA3Mzk4MSwgNzM5ODYsIDczOTkwLCA3Mzk5NSwgNzQwMDAsIDc0MDA1LCA3NDAwOSwgNzQwMTMsIDc0MDE4LCA3NDAyMiwgCisgICAgNzQwMjcsIDc0MDMxLCA3NDAzNiwgNzQwNDEsIDc0MDQ2LCA3NDA1MSwgNzQwNTUsIDc0MDYwLCA3NDA2NSwgNzQwNzAsIAorICAgIDc0MDc2LCA3NDA4MSwgNzQwODcsIDc0MDkzLCA3NDA5OSwgNzQxMDUsIDc0MTExLCA3NDExNiwgNzQxMjIsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc0MTI2LCA3NDEzMSwgNzQxMzUsIDc0MTM5LCA3NDE0MywgNzQxNDcsIDc0MTUxLCAKKyAgICA3NDE1NSwgNzQxNTksIDc0MTYzLCA3NDE2NywgNzQxNzEsIDc0MTc1LCA3NDE3OSwgNzQxODMsIDc0MTg3LCA3NDE5MSwgCisgICAgNzQxOTUsIDc0MTk5LCA3NDIwMywgNzQyMDcsIDc0MjExLCA3NDIxNSwgNzQyMTksIDc0MjIzLCA3NDIyNywgNzQyMzEsIAorICAgIDc0MjM1LCA3NDIzOSwgNzQyNDMsIDAsIDAsIDAsIDc0MjQ3LCA3NDI1MSwgNzQyNTUsIDc0MjU5LCA3NDI2MywgNzQyNjYsIAorICAgIDc0MjcyLCA3NDI3NSwgNzQyNzksIDc0MjgyLCA3NDI4OCwgNzQyOTQsIDc0MzAyLCA3NDMwNSwgNzQzMDksIDc0MzEyLCAKKyAgICA3NDMxNSwgNzQzMjEsIDc0MzI3LCA3NDMzMSwgNzQzMzcsIDc0MzQxLCA3NDM0NSwgNzQzNTEsIDc0MzU1LCA3NDM2MSwgCisgICAgNzQzNjcsIDc0MzcxLCA3NDM3NSwgNzQzODEsIDc0Mzg1LCA3NDM5MSwgNzQzOTcsIDc0NDAxLCA3NDQwNywgNzQ0MTEsIAorICAgIDc0NDE3LCA3NDQyMCwgNzQ0MjMsIDc0NDI5LCA3NDQzMywgNzQ0MzksIDc0NDQyLCA3NDQ0NSwgNzQ0NDgsIDc0NDU0LCAKKyAgICA3NDQ1OCwgNzQ0NjIsIDc0NDY4LCA3NDQ3NCwgNzQ0NzcsIDc0NDgwLCA3NDQ4NiwgNzQ0OTEsIDc0NDk2LCA3NDUwMSwgCisgICAgNzQ1MDgsIDc0NTEzLCA3NDUyMCwgNzQ1MjUsIDc0NTMyLCA3NDUzNywgNzQ1NDIsIDc0NTQ3LCA3NDU1MiwgNzQ1NTUsIAorICAgIDc0NTU5LCA3NDU2MywgNzQ1NjgsIDc0NTczLCA3NDU3OCwgNzQ1ODMsIDc0NTg4LCA3NDU5MywgNzQ1OTgsIDc0NjAzLCAKKyAgICA3NDYxMCwgNzQ2MTUsIDAsIDc0NjIyLCA3NDYyNSwgNzQ2MjksIDc0NjMyLCA3NDYzNSwgNzQ2MzgsIDc0NjQxLCA3NDY0NCwgCisgICAgNzQ2NDcsIDc0NjUwLCA3NDY1MywgMCwgMCwgMCwgMCwgNzQ2NTYsIDc0NjYzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICA3NTUzMiwgNzU1MzcsIDc1NTQyLCA3NTU0NywgNzU1NTQsIDc1NTYxLCA3NTU2NSwgNzU1NjksIDc1NTc0LCA3NTU3OSwgCi0gICAgNzU1ODQsIDc1NTg5LCA3NTU5NCwgNzU1OTksIDc1NjA0LCA3NTYwOSwgNzU2MTQsIDc1NjIwLCA3NTYyNiwgNzU2MzIsIAotICAgIDc1NjM4LCA3NTY0NCwgNzU2NDgsIDc1NjU0LCA3NTY1OCwgNzU2NjQsIDc1NjcxLCA3NTY3NywgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgNzU2ODEsIDc1Njg1LCA3NTY4OSwgNzU2OTMsIDc1Njk3LCA3NTcwMSwgMCwgMCwgNzU3MDUsIDc1NzA5LCAKLSAgICA3NTcxMywgNzU3MTcsIDc1NzIxLCA3NTcyNSwgMCwgMCwgNzU3MjksIDc1NzMzLCA3NTczNywgNzU3NDEsIDc1NzQ1LCAKLSAgICA3NTc0OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzU3NTMsIDc1NzU3LCA3NTc2MSwgNzU3NjUsIDc1NzY5LCAKLSAgICA3NTc3MywgNzU3NzcsIDAsIDc1NzgxLCA3NTc4NSwgNzU3ODksIDc1NzkzLCA3NTc5NywgNzU4MDEsIDc1ODA1LCAwLCAwLCAKKyAgICA3NDY2OCwgNzQ2NzEsIDc0Njc0LCA3NDY3NywgNzQ2ODAsIDc0Njg0LCA3NDY4NywgNzQ2OTAsIDc0Njk0LCA3NDY5OCwgCisgICAgNzQ3MDIsIDc0NzA2LCA3NDcxMCwgNzQ3MTQsIDc0NzE4LCA3NDcyMiwgNzQ3MjYsIDc0NzMwLCA3NDczNCwgNzQ3MzgsIAorICAgIDc0NzQyLCA3NDc0NiwgNzQ3NTAsIDc0NzU0LCA3NDc1OCwgNzQ3NjEsIDc0NzY1LCA3NDc2OCwgNzQ3NzIsIDc0Nzc2LCAKKyAgICA3NDc4MCwgNzQ3ODQsIDc0Nzg4LCA3NDc5MSwgNzQ3OTUsIDc0Nzk4LCA3NDgwMSwgNzQ4MDUsIDc0ODA5LCA3NDgxMywgCisgICAgNzQ4MTYsIDc0ODE5LCA3NDgyNCwgNzQ4MjgsIDc0ODMzLCA3NDgzOCwgNzQ4NDIsIDc0ODQ3LCA3NDg1MSwgNzQ4NTYsIAorICAgIDc0ODYxLCA3NDg2NiwgNzQ4NzAsIDc0ODc0LCA3NDg3OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzQ4ODQsIAorICAgIDc0ODg5LCA3NDg5NCwgNzQ4OTksIDc0OTA1LCA3NDkxMCwgNzQ5MTUsIDc0OTIwLCA3NDkyNSwgNzQ5MzAsIDc0OTM0LCAKKyAgICA3NDkzOCwgNzQ5NDMsIDc0OTQ4LCAwLCAwLCA3NDk1NCwgNzQ5NTgsIDc0OTYxLCA3NDk2NCwgNzQ5NjcsIDc0OTcwLCAKKyAgICA3NDk3MywgNzQ5NzYsIDc0OTc5LCA3NDk4MiwgMCwgMCwgNzQ5ODUsIDc0OTkwLCA3NDk5NSwgNzUwMDEsIDc1MDA4LCAKKyAgICA3NTAxNCwgNzUwMjAsIDc1MDI2LCA3NTAzMiwgNzUwMzgsIDc1MDQ0LCA3NTA1MCwgNzUwNTYsIDc1MDYyLCA3NTA2OCwgCisgICAgNzUwNzQsIDc1MDc5LCA3NTA4NCwgNzUwODksIDc1MDk1LCA3NTEwMSwgNzUxMDgsIDc1MTE0LCA3NTEyMCwgNzUxMjUsIAorICAgIDc1MTMyLCA3NTEzOSwgNzUxNDYsIDc1MTUyLCA3NTE1NywgNzUxNjIsIDc1MTY3LCAwLCAwLCAwLCAwLCA3NTE3NSwgCisgICAgNzUxODEsIDc1MTg3LCA3NTE5MywgNzUxOTksIDc1MjA1LCA3NTIxMSwgNzUyMTcsIDc1MjIzLCA3NTIyOSwgNzUyMzUsIAorICAgIDc1MjQxLCA3NTI0NywgNzUyNTMsIDc1MjU5LCA3NTI2NSwgNzUyNzEsIDc1Mjc3LCA3NTI4MywgNzUyODksIDc1Mjk1LCAKKyAgICA3NTMwMCwgNzUzMDUsIDc1MzExLCA3NTMxNywgNzUzMjMsIDc1MzI5LCA3NTMzNSwgNzUzNDEsIDc1MzQ3LCA3NTM1MywgCisgICAgNzUzNTksIDc1MzY1LCA3NTM3MSwgNzUzNzcsIDc1MzgzLCA3NTM4OSwgNzUzOTUsIDc1NDAxLCA3NTQwNywgNzU0MTMsIAorICAgIDc1NDE5LCA3NTQyNSwgNzU0MzEsIDc1NDM3LCA3NTQ0MywgNzU0NDksIDc1NDU0LCA3NTQ1OSwgNzU0NjUsIDc1NDcwLCAKKyAgICA3NTQ3NCwgNzU0NzksIDc1NDgzLCA3NTQ4NywgNzU0OTEsIDc1NDk3LCA3NTUwMiwgNzU1MDcsIDc1NTEyLCA3NTUxNywgCisgICAgNzU1MjIsIDc1NTI3LCA3NTUzMiwgNzU1MzksIDc1NTQ2LCA3NTU1MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzU1NjAsIDc1NTY1LCA3NTU3MCwgNzU1NzUsIAorICAgIDc1NTgyLCA3NTU4OSwgNzU1OTMsIDc1NTk3LCA3NTYwMiwgNzU2MDcsIDc1NjEyLCA3NTYxNywgNzU2MjIsIDc1NjI3LCAKKyAgICA3NTYzMiwgNzU2MzcsIDc1NjQyLCA3NTY0OCwgNzU2NTQsIDc1NjYwLCA3NTY2NiwgNzU2NzIsIDc1Njc2LCA3NTY4MiwgCisgICAgNzU2ODYsIDc1NjkyLCA3NTY5OSwgNzU3MDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc1NzA5LCA3NTcxMywgCisgICAgNzU3MTcsIDc1NzIxLCA3NTcyNSwgNzU3MjksIDAsIDAsIDc1NzMzLCA3NTczNywgNzU3NDEsIDc1NzQ1LCA3NTc0OSwgCisgICAgNzU3NTMsIDAsIDAsIDc1NzU3LCA3NTc2MSwgNzU3NjUsIDc1NzY5LCA3NTc3MywgNzU3NzcsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDc1NzgxLCA3NTc4NSwgNzU3ODksIDc1NzkzLCA3NTc5NywgNzU4MDEsIDc1ODA1LCAwLCA3NTgwOSwgCisgICAgNzU4MTMsIDc1ODE3LCA3NTgyMSwgNzU4MjUsIDc1ODI5LCA3NTgzMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgNzU4MDksIDc1ODE0LCA3NTgxOSwgNzU4MjQsIDc1ODI5LCA3NTgzMywgNzU4MzcsIDc1ODQyLCA3NTg0NywgNzU4NTIsIAotICAgIDc1ODU3LCA3NTg2MiwgNzU4NjcsIDc1ODcyLCA3NTg3NywgNzU4ODIsIDc1ODg2LCA3NTg5MSwgNzU4OTYsIDc1OTAxLCAKLSAgICA3NTkwNiwgNzU5MTEsIDc1OTE2LCA3NTkyMSwgNzU5MjYsIDc1OTMxLCA3NTkzNiwgNzU5NDEsIDc1OTQ4LCA3NTk1NSwgCi0gICAgNzU5NjIsIDc1OTY5LCA3NTk3NiwgNzU5ODMsIDc1OTkwLCA3NTk5NywgNzYwMDMsIDc2MDA5LCA3NjAxNSwgNzYwMjEsIAotICAgIDc2MDI3LCA3NjAzMywgNzYwMzksIDc2MDQ1LCA3NjA0OSwgNzYwNTUsIDAsIDAsIDc2MDYxLCA3NjA2NiwgNzYwNzAsIAotICAgIDc2MDc0LCA3NjA3OCwgNzYwODIsIDc2MDg2LCA3NjA5MCwgNzYwOTQsIDc2MDk4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3NTgzNywgNzU4NDIsIDc1ODQ3LCA3NTg1MiwgCisgICAgNzU4NTcsIDc1ODYxLCA3NTg2NSwgNzU4NzAsIDc1ODc1LCA3NTg4MCwgNzU4ODUsIDc1ODkwLCA3NTg5NSwgNzU5MDAsIAorICAgIDc1OTA1LCA3NTkxMCwgNzU5MTQsIDc1OTE5LCA3NTkyNCwgNzU5MjksIDc1OTM0LCA3NTkzOSwgNzU5NDQsIDc1OTQ5LCAKKyAgICA3NTk1NCwgNzU5NTksIDc1OTY0LCA3NTk2OSwgNzU5NzYsIDc1OTgzLCA3NTk5MCwgNzU5OTcsIDc2MDA0LCA3NjAxMSwgCisgICAgNzYwMTgsIDc2MDI1LCA3NjAzMSwgNzYwMzcsIDc2MDQzLCA3NjA0OSwgNzYwNTUsIDc2MDYxLCA3NjA2NywgNzYwNzMsIAorICAgIDc2MDc3LCA3NjA4MywgMCwgMCwgNzYwODksIDc2MDk0LCA3NjA5OCwgNzYxMDIsIDc2MTA2LCA3NjExMCwgNzYxMTQsIAorICAgIDc2MTE4LCA3NjEyMiwgNzYxMjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc2MTAyLCAKLSAgICA3NjEwNiwgNzYxMTAsIDc2MTE0LCA3NjExOCwgNzYxMjIsIDc2MTI2LCA3NjEzMCwgNzYxMzQsIDc2MTM4LCA3NjE0MiwgCi0gICAgNzYxNDYsIDc2MTUwLCA3NjE1NCwgNzYxNTgsIDc2MTYyLCA3NjE2NiwgNzYxNzAsIDc2MTc0LCA3NjE3OCwgNzYxODIsIAotICAgIDc2MTg2LCA3NjE5MCwgMCwgMCwgMCwgMCwgNzYxOTQsIDc2MTk4LCA3NjIwMiwgNzYyMDYsIDc2MjEwLCA3NjIxNCwgCi0gICAgNzYyMTgsIDc2MjIyLCA3NjIyNiwgNzYyMzAsIDc2MjM0LCA3NjIzOCwgNzYyNDIsIDc2MjQ2LCA3NjI1MCwgNzYyNTQsIAotICAgIDc2MjU4LCA3NjI2MiwgNzYyNjYsIDc2MjcwLCA3NjI3NCwgNzYyNzgsIDc2MjgyLCA3NjI4NiwgNzYyOTAsIDc2Mjk0LCAKLSAgICA3NjI5OCwgNzYzMDIsIDc2MzA2LCA3NjMxMCwgNzYzMTQsIDc2MzE4LCA3NjMyMiwgNzYzMjYsIDc2MzMwLCA3NjMzNCwgCi0gICAgNzYzMzgsIDc2MzQyLCA3NjM0NiwgNzYzNTAsIDc2MzU0LCA3NjM1OCwgNzYzNjIsIDc2MzY2LCA3NjM3MCwgNzYzNzQsIAotICAgIDc2Mzc4LCA3NjM4MiwgNzYzODYsIDAsIDAsIDAsIDAsIDc2MzkwLCA3NjM5NCwgNzYzOTgsIDc2NDAyLCA3NjQwNiwgCi0gICAgNzY0MTAsIDc2NDE0LCA3NjQxOCwgNzY0MjIsIDc2NDI2LCA3NjQzMCwgNzY0MzQsIDc2NDM4LCA3NjQ0MiwgNzY0NDYsIAotICAgIDc2NDUwLCA3NjQ1NCwgNzY0NTgsIDc2NDYyLCA3NjQ2NiwgNzY0NzAsIDc2NDc0LCA3NjQ3OCwgNzY0ODIsIDc2NDg2LCAKLSAgICA3NjQ5MCwgNzY0OTQsIDc2NDk4LCA3NjUwMiwgNzY1MDYsIDc2NTEwLCA3NjUxNCwgNzY1MTgsIDc2NTIyLCA3NjUyNiwgCi0gICAgNzY1MzAsIDc2NTM0LCA3NjUzOCwgNzY1NDIsIDc2NTQ2LCA3NjU1MCwgNzY1NTQsIDc2NTU4LCA3NjU2MiwgNzY1NjYsIAotICAgIDc2NTcwLCA3NjU3NCwgNzY1NzgsIDc2NTgyLCA3NjU4NiwgNzY1OTAsIDc2NTk0LCA3NjU5OCwgNzY2MDIsIDc2NjA2LCAKLSAgICA3NjYxMCwgNzY2MTQsIDc2NjE4LCA3NjYyMiwgNzY2MjYsIDc2NjMwLCA3NjYzNCwgNzY2MzgsIDc2NjQyLCA3NjY0NiwgCi0gICAgNzY2NTAsIDc2NjU0LCA3NjY1OCwgNzY2NjIsIDc2NjY2LCA3NjY3MCwgNzY2NzQsIDc2Njc4LCA3NjY4MiwgNzY2ODYsIAotICAgIDc2NjkwLCA3NjY5NCwgNzY2OTgsIDc2NzAyLCA3NjcwNiwgNzY3MTAsIDc2NzE0LCA3NjcxOCwgNzY3MjIsIDc2NzI2LCAKLSAgICA3NjczMCwgNzY3MzQsIDc2NzM4LCA3Njc0MiwgNzY3NDYsIDc2NzUwLCA3Njc1NCwgNzY3NTgsIDc2NzYyLCA3Njc2NiwgCi0gICAgNzY3NzAsIDc2Nzc0LCA3Njc3OCwgNzY3ODIsIDc2Nzg2LCA3Njc5MCwgNzY3OTQsIDc2Nzk4LCA3NjgwMiwgNzY4MDYsIAotICAgIDc2ODEwLCA3NjgxNCwgNzY4MTgsIDc2ODIyLCA3NjgyNiwgNzY4MzAsIDc2ODM0LCA3NjgzOCwgNzY4NDIsIDc2ODQ2LCAKLSAgICA3Njg1MCwgNzY4NTQsIDc2ODU4LCA3Njg2MiwgNzY4NjYsIDc2ODcwLCA3Njg3NCwgNzY4NzgsIDc2ODgyLCA3Njg4NiwgCi0gICAgNzY4OTAsIDc2ODk0LCA3Njg5OCwgNzY5MDIsIDc2OTA2LCA3NjkxMCwgNzY5MTQsIDc2OTE4LCA3NjkyMiwgNzY5MjYsIAotICAgIDc2OTMwLCA3NjkzNCwgNzY5MzgsIDc2OTQyLCA3Njk0NiwgNzY5NTAsIDc2OTU0LCA3Njk1OCwgNzY5NjIsIDc2OTY2LCAKLSAgICA3Njk3MCwgNzY5NzQsIDc2OTc4LCA3Njk4MiwgNzY5ODYsIDc2OTkwLCA3Njk5NCwgNzY5OTgsIDc3MDAyLCA3NzAwNiwgCi0gICAgNzcwMTAsIDc3MDE0LCA3NzAxOCwgNzcwMjIsIDc3MDI2LCA3NzAzMCwgNzcwMzQsIDc3MDM4LCA3NzA0MiwgNzcwNDYsIAotICAgIDc3MDUwLCA3NzA1NCwgNzcwNTgsIDc3MDYyLCA3NzA2NiwgNzcwNzAsIDc3MDc0LCA3NzA3OCwgNzcwODIsIDc3MDg2LCAKLSAgICA3NzA5MCwgNzcwOTQsIDc3MDk4LCA3NzEwMiwgNzcxMDYsIDc3MTEwLCA3NzExNCwgNzcxMTgsIDc3MTIyLCA3NzEyNiwgCi0gICAgNzcxMzAsIDc3MTM0LCA3NzEzOCwgNzcxNDIsIDc3MTQ2LCA3NzE1MCwgNzcxNTQsIDc3MTU4LCA3NzE2MiwgNzcxNjYsIAotICAgIDc3MTcwLCA3NzE3NCwgNzcxNzgsIDc3MTgyLCA3NzE4NiwgNzcxOTAsIDc3MTk0LCA3NzE5OCwgNzcyMDIsIDc3MjA2LCAKLSAgICA3NzIxMCwgNzcyMTQsIDc3MjE4LCA3NzIyMiwgNzcyMjYsIDc3MjMwLCA3NzIzNCwgNzcyMzgsIDc3MjQyLCA3NzI0NiwgCi0gICAgNzcyNTAsIDc3MjU0LCA3NzI1OCwgNzcyNjIsIDc3MjY2LCA3NzI3MCwgNzcyNzQsIDc3Mjc4LCA3NzI4MiwgNzcyODYsIAotICAgIDc3MjkwLCA3NzI5NCwgNzcyOTgsIDc3MzAyLCA3NzMwNiwgNzczMTAsIDc3MzE0LCA3NzMxOCwgNzczMjIsIDc3MzI2LCAKLSAgICA3NzMzMCwgNzczMzQsIDc3MzM4LCA3NzM0MiwgNzczNDYsIDc3MzUwLCA3NzM1NCwgNzczNTgsIDc3MzYyLCA3NzM2NiwgCi0gICAgNzczNzAsIDc3Mzc0LCA3NzM3OCwgNzczODIsIDc3Mzg2LCA3NzM5MCwgNzczOTQsIDc3Mzk4LCA3NzQwMiwgNzc0MDYsIAotICAgIDc3NDEwLCA3NzQxNCwgNzc0MTgsIDc3NDIyLCA3NzQyNiwgNzc0MzAsIDc3NDM0LCA3NzQzOCwgNzc0NDIsIDc3NDQ2LCAKLSAgICA3NzQ1MCwgNzc0NTQsIDc3NDU4LCA3NzQ2MiwgNzc0NjYsIDc3NDcwLCA3NzQ3NCwgNzc0NzgsIDc3NDgyLCA3NzQ4NiwgCi0gICAgNzc0OTAsIDc3NDk0LCA3NzQ5OCwgNzc1MDIsIDc3NTA2LCA3NzUxMCwgNzc1MTQsIDc3NTE4LCA3NzUyMiwgNzc1MjYsIAotICAgIDc3NTMwLCA3NzUzNCwgNzc1MzgsIDc3NTQyLCA3NzU0NiwgNzc1NTAsIDc3NTU0LCA3NzU1OCwgNzc1NjIsIDc3NTY2LCAKLSAgICA3NzU3MCwgNzc1NzQsIDc3NTc4LCA3NzU4MiwgNzc1ODYsIDc3NTkwLCA3NzU5NCwgNzc1OTgsIDc3NjAyLCA3NzYwNiwgCi0gICAgNzc2MTAsIDc3NjE0LCA3NzYxOCwgNzc2MjIsIDc3NjI2LCA3NzYzMCwgNzc2MzQsIDc3NjM4LCA3NzY0MiwgNzc2NDYsIAotICAgIDc3NjUwLCA3NzY1NCwgNzc2NTgsIDc3NjYyLCA3NzY2NiwgNzc2NzAsIDc3Njc0LCA3NzY3OCwgNzc2ODIsIDc3Njg2LCAKLSAgICA3NzY5MCwgNzc2OTQsIDc3Njk4LCA3NzcwMiwgNzc3MDYsIDc3NzEwLCA3NzcxNCwgNzc3MTgsIDc3NzIyLCA3NzcyNiwgCi0gICAgNzc3MzAsIDc3NzM0LCA3NzczOCwgNzc3NDIsIDc3NzQ2LCA3Nzc1MCwgNzc3NTQsIDc3NzU4LCA3Nzc2MiwgNzc3NjYsIAotICAgIDc3NzcwLCA3Nzc3NCwgNzc3NzgsIDc3NzgyLCA3Nzc4NiwgNzc3OTAsIDc3Nzk0LCA3Nzc5OCwgNzc4MDIsIDc3ODA2LCAKLSAgICA3NzgxMCwgNzc4MTQsIDc3ODE4LCA3NzgyMiwgNzc4MjYsIDc3ODMwLCA3NzgzNCwgNzc4MzgsIDc3ODQyLCA3Nzg0NiwgCi0gICAgNzc4NTAsIDAsIDAsIDc3ODU0LCA3Nzg1OCwgNzc4NjIsIDc3ODY2LCA3Nzg3MCwgNzc4NzQsIDc3ODc4LCA3Nzg4MiwgCi0gICAgNzc4ODYsIDc3ODkwLCA3Nzg5NCwgNzc4OTgsIDc3OTAyLCA3NzkwNiwgNzc5MTAsIDc3OTE0LCA3NzkxOCwgNzc5MjIsIAotICAgIDc3OTI2LCA3NzkzMCwgNzc5MzQsIDc3OTM4LCA3Nzk0MiwgNzc5NDYsIDc3OTUwLCA3Nzk1NCwgNzc5NTgsIDc3OTYyLCAKLSAgICA3Nzk2NiwgNzc5NzAsIDc3OTc0LCA3Nzk3OCwgNzc5ODIsIDc3OTg2LCA3Nzk5MCwgNzc5OTQsIDc3OTk4LCA3ODAwMiwgCi0gICAgNzgwMDYsIDc4MDEwLCA3ODAxNCwgNzgwMTgsIDc4MDIyLCA3ODAyNiwgNzgwMzAsIDc4MDM0LCA3ODAzOCwgNzgwNDIsIAotICAgIDc4MDQ2LCA3ODA1MCwgNzgwNTQsIDc4MDU4LCA3ODA2MiwgNzgwNjYsIDc4MDcwLCA3ODA3NCwgNzgwNzgsIDc4MDgyLCAKLSAgICA3ODA4NiwgNzgwOTAsIDc4MDk0LCA3ODA5OCwgNzgxMDIsIDc4MTA2LCA3ODExMCwgNzgxMTQsIDc4MTE4LCA3ODEyMiwgCi0gICAgNzgxMjYsIDc4MTMwLCA3ODEzNCwgNzgxMzgsIDc4MTQyLCA3ODE0NiwgNzgxNTAsIDc4MTU0LCA3ODE1OCwgNzgxNjIsIAotICAgIDc4MTY2LCA3ODE3MCwgNzgxNzQsIDc4MTc4LCA3ODE4MiwgNzgxODYsIDc4MTkwLCA3ODE5NCwgNzgxOTgsIDc4MjAyLCAKLSAgICA3ODIwNiwgNzgyMTAsIDc4MjE0LCA3ODIxOCwgNzgyMjIsIDc4MjI2LCA3ODIzMCwgNzgyMzQsIDc4MjM4LCA3ODI0MiwgCi0gICAgNzgyNDYsIDc4MjUwLCA3ODI1NCwgNzgyNTgsIDc4MjYyLCA3ODI2NiwgNzgyNzAsIDc4Mjc0LCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3NjEzMCwgNzYxMzQsIDc2MTM4LCA3NjE0MiwgNzYxNDYsIAorICAgIDc2MTUwLCA3NjE1NCwgNzYxNTgsIDc2MTYyLCA3NjE2NiwgNzYxNzAsIDc2MTc0LCA3NjE3OCwgNzYxODIsIDc2MTg2LCAKKyAgICA3NjE5MCwgNzYxOTQsIDc2MTk4LCA3NjIwMiwgNzYyMDYsIDc2MjEwLCA3NjIxNCwgNzYyMTgsIDAsIDAsIDAsIDAsIAorICAgIDc2MjIyLCA3NjIyNiwgNzYyMzAsIDc2MjM0LCA3NjIzOCwgNzYyNDIsIDc2MjQ2LCA3NjI1MCwgNzYyNTQsIDc2MjU4LCAKKyAgICA3NjI2MiwgNzYyNjYsIDc2MjcwLCA3NjI3NCwgNzYyNzgsIDc2MjgyLCA3NjI4NiwgNzYyOTAsIDc2Mjk0LCA3NjI5OCwgCisgICAgNzYzMDIsIDc2MzA2LCA3NjMxMCwgNzYzMTQsIDc2MzE4LCA3NjMyMiwgNzYzMjYsIDc2MzMwLCA3NjMzNCwgNzYzMzgsIAorICAgIDc2MzQyLCA3NjM0NiwgNzYzNTAsIDc2MzU0LCA3NjM1OCwgNzYzNjIsIDc2MzY2LCA3NjM3MCwgNzYzNzQsIDc2Mzc4LCAKKyAgICA3NjM4MiwgNzYzODYsIDc2MzkwLCA3NjM5NCwgNzYzOTgsIDc2NDAyLCA3NjQwNiwgNzY0MTAsIDc2NDE0LCAwLCAwLCAwLCAKKyAgICAwLCA3NjQxOCwgNzY0MjIsIDc2NDI2LCA3NjQzMCwgNzY0MzQsIDc2NDM4LCA3NjQ0MiwgNzY0NDYsIDc2NDUwLCA3NjQ1NCwgCisgICAgNzY0NTgsIDc2NDYyLCA3NjQ2NiwgNzY0NzAsIDc2NDc0LCA3NjQ3OCwgNzY0ODIsIDc2NDg2LCA3NjQ5MCwgNzY0OTQsIAorICAgIDc2NDk4LCA3NjUwMiwgNzY1MDYsIDc2NTEwLCA3NjUxNCwgNzY1MTgsIDc2NTIyLCA3NjUyNiwgNzY1MzAsIDc2NTM0LCAKKyAgICA3NjUzOCwgNzY1NDIsIDc2NTQ2LCA3NjU1MCwgNzY1NTQsIDc2NTU4LCA3NjU2MiwgNzY1NjYsIDc2NTcwLCA3NjU3NCwgCisgICAgNzY1NzgsIDc2NTgyLCA3NjU4NiwgNzY1OTAsIDc2NTk0LCA3NjU5OCwgNzY2MDIsIDc2NjA2LCA3NjYxMCwgNzY2MTQsIAorICAgIDc2NjE4LCA3NjYyMiwgNzY2MjYsIDc2NjMwLCA3NjYzNCwgNzY2MzgsIDc2NjQyLCA3NjY0NiwgNzY2NTAsIDc2NjU0LCAKKyAgICA3NjY1OCwgNzY2NjIsIDc2NjY2LCA3NjY3MCwgNzY2NzQsIDc2Njc4LCA3NjY4MiwgNzY2ODYsIDc2NjkwLCA3NjY5NCwgCisgICAgNzY2OTgsIDc2NzAyLCA3NjcwNiwgNzY3MTAsIDc2NzE0LCA3NjcxOCwgNzY3MjIsIDc2NzI2LCA3NjczMCwgNzY3MzQsIAorICAgIDc2NzM4LCA3Njc0MiwgNzY3NDYsIDc2NzUwLCA3Njc1NCwgNzY3NTgsIDc2NzYyLCA3Njc2NiwgNzY3NzAsIDc2Nzc0LCAKKyAgICA3Njc3OCwgNzY3ODIsIDc2Nzg2LCA3Njc5MCwgNzY3OTQsIDc2Nzk4LCA3NjgwMiwgNzY4MDYsIDc2ODEwLCA3NjgxNCwgCisgICAgNzY4MTgsIDc2ODIyLCA3NjgyNiwgNzY4MzAsIDc2ODM0LCA3NjgzOCwgNzY4NDIsIDc2ODQ2LCA3Njg1MCwgNzY4NTQsIAorICAgIDc2ODU4LCA3Njg2MiwgNzY4NjYsIDc2ODcwLCA3Njg3NCwgNzY4NzgsIDc2ODgyLCA3Njg4NiwgNzY4OTAsIDc2ODk0LCAKKyAgICA3Njg5OCwgNzY5MDIsIDc2OTA2LCA3NjkxMCwgNzY5MTQsIDc2OTE4LCA3NjkyMiwgNzY5MjYsIDc2OTMwLCA3NjkzNCwgCisgICAgNzY5MzgsIDc2OTQyLCA3Njk0NiwgNzY5NTAsIDc2OTU0LCA3Njk1OCwgNzY5NjIsIDc2OTY2LCA3Njk3MCwgNzY5NzQsIAorICAgIDc2OTc4LCA3Njk4MiwgNzY5ODYsIDc2OTkwLCA3Njk5NCwgNzY5OTgsIDc3MDAyLCA3NzAwNiwgNzcwMTAsIDc3MDE0LCAKKyAgICA3NzAxOCwgNzcwMjIsIDc3MDI2LCA3NzAzMCwgNzcwMzQsIDc3MDM4LCA3NzA0MiwgNzcwNDYsIDc3MDUwLCA3NzA1NCwgCisgICAgNzcwNTgsIDc3MDYyLCA3NzA2NiwgNzcwNzAsIDc3MDc0LCA3NzA3OCwgNzcwODIsIDc3MDg2LCA3NzA5MCwgNzcwOTQsIAorICAgIDc3MDk4LCA3NzEwMiwgNzcxMDYsIDc3MTEwLCA3NzExNCwgNzcxMTgsIDc3MTIyLCA3NzEyNiwgNzcxMzAsIDc3MTM0LCAKKyAgICA3NzEzOCwgNzcxNDIsIDc3MTQ2LCA3NzE1MCwgNzcxNTQsIDc3MTU4LCA3NzE2MiwgNzcxNjYsIDc3MTcwLCA3NzE3NCwgCisgICAgNzcxNzgsIDc3MTgyLCA3NzE4NiwgNzcxOTAsIDc3MTk0LCA3NzE5OCwgNzcyMDIsIDc3MjA2LCA3NzIxMCwgNzcyMTQsIAorICAgIDc3MjE4LCA3NzIyMiwgNzcyMjYsIDc3MjMwLCA3NzIzNCwgNzcyMzgsIDc3MjQyLCA3NzI0NiwgNzcyNTAsIDc3MjU0LCAKKyAgICA3NzI1OCwgNzcyNjIsIDc3MjY2LCA3NzI3MCwgNzcyNzQsIDc3Mjc4LCA3NzI4MiwgNzcyODYsIDc3MjkwLCA3NzI5NCwgCisgICAgNzcyOTgsIDc3MzAyLCA3NzMwNiwgNzczMTAsIDc3MzE0LCA3NzMxOCwgNzczMjIsIDc3MzI2LCA3NzMzMCwgNzczMzQsIAorICAgIDc3MzM4LCA3NzM0MiwgNzczNDYsIDc3MzUwLCA3NzM1NCwgNzczNTgsIDc3MzYyLCA3NzM2NiwgNzczNzAsIDc3Mzc0LCAKKyAgICA3NzM3OCwgNzczODIsIDc3Mzg2LCA3NzM5MCwgNzczOTQsIDc3Mzk4LCA3NzQwMiwgNzc0MDYsIDc3NDEwLCA3NzQxNCwgCisgICAgNzc0MTgsIDc3NDIyLCA3NzQyNiwgNzc0MzAsIDc3NDM0LCA3NzQzOCwgNzc0NDIsIDc3NDQ2LCA3NzQ1MCwgNzc0NTQsIAorICAgIDc3NDU4LCA3NzQ2MiwgNzc0NjYsIDc3NDcwLCA3NzQ3NCwgNzc0NzgsIDc3NDgyLCA3NzQ4NiwgNzc0OTAsIDc3NDk0LCAKKyAgICA3NzQ5OCwgNzc1MDIsIDc3NTA2LCA3NzUxMCwgNzc1MTQsIDc3NTE4LCA3NzUyMiwgNzc1MjYsIDc3NTMwLCA3NzUzNCwgCisgICAgNzc1MzgsIDc3NTQyLCA3NzU0NiwgNzc1NTAsIDc3NTU0LCA3NzU1OCwgNzc1NjIsIDc3NTY2LCA3NzU3MCwgNzc1NzQsIAorICAgIDc3NTc4LCA3NzU4MiwgNzc1ODYsIDc3NTkwLCA3NzU5NCwgNzc1OTgsIDc3NjAyLCA3NzYwNiwgNzc2MTAsIDc3NjE0LCAKKyAgICA3NzYxOCwgNzc2MjIsIDc3NjI2LCA3NzYzMCwgNzc2MzQsIDc3NjM4LCA3NzY0MiwgNzc2NDYsIDc3NjUwLCA3NzY1NCwgCisgICAgNzc2NTgsIDc3NjYyLCA3NzY2NiwgNzc2NzAsIDc3Njc0LCA3NzY3OCwgNzc2ODIsIDc3Njg2LCA3NzY5MCwgNzc2OTQsIAorICAgIDc3Njk4LCA3NzcwMiwgNzc3MDYsIDc3NzEwLCA3NzcxNCwgNzc3MTgsIDc3NzIyLCA3NzcyNiwgNzc3MzAsIDc3NzM0LCAKKyAgICA3NzczOCwgNzc3NDIsIDc3NzQ2LCA3Nzc1MCwgNzc3NTQsIDc3NzU4LCA3Nzc2MiwgNzc3NjYsIDc3NzcwLCA3Nzc3NCwgCisgICAgNzc3NzgsIDc3NzgyLCA3Nzc4NiwgNzc3OTAsIDc3Nzk0LCA3Nzc5OCwgNzc4MDIsIDc3ODA2LCA3NzgxMCwgNzc4MTQsIAorICAgIDc3ODE4LCA3NzgyMiwgNzc4MjYsIDc3ODMwLCA3NzgzNCwgNzc4MzgsIDc3ODQyLCA3Nzg0NiwgNzc4NTAsIDc3ODU0LCAKKyAgICA3Nzg1OCwgNzc4NjIsIDc3ODY2LCA3Nzg3MCwgNzc4NzQsIDc3ODc4LCAwLCAwLCA3Nzg4MiwgNzc4ODYsIDc3ODkwLCAKKyAgICA3Nzg5NCwgNzc4OTgsIDc3OTAyLCA3NzkwNiwgNzc5MTAsIDc3OTE0LCA3NzkxOCwgNzc5MjIsIDc3OTI2LCA3NzkzMCwgCisgICAgNzc5MzQsIDc3OTM4LCA3Nzk0MiwgNzc5NDYsIDc3OTUwLCA3Nzk1NCwgNzc5NTgsIDc3OTYyLCA3Nzk2NiwgNzc5NzAsIAorICAgIDc3OTc0LCA3Nzk3OCwgNzc5ODIsIDc3OTg2LCA3Nzk5MCwgNzc5OTQsIDc3OTk4LCA3ODAwMiwgNzgwMDYsIDc4MDEwLCAKKyAgICA3ODAxNCwgNzgwMTgsIDc4MDIyLCA3ODAyNiwgNzgwMzAsIDc4MDM0LCA3ODAzOCwgNzgwNDIsIDc4MDQ2LCA3ODA1MCwgCisgICAgNzgwNTQsIDc4MDU4LCA3ODA2MiwgNzgwNjYsIDc4MDcwLCA3ODA3NCwgNzgwNzgsIDc4MDgyLCA3ODA4NiwgNzgwOTAsIAorICAgIDc4MDk0LCA3ODA5OCwgNzgxMDIsIDc4MTA2LCA3ODExMCwgNzgxMTQsIDc4MTE4LCA3ODEyMiwgNzgxMjYsIDc4MTMwLCAKKyAgICA3ODEzNCwgNzgxMzgsIDc4MTQyLCA3ODE0NiwgNzgxNTAsIDc4MTU0LCA3ODE1OCwgNzgxNjIsIDc4MTY2LCA3ODE3MCwgCisgICAgNzgxNzQsIDc4MTc4LCA3ODE4MiwgNzgxODYsIDc4MTkwLCA3ODE5NCwgNzgxOTgsIDc4MjAyLCA3ODIwNiwgNzgyMTAsIAorICAgIDc4MjE0LCA3ODIxOCwgNzgyMjIsIDc4MjI2LCA3ODIzMCwgNzgyMzQsIDc4MjM4LCA3ODI0MiwgNzgyNDYsIDc4MjUwLCAKKyAgICA3ODI1NCwgNzgyNTgsIDc4MjYyLCA3ODI2NiwgNzgyNzAsIDc4Mjc0LCA3ODI3OCwgNzgyODIsIDc4Mjg2LCA3ODI5MCwgCisgICAgNzgyOTQsIDc4Mjk4LCA3ODMwMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzgzMDYsIAorICAgIDc4MzExLCA3ODMxNiwgNzgzMjEsIDc4MzI2LCA3ODMzMSwgNzgzMzksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDc4MzQ0LCA3ODM1MSwgNzgzNTgsIDc4MzY1LCA3ODM3MiwgMCwgMCwgMCwgMCwgMCwgNzgzNzksIDc4Mzg2LCAKKyAgICA3ODM5MywgNzg0MDMsIDc4NDA5LCA3ODQxNSwgNzg0MjEsIDc4NDI3LCA3ODQzMywgNzg0MzksIDc4NDQ2LCA3ODQ1MiwgCisgICAgNzg0NTgsIDc4NDY0LCA3ODQ3MywgNzg0ODIsIDc4NDk0LCA3ODUwNiwgNzg1MTIsIDc4NTE4LCA3ODUyNCwgNzg1MzEsIAorICAgIDc4NTM4LCA3ODU0NSwgNzg1NTIsIDc4NTU5LCAwLCA3ODU2NiwgNzg1NzMsIDc4NTgwLCA3ODU4OCwgNzg1OTUsIDAsIAorICAgIDc4NjAyLCAwLCA3ODYwOSwgNzg2MTYsIDAsIDc4NjIzLCA3ODYzMSwgMCwgNzg2MzgsIDc4NjQ1LCA3ODY1MiwgNzg2NTksIAorICAgIDc4NjY2LCA3ODY3MywgNzg2ODAsIDc4Njg3LCA3ODY5NCwgNzg3MDEsIDc4NzA2LCA3ODcxMywgNzg3MjAsIDc4NzI2LCAKKyAgICA3ODczMiwgNzg3MzgsIDc4NzQ0LCA3ODc1MCwgNzg3NTYsIDc4NzYyLCA3ODc2OCwgNzg3NzQsIDc4NzgwLCA3ODc4NiwgCisgICAgNzg3OTIsIDc4Nzk4LCA3ODgwNCwgNzg4MTAsIDc4ODE2LCA3ODgyMiwgNzg4MjgsIDc4ODM0LCA3ODg0MCwgNzg4NDYsIAorICAgIDc4ODUyLCA3ODg1OCwgNzg4NjQsIDc4ODcwLCA3ODg3NiwgNzg4ODIsIDc4ODg4LCA3ODg5NCwgNzg5MDAsIDc4OTA2LCAKKyAgICA3ODkxMiwgNzg5MTgsIDc4OTI0LCA3ODkzMCwgNzg5MzYsIDc4OTQyLCA3ODk0OCwgNzg5NTQsIDc4OTYwLCA3ODk2NiwgCisgICAgNzg5NzIsIDc4OTc4LCA3ODk4NCwgNzg5OTAsIDc4OTk2LCA3OTAwMiwgNzkwMDgsIDc5MDE0LCA3OTAyMCwgNzkwMjYsIAorICAgIDc5MDMyLCA3OTAzOCwgNzkwNDQsIDc5MDUwLCA3OTA1NiwgNzkwNjIsIDc5MDY4LCA3OTA3NCwgNzkwODAsIDc5MDg2LCAKKyAgICA3OTA5MiwgNzkwOTgsIDc5MTA0LCA3OTExMCwgNzkxMTYsIDc5MTIyLCA3OTEyOCwgNzkxMzQsIDc5MTQwLCA3OTE0NiwgCisgICAgNzkxNTIsIDc5MTU4LCA3OTE2NCwgNzkxNzAsIDc5MTc2LCA3OTE4NCwgNzkxOTIsIDc5MTk4LCA3OTIwNCwgNzkyMTAsIAorICAgIDc5MjE2LCA3OTIyNSwgNzkyMzQsIDc5MjQyLCA3OTI1MCwgNzkyNTgsIDc5MjY2LCA3OTI3NCwgNzkyODIsIDc5MjkwLCAKKyAgICA3OTI5OCwgNzkzMDUsIDc5MzEyLCA3OTMyMiwgNzkzMzIsIDc5MzM2LCA3OTM0MCwgNzkzNDUsIDc5MzUwLCA3OTM1NSwgCisgICAgNzkzNjAsIDc5MzY5LCA3OTM3OCwgNzkzODQsIDc5MzkwLCA3OTM5NywgNzk0MDQsIDc5NDExLCA3OTQxNSwgNzk0MjEsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc5NDI3LCA3OTQzMywgNzk0MzksIAorICAgIDc5NDQ1LCA3OTQ1MSwgNzk0NTYsIDc5NDYxLCA3OTQ2NywgNzk0NzMsIDc5NDc5LCA3OTQ4NSwgNzk0OTMsIDc5NDk5LCAKKyAgICA3OTUwNSwgNzk1MTMsIDc5NTIxLCA3OTUyOSwgNzk1MzcsIDc5NTQyLCA3OTU0NywgNzk1NTIsIDc5NTU3LCA3OTU3MCwgCisgICAgNzk1ODMsIDc5NTkzLCA3OTYwMywgNzk2MTQsIDc5NjI1LCA3OTYzNiwgNzk2NDcsIDc5NjU3LCA3OTY2NywgNzk2NzgsIAorICAgIDc5Njg5LCA3OTcwMCwgNzk3MTEsIDc5NzIxLCA3OTczMSwgNzk3NDEsIDc5NzU3LCA3OTc3MywgNzk3ODksIDc5Nzk2LCAKKyAgICA3OTgwMywgNzk4MTAsIDc5ODE3LCA3OTgyNywgNzk4MzcsIDc5ODQ3LCA3OTg1OSwgNzk4NjksIDc5ODc3LCA3OTg4NSwgCisgICAgNzk4OTQsIDc5OTAyLCA3OTkxMiwgNzk5MjAsIDc5OTI4LCA3OTkzNiwgNzk5NDUsIDc5OTUzLCA3OTk2MywgNzk5NzEsIAorICAgIDc5OTc5LCA3OTk4NywgNzk5OTcsIDgwMDA1LCA4MDAxMiwgODAwMTksIDgwMDI2LCA4MDAzMywgODAwNDEsIDgwMDQ5LCAKKyAgICA4MDA1NywgODAwNjUsIDgwMDczLCA4MDA4MiwgODAwOTAsIDgwMDk4LCA4MDEwNiwgODAxMTQsIDgwMTIyLCA4MDEzMSwgCisgICAgODAxMzksIDgwMTQ3LCA4MDE1NSwgODAxNjMsIDgwMTcxLCA4MDE3OSwgODAxODcsIDgwMTk1LCA4MDIwMywgODAyMTEsIAorICAgIDgwMjIwLCA4MDIyOCwgODAyMzgsIDgwMjQ2LCA4MDI1NCwgODAyNjIsIDgwMjcyLCA4MDI4MCwgODAyODgsIDgwMjk2LCAKKyAgICA4MDMwNCwgODAzMTMsIDgwMzIyLCA4MDMzMCwgODAzNDAsIDgwMzQ4LCA4MDM1NiwgODAzNjQsIDgwMzczLCA4MDM4MSwgCisgICAgODAzOTEsIDgwMzk5LCA4MDQwNiwgODA0MTMsIDgwNDIxLCA4MDQyOCwgODA0MzcsIDgwNDQ0LCA4MDQ1MiwgODA0NjAsIAorICAgIDgwNDY5LCA4MDQ3NywgODA0ODcsIDgwNDk1LCA4MDUwMywgODA1MTEsIDgwNTIxLCA4MDUyOSwgODA1MzYsIDgwNTQzLCAKKyAgICA4MDU1MSwgODA1NTgsIDgwNTY3LCA4MDU3NCwgODA1ODQsIDgwNTk0LCA4MDYwNSwgODA2MTQsIDgwNjIzLCA4MDYzMiwgCisgICAgODA2NDEsIDgwNjUwLCA4MDY2MCwgODA2NzEsIDgwNjgyLCA4MDY5MiwgODA3MDMsIDgwNzE1LCA4MDcyNSwgODA3MzQsIAorICAgIDgwNzQzLCA4MDc1MSwgODA3NjAsIDgwNzcwLCA4MDc3OCwgODA3ODcsIDgwNzk2LCA4MDgwNCwgODA4MTMsIDgwODIzLCAKKyAgICA4MDgzMSwgODA4NDAsIDgwODQ5LCA4MDg1NywgODA4NjYsIDgwODc2LCA4MDg4NCwgODA4OTQsIDgwOTAyLCA4MDkxMiwgCisgICAgODA5MjAsIDgwOTI4LCA4MDkzNywgODA5NDUsIDgwOTU1LCA4MDk2MywgODA5NzEsIDgwOTgxLCA4MDk4OSwgODA5OTYsIAorICAgIDgxMDAzLCA4MTAxMiwgODEwMjEsIDgxMDI5LCA4MTAzOCwgODEwNDgsIDgxMDU2LCA4MTA2NywgODEwNzUsIDgxMDgzLCAKKyAgICA4MTA5MCwgODEwOTgsIDgxMTA3LCA4MTExNCwgODExMjQsIDgxMTM0LCA4MTE0NSwgODExNTUsIDgxMTY2LCA4MTE3NCwgCisgICAgODExODIsIDgxMTkxLCA4MTE5OSwgODEyMDgsIDgxMjE2LCA4MTIyNCwgODEyMzMsIDgxMjQxLCA4MTI1MCwgODEyNTgsIAorICAgIDgxMjY1LCA4MTI3MiwgODEyNzksIDgxMjg2LCA4MTI5NCwgODEzMDIsIDgxMzEwLCA4MTMxOCwgODEzMjcsIDgxMzM1LCAKKyAgICA4MTM0MywgODEzNTIsIDgxMzYwLCA4MTM2OCwgODEzNzYsIDgxMzg1LCA4MTM5MywgODE0MDEsIDgxNDA5LCA4MTQxNywgCisgICAgODE0MjUsIDgxNDMzLCA4MTQ0MSwgODE0NDksIDgxNDU3LCA4MTQ2NiwgODE0NzQsIDgxNDgyLCA4MTQ5MCwgODE0OTgsIAorICAgIDgxNTA2LCA4MTUxNSwgODE1MjQsIDgxNTMyLCA4MTU0MCwgODE1NDgsIDgxNTU3LCA4MTU2NSwgODE1NzQsIDgxNTgxLCAKKyAgICA4MTU4OCwgODE1OTYsIDgxNjAzLCA4MTYxMSwgODE2MTksIDgxNjI4LCA4MTYzNiwgODE2NDUsIDgxNjUzLCA4MTY2MSwgCisgICAgODE2NzEsIDgxNjc4LCA4MTY4NSwgODE2OTMsIDgxNzAwLCA4MTcwOCwgODE3MTgsIDgxNzI5LCA4MTczNywgODE3NDYsIAorICAgIDgxNzU0LCA4MTc2MywgODE3NzEsIDgxNzgwLCA4MTc4OCwgODE3OTcsIDgxODA1LCA4MTgxNCwgODE4MjMsIDgxODMxLCAKKyAgICA4MTgzOSwgODE4NDcsIDgxODU2LCA4MTg2MywgODE4NzEsIDgxODgwLCA4MTg4OSwgODE4OTgsIDgxOTA4LCA4MTkxNiwgCisgICAgODE5MjYsIDgxOTM0LCA4MTk0NCwgODE5NTIsIDgxOTYyLCA4MTk3MCwgODE5ODAsIDgxOTg4LCA4MTk5NywgODIwMDQsIAorICAgIDgyMDEzLCA4MjAyMCwgODIwMzAsIDgyMDM4LCA4MjA0OCwgODIwNTYsIDgyMDY2LCA4MjA3NCwgODIwODIsIDgyMDkwLCAKKyAgICA4MjA5OSwgODIxMDcsIDgyMTE2LCA4MjEyNSwgODIxMzQsIDgyMTQzLCA4MjE1MywgODIxNjEsIDgyMTcxLCA4MjE3OSwgCisgICAgODIxODksIDgyMTk3LCA4MjIwNywgODIyMTUsIDgyMjI1LCA4MjIzMywgODIyNDIsIDgyMjQ5LCA4MjI1OCwgODIyNjUsIAorICAgIDgyMjc1LCA4MjI4MywgODIyOTMsIDgyMzAxLCA4MjMxMSwgODIzMTksIDgyMzI3LCA4MjMzNSwgODIzNDQsIDgyMzUyLCAKKyAgICA4MjM2MSwgODIzNzAsIDgyMzc5LCA4MjM4OCwgODIzOTYsIDgyNDA0LCA4MjQxMywgODI0MjEsIDgyNDMwLCA4MjQzOSwgCisgICAgODI0NDcsIDgyNDU1LCA4MjQ2MywgODI0NzIsIDgyNDgwLCA4MjQ4OCwgODI0OTcsIDgyNTA1LCA4MjUxMywgODI1MjEsIAorICAgIDgyNTI5LCA4MjUzNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODI1MzksIAorICAgIDgyNTQ5LCA4MjU1OSwgODI1NjksIDgyNTc5LCA4MjU5MCwgODI2MDAsIDgyNjEwLCA4MjYyMSwgODI2MzAsIDgyNjM5LCAKKyAgICA4MjY0OCwgODI2NTksIDgyNjY5LCA4MjY3OSwgODI2OTEsIDgyNzAxLCA4MjcxMSwgODI3MjEsIDgyNzMxLCA4Mjc0MSwgCisgICAgODI3NTEsIDgyNzYxLCA4Mjc3MSwgODI3ODEsIDgyNzkxLCA4MjgwMSwgODI4MTIsIDgyODIzLCA4MjgzMywgODI4NDMsIAorICAgIDgyODU1LCA4Mjg2NiwgODI4NzcsIDgyODg3LCA4Mjg5NywgODI5MDcsIDgyOTE3LCA4MjkyNywgODI5MzcsIDgyOTQ3LCAKKyAgICA4Mjk1OSwgODI5NjksIDgyOTc5LCA4Mjk5MSwgODMwMDIsIDgzMDEzLCA4MzAyMywgODMwMzMsIDgzMDQzLCA4MzA1MywgCisgICAgODMwNjUsIDgzMDc1LCA4MzA4NSwgODMwOTYsIDgzMTA3LCA4MzExNywgODMxMjcsIDgzMTM2LCA4MzE0NSwgODMxNTQsIAorICAgIDgzMTYzLCA4MzE3MiwgODMxODIsIDAsIDAsIDgzMTkyLCA4MzIwMiwgODMyMTIsIDgzMjIyLCA4MzIzMiwgODMyNDQsIAorICAgIDgzMjU0LCA4MzI2NCwgODMyNzYsIDgzMjg2LCA4MzI5OCwgODMzMDcsIDgzMzE2LCA4MzMyNywgODMzMzcsIDgzMzQ5LCAKKyAgICA4MzM2MCwgODMzNzMsIDgzMzgzLCA4MzM5NSwgODM0MDQsIDgzNDE1LCA4MzQyNiwgODM0MzksIDgzNDQ5LCA4MzQ1OSwgCisgICAgODM0NjksIDgzNDc5LCA4MzQ4OSwgODM0OTgsIDgzNTA3LCA4MzUxNiwgODM1MjUsIDgzNTM1LCA4MzU0NSwgODM1NTUsIAorICAgIDgzNTY1LCA4MzU3NSwgODM1ODUsIDgzNTk1LCA4MzYwNSwgODM2MTUsIDgzNjI1LCA4MzYzNSwgODM2NDUsIDgzNjU0LCAKKyAgICA4MzY2MywgODM2NzIsIDgzNjgyLCA4MzY5MiwgODM3MDIsIDgzNzEyLCA4MzcyMiwgODM3MzMsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc4Mjc4LCA3ODI4MywgNzgyODgsIDc4MjkzLCA3ODI5OCwgNzgzMDMsIDc4MzExLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3ODMxNiwgNzgzMjMsIDc4MzMwLCA3ODMzNywgNzgzNDQsIDAsIAotICAgIDAsIDAsIDAsIDAsIDc4MzUxLCA3ODM1OCwgNzgzNjUsIDc4Mzc1LCA3ODM4MSwgNzgzODcsIDc4MzkzLCA3ODM5OSwgCi0gICAgNzg0MDUsIDc4NDExLCA3ODQxOCwgNzg0MjQsIDc4NDMwLCA3ODQzNiwgNzg0NDUsIDc4NDU0LCA3ODQ2NiwgNzg0NzgsIAotICAgIDc4NDg0LCA3ODQ5MCwgNzg0OTYsIDc4NTAzLCA3ODUxMCwgNzg1MTcsIDc4NTI0LCA3ODUzMSwgMCwgNzg1MzgsIDc4NTQ1LCAKLSAgICA3ODU1MiwgNzg1NjAsIDc4NTY3LCAwLCA3ODU3NCwgMCwgNzg1ODEsIDc4NTg4LCAwLCA3ODU5NSwgNzg2MDMsIDAsIAotICAgIDc4NjEwLCA3ODYxNywgNzg2MjQsIDc4NjMxLCA3ODYzOCwgNzg2NDUsIDc4NjUyLCA3ODY1OSwgNzg2NjYsIDc4NjczLCAKLSAgICA3ODY3OCwgNzg2ODUsIDc4NjkyLCA3ODY5OCwgNzg3MDQsIDc4NzEwLCA3ODcxNiwgNzg3MjIsIDc4NzI4LCA3ODczNCwgCi0gICAgNzg3NDAsIDc4NzQ2LCA3ODc1MiwgNzg3NTgsIDc4NzY0LCA3ODc3MCwgNzg3NzYsIDc4NzgyLCA3ODc4OCwgNzg3OTQsIAotICAgIDc4ODAwLCA3ODgwNiwgNzg4MTIsIDc4ODE4LCA3ODgyNCwgNzg4MzAsIDc4ODM2LCA3ODg0MiwgNzg4NDgsIDc4ODU0LCAKLSAgICA3ODg2MCwgNzg4NjYsIDc4ODcyLCA3ODg3OCwgNzg4ODQsIDc4ODkwLCA3ODg5NiwgNzg5MDIsIDc4OTA4LCA3ODkxNCwgCi0gICAgNzg5MjAsIDc4OTI2LCA3ODkzMiwgNzg5MzgsIDc4OTQ0LCA3ODk1MCwgNzg5NTYsIDc4OTYyLCA3ODk2OCwgNzg5NzQsIAotICAgIDc4OTgwLCA3ODk4NiwgNzg5OTIsIDc4OTk4LCA3OTAwNCwgNzkwMTAsIDc5MDE2LCA3OTAyMiwgNzkwMjgsIDc5MDM0LCAKLSAgICA3OTA0MCwgNzkwNDYsIDc5MDUyLCA3OTA1OCwgNzkwNjQsIDc5MDcwLCA3OTA3NiwgNzkwODIsIDc5MDg4LCA3OTA5NCwgCi0gICAgNzkxMDAsIDc5MTA2LCA3OTExMiwgNzkxMTgsIDc5MTI0LCA3OTEzMCwgNzkxMzYsIDc5MTQyLCA3OTE0OCwgNzkxNTYsIAotICAgIDc5MTY0LCA3OTE3MCwgNzkxNzYsIDc5MTgyLCA3OTE4OCwgNzkxOTcsIDc5MjA2LCA3OTIxNCwgNzkyMjIsIDc5MjMwLCAKLSAgICA3OTIzOCwgNzkyNDYsIDc5MjU0LCA3OTI2MiwgNzkyNzAsIDc5Mjc3LCA3OTI4NCwgNzkyOTQsIDc5MzA0LCA3OTMwOCwgCi0gICAgNzkzMTIsIDc5MzE3LCA3OTMyMiwgNzkzMjcsIDc5MzMyLCA3OTM0MSwgNzkzNTAsIDc5MzU2LCA3OTM2MiwgNzkzNjksIAotICAgIDc5Mzc2LCA3OTM4MywgNzkzODcsIDc5MzkzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCA3OTM5OSwgNzk0MDUsIDc5NDExLCA3OTQxNywgNzk0MjMsIDc5NDI4LCA3OTQzMywgNzk0MzksIDc5NDQ1LCAKLSAgICA3OTQ1MSwgNzk0NTcsIDc5NDY1LCA3OTQ3MSwgNzk0NzcsIDc5NDg1LCA3OTQ5MywgNzk1MDEsIDc5NTA5LCA3OTUxNCwgCi0gICAgNzk1MTksIDc5NTI0LCA3OTUyOSwgNzk1NDIsIDc5NTU1LCA3OTU2NSwgNzk1NzUsIDc5NTg2LCA3OTU5NywgNzk2MDgsIAotICAgIDc5NjE5LCA3OTYyOSwgNzk2MzksIDc5NjUwLCA3OTY2MSwgNzk2NzIsIDc5NjgzLCA3OTY5MywgNzk3MDMsIDc5NzEzLCAKLSAgICA3OTcyOSwgNzk3NDUsIDc5NzYxLCA3OTc2OCwgNzk3NzUsIDc5NzgyLCA3OTc4OSwgNzk3OTksIDc5ODA5LCA3OTgxOSwgCi0gICAgNzk4MzEsIDc5ODQxLCA3OTg0OSwgNzk4NTcsIDc5ODY2LCA3OTg3NCwgNzk4ODQsIDc5ODkyLCA3OTkwMCwgNzk5MDgsIAotICAgIDc5OTE3LCA3OTkyNSwgNzk5MzUsIDc5OTQzLCA3OTk1MSwgNzk5NTksIDc5OTY5LCA3OTk3NywgNzk5ODQsIDc5OTkxLCAKLSAgICA3OTk5OCwgODAwMDUsIDgwMDEzLCA4MDAyMSwgODAwMjksIDgwMDM3LCA4MDA0NSwgODAwNTQsIDgwMDYyLCA4MDA3MCwgCi0gICAgODAwNzgsIDgwMDg2LCA4MDA5NCwgODAxMDMsIDgwMTExLCA4MDExOSwgODAxMjcsIDgwMTM1LCA4MDE0MywgODAxNTEsIAotICAgIDgwMTU5LCA4MDE2NywgODAxNzUsIDgwMTgzLCA4MDE5MiwgODAyMDAsIDgwMjEwLCA4MDIxOCwgODAyMjYsIDgwMjM0LCAKLSAgICA4MDI0NCwgODAyNTIsIDgwMjYwLCA4MDI2OCwgODAyNzYsIDgwMjg1LCA4MDI5NCwgODAzMDIsIDgwMzEyLCA4MDMyMCwgCi0gICAgODAzMjgsIDgwMzM2LCA4MDM0NSwgODAzNTMsIDgwMzYzLCA4MDM3MSwgODAzNzgsIDgwMzg1LCA4MDM5MywgODA0MDAsIAotICAgIDgwNDA5LCA4MDQxNiwgODA0MjQsIDgwNDMyLCA4MDQ0MSwgODA0NDksIDgwNDU5LCA4MDQ2NywgODA0NzUsIDgwNDgzLCAKLSAgICA4MDQ5MywgODA1MDEsIDgwNTA4LCA4MDUxNSwgODA1MjMsIDgwNTMwLCA4MDUzOSwgODA1NDYsIDgwNTU2LCA4MDU2NiwgCi0gICAgODA1NzcsIDgwNTg2LCA4MDU5NSwgODA2MDQsIDgwNjEzLCA4MDYyMiwgODA2MzIsIDgwNjQzLCA4MDY1NCwgODA2NjQsIAotICAgIDgwNjc1LCA4MDY4NywgODA2OTcsIDgwNzA2LCA4MDcxNSwgODA3MjMsIDgwNzMyLCA4MDc0MiwgODA3NTAsIDgwNzU5LCAKLSAgICA4MDc2OCwgODA3NzYsIDgwNzg1LCA4MDc5NSwgODA4MDMsIDgwODEyLCA4MDgyMSwgODA4MjksIDgwODM4LCA4MDg0OCwgCi0gICAgODA4NTYsIDgwODY2LCA4MDg3NCwgODA4ODQsIDgwODkyLCA4MDkwMCwgODA5MDksIDgwOTE3LCA4MDkyNywgODA5MzUsIAotICAgIDgwOTQzLCA4MDk1MywgODA5NjEsIDgwOTY4LCA4MDk3NSwgODA5ODQsIDgwOTkzLCA4MTAwMSwgODEwMTAsIDgxMDIwLCAKLSAgICA4MTAyOCwgODEwMzksIDgxMDQ3LCA4MTA1NSwgODEwNjIsIDgxMDcwLCA4MTA3OSwgODEwODYsIDgxMDk2LCA4MTEwNiwgCi0gICAgODExMTcsIDgxMTI3LCA4MTEzOCwgODExNDYsIDgxMTU0LCA4MTE2MywgODExNzEsIDgxMTgwLCA4MTE4OCwgODExOTYsIAotICAgIDgxMjA1LCA4MTIxMywgODEyMjIsIDgxMjMwLCA4MTIzNywgODEyNDQsIDgxMjUxLCA4MTI1OCwgODEyNjYsIDgxMjc0LCAKLSAgICA4MTI4MiwgODEyOTAsIDgxMjk5LCA4MTMwNywgODEzMTUsIDgxMzI0LCA4MTMzMiwgODEzNDAsIDgxMzQ4LCA4MTM1NywgCi0gICAgODEzNjUsIDgxMzczLCA4MTM4MSwgODEzODksIDgxMzk3LCA4MTQwNSwgODE0MTMsIDgxNDIxLCA4MTQyOSwgODE0MzgsIAotICAgIDgxNDQ2LCA4MTQ1NCwgODE0NjIsIDgxNDcwLCA4MTQ3OCwgODE0ODcsIDgxNDk2LCA4MTUwNCwgODE1MTIsIDgxNTIwLCAKLSAgICA4MTUyOSwgODE1MzcsIDgxNTQ2LCA4MTU1MywgODE1NjAsIDgxNTY4LCA4MTU3NSwgODE1ODMsIDgxNTkxLCA4MTYwMCwgCi0gICAgODE2MDgsIDgxNjE3LCA4MTYyNSwgODE2MzMsIDgxNjQzLCA4MTY1MCwgODE2NTcsIDgxNjY1LCA4MTY3MiwgODE2ODAsIAotICAgIDgxNjkwLCA4MTcwMSwgODE3MDksIDgxNzE4LCA4MTcyNiwgODE3MzUsIDgxNzQzLCA4MTc1MiwgODE3NjAsIDgxNzY5LCAKLSAgICA4MTc3NywgODE3ODYsIDgxNzk1LCA4MTgwMywgODE4MTEsIDgxODE5LCA4MTgyOCwgODE4MzUsIDgxODQzLCA4MTg1MiwgCi0gICAgODE4NjEsIDgxODcwLCA4MTg4MCwgODE4ODgsIDgxODk4LCA4MTkwNiwgODE5MTYsIDgxOTI0LCA4MTkzNCwgODE5NDIsIAotICAgIDgxOTUyLCA4MTk2MCwgODE5NjksIDgxOTc2LCA4MTk4NSwgODE5OTIsIDgyMDAyLCA4MjAxMCwgODIwMjAsIDgyMDI4LCAKLSAgICA4MjAzOCwgODIwNDYsIDgyMDU0LCA4MjA2MiwgODIwNzEsIDgyMDc5LCA4MjA4OCwgODIwOTcsIDgyMTA2LCA4MjExNSwgCi0gICAgODIxMjUsIDgyMTMzLCA4MjE0MywgODIxNTEsIDgyMTYxLCA4MjE2OSwgODIxNzksIDgyMTg3LCA4MjE5NywgODIyMDUsIAotICAgIDgyMjE0LCA4MjIyMSwgODIyMzAsIDgyMjM3LCA4MjI0NywgODIyNTUsIDgyMjY1LCA4MjI3MywgODIyODMsIDgyMjkxLCAKLSAgICA4MjI5OSwgODIzMDcsIDgyMzE2LCA4MjMyNCwgODIzMzMsIDgyMzQyLCA4MjM1MSwgODIzNjAsIDgyMzY4LCA4MjM3NiwgCi0gICAgODIzODUsIDgyMzkzLCA4MjQwMiwgODI0MTEsIDgyNDE5LCA4MjQyNywgODI0MzUsIDgyNDQ0LCA4MjQ1MiwgODI0NjAsIAotICAgIDgyNDY5LCA4MjQ3NywgODI0ODUsIDgyNDkzLCA4MjUwMSwgODI1MDYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDgyNTExLCA4MjUyMSwgODI1MzEsIDgyNTQxLCA4MjU1MSwgODI1NjIsIDgyNTcyLCA4MjU4MiwgCi0gICAgODI1OTMsIDgyNjAyLCA4MjYxMSwgODI2MjAsIDgyNjMxLCA4MjY0MSwgODI2NTEsIDgyNjYzLCA4MjY3MywgODI2ODMsIAotICAgIDgyNjkzLCA4MjcwMywgODI3MTMsIDgyNzIzLCA4MjczMywgODI3NDMsIDgyNzUzLCA4Mjc2MywgODI3NzMsIDgyNzg0LCAKLSAgICA4Mjc5NSwgODI4MDUsIDgyODE1LCA4MjgyNywgODI4MzgsIDgyODQ5LCA4Mjg1OSwgODI4NjksIDgyODc5LCA4Mjg4OSwgCi0gICAgODI4OTksIDgyOTA5LCA4MjkxOSwgODI5MzEsIDgyOTQxLCA4Mjk1MSwgODI5NjMsIDgyOTc0LCA4Mjk4NSwgODI5OTUsIAotICAgIDgzMDA1LCA4MzAxNSwgODMwMjUsIDgzMDM3LCA4MzA0NywgODMwNTcsIDgzMDY4LCA4MzA3OSwgODMwODksIDgzMDk5LCAKLSAgICA4MzEwOCwgODMxMTcsIDgzMTI2LCA4MzEzNSwgODMxNDQsIDgzMTU0LCAwLCAwLCA4MzE2NCwgODMxNzQsIDgzMTg0LCAKLSAgICA4MzE5NCwgODMyMDQsIDgzMjE2LCA4MzIyNiwgODMyMzYsIDgzMjQ4LCA4MzI1OCwgODMyNzAsIDgzMjc5LCA4MzI4OCwgCi0gICAgODMyOTksIDgzMzA5LCA4MzMyMSwgODMzMzIsIDgzMzQ1LCA4MzM1NSwgODMzNjcsIDgzMzc2LCA4MzM4NywgODMzOTgsIAotICAgIDgzNDExLCA4MzQyMSwgODM0MzEsIDgzNDQxLCA4MzQ1MSwgODM0NjEsIDgzNDcwLCA4MzQ3OSwgODM0ODgsIDgzNDk3LCAKLSAgICA4MzUwNywgODM1MTcsIDgzNTI3LCA4MzUzNywgODM1NDcsIDgzNTU3LCA4MzU2NywgODM1NzcsIDgzNTg3LCA4MzU5NywgCi0gICAgODM2MDcsIDgzNjE3LCA4MzYyNiwgODM2MzUsIDgzNjQ0LCA4MzY1NCwgODM2NjQsIDgzNjc0LCA4MzY4NCwgODM2OTQsIAotICAgIDgzNzA1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4MzcxNSwgODM3MzAsIAotICAgIDgzNzQ1LCA4Mzc1MSwgODM3NTcsIDgzNzYzLCA4Mzc2OSwgODM3NzUsIDgzNzgxLCA4Mzc4NywgODM3OTMsIDgzODAxLCAKLSAgICA4MzgwNSwgODM4MDgsIDAsIDAsIDgzODE2LCA4MzgxOSwgODM4MjIsIDgzODI1LCA4MzgyOCwgODM4MzEsIDgzODM0LCAKLSAgICA4MzgzNywgODM4NDAsIDgzODQzLCA4Mzg0NiwgODM4NDksIDgzODUyLCA4Mzg1NSwgODM4NTgsIDgzODYxLCA4Mzg2NCwgCi0gICAgODM4NzIsIDgzODgxLCA4Mzg5MiwgODM5MDAsIDgzOTA4LCA4MzkxNywgODM5MjYsIDgzOTM3LCA4Mzk0OSwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgODM5NTgsIDgzOTYzLCA4Mzk2OCwgODM5NzUsIDgzOTgyLCA4Mzk4OCwgODM5OTQsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDgzOTk5LCA4NDAwOSwgODQwMTksIDg0MDI5LCA4NDAzOCwgODQwNDksIDg0MDU4LCA4NDA2NywgCi0gICAgODQwNzcsIDg0MDg3LCA4NDA5OSwgODQxMTEsIDg0MTIyLCA4NDEzMywgODQxNDQsIDg0MTU1LCA4NDE2NSwgODQxNzUsIAotICAgIDg0MTg1LCA4NDE5NSwgODQyMDYsIDg0MjE3LCA4NDIyMSwgODQyMjYsIDg0MjM1LCA4NDI0NCwgODQyNDgsIDg0MjUyLCAKLSAgICA4NDI1NiwgODQyNjEsIDg0MjY2LCA4NDI3MSwgODQyNzYsIDg0Mjc5LCA4NDI4MywgMCwgODQyODgsIDg0MjkxLCA4NDI5NCwgCi0gICAgODQyOTgsIDg0MzAyLCA4NDMwNywgODQzMTEsIDg0MzE1LCA4NDMyMCwgODQzMjUsIDg0MzMyLCA4NDMzOSwgODQzNDIsIAotICAgIDg0MzQ1LCA4NDM0OCwgODQzNTEsIDg0MzU0LCA4NDM1OCwgODQzNjIsIDAsIDg0MzY2LCA4NDM3MSwgODQzNzUsIDg0Mzc5LCAKLSAgICAwLCAwLCAwLCAwLCA4NDM4NCwgODQzODksIDg0Mzk2LCA4NDQwMSwgODQ0MDYsIDAsIDg0NDExLCA4NDQxNiwgODQ0MjEsIAotICAgIDg0NDI2LCA4NDQzMSwgODQ0MzYsIDg0NDQxLCA4NDQ0NiwgODQ0NTEsIDg0NDU2LCA4NDQ2MSwgODQ0NjYsIDg0NDc1LCAKLSAgICA4NDQ4NCwgODQ0OTIsIDg0NTAwLCA4NDUwOSwgODQ1MTgsIDg0NTI3LCA4NDUzNiwgODQ1NDQsIDg0NTUyLCA4NDU2MCwgCi0gICAgODQ1NjgsIDg0NTczLCA4NDU3OCwgODQ1ODQsIDg0NTkwLCA4NDU5NiwgODQ2MDIsIDg0NjEwLCA4NDYxOCwgODQ2MjQsIAotICAgIDg0NjMwLCA4NDYzNiwgODQ2NDIsIDg0NjQ4LCA4NDY1NCwgODQ2NjAsIDg0NjY2LCA4NDY3MSwgODQ2NzYsIDg0NjgxLCAKLSAgICA4NDY4NiwgODQ2OTEsIDg0Njk2LCA4NDcwMSwgODQ3MDYsIDg0NzEyLCA4NDcxOCwgODQ3MjQsIDg0NzMwLCA4NDczNiwgCi0gICAgODQ3NDIsIDg0NzQ4LCA4NDc1NCwgODQ3NjAsIDg0NzY2LCA4NDc3MiwgODQ3NzgsIDg0Nzg0LCA4NDc5MCwgODQ3OTYsIAotICAgIDg0ODAyLCA4NDgwOCwgODQ4MTQsIDg0ODIwLCA4NDgyNiwgODQ4MzIsIDg0ODM4LCA4NDg0NCwgODQ4NTAsIDg0ODU2LCAKLSAgICA4NDg2MiwgODQ4NjgsIDg0ODc0LCA4NDg4MCwgODQ4ODYsIDg0ODkyLCA4NDg5OCwgODQ5MDQsIDg0OTEwLCA4NDkxNiwgCi0gICAgODQ5MjIsIDg0OTI4LCA4NDkzNCwgODQ5NDAsIDg0OTQ2LCA4NDk1MiwgODQ5NTgsIDg0OTY0LCA4NDk3MCwgODQ5NzYsIAotICAgIDg0OTgyLCA4NDk4OCwgODQ5OTQsIDg1MDAwLCA4NTAwNiwgODUwMTIsIDg1MDE4LCA4NTAyNCwgODUwMzAsIDg1MDM2LCAKLSAgICA4NTA0MiwgODUwNDgsIDg1MDU0LCA4NTA2MCwgODUwNjYsIDg1MDcxLCA4NTA3NiwgODUwODEsIDg1MDg2LCA4NTA5MiwgCi0gICAgODUwOTgsIDg1MTA0LCA4NTExMCwgODUxMTYsIDg1MTIyLCA4NTEyOCwgODUxMzQsIDg1MTQwLCA4NTE0NiwgODUxNTMsIAotICAgIDg1MTYwLCA4NTE2NSwgODUxNzAsIDg1MTc1LCA4NTE4MCwgODUxOTIsIDg1MjA0LCA4NTIxNSwgODUyMjYsIDg1MjM4LCAKLSAgICA4NTI1MCwgODUyNTgsIDAsIDAsIDg1MjY2LCAwLCA4NTI3NCwgODUyNzgsIDg1MjgyLCA4NTI4NSwgODUyODksIDg1MjkzLCAKLSAgICA4NTI5NiwgODUyOTksIDg1MzAzLCA4NTMwNywgODUzMTAsIDg1MzEzLCA4NTMxNiwgODUzMTksIDg1MzI0LCA4NTMyNywgCi0gICAgODUzMzEsIDg1MzM0LCA4NTMzNywgODUzNDAsIDg1MzQzLCA4NTM0NiwgODUzNDksIDg1MzUyLCA4NTM1NSwgODUzNTgsIAotICAgIDg1MzYxLCA4NTM2NCwgODUzNjgsIDg1MzcyLCA4NTM3NiwgODUzODAsIDg1Mzg1LCA4NTM5MCwgODUzOTYsIDg1NDAyLCAKLSAgICA4NTQwOCwgODU0MTMsIDg1NDE5LCA4NTQyNSwgODU0MzEsIDg1NDM2LCA4NTQ0MiwgODU0NDgsIDg1NDUzLCA4NTQ1OCwgCi0gICAgODU0NjQsIDg1NDY5LCA4NTQ3NSwgODU0ODEsIDg1NDg2LCA4NTQ5MiwgODU0OTgsIDg1NTAzLCA4NTUwOSwgODU1MTUsIAotICAgIDg1NTIxLCA4NTUyNywgODU1MzMsIDg1NTM3LCA4NTU0MiwgODU1NDYsIDg1NTUxLCA4NTU1NSwgODU1NjAsIDg1NTY1LCAKLSAgICA4NTU3MSwgODU1NzcsIDg1NTgzLCA4NTU4OCwgODU1OTQsIDg1NjAwLCA4NTYwNiwgODU2MTEsIDg1NjE3LCA4NTYyMywgCi0gICAgODU2MjgsIDg1NjMzLCA4NTYzOSwgODU2NDQsIDg1NjUwLCA4NTY1NiwgODU2NjEsIDg1NjY3LCA4NTY3MywgODU2NzgsIAotICAgIDg1Njg0LCA4NTY5MCwgODU2OTYsIDg1NzAyLCA4NTcwOCwgODU3MTMsIDg1NzE3LCA4NTcyMiwgODU3MjQsIDg1NzI5LCAKLSAgICA4NTczNCwgODU3NDAsIDg1NzQ1LCA4NTc1MCwgODU3NTQsIDg1NzYwLCA4NTc2NSwgODU3NzAsIDg1Nzc1LCA4NTc4MCwgCi0gICAgODU3ODUsIDg1NzkwLCA4NTc5NSwgODU4MDEsIDg1ODA3LCA4NTgxMywgODU4MjEsIDg1ODI1LCA4NTgyOSwgODU4MzMsIAotICAgIDg1ODM3LCA4NTg0MSwgODU4NDUsIDg1ODUwLCA4NTg1NSwgODU4NjAsIDg1ODY1LCA4NTg2OSwgODU4NzQsIDg1ODc5LCAKLSAgICA4NTg4NCwgODU4ODksIDg1ODk0LCA4NTg5OSwgODU5MDQsIDg1OTA5LCA4NTkxMywgODU5MTcsIDg1OTIyLCA4NTkyNywgCi0gICAgODU5MzIsIDg1OTM3LCA4NTk0MSwgODU5NDYsIDg1OTUxLCA4NTk1NiwgODU5NjEsIDg1OTY1LCA4NTk3MCwgODU5NzUsIAotICAgIDg1OTgwLCA4NTk4NSwgODU5ODksIDg1OTk0LCA4NTk5OSwgODYwMDMsIDg2MDA4LCA4NjAxMywgODYwMTgsIDg2MDIzLCAKLSAgICA4NjAyOCwgODYwMzMsIDg2MDQwLCA4NjA0NywgODYwNTEsIDg2MDU2LCA4NjA2MSwgODYwNjYsIDg2MDcxLCA4NjA3NiwgCi0gICAgODYwODEsIDg2MDg2LCA4NjA5MSwgODYwOTYsIDg2MTAxLCA4NjEwNiwgODYxMTEsIDg2MTE2LCA4NjEyMSwgODYxMjYsIAotICAgIDg2MTMxLCA4NjEzNiwgODYxNDEsIDg2MTQ2LCA4NjE1MSwgODYxNTYsIDg2MTYxLCA4NjE2NiwgODYxNzEsIDg2MTc2LCAKLSAgICA4NjE4MSwgODYxODYsIDg2MTkxLCA4NjE5NiwgMCwgMCwgMCwgODYyMDEsIDg2MjA1LCA4NjIxMCwgODYyMTQsIDg2MjE5LCAKLSAgICA4NjIyNCwgMCwgMCwgODYyMjgsIDg2MjMzLCA4NjIzOCwgODYyNDIsIDg2MjQ3LCA4NjI1MiwgMCwgMCwgODYyNTcsIAotICAgIDg2MjYyLCA4NjI2NiwgODYyNzEsIDg2Mjc2LCA4NjI4MSwgMCwgMCwgODYyODYsIDg2MjkxLCA4NjI5NiwgMCwgMCwgMCwgCi0gICAgODYzMDAsIDg2MzA0LCA4NjMwOCwgODYzMTIsIDg2MzE1LCA4NjMxOSwgODYzMjMsIDAsIDg2MzI3LCA4NjMzMywgODYzMzYsIAotICAgIDg2MzQwLCA4NjM0MywgODYzNDcsIDg2MzUxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4NjM1NSwgODYzNjEsIAotICAgIDg2MzY3LCA4NjM3MywgODYzNzksIDAsIDAsIDg2MzgzLCA4NjM4OSwgODYzOTUsIDg2NDAxLCA4NjQwNywgODY0MTMsIAotICAgIDg2NDIwLCA4NjQyNywgODY0MzQsIDg2NDQxLCA4NjQ0OCwgODY0NTUsIDAsIDg2NDYyLCA4NjQ2OSwgODY0NzYsIDg2NDgyLCAKLSAgICA4NjQ4OSwgODY0OTYsIDg2NTAzLCA4NjUxMCwgODY1MTYsIDg2NTIzLCA4NjUzMCwgODY1MzcsIDg2NTQ0LCA4NjU1MCwgCi0gICAgODY1NTcsIDg2NTY0LCA4NjU3MSwgODY1NzgsIDg2NTg0LCA4NjU5MSwgODY1OTgsIDg2NjA1LCA4NjYxMiwgODY2MTksIAotICAgIDg2NjI2LCA4NjYzMywgMCwgODY2NDAsIDg2NjQ2LCA4NjY1MywgODY2NjAsIDg2NjY3LCA4NjY3NCwgODY2ODAsIDg2Njg3LCAKLSAgICA4NjY5NCwgODY3MDEsIDg2NzA4LCA4NjcxNSwgODY3MjIsIDg2NzI5LCA4NjczNSwgODY3NDIsIDg2NzQ5LCA4Njc1NiwgCi0gICAgODY3NjMsIDAsIDg2NzcwLCA4Njc3NywgMCwgODY3ODQsIDg2NzkxLCA4Njc5OCwgODY4MDUsIDg2ODEyLCA4NjgxOSwgCi0gICAgODY4MjYsIDg2ODMzLCA4Njg0MCwgODY4NDcsIDg2ODU0LCA4Njg2MSwgODY4NjgsIDg2ODc1LCA4Njg4MiwgMCwgMCwgCi0gICAgODY4ODgsIDg2ODkzLCA4Njg5OCwgODY5MDMsIDg2OTA4LCA4NjkxMywgODY5MTgsIDg2OTIzLCA4NjkyOCwgODY5MzMsIAotICAgIDg2OTM4LCA4Njk0MywgODY5NDgsIDg2OTUzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4Njk1OCwgODY5NjUsIAotICAgIDg2OTcyLCA4Njk3OSwgODY5ODYsIDg2OTkzLCA4NzAwMCwgODcwMDcsIDg3MDE0LCA4NzAyMSwgODcwMjgsIDg3MDM1LCAKLSAgICA4NzA0MiwgODcwNDksIDg3MDU2LCA4NzA2MywgODcwNzAsIDg3MDc3LCA4NzA4NCwgODcwOTEsIDg3MDk5LCA4NzEwNywgCi0gICAgODcxMTQsIDg3MTIxLCA4NzEyNiwgODcxMzQsIDg3MTQyLCA4NzE0OSwgODcxNTYsIDg3MTYxLCA4NzE2OCwgODcxNzMsIAotICAgIDg3MTc4LCA4NzE4NSwgODcxOTAsIDg3MTk1LCA4NzIwMCwgODcyMDgsIDg3MjEzLCA4NzIxOCwgODcyMjUsIDg3MjMwLCAKLSAgICA4NzIzNSwgODcyNDIsIDg3MjQ5LCA4NzI1NCwgODcyNTksIDg3MjY0LCA4NzI2OSwgODcyNzQsIDg3Mjc5LCA4NzI4NCwgCi0gICAgODcyODksIDg3Mjk0LCA4NzMwMSwgODczMDYsIDg3MzEzLCA4NzMxOCwgODczMjMsIDg3MzI4LCA4NzMzMywgODczMzgsIAotICAgIDg3MzQzLCA4NzM0OCwgODczNTMsIDg3MzU4LCA4NzM2MywgODczNjgsIDg3Mzc1LCA4NzM4MiwgODczODksIDg3Mzk2LCAKLSAgICA4NzQwMiwgODc0MDcsIDg3NDE0LCA4NzQxOSwgODc0MjQsIDg3NDMzLCA4NzQ0MCwgODc0NDksIDg3NDU2LCA4NzQ2MSwgCi0gICAgODc0NjYsIDg3NDc0LCA4NzQ3OSwgODc0ODQsIDg3NDg5LCA4NzQ5NCwgODc0OTksIDg3NTA2LCA4NzUxMSwgODc1MTYsIAotICAgIDg3NTIxLCA4NzUyNiwgODc1MzEsIDg3NTM4LCA4NzU0NSwgODc1NTIsIDg3NTU5LCA4NzU2NiwgODc1NzMsIDg3NTgwLCAKLSAgICA4NzU4NywgODc1OTQsIDg3NjAxLCA4NzYwOCwgODc2MTUsIDg3NjIyLCA4NzYyOSwgODc2MzYsIDg3NjQzLCA4NzY1MCwgCi0gICAgODc2NTcsIDg3NjY0LCA4NzY3MSwgODc2NzgsIDg3Njg1LCA4NzY5MiwgODc2OTksIDg3NzA2LCA4NzcxMywgODc3MjAsIAotICAgIDg3NzI3LCAwLCAwLCAwLCAwLCAwLCA4NzczNCwgODc3NDIsIDg3NzUwLCAwLCAwLCAwLCAwLCA4Nzc1NSwgODc3NTksIAotICAgIDg3NzYzLCA4Nzc2NywgODc3NzEsIDg3Nzc1LCA4Nzc3OSwgODc3ODMsIDg3Nzg3LCA4Nzc5MSwgODc3OTYsIDg3ODAxLCAKLSAgICA4NzgwNiwgODc4MTEsIDg3ODE2LCA4NzgyMSwgODc4MjYsIDg3ODMxLCA4NzgzNiwgODc4NDIsIDg3ODQ4LCA4Nzg1NCwgCi0gICAgODc4NjEsIDg3ODY4LCA4Nzg3NSwgODc4ODIsIDg3ODg5LCA4Nzg5NiwgODc5MDIsIDg3OTA4LCA4NzkxNCwgODc5MjEsIAotICAgIDg3OTI4LCA4NzkzNSwgODc5NDIsIDg3OTQ5LCA4Nzk1NiwgODc5NjMsIDg3OTcwLCA4Nzk3NywgODc5ODQsIDg3OTkxLCAKLSAgICA4Nzk5OCwgODgwMDUsIDg4MDEyLCAwLCAwLCAwLCA4ODAxOSwgODgwMjcsIDg4MDM1LCA4ODA0MywgODgwNTEsIDg4MDU5LCAKLSAgICA4ODA2OSwgODgwNzksIDg4MDg3LCA4ODA5NSwgODgxMDMsIDg4MTExLCA4ODExOSwgODgxMjUsIDg4MTMyLCA4ODE0MSwgCi0gICAgODgxNTAsIDg4MTU5LCA4ODE2OCwgODgxNzcsIDg4MTg2LCA4ODE5NiwgODgyMDcsIDg4MjE3LCA4ODIyOCwgODgyMzcsIAotICAgIDg4MjQ2LCA4ODI1NSwgODgyNjUsIDg4Mjc2LCA4ODI4NiwgODgyOTcsIDg4MzA4LCA4ODMxNywgODgzMjUsIDg4MzMxLCAKLSAgICA4ODMzNywgODgzNDMsIDg4MzQ5LCA4ODM1NywgODgzNjUsIDg4MzcxLCA4ODM3OCwgODgzODgsIDg4Mzk1LCA4ODQwMiwgCi0gICAgODg0MDksIDg4NDE2LCA4ODQyMywgODg0MzMsIDg4NDQwLCA4ODQ0NywgODg0NTUsIDg4NDYzLCA4ODQ3MiwgODg0ODEsIAotICAgIDg4NDkwLCA4ODQ5OSwgODg1MDgsIDg4NTE2LCA4ODUyNSwgODg1MzQsIDg4NTQzLCA4ODU0NywgODg1NTQsIDg4NTU5LCAKLSAgICA4ODU2NCwgODg1NjgsIDg4NTcyLCA4ODU3NiwgODg1ODAsIDg4NTg1LCA4ODU5MCwgODg1OTYsIDg4NjAyLCA4ODYwNiwgCi0gICAgODg2MTIsIDg4NjE2LCA4ODYyMCwgODg2MjQsIDg4NjI4LCA4ODYzMiwgODg2MzYsIDg4NjQyLCAwLCAwLCAwLCAwLCAwLCAKLSAgICA4ODY0NiwgODg2NTEsIDg4NjU2LCA4ODY2MSwgODg2NjYsIDg4NjczLCA4ODY3OCwgODg2ODMsIDg4Njg4LCA4ODY5MywgCi0gICAgODg2OTgsIDg4NzAzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4Mzc0MywgODM3NTgsIDgzNzczLCA4Mzc3OSwgODM3ODUsIDgzNzkxLCAKKyAgICA4Mzc5NywgODM4MDMsIDgzODA5LCA4MzgxNSwgODM4MjEsIDgzODI5LCA4MzgzMywgODM4MzYsIDAsIDAsIDgzODQ0LCAKKyAgICA4Mzg0NywgODM4NTAsIDgzODUzLCA4Mzg1NiwgODM4NTksIDgzODYyLCA4Mzg2NSwgODM4NjgsIDgzODcxLCA4Mzg3NCwgCisgICAgODM4NzcsIDgzODgwLCA4Mzg4MywgODM4ODYsIDgzODg5LCA4Mzg5MiwgODM5MDAsIDgzOTA5LCA4MzkyMCwgODM5MjgsIAorICAgIDgzOTM2LCA4Mzk0NSwgODM5NTQsIDgzOTY1LCA4Mzk3NywgMCwgMCwgMCwgMCwgMCwgMCwgODM5ODYsIDgzOTkxLCA4Mzk5NiwgCisgICAgODQwMDMsIDg0MDEwLCA4NDAxNiwgODQwMjIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDg0MDI3LCA4NDAzNywgCisgICAgODQwNDcsIDg0MDU3LCA4NDA2NiwgODQwNzcsIDg0MDg2LCA4NDA5NSwgODQxMDUsIDg0MTE1LCA4NDEyNywgODQxMzksIAorICAgIDg0MTUwLCA4NDE2MSwgODQxNzIsIDg0MTgzLCA4NDE5MywgODQyMDMsIDg0MjEzLCA4NDIyMywgODQyMzQsIDg0MjQ1LCAKKyAgICA4NDI0OSwgODQyNTQsIDg0MjYzLCA4NDI3MiwgODQyNzYsIDg0MjgwLCA4NDI4NCwgODQyODksIDg0Mjk0LCA4NDI5OSwgCisgICAgODQzMDQsIDg0MzA3LCA4NDMxMSwgMCwgODQzMTYsIDg0MzE5LCA4NDMyMiwgODQzMjYsIDg0MzMwLCA4NDMzNSwgODQzMzksIAorICAgIDg0MzQzLCA4NDM0OCwgODQzNTMsIDg0MzYwLCA4NDM2NywgODQzNzAsIDg0MzczLCA4NDM3NiwgODQzNzksIDg0MzgyLCAKKyAgICA4NDM4NiwgODQzOTAsIDAsIDg0Mzk0LCA4NDM5OSwgODQ0MDMsIDg0NDA3LCAwLCAwLCAwLCAwLCA4NDQxMiwgODQ0MTcsIAorICAgIDg0NDI0LCA4NDQyOSwgODQ0MzQsIDAsIDg0NDM5LCA4NDQ0NCwgODQ0NDksIDg0NDU0LCA4NDQ1OSwgODQ0NjQsIDg0NDY5LCAKKyAgICA4NDQ3NCwgODQ0NzksIDg0NDg0LCA4NDQ4OSwgODQ0OTQsIDg0NTAzLCA4NDUxMiwgODQ1MjAsIDg0NTI4LCA4NDUzNywgCisgICAgODQ1NDYsIDg0NTU1LCA4NDU2NCwgODQ1NzIsIDg0NTgwLCA4NDU4OCwgODQ1OTYsIDg0NjAxLCA4NDYwNiwgODQ2MTIsIAorICAgIDg0NjE4LCA4NDYyNCwgODQ2MzAsIDg0NjM4LCA4NDY0NiwgODQ2NTIsIDg0NjU4LCA4NDY2NCwgODQ2NzAsIDg0Njc2LCAKKyAgICA4NDY4MiwgODQ2ODgsIDg0Njk0LCA4NDY5OSwgODQ3MDQsIDg0NzA5LCA4NDcxNCwgODQ3MTksIDg0NzI0LCA4NDcyOSwgCisgICAgODQ3MzQsIDg0NzQwLCA4NDc0NiwgODQ3NTIsIDg0NzU4LCA4NDc2NCwgODQ3NzAsIDg0Nzc2LCA4NDc4MiwgODQ3ODgsIAorICAgIDg0Nzk0LCA4NDgwMCwgODQ4MDYsIDg0ODEyLCA4NDgxOCwgODQ4MjQsIDg0ODMwLCA4NDgzNiwgODQ4NDIsIDg0ODQ4LCAKKyAgICA4NDg1NCwgODQ4NjAsIDg0ODY2LCA4NDg3MiwgODQ4NzgsIDg0ODg0LCA4NDg5MCwgODQ4OTYsIDg0OTAyLCA4NDkwOCwgCisgICAgODQ5MTQsIDg0OTIwLCA4NDkyNiwgODQ5MzIsIDg0OTM4LCA4NDk0NCwgODQ5NTAsIDg0OTU2LCA4NDk2MiwgODQ5NjgsIAorICAgIDg0OTc0LCA4NDk4MCwgODQ5ODYsIDg0OTkyLCA4NDk5OCwgODUwMDQsIDg1MDEwLCA4NTAxNiwgODUwMjIsIDg1MDI4LCAKKyAgICA4NTAzNCwgODUwNDAsIDg1MDQ2LCA4NTA1MiwgODUwNTgsIDg1MDY0LCA4NTA3MCwgODUwNzYsIDg1MDgyLCA4NTA4OCwgCisgICAgODUwOTQsIDg1MDk5LCA4NTEwNCwgODUxMDksIDg1MTE0LCA4NTEyMCwgODUxMjYsIDg1MTMyLCA4NTEzOCwgODUxNDQsIAorICAgIDg1MTUwLCA4NTE1NiwgODUxNjIsIDg1MTY4LCA4NTE3NCwgODUxODEsIDg1MTg4LCA4NTE5MywgODUxOTgsIDg1MjAzLCAKKyAgICA4NTIwOCwgODUyMjAsIDg1MjMyLCA4NTI0MywgODUyNTQsIDg1MjY2LCA4NTI3OCwgODUyODYsIDAsIDAsIDg1Mjk0LCAwLCAKKyAgICA4NTMwMiwgODUzMDYsIDg1MzEwLCA4NTMxMywgODUzMTcsIDg1MzIxLCA4NTMyNCwgODUzMjcsIDg1MzMxLCA4NTMzNSwgCisgICAgODUzMzgsIDg1MzQxLCA4NTM0NCwgODUzNDcsIDg1MzUyLCA4NTM1NSwgODUzNTksIDg1MzYyLCA4NTM2NSwgODUzNjgsIAorICAgIDg1MzcxLCA4NTM3NCwgODUzNzcsIDg1MzgwLCA4NTM4MywgODUzODYsIDg1Mzg5LCA4NTM5MiwgODUzOTYsIDg1NDAwLCAKKyAgICA4NTQwNCwgODU0MDgsIDg1NDEzLCA4NTQxOCwgODU0MjQsIDg1NDMwLCA4NTQzNiwgODU0NDEsIDg1NDQ3LCA4NTQ1MywgCisgICAgODU0NTksIDg1NDY0LCA4NTQ3MCwgODU0NzYsIDg1NDgxLCA4NTQ4NiwgODU0OTIsIDg1NDk3LCA4NTUwMywgODU1MDksIAorICAgIDg1NTE0LCA4NTUyMCwgODU1MjYsIDg1NTMxLCA4NTUzNywgODU1NDMsIDg1NTQ5LCA4NTU1NSwgODU1NjEsIDg1NTY1LCAKKyAgICA4NTU3MCwgODU1NzQsIDg1NTc5LCA4NTU4MywgODU1ODgsIDg1NTkzLCA4NTU5OSwgODU2MDUsIDg1NjExLCA4NTYxNiwgCisgICAgODU2MjIsIDg1NjI4LCA4NTYzNCwgODU2MzksIDg1NjQ1LCA4NTY1MSwgODU2NTYsIDg1NjYxLCA4NTY2NywgODU2NzIsIAorICAgIDg1Njc4LCA4NTY4NCwgODU2ODksIDg1Njk1LCA4NTcwMSwgODU3MDYsIDg1NzEyLCA4NTcxOCwgODU3MjQsIDg1NzMwLCAKKyAgICA4NTczNiwgODU3NDEsIDg1NzQ1LCA4NTc1MCwgODU3NTIsIDg1NzU3LCA4NTc2MiwgODU3NjgsIDg1NzczLCA4NTc3OCwgCisgICAgODU3ODIsIDg1Nzg4LCA4NTc5MywgODU3OTgsIDg1ODAzLCA4NTgwOCwgODU4MTMsIDg1ODE4LCA4NTgyMywgODU4MjksIAorICAgIDg1ODM1LCA4NTg0MSwgODU4NDksIDg1ODUzLCA4NTg1NywgODU4NjEsIDg1ODY1LCA4NTg2OSwgODU4NzMsIDg1ODc4LCAKKyAgICA4NTg4MywgODU4ODgsIDg1ODkzLCA4NTg5NywgODU5MDIsIDg1OTA3LCA4NTkxMiwgODU5MTcsIDg1OTIyLCA4NTkyNywgCisgICAgODU5MzIsIDg1OTM3LCA4NTk0MSwgODU5NDUsIDg1OTUwLCA4NTk1NSwgODU5NjAsIDg1OTY1LCA4NTk2OSwgODU5NzQsIAorICAgIDg1OTc5LCA4NTk4NCwgODU5ODksIDg1OTkzLCA4NTk5OCwgODYwMDMsIDg2MDA4LCA4NjAxMywgODYwMTcsIDg2MDIyLCAKKyAgICA4NjAyNywgODYwMzEsIDg2MDM2LCA4NjA0MSwgODYwNDYsIDg2MDUxLCA4NjA1NiwgODYwNjEsIDg2MDY4LCA4NjA3NSwgCisgICAgODYwNzksIDg2MDg0LCA4NjA4OSwgODYwOTQsIDg2MDk5LCA4NjEwNCwgODYxMDksIDg2MTE0LCA4NjExOSwgODYxMjQsIAorICAgIDg2MTI5LCA4NjEzNCwgODYxMzksIDg2MTQ0LCA4NjE0OSwgODYxNTQsIDg2MTU5LCA4NjE2NCwgODYxNjksIDg2MTc0LCAKKyAgICA4NjE3OSwgODYxODQsIDg2MTg5LCA4NjE5NCwgODYxOTksIDg2MjA0LCA4NjIwOSwgODYyMTQsIDg2MjE5LCA4NjIyNCwgMCwgCisgICAgMCwgMCwgODYyMjksIDg2MjMzLCA4NjIzOCwgODYyNDIsIDg2MjQ3LCA4NjI1MiwgMCwgMCwgODYyNTYsIDg2MjYxLCAKKyAgICA4NjI2NiwgODYyNzAsIDg2Mjc1LCA4NjI4MCwgMCwgMCwgODYyODUsIDg2MjkwLCA4NjI5NCwgODYyOTksIDg2MzA0LCAKKyAgICA4NjMwOSwgMCwgMCwgODYzMTQsIDg2MzE5LCA4NjMyNCwgMCwgMCwgMCwgODYzMjgsIDg2MzMyLCA4NjMzNiwgODYzNDAsIAorICAgIDg2MzQzLCA4NjM0NywgODYzNTEsIDAsIDg2MzU1LCA4NjM2MSwgODYzNjQsIDg2MzY4LCA4NjM3MSwgODYzNzUsIDg2Mzc5LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4NjM4MywgODYzODksIDg2Mzk1LCA4NjQwMSwgODY0MDcsIDAsIDAsIAorICAgIDg2NDExLCA4NjQxNywgODY0MjMsIDg2NDI5LCA4NjQzNSwgODY0NDEsIDg2NDQ4LCA4NjQ1NSwgODY0NjIsIDg2NDY5LCAKKyAgICA4NjQ3NiwgODY0ODMsIDAsIDg2NDkwLCA4NjQ5NywgODY1MDQsIDg2NTEwLCA4NjUxNywgODY1MjQsIDg2NTMxLCA4NjUzOCwgCisgICAgODY1NDQsIDg2NTUxLCA4NjU1OCwgODY1NjUsIDg2NTcyLCA4NjU3OCwgODY1ODUsIDg2NTkyLCA4NjU5OSwgODY2MDYsIAorICAgIDg2NjEyLCA4NjYxOSwgODY2MjYsIDg2NjMzLCA4NjY0MCwgODY2NDcsIDg2NjU0LCA4NjY2MSwgMCwgODY2NjgsIDg2Njc0LCAKKyAgICA4NjY4MSwgODY2ODgsIDg2Njk1LCA4NjcwMiwgODY3MDgsIDg2NzE1LCA4NjcyMiwgODY3MjksIDg2NzM2LCA4Njc0MywgCisgICAgODY3NTAsIDg2NzU3LCA4Njc2MywgODY3NzAsIDg2Nzc3LCA4Njc4NCwgODY3OTEsIDAsIDg2Nzk4LCA4NjgwNSwgMCwgCisgICAgODY4MTIsIDg2ODE5LCA4NjgyNiwgODY4MzMsIDg2ODQwLCA4Njg0NywgODY4NTQsIDg2ODYxLCA4Njg2OCwgODY4NzUsIAorICAgIDg2ODgyLCA4Njg4OSwgODY4OTYsIDg2OTAzLCA4NjkxMCwgMCwgMCwgODY5MTYsIDg2OTIxLCA4NjkyNiwgODY5MzEsIAorICAgIDg2OTM2LCA4Njk0MSwgODY5NDYsIDg2OTUxLCA4Njk1NiwgODY5NjEsIDg2OTY2LCA4Njk3MSwgODY5NzYsIDg2OTgxLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4ODcwOCwgODg3MTUsIDg4NzI0LCA4ODczMywgODg3NDAsIDg4NzQ3LCA4ODc1NCwgCi0gICAgODg3NjEsIDg4NzY4LCA4ODc3NSwgODg3ODEsIDg4Nzg4LCA4ODc5NSwgODg4MDIsIDg4ODA5LCA4ODgxNiwgODg4MjMsIAotICAgIDg4ODMwLCA4ODgzNywgODg4NDYsIDg4ODUzLCA4ODg2MCwgODg4NjcsIDg4ODc0LCA4ODg4MSwgODg4ODgsIDg4ODk1LCAKLSAgICA4ODkwMiwgODg5MTEsIDg4OTE4LCA4ODkyNSwgODg5MzIsIDg4OTM5LCA4ODk0NiwgODg5NTMsIDg4OTYyLCA4ODk2OSwgCi0gICAgODg5NzYsIDg4OTgzLCA4ODk5MCwgODg5OTksIDg5MDA2LCA4OTAxMywgODkwMjAsIDg5MDI4LCA4OTAzNywgMCwgMCwgCi0gICAgODkwNDYsIDg5MDUwLCA4OTA1NCwgODkwNTksIDg5MDY0LCA4OTA2OSwgODkwNzQsIDg5MDc4LCA4OTA4MywgODkwODgsIAotICAgIDg5MDkzLCA4OTA5OCwgODkxMDMsIDg5MTA4LCA4OTExMiwgODkxMTYsIDg5MTIxLCA4OTEyNiwgODkxMzEsIDg5MTM1LCAKLSAgICA4OTE0MCwgODkxNDUsIDg5MTQ5LCA4OTE1NCwgODkxNTksIDg5MTY0LCA4OTE2OSwgODkxNzQsIDg5MTc5LCAwLCAwLCAwLCAKLSAgICA4OTE4NCwgODkxODgsIDg5MTkzLCA4OTE5OCwgODkyMDIsIDg5MjA3LCA4OTIxMSwgODkyMTYsIDg5MjIxLCA4OTIyNiwgCi0gICAgODkyMzEsIDg5MjM1LCA4OTIzOSwgODkyNDQsIDg5MjQ5LCA4OTI1NCwgODkyNTksIDg5MjY0LCA4OTI2OSwgODkyNzMsIAotICAgIDg5Mjc4LCA4OTI4MywgODkyODgsIDg5MjkzLCA4OTI5OCwgODkzMDMsIDg5MzA3LCA4OTMxMSwgODkzMTYsIDg5MzIxLCAKLSAgICA4OTMyNiwgODkzMzEsIDg5MzM2LCA4OTM0MSwgODkzNDYsIDg5MzUxLCA4OTM1NiwgODkzNjEsIDg5MzY2LCA4OTM3MSwgCi0gICAgODkzNzYsIDg5MzgxLCA4OTM4NiwgODkzOTEsIDg5Mzk2LCA4OTQwMSwgODk0MDYsIDg5NDExLCA4OTQxNiwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODY5ODYsIDg2OTkzLCA4NzAwMCwgODcwMDcsIDg3MDE0LCA4NzAyMSwgCisgICAgODcwMjgsIDg3MDM1LCA4NzA0MiwgODcwNDksIDg3MDU2LCA4NzA2MywgODcwNzAsIDg3MDc3LCA4NzA4NCwgODcwOTEsIAorICAgIDg3MDk4LCA4NzEwNSwgODcxMTIsIDg3MTE5LCA4NzEyNywgODcxMzUsIDg3MTQyLCA4NzE0OSwgODcxNTQsIDg3MTYyLCAKKyAgICA4NzE3MCwgODcxNzcsIDg3MTg0LCA4NzE4OSwgODcxOTYsIDg3MjAxLCA4NzIwNiwgODcyMTMsIDg3MjE4LCA4NzIyMywgCisgICAgODcyMjgsIDg3MjM2LCA4NzI0MSwgODcyNDYsIDg3MjUzLCA4NzI1OCwgODcyNjMsIDg3MjcwLCA4NzI3NywgODcyODIsIAorICAgIDg3Mjg3LCA4NzI5MiwgODcyOTcsIDg3MzAyLCA4NzMwNywgODczMTIsIDg3MzE3LCA4NzMyMiwgODczMjksIDg3MzM0LCAKKyAgICA4NzM0MSwgODczNDYsIDg3MzUxLCA4NzM1NiwgODczNjEsIDg3MzY2LCA4NzM3MSwgODczNzYsIDg3MzgxLCA4NzM4NiwgCisgICAgODczOTEsIDg3Mzk2LCA4NzQwMywgODc0MTAsIDg3NDE3LCA4NzQyNCwgODc0MzAsIDg3NDM1LCA4NzQ0MiwgODc0NDcsIAorICAgIDg3NDUyLCA4NzQ2MSwgODc0NjgsIDg3NDc3LCA4NzQ4NCwgODc0ODksIDg3NDk0LCA4NzUwMiwgODc1MDcsIDg3NTEyLCAKKyAgICA4NzUxNywgODc1MjIsIDg3NTI3LCA4NzUzNCwgODc1MzksIDg3NTQ0LCA4NzU0OSwgODc1NTQsIDg3NTU5LCA4NzU2NiwgCisgICAgODc1NzMsIDg3NTgwLCA4NzU4NywgODc1OTQsIDg3NjAxLCA4NzYwOCwgODc2MTUsIDg3NjIyLCA4NzYyOSwgODc2MzYsIAorICAgIDg3NjQzLCA4NzY1MCwgODc2NTcsIDg3NjY0LCA4NzY3MSwgODc2NzgsIDg3Njg1LCA4NzY5MiwgODc2OTksIDg3NzA2LCAKKyAgICA4NzcxMywgODc3MjAsIDg3NzI3LCA4NzczNCwgODc3NDEsIDg3NzQ4LCA4Nzc1NSwgMCwgMCwgMCwgMCwgMCwgODc3NjIsIAorICAgIDg3NzcwLCA4Nzc3OCwgMCwgMCwgMCwgMCwgODc3ODMsIDg3Nzg3LCA4Nzc5MSwgODc3OTUsIDg3Nzk5LCA4NzgwMywgCisgICAgODc4MDcsIDg3ODExLCA4NzgxNSwgODc4MTksIDg3ODI0LCA4NzgyOSwgODc4MzQsIDg3ODM5LCA4Nzg0NCwgODc4NDksIAorICAgIDg3ODU0LCA4Nzg1OSwgODc4NjQsIDg3ODcwLCA4Nzg3NiwgODc4ODIsIDg3ODg5LCA4Nzg5NiwgODc5MDMsIDg3OTEwLCAKKyAgICA4NzkxNywgODc5MjQsIDg3OTMwLCA4NzkzNiwgODc5NDIsIDg3OTQ5LCA4Nzk1NiwgODc5NjMsIDg3OTcwLCA4Nzk3NywgCisgICAgODc5ODQsIDg3OTkxLCA4Nzk5OCwgODgwMDUsIDg4MDEyLCA4ODAxOSwgODgwMjYsIDg4MDMzLCA4ODA0MCwgMCwgMCwgMCwgCisgICAgODgwNDcsIDg4MDU1LCA4ODA2MywgODgwNzEsIDg4MDc5LCA4ODA4NywgODgwOTcsIDg4MTA3LCA4ODExNSwgODgxMjMsIAorICAgIDg4MTMxLCA4ODEzOSwgODgxNDcsIDg4MTUzLCA4ODE2MCwgODgxNjksIDg4MTc4LCA4ODE4NywgODgxOTYsIDg4MjA1LCAKKyAgICA4ODIxNCwgODgyMjQsIDg4MjM1LCA4ODI0NSwgODgyNTYsIDg4MjY1LCA4ODI3NCwgODgyODMsIDg4MjkzLCA4ODMwNCwgCisgICAgODgzMTQsIDg4MzI1LCA4ODMzNiwgODgzNDUsIDg4MzUzLCA4ODM1OSwgODgzNjUsIDg4MzcxLCA4ODM3NywgODgzODUsIAorICAgIDg4MzkzLCA4ODM5OSwgODg0MDYsIDg4NDE2LCA4ODQyMywgODg0MzAsIDg4NDM3LCA4ODQ0NCwgODg0NTEsIDg4NDYxLCAKKyAgICA4ODQ2OCwgODg0NzUsIDg4NDgzLCA4ODQ5MSwgODg1MDAsIDg4NTA5LCA4ODUxOCwgODg1MjcsIDg4NTM2LCA4ODU0NCwgCisgICAgODg1NTMsIDg4NTYyLCA4ODU3MSwgODg1NzUsIDg4NTgyLCA4ODU4NywgODg1OTIsIDg4NTk2LCA4ODYwMCwgODg2MDQsIAorICAgIDg4NjA4LCA4ODYxMywgODg2MTgsIDg4NjI0LCA4ODYzMCwgODg2MzQsIDg4NjQwLCA4ODY0NCwgODg2NDgsIDg4NjUyLCAKKyAgICA4ODY1NiwgODg2NjAsIDg4NjY0LCA4ODY3MCwgMCwgMCwgMCwgMCwgMCwgODg2NzQsIDg4Njc5LCA4ODY4NCwgODg2ODksIAorICAgIDg4Njk0LCA4ODcwMSwgODg3MDYsIDg4NzExLCA4ODcxNiwgODg3MjEsIDg4NzI2LCA4ODczMSwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODk0MjEsIDg5NDI1LCAKLSAgICA4OTQzMCwgODk0MzUsIDg5NDQwLCA4OTQ0NCwgODk0NDksIDg5NDU0LCA4OTQ1OSwgODk0NjQsIDg5NDY4LCA4OTQ3MiwgCi0gICAgODk0NzcsIDg5NDgyLCA4OTQ4NywgODk0OTIsIDg5NDk2LCA4OTUwMSwgODk1MDYsIDg5NTExLCA4OTUxNiwgODk1MjEsIAotICAgIDg5NTI2LCA4OTUzMCwgODk1MzUsIDg5NTQwLCA4OTU0NSwgODk1NTAsIDg5NTU1LCA4OTU2MCwgODk1NjUsIDAsIDg5NTcwLCAKLSAgICA4OTU3NSwgODk1ODAsIDg5NTg2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4OTU5MiwgODk1OTcsIAotICAgIDg5NjAyLCA4OTYwNywgODk2MTIsIDg5NjE3LCA4OTYyMiwgODk2MjcsIDg5NjMyLCA4OTYzNywgODk2NDIsIDg5NjQ3LCAKLSAgICA4OTY1MiwgODk2NTcsIDg5NjYyLCA4OTY2NywgODk2NzIsIDg5Njc3LCA4OTY4MiwgODk2ODcsIDg5NjkyLCA4OTY5NywgCi0gICAgODk3MDIsIDg5NzA3LCA4OTcxMiwgODk3MTcsIDg5NzIyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4ODczNiwgCisgICAgODg3NDMsIDg4NzUyLCA4ODc2MSwgODg3NjgsIDg4Nzc1LCA4ODc4MiwgODg3ODksIDg4Nzk2LCA4ODgwMywgODg4MDksIAorICAgIDg4ODE2LCA4ODgyMywgODg4MzAsIDg4ODM3LCA4ODg0NCwgODg4NTEsIDg4ODU4LCA4ODg2NSwgODg4NzQsIDg4ODgxLCAKKyAgICA4ODg4OCwgODg4OTUsIDg4OTAyLCA4ODkwOSwgODg5MTYsIDg4OTIzLCA4ODkzMCwgODg5MzksIDg4OTQ2LCA4ODk1MywgCisgICAgODg5NjAsIDg4OTY3LCA4ODk3NCwgODg5ODEsIDg4OTkwLCA4ODk5NywgODkwMDQsIDg5MDExLCA4OTAxOCwgODkwMjcsIAorICAgIDg5MDM0LCA4OTA0MSwgODkwNDgsIDg5MDU2LCA4OTA2NSwgMCwgMCwgODkwNzQsIDg5MDc4LCA4OTA4MiwgODkwODcsIAorICAgIDg5MDkyLCA4OTA5NywgODkxMDIsIDg5MTA2LCA4OTExMSwgODkxMTYsIDg5MTIxLCA4OTEyNiwgODkxMzEsIDg5MTM2LCAKKyAgICA4OTE0MCwgODkxNDQsIDg5MTQ5LCA4OTE1NCwgODkxNTksIDg5MTYzLCA4OTE2OCwgODkxNzMsIDg5MTc3LCA4OTE4MiwgCisgICAgODkxODcsIDg5MTkyLCA4OTE5NywgODkyMDIsIDg5MjA3LCAwLCAwLCAwLCA4OTIxMiwgODkyMTYsIDg5MjIxLCA4OTIyNiwgCisgICAgODkyMzAsIDg5MjM1LCA4OTIzOSwgODkyNDQsIDg5MjQ5LCA4OTI1NCwgODkyNTksIDg5MjYzLCA4OTI2NywgODkyNzIsIAorICAgIDg5Mjc3LCA4OTI4MiwgODkyODcsIDg5MjkyLCA4OTI5NywgODkzMDEsIDg5MzA2LCA4OTMxMSwgODkzMTYsIDg5MzIxLCAKKyAgICA4OTMyNiwgODkzMzEsIDg5MzM1LCA4OTMzOSwgODkzNDQsIDg5MzQ5LCA4OTM1NCwgODkzNTksIDg5MzY0LCA4OTM2OSwgCisgICAgODkzNzQsIDg5Mzc5LCA4OTM4NCwgODkzODksIDg5Mzk0LCA4OTM5OSwgODk0MDQsIDg5NDA5LCA4OTQxNCwgODk0MTksIAorICAgIDg5NDI0LCA4OTQyOSwgODk0MzQsIDg5NDM5LCA4OTQ0NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODk3MjksIDg5NzM0LCA4OTczOSwgCi0gICAgODk3NDQsIDg5NzQ5LCA4OTc1NCwgODk3NTksIDg5NzY0LCA4OTc2OSwgODk3NzQsIDg5Nzc5LCA4OTc4NCwgODk3ODksIAotICAgIDg5Nzk0LCA4OTc5OSwgODk4MDQsIDg5ODA5LCA4OTgxNCwgODk4MTksIDg5ODI0LCA4OTgyOSwgODk4MzQsIDg5ODM5LCAKLSAgICA4OTg0NCwgODk4NDksIDg5ODU0LCA4OTg1OSwgODk4NjMsIDg5ODY3LCA4OTg3MSwgMCwgODk4NzYsIDg5ODgyLCA4OTg4NywgCi0gICAgODk4OTIsIDg5ODk3LCA4OTkwMiwgODk5MDgsIDg5OTE0LCA4OTkyMCwgODk5MjYsIDg5OTMyLCA4OTkzOCwgODk5NDQsIAotICAgIDg5OTUwLCA4OTk1NiwgODk5NjIsIDg5OTY4LCA4OTk3NCwgODk5ODAsIDg5OTg1LCA4OTk5MSwgODk5OTcsIDkwMDAyLCAKLSAgICA5MDAwOCwgOTAwMTMsIDkwMDE5LCA5MDAyNSwgOTAwMzAsIDkwMDM2LCA5MDA0MiwgOTAwNDcsIDkwMDUzLCA5MDA1OSwgCi0gICAgOTAwNjQsIDkwMDcwLCA5MDA3NiwgOTAwODIsIDAsIDAsIDAsIDAsIDkwMDg3LCA5MDA5MywgOTAwOTksIDkwMTA1LCAKLSAgICA5MDExMSwgOTAxMTcsIDkwMTIzLCA5MDEyOSwgOTAxMzUsIDkwMTQyLCA5MDE0NywgOTAxNTIsIDkwMTU4LCA5MDE2NCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODk0NDksIDg5NDUzLCA4OTQ1OCwgODk0NjMsIDg5NDY4LCA4OTQ3MiwgCisgICAgODk0NzcsIDg5NDgyLCA4OTQ4NywgODk0OTIsIDg5NDk2LCA4OTUwMCwgODk1MDUsIDg5NTEwLCA4OTUxNSwgODk1MjAsIAorICAgIDg5NTI0LCA4OTUyOSwgODk1MzQsIDg5NTM5LCA4OTU0NCwgODk1NDksIDg5NTU0LCA4OTU1OCwgODk1NjMsIDg5NTY4LCAKKyAgICA4OTU3MywgODk1NzgsIDg5NTgzLCA4OTU4OCwgODk1OTMsIDAsIDg5NTk4LCA4OTYwMywgODk2MDgsIDg5NjE0LCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4OTYyMCwgODk2MjUsIDg5NjMwLCA4OTYzNSwgODk2NDAsIDg5NjQ1LCAKKyAgICA4OTY1MCwgODk2NTUsIDg5NjYwLCA4OTY2NSwgODk2NzAsIDg5Njc1LCA4OTY4MCwgODk2ODUsIDg5NjkwLCA4OTY5NSwgCisgICAgODk3MDAsIDg5NzA1LCA4OTcxMCwgODk3MTUsIDg5NzIwLCA4OTcyNSwgODk3MzAsIDg5NzM1LCA4OTc0MCwgODk3NDUsIAorICAgIDg5NzUwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5MDE3MCwgOTAxNzUsIDkwMTgwLCAKLSAgICA5MDE4NSwgOTAxOTEsIDkwMTk2LCA5MDIwMiwgOTAyMDgsIDkwMjE0LCA5MDIyMCwgOTAyMjcsIDkwMjMzLCA5MDI0MCwgCi0gICAgOTAyNDUsIDkwMjUwLCA5MDI1NSwgOTAyNjAsIDkwMjY1LCA5MDI3MCwgOTAyNzUsIDkwMjgwLCA5MDI4NSwgOTAyOTAsIAotICAgIDkwMjk1LCA5MDMwMCwgOTAzMDUsIDkwMzEwLCA5MDMxNSwgOTAzMjAsIDkwMzI1LCA5MDMzMCwgOTAzMzUsIDkwMzQwLCAKLSAgICA5MDM0NSwgOTAzNTAsIDkwMzU1LCA5MDM2MCwgOTAzNjUsIDkwMzcwLCA5MDM3NSwgOTAzODAsIDkwMzg1LCA5MDM5MCwgCi0gICAgOTAzOTUsIDkwNDAxLCA5MDQwNiwgOTA0MTIsIDkwNDE4LCA5MDQyNCwgOTA0MzAsIDkwNDM3LCA5MDQ0MywgOTA0NTAsIAotICAgIDkwNDU1LCA5MDQ2MCwgOTA0NjUsIDkwNDcwLCA5MDQ3NSwgOTA0ODAsIDkwNDg1LCA5MDQ5MCwgOTA0OTUsIDkwNTAwLCAKLSAgICA5MDUwNSwgOTA1MTAsIDkwNTE1LCA5MDUyMCwgOTA1MjUsIDkwNTMwLCA5MDUzNSwgOTA1NDAsIDkwNTQ1LCA5MDU1MCwgCi0gICAgOTA1NTUsIDkwNTYwLCA5MDU2NSwgOTA1NzAsIDkwNTc1LCA5MDU4MCwgOTA1ODUsIDkwNTkwLCA5MDU5NSwgOTA2MDAsIAotICAgIDkwNjA1LCA5MDYxMCwgOTA2MTUsIDkwNjIwLCA5MDYyNSwgOTA2MzAsIDkwNjM1LCA5MDY0MCwgOTA2NDUsIDkwNjUwLCAKLSAgICA5MDY1NSwgOTA2NjAsIDkwNjY1LCA5MDY3MCwgOTA2NzUsIDkwNjgwLCA5MDY4NSwgOTA2OTAsIDkwNjk1LCA5MDcwMCwgCi0gICAgOTA3MDUsIDkwNzEwLCA5MDcxNSwgOTA3MjAsIDkwNzI1LCA5MDczMCwgOTA3MzUsIDkwNzQwLCA5MDc0NSwgOTA3NTAsIAotICAgIDkwNzU1LCA5MDc2MCwgOTA3NjUsIDkwNzcwLCA5MDc3NSwgOTA3ODAsIDkwNzg1LCA5MDc5MCwgOTA3OTUsIDkwODAwLCAKLSAgICA5MDgwNSwgOTA4MTAsIDkwODE1LCA5MDgyMCwgOTA4MjUsIDkwODMwLCA5MDgzNSwgOTA4NDAsIDkwODQ1LCA5MDg1MCwgCi0gICAgOTA4NTUsIDkwODYwLCA5MDg2NSwgOTA4NjksIDkwODczLCA5MDg3OCwgOTA4ODMsIDkwODg4LCA5MDg5MywgOTA4OTgsIAotICAgIDkwOTAzLCA5MDkwOCwgOTA5MTMsIDkwOTE4LCA5MDkyMywgOTA5MjgsIDkwOTMyLCA5MDkzNiwgOTA5NDAsIDkwOTQ0LCAKLSAgICA5MDk0OCwgOTA5NTIsIDkwOTU2LCA5MDk2MSwgOTA5NjYsIDAsIDAsIDkwOTcxLCA5MDk3NiwgOTA5ODAsIDkwOTg0LCAKLSAgICA5MDk4OCwgOTA5OTIsIDkwOTk2LCA5MTAwMCwgOTEwMDQsIDkxMDA4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4OTc1NywgODk3NjIsIDg5NzY3LCA4OTc3MiwgODk3NzcsIDg5NzgyLCA4OTc4NywgCisgICAgODk3OTIsIDg5Nzk3LCA4OTgwMiwgODk4MDcsIDg5ODEyLCA4OTgxNywgODk4MjIsIDg5ODI3LCA4OTgzMiwgODk4MzcsIAorICAgIDg5ODQyLCA4OTg0NywgODk4NTIsIDg5ODU3LCA4OTg2MiwgODk4NjcsIDg5ODcyLCA4OTg3NywgODk4ODIsIDg5ODg3LCAKKyAgICA4OTg5MSwgODk4OTUsIDg5ODk5LCAwLCA4OTkwNCwgODk5MTAsIDg5OTE1LCA4OTkyMCwgODk5MjUsIDg5OTMwLCA4OTkzNiwgCisgICAgODk5NDIsIDg5OTQ4LCA4OTk1NCwgODk5NjAsIDg5OTY2LCA4OTk3MiwgODk5NzgsIDg5OTg0LCA4OTk5MCwgODk5OTYsIAorICAgIDkwMDAyLCA5MDAwOCwgOTAwMTMsIDkwMDE5LCA5MDAyNSwgOTAwMzAsIDkwMDM2LCA5MDA0MSwgOTAwNDcsIDkwMDUzLCAKKyAgICA5MDA1OCwgOTAwNjQsIDkwMDcwLCA5MDA3NSwgOTAwODEsIDkwMDg3LCA5MDA5MiwgOTAwOTgsIDkwMTA0LCA5MDExMCwgMCwgCisgICAgMCwgMCwgMCwgOTAxMTUsIDkwMTIxLCA5MDEyNywgOTAxMzMsIDkwMTM5LCA5MDE0NSwgOTAxNTEsIDkwMTU3LCA5MDE2MywgCisgICAgOTAxNzAsIDkwMTc1LCA5MDE4MCwgOTAxODYsIDkwMTkyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA5MDE5OCwgOTAyMDMsIDkwMjA4LCA5MDIxMywgOTAyMTksIDkwMjI0LCA5MDIzMCwgOTAyMzYsIAorICAgIDkwMjQyLCA5MDI0OCwgOTAyNTUsIDkwMjYxLCA5MDI2OCwgOTAyNzMsIDkwMjc4LCA5MDI4MywgOTAyODgsIDkwMjkzLCAKKyAgICA5MDI5OCwgOTAzMDMsIDkwMzA4LCA5MDMxMywgOTAzMTgsIDkwMzIzLCA5MDMyOCwgOTAzMzMsIDkwMzM4LCA5MDM0MywgCisgICAgOTAzNDgsIDkwMzUzLCA5MDM1OCwgOTAzNjMsIDkwMzY4LCA5MDM3MywgOTAzNzgsIDkwMzgzLCA5MDM4OCwgOTAzOTMsIAorICAgIDkwMzk4LCA5MDQwMywgOTA0MDgsIDkwNDEzLCA5MDQxOCwgOTA0MjMsIDkwNDI5LCA5MDQzNCwgOTA0NDAsIDkwNDQ2LCAKKyAgICA5MDQ1MiwgOTA0NTgsIDkwNDY1LCA5MDQ3MSwgOTA0NzgsIDkwNDgzLCA5MDQ4OCwgOTA0OTMsIDkwNDk4LCA5MDUwMywgCisgICAgOTA1MDgsIDkwNTEzLCA5MDUxOCwgOTA1MjMsIDkwNTI4LCA5MDUzMywgOTA1MzgsIDkwNTQzLCA5MDU0OCwgOTA1NTMsIAorICAgIDkwNTU4LCA5MDU2MywgOTA1NjgsIDkwNTczLCA5MDU3OCwgOTA1ODMsIDkwNTg4LCA5MDU5MywgOTA1OTgsIDkwNjAzLCAKKyAgICA5MDYwOCwgOTA2MTMsIDkwNjE4LCA5MDYyMywgOTA2MjgsIDkwNjMzLCA5MDYzOCwgOTA2NDMsIDkwNjQ4LCA5MDY1MywgCisgICAgOTA2NTgsIDkwNjYzLCA5MDY2OCwgOTA2NzMsIDkwNjc4LCA5MDY4MywgOTA2ODgsIDkwNjkzLCA5MDY5OCwgOTA3MDMsIAorICAgIDkwNzA4LCA5MDcxMywgOTA3MTgsIDkwNzIzLCA5MDcyOCwgOTA3MzMsIDkwNzM4LCA5MDc0MywgOTA3NDgsIDkwNzUzLCAKKyAgICA5MDc1OCwgOTA3NjMsIDkwNzY4LCA5MDc3MywgOTA3NzgsIDkwNzgzLCA5MDc4OCwgOTA3OTMsIDkwNzk4LCA5MDgwMywgCisgICAgOTA4MDgsIDkwODEzLCA5MDgxOCwgOTA4MjMsIDkwODI4LCA5MDgzMywgOTA4MzgsIDkwODQzLCA5MDg0OCwgOTA4NTMsIAorICAgIDkwODU4LCA5MDg2MywgOTA4NjgsIDkwODczLCA5MDg3OCwgOTA4ODMsIDkwODg4LCA5MDg5MywgOTA4OTcsIDkwOTAxLCAKKyAgICA5MDkwNiwgOTA5MTEsIDkwOTE2LCA5MDkyMSwgOTA5MjYsIDkwOTMxLCA5MDkzNiwgOTA5NDEsIDkwOTQ2LCA5MDk1MSwgCisgICAgOTA5NTYsIDkwOTYwLCA5MDk2NCwgOTA5NjgsIDkwOTcyLCA5MDk3NiwgOTA5ODAsIDkwOTg0LCA5MDk4OSwgOTA5OTQsIDAsIAorICAgIDAsIDkwOTk5LCA5MTAwNCwgOTEwMDgsIDkxMDEyLCA5MTAxNiwgOTEwMjAsIDkxMDI0LCA5MTAyOCwgOTEwMzIsIDkxMDM2LCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCA5MTAxMiwgOTEwMTYsIDkxMDIwLCA5MTAyNCwgOTEwMjgsIDkxMDMyLCAwLCAwLCA5MTAzNywgMCwgCi0gICAgOTEwNDIsIDkxMDQ2LCA5MTA1MSwgOTEwNTYsIDkxMDYxLCA5MTA2NiwgOTEwNzEsIDkxMDc2LCA5MTA4MSwgOTEwODYsIAotICAgIDkxMDkxLCA5MTA5NSwgOTExMDAsIDkxMTA1LCA5MTExMCwgOTExMTUsIDkxMTE5LCA5MTEyNCwgOTExMjksIDkxMTM0LCAKLSAgICA5MTEzOSwgOTExNDMsIDkxMTQ4LCA5MTE1MywgOTExNTgsIDkxMTYzLCA5MTE2NywgOTExNzIsIDkxMTc3LCA5MTE4MiwgCi0gICAgOTExODcsIDkxMTkxLCA5MTE5NiwgOTEyMDEsIDkxMjA2LCA5MTIxMSwgOTEyMTYsIDkxMjIxLCA5MTIyNiwgOTEyMzAsIAotICAgIDkxMjM1LCA5MTI0MCwgOTEyNDUsIDkxMjUwLCAwLCA5MTI1NSwgOTEyNjAsIDAsIDAsIDAsIDkxMjY1LCAwLCAwLCA5MTI3MCwgCi0gICAgOTEyNzUsIDkxMjgyLCA5MTI4OSwgOTEyOTYsIDkxMzAzLCA5MTMxMCwgOTEzMTcsIDkxMzI0LCA5MTMzMSwgOTEzMzgsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDkxMDQwLCA5MTA0NCwgOTEwNDgsIDkxMDUyLCAKKyAgICA5MTA1NiwgOTEwNjAsIDAsIDAsIDkxMDY1LCAwLCA5MTA3MCwgOTEwNzQsIDkxMDc5LCA5MTA4NCwgOTEwODksIDkxMDk0LCAKKyAgICA5MTA5OSwgOTExMDQsIDkxMTA5LCA5MTExNCwgOTExMTksIDkxMTIzLCA5MTEyOCwgOTExMzMsIDkxMTM4LCA5MTE0MywgCisgICAgOTExNDcsIDkxMTUyLCA5MTE1NywgOTExNjIsIDkxMTY3LCA5MTE3MSwgOTExNzYsIDkxMTgxLCA5MTE4NiwgOTExOTEsIAorICAgIDkxMTk1LCA5MTIwMCwgOTEyMDUsIDkxMjEwLCA5MTIxNSwgOTEyMTksIDkxMjI0LCA5MTIyOSwgOTEyMzQsIDkxMjM5LCAKKyAgICA5MTI0NCwgOTEyNDksIDkxMjU0LCA5MTI1OCwgOTEyNjMsIDkxMjY4LCA5MTI3MywgOTEyNzgsIDAsIDkxMjgzLCA5MTI4OCwgCisgICAgMCwgMCwgMCwgOTEyOTMsIDAsIDAsIDkxMjk4LCA5MTMwMywgOTEzMTAsIDkxMzE3LCA5MTMyNCwgOTEzMzEsIDkxMzM4LCAKICAgICA5MTM0NSwgOTEzNTIsIDkxMzU5LCA5MTM2NiwgOTEzNzMsIDkxMzgwLCA5MTM4NywgOTEzOTQsIDkxNDAxLCA5MTQwOCwgCi0gICAgOTE0MTUsIDkxNDIyLCAwLCA5MTQyOSwgOTE0MzYsIDkxNDQyLCA5MTQ0OCwgOTE0NTQsIDkxNDYxLCA5MTQ2OCwgOTE0NzYsIAotICAgIDkxNDg0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5MTQ5MywgOTE0OTgsIDkxNTAzLCA5MTUwOCwgOTE1MTMsIDkxNTE4LCAKLSAgICA5MTUyMywgOTE1MjgsIDkxNTMzLCA5MTUzOCwgOTE1NDMsIDkxNTQ4LCA5MTU1MywgOTE1NTgsIDkxNTYzLCA5MTU2OCwgCi0gICAgOTE1NzMsIDkxNTc4LCA5MTU4MywgOTE1ODgsIDkxNTkzLCA5MTU5OCwgOTE2MDMsIDkxNjA3LCA5MTYxMiwgOTE2MTcsIAotICAgIDkxNjIzLCA5MTYyNywgMCwgMCwgMCwgOTE2MzEsIDkxNjM3LCA5MTY0MSwgOTE2NDYsIDkxNjUxLCA5MTY1NiwgOTE2NjAsIAotICAgIDkxNjY1LCA5MTY2OSwgOTE2NzQsIDkxNjc5LCA5MTY4MywgOTE2ODcsIDkxNjkyLCA5MTY5NiwgOTE3MDAsIDkxNzA1LCAKLSAgICA5MTcxMCwgOTE3MTQsIDkxNzE5LCA5MTcyNCwgOTE3MjksIDkxNzM0LCA5MTczOSwgOTE3NDQsIDkxNzQ5LCA5MTc1NCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgOTE3NTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDkxNzY0LCAKLSAgICA5MTc3MCwgOTE3NzYsIDkxNzgyLCA5MTc4OCwgOTE3OTQsIDkxODAxLCA5MTgwOCwgOTE4MTUsIDkxODIxLCA5MTgyNywgCi0gICAgOTE4MzMsIDkxODQwLCA5MTg0NywgOTE4NTQsIDkxODYwLCA5MTg2NywgOTE4NzQsIDkxODgxLCA5MTg4OCwgOTE4OTQsIAotICAgIDkxOTAxLCA5MTkwOCwgOTE5MTQsIDkxOTIxLCA5MTkyOCwgOTE5MzUsIDkxOTQyLCA5MTk0OSwgOTE5NTUsIDkxOTYyLCAKLSAgICA5MTk2OSwgOTE5NzYsIDkxOTgyLCA5MTk4OCwgOTE5OTQsIDkyMDAwLCA5MjAwNiwgOTIwMTMsIDkyMDIwLCA5MjAyNiwgCi0gICAgOTIwMzIsIDkyMDM4LCA5MjA0NSwgOTIwNTEsIDkyMDU4LCA5MjA2NSwgOTIwNzIsIDkyMDc4LCA5MjA4NiwgOTIwOTMsIAotICAgIDkyMDk5LCA5MjEwNiwgOTIxMTMsIDkyMTIwLCA5MjEyNiwgMCwgMCwgMCwgMCwgMCwgMCwgOTIxMzMsIDkyMTQxLCAwLCAwLCAKKyAgICA5MTQxNSwgOTE0MjIsIDkxNDI5LCA5MTQzNiwgOTE0NDMsIDkxNDUwLCAwLCA5MTQ1NywgOTE0NjQsIDkxNDcwLCA5MTQ3NiwgCisgICAgOTE0ODIsIDkxNDg5LCA5MTQ5NiwgOTE1MDQsIDkxNTEyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5MTUyMSwgOTE1MjYsIAorICAgIDkxNTMxLCA5MTUzNiwgOTE1NDEsIDkxNTQ2LCA5MTU1MSwgOTE1NTYsIDkxNTYxLCA5MTU2NiwgOTE1NzEsIDkxNTc2LCAKKyAgICA5MTU4MSwgOTE1ODYsIDkxNTkxLCA5MTU5NiwgOTE2MDEsIDkxNjA2LCA5MTYxMSwgOTE2MTYsIDkxNjIxLCA5MTYyNiwgCisgICAgOTE2MzEsIDkxNjM1LCA5MTY0MCwgOTE2NDUsIDkxNjUxLCA5MTY1NSwgMCwgMCwgMCwgOTE2NTksIDkxNjY1LCA5MTY2OSwgCisgICAgOTE2NzQsIDkxNjc5LCA5MTY4NCwgOTE2ODgsIDkxNjkzLCA5MTY5NywgOTE3MDIsIDkxNzA3LCA5MTcxMSwgOTE3MTUsIAorICAgIDkxNzIwLCA5MTcyNCwgOTE3MjgsIDkxNzMzLCA5MTczOCwgOTE3NDIsIDkxNzQ3LCA5MTc1MiwgOTE3NTcsIDkxNzYyLCAKKyAgICA5MTc2NywgOTE3NzIsIDkxNzc3LCA5MTc4MiwgMCwgMCwgMCwgMCwgMCwgOTE3ODcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDkyMTQ5LCA5MjE1MywgOTIxNTgsIDkyMTYzLCAwLCAKLSAgICA5MjE2OSwgOTIxNzQsIDAsIDAsIDAsIDAsIDAsIDkyMTc5LCA5MjE4NSwgOTIxOTIsIDkyMTk3LCA5MjIwMiwgOTIyMDYsIAotICAgIDkyMjExLCA5MjIxNiwgMCwgOTIyMjEsIDkyMjI2LCA5MjIzMSwgMCwgOTIyMzYsIDkyMjQxLCA5MjI0NiwgOTIyNTEsIAotICAgIDkyMjU2LCA5MjI2MSwgOTIyNjYsIDkyMjcxLCA5MjI3NiwgOTIyODEsIDkyMjg2LCA5MjI5MCwgOTIyOTQsIDkyMjk5LCAKLSAgICA5MjMwNCwgOTIzMDksIDkyMzEzLCA5MjMxNywgOTIzMjEsIDkyMzI2LCA5MjMzMSwgOTIzMzYsIDkyMzQxLCA5MjM0NSwgCi0gICAgOTIzNTAsIDkyMzU0LCA5MjM1OSwgMCwgMCwgMCwgMCwgOTIzNjQsIDkyMzcwLCA5MjM3NSwgMCwgMCwgMCwgMCwgOTIzODAsIAotICAgIDkyMzg0LCA5MjM4OCwgOTIzOTIsIDkyMzk2LCA5MjQwMCwgOTI0MDUsIDkyNDEwLCA5MjQxNiwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgOTI0MjIsIDkyNDI4LCA5MjQzNSwgOTI0NDEsIDkyNDQ4LCA5MjQ1NCwgOTI0NjAsIDkyNDY2LCA5MjQ3MywgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgOTI0NzksIDkyNDg3LCA5MjQ5NSwgOTI1MDMsIDkyNTExLCA5MjUxOSwgOTI1MjcsIDkyNTM1LCAKLSAgICA5MjU0MywgOTI1NTEsIDkyNTU5LCA5MjU2NywgOTI1NzUsIDkyNTgzLCA5MjU5MSwgOTI1OTksIDkyNjA3LCA5MjYxNSwgCi0gICAgOTI2MjMsIDkyNjMxLCA5MjYzOSwgOTI2NDcsIDkyNjU1LCA5MjY2MywgOTI2NzEsIDkyNjc5LCA5MjY4NywgOTI2OTUsIAotICAgIDkyNzAzLCA5MjcxMSwgOTI3MTgsIDkyNzI2LCA5MjczNCwgOTI3MzgsIDkyNzQzLCA5Mjc0OCwgOTI3NTMsIDkyNzU4LCAKLSAgICA5Mjc2MywgOTI3NjgsIDkyNzczLCA5Mjc3NywgOTI3ODIsIDkyNzg2LCA5Mjc5MSwgOTI3OTUsIDkyODAwLCA5MjgwNCwgCi0gICAgOTI4MDksIDkyODE0LCA5MjgxOSwgOTI4MjQsIDkyODI5LCA5MjgzNCwgOTI4MzksIDkyODQ0LCA5Mjg0OSwgOTI4NTQsIAotICAgIDkyODU5LCA5Mjg2NCwgOTI4NjksIDkyODc0LCA5Mjg3OSwgOTI4ODQsIDkyODg5LCA5Mjg5NCwgOTI4OTksIDkyOTA0LCAKLSAgICA5MjkwOSwgOTI5MTQsIDkyOTE5LCA5MjkyNCwgOTI5MjksIDkyOTM0LCA5MjkzOSwgOTI5NDQsIDkyOTQ5LCA5Mjk1NCwgCi0gICAgOTI5NTksIDkyOTY0LCA5Mjk2OSwgOTI5NzQsIDkyOTc5LCA5Mjk4NCwgOTI5ODksIDkyOTk0LCAwLCAwLCAwLCA5Mjk5OSwgCi0gICAgOTMwMDQsIDkzMDEzLCA5MzAyMSwgOTMwMzAsIDkzMDM5LCA5MzA1MCwgOTMwNjEsIDkzMDY4LCA5MzA3NSwgOTMwODIsIAotICAgIDkzMDg5LCA5MzA5NiwgOTMxMDMsIDkzMTEwLCA5MzExNywgOTMxMjQsIDkzMTMxLCA5MzEzOCwgOTMxNDUsIDkzMTUyLCAKLSAgICA5MzE1OSwgOTMxNjYsIDkzMTczLCA5MzE4MCwgOTMxODcsIDkzMTk0LCA5MzIwMSwgOTMyMDgsIDAsIDAsIDkzMjE1LCAKLSAgICA5MzIyMSwgOTMyMjcsIDkzMjMzLCA5MzIzOSwgOTMyNDYsIDkzMjUzLCA5MzI2MSwgOTMyNjksIDkzMjc2LCA5MzI4MywgCi0gICAgOTMyOTAsIDkzMjk3LCA5MzMwNCwgOTMzMTEsIDkzMzE4LCA5MzMyNSwgOTMzMzIsIDkzMzM5LCA5MzM0NiwgOTMzNTMsIAotICAgIDkzMzYwLCA5MzM2NywgOTMzNzQsIDkzMzgxLCA5MzM4OCwgOTMzOTUsIDAsIDAsIDAsIDAsIDAsIDkzNDAyLCA5MzQwOCwgCi0gICAgOTM0MTQsIDkzNDIwLCA5MzQyNiwgOTM0MzMsIDkzNDQwLCA5MzQ0OCwgOTM0NTYsIDkzNDYyLCA5MzQ2OCwgOTM0NzUsIAotICAgIDkzNDgxLCA5MzQ4NywgOTM0OTMsIDkzNDk5LCA5MzUwNiwgOTM1MTMsIDkzNTIwLCA5MzUyNywgOTM1MzQsIDkzNTQxLCAKLSAgICA5MzU0OCwgOTM1NTUsIDkzNTYyLCA5MzU2OSwgOTM1NzYsIDkzNTgzLCA5MzU5MCwgOTM1OTcsIDkzNjA0LCA5MzYxMSwgCi0gICAgOTM2MTgsIDkzNjI1LCA5MzYzMiwgOTM2MzksIDkzNjQ2LCA5MzY1MywgOTM2NjAsIDkzNjY3LCA5MzY3NCwgOTM2ODEsIAotICAgIDkzNjg4LCA5MzY5NSwgOTM3MDIsIDkzNzA5LCA5MzcxNiwgOTM3MjMsIDkzNzMwLCA5MzczNywgOTM3NDQsIDkzNzUxLCAKLSAgICA5Mzc1OCwgOTM3NjUsIDkzNzcyLCA5Mzc3OSwgOTM3ODYsIDkzNzkzLCA5MzgwMCwgOTM4MDcsIDkzODE0LCA5MzgyMSwgCi0gICAgOTM4MjgsIDkzODM1LCA5Mzg0MiwgOTM4NDksIDkzODU2LCA5Mzg2MywgOTM4NzAsIDkzODc3LCA5Mzg4NCwgOTM4OTEsIAotICAgIDkzODk4LCA5MzkwNSwgOTM5MTIsIDkzOTE5LCA5MzkyNiwgOTM5MzMsIDkzOTQwLCA5Mzk0NywgOTM5NTQsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDkzOTYxLCA5Mzk2NSwgOTM5NjksIDkzOTczLCA5Mzk3NywgOTM5ODEsIDkzOTg1LCA5Mzk4OSwgCi0gICAgOTM5OTMsIDkzOTk3LCA5NDAwMiwgOTQwMDcsIDk0MDEyLCA5NDAxNywgOTQwMjIsIDk0MDI3LCA5NDAzMiwgOTQwMzcsIAotICAgIDk0MDQyLCA5NDA0OCwgOTQwNTQsIDk0MDYwLCA5NDA2NywgOTQwNzQsIDk0MDgxLCA5NDA4OCwgOTQwOTUsIDk0MTAyLCAKLSAgICA5NDEwOSwgOTQxMTYsIDk0MTIzLCAwLCA5NDEzMCwgOTQxMzQsIDk0MTM4LCA5NDE0MiwgOTQxNDYsIDk0MTUwLCA5NDE1MywgCi0gICAgOTQxNTcsIDk0MTYwLCA5NDE2NCwgOTQxNjcsIDk0MTcxLCA5NDE3NSwgOTQxODAsIDk0MTg0LCA5NDE4OSwgOTQxOTIsIAotICAgIDk0MTk2LCA5NDE5OSwgOTQyMDMsIDk0MjA2LCA5NDIxMCwgOTQyMTQsIDk0MjE4LCA5NDIyMiwgOTQyMjYsIDk0MjMwLCAKLSAgICA5NDIzNCwgOTQyMzgsIDk0MjQyLCA5NDI0NiwgOTQyNTAsIDk0MjU0LCA5NDI1OCwgOTQyNjIsIDk0MjY2LCA5NDI3MCwgCi0gICAgOTQyNzQsIDk0Mjc4LCA5NDI4MSwgOTQyODQsIDk0Mjg4LCA5NDI5MiwgOTQyOTYsIDk0Mjk5LCA5NDMwMiwgOTQzMDUsIAotICAgIDk0MzA5LCA5NDMxMywgOTQzMTcsIDk0MzIxLCA5NDMyNCwgOTQzMjcsIDk0MzMxLCA5NDMzNywgOTQzNDMsIDk0MzQ5LCAKLSAgICA5NDM1NCwgOTQzNjEsIDk0MzY1LCA5NDM3MCwgOTQzNzQsIDk0Mzc5LCA5NDM4NCwgOTQzOTAsIDk0Mzk1LCA5NDQwMSwgCi0gICAgOTQ0MDUsIDk0NDEwLCA5NDQxNCwgOTQ0MTksIDk0NDIyLCA5NDQyNSwgOTQ0MjksIDk0NDM0LCA5NDQ0MCwgOTQ0NDUsIAotICAgIDk0NDUxLCAwLCAwLCAwLCAwLCA5NDQ1NiwgOTQ0NTksIDk0NDYyLCA5NDQ2NSwgOTQ0NjgsIDk0NDcxLCA5NDQ3NCwgCi0gICAgOTQ0NzcsIDk0NDgwLCA5NDQ4MywgOTQ0ODcsIDk0NDkxLCA5NDQ5NSwgOTQ0OTksIDk0NTAzLCA5NDUwNywgOTQ1MTEsIAotICAgIDk0NTE1LCA5NDUxOSwgOTQ1MjQsIDk0NTI5LCA5NDUzMywgOTQ1MzYsIDk0NTM5LCA5NDU0MiwgOTQ1NDUsIDk0NTQ4LCAKLSAgICA5NDU1MSwgOTQ1NTQsIDk0NTU3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICA5NDU2MCwgOTQ1NjUsIDk0NTcwLCA5NDU3NSwgOTQ1NzksIDk0NTg0LCA5NDU4OCwgOTQ1OTMsIDk0NTk3LCA5NDYwMiwgCi0gICAgOTQ2MDYsIDk0NjExLCA5NDYxNSwgOTQ2MjAsIDk0NjI0LCA5NDYyOSwgOTQ2MzQsIDk0NjM5LCA5NDY0NCwgOTQ2NDksIAotICAgIDk0NjU0LCA5NDY1OSwgOTQ2NjQsIDk0NjY5LCA5NDY3NCwgOTQ2NzksIDk0Njg0LCA5NDY4OSwgOTQ2OTQsIDk0Njk5LCAKLSAgICA5NDcwNCwgOTQ3MDksIDk0NzE0LCA5NDcxOSwgOTQ3MjQsIDk0NzI4LCA5NDczMiwgOTQ3MzcsIDk0NzQyLCA5NDc0NywgCi0gICAgOTQ3NTEsIDk0NzU1LCA5NDc1OSwgOTQ3NjQsIDk0NzY5LCA5NDc3NCwgOTQ3NzksIDk0NzgzLCA5NDc4NywgOTQ3OTMsIAotICAgIDk0Nzk4LCA5NDgwNCwgOTQ4MDksIDk0ODE1LCA5NDgyMCwgOTQ4MjYsIDk0ODMxLCA5NDgzNywgOTQ4NDIsIDk0ODQ3LCAKLSAgICA5NDg1MiwgOTQ4NTcsIDk0ODYxLCA5NDg2NiwgOTQ4NzIsIDk0ODc2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCA5NDg4MSwgOTQ4ODgsIDk0ODk1LCA5NDkwMiwgOTQ5MDksIDk0OTE2LCA5NDkyMywgOTQ5MzAsIAotICAgIDk0OTM3LCA5NDk0NCwgOTQ5NTEsIDk0OTU4LCA5NDk2NSwgOTQ5NzIsIDk0OTc5LCA5NDk4NiwgOTQ5OTMsIDk1MDAwLCAKLSAgICA5NTAwNywgOTUwMTQsIDk1MDIxLCA5NTAyOCwgOTUwMzUsIDk1MDQyLCA5NTA0OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgOTUwNTYsIDk1MDYzLCA5NTA2OSwgOTUwNzUsIDk1MDgxLCA5NTA4NywgOTUwOTMsIDk1MDk5LCA5NTEwNSwgOTUxMTEsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDk1MTE3LCA5NTEyMiwgOTUxMjcsIDk1MTMyLCA5NTEzNywgOTUxNDEsIDk1MTQ1LCA5NTE0OSwgCi0gICAgOTUxNTQsIDk1MTU5LCA5NTE2NCwgOTUxNjksIDk1MTc0LCA5NTE3OSwgOTUxODQsIDk1MTg5LCA5NTE5NCwgOTUxOTksIAotICAgIDk1MjA0LCA5NTIwOSwgOTUyMTQsIDk1MjE5LCA5NTIyNCwgOTUyMjksIDk1MjM0LCA5NTIzOSwgOTUyNDQsIDk1MjQ5LCAKLSAgICA5NTI1NCwgOTUyNTksIDk1MjY0LCA5NTI2OSwgOTUyNzQsIDk1Mjc5LCA5NTI4NCwgOTUyODksIDk1Mjk0LCA5NTI5OSwgCi0gICAgOTUzMDQsIDk1MzA5LCA5NTMxNCwgOTUzMTksIDk1MzI1LCA5NTMzMCwgOTUzMzYsIDk1MzQxLCA5NTM0NywgOTUzNTIsIAotICAgIDk1MzU4LCA5NTM2NCwgOTUzNjgsIDk1MzczLCA5NTM3NywgMCwgOTUzODEsIDk1Mzg2LCA5NTM5MCwgOTUzOTQsIDk1Mzk4LCAKLSAgICA5NTQwMiwgOTU0MDYsIDk1NDEwLCA5NTQxNCwgOTU0MTgsIDk1NDIyLCA5NTQyNywgOTU0MzEsIDk1NDM2LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5NTQ0MSwgOTU0NDUsIDk1NDQ5LCA5NTQ1MywgOTU0NTYsIDk1NDYwLCAKLSAgICA5NTQ2MywgOTU0NjcsIDk1NDcwLCA5NTQ3NCwgOTU0NzgsIDk1NDgzLCA5NTQ4NywgOTU0OTIsIDk1NDk1LCA5NTQ5OSwgCi0gICAgOTU1MDIsIDk1NTA2LCA5NTUwOSwgOTU1MTMsIDk1NTE3LCA5NTUyMSwgOTU1MjUsIDk1NTI5LCA5NTUzMywgOTU1MzcsIAotICAgIDk1NTQxLCA5NTU0NSwgOTU1NDksIDk1NTUzLCA5NTU1NywgOTU1NjEsIDk1NTY1LCA5NTU2OSwgOTU1NzMsIDk1NTc3LCAKLSAgICA5NTU4MSwgOTU1ODQsIDk1NTg3LCA5NTU5MSwgOTU1OTUsIDk1NTk5LCA5NTYwMiwgOTU2MDUsIDk1NjA4LCA5NTYxMiwgCi0gICAgOTU2MTYsIDk1NjIwLCA5NTYyNCwgOTU2MjgsIDk1NjMxLCA5NTYzNCwgOTU2MzksIDk1NjQzLCA5NTY0OCwgOTU2NTIsIAotICAgIDk1NjU3LCA5NTY2MiwgOTU2NjgsIDk1NjczLCA5NTY3OSwgOTU2ODMsIDk1Njg4LCA5NTY5MiwgOTU2OTcsIDk1NzAxLCAKLSAgICA5NTcwNSwgOTU3MDksIDk1NzEzLCA5NTcxNiwgOTU3MTksIDk1NzIzLCA5NTcyNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgOTU3MzAsIDk1NzM0LCA5NTczNywgOTU3NDAsIDk1NzQzLCA5NTc0NiwgOTU3NDksIDk1NzUyLCA5NTc1NSwgOTU3NTgsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDk1NzYxLCA5NTc2NSwgOTU3NzAsIDk1Nzc0LCA5NTc3OSwgCi0gICAgOTU3ODMsIDk1Nzg4LCA5NTc5MiwgOTU3OTcsIDk1ODAxLCA5NTgwNiwgOTU4MTAsIDk1ODE1LCA5NTgyMCwgOTU4MjUsIAotICAgIDk1ODMwLCA5NTgzNSwgOTU4NDAsIDk1ODQ1LCA5NTg1MCwgOTU4NTUsIDk1ODYwLCA5NTg2NSwgOTU4NzAsIDk1ODc1LCAKLSAgICA5NTg4MCwgOTU4ODUsIDk1ODkwLCA5NTg5NSwgOTU5MDAsIDk1OTA0LCA5NTkwOCwgOTU5MTMsIDk1OTE4LCA5NTkyMywgCi0gICAgOTU5MjcsIDk1OTMxLCA5NTkzNSwgOTU5NDAsIDk1OTQ1LCA5NTk1MCwgOTU5NTQsIDk1OTU4LCA5NTk2MywgOTU5NjgsIAotICAgIDk1OTczLCA5NTk3OSwgOTU5ODQsIDk1OTkwLCA5NTk5NSwgOTYwMDEsIDk2MDA2LCA5NjAxMiwgOTYwMTcsIDk2MDIzLCAKLSAgICA5NjAyOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTYwMzMsIDk2MDM4LCA5NjA0MiwgOTYwNDYsIDk2MDUwLCA5NjA1NCwgCi0gICAgOTYwNTgsIDk2MDYyLCA5NjA2NiwgOTYwNzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDk2MDc0LCA5NjA3NywgOTYwODIsIDk2MDg4LCAKLSAgICA5NjA5NiwgOTYxMDEsIDk2MTA3LCA5NjExNSwgOTYxMjEsIDk2MTI3LCA5NjEzMSwgOTYxMzUsIDk2MTQyLCA5NjE1MSwgCi0gICAgOTYxNTgsIDk2MTY3LCA5NjE3MywgOTYxODIsIDk2MTg5LCA5NjE5NiwgOTYyMDMsIDk2MjEzLCA5NjIxOSwgOTYyMjMsIAotICAgIDk2MjMwLCA5NjIzOSwgOTYyNDksIDk2MjU2LCA5NjI2MywgOTYyNjcsIDk2MjcxLCA5NjI3OCwgOTYyODgsIDk2MjkyLCAKLSAgICA5NjI5OSwgOTYzMDYsIDk2MzEzLCA5NjMxOSwgOTYzMjYsIDk2MzMzLCA5NjM0MCwgOTYzNDcsIDk2MzUxLCA5NjM1NSwgCi0gICAgOTYzNTksIDk2MzY2LCA5NjM3MCwgOTYzNzcsIDk2Mzg0LCA5NjM5OCwgOTY0MDcsIDk2NDExLCA5NjQxNSwgOTY0MTksIAotICAgIDk2NDI2LCA5NjQzMCwgOTY0MzQsIDk2NDM4LCA5NjQ0NiwgOTY0NTQsIDk2NDczLCA5NjQ4MywgOTY1MDMsIDk2NTA3LCAKLSAgICA5NjUxMSwgOTY1MTUsIDk2NTE5LCA5NjUyMywgOTY1MjcsIDk2NTMxLCA5NjUzOCwgOTY1NDIsIDk2NTQ1LCA5NjU0OSwgCi0gICAgOTY1NTMsIDk2NTU5LCA5NjU2NiwgOTY1NzUsIDk2NTc5LCA5NjU4OCwgOTY1OTcsIDk2NjA1LCA5NjYwOSwgOTY2MTYsIAotICAgIDk2NjIwLCA5NjYyNCwgOTY2MjgsIDk2NjMyLCA5NjY0MywgOTY2NTIsIDk2NjYxLCA5NjY3MCwgOTY2NzksIDk2NjkxLCAKLSAgICA5NjcwMCwgOTY3MDksIDk2NzE4LCA5NjcyNiwgOTY3MzUsIDk2NzQ3LCA5Njc1NiwgOTY3NjUsIDk2Nzc0LCA5Njc4NiwgCi0gICAgOTY3OTUsIDk2ODA0LCA5NjgxNiwgOTY4MjUsIDk2ODM0LCA5Njg0NiwgOTY4NTUsIDk2ODU5LCA5Njg2MywgOTY4NjcsIAotICAgIDk2ODcxLCA5Njg3NSwgOTY4NzksIDk2ODgzLCA5Njg5MCwgOTY4OTQsIDk2ODk4LCA5NjkwOSwgOTY5MTMsIDk2OTE3LCAKLSAgICA5NjkyNCwgOTY5MzAsIDk2OTM2LCA5Njk0MCwgOTY5NDcsIDk2OTUxLCA5Njk1NSwgOTY5NTksIDk2OTYzLCA5Njk2NywgCi0gICAgOTY5NzEsIDk2OTc3LCA5Njk4NSwgOTY5ODksIDk2OTkzLCA5Njk5NiwgOTcwMDIsIDk3MDEyLCA5NzAxNiwgOTcwMjgsIAotICAgIDk3MDM1LCA5NzA0MiwgOTcwNDksIDk3MDU2LCA5NzA2MiwgOTcwNjYsIDk3MDcwLCA5NzA3NCwgOTcwNzgsIDk3MDg1LCAKLSAgICA5NzA5NCwgOTcxMDEsIDk3MTA5LCA5NzExNywgOTcxMjMsIDk3MTI3LCA5NzEzMSwgOTcxMzUsIDk3MTM5LCA5NzE0NSwgCi0gICAgOTcxNTQsIDk3MTY2LCA5NzE3MywgOTcxODAsIDk3MTg5LCA5NzIwMCwgOTcyMDYsIDk3MjE1LCA5NzIyNCwgOTcyMzEsIAotICAgIDk3MjQwLCA5NzI0NywgOTcyNTQsIDk3MjY0LCA5NzI3MSwgOTcyNzgsIDk3Mjg1LCA5NzI5MiwgOTcyOTYsIDk3MzAyLCAKLSAgICA5NzMwNiwgOTczMTcsIDk3MzI1LCA5NzMzNCwgOTczNDYsIDk3MzUzLCA5NzM2MCwgOTczNzAsIDk3Mzc3LCA5NzM4NiwgCi0gICAgOTczOTMsIDk3NDAyLCA5NzQwOSwgOTc0MTYsIDk3NDI2LCA5NzQzMywgOTc0NDAsIDk3NDUwLCA5NzQ1NywgOTc0NjksIAotICAgIDk3NDc4LCA5NzQ4NSwgOTc0OTIsIDk3NDk5LCA5NzUwOCwgOTc1MTgsIDk3NTMxLCA5NzUzOCwgOTc1NDgsIDk3NTU4LCAKLSAgICA5NzU2NSwgOTc1NzQsIDk3NTg3LCA5NzU5NCwgOTc2MDEsIDk3NjA4LCA5NzYxOCwgOTc2MjgsIDk3NjM1LCA5NzY0NSwgCi0gICAgOTc2NTIsIDk3NjU5LCA5NzY2OSwgOTc2NzUsIDk3NjgyLCA5NzY4OSwgOTc2OTYsIDk3NzA2LCA5NzcxMywgOTc3MjAsIAotICAgIDk3NzI3LCA5NzczMywgOTc3NDAsIDk3NzUwLCA5Nzc1NywgOTc3NjEsIDk3NzY5LCA5Nzc3MywgOTc3ODUsIDk3Nzg5LCAKLSAgICA5NzgwMywgOTc4MDcsIDk3ODExLCA5NzgxNSwgOTc4MTksIDk3ODI1LCA5NzgzMiwgOTc4NDAsIDk3ODQ0LCA5Nzg0OCwgCi0gICAgOTc4NTIsIDk3ODU2LCA5Nzg2MywgOTc4NjcsIDk3ODczLCA5Nzg3OSwgOTc4ODcsIDk3ODkxLCA5Nzg5OCwgOTc5MDYsIAotICAgIDk3OTEwLCA5NzkxNCwgOTc5MjAsIDk3OTI0LCA5NzkzMywgOTc5NDIsIDk3OTQ5LCA5Nzk1OSwgOTc5NjUsIDk3OTY5LCAKLSAgICA5Nzk3MywgOTc5ODEsIDk3OTg4LCA5Nzk5NSwgOTgwMDEsIDk4MDA1LCA5ODAxMywgOTgwMTcsIDk4MDI0LCA5ODAzNiwgCi0gICAgOTgwNDMsIDk4MDUzLCA5ODA1OSwgOTgwNjMsIDk4MDcyLCA5ODA3OSwgOTgwODgsIDk4MDkyLCA5ODA5NiwgOTgxMDMsIAotICAgIDk4MTA3LCA5ODExMSwgOTgxMTUsIDk4MTE5LCA5ODEyMiwgOTgxMjgsIDk4MTM0LCA5ODEzOCwgOTgxNDIsIDk4MTQ5LCAKLSAgICA5ODE1NiwgOTgxNjMsIDk4MTcwLCA5ODE3NywgOTgxODQsIDk4MTkxLCA5ODE5OCwgOTgyMDQsIDk4MjA4LCA5ODIxMiwgCi0gICAgOTgyMTksIDk4MjI2LCA5ODIzMywgOTgyNDAsIDk4MjQ3LCA5ODI1MSwgOTgyNTQsIDk4MjU5LCA5ODI2MywgOTgyNjcsIAotICAgIDk4Mjc2LCA5ODI4NSwgOTgyODksIDk4MjkzLCA5ODI5OSwgOTgzMDUsIDk4MzIyLCA5ODMyOCwgOTgzMzIsIDk4MzQxLCAKLSAgICA5ODM0NSwgOTgzNDksIDk4MzU2LCA5ODM2NCwgOTgzNzIsIDk4Mzc4LCA5ODM4MiwgOTgzODYsIDk4MzkwLCA5ODM5NCwgCi0gICAgOTgzOTcsIDk4NDAzLCA5ODQxMCwgOTg0MjAsIDk4NDI3LCA5ODQzNCwgOTg0NDEsIDk4NDQ3LCA5ODQ1NCwgOTg0NjEsIAotICAgIDk4NDY4LCA5ODQ3NSwgOTg0ODIsIDk4NDkxLCA5ODQ5OCwgOTg1MTAsIDk4NTE3LCA5ODUyNCwgOTg1MzQsIDk4NTQ1LCAKLSAgICA5ODU1MiwgOTg1NTksIDk4NTY2LCA5ODU3MywgOTg1ODAsIDk4NTg3LCA5ODU5NCwgOTg2MDEsIDk4NjA4LCA5ODYxNSwgCi0gICAgOTg2MjUsIDk4NjM1LCA5ODY0NSwgOTg2NTIsIDk4NjYyLCA5ODY2OSwgOTg2NzYsIDk4NjgzLCA5ODY5MCwgOTg2OTYsIAotICAgIDk4NzAzLCA5ODcxMCwgOTg3MTcsIDk4NzI0LCA5ODczMSwgOTg3MzgsIDk4NzQ1LCA5ODc1MiwgOTg3NTgsIDk4NzY1LCAKLSAgICA5ODc3MiwgOTg3ODEsIDk4Nzg4LCA5ODc5NSwgOTg3OTksIDk4ODA3LCA5ODgxMSwgOTg4MTUsIDk4ODE5LCA5ODgyMywgCi0gICAgOTg4MjcsIDk4ODM0LCA5ODgzOCwgOTg4NDcsIDk4ODUxLCA5ODg1OCwgOTg4NjYsIDk4ODcwLCA5ODg3NCwgOTg4NzgsIAotICAgIDk4ODkxLCA5ODkwNywgOTg5MTEsIDk4OTE1LCA5ODkyMiwgOTg5MjgsIDk4OTM1LCA5ODkzOSwgOTg5NDMsIDk4OTQ3LCAKLSAgICA5ODk1MSwgOTg5NTUsIDk4OTYyLCA5ODk2NiwgOTg5ODQsIDk4OTg4LCA5ODk5MiwgOTg5OTksIDk5MDAzLCA5OTAwNywgCi0gICAgOTkwMTMsIDk5MDE3LCA5OTAyMSwgOTkwMjksIDk5MDMzLCA5OTAzNywgOTkwNDEsIDk5MDQ1LCA5OTA1MSwgOTkwNjIsIAotICAgIDk5MDcxLCA5OTA4MCwgOTkwODcsIDk5MDk0LCA5OTEwNSwgOTkxMTIsIDk5MTE5LCA5OTEyNiwgOTkxMzMsIDk5MTQwLCAKLSAgICA5OTE0NywgOTkxNTQsIDk5MTY0LCA5OTE3MCwgOTkxNzcsIDk5MTg3LCA5OTE5NiwgOTkyMDMsIDk5MjEyLCA5OTIyMiwgCi0gICAgOTkyMjksIDk5MjM2LCA5OTI0MywgOTkyNTAsIDk5MjYyLCA5OTI2OSwgOTkyNzYsIDk5MjgzLCA5OTI5MCwgOTkyOTcsIAotICAgIDk5MzA3LCA5OTMxNCwgOTkzMjEsIDk5MzMxLCA5OTM0NCwgOTkzNTYsIDk5MzYzLCA5OTM3MywgOTkzODAsIDk5Mzg3LCAKLSAgICA5OTM5NCwgOTk0MDgsIDk5NDE0LCA5OTQyMiwgOTk0MzIsIDk5NDQyLCA5OTQ0OSwgOTk0NTYsIDk5NDYyLCA5OTQ2NiwgCi0gICAgOTk0NzMsIDk5NDgzLCA5OTQ4OSwgOTk1MDIsIDk5NTA2LCA5OTUxMCwgOTk1MTcsIDk5NTIxLCA5OTUyOCwgOTk1MzgsIAotICAgIDk5NTQyLCA5OTU0NiwgOTk1NTAsIDk5NTU0LCA5OTU1OCwgOTk1NjUsIDk5NTY5LCA5OTU3NiwgOTk1ODMsIDk5NTkwLCAKLSAgICA5OTU5OSwgOTk2MDgsIDk5NjE4LCA5OTYyNSwgOTk2MzIsIDk5NjM5LCA5OTY0OSwgOTk2NTYsIDk5NjY2LCA5OTY3MywgCi0gICAgOTk2ODMsIDk5NjkwLCA5OTY5NywgOTk3MDcsIDk5NzE3LCA5OTcyNCwgOTk3MzAsIDk5NzM4LCA5OTc0NiwgOTk3NTIsIAotICAgIDk5NzU4LCA5OTc2MiwgOTk3NjYsIDk5NzczLCA5OTc4MSwgOTk3ODcsIDk5NzkxLCA5OTc5NSwgOTk3OTksIDk5ODA2LCAKLSAgICA5OTgxOCwgOTk4MjEsIDk5ODI4LCA5OTgzNCwgOTk4MzgsIDk5ODQyLCA5OTg0NiwgOTk4NTAsIDk5ODU0LCA5OTg1OCwgCi0gICAgOTk4NjIsIDk5ODY2LCA5OTg3MCwgOTk4NzQsIDk5ODgxLCA5OTg4NSwgOTk4OTEsIDk5ODk1LCA5OTg5OSwgOTk5MDMsIAotICAgIDk5OTA5LCA5OTkxNiwgOTk5MjMsIDk5OTMwLCA5OTk0MSwgOTk5NDksIDk5OTUzLCA5OTk1OSwgOTk5NjgsIDk5OTc1LCAKLSAgICA5OTk4MSwgOTk5ODQsIDk5OTg4LCA5OTk5MiwgOTk5OTgsIDEwMDAwNywgMTAwMDE1LCAxMDAwMTksIDEwMDAyNSwgCi0gICAgMTAwMDI5LCAxMDAwMzMsIDEwMDAzNywgMTAwMDQzLCAxMDAwNTAsIDEwMDA1NiwgMTAwMDYwLCAxMDAwNjYsIDEwMDA3MCwgCi0gICAgMTAwMDc0LCAxMDAwODMsIDEwMDA5NSwgMTAwMDk5LCAxMDAxMDYsIDEwMDExMywgMTAwMTIzLCAxMDAxMzAsIDEwMDE0MiwgCi0gICAgMTAwMTQ5LCAxMDAxNTYsIDEwMDE2MywgMTAwMTc0LCAxMDAxODQsIDEwMDE5NywgMTAwMjA3LCAxMDAyMTQsIDEwMDIxOCwgCi0gICAgMTAwMjIyLCAxMDAyMjYsIDEwMDIzMCwgMTAwMjM5LCAxMDAyNDgsIDEwMDI1NywgMTAwMjc0LCAxMDAyODMsIDEwMDI4OSwgCi0gICAgMTAwMjk2LCAxMDAzMDQsIDEwMDMxNywgMTAwMzIxLCAxMDAzMzAsIDEwMDMzOSwgMTAwMzQ4LCAxMDAzNTcsIDEwMDM2OCwgCi0gICAgMTAwMzc3LCAxMDAzODYsIDEwMDM5NSwgMTAwNDA0LCAxMDA0MTMsIDEwMDQyMiwgMTAwNDMyLCAxMDA0MzUsIDEwMDQzOSwgCi0gICAgMTAwNDQzLCAxMDA0NDcsIDEwMDQ1MSwgMTAwNDU1LCAxMDA0NjEsIDEwMDQ2OCwgMTAwNDc1LCAxMDA0ODIsIDEwMDQ4OCwgCi0gICAgMTAwNDk0LCAxMDA1MDEsIDEwMDUwNywgMTAwNTE0LCAxMDA1MjIsIDEwMDUyNiwgMTAwNTMzLCAxMDA1NDAsIDEwMDU0NywgCi0gICAgMTAwNTU1LCAxMDA1NTgsIDEwMDU2MiwgMTAwNTY2LCAxMDA1NzAsIDEwMDU3MywgMTAwNTc5LCAxMDA1ODMsIDEwMDU4OSwgCi0gICAgMTAwNTk2LCAxMDA2MDMsIDEwMDYwOSwgMTAwNjE2LCAxMDA2MjMsIDEwMDYzMCwgMTAwNjM3LCAxMDA2NDQsIDEwMDY1MSwgCi0gICAgMTAwNjU4LCAxMDA2NjUsIDEwMDY3MiwgMTAwNjc5LCAxMDA2ODYsIDEwMDY5MywgMTAwNzAwLCAxMDA3MDcsIDEwMDcxMywgCi0gICAgMTAwNzE3LCAxMDA3MjYsIDEwMDczMCwgMTAwNzM0LCAxMDA3MzgsIDEwMDc0MiwgMTAwNzQ4LCAxMDA3NTUsIDEwMDc2MiwgCi0gICAgMTAwNzY5LCAxMDA3NzYsIDEwMDc4MywgMTAwNzg5LCAxMDA3OTcsIDEwMDgwMSwgMTAwODA1LCAxMDA4MDksIDEwMDgxMywgCi0gICAgMTAwODE5LCAxMDA4MzYsIDEwMDg1MywgMTAwODU3LCAxMDA4NjEsIDEwMDg2NSwgMTAwODY5LCAxMDA4NzMsIDEwMDg3NywgCi0gICAgMTAwODgzLCAxMDA4OTAsIDEwMDg5NCwgMTAwOTAwLCAxMDA5MDcsIDEwMDkxNCwgMTAwOTIxLCAxMDA5MjgsIDEwMDkzNSwgCi0gICAgMTAwOTQ0LCAxMDA5NTEsIDEwMDk1OCwgMTAwOTY1LCAxMDA5NzIsIDEwMDk3NiwgMTAwOTgwLCAxMDA5ODYsIDEwMDk5OCwgCi0gICAgMTAxMDAyLCAxMDEwMDYsIDEwMTAxNSwgMTAxMDE5LCAxMDEwMjMsIDEwMTAyNywgMTAxMDMzLCAxMDEwMzcsIDEwMTA0MSwgCi0gICAgMTAxMDUwLCAxMDEwNTQsIDEwMTA1OCwgMTAxMDYyLCAxMDEwNjksIDEwMTA3MywgMTAxMDc3LCAxMDEwODEsIDEwMTA4NSwgCi0gICAgMTAxMDg5LCAxMDEwOTMsIDEwMTA5NywgMTAxMTAxLCAxMDExMDcsIDEwMTExNCwgMTAxMTIxLCAxMDExMjcsIDEwMTEzMSwgCi0gICAgMTAxMTQ4LCAxMDExNTQsIDEwMTE1OCwgMTAxMTY0LCAxMDExNzAsIDEwMTE3NiwgMTAxMTgyLCAxMDExODgsIDEwMTE5NCwgCi0gICAgMTAxMTk4LCAxMDEyMDIsIDEwMTIwNiwgMTAxMjEyLCAxMDEyMTYsIDEwMTIyMiwgMTAxMjI2LCAxMDEyMzAsIDEwMTIzNywgCi0gICAgMTAxMjQ0LCAxMDEyNjEsIDEwMTI2NSwgMTAxMjY5LCAxMDEyNzMsIDEwMTI3NywgMTAxMjgxLCAxMDEyOTMsIDEwMTI5NiwgCi0gICAgMTAxMzAxLCAxMDEzMDYsIDEwMTMyMSwgMTAxMzMxLCAxMDEzNDMsIDEwMTM0NywgMTAxMzUxLCAxMDEzNTUsIDEwMTM2MSwgCi0gICAgMTAxMzY4LCAxMDEzNzUsIDEwMTM4NSwgMTAxMzk3LCAxMDE0MDMsIDEwMTQwOSwgMTAxNDE4LCAxMDE0MjIsIDEwMTQyNiwgCi0gICAgMTAxNDMzLCAxMDE0NDMsIDEwMTQ1MCwgMTAxNDU2LCAxMDE0NjAsIDEwMTQ2NCwgMTAxNDcxLCAxMDE0NzcsIDEwMTQ4MSwgCi0gICAgMTAxNDg3LCAxMDE0OTEsIDEwMTQ5OSwgMTAxNTA1LCAxMDE1MDksIDEwMTUxNywgMTAxNTI1LCAxMDE1MzIsIDEwMTUzOCwgCi0gICAgMTAxNTQ1LCAxMDE1NTIsIDEwMTU2MiwgMTAxNTcyLCAxMDE1NzYsIDEwMTU4MCwgMTAxNTg0LCAxMDE1ODgsIDEwMTU5NCwgCi0gICAgMTAxNjAxLCAxMDE2MDcsIDEwMTYxNCwgMTAxNjIxLCAxMDE2MjgsIDEwMTYzNywgMTAxNjQ0LCAxMDE2NTEsIDEwMTY1NywgCi0gICAgMTAxNjY0LCAxMDE2NzEsIDEwMTY3OCwgMTAxNjg1LCAxMDE2OTIsIDEwMTY5OSwgMTAxNzA1LCAxMDE3MTIsIDEwMTcxOSwgCi0gICAgMTAxNzI2LCAxMDE3MzUsIDEwMTc0MiwgMTAxNzQ5LCAxMDE3NTMsIDEwMTc1OSwgMTAxNzYzLCAxMDE3NjksIDEwMTc3NiwgCi0gICAgMTAxNzgzLCAxMDE3OTAsIDEwMTc5NCwgMTAxNzk4LCAxMDE4MDIsIDEwMTgwNiwgMTAxODEwLCAxMDE4MTcsIDEwMTgyMSwgCi0gICAgMTAxODI1LCAxMDE4MzEsIDEwMTgzOSwgMTAxODQzLCAxMDE4NDcsIDEwMTg1MSwgMTAxODU1LCAxMDE4NjIsIDEwMTg2NiwgCi0gICAgMTAxODcwLCAxMDE4NzgsIDEwMTg4MiwgMTAxODg2LCAxMDE4OTAsIDEwMTg5NCwgMTAxOTAwLCAxMDE5MDQsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEwMTkwOCwgMTAxOTE0LCAxMDE5MjAsIDEwMTkyNywgCi0gICAgMTAxOTM0LCAxMDE5NDEsIDEwMTk0OCwgMTAxOTU1LCAxMDE5NjIsIDEwMTk2OCwgMTAxOTc1LCAxMDE5ODIsIDEwMTk4OSwgCi0gICAgMTAxOTk2LCAxMDIwMDMsIDEwMjAxMCwgMTAyMDE2LCAxMDIwMjIsIDEwMjAyOCwgMTAyMDM0LCAxMDIwNDAsIDEwMjA0NiwgCi0gICAgMTAyMDUyLCAxMDIwNTgsIDEwMjA2NCwgMTAyMDcxLCAxMDIwNzgsIDEwMjA4NSwgMTAyMDkyLCAxMDIwOTksIDEwMjEwNiwgCi0gICAgMTAyMTEyLCAxMDIxMTgsIDEwMjEyNCwgMTAyMTMxLCAxMDIxMzgsIDEwMjE0NCwgMTAyMTUwLCAxMDIxNTksIDEwMjE2NiwgCi0gICAgMTAyMTczLCAxMDIxODAsIDEwMjE4NywgMTAyMTk0LCAxMDIyMDEsIDEwMjIwNywgMTAyMjEzLCAxMDIyMTksIDEwMjIyOCwgCi0gICAgMTAyMjM1LCAxMDIyNDIsIDEwMjI1MywgMTAyMjY0LCAxMDIyNzAsIDEwMjI3NiwgMTAyMjgyLCAxMDIyOTEsIDEwMjI5OCwgCi0gICAgMTAyMzA1LCAxMDIzMTUsIDEwMjMyNSwgMTAyMzM2LCAxMDIzNDcsIDEwMjM1OSwgMTAyMzcyLCAxMDIzODMsIDEwMjM5NCwgCi0gICAgMTAyNDA2LCAxMDI0MTksIDEwMjQzMCwgMTAyNDQxLCAxMDI0NTIsIDEwMjQ2MywgMTAyNDc0LCAxMDI0ODYsIDEwMjQ5NCwgCi0gICAgMTAyNTAyLCAxMDI1MTEsIDEwMjUyMCwgMTAyNTI5LCAxMDI1MzUsIDEwMjU0MSwgMTAyNTQ3LCAxMDI1NTQsIDEwMjU2NCwgCi0gICAgMTAyNTcxLCAxMDI1ODEsIDEwMjU4NiwgMTAyNTkxLCAxMDI1OTcsIDEwMjYwMywgMTAyNjExLCAxMDI2MTksIDEwMjYyOCwgCi0gICAgMTAyNjM5LCAxMDI2NTAsIDEwMjY1OCwgMTAyNjY2LCAxMDI2NzUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDEwMjY4NCwgMTAyNjk1LCAxMDI3MDIsIDEwMjcxMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMTAyNzE4LCAxMDI3MjIsIDEwMjcyNiwgMTAyNzMwLCAxMDI3MzQsIDEwMjczOCwgMTAyNzQyLCAxMDI3NDYsIDEwMjc1MCwgCi0gICAgMTAyNzU0LCAxMDI3NTgsIDEwMjc2MiwgMTAyNzY2LCAxMDI3NzAsIDEwMjc3NCwgMTAyNzc4LCAxMDI3ODIsIDEwMjc4NiwgCi0gICAgMTAyNzkwLCAxMDI3OTQsIDEwMjc5OCwgMTAyODAyLCAxMDI4MDYsIDEwMjgxMCwgMTAyODE0LCAxMDI4MTgsIDEwMjgyMiwgCi0gICAgMTAyODI2LCAxMDI4MzAsIDEwMjgzNCwgMTAyODM4LCAxMDI4NDIsIDEwMjg0NiwgMTAyODUwLCAxMDI4NTQsIDEwMjg1OCwgCi0gICAgMTAyODYyLCAxMDI4NjYsIDEwMjg3MCwgMTAyODc0LCAxMDI4NzgsIDEwMjg4MiwgMTAyODg2LCAxMDI4OTAsIDEwMjg5NCwgCi0gICAgMTAyODk4LCAxMDI5MDIsIDEwMjkwNiwgMTAyOTEwLCAxMDI5MTQsIDEwMjkxOCwgMTAyOTIyLCAxMDI5MjYsIDEwMjkzMCwgCi0gICAgMTAyOTM0LCAxMDI5MzgsIDEwMjk0MiwgMTAyOTQ2LCAxMDI5NTAsIDEwMjk1NCwgMTAyOTU4LCAxMDI5NjIsIDEwMjk2NiwgCi0gICAgMTAyOTcwLCAxMDI5NzQsIDEwMjk3OCwgMTAyOTgyLCAxMDI5ODYsIDEwMjk5MCwgMTAyOTk0LCAxMDI5OTgsIDEwMzAwMiwgCi0gICAgMTAzMDA2LCAxMDMwMTAsIDEwMzAxNCwgMTAzMDE4LCAxMDMwMjIsIDEwMzAyNiwgMTAzMDMwLCAxMDMwMzQsIDEwMzAzOCwgCi0gICAgMTAzMDQyLCAxMDMwNDYsIDEwMzA1MCwgMTAzMDU0LCAxMDMwNTgsIDEwMzA2MiwgMTAzMDY2LCAxMDMwNzAsIDEwMzA3NCwgCi0gICAgMTAzMDc4LCAxMDMwODIsIDEwMzA4NiwgMTAzMDkwLCAxMDMwOTQsIDEwMzA5OCwgMTAzMTAyLCAxMDMxMDYsIDEwMzExMCwgCi0gICAgMTAzMTE0LCAxMDMxMTgsIDEwMzEyMiwgMTAzMTI2LCAxMDMxMzAsIDEwMzEzNCwgMTAzMTM4LCAxMDMxNDIsIDEwMzE0NiwgCi0gICAgMTAzMTUwLCAxMDMxNTQsIDEwMzE1OCwgMTAzMTYyLCAxMDMxNjYsIDEwMzE3MCwgMTAzMTc0LCAxMDMxNzgsIDEwMzE4MiwgCi0gICAgMTAzMTg2LCAxMDMxOTAsIDEwMzE5NCwgMTAzMTk4LCAxMDMyMDIsIDEwMzIwNiwgMTAzMjEwLCAxMDMyMTQsIDEwMzIxOCwgCi0gICAgMTAzMjIyLCAxMDMyMjYsIDEwMzIzMCwgMTAzMjM0LCAxMDMyMzgsIDEwMzI0MiwgMTAzMjQ2LCAxMDMyNTAsIDEwMzI1NCwgCi0gICAgMTAzMjU4LCAxMDMyNjIsIDEwMzI2NiwgMTAzMjcwLCAxMDMyNzQsIDEwMzI3OCwgMTAzMjgyLCAxMDMyODYsIDEwMzI5MCwgCi0gICAgMTAzMjk0LCAxMDMyOTgsIDEwMzMwMiwgMTAzMzA2LCAxMDMzMTAsIDEwMzMxNCwgMTAzMzE4LCAxMDMzMjIsIDEwMzMyNiwgCi0gICAgMTAzMzMwLCAxMDMzMzQsIDEwMzMzOCwgMTAzMzQyLCAxMDMzNDYsIDEwMzM1MCwgMTAzMzU0LCAxMDMzNTgsIDEwMzM2MiwgCi0gICAgMTAzMzY2LCAxMDMzNzAsIDEwMzM3NCwgMTAzMzc4LCAxMDMzODIsIDEwMzM4NiwgMTAzMzkwLCAxMDMzOTQsIDEwMzM5OCwgCi0gICAgMTAzNDAyLCAxMDM0MDYsIDEwMzQxMCwgMTAzNDE0LCAxMDM0MTgsIDEwMzQyMiwgMTAzNDI2LCAxMDM0MzAsIDEwMzQzNCwgCi0gICAgMTAzNDM4LCAxMDM0NDIsIDEwMzQ0NiwgMTAzNDUwLCAxMDM0NTQsIDEwMzQ1OCwgMTAzNDYyLCAxMDM0NjYsIDEwMzQ3MCwgCi0gICAgMTAzNDc0LCAxMDM0NzgsIDEwMzQ4MiwgMTAzNDg2LCAxMDM0OTAsIDEwMzQ5NCwgMTAzNDk4LCAxMDM1MDIsIDEwMzUwNiwgCi0gICAgMTAzNTEwLCAxMDM1MTQsIDEwMzUxOCwgMTAzNTIyLCAxMDM1MjYsIDEwMzUzMCwgMTAzNTM0LCAxMDM1MzgsIDEwMzU0MiwgCi0gICAgMTAzNTQ2LCAxMDM1NTAsIDEwMzU1NCwgMTAzNTU4LCAxMDM1NjIsIDEwMzU2NiwgMTAzNTcwLCAxMDM1NzQsIDEwMzU3OCwgCi0gICAgMTAzNTgyLCAxMDM1ODYsIDEwMzU5MCwgMTAzNTk0LCAxMDM1OTgsIDEwMzYwMiwgMTAzNjA2LCAxMDM2MTAsIDEwMzYxNCwgCi0gICAgMTAzNjE4LCAxMDM2MjIsIDEwMzYyNiwgMTAzNjMwLCAxMDM2MzQsIDEwMzYzOCwgMTAzNjQyLCAxMDM2NDYsIDEwMzY1MCwgCi0gICAgMTAzNjU0LCAxMDM2NTgsIDEwMzY2MiwgMTAzNjY2LCAxMDM2NzAsIDEwMzY3NCwgMTAzNjc4LCAxMDM2ODIsIDEwMzY4NiwgCi0gICAgMTAzNjkwLCAxMDM2OTQsIDEwMzY5OCwgMTAzNzAyLCAxMDM3MDYsIDEwMzcxMCwgMTAzNzE0LCAxMDM3MTgsIDEwMzcyMiwgCi0gICAgMTAzNzI2LCAxMDM3MzAsIDEwMzczNCwgMTAzNzM4LCAxMDM3NDIsIDEwMzc0NiwgMTAzNzUwLCAxMDM3NTQsIDEwMzc1OCwgCi0gICAgMTAzNzYyLCAxMDM3NjYsIDEwMzc3MCwgMTAzNzc0LCAxMDM3NzgsIDEwMzc4MiwgMTAzNzg2LCAxMDM3OTAsIDEwMzc5NCwgCi0gICAgMTAzNzk4LCAxMDM4MDIsIDEwMzgwNiwgMTAzODEwLCAxMDM4MTQsIDEwMzgxOCwgMTAzODIyLCAxMDM4MjYsIDEwMzgzMCwgCi0gICAgMTAzODM0LCAxMDM4MzgsIDEwMzg0MiwgMTAzODQ2LCAxMDM4NTAsIDEwMzg1NCwgMTAzODU4LCAxMDM4NjIsIDEwMzg2NiwgCi0gICAgMTAzODcwLCAxMDM4NzQsIDEwMzg3OCwgMTAzODgyLCAxMDM4ODYsIDEwMzg5MCwgMTAzODk0LCAxMDM4OTgsIDEwMzkwMiwgCi0gICAgMTAzOTA2LCAxMDM5MTAsIDEwMzkxNCwgMTAzOTE4LCAxMDM5MjIsIDEwMzkyNiwgMTAzOTMwLCAxMDM5MzQsIDEwMzkzOCwgCi0gICAgMTAzOTQyLCAxMDM5NDYsIDEwMzk1MCwgMTAzOTU0LCAxMDM5NTgsIDEwMzk2MiwgMTAzOTY2LCAxMDM5NzAsIDEwMzk3NCwgCi0gICAgMTAzOTc4LCAxMDM5ODIsIDEwMzk4NiwgMTAzOTkwLCAxMDM5OTQsIDEwMzk5OCwgMTA0MDAyLCAxMDQwMDYsIDEwNDAxMCwgCi0gICAgMTA0MDE0LCAxMDQwMTgsIDEwNDAyMiwgMTA0MDI2LCAxMDQwMzAsIDEwNDAzNCwgMTA0MDM4LCAxMDQwNDIsIDEwNDA0NiwgCi0gICAgMTA0MDUwLCAxMDQwNTQsIDEwNDA1OCwgMTA0MDYyLCAxMDQwNjYsIDEwNDA3MCwgMTA0MDc0LCAxMDQwNzgsIDEwNDA4MiwgCi0gICAgMTA0MDg2LCAxMDQwOTAsIDEwNDA5NCwgMTA0MDk4LCAxMDQxMDIsIDEwNDEwNiwgMTA0MTEwLCAxMDQxMTQsIDEwNDExOCwgCi0gICAgMTA0MTIyLCAxMDQxMjYsIDEwNDEzMCwgMTA0MTM0LCAxMDQxMzgsIDEwNDE0MiwgMTA0MTQ2LCAxMDQxNTAsIDEwNDE1NCwgCi0gICAgMTA0MTU4LCAxMDQxNjIsIDEwNDE2NiwgMTA0MTcwLCAxMDQxNzQsIDEwNDE3OCwgMTA0MTgyLCAxMDQxODYsIDEwNDE5MCwgCi0gICAgMTA0MTk0LCAxMDQxOTgsIDEwNDIwMiwgMTA0MjA2LCAxMDQyMTAsIDEwNDIxNCwgMTA0MjE4LCAxMDQyMjIsIDEwNDIyNiwgCi0gICAgMTA0MjMwLCAxMDQyMzQsIDEwNDIzOCwgMTA0MjQyLCAxMDQyNDYsIDEwNDI1MCwgMTA0MjU0LCAxMDQyNTgsIDEwNDI2MiwgCi0gICAgMTA0MjY2LCAxMDQyNzAsIDEwNDI3NCwgMTA0Mjc4LCAxMDQyODIsIDEwNDI4NiwgMTA0MjkwLCAxMDQyOTQsIDEwNDI5OCwgCi0gICAgMTA0MzAyLCAxMDQzMDYsIDEwNDMxMCwgMTA0MzE0LCAxMDQzMTgsIDEwNDMyMiwgMTA0MzI2LCAxMDQzMzAsIDEwNDMzNCwgCi0gICAgMTA0MzM4LCAxMDQzNDIsIDEwNDM0NiwgMTA0MzUwLCAxMDQzNTQsIDEwNDM1OCwgMTA0MzYyLCAxMDQzNjYsIDEwNDM3MCwgCi0gICAgMTA0Mzc0LCAxMDQzNzgsIDEwNDM4MiwgMTA0Mzg2LCAxMDQzOTAsIDEwNDM5NCwgMTA0Mzk4LCAxMDQ0MDIsIDEwNDQwNiwgCi0gICAgMTA0NDEwLCAxMDQ0MTQsIDEwNDQxOCwgMTA0NDIyLCAxMDQ0MjYsIDEwNDQzMCwgMTA0NDM0LCAxMDQ0MzgsIDEwNDQ0MiwgCi0gICAgMTA0NDQ2LCAxMDQ0NTAsIDEwNDQ1NCwgMTA0NDU4LCAxMDQ0NjIsIDEwNDQ2NiwgMTA0NDcwLCAxMDQ0NzQsIDEwNDQ3OCwgCi0gICAgMTA0NDgyLCAxMDQ0ODYsIDEwNDQ5MCwgMTA0NDk0LCAxMDQ0OTgsIDEwNDUwMiwgMTA0NTA2LCAxMDQ1MTAsIDEwNDUxNCwgCi0gICAgMTA0NTE4LCAxMDQ1MjIsIDEwNDUyNiwgMTA0NTMwLCAxMDQ1MzQsIDEwNDUzOCwgMTA0NTQyLCAxMDQ1NDYsIDEwNDU1MCwgCi0gICAgMTA0NTU0LCAxMDQ1NTgsIDEwNDU2MiwgMTA0NTY2LCAxMDQ1NzAsIDEwNDU3NCwgMTA0NTc4LCAxMDQ1ODIsIDEwNDU4NiwgCi0gICAgMTA0NTkwLCAxMDQ1OTQsIDEwNDU5OCwgMTA0NjAyLCAxMDQ2MDYsIDEwNDYxMCwgMTA0NjE0LCAxMDQ2MTgsIDEwNDYyMiwgCi0gICAgMTA0NjI2LCAxMDQ2MzAsIDEwNDYzNCwgMTA0NjM4LCAxMDQ2NDIsIDEwNDY0NiwgMTA0NjUwLCAxMDQ2NTQsIDEwNDY1OCwgCi0gICAgMTA0NjYyLCAxMDQ2NjYsIDEwNDY3MCwgMTA0Njc0LCAxMDQ2NzgsIDEwNDY4MiwgMTA0Njg2LCAxMDQ2OTAsIDEwNDY5NCwgCi0gICAgMTA0Njk4LCAxMDQ3MDIsIDEwNDcwNiwgMTA0NzEwLCAxMDQ3MTQsIDEwNDcxOCwgMTA0NzIyLCAxMDQ3MjYsIDEwNDczMCwgCi0gICAgMTA0NzM0LCAxMDQ3MzgsIDEwNDc0MiwgMTA0NzQ2LCAxMDQ3NTAsIDEwNDc1NCwgMTA0NzU4LCAxMDQ3NjIsIDEwNDc2NiwgCi0gICAgMTA0NzcwLCAxMDQ3NzQsIDEwNDc3OCwgMTA0NzgyLCAxMDQ3ODYsIDEwNDc5MCwgMTA0Nzk0LCAxMDQ3OTgsIDEwNDgwMiwgCi0gICAgMTA0ODA2LCAxMDQ4MTAsIDEwNDgxNCwgMTA0ODE4LCAxMDQ4MjIsIDEwNDgyNiwgMTA0ODMwLCAxMDQ4MzQsIDEwNDgzOCwgCi0gICAgMTA0ODQyLCAxMDQ4NDYsIDEwNDg1MCwgMTA0ODU0LCAxMDQ4NTgsIDEwNDg2MiwgMTA0ODY2LCAxMDQ4NzAsIDEwNDg3NCwgCi0gICAgMTA0ODc4LCAxMDQ4ODIsIDEwNDg4NiwgMTA0ODkwLCAxMDQ4OTQsIDEwNDg5OCwgMTA0OTAyLCAxMDQ5MDYsIDEwNDkxMCwgCi0gICAgMTA0OTE0LCAxMDQ5MTgsIDEwNDkyMiwgMTA0OTI2LCAxMDQ5MzAsIDEwNDkzNCwgMTA0OTM4LCAxMDQ5NDIsIDEwNDk0NiwgCi0gICAgMTA0OTUwLCAxMDQ5NTQsIDEwNDk1OCwgMTA0OTYyLCAxMDQ5NjYsIDEwNDk3MCwgMTA0OTc0LCAxMDQ5NzgsIDEwNDk4MiwgCi0gICAgMTA0OTg2LCAxMDQ5OTAsIDEwNDk5NCwgMTA0OTk4LCAxMDUwMDIsIDEwNTAwNiwgMTA1MDEwLCAxMDUwMTQsIDEwNTAxOCwgCi0gICAgMTA1MDIyLCAxMDUwMjYsIDEwNTAzMCwgMTA1MDM0LCAxMDUwMzgsIDEwNTA0MiwgMTA1MDQ2LCAxMDUwNTAsIDEwNTA1NCwgCi0gICAgMTA1MDU4LCAxMDUwNjIsIDEwNTA2NiwgMTA1MDcwLCAxMDUwNzQsIDEwNTA3OCwgMTA1MDgyLCAxMDUwODYsIDEwNTA5MCwgCi0gICAgMTA1MDk0LCAxMDUwOTgsIDEwNTEwMiwgMTA1MTA2LCAxMDUxMTAsIDEwNTExNCwgMTA1MTE4LCAxMDUxMjIsIDEwNTEyNiwgCi0gICAgMTA1MTMwLCAxMDUxMzQsIDEwNTEzOCwgMTA1MTQyLCAxMDUxNDYsIDEwNTE1MCwgMTA1MTU0LCAxMDUxNTgsIDEwNTE2MiwgCi0gICAgMTA1MTY2LCAxMDUxNzAsIDEwNTE3NCwgMTA1MTc4LCAxMDUxODIsIDEwNTE4NiwgMTA1MTkwLCAxMDUxOTQsIDEwNTE5OCwgCi0gICAgMTA1MjAyLCAxMDUyMDYsIDEwNTIxMCwgMTA1MjE0LCAxMDUyMTgsIDEwNTIyMiwgMTA1MjI2LCAxMDUyMzAsIDEwNTIzNCwgCi0gICAgMTA1MjM4LCAxMDUyNDIsIDEwNTI0NiwgMTA1MjUwLCAxMDUyNTQsIDEwNTI1OCwgMTA1MjYyLCAxMDUyNjYsIDEwNTI3MCwgCi0gICAgMTA1Mjc0LCAxMDUyNzgsIDEwNTI4MiwgMTA1Mjg2LCAxMDUyOTAsIDEwNTI5NCwgMTA1Mjk4LCAxMDUzMDIsIDEwNTMwNiwgCi0gICAgMTA1MzEwLCAxMDUzMTQsIDEwNTMxOCwgMTA1MzIyLCAxMDUzMjYsIDEwNTMzMCwgMTA1MzM0LCAxMDUzMzgsIDEwNTM0MiwgCi0gICAgMTA1MzQ2LCAxMDUzNTAsIDEwNTM1NCwgMTA1MzU4LCAxMDUzNjIsIDEwNTM2NiwgMTA1MzcwLCAxMDUzNzQsIDEwNTM3OCwgCi0gICAgMTA1MzgyLCAxMDUzODYsIDEwNTM5MCwgMTA1Mzk0LCAxMDUzOTgsIDEwNTQwMiwgMTA1NDA2LCAxMDU0MTAsIDEwNTQxNCwgCi0gICAgMTA1NDE4LCAxMDU0MjIsIDEwNTQyNiwgMTA1NDMwLCAxMDU0MzQsIDEwNTQzOCwgMTA1NDQyLCAxMDU0NDYsIDEwNTQ1MCwgCi0gICAgMTA1NDU0LCAxMDU0NTgsIDEwNTQ2MiwgMTA1NDY2LCAxMDU0NzAsIDEwNTQ3NCwgMTA1NDc4LCAxMDU0ODIsIDEwNTQ4NiwgCi0gICAgMTA1NDkwLCAxMDU0OTQsIDEwNTQ5OCwgMTA1NTAyLCAxMDU1MDYsIDEwNTUxMCwgMTA1NTE0LCAxMDU1MTgsIDEwNTUyMiwgCi0gICAgMTA1NTI2LCAxMDU1MzAsIDEwNTUzNCwgMTA1NTM4LCAxMDU1NDIsIDEwNTU0NiwgMTA1NTUwLCAxMDU1NTQsIDEwNTU1OCwgCi0gICAgMTA1NTYyLCAxMDU1NjYsIDEwNTU3MCwgMTA1NTc0LCAxMDU1NzgsIDEwNTU4MiwgMTA1NTg2LCAxMDU1OTAsIDEwNTU5NCwgCi0gICAgMTA1NTk4LCAxMDU2MDIsIDEwNTYwNiwgMTA1NjEwLCAxMDU2MTQsIDEwNTYxOCwgMTA1NjIyLCAxMDU2MjYsIDEwNTYzMCwgCi0gICAgMTA1NjM0LCAxMDU2MzgsIDEwNTY0MiwgMTA1NjQ2LCAxMDU2NTAsIDEwNTY1NCwgMTA1NjU4LCAxMDU2NjIsIDEwNTY2NiwgCi0gICAgMTA1NjcwLCAxMDU2NzQsIDEwNTY3OCwgMTA1NjgyLCAxMDU2ODYsIDEwNTY5MCwgMTA1Njk0LCAxMDU2OTgsIDEwNTcwMiwgCi0gICAgMTA1NzA2LCAxMDU3MTAsIDEwNTcxNCwgMTA1NzE4LCAxMDU3MjIsIDEwNTcyNiwgMTA1NzMwLCAxMDU3MzQsIDEwNTczOCwgCi0gICAgMTA1NzQyLCAxMDU3NDYsIDEwNTc1MCwgMTA1NzU0LCAxMDU3NTgsIDEwNTc2MiwgMTA1NzY2LCAxMDU3NzAsIDEwNTc3NCwgCi0gICAgMTA1Nzc4LCAxMDU3ODIsIDEwNTc4NiwgMTA1NzkwLCAxMDU3OTQsIDEwNTc5OCwgMTA1ODAyLCAxMDU4MDYsIDEwNTgxMCwgCi0gICAgMTA1ODE0LCAxMDU4MTgsIDEwNTgyMiwgMTA1ODI2LCAxMDU4MzAsIDEwNTgzNCwgMTA1ODM4LCAxMDU4NDIsIDEwNTg0NiwgCi0gICAgMTA1ODUwLCAxMDU4NTQsIDEwNTg1OCwgMTA1ODYyLCAxMDU4NjYsIDEwNTg3MCwgMTA1ODc0LCAxMDU4NzgsIDEwNTg4MiwgCi0gICAgMTA1ODg2LCAxMDU4OTAsIDEwNTg5NCwgMTA1ODk4LCAxMDU5MDIsIDEwNTkwNiwgMTA1OTEwLCAxMDU5MTQsIDEwNTkxOCwgCi0gICAgMTA1OTIyLCAxMDU5MjYsIDEwNTkzMCwgMTA1OTM0LCAxMDU5MzgsIDEwNTk0MiwgMTA1OTQ2LCAxMDU5NTAsIDEwNTk1NCwgCi0gICAgMTA1OTU4LCAxMDU5NjIsIDEwNTk2NiwgMTA1OTcwLCAxMDU5NzQsIDEwNTk3OCwgMTA1OTgyLCAxMDU5ODYsIDEwNTk5MCwgCi0gICAgMTA1OTk0LCAxMDU5OTgsIDEwNjAwMiwgMTA2MDA2LCAxMDYwMTAsIDEwNjAxNCwgMTA2MDE4LCAxMDYwMjIsIDEwNjAyNiwgCi0gICAgMTA2MDMwLCAxMDYwMzQsIDEwNjAzOCwgMTA2MDQyLCAxMDYwNDYsIDEwNjA1MCwgMTA2MDU0LCAxMDYwNTgsIDEwNjA2MiwgCi0gICAgMTA2MDY2LCAxMDYwNzAsIDEwNjA3NCwgMTA2MDc4LCAxMDYwODIsIDEwNjA4NiwgMTA2MDkwLCAxMDYwOTQsIDEwNjA5OCwgCi0gICAgMTA2MTAyLCAxMDYxMDYsIDEwNjExMCwgMTA2MTE0LCAxMDYxMTgsIDEwNjEyMiwgMTA2MTI2LCAxMDYxMzAsIDEwNjEzNCwgCi0gICAgMTA2MTM4LCAxMDYxNDIsIDEwNjE0NiwgMTA2MTUwLCAxMDYxNTQsIDEwNjE1OCwgMTA2MTYyLCAxMDYxNjYsIDEwNjE3MCwgCi0gICAgMTA2MTc0LCAxMDYxNzgsIDEwNjE4MiwgMTA2MTg2LCAxMDYxOTAsIDEwNjE5NCwgMTA2MTk4LCAxMDYyMDIsIDEwNjIwNiwgCi0gICAgMTA2MjEwLCAxMDYyMTQsIDEwNjIxOCwgMTA2MjIyLCAxMDYyMjYsIDEwNjIzMCwgMTA2MjM0LCAxMDYyMzgsIDEwNjI0MiwgCi0gICAgMTA2MjQ2LCAxMDYyNTAsIDEwNjI1NCwgMTA2MjU4LCAxMDYyNjIsIDEwNjI2NiwgMTA2MjcwLCAxMDYyNzQsIDEwNjI3OCwgCi0gICAgMTA2MjgyLCAxMDYyODYsIDEwNjI5MCwgMTA2Mjk0LCAxMDYyOTgsIDEwNjMwMiwgMTA2MzA2LCAxMDYzMTAsIDEwNjMxNCwgCi0gICAgMTA2MzE4LCAxMDYzMjIsIDEwNjMyNiwgMTA2MzMwLCAxMDYzMzQsIDEwNjMzOCwgMTA2MzQyLCAxMDYzNDYsIDEwNjM1MCwgCi0gICAgMTA2MzU0LCAxMDYzNTgsIDEwNjM2MiwgMTA2MzY2LCAxMDYzNzAsIDEwNjM3NCwgMTA2Mzc4LCAxMDYzODIsIDEwNjM4NiwgCi0gICAgMTA2MzkwLCAxMDYzOTQsIDEwNjM5OCwgMTA2NDAyLCAxMDY0MDYsIDEwNjQxMCwgMTA2NDE0LCAxMDY0MTgsIDEwNjQyMiwgCi0gICAgMTA2NDI2LCAxMDY0MzAsIDEwNjQzNCwgMTA2NDM4LCAxMDY0NDIsIDEwNjQ0NiwgMTA2NDUwLCAxMDY0NTQsIDEwNjQ1OCwgCi0gICAgMTA2NDYyLCAxMDY0NjYsIDEwNjQ3MCwgMTA2NDc0LCAxMDY0NzgsIDEwNjQ4MiwgMTA2NDg2LCAxMDY0OTAsIDEwNjQ5NCwgCi0gICAgMTA2NDk4LCAxMDY1MDIsIDEwNjUwNiwgMTA2NTEwLCAxMDY1MTQsIDEwNjUxOCwgMTA2NTIyLCAxMDY1MjYsIDEwNjUzMCwgCi0gICAgMTA2NTM0LCAxMDY1MzgsIDEwNjU0MiwgMTA2NTQ2LCAxMDY1NTAsIDEwNjU1NCwgMTA2NTU4LCAxMDY1NjIsIDEwNjU2NiwgCi0gICAgMTA2NTcwLCAxMDY1NzQsIDEwNjU3OCwgMTA2NTgyLCAxMDY1ODYsIDEwNjU5MCwgMTA2NTk0LCAxMDY1OTgsIDEwNjYwMiwgCi0gICAgMTA2NjA2LCAxMDY2MTAsIDEwNjYxNCwgMTA2NjE4LCAxMDY2MjIsIDEwNjYyNiwgMTA2NjMwLCAxMDY2MzQsIDEwNjYzOCwgCi0gICAgMTA2NjQyLCAxMDY2NDYsIDEwNjY1MCwgMTA2NjU0LCAxMDY2NTgsIDEwNjY2MiwgMTA2NjY2LCAxMDY2NzAsIDEwNjY3NCwgCi0gICAgMTA2Njc4LCAxMDY2ODIsIDEwNjY4NiwgMTA2NjkwLCAxMDY2OTQsIDEwNjY5OCwgMTA2NzAyLCAxMDY3MDYsIDEwNjcxMCwgCi0gICAgMTA2NzE0LCAxMDY3MTgsIDEwNjcyMiwgMTA2NzI2LCAxMDY3MzAsIDEwNjczNCwgMTA2NzM4LCAxMDY3NDIsIDEwNjc0NiwgCi0gICAgMTA2NzUwLCAxMDY3NTQsIDEwNjc1OCwgMTA2NzYyLCAxMDY3NjYsIDEwNjc3MCwgMTA2Nzc0LCAxMDY3NzgsIDEwNjc4MiwgCi0gICAgMTA2Nzg2LCAxMDY3OTAsIDEwNjc5NCwgMTA2Nzk4LCAxMDY4MDIsIDEwNjgwNiwgMTA2ODEwLCAxMDY4MTQsIDEwNjgxOCwgCi0gICAgMTA2ODIyLCAxMDY4MjYsIDEwNjgzMCwgMTA2ODM0LCAxMDY4MzgsIDEwNjg0MiwgMTA2ODQ2LCAxMDY4NTAsIDEwNjg1NCwgCi0gICAgMTA2ODU4LCAxMDY4NjIsIDEwNjg2NiwgMTA2ODcwLCAxMDY4NzQsIDEwNjg3OCwgMTA2ODgyLCAxMDY4ODYsIDEwNjg5MCwgCi0gICAgMTA2ODk0LCAxMDY4OTgsIDEwNjkwMiwgMTA2OTA2LCAxMDY5MTAsIDEwNjkxNCwgMTA2OTE4LCAxMDY5MjIsIDEwNjkyNiwgCi0gICAgMTA2OTMwLCAxMDY5MzQsIDEwNjkzOCwgMTA2OTQyLCAxMDY5NDYsIDEwNjk1MCwgMTA2OTU0LCAxMDY5NTgsIDEwNjk2MiwgCi0gICAgMTA2OTY2LCAxMDY5NzAsIDEwNjk3NCwgMTA2OTc4LCAxMDY5ODIsIDEwNjk4NiwgMTA2OTkwLCAxMDY5OTQsIDEwNjk5OCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTA3MDAyLCAxMDcwMDksIDEwNzAxNiwgMTA3MDI1LCAxMDcwMzQsIAotICAgIDEwNzA0MSwgMTA3MDQ2LCAxMDcwNTMsIDEwNzA2MCwgMTA3MDY5LCAxMDcwODAsIDEwNzA5MSwgMTA3MDk2LCAxMDcxMDMsIAotICAgIDEwNzEwOCwgMTA3MTEzLCAxMDcxMTgsIDEwNzEyMywgMTA3MTI4LCAxMDcxMzMsIDEwNzEzOCwgMTA3MTQzLCAxMDcxNDgsIAotICAgIDEwNzE1MywgMTA3MTU4LCAxMDcxNjUsIDEwNzE3MiwgMTA3MTc3LCAxMDcxODIsIDEwNzE4NywgMTA3MTkyLCAxMDcxOTksIAotICAgIDEwNzIwNiwgMTA3MjE0LCAxMDcyMTksIDEwNzIyNiwgMTA3MjMxLCAxMDcyMzYsIDEwNzI0MSwgMTA3MjQ2LCAxMDcyNTEsIAotICAgIDEwNzI1OCwgMTA3MjY1LCAxMDcyNzAsIDEwNzI3NSwgMTA3MjgwLCAxMDcyODUsIDEwNzI5MCwgMTA3Mjk1LCAxMDczMDAsIAotICAgIDEwNzMwNSwgMTA3MzEwLCAxMDczMTUsIDEwNzMyMCwgMTA3MzI1LCAxMDczMzAsIDEwNzMzNSwgMTA3MzQwLCAxMDczNDUsIAotICAgIDEwNzM1MCwgMTA3MzU1LCAxMDczNjAsIDEwNzM2NywgMTA3MzcyLCAxMDczNzcsIDEwNzM4NiwgMTA3MzkzLCAxMDczOTgsIAotICAgIDEwNzQwMywgMTA3NDA4LCAxMDc0MTMsIDEwNzQxOCwgMTA3NDIzLCAxMDc0MjgsIDEwNzQzMywgMTA3NDM4LCAxMDc0NDMsIAotICAgIDEwNzQ0OCwgMTA3NDUzLCAxMDc0NTgsIDEwNzQ2MywgMTA3NDY4LCAxMDc0NzMsIDEwNzQ3OCwgMTA3NDgzLCAxMDc0ODgsIAotICAgIDEwNzQ5MywgMTA3NDk4LCAxMDc1MDQsIDEwNzUxMiwgMTA3NTE4LCAxMDc1MjYsIDEwNzUzNCwgMTA3NTQyLCAxMDc1NDgsIAotICAgIDEwNzU1NCwgMTA3NTYwLCAxMDc1NjYsIDEwNzU3MiwgMTA3NTgwLCAxMDc1OTAsIDEwNzU5OCwgMTA3NjA2LCAxMDc2MTIsIAotICAgIDEwNzYxOCwgMTA3NjI2LCAxMDc2MzQsIDEwNzY0MCwgMTA3NjQ4LCAxMDc2NTYsIDEwNzY2NCwgMTA3NjcwLCAxMDc2NzYsIAotICAgIDEwNzY4MiwgMTA3Njg4LCAxMDc2OTQsIDEwNzcwMCwgMTA3NzA4LCAxMDc3MTYsIDEwNzcyMiwgMTA3NzI4LCAxMDc3MzQsIAotICAgIDEwNzc0MCwgMTA3NzQ2LCAxMDc3NTQsIDEwNzc2MCwgMTA3NzY2LCAxMDc3NzIsIDEwNzc3OCwgMTA3Nzg0LCAxMDc3OTAsIAotICAgIDEwNzc5OCwgMTA3ODA0LCAxMDc4MTAsIDEwNzgxNiwgMTA3ODIyLCAxMDc4MzAsIDEwNzgzOCwgMTA3ODQ0LCAxMDc4NTAsIAotICAgIDEwNzg1NiwgMTA3ODYxLCAxMDc4NjcsIDEwNzg3MywgMTA3ODgwLCAxMDc4ODUsIDEwNzg5MCwgMTA3ODk1LCAxMDc5MDAsIAotICAgIDEwNzkwNSwgMTA3OTEwLCAxMDc5MTUsIDEwNzkyMCwgMTA3OTI1LCAxMDc5MzQsIDEwNzk0MSwgMTA3OTQ2LCAxMDc5NTEsIAotICAgIDEwNzk1NiwgMTA3OTYzLCAxMDc5NjgsIDEwNzk3MywgMTA3OTc4LCAxMDc5ODUsIDEwNzk5MCwgMTA3OTk1LCAxMDgwMDAsIAotICAgIDEwODAwNSwgMTA4MDEwLCAxMDgwMTUsIDEwODAyMCwgMTA4MDI1LCAxMDgwMzAsIDEwODAzNSwgMTA4MDQwLCAxMDgwNDcsIAotICAgIDEwODA1MiwgMTA4MDU5LCAxMDgwNjQsIDEwODA2OSwgMTA4MDc2LCAxMDgwODEsIDEwODA4NiwgMTA4MDkxLCAxMDgwOTYsIAotICAgIDEwODEwMSwgMTA4MTA2LCAxMDgxMTEsIDEwODExNiwgMTA4MTIxLCAxMDgxMjYsIDEwODEzMSwgMTA4MTM2LCAxMDgxNDEsIAotICAgIDEwODE0NiwgMTA4MTUxLCAxMDgxNTYsIDEwODE2MSwgMTA4MTY2LCAxMDgxNzEsIDEwODE3OCwgMTA4MTgzLCAxMDgxODgsIAotICAgIDEwODE5MywgMTA4MTk4LCAxMDgyMDMsIDEwODIwOCwgMTA4MjEzLCAxMDgyMTgsIDEwODIyMywgMTA4MjI4LCAxMDgyMzMsIAotICAgIDEwODIzOCwgMTA4MjQzLCAxMDgyNTAsIDEwODI1NSwgMTA4MjYwLCAxMDgyNjcsIDEwODI3MiwgMTA4Mjc3LCAxMDgyODIsIAotICAgIDEwODI4NywgMTA4MjkyLCAxMDgyOTcsIDEwODMwMiwgMTA4MzA3LCAxMDgzMTIsIDEwODMxNywgMTA4MzI0LCAxMDgzMjksIAotICAgIDEwODMzNCwgMTA4MzM5LCAxMDgzNDQsIDEwODM0OSwgMTA4MzU2LCAxMDgzNjMsIDEwODM2OCwgMTA4MzczLCAxMDgzNzgsIAotICAgIDEwODM4MywgMTA4Mzg4LCAxMDgzOTMsIDEwODM5OCwgMTA4NDAzLCAxMDg0MDgsIDEwODQxMywgMTA4NDE4LCAxMDg0MjMsIAotICAgIDEwODQyOCwgMTA4NDMzLCAxMDg0MzgsIDEwODQ0MywgMTA4NDQ4LCAxMDg0NTMsIDEwODQ1OCwgMTA4NDYzLCAxMDg0NjgsIAotICAgIDEwODQ3MywgMTA4NDc4LCAxMDg0ODMsIDEwODQ4OCwgMTA4NDkzLCAxMDg0OTgsIDEwODUwMywgMTA4NTA4LCAxMDg1MTMsIAotICAgIDEwODUxOCwgMTA4NTIzLCAxMDg1MjgsIDEwODUzMywgMTA4NTM4LCAxMDg1NDMsIDEwODU1MCwgMTA4NTU1LCAxMDg1NjAsIAotICAgIDEwODU2NSwgMTA4NTcwLCAxMDg1NzUsIDEwODU4MCwgMTA4NTg1LCAxMDg1OTAsIDEwODU5NSwgMTA4NjAwLCAxMDg2MDUsIAotICAgIDEwODYxMCwgMTA4NjE1LCAxMDg2MjAsIDEwODYyNSwgMTA4NjMwLCAxMDg2MzUsIDEwODY0MCwgMTA4NjQ1LCAxMDg2NTAsIAotICAgIDEwODY1NSwgMTA4NjYwLCAxMDg2NjUsIDEwODY3MCwgMTA4Njc1LCAxMDg2ODAsIDEwODY4NSwgMTA4NjkwLCAxMDg2OTUsIAotICAgIDEwODcwMCwgMTA4NzA1LCAxMDg3MTAsIDEwODcxNSwgMTA4NzIwLCAxMDg3MjUsIDEwODczMCwgMTA4NzM1LCAxMDg3NDAsIAotICAgIDEwODc0NSwgMTA4NzUwLCAxMDg3NTUsIDEwODc2MCwgMTA4NzY1LCAxMDg3NzAsIDEwODc3NSwgMTA4NzgwLCAxMDg3ODUsIAotICAgIDEwODc5MCwgMTA4Nzk1LCAxMDg4MDAsIDEwODgwNSwgMTA4ODEwLCAxMDg4MTUsIDEwODgyMCwgMTA4ODI1LCAxMDg4MzAsIAotICAgIDEwODgzNSwgMTA4ODQwLCAxMDg4NDcsIDEwODg1MiwgMTA4ODU3LCAxMDg4NjIsIDEwODg2NywgMTA4ODcyLCAxMDg4NzcsIAotICAgIDEwODg4MSwgMTA4ODg2LCAxMDg4OTEsIDEwODg5NiwgMTA4OTAxLCAxMDg5MDYsIDEwODkxMSwgMTA4OTE2LCAxMDg5MjEsIAotICAgIDEwODkyNiwgMTA4OTMxLCAxMDg5MzYsIDEwODk0MSwgMTA4OTQ2LCAxMDg5NTEsIDEwODk1OCwgMTA4OTYzLCAxMDg5NjgsIAotICAgIDEwODk3NCwgMTA4OTc5LCAxMDg5ODQsIDEwODk4OSwgMTA4OTk0LCAxMDg5OTksIDEwOTAwNCwgMTA5MDA5LCAxMDkwMTQsIAotICAgIDEwOTAxOSwgMTA5MDI0LCAxMDkwMjksIDEwOTAzNCwgMTA5MDM5LCAxMDkwNDQsIDEwOTA0OSwgMTA5MDU0LCAxMDkwNTksIAotICAgIDEwOTA2NCwgMTA5MDY5LCAxMDkwNzQsIDEwOTA3OSwgMTA5MDg0LCAxMDkwODksIDEwOTA5NCwgMTA5MDk5LCAxMDkxMDQsIAotICAgIDEwOTEwOSwgMTA5MTE0LCAxMDkxMTksIDEwOTEyNCwgMTA5MTI5LCAxMDkxMzQsIDEwOTEzOSwgMTA5MTQ0LCAxMDkxNDksIAotICAgIDEwOTE1NCwgMTA5MTU5LCAxMDkxNjQsIDEwOTE2OSwgMTA5MTc0LCAxMDkxNzksIDEwOTE4NCwgMTA5MTg5LCAxMDkxOTYsIAotICAgIDEwOTIwMSwgMTA5MjA2LCAxMDkyMTMsIDEwOTIyMCwgMTA5MjI1LCAxMDkyMzAsIDEwOTIzNSwgMTA5MjQwLCAxMDkyNDUsIAotICAgIDEwOTI1MCwgMTA5MjU1LCAxMDkyNjAsIDEwOTI2NSwgMTA5MjcwLCAxMDkyNzUsIDEwOTI4MCwgMTA5Mjg1LCAxMDkyOTAsIAotICAgIDEwOTI5NSwgMTA5MzAwLCAxMDkzMDUsIDEwOTMxMCwgMTA5MzE1LCAxMDkzMjAsIDEwOTMyNSwgMTA5MzMwLCAxMDkzMzUsIAotICAgIDEwOTM0MCwgMTA5MzQ1LCAxMDkzNTIsIDEwOTM1NywgMTA5MzYyLCAxMDkzNjcsIDEwOTM3MiwgMTA5Mzc3LCAxMDkzODIsIAotICAgIDEwOTM4NywgMTA5MzkyLCAxMDkzOTcsIDEwOTQwMiwgMTA5NDA3LCAxMDk0MTIsIDEwOTQxNywgMTA5NDIyLCAxMDk0MjcsIAotICAgIDEwOTQzMiwgMTA5NDM3LCAxMDk0NDIsIDEwOTQ0OSwgMTA5NDU0LCAxMDk0NTksIDEwOTQ2NCwgMTA5NDY5LCAxMDk0NzQsIAotICAgIDEwOTQ3OSwgMTA5NDg0LCAxMDk0OTAsIDEwOTQ5NSwgMTA5NTAwLCAxMDk1MDUsIDEwOTUxMCwgMTA5NTE1LCAxMDk1MjAsIAotICAgIDEwOTUyNSwgMTA5NTMwLCAxMDk1MzcsIDEwOTU0NCwgMTA5NTQ5LCAxMDk1NTQsIDEwOTU1OCwgMTA5NTYzLCAxMDk1NjcsIAotICAgIDEwOTU3MSwgMTA5NTc2LCAxMDk1ODMsIDEwOTU4OCwgMTA5NTkzLCAxMDk2MDIsIDEwOTYwNywgMTA5NjEyLCAxMDk2MTcsIAotICAgIDEwOTYyMiwgMTA5NjI5LCAxMDk2MzYsIDEwOTY0MSwgMTA5NjQ2LCAxMDk2NTEsIDEwOTY1NiwgMTA5NjYzLCAxMDk2NjgsIAotICAgIDEwOTY3MywgMTA5Njc4LCAxMDk2ODMsIDEwOTY4OCwgMTA5NjkzLCAxMDk2OTgsIDEwOTcwMywgMTA5NzA4LCAxMDk3MTMsIAotICAgIDEwOTcxOCwgMTA5NzIzLCAxMDk3MzAsIDEwOTczNCwgMTA5NzM5LCAxMDk3NDQsIDEwOTc0OSwgMTA5NzU0LCAxMDk3NTgsIAotICAgIDEwOTc2MywgMTA5NzY4LCAxMDk3NzMsIDEwOTc3OCwgMTA5NzgzLCAxMDk3ODgsIDEwOTc5MywgMTA5Nzk4LCAxMDk4MDMsIAotICAgIDEwOTgwOSwgMTA5ODE1LCAxMDk4MjEsIDEwOTgyNywgMTA5ODMzLCAxMDk4MzksIDEwOTg0NSwgMTA5ODUxLCAxMDk4NTcsIAotICAgIDEwOTg2MywgMTA5ODY5LCAxMDk4NzUsIDEwOTg4MCwgMTA5ODg2LCAxMDk4OTIsIDEwOTg5OCwgMTA5OTA0LCAxMDk5MTAsIAotICAgIDEwOTkxNiwgMTA5OTIyLCAxMDk5MjgsIDEwOTkzNCwgMTA5OTQwLCAxMDk5NDYsIDEwOTk1MSwgMTA5OTU3LCAxMDk5NjMsIAotICAgIDEwOTk2OSwgMTA5OTc1LCAxMDk5ODEsIDEwOTk4NywgMTA5OTkzLCAxMDk5OTksIDExMDAwNSwgMTEwMDExLCAxMTAwMTcsIAotICAgIDExMDAyMywgMTEwMDI5LCAxMTAwMzUsIDExMDA0MSwgMTEwMDQ3LCAxMTAwNTMsIDExMDA1OSwgMTEwMDY1LCAxMTAwNzEsIAotICAgIDExMDA3NiwgMTEwMDgyLCAxMTAwODgsIDExMDA5NCwgMTEwMTAwLCAxMTAxMDYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExMDExMiwgMTEwMTE1LCAxMTAxMTksIAotICAgIDExMDEyMywgMTEwMTI3LCAxMTAxMzAsIDExMDEzNCwgMTEwMTM5LCAxMTAxNDMsIDExMDE0NywgMTEwMTUxLCAxMTAxNTUsIAotICAgIDExMDE1OSwgMTEwMTY0LCAxMTAxNjksIDExMDE3MywgMTEwMTc3LCAxMTAxODAsIDExMDE4NCwgMTEwMTg5LCAxMTAxOTQsIAotICAgIDExMDE5OCwgMTEwMjAyLCAxMTAyMDYsIDExMDIxMCwgMTEwMjE0LCAxMTAyMTgsIDExMDIyMiwgMTEwMjI2LCAxMTAyMzAsIAotICAgIDExMDIzNCwgMTEwMjM3LCAxMTAyNDEsIDExMDI0NSwgMTEwMjQ5LCAxMTAyNTMsIDExMDI1NywgMTEwMjYxLCAxMTAyNjcsIAotICAgIDExMDI3MCwgMTEwMjc0LCAxMTAyNzgsIDExMDI4MiwgMTEwMjg2LCAxMTAyOTAsIDExMDI5NCwgMTEwMjk4LCAxMTAzMDIsIAotICAgIDExMDMwNiwgMTEwMzExLCAxMTAzMTYsIDExMDMyMiwgMTEwMzI2LCAxMTAzMzAsIDExMDMzNCwgMTEwMzM4LCAxMTAzNDIsIAotICAgIDExMDM0NiwgMTEwMzUxLCAxMTAzNTQsIDExMDM1OCwgMTEwMzYyLCAxMTAzNjYsIDExMDM3MCwgMTEwMzc2LCAxMTAzODAsIAotICAgIDExMDM4NCwgMTEwMzg4LCAxMTAzOTIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExMDM5NiwgMTEwNDAwLCAKLSAgICAxMTA0MDQsIDExMDQxMCwgMTEwNDE2LCAxMTA0MjAsIDExMDQyNSwgMTEwNDMwLCAxMTA0MzUsIDExMDQ0MCwgMTEwNDQ0LCAKLSAgICAxMTA0NDksIDExMDQ1NCwgMTEwNDU5LCAxMTA0NjMsIDExMDQ2OCwgMTEwNDczLCAxMTA0NzgsIDExMDQ4MiwgMTEwNDg3LCAKLSAgICAxMTA0OTIsIDExMDQ5NywgMTEwNTAyLCAxMTA1MDcsIDExMDUxMiwgMTEwNTE3LCAxMTA1MjIsIDExMDUyNiwgMTEwNTMxLCAKLSAgICAxMTA1MzYsIDExMDU0MSwgMTEwNTQ2LCAxMTA1NTEsIDExMDU1NiwgMTEwNTYxLCAxMTA1NjYsIDExMDU3MSwgMTEwNTc2LCAKLSAgICAxMTA1ODEsIDExMDU4OCwgMTEwNTkzLCAxMTA2MDAsIDExMDYwNSwgMTEwNjEwLCAxMTA2MTUsIDExMDYyMCwgMTEwNjI1LCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTA2MzAsIDExMDYzNCwgMTEwNjQwLCAKLSAgICAxMTA2NDMsIDExMDY0NiwgMTEwNjUwLCAxMTA2NTQsIDExMDY1OCwgMTEwNjYyLCAxMTA2NjYsIDExMDY3MCwgMTEwNjc0LCAKLSAgICAxMTA2ODAsIDExMDY4NiwgMTEwNjkyLCAxMTA2OTgsIDExMDcwNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTEwNzEwLCAxMTA3MTUsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDExMDcyMSwgMTEwNzI2LCAxMTA3MzEsIDExMDczNiwgMTEwNzQzLCAxMTA3NTAsIDExMDc1NywgMTEwNzY0LCAxMTA3NjksIAotICAgIDExMDc3NCwgMTEwNzc5LCAxMTA3ODQsIDExMDc5MSwgMTEwNzk2LCAxMTA4MDMsIDExMDgxMCwgMTEwODE1LCAxMTA4MjAsIAotICAgIDExMDgyNSwgMTEwODMyLCAxMTA4MzcsIDExMDg0MiwgMTEwODQ5LCAxMTA4NTYsIDExMDg2MSwgMTEwODY2LCAxMTA4NzEsIAotICAgIDExMDg3OCwgMTEwODg1LCAxMTA4OTIsIDExMDg5NywgMTEwOTAyLCAxMTA5MDksIDExMDkxNiwgMTEwOTIzLCAxMTA5MzAsIAotICAgIDExMDkzNSwgMTEwOTQwLCAxMTA5NDUsIDExMDk1MiwgMTEwOTU3LCAxMTA5NjIsIDExMDk2NywgMTEwOTc0LCAxMTA5ODMsIAotICAgIDExMDk5MCwgMTEwOTk1LCAxMTEwMDAsIDExMTAwNSwgMTExMDEwLCAxMTEwMTUsIDExMTAyMCwgMTExMDI5LCAxMTEwMzYsIAotICAgIDExMTA0MSwgMTExMDQ4LCAxMTEwNTUsIDExMTA2MCwgMTExMDY1LCAxMTEwNzAsIDExMTA3NywgMTExMDgyLCAxMTEwODksIAotICAgIDExMTA5NiwgMTExMTAxLCAxMTExMDYsIDExMTExMSwgMTExMTE4LCAxMTExMjUsIDExMTEzMCwgMTExMTM1LCAxMTExNDIsIAotICAgIDExMTE0OSwgMTExMTU2LCAxMTExNjEsIDExMTE2NiwgMTExMTcxLCAxMTExNzYsIDExMTE4MywgMTExMTkyLCAxMTEyMDEsIAotICAgIDExMTIwNiwgMTExMjEzLCAxMTEyMjIsIDExMTIyNywgMTExMjMyLCAxMTEyMzcsIDExMTI0MiwgMTExMjQ5LCAxMTEyNTYsIAotICAgIDExMTI2MywgMTExMjcwLCAxMTEyNzUsIDExMTI4MCwgMTExMjg1LCAxMTEyOTIsIDExMTI5OSwgMTExMzA2LCAxMTEzMTEsIAotICAgIDExMTMxNiwgMTExMzIzLCAxMTEzMjgsIDExMTMzNSwgMTExMzQwLCAxMTEzNDcsIDExMTM1MiwgMTExMzU5LCAxMTEzNjYsIAotICAgIDExMTM3MSwgMTExMzc2LCAxMTEzODEsIDExMTM4NiwgMTExMzkxLCAxMTEzOTYsIDExMTQwMSwgMTExNDA2LCAxMTE0MTEsIAotICAgIDExMTQxOCwgMTExNDI1LCAxMTE0MzIsIDExMTQzOSwgMTExNDQ2LCAxMTE0NTUsIDExMTQ2MCwgMTExNDY1LCAxMTE0NzIsIAotICAgIDExMTQ3OSwgMTExNDg0LCAxMTE0OTEsIDExMTQ5OCwgMTExNTA1LCAxMTE1MTIsIDExMTUxOSwgMTExNTI2LCAxMTE1MzEsIAotICAgIDExMTUzNiwgMTExNTQxLCAxMTE1NDYsIDExMTU1MSwgMTExNTYwLCAxMTE1NjksIDExMTU3OCwgMTExNTg3LCAxMTE1OTYsIAotICAgIDExMTYwNSwgMTExNjE0LCAxMTE2MjMsIDExMTYyOCwgMTExNjM5LCAxMTE2NTAsIDExMTY1OSwgMTExNjY0LCAxMTE2NjksIAotICAgIDExMTY3NCwgMTExNjc5LCAxMTE2ODgsIDExMTY5NSwgMTExNzAyLCAxMTE3MDksIDExMTcxNiwgMTExNzIzLCAxMTE3MzAsIAotICAgIDExMTczOSwgMTExNzQ4LCAxMTE3NTksIDExMTc2OCwgMTExNzc5LCAxMTE3ODgsIDExMTc5NSwgMTExODA0LCAxMTE4MTUsIAotICAgIDExMTgyNCwgMTExODMzLCAxMTE4NDIsIDExMTg1MSwgMTExODU4LCAxMTE4NjUsIDExMTg3MiwgMTExODgxLCAxMTE4OTAsIAotICAgIDExMTkwMSwgMTExOTEwLCAxMTE5MTksIDExMTkzMCwgMTExOTM1LCAxMTE5NDAsIDExMTk1MSwgMTExOTU5LCAxMTE5NjgsIAotICAgIDExMTk3NywgMTExOTg2LCAxMTE5OTcsIDExMjAwNiwgMTEyMDE1LCAxMTIwMjYsIDExMjAzNywgMTEyMDQ4LCAxMTIwNTksIAotICAgIDExMjA3MCwgMTEyMDgxLCAxMTIwODgsIDExMjA5NSwgMTEyMTAyLCAxMTIxMDksIDExMjEyMCwgMTEyMTI5LCAxMTIxMzYsIAotICAgIDExMjE0MywgMTEyMTUwLCAxMTIxNjEsIDExMjE3MiwgMTEyMTgzLCAxMTIxOTQsIDExMjIwNSwgMTEyMjE2LCAxMTIyMjcsIAotICAgIDExMjIzOCwgMTEyMjQ1LCAxMTIyNTIsIDExMjI2MSwgMTEyMjcwLCAxMTIyNzcsIDExMjI4NCwgMTEyMjkxLCAxMTIzMDAsIAotICAgIDExMjMwOSwgMTEyMzE4LCAxMTIzMjUsIDExMjMzNCwgMTEyMzQzLCAxMTIzNTIsIDExMjM1OSwgMTEyMzY2LCAxMTIzNzEsIAotICAgIDExMjM3NywgMTEyMzg0LCAxMTIzOTEsIDExMjM5OCwgMTEyNDA1LCAxMTI0MTIsIDExMjQxOSwgMTEyNDI4LCAxMTI0MzcsIAotICAgIDExMjQ0NiwgMTEyNDU1LCAxMTI0NjIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExMjQ3MSwgMTEyNDc3LCAKLSAgICAxMTI0ODIsIDExMjQ4NywgMTEyNDk0LCAxMTI1MDAsIDExMjUwNiwgMTEyNTEyLCAxMTI1MTgsIDExMjUyNCwgMTEyNTMwLCAKLSAgICAxMTI1MzYsIDExMjU0MCwgMTEyNTQ0LCAxMTI1NTAsIDExMjU1NiwgMTEyNTYyLCAxMTI1NjYsIDExMjU3MSwgMTEyNTc2LCAKLSAgICAxMTI1ODAsIDExMjU4NCwgMTEyNTg3LCAxMTI1OTMsIDExMjU5OSwgMTEyNjA1LCAxMTI2MTEsIDExMjYxNywgMTEyNjIzLCAKLSAgICAxMTI2MjksIDExMjYzNSwgMTEyNjQxLCAxMTI2NTEsIDExMjY2MSwgMTEyNjY3LCAxMTI2NzMsIDExMjY4MywgMTEyNjkzLCAKLSAgICAxMTI2OTksIDAsIDAsIDExMjcwNSwgMTEyNzEzLCAxMTI3MTgsIDExMjcyMywgMTEyNzI5LCAxMTI3MzUsIDExMjc0MSwgCi0gICAgMTEyNzQ3LCAxMTI3NTMsIDExMjc1OSwgMTEyNzY2LCAxMTI3NzMsIDExMjc3OSwgMTEyNzg1LCAxMTI3OTEsIDExMjc5NywgCi0gICAgMTEyODAzLCAxMTI4MDksIDExMjgxNSwgMTEyODIxLCAxMTI4MjYsIDExMjgzMiwgMTEyODM4LCAxMTI4NDQsIDExMjg1MCwgCi0gICAgMTEyODU2LCAxMTI4NjUsIDExMjg3MSwgMTEyODc2LCAxMTI4ODQsIDExMjg5MSwgMTEyODk4LCAxMTI5MDcsIDExMjkxNiwgCi0gICAgMTEyOTI1LCAxMTI5MzQsIDExMjk0MywgMTEyOTUyLCAxMTI5NjEsIDExMjk3MCwgMTEyOTgwLCAxMTI5OTAsIDExMjk5OCwgCi0gICAgMTEzMDA2LCAxMTMwMTUsIDExMzAyNCwgMTEzMDMwLCAxMTMwMzYsIDExMzA0MiwgMTEzMDQ4LCAxMTMwNTYsIDExMzA2NCwgCi0gICAgMTEzMDY4LCAxMTMwNzQsIDExMzA3OSwgMTEzMDg1LCAxMTMwOTEsIDExMzA5NywgMTEzMTAzLCAxMTMxMDksIDExMzExOCwgCi0gICAgMTEzMTIzLCAxMTMxMzAsIDExMzEzNSwgMTEzMTQwLCAxMTMxNDUsIDExMzE1MSwgMTEzMTU3LCAxMTMxNjMsIDExMzE3MCwgCi0gICAgMTEzMTc1LCAxMTMxODAsIDExMzE4NSwgMTEzMTkwLCAxMTMxOTUsIDExMzIwMSwgMTEzMjA3LCAxMTMyMTMsIDExMzIxOSwgCi0gICAgMTEzMjI1LCAxMTMyMzEsIDExMzIzNywgMTEzMjQzLCAxMTMyNDgsIDExMzI1MywgMTEzMjU4LCAxMTMyNjMsIDExMzI2OCwgCi0gICAgMTEzMjczLCAxMTMyNzgsIDExMzI4MywgMTEzMjg5LCAxMTMyOTUsIDExMzMwMCwgMTEzMzA1LCAxMTMzMTAsIDExMzMxNSwgCi0gICAgMTEzMzIwLCAxMTMzMjYsIDExMzMzMywgMTEzMzM3LCAxMTMzNDEsIDExMzM0NSwgMTEzMzQ5LCAxMTMzNTMsIDExMzM1NywgCi0gICAgMTEzMzYxLCAxMTMzNjUsIDExMzM3MywgMTEzMzgzLCAxMTMzODcsIDExMzM5MSwgMTEzMzk3LCAxMTM0MDMsIDExMzQwOSwgCi0gICAgMTEzNDE1LCAxMTM0MjEsIDExMzQyNywgMTEzNDMzLCAxMTM0MzksIDExMzQ0NSwgMTEzNDUxLCAxMTM0NTcsIDExMzQ2MywgCi0gICAgMTEzNDY5LCAxMTM0NzUsIDExMzQ3OSwgMTEzNDgzLCAxMTM0OTAsIDExMzQ5NiwgMTEzNTAyLCAxMTM1MDgsIDExMzUxMywgCi0gICAgMTEzNTIwLCAxMTM1MjUsIDExMzUzMSwgMTEzNTM3LCAxMTM1NDMsIDExMzU0OSwgMTEzNTU0LCAxMTM1NTgsIDExMzU2NCwgCi0gICAgMTEzNTY4LCAxMTM1NzIsIDExMzU3NiwgMTEzNTgyLCAxMTM1ODgsIDExMzU5MiwgMTEzNTk4LCAxMTM2MDQsIDExMzYxMCwgCi0gICAgMTEzNjE2LCAxMTM2MjIsIDExMzYzMCwgMTEzNjM4LCAxMTM2NDQsIDExMzY1MCwgMTEzNjU2LCAxMTM2NjIsIDExMzY3NCwgCi0gICAgMTEzNjg2LCAxMTM3MDAsIDExMzcxMiwgMTEzNzI0LCAxMTM3MzgsIDExMzc1MiwgMTEzNzY2LCAxMTM3NzAsIDExMzc3OCwgCi0gICAgMTEzNzg2LCAxMTM3OTEsIDExMzc5NSwgMTEzNzk5LCAxMTM4MDMsIDExMzgwNywgMTEzODExLCAxMTM4MTUsIDExMzgxOSwgCi0gICAgMTEzODI1LCAxMTM4MzEsIDExMzgzNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTEzODQzLCAxMTM4NDksIAotICAgIDExMzg1NSwgMTEzODYxLCAxMTM4NjcsIDExMzg3MywgMTEzODc5LCAxMTM4ODUsIDExMzg5MSwgMTEzODk3LCAxMTM5MDMsIAotICAgIDExMzkwOSwgMTEzOTE1LCAxMTM5MjEsIDExMzkyNywgMTEzOTMzLCAxMTM5MzksIDExMzk0NSwgMTEzOTUxLCAxMTM5NTcsIAotICAgIDExMzk2MywgMTEzOTY5LCAxMTM5NzUsIDExMzk4MSwgMTEzOTg3LCAxMTM5OTMsIDExMzk5OSwgMTE0MDA1LCAxMTQwMTEsIAotICAgIDExNDAxNywgMTE0MDIzLCAxMTQwMjksIDExNDAzNSwgMTE0MDQxLCAxMTQwNDcsIDExNDA1MywgMTE0MDU5LCAxMTQwNjUsIAotICAgIDExNDA3MSwgMTE0MDc3LCAxMTQwODMsIDExNDA4OSwgMTE0MDk1LCAxMTQxMDEsIDExNDEwNywgMTE0MTEzLCAxMTQxMTksIAotICAgIDExNDEyNSwgMTE0MTMxLCAxMTQxMzcsIDExNDE0MywgMTE0MTQ5LCAxMTQxNTUsIDExNDE2MSwgMTE0MTY3LCAxMTQxNzMsIAotICAgIDExNDE3OSwgMTE0MTg1LCAxMTQxOTEsIDExNDE5NywgMTE0MjAzLCAxMTQyMDksIDExNDIxNSwgMTE0MjIxLCAxMTQyMjcsIAotICAgIDExNDIzMywgMTE0MjM5LCAxMTQyNDQsIDExNDI0OSwgMTE0MjU0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5MTc5MiwgOTE3OTgsIDkxODA0LCA5MTgxMCwgOTE4MTYsIDkxODIyLCA5MTgyOSwgCisgICAgOTE4MzYsIDkxODQzLCA5MTg0OSwgOTE4NTUsIDkxODYxLCA5MTg2OCwgOTE4NzUsIDkxODgyLCA5MTg4OCwgOTE4OTUsIAorICAgIDkxOTAyLCA5MTkwOSwgOTE5MTYsIDkxOTIyLCA5MTkyOSwgOTE5MzYsIDkxOTQyLCA5MTk0OSwgOTE5NTYsIDkxOTYzLCAKKyAgICA5MTk3MCwgOTE5NzcsIDkxOTgzLCA5MTk5MCwgOTE5OTcsIDkyMDA0LCA5MjAxMCwgOTIwMTYsIDkyMDIyLCA5MjAyOCwgCisgICAgOTIwMzQsIDkyMDQxLCA5MjA0OCwgOTIwNTQsIDkyMDYwLCA5MjA2NiwgOTIwNzMsIDkyMDc5LCA5MjA4NiwgOTIwOTMsIAorICAgIDkyMTAwLCA5MjEwNiwgOTIxMTQsIDkyMTIxLCA5MjEyNywgOTIxMzQsIDkyMTQxLCA5MjE0OCwgOTIxNTQsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDkyMTYxLCA5MjE2OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMTE0MjU4LCAxMTQyNjMsIDExNDI3MCwgMTE0Mjc3LCAxMTQyODQsIDExNDI5MSwgMTE0Mjk2LCAxMTQzMDAsIDExNDMwNiwgCi0gICAgMTE0MzEwLCAxMTQzMTQsIDExNDMyMCwgMTE0MzI0LCAxMTQzMjgsIDExNDMzMiwgMTE0MzM4LCAxMTQzNDUsIDExNDM0OSwgCi0gICAgMTE0MzUzLCAxMTQzNTcsIDExNDM2MSwgMTE0MzY1LCAxMTQzNjksIDExNDM3NSwgMTE0Mzc5LCAxMTQzODMsIDExNDM4NywgCi0gICAgMTE0MzkxLCAxMTQzOTUsIDExNDM5OSwgMTE0NDAzLCAxMTQ0MDcsIDExNDQxMSwgMTE0NDE1LCAxMTQ0MTksIDExNDQyMywgCi0gICAgMTE0NDI4LCAxMTQ0MzIsIDExNDQzNiwgMTE0NDQwLCAxMTQ0NDQsIDExNDQ0OCwgMTE0NDUyLCAxMTQ0NTYsIDExNDQ2MCwgCi0gICAgMTE0NDY0LCAxMTQ0NzEsIDExNDQ3NSwgMTE0NDgzLCAxMTQ0ODcsIDExNDQ5MSwgMTE0NDk1LCAxMTQ0OTksIDExNDUwMywgCi0gICAgMTE0NTA3LCAxMTQ1MTEsIDExNDUxOCwgMTE0NTIyLCAxMTQ1MjYsIDExNDUzMCwgMTE0NTM0LCAxMTQ1MzgsIDExNDU0NCwgCi0gICAgMTE0NTQ4LCAxMTQ1NTQsIDExNDU1OCwgMTE0NTYyLCAxMTQ1NjYsIDExNDU3MCwgMTE0NTc0LCAxMTQ1NzgsIDExNDU4MiwgCi0gICAgMTE0NTg2LCAxMTQ1OTAsIDExNDU5NCwgMTE0NTk4LCAxMTQ2MDIsIDExNDYwNiwgMTE0NjEwLCAxMTQ2MTQsIDExNDYxOCwgCi0gICAgMTE0NjIyLCAxMTQ2MjYsIDExNDYzMCwgMTE0NjM4LCAxMTQ2NDIsIDExNDY0NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMTE0NjUwLCAxMTQ2NTgsIDExNDY2NiwgMTE0Njc0LCAxMTQ2ODIsIDExNDY5MCwgMTE0Njk4LCAxMTQ3MDYsIAotICAgIDExNDcxNCwgMTE0NzIyLCAxMTQ3MzAsIDExNDczOCwgMTE0NzQ2LCAxMTQ3NTQsIDExNDc2MiwgMTE0NzcwLCAxMTQ3NzgsIAotICAgIDExNDc4NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTE0Nzk0LCAxMTQ3OTgsIDExNDgwMywgCi0gICAgMTE0ODA4LCAxMTQ4MTMsIDExNDgxNywgMTE0ODIyLCAxMTQ4MjcsIDExNDgzMiwgMTE0ODM2LCAxMTQ4NDEsIDExNDg0NiwgCi0gICAgMTE0ODUwLCAxMTQ4NTQsIDExNDg1OSwgMTE0ODYzLCAxMTQ4NjgsIDExNDg3MywgMTE0ODc3LCAxMTQ4ODIsIDExNDg4NywgCi0gICAgMTE0ODkxLCAxMTQ4OTYsIDExNDkwMSwgMTE0OTA2LCAxMTQ5MTEsIDExNDkxNiwgMTE0OTIwLCAxMTQ5MjUsIDExNDkzMCwgCi0gICAgMTE0OTM1LCAxMTQ5MzksIDExNDk0NCwgMTE0OTQ5LCAxMTQ5NTQsIDExNDk1OCwgMTE0OTYzLCAxMTQ5NjgsIDExNDk3MiwgCi0gICAgMTE0OTc2LCAxMTQ5ODEsIDExNDk4NSwgMTE0OTkwLCAxMTQ5OTUsIDExNDk5OSwgMTE1MDA0LCAxMTUwMDksIDExNTAxMywgCi0gICAgMTE1MDE4LCAxMTUwMjMsIDExNTAyOCwgMTE1MDMzLCAxMTUwMzgsIDExNTA0MiwgMTE1MDQ3LCAxMTUwNTIsIDExNTA1NywgCi0gICAgMTE1MDYxLCAxMTUwNjYsIDExNTA3MSwgMTE1MDc2LCAxMTUwODAsIDExNTA4NSwgMTE1MDkwLCAxMTUwOTQsIDExNTA5OCwgCi0gICAgMTE1MTAzLCAxMTUxMDcsIDExNTExMiwgMTE1MTE3LCAxMTUxMjEsIDExNTEyNiwgMTE1MTMxLCAxMTUxMzUsIDExNTE0MCwgCi0gICAgMTE1MTQ1LCAxMTUxNTAsIDExNTE1NSwgMTE1MTYwLCAxMTUxNjQsIDExNTE2OSwgMTE1MTc0LCAxMTUxNzksIDExNTE4MywgCi0gICAgMTE1MTg4LCAwLCAxMTUxOTMsIDExNTE5NywgMTE1MjAyLCAxMTUyMDcsIDExNTIxMSwgMTE1MjE1LCAxMTUyMjAsIAotICAgIDExNTIyNCwgMTE1MjI5LCAxMTUyMzQsIDExNTIzOCwgMTE1MjQzLCAxMTUyNDgsIDExNTI1MiwgMTE1MjU3LCAxMTUyNjIsIAotICAgIDExNTI2NywgMTE1MjcyLCAxMTUyNzcsIDExNTI4MiwgMTE1Mjg4LCAxMTUyOTQsIDExNTMwMCwgMTE1MzA1LCAxMTUzMTEsIAotICAgIDExNTMxNywgMTE1MzIzLCAxMTUzMjgsIDExNTMzNCwgMTE1MzQwLCAxMTUzNDUsIDExNTM1MCwgMTE1MzU2LCAxMTUzNjEsIAotICAgIDExNTM2NywgMTE1MzczLCAxMTUzNzgsIDExNTM4NCwgMTE1MzkwLCAxMTUzOTUsIDExNTQwMSwgMTE1NDA3LCAxMTU0MTMsIAotICAgIDExNTQxOSwgMTE1NDI1LCAxMTU0MzAsIDExNTQzNiwgMTE1NDQyLCAxMTU0NDgsIDExNTQ1MywgMTE1NDU5LCAxMTU0NjUsIAotICAgIDExNTQ3MSwgMTE1NDc2LCAxMTU0ODIsIDExNTQ4OCwgMTE1NDkzLCAxMTU0OTgsIDExNTUwNCwgMTE1NTA5LCAxMTU1MTUsIAotICAgIDExNTUyMSwgMTE1NTI2LCAxMTU1MzIsIDExNTUzOCwgMTE1NTQzLCAxMTU1NDksIDExNTU1NSwgMTE1NTYxLCAxMTU1NjcsIAotICAgIDExNTU3MywgMCwgMTE1NTc3LCAxMTU1ODIsIDAsIDAsIDExNTU4NywgMCwgMCwgMTE1NTkyLCAxMTU1OTcsIDAsIDAsIAotICAgIDExNTYwMiwgMTE1NjA3LCAxMTU2MTEsIDExNTYxNiwgMCwgMTE1NjIxLCAxMTU2MjYsIDExNTYzMSwgMTE1NjM1LCAKLSAgICAxMTU2NDAsIDExNTY0NSwgMTE1NjUwLCAxMTU2NTUsIDExNTY2MCwgMTE1NjY0LCAxMTU2NjksIDExNTY3NCwgMCwgCi0gICAgMTE1Njc5LCAwLCAxMTU2ODQsIDExNTY4OSwgMTE1NjkzLCAxMTU2OTgsIDExNTcwMywgMTE1NzA3LCAxMTU3MTEsIDAsIAotICAgIDExNTcxNiwgMTE1NzIxLCAxMTU3MjYsIDExNTczMCwgMTE1NzM1LCAxMTU3NDAsIDExNTc0NCwgMTE1NzQ5LCAxMTU3NTQsIAotICAgIDExNTc1OSwgMTE1NzY0LCAxMTU3NjksIDExNTc3NCwgMTE1NzgwLCAxMTU3ODYsIDExNTc5MiwgMTE1Nzk3LCAxMTU4MDMsIAotICAgIDExNTgwOSwgMTE1ODE1LCAxMTU4MjAsIDExNTgyNiwgMTE1ODMyLCAxMTU4MzcsIDExNTg0MiwgMTE1ODQ4LCAxMTU4NTMsIAotICAgIDExNTg1OSwgMTE1ODY1LCAxMTU4NzAsIDExNTg3NiwgMTE1ODgyLCAxMTU4ODcsIDExNTg5MywgMTE1ODk5LCAxMTU5MDUsIAotICAgIDExNTkxMSwgMTE1OTE3LCAxMTU5MjIsIDExNTkyOCwgMTE1OTM0LCAxMTU5NDAsIDExNTk0NSwgMTE1OTUxLCAxMTU5NTcsIAotICAgIDExNTk2MywgMTE1OTY4LCAxMTU5NzQsIDExNTk4MCwgMTE1OTg1LCAxMTU5OTAsIDExNTk5NiwgMTE2MDAxLCAxMTYwMDcsIAotICAgIDExNjAxMywgMTE2MDE4LCAxMTYwMjQsIDExNjAzMCwgMTE2MDM1LCAxMTYwNDEsIDExNjA0NywgMTE2MDUzLCAxMTYwNTksIAotICAgIDExNjA2NSwgMTE2MDY5LCAwLCAxMTYwNzQsIDExNjA3OSwgMTE2MDgzLCAxMTYwODgsIDAsIDAsIDExNjA5MywgMTE2MDk4LCAKLSAgICAxMTYxMDMsIDExNjEwNywgMTE2MTExLCAxMTYxMTYsIDExNjEyMCwgMTE2MTI1LCAwLCAxMTYxMzAsIDExNjEzNSwgCi0gICAgMTE2MTQwLCAxMTYxNDQsIDExNjE0OSwgMTE2MTU0LCAxMTYxNTksIDAsIDExNjE2NCwgMTE2MTY4LCAxMTYxNzMsIAotICAgIDExNjE3OCwgMTE2MTgzLCAxMTYxODcsIDExNjE5MiwgMTE2MTk3LCAxMTYyMDIsIDExNjIwNiwgMTE2MjExLCAxMTYyMTYsIAotICAgIDExNjIyMCwgMTE2MjI0LCAxMTYyMjksIDExNjIzMywgMTE2MjM4LCAxMTYyNDMsIDExNjI0NywgMTE2MjUyLCAxMTYyNTcsIAotICAgIDExNjI2MSwgMTE2MjY2LCAxMTYyNzEsIDExNjI3NiwgMTE2MjgxLCAxMTYyODYsIDExNjI5MCwgMCwgMTE2Mjk1LCAKLSAgICAxMTYzMDAsIDExNjMwNCwgMTE2MzA5LCAwLCAxMTYzMTQsIDExNjMxOCwgMTE2MzIzLCAxMTYzMjgsIDExNjMzMiwgMCwgCi0gICAgMTE2MzM2LCAwLCAwLCAwLCAxMTYzNDAsIDExNjM0NSwgMTE2MzUwLCAxMTYzNTQsIDExNjM1OSwgMTE2MzY0LCAxMTYzNjksIAotICAgIDAsIDExNjM3NCwgMTE2Mzc4LCAxMTYzODMsIDExNjM4OCwgMTE2MzkzLCAxMTYzOTcsIDExNjQwMiwgMTE2NDA3LCAKLSAgICAxMTY0MTIsIDExNjQxNiwgMTE2NDIxLCAxMTY0MjYsIDExNjQzMCwgMTE2NDM0LCAxMTY0MzksIDExNjQ0MywgMTE2NDQ4LCAKLSAgICAxMTY0NTMsIDExNjQ1NywgMTE2NDYyLCAxMTY0NjcsIDExNjQ3MSwgMTE2NDc2LCAxMTY0ODEsIDExNjQ4NiwgMTE2NDkxLCAKLSAgICAxMTY0OTYsIDExNjUwMSwgMTE2NTA3LCAxMTY1MTMsIDExNjUxOSwgMTE2NTI0LCAxMTY1MzAsIDExNjUzNiwgMTE2NTQyLCAKLSAgICAxMTY1NDcsIDExNjU1MywgMTE2NTU5LCAxMTY1NjQsIDExNjU2OSwgMTE2NTc1LCAxMTY1ODAsIDExNjU4NiwgMTE2NTkyLCAKLSAgICAxMTY1OTcsIDExNjYwMywgMTE2NjA5LCAxMTY2MTQsIDExNjYyMCwgMTE2NjI2LCAxMTY2MzIsIDExNjYzOCwgMTE2NjQ0LCAKLSAgICAxMTY2NDksIDExNjY1NSwgMTE2NjYxLCAxMTY2NjcsIDExNjY3MiwgMTE2Njc4LCAxMTY2ODQsIDExNjY5MCwgMTE2Njk1LCAKLSAgICAxMTY3MDEsIDExNjcwNywgMTE2NzEyLCAxMTY3MTcsIDExNjcyMywgMTE2NzI4LCAxMTY3MzQsIDExNjc0MCwgMTE2NzQ1LCAKLSAgICAxMTY3NTEsIDExNjc1NywgMTE2NzYyLCAxMTY3NjgsIDExNjc3NCwgMTE2NzgwLCAxMTY3ODYsIDExNjc5MiwgMTE2Nzk2LCAKLSAgICAxMTY4MDEsIDExNjgwNiwgMTE2ODExLCAxMTY4MTUsIDExNjgyMCwgMTE2ODI1LCAxMTY4MzAsIDExNjgzNCwgMTE2ODM5LCAKLSAgICAxMTY4NDQsIDExNjg0OCwgMTE2ODUyLCAxMTY4NTcsIDExNjg2MSwgMTE2ODY2LCAxMTY4NzEsIDExNjg3NSwgMTE2ODgwLCAKLSAgICAxMTY4ODUsIDExNjg4OSwgMTE2ODk0LCAxMTY4OTksIDExNjkwNCwgMTE2OTA5LCAxMTY5MTQsIDExNjkxOCwgMTE2OTIzLCAKLSAgICAxMTY5MjgsIDExNjkzMywgMTE2OTM3LCAxMTY5NDIsIDExNjk0NywgMTE2OTUyLCAxMTY5NTYsIDExNjk2MSwgMTE2OTY2LCAKLSAgICAxMTY5NzAsIDExNjk3NCwgMTE2OTc5LCAxMTY5ODMsIDExNjk4OCwgMTE2OTkzLCAxMTY5OTcsIDExNzAwMiwgMTE3MDA3LCAKLSAgICAxMTcwMTEsIDExNzAxNiwgMTE3MDIxLCAxMTcwMjYsIDExNzAzMSwgMTE3MDM2LCAxMTcwNDEsIDExNzA0NywgMTE3MDUzLCAKLSAgICAxMTcwNTksIDExNzA2NCwgMTE3MDcwLCAxMTcwNzYsIDExNzA4MiwgMTE3MDg3LCAxMTcwOTMsIDExNzA5OSwgMTE3MTA0LCAKLSAgICAxMTcxMDksIDExNzExNSwgMTE3MTIwLCAxMTcxMjYsIDExNzEzMiwgMTE3MTM3LCAxMTcxNDMsIDExNzE0OSwgMTE3MTU0LCAKLSAgICAxMTcxNjAsIDExNzE2NiwgMTE3MTcyLCAxMTcxNzgsIDExNzE4NCwgMTE3MTg5LCAxMTcxOTUsIDExNzIwMSwgMTE3MjA3LCAKLSAgICAxMTcyMTIsIDExNzIxOCwgMTE3MjI0LCAxMTcyMzAsIDExNzIzNSwgMTE3MjQxLCAxMTcyNDcsIDExNzI1MiwgMTE3MjU3LCAKLSAgICAxMTcyNjMsIDExNzI2OCwgMTE3Mjc0LCAxMTcyODAsIDExNzI4NSwgMTE3MjkxLCAxMTcyOTcsIDExNzMwMiwgMTE3MzA4LCAKLSAgICAxMTczMTQsIDExNzMyMCwgMTE3MzI2LCAxMTczMzIsIDExNzMzNywgMTE3MzQzLCAxMTczNDksIDExNzM1NSwgMTE3MzYwLCAKLSAgICAxMTczNjYsIDExNzM3MiwgMTE3Mzc4LCAxMTczODMsIDExNzM4OSwgMTE3Mzk1LCAxMTc0MDAsIDExNzQwNSwgMTE3NDExLCAKLSAgICAxMTc0MTYsIDExNzQyMiwgMTE3NDI4LCAxMTc0MzMsIDExNzQzOSwgMTE3NDQ1LCAxMTc0NTAsIDExNzQ1NiwgMTE3NDYyLCAKLSAgICAxMTc0NjgsIDExNzQ3NCwgMTE3NDgwLCAxMTc0ODUsIDExNzQ5MSwgMTE3NDk3LCAxMTc1MDMsIDExNzUwOCwgMTE3NTE0LCAKLSAgICAxMTc1MjAsIDExNzUyNiwgMTE3NTMxLCAxMTc1MzcsIDExNzU0MywgMTE3NTQ4LCAxMTc1NTMsIDExNzU1OSwgMTE3NTY0LCAKLSAgICAxMTc1NzAsIDExNzU3NiwgMTE3NTgxLCAxMTc1ODcsIDExNzU5MywgMTE3NTk4LCAxMTc2MDQsIDExNzYxMCwgMTE3NjE2LCAKLSAgICAxMTc2MjIsIDExNzYyOCwgMTE3NjM0LCAxMTc2NDEsIDExNzY0OCwgMTE3NjU1LCAxMTc2NjEsIDExNzY2OCwgMTE3Njc1LCAKLSAgICAxMTc2ODIsIDExNzY4OCwgMTE3Njk1LCAxMTc3MDIsIDExNzcwOCwgMTE3NzE0LCAxMTc3MjEsIDExNzcyNywgMTE3NzM0LCAKLSAgICAxMTc3NDEsIDExNzc0NywgMTE3NzU0LCAxMTc3NjEsIDExNzc2NywgMTE3Nzc0LCAxMTc3ODEsIDExNzc4OCwgMTE3Nzk1LCAKLSAgICAxMTc4MDIsIDExNzgwOCwgMTE3ODE1LCAxMTc4MjIsIDExNzgyOSwgMTE3ODM1LCAxMTc4NDIsIDExNzg0OSwgMTE3ODU2LCAKLSAgICAxMTc4NjIsIDExNzg2OSwgMTE3ODc2LCAxMTc4ODIsIDExNzg4OCwgMTE3ODk1LCAxMTc5MDEsIDExNzkwOCwgMTE3OTE1LCAKLSAgICAxMTc5MjEsIDExNzkyOCwgMTE3OTM1LCAxMTc5NDEsIDExNzk0OCwgMTE3OTU1LCAxMTc5NjIsIDExNzk2OSwgMTE3OTc2LCAKLSAgICAxMTc5ODEsIDExNzk4NywgMTE3OTkzLCAxMTc5OTksIDExODAwNCwgMTE4MDEwLCAxMTgwMTYsIDExODAyMiwgMTE4MDI3LCAKLSAgICAxMTgwMzMsIDExODAzOSwgMTE4MDQ0LCAxMTgwNDksIDExODA1NSwgMTE4MDYwLCAxMTgwNjYsIDExODA3MiwgMTE4MDc3LCAKLSAgICAxMTgwODMsIDExODA4OSwgMTE4MDk0LCAxMTgxMDAsIDExODEwNiwgMTE4MTEyLCAxMTgxMTgsIDExODEyNCwgMTE4MTI5LCAKLSAgICAxMTgxMzUsIDExODE0MSwgMTE4MTQ3LCAxMTgxNTIsIDExODE1OCwgMTE4MTY0LCAxMTgxNzAsIDExODE3NSwgMTE4MTgxLCAKLSAgICAxMTgxODcsIDExODE5MiwgMTE4MTk3LCAxMTgyMDMsIDExODIwOCwgMTE4MjE0LCAxMTgyMjAsIDExODIyNSwgMTE4MjMxLCAKLSAgICAxMTgyMzcsIDExODI0MiwgMTE4MjQ4LCAxMTgyNTQsIDExODI2MCwgMTE4MjY2LCAxMTgyNzIsIDExODI3OCwgMCwgMCwgCi0gICAgMTE4Mjg1LCAxMTgyOTAsIDExODI5NSwgMTE4MzAwLCAxMTgzMDUsIDExODMxMCwgMTE4MzE1LCAxMTgzMjAsIDExODMyNSwgCi0gICAgMTE4MzMwLCAxMTgzMzUsIDExODM0MCwgMTE4MzQ1LCAxMTgzNTAsIDExODM1NSwgMTE4MzYwLCAxMTgzNjUsIDExODM3MCwgCi0gICAgMTE4Mzc2LCAxMTgzODEsIDExODM4NiwgMTE4MzkxLCAxMTgzOTYsIDExODQwMSwgMTE4NDA2LCAxMTg0MTEsIDExODQxNSwgCi0gICAgMTE4NDIwLCAxMTg0MjUsIDExODQzMCwgMTE4NDM1LCAxMTg0NDAsIDExODQ0NSwgMTE4NDUwLCAxMTg0NTUsIDExODQ2MCwgCi0gICAgMTE4NDY1LCAxMTg0NzAsIDExODQ3NSwgMTE4NDgwLCAxMTg0ODUsIDExODQ5MCwgMTE4NDk1LCAxMTg1MDAsIDExODUwNiwgCi0gICAgMTE4NTExLCAxMTg1MTYsIDExODUyMSwgMTE4NTI2LCAxMTg1MzEsIDExODUzNiwgMTE4NTQxLCAxMTg1NDcsIDExODU1MiwgCi0gICAgMTE4NTU3LCAxMTg1NjIsIDExODU2NywgMTE4NTcyLCAxMTg1NzcsIDExODU4MiwgMTE4NTg3LCAxMTg1OTIsIDExODU5NywgCi0gICAgMTE4NjAyLCAxMTg2MDcsIDExODYxMiwgMTE4NjE3LCAxMTg2MjIsIDExODYyNywgMTE4NjMyLCAxMTg2MzcsIDExODY0MiwgCi0gICAgMTE4NjQ3LCAxMTg2NTIsIDExODY1NywgMTE4NjYyLCAxMTg2NjgsIDExODY3MywgMTE4Njc4LCAxMTg2ODMsIDExODY4OCwgCi0gICAgMTE4NjkzLCAxMTg2OTgsIDExODcwMywgMTE4NzA3LCAxMTg3MTIsIDExODcxNywgMTE4NzIyLCAxMTg3MjcsIDExODczMiwgCi0gICAgMTE4NzM3LCAxMTg3NDIsIDExODc0NywgMTE4NzUyLCAxMTg3NTcsIDExODc2MiwgMTE4NzY3LCAxMTg3NzIsIDExODc3NywgCi0gICAgMTE4NzgyLCAxMTg3ODcsIDExODc5MiwgMTE4Nzk4LCAxMTg4MDMsIDExODgwOCwgMTE4ODEzLCAxMTg4MTgsIDExODgyMywgCi0gICAgMTE4ODI4LCAxMTg4MzMsIDExODgzOSwgMTE4ODQ0LCAxMTg4NDksIDExODg1NCwgMTE4ODU5LCAxMTg4NjQsIDExODg2OSwgCi0gICAgMTE4ODc1LCAxMTg4ODEsIDExODg4NywgMTE4ODkzLCAxMTg4OTksIDExODkwNSwgMTE4OTExLCAxMTg5MTcsIDExODkyMywgCi0gICAgMTE4OTI5LCAxMTg5MzUsIDExODk0MSwgMTE4OTQ3LCAxMTg5NTMsIDExODk1OSwgMTE4OTY1LCAxMTg5NzEsIDExODk3OCwgCi0gICAgMTE4OTg0LCAxMTg5OTAsIDExODk5NiwgMTE5MDAyLCAxMTkwMDgsIDExOTAxNCwgMTE5MDIwLCAxMTkwMjUsIDExOTAzMSwgCi0gICAgMTE5MDM3LCAxMTkwNDMsIDExOTA0OSwgMTE5MDU1LCAxMTkwNjEsIDExOTA2NywgMTE5MDczLCAxMTkwNzksIDExOTA4NSwgCi0gICAgMTE5MDkxLCAxMTkwOTcsIDExOTEwMywgMTE5MTA5LCAxMTkxMTUsIDExOTEyMSwgMTE5MTI3LCAxMTkxMzQsIDExOTE0MCwgCi0gICAgMTE5MTQ2LCAxMTkxNTIsIDExOTE1OCwgMTE5MTY0LCAxMTkxNzAsIDExOTE3NiwgMTE5MTgzLCAxMTkxODksIDExOTE5NSwgCi0gICAgMTE5MjAxLCAxMTkyMDcsIDExOTIxMywgMTE5MjE5LCAxMTkyMjUsIDExOTIzMSwgMTE5MjM3LCAxMTkyNDMsIDExOTI0OSwgCi0gICAgMTE5MjU1LCAxMTkyNjEsIDExOTI2NywgMTE5MjczLCAxMTkyNzksIDExOTI4NSwgMTE5MjkxLCAxMTkyOTcsIDExOTMwMywgCi0gICAgMTE5MzA5LCAxMTkzMTUsIDExOTMyMSwgMTE5MzI4LCAxMTkzMzQsIDExOTM0MCwgMTE5MzQ2LCAxMTkzNTIsIDExOTM1OCwgCi0gICAgMTE5MzY0LCAxMTkzNzAsIDExOTM3NSwgMTE5MzgxLCAxMTkzODcsIDExOTM5MywgMTE5Mzk5LCAxMTk0MDUsIDExOTQxMSwgCi0gICAgMTE5NDE3LCAxMTk0MjMsIDExOTQyOSwgMTE5NDM1LCAxMTk0NDEsIDExOTQ0NywgMTE5NDUzLCAxMTk0NTksIDExOTQ2NSwgCi0gICAgMTE5NDcxLCAxMTk0NzcsIDExOTQ4NCwgMTE5NDkwLCAxMTk0OTYsIDExOTUwMiwgMTE5NTA4LCAxMTk1MTQsIDExOTUyMCwgCi0gICAgMTE5NTI2LCAxMTk1MzMsIDExOTUzOSwgMTE5NTQ1LCAxMTk1NTEsIDExOTU1NywgMTE5NTYzLCAxMTk1NjksIDExOTU3NiwgCi0gICAgMTE5NTgzLCAxMTk1OTAsIDExOTU5NywgMTE5NjA0LCAxMTk2MTEsIDExOTYxOCwgMTE5NjI1LCAxMTk2MzIsIDExOTYzOSwgCi0gICAgMTE5NjQ2LCAxMTk2NTMsIDExOTY2MCwgMTE5NjY3LCAxMTk2NzQsIDExOTY4MSwgMTE5Njg4LCAxMTk2OTYsIDExOTcwMywgCi0gICAgMTE5NzEwLCAxMTk3MTcsIDExOTcyNCwgMTE5NzMxLCAxMTk3MzgsIDExOTc0NSwgMTE5NzUxLCAxMTk3NTgsIDExOTc2NSwgCi0gICAgMTE5NzcyLCAxMTk3NzksIDExOTc4NiwgMTE5NzkzLCAxMTk4MDAsIDExOTgwNywgMTE5ODE0LCAxMTk4MjEsIDExOTgyOCwgCi0gICAgMTE5ODM1LCAxMTk4NDIsIDExOTg0OSwgMTE5ODU2LCAxMTk4NjMsIDExOTg3MCwgMTE5ODc4LCAxMTk4ODUsIDExOTg5MiwgCi0gICAgMTE5ODk5LCAxMTk5MDYsIDExOTkxMywgMTE5OTIwLCAxMTk5MjcsIDExOTkzNSwgMTE5OTQyLCAxMTk5NDksIDExOTk1NiwgCi0gICAgMTE5OTYzLCAxMTk5NzAsIDExOTk3NywgMTE5OTgyLCAwLCAwLCAxMTk5ODcsIDExOTk5MiwgMTE5OTk2LCAxMjAwMDAsIAotICAgIDEyMDAwNCwgMTIwMDA4LCAxMjAwMTIsIDEyMDAxNiwgMTIwMDIwLCAxMjAwMjQsIDEyMDAyOCwgMTIwMDMzLCAxMjAwMzcsIAotICAgIDEyMDA0MSwgMTIwMDQ1LCAxMjAwNDksIDEyMDA1MywgMTIwMDU3LCAxMjAwNjEsIDEyMDA2NSwgMTIwMDY5LCAxMjAwNzQsIAotICAgIDEyMDA3OCwgMTIwMDgyLCAxMjAwODYsIDEyMDA5MCwgMTIwMDk0LCAxMjAwOTgsIDEyMDEwMiwgMTIwMTA2LCAxMjAxMTAsIAotICAgIDEyMDExNiwgMTIwMTIxLCAxMjAxMjYsIDEyMDEzMSwgMTIwMTM2LCAxMjAxNDEsIDEyMDE0NiwgMTIwMTUxLCAxMjAxNTYsIAotICAgIDEyMDE2MSwgMTIwMTY3LCAxMjAxNzIsIDEyMDE3NywgMTIwMTgyLCAxMjAxODcsIDEyMDE5MiwgMTIwMTk3LCAxMjAyMDIsIAotICAgIDEyMDIwNywgMTIwMjEyLCAxMjAyMTYsIDEyMDIyMCwgMTIwMjI0LCAwLCAxMjAyMjgsIDEyMDIzMiwgMTIwMjM2LCAKLSAgICAxMjAyNDAsIDEyMDI0NCwgMTIwMjQ4LCAxMjAyNTIsIDEyMDI1NiwgMTIwMjYwLCAxMjAyNjQsIDEyMDI2OCwgMTIwMjcyLCAKKyAgICA5MjE3NywgOTIxODEsIDkyMTg2LCA5MjE5MSwgMCwgOTIxOTcsIDkyMjAyLCAwLCAwLCAwLCAwLCAwLCA5MjIwNywgOTIyMTMsIAorICAgIDkyMjIwLCA5MjIyNSwgOTIyMzAsIDkyMjM0LCA5MjIzOSwgOTIyNDQsIDAsIDkyMjQ5LCA5MjI1NCwgOTIyNTksIDAsIAorICAgIDkyMjY0LCA5MjI2OSwgOTIyNzQsIDkyMjc5LCA5MjI4NCwgOTIyODksIDkyMjk0LCA5MjI5OSwgOTIzMDQsIDkyMzA5LCAKKyAgICA5MjMxNCwgOTIzMTgsIDkyMzIyLCA5MjMyNywgOTIzMzIsIDkyMzM3LCA5MjM0MSwgOTIzNDUsIDkyMzQ5LCA5MjM1NCwgCisgICAgOTIzNTksIDkyMzY0LCA5MjM2OSwgOTIzNzMsIDkyMzc4LCA5MjM4MiwgOTIzODcsIDAsIDAsIDAsIDAsIDkyMzkyLCAKKyAgICA5MjM5OCwgOTI0MDMsIDAsIDAsIDAsIDAsIDkyNDA4LCA5MjQxMiwgOTI0MTYsIDkyNDIwLCA5MjQyNCwgOTI0MjgsIAorICAgIDkyNDMzLCA5MjQzOCwgOTI0NDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDkyNDUwLCA5MjQ1NiwgOTI0NjMsIDkyNDY5LCAKKyAgICA5MjQ3NiwgOTI0ODIsIDkyNDg4LCA5MjQ5NCwgOTI1MDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDkyNTA3LCA5MjUxNSwgCisgICAgOTI1MjMsIDkyNTMxLCA5MjUzOSwgOTI1NDcsIDkyNTU1LCA5MjU2MywgOTI1NzEsIDkyNTc5LCA5MjU4NywgOTI1OTUsIAorICAgIDkyNjAzLCA5MjYxMSwgOTI2MTksIDkyNjI3LCA5MjYzNSwgOTI2NDMsIDkyNjUxLCA5MjY1OSwgOTI2NjcsIDkyNjc1LCAKKyAgICA5MjY4MywgOTI2OTEsIDkyNjk5LCA5MjcwNywgOTI3MTUsIDkyNzIzLCA5MjczMSwgOTI3MzksIDkyNzQ2LCA5Mjc1NCwgCisgICAgOTI3NjIsIDkyNzY2LCA5Mjc3MSwgOTI3NzYsIDkyNzgxLCA5Mjc4NiwgOTI3OTEsIDkyNzk2LCA5MjgwMSwgOTI4MDUsIAorICAgIDkyODEwLCA5MjgxNCwgOTI4MTksIDkyODIzLCA5MjgyOCwgOTI4MzIsIDkyODM3LCA5Mjg0MiwgOTI4NDcsIDkyODUyLCAKKyAgICA5Mjg1NywgOTI4NjIsIDkyODY3LCA5Mjg3MiwgOTI4NzcsIDkyODgyLCA5Mjg4NywgOTI4OTIsIDkyODk3LCA5MjkwMiwgCisgICAgOTI5MDcsIDkyOTEyLCA5MjkxNywgOTI5MjIsIDkyOTI3LCA5MjkzMiwgOTI5MzcsIDkyOTQyLCA5Mjk0NywgOTI5NTIsIAorICAgIDkyOTU3LCA5Mjk2MiwgOTI5NjcsIDkyOTcyLCA5Mjk3NywgOTI5ODIsIDkyOTg3LCA5Mjk5MiwgOTI5OTcsIDkzMDAyLCAKKyAgICA5MzAwNywgOTMwMTIsIDkzMDE3LCA5MzAyMiwgMCwgMCwgMCwgOTMwMjcsIDkzMDMyLCA5MzA0MSwgOTMwNDksIDkzMDU4LCAKKyAgICA5MzA2NywgOTMwNzgsIDkzMDg5LCA5MzA5NiwgOTMxMDMsIDkzMTEwLCA5MzExNywgOTMxMjQsIDkzMTMxLCA5MzEzOCwgCisgICAgOTMxNDUsIDkzMTUyLCA5MzE1OSwgOTMxNjYsIDkzMTczLCA5MzE4MCwgOTMxODcsIDkzMTk0LCA5MzIwMSwgOTMyMDgsIAorICAgIDkzMjE1LCA5MzIyMiwgOTMyMjksIDkzMjM2LCAwLCAwLCA5MzI0MywgOTMyNDksIDkzMjU1LCA5MzI2MSwgOTMyNjcsIAorICAgIDkzMjc0LCA5MzI4MSwgOTMyODksIDkzMjk3LCA5MzMwNCwgOTMzMTEsIDkzMzE4LCA5MzMyNSwgOTMzMzIsIDkzMzM5LCAKKyAgICA5MzM0NiwgOTMzNTMsIDkzMzYwLCA5MzM2NywgOTMzNzQsIDkzMzgxLCA5MzM4OCwgOTMzOTUsIDkzNDAyLCA5MzQwOSwgCisgICAgOTM0MTYsIDkzNDIzLCAwLCAwLCAwLCAwLCAwLCA5MzQzMCwgOTM0MzYsIDkzNDQyLCA5MzQ0OCwgOTM0NTQsIDkzNDYxLCAKKyAgICA5MzQ2OCwgOTM0NzYsIDkzNDg0LCA5MzQ5MCwgOTM0OTYsIDkzNTAzLCA5MzUwOSwgOTM1MTUsIDkzNTIxLCA5MzUyNywgCisgICAgOTM1MzQsIDkzNTQxLCA5MzU0OCwgOTM1NTUsIDkzNTYyLCA5MzU2OSwgOTM1NzYsIDkzNTgzLCA5MzU5MCwgOTM1OTcsIAorICAgIDkzNjA0LCA5MzYxMSwgOTM2MTgsIDkzNjI1LCA5MzYzMiwgOTM2MzksIDkzNjQ2LCA5MzY1MywgOTM2NjAsIDkzNjY3LCAKKyAgICA5MzY3NCwgOTM2ODEsIDkzNjg4LCA5MzY5NSwgOTM3MDIsIDkzNzA5LCA5MzcxNiwgOTM3MjMsIDkzNzMwLCA5MzczNywgCisgICAgOTM3NDQsIDkzNzUxLCA5Mzc1OCwgOTM3NjUsIDkzNzcyLCA5Mzc3OSwgOTM3ODYsIDkzNzkzLCA5MzgwMCwgOTM4MDcsIAorICAgIDkzODE0LCA5MzgyMSwgOTM4MjgsIDkzODM1LCA5Mzg0MiwgOTM4NDksIDkzODU2LCA5Mzg2MywgOTM4NzAsIDkzODc3LCAKKyAgICA5Mzg4NCwgOTM4OTEsIDkzODk4LCA5MzkwNSwgOTM5MTIsIDkzOTE5LCA5MzkyNiwgOTM5MzMsIDkzOTQwLCA5Mzk0NywgCisgICAgOTM5NTQsIDkzOTYxLCA5Mzk2OCwgOTM5NzUsIDkzOTgyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5Mzk4OSwgOTM5OTMsIAorICAgIDkzOTk3LCA5NDAwMSwgOTQwMDUsIDk0MDA5LCA5NDAxMywgOTQwMTcsIDk0MDIxLCA5NDAyNSwgOTQwMzAsIDk0MDM1LCAKKyAgICA5NDA0MCwgOTQwNDUsIDk0MDUwLCA5NDA1NSwgOTQwNjAsIDk0MDY1LCA5NDA3MCwgOTQwNzYsIDk0MDgyLCA5NDA4OCwgCisgICAgOTQwOTUsIDk0MTAyLCA5NDEwOSwgOTQxMTYsIDk0MTIzLCA5NDEzMCwgOTQxMzcsIDk0MTQ0LCA5NDE1MSwgMCwgOTQxNTgsIAorICAgIDk0MTYyLCA5NDE2NiwgOTQxNzAsIDk0MTc0LCA5NDE3OCwgOTQxODEsIDk0MTg1LCA5NDE4OCwgOTQxOTIsIDk0MTk1LCAKKyAgICA5NDE5OSwgOTQyMDMsIDk0MjA4LCA5NDIxMiwgOTQyMTcsIDk0MjIwLCA5NDIyNCwgOTQyMjcsIDk0MjMxLCA5NDIzNCwgCisgICAgOTQyMzgsIDk0MjQyLCA5NDI0NiwgOTQyNTAsIDk0MjU0LCA5NDI1OCwgOTQyNjIsIDk0MjY2LCA5NDI3MCwgOTQyNzQsIAorICAgIDk0Mjc4LCA5NDI4MiwgOTQyODYsIDk0MjkwLCA5NDI5NCwgOTQyOTgsIDk0MzAyLCA5NDMwNiwgOTQzMDksIDk0MzEyLCAKKyAgICA5NDMxNiwgOTQzMjAsIDk0MzI0LCA5NDMyNywgOTQzMzAsIDk0MzMzLCA5NDMzNywgOTQzNDEsIDk0MzQ1LCA5NDM0OSwgCisgICAgOTQzNTIsIDk0MzU1LCA5NDM1OSwgOTQzNjUsIDk0MzcxLCA5NDM3NywgOTQzODIsIDk0Mzg5LCA5NDM5MywgOTQzOTgsIAorICAgIDk0NDAyLCA5NDQwNywgOTQ0MTIsIDk0NDE4LCA5NDQyMywgOTQ0MjksIDk0NDMzLCA5NDQzOCwgOTQ0NDIsIDk0NDQ3LCAKKyAgICA5NDQ1MCwgOTQ0NTMsIDk0NDU3LCA5NDQ2MiwgOTQ0NjgsIDk0NDczLCA5NDQ3OSwgMCwgMCwgMCwgMCwgOTQ0ODQsIAorICAgIDk0NDg3LCA5NDQ5MCwgOTQ0OTMsIDk0NDk2LCA5NDQ5OSwgOTQ1MDIsIDk0NTA1LCA5NDUwOCwgOTQ1MTEsIDk0NTE1LCAKKyAgICA5NDUxOSwgOTQ1MjMsIDk0NTI3LCA5NDUzMSwgOTQ1MzUsIDk0NTM5LCA5NDU0MywgOTQ1NDcsIDk0NTUyLCA5NDU1NywgCisgICAgOTQ1NjEsIDk0NTY0LCA5NDU2NywgOTQ1NzAsIDk0NTczLCA5NDU3NiwgOTQ1NzksIDk0NTgyLCA5NDU4NSwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTQ1ODgsIDk0NTkzLCA5NDU5OCwgOTQ2MDMsIDk0NjA3LCAKKyAgICA5NDYxMiwgOTQ2MTYsIDk0NjIxLCA5NDYyNSwgOTQ2MzAsIDk0NjM0LCA5NDYzOSwgOTQ2NDMsIDk0NjQ4LCA5NDY1MiwgCisgICAgOTQ2NTcsIDk0NjYyLCA5NDY2NywgOTQ2NzIsIDk0Njc3LCA5NDY4MiwgOTQ2ODcsIDk0NjkyLCA5NDY5NywgOTQ3MDIsIAorICAgIDk0NzA3LCA5NDcxMiwgOTQ3MTcsIDk0NzIyLCA5NDcyNywgOTQ3MzIsIDk0NzM3LCA5NDc0MiwgOTQ3NDcsIDk0NzUyLCAKKyAgICA5NDc1NiwgOTQ3NjAsIDk0NzY1LCA5NDc3MCwgOTQ3NzUsIDk0Nzc5LCA5NDc4MywgOTQ3ODcsIDk0NzkyLCA5NDc5NywgCisgICAgOTQ4MDIsIDk0ODA3LCA5NDgxMSwgOTQ4MTUsIDk0ODIxLCA5NDgyNiwgOTQ4MzIsIDk0ODM3LCA5NDg0MywgOTQ4NDgsIAorICAgIDk0ODU0LCA5NDg1OSwgOTQ4NjUsIDk0ODcwLCA5NDg3NSwgOTQ4ODAsIDk0ODg1LCA5NDg4OSwgOTQ4OTQsIDk0OTAwLCAKKyAgICA5NDkwNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTQ5MDksIDk0OTE2LCA5NDkyMywgCisgICAgOTQ5MzAsIDk0OTM3LCA5NDk0NCwgOTQ5NTEsIDk0OTU4LCA5NDk2NSwgOTQ5NzIsIDk0OTc5LCA5NDk4NiwgOTQ5OTMsIAorICAgIDk1MDAwLCA5NTAwNywgOTUwMTQsIDk1MDIxLCA5NTAyOCwgOTUwMzUsIDk1MDQyLCA5NTA0OSwgOTUwNTYsIDk1MDYzLCAKKyAgICA5NTA3MCwgOTUwNzcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDk1MDg0LCA5NTA5MSwgOTUwOTcsIDk1MTAzLCA5NTEwOSwgCisgICAgOTUxMTUsIDk1MTIxLCA5NTEyNywgOTUxMzMsIDk1MTM5LCAwLCAwLCAwLCAwLCAwLCAwLCA5NTE0NSwgOTUxNTAsIDk1MTU1LCAKKyAgICA5NTE2MCwgOTUxNjUsIDk1MTY5LCA5NTE3MywgOTUxNzcsIDk1MTgyLCA5NTE4NywgOTUxOTIsIDk1MTk3LCA5NTIwMiwgCisgICAgOTUyMDcsIDk1MjEyLCA5NTIxNywgOTUyMjIsIDk1MjI3LCA5NTIzMiwgOTUyMzcsIDk1MjQyLCA5NTI0NywgOTUyNTIsIAorICAgIDk1MjU3LCA5NTI2MiwgOTUyNjcsIDk1MjcyLCA5NTI3NywgOTUyODIsIDk1Mjg3LCA5NTI5MiwgOTUyOTcsIDk1MzAyLCAKKyAgICA5NTMwNywgOTUzMTIsIDk1MzE3LCA5NTMyMiwgOTUzMjcsIDk1MzMyLCA5NTMzNywgOTUzNDIsIDk1MzQ3LCA5NTM1MywgCisgICAgOTUzNTgsIDk1MzY0LCA5NTM2OSwgOTUzNzUsIDk1MzgwLCA5NTM4NiwgOTUzOTIsIDk1Mzk2LCA5NTQwMSwgOTU0MDUsIDAsIAorICAgIDk1NDA5LCA5NTQxNCwgOTU0MTgsIDk1NDIyLCA5NTQyNiwgOTU0MzAsIDk1NDM0LCA5NTQzOCwgOTU0NDIsIDk1NDQ2LCAKKyAgICA5NTQ1MCwgOTU0NTUsIDk1NDU5LCA5NTQ2NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTU0NjksIAorICAgIDk1NDczLCA5NTQ3NywgOTU0ODEsIDk1NDg0LCA5NTQ4OCwgOTU0OTEsIDk1NDk1LCA5NTQ5OCwgOTU1MDIsIDk1NTA2LCAKKyAgICA5NTUxMSwgOTU1MTUsIDk1NTIwLCA5NTUyMywgOTU1MjcsIDk1NTMwLCA5NTUzNCwgOTU1MzcsIDk1NTQxLCA5NTU0NSwgCisgICAgOTU1NDksIDk1NTUzLCA5NTU1NywgOTU1NjEsIDk1NTY1LCA5NTU2OSwgOTU1NzMsIDk1NTc3LCA5NTU4MSwgOTU1ODUsIAorICAgIDk1NTg5LCA5NTU5MywgOTU1OTcsIDk1NjAxLCA5NTYwNSwgOTU2MDksIDk1NjEyLCA5NTYxNSwgOTU2MTksIDk1NjIzLCAKKyAgICA5NTYyNywgOTU2MzAsIDk1NjMzLCA5NTYzNiwgOTU2NDAsIDk1NjQ0LCA5NTY0OCwgOTU2NTIsIDk1NjU2LCA5NTY1OSwgCisgICAgOTU2NjIsIDk1NjY3LCA5NTY3MSwgOTU2NzYsIDk1NjgwLCA5NTY4NSwgOTU2OTAsIDk1Njk2LCA5NTcwMSwgOTU3MDcsIAorICAgIDk1NzExLCA5NTcxNiwgOTU3MjAsIDk1NzI1LCA5NTcyOSwgOTU3MzMsIDk1NzM3LCA5NTc0MSwgOTU3NDQsIDk1NzQ3LCAKKyAgICA5NTc1MSwgOTU3NTUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDk1NzU4LCA5NTc2MiwgOTU3NjUsIDk1NzY4LCA5NTc3MSwgCisgICAgOTU3NzQsIDk1Nzc3LCA5NTc4MCwgOTU3ODMsIDk1Nzg2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCA5NTc4OSwgOTU3OTMsIDk1Nzk4LCA5NTgwMiwgOTU4MDcsIDk1ODExLCA5NTgxNiwgOTU4MjAsIDk1ODI1LCA5NTgyOSwgCisgICAgOTU4MzQsIDk1ODM4LCA5NTg0MywgOTU4NDgsIDk1ODUzLCA5NTg1OCwgOTU4NjMsIDk1ODY4LCA5NTg3MywgOTU4NzgsIAorICAgIDk1ODgzLCA5NTg4OCwgOTU4OTMsIDk1ODk4LCA5NTkwMywgOTU5MDgsIDk1OTEzLCA5NTkxOCwgOTU5MjMsIDk1OTI4LCAKKyAgICA5NTkzMiwgOTU5MzYsIDk1OTQxLCA5NTk0NiwgOTU5NTEsIDk1OTU1LCA5NTk1OSwgOTU5NjMsIDk1OTY4LCA5NTk3MywgCisgICAgOTU5NzgsIDk1OTgyLCA5NTk4NiwgOTU5OTEsIDk1OTk2LCA5NjAwMSwgOTYwMDcsIDk2MDEyLCA5NjAxOCwgOTYwMjMsIAorICAgIDk2MDI5LCA5NjAzNCwgOTYwNDAsIDk2MDQ1LCA5NjA1MSwgOTYwNTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDk2MDYxLCAKKyAgICA5NjA2NiwgOTYwNzAsIDk2MDc0LCA5NjA3OCwgOTYwODIsIDk2MDg2LCA5NjA5MCwgOTYwOTQsIDk2MDk4LCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCA5NjEwMiwgOTYxMDUsIDk2MTEwLCA5NjExNiwgOTYxMjQsIDk2MTI5LCA5NjEzNSwgOTYxNDMsIDk2MTQ5LCAKKyAgICA5NjE1NSwgOTYxNTksIDk2MTYzLCA5NjE3MCwgOTYxNzksIDk2MTg2LCA5NjE5NSwgOTYyMDEsIDk2MjEwLCA5NjIxNywgCisgICAgOTYyMjQsIDk2MjMxLCA5NjI0MSwgOTYyNDcsIDk2MjUxLCA5NjI1OCwgOTYyNjcsIDk2Mjc3LCA5NjI4NCwgOTYyOTEsIAorICAgIDk2Mjk1LCA5NjI5OSwgOTYzMDYsIDk2MzE2LCA5NjMyMCwgOTYzMjcsIDk2MzM0LCA5NjM0MSwgOTYzNDcsIDk2MzU0LCAKKyAgICA5NjM2MSwgOTYzNjgsIDk2Mzc1LCA5NjM3OSwgOTYzODMsIDk2Mzg3LCA5NjM5NCwgOTYzOTgsIDk2NDA1LCA5NjQxMiwgCisgICAgOTY0MjYsIDk2NDM1LCA5NjQzOSwgOTY0NDMsIDk2NDQ3LCA5NjQ1NCwgOTY0NTgsIDk2NDYyLCA5NjQ2NiwgOTY0NzQsIAorICAgIDk2NDgyLCA5NjUwMSwgOTY1MTEsIDk2NTMxLCA5NjUzNSwgOTY1MzksIDk2NTQzLCA5NjU0NywgOTY1NTEsIDk2NTU1LCAKKyAgICA5NjU1OSwgOTY1NjYsIDk2NTcwLCA5NjU3MywgOTY1NzcsIDk2NTgxLCA5NjU4NywgOTY1OTQsIDk2NjAzLCA5NjYwNywgCisgICAgOTY2MTYsIDk2NjI1LCA5NjYzMywgOTY2MzcsIDk2NjQ0LCA5NjY0OCwgOTY2NTIsIDk2NjU2LCA5NjY2MCwgOTY2NzEsIAorICAgIDk2NjgwLCA5NjY4OSwgOTY2OTgsIDk2NzA3LCA5NjcxOSwgOTY3MjgsIDk2NzM3LCA5Njc0NiwgOTY3NTQsIDk2NzYzLCAKKyAgICA5Njc3NSwgOTY3ODQsIDk2NzkzLCA5NjgwMiwgOTY4MTQsIDk2ODIzLCA5NjgzMiwgOTY4NDQsIDk2ODUzLCA5Njg2MiwgCisgICAgOTY4NzQsIDk2ODgzLCA5Njg4NywgOTY4OTEsIDk2ODk1LCA5Njg5OSwgOTY5MDMsIDk2OTA3LCA5NjkxMSwgOTY5MTgsIAorICAgIDk2OTIyLCA5NjkyNiwgOTY5MzcsIDk2OTQxLCA5Njk0NSwgOTY5NTIsIDk2OTU4LCA5Njk2NCwgOTY5NjgsIDk2OTc1LCAKKyAgICA5Njk3OSwgOTY5ODMsIDk2OTg3LCA5Njk5MSwgOTY5OTUsIDk2OTk5LCA5NzAwNSwgOTcwMTMsIDk3MDE3LCA5NzAyMSwgCisgICAgOTcwMjQsIDk3MDMwLCA5NzA0MCwgOTcwNDQsIDk3MDU2LCA5NzA2MywgOTcwNzAsIDk3MDc3LCA5NzA4NCwgOTcwOTAsIAorICAgIDk3MDk0LCA5NzA5OCwgOTcxMDIsIDk3MTA2LCA5NzExMywgOTcxMjIsIDk3MTI5LCA5NzEzNywgOTcxNDUsIDk3MTUxLCAKKyAgICA5NzE1NSwgOTcxNTksIDk3MTYzLCA5NzE2NywgOTcxNzMsIDk3MTgyLCA5NzE5NCwgOTcyMDEsIDk3MjA4LCA5NzIxNywgCisgICAgOTcyMjgsIDk3MjM0LCA5NzI0MywgOTcyNTIsIDk3MjU5LCA5NzI2OCwgOTcyNzUsIDk3MjgyLCA5NzI5MiwgOTcyOTksIAorICAgIDk3MzA2LCA5NzMxMywgOTczMjAsIDk3MzI0LCA5NzMzMCwgOTczMzQsIDk3MzQ1LCA5NzM1MywgOTczNjIsIDk3Mzc0LCAKKyAgICA5NzM4MSwgOTczODgsIDk3Mzk4LCA5NzQwNSwgOTc0MTQsIDk3NDIxLCA5NzQzMCwgOTc0MzcsIDk3NDQ0LCA5NzQ1NCwgCisgICAgOTc0NjEsIDk3NDY4LCA5NzQ3OCwgOTc0ODUsIDk3NDk3LCA5NzUwNiwgOTc1MTMsIDk3NTIwLCA5NzUyNywgOTc1MzYsIAorICAgIDk3NTQ2LCA5NzU1OSwgOTc1NjYsIDk3NTc2LCA5NzU4NiwgOTc1OTMsIDk3NjAyLCA5NzYxNSwgOTc2MjIsIDk3NjI5LCAKKyAgICA5NzYzNiwgOTc2NDYsIDk3NjU2LCA5NzY2MywgOTc2NzMsIDk3NjgwLCA5NzY4NywgOTc2OTcsIDk3NzAzLCA5NzcxMCwgCisgICAgOTc3MTcsIDk3NzI0LCA5NzczNCwgOTc3NDEsIDk3NzQ4LCA5Nzc1NSwgOTc3NjEsIDk3NzY4LCA5Nzc3OCwgOTc3ODUsIAorICAgIDk3Nzg5LCA5Nzc5NywgOTc4MDEsIDk3ODEzLCA5NzgxNywgOTc4MzEsIDk3ODM1LCA5NzgzOSwgOTc4NDMsIDk3ODQ3LCAKKyAgICA5Nzg1MywgOTc4NjAsIDk3ODY4LCA5Nzg3MiwgOTc4NzYsIDk3ODgwLCA5Nzg4NCwgOTc4OTEsIDk3ODk1LCA5NzkwMSwgCisgICAgOTc5MDcsIDk3OTE1LCA5NzkxOSwgOTc5MjYsIDk3OTM0LCA5NzkzOCwgOTc5NDIsIDk3OTQ4LCA5Nzk1MiwgOTc5NjEsIAorICAgIDk3OTcwLCA5Nzk3NywgOTc5ODcsIDk3OTkzLCA5Nzk5NywgOTgwMDEsIDk4MDA5LCA5ODAxNiwgOTgwMjMsIDk4MDI5LCAKKyAgICA5ODAzMywgOTgwNDEsIDk4MDQ1LCA5ODA1MiwgOTgwNjQsIDk4MDcxLCA5ODA4MSwgOTgwODcsIDk4MDkxLCA5ODEwMCwgCisgICAgOTgxMDcsIDk4MTE2LCA5ODEyMCwgOTgxMjQsIDk4MTMxLCA5ODEzNSwgOTgxMzksIDk4MTQzLCA5ODE0NywgOTgxNTAsIAorICAgIDk4MTU2LCA5ODE2MiwgOTgxNjYsIDk4MTcwLCA5ODE3NywgOTgxODQsIDk4MTkxLCA5ODE5OCwgOTgyMDUsIDk4MjEyLCAKKyAgICA5ODIxOSwgOTgyMjYsIDk4MjMyLCA5ODIzNiwgOTgyNDAsIDk4MjQ3LCA5ODI1NCwgOTgyNjEsIDk4MjY4LCA5ODI3NSwgCisgICAgOTgyNzksIDk4MjgyLCA5ODI4NywgOTgyOTEsIDk4Mjk1LCA5ODMwNCwgOTgzMTMsIDk4MzE3LCA5ODMyMSwgOTgzMjcsIAorICAgIDk4MzMzLCA5ODM1MCwgOTgzNTYsIDk4MzYwLCA5ODM2OSwgOTgzNzMsIDk4Mzc3LCA5ODM4NCwgOTgzOTIsIDk4NDAwLCAKKyAgICA5ODQwNiwgOTg0MTAsIDk4NDE0LCA5ODQxOCwgOTg0MjIsIDk4NDI1LCA5ODQzMSwgOTg0MzgsIDk4NDQ4LCA5ODQ1NSwgCisgICAgOTg0NjIsIDk4NDY5LCA5ODQ3NSwgOTg0ODIsIDk4NDg5LCA5ODQ5NiwgOTg1MDMsIDk4NTEwLCA5ODUxOSwgOTg1MjYsIAorICAgIDk4NTM4LCA5ODU0NSwgOTg1NTIsIDk4NTYyLCA5ODU3MywgOTg1ODAsIDk4NTg3LCA5ODU5NCwgOTg2MDEsIDk4NjA4LCAKKyAgICA5ODYxNSwgOTg2MjIsIDk4NjI5LCA5ODYzNiwgOTg2NDMsIDk4NjUzLCA5ODY2MywgOTg2NzMsIDk4NjgwLCA5ODY5MCwgCisgICAgOTg2OTcsIDk4NzA0LCA5ODcxMSwgOTg3MTgsIDk4NzI0LCA5ODczMSwgOTg3MzgsIDk4NzQ1LCA5ODc1MiwgOTg3NTksIAorICAgIDk4NzY2LCA5ODc3MywgOTg3ODAsIDk4Nzg2LCA5ODc5MywgOTg4MDAsIDk4ODA5LCA5ODgxNiwgOTg4MjMsIDk4ODI3LCAKKyAgICA5ODgzNSwgOTg4MzksIDk4ODQzLCA5ODg0NywgOTg4NTEsIDk4ODU1LCA5ODg2MiwgOTg4NjYsIDk4ODc1LCA5ODg3OSwgCisgICAgOTg4ODYsIDk4ODk0LCA5ODg5OCwgOTg5MDIsIDk4OTA2LCA5ODkxOSwgOTg5MzUsIDk4OTM5LCA5ODk0MywgOTg5NTAsIAorICAgIDk4OTU2LCA5ODk2MywgOTg5NjcsIDk4OTcxLCA5ODk3NSwgOTg5NzksIDk4OTgzLCA5ODk5MCwgOTg5OTQsIDk5MDEyLCAKKyAgICA5OTAxNiwgOTkwMjAsIDk5MDI3LCA5OTAzMSwgOTkwMzUsIDk5MDQxLCA5OTA0NSwgOTkwNDksIDk5MDU3LCA5OTA2MSwgCisgICAgOTkwNjUsIDk5MDY5LCA5OTA3MywgOTkwNzksIDk5MDkwLCA5OTA5OSwgOTkxMDgsIDk5MTE1LCA5OTEyMiwgOTkxMzMsIAorICAgIDk5MTQwLCA5OTE0NywgOTkxNTQsIDk5MTYxLCA5OTE2OCwgOTkxNzUsIDk5MTgyLCA5OTE5MiwgOTkxOTgsIDk5MjA1LCAKKyAgICA5OTIxNSwgOTkyMjQsIDk5MjMxLCA5OTI0MCwgOTkyNTAsIDk5MjU3LCA5OTI2NCwgOTkyNzEsIDk5Mjc4LCA5OTI5MCwgCisgICAgOTkyOTcsIDk5MzA0LCA5OTMxMSwgOTkzMTgsIDk5MzI1LCA5OTMzNSwgOTkzNDIsIDk5MzQ5LCA5OTM1OSwgOTkzNzIsIAorICAgIDk5Mzg0LCA5OTM5MSwgOTk0MDEsIDk5NDA4LCA5OTQxNSwgOTk0MjIsIDk5NDM2LCA5OTQ0MiwgOTk0NTAsIDk5NDYwLCAKKyAgICA5OTQ3MCwgOTk0NzcsIDk5NDg0LCA5OTQ5MCwgOTk0OTQsIDk5NTAxLCA5OTUxMSwgOTk1MTcsIDk5NTMwLCA5OTUzNCwgCisgICAgOTk1MzgsIDk5NTQ1LCA5OTU0OSwgOTk1NTYsIDk5NTY2LCA5OTU3MCwgOTk1NzQsIDk5NTc4LCA5OTU4MiwgOTk1ODYsIAorICAgIDk5NTkzLCA5OTU5NywgOTk2MDQsIDk5NjExLCA5OTYxOCwgOTk2MjcsIDk5NjM2LCA5OTY0NiwgOTk2NTMsIDk5NjYwLCAKKyAgICA5OTY2NywgOTk2NzcsIDk5Njg0LCA5OTY5NCwgOTk3MDEsIDk5NzExLCA5OTcxOCwgOTk3MjUsIDk5NzM1LCA5OTc0NSwgCisgICAgOTk3NTIsIDk5NzU4LCA5OTc2NiwgOTk3NzQsIDk5NzgwLCA5OTc4NiwgOTk3OTAsIDk5Nzk0LCA5OTgwMSwgOTk4MDksIAorICAgIDk5ODE1LCA5OTgxOSwgOTk4MjMsIDk5ODI3LCA5OTgzNCwgOTk4NDYsIDk5ODQ5LCA5OTg1NiwgOTk4NjIsIDk5ODY2LCAKKyAgICA5OTg3MCwgOTk4NzQsIDk5ODc4LCA5OTg4MiwgOTk4ODYsIDk5ODkwLCA5OTg5NCwgOTk4OTgsIDk5OTAyLCA5OTkwOSwgCisgICAgOTk5MTMsIDk5OTE5LCA5OTkyMywgOTk5MjcsIDk5OTMxLCA5OTkzNywgOTk5NDQsIDk5OTUxLCA5OTk1OCwgOTk5NjksIAorICAgIDk5OTc3LCA5OTk4MSwgOTk5ODcsIDk5OTk2LCAxMDAwMDMsIDEwMDAwOSwgMTAwMDEyLCAxMDAwMTYsIDEwMDAyMCwgCisgICAgMTAwMDI2LCAxMDAwMzUsIDEwMDA0MywgMTAwMDQ3LCAxMDAwNTMsIDEwMDA1NywgMTAwMDYxLCAxMDAwNjUsIDEwMDA3MSwgCisgICAgMTAwMDc4LCAxMDAwODQsIDEwMDA4OCwgMTAwMDk0LCAxMDAwOTgsIDEwMDEwMiwgMTAwMTExLCAxMDAxMjMsIDEwMDEyNywgCisgICAgMTAwMTM0LCAxMDAxNDEsIDEwMDE1MSwgMTAwMTU4LCAxMDAxNzAsIDEwMDE3NywgMTAwMTg0LCAxMDAxOTEsIDEwMDIwMiwgCisgICAgMTAwMjEyLCAxMDAyMjUsIDEwMDIzNSwgMTAwMjQyLCAxMDAyNDYsIDEwMDI1MCwgMTAwMjU0LCAxMDAyNTgsIDEwMDI2NywgCisgICAgMTAwMjc2LCAxMDAyODUsIDEwMDMwMiwgMTAwMzExLCAxMDAzMTcsIDEwMDMyNCwgMTAwMzMyLCAxMDAzNDUsIDEwMDM0OSwgCisgICAgMTAwMzU4LCAxMDAzNjcsIDEwMDM3NiwgMTAwMzg1LCAxMDAzOTYsIDEwMDQwNSwgMTAwNDE0LCAxMDA0MjMsIDEwMDQzMiwgCisgICAgMTAwNDQxLCAxMDA0NTAsIDEwMDQ2MCwgMTAwNDYzLCAxMDA0NjcsIDEwMDQ3MSwgMTAwNDc1LCAxMDA0NzksIDEwMDQ4MywgCisgICAgMTAwNDg5LCAxMDA0OTYsIDEwMDUwMywgMTAwNTEwLCAxMDA1MTYsIDEwMDUyMiwgMTAwNTI5LCAxMDA1MzUsIDEwMDU0MiwgCisgICAgMTAwNTUwLCAxMDA1NTQsIDEwMDU2MSwgMTAwNTY4LCAxMDA1NzUsIDEwMDU4MywgMTAwNTg2LCAxMDA1OTAsIDEwMDU5NCwgCisgICAgMTAwNTk4LCAxMDA2MDEsIDEwMDYwNywgMTAwNjExLCAxMDA2MTcsIDEwMDYyNCwgMTAwNjMxLCAxMDA2MzcsIDEwMDY0NCwgCisgICAgMTAwNjUxLCAxMDA2NTgsIDEwMDY2NSwgMTAwNjcyLCAxMDA2NzksIDEwMDY4NiwgMTAwNjkzLCAxMDA3MDAsIDEwMDcwNywgCisgICAgMTAwNzE0LCAxMDA3MjEsIDEwMDcyOCwgMTAwNzM1LCAxMDA3NDEsIDEwMDc0NSwgMTAwNzU0LCAxMDA3NTgsIDEwMDc2MiwgCisgICAgMTAwNzY2LCAxMDA3NzAsIDEwMDc3NiwgMTAwNzgzLCAxMDA3OTAsIDEwMDc5NywgMTAwODA0LCAxMDA4MTEsIDEwMDgxNywgCisgICAgMTAwODI1LCAxMDA4MjksIDEwMDgzMywgMTAwODM3LCAxMDA4NDEsIDEwMDg0NywgMTAwODY0LCAxMDA4ODEsIDEwMDg4NSwgCisgICAgMTAwODg5LCAxMDA4OTMsIDEwMDg5NywgMTAwOTAxLCAxMDA5MDUsIDEwMDkxMSwgMTAwOTE4LCAxMDA5MjIsIDEwMDkyOCwgCisgICAgMTAwOTM1LCAxMDA5NDIsIDEwMDk0OSwgMTAwOTU2LCAxMDA5NjMsIDEwMDk3MiwgMTAwOTc5LCAxMDA5ODYsIDEwMDk5MywgCisgICAgMTAxMDAwLCAxMDEwMDQsIDEwMTAwOCwgMTAxMDE0LCAxMDEwMjYsIDEwMTAzMCwgMTAxMDM0LCAxMDEwNDMsIDEwMTA0NywgCisgICAgMTAxMDUxLCAxMDEwNTUsIDEwMTA2MSwgMTAxMDY1LCAxMDEwNjksIDEwMTA3OCwgMTAxMDgyLCAxMDEwODYsIDEwMTA5MCwgCisgICAgMTAxMDk3LCAxMDExMDEsIDEwMTEwNSwgMTAxMTA5LCAxMDExMTMsIDEwMTExNywgMTAxMTIxLCAxMDExMjUsIDEwMTEyOSwgCisgICAgMTAxMTM1LCAxMDExNDIsIDEwMTE0OSwgMTAxMTU1LCAxMDExNTksIDEwMTE3NiwgMTAxMTgyLCAxMDExODYsIDEwMTE5MiwgCisgICAgMTAxMTk4LCAxMDEyMDQsIDEwMTIxMCwgMTAxMjE2LCAxMDEyMjIsIDEwMTIyNiwgMTAxMjMwLCAxMDEyMzQsIDEwMTI0MCwgCisgICAgMTAxMjQ0LCAxMDEyNTAsIDEwMTI1NCwgMTAxMjU4LCAxMDEyNjUsIDEwMTI3MiwgMTAxMjg5LCAxMDEyOTMsIDEwMTI5NywgCisgICAgMTAxMzAxLCAxMDEzMDUsIDEwMTMwOSwgMTAxMzIxLCAxMDEzMjQsIDEwMTMyOSwgMTAxMzM0LCAxMDEzNDksIDEwMTM1OSwgCisgICAgMTAxMzcxLCAxMDEzNzUsIDEwMTM3OSwgMTAxMzgzLCAxMDEzODksIDEwMTM5NiwgMTAxNDAzLCAxMDE0MTMsIDEwMTQyNSwgCisgICAgMTAxNDMxLCAxMDE0MzcsIDEwMTQ0NiwgMTAxNDUwLCAxMDE0NTQsIDEwMTQ2MSwgMTAxNDcxLCAxMDE0NzgsIDEwMTQ4NCwgCisgICAgMTAxNDg4LCAxMDE0OTIsIDEwMTQ5OSwgMTAxNTA1LCAxMDE1MDksIDEwMTUxNSwgMTAxNTE5LCAxMDE1MjcsIDEwMTUzMywgCisgICAgMTAxNTM3LCAxMDE1NDUsIDEwMTU1MywgMTAxNTYwLCAxMDE1NjYsIDEwMTU3MywgMTAxNTgwLCAxMDE1OTAsIDEwMTYwMCwgCisgICAgMTAxNjA0LCAxMDE2MDgsIDEwMTYxMiwgMTAxNjE2LCAxMDE2MjIsIDEwMTYyOSwgMTAxNjM1LCAxMDE2NDIsIDEwMTY0OSwgCisgICAgMTAxNjU2LCAxMDE2NjUsIDEwMTY3MiwgMTAxNjc5LCAxMDE2ODUsIDEwMTY5MiwgMTAxNjk5LCAxMDE3MDYsIDEwMTcxMywgCisgICAgMTAxNzIwLCAxMDE3MjcsIDEwMTczMywgMTAxNzQwLCAxMDE3NDcsIDEwMTc1NCwgMTAxNzYzLCAxMDE3NzAsIDEwMTc3NywgCisgICAgMTAxNzgxLCAxMDE3ODcsIDEwMTc5MSwgMTAxNzk3LCAxMDE4MDQsIDEwMTgxMSwgMTAxODE4LCAxMDE4MjIsIDEwMTgyNiwgCisgICAgMTAxODMwLCAxMDE4MzQsIDEwMTgzOCwgMTAxODQ1LCAxMDE4NDksIDEwMTg1MywgMTAxODU5LCAxMDE4NjcsIDEwMTg3MSwgCisgICAgMTAxODc1LCAxMDE4NzksIDEwMTg4MywgMTAxODkwLCAxMDE4OTQsIDEwMTg5OCwgMTAxOTA2LCAxMDE5MTAsIDEwMTkxNCwgCisgICAgMTAxOTE4LCAxMDE5MjIsIDEwMTkyOCwgMTAxOTMyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAxMDE5MzYsIDEwMTk0MiwgMTAxOTQ4LCAxMDE5NTUsIDEwMTk2MiwgMTAxOTY5LCAxMDE5NzYsIDEwMTk4MywgCisgICAgMTAxOTkwLCAxMDE5OTYsIDEwMjAwMywgMTAyMDEwLCAxMDIwMTcsIDEwMjAyNCwgMTAyMDMxLCAxMDIwMzgsIDEwMjA0NCwgCisgICAgMTAyMDUwLCAxMDIwNTYsIDEwMjA2MiwgMTAyMDY4LCAxMDIwNzQsIDEwMjA4MCwgMTAyMDg2LCAxMDIwOTIsIDEwMjA5OSwgCisgICAgMTAyMTA2LCAxMDIxMTMsIDEwMjEyMCwgMTAyMTI3LCAxMDIxMzQsIDEwMjE0MCwgMTAyMTQ2LCAxMDIxNTIsIDEwMjE1OSwgCisgICAgMTAyMTY2LCAxMDIxNzIsIDEwMjE3OCwgMTAyMTg3LCAxMDIxOTQsIDEwMjIwMSwgMTAyMjA4LCAxMDIyMTUsIDEwMjIyMiwgCisgICAgMTAyMjI5LCAxMDIyMzUsIDEwMjI0MSwgMTAyMjQ3LCAxMDIyNTYsIDEwMjI2MywgMTAyMjcwLCAxMDIyODEsIDEwMjI5MiwgCisgICAgMTAyMjk4LCAxMDIzMDQsIDEwMjMxMCwgMTAyMzE5LCAxMDIzMjYsIDEwMjMzMywgMTAyMzQzLCAxMDIzNTMsIDEwMjM2NCwgCisgICAgMTAyMzc1LCAxMDIzODcsIDEwMjQwMCwgMTAyNDExLCAxMDI0MjIsIDEwMjQzNCwgMTAyNDQ3LCAxMDI0NTgsIDEwMjQ2OSwgCisgICAgMTAyNDgwLCAxMDI0OTEsIDEwMjUwMiwgMTAyNTE0LCAxMDI1MjIsIDEwMjUzMCwgMTAyNTM5LCAxMDI1NDgsIDEwMjU1NywgCisgICAgMTAyNTYzLCAxMDI1NjksIDEwMjU3NSwgMTAyNTgyLCAxMDI1OTIsIDEwMjU5OSwgMTAyNjA5LCAxMDI2MTQsIDEwMjYxOSwgCisgICAgMTAyNjI1LCAxMDI2MzEsIDEwMjYzOSwgMTAyNjQ3LCAxMDI2NTYsIDEwMjY2NywgMTAyNjc4LCAxMDI2ODYsIDEwMjY5NCwgCisgICAgMTAyNzAzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDI3MTIsIDEwMjcyMywgMTAyNzMwLCAKKyAgICAxMDI3MzgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEwMjc0NiwgMTAyNzUwLCAxMDI3NTQsIAorICAgIDEwMjc1OCwgMTAyNzYyLCAxMDI3NjYsIDEwMjc3MCwgMTAyNzc0LCAxMDI3NzgsIDEwMjc4MiwgMTAyNzg2LCAxMDI3OTAsIAorICAgIDEwMjc5NCwgMTAyNzk4LCAxMDI4MDIsIDEwMjgwNiwgMTAyODEwLCAxMDI4MTQsIDEwMjgxOCwgMTAyODIyLCAxMDI4MjYsIAorICAgIDEwMjgzMCwgMTAyODM0LCAxMDI4MzgsIDEwMjg0MiwgMTAyODQ2LCAxMDI4NTAsIDEwMjg1NCwgMTAyODU4LCAxMDI4NjIsIAorICAgIDEwMjg2NiwgMTAyODcwLCAxMDI4NzQsIDEwMjg3OCwgMTAyODgyLCAxMDI4ODYsIDEwMjg5MCwgMTAyODk0LCAxMDI4OTgsIAorICAgIDEwMjkwMiwgMTAyOTA2LCAxMDI5MTAsIDEwMjkxNCwgMTAyOTE4LCAxMDI5MjIsIDEwMjkyNiwgMTAyOTMwLCAxMDI5MzQsIAorICAgIDEwMjkzOCwgMTAyOTQyLCAxMDI5NDYsIDEwMjk1MCwgMTAyOTU0LCAxMDI5NTgsIDEwMjk2MiwgMTAyOTY2LCAxMDI5NzAsIAorICAgIDEwMjk3NCwgMTAyOTc4LCAxMDI5ODIsIDEwMjk4NiwgMTAyOTkwLCAxMDI5OTQsIDEwMjk5OCwgMTAzMDAyLCAxMDMwMDYsIAorICAgIDEwMzAxMCwgMTAzMDE0LCAxMDMwMTgsIDEwMzAyMiwgMTAzMDI2LCAxMDMwMzAsIDEwMzAzNCwgMTAzMDM4LCAxMDMwNDIsIAorICAgIDEwMzA0NiwgMTAzMDUwLCAxMDMwNTQsIDEwMzA1OCwgMTAzMDYyLCAxMDMwNjYsIDEwMzA3MCwgMTAzMDc0LCAxMDMwNzgsIAorICAgIDEwMzA4MiwgMTAzMDg2LCAxMDMwOTAsIDEwMzA5NCwgMTAzMDk4LCAxMDMxMDIsIDEwMzEwNiwgMTAzMTEwLCAxMDMxMTQsIAorICAgIDEwMzExOCwgMTAzMTIyLCAxMDMxMjYsIDEwMzEzMCwgMTAzMTM0LCAxMDMxMzgsIDEwMzE0MiwgMTAzMTQ2LCAxMDMxNTAsIAorICAgIDEwMzE1NCwgMTAzMTU4LCAxMDMxNjIsIDEwMzE2NiwgMTAzMTcwLCAxMDMxNzQsIDEwMzE3OCwgMTAzMTgyLCAxMDMxODYsIAorICAgIDEwMzE5MCwgMTAzMTk0LCAxMDMxOTgsIDEwMzIwMiwgMTAzMjA2LCAxMDMyMTAsIDEwMzIxNCwgMTAzMjE4LCAxMDMyMjIsIAorICAgIDEwMzIyNiwgMTAzMjMwLCAxMDMyMzQsIDEwMzIzOCwgMTAzMjQyLCAxMDMyNDYsIDEwMzI1MCwgMTAzMjU0LCAxMDMyNTgsIAorICAgIDEwMzI2MiwgMTAzMjY2LCAxMDMyNzAsIDEwMzI3NCwgMTAzMjc4LCAxMDMyODIsIDEwMzI4NiwgMTAzMjkwLCAxMDMyOTQsIAorICAgIDEwMzI5OCwgMTAzMzAyLCAxMDMzMDYsIDEwMzMxMCwgMTAzMzE0LCAxMDMzMTgsIDEwMzMyMiwgMTAzMzI2LCAxMDMzMzAsIAorICAgIDEwMzMzNCwgMTAzMzM4LCAxMDMzNDIsIDEwMzM0NiwgMTAzMzUwLCAxMDMzNTQsIDEwMzM1OCwgMTAzMzYyLCAxMDMzNjYsIAorICAgIDEwMzM3MCwgMTAzMzc0LCAxMDMzNzgsIDEwMzM4MiwgMTAzMzg2LCAxMDMzOTAsIDEwMzM5NCwgMTAzMzk4LCAxMDM0MDIsIAorICAgIDEwMzQwNiwgMTAzNDEwLCAxMDM0MTQsIDEwMzQxOCwgMTAzNDIyLCAxMDM0MjYsIDEwMzQzMCwgMTAzNDM0LCAxMDM0MzgsIAorICAgIDEwMzQ0MiwgMTAzNDQ2LCAxMDM0NTAsIDEwMzQ1NCwgMTAzNDU4LCAxMDM0NjIsIDEwMzQ2NiwgMTAzNDcwLCAxMDM0NzQsIAorICAgIDEwMzQ3OCwgMTAzNDgyLCAxMDM0ODYsIDEwMzQ5MCwgMTAzNDk0LCAxMDM0OTgsIDEwMzUwMiwgMTAzNTA2LCAxMDM1MTAsIAorICAgIDEwMzUxNCwgMTAzNTE4LCAxMDM1MjIsIDEwMzUyNiwgMTAzNTMwLCAxMDM1MzQsIDEwMzUzOCwgMTAzNTQyLCAxMDM1NDYsIAorICAgIDEwMzU1MCwgMTAzNTU0LCAxMDM1NTgsIDEwMzU2MiwgMTAzNTY2LCAxMDM1NzAsIDEwMzU3NCwgMTAzNTc4LCAxMDM1ODIsIAorICAgIDEwMzU4NiwgMTAzNTkwLCAxMDM1OTQsIDEwMzU5OCwgMTAzNjAyLCAxMDM2MDYsIDEwMzYxMCwgMTAzNjE0LCAxMDM2MTgsIAorICAgIDEwMzYyMiwgMTAzNjI2LCAxMDM2MzAsIDEwMzYzNCwgMTAzNjM4LCAxMDM2NDIsIDEwMzY0NiwgMTAzNjUwLCAxMDM2NTQsIAorICAgIDEwMzY1OCwgMTAzNjYyLCAxMDM2NjYsIDEwMzY3MCwgMTAzNjc0LCAxMDM2NzgsIDEwMzY4MiwgMTAzNjg2LCAxMDM2OTAsIAorICAgIDEwMzY5NCwgMTAzNjk4LCAxMDM3MDIsIDEwMzcwNiwgMTAzNzEwLCAxMDM3MTQsIDEwMzcxOCwgMTAzNzIyLCAxMDM3MjYsIAorICAgIDEwMzczMCwgMTAzNzM0LCAxMDM3MzgsIDEwMzc0MiwgMTAzNzQ2LCAxMDM3NTAsIDEwMzc1NCwgMTAzNzU4LCAxMDM3NjIsIAorICAgIDEwMzc2NiwgMTAzNzcwLCAxMDM3NzQsIDEwMzc3OCwgMTAzNzgyLCAxMDM3ODYsIDEwMzc5MCwgMTAzNzk0LCAxMDM3OTgsIAorICAgIDEwMzgwMiwgMTAzODA2LCAxMDM4MTAsIDEwMzgxNCwgMTAzODE4LCAxMDM4MjIsIDEwMzgyNiwgMTAzODMwLCAxMDM4MzQsIAorICAgIDEwMzgzOCwgMTAzODQyLCAxMDM4NDYsIDEwMzg1MCwgMTAzODU0LCAxMDM4NTgsIDEwMzg2MiwgMTAzODY2LCAxMDM4NzAsIAorICAgIDEwMzg3NCwgMTAzODc4LCAxMDM4ODIsIDEwMzg4NiwgMTAzODkwLCAxMDM4OTQsIDEwMzg5OCwgMTAzOTAyLCAxMDM5MDYsIAorICAgIDEwMzkxMCwgMTAzOTE0LCAxMDM5MTgsIDEwMzkyMiwgMTAzOTI2LCAxMDM5MzAsIDEwMzkzNCwgMTAzOTM4LCAxMDM5NDIsIAorICAgIDEwMzk0NiwgMTAzOTUwLCAxMDM5NTQsIDEwMzk1OCwgMTAzOTYyLCAxMDM5NjYsIDEwMzk3MCwgMTAzOTc0LCAxMDM5NzgsIAorICAgIDEwMzk4MiwgMTAzOTg2LCAxMDM5OTAsIDEwMzk5NCwgMTAzOTk4LCAxMDQwMDIsIDEwNDAwNiwgMTA0MDEwLCAxMDQwMTQsIAorICAgIDEwNDAxOCwgMTA0MDIyLCAxMDQwMjYsIDEwNDAzMCwgMTA0MDM0LCAxMDQwMzgsIDEwNDA0MiwgMTA0MDQ2LCAxMDQwNTAsIAorICAgIDEwNDA1NCwgMTA0MDU4LCAxMDQwNjIsIDEwNDA2NiwgMTA0MDcwLCAxMDQwNzQsIDEwNDA3OCwgMTA0MDgyLCAxMDQwODYsIAorICAgIDEwNDA5MCwgMTA0MDk0LCAxMDQwOTgsIDEwNDEwMiwgMTA0MTA2LCAxMDQxMTAsIDEwNDExNCwgMTA0MTE4LCAxMDQxMjIsIAorICAgIDEwNDEyNiwgMTA0MTMwLCAxMDQxMzQsIDEwNDEzOCwgMTA0MTQyLCAxMDQxNDYsIDEwNDE1MCwgMTA0MTU0LCAxMDQxNTgsIAorICAgIDEwNDE2MiwgMTA0MTY2LCAxMDQxNzAsIDEwNDE3NCwgMTA0MTc4LCAxMDQxODIsIDEwNDE4NiwgMTA0MTkwLCAxMDQxOTQsIAorICAgIDEwNDE5OCwgMTA0MjAyLCAxMDQyMDYsIDEwNDIxMCwgMTA0MjE0LCAxMDQyMTgsIDEwNDIyMiwgMTA0MjI2LCAxMDQyMzAsIAorICAgIDEwNDIzNCwgMTA0MjM4LCAxMDQyNDIsIDEwNDI0NiwgMTA0MjUwLCAxMDQyNTQsIDEwNDI1OCwgMTA0MjYyLCAxMDQyNjYsIAorICAgIDEwNDI3MCwgMTA0Mjc0LCAxMDQyNzgsIDEwNDI4MiwgMTA0Mjg2LCAxMDQyOTAsIDEwNDI5NCwgMTA0Mjk4LCAxMDQzMDIsIAorICAgIDEwNDMwNiwgMTA0MzEwLCAxMDQzMTQsIDEwNDMxOCwgMTA0MzIyLCAxMDQzMjYsIDEwNDMzMCwgMTA0MzM0LCAxMDQzMzgsIAorICAgIDEwNDM0MiwgMTA0MzQ2LCAxMDQzNTAsIDEwNDM1NCwgMTA0MzU4LCAxMDQzNjIsIDEwNDM2NiwgMTA0MzcwLCAxMDQzNzQsIAorICAgIDEwNDM3OCwgMTA0MzgyLCAxMDQzODYsIDEwNDM5MCwgMTA0Mzk0LCAxMDQzOTgsIDEwNDQwMiwgMTA0NDA2LCAxMDQ0MTAsIAorICAgIDEwNDQxNCwgMTA0NDE4LCAxMDQ0MjIsIDEwNDQyNiwgMTA0NDMwLCAxMDQ0MzQsIDEwNDQzOCwgMTA0NDQyLCAxMDQ0NDYsIAorICAgIDEwNDQ1MCwgMTA0NDU0LCAxMDQ0NTgsIDEwNDQ2MiwgMTA0NDY2LCAxMDQ0NzAsIDEwNDQ3NCwgMTA0NDc4LCAxMDQ0ODIsIAorICAgIDEwNDQ4NiwgMTA0NDkwLCAxMDQ0OTQsIDEwNDQ5OCwgMTA0NTAyLCAxMDQ1MDYsIDEwNDUxMCwgMTA0NTE0LCAxMDQ1MTgsIAorICAgIDEwNDUyMiwgMTA0NTI2LCAxMDQ1MzAsIDEwNDUzNCwgMTA0NTM4LCAxMDQ1NDIsIDEwNDU0NiwgMTA0NTUwLCAxMDQ1NTQsIAorICAgIDEwNDU1OCwgMTA0NTYyLCAxMDQ1NjYsIDEwNDU3MCwgMTA0NTc0LCAxMDQ1NzgsIDEwNDU4MiwgMTA0NTg2LCAxMDQ1OTAsIAorICAgIDEwNDU5NCwgMTA0NTk4LCAxMDQ2MDIsIDEwNDYwNiwgMTA0NjEwLCAxMDQ2MTQsIDEwNDYxOCwgMTA0NjIyLCAxMDQ2MjYsIAorICAgIDEwNDYzMCwgMTA0NjM0LCAxMDQ2MzgsIDEwNDY0MiwgMTA0NjQ2LCAxMDQ2NTAsIDEwNDY1NCwgMTA0NjU4LCAxMDQ2NjIsIAorICAgIDEwNDY2NiwgMTA0NjcwLCAxMDQ2NzQsIDEwNDY3OCwgMTA0NjgyLCAxMDQ2ODYsIDEwNDY5MCwgMTA0Njk0LCAxMDQ2OTgsIAorICAgIDEwNDcwMiwgMTA0NzA2LCAxMDQ3MTAsIDEwNDcxNCwgMTA0NzE4LCAxMDQ3MjIsIDEwNDcyNiwgMTA0NzMwLCAxMDQ3MzQsIAorICAgIDEwNDczOCwgMTA0NzQyLCAxMDQ3NDYsIDEwNDc1MCwgMTA0NzU0LCAxMDQ3NTgsIDEwNDc2MiwgMTA0NzY2LCAxMDQ3NzAsIAorICAgIDEwNDc3NCwgMTA0Nzc4LCAxMDQ3ODIsIDEwNDc4NiwgMTA0NzkwLCAxMDQ3OTQsIDEwNDc5OCwgMTA0ODAyLCAxMDQ4MDYsIAorICAgIDEwNDgxMCwgMTA0ODE0LCAxMDQ4MTgsIDEwNDgyMiwgMTA0ODI2LCAxMDQ4MzAsIDEwNDgzNCwgMTA0ODM4LCAxMDQ4NDIsIAorICAgIDEwNDg0NiwgMTA0ODUwLCAxMDQ4NTQsIDEwNDg1OCwgMTA0ODYyLCAxMDQ4NjYsIDEwNDg3MCwgMTA0ODc0LCAxMDQ4NzgsIAorICAgIDEwNDg4MiwgMTA0ODg2LCAxMDQ4OTAsIDEwNDg5NCwgMTA0ODk4LCAxMDQ5MDIsIDEwNDkwNiwgMTA0OTEwLCAxMDQ5MTQsIAorICAgIDEwNDkxOCwgMTA0OTIyLCAxMDQ5MjYsIDEwNDkzMCwgMTA0OTM0LCAxMDQ5MzgsIDEwNDk0MiwgMTA0OTQ2LCAxMDQ5NTAsIAorICAgIDEwNDk1NCwgMTA0OTU4LCAxMDQ5NjIsIDEwNDk2NiwgMTA0OTcwLCAxMDQ5NzQsIDEwNDk3OCwgMTA0OTgyLCAxMDQ5ODYsIAorICAgIDEwNDk5MCwgMTA0OTk0LCAxMDQ5OTgsIDEwNTAwMiwgMTA1MDA2LCAxMDUwMTAsIDEwNTAxNCwgMTA1MDE4LCAxMDUwMjIsIAorICAgIDEwNTAyNiwgMTA1MDMwLCAxMDUwMzQsIDEwNTAzOCwgMTA1MDQyLCAxMDUwNDYsIDEwNTA1MCwgMTA1MDU0LCAxMDUwNTgsIAorICAgIDEwNTA2MiwgMTA1MDY2LCAxMDUwNzAsIDEwNTA3NCwgMTA1MDc4LCAxMDUwODIsIDEwNTA4NiwgMTA1MDkwLCAxMDUwOTQsIAorICAgIDEwNTA5OCwgMTA1MTAyLCAxMDUxMDYsIDEwNTExMCwgMTA1MTE0LCAxMDUxMTgsIDEwNTEyMiwgMTA1MTI2LCAxMDUxMzAsIAorICAgIDEwNTEzNCwgMTA1MTM4LCAxMDUxNDIsIDEwNTE0NiwgMTA1MTUwLCAxMDUxNTQsIDEwNTE1OCwgMTA1MTYyLCAxMDUxNjYsIAorICAgIDEwNTE3MCwgMTA1MTc0LCAxMDUxNzgsIDEwNTE4MiwgMTA1MTg2LCAxMDUxOTAsIDEwNTE5NCwgMTA1MTk4LCAxMDUyMDIsIAorICAgIDEwNTIwNiwgMTA1MjEwLCAxMDUyMTQsIDEwNTIxOCwgMTA1MjIyLCAxMDUyMjYsIDEwNTIzMCwgMTA1MjM0LCAxMDUyMzgsIAorICAgIDEwNTI0MiwgMTA1MjQ2LCAxMDUyNTAsIDEwNTI1NCwgMTA1MjU4LCAxMDUyNjIsIDEwNTI2NiwgMTA1MjcwLCAxMDUyNzQsIAorICAgIDEwNTI3OCwgMTA1MjgyLCAxMDUyODYsIDEwNTI5MCwgMTA1Mjk0LCAxMDUyOTgsIDEwNTMwMiwgMTA1MzA2LCAxMDUzMTAsIAorICAgIDEwNTMxNCwgMTA1MzE4LCAxMDUzMjIsIDEwNTMyNiwgMTA1MzMwLCAxMDUzMzQsIDEwNTMzOCwgMTA1MzQyLCAxMDUzNDYsIAorICAgIDEwNTM1MCwgMTA1MzU0LCAxMDUzNTgsIDEwNTM2MiwgMTA1MzY2LCAxMDUzNzAsIDEwNTM3NCwgMTA1Mzc4LCAxMDUzODIsIAorICAgIDEwNTM4NiwgMTA1MzkwLCAxMDUzOTQsIDEwNTM5OCwgMTA1NDAyLCAxMDU0MDYsIDEwNTQxMCwgMTA1NDE0LCAxMDU0MTgsIAorICAgIDEwNTQyMiwgMTA1NDI2LCAxMDU0MzAsIDEwNTQzNCwgMTA1NDM4LCAxMDU0NDIsIDEwNTQ0NiwgMTA1NDUwLCAxMDU0NTQsIAorICAgIDEwNTQ1OCwgMTA1NDYyLCAxMDU0NjYsIDEwNTQ3MCwgMTA1NDc0LCAxMDU0NzgsIDEwNTQ4MiwgMTA1NDg2LCAxMDU0OTAsIAorICAgIDEwNTQ5NCwgMTA1NDk4LCAxMDU1MDIsIDEwNTUwNiwgMTA1NTEwLCAxMDU1MTQsIDEwNTUxOCwgMTA1NTIyLCAxMDU1MjYsIAorICAgIDEwNTUzMCwgMTA1NTM0LCAxMDU1MzgsIDEwNTU0MiwgMTA1NTQ2LCAxMDU1NTAsIDEwNTU1NCwgMTA1NTU4LCAxMDU1NjIsIAorICAgIDEwNTU2NiwgMTA1NTcwLCAxMDU1NzQsIDEwNTU3OCwgMTA1NTgyLCAxMDU1ODYsIDEwNTU5MCwgMTA1NTk0LCAxMDU1OTgsIAorICAgIDEwNTYwMiwgMTA1NjA2LCAxMDU2MTAsIDEwNTYxNCwgMTA1NjE4LCAxMDU2MjIsIDEwNTYyNiwgMTA1NjMwLCAxMDU2MzQsIAorICAgIDEwNTYzOCwgMTA1NjQyLCAxMDU2NDYsIDEwNTY1MCwgMTA1NjU0LCAxMDU2NTgsIDEwNTY2MiwgMTA1NjY2LCAxMDU2NzAsIAorICAgIDEwNTY3NCwgMTA1Njc4LCAxMDU2ODIsIDEwNTY4NiwgMTA1NjkwLCAxMDU2OTQsIDEwNTY5OCwgMTA1NzAyLCAxMDU3MDYsIAorICAgIDEwNTcxMCwgMTA1NzE0LCAxMDU3MTgsIDEwNTcyMiwgMTA1NzI2LCAxMDU3MzAsIDEwNTczNCwgMTA1NzM4LCAxMDU3NDIsIAorICAgIDEwNTc0NiwgMTA1NzUwLCAxMDU3NTQsIDEwNTc1OCwgMTA1NzYyLCAxMDU3NjYsIDEwNTc3MCwgMTA1Nzc0LCAxMDU3NzgsIAorICAgIDEwNTc4MiwgMTA1Nzg2LCAxMDU3OTAsIDEwNTc5NCwgMTA1Nzk4LCAxMDU4MDIsIDEwNTgwNiwgMTA1ODEwLCAxMDU4MTQsIAorICAgIDEwNTgxOCwgMTA1ODIyLCAxMDU4MjYsIDEwNTgzMCwgMTA1ODM0LCAxMDU4MzgsIDEwNTg0MiwgMTA1ODQ2LCAxMDU4NTAsIAorICAgIDEwNTg1NCwgMTA1ODU4LCAxMDU4NjIsIDEwNTg2NiwgMTA1ODcwLCAxMDU4NzQsIDEwNTg3OCwgMTA1ODgyLCAxMDU4ODYsIAorICAgIDEwNTg5MCwgMTA1ODk0LCAxMDU4OTgsIDEwNTkwMiwgMTA1OTA2LCAxMDU5MTAsIDEwNTkxNCwgMTA1OTE4LCAxMDU5MjIsIAorICAgIDEwNTkyNiwgMTA1OTMwLCAxMDU5MzQsIDEwNTkzOCwgMTA1OTQyLCAxMDU5NDYsIDEwNTk1MCwgMTA1OTU0LCAxMDU5NTgsIAorICAgIDEwNTk2MiwgMTA1OTY2LCAxMDU5NzAsIDEwNTk3NCwgMTA1OTc4LCAxMDU5ODIsIDEwNTk4NiwgMTA1OTkwLCAxMDU5OTQsIAorICAgIDEwNTk5OCwgMTA2MDAyLCAxMDYwMDYsIDEwNjAxMCwgMTA2MDE0LCAxMDYwMTgsIDEwNjAyMiwgMTA2MDI2LCAxMDYwMzAsIAorICAgIDEwNjAzNCwgMTA2MDM4LCAxMDYwNDIsIDEwNjA0NiwgMTA2MDUwLCAxMDYwNTQsIDEwNjA1OCwgMTA2MDYyLCAxMDYwNjYsIAorICAgIDEwNjA3MCwgMTA2MDc0LCAxMDYwNzgsIDEwNjA4MiwgMTA2MDg2LCAxMDYwOTAsIDEwNjA5NCwgMTA2MDk4LCAxMDYxMDIsIAorICAgIDEwNjEwNiwgMTA2MTEwLCAxMDYxMTQsIDEwNjExOCwgMTA2MTIyLCAxMDYxMjYsIDEwNjEzMCwgMTA2MTM0LCAxMDYxMzgsIAorICAgIDEwNjE0MiwgMTA2MTQ2LCAxMDYxNTAsIDEwNjE1NCwgMTA2MTU4LCAxMDYxNjIsIDEwNjE2NiwgMTA2MTcwLCAxMDYxNzQsIAorICAgIDEwNjE3OCwgMTA2MTgyLCAxMDYxODYsIDEwNjE5MCwgMTA2MTk0LCAxMDYxOTgsIDEwNjIwMiwgMTA2MjA2LCAxMDYyMTAsIAorICAgIDEwNjIxNCwgMTA2MjE4LCAxMDYyMjIsIDEwNjIyNiwgMTA2MjMwLCAxMDYyMzQsIDEwNjIzOCwgMTA2MjQyLCAxMDYyNDYsIAorICAgIDEwNjI1MCwgMTA2MjU0LCAxMDYyNTgsIDEwNjI2MiwgMTA2MjY2LCAxMDYyNzAsIDEwNjI3NCwgMTA2Mjc4LCAxMDYyODIsIAorICAgIDEwNjI4NiwgMTA2MjkwLCAxMDYyOTQsIDEwNjI5OCwgMTA2MzAyLCAxMDYzMDYsIDEwNjMxMCwgMTA2MzE0LCAxMDYzMTgsIAorICAgIDEwNjMyMiwgMTA2MzI2LCAxMDYzMzAsIDEwNjMzNCwgMTA2MzM4LCAxMDYzNDIsIDEwNjM0NiwgMTA2MzUwLCAxMDYzNTQsIAorICAgIDEwNjM1OCwgMTA2MzYyLCAxMDYzNjYsIDEwNjM3MCwgMTA2Mzc0LCAxMDYzNzgsIDEwNjM4MiwgMTA2Mzg2LCAxMDYzOTAsIAorICAgIDEwNjM5NCwgMTA2Mzk4LCAxMDY0MDIsIDEwNjQwNiwgMTA2NDEwLCAxMDY0MTQsIDEwNjQxOCwgMTA2NDIyLCAxMDY0MjYsIAorICAgIDEwNjQzMCwgMTA2NDM0LCAxMDY0MzgsIDEwNjQ0MiwgMTA2NDQ2LCAxMDY0NTAsIDEwNjQ1NCwgMTA2NDU4LCAxMDY0NjIsIAorICAgIDEwNjQ2NiwgMTA2NDcwLCAxMDY0NzQsIDEwNjQ3OCwgMTA2NDgyLCAxMDY0ODYsIDEwNjQ5MCwgMTA2NDk0LCAxMDY0OTgsIAorICAgIDEwNjUwMiwgMTA2NTA2LCAxMDY1MTAsIDEwNjUxNCwgMTA2NTE4LCAxMDY1MjIsIDEwNjUyNiwgMTA2NTMwLCAxMDY1MzQsIAorICAgIDEwNjUzOCwgMTA2NTQyLCAxMDY1NDYsIDEwNjU1MCwgMTA2NTU0LCAxMDY1NTgsIDEwNjU2MiwgMTA2NTY2LCAxMDY1NzAsIAorICAgIDEwNjU3NCwgMTA2NTc4LCAxMDY1ODIsIDEwNjU4NiwgMTA2NTkwLCAxMDY1OTQsIDEwNjU5OCwgMTA2NjAyLCAxMDY2MDYsIAorICAgIDEwNjYxMCwgMTA2NjE0LCAxMDY2MTgsIDEwNjYyMiwgMTA2NjI2LCAxMDY2MzAsIDEwNjYzNCwgMTA2NjM4LCAxMDY2NDIsIAorICAgIDEwNjY0NiwgMTA2NjUwLCAxMDY2NTQsIDEwNjY1OCwgMTA2NjYyLCAxMDY2NjYsIDEwNjY3MCwgMTA2Njc0LCAxMDY2NzgsIAorICAgIDEwNjY4MiwgMTA2Njg2LCAxMDY2OTAsIDEwNjY5NCwgMTA2Njk4LCAxMDY3MDIsIDEwNjcwNiwgMTA2NzEwLCAxMDY3MTQsIAorICAgIDEwNjcxOCwgMTA2NzIyLCAxMDY3MjYsIDEwNjczMCwgMTA2NzM0LCAxMDY3MzgsIDEwNjc0MiwgMTA2NzQ2LCAxMDY3NTAsIAorICAgIDEwNjc1NCwgMTA2NzU4LCAxMDY3NjIsIDEwNjc2NiwgMTA2NzcwLCAxMDY3NzQsIDEwNjc3OCwgMTA2NzgyLCAxMDY3ODYsIAorICAgIDEwNjc5MCwgMTA2Nzk0LCAxMDY3OTgsIDEwNjgwMiwgMTA2ODA2LCAxMDY4MTAsIDEwNjgxNCwgMTA2ODE4LCAxMDY4MjIsIAorICAgIDEwNjgyNiwgMTA2ODMwLCAxMDY4MzQsIDEwNjgzOCwgMTA2ODQyLCAxMDY4NDYsIDEwNjg1MCwgMTA2ODU0LCAxMDY4NTgsIAorICAgIDEwNjg2MiwgMTA2ODY2LCAxMDY4NzAsIDEwNjg3NCwgMTA2ODc4LCAxMDY4ODIsIDEwNjg4NiwgMTA2ODkwLCAxMDY4OTQsIAorICAgIDEwNjg5OCwgMTA2OTAyLCAxMDY5MDYsIDEwNjkxMCwgMTA2OTE0LCAxMDY5MTgsIDEwNjkyMiwgMTA2OTI2LCAxMDY5MzAsIAorICAgIDEwNjkzNCwgMTA2OTM4LCAxMDY5NDIsIDEwNjk0NiwgMTA2OTUwLCAxMDY5NTQsIDEwNjk1OCwgMTA2OTYyLCAxMDY5NjYsIAorICAgIDEwNjk3MCwgMTA2OTc0LCAxMDY5NzgsIDEwNjk4MiwgMTA2OTg2LCAxMDY5OTAsIDEwNjk5NCwgMTA2OTk4LCAxMDcwMDIsIAorICAgIDEwNzAwNiwgMTA3MDEwLCAxMDcwMTQsIDEwNzAxOCwgMTA3MDIyLCAxMDcwMjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDEwNzAzMCwgMTA3MDM3LCAxMDcwNDQsIDEwNzA1MywgMTA3MDYyLCAxMDcwNjksIDEwNzA3NCwgMTA3MDgxLCAKKyAgICAxMDcwODgsIDEwNzA5NywgMTA3MTA4LCAxMDcxMTksIDEwNzEyNCwgMTA3MTMxLCAxMDcxMzYsIDEwNzE0MSwgMTA3MTQ2LCAKKyAgICAxMDcxNTEsIDEwNzE1NiwgMTA3MTYxLCAxMDcxNjYsIDEwNzE3MSwgMTA3MTc2LCAxMDcxODEsIDEwNzE4NiwgMTA3MTkzLCAKKyAgICAxMDcyMDAsIDEwNzIwNSwgMTA3MjEwLCAxMDcyMTUsIDEwNzIyMCwgMTA3MjI3LCAxMDcyMzQsIDEwNzI0MiwgMTA3MjQ3LCAKKyAgICAxMDcyNTQsIDEwNzI1OSwgMTA3MjY0LCAxMDcyNjksIDEwNzI3NCwgMTA3Mjc5LCAxMDcyODYsIDEwNzI5MywgMTA3Mjk4LCAKKyAgICAxMDczMDMsIDEwNzMwOCwgMTA3MzEzLCAxMDczMTgsIDEwNzMyMywgMTA3MzI4LCAxMDczMzMsIDEwNzMzOCwgMTA3MzQzLCAKKyAgICAxMDczNDgsIDEwNzM1MywgMTA3MzU4LCAxMDczNjMsIDEwNzM2OCwgMTA3MzczLCAxMDczNzgsIDEwNzM4MywgMTA3Mzg4LCAKKyAgICAxMDczOTUsIDEwNzQwMCwgMTA3NDA1LCAxMDc0MTQsIDEwNzQyMSwgMTA3NDI2LCAxMDc0MzEsIDEwNzQzNiwgMTA3NDQxLCAKKyAgICAxMDc0NDYsIDEwNzQ1MSwgMTA3NDU2LCAxMDc0NjEsIDEwNzQ2NiwgMTA3NDcxLCAxMDc0NzYsIDEwNzQ4MSwgMTA3NDg2LCAKKyAgICAxMDc0OTEsIDEwNzQ5NiwgMTA3NTAxLCAxMDc1MDYsIDEwNzUxMSwgMTA3NTE2LCAxMDc1MjEsIDEwNzUyNiwgMTA3NTMyLCAKKyAgICAxMDc1NDAsIDEwNzU0NiwgMTA3NTU0LCAxMDc1NjIsIDEwNzU3MCwgMTA3NTc2LCAxMDc1ODIsIDEwNzU4OCwgMTA3NTk0LCAKKyAgICAxMDc2MDAsIDEwNzYwOCwgMTA3NjE4LCAxMDc2MjYsIDEwNzYzNCwgMTA3NjQwLCAxMDc2NDYsIDEwNzY1NCwgMTA3NjYyLCAKKyAgICAxMDc2NjgsIDEwNzY3NiwgMTA3Njg0LCAxMDc2OTIsIDEwNzY5OCwgMTA3NzA0LCAxMDc3MTAsIDEwNzcxNiwgMTA3NzIyLCAKKyAgICAxMDc3MjgsIDEwNzczNiwgMTA3NzQ0LCAxMDc3NTAsIDEwNzc1NiwgMTA3NzYyLCAxMDc3NjgsIDEwNzc3NCwgMTA3NzgyLCAKKyAgICAxMDc3ODgsIDEwNzc5NCwgMTA3ODAwLCAxMDc4MDYsIDEwNzgxMiwgMTA3ODE4LCAxMDc4MjYsIDEwNzgzMiwgMTA3ODM4LCAKKyAgICAxMDc4NDQsIDEwNzg1MCwgMTA3ODU4LCAxMDc4NjYsIDEwNzg3MiwgMTA3ODc4LCAxMDc4ODQsIDEwNzg4OSwgMTA3ODk1LCAKKyAgICAxMDc5MDEsIDEwNzkwOCwgMTA3OTEzLCAxMDc5MTgsIDEwNzkyMywgMTA3OTI4LCAxMDc5MzMsIDEwNzkzOCwgMTA3OTQzLCAKKyAgICAxMDc5NDgsIDEwNzk1MywgMTA3OTYyLCAxMDc5NjksIDEwNzk3NCwgMTA3OTc5LCAxMDc5ODQsIDEwNzk5MSwgMTA3OTk2LCAKKyAgICAxMDgwMDEsIDEwODAwNiwgMTA4MDEzLCAxMDgwMTgsIDEwODAyMywgMTA4MDI4LCAxMDgwMzMsIDEwODAzOCwgMTA4MDQzLCAKKyAgICAxMDgwNDgsIDEwODA1MywgMTA4MDU4LCAxMDgwNjMsIDEwODA2OCwgMTA4MDc1LCAxMDgwODAsIDEwODA4NywgMTA4MDkyLCAKKyAgICAxMDgwOTcsIDEwODEwNCwgMTA4MTA5LCAxMDgxMTQsIDEwODExOSwgMTA4MTI0LCAxMDgxMjksIDEwODEzNCwgMTA4MTM5LCAKKyAgICAxMDgxNDQsIDEwODE0OSwgMTA4MTU0LCAxMDgxNTksIDEwODE2NCwgMTA4MTY5LCAxMDgxNzQsIDEwODE3OSwgMTA4MTg0LCAKKyAgICAxMDgxODksIDEwODE5NCwgMTA4MTk5LCAxMDgyMDYsIDEwODIxMSwgMTA4MjE2LCAxMDgyMjEsIDEwODIyNiwgMTA4MjMxLCAKKyAgICAxMDgyMzYsIDEwODI0MSwgMTA4MjQ2LCAxMDgyNTEsIDEwODI1NiwgMTA4MjYxLCAxMDgyNjYsIDEwODI3MSwgMTA4Mjc4LCAKKyAgICAxMDgyODMsIDEwODI4OCwgMTA4Mjk1LCAxMDgzMDAsIDEwODMwNSwgMTA4MzEwLCAxMDgzMTUsIDEwODMyMCwgMTA4MzI1LCAKKyAgICAxMDgzMzAsIDEwODMzNSwgMTA4MzQwLCAxMDgzNDUsIDEwODM1MiwgMTA4MzU3LCAxMDgzNjIsIDEwODM2NywgMTA4MzcyLCAKKyAgICAxMDgzNzcsIDEwODM4NCwgMTA4MzkxLCAxMDgzOTYsIDEwODQwMSwgMTA4NDA2LCAxMDg0MTEsIDEwODQxNiwgMTA4NDIxLCAKKyAgICAxMDg0MjYsIDEwODQzMSwgMTA4NDM2LCAxMDg0NDEsIDEwODQ0NiwgMTA4NDUxLCAxMDg0NTYsIDEwODQ2MSwgMTA4NDY2LCAKKyAgICAxMDg0NzEsIDEwODQ3NiwgMTA4NDgxLCAxMDg0ODYsIDEwODQ5MSwgMTA4NDk2LCAxMDg1MDEsIDEwODUwNiwgMTA4NTExLCAKKyAgICAxMDg1MTYsIDEwODUyMSwgMTA4NTI2LCAxMDg1MzEsIDEwODUzNiwgMTA4NTQxLCAxMDg1NDYsIDEwODU1MSwgMTA4NTU2LCAKKyAgICAxMDg1NjEsIDEwODU2NiwgMTA4NTcxLCAxMDg1NzgsIDEwODU4MywgMTA4NTg4LCAxMDg1OTMsIDEwODU5OCwgMTA4NjAzLCAKKyAgICAxMDg2MDgsIDEwODYxMywgMTA4NjE4LCAxMDg2MjMsIDEwODYyOCwgMTA4NjMzLCAxMDg2MzgsIDEwODY0MywgMTA4NjQ4LCAKKyAgICAxMDg2NTMsIDEwODY1OCwgMTA4NjYzLCAxMDg2NjgsIDEwODY3MywgMTA4Njc4LCAxMDg2ODMsIDEwODY4OCwgMTA4NjkzLCAKKyAgICAxMDg2OTgsIDEwODcwMywgMTA4NzA4LCAxMDg3MTMsIDEwODcxOCwgMTA4NzIzLCAxMDg3MjgsIDEwODczMywgMTA4NzM4LCAKKyAgICAxMDg3NDMsIDEwODc0OCwgMTA4NzUzLCAxMDg3NTgsIDEwODc2MywgMTA4NzY4LCAxMDg3NzMsIDEwODc3OCwgMTA4NzgzLCAKKyAgICAxMDg3ODgsIDEwODc5MywgMTA4Nzk4LCAxMDg4MDMsIDEwODgwOCwgMTA4ODEzLCAxMDg4MTgsIDEwODgyMywgMTA4ODI4LCAKKyAgICAxMDg4MzMsIDEwODgzOCwgMTA4ODQzLCAxMDg4NDgsIDEwODg1MywgMTA4ODU4LCAxMDg4NjMsIDEwODg2OCwgMTA4ODc1LCAKKyAgICAxMDg4ODAsIDEwODg4NSwgMTA4ODkwLCAxMDg4OTUsIDEwODkwMCwgMTA4OTA1LCAxMDg5MDksIDEwODkxNCwgMTA4OTE5LCAKKyAgICAxMDg5MjQsIDEwODkyOSwgMTA4OTM0LCAxMDg5MzksIDEwODk0NCwgMTA4OTQ5LCAxMDg5NTQsIDEwODk1OSwgMTA4OTY0LCAKKyAgICAxMDg5NjksIDEwODk3NCwgMTA4OTc5LCAxMDg5ODYsIDEwODk5MSwgMTA4OTk2LCAxMDkwMDIsIDEwOTAwNywgMTA5MDEyLCAKKyAgICAxMDkwMTcsIDEwOTAyMiwgMTA5MDI3LCAxMDkwMzIsIDEwOTAzNywgMTA5MDQyLCAxMDkwNDcsIDEwOTA1MiwgMTA5MDU3LCAKKyAgICAxMDkwNjIsIDEwOTA2NywgMTA5MDcyLCAxMDkwNzcsIDEwOTA4MiwgMTA5MDg3LCAxMDkwOTIsIDEwOTA5NywgMTA5MTAyLCAKKyAgICAxMDkxMDcsIDEwOTExMiwgMTA5MTE3LCAxMDkxMjIsIDEwOTEyNywgMTA5MTMyLCAxMDkxMzcsIDEwOTE0MiwgMTA5MTQ3LCAKKyAgICAxMDkxNTIsIDEwOTE1NywgMTA5MTYyLCAxMDkxNjcsIDEwOTE3MiwgMTA5MTc3LCAxMDkxODIsIDEwOTE4NywgMTA5MTkyLCAKKyAgICAxMDkxOTcsIDEwOTIwMiwgMTA5MjA3LCAxMDkyMTIsIDEwOTIxNywgMTA5MjI0LCAxMDkyMjksIDEwOTIzNCwgMTA5MjQxLCAKKyAgICAxMDkyNDgsIDEwOTI1MywgMTA5MjU4LCAxMDkyNjMsIDEwOTI2OCwgMTA5MjczLCAxMDkyNzgsIDEwOTI4MywgMTA5Mjg4LCAKKyAgICAxMDkyOTMsIDEwOTI5OCwgMTA5MzAzLCAxMDkzMDgsIDEwOTMxMywgMTA5MzE4LCAxMDkzMjMsIDEwOTMyOCwgMTA5MzMzLCAKKyAgICAxMDkzMzgsIDEwOTM0MywgMTA5MzQ4LCAxMDkzNTMsIDEwOTM1OCwgMTA5MzYzLCAxMDkzNjgsIDEwOTM3MywgMTA5MzgwLCAKKyAgICAxMDkzODUsIDEwOTM5MCwgMTA5Mzk1LCAxMDk0MDAsIDEwOTQwNSwgMTA5NDEwLCAxMDk0MTUsIDEwOTQyMCwgMTA5NDI1LCAKKyAgICAxMDk0MzAsIDEwOTQzNSwgMTA5NDQwLCAxMDk0NDUsIDEwOTQ1MCwgMTA5NDU1LCAxMDk0NjAsIDEwOTQ2NSwgMTA5NDcwLCAKKyAgICAxMDk0NzcsIDEwOTQ4MiwgMTA5NDg3LCAxMDk0OTIsIDEwOTQ5NywgMTA5NTAyLCAxMDk1MDcsIDEwOTUxMiwgMTA5NTE4LCAKKyAgICAxMDk1MjMsIDEwOTUyOCwgMTA5NTMzLCAxMDk1MzgsIDEwOTU0MywgMTA5NTQ4LCAxMDk1NTMsIDEwOTU1OCwgMTA5NTY1LCAKKyAgICAxMDk1NzIsIDEwOTU3NywgMTA5NTgyLCAxMDk1ODYsIDEwOTU5MSwgMTA5NTk1LCAxMDk1OTksIDEwOTYwNCwgMTA5NjExLCAKKyAgICAxMDk2MTYsIDEwOTYyMSwgMTA5NjMwLCAxMDk2MzUsIDEwOTY0MCwgMTA5NjQ1LCAxMDk2NTAsIDEwOTY1NywgMTA5NjY0LCAKKyAgICAxMDk2NjksIDEwOTY3NCwgMTA5Njc5LCAxMDk2ODQsIDEwOTY5MSwgMTA5Njk2LCAxMDk3MDEsIDEwOTcwNiwgMTA5NzExLCAKKyAgICAxMDk3MTYsIDEwOTcyMSwgMTA5NzI2LCAxMDk3MzEsIDEwOTczNiwgMTA5NzQxLCAxMDk3NDYsIDEwOTc1MSwgMTA5NzU4LCAKKyAgICAxMDk3NjIsIDEwOTc2NywgMTA5NzcyLCAxMDk3NzcsIDEwOTc4MiwgMTA5Nzg2LCAxMDk3OTEsIDEwOTc5NiwgMTA5ODAxLCAKKyAgICAxMDk4MDYsIDEwOTgxMSwgMTA5ODE2LCAxMDk4MjEsIDEwOTgyNiwgMTA5ODMxLCAxMDk4MzcsIDEwOTg0MywgMTA5ODQ5LCAKKyAgICAxMDk4NTUsIDEwOTg2MSwgMTA5ODY3LCAxMDk4NzMsIDEwOTg3OSwgMTA5ODg1LCAxMDk4OTEsIDEwOTg5NywgMTA5OTAzLCAKKyAgICAxMDk5MDgsIDEwOTkxNCwgMTA5OTIwLCAxMDk5MjYsIDEwOTkzMiwgMTA5OTM4LCAxMDk5NDQsIDEwOTk1MCwgMTA5OTU2LCAKKyAgICAxMDk5NjIsIDEwOTk2OCwgMTA5OTc0LCAxMDk5NzksIDEwOTk4NSwgMTA5OTkxLCAxMDk5OTcsIDExMDAwMywgMTEwMDA5LCAKKyAgICAxMTAwMTUsIDExMDAyMSwgMTEwMDI3LCAxMTAwMzMsIDExMDAzOSwgMTEwMDQ1LCAxMTAwNTEsIDExMDA1NywgMTEwMDYzLCAKKyAgICAxMTAwNjksIDExMDA3NSwgMTEwMDgxLCAxMTAwODcsIDExMDA5MywgMTEwMDk5LCAxMTAxMDQsIDExMDExMCwgMTEwMTE2LCAKKyAgICAxMTAxMjIsIDExMDEyOCwgMTEwMTM0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTAxNDAsIDExMDE0MywgMTEwMTQ3LCAxMTAxNTEsIDExMDE1NSwgMTEwMTU4LCAKKyAgICAxMTAxNjIsIDExMDE2NywgMTEwMTcxLCAxMTAxNzUsIDExMDE3OSwgMTEwMTgzLCAxMTAxODcsIDExMDE5MiwgMTEwMTk3LCAKKyAgICAxMTAyMDEsIDExMDIwNSwgMTEwMjA4LCAxMTAyMTIsIDExMDIxNywgMTEwMjIyLCAxMTAyMjYsIDExMDIzMCwgMTEwMjM0LCAKKyAgICAxMTAyMzgsIDExMDI0MiwgMTEwMjQ2LCAxMTAyNTAsIDExMDI1NCwgMTEwMjU4LCAxMTAyNjIsIDExMDI2NSwgMTEwMjY5LCAKKyAgICAxMTAyNzMsIDExMDI3NywgMTEwMjgxLCAxMTAyODUsIDExMDI4OSwgMTEwMjk1LCAxMTAyOTgsIDExMDMwMiwgMTEwMzA2LCAKKyAgICAxMTAzMTAsIDExMDMxNCwgMTEwMzE4LCAxMTAzMjIsIDExMDMyNiwgMTEwMzMwLCAxMTAzMzQsIDExMDMzOSwgMTEwMzQ0LCAKKyAgICAxMTAzNTAsIDExMDM1NCwgMTEwMzU4LCAxMTAzNjIsIDExMDM2NiwgMTEwMzcwLCAxMTAzNzQsIDExMDM3OSwgMTEwMzgyLCAKKyAgICAxMTAzODYsIDExMDM5MCwgMTEwMzk0LCAxMTAzOTgsIDExMDQwNCwgMTEwNDA4LCAxMTA0MTIsIDExMDQxNiwgMTEwNDIwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTA0MjQsIDExMDQyOCwgMTEwNDMyLCAxMTA0MzgsIDExMDQ0NCwgCisgICAgMTEwNDQ4LCAxMTA0NTMsIDExMDQ1OCwgMTEwNDYzLCAxMTA0NjgsIDExMDQ3MiwgMTEwNDc3LCAxMTA0ODIsIDExMDQ4NywgCisgICAgMTEwNDkxLCAxMTA0OTYsIDExMDUwMSwgMTEwNTA2LCAxMTA1MTAsIDExMDUxNSwgMTEwNTIwLCAxMTA1MjUsIDExMDUzMCwgCisgICAgMTEwNTM1LCAxMTA1NDAsIDExMDU0NSwgMTEwNTUwLCAxMTA1NTQsIDExMDU1OSwgMTEwNTY0LCAxMTA1NjksIDExMDU3NCwgCisgICAgMTEwNTc5LCAxMTA1ODQsIDExMDU4OSwgMTEwNTk0LCAxMTA1OTksIDExMDYwNCwgMTEwNjA5LCAxMTA2MTYsIDExMDYyMSwgCisgICAgMTEwNjI4LCAxMTA2MzMsIDExMDYzOCwgMTEwNjQzLCAxMTA2NDgsIDExMDY1MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTEwNjU4LCAxMTA2NjIsIDExMDY2OCwgMTEwNjcxLCAxMTA2NzQsIDExMDY3OCwgCisgICAgMTEwNjgyLCAxMTA2ODYsIDExMDY5MCwgMTEwNjk0LCAxMTA2OTgsIDExMDcwMiwgMTEwNzA4LCAxMTA3MTQsIDExMDcyMCwgCisgICAgMTEwNzI2LCAxMTA3MzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDExMDczOCwgMTEwNzQzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTA3NDksIDExMDc1NCwgMTEwNzU5LCAKKyAgICAxMTA3NjQsIDExMDc3MSwgMTEwNzc4LCAxMTA3ODUsIDExMDc5MiwgMTEwNzk3LCAxMTA4MDIsIDExMDgwNywgMTEwODEyLCAKKyAgICAxMTA4MTksIDExMDgyNCwgMTEwODMxLCAxMTA4MzgsIDExMDg0MywgMTEwODQ4LCAxMTA4NTMsIDExMDg2MCwgMTEwODY1LCAKKyAgICAxMTA4NzAsIDExMDg3NywgMTEwODg0LCAxMTA4ODksIDExMDg5NCwgMTEwODk5LCAxMTA5MDYsIDExMDkxMywgMTEwOTIwLCAKKyAgICAxMTA5MjUsIDExMDkzMCwgMTEwOTM3LCAxMTA5NDQsIDExMDk1MSwgMTEwOTU4LCAxMTA5NjMsIDExMDk2OCwgMTEwOTczLCAKKyAgICAxMTA5ODAsIDExMDk4NSwgMTEwOTkwLCAxMTA5OTUsIDExMTAwMiwgMTExMDExLCAxMTEwMTgsIDExMTAyMywgMTExMDI4LCAKKyAgICAxMTEwMzMsIDExMTAzOCwgMTExMDQzLCAxMTEwNDgsIDExMTA1NywgMTExMDY0LCAxMTEwNjksIDExMTA3NiwgMTExMDgzLCAKKyAgICAxMTEwODgsIDExMTA5MywgMTExMDk4LCAxMTExMDUsIDExMTExMCwgMTExMTE3LCAxMTExMjQsIDExMTEyOSwgMTExMTM0LCAKKyAgICAxMTExMzksIDExMTE0NiwgMTExMTUzLCAxMTExNTgsIDExMTE2MywgMTExMTcwLCAxMTExNzcsIDExMTE4NCwgMTExMTg5LCAKKyAgICAxMTExOTQsIDExMTE5OSwgMTExMjA0LCAxMTEyMTEsIDExMTIyMCwgMTExMjI5LCAxMTEyMzQsIDExMTI0MSwgMTExMjUwLCAKKyAgICAxMTEyNTUsIDExMTI2MCwgMTExMjY1LCAxMTEyNzAsIDExMTI3NywgMTExMjg0LCAxMTEyOTEsIDExMTI5OCwgMTExMzAzLCAKKyAgICAxMTEzMDgsIDExMTMxMywgMTExMzIwLCAxMTEzMjcsIDExMTMzNCwgMTExMzM5LCAxMTEzNDQsIDExMTM1MSwgMTExMzU2LCAKKyAgICAxMTEzNjMsIDExMTM2OCwgMTExMzc1LCAxMTEzODAsIDExMTM4NywgMTExMzk0LCAxMTEzOTksIDExMTQwNCwgMTExNDA5LCAKKyAgICAxMTE0MTQsIDExMTQxOSwgMTExNDI0LCAxMTE0MjksIDExMTQzNCwgMTExNDM5LCAxMTE0NDYsIDExMTQ1MywgMTExNDYwLCAKKyAgICAxMTE0NjcsIDExMTQ3NCwgMTExNDgzLCAxMTE0ODgsIDExMTQ5MywgMTExNTAwLCAxMTE1MDcsIDExMTUxMiwgMTExNTE5LCAKKyAgICAxMTE1MjYsIDExMTUzMywgMTExNTQwLCAxMTE1NDcsIDExMTU1NCwgMTExNTU5LCAxMTE1NjQsIDExMTU2OSwgMTExNTc0LCAKKyAgICAxMTE1NzksIDExMTU4OCwgMTExNTk3LCAxMTE2MDYsIDExMTYxNSwgMTExNjI0LCAxMTE2MzMsIDExMTY0MiwgMTExNjUxLCAKKyAgICAxMTE2NTYsIDExMTY2NywgMTExNjc4LCAxMTE2ODcsIDExMTY5MiwgMTExNjk3LCAxMTE3MDIsIDExMTcwNywgMTExNzE2LCAKKyAgICAxMTE3MjMsIDExMTczMCwgMTExNzM3LCAxMTE3NDQsIDExMTc1MSwgMTExNzU4LCAxMTE3NjcsIDExMTc3NiwgMTExNzg3LCAKKyAgICAxMTE3OTYsIDExMTgwNywgMTExODE2LCAxMTE4MjMsIDExMTgzMiwgMTExODQzLCAxMTE4NTIsIDExMTg2MSwgMTExODcwLCAKKyAgICAxMTE4NzksIDExMTg4NiwgMTExODkzLCAxMTE5MDAsIDExMTkwOSwgMTExOTE4LCAxMTE5MjksIDExMTkzOCwgMTExOTQ3LCAKKyAgICAxMTE5NTgsIDExMTk2MywgMTExOTY4LCAxMTE5NzksIDExMTk4NywgMTExOTk2LCAxMTIwMDUsIDExMjAxNCwgMTEyMDI1LCAKKyAgICAxMTIwMzQsIDExMjA0MywgMTEyMDU0LCAxMTIwNjUsIDExMjA3NiwgMTEyMDg3LCAxMTIwOTgsIDExMjEwOSwgMTEyMTE2LCAKKyAgICAxMTIxMjMsIDExMjEzMCwgMTEyMTM3LCAxMTIxNDgsIDExMjE1NywgMTEyMTY0LCAxMTIxNzEsIDExMjE3OCwgMTEyMTg5LCAKKyAgICAxMTIyMDAsIDExMjIxMSwgMTEyMjIyLCAxMTIyMzMsIDExMjI0NCwgMTEyMjU1LCAxMTIyNjYsIDExMjI3MywgMTEyMjgwLCAKKyAgICAxMTIyODksIDExMjI5OCwgMTEyMzA1LCAxMTIzMTIsIDExMjMxOSwgMTEyMzI4LCAxMTIzMzcsIDExMjM0NiwgMTEyMzUzLCAKKyAgICAxMTIzNjIsIDExMjM3MSwgMTEyMzgwLCAxMTIzODcsIDExMjM5NCwgMTEyMzk5LCAxMTI0MDUsIDExMjQxMiwgMTEyNDE5LCAKKyAgICAxMTI0MjYsIDExMjQzMywgMTEyNDQwLCAxMTI0NDcsIDExMjQ1NiwgMTEyNDY1LCAxMTI0NzQsIDExMjQ4MywgMTEyNDkwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTI0OTksIDExMjUwNSwgMTEyNTEwLCAxMTI1MTUsIDExMjUyMiwgCisgICAgMTEyNTI4LCAxMTI1MzQsIDExMjU0MCwgMTEyNTQ2LCAxMTI1NTIsIDExMjU1OCwgMTEyNTY0LCAxMTI1NjgsIDExMjU3MiwgCisgICAgMTEyNTc4LCAxMTI1ODQsIDExMjU5MCwgMTEyNTk0LCAxMTI1OTksIDExMjYwNCwgMTEyNjA4LCAxMTI2MTIsIDExMjYxNSwgCisgICAgMTEyNjIxLCAxMTI2MjcsIDExMjYzMywgMTEyNjM5LCAxMTI2NDUsIDExMjY1MSwgMTEyNjU3LCAxMTI2NjMsIDExMjY2OSwgCisgICAgMTEyNjc5LCAxMTI2ODksIDExMjY5NSwgMTEyNzAxLCAxMTI3MTEsIDExMjcyMSwgMTEyNzI3LCAwLCAwLCAxMTI3MzMsIAorICAgIDExMjc0MSwgMTEyNzQ2LCAxMTI3NTEsIDExMjc1NywgMTEyNzYzLCAxMTI3NjksIDExMjc3NSwgMTEyNzgxLCAxMTI3ODcsIAorICAgIDExMjc5NCwgMTEyODAxLCAxMTI4MDcsIDExMjgxMywgMTEyODE5LCAxMTI4MjUsIDExMjgzMSwgMTEyODM3LCAxMTI4NDMsIAorICAgIDExMjg0OSwgMTEyODU0LCAxMTI4NjAsIDExMjg2NiwgMTEyODcyLCAxMTI4NzgsIDExMjg4NCwgMTEyODkzLCAxMTI4OTksIAorICAgIDExMjkwNCwgMTEyOTEyLCAxMTI5MTksIDExMjkyNiwgMTEyOTM1LCAxMTI5NDQsIDExMjk1MywgMTEyOTYyLCAxMTI5NzEsIAorICAgIDExMjk4MCwgMTEyOTg5LCAxMTI5OTgsIDExMzAwOCwgMTEzMDE4LCAxMTMwMjYsIDExMzAzNCwgMTEzMDQzLCAxMTMwNTIsIAorICAgIDExMzA1OCwgMTEzMDY0LCAxMTMwNzAsIDExMzA3NiwgMTEzMDg0LCAxMTMwOTIsIDExMzA5NiwgMTEzMTAyLCAxMTMxMDcsIAorICAgIDExMzExMywgMTEzMTE5LCAxMTMxMjUsIDExMzEzMSwgMTEzMTM3LCAxMTMxNDYsIDExMzE1MSwgMTEzMTU4LCAxMTMxNjMsIAorICAgIDExMzE2OCwgMTEzMTczLCAxMTMxNzksIDExMzE4NSwgMTEzMTkxLCAxMTMxOTgsIDExMzIwMywgMTEzMjA4LCAxMTMyMTMsIAorICAgIDExMzIxOCwgMTEzMjIzLCAxMTMyMjksIDExMzIzNSwgMTEzMjQxLCAxMTMyNDcsIDExMzI1MywgMTEzMjU5LCAxMTMyNjUsIAorICAgIDExMzI3MSwgMTEzMjc2LCAxMTMyODEsIDExMzI4NiwgMTEzMjkxLCAxMTMyOTYsIDExMzMwMSwgMTEzMzA2LCAxMTMzMTEsIAorICAgIDExMzMxNywgMTEzMzIzLCAxMTMzMjgsIDExMzMzMywgMTEzMzM4LCAxMTMzNDMsIDExMzM0OCwgMTEzMzU0LCAxMTMzNjEsIAorICAgIDExMzM2NSwgMTEzMzY5LCAxMTMzNzMsIDExMzM3NywgMTEzMzgxLCAxMTMzODUsIDExMzM4OSwgMTEzMzkzLCAxMTM0MDEsIAorICAgIDExMzQxMSwgMTEzNDE1LCAxMTM0MTksIDExMzQyNSwgMTEzNDMxLCAxMTM0MzcsIDExMzQ0MywgMTEzNDQ5LCAxMTM0NTUsIAorICAgIDExMzQ2MSwgMTEzNDY3LCAxMTM0NzMsIDExMzQ3OSwgMTEzNDg1LCAxMTM0OTEsIDExMzQ5NywgMTEzNTAzLCAxMTM1MDcsIAorICAgIDExMzUxMSwgMTEzNTE4LCAxMTM1MjQsIDExMzUzMCwgMTEzNTM2LCAxMTM1NDEsIDExMzU0OCwgMTEzNTUzLCAxMTM1NTksIAorICAgIDExMzU2NSwgMTEzNTcxLCAxMTM1NzcsIDExMzU4MiwgMTEzNTg2LCAxMTM1OTIsIDExMzU5NiwgMTEzNjAwLCAxMTM2MDQsIAorICAgIDExMzYxMCwgMTEzNjE2LCAxMTM2MjAsIDExMzYyNiwgMTEzNjMyLCAxMTM2MzgsIDExMzY0NCwgMTEzNjUwLCAxMTM2NTgsIAorICAgIDExMzY2NiwgMTEzNjcyLCAxMTM2NzgsIDExMzY4NCwgMTEzNjkwLCAxMTM3MDIsIDExMzcxNCwgMTEzNzI4LCAxMTM3NDAsIAorICAgIDExMzc1MiwgMTEzNzY2LCAxMTM3ODAsIDExMzc5NCwgMTEzNzk4LCAxMTM4MDYsIDExMzgxNCwgMTEzODE5LCAxMTM4MjMsIAorICAgIDExMzgyNywgMTEzODMxLCAxMTM4MzUsIDExMzgzOSwgMTEzODQzLCAxMTM4NDcsIDExMzg1MywgMTEzODU5LCAxMTM4NjUsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExMzg3MSwgMTEzODc3LCAxMTM4ODMsIDExMzg4OSwgMTEzODk1LCAKKyAgICAxMTM5MDEsIDExMzkwNywgMTEzOTEzLCAxMTM5MTksIDExMzkyNSwgMTEzOTMxLCAxMTM5MzcsIDExMzk0MywgMTEzOTQ5LCAKKyAgICAxMTM5NTUsIDExMzk2MSwgMTEzOTY3LCAxMTM5NzMsIDExMzk3OSwgMTEzOTg1LCAxMTM5OTEsIDExMzk5NywgMTE0MDAzLCAKKyAgICAxMTQwMDksIDExNDAxNSwgMTE0MDIxLCAxMTQwMjcsIDExNDAzMywgMTE0MDM5LCAxMTQwNDUsIDExNDA1MSwgMTE0MDU3LCAKKyAgICAxMTQwNjMsIDExNDA2OSwgMTE0MDc1LCAxMTQwODEsIDExNDA4NywgMTE0MDkzLCAxMTQwOTksIDExNDEwNSwgMTE0MTExLCAKKyAgICAxMTQxMTcsIDExNDEyMywgMTE0MTI5LCAxMTQxMzUsIDExNDE0MSwgMTE0MTQ3LCAxMTQxNTMsIDExNDE1OSwgMTE0MTY1LCAKKyAgICAxMTQxNzEsIDExNDE3NywgMTE0MTgzLCAxMTQxODksIDExNDE5NSwgMTE0MjAxLCAxMTQyMDcsIDExNDIxMywgMTE0MjE5LCAKKyAgICAxMTQyMjUsIDExNDIzMSwgMTE0MjM3LCAxMTQyNDMsIDExNDI0OSwgMTE0MjU1LCAxMTQyNjEsIDExNDI2NywgMTE0MjcyLCAKKyAgICAxMTQyNzcsIDExNDI4MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTE0Mjg2LCAxMTQyOTEsIDExNDI5OCwgCisgICAgMTE0MzA1LCAxMTQzMTIsIDExNDMxOSwgMTE0MzI0LCAxMTQzMjgsIDExNDMzNCwgMTE0MzM4LCAxMTQzNDIsIDExNDM0OCwgCisgICAgMTE0MzUyLCAxMTQzNTYsIDExNDM2MCwgMTE0MzY2LCAxMTQzNzMsIDExNDM3NywgMTE0MzgxLCAxMTQzODUsIDExNDM4OSwgCisgICAgMTE0MzkzLCAxMTQzOTcsIDExNDQwMywgMTE0NDA3LCAxMTQ0MTEsIDExNDQxNSwgMTE0NDE5LCAxMTQ0MjMsIDExNDQyNywgCisgICAgMTE0NDMxLCAxMTQ0MzUsIDExNDQzOSwgMTE0NDQzLCAxMTQ0NDcsIDExNDQ1MSwgMTE0NDU2LCAxMTQ0NjAsIDExNDQ2NCwgCisgICAgMTE0NDY4LCAxMTQ0NzIsIDExNDQ3NiwgMTE0NDgwLCAxMTQ0ODQsIDExNDQ4OCwgMTE0NDkyLCAxMTQ0OTksIDExNDUwMywgCisgICAgMTE0NTExLCAxMTQ1MTUsIDExNDUxOSwgMTE0NTIzLCAxMTQ1MjcsIDExNDUzMSwgMTE0NTM1LCAxMTQ1MzksIDExNDU0NiwgCisgICAgMTE0NTUwLCAxMTQ1NTQsIDExNDU1OCwgMTE0NTYyLCAxMTQ1NjYsIDExNDU3MiwgMTE0NTc2LCAxMTQ1ODIsIDExNDU4NiwgCisgICAgMTE0NTkwLCAxMTQ1OTQsIDExNDU5OCwgMTE0NjAyLCAxMTQ2MDYsIDExNDYxMCwgMTE0NjE0LCAxMTQ2MTgsIDExNDYyMiwgCisgICAgMTE0NjI2LCAxMTQ2MzAsIDExNDYzNCwgMTE0NjM4LCAxMTQ2NDIsIDExNDY0NiwgMTE0NjUwLCAxMTQ2NTQsIDExNDY1OCwgCisgICAgMTE0NjY2LCAxMTQ2NzAsIDExNDY3NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTE0Njc4LCAxMTQ2ODYsIAorICAgIDExNDY5NCwgMTE0NzAyLCAxMTQ3MTAsIDExNDcxOCwgMTE0NzI2LCAxMTQ3MzQsIDExNDc0MiwgMTE0NzUwLCAxMTQ3NTgsIAorICAgIDExNDc2NiwgMTE0Nzc0LCAxMTQ3ODIsIDExNDc5MCwgMTE0Nzk4LCAxMTQ4MDYsIDExNDgxNCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTE0ODIyLCAxMTQ4MjYsIDExNDgzMSwgMTE0ODM2LCAxMTQ4NDEsIDExNDg0NSwgCisgICAgMTE0ODUwLCAxMTQ4NTUsIDExNDg2MCwgMTE0ODY0LCAxMTQ4NjksIDExNDg3NCwgMTE0ODc4LCAxMTQ4ODIsIDExNDg4NywgCisgICAgMTE0ODkxLCAxMTQ4OTYsIDExNDkwMSwgMTE0OTA1LCAxMTQ5MTAsIDExNDkxNSwgMTE0OTE5LCAxMTQ5MjQsIDExNDkyOSwgCisgICAgMTE0OTM0LCAxMTQ5MzksIDExNDk0NCwgMTE0OTQ4LCAxMTQ5NTMsIDExNDk1OCwgMTE0OTYzLCAxMTQ5NjcsIDExNDk3MiwgCisgICAgMTE0OTc3LCAxMTQ5ODIsIDExNDk4NiwgMTE0OTkxLCAxMTQ5OTYsIDExNTAwMCwgMTE1MDA0LCAxMTUwMDksIDExNTAxMywgCisgICAgMTE1MDE4LCAxMTUwMjMsIDExNTAyNywgMTE1MDMyLCAxMTUwMzcsIDExNTA0MSwgMTE1MDQ2LCAxMTUwNTEsIDExNTA1NiwgCisgICAgMTE1MDYxLCAxMTUwNjYsIDExNTA3MCwgMTE1MDc1LCAxMTUwODAsIDExNTA4NSwgMTE1MDg5LCAxMTUwOTQsIDExNTA5OSwgCisgICAgMTE1MTA0LCAxMTUxMDgsIDExNTExMywgMTE1MTE4LCAxMTUxMjIsIDExNTEyNiwgMTE1MTMxLCAxMTUxMzUsIDExNTE0MCwgCisgICAgMTE1MTQ1LCAxMTUxNDksIDExNTE1NCwgMTE1MTU5LCAxMTUxNjMsIDExNTE2OCwgMTE1MTczLCAxMTUxNzgsIDExNTE4MywgCisgICAgMTE1MTg4LCAxMTUxOTIsIDExNTE5NywgMTE1MjAyLCAxMTUyMDcsIDExNTIxMSwgMTE1MjE2LCAwLCAxMTUyMjEsIAorICAgIDExNTIyNSwgMTE1MjMwLCAxMTUyMzUsIDExNTIzOSwgMTE1MjQzLCAxMTUyNDgsIDExNTI1MiwgMTE1MjU3LCAxMTUyNjIsIAorICAgIDExNTI2NiwgMTE1MjcxLCAxMTUyNzYsIDExNTI4MCwgMTE1Mjg1LCAxMTUyOTAsIDExNTI5NSwgMTE1MzAwLCAxMTUzMDUsIAorICAgIDExNTMxMCwgMTE1MzE2LCAxMTUzMjIsIDExNTMyOCwgMTE1MzMzLCAxMTUzMzksIDExNTM0NSwgMTE1MzUxLCAxMTUzNTYsIAorICAgIDExNTM2MiwgMTE1MzY4LCAxMTUzNzMsIDExNTM3OCwgMTE1Mzg0LCAxMTUzODksIDExNTM5NSwgMTE1NDAxLCAxMTU0MDYsIAorICAgIDExNTQxMiwgMTE1NDE4LCAxMTU0MjMsIDExNTQyOSwgMTE1NDM1LCAxMTU0NDEsIDExNTQ0NywgMTE1NDUzLCAxMTU0NTgsIAorICAgIDExNTQ2NCwgMTE1NDcwLCAxMTU0NzYsIDExNTQ4MSwgMTE1NDg3LCAxMTU0OTMsIDExNTQ5OSwgMTE1NTA0LCAxMTU1MTAsIAorICAgIDExNTUxNiwgMTE1NTIxLCAxMTU1MjYsIDExNTUzMiwgMTE1NTM3LCAxMTU1NDMsIDExNTU0OSwgMTE1NTU0LCAxMTU1NjAsIAorICAgIDExNTU2NiwgMTE1NTcxLCAxMTU1NzcsIDExNTU4MywgMTE1NTg5LCAxMTU1OTUsIDExNTYwMSwgMCwgMTE1NjA1LCAKKyAgICAxMTU2MTAsIDAsIDAsIDExNTYxNSwgMCwgMCwgMTE1NjIwLCAxMTU2MjUsIDAsIDAsIDExNTYzMCwgMTE1NjM1LCAxMTU2MzksIAorICAgIDExNTY0NCwgMCwgMTE1NjQ5LCAxMTU2NTQsIDExNTY1OSwgMTE1NjYzLCAxMTU2NjgsIDExNTY3MywgMTE1Njc4LCAKKyAgICAxMTU2ODMsIDExNTY4OCwgMTE1NjkyLCAxMTU2OTcsIDExNTcwMiwgMCwgMTE1NzA3LCAwLCAxMTU3MTIsIDExNTcxNywgCisgICAgMTE1NzIxLCAxMTU3MjYsIDExNTczMSwgMTE1NzM1LCAxMTU3MzksIDAsIDExNTc0NCwgMTE1NzQ5LCAxMTU3NTQsIAorICAgIDExNTc1OCwgMTE1NzYzLCAxMTU3NjgsIDExNTc3MiwgMTE1Nzc3LCAxMTU3ODIsIDExNTc4NywgMTE1NzkyLCAxMTU3OTcsIAorICAgIDExNTgwMiwgMTE1ODA4LCAxMTU4MTQsIDExNTgyMCwgMTE1ODI1LCAxMTU4MzEsIDExNTgzNywgMTE1ODQzLCAxMTU4NDgsIAorICAgIDExNTg1NCwgMTE1ODYwLCAxMTU4NjUsIDExNTg3MCwgMTE1ODc2LCAxMTU4ODEsIDExNTg4NywgMTE1ODkzLCAxMTU4OTgsIAorICAgIDExNTkwNCwgMTE1OTEwLCAxMTU5MTUsIDExNTkyMSwgMTE1OTI3LCAxMTU5MzMsIDExNTkzOSwgMTE1OTQ1LCAxMTU5NTAsIAorICAgIDExNTk1NiwgMTE1OTYyLCAxMTU5NjgsIDExNTk3MywgMTE1OTc5LCAxMTU5ODUsIDExNTk5MSwgMTE1OTk2LCAxMTYwMDIsIAorICAgIDExNjAwOCwgMTE2MDEzLCAxMTYwMTgsIDExNjAyNCwgMTE2MDI5LCAxMTYwMzUsIDExNjA0MSwgMTE2MDQ2LCAxMTYwNTIsIAorICAgIDExNjA1OCwgMTE2MDYzLCAxMTYwNjksIDExNjA3NSwgMTE2MDgxLCAxMTYwODcsIDExNjA5MywgMTE2MDk3LCAwLCAKKyAgICAxMTYxMDIsIDExNjEwNywgMTE2MTExLCAxMTYxMTYsIDAsIDAsIDExNjEyMSwgMTE2MTI2LCAxMTYxMzEsIDExNjEzNSwgCisgICAgMTE2MTM5LCAxMTYxNDQsIDExNjE0OCwgMTE2MTUzLCAwLCAxMTYxNTgsIDExNjE2MywgMTE2MTY4LCAxMTYxNzIsIAorICAgIDExNjE3NywgMTE2MTgyLCAxMTYxODcsIDAsIDExNjE5MiwgMTE2MTk2LCAxMTYyMDEsIDExNjIwNiwgMTE2MjExLCAKKyAgICAxMTYyMTUsIDExNjIyMCwgMTE2MjI1LCAxMTYyMzAsIDExNjIzNCwgMTE2MjM5LCAxMTYyNDQsIDExNjI0OCwgMTE2MjUyLCAKKyAgICAxMTYyNTcsIDExNjI2MSwgMTE2MjY2LCAxMTYyNzEsIDExNjI3NSwgMTE2MjgwLCAxMTYyODUsIDExNjI4OSwgMTE2Mjk0LCAKKyAgICAxMTYyOTksIDExNjMwNCwgMTE2MzA5LCAxMTYzMTQsIDExNjMxOCwgMCwgMTE2MzIzLCAxMTYzMjgsIDExNjMzMiwgCisgICAgMTE2MzM3LCAwLCAxMTYzNDIsIDExNjM0NiwgMTE2MzUxLCAxMTYzNTYsIDExNjM2MCwgMCwgMTE2MzY0LCAwLCAwLCAwLCAKKyAgICAxMTYzNjgsIDExNjM3MywgMTE2Mzc4LCAxMTYzODIsIDExNjM4NywgMTE2MzkyLCAxMTYzOTcsIDAsIDExNjQwMiwgCisgICAgMTE2NDA2LCAxMTY0MTEsIDExNjQxNiwgMTE2NDIxLCAxMTY0MjUsIDExNjQzMCwgMTE2NDM1LCAxMTY0NDAsIDExNjQ0NCwgCisgICAgMTE2NDQ5LCAxMTY0NTQsIDExNjQ1OCwgMTE2NDYyLCAxMTY0NjcsIDExNjQ3MSwgMTE2NDc2LCAxMTY0ODEsIDExNjQ4NSwgCisgICAgMTE2NDkwLCAxMTY0OTUsIDExNjQ5OSwgMTE2NTA0LCAxMTY1MDksIDExNjUxNCwgMTE2NTE5LCAxMTY1MjQsIDExNjUyOSwgCisgICAgMTE2NTM1LCAxMTY1NDEsIDExNjU0NywgMTE2NTUyLCAxMTY1NTgsIDExNjU2NCwgMTE2NTcwLCAxMTY1NzUsIDExNjU4MSwgCisgICAgMTE2NTg3LCAxMTY1OTIsIDExNjU5NywgMTE2NjAzLCAxMTY2MDgsIDExNjYxNCwgMTE2NjIwLCAxMTY2MjUsIDExNjYzMSwgCisgICAgMTE2NjM3LCAxMTY2NDIsIDExNjY0OCwgMTE2NjU0LCAxMTY2NjAsIDExNjY2NiwgMTE2NjcyLCAxMTY2NzcsIDExNjY4MywgCisgICAgMTE2Njg5LCAxMTY2OTUsIDExNjcwMCwgMTE2NzA2LCAxMTY3MTIsIDExNjcxOCwgMTE2NzIzLCAxMTY3MjksIDExNjczNSwgCisgICAgMTE2NzQwLCAxMTY3NDUsIDExNjc1MSwgMTE2NzU2LCAxMTY3NjIsIDExNjc2OCwgMTE2NzczLCAxMTY3NzksIDExNjc4NSwgCisgICAgMTE2NzkwLCAxMTY3OTYsIDExNjgwMiwgMTE2ODA4LCAxMTY4MTQsIDExNjgyMCwgMTE2ODI0LCAxMTY4MjksIDExNjgzNCwgCisgICAgMTE2ODM5LCAxMTY4NDMsIDExNjg0OCwgMTE2ODUzLCAxMTY4NTgsIDExNjg2MiwgMTE2ODY3LCAxMTY4NzIsIDExNjg3NiwgCisgICAgMTE2ODgwLCAxMTY4ODUsIDExNjg4OSwgMTE2ODk0LCAxMTY4OTksIDExNjkwMywgMTE2OTA4LCAxMTY5MTMsIDExNjkxNywgCisgICAgMTE2OTIyLCAxMTY5MjcsIDExNjkzMiwgMTE2OTM3LCAxMTY5NDIsIDExNjk0NiwgMTE2OTUxLCAxMTY5NTYsIDExNjk2MSwgCisgICAgMTE2OTY1LCAxMTY5NzAsIDExNjk3NSwgMTE2OTgwLCAxMTY5ODQsIDExNjk4OSwgMTE2OTk0LCAxMTY5OTgsIDExNzAwMiwgCisgICAgMTE3MDA3LCAxMTcwMTEsIDExNzAxNiwgMTE3MDIxLCAxMTcwMjUsIDExNzAzMCwgMTE3MDM1LCAxMTcwMzksIDExNzA0NCwgCisgICAgMTE3MDQ5LCAxMTcwNTQsIDExNzA1OSwgMTE3MDY0LCAxMTcwNjksIDExNzA3NSwgMTE3MDgxLCAxMTcwODcsIDExNzA5MiwgCisgICAgMTE3MDk4LCAxMTcxMDQsIDExNzExMCwgMTE3MTE1LCAxMTcxMjEsIDExNzEyNywgMTE3MTMyLCAxMTcxMzcsIDExNzE0MywgCisgICAgMTE3MTQ4LCAxMTcxNTQsIDExNzE2MCwgMTE3MTY1LCAxMTcxNzEsIDExNzE3NywgMTE3MTgyLCAxMTcxODgsIDExNzE5NCwgCisgICAgMTE3MjAwLCAxMTcyMDYsIDExNzIxMiwgMTE3MjE3LCAxMTcyMjMsIDExNzIyOSwgMTE3MjM1LCAxMTcyNDAsIDExNzI0NiwgCisgICAgMTE3MjUyLCAxMTcyNTgsIDExNzI2MywgMTE3MjY5LCAxMTcyNzUsIDExNzI4MCwgMTE3Mjg1LCAxMTcyOTEsIDExNzI5NiwgCisgICAgMTE3MzAyLCAxMTczMDgsIDExNzMxMywgMTE3MzE5LCAxMTczMjUsIDExNzMzMCwgMTE3MzM2LCAxMTczNDIsIDExNzM0OCwgCisgICAgMTE3MzU0LCAxMTczNjAsIDExNzM2NSwgMTE3MzcxLCAxMTczNzcsIDExNzM4MywgMTE3Mzg4LCAxMTczOTQsIDExNzQwMCwgCisgICAgMTE3NDA2LCAxMTc0MTEsIDExNzQxNywgMTE3NDIzLCAxMTc0MjgsIDExNzQzMywgMTE3NDM5LCAxMTc0NDQsIDExNzQ1MCwgCisgICAgMTE3NDU2LCAxMTc0NjEsIDExNzQ2NywgMTE3NDczLCAxMTc0NzgsIDExNzQ4NCwgMTE3NDkwLCAxMTc0OTYsIDExNzUwMiwgCisgICAgMTE3NTA4LCAxMTc1MTMsIDExNzUxOSwgMTE3NTI1LCAxMTc1MzEsIDExNzUzNiwgMTE3NTQyLCAxMTc1NDgsIDExNzU1NCwgCisgICAgMTE3NTU5LCAxMTc1NjUsIDExNzU3MSwgMTE3NTc2LCAxMTc1ODEsIDExNzU4NywgMTE3NTkyLCAxMTc1OTgsIDExNzYwNCwgCisgICAgMTE3NjA5LCAxMTc2MTUsIDExNzYyMSwgMTE3NjI2LCAxMTc2MzIsIDExNzYzOCwgMTE3NjQ0LCAxMTc2NTAsIDExNzY1NiwgCisgICAgMTE3NjYyLCAxMTc2NjksIDExNzY3NiwgMTE3NjgzLCAxMTc2ODksIDExNzY5NiwgMTE3NzAzLCAxMTc3MTAsIDExNzcxNiwgCisgICAgMTE3NzIzLCAxMTc3MzAsIDExNzczNiwgMTE3NzQyLCAxMTc3NDksIDExNzc1NSwgMTE3NzYyLCAxMTc3NjksIDExNzc3NSwgCisgICAgMTE3NzgyLCAxMTc3ODksIDExNzc5NSwgMTE3ODAyLCAxMTc4MDksIDExNzgxNiwgMTE3ODIzLCAxMTc4MzAsIDExNzgzNiwgCisgICAgMTE3ODQzLCAxMTc4NTAsIDExNzg1NywgMTE3ODYzLCAxMTc4NzAsIDExNzg3NywgMTE3ODg0LCAxMTc4OTAsIDExNzg5NywgCisgICAgMTE3OTA0LCAxMTc5MTAsIDExNzkxNiwgMTE3OTIzLCAxMTc5MjksIDExNzkzNiwgMTE3OTQzLCAxMTc5NDksIDExNzk1NiwgCisgICAgMTE3OTYzLCAxMTc5NjksIDExNzk3NiwgMTE3OTgzLCAxMTc5OTAsIDExNzk5NywgMTE4MDA0LCAxMTgwMDksIDExODAxNSwgCisgICAgMTE4MDIxLCAxMTgwMjcsIDExODAzMiwgMTE4MDM4LCAxMTgwNDQsIDExODA1MCwgMTE4MDU1LCAxMTgwNjEsIDExODA2NywgCisgICAgMTE4MDcyLCAxMTgwNzcsIDExODA4MywgMTE4MDg4LCAxMTgwOTQsIDExODEwMCwgMTE4MTA1LCAxMTgxMTEsIDExODExNywgCisgICAgMTE4MTIyLCAxMTgxMjgsIDExODEzNCwgMTE4MTQwLCAxMTgxNDYsIDExODE1MiwgMTE4MTU3LCAxMTgxNjMsIDExODE2OSwgCisgICAgMTE4MTc1LCAxMTgxODAsIDExODE4NiwgMTE4MTkyLCAxMTgxOTgsIDExODIwMywgMTE4MjA5LCAxMTgyMTUsIDExODIyMCwgCisgICAgMTE4MjI1LCAxMTgyMzEsIDExODIzNiwgMTE4MjQyLCAxMTgyNDgsIDExODI1MywgMTE4MjU5LCAxMTgyNjUsIDExODI3MCwgCisgICAgMTE4Mjc2LCAxMTgyODIsIDExODI4OCwgMTE4Mjk0LCAxMTgzMDAsIDExODMwNiwgMCwgMCwgMTE4MzEzLCAxMTgzMTgsIAorICAgIDExODMyMywgMTE4MzI4LCAxMTgzMzMsIDExODMzOCwgMTE4MzQzLCAxMTgzNDgsIDExODM1MywgMTE4MzU4LCAxMTgzNjMsIAorICAgIDExODM2OCwgMTE4MzczLCAxMTgzNzgsIDExODM4MywgMTE4Mzg4LCAxMTgzOTMsIDExODM5OCwgMTE4NDA0LCAxMTg0MDksIAorICAgIDExODQxNCwgMTE4NDE5LCAxMTg0MjQsIDExODQyOSwgMTE4NDM0LCAxMTg0MzksIDExODQ0MywgMTE4NDQ4LCAxMTg0NTMsIAorICAgIDExODQ1OCwgMTE4NDYzLCAxMTg0NjgsIDExODQ3MywgMTE4NDc4LCAxMTg0ODMsIDExODQ4OCwgMTE4NDkzLCAxMTg0OTgsIAorICAgIDExODUwMywgMTE4NTA4LCAxMTg1MTMsIDExODUxOCwgMTE4NTIzLCAxMTg1MjgsIDExODUzNCwgMTE4NTM5LCAxMTg1NDQsIAorICAgIDExODU0OSwgMTE4NTU0LCAxMTg1NTksIDExODU2NCwgMTE4NTY5LCAxMTg1NzUsIDExODU4MCwgMTE4NTg1LCAxMTg1OTAsIAorICAgIDExODU5NSwgMTE4NjAwLCAxMTg2MDUsIDExODYxMCwgMTE4NjE1LCAxMTg2MjAsIDExODYyNSwgMTE4NjMwLCAxMTg2MzUsIAorICAgIDExODY0MCwgMTE4NjQ1LCAxMTg2NTAsIDExODY1NSwgMTE4NjYwLCAxMTg2NjUsIDExODY3MCwgMTE4Njc1LCAxMTg2ODAsIAorICAgIDExODY4NSwgMTE4NjkwLCAxMTg2OTYsIDExODcwMSwgMTE4NzA2LCAxMTg3MTEsIDExODcxNiwgMTE4NzIxLCAxMTg3MjYsIAorICAgIDExODczMSwgMTE4NzM1LCAxMTg3NDAsIDExODc0NSwgMTE4NzUwLCAxMTg3NTUsIDExODc2MCwgMTE4NzY1LCAxMTg3NzAsIAorICAgIDExODc3NSwgMTE4NzgwLCAxMTg3ODUsIDExODc5MCwgMTE4Nzk1LCAxMTg4MDAsIDExODgwNSwgMTE4ODEwLCAxMTg4MTUsIAorICAgIDExODgyMCwgMTE4ODI2LCAxMTg4MzEsIDExODgzNiwgMTE4ODQxLCAxMTg4NDYsIDExODg1MSwgMTE4ODU2LCAxMTg4NjEsIAorICAgIDExODg2NywgMTE4ODcyLCAxMTg4NzcsIDExODg4MiwgMTE4ODg3LCAxMTg4OTIsIDExODg5NywgMTE4OTAzLCAxMTg5MDksIAorICAgIDExODkxNSwgMTE4OTIxLCAxMTg5MjcsIDExODkzMywgMTE4OTM5LCAxMTg5NDUsIDExODk1MSwgMTE4OTU3LCAxMTg5NjMsIAorICAgIDExODk2OSwgMTE4OTc1LCAxMTg5ODEsIDExODk4NywgMTE4OTkzLCAxMTg5OTksIDExOTAwNiwgMTE5MDEyLCAxMTkwMTgsIAorICAgIDExOTAyNCwgMTE5MDMwLCAxMTkwMzYsIDExOTA0MiwgMTE5MDQ4LCAxMTkwNTMsIDExOTA1OSwgMTE5MDY1LCAxMTkwNzEsIAorICAgIDExOTA3NywgMTE5MDgzLCAxMTkwODksIDExOTA5NSwgMTE5MTAxLCAxMTkxMDcsIDExOTExMywgMTE5MTE5LCAxMTkxMjUsIAorICAgIDExOTEzMSwgMTE5MTM3LCAxMTkxNDMsIDExOTE0OSwgMTE5MTU1LCAxMTkxNjIsIDExOTE2OCwgMTE5MTc0LCAxMTkxODAsIAorICAgIDExOTE4NiwgMTE5MTkyLCAxMTkxOTgsIDExOTIwNCwgMTE5MjExLCAxMTkyMTcsIDExOTIyMywgMTE5MjI5LCAxMTkyMzUsIAorICAgIDExOTI0MSwgMTE5MjQ3LCAxMTkyNTMsIDExOTI1OSwgMTE5MjY1LCAxMTkyNzEsIDExOTI3NywgMTE5MjgzLCAxMTkyODksIAorICAgIDExOTI5NSwgMTE5MzAxLCAxMTkzMDcsIDExOTMxMywgMTE5MzE5LCAxMTkzMjUsIDExOTMzMSwgMTE5MzM3LCAxMTkzNDMsIAorICAgIDExOTM0OSwgMTE5MzU2LCAxMTkzNjIsIDExOTM2OCwgMTE5Mzc0LCAxMTkzODAsIDExOTM4NiwgMTE5MzkyLCAxMTkzOTgsIAorICAgIDExOTQwMywgMTE5NDA5LCAxMTk0MTUsIDExOTQyMSwgMTE5NDI3LCAxMTk0MzMsIDExOTQzOSwgMTE5NDQ1LCAxMTk0NTEsIAorICAgIDExOTQ1NywgMTE5NDYzLCAxMTk0NjksIDExOTQ3NSwgMTE5NDgxLCAxMTk0ODcsIDExOTQ5MywgMTE5NDk5LCAxMTk1MDUsIAorICAgIDExOTUxMiwgMTE5NTE4LCAxMTk1MjQsIDExOTUzMCwgMTE5NTM2LCAxMTk1NDIsIDExOTU0OCwgMTE5NTU0LCAxMTk1NjEsIAorICAgIDExOTU2NywgMTE5NTczLCAxMTk1NzksIDExOTU4NSwgMTE5NTkxLCAxMTk1OTcsIDExOTYwNCwgMTE5NjExLCAxMTk2MTgsIAorICAgIDExOTYyNSwgMTE5NjMyLCAxMTk2MzksIDExOTY0NiwgMTE5NjUzLCAxMTk2NjAsIDExOTY2NywgMTE5Njc0LCAxMTk2ODEsIAorICAgIDExOTY4OCwgMTE5Njk1LCAxMTk3MDIsIDExOTcwOSwgMTE5NzE2LCAxMTk3MjQsIDExOTczMSwgMTE5NzM4LCAxMTk3NDUsIAorICAgIDExOTc1MiwgMTE5NzU5LCAxMTk3NjYsIDExOTc3MywgMTE5Nzc5LCAxMTk3ODYsIDExOTc5MywgMTE5ODAwLCAxMTk4MDcsIAorICAgIDExOTgxNCwgMTE5ODIxLCAxMTk4MjgsIDExOTgzNSwgMTE5ODQyLCAxMTk4NDksIDExOTg1NiwgMTE5ODYzLCAxMTk4NzAsIAorICAgIDExOTg3NywgMTE5ODg0LCAxMTk4OTEsIDExOTg5OCwgMTE5OTA2LCAxMTk5MTMsIDExOTkyMCwgMTE5OTI3LCAxMTk5MzQsIAorICAgIDExOTk0MSwgMTE5OTQ4LCAxMTk5NTUsIDExOTk2MywgMTE5OTcwLCAxMTk5NzcsIDExOTk4NCwgMTE5OTkxLCAxMTk5OTgsIAorICAgIDEyMDAwNSwgMTIwMDEwLCAwLCAwLCAxMjAwMTUsIDEyMDAyMCwgMTIwMDI0LCAxMjAwMjgsIDEyMDAzMiwgMTIwMDM2LCAKKyAgICAxMjAwNDAsIDEyMDA0NCwgMTIwMDQ4LCAxMjAwNTIsIDEyMDA1NiwgMTIwMDYxLCAxMjAwNjUsIDEyMDA2OSwgMTIwMDczLCAKKyAgICAxMjAwNzcsIDEyMDA4MSwgMTIwMDg1LCAxMjAwODksIDEyMDA5MywgMTIwMDk3LCAxMjAxMDIsIDEyMDEwNiwgMTIwMTEwLCAKKyAgICAxMjAxMTQsIDEyMDExOCwgMTIwMTIyLCAxMjAxMjYsIDEyMDEzMCwgMTIwMTM0LCAxMjAxMzgsIDEyMDE0NCwgMTIwMTQ5LCAKKyAgICAxMjAxNTQsIDEyMDE1OSwgMTIwMTY0LCAxMjAxNjksIDEyMDE3NCwgMTIwMTc5LCAxMjAxODQsIDEyMDE4OSwgMTIwMTk1LCAKKyAgICAxMjAyMDAsIDEyMDIwNSwgMTIwMjEwLCAxMjAyMTUsIDEyMDIyMCwgMTIwMjI1LCAxMjAyMzAsIDEyMDIzNSwgMTIwMjQwLCAKKyAgICAxMjAyNDQsIDEyMDI0OCwgMTIwMjUyLCAwLCAxMjAyNTYsIDEyMDI2MCwgMTIwMjY0LCAxMjAyNjgsIDEyMDI3MiwgCiAgICAgMTIwMjc2LCAxMjAyODAsIDEyMDI4NCwgMTIwMjg4LCAxMjAyOTIsIDEyMDI5NiwgMTIwMzAwLCAxMjAzMDQsIDEyMDMwOCwgCi0gICAgMTIwMzEyLCAxMjAzMTYsIDEyMDMyMCwgMTIwMzI2LCAxMjAzMzIsIDEyMDMzOCwgMCwgMTIwMzQ0LCAxMjAzNDksIDAsIAotICAgIDEyMDM1NCwgMCwgMCwgMTIwMzU5LCAwLCAxMjAzNjQsIDEyMDM2OSwgMTIwMzc0LCAxMjAzNzksIDEyMDM4NCwgMTIwMzg5LCAKLSAgICAxMjAzOTQsIDEyMDM5OSwgMTIwNDA0LCAxMjA0MDksIDAsIDEyMDQxNCwgMTIwNDE5LCAxMjA0MjQsIDEyMDQyOSwgMCwgCi0gICAgMTIwNDM0LCAwLCAxMjA0MzksIDAsIDAsIDAsIDAsIDAsIDAsIDEyMDQ0NCwgMCwgMCwgMCwgMCwgMTIwNDUwLCAwLCAKLSAgICAxMjA0NTYsIDAsIDEyMDQ2MiwgMCwgMTIwNDY4LCAxMjA0NzQsIDEyMDQ4MCwgMCwgMTIwNDg2LCAxMjA0OTIsIDAsIAotICAgIDEyMDQ5OCwgMCwgMCwgMTIwNTA0LCAwLCAxMjA1MTAsIDAsIDEyMDUxNiwgMCwgMTIwNTIyLCAwLCAxMjA1MzAsIDAsIAotICAgIDEyMDUzOCwgMTIwNTQ0LCAwLCAxMjA1NTAsIDAsIDAsIDEyMDU1NiwgMTIwNTYyLCAxMjA1NjgsIDEyMDU3NCwgMCwgCi0gICAgMTIwNTgwLCAxMjA1ODYsIDEyMDU5MiwgMTIwNTk4LCAxMjA2MDQsIDEyMDYxMCwgMTIwNjE2LCAwLCAxMjA2MjIsIAotICAgIDEyMDYyOCwgMTIwNjM0LCAxMjA2NDAsIDAsIDEyMDY0NiwgMTIwNjUyLCAxMjA2NTgsIDEyMDY2NCwgMCwgMTIwNjcyLCAwLCAKLSAgICAxMjA2ODAsIDEyMDY4NiwgMTIwNjkyLCAxMjA2OTgsIDEyMDcwNCwgMTIwNzEwLCAxMjA3MTYsIDEyMDcyMiwgMTIwNzI4LCAKLSAgICAxMjA3MzQsIDAsIDEyMDc0MCwgMTIwNzQ2LCAxMjA3NTIsIDEyMDc1OCwgMTIwNzY0LCAxMjA3NzAsIDEyMDc3NiwgCi0gICAgMTIwNzgyLCAxMjA3ODgsIDEyMDc5NCwgMTIwODAwLCAxMjA4MDYsIDEyMDgxMiwgMTIwODE4LCAxMjA4MjQsIDEyMDgzMCwgCi0gICAgMTIwODM2LCAwLCAwLCAwLCAwLCAwLCAxMjA4NDIsIDEyMDg0NywgMTIwODUyLCAwLCAxMjA4NTcsIDEyMDg2MiwgMTIwODY3LCAKLSAgICAxMjA4NzIsIDEyMDg3NywgMCwgMTIwODgyLCAxMjA4ODcsIDEyMDg5MiwgMTIwODk3LCAxMjA5MDIsIDEyMDkwNywgCi0gICAgMTIwOTEyLCAxMjA5MTcsIDEyMDkyMiwgMTIwOTI3LCAxMjA5MzIsIDEyMDkzNywgMTIwOTQyLCAxMjA5NDcsIDEyMDk1MiwgCi0gICAgMTIwOTU3LCAxMjA5NjIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyMDk2NywgMTIwOTc3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAxMjA5ODUsIDEyMDk5MiwgMTIwOTk5LCAxMjEwMDYsIDEyMTAxMywgMTIxMDIwLCAxMjEwMjcsIAotICAgIDEyMTAzMywgMTIxMDQwLCAxMjEwNDcsIDEyMTA1NCwgMTIxMDYyLCAxMjEwNzAsIDEyMTA3OCwgMTIxMDg2LCAxMjEwOTQsIAotICAgIDEyMTEwMiwgMTIxMTA5LCAxMjExMTYsIDEyMTEyMywgMTIxMTMxLCAxMjExMzksIDEyMTE0NywgMTIxMTU1LCAxMjExNjMsIAotICAgIDEyMTE3MSwgMTIxMTc4LCAxMjExODUsIDEyMTE5MiwgMTIxMjAwLCAxMjEyMDgsIDEyMTIxNiwgMTIxMjI0LCAxMjEyMzIsIAotICAgIDEyMTI0MCwgMTIxMjQ1LCAxMjEyNTAsIDEyMTI1NSwgMTIxMjYwLCAxMjEyNjUsIDEyMTI3MCwgMTIxMjc1LCAxMjEyODAsIAotICAgIDEyMTI4NSwgMCwgMCwgMCwgMCwgMTIxMjkwLCAxMjEyOTUsIDEyMTI5OSwgMTIxMzAzLCAxMjEzMDcsIDEyMTMxMSwgCi0gICAgMTIxMzE1LCAxMjEzMTksIDEyMTMyMywgMTIxMzI3LCAxMjEzMzEsIDEyMTMzNSwgMTIxMzM5LCAxMjEzNDMsIDEyMTM0NywgCi0gICAgMTIxMzUxLCAxMjEzNTUsIDEyMTM1OSwgMTIxMzYzLCAxMjEzNjcsIDEyMTM3MSwgMTIxMzc1LCAxMjEzNzksIDEyMTM4MywgCi0gICAgMTIxMzg3LCAxMjEzOTEsIDEyMTM5NSwgMTIxMzk5LCAxMjE0MDMsIDEyMTQwNywgMTIxNDExLCAxMjE0MTUsIDEyMTQxOSwgCi0gICAgMTIxNDIzLCAxMjE0MjcsIDEyMTQzMSwgMTIxNDM1LCAxMjE0MzksIDEyMTQ0MywgMTIxNDQ3LCAxMjE0NTEsIDEyMTQ1NSwgCi0gICAgMTIxNDU5LCAxMjE0NjMsIDEyMTQ2NywgMTIxNDcxLCAxMjE0NzUsIDEyMTQ3OSwgMTIxNDgzLCAxMjE0ODcsIDEyMTQ5MSwgCi0gICAgMTIxNDk2LCAxMjE1MDAsIDEyMTUwNCwgMTIxNTA4LCAxMjE1MTIsIDEyMTUxNiwgMTIxNTIwLCAxMjE1MjQsIDEyMTUyOCwgCi0gICAgMTIxNTMyLCAxMjE1MzYsIDEyMTU0MCwgMTIxNTQ0LCAxMjE1NDgsIDEyMTU1MiwgMTIxNTU2LCAxMjE1NjAsIDEyMTU2NCwgCi0gICAgMTIxNTY4LCAxMjE1NzIsIDEyMTU3NiwgMTIxNTgwLCAxMjE1ODQsIDEyMTU4OCwgMTIxNTkyLCAxMjE1OTYsIDEyMTYwMCwgCi0gICAgMTIxNjA0LCAxMjE2MDgsIDEyMTYxMiwgMTIxNjE2LCAxMjE2MjAsIDEyMTYyNCwgMTIxNjI4LCAxMjE2MzIsIDEyMTYzNiwgCi0gICAgMTIxNjQwLCAxMjE2NDQsIDEyMTY0OCwgMTIxNjUyLCAxMjE2NTYsIDEyMTY2MCwgMTIxNjY0LCAxMjE2NjgsIDEyMTY3MiwgCi0gICAgMTIxNjc2LCAxMjE2ODAsIDEyMTY4NCwgMTIxNjg4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAxMjE2OTIsIDEyMTY5OCwgMTIxNzA3LCAxMjE3MTUsIDEyMTcyMywgMTIxNzMyLCAxMjE3NDEsIDEyMTc1MCwgMTIxNzU5LCAKLSAgICAxMjE3NjgsIDEyMTc3NywgMTIxNzg2LCAxMjE3OTUsIDEyMTgwNCwgMTIxODEzLCAwLCAwLCAxMjE4MjIsIDEyMTgzMSwgCi0gICAgMTIxODM5LCAxMjE4NDcsIDEyMTg1NiwgMTIxODY1LCAxMjE4NzQsIDEyMTg4MywgMTIxODkyLCAxMjE5MDEsIDEyMTkxMCwgCi0gICAgMTIxOTE5LCAxMjE5MjgsIDEyMTkzNywgMCwgMCwgMTIxOTQ2LCAxMjE5NTUsIDEyMTk2MywgMTIxOTcxLCAxMjE5ODAsIAotICAgIDEyMTk4OSwgMTIxOTk4LCAxMjIwMDcsIDEyMjAxNiwgMTIyMDI1LCAxMjIwMzQsIDEyMjA0MywgMTIyMDUyLCAxMjIwNjEsIAotICAgIDEyMjA3MCwgMCwgMTIyMDc3LCAxMjIwODYsIDEyMjA5NCwgMTIyMTAyLCAxMjIxMTEsIDEyMjEyMCwgMTIyMTI5LCAKLSAgICAxMjIxMzgsIDEyMjE0NywgMTIyMTU2LCAxMjIxNjUsIDEyMjE3NCwgMTIyMTgzLCAxMjIxOTIsIDEyMjIwMSwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMTIyMjA4LCAxMjIyMTUsIDEyMjIyMCwgMTIyMjI0LCAxMjIyMjgsIDEyMjIzMiwgMTIyMjM3LCAKLSAgICAxMjIyNDIsIDEyMjI0NywgMTIyMjUyLCAxMjIyNTcsIDAsIDAsIDAsIDAsIDAsIDEyMjI2MiwgMTIyMjY3LCAxMjIyNzMsIAotICAgIDEyMjI3OSwgMTIyMjg1LCAxMjIyOTAsIDEyMjI5NiwgMTIyMzAyLCAxMjIzMDgsIDEyMjMxMywgMTIyMzE5LCAxMjIzMjUsIAotICAgIDEyMjMzMCwgMTIyMzM1LCAxMjIzNDEsIDEyMjM0NiwgMTIyMzUyLCAxMjIzNTgsIDEyMjM2MywgMTIyMzY5LCAxMjIzNzUsIAotICAgIDEyMjM4MCwgMTIyMzg2LCAxMjIzOTIsIDEyMjM5OCwgMTIyNDA0LCAxMjI0MTAsIDEyMjQyMSwgMTIyNDI4LCAxMjI0MzQsIAotICAgIDEyMjQzNywgMCwgMTIyNDQwLCAxMjI0NDUsIDEyMjQ1MSwgMTIyNDU3LCAxMjI0NjMsIDEyMjQ2OCwgMTIyNDc0LCAKLSAgICAxMjI0ODAsIDEyMjQ4NiwgMTIyNDkxLCAxMjI0OTcsIDEyMjUwMywgMTIyNTA4LCAxMjI1MTMsIDEyMjUxOSwgMTIyNTI0LCAKLSAgICAxMjI1MzAsIDEyMjUzNiwgMTIyNTQxLCAxMjI1NDcsIDEyMjU1MywgMTIyNTU4LCAxMjI1NjQsIDEyMjU3MCwgMTIyNTc2LCAKLSAgICAxMjI1ODIsIDEyMjU4OCwgMTIyNTkxLCAxMjI1OTQsIDEyMjU5NywgMTIyNjAwLCAxMjI2MDMsIDEyMjYwNiwgMTIyNjEyLCAKLSAgICAxMjI2MTksIDEyMjYyNiwgMTIyNjMzLCAxMjI2MzksIDEyMjY0NiwgMTIyNjUzLCAxMjI2NjAsIDEyMjY2NiwgMTIyNjczLCAKLSAgICAxMjI2ODAsIDEyMjY4NiwgMTIyNjkyLCAxMjI2OTksIDEyMjcwNSwgMTIyNzEyLCAxMjI3MTksIDEyMjcyNSwgMTIyNzMyLCAKLSAgICAxMjI3MzksIDEyMjc0NSwgMTIyNzUyLCAxMjI3NTksIDEyMjc2NiwgMTIyNzczLCAxMjI3ODAsIDEyMjc4NSwgMCwgMCwgMCwgCi0gICAgMCwgMTIyNzkwLCAxMjI3OTYsIDEyMjgwMywgMTIyODEwLCAxMjI4MTcsIDEyMjgyMywgMTIyODMwLCAxMjI4MzcsIAotICAgIDEyMjg0NCwgMTIyODUwLCAxMjI4NTcsIDEyMjg2NCwgMTIyODcwLCAxMjI4NzYsIDEyMjg4MywgMTIyODg5LCAxMjI4OTYsIAotICAgIDEyMjkwMywgMTIyOTA5LCAxMjI5MTYsIDEyMjkyMywgMTIyOTI5LCAxMjI5MzYsIDEyMjk0MywgMTIyOTUwLCAxMjI5NTcsIAotICAgIDEyMjk2NCwgMTIyOTczLCAxMjI5NzcsIDEyMjk4MCwgMTIyOTgzLCAxMjI5ODcsIDEyMjk5MSwgMTIyOTk0LCAxMjI5OTcsIAotICAgIDEyMzAwMCwgMTIzMDAzLCAxMjMwMDYsIDEyMzAwOSwgMTIzMDEyLCAxMjMwMTUsIDEyMzAxOCwgMTIzMDI0LCAwLCAwLCAwLCAKKyAgICAxMjAzMTIsIDEyMDMxNiwgMTIwMzIwLCAxMjAzMjQsIDEyMDMyOCwgMTIwMzMyLCAxMjAzMzYsIDEyMDM0MCwgMTIwMzQ0LCAKKyAgICAxMjAzNDgsIDEyMDM1NCwgMTIwMzYwLCAxMjAzNjYsIDAsIDEyMDM3MiwgMTIwMzc3LCAwLCAxMjAzODIsIDAsIDAsIAorICAgIDEyMDM4NywgMCwgMTIwMzkyLCAxMjAzOTcsIDEyMDQwMiwgMTIwNDA3LCAxMjA0MTIsIDEyMDQxNywgMTIwNDIyLCAKKyAgICAxMjA0MjcsIDEyMDQzMiwgMTIwNDM3LCAwLCAxMjA0NDIsIDEyMDQ0NywgMTIwNDUyLCAxMjA0NTcsIDAsIDEyMDQ2MiwgMCwgCisgICAgMTIwNDY3LCAwLCAwLCAwLCAwLCAwLCAwLCAxMjA0NzIsIDAsIDAsIDAsIDAsIDEyMDQ3OCwgMCwgMTIwNDg0LCAwLCAKKyAgICAxMjA0OTAsIDAsIDEyMDQ5NiwgMTIwNTAyLCAxMjA1MDgsIDAsIDEyMDUxNCwgMTIwNTIwLCAwLCAxMjA1MjYsIDAsIDAsIAorICAgIDEyMDUzMiwgMCwgMTIwNTM4LCAwLCAxMjA1NDQsIDAsIDEyMDU1MCwgMCwgMTIwNTU4LCAwLCAxMjA1NjYsIDEyMDU3MiwgMCwgCisgICAgMTIwNTc4LCAwLCAwLCAxMjA1ODQsIDEyMDU5MCwgMTIwNTk2LCAxMjA2MDIsIDAsIDEyMDYwOCwgMTIwNjE0LCAxMjA2MjAsIAorICAgIDEyMDYyNiwgMTIwNjMyLCAxMjA2MzgsIDEyMDY0NCwgMCwgMTIwNjUwLCAxMjA2NTYsIDEyMDY2MiwgMTIwNjY4LCAwLCAKKyAgICAxMjA2NzQsIDEyMDY4MCwgMTIwNjg2LCAxMjA2OTIsIDAsIDEyMDcwMCwgMCwgMTIwNzA4LCAxMjA3MTQsIDEyMDcyMCwgCisgICAgMTIwNzI2LCAxMjA3MzIsIDEyMDczOCwgMTIwNzQ0LCAxMjA3NTAsIDEyMDc1NiwgMTIwNzYyLCAwLCAxMjA3NjgsIAorICAgIDEyMDc3NCwgMTIwNzgwLCAxMjA3ODYsIDEyMDc5MiwgMTIwNzk4LCAxMjA4MDQsIDEyMDgxMCwgMTIwODE2LCAxMjA4MjIsIAorICAgIDEyMDgyOCwgMTIwODM0LCAxMjA4NDAsIDEyMDg0NiwgMTIwODUyLCAxMjA4NTgsIDEyMDg2NCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMTIwODcwLCAxMjA4NzUsIDEyMDg4MCwgMCwgMTIwODg1LCAxMjA4OTAsIDEyMDg5NSwgMTIwOTAwLCAxMjA5MDUsIDAsIAorICAgIDEyMDkxMCwgMTIwOTE1LCAxMjA5MjAsIDEyMDkyNSwgMTIwOTMwLCAxMjA5MzUsIDEyMDk0MCwgMTIwOTQ1LCAxMjA5NTAsIAorICAgIDEyMDk1NSwgMTIwOTYwLCAxMjA5NjUsIDEyMDk3MCwgMTIwOTc1LCAxMjA5ODAsIDEyMDk4NSwgMTIwOTkwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAxMjA5OTUsIDEyMTAwNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTIxMDEzLCAKKyAgICAxMjEwMjAsIDEyMTAyNywgMTIxMDM0LCAxMjEwNDEsIDEyMTA0OCwgMTIxMDU1LCAxMjEwNjEsIDEyMTA2OCwgMTIxMDc1LCAKKyAgICAxMjEwODIsIDEyMTA5MCwgMTIxMDk4LCAxMjExMDYsIDEyMTExNCwgMTIxMTIyLCAxMjExMzAsIDEyMTEzNywgMTIxMTQ0LCAKKyAgICAxMjExNTEsIDEyMTE1OSwgMTIxMTY3LCAxMjExNzUsIDEyMTE4MywgMTIxMTkxLCAxMjExOTksIDEyMTIwNiwgMTIxMjEzLCAKKyAgICAxMjEyMjAsIDEyMTIyOCwgMTIxMjM2LCAxMjEyNDQsIDEyMTI1MiwgMTIxMjYwLCAxMjEyNjgsIDEyMTI3MywgMTIxMjc4LCAKKyAgICAxMjEyODMsIDEyMTI4OCwgMTIxMjkzLCAxMjEyOTgsIDEyMTMwMywgMTIxMzA4LCAxMjEzMTMsIDAsIDAsIDAsIDAsIAorICAgIDEyMTMxOCwgMTIxMzIzLCAxMjEzMjcsIDEyMTMzMSwgMTIxMzM1LCAxMjEzMzksIDEyMTM0MywgMTIxMzQ3LCAxMjEzNTEsIAorICAgIDEyMTM1NSwgMTIxMzU5LCAxMjEzNjMsIDEyMTM2NywgMTIxMzcxLCAxMjEzNzUsIDEyMTM3OSwgMTIxMzgzLCAxMjEzODcsIAorICAgIDEyMTM5MSwgMTIxMzk1LCAxMjEzOTksIDEyMTQwMywgMTIxNDA3LCAxMjE0MTEsIDEyMTQxNSwgMTIxNDE5LCAxMjE0MjMsIAorICAgIDEyMTQyNywgMTIxNDMxLCAxMjE0MzUsIDEyMTQzOSwgMTIxNDQzLCAxMjE0NDcsIDEyMTQ1MSwgMTIxNDU1LCAxMjE0NTksIAorICAgIDEyMTQ2MywgMTIxNDY3LCAxMjE0NzEsIDEyMTQ3NSwgMTIxNDc5LCAxMjE0ODMsIDEyMTQ4NywgMTIxNDkxLCAxMjE0OTUsIAorICAgIDEyMTQ5OSwgMTIxNTAzLCAxMjE1MDcsIDEyMTUxMSwgMTIxNTE1LCAxMjE1MTksIDEyMTUyNCwgMTIxNTI4LCAxMjE1MzIsIAorICAgIDEyMTUzNiwgMTIxNTQwLCAxMjE1NDQsIDEyMTU0OCwgMTIxNTUyLCAxMjE1NTYsIDEyMTU2MCwgMTIxNTY0LCAxMjE1NjgsIAorICAgIDEyMTU3MiwgMTIxNTc2LCAxMjE1ODAsIDEyMTU4NCwgMTIxNTg4LCAxMjE1OTIsIDEyMTU5NiwgMTIxNjAwLCAxMjE2MDQsIAorICAgIDEyMTYwOCwgMTIxNjEyLCAxMjE2MTYsIDEyMTYyMCwgMTIxNjI0LCAxMjE2MjgsIDEyMTYzMiwgMTIxNjM2LCAxMjE2NDAsIAorICAgIDEyMTY0NCwgMTIxNjQ4LCAxMjE2NTIsIDEyMTY1NiwgMTIxNjYwLCAxMjE2NjQsIDEyMTY2OCwgMTIxNjcyLCAxMjE2NzYsIAorICAgIDEyMTY4MCwgMTIxNjg0LCAxMjE2ODgsIDEyMTY5MiwgMTIxNjk2LCAxMjE3MDAsIDEyMTcwNCwgMTIxNzA4LCAxMjE3MTIsIAorICAgIDEyMTcxNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTIxNzIwLCAxMjE3MjYsIDEyMTczNSwgCisgICAgMTIxNzQzLCAxMjE3NTEsIDEyMTc2MCwgMTIxNzY5LCAxMjE3NzgsIDEyMTc4NywgMTIxNzk2LCAxMjE4MDUsIDEyMTgxNCwgCisgICAgMTIxODIzLCAxMjE4MzIsIDEyMTg0MSwgMCwgMCwgMTIxODUwLCAxMjE4NTksIDEyMTg2NywgMTIxODc1LCAxMjE4ODQsIAorICAgIDEyMTg5MywgMTIxOTAyLCAxMjE5MTEsIDEyMTkyMCwgMTIxOTI5LCAxMjE5MzgsIDEyMTk0NywgMTIxOTU2LCAxMjE5NjUsIAorICAgIDAsIDAsIDEyMTk3NCwgMTIxOTgzLCAxMjE5OTEsIDEyMTk5OSwgMTIyMDA4LCAxMjIwMTcsIDEyMjAyNiwgMTIyMDM1LCAKKyAgICAxMjIwNDQsIDEyMjA1MywgMTIyMDYyLCAxMjIwNzEsIDEyMjA4MCwgMTIyMDg5LCAxMjIwOTgsIDAsIDEyMjEwNSwgCisgICAgMTIyMTE0LCAxMjIxMjIsIDEyMjEzMCwgMTIyMTM5LCAxMjIxNDgsIDEyMjE1NywgMTIyMTY2LCAxMjIxNzUsIDEyMjE4NCwgCisgICAgMTIyMTkzLCAxMjIyMDIsIDEyMjIxMSwgMTIyMjIwLCAxMjIyMjksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyMjIzNiwgCisgICAgMTIyMjQzLCAxMjIyNDgsIDEyMjI1MiwgMTIyMjU2LCAxMjIyNjAsIDEyMjI2NSwgMTIyMjcwLCAxMjIyNzUsIDEyMjI4MCwgCisgICAgMTIyMjg1LCAwLCAwLCAwLCAwLCAwLCAxMjIyOTAsIDEyMjI5NSwgMTIyMzAxLCAxMjIzMDcsIDEyMjMxMywgMTIyMzE4LCAKKyAgICAxMjIzMjQsIDEyMjMzMCwgMTIyMzM2LCAxMjIzNDEsIDEyMjM0NywgMTIyMzUzLCAxMjIzNTgsIDEyMjM2MywgMTIyMzY5LCAKKyAgICAxMjIzNzQsIDEyMjM4MCwgMTIyMzg2LCAxMjIzOTEsIDEyMjM5NywgMTIyNDAzLCAxMjI0MDgsIDEyMjQxNCwgMTIyNDIwLCAKKyAgICAxMjI0MjYsIDEyMjQzMiwgMTIyNDM4LCAxMjI0NDksIDEyMjQ1NiwgMTIyNDYyLCAxMjI0NjUsIDAsIDEyMjQ2OCwgCisgICAgMTIyNDczLCAxMjI0NzksIDEyMjQ4NSwgMTIyNDkxLCAxMjI0OTYsIDEyMjUwMiwgMTIyNTA4LCAxMjI1MTQsIDEyMjUxOSwgCisgICAgMTIyNTI1LCAxMjI1MzEsIDEyMjUzNiwgMTIyNTQxLCAxMjI1NDcsIDEyMjU1MiwgMTIyNTU4LCAxMjI1NjQsIDEyMjU2OSwgCisgICAgMTIyNTc1LCAxMjI1ODEsIDEyMjU4NiwgMTIyNTkyLCAxMjI1OTgsIDEyMjYwNCwgMTIyNjEwLCAxMjI2MTYsIDEyMjYxOSwgCisgICAgMTIyNjIyLCAxMjI2MjUsIDEyMjYyOCwgMTIyNjMxLCAxMjI2MzQsIDEyMjY0MCwgMTIyNjQ3LCAxMjI2NTQsIDEyMjY2MSwgCisgICAgMTIyNjY3LCAxMjI2NzQsIDEyMjY4MSwgMTIyNjg4LCAxMjI2OTQsIDEyMjcwMSwgMTIyNzA4LCAxMjI3MTQsIDEyMjcyMCwgCisgICAgMTIyNzI3LCAxMjI3MzMsIDEyMjc0MCwgMTIyNzQ3LCAxMjI3NTMsIDEyMjc2MCwgMTIyNzY3LCAxMjI3NzMsIDEyMjc4MCwgCisgICAgMTIyNzg3LCAxMjI3OTQsIDEyMjgwMSwgMTIyODA4LCAxMjI4MTMsIDAsIDAsIDAsIDAsIDEyMjgxOCwgMTIyODI0LCAKKyAgICAxMjI4MzEsIDEyMjgzOCwgMTIyODQ1LCAxMjI4NTEsIDEyMjg1OCwgMTIyODY1LCAxMjI4NzIsIDEyMjg3OCwgMTIyODg1LCAKKyAgICAxMjI4OTIsIDEyMjg5OCwgMTIyOTA0LCAxMjI5MTEsIDEyMjkxNywgMTIyOTI0LCAxMjI5MzEsIDEyMjkzNywgMTIyOTQ0LCAKKyAgICAxMjI5NTEsIDEyMjk1NywgMTIyOTY0LCAxMjI5NzEsIDEyMjk3OCwgMTIyOTg1LCAxMjI5OTIsIDEyMzAwMSwgMTIzMDA1LCAKKyAgICAxMjMwMDgsIDEyMzAxMSwgMTIzMDE1LCAxMjMwMTksIDEyMzAyMiwgMTIzMDI1LCAxMjMwMjgsIDEyMzAzMSwgMTIzMDM0LCAKKyAgICAxMjMwMzcsIDEyMzA0MCwgMTIzMDQzLCAxMjMwNDYsIDEyMzA1MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMTIzMDI3LCAxMjMwMzQsIDEyMzA0MiwgMTIzMDUwLCAxMjMwNTgsIDEyMzA2NSwgMTIzMDczLCAxMjMwODEsIDEyMzA4OSwgCi0gICAgMTIzMDk2LCAxMjMxMDQsIDEyMzExMiwgMTIzMTE5LCAxMjMxMjYsIDEyMzEzNCwgMTIzMTQxLCAxMjMxNDksIDEyMzE1NywgCi0gICAgMTIzMTY0LCAxMjMxNzIsIDEyMzE4MCwgMTIzMTg3LCAxMjMxOTUsIDEyMzIwMywgMTIzMjExLCAxMjMyMTksIDEyMzIyNywgCi0gICAgMTIzMjMxLCAxMjMyMzUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyMzIzOCwgMTIzMjQ0LCAKLSAgICAxMjMyNTAsIDEyMzI1NiwgMTIzMjYwLCAxMjMyNjYsIDEyMzI3MiwgMTIzMjc4LCAxMjMyODQsIDEyMzI5MCwgMTIzMjk2LCAKLSAgICAxMjMzMDIsIDEyMzMwOCwgMTIzMzE0LCAxMjMzMjAsIDEyMzMyNiwgMTIzMzMyLCAxMjMzMzgsIDEyMzM0NCwgMTIzMzUwLCAKLSAgICAxMjMzNTYsIDEyMzM2MiwgMTIzMzY4LCAxMjMzNzQsIDEyMzM4MCwgMTIzMzg2LCAxMjMzOTIsIDEyMzM5OCwgMTIzNDA0LCAKLSAgICAxMjM0MTAsIDEyMzQxNiwgMTIzNDIyLCAxMjM0MjgsIDEyMzQzNCwgMTIzNDQwLCAxMjM0NDYsIDEyMzQ1MiwgMTIzNDU4LCAKLSAgICAxMjM0NjQsIDEyMzQ3MCwgMTIzNDc2LCAxMjM0ODIsIDEyMzQ4OCwgMCwgMCwgMCwgMCwgMCwgMTIzNDk0LCAxMjM1MDUsIAotICAgIDEyMzUxNiwgMTIzNTI3LCAxMjM1MzgsIDEyMzU0OSwgMTIzNTYwLCAxMjM1NzEsIDEyMzU4MiwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMTIzNTkzLCAxMjM1OTcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDEyMzYwMSwgMTIzNjAzLCAxMjM2MDUsIDEyMzYwOSwgMTIzNjE0LCAxMjM2MTksIDEyMzYyMSwgCi0gICAgMTIzNjI3LCAxMjM2MzIsIDEyMzYzNCwgMTIzNjQwLCAxMjM2NDQsIDEyMzY0NiwgMTIzNjUwLCAxMjM2NTYsIDEyMzY2MiwgCi0gICAgMTIzNjY4LCAxMjM2NzMsIDEyMzY3NywgMTIzNjg0LCAxMjM2OTEsIDEyMzY5OCwgMTIzNzAzLCAxMjM3MTAsIDEyMzcxNywgCi0gICAgMTIzNzI0LCAxMjM3MjgsIDEyMzczNCwgMTIzNzQzLCAxMjM3NTIsIDEyMzc1OSwgMTIzNzY0LCAxMjM3NjgsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyMzc3MiwgMTIzNzc0LCAxMjM3NzYsIDEyMzc4MCwgCi0gICAgMTIzNzg0LCAxMjM3ODgsIDAsIDEyMzc5MCwgMTIzNzkyLCAxMjM3OTYsIDEyMzc5OCwgMTIzODAwLCAxMjM4MDIsIAotICAgIDEyMzgwNCwgMTIzODA5LCAxMjM4MTQsIDEyMzgxNiwgMTIzODIyLCAxMjM4MjYsIDEyMzgzMCwgMTIzODM4LCAxMjM4NDAsIAotICAgIDEyMzg0MiwgMTIzODQ0LCAxMjM4NDYsIDEyMzg0OCwgMTIzODUwLCAxMjM4NTIsIDEyMzg1NCwgMTIzODU2LCAxMjM4NTgsIAotICAgIDEyMzg2MiwgMTIzODY2LCAxMjM4NjgsIDEyMzg3MCwgMTIzODcyLCAxMjM4NzQsIDEyMzg3NiwgMTIzODgxLCAxMjM4ODcsIAotICAgIDEyMzg5MSwgMTIzODk1LCAxMjM4OTksIDEyMzkwMywgMTIzOTA4LCAxMjM5MTIsIDEyMzkxNCwgMTIzOTE2LCAxMjM5MjAsIAotICAgIDEyMzkyNiwgMTIzOTI4LCAxMjM5MzAsIDEyMzkzMiwgMTIzOTM2LCAxMjM5NDUsIDEyMzk1MSwgMTIzOTU1LCAxMjM5NTksIAotICAgIDEyMzk2MSwgMTIzOTYzLCAxMjM5NjYsIDEyMzk2OCwgMTIzOTcwLCAxMjM5NzIsIDEyMzk3NiwgMTIzOTc4LCAxMjM5ODIsIAotICAgIDEyMzk4NywgMTIzOTg5LCAxMjM5OTQsIDEyNDAwMCwgMTI0MDA3LCAxMjQwMTEsIDEyNDAxNSwgMTI0MDE5LCAxMjQwMjMsIAotICAgIDEyNDAyOSwgMCwgMCwgMCwgMTI0MDMzLCAxMjQwMzUsIDEyNDAzOSwgMTI0MDQzLCAxMjQwNDUsIDEyNDA0OSwgMTI0MDUzLCAKLSAgICAxMjQwNTUsIDEyNDA1OSwgMTI0MDYxLCAxMjQwNjUsIDEyNDA2OSwgMTI0MDczLCAxMjQwNzcsIDEyNDA4MSwgMTI0MDg1LCAKLSAgICAxMjQwODksIDEyNDA5MywgMTI0MDk5LCAxMjQxMDMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDEyNDEwNywgMTI0MTExLCAxMjQxMTUsIDEyNDExOSwgMTI0MTI2LCAxMjQxMjgsIDEyNDEzMiwgMTI0MTM0LCAxMjQxMzYsIAotICAgIDEyNDE0MCwgMTI0MTQ0LCAxMjQxNDgsIDEyNDE1MCwgMTI0MTU0LCAxMjQxNTgsIDEyNDE2MiwgMTI0MTY2LCAxMjQxNzAsIAotICAgIDEyNDE3MiwgMTI0MTc2LCAxMjQxNzgsIDEyNDE4NCwgMTI0MTg3LCAxMjQxOTIsIDEyNDE5NCwgMTI0MTk2LCAxMjQxOTksIAotICAgIDEyNDIwMSwgMTI0MjAzLCAxMjQyMDYsIDEyNDIxMywgMTI0MjIwLCAxMjQyMjcsIDEyNDIzMiwgMTI0MjM2LCAxMjQyMzgsIAotICAgIDEyNDI0MCwgMCwgMTI0MjQyLCAxMjQyNDQsIDEyNDI0OCwgMTI0MjUyLCAxMjQyNTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyNDI1OCwgMTI0MjYyLCAxMjQyNjcsIDEyNDI3MSwgCi0gICAgMTI0Mjc3LCAxMjQyODMsIDEyNDI4NSwgMTI0Mjg3LCAxMjQyOTMsIDEyNDI5NSwgMTI0Mjk5LCAxMjQzMDMsIDEyNDMwNSwgCi0gICAgMTI0MzA5LCAxMjQzMTEsIDEyNDMxNSwgMTI0MzE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAxMjQzMjMsIDEyNDMyNSwgMTI0MzI3LCAxMjQzMjksIDEyNDMzMywgMTI0MzM1LCAxMjQzMzcsIDEyNDMzOSwgCi0gICAgMTI0MzQxLCAxMjQzNDMsIDEyNDM0NSwgMTI0MzQ3LCAxMjQzNDksIDEyNDM1MSwgMTI0MzUzLCAxMjQzNTUsIDEyNDM1NywgCi0gICAgMTI0MzU5LCAxMjQzNjEsIDEyNDM2MywgMTI0MzY1LCAxMjQzNjcsIDEyNDM2OSwgMTI0MzcxLCAxMjQzNzMsIDEyNDM3NSwgCi0gICAgMTI0Mzc3LCAxMjQzODEsIDEyNDM4MywgMTI0Mzg1LCAxMjQzODcsIDEyNDM5MSwgMTI0MzkzLCAxMjQzOTcsIDEyNDM5OSwgCi0gICAgMTI0NDAxLCAxMjQ0MDUsIDEyNDQwOSwgMTI0NDE1LCAxMjQ0MTcsIDEyNDQxOSwgMTI0NDIxLCAxMjQ0MjMsIDEyNDQyNywgCi0gICAgMTI0NDMxLCAxMjQ0MzMsIDEyNDQzNywgMTI0NDQxLCAxMjQ0NDUsIDEyNDQ0OSwgMTI0NDUzLCAxMjQ0NTcsIDEyNDQ2MSwgCi0gICAgMTI0NDY1LCAxMjQ0NjksIDEyNDQ3MywgMTI0NDc3LCAxMjQ0ODEsIDEyNDQ4NSwgMTI0NDg5LCAxMjQ0OTMsIDEyNDQ5NywgCi0gICAgMTI0NTAxLCAwLCAxMjQ1MDUsIDAsIDEyNDUwNywgMTI0NTA5LCAxMjQ1MTEsIDEyNDUxMywgMTI0NTE1LCAxMjQ1MjMsIAotICAgIDEyNDUzMSwgMTI0NTM5LCAxMjQ1NDcsIDEyNDU1MiwgMTI0NTU3LCAxMjQ1NjIsIDEyNDU2NiwgMTI0NTcwLCAxMjQ1NzUsIAotICAgIDEyNDU3OSwgMTI0NTgxLCAxMjQ1ODUsIDEyNDU4NywgMTI0NTg5LCAxMjQ1OTEsIDEyNDU5MywgMTI0NTk1LCAxMjQ1OTcsIAotICAgIDEyNDU5OSwgMTI0NjAzLCAxMjQ2MDUsIDEyNDYwNywgMTI0NjA5LCAxMjQ2MTMsIDEyNDYxNywgMTI0NjIxLCAxMjQ2MjUsIAotICAgIDEyNDYyOSwgMTI0NjMxLCAxMjQ2MzcsIDEyNDY0MywgMTI0NjQ1LCAxMjQ2NDcsIDEyNDY0OSwgMTI0NjUxLCAxMjQ2NTMsIAotICAgIDEyNDY2MiwgMTI0NjY5LCAxMjQ2NzYsIDEyNDY4MCwgMTI0Njg3LCAxMjQ2OTIsIDEyNDY5OSwgMTI0NzA4LCAxMjQ3MTMsIAotICAgIDEyNDcxNywgMTI0NzIxLCAxMjQ3MjMsIDEyNDcyNywgMTI0NzI5LCAxMjQ3MzMsIDEyNDczNywgMTI0NzM5LCAxMjQ3NDMsIAotICAgIDEyNDc0NywgMTI0NzUxLCAxMjQ3NTMsIDEyNDc1NSwgMTI0NzYxLCAxMjQ3NjMsIDEyNDc2NSwgMTI0NzY3LCAxMjQ3NzEsIAotICAgIDEyNDc3NSwgMTI0Nzc3LCAxMjQ3ODEsIDEyNDc4MywgMTI0Nzg1LCAxMjQ3ODgsIDEyNDc5MiwgMTI0Nzk0LCAxMjQ3OTgsIAotICAgIDEyNDgwMCwgMTI0ODAyLCAxMjQ4MDcsIDEyNDgwOSwgMTI0ODEzLCAxMjQ4MTcsIDEyNDgyMCwgMTI0ODI0LCAxMjQ4MjgsIAotICAgIDEyNDgzMiwgMTI0ODM2LCAxMjQ4NDAsIDEyNDg0NCwgMTI0ODQ4LCAxMjQ4NTMsIDEyNDg1NywgMTI0ODYxLCAxMjQ4NzAsIAotICAgIDEyNDg3NSwgMTI0ODc4LCAxMjQ4ODAsIDEyNDg4MywgMTI0ODg2LCAxMjQ4OTEsIDEyNDg5MywgMTI0ODk2LCAxMjQ5MDEsIAotICAgIDEyNDkwNSwgMTI0OTA4LCAxMjQ5MTIsIDEyNDkxNiwgMTI0OTE5LCAxMjQ5MjQsIDEyNDkyOCwgMTI0OTMyLCAxMjQ5MzYsIAotICAgIDEyNDk0MCwgMTI0OTQ2LCAxMjQ5NTIsIDEyNDk1OCwgMTI0OTY0LCAxMjQ5NjksIDEyNDk4MCwgMTI0OTgyLCAxMjQ5ODYsIAotICAgIDEyNDk4OCwgMTI0OTkwLCAxMjQ5OTQsIDEyNDk5OCwgMTI1MDAwLCAxMjUwMDQsIDEyNTAwOSwgMTI1MDE0LCAxMjUwMjAsIAotICAgIDEyNTAyMiwgMTI1MDI2LCAxMjUwMzAsIDEyNTAzNywgMTI1MDQ0LCAxMjUwNDgsIDEyNTA1MCwgMTI1MDUyLCAxMjUwNTYsIAotICAgIDEyNTA1OCwgMTI1MDYyLCAxMjUwNjYsIDEyNTA3MCwgMTI1MDcyLCAxMjUwNzQsIDEyNTA4MSwgMTI1MDg1LCAxMjUwODgsIAotICAgIDEyNTA5MiwgMTI1MDk2LCAxMjUxMDAsIDEyNTEwMiwgMTI1MTA2LCAxMjUxMDgsIDEyNTExMCwgMTI1MTE0LCAxMjUxMTYsIAotICAgIDEyNTEyMCwgMTI1MTI0LCAxMjUxMzAsIDEyNTEzNCwgMTI1MTM4LCAxMjUxNDIsIDEyNTE0NCwgMTI1MTQ3LCAxMjUxNTEsIAotICAgIDEyNTE1OCwgMTI1MTY3LCAxMjUxNzYsIDEyNTE4NCwgMTI1MTkyLCAxMjUxOTQsIDEyNTE5OCwgMTI1MjAwLCAxMjUyMDQsIAotICAgIDEyNTIxNSwgMTI1MjE5LCAxMjUyMjUsIDEyNTIzMSwgMTI1MjM2LCAwLCAxMjUyMzgsIDEyNTI0MiwgMTI1MjQ0LCAKLSAgICAxMjUyNDYsIDAsIDAsIDAsIDEyNTI0OCwgMTI1MjUzLCAxMjUyNjMsIDEyNTI3OCwgMTI1MjkwLCAxMjUzMDIsIDEyNTMwNiwgCi0gICAgMTI1MzEwLCAxMjUzMTYsIDEyNTMxOCwgMTI1MzI2LCAxMjUzMzQsIDEyNTMzNiwgMTI1MzQwLCAxMjUzNDYsIDEyNTM1MiwgCi0gICAgMTI1MzU5LCAxMjUzNjYsIDEyNTM2OCwgMTI1MzcwLCAxMjUzNzMsIDEyNTM3NSwgMTI1MzgxLCAxMjUzODMsIDEyNTM4NiwgCi0gICAgMTI1MzkwLCAxMjUzOTYsIDEyNTQwMiwgMTI1NDEzLCAxMjU0MTksIDEyNTQyNiwgMTI1NDM0LCAxMjU0MzgsIDEyNTQ0NiwgCi0gICAgMTI1NDU0LCAxMjU0NjAsIDEyNTQ2NiwgMTI1NDczLCAxMjU0NzUsIDEyNTQ3OSwgMTI1NDgxLCAxMjU0ODMsIDEyNTQ4OCwgCi0gICAgMTI1NDkwLCAxMjU0OTIsIDEyNTQ5NCwgMTI1NDk2LCAxMjU1MDAsIDEyNTUxMSwgMTI1NTE3LCAxMjU1MjEsIDEyNTUyNSwgCi0gICAgMTI1NTI5LCAxMjU1MzUsIDEyNTU0MSwgMTI1NTQ3LCAxMjU1NTMsIDEyNTU1OCwgMTI1NTYzLCAxMjU1NjksIDEyNTU3NSwgCi0gICAgMTI1NTgyLCAwLCAwLCAxMjU1ODksIDEyNTU5NCwgMTI1NjAyLCAxMjU2MDYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDEyNTYxNSwgMTI1NjIyLCAxMjU2MjksIDEyNTYzNiwgMTI1NjQ0LCAxMjU2NTIsIDEyNTY2MCwgMTI1NjY4LCAKLSAgICAxMjU2NzYsIDEyNTY4NCwgMTI1NjkyLCAxMjU3MDAsIDEyNTcwOCwgMTI1NzE0LCAxMjU3MjAsIDEyNTcyNiwgMTI1NzMyLCAKLSAgICAxMjU3MzgsIDEyNTc0NCwgMTI1NzUwLCAxMjU3NTYsIDEyNTc2MiwgMTI1NzY4LCAxMjU3NzQsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyMzA1NSwgMTIzMDYyLCAxMjMwNzAsIAorICAgIDEyMzA3OCwgMTIzMDg2LCAxMjMwOTMsIDEyMzEwMSwgMTIzMTA5LCAxMjMxMTcsIDEyMzEyNCwgMTIzMTMyLCAxMjMxNDAsIAorICAgIDEyMzE0NywgMTIzMTU0LCAxMjMxNjIsIDEyMzE2OSwgMTIzMTc3LCAxMjMxODUsIDEyMzE5MiwgMTIzMjAwLCAxMjMyMDgsIAorICAgIDEyMzIxNSwgMTIzMjIzLCAxMjMyMzEsIDEyMzIzOSwgMTIzMjQ3LCAxMjMyNTUsIDEyMzI1OSwgMTIzMjYzLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjMyNjYsIDEyMzI3MiwgMTIzMjc4LCAxMjMyODQsIDEyMzI4OCwgCisgICAgMTIzMjk0LCAxMjMzMDAsIDEyMzMwNiwgMTIzMzEyLCAxMjMzMTgsIDEyMzMyNCwgMTIzMzMwLCAxMjMzMzYsIDEyMzM0MiwgCisgICAgMTIzMzQ4LCAxMjMzNTQsIDEyMzM2MCwgMTIzMzY2LCAxMjMzNzIsIDEyMzM3OCwgMTIzMzg0LCAxMjMzOTAsIDEyMzM5NiwgCisgICAgMTIzNDAyLCAxMjM0MDgsIDEyMzQxNCwgMTIzNDIwLCAxMjM0MjYsIDEyMzQzMiwgMTIzNDM4LCAxMjM0NDQsIDEyMzQ1MCwgCisgICAgMTIzNDU2LCAxMjM0NjIsIDEyMzQ2OCwgMTIzNDc0LCAxMjM0ODAsIDEyMzQ4NiwgMTIzNDkyLCAxMjM0OTgsIDEyMzUwNCwgCisgICAgMTIzNTEwLCAxMjM1MTYsIDAsIDAsIDAsIDAsIDAsIDEyMzUyMiwgMTIzNTMzLCAxMjM1NDQsIDEyMzU1NSwgMTIzNTY2LCAKKyAgICAxMjM1NzcsIDEyMzU4OCwgMTIzNTk5LCAxMjM2MTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyMzYyMSwgMTIzNjI1LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjM2MjksIAorICAgIDEyMzYzMSwgMTIzNjMzLCAxMjM2MzcsIDEyMzY0MiwgMTIzNjQ3LCAxMjM2NDksIDEyMzY1NSwgMTIzNjYwLCAxMjM2NjIsIAorICAgIDEyMzY2OCwgMTIzNjcyLCAxMjM2NzQsIDEyMzY3OCwgMTIzNjg0LCAxMjM2OTAsIDEyMzY5NiwgMTIzNzAxLCAxMjM3MDUsIAorICAgIDEyMzcxMiwgMTIzNzE5LCAxMjM3MjYsIDEyMzczMSwgMTIzNzM4LCAxMjM3NDUsIDEyMzc1MiwgMTIzNzU2LCAxMjM3NjIsIAorICAgIDEyMzc3MSwgMTIzNzgwLCAxMjM3ODcsIDEyMzc5MiwgMTIzNzk2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAxMjM4MDAsIDEyMzgwMiwgMTIzODA0LCAxMjM4MDgsIDEyMzgxMiwgMTIzODE2LCAwLCAxMjM4MTgsIAorICAgIDEyMzgyMCwgMTIzODI0LCAxMjM4MjYsIDEyMzgyOCwgMTIzODMwLCAxMjM4MzIsIDEyMzgzNywgMTIzODQyLCAxMjM4NDQsIAorICAgIDEyMzg1MCwgMTIzODU0LCAxMjM4NTgsIDEyMzg2NiwgMTIzODY4LCAxMjM4NzAsIDEyMzg3MiwgMTIzODc0LCAxMjM4NzYsIAorICAgIDEyMzg3OCwgMTIzODgwLCAxMjM4ODIsIDEyMzg4NCwgMTIzODg2LCAxMjM4OTAsIDEyMzg5NCwgMTIzODk2LCAxMjM4OTgsIAorICAgIDEyMzkwMCwgMTIzOTAyLCAxMjM5MDQsIDEyMzkwOSwgMTIzOTE1LCAxMjM5MTksIDEyMzkyMywgMTIzOTI3LCAxMjM5MzEsIAorICAgIDEyMzkzNiwgMTIzOTQwLCAxMjM5NDIsIDEyMzk0NCwgMTIzOTQ4LCAxMjM5NTQsIDEyMzk1NiwgMTIzOTU4LCAxMjM5NjAsIAorICAgIDEyMzk2NCwgMTIzOTczLCAxMjM5NzksIDEyMzk4MywgMTIzOTg3LCAxMjM5ODksIDEyMzk5MSwgMTIzOTk0LCAxMjM5OTYsIAorICAgIDEyMzk5OCwgMTI0MDAwLCAxMjQwMDQsIDEyNDAwNiwgMTI0MDEwLCAxMjQwMTUsIDEyNDAxNywgMTI0MDIyLCAxMjQwMjgsIAorICAgIDEyNDAzNSwgMTI0MDM5LCAxMjQwNDMsIDEyNDA0NywgMTI0MDUxLCAxMjQwNTcsIDAsIDAsIDAsIDEyNDA2MSwgMTI0MDYzLCAKKyAgICAxMjQwNjcsIDEyNDA3MSwgMTI0MDczLCAxMjQwNzcsIDEyNDA4MSwgMTI0MDgzLCAxMjQwODcsIDEyNDA4OSwgMTI0MDkzLCAKKyAgICAxMjQwOTcsIDEyNDEwMSwgMTI0MTA1LCAxMjQxMDksIDEyNDExMywgMTI0MTE3LCAxMjQxMjEsIDEyNDEyNywgMTI0MTMxLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjQxMzUsIDEyNDEzOSwgMTI0MTQzLCAxMjQxNDcsIAorICAgIDEyNDE1NCwgMTI0MTU2LCAxMjQxNjAsIDEyNDE2MiwgMTI0MTY0LCAxMjQxNjgsIDEyNDE3MiwgMTI0MTc2LCAxMjQxNzgsIAorICAgIDEyNDE4MiwgMTI0MTg2LCAxMjQxOTAsIDEyNDE5NCwgMTI0MTk4LCAxMjQyMDAsIDEyNDIwNCwgMTI0MjA2LCAxMjQyMTIsIAorICAgIDEyNDIxNSwgMTI0MjIwLCAxMjQyMjIsIDEyNDIyNCwgMTI0MjI3LCAxMjQyMjksIDEyNDIzMSwgMTI0MjM0LCAxMjQyNDEsIAorICAgIDEyNDI0OCwgMTI0MjU1LCAxMjQyNjAsIDEyNDI2NCwgMTI0MjY2LCAxMjQyNjgsIDAsIDEyNDI3MCwgMTI0MjcyLCAKKyAgICAxMjQyNzYsIDEyNDI4MCwgMTI0Mjg0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAxMjQyODYsIDEyNDI5MCwgMTI0Mjk1LCAxMjQyOTksIDEyNDMwNSwgMTI0MzExLCAxMjQzMTMsIAorICAgIDEyNDMxNSwgMTI0MzIxLCAxMjQzMjMsIDEyNDMyNywgMTI0MzMxLCAxMjQzMzMsIDEyNDMzNywgMTI0MzM5LCAxMjQzNDMsIAorICAgIDEyNDM0NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTI0MzUxLCAxMjQzNTMsIAorICAgIDEyNDM1NSwgMTI0MzU3LCAxMjQzNjEsIDEyNDM2MywgMTI0MzY1LCAxMjQzNjcsIDEyNDM2OSwgMTI0MzcxLCAxMjQzNzMsIAorICAgIDEyNDM3NSwgMTI0Mzc3LCAxMjQzNzksIDEyNDM4MSwgMTI0MzgzLCAxMjQzODUsIDEyNDM4NywgMTI0Mzg5LCAxMjQzOTEsIAorICAgIDEyNDM5MywgMTI0Mzk1LCAxMjQzOTcsIDEyNDM5OSwgMTI0NDAxLCAxMjQ0MDMsIDEyNDQwNSwgMTI0NDA5LCAxMjQ0MTEsIAorICAgIDEyNDQxMywgMTI0NDE1LCAxMjQ0MTksIDEyNDQyMSwgMTI0NDI1LCAxMjQ0MjcsIDEyNDQyOSwgMTI0NDMzLCAxMjQ0MzcsIAorICAgIDEyNDQ0MywgMTI0NDQ1LCAxMjQ0NDcsIDEyNDQ0OSwgMTI0NDUxLCAxMjQ0NTUsIDEyNDQ1OSwgMTI0NDYxLCAxMjQ0NjUsIAorICAgIDEyNDQ2OSwgMTI0NDczLCAxMjQ0NzcsIDEyNDQ4MSwgMTI0NDg1LCAxMjQ0ODksIDEyNDQ5MywgMTI0NDk3LCAxMjQ1MDEsIAorICAgIDEyNDUwNSwgMTI0NTA5LCAxMjQ1MTMsIDEyNDUxNywgMTI0NTIxLCAxMjQ1MjUsIDEyNDUyOSwgMCwgMTI0NTMzLCAwLCAKKyAgICAxMjQ1MzUsIDEyNDUzNywgMTI0NTM5LCAxMjQ1NDEsIDEyNDU0MywgMTI0NTUxLCAxMjQ1NTksIDEyNDU2NywgMTI0NTc1LCAKKyAgICAxMjQ1ODAsIDEyNDU4NSwgMTI0NTkwLCAxMjQ1OTQsIDEyNDU5OCwgMTI0NjAzLCAxMjQ2MDcsIDEyNDYwOSwgMTI0NjEzLCAKKyAgICAxMjQ2MTUsIDEyNDYxNywgMTI0NjE5LCAxMjQ2MjEsIDEyNDYyMywgMTI0NjI1LCAxMjQ2MjcsIDEyNDYzMSwgMTI0NjMzLCAKKyAgICAxMjQ2MzUsIDEyNDYzNywgMTI0NjQxLCAxMjQ2NDUsIDEyNDY0OSwgMTI0NjUzLCAxMjQ2NTcsIDEyNDY1OSwgMTI0NjY1LCAKKyAgICAxMjQ2NzEsIDEyNDY3MywgMTI0Njc1LCAxMjQ2NzcsIDEyNDY3OSwgMTI0NjgxLCAxMjQ2OTAsIDEyNDY5NywgMTI0NzA0LCAKKyAgICAxMjQ3MDgsIDEyNDcxNSwgMTI0NzIwLCAxMjQ3MjcsIDEyNDczNiwgMTI0NzQxLCAxMjQ3NDUsIDEyNDc0OSwgMTI0NzUxLCAKKyAgICAxMjQ3NTUsIDEyNDc1NywgMTI0NzYxLCAxMjQ3NjUsIDEyNDc2NywgMTI0NzcxLCAxMjQ3NzUsIDEyNDc3OSwgMTI0NzgxLCAKKyAgICAxMjQ3ODMsIDEyNDc4OSwgMTI0NzkxLCAxMjQ3OTMsIDEyNDc5NSwgMTI0Nzk5LCAxMjQ4MDMsIDEyNDgwNSwgMTI0ODA5LCAKKyAgICAxMjQ4MTEsIDEyNDgxMywgMTI0ODE2LCAxMjQ4MjAsIDEyNDgyMiwgMTI0ODI2LCAxMjQ4MjgsIDEyNDgzMCwgMTI0ODM1LCAKKyAgICAxMjQ4MzcsIDEyNDg0MSwgMTI0ODQ1LCAxMjQ4NDgsIDEyNDg1MiwgMTI0ODU2LCAxMjQ4NjAsIDEyNDg2NCwgMTI0ODY4LCAKKyAgICAxMjQ4NzIsIDEyNDg3NiwgMTI0ODgxLCAxMjQ4ODUsIDEyNDg4OSwgMTI0ODk4LCAxMjQ5MDMsIDEyNDkwNiwgMTI0OTA4LCAKKyAgICAxMjQ5MTEsIDEyNDkxNCwgMTI0OTE5LCAxMjQ5MjEsIDEyNDkyNCwgMTI0OTI5LCAxMjQ5MzMsIDEyNDkzNiwgMTI0OTQwLCAKKyAgICAxMjQ5NDQsIDEyNDk0NywgMTI0OTUyLCAxMjQ5NTYsIDEyNDk2MCwgMTI0OTY0LCAxMjQ5NjgsIDEyNDk3NCwgMTI0OTgwLCAKKyAgICAxMjQ5ODYsIDEyNDk5MiwgMTI0OTk3LCAxMjUwMDgsIDEyNTAxMCwgMTI1MDE0LCAxMjUwMTYsIDEyNTAxOCwgMTI1MDIyLCAKKyAgICAxMjUwMjYsIDEyNTAyOCwgMTI1MDMyLCAxMjUwMzcsIDEyNTA0MiwgMTI1MDQ4LCAxMjUwNTAsIDEyNTA1NCwgMTI1MDU4LCAKKyAgICAxMjUwNjUsIDEyNTA3MiwgMTI1MDc2LCAxMjUwNzgsIDEyNTA4MCwgMTI1MDg0LCAxMjUwODYsIDEyNTA5MCwgMTI1MDk0LCAKKyAgICAxMjUwOTgsIDEyNTEwMCwgMTI1MTAyLCAxMjUxMDksIDEyNTExMywgMTI1MTE2LCAxMjUxMjAsIDEyNTEyNCwgMTI1MTI4LCAKKyAgICAxMjUxMzAsIDEyNTEzNCwgMTI1MTM2LCAxMjUxMzgsIDEyNTE0MiwgMTI1MTQ0LCAxMjUxNDgsIDEyNTE1MiwgMTI1MTU4LCAKKyAgICAxMjUxNjIsIDEyNTE2NiwgMTI1MTcwLCAxMjUxNzIsIDEyNTE3NSwgMTI1MTc5LCAxMjUxODYsIDEyNTE5NSwgMTI1MjA0LCAKKyAgICAxMjUyMTIsIDEyNTIyMCwgMTI1MjIyLCAxMjUyMjYsIDEyNTIyOCwgMTI1MjMyLCAxMjUyNDMsIDEyNTI0NywgMTI1MjUzLCAKKyAgICAxMjUyNTksIDEyNTI2NCwgMCwgMTI1MjY2LCAxMjUyNzAsIDEyNTI3MiwgMTI1Mjc0LCAwLCAwLCAwLCAxMjUyNzYsIAorICAgIDEyNTI4MSwgMTI1MjkxLCAxMjUzMDYsIDEyNTMxOCwgMTI1MzMwLCAxMjUzMzQsIDEyNTMzOCwgMTI1MzQ0LCAxMjUzNDYsIAorICAgIDEyNTM1NCwgMTI1MzYyLCAxMjUzNjQsIDEyNTM2OCwgMTI1Mzc0LCAxMjUzODAsIDEyNTM4NywgMTI1Mzk0LCAxMjUzOTYsIAorICAgIDEyNTM5OCwgMTI1NDAxLCAxMjU0MDMsIDEyNTQwOSwgMTI1NDExLCAxMjU0MTQsIDEyNTQxOCwgMTI1NDI0LCAxMjU0MzAsIAorICAgIDEyNTQ0MSwgMTI1NDQ3LCAxMjU0NTQsIDEyNTQ2MiwgMTI1NDY2LCAxMjU0NzQsIDEyNTQ4MiwgMTI1NDg4LCAxMjU0OTQsIAorICAgIDEyNTUwMSwgMTI1NTAzLCAxMjU1MDcsIDEyNTUwOSwgMTI1NTExLCAxMjU1MTYsIDEyNTUxOCwgMTI1NTIwLCAxMjU1MjIsIAorICAgIDEyNTUyNCwgMTI1NTI4LCAxMjU1MzksIDEyNTU0NSwgMTI1NTQ5LCAxMjU1NTMsIDEyNTU1NywgMTI1NTYzLCAxMjU1NjksIAorICAgIDEyNTU3NSwgMTI1NTgxLCAxMjU1ODYsIDEyNTU5MSwgMTI1NTk3LCAxMjU2MDMsIDEyNTYxMCwgMCwgMCwgMTI1NjE3LCAKKyAgICAxMjU2MjIsIDEyNTYzMCwgMTI1NjM0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjU2NDMsIAorICAgIDEyNTY1MCwgMTI1NjU3LCAxMjU2NjQsIDEyNTY3MiwgMTI1NjgwLCAxMjU2ODgsIDEyNTY5NiwgMTI1NzA0LCAxMjU3MTIsIAorICAgIDEyNTcyMCwgMTI1NzI4LCAxMjU3MzYsIDEyNTc0MiwgMTI1NzQ4LCAxMjU3NTQsIDEyNTc2MCwgMTI1NzY2LCAxMjU3NzIsIAorICAgIDEyNTc3OCwgMTI1Nzg0LCAxMjU3OTAsIDEyNTc5NiwgMTI1ODAyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjU3ODAsIAotICAgIDEyNTc4NCwgMTI1Nzg4LCAxMjU3OTMsIDEyNTc5OCwgMTI1ODAwLCAxMjU4MDQsIDEyNTgxMywgMTI1ODIxLCAxMjU4MjksIAotICAgIDEyNTg0MiwgMTI1ODU1LCAxMjU4NjgsIDEyNTg3NSwgMTI1ODgyLCAxMjU4ODYsIDEyNTg5NSwgMTI1OTAzLCAxMjU5MDcsIAotICAgIDEyNTkxNiwgMTI1OTIzLCAxMjU5MjcsIDEyNTkzMSwgMTI1OTM1LCAxMjU5MzksIDEyNTk0NiwgMTI1OTUwLCAxMjU5NTQsIAotICAgIDEyNTk1OCwgMTI1OTYyLCAxMjU5NjksIDEyNTk3OCwgMTI1OTg3LCAxMjU5OTQsIDEyNjAwNiwgMTI2MDE4LCAxMjYwMjIsIAotICAgIDEyNjAyNiwgMTI2MDMwLCAxMjYwMzQsIDEyNjAzOCwgMTI2MDQyLCAxMjYwNTAsIDEyNjA1OCwgMTI2MDY2LCAxMjYwNzAsIAotICAgIDEyNjA3NCwgMTI2MDc4LCAxMjYwODIsIDEyNjA4NiwgMTI2MDkwLCAxMjYwOTYsIDEyNjEwMiwgMTI2MTA2LCAxMjYxMTcsIAotICAgIDEyNjEyNSwgMTI2MTI5LCAxMjYxMzMsIDEyNjEzNywgMTI2MTQxLCAxMjYxNDcsIDEyNjE1NCwgMTI2MTY1LCAxMjYxNzUsIAotICAgIDEyNjE4NSwgMTI2MTk2LCAxMjYyMDUsIDEyNjIxNiwgMTI2MjIyLCAxMjYyMjgsIDAsIDAsIDAsIDAsIDEyNjIzNCwgCi0gICAgMTI2MjQzLCAxMjYyNTAsIDEyNjI1NiwgMTI2MjYwLCAxMjYyNjQsIDEyNjI2OCwgMTI2Mjc3LCAxMjYyODksIDEyNjI5MywgCi0gICAgMTI2MzAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjU4MDgsIDEyNTgxMiwgMTI1ODE2LCAKKyAgICAxMjU4MjEsIDEyNTgyNiwgMTI1ODI4LCAxMjU4MzIsIDEyNTg0MSwgMTI1ODQ5LCAxMjU4NTcsIDEyNTg3MCwgMTI1ODgzLCAKKyAgICAxMjU4OTYsIDEyNTkwMywgMTI1OTEwLCAxMjU5MTQsIDEyNTkyMywgMTI1OTMxLCAxMjU5MzUsIDEyNTk0NCwgMTI1OTUxLCAKKyAgICAxMjU5NTUsIDEyNTk1OSwgMTI1OTYzLCAxMjU5NjcsIDEyNTk3NCwgMTI1OTc4LCAxMjU5ODIsIDEyNTk4NiwgMTI1OTkwLCAKKyAgICAxMjU5OTcsIDEyNjAwNiwgMTI2MDE1LCAxMjYwMjIsIDEyNjAzNCwgMTI2MDQ2LCAxMjYwNTAsIDEyNjA1NCwgMTI2MDU4LCAKKyAgICAxMjYwNjIsIDEyNjA2NiwgMTI2MDcwLCAxMjYwNzgsIDEyNjA4NiwgMTI2MDk0LCAxMjYwOTgsIDEyNjEwMiwgMTI2MTA2LCAKKyAgICAxMjYxMTAsIDEyNjExNCwgMTI2MTE4LCAxMjYxMjQsIDEyNjEzMCwgMTI2MTM0LCAxMjYxNDUsIDEyNjE1MywgMTI2MTU3LCAKKyAgICAxMjYxNjEsIDEyNjE2NSwgMTI2MTY5LCAxMjYxNzUsIDEyNjE4MiwgMTI2MTkzLCAxMjYyMDMsIDEyNjIxMywgMTI2MjI0LCAKKyAgICAxMjYyMzMsIDEyNjI0NCwgMTI2MjUwLCAxMjYyNTYsIDAsIDAsIDAsIDAsIDEyNjI2MiwgMTI2MjcxLCAxMjYyNzgsIAorICAgIDEyNjI4NCwgMTI2Mjg4LCAxMjYyOTIsIDEyNjI5NiwgMTI2MzA1LCAxMjYzMTcsIDEyNjMyMSwgMTI2MzI4LCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAxMjYzMDcsIDEyNjMwOSwgMTI2MzExLCAxMjYzMTUsIDEyNjMxOSwgMTI2MzIzLCAxMjYzMzIsIDEyNjMzNCwgCi0gICAgMTI2MzM2LCAxMjYzMzksIDEyNjM0MSwgMTI2MzQzLCAxMjYzNDcsIDEyNjM0OSwgMTI2MzUzLCAxMjYzNTUsIDEyNjM1OSwgCi0gICAgMTI2MzYxLCAxMjYzNjMsIDEyNjM2NywgMTI2MzcxLCAxMjYzNzcsIDEyNjM3OSwgMTI2MzgzLCAxMjYzODUsIDEyNjM4OSwgCi0gICAgMTI2MzkzLCAxMjYzOTcsIDEyNjQwMSwgMTI2NDAzLCAxMjY0MDUsIDEyNjQwOSwgMTI2NDEzLCAxMjY0MTcsIDEyNjQyMSwgCi0gICAgMTI2NDIzLCAxMjY0MjUsIDEyNjQyNywgMTI2NDMyLCAxMjY0MzcsIDEyNjQ0MCwgMTI2NDQ4LCAxMjY0NTYsIDEyNjQ1OCwgCi0gICAgMTI2NDYzLCAxMjY0NjYsIDEyNjQ3MSwgMTI2NDgyLCAxMjY0ODksIDEyNjQ5NCwgMTI2NDk5LCAxMjY1MDEsIDEyNjUwNSwgCi0gICAgMTI2NTA3LCAxMjY1MTEsIDEyNjUxMywgMTI2NTE3LCAxMjY1MjEsIDEyNjUyNCwgMTI2NTI3LCAxMjY1MjksIDEyNjUzMiwgCi0gICAgMTI2NTM0LCAxMjY1MzgsIDEyNjU0MCwgMTI2NTQyLCAxMjY1NDQsIDEyNjU0OCwgMTI2NTUwLCAxMjY1NTQsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyNjMzNSwgCisgICAgMTI2MzM3LCAxMjYzMzksIDEyNjM0MywgMTI2MzQ3LCAxMjYzNTEsIDEyNjM2MCwgMTI2MzYyLCAxMjYzNjQsIDEyNjM2NywgCisgICAgMTI2MzY5LCAxMjYzNzEsIDEyNjM3NSwgMTI2Mzc3LCAxMjYzODEsIDEyNjM4MywgMTI2Mzg3LCAxMjYzODksIDEyNjM5MSwgCisgICAgMTI2Mzk1LCAxMjYzOTksIDEyNjQwNSwgMTI2NDA3LCAxMjY0MTEsIDEyNjQxMywgMTI2NDE3LCAxMjY0MjEsIDEyNjQyNSwgCisgICAgMTI2NDI5LCAxMjY0MzEsIDEyNjQzMywgMTI2NDM3LCAxMjY0NDEsIDEyNjQ0NSwgMTI2NDQ5LCAxMjY0NTEsIDEyNjQ1MywgCisgICAgMTI2NDU1LCAxMjY0NjAsIDEyNjQ2NSwgMTI2NDY4LCAxMjY0NzYsIDEyNjQ4NCwgMTI2NDg2LCAxMjY0OTEsIDEyNjQ5NCwgCisgICAgMTI2NDk5LCAxMjY1MTAsIDEyNjUxNywgMTI2NTIyLCAxMjY1MjcsIDEyNjUyOSwgMTI2NTMzLCAxMjY1MzUsIDEyNjUzOSwgCisgICAgMTI2NTQxLCAxMjY1NDUsIDEyNjU0OSwgMTI2NTUyLCAxMjY1NTUsIDEyNjU1NywgMTI2NTYwLCAxMjY1NjIsIDEyNjU2NiwgCisgICAgMTI2NTY4LCAxMjY1NzAsIDEyNjU3MiwgMTI2NTc2LCAxMjY1NzgsIDEyNjU4MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTI2NTU3LCAxMjY1NjIsIDEyNjU2NywgMTI2NTcyLCAxMjY1NzcsIDEyNjU4MiwgCi0gICAgMTI2NTg3LCAxMjY1OTQsIDEyNjYwMSwgMTI2NjA4LCAxMjY2MTUsIDEyNjYyMCwgMTI2NjI1LCAxMjY2MzAsIDEyNjYzNSwgCi0gICAgMTI2NjQyLCAxMjY2NDgsIDEyNjY1NSwgMTI2NjYyLCAxMjY2NjksIDEyNjY3NCwgMTI2Njc5LCAxMjY2ODQsIDEyNjY4OSwgCi0gICAgMTI2Njk0LCAxMjY3MDEsIDEyNjcwOCwgMTI2NzEzLCAxMjY3MTgsIDEyNjcyNSwgMTI2NzMyLCAxMjY3NDAsIDEyNjc0OCwgCi0gICAgMTI2NzU1LCAxMjY3NjIsIDEyNjc3MCwgMTI2Nzc4LCAxMjY3ODYsIDEyNjc5MywgMTI2ODAzLCAxMjY4MTQsIDEyNjgxOSwgCi0gICAgMTI2ODI2LCAxMjY4MzMsIDEyNjg0MCwgMTI2ODQ4LCAxMjY4NTYsIDEyNjg2NywgMTI2ODc1LCAxMjY4ODMsIDEyNjg5MSwgCi0gICAgMTI2ODk2LCAxMjY5MDEsIDEyNjkwNiwgMTI2OTExLCAxMjY5MTYsIDEyNjkyMSwgMTI2OTI2LCAxMjY5MzEsIDEyNjkzNiwgCi0gICAgMTI2OTQxLCAxMjY5NDYsIDEyNjk1MSwgMTI2OTU4LCAxMjY5NjMsIDEyNjk2OCwgMTI2OTc1LCAxMjY5ODAsIDEyNjk4NSwgCi0gICAgMTI2OTkwLCAxMjY5OTUsIDEyNzAwMCwgMTI3MDA1LCAxMjcwMTAsIDEyNzAxNSwgMTI3MDIwLCAxMjcwMjUsIDEyNzAzMCwgCi0gICAgMTI3MDM1LCAxMjcwNDIsIDEyNzA1MCwgMTI3MDU1LCAxMjcwNjAsIDEyNzA2NywgMTI3MDcyLCAxMjcwNzcsIDEyNzA4MiwgCi0gICAgMTI3MDg5LCAxMjcwOTQsIDEyNzEwMSwgMTI3MTA2LCAxMjcxMTMsIDEyNzExOCwgMTI3MTI3LCAxMjcxMzYsIDEyNzE0MSwgCi0gICAgMTI3MTQ2LCAxMjcxNTEsIDEyNzE1NiwgMTI3MTYxLCAxMjcxNjYsIDEyNzE3MSwgMTI3MTc2LCAxMjcxODEsIDEyNzE4NiwgCi0gICAgMTI3MTkxLCAxMjcxOTYsIDEyNzIwMSwgMTI3MjA5LCAxMjcyMTcsIDEyNzIyMiwgMTI3MjI3LCAxMjcyMzIsIDEyNzIzNywgCi0gICAgMTI3MjQyLCAxMjcyNDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyNzI1NCwgMTI3MjU4LCAKLSAgICAxMjcyNjIsIDEyNzI2NiwgMTI3MjcwLCAxMjcyNzQsIDEyNzI3OCwgMTI3MjgyLCAxMjcyODYsIDEyNzI5MCwgMTI3Mjk0LCAKKyAgICAwLCAwLCAxMjY1ODUsIDEyNjU5MCwgMTI2NTk1LCAxMjY2MDAsIDEyNjYwNSwgMTI2NjEwLCAxMjY2MTUsIDEyNjYyMiwgCisgICAgMTI2NjI5LCAxMjY2MzYsIDEyNjY0MywgMTI2NjQ4LCAxMjY2NTMsIDEyNjY1OCwgMTI2NjYzLCAxMjY2NzAsIDEyNjY3NiwgCisgICAgMTI2NjgzLCAxMjY2OTAsIDEyNjY5NywgMTI2NzAyLCAxMjY3MDcsIDEyNjcxMiwgMTI2NzE3LCAxMjY3MjIsIDEyNjcyOSwgCisgICAgMTI2NzM2LCAxMjY3NDEsIDEyNjc0NiwgMTI2NzUzLCAxMjY3NjAsIDEyNjc2OCwgMTI2Nzc2LCAxMjY3ODMsIDEyNjc5MCwgCisgICAgMTI2Nzk4LCAxMjY4MDYsIDEyNjgxNCwgMTI2ODIxLCAxMjY4MzEsIDEyNjg0MiwgMTI2ODQ3LCAxMjY4NTQsIDEyNjg2MSwgCisgICAgMTI2ODY4LCAxMjY4NzYsIDEyNjg4NCwgMTI2ODk1LCAxMjY5MDMsIDEyNjkxMSwgMTI2OTE5LCAxMjY5MjQsIDEyNjkyOSwgCisgICAgMTI2OTM0LCAxMjY5MzksIDEyNjk0NCwgMTI2OTQ5LCAxMjY5NTQsIDEyNjk1OSwgMTI2OTY0LCAxMjY5NjksIDEyNjk3NCwgCisgICAgMTI2OTc5LCAxMjY5ODYsIDEyNjk5MSwgMTI2OTk2LCAxMjcwMDMsIDEyNzAwOCwgMTI3MDEzLCAxMjcwMTgsIDEyNzAyMywgCisgICAgMTI3MDI4LCAxMjcwMzMsIDEyNzAzOCwgMTI3MDQzLCAxMjcwNDgsIDEyNzA1MywgMTI3MDU4LCAxMjcwNjMsIDEyNzA3MCwgCisgICAgMTI3MDc4LCAxMjcwODMsIDEyNzA4OCwgMTI3MDk1LCAxMjcxMDAsIDEyNzEwNSwgMTI3MTEwLCAxMjcxMTcsIDEyNzEyMiwgCisgICAgMTI3MTI5LCAxMjcxMzQsIDEyNzE0MSwgMTI3MTQ2LCAxMjcxNTUsIDEyNzE2NCwgMTI3MTY5LCAxMjcxNzQsIDEyNzE3OSwgCisgICAgMTI3MTg0LCAxMjcxODksIDEyNzE5NCwgMTI3MTk5LCAxMjcyMDQsIDEyNzIwOSwgMTI3MjE0LCAxMjcyMTksIDEyNzIyNCwgCisgICAgMTI3MjI5LCAxMjcyMzcsIDEyNzI0NSwgMTI3MjUwLCAxMjcyNTUsIDEyNzI2MCwgMTI3MjY1LCAxMjcyNzAsIDEyNzI3NiwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTI3MjgyLCAxMjcyODYsIDEyNzI5MCwgMTI3Mjk0LCAKICAgICAxMjcyOTgsIDEyNzMwMiwgMTI3MzA2LCAxMjczMTAsIDEyNzMxNCwgMTI3MzE4LCAxMjczMjIsIDEyNzMyNiwgMTI3MzMwLCAKICAgICAxMjczMzQsIDEyNzMzOCwgMTI3MzQyLCAxMjczNDYsIDEyNzM1MCwgMTI3MzU0LCAxMjczNTgsIDEyNzM2MiwgMTI3MzY2LCAKICAgICAxMjczNzAsIDEyNzM3NCwgMTI3Mzc4LCAxMjczODIsIDEyNzM4NiwgMTI3MzkwLCAxMjczOTQsIDEyNzM5OCwgMTI3NDAyLCAKQEAgLTE2OTM1LDE3NyArMTY5NTIsMTc5IEBACiAgICAgMTI5MzE0LCAxMjkzMTgsIDEyOTMyMiwgMTI5MzI2LCAxMjkzMzAsIDEyOTMzNCwgMTI5MzM4LCAxMjkzNDIsIDEyOTM0NiwgCiAgICAgMTI5MzUwLCAxMjkzNTQsIDEyOTM1OCwgMTI5MzYyLCAxMjkzNjYsIDEyOTM3MCwgMTI5Mzc0LCAxMjkzNzgsIDEyOTM4MiwgCiAgICAgMTI5Mzg2LCAxMjkzOTAsIDEyOTM5NCwgMTI5Mzk4LCAxMjk0MDIsIDEyOTQwNiwgMTI5NDEwLCAxMjk0MTQsIDEyOTQxOCwgCisgICAgMTI5NDIyLCAxMjk0MjYsIDEyOTQzMCwgMTI5NDM0LCAxMjk0MzgsIDEyOTQ0MiwgMTI5NDQ2LCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjk0NTAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDEyOTQyMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTI5NDI2LCAxMjk0MjksIDEyOTQzMywgMTI5NDM3LCAxMjk0NDAsIAotICAgIDEyOTQ0NCwgMTI5NDQ4LCAxMjk0NTEsIDEyOTQ1NCwgMTI5NDU4LCAxMjk0NjIsIDEyOTQ2NSwgMTI5NDY4LCAxMjk0NzEsIAotICAgIDEyOTQ3NCwgMTI5NDc5LCAxMjk0ODIsIDEyOTQ4NiwgMTI5NDg5LCAxMjk0OTIsIDEyOTQ5NSwgMTI5NDk4LCAxMjk1MDEsIAotICAgIDEyOTUwNCwgMTI5NTA3LCAxMjk1MTAsIDEyOTUxMywgMTI5NTE2LCAxMjk1MTksIDEyOTUyMywgMTI5NTI3LCAxMjk1MzEsIAotICAgIDEyOTUzNSwgMTI5NTQwLCAxMjk1NDUsIDEyOTU1MSwgMTI5NTU3LCAxMjk1NjMsIDEyOTU2OCwgMTI5NTc0LCAxMjk1ODAsIAotICAgIDEyOTU4NiwgMTI5NTkxLCAxMjk1OTcsIDEyOTYwMywgMTI5NjA4LCAxMjk2MTMsIDEyOTYxOSwgMTI5NjI0LCAxMjk2MzAsIAotICAgIDEyOTYzNiwgMTI5NjQxLCAxMjk2NDcsIDEyOTY1MywgMTI5NjU4LCAxMjk2NjQsIDEyOTY3MCwgMTI5Njc2LCAxMjk2ODIsIAotICAgIDEyOTY4OCwgMTI5NjkyLCAxMjk2OTcsIDEyOTcwMSwgMTI5NzA2LCAxMjk3MTAsIDEyOTcxNSwgMTI5NzIwLCAxMjk3MjYsIAotICAgIDEyOTczMiwgMTI5NzM4LCAxMjk3NDMsIDEyOTc0OSwgMTI5NzU1LCAxMjk3NjEsIDEyOTc2NiwgMTI5NzcyLCAxMjk3NzgsIAotICAgIDEyOTc4MywgMTI5Nzg4LCAxMjk3OTQsIDEyOTc5OSwgMTI5ODA1LCAxMjk4MTEsIDEyOTgxNiwgMTI5ODIyLCAxMjk4MjgsIAotICAgIDEyOTgzMywgMTI5ODM5LCAxMjk4NDUsIDEyOTg1MSwgMTI5ODU3LCAxMjk4NjMsIDEyOTg2OCwgMTI5ODcyLCAxMjk4NzcsIAotICAgIDEyOTg3OSwgMTI5ODgzLCAxMjk4ODYsIDEyOTg4OSwgMTI5ODkyLCAxMjk4OTUsIDEyOTg5OCwgMTI5OTAxLCAxMjk5MDQsIAotICAgIDEyOTkwNywgMTI5OTEwLCAxMjk5MTMsIDEyOTkxNiwgMTI5OTE5LCAxMjk5MjIsIDEyOTkyNSwgMTI5OTI4LCAxMjk5MzEsIAotICAgIDEyOTkzNCwgMTI5OTM3LCAxMjk5NDAsIDEyOTk0MywgMTI5OTQ2LCAxMjk5NDksIDEyOTk1MiwgMTI5OTU1LCAxMjk5NTgsIAotICAgIDEyOTk2MSwgMTI5OTY0LCAxMjk5NjcsIDEyOTk3MCwgMTI5OTczLCAxMjk5NzYsIDEyOTk3OSwgMTI5OTgyLCAxMjk5ODUsIAotICAgIDEyOTk4OCwgMTI5OTkxLCAxMjk5OTQsIDEyOTk5NywgMTMwMDAwLCAxMzAwMDMsIDEzMDAwNiwgMTMwMDA5LCAxMzAwMTIsIAotICAgIDEzMDAxNSwgMTMwMDE4LCAxMzAwMjEsIDEzMDAyNCwgMTMwMDI3LCAxMzAwMzAsIDEzMDAzMywgMTMwMDM2LCAxMzAwMzksIAotICAgIDEzMDA0MiwgMTMwMDQ1LCAxMzAwNDgsIDEzMDA1MSwgMTMwMDU0LCAxMzAwNTcsIDEzMDA2MCwgMTMwMDYzLCAxMzAwNjYsIAotICAgIDEzMDA2OSwgMTMwMDcyLCAxMzAwNzUsIDEzMDA3OCwgMTMwMDgxLCAxMzAwODQsIDEzMDA4NywgMTMwMDkwLCAxMzAwOTMsIAotICAgIDEzMDA5NiwgMTMwMDk5LCAxMzAxMDIsIDEzMDEwNSwgMTMwMTA4LCAxMzAxMTEsIDEzMDExNCwgMTMwMTE3LCAxMzAxMjAsIAotICAgIDEzMDEyMywgMTMwMTI2LCAxMzAxMjksIDEzMDEzMiwgMTMwMTM1LCAxMzAxMzgsIDEzMDE0MSwgMTMwMTQ0LCAxMzAxNDcsIAotICAgIDEzMDE1MCwgMTMwMTUzLCAxMzAxNTYsIDEzMDE1OSwgMTMwMTYyLCAxMzAxNjUsIDEzMDE2OCwgMTMwMTcxLCAxMzAxNzQsIAotICAgIDEzMDE3NywgMTMwMTgwLCAxMzAxODMsIDEzMDE4NiwgMTMwMTg5LCAxMzAxOTIsIDEzMDE5NSwgMTMwMTk4LCAxMzAyMDEsIAotICAgIDEzMDIwNCwgMTMwMjA3LCAxMzAyMTAsIDEzMDIxMywgMTMwMjE2LCAxMzAyMTksIDEzMDIyMiwgMTMwMjI1LCAxMzAyMjgsIAotICAgIDEzMDIzMSwgMTMwMjM0LCAxMzAyMzcsIDEzMDI0MCwgMTMwMjQzLCAxMzAyNDYsIDEzMDI0OSwgMTMwMjUyLCAxMzAyNTUsIAotICAgIDEzMDI1OCwgMTMwMjYxLCAxMzAyNjQsIDEzMDI2NywgMTMwMjcwLCAxMzAyNzMsIDEzMDI3NiwgMTMwMjc5LCAxMzAyODIsIAotICAgIDEzMDI4NSwgMTMwMjg4LCAxMzAyOTEsIDEzMDI5NCwgMTMwMjk3LCAxMzAzMDAsIDEzMDMwMywgMTMwMzA2LCAxMzAzMDksIAotICAgIDEzMDMxMiwgMTMwMzE1LCAxMzAzMTgsIDEzMDMyMSwgMTMwMzI0LCAxMzAzMjcsIDEzMDMzMCwgMTMwMzMzLCAxMzAzMzYsIAotICAgIDEzMDMzOSwgMTMwMzQyLCAxMzAzNDUsIDEzMDM0OCwgMTMwMzUxLCAxMzAzNTQsIDEzMDM1NywgMTMwMzYwLCAxMzAzNjMsIAotICAgIDEzMDM2NiwgMTMwMzY5LCAxMzAzNzIsIDEzMDM3NSwgMTMwMzc4LCAxMzAzODEsIDEzMDM4NCwgMTMwMzg3LCAxMzAzOTAsIAotICAgIDEzMDM5MywgMTMwMzk2LCAxMzAzOTksIDEzMDQwMiwgMTMwNDA1LCAxMzA0MDgsIDEzMDQxMSwgMTMwNDE0LCAxMzA0MTcsIAotICAgIDEzMDQyMCwgMTMwNDIzLCAxMzA0MjYsIDEzMDQyOSwgMTMwNDMyLCAxMzA0MzUsIDEzMDQzOCwgMTMwNDQxLCAxMzA0NDQsIAotICAgIDEzMDQ0NywgMTMwNDUwLCAxMzA0NTMsIDEzMDQ1NiwgMTMwNDU5LCAxMzA0NjIsIDEzMDQ2NSwgMTMwNDY4LCAxMzA0NzEsIAotICAgIDEzMDQ3NCwgMTMwNDc3LCAxMzA0ODAsIDEzMDQ4MywgMTMwNDg2LCAxMzA0ODksIDEzMDQ5MiwgMTMwNDk1LCAxMzA0OTgsIAotICAgIDEzMDUwMSwgMTMwNTA0LCAxMzA1MDcsIDEzMDUxMCwgMTMwNTEzLCAxMzA1MTYsIDEzMDUxOSwgMTMwNTIyLCAxMzA1MjUsIAotICAgIDEzMDUyOCwgMTMwNTMxLCAxMzA1MzQsIDEzMDUzNywgMTMwNTQwLCAxMzA1NDMsIDEzMDU0NiwgMTMwNTQ5LCAxMzA1NTIsIAotICAgIDEzMDU1NSwgMTMwNTU4LCAxMzA1NjEsIDEzMDU2NCwgMTMwNTY3LCAxMzA1NzAsIDEzMDU3MywgMTMwNTc2LCAxMzA1NzksIAotICAgIDEzMDU4MiwgMTMwNTg1LCAxMzA1ODgsIDEzMDU5MSwgMTMwNTk0LCAxMzA1OTcsIDEzMDYwMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTMwNjAzLCAxMzA2MDUsIDEzMDYwNywgMTMwNjEyLCAxMzA2MTQsIAotICAgIDEzMDYxOSwgMTMwNjIxLCAxMzA2MjYsIDEzMDYyOCwgMTMwNjMzLCAxMzA2MzUsIDEzMDYzNywgMTMwNjM5LCAxMzA2NDEsIAotICAgIDEzMDY0MywgMTMwNjQ1LCAxMzA2NDcsIDEzMDY0OSwgMTMwNjUxLCAxMzA2NTQsIDEzMDY1NywgMTMwNjU5LCAxMzA2NjEsIAotICAgIDEzMDY2NSwgMTMwNjY4LCAxMzA2NzMsIDEzMDY3NSwgMTMwNjc3LCAxMzA2NzksIDEzMDY4MywgMTMwNjg2LCAxMzA2ODgsIAotICAgIDEzMDY5MiwgMTMwNjk0LCAxMzA2OTgsIDEzMDcwMCwgMTMwNzA0LCAxMzA3MDcsIDEzMDcwOSwgMTMwNzEzLCAxMzA3MTcsIAotICAgIDEzMDcxOSwgMTMwNzI1LCAxMzA3MjcsIDEzMDczMiwgMTMwNzM0LCAxMzA3MzksIDEzMDc0MSwgMTMwNzQ2LCAxMzA3NDgsIAotICAgIDEzMDc1MywgMTMwNzU1LCAxMzA3NTgsIDEzMDc2MCwgMTMwNzY0LCAxMzA3NjYsIDEzMDc3MywgMTMwNzc1LCAxMzA3NzcsIAotICAgIDEzMDc3OSwgMTMwNzg0LCAxMzA3ODYsIDEzMDc4OCwgMTMwNzkwLCAxMzA3OTIsIDEzMDc5NCwgMTMwNzk5LCAxMzA4MDMsIAotICAgIDEzMDgwNSwgMTMwODEwLCAxMzA4MTQsIDEzMDgxNiwgMTMwODIxLCAxMzA4MjUsIDEzMDgyNywgMTMwODMyLCAxMzA4MzYsIAotICAgIDEzMDgzOCwgMTMwODQwLCAxMzA4NDIsIDEzMDg0NCwgMTMwODQ4LCAxMzA4NTAsIDEzMDg1NSwgMTMwODU3LCAxMzA4NjMsIAotICAgIDEzMDg2NSwgMTMwODcxLCAxMzA4NzMsIDEzMDg3NSwgMTMwODc3LCAxMzA4ODEsIDEzMDg4MywgMTMwODkwLCAxMzA4OTIsIAotICAgIDEzMDg5OSwgMTMwOTAxLCAxMzA5MDYsIDEzMDkxMSwgMTMwOTEzLCAxMzA5MTksIDEzMDkyNSwgMTMwOTI3LCAxMzA5MzMsIAotICAgIDEzMDkzOCwgMTMwOTQwLCAxMzA5NDYsIDEzMDk1MiwgMTMwOTU0LCAxMzA5NjAsIDEzMDk2NiwgMTMwOTY4LCAxMzA5NzQsIAotICAgIDEzMDk3OCwgMTMwOTgwLCAxMzA5ODUsIDEzMDk4NywgMTMwOTg5LCAxMzA5OTQsIDEzMDk5NiwgMTMwOTk4LCAxMzEwMDQsIAotICAgIDEzMTAwNiwgMTMxMDExLCAxMzEwMTUsIDEzMTAxNywgMTMxMDIyLCAxMzEwMjYsIDEzMTAyOCwgMTMxMDM0LCAxMzEwMzYsIAotICAgIDEzMTA0MCwgMTMxMDQyLCAxMzEwNDYsIDEzMTA0OCwgMTMxMDU1LCAxMzEwNjIsIDEzMTA2NCwgMTMxMDcxLCAxMzEwNzgsIAotICAgIDEzMTA4MCwgMTMxMDg1LCAxMzEwODcsIDEzMTA5NCwgMTMxMDk2LCAxMzExMDEsIDEzMTEwMywgMTMxMTA5LCAxMzExMTEsIAotICAgIDEzMTExNSwgMTMxMTE3LCAxMzExMjMsIDEzMTEyNSwgMTMxMTI5LCAxMzExMzEsIDEzMTEzNywgMTMxMTM5LCAxMzExNDEsIAotICAgIDEzMTE0MywgMTMxMTQ4LCAxMzExNTMsIDEzMTE1NSwgMTMxMTU5LCAxMzExNjYsIDEzMTE3MywgMTMxMTc4LCAxMzExODMsIAotICAgIDEzMTE5NSwgMTMxMTk3LCAxMzExOTksIDEzMTIwMSwgMTMxMjAzLCAxMzEyMDUsIDEzMTIwNywgMTMxMjA5LCAxMzEyMTEsIAotICAgIDEzMTIxMywgMTMxMjE1LCAxMzEyMTcsIDEzMTIxOSwgMTMxMjIxLCAxMzEyMjMsIDEzMTIyNSwgMTMxMjI3LCAxMzEyMjksIAotICAgIDEzMTIzNSwgMTMxMjQyLCAxMzEyNDcsIDEzMTI1MiwgMTMxMjYzLCAxMzEyNjUsIDEzMTI2NywgMTMxMjY5LCAxMzEyNzEsIAotICAgIDEzMTI3MywgMTMxMjc1LCAxMzEyNzcsIDEzMTI3OSwgMTMxMjgxLCAxMzEyODMsIDEzMTI4NSwgMTMxMjg3LCAxMzEyODksIAotICAgIDEzMTI5MSwgMTMxMjkzLCAxMzEyOTUsIDEzMTMwMCwgMTMxMzAyLCAxMzEzMDQsIDEzMTMxNSwgMTMxMzE3LCAxMzEzMTksIAotICAgIDEzMTMyMSwgMTMxMzIzLCAxMzEzMjUsIDEzMTMyNywgMTMxMzI5LCAxMzEzMzEsIDEzMTMzMywgMTMxMzM1LCAxMzEzMzcsIAotICAgIDEzMTMzOSwgMTMxMzQxLCAxMzEzNDMsIDEzMTM0NSwgMTMxMzQ3LCAxMzEzNDksIDEzMTM1MSwgMTMxMzUzLCAxMzEzNTUsIAotICAgIDEzMTM1NywgMTMxMzU5LCAxMzEzNjEsIDEzMTM2MywgMTMxMzY1LCAxMzEzNjcsIDEzMTM2OSwgMTMxMzcxLCAxMzEzNzMsIAotICAgIDEzMTM3NSwgMTMxMzc3LCAxMzEzNzksIDEzMTM4MSwgMTMxMzgzLCAxMzEzODUsIDEzMTM4NywgMTMxMzg5LCAxMzEzOTEsIAotICAgIDEzMTM5MywgMTMxMzk1LCAxMzEzOTcsIDEzMTM5OSwgMTMxNDAxLCAxMzE0MDMsIDEzMTQwNSwgMTMxNDA3LCAxMzE0MDksIAotICAgIDEzMTQxMSwgMTMxNDEzLCAxMzE0MTUsIDEzMTQxNywgMTMxNDE5LCAxMzE0MjEsIDEzMTQyMywgMTMxNDI1LCAxMzE0MjcsIAotICAgIDEzMTQyOSwgMTMxNDMxLCAxMzE0MzMsIDEzMTQzNSwgMTMxNDM3LCAxMzE0MzksIDEzMTQ0MSwgMTMxNDQzLCAxMzE0NDUsIAotICAgIDEzMTQ0NywgMTMxNDQ5LCAxMzE0NTEsIDEzMTQ1MywgMTMxNDU1LCAxMzE0NTcsIDEzMTQ1OSwgMTMxNDYxLCAxMzE0NjMsIAotICAgIDEzMTQ2NSwgMTMxNDY3LCAxMzE0NjksIDEzMTQ3MSwgMTMxNDczLCAxMzE0NzUsIDEzMTQ3NywgMTMxNDc5LCAxMzE0ODEsIAotICAgIDEzMTQ4MywgMTMxNDg1LCAxMzE0ODcsIDEzMTQ4OSwgMTMxNDkxLCAxMzE0OTMsIDEzMTQ5NSwgMTMxNDk3LCAxMzE0OTksIAotICAgIDEzMTUwMSwgMTMxNTAzLCAxMzE1MDUsIDEzMTUwNywgMTMxNTA5LCAxMzE1MTEsIDEzMTUxMywgMTMxNTE1LCAxMzE1MTcsIAotICAgIDEzMTUxOSwgMTMxNTIxLCAxMzE1MjMsIDEzMTUyNSwgMTMxNTI3LCAxMzE1MjksIDEzMTUzMSwgMTMxNTMzLCAxMzE1MzUsIAotICAgIDEzMTUzNywgMTMxNTM5LCAxMzE1NDEsIDEzMTU0MywgMTMxNTQ1LCAxMzE1NDcsIDEzMTU0OSwgMTMxNTUxLCAxMzE1NTMsIAotICAgIDEzMTU1NSwgMTMxNTU3LCAxMzE1NTksIDEzMTU2MSwgMTMxNTYzLCAxMzE1NjUsIDEzMTU2NywgMTMxNTY5LCAxMzE1NzEsIAotICAgIDEzMTU3MywgMTMxNTc1LCAxMzE1NzcsIDEzMTU3OSwgMTMxNTgxLCAxMzE1ODMsIDEzMTU4NSwgMTMxNTg3LCAxMzE1ODksIAotICAgIDEzMTU5MSwgMTMxNTkzLCAxMzE1OTUsIDEzMTU5NywgMTMxNTk5LCAxMzE2MDEsIDEzMTYwMywgMTMxNjA1LCAxMzE2MDcsIAotICAgIDEzMTYwOSwgMTMxNjExLCAxMzE2MTMsIDEzMTYxNSwgMTMxNjE3LCAxMzE2MTksIDEzMTYyMSwgMTMxNjIzLCAxMzE2MjUsIAotICAgIDEzMTYyNywgMTMxNjI5LCAxMzE2MzEsIDEzMTYzMywgMTMxNjM1LCAxMzE2MzcsIDEzMTYzOSwgMTMxNjQxLCAxMzE2NDMsIAotICAgIDEzMTY0NSwgMTMxNjQ3LCAxMzE2NDksIDEzMTY1MSwgMTMxNjUzLCAxMzE2NTUsIDEzMTY1NywgMTMxNjU5LCAxMzE2NjEsIAotICAgIDEzMTY2MywgMTMxNjY1LCAxMzE2NjcsIDEzMTY2OSwgMTMxNjcxLCAxMzE2NzMsIDEzMTY3NSwgMTMxNjc3LCAxMzE2NzksIAotICAgIDEzMTY4MSwgMTMxNjgzLCAxMzE2ODUsIDEzMTY4NywgMTMxNjg5LCAxMzE2OTEsIDEzMTY5MywgMTMxNjk1LCAxMzE2OTcsIAotICAgIDEzMTY5OSwgMTMxNzAxLCAxMzE3MDMsIDEzMTcwNSwgMTMxNzA3LCAxMzE3MDksIDEzMTcxMSwgMTMxNzEzLCAxMzE3MTUsIAotICAgIDEzMTcxNywgMTMxNzE5LCAxMzE3MjEsIDEzMTcyMywgMTMxNzI1LCAxMzE3MjcsIDEzMTcyOSwgMTMxNzMxLCAxMzE3MzMsIAotICAgIDEzMTczNSwgMTMxNzM3LCAxMzE3MzksIDEzMTc0MSwgMTMxNzQzLCAxMzE3NDUsIDEzMTc0NywgMTMxNzQ5LCAxMzE3NTEsIAotICAgIDEzMTc1MywgMTMxNzU1LCAxMzE3NTcsIDEzMTc1OSwgMTMxNzYxLCAxMzE3NjMsIDEzMTc2NSwgMTMxNzY3LCAxMzE3NjksIAotICAgIDEzMTc3MSwgMTMxNzczLCAxMzE3NzUsIDEzMTc3NywgMTMxNzc5LCAxMzE3ODEsIDEzMTc4MywgMTMxNzg1LCAxMzE3ODcsIAotICAgIDEzMTc4OSwgMTMxNzkxLCAxMzE3OTMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDEzMTc5NSwgMTMxODA1LCAxMzE4MTUsIDEzMTgyNCwgMTMxODMzLCAxMzE4NDYsIDEzMTg1OSwgMTMxODcxLCAxMzE4ODMsIAotICAgIDEzMTg5MywgMTMxOTAzLCAxMzE5MTMsIDEzMTkyMywgMTMxOTM0LCAxMzE5NDUsIDEzMTk1NSwgMTMxOTY0LCAxMzE5NzMsIAotICAgIDEzMTk4MiwgMTMxOTk1LCAxMzIwMDgsIDEzMjAyMCwgMTMyMDMyLCAxMzIwNDIsIDEzMjA1MiwgMTMyMDYyLCAxMzIwNzIsIAotICAgIDEzMjA4MSwgMTMyMDkwLCAxMzIwOTksIDEzMjEwOCwgMTMyMTE3LCAxMzIxMjYsIDEzMjEzNSwgMTMyMTQ0LCAxMzIxNTMsIAotICAgIDEzMjE2MiwgMTMyMTcxLCAxMzIxODAsIDEzMjE5MSwgMTMyMjAxLCAxMzIyMTEsIDEzMjIyNCwgMTMyMjM0LCAxMzIyNDcsIAotICAgIDEzMjI1NCwgMTMyMjY0LCAxMzIyNzEsIDEzMjI3OCwgMTMyMjg1LCAxMzIyOTIsIDEzMjI5OSwgMTMyMzA2LCAxMzIzMTUsIAotICAgIDEzMjMyNCwgMTMyMzMzLCAxMzIzNDIsIDEzMjM1MSwgMTMyMzYwLCAxMzIzNjksIDEzMjM3OCwgMTMyMzg2LCAxMzIzOTQsIAotICAgIDEzMjQwMSwgMTMyNDExLCAxMzI0MjAsIDEzMjQyOCwgMTMyNDM1LCAxMzI0NDUsIDEzMjQ1NCwgMTMyNDU4LCAxMzI0NjIsIAotICAgIDEzMjQ2NiwgMTMyNDcwLCAxMzI0NzQsIDEzMjQ3OCwgMTMyNDgyLCAxMzI0ODYsIDEzMjQ5MCwgMTMyNDk0LCAxMzI0OTcsIAotICAgIDEzMjUwMSwgMTMyNTA0LCAxMzI1MDcsIDEzMjUxMSwgMTMyNTE1LCAxMzI1MTksIDEzMjUyMywgMTMyNTI3LCAxMzI1MzEsIAotICAgIDEzMjUzNSwgMTMyNTM5LCAxMzI1NDMsIDEzMjU0NywgMTMyNTUxLCAxMzI1NTUsIDEzMjU1OSwgMTMyNTYzLCAxMzI1NjcsIAotICAgIDEzMjU3MSwgMTMyNTc1LCAxMzI1NzksIDEzMjU4MywgMTMyNTg3LCAxMzI1OTEsIDEzMjU5NSwgMTMyNTk5LCAxMzI2MDMsIAotICAgIDEzMjYwNywgMTMyNjExLCAxMzI2MTUsIDEzMjYxOSwgMTMyNjIzLCAxMzI2MjcsIDEzMjYzMSwgMTMyNjM1LCAxMzI2MzksIAotICAgIDEzMjY0MywgMTMyNjQ3LCAxMzI2NTEsIDEzMjY1NSwgMTMyNjU5LCAxMzI2NjMsIDEzMjY2NywgMTMyNjcxLCAxMzI2NzUsIAotICAgIDEzMjY3OSwgMTMyNjgzLCAxMzI2ODcsIDEzMjY5MSwgMTMyNjk1LCAxMzI2OTksIDEzMjcwMywgMTMyNzA3LCAxMzI3MTEsIAotICAgIDEzMjcxNSwgMTMyNzE5LCAxMzI3MjMsIDEzMjcyNywgMTMyNzMxLCAxMzI3MzUsIDEzMjczOSwgMTMyNzQzLCAxMzI3NDcsIAotICAgIDEzMjc1MSwgMTMyNzU1LCAxMzI3NTksIDEzMjc2MywgMTMyNzY3LCAxMzI3NzEsIDEzMjc3NSwgMTMyNzc5LCAxMzI3ODMsIAotICAgIDEzMjc4NywgMTMyNzkxLCAxMzI3OTUsIDEzMjc5OSwgMTMyODAzLCAxMzI4MDcsIDEzMjgxMSwgMTMyODE1LCAxMzI4MTksIAotICAgIDEzMjgyMywgMTMyODI3LCAxMzI4MzEsIDEzMjgzNSwgMTMyODM5LCAxMzI4NDMsIDEzMjg0NywgMTMyODUwLCAxMzI4NTQsIAotICAgIDEzMjg1OCwgMTMyODYyLCAxMzI4NjYsIDEzMjg3MCwgMTMyODc0LCAxMzI4NzgsIDEzMjg4MiwgMTMyODg2LCAxMzI4OTAsIAotICAgIDEzMjg5NCwgMTMyODk4LCAxMzI5MDIsIDEzMjkwNiwgMTMyOTEwLCAxMzI5MTQsIDEzMjkxOCwgMTMyOTIyLCAxMzI5MjYsIAotICAgIDEzMjkzMCwgMTMyOTM0LCAxMzI5MzgsIDEzMjk0MiwgMTMyOTQ2LCAxMzI5NTAsIDEzMjk1NCwgMTMyOTU4LCAxMzI5NjIsIAotICAgIDEzMjk2NiwgMTMyOTcwLCAxMzI5NzQsIDEzMjk3OCwgMTMyOTgyLCAxMzI5ODYsIDEzMjk5MCwgMTMyOTk0LCAxMzI5OTgsIAotICAgIDEzMzAwMiwgMTMzMDA2LCAxMzMwMTAsIDEzMzAxNCwgMTMzMDE4LCAxMzMwMjIsIDEzMzAyNiwgMTMzMDMwLCAxMzMwMzQsIAotICAgIDEzMzAzOCwgMTMzMDQyLCAxMzMwNDYsIDEzMzA1MCwgMTMzMDU0LCAxMzMwNTgsIDEzMzA2MiwgMTMzMDY2LCAxMzMwNzAsIAotICAgIDEzMzA3NCwgMTMzMDc4LCAxMzMwODIsIDEzMzA4NiwgMTMzMDkwLCAxMzMwOTQsIDEzMzA5OCwgMTMzMTAyLCAxMzMxMDYsIAotICAgIDEzMzExMCwgMTMzMTE0LCAxMzMxMTgsIDEzMzEyMiwgMTMzMTI2LCAxMzMxMzAsIDEzMzEzNCwgMTMzMTM4LCAxMzMxNDIsIAotICAgIDEzMzE0NiwgMTMzMTUwLCAxMzMxNTQsIDEzMzE1OCwgMTMzMTYyLCAxMzMxNjYsIDEzMzE3MCwgMTMzMTc0LCAxMzMxNzgsIAotICAgIDEzMzE4MiwgMTMzMTg2LCAxMzMxOTAsIDEzMzE5NCwgMTMzMTk4LCAxMzMyMDIsIDEzMzIwNiwgMTMzMjEwLCAxMzMyMTQsIAotICAgIDEzMzIxOCwgMTMzMjIyLCAxMzMyMjYsIDEzMzIzMCwgMTMzMjM0LCAxMzMyMzgsIDEzMzI0MiwgMTMzMjQ2LCAxMzMyNTAsIAotICAgIDEzMzI1NCwgMTMzMjU4LCAxMzMyNjIsIDEzMzI2NiwgMTMzMjcwLCAxMzMyNzQsIDEzMzI3OCwgMTMzMjgyLCAxMzMyODYsIAotICAgIDEzMzI5MCwgMTMzMjk0LCAxMzMyOTgsIDEzMzMwMiwgMTMzMzA2LCAxMzMzMTAsIDEzMzMxNCwgMTMzMzE4LCAxMzMzMjIsIAotICAgIDEzMzMyNiwgMTMzMzMwLCAxMzMzMzQsIDEzMzMzOCwgMTMzMzQyLCAxMzMzNDYsIDEzMzM1MCwgMTMzMzU0LCAxMzMzNTgsIAotICAgIDEzMzM2MiwgMTMzMzY2LCAxMzMzNzAsIDEzMzM3NCwgMTMzMzc4LCAxMzMzODIsIDEzMzM4NiwgMTMzMzkwLCAxMzMzOTQsIAotICAgIDEzMzM5OCwgMTMzNDAyLCAxMzM0MDYsIDEzMzQxMCwgMTMzNDE0LCAxMzM0MTgsIDEzMzQyMiwgMTMzNDI2LCAxMzM0MzAsIAotICAgIDEzMzQzNCwgMTMzNDM4LCAxMzM0NDIsIDEzMzQ0NiwgMTMzNDUwLCAxMzM0NTQsIDEzMzQ1OCwgMTMzNDYyLCAxMzM0NjYsIAotICAgIDEzMzQ3MCwgMTMzNDc0LCAxMzM0NzgsIDEzMzQ4MiwgMTMzNDg2LCAxMzM0OTAsIDEzMzQ5NCwgMTMzNDk4LCAxMzM1MDIsIAotICAgIDEzMzUwNiwgMTMzNTEwLCAxMzM1MTQsIDEzMzUxOCwgMTMzNTIyLCAxMzM1MjYsIDEzMzUzMCwgMTMzNTM0LCAxMzM1MzgsIAotICAgIDEzMzU0MiwgMTMzNTQ2LCAxMzM1NTAsIDEzMzU1NCwgMTMzNTU4LCAxMzM1NjIsIDEzMzU2NiwgMTMzNTcwLCAxMzM1NzQsIAotICAgIDEzMzU3OCwgMTMzNTgyLCAxMzM1ODYsIDEzMzU5MCwgMTMzNTk0LCAxMzM1OTgsIDEzMzYwMiwgMTMzNjA2LCAxMzM2MTAsIAotICAgIDEzMzYxNCwgMTMzNjE5LCAxMzM2MjQsIDEzMzYyOSwgMTMzNjMzLCAxMzM2MzksIDEzMzY0NiwgMTMzNjUzLCAxMzM2NjAsIAotICAgIDEzMzY2NywgMTMzNjc0LCAxMzM2ODEsIDEzMzY4OCwgMTMzNjk1LCAxMzM3MDIsIDEzMzcwOSwgMTMzNzE2LCAxMzM3MjMsIAotICAgIDEzMzczMCwgMTMzNzM2LCAxMzM3NDMsIDEzMzc1MCwgMTMzNzU2LCAxMzM3NjMsIDEzMzc3MCwgMTMzNzc3LCAxMzM3ODQsIAotICAgIDEzMzc5MSwgMTMzNzk4LCAxMzM4MDUsIDEzMzgxMiwgMTMzODE5LCAxMzM4MjYsIDEzMzgzMywgMTMzODQwLCAxMzM4NDcsIAotICAgIDEzMzg1MywgMTMzODU5LCAxMzM4NjYsIDEzMzg3MywgMTMzODgyLCAxMzM4OTEsIDEzMzkwMCwgMTMzOTA5LCAxMzM5MTQsIAotICAgIDEzMzkxOSwgMTMzOTI1LCAxMzM5MzEsIDEzMzkzNywgMTMzOTQzLCAxMzM5NDksIDEzMzk1NSwgMTMzOTYxLCAxMzM5NjcsIAotICAgIDEzMzk3MywgMTMzOTc5LCAxMzM5ODUsIDEzMzk5MSwgMTMzOTk2LCAxMzQwMDIsIDEzNDAxMiwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMTI5NDU0LCAxMjk0NTcsIDEyOTQ2MSwgMTI5NDY1LCAxMjk0NjgsIDEyOTQ3MiwgMTI5NDc2LCAKKyAgICAxMjk0NzksIDEyOTQ4MiwgMTI5NDg2LCAxMjk0OTAsIDEyOTQ5MywgMTI5NDk2LCAxMjk0OTksIDEyOTUwMiwgMTI5NTA3LCAKKyAgICAxMjk1MTAsIDEyOTUxNCwgMTI5NTE3LCAxMjk1MjAsIDEyOTUyMywgMTI5NTI2LCAxMjk1MjksIDEyOTUzMiwgMTI5NTM1LCAKKyAgICAxMjk1MzgsIDEyOTU0MSwgMTI5NTQ0LCAxMjk1NDcsIDEyOTU1MSwgMTI5NTU1LCAxMjk1NTksIDEyOTU2MywgMTI5NTY4LCAKKyAgICAxMjk1NzMsIDEyOTU3OSwgMTI5NTg1LCAxMjk1OTEsIDEyOTU5NiwgMTI5NjAyLCAxMjk2MDgsIDEyOTYxNCwgMTI5NjE5LCAKKyAgICAxMjk2MjUsIDEyOTYzMSwgMTI5NjM2LCAxMjk2NDEsIDEyOTY0NywgMTI5NjUyLCAxMjk2NTgsIDEyOTY2NCwgMTI5NjY5LCAKKyAgICAxMjk2NzUsIDEyOTY4MSwgMTI5Njg2LCAxMjk2OTIsIDEyOTY5OCwgMTI5NzA0LCAxMjk3MTAsIDEyOTcxNiwgMTI5NzIwLCAKKyAgICAxMjk3MjUsIDEyOTcyOSwgMTI5NzM0LCAxMjk3MzgsIDEyOTc0MywgMTI5NzQ4LCAxMjk3NTQsIDEyOTc2MCwgMTI5NzY2LCAKKyAgICAxMjk3NzEsIDEyOTc3NywgMTI5NzgzLCAxMjk3ODksIDEyOTc5NCwgMTI5ODAwLCAxMjk4MDYsIDEyOTgxMSwgMTI5ODE2LCAKKyAgICAxMjk4MjIsIDEyOTgyNywgMTI5ODMzLCAxMjk4MzksIDEyOTg0NCwgMTI5ODUwLCAxMjk4NTYsIDEyOTg2MSwgMTI5ODY3LCAKKyAgICAxMjk4NzMsIDEyOTg3OSwgMTI5ODg1LCAxMjk4OTEsIDEyOTg5NiwgMTI5OTAwLCAxMjk5MDUsIDEyOTkwNywgMTI5OTExLCAKKyAgICAxMjk5MTQsIDEyOTkxNywgMTI5OTIwLCAxMjk5MjMsIDEyOTkyNiwgMTI5OTI5LCAxMjk5MzIsIDEyOTkzNSwgMTI5OTM4LCAKKyAgICAxMjk5NDEsIDEyOTk0NCwgMTI5OTQ3LCAxMjk5NTAsIDEyOTk1MywgMTI5OTU2LCAxMjk5NTksIDEyOTk2MiwgMTI5OTY1LCAKKyAgICAxMjk5NjgsIDEyOTk3MSwgMTI5OTc0LCAxMjk5NzcsIDEyOTk4MCwgMTI5OTgzLCAxMjk5ODYsIDEyOTk4OSwgMTI5OTkyLCAKKyAgICAxMjk5OTUsIDEyOTk5OCwgMTMwMDAxLCAxMzAwMDQsIDEzMDAwNywgMTMwMDEwLCAxMzAwMTMsIDEzMDAxNiwgMTMwMDE5LCAKKyAgICAxMzAwMjIsIDEzMDAyNSwgMTMwMDI4LCAxMzAwMzEsIDEzMDAzNCwgMTMwMDM3LCAxMzAwNDAsIDEzMDA0MywgMTMwMDQ2LCAKKyAgICAxMzAwNDksIDEzMDA1MiwgMTMwMDU1LCAxMzAwNTgsIDEzMDA2MSwgMTMwMDY0LCAxMzAwNjcsIDEzMDA3MCwgMTMwMDczLCAKKyAgICAxMzAwNzYsIDEzMDA3OSwgMTMwMDgyLCAxMzAwODUsIDEzMDA4OCwgMTMwMDkxLCAxMzAwOTQsIDEzMDA5NywgMTMwMTAwLCAKKyAgICAxMzAxMDMsIDEzMDEwNiwgMTMwMTA5LCAxMzAxMTIsIDEzMDExNSwgMTMwMTE4LCAxMzAxMjEsIDEzMDEyNCwgMTMwMTI3LCAKKyAgICAxMzAxMzAsIDEzMDEzMywgMTMwMTM2LCAxMzAxMzksIDEzMDE0MiwgMTMwMTQ1LCAxMzAxNDgsIDEzMDE1MSwgMTMwMTU0LCAKKyAgICAxMzAxNTcsIDEzMDE2MCwgMTMwMTYzLCAxMzAxNjYsIDEzMDE2OSwgMTMwMTcyLCAxMzAxNzUsIDEzMDE3OCwgMTMwMTgxLCAKKyAgICAxMzAxODQsIDEzMDE4NywgMTMwMTkwLCAxMzAxOTMsIDEzMDE5NiwgMTMwMTk5LCAxMzAyMDIsIDEzMDIwNSwgMTMwMjA4LCAKKyAgICAxMzAyMTEsIDEzMDIxNCwgMTMwMjE3LCAxMzAyMjAsIDEzMDIyMywgMTMwMjI2LCAxMzAyMjksIDEzMDIzMiwgMTMwMjM1LCAKKyAgICAxMzAyMzgsIDEzMDI0MSwgMTMwMjQ0LCAxMzAyNDcsIDEzMDI1MCwgMTMwMjUzLCAxMzAyNTYsIDEzMDI1OSwgMTMwMjYyLCAKKyAgICAxMzAyNjUsIDEzMDI2OCwgMTMwMjcxLCAxMzAyNzQsIDEzMDI3NywgMTMwMjgwLCAxMzAyODMsIDEzMDI4NiwgMTMwMjg5LCAKKyAgICAxMzAyOTIsIDEzMDI5NSwgMTMwMjk4LCAxMzAzMDEsIDEzMDMwNCwgMTMwMzA3LCAxMzAzMTAsIDEzMDMxMywgMTMwMzE2LCAKKyAgICAxMzAzMTksIDEzMDMyMiwgMTMwMzI1LCAxMzAzMjgsIDEzMDMzMSwgMTMwMzM0LCAxMzAzMzcsIDEzMDM0MCwgMTMwMzQzLCAKKyAgICAxMzAzNDYsIDEzMDM0OSwgMTMwMzUyLCAxMzAzNTUsIDEzMDM1OCwgMTMwMzYxLCAxMzAzNjQsIDEzMDM2NywgMTMwMzcwLCAKKyAgICAxMzAzNzMsIDEzMDM3NiwgMTMwMzc5LCAxMzAzODIsIDEzMDM4NSwgMTMwMzg4LCAxMzAzOTEsIDEzMDM5NCwgMTMwMzk3LCAKKyAgICAxMzA0MDAsIDEzMDQwMywgMTMwNDA2LCAxMzA0MDksIDEzMDQxMiwgMTMwNDE1LCAxMzA0MTgsIDEzMDQyMSwgMTMwNDI0LCAKKyAgICAxMzA0MjcsIDEzMDQzMCwgMTMwNDMzLCAxMzA0MzYsIDEzMDQzOSwgMTMwNDQyLCAxMzA0NDUsIDEzMDQ0OCwgMTMwNDUxLCAKKyAgICAxMzA0NTQsIDEzMDQ1NywgMTMwNDYwLCAxMzA0NjMsIDEzMDQ2NiwgMTMwNDY5LCAxMzA0NzIsIDEzMDQ3NSwgMTMwNDc4LCAKKyAgICAxMzA0ODEsIDEzMDQ4NCwgMTMwNDg3LCAxMzA0OTAsIDEzMDQ5MywgMTMwNDk2LCAxMzA0OTksIDEzMDUwMiwgMTMwNTA1LCAKKyAgICAxMzA1MDgsIDEzMDUxMSwgMTMwNTE0LCAxMzA1MTcsIDEzMDUyMCwgMTMwNTIzLCAxMzA1MjYsIDEzMDUyOSwgMTMwNTMyLCAKKyAgICAxMzA1MzUsIDEzMDUzOCwgMTMwNTQxLCAxMzA1NDQsIDEzMDU0NywgMTMwNTUwLCAxMzA1NTMsIDEzMDU1NiwgMTMwNTU5LCAKKyAgICAxMzA1NjIsIDEzMDU2NSwgMTMwNTY4LCAxMzA1NzEsIDEzMDU3NCwgMTMwNTc3LCAxMzA1ODAsIDEzMDU4MywgMTMwNTg2LCAKKyAgICAxMzA1ODksIDEzMDU5MiwgMTMwNTk1LCAxMzA1OTgsIDEzMDYwMSwgMTMwNjA0LCAxMzA2MDcsIDEzMDYxMCwgMTMwNjEzLCAKKyAgICAxMzA2MTYsIDEzMDYxOSwgMTMwNjIyLCAxMzA2MjUsIDEzMDYyOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMTMwNjMxLCAxMzA2MzMsIDEzMDYzNSwgMTMwNjQwLCAxMzA2NDIsIDEzMDY0NywgMTMwNjQ5LCAKKyAgICAxMzA2NTQsIDEzMDY1NiwgMTMwNjYxLCAxMzA2NjMsIDEzMDY2NSwgMTMwNjY3LCAxMzA2NjksIDEzMDY3MSwgMTMwNjczLCAKKyAgICAxMzA2NzUsIDEzMDY3NywgMTMwNjc5LCAxMzA2ODIsIDEzMDY4NSwgMTMwNjg3LCAxMzA2ODksIDEzMDY5MywgMTMwNjk2LCAKKyAgICAxMzA3MDEsIDEzMDcwMywgMTMwNzA1LCAxMzA3MDcsIDEzMDcxMSwgMTMwNzE0LCAxMzA3MTYsIDEzMDcyMCwgMTMwNzIyLCAKKyAgICAxMzA3MjYsIDEzMDcyOCwgMTMwNzMyLCAxMzA3MzUsIDEzMDczNywgMTMwNzQxLCAxMzA3NDUsIDEzMDc0NywgMTMwNzUzLCAKKyAgICAxMzA3NTUsIDEzMDc2MCwgMTMwNzYyLCAxMzA3NjcsIDEzMDc2OSwgMTMwNzc0LCAxMzA3NzYsIDEzMDc4MSwgMTMwNzgzLCAKKyAgICAxMzA3ODYsIDEzMDc4OCwgMTMwNzkyLCAxMzA3OTQsIDEzMDgwMSwgMTMwODAzLCAxMzA4MDUsIDEzMDgwNywgMTMwODEyLCAKKyAgICAxMzA4MTQsIDEzMDgxNiwgMTMwODE4LCAxMzA4MjAsIDEzMDgyMiwgMTMwODI3LCAxMzA4MzEsIDEzMDgzMywgMTMwODM4LCAKKyAgICAxMzA4NDIsIDEzMDg0NCwgMTMwODQ5LCAxMzA4NTMsIDEzMDg1NSwgMTMwODYwLCAxMzA4NjQsIDEzMDg2NiwgMTMwODY4LCAKKyAgICAxMzA4NzAsIDEzMDg3MiwgMTMwODc2LCAxMzA4NzgsIDEzMDg4MywgMTMwODg1LCAxMzA4OTEsIDEzMDg5MywgMTMwODk5LCAKKyAgICAxMzA5MDEsIDEzMDkwMywgMTMwOTA1LCAxMzA5MDksIDEzMDkxMSwgMTMwOTE4LCAxMzA5MjAsIDEzMDkyNywgMTMwOTI5LCAKKyAgICAxMzA5MzQsIDEzMDkzOSwgMTMwOTQxLCAxMzA5NDcsIDEzMDk1MywgMTMwOTU1LCAxMzA5NjEsIDEzMDk2NiwgMTMwOTY4LCAKKyAgICAxMzA5NzQsIDEzMDk4MCwgMTMwOTgyLCAxMzA5ODgsIDEzMDk5NCwgMTMwOTk2LCAxMzEwMDIsIDEzMTAwNiwgMTMxMDA4LCAKKyAgICAxMzEwMTMsIDEzMTAxNSwgMTMxMDE3LCAxMzEwMjIsIDEzMTAyNCwgMTMxMDI2LCAxMzEwMzIsIDEzMTAzNCwgMTMxMDM5LCAKKyAgICAxMzEwNDMsIDEzMTA0NSwgMTMxMDUwLCAxMzEwNTQsIDEzMTA1NiwgMTMxMDYyLCAxMzEwNjQsIDEzMTA2OCwgMTMxMDcwLCAKKyAgICAxMzEwNzQsIDEzMTA3NiwgMTMxMDgzLCAxMzEwOTAsIDEzMTA5MiwgMTMxMDk5LCAxMzExMDYsIDEzMTEwOCwgMTMxMTEzLCAKKyAgICAxMzExMTUsIDEzMTEyMiwgMTMxMTI0LCAxMzExMjksIDEzMTEzMSwgMTMxMTM3LCAxMzExMzksIDEzMTE0MywgMTMxMTQ1LCAKKyAgICAxMzExNTEsIDEzMTE1MywgMTMxMTU3LCAxMzExNTksIDEzMTE2NSwgMTMxMTY3LCAxMzExNjksIDEzMTE3MSwgMTMxMTc2LCAKKyAgICAxMzExODEsIDEzMTE4MywgMTMxMTg1LCAxMzExOTQsIDEzMTE5OCwgMTMxMjA1LCAxMzEyMTIsIDEzMTIxNywgMTMxMjIyLCAKKyAgICAxMzEyMzQsIDEzMTIzNiwgMTMxMjM4LCAxMzEyNDAsIDEzMTI0MiwgMTMxMjQ0LCAxMzEyNDYsIDEzMTI0OCwgMTMxMjUwLCAKKyAgICAxMzEyNTIsIDEzMTI1NCwgMTMxMjU2LCAxMzEyNTgsIDEzMTI2MCwgMTMxMjYyLCAxMzEyNjQsIDEzMTI2NiwgMTMxMjY4LCAKKyAgICAxMzEyNzAsIDEzMTI3MiwgMTMxMjc0LCAxMzEyNzYsIDEzMTI4MiwgMTMxMjg5LCAxMzEyOTQsIDEzMTI5OSwgMTMxMzEwLCAKKyAgICAxMzEzMTIsIDEzMTMxNCwgMTMxMzE2LCAxMzEzMTgsIDEzMTMyMCwgMTMxMzIyLCAxMzEzMjQsIDEzMTMyNiwgMTMxMzI4LCAKKyAgICAxMzEzMzAsIDEzMTMzMiwgMTMxMzM0LCAxMzEzMzYsIDEzMTMzOCwgMTMxMzQwLCAxMzEzNDIsIDEzMTM0NywgMTMxMzQ5LCAKKyAgICAxMzEzNTEsIDEzMTM1NywgMTMxMzY5LCAxMzEzODAsIDEzMTM4MiwgMTMxMzg0LCAxMzEzODYsIDEzMTM4OCwgMTMxMzkwLCAKKyAgICAxMzEzOTIsIDEzMTM5NCwgMTMxMzk2LCAxMzEzOTgsIDEzMTQwMCwgMTMxNDAyLCAxMzE0MDQsIDEzMTQwNiwgMTMxNDA4LCAKKyAgICAxMzE0MTAsIDEzMTQxMiwgMTMxNDE0LCAxMzE0MTYsIDEzMTQxOCwgMTMxNDIwLCAxMzE0MjIsIDEzMTQyNCwgMTMxNDI2LCAKKyAgICAxMzE0MjgsIDEzMTQzMCwgMTMxNDMyLCAxMzE0MzQsIDEzMTQzNiwgMTMxNDM4LCAxMzE0NDAsIDEzMTQ0MiwgMTMxNDQ0LCAKKyAgICAxMzE0NDYsIDEzMTQ0OCwgMTMxNDUwLCAxMzE0NTIsIDEzMTQ1NCwgMTMxNDU2LCAxMzE0NTgsIDEzMTQ2MCwgMTMxNDYyLCAKKyAgICAxMzE0NjQsIDEzMTQ2NiwgMTMxNDY4LCAxMzE0NzAsIDEzMTQ3MiwgMTMxNDc0LCAxMzE0NzYsIDEzMTQ3OCwgMTMxNDgwLCAKKyAgICAxMzE0ODIsIDEzMTQ4NCwgMTMxNDg2LCAxMzE0ODgsIDEzMTQ5MCwgMTMxNDkyLCAxMzE0OTQsIDEzMTQ5NiwgMTMxNDk4LCAKKyAgICAxMzE1MDAsIDEzMTUwMiwgMTMxNTA0LCAxMzE1MDYsIDEzMTUwOCwgMTMxNTEwLCAxMzE1MTIsIDEzMTUxNCwgMTMxNTE2LCAKKyAgICAxMzE1MTgsIDEzMTUyMCwgMTMxNTIyLCAxMzE1MjQsIDEzMTUyNiwgMTMxNTI4LCAxMzE1MzAsIDEzMTUzMiwgMTMxNTM0LCAKKyAgICAxMzE1MzYsIDEzMTUzOCwgMTMxNTQwLCAxMzE1NDIsIDEzMTU0NCwgMTMxNTQ2LCAxMzE1NDgsIDEzMTU1MCwgMTMxNTUyLCAKKyAgICAxMzE1NTQsIDEzMTU1NiwgMTMxNTU4LCAxMzE1NjAsIDEzMTU2MiwgMTMxNTY0LCAxMzE1NjYsIDEzMTU2OCwgMTMxNTcwLCAKKyAgICAxMzE1NzIsIDEzMTU3NCwgMTMxNTc2LCAxMzE1NzgsIDEzMTU4MCwgMTMxNTgyLCAxMzE1ODQsIDEzMTU4NiwgMTMxNTg4LCAKKyAgICAxMzE1OTAsIDEzMTU5MiwgMTMxNTk0LCAxMzE1OTYsIDEzMTU5OCwgMTMxNjAwLCAxMzE2MDIsIDEzMTYwNCwgMTMxNjA2LCAKKyAgICAxMzE2MDgsIDEzMTYxMCwgMTMxNjEyLCAxMzE2MTQsIDEzMTYxNiwgMTMxNjE4LCAxMzE2MjAsIDEzMTYyMiwgMTMxNjI0LCAKKyAgICAxMzE2MjYsIDEzMTYyOCwgMTMxNjMwLCAxMzE2MzIsIDEzMTYzNCwgMTMxNjM2LCAxMzE2MzgsIDEzMTY0MCwgMTMxNjQyLCAKKyAgICAxMzE2NDQsIDEzMTY0NiwgMTMxNjQ4LCAxMzE2NTAsIDEzMTY1MiwgMTMxNjU0LCAxMzE2NTYsIDEzMTY1OCwgMTMxNjYwLCAKKyAgICAxMzE2NjIsIDEzMTY2NCwgMTMxNjY2LCAxMzE2NjgsIDEzMTY3MCwgMTMxNjcyLCAxMzE2NzQsIDEzMTY3NiwgMTMxNjc4LCAKKyAgICAxMzE2ODAsIDEzMTY4MiwgMTMxNjg0LCAxMzE2ODYsIDEzMTY4OCwgMTMxNjkwLCAxMzE2OTIsIDEzMTY5NCwgMTMxNjk2LCAKKyAgICAxMzE2OTgsIDEzMTcwMCwgMTMxNzAyLCAxMzE3MDQsIDEzMTcwNiwgMTMxNzA4LCAxMzE3MTAsIDEzMTcxMiwgMTMxNzE0LCAKKyAgICAxMzE3MTYsIDEzMTcxOCwgMTMxNzIwLCAxMzE3MjIsIDEzMTcyNCwgMTMxNzI2LCAxMzE3MjgsIDEzMTczMCwgMTMxNzMyLCAKKyAgICAxMzE3MzQsIDEzMTczNiwgMTMxNzM4LCAxMzE3NDAsIDEzMTc0MiwgMTMxNzQ0LCAxMzE3NDYsIDEzMTc0OCwgMTMxNzUwLCAKKyAgICAxMzE3NTIsIDEzMTc1NCwgMTMxNzU2LCAxMzE3NTgsIDEzMTc2MCwgMTMxNzYyLCAxMzE3NjQsIDEzMTc2NiwgMTMxNzY4LCAKKyAgICAxMzE3NzAsIDEzMTc3MiwgMTMxNzc0LCAxMzE3NzYsIDEzMTc3OCwgMTMxNzgwLCAxMzE3ODIsIDEzMTc4NCwgMTMxNzg2LCAKKyAgICAxMzE3ODgsIDEzMTc5MCwgMTMxNzkyLCAxMzE3OTQsIDEzMTc5NiwgMTMxNzk4LCAxMzE4MDAsIDEzMTgwMiwgMTMxODA0LCAKKyAgICAxMzE4MDYsIDEzMTgwOCwgMTMxODEwLCAxMzE4MTIsIDEzMTgxNCwgMTMxODE2LCAxMzE4MTgsIDEzMTgyMCwgMTMxODIyLCAKKyAgICAxMzE4MjQsIDEzMTgyNiwgMTMxODI4LCAxMzE4MzAsIDEzMTgzMiwgMTMxODM0LCAxMzE4MzYsIDEzMTgzOCwgMTMxODQwLCAKKyAgICAxMzE4NDIsIDEzMTg0NCwgMTMxODQ2LCAxMzE4NDgsIDEzMTg1MCwgMTMxODUyLCAxMzE4NTQsIDEzMTg1NiwgMTMxODU4LCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzE4NjAsIDEzMTg3MCwgMTMxODgwLCAxMzE4ODksIDEzMTg5OCwgMTMxOTExLCAKKyAgICAxMzE5MjQsIDEzMTkzNiwgMTMxOTQ4LCAxMzE5NTgsIDEzMTk2OCwgMTMxOTc4LCAxMzE5ODgsIDEzMTk5OSwgMTMyMDEwLCAKKyAgICAxMzIwMjAsIDEzMjAyOSwgMTMyMDM4LCAxMzIwNDcsIDEzMjA2MCwgMTMyMDczLCAxMzIwODUsIDEzMjA5NywgMTMyMTA3LCAKKyAgICAxMzIxMTcsIDEzMjEyNywgMTMyMTM3LCAxMzIxNDYsIDEzMjE1NSwgMTMyMTY0LCAxMzIxNzMsIDEzMjE4MiwgMTMyMTkxLCAKKyAgICAxMzIyMDAsIDEzMjIwOSwgMTMyMjE4LCAxMzIyMjcsIDEzMjIzNiwgMTMyMjQ1LCAxMzIyNTYsIDEzMjI2NiwgMTMyMjc2LCAKKyAgICAxMzIyODksIDEzMjI5OSwgMTMyMzEyLCAxMzIzMTksIDEzMjMyOSwgMTMyMzM2LCAxMzIzNDMsIDEzMjM1MCwgMTMyMzU3LCAKKyAgICAxMzIzNjQsIDEzMjM3MSwgMTMyMzgwLCAxMzIzODksIDEzMjM5OCwgMTMyNDA3LCAxMzI0MTYsIDEzMjQyNSwgMTMyNDM0LCAKKyAgICAxMzI0NDMsIDEzMjQ1MSwgMTMyNDU5LCAxMzI0NjYsIDEzMjQ3NiwgMTMyNDg1LCAxMzI0OTMsIDEzMjUwMCwgMTMyNTEwLCAKKyAgICAxMzI1MTksIDEzMjUyOSwgMTMyNTM5LCAxMzI1NTAsIDEzMjU2MCwgMTMyNTY5LCAxMzI1NzksIDEzMjU4OCwgMTMyNTk4LCAKKyAgICAxMzI2MDYsIDEzMjYxMCwgMTMyNjE0LCAxMzI2MTgsIDEzMjYyMiwgMTMyNjI2LCAxMzI2MzAsIDEzMjYzNCwgMTMyNjM4LCAKKyAgICAxMzI2NDIsIDEzMjY0NiwgMTMyNjQ5LCAxMzI2NTMsIDEzMjY1NiwgMTMyNjU5LCAxMzI2NjMsIDEzMjY2NywgMTMyNjcxLCAKKyAgICAxMzI2NzUsIDEzMjY3OSwgMTMyNjgzLCAxMzI2ODcsIDEzMjY5MSwgMTMyNjk1LCAxMzI2OTksIDEzMjcwMywgMTMyNzA3LCAKKyAgICAxMzI3MTEsIDEzMjcxNSwgMTMyNzE5LCAxMzI3MjMsIDEzMjcyNywgMTMyNzMxLCAxMzI3MzUsIDEzMjczOSwgMTMyNzQzLCAKKyAgICAxMzI3NDcsIDEzMjc1MSwgMTMyNzU1LCAxMzI3NTksIDEzMjc2MywgMTMyNzY3LCAxMzI3NzEsIDEzMjc3NSwgMTMyNzc5LCAKKyAgICAxMzI3ODMsIDEzMjc4NywgMTMyNzkxLCAxMzI3OTUsIDEzMjc5OSwgMTMyODAzLCAxMzI4MDcsIDEzMjgxMSwgMTMyODE1LCAKKyAgICAxMzI4MTksIDEzMjgyMywgMTMyODI3LCAxMzI4MzEsIDEzMjgzNSwgMTMyODM5LCAxMzI4NDMsIDEzMjg0NywgMTMyODUxLCAKKyAgICAxMzI4NTUsIDEzMjg1OSwgMTMyODYzLCAxMzI4NjcsIDEzMjg3MSwgMTMyODc1LCAxMzI4NzksIDEzMjg4MywgMTMyODg3LCAKKyAgICAxMzI4OTEsIDEzMjg5NSwgMTMyODk5LCAxMzI5MDMsIDEzMjkwNywgMTMyOTExLCAxMzI5MTUsIDEzMjkxOSwgMTMyOTIzLCAKKyAgICAxMzI5MjcsIDEzMjkzMSwgMTMyOTM1LCAxMzI5MzksIDEzMjk0MywgMTMyOTQ3LCAxMzI5NTEsIDEzMjk1NSwgMTMyOTU5LCAKKyAgICAxMzI5NjMsIDEzMjk2NywgMTMyOTcxLCAxMzI5NzUsIDEzMjk3OSwgMTMyOTgzLCAxMzI5ODcsIDEzMjk5MSwgMTMyOTk1LCAKKyAgICAxMzI5OTksIDEzMzAwMiwgMTMzMDA2LCAxMzMwMTAsIDEzMzAxNCwgMTMzMDE4LCAxMzMwMjIsIDEzMzAyNiwgMTMzMDMwLCAKKyAgICAxMzMwMzQsIDEzMzAzOCwgMTMzMDQyLCAxMzMwNDYsIDEzMzA1MCwgMTMzMDU0LCAxMzMwNTgsIDEzMzA2MiwgMTMzMDY2LCAKKyAgICAxMzMwNzAsIDEzMzA3NCwgMTMzMDc4LCAxMzMwODIsIDEzMzA4NiwgMTMzMDkwLCAxMzMwOTQsIDEzMzA5OCwgMTMzMTAyLCAKKyAgICAxMzMxMDYsIDEzMzExMCwgMTMzMTE0LCAxMzMxMTgsIDEzMzEyMiwgMTMzMTI2LCAxMzMxMzAsIDEzMzEzNCwgMTMzMTM4LCAKKyAgICAxMzMxNDIsIDEzMzE0NiwgMTMzMTUwLCAxMzMxNTQsIDEzMzE1OCwgMTMzMTYyLCAxMzMxNjYsIDEzMzE3MCwgMTMzMTc0LCAKKyAgICAxMzMxNzgsIDEzMzE4MiwgMTMzMTg2LCAxMzMxOTAsIDEzMzE5NCwgMTMzMTk4LCAxMzMyMDIsIDEzMzIwNiwgMTMzMjEwLCAKKyAgICAxMzMyMTQsIDEzMzIxOCwgMTMzMjIyLCAxMzMyMjYsIDEzMzIzMCwgMTMzMjM0LCAxMzMyMzgsIDEzMzI0MiwgMTMzMjQ2LCAKKyAgICAxMzMyNTAsIDEzMzI1NCwgMTMzMjU4LCAxMzMyNjIsIDEzMzI2NiwgMTMzMjcwLCAxMzMyNzQsIDEzMzI3OCwgMTMzMjgyLCAKKyAgICAxMzMyODYsIDEzMzI5MCwgMTMzMjk0LCAxMzMyOTgsIDEzMzMwMiwgMTMzMzA2LCAxMzMzMTAsIDEzMzMxNCwgMTMzMzE4LCAKKyAgICAxMzMzMjIsIDEzMzMyNiwgMTMzMzMwLCAxMzMzMzQsIDEzMzMzOCwgMTMzMzQyLCAxMzMzNDYsIDEzMzM1MCwgMTMzMzU0LCAKKyAgICAxMzMzNTgsIDEzMzM2MiwgMTMzMzY2LCAxMzMzNzAsIDEzMzM3NCwgMTMzMzc4LCAxMzMzODIsIDEzMzM4NiwgMTMzMzkwLCAKKyAgICAxMzMzOTQsIDEzMzM5OCwgMTMzNDAyLCAxMzM0MDYsIDEzMzQxMCwgMTMzNDE0LCAxMzM0MTgsIDEzMzQyMiwgMTMzNDI2LCAKKyAgICAxMzM0MzAsIDEzMzQzNCwgMTMzNDM4LCAxMzM0NDIsIDEzMzQ0NiwgMTMzNDUwLCAxMzM0NTQsIDEzMzQ1OCwgMTMzNDYyLCAKKyAgICAxMzM0NjYsIDEzMzQ3MCwgMTMzNDc0LCAxMzM0NzgsIDEzMzQ4MiwgMTMzNDg2LCAxMzM0OTAsIDEzMzQ5NCwgMTMzNDk4LCAKKyAgICAxMzM1MDIsIDEzMzUwNiwgMTMzNTEwLCAxMzM1MTQsIDEzMzUxOCwgMTMzNTIyLCAxMzM1MjYsIDEzMzUzMCwgMTMzNTM0LCAKKyAgICAxMzM1MzgsIDEzMzU0MiwgMTMzNTQ2LCAxMzM1NTAsIDEzMzU1NCwgMTMzNTU4LCAxMzM1NjIsIDEzMzU2NiwgMTMzNTcwLCAKKyAgICAxMzM1NzQsIDEzMzU3OCwgMTMzNTgyLCAxMzM1ODYsIDEzMzU5MCwgMTMzNTk0LCAxMzM1OTgsIDEzMzYwMiwgMTMzNjA2LCAKKyAgICAxMzM2MTAsIDEzMzYxNCwgMTMzNjE4LCAxMzM2MjIsIDEzMzYyNiwgMTMzNjMwLCAxMzM2MzQsIDEzMzYzOCwgMTMzNjQyLCAKKyAgICAxMzM2NDYsIDEzMzY1MCwgMTMzNjU0LCAxMzM2NTgsIDEzMzY2MiwgMTMzNjY2LCAxMzM2NzAsIDEzMzY3NCwgMTMzNjc4LCAKKyAgICAxMzM2ODIsIDEzMzY4NiwgMTMzNjkwLCAxMzM2OTQsIDEzMzY5OCwgMTMzNzAyLCAxMzM3MDYsIDEzMzcxMCwgMTMzNzE0LCAKKyAgICAxMzM3MTgsIDEzMzcyMiwgMTMzNzI2LCAxMzM3MzAsIDEzMzczNCwgMTMzNzM4LCAxMzM3NDIsIDEzMzc0NiwgMTMzNzUwLCAKKyAgICAxMzM3NTQsIDEzMzc1OCwgMTMzNzYyLCAxMzM3NjYsIDEzMzc3MSwgMTMzNzc2LCAxMzM3ODEsIDEzMzc4NSwgMTMzNzkxLCAKKyAgICAxMzM3OTgsIDEzMzgwNSwgMTMzODEyLCAxMzM4MTksIDEzMzgyNiwgMTMzODMzLCAxMzM4NDAsIDEzMzg0NywgMTMzODU0LCAKKyAgICAxMzM4NjEsIDEzMzg2OCwgMTMzODc1LCAxMzM4ODIsIDEzMzg4OCwgMTMzODk1LCAxMzM5MDIsIDEzMzkwOCwgMTMzOTE1LCAKKyAgICAxMzM5MjIsIDEzMzkyOSwgMTMzOTM2LCAxMzM5NDMsIDEzMzk1MCwgMTMzOTU3LCAxMzM5NjQsIDEzMzk3MSwgMTMzOTc4LCAKKyAgICAxMzM5ODUsIDEzMzk5MiwgMTMzOTk5LCAxMzQwMDUsIDEzNDAxMSwgMTM0MDE4LCAxMzQwMjUsIDEzNDAzNCwgMTM0MDQzLCAKKyAgICAxMzQwNTIsIDEzNDA2MSwgMTM0MDY2LCAxMzQwNzEsIDEzNDA3NywgMTM0MDgzLCAxMzQwODksIDEzNDA5NSwgMTM0MTAxLCAKKyAgICAxMzQxMDcsIDEzNDExMywgMTM0MTE5LCAxMzQxMjUsIDEzNDEzMSwgMTM0MTM3LCAxMzQxNDMsIDEzNDE0OCwgMTM0MTU0LCAKKyAgICAxMzQxNjQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogfTsKIAogLyogbmFtZS0+Y29kZSBkaWN0aW9uYXJ5ICovCiBzdGF0aWMgdW5zaWduZWQgaW50IGNvZGVfaGFzaFtdID0gewogICAgIDc0MjI0LCA0ODUxLCAwLCA3ODE1NiwgNzg0OTksIDEyODY4NSwgNzkyOSwgMCwgMTk0NjgyLCAxMjc3NjYsIDc4NTAwLCAKLSAgICA2NjQ4MCwgMCwgNDI4MzMsIDc0NTI5LCAxMjA2NCwgMCwgNTk2LCA5ODM4MTIsIDY5ODUwLCAxMzE5MiwgODY1MSwgMCwgMCwgCisgICAgNjY0ODAsIDAsIDQyODMzLCA3NDUyOSwgMTIwNjQsIDAsIDU5NiwgOTgzODIxLCA2OTg1MCwgMTMxOTIsIDg2NTEsIDAsIDAsIAogICAgIDEyMDIxOCwgMTI5OTUsIDY0ODY1LCAxMzczLCAwLCAwLCA1ODE2LCAxMTkwNjcsIDY0ODEwLCA0MjMxLCA2ODI1LCA0Mjg5NywgCiAgICAgNDIzMywgNDIzNCwgNDIzMiwgOTE3ODM2LCA3NDQxNSwgMTIwMjEwLCA2Mzg0LCA5MTc4NDAsIDc4MTA4LCA4ODUxLCAwLCAKLSAgICAxMjg1NTMsIDAsIDQxNjAxLCA4ODc0LCA5ODM3NzQsIDc3NDgsIDAsIDAsIDAsIDEyNzkzOSwgNDE2MDMsIDk3ODQsIDAsIAorICAgIDEyODU1MywgMCwgNDE2MDEsIDg4NzQsIDk4Mzc4MywgNzc0OCwgMCwgMCwgMCwgMTI3OTM5LCA0MTYwMywgOTc4NCwgMCwgCiAgICAgOTE4OCwgNDE2MDAsIDAsIDEyMDYxOCwgMTI4MzQzLCAxNDU3LCAzNTM1LCAwLCAwLCAwLCAwLCA2NTI0MCwgMTE5NTEsIDAsIAogICAgIDM0MDQsIDAsIDAsIDAsIDE3NTksIDAsIDQxMDc2LCA2ODM4MywgMTIwNTcyLCAxMTkyMDUsIDY2NTc3LCA5NDAxNCwgCi0gICAgMTI3NzY0LCA2NTg1OSwgMCwgNzQwNCwgMCwgMCwgMCwgMCwgNjU5MDgsIDk4MzQsIDMwNTUsIDk4NTIsIDk4Mzg1MSwgCisgICAgMTI3NzY0LCA2NTg1OSwgMCwgNzQwNCwgMCwgMCwgMCwgMCwgNjU5MDgsIDk4MzQsIDMwNTUsIDk4NTIsIDk4Mzg2MCwgCiAgICAgNjUyODgsIDAsIDExMzk4LCAwLCA5MjQxNywgMTE5MjU1LCAwLCAwLCA2MDMsIDc0Mzk4LCA0MzU0OCwgMCwgMCwgOTE3ODI0LCAKICAgICAzMzUwLCAxMjA4MTcsIDY0MzE4LCA5MTc4MjgsIDEyNzA4OSwgMzM5MCwgNzQ0ODMsIDQzMjY1LCAxMjA1OTksIDkxNzgzMCwgCiAgICAgNzg1NzMsIDAsIDE5MTksIDM0MDAsIDEyMDY1MSwgMTI3OTQ0LCAxMTY0NywgOTE3NTQwLCA2NjQ0NiwgNjQxNDEsIDg1NjIsIAotICAgIDIxMjEsIDY0MTM4LCA0MDQzLCA4NzEyLCA2NDEzNCwgNjQxMzMsIDExMjk3LCA5ODM2NzksIDk4MzE1MiwgMTE5NjYsIAotICAgIDY0MTI4LCAxMjg1ODcsIDAsIDAsIDY0MTMyLCAxMDg2NywgNjQxMzAsIDY0MTI5LCA5ODM4MzUsIDQzMzc0LCA5Nzc5LCAKKyAgICAyMTIxLCA2NDEzOCwgNDA0MywgODcxMiwgNjQxMzQsIDY0MTMzLCAxMTI5NywgOTgzNjg4LCA5ODMxNTIsIDExOTY2LCAKKyAgICA2NDEyOCwgMTI4NTg3LCAwLCAwLCA2NDEzMiwgMTA4NjcsIDY0MTMwLCA2NDEyOSwgOTgzODQ0LCA0MzM3NCwgOTc3OSwgCiAgICAgMjc2NCwgNjYwMDIsIDEwMTY3LCA5NDcxLCAwLCA2NjAyMSwgMCwgMCwgNTQ1NywgNTQ0MCwgODg1NywgOTM5ODEsIDY1MjgyLCAKLSAgICAyODQzLCA1MzU1LCAxMjc5MjgsIDk4Mzk1NiwgMCwgNTE5NCwgMTE2NTcsIDQzOTg0LCAxMjgyOTIsIDAsIDk4MzYyMCwgMCwgCisgICAgMjg0MywgNTM1NSwgMTI3OTI4LCA5ODM5NjUsIDAsIDUxOTQsIDExNjU3LCA0Mzk4NCwgMTI4MjkyLCAwLCA5ODM2MjAsIDAsIAogICAgIDAsIDEyNzAyNywgMTA3MTcsIDY0NTcwLCA1NjMwLCA1Mzk2LCA2NDE0MywgMTA2ODIsIDAsIDEwNjAyLCA4MDAsIDQyNDk5LCAKICAgICA2NjE4NiwgMCwgMCwgNjQ5MzAsIDExNjMxLCA2NDE0NiwgNjQxNDUsIDY0MTQ0LCA3NjIsIDEzMTcyLCAxMTg4NTksIAogICAgIDE5NDY2MSwgNjQ0NjgsIDEwOTA2LCAxMzUzLCA2OTYwLCAwLCAwLCA1ODI4LCA4NzI0LCA5MTc4MDYsIDg5MzMsIDE2MDEsIAogICAgIDQyMjQ0LCA4NTgsIDcwODAsIDY0MTA5LCA2NDEwOCwgODA5MCwgMCwgNzQ0MDEsIDkxNzgxMSwgNTg3LCAwLCAxMjgxMzEsIAotICAgIDAsIDAsIDAsIDc4MjE0LCAyNzUwLCA3NDIxOCwgNTU2LCA2NDE1OCwgNjQxNTcsIDk4Mzk0MCwgMTIyMTMsIDE5NDY3OCwgCisgICAgMCwgMCwgMCwgNzgyMTQsIDI3NTAsIDc0MjE4LCA1NTYsIDY0MTU4LCA2NDE1NywgOTgzOTQ5LCAxMjIxMywgMTk0Njc4LCAKICAgICAyNzYwLCAwLCAwLCAwLCAxOTQ3OTQsIDY0MTU2LCA2NDE1NSwgNDI0OTYsIDAsIDY0MTUxLCA2NDE1MCwgMTI2NzksIAogICAgIDEwMDUzLCAxMDQyMSwgMTEwOTMsIDY0MTUzLCA2NDE1MiwgMCwgMCwgNDgzOSwgMCwgMCwgMTg3NCwgMTE5MDE2LCAwLCAKICAgICA2NTc3LCA2NDEyNSwgNjQxMjQsIDY0MTIzLCAwLCAxMjc1MzEsIDkyNTM0LCA3MDA3LCA3NTkwLCA2NTQ0MywgOTAzNiwgCkBAIC0xNzExNCwxMiArMTcxMzMsMTIgQEAKICAgICA2NDEwMiwgNzg1OSwgMTk0NSwgNjQwOTksIDAsIDEwNDUzLCA2NDEwNCwgNzE4OCwgNzk5NywgMCwgNzM4OSwgOTgzMTYxLCAKICAgICA4NzA1LCA2NDA5NywgNjQwOTYsIDk1NzEsIDUyOCwgMTI4NjcxLCA0NDAxNywgMTE0MjksIDcxMzQ3LCAwLCA5ODMwNzcsIAogICAgIDkxNzk5MCwgNzM4NDEsIDAsIDAsIDkwNTYsIDY0MzEzLCA2MTg4LCAxMjAwMTksIDYxNTUsIDY0MDY4LCAxODIzLCA2NDA2NiwgCi0gICAgNjQwNjUsIDY0MDcyLCA2NDA3MSwgNjMsIDcyMzMsIDkyMjEyLCAwLCA0MTkwNCwgNjYzOSwgNjQwNjQsIDk4Mzc2NiwgCi0gICAgMTI4MzQ0LCAwLCAxMTc2LCAxMTg5NTksIDEyNzkzMCwgODE2MiwgMTI4NjY3LCA5ODM4MjIsIDAsIDEyMDUxOSwgNjYzNzYsIAorICAgIDY0MDY1LCA2NDA3MiwgNjQwNzEsIDYzLCA3MjMzLCA5MjIxMiwgMCwgNDE5MDQsIDY2MzksIDY0MDY0LCA5ODM3NzUsIAorICAgIDEyODM0NCwgMCwgMTE3NiwgMTE4OTU5LCAxMjc5MzAsIDgxNjIsIDEyODY2NywgOTgzODMxLCAwLCAxMjA1MTksIDY2Mzc2LCAKICAgICA2NjI0MiwgMTE0MTUsIDQzMzMsIDk4NTUsIDY0MTEyLCA2NDY0MiwgMCwgNTM4OCwgMCwgMCwgMCwgNzcxNCwgNjYyMjIsIAotICAgIDY5OTAyLCA3NzY4LCAwLCA0MTk5LCA2NDcwOCwgOTgzNDEzLCAwLCAwLCA4NzA4LCA5NTYwLCA2NDA3NywgNjQwNzYsIAorICAgIDY5OTAyLCA3NzY4LCAwLCA0MTk5LCA2NDcwOCwgOTgzNDIxLCAwLCAwLCA4NzA4LCA5NTYwLCA2NDA3NywgNjQwNzYsIAogICAgIDg5OTYsIDQ5OTIsIDQ0NzEsIDQyNjIyLCA2NDA3OSwgNjQwNzgsIDkyMTc5LCAwLCAxMjY1NzAsIDAsIDY0NjE1LCA0MTkxNSwgCi0gICAgMCwgMTIwNzUsIDcwMDYyLCAwLCA1MTc0LCA5ODMyMTUsIDAsIDEyNzU1NywgMzEyMywgMCwgMTI2ODUsIDEyNzkwNCwgCisgICAgMCwgMTIwNzUsIDcwMDYyLCAwLCA1MTc0LCA5ODMyMTcsIDAsIDEyNzU1NywgMzEyMywgMCwgMTI2ODUsIDEyNzkwNCwgCiAgICAgODQwOCwgNjQ3MDQsIDAsIDAsIDkyMjMsIDAsIDQxNjE2LCA2Nzk5OSwgNzM3OTcsIDAsIDExMTYsIDEyODIwNCwgNDMwNDksIAogICAgIDcxMzYsIDQzMDUwLCA4NTQ4LCAxMjA0ODUsIDAsIDExOTA2MSwgOTE3OTk5LCAwLCAxMzExNSwgNDM2NzUsIDY0MDkxLCAKICAgICA5MzIyLCAwLCAxMjA1OTUsIDY0MDk1LCA2NDA5NCwgODExMSwgNjYyNDcsIDQyMzMyLCA2NDA4OSwgNjQwODgsIDYxOTksIDAsIApAQCAtMTcxMjcsMTAgKzE3MTQ2LDEwIEBACiAgICAgOTkyNywgNDEzMzUsIDQxMTgsIDE3OTcsIDAsIDQxMzM0LCAwLCA0NiwgNDM0NDgsIDEyNzg4MSwgMjk4LCAwLCAxMjgxMTQsIAogICAgIDAsIDQyNjI3LCAwLCAzMiwgNjE4NywgMTE5MDUyLCAxMTQ5NSwgMTE0NTksIDM2NjUsIDk4MzYwMCwgNDI4NzEsIDAsIAogICAgIDE5OTIzLCA3NDMzNSwgMCwgMTI3MTkyLCA2NjIzOSwgNDIyNjQsIDY0NDAzLCA0NDEyLCA3MjQwLCA5MjQ5NSwgMCwgCi0gICAgOTgzNDU4LCA2NTc1OCwgMTI3NTAsIDQxODEsIDg1NDQsIDAsIDEyMDE5OSwgOTE3ODk3LCAxMjAxOTgsIDY5ODA5LCA2MTgxLCAKKyAgICA5ODM0NjYsIDY1NzU4LCAxMjc1MCwgNDE4MSwgODU0NCwgMCwgMTIwMTk5LCA5MTc4OTcsIDEyMDE5OCwgNjk4MDksIDYxODEsIAogICAgIDY1MDE0LCAwLCAwLCA5ODMxOTYsIDM2MzksIDExOTU4OCwgMCwgMCwgMTE4OTA0LCAxMDA3MywgMTIwMjA2LCAxMjg4NjIsIAogICAgIDEyNzE4NiwgNjg0MDksIDQyODQ0LCA3NDk4LCAxMDk4LCA5MjU2NSwgMTIwMjA1LCAwLCA5ODMxMTgsIDEwMjA3LCA4Nzg5LCAKLSAgICA5ODMyMjMsIDAsIDAsIDk4MzQ2NCwgOTIzNCwgMCwgNjE4MiwgOTgzNDY2LCA2NTA1OCwgMCwgOTgzNDcwLCA5ODM0NjcsIDAsIAorICAgIDk4MzIyNSwgMCwgMCwgOTgzNDcyLCA5MjM0LCAwLCA2MTgyLCA5ODM0NzQsIDY1MDU4LCAwLCA5ODM0NzgsIDk4MzQ3NSwgMCwgCiAgICAgNTQ3MSwgOTQ2MSwgNTU3MywgMTE4OTM2LCA1NDczLCA0NCwgMCwgNjYyNDQsIDk0MDcyLCAwLCA2NjIzOCwgMTI4NDQsIDAsIAogICAgIDE2MjIsIDc3NjcsIDE5MDAsIDQxMzM5LCAxMTQ1OCwgMCwgMCwgNjU4MSwgNTU3NiwgMCwgNjQ0MDUsIDQxMzM3LCAwLCAKICAgICA0MTYzMSwgODk0NywgNjgzOTAsIDEyNzg0NCwgNDE2OTQsIDAsIDAsIDc5MDgsIDAsIDEwNDA4LCA2NTc5LCAwLCA2NDYxOCwgCkBAIC0xNzEzOCwxMCArMTcxNTcsMTAgQEAKICAgICA5OTkyLCAxMjgyOTksIDUwNTcsIDAsIDAsIDc0NTM4LCA1MDU0LCAxMTg5NTEsIDE5NDk3MSwgNzg2MDYsIDAsIDE0MzcsIAogICAgIDQxNjE3LCA2NTgsIDM0OTcsIDEyODUwOSwgNzQ4NiwgNTA2MSwgNTA2MCwgNDIzNSwgMTI3ODc4LCAwLCAxMjg1MjksIAogICAgIDEyMTEzLCA0MjM2LCA0NzI3LCAwLCAwLCA3NjkzLCAxMDc0OSwgMCwgNzQ4OCwgNTc3MywgOTc4LCAxMjgxMzQsIDAsIAotICAgIDQxNjE5LCAxMDIzOSwgNjg2MTEsIDAsIDY2MjA5LCAwLCAxMjg3MDAsIDk3NDgsIDk4Mzk0NywgMTI3NTI0LCAwLCAwLCAwLCAKLSAgICAwLCAxOTUwODMsIDAsIDk4MzgzNCwgMCwgMCwgMCwgMCwgMCwgOTM0MSwgMTE5NTk2LCAyMzc5LCAxMTMyNSwgMCwgNjQ2NjgsIAotICAgIDY3ODU0LCA4MTI1LCAxMjA1NDUsIDY3NDMsIDExOTE3NSwgOTE3OTQwLCAyMzY5LCAwLCA5ODM5NjMsIDk4Mzk2NCwgCi0gICAgMTE5MjM1LCA3NDA5MiwgNzM5MzYsIDcwMDgsIDQzNjYwLCAwLCAwLCAwLCAyMzY3LCAxMjc4MjcsIDk4Mzg0OCwgMjY0LCAKKyAgICA0MTYxOSwgMTAyMzksIDY4NjExLCAwLCA2NjIwOSwgMCwgMTI4NzAwLCA5NzQ4LCA5ODM5NTYsIDEyNzUyNCwgMCwgMCwgMCwgCisgICAgMCwgMTk1MDgzLCAwLCA5ODM4NDMsIDAsIDAsIDAsIDAsIDAsIDkzNDEsIDExOTU5NiwgMjM3OSwgMTEzMjUsIDAsIDY0NjY4LCAKKyAgICA2Nzg1NCwgODEyNSwgMTIwNTQ1LCA2NzQzLCAxMTkxNzUsIDkxNzk0MCwgMjM2OSwgMCwgOTgzOTcyLCA5ODM5NzMsIAorICAgIDExOTIzNSwgNzQwOTIsIDczOTM2LCA3MDA4LCA0MzY2MCwgMCwgMCwgMCwgMjM2NywgMTI3ODI3LCA5ODM4NTcsIDI2NCwgCiAgICAgMjM3NSwgODA2MCwgNjE5NCwgMTE5ODU4LCAxODQ0LCAxMTkwODQsIDAsIDYwMTksIDAsIDAsIDY5NjEsIDAsIDExODgzOSwgCiAgICAgMCwgODgwMCwgMCwgNDI4NjIsIDQ0NjMsIDY1NTgxLCA2MTkyLCAxOTQ2NzYsIDQyNzcxLCAwLCA5MjMzMywgNzI1LCAKICAgICA2NTA0MiwgMTE4Nzk3LCAxMjA4MDAsIDk4MzA0MCwgMTI4OTIsIDAsIDAsIDAsIDAsIDAsIDAsIDEyNzI2MSwgMTIwNzA3LCAKQEAgLTE3MTU5LDYzNCArMTcxNzgsNjM0IEBACiAgICAgMTI2NTAzLCA0MTYwNywgMTIwMTE1LCAxNjc5LCAxMjAxMTYsIDEyMDE4MCwgMTIwMTEzLCAxMjc0NjIsIDcwMDUsIDQxNjA5LCAKICAgICA5NTgwLCAwLCA0MDEsIDY5OTQ5LCA0Mzc3OSwgNjk2OCwgNTc2MSwgMzQyLCA4NTUzLCAwLCA4MTQzLCAxMjcxMTUsIAogICAgIDExOTgzLCA5MjI0OSwgNjI0LCA3NDUwOCwgNDA1NywgNDM3ODgsIDUwNzgsIDc0MjU4LCAxMjQ3OCwgMCwgNTA3NiwgMCwgCi0gICAgMTk0NjA5LCAwLCAxMjAwOTcsIDY4NSwgOTAyNSwgMTUyNCwgMTI2MTgsIDAsIDU1MzksIDAsIDkyNTIzLCAxMjAxMDIsIAotICAgIDcxMzgsIDEyMDU1MiwgMCwgMTk0NjExLCA3ODc1MiwgMCwgMTI1MjAsIDgwNTgsIDk3MzIsIDAsIDUwODAsIDY0Nzc1LCAKLSAgICA1MDM2LCA1MDM1LCAxMjA1OTAsIDQyNjA0LCA5ODM2NDcsIDAsIDgwNzQsIDI3NSwgMTMyOTEsIDE5MDcsIDc4ODM4LCAKLSAgICA0NDMyLCAxMjcyNzEsIDUwMzMsIDEyNzI3MywgMTI3MjcyLCA0ODM2LCAzODg4LCA3Mzc5MiwgMTA3MjksIDY0NTQ2LCAKLSAgICAxMjcyNjIsIDQzNzA0LCAxMjcyNjQsIDEyNzI1MSwgNjc1ODgsIDExOTAwMCwgMTI3MjUyLCAxMjcyNTUsIDg4NTgsIDY0MDksIAotICAgIDEyNzI1NiwgMTIwMjUyLCAxMjgxMDAsIDAsIDAsIDY2MzIxLCAwLCAxMjgxNCwgMTI3MjQ4LCAzNDMyLCAxMDIxOCwgMCwgCi0gICAgNjA5NCwgNzY0MSwgNDI0NDUsIDAsIDkyNDg3LCA0MjQwNiwgMTY3NiwgNzQzMjAsIDE5NDYwNywgOTgzMTc3LCA1MDMwLCAwLCAKLSAgICAwLCAwLCA3Mzg2OSwgOTYyMiwgMCwgNjk5NDQsIDY3ODcsIDAsIDAsIDAsIDk4MzU4MywgMTA1NDQsIDEyOTE5LCAwLCAKLSAgICA5MjIxOCwgMCwgMCwgNjk5MDYsIDEyMDc4OSwgMCwgOTQ3LCAxMTk4MzUsIDE5NDU4NiwgMTk0NTg1LCAxMDk2OSwgCi0gICAgMTE5OTM1LCA3NjEzLCA5MjU2MiwgMTE5OTM2LCA0Nzk1LCAxMTk5MzAsIDcwMTgsIDczNzYsIDEyMDE4MSwgMTIwMTkyLCAKLSAgICAxMjAyNjgsIDAsIDQzNTY3LCA3NDA1NiwgOTE3OTEwLCAxMTgzMywgMTE5OTE5LCA3MjE2LCA2NTIzMiwgNzIxNywgMjUxLCAKLSAgICA3MjE4LCA3ODk1LCA0Mzk1LCA0MzUzOCwgMTE5OTI2LCAxMTk5MjksIDExOTkyOCwgNzIxMywgMTE5OTIyLCA3MjE0LCAKLSAgICA3MjE1LCA5ODM4MjcsIDc0MTQxLCA4ODgwLCA3Njg1LCA2NjQ1OSwgMTIwMTczLCA2NTU0MCwgMTE5NjE4LCA2MjUsIDgxODcsIAotICAgIDQyODYxLCAxMTEzLCA3MjM2LCA3OTE1LCAzNjMwLCAxMjAxNzYsIDgxNzksIDc0MjY0LCA2Nzg4NiwgOTMxNiwgMTA5ODAsIAotICAgIDI0ODksIDY1NjI0LCA4MTUwLCAxMzU5LCA2NzY1MiwgMTI3MzI5LCAxMjczMzAsIDczNzU2LCA1MDQyLCA1MDQxLCA0Mjc2OSwgCi0gICAgMTIwODQsIDEyNzMyNCwgMTI3MzIxLCA5MjI3OSwgMTI3MzE5LCAxMjczMjAsIDEyNzMxNywgMTI3MzE4LCAxMjczMTUsIAotICAgIDEyMjgzLCAxNjE2LCAzNzk1LCAwLCA4Nzk1LCA2NjI0NSwgMCwgMCwgMCwgMTEzOCwgNzM5MDUsIDEyNjc3LCAwLCAwLCAKLSAgICAzMjM5LCAxMjczMTEsIDAsIDAsIDg0MzEsIDAsIDQyMTY0LCAwLCAxMTc3OCwgMTI2MjAsIDY4MjYsIDczNzczLCAxMTkwNzMsIAotICAgIDUwNDAsIDAsIDAsIDk4MzQzNSwgNzg0MjAsIDAsIDUwMzksIDAsIDc4NDE4LCAwLCA1MDM4LCAwLCAwLCAxMzE4NCwgCi0gICAgNzQyOTMsIDAsIDY0NjQ4LCAwLCA5MzU5LCA3ODQxNiwgMCwgMTI4NzcwLCA2NTE1NywgNjY2MiwgMCwgMCwgMzg2MywgCi0gICAgNzM5MDksIDQ4MzUsIDU1MjY2LCA0MzQzMiwgMTI3ODIyLCA0MzA5LCA3MTI3LCAxOTQ1NjksIDAsIDE5NDU2OCwgMTMwMSwgCi0gICAgMCwgNDI1ODksIDU2OSwgMCwgNzM4MTMsIDcxMSwgNDM4OSwgNzEzMywgMCwgNzM4ODAsIDExNjEwLCAxMTM2OCwgMCwgCi0gICAgMTk0NTcwLCA0MTMzMSwgMTAwNiwgNzQyNDAsIDAsIDE1NTAsIDgyMDEsIDczNzM3LCA3NjI3LCA1NDk5LCA1MDMxLCAKLSAgICA3NzkwOCwgNDI3MzgsIDY1Nzg0LCA3NzkwNywgNjUyNjcsIDM3NTgsIDAsIDY1NzgxLCA2NDczNCwgNzAwNzMsIDI0NDAsIAotICAgIDY1NzgwLCA3NzkxMywgODQ0OSwgMCwgNTAwOCwgOTgzNTcyLCAyMTE4LCAwLCAxMjEyMSwgODI1NSwgNTUxMiwgNzM4NzUsIAotICAgIDIxMjgsIDIxMzAsIDIxMzEsIDIxMjYsIDIxMzMsIDExMTksIDEyNzA2OCwgMjExNCwgMjExNiwgMjQ1NSwgMCwgMjEyMiwgCi0gICAgMjEyMywgMjEyNCwgMjEyNSwgMTI3NDg2LCA4NzE0LCA5ODM4MTEsIDIxMTMsIDAsIDIxMTUsIDEyODE3NywgMTI3OTA3LCAKLSAgICA0MzcxMywgNTA1MiwgNjYyMjAsIDU4MjEsIDYxODYsIDY1Nzc4LCA2NTc3NSwgNTA1MSwgNjU3NzMsIDE0MjksIDQyNjQ3LCAKLSAgICA1MDUwLCAzMDIsIDM4OCwgNDExMTUsIDczNSwgNjYzNywgNTkwNywgNjUwODgsIDAsIDEyNzI2LCA3NDU5NCwgOTExNywgCi0gICAgOTgzMTgxLCAxMjAwMywgNTUxMywgNjY2NiwgNTA1MywgNzQyMzAsIDU1MTAsIDc4NDUxLCAwLCA3ODQ0NywgMjQ3MCwgCi0gICAgNzg0MzcsIDAsIDE5MjUsIDAsIDkyMjM3LCA3NDgwNywgMCwgNTA0OCwgNTA0NywgMCwgMCwgMCwgOTIzMTMsIDAsIDc0NDk3LCAKLSAgICA5MjM5NSwgODA4OSwgNjkyOSwgNjM5LCA5ODM1NjMsIDY4MTc5LCA2NDQ0MiwgMCwgOTIzNDgsIDQ1OTksIDQxNDAyLCAKLSAgICA2Njc0LCA0MzM5NywgNDMyOTQsIDE0NzYsIDY0OCwgMCwgNjU4MTksIDMyMzMsIDAsIDQxNzgyLCA2OTUxLCA5NDAxNywgCi0gICAgOTgzOTY3LCAzNTMwLCA5NzUwLCAxMjgzMTcsIDAsIDY2NTYsIDQyNjE4LCAwLCA1MDQ2LCA4NTEyLCA2NTg1NiwgNzQyNjEsIAotICAgIDg5NjcsIDAsIDUwNDUsIDQyMDI2LCAxOTE2LCA3OTg2LCA1MDQ0LCAxMjA1NTYsIDkwMDYsIDEzMTI4LCA1MDQzLCAwLCAKLSAgICA3ODUzLCA3NDA2OCwgNzQwMDQsIDk2NjksIDEyMzQxLCAxMjcwMywgODQwMiwgMCwgMTE5MDcwLCA5MTc2MDAsIDQxNzUwLCAKLSAgICAzNTg2LCA2NDUwOCwgNDMxNDgsIDAsIDAsIDExOTYwNiwgNjc5ODMsIDEzMjk2LCA1MTcsIDAsIDEyODUzNCwgMTk0OTQ2LCAKLSAgICA0MTUyOCwgMTIzLCA2NTQ1NCwgMCwgMCwgNzQ0NzgsIDEwNTMxLCA3Nzg0LCA0MTUyNiwgMTA4MjksIDczOTkxLCA4MDU3LCAKLSAgICAxMTI2LCA3Mzg5NSwgMCwgMTk0NTkxLCAwLCAzOTI1LCA0MjUxLCA4MDY5LCAxMDUxNywgMTIwNDM5LCA0ODksIDAsIDQyNTAsIAotICAgIDEyMDQ0MSwgMTIwNDUyLCA0MzE1MSwgOTgzMTc4LCAxOTQ4NTEsIDY2MjAwLCAwLCAwLCAwLCA3ODQyMywgMCwgMCwgODcxMSwgCi0gICAgNjE4MywgMCwgMCwgMCwgMTIwNDQ4LCA3NjIzLCAxMTg5MjUsIDExODg4OSwgOTIzNSwgMTI3NjAsIDc0MTc2LCA2OTY2MiwgCi0gICAgNjY0NDUsIDQzNTQwLCAxMDA2MiwgMzc0MywgMTE1MTQsIDExMDc4LCAwLCAxMjEzNiwgMCwgMTI2NTk3LCAxMjA0MzUsIDAsIAotICAgIDc3MjYsIDAsIDE5OTIyLCAyNjcsIDMzOTMsIDQyMTk4LCAxMzcxLCAxOTQ4NDksIDY5MjMzLCAyNDU4LCAwLCA2MjAxLCAwLCAKLSAgICA0MTA3NCwgNDI2NiwgMTA2NTIsIDQxNjEyLCA0MTA3NywgMzQwMiwgOTA1MCwgMzM5OCwgMCwgOTgzMzQwLCAwLCAzMzkxLCAKLSAgICA0MTA3NSwgMjQ3NiwgMCwgMTI4MDE3LCAwLCAxMDYyNSwgMCwgMTI3NjcsIDEzMDE3LCA3ODc0MywgNjQyNjEsIDY0OTM0LCAKLSAgICAxMjc1MzcsIDEzMDE0LCAxMzAxMywgMCwgNjY3MywgMCwgMCwgMCwgMTI0MzgsIDAsIDk4MzMzNCwgMCwgOTgzODcxLCAKLSAgICAxMjY2MzgsIDkwNTMsIDEzMDE1LCA3NDUyMywgMCwgNzA0LCA2NjIxNSwgNjE5NSwgOTgzODE5LCA2NjYwLCA3ODc1OCwgCi0gICAgOTE3NzYwLCA5MTc3OTMsIDQyMjEyLCAxMjYyOSwgMTE0MzUsIDAsIDU1MjU2LCA2NTUzOCwgMCwgMTI3OTQwLCA5ODMzMzMsIAotICAgIDc0NTQ3LCAxMjY1ODUsIDY1NDQ4LCA3ODEwMCwgMTI5NDgsIDExOTAwMSwgMTk1MDAyLCAxMTkyMzgsIDE5NTAwNCwgCi0gICAgNzgwOTksIDEyNzA4NSwgMCwgMTI4MzIwLCA0Mjg3LCA4Mjc2LCA0OTAyLCAxMTMxLCAwLCA3ODQ1OCwgNjY3MjgsIDE4MTYsIAotICAgIDAsIDQyNTMzLCAxNjgsIDQyODQ1LCA0ODk4LCA2NDI5OCwgOTgzMTQxLCAwLCA0OTAxLCAxODIxLCAwLCA1NzgsIDM2NTMsIAotICAgIDAsIDc5MSwgOTE2MiwgNjk3NywgMCwgNzg4ODksIDc0NTYxLCAwLCA3MzczMSwgODM1NCwgNDM1OTAsIDExOTMwMywgCi0gICAgOTgzNDQxLCA3NTU3LCAxMTkzMzksIDExOTMwMSwgODIzNCwgNzI0MSwgMCwgMTIwNjcxLCAxMTkxNjcsIDE5NDk5NiwgCi0gICAgMTI4MTEsIDY1OTI1LCAzOTQ2LCA3ODA3OCwgMTA5OTgsIDc4MDgwLCA2NzMsIDE5NDg2NywgNjQzOTcsIDEyODI3NiwgCi0gICAgNzQ1OTksIDc4NDQ5LCA4ODkwLCAxOTQ5NzcsIDE5NDk3NiwgMjQ0OCwgNzgwODUsIDEwMjY3LCA4NDI0LCAyNDUyLCAKLSAgICA3ODA4MywgMTI4ODI0LCA4NzI5LCA3ODQ1NiwgMCwgNzg0NSwgOTE3OTE3LCA3MTMwMiwgNDQwOCwgNDEyMiwgNjc3MiwgCi0gICAgMTEwMzksIDg3MjMsIDE5NDk5MCwgNzEzMTAsIDExOTMwMiwgNzMxLCAxMTkzMDQsIDkyMjg2LCAyNDM4LCA2NDg1NSwgCi0gICAgMTE5MzAwLCAxMTkyOTksIDExNzUsIDAsIDQyMTM1LCAzNzMsIDExOTE3MiwgMjExOSwgMTE0NTcsIDExNTIxLCA3NzIzLCAwLCAKLSAgICAwLCAwLCA0MTk1MiwgMCwgNTI3MywgMjEyNywgNTI2OSwgNjMzNywgNTIwMiwgMjQwNCwgNTI2NywgNDI4MjMsIDExMjkxLCAKLSAgICAxOTkxNSwgNTI3NywgMTI5NjMsIDEyNzg2NCwgNjE4OSwgNDEyNSwgMTMxNCwgMTIxMzMsIDEyMDM0MCwgMTE4ODczLCAKLSAgICAxMjcxLCA5ODM2MzEsIDAsIDY2MDI0LCA0MTQ4MiwgMzg2NCwgNzQ1MzksIDAsIDM4NzksIDAsIDEyOTc4LCA0MTY2LCAKLSAgICA0NTc0LCAwLCA3NTY3LCA3NDU5LCA5ODMxNjAsIDQxMzkwLCA1Mzg0LCA0MTg4MiwgNjc2NDcsIDkyNTQ4LCA1NzU5LCAKLSAgICA5ODM5MDMsIDAsIDQxMzg4LCA2NDQ0NiwgNDEzOTIsIDY0Mjg4LCA0MTM4NywgMCwgODcwNiwgNTU1MiwgOTgzMTg3LCA3MDAsIAotICAgIDAsIDU1NTMsIDAsIDcwODgsIDUzNTYsIDc0OTksIDY4MDA3LCA2NjU5NiwgNzQwNjYsIDAsIDEwMjYzLCA1NTU0LCAwLCAKLSAgICAxMjM0NCwgMTAzMTEsIDc4MTEzLCA2NjY1LCA5MjYyNiwgMCwgNzYxOCwgODUxNywgMTE0NTUsIDc4NDQwLCA2NDYzMiwgCi0gICAgNjQ0NDcsIDU1NTUsIDc4MDg4LCA3ODA5MywgNzgwOTEsIDAsIDQyODAzLCA2NTAzMywgOTE0MywgNjY2OCwgMTk1MDY3LCAKLSAgICA2Nzk5NSwgMTk1MDY5LCA2NTYsIDE5NTA3MSwgNjUwMzcsIDQ1NzcsIDY0NjI0LCAwLCAwLCAwLCA5ODM2NDAsIDQyNjksIAotICAgIDczODg1LCA5MTc3NzUsIDQyODQ2LCA2OTY0NCwgOTUwLCAwLCA5MjI3MywgNjY1ODAsIDExODg5NSwgNjY2ODMsIDEwNTU0LCAKLSAgICA5MTc3NzgsIDExOTEyMSwgMCwgNTA5OCwgOTE3NzcwLCAwLCAxMTkwOTksIDUwOTcsIDQ5MzUsIDk4NDgsIDEwMzgxLCAwLCAKLSAgICAxMjg4NzAsIDk4MzY5MiwgMzY1MSwgMCwgMTIwNzMwLCAxMjc1NTYsIDUxMDIsIDUxMDEsIDEwMjY5LCAxMjk4MywgODEzOCwgCi0gICAgNDUxNywgMTkzMiwgNTEwMCwgMTQzOSwgMTIwOTMsIDEyNDcsIDEwMDM0LCAxOTUwNjQsIDUwOTksIDc4MzczLCAxNDQxLCAKLSAgICA0MjA4NywgMzA2MywgNjUwLCAwLCA3ODM4LCAwLCAxOTUwNDEsIDE5NTA0MCwgMTE5MTQyLCA5MDMxLCAxMjA3OTAsIAotICAgIDEyODU4MiwgOTA3OCwgODU0NSwgNjYzNTYsIDEyODc5OSwgMCwgOTE1NCwgOTExOCwgMTI2NTQzLCAwLCAyNjc2LCAyMjc3LCAKLSAgICAwLCA3MzgxMiwgNjE5MCwgODU5OSwgMTk1MDUzLCA2OTkxOCwgMTA3OTUsIDk4NTcsIDcwMTQsIDk4NTYsIDE5NTAzMywgCi0gICAgOTI2MjAsIDEyMTI5LCAwLCA4NDgxLCAwLCA2MjAyLCAxOTUwMzUsIDEwOTIwLCAxMjgyMzcsIDUyMDMsIDE5NTAzOSwgCi0gICAgMTk1MDM4LCA1MTA4LCA1MTA3LCA2NTgxOCwgNjYwMTksIDk3NjIsIDAsIDU1NDEsIDc0NzcyLCAwLCAxMjYxMywgNTI4NCwgCi0gICAgNjY1NywgMjA3LCAxMjg4MDYsIDQyNzUsIDc0ODE5LCA4NTQsIDY4MTQ3LCA3NDM4MSwgMCwgNzg3ODYsIDUxMDMsIAotICAgIDEyNzg2MSwgNjQzNDgsIDQxMzY4LCA0Mzk3NCwgNDg4LCA2OTgxMSwgMCwgNzEzMzksIDEwMTU3LCAwLCA0MzAzNCwgCi0gICAgMTE0MzgsIDY0Njc0LCAwLCA5MjY5NCwgNjg0MzEsIDQxNzcxLCA1MTA2LCA2NjY5LCA4NTA0LCA2NTE1NCwgNjk4MTMsIAotICAgIDQxMzY3LCA1MTA1LCAxMjc1MDksIDY5NzIwLCA2NDc2LCA1MTA0LCA5ODM3NDAsIDMwNCwgMzE3NiwgMTE5MDEwLCAwLCAKLSAgICA5MzIsIDEyMDYzMywgNjU2NywgMjM4LCA2OTY1NiwgMTk1MDExLCAxOTQ1OTUsIDE5OTA1LCAxMjA1NzcsIDE5NTAxNSwgCi0gICAgNzg4NzAsIDQxMDQ0LCA2NzY0MCwgMTk0OTAyLCA0MjA1NSwgOTkxMiwgNjU5MzksIDEwNjcwLCA3NDA5MywgMTMyNzMsIDAsIAotICAgIDEyNTUyLCAxOTUwMTksIDg4MDMsIDMwOSwgNjYyMiwgODE1MSwgMTA4NTgsIDc4NzA2LCA2NzYzNiwgMCwgMTI1NjgsIDAsIAotICAgIDEyNTUzLCAxMDgxNCwgNDMyNzUsIDY5NTAsIDk3MTIsIDY4NjgwLCA0Mzk3MCwgOTgzMTk4LCA2NTE2NSwgOTI3MjUsIDAsIAotICAgIDY2NDY2LCAwLCAwLCAwLCA2NjcyNSwgNjE5MSwgMTEzNTEsIDEwNDM3LCAxMTMxNiwgNjc2MzQsIDQzNzYzLCAwLCA0MTc1NCwgCi0gICAgNjc2MzUsIDkzNzAsIDI3MjAsIDE5NDk3NSwgNjg0NjIsIDgyMzIsIDExODgxNywgMCwgMzIyMiwgMCwgMCwgMCwgNjY2NjMsIAotICAgIDAsIDAsIDEwODM0LCAwLCAwLCA2NTczMiwgOTQwOTUsIDkxNzU0NywgOTI2ODIsIDY3Njc5LCAxOTUwMjAsIDAsIDc3ODEsIAotICAgIDQxMzgzLCA2NDU2OCwgMCwgMTIwNzM4LCAxMjA3NywgMCwgNjQ1ODYsIDkxNzYyMCwgNDIzOTYsIDU1MjU1LCAzNDc1LCAKLSAgICAxMjgwMzUsIDI0NzksIDAsIDM2MzIsIDEyMDcyOCwgMTA2OTgsIDgzNzYsIDM2NDgsIDE5NDk2MCwgNzQ4NDQsIDY3NjM5LCAKLSAgICAzNjM2LCA2Nzg5NCwgMzY1MCwgODgzNywgNjUyMjksIDE4NDMsIDQyMjgzLCA0MzI1MCwgNDE1NjIsIDkxMDAsIDc0NTQ4LCAKLSAgICA5MTc2MzAsIDM2NDAsIDEyNzE5MCwgNDIzMjEsIDcyODQsIDE5NDk3NCwgMTk0OTczLCAxOTQ5NTAsIDE5NDk0OSwgCi0gICAgMTk0OTUyLCAxOTQ5NTEsIDEyNjY0OSwgMTk0OTUzLCA0MjA4MCwgMjUyOSwgMCwgMCwgMCwgNDIwODMsIDEyMDY3OCwgCi0gICAgNjgzOTgsIDE5NDk1NywgNjc2MTksIDY2MzY3LCAxOTQ5NTgsIDk2MzQsIDkyMzgwLCA5OTg4LCAwLCA0MTA2OCwgMCwgCi0gICAgNDI5NSwgNjUyNjQsIDY4MDA2LCAwLCA5MjU0NSwgMCwgNzg1LCA4MjM2LCAxMjg2NDcsIDkwMjcsIDY4MTYwLCA2NzYyMywgCi0gICAgNjQzODMsIDEyMDI2NSwgOTI1LCAxMjcxNTYsIDAsIDQxOTg1LCA0MTA3MSwgOTU4NiwgMCwgNDE5ODQsIDkyMTcsIDAsIDAsIAotICAgIDAsIDkxODYsIDIwNjcsIDQwMTYsIDk4Mzc5NCwgMCwgMzgxLCAxMjkzNiwgMCwgNDIwNzcsIDAsIDY5ODgwLCA1MTg0LCAKLSAgICA0MjA3OCwgMTk0OTQ3LCAxMDgxMCwgMTI4NTMxLCA0NTg1LCAxOTk0MywgNTg2MCwgNjc2MzMsIDAsIDAsIDgxMiwgMzYxNSwgCi0gICAgMCwgNTE3OCwgNDQwMDAsIDEyMDU0OCwgNzg4MDcsIDUxODgsIDc0Mjg3LCA2NzYyOSwgMzYwNSwgMTA2OTIsIDExNjYsIAotICAgIDY0NDI5LCA0MjYzOSwgOTI0LCAwLCA2NzYzMSwgNDI2MTYsIDEyMDY3MCwgMjQ0MiwgMTA3MDMsIDc4Nzg5LCA2NzYzMiwgCi0gICAgOTE3OTI0LCAxMjc3MSwgMTI3MzYsIDEyNzUzLCA2NjcwOCwgNzM5MzMsIDY3NjI2LCA0MjQwMSwgMCwgNjk4NzIsIAotICAgIDEyNzM3MywgNDIyODgsIDEyNzUxLCAwLCA4NTQyLCAxMzE0NSwgMTk0OTYzLCAyNDY4LCA2NjcwNiwgNDEyOTQsIDM2MjYsIAotICAgIDM4ODMsIDY0Mzg4LCA0MjQ3OSwgMCwgNDExMTcsIDAsIDkyNTgwLCAwLCAwLCA2NzYyNCwgMCwgMTI5MCwgMCwgNjU1ODUsIAotICAgIDI3MTUsIDgwNiwgNjUyMDgsIDQxODg0LCA5MTc4ODMsIDEzMTgsIDY0NzMxLCAxMjY1NzgsIDAsIDAsIDY2MzI1LCAzNDY1LCAKLSAgICAyNDA1LCA5MjQwLCAwLCAxMjc1NiwgNjUyNTksIDAsIDk4Mzc3MiwgMTI3NTIsIDU4MzMsIDE0MzIsIDAsIDQxODgzLCAKLSAgICA3MzkxMiwgOTc5OSwgMCwgNDE4ODYsIDI0ODAsIDAsIDIwNjIsIDEyNzI5MywgNjQ5NCwgNTUzNywgNzg2NTYsIDAsIAotICAgIDE5NDU4NywgMCwgMTIxMSwgMCwgMCwgMCwgMTE4ODMyLCAxMjMxOCwgMCwgMCwgNjgwMDUsIDEwNjIyLCA5ODM3NzAsIDAsIAotICAgIDc4NjU0LCA2NTY2LCA3ODY1OSwgMCwgNzM3ODAsIDExOTE5NiwgNjQ4NjQsIDAsIDc4NjYwLCAwLCA4Mjg0LCAxMzA4MSwgMCwgCi0gICAgMzU4OSwgNDIwNTEsIDQwMzUsIDY0OTIsIDkyMjM2LCA0MjY1LCA2NjQyLCAzOTc3LCA3NDE4NiwgNDE3NzgsIDgzNiwgCi0gICAgMTE5MjE2LCAyNDg4LCAwLCA0NTgyLCAwLCAwLCA0MTc3NywgMTI5MjYsIDk4MzM2OSwgNzUyOCwgMTA1NTAsIDAsIDkyNzA2LCAKLSAgICAwLCAxMDk2MSwgMCwgMTM3NCwgNjQ4NzgsIDExOTAxNCwgMCwgNDIzODksIDQxMzc0LCAyMjg2LCAwLCA3ODQ5MiwgNDEzNzcsIAotICAgIDEyNzkwOSwgMCwgNDAwLCAxMjU5NywgMTIwNTg2LCAwLCAwLCA2NjYxLCA5ODMxNDUsIDY0ODI3LCAwLCA3MzgxNywgMzkwLCAKLSAgICAwLCA3MTMwMSwgOTgzODUzLCAzNDczLCA3NzE4LCAwLCAwLCAwLCA1NTI4NSwgMCwgMCwgMCwgMTE5NjksIDk4MzM4MiwgCi0gICAgMTI3ODQxLCA2MzY1LCAxODg3LCA2NzYzLCA5ODMzNjIsIDgwODAsIDcwMDYsIDAsIDk4MzM2MywgNjc1NywgNjQzNTEsIAotICAgIDE1NDQsIDAsIDY3NjYsIDY0Njc3LCAxMjA3MTYsIDk4MzM2NCwgNjE0NiwgMCwgNzcxLCA5ODMzNjUsIDAsIDEyODEyLCAKLSAgICAxMzE2OCwgNDIyNzIsIDEyMjAwLCA5MTc5MjcsIDc5MDQsIDAsIDk1MywgMTI5MTcsIDExOTU2MCwgMTIzMDAsIDAsIAotICAgIDExNDkxLCA5NzI0LCAxMDM0MSwgOTgzNzY0LCA5NTI0LCA3NDkwLCAxMTM4OSwgNzQ4OSwgMzM3OSwgMCwgNzQ4NywgMCwgCi0gICAgNDcxLCA3NDg0LCA3NDgyLCA2NzUzLCA3NDgwLCA1NzY0LCA3NDc4LCA3NDc3LCA2NTAxLCA3NDc1LCA2OTE4LCA3NDczLCAKLSAgICA3NDcyLCAyNDc0LCA3NDcwLCA3NDY4LCAxMDIzMiwgMTA2MTUsIDEwMjEzLCAxMjcyODgsIDkyMzU3LCAxMDA0OSwgMTE4MzQsIAotICAgIDM1NDQsIDAsIDYwMTcsIDY1MzExLCAxMjc0ODEsIDEyMDIxNiwgMTMzMDYsIDEwNTMzLCA3ODcwLCA3Mzk0OSwgNzYyNSwgMCwgCi0gICAgMTIwNTQ0LCAwLCAwLCA5MjY2MCwgMCwgMCwgMCwgMTk5NjEsIDI0NzIsIDQyNjY1LCA5MjM0MSwgMCwgMjEzOSwgNDI1NiwgCi0gICAgMTIwNzc2LCA3NDM4MCwgMCwgNDI2NzUsIDQyNjU4LCAxMjg0NSwgMCwgMCwgNjUxMzgsIDExOTM1NSwgNjc4NjIsIDAsIAotICAgIDY1NjcxLCA3MDgzLCAxMjAwMDgsIDgwNjYsIDc2NzgsIDc0ODY1LCAwLCAwLCAwLCAwLCA3MTg2LCAwLCAxMjA1NTUsIDAsIAotICAgIDQ0NSwgMTIwNTY2LCAxMjgzMDgsIDAsIDAsIDgzMzAsIDAsIDAsIDQyNzk3LCA5ODMxNTAsIDEyMDIxNSwgMCwgMzkwMiwgMCwgCi0gICAgMTc3MCwgMCwgMTI4ODY2LCAxNTYwLCAxMjAyMDksIDE5NDk3MiwgNDU4NCwgNzM4NDMsIDAsIDExNzEyLCAxMDg2NiwgCi0gICAgMTE4OTI4LCAxMTE4LCA3MTMzNCwgMCwgMCwgMTA4MSwgNzQzNiwgNjg0MjAsIDcyNTIsIDAsIDU5OTYsIDY5OTIxLCA0OTAzLCAKLSAgICAwLCA0MTM4NiwgNTE2MiwgMTE5MTg5LCAxMzMwLCAwLCA3MTM5LCAwLCAxMjA0NywgNDEzODQsIDAsIDAsIDE4NDgsIDQzMzQsIAotICAgIDYzMjQsIDQxOTc1LCA2NDc3NywgMTA2NzQsIDEyMzA4LCAxMjE4NiwgMCwgMCwgOTgzNzMyLCAxMjcxNSwgNjgwMDIsIAotICAgIDk4MzQ3MSwgMTI2NjMwLCAyMDE4LCA2NjY3MiwgNDE5NzksIDY2Njg1LCAxMTkxNTcsIDY4MDAwLCA5MjQ2NCwgMCwgCi0gICAgMTI2OTg0LCA2ODAwMSwgOTMzNCwgOTI3MDUsIDkyMzE1LCA3MDEwMSwgNzk3NSwgMCwgNzc5NTcsIDAsIDY2NjIxLCA0ODg0LCAKLSAgICA2NjU5NywgNjk3MzIsIDAsIDAsIDYzMTMsIDY1NTEzLCA2OTg1NywgMCwgMCwgMCwgMjM0NSwgNDM2OTcsIDQ2MywgMCwgMCwgCi0gICAgMTE5NjA3LCAzMTE3LCA1NDYwLCAwLCAwLCA5ODMzNzksIDAsIDQyMjc5LCAxOTQ1NzcsIDAsIDc4NDE1LCAwLCAxOTUwMDgsIAotICAgIDk4MzM3NiwgMTMyNDgsIDAsIDAsIDAsIDAsIDAsIDAsIDU2NjMsIDAsIDAsIDAsIDAsIDI0ODIsIDE0NzEsIDAsIDAsIAotICAgIDQyMjQ3LCAxMjM3OCwgNzM5MjUsIDY5NjY0LCAwLCAxMjM3NCwgMCwgMCwgMCwgOTgzNjg1LCAyNDYwLCAwLCAxMTk0NCwgCi0gICAgMTIzNzYsIDEyNzg2OCwgNjQ2NzksIDAsIDEyMzgwLCAxMDU1NywgNjQ0NzMsIDU4NzAsIDAsIDIwMjQsIDEyNzE4MCwgMCwgCi0gICAgMCwgNTM5LCAwLCAxMjc3NjUsIDk0MDUyLCAzODUzLCA2NTE4MCwgMTI3OTIzLCAxMjA3OTYsIDEyMDI0NSwgOTIzMjQsIDAsIAotICAgIDg2NTksIDAsIDEyNDc0LCA5MjU3OSwgOTUwMywgMTk0OTY5LCAyNDc4LCAwLCA0MTYyLCAwLCA0MjYwLCAxMjk1MywgCi0gICAgNjk2MzMsIDEyMDA4OSwgMTI0NzAsIDAsIDc0MTg5LCAyNzQyLCAxMjQ3NiwgMTE3OTgsIDEwOTQ2LCAxMjczMTAsIDUwMDAsIAotICAgIDAsIDk4MzU3OSwgMCwgNjk2NzIsIDgyMTMsIDc0MDE3LCA3NzcxLCA2MTYxLCA2ODAxOCwgNjcwOSwgMCwgNzg4ODUsIAotICAgIDk4MzY5OSwgMTI3OTcxLCAxMjA1ODIsIDc4NTQ3LCAwLCAxMDMwMSwgMTAzMzMsIDEwMzk3LCAwLCAwLCA3Mzc5MSwgMCwgMCwgCi0gICAgMCwgMCwgMTE5MTIzLCA0MDE0LCAxMjg0MiwgNzM5NTIsIDEyMDE1LCAxMjcyOTAsIDgyNzUsIDM4OTMsIDk4MzI1NiwgMCwgCi0gICAgMTIyMTAsIDcyMjEsIDQyMTQ3LCAwLCA3NDU1MCwgNzQ0NjUsIDY0NzQ3LCAxMTg4NDEsIDAsIDEyNTE2LCA0NDQ0LCAwLCAKLSAgICA5MjI3MSwgNzQ1MzcsIDEwODkyLCA4MjMxLCAwLCA2NDczLCA0MTk2OCwgNzgzODgsIDQxOTczLCAzNTkxLCA0MTk2OSwgMCwgCi0gICAgMjQ1MywgMTI4NTQ5LCA5MjY2NiwgNjQ3MDUsIDAsIDAsIDEwMzQ5LCAxMDQxMywgNDM1OTEsIDQxOTYyLCAzMjAyLCAKLSAgICA3NDM1MywgMCwgODMxNiwgMCwgMCwgOTQwNjAsIDY4NywgMCwgMCwgMCwgMTg0MCwgMCwgNjg2NzEsIDExOTgwOSwgNDg4MywgCi0gICAgMjg1LCA0NzIzLCA3MDA5OSwgOTI2OTIsIDQ0NTksIDc0NTc3LCA0MjkyMSwgNDE3MjAsIDExMDg5LCAyNDAsIDE5OTA2LCAwLCAKLSAgICA0MjMyMywgMCwgOTc0MywgMTIwMjMyLCAxMzEzNCwgMTI2NTM1LCAwLCAwLCAwLCAwLCA0MjYzNCwgOTgzMzM1LCA0MzQzNywgCi0gICAgMzA4MSwgMTE0NjMsIDEyMDE1NCwgMCwgMCwgMTA0NDUsIDAsIDAsIDY2NzE3LCAyNjE0LCA5MTI1LCAxMTkwMjMsIDE3MjksIAotICAgIDAsIDEyMDIzNiwgNjUyMjEsIDYzODgzLCA0MzMzNCwgNjQ4NTIsIDAsIDY1MTk0LCA2NjIwMSwgMCwgNjY1NzgsIDUwMDEsIAotICAgIDQxODc5LCA3NDQyNywgNDEyMSwgNTAwMywgODg0LCA2NjcwMCwgNjM4NzksIDQ5NDMsIDUxNTAsIDczODg5LCA3NDE4MiwgCi0gICAgMTI3OTE1LCA2NDMsIDMwODYsIDAsIDQyNDQ4LCA0MjI5OSwgNTgsIDAsIDkxNzk1MiwgMTIwMDgzLCA2Mzg3MywgODQ5MSwgCi0gICAgMCwgMCwgMCwgNDUzMCwgNDI0MDksIDcxMjYsIDE5NDU3NSwgMjcyMSwgMTIwMDc0LCAxMTkwOTYsIDE5OTI5LCAwLCAKLSAgICAxOTQ1NzQsIDAsIDQyNDIsIDQyNjQsIDEyMDA3NywgMTIwNTMwLCA2NjE3OSwgNDI0MTIsIDY1OTQxLCAxMzExNCwgNjQ1MjIsIAotICAgIDEwNzQwLCAzMDk0LCAwLCA5NzU0LCAxMTkxMDIsIDQ0MzcsIDczOTQ4LCAxMjcwNzQsIDk4MzIzMiwgNTUyODAsIDQyMTc0LCAKLSAgICAxOTQ5MjUsIDQyNDMwLCAwLCAwLCA0MjM1NSwgNjYwMjYsIDQzMDYsIDQxMzgwLCA2ODQzMiwgOTI1ODYsIDAsIDY2NjY3LCAKLSAgICAxMjczMDksIDAsIDEyNjUyMSwgNDIyMDAsIDQyNTY2LCAwLCAwLCA1MDg4LCA2OTQ4LCAwLCA4NTI0LCAwLCAwLCAxMjM4NSwgCi0gICAgMCwgMCwgNjk2NDYsIDEzODYsIDY0NTgwLCAxMTQ4MCwgNjExNiwgNjUwMzksIDY1MDM4LCAxMjM5MiwgNjUwMzYsIDgwNjQsIAotICAgIDAsIDEyMTAxLCA1ODIyLCAxMTkwMDQsIDIwODAsIDcxMCwgNzc5OTksIDExNjYzLCAxNjY2LCA0MjA5MSwgMTE5NjU3LCAKLSAgICAxMjM4MywgNDM2NzEsIDQyMDkyLCA2ODQxOCwgNDI4OSwgMCwgNjM4OTYsIDEyMDYxLCA0MjA5NiwgNDM2MjEsIDMzNjIsIAotICAgIDEyMzc3LCA5ODM4MjMsIDk4MzgyNSwgNjg0NDksIDc0NjEsIDczOTAxLCAxMjQ0LCAzMzEsIDczNzg2LCAxMjY4MywgCi0gICAgMTA2NjIsIDAsIDgxMTIsIDAsIDY1ODUyLCAwLCAxMjM3OSwgMTk0ODc3LCAxMjA4MTgsIDQxOTY0LCA0MjIwOCwgNjM4NDMsIAotICAgIDIwODQsIDQxOTY1LCAwLCA2NTg2NiwgNDMyNywgMCwgNjM4NDAsIDc4NTQ5LCA0MTIyMCwgMTMwMzIsIDAsIDU4NCwgCi0gICAgMTI5MzMsIDQzMTc3LCAxMjM3MywgNjk4NTUsIDEzMDAwLCAxMzUxLCAyOTM1LCA4Njk4LCAxMjY2NSwgMCwgMTkzMCwgMCwgCi0gICAgNzgyMjksIDEyNDI3LCA2NjUxNCwgNjk4NTksIDEzMDMxLCAwLCA2MzkwMSwgMCwgMzY1NywgMTI4NTcyLCA2NTIwMiwgCi0gICAgNjAwMCwgMTE5MjA2LCAxMjQyNiwgMTI3MTgxLCAwLCA0MTc0MCwgMTI0MjgsIDQxMjgzLCA0MTkxNiwgMTE5MjEwLCAwLCAwLCAKLSAgICAxMjQyOSwgNjcyNywgMCwgNzU2MiwgMCwgNTE3MCwgMCwgNDE3NTUsIDY3NiwgMCwgNjY3MDQsIDY2NjY0LCA5OTc4LCAKLSAgICA2NjQ5MSwgMzUzNiwgMCwgOTc1MiwgOTIzOTcsIDYxNjIsIDAsIDY5MjI4LCAxMDExMywgNDE4MjksIDY1ODg2LCA1MTU5LCAKLSAgICAxMjQyMiwgNDE4MzIsIDQzOSwgNDMwNzcsIDAsIDQyMjA3LCA3NDU0OSwgMTE3OTYsIDQwOTcwLCA0MTgzMCwgMCwgCi0gICAgOTE3Nzk5LCA4MzA4LCA5MTc3OTcsIDkxNzc5NiwgMCwgNjc4NjQsIDkxNzgwMSwgOTE3ODAwLCAxMjMzNiwgNDEzNSwgCi0gICAgNjk4MDUsIDM0MSwgMjcyNywgNDEyOSwgMzUzOSwgMCwgNjM4NjEsIDAsIDc5MTMsIDAsIDYzODU5LCA0MTMxLCA2Mzg2OCwgCi0gICAgMCwgNjM4NjcsIDQxMzMsIDExMzcxLCAyMTAsIDQ2MDAsIDAsIDc0NTYwLCA0MTM3LCA4MDgyLCA3ODUwNiwgMTE5MDYyLCAKLSAgICA3ODUwNCwgNjcwNCwgNDU5MSwgMTI4MDI5LCAwLCAwLCA5NjgwLCAwLCAxMjA2MjMsIDU2MSwgMTIxNTksIDE5NSwgNzg1MDgsIAotICAgIDQxNTAxLCAwLCA0MjAzMSwgNTcxOSwgNzE3MiwgNDI2ODcsIDgzNjgsIDAsIDQxNDk5LCAwLCAwLCA0MjI0MiwgNDE0OTgsIAotICAgIDkxNzc5NCwgNDIwMjUsIDc4NTY1LCA2NTgwNSwgNDI0NjMsIDAsIDI5MjQsIDAsIDEyMDUxMCwgMCwgMCwgMTE5MjEzLCAKLSAgICA3Mzk0MSwgMCwgNDIzMzAsIDkxNzc4NCwgMzk2OSwgMCwgMCwgNzE2OSwgMTk5MiwgOTY1MiwgNzM5NzcsIDcyNDYsIAotICAgIDQyMDg2LCAxMjY2MTUsIDIyMTksIDAsIDAsIDEyODgwMSwgMTk0ODM3LCAwLCAzMjcsIDAsIDkwNDIsIDkxNzc3NywgCi0gICAgOTE3Nzc2LCA2NTE0OCwgMTI0MzMsIDkxNzc4MSwgMTI3Mjc2LCA5MTc3NzksIDEyNDMxLCA4NjY4LCAxMjQzNCwgOTgzODI2LCAKLSAgICA5MTc3ODIsIDU5OTksIDAsIDc3MTIsIDEyNDMyLCAxMjgyNDMsIDQzNjUzLCAxNzI2LCAxMDE1LCAwLCA4MjEyLCAwLCAKLSAgICAxMjgwMTQsIDQyNDIzLCAxMTkwNjYsIDAsIDEyODEwOCwgNjY3MDksIDAsIDg4MTEsIDkyNywgMCwgMCwgMTI0MzYsIAotICAgIDk4MzIzOSwgNDIwMjEsIDAsIDAsIDEyOTksIDEyMjQwLCA0MjM1MCwgNjUxNDMsIDAsIDE5NTAxNiwgMCwgNzgxOTcsIAotICAgIDExMzQ4LCAwLCA3ODAzNywgOTE5NCwgOTgzMTg0LCAwLCAxOTkxNCwgMTIxNzksIDk4MzgwMywgMjI5NiwgMTk0OTIzLCAKLSAgICA2MzgzNiwgNjM4MzIsIDkxNzc3MywgMTA5NjcsIDYzODE2LCAyNTk0LCAzNDQ0LCA2MzgxNywgNjQ2NTEsIDAsIDQxNTAzLCAKLSAgICAxMjc0NzgsIDExMjY1LCAwLCAxMjA3NTYsIDE5NDkyMiwgMCwgNTY2NCwgMzk3MiwgMCwgMCwgMCwgMTI4NTA4LCAxMjQxNiwgCi0gICAgOTE3NzY0LCAxMTk2MDgsIDEwODE2LCA5MTc3NjksIDkxNzc2OCwgMTI0MTgsIDc0MTExLCAzODgyLCA4NTMyLCA5MTc3NzEsIAotICAgIDE1NzMsIDEyODY0OCwgMTE5ODQ3LCA0NTk2LCA2NjMzOSwgMTI0MTcsIDY2MDAxLCA2NTM0MywgMTI2NDkxLCAxMjQxNCwgCi0gICAgODI4NywgNjgyMTksIDE5NTAxNywgNjgxMDgsIDExNDMsIDExOTE2OSwgMTE5ODQ2LCAxMjQxNSwgNjYyNiwgNDI3NjMsIDAsIAotICAgIDExODg4NCwgOTAyMSwgMTIwNzgzLCAwLCAxMTcyNCwgMCwgMCwgMTI3MTA0LCAxMjY2MTksIDAsIDAsIDgwMjcsIDEwOTk3LCAKLSAgICA5MTcxLCAxMjc0MSwgMTE0MDAsIDcxMzA1LCAxOTQ3OTksIDAsIDEyODIzOSwgMCwgMTI4ODgxLCAxMTk2MDQsIDEyNzUyMywgCi0gICAgMTIwMTkwLCAxOTQ3NzMsIDY3NjA4LCAxMjgyMTQsIDQyMzY4LCAwLCA3NzE1LCAzODgxLCA0MTQ4NywgMTIxMTgsIDQyNTE0LCAKLSAgICA2ODY1MSwgMCwgOTgzODg2LCAzMDA5LCA0MTQ3NiwgNDE0ODksIDY5ODI1LCAzMDA3LCAxNDQ4LCAzMDE4LCAxOTQ4MDksIAotICAgIDM4ODksIDg1MjEsIDUwODMsIDUwODIsIDExOTg1OSwgMTIwMTg0LCA4NTE5LCA5ODMyMzUsIDMwMTQsIDUwODEsIDY1ODUzLCAKLSAgICAxMjA3MTUsIDAsIDY4MDE0LCA2OTk1MSwgNTA3OSwgNjQ4MDIsIDQyMjEwLCA0NTk3LCA2NTUzMiwgMTE4MjgsIDEyMDE4NSwgCi0gICAgMTIzNzEsIDAsIDg0MDcsIDAsIDEwODA1LCA4NTE4LCAxMDc3OSwgMTIwMTg4LCA3MTMwMywgOTgzOTI0LCAxMjM2NywgCi0gICAgNDIxNzAsIDAsIDkyNTU3LCA2MjksIDE5MjQsIDAsIDEyMDM3LCA3NDM2NiwgNTk4NywgODQ2MiwgODAwNSwgMTIzNjUsIAotICAgIDYzOTMzLCA2OTczNSwgMTIwODE1LCAxMjM2OSwgMTA2NDksIDY3OTgxLCA1MDc3LCAxMjAxNzQsIDEwODgwLCA2MzkyNywgCi0gICAgNTA3NSwgOTE3ODgxLCAwLCA2NTA3NSwgMCwgMTEwMDcsIDk4MzY5NiwgNjY2NTksIDkyNjA3LCAwLCA2NjY4NCwgMCwgCi0gICAgMzQzNCwgNDk1NCwgMTkwNCwgMCwgNTI2NiwgMTI2OTgwLCA1MjcyLCAxMDQ5OSwgNDUwNywgOTU3OCwgNjM5MjMsIAotICAgIDEyMDE3NywgNzk3OSwgMCwgOTgzMSwgMCwgMTk0OTI2LCA0NjEsIDk4MDMsIDAsIDQ1MDQsIDE1MDUsIDAsIDYzMjUsIAotICAgIDUyNzYsIDQzMDIxLCAxMjA0ODgsIDAsIDU1MjM2LCAwLCA2NjQ2MSwgNTE3NywgNDEzMjQsIDEyMDU1LCA4NzIyLCAwLCAKLSAgICA0MTMyNywgMCwgNjY2OTUsIDQxMTQsIDQwOSwgNDM4MywgODkwMCwgODk0OCwgNDEzMjUsIDAsIDcyMSwgMTAxODIsIDkxMDgsIAotICAgIDcxMzExLCAwLCAxMTkxODUsIDQyMjI5LCAxOTQ5MTIsIDAsIDU5OTgsIDAsIDQyMzUzLCA3NDgyNSwgMCwgMTI1ODcsIAotICAgIDk0MTA0LCA3ODU3MSwgMCwgNzEzMjgsIDE5NDU2MiwgNDE1NzYsIDQyMjE1LCA3ODU3MCwgMTE5MjA3LCAwLCA4NTc4LCAKLSAgICA1OTk1LCA3NTczLCA0MTU3NSwgNzQ3ODksIDc0NzUyLCA2Mzk0NCwgNjM5NDksIDY0NzY3LCAyNjcwLCA0MTY3LCAxOTQ3OTYsIAotICAgIDExNzIzLCAwLCA3NDEyMCwgMCwgNjUwNzYsIDkzOCwgNDM0MTQsIDczODU0LCAxMTczNywgOTcyMSwgMCwgMCwgMCwgCi0gICAgMTE3NDIsIDI0MTksIDAsIDExNDkzLCAxMjMzNCwgMTk0OTEzLCA0MTUzLCAxMjMwMiwgMTA3OTMsIDUyNTAsIDEyNDA3LCAKLSAgICAxMTk3OCwgNDQwNCwgOTE4OSwgMTI0MDEsIDQyMDA3LCA1Nzc1LCA2NzU5LCA2NTgwNiwgNDM5OTcsIDAsIDQyMDAyLCAKLSAgICAxMjQwNCwgOTgzNTUzLCAwLCA0OTQwLCAxMjQxMCwgNzY4MywgMTE2NywgNzM3MjksIDQ5ODMsIDEyMDUwNywgODYxLCAwLCAKLSAgICAwLCAwLCAwLCA0Mzc1NywgNDMzNzAsIDAsIDAsIDExOTU2LCAwLCAwLCAwLCA5NjE2LCA2NjMxLCAwLCAxMjgxNiwgNDM3NTksIAotICAgIDQyMjE4LCAxMjcxMCwgNjg2NzQsIDEyNzIxLCA0MTAxLCA2NjE4NSwgMCwgNTk5MiwgNzYxNiwgMTk1MDQ0LCAwLCAxMjU3NywgCi0gICAgMCwgOTgzODc1LCA4NTMsIDQyNjkzLCAxOTUwMTQsIDAsIDk4MzYzOCwgNTAxNiwgNDM1MzUsIDYzODkzLCA0MjgzNSwgCi0gICAgOTQ5MSwgOTE3OTEzLCAwLCA5MTc5MTQsIDAsIDEyNzEyLCA3MTA1LCAxMjc4MDcsIDY1MDYwLCAxMjA3OTcsIDk5MDAsIAotICAgIDc3NTAsIDAsIDE5NDkxOSwgMCwgMTI3ODMwLCAwLCA2NDc3OCwgMTI1ODUsIDEwNTY1LCAxMjgxNTEsIDEyMTc3LCAwLCAwLCAKLSAgICAwLCA3NzgyNCwgMCwgNDkwMCwgMTI3ODc0LCAxMjg3OCwgOTI2MzAsIDg5ODQsIDQxMTksIDc0NzY4LCA4OTcxLCA3ODU5MywgCi0gICAgNDMxMTMsIDk3MDIsIDc4NTk0LCAxMTAyNSwgOTI0NSwgMTMwNDgsIDQ5MjcsIDQxMzgsIDc0MTg1LCA5MjQ4MSwgOTI3MTAsIAotICAgIDEyMzk3LCA3NzgyNywgMCwgMTMwNTQsIDEyMzk0LCAwLCAwLCAwLCAxMzA1MywgMCwgMzk0OCwgMTA3ODEsIDE1NDYsIDAsIAotICAgIDUwMTAsIDE2ODAsIDEwNTA3LCA3ODU5MCwgNzg1ODMsIDAsIDAsIDAsIDE5NDkxNSwgNzI2NywgMCwgNzQ4MzMsIDEyODE4MSwgCi0gICAgNTk5MywgMjgxOSwgMCwgMTI3MDYsIDc3ODQwLCAxODkzLCA3MjY2LCA2MzkxNSwgNzI2NCwgNzI2NSwgMCwgMTM2MywgMCwgCi0gICAgNjM5OTcsIDYzOTEwLCA2Mzk5NiwgMzA3NywgMCwgMCwgMTUxMiwgNjk5MjksIDEyNTg5LCA0MTQ3OSwgMTI4MzEzLCAwLCAKLSAgICA0MzMzOSwgMCwgOTgzNiwgMTIwNzI3LCAwLCA0MTQ4MSwgNDMzMzUsIDc4MzIsIDQyMzQzLCAzMDkwLCA0MzMzNywgODE3LCAKLSAgICAxNjY0LCAxODUwLCAxMjg4NDEsIDMwNzksIDExMzQwLCA0MjQwOCwgNDI0NDcsIDEyNzE0MCwgMTIwMDIwLCA0MjMwNywgCi0gICAgMTIzODYsIDQyMzA0LCA5MTc1NTUsIDAsIDEyMzg5LCAwLCA5MjM2NiwgNDE5OTYsIDExNTI2LCA2Mzk4NSwgNTg2NCwgCi0gICAgMTE0NywgNjM5OTIsIDQyODg3LCAxOTg3LCA5MjcxOCwgNTQ4MCwgNzg1OCwgMTE2NTMsIDQxMTYsIDEyMzkxLCA2NjE5MywgCi0gICAgMCwgNDkzOSwgMTIzODQsIDAsIDAsIDQxNjg2LCA2MzkwNSwgMTE5NjAxLCAxOTQ2ODgsIDk4MzE5MCwgMCwgMTI2NDksIDAsIAotICAgIDAsIDgyNDcsIDUwNywgOTEsIDIwNDIsIDEyMDc3NSwgNDM2NDMsIDE5NDY4OSwgNjYwMjgsIDEwMDM2LCA0MTg0NCwgCi0gICAgMTE5ODEzLCA3NzQsIDExOTgyOSwgMCwgMTE5ODE1LCA1OTk0LCAxMjUzOSwgMCwgNzgzNzUsIDEyMDU5NywgMTE5ODMzLCAKLSAgICA5ODMxMDUsIDExOTYwMCwgMCwgMCwgNzcxOSwgNjAyNiwgMjQ4NiwgMTI4MzEyLCAxMTk4MDgsIDE2MiwgMCwgNjUyMTksIAotICAgIDQxMDczLCA5Njg3LCA0MTY4MSwgNjMwNCwgMTE5ODEyLCA2NjE5NiwgMTk0ODgxLCA1MjYyLCAwLCA1NTIzMywgMTI2ODEsIAotICAgIDQyMzc5LCAwLCA3NTM0LCAxMjIxOSwgMCwgMTI3NTI4LCA0MjgxMCwgMTA0OTIsIDAsIDk4MzY1MiwgMCwgNDMxMTksIDAsIAotICAgIDEyMDc1MywgMTI0MDMsIDI1MDAsIDE5NTAxMywgMCwgNDg5OSwgMTI3MjksIDAsIDAsIDc0MTEzLCAyMzQzLCA0MTAzLCAKLSAgICAxOTk0NiwgNzQxMTIsIDc3ODUxLCAxMzExMiwgMCwgMTk1MDEyLCAxMjg1OSwgNzAwODcsIDEyMDE0OCwgNjYzNjksIDU4NjEsIAotICAgIDEyNzc1OCwgMTE5OTksIDEyNDAwLCAwLCA5ODM4MzAsIDEyNjQ1LCA1MTQ2LCAxMTMyMCwgNjg0MTAsIDY3NDgsIDY1MDQwLCAKLSAgICAwLCA2NDE4NCwgMTI5NzQsIDY0MTgzLCA2NzYxMywgMTIwNjQ1LCA1MTQ3LCAwLCAwLCA3NDUyNCwgMCwgMTkyOCwgMCwgCi0gICAgNjc2NDksIDU5OTEsIDM0NDUsIDY3NjA5LCA0OTc2LCA2NDE3NiwgMCwgNjc2MTAsIDgyNDEsIDAsIDc3ODY4LCA0MjA2LCAwLCAKLSAgICAwLCAwLCAxMjgyOTgsIDAsIDEwMTM4LCAwLCAwLCA4ODk3LCAxMjAyMzQsIDAsIDgzNTcsIDQxMjQsIDc3ODYyLCA2NTgzNiwgCi0gICAgMTIwNjQxLCAxMjc5MjYsIDc3ODU5LCAwLCAwLCAxMTIzLCA5NjMsIDQxNTUzLCAxMDEyMCwgMTI0MDUsIDEyMDE1MCwgCi0gICAgOTI2NjQsIDM5OCwgMTMyNzgsIDk3MjMsIDYzNjYsIDEyMDMxMSwgNzk0NSwgMCwgNDQwMiwgOTk3MCwgMTI0MDIsIAotICAgIDk4MzEzNiwgNDIzOTIsIDEzMDUsIDEyNDA4LCAwLCA0NDAwNywgMCwgMCwgNDE0NjQsIDEyNDExLCAxMjk2OSwgMTIwODI0LCAKLSAgICA0MTQ2NSwgOTgzNTY1LCA4NTI4LCAxNTc1LCAwLCA2Mzk1NSwgMTY1LCAzMDI0LCA0MTQ2NywgMTE5MTYzLCAwLCA5MDkzLCAKLSAgICAwLCA5MTQ3LCAxMjg3ODcsIDYzOTU4LCAwLCA5MTQ4LCA5NjkyLCA0MDk2LCA1MywgNzM3NzYsIDY3NTAsIDE5NTAxOCwgMCwgCi0gICAgOTU5NCwgMCwgMCwgNDM1MjcsIDAsIDcyNywgMTk0NzAzLCAxOTUwMjMsIDU4MDUsIDAsIDY3MjYsIDAsIDQyMTc2LCAKLSAgICAxMjM3MCwgMTE2NTUsIDExOTA5NSwgMTA1OTEsIDIyODAsIDAsIDEyMzcyLCAxMjA2NDIsIDEyMDMwNywgMCwgOTIzNDMsIDAsIAotICAgIDEyMzY2LCAxMDk2MywgNjA2NiwgMTMyOSwgMCwgMzA1MiwgOTIyMCwgMCwgNjQ0NzgsIDE5NDcwMSwgMTA4MDMsIDQxMzIsIAotICAgIDEyMDMwNiwgNjg0NzQsIDkyNDczLCAwLCA5ODMzMDUsIDc0ODM3LCAxMjAxNTUsIDE0OTksIDAsIDgwNTUsIDQyNzQwLCAKLSAgICA2Mzk2NSwgMCwgNjM5NjIsIDc0MDQyLCA4OTI0LCA0MzEyMywgNTk4OCwgMzY2MCwgNjM5NjksIDExNzgxLCA0MjcxOCwgCi0gICAgODc4OCwgMTM1NywgNjQ4NTEsIDY1NzQzLCAwLCA4Nzc0LCAwLCAxMjcwODYsIDk5NDEsIDEyMDE3MiwgMCwgMTkzMywgCi0gICAgNjk2NTUsIDk1NjQsIDAsIDkyNDM1LCA3Mzg2NiwgMCwgMCwgMjQ4NywgNjc2MTQsIDMxMjEsIDE4MDQsIDMzMTEsIDY3NjE1LCAKLSAgICA3MDA4MSwgNzgzMDIsIDEyMjIwLCA2NzYxNiwgMTIwNTk4LCAxMjc0NzUsIDAsIDY4MjAwLCA2Njc1LCAxMjgxNDQsIDAsIAotICAgIDY3NTkyLCAxMjA2ODUsIDAsIDY0NzcxLCAxMTk4LCA5MTMyLCAwLCA2NDYxOSwgNTEwLCA2NDY2MywgMCwgMCwgNDU2MSwgCi0gICAgMjEwMSwgMTM5OCwgMCwgOTI1NTQsIDc0MDM0LCA0MTU2OSwgOTI2ODQsIDExNDA2LCA4MTY3LCAxMjEyNywgMCwgODQwLCAwLCAKLSAgICAxMjY1MTgsIDcxMDEsIDY5NjcsIDAsIDE5NDg5OCwgOTc5NiwgMCwgMzMzLCA2OTg5MSwgMCwgODE0NCwgMjExNywgMCwgCi0gICAgOTgzNTk1LCAxMjQwNiwgMCwgMTk5MzEsIDExOTA4OSwgNjY3OCwgNzc2OSwgMCwgMTI2MjEsIDAsIDEyNzM2NiwgMTAyMjcsIAotICAgIDQ3NjQsIDQzMTAxLCA5OTgxLCAwLCA0MDk4NiwgNDEyNywgNjY0ODcsIDAsIDQyMjAyLCAxMjc1NCwgMTk1MDIyLCAwLCAwLCAKLSAgICA5NDA5NywgNjc1OTQsIDIwNDgsIDEyOTQ0LCA0MDUwLCA2NzU5NSwgOTE3OTY3LCA0MzEwMiwgMTA1ODEsIDEyOTg1LCAKLSAgICA0NTMzLCAxOTUwMjEsIDc0MDAzLCA2NDkwLCAwLCAxMjAzOCwgMCwgMCwgMTIwNzA0LCA2NTQ2MSwgOTc5OCwgNjk3MDQsIDAsIAotICAgIDE5NDgsIDY5ODQxLCAwLCA5NTIsIDEyODIzNSwgMCwgMCwgMTIwODAyLCA2NDQ5LCA5NDk0LCAxMjAzMTMsIDAsIDQzMDk4LCAKLSAgICA0ODQzLCA4MTQyLCA2NDE2MCwgNDA5OCwgNjQxNzAsIDAsIDAsIDM0MzYsIDExOTk3MywgMCwgMTI4MTcsIDY3NTk3LCAKLSAgICA2Njc2LCAzOTMwLCA0MjYxNSwgMCwgMCwgNjc1OTgsIDAsIDAsIDAsIDY1NTkxLCA0MTU4MSwgNjU5MTYsIDE0NTMsIDAsIDAsIAotICAgIDAsIDg1MDAsIDQyMjIyLCAxMjAxNDIsIDczNzQzLCAxMjA0MDAsIDQzMTcsIDExNTQzLCA2NzY3NiwgNjQ2NzYsIDAsIDAsIAotICAgIDY3NjA2LCAxMTkwODMsIDAsIDQyMjE3LCAxMzEwMiwgMCwgNjYwMDMsIDY2NzIsIDAsIDAsIDAsIDk4MzczOCwgNjM4NDEsIAotICAgIDk2MTMsIDkwMDEsIDQ1MjYsIDExMjc0LCA2NzYwMSwgNjQ1MjAsIDY0MjEwLCA2NjY0LCA3ODcwNCwgNDIwNTYsIDEwMjI4LCAKLSAgICA2NDk1NywgMTEyODEsIDAsIDM4MDcsIDE0NjksIDY2NjQwLCA2NTM4MSwgNDIxOTcsIDQ5ODgsIDQyMzcyLCAwLCA5NTk4LCAKLSAgICA5MDQsIDM1MiwgNDIyMjUsIDE0NTEsIDgwNjEsIDg0NTMsIDQxMzQsIDAsIDc0ODQ3LCA2NjU3NiwgMTI3OTE2LCAwLCAKLSAgICAxMDUyMCwgODU3NSwgOTk2MCwgMTIwMSwgMTI3Mjg5LCAxMjg0NiwgMTI3MjkxLCAxMjcyOTIsIDExOTE5LCA2NDk2MiwgCi0gICAgMTI3Mjg3LCA0MzczOSwgMTI3MjgxLCA4NTExLCA5NDYwLCA4MjMsIDExNTg3LCAxMjMwNSwgMCwgNjQ2OTUsIDEyNzMwNSwgCi0gICAgMTIzODcsIDEyNTMsIDEzMTgzLCA2NTc2NiwgNTAwLCA0Mjc4MywgNjU3NjUsIDY0MjA4LCA2NDM2OSwgNjU3NjAsIDY1NzYxLCAKLSAgICAxMTk1ODUsIDExNjA2LCA2NDc4NCwgMTE3MDIsIDY2NDk4LCA5ODIxLCA2NDMwNCwgMCwgNTE1MiwgMTEwNDgsIDc1MzMsIAotICAgIDY4MzY2LCA2NDQxMCwgOTIzMDUsIDAsIDQzMjMsIDEyMDA2MiwgOTI2NjksIDcxMzMyLCAxMjcwNTIsIDQyNTg3LCA0MjIxNCwgCi0gICAgNDEzOTQsIDAsIDQ3NjMsIDQxMTIsIDExODkzNSwgMCwgNTI2MCwgNDMxNDMsIDk0MDM4LCAzMjYsIDEyMDEzMSwgNjg0MjMsIAotICAgIDAsIDEwNzcxLCAyODc2LCA3NDA3NCwgOTI1MzAsIDE5NDkyNCwgNDEzOTgsIDczODIsIDk4MDIsIDEyNzA3NywgMTI3MDc2LCAKLSAgICA0NTMsIDQxMzk2LCAxMjA1MjQsIDQyNzIwLCAxMjE0MCwgOTU3MiwgMCwgNzAwMywgMTk0ODgzLCA0MjMzNCwgNzcwNCwgCi0gICAgMTI2NDkwLCAxOTQ4ODUsIDQzMTQ0LCA0MTIzLCA4NDk0LCA0MzE0NiwgOTk3NywgMCwgMCwgNjU3NTksIDEwNzY1LCAKLSAgICA2NDA2MSwgNDQ2NSwgOTgwOCwgNjQwNTYsIDY1NTgyLCA0MTI2LCAwLCA5NTIxLCA5NTg5LCA2NDc1NSwgMCwgNjQwMjAsIAotICAgIDEyNjYwNCwgMTA0NjQsIDAsIDAsIDE5NDg2OSwgNjQ1MTQsIDExNTI4LCA2NDAyNCwgMTI4MDcyLCA2NzksIDY0MDEzLCAwLCAKLSAgICA1ODUwLCA3NTgsIDc1MzYsIDAsIDkyMjM0LCA0MTQ0MSwgMTA2OTMsIDY0MDA2LCA5ODM1NjcsIDY0MDA1LCA0MDU4LCAKLSAgICAxMTkwMTksIDEyNjQ4NywgNjQ2NjAsIDAsIDExOTA1MCwgMCwgOTgzMDY5LCAxMTM5LCA0MzI5OCwgNjQwMjcsIDY0MDI5LCAKLSAgICA4OTcwLCAwLCA5OTM0LCA5ODMwOTQsIDEwNzc0LCAxMjgwMjAsIDQyMjAxLCAxMjQyMSwgMTI4MjE2LCAwLCAxODUyLCAKLSAgICAzMDU3LCA2NDA0NiwgNzM3NDQsIDY0MDM0LCA2NDAzOSwgMCwgMCwgMCwgMTk0ODk5LCA5MjMyMiwgNzY0NSwgMTI4NTQsIAotICAgIDc0MzM4LCAzNDk2LCAwLCAwLCAwLCA5MTAyLCA2MjcsIDEyNzc5NSwgNjE1OCwgODMyNywgNzQ1NTMsIDY2NjMyLCAxMjQxOSwgCi0gICAgMTMzMDksIDExNTcwLCAxMjc4MTEsIDE5OTYwLCAxMTY5NiwgMCwgMTAxOCwgMTE4OTcwLCAxOTQ5MDksIDE5NDg5NywgCi0gICAgMTY4MiwgMTk0ODk2LCAxOTQ5MTEsIDQyNzU2LCA2NzY1LCAxOTQ5MDYsIDAsIDAsIDczODE0LCAxMTQxMiwgNjc2OCwgCi0gICAgMTA3MjgsIDE5NDgzMCwgNzEzMTYsIDExODg2MywgNDMzMTEsIDY0OTY2LCAxMTU3NywgMCwgNDMwNDAsIDE4MzMsIDExNTc2LCAKLSAgICAwLCA3NDc3OSwgMCwgMTg1LCA2NTA4NSwgNzQ1MzMsIDY0NzU0LCAxOTQ4NDgsIDc1MzUsIDgwODUsIDQyNTI1LCAxMjAzODcsIAotICAgIDk3NDksIDQxNzAxLCA2MTMxLCAxOTQ5LCA0MTE3LCA3ODQ3LCAxMjA0ODksIDE5NDcxMSwgNjQ0ODMsIDY1NjkzLCAwLCAwLCAKLSAgICAwLCA2OTY5NSwgNDIyNDAsIDAsIDEyNjY1MSwgNDI4NjQsIDEyNjQ5OCwgNjQ2NjcsIDQxODY4LCAxMTg0LCAwLCA4MTUsIAotICAgIDExNDg0LCAxMjc1MzUsIDY3ODQwLCA5ODM2NDIsIDAsIDY2MTk3LCAwLCAxMDk4NiwgNjQ2ODMsIDk4Mzc3NiwgMCwgMzQ1NSwgCi0gICAgMCwgMCwgOTg3OSwgMCwgMCwgNDE1OCwgMTI4MDUwLCA2ODE2NiwgMCwgMCwgMCwgMCwgNjk2NDUsIDMzMiwgMTE4ODA4LCAwLCAKLSAgICA1MTQyLCAyNDA3LCA2OTY0MywgNDIxOTksIDAsIDkyNDA0LCA3NDM3MywgMCwgNTUyMTcsIDAsIDYzODcwLCA0MzE2MywgMCwgCi0gICAgMCwgOTIzOTAsIDQyODY3LCAxODM0LCAwLCA5MjQ2MSwgNjk4MTcsIDEwOTQwLCA2NTI0OSwgMTE5MDQwLCA4NjYyLCAwLCAwLCAKLSAgICAyNjUyLCAxMjA1MjcsIDcxNjQsIDEwNzg0LCAxOTUwOTMsIDY3Njc0LCAwLCA5MjIzMywgOTI0ODIsIDE5NDc0OSwgNzQ1NjIsIAotICAgIDkxNzUwNSwgMTgyOCwgNzQ0NzQsIDEyMDMyNywgNzg2MjAsIDg1MzEsIDEyNDk5LCA2MjgwLCAxMjMyNCwgMTE4ODU0LCAKLSAgICA2NTIzOCwgNjgzNzQsIDQ4MzIsIDY1NTczLCAwLCA2Mjc5LCAxMjUwOCwgMTI5MDQsIDEyNTAyLCA5MTYxLCAwLCAxNjIwLCAKLSAgICA2NDQzNiwgMzYwMSwgMTk1MDk0LCAxMjgwNzMsIDk4MzU2MiwgNjA5LCAxMTU1NSwgOTgzMDk5LCAxMjQ5NiwgMTI3ODM5LCAKLSAgICA3NDE4MSwgNDM0MywgMTI1MDUsIDAsIDEyNzg2MywgMCwgMTEzNzcsIDIzOSwgMCwgNjM3LCAwLCAwLCA0MjY3MSwgMCwgMCwgCi0gICAgMCwgNDM1NjUsIDcxMzA2LCAxMjY0OTMsIDEyNjk2LCAxMjgyNTYsIDAsIDk0MDYyLCAxMjkyOSwgMCwgNzEyLCAwLCA0MTk3LCAKLSAgICA5ODMyMDQsIDQyODE4LCAxMjY2MzIsIDAsIDEyMDQ5MCwgMCwgMTE5MTM3LCAxNTA2LCA0MzU2MiwgMCwgOTI0OTEsIDAsIAotICAgIDEyNjUxLCAwLCA2NDYyOCwgNzQ1MTcsIDEyMDU4LCA3NDA4NCwgOTE3ODM4LCA3NDk0LCAwLCA0OTI0LCA2NTU5MiwgCi0gICAgMTE4ODQ0LCAwLCAxMjcwODgsIDM1NSwgOTcxOSwgMTI3MDg3LCAxMzA2NiwgNjQ3OTYsIDAsIDAsIDEyMDMzLCA0MjE3OCwgCi0gICAgMCwgNjk3NjAsIDQyNTcxLCA5MjYzNSwgMCwgMCwgMCwgMCwgMCwgMTI3MTc2LCAzMTc4LCAwLCAwLCA5MjcwNCwgMCwgCi0gICAgOTA4MCwgMTI3MDAwLCAxMjAzNTIsIDAsIDY4MjA5LCAwLCAxMTA4MiwgMCwgNTY5OSwgMTk1MTAwLCA2NjAwMCwgOTQ4OCwgCi0gICAgNjUxNjYsIDExOTExMiwgMCwgMCwgMCwgMCwgNzEzMTMsIDAsIDUyNjUsIDY5MjM1LCAwLCAxMTQ4NywgNjc4NTgsIDEyNDY0LCAKLSAgICAwLCA0MzA0NSwgMCwgMCwgNDMzNDUsIDAsIDEwNzcwLCAxMTg5OTQsIDY4MDcsIDQ2NSwgOTgyOSwgMCwgNzQzNDgsIDAsIAotICAgIDQzMzQ2LCA4MTE2LCA3OTUsIDAsIDAsIDEyNDYyLCAxMDkzMCwgMTA4MzEsIDAsIDExODk1MiwgNjQzNjIsIDc0MzM0LCAKLSAgICA5ODM2MDIsIDEyMDgxMSwgMCwgMTI0NjgsIDg2MDcsIDEwMDgsIDAsIDEwMDkyLCAxOTUwNzgsIDkxNzg0MiwgNjc4NTUsIAotICAgIDU1MjU3LCA3Mzc3MSwgMTc2NiwgMTEyODIsIDExOTk2LCAxODIwLCA0NTQ3LCAwLCAwLCAwLCAwLCAxMzIyMywgMTI4NjY1LCAKLSAgICA2NDU5NSwgMTI3Mjk0LCAwLCA5MjMxMSwgNDM0NSwgMTI2MTYsIDAsIDAsIDAsIDc0NDY3LCAwLCAwLCAwLCA1MzgyLCAwLCAKLSAgICAwLCAwLCAxMTkwNjAsIDY0OTUzLCA1NDA2LCAxOTkyMCwgNjk4OTcsIDY2NTEwLCAzNTkwLCAxOTQ4NjQsIDExMzAsIDAsIDAsIAotICAgIDQyMDE2LCAxMTgyMywgNDMwMjMsIDAsIDExODg5NiwgNzc0MiwgMCwgMTMyODAsIDcxMzIzLCA5MzI2LCA3MzgyNiwgNTMxMCwgCi0gICAgNzQ4MTIsIDc4NTg0LCA5MjIyOSwgODk1OSwgNDM1ODksIDY3NDcsIDY2NzIzLCAwLCA4NTY4LCAwLCAxMjA0OTYsIDczODE2LCAKLSAgICAxMjA4MDMsIDk4MzgzOSwgNDI2NzAsIDAsIDExNjIxLCAxMjQ2MCwgMCwgMTIwNjMxLCAwLCA0MzA2MywgNzQ1MTksIAotICAgIDEyNzE4MiwgMCwgNzM5MTcsIDc4NDMsIDY5NzgzLCAxMTY4OSwgNTQxMCwgNTc4MywgMTA0NjgsIDg0MDMsIDU0MDAsIAotICAgIDExNTk0LCAxMjgyNDcsIDAsIDExODk5MCwgMTA0OTEsIDY5ODQyLCA2NDQxMiwgMCwgMCwgNTU4NywgNDI4NjUsIDY0NDA0LCAKLSAgICA4MjY4LCA0OTIzLCA2NTA4NiwgODk4MSwgMTIzODIsIDQyMTMzLCAxMjA3NTUsIDk3MDYsIDY5NzM4LCAwLCA2NjYxMCwgCi0gICAgMTA0NjEsIDEyMTAzLCAwLCA4NjQyLCAwLCA0Mjc2NiwgOTgzODU3LCAyMjEwLCA5OTgzLCAwLCA5NDAwOSwgMCwgMCwgMCwgCi0gICAgNzM5OCwgNDE1MTUsIDAsIDExODAyLCA4MDQxLCAxNDYxLCA5MTAsIDExOTEzMywgMCwgNjc0OSwgMzY1OCwgOTM5NjQsIAotICAgIDEyMDUyNSwgMCwgNzYxNywgMTk0ODQxLCAxMjg4OCwgMTI3OTgzLCA2NzY2OCwgMTMxNDMsIDAsIDkxOTMsIDExMDk3LCAKLSAgICA1NzAzLCAwLCA0MTUxNywgNDE1MDQsIDQxNTE5LCAxMDAxNiwgNjQzMDUsIDAsIDY1ODY0LCA2MjMsIDc4MSwgNjcwLCAKLSAgICAxMDY2MCwgNTc2OSwgNjEzLCA3NTQzLCAxMjAyNzksIDQ3NywgNDEwODMsIDkyNTIxLCAwLCA1OTIsIDE1NzgsIDEyNDU5LCAKLSAgICA0MzQ0OSwgMCwgMCwgODIyNSwgMCwgNjU0LCAxMTM0NSwgNjUzLCA2NTIsIDAsIDY0NywgMCwgNjMzLCAxMjA3NDQsIDAsIAotICAgIDEyNjQ3MiwgMTI0ODAsIDQzMjQzLCAwLCAzOSwgMTI0ODcsIDAsIDEyMDUyOSwgNzQxOTksIDEyNDgyLCAwLCAxMjQ4OSwgMCwgCi0gICAgMzE5NSwgNTU1MCwgOTgzNTU0LCA3ODk3LCAwLCAxMjAzLCA3NDM5NiwgMTgxMywgNjQ1NDQsIDQxMzExLCAxMjA5MCwgMCwgCi0gICAgMjg3NywgMCwgMCwgMTY3NSwgNjk4NDAsIDAsIDAsIDAsIDEwMDcwLCAxMDU5NSwgMCwgMTE5MDc3LCAxOTQ3NzcsIAotICAgIDk4MzYxMSwgMCwgMCwgMCwgNDMyNDQsIDAsIDAsIDk4MzkwNywgMTE5NTYxLCA5ODMwNzgsIDAsIDE5NDkyMSwgMTI4MTYwLCAKLSAgICA5OTM5LCAwLCA5ODMxNTEsIDc3ODYwLCAwLCAwLCAyNzAsIDAsIDEwNzE0LCAwLCAwLCAwLCAwLCAwLCA2NTM3MiwgMCwgCi0gICAgNzQwMzgsIDExOTU1OCwgNjI3MywgNjY2NzksIDM2NCwgOTU5NSwgMTk0OTA4LCAwLCAwLCA3MDcsIDAsIDAsIDkyODIsIAotICAgIDY2NDg5LCAyMjQsIDAsIDY4NjcwLCA5MzMyLCA0OTY2LCA2ODY3NywgMCwgNjg2NDQsIDAsIDM4NDEsIDY4NjM0LCAwLCAKLSAgICAxMDczMiwgNjg2NDAsIDg1MCwgNDk3MiwgMCwgMTI4OTAsIDI5MDksIDY4NjE5LCA0NDAwOCwgNjg2MjcsIDk4MzcwOSwgCi0gICAgMTE1NDQsIDEwMjAzLCA5NjA4LCAwLCAwLCAxMTk2MiwgMTk0Njk0LCAxMjUwNywgMTE5NiwgMTI4Njg3LCAxMjgzMTEsIAotICAgIDc3NywgMTIwMTg3LCA0Mzc1LCA2NTI3MSwgNjc2NzgsIDAsIDEyMTk4LCAwLCA2NDgyNCwgMTE5MzQzLCA5ODMyMzAsIAotICAgIDk0NTQsIDYzNzc4LCA4NjU4LCA0MjUyOCwgNzgwMDAsIDI3MDUsIDkxNzk3NSwgNDE1MjAsIDAsIDAsIDExOTg2LCA3NzY1LCAKLSAgICA0MjUwMiwgODI4MCwgNzQ1MjAsIDI3MDEsIDAsIDEyNzAwMiwgNTc2NywgMCwgMCwgOTgwOSwgODM1MywgNjM3NDcsIAotICAgIDY2NzAxLCA2Mzc3MiwgOTgzODA1LCA2Mzc0NSwgMTc0OCwgNjM3NzAsIDAsIDAsIDAsIDY1NTQyLCA2Mzc2NiwgNTUyNDQsIAotICAgIDMwNjEsIDAsIDYzNzY0LCA2Mzc4NywgOTA2NywgNjA5NiwgMCwgNzY5NCwgMCwgNzI1NywgNjM3NjgsIDM0ODUsIDEyOTg3LCAKLSAgICAwLCAxMjc1MjIsIDEyMDYyOCwgNjM4MDcsIDE1OTEsIDAsIDYzODYsIDYzNzgzLCAwLCAwLCA5MjUzNSwgMCwgMCwgMCwgCi0gICAgNzQ1NzUsIDAsIDY1NzE5LCAxMzA4MywgNjQ1NzQsIDY1MDEyLCAwLCAxNjQwLCAxMjQ5NSwgNjY2OTEsIDc2MjQsIDMxMzgsIAotICAgIDEwOTk2LCA5MjI0NywgMTkyMiwgMCwgMTI0OTgsIDEwOTg3LCA2OTkzNiwgNjk5MzksIDM4OTQsIDY1NTQzLCAwLCAKLSAgICAxOTQ4NDIsIDk4MzU4OCwgNDkzLCAwLCA0MzE5NywgMTcxNywgNDIyOCwgNDc5LCAxMDMwMywgNzQwMjAsIDAsIDkxNzkzNSwgCi0gICAgMTAzMzUsIDM1MjAsIDkxNzkzMiwgMTI0OTAsIDY0MzE1LCAwLCAxMjcwMzksIDEyNDkzLCA2MjMzLCA0MjY4MSwgMTAwMiwgCi0gICAgMTI0OTEsIDAsIDY0OTExLCA5MjYxNSwgMjA5NiwgNjUxMjAsIDAsIDc4MjE5LCA5ODMwODEsIDExNjExLCAxMTYzMiwgCi0gICAgMTI3MDQxLCA2NjIxMywgNjM4NjQsIDY2MjIxLCA2NjIyNiwgNjYyMjksIDEzMjE4LCA2NjIzMSwgNjYyMTYsIDg1MDcsIAotICAgIDY2MjM2LCA2NjIxMSwgNjYyMTgsIDkyNjcyLCA2NjI0MCwgNzgwNDEsIDY2MjMzLCA4OTI4LCA5ODM1NTIsIDc5MDksIAotICAgIDY2MjM0LCAxMTYwNSwgNjM3NTksIDk4MzY0NSwgNjYyMDgsIDczOTk5LCA2Mzc5OSwgNjM4MDMsIDI0NCwgMTE1NDIsIAotICAgIDEyODk4LCAxMjQ5NCwgNzM3NjEsIDEyNDkyLCAxMjY2OSwgMCwgMCwgNzQxNTMsIDAsIDEyODI3OCwgMTIwNjgwLCA0ODgyLCAKLSAgICAxMzA0MCwgMCwgODYxMiwgNDg4NSwgNzQwNTMsIDAsIDEzMDQyLCA0ODgwLCA2NDY2MiwgMjQyOSwgMTM2MCwgMjQ4LCAwLCAKLSAgICA2Mzc5NywgOTIzOTQsIDQyMzU4LCAwLCA3MjkyLCAwLCA2Mzc1NiwgNDI3ODYsIDY2NjkzLCAwLCAxODcwLCA3ODA0MCwgCi0gICAgNDcwLCA3ODAzOCwgNzgwMzUsIDc4MDM2LCA3MDAyOCwgNzgwMzQsIDQ1NzksIDEyODA5MCwgMCwgMTI1MTEsIDc0NDUzLCAKLSAgICAxMjUxNCwgMCwgNzQ1NzksIDcyMzksIDcwMDEsIDg2MjMsIDk0MDExLCAxMjgwNTIsIDEyODA0OCwgNzM3OCwgMTI1MTIsIAotICAgIDExNjE1LCA2MTA0LCAwLCAwLCA2NTksIDYwOTgsIDAsIDEyMjM0LCAxMjczMDcsIDEyNzA2NywgODMxMSwgMTI1MTAsIAotICAgIDQxODAzLCAxMzAzOSwgMTI3MDcyLCAxMjUxMywgMTAyMDIsIDEyNDcxLCAwLCA4NzQ3LCA5ODM5MTEsIDAsIDAsIDIzMjMsIAotICAgIDAsIDIzMTksIDc3OTE3LCAxMjQ3NywgNzc5MTYsIDIzMTEsIDAsIDQ0MTUsIDIzNywgNjI4MSwgMTI3MjgwLCAwLCAwLCAKLSAgICAyMzA5LCAxMzEyLCA4MTczLCAxMjg4NzEsIDEyNDY5LCAwLCA3ODUwNSwgNjQzMzUsIDEwNjA5LCAwLCAxMjgxMTEsIDkzOTcsIAotICAgIDExNTI0LCA5Mzk1LCA5Mzk2LCA5MzkzLCA5Mzk0LCA5MzkxLCA5MzkyLCA5Mzg5LCA2MjA5LCA5Mzg3LCA5Mzg4LCA0OTMyLCAKLSAgICA5Mzg2LCA5MzgzLCA5Mzg0LCA2NzQwLCAwLCA2NTQ1MSwgODE4NSwgMCwgOTE3ODMyLCA0MzAyNCwgNDMzMzYsIDY3NjU5LCAKLSAgICAyMzEzLCAxMjgxNjcsIDc5NDgsIDkyMzYsIDkyNTcxLCAwLCAwLCAxMDU3MCwgNDM0NzMsIDYyODksIDEwNDg0LCAwLCAwLCAKLSAgICAxMTk5OCwgMTIwODIsIDEwOTI0LCAzMTQ3LCAwLCAxMjA2ODQsIDEyNTI0LCAxMTkwODEsIDIzMTAsIDExODE4LCA5MzgxLCAKLSAgICA5MzgyLCA5Mzc5LCA5MzgwLCA5Mzc3LCA5Mzc4LCA5Mzc1LCA5Mzc2LCAxNjgzLCA5Mzc0LCA5ODM3NjksIDkzNzIsIAotICAgIDEyNDQ0LCAwLCAwLCAxMzAxNiwgODIxMCwgOTgzOTQ5LCA0MjAyOSwgMTEwNzksIDEyMzMxLCA0MzQ1MSwgNDIwMzIsIAotICAgIDg3NDQsIDcyNiwgMCwgOTgzODI4LCA0MTU1LCAwLCAwLCA0MjAzMCwgNTAwNywgMTI1MjIsIDQzMDg4LCAwLCA0OTUxLCAKLSAgICAxMjc4MDUsIDEyNzI0MCwgMCwgOTkyMiwgNDMzMDksIDk4MzgzMiwgMTI1MjUsIDk4MzQ2MywgMTIwMTYsIDY1NzcwLCAKLSAgICA5NTQ4LCA2NzY2NSwgNDAzLCA3ODIzMCwgMTI1MDMsIDAsIDAsIDExMDMwLCAwLCA5MjU2NywgNjU2OTEsIDYzOTk4LCAKLSAgICAxODE5LCAxMDQ5NiwgMCwgMCwgMTE5OTIwLCAwLCAxOTQ2NjgsIDAsIDEyNTA2LCAwLCAxMjIzMSwgMCwgMTI1MDAsIAotICAgIDQ0MDIzLCAxMjUwOSwgNjQzOTMsIDc4ODMwLCAzMzg5LCAxMDU4OSwgNjYwOCwgNDEwNDcsIDEyMDMyMSwgNzgzOTUsIAotICAgIDc4Mzk0LCA3NDA2OSwgNzc5OTUsIDc4MzkxLCAzNjA4LCA4MjgxLCAxMjAzMjAsIDExMDcsIDAsIDkwNzYsIDg4NjIsIAotICAgIDY5NzQzLCA0MTA1MiwgMTMwODQsIDY0NzY2LCA0MzIxNywgNzgwMywgMTMyMjIsIDc0MTY1LCA3NDc4MiwgMTI2NTE0LCAKLSAgICA4NTQ2LCAxMTU1MywgNjM5OTUsIDEzMTc3LCA5MDQzLCA2MzAzLCA5ODM5MzgsIDQ5OCwgNjQ0NzEsIDEyMDMyNCwgCi0gICAgMTI4NTY3LCAxMjUyOSwgODA0MiwgMCwgMjM0NCwgMTI1MjgsIDgwMzEsIDI0MTQsIDAsIDY5NzE5LCAzMjMxLCAwLCA2NDIyLCAKLSAgICA2NjUxMiwgNjk2NTMsIDEyNTMwLCAyNTM3LCA3ODQwNSwgNDE0MjksIDEyNjU4LCAxMzAzNiwgNjU3NzIsIDAsIDc4NzM4LCAKLSAgICA0MTQzMywgNDcxOSwgNDY5LCAwLCA0MzYzLCAzMzEzLCA0MTQyOCwgNzg0MDcsIDIwMjMsIDE3NzIsIDc4MjI0LCA3ODIyNSwgCi0gICAgNjU3MDYsIDEwMDUxLCA2NDgxMiwgNzgyMjAsIDAsIDk5MjAsIDEyMjE1LCAwLCA0OTMxLCAxOTUxLCAxMjQ5NywgMTE5MzYzLCAKLSAgICA5NjA3LCAwLCA5NjYzLCAwLCAxMTk2MzQsIDY1MDMsIDQxMTEwLCAwLCAxNDkxLCAwLCAwLCAxMjczMDQsIDQxMDYxLCAwLCAKLSAgICAxOTQ4MzgsIDEyNzE4NywgNjUwMjYsIDQxOTkzLCA0MTUwOSwgMTEwNDUsIDY1MDI4LCA3ODYwMiwgNjY0NzYsIDQxMTA4LCAKLSAgICA5NzM4LCA0MTk5NSwgMTA3NSwgMTk1OCwgMTI1MzUsIDQxOTkyLCA0MTUwNiwgMCwgNDE2ODcsIDAsIDEyMDcxNywgCi0gICAgMTI3Nzc2LCA5OTQwLCAxMjcyOTksIDc2OTIsIDk4MzgyNCwgODAwOCwgNDExMzEsIDMzMCwgODU2NiwgNjUwODMsIDQxMTMzLCAKLSAgICA5ODE2LCAxMjY1MTcsIDEyNTMyLCA3ODU1MCwgNzg1NDYsIDM1MDgsIDEyNzA1OCwgNDMyMzUsIDAsIDEyNzI5OCwgNjQxMzksIAotICAgIDc4MjMxLCA2NDExLCAxMjkxMCwgNzg1NTQsIDY2NjQ0LCAxMzAyOCwgNjczNywgMTI1MzcsIDAsIDAsIDY0MTM2LCAxMjUzNiwgCi0gICAgMjM1MCwgMTMwMjksIDc4MjMzLCAwLCA5ODMxMDMsIDEzMDMwLCA2NzAyLCA0NTI3LCAwLCAxMjUzOCwgMTI4ODEwLCAKLSAgICA5ODM2MzYsIDY1NTk5LCA2NTcxNywgOTk2NiwgMCwgNDk0OCwgMTI0ODQsIDQwMzIsIDEyODE0OSwgMTI2MjMsIDAsIDYyMDcsIAotICAgIDAsIDYxMTcsIDY1OTMwLCA4NDEyLCAwLCA3NDM4LCAxMjk2LCAyMzI1LCA0MTUxMSwgMTI2NjI1LCAxMDE0OSwgNzQxMTgsIAotICAgIDAsIDEyNzI4NiwgMTI0ODEsIDAsIDEyNDg4LCA2NjcxMywgMCwgNDE1NTYsIDY0NDE0LCAxMTg4MDIsIDIzNTQsIDQyNjE5LCAKLSAgICA3Mzc2NiwgMCwgNjI5NSwgOTAxLCA0MTUxMCwgNzk1MywgMCwgNjUwMzIsIDQxNTEzLCA5ODMxNjYsIDExOTI3LCA2NjU4NCwgCi0gICAgNzg1NTksIDc4NTYwLCA3ODU1NywgNzg1NTgsIDAsIDc4NTU2LCA4NDgsIDk4NjgsIDAsIDY0MjQsIDc4NTY4LCAxMTkzMzgsIAotICAgIDY5OTIyLCA3NDAzMSwgNzg1NjMsIDc4NTY0LCAyMzUyLCA3ODU3MiwgODkzLCA2NDU3NiwgMTEyODksIDE0MDcsIDY3OTczLCAKLSAgICAwLCAxMzAyNiwgNjc2MiwgNzg1NzksIDc4NTgwLCAxMzAyMywgODkwMywgOTc3NywgNjY3MTUsIDE4NzEsIDgwOTksIDAsIDAsIAotICAgIDEzNDMsIDk4MzgxNCwgMCwgOTMyNSwgNjgxOCwgNjI4MywgMTE3MzgsIDAsIDk4MzkyNSwgMCwgMTE3NDEsIDAsIDAsIAotICAgIDkyMTYsIDgyNjMsIDExMjc5LCAxOTQ3NTIsIDk4MzgxNiwgMTk0NzU0LCAxMzAyMSwgNjQ0OTQsIDMxMzYsIDE5NDc1OCwgCi0gICAgMTk0NzU3LCAxOTQ3NjAsIDEzMDIyLCA0MjczNywgOTk1NiwgMCwgMCwgNzQ1NTIsIDEwMDE0LCAwLCA0MTI2MCwgMTE5MzQwLCAKLSAgICAxMzAyMCwgMTAwMjQsIDE5NDc2NCwgNzQ1ODMsIDc0MzQwLCA2OTY4MSwgMCwgNDMwMDEsIDgwMjksIDAsIDAsIDk4Mzc3MSwgCi0gICAgMzMzNSwgMCwgMCwgOTc3NiwgMTIwNTI2LCAxOTQ3NDgsIDUyMTUsIDQyNjQ0LCAzMzMzLCAxNjMyLCAxOTQ3NTEsIDY0ODQ5LCAKLSAgICAzMzQyLCA3ODU4MiwgNTM2MywgMTI5NTcsIDc4NTgxLCA0MTU2LCAwLCAwLCA2NDIxLCA3ODU5MSwgMTYxMSwgNzg1ODksIAotICAgIDEzMDE4LCA3NDI1NywgNzg1ODgsIDc0NTQyLCAzMzM3LCA0NTM3LCA2Nzg5NSwgMTE3MzYsIDAsIDY4NjA4LCA2NDgyLCAKLSAgICA0MjE0LCA3Mzc5MCwgMTE5NDUsIDAsIDEzMDQ2LCA4ODM4LCA0MjUsIDQwMjUsIDEwNzA5LCA3ODU5NSwgMjEwOCwgMjM5MiwgCi0gICAgMTMwNDcsIDAsIDAsIDY4MTksIDEzMDQ5LCA2NDk5LCA5MjI0MywgMTI0MjQsIDY4NjE0LCA3Mzk0NCwgMTMwNTAsIDk5MjQsIAotICAgIDE5NDc0NSwgNjUwNywgMTI3OTE5LCA5NDA3MywgMTI4MDY5LCAzMjc3LCA4OTI5LCA0OTQ3LCA0MTA1NSwgMCwgMTk0NzIyLCAKLSAgICAxOTQ3MjEsIDE5NDcyNCwgMTMwNDUsIDY0NjI2LCA2NjAzNCwgNzc1MSwgMTk0NzI3LCA4MzcxLCAxOTQ3MjksIDM5OTcsIAotICAgIDEyODA2LCA4NzY4LCAxMzA0NCwgMCwgMTI0MjAsIDQwMjQsIDE5NDczMCwgNDEwNTQsIDEwNzgsIDk3NTcsIDY5NzM2LCAKLSAgICA0MTA1NywgMCwgMCwgMCwgMCwgOTgzNzgyLCA5MjIxMCwgOTI0MTEsIDAsIDQxNDk2LCAwLCA5MTY1LCAxNTcyLCAxMTkxMSwgCi0gICAgMCwgMTE4ODQyLCAyMzQ2LCAxMzI3MCwgODk1OCwgMCwgOTY0NiwgMzc3MywgNDMxODMsIDY0MDEsIDU4MzEsIDAsIDAsIAotICAgIDEzMDQzLCA4MDU2LCA5MjQ5NCwgNjU2ODEsIDIwOCwgMTI3MzgyLCA0MTUxNCwgMCwgMCwgMCwgMTA2OTksIDY0MDgsIAotICAgIDkyMjI3LCA3ODI1LCA1NjYxLCAwLCAxMjA2MzAsIDM2MDMsIDQxMTA5LCAyMzk4LCAzNTQ4LCAxMjY1OTYsIDAsIDExOTkzMywgCi0gICAgMCwgMzExNSwgOTkxOCwgMCwgMTEzMjEsIDQyOTEyLCAwLCAwLCAxOTQ3MjYsIDQ4NzYsIDY1ODA0LCAwLCAwLCA0MzQ2OCwgCi0gICAgOTgzMjY2LCA0MTU1OCwgNDE0NzEsIDczOTUwLCA4MTU4LCA5OTQ0LCA0MTQ3MiwgMTIwMjk4LCAxMzA1MSwgNzg2ODksIAotICAgIDMxNDMsIDE5NDY3NCwgNjcwMSwgNDE1NTksIDE4OTYsIDY2MjU2LCAxMzA1MiwgMTk0NjgwLCA1NjY1LCAwLCAxMTkwNzEsIAotICAgIDcwMjUsIDYzOTc0LCAwLCA3NDM1MiwgNzQxNjEsIDQxNTQsIDk4NjMsIDQzNTUwLCAxMjMxMCwgNTY2MiwgNDIzODIsIAotICAgIDE5NDY4NiwgNzM5MjQsIDExMjEsIDc4MzE5LCA2Mzk1OSwgMCwgOTk0MiwgMTMyMzEsIDAsIDY0NzUyLCA0NzMyLCAKLSAgICAxOTQ2NjYsIDExNTk2LCAxMTk5MzEsIDY1MTg3LCAxNjI2LCA2Mzk4MywgMTAxMTAsIDY0NzcyLCA0MjAyNCwgNjQyMCwgCi0gICAgNDIwMjgsIDAsIDEwNTA5LCAyNzk1LCA0OTEwLCAxOTQ3MjgsIDY5MjMxLCA2NDc1MywgNjI3NSwgOTM5NTcsIDExODgzMCwgCi0gICAgNjM5NzgsIDExMDQ0LCAzMjI5LCA2NDIzLCA0Mjc3NCwgMCwgMCwgMCwgMTI4MjMsIDIzMzEsIDkxNzgxMCwgNzA4NSwgCi0gICAgNjEzNywgMCwgNzUyNCwgMCwgOTE3ODA5LCA4MzQ2LCAwLCA4MzM4LCAxMjgzMTUsIDY1MDQzLCAwLCA4MjIsIDEyNzk4NCwgCi0gICAgOTkwMywgNjQ3MjEsIDQyNzIyLCA2OTg3NywgMTk0NjU5LCA3ODY1NSwgNzg2NjEsIDE5NDY2MCwgNzg2NjIsIDQxMjY1LCAKLSAgICA1MzExLCAxNzk1LCA5NjUsIDExODc5MSwgMTA1ODcsIDc4MDU1LCAxMTI3OCwgNzg2MzIsIDE5NDY0MCwgMCwgMTI5NDYsIAotICAgIDE5NDY0MSwgMTE5MzQxLCAxMjAzNDksIDYyOTQsIDMxNDQsIDE5NDY0OCwgMTk0NjQ3LCA2NTAxOSwgMTk0NjQ5LCA3Mzk5MCwgCi0gICAgMCwgOTgzOTUxLCA3NDgsIDQxMDY3LCAyMzMwLCA1MzUsIDMxNDgsIDEyMzc1LCA3ODc5OSwgMTk0NjI5LCAxMDU1NiwgCi0gICAgMjQ3NSwgMTIzODgsIDQ4ODksIDg5NjgsIDY3ODYzLCAzNTkzLCAwLCAwLCAyMzQyLCAwLCAxOTQ2MzQsIDY1MjA2LCA0ODk0LCAKLSAgICAxOTQ2MzUsIDQ4OTAsIDE5NDYzNywgOTE3ODA0LCA1ODEsIDQ4OTMsIDk4MzYxNiwgNjU3MSwgNjU1NDUsIDQ4ODgsIDQxNTcsIAotICAgIDc4MDQ4LCA3ODA0OSwgNzgwNDYsIDc4MDQ3LCAwLCAxMDExOSwgNjQxNSwgNDI4OTMsIDAsIDY5NzAyLCAwLCAwLCAxMTM3NSwgCi0gICAgNjQ3NDYsIDIzMzIsIDc4MDYzLCA0MTIsIDc4MDYxLCA2NDkzMiwgNDI4ODAsIDQzNTg3LCAwLCAwLCAwLCAwLCA2NTE5NywgCi0gICAgNzgwNjYsIDEyMjAzLCA3ODA2NCwgNzgwNjUsIDg5MTMsIDY1ODU0LCA0ODc1LCA2NTgxMSwgMTIwMzgxLCAxMjAzODksIAotICAgIDExODg4OCwgOTM0NCwgODgyNiwgMTIwMzg2LCAxMjAzOTUsIDEzMTA0LCA3NDc4MSwgMTE5OTcsIDEyMDM5MywgNzgwNzUsIAotICAgIDAsIDMxMzQsIDAsIDY1Njk2LCA5MjMzMSwgMCwgNjYyMTcsIDAsIDgzMzQsIDExOTM0NCwgMCwgMzQ0OSwgMCwgMCwgCi0gICAgNzg0MTQsIDc4NDEzLCAxMTg5NTAsIDc0MDExLCAwLCAwLCAwLCAwLCAxOTA4LCAxMjAxNjcsIDQzMjgsIDEwNzM0LCAKLSAgICAxMjcwMTQsIDAsIDEyNzkxNCwgNzgwNCwgNzgyNzIsIDEwODExLCA2MjUwLCAxMTMzOSwgNDkxNCwgMTEzNjcsIDAsIAotICAgIDc4MDU0LCA0OTE3LCA3NDUxNiwgNzQyMDgsIDY0Mjg1LCA0OTEyLCA1NDY0LCAxMjc4MzYsIDExODg5MywgMjM2MSwgNzk3MSwgCi0gICAgNzgwNzIsIDc4MDczLCA1NTI0MywgNzgwNzEsIDAsIDgwODYsIDc0MzE3LCA2NzA3LCA4MzE5LCAyMzEyLCA0MDk3NywgCi0gICAgMTA5NjAsIDQwOTYyLCA4MzA1LCAxMjU3MywgOTgzNjA4LCA0MDk4MCwgOTgzOTU1LCAxMzIwMiwgMCwgMTI1ODIsIDc4MjgyLCAKLSAgICA5ODMwNDgsIDY5ODU2LCA0MjQzOCwgNTUyMjEsIDYyODgsIDc4MjgwLCAxMjc5NDYsIDU2NTMsIDQyNDAwLCAxMDg5MSwgCi0gICAgNzY5OCwgNTY1OCwgNzQwNDUsIDcwMDM5LCAwLCAwLCA0OTEzLCAwLCA5ODM5NTAsIDcxMzMzLCA0MjMyNiwgMTI4MTk0LCAKLSAgICAxMjcyOCwgOTI2ODUsIDQyNDc4LCAyMzI3LCAwLCAxMjU2MywgNDIyODcsIDEyNzA1LCAwLCAwLCAxMjU4OCwgODgyMSwgCi0gICAgNjE1MywgMjg2NywgMTk0NzA4LCA2NjMxMiwgNjk4LCAxMjgwMDcsIDE5NDYwNiwgMTAzNTYsIDcwMDE3LCAxOTQ3MTMsIAotICAgIDY1MSwgMTI2NDEsIDAsIDAsIDAsIDAsIDQxNTUyLCA2NTExNSwgNzg0NjUsIDc4NDY3LCA3ODQ2MywgNzg0NjQsIDEyODg1MSwgCi0gICAgNzg0NjEsIDE5NDY5NywgNzQzNTYsIDY0OTQ1LCA0NzE2LCA0MzI3NywgMCwgNzg0NzQsIDEyMzQwLCAxMjA1NjgsIDAsIAotICAgIDE5NDcwMCwgNTUyNjQsIDQxMjExLCAxMjA2NzYsIDg3MDMsIDU0NjIsIDkxNzYyOSwgOTgzNDg3LCAxMDEwMSwgMCwgCi0gICAgNzAwNDksIDg0NzksIDQxNTEsIDQxOTMzLCAwLCAwLCA2NjI1NCwgMTIwODIxLCAwLCAwLCAxMjg2NTQsIDAsIDExOTE5NCwgCi0gICAgNzQwNTAsIDkyNzAxLCAwLCAwLCAwLCAwLCAwLCAxMjI3OCwgMCwgMCwgMCwgMjcwMCwgMTI1NzYsIDc4NDIsIDEyODk5LCAwLCAKLSAgICAwLCAyNjk5LCAwLCA3Mzg0NSwgMjk4NSwgOTI1NjgsIDEyNjQ3NSwgOTE3ODQ1LCAxMjE5MiwgMTE5MzE0LCAwLCAxMTkzMTIsIAotICAgIDk4MjcsIDExOTMxMCwgMTE5MzExLCAxMTkzMDgsIDExOTMwOSwgMTE5MzA2LCAxMTQ4MSwgNDEyMTAsIDExOTMwNSwgMCwgCi0gICAgMzUsIDc4NDgxLCA3ODQ4MiwgNjY2OTQsIDY4NDc5LCA3ODQ3NywgNzg0NzgsIDQzNTk2LCA2MDkwLCA2NDI1NywgNzgxMiwgCi0gICAgMTA1MzQsIDAsIDc4NDg1LCA3Mzg0OCwgNjc5NzUsIDQyNzIsIDAsIDQwOTY3LCA0MDk2NCwgOTE3ODI1LCAxMjcwNCwgCi0gICAgNzg0ODcsIDQzMzA2LCAwLCA2NDQ5NywgMTIxMzgsIDc5MzAsIDAsIDIyOTIsIDY4MjE2LCAwLCA5MTc4MjYsIDUyNDQsIAotICAgIDQxODksIDk0MTA4LCA2NzU5NiwgMTI3NTA0LCA0MTg4LCAxODc5LCAwLCA5NjgsIDAsIDQzNzQzLCAwLCA4ODczLCAyMjc5LCAKLSAgICAwLCA5MTc4MjcsIDY1NTU1LCAxMjU3NCwgMCwgMCwgMCwgNzQ0OTAsIDEyNzA5OSwgNDM2NTcsIDAsIDAsIDAsIDQyNjgyLCAKLSAgICAxMjU3OCwgMTI3MjAsIDAsIDQxMjI3LCAwLCAxMjM0NiwgMTI3MTAxLCA2NDg0OCwgMCwgMCwgNzI1MSwgMCwgMCwgCi0gICAgMTE4ODUwLCAxMTkxNDEsIDEyODU0NiwgNjYwMTUsIDAsIDk1OSwgODg4NSwgMTI1NjQsIDY2NDU3LCA3ODgwOCwgOTQ2OSwgCi0gICAgOTYzMiwgOTIzMjMsIDc0NzYxLCA2NDMyMywgMTI3MzM1LCAwLCAwLCAwLCAzMTAsIDAsIDQxMjgxLCAxMDk3NiwgMCwgCi0gICAgNzEzMjUsIDAsIDc0MjY2LCAxMDA1NCwgNjQ5NywgODU3NCwgMCwgOTAxMiwgMTk5NTgsIDc0NDIwLCA2NTA4OSwgMTMyMTUsIAotICAgIDEyNzMwLCA2NTE2MywgNzQwNDQsIDM3NCwgNDMxOTUsIDgxNiwgMTIwMTYxLCAwLCAwLCA0MTkzNCwgNzQ2NSwgMCwgCi0gICAgMTI4MTY4LCA5ODMyNjAsIDQ3MTUsIDYxMDEsIDk0MTA2LCA0MTkzNiwgMCwgNDg3OSwgMCwgNjU0NDYsIDAsIDMwNywgCi0gICAgMTI3MTQ3LCA5NTg1LCA1Mzc0LCA5ODMyNTksIDEyODA1OSwgMCwgMCwgMTI2NjE4LCAxMjAzOTAsIDAsIDY1NTY3LCAKLSAgICAxMjA2MTQsIDE5MjksIDAsIDEyMTQyLCAwLCAxMjIzNiwgNDE0MTksIDE5NDYxOCwgMTIwNjEwLCAxMjk4MiwgMTk0NjIzLCAKLSAgICA1Mzc4LCA3ODc5MSwgMTI4Njc5LCA0MTQyMSwgMCwgNDQ2MiwgMCwgMTI2NTk5LCAxMjgwOTIsIDgyMSwgMCwgMjQ5OCwgCi0gICAgNTgwMCwgMTIwMTU3LCA5ODMxMTUsIDE3NjAsIDI0MjEsIDQ0NjksIDIzMjQsIDgyOCwgMzYxMSwgNzg0MDAsIDc1NywgCi0gICAgMTE4NSwgMCwgNzg3NzAsIDQzNTk3LCAxMDYyOCwgNzQ4MDgsIDE5NDU3MiwgNzk5OSwgNDM5NzEsIDAsIDAsIDEwNjM0LCAKLSAgICAxMDk0MiwgNzcxMywgMjM0OCwgMCwgNjQzNzQsIDQzODAsIDE5NDYwOCwgMTE5MDQ0LCA5OTgyLCA2NDMyNCwgNDEyNDAsIAotICAgIDg2MiwgNjU2MjYsIDc4NDYyLCAxODEwLCAzNjczLCA1MTM3LCAxOTQ2MTcsIDAsIDcyNzcsIDY1NjIyLCAwLCA3NTY2LCAKLSAgICA2NDY4OCwgMTk0NTkzLCAxOTQ1OTIsIDc4MDkyLCA3NDM1NywgMTk0NTk3LCA0NzQ4LCA5MjIyOCwgMTk0NTk4LCAxOTQ2MDEsIAotICAgIDQyMjYwLCA1ODcxLCAxMTkwNzUsIDAsIDc0NTc2LCA0NDAxOSwgMCwgMTI4MTg5LCAzOTY3LCAxOTQ2MDQsIDEzMTM3LCAKLSAgICA4Nzc1LCAxMjc5NDUsIDAsIDI5NjMsIDAsIDg0MTAsIDQ0NTQsIDcyMywgMTI3ODgyLCA5NjYsIDQ0NDksIDkyMzMwLCAKLSAgICA5MjIzOCwgMCwgNzgxOSwgMjMyMCwgMTk0NTg5LCAzMzksIDQ5NjgsIDE5NDU5MCwgMTIwMzk5LCA4MDc1LCA1NTI3NiwgMCwgCi0gICAgODA0NywgMCwgNzg4MjcsIDEyNjM0LCA0MTU0MiwgNzg3ODAsIDc0NjYsIDY3MDUsIDEyMTc0LCA0MjYxMCwgMCwgNzQ0NTIsIAotICAgIDk4Mzc1NCwgMTU4NCwgNjY2NDUsIDYwNDUsIDY3MjksIDEyMDY0MCwgNjUyMTgsIDExNTU5LCAwLCA3ODA2MiwgNzUzNywgMCwgCi0gICAgMTEzNzAsIDAsIDEwMzMwLCAwLCAxMDM5NCwgMCwgNzQxOTQsIDAsIDEyNzkyOSwgOTc4MCwgMCwgMTMwOTIsIDE5NDU3NiwgCi0gICAgNzc5NTAsIDE5NDU3OCwgNzA3NCwgOTI2NDgsIDE5NDU3OSwgMTk0NTgyLCAxMTQxNCwgMTI4ODY4LCAyNTMxLCAxMzAzNCwgCi0gICAgMCwgMCwgNDIxMSwgMTI1OSwgNzUxNywgMCwgMCwgMTk0NTYxLCA0MDk5NiwgMTMwMzcsIDcwOTIsIDY0MSwgNTIxOSwgCi0gICAgOTQwMzQsIDE5NDU2NiwgMTEwNjQsIDQxMTI5LCAwLCA0Mjg1MCwgMTMwMzUsIDkwNzUsIDkyMzg3LCA1NDY2LCAxMjgxNTMsIAotICAgIDAsIDY0MDk4LCA2NTc5MywgNDUzNSwgMTk0NTczLCA0MjcxLCA3ODQxNywgMTI4MzU3LCA2NzY5LCA0MTQxMCwgOTgzNDQ0LCAKLSAgICA2NDI2MiwgNjc2NywgNDE0MDcsIDAsIDAsIDY3NTUsIDExODg2NCwgOTA0NiwgMTI3OTM0LCAxMjY2MDgsIDAsIDAsIDAsIDAsIAotICAgIDY3Njc1LCAwLCAwLCAwLCA2NDMzOCwgMjU2MywgMTMwMzMsIDI0NywgMTE4OTE1LCAwLCAxMjMzOCwgNDY1MSwgNjk4OTUsIAotICAgIDExMjcwLCAwLCAwLCAxMTkzMywgMCwgMCwgNDE5MDMsIDQzNDQ3LCAxMTAwMSwgMCwgNDIyNTUsIDAsIDkyNjYxLCA2OTgyMSwgCi0gICAgNDE5MDUsIDAsIDAsIDEwNzc1LCA5NzkzLCA1MDA5LCAwLCA0MjI2OSwgNjQ1ODcsIDk4MzA2MywgNDI1MzUsIDY5ODEyLCAKLSAgICA2NDUyOSwgNDE0MDgsIDQyODUzLCAzODc3LCAxMjA3OTUsIDQyNjc0LCA4MTQ3LCA0MzU2NiwgMTE5MDIxLCA5ODM3NjcsIAotICAgIDEwMjM2LCA2NTkxOCwgNDM3ODIsIDAsIDAsIDY0NTA2LCA2OTY1MiwgMTE4OTIxLCA0NzQ3LCAxMjgwNTgsIDY5ODQ0LCAKLSAgICA0MzIwMCwgNTgzMiwgMCwgMCwgNTE0MSwgNDI2MDAsIDAsIDQzMjAzLCAwLCA5ODM3OTAsIDQzMjg2LCAwLCAxMjgyMTEsIAotICAgIDQzNzc4LCAwLCA0MTMwNSwgNzg3NzYsIDQzNzgxLCAxMTMwMywgNjU1NDcsIDAsIDcwMzEsIDg1OSwgMCwgMCwgMCwgNjA1OSwgCi0gICAgMTI2OTg1LCA1NTIzNSwgMCwgODUzNSwgMCwgNjUxOTYsIDE5NDc4NywgNjYwMzIsIDExNDg4LCAxMjA0ODEsIDEyMDc4NiwgCi0gICAgNDIyMzMsIDY0MTQwLCA5OTQ2LCA2Mzg4NSwgMTk0NzkyLCAxMTgyMiwgMCwgNDMxODksIDk4Mzg4OSwgMCwgMTc4OCwgCi0gICAgMTU3OSwgMTIwNDgyLCA3MTI5OCwgMCwgMCwgMCwgOTAyOCwgMTE5NTcxLCA2OTIzNCwgOTQwNTUsIDAsIDEyODUsIDY0ODgyLCAKLSAgICA0MTI0MiwgNzAwODYsIDAsIDEyNjQwLCAwLCA3NDAxLCAwLCAxMjYyNSwgNjgxOTgsIDAsIDcwMDgyLCAzOTQwLCA0MTU5NywgCi0gICAgNDM3NTQsIDMzOTYsIDEyNjQyLCA4NjY1LCAwLCAwLCAxMjYzMCwgMTY1MywgOTE3ODE1LCAxMDE1MywgMCwgNjE2NiwgCi0gICAgMTIwNTE2LCAxMTg5ODksIDAsIDg4MTUsIDY2NjczLCA2NTA0NiwgOTI4NSwgOTEzLCA0MjI1OSwgMTE5MzE3LCAxMTkzMTgsIAotICAgIDIxNDIsIDY4NDU0LCA0MjQ4NSwgOTQwMTIsIDc4NzgsIDgyMTEsIDQyMjkzLCA2NDM3NywgMCwgOTI2NDMsIDAsIDE5NDY3MywgCi0gICAgMTIwMzIsIDAsIDk3MjUsIDAsIDc4NDMxLCA1MjYzLCAxMjgxOCwgNzg0MzAsIDQxOTM5LCAxMDAyMiwgNjUzODcsIDc4NDE5LCAKLSAgICA0Mjc3NywgMTAxMzksIDk4MCwgNDM2OTgsIDY1Mzg2LCAyMjA4LCAwLCA0MzcwMSwgNDMxOTgsIDcxODQsIDEyMDY3MywgCi0gICAgMTk0Nzk3LCA5MTc4MTksIDEwMDg1LCAxMTk5OTIsIDAsIDExOTk5MywgNjYzNCwgOTIzNzMsIDAsIDExOTMyMywgODA3MiwgCi0gICAgMTE5MzIxLCA0MzcwMCwgMCwgODg3MiwgNzc4MywgOTE3OTkyLCAxMjM5OCwgODIzNywgMCwgMCwgMTIzOTUsIDAsIAotICAgIDEyNjk3NywgMTIwNTY1LCA5OTE0LCAyMjE3LCA5MTc4NTQsIDczOTc1LCA2MzY3LCA2MzUxLCA2NjY4OCwgMCwgNzgxMDcsIAotICAgIDAsIDY0NzM1LCA0MTI0MywgOTIxOTksIDc4MDgsIDE4MjksIDAsIDQxOTM3LCA0MzU4LCA0MzI3MiwgNjM1MywgMCwgMCwgCi0gICAgMTIwNDIyLCAwLCAxNzEwLCAwLCAwLCA2NTYwNywgMCwgNDksIDY2MjcsIDAsIDYyNTgsIDEwNjgzLCA3ODY3MiwgOTc0MSwgCi0gICAgNzgzMjksIDU2NDksIDc4NDQxLCA0MzQ0MywgNjQ0MTgsIDE2NDMsIDY1MjEzLCA4NDA1LCAzNDcwLCAxMjgyMjUsIDEzMjEzLCAKLSAgICA0MjQ1MiwgNzgzMzEsIDEyMDY2NCwgNzg0NDUsIDAsIDEwNzIsIDc4NDU3LCA3ODQ1MiwgNzg0NTQsIDY1NzYsIDQxOTg4LCAKLSAgICA0MTEzMiwgNjU2NzUsIDEwODAsIDEyMDAwMiwgOTg4NiwgNTUyMjUsIDExMDEsIDY4NDA0LCAxMjMwOSwgNTUyMjcsIDAsIAotICAgIDEyNjMyLCAxMDg2LCAxODY5LCA3ODY4NSwgNzY4MCwgMCwgNjU0NTgsIDEyMDcxNCwgMTI2MzksIDMzODAsIDgxMjMsIAotICAgIDEwOTEsIDEyNjM4LCA3OTc3LCA0NTAxLCA0MTA5OSwgMCwgNjYzMDksIDAsIDAsIDE0OTQsIDk4MzE0NiwgMTI2NjEzLCAwLCAKLSAgICAxMTY5MywgMTI2NTEzLCAxMDQ5NCwgOTI2NTUsIDY1ODcyLCAxMjM2MywgMTEzODYsIDAsIDAsIDAsIDAsIDY0NTgyLCAwLCAKLSAgICA3Mzc5NCwgMCwgODAyMiwgMCwgMTIwNDYyLCA3NDEwNiwgMTI0MTMsIDk0MDY5LCA5MTc5OTQsIDkxNzk5MywgOTE3OTk1LCAKLSAgICA1NTcwLCAxODgxLCA3MjEwLCAwLCAxMDEyLCA0Mzc1MiwgMCwgMTIwNzA5LCA3MjA4LCA2NjQ0MiwgNTU2OSwgOTgzMjM2LCAKLSAgICA0MjMzOSwgMCwgNjA2MywgMCwgNzgzODMsIDExOTU5NCwgNjA1MywgNjU2MDIsIDAsIDkyMjAxLCA2NDcyNywgOTE2MCwgCi0gICAgMTk0ODI3LCAwLCAwLCA5MjE4MCwgMTA1MDMsIDExODgxMCwgNjA1NSwgMzg3MCwgNDI3OSwgODQ5MCwgMTIwMTE0LCA0MzE5LCAKLSAgICA2NDc4NiwgODYwMiwgMTIwMTEwLCAxMTMyNiwgOTIyMDQsIDk4MzExNiwgMCwgMTIwMTE5LCA3ODMzMywgMTIwMTE3LCAKLSAgICAxMjAxMTgsIDEyMDA5OSwgMTIwMTAwLCA2NTA4NywgNTU3MSwgMzY3NCwgOTc0MCwgOTEyMSwgNTU2OCwgMTIwMTA3LCAKLSAgICAxMjAxMDgsIDQyMDg1LCAxMDEwNywgNDIxNTksIDQyODcwLCAxMjAxMDEsIDU4OSwgNzA1MCwgOTgzNzkxLCA0MzI4MSwgCi0gICAgMTAyMzMsIDQxMjYzLCA2NjI1MSwgNjU3MjksIDY2MjUzLCAxMjY0OTcsIDc0MDk5LCA0MjY0NSwgMCwgMTk0ODE1LCA4NTgzLCAKLSAgICAwLCA1ODQ3LCA2OTI4LCAxMjgwNzQsIDAsIDAsIDAsIDAsIDY2NTkyLCAxMjIwNCwgOTE3OTYyLCAxOTk2NiwgNzc4NTYsIAotICAgIDQyNTYxLCAxMjA2MjYsIDk4MzI0NSwgMCwgODEyMCwgMTIwNzAxLCAwLCAwLCAxMjgwMTIsIDQxMDYzLCAwLCAxMDY2NCwgMCwgCi0gICAgODM2OSwgMCwgNDU1MSwgMTk0OTY0LCAzMzY5LCAwLCAwLCA5NjczLCA2NjMzNCwgNjU1ODAsIDEwNDc4LCAxMTg5NjAsIAotICAgIDEyNTE3LCA1NTcsIDk0NTcsIDEyMDM0LCA5ODM2NjIsIDYzNTUsIDEyNTE5LCA0MTAwNCwgMCwgMTk1MDI1LCA3NDA5NCwgMCwgCi0gICAgMCwgNzc5NzAsIDk4MzU2MCwgMCwgMTI4MTc1LCAxMjExMSwgMzkyNywgMCwgMTI1MTUsIDE0NzQsIDY3ODkzLCA1NDkyLCAKLSAgICA2OTIzLCA5MjI4MSwgMTA0NDEsIDczODM2LCAwLCA0Mzk5MCwgNTQ5MywgMCwgNzQzMTksIDAsIDY2NjM1LCAxMjAxOSwgMCwgCi0gICAgMTYxOCwgMCwgMTIwNDc0LCA5NjQ1LCAxMDQzMCwgOTE3OTU5LCA1ODUzLCAxMzA2MywgMTAzNjMsIDAsIDEyOTU2LCAKLSAgICAxMjgxNjksIDEyMDcyOSwgMTEzMTQsIDkxNzU4MiwgMTIwNjAsIDAsIDc4MzkyLCAxMjgyNiwgNjMyOSwgMCwgMTA1MTQsIAotICAgIDY1NTE3LCA3NDM5NSwgMjcwNywgODMwOSwgMCwgMTI3MDU0LCA3ODM5OCwgNDM1NzAsIDI2OTcsIDQzNDIwLCA3ODM5NiwgCi0gICAgMTI3MDU3LCAyNjk1LCA0MjE3MSwgMCwgMCwgMCwgNjc2MTcsIDExODk3MSwgMCwgMjY5MywgMTIxMjUsIDEyNzY2LCAwLCAKLSAgICAxMTY0LCAxMjg4MTcsIDAsIDQxOTE4LCA5ODMxNjgsIDEyNzU0MiwgODY4NywgNjYwMDksIDEyMTc4LCA3MDUzLCAxMjgwMDEsIAotICAgIDc0NjksIDAsIDUyNDgsIDEyMjE4LCAxMjA1MzgsIDY0MjcsIDQyODg0LCA0MTEyMywgMCwgMCwgNDI4NzMsIDQxMTI2LCAKLSAgICA5OTkxLCA0MTEyOCwgNzQzNzEsIDEyNzAzMSwgMCwgOTg3MywgMCwgNDI4NzcsIDc5OTQsIDY0NzYyLCAyMDUzLCA0Mjg0MywgCi0gICAgNjU5MSwgOTM0MCwgMCwgMTU4OSwgMCwgMjk2LCA3NDQzOCwgNzg4NTIsIDAsIDY3ODQxLCA3NDM3MCwgMCwgODkyMiwgCi0gICAgMTI4MDY4LCA3NDYwMCwgMTI3MDAsIDc0ODM2LCAwLCAxMjU3OSwgMCwgMTI1NzUsIDY0MTYsIDU2NTYsIDI4OTEsIDEzMjYyLCAKLSAgICA2NTU5MCwgNTI5OSwgMCwgMTE0NzMsIDU0NDksIDEyNTIsIDAsIDc4NDA0LCA0MTQzMSwgNzQzNjksIDY1MzczLCA1Mjk1LCAKLSAgICA5MTc1NjksIDc0MTE0LCAxMjIzLCAxNjQyLCAxNzQsIDc4Mzk5LCA4ODMsIDQxNjEsIDEyNjkxLCA0MjYwMywgNDE0MTMsIAotICAgIDMyMTIsIDQxNDU5LCAzMjExLCA3NDgxMCwgNDE0MjUsIDEyNzAyOSwgNzg0MTIsIDc0NDUwLCA5NzI4LCAzODQ2LCA4MDcwLCAKLSAgICA2MTUwLCA2NjM2LCA0MzcwLCAwLCAwLCA3NDE3OCwgNzQ1ODcsIDc0MTE3LCAwLCAwLCAwLCA0OTg2LCAxMjE4OSwgMCwgCi0gICAgNjc2NDgsIDEyMDQ5OSwgOTQwMDEsIDQyNTcsIDEyMTA0LCA3Nzk0MiwgNjIyMCwgOTAwNCwgNjU1NjEsIDAsIDc3OTQ5LCAwLCAKLSAgICA2ODEzNSwgOTE3NTc2LCA3Nzk0NiwgMCwgNjk2NzksIDY5Njg0LCA5ODkwLCA3ODU2MSwgMTI5NzEsIDc4NDUzLCA5MjU1NiwgCi0gICAgNzM4OTgsIDExOTc5LCA3MDA1MSwgMTE4OTAwLCA5MTc4OTQsIDAsIDk2MzUsIDEyNjAwLCA4ODcxLCAwLCAwLCAwLCA2NDY5LCAKLSAgICA3NDIyNywgMCwgNjUzMDQsIDQ2NzksIDEwMjMwLCA2NDMwMCwgNjQ4NjcsIDM0MjcsIDQyNDAsIDAsIDAsIDAsIDAsIAotICAgIDQyOTE2LCAwLCAwLCAwLCA3MjgyLCA3ODcyOCwgNjU3MzMsIDQ0NDUsIDEyNzEzOCwgMTI4MDgyLCAzNDk0LCA3NDYwNiwgCi0gICAgNjU1NSwgMCwgNzc5NzYsIDAsIDAsIDc4NTY2LCAwLCA5ODMxODksIDY1ODk4LCA5ODMyMzgsIDY1MzEyLCA1NDQ3LCAwLCAKLSAgICAxMjg5NSwgNjU1OTMsIDQwMTAsIDAsIDQxMTA2LCAwLCA2NDQ0OCwgMCwgNDExMDUsIDAsIDY1ODIwLCA2MjMyLCAwLCAKLSAgICAxMjgyODAsIDAsIDQzNjA4LCAxMTkwOTEsIDAsIDY1MzgsIDQzMzUsIDc4MzY0LCAzOTQxLCA0MTEyMiwgMTEwNjEsIAotICAgIDc4MzYzLCA2NDg5MiwgOTExMywgMTk1NCwgMTIxNTUsIDk4MzY2NSwgNDI4NzgsIDExNTAwLCAwLCAwLCA3NDU3OCwgMCwgCi0gICAgNjU4MzIsIDAsIDAsIDAsIDc3OTc1LCAxMTkyMzAsIDQ1ODYsIDAsIDM1MCwgMTA5NTEsIDAsIDUwOSwgMCwgMCwgOTIzMDcsIAotICAgIDAsIDAsIDUxMzMsIDAsIDAsIDk1MDAsIDAsIDQ5NTcsIDY0NzQxLCAyNDIyLCAyMjEyLCA5ODMwODAsIDAsIDAsIDI0OTYsIAotICAgIDExNTE2LCA5NDQsIDExODg1MSwgMzg5MCwgMTIxNjgsIDE0MzgsIDAsIDk4MzExNywgMCwgNDE5NDcsIDEyMjAsIDEyMDgyOCwgCi0gICAgMTI4NTU1LCAwLCAwLCAxNTcxLCA0MjYzMCwgNDE5NDksIDQyODA1LCA4MjcwLCA5NDMsIDU2NCwgMCwgMzEyLCA0MTk4MCwgCi0gICAgOTgzOTM1LCAwLCA3ODEyMCwgODg3NywgMjY5LCA0NDI5LCA2MjcyLCA5NjE3LCAxNDYwLCA2OTU0LCA3ODY1NywgNDExMjAsIAotICAgIDY1MTIxLCAxMDg2MiwgNjA2MCwgNDExMTksIDQxNDE2LCA3NDM1NSwgNDE3MywgMCwgMCwgMCwgMTkwNiwgOTE3OTg2LCAKLSAgICAxMTUzMiwgNzQwNzMsIDEyNzMzOCwgMCwgMTk4NSwgNjI5NiwgOTU4MiwgOTE3ODk1LCA2NDI4NywgMCwgNzgxMTUsIAotICAgIDExNDI4LCAxNzMwLCAyNDU3LCA5MTc4MDgsIDE5OTE4LCAxMDQ2OSwgMCwgMCwgNzcwMywgODg0MCwgODAzNSwgMCwgMCwgCi0gICAgOTIyMzAsIDAsIDYxMjksIDAsIDEyODUyOCwgMTI4MjY4LCAwLCA3ODc0LCA4NjgxLCAxMTkwOTIsIDAsIDEzMTM2LCAwLCAwLCAKLSAgICA3MDEwMiwgNjM4ODYsIDExODg4MSwgOTYwNSwgNzEzMDgsIDEzMjIwLCAxMjg3NzYsIDEyMDI3NCwgNTUxNCwgMCwgOTIyOCwgCi0gICAgMCwgMCwgMCwgNTI0MCwgOTgxMSwgMTAwMTIsIDMwOTYsIDAsIDAsIDk4MzM0MywgNjY2NzYsIDY1ODczLCAwLCAwLCAwLCAKLSAgICA5NTAxLCAwLCAxMjcyLCA2NDUzNiwgNjU0NjUsIDY0NjU0LCA3NDY3LCAwLCAxNDY3LCAxMDE1OCwgMTAwNDAsIDAsIDk1MTksIAotICAgIDAsIDkxNzgxMiwgMCwgMTE4ODk5LCAxMjE5MywgMCwgMCwgMCwgMCwgOTgzMzQ1LCAxOTkzNSwgMCwgOTIxNjIsIDY5Njc2LCAKLSAgICAwLCAwLCAwLCA1Mjc1LCAwLCAwLCA4NjM3LCAwLCAwLCAzNzg5LCA2Mzg4MCwgMTE0NzEsIDQzNTU0LCA2NTg2MiwgMTE0NzQsIAotICAgIDY2MzMyLCA2NjYwMywgMTI4MTM4LCAyNDI2LCAxMjA0MiwgOTIxOTQsIDk4MzkwMiwgOTUzNywgMzk2MSwgMTIxMTUsIAotICAgIDc3OTUzLCAyNjA1LCA0NTAwLCA2NDU2MSwgNTUyMjQsIDQ5ODEsIDAsIDAsIDYzODc2LCAxMTY2NywgNDI2ODYsIDc3OTczLCAKLSAgICA0MjM2MiwgNjQ2ODYsIDQ0OTksIDQxNjQ5LCA3NTg5LCAwLCAwLCAzMjM3LCAwLCA2ODIxNSwgOTE3OTA0LCA4NTQxLCAKLSAgICA3ODI5OCwgNzAwMzQsIDQxODY2LCAwLCAwLCAwLCAwLCA2OTkyNCwgNDM1NTUsIDI4MjMsIDk1NTksIDEwMDYwLCA0MTk0MCwgCi0gICAgODI5OSwgNDE5NDUsIDcxMzIsIDQxOTQxLCAzMzA4LCA3MTkwLCA2NDg4MCwgODYxNCwgNjUyMjAsIDQxNDkzLCAwLCAKLSAgICA0MTY5OSwgMTA3NjIsIDQzNzgwLCAxMjk5OSwgMCwgMCwgODEwNiwgNDEyOCwgMCwgNjI3NCwgNDQ5NCwgMCwgNDAxMiwgCi0gICAgMTAzOTUsIDk4MzU5MSwgNDM2MzMsIDY1NDQ3LCAxMjY1MTEsIDAsIDExMDA0LCA2OTUsIDczOSwgNjk2LCA3NjExLCAwLCAKLSAgICA0Mjc1NSwgNzQ4MDIsIDkyMjcsIDc1MDYsIDc1MTAsIDY5OTM3LCA2OTEsIDczOCwgNzUxMSwgNzUxMiwgNzUxNSwgMzg2OCwgCi0gICAgNjg4LCA0MTg0NywgNjkwLCAyNTQ4LCA3MzcsIDk3NCwgODAwMywgNzQwNiwgOTE3OTExLCAwLCAxMjg2ODgsIDM5ODUsIAotICAgIDkxNzkxMiwgNjU4NjAsIDYzOTIxLCA3MDUxLCA2OTc3NywgNDY4MiwgOTE3ODA1LCAxMjgwOSwgNjQwNiwgNDY4NSwgCi0gICAgOTI1MDUsIDEwODc5LCAxMDM0NywgNDY4MCwgNjM0MSwgMCwgMzg1MSwgODEzMiwgNzQzMjUsIDAsIDkxNzkwNywgMCwgCi0gICAgNDE5NTgsIDExOTE3NiwgOTE3OTA4LCAwLCAwLCA0MjY1NywgOTI0NjgsIDc2NDMsIDQyMzczLCAxMTcxNCwgNjc1ODcsIAotICAgIDQzNTY4LCA5ODMxNzUsIDExNzE3LCA3NjUwLCAxMDU5NCwgNjQ5NTEsIDc2NDcsIDc2NDksIDEyODE1NSwgNzY0NiwgMCwgCi0gICAgNzgwODIsIDk2NTEsIDAsIDM4OTEsIDAsIDAsIDIzMzcsIDE3MzUsIDc0MzI0LCA2Nzg2MCwgMjM2MywgOTgzMTM1LCAwLCAKLSAgICA0MzU2MSwgMCwgMCwgNzQxNDYsIDE4NjAsIDc0OTUsIDc1ODAsIDU4MTIsIDc0OTcsIDc1ODQsIDExOTE0MCwgMTI3ODUzLCAKLSAgICAwLCAxMjAzNDcsIDc3MjcsIDAsIDg0OTgsIDY5ODE4LCA4OTQ5LCAzMDY1LCA0MjcxOSwgNzEzNSwgMTU2OSwgOTIzNzUsIAotICAgIDEyNTM0LCAxMjEyNCwgNzY5MCwgMCwgMTI1MzMsIDk4Mzg3MCwgNjQxOCwgNDU0MywgNzgwODYsIDY5NjksIDAsIDc0ODAwLCAKLSAgICAwLCA2Nzk3NCwgMTE5ODAsIDEyODY1MCwgOTgzNzkyLCA2Mzg5NCwgMTIwNzYwLCAxMjI4MiwgNjYxOTIsIDAsIDc0NTkyLCAKLSAgICA4ODUwLCA3NDI3NSwgOTIzOCwgMTA2MTcsIDkxNzU0NSwgMCwgOTI2MjUsIDAsIDEyNzkxLCAwLCAwLCAxMjc4NDMsIDQ0NDcsIAotICAgIDczNzMyLCAxMjc5MywgMTI5MDAsIDkyMzc3LCAxMDk1MCwgMCwgNzgwODcsIDEyNzkwLCA0MTQwMCwgMTE5MTI4LCA2NjYwNywgCi0gICAgMTI3OTIsIDQyMjMyLCAxOTQ5MzgsIDE3NDQsIDEyNzg5LCAxMDM2NiwgMTIzMTcsIDQxMzEwLCA5ODM4NjAsIDQxMzk5LCAwLCAKLSAgICAwLCA1NTI1OCwgMCwgMTI2OTAsIDAsIDAsIDQzNjcyLCAxMjc4NDAsIDQxNjUyLCAyOTc0LCA5MDEwLCAxMTMxNSwgMCwgCi0gICAgMjc4LCAwLCA0MTQwNSwgMTE5MjU0LCAwLCAxMDA3NywgNjM4NTMsIDc0NTU3LCA0MjU4NiwgMCwgMCwgNjAwMiwgMCwgCi0gICAgNDM1NTMsIDAsIDY3OTAzLCAwLCAxMjc4NywgNDEzMDgsIDc5MzQsIDY1MzA2LCAwLCAwLCAwLCA4NjQ2LCA5ODMxODYsIAotICAgIDc3ODI5LCA3MTM2MCwgMCwgNjQxMywgNjU1MCwgMCwgMTk0MCwgMCwgNDM2MzcsIDIyMCwgNjUxOTMsIDQzNTUxLCAxMDY3OCwgCi0gICAgMTAwNDQsIDEyODMyMiwgMCwgMCwgNjg2NTksIDY0MDMsIDU3MDcsIDEwMzkzLCAxMjc1MzIsIDAsIDY2NjE0LCAwLCAwLCAwLCAKLSAgICAxMDI5NywgMCwgMzc0MiwgMCwgMzk1OSwgMCwgMCwgMCwgMjQ2NywgMCwgNjAwMywgNjM4NDQsIDY2NjMsIDgwNDAsIDAsIAotICAgIDQzNzU4LCA0MTgyLCA3ODE3MSwgNDY3NiwgMTIwNTAxLCAwLCAwLCAyNTEwLCAwLCAxMDIwOCwgNzgxNjgsIDkyMzYxLCAKLSAgICAxMTU0MCwgNDM1NDYsIDY2OTIsIDAsIDQxMDYwLCAwLCA0NjY4LCA5MDgzLCAwLCAwLCA3ODE0NCwgMTU1OSwgNjM4MzEsIAotICAgIDk2NzcsIDEyMDI2MCwgMCwgNjUyNTYsIDAsIDc0MDcwLCAwLCAwLCAzNjUsIDEyMDU2LCA0MzAyNywgMTIwNDIzLCA0MTcxNiwgCi0gICAgMTI4MjM2LCAwLCAxMjA0NzIsIDU1MTYsIDI4NDUsIDc3MTcsIDgwMzYsIDQxNzE3LCA3MzgyNywgNTQ0LCAxMjA0NSwgCi0gICAgNjI3OCwgMCwgNTUxNSwgMCwgMCwgOTgzMDUxLCA2NTMzOSwgNDMyMjEsIDIyMTEsIDAsIDU1MTcsIDAsIDAsIDc0ODQxLCAKLSAgICA2Nzg4NCwgMCwgNjc4OTAsIDY3ODg1LCA2Nzg4MCwgNjc4ODEsIDY3ODgyLCA2Nzg4MywgMCwgMCwgNjc4NzksIDEyNzE4OCwgCi0gICAgMTkwMiwgNjc4ODcsIDk2MzgsIDEyOTc2LCAxMjY1NDYsIDEyNDgzLCAxMjM2OCwgNDE3NjksIDQyNzI2LCA0MTc2NSwgCi0gICAgNzM2MSwgNjY2NywgNjc4NzQsIDc1NTYsIDY3ODc4LCA3NDM1MSwgMTEyNjQsIDk4OSwgNDI2NzcsIDY3ODg5LCAwLCAxMzExLCAKLSAgICA5MTc5NjYsIDQzMjYsIDExMDAwLCA2MzgyNCwgMTMwNjgsIDEwOTMyLCAxMjg4ODAsIDY5MTcsIDc4MTU1LCAwLCA5NDksIAotICAgIDc4MTYyLCAwLCA2MTQ4LCA4NjA1LCA0MjI1MywgNzgxNzcsIDAsIDAsIDQyNzE1LCAwLCAwLCAwLCA2Mzg3MSwgMCwgCi0gICAgNDE3OTYsIDEyNjksIDY1MzAsIDAsIDY1MDU3LCAwLCA1MTQ0LCAxMjIyMSwgNDI3MTYsIDAsIDQ0MzEsIDQzMzEsIAotICAgIDk4MzcyMCwgMTI4Njc1LCA0MTgzNCwgNTI3OSwgMCwgMTAzMzYsIDgzMTIsIDAsIDQyNzAxLCAxMjg4MjUsIDAsIDc4MTY1LCAKLSAgICA2NjAzNiwgMCwgMCwgNjQyOCwgNDIyNzAsIDAsIDk4MzU5NiwgNDMwNTksIDQyNjY2LCA1MjU2LCAxMDY3LCAyNTUsIAotICAgIDEyMTMxLCA5ODM3MTMsIDk0OTMsIDk4Mzk1OSwgNDEwMTQsIDExNzkzLCAxOTQ5MjAsIDAsIDc0Mzk0LCA0MzQ2MCwgCi0gICAgMTA2NTMsIDQyNzIzLCA5ODM4NDUsIDExOTYzMiwgMCwgNjU2MCwgNzAxNiwgNzQyNzQsIDk4MzYxNSwgNDM1NTYsIDM5MjksIAotICAgIDY3OTc3LCA2NjE0LCAyNzY4LCA5MjUwNCwgOTc0NiwgNTEzNSwgMTE4MTEsIDEyNzk2LCAxMTk1MywgMCwgNjk3NjEsIAotICAgIDUxMzksIDM0NiwgNzQzMDMsIDYzMDUsIDEyNzk1LCA0Njc1LCA1MTY4LCA3ODU1MiwgMTI3NzUzLCA3NDMxNSwgNzQzNjEsIAotICAgIDgyNTMsIDg4MTcsIDExMzYsIDAsIDQzNTYzLCA5MjIzMiwgMCwgMTk0NzUwLCA3MzkyLCA4MjMwLCA5MzY1LCAwLCAwLCAKLSAgICA5ODM2MDcsIDAsIDAsIDQwNDEsIDAsIDIzNTcsIDQzMjQwLCAxMjc4NiwgMjI5LCAxMTk4ODUsIDExOTg4NCwgNDQwMDQsIAotICAgIDcxNDIsIDExOTg4MSwgMTIzNTAsIDY1NTU0LCAxMTk4ODIsIDExOTg3NywgMTE5ODc2LCAxMjc4NSwgNjM4NjMsIDQzNzk1LCAKLSAgICA3NzcwLCAxMDcxMiwgNjQ4NTMsIDEyNjg2LCAxMTg5MTYsIDQyMzc1LCAwLCAxMjcyMzgsIDY2MzUyLCAxMDQ3MCwgMCwgCi0gICAgMTEwNTksIDEwNzkxLCA5MTc5NDQsIDQ1MCwgMTE5MzI4LCAwLCAxMDQzMiwgMTIwOTcsIDU0NTAsIDY0NjkxLCAxMjMzLCAwLCAKLSAgICA0NDAwOSwgNzgyODQsIDY2MzM4LCAwLCAwLCAxODM5LCAxMTg3OTksIDk4MzIxNywgMTA5MjcsIDE3MDEsIDk4MzY1NSwgCi0gICAgMjM4OCwgNDE3NDksIDQxNzYxLCA1NDUzLCA4MzYxLCAxMTk4NjUsIDQxNzU4LCA1NDQ0LCA0MTc2MywgNjQ4ODksIDcxNDMsIAotICAgIDkyNDkzLCA3ODY3NywgMCwgOTI0MjksIDc4MTc0LCA2NjQzMiwgODgwMSwgMzA1MywgNDM0MCwgOTgzMDQ0LCAwLCA2NTgxMiwgCi0gICAgOTE3ODMxLCAwLCA0MTgyNCwgNjc5ODUsIDEyMDIwMywgMTk0ODAwLCAxOTQ4MDMsIDQyNzAwLCAxOTQ4MDUsIDEyNzk4MCwgCi0gICAgMTk0ODA3LCA3ODY3NiwgOTIzNTYsIDE5NDgwOCwgMCwgMCwgNDQ5MywgNDMzNiwgMCwgMjMxNCwgNDM2MDIsIDc4ODI2LCAKLSAgICAxMTkzMjUsIDE5NDgxMSwgNDI0MzksIDY0NjM4LCA0MjMyNywgNDM1MjgsIDQ0ODksIDcxMzMxLCAwLCAxOTQ3OTMsIDE5MTIsIAotICAgIDQyMzg1LCAxMDMwNiwgMTAzNzAsIDAsIDAsIDg4NjcsIDEwMjUwLCAxMDI1OCwgMjcxMiwgMTYzNSwgNzg4MjEsIDE0MTAsIAotICAgIDkyNjcxLCA5ODMyNDQsIDExODg3OCwgMCwgMCwgOTkxOSwgMTIwNTI4LCA1NTksIDEyODE1NywgNDE4MjUsIDEyNzk3NSwgCi0gICAgNzgxODgsIDQ4OTIsIDc0MDE2LCAxOTQ3ODEsIDY1NDIsIDQxOTU3LCAxMjg4NjUsIDU3NzcsIDAsIDc1OSwgNjU3NDksIAotICAgIDIwNzksIDY1MjQ4LCAxMjc4OCwgNjQ0ODcsIDY0NTUyLCAwLCAxMDIyMywgNDIwNjIsIDAsIDAsIDEyNjU3MywgMzY2OCwgCi0gICAgNjU3NTQsIDQzNTYwLCAxMjIyNiwgNjc5OTEsIDY1MTQ5LCAyMzQwLCA0MTk1OSwgMTk0Nzg2LCAxOTQ3ODUsIDE5NDc4OCwgCi0gICAgNDM2MTgsIDY1NzQ3LCAxMDkzNywgMjk2MiwgMCwgMjMyMSwgMzU4NywgNjU3NDUsIDkyNDM2LCA4OTIxLCA5OTUyLCAwLCAwLCAKLSAgICA0MjcxNCwgOTk1MSwgNDM0MDksIDE5NDc3MCwgMjk0OSwgNjYwMTIsIDE5NDc3NSwgMTk0Nzc0LCAyOTU4LCA2ODM1OSwgCi0gICAgNDE4MjAsIDIzMDAsIDIzOTUsIDEyODU2MywgOTk3NiwgMTIwMDQzLCAxMjAwNTAsIDEyMDA1OCwgNjgyMjAsIDEyODE0MywgCi0gICAgNDI4MDksIDQyODA3LCAwLCAxMjAwNDYsIDEwMTk4LCA0MTUwLCA2NDM3MSwgODMxOCwgNDE3OTAsIDY3OTc2LCA0MTg5OCwgCi0gICAgMjM2MCwgNDE3OTQsIDkxNzk0MiwgNzEzMTQsIDEyNzgxOCwgMCwgMCwgMjQxOCwgOTgzMDk4LCAyNDExLCAxMTMzNiwgNzk5LCAKLSAgICA2MzgyMywgMTAyNzYsIDEwMzA4LCAxMDM3MiwgOTE3NTQxLCA0MTc3MiwgNDI4MTMsIDIzMTcsIDEwMjYwLCAxMTg5ODAsIAotICAgIDU1Mjg0LCA5MjIwMywgMCwgMTAzODQsIDk4MzIxOCwgMCwgMCwgNzc1MywgMjM1MSwgNjY1NSwgNjQ0ODksIDY5OTMxLCAwLCAKLSAgICA3Nzg3MiwgNDQ0MywgNDI3NzksIDIzMCwgMCwgMCwgNDM1NDksIDQ4NTUsIDQyMTUwLCA2NTczOSwgNTQ0MSwgNDE4OTYsIAotICAgIDEwMjg4LCAxMDMyMCwgMCwgODU1LCA3MDQ2LCA2MTA5LCA2NTA0NSwgNjM4MzksIDc4MTk4LCAyMDQ5LCAxMDA5OCwgMCwgCi0gICAgNzQxNDUsIDEyNzk0MywgMTAyNjQsIDEwMjgwLCA5MTg0LCAxMDM3NiwgNzAxMywgNDQ2NywgMCwgMCwgMCwgNDE4ODcsIDAsIAotICAgIDQ4NjIsIDk3MzUsIDY1MzcsIDEyMDU5MSwgNzQyODYsIDM5MTQsIDkyMTc4LCA5Mzk3NiwgOTA2NSwgMTI5NjEsIDAsIDAsIAotICAgIDkyMjUzLCAwLCAyODksIDAsIDQ2OTQsIDExNDIwLCA0NjkwLCAwLCAxMjA1MTQsIDkxNzk3OCwgNDY5MywgNzM4OTMsIAotICAgIDQyNzI0LCAwLCA0Njg4LCAxMjA0NTQsIDAsIDAsIDY3OTk0LCA4MjM4LCAzMTEwLCAxMjAxNjIsIDk4Mzg5OSwgMTIwMTYzLCAKLSAgICA2NTI4LCAxMjc1NTMsIDQzMDM1LCA2OTg5OCwgMjE4LCAwLCAxNTIwLCAwLCA0Nzg2LCAwLCA0MzIyNSwgNDYwMiwgMCwgCi0gICAgNzgxNjcsIDEwMDg4LCA2NTQ4LCAwLCAxMjAxNTYsIDQzOTc4LCA4OTg4LCA4ODg4LCAwLCAwLCAwLCAwLCAxMDY2NiwgMCwgCi0gICAgNzM5MDIsIDY5NzQwLCAwLCAwLCA5OTc1LCAxMjgwMzksIDExOTkwMiwgNDY4OSwgODkzMiwgMCwgNjU1NjAsIDExOTIwOSwgCi0gICAgNzQ0NDEsIDc4ODEwLCAwLCAwLCA2Nzk4NywgMCwgMCwgMCwgNjc5ODksIDAsIDEwMDY1LCA4MjA3LCAwLCA5MjYxMywgCi0gICAgMTI4MDExLCAwLCA2NjIsIDAsIDkyNDQsIDE5NDg2MywgMCwgMTE5MjYxLCA5ODM0MjAsIDAsIDAsIDAsIDQxOTI5LCAwLCAwLCAKLSAgICA2NjY3NCwgNDE5MjYsIDEyMDQwOCwgMTIwNDQzLCAxMDUxMywgNjQ2MzcsIDE5NDg2MiwgNjgwMTMsIDUyLCAxMzExOCwgCi0gICAgNjQ3NSwgMCwgMTIwMzQxLCAxMjA5NSwgMTAyMjUsIDQ4MTIsIDkyNTc4LCAwLCA2Nzk5MiwgNzQwODUsIDAsIDM5NzgsIDAsIAotICAgIDkxNzk0NSwgMTI3ODIzLCAxMTU4MiwgMTIwNzYxLCAxMjI4MSwgMCwgNjU0NCwgMTMyNDEsIDkzOTYxLCA2OTc4MiwgCi0gICAgMTI4NTU3LCAxOTQ4NjAsIDExNzY1LCA2NTI1OCwgMTAzNjksIDAsIDE1ODUsIDcxOTIsIDEwMjQ5LCA0MjIsIDE1MDAsIAotICAgIDIwMzYsIDk4NiwgMTk0ODU5LCA2NDM5NCwgNTc4MSwgNTU5OSwgNjQyOTQsIDI0OTQsIDEyMDQ1MCwgNDg2MSwgNzQwMjEsIAotICAgIDY0MzM0LCA3ODIwMywgMTI3ODA4LCAwLCA5MjI2NiwgNjUxMDIsIDg5NjEsIDY1ODQyLCAxMDI0MywgMTAyNDUsIDc0MTkxLCAKLSAgICAxMjA0MTAsIDAsIDEyMDQ1MywgNjQ4MjEsIDk0NzgsIDI1MDgsIDkyNjgzLCAwLCAyMDIsIDEyODI0NiwgNzQxMzEsIDEyNDIsIAotICAgIDY1NTE0LCAwLCA2Mzk0MCwgMTI4NzA2LCA2NDUzMywgMTIwMTI5LCAwLCA2Nzg0MiwgMTE5OTAsIDkyNDMwLCA2MzkzOSwgCi0gICAgNDMzNzUsIDY1NDQwLCAyNTA0LCAwLCA3ODY3MSwgNjQ4MjksIDk4MzkwMSwgNjk0MywgOTE3OTM0LCA1ODU5LCAwLCAyODU4LCAKLSAgICA5ODMzNTMsIDc0Mjk0LCA5ODM5MDUsIDY5MjM5LCAwLCAxMTkwMjcsIDEyOTkyLCAyNzUzLCAxOTM2LCA3MDA3OCwgOTI1NzQsIAorICAgIDE5NDYwOSwgMCwgODI5NSwgNjg1LCA5MDI1LCAxNTI0LCAxMjYxOCwgMCwgNTUzOSwgMCwgOTI1MjMsIDEyMDEwMiwgNzEzOCwgCisgICAgMTIwNTUyLCAwLCAxOTQ2MTEsIDc4NzUyLCAwLCAxMjUyMCwgODA1OCwgOTczMiwgMCwgNTA4MCwgNjQ3NzUsIDUwMzYsIAorICAgIDUwMzUsIDEyMDU5MCwgNDI2MDQsIDk4MzY1NiwgMCwgODA3NCwgMjc1LCAxMzI5MSwgMTkwNywgNzg4MzgsIDQ0MzIsIAorICAgIDEyNzI3MSwgNTAzMywgMTI3MjczLCAxMjcyNzIsIDQ4MzYsIDM4ODgsIDczNzkyLCAxMDcyOSwgNjQ1NDYsIDEyNzI2MiwgCisgICAgNDM3MDQsIDEyNzI2NCwgMTI3MjUxLCA2NzU4OCwgMTE5MDAwLCAxMjcyNTIsIDEyNzI1NSwgODg1OCwgNjQwOSwgMTI3MjU2LCAKKyAgICAxMjAyNTIsIDEyODEwMCwgMCwgMCwgNjYzMjEsIDAsIDEyODE0LCAxMjcyNDgsIDM0MzIsIDEwMjE4LCAwLCA2MDk0LCAKKyAgICA3NjQxLCA0MjQ0NSwgMCwgOTI0ODcsIDQyNDA2LCAxNjc2LCA3NDMyMCwgMTk0NjA3LCA5ODMxNzcsIDUwMzAsIDAsIDAsIDAsIAorICAgIDczODY5LCA5NjIyLCAwLCA2OTk0NCwgNjc4NywgMCwgMCwgMCwgOTgzNTgzLCAxMDU0NCwgMTI5MTksIDAsIDkyMjE4LCAwLCAKKyAgICAwLCA2OTkwNiwgMTIwNzg5LCAwLCA5NDcsIDExOTgzNSwgMTk0NTg2LCAxOTQ1ODUsIDEwOTY5LCAxMTk5MzUsIDc2MTMsIAorICAgIDkyNTYyLCAxMTk5MzYsIDQ3OTUsIDExOTkzMCwgNzAxOCwgNzM3NiwgMTIwMTgxLCAxMjAxOTIsIDEyMDI2OCwgMCwgCisgICAgNDM1NjcsIDc0MDU2LCA5MTc5MTAsIDExODMzLCAxMTk5MTksIDcyMTYsIDY1MjMyLCA3MjE3LCAyNTEsIDcyMTgsIDc4OTUsIAorICAgIDQzOTUsIDQzNTM4LCAxMTk5MjYsIDExOTkyOSwgMTE5OTI4LCA3MjEzLCAxMTk5MjIsIDcyMTQsIDcyMTUsIDk4MzgzNiwgCisgICAgNzQxNDEsIDg4ODAsIDc2ODUsIDY2NDU5LCAxMjAxNzMsIDY1NTQwLCAxMTk2MTgsIDYyNSwgODE4NywgNDI4NjEsIDExMTMsIAorICAgIDcyMzYsIDc5MTUsIDM2MzAsIDEyMDE3NiwgODE3OSwgNzQyNjQsIDY3ODg2LCA5MzE2LCAxMDk4MCwgMjQ4OSwgNjU2MjQsIAorICAgIDgxNTAsIDEzNTksIDY3NjUyLCAxMjczMjksIDEyNzMzMCwgNzM3NTYsIDUwNDIsIDUwNDEsIDQyNzY5LCAxMjA4NCwgCisgICAgMTI3MzI0LCAxMjczMjEsIDkyMjc5LCAxMjczMTksIDEyNzMyMCwgMTI3MzE3LCAxMjczMTgsIDEyNzMxNSwgMTIyODMsIAorICAgIDE2MTYsIDM3OTUsIDAsIDg3OTUsIDY2MjQ1LCAwLCAwLCAwLCAxMTM4LCA3MzkwNSwgMTI2NzcsIDAsIDAsIDMyMzksIAorICAgIDEyNzMxMSwgMCwgMCwgODQzMSwgMCwgNDIxNjQsIDAsIDExNzc4LCAxMjYyMCwgNjgyNiwgNzM3NzMsIDExOTA3MywgNTA0MCwgCisgICAgMCwgMCwgOTgzNDQzLCA3ODQyMCwgMCwgNTAzOSwgMCwgNzg0MTgsIDAsIDUwMzgsIDAsIDAsIDEzMTg0LCA3NDI5MywgMCwgCisgICAgNjQ2NDgsIDAsIDkzNTksIDc4NDE2LCAwLCAxMjg3NzAsIDY1MTU3LCA2NjYyLCAwLCAwLCAzODYzLCA3MzkwOSwgNDgzNSwgCisgICAgNTUyNjYsIDQzNDMyLCAxMjc4MjIsIDQzMDksIDcxMjcsIDE5NDU2OSwgMCwgMTk0NTY4LCAxMzAxLCAwLCA0MjU4OSwgNTY5LCAKKyAgICAwLCA3MzgxMywgNzExLCA0Mzg5LCA3MTMzLCAwLCA3Mzg4MCwgMTE2MTAsIDExMzY4LCAwLCAxOTQ1NzAsIDQxMzMxLCAKKyAgICAxMDA2LCA3NDI0MCwgMCwgMTU1MCwgODIwMSwgNzM3MzcsIDc2MjcsIDU0OTksIDUwMzEsIDc3OTA4LCA0MjczOCwgNjU3ODQsIAorICAgIDc3OTA3LCA2NTI2NywgMzc1OCwgMCwgNjU3ODEsIDY0NzM0LCA3MDA3MywgMjQ0MCwgNjU3ODAsIDc3OTEzLCA4NDQ5LCAwLCAKKyAgICA1MDA4LCA5ODM1NzIsIDIxMTgsIDAsIDEyMTIxLCA4MjU1LCA1NTEyLCA3Mzg3NSwgMjEyOCwgMjEzMCwgMjEzMSwgMjEyNiwgCisgICAgMjEzMywgMTExOSwgMTI3MDY4LCAyMTE0LCAyMTE2LCAyNDU1LCAwLCAyMTIyLCAyMTIzLCAyMTI0LCAyMTI1LCAxMjc0ODYsIAorICAgIDg3MTQsIDk4MzgyMCwgMjExMywgMCwgMjExNSwgMTI4MTc3LCAxMjc5MDcsIDQzNzEzLCA1MDUyLCA2NjIyMCwgNTgyMSwgCisgICAgNjE4NiwgNjU3NzgsIDY1Nzc1LCA1MDUxLCA2NTc3MywgMTQyOSwgNDI2NDcsIDUwNTAsIDMwMiwgMzg4LCA0MTExNSwgNzM1LCAKKyAgICA2NjM3LCA1OTA3LCA2NTA4OCwgMCwgMTI3MjYsIDc0NTk0LCA5MTE3LCA5ODMxODEsIDEyMDAzLCA1NTEzLCA2NjY2LCAKKyAgICA1MDUzLCA3NDIzMCwgNTUxMCwgNzg0NTEsIDAsIDc4NDQ3LCAyNDcwLCA3ODQzNywgMCwgMTkyNSwgMCwgOTIyMzcsIAorICAgIDc0ODA3LCAwLCA1MDQ4LCA1MDQ3LCAwLCAwLCAwLCA5MjMxMywgMCwgNzQ0OTcsIDkyMzk1LCA4MDg5LCA2OTI5LCA2MzksIAorICAgIDk4MzU2MywgNjgxNzksIDY0NDQyLCAwLCA5MjM0OCwgNDU5OSwgNDE0MDIsIDY2NzQsIDQzMzk3LCA0MzI5NCwgMTQ3NiwgCisgICAgNjQ4LCAwLCA2NTgxOSwgMzIzMywgMCwgNDE3ODIsIDY5NTEsIDk0MDE3LCA5ODM5NzYsIDM1MzAsIDk3NTAsIDEyODMxNywgCisgICAgMCwgNjY1NiwgNDI2MTgsIDAsIDUwNDYsIDg1MTIsIDY1ODU2LCA3NDI2MSwgODk2NywgMCwgNTA0NSwgNDIwMjYsIDE5MTYsIAorICAgIDc5ODYsIDUwNDQsIDEyMDU1NiwgOTAwNiwgMTMxMjgsIDUwNDMsIDAsIDc4NTMsIDc0MDY4LCA3NDAwNCwgOTY2OSwgCisgICAgMTIzNDEsIDEyNzAzLCA4NDAyLCAwLCAxMTkwNzAsIDkxNzYwMCwgNDE3NTAsIDM1ODYsIDY0NTA4LCA0MzE0OCwgMCwgMCwgCisgICAgMTE5NjA2LCA2Nzk4MywgMTMyOTYsIDUxNywgMCwgMTI4NTM0LCAxOTQ5NDYsIDQxNTI4LCAxMjMsIDY1NDU0LCAwLCAwLCAKKyAgICA3NDQ3OCwgMTA1MzEsIDc3ODQsIDQxNTI2LCAxMDgyOSwgNzM5OTEsIDgwNTcsIDExMjYsIDczODk1LCAwLCAxOTQ1OTEsIDAsIAorICAgIDM5MjUsIDQyNTEsIDgwNjksIDEwNTE3LCAxMjA0MzksIDQ4OSwgMCwgNDI1MCwgMTIwNDQxLCAxMjA0NTIsIDQzMTUxLCAKKyAgICA5ODMxNzgsIDE5NDg1MSwgNjYyMDAsIDAsIDAsIDAsIDc4NDIzLCAwLCAwLCA4NzExLCA2MTgzLCAwLCAwLCAwLCAxMjA0NDgsIAorICAgIDc2MjMsIDExODkyNSwgMTE4ODg5LCA5MjM1LCAxMjc2MCwgNzQxNzYsIDY5NjYyLCA2NjQ0NSwgNDM1NDAsIDEwMDYyLCAKKyAgICAzNzQzLCAxMTUxNCwgMTEwNzgsIDAsIDEyMTM2LCAwLCAxMjY1OTcsIDEyMDQzNSwgMCwgNzcyNiwgMCwgMTk5MjIsIDI2NywgCisgICAgMzM5MywgNDIxOTgsIDEzNzEsIDE5NDg0OSwgNjkyMzMsIDI0NTgsIDAsIDYyMDEsIDAsIDQxMDc0LCA0MjY2LCAxMDY1MiwgCisgICAgNDE2MTIsIDQxMDc3LCAzNDAyLCA5MDUwLCAzMzk4LCAwLCA5ODMzNDgsIDAsIDMzOTEsIDQxMDc1LCAyNDc2LCAwLCAKKyAgICAxMjgwMTcsIDAsIDEwNjI1LCAwLCAxMjc2NywgMTMwMTcsIDc4NzQzLCA2NDI2MSwgNjQ5MzQsIDEyNzUzNywgMTMwMTQsIAorICAgIDEzMDEzLCAwLCA2NjczLCAwLCAwLCAwLCAxMjQzOCwgMCwgOTgzMzQyLCAwLCA5ODM4ODAsIDEyNjYzOCwgOTA1MywgCisgICAgMTMwMTUsIDc0NTIzLCAwLCA3MDQsIDY2MjE1LCA2MTk1LCA5ODM4MjgsIDY2NjAsIDc4NzU4LCA5MTc3NjAsIDkxNzc5MywgCisgICAgNDIyMTIsIDEyNjI5LCAxMTQzNSwgMCwgNTUyNTYsIDY1NTM4LCAwLCAxMjc5NDAsIDk4MzM0MSwgNzQ1NDcsIDEyNjU4NSwgCisgICAgNjU0NDgsIDc4MTAwLCAxMjk0OCwgMTE5MDAxLCAxOTUwMDIsIDExOTIzOCwgMTk1MDA0LCA3ODA5OSwgMTI3MDg1LCAwLCAKKyAgICAxMjgzMjAsIDQyODcsIDgyNzYsIDQ5MDIsIDExMzEsIDAsIDc4NDU4LCA2NjcyOCwgMTgxNiwgMCwgNDI1MzMsIDE2OCwgCisgICAgNDI4NDUsIDQ4OTgsIDY0Mjk4LCA5ODMxNDEsIDAsIDQ5MDEsIDE4MjEsIDAsIDU3OCwgMzY1MywgMCwgNzkxLCA5MTYyLCAKKyAgICA2OTc3LCAwLCA3ODg4OSwgNzQ1NjEsIDAsIDczNzMxLCA4MzU0LCA0MzU5MCwgMTE5MzAzLCA5ODM0NDksIDc1NTcsIAorICAgIDExOTMzOSwgMTE5MzAxLCA4MjM0LCA3MjQxLCAwLCAxMjA2NzEsIDExOTE2NywgMTk0OTk2LCAxMjgxMSwgNjU5MjUsIAorICAgIDM5NDYsIDc4MDc4LCAxMDk5OCwgNzgwODAsIDY3MywgMTk0ODY3LCA2NDM5NywgMTI4Mjc2LCA3NDU5OSwgNzg0NDksIAorICAgIDg4OTAsIDE5NDk3NywgMTk0OTc2LCAyNDQ4LCA3ODA4NSwgMTAyNjcsIDg0MjQsIDI0NTIsIDc4MDgzLCAxMjg4MjQsIAorICAgIDg3MjksIDc4NDU2LCAwLCA3ODQ1LCA5MTc5MTcsIDcxMzAyLCA0NDA4LCA0MTIyLCA2NzcyLCAxMTAzOSwgODcyMywgCisgICAgMTk0OTkwLCA3MTMxMCwgMTE5MzAyLCA3MzEsIDExOTMwNCwgOTIyODYsIDI0MzgsIDY0ODU1LCAxMTkzMDAsIDExOTI5OSwgCisgICAgMTE3NSwgMCwgNDIxMzUsIDM3MywgMTE5MTcyLCAyMTE5LCAxMTQ1NywgMTE1MjEsIDc3MjMsIDAsIDAsIDAsIDQxOTUyLCAwLCAKKyAgICA1MjczLCAyMTI3LCA1MjY5LCA2MzM3LCA1MjAyLCAyNDA0LCA1MjY3LCA0MjgyMywgMTEyOTEsIDE5OTE1LCA1Mjc3LCAKKyAgICAxMjk2MywgMTI3ODY0LCA2MTg5LCA0MTI1LCAxMzE0LCAxMjEzMywgMTIwMzQwLCAxMTg4NzMsIDEyNzEsIDk4MzY0MCwgMCwgCisgICAgNjYwMjQsIDQxNDgyLCAzODY0LCA3NDUzOSwgMCwgMzg3OSwgMCwgMTI5NzgsIDQxNjYsIDQ1NzQsIDAsIDc1NjcsIDc0NTksIAorICAgIDk4MzE2MCwgNDEzOTAsIDUzODQsIDQxODgyLCA2NzY0NywgOTI1NDgsIDU3NTksIDk4MzkxMiwgMCwgNDEzODgsIDY0NDQ2LCAKKyAgICA0MTM5MiwgNjQyODgsIDQxMzg3LCAwLCA4NzA2LCA1NTUyLCA5ODMxODcsIDcwMCwgMCwgNTU1MywgMCwgNzA4OCwgNTM1NiwgCisgICAgNzQ5OSwgNjgwMDcsIDY2NTk2LCA3NDA2NiwgMCwgMTAyNjMsIDU1NTQsIDAsIDEyMzQ0LCAxMDMxMSwgNzgxMTMsIDY2NjUsIAorICAgIDkyNjI2LCAwLCA3NjE4LCA4NTE3LCAxMTQ1NSwgNzg0NDAsIDY0NjMyLCA2NDQ0NywgNTU1NSwgNzgwODgsIDc4MDkzLCAKKyAgICA3ODA5MSwgMCwgNDI4MDMsIDY1MDMzLCA5MTQzLCA2NjY4LCAxOTUwNjcsIDY3OTk1LCAxOTUwNjksIDY1NiwgMTk1MDcxLCAKKyAgICA2NTAzNywgNDU3NywgNjQ2MjQsIDAsIDAsIDAsIDk4MzY0OSwgNDI2OSwgNzM4ODUsIDkxNzc3NSwgNDI4NDYsIDY5NjQ0LCAKKyAgICA5NTAsIDAsIDkyMjczLCA2NjU4MCwgMTE4ODk1LCA2NjY4MywgMTA1NTQsIDkxNzc3OCwgMTE5MTIxLCAwLCA1MDk4LCAKKyAgICA5MTc3NzAsIDAsIDExOTA5OSwgNTA5NywgNDkzNSwgOTg0OCwgMTAzODEsIDAsIDEyODg3MCwgOTgzNzAxLCAzNjUxLCAwLCAKKyAgICAxMjA3MzAsIDEyNzU1NiwgNTEwMiwgNTEwMSwgMTAyNjksIDEyOTgzLCA4MTM4LCA0NTE3LCAxOTMyLCA1MTAwLCAxNDM5LCAKKyAgICAxMjA5MywgMTI0NywgMTAwMzQsIDE5NTA2NCwgNTA5OSwgNzgzNzMsIDE0NDEsIDQyMDg3LCAzMDYzLCA2NTAsIDAsIDc4MzgsIAorICAgIDAsIDE5NTA0MSwgMTk1MDQwLCAxMTkxNDIsIDkwMzEsIDEyMDc5MCwgMTI4NTgyLCA5MDc4LCA4NTQ1LCA2NjM1NiwgCisgICAgMTI4Nzk5LCAwLCA5MTU0LCA5MTE4LCAxMjY1NDMsIDAsIDI2NzYsIDIyNzcsIDAsIDczODEyLCA2MTkwLCA4NTk5LCAKKyAgICAxOTUwNTMsIDY5OTE4LCAxMDc5NSwgOTg1NywgNzAxNCwgOTg1NiwgMTk1MDMzLCA5MjYyMCwgMTIxMjksIDAsIDg0ODEsIDAsIAorICAgIDYyMDIsIDE5NTAzNSwgMTA5MjAsIDEyODIzNywgNTIwMywgMTk1MDM5LCAxOTUwMzgsIDUxMDgsIDUxMDcsIDY1ODE4LCAKKyAgICA2NjAxOSwgOTc2MiwgMCwgNTU0MSwgNzQ3NzIsIDAsIDEyNjEzLCA1Mjg0LCA2NjU3LCAyMDcsIDEyODgwNiwgNDI3NSwgCisgICAgNzQ4MTksIDg1NCwgNjgxNDcsIDc0MzgxLCAwLCA3ODc4NiwgNTEwMywgMTI3ODYxLCA2NDM0OCwgNDEzNjgsIDQzOTc0LCAKKyAgICA0ODgsIDY5ODExLCAwLCA3MTMzOSwgMTAxNTcsIDAsIDQzMDM0LCAxMTQzOCwgNjQ2NzQsIDAsIDkyNjk0LCA2ODQzMSwgCisgICAgNDE3NzEsIDUxMDYsIDY2NjksIDg1MDQsIDY1MTU0LCA2OTgxMywgNDEzNjcsIDUxMDUsIDEyNzUwOSwgNjk3MjAsIDY0NzYsIAorICAgIDUxMDQsIDk4Mzc0OSwgMzA0LCAzMTc2LCAxMTkwMTAsIDAsIDkzMiwgMTIwNjMzLCA2NTY3LCAyMzgsIDY5NjU2LCAKKyAgICAxOTUwMTEsIDE5NDU5NSwgMTk5MDUsIDEyMDU3NywgMTk1MDE1LCA3ODg3MCwgNDEwNDQsIDY3NjQwLCAxOTQ5MDIsIAorICAgIDQyMDU1LCA5OTEyLCA2NTkzOSwgMTA2NzAsIDc0MDkzLCAxMzI3MywgMCwgMTI1NTIsIDE5NTAxOSwgODgwMywgMzA5LCAKKyAgICA2NjIyLCA4MTUxLCAxMDg1OCwgNzg3MDYsIDY3NjM2LCAwLCAxMjU2OCwgMCwgMTI1NTMsIDEwODE0LCA0MzI3NSwgNjk1MCwgCisgICAgOTcxMiwgNjg2ODAsIDQzOTcwLCA5ODMxOTgsIDY1MTY1LCA5MjcyNSwgMCwgNjY0NjYsIDAsIDAsIDAsIDY2NzI1LCA2MTkxLCAKKyAgICAxMTM1MSwgMTA0MzcsIDExMzE2LCA2NzYzNCwgNDM3NjMsIDAsIDQxNzU0LCA2NzYzNSwgOTM3MCwgMjcyMCwgMTk0OTc1LCAKKyAgICA2ODQ2MiwgODIzMiwgMTE4ODE3LCAwLCAzMjIyLCAwLCAwLCAwLCA2NjY2MywgMCwgMCwgMTA4MzQsIDAsIDAsIDY1NzMyLCAKKyAgICA5NDA5NSwgOTE3NTQ3LCA5MjY4MiwgNjc2NzksIDE5NTAyMCwgMCwgNzc4MSwgNDEzODMsIDY0NTY4LCAwLCAxMjA3MzgsIAorICAgIDEyMDc3LCAwLCA2NDU4NiwgOTE3NjIwLCA0MjM5NiwgNTUyNTUsIDM0NzUsIDEyODAzNSwgMjQ3OSwgMCwgMzYzMiwgCisgICAgMTIwNzI4LCAxMDY5OCwgODM3NiwgMzY0OCwgMTk0OTYwLCA3NDg0NCwgNjc2MzksIDM2MzYsIDY3ODk0LCAzNjUwLCA4ODM3LCAKKyAgICA2NTIyOSwgMTg0MywgNDIyODMsIDQzMjUwLCA0MTU2MiwgOTEwMCwgNzQ1NDgsIDkxNzYzMCwgMzY0MCwgMTI3MTkwLCAKKyAgICA0MjMyMSwgNzI4NCwgMTk0OTc0LCAxOTQ5NzMsIDE5NDk1MCwgMTk0OTQ5LCAxOTQ5NTIsIDE5NDk1MSwgMTI2NjQ5LCAKKyAgICAxOTQ5NTMsIDQyMDgwLCAyNTI5LCAwLCAwLCAwLCA0MjA4MywgMTIwNjc4LCA2ODM5OCwgMTk0OTU3LCA2NzYxOSwgNjYzNjcsIAorICAgIDE5NDk1OCwgOTYzNCwgOTIzODAsIDk5ODgsIDAsIDQxMDY4LCAwLCA0Mjk1LCA2NTI2NCwgNjgwMDYsIDAsIDkyNTQ1LCAwLCAKKyAgICA3ODUsIDgyMzYsIDEyODY0NywgOTAyNywgNjgxNjAsIDY3NjIzLCA2NDM4MywgMTIwMjY1LCA5MjUsIDEyNzE1NiwgMCwgCisgICAgNDE5ODUsIDQxMDcxLCA5NTg2LCAwLCA0MTk4NCwgOTIxNywgMCwgMCwgMCwgOTE4NiwgMjA2NywgNDAxNiwgOTgzODAzLCAwLCAKKyAgICAzODEsIDEyOTM2LCAwLCA0MjA3NywgMCwgNjk4ODAsIDUxODQsIDQyMDc4LCAxOTQ5NDcsIDEwODEwLCAxMjg1MzEsIDQ1ODUsIAorICAgIDE5OTQzLCA1ODYwLCA2NzYzMywgMCwgMCwgODEyLCAzNjE1LCAwLCA1MTc4LCA0NDAwMCwgMTIwNTQ4LCA3ODgwNywgNTE4OCwgCisgICAgNzQyODcsIDY3NjI5LCAzNjA1LCAxMDY5MiwgMTE2NiwgNjQ0MjksIDQyNjM5LCA5MjQsIDAsIDY3NjMxLCA0MjYxNiwgCisgICAgMTIwNjcwLCAyNDQyLCAxMDcwMywgNzg3ODksIDY3NjMyLCA5MTc5MjQsIDEyNzcxLCAxMjczNiwgMTI3NTMsIDY2NzA4LCAKKyAgICA3MzkzMywgNjc2MjYsIDQyNDAxLCAwLCA2OTg3MiwgMTI3MzczLCA0MjI4OCwgMTI3NTEsIDAsIDg1NDIsIDEzMTQ1LCAKKyAgICAxOTQ5NjMsIDI0NjgsIDY2NzA2LCA0MTI5NCwgMzYyNiwgMzg4MywgNjQzODgsIDQyNDc5LCAwLCA0MTExNywgMCwgOTI1ODAsIAorICAgIDAsIDAsIDY3NjI0LCAwLCAxMjkwLCAwLCA2NTU4NSwgMjcxNSwgODA2LCA2NTIwOCwgNDE4ODQsIDkxNzg4MywgMTMxOCwgCisgICAgNjQ3MzEsIDEyNjU3OCwgMCwgMCwgNjYzMjUsIDM0NjUsIDI0MDUsIDkyNDAsIDAsIDEyNzU2LCA2NTI1OSwgMCwgOTgzNzgxLCAKKyAgICAxMjc1MiwgNTgzMywgMTQzMiwgMCwgNDE4ODMsIDczOTEyLCA5Nzk5LCAwLCA0MTg4NiwgMjQ4MCwgMCwgMjA2MiwgCisgICAgMTI3MjkzLCA2NDk0LCA1NTM3LCA3ODY1NiwgMCwgMTk0NTg3LCAwLCAxMjExLCAwLCAwLCAwLCAxMTg4MzIsIDEyMzE4LCAwLCAKKyAgICAwLCA2ODAwNSwgMTA2MjIsIDk4Mzc3OSwgMCwgNzg2NTQsIDY1NjYsIDc4NjU5LCAwLCA3Mzc4MCwgMTE5MTk2LCA2NDg2NCwgCisgICAgMCwgNzg2NjAsIDAsIDgyODQsIDEzMDgxLCAwLCAzNTg5LCA0MjA1MSwgNDAzNSwgNjQ5MiwgOTIyMzYsIDQyNjUsIDY2NDIsIAorICAgIDM5NzcsIDc0MTg2LCA0MTc3OCwgODM2LCAxMTkyMTYsIDI0ODgsIDAsIDQ1ODIsIDAsIDAsIDQxNzc3LCAxMjkyNiwgCisgICAgOTgzMzc3LCA3NTI4LCAxMDU1MCwgMCwgOTI3MDYsIDAsIDEwOTYxLCAwLCAxMzc0LCA2NDg3OCwgMTE5MDE0LCAwLCAKKyAgICA0MjM4OSwgNDEzNzQsIDIyODYsIDAsIDc4NDkyLCA0MTM3NywgMTI3OTA5LCAwLCA0MDAsIDEyNTk3LCAxMjA1ODYsIDAsIDAsIAorICAgIDY2NjEsIDk4MzE0NSwgNjQ4MjcsIDAsIDczODE3LCAzOTAsIDAsIDcxMzAxLCA5ODM4NjIsIDM0NzMsIDc3MTgsIDAsIDAsIAorICAgIDAsIDU1Mjg1LCAwLCAwLCAwLCAxMTk2OSwgOTgzMzkwLCAxMjc4NDEsIDYzNjUsIDE4ODcsIDY3NjMsIDk4MzM3MCwgODA4MCwgCisgICAgNzAwNiwgMCwgOTgzMzcxLCA2NzU3LCA2NDM1MSwgMTU0NCwgMCwgNjc2NiwgNjQ2NzcsIDEyMDcxNiwgOTgzMzcyLCA2MTQ2LCAKKyAgICAwLCA3NzEsIDk4MzM3MywgMCwgMTI4MTIsIDEzMTY4LCA0MjI3MiwgMTIyMDAsIDkxNzkyNywgNzkwNCwgMCwgOTUzLCAKKyAgICAxMjkxNywgMTE5NTYwLCAxMjMwMCwgMCwgMTE0OTEsIDk3MjQsIDEwMzQxLCA5ODM3NzMsIDk1MjQsIDc0OTAsIDExMzg5LCAKKyAgICA3NDg5LCAzMzc5LCAwLCA3NDg3LCAwLCA0NzEsIDc0ODQsIDc0ODIsIDY3NTMsIDc0ODAsIDU3NjQsIDc0NzgsIDc0NzcsIAorICAgIDY1MDEsIDc0NzUsIDY5MTgsIDc0NzMsIDc0NzIsIDI0NzQsIDc0NzAsIDc0NjgsIDEwMjMyLCAxMDYxNSwgMTAyMTMsIAorICAgIDEyNzI4OCwgOTIzNTcsIDEwMDQ5LCAxMTgzNCwgMzU0NCwgMCwgNjAxNywgNjUzMTEsIDEyNzQ4MSwgMTIwMjE2LCAxMzMwNiwgCisgICAgMTA1MzMsIDc4NzAsIDczOTQ5LCA3NjI1LCAwLCAxMjA1NDQsIDAsIDAsIDkyNjYwLCAwLCAwLCAwLCAxOTk2MSwgMjQ3MiwgCisgICAgNDI2NjUsIDkyMzQxLCAwLCAyMTM5LCA0MjU2LCAxMjA3NzYsIDc0MzgwLCAwLCA0MjY3NSwgNDI2NTgsIDEyODQ1LCAwLCAwLCAKKyAgICA2NTEzOCwgMTE5MzU1LCA2Nzg2MiwgMCwgNjU2NzEsIDcwODMsIDEyMDAwOCwgODA2NiwgNzY3OCwgNzQ4NjUsIDAsIDAsIDAsIAorICAgIDAsIDcxODYsIDAsIDEyMDU1NSwgMCwgNDQ1LCAxMjA1NjYsIDEyODMwOCwgMCwgMCwgODMzMCwgMCwgMCwgNDI3OTcsIAorICAgIDk4MzE1MCwgMTIwMjE1LCAwLCAzOTAyLCAwLCAxNzcwLCAwLCAxMjg4NjYsIDE1NjAsIDEyMDIwOSwgMTk0OTcyLCA0NTg0LCAKKyAgICA3Mzg0MywgMCwgMTE3MTIsIDEwODY2LCAxMTg5MjgsIDExMTgsIDcxMzM0LCAwLCAwLCAxMDgxLCA3NDM2LCA2ODQyMCwgCisgICAgNzI1MiwgMCwgNTk5NiwgNjk5MjEsIDQ5MDMsIDAsIDQxMzg2LCA1MTYyLCAxMTkxODksIDEzMzAsIDAsIDcxMzksIDAsIAorICAgIDEyMDQ3LCA0MTM4NCwgMCwgMCwgMTg0OCwgNDMzNCwgNjMyNCwgNDE5NzUsIDY0Nzc3LCAxMDY3NCwgMTIzMDgsIDEyMTg2LCAKKyAgICAwLCAwLCA5ODM3NDEsIDEyNzE1LCA2ODAwMiwgOTgzNDc5LCAxMjY2MzAsIDIwMTgsIDY2NjcyLCA0MTk3OSwgNjY2ODUsIAorICAgIDExOTE1NywgNjgwMDAsIDkyNDY0LCAwLCAxMjY5ODQsIDY4MDAxLCA5MzM0LCA5MjcwNSwgOTIzMTUsIDcwMTAxLCA3OTc1LCAKKyAgICAwLCA3Nzk1NywgMCwgNjY2MjEsIDQ4ODQsIDY2NTk3LCA2OTczMiwgMCwgMCwgNjMxMywgNjU1MTMsIDY5ODU3LCAwLCAwLCAKKyAgICAwLCAyMzQ1LCA0MzY5NywgNDYzLCAwLCAwLCAxMTk2MDcsIDMxMTcsIDU0NjAsIDAsIDAsIDk4MzM4NywgMCwgNDIyNzksIAorICAgIDE5NDU3NywgMCwgNzg0MTUsIDAsIDE5NTAwOCwgOTgzMzg0LCAxMzI0OCwgMCwgMCwgMCwgMCwgMCwgMCwgNTY2MywgMCwgMCwgCisgICAgMCwgMCwgMjQ4MiwgMTQ3MSwgMCwgMCwgNDIyNDcsIDEyMzc4LCA3MzkyNSwgNjk2NjQsIDAsIDEyMzc0LCAwLCAwLCAwLCAKKyAgICA5ODM2OTQsIDI0NjAsIDAsIDExOTQ0LCAxMjM3NiwgMTI3ODY4LCA2NDY3OSwgMCwgMTIzODAsIDEwNTU3LCA2NDQ3MywgCisgICAgNTg3MCwgMCwgMjAyNCwgMTI3MTgwLCAwLCAwLCA1MzksIDAsIDEyNzc2NSwgOTQwNTIsIDM4NTMsIDY1MTgwLCAxMjc5MjMsIAorICAgIDEyMDc5NiwgMTIwMjQ1LCA5MjMyNCwgMCwgODY1OSwgMCwgMTI0NzQsIDkyNTc5LCA5NTAzLCAxOTQ5NjksIDI0NzgsIDAsIAorICAgIDQxNjIsIDAsIDQyNjAsIDEyOTUzLCA2OTYzMywgMTIwMDg5LCAxMjQ3MCwgMCwgNzQxODksIDI3NDIsIDEyNDc2LCAxMTc5OCwgCisgICAgMTA5NDYsIDEyNzMxMCwgNTAwMCwgMCwgOTgzNTc5LCAwLCA2OTY3MiwgODIxMywgNzQwMTcsIDc3NzEsIDYxNjEsIDY4MDE4LCAKKyAgICA2NzA5LCAwLCA3ODg4NSwgOTgzNzA4LCAxMjc5NzEsIDEyMDU4MiwgNzg1NDcsIDAsIDEwMzAxLCAxMDMzMywgMTAzOTcsIDAsIAorICAgIDAsIDczNzkxLCAwLCAwLCAwLCAwLCAxMTkxMjMsIDQwMTQsIDEyODQyLCA3Mzk1MiwgMTIwMTUsIDEyNzI5MCwgODI3NSwgCisgICAgMzg5MywgOTgzMjY0LCAwLCAxMjIxMCwgNzIyMSwgNDIxNDcsIDAsIDc0NTUwLCA3NDQ2NSwgNjQ3NDcsIDExODg0MSwgMCwgCisgICAgMTI1MTYsIDQ0NDQsIDAsIDkyMjcxLCA3NDUzNywgMTA4OTIsIDgyMzEsIDAsIDY0NzMsIDQxOTY4LCA3ODM4OCwgNDE5NzMsIAorICAgIDM1OTEsIDQxOTY5LCAwLCAyNDUzLCAxMjg1NDksIDkyNjY2LCA2NDcwNSwgMCwgMCwgMTAzNDksIDEwNDEzLCA0MzU5MSwgCisgICAgNDE5NjIsIDMyMDIsIDc0MzUzLCAwLCA4MzE2LCAwLCAwLCA5NDA2MCwgNjg3LCAwLCAwLCAwLCAxODQwLCAwLCA2ODY3MSwgCisgICAgMTE5ODA5LCA0ODgzLCAyODUsIDQ3MjMsIDcwMDk5LCA5MjY5MiwgNDQ1OSwgNzQ1NzcsIDQyOTIxLCA0MTcyMCwgMTEwODksIAorICAgIDI0MCwgMTk5MDYsIDAsIDQyMzIzLCAwLCA5NzQzLCAxMjAyMzIsIDEzMTM0LCAxMjY1MzUsIDAsIDAsIDAsIDAsIDQyNjM0LCAKKyAgICA5ODMzNDMsIDQzNDM3LCAzMDgxLCAxMTQ2MywgMTIwMTU0LCAwLCAwLCAxMDQ0NSwgMCwgMCwgNjY3MTcsIDI2MTQsIDkxMjUsIAorICAgIDExOTAyMywgMTcyOSwgMCwgMTIwMjM2LCA2NTIyMSwgNjM4ODMsIDQzMzM0LCA2NDg1MiwgMCwgNjUxOTQsIDY2MjAxLCAwLCAKKyAgICA2NjU3OCwgNTAwMSwgNDE4NzksIDc0NDI3LCA0MTIxLCA1MDAzLCA4ODQsIDY2NzAwLCA2Mzg3OSwgNDk0MywgNTE1MCwgCisgICAgNzM4ODksIDc0MTgyLCAxMjc5MTUsIDY0MywgMzA4NiwgMCwgNDI0NDgsIDQyMjk5LCA1OCwgMCwgOTE3OTUyLCAxMjAwODMsIAorICAgIDYzODczLCA4NDkxLCAwLCAwLCA5ODM2MjMsIDQ1MzAsIDQyNDA5LCA3MTI2LCAxOTQ1NzUsIDI3MjEsIDEyMDA3NCwgCisgICAgMTE5MDk2LCAxOTkyOSwgMCwgMTk0NTc0LCAwLCA0MjQyLCA0MjY0LCAxMjAwNzcsIDEyMDUzMCwgNjYxNzksIDQyNDEyLCAKKyAgICA2NTk0MSwgMTMxMTQsIDY0NTIyLCAxMDc0MCwgMzA5NCwgMCwgOTc1NCwgMTE5MTAyLCA0NDM3LCA3Mzk0OCwgMTI3MDc0LCAKKyAgICA5ODMyMzgsIDU1MjgwLCA0MjE3NCwgMTk0OTI1LCA0MjQzMCwgMCwgMCwgNDIzNTUsIDY2MDI2LCA0MzA2LCA0MTM4MCwgCisgICAgNjg0MzIsIDkyNTg2LCAwLCA2NjY2NywgMTI3MzA5LCAwLCAxMjY1MjEsIDQyMjAwLCA0MjU2NiwgMCwgMCwgNTA4OCwgCisgICAgNjk0OCwgMCwgODUyNCwgMCwgMCwgMTIzODUsIDAsIDAsIDY5NjQ2LCAxMzg2LCA2NDU4MCwgMTE0ODAsIDYxMTYsIDY1MDM5LCAKKyAgICA2NTAzOCwgMTIzOTIsIDY1MDM2LCA4MDY0LCAwLCAxMjEwMSwgNTgyMiwgMTE5MDA0LCAyMDgwLCA3MTAsIDc3OTk5LCAKKyAgICAxMTY2MywgMTY2NiwgNDIwOTEsIDExOTY1NywgMTIzODMsIDQzNjcxLCA0MjA5MiwgNjg0MTgsIDQyODksIDAsIDYzODk2LCAKKyAgICAxMjA2MSwgNDIwOTYsIDQzNjIxLCAzMzYyLCAxMjM3NywgOTgzODMyLCA5ODM4MzQsIDY4NDQ5LCA3NDYxLCA3MzkwMSwgCisgICAgMTI0NCwgMzMxLCA3Mzc4NiwgMTI2ODMsIDEwNjYyLCAwLCA4MTEyLCAwLCA2NTg1MiwgMCwgMTIzNzksIDE5NDg3NywgCisgICAgMTIwODE4LCA0MTk2NCwgNDIyMDgsIDYzODQzLCAyMDg0LCA0MTk2NSwgMCwgNjU4NjYsIDQzMjcsIDAsIDYzODQwLCAKKyAgICA3ODU0OSwgNDEyMjAsIDEzMDMyLCAwLCA1ODQsIDEyOTMzLCA0MzE3NywgMTIzNzMsIDY5ODU1LCAxMzAwMCwgMTM1MSwgCisgICAgMjkzNSwgODY5OCwgMTI2NjUsIDAsIDE5MzAsIDAsIDc4MjI5LCAxMjQyNywgNjY1MTQsIDY5ODU5LCAxMzAzMSwgMCwgCisgICAgNjM5MDEsIDAsIDM2NTcsIDEyODU3MiwgNjUyMDIsIDYwMDAsIDExOTIwNiwgMTI0MjYsIDEyNzE4MSwgMCwgNDE3NDAsIAorICAgIDEyNDI4LCA0MTI4MywgNDE5MTYsIDExOTIxMCwgMCwgMCwgMTI0MjksIDY3MjcsIDAsIDc1NjIsIDAsIDUxNzAsIDAsIAorICAgIDQxNzU1LCA2NzYsIDAsIDY2NzA0LCA2NjY2NCwgOTk3OCwgNjY0OTEsIDM1MzYsIDAsIDk3NTIsIDkyMzk3LCA2MTYyLCAwLCAKKyAgICA2OTIyOCwgMTAxMTMsIDQxODI5LCA2NTg4NiwgNTE1OSwgMTI0MjIsIDQxODMyLCA0MzksIDQzMDc3LCAwLCA0MjIwNywgCisgICAgNzQ1NDksIDExNzk2LCA0MDk3MCwgNDE4MzAsIDAsIDkxNzc5OSwgODMwOCwgOTE3Nzk3LCA5MTc3OTYsIDAsIDY3ODY0LCAKKyAgICA5MTc4MDEsIDkxNzgwMCwgMTIzMzYsIDQxMzUsIDY5ODA1LCAzNDEsIDI3MjcsIDQxMjksIDM1MzksIDAsIDYzODYxLCAwLCAKKyAgICA3OTEzLCAwLCA2Mzg1OSwgNDEzMSwgNjM4NjgsIDAsIDYzODY3LCA0MTMzLCAxMTM3MSwgMjEwLCA0NjAwLCAwLCA3NDU2MCwgCisgICAgNDEzNywgODA4MiwgNzg1MDYsIDExOTA2MiwgNzg1MDQsIDY3MDQsIDQ1OTEsIDEyODAyOSwgMCwgMCwgOTY4MCwgMCwgCisgICAgMTIwNjIzLCA1NjEsIDEyMTU5LCAxOTUsIDc4NTA4LCA0MTUwMSwgMCwgNDIwMzEsIDU3MTksIDcxNzIsIDQyNjg3LCA4MzY4LCAKKyAgICAwLCA0MTQ5OSwgMCwgMCwgNDIyNDIsIDQxNDk4LCA5MTc3OTQsIDQyMDI1LCA3ODU2NSwgNjU4MDUsIDQyNDYzLCAwLCAKKyAgICAyOTI0LCAwLCAxMjA1MTAsIDAsIDAsIDExOTIxMywgNzM5NDEsIDAsIDQyMzMwLCA5MTc3ODQsIDM5NjksIDAsIDAsIDcxNjksIAorICAgIDE5OTIsIDk2NTIsIDczOTc3LCA3MjQ2LCA0MjA4NiwgMTI2NjE1LCAyMjE5LCAwLCAwLCAxMjg4MDEsIDE5NDgzNywgMCwgCisgICAgMzI3LCAwLCA5MDQyLCA5MTc3NzcsIDkxNzc3NiwgNjUxNDgsIDEyNDMzLCA5MTc3ODEsIDEyNzI3NiwgOTE3Nzc5LCAKKyAgICAxMjQzMSwgODY2OCwgMTI0MzQsIDk4MzgzNSwgOTE3NzgyLCA1OTk5LCAwLCA3NzEyLCAxMjQzMiwgMTI4MjQzLCA0MzY1MywgCisgICAgMTcyNiwgMTAxNSwgMCwgODIxMiwgMCwgMTI4MDE0LCA0MjQyMywgMTE5MDY2LCAwLCAxMjgxMDgsIDY2NzA5LCAwLCA4ODExLCAKKyAgICA5MjcsIDAsIDAsIDEyNDM2LCA5ODMyNDUsIDQyMDIxLCAwLCAwLCAxMjk5LCAxMjI0MCwgNDIzNTAsIDY1MTQzLCAwLCAKKyAgICAxOTUwMTYsIDAsIDc4MTk3LCAxMTM0OCwgMCwgNzgwMzcsIDkxOTQsIDk4MzE4NCwgMCwgMTk5MTQsIDEyMTc5LCA5ODM4MTIsIAorICAgIDIyOTYsIDE5NDkyMywgNjM4MzYsIDYzODMyLCA5MTc3NzMsIDEwOTY3LCA2MzgxNiwgMjU5NCwgMzQ0NCwgNjM4MTcsIAorICAgIDY0NjUxLCAwLCA0MTUwMywgMTI3NDc4LCAxMTI2NSwgMCwgMTIwNzU2LCAxOTQ5MjIsIDAsIDU2NjQsIDM5NzIsIDAsIDAsIAorICAgIDAsIDEyODUwOCwgMTI0MTYsIDkxNzc2NCwgMTE5NjA4LCAxMDgxNiwgOTE3NzY5LCA5MTc3NjgsIDEyNDE4LCA3NDExMSwgCisgICAgMzg4MiwgODUzMiwgOTE3NzcxLCAxNTczLCAxMjg2NDgsIDExOTg0NywgNDU5NiwgNjYzMzksIDEyNDE3LCA2NjAwMSwgCisgICAgNjUzNDMsIDEyNjQ5MSwgMTI0MTQsIDgyODcsIDY4MjE5LCAxOTUwMTcsIDY4MTA4LCAxMTQzLCAxMTkxNjksIDExOTg0NiwgCisgICAgMTI0MTUsIDY2MjYsIDQyNzYzLCAwLCAxMTg4ODQsIDkwMjEsIDEyMDc4MywgMCwgMTE3MjQsIDAsIDAsIDEyNzEwNCwgCisgICAgMTI2NjE5LCAwLCAwLCA4MDI3LCAxMDk5NywgOTE3MSwgMTI3NDEsIDExNDAwLCA3MTMwNSwgMTk0Nzk5LCAwLCAxMjgyMzksIAorICAgIDAsIDEyODg4MSwgMTE5NjA0LCAxMjc1MjMsIDEyMDE5MCwgMTk0NzczLCA2NzYwOCwgMTI4MjE0LCA0MjM2OCwgMCwgNzcxNSwgCisgICAgMzg4MSwgNDE0ODcsIDEyMTE4LCA0MjUxNCwgNjg2NTEsIDAsIDk4Mzg5NSwgMzAwOSwgNDE0NzYsIDQxNDg5LCA2OTgyNSwgCisgICAgMzAwNywgMTQ0OCwgMzAxOCwgMTk0ODA5LCAzODg5LCA4NTIxLCA1MDgzLCA1MDgyLCAxMTk4NTksIDEyMDE4NCwgODUxOSwgCisgICAgOTgzMjQxLCAzMDE0LCA1MDgxLCA2NTg1MywgMTIwNzE1LCAwLCA2ODAxNCwgNjk5NTEsIDUwNzksIDY0ODAyLCA0MjIxMCwgCisgICAgNDU5NywgNjU1MzIsIDExODI4LCAxMjAxODUsIDEyMzcxLCAwLCA4NDA3LCAwLCAxMDgwNSwgODUxOCwgMTA3NzksIAorICAgIDEyMDE4OCwgNzEzMDMsIDk4MzkzMywgMTIzNjcsIDQyMTcwLCAwLCA5MjU1NywgNjI5LCAxOTI0LCAwLCAxMjAzNywgCisgICAgNzQzNjYsIDU5ODcsIDg0NjIsIDgwMDUsIDEyMzY1LCA2MzkzMywgNjk3MzUsIDEyMDgxNSwgMTIzNjksIDEwNjQ5LCAKKyAgICA2Nzk4MSwgNTA3NywgMTIwMTc0LCAxMDg4MCwgNjM5MjcsIDUwNzUsIDkxNzg4MSwgMCwgNjUwNzUsIDAsIDExMDA3LCAKKyAgICA5ODM3MDUsIDY2NjU5LCA5MjYwNywgMCwgNjY2ODQsIDAsIDM0MzQsIDQ5NTQsIDE5MDQsIDAsIDUyNjYsIDEyNjk4MCwgCisgICAgNTI3MiwgMTA0OTksIDQ1MDcsIDk1NzgsIDYzOTIzLCAxMjAxNzcsIDc5NzksIDAsIDk4MzEsIDAsIDE5NDkyNiwgNDYxLCAKKyAgICA5ODAzLCAwLCA0NTA0LCAxNTA1LCAwLCA2MzI1LCA1Mjc2LCA0MzAyMSwgMTIwNDg4LCAwLCA1NTIzNiwgMCwgNjY0NjEsIAorICAgIDUxNzcsIDQxMzI0LCAxMjA1NSwgODcyMiwgMCwgNDEzMjcsIDAsIDY2Njk1LCA0MTE0LCA0MDksIDQzODMsIDg5MDAsIAorICAgIDg5NDgsIDQxMzI1LCAwLCA3MjEsIDEwMTgyLCA5MTA4LCA3MTMxMSwgMCwgMTE5MTg1LCA0MjIyOSwgMTk0OTEyLCAwLCAKKyAgICA1OTk4LCAwLCA0MjM1MywgNzQ4MjUsIDAsIDEyNTg3LCA5NDEwNCwgNzg1NzEsIDAsIDcxMzI4LCAxOTQ1NjIsIDQxNTc2LCAKKyAgICA0MjIxNSwgNzg1NzAsIDExOTIwNywgMCwgODU3OCwgNTk5NSwgNzU3MywgNDE1NzUsIDc0Nzg5LCA3NDc1MiwgNjM5NDQsIAorICAgIDYzOTQ5LCA2NDc2NywgMjY3MCwgNDE2NywgMTk0Nzk2LCAxMTcyMywgMCwgNzQxMjAsIDAsIDY1MDc2LCA5MzgsIDQzNDE0LCAKKyAgICA3Mzg1NCwgMTE3MzcsIDk3MjEsIDAsIDAsIDAsIDExNzQyLCAyNDE5LCAwLCAxMTQ5MywgMTIzMzQsIDE5NDkxMywgNDE1MywgCisgICAgMTIzMDIsIDEwNzkzLCA1MjUwLCAxMjQwNywgMTE5NzgsIDQ0MDQsIDkxODksIDEyNDAxLCA0MjAwNywgNTc3NSwgNjc1OSwgCisgICAgNjU4MDYsIDQzOTk3LCAwLCA0MjAwMiwgMTI0MDQsIDk4MzU1MywgMCwgNDk0MCwgMTI0MTAsIDc2ODMsIDExNjcsIDczNzI5LCAKKyAgICA0OTgzLCAxMjA1MDcsIDg2MSwgMCwgMCwgMCwgMCwgNDM3NTcsIDQzMzcwLCAwLCAwLCAxMTk1NiwgMCwgMCwgMCwgOTYxNiwgCisgICAgNjYzMSwgMCwgMTI4MTYsIDQzNzU5LCA0MjIxOCwgMTI3MTAsIDY4Njc0LCAxMjcyMSwgNDEwMSwgNjYxODUsIDAsIDU5OTIsIAorICAgIDc2MTYsIDE5NTA0NCwgMCwgMTI1NzcsIDAsIDk4Mzg4NCwgODUzLCA0MjY5MywgMTk1MDE0LCAwLCA5ODM2NDcsIDUwMTYsIAorICAgIDQzNTM1LCA2Mzg5MywgNDI4MzUsIDk0OTEsIDkxNzkxMywgMCwgOTE3OTE0LCAwLCAxMjcxMiwgNzEwNSwgMTI3ODA3LCAKKyAgICA2NTA2MCwgMTIwNzk3LCA5OTAwLCA3NzUwLCAwLCAxOTQ5MTksIDAsIDEyNzgzMCwgMCwgNjQ3NzgsIDEyNTg1LCAxMDU2NSwgCisgICAgMTI4MTUxLCAxMjE3NywgMCwgMCwgMCwgNzc4MjQsIDAsIDQ5MDAsIDEyNzg3NCwgMTI4NzgsIDkyNjMwLCA4OTg0LCA0MTE5LCAKKyAgICA3NDc2OCwgODk3MSwgNzg1OTMsIDQzMTEzLCA5NzAyLCA3ODU5NCwgMTEwMjUsIDkyNDUsIDEzMDQ4LCA0OTI3LCA0MTM4LCAKKyAgICA3NDE4NSwgOTI0ODEsIDkyNzEwLCAxMjM5NywgNzc4MjcsIDAsIDEzMDU0LCAxMjM5NCwgMCwgMCwgMCwgMTMwNTMsIDAsIAorICAgIDM5NDgsIDEwNzgxLCAxNTQ2LCAwLCA1MDEwLCAxNjgwLCAxMDUwNywgNzg1OTAsIDc4NTgzLCAwLCAwLCAwLCAxOTQ5MTUsIAorICAgIDcyNjcsIDAsIDc0ODMzLCAxMjgxODEsIDU5OTMsIDI4MTksIDAsIDEyNzA2LCA3Nzg0MCwgMTg5MywgNzI2NiwgNjM5MTUsIAorICAgIDcyNjQsIDcyNjUsIDAsIDEzNjMsIDAsIDYzOTk3LCA2MzkxMCwgNjM5OTYsIDMwNzcsIDAsIDAsIDE1MTIsIDY5OTI5LCAKKyAgICAxMjU4OSwgNDE0NzksIDEyODMxMywgMCwgNDMzMzksIDczNzc2LCA5ODM2LCAxMjA3MjcsIDAsIDQxNDgxLCA0MzMzNSwgCisgICAgNzgzMiwgNDIzNDMsIDMwOTAsIDQzMzM3LCA4MTcsIDE2NjQsIDE4NTAsIDEyODg0MSwgMzA3OSwgMTEzNDAsIDQyNDA4LCAKKyAgICA0MjQ0NywgMTI3MTQwLCAxMjAwMjAsIDQyMzA3LCAxMjM4NiwgNDIzMDQsIDkxNzU1NSwgMCwgMTIzODksIDAsIDkyMzY2LCAKKyAgICA0MTk5NiwgMTE1MjYsIDYzOTg1LCA1ODY0LCAxMTQ3LCA2Mzk5MiwgNDI4ODcsIDE5ODcsIDkyNzE4LCA1NDgwLCA3ODU4LCAKKyAgICAxMTY1MywgNDExNiwgMTIzOTEsIDY2MTkzLCAwLCA0OTM5LCAxMjM4NCwgMCwgMCwgNDE2ODYsIDYzOTA1LCAxMTk2MDEsIAorICAgIDE5NDY4OCwgOTgzMTkwLCAwLCAxMjY0OSwgMCwgMCwgODI0NywgNTA3LCA5MSwgMjA0MiwgMTIwNzc1LCA0MzY0MywgCisgICAgMTk0Njg5LCA2NjAyOCwgMTAwMzYsIDQxODQ0LCAxMTk4MTMsIDc3NCwgMTE5ODI5LCAwLCAxMTk4MTUsIDU5OTQsIDEyNTM5LCAKKyAgICAwLCA3ODM3NSwgMTIwNTk3LCAxMTk4MzMsIDk4MzEwNSwgMTE5NjAwLCAwLCAwLCA3NzE5LCA2MDI2LCAyNDg2LCAxMjgzMTIsIAorICAgIDExOTgwOCwgMTYyLCAwLCA2NTIxOSwgNDEwNzMsIDk2ODcsIDQxNjgxLCA2MzA0LCAxMTk4MTIsIDY2MTk2LCAxOTQ4ODEsIAorICAgIDUyNjIsIDAsIDU1MjMzLCAxMjY4MSwgNDIzNzksIDAsIDc1MzQsIDEyMjE5LCAwLCAxMjc1MjgsIDQyODEwLCAxMDQ5MiwgMCwgCisgICAgOTgzNjYxLCAwLCA0MzExOSwgMCwgMTIwNzUzLCAxMjQwMywgMjUwMCwgMTk1MDEzLCAwLCA0ODk5LCAxMjcyOSwgMCwgMCwgCisgICAgNzQxMTMsIDIzNDMsIDQxMDMsIDE5OTQ2LCA3NDExMiwgNzc4NTEsIDEzMTEyLCAwLCAxOTUwMTIsIDEyODU5LCA3MDA4NywgCisgICAgMTIwMTQ4LCA2NjM2OSwgNTg2MSwgMTI3NzU4LCAxMTk5OSwgMTI0MDAsIDAsIDk4MzgzOSwgMTI2NDUsIDUxNDYsIDExMzIwLCAKKyAgICA2ODQxMCwgNjc0OCwgNjUwNDAsIDAsIDY0MTg0LCAxMjk3NCwgNjQxODMsIDY3NjEzLCAxMjA2NDUsIDUxNDcsIDAsIDAsIAorICAgIDc0NTI0LCAwLCAxOTI4LCAwLCA2NzY0OSwgNTk5MSwgMzQ0NSwgNjc2MDksIDQ5NzYsIDY0MTc2LCAwLCA2NzYxMCwgODI0MSwgCisgICAgMCwgNzc4NjgsIDQyMDYsIDAsIDAsIDAsIDEyODI5OCwgMCwgMTAxMzgsIDAsIDAsIDg4OTcsIDEyMDIzNCwgMCwgODM1NywgCisgICAgNDEyNCwgNzc4NjIsIDY1ODM2LCAxMjA2NDEsIDEyNzkyNiwgNzc4NTksIDAsIDAsIDExMjMsIDk2MywgNDE1NTMsIDEwMTIwLCAKKyAgICAxMjQwNSwgMTIwMTUwLCA5MjY2NCwgMzk4LCAxMzI3OCwgOTcyMywgNjM2NiwgMTIwMzExLCA3OTQ1LCAwLCA0NDAyLCAKKyAgICA5OTcwLCAxMjQwMiwgOTgzMTM2LCA0MjM5MiwgMTMwNSwgMTI0MDgsIDAsIDQ0MDA3LCAwLCAwLCA0MTQ2NCwgMTI0MTEsIAorICAgIDEyOTY5LCAxMjA4MjQsIDQxNDY1LCA5ODM1NjUsIDg1MjgsIDE1NzUsIDAsIDYzOTU1LCAxNjUsIDMwMjQsIDQxNDY3LCAKKyAgICAxMTkxNjMsIDAsIDkwOTMsIDAsIDkxNDcsIDEyODc4NywgNjM5NTgsIDAsIDkxNDgsIDk2OTIsIDQwOTYsIDUzLCA4Mjk2LCAKKyAgICA2NzUwLCAxOTUwMTgsIDAsIDk1OTQsIDAsIDAsIDQzNTI3LCAwLCA3MjcsIDE5NDcwMywgMTk1MDIzLCA1ODA1LCAwLCAKKyAgICA2NzI2LCAwLCA0MjE3NiwgMTIzNzAsIDExNjU1LCAxMTkwOTUsIDEwNTkxLCAyMjgwLCAwLCAxMjM3MiwgMTIwNjQyLCAKKyAgICAxMjAzMDcsIDAsIDkyMzQzLCAwLCAxMjM2NiwgMTA5NjMsIDYwNjYsIDEzMjksIDAsIDMwNTIsIDkyMjAsIDAsIDY0NDc4LCAKKyAgICAxOTQ3MDEsIDEwODAzLCA0MTMyLCAxMjAzMDYsIDY4NDc0LCA5MjQ3MywgMCwgOTgzMzEzLCA3NDgzNywgMTIwMTU1LCAKKyAgICAxNDk5LCAwLCA4MDU1LCA0Mjc0MCwgNjM5NjUsIDAsIDYzOTYyLCA3NDA0MiwgODkyNCwgNDMxMjMsIDU5ODgsIDM2NjAsIAorICAgIDYzOTY5LCAxMTc4MSwgNDI3MTgsIDg3ODgsIDEzNTcsIDY0ODUxLCA2NTc0MywgMCwgODc3NCwgMCwgMTI3MDg2LCA5OTQxLCAKKyAgICAxMjAxNzIsIDAsIDE5MzMsIDY5NjU1LCA5NTY0LCAwLCA5MjQzNSwgNzM4NjYsIDAsIDAsIDI0ODcsIDY3NjE0LCAzMTIxLCAKKyAgICAxODA0LCAzMzExLCA2NzYxNSwgNzAwODEsIDc4MzAyLCAxMjIyMCwgNjc2MTYsIDEyMDU5OCwgMTI3NDc1LCAwLCA2ODIwMCwgCisgICAgNjY3NSwgMTI4MTQ0LCAwLCA2NzU5MiwgMTIwNjg1LCAwLCA2NDc3MSwgMTE5OCwgOTEzMiwgMCwgNjQ2MTksIDUxMCwgCisgICAgNjQ2NjMsIDAsIDAsIDQ1NjEsIDIxMDEsIDEzOTgsIDAsIDkyNTU0LCA3NDAzNCwgNDE1NjksIDkyNjg0LCAxMTQwNiwgCisgICAgODE2NywgMTIxMjcsIDAsIDg0MCwgMCwgMTI2NTE4LCA3MTAxLCA2OTY3LCAwLCAxOTQ4OTgsIDk3OTYsIDAsIDMzMywgCisgICAgNjk4OTEsIDAsIDgxNDQsIDIxMTcsIDAsIDk4MzU5NSwgMTI0MDYsIDAsIDE5OTMxLCAxMTkwODksIDY2NzgsIDc3NjksIDAsIAorICAgIDEyNjIxLCAwLCAxMjczNjYsIDEwMjI3LCA0NzY0LCA0MzEwMSwgOTk4MSwgMCwgNDA5ODYsIDQxMjcsIDY2NDg3LCAwLCAKKyAgICA0MjIwMiwgMTI3NTQsIDE5NTAyMiwgMCwgMCwgOTQwOTcsIDY3NTk0LCAyMDQ4LCAxMjk0NCwgNDA1MCwgNjc1OTUsIAorICAgIDkxNzk2NywgNDMxMDIsIDEwNTgxLCAxMjk4NSwgNDUzMywgMTk1MDIxLCA3NDAwMywgNjQ5MCwgMCwgMTIwMzgsIDAsIDAsIAorICAgIDEyMDcwNCwgNjU0NjEsIDk3OTgsIDY5NzA0LCAwLCAxOTQ4LCA2OTg0MSwgMCwgOTUyLCAxMjgyMzUsIDAsIDAsIDEyMDgwMiwgCisgICAgNjQ0OSwgOTQ5NCwgMTIwMzEzLCAwLCA0MzA5OCwgNDg0MywgODE0MiwgNjQxNjAsIDQwOTgsIDY0MTcwLCAwLCAwLCAzNDM2LCAKKyAgICAxMTk5NzMsIDAsIDEyODE3LCA2NzU5NywgNjY3NiwgMzkzMCwgNDI2MTUsIDAsIDAsIDY3NTk4LCAwLCAwLCAwLCA2NTU5MSwgCisgICAgNDE1ODEsIDY1OTE2LCAxNDUzLCAwLCAwLCAwLCA4NTAwLCA0MjIyMiwgMTIwMTQyLCA3Mzc0MywgMTIwNDAwLCA0MzE3LCAKKyAgICAxMTU0MywgNjc2NzYsIDY0Njc2LCAwLCAwLCA2NzYwNiwgMTE5MDgzLCAwLCA0MjIxNywgMTMxMDIsIDAsIDY2MDAzLCAKKyAgICA2NjcyLCAwLCAwLCAwLCA5ODM3NDcsIDYzODQxLCA5NjEzLCA5MDAxLCA0NTI2LCAxMTI3NCwgNjc2MDEsIDY0NTIwLCAKKyAgICA2NDIxMCwgNjY2NCwgNzg3MDQsIDQyMDU2LCAxMDIyOCwgNjQ5NTcsIDExMjgxLCAwLCAzODA3LCAxNDY5LCA2NjY0MCwgCisgICAgNjUzODEsIDQyMTk3LCA0OTg4LCA0MjM3MiwgMCwgOTU5OCwgOTA0LCAzNTIsIDQyMjI1LCAxNDUxLCA4MDYxLCA4NDUzLCAKKyAgICA0MTM0LCAwLCA3NDg0NywgNjY1NzYsIDEyNzkxNiwgMCwgMTA1MjAsIDg1NzUsIDk5NjAsIDEyMDEsIDEyNzI4OSwgMTI4NDYsIAorICAgIDEyNzI5MSwgMTI3MjkyLCAxMTkxOSwgNjQ5NjIsIDEyNzI4NywgNDM3MzksIDEyNzI4MSwgODUxMSwgOTQ2MCwgODIzLCAKKyAgICAxMTU4NywgMTIzMDUsIDAsIDY0Njk1LCAxMjczMDUsIDEyMzg3LCAxMjUzLCAxMzE4MywgNjU3NjYsIDUwMCwgNDI3ODMsIAorICAgIDY1NzY1LCA2NDIwOCwgNjQzNjksIDY1NzYwLCA2NTc2MSwgMTE5NTg1LCAxMTYwNiwgNjQ3ODQsIDExNzAyLCA2NjQ5OCwgCisgICAgOTgyMSwgNjQzMDQsIDAsIDUxNTIsIDExMDQ4LCA3NTMzLCA2ODM2NiwgNjQ0MTAsIDkyMzA1LCAwLCA0MzIzLCAxMjAwNjIsIAorICAgIDkyNjY5LCA3MTMzMiwgMTI3MDUyLCA0MjU4NywgNDIyMTQsIDQxMzk0LCAwLCA0NzYzLCA0MTEyLCAxMTg5MzUsIDAsIAorICAgIDUyNjAsIDQzMTQzLCA5NDAzOCwgMzI2LCAxMjAxMzEsIDY4NDIzLCAwLCAxMDc3MSwgMjg3NiwgNzQwNzQsIDkyNTMwLCAKKyAgICAxOTQ5MjQsIDQxMzk4LCA3MzgyLCA5ODAyLCAxMjcwNzcsIDEyNzA3NiwgNDUzLCA0MTM5NiwgMTIwNTI0LCA0MjcyMCwgCisgICAgMTIxNDAsIDk1NzIsIDAsIDcwMDMsIDE5NDg4MywgNDIzMzQsIDc3MDQsIDEyNjQ5MCwgMTk0ODg1LCA0MzE0NCwgNDEyMywgCisgICAgODQ5NCwgNDMxNDYsIDk5NzcsIDAsIDAsIDY1NzU5LCAxMDc2NSwgNjQwNjEsIDQ0NjUsIDk4MDgsIDY0MDU2LCA2NTU4MiwgCisgICAgNDEyNiwgMCwgOTUyMSwgOTU4OSwgNjQ3NTUsIDAsIDY0MDIwLCAxMjY2MDQsIDEwNDY0LCAwLCAwLCAxOTQ4NjksIDY0NTE0LCAKKyAgICAxMTUyOCwgNjQwMjQsIDEyODA3MiwgNjc5LCA2NDAxMywgMCwgNTg1MCwgNzU4LCA3NTM2LCAwLCA5MjIzNCwgNDE0NDEsIAorICAgIDEwNjkzLCA2NDAwNiwgOTgzNTY3LCA2NDAwNSwgNDA1OCwgMTE5MDE5LCAxMjY0ODcsIDY0NjYwLCAwLCAxMTkwNTAsIDAsIAorICAgIDk4MzA2OSwgMTEzOSwgNDMyOTgsIDY0MDI3LCA2NDAyOSwgODk3MCwgMCwgOTkzNCwgOTgzMDk0LCAxMDc3NCwgMTI4MDIwLCAKKyAgICA0MjIwMSwgMTI0MjEsIDEyODIxNiwgMCwgMTg1MiwgMzA1NywgNjQwNDYsIDczNzQ0LCA2NDAzNCwgNjQwMzksIDAsIDAsIDAsIAorICAgIDE5NDg5OSwgOTIzMjIsIDc2NDUsIDEyODU0LCA3NDMzOCwgMzQ5NiwgMCwgMCwgMCwgOTEwMiwgNjI3LCAxMjc3OTUsIAorICAgIDYxNTgsIDgzMjcsIDc0NTUzLCA2NjYzMiwgMTI0MTksIDEzMzA5LCAxMTU3MCwgMTI3ODExLCAxOTk2MCwgMTE2OTYsIDAsIAorICAgIDEwMTgsIDExODk3MCwgMTk0OTA5LCAxOTQ4OTcsIDE2ODIsIDE5NDg5NiwgMTk0OTExLCA0Mjc1NiwgNjc2NSwgMTk0OTA2LCAKKyAgICAwLCAwLCA3MzgxNCwgMTE0MTIsIDY3NjgsIDEwNzI4LCAxOTQ4MzAsIDcxMzE2LCAxMTg4NjMsIDQzMzExLCA2NDk2NiwgCisgICAgMTE1NzcsIDAsIDQzMDQwLCAxODMzLCAxMTU3NiwgMCwgNzQ3NzksIDAsIDE4NSwgNjUwODUsIDc0NTMzLCA2NDc1NCwgCisgICAgMTk0ODQ4LCA3NTM1LCA4MDg1LCA0MjUyNSwgMTIwMzg3LCA5NzQ5LCA0MTcwMSwgNjEzMSwgMTk0OSwgNDExNywgNzg0NywgCisgICAgMTIwNDg5LCAxOTQ3MTEsIDY0NDgzLCA2NTY5MywgMCwgMCwgMCwgNjk2OTUsIDQyMjQwLCAwLCAxMjY2NTEsIDQyODY0LCAKKyAgICAxMjY0OTgsIDY0NjY3LCA0MTg2OCwgMTE4NCwgMCwgODE1LCAxMTQ4NCwgMTI3NTM1LCA2Nzg0MCwgOTgzNjUxLCAwLCAKKyAgICA2NjE5NywgMCwgMTA5ODYsIDY0NjgzLCA5ODM3ODUsIDAsIDM0NTUsIDAsIDAsIDk4NzksIDAsIDAsIDQxNTgsIDEyODA1MCwgCisgICAgNjgxNjYsIDAsIDAsIDAsIDAsIDY5NjQ1LCAzMzIsIDExODgwOCwgMCwgNTE0MiwgMjQwNywgNjk2NDMsIDQyMTk5LCAwLCAKKyAgICA5MjQwNCwgNzQzNzMsIDAsIDU1MjE3LCAwLCA2Mzg3MCwgNDMxNjMsIDAsIDAsIDkyMzkwLCA0Mjg2NywgMTgzNCwgMCwgCisgICAgOTI0NjEsIDY5ODE3LCAxMDk0MCwgNjUyNDksIDExOTA0MCwgODY2MiwgMCwgMCwgMjY1MiwgMTIwNTI3LCA3MTY0LCAKKyAgICAxMDc4NCwgMTk1MDkzLCA2NzY3NCwgMCwgOTIyMzMsIDkyNDgyLCAxOTQ3NDksIDc0NTYyLCA5MTc1MDUsIDE4MjgsIAorICAgIDc0NDc0LCAxMjAzMjcsIDc4NjIwLCA4NTMxLCAxMjQ5OSwgNjI4MCwgMTIzMjQsIDExODg1NCwgNjUyMzgsIDY4Mzc0LCAKKyAgICA0ODMyLCA2NTU3MywgMCwgNjI3OSwgMTI1MDgsIDEyOTA0LCAxMjUwMiwgOTE2MSwgMCwgMTYyMCwgNjQ0MzYsIDM2MDEsIAorICAgIDE5NTA5NCwgMTI4MDczLCA5ODM1NjIsIDYwOSwgMTE1NTUsIDk4MzA5OSwgMTI0OTYsIDEyNzgzOSwgNzQxODEsIDQzNDMsIAorICAgIDEyNTA1LCAwLCAxMjc4NjMsIDAsIDExMzc3LCAyMzksIDAsIDYzNywgMCwgMCwgNDI2NzEsIDAsIDAsIDAsIDQzNTY1LCAKKyAgICA3MTMwNiwgMTI2NDkzLCAxMjY5NiwgMTI4MjU2LCAwLCA5NDA2MiwgMTI5MjksIDAsIDcxMiwgMCwgNDE5NywgOTgzMjA2LCAKKyAgICA0MjgxOCwgMTI2NjMyLCAwLCAxMjA0OTAsIDAsIDExOTEzNywgMTUwNiwgNDM1NjIsIDAsIDkyNDkxLCAwLCAxMjY1MSwgMCwgCisgICAgNjQ2MjgsIDc0NTE3LCAxMjA1OCwgNzQwODQsIDkxNzgzOCwgNzQ5NCwgMCwgNDkyNCwgNjU1OTIsIDExODg0NCwgMCwgCisgICAgMTI3MDg4LCAzNTUsIDk3MTksIDEyNzA4NywgMTMwNjYsIDY0Nzk2LCAwLCAwLCAxMjAzMywgNDIxNzgsIDAsIDY5NzYwLCAKKyAgICA0MjU3MSwgOTI2MzUsIDAsIDAsIDAsIDAsIDAsIDEyNzE3NiwgMzE3OCwgMCwgMCwgOTI3MDQsIDAsIDkwODAsIDEyNzAwMCwgCisgICAgMTIwMzUyLCAwLCA2ODIwOSwgMCwgMTEwODIsIDAsIDU2OTksIDE5NTEwMCwgNjYwMDAsIDk0ODgsIDY1MTY2LCAxMTkxMTIsIAorICAgIDAsIDAsIDAsIDAsIDcxMzEzLCAwLCA1MjY1LCA2OTIzNSwgMCwgMTE0ODcsIDY3ODU4LCAxMjQ2NCwgMCwgNDMwNDUsIDAsIAorICAgIDAsIDQzMzQ1LCAwLCAxMDc3MCwgMTE4OTk0LCA2ODA3LCA0NjUsIDk4MjksIDAsIDc0MzQ4LCAwLCA0MzM0NiwgODExNiwgCisgICAgNzk1LCAwLCAwLCAxMjQ2MiwgMTA5MzAsIDEwODMxLCAwLCAxMTg5NTIsIDY0MzYyLCA3NDMzNCwgOTgzNjAyLCAxMjA4MTEsIAorICAgIDAsIDEyNDY4LCA4NjA3LCAxMDA4LCAwLCAxMDA5MiwgMTk1MDc4LCA5MTc4NDIsIDY3ODU1LCA1NTI1NywgNzM3NzEsIAorICAgIDE3NjYsIDExMjgyLCAxMTk5NiwgMTgyMCwgNDU0NywgMCwgMCwgMCwgMCwgMTMyMjMsIDEyODY2NSwgNjQ1OTUsIDEyNzI5NCwgCisgICAgMCwgOTIzMTEsIDQzNDUsIDEyNjE2LCAwLCAwLCAwLCA3NDQ2NywgMCwgMCwgMCwgNTM4MiwgMCwgMCwgMCwgMTE5MDYwLCAKKyAgICA2NDk1MywgNTQwNiwgMTk5MjAsIDY5ODk3LCA2NjUxMCwgMzU5MCwgMTk0ODY0LCAxMTMwLCAwLCAwLCA0MjAxNiwgMTE4MjMsIAorICAgIDQzMDIzLCAwLCAxMTg4OTYsIDc3NDIsIDAsIDEzMjgwLCA3MTMyMywgOTMyNiwgNzM4MjYsIDUzMTAsIDc0ODEyLCA3ODU4NCwgCisgICAgOTIyMjksIDg5NTksIDQzNTg5LCA2NzQ3LCA2NjcyMywgMCwgODU2OCwgMCwgMTIwNDk2LCA3MzgxNiwgMTIwODAzLCAKKyAgICA5ODM4NDgsIDQyNjcwLCAwLCAxMTYyMSwgMTI0NjAsIDAsIDEyMDYzMSwgMCwgNDMwNjMsIDc0NTE5LCAxMjcxODIsIDAsIAorICAgIDczOTE3LCA3ODQzLCA2OTc4MywgMTE2ODksIDU0MTAsIDU3ODMsIDEwNDY4LCA4NDAzLCA1NDAwLCAxMTU5NCwgMTI4MjQ3LCAKKyAgICAwLCAxMTg5OTAsIDEwNDkxLCA2OTg0MiwgNjQ0MTIsIDAsIDAsIDU1ODcsIDQyODY1LCA2NDQwNCwgODI2OCwgNDkyMywgCisgICAgNjUwODYsIDg5ODEsIDEyMzgyLCA0MjEzMywgMTIwNzU1LCA5NzA2LCA2OTczOCwgMCwgNjY2MTAsIDEwNDYxLCAxMjEwMywgCisgICAgMCwgODY0MiwgMCwgNDI3NjYsIDk4Mzg2NiwgMjIxMCwgOTk4MywgMCwgOTQwMDksIDAsIDAsIDAsIDczOTgsIDQxNTE1LCAwLCAKKyAgICAxMTgwMiwgODA0MSwgMTQ2MSwgOTEwLCAxMTkxMzMsIDAsIDY3NDksIDM2NTgsIDkzOTY0LCAxMjA1MjUsIDAsIDc2MTcsIAorICAgIDE5NDg0MSwgMTI4ODgsIDEyNzk4MywgNjc2NjgsIDEzMTQzLCAwLCA5MTkzLCAxMTA5NywgNTcwMywgMCwgNDE1MTcsIAorICAgIDQxNTA0LCA0MTUxOSwgMTAwMTYsIDY0MzA1LCAwLCA2NTg2NCwgNjIzLCA3ODEsIDY3MCwgMTA2NjAsIDU3NjksIDYxMywgCisgICAgNzU0MywgMTIwMjc5LCA0NzcsIDQxMDgzLCA5MjUyMSwgMCwgNTkyLCAxNTc4LCAxMjQ1OSwgNDM0NDksIDAsIDAsIDgyMjUsIAorICAgIDAsIDY1NCwgMTEzNDUsIDY1MywgNjUyLCAwLCA2NDcsIDAsIDYzMywgMTIwNzQ0LCAwLCAxMjY0NzIsIDEyNDgwLCA0MzI0MywgCisgICAgMCwgMzksIDEyNDg3LCAwLCAxMjA1MjksIDc0MTk5LCAxMjQ4MiwgMCwgMTI0ODksIDAsIDMxOTUsIDU1NTAsIDk4MzU1NCwgCisgICAgNzg5NywgMCwgMTIwMywgNzQzOTYsIDE4MTMsIDY0NTQ0LCA0MTMxMSwgMTIwOTAsIDAsIDI4NzcsIDAsIDAsIDE2NzUsIAorICAgIDY5ODQwLCAwLCAwLCAwLCAxMDA3MCwgMTA1OTUsIDAsIDExOTA3NywgMTk0Nzc3LCA5ODM2MTEsIDAsIDAsIDAsIDQzMjQ0LCAKKyAgICAwLCAwLCA5ODM5MTYsIDExOTU2MSwgOTgzMDc4LCAwLCAxOTQ5MjEsIDEyODE2MCwgOTkzOSwgMCwgOTgzMTUxLCA3Nzg2MCwgCisgICAgMCwgMCwgMjcwLCAwLCAxMDcxNCwgMCwgMCwgMCwgMCwgMCwgNjUzNzIsIDAsIDc0MDM4LCAxMTk1NTgsIDYyNzMsIDY2Njc5LCAKKyAgICAzNjQsIDk1OTUsIDE5NDkwOCwgMCwgMCwgNzA3LCAwLCAwLCA5MjgyLCA2NjQ4OSwgMjI0LCAwLCA2ODY3MCwgOTMzMiwgCisgICAgNDk2NiwgNjg2NzcsIDAsIDY4NjQ0LCAwLCAzODQxLCA2ODYzNCwgMCwgMTA3MzIsIDY4NjQwLCA4NTAsIDQ5NzIsIDAsIAorICAgIDEyODkwLCAyOTA5LCA2ODYxOSwgNDQwMDgsIDY4NjI3LCA5ODM3MTgsIDExNTQ0LCAxMDIwMywgOTYwOCwgMCwgMCwgCisgICAgMTE5NjIsIDE5NDY5NCwgMTI1MDcsIDExOTYsIDEyODY4NywgMTI4MzExLCA3NzcsIDEyMDE4NywgNDM3NSwgNjUyNzEsIAorICAgIDY3Njc4LCAwLCAxMjE5OCwgMCwgNjQ4MjQsIDExOTM0MywgOTgzMjM2LCA5NDU0LCA2Mzc3OCwgODY1OCwgNDI1MjgsIAorICAgIDc4MDAwLCAyNzA1LCA5MTc5NzUsIDQxNTIwLCAwLCAwLCAxMTk4NiwgNzc2NSwgNDI1MDIsIDgyODAsIDc0NTIwLCAyNzAxLCAKKyAgICAwLCAxMjcwMDIsIDU3NjcsIDAsIDAsIDk4MDksIDgzNTMsIDYzNzQ3LCA2NjcwMSwgNjM3NzIsIDk4MzgxNCwgNjM3NDUsIAorICAgIDE3NDgsIDYzNzcwLCAwLCAwLCAwLCA2NTU0MiwgNjM3NjYsIDU1MjQ0LCAzMDYxLCAwLCA2Mzc2NCwgNjM3ODcsIDkwNjcsIAorICAgIDYwOTYsIDAsIDc2OTQsIDAsIDcyNTcsIDYzNzY4LCAzNDg1LCAxMjk4NywgMCwgMTI3NTIyLCAxMjA2MjgsIDYzODA3LCAKKyAgICAxNTkxLCAwLCA2Mzg2LCA2Mzc4MywgMCwgMCwgOTI1MzUsIDAsIDAsIDAsIDc0NTc1LCAwLCA2NTcxOSwgMTMwODMsIAorICAgIDY0NTc0LCA2NTAxMiwgMCwgMTY0MCwgMTI0OTUsIDY2NjkxLCA3NjI0LCAzMTM4LCAxMDk5NiwgOTIyNDcsIDE5MjIsIDAsIAorICAgIDEyNDk4LCAxMDk4NywgNjk5MzYsIDY5OTM5LCAzODk0LCA2NTU0MywgMCwgMTk0ODQyLCA5ODM1ODgsIDQ5MywgMCwgCisgICAgNDMxOTcsIDE3MTcsIDQyMjgsIDQ3OSwgMTAzMDMsIDc0MDIwLCAwLCA5MTc5MzUsIDEwMzM1LCAzNTIwLCA5MTc5MzIsIAorICAgIDEyNDkwLCA2NDMxNSwgMCwgMTI3MDM5LCAxMjQ5MywgNjIzMywgNDI2ODEsIDEwMDIsIDEyNDkxLCAwLCA2NDkxMSwgCisgICAgOTI2MTUsIDIwOTYsIDY1MTIwLCAwLCA3ODIxOSwgOTgzMDgxLCA4Mzc4LCAxMTYzMiwgMTI3MDQxLCA2NjIxMywgNjM4NjQsIAorICAgIDY2MjIxLCA2NjIyNiwgNjYyMjksIDEzMjE4LCA2NjIzMSwgNjYyMTYsIDg1MDcsIDY2MjM2LCA2NjIxMSwgNjYyMTgsIAorICAgIDkyNjcyLCA2NjI0MCwgNzgwNDEsIDY2MjMzLCA4OTI4LCA5ODM1NTIsIDc5MDksIDY2MjM0LCAxMTYwNSwgNjM3NTksIAorICAgIDk4MzY1NCwgNjYyMDgsIDczOTk5LCA2Mzc5OSwgNjM4MDMsIDI0NCwgMTE1NDIsIDEyODk4LCAxMjQ5NCwgNzM3NjEsIAorICAgIDEyNDkyLCAxMjY2OSwgMCwgMCwgNzQxNTMsIDAsIDEyODI3OCwgMTIwNjgwLCA0ODgyLCAxMzA0MCwgMCwgODYxMiwgNDg4NSwgCisgICAgNzQwNTMsIDAsIDEzMDQyLCA0ODgwLCA2NDY2MiwgMjQyOSwgMTM2MCwgMjQ4LCAwLCA2Mzc5NywgOTIzOTQsIDQyMzU4LCAwLCAKKyAgICA3MjkyLCAwLCA2Mzc1NiwgNDI3ODYsIDY2NjkzLCAwLCAxODcwLCA3ODA0MCwgNDcwLCA3ODAzOCwgNzgwMzUsIDc4MDM2LCAKKyAgICA3MDAyOCwgNzgwMzQsIDQ1NzksIDEyODA5MCwgMCwgMTI1MTEsIDc0NDUzLCAxMjUxNCwgMCwgNzQ1NzksIDcyMzksIDcwMDEsIAorICAgIDg2MjMsIDk0MDExLCAxMjgwNTIsIDEyODA0OCwgNzM3OCwgMTI1MTIsIDExNjE1LCA2MTA0LCAwLCAwLCA2NTksIDYwOTgsIAorICAgIDAsIDEyMjM0LCAxMjczMDcsIDEyNzA2NywgODMxMSwgMTI1MTAsIDQxODAzLCAxMzAzOSwgMTI3MDcyLCAxMjUxMywgCisgICAgMTAyMDIsIDEyNDcxLCAwLCA4NzQ3LCA5ODM5MjAsIDAsIDAsIDIzMjMsIDAsIDIzMTksIDc3OTE3LCAxMjQ3NywgNzc5MTYsIAorICAgIDIzMTEsIDAsIDQ0MTUsIDIzNywgNjI4MSwgMTI3MjgwLCAwLCAwLCAyMzA5LCAxMzEyLCA4MTczLCAxMjg4NzEsIDEyNDY5LCAKKyAgICAwLCA3ODUwNSwgNjQzMzUsIDEwNjA5LCAwLCAxMjgxMTEsIDkzOTcsIDExNTI0LCA5Mzk1LCA5Mzk2LCA5MzkzLCA5Mzk0LCAKKyAgICA5MzkxLCA5MzkyLCA5Mzg5LCA2MjA5LCA5Mzg3LCA5Mzg4LCA0OTMyLCA5Mzg2LCA5MzgzLCA5Mzg0LCA2NzQwLCAwLCAKKyAgICA2NTQ1MSwgODE4NSwgMCwgOTE3ODMyLCA0MzAyNCwgNDMzMzYsIDY3NjU5LCAyMzEzLCAxMjgxNjcsIDc5NDgsIDkyMzYsIAorICAgIDkyNTcxLCAwLCAwLCAxMDU3MCwgNDM0NzMsIDYyODksIDEwNDg0LCAwLCAwLCAxMTk5OCwgMTIwODIsIDEwOTI0LCAzMTQ3LCAKKyAgICAwLCAxMjA2ODQsIDEyNTI0LCAxMTkwODEsIDIzMTAsIDExODE4LCA5MzgxLCA5MzgyLCA5Mzc5LCA5MzgwLCA5Mzc3LCAKKyAgICA5Mzc4LCA5Mzc1LCA5Mzc2LCAxNjgzLCA5Mzc0LCA5ODM3NzgsIDkzNzIsIDEyNDQ0LCAwLCAwLCAxMzAxNiwgODIxMCwgCisgICAgOTgzOTU4LCA0MjAyOSwgMTEwNzksIDEyMzMxLCA0MzQ1MSwgNDIwMzIsIDg3NDQsIDcyNiwgMCwgOTgzODM3LCA0MTU1LCAwLCAKKyAgICAwLCA0MjAzMCwgNTAwNywgMTI1MjIsIDQzMDg4LCAwLCA0OTUxLCAxMjc4MDUsIDEyNzI0MCwgMCwgOTkyMiwgNDMzMDksIAorICAgIDk4Mzg0MSwgMTI1MjUsIDk4MzQ3MSwgMTIwMTYsIDY1NzcwLCA5NTQ4LCA2NzY2NSwgNDAzLCA3ODIzMCwgMTI1MDMsIDAsIAorICAgIDAsIDExMDMwLCAwLCA5MjU2NywgNjU2OTEsIDYzOTk4LCAxODE5LCAxMDQ5NiwgMCwgMCwgMTE5OTIwLCAwLCAxOTQ2NjgsIAorICAgIDAsIDEyNTA2LCAwLCAxMjIzMSwgMCwgMTI1MDAsIDQ0MDIzLCAxMjUwOSwgNjQzOTMsIDc4ODMwLCAzMzg5LCAxMDU4OSwgCisgICAgNjYwOCwgNDEwNDcsIDEyMDMyMSwgNzgzOTUsIDc4Mzk0LCA3NDA2OSwgNzc5OTUsIDc4MzkxLCAzNjA4LCA4MjgxLCAKKyAgICAxMjAzMjAsIDExMDcsIDAsIDkwNzYsIDg4NjIsIDY5NzQzLCA0MTA1MiwgMTMwODQsIDY0NzY2LCA0MzIxNywgNzgwMywgCisgICAgMTMyMjIsIDc0MTY1LCA3NDc4MiwgMTI2NTE0LCA4NTQ2LCAxMTU1MywgNjM5OTUsIDEzMTc3LCA5MDQzLCA2MzAzLCAKKyAgICA5ODM5NDcsIDQ5OCwgNjQ0NzEsIDEyMDMyNCwgMTI4NTY3LCAxMjUyOSwgODA0MiwgMCwgMjM0NCwgMTI1MjgsIDgwMzEsIAorICAgIDI0MTQsIDAsIDY5NzE5LCAzMjMxLCAwLCA2NDIyLCA2NjUxMiwgNjk2NTMsIDEyNTMwLCAyNTM3LCA3ODQwNSwgNDE0MjksIAorICAgIDEyNjU4LCAxMzAzNiwgNjU3NzIsIDAsIDc4NzM4LCA0MTQzMywgNDcxOSwgNDY5LCAwLCA0MzYzLCAzMzEzLCA0MTQyOCwgCisgICAgNzg0MDcsIDIwMjMsIDE3NzIsIDc4MjI0LCA3ODIyNSwgNjU3MDYsIDEwMDUxLCA2NDgxMiwgNzgyMjAsIDAsIDk5MjAsIAorICAgIDEyMjE1LCAwLCA0OTMxLCAxOTUxLCAxMjQ5NywgMTE5MzYzLCA5NjA3LCAwLCA5NjYzLCA5ODMyMjgsIDExOTYzNCwgNjUwMywgCisgICAgNDExMTAsIDAsIDE0OTEsIDAsIDAsIDEyNzMwNCwgNDEwNjEsIDAsIDE5NDgzOCwgMTI3MTg3LCA2NTAyNiwgNDE5OTMsIAorICAgIDQxNTA5LCAxMTA0NSwgNjUwMjgsIDc4NjAyLCA2NjQ3NiwgNDExMDgsIDk3MzgsIDQxOTk1LCAxMDc1LCAxOTU4LCAxMjUzNSwgCisgICAgNDE5OTIsIDQxNTA2LCAwLCA0MTY4NywgMCwgMTIwNzE3LCAxMjc3NzYsIDk5NDAsIDEyNzI5OSwgNzY5MiwgOTgzODMzLCAKKyAgICA4MDA4LCA0MTEzMSwgMzMwLCA4NTY2LCA2NTA4MywgNDExMzMsIDk4MTYsIDEyNjUxNywgMTI1MzIsIDc4NTUwLCA3ODU0NiwgCisgICAgMzUwOCwgMTI3MDU4LCA0MzIzNSwgMCwgMTI3Mjk4LCA2NDEzOSwgNzgyMzEsIDY0MTEsIDEyOTEwLCA3ODU1NCwgNjY2NDQsIAorICAgIDEzMDI4LCA2NzM3LCAxMjUzNywgMCwgMCwgNjQxMzYsIDEyNTM2LCAyMzUwLCAxMzAyOSwgNzgyMzMsIDAsIDk4MzEwMywgCisgICAgMTMwMzAsIDY3MDIsIDQ1MjcsIDAsIDEyNTM4LCAxMjg4MTAsIDk4MzY0NSwgNjU1OTksIDY1NzE3LCA5OTY2LCAwLCA0OTQ4LCAKKyAgICAxMjQ4NCwgNDAzMiwgMTI4MTQ5LCAxMjYyMywgMCwgNjIwNywgMCwgNjExNywgNjU5MzAsIDg0MTIsIDAsIDc0MzgsIDEyOTYsIAorICAgIDIzMjUsIDQxNTExLCAxMjY2MjUsIDEwMTQ5LCA3NDExOCwgMCwgMTI3Mjg2LCAxMjQ4MSwgMCwgMTI0ODgsIDY2NzEzLCAwLCAKKyAgICA0MTU1NiwgNjQ0MTQsIDExODgwMiwgMjM1NCwgNDI2MTksIDczNzY2LCAwLCA2Mjk1LCA5MDEsIDQxNTEwLCA3OTUzLCAwLCAKKyAgICA2NTAzMiwgNDE1MTMsIDk4MzE2NiwgMTE5MjcsIDY2NTg0LCA3ODU1OSwgNzg1NjAsIDc4NTU3LCA3ODU1OCwgMCwgNzg1NTYsIAorICAgIDg0OCwgOTg2OCwgMCwgNjQyNCwgNzg1NjgsIDExOTMzOCwgNjk5MjIsIDc0MDMxLCA3ODU2MywgNzg1NjQsIDIzNTIsIAorICAgIDc4NTcyLCA4OTMsIDY0NTc2LCAxMTI4OSwgMTQwNywgNjc5NzMsIDAsIDEzMDI2LCA2NzYyLCA3ODU3OSwgNzg1ODAsIAorICAgIDEzMDIzLCA4OTAzLCA5Nzc3LCA2NjcxNSwgMTg3MSwgODA5OSwgMCwgMCwgMTM0MywgOTgzODIzLCAwLCA5MzI1LCA2ODE4LCAKKyAgICA2MjgzLCAxMTczOCwgMCwgOTgzOTM0LCAwLCAxMTc0MSwgMCwgMCwgOTIxNiwgODI2MywgMTEyNzksIDE5NDc1MiwgCisgICAgOTgzODI1LCAxOTQ3NTQsIDEzMDIxLCA2NDQ5NCwgMzEzNiwgMTk0NzU4LCAxOTQ3NTcsIDE5NDc2MCwgMTMwMjIsIDQyNzM3LCAKKyAgICA5OTU2LCAwLCAwLCA3NDU1MiwgMTAwMTQsIDAsIDQxMjYwLCAxMTkzNDAsIDEzMDIwLCAxMDAyNCwgMTk0NzY0LCA3NDU4MywgCisgICAgNzQzNDAsIDY5NjgxLCAwLCA0MzAwMSwgODAyOSwgMCwgMCwgOTgzNzgwLCAzMzM1LCAwLCAwLCA5Nzc2LCAxMjA1MjYsIAorICAgIDE5NDc0OCwgNTIxNSwgNDI2NDQsIDMzMzMsIDE2MzIsIDE5NDc1MSwgNjQ4NDksIDMzNDIsIDc4NTgyLCA1MzYzLCAxMjk1NywgCisgICAgNzg1ODEsIDQxNTYsIDAsIDAsIDY0MjEsIDc4NTkxLCAxNjExLCA3ODU4OSwgMTMwMTgsIDc0MjU3LCA3ODU4OCwgNzQ1NDIsIAorICAgIDMzMzcsIDQ1MzcsIDY3ODk1LCAxMTczNiwgMCwgNjg2MDgsIDY0ODIsIDQyMTQsIDczNzkwLCAxMTk0NSwgMCwgMTMwNDYsIAorICAgIDg4MzgsIDQyNSwgNDAyNSwgMTA3MDksIDc4NTk1LCAyMTA4LCAyMzkyLCAxMzA0NywgMCwgMCwgNjgxOSwgMTMwNDksIAorICAgIDY0OTksIDkyMjQzLCAxMjQyNCwgNjg2MTQsIDczOTQ0LCAxMzA1MCwgOTkyNCwgMTk0NzQ1LCA2NTA3LCAxMjc5MTksIAorICAgIDk0MDczLCAxMjgwNjksIDMyNzcsIDg5MjksIDQ5NDcsIDQxMDU1LCAwLCAxOTQ3MjIsIDE5NDcyMSwgMTk0NzI0LCAxMzA0NSwgCisgICAgNjQ2MjYsIDY2MDM0LCA3NzUxLCAxOTQ3MjcsIDgzNzEsIDE5NDcyOSwgMzk5NywgMTI4MDYsIDg3NjgsIDEzMDQ0LCAwLCAKKyAgICAxMjQyMCwgNDAyNCwgMTk0NzMwLCA0MTA1NCwgMTA3OCwgOTc1NywgNjk3MzYsIDQxMDU3LCAwLCAwLCAwLCAwLCA5ODM3OTEsIAorICAgIDkyMjEwLCA5MjQxMSwgMCwgNDE0OTYsIDAsIDkxNjUsIDE1NzIsIDExOTExLCAwLCAxMTg4NDIsIDIzNDYsIDEzMjcwLCAKKyAgICA4OTU4LCAwLCA5NjQ2LCAzNzczLCA0MzE4MywgNjQwMSwgNTgzMSwgMCwgMCwgMTMwNDMsIDgwNTYsIDkyNDk0LCA2NTY4MSwgCisgICAgMjA4LCAxMjczODIsIDQxNTE0LCAwLCAwLCAwLCAxMDY5OSwgNjQwOCwgOTIyMjcsIDc4MjUsIDU2NjEsIDAsIDEyMDYzMCwgCisgICAgMzYwMywgNDExMDksIDIzOTgsIDM1NDgsIDEyNjU5NiwgMCwgMTE5OTMzLCAwLCAzMTE1LCA5OTE4LCAwLCA4Mjk0LCAKKyAgICA0MjkxMiwgMCwgMCwgMTk0NzI2LCA0ODc2LCA2NTgwNCwgMCwgMCwgNDM0NjgsIDk4MzI3NCwgNDE1NTgsIDQxNDcxLCAKKyAgICA3Mzk1MCwgODE1OCwgOTk0NCwgNDE0NzIsIDEyMDI5OCwgMTMwNTEsIDc4Njg5LCAzMTQzLCAxOTQ2NzQsIDY3MDEsIAorICAgIDQxNTU5LCAxODk2LCA2NjI1NiwgMTMwNTIsIDE5NDY4MCwgNTY2NSwgMCwgMTE5MDcxLCA3MDI1LCA2Mzk3NCwgMCwgCisgICAgNzQzNTIsIDc0MTYxLCA0MTU0LCA5ODYzLCA0MzU1MCwgMTIzMTAsIDU2NjIsIDQyMzgyLCAxNTY0LCA3MzkyNCwgMTEyMSwgCisgICAgNzgzMTksIDYzOTU5LCAwLCA5OTQyLCAxMzIzMSwgMCwgNjQ3NTIsIDQ3MzIsIDE5NDY2NiwgMTE1OTYsIDExOTkzMSwgCisgICAgNjUxODcsIDE2MjYsIDYzOTgzLCAxMDExMCwgNjQ3NzIsIDQyMDI0LCA2NDIwLCA0MjAyOCwgMCwgMTA1MDksIDI3OTUsIAorICAgIDQ5MTAsIDE5NDcyOCwgNjkyMzEsIDY0NzUzLCA2Mjc1LCA5Mzk1NywgMTE4ODMwLCA2Mzk3OCwgMTEwNDQsIDMyMjksIAorICAgIDY0MjMsIDQyNzc0LCAwLCAwLCAwLCAxMjgyMywgMjMzMSwgOTE3ODEwLCA3MDg1LCA2MTM3LCAwLCA3NTI0LCAwLCAKKyAgICA5MTc4MDksIDgzNDYsIDAsIDgzMzgsIDEyODMxNSwgNjUwNDMsIDAsIDgyMiwgMTI3OTg0LCA5OTAzLCA2NDcyMSwgNDI3MjIsIAorICAgIDY5ODc3LCAxOTQ2NTksIDc4NjU1LCA3ODY2MSwgMTk0NjYwLCA3ODY2MiwgNDEyNjUsIDUzMTEsIDE3OTUsIDk2NSwgCisgICAgMTE4NzkxLCAxMDU4NywgNzgwNTUsIDExMjc4LCA3ODYzMiwgMTk0NjQwLCAwLCAxMjk0NiwgMTk0NjQxLCAxMTkzNDEsIAorICAgIDEyMDM0OSwgNjI5NCwgMzE0NCwgMTk0NjQ4LCAxOTQ2NDcsIDY1MDE5LCAxOTQ2NDksIDczOTkwLCAwLCA5ODM5NjAsIDc0OCwgCisgICAgNDEwNjcsIDIzMzAsIDUzNSwgMzE0OCwgMTIzNzUsIDc4Nzk5LCAxOTQ2MjksIDEwNTU2LCAyNDc1LCAxMjM4OCwgNDg4OSwgCisgICAgODk2OCwgNjc4NjMsIDM1OTMsIDAsIDAsIDIzNDIsIDAsIDE5NDYzNCwgNjUyMDYsIDQ4OTQsIDE5NDYzNSwgNDg5MCwgCisgICAgMTk0NjM3LCA5MTc4MDQsIDU4MSwgNDg5MywgOTgzNjE2LCA2NTcxLCA2NTU0NSwgNDg4OCwgNDE1NywgNzgwNDgsIDc4MDQ5LCAKKyAgICA3ODA0NiwgNzgwNDcsIDAsIDEwMTE5LCA2NDE1LCA0Mjg5MywgMCwgNjk3MDIsIDAsIDAsIDExMzc1LCA2NDc0NiwgMjMzMiwgCisgICAgNzgwNjMsIDQxMiwgNzgwNjEsIDY0OTMyLCA0Mjg4MCwgNDM1ODcsIDAsIDAsIDAsIDAsIDY1MTk3LCA3ODA2NiwgMTIyMDMsIAorICAgIDc4MDY0LCA3ODA2NSwgODkxMywgNjU4NTQsIDQ4NzUsIDY1ODExLCAxMjAzODEsIDEyMDM4OSwgMTE4ODg4LCA5MzQ0LCAKKyAgICA4ODI2LCAxMjAzODYsIDEyMDM5NSwgMTMxMDQsIDc0NzgxLCAxMTk5NywgMTIwMzkzLCA3ODA3NSwgMCwgMzEzNCwgMCwgCisgICAgNjU2OTYsIDkyMzMxLCAwLCA2NjIxNywgMCwgODMzNCwgMTE5MzQ0LCAwLCAzNDQ5LCAwLCAwLCA3ODQxNCwgNzg0MTMsIAorICAgIDExODk1MCwgNzQwMTEsIDAsIDAsIDAsIDAsIDE5MDgsIDEyMDE2NywgNDMyOCwgMTA3MzQsIDEyNzAxNCwgMCwgMTI3OTE0LCAKKyAgICA3ODA0LCA3ODI3MiwgMTA4MTEsIDYyNTAsIDExMzM5LCA0OTE0LCAxMTM2NywgMCwgNzgwNTQsIDQ5MTcsIDc0NTE2LCAKKyAgICA3NDIwOCwgNjQyODUsIDQ5MTIsIDU0NjQsIDEyNzgzNiwgMTE4ODkzLCAyMzYxLCA3OTcxLCA3ODA3MiwgNzgwNzMsIAorICAgIDU1MjQzLCA3ODA3MSwgMCwgODA4NiwgNzQzMTcsIDY3MDcsIDgzMTksIDIzMTIsIDQwOTc3LCAxMDk2MCwgNDA5NjIsIAorICAgIDgzMDUsIDEyNTczLCA5ODM2MDgsIDQwOTgwLCA5ODM5NjQsIDEzMjAyLCAwLCAxMjU4MiwgNzgyODIsIDk4MzA0OCwgCisgICAgNjk4NTYsIDQyNDM4LCA1NTIyMSwgNjI4OCwgNzgyODAsIDEyNzk0NiwgNTY1MywgNDI0MDAsIDEwODkxLCA3Njk4LCA1NjU4LCAKKyAgICA3NDA0NSwgNzAwMzksIDAsIDAsIDQ5MTMsIDAsIDk4Mzk1OSwgNzEzMzMsIDQyMzI2LCAxMjgxOTQsIDEyNzI4LCA5MjY4NSwgCisgICAgNDI0NzgsIDIzMjcsIDAsIDEyNTYzLCA0MjI4NywgMTI3MDUsIDAsIDAsIDEyNTg4LCA4ODIxLCA2MTUzLCAyODY3LCAKKyAgICAxOTQ3MDgsIDY2MzEyLCA2OTgsIDEyODAwNywgMTk0NjA2LCAxMDM1NiwgNzAwMTcsIDE5NDcxMywgNjUxLCAxMjY0MSwgMCwgCisgICAgMCwgMCwgMCwgNDE1NTIsIDY1MTE1LCA3ODQ2NSwgNzg0NjcsIDc4NDYzLCA3ODQ2NCwgMTI4ODUxLCA3ODQ2MSwgMTk0Njk3LCAKKyAgICA3NDM1NiwgNjQ5NDUsIDQ3MTYsIDQzMjc3LCAwLCA3ODQ3NCwgMTIzNDAsIDEyMDU2OCwgMCwgMTk0NzAwLCA1NTI2NCwgCisgICAgNDEyMTEsIDEyMDY3NiwgODcwMywgNTQ2MiwgOTE3NjI5LCA5ODM0OTUsIDEwMTAxLCAwLCA3MDA0OSwgODQ3OSwgNDE1MSwgCisgICAgNDE5MzMsIDAsIDAsIDY2MjU0LCAxMjA4MjEsIDAsIDAsIDEyODY1NCwgMCwgMTE5MTk0LCA3NDA1MCwgOTI3MDEsIDAsIDAsIAorICAgIDAsIDAsIDAsIDEyMjc4LCAwLCAwLCAwLCAyNzAwLCAxMjU3NiwgNzg0MiwgMTI4OTksIDAsIDAsIDI2OTksIDAsIDczODQ1LCAKKyAgICAyOTg1LCA5MjU2OCwgMTI2NDc1LCA5MTc4NDUsIDEyMTkyLCAxMTkzMTQsIDAsIDExOTMxMiwgOTgyNywgMTE5MzEwLCAKKyAgICAxMTkzMTEsIDExOTMwOCwgMTE5MzA5LCAxMTkzMDYsIDExNDgxLCA0MTIxMCwgMTE5MzA1LCAwLCAzNSwgNzg0ODEsIAorICAgIDc4NDgyLCA2NjY5NCwgNjg0NzksIDc4NDc3LCA3ODQ3OCwgNDM1OTYsIDYwOTAsIDY0MjU3LCA3ODEyLCAxMDUzNCwgMCwgCisgICAgNzg0ODUsIDczODQ4LCA2Nzk3NSwgNDI3MiwgMCwgNDA5NjcsIDQwOTY0LCA5MTc4MjUsIDEyNzA0LCA3ODQ4NywgNDMzMDYsIAorICAgIDAsIDY0NDk3LCAxMjEzOCwgNzkzMCwgMCwgMjI5MiwgNjgyMTYsIDAsIDkxNzgyNiwgNTI0NCwgNDE4OSwgOTQxMDgsIAorICAgIDY3NTk2LCAxMjc1MDQsIDQxODgsIDE4NzksIDAsIDk2OCwgMCwgNDM3NDMsIDAsIDg4NzMsIDIyNzksIDAsIDkxNzgyNywgCisgICAgNjU1NTUsIDEyNTc0LCAwLCAwLCAwLCA3NDQ5MCwgMTI3MDk5LCA0MzY1NywgMCwgMCwgMCwgNDI2ODIsIDEyNTc4LCAKKyAgICAxMjcyMCwgMCwgNDEyMjcsIDAsIDEyMzQ2LCAxMjcxMDEsIDY0ODQ4LCAwLCAwLCA3MjUxLCAwLCAwLCAxMTg4NTAsIAorICAgIDExOTE0MSwgMTI4NTQ2LCA2NjAxNSwgMCwgOTU5LCA4ODg1LCAxMjU2NCwgNjY0NTcsIDc4ODA4LCA5NDY5LCA5NjMyLCAKKyAgICA5MjMyMywgNzQ3NjEsIDY0MzIzLCAxMjczMzUsIDAsIDAsIDAsIDMxMCwgMCwgNDEyODEsIDEwOTc2LCAwLCA3MTMyNSwgMCwgCisgICAgNzQyNjYsIDEwMDU0LCA2NDk3LCA4NTc0LCAwLCA5MDEyLCAxOTk1OCwgNzQ0MjAsIDY1MDg5LCAxMzIxNSwgMTI3MzAsIAorICAgIDY1MTYzLCA3NDA0NCwgMzc0LCA0MzE5NSwgODE2LCAxMjAxNjEsIDAsIDAsIDQxOTM0LCA3NDY1LCAwLCAxMjgxNjgsIAorICAgIDk4MzI2OCwgNDcxNSwgNjEwMSwgOTQxMDYsIDQxOTM2LCAwLCA0ODc5LCAwLCA2NTQ0NiwgMCwgMzA3LCAxMjcxNDcsIAorICAgIDk1ODUsIDUzNzQsIDk4MzI2NywgMTI4MDU5LCAwLCAwLCAxMjY2MTgsIDEyMDM5MCwgMCwgNjU1NjcsIDEyMDYxNCwgMTkyOSwgCisgICAgMCwgMTIxNDIsIDAsIDEyMjM2LCA0MTQxOSwgMTk0NjE4LCAxMjA2MTAsIDEyOTgyLCAxOTQ2MjMsIDUzNzgsIDc4NzkxLCAKKyAgICAxMjg2NzksIDQxNDIxLCAwLCA0NDYyLCAwLCAxMjY1OTksIDEyODA5MiwgODIxLCAwLCAyNDk4LCA1ODAwLCAxMjAxNTcsIAorICAgIDk4MzExNSwgMTc2MCwgMjQyMSwgNDQ2OSwgMjMyNCwgODI4LCAzNjExLCA3ODQwMCwgNzU3LCAxMTg1LCAwLCA3ODc3MCwgCisgICAgNDM1OTcsIDEwNjI4LCA3NDgwOCwgMTk0NTcyLCA3OTk5LCA0Mzk3MSwgMCwgMCwgMTA2MzQsIDEwOTQyLCA3NzEzLCAyMzQ4LCAKKyAgICAwLCA2NDM3NCwgNDM4MCwgMTk0NjA4LCAxMTkwNDQsIDk5ODIsIDY0MzI0LCA0MTI0MCwgODYyLCA2NTYyNiwgNzg0NjIsIAorICAgIDE4MTAsIDM2NzMsIDUxMzcsIDE5NDYxNywgMCwgNzI3NywgNjU2MjIsIDAsIDc1NjYsIDY0Njg4LCAxOTQ1OTMsIDE5NDU5MiwgCisgICAgNzgwOTIsIDc0MzU3LCAxOTQ1OTcsIDQ3NDgsIDkyMjI4LCAxOTQ1OTgsIDE5NDYwMSwgNDIyNjAsIDU4NzEsIDExOTA3NSwgCisgICAgMCwgNzQ1NzYsIDQ0MDE5LCAwLCAxMjgxODksIDM5NjcsIDE5NDYwNCwgMTMxMzcsIDg3NzUsIDEyNzk0NSwgMCwgMjk2MywgCisgICAgMCwgODQxMCwgNDQ1NCwgNzIzLCAxMjc4ODIsIDk2NiwgNDQ0OSwgOTIzMzAsIDkyMjM4LCAwLCA3ODE5LCAyMzIwLCAKKyAgICAxOTQ1ODksIDMzOSwgNDk2OCwgMTk0NTkwLCAxMjAzOTksIDgwNzUsIDU1Mjc2LCAwLCA4MDQ3LCAwLCA3ODgyNywgMTI2MzQsIAorICAgIDQxNTQyLCA3ODc4MCwgNzQ2NiwgNjcwNSwgMTIxNzQsIDQyNjEwLCAwLCA3NDQ1MiwgOTgzNzYzLCAxNTg0LCA2NjY0NSwgCisgICAgNjA0NSwgNjcyOSwgMTIwNjQwLCA2NTIxOCwgMTE1NTksIDAsIDc4MDYyLCA3NTM3LCAwLCAxMTM3MCwgMCwgMTAzMzAsIDAsIAorICAgIDEwMzk0LCAwLCA3NDE5NCwgMCwgMTI3OTI5LCA5NzgwLCAwLCAxMzA5MiwgMTk0NTc2LCA3Nzk1MCwgMTk0NTc4LCA3MDc0LCAKKyAgICA5MjY0OCwgMTk0NTc5LCAxOTQ1ODIsIDExNDE0LCAxMjg4NjgsIDI1MzEsIDEzMDM0LCAwLCAwLCA0MjExLCAxMjU5LCAKKyAgICA3NTE3LCAwLCAwLCAxOTQ1NjEsIDQwOTk2LCAxMzAzNywgNzA5MiwgNjQxLCA1MjE5LCA5NDAzNCwgMTk0NTY2LCAxMTA2NCwgCisgICAgNDExMjksIDAsIDQyODUwLCAxMzAzNSwgOTA3NSwgOTIzODcsIDU0NjYsIDEyODE1MywgMCwgNjQwOTgsIDY1NzkzLCA0NTM1LCAKKyAgICAxOTQ1NzMsIDQyNzEsIDc4NDE3LCAxMjgzNTcsIDY3NjksIDQxNDEwLCA5ODM0NTIsIDY0MjYyLCA2NzY3LCA0MTQwNywgMCwgCisgICAgMCwgNjc1NSwgMTE4ODY0LCA5MDQ2LCAxMjc5MzQsIDEyNjYwOCwgMCwgMCwgMCwgMCwgNjc2NzUsIDAsIDAsIDAsIDY0MzM4LCAKKyAgICAyNTYzLCAxMzAzMywgMjQ3LCAxMTg5MTUsIDAsIDEyMzM4LCA0NjUxLCA2OTg5NSwgMTEyNzAsIDAsIDAsIDExOTMzLCAwLCAKKyAgICAwLCA0MTkwMywgNDM0NDcsIDExMDAxLCAwLCA0MjI1NSwgMCwgOTI2NjEsIDY5ODIxLCA0MTkwNSwgMCwgMCwgMTA3NzUsIAorICAgIDk3OTMsIDUwMDksIDAsIDQyMjY5LCA2NDU4NywgOTgzMDYzLCA0MjUzNSwgNjk4MTIsIDY0NTI5LCA0MTQwOCwgNDI4NTMsIAorICAgIDM4NzcsIDEyMDc5NSwgNDI2NzQsIDgxNDcsIDQzNTY2LCAxMTkwMjEsIDk4Mzc3NiwgMTAyMzYsIDY1OTE4LCA0Mzc4MiwgMCwgCisgICAgMCwgNjQ1MDYsIDY5NjUyLCAxMTg5MjEsIDQ3NDcsIDEyODA1OCwgNjk4NDQsIDQzMjAwLCA1ODMyLCAwLCAwLCA1MTQxLCAKKyAgICA0MjYwMCwgMCwgNDMyMDMsIDAsIDk4Mzc5OSwgNDMyODYsIDAsIDEyODIxMSwgNDM3NzgsIDAsIDQxMzA1LCA3ODc3NiwgCisgICAgNDM3ODEsIDExMzAzLCA2NTU0NywgMCwgNzAzMSwgODU5LCAwLCAwLCAwLCA2MDU5LCAxMjY5ODUsIDU1MjM1LCAwLCA4NTM1LCAKKyAgICAwLCA2NTE5NiwgMTk0Nzg3LCA2NjAzMiwgMTE0ODgsIDEyMDQ4MSwgMTIwNzg2LCA0MjIzMywgNjQxNDAsIDk5NDYsIAorICAgIDYzODg1LCAxOTQ3OTIsIDExODIyLCAwLCA0MzE4OSwgOTgzODk4LCAwLCAxNzg4LCAxNTc5LCAxMjA0ODIsIDcxMjk4LCAwLCAKKyAgICAwLCAwLCA5MDI4LCAxMTk1NzEsIDY5MjM0LCA5NDA1NSwgMCwgMTI4NSwgNjQ4ODIsIDQxMjQyLCA3MDA4NiwgMCwgMTI2NDAsIAorICAgIDAsIDc0MDEsIDAsIDEyNjI1LCA2ODE5OCwgMCwgNzAwODIsIDM5NDAsIDQxNTk3LCA0Mzc1NCwgMzM5NiwgMTI2NDIsIAorICAgIDg2NjUsIDAsIDAsIDEyNjMwLCAxNjUzLCA5MTc4MTUsIDEwMTUzLCAwLCA2MTY2LCAxMjA1MTYsIDExODk4OSwgMCwgODgxNSwgCisgICAgNjY2NzMsIDY1MDQ2LCA5Mjg1LCA5MTMsIDQyMjU5LCAxMTkzMTcsIDExOTMxOCwgMjE0MiwgNjg0NTQsIDQyNDg1LCAKKyAgICA5NDAxMiwgNzg3OCwgODIxMSwgNDIyOTMsIDY0Mzc3LCAwLCA5MjY0MywgMCwgMTk0NjczLCAxMjAzMiwgMCwgOTcyNSwgMCwgCisgICAgNzg0MzEsIDUyNjMsIDEyODE4LCA3ODQzMCwgNDE5MzksIDEwMDIyLCA2NTM4NywgNzg0MTksIDQyNzc3LCAxMDEzOSwgOTgwLCAKKyAgICA0MzY5OCwgNjUzODYsIDIyMDgsIDAsIDQzNzAxLCA0MzE5OCwgNzE4NCwgMTIwNjczLCAxOTQ3OTcsIDkxNzgxOSwgMTAwODUsIAorICAgIDExOTk5MiwgMCwgMTE5OTkzLCA2NjM0LCA5MjM3MywgMCwgMTE5MzIzLCA4MDcyLCAxMTkzMjEsIDQzNzAwLCAwLCA4ODcyLCAKKyAgICA3NzgzLCA5MTc5OTIsIDEyMzk4LCA4MjM3LCAwLCAwLCAxMjM5NSwgMCwgMTI2OTc3LCAxMjA1NjUsIDk5MTQsIDIyMTcsIAorICAgIDkxNzg1NCwgNzM5NzUsIDYzNjcsIDYzNTEsIDY2Njg4LCAwLCA3ODEwNywgMCwgNjQ3MzUsIDQxMjQzLCA5MjE5OSwgNzgwOCwgCisgICAgMTgyOSwgMCwgNDE5MzcsIDQzNTgsIDQzMjcyLCA2MzUzLCAwLCAwLCAxMjA0MjIsIDAsIDE3MTAsIDAsIDAsIDY1NjA3LCAwLCAKKyAgICA0OSwgNjYyNywgMCwgNjI1OCwgMTA2ODMsIDc4NjcyLCA5NzQxLCA3ODMyOSwgNTY0OSwgNzg0NDEsIDQzNDQzLCA2NDQxOCwgCisgICAgMTY0MywgNjUyMTMsIDg0MDUsIDM0NzAsIDEyODIyNSwgMTMyMTMsIDQyNDUyLCA3ODMzMSwgMTIwNjY0LCA3ODQ0NSwgMCwgCisgICAgMTA3MiwgNzg0NTcsIDc4NDUyLCA3ODQ1NCwgNjU3NiwgNDE5ODgsIDQxMTMyLCA2NTY3NSwgMTA4MCwgMTIwMDAyLCA5ODg2LCAKKyAgICA1NTIyNSwgMTEwMSwgNjg0MDQsIDEyMzA5LCA1NTIyNywgMCwgMTI2MzIsIDEwODYsIDE4NjksIDc4Njg1LCA3NjgwLCAwLCAKKyAgICA2NTQ1OCwgMTIwNzE0LCAxMjYzOSwgMzM4MCwgODEyMywgMTA5MSwgMTI2MzgsIDc5NzcsIDQ1MDEsIDQxMDk5LCAwLCAKKyAgICA2NjMwOSwgMCwgMCwgMTQ5NCwgOTgzMTQ2LCAxMjY2MTMsIDAsIDExNjkzLCAxMjY1MTMsIDEwNDk0LCA5MjY1NSwgNjU4NzIsIAorICAgIDEyMzYzLCAxMTM4NiwgMCwgMCwgMCwgMCwgNjQ1ODIsIDAsIDczNzk0LCAwLCA4MDIyLCAwLCAxMjA0NjIsIDc0MTA2LCAKKyAgICAxMjQxMywgOTQwNjksIDkxNzk5NCwgOTE3OTkzLCA5MTc5OTUsIDU1NzAsIDE4ODEsIDcyMTAsIDAsIDEwMTIsIDQzNzUyLCAKKyAgICAwLCAxMjA3MDksIDcyMDgsIDY2NDQyLCA1NTY5LCA5ODMyNDIsIDQyMzM5LCAwLCA2MDYzLCAwLCA3ODM4MywgMTE5NTk0LCAKKyAgICA2MDUzLCA2NTYwMiwgMCwgOTIyMDEsIDY0NzI3LCA5MTYwLCAxOTQ4MjcsIDAsIDAsIDkyMTgwLCAxMDUwMywgMTE4ODEwLCAKKyAgICA2MDU1LCAzODcwLCA0Mjc5LCA4NDkwLCAxMjAxMTQsIDQzMTksIDY0Nzg2LCA4NjAyLCAxMjAxMTAsIDExMzI2LCA5MjIwNCwgCisgICAgOTgzMTE2LCAwLCAxMjAxMTksIDc4MzMzLCAxMjAxMTcsIDEyMDExOCwgMTIwMDk5LCAxMjAxMDAsIDY1MDg3LCA1NTcxLCAKKyAgICAzNjc0LCA5NzQwLCA5MTIxLCA1NTY4LCAxMjAxMDcsIDEyMDEwOCwgNDIwODUsIDEwMTA3LCA0MjE1OSwgNDI4NzAsIAorICAgIDEyMDEwMSwgNTg5LCA3MDUwLCA5ODM4MDAsIDQzMjgxLCAxMDIzMywgNDEyNjMsIDY2MjUxLCA2NTcyOSwgNjYyNTMsIAorICAgIDEyNjQ5NywgNzQwOTksIDQyNjQ1LCAwLCAxOTQ4MTUsIDg1ODMsIDAsIDU4NDcsIDY5MjgsIDEyODA3NCwgMCwgMCwgMCwgMCwgCisgICAgNjY1OTIsIDEyMjA0LCA5MTc5NjIsIDE5OTY2LCA3Nzg1NiwgNDI1NjEsIDEyMDYyNiwgOTgzMjUxLCAwLCA4MTIwLCAKKyAgICAxMjA3MDEsIDAsIDAsIDEyODAxMiwgNDEwNjMsIDAsIDEwNjY0LCAwLCA4MzY5LCAwLCA0NTUxLCAxOTQ5NjQsIDMzNjksIDAsIAorICAgIDAsIDk2NzMsIDY2MzM0LCA2NTU4MCwgMTA0NzgsIDExODk2MCwgMTI1MTcsIDU1NywgOTQ1NywgMTIwMzQsIDk4MzY3MSwgCisgICAgNjM1NSwgMTI1MTksIDQxMDA0LCAwLCAxOTUwMjUsIDc0MDk0LCAwLCAwLCA3Nzk3MCwgOTgzNTYwLCAwLCAxMjgxNzUsIAorICAgIDEyMTExLCAzOTI3LCAwLCAxMjUxNSwgMTQ3NCwgNjc4OTMsIDU0OTIsIDY5MjMsIDkyMjgxLCAxMDQ0MSwgNzM4MzYsIDAsIAorICAgIDQzOTkwLCA1NDkzLCAwLCA3NDMxOSwgMCwgNjY2MzUsIDEyMDE5LCAwLCAxNjE4LCAwLCAxMjA0NzQsIDk2NDUsIDEwNDMwLCAKKyAgICA5MTc5NTksIDU4NTMsIDEzMDYzLCAxMDM2MywgMCwgMTI5NTYsIDEyODE2OSwgMTIwNzI5LCAxMTMxNCwgOTE3NTgyLCAKKyAgICAxMjA2MCwgMCwgNzgzOTIsIDEyODI2LCA2MzI5LCAwLCAxMDUxNCwgNjU1MTcsIDc0Mzk1LCAyNzA3LCA4MzA5LCAwLCAKKyAgICAxMjcwNTQsIDc4Mzk4LCA0MzU3MCwgMjY5NywgNDM0MjAsIDc4Mzk2LCAxMjcwNTcsIDI2OTUsIDQyMTcxLCAwLCAwLCAwLCAKKyAgICA2NzYxNywgMTE4OTcxLCAwLCAyNjkzLCAxMjEyNSwgMTI3NjYsIDAsIDExNjQsIDEyODgxNywgMCwgNDE5MTgsIDk4MzE2OCwgCisgICAgMTI3NTQyLCA4Njg3LCA2NjAwOSwgMTIxNzgsIDcwNTMsIDEyODAwMSwgNzQ2OSwgMCwgNTI0OCwgMTIyMTgsIDEyMDUzOCwgCisgICAgNjQyNywgNDI4ODQsIDQxMTIzLCAwLCAwLCA0Mjg3MywgNDExMjYsIDk5OTEsIDQxMTI4LCA3NDM3MSwgMTI3MDMxLCAwLCAKKyAgICA5ODczLCAwLCA0Mjg3NywgNzk5NCwgNjQ3NjIsIDIwNTMsIDQyODQzLCA2NTkxLCA5MzQwLCAwLCAxNTg5LCAwLCAyOTYsIAorICAgIDc0NDM4LCA3ODg1MiwgMCwgNjc4NDEsIDc0MzcwLCAwLCA4OTIyLCAxMjgwNjgsIDc0NjAwLCAxMjcwMCwgNzQ4MzYsIDAsIAorICAgIDEyNTc5LCAwLCAxMjU3NSwgNjQxNiwgNTY1NiwgMjg5MSwgMTMyNjIsIDY1NTkwLCA1Mjk5LCAwLCAxMTQ3MywgNTQ0OSwgCisgICAgMTI1MiwgMCwgNzg0MDQsIDQxNDMxLCA3NDM2OSwgNjUzNzMsIDUyOTUsIDkxNzU2OSwgNzQxMTQsIDEyMjMsIDE2NDIsIAorICAgIDE3NCwgNzgzOTksIDg4MywgNDE2MSwgMTI2OTEsIDQyNjAzLCA0MTQxMywgMzIxMiwgNDE0NTksIDMyMTEsIDc0ODEwLCAKKyAgICA0MTQyNSwgMTI3MDI5LCA3ODQxMiwgNzQ0NTAsIDk3MjgsIDM4NDYsIDgwNzAsIDYxNTAsIDY2MzYsIDQzNzAsIDAsIDAsIAorICAgIDc0MTc4LCA3NDU4NywgNzQxMTcsIDAsIDAsIDAsIDQ5ODYsIDEyMTg5LCAwLCA2NzY0OCwgMTIwNDk5LCA5NDAwMSwgNDI1NywgCisgICAgMTIxMDQsIDc3OTQyLCA2MjIwLCA5MDA0LCA2NTU2MSwgMCwgNzc5NDksIDAsIDY4MTM1LCA5MTc1NzYsIDc3OTQ2LCAwLCAKKyAgICA2OTY3OSwgNjk2ODQsIDk4OTAsIDc4NTYxLCAxMjk3MSwgNzg0NTMsIDkyNTU2LCA3Mzg5OCwgMTE5NzksIDcwMDUxLCAKKyAgICAxMTg5MDAsIDkxNzg5NCwgMCwgOTYzNSwgMTI2MDAsIDg4NzEsIDAsIDAsIDAsIDY0NjksIDc0MjI3LCAwLCA2NTMwNCwgCisgICAgNDY3OSwgMTAyMzAsIDY0MzAwLCA2NDg2NywgMzQyNywgNDI0MCwgMCwgMCwgMCwgMCwgNDI5MTYsIDAsIDAsIDAsIDcyODIsIAorICAgIDc4NzI4LCA2NTczMywgNDQ0NSwgMTI3MTM4LCAxMjgwODIsIDM0OTQsIDc0NjA2LCA2NTU1LCAwLCA3Nzk3NiwgMCwgMCwgCisgICAgNzg1NjYsIDAsIDk4MzE4OSwgNjU4OTgsIDk4MzI0NCwgNjUzMTIsIDU0NDcsIDAsIDEyODk1LCA2NTU5MywgNDAxMCwgMCwgCisgICAgNDExMDYsIDAsIDY0NDQ4LCAwLCA0MTEwNSwgMCwgNjU4MjAsIDYyMzIsIDAsIDEyODI4MCwgMCwgNDM2MDgsIDExOTA5MSwgCisgICAgMCwgNjUzOCwgNDMzNSwgNzgzNjQsIDM5NDEsIDQxMTIyLCAxMTA2MSwgNzgzNjMsIDY0ODkyLCA5MTEzLCAxOTU0LCAKKyAgICAxMjE1NSwgOTgzNjc0LCA0Mjg3OCwgMTE1MDAsIDAsIDAsIDc0NTc4LCAwLCA2NTgzMiwgMCwgMCwgMCwgNzc5NzUsIAorICAgIDExOTIzMCwgNDU4NiwgMCwgMzUwLCAxMDk1MSwgMCwgNTA5LCAwLCAwLCA5MjMwNywgMCwgMCwgNTEzMywgMCwgMCwgOTUwMCwgCisgICAgMCwgNDk1NywgNjQ3NDEsIDI0MjIsIDIyMTIsIDk4MzA4MCwgMCwgMCwgMjQ5NiwgMTE1MTYsIDk0NCwgMTE4ODUxLCAzODkwLCAKKyAgICAxMjE2OCwgMTQzOCwgMCwgOTgzMTE3LCAwLCA0MTk0NywgMTIyMCwgMTIwODI4LCAxMjg1NTUsIDAsIDAsIDE1NzEsIAorICAgIDQyNjMwLCA0MTk0OSwgNDI4MDUsIDgyNzAsIDk0MywgNTY0LCAwLCAzMTIsIDQxOTgwLCA5ODM5NDQsIDAsIDc4MTIwLCAKKyAgICA4ODc3LCAyNjksIDQ0MjksIDYyNzIsIDk2MTcsIDE0NjAsIDY5NTQsIDc4NjU3LCA0MTEyMCwgNjUxMjEsIDEwODYyLCAKKyAgICA2MDYwLCA0MTExOSwgNDE0MTYsIDc0MzU1LCA0MTczLCAwLCAwLCAwLCAxOTA2LCA5MTc5ODYsIDExNTMyLCA3NDA3MywgCisgICAgMTI3MzM4LCAwLCAxOTg1LCA2Mjk2LCA5NTgyLCA5MTc4OTUsIDY0Mjg3LCAwLCA3ODExNSwgMTE0MjgsIDE3MzAsIDI0NTcsIAorICAgIDkxNzgwOCwgMTk5MTgsIDEwNDY5LCAwLCAwLCA3NzAzLCA4ODQwLCA4MDM1LCAwLCAwLCA5MjIzMCwgMCwgNjEyOSwgMCwgCisgICAgMTI4NTI4LCAxMjgyNjgsIDAsIDc4NzQsIDg2ODEsIDExOTA5MiwgMCwgMTMxMzYsIDAsIDAsIDcwMTAyLCA2Mzg4NiwgCisgICAgMTE4ODgxLCA5NjA1LCA3MTMwOCwgMTMyMjAsIDEyODc3NiwgMTIwMjc0LCA1NTE0LCAwLCA5MjI4LCAwLCAwLCAwLCA1MjQwLCAKKyAgICA5ODExLCAxMDAxMiwgMzA5NiwgMCwgMCwgOTgzMzUxLCA2NjY3NiwgNjU4NzMsIDAsIDAsIDAsIDk1MDEsIDAsIDEyNzIsIAorICAgIDY0NTM2LCA2NTQ2NSwgNjQ2NTQsIDc0NjcsIDAsIDE0NjcsIDEwMTU4LCAxMDA0MCwgMCwgOTUxOSwgMCwgOTE3ODEyLCAwLCAKKyAgICAxMTg4OTksIDEyMTkzLCAwLCAwLCAwLCAwLCA5ODMzNTMsIDE5OTM1LCAwLCA5MjE2MiwgNjk2NzYsIDAsIDAsIDAsIDUyNzUsIAorICAgIDAsIDAsIDg2MzcsIDAsIDAsIDM3ODksIDYzODgwLCAxMTQ3MSwgNDM1NTQsIDY1ODYyLCAxMTQ3NCwgNjYzMzIsIDY2NjAzLCAKKyAgICAxMjgxMzgsIDI0MjYsIDEyMDQyLCA5MjE5NCwgOTgzOTExLCA5NTM3LCAzOTYxLCAxMjExNSwgNzc5NTMsIDI2MDUsIDQ1MDAsIAorICAgIDY0NTYxLCA1NTIyNCwgNDk4MSwgMCwgMCwgNjM4NzYsIDExNjY3LCA0MjY4NiwgNzc5NzMsIDQyMzYyLCA2NDY4NiwgNDQ5OSwgCisgICAgNDE2NDksIDc1ODksIDAsIDAsIDMyMzcsIDAsIDY4MjE1LCA5MTc5MDQsIDg1NDEsIDc4Mjk4LCA3MDAzNCwgNDE4NjYsIDAsIAorICAgIDAsIDAsIDAsIDY5OTI0LCA0MzU1NSwgMjgyMywgOTU1OSwgMTAwNjAsIDQxOTQwLCA4Mjk5LCA0MTk0NSwgNzEzMiwgCisgICAgNDE5NDEsIDMzMDgsIDcxOTAsIDY0ODgwLCA4NjE0LCA2NTIyMCwgNDE0OTMsIDAsIDQxNjk5LCAxMDc2MiwgNDM3ODAsIAorICAgIDEyOTk5LCAwLCAwLCA4MTA2LCA0MTI4LCAwLCA2Mjc0LCA0NDk0LCAwLCA0MDEyLCAxMDM5NSwgOTgzNTkxLCA0MzYzMywgCisgICAgNjU0NDcsIDEyNjUxMSwgMCwgMTEwMDQsIDY5NSwgNzM5LCA2OTYsIDc2MTEsIDAsIDQyNzU1LCA3NDgwMiwgOTIyNywgCisgICAgNzUwNiwgNzUxMCwgNjk5MzcsIDY5MSwgNzM4LCA3NTExLCA3NTEyLCA3NTE1LCAzODY4LCA2ODgsIDQxODQ3LCA2OTAsIAorICAgIDI1NDgsIDczNywgOTc0LCA4MDAzLCA3NDA2LCA5MTc5MTEsIDAsIDEyODY4OCwgMzk4NSwgOTE3OTEyLCA2NTg2MCwgCisgICAgNjM5MjEsIDcwNTEsIDY5Nzc3LCA0NjgyLCA5MTc4MDUsIDEyODA5LCA2NDA2LCA0Njg1LCA5MjUwNSwgMTA4NzksIDEwMzQ3LCAKKyAgICA0NjgwLCA2MzQxLCAwLCAzODUxLCA4MTMyLCA3NDMyNSwgMCwgOTE3OTA3LCAwLCA0MTk1OCwgMTE5MTc2LCA5MTc5MDgsIDAsIAorICAgIDAsIDQyNjU3LCA5MjQ2OCwgNzY0MywgNDIzNzMsIDExNzE0LCA2NzU4NywgNDM1NjgsIDk4MzE3NSwgMTE3MTcsIDc2NTAsIAorICAgIDEwNTk0LCA2NDk1MSwgNzY0NywgNzY0OSwgMTI4MTU1LCA3NjQ2LCAwLCA3ODA4MiwgOTY1MSwgMCwgMzg5MSwgMCwgMCwgCisgICAgMjMzNywgMTczNSwgNzQzMjQsIDY3ODYwLCAyMzYzLCA5ODMxMzUsIDAsIDQzNTYxLCAwLCAwLCA3NDE0NiwgMTg2MCwgCisgICAgNzQ5NSwgNzU4MCwgNTgxMiwgNzQ5NywgNzU4NCwgMTE5MTQwLCAxMjc4NTMsIDAsIDEyMDM0NywgNzcyNywgMCwgODQ5OCwgCisgICAgNjk4MTgsIDg5NDksIDMwNjUsIDQyNzE5LCA3MTM1LCAxNTY5LCA5MjM3NSwgMTI1MzQsIDEyMTI0LCA3NjkwLCAwLCAKKyAgICAxMjUzMywgOTgzODc5LCA2NDE4LCA0NTQzLCA3ODA4NiwgNjk2OSwgMCwgNzQ4MDAsIDAsIDY3OTc0LCAxMTk4MCwgCisgICAgMTI4NjUwLCA5ODM4MDEsIDYzODk0LCAxMjA3NjAsIDEyMjgyLCA2NjE5MiwgMCwgNzQ1OTIsIDg4NTAsIDc0Mjc1LCA5MjM4LCAKKyAgICAxMDYxNywgOTE3NTQ1LCAwLCA5MjYyNSwgMCwgMTI3OTEsIDAsIDAsIDEyNzg0MywgNDQ0NywgNzM3MzIsIDEyNzkzLCAKKyAgICAxMjkwMCwgOTIzNzcsIDEwOTUwLCAwLCA3ODA4NywgMTI3OTAsIDQxNDAwLCAxMTkxMjgsIDY2NjA3LCAxMjc5MiwgNDIyMzIsIAorICAgIDE5NDkzOCwgMTc0NCwgMTI3ODksIDEwMzY2LCAxMjMxNywgNDEzMTAsIDk4Mzg2OSwgNDEzOTksIDAsIDAsIDU1MjU4LCAwLCAKKyAgICAxMjY5MCwgMCwgMCwgNDM2NzIsIDEyNzg0MCwgNDE2NTIsIDI5NzQsIDkwMTAsIDExMzE1LCAwLCAyNzgsIDAsIDQxNDA1LCAKKyAgICAxMTkyNTQsIDAsIDEwMDc3LCA2Mzg1MywgNzQ1NTcsIDQyNTg2LCAwLCAwLCA2MDAyLCAwLCA0MzU1MywgMCwgNjc5MDMsIDAsIAorICAgIDEyNzg3LCA0MTMwOCwgNzkzNCwgNjUzMDYsIDAsIDAsIDAsIDg2NDYsIDk4MzE4NiwgNzc4MjksIDcxMzYwLCAwLCA2NDEzLCAKKyAgICA2NTUwLCAwLCAxOTQwLCAwLCA0MzYzNywgMjIwLCA2NTE5MywgNDM1NTEsIDEwNjc4LCAxMDA0NCwgMTI4MzIyLCAwLCAwLCAKKyAgICA2ODY1OSwgNjQwMywgNTcwNywgMTAzOTMsIDEyNzUzMiwgMCwgNjY2MTQsIDAsIDAsIDAsIDEwMjk3LCAwLCAzNzQyLCAwLCAKKyAgICAzOTU5LCAwLCAwLCAwLCAyNDY3LCAwLCA2MDAzLCA2Mzg0NCwgNjY2MywgODA0MCwgMCwgNDM3NTgsIDQxODIsIDc4MTcxLCAKKyAgICA0Njc2LCAxMjA1MDEsIDAsIDAsIDI1MTAsIDAsIDEwMjA4LCA3ODE2OCwgOTIzNjEsIDExNTQwLCA0MzU0NiwgNjY5MiwgMCwgCisgICAgNDEwNjAsIDAsIDQ2NjgsIDkwODMsIDAsIDAsIDc4MTQ0LCAxNTU5LCA2MzgzMSwgOTY3NywgMTIwMjYwLCAwLCA2NTI1NiwgCisgICAgMCwgNzQwNzAsIDAsIDAsIDM2NSwgMTIwNTYsIDQzMDI3LCAxMjA0MjMsIDQxNzE2LCAxMjgyMzYsIDAsIDEyMDQ3MiwgCisgICAgNTUxNiwgMjg0NSwgNzcxNywgODAzNiwgNDE3MTcsIDczODI3LCA1NDQsIDEyMDQ1LCA2Mjc4LCAwLCA1NTE1LCAwLCAwLCAKKyAgICA5ODMwNTEsIDY1MzM5LCA0MzIyMSwgMjIxMSwgMCwgNTUxNywgMCwgMCwgNzQ4NDEsIDY3ODg0LCAwLCA2Nzg5MCwgNjc4ODUsIAorICAgIDY3ODgwLCA2Nzg4MSwgNjc4ODIsIDY3ODgzLCAwLCAwLCA2Nzg3OSwgMTI3MTg4LCAxOTAyLCA2Nzg4NywgOTYzOCwgCisgICAgMTI5NzYsIDEyNjU0NiwgMTI0ODMsIDEyMzY4LCA0MTc2OSwgNDI3MjYsIDQxNzY1LCA3MzYxLCA2NjY3LCA2Nzg3NCwgCisgICAgNzU1NiwgNjc4NzgsIDc0MzUxLCAxMTI2NCwgOTg5LCA0MjY3NywgNjc4ODksIDAsIDEzMTEsIDkxNzk2NiwgNDMyNiwgCisgICAgMTEwMDAsIDYzODI0LCAxMzA2OCwgMTA5MzIsIDEyODg4MCwgNjkxNywgNzgxNTUsIDAsIDk0OSwgNzgxNjIsIDAsIDYxNDgsIAorICAgIDg2MDUsIDQyMjUzLCA3ODE3NywgMCwgMCwgNDI3MTUsIDAsIDAsIDAsIDYzODcxLCAwLCA0MTc5NiwgMTI2OSwgNjUzMCwgMCwgCisgICAgNjUwNTcsIDAsIDUxNDQsIDEyMjIxLCA0MjcxNiwgMCwgNDQzMSwgNDMzMSwgOTgzNzI5LCAxMjg2NzUsIDQxODM0LCA1Mjc5LCAKKyAgICAwLCAxMDMzNiwgODMxMiwgMCwgNDI3MDEsIDEyODgyNSwgMCwgNzgxNjUsIDY2MDM2LCAwLCAwLCA2NDI4LCA0MjI3MCwgMCwgCisgICAgOTgzNTk2LCA0MzA1OSwgNDI2NjYsIDUyNTYsIDEwNjcsIDI1NSwgMTIxMzEsIDk4MzcyMiwgOTQ5MywgOTgzOTY4LCAKKyAgICA0MTAxNCwgMTE3OTMsIDE5NDkyMCwgMCwgNzQzOTQsIDQzNDYwLCAxMDY1MywgNDI3MjMsIDk4Mzg1NCwgMTE5NjMyLCAwLCAKKyAgICA2NTYwLCA3MDE2LCA3NDI3NCwgOTgzNjE1LCA0MzU1NiwgMzkyOSwgNjc5NzcsIDY2MTQsIDI3NjgsIDkyNTA0LCA5NzQ2LCAKKyAgICA1MTM1LCAxMTgxMSwgMTI3OTYsIDExOTUzLCAwLCA2OTc2MSwgNTEzOSwgMzQ2LCA3NDMwMywgNjMwNSwgMTI3OTUsIDQ2NzUsIAorICAgIDUxNjgsIDc4NTUyLCAxMjc3NTMsIDc0MzE1LCA3NDM2MSwgODI1MywgODgxNywgMTEzNiwgMCwgNDM1NjMsIDkyMjMyLCAwLCAKKyAgICAxOTQ3NTAsIDczOTIsIDgyMzAsIDkzNjUsIDAsIDAsIDk4MzYwNywgMCwgMCwgNDA0MSwgMCwgMjM1NywgNDMyNDAsIAorICAgIDEyNzg2LCAyMjksIDExOTg4NSwgMTE5ODg0LCA0NDAwNCwgNzE0MiwgMTE5ODgxLCAxMjM1MCwgNjU1NTQsIDExOTg4MiwgCisgICAgMTE5ODc3LCAxMTk4NzYsIDEyNzg1LCA2Mzg2MywgNDM3OTUsIDc3NzAsIDEwNzEyLCA2NDg1MywgMTI2ODYsIDExODkxNiwgCisgICAgNDIzNzUsIDAsIDEyNzIzOCwgNjYzNTIsIDEwNDcwLCAwLCAxMTA1OSwgMTA3OTEsIDkxNzk0NCwgNDUwLCAxMTkzMjgsIDAsIAorICAgIDEwNDMyLCAxMjA5NywgNTQ1MCwgNjQ2OTEsIDEyMzMsIDAsIDQ0MDA5LCA3ODI4NCwgNjYzMzgsIDAsIDAsIDE4MzksIAorICAgIDExODc5OSwgOTgzMjE5LCAxMDkyNywgMTcwMSwgOTgzNjY0LCAyMzg4LCA0MTc0OSwgNDE3NjEsIDU0NTMsIDgzNjEsIAorICAgIDExOTg2NSwgNDE3NTgsIDU0NDQsIDQxNzYzLCA2NDg4OSwgNzE0MywgOTI0OTMsIDc4Njc3LCAwLCA5MjQyOSwgNzgxNzQsIAorICAgIDY2NDMyLCA4ODAxLCAzMDUzLCA0MzQwLCA5ODMwNDQsIDAsIDY1ODEyLCA5MTc4MzEsIDAsIDQxODI0LCA2Nzk4NSwgCisgICAgMTIwMjAzLCAxOTQ4MDAsIDE5NDgwMywgNDI3MDAsIDE5NDgwNSwgMTI3OTgwLCAxOTQ4MDcsIDc4Njc2LCA5MjM1NiwgCisgICAgMTk0ODA4LCAwLCAwLCA0NDkzLCA0MzM2LCAwLCAyMzE0LCA0MzYwMiwgNzg4MjYsIDExOTMyNSwgMTk0ODExLCA0MjQzOSwgCisgICAgNjQ2MzgsIDQyMzI3LCA0MzUyOCwgNDQ4OSwgNzEzMzEsIDAsIDE5NDc5MywgMTkxMiwgNDIzODUsIDEwMzA2LCAxMDM3MCwgCisgICAgMCwgMCwgODg2NywgMTAyNTAsIDEwMjU4LCAyNzEyLCAxNjM1LCA3ODgyMSwgMTQxMCwgOTI2NzEsIDk4MzI1MCwgMTE4ODc4LCAKKyAgICAwLCAwLCA5OTE5LCAxMjA1MjgsIDU1OSwgMTI4MTU3LCA0MTgyNSwgMTI3OTc1LCA3ODE4OCwgNDg5MiwgNzQwMTYsIAorICAgIDE5NDc4MSwgNjU0MiwgNDE5NTcsIDEyODg2NSwgNTc3NywgMCwgNzU5LCA2NTc0OSwgMjA3OSwgNjUyNDgsIDEyNzg4LCAKKyAgICA2NDQ4NywgNjQ1NTIsIDAsIDEwMjIzLCA0MjA2MiwgMCwgMCwgMTI2NTczLCAzNjY4LCA2NTc1NCwgNDM1NjAsIDEyMjI2LCAKKyAgICA2Nzk5MSwgNjUxNDksIDIzNDAsIDQxOTU5LCAxOTQ3ODYsIDE5NDc4NSwgMTk0Nzg4LCA0MzYxOCwgNjU3NDcsIDEwOTM3LCAKKyAgICAyOTYyLCAwLCAyMzIxLCAzNTg3LCA2NTc0NSwgOTI0MzYsIDg5MjEsIDk5NTIsIDAsIDAsIDQyNzE0LCA5OTUxLCA0MzQwOSwgCisgICAgMTk0NzcwLCAyOTQ5LCA2NjAxMiwgMTk0Nzc1LCAxOTQ3NzQsIDI5NTgsIDY4MzU5LCA0MTgyMCwgMjMwMCwgMjM5NSwgCisgICAgMTI4NTYzLCA5OTc2LCAxMjAwNDMsIDEyMDA1MCwgMTIwMDU4LCA2ODIyMCwgMTI4MTQzLCA0MjgwOSwgNDI4MDcsIDAsIAorICAgIDEyMDA0NiwgMTAxOTgsIDQxNTAsIDY0MzcxLCA4MzE4LCA0MTc5MCwgNjc5NzYsIDQxODk4LCAyMzYwLCA0MTc5NCwgCisgICAgOTE3OTQyLCA3MTMxNCwgMTI3ODE4LCAwLCAwLCAyNDE4LCA5ODMwOTgsIDI0MTEsIDExMzM2LCA3OTksIDYzODIzLCAKKyAgICAxMDI3NiwgMTAzMDgsIDEwMzcyLCA5MTc1NDEsIDQxNzcyLCA0MjgxMywgMjMxNywgMTAyNjAsIDExODk4MCwgNTUyODQsIAorICAgIDkyMjAzLCAwLCAxMDM4NCwgOTgzMjIwLCAwLCAwLCA3NzUzLCAyMzUxLCA2NjU1LCA2NDQ4OSwgNjk5MzEsIDAsIDc3ODcyLCAKKyAgICA0NDQzLCA0Mjc3OSwgMjMwLCAwLCAwLCA0MzU0OSwgNDg1NSwgNDIxNTAsIDY1NzM5LCA1NDQxLCA0MTg5NiwgMTAyODgsIAorICAgIDEwMzIwLCAwLCA4NTUsIDcwNDYsIDYxMDksIDY1MDQ1LCA2MzgzOSwgNzgxOTgsIDIwNDksIDEwMDk4LCAwLCA3NDE0NSwgCisgICAgMTI3OTQzLCAxMDI2NCwgMTAyODAsIDkxODQsIDEwMzc2LCA3MDEzLCA0NDY3LCAwLCAwLCAwLCA0MTg4NywgMCwgNDg2MiwgCisgICAgOTczNSwgNjUzNywgMTIwNTkxLCA3NDI4NiwgMzkxNCwgOTIxNzgsIDkzOTc2LCA5MDY1LCAxMjk2MSwgMCwgMCwgOTIyNTMsIAorICAgIDAsIDI4OSwgMCwgNDY5NCwgMTE0MjAsIDQ2OTAsIDAsIDEyMDUxNCwgOTE3OTc4LCA0NjkzLCA3Mzg5MywgNDI3MjQsIDAsIAorICAgIDQ2ODgsIDEyMDQ1NCwgMCwgMCwgNjc5OTQsIDgyMzgsIDMxMTAsIDEyMDE2MiwgOTgzOTA4LCAxMjAxNjMsIDY1MjgsIAorICAgIDEyNzU1MywgNDMwMzUsIDY5ODk4LCAyMTgsIDAsIDE1MjAsIDAsIDQ3ODYsIDAsIDQzMjI1LCA0NjAyLCAwLCA3ODE2NywgCisgICAgMTAwODgsIDY1NDgsIDAsIDEyMDE1NiwgNDM5NzgsIDg5ODgsIDg4ODgsIDAsIDAsIDAsIDAsIDEwNjY2LCAwLCA3MzkwMiwgCisgICAgNjk3NDAsIDAsIDAsIDk5NzUsIDEyODAzOSwgMTE5OTAyLCA0Njg5LCA4OTMyLCAwLCA2NTU2MCwgMTE5MjA5LCA3NDQ0MSwgCisgICAgNzg4MTAsIDAsIDAsIDY3OTg3LCAwLCAwLCAwLCA2Nzk4OSwgMCwgMTAwNjUsIDgyMDcsIDAsIDkyNjEzLCAxMjgwMTEsIDAsIAorICAgIDY2MiwgMCwgOTI0NCwgMTk0ODYzLCAwLCAxMTkyNjEsIDk4MzQyOCwgMCwgMCwgMCwgNDE5MjksIDAsIDAsIDY2Njc0LCAKKyAgICA0MTkyNiwgMTIwNDA4LCAxMjA0NDMsIDEwNTEzLCA2NDYzNywgMTk0ODYyLCA2ODAxMywgNTIsIDEzMTE4LCA2NDc1LCAwLCAKKyAgICAxMjAzNDEsIDEyMDk1LCAxMDIyNSwgNDgxMiwgOTI1NzgsIDAsIDY3OTkyLCA3NDA4NSwgMCwgMzk3OCwgMCwgOTE3OTQ1LCAKKyAgICAxMjc4MjMsIDExNTgyLCAxMjA3NjEsIDEyMjgxLCAwLCA2NTQ0LCAxMzI0MSwgOTM5NjEsIDY5NzgyLCAxMjg1NTcsIAorICAgIDE5NDg2MCwgMTE3NjUsIDY1MjU4LCAxMDM2OSwgMCwgMTU4NSwgNzE5MiwgMTAyNDksIDQyMiwgMTUwMCwgMjAzNiwgOTg2LCAKKyAgICAxOTQ4NTksIDY0Mzk0LCA1NzgxLCA1NTk5LCA2NDI5NCwgMjQ5NCwgMTIwNDUwLCA0ODYxLCA3NDAyMSwgNjQzMzQsIAorICAgIDc4MjAzLCAxMjc4MDgsIDAsIDkyMjY2LCA2NTEwMiwgODk2MSwgNjU4NDIsIDEwMjQzLCAxMDI0NSwgNzQxOTEsIDEyMDQxMCwgCisgICAgMCwgMTIwNDUzLCA2NDgyMSwgOTQ3OCwgMjUwOCwgOTI2ODMsIDAsIDIwMiwgMTI4MjQ2LCA3NDEzMSwgMTI0MiwgNjU1MTQsIAorICAgIDAsIDYzOTQwLCAxMjg3MDYsIDY0NTMzLCAxMjAxMjksIDAsIDY3ODQyLCAxMTk5MCwgOTI0MzAsIDYzOTM5LCA0MzM3NSwgCisgICAgNjU0NDAsIDI1MDQsIDAsIDc4NjcxLCA2NDgyOSwgOTgzOTEwLCA2OTQzLCA5MTc5MzQsIDU4NTksIDAsIDI4NTgsIAorICAgIDk4MzM2MSwgNzQyOTQsIDk4MzkxNCwgNjkyMzksIDAsIDExOTAyNywgMTI5OTIsIDI3NTMsIDE5MzYsIDcwMDc4LCA5MjU3NCwgCiAgICAgMjc1MSwgMTI2NjIsIDI3NjMsIDg5NTMsIDY0NzAxLCAxMDczMSwgMTI5MjIsIDcwNTIsIDkxNzgzOSwgMCwgMCwgMCwgCiAgICAgNjM5MjAsIDc0MTI4LCAyODU2LCAxMTk5MTAsIDQ3LCA2OTkwOCwgMTI2OTg2LCA2NTg1OCwgMCwgMCwgMCwgNzg5OSwgMCwgCiAgICAgODQxNywgNDM3OTgsIDcwNzIsIDAsIDAsIDQwMzMsIDEyODE2NCwgNDM5OTIsIDAsIDAsIDIxMiwgNjQ2MDAsIDE5MDMsIApAQCAtMTc3OTcsMjMgKzE3ODE2LDIzIEBACiAgICAgMTI2MjQsIDAsIDE2NzMsIDQ4MTEsIDkyMzgzLCA1OTg2LCA5MzM4LCAzMDQ2LCA3NDQ4MCwgNTk4NSwgOTE3OTI4LCAKICAgICAxMTk1OTgsIDk4MjAsIDAsIDEyMTg3LCAwLCAwLCA1OTg0LCAwLCA0MzMwOCwgNDM5MywgNjc2NTAsIDAsIDAsIDAsIDAsIAogICAgIDc0ODI2LCA2NDczMywgMCwgMCwgMzQ5MSwgMCwgMCwgMTI4MjE5LCAzNTE0LCA2NTQ4NSwgMCwgNzQ5MiwgMCwgNzQ2MDUsIAotICAgIDkyNDgzLCA3NTE0LCA5ODMzNTksIDAsIDE5NDczMSwgNzUwMiwgNzU4NywgNjgzNTMsIDAsIDAsIDYzOTI1LCAwLCA3NjEwLCAKKyAgICA5MjQ4MywgNzUxNCwgOTgzMzY3LCAwLCAxOTQ3MzEsIDc1MDIsIDc1ODcsIDY4MzUzLCAwLCAwLCA2MzkyNSwgMCwgNzYxMCwgCiAgICAgMjE5LCAwLCAwLCA2OTIsIDQzNTg4LCA3NDQzMywgNDE2MzUsIDQzMjQxLCA5Njg4LCA3MTQ3LCA5NTM1LCAwLCA5Mzk5MSwgCiAgICAgMCwgNjQ1MzAsIDAsIDY0NjEwLCAxMTgwNCwgMCwgNzE0OSwgNzQ1MywgMCwgODAxMywgMCwgOTIzMDEsIDAsIDg4OTUsIAogICAgIDUyNTMsIDcwMDI1LCA1NDU4LCAwLCAyODY2LCAwLCAxMjc4NjAsIDY1MTExLCA2ODQzMywgNjcwMCwgMTIwNDg0LCAwLCAKLSAgICAxMjA1ODMsIDAsIDg5NjIsIDc3OTYwLCA5NjQxLCA0MzY5NCwgNzA1OSwgOTgzNjY4LCAwLCA5NjA0LCA3ODcwMCwgNzQ0MSwgCi0gICAgNjM4MjYsIDY3OTcwLCAxMTg5NDEsIDY0MzkyLCAxOTQ3MzUsIDk4MzY3OCwgMjg0NCwgOTgzOTMyLCA0MTk3NCwgMCwgCi0gICAgMTIxMzksIDY3OTcxLCAwLCAwLCAzMzU4LCA2NTI5NSwgMCwgMzEwNCwgMTk0NzM0LCAwLCAxOTQ3NjUsIDk4MzIyNywgCisgICAgMTIwNTgzLCAwLCA4OTYyLCA3Nzk2MCwgOTY0MSwgNDM2OTQsIDcwNTksIDk4MzY3NywgMCwgOTYwNCwgNzg3MDAsIDc0NDEsIAorICAgIDYzODI2LCA2Nzk3MCwgMTE4OTQxLCA2NDM5MiwgMTk0NzM1LCA5ODM2ODcsIDI4NDQsIDk4Mzk0MSwgNDE5NzQsIDAsIAorICAgIDEyMTM5LCA2Nzk3MSwgMCwgMCwgMzM1OCwgNjUyOTUsIDAsIDMxMDQsIDE5NDczNCwgMCwgMTk0NzY1LCA5ODMyMzMsIAogICAgIDUzMDgsIDAsIDI5MCwgMCwgMCwgMjg2MiwgMjc5MiwgMTk1MDg4LCA5ODMwNzAsIDAsIDMyNjgsIDY2NTkxLCAwLCA2NTUyLCAKICAgICA0MjM2NywgNzAzNSwgMTIwNTU4LCAwLCAwLCAxODE0LCAwLCAxMDI0MCwgOTIzMzgsIDc0MzA1LCAwLCA3NDUyOCwgNjU5MDMsIAogICAgIDAsIDQyNjQ2LCA3NjA2LCAyNTkxLCAyODM3LCA0MzQxLCA3Nzk1NiwgNjQ0ODIsIDEyNzMzNywgODE2MywgNjUyNzAsIDAsIAogICAgIDc3OTMyLCAwLCA5MTEyLCA3NDQzMSwgODYzLCA5NDkwLCAxMTk4OTgsIDEyODM0OSwgNDMzMjMsIDEyMDUxMywgMTE5ODk3LCAKICAgICA5MDcxLCAxMjczMzMsIDAsIDM2NTQsIDc3ODksIDk2MzcsIDAsIDI1MzUsIDY1NTA0LCA3NjUzLCA0MDk5MywgMTE5ODk5LCAKLSAgICA2NjU4NywgMTk1MDk4LCAwLCA5MjQwMSwgOTgzODg1LCAxMTAwNiwgMTI5MjcsIDc4MDcsIDgwNzMsIDAsIDEwNjI5LCAwLCAKKyAgICA2NjU4NywgMTk1MDk4LCAwLCA5MjQwMSwgOTgzODk0LCAxMTAwNiwgMTI5MjcsIDc4MDcsIDgwNzMsIDAsIDEwNjI5LCAwLCAKICAgICA3NDA4OCwgMzA1NiwgMTA4MjMsIDEyODc5NywgMTI3MzI3LCA4NzYyLCAxMDUwOCwgNjk2ODksIDczNzcwLCA0Mzk2OSwgCiAgICAgNDMxOTMsIDEwNzM3LCAzNDYzLCA5ODMwNjUsIDAsIDY2NjMzLCA4Njk1LCA0ODE1LCAxMTMyMiwgNTgxMSwgMTIzNDUsIAogICAgIDcwNDksIDExOTkxMSwgNTE5NSwgMTk1MDgxLCAwLCA2NjYzOSwgMCwgMCwgMCwgMTI4MDQxLCAwLCA5MjM4NSwgMTI2MiwgMCwgCi0gICAgNjU2MSwgMTk5MzksIDAsIDAsIDEyODUzNSwgMTE5OTA2LCAwLCAwLCA5ODMwOTcsIDAsIDk4MzY1OCwgMTE5OTA3LCAKKyAgICA2NTYxLCAxOTkzOSwgMCwgMCwgMTI4NTM1LCAxMTk5MDYsIDAsIDAsIDk4MzA5NywgMCwgOTgzNjY3LCAxMTk5MDcsIAogICAgIDY0NjEyLCAxMTk5MSwgMCwgMCwgMCwgMTUwMiwgOTE3NTY4LCAwLCA5MTA3LCAxMjczMTYsIDU3MDIsIDM2NTUsIDY3NjYxLCAKICAgICA4NDMwLCAwLCA3NDEzMiwgMTIwNzU4LCAwLCA3NDA1NywgOTYwMywgMCwgNTI1NCwgMTIwNzQyLCA3NzI0LCA3NDM4OCwgCiAgICAgNjgzNzUsIDEwNzk2LCA1MTI5LCAwLCAwLCA1OTAsIDc1NzksIDU2MTQsIDU4OTMsIDkyMjgwLCAxMTcyMCwgOTI0OTYsIApAQCAtMTc4MjcsMTcgKzE3ODQ2LDE3IEBACiAgICAgMCwgNjU1NTgsIDY1OTQ2LCA4MTEzLCA3MDg3LCA1MjU1LCAxNzg2LCA2NjEsIDAsIDAsIDAsIDc0NDIzLCA3MTM0NSwgNTg2LCAKICAgICA3NDQxNCwgNjQzNTksIDEyNjcsIDEyODI2OSwgNjU0NjgsIDAsIDY1NzMxLCAwLCAxMjcxNzksIDM2MjEsIDEyMDQ3MywgCiAgICAgNjY2NjYsIDY0MjExLCAwLCA2NTYyLCAxMjkyOCwgMCwgMTIyOCwgNjU0OTAsIDExMzgzLCAwLCAwLCAwLCAxNzE0LCAKLSAgICA3NDQwNiwgMTI3ODMxLCAwLCA5ODM5MTIsIDAsIDY2MjI1LCAwLCAwLCA0MjY2MCwgMTE0MzYsIDIwNzAsIDY0LCAxMjA2OTQsIAorICAgIDc0NDA2LCAxMjc4MzEsIDAsIDk4MzkyMSwgMCwgNjYyMjUsIDAsIDAsIDQyNjYwLCAxMTQzNiwgMjA3MCwgNjQsIDEyMDY5NCwgCiAgICAgMCwgMTAyOTEsIDEwMzIzLCAyODI2LCAwLCAwLCAwLCA0MjAwOCwgOTcwOCwgNDI3MTAsIDAsIDQyMDExLCA0MTk5OSwgCi0gICAgOTIxNjQsIDEyMjA2LCA1ODM5LCAxNzAyLCAxMjQwLCA3NDA2NSwgNjI4NiwgMCwgOTgzOTYwLCA2NTgzMywgNzc4NDgsIDAsIAorICAgIDkyMTY0LCAxMjIwNiwgNTgzOSwgMTcwMiwgMTI0MCwgNzQwNjUsIDYyODYsIDAsIDk4Mzk2OSwgNjU4MzMsIDc3ODQ4LCAwLCAKICAgICAxNzY1LCAwLCAwLCA2NTU4OCwgMCwgMCwgMCwgODQwMSwgMCwgNDIwMTQsIDAsIDcwMzAsIDE5NDcwNCwgMTA0NzksIAogICAgIDY0OTU5LCAyODUyLCAwLCAwLCAwLCAwLCAxMjg1ODYsIDkxNzk1MSwgNjk2MywgMCwgMTI2NjcsIDY0NTQwLCA3NDc4NiwgCiAgICAgMTAxNDcsIDEyOTM1LCAxMjc1NjgsIDEyNjQ4MywgMCwgMCwgMCwgNzg3NTcsIDAsIDAsIDAsIDAsIDk5OTQsIDEyNDY3LCAKICAgICAyODY0LCA2NDcxOSwgMTE0OCwgMTA0MzUsIDExNDYyLCA0MTY3NSwgNzA4NCwgMjc2NSwgMCwgNDMzODIsIDAsIDEyMDcxOSwgCiAgICAgMTI4MTg4LCA5MjUxNiwgNjY2NjIsIDAsIDc4MTMzLCA5MzY0LCAxOTQ2ODUsIDc0NDE2LCAwLCAwLCA3Nzk4OCwgMjYzLCAKLSAgICAxMDQ0OSwgNDEyODgsIDAsIDQxODM5LCA3ODM4NywgOTgzNzMzLCA3Nzk4NiwgMCwgNjkzMSwgNjk3MjIsIDY0MzU1LCAKKyAgICAxMDQ0OSwgNDEyODgsIDAsIDQxODM5LCA3ODM4NywgOTgzNzQyLCA3Nzk4NiwgMCwgNjkzMSwgNjk3MjIsIDY0MzU1LCAKICAgICA3MTc3LCA3MDEwNSwgMCwgMCwgMCwgNDI2MiwgMTAyODUsIDEwNzIyLCA0MjAyMCwgMTI2NTc1LCA2ODA2LCA2OTkyLCAKLSAgICA0MjAxOSwgMCwgNDEyOTAsIDk4MzcwNywgNzUwLCAwLCA3MTMwNCwgMTAxNjMsIDYzOTEzLCA3MTMwMCwgNzAzMiwgNTk1NCwgCisgICAgNDIwMTksIDAsIDQxMjkwLCA5ODM3MTYsIDc1MCwgMCwgNzEzMDQsIDEwMTYzLCA2MzkxMywgNzEzMDAsIDcwMzIsIDU5NTQsIAogICAgIDY0OTMxLCA0MzE0LCAwLCAxOTgsIDY4NDUzLCA3MzAsIDEyMDA5NCwgNjM5MDcsIDc3OTkzLCA3ODg5MSwgMTMxNjUsIAogICAgIDcxMDcsIDc0MTcxLCA0MjgwNCwgNjc4LCA4MjQwLCA3ODAxNSwgMTI4Nzg0LCA0MTM3OCwgMTEwMDgsIDY5MzgsIDcwMDI2LCAKICAgICA5MjYzNywgMjA5NywgNjYyNDYsIDEyMDU2MCwgMCwgMCwgMCwgMzg5MiwgNjg2MzIsIDY5NjQyLCA2NzEyLCA2NjA0NSwgCkBAIC0xNzg0NSwzMSArMTc4NjQsMzEgQEAKICAgICA2OTY2OSwgNDMyNTQsIDczODMxLCAwLCAxMDI5MywgNTk1MiwgMTI4MSwgNDM3NDcsIDAsIDAsIDEwNjc3LCA2MDQsIAogICAgIDQxMDk3LCA5MTgyLCAxODU5LCAwLCA5MjYwMywgMzQyNSwgMTI3NDg4LCAwLCAyODM2LCAwLCAwLCA5NzA3LCAwLCA0MzIwMiwgCiAgICAgMCwgMCwgNjUxOTksIDE3MzgsIDkxNzgxOCwgMTI4MTU4LCAyODMyLCA5MjcwMiwgOTY3MCwgMTI5MzcsIDAsIDY2Mzc0LCAKLSAgICA5MTc5NTYsIDAsIDI4MjIsIDY4MTIyLCA0NDM2LCA5MjUxOSwgOTgzNzE0LCA3Mzc1MiwgMCwgNjQ4NzIsIDkyMzQwLCAKKyAgICA5MTc5NTYsIDAsIDI4MjIsIDY4MTIyLCA0NDM2LCA5MjUxOSwgOTgzNzIzLCA3Mzc1MiwgMCwgNjQ4NzIsIDkyMzQwLCAKICAgICAxMzMxLCAwLCAwLCAwLCAxMjcwOCwgMCwgNTA5MCwgNTA4OSwgMTI3OTc3LCAwLCAxMTkxMDksIDAsIDEyODY4MSwgMzE5LCAKICAgICAxMTg4NDcsIDQzNDc5LCA5NDc3LCAwLCAwLCA1MDg3LCA5MjMyNSwgNzY0MCwgOTYsIDUwODYsIDAsIDkyMzc5LCAwLCAKICAgICA1MDg1LCA2NDI4NiwgOTI2NjUsIDAsIDQxNDIyLCAwLCAxMTk5MDEsIDQyMzU2LCAzNzcyLCAwLCAwLCA1MDExLCAwLCAwLCAKICAgICAxMjY1ODcsIDAsIDEyNzE2NSwgMTI3MjQxLCA2Njc3LCA3NjAxLCAwLCA1OTEsIDY0NDE5LCAxMTg5NTMsIDkyMjYyLCAwLCAKICAgICAxMTg5MjMsIDcwMDg0LCAwLCAxMDkzOSwgNjEwNiwgNjkzMywgNDEyNzEsIDY3NjAsIDcxMzQzLCA0NTM0LCA0MTI3MCwgCiAgICAgMTI4ODc2LCAwLCA2NTU3NCwgMCwgOTIyNCwgNjk4NTMsIDM2NzEsIDg5NzYsIDEyNjQ3NCwgMCwgNDEyNzUsIDYzNzIsIAotICAgIDEyODA4NCwgNTUyNjEsIDc5NjMsIDYzNzEsIDAsIDU2OCwgMCwgNDEyNzMsIDk4MzcyMSwgMCwgNjcyOCwgMCwgOTcxNSwgMCwgCisgICAgMTI4MDg0LCA1NTI2MSwgNzk2MywgNjM3MSwgMCwgNTY4LCAwLCA0MTI3MywgOTgzNzMwLCAwLCA2NzI4LCAwLCA5NzE1LCAwLCAKICAgICA4MjU4LCAxMTc1MywgNzQ4MjAsIDAsIDk2MDIsIDExODkxOSwgNDIsIDAsIDQzNjg4LCAwLCAwLCA3NDU4LCAwLCAwLCAKICAgICA2NTM4NSwgMTE5OTAwLCAwLCAxMTk1OCwgMCwgOTE3ODIyLCAwLCA2MjU0LCA0MjcyMSwgNjYzMzYsIDgwNDUsIDExNTUwLCAKICAgICAwLCAwLCA5ODM1OTcsIDQyODU4LCAxMTc4OSwgNjU4NjgsIDU1NTcsIDEwMTMzLCA5NzM3LCAxMzEwOSwgMCwgOTQ2NywgCiAgICAgNTU1OCwgODg3OCwgMTI4MTM2LCAxOTUwMzYsIDc0NTEsIDY3MDYsIDEwMTQ2LCAwLCA5MDg2LCA2NDU2NiwgMCwgNjQ1ODQsIAogICAgIDc0MzcsIDc0NTQsIDEyNTk0LCAxMjg2OTAsIDY4MzYyLCA0NTQ2LCA3NzMxLCAwLCA3MDA0OCwgNzQyNDMsIDAsIDM4MDUsIAotICAgIDAsIDE5NDU2NSwgNDQwMDEsIDQxMDA4LCAwLCA2MzA3LCAxOTk0OSwgOTgzNzgxLCA3NTQ0LCA5ODMwNDUsIDQzNDY5LCAwLCAKKyAgICAwLCAxOTQ1NjUsIDQ0MDAxLCA0MTAwOCwgMCwgNjMwNywgMTk5NDksIDk4Mzc5MCwgNzU0NCwgOTgzMDQ1LCA0MzQ2OSwgMCwgCiAgICAgMCwgMTAxNTIsIDY0NDIyLCA2NTA5MSwgMTE5MTEzLCA3NjAyLCA2NDcyOSwgMCwgNDM1MjEsIDAsIDQyMzAyLCA0MzcxMSwgCiAgICAgNDM1MjMsIDQxNDQ3LCA1NTU5LCAwLCA4NzA0LCAyMzk3LCA1NTU2LCAwLCAwLCAwLCA5MDExLCA5NjMwLCA5MjYzMywgMCwgCiAgICAgOTM5OTgsIDU1MDYsIDAsIDE5MTEsIDY2NjUyLCAwLCA5OTYxLCA4ODQ1LCA2NjY5OCwgMCwgMTA3OTIsIDg4ODksIDAsIAotICAgIDIwOTgsIDAsIDY0NzUxLCAwLCA2NjYyMiwgMCwgMCwgNzQzNjQsIDAsIDAsIDk4Mzc5NiwgNzQzNjUsIDc1NTIsIDAsIDAsIAorICAgIDIwOTgsIDAsIDY0NzUxLCAwLCA2NjYyMiwgMCwgMCwgNzQzNjQsIDAsIDAsIDk4MzgwNSwgNzQzNjUsIDc1NTIsIDAsIDAsIAogICAgIDY1Mzg0LCA3MjIzLCA0NTU5LCAwLCAxOTU2LCA0MzEzOCwgNzAyNCwgNjU3MjgsIDY0NTAxLCAxMjEwLCAxOTUwNzcsIAotICAgIDY1MTc1LCAxMDE4NCwgNDMxNDAsIDQzNjU0LCAwLCAwLCAwLCAzOCwgODUzMywgNjY2NjksIDExOTEyNCwgOTgzMjg1LCAKLSAgICA5ODM3ODMsIDAsIDQzNTcsIDAsIDExOTgzNywgOTE3ODYzLCA3NDIzMywgOTk2NywgNzg4ODQsIDQyODYwLCAxMTk4MzgsIAorICAgIDY1MTc1LCAxMDE4NCwgNDMxNDAsIDQzNjU0LCAwLCAwLCAwLCAzOCwgODUzMywgNjY2NjksIDExOTEyNCwgOTgzMjkzLCAKKyAgICA5ODM3OTIsIDAsIDQzNTcsIDAsIDExOTgzNywgOTE3ODYzLCA3NDIzMywgOTk2NywgNzg4ODQsIDQyODYwLCAxMTk4MzgsIAogICAgIDEwOTQxLCA2NTcyMSwgNjk2MiwgMCwgMCwgMTE5MzI0LCAwLCAxMTAxNCwgMTI3OTcyLCA4OTQyLCAxMjAwMCwgNjkyMjQsIAogICAgIDkyMjY3LCAxMjg1MzYsIDExOTc0LCA5MjIxMywgNDI3NzIsIDEyNzUxOCwgMTE2NTAsIDUwMTMsIDkyNjYzLCAxMjY1ODMsIAotICAgIDY2MjEwLCAxMTg5MTQsIDY2MTMsIDkyNDc2LCAwLCA0MzgxOSwgOTgzNzYxLCAwLCA2NDcxNCwgMCwgMCwgMTIxNjIsIAotICAgIDEyMTIwLCA0MzQ3NiwgOTgzNzU3LCAxMTAyNCwgNzQ4MTEsIDY2MjI4LCAxMDU2MywgMCwgMTI3MTk2LCA0MzUyMiwgMjQ2MiwgCisgICAgNjYyMTAsIDExODkxNCwgNjYxMywgOTI0NzYsIDAsIDQzODE5LCA5ODM3NzAsIDAsIDY0NzE0LCAwLCAwLCAxMjE2MiwgCisgICAgMTIxMjAsIDQzNDc2LCA5ODM3NjYsIDExMDI0LCA3NDgxMSwgNjYyMjgsIDEwNTYzLCAwLCAxMjcxOTYsIDQzNTIyLCAyNDYyLCAKICAgICAwLCAxODM3LCAwLCA2Mzk3MiwgNjk1NywgMCwgMTIwNTU5LCA0OTUyLCA2NTcxOCwgNjU4MjcsIDU1MDQsIDY1NzIwLCAKICAgICA2NTcxNCwgNjU3MTUsIDY1NzE2LCAwLCAxMjcwMDUsIDEyNzExOSwgMzEwOSwgNjM5NzUsIDc0MDI4LCAwLCA4MTA3LCAKICAgICAxMTkyMzQsIDExMjcsIDQ1NSwgMCwgNjM5NjgsIDEyNzkyNCwgMzQ4MywgMTE5NTkzLCAxOTg5LCAwLCA2OTY3OCwgOTEwNCwgCkBAIC0xNzg4Miw3ICsxNzkwMSw3IEBACiAgICAgNDE4NjksIDEyNjE5LCAwLCAxMDE1NCwgOTgzMDQzLCA3NDQzOSwgMjAzOSwgMCwgNzQ0NiwgMTY4NCwgNjM5NzksIDEwOTc0LCAKICAgICA0NTgsIDEyMDYyMCwgMCwgNjk3OTEsIDEyNzE2MSwgMTE5MTYsIDY1MDE2LCAwLCA2OTY3MSwgNDIxMTUsIDk4MzEzMywgCiAgICAgMTIyODgsIDc4MDU3LCAwLCAxNDkzLCA0MjExMSwgNzU1MywgNDA5NywgMTI4MTk5LCAxMzA4MCwgMCwgNjU4MDgsIDY2MTAsIAotICAgIDYwMzAsIDgwNTksIDc1MDgsIDEzMTMxLCAwLCA5ODM0MjMsIDAsIDg3OTQsIDQxMjc4LCA0MTYyOSwgMTIxNTQsIDEyODE5MiwgCisgICAgNjAzMCwgODA1OSwgNzUwOCwgMTMxMzEsIDAsIDk4MzQzMSwgMCwgODc5NCwgNDEyNzgsIDQxNjI5LCAxMjE1NCwgMTI4MTkyLCAKICAgICA0MTI3NywgNjQ2NTgsIDAsIDY0MzgwLCA2NjI1LCA3NDM1NCwgMTk5MDQsIDAsIDAsIDAsIDY1MzcxLCA3MDc4LCAwLCA4MzMsIAogICAgIDAsIDYzNjksIDAsIDEwOTc5LCA0MTk1MywgMCwgNDE0MzQsIDYwNjIsIDAsIDAsIDE5OTE2LCA2OTEzLCA5MzMsIDEzNDEsIAogICAgIDk4NDIsIDY3MjAsIDY1NzQ0LCAwLCA5ODM1OTIsIDEyODI5NSwgMCwgNzQwNSwgMTAxMDUsIDY1ODEwLCAwLCA0MTYzMiwgCkBAIC0xNzg5NywyMyArMTc5MTYsMjMgQEAKICAgICA2NzQxLCA0MzA0NywgMCwgMTMxODAsIDEyODUxNywgNDE4LCA5MTc5NzIsIDY0NDk1LCAxMDI5NSwgMTAzMjcsIDEwMzkxLCAKICAgICA0MTc1MiwgNzQzMzksIDg2NDEsIDQxNDQ5LCAwLCA3NDEwMCwgMCwgMTA5MTEsIDY5NDIsIDAsIDEwMjQsIDQyODQ5LCAKICAgICA0MTc1MSwgNjk3NzYsIDg5NDEsIDk4MzU1NiwgNDU1NCwgMCwgOTAyMywgMTE2ODUsIDAsIDk5MjgsIDc4NjE3LCAwLCAKLSAgICAxMTQzNywgNDM3NDEsIDkyMTYzLCAxMjA3MDAsIDYzOTY3LCA5ODM0NzUsIDQxMjA2LCAxMjA3MjQsIDkwNDksIDQxMTg1LCAKKyAgICAxMTQzNywgNDM3NDEsIDkyMTYzLCAxMjA3MDAsIDYzOTY3LCA5ODM0ODMsIDQxMjA2LCAxMjA3MjQsIDkwNDksIDQxMTg1LCAKICAgICA0MzE2NiwgMCwgMTE2ODAsIDkyNjE5LCAxMTY4NiwgNzg1NDQsIDY1MjI0LCA0NTY1LCA0NjU1LCAxMTk1NTMsIDAsIAogICAgIDkyMTgzLCA2NDUyMywgMTAzNDMsIDEwNDA3LCAwLCA2NjY3MSwgMTE0NjYsIDAsIDEyODAwMywgNDI4OTAsIDc0MDEzLCAKICAgICAxMjA1MCwgNjgyMDEsIDI4NjAsIDAsIDAsIDAsIDQyNzkyLCA1NzQzLCAxMDQyNCwgMTIwNjUsIDQyODcyLCAwLCA5MjM0MiwgCiAgICAgMCwgODg3NSwgMCwgMCwgOTE3OTkxLCA3NTMxLCAxMjg0NywgMjQxMywgMCwgNzg2MzUsIDk2MiwgMCwgMTI4NTUsIDQxMTk2LCAKLSAgICA0MjU2NCwgMCwgMTU4MiwgOTgzNzA2LCA1NTA4LCAwLCAwLCAwLCAxMDgwMSwgNjk4NzYsIDkyMzU0LCAwLCA3MTczLCA0OTYsIAorICAgIDQyNTY0LCAwLCAxNTgyLCA5ODM3MTUsIDU1MDgsIDAsIDAsIDAsIDEwODAxLCA2OTg3NiwgOTIzNTQsIDAsIDcxNzMsIDQ5NiwgCiAgICAgMTA0MzksIDQzMTMsIDY0NjA3LCA2OTYzOCwgNzg2MCwgMCwgOTA2LCA0Mjc5MywgMjg0MiwgNjQwNSwgNjQ3MjIsIDEzMTMyLCAKICAgICA3OTgsIDY0Njk0LCAxMjgwMSwgODQwNiwgMTE1MywgOTIxNzMsIDY0Nzg4LCAwLCA4MDU0LCA5MTc0LCAxMjg2NTIsIAogICAgIDkxNzk3NiwgOTk2NCwgNzQ0MDksIDQxNjExLCA0NjQyLCA2NjU3NCwgMTE1NTYsIDkxNzk4MiwgMCwgNzg4NTcsIDQyMDg5LCAKICAgICA3ODg1NSwgOTAwOCwgMCwgMTI2NTkyLCAxOTUwOTYsIDQyMDc5LCA5MTc5ODEsIDc3OTI0LCA0MjUxMywgNzc5MjcsIAotICAgIDQyODQyLCA3Mzk4NSwgNjUyODUsIDExODk3NCwgMTI3MDAzLCA5ODM2OTMsIDAsIDAsIDAsIDExMzM1LCA2NDA2OSwgCi0gICAgNDIwOTMsIDM5MjAsIDAsIDAsIDAsIDAsIDQ1ODAsIDQxOTY3LCA5ODM3MjMsIDY0Mzg0LCA5MjE2NywgOTM5ODQsIDMwMjEsIAorICAgIDQyODQyLCA3Mzk4NSwgNjUyODUsIDExODk3NCwgMTI3MDAzLCA5ODM3MDIsIDAsIDAsIDAsIDExMzM1LCA2NDA2OSwgCisgICAgNDIwOTMsIDM5MjAsIDAsIDAsIDAsIDAsIDQ1ODAsIDQxOTY3LCA5ODM3MzIsIDY0Mzg0LCA5MjE2NywgOTM5ODQsIDMwMjEsIAogICAgIDQyMDA0LCAwLCAwLCA0MjMxNywgNDE5OTgsIDAsIDY5NDYsIDAsIDAsIDAsIDEyODE5MywgNjUyMDQsIDAsIDY4MTEzLCAKICAgICA0MjY5MCwgOTg4MCwgNDIwMTAsIDc0ODI0LCA2NDU4OSwgMTAxMTEsIDY0ODc1LCAxMjc4ODAsIDY4Mzk5LCA0Mzk5OCwgCiAgICAgMTEzNjAsIDAsIDAsIDAsIDExODgyNiwgNDIxNDksIDAsIDAsIDAsIDY0OTQxLCA3NzkxOSwgMTIwNDIxLCAxMjgwNzcsIDAsIAogICAgIDU1MjQ3LCA0MTEwLCA2NjAwNSwgNjk1OSwgMTA5MjksIDExOTExMCwgMCwgNjY3MDMsIDc3OTIxLCA4NjE3LCA0MTk4MiwgCi0gICAgNjAyNSwgNjkyNDIsIDk4MzE3NiwgMCwgMCwgMCwgOTU5NywgNDIwOTksIDQzMTcyLCA5ODMzNjgsIDEwMTE3LCA5ODMxNjksIAorICAgIDYwMjUsIDY5MjQyLCA5ODMxNzYsIDAsIDAsIDAsIDk1OTcsIDQyMDk5LCA0MzE3MiwgOTgzMzc2LCAxMDExNywgOTgzMTY5LCAKICAgICA5MjI5NywgNDE2MzYsIDAsIDAsIDEyMDY4MSwgODMwMSwgMCwgMCwgMTg3LCAwLCA2NTY2OSwgMTI4MzM5LCA0OTYzLCAwLCAKICAgICAxMjc1MTcsIDAsIDg5NjQsIDY1Njc2LCA3Nzc1LCAwLCA0MTk0OCwgMCwgMCwgMCwgNDE5NDIsIDY1NDQ5LCAzMTYwLCAKICAgICAxMDA4MSwgMTMyMjYsIDQyMTIxLCA0MjQ3NSwgNDI2NjMsIDEyODIxMCwgNDE3NjYsIDExOTExNCwgNjU4ODIsIDc4ODQ5LCAKQEAgLTE3OTIzLDIwICsxNzk0MiwyMCBAQAogICAgIDMxMDMsIDAsIDQxNzUzLCAxMjg1NDAsIDAsIDAsIDc4ODQ0LCA3ODg0NSwgNDE3MzksIDc4ODQzLCA0MjUxNSwgMTA5MzEsIAogICAgIDQxNzU2LCA0MzM0NywgNDI1NjAsIDUzOTEsIDQxNzQ2LCAxMTkxNDcsIDkyNTkxLCA0MTI1OSwgNTU2MSwgNjk5MzAsIAogICAgIDI2OTEsIDAsIDY1NTUzLCA3OTMzLCA1NTYyLCA2OTgwMCwgMTI4MjY1LCA0MTI2MiwgMTI4MTQ2LCA2NDQyMSwgNzQ4NDYsIAotICAgIDQxMjUxLCAwLCAwLCAzOTc5LCAwLCAwLCA3NDgxMywgOTgzNzMwLCAwLCAwLCAwLCA5MjUyNCwgNDEyNjYsIDAsIDY2NTY2LCAKKyAgICA0MTI1MSwgMCwgMCwgMzk3OSwgMCwgMCwgNzQ4MTMsIDk4MzczOSwgMCwgMCwgMCwgOTI1MjQsIDQxMjY2LCAwLCA2NjU2NiwgCiAgICAgMTI4ODM2LCAxMDU4NSwgNjU3NDEsIDQxNzM3LCA5NTc0LCAyNjY2LCAwLCA0MTczOCwgODMxLCA0MTksIDEzMTI2LCAKICAgICAxMDcxNiwgMCwgNDI4MjIsIDAsIDY0MzQsIDAsIDY5MzksIDc3NjYsIDY0MzIsIDEyODEwNiwgNjk5MzIsIDkxNiwgNzY5LCAKICAgICA0MTc0MiwgMTE5NjgsIDc0ODA1LCA2NDMzLCA1NTYzLCA1NDcsIDE5NDMsIDY0MzksIDU1NjAsIDQ5OTQsIDQ4NywgCiAgICAgMTI2NTM3LCA0NDk3LCAzNzU0LCAxMjcwNTYsIDEyMDQyNCwgOTAzOSwgMCwgNDE3NzYsIDAsIDg3MTYsIDE1OTUsIDQxNjE1LCAKLSAgICAwLCAwLCA3NDI2MCwgMCwgNDI4NTQsIDQzMjE5LCAxMjg3MDksIDk4MzQ1MiwgMTIxODUsIDEyODg3OSwgNzAwNzIsIAotICAgIDY4MzU1LCA2ODM1NywgMCwgNDI4NTYsIDg2MzQsIDAsIDk4MzM4OSwgNDIwOSwgMTIwNzAyLCAwLCA2NTg3OSwgNDE1MzgsIAotICAgIDY1NjEyLCAxMjc1NDMsIDY2OSwgNTY3OSwgMCwgNjk3ODYsIDkyNTQwLCAwLCA5ODM0NTYsIDU2NzgsIDExODIxLCAwLCAKLSAgICA2NzExLCA0NjAsIDAsIDAsIDk4MzQ1MywgMCwgMTIwNzQ3LCAwLCAwLCA3ODA1MCwgMTE5MDIyLCAwLCA5ODM0NTQsIDAsIAorICAgIDAsIDAsIDc0MjYwLCAwLCA0Mjg1NCwgNDMyMTksIDEyODcwOSwgOTgzNDYwLCAxMjE4NSwgMTI4ODc5LCA3MDA3MiwgCisgICAgNjgzNTUsIDY4MzU3LCAwLCA0Mjg1NiwgODYzNCwgMCwgOTgzMzk3LCA0MjA5LCAxMjA3MDIsIDAsIDY1ODc5LCA0MTUzOCwgCisgICAgNjU2MTIsIDEyNzU0MywgNjY5LCA1Njc5LCAwLCA2OTc4NiwgOTI1NDAsIDAsIDk4MzQ2NCwgNTY3OCwgMTE4MjEsIDAsIAorICAgIDY3MTEsIDQ2MCwgMCwgMCwgOTgzNDYxLCAwLCAxMjA3NDcsIDAsIDAsIDc4MDUwLCAxMTkwMjIsIDAsIDk4MzQ2MiwgMCwgCiAgICAgNzc4MiwgOTA0NCwgNDk3NCwgMTE3NjAsIDc4NDk0LCA3NTc3LCA2NTcxMSwgNDE5MTIsIDEyMTYsIDAsIDEyODA3OSwgCi0gICAgNTc5MiwgMCwgMCwgNzg1MDEsIDAsIDI5MzMsIDEyMjQ0LCAwLCA1NjgzLCA5ODMzODQsIDAsIDc4MTE5LCAxNTQ5LCAwLCAwLCAKKyAgICA1NzkyLCAwLCAwLCA3ODUwMSwgMCwgMjkzMywgMTIyNDQsIDAsIDU2ODMsIDk4MzM5MiwgMCwgNzgxMTksIDE1NDksIDAsIDAsIAogICAgIDEyMDM5OCwgNTY4MiwgNjIwNiwgODY3MCwgMTAyNTYsIDU2ODAsIDY5OTM1LCAxMDAwMSwgMTI4NTEyLCA2OTc2OCwgMTQ0OSwgCiAgICAgMTAyNDEsIDc4MjkwLCAxMjgyMjgsIDAsIDEwNTUyLCA2NDM0MiwgNDE5MjIsIDEyODU0OCwgODU4NCwgNjgwMzAsIDU1NjcsIAotICAgIDI3MTcsIDAsIDAsIDU1NjQsIDQyODg2LCA0MTkwOCwgNDI4ODIsIDU1NjUsIDk4MzI0OCwgMTI4MDI2LCAwLCA2NTcwOCwgCisgICAgMjcxNywgMCwgMCwgNTU2NCwgNDI4ODYsIDQxOTA4LCA0Mjg4MiwgNTU2NSwgOTgzMjU2LCAxMjgwMjYsIDAsIDY1NzA4LCAKICAgICA2NTcwOSwgNTU2NiwgNjk4MDMsIDY1NzA0LCA2NTcwNSwgMTE5MDQsIDQyODc1LCA0MzM3MywgNDI1MzksIDU5NDIsIDg0NjgsIAogICAgIDEyMDU2MSwgMTAzNjEsIDEwNDI1LCA2NTY5NywgNjU2OTgsIDY1Njk5LCAwLCA2NjU5OCwgMCwgNjQ2NjQsIDEwNjQ3LCAKICAgICA3ODcwMiwgNzg3MDMsIDc4NjkwLCA0NTcsIDc4NTAyLCA2NTcwMSwgMTkzNCwgNDMwMDYsIDExOTkwMywgODgwMiwgNzg3MTAsIApAQCAtMTc5NTAsMTQgKzE3OTY5LDE0IEBACiAgICAgMTE5NTcwLCA0MjIzOSwgODUzNiwgNzg3NDAsIDc4MzI0LCA3ODcyNiwgNzQ0MzIsIDcyNCwgMCwgMTQ1NSwgNzg3NDksIAogICAgIDcxODMsIDY0NTgzLCA3ODc0NywgNjg0NDMsIDQxNzUsIDc4NzQxLCA0MzYxNCwgNjk4MDEsIDkzOSwgMCwgNDM1MjAsIAogICAgIDY4NjEzLCA3NDU2OSwgOTE3OTU4LCAwLCA3ODc2MywgNzg3NjQsIDc4NzYwLCAxMDc4OCwgNjA4OCwgNzg3NTksIDc4NzU1LCAKLSAgICAxOTAsIDAsIDEyNTkzLCAwLCA4MTg4LCA2NDQwOCwgMCwgNDQxNywgOTgzMjExLCA5MjI2MSwgNjM3MCwgMCwgNzgyNywgCisgICAgMTkwLCAwLCAxMjU5MywgMCwgODE4OCwgNjQ0MDgsIDAsIDQ0MTcsIDk4MzIxMywgOTIyNjEsIDYzNzAsIDAsIDc4MjcsIAogICAgIDY4NDQxLCA2OTY1LCAwLCAwLCAxMzIwMSwgMTI4MjA1LCA2OTg5NiwgMCwgNzQzODIsIDczNzgxLCA3OTE4LCA3Mzk4OCwgMCwgCi0gICAgMCwgOTE3ODg0LCAxNzI4LCAwLCA0Mzc2NCwgMTc4LCAxMjk3MiwgOTI2NzksIDAsIDkxNzg4NywgOTI1NjMsIDk4MzM3MywgCisgICAgMCwgOTE3ODg0LCAxNzI4LCAwLCA0Mzc2NCwgMTc4LCAxMjk3MiwgOTI2NzksIDAsIDkxNzg4NywgOTI1NjMsIDk4MzM4MSwgCiAgICAgMCwgNzgzMjcsIDEyMDQwNSwgNjU2OTAsIDAsIDAsIDExOTA1NCwgMCwgOTI1MiwgOTE3ODg5LCA0NjUyLCA2ODM3MSwgMCwgCiAgICAgMCwgMCwgMTMwNjUsIDk5MjMsIDEwODA2LCAwLCAxMTc2MywgNzAwMTYsIDEyMDY4OCwgNjcyMywgNzgxODcsIDAsIDY5OTMsIAotICAgIDAsIDAsIDgzMzMsIDAsIDAsIDExMzkwLCAwLCA3NDQ2NCwgMCwgOTIzMjAsIDc0MDgwLCA5ODMzMDcsIDY5OTExLCAxMTkxMCwgCisgICAgMCwgMCwgODMzMywgMCwgMCwgMTEzOTAsIDAsIDc0NDY0LCAwLCA5MjMyMCwgNzQwODAsIDk4MzMxNSwgNjk5MTEsIDExOTEwLCAKICAgICA5MjU1OSwgODI3OCwgODk2MywgNDAzNCwgMTI4NTYwLCAwLCA2NTM0NCwgMTIwNTE3LCA0MTc0NywgMCwgMCwgODY3NywgMCwgCi0gICAgMTI3MDcsIDkzNTAsIDY2MDM3LCAxMjgxODAsIDg4MzYsIDEyMzE1LCAxMjc0NywgODMwMCwgOTgzNzQxLCAwLCA3NDkxLCAKKyAgICAxMjcwNywgOTM1MCwgNjYwMzcsIDEyODE4MCwgODgzNiwgMTIzMTUsIDEyNzQ3LCA4MzAwLCA5ODM3NTAsIDAsIDc0OTEsIAogICAgIDg4NTYsIDcxMzYxLCAwLCA0MzE1MCwgMTI3NzY4LCAxMjA0MDQsIDY1Mzg5LCAxMjA0MDIsIDEyMDQwMywgMTA4MTMsIAogICAgIDI1OTIsIDEyODUzLCA0MzI2OSwgNzI2MywgMTIwMjQ0LCA2NTM2LCAxMjAyMzgsIDEyMDIzOSwgNjU1MTYsIDEyMzIxLCAKICAgICAxMjAzOTEsIDEyMDM4OCwgNTUyODcsIDEwMDA3LCAxMjAyNDYsIDk1ODgsIDEyMDI0OCwgMTU5NiwgMTIwMzgzLCA0MTk5NCwgCkBAIC0xNzk4MiwyNyArMTgwMDEsMjcgQEAKICAgICAxMTYsIDEyOTk4LCAxMjIsIDEyMSwgMTIwLCAxMTEsIDExMCwgMTA5LCAxMDgsIDExNSwgMTE0LCAxMTMsIDExMiwgMTAzLCAKICAgICAxMDIsIDEwMSwgMTAwLCAxMDcsIDEwNiwgMTA1LCAxMDQsIDY0MzYsIDczOTc0LCA1MzQsIDQxMjEyLCA3NzkzMSwgMTUzNiwgCiAgICAgNjQwOTMsIDczOTcwLCA3NzkzMCwgMTI3MTU3LCAwLCA2MDIwLCAxMjcxNiwgMTI3MTEyLCAxMjc0NCwgNDc1LCAxMjAzOTQsIAotICAgIDEzMjY2LCAxMjc4MTMsIDEyNzExMSwgMCwgNzM5MjYsIDAsIDEwNjQ1LCAxMjEyLCA2NTQzLCA5ODMyOTksIDgxMzQsIAotICAgIDEyODAyOCwgMjkxMywgNzM4NzAsIDEyNzExMywgMTg2NiwgMCwgMTk1MDk1LCAwLCA4OTIzLCAxNjQ1LCAxMjA1OSwgCisgICAgMTMyNjYsIDEyNzgxMywgMTI3MTExLCAwLCA3MzkyNiwgMCwgMTA2NDUsIDEyMTIsIDY1NDMsIDk4MzMwNywgODEzNCwgCisgICAgMTI4MDI4LCAyOTEzLCA3Mzg3MCwgMTI3MTEzLCAxODY2LCA5ODMyMjksIDE5NTA5NSwgMCwgODkyMywgMTY0NSwgMTIwNTksIAogICAgIDY2NTg1LCA3MTI5NywgMzE5NiwgMCwgMCwgNTkzNSwgMTI1MCwgMTI3MDY2LCA4MTc0LCA5Nzg3LCA2NzMzLCA5ODU5LCAKICAgICA3OTE2LCA5ODYxLCA5ODYwLCA1MjU4LCAxODgyLCAxODkyLCA2NzMxLCAxMDg4MiwgNDA1LCAxMTQ1NCwgNzM5MTEsIDAsIAogICAgIDEyODc4MSwgNDExNjksIDg5MzksIDQxMjQ1LCAwLCA0MTE3MCwgMTQ1NCwgMTEzNjksIDY0NzcsIDEyMTU3LCAwLCAwLCAwLCAKLSAgICA0MTE3MiwgNzg1NSwgMCwgMCwgMTA0ODAsIDAsIDAsIDc3OTM2LCA4MjY0LCAxMjYxMCwgOTgzMzAwLCA2NDUsIDEyNjYxNiwgCisgICAgNDExNzIsIDc4NTUsIDAsIDAsIDEwNDgwLCAwLCAwLCA3NzkzNiwgODI2NCwgMTI2MTAsIDk4MzMwOCwgNjQ1LCAxMjY2MTYsIAogICAgIDc2MDksIDQwOTczLCA2OTk0MywgNzM4MzMsIDY5OTQ4LCA1ODI0LCA5ODQsIDc3OTE4LCAxMDY4OCwgNTg1MSwgMCwgNzcyOSwgCiAgICAgNzM5ODIsIDEyMDUxOCwgMCwgMTk1MDg2LCA0MzM2OSwgMCwgMTI4MTQwLCA2ODQxNSwgOTgzMDkzLCA0NTM4LCAxMjA0MDYsIAotICAgIDQzMTQxLCAwLCA5ODMyMDgsIDc0MjE0LCA3Mzg4NiwgMCwgMCwgMTE4OTAyLCA0MzAwNSwgNzg0NDgsIDk1NTIsIDAsIDAsIAorICAgIDQzMTQxLCAwLCA5ODMyMTAsIDc0MjE0LCA3Mzg4NiwgMCwgMCwgMTE4OTAyLCA0MzAwNSwgNzg0NDgsIDk1NTIsIDAsIDAsIAogICAgIDk4MzE1OSwgMTI5OTcsIDAsIDAsIDAsIDAsIDIzODEsIDEyODgzLCAxMDk5NCwgMTA1MjksIDQxOTA2LCAwLCAwLCAwLCAKICAgICAxMjQyNSwgMTA2NjEsIDEwODU2LCA5NjE0LCAyNDI4LCA0MTQ3OCwgODU4MiwgMTAwNjQsIDczOTMwLCAwLCAwLCAwLCAKLSAgICA2NDg5NiwgMTE5MTYyLCAxOTUyLCA5MjE4MSwgODQ1NSwgMTAwODIsIDExNTc1LCA5ODM0ODIsIDExOTU2NiwgMCwgMTI4MDgsIAorICAgIDY0ODk2LCAxMTkxNjIsIDE5NTIsIDkyMTgxLCA4NDU1LCAxMDA4MiwgMTE1NzUsIDk4MzQ5MCwgMTE5NTY2LCAwLCAxMjgwOCwgCiAgICAgMTIxODMsIDYxNDUsIDExODk1NSwgNjQ5MjksIDkyNDMzLCAwLCA5ODMxOTMsIDQzMTg2LCA0MjUwOSwgMCwgMzkyMiwgCiAgICAgOTE4NywgOTgzNjE0LCAwLCAxMDE5MSwgMTE5MDU3LCAxMTc1MiwgMzM1MywgOTM1OCwgMCwgNzEzNjYsIDY2NjgwLCAKLSAgICAxMjAwOTAsIDgyNDgsIDc5MzEsIDg1NTgsIDk3OTUsIDY4MzgwLCA5ODMyODksIDAsIDEyMDA4MiwgMTIwMDgxLCAxMjAwODQsIAorICAgIDEyMDA5MCwgODI0OCwgNzkzMSwgODU1OCwgOTc5NSwgNjgzODAsIDk4MzI5NywgMCwgMTIwMDgyLCAxMjAwODEsIDEyMDA4NCwgCiAgICAgNDEwMjcsIDEyMDA4NiwgMCwgMTIwMDg4LCA3MzY2LCA3MDE5LCAxMjAwNzMsIDAsIDExNzUxLCAxMjAwNzgsIDc4Mjk0LCAKICAgICA2NDY1NywgODY1NywgMTIwMDQ4LCA4NTk0LCAxMjAwNjgsIDAsIDAsIDEyMDA2OSwgMTIwMDcyLCAxMjAwNzEsIDAsIDAsIAogICAgIDQzMTU0LCA0MTAyOSwgMCwgMTEzMzIsIDY1MzgwLCA3NzI4LCA5NDA3NywgMTEyOTQsIDAsIDY2NjY1LCA3ODUxLCAwLCAKLSAgICA4Mzc1LCA4Njk5LCAwLCA0MjUyNCwgMCwgOTA4NSwgOTQwNDEsIDc1MDQsIDkzMjcsIDYxNjAsIDEyODA5NSwgOTgzODU1LCAKKyAgICA4Mzc1LCA4Njk5LCAwLCA0MjUyNCwgMCwgOTA4NSwgOTQwNDEsIDc1MDQsIDkzMjcsIDYxNjAsIDEyODA5NSwgOTgzODY0LCAKICAgICAwLCA4MDg4LCAwLCA3NDAxMiwgOTI1MDAsIDAsIDQ0MzksIDY5MjYsIDk4MzA0NywgMTI5MjQsIDEyODIyNywgNDIzNjksIAotICAgIDQzNTAsIDY1NDkxLCA2NTE0NSwgOTA0MSwgNDM1NTksIDY0NTc3LCAxMDgyNiwgMCwgMTEyOTYsIDk4MzI3NSwgMCwgMCwgCisgICAgNDM1MCwgNjU0OTEsIDY1MTQ1LCA5MDQxLCA0MzU1OSwgNjQ1NzcsIDEwODI2LCAwLCAxMTI5NiwgOTgzMjgzLCAwLCAwLCAKICAgICA2NTgyNSwgOTU3NywgNjgxOTksIDAsIDY0NjcwLCA5ODMxMjEsIDc4MDU2LCA2NzkzLCAxMTI5NSwgMCwgNzgwNTMsIAogICAgIDczODcyLCAwLCAwLCAxMDkwMiwgMCwgMCwgNzgwNzAsIDc4MDY4LCAxMDQ3MiwgMjk5NSwgMCwgMCwgNjQ2ODIsIDIzNzEsIAogICAgIDc4MDY5LCAxMjA4MDgsIDI1OSwgMTAwOSwgOTIxNzEsIDI0MDIsIDIzMzMsIDY0NDAsIDE5NDc0MSwgMCwgNjUxMjUsIApAQCAtMTgwMTAsMTkgKzE4MDI5LDE5IEBACiAgICAgMTI3MDcwLCA0MTI2MSwgMTE5MzYyLCA0MzY0MCwgODYxMywgMCwgOTQwNDksIDY3MzYsIDE5NTA5MiwgNDE0OTIsIDEyMDA1LCAKICAgICA2OTkyNywgMCwgMTg5MCwgMTIwMDU2LCAwLCAwLCAwLCA3MjkzLCA3OTkxLCAwLCAxMDU3OCwgMCwgNzgwNzYsIDE5NDczOCwgCiAgICAgNzgwNzcsIDY5OTI4LCAwLCA3ODgwMCwgOTI2NTMsIDY0NDQ1LCA0MjY2OCwgNjYzNSwgMCwgNjE2NCwgNjUxNzAsIDAsIDAsIAotICAgIDc2NzYsIDExNjY0LCAwLCA5ODM2NDksIDY5NzA3LCAwLCAxMTg4MTIsIDAsIDAsIDEyODA0NSwgOTE3NSwgMTE5MjUsIAorICAgIDc2NzYsIDExNjY0LCAwLCA5ODM2NTgsIDY5NzA3LCAwLCAxMTg4MTIsIDAsIDAsIDEyODA0NSwgOTE3NSwgMTE5MjUsIAogICAgIDc4MDQ1LCA5MDg4LCAwLCA2NDU0NSwgMTM5NiwgMCwgNzU0NiwgMzg0NywgMTI3MTc3LCAxMjc4MzUsIDQ5ODUsIDEzMjg4LCAKICAgICA2NzIsIDgwOTgsIDQzMTk2LCAxOTQ3NDYsIDk4MzA5NiwgMTI4MTI2LCA0MjY1NSwgNzQwNDMsIDY1MDcyLCAxNTc3LCAKICAgICAxMTc3MiwgMTMwNDEsIDU5MjgsIDQ1MjUsIDEwNjU4LCA2NTkxMSwgMTI2NiwgMTAxODAsIDAsIDEyODU4NCwgMTI2MjIsIDAsIAogICAgIDAsIDAsIDE5NDcxNCwgMTI3MTM5LCAxMzMxMCwgNzczLCAxOTkzMywgMTUzOSwgMCwgMTI2OTgzLCA0MjczMSwgNjc5NzIsIAogICAgIDAsIDAsIDAsIDMwNTEsIDU4NjIsIDc4MjMsIDkyNDc4LCAwLCAxMjA0MTEsIDMyNTAsIDQzOTkxLCA2OTY4NywgNjY2NDksIAotICAgIDk1MTAsIDY2MjM3LCA5ODMyOTQsIDAsIDQxMDY2LCA2NDY3MywgOTE3OTYzLCA5MTc5NjQsIDAsIDM1MDUsIDg3MDcsIAorICAgIDk1MTAsIDY2MjM3LCA5ODMzMDIsIDAsIDQxMDY2LCA2NDY3MywgOTE3OTYzLCA5MTc5NjQsIDAsIDM1MDUsIDg3MDcsIAogICAgIDkxNzk2OCwgNjcyNSwgMTI4MDEzLCA5MTc5NzEsIDkyMzE0LCAzNDcxLCA5MTc5NzAsIDU0NzksIDg4MiwgNjY4NiwgCi0gICAgMTE5NTg0LCAxMTYxMywgMTIwNzcyLCA0Mjc1NCwgMCwgOTgzMjk4LCA5MjY5NiwgMCwgMCwgMCwgMTI4NTIzLCAzMjI1LCAKKyAgICAxMTk1ODQsIDExNjEzLCAxMjA3NzIsIDQyNzU0LCAwLCA5ODMzMDYsIDkyNjk2LCAwLCAwLCAwLCAxMjg1MjMsIDMyMjUsIAogICAgIDkxNzk5NiwgNDQzMywgNDExNTYsIDQzOTczLCA0MzE3MywgMTQ0MywgNDM4MSwgMCwgMCwgMTA5MjYsIDExNzU2LCAxMTc1NywgCiAgICAgNjQ4NzksIDkxNzk0OSwgOTE3OTUwLCAxMjc4NDgsIDEzMjI3LCAwLCAxMDAyMSwgNTE2MCwgMTM4NywgMCwgOTE3OTUzLCAKICAgICA0MTQxOCwgMCwgNjU5MTQsIDY3MjEsIDIxNywgOTE3OTU1LCA5MTc5NjAsIDkxNzk2MSwgMTA0NDMsIDEwNzg5LCA0MTE1OCwgCi0gICAgMTE5MjU3LCA0Mjc0LCA5ODMyOTIsIDQxNDgzLCAwLCA0MTI1MCwgMCwgNDIxNzksIDAsIDU5MzEsIDExNzQ0LCA2OTIzMiwgCisgICAgMTE5MjU3LCA0Mjc0LCA5ODMzMDAsIDQxNDgzLCAwLCA0MTI1MCwgMCwgNDIxNzksIDAsIDU5MzEsIDExNzQ0LCA2OTIzMiwgCiAgICAgMCwgNDEyNTIsIDY2NjgyLCAwLCAxMTk2MzcsIDQxMjQ5LCAxMzY2LCA2NDYzNSwgNjUwNDcsIDEyNDY2LCAwLCAwLCA0Mzk3LCAKICAgICAxMjgwMzcsIDEyODMzNiwgNDEyOTYsIDk1NDUsIDQxMjkxLCAxMjgwNDksIDAsIDQxNDg1LCAzNTExLCA0MTI4MiwgNTkyMywgCiAgICAgMTA0MDAsIDAsIDEyODgxOCwgNzYwLCAwLCAxMjA4OCwgNTc4NiwgMCwgNDIyNTYsIDExOTg2OSwgMTE5ODYwLCA0MTcsIApAQCAtMTgwMzIsMTUgKzE4MDUxLDE1IEBACiAgICAgMTE5NTc2LCAwLCAwLCAxMzc1LCA2NjcwNSwgNDM1NzMsIDY1MjYwLCA0MjA2MywgMCwgNDI4MTEsIDEwMzEyLCA2OTg0NSwgCiAgICAgMTIwNzk0LCA3ODQwLCAwLCA0MzYzMCwgMTAyNTIsIDAsIDEyODEwNCwgNDMxODUsIDAsIDQzOTYsIDAsIDExOTg4MCwgCiAgICAgMTA3NjksIDk2NzYsIDExOTA0MSwgMCwgOTc1MywgMCwgODk0NCwgMCwgMCwgMTA0NzMsIDAsIDAsIDYwNzIsIDQzMDI1LCAKLSAgICAxMDI5OSwgMCwgMCwgMTIwNjA4LCA2NjMyNiwgOTgzNDM5LCAxMjc3OTQsIDAsIDQzODExLCA5MzMwLCAxMjA1OTYsIDcyMjIsIAotICAgIDEwMjgzLCAxMDMxNSwgMTAzNzksIDQ5OTYsIDk4Mzc3MywgMTMyODEsIDY2NTE3LCA3ODY1LCAxMDA4NywgNzgzNDMsIDAsIAorICAgIDEwMjk5LCAwLCAwLCAxMjA2MDgsIDY2MzI2LCA5ODM0NDcsIDEyNzc5NCwgMCwgNDM4MTEsIDkzMzAsIDEyMDU5NiwgNzIyMiwgCisgICAgMTAyODMsIDEwMzE1LCAxMDM3OSwgNDk5NiwgOTgzNzgyLCAxMzI4MSwgNjY1MTcsIDc4NjUsIDEwMDg3LCA3ODM0MywgMCwgCiAgICAgNzgzNDcsIDAsIDAsIDc1NjUsIDY2MzYzLCAxMjk1MiwgNjQ4MDYsIDQzMTgwLCA3NzkyOCwgNzQxNCwgNzc5MjksIDQzOTgyLCAKICAgICA3NDI4OCwgNjIyLCA3NDAyMywgODg1LCA0MzQwNSwgMTYwMiwgMCwgMCwgODUyLCAwLCAxMjE2MCwgMCwgMTAyMTIsIAogICAgIDY1NDM1LCAwLCAxMjA3MSwgOTYwOSwgMTIxNTYsIDkxNzk4MywgOTE3OTg0LCA0MzU4NiwgMTEwMzUsIDEwNDExLCAKICAgICA5MTc5ODgsIDEwMjU1LCA2NzEwLCAxMDI3OSwgNDE5NCwgMTAzNzUsIDczOTAwLCAwLCA0MzE1LCAxMjY0NCwgMTI3NTE2LCAKICAgICA3NzkzNywgNDM2MzksIDQzMzQzLCA3ODc3NywgOTE3OTk4LCAxMTUwMSwgNDExNzcsIDEyODY4OSwgMCwgOTE3NzkyLCAwLCAKICAgICA5MjQxMywgODcxNSwgMCwgNDExNzksIDAsIDQzMzEzLCAwLCA0MTE3NiwgMCwgOTk0LCAwLCA4NDUyLCAxMjcxMDMsIAotICAgIDczOTY2LCAwLCAwLCA1OTIxLCAwLCAyNTk3LCAwLCA1OTIyLCAxMTg5MDMsIDc3OTQzLCA0MTg2LCA5MjUzMSwgMTI3MTA2LCAKKyAgICA3Mzk2NiwgMCwgMCwgNTkyMSwgMCwgMjU5NywgMCwgNTkyMiwgMTE4OTAzLCA3Nzk0MywgNDE4NiwgOTI1MzEsIDExOTk2NywgCiAgICAgMTI3MTA1LCA2NzE4LCAwLCA0NDA2LCA3NDYwMSwgODQ4MCwgOTE5MiwgOTc0NywgMTI2NTMwLCA0NDEzLCA5MjE5NiwgCiAgICAgNDIyNjgsIDMxOTgsIDU5MjQsIDU5MjAsIDkyNDY5LCA2OTIxLCA3ODA4MSwgNzQwMDcsIDQyODY5LCA4NDE4LCAxMTY4MSwgCiAgICAgNDMxNjksIDEwMTc2LCAwLCA3NDIsIDAsIDI4OTMsIDEwNzcyLCA2NTI3NiwgNTkzNywgMTkxNCwgMjU1MywgMTE2ODIsIApAQCAtMTgwNjMsNyArMTgwODIsNyBAQAogICAgIDc4MzAsIDExNjUxLCAxMzA5MywgNjQwMDIsIDAsIDY1NzQyLCAxMjg3NCwgMTE5NTk3LCAxMTU5MCwgMCwgNzQwNDgsIAogICAgIDEyODM1MCwgODU5NSwgMCwgOTE3OTQ3LCA0MzcwMywgMTMwOTcsIDAsIDY0NjQzLCAxMzI4MywgMTI2OTcsIDAsIDEyMzgxLCAKICAgICAzNDg4LCA1OTMzLCAxMDAzMywgNzM3MzgsIDY2MjQxLCA2NTU3MCwgMCwgMTIyOTcsIDExOTE1MywgMTk1NSwgMCwgNTM0OSwgCi0gICAgNDI1MzgsIDAsIDAsIDc0MTEsIDk0NjIsIDkxNzU1NCwgMCwgMCwgMCwgNDI3MzYsIDAsIDU3NTYsIDk4MzIxOSwgNzYzOCwgCisgICAgNDI1MzgsIDAsIDAsIDc0MTEsIDk0NjIsIDkxNzU1NCwgMCwgMCwgMCwgNDI3MzYsIDAsIDU3NTYsIDk4MzIyMSwgNzYzOCwgCiAgICAgNDE2NDIsIDQyNzY0LCAwLCA0MzEwOSwgNzYzNywgNTc1MiwgNzQwMzcsIDAsIDczODMyLCAxMjg4MjcsIDEyMDYzNSwgCiAgICAgMTI4MjMxLCA3ODMzNCwgMCwgNzYzNiwgNjUxNzEsIDkxMjQsIDAsIDc4ODkyLCAxMjA3OTgsIDI5MSwgMCwgMCwgMjAyNywgCiAgICAgNjYyMzAsIDEwMDgwLCA3ODEzNiwgMTA0MDMsIDAsIDQ2NDAsIDY0NzEzLCAxMDIyNCwgMTIwNDI5LCA0MjUxMiwgMTIwNDMxLCAKQEAgLTE4MDc1LDE3ICsxODA5NCwxNyBAQAogICAgIDc4MjcwLCAxMjc5ODIsIDk4MzE3MiwgNjQ3MjgsIDAsIDc4NjczLCA3ODY3NCwgMTY1OSwgOTE5LCA0Mjc4NCwgMTY3MSwgCiAgICAgMTk1MDg5LCA2MDY5LCA5MjE5LCAxMjg1NTgsIDE2NjEsIDEzMTIwLCA2Mzc4NCwgNjk4MTksIDEwMTQwLCA5NzEzLCAKICAgICAxMTkxNDMsIDAsIDAsIDk0MDUwLCAyMzA2LCAxMDQ4NSwgMTE4OTQzLCA2MDY4LCAxMDYxMiwgMTk1MDk5LCAxMTk1NjcsIAotICAgIDE5NTEwMSwgOTI1NjEsIDQxNDYyLCAxMjA0NzAsIDE5NTA3OSwgNTQyMiwgMTI4MjM0LCAwLCAwLCAwLCAxMDIyOSwgCisgICAgMTk1MTAxLCA5MjU2MSwgNDE0NjIsIDEyMDQ3MCwgMTk1MDc5LCA1NDIyLCAxMjgyMzQsIDk4MzYyOSwgMCwgMCwgMTAyMjksIAogICAgIDEwNjM1LCA4MjYsIDEyODA4MSwgMTk1MDgyLCAxOTUwODUsIDE5NTA4NCwgMTk1MDg3LCA2NDgzLCA5MjIxMSwgMTgwOCwgCiAgICAgNzg0OCwgMCwgODEwMCwgNzgyMjcsIDc4NjY5LCA3ODY3MCwgMTMzMDEsIDc4NjY3LCA5NjY3LCA3ODY2NSwgNzg4NzIsIDAsIAogICAgIDExMDAzLCA5OTA0LCAwLCAwLCAxMjA2OTAsIDkxNDQsIDEwOTIxLCAwLCA3ODY4MCwgOTg0MCwgNjUxMzEsIDc4Njc4LCAKICAgICA3Nzg0MSwgMTAzMTMsIDAsIDAsIDY0MzIwLCAxMDI2NSwgNzg2ODYsIDEwOTYyLCA3ODY4NCwgNDMwMDgsIDg5NDUsIAogICAgIDc4NjgzLCAwLCA0MSwgMTk1MDcyLCAxNzkyLCAxMjA1MTUsIDE5NTA3MywgODY1NSwgMTk1MDc1LCA5MjU0NCwgNzc5NTEsIAotICAgIDEyMDY2LCAwLCAzODUsIDQxNTIsIDI1ODUsIDEyNzgwNCwgMTE5MDY4LCAzMTI2LCAwLCA3NDEzNiwgMTA5NTcsIDk4MzY5NCwgCisgICAgMTIwNjYsIDAsIDM4NSwgNDE1MiwgMjU4NSwgMTI3ODA0LCAxMTkwNjgsIDMxMjYsIDAsIDc0MTM2LCAxMDk1NywgOTgzNzAzLCAKICAgICA0MzI1OCwgMTE5MTE2LCAxMjc4NzMsIDEzMTU3LCAwLCA5MTc1NDQsIDM1NzAsIDAsIDc0NDMsIDAsIDQ0MDA2LCA2OTk3LCAKICAgICA2ODAwNCwgMTI2NjMxLCA3ODc5LCA4NzM5LCAxMTA3NSwgMCwgNjUyMTYsIDAsIDY5Nzk1LCAyNTkzLCA4NDYzLCA3ODEwLCAKICAgICA5MTc4NjIsIDc4MzksIDExOTkxMywgNzg4MDYsIDExOTkxMiwgOTY5MSwgNDQxMSwgNzg4MDIsIDAsIDAsIDQzNDQyLCAKLSAgICA2OTg1MSwgNjUyNTQsIDEwMDY2LCA5ODM4ODAsIDAsIDAsIDAsIDEzMDYxLCA4MDE2LCA3ODY4NywgMTk5MzIsIDY0ODMxLCAKKyAgICA2OTg1MSwgNjUyNTQsIDEwMDY2LCA5ODM4ODksIDAsIDAsIDAsIDEzMDYxLCA4MDE2LCA3ODY4NywgMTk5MzIsIDY0ODMxLCAKICAgICAwLCAxMTk5MjMsIDEyMzkwLCAxMTkxNzEsIDE2MzQsIDY4MTE1LCAwLCAxMTA1NiwgOTgzNTc0LCAxMTk5MjUsIDAsIAogICAgIDQxMTY1LCAxMTMyOCwgMTI0NTAsIDAsIDQxMTY2LCAwLCAxMjQ1NiwgMTE5OTE0LCAxNzEsIDU5NDEsIDEyNDUyLCAKICAgICAxOTQ3MDksIDEyNDU4LCAxMjUzMSwgNzg3NzksIDQzMDEzLCA2MzgwMCwgNzQxNjIsIDEyNzU2OSwgMTIwNDgzLCA5OTY5LCAKQEAgLTE4MTAwLDcgKzE4MTE5LDcgQEAKICAgICAxMzI0NCwgMTIwNDY2LCA0MjE2NywgNzQzNSwgNzgxOTMsIDUzODAsIDExOTA4NiwgNjkyMjUsIDExNTUsIDExMzY1LCAKICAgICA0MzEyNiwgNzc5NzIsIDAsIDY1Njg0LCAwLCA1NjAxLCA2NTE5MiwgNDI3NjUsIDYzNzUyLCAwLCA3OTg3LCAxMjg1NDMsIAogICAgIDExNzIsIDY5Nzk5LCA2Nzg2LCA0MzYwMSwgMTIwNDc2LCA3NDEyNiwgNTYwMywgMCwgNDQ3MywgMCwgMTk0ODIzLCAwLCAKLSAgICA2NTM0NywgNjUzNDYsIDY1MzQ1LCAwLCAxMjczODQsIDUzNDcsIDY5ODAyLCA5ODM2MjMsIDczODY4LCAxMTg5NDQsIAorICAgIDY1MzQ3LCA2NTM0NiwgNjUzNDUsIDAsIDEyNzM4NCwgNTM0NywgNjk4MDIsIDk4MzYzMiwgNzM4NjgsIDExODk0NCwgCiAgICAgMTA1ODgsIDAsIDAsIDYzNzU1LCAwLCA1MzQzLCA3ODQyMiwgMTIwNjYxLCA0NTU1LCA1MzQxLCAwLCA3MDA3MSwgMTI4NjcwLCAKICAgICA1MzUxLCA3ODY3NSwgNDMxMDQsIDY1MjQ0LCA5MTc4OTIsIDY0NTQxLCA0MjUxOSwgNzQ0NzIsIDAsIDAsIDc0NzY1LCAKICAgICA5MTc4ODgsIDEyNzUxMCwgNjYzOCwgMCwgNjUxMTMsIDI3MSwgNzQxODAsIDY1MzcwLCA4ODM1LCA2NTM2OCwgMTI2NTMsIApAQCAtMTgxMTAsMTQgKzE4MTI5LDE0IEBACiAgICAgMCwgNDkxNiwgMCwgMzgwLCAxMDk1OCwgNjY1NjMsIDc3OTU1LCA2OTc3MywgOTc3MywgMTMxNjcsIDEyOTE4LCA0MTA5NiwgCiAgICAgNzM5ODAsIDY5MjQ1LCA3ODI1NCwgOTE3ODkzLCAxMDY4NCwgMCwgOTE3ODk2LCAwLCA3OTQ2LCAxMjU0MSwgODE4MiwgCiAgICAgNjc1ODYsIDY5NzgwLCAwLCAwLCAwLCAwLCA5MDA1LCAxMjI1LCA2NjMwLCAwLCAwLCAwLCA2ODAxMSwgODg0NywgMCwgCi0gICAgNjU4NzYsIDU1MzUsIDgzMjksIDc0NTkwLCA5ODMyMDYsIDkyNjA5LCAwLCAwLCAzMTI3LCAyNTk1LCA2NTcxMywgNDIwMTMsIAotICAgIDk4Mzg0OSwgNTYwNywgNDEwODksIDAsIDAsIDc0MjU2LCAyNjY1LCAxMTMwNCwgNDM3NTEsIDc0MjAwLCA0OTcwLCA4NzY0LCAKKyAgICA2NTg3NiwgNTUzNSwgODMyOSwgNzQ1OTAsIDk4MzIwOCwgOTI2MDksIDAsIDAsIDMxMjcsIDI1OTUsIDY1NzEzLCA0MjAxMywgCisgICAgOTgzODU4LCA1NjA3LCA0MTA4OSwgMCwgMCwgNzQyNTYsIDI2NjUsIDExMzA0LCA0Mzc1MSwgNzQyMDAsIDQ5NzAsIDg3NjQsIAogICAgIDEyMDQ1OSwgODkzNCwgOTI3MjYsIDQxNTY2LCA0NDkyLCAwLCA2NTAxMSwgNDEwOTAsIDAsIDAsIDExODgsIDcyNTQsIAogICAgIDExMDAsIDAsIDEyODMwMSwgNDEwODEsIDI5MTIsIDExNzQ5LCA2OTc5MiwgMCwgNjgwMTksIDM1NzIsIDEwMDIzLCA0OTU5LCAKLSAgICAxMzA3OSwgMCwgOTgzMjY4LCA5NzI5LCAwLCAwLCAwLCA0MzM2MSwgMCwgMCwgMTE4MDMsIDc5OTYsIDk5MDcsIDQxNDUwLCAKLSAgICAxMzMwNCwgMTI4MjkwLCAxMjcyNjAsIDQxNDUxLCAwLCAxMTA5NSwgODI3MywgMTI3NTMzLCAzNDUxLCA5ODMzMDEsIDk3MiwgCi0gICAgNDE0NTMsIDk4MzQzNCwgMCwgNzM4ODMsIDY4MDIyLCA3Mzk0NSwgOTgzNzI2LCAyMjg4LCAxOTk1NSwgOTUzOCwgMCwgCi0gICAgNjk4MDcsIDAsIDAsIDAsIDAsIDExMzk2LCA5ODM0MzIsIDExMDE5LCAwLCAwLCAwLCA2ODAyMCwgNDEwNzgsIDcxMzY1LCAKKyAgICAxMzA3OSwgMCwgOTgzMjc2LCA5NzI5LCAwLCAwLCAwLCA0MzM2MSwgMCwgMCwgMTE4MDMsIDc5OTYsIDk5MDcsIDQxNDUwLCAKKyAgICAxMzMwNCwgMTI4MjkwLCAxMjcyNjAsIDQxNDUxLCAwLCAxMTA5NSwgODI3MywgMTI3NTMzLCAzNDUxLCA5ODMzMDksIDk3MiwgCisgICAgNDE0NTMsIDk4MzQ0MiwgMCwgNzM4ODMsIDY4MDIyLCA3Mzk0NSwgOTgzNzM1LCAyMjg4LCAxOTk1NSwgOTUzOCwgMCwgCisgICAgNjk4MDcsIDAsIDAsIDAsIDAsIDExMzk2LCA5ODM0NDAsIDExMDE5LCAwLCAwLCAwLCA2ODAyMCwgNDEwNzgsIDcxMzY1LCAKICAgICAyNjEsIDU5MjcsIDc3OTEsIDAsIDczNjIsIDAsIDEwNjk2LCAwLCA2MDczLCA5ODM4LCAxMTg5MjAsIDAsIDYwNzUsIAogICAgIDkzOTk1LCAyODIsIDEyNjUxMCwgNjQzNywgNzQwNzgsIDEyODAwMCwgOTgwMSwgMCwgNzQxNzcsIDAsIDAsIDM0NzQsIAogICAgIDExODc4NywgMCwgMTIwNjU1LCA2MDgxLCAwLCA3ODg3NCwgNzQwNzYsIDc4ODc5LCAwLCAwLCAwLCAwLCAwLCA4NzUxLCAKQEAgLTE4MTM4LDcgKzE4MTU3LDcgQEAKICAgICA0NTY0LCAwLCAwLCA3NDI3MSwgNzM3NTMsIDgzNzQsIDk4MzE1NiwgMCwgNjgyOSwgNTIyNSwgMTI4ODA3LCAxMjczODUsIDAsIAogICAgIDAsIDExOTYxNSwgMCwgNzQ3OTMsIDU2MjYsIDczODA3LCAxMTc3MSwgNzQwNzUsIDEyNzIzNiwgMTI4MDE5LCA0MjYxNCwgCiAgICAgNTM1MywgNTYyNSwgNzQxNzksIDAsIDAsIDEwMTAsIDY0NTcyLCA0MTc4MCwgNDI2MjMsIDY0Mjc3LCA2OTk0MiwgNjk1MiwgCi0gICAgOTgzMjY0LCAxMjA3NTIsIDc4NzYyLCAyNTkwLCA1NjI5LCA2NTU1MiwgNzU1MSwgMTAzMjUsIDU2MzIsIDEwNDcxLCAKKyAgICA5ODMyNzIsIDEyMDc1MiwgNzg3NjIsIDI1OTAsIDU2MjksIDY1NTUyLCA3NTUxLCAxMDMyNSwgNTYzMiwgMTA0NzEsIAogICAgIDEyMDAzOCwgMTIwMDI3LCAxMjAwMjgsIDEyMDAyNSwgNTYyOCwgMTIwMDMxLCA5NzAsIDEyMDAyOSwgNDc3MiwgMjQwMCwgCiAgICAgNTYyNywgMTIwMDE3LCAxMjAwMTgsIDEyMDAyMywgNjQyNzUsIDEyMDAyMSwgODc4NiwgMCwgMjAzLCAwLCAwLCAwLCAwLCAKICAgICA3ODM1MCwgMCwgNjQzNzgsIDQyMDU0LCAwLCAwLCA1NTQsIDExOTY0OSwgMTEzNTgsIDAsIDEyMTgyLCA0MjA0OCwgMTEwNjUsIApAQCAtMTgxNTAsOSArMTgxNjksOSBAQAogICAgIDExNjgsIDkyNTEsIDkwODIsIDExOTk2NCwgNjQwNTUsIDQyNzgxLCAzODY2LCAxMjMyMywgNDE1MTIsIDczODA1LCA2ODEyMSwgCiAgICAgMCwgNDE0OTQsIDkyMzE2LCA0NjYwLCAwLCAxMDQwNSwgMCwgNzg4MDMsIDAsIDAsIDQyMDQwLCA3MzkxOCwgMTE5NjI3LCAKICAgICA3OTQ0LCA0MTQ1NCwgMTI2MDUsIDAsIDQyMjA1LCA0MTQ1NSwgMjM2LCA2NDA1MSwgNzg4NjcsIDgyMTQsIDAsIDAsIDAsIAotICAgIDQxNDU3LCA5ODM5NjEsIDExOTU4OSwgMTk2OSwgMjM4NCwgODA5NywgOTE3ODY0LCA3NDEzLCA2ODAxMiwgNzgwMjksIAorICAgIDQxNDU3LCA5ODM5NzAsIDExOTU4OSwgMTk2OSwgMjM4NCwgODA5NywgOTE3ODY0LCA3NDEzLCA2ODAxMiwgNzgwMjksIAogICAgIDg3NjYsIDAsIDc4MDc5LCA1ODU0LCAxMjc5NzQsIDEwNTgzLCAwLCAxMTk5ODksIDAsIDEwNDE2LCA5MTc4NjksIDM4NzIsIAotICAgIDkxNzg2OCwgMCwgODQyOSwgMCwgMTE4ODA2LCAyODM4LCAxMjg4MDIsIDAsIDkxNzg2NiwgMCwgMCwgMCwgOTgzOTU4LCAKKyAgICA5MTc4NjgsIDAsIDg0MjksIDAsIDExODgwNiwgMjgzOCwgMTI4ODAyLCAwLCA5MTc4NjYsIDAsIDAsIDAsIDk4Mzk2NywgCiAgICAgOTQwMDUsIDExMDk2LCAxMjA4MTMsIDEwNTUzLCAxNjYyLCA4NDgzLCAxMjAzOTYsIDQzNjA1LCA1ODkyLCA0MzQxOCwgMCwgCiAgICAgNzM3NDIsIDY2LCA2NSwgNjgsIDY3LCA3MCwgNjksIDcyLCA3MSwgNzQsIDczLCA3NiwgNzUsIDc4LCA3NywgODAsIDc5LCAKICAgICA4MiwgODEsIDg0LCA4MywgODYsIDg1LCA4OCwgODcsIDkwLCA4OSwgMTE5ODYyLCAxMDM1NywgNzM4NSwgODE3MCwgMTcwNCwgCkBAIC0xODE2Nyw3ICsxODE4Niw3IEBACiAgICAgMTI0NzIsIDAsIDY5ODY0LCA3Njk5LCAxMjM5MywgMCwgMCwgMCwgNzQ1MTgsIDgyMjMsIDAsIDQyNjEsIDAsIDAsIDAsIDAsIAogICAgIDAsIDEyODMwMiwgMCwgMTI4MDQ2LCA0MzQxOSwgMCwgNjQ1NTQsIDEwNTc0LCAzODc4LCAwLCA0MjM1MiwgMTc1MiwgCiAgICAgNzM3ODUsIDAsIDQyNTA2LCAxMjg1NDEsIDEwMTk5LCAwLCAwLCA2ODAyMSwgNjU5MTksIDAsIDY2OTUsIDcyMCwgMzI0LCAwLCAKLSAgICAwLCA0MzQwNiwgOTgzNzI3LCAxNDY0LCA0MDk4NSwgMCwgNzk3NCwgMCwgNDM0NzQsIDAsIDY0NDg4LCAwLCAwLCA2NDA0MSwgCisgICAgMCwgNDM0MDYsIDk4MzczNiwgMTQ2NCwgNDA5ODUsIDAsIDc5NzQsIDAsIDQzNDc0LCAwLCA2NDQ4OCwgMCwgMCwgNjQwNDEsIAogICAgIDc0Nzg3LCAwLCA3ODg2NSwgOTIyNTgsIDY1NTk3LCAwLCA3ODg2MywgMCwgMTMwMiwgMCwgNzg4NjEsIDExOTEzNCwgMCwgMCwgCiAgICAgNTIwNCwgNzQ3NzQsIDQzNDA0LCAxMTgzNSwgMCwgMzk5NSwgNjgzNjAsIDY1NjA4LCAzNzE0LCA5MjE5MCwgMCwgMCwgCiAgICAgMTA5OTksIDExNzUwLCAwLCA0MzI1MSwgNjg2NjAsIDQzMzAxLCAwLCAxMjA1NTcsIDgxMzAsIDg2NzIsIDEwODQ1LCAKQEAgLTE4MTc1LDIyICsxODE5NCwyMiBAQAogICAgIDYxMiwgMCwgNjQ0MDEsIDY2NDQ4LCA2ODM3NiwgMCwgMTY3NCwgMCwgNTgyMywgOTgzMTYzLCAxMjI4MCwgMCwgNTQwLCAKICAgICA3NDU2NCwgMTE5MDE3LCAwLCA4NDMyLCAwLCAxMTA3MywgMCwgNjQzMTYsIDAsIDAsIDgyMCwgNDE3NDEsIDAsIDEyMDY2NywgCiAgICAgMCwgNjQ2ODQsIDEyNjk5MiwgMzM1OSwgNzgwMCwgNjk5MzQsIDY1MTc3LCA2MjI2LCAzNTMsIDEyMzk2LCAwLCAxMTk2MTIsIAotICAgIDY0NzQyLCAxMjg2ODIsIDEyMDI4MiwgMCwgOTgzNDQyLCAxMjQxMiwgMTk5NDEsIDAsIDEyMDI3NywgNzg4NDcsIDE4ODQsIAorICAgIDY0NzQyLCAxMjg2ODIsIDEyMDI4MiwgMCwgOTgzNDUwLCAxMjQxMiwgMTk5NDEsIDAsIDEyMDI3NywgNzg4NDcsIDE4ODQsIAogICAgIDk0ODEsIDQyNDE4LCA3MDA1OSwgNDExNTcsIDAsIDExOTUsIDY0ODk4LCA3OTI0LCAwLCA0MTE1MSwgMjAxMCwgMCwgCiAgICAgNDEzMjgsIDQyMzQ0LCAwLCAxMjQwOSwgMCwgNDM2MCwgMTI3MDA5LCA5NzM5LCAxMjg1NTAsIDY5OTMzLCA3MzkyMSwgMCwgCi0gICAgNDI1MjEsIDg1MzksIDk4MzcxNiwgMCwgMTE4OTg2LCAwLCA0Nzg4LCAwLCA2ODAyMywgNjU3MzQsIDk4MzQ0NywgNDM3OTAsIAorICAgIDQyNTIxLCA4NTM5LCA5ODM3MjUsIDAsIDExODk4NiwgMCwgNDc4OCwgMCwgNjgwMjMsIDY1NzM0LCA5ODM0NTUsIDQzNzkwLCAKICAgICAwLCAxMzA3NSwgNzQ0MjksIDk0MDYzLCA2NDU2OSwgNDM1MzIsIDEwODM3LCAyNDkyLCAxMjcxOTcsIDExODkwMSwgNjg2MzcsIAogICAgIDQxMTM2LCA0Mzc4NSwgMTE4MTMsIDk2NDksIDQxMTU0LCAxMTk2MTcsIDUxMjgsIDQwMzgsIDQxMTQzLCA2NTYwNCwgCiAgICAgNjQ4NTksIDQxNTkyLCA2NzcxLCAxNjQ4LCA1NDM1LCA5MTc4MzcsIDY3MzQsIDQxMzQzLCAxMTk4NDgsIDY1NDM5LCAKICAgICAxMjcwOSwgNjk4NiwgOTIzNjQsIDY4MDE1LCAwLCA0MTM0OSwgNzAwMjEsIDEyNTgxLCAxMDM3NCwgNTE3NSwgMCwgNzM4MDYsIAogICAgIDEwMjU0LCAwLCAxMDI3OCwgMTAyNjIsIDY5ODU4LCA0MTM0NiwgMCwgNjA3LCAwLCAxMTk4NTIsIDEyODg0NiwgMTI5MjMsIAogICAgIDEwMzE0LCAxMDI4MiwgNjU0NzcsIDEwMzc4LCAxMjAyOTcsIDQwOTc2LCA4MjY1LCAwLCAxMTk4MzQsIDQwOTc1LCA1ODQwLCAKLSAgICA0MjgzOCwgMCwgNDA5NzgsIDk4Mzg4OCwgMTE5ODQwLCAwLCA5ODMwNzEsIDAsIDY2NDQ0LCAxMDUzOCwgMCwgMjU1MCwgCisgICAgNDI4MzgsIDAsIDQwOTc4LCA5ODM4OTcsIDExOTg0MCwgMCwgOTgzMDcxLCAwLCA2NjQ0NCwgMTA1MzgsIDAsIDI1NTAsIAogICAgIDExOTgzNiwgNjc3OSwgMCwgMCwgMzUyNSwgNjgyNCwgMTE4ODg2LCAwLCAwLCA1NjE5LCA2NTgyMiwgMTI2NTY3LCAKICAgICAxOTQ4ODIsIDc0NTUsIDAsIDU2MTYsIDExNDg2LCA5NjU2LCAwLCAwLCAxMDcyNywgNTYxNSwgMCwgMTIwNTUxLCA0MjM4MCwgCiAgICAgNjQ4OTUsIDQzNjkzLCA2NjQ1MSwgODA4LCA1NDU1LCAxMTM0NywgMCwgMTAyNiwgNTYyMCwgMTk0ODg3LCAwLCAxMTM1MCwgCiAgICAgNTYxNywgMCwgOTIyNSwgNjQ2MzksIDEyNzA3MywgOTE0NSwgMTI4MDYwLCAxMzM4LCAxMjA1ODEsIDk4MzE1OCwgMTI3MzksIAotICAgIDQ2MDMsIDMwODQsIDk4MzE1NSwgOTI0ODQsIDk4NTgsIDYwMzcsIDAsIDM5NzQsIDc4MjEzLCAxMDI5MCwgOTgzNjk1LCAKKyAgICA0NjAzLCAzMDg0LCA5ODMxNTUsIDkyNDg0LCA5ODU4LCA2MDM3LCAwLCAzOTc0LCA3ODIxMywgMTAyOTAsIDk4MzcwNCwgCiAgICAgMzA4MywgMTAzMjIsIDAsIDAsIDAsIDQxMDM2LCAwLCAwLCA0MzMyMSwgNjU2MDYsIDAsIDQxMDMyLCA0MjM4OCwgMCwgCiAgICAgNjQ3MDAsIDEwMDExLCAxNDQ1LCA0MDk2MSwgMCwgMTE5MTA1LCAwLCA0MDk2MCwgMCwgMTk0ODkxLCAwLCA0MDk2MywgCiAgICAgNjQ5NTIsIDEwNDAyLCAwLCAwLCA5MjMwNCwgMTA2MDMsIDAsIDAsIDk4MzExMywgMCwgNjcxNCwgMTAwODMsIDEyNzA2OSwgCkBAIC0xODIwMiw5ICsxODIyMSw5IEBACiAgICAgNDE5NzYsIDk3MjAsIDkxNzYwNiwgMTE3NjcsIDQxOTcwLCAxOTQ1OTYsIDU4MzYsIDEyMzU4LCAwLCA0MzU1LCA5MDQ4LCAKICAgICAxMjE4MCwgNjUwMjcsIDY0NjgwLCAxMzAzOCwgNDM2OTksIDAsIDQxNDg4LCAxMjgwODcsIDg1MjcsIDE5NDkxNywgMTIzNjIsIAogICAgIDEyNDM1LCAxMjM2MCwgNDEwNTMsIDMyNjYsIDAsIDEyMzU2LCA4NjE2LCA0MTQ2NiwgMCwgOTI1ODgsIDExNDUwLCAwLCAKLSAgICAzNjM4LCAxMjM1NCwgMCwgMzIxNiwgMCwgMjM1OCwgOTI2MDYsIDg2MzMsIDAsIDk4MzczNiwgMTE5MTgyLCA2OTI0NCwgMCwgCisgICAgMzYzOCwgMTIzNTQsIDAsIDMyMTYsIDAsIDIzNTgsIDkyNjA2LCA4NjMzLCAwLCA5ODM3NDUsIDExOTE4MiwgNjkyNDQsIDAsIAogICAgIDAsIDExNzU5LCAxOTQ5MDMsIDYzNjgsIDc0ODIzLCAwLCA0MTQyMywgODA3OCwgMTA1MDQsIDEyNzU1OCwgNDE2OTgsIAotICAgIDQyMjM3LCAwLCA3MDAyLCA5ODM2NjksIDQxNDMwLCA0MjI2NywgNDEwNTEsIDQxNDg0LCAwLCAwLCA0MTA1MCwgNDE0NzMsIAorICAgIDQyMjM3LCAwLCA3MDAyLCA5ODM2NzgsIDQxNDMwLCA0MjI2NywgNDEwNTEsIDQxNDg0LCAwLCAwLCA0MTA1MCwgNDE0NzMsIAogICAgIDEwNDY2LCAxMzA5OSwgMCwgMCwgMCwgNjQzNSwgMCwgMTEzNjIsIDAsIDAsIDY1MzgyLCAwLCA0MTQyMCwgMCwgMzYyNSwgCiAgICAgNzgxNTcsIDQxNDA5LCAwLCA2OTYzOSwgMjA0MSwgOTE3OCwgOTY3MiwgNDE0MjcsIDQzNTQxLCA0MzMxNywgMCwgMCwgMCwgCiAgICAgNDE0MjQsIDkxNzU5OCwgMTIwNTQ2LCAwLCAxMjgyMTIsIDAsIDQxNDE3LCAxMjYxLCAwLCAwLCAxMjEwMiwgMTE5NjYyLCAKQEAgLTE4MjE0LDkgKzE4MjMzLDkgQEAKICAgICA0MTQ2MSwgMTI4ODIzLCAwLCAxMjc5MTIsIDAsIDg4MTksIDEyNjYzLCAwLCA0MTE4NCwgNzQwMTQsIDIzMiwgNzQ4MzUsIAogICAgIDEyMDY0NiwgOTE2OCwgNjU3ODYsIDAsIDAsIDAsIDkwOTQsIDAsIDExNzU4LCA2ODQyNSwgMCwgMTA2NCwgNDI0NjcsIAogICAgIDEyODA0NCwgMTAxMTUsIDE5OTI0LCA5MjcxMSwgMCwgNzg2MiwgNjQ1NTEsIDEzMjI0LCA4NTE2LCA0MTg2MiwgNjY2NTAsIAotICAgIDc1NjEsIDc4NjE4LCA2OTc5MywgMTg3OCwgMCwgOTgzMjYxLCAyOTExLCAwLCA0MTE3OCwgNTQyNywgNjQ4MjMsIDAsIDAsIAorICAgIDc1NjEsIDc4NjE4LCA2OTc5MywgMTg3OCwgMCwgOTgzMjY5LCAyOTExLCAwLCA0MTE3OCwgNTQyNywgNjQ4MjMsIDAsIDAsIAogICAgIDM3ODcsIDQxMTc0LCAwLCA0MTQ1OCwgMCwgNDE0NjMsIDQyNDEzLCAxMTI5MiwgMjQwNiwgNzc1LCAwLCA2NTU4NCwgCi0gICAgNjk5MjMsIDYwNzQsIDk2MTgsIDEyODY2OCwgOTgzOTQzLCA0MzQ0MCwgMCwgMTk0OTAxLCA0MTQzNiwgMzY1NiwgMCwgCisgICAgNjk5MjMsIDYwNzQsIDk2MTgsIDEyODY2OCwgOTgzOTUyLCA0MzQ0MCwgMCwgMTk0OTAxLCA0MTQzNiwgMzY1NiwgMCwgCiAgICAgMTIwNjAwLCA0MTQ1NiwgMCwgMTU5OSwgMTEzMzMsIDAsIDY3MDMsIDg1MTMsIDAsIDE2MTMsIDAsIDY4NDU2LCAxMjU5OCwgCiAgICAgOTgzMTkxLCAxMjA3MzQsIDc4NzQ1LCA3NDUwMCwgNDE0NjAsIDEwMTQ1LCAxMDU0MiwgOTkzNywgNzg3NDYsIDcwMDI5LCAKICAgICA5OTA1LCAwLCA2NTczMCwgMCwgMTIwMzc0LCA4NDI3LCAxMjAzNzUsIDU1MjQ2LCAxMjAzNzYsIDAsIDExNDk3LCA2NDY4NywgCkBAIC0xODIzNiwyMSArMTgyNTUsMjEgQEAKICAgICA0MTI4NywgOTI2MTAsIDAsIDAsIDQyMjE5LCAxMjgyNTcsIDAsIDQxOTg3LCA0MTY3NiwgOTgzMDU5LCAxMjA4MjMsIAogICAgIDk4MzE0NCwgNDE2NzAsIDAsIDkyNTkwLCAyNzk2LCA1NTI5MSwgMTE2ODMsIDk5MDIsIDc0NTIxLCA2Nzk4OCwgMTE0NTEsIAogICAgIDk4MzExMSwgMTI4ODIyLCA0MjYzMSwgMjM1OSwgMCwgNjc4NDQsIDc0MTY0LCA0MTIzOCwgNTQ4LCAxMTQwNSwgMTMxMzMsIAotICAgIDY0MzY4LCA5ODMyMzMsIDEyODc5NSwgMCwgMzk3LCA0MzYyMiwgNDIxMzksIDk1NDcsIDk1OTAsIDEyODIzOCwgMTYxNCwgCisgICAgNjQzNjgsIDk4MzIzOSwgMTI4Nzk1LCAwLCAzOTcsIDQzNjIyLCA0MjEzOSwgOTU0NywgOTU5MCwgMTI4MjM4LCAxNjE0LCAKICAgICA0MzY2MSwgNjQzNTYsIDY2MzA3LCA2NjUxLCAxMzU4LCAwLCA0MjgsIDk2MjAsIDE0NjYsIDc4MTEyLCAxMDk4MiwgCiAgICAgMTE4ODMxLCAxMzMzLCA3MTA0LCA0MDcsIDY0MjUsIDEyODgzNCwgNzQyNTMsIDAsIDAsIDAsIDU4MDQsIDExOTc2LCA4NTU0LCAKICAgICA5MjcyMSwgMCwgMCwgOTA1NywgNDIyOTQsIDQxMjE4LCAwLCAwLCA3ODEzNywgMTg4MywgMTA5NTIsIDgwNDgsIDc4MTQyLCAKLSAgICA0MTIyNSwgOTI2MjEsIDQyOTE1LCA5ODM2NjcsIDEyODY4NCwgMCwgNDQwNywgMCwgNjU4MDksIDExOTA3NCwgMTk0ODIxLCAKKyAgICA0MTIyNSwgOTI2MjEsIDQyOTE1LCA5ODM2NzYsIDEyODY4NCwgMCwgNDQwNywgMCwgNjU4MDksIDExOTA3NCwgMTk0ODIxLCAKICAgICA4NDQ4LCA3MTQxLCA3NDE4MywgMCwgMTI2NzUsIDEyNjU5LCAwLCA0MjM2MywgMTIwNjI0LCAxOTQ4MjQsIDU1MjczLCAKICAgICAxMDc2NiwgMTIwMTIsIDIzODYsIDY0NzMyLCA5MTcwLCA5MTc4MjEsIDkxMjMsIDY0NTg1LCAxMjA1MDAsIDExOTE1OCwgCiAgICAgNzE0MCwgMTA5NzcsIDEyNzM3OCwgNDE2NCwgOTA4MSwgMCwgMTIwNTY5LCA0MjA0OSwgNDIwNDIsIDg3MDksIDEyODI4MywgCiAgICAgMTI2NDc3LCAxMjA2MzcsIDQyNDE5LCA2NDc5OSwgNDIwNDcsIDAsIDAsIDg0NzAsIDExODA3LCA2NTg5NywgNTc3LCAwLCAKLSAgICA5ODM3NTEsIDc0MzAwLCAwLCAxMjczMDgsIDc0ODQwLCAwLCAwLCAxMjg3OTEsIDkyMjI0LCA4NzM2LCAxNDE0LCA0MjY0MywgCisgICAgOTgzNzYwLCA3NDMwMCwgMCwgMTI3MzA4LCA3NDg0MCwgMCwgMCwgMTI4NzkxLCA5MjIyNCwgODczNiwgMTQxNCwgNDI2NDMsIAogICAgIDk2ODMsIDQzNDg2LCA3NDM0NCwgMCwgMjUzNiwgMCwgNjYzMzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDY2MzE3LCA2OTk0NSwgCiAgICAgNjYzMTUsIDIxMDYsIDEyMDIyMiwgMTEyNzMsIDAsIDQzMDA0LCA3NTQxLCAwLCAwLCA5NjEsIDY0MzA3LCA2NjMyNCwgCiAgICAgNjQ5MDYsIDEyODU5MSwgMzEwNiwgNjU5MTcsIDQxMjg0LCAxNjk2LCAwLCA4OTEsIDEyMTA1LCAwLCA0MjYyNCwgMTI4MDIsIAogICAgIDMyNjQsIDg4MjQsIDEzMjY4LCA0MzAwMywgMTA5MzYsIDAsIDAsIDAsIDE5NDgyNiwgOTI2ODgsIDAsIDIzMjIsIDEyMDM3MSwgCi0gICAgOTgzNTg0LCAxMTQ0OSwgMTI4MTg3LCA0Mjg2OCwgNDEyODUsIDM1NDcsIDAsIDAsIDEyODc5MywgOTgzMzkwLCA0MzIxNiwgCisgICAgOTgzNTg0LCAxMTQ0OSwgMTI4MTg3LCA0Mjg2OCwgNDEyODUsIDM1NDcsIDAsIDAsIDEyODc5MywgOTgzMzk4LCA0MzIxNiwgCiAgICAgNjA4OSwgNzg2ODIsIDAsIDEyMDU3OCwgNDE3MCwgMTAyOSwgMTI3NzYxLCAxMjcwMzYsIDExOTIyNCwgNDIzNzQsIDAsIAogICAgIDc0NCwgMCwgMCwgMCwgNjU4MjMsIDEyNzgyNiwgMCwgMzU1MSwgMCwgMCwgNDYyMywgNTUyNjgsIDAsIDQ1OTgsIDk4MzE2MiwgCiAgICAgNjUxMzYsIDEyNzEzNiwgMCwgMCwgMTA4NTEsIDAsIDYxNzksIDkyNjAyLCA2MTgwLCAwLCAxMTk1MiwgMTIwNzc4LCAKQEAgLTE4MjYwLDEwICsxODI3OSwxMCBAQAogICAgIDIzMDgsIDAsIDc0MTQ5LCAwLCAyMzE4LCA5ODMxODMsIDY2MzYxLCA4MTk4LCAwLCA2NDM2MCwgMTI2MDEsIDQyNTM2LCAKICAgICA2NTI2NiwgMTIwODI3LCA3NDMwNywgOTI0NjIsIDY5NzAsIDU0MDQsIDQzMzMyLCAzNjY3LCA3OTM2LCAxMjkyNSwgCiAgICAgMTI2OTg5LCA2Mzg1LCAwLCAwLCAxMTg5NDksIDEwODc0LCA2NTUwNSwgMTI4MDgzLCAwLCA0MjA1MywgMjA3NSwgNDIwNTcsIAotICAgIDExMDgzLCA0MjA1MiwgMCwgMCwgNjc2NTEsIDAsIDk2NjUsIDkyMzAwLCA5ODM2NTcsIDEzMTgxLCAwLCAwLCAwLCA3MDA4OCwgCi0gICAgNzQxNDgsIDAsIDAsIDEyMDIyNSwgMTIwMjI5LCAxMjAyMjQsIDc0MTcyLCA0MTE0NSwgMCwgOTQwOTYsIDk4MzkzNywgCisgICAgMTEwODMsIDQyMDUyLCAwLCAwLCA2NzY1MSwgMCwgOTY2NSwgOTIzMDAsIDk4MzY2NiwgMTMxODEsIDAsIDAsIDAsIDcwMDg4LCAKKyAgICA3NDE0OCwgMCwgMCwgMTIwMjI1LCAxMjAyMjksIDEyMDIyNCwgNzQxNzIsIDQxMTQ1LCAwLCA5NDA5NiwgOTgzOTQ2LCAKICAgICA0MTE0OCwgODY4MywgNzU5NCwgMTI3NTE5LCAwLCAxMTkwOTAsIDEwODY5LCA0MzQ1OCwgNDExNDYsIDkyNDA3LCAxMTQ0MSwgCi0gICAgMCwgMzUxMiwgMTE5NjMzLCA5ODM3MDAsIDgxMDMsIDAsIDAsIDY1MTg0LCAxMTc4MCwgNDE1NjMsIDQyNzk2LCAwLCAKKyAgICAwLCAzNTEyLCAxMTk2MzMsIDk4MzcwOSwgODEwMywgMCwgMCwgNjUxODQsIDExNzgwLCA0MTU2MywgNDI3OTYsIDAsIAogICAgIDY5NzQyLCA0MTU0NCwgNjUxNDYsIDAsIDAsIDAsIDAsIDE5OTQyLCAwLCAxMTg5MDgsIDc5ODgsIDEwNDM2LCA3NDI3MywgCiAgICAgMzI3MSwgNzM4MDQsIDY0NzExLCAwLCA5NDA2NCwgMCwgMCwgMzgwNCwgMTMwNzAsIDExNTU3LCA0MjA0NCwgMCwgMTA5NSwgCiAgICAgMCwgMzU5OSwgMTI3Nzc0LCAwLCAxMjg4NjEsIDg1MTQsIDAsIDAsIDAsIDc0MzQ2LCA2NjY5NywgMCwgMTE2ODQsIDAsIApAQCAtMTgyNzIsMjMgKzE4MjkxLDIzIEBACiAgICAgMCwgMTI3NzcyLCAwLCA5MTc1NDIsIDAsIDAsIDY1MzksIDAsIDAsIDAsIDE5NDg1NiwgMCwgMTIwNDkyLCA0MTE5MCwgCiAgICAgMzk3MywgMTE5MzY1LCA0NTc1LCA0MTE5MywgNzk4MiwgNDI5LCAwLCAxMjcxOTQsIDAsIDE5NDg1NCwgNjU3OTIsIDAsIAogICAgIDExODk2OCwgNjQxNywgMTE4OTE4LCA3ODE3OCwgMCwgMTk0ODUwLCAwLCAwLCA0OTE5LCAxMDU5MCwgMTI4NTU2LCA3NzU1LCAKLSAgICAwLCAwLCA2NDU0OCwgMTIwNTA2LCAxNjIxLCAxMDIxNCwgNjUxMjYsIDAsIDEyNzAwNCwgMCwgMTIxODgsIDk4MzY1OSwgCisgICAgMCwgMCwgNjQ1NDgsIDEyMDUwNiwgMTYyMSwgMTAyMTQsIDY1MTI2LCAwLCAxMjcwMDQsIDAsIDEyMTg4LCA5ODM2NjgsIAogICAgIDE2MTcsIDgwNTAsIDAsIDUwMTUsIDAsIDExOTE3NCwgNDI1OTAsIDE5NDg3MSwgMTc1NiwgNzgxODEsIDAsIDY1NzY4LCAKICAgICA2MzUyLCA0MTg5MiwgMCwgNzU1NSwgMTMxMDMsIDU0MDgsIDI4MTcsIDEyMTQsIDY5OTE5LCA5MjMzNSwgOTgzMTI1LCAwLCAKICAgICAwLCAwLCAxMjcxOTUsIDc5NTcsIDg2ODksIDY0NzIzLCAxMDU2LCA0Mjg5NiwgNzQxNDcsIDE5NDgxMywgMCwgNTUyODYsIAotICAgIDcwNzMsIDY1ODUwLCAxMjMyNywgOTgzOTM5LCAxMTkwMjgsIDAsIDAsIDAsIDIzNDEsIDg0NTAsIDg0ODQsIDg0NzQsIAotICAgIDk4MzI1MiwgMCwgNzAwNzksIDg0NjEsIDEyODEwMiwgMTIxNTMsIDEyNzk5LCAwLCA0MzcwOSwgNDM3MDgsIDk0NTEsIAotICAgIDc1NzEsIDEzMDczLCAwLCAwLCA2ODEsIDk4MzI0NiwgNzAzLCAwLCAzMjcyLCA4NzgxLCAxMjg5NCwgNzAwNzcsIDExNzA5LCAKKyAgICA3MDczLCA2NTg1MCwgMTIzMjcsIDk4Mzk0OCwgMTE5MDI4LCAwLCAwLCAwLCAyMzQxLCA4NDUwLCA4NDg0LCA4NDc0LCAKKyAgICA5ODMyNjAsIDAsIDcwMDc5LCA4NDYxLCAxMjgxMDIsIDEyMTUzLCAxMjc5OSwgMCwgNDM3MDksIDQzNzA4LCA5NDUxLCAKKyAgICA3NTcxLCAxMzA3MywgMCwgMCwgNjgxLCA5ODMyNTIsIDcwMywgMCwgMzI3MiwgODc4MSwgMTI4OTQsIDcwMDc3LCAxMTcwOSwgCiAgICAgOTIyODgsIDc0NDQ2LCAwLCA5MjUzMiwgMCwgMTEzMzgsIDEyMDc2OCwgMzI3NiwgMCwgMCwgNjU5MjgsIDAsIDAsIDY1MDIxLCAKICAgICA2NDc5NSwgNzQ1NzQsIDAsIDEwMDQ3LCA3ODgxNCwgMzI2MiwgNzg4MTEsIDQyNzExLCAwLCAwLCA2ODQ3OCwgMTYzLCA1NzYsIAogICAgIDk4OTUsIDE2NTUsIDc4ODE3LCA3NDU5MSwgNzg4MTUsIDc4ODE2LCA5ODMxMjIsIDAsIDAsIDAsIDEwMDM5LCAwLCAKLSAgICA5ODM5MzYsIDU2MjMsIDU3MTcsIDU3NzYsIDAsIDAsIDAsIDQxNTkxLCAxMTAzNiwgNjUyNTIsIDkyMzgyLCAwLCAwLCAwLCAKKyAgICA5ODM5NDUsIDU2MjMsIDU3MTcsIDU3NzYsIDAsIDAsIDAsIDQxNTkxLCAxMTAzNiwgNjUyNTIsIDkyMzgyLCAwLCAwLCAwLCAKICAgICA2Nzg0OCwgMCwgMCwgMCwgODg4NywgMTI3NTIxLCA3Mjk1LCAxMTAzMSwgMCwgNDMxNTcsIDAsIDg5NDYsIDEwMzQ4LCAKLSAgICAxMDQxMiwgODc1NSwgMCwgMCwgNTcxOCwgMTMyMjEsIDAsIDAsIDc4MTM1LCAwLCA5ODM3MDIsIDg4MTAsIDc0NDk5LCA2ODYsIAorICAgIDEwNDEyLCA4NzU1LCAwLCAwLCA1NzE4LCAxMzIyMSwgMCwgMCwgNzgxMzUsIDAsIDk4MzcxMSwgODgxMCwgNzQ0OTksIDY4NiwgCiAgICAgMCwgNzEzNjIsIDQ2MTksIDExODk1NCwgNjY1NCwgNzM3NjksIDc0NDI2LCAwLCAxMjA0MCwgNjU2ODksIDEwMTI4LCAKLSAgICA2NTExOCwgMCwgMTE5MTUxLCA3NDIwNSwgOTI2NTEsIDAsIDI0MDEsIDY4MTQ0LCA4NzkyLCA5ODM2MzksIDAsIDY1NDU1LCAKKyAgICA2NTExOCwgMCwgMTE5MTUxLCA3NDIwNSwgOTI2NTEsIDAsIDI0MDEsIDY4MTQ0LCA4NzkyLCA5ODM2NDgsIDAsIDY1NDU1LCAKICAgICAwLCA5MjI0NiwgMCwgMTE5MTI5LCAwLCAxMjg4NiwgMTI3OTIwLCA2NjYyNCwgMCwgNDM1NTcsIDEwMzAwLCAxMDE2MSwgCi0gICAgMTAzOTYsIDc0MTM1LCA5ODM0NDUsIDExODk0NSwgNzgxMTgsIDczODUxLCAzMDEwLCA2NDQxLCA3ODEyMiwgMTQ1OCwgCisgICAgMTAzOTYsIDc0MTM1LCA5ODM0NTMsIDExODk0NSwgNzgxMTgsIDczODUxLCAzMDEwLCA2NDQxLCA3ODEyMiwgMTQ1OCwgCiAgICAgNDE0NzUsIDEyODY3MiwgOTM5NzUsIDAsIDExNDc5LCAwLCAxMjAzNTYsIDYzNTAsIDEyODY0LCA2OTY3NCwgNzgxMTQsIAogICAgIDEwNjEsIDY0NzgwLCAyMDAxLCA0MzExMSwgNTUyMzAsIDEyODY4NiwgNDA1MiwgMCwgNzYyNiwgMCwgMCwgMTA0NSwgMCwgCiAgICAgNTYzMSwgNDExMTMsIDAsIDAsIDQzNzA3LCA3NDEyNywgMCwgMCwgODQ4NiwgMCwgNzM3NTgsIDIzMzUsIDQzNjIsIApAQCAtMTgzMDQsOCArMTgzMjMsOCBAQAogICAgIDkyMjQ1LCA0NDAsIDAsIDEzMDg1LCA5MjMzLCA3NDIxNiwgMCwgMCwgOTk1NywgMTI4Mjg1LCA2NjQ0NywgODA0NiwgCiAgICAgNjQ5NjMsIDY1Nzc3LCAxMDEyNSwgNzQyMTIsIDQyODE5LCAxMDkxMCwgMCwgMTUyMSwgOTg5NiwgOTM5NjUsIDEwNDg3LCAKICAgICA2OTg3OCwgMTI1MjcsIDAsIDc5NzAsIDAsIDEyODY2MCwgMCwgNjU3NjksIDUyNDMsIDk4NDksIDUyMzksIDY1NzcxLCAKLSAgICA5ODMyMjksIDAsIDUyMzcsIDY5NzE0LCAwLCAxMDEwMywgNTI0NywgNDc2OSwgMCwgMTE4OTc3LCAxMjg3MywgMjI4MywgCi0gICAgOTgzMjMxLCAwLCAzMDA4LCA0ODk2LCAwLCAxMjA4NywgMCwgNTUyMzEsIDQxMTAzLCAwLCA2NDU2NSwgNDc3MywgMCwgCisgICAgOTgzMjM1LCAwLCA1MjM3LCA2OTcxNCwgMCwgMTAxMDMsIDUyNDcsIDQ3NjksIDAsIDExODk3NywgMTI4NzMsIDIyODMsIAorICAgIDk4MzIzNywgMCwgMzAwOCwgNDg5NiwgMCwgMTIwODcsIDAsIDU1MjMxLCA0MTEwMywgMCwgNjQ1NjUsIDQ3NzMsIDAsIAogICAgIDkyNzE3LCA3MDA3NCwgNDc3MCwgMCwgOTE3NTY3LCA4NzMxLCA2NTM3OCwgMTI3MzYyLCAxMjA2MTksIDkxMjIsIDEyODAzMywgCiAgICAgMTI2NjAwLCA0Nzc0LCAzMDE5LCA5OTk3LCAxMjgzNCwgMCwgOTQ1NiwgMTAyMTUsIDEyMDU0NywgMCwgMCwgMCwgMCwgCiAgICAgNzQ3NzYsIDQyODEsIDQ3NjgsIDAsIDQxNTM1LCA0MDk5LCA5MDE3LCAwLCAwLCA3ODA5NSwgMCwgNzgwOTYsIDAsIDAsIDAsIApAQCAtMTgzMTksMTAgKzE4MzM4LDEwIEBACiAgICAgNzYzNCwgNjUxNjcsIDk4NDUsIDAsIDAsIDU3MDEsIDk3MjIsIDQxNDkwLCA5ODMxNTMsIDE0MjYsIDY4MjE3LCAwLCAKICAgICA2ODQ0NywgNDIyMDQsIDU1MjcwLCA4NTcxLCAxOTQ5OTEsIDc4MDY3LCAwLCA3ODgxOCwgOTI3MTksIDQzMTgyLCAxMjE4NCwgCiAgICAgMCwgNDIwMjIsIDAsIDEwMjgxLCAwLCA1NjUwLCA0MzE5NCwgNjQ3MTIsIDEwNzQ0LCAwLCA5OTAsIDU2NDcsIDAsIDczODcsIAotICAgIDc4NzM0LCA0MTExNCwgMTE0NzcsIDU2NDYsIDEyODc5LCAxMTAxOCwgOTgzOTIxLCAzOTQ1LCA5MjU4OSwgMCwgMCwgMCwgMCwgCisgICAgNzg3MzQsIDQxMTE0LCAxMTQ3NywgNTY0NiwgMTI4NzksIDExMDE4LCA5ODM5MzAsIDM5NDUsIDkyNTg5LCAwLCAwLCAwLCAwLCAKICAgICA3ODIxMiwgMTI3NzQ2LCAxMDIwLCA3Mzc2MywgMCwgNzg3MzEsIDU2NDgsIDY0NzQ4LCAxOTQ5MTAsIDc4NzMzLCAxMDIwNSwgCi0gICAgMzU0NSwgOTgzNTg1LCA2OTg0LCAwLCA3NDA1MSwgOTgzNjQ2LCA0MzI0MiwgMTIwNDU4LCAyNjY3LCAwLCAwLCAwLCA5OTExLCAKLSAgICAwLCA2NTAyMCwgMTAwOTcsIDExOTE2NiwgMTI3MTQ1LCA5ODM2NTMsIDExODgzNiwgOTgzNzM5LCA3ODQyNywgMTE0MCwgCisgICAgMzU0NSwgOTgzNTg1LCA2OTg0LCAwLCA3NDA1MSwgOTgzNjU1LCA0MzI0MiwgMTIwNDU4LCAyNjY3LCAwLCAwLCAwLCA5OTExLCAKKyAgICAwLCA2NTAyMCwgMTAwOTcsIDExOTE2NiwgMTI3MTQ1LCA5ODM2NjIsIDExODgzNiwgOTgzNzQ4LCA3ODQyNywgMTE0MCwgCiAgICAgNzg0MjYsIDAsIDEwMTU5LCAwLCAwLCA4MTI4LCAwLCAwLCA5MTc5NjUsIDE4MTUsIDE5OTEwLCA4OTAsIDAsIDMyNjcsIAogICAgIDkyMjkxLCAwLCAxMDEyMywgMCwgNDQxMCwgMTA0MSwgMTA1NzYsIDYzNTQsIDkyNTgxLCA1ODAsIDc0MjMyLCAwLCAKICAgICAxMjgzNDcsIDAsIDAsIDAsIDE5OTM4LCA2NTkwNiwgMTI3ODE5LCAwLCAwLCAzMjk4LCA1Mzc1LCAxMDE0MiwgMCwgODIxNSwgCkBAIC0xODMzMywxNiArMTgzNTIsMTYgQEAKICAgICA0MTUyMSwgMTE4OTM0LCA0OTQsIDEzMjUwLCAwLCA2NTA5OCwgNjM2NCwgOTU2LCAwLCAxMjgzMCwgMTA0NjIsIDczNzQwLCAKICAgICA3MzczNCwgMCwgMCwgMCwgNjY0NDksIDEzMjYzLCA3NDI4MSwgNjkyMTcsIDEzMTcxLCAxMjc3OTYsIDAsIDAsIDkyMjk0LCAKICAgICAwLCAxMDQ0LCA0MTI3NiwgMCwgMCwgMCwgNDIwNjgsIDExNzk1LCAwLCAwLCAwLCAwLCA0MjQ1MCwgMzkwNywgMCwgNjQ1MjYsIAotICAgIDExODI5LCA2ODE5NywgMTIyOTUsIDAsIDExNDc1LCAwLCAzMDIwLCAxMTUzNywgMCwgNjY0NDEsIDk4MzQ0NiwgNzA5OCwgMCwgCisgICAgMTE4MjksIDY4MTk3LCAxMjI5NSwgMCwgMTE0NzUsIDAsIDMwMjAsIDExNTM3LCAwLCA2NjQ0MSwgOTgzNDU0LCA3MDk4LCAwLCAKICAgICAwLCAxMDU3LCA1NjYsIDQyNjk2LCAwLCAzMDE2LCA0MjI3NCwgNDM0NjQsIDY2NDkwLCAxMjkyMSwgNjY1NzEsIDc4NDcyLCAKICAgICA5MjUxMCwgMzAwNiwgNDYyMCwgMTI3MjM3LCA5ODM1NzgsIDAsIDAsIDY0NjU5LCAwLCAxMjc3NDksIDU1MjUzLCA2MzU3LCAKICAgICA2MzYyLCA4NjI2LCA3MTMzNywgMjIxNiwgOTA5MCwgNjUzNzcsIDQxNTk2LCAwLCA0MjkyMCwgMTY5OCwgMCwgNjQ0NzcsIDAsIAogICAgIDQzODEzLCAxMDUzLCAwLCA3ODI2OSwgMCwgMTI2NTg2LCAxMDUyLCAxMDUxLCA0NTksIDEwNjAsIDc0MzQ5LCA2NjQ3OSwgMCwgCiAgICAgMCwgMCwgMCwgNDI0OTAsIDY4OSwgNjUwOCwgNDE2MywgNDIyOTgsIDg2MzksIDY2NjQxLCA0MjQ2LCAwLCAwLCAxMjEzMCwgCi0gICAgMCwgNDIzMzcsIDY0NTk2LCA2NDM3NSwgNjY0ODEsIDEyNzg1MCwgMCwgMCwgNjM1OSwgMCwgNDM0NzEsIDk4Mzc1OSwgMCwgCisgICAgMCwgNDIzMzcsIDY0NTk2LCA2NDM3NSwgNjY0ODEsIDEyNzg1MCwgMCwgMCwgNjM1OSwgMCwgNDM0NzEsIDk4Mzc2OCwgMCwgCiAgICAgMCwgMTI3Mjc0LCAwLCA2MzU4LCA2MzYxLCAxOTI2LCA2MzU2LCA5MjYyNywgNzg5OCwgODExMCwgMTA5MzUsIDAsIDEwMDY5LCAKLSAgICA1ODMwLCAwLCA0MzY4NSwgMCwgMCwgMCwgMCwgODY5MywgNzg2MTEsIDExOTU2NSwgOTgzNzk5LCAxMjA0MTMsIDAsIAotICAgIDEyNzI1NywgNjU4OTQsIDAsIDAsIDAsIDk4MzkxNCwgMCwgMCwgMTE5MTg3LCAyMTM1LCA3ODg2OCwgMCwgMCwgNzg4NjksIAorICAgIDU4MzAsIDAsIDQzNjg1LCAwLCAwLCAwLCAwLCA4NjkzLCA3ODYxMSwgMTE5NTY1LCA5ODM4MDgsIDEyMDQxMywgMCwgCisgICAgMTI3MjU3LCA2NTg5NCwgMCwgMCwgMCwgOTgzOTIzLCAwLCAwLCAxMTkxODcsIDIxMzUsIDc4ODY4LCAwLCAwLCA3ODg2OSwgCiAgICAgNDIzMTMsIDU1NzksIDkyNDEyLCAwLCA5ODMwODIsIDk0MDAyLCAwLCA1NTc4LCA0MTc3NCwgMTI4MTE1LCA0MjAyMywgCiAgICAgNjIzNCwgNTY2OSwgOTIyNzUsIDAsIDAsIDAsIDEyNzUwNiwgNjgyMDIsIDU1ODMsIDAsIDAsIDQyNDI2LCA1NTgwLCAKICAgICA0MjI3NiwgMjkyMywgODkyLCAyMjIwLCA0MjQ2NSwgNDEzMzAsIDE5NDk4NywgNTc5NSwgNjU1MTIsIDExOTAwNiwgNjU3MDIsIApAQCAtMTgzNTIsNyArMTgzNzEsNyBAQAogICAgIDY0OTAwLCA3MTUzLCA2MDk1LCA0MTg2NSwgMCwgMzAxNSwgMTI4MDIzLCAxMjY0NjUsIDUyMTEsIDk4MzA4MywgNjQwMCwgMCwgCiAgICAgMTk0OTgzLCA3MDA1NCwgODE4OSwgMTEyNzYsIDAsIDAsIDM3MiwgMTI4ODI5LCAwLCAxMTg4NzQsIDQyMTAyLCA0MTU4NSwgCiAgICAgMTI4MjAyLCAwLCA0MjEwMSwgMjc2LCA3ODQwMiwgMCwgMzMsIDc0MjI2LCAxMjczMDMsIDkwMDcsIDExODc5NiwgNDE1ODgsIAotICAgIDY2MDMzLCA0MjcsIDEwNzYzLCAxMTg4MTksIDAsIDEyNzg4NCwgMCwgMTAzMSwgNjI1NywgMCwgNDIxMDQsIDAsIDk4Mzk3MSwgCisgICAgNjYwMzMsIDQyNywgMTA3NjMsIDExODgxOSwgMCwgMTI3ODg0LCAwLCAxMDMxLCA2MjU3LCAwLCA0MjEwNCwgMCwgOTgzOTgwLCAKICAgICAyMzI4LCA5MjQwOSwgMTA3MSwgNDI4OTksIDAsIDc0ODQ4LCAwLCA5ODM1ODAsIDAsIDEwNDcsIDAsIDAsIDY0NzkwLCAwLCAKICAgICA2OTcyMywgMTA2NTEsIDAsIDAsIDAsIDAsIDkyMjA2LCAxMTkxODEsIDU3MTEsIDQxNjMzLCAxMjA5OCwgNjU1NzEsIDkxNjYsIAogICAgIDAsIDU3MTAsIDAsIDY3OTAsIDY1MTY4LCAxMzIxNiwgMCwgNjk3MTYsIDY5NzI2LCAwLCA2NDYxMSwgNDE2MjMsIDE5NTAwMSwgCkBAIC0xODM2MSwxMjAgKzE4MzgwLDEyMCBAQAogICAgIDkxOTYsIDY5NjcwLCAwLCAwLCAwLCAwLCAxMTg5MTEsIDAsIDAsIDAsIDAsIDAsIDEyMDAxMCwgMCwgODcwMSwgNjgxMzAsIAogICAgIDExOTYxNiwgMTIwNTIyLCAwLCA0MjQ3NywgMTk0OTk0LCAxMjEyMywgNDQ5NSwgNDM1NjksIDAsIDAsIDAsIDY0OTQ2LCAKICAgICAxMDk5MiwgMCwgMTIwMDA5LCAwLCAwLCA5MzE4LCA5Mzk4NiwgMTMyNDksIDY1Njc5LCA3MzgwOCwgMCwgNjU0NTcsIAotICAgIDQyMjQ5LCA3NjM5LCA0Mzk5NSwgNjc4NDUsIDQyNjQxLCA1NDU0LCAwLCAwLCAxOTQ5OTcsIDEyMDAwNSwgMCwgOTgzOTU3LCAKKyAgICA0MjI0OSwgNzYzOSwgNDM5OTUsIDY3ODQ1LCA0MjY0MSwgNTQ1NCwgMCwgMCwgMTk0OTk3LCAxMjAwMDUsIDAsIDk4Mzk2NiwgCiAgICAgNTA4NCwgMCwgMCwgMTE4ODYxLCAwLCA3MzMsIDkxNzg3NiwgNzgwMTQsIDc4NDM2LCA3ODQzNSwgNDE2NzcsIDAsIDkyMTgsIAotICAgIDE3MzEsIDAsIDk4MzczNywgMCwgNjc5OTAsIDAsIDAsIDAsIDEyMDAwMSwgMTI3MDE4LCA5MjQ5MiwgNTE1NSwgMTIwMDAwLCAKLSAgICA1MzU4LCA5ODM3MzUsIDAsIDkxNzc2NywgNjQ0MjQsIDk4MzIyNSwgMzg0MCwgNjQzMTQsIDQxNDMyLCAwLCA3ODMxNSwgCisgICAgMTczMSwgMCwgOTgzNzQ2LCAwLCA2Nzk5MCwgMCwgMCwgMCwgMTIwMDAxLCAxMjcwMTgsIDkyNDkyLCA1MTU1LCAxMjAwMDAsIAorICAgIDUzNTgsIDk4Mzc0NCwgMCwgOTE3NzY3LCA2NDQyNCwgOTgzMjMxLCAzODQwLCA2NDMxNCwgNDE0MzIsIDAsIDc4MzE1LCAKICAgICA2ODQzMCwgNjc5ODAsIDQzMjUzLCA2NTk0MywgMCwgMzM3MSwgMTA5ODgsIDAsIDg3NzEsIDE0NzksIDAsIDAsIDExMDksIAotICAgIDExNTgwLCAwLCA2NDYwMSwgMTIyMDUsIDAsIDAsIDY0NTA3LCA4ODY4LCAzOTksIDY3OTc4LCA3NDg0MiwgOTgzMjc2LCAKLSAgICA5ODM3MTIsIDEyMTQ5LCAxMzA4OCwgNTUxLCAwLCAxMDE1NiwgMTIxMTksIDkyNTcyLCAwLCAyNTQ0LCA2NTA3NCwgCisgICAgMTE1ODAsIDAsIDY0NjAxLCAxMjIwNSwgMCwgMCwgNjQ1MDcsIDg4NjgsIDM5OSwgNjc5NzgsIDc0ODQyLCA5ODMyODQsIAorICAgIDk4MzcyMSwgMTIxNDksIDEzMDg4LCA1NTEsIDAsIDEwMTU2LCAxMjExOSwgOTI1NzIsIDAsIDI1NDQsIDY1MDc0LCAKICAgICAxMTkyMTEsIDAsIDAsIDc4MDExLCAzNTEsIDExOTE0OSwgMCwgMCwgNTUyMjksIDAsIDc0MjY4LCAwLCAwLCAwLCA0MjM3NywgCi0gICAgMCwgMCwgMCwgOTgzOTE1LCAwLCA5MDEzLCA0MDU0LCAwLCA5ODM1NzAsIDAsIDAsIDczOTYwLCA1NTg1LCA2NTg4MSwgCisgICAgMCwgMCwgMCwgOTgzOTI0LCAwLCA5MDEzLCA0MDU0LCAwLCA5ODM1NzAsIDk4MzYyOCwgMCwgNzM5NjAsIDU1ODUsIDY1ODgxLCAKICAgICAyNTQ5LCA3NDQ2OSwgMCwgMCwgNTU4NCwgODM1OCwgMCwgNjQyMTUsIDkyMjE5LCAxMDkxOSwgMCwgNzk4MCwgMTI2NjAxLCAKLSAgICA5ODM3NzUsIDIyMTgsIDQxODAwLCA1NTg5LCAwLCAyNjY0LCA0MTYxMywgNTU4NiwgMTE4ODkwLCAwLCAxMTM1NiwgMCwgMCwgCisgICAgOTgzNzg0LCAyMjE4LCA0MTgwMCwgNTU4OSwgMCwgMjY2NCwgNDE2MTMsIDU1ODYsIDExODg5MCwgMCwgMTEzNTYsIDAsIDAsIAogICAgIDQzNDUyLCA3ODYwOSwgMCwgNDI1NzMsIDY3ODU2LCAwLCA3ODEyOSwgMCwgMCwgNzQzOTIsIDgxMzUsIDY0NTAsIDEwMDU1LCAKICAgICA3Nzk5NiwgMCwgMCwgMTE5MjI1LCA1NjU3LCAwLCA5NjI2LCAwLCA3Nzk5NCwgMTAxNzksIDU2NTQsIDEyOTM5LCA5MjU3MywgCiAgICAgMTIwNzk5LCAwLCAwLCA1NjUyLCAxMDk0NSwgMCwgNjY0ODYsIDAsIDM2NjEsIDc4NjMsIDAsIDAsIDAsIDc0NTA5LCAKLSAgICA5ODM4NDMsIDU2NTksIDAsIDc4NjkyLCA2NjcyOSwgNTY1NSwgMCwgNDIxNjgsIDAsIDEwNTUsIDkxNzYyOCwgMTI3NzkyLCAKLSAgICA2NjMxMCwgNzQwMzAsIDAsIDEyMTQ2LCA3Mzk1NSwgNzM5NTYsIDExNjE4LCAwLCAxMjY5OTAsIDAsIDEwMjcyLCAxMDMwNCwgCi0gICAgMTAzNjgsIDQyNTE4LCA1OTQsIDEwMjQ0LCAxMDI0OCwgNzQwNywgOTgzODc4LCA2NDg3MCwgMCwgMzQ2NywgOTgzODgyLCAwLCAKLSAgICAzMzMxLCA5NDYsIDEwMjMxLCAxNDk1LCA4MTMxLCA3NDMzMCwgMCwgOTU2MiwgNjkyMjIsIDY1OTI3LCAwLCA3MDAzNiwgCi0gICAgNjk2OTYsIDY5NzY5LCA2NDY1NiwgOTgzNzE3LCAwLCA5NDAyMCwgNzAwNTYsIDU2NjYsIDY1MjI3LCA1MzE4LCA2Mzk5NCwgCi0gICAgMCwgOTA5MSwgMTA3OTgsIDAsIDEyODE2NiwgMTAxODYsIDAsIDc3MzIsIDk4MzcxNSwgNjQ1NTYsIDAsIDAsIDU2NjgsIAotICAgIDc0NDQ1LCAwLCAxMjg2NjMsIDU2NzAsIDEyNjYxMCwgMTI3Mjk3LCAxMTgyMCwgMjk5MiwgNzgyNiwgNTY2NywgMTk5NTIsIAotICAgIDEyMDgwNywgMCwgMTI3NDksIDc0NTUxLCAwLCAwLCA2NjQ5NiwgNDM2MSwgMTE5MjYwLCAxMzA2LCA5Mjg2LCAxNDk3LCAKLSAgICAxMjgyODYsIDk0MDA0LCAwLCAwLCAzNTcxLCAxMzI0NywgMCwgNzk3MywgNjYzNTMsIDY4NDM1LCA3ODI3OCwgNjc4OTYsIAotICAgIDQzMTkyLCAwLCA3ODI2NSwgNTUzLCAxMjA2NTMsIDAsIDEyODU1NCwgNTgyOSwgMCwgNDU4NywgNzgyODUsIDY1OTEyLCAwLCAKLSAgICAxMjc0NiwgMCwgMCwgMTE5OTI0LCA1NjMzLCAxMTk5MjcsIDk0MTAxLCA5NDEwMiwgOTQwOTksIDY0OTA1LCA5NDEwNSwgCi0gICAgOTUxMiwgOTQxMDMsIDEyNzQyLCA2NDQzLCA5ODM3OTcsIDAsIDkxMzUsIDAsIDQxNTY0LCAwLCA1NTIxOSwgMTI4ODMyLCAKLSAgICA5ODM4NDIsIDAsIDEyMTQ4LCAwLCA3ODI5NywgMCwgNjQyNTYsIDAsIDExNjY5LCAwLCA1NjM0LCA0NTI0LCAwLCAxMjcyNzAsIAotICAgIDAsIDExODg4MCwgMjQyNSwgNjUxODIsIDEyODc2OSwgNDM2MzYsIDUyMjEsIDc4NDEwLCAzMjgsIDAsIDk4MzgwMCwgCi0gICAgNjk4MTUsIDU2MzYsIDAsIDUzMjksIDAsIDU2MzgsIDExOTkxOCwgNzk0MCwgNjQ5MzgsIDQzMjIzLCA0Mzc2MCwgNTYzNSwgCi0gICAgMzM3MywgMjk4NiwgNzgyOTIsIDc0MjIzLCAzNDM3LCA3ODI5MSwgNjIwMywgNDI0NywgMCwgMTE5MjAsIDgyNzQsIDAsIDAsIAotICAgIDE2NTcsIDQxNTYxLCA3ODI5OSwgNzgyOTUsIDU2MzksIDI5NTQsIDU2NjAsIDU2NDAsIDc4MzAzLCA5ODM2NzYsIDc4MzAwLCAKLSAgICA0MjIyNywgMCwgMCwgNDE2MzcsIDY3ODcyLCAwLCA3ODMxMCwgNDE2MjUsIDQzMzYyLCA3ODMwOSwgMTIwNzEzLCAxMTcwNSwgCi0gICAgNTY0MiwgMCwgNTQ4NiwgMCwgNDM1NiwgMTE3MTAsIDAsIDEyMDUxLCA2OTkzOCwgMCwgNTY0MSwgODI1OSwgMCwgMTA1OCwgCi0gICAgMCwgNjc2MzAsIDAsIDAsIDExNDQsIDc4NzUwLCAwLCA0MjIyOCwgMCwgNzM4OTAsIDExODk3MiwgMCwgMjgwMCwgMCwgCi0gICAgNTY0NSwgNjQ5NjQsIDg2NTIsIDI1NDcsIDY2NDg0LCA0MzYzNCwgMCwgNTYwOCwgNjU4OTAsIDQzODA4LCAwLCA2NzYyMSwgCi0gICAgMTE5OTM0LCA5MDAwLCAwLCAwLCA5MjY3MywgMTg2NSwgMCwgNTYxMywgNjk5NTAsIDAsIDAsIDU2MTAsIDAsIDAsIDY1ODI2LCAKLSAgICAyMDY5LCAwLCAxMDc4NywgNDM5OTksIDI5OTcsIDAsIDU2MDksIDc4MzE2LCA2NTMxOSwgNzgzMTMsIDEyMzE2LCA2NTM3NiwgCi0gICAgMjQxMiwgMCwgODE4NiwgOTgwNywgNzQyNjksIDkyNTQ3LCAxMzEzMCwgNjU4NzQsIDAsIDU4MDcsIDAsIDEwMDMwLCA1MzA2LCAKLSAgICAxMjM2NCwgMTI4MDY0LCAwLCAxMTcwNCwgMCwgOTI1ODMsIDEwMjExLCAwLCAwLCAwLCAwLCAxMTcwNiwgOTcxMCwgMCwgMCwgCi0gICAgMCwgNDEzLCA2NTYyMywgNzExOCwgMCwgOTEzMywgNzQyNjIsIDAsIDEwNDIsIDAsIDY0Nzc5LCAxMjE3MSwgMTE5MjQwLCAKLSAgICA2MTg1LCA2NDc3NiwgNDk4NCwgMCwgNzA4LCAxMTM5MSwgMCwgMTIyNDEsIDkyNzIwLCA5ODM4OTAsIDEzMDgsIDAsIDI1MzQsIAotICAgIDgxMCwgMCwgMCwgMCwgMCwgMCwgMTkxNywgMzAwMCwgMCwgMCwgMTIwNzM5LCAyMzY0LCA5MjQ0MywgNzQ0NzAsIDY2NjE4LCAKLSAgICA2NTY4MCwgMTIwNzc5LCAxMDAyNywgMCwgMTI4MTU0LCAxMjMzNywgMTIwNzIyLCAxMjczNjgsIDk4MzE2NywgMjk4MCwgCi0gICAgNzU1LCA2OTc3NCwgOTMxLCAxMzEyNCwgNjgxODIsIDYzNjMsIDI3NDgsIDAsIDAsIDY1MDQxLCA5MjI3NiwgNDQwMTEsIAotICAgIDg3MzAsIDk4MzA2NywgMTI3ODU0LCA3ODMxMiwgNzI3NCwgMTE5MjUwLCAwLCA3Mjc1LCA3ODMwNCwgOTM1LCAwLCA2NTg0MCwgCi0gICAgMzc3LCA0MjMyNSwgMTE2NDksIDEyNzM2MywgNjUyNTMsIDY0MzAxLCAxMjg4MzUsIDc4MzA4LCA0MjM0MSwgNjUyODQsIAotICAgIDI0MTcsIDAsIDEyODg0LCAxOTkxMiwgNzkwNywgMTA3NjgsIDAsIDE5NDk5OCwgMCwgMTA2NzMsIDExOTIxNywgNzI0OCwgMCwgCi0gICAgMTI4MzQ2LCAxNzgxLCA1NDk2LCAzNjI3LCA2MiwgMTY0OSwgMCwgOTY0LCAwLCAxMjc4NzYsIDc4MjI2LCAxMjg3NzUsIAotICAgIDEyNzUxMiwgMCwgMCwgMCwgMCwgNDM2ODksIDEyNzkxMSwgMTMxNDIsIDc4ODEyLCA0MjQxNSwgNjY1NzUsIDQ1NDIsIAotICAgIDY5OTA5LCA0MzU0NywgMCwgMCwgNzY3NywgMjk5MSwgNDk0NiwgNDI0NTQsIDExNTY1LCA3OTQ5LCAwLCA5ODM5MDksIAotICAgIDExMzQxLCA0MjQ5NCwgMzA3MywgNjU2MjUsIDk3MTQsIDExNjkyLCA0NjU3LCAwLCA5MjcyNCwgNjQ3OCwgOTg5OCwgCi0gICAgNDM2NzMsIDY1MjM3LCA2MjQxLCA3MTA2LCA0ODc3LCA5ODM3ODYsIDYyMzgsIDAsIDEwNTQ4LCAxMjcwNDksIDQ0MDksIDAsIAotICAgIDAsIDY0Nzk4LCAwLCA1MzQ2LCAwLCA5NDA0NywgNjIzNywgNDg3NCwgMCwgOTE3NiwgMCwgMTI2NTUzLCA2NTIzMSwgCi0gICAgNjU4ODQsIDEyNjc4LCA3ODc0OCwgMTE4OTEyLCAxMTM3OCwgNDQwMTgsIDQyNzg1LCAyNDA4LCAzMjUxLCAwLCAwLCA1Njg1LCAKLSAgICAwLCAyNDYxLCAxMTA1MiwgNzA5MSwgNTM0MiwgODMxNywgMCwgNjgxNjMsIDUzNDAsIDAsIDEyNzgyMCwgNDM2MzUsIAotICAgIDczOTI4LCAxMjc1MjksIDAsIDAsIDAsIDEyODUxMCwgNjU0ODIsIDAsIDkxNDIsIDAsIDEyNjQ3MCwgMCwgMTA5MzgsIDAsIAotICAgIDExODc5MCwgMTE4MiwgMjU0MiwgNDgyNiwgMCwgMCwgMTI4MTc2LCA1MjksIDg1ODAsIDAsIDAsIDEwNTg2LCAxMDc5MCwgCi0gICAgMTA4MzksIDY2MDIzLCA0MTU5MywgNDEyMDcsIDAsIDAsIDQxNTk0LCAyMjUsIDQyODI4LCAwLCAwLCA5ODM5MjksIDExMzc2LCAKLSAgICA3NDM3OSwgMTA3MjEsIDY3NjY0LCAzNDM4LCA0MjA5NywgMTI3MjY3LCAxMTA4NCwgMzE5NCwgNDE4NzAsIDI2NiwgNzgzMDUsIAotICAgIDEyMDE4MywgNDE4NzMsIDEyMDU3NSwgMTEzMjQsIDEyMDUzMSwgMCwgODQyMCwgNjQ5MTgsIDEyODg0NCwgNDE4NzEsIAotICAgIDQxMzM4LCAzNzM0LCA3NzM0LCA0MzY4MywgODc1MCwgNjY2MDUsIDY2MDExLCA5MjUxNCwgNDA5NjUsIDEyNzkzNywgMCwgCi0gICAgNTE2MSwgMTA1NzIsIDAsIDAsIDAsIDY0MzQ5LCA3Mjg3LCA0MjE2MiwgMTI3NTUyLCAwLCAxMjY2MDUsIDExOTQ4LCAKLSAgICA2OTIyMCwgMTIzNTksIDQzNDI5LCA0MTM2OSwgMTY5NywgMTIxOTEsIDAsIDY4NjMzLCA3Mjg2LCAwLCA2ODYzNSwgMTAwMzEsIAotICAgIDAsIDk4NzAsIDY4NjQ1LCA4NjIwLCA2NTgyNCwgMCwgMTE5MzgsIDAsIDcyODUsIDAsIDExOTU3NywgNDI2NzgsIDAsIAotICAgIDQzNjc3LCA0MTU4MywgMCwgNjU3OTksIDkyNjIzLCAwLCAwLCA5ODM5MjcsIDc4MTY5LCA2NjE5OSwgMCwgMzYwOSwgCisgICAgOTgzODUyLCA1NjU5LCAwLCA3ODY5MiwgNjY3MjksIDU2NTUsIDk4MzYyNiwgNDIxNjgsIDAsIDEwNTUsIDkxNzYyOCwgCisgICAgMTI3NzkyLCA2NjMxMCwgNzQwMzAsIDAsIDEyMTQ2LCA3Mzk1NSwgNzM5NTYsIDExNjE4LCAwLCAxMjY5OTAsIDAsIDEwMjcyLCAKKyAgICAxMDMwNCwgMTAzNjgsIDQyNTE4LCA1OTQsIDEwMjQ0LCAxMDI0OCwgNzQwNywgOTgzODg3LCA2NDg3MCwgMCwgMzQ2NywgCisgICAgOTgzODkxLCAwLCAzMzMxLCA5NDYsIDEwMjMxLCAxNDk1LCA4MTMxLCA3NDMzMCwgMCwgOTU2MiwgNjkyMjIsIDY1OTI3LCAwLCAKKyAgICA3MDAzNiwgNjk2OTYsIDY5NzY5LCA2NDY1NiwgOTgzNzI2LCAwLCA5NDAyMCwgNzAwNTYsIDU2NjYsIDY1MjI3LCA1MzE4LCAKKyAgICA2Mzk5NCwgMCwgOTA5MSwgMTA3OTgsIDAsIDEyODE2NiwgMTAxODYsIDAsIDc3MzIsIDk4MzcyNCwgNjQ1NTYsIDAsIDAsIAorICAgIDU2NjgsIDc0NDQ1LCAwLCAxMjg2NjMsIDU2NzAsIDEyNjYxMCwgMTI3Mjk3LCAxMTgyMCwgMjk5MiwgNzgyNiwgNTY2NywgCisgICAgMTk5NTIsIDEyMDgwNywgMCwgMTI3NDksIDc0NTUxLCAwLCAwLCA2NjQ5NiwgNDM2MSwgMTE5MjYwLCAxMzA2LCA5Mjg2LCAKKyAgICAxNDk3LCAxMjgyODYsIDk0MDA0LCAwLCAwLCAzNTcxLCAxMzI0NywgMCwgNzk3MywgNjYzNTMsIDY4NDM1LCA3ODI3OCwgCisgICAgNjc4OTYsIDQzMTkyLCAwLCA3ODI2NSwgNTUzLCAxMjA2NTMsIDAsIDEyODU1NCwgNTgyOSwgMCwgNDU4NywgNzgyODUsIAorICAgIDY1OTEyLCAwLCAxMjc0NiwgMCwgMCwgMTE5OTI0LCA1NjMzLCAxMTk5MjcsIDk0MTAxLCA5NDEwMiwgOTQwOTksIDY0OTA1LCAKKyAgICA5NDEwNSwgOTUxMiwgOTQxMDMsIDEyNzQyLCA2NDQzLCA5ODM4MDYsIDAsIDkxMzUsIDAsIDQxNTY0LCAwLCA1NTIxOSwgCisgICAgMTI4ODMyLCA5ODM4NTEsIDAsIDEyMTQ4LCAwLCA3ODI5NywgMCwgNjQyNTYsIDAsIDExNjY5LCAwLCA1NjM0LCA0NTI0LCAwLCAKKyAgICAxMjcyNzAsIDAsIDExODg4MCwgMjQyNSwgNjUxODIsIDEyODc2OSwgNDM2MzYsIDUyMjEsIDc4NDEwLCAzMjgsIDAsIAorICAgIDk4MzgwOSwgNjk4MTUsIDU2MzYsIDAsIDUzMjksIDAsIDU2MzgsIDExOTkxOCwgNzk0MCwgNjQ5MzgsIDQzMjIzLCA0Mzc2MCwgCisgICAgNTYzNSwgMzM3MywgMjk4NiwgNzgyOTIsIDc0MjIzLCAzNDM3LCA3ODI5MSwgNjIwMywgNDI0NywgMCwgMTE5MjAsIDgyNzQsIAorICAgIDAsIDAsIDE2NTcsIDQxNTYxLCA3ODI5OSwgNzgyOTUsIDU2MzksIDI5NTQsIDU2NjAsIDU2NDAsIDc4MzAzLCA5ODM2ODUsIAorICAgIDc4MzAwLCA0MjIyNywgMCwgMCwgNDE2MzcsIDY3ODcyLCAwLCA3ODMxMCwgNDE2MjUsIDQzMzYyLCA3ODMwOSwgMTIwNzEzLCAKKyAgICAxMTcwNSwgNTY0MiwgMCwgNTQ4NiwgMCwgNDM1NiwgMTE3MTAsIDAsIDEyMDUxLCA2OTkzOCwgMCwgNTY0MSwgODI1OSwgMCwgCisgICAgMTA1OCwgMCwgNjc2MzAsIDAsIDAsIDExNDQsIDc4NzUwLCAwLCA0MjIyOCwgMCwgNzM4OTAsIDExODk3MiwgMCwgMjgwMCwgCisgICAgMCwgNTY0NSwgNjQ5NjQsIDg2NTIsIDI1NDcsIDY2NDg0LCA0MzYzNCwgMCwgNTYwOCwgNjU4OTAsIDQzODA4LCAwLCAKKyAgICA2NzYyMSwgMTE5OTM0LCA5MDAwLCAwLCAwLCA5MjY3MywgMTg2NSwgMCwgNTYxMywgNjk5NTAsIDAsIDAsIDU2MTAsIDAsIDAsIAorICAgIDY1ODI2LCAyMDY5LCAwLCAxMDc4NywgNDM5OTksIDI5OTcsIDAsIDU2MDksIDc4MzE2LCA2NTMxOSwgNzgzMTMsIDEyMzE2LCAKKyAgICA2NTM3NiwgMjQxMiwgMCwgODE4NiwgOTgwNywgNzQyNjksIDkyNTQ3LCAxMzEzMCwgNjU4NzQsIDAsIDU4MDcsIDAsIAorICAgIDEwMDMwLCA1MzA2LCAxMjM2NCwgMTI4MDY0LCAwLCAxMTcwNCwgMCwgOTI1ODMsIDEwMjExLCAwLCAwLCAwLCAwLCAxMTcwNiwgCisgICAgOTcxMCwgMCwgMCwgMCwgNDEzLCA2NTYyMywgNzExOCwgMCwgOTEzMywgNzQyNjIsIDAsIDEwNDIsIDAsIDY0Nzc5LCAKKyAgICAxMjE3MSwgMTE5MjQwLCA2MTg1LCA2NDc3NiwgNDk4NCwgMCwgNzA4LCAxMTM5MSwgMCwgMTIyNDEsIDkyNzIwLCA5ODM4OTksIAorICAgIDEzMDgsIDAsIDI1MzQsIDgxMCwgMCwgMCwgMCwgMCwgMCwgMTkxNywgMzAwMCwgMCwgMCwgMTIwNzM5LCAyMzY0LCA5MjQ0MywgCisgICAgNzQ0NzAsIDY2NjE4LCA2NTY4MCwgMTIwNzc5LCAxMDAyNywgMCwgMTI4MTU0LCAxMjMzNywgMTIwNzIyLCAxMjczNjgsIAorICAgIDk4MzE2NywgMjk4MCwgNzU1LCA2OTc3NCwgOTMxLCAxMzEyNCwgNjgxODIsIDYzNjMsIDI3NDgsIDAsIDAsIDY1MDQxLCAKKyAgICA5MjI3NiwgNDQwMTEsIDg3MzAsIDk4MzA2NywgMTI3ODU0LCA3ODMxMiwgNzI3NCwgMTE5MjUwLCAwLCA3Mjc1LCA3ODMwNCwgCisgICAgOTM1LCAwLCA2NTg0MCwgMzc3LCA0MjMyNSwgMTE2NDksIDEyNzM2MywgNjUyNTMsIDY0MzAxLCAxMjg4MzUsIDc4MzA4LCAKKyAgICA0MjM0MSwgNjUyODQsIDI0MTcsIDAsIDEyODg0LCAxOTkxMiwgNzkwNywgMTA3NjgsIDAsIDE5NDk5OCwgMCwgMTA2NzMsIAorICAgIDExOTIxNywgNzI0OCwgMCwgMTI4MzQ2LCAxNzgxLCA1NDk2LCAzNjI3LCA2MiwgMTY0OSwgMCwgOTY0LCAwLCAxMjc4NzYsIAorICAgIDc4MjI2LCAxMjg3NzUsIDEyNzUxMiwgMCwgMCwgMCwgMCwgNDM2ODksIDEyNzkxMSwgMTMxNDIsIDc4ODEyLCA0MjQxNSwgCisgICAgNjY1NzUsIDQ1NDIsIDY5OTA5LCA0MzU0NywgMCwgMCwgNzY3NywgMjk5MSwgNDk0NiwgNDI0NTQsIDExNTY1LCA3OTQ5LCAwLCAKKyAgICA5ODM5MTgsIDExMzQxLCA0MjQ5NCwgMzA3MywgNjU2MjUsIDk3MTQsIDExNjkyLCA0NjU3LCAwLCA5MjcyNCwgNjQ3OCwgCisgICAgOTg5OCwgNDM2NzMsIDY1MjM3LCA2MjQxLCA3MTA2LCA0ODc3LCA5ODM3OTUsIDYyMzgsIDAsIDEwNTQ4LCAxMjcwNDksIAorICAgIDQ0MDksIDAsIDAsIDY0Nzk4LCAwLCA1MzQ2LCAwLCA5NDA0NywgNjIzNywgNDg3NCwgMCwgOTE3NiwgMCwgMTI2NTUzLCAKKyAgICA2NTIzMSwgNjU4ODQsIDEyNjc4LCA3ODc0OCwgMTE4OTEyLCAxMTM3OCwgNDQwMTgsIDQyNzg1LCAyNDA4LCAzMjUxLCAwLCAKKyAgICAwLCA1Njg1LCAwLCAyNDYxLCAxMTA1MiwgNzA5MSwgNTM0MiwgODMxNywgMCwgNjgxNjMsIDUzNDAsIDAsIDEyNzgyMCwgCisgICAgNDM2MzUsIDczOTI4LCAxMjc1MjksIDAsIDAsIDAsIDEyODUxMCwgNjU0ODIsIDAsIDkxNDIsIDAsIDEyNjQ3MCwgMCwgCisgICAgMTA5MzgsIDAsIDExODc5MCwgMTE4MiwgMjU0MiwgNDgyNiwgMCwgMCwgMTI4MTc2LCA1MjksIDg1ODAsIDAsIDAsIDEwNTg2LCAKKyAgICAxMDc5MCwgMTA4MzksIDY2MDIzLCA0MTU5MywgNDEyMDcsIDAsIDAsIDQxNTk0LCAyMjUsIDQyODI4LCAwLCAwLCA5ODM5MzgsIAorICAgIDExMzc2LCA3NDM3OSwgMTA3MjEsIDY3NjY0LCAzNDM4LCA0MjA5NywgMTI3MjY3LCAxMTA4NCwgMzE5NCwgNDE4NzAsIDI2NiwgCisgICAgNzgzMDUsIDEyMDE4MywgNDE4NzMsIDEyMDU3NSwgMTEzMjQsIDEyMDUzMSwgMCwgODQyMCwgNjQ5MTgsIDEyODg0NCwgCisgICAgNDE4NzEsIDQxMzM4LCAzNzM0LCA3NzM0LCA0MzY4MywgODc1MCwgNjY2MDUsIDY2MDExLCA5MjUxNCwgNDA5NjUsIAorICAgIDEyNzkzNywgMCwgNTE2MSwgMTA1NzIsIDAsIDAsIDAsIDY0MzQ5LCA3Mjg3LCA0MjE2MiwgMTI3NTUyLCAwLCAxMjY2MDUsIAorICAgIDExOTQ4LCA2OTIyMCwgMTIzNTksIDQzNDI5LCA0MTM2OSwgMTY5NywgMTIxOTEsIDAsIDY4NjMzLCA3Mjg2LCAwLCA2ODYzNSwgCisgICAgMTAwMzEsIDAsIDk4NzAsIDY4NjQ1LCA4NjIwLCA2NTgyNCwgMCwgMTE5MzgsIDAsIDcyODUsIDAsIDExOTU3NywgNDI2NzgsIAorICAgIDAsIDQzNjc3LCA0MTU4MywgMCwgNjU3OTksIDkyNjIzLCAwLCAwLCA5ODM5MzYsIDc4MTY5LCA2NjE5OSwgMCwgMzYwOSwgCiAgICAgNjg2MjQsIDAsIDgzMiwgMTIwNjkzLCAxMjA3NzAsIDc4NDczLCA2NjAwNywgNzg0NzEsIDY1NzAzLCAwLCAwLCA0MjczMiwgCiAgICAgNTE4MCwgOTI2OTksIDQxMzk1LCA0MTUzMCwgMTE2OTEsIDY0NzczLCA5MjIxNCwgNzQwMDIsIDAsIDAsIDEyODY0NSwgCi0gICAgNjM0OCwgMjQzLCAxMzIwMCwgOTgzODA0LCA2MDI0LCA5MjMwOSwgOTk3OSwgMTAwMzcsIDQxNTI5LCAxMDY0OCwgODUzOCwgCisgICAgNjM0OCwgMjQzLCAxMzIwMCwgOTgzODEzLCA2MDI0LCA5MjMwOSwgOTk3OSwgMTAwMzcsIDQxNTI5LCAxMDY0OCwgODUzOCwgCiAgICAgNDM2ODcsIDAsIDAsIDQyODUsIDY2MTk1LCAwLCA0MjMwLCAwLCA3MzY3LCA0MzI1NiwgOTIzNTMsIDc1NjMsIDQyMzc2LCAwLCAKICAgICA2ODQ0MiwgMTIwNTEyLCAwLCAwLCAyMTQsIDAsIDAsIDc4NDY2LCA2NTg5MywgMTIyMDgsIDk5NzMsIDAsIDY2MzExLCAKICAgICA2NTU4OSwgMTI4Mjc3LCAyNjAzLCAwLCAwLCAwLCA3MDA0NywgMCwgNjAyMiwgMCwgMjg4NCwgMCwgMTE2MjAsIDAsIDQzLCAKICAgICAwLCA2NjQ1MywgMTAxNiwgNDExMDcsIDAsIDQxMTIxLCAzODg1LCA5MiwgNjU0NTYsIDY0NjA4LCAwLCA3NDgwMSwgMCwgCi0gICAgMjA3NCwgMCwgNzgyODMsIDAsIDEyNDUzLCAxMjgxMjgsIDk4MzgxNywgNzQyNDEsIDEyNjU2OCwgNjc5MSwgMTI0NTcsIAorICAgIDIwNzQsIDAsIDc4MjgzLCAwLCAxMjQ1MywgMTI4MTI4LCA5ODM4MjYsIDc0MjQxLCAxMjY1NjgsIDY3OTEsIDEyNDU3LCAKICAgICA3ODI2OCwgMCwgMCwgMCwgNzgyNzksIDAsIDAsIDkyMzU4LCA2NjYzNywgNzk5NSwgODc1OSwgNDM0MjEsIDc4Mjc3LCAKICAgICAxMjQ0OSwgMTI4NTUyLCAwLCAwLCA4NzUyLCAzMTk3LCA0NzIwLCAxMDE2NSwgMCwgMTE5MjQ5LCAwLCAxMTU5NSwgNjQ4OTMsIAogICAgIDAsIDQzNDM1LCAwLCAwLCA0OTkzLCAwLCA2MTY4LCAxMDkzNCwgMTk0NiwgNzQxLCAwLCA1NDk0LCA0NjM5LCA5ODMxNDcsIAogICAgIDE5OTAsIDY2NTg5LCA0NDk4LCA3ODY2NCwgMTE5MTgzLCAwLCAwLCA2OTczNCwgMjk2MCwgNzM3NzksIDAsIDg5NjksIAogICAgIDEyODExNywgNDM0MjQsIDEyNzA1OSwgMCwgMjk1MCwgMTE5NTc5LCA2MjEwLCA2NTc1MywgMzcwLCAwLCAwLCAwLCA0OTUzLCAKLSAgICA5ODM2NzMsIDAsIDAsIDAsIDY5MjMwLCAwLCAwLCA2NTY4OCwgOTgzMjQwLCA1MDYzLCAzNTE3LCAyOTY0LCA0MzY2MywgCisgICAgOTgzNjgyLCAwLCAwLCAwLCA2OTIzMCwgMCwgMCwgNjU2ODgsIDk4MzI0NiwgNTA2MywgMzUxNywgMjk2NCwgNDM2NjMsIAogICAgIDkxNzc2MiwgNjM0NCwgNzQ3OTEsIDEwNTY2LCAxMDE0NCwgNjYzMzMsIDgyNTIsIDcyOSwgNjYwMTYsIDc4MjUzLCAwLCAKICAgICA3MTMxNywgNjQ5MjMsIDEyODA0MCwgNDM2NjksIDkwMzIsIDc4MjYzLCA3ODI2NCwgMCwgNDEyMTUsIDAsIDY1ODgzLCAwLCAKICAgICA5MTc3NzQsIDEyMDYwMiwgMzc2MSwgMCwgMCwgNzAwNjgsIDAsIDEyOTEyLCAxMTkwMTIsIDM4NTAsIDEyODE5MSwgMCwgMCwgCiAgICAgMCwgMCwgOTA4LCAwLCA4NjExLCAwLCAwLCAxMjc1NTUsIDQzNjkxLCA0MTE5NywgMCwgODk3OCwgMTIwNTQwLCAxMTkxMzUsIAogICAgIDQxNTg2LCAxMDUyNywgMCwgOTE3ODQ4LCAzODQ4LCA3ODczOSwgMTk0OTM3LCAxMjc1MzYsIDY1MjQxLCA1MzM2LCAKLSAgICA5ODMyNTEsIDEyODc4NiwgNjYzLCAwLCAxMDc4MCwgMCwgMCwgNzg3NjcsIDk4MzI0OSwgMTI3MTYzLCA2ODE5MywgMzQ3LCAKKyAgICA5ODMyNTksIDEyODc4NiwgNjYzLCAwLCAxMDc4MCwgMCwgMCwgNzg3NjcsIDk4MzI1NywgMTI3MTYzLCA2ODE5MywgMzQ3LCAKICAgICAwLCAwLCA3ODc3NSwgNjQ2NzUsIDQxNTgyLCA3ODc3NCwgNzg3NDQsIDY1NTc5LCAxMjk4MCwgNzg3NjksIDEyMTQzLCAKICAgICA2OTY1NywgNzg1MTIsIDAsIDQzNDQxLCA0MTgwNCwgNzg1MjMsIDAsIDc4NTI1LCAwLCAxMjg4NTksIDQxNTg0LCAxMDY4MSwgCi0gICAgMCwgOTgzNjg2LCA3MzkzOCwgMCwgMTI4MDIyLCA0ODAwLCA2NjY2MSwgMCwgNjYzMDYsIDY0NzE1LCA3ODUzNCwgOTUxOCwgCi0gICAgNjYwOSwgMTA0MzQsIDAsIDExMzE5LCAxMDk3LCAwLCA5MTc4NTAsIDQxNzMwLCA5ODMyMTIsIDAsIDczODQ3LCA3ODc2MSwgCi0gICAgNjUxNzIsIDQxNzI4LCA0MTcyMSwgMCwgMCwgMCwgNDEyMDMsIDkxNzYxMiwgMTMxMTAsIDQxNzI2LCA5ODM4NDYsIDAsIAorICAgIDAsIDk4MzY5NSwgNzM5MzgsIDAsIDEyODAyMiwgNDgwMCwgNjY2NjEsIDAsIDY2MzA2LCA2NDcxNSwgNzg1MzQsIDk1MTgsIAorICAgIDY2MDksIDEwNDM0LCAwLCAxMTMxOSwgMTA5NywgMCwgOTE3ODUwLCA0MTczMCwgOTgzMjE0LCAwLCA3Mzg0NywgNzg3NjEsIAorICAgIDY1MTcyLCA0MTcyOCwgNDE3MjEsIDAsIDAsIDAsIDQxMjAzLCA5MTc2MTIsIDEzMTEwLCA0MTcyNiwgOTgzODU1LCAwLCAKICAgICAxMDAwLCA2OTY1MSwgMCwgNDExNDAsIDEyMDksIDczOTc4LCAwLCA3Mzc1MCwgMTA3MywgNjMyMSwgNzc4NzgsIDQxMTM4LCAKICAgICAwLCA2ODIxMywgMCwgMTIxNjcsIDExMTUsIDQxNjA1LCA5Nzk0LCAxMjcwNjIsIDY3NjcxLCA1NTI0OCwgMTIyMzcsIAogICAgIDc4Nzg3LCA2NjMxNCwgNjU4NywgOTI5MCwgNzg3ODIsIDc4NzgzLCA5MjMxLCA3ODc4MSwgMjk1OSwgNzkyNiwgMCwgMCwgMCwgCi0gICAgNjQzOTgsIDAsIDExOTk3MCwgMTIzMTEsIDk4MzcxOCwgNzg3OTYsIDc4Nzk4LCA3ODc5NCwgNzg3OTUsIDY4NDM0LCAKKyAgICA2NDM5OCwgMCwgMTE5OTcwLCAxMjMxMSwgOTgzNzI3LCA3ODc5NiwgNzg3OTgsIDc4Nzk0LCA3ODc5NSwgNjg0MzQsIAogICAgIDc4NzkzLCA2NjY3MCwgMCwgMCwgMTIyOTAsIDEyMDE2OSwgMCwgMTE5ODczLCA0MjE0MiwgOTk2OCwgODIwNSwgMCwgNTEzMSwgCi0gICAgMCwgOTYyNywgNzg1MzYsIDc4NTQyLCA3ODUzNSwgOTgzMjEwLCAxOTQ0LCAxMjQ4LCAxMDE0OCwgMTI3NzU1LCAxMTk5OTAsIAorICAgIDAsIDk2MjcsIDc4NTM2LCA3ODU0MiwgNzg1MzUsIDk4MzIxMiwgMTk0NCwgMTI0OCwgMTAxNDgsIDEyNzc1NSwgMTE5OTkwLCAKICAgICAxMTk5OTEsIDEyNzAxLCA3ODM3NiwgMTEzMDgsIDExOTk5NSwgMCwgMTE5OTk3LCAxMTk5OTgsIDY1MzA1LCA2NTEwMCwgCiAgICAgNDAzMSwgNDI3OTQsIDEyMDAwMywgNzA3NSwgODE1NCwgMTE5OTg1LCAxMjAwMDcsIDQxODE3LCA3MzkzNCwgNDIyNzUsIAogICAgIDEyMDAxMSwgMTIwMDEyLCA3ODUyNiwgMTIwMDE0LCAxMjAwMTUsIDYwNDEsIDAsIDQxODk5LCAwLCA4MDAyLCAwLCA0MzY0LCAKICAgICAwLCAwLCA2NDMzMiwgMCwgNzgxMywgOTA2NCwgMTE5OTg2LCAxMDEyNCwgNzUyNiwgODYwMSwgNzI4MSwgNzg0NTUsIDcyNzksIAotICAgIDEyMDQxLCAxNDE4LCAxMDg4NSwgMTI2NzMsIDAsIDAsIDk2NjAsIDk4MzI3MiwgMTMwMTIsIDQ1NzEsIDAsIDAsIDEyMDE2NCwgCisgICAgMTIwNDEsIDE0MTgsIDEwODg1LCAxMjY3MywgMCwgMCwgOTY2MCwgOTgzMjgwLCAxMzAxMiwgNDU3MSwgMCwgMCwgMTIwMTY0LCAKICAgICAxMjA3OCwgMjk3MCwgMCwgMTA5MzMsIDAsIDc3ODcwLCAwLCAxMjcwMTUsIDAsIDQxNTk5LCAwLCAxMjg4MzEsIDAsIAogICAgIDEyOTUwLCA5MjE2MCwgMzQ4NiwgMCwgNzgzMTEsIDQyMzksIDAsIDEyNzc5OSwgNjY1MTEsIDAsIDI2MzcsIDY0NjI5LCAKLSAgICA4NDYwLCAxMjcwNTMsIDg0NzYsIDk4Mzk2NiwgMCwgMCwgMCwgNjU2NzMsIDEwMTksIDc4NDk1LCA0MTQ4LCAwLCAxMjI4OSwgCi0gICAgMCwgNDMxNiwgMCwgMTMxMTksIDg0ODgsIDU0MTIsIDY2MjQzLCA5OTM1LCAwLCA3Mzg2NCwgOTgzMjAxLCA0MTczNCwgCisgICAgODQ2MCwgMTI3MDUzLCA4NDc2LCA5ODM5NzUsIDAsIDAsIDAsIDY1NjczLCAxMDE5LCA3ODQ5NSwgNDE0OCwgMCwgMTIyODksIAorICAgIDAsIDQzMTYsIDAsIDEzMTE5LCA4NDg4LCA1NDEyLCA2NjI0MywgOTkzNSwgMCwgNzM4NjQsIDk4MzIwMywgNDE3MzQsIAogICAgIDgyMDYsIDc0MDgxLCA5MTYzLCAzMjg2LCA5MDcyLCA1ODY3LCAxMzMwMiwgNzYyMiwgNzEyMCwgNDE3MzYsIDkyNTQ2LCAKICAgICA0MTczMSwgMCwgNzQwMCwgNTQxNiwgNjg2NjMsIDExODkyNCwgMTA4MTcsIDAsIDQxNTM5LCAxMjcyODQsIDAsIDczOTYzLCAKICAgICA0MTg1NSwgNDE4NjcsIDY1NTY0LCAxMTI3NywgNjU4OTIsIDExNTM2LCAxMDYyMCwgOTIyNzIsIDcxMTUsIDY2MDMwLCAKICAgICA3MzkzMiwgNTQ5OCwgNzM5NDIsIDQxNTM2LCAwLCA2ODIwNCwgOTI1ODcsIDM0NTksIDg5OTcsIDAsIDAsIDAsIDAsIAotICAgIDkyNTEyLCAwLCA2NjM3NywgNjk3ODEsIDAsIDk4MzY5MCwgNzg1MTEsIDMxNjEsIDI5NSwgMTIwMjA3LCAwLCA5MjIyMywgCisgICAgOTI1MTIsIDAsIDY2Mzc3LCA2OTc4MSwgMCwgOTgzNjk5LCA3ODUxMSwgMzE2MSwgMjk1LCAxMjAyMDcsIDAsIDkyMjIzLCAKICAgICAxMjc4NTYsIDc4NzQyLCA5MDE2LCA0MzQ1NCwgNjM5MDMsIDYzOTAyLCA0MzY0MSwgMCwgMzk3MSwgMCwgNzAwNjMsIDI5NTIsIAogICAgIDc4NzY1LCAxMTAzOCwgMTA5MDEsIDYzOTAwLCA2Mzg5OSwgNjM4OTgsIDk0MDQzLCA2NjcsIDEyMzMyLCA2Mzg4NywgNjA4NiwgCi0gICAgNDE3MjIsIDAsIDUxNzIsIDAsIDAsIDQxNTksIDAsIDAsIDk4MTUsIDYzODg0LCAxOTkzNCwgNjM4ODIsIDQxMTk4LCA4NTU1LCAKLSAgICA2Mzg3OCwgNjM4NzcsIDQyNDYwLCA2MDUwLCA0MjcwOCwgNjM4ODEsIDYzODcyLCAwLCA0MjQyMSwgMCwgNDE3MjMsIAorICAgIDQxNzIyLCAwLCA1MTcyLCAwLCA5ODMyNzgsIDQxNTksIDAsIDAsIDk4MTUsIDYzODg0LCAxOTkzNCwgNjM4ODIsIDQxMTk4LCAKKyAgICA4NTU1LCA2Mzg3OCwgNjM4NzcsIDQyNDYwLCA2MDUwLCA0MjcwOCwgNjM4ODEsIDYzODcyLCAwLCA0MjQyMSwgMCwgNDE3MjMsIAogICAgIDYzODc1LCA2Mzg3NCwgMTE0NjAsIDc0MzIsIDE5MTMsIDQxOTEzLCA2Mzg1MiwgMTI2NjM2LCAwLCA0MjM0OCwgNzM4OTIsIAogICAgIDY3NTIsIDQ0NiwgNDE5MTEsIDEyNzkwNiwgNjM4NTEsIDYzODUwLCA0MTkxMCwgMCwgNjM4NDYsIDI5NzIsIDEyOTMyLCAKICAgICA3MjYyLCAwLCA2Mzg0OSwgNjM4NDgsIDYzODQ3LCAxMjgwNzAsIDY1NzAsIDgzMDIsIDcyNTksIDYzODQyLCA0MTc4LCAKQEAgLTE4NDg4LDggKzE4NTA3LDggQEAKICAgICA3NTgzLCA3Njc5LCAyOTAzLCAwLCAzMDAxLCAxMTU4LCA4NzQ1LCA0Mzc0NiwgNzM3NDgsIDYzODY2LCA3ODYyNiwgMTkxNSwgCiAgICAgNDg0NiwgMCwgNjYzNzEsIDExODk4NCwgNDIxMDUsIDI5OTAsIDEyMDEyOCwgODA1LCA2OTIzOCwgNjQ0MzgsIDEyMDcwLCAKICAgICA4NzYwLCAxMTE3LCAxMTg5ODcsIDEyMjEyLCAxMjAxMjMsIDY1MTc0LCA0MjM1NywgNjM4MzUsIDYzODM0LCAwLCA3ODI0MCwgCi0gICAgMTIyMjUsIDYzODM4LCA2MzgzNywgOTgzODQ0LCA5ODM3OTUsIDYzODMzLCA2MDQyLCA2NjM2MCwgODA4MywgMCwgMCwgCi0gICAgNjM4MjEsIDYzODIwLCA2MzgxOSwgNjM4MTgsIDk4Mzg5NSwgNTIyNywgOTA0NywgNjM4MjIsIDEyNzE2MiwgNjA5MSwgMCwgCisgICAgMTIyMjUsIDYzODM4LCA2MzgzNywgOTgzODUzLCA5ODM4MDQsIDYzODMzLCA2MDQyLCA2NjM2MCwgODA4MywgMCwgMCwgCisgICAgNjM4MjEsIDYzODIwLCA2MzgxOSwgNjM4MTgsIDk4MzkwNCwgNTIyNywgOTA0NywgNjM4MjIsIDEyNzE2MiwgNjA5MSwgMCwgCiAgICAgMTA2OTEsIDU2MCwgNTY0MywgODIyNiwgMTE5NTc4LCA2MzgxMiwgNjM4MTEsIDYzODEwLCA2MzgwOSwgMjI4OSwgNjM4MTUsIAogICAgIDYzODE0LCA2MzgxMywgNjA0NywgMTU5NywgMTIwMTQzLCA3ODAsIDIwNiwgNzc5MjUsIDQ5MzYsIDY1MTQ3LCA4MTY4LCAKICAgICA2MzkzMCwgMjA3NiwgMTA5MywgOTg4MiwgNjM5MzQsIDIwODIsIDYzOTMyLCAxMjgxNTAsIDYzOTI5LCAzNTQ2LCAxNjA1LCAKQEAgLTE4NTA3LDI2MiArMTg1MjYsMjYyIEBACiAgICAgNDM2NTksIDEyOTUxLCAxMjA2MzgsIDk5MDYsIDIwNTQsIDIzMzQsIDc4NTE1LCA2MzkxNiwgNTQ4MywgNjM5MTQsIDY5NzM3LCAKICAgICA2MzkxMSwgNTQ4NCwgNjM5MDksIDYzOTA4LCAyNTM5LCAwLCA0Mzk4MCwgNTQ4NSwgMCwgNDI2OTcsIDkwNjEsIDU1MzQsIAogICAgIDEwNjcyLCA0NTAyLCAwLCAyNTMsIDAsIDY4MjA4LCAwLCA5MjAzLCA3NDIzMSwgMCwgMTE1MzAsIDkyNTQyLCA2ODY2OCwgMCwgCi0gICAgMTE4OTA3LCAwLCAxMDQ3NCwgNDM0MjYsIDEzMjU3LCA0MjM1NCwgMTI4MDk5LCA5ODM2ODksIDcwMDQ0LCAxOTUwNjUsIDAsIAotICAgIDg0MTMsIDk4MzgwNywgMCwgNTY5MywgNzI3MiwgMCwgMTMyMDksIDY0NDcwLCA2NTgzMSwgNzQzNTAsIDE5NTA2MywgMCwgMCwgCi0gICAgMCwgMTI2NjM5LCAwLCAwLCA5NDA3OCwgMTI4MTMzLCAxMjc3NjcsIDY2NjA4LCAzMTExLCA0MTg2MywgODgwNCwgNDI5MTMsIAotICAgIDkyMTg3LCA3MjcwLCAwLCA2NjYwNiwgNjYyOCwgMTA3NiwgNzQzMywgMTQzNiwgNzM4NDQsIDU1MjI2LCAxMjgzNTMsIAotICAgIDYzOTgyLCA3MzkzLCAxMjgwNywgNDM0MTMsIDYzOTA2LCAxNTk4LCA2MzkwNCwgMCwgMCwgNDE3MjksIDQ0MjMsIDEzMDcsIAotICAgIDAsIDEwNTE1LCA0MTU4OSwgMTI4Njk4LCAwLCA2MjE4LCAwLCAxNDMwLCAwLCAwLCAxMjA2MDYsIDc4NzU0LCA1NDEzLCAKLSAgICA3NjE5LCAzMjU1LCAzNDkzLCA3NDAzMiwgMTE1NDksIDEwNzM1LCA0MTc0MywgNzM5MzcsIDY4MDEsIDk4MzYyNCwgNDUxOCwgCi0gICAgMTA5OTAsIDY1MDczLCA1MTY3LCA0NDgxLCAzNzcxLCAxMjAxNTgsIDI3MTAsIDAsIDY5MjQzLCA0MTcyNCwgMCwgNDMwNzMsIAotICAgIDQxNjkwLCAxMjQ3OSwgOTgzNjI2LCAwLCAwLCA5ODM4MDksIDcwMDQ2LCAxNjI4LCAxMjcxNDksIDk4MzQ3OSwgOTgzNzIyLCAKLSAgICA2NTI2MiwgNjMzMywgMTA3ODMsIDQyMzE1LCAwLCA2Mzg1NSwgOTQwNTYsIDAsIDAsIDUzMzksIDc0MzIzLCAwLCAxMzAwNCwgCi0gICAgMCwgNDQ1NywgMCwgMCwgMCwgMCwgNTY4NCwgODY3OCwgMTA5MTQsIDAsIDU2ODksIDY1ODA3LCAwLCA2ODQ2NCwgMTI2MzMsIAotICAgIDEyODcwLCA2OTcwNSwgNjUxODMsIDU2ODgsIDExOTI2LCA2MDMzLCA2MzEwLCA1Njg2LCAwLCA3NDI1MSwgMCwgMTIwNjQ3LCAKLSAgICAwLCA1MCwgMTA1NTgsIDk4NzEsIDQyNjEyLCA0MzY1NSwgMCwgMCwgMCwgNjY0NjgsIDAsIDEzMjU5LCA0NDQ4LCAwLCAKLSAgICA5ODM4MzYsIDAsIDcwMDQzLCA2Nzg1MywgMCwgMTA2NDAsIDExNTM5LCAxMTUxLCAwLCA5MTc2MDcsIDEyNzU0NCwgCi0gICAgMTI3MDc5LCAxOTUwNTAsIDEyNzg1MiwgMCwgMCwgMCwgMTI1MDEsIDY0NjA0LCAwLCAxMTUyNywgMTE4ODcwLCA4ODEyLCAwLCAKLSAgICAxMTUzOCwgODY3MywgMTI2NTAsIDExMDIwLCAwLCA2NjQ2NywgMjEwNSwgODA4NywgNzgxNjMsIDY5NjMyLCA5ODk0LCAwLCAKLSAgICAwLCAwLCA0NjM2LCA1NTI2MiwgNzg1MTMsIDQ1MTUsIDIzODIsIDAsIDEyNzA1NSwgMCwgMTIwNDk1LCAwLCAxMjgyODQsIAotICAgIDEyMjc3LCAxOTQ2MjcsIDExOTk1LCA5MjU1MywgMCwgMTIxNTgsIDAsIDg3NDEsIDEwMTk3LCAwLCA5MjQyNiwgMCwgNjUzMSwgCi0gICAgMCwgMTI3ODQ2LCA0NzMsIDQzNDE1LCAwLCA5ODM2NDEsIDE4NzMsIDEwODcsIDAsIDAsIDAsIDc4NTI3LCA2NjQzOSwgCi0gICAgNDMyMTgsIDk4MzEyMywgMTk0NzE2LCA3MjM3LCAxMjUwNCwgNzQyODIsIDAsIDk4MzU3MSwgMCwgOTQ4OSwgMCwgMCwgCi0gICAgNDM4NCwgNzQyMjAsIDYzODQ1LCAyMDU4LCAxMjg4NjMsIDEzMjk1LCA0MzE5MSwgMTI4MDMwLCAwLCAxMTU0LCAzODU3LCAKLSAgICAxMjA1LCAwLCAwLCAxMzEwMCwgMTI5NTgsIDEyMDcwNiwgNzQxNjgsIDAsIDAsIDQ0MjEsIDEwNTkyLCAwLCA0OTUsIAotICAgIDExOTAwNywgNDE3MTIsIDc5ODMsIDAsIDkzOTk3LCAwLCA2MzQ3LCAxMjAxNjUsIDc2NTQsIDQxNzEwLCA0MTk2LCAwLCAKLSAgICA0MzcsIDQxNzA5LCA3Mzc3MiwgMCwgMCwgOTQ2NSwgMTMyOTAsIDExOTE4MCwgNDk5NywgNjQzMDYsIDAsIDAsIDQ5OTksIAotICAgIDE5NDY0MiwgMCwgMTI2NTgyLCA0NzExLCAxMjA3NjksIDAsIDI3MzksIDAsIDgwNDQsIDc0ODM0LCAxOTQ2NDMsIDQxNzg5LCAKLSAgICAxMjgxNDIsIDEwODA5LCAwLCAwLCAwLCAxNzc5LCA2NjAwLCA2NjAxLCA0MTU0MywgNTMyNSwgNjQyLCA2NDE4NywgMTMwNTgsIAotICAgIDEyMDQ0OSwgMTI4NzUsIDAsIDkyMTg2LCAxMzIyOSwgMCwgMTA1NzUsIDQzMzk5LCAwLCAwLCA0MTc5MSwgMTEwNCwgMCwgMCwgCi0gICAgMTA2NTUsIDAsIDAsIDAsIDAsIDEwODIsIDE5NTA0OSwgODQyOCwgNjU2OSwgMCwgMCwgMCwgNjk4NDksIDY3ODMsIDAsIAotICAgIDEyOTkzLCA4MDQ5LCA0MTU0OCwgNDQwMjEsIDY0NTgsIDk4Mzc5OCwgMTI4ODgyLCA0NzYxLCA2MzgyOCwgNDc2NiwgCi0gICAgNjQ2MjMsIDEyNzMsIDQzNDA3LCAwLCAxMTg4NzYsIDE5NTA0NSwgNjkxMiwgMTMxMywgNjMyMiwgMTA0ODMsIDk4MzYwMywgCi0gICAgNDE1NDUsIDAsIDkyNDQ5LCAwLCAwLCAwLCAwLCA3ODYyNCwgMzQ4NCwgNzQzMzcsIDAsIDAsIDg1MDMsIDUxMjIsIDQxNTI3LCAKLSAgICAwLCA2NjMyMCwgOTgzODAyLCAwLCAwLCAwLCA0MTUzNywgNjk2ODMsIDgzMDMsIDgyODIsIDExODE3LCA3Mzg1NywgMTAwMDMsIAotICAgIDczODU5LCA2NTkwNCwgNzM2MywgMTY4NiwgMCwgNzg0MDYsIDExNDY3LCAzNjY0LCA2NTkyMSwgNjQyOTksIDE5NDY2NCwgMCwgCi0gICAgMCwgNDMyNCwgMTI2LCA0MjI0NiwgMTE5MTUyLCAwLCA3NDM3OCwgNjU5MjYsIDc3NDQsIDE5NDYzNiwgNzQyNzcsIDc0MzAyLCAKLSAgICA3ODA1MiwgNDM4MTcsIDY5NjYsIDQzODIyLCA4MTM2LCAwLCA2NTYwMCwgMTYzMywgMCwgMCwgNDc2MiwgMTEwMywgMCwgMCwgCi0gICAgNDc2NSwgOTgzNDg0LCAxMzA3OCwgMCwgNDc2MCwgNjM4MjcsIDIwNTAsIDEwODcxLCA0MzE5OSwgMTEwMiwgMCwgNDIyMzYsIAotICAgIDEyODg2NywgMTk0NjY3LCAxMTU0NiwgNzQ3OTQsIDMzNywgMCwgNDI1OTEsIDg2MjcsIDEyMjc5LCAxMTExLCAwLCA5MjE2MSwgCi0gICAgNDcwNywgNjgyMDYsIDEwMTQzLCA3ODgzLCAxMjcwODEsIDc4ODAsIDQ1MjIsIDg2NDUsIDU3MDQsIDEzMDEwLCAwLCA4MzA0LCAKLSAgICA5MTc1NjEsIDAsIDExOTU3NSwgMjI5MywgMCwgNjY2NTQsIDAsIDkyNjc2LCAwLCAxMzAwOCwgMCwgNDM4NSwgMCwgMTMwMTEsIAotICAgIDAsIDkyNTY5LCAxMTkxNjEsIDEzMDA5LCAxNjAsIDI2NzcsIDAsIDAsIDQxNzkzLCA2NTc2MywgNzQyMjEsIDEyMDE0MSwgCi0gICAgNDE3OTIsIDQyNzcwLCA5NDA1NCwgNjU3NjIsIDExODgyOSwgNDM4MjEsIDU3MDksIDAsIDk0MDUzLCA0MzgxNiwgMCwgMCwgCi0gICAgMTA3OSwgMzg2NywgNTcwOCwgMCwgMCwgNDM3OTcsIDU3MDYsIDY0NzY4LCA1NzA1LCA4NzkxLCA0MDA1LCAwLCAxMDIzNywgCi0gICAgMTA5OTEsIDEyODgxNiwgNDM0NTksIDkxNzMsIDkxNzU4MSwgOTE3NTgwLCAxMzE3MCwgMTI1NDAsIDkxNzU3NywgNDI2MDUsIAotICAgIDEyMDc2NSwgMTI2NjE3LCA2ODY0NywgOTE3NTcyLCAxMDA1OCwgMCwgNzQ4NjcsIDE5NDY1NCwgMTI3MDc4LCAzMzM5LCAKLSAgICAxMTQ0OCwgMTEwNiwgOTE3NTkxLCA5MTc1OTAsIDkxNzU5MywgMzM0MCwgOTE3NTg3LCA5MTc1ODYsIDkxNzU4OSwgCi0gICAgOTE3NTg4LCAxMjA1NDEsIDEwNjA1LCAxMzA5LCA2Mzk2NiwgMTIwNzQzLCAxNzU0LCA5MjIyNiwgMTMyNDYsIDg2NCwgMCwgCi0gICAgMTE4OTI2LCA4OTcyLCAwLCA3ODQ5LCAxMjAwOTIsIDkyNTMzLCAxMzI0MCwgMTk1MDY4LCA1MTkyLCA0MzM4LCA2Nzk4MiwgCi0gICAgMTA5NDgsIDkxNzYwMSwgMTMxOTksIDkyNTc1LCAxMjM2LCAxMzIwOCwgMTMyNjEsIDEzMTg5LCAxMzE4OCwgOTM5OTMsIDAsIAotICAgIDc0NDAsIDAsIDEyMDE1MywgOTU1MywgMTU5MCwgNjM3NzcsIDYzNzc2LCAxMzE3OCwgNjM3ODIsIDYzNzgxLCA2Mzc4MCwgCi0gICAgNjM3NzksIDE1ODMsIDAsIDEzMjYwLCA0NTUwLCAwLCA2NDIwNSwgMCwgMCwgNDE1MjIsIDk4MzkwNiwgOTIxNjgsIAotICAgIDk4Mzc2MywgOTE3ODU4LCAxMTM1NCwgOTQwNzEsIDAsIDQyNzk1LCAwLCAxMTkxOTUsIDExMzk0LCAxOTQ2NDYsIDEzMjM2LCAKLSAgICAxMzI3MiwgMTMxOTQsIDEzMzQsIDY5OTI2LCA0NDc5LCAxMTc4LCA2NTU4NiwgMTIwNjYzLCA2NjY4MSwgMTE5MTkzLCAKLSAgICA0NjAxLCAwLCAwLCA5ODM3NTYsIDAsIDAsIDE5NDY1OCwgMCwgNjgwOSwgNjM3ODYsIDYwMzEsIDAsIDYzNzkxLCA2Mzc5MCwgCi0gICAgMTE0NSwgNjM3ODgsIDc5MTAsIDYzNzg1LCA0MzE1MywgNzU0LCAxMDE5MiwgMTMxMDUsIDgxODMsIDEyMDc0MSwgMjAzNywgCi0gICAgMCwgMCwgMTA3NDcsIDEyNSwgMCwgNjQ4OTAsIDAsIDk4MzEzMSwgMCwgNDE3MTksIDYzNzU4LCAzNTIzLCAxMDc0LCAKLSAgICAxMzI1OCwgOTUzNiwgNzQwNzcsIDAsIDQ0MjcsIDc0MjQyLCA2Mzc1NywgNDMxNDUsIDEyMjE3LCA2Mzc1NCwgNDE1MzIsIAotICAgIDEzNDksIDYzNzUwLCA2Mzc0OSwgMCwgMCwgMCwgNjM3NTMsIDYzODAyLCA0MTA4NCwgMTIwNjIyLCA2ODEzMywgNDE5MzAsIAotICAgIDYzODA1LCA2MzgwNCwgNDM2MzIsIDYzODAxLCA0MTA4MiwgODE0MCwgNjM3OTgsIDYyNjAsIDAsIDAsIDk0MDc0LCA2Mzc5MywgCi0gICAgMTE5ODgsIDM4OTgsIDEyODI0MSwgMTAyMDEsIDEyMjM4LCA2Mzc5NSwgNDIxOTQsIDEwMzY3LCAxMjUyMSwgMTA0MzEsIAotICAgIDQyMTE0LCA0MTkzMiwgMTA2OCwgMCwgMTI1MjMsIDEyOTQ1LCA5ODMzMjEsIDQyMjAzLCA3OTUwLCAxMDgwNCwgNjM3NzEsIAotICAgIDQyNzg3LCA0Mzg2LCAxMjIyNCwgNjk3MywgMjc5MywgMTI0NzUsIDAsIDAsIDYzNzY5LCA5NTMwLCA5ODMxMTksIDEyMjMyLCAKLSAgICAxMzEzNSwgODU5NiwgNTY4MSwgNjM3NjIsIDQ1OTUsIDYzNzYwLCA3OTIsIDAsIDY0ODAzLCAwLCA4NzQyLCAwLCAxMTA1MywgCi0gICAgMTI4Nzk2LCA2Mzc0NCwgMTI4MTA3LCAwLCA3NTg4LCA2Mzc0OCwgMTY5MywgNjM3NDYsIDQzMjA0LCA1MDU1LCA2ODQyNiwgCi0gICAgOTE3ODUzLCAxMDkwLCAxMjA2NzksIDEyODM1NiwgMTE2NjUsIDc0MTMzLCA0NTU4LCA2NTY4NSwgOTUyMywgMCwgMCwgCi0gICAgNzg2ODEsIDExNTEzLCAwLCA2MTU3LCA2Mzc3NSwgNjM3NzQsIDYzNzczLCAxMzE5MSwgMTIxNzAsIDM1MDAsIDMxMzksIDAsIAotICAgIDMxNzAsIDEyNDg1LCAwLCAxMDg3MiwgNzgyNzEsIDEzMDA2LCA2NDQzMywgMCwgMCwgOTQxLCAwLCAwLCAwLCA2NTU0MSwgCi0gICAgMTEwNjMsIDAsIDgyMjgsIDAsIDQyMDY1LCAwLCAwLCA5NDAzOSwgMCwgOTI0NTUsIDczODYsIDAsIDY0NDQ0LCAwLCAKLSAgICAxMTk4NjMsIDQzNjAzLCA5NDA3NSwgNjUzOTcsIDI4OCwgMCwgMCwgMCwgMTAwMjUsIDY5OTE1LCAyOTE4LCAwLCA2NTMwMCwgCi0gICAgMTE5ODcxLCA5ODgzLCA2NDcyNiwgMjc5MCwgNjUzOTUsIDM3OTMsIDAsIDEyNzgyOSwgNjUzOTMsIDAsIDc0MTM4LCAwLCAwLCAKLSAgICAwLCA3NDEzOSwgOTI3MTIsIDY1Mzk0LCAxMTU0OCwgNTI3MCwgMCwgNjUzOTYsIDAsIDY1ODEzLCAxMzI1NiwgMTI4MiwgCi0gICAgMTIwNzcxLCAwLCAwLCAxMDg4OCwgOTgzNjA0LCA2NTI0MiwgMCwgMzMzMCwgMCwgMCwgOTgzOTY1LCAwLCAwLCA3NDI1OSwgCi0gICAgMzMwNCwgNDI3NTMsIDAsIDAsIDAsIDE2MjcsIDAsIDAsIDAsIDUzNzEsIDEzMTE2LCAwLCAxODI2LCAxMTg3OTQsIDAsIAotICAgIDQzMDk0LCA3MDAyMywgNDM2NTAsIDk0MDM3LCAwLCA5MDM1LCAwLCAwLCAxMjgwMDUsIDAsIDkyMjA3LCA2ODEyNSwgMCwgCi0gICAgMTY0LCAwLCA5NDA2NywgOTQwMDAsIDY5NTgsIDAsIDQzMTE2LCAwLCA3MDAxOSwgMTMyNDUsIDAsIDAsIDEyNzM3NiwgMCwgCi0gICAgNzAwMzEsIDEyNzc1NiwgMTI2NjYsIDEzMTc1LCAxMzIwNywgMTIwNDE0LCA2NjAxNCwgMTIwNDI4LCA3NDQ3LCA1OTI5LCAwLCAKLSAgICA2NTUwOSwgMCwgNzQ0OSwgMTEzMDYsIDAsIDczOTIwLCAzMTgwLCAwLCA2MzgwOCwgOTA1NCwgOTcxLCAxMzA2MiwgMCwgMCwgCi0gICAgNjUxOTUsIDEwMTY0LCA5MjI1MiwgNzQ0MjgsIDAsIDc4MTQ2LCA5MjYxMSwgMCwgMCwgMCwgMTAwNDUsIDEyODgyLCAKLSAgICAxMzI3NSwgMTI4MTYxLCAxMTA1NywgMCwgMTMyNzYsIDAsIDQxNTI1LCA3ODE1MCwgNzI3MSwgMTE0NDQsIDAsIDAsIDAsIAotICAgIDEyMjI5LCA0MTUyMywgMCwgNDM0MTEsIDczNzUxLCAwLCA2NDgxMywgMCwgMCwgMTA0NzYsIDM4NTgsIDAsIDM5MzIsIAotICAgIDY0OTU4LCAwLCAwLCA3Mzk4OSwgNjgxOTIsIDAsIDY5ODQ3LCAzNjksIDAsIDQxNzg0LCAwLCA2NDE2MywgMCwgMCwgMCwgCi0gICAgNjU0NzQsIDQ3OTYsIDEyMjkyLCAxMjY1OTUsIDY1NDc5LCAwLCA0MTc4MSwgMTA0ODYsIDQxNDgwLCA0MzAwMiwgOTg5OSwgCi0gICAgMCwgMCwgNDA0LCAxMjgyMSwgMzc0MSwgMCwgNTc4OCwgODA5MiwgNjgyMTIsIDQxMjIyLCAxODMxLCA2NjAyMCwgMzk4MiwgCi0gICAgMCwgNDM4OCwgMCwgNzQ2LCAxMjA3ODQsIDAsIDAsIDEyMDE4LCA2NTI5NCwgMCwgMCwgMCwgMCwgNDQyMiwgNDcwOCwgCi0gICAgMzc5OSwgNzQyOTIsIDExOTM1NywgMCwgNzQ0MzAsIDAsIDExNzAwLCA0Mzc0LCAwLCAxMjgxNzksIDEzNjQsIDAsIDgwMzgsIAotICAgIDAsIDkxNzU5NywgMTI4NjgsIDY5ODE0LCAwLCA2NzM1LCA3Mzk3OSwgMTMxNzQsIDczOTY4LCAxMzIyNSwgMCwgNjk4MDgsIAotICAgIDY1ODM1LCAwLCAyMzY1LCA3ODQxLCAwLCA0Mjg1NSwgMTE4ODU2LCA0Mjg2NiwgMCwgMCwgMCwgNjY0MzgsIDQxNzg1LCAKLSAgICAxMjYxNywgNjQxNzIsIDEzMTczLCA0MzcyLCAxMTkzNTQsIDAsIDk4MzU2OCwgMCwgMCwgOTI0MDIsIDEyODA2MiwgMTI5NjUsIAotICAgIDM4NCwgNjQ1MTIsIDEwNDA0LCAxMDM0MCwgMTE5MzUyLCAxNTU2LCA1Mjc0LCAxMzIxMCwgMTIwMTI1LCAxMDAxNywgOTczMywgCi0gICAgNDE3ODcsIDk4MzIzNywgMTI2OTk0LCA0MTM3MywgNzgwMzksIDEyMzAzLCAwLCAxMzIzMiwgMTMyMzMsIDM0OSwgNDg2MywgCi0gICAgNDEzNzEsIDExNjU2LCAwLCAxMjA3MDMsIDExOTg4MywgMTI4NjEsIDQzOTgsIDg1NDMsIDY1NjE4LCAxMjgwMTgsIDEwOTYsIAotICAgIDAsIDAsIDQyNjg4LCAxMjQ0MSwgMTIzNTUsIDExOTM0OCwgMTE5MzQ3LCA0MzE4LCAxMDQ1MiwgMCwgODAzMiwgMTMyNDMsIAotICAgIDEzMjM3LCAxMjcxOSwgMTI2NjQ2LCAxMTkxMDEsIDAsIDY0ODg0LCAxMTk4NzIsIDExOTM0NSwgODU5NywgMCwgMCwgOTg2NCwgCi0gICAgMCwgMTIwNzg1LCAxMTk4NzQsIDk0MTA3LCAxMzE5NSwgNDE0NTIsIDY0OTYxLCA3NzIyLCAwLCAxMDQ1OSwgMTE5ODc4LCAwLCAKLSAgICAxMTk4NzksIDY2NTkwLCAxMjgxMjMsIDQxNTMzLCA2NjMzNywgMCwgOTIxODQsIDAsIDQ5NjUsIDQzNDQ1LCA5MTc1MzYsIAotICAgIDczODQ5LCAwLCA0MzYzOCwgNzg1MzcsIDEyODI4NywgNjI2MSwgMTE5MzQyLCA0MzE0NywgNjY1NzAsIDE5NTcsIDEwNDIwLCAKLSAgICA5ODIsIDI3NTYsIDEzMjkyLCAxMzIwNiwgMTI4ODI4LCAwLCAyOTI1LCA3MzgwOSwgMTMwNTYsIDEyNzU1OSwgMTMyMTIsIAotICAgIDQzMjM4LCAwLCAxMzE5MCwgMTMxODcsIDkyNTQxLCAxMzE5OCwgMTE4NzkzLCAwLCA1MjQyLCAxMTkxNzksIDY0NDc2LCAKLSAgICAxNjk0LCA4MjE2LCA3MTM2OSwgNjc3MCwgNDMzMzEsIDAsIDY1NjIwLCA5ODM3MTksIDQzNTQ0LCAxMjY0NjYsIDAsIAotICAgIDQxNDQ0LCA2NTYyMSwgNjk5NTUsIDkxOTcsIDUyNDYsIDExOTEwNiwgMTMxODUsIDk3MDksIDEyMDMyMywgMTIwMzIyLCAKLSAgICAxMjMxNCwgNjU2MTYsIDUyMzgsIDExOTMzMywgMCwgMTE5MzM3LCA1MjM2LCA0MDk3OSwgMCwgNzQyMDEsIDgyODYsIAotICAgIDEyODUzNywgMzkzNiwgMTE5MzMxLCAxMTY5OSwgNDEzNDcsIDEyNzI0OSwgMTMyMzUsIDg4NDIsIDQxMjQ4LCAwLCA0Mzc5LCAKLSAgICAxMzIzOSwgMTI2OTIsIDc5NjksIDEyNzI2NiwgNzIxOSwgMTI3MjUwLCAxMjgyNTEsIDEyMDUwOSwgMCwgNjYyMjQsIDczNCwgCi0gICAgMjk3OSwgMTIwMzAzLCA2NTYxOSwgOTg3MiwgOTU3LCA2NDkyMSwgMTg0NiwgNjY2MzEsIDQxNDc3LCAxMTkyNTYsIAotICAgIDEyMDMxMCwgNzQ1MTEsIDQxNzcwLCAxNjcwLCA2NDQyLCAxMjAzMTcsIDQyNDQ2LCA1Mzc5LCAxMjAzMTgsIDQxMTYzLCAKLSAgICA3NDgzMiwgMTIwMzE1LCAxMjAzMTQsIDExNTA2LCAwLCA0Mjg0MSwgMTMyNjcsIDAsIDAsIDQxNzc1LCAwLCA3MTMwLCAKLSAgICA0MTc3MywgMCwgMTA2NjMsIDAsIDAsIDAsIDYxNTEsIDEyMTEwLCA0MjY3MywgNjU1NzIsIDY1MjkzLCA2NTI1MCwgMTMyNjUsIAotICAgIDEzMjY0LCA2NDUxOCwgMCwgNjEwMCwgMCwgOTI2NDcsIDU4MDgsIDY1OTIyLCAwLCAxMjk2NywgNjYwNDEsIDU2MTIsIAotICAgIDQ1ODMsIDAsIDAsIDY4MDk3LCA2NDU3NSwgMTI2NjM3LCAxMTk2NSwgMCwgNjgzNTgsIDAsIDY5Nzg5LCAwLCA5MjI2MCwgCi0gICAgNjgxMDIsIDk2OTgsIDc4MTQsIDc0NDc2LCAxMTk2NTEsIDEyODUxNCwgMCwgNDE5MjEsIDExODg1OCwgOTc1NiwgNjk4NSwgCi0gICAgMTE5MjU4LCA3ODQ5MCwgNzQyMTksIDAsIDAsIDExODk5NywgODAxMiwgNTY3NCwgMTIzNTMsIDAsIDEyMzYxLCA1Njc3LCAKLSAgICA1NTg4LCAwLCA0MTkyNSwgMTI4MTI0LCA0MTkyMCwgNTY3MywgMTIwNTM0LCA1Njc2LCA0MTkyMywgMTI2OTQsIDExODk3OCwgCi0gICAgNTY3MiwgMTI5NCwgMCwgNzgwNTksIDAsIDQyNTExLCAxNzI3LCAxMjA3MjUsIDQyNDM2LCAwLCAwLCAwLCA3NDIyMiwgCi0gICAgODcxOCwgMzU1MCwgNzM2LCAxMDI2OCwgNDUwNSwgMTAzMTYsIDc0MDkwLCA1ODI2LCA1NTIzMiwgNTgxMywgMCwgMTIwNzEyLCAKLSAgICA1ODQxLCA1ODM3LCA1NTIzNCwgMCwgMzEwNSwgMTI4MjksIDU4MzgsIDU3OTYsIDAsIDExOTU5MiwgNTc5MywgMCwgNTg2NiwgCi0gICAgNTc5NywgNDEwMTEsIDU4NjUsIDEyMDA5MSwgNzk1NiwgNTk4LCAwLCA2NDY0OSwgNTgwNiwgNDIzOTgsIDAsIDkwMzcsIAotICAgIDU2NzEsIDEyMDA0MSwgMCwgMCwgMCwgMTI4ODU1LCAwLCA4NDcsIDEyODI0MiwgOTUyOSwgMCwgNjY2NTcsIDY5ODAsIAotICAgIDc4NDgzLCAxMjAwMzUsIDc4NDg0LCA5ODM0ODMsIDAsIDEyMDAzMywgNzg0ODYsIDAsIDAsIDEyMDAzOSwgNDI2ODMsIDAsIAotICAgIDk4MzA1NSwgNzExNCwgMCwgMCwgNDMxOTAsIDY1NDYzLCAxNTU0LCAwLCA0MjYxMSwgNDI1NjMsIDAsIDU2NTEsIDI5MjksIAotICAgIDY3OTIsIDQzMjAxLCAwLCAxOTk2MywgNTY5OCwgMCwgMCwgMCwgMCwgNTY0NCwgMTAyOTIsIDY1NTQ2LCA2OTcyNywgCi0gICAgNjgxNDEsIDgzNzIsIDAsIDY1MTE2LCAwLCAxMjAwMjIsIDEwMTc1LCAxMDM4OCwgNDI3OTksIDk0MTAwLCA0MTAxMywgCi0gICAgMTA1NjgsIDAsIDk4MzYxOCwgMjg2OSwgMCwgNDEwMTUsIDE5NDY5MiwgMjc4NSwgNDM2NiwgMCwgMTA5NTQsIDQxODAyLCAwLCAKLSAgICA0MjYwOCwgNzg0NjksIDk4ODQsIDQ3NTksIDAsIDAsIDEwMjY2LCA0MTM1OSwgMTE3MCwgNDMzNjUsIDY5ODEwLCA3MzkwOCwgCi0gICAgMTYwOSwgOTAyLCAwLCA2MzkzNiwgMTI4ODc1LCAxMTY2MSwgODEyMiwgNTgxOCwgMCwgMCwgMzg2MSwgOTU0MCwgMTEwMjgsIAotICAgIDI1NTQsIDUxNTgsIDU3MTQsIDIyMTMsIDAsIDAsIDgwNywgNDMwNzksIDAsIDc4NDc1LCA5NzYsIDU1MTEsIDY0NTUzLCAwLCAKLSAgICA0MjE1NSwgMCwgNDEzNTYsIDc0MTEwLCAxMTg4MDEsIDEyNjYxNCwgMCwgODY3NiwgOTgzMjgzLCAwLCA1NTgyLCA0NTEsIAotICAgIDYzOTQxLCA1Nzk4LCA5MzQ5LCA0MjAxOCwgMTI3ODU4LCAwLCAwLCA0MzYwOSwgNTkwNiwgMTIwNTUzLCAxNDQwLCAwLCAKLSAgICAxMjg4NTMsIDEyMDAxNiwgNzQyODMsIDExMDA1LCAwLCA2NjY1NiwgNjYwNDQsIDAsIDE5NDY5OCwgMCwgMCwgNDMzOTMsIAotICAgIDEwMDk0LCAwLCAxMTUyOSwgMTA4NTcsIDEyMDY0MywgNjY0MzYsIDY1NDYsIDkzLCA4MTAyLCAwLCA2ODQwNSwgMCwgMCwgCi0gICAgODE3MSwgMCwgMTE5MDk3LCAxMjcwNjQsIDkxNzU0MywgMzgzLCA3MTU0LCA0MTY1NiwgOTI2MzQsIDk0MDQwLCAwLCA1MTg3LCAKLSAgICA3MTI5NiwgMTI3Mjc3LCAxMTI4NiwgNjg2MjAsIDY0MjE3LCAwLCA1MjMyLCAwLCA0MTAwOSwgMCwgNDEwMDUsIDAsIDAsIAotICAgIDk4MzgxOCwgODI5MiwgMTk1MDc0LCA0OTgwLCA4ODYwLCA3Mzk0NywgMTAwMjgsIDY1MjkxLCA3MDc2LCAxMzE4MiwgCi0gICAgMTk0NzA1LCAwLCAwLCAxMDYzMSwgNjYwMzEsIDc5NzIsIDAsIDc4Nzg1LCAwLCA3OTAwLCAwLCAxMTMwOSwgMzgwNiwgCi0gICAgNDE5OCwgNDI3MjUsIDAsIDY3NjU2LCA5OTk1LCAwLCA5MjU1MiwgMCwgMTI5MzEsIDAsIDQyNjg0LCA3NDI4NSwgMjA4OCwgCi0gICAgNjQyMTMsIDY0MzY2LCA2NTE1NiwgODgxNCwgNDIyMzgsIDc0NzcxLCAwLCAwLCAxMjgzNiwgMCwgMCwgNzQzNDIsIDg1OTMsIAotICAgIDAsIDAsIDY4NDQ1LCAxMzI1NSwgMCwgMCwgNzQ2NCwgMCwgNjU4NjUsIDAsIDE5NDY1MCwgMTI3MTQ0LCAwLCA5MzQyLCAKLSAgICAxMjA0NjQsIDAsIDY0NTE2LCAwLCA3ODc5MiwgMTAxMjksIDQxMDA3LCA3NDM3NSwgMCwgNDA5OTUsIDEyMjA5LCA0MTAxMiwgCi0gICAgMTE5MTM2LCAwLCAwLCA2OTcyNCwgNDA5OTIsIDkyMjY0LCAxMjcxNTMsIDY4NjUzLCA0MzU1OCwgNTUyMiwgMCwgNjEsIDAsIAotICAgIDc0MTA1LCAzNjMzLCA5ODM4OTEsIDY1MTYyLCA0MTIzNCwgMTIwODksIDc4MjgxLCA5NzcxLCA5ODM4OTYsIDEzMjUxLCAKLSAgICAxMjg3MDEsIDAsIDYyNjIsIDI3ODQsIDQyNzQzLCAwLCA4MTI2LCA2NjQ4MywgMCwgMCwgNDQxLCA0MjYyMSwgMCwgMCwgCi0gICAgNDEwMDIsIDQwOTk5LCAxMTk2MjMsIDQzMjY2LCA3MTA4LCAxOTQ3NzksIDEwODkwLCA3NDQ4MSwgNjU4MzQsIDgzMjQsIAotICAgIDExOTEwMywgNjQ0MTcsIDc0ODE3LCAxMjc0NjUsIDY0NzM3LCAwLCA5ODM2NTAsIDg5MzAsIDY2Njc4LCA3NDI0OSwgMTE5MywgCi0gICAgMTAwNTYsIDE4MDAsIDEzMjUzLCAxMzI1MiwgNzgyOSwgMCwgMCwgNzc0MywgMCwgMCwgNzc5MDQsIDkyNjQwLCA3NzkwNSwgCi0gICAgOTAzNCwgNjAzOSwgMCwgMTAwNzUsIDAsIDQxMDE4LCA2NTY4MywgMTAzMzgsIDY2NDY5LCAwLCAwLCAwLCA0MjgxNSwgMCwgCi0gICAgNDE5NjYsIDAsIDEyNzQ3MSwgMCwgMTE3OTIsIDQzMDY0LCA0MTAyNSwgOTExLCA3NTM5LCAwLCAwLCAxMjAzMzksIDY1MTU5LCAKLSAgICA2NDM5MCwgMCwgMCwgNTUyMCwgMTE2NjIsIDAsIDY1MzMwLCA0MjgxMiwgMCwgMCwgMTIzMjYsIDk4Mzg0NywgMCwgNDI4MDgsIAotICAgIDEyODMzNywgOTM0OCwgNjQ5MDEsIDk4Mzg1MiwgMCwgMCwgMCwgMCwgMCwgOTE3NTg0LCA0MzcwMiwgOTgzNTc2LCA1ODU3LCAKLSAgICA2NTM0MiwgOTI3MjcsIDExOTEyMCwgMTIwMDc5LCA4NjQ0LCAwLCAwLCAwLCA3NDI5NiwgNDE5MDksIDAsIDEyMDMzMiwgCi0gICAgMjc5MSwgNjk2NjMsIDE4OTEsIDY5ODI0LCAwLCA0MTkwNywgNjY2NDcsIDExODkzOSwgODc2MSwgMTI5NDIsIDU3NDgsIDAsIAotICAgIDEwNzczLCAwLCAwLCA4Nzk2LCA3ODE0OSwgNjQxMiwgMjA2MSwgODUyMCwgMTMxNDYsIDEyNzE4NSwgNjM5MzEsIDAsIAotICAgIDY1OTAyLCAyODgyLCAwLCAwLCAxMjg0MywgNDUyMCwgMTIwMzQ1LCA5MjQ1OSwgMCwgOTgzNjUxLCAwLCA3Mzg2MCwgMCwgMCwgCi0gICAgNjQzNDUsIDAsIDkyMDEsIDEyODMxNCwgMTk0OTQwLCAwLCAwLCA0MzY3OSwgOTE3NTg1LCA2NTExNywgOTIyNzAsIDAsIAotICAgIDEwNDI3LCAwLCAzODQ0LCAxMjA2NzUsIDk3NTUsIDExMTAsIDY2MTIsIDEyMjIyLCAwLCAxMjg3ODksIDAsIDAsIDc4MywgCi0gICAgMTk0OTM1LCAwLCAwLCA5ODMwNjQsIDE5NDcyMCwgNjUwNTYsIDM2MjAsIDQxMTgwLCA2ODM3OCwgNDU1NiwgMCwgMCwgCi0gICAgMTk0OTMzLCA3NDI1MCwgMCwgNjc2NTcsIDEwNTEwLCA0MzgyLCA2NjQ4MiwgMCwgMCwgMTI3NTI3LCA5MTc3LCA4OTAyLCAKLSAgICA5Mzk1OCwgOTgzOSwgMCwgMTI4OTEsIDk4Mzc0NiwgOTgzNjI3LCA2Mzk5OSwgMjAxNiwgNDE5MTcsIDk3ODgsIDYzOTI4LCAKLSAgICAwLCAxODYyLCA2NTgwMCwgOTE1NSwgNjY2MjMsIDk3ODYsIDY1MDgyLCA0MTkxOSwgODU3OSwgNDE5MTQsIDc5ODEsIDAsIAotICAgIDY2MDE3LCA0NTA4LCA2NDg4MywgOTI0NTYsIDkyNTIyLCAxMjc4MTQsIDAsIDY0NTkyLCA3NDI3NiwgMTIwMDgwLCA2Nzg0LCAKLSAgICA3ODc4OCwgNjgxODEsIDAsIDAsIDAsIDEyNzUzNCwgMTIxNDcsIDkwMjQsIDY2Mzc4LCA2NjQ3MiwgOTgzOTIwLCA2NDI4OSwgCi0gICAgNjUyODksIDc4MTUxLCA2NjY1OCwgMTk0OTI5LCA2NDUwOSwgNzgxNTIsIDAsIDEyNjUwNSwgMTEwNTEsIDk4MzI4OCwgMCwgCi0gICAgMTEzNTUsIDY1ODg1LCAwLCAxMjgzMTAsIDQxMjE0LCAwLCAxMjI5OSwgMCwgNzUwMCwgNDUwNiwgNzc3MywgMCwgMCwgCi0gICAgOTk2MywgNjg2NDksIDEyNjYwOSwgNDA0MCwgMTIwNTcwLCA2MTY3LCAwLCA2MzkyMiwgNjU5NCwgOTgzNzMxLCAwLCAwLCAKLSAgICAzNjI0LCA0MzAzNiwgMCwgNjM4NywgNjM5OTAsIDE5OTQ3LCA2Mzk4OCwgNDE5NTUsIDAsIDYzOTkzLCAxMDQ0MCwgOTYxMSwgCi0gICAgNjU2MDUsIDY4MDMsIDAsIDc3MzgsIDYzOTg2LCAxMTQ0NiwgNjM5ODQsIDkyNjQxLCAzNDM1LCA3ODE2NCwgNDM4MTQsIAotICAgIDQzODEwLCA3MDI5LCA2NDI1OCwgNDEyOTIsIDExODg5OCwgMTI3NDgsIDQyNzQyLCA5NTE3LCAxMTUxOCwgMCwgNzg3OTAsIAotICAgIDAsIDY3OTkzLCA2Mzk1NiwgNDI0NTgsIDYzOTU0LCA2Mzk1MywgNjM5NjAsIDk1OTEsIDQ1MTYsIDEwMjE3LCA2ODM3MCwgCi0gICAgMTE0NjksIDY5Njk3LCA0MjMwNiwgMjcyMywgMTE4OTQ3LCAwLCAwLCAwLCAwLCAwLCAxMTM5NywgMjg4MCwgMCwgMCwgCi0gICAgMjg3MiwgMCwgMCwgMzQ5OCwgNDM3OCwgOTE3NTM5LCA0MjcwLCAwLCA2NTU1MSwgNjgyMDUsIDY2MzMsIDQzMzg3LCAwLCAKLSAgICA1MjMwLCAwLCAwLCAwLCAwLCAwLCA4MTYxLCAzOTMsIDEyMDEzLCAwLCAwLCAxMjY0NzksIDQxNSwgNjM5NjQsIDYzOTYzLCAKLSAgICA0MjM0NSwgOTIzMTAsIDUxODMsIDE4NzcsIDQyNDk4LCAwLCAyOTI3LCAwLCA2Mzk2MSwgNDQ3MiwgMCwgMCwgNzgxNTksIAotICAgIDY5Njk5LCA5MTc5MzYsIDQyMzQwLCA0NzU2LCAxMjgwNzgsIDcwODEsIDEwNzMwLCA3NjkxLCAxMDMzMSwgNjM4MzAsIAotICAgIDExOTYyNSwgNDI5MjIsIDQyMTAzLCA4NjI4LCA5ODEzLCAwLCA0MjQ1MywgMTYwNCwgOTU2NSwgMTA1MzksIDY5NzAxLCAKLSAgICA2NTc2NCwgNDE0MTUsIDY1NzY3LCAwLCA4NDU3LCA0MjMwMSwgMTEzNzIsIDY0ODczLCAxMTk5MiwgMCwgMCwgNjM5ODAsIAotICAgIDExODAxLCAzNjIyLCA5ODMxMjQsIDY0MzM2LCAxMjAxNywgMTA0NjMsIDYzOTgxLCA0OTY3LCA2NDE4OSwgMTk2NiwgCi0gICAgNDM2MjgsIDAsIDk4MzI4NCwgMCwgMCwgNjM5NzEsIDQzNDcsIDQ0MTYsIDQyMDk4LCAxMTAwOSwgMTA2OTQsIDYzOTczLCAKLSAgICA0MDIsIDAsIDEzMTQ3LCAxMjg2OTIsIDQyMTAwLCA2NDY0NiwgMTMyMjgsIDAsIDQxODc1LCAzNTE1LCA3NDI1MiwgMTE4MDUsIAotICAgIDAsIDExMzAyLCA2MjU5LCA0MzM5NSwgMCwgMCwgMTk0NjcwLCAwLCA5MjM1MSwgMCwgNzQ0MjUsIDExMjk5LCAxNTYxLCAwLCAKLSAgICA5MjM1OSwgNjQ5NDIsIDk4MzU1OSwgMTk0NzMzLCA5ODM2NzcsIDE5NDczMiwgMCwgNzQzMDEsIDAsIDExMjgwLCAwLCAKLSAgICA2OTc4NCwgNzQwNjAsIDAsIDAsIDExOTY2NCwgNTE0NSwgMTI0ODYsIDY1MDE4LCA2NjUxNiwgNTQwOSwgMTI3Mzc5LCAKLSAgICAxOTQ2NjksIDc0MDIsIDUzOTksIDk2ODUsIDc0MDg5LCA3OTUyLCA1NDAxLCAwLCA2NjYxNiwgNjg0MjEsIDk4MzkxMCwgMCwgCi0gICAgNTQwNSwgMTI3ODc1LCA2NDg2NiwgMCwgMTE5NTgzLCAxMjgzNDUsIDc4Nzg0LCA3NDI0OCwgMTEzMzAsIDE5NDcyMywgCi0gICAgNjQ2OTAsIDMyNTQsIDAsIDAsIDEyODIwNywgNDIzOTAsIDQzNjc4LCAxOTQ3MjUsIDk4MzkwMCwgNjUwNzcsIDAsIDYzODgsIAotICAgIDMzNTUsIDk1MDgsIDk4NjcsIDU3MjMsIDExNTIwLCA1NjExLCAwLCAzMzc3LCAwLCAwLCAwLCAwLCA3ODIyOCwgMCwgCi0gICAgOTgzNzUzLCA0MjY5MSwgOTE3ODg2LCAxMjcxOTgsIDc0NzY3LCAwLCAxMjcwNzUsIDEzNzksIDI0NiwgMCwgOTgzNzUyLCAKLSAgICAzNzg4LCA5ODMxMDYsIDExMDQxLCA5MjU0OSwgNjYzMDQsIDAsIDAsIDg5MTcsIDQyNDAzLCAzMDEsIDAsIDAsIDAsIDAsIDAsIAotICAgIDk4MzY4OCwgMTA2NTYsIDAsIDY1MjE0LCAxMTkyNDIsIDQyNTY3LCA5MjIxNywgMTMxNjMsIDk4MzIwMiwgMTIwODMxLCAKLSAgICA3NDU5NywgMzE4MiwgMCwgMCwgMCwgNjUwMzQsIDY1ODg5LCA0MjE2OSwgNDc1NSwgNzQyNDQsIDE5NDYyMSwgMTE0NDMsIDAsIAotICAgIDY2MzE5LCA3NDU5OCwgNjA4LCA2MDAsIDAsIDEyMTksIDM5MzQsIDY0MjA2LCAxMTQ4MywgNzQ1MTAsIDAsIDc0NDg1LCAKLSAgICA0MjQ0MiwgNjU0NzAsIDk4Mzg5OCwgNjQyMDIsIDEzMTYwLCA3NzU5LCA0MjQ4MiwgNDg1LCAxMjgwMDYsIDAsIDk4MjgsIDAsIAotICAgIDAsIDQyMjgwLCAwLCA5MzUxLCA3Nzc4LCA2NDM3OSwgNzQ5NiwgNDI0MzEsIDY5MTYsIDEyMDgsIDAsIDExOTYzMSwgCi0gICAgMTEwMDIsIDQyNDcwLCAwLCAxMTg5NDYsIDAsIDAsIDc0MDQxLCAwLCA3MDA0NSwgNDM1MzksIDU0MTEsIDQyMTk2LCAwLCAwLCAKLSAgICAwLCA5MTUwLCAwLCA0MjM5MywgMTMwODYsIDEzMTAsIDE5NDY4NywgOTMzNywgMTIwNTIsIDEwNjQzLCA1NTI3MSwgCi0gICAgOTgzMTc5LCAxMjE2NiwgMjU0NiwgMTk0NjgzLCAyMTMsIDExODg1MiwgNjU2MTEsIDAsIDAsIDE5NDc1NiwgNzQzMTAsIAotICAgIDY1NTQsIDAsIDExOTE0LCA1NDUyLCAwLCAwLCAwLCAwLCAwLCAxOTQ2ODEsIDkyNTYwLCAyNzEzLCAwLCA5NjUwLCA0MzMzMCwgCi0gICAgMCwgMTk0Njc1LCAxNDA2LCAwLCAwLCA5MjY1OSwgMCwgNjgyMjMsIDQxNDMsIDE5NDY3NywgMCwgNjU3NDgsIDQxNDEsIAotICAgIDk2ODIsIDY1Mjg3LCAxNTA4LCAxMjcwMTMsIDg3NzksIDEwNTY5LCA4NzI1LCAxMzI5OSwgNjY2MzgsIDY1NzUwLCA0MjI2MywgCi0gICAgNDE0NSwgNjM4MCwgNjU3NTEsIDY2NjEzLCA0Mzk5NCwgNjU3MzgsIDU1MjUwLCA5MTg1LCA5NTUwLCAwLCA0MzQwMywgMCwgCi0gICAgMCwgMCwgNjU3MzYsIDQxOTUxLCA2NDgxNiwgNjU3NTYsIDk4MzIwMywgMTI5NTUsIDEwNTk2LCAyODg4LCAxOTQ2NDUsIDAsIAotICAgIDAsIDk2NTcsIDkwMTksIDE5NDc2NiwgMCwgMjg3OCwgNTM5MCwgMCwgMTk0OTYxLCAwLCA2ODY3OSwgNDM1NTIsIDc1MDEsIAotICAgIDYzMjgsIDAsIDEwNDI5LCAxMDM2NSwgMCwgMCwgNDE5NDYsIDc1MDMsIDUyMzUsIDgwMywgNjgzODEsIDAsIDAsIDg5ODYsIAotICAgIDEyNjU0MiwgMTA2MzIsIDExOTM0LCAxMTQ1MiwgMTMzMiwgMCwgMCwgMTI2NjQ3LCAwLCAxMTg4ODcsIDE3OTEsIDUxOTEsIAotICAgIDkyODgsIDY0ODIyLCAyODkyLCAwLCA0MzM5NCwgNTU1LCAwLCAwLCA2NjY0NiwgMCwgMTE5MDAyLCAxMzE1MSwgNzQ1MTIsIAotICAgIDcyODksIDc0MDU1LCA2NDE2MSwgODg1NCwgNjQxNjIsIDU4NTgsIDQxOTI3LCAxMDU4MiwgMCwgMTc4NCwgMTM2MSwgCi0gICAgMTk1MDQ3LCAwLCA3OTA1LCAwLCA2NDg2OCwgMTI4ODEzLCAxMzE1OCwgOTIxNjYsIDcyMTEsIDAsIDkzNzEsIDczOTczLCAKLSAgICA5MTc1NTMsIDY4MjgsIDE2MjUsIDkyMzAyLCAwLCAxMzQyLCA2ODQ0MCwgNjQxNzEsIDEyNjcwNCwgMTA5MDMsIDk4MzQ4NiwgCi0gICAgMCwgMCwgMCwgMCwgNDQ4MiwgNDE2MDYsIDAsIDEyODU2OSwgOTgzMTEyLCAwLCA2NDM4MSwgMCwgMCwgMTk1MDkwLCAKLSAgICA0MjI0NSwgMTI2NDY3LCA0MTk3MiwgMCwgNDQ0LCAwLCA5MTI3LCA2NjY4NywgNjY2MTksIDEyNjQ4OSwgNzgwMjUsIDAsIAotICAgIDExMzQ5LCA0MDk5MSwgOTE3NTcwLCAwLCAxMTk1OTksIDEyMDgzMCwgMCwgMTE5NywgMTI4MjgyLCAxMTQ5LCAxOTQ5NzAsIAotICAgIDAsIDAsIDQwOTkwLCA0Mzc2NSwgMCwgMzQ5MiwgMCwgMTI3OTQyLCAwLCAwLCAwLCAxMjgzOCwgOTgzOTY5LCAxOTk0OCwgMCwgCi0gICAgMzA5OSwgMCwgMCwgNDEwODcsIDAsIDAsIDAsIDExOTA1OSwgMTIwMzYsIDQxMzA5LCAwLCAwLCA4MTUyLCAwLCA0MTU1MCwgCi0gICAgMTIyMjcsIDk4MzYxMywgMCwgMTI4MjgsIDEyNzUxMSwgMCwgMCwgMTIwNzA4LCAwLCAwLCAxMDM4NiwgMTE5NTc0LCAwLCAwLCAKLSAgICA5MjY4MCwgOTgzNzgwLCA2ODE1NCwgMCwgMTc0MywgMCwgMCwgOTIyMzksIDY1MTg2LCA5MTc1NzEsIDAsIDk2MDYsIDAsIDAsIAotICAgIDY0NDM5LCAwLCAwLCA5MjY4NiwgMCwgMCwgMTk0OTY3LCAwLCAwLCAzMzk1LCA5MzYyLCAxMDg3OCwgMCwgMCwgNzgzNjIsIAotICAgIDY0ODMwLCAwLCAxMjY1NTcsIDQxMDkxLCAzNDI2LCAxMzQ0LCA4ODcwLCAwLCAwLCA0NzM1LCAxMjcwMTcsIDYxMTksIAotICAgIDEyODIyLCA0MjY5OSwgMCwgOTgzODE1LCA3NDgxOCwgMTQyMywgMCwgNDI2MzcsIDQxMDgwLCAwLCAxMjAzOSwgMTA1NTksIAotICAgIDAsIDExODg5MiwgMCwgOTQ3MiwgMCwgMTE5MjksIDAsIDcxNzAsIDk1OTYsIDYxMzAsIDEyODgyNiwgNDM2MjksIDExNTc5LCAKLSAgICA3ODcxMywgMCwgMTk0NzQwLCAxMjg2OTEsIDkyMTg1LCA2NjY5OSwgNjQ0NDAsIDEwMDQsIDkyNTg0LCAxOTQ3MzcsIAotICAgIDQzMjM0LCA2NjAwOCwgMTI2MjcsIDAsIDY4NDE0LCAwLCA0MzYxOSwgNDMzMDMsIDExMzAwLCA0MzMwNCwgOTY4NiwgNTg5MCwgCi0gICAgMTE3NzYsIDc1NTgsIDEyNzE1OCwgNjU2MjcsIDAsIDEwNzE4LCAxMzE1NCwgMzQ2MSwgOTEzOSwgMCwgMCwgMCwgMCwgCi0gICAgNjUzNjUsIDczODc3LCA2NTYyOCwgNzgwMTksIDEyMDMxOSwgMCwgNDE3MDgsIDEyODYwLCAyNjQxLCAxMjA2OSwgMTA4MzgsIAotICAgIDU0MDMsIDEwMzUyLCA3MDA4NSwgMTAwNjEsIDQzMjM3LCAwLCA1MTQwLCAyMDksIDEyODg0NywgNDE3MDQsIDQxMDU2LCAKLSAgICA0MzA3OCwgMTI4MTI1LCAxMTg4MDksIDAsIDEwODk5LCA2NTQ2OSwgOTIzNjIsIDAsIDAsIDI0MTAsIDk5MywgMCwgCi0gICAgMTIwNTg5LCAxMjA2ODksIDc4NjkzLCAwLCAwLCA3MjMyLCAwLCAxMTkyNTMsIDAsIDcxMTAsIDc0NDYyLCAyMDY2LCAKLSAgICAxMDQ4OSwgNDIxNjYsIDQzNDYzLCAxMDY1OSwgMzYwMCwgMCwgNDIyNCwgMTMzNiwgNDE1MTgsIDAsIDAsIDAsIDAsIAotICAgIDQxMTM5LCA2NDgyMCwgOTI1MzgsIDEyOTY2LCA0MTEzNCwgMCwgMCwgMCwgMCwgMjcyLCA0MjYzLCA4NzkzLCAwLCAwLCAKLSAgICA0MTUwMiwgMCwgOTgzLCAxMjU0OSwgMCwgMCwgMTE5MCwgNDEwOSwgMTMzNSwgODQxLCA1ODg4LCA0MTM1OCwgNjQ4NjMsIAotICAgIDk1NDQsIDQzNDgxLCAwLCAxOTQ4MDYsIDcwMDI3LCAyMDk5LCA1MTIwLCAyNDA5LCA3Nzk5LCAwLCA3NDQyNCwgMCwgMCwgCi0gICAgNDczMSwgMCwgNjY2MjksIDAsIDAsIDEyNTUsIDQxNDksIDkyNDcsIDAsIDk5MTMsIDAsIDAsIDY0OTE0LCA5MTc3ODcsIAotICAgIDY1MTAxLCAwLCAxMTY5NCwgOTI0NzUsIDExNjkwLCA1ODM1LCAxMjcxNjQsIDY2NjI1LCAxMDg0MiwgNDEzNTQsIDQyMTIzLCAKLSAgICA0MzA5NywgMTE2ODgsIDY2NjM0LCAxMDk0LCAxOTQsIDY0NjkyLCAwLCA4MTgwLCAwLCAwLCA5OTcyLCA3Mzg2NSwgNDUxOSwgCi0gICAgNjExNCwgMTA4OTgsIDQzMDcyLCAwLCAwLCA5Mzk2MCwgOTgzMzE0LCAxMjY1ODEsIDEwNjk1LCAwLCA3NTQwLCAwLCA4ODEsIAotICAgIDc4NTcsIDYwNjcsIDY1MTY0LCAwLCAwLCAwLCAxMzMxMSwgNjg0MDMsIDQxODU3LCA2NDMyMSwgODM1OSwgMCwgMTI2ODksIAotICAgIDAsIDE5NDU5NCwgMCwgOTgzMzA0LCA5ODM4NzIsIDY4MTgzLCAwLCA5ODMzMDYsIDEyODcsIDU0MzYsIDAsIDk4MzMwOSwgCi0gICAgNzQxNDIsIDkyMzI4LCA3NDE1MiwgMTE5MDc4LCA2MDUxLCAxMDQ5NywgNjk2NjgsIDg5ODUsIDEyMTA5LCA5ODMzMTUsIDAsIAotICAgIDEyNzI0MiwgMCwgMCwgMzY1MiwgMTA1MzcsIDAsIDEyNzYsIDEyMDQ0MCwgNjU0OSwgMjc5LCA3Mzc0NSwgMCwgMCwgMCwgCi0gICAgMTQ4OSwgMCwgMCwgMCwgMzg5OSwgMTAwNywgNDIxMjQsIDk4MzU1NywgNDIxMjIsIDkyMzM3LCA5MjM2NywgMCwgMTE5ODUsIAotICAgIDEzNDUsIDc4NjAwLCAwLCAwLCA4OTU2LCA0MzA4MywgOTQwNTcsIDQyMTM4LCA3ODYxMCwgMCwgMTIxNTEsIDc4NjA4LCAKLSAgICA3ODYwNCwgNzg2MDUsIDYyODUsIDc4NjAzLCA3ODYxMiwgNzg2MTMsIDY1OTQyLCA0OTIsIDg2ODUsIDAsIDk4Mzc1MCwgMCwgCi0gICAgNzg2MjIsIDQzNzEyLCAyNTgyLCAxMTQ3MCwgNjQ1MzgsIDc0NDQsIDc4NjE1LCA3ODYxNiwgMjI5NywgMCwgNzM4MzcsIAotICAgIDExOTgyMywgMjUyNywgMTE5ODI0LCAxOTcsIDI3OTksIDkyNTk0LCA0MTk0NCwgMTIwMjc2LCA5OTMzLCAwLCA2NjUxNSwgCi0gICAgNzY3LCA1NTI0LCA3MDI4LCAwLCAwLCAxMTk4MjcsIDExOTgxNywgMTE5ODI4LCA3ODYzMywgMTA4OTYsIDAsIDE3OTksIAotICAgIDEyMDQ5NywgNjk3MSwgNzQzMzYsIDEyODM0MiwgMCwgNjUzNDAsIDExODk3OSwgNDE1NTEsIDI0MzQsIDk0MDE4LCAwLCAKLSAgICAxMjA1NzksIDAsIDQ2MzEsIDAsIDAsIDY0MDcsIDAsIDYzMzgsIDQzMjE0LCAwLCA3NTcwLCAwLCAzMTkyLCAwLCA4NDE0LCAKLSAgICAwLCA5Mzk4MywgMCwgMCwgMCwgOTE2NCwgNjY2MTIsIDkzOTU5LCAzMTcxLCA2NjIzLCA0OTYxLCA2ODM5NiwgODg2LCAKLSAgICA1NTIxNiwgODY1NCwgNzg4MzIsIDk5OTMsIDc0MzkwLCA2NDYwMywgNzAwNjYsIDY5MjQxLCA5NTk5LCA3ODYyOSwgNDMwODQsIAotICAgIDc4NjI3LCA3ODYyOCwgNzg2MjUsIDIzOTksIDY5NjkzLCA4OTk0LCAxMDk0NCwgNDEyMDgsIDk4MzcwNCwgNDExNjgsIAotICAgIDgxNzgsIDAsIDMzNjcsIDkyMzM0LCA0MjUxMCwgNzg2NDEsIDc4NjM2LCA2ODA0LCA3ODYzNCwgMTk0NywgMCwgMCwgCi0gICAgOTI2ODEsIDQyNzU5LCAxMTA2OCwgMTcwNSwgOTMzMSwgMCwgNzQ3OTgsIDkxODEsIDY1MzU5LCAwLCA4MDE3LCAxMTk4MzEsIAotICAgIDY1MDk2LCA2NjcyMCwgMCwgNDM0NzUsIDAsIDQ5MDksIDEyMTI2LCAxMjg2NzMsIDEyMDY5NiwgNDkwNCwgOTgzMzI1LCAKLSAgICA2OTY1MCwgMTM2NSwgOTI1MywgNDI3NTcsIDQzNDM2LCA3NDYyLCAwLCAwLCAwLCAwLCAxMTk1ODcsIDY0NDE1LCAwLCAwLCAKLSAgICA1Mzk4LCAwLCAxMjczODYsIDkzOTUzLCAwLCAwLCAxMTkwMTUsIDAsIDAsIDk0NzYsIDAsIDk4Mzc2OCwgMTI3NjMsIAotICAgIDEyNjYwMywgMzYyOSwgMCwgMTMwMDUsIDAsIDM2MjgsIDAsIDAsIDkyNTAyLCAzNDY5LCA0MjEwNywgNDIxMTYsIDkxNzU3OCwgCi0gICAgNjQ4MDksIDI5MjgsIDQ5MDUsIDk4NTMsIDg1MSwgOTA0MCwgMCwgNjQ2NjUsIDQzMDg2LCA5MTE0LCAwLCA0MjU4MywgCi0gICAgOTMxNSwgNDgyMiwgNDkwNiwgMzg1MiwgMjg0NywgMTE5ODIxLCAzMjM2LCAxMTMxNywgMTI1MSwgNzc3NywgNDE4NTIsIAotICAgIDExNDEwLCAxMDk2NCwgMCwgNDMyMjIsIDEyNjQ2LCAxMjAyNjksIDEwMjU5LCA5ODY1LCA2NTgyMSwgMCwgNjAxOCwgCi0gICAgOTIyOTAsIDAsIDEyMjc2LCAwLCA2ODM3MiwgMCwgOTIyNTksIDExOTI0NCwgMCwgOTgzMjI0LCAxMDQ2NywgMCwgMjQ0MywgCi0gICAgMTA5MTgsIDc4MjE3LCAxMTk4MjUsIDEwMDEsIDkyNDEsIDE5MjcsIDAsIDAsIDczOTg3LCAxMjc4ODUsIDAsIDAsIAorICAgIDExODkwNywgMCwgMTA0NzQsIDQzNDI2LCAxMzI1NywgNDIzNTQsIDEyODA5OSwgOTgzNjk4LCA3MDA0NCwgMTk1MDY1LCAwLCAKKyAgICA4NDEzLCA5ODM4MTYsIDAsIDU2OTMsIDcyNzIsIDAsIDEzMjA5LCA2NDQ3MCwgNjU4MzEsIDc0MzUwLCAxOTUwNjMsIDAsIDAsIAorICAgIDAsIDEyNjYzOSwgMTIwMDk3LCAwLCA5NDA3OCwgMTI4MTMzLCAxMjc3NjcsIDY2NjA4LCAzMTExLCA0MTg2MywgODgwNCwgCisgICAgNDI5MTMsIDkyMTg3LCA3MjcwLCAwLCA2NjYwNiwgNjYyOCwgMTA3NiwgNzQzMywgMTQzNiwgNzM4NDQsIDU1MjI2LCAKKyAgICAxMjgzNTMsIDYzOTgyLCA3MzkzLCAxMjgwNywgNDM0MTMsIDYzOTA2LCAxNTk4LCA2MzkwNCwgMCwgMCwgNDE3MjksIDQ0MjMsIAorICAgIDEzMDcsIDAsIDEwNTE1LCA0MTU4OSwgMTI4Njk4LCAwLCA2MjE4LCAwLCAxNDMwLCAwLCAwLCAxMjA2MDYsIDc4NzU0LCAKKyAgICA1NDEzLCA3NjE5LCAzMjU1LCAzNDkzLCA3NDAzMiwgMTE1NDksIDEwNzM1LCA0MTc0MywgNzM5MzcsIDY4MDEsIDk4MzYzMywgCisgICAgNDUxOCwgMTA5OTAsIDY1MDczLCA1MTY3LCA0NDgxLCAzNzcxLCAxMjAxNTgsIDI3MTAsIDAsIDY5MjQzLCA0MTcyNCwgMCwgCisgICAgNDMwNzMsIDQxNjkwLCAxMjQ3OSwgOTgzNjM1LCAwLCAwLCA5ODM4MTgsIDcwMDQ2LCAxNjI4LCAxMjcxNDksIDk4MzQ4NywgCisgICAgOTgzNzMxLCA2NTI2MiwgNjMzMywgMTA3ODMsIDQyMzE1LCAwLCA2Mzg1NSwgOTQwNTYsIDAsIDAsIDUzMzksIDc0MzIzLCAwLCAKKyAgICAxMzAwNCwgMCwgNDQ1NywgMCwgMCwgMTk0ODE4LCAwLCA1Njg0LCA4Njc4LCAxMDkxNCwgMCwgNTY4OSwgNjU4MDcsIDAsIAorICAgIDY4NDY0LCAxMjYzMywgMTI4NzAsIDY5NzA1LCA2NTE4MywgNTY4OCwgMTE5MjYsIDYwMzMsIDYzMTAsIDU2ODYsIDAsIAorICAgIDc0MjUxLCAwLCAxMjA2NDcsIDAsIDUwLCAxMDU1OCwgOTg3MSwgNDI2MTIsIDQzNjU1LCAwLCAwLCAwLCA2NjQ2OCwgMCwgCisgICAgMTMyNTksIDQ0NDgsIDAsIDk4Mzg0NSwgMCwgNzAwNDMsIDY3ODUzLCAwLCAxMDY0MCwgMTE1MzksIDExNTEsIDAsIAorICAgIDkxNzYwNywgMTI3NTQ0LCAxMjcwNzksIDE5NTA1MCwgMTI3ODUyLCAwLCAwLCAwLCAxMjUwMSwgNjQ2MDQsIDAsIDExNTI3LCAKKyAgICAxMTg4NzAsIDg4MTIsIDAsIDExNTM4LCA4NjczLCAxMjY1MCwgMTEwMjAsIDAsIDY2NDY3LCAyMTA1LCA4MDg3LCA3ODE2MywgCisgICAgNjk2MzIsIDk4OTQsIDAsIDAsIDAsIDQ2MzYsIDU1MjYyLCA3ODUxMywgNDUxNSwgMjM4MiwgMCwgMTI3MDU1LCAwLCAKKyAgICAxMjA0OTUsIDAsIDEyODI4NCwgMTIyNzcsIDE5NDYyNywgMTE5OTUsIDkyNTUzLCAwLCAxMjE1OCwgMCwgODc0MSwgMTAxOTcsIAorICAgIDAsIDkyNDI2LCAwLCA2NTMxLCAwLCAxMjc4NDYsIDQ3MywgNDM0MTUsIDAsIDk4MzY1MCwgMTg3MywgMTA4NywgMCwgMCwgMCwgCisgICAgNzg1MjcsIDY2NDM5LCA0MzIxOCwgOTgzMTIzLCAxOTQ3MTYsIDcyMzcsIDEyNTA0LCA3NDI4MiwgMCwgOTgzNTcxLCAwLCAKKyAgICA5NDg5LCAwLCAwLCA0Mzg0LCA3NDIyMCwgNjM4NDUsIDIwNTgsIDEyODg2MywgMTMyOTUsIDQzMTkxLCAxMjgwMzAsIDAsIAorICAgIDExNTQsIDM4NTcsIDEyMDUsIDAsIDAsIDEzMTAwLCAxMjk1OCwgMTIwNzA2LCA3NDE2OCwgMCwgMCwgNDQyMSwgMTA1OTIsIAorICAgIDAsIDQ5NSwgMTE5MDA3LCA0MTcxMiwgNzk4MywgMCwgOTM5OTcsIDAsIDYzNDcsIDEyMDE2NSwgNzY1NCwgNDE3MTAsIAorICAgIDQxOTYsIDAsIDQzNywgNDE3MDksIDczNzcyLCAwLCAwLCA5NDY1LCAxMzI5MCwgMTE5MTgwLCA0OTk3LCA2NDMwNiwgMCwgMCwgCisgICAgNDk5OSwgMTk0NjQyLCAwLCAxMjY1ODIsIDQ3MTEsIDEyMDc2OSwgMCwgMjczOSwgMCwgODA0NCwgNzQ4MzQsIDE5NDY0MywgCisgICAgNDE3ODksIDEyODE0MiwgMTA4MDksIDAsIDAsIDAsIDE3NzksIDY2MDAsIDY2MDEsIDQxNTQzLCA1MzI1LCA2NDIsIDY0MTg3LCAKKyAgICAxMzA1OCwgMTIwNDQ5LCAxMjg3NSwgMCwgOTIxODYsIDEzMjI5LCAwLCAxMDU3NSwgNDMzOTksIDAsIDAsIDQxNzkxLCAKKyAgICAxMTA0LCAwLCAwLCAxMDY1NSwgMCwgMCwgMCwgMCwgMTA4MiwgMTk1MDQ5LCA4NDI4LCA2NTY5LCAwLCAwLCAwLCA2OTg0OSwgCisgICAgNjc4MywgMCwgMTI5OTMsIDgwNDksIDQxNTQ4LCA0NDAyMSwgNjQ1OCwgOTgzODA3LCAxMjg4ODIsIDQ3NjEsIDYzODI4LCAKKyAgICA0NzY2LCA2NDYyMywgMTI3MywgNDM0MDcsIDAsIDExODg3NiwgMTk1MDQ1LCA2OTEyLCAxMzEzLCA2MzIyLCAxMDQ4MywgCisgICAgOTgzNjAzLCA0MTU0NSwgMCwgOTI0NDksIDAsIDAsIDAsIDAsIDc4NjI0LCAzNDg0LCA3NDMzNywgMCwgMCwgODUwMywgCisgICAgNTEyMiwgNDE1MjcsIDAsIDY2MzIwLCA5ODM4MTEsIDAsIDAsIDAsIDQxNTM3LCA2OTY4MywgODMwMywgODI4MiwgMTE4MTcsIAorICAgIDczODU3LCAxMDAwMywgNzM4NTksIDY1OTA0LCA3MzYzLCAxNjg2LCAwLCA3ODQwNiwgMTE0NjcsIDM2NjQsIDY1OTIxLCAKKyAgICA2NDI5OSwgMTk0NjY0LCAwLCAwLCA0MzI0LCAxMjYsIDQyMjQ2LCAxMTkxNTIsIDAsIDc0Mzc4LCA2NTkyNiwgNzc0NCwgCisgICAgMTk0NjM2LCA3NDI3NywgNzQzMDIsIDc4MDUyLCA0MzgxNywgNjk2NiwgNDM4MjIsIDgxMzYsIDAsIDY1NjAwLCAxNjMzLCAwLCAKKyAgICAwLCA0NzYyLCAxMTAzLCAwLCAwLCA0NzY1LCA5ODM0OTIsIDEzMDc4LCAwLCA0NzYwLCA2MzgyNywgMjA1MCwgMTA4NzEsIAorICAgIDQzMTk5LCAxMTAyLCAwLCA0MjIzNiwgMTI4ODY3LCAxOTQ2NjcsIDExNTQ2LCA3NDc5NCwgMzM3LCAwLCA0MjU5MSwgODYyNywgCisgICAgMTIyNzksIDExMTEsIDAsIDkyMTYxLCA0NzA3LCA2ODIwNiwgMTAxNDMsIDc4ODMsIDEyNzA4MSwgNzg4MCwgNDUyMiwgCisgICAgODY0NSwgNTcwNCwgMTMwMTAsIDAsIDgzMDQsIDkxNzU2MSwgMCwgMTE5NTc1LCAyMjkzLCAwLCA2NjY1NCwgMCwgOTI2NzYsIAorICAgIDAsIDEzMDA4LCAwLCA0Mzg1LCAwLCAxMzAxMSwgMCwgOTI1NjksIDExOTE2MSwgMTMwMDksIDE2MCwgMjY3NywgMCwgMCwgCisgICAgNDE3OTMsIDY1NzYzLCA3NDIyMSwgMTIwMTQxLCA0MTc5MiwgNDI3NzAsIDk0MDU0LCA2NTc2MiwgMTE4ODI5LCA0MzgyMSwgCisgICAgNTcwOSwgMCwgOTQwNTMsIDQzODE2LCAwLCAwLCAxMDc5LCAzODY3LCA1NzA4LCAwLCAwLCA0Mzc5NywgNTcwNiwgNjQ3NjgsIAorICAgIDU3MDUsIDg3OTEsIDQwMDUsIDAsIDEwMjM3LCAxMDk5MSwgMTI4ODE2LCA0MzQ1OSwgOTE3MywgOTE3NTgxLCA5MTc1ODAsIAorICAgIDEzMTcwLCAxMjU0MCwgOTE3NTc3LCA0MjYwNSwgMTIwNzY1LCAxMjY2MTcsIDY4NjQ3LCA5MTc1NzIsIDEwMDU4LCAwLCAKKyAgICA3NDg2NywgMTk0NjU0LCAxMjcwNzgsIDMzMzksIDExNDQ4LCAxMTA2LCA5MTc1OTEsIDkxNzU5MCwgOTE3NTkzLCAzMzQwLCAKKyAgICA5MTc1ODcsIDkxNzU4NiwgOTE3NTg5LCA5MTc1ODgsIDEyMDU0MSwgMTA2MDUsIDEzMDksIDYzOTY2LCAxMjA3NDMsIDE3NTQsIAorICAgIDkyMjI2LCAxMzI0NiwgODY0LCAwLCAxMTg5MjYsIDg5NzIsIDAsIDc4NDksIDEyMDA5MiwgOTI1MzMsIDEzMjQwLCAKKyAgICAxOTUwNjgsIDUxOTIsIDQzMzgsIDY3OTgyLCAxMDk0OCwgOTE3NjAxLCAxMzE5OSwgOTI1NzUsIDEyMzYsIDEzMjA4LCAKKyAgICAxMzI2MSwgMTMxODksIDEzMTg4LCA5Mzk5MywgMCwgNzQ0MCwgMCwgMTIwMTUzLCA5NTUzLCAxNTkwLCA2Mzc3NywgNjM3NzYsIAorICAgIDEzMTc4LCA2Mzc4MiwgNjM3ODEsIDYzNzgwLCA2Mzc3OSwgMTU4MywgMCwgMTMyNjAsIDQ1NTAsIDAsIDY0MjA1LCAwLCAwLCAKKyAgICA0MTUyMiwgOTgzOTE1LCA5MjE2OCwgOTgzNzcyLCA5MTc4NTgsIDExMzU0LCA5NDA3MSwgMCwgNDI3OTUsIDAsIDExOTE5NSwgCisgICAgMTEzOTQsIDE5NDY0NiwgMTMyMzYsIDEzMjcyLCAxMzE5NCwgMTMzNCwgNjk5MjYsIDQ0NzksIDExNzgsIDY1NTg2LCAKKyAgICAxMjA2NjMsIDY2NjgxLCAxMTkxOTMsIDQ2MDEsIDAsIDAsIDk4Mzc2NSwgMCwgMCwgMTk0NjU4LCAwLCA2ODA5LCA2Mzc4NiwgCisgICAgNjAzMSwgMCwgNjM3OTEsIDYzNzkwLCAxMTQ1LCA2Mzc4OCwgNzkxMCwgNjM3ODUsIDQzMTUzLCA3NTQsIDEwMTkyLCAKKyAgICAxMzEwNSwgODE4MywgMTIwNzQxLCAyMDM3LCAwLCAwLCAxMDc0NywgMTI1LCAwLCA2NDg5MCwgMCwgOTgzMTMxLCAwLCAKKyAgICA0MTcxOSwgNjM3NTgsIDM1MjMsIDEwNzQsIDEzMjU4LCA5NTM2LCA3NDA3NywgMCwgNDQyNywgNzQyNDIsIDYzNzU3LCAKKyAgICA0MzE0NSwgMTIyMTcsIDYzNzU0LCA0MTUzMiwgMTM0OSwgNjM3NTAsIDYzNzQ5LCAwLCAwLCAwLCA2Mzc1MywgNjM4MDIsIAorICAgIDQxMDg0LCAxMjA2MjIsIDY4MTMzLCA0MTkzMCwgNjM4MDUsIDYzODA0LCA0MzYzMiwgNjM4MDEsIDQxMDgyLCA4MTQwLCAKKyAgICA2Mzc5OCwgNjI2MCwgMCwgMCwgOTQwNzQsIDYzNzkzLCAxMTk4OCwgMzg5OCwgMTI4MjQxLCAxMDIwMSwgMTIyMzgsIAorICAgIDYzNzk1LCA0MjE5NCwgMTAzNjcsIDEyNTIxLCAxMDQzMSwgNDIxMTQsIDQxOTMyLCAxMDY4LCAwLCAxMjUyMywgMTI5NDUsIAorICAgIDk4MzMyOSwgNDIyMDMsIDc5NTAsIDEwODA0LCA2Mzc3MSwgNDI3ODcsIDQzODYsIDEyMjI0LCA2OTczLCAyNzkzLCAxMjQ3NSwgCisgICAgMCwgMCwgNjM3NjksIDk1MzAsIDk4MzExOSwgMTIyMzIsIDEzMTM1LCA4NTk2LCA1NjgxLCA2Mzc2MiwgNDU5NSwgNjM3NjAsIAorICAgIDc5MiwgMCwgNjQ4MDMsIDAsIDg3NDIsIDAsIDExMDUzLCAxMjg3OTYsIDYzNzQ0LCAxMjgxMDcsIDAsIDc1ODgsIDYzNzQ4LCAKKyAgICAxNjkzLCA2Mzc0NiwgNDMyMDQsIDUwNTUsIDY4NDI2LCA5MTc4NTMsIDEwOTAsIDEyMDY3OSwgMTI4MzU2LCAxMTY2NSwgCisgICAgNzQxMzMsIDQ1NTgsIDY1Njg1LCA5NTIzLCAwLCAwLCA3ODY4MSwgMTE1MTMsIDAsIDYxNTcsIDYzNzc1LCA2Mzc3NCwgCisgICAgNjM3NzMsIDEzMTkxLCAxMjE3MCwgMzUwMCwgMzEzOSwgMCwgMzE3MCwgMTI0ODUsIDAsIDEwODcyLCA3ODI3MSwgMTMwMDYsIAorICAgIDY0NDMzLCAwLCAwLCA5NDEsIDAsIDAsIDAsIDY1NTQxLCAxMTA2MywgMCwgODIyOCwgMCwgNDIwNjUsIDAsIDAsIDk0MDM5LCAKKyAgICAwLCA5MjQ1NSwgNzM4NiwgMCwgNjQ0NDQsIDAsIDExOTg2MywgNDM2MDMsIDk0MDc1LCA2NTM5NywgMjg4LCAwLCAwLCAwLCAKKyAgICAxMDAyNSwgNjk5MTUsIDI5MTgsIDAsIDY1MzAwLCAxMTk4NzEsIDk4ODMsIDY0NzI2LCAyNzkwLCA2NTM5NSwgMzc5MywgMCwgCisgICAgMTI3ODI5LCA2NTM5MywgMCwgNzQxMzgsIDAsIDAsIDAsIDc0MTM5LCA5MjcxMiwgNjUzOTQsIDExNTQ4LCA1MjcwLCAwLCAKKyAgICA2NTM5NiwgMCwgNjU4MTMsIDEzMjU2LCAxMjgyLCAxMjA3NzEsIDAsIDAsIDEwODg4LCA5ODM2MDQsIDY1MjQyLCAwLCAKKyAgICAzMzMwLCAwLCAwLCA5ODM5NzQsIDAsIDAsIDc0MjU5LCAzMzA0LCA0Mjc1MywgMCwgMCwgMCwgMTYyNywgMCwgMCwgMCwgCisgICAgNTM3MSwgMTMxMTYsIDAsIDE4MjYsIDExODc5NCwgMCwgNDMwOTQsIDcwMDIzLCA0MzY1MCwgOTQwMzcsIDAsIDkwMzUsIDAsIAorICAgIDAsIDEyODAwNSwgMCwgOTIyMDcsIDY4MTI1LCAwLCAxNjQsIDAsIDk0MDY3LCA5NDAwMCwgNjk1OCwgMCwgNDMxMTYsIDAsIAorICAgIDcwMDE5LCAxMzI0NSwgMCwgMCwgMTI3Mzc2LCAwLCA3MDAzMSwgMTI3NzU2LCAxMjY2NiwgMTMxNzUsIDEzMjA3LCAKKyAgICAxMjA0MTQsIDY2MDE0LCAxMjA0MjgsIDc0NDcsIDU5MjksIDAsIDY1NTA5LCAwLCA3NDQ5LCAxMTMwNiwgMCwgNzM5MjAsIAorICAgIDMxODAsIDAsIDYzODA4LCA5MDU0LCA5NzEsIDEzMDYyLCAwLCAwLCA2NTE5NSwgMTAxNjQsIDkyMjUyLCA3NDQyOCwgMCwgCisgICAgNzgxNDYsIDkyNjExLCAwLCAwLCAwLCAxMDA0NSwgMTI4ODIsIDEzMjc1LCAxMjgxNjEsIDExMDU3LCAwLCAxMzI3NiwgMCwgCisgICAgNDE1MjUsIDc4MTUwLCA3MjcxLCAxMTQ0NCwgMCwgMCwgMCwgMTIyMjksIDQxNTIzLCAwLCA0MzQxMSwgNzM3NTEsIDAsIAorICAgIDY0ODEzLCAwLCAwLCAxMDQ3NiwgMzg1OCwgMCwgMzkzMiwgNjQ5NTgsIDAsIDAsIDczOTg5LCA2ODE5MiwgMCwgNjk4NDcsIAorICAgIDM2OSwgMCwgNDE3ODQsIDAsIDY0MTYzLCAwLCAwLCAwLCA2NTQ3NCwgNDc5NiwgMTIyOTIsIDEyNjU5NSwgNjU0NzksIDAsIAorICAgIDQxNzgxLCAxMDQ4NiwgNDE0ODAsIDQzMDAyLCA5ODk5LCAwLCAwLCA0MDQsIDEyODIxLCAzNzQxLCAwLCA1Nzg4LCA4MDkyLCAKKyAgICA2ODIxMiwgNDEyMjIsIDE4MzEsIDY2MDIwLCAzOTgyLCAwLCA0Mzg4LCAwLCA3NDYsIDEyMDc4NCwgMCwgMCwgMTIwMTgsIAorICAgIDY1Mjk0LCAwLCAwLCAwLCAwLCA0NDIyLCA0NzA4LCAzNzk5LCA3NDI5MiwgMTE5MzU3LCAwLCA3NDQzMCwgMCwgMTE3MDAsIAorICAgIDQzNzQsIDAsIDEyODE3OSwgMTM2NCwgMCwgODAzOCwgMCwgOTE3NTk3LCAxMjg2OCwgNjk4MTQsIDAsIDY3MzUsIDczOTc5LCAKKyAgICAxMzE3NCwgNzM5NjgsIDEzMjI1LCAwLCA2OTgwOCwgNjU4MzUsIDAsIDIzNjUsIDc4NDEsIDAsIDQyODU1LCAxMTg4NTYsIAorICAgIDQyODY2LCAwLCAwLCAwLCA2NjQzOCwgNDE3ODUsIDEyNjE3LCA2NDE3MiwgMTMxNzMsIDQzNzIsIDExOTM1NCwgMCwgCisgICAgOTgzNTY4LCAwLCAwLCA5MjQwMiwgMTI4MDYyLCAxMjk2NSwgMzg0LCA2NDUxMiwgMTA0MDQsIDEwMzQwLCAxMTkzNTIsIAorICAgIDE1NTYsIDUyNzQsIDEzMjEwLCAxMjAxMjUsIDEwMDE3LCA5NzMzLCA0MTc4NywgOTgzMjQzLCAxMjY5OTQsIDQxMzczLCAKKyAgICA3ODAzOSwgMTIzMDMsIDAsIDEzMjMyLCAxMzIzMywgMzQ5LCA0ODYzLCA0MTM3MSwgMTE2NTYsIDAsIDEyMDcwMywgCisgICAgMTE5ODgzLCAxMjg2MSwgNDM5OCwgODU0MywgNjU2MTgsIDEyODAxOCwgMTA5NiwgMCwgMCwgNDI2ODgsIDEyNDQxLCAKKyAgICAxMjM1NSwgMTE5MzQ4LCAxMTkzNDcsIDQzMTgsIDEwNDUyLCAwLCA4MDMyLCAxMzI0MywgMTMyMzcsIDEyNzE5LCAxMjY2NDYsIAorICAgIDExOTEwMSwgMCwgNjQ4ODQsIDExOTg3MiwgMTE5MzQ1LCA4NTk3LCAwLCAwLCA5ODY0LCAwLCAxMjA3ODUsIDExOTg3NCwgCisgICAgOTQxMDcsIDEzMTk1LCA0MTQ1MiwgNjQ5NjEsIDc3MjIsIDAsIDEwNDU5LCAxMTk4NzgsIDAsIDExOTg3OSwgNjY1OTAsIAorICAgIDEyODEyMywgNDE1MzMsIDY2MzM3LCAwLCA5MjE4NCwgMCwgNDk2NSwgNDM0NDUsIDkxNzUzNiwgNzM4NDksIDAsIDQzNjM4LCAKKyAgICA3ODUzNywgMTI4Mjg3LCA2MjYxLCAxMTkzNDIsIDQzMTQ3LCA2NjU3MCwgMTk1NywgMTA0MjAsIDk4MiwgMjc1NiwgMTMyOTIsIAorICAgIDEzMjA2LCAxMjg4MjgsIDAsIDI5MjUsIDczODA5LCAxMzA1NiwgMTI3NTU5LCAxMzIxMiwgNDMyMzgsIDAsIDEzMTkwLCAKKyAgICAxMzE4NywgOTI1NDEsIDEzMTk4LCAxMTg3OTMsIDAsIDUyNDIsIDExOTE3OSwgNjQ0NzYsIDE2OTQsIDgyMTYsIDcxMzY5LCAKKyAgICA2NzcwLCA0MzMzMSwgMCwgNjU2MjAsIDk4MzcyOCwgNDM1NDQsIDEyNjQ2NiwgMCwgNDE0NDQsIDY1NjIxLCA2OTk1NSwgCisgICAgOTE5NywgNTI0NiwgMTE5MTA2LCAxMzE4NSwgOTcwOSwgMTIwMzIzLCAxMjAzMjIsIDEyMzE0LCA2NTYxNiwgNTIzOCwgCisgICAgMTE5MzMzLCAwLCAxMTkzMzcsIDUyMzYsIDQwOTc5LCAwLCA3NDIwMSwgODI4NiwgMTI4NTM3LCAzOTM2LCAxMTkzMzEsIAorICAgIDExNjk5LCA0MTM0NywgMTI3MjQ5LCAxMzIzNSwgODg0MiwgNDEyNDgsIDAsIDQzNzksIDEzMjM5LCAxMjY5MiwgNzk2OSwgCisgICAgMTI3MjY2LCA3MjE5LCAxMjcyNTAsIDEyODI1MSwgMTIwNTA5LCAwLCA2NjIyNCwgNzM0LCAyOTc5LCAxMjAzMDMsIDY1NjE5LCAKKyAgICA5ODcyLCA5NTcsIDY0OTIxLCAxODQ2LCA2NjYzMSwgNDE0NzcsIDExOTI1NiwgMTIwMzEwLCA3NDUxMSwgNDE3NzAsIDE2NzAsIAorICAgIDY0NDIsIDEyMDMxNywgNDI0NDYsIDUzNzksIDEyMDMxOCwgNDExNjMsIDc0ODMyLCAxMjAzMTUsIDEyMDMxNCwgMTE1MDYsIAorICAgIDAsIDQyODQxLCAxMzI2NywgMCwgMCwgNDE3NzUsIDAsIDcxMzAsIDQxNzczLCAwLCAxMDY2MywgMCwgMCwgMCwgNjE1MSwgCisgICAgMTIxMTAsIDQyNjczLCA2NTU3MiwgNjUyOTMsIDY1MjUwLCAxMzI2NSwgMTMyNjQsIDY0NTE4LCAwLCA2MTAwLCAwLCAKKyAgICA5MjY0NywgNTgwOCwgNjU5MjIsIDAsIDEyOTY3LCA2NjA0MSwgNTYxMiwgNDU4MywgMCwgMCwgNjgwOTcsIDY0NTc1LCAKKyAgICAxMjY2MzcsIDExOTY1LCAwLCA2ODM1OCwgMCwgNjk3ODksIDAsIDkyMjYwLCA2ODEwMiwgOTY5OCwgNzgxNCwgNzQ0NzYsIAorICAgIDExOTY1MSwgMTI4NTE0LCAwLCA0MTkyMSwgMTE4ODU4LCA5NzU2LCA2OTg1LCAxMTkyNTgsIDc4NDkwLCA3NDIxOSwgMCwgMCwgCisgICAgMTE4OTk3LCA4MDEyLCA1Njc0LCAxMjM1MywgMCwgMTIzNjEsIDU2NzcsIDU1ODgsIDAsIDQxOTI1LCAxMjgxMjQsIDQxOTIwLCAKKyAgICA1NjczLCAxMjA1MzQsIDU2NzYsIDQxOTIzLCAxMjY5NCwgMTE4OTc4LCA1NjcyLCAxMjk0LCAwLCA3ODA1OSwgMCwgNDI1MTEsIAorICAgIDE3MjcsIDEyMDcyNSwgNDI0MzYsIDAsIDAsIDAsIDc0MjIyLCA4NzE4LCAzNTUwLCA3MzYsIDEwMjY4LCA0NTA1LCAxMDMxNiwgCisgICAgNzQwOTAsIDU4MjYsIDU1MjMyLCA1ODEzLCAwLCAxMjA3MTIsIDU4NDEsIDU4MzcsIDU1MjM0LCAwLCAzMTA1LCAxMjgyOSwgCisgICAgNTgzOCwgNTc5NiwgMCwgMTE5NTkyLCA1NzkzLCAwLCA1ODY2LCA1Nzk3LCA0MTAxMSwgNTg2NSwgMTIwMDkxLCA3OTU2LCAKKyAgICA1OTgsIDAsIDY0NjQ5LCA1ODA2LCA0MjM5OCwgMCwgOTAzNywgNTY3MSwgMTIwMDQxLCA5ODMyNTUsIDAsIDAsIDEyODg1NSwgCisgICAgMCwgODQ3LCAxMjgyNDIsIDk1MjksIDAsIDY2NjU3LCA2OTgwLCA3ODQ4MywgMTIwMDM1LCA3ODQ4NCwgOTgzNDkxLCAwLCAKKyAgICAxMjAwMzMsIDc4NDg2LCAwLCAwLCAxMjAwMzksIDQyNjgzLCAwLCA5ODMwNTUsIDcxMTQsIDAsIDAsIDQzMTkwLCA2NTQ2MywgCisgICAgMTU1NCwgMCwgNDI2MTEsIDQyNTYzLCAwLCA1NjUxLCAyOTI5LCA2NzkyLCA0MzIwMSwgMCwgMTk5NjMsIDU2OTgsIDAsIDAsIAorICAgIDAsIDAsIDU2NDQsIDEwMjkyLCA2NTU0NiwgNjk3MjcsIDY4MTQxLCA4MzcyLCAwLCA2NTExNiwgMCwgMTIwMDIyLCAxMDE3NSwgCisgICAgMTAzODgsIDQyNzk5LCA5NDEwMCwgNDEwMTMsIDEwNTY4LCAwLCA5ODM2MTgsIDI4NjksIDAsIDQxMDE1LCAxOTQ2OTIsIAorICAgIDI3ODUsIDQzNjYsIDAsIDEwOTU0LCA0MTgwMiwgMCwgNDI2MDgsIDc4NDY5LCA5ODg0LCA0NzU5LCAwLCAwLCAxMDI2NiwgCisgICAgNDEzNTksIDExNzAsIDQzMzY1LCA2OTgxMCwgNzM5MDgsIDE2MDksIDkwMiwgMCwgNjM5MzYsIDEyODg3NSwgMTE2NjEsIAorICAgIDgxMjIsIDU4MTgsIDAsIDAsIDM4NjEsIDk1NDAsIDExMDI4LCAyNTU0LCA1MTU4LCA1NzE0LCAyMjEzLCAwLCAwLCA4MDcsIAorICAgIDQzMDc5LCAwLCA3ODQ3NSwgOTc2LCA1NTExLCA2NDU1MywgMCwgNDIxNTUsIDAsIDQxMzU2LCA3NDExMCwgMTE4ODAxLCAKKyAgICAxMjY2MTQsIDAsIDg2NzYsIDk4MzI5MSwgMCwgNTU4MiwgNDUxLCA2Mzk0MSwgNTc5OCwgOTM0OSwgNDIwMTgsIDEyNzg1OCwgCisgICAgMCwgMCwgNDM2MDksIDU5MDYsIDEyMDU1MywgMTQ0MCwgMCwgMTI4ODUzLCAxMjAwMTYsIDc0MjgzLCAxMTAwNSwgMCwgCisgICAgNjY2NTYsIDY2MDQ0LCAwLCAxOTQ2OTgsIDAsIDAsIDQzMzkzLCAxMDA5NCwgMCwgMTE1MjksIDEwODU3LCAxMjA2NDMsIAorICAgIDY2NDM2LCA2NTQ2LCA5MywgODEwMiwgMCwgNjg0MDUsIDAsIDAsIDgxNzEsIDAsIDExOTA5NywgMTI3MDY0LCA5MTc1NDMsIAorICAgIDM4MywgNzE1NCwgNDE2NTYsIDkyNjM0LCA5NDA0MCwgMCwgNTE4NywgNzEyOTYsIDEyNzI3NywgMTEyODYsIDY4NjIwLCAKKyAgICA2NDIxNywgMCwgNTIzMiwgMCwgNDEwMDksIDAsIDQxMDA1LCAwLCAwLCA5ODM4MjcsIDgyOTIsIDE5NTA3NCwgNDk4MCwgCisgICAgODg2MCwgNzM5NDcsIDEwMDI4LCA2NTI5MSwgNzA3NiwgMTMxODIsIDE5NDcwNSwgMCwgMCwgMTA2MzEsIDY2MDMxLCA3OTcyLCAKKyAgICAwLCA3ODc4NSwgMCwgNzkwMCwgMCwgMTEzMDksIDM4MDYsIDQxOTgsIDQyNzI1LCAwLCA2NzY1NiwgOTk5NSwgMCwgOTI1NTIsIAorICAgIDAsIDEyOTMxLCAwLCA0MjY4NCwgNzQyODUsIDIwODgsIDY0MjEzLCA2NDM2NiwgNjUxNTYsIDg4MTQsIDQyMjM4LCA3NDc3MSwgCisgICAgMCwgMCwgMTI4MzYsIDAsIDAsIDc0MzQyLCA4NTkzLCAwLCAwLCA2ODQ0NSwgMTMyNTUsIDAsIDAsIDc0NjQsIDAsIDY1ODY1LCAKKyAgICAwLCAxOTQ2NTAsIDEyNzE0NCwgMCwgOTM0MiwgMTIwNDY0LCAwLCA2NDUxNiwgMCwgNzg3OTIsIDEwMTI5LCA0MTAwNywgCisgICAgNzQzNzUsIDAsIDQwOTk1LCAxMjIwOSwgNDEwMTIsIDExOTEzNiwgMCwgMCwgNjk3MjQsIDQwOTkyLCA5MjI2NCwgMTI3MTUzLCAKKyAgICA2ODY1MywgNDM1NTgsIDU1MjIsIDAsIDYxLCAwLCA3NDEwNSwgMzYzMywgOTgzOTAwLCA2NTE2MiwgNDEyMzQsIDEyMDg5LCAKKyAgICA3ODI4MSwgOTc3MSwgOTgzOTA1LCAxMzI1MSwgMTI4NzAxLCAwLCA2MjYyLCAyNzg0LCA0Mjc0MywgMCwgODEyNiwgNjY0ODMsIAorICAgIDAsIDAsIDQ0MSwgNDI2MjEsIDAsIDAsIDQxMDAyLCA0MDk5OSwgMTE5NjIzLCA0MzI2NiwgNzEwOCwgMTk0Nzc5LCAxMDg5MCwgCisgICAgNzQ0ODEsIDY1ODM0LCA4MzI0LCAxMTkxMDMsIDY0NDE3LCA3NDgxNywgMTI3NDY1LCA2NDczNywgMCwgOTgzNjU5LCA4OTMwLCAKKyAgICA2NjY3OCwgNzQyNDksIDExOTMsIDEwMDU2LCAxODAwLCAxMzI1MywgMTMyNTIsIDc4MjksIDAsIDAsIDc3NDMsIDAsIDAsIAorICAgIDc3OTA0LCA5MjY0MCwgNzc5MDUsIDkwMzQsIDYwMzksIDAsIDEwMDc1LCAwLCA0MTAxOCwgNjU2ODMsIDEwMzM4LCA2NjQ2OSwgCisgICAgMCwgMCwgMCwgNDI4MTUsIDAsIDQxOTY2LCAwLCAxMjc0NzEsIDAsIDExNzkyLCA0MzA2NCwgNDEwMjUsIDkxMSwgNzUzOSwgCisgICAgMCwgMCwgMTIwMzM5LCA2NTE1OSwgNjQzOTAsIDAsIDAsIDU1MjAsIDExNjYyLCAwLCA2NTMzMCwgNDI4MTIsIDAsIDAsIAorICAgIDEyMzI2LCA5ODM4NTYsIDAsIDQyODA4LCAxMjgzMzcsIDkzNDgsIDY0OTAxLCA5ODM4NjEsIDAsIDAsIDAsIDAsIDAsIAorICAgIDkxNzU4NCwgNDM3MDIsIDk4MzU3NiwgNTg1NywgNjUzNDIsIDkyNzI3LCAxMTkxMjAsIDEyMDA3OSwgODY0NCwgMCwgMCwgMCwgCisgICAgNzQyOTYsIDQxOTA5LCAwLCAxMjAzMzIsIDI3OTEsIDY5NjYzLCAxODkxLCA2OTgyNCwgMCwgNDE5MDcsIDY2NjQ3LCAKKyAgICAxMTg5MzksIDg3NjEsIDEyOTQyLCA1NzQ4LCAwLCAxMDc3MywgMCwgMCwgODc5NiwgNzgxNDksIDY0MTIsIDIwNjEsIDg1MjAsIAorICAgIDEzMTQ2LCAxMjcxODUsIDYzOTMxLCAwLCA2NTkwMiwgMjg4MiwgMCwgMCwgMTI4NDMsIDQ1MjAsIDEyMDM0NSwgOTI0NTksIAorICAgIDAsIDk4MzY2MCwgMCwgNzM4NjAsIDAsIDAsIDY0MzQ1LCAwLCA5MjAxLCAxMjgzMTQsIDE5NDk0MCwgMCwgMCwgNDM2NzksIAorICAgIDkxNzU4NSwgNjUxMTcsIDkyMjcwLCAwLCAxMDQyNywgMCwgMzg0NCwgMTIwNjc1LCA5NzU1LCAxMTEwLCA2NjEyLCAxMjIyMiwgCisgICAgMCwgMTI4Nzg5LCAwLCAwLCA3ODMsIDE5NDkzNSwgMCwgMCwgOTgzMDY0LCAxOTQ3MjAsIDY1MDU2LCAzNjIwLCA0MTE4MCwgCisgICAgNjgzNzgsIDQ1NTYsIDAsIDAsIDE5NDkzMywgNzQyNTAsIDAsIDY3NjU3LCAxMDUxMCwgNDM4MiwgNjY0ODIsIDAsIDAsIAorICAgIDEyNzUyNywgOTE3NywgODkwMiwgOTM5NTgsIDk4MzksIDAsIDEyODkxLCA5ODM3NTUsIDk4MzYzNiwgNjM5OTksIDIwMTYsIAorICAgIDQxOTE3LCA5Nzg4LCA2MzkyOCwgMCwgMTg2MiwgNjU4MDAsIDkxNTUsIDY2NjIzLCA5Nzg2LCA2NTA4MiwgNDE5MTksIAorICAgIDg1NzksIDQxOTE0LCA3OTgxLCAwLCA2NjAxNywgNDUwOCwgNjQ4ODMsIDkyNDU2LCA5MjUyMiwgMTI3ODE0LCAwLCA2NDU5MiwgCisgICAgNzQyNzYsIDEyMDA4MCwgNjc4NCwgNzg3ODgsIDY4MTgxLCAwLCAwLCAwLCAxMjc1MzQsIDEyMTQ3LCA5MDI0LCA2NjM3OCwgCisgICAgNjY0NzIsIDk4MzkyOSwgNjQyODksIDY1Mjg5LCA3ODE1MSwgNjY2NTgsIDE5NDkyOSwgNjQ1MDksIDc4MTUyLCAwLCAKKyAgICAxMjY1MDUsIDExMDUxLCA5ODMyOTYsIDAsIDExMzU1LCA2NTg4NSwgMCwgMTI4MzEwLCA0MTIxNCwgMCwgMTIyOTksIDAsIAorICAgIDc1MDAsIDQ1MDYsIDc3NzMsIDAsIDAsIDk5NjMsIDY4NjQ5LCAxMjY2MDksIDQwNDAsIDEyMDU3MCwgNjE2NywgMCwgCisgICAgNjM5MjIsIDY1OTQsIDk4Mzc0MCwgMCwgMCwgMzYyNCwgNDMwMzYsIDAsIDYzODcsIDYzOTkwLCAxOTk0NywgNjM5ODgsIAorICAgIDQxOTU1LCAwLCA2Mzk5MywgMTA0NDAsIDk2MTEsIDY1NjA1LCA2ODAzLCAwLCA3NzM4LCA2Mzk4NiwgMTE0NDYsIDYzOTg0LCAKKyAgICA5MjY0MSwgMzQzNSwgNzgxNjQsIDQzODE0LCA0MzgxMCwgNzAyOSwgNjQyNTgsIDQxMjkyLCAxMTg4OTgsIDEyNzQ4LCAKKyAgICA0Mjc0MiwgOTUxNywgMTE1MTgsIDAsIDc4NzkwLCAwLCA2Nzk5MywgNjM5NTYsIDQyNDU4LCA2Mzk1NCwgNjM5NTMsIAorICAgIDYzOTYwLCA5NTkxLCA0NTE2LCAxMDIxNywgNjgzNzAsIDExNDY5LCA2OTY5NywgNDIzMDYsIDI3MjMsIDExODk0NywgMCwgMCwgCisgICAgMCwgMCwgMCwgMTEzOTcsIDI4ODAsIDAsIDAsIDI4NzIsIDAsIDAsIDM0OTgsIDQzNzgsIDkxNzUzOSwgNDI3MCwgMCwgCisgICAgNjU1NTEsIDY4MjA1LCA2NjMzLCA0MzM4NywgMCwgNTIzMCwgMCwgMCwgMCwgMCwgMCwgODE2MSwgMzkzLCAxMjAxMywgMCwgCisgICAgMCwgMTI2NDc5LCA0MTUsIDYzOTY0LCA2Mzk2MywgNDIzNDUsIDkyMzEwLCA1MTgzLCAxODc3LCA0MjQ5OCwgMCwgMjkyNywgCisgICAgMCwgNjM5NjEsIDQ0NzIsIDAsIDAsIDc4MTU5LCA2OTY5OSwgOTE3OTM2LCA0MjM0MCwgNDc1NiwgMTI4MDc4LCA3MDgxLCAKKyAgICAxMDczMCwgNzY5MSwgMTAzMzEsIDYzODMwLCAxMTk2MjUsIDQyOTIyLCA0MjEwMywgODYyOCwgOTgxMywgMCwgNDI0NTMsIAorICAgIDE2MDQsIDk1NjUsIDEwNTM5LCA2OTcwMSwgNjU3NjQsIDQxNDE1LCA2NTc2NywgMCwgODQ1NywgNDIzMDEsIDExMzcyLCAKKyAgICA2NDg3MywgMTE5OTIsIDAsIDAsIDYzOTgwLCAxMTgwMSwgMzYyMiwgOTgzMTI0LCA2NDMzNiwgMTIwMTcsIDEwNDYzLCAKKyAgICA2Mzk4MSwgNDk2NywgNjQxODksIDE5NjYsIDQzNjI4LCAwLCA5ODMyOTIsIDAsIDAsIDYzOTcxLCA0MzQ3LCA0NDE2LCAKKyAgICA0MjA5OCwgMTEwMDksIDEwNjk0LCA2Mzk3MywgNDAyLCAwLCAxMzE0NywgMTI4NjkyLCA0MjEwMCwgNjQ2NDYsIDEzMjI4LCAKKyAgICAwLCA0MTg3NSwgMzUxNSwgNzQyNTIsIDExODA1LCAwLCAxMTMwMiwgNjI1OSwgNDMzOTUsIDAsIDAsIDE5NDY3MCwgMCwgCisgICAgOTIzNTEsIDAsIDc0NDI1LCAxMTI5OSwgMTU2MSwgMCwgOTIzNTksIDY0OTQyLCA5ODM1NTksIDE5NDczMywgOTgzNjg2LCAKKyAgICAxOTQ3MzIsIDAsIDc0MzAxLCAwLCAxMTI4MCwgMCwgNjk3ODQsIDc0MDYwLCAwLCAwLCAxMTk2NjQsIDUxNDUsIDEyNDg2LCAKKyAgICA2NTAxOCwgNjY1MTYsIDU0MDksIDEyNzM3OSwgMTk0NjY5LCA3NDAyLCA1Mzk5LCA5Njg1LCA3NDA4OSwgNzk1MiwgNTQwMSwgCisgICAgMCwgNjY2MTYsIDY4NDIxLCA5ODM5MTksIDAsIDU0MDUsIDEyNzg3NSwgNjQ4NjYsIDAsIDExOTU4MywgMTI4MzQ1LCAKKyAgICA3ODc4NCwgNzQyNDgsIDExMzMwLCAxOTQ3MjMsIDY0NjkwLCAzMjU0LCAwLCAwLCAxMjgyMDcsIDQyMzkwLCA0MzY3OCwgCisgICAgMTk0NzI1LCA5ODM5MDksIDY1MDc3LCAwLCA2Mzg4LCAzMzU1LCA5NTA4LCA5ODY3LCA1NzIzLCAxMTUyMCwgNTYxMSwgMCwgCisgICAgMzM3NywgMCwgMCwgMCwgMCwgNzgyMjgsIDAsIDk4Mzc2MiwgNDI2OTEsIDkxNzg4NiwgMTI3MTk4LCA3NDc2NywgMCwgCisgICAgMTI3MDc1LCAxMzc5LCAyNDYsIDAsIDk4Mzc2MSwgMzc4OCwgOTgzMTA2LCAxMTA0MSwgOTI1NDksIDY2MzA0LCAwLCAwLCAKKyAgICA4OTE3LCA0MjQwMywgMzAxLCAwLCAwLCAwLCAwLCAwLCA5ODM2OTcsIDEwNjU2LCAwLCA2NTIxNCwgMTE5MjQyLCA0MjU2NywgCisgICAgOTIyMTcsIDEzMTYzLCA5ODMyMDQsIDEyMDgzMSwgNzQ1OTcsIDMxODIsIDAsIDAsIDAsIDY1MDM0LCA2NTg4OSwgNDIxNjksIAorICAgIDQ3NTUsIDc0MjQ0LCAxOTQ2MjEsIDExNDQzLCAwLCA2NjMxOSwgNzQ1OTgsIDYwOCwgNjAwLCAwLCAxMjE5LCAzOTM0LCAKKyAgICA2NDIwNiwgMTE0ODMsIDc0NTEwLCAwLCA3NDQ4NSwgNDI0NDIsIDY1NDcwLCA5ODM5MDcsIDY0MjAyLCAxMzE2MCwgNzc1OSwgCisgICAgNDI0ODIsIDQ4NSwgMTI4MDA2LCAwLCA5ODI4LCAwLCAwLCA0MjI4MCwgMCwgOTM1MSwgNzc3OCwgNjQzNzksIDc0OTYsIAorICAgIDQyNDMxLCA2OTE2LCAxMjA4LCAwLCAxMTk2MzEsIDExMDAyLCA0MjQ3MCwgMCwgMTE4OTQ2LCAwLCAwLCA3NDA0MSwgMCwgCisgICAgNzAwNDUsIDQzNTM5LCA1NDExLCA0MjE5NiwgMCwgMCwgMCwgOTE1MCwgMCwgNDIzOTMsIDEzMDg2LCAxMzEwLCAxOTQ2ODcsIAorICAgIDkzMzcsIDEyMDUyLCAxMDY0MywgNTUyNzEsIDk4MzE3OSwgMTIxNjYsIDI1NDYsIDE5NDY4MywgMjEzLCAxMTg4NTIsIAorICAgIDY1NjExLCAwLCAwLCAxOTQ3NTYsIDc0MzEwLCA2NTU0LCAwLCAxMTkxNCwgNTQ1MiwgMCwgMCwgMCwgMCwgMCwgMTk0NjgxLCAKKyAgICA5MjU2MCwgMjcxMywgMCwgOTY1MCwgNDMzMzAsIDAsIDE5NDY3NSwgMTQwNiwgMCwgMCwgOTI2NTksIDAsIDY4MjIzLCAKKyAgICA0MTQzLCAxOTQ2NzcsIDAsIDY1NzQ4LCA0MTQxLCA5NjgyLCA2NTI4NywgMTUwOCwgMTI3MDEzLCA4Nzc5LCAxMDU2OSwgCisgICAgODcyNSwgMTMyOTksIDY2NjM4LCA2NTc1MCwgNDIyNjMsIDQxNDUsIDYzODAsIDY1NzUxLCA2NjYxMywgNDM5OTQsIDY1NzM4LCAKKyAgICA1NTI1MCwgOTE4NSwgOTU1MCwgMCwgNDM0MDMsIDAsIDAsIDAsIDY1NzM2LCA0MTk1MSwgNjQ4MTYsIDY1NzU2LCA5ODMyMDUsIAorICAgIDEyOTU1LCAxMDU5NiwgMjg4OCwgMTk0NjQ1LCAwLCAwLCA5NjU3LCA5MDE5LCAxOTQ3NjYsIDAsIDI4NzgsIDUzOTAsIDAsIAorICAgIDE5NDk2MSwgMCwgNjg2NzksIDQzNTUyLCA3NTAxLCA2MzI4LCAwLCAxMDQyOSwgMTAzNjUsIDAsIDAsIDQxOTQ2LCA3NTAzLCAKKyAgICA1MjM1LCA4MDMsIDY4MzgxLCAwLCAwLCA4OTg2LCAxMjY1NDIsIDEwNjMyLCAxMTkzNCwgMTE0NTIsIDEzMzIsIDAsIDAsIAorICAgIDEyNjY0NywgMCwgMTE4ODg3LCAxNzkxLCA1MTkxLCA5Mjg4LCA2NDgyMiwgMjg5MiwgMCwgNDMzOTQsIDU1NSwgMCwgMCwgCisgICAgNjY2NDYsIDAsIDExOTAwMiwgMTMxNTEsIDc0NTEyLCA3Mjg5LCA3NDA1NSwgNjQxNjEsIDg4NTQsIDY0MTYyLCA1ODU4LCAKKyAgICA0MTkyNywgMTA1ODIsIDAsIDE3ODQsIDEzNjEsIDE5NTA0NywgMCwgNzkwNSwgMCwgNjQ4NjgsIDEyODgxMywgMTMxNTgsIAorICAgIDkyMTY2LCA3MjExLCAwLCA5MzcxLCA3Mzk3MywgOTE3NTUzLCA2ODI4LCAxNjI1LCA5MjMwMiwgMCwgMTM0MiwgNjg0NDAsIAorICAgIDY0MTcxLCAxMjY3MDQsIDEwOTAzLCA5ODM0OTQsIDAsIDAsIDAsIDAsIDQ0ODIsIDQxNjA2LCAwLCAxMjg1NjksIDk4MzExMiwgCisgICAgMCwgNjQzODEsIDAsIDAsIDE5NTA5MCwgNDIyNDUsIDEyNjQ2NywgNDE5NzIsIDAsIDQ0NCwgMCwgOTEyNywgNjY2ODcsIAorICAgIDY2NjE5LCAxMjY0ODksIDc4MDI1LCAwLCAxMTM0OSwgNDA5OTEsIDkxNzU3MCwgMCwgMTE5NTk5LCAxMjA4MzAsIDAsIAorICAgIDExOTcsIDEyODI4MiwgMTE0OSwgMTk0OTcwLCAwLCAwLCA0MDk5MCwgNDM3NjUsIDAsIDM0OTIsIDAsIDEyNzk0MiwgMCwgMCwgCisgICAgMCwgMTI4MzgsIDk4Mzk3OCwgMTk5NDgsIDAsIDMwOTksIDAsIDAsIDQxMDg3LCAwLCAwLCAwLCAxMTkwNTksIDEyMDM2LCAKKyAgICA0MTMwOSwgMCwgMCwgODE1MiwgMCwgNDE1NTAsIDEyMjI3LCA5ODM2MTMsIDAsIDEyODI4LCAxMjc1MTEsIDAsIDAsIAorICAgIDEyMDcwOCwgMCwgMCwgMTAzODYsIDExOTU3NCwgMCwgMCwgOTI2ODAsIDk4Mzc4OSwgNjgxNTQsIDAsIDE3NDMsIDAsIDAsIAorICAgIDkyMjM5LCA2NTE4NiwgOTE3NTcxLCAwLCA5NjA2LCAwLCAwLCA2NDQzOSwgMCwgMCwgOTI2ODYsIDAsIDAsIDE5NDk2NywgMCwgCisgICAgMCwgMzM5NSwgOTM2MiwgMTA4NzgsIDAsIDAsIDc4MzYyLCA2NDgzMCwgMCwgMTI2NTU3LCA0MTA5MSwgMzQyNiwgMTM0NCwgCisgICAgODg3MCwgMCwgMCwgNDczNSwgMTI3MDE3LCA2MTE5LCAxMjgyMiwgNDI2OTksIDAsIDk4MzgyNCwgNzQ4MTgsIDE0MjMsIDAsIAorICAgIDQyNjM3LCA0MTA4MCwgMCwgMTIwMzksIDEwNTU5LCAwLCAxMTg4OTIsIDAsIDk0NzIsIDAsIDExOTI5LCAwLCA3MTcwLCAKKyAgICA5NTk2LCA2MTMwLCAxMjg4MjYsIDQzNjI5LCAxMTU3OSwgNzg3MTMsIDAsIDE5NDc0MCwgMTI4NjkxLCA5MjE4NSwgNjY2OTksIAorICAgIDY0NDQwLCAxMDA0LCA5MjU4NCwgMTk0NzM3LCA0MzIzNCwgNjYwMDgsIDEyNjI3LCAwLCA2ODQxNCwgMCwgNDM2MTksIAorICAgIDQzMzAzLCAxMTMwMCwgNDMzMDQsIDk2ODYsIDU4OTAsIDExNzc2LCA3NTU4LCAxMjcxNTgsIDY1NjI3LCAwLCAxMDcxOCwgCisgICAgMTMxNTQsIDM0NjEsIDkxMzksIDAsIDAsIDAsIDAsIDY1MzY1LCA3Mzg3NywgNjU2MjgsIDc4MDE5LCAxMjAzMTksIDAsIAorICAgIDQxNzA4LCAxMjg2MCwgMjY0MSwgMTIwNjksIDEwODM4LCA1NDAzLCAxMDM1MiwgNzAwODUsIDEwMDYxLCA0MzIzNywgMCwgCisgICAgNTE0MCwgMjA5LCAxMjg4NDcsIDQxNzA0LCA0MTA1NiwgNDMwNzgsIDEyODEyNSwgMTE4ODA5LCAwLCAxMDg5OSwgNjU0NjksIAorICAgIDkyMzYyLCAwLCAwLCAyNDEwLCA5OTMsIDAsIDEyMDU4OSwgMTIwNjg5LCA3ODY5MywgMCwgMCwgNzIzMiwgMCwgMTE5MjUzLCAKKyAgICAwLCA3MTEwLCA3NDQ2MiwgMjA2NiwgMTA0ODksIDQyMTY2LCA0MzQ2MywgMTA2NTksIDM2MDAsIDAsIDQyMjQsIDEzMzYsIAorICAgIDQxNTE4LCAwLCAwLCAwLCAwLCA0MTEzOSwgNjQ4MjAsIDkyNTM4LCAxMjk2NiwgNDExMzQsIDAsIDAsIDAsIDAsIDI3MiwgCisgICAgNDI2MywgODc5MywgMCwgMCwgNDE1MDIsIDAsIDk4MywgMTI1NDksIDAsIDAsIDExOTAsIDQxMDksIDEzMzUsIDg0MSwgCisgICAgNTg4OCwgNDEzNTgsIDY0ODYzLCA5NTQ0LCA0MzQ4MSwgMCwgMTk0ODA2LCA3MDAyNywgMjA5OSwgNTEyMCwgMjQwOSwgCisgICAgNzc5OSwgMCwgNzQ0MjQsIDAsIDAsIDQ3MzEsIDAsIDY2NjI5LCAwLCAwLCAxMjU1LCA0MTQ5LCA5MjQ3LCAwLCA5OTEzLCAwLCAKKyAgICAwLCA2NDkxNCwgOTE3Nzg3LCA2NTEwMSwgMCwgMTE2OTQsIDkyNDc1LCAxMTY5MCwgNTgzNSwgMTI3MTY0LCA2NjYyNSwgCisgICAgMTA4NDIsIDQxMzU0LCA0MjEyMywgNDMwOTcsIDExNjg4LCA2NjYzNCwgMTA5NCwgMTk0LCA2NDY5MiwgMCwgODE4MCwgMCwgCisgICAgMCwgOTk3MiwgNzM4NjUsIDQ1MTksIDYxMTQsIDEwODk4LCA0MzA3MiwgMCwgMCwgOTM5NjAsIDk4MzMyMiwgMTI2NTgxLCAKKyAgICAxMDY5NSwgMCwgNzU0MCwgMCwgODgxLCA3ODU3LCA2MDY3LCA2NTE2NCwgMCwgMCwgMCwgMTMzMTEsIDY4NDAzLCA0MTg1NywgCisgICAgNjQzMjEsIDgzNTksIDAsIDEyNjg5LCAwLCAxOTQ1OTQsIDAsIDk4MzMxMiwgOTgzODgxLCA2ODE4MywgMCwgOTgzMzE0LCAKKyAgICAxMjg3LCA1NDM2LCAwLCA5ODMzMTcsIDc0MTQyLCA5MjMyOCwgNzQxNTIsIDExOTA3OCwgNjA1MSwgMTA0OTcsIDY5NjY4LCAKKyAgICA4OTg1LCAxMjEwOSwgOTgzMzIzLCAwLCAxMjcyNDIsIDAsIDAsIDM2NTIsIDEwNTM3LCAwLCAxMjc2LCAxMjA0NDAsIDY1NDksIAorICAgIDI3OSwgNzM3NDUsIDAsIDAsIDAsIDE0ODksIDAsIDAsIDAsIDM4OTksIDEwMDcsIDQyMTI0LCA5ODM1NTcsIDQyMTIyLCAKKyAgICA5MjMzNywgOTIzNjcsIDAsIDExOTg1LCAxMzQ1LCA3ODYwMCwgMCwgMCwgODk1NiwgNDMwODMsIDk0MDU3LCA0MjEzOCwgCisgICAgNzg2MTAsIDAsIDEyMTUxLCA3ODYwOCwgNzg2MDQsIDc4NjA1LCA2Mjg1LCA3ODYwMywgNzg2MTIsIDc4NjEzLCA2NTk0MiwgCisgICAgNDkyLCA4Njg1LCAwLCA5ODM3NTksIDAsIDc4NjIyLCA0MzcxMiwgMjU4MiwgMTE0NzAsIDY0NTM4LCA3NDQ0LCA3ODYxNSwgCisgICAgNzg2MTYsIDIyOTcsIDAsIDczODM3LCAxMTk4MjMsIDI1MjcsIDExOTgyNCwgMTk3LCAyNzk5LCA5MjU5NCwgNDE5NDQsIAorICAgIDEyMDI3NiwgOTkzMywgMCwgNjY1MTUsIDc2NywgNTUyNCwgNzAyOCwgMCwgMCwgMTE5ODI3LCAxMTk4MTcsIDExOTgyOCwgCisgICAgNzg2MzMsIDEwODk2LCAwLCAxNzk5LCAxMjA0OTcsIDY5NzEsIDc0MzM2LCAxMjgzNDIsIDAsIDY1MzQwLCAxMTg5NzksIAorICAgIDQxNTUxLCAyNDM0LCA5NDAxOCwgMCwgMTIwNTc5LCAwLCA0NjMxLCAwLCAwLCA2NDA3LCAwLCA2MzM4LCA0MzIxNCwgMCwgCisgICAgNzU3MCwgMCwgMzE5MiwgMCwgODQxNCwgMCwgOTM5ODMsIDAsIDAsIDAsIDkxNjQsIDY2NjEyLCA5Mzk1OSwgMzE3MSwgCisgICAgNjYyMywgNDk2MSwgNjgzOTYsIDg4NiwgNTUyMTYsIDg2NTQsIDc4ODMyLCA5OTkzLCA3NDM5MCwgNjQ2MDMsIDcwMDY2LCAKKyAgICA2OTI0MSwgOTU5OSwgNzg2MjksIDQzMDg0LCA3ODYyNywgNzg2MjgsIDc4NjI1LCAyMzk5LCA2OTY5MywgODk5NCwgMTA5NDQsIAorICAgIDQxMjA4LCA5ODM3MTMsIDQxMTY4LCA4MTc4LCAwLCAzMzY3LCA5MjMzNCwgNDI1MTAsIDc4NjQxLCA3ODYzNiwgNjgwNCwgCisgICAgNzg2MzQsIDE5NDcsIDAsIDAsIDkyNjgxLCA0Mjc1OSwgMTEwNjgsIDE3MDUsIDkzMzEsIDAsIDc0Nzk4LCA5MTgxLCAKKyAgICA2NTM1OSwgMCwgODAxNywgMTE5ODMxLCA2NTA5NiwgNjY3MjAsIDAsIDQzNDc1LCAwLCA0OTA5LCAxMjEyNiwgMTI4NjczLCAKKyAgICAxMjA2OTYsIDQ5MDQsIDk4MzMzMywgNjk2NTAsIDEzNjUsIDkyNTMsIDQyNzU3LCA0MzQzNiwgNzQ2MiwgMCwgMCwgMCwgMCwgCisgICAgMTE5NTg3LCA2NDQxNSwgMCwgMCwgNTM5OCwgMCwgMTI3Mzg2LCA5Mzk1MywgMCwgMCwgMTE5MDE1LCAwLCAwLCA5NDc2LCAwLCAKKyAgICA5ODM3NzcsIDEyNzYzLCAxMjY2MDMsIDM2MjksIDAsIDEzMDA1LCAwLCAzNjI4LCAwLCAwLCA5MjUwMiwgMzQ2OSwgNDIxMDcsIAorICAgIDQyMTE2LCA5MTc1NzgsIDY0ODA5LCAyOTI4LCA0OTA1LCA5ODUzLCA4NTEsIDkwNDAsIDAsIDY0NjY1LCA0MzA4NiwgOTExNCwgCisgICAgMCwgNDI1ODMsIDkzMTUsIDQ4MjIsIDQ5MDYsIDM4NTIsIDI4NDcsIDExOTgyMSwgMzIzNiwgMTEzMTcsIDEyNTEsIDc3NzcsIAorICAgIDQxODUyLCAxMTQxMCwgMTA5NjQsIDAsIDQzMjIyLCAxMjY0NiwgMTIwMjY5LCAxMDI1OSwgOTg2NSwgNjU4MjEsIDAsIAorICAgIDYwMTgsIDkyMjkwLCAwLCAxMjI3NiwgMCwgNjgzNzIsIDAsIDkyMjU5LCAxMTkyNDQsIDAsIDk4MzIzMCwgMTA0NjcsIDAsIAorICAgIDI0NDMsIDEwOTE4LCA3ODIxNywgMTE5ODI1LCAxMDAxLCA5MjQxLCAxOTI3LCAwLCAwLCA3Mzk4NywgMTI3ODg1LCAwLCAwLCAKICAgICAxMTg4MjgsIDEyMDI3MSwgNjU2NzgsIDEyODY3LCAwLCA4MjYwLCA3Nzk0NSwgNzUxOSwgMTE1MDUsIDEyMjc0LCA4OTA0LCAKICAgICA1MTgsIDY1ODU3LCAwLCAxMjg2NzQsIDEzMjA0LCA0Mzg3LCA4NTcsIDAsIDY1MzY5LCAwLCA5MjMzNiwgNDMxMjUsIAogICAgIDEyMDU5MiwgMCwgMCwgMCwgMCwgNTEzNiwgMTk2OCwgOTgzMDQxLCAxMjY2MjcsIDEzMzcsIDY0OTY3LCAxNjI5LCAwLCAKQEAgLTE4Nzc3LDQ0ICsxODc5Niw0NCBAQAogICAgIDc4Njk4LCA3ODY5NywgNzg2OTYsIDc4Njk1LCA4NzEwLCA0MjQ5NSwgMTE4OTU2LCAwLCA0MDUxLCAxMDQ2MCwgNDMzNjQsIAogICAgIDExODkxNywgMTM1NiwgMTIxNjEsIDQyNzEzLCAxMjg4NTcsIDEyNzI2OCwgMTYxOSwgOTcwMywgNDMxNTIsIDQyNDg5LCAKICAgICA0MjExMiwgMTI3OTc4LCAxODc1LCAxMDgwOCwgNDIxMDksIDEyMDI4NCwgNDE4NjAsIDY0ODYyLCAxMzMwNSwgNjQ5MDcsIAotICAgIDUyODksIDEzMTQ0LCAxMjg2NTgsIDAsIDU1NzUsIDk2NzUsIDAsIDU5NDAsIDIyNiwgMjY0OSwgNjMzNiwgOTgzMjY5LCAKKyAgICA1Mjg5LCAxMzE0NCwgMTI4NjU4LCAwLCA1NTc1LCA5Njc1LCAwLCA1OTQwLCAyMjYsIDI2NDksIDYzMzYsIDk4MzI3NywgCiAgICAgMTE5ODMwLCA0MzIzNiwgMzM4MiwgNDI0NDksIDY0OTgsIDE2NTgsIDExOTM2LCA3ODIzMiwgMCwgMTEyNjksIDEwMTUxLCAKICAgICA3Mzc1OSwgNDMxMDAsIDY5ODg4LCA2NTUwOCwgMCwgMCwgMCwgODkzNSwgOTE3OTg1LCAwLCAwLCAwLCA2MTYsIDc0NzUzLCAKICAgICA2NTE3OCwgNDY4NCwgNzg3MDEsIDExOTY1MywgMCwgMTI2NTUxLCAwLCA2MDQ4LCA3NDQ2MCwgNDIxMTAsIDczOTY1LCAKICAgICAxMDg3MCwgODU1NywgMTEwNTQsIDY4NjY0LCAxMTkwNDksIDk2ODEsIDQ0NzUsIDAsIDQxMTQyLCAyMTAwLCAwLCAxMjA3MzEsIAotICAgIDYwMzUsIDAsIDc2NTEsIDEwMjk2LCA2NDQ0MywgMCwgOTgzMjg3LCA5MTc5ODcsIDAsIDExODk2NiwgNzQxNDQsIDQwOTk3LCAKKyAgICA2MDM1LCAwLCA3NjUxLCAxMDI5NiwgNjQ0NDMsIDAsIDk4MzI5NSwgOTE3OTg3LCAwLCAxMTg5NjYsIDc0MTQ0LCA0MDk5NywgCiAgICAgMCwgMTAzOTIsIDEwMzI4LCA0MDk5OCwgNDM0NjIsIDc0NDg4LCAwLCA5ODAwLCA4OTc5LCAwLCAxMzMwNywgNDEwMDAsIDAsIAogICAgIDExOTIzOSwgNjQ4NywgMzM4NiwgMCwgMTAzNDQsIDAsIDY1Mjk5LCA1Mzk0LCA0MzI0NiwgNzgyNDMsIDEwMjIwLCA2NjUwNSwgCiAgICAgNDEyMDAsIDEyODU4MywgNDQyNSwgMCwgMCwgMCwgNDMwNzQsIDczNzk5LCA5ODMyMDAsIDc4MTQ3LCAwLCAxMjE3MywgCiAgICAgNzg1NDUsIDAsIDEyNzAxMSwgNjUzMzgsIDAsIDAsIDExOTU4MiwgNDQ3NCwgMCwgNDMwOTMsIDEyODY0NCwgMTU4NywgMCwgCi0gICAgMTI3MzcyLCA2NDQ3NSwgMTI4MDk4LCAxMzY5LCA5ODM2NjMsIDk5NTksIDc5MjcsIDAsIDQ1NjAsIDAsIDAsIDkyMjc3LCAwLCAKLSAgICA2NDk0OCwgNDQzMCwgNzQzNDcsIDQyNjAxLCA0NTE0LCA2NjQzNCwgOTM5NTUsIDgxOTQsIDY1NDYyLCAxMDYyNiwgMTA5NjUsIAotICAgIDAsIDg4OTMsIDk4MzI5MywgMTI1NDIsIDAsIDY1MzQxLCAwLCA2NTgyOSwgNzkyNSwgMTE5ODIyLCAxMDQ3NSwgMCwgMCwgCi0gICAgMTM1MiwgMTEwNjksIDc3MDcsIDEyNzU2MCwgMTI2NDg2LCA2NTI3OSwgMTI3MTAyLCA2ODIwNywgMTI3MTAwLCA3MDk5LCAKLSAgICA2MDQwLCAxMjcwOTcsIDEwMDcxLCAwLCA5MzM2LCA0Mzc1MCwgMCwgODg5OSwgNzc5OCwgNjQ0NzQsIDY0MjU5LCA2OTg3MywgCi0gICAgNjUxODgsIDc4MjAsIDQzMDE4LCAxMjcwODIsIDAsIDc3NDYsIDE0OTIsIDc4NTUxLCAxMDg4NCwgNzc5ODIsIDAsIDUxMjcsIAotICAgIDExMjg1LCA0MjUwMSwgNTQ5NSwgNDI3MywgNDMwOTUsIDQxNDI2LCAxMDg0OSwgNTczMCwgMjk5OSwgNjM0MiwgNjg2MzYsIAotICAgIDc0MzA0LCAzNzEsIDY0MzczLCA2MDIzLCAxNjksIDU0OTcsIDExNzA4LCAwLCAwLCA2MzIzLCAxOTQ2ODQsIDgyMjQsIDAsIAotICAgIDg5MzgsIDYwNDMsIDEyNzM4LCAwLCA5ODMwNzYsIDUzMjEsIDAsIDE5NDc5OCwgMCwgMjU4OSwgNzQzMzIsIDE2ODksIAotICAgIDc4MDIsIDQ2ODMsIDc0MzE4LCA0MjcwNCwgMTIwMjk2LCAxMTkwNSwgMCwgMCwgMTI4NTE2LCAxMjgxNjMsIDc0NTEzLCAKLSAgICA2MDQ5LCAwLCA0MDI3LCA4MzQsIDExODk2MiwgMTgwMywgMCwgMTUwMywgMCwgMCwgNzEzMTIsIDU3MzEsIDEzODEsIDIzODcsIAotICAgIDAsIDAsIDgyODksIDY0NTI1LCA2NTgxNywgMjg4MSwgNDMxNDIsIDAsIDk2MDEsIDI4NzksIDk2NjgsIDk3NjYsIDAsIAotICAgIDU3MjksIDkxNzgzMywgNzQ0MTAsIDYwMzYsIDY0ODgxLCA0MDI2LCA5MzYxLCAxMjcwOTEsIDI4ODcsIDAsIDM1MjYsIAotICAgIDYyOTgsIDAsIDc3ODk3LCAxMjAwOTUsIDc4NTE5LCAwLCA4NTcyLCA2MDIxLCA3Nzg5NiwgMTI4Mjg4LCA3Nzg5NSwgCi0gICAgNDMxNTUsIDAsIDExOTg0OSwgMzE0NiwgMTA5NTksIDk0ODMsIDAsIDc3ODkzLCAxMDk4MSwgMTY2LCA5MTc4NDEsIDg2MzUsIAotICAgIDk4MzYwNiwgMTA2MjMsIDQwOCwgMTE5MDU4LCAxMjc1MDcsIDEzMjk4LCAwLCA3NDI2LCA0MTY0MSwgMTI3MTcsIDAsIAotICAgIDc2MDcsIDEwNjM5LCA0MzM5NiwgMCwgMCwgNDE2NDMsIDc0MTM0LCA5ODMwNTQsIDg3MTMsIDQxNjQwLCAxMDIyMSwgCi0gICAgNDE2NDUsIDY2NzEyLCA2NjQ1LCA2NDYsIDY2NzI2LCA2NjcxMSwgNDIxMjksIDkzOTk0LCA3NzkwMSwgMzQ3MiwgODY5NywgCi0gICAgMCwgMCwgOTgzODA2LCAwLCAwLCAwLCA1ODA5LCAxOTUwLCAxMTkzNTYsIDkyNDMyLCA3NDU3MiwgMCwgNDIxMzYsIDAsIDAsIAotICAgIDAsIDAsIDMyNDcsIDExOTg1NCwgNjUwMTcsIDk4Mzk0NCwgNjg0MjgsIDY2NjY4LCAwLCAwLCAxMDk4MywgMCwgMCwgMCwgCi0gICAgNDE1NjcsIDAsIDAsIDAsIDE5NDYyNCwgMTE5ODUzLCAwLCAwLCA4Mjg1LCAwLCA0NTA5LCAwLCA2NjQ3MSwgMTIyMTYsIDAsIAotICAgIDQwOTg4LCA5MjU5MiwgNzQ4MDksIDQxNzI3LCAwLCA0Mjg0OCwgMjM5NiwgOTE3NzY2LCAwLCA3NDAxOCwgOTE3NTM4LCAKKyAgICAxMjczNzIsIDY0NDc1LCAxMjgwOTgsIDEzNjksIDk4MzY3MiwgOTk1OSwgNzkyNywgMCwgNDU2MCwgMCwgMCwgOTIyNzcsIAorICAgIDk4MzYyMSwgNjQ5NDgsIDQ0MzAsIDc0MzQ3LCA0MjYwMSwgNDUxNCwgNjY0MzQsIDkzOTU1LCA4MTk0LCA2NTQ2MiwgCisgICAgMTA2MjYsIDEwOTY1LCAwLCA4ODkzLCA5ODMzMDEsIDEyNTQyLCAwLCA2NTM0MSwgMCwgNjU4MjksIDc5MjUsIDExOTgyMiwgCisgICAgMTA0NzUsIDAsIDAsIDEzNTIsIDExMDY5LCA3NzA3LCAxMjc1NjAsIDEyNjQ4NiwgNjUyNzksIDEyNzEwMiwgNjgyMDcsIAorICAgIDEyNzEwMCwgNzA5OSwgNjA0MCwgMTI3MDk3LCAxMDA3MSwgMCwgOTMzNiwgNDM3NTAsIDAsIDg4OTksIDc3OTgsIDY0NDc0LCAKKyAgICA2NDI1OSwgNjk4NzMsIDY1MTg4LCA3ODIwLCA0MzAxOCwgMTI3MDgyLCAwLCA3NzQ2LCAxNDkyLCA3ODU1MSwgMTA4ODQsIAorICAgIDc3OTgyLCAwLCA1MTI3LCAxMTI4NSwgNDI1MDEsIDU0OTUsIDQyNzMsIDQzMDk1LCA0MTQyNiwgMTA4NDksIDU3MzAsIAorICAgIDI5OTksIDYzNDIsIDY4NjM2LCA3NDMwNCwgMzcxLCA2NDM3MywgNjAyMywgMTY5LCA1NDk3LCAxMTcwOCwgMCwgMCwgNjMyMywgCisgICAgMTk0Njg0LCA4MjI0LCAwLCA4OTM4LCA2MDQzLCAxMjczOCwgMCwgOTgzMDc2LCA1MzIxLCAwLCAxOTQ3OTgsIDAsIDI1ODksIAorICAgIDc0MzMyLCAxNjg5LCA3ODAyLCA0NjgzLCA3NDMxOCwgNDI3MDQsIDEyMDI5NiwgMTE5MDUsIDAsIDAsIDEyODUxNiwgCisgICAgMTI4MTYzLCA3NDUxMywgNjA0OSwgMCwgNDAyNywgODM0LCAxMTg5NjIsIDE4MDMsIDAsIDE1MDMsIDAsIDAsIDcxMzEyLCAKKyAgICA1NzMxLCAxMzgxLCAyMzg3LCAwLCAwLCA4Mjg5LCA2NDUyNSwgNjU4MTcsIDI4ODEsIDQzMTQyLCAwLCA5NjAxLCAyODc5LCAKKyAgICA5NjY4LCA5NzY2LCAwLCA1NzI5LCA5MTc4MzMsIDc0NDEwLCA2MDM2LCA2NDg4MSwgNDAyNiwgOTM2MSwgMTI3MDkxLCAKKyAgICAyODg3LCAwLCAzNTI2LCA2Mjk4LCAwLCA3Nzg5NywgMTIwMDk1LCA3ODUxOSwgMCwgODU3MiwgNjAyMSwgNzc4OTYsIAorICAgIDEyODI4OCwgNzc4OTUsIDQzMTU1LCAwLCAxMTk4NDksIDMxNDYsIDEwOTU5LCA5NDgzLCAwLCA3Nzg5MywgMTA5ODEsIDE2NiwgCisgICAgOTE3ODQxLCA4NjM1LCA5ODM2MDYsIDEwNjIzLCA0MDgsIDExOTA1OCwgMTI3NTA3LCAxMzI5OCwgMCwgNzQyNiwgNDE2NDEsIAorICAgIDEyNzE3LCAwLCA3NjA3LCAxMDYzOSwgNDMzOTYsIDAsIDAsIDQxNjQzLCA3NDEzNCwgOTgzMDU0LCA4NzEzLCA0MTY0MCwgCisgICAgMTAyMjEsIDQxNjQ1LCA2NjcxMiwgNjY0NSwgNjQ2LCA2NjcyNiwgNjY3MTEsIDQyMTI5LCA5Mzk5NCwgNzc5MDEsIDM0NzIsIAorICAgIDg2OTcsIDAsIDAsIDk4MzgxNSwgMCwgMCwgMCwgNTgwOSwgMTk1MCwgMTE5MzU2LCA5MjQzMiwgNzQ1NzIsIDAsIDQyMTM2LCAKKyAgICAwLCAwLCAwLCAwLCAzMjQ3LCAxMTk4NTQsIDY1MDE3LCA5ODM5NTMsIDY4NDI4LCA2NjY2OCwgMCwgMCwgMTA5ODMsIDAsIDAsIAorICAgIDAsIDQxNTY3LCAwLCAwLCAwLCAxOTQ2MjQsIDExOTg1MywgMCwgMCwgODI4NSwgMCwgNDUwOSwgMCwgNjY0NzEsIDEyMjE2LCAKKyAgICAwLCA0MDk4OCwgOTI1OTIsIDc0ODA5LCA0MTcyNywgMCwgNDI4NDgsIDIzOTYsIDkxNzc2NiwgMCwgNzQwMTgsIDkxNzUzOCwgCiAgICAgNjQ5NDAsIDcwMjcsIDM4ODYsIDAsIDQyNDU3LCAxMTkwMDgsIDAsIDk5NiwgNjgxMjMsIDk0MDU4LCA0MjQ5LCAwLCAKICAgICA5MTc1OTQsIDExNzA3LCA4MjIyLCAwLCA3OTM5LCA5MjQ1NCwgOTI0NjAsIDEyNzgwMSwgOTE3NTkyLCAxMjgzNTksIDg1MzQsIAotICAgIDEyNzE1NCwgNDA5ODMsIDAsIDk4MzIzNCwgMCwgNzIwMSwgMTI1NjEsIDAsIDQyMzcxLCAxMjU1OCwgMTU0MCwgOTE3NTQ5LCAKKyAgICAxMjcxNTQsIDQwOTgzLCAwLCA5ODMyNDAsIDAsIDcyMDEsIDEyNTYxLCAwLCA0MjM3MSwgMTI1NTgsIDE1NDAsIDkxNzU0OSwgCiAgICAgMTAwNTIsIDQwOTgyLCAwLCAwLCAxNDg4LCAwLCAwLCAwLCA5MTc1NTksIDAsIDAsIDE1NjMsIDEyODAzNCwgOTYxOSwgCi0gICAgOTgzOTMxLCAwLCAwLCAxMjc4NzIsIDcxMzYzLCA1ODAzLCA3Nzk3LCA2MDcwLCAxMDAwNiwgMCwgMjkyMiwgNjA4MiwgMCwgCi0gICAgNjUwMDksIDk4MzkzMywgMTI1NjcsIDEyODcwMywgMCwgNDE0MTIsIDAsIDAsIDM2MDcsIDkyMDAsIDEwMDQ2LCA5NjEyLCAKKyAgICA5ODM5NDAsIDAsIDAsIDEyNzg3MiwgNzEzNjMsIDU4MDMsIDc3OTcsIDYwNzAsIDEwMDA2LCAwLCAyOTIyLCA2MDgyLCAwLCAKKyAgICA2NTAwOSwgOTgzOTQyLCAxMjU2NywgMTI4NzAzLCAwLCA0MTQxMiwgMCwgMCwgMzYwNywgOTIwMCwgMTAwNDYsIDk2MTIsIAogICAgIDQyMTUzLCA4MjE4LCA5NDg1LCAwLCAyMDMyLCA3ODM1NCwgMCwgMCwgMCwgMCwgMCwgNDMwODUsIDYwNTcsIDUwOCwgCiAgICAgOTM5NjgsIDEyODAxNSwgNjc5NjgsIDAsIDkyNDA1LCAwLCAwLCA2MzgsIDYwODMsIDExOTA3MiwgMCwgMCwgMjMwNSwgCiAgICAgNzgzNDgsIDY4MDk2LCAwLCA2MDU2LCA2NjU5LCA2Nzk2OSwgMCwgNjA4NSwgMCwgMCwgMzkxNSwgNDE2MzQsIDAsIDQxNjM5LCAKQEAgLTE4ODIyLDE1ICsxODg0MSwxNSBAQAogICAgIDEyMzI4LCA1MDEsIDkzOTg1LCAxMDYwMSwgMCwgNTgzLCAwLCA0MTk3NywgMCwgNjYwMDQsIDExOTM1MCwgNjUwNSwgCiAgICAgNzQwMTAsIDAsIDEzMDY0LCA1NTI2NywgMTIwODEwLCA2NTAwLCA1NTI2LCA2NTA0OSwgMCwgNzM3NjQsIDAsIDkyMzc2LCAKICAgICAxMjc0NSwgOTY3OCwgMCwgMTIwNTg3LCA5ODY5LCAxMjg4MTUsIDE3NzEsIDAsIDg5MzYsIDAsIDAsIDQyMDgsIDc4MzQxLCAKLSAgICA3ODU2NywgNzgzNDIsIDAsIDk4MzQ0OCwgNzQxMDEsIDAsIDExNzYyLCAwLCA5MjQyMiwgNzc5OTcsIDY4MDEwLCA2NjQ3NSwgCisgICAgNzg1NjcsIDc4MzQyLCAwLCA5ODM0NTYsIDc0MTAxLCAwLCAxMTc2MiwgMCwgOTI0MjIsIDc3OTk3LCA2ODAxMCwgNjY0NzUsIAogICAgIDAsIDUwMjcsIDc4MTcyLCAxMjg4NzgsIDAsIDUwNjksIDczODYyLCA1MDI4LCA5ODk3LCAwLCA3MzczOSwgNTAyNiwgCi0gICAgOTgzMjQ3LCA2ODYzOSwgNjMzMSwgMTAwNzksIDg5MzEsIDAsIDE0MTUsIDg4NjYsIDQxOTAxLCA3NDc5MCwgNzgxMzgsIAorICAgIDk4MzI1MywgNjg2MzksIDYzMzEsIDEwMDc5LCA4OTMxLCAwLCAxNDE1LCA4ODY2LCA0MTkwMSwgNzQ3OTAsIDc4MTM4LCAKICAgICAxMTkzNjEsIDk4MzU2NCwgNDMxMDYsIDUwMjksIDY1MzA5LCAxNTgwLCAzNTk4LCA2ODQyNCwgNDEwNzAsIDc3OTAzLCAwLCAKLSAgICAzNDQwLCA3ODIxNSwgMTU2MiwgMTI4NjU2LCAxMjcxNzUsIDExOTM1OCwgMTcxNiwgOTgzNjcwLCAxMDYwMCwgOTE3ODY3LCAKKyAgICAzNDQwLCA3ODIxNSwgMTU2MiwgMTI4NjU2LCAxMjcxNzUsIDExOTM1OCwgMTcxNiwgOTgzNjc5LCAxMDYwMCwgOTE3ODY3LCAKICAgICA2MjAsIDQxMDAxLCA2MDI4LCAwLCA0Mjg5MiwgMCwgNzQ4MjIsIDUwMjQsIDEyMDgyOSwgNDEwMDMsIDAsIDUwMjUsIAotICAgIDY5ODkyLCA5ODMyMDcsIDAsIDExODg4NSwgMCwgNjU1NTcsIDAsIDc0NTQxLCA5ODM1ODcsIDExNTk5LCAxMjgyMDksIAorICAgIDY5ODkyLCA5ODMyMDksIDAsIDExODg4NSwgMCwgNjU1NTcsIDAsIDc0NTQxLCA5ODM1ODcsIDExNTk5LCAxMjgyMDksIAogICAgIDExNjAyLCA2MjQzLCAxMTU3NCwgMTE1ODEsIDExNTk3LCAxMTU5OCwgNjI1MywgNjEwNSwgMTE1ODQsIDc0MTk1LCAxMTU2OSwgCi0gICAgNjUyNzUsIDg5MDYsIDEyNzA5NiwgNTc1NSwgMjYzNiwgMCwgMTA4MTUsIDExNjE5LCAyMzAxLCA0MTU0MCwgNzgxNSwgCisgICAgNjUyNzUsIDg5MDYsIDEyNzA5NiwgNTc1NSwgMjYzNiwgOTgzMjI3LCAxMDgxNSwgMTE2MTksIDIzMDEsIDQxNTQwLCA3ODE1LCAKICAgICAxMTYxNiwgNjk3OSwgMTIwODAsIDc3MjEsIDExNjA0LCA3ODY5LCAxNTkyLCAwLCA0MjE1MiwgNzg0OTgsIDQxMDQ4LCAKICAgICA5MTc3NjMsIDgyOSwgMCwgOTI0MDYsIDE5OTUwLCAwLCAxMjY0ODIsIDY2MTYsIDAsIDExODg3NSwgMTA5NTMsIDM5MSwgMCwgCiAgICAgNjk3ODUsIDQ4MiwgNDIyOTYsIDExNTg4LCAwLCA0MzYwNiwgMCwgNjgzOTcsIDY2MzcwLCA3NDUwNiwgNDIzMzUsIApAQCAtMTg4MzksOSArMTg4NTgsOSBAQAogICAgIDExMzM3LCA3ODIwOSwgOTE3ODIwLCA2Mzk4OSwgMzk1OCwgMTIxMzIsIDE4NDksIDAsIDk5MjEsIDQyNDUxLCA0MjUzLCAKICAgICA0MTE0NywgNDIwNjQsIDExOTU5LCA0MjQwNCwgNDExNjAsIDAsIDM2MTgsIDc4MzM4LCAwLCA0MzMwMCwgNTE1NiwgOTI2MjksIAogICAgIDAsIDkyOSwgNjgyNywgNDIwMzUsIDQyNDM3LCAxNTU1LCAwLCA4NjkxLCA2NjQzNSwgMjIxNSwgNDE2NjIsIDk0MDEwLCAwLCAKLSAgICAwLCAwLCA5Mzk1MiwgNDU3OCwgNjQ1MTMsIDQxNjY0LCA5ODM3MjUsIDQyNTc4LCAxMjg3OTQsIDQxNjYxLCA3ODcxNSwgCisgICAgMCwgMCwgOTM5NTIsIDQ1NzgsIDY0NTEzLCA0MTY2NCwgOTgzNzM0LCA0MjU3OCwgMTI4Nzk0LCA0MTY2MSwgNzg3MTUsIAogICAgIDQzMjY3LCA5MzU2LCAwLCAwLCAwLCAxMjg2LCAxMDE2NiwgMCwgMCwgNjQ3MDcsIDk4MzEyNywgNDI0NzYsIDc3MzAsIAotICAgIDk4Mzg1MCwgMTI4NTIyLCA0MjQ4MywgMCwgMCwgNDIzMjQsIDQyMjkxLCAxMDAyMCwgNDMzNTksIDAsIDY2NDEsIDUyNSwgCisgICAgOTgzODU5LCAxMjg1MjIsIDQyNDgzLCAwLCAwLCA0MjMyNCwgNDIyOTEsIDEwMDIwLCA0MzM1OSwgMCwgNjY0MSwgNTI1LCAKICAgICA0MTYyNywgOTE3OTIzLCA4NzYzLCAxMjgzMDQsIDQxNjI4LCA1MzMsIDExOTMxLCA2NTIyNSwgODMyMSwgNDI1MDQsIAogICAgIDQyNTgxLCAwLCA2OTE1LCA0MjMxMCwgNDM3NywgODU1OSwgMCwgNzQzNjAsIDAsIDEzMTkzLCA2NDM1MCwgMTE2NjYsIAogICAgIDg2NzksIDQxOTI0LCAxNTc2LCA3NzM1LCA5MjM5OCwgMCwgNzM4NDAsIDk4MzA5MiwgMTEzNzQsIDc4MDQzLCAxMDg4OSwgCkBAIC0xODg1OSwyNCArMTg4NzgsMjQgQEAKICAgICA4MjQ0LCAzNjIsIDkyNDM5LCAwLCA4MDM3LCA0Mzc3NywgMTE1MzUsIDAsIDc0ODQ1LCA1MTg1LCA3MTY1LCA1NTIxLCAKICAgICAxMDMzNCwgMjA5MywgNzEzMjksIDEwMzAyLCAxMjgxMTIsIDEwMTA0LCAxMDI3LCA1MTgxLCAwLCAwLCAxMDUyMywgMTQ0NiwgCiAgICAgNDIzMjAsIDQxNjQ2LCA5OTEsIDUxODksIDQyNDcyLCA0MTY0NywgMTIwMTA1LCAxNzIyLCA1NTgxLCA0Mjg5OCwgMzQwNSwgCi0gICAgMCwgMTk0NjQ0LCA1NTIzLCAwLCA0MjYyMCwgOTI0NDcsIDk4MzgxMCwgOTU0OSwgMCwgMTA1NDksIDU1MjgyLCA5NjYxLCAKLSAgICA0MzY4MiwgMCwgNzc5MTAsIDEyMDAyNiwgNzg3MDgsIDAsIDc3OTExLCAwLCA0MTk5MSwgOTgzODg0LCAwLCA3NjMwLCAKKyAgICAwLCAxOTQ2NDQsIDU1MjMsIDAsIDQyNjIwLCA5MjQ0NywgOTgzODE5LCA5NTQ5LCAwLCAxMDU0OSwgNTUyODIsIDk2NjEsIAorICAgIDQzNjgyLCAwLCA3NzkxMCwgMTIwMDI2LCA3ODcwOCwgMCwgNzc5MTEsIDAsIDQxOTkxLCA5ODM4OTMsIDAsIDc2MzAsIAogICAgIDk4NDYsIDc2ODQsIDEwMzUwLCAwLCAxMTc0LCA3Nzk4MSwgNDI3MzMsIDc3OTc4LCA3Nzk4MCwgNjY0ODUsIDc3OTc3LCAKICAgICA0MjI3NywgNzc5NzQsIDQyNDU2LCA2NTY2NywgMTI3MDM3LCAxMjMzMCwgMTI4MjcyLCAwLCA0MjQxNywgNDIzODMsIAogICAgIDY2NjMwLCA0MTM0NCwgNjI5MywgMCwgNjYyNTIsIDc3OTg0LCA3NDQ0MywgMCwgMTAyMDksIDgzMTMsIDQxOTUsIDc0NDM1LCAKLSAgICAxMzE2LCA2NjY5MCwgMTIwMDMyLCA2MzMyLCA2NDg5NCwgMCwgNjU4NzEsIDc4MDYwLCAxNzM2LCA5ODM2NzUsIDM5MDEsIAorICAgIDEzMTYsIDY2NjkwLCAxMjAwMzIsIDYzMzIsIDY0ODk0LCAwLCA2NTg3MSwgNzgwNjAsIDE3MzYsIDk4MzY4NCwgMzkwMSwgCiAgICAgMTIyMjgsIDEyMDE1MSwgNjUyMDAsIDMzODMsIDEwNDQ2LCA3ODg0MSwgNjkzLCA5MTMwLCAzMTQsIDY0MTQ5LCA0MjQyMCwgCi0gICAgMTE5NDksIDk4MzY2MCwgMTIwMTUyLCAxMTAyNiwgMTI4Nzg4LCA1MzMyLCA2OTQwLCA2NDE1NCwgMTI2MzUsIDEyNzAwNywgCisgICAgMTE5NDksIDk4MzY2OSwgMTIwMTUyLCAxMTAyNiwgMTI4Nzg4LCA1MzMyLCA2OTQwLCA2NDE1NCwgMTI2MzUsIDEyNzAwNywgCiAgICAgNDI3MDYsIDE3NTEsIDI3MywgODE2NSwgMTMxNjYsIDEyMDc2MywgNzg4NDAsIDcxMzY4LCAxMjgyNCwgMCwgNDUyOCwgCiAgICAgNTMyMCwgNjMwMSwgNDM2NjIsIDYxMzMsIDkzMzksIDk0NjMsIDQyMzQ2LCAxMDkyMiwgNjQ1NjAsIDM3NTcsIDAsIDAsIDAsIAotICAgIDY1ODY5LCA3Mzc2MCwgMjU2OSwgMCwgMjMyNiwgNjU3NDAsIDI1NjUsIDQyNDU5LCA3NTk2LCA3OTIxLCA5ODM4NTksIAotICAgIDc0MDk1LCAxMjc5ODEsIDQxODQ4LCAyNTY3LCA2NjAwNiwgMCwgNDA0NCwgOTI2NDYsIDAsIDEyMjMzLCA5ODM4NjIsIAorICAgIDY1ODY5LCA3Mzc2MCwgMjU2OSwgMCwgMjMyNiwgNjU3NDAsIDI1NjUsIDQyNDU5LCA3NTk2LCA3OTIxLCA5ODM4NjgsIAorICAgIDc0MDk1LCAxMjc5ODEsIDQxODQ4LCAyNTY3LCA2NjAwNiwgMCwgNDA0NCwgOTI2NDYsIDAsIDEyMjMzLCA5ODM4NzEsIAogICAgIDEwMjMsIDQ3NCwgMCwgMTE5ODE4LCAwLCAwLCA0MjQ4NywgNjU1NTYsIDAsIDEyNzg2NiwgNDIyOTUsIDAsIDAsIDcxMzIyLCAKICAgICA5MjUxOCwgOTgzNSwgNjY0OTksIDAsIDU0MTcsIDEyMjc1LCAxMDg5NSwgMCwgMjc0LCAwLCAxODU4LCAwLCAwLCA1NTI1MSwgCiAgICAgMTAxMTgsIDMxMzMsIDEyODAwOCwgNzM3OTUsIDAsIDk2MTAsIDgwNjgsIDgxOTcsIDAsIDY5OSwgMCwgNDE2NjUsIDU4NjgsIAogICAgIDAsIDkyNjk1LCA0MjE4MiwgNzU4MSwgMTk5NDAsIDQzNjY4LCA0MTY2NywgMTI4MDU3LCAwLCAxOTIzLCA2NTU4MywgCiAgICAgNjU4MDIsIDkzOTcwLCA2NDU5NywgNDM0NDQsIDExOTE4NCwgOTIxOTcsIDAsIDY0NjQsIDcwMzYsIDI5OTYsIDE5MzcsIAotICAgIDk4Mzc0MiwgMCwgNDE4MzUsIDQwNDcsIDQxODQyLCAwLCA2NDEwNywgMCwgMCwgMTEwMTcsIDEyMDYwMSwgMCwgMjkzLCAKKyAgICA5ODM3NTEsIDAsIDQxODM1LCA0MDQ3LCA0MTg0MiwgMCwgNjQxMDcsIDAsIDAsIDExMDE3LCAxMjA2MDEsIDAsIDI5MywgCiAgICAgNzc5NjYsIDkyMTY5LCA2NDc5MSwgNDE4MjcsIDQyNDY2LCA0MzQyMiwgMTA1NzksIDg1NjAsIDcxMzUwLCA2NTQxMywgCiAgICAgNzc5NjMsIDQ4MDMsIDEyOTY0LCAxNzM5LCAxOTQxLCAzOTAwLCAwLCAxNzEzLCA3Nzk2OSwgMCwgNzM5NTcsIDExNDA3LCAKICAgICA0MjQ0MSwgNDE5NzEsIDYyOTcsIDEyMDA5OCwgNjQxMDUsIDEyODA4MCwgNDI0ODEsIDExNzE2LCA2NjQ3MywgNzE3OSwgCkBAIC0xODg5NCwzMzcgKzE4OTEzLDMzOCBAQAogICAgIDM2NTksIDk1MzMsIDE4NCwgMTU1MywgMTMxMDcsIDY1NDg0LCA2OTY0OCwgMTA1MDIsIDc0NDU3LCAwLCAwLCA0MTU1NCwgMCwgCiAgICAgODIyMCwgOTE3OTQzLCA0MTU1NywgMCwgMCwgMTEwNzAsIDExOTIyMSwgNTE1NywgNDAyMCwgNzM4NTgsIDQxNTU1LCA5NTE0LCAKICAgICA2NDgxOCwgNjUxMDMsIDY0NjQxLCA2NDMwMywgNzgxMzEsIDc1MjAsIDAsIDc0Mzc3LCAxMTAyOSwgNjY2NTEsIDk4MzA2OCwgCi0gICAgMCwgMTE4OTMwLCA2NDUyNywgMCwgNzg3NywgNzM4MDMsIDk4Mzc4OSwgMTI3MzQ4LCAxMjAwOTYsIDc0NjAyLCA5OTU1LCAKKyAgICAwLCAxMTg5MzAsIDY0NTI3LCAwLCA3ODc3LCA3MzgwMywgOTgzNzk4LCAxMjczNDgsIDEyMDA5NiwgNzQ2MDIsIDk5NTUsIAogICAgIDExOTU1NywgNDA1NSwgNDI4MTcsIDAsIDY1MjEyLCAxMTcxNSwgMTIxOTAsIDEyMzE5LCA3ODYzMCwgMCwgNzg2MzEsIAogICAgIDk1MDIsIDY1NDI3LCAwLCA2NTQyNCwgMTI2MDcsIDAsIDk3MzQsIDY1NDI1LCAwLCAwLCAxMjczNTcsIDc4ODM1LCA5MjQxMCwgCiAgICAgMTAxMTIsIDEwODI3LCAwLCA5ODY2LCA3NDUyNywgNjY2NzUsIDAsIDg2MjUsIDY0MzQ2LCAxMTI5MCwgMTA0NzcsIDAsIAotICAgIDg2MzYsIDk4MzkxOCwgODMxNSwgNjU0NDQsIDk4Mzc4NCwgMCwgNzQ1OTUsIDYxNTIsIDAsIDAsIDY2MjksIDEyNzEwOCwgCisgICAgODYzNiwgOTgzOTI3LCA4MzE1LCA2NTQ0NCwgOTgzNzkzLCAwLCA3NDU5NSwgNjE1MiwgMCwgMCwgNjYyOSwgMTI3MTA4LCAKICAgICAxMjAxNzEsIDAsIDc0NTg5LCA0Mzk5MywgMCwgNjk3OTAsIDY0NDM1LCAwLCA0MzY5MCwgMTEwNDYsIDExNDkwLCA0MjczMCwgCiAgICAgNDQ4NSwgMTI3MTA3LCAwLCA2NDkyNiwgMCwgMCwgMCwgNTg2OSwgMTI0MzcsIDQyNzI4LCAwLCA3MDQwLCAzNTg4LCAwLCAKLSAgICAxMjgyNSwgMCwgMCwgMTI3MjUsIDAsIDAsIDc4NjQyLCAyMjMsIDAsIDY5Njc1LCAxMjAxNjYsIDQyNDQ0LCAwLCA2NDQ5OSwgCi0gICAgNjUyNDUsIDAsIDExNzEsIDAsIDY5NzE3LCAwLCAxODA1LCA4NzcyLCA0MzgyMCwgMCwgOTkzMCwgNjUyNDcsIDc4NjE5LCAKLSAgICAxMjAxMTEsIDIzMzgsIDAsIDExODg1MywgMCwgNDI2NzYsIDAsIDY0ODAwLCA2NTIzNiwgNjc2NDQsIDY4MTI2LCAxMjEzLCAKLSAgICAwLCA2NDA3NSwgNzk3LCA2NDA3NCwgODczNCwgNDIxMiwgMTI3MzY5LCA2NDM4NywgNDExNSwgMCwgNTAwNSwgNjQwNzAsIAotICAgIDY0MDczLCAxMDY3OSwgMCwgNzc5NTQsIDk0MDIsIDY0Mjc2LCA0MjYsIDAsIDAsIDgyNTEsIDEwMTM2LCA2NTQzNiwgMCwgCi0gICAgMjEyMCwgNDMzMDIsIDEyMjQsIDAsIDY1NTc2LCA3NDE5MiwgMTA3MDEsIDE3NjQsIDMxMDEsIDEyNzgxNSwgMTI4NTgsIAotICAgIDEyMDE1OSwgMCwgMTEzNzMsIDYzNzgsIDEyNzg1OSwgMTIwMTAzLCA4NjYzLCA5MzEyLCA0MTY0NCwgNDUzOSwgMjEyOSwgMCwgCi0gICAgOTIyMiwgOTgzNzI5LCAwLCA0MjU5LCA5MDkyLCA3NDU2NywgNDE5NjEsIDAsIDEyNzI0LCA2NjM1NywgNDIzMzEsIDY0OTM1LCAKLSAgICAwLCAwLCAxMjkzLCA3OTQ3LCAyMTMyLCA5ODM3NTgsIDc0NTkzLCAxMjAzMDgsIDI0NTQsIDQyNzE3LCAzNjEzLCAxMjg4MzcsIAotICAgIDAsIDAsIDY1ODg4LCA4ODE2LCAxMDk3OCwgMTA4NDAsIDAsIDEwNjY4LCAwLCA0MzA4NywgMTI1OTUsIDEyMDMwNCwgCi0gICAgOTgzMTE0LCA4ODIyLCAwLCAxMTU3LCA2NDkwMywgODYzOCwgMCwgMCwgMCwgMCwgNjk4NDgsIDgyMzUsIDEyMDMxNiwgCi0gICAgNDQwNSwgMTAwODYsIDEyMDI0NywgMCwgNjkyMTYsIDAsIDY1NDMwLCA3MTMyMSwgNjA3OSwgNjgxNywgMTA3NjQsIAotICAgIDEyNzkxMCwgNjQyOTEsIDEyODA1MSwgOTk4LCAxMjAzMTIsIDExMDYyLCAxMzE3LCA2NDMyNywgMTU1OCwgMCwgMTk5MSwgCi0gICAgNzg4MiwgNDIyNTQsIDAsIDQxNzAwLCA1MzAsIDAsIDEwNDI4LCAxMTkzMzUsIDEyMDAyLCAxMTkzMzYsIDU3NDIsIDQzMDc2LCAKLSAgICA0NjkyLCA2NDYzMCwgNDE4MjMsIDQwMDcsIDUwMDQsIDExOTMzNCwgNzg5NiwgNzUxLCA2NTk1LCA2NTk2LCAxMjAzMjUsIAotICAgIDY2MzczLCAwLCAwLCA2NDkwOCwgOTI2OTEsIDYzMTEsIDAsIDEyMDA0LCAxMTkxOTIsIDEyMDQ5LCA0MzEwOCwgMTIwMzI2LCAKLSAgICAwLCA0MTcwNSwgOTIxODgsIDY1OTgsIDAsIDY1OTksIDEyMDMzNCwgMCwgNDIxNDgsIDExODgyNSwgNjYwMjcsIDAsIDY1OTcsIAotICAgIDk0MTIsIDgzNDAsIDExODI0LCA2NDc0NSwgMjI4MSwgNjk5MDQsIDAsIDE5ODgsIDU0MDcsIDY3ODY1LCAyNDMwLCA0MTY3OCwgCi0gICAgMCwgMTIwMjQzLCAyMzM2LCA5ODM4OTQsIDAsIDc4ODcxLCAxMjA0NDIsIDk4Mzc2MCwgMTkyMSwgMTA5NDcsIDE5OTI3LCAwLCAKLSAgICA2NTQwNiwgMCwgMTk5MTMsIDQyODQsIDEzMjE3LCAwLCA0Mzc4OSwgMTI4NDEsIDkyMjksIDEwOTU2LCA0MjI4NSwgNDE2NzQsIAotICAgIDE5OTY0LCA0MTY3OSwgNjUwODQsIDM1MjEsIDAsIDU3NzQsIDgzMjUsIDAsIDY1NDAzLCA5ODMwODksIDE4NTQsIDEwNzk0LCAKLSAgICAwLCA2NzY2MCwgNjk4NDYsIDAsIDc4MzU5LCA1MjgwLCAwLCA0MzQ0LCAxMjkwNSwgNjU0MzMsIDYwNzYsIDY0NzkzLCAKLSAgICA0MTYxMCwgNzY4LCAxMjA3NCwgNDQyLCAwLCA2ODE2MiwgNjQwODEsIDEyOTM0LCA0MTY4MiwgNjU0MzIsIDQxNjkzLCAwLCAKLSAgICA2MDcxLCA2NTQzNCwgMTI3NDY3LCA0ODA0LCA0MDUzLCAwLCAxMjc0NjksIDE5NDY1MywgNDE2OTYsIDQ2NywgNjk4MjMsIAotICAgIDEyNzQ2MywgNjk3OTcsIDE5NDY1MiwgMTI3NDczLCA4NDIxLCAxMjc0NzIsIDY5NjgyLCA0MzcwNSwgNTAyLCAwLCA2NTQzMSwgCi0gICAgMTE5MDU2LCA2OTk1NCwgMTIwNDMsIDEzMDMsIDMxNiwgNzM2NCwgMjAyOSwgMjEzNiwgMTE5MjQ2LCAxMTUzMywgNjQzNjUsIAotICAgIDQzNDgwLCA5MjYzOSwgNDg2MCwgMTI2NjQ4LCAxMjc4NzcsIDQyNDg4LCAwLCA5NTgzLCAxMjg4NDksIDU1NDYsIDgwMTksIAotICAgIDczODU2LCAwLCAwLCAwLCA1NTQ0LCAyMzU1LCAxMjE1MCwgNjU3MjUsIDU1NDMsIDc3OTg5LCA2Mzc1MSwgMTIxMzcsIAotICAgIDU1NDgsIDc3OTg1LCAwLCA2NTcyNywgNjgzODgsIDY1NzI2LCA2MDc3LCAxMjgzNTIsIDY1NDUyLCAwLCAxMTMwMSwgCi0gICAgNzgwMTMsIDc4MDA4LCA3ODAxMCwgOTg3NCwgNzgwMDcsIDAsIDEzMTksIDMwNTAsIDY1NDEwLCAwLCAwLCA3ODAxNiwgCi0gICAgNzgwMTcsIDQyODMwLCA0Mzk5NiwgNjY3MTYsIDEyODEzNywgNDY5MSwgOTIyNDIsIDkzNDUsIDYyMSwgOTI3MDksIAotICAgIDEyODIyMiwgMCwgNjU0MTEsIDAsIDQxMTgyLCA3Mzg4MSwgNjU0MDgsIDczODk5LCA3ODAyNCwgOTQ3NCwgMTA1NDUsIAotICAgIDExOTExOCwgMTA4ODcsIDM3ODYsIDY1NDA5LCA4ODk0LCA0MzE3OSwgMTE5NjExLCA3OTIzLCAzNzE2LCA5MjM2MywgOTk5NiwgCi0gICAgODUwOCwgMCwgNzAxMiwgODE5NSwgMTI3ODM0LCA5NTY2LCAwLCAzNzIyLCAwLCA0MTcwNywgODQ5MywgNTQ1LCA5NTc1LCAKLSAgICA0MTM3OSwgMTAwNTAsIDEyNzE4LCA2OTg1NCwgODg1OSwgNjgyMCwgNzQzNDUsIDY1MTEwLCAxMjA3NDAsIDAsIDAsIDkxMTksIAotICAgIDI3ODcsIDc5MjAsIDExODgyMywgNDAyMSwgMjAxMiwgNzk4NSwgMCwgMTE5NjYzLCAwLCAwLCA3ODAyMSwgNzgwMjIsIDQxMCwgCi0gICAgNzgwMjAsIDE4MDIsIDc4MDE4LCA3NDEwNywgMCwgNDE2NTksIDQxNjcxLCAxODI3LCAwLCA2NDM5NiwgMTAxMjYsIDEyMTE2LCAKLSAgICA0MTY3MywgMTIwMzcwLCAxMTQyMiwgNzgxNDEsIDEyMDM3MywgMzg2MCwgMTIwMzY3LCA2ODQxMiwgNDEzNDUsIDEyMDM2MiwgCi0gICAgMTIwMzYzLCAxMTc0OCwgNDIxNTgsIDc5NDEsIDExMDc2LCA4NzQ5LCAxMjAzNjEsIDIxMDQsIDY0ODU4LCAzNjEsIAotICAgIDEyMDM1NywgODQ1LCAwLCA0MTU2MCwgMTE5NzAsIDQ1NjIsIDkxNzkyMCwgMjkyNiwgOTE3OTE5LCA0NTY5LCA3NDEzMCwgMCwgCi0gICAgNDM0ODcsIDE5NDYzMCwgNjExLCA3NDEyOSwgNjQ4NzEsIDExODg5MSwgNjU2MjksIDAsIDE5NDg1OCwgMCwgMCwgMTI3NTQ1LCAKLSAgICAxMjA1NDMsIDAsIDAsIDYyOTEsIDAsIDc4NjM5LCA0MTY2OSwgNzA5NCwgOTE3OTIxLCAwLCA5ODM1ODEsIDc0MDU0LCAKLSAgICAxMjc3NTQsIDE5NTAyOSwgMCwgODM5LCA5ODMzMTEsIDc2OTUsIDg3NjksIDY1MjQ2LCA0ODI5LCAxOTQ2NjMsIDQ4NTksIAotICAgIDY0NDY3LCAwLCA5ODM5NTQsIDExODk5OCwgNzIwNiwgMCwgNjY0NywgNDM5ODYsIDAsIDY5NzY2LCAwLCA2NDc2NCwgNDIxMCwgCi0gICAgOTgzODU0LCAxMjc5MzYsIDgwNCwgMCwgMCwgMTIyOTgsIDAsIDY2NjUzLCAwLCA2NDkyNCwgMTAwOTEsIDczOTMxLCA5NDY4LCAKLSAgICA3NDI0NSwgMCwgMCwgNzQyNDYsIDkyNTAzLCAxMjgzOSwgNjQ2NjksIDkyMjAyLCAwLCAxMjc5LCAxNDI1LCA2MjI0LCAKLSAgICAxMTkyMjksIDExMDQ5LCAwLCA5MjY5NywgNDMyMzksIDg0ODIsIDkyNDQwLCAwLCA1MDMyLCA2OTY3NywgMTE5NDAsIAotICAgIDY3ODg4LCA2NjQsIDEyMDQzNywgNTAzNCwgMCwgMCwgMTI3NTI1LCA0MjcwMiwgNzM4ODgsIDk4MzE0OSwgMTMyOTQsIAotICAgIDY3ODczLCA2NDg2OSwgNjAzMiwgMCwgOTExNSwgNzQzMCwgMTIwMzc3LCAwLCAxMjA4MTksIDY4Mzg3LCAxMjAxNjgsIAotICAgIDczOTEzLCAxMjAxNzAsIDQxMTYxLCA1NTE4LCA0MTc0LCAxMDk5MywgNDExNjIsIDEyMDE2MCwgNjQ1MjgsIDExNjksIDQzNCwgCi0gICAgNDE0MzcsIDE5MDUsIDYwMzQsIDQxMTY0LCA2NDc0NCwgOTUyOCwgMTE4ODY3LCAxMjg4MDAsIDUyNCwgMCwgNzQwMjksIAotICAgIDc4OCwgNzQwMjcsIDAsIDE5NDYzOCwgMCwgMTY2MywgMTA0MTksIDc0MDI1LCA0MjYzNiwgMCwgNjk3MjUsIDAsIDEyMDY1NiwgCi0gICAgMCwgNjc4NzYsIDAsIDAsIDAsIDY3ODk3LCA3NDAzOSwgMCwgMCwgMTEzOTUsIDAsIDExOTEwNywgNDM2MTIsIDY0MzQ0LCAwLCAKLSAgICAwLCAxMDg1NSwgNTQ0NSwgOTM1NSwgMCwgNjUxOTgsIDczOTEsIDg5ODksIDIyMSwgNjU2ODYsIDAsIDAsIDgwMTAsIDcxOTEsIAotICAgIDQ5NjIsIDY5NzcyLCA4ODU1LCAwLCAwLCA2NDQ2OSwgMTIwNDI2LCAxMDU1NSwgMCwgNDMzMzMsIDkyMjk5LCAwLCAKLSAgICAxMjA0MjcsIDEwNDUxLCAwLCA2NzY1MywgNzI0NSwgMTI0NDMsIDc0NDA1LCA5OTQ3LCAxMjAxNDksIDc4MzE3LCAzODczLCAKLSAgICA4MzY3LCAwLCAxMjAxNDYsIDQzNDMzLCA0MzY0OSwgMTE5ODcsIDAsIDAsIDExMDEwLCAxMjcyMywgNzQwNTksIDc0MDYyLCAKLSAgICA2MjE3LCA1ODk2LCAwLCA3NjgyLCA3NDA0OSwgMTQ2MiwgMTAyMzUsIDAsIDAsIDAsIDAsIDAsIDAsIDQyNTk1LCAwLCAKLSAgICA3NDQwMiwgMTE4ODYwLCAwLCAxMjA0MTksIDkyNDk3LCA3NDA1MiwgMCwgOTIzNzgsIDEyMDU0OSwgMTE5MDgyLCA2NDI5NSwgCi0gICAgMTIwNDE4LCAwLCA2NDc2NSwgNzM5MjMsIDEyMDQxNywgMTIwNjYyLCA2OTkyMCwgMTk0NzAyLCA2MjE2LCAwLCAxMDc1NSwgCi0gICAgOTQ1NSwgMCwgODEyNCwgMTI3MDQyLCA5NDcwLCA2OTQ0LCAxMjc1NDAsIDAsIDY5NjgwLCAyODI4LCAwLCA1MzEsIDQyNjM4LCAKLSAgICAwLCAwLCAwLCA0MzQyOCwgODIwNCwgMzYxNCwgMjgyNywgOTY5NiwgMCwgMCwgODcyOCwgNDM1NCwgMTA5MDQsIDc4NTYyLCAKLSAgICAxOTkzNiwgNzgzMywgMTIwNjkxLCAwLCA0MjU5OSwgNDI1OTcsIDQyNzA5LCAxMjA0MDksIDEyNzA0NCwgMCwgODUzNywgMCwgCi0gICAgMCwgOTM1NCwgOTgzMTY0LCAxMjg4MzMsIDQxMTk5LCAxMDEyMSwgMjAyOCwgMCwgOTgzMTk0LCA2OTcxNSwgMCwgMzA2MiwgCi0gICAgMCwgNzQ0NDcsIDEyNjA4LCAwLCA2NjQ0MCwgNzU0NSwgOTcwMCwgMTI1ODAsIDkyMjA1LCAxMjA3NzcsIDEyMDUwMiwgCi0gICAgNDExNTUsIDAsIDc0MDcxLCAwLCA5ODM0NDksIDEyNzEzLCAwLCAwLCAwLCA3ODc3MiwgMCwgMTczNCwgMCwgMCwgMTI3MDQwLCAKLSAgICA2NDU5NCwgMjQ1NiwgMjMxLCAwLCA3NDE2NywgNTQyLCAwLCAxMTg3ODYsIDAsIDk4Mzk3MCwgMTIzMCwgMCwgMCwgMzU5NywgCi0gICAgNDQ0NiwgMTA1ODQsIDc0MjM1LCA5MjIxNSwgNDAzNywgMTI3OTM4LCA4MzUyLCAwLCA1Njg3LCAwLCA2NDUxNSwgMCwgCi0gICAgMTk0ODAxLCA1NTI2NSwgNjc4NDYsIDc4NDM0LCA5NzA0LCAwLCAwLCA3MDA4MCwgNzEzMzgsIDAsIDg2NjAsIDEyNjQ5NSwgCi0gICAgMCwgMCwgNzg3NzMsIDc0NDgyLCA0NDgzLCAxNzA5LCA2OTcyMSwgOTkwOSwgNjA4MCwgMCwgMTIwMzU4LCAxNzQ2LCAxMzE1LCAKLSAgICA4NjY3LCAwLCAwLCAxMzE0MCwgNjU4OTksIDEwNjA0LCAwLCA0NDgwLCAxMTI2NiwgMTI4MTUyLCAxMjI2LCA2OTMwLCAKLSAgICA2Nzk3OSwgOTgzNjgxLCA2MzYwLCAxMDg5NywgNDEyMzAsIDYwNSwgMCwgNzQ3ODUsIDY5ODc1LCAwLCAwLCA0MTUwMCwgMCwgCi0gICAgMzExLCAxMTQ1MywgNjIyMSwgMTA2MDgsIDY0OTQzLCA3NDI4MCwgMTA4NzcsIDExODg2OCwgNjQ4ODUsIDc0MjcyLCAwLCAwLCAKLSAgICAxMjg1NTksIDEyMDczNiwgNzQzMTIsIDM0NSwgMCwgNzQ0NTYsIDY0NjA2LCA5OTE3LCAwLCA5MjIzMSwgNTAzNywgMCwgCi0gICAgMTc3NiwgODQyMiwgMCwgMTE4ODE0LCA0MTUwOCwgNDEyMDEsIDMyMywgNDMzMjgsIDAsIDQyNjk4LCAxMjk1LCAxOTQ4NTMsIAotICAgIDQ2MjUsIDAsIDQ2MzAsIDEzMTE3LCAwLCAxMjg3NzIsIDY1MTIzLCAxMTI5MywgMjY2OCwgMTEyODgsIDAsIDQyNjQwLCAKLSAgICA2NTY2NiwgMjUxOSwgOTIzNjksIDY1NDIwLCA5MjQ3OSwgMCwgNDI1MiwgNTA0OSwgNDI2NTksIDExOTAxMSwgNzA2LCAKLSAgICA3NzU0LCAxMDg1NCwgODczOCwgMCwgNjU0MTksIDAsIDAsIDY0OSwgNjU0MjEsIDAsIDY2NzAyLCAwLCAxMjY3MCwgMTAxMywgCi0gICAgMCwgNjQ5MTksIDcwNSwgMCwgNjU0MjIsIDEyNzgwMywgMTE4MywgMTI2NTE5LCA3MDE3LCA0Mjg1MiwgMCwgODE1NywgCi0gICAgOTczNiwgNjQ1MDMsIDY1NDE4LCAwLCA5ODM4NjksIDc0MDM1LCAwLCAxMTkxMywgNzM4NzQsIDY2OTYsIDAsIDg5MjAsIAotICAgIDExOTI5OCwgMCwgNzk2MiwgMTIyMTEsIDk4MzcsIDIwNTEsIDY2MjI3LCAwLCA0MTg0LCAwLCAwLCAxMDE3NywgNzM3NzcsIAotICAgIDE4NTcsIDE5NDY1NywgNDYyNiwgODQ2NCwgODQ3MiwgMCwgNDYyOSwgODQ5OSwgNzgzMjEsIDc4MzIyLCA0NjI0LCA3ODE4LCAKLSAgICAxMTkxNzMsIDAsIDAsIDc4MDUsIDAsIDk0MDA3LCA2OTM1LCA5MjI5MiwgNzgzMjUsIDc4MzI2LCA3ODMyMywgNDMzMjcsIAotICAgIDQzOTg5LCAxMTkwNDYsIDg0OTIsIDgyNTAsIDg0NTksIDAsIDg0OTcsIDg0OTYsIDAsIDAsIDc4MzM2LCA3ODMzOSwgOTU0MywgCi0gICAgNzgzMzUsIDc4MzMyLCA3NzgzMiwgNjU4NDksIDc3ODMxLCA5ODM5NTIsIDAsIDEyNDUxLCAwLCA4Njg0LCAwLCA2MTAyLCAwLCAKLSAgICA1Mjk4LCAwLCA1Mjk0LCAwLCAwLCA5ODM0NTEsIDE5NTA2MiwgOTk0OSwgMTE5ODI2LCA0MzYxNywgMTE5MjE1LCAwLCAKLSAgICAxMjA3MywgMCwgMCwgNzc4NjMsIDEzMTA4LCAxMjA2MTcsIDExNDM5LCA0MTQ2OCwgOTgzNzQ4LCAwLCA1MjkyLCA1NTI3MiwgCi0gICAgOTgzODc0LCAxOTM5LCA1MzAyLCAzOTcwLCA5MTc4NzksIDEyNDU1LCAxNzkzLCAwLCAwLCAwLCA2NjQzLCA5MjQ3NywgCi0gICAgNjUyNjMsIDAsIDc4MzMwLCA0MTI5MywgNzgzMjgsIDY1OTIzLCAwLCAxMzIxOSwgOTU2OSwgMCwgNzQzODMsIDAsIDc0MTk3LCAKLSAgICAwLCA1NTAwLCA4ODEzLCAwLCAwLCA3NDU2NiwgNTMyMiwgMCwgNzgzNDAsIDQzNjMxLCA1MzI0LCA2NjQ0MywgMzc4NCwgCi0gICAgNDE2MTQsIDY1MjY5LCA2MjMwLCA3ODM0OSwgNzgzNDUsIDQzMzI0LCAzMzYwLCA3ODM0NCwgMTE1MjMsIDAsIDkyNDg4LCAKLSAgICA5OTI2LCA3MTk3LCAwLCA2ODQyOSwgNDI4OTQsIDQxODIxLCAxMjQ5LCA3ODM2MCwgNzgzNjEsIDc4MzU2LCA3ODM1OCwgCi0gICAgNzgzNTMsIDY0ODk5LCA2NDc2MywgNDExNDksIDQxODA3LCA0MzE2MiwgNDE4MTUsIDQxMTUwLCAwLCAxMDU3MSwgMTAwOTYsIAotICAgIDAsIDAsIDc4MDc0LCA2OTQ3LCA0MTE1MiwgODg3LCA5MjQ5LCA2NTY1LCA3ODUxMCwgNDE5OTAsIDc4NTA5LCA0MTgxMSwgCi0gICAgNzQ0NjYsIDkzOTY2LCA2NjcwLCA3Nzg4MiwgMCwgMCwgNDMwOTIsIDQzMzI1LCAwLCAxMDE2OCwgMCwgOTc4MSwgMTI4NjU1LCAKLSAgICA5MTkwLCAwLCA5NjY2LCA4MjY5LCA2NTk0NCwgNzQwMDUsIDEzMDE5LCAxMTY3MCwgNjk4NjAsIDMxNSwgMTI4MTMsIAotICAgIDk4MzQ1MCwgNzg0MzIsIDc4MjU2LCA3ODM1MSwgNzgzNTIsIDAsIDk4MzY0OCwgMCwgMCwgMTM3OCwgOTUwOSwgMCwgMCwgCi0gICAgNzQ0NzUsIDMwNjYsIDkyMjIwLCA2Nzg0NywgMCwgOTIzNTUsIDAsIDc4MzY1LCA4Nzg3LCAxMjAzNzksIDE5NDYxNiwgCi0gICAgNDE2MTgsIDE5NDYxNSwgNzgyNjEsIDE5NDYxNCwgMCwgNjQ2NTIsIDAsIDE5NDYxMiwgMCwgNzgzNjYsIDQyMDg4LCAwLCAKLSAgICAxOTUwNjEsIDcxNzYsIDQzNzU2LCAxMDEzNywgNjEyMSwgMTA5OTUsIDc4MjU5LCA3NDUzNCwgODExOSwgNjQ4NzQsIAotICAgIDkxNzgxNiwgMTI3MTk5LCAxOTQ5MzksIDAsIDc0NTI1LCAwLCAwLCAxMjkzMCwgMTM5NCwgNzQ1MTQsIDAsIDc0NTE1LCAwLCAKLSAgICAxMTg4MDQsIDI5OTgsIDk1MjcsIDEyMDY1OSwgNjUxOTAsIDEyOTc3LCA0MjA5MCwgMTE5MTY1LCAwLCAxMTkxMDAsIAotICAgIDQxMjM2LCA5MjIzNSwgNDIwMDUsIDQyMDAzLCA0MTIzNywgNTg0OCwgMCwgMCwgMzY3MCwgMTI4NjU3LCAxOTQ2MDAsIDAsIAotICAgIDAsIDc4OTAsIDAsIDExMjk4LCA0MzMxNSwgMCwgNjIyOSwgMTU5MywgMCwgMCwgNjE5LCA0NjM1LCA2NTA4MCwgMCwgCi0gICAgMTI4MDAyLCA0MTIwLCA2NTMzNywgNjUzMzYsIDAsIDExODA4LCAxMTkyMTQsIDc0MTE1LCA5MzY2LCA0Mjc5MCwgNDIwMDYsIAotICAgIDExOTExNSwgNjUzMjcsIDY1MzI2LCA2NTMyNSwgMTA3NTcsIDE1MDcsIDQyMjE2LCA2NTMyMSwgNjUzMjAsIDY1MzM1LCAKLSAgICA2NTMzNCwgNjUzMzMsIDY1MzMyLCA2NTMzMSwgNDIwNTksIDY1MzI5LCA0MjY4OSwgOTI0MjcsIDkxMjgsIDk0MDQ1LCAKLSAgICA0MjA3MywgNjc4NSwgNjQ1OTAsIDk4MzgyMSwgNDM3MSwgNzE5NiwgNjUzMTgsIDIwMzUsIDY1MzE2LCA0MTA2LCA2NTMxNCwgCi0gICAgNjUzMTMsIDQyMDc0LCAxMjc4NDcsIDQxMjI4LCAwLCA2NTYwOSwgNDEyNDEsIDc5MDMsIDQxMjM5LCA0MzUzMywgNzg0NTksIAotICAgIDcxODksIDAsIDAsIDAsIDEyMzU3LCA0MjgwMiwgNzg0NTAsIDg0ODcsIDkxMzEsIDAsIDQ2MTUsIDEyNjk1LCAxMjc3NTIsIAotICAgIDAsIDEyMTc1LCAwLCA2NDUzNSwgMCwgNzgwOSwgMCwgMCwgNTYyLCAxMjE2OSwgNjU5MCwgNjk3NjIsIDY2NDU1LCA2NDczOCwgCi0gICAgMzIxOSwgNjg2NTQsIDk4Mzc3OCwgMCwgMTAzNywgMCwgMjAyNSwgMTI4MjYzLCAxMzA5OCwgNzg0NDIsIDEwNjM3LCA0NTY4LCAKLSAgICA1NDksIDE1NzAsIDAsIDI4MzUsIDAsIDEwNjI0LCA0MzYyMywgMTEwNzIsIDEyNzE5MSwgMCwgMCwgMTI2MDYsIDc4NDMzLCAKLSAgICAyODI1LCAwLCAxMDgyNSwgODA3OSwgMjgyMSwgNDEwNDYsIDkyMzI3LCA3MzY1LCA5ODM3NDQsIDEyMDU5MywgMTMwNzEsIDAsIAotICAgIDQ1MiwgNDEwNDksIDQyODQwLCA2MzQ2LCAyODMxLCA1NDYxLCA3NDU5NiwgMTE0NjUsIDUyMTIsIDAsIDY0NzAzLCAKLSAgICAxMTkxOTEsIDQyMzA4LCA3MTgxLCAwLCA0MTMzMiwgMCwgMTIzMzMsIDAsIDE2NjgsIDAsIDAsIDAsIDExODcsIDk4MzM3NywgCi0gICAgNDI2MjgsIDc4NTc1LCAwLCAxMjg3NzcsIDAsIDMyNDAsIDEyODUxOCwgMTIxOTQsIDAsIDExNTkxLCA0MTA2NSwgNTMyMywgCi0gICAgODE2NiwgMCwgMCwgMCwgNzQ1MzUsIDE2MjMsIDY1Mjk3LCAxMjg4NTYsIDU3MSwgMCwgNDkxOCwgMCwgNTI4OCwgMTI3Mjk1LCAKLSAgICA4OTE2LCA2NTA0OCwgMTkwOSwgODg2NCwgMCwgMCwgMTA3MzYsIDkyNTA4LCAxMTU3MSwgNzYxNSwgMTI3MzAwLCA5MjI5NiwgCi0gICAgNDIzNywgOTI1NzYsIDEwMzUsIDY1ODE1LCAwLCA3ODgxLCA3MDEsIDY1OTM2LCAzNDg5LCAwLCAwLCAxMjA3NTEsIDExNDAzLCAKLSAgICAwLCAwLCAxMjcxNDYsIDM3OTYsIDY4MDAsIDAsIDM5OTQsIDExNDIxLCAwLCAxOTUwNzYsIDAsIDk4MzkxMywgMCwgMCwgCi0gICAgNjQ4NTcsIDEyODEwNSwgMjg1NSwgMTI3ODI4LCA2NjMwOCwgNDE2MjEsIDY4MjE0LCAxMjcyODMsIDEyNzgxNywgMTA2NTQsIAotICAgIDAsIDExOTIyNiwgMTIxNjQsIDMyNDYsIDc5MDYsIDQzOTcyLCA2NTg0NywgNzE4MiwgMCwgMTMwMjQsIDE5NDgyMiwgCi0gICAgNzQyNzAsIDEyODI4OSwgMCwgMCwgMCwgMTQ5NiwgNzQ3LCAwLCA5NDIsIDIzNzgsIDQzMTM2LCAxMjc5MDUsIDg0NjYsIAotICAgIDk4MzU3NSwgOTMyMCwgODAwMSwgMTIzMiwgODEzOSwgMTE2MTcsIDAsIDAsIDExNDA5LCA2ODM3MywgNjM4MiwgMCwgCi0gICAgNjQ2MzQsIDEyODI3OSwgMCwgMTE2MTIsIDAsIDY3NjAwLCAyMzc0LCA5NDA2NiwgODQ3NSwgMTE2MDksIDY2MzEzLCAwLCAwLCAKLSAgICA1Mjg2LCAxMTkyOTcsIDAsIDAsIDY0OTI1LCAxMjAyODMsIDE5NDU4NCwgMTE4OTgyLCAxOTQ1ODMsIDc3MDUsIDExOTQyLCAKLSAgICAxMTMwNSwgMTk0NTgxLCAzMzA5LCAwLCAwLCAwLCAwLCA2ODAyLCAwLCA0MTY1MywgMTI4MCwgMTI0MSwgNzE2OCwgMTIwOTYsIAotICAgIDAsIDY2NjE1LCA0MjU2NSwgNDE2NTEsIDAsIDAsIDAsIDQxNjUwLCA2NjUwNywgNjY0NzAsIDAsIDEyOTE0LCA0MTQ5MSwgCi0gICAgNjYwMTAsIDExOTU1MiwgNjA3OCwgOTk1NCwgMCwgMTQ3NSwgMTE5MjQ3LCA5OTM4LCA2MDg0LCA5MTc1NDYsIDQxMDY0LCAKLSAgICA0MTA2MiwgMCwgMCwgMzI1NiwgMTAxODksIDQyMDc2LCA0MzI1MiwgNzg4MjMsIDkxNzkwNiwgODcyNywgMCwgNjU4NzUsIDAsIAotICAgIDAsIDEyNzc2MiwgMTA1NjIsIDc0MjE1LCA0MzA2NSwgMCwgMCwgMzI0OCwgNzQyOTcsIDMyNjEsIDkwMTUsIDcxMzUxLCAwLCAKLSAgICAzNjM1LCA2NDMzNywgOTgzMjczLCAwLCAwLCA3MTk1LCAwLCAyMDA3LCA2NDQzMSwgMCwgMCwgMCwgMCwgNjM1LCAwLCAwLCAKLSAgICA2NTYxMywgNzc5MDksIDkyNDIwLCA3Mzk5NywgMCwgMCwgMTE5MjE4LCA3OTg0LCA4NjAwLCA3NDQzNCwgMTI3NzcwLCAKLSAgICA0MTc2LCA3MDA1MCwgMjAzNCwgOTI1NTEsIDEyMDgwNSwgNjU4OTEsIDEyNzAzOCwgMCwgMzE4LCAyMDM4LCAxMjg4NjAsIAotICAgIDc4NTk2LCAwLCAzNjQ5LCAxMzE0OSwgNDIxNDUsIDQyNzk4LCAzNjM0LCAxMjAyOTEsIDExODkyNywgNjc2NzcsIDEyMDEyNCwgCi0gICAgNzg2NiwgMCwgMTE0MDIsIDQyMTQ2LCA5NDAzMiwgNzQyMzgsIDQyNjY0LCAyODQ5LCAxMjcwMzQsIDAsIDc5MzgsIDEyOTYwLCAKLSAgICAxNzYxLCAxMTgxMiwgNjUzNzksIDY4Mzg2LCAxMjgxODUsIDExNTksIDAsIDY5NzI5LCAwLCAwLCA3MTc4LCAxOTQ2MzIsIDAsIAotICAgIDQxNjgwLCAwLCAxMjgyMDMsIDExNTM0LCAxNTE0LCAxMTY2OCwgNjc4OTEsIDkzMTMsIDcwMTUsIDAsIDY3ODc3LCAKLSAgICAxOTQ1NjcsIDEyOTg5LCA2NjQ3NCwgOTM2OCwgMTI4NDgsIDE2MjQsIDQzMjcwLCAwLCA3NDI3OCwgMTA4MTgsIDEyNjY0NCwgCi0gICAgOTk1MywgMCwgNzg0MjEsIDExOTQsIDMyNDIsIDk3NjEsIDk1NTUsIDg1OTgsIDEyMDI5OSwgNjE2OSwgMTI4NzEsIDE1NTEsIAotICAgIDI3OTgsIDY1MTc2LCA0OTU4LCA0Mjc1MiwgMTE5MDI1LCAwLCA2Nzg3NSwgMTIwMzAxLCAzNDk1LCA2NjY0OCwgMTk0NzY4LCAKLSAgICAwLCA2ODM2NCwgOTgzMjIyLCA0ODkxLCAwLCAxMDY0MSwgMCwgNzM3NDYsIDAsIDY4MzUyLCAwLCA3Mzc4NywgMTk0ODI5LCAKLSAgICAxOTQ2MzMsIDcxOTksIDY0OTU1LCAwLCAwLCAwLCAwLCAwLCA0MjY4NSwgNDI2NzksIDE5MywgMCwgMCwgMCwgNDI2NjcsIDAsIAotICAgIDUyNzEsIDkyMzE4LCA5MjUxNywgMTE4ODgyLCAxMzYyLCAxMzI5NywgMCwgMTI4MDk0LCAwLCA5ODMzMjMsIDczNzg5LCAwLCAKLSAgICA2NjU4LCA0NDI2LCAwLCA5MjYyOCwgOTgzODMzLCA5MjMxOSwgNzI3NiwgNDIxNjMsIDUyMjAsIDAsIDAsIDk4MzMyMiwgCi0gICAgMjQxNiwgMzMxMCwgNDI3MDMsIDAsIDM3OSwgMCwgNDM3NTUsIDAsIDAsIDMyMjMsIDY1NDkyLCAxMjg0LCAxOTQ3NzEsIAotICAgIDQ1NDksIDAsIDAsIDk4MzE1NCwgMTI3NzYzLCAxMDgwNywgOTU1OCwgMTk0NjEzLCAwLCA4NTE1LCA4Njg4LCAxMjg2NiwgCi0gICAgNjUzMDgsIDMyOTQsIDk4MzMyNCwgODUyOSwgMTI4MTAxLCA0MzM4NSwgNzU2NCwgMCwgNDMzMjksIDAsIDkyNDU4LCAKLSAgICA3Mzc1NywgNjY0NTYsIDQyMzU5LCAwLCAyMDMxLCAwLCA3MjAyLCAwLCAxMjY3NiwgNDI3MjksIDkyMTk4LCAzMjE1LCAwLCAKLSAgICA3NzEwLCAxNjEwLCA3MzgwMSwgMCwgMCwgNjU2ODIsIDAsIDEyMDUzNywgNjU5MjQsIDk5NzQsIDIyOCwgNjYzNTQsIDE1MDEsIAotICAgIDAsIDY0Mzk1LCA1MTc5LCA3MjAwLCA2MjI1LCAwLCA2NTc5NCwgMTcyNSwgNjU1MzMsIDgxOTYsIDc0NzYsIDc0Mzk5LCAwLCAKLSAgICAwLCA3MTUyLCA4NTAyLCA1NzYyLCAxOTY3LCA3NDgzLCAwLCAwLCA4MTA0LCAwLCA3NDc0LCA3Nzk3OSwgMCwgMTI2NTA3LCAKLSAgICAxMDQxNCwgMTMwMDEsIDgxNDEsIDAsIDQyNTM3LCAxNTU3LCA0MzU5NCwgMTI4NjQyLCA2MzMwLCA2ODA1LCA4NjMxLCAKLSAgICAyNTQ1LCA3MDA1MiwgMTI3MTY2LCAwLCA3NDE5MCwgMCwgMCwgOTgzNzc3LCA0Mjc2MiwgMCwgNDI5MTQsIDE2NTAsIDI2MiwgCi0gICAgMTYzNywgMCwgNzkwMSwgMzIzOCwgMTI4MTczLCA0MTg2MSwgMCwgMTI4NTg1LCA2NTE1OCwgMTA4NjAsIDk0MDU5LCAKLSAgICA0MzY1OCwgNzUyNywgMCwgNDMzMTksIDY0MTksIDAsIDQ1LCAwLCA2NDU4OCwgOTM5ODksIDAsIDExOTgxMCwgNzE5NCwgCi0gICAgNTI5MSwgMCwgNDM2NjYsIDEzMTI5LCAwLCA5MDg0LCAwLCA4NzM3LCAwLCAxMjg4MSwgMCwgMTI5MDYsIDk2MzksIDc5MTIsIAotICAgIDI2MjAsIDAsIDAsIDAsIDk4Mzg2NiwgMTc5LCA2NTg5NiwgMCwgNjQ3NTYsIDI4NTMsIDc4NDQzLCAxMTg4MTMsIDk4Mzg4MSwgCi0gICAgMTE4OTk2LCAxMTkwMDksIDI4NTAsIDgwODQsIDk4MzA4NSwgNzM4NTAsIDI4MDEsIDkyMjg0LCA0MjA2OSwgMTE5ODM5LCAKLSAgICA3NDc1NCwgMTE5ODQxLCA0MjA3MiwgMTE5ODQzLCAxMTk4NDIsIDEwMzk4LCA5ODMwNTYsIDAsIDgzNzcsIDEyNzExNiwgCi0gICAgODI0NSwgNjg0MDEsIDMxNTgsIDkyMzk2LCAzOTgzLCA0MzY1NiwgOTIzLCAxMTk4NTcsIDExOTg1NiwgMjkyLCAxMzAwMiwgCi0gICAgMTE5ODQ1LCAxMTk4NDQsIDMyMjEsIDE3NjMsIDkyNDYzLCA0NjEyLCAxMTk4NTEsIDExOTg1MCwgNzI1MywgMTI3MTEwLCAKLSAgICA2ODM5MSwgMCwgMTA3ODIsIDM2MzcsIDEyOTk2LCA0MzU0MiwgMCwgNjQ1NzgsIDk4MzY2NiwgMzIyOCwgNjk2MzYsIDg3ODMsIAotICAgIDAsIDExOTYxNCwgMjczMSwgMCwgMCwgNzg1ODUsIDQxMDIsIDc2OTYsIDczODc4LCAwLCAwLCA3ODU4NiwgNDMzMTYsIAotICAgIDQxNzcsIDExMjgzLCA5MDg5LCAwLCA3Mzk5NiwgOTgzMTczLCA2NDUwMCwgNDM2NzQsIDAsIDY0OTQ3LCAxODU2LCAwLCAwLCAKLSAgICA2Mzc5LCAwLCAwLCAwLCAzMjA4LCAxMjk3NSwgNzQ3NzUsIDEyNzM4MCwgOTgzOTIyLCA5MjM4OSwgNzQwNzIsIDU1MjY5LCAKLSAgICAwLCAwLCA5ODM2NzQsIDIwMzMsIDc4NTc3LCA3ODU3NiwgMTk1MDI2LCA1NTI1NCwgNzc0MCwgMCwgMCwgMCwgNzM5NjQsIDAsIAotICAgIDkzOTg4LCA2NzYxMiwgNjU2NzQsIDEyODI0NCwgOTQxMTAsIDQxNjg5LCAwLCA3NDAwNiwgNjQ5MDksIDY2NDYsIDExNzkwLCAKLSAgICA3NDAxOSwgMCwgMTI4MDY2LCAxMjgwMzEsIDg1NjEsIDQ1NzMsIDAsIDUzMjYsIDAsIDEyMDYwNSwgNzIzMCwgODI1NywgMCwgCi0gICAgODc3OCwgNDE2ODgsIDAsIDY1Nzc2LCAyMDcxLCA4MzE0LCA2NDU5LCAwLCA3NjI4LCA2NTA5MiwgNzM5MDMsIDY2NzIxLCAKLSAgICAxMTM0MiwgMTI4NTYxLCAwLCAwLCAxMjgyMjYsIDEyNzAwMSwgMCwgMTE4MTAsIDEzMTY0LCAxMDcyMywgOTY3LCA5ODM5NDIsIAotICAgIDEyNjQ2OSwgMTE5NDYsIDAsIDMyNTcsIDAsIDEyMzA3LCAxODQ1LCA5ODMxNTcsIDQzNTI2LCAwLCAwLCAxODg2LCA0MjM0MiwgCi0gICAgMTAwODksIDg3MCwgNzY0OCwgMzQ5OSwgODYwOSwgNzY1MiwgODc2LCA4NzEsIDg3NywgMCwgODc4LCA0MjAxNSwgODc5LCAKLSAgICA0MzY5MiwgNDU2MywgMCwgMCwgNzU5MSwgNjU4ODcsIDg2NywgOTUyMCwgODcyLCAxMjY2MDcsIDg2OCwgODczLCA3NjQyLCAKLSAgICAwLCA4NjksIDg3NCwgNzY0NCwgMTIwNjc0LCA4NzUsIDc5MCwgMTI4MzAzLCAwLCAwLCAwLCA2NjE4MiwgOTgzMjUwLCAKLSAgICA1NDI5LCAxOTUwNTUsIDY2MTgwLCAxMjY0ODAsIDY2MTgxLCA2ODQ1MiwgOTgzMjgxLCA5ODMyNDIsIDQyMDY3LCAwLCAKLSAgICA1NDMzLCAxMDY1NywgNzkxMSwgMTk0NjIyLCAxNTQ3LCA2NjE3NiwgNDIwMTIsIDEyMDU3NiwgNTQyNSwgNDk3NywgOTk5OSwgCi0gICAgNTMxNywgNTQyMywgNDYxMSwgMCwgNjc2MzcsIDAsIDk2NzksIDc0MTIyLCAwLCAwLCAwLCA2NjE5NCwgNDQxOCwgNjYxODQsIAotICAgIDQ2MjgsIDQyNDUsIDExOTY0OCwgMCwgMCwgMTg1MSwgMCwgMTI3MTg5LCAxMTkwOCwgMCwgOTM2MCwgMTE4ODk3LCAKLSAgICA5ODMyNzAsIDQyNzc2LCA2NjE4NywgMTI4MzcsIDg4MjksIDc3MTEsIDkyNzE0LCAwLCA5MjMyMSwgNDMzMTgsIDAsIDg4MDksIAotICAgIDY5ODgxLCAwLCA5ODMxNDIsIDEyMDYwNCwgOTgzMDUyLCA5ODM4NzMsIDAsIDk4MzI2MiwgMCwgMCwgNzQyNywgOTk1OCwgCi0gICAgNDU4OCwgNDM2ODAsIDAsIDc0NDg0LCAxOTQ5NjgsIDI0MzMsIDAsIDExOTYyMiwgMzM1MiwgNzQzNjMsIDk4Mzg3NiwgMCwgCi0gICAgNzkzLCA3NDQwNCwgMCwgMzA1LCA1NjcsIDY3NjYyLCA4NDIsIDEyODUxOSwgODIwOCwgMCwgNDE2OTUsIDE2NDcsIAotICAgIDExODg3NywgMCwgNzgzNywgOTE3NjI1LCA4MTgsIDUzMzcsIDE5NDYyOCwgOTE3NjIxLCA0MTM3NiwgMTE5OTc4LCAKLSAgICAxMjY1NzYsIDEyMDU5NCwgNzQwODYsIDkxNzYxNSwgOTE3NjE0LCA5MTc2MTMsIDEwOTczLCA2NjM1OSwgMTM3MiwgCi0gICAgMTI3MTcyLCA5MTc2MDgsIDQ5NjksIDEyNTQsIDkxNzYwNSwgOTE3NjA0LCA5Mzk2NywgOTE3NjAyLCA2NTIyOCwgNzgyMjEsIAotICAgIDEyNjYxMiwgMCwgMjg0MCwgMCwgMTE5OTgyLCA5ODM5MzAsIDAsIDMyNDUsIDkwNjgsIDY4MTk0LCA2NDcyNSwgMCwgMCwgCi0gICAgMTI5OTEsIDAsIDI2NTEsIDY4MDE2LCA5ODMyNTcsIDkxNzYxMSwgMTI3MDI2LCAxMjg4ODMsIDAsIDAsIDQzNjQ4LCAKLSAgICAxMjA4MTIsIDAsIDQzMzIyLCA5MjY2MiwgMCwgMCwgNjQzNzIsIDkyNjk4LCAzMjI2LCA2NTUsIDc1MiwgNzQ1NywgNzQ1NiwgCi0gICAgNzQ1MiwgMzI4NSwgMTI4Nzc5LCAxMjc4MjEsIDExOTk4OCwgNjU2MTAsIDIzOTEsIDAsIDkyMjQ4LCA2NzEsIDI1MCwgCi0gICAgNzQzNCwgNjE4LCA2NjgsIDYxMCwgNDI4MDAsIDc0MzEsIDExNTIsIDQyODAxLCA2NDAsIDEyMDY2NiwgNzQ0OCwgNzQzOSwgCi0gICAgNjI4LCAzOTA1LCA3MzgxMCwgMCwgMTI4MjY2LCA2NDc0OSwgNjc4NTAsIDIxMDcsIDAsIDAsIDQ2MDUsIDEyODE3NCwgCi0gICAgOTgzMTkyLCA0MzM3MiwgNjU5NDUsIDEyODgzOCwgMCwgMTE5NTkwLCAwLCAwLCAwLCA5ODcsIDY5MjcsIDExNTcyLCAKLSAgICA0MjI2MSwgMTE0NjQsIDMzNjUsIDk5NzEsIDAsIDAsIDEyODI5NywgMCwgMCwgMCwgMCwgMTEzMzQsIDQzMzI2LCAxMjYwOSwgCi0gICAgMTE1MTksIDExNTAzLCA1NTMwLCA1MjEwLCAwLCA0NjI3LCA5ODM4ODMsIDUyMDgsIDAsIDEyODg0MiwgMTAzMzIsIDUyMTgsIAotICAgIDc5NzYsIDkxNTYsIDAsIDMyNDQsIDU1MjksIDY5NjQ3LCA3Mzg5NCwgMTI4ODUyLCA1NDMyLCA2NDk2NSwgNTUyNywgCi0gICAgNzQwMzMsIDEwNTE2LCA3NzkwLCA1NTI4LCAwLCA0MjE0MCwgMTIwMjgxLCAwLCAwLCA0MzU0NSwgOTg4NywgMCwgNDAwMCwgCi0gICAgNzQyOSwgNzQyOCwgNjY1LCA3NDI0LCAzMjA2LCAxMjAyNzgsIDc4ODQsIDAsIDEyODU2NiwgOTE3OTg5LCAxMjg2NjYsIAotICAgIDIxMSwgMjUwOSwgMTI4ODU4LCAxMjA1NzMsIDY4NjcyLCAzMjIwLCA0MjIzNSwgMCwgMTA2OTAsIDg5NTEsIDUyMTQsIAotICAgIDQyNDc0LCA4MTE4LCAwLCA3MDQ4LCA0NTkwLCAxMjcyNTgsIDU4NTIsIDAsIDAsIDEyNzI1OSwgMTcwOCwgMCwgOTgzMTY1LCAKLSAgICAyNjIzLCAxMTk0MywgMCwgNjkyMjYsIDAsIDQ2OTgsIDY2NTA5LCAxMDY2LCAxMTk5MjEsIDQ3MDEsIDk4Mzg2NywgCi0gICAgMTIwMjg1LCA3NDIyNSwgOTQxMTEsIDgyNjcsIDAsIDEyNzI2NSwgMCwgNzUxNiwgMCwgMjYyNSwgOTgzOTY4LCA4MDM0LCAKLSAgICA3NDMwOSwgMCwgMzYzMSwgMTA5NTUsIDc4NTAsIDEyMDI5MywgODQxNiwgMCwgMCwgMCwgNDMzODQsIDEyNjYwLCAwLCAwLCAKLSAgICAwLCA3NDg1MCwgNDEwNjksIDAsIDEyODE1NiwgMTIwOTksIDQzMTAsIDEwMDMyLCA2MjUyLCA3MTMsIDc5OTAsIDAsIDM5OTAsIAotICAgIDAsIDk4MzI1NCwgNjYzNjgsIDUwMTcsIDY0OTU2LCA3MDcxLCAwLCAxMTkxNDQsIDEwMzAsIDExODgwMCwgOTgzMTIwLCAKLSAgICA5NTEzLCA0MTA1OSwgOTM1NywgMCwgMTc3MywgMCwgMTIwMzUwLCAwLCA2MzM5LCA3NzQ1LCA5ODQ0LCAwLCA2NDY1MCwgOTQsIAotICAgIDE4ODAsIDc0NzY2LCA5ODM4MjksIDg5MDgsIDAsIDEyODcwNywgNjU5MTMsIDc4NDcwLCAxMDc1MiwgMTMwMDMsIDAsIAotICAgIDEyNjU3MiwgNDEzMDcsIDg3MzIsIDEyMDMzOCwgMCwgMTc1NywgNjk2NCwgNDY5NiwgMCwgMTIwMzM1LCA2NDc4NSwgNzM5NCwgCi0gICAgMzY0MSwgNTQxOSwgMTI4MDU1LCAwLCAxMjc4ODMsIDAsIDEyMDM0NCwgNDM5ODgsIDAsIDg2MTAsIDQzMDYyLCA3NTkyLCAKLSAgICA4NTYsIDc0Mjk5LCA5MzYsIDEzMjg5LCA2OTg5NCwgNDMxNzEsIDE0NTksIDAsIDY1MjQzLCA3ODYzOCwgMTk5NTMsIDAsIAotICAgIDE1MDQsIDcwMDY0LCAwLCAxMjkxMywgNzQyMDYsIDc1MjksIDAsIDEyODY5OSwgOTgzOTQ4LCAxMjA3ODIsIDQxMTMsIDAsIAotICAgIDIzNzIsIDMzNiwgMCwgNzUwOSwgMTIxNTIsIDAsIDY4MiwgNjY0NTgsIDQxNTA1LCAwLCA2NDc0MywgMTA1OTMsIDE3MDMsIAotICAgIDAsIDk4Mzk0NiwgODAzMywgNjk5NTMsIDAsIDk4MTAsIDEyNzI2OSwgMCwgMTI5NzAsIDAsIDQyMzUxLCAxMDEwOSwgCi0gICAgOTE3NjIzLCAwLCAxOTQ2OTMsIDAsIDkyNjkwLCAwLCAwLCA3NDI5MSwgMTk2NSwgNzA2OSwgNDMzMTIsIDAsIDczODg3LCAwLCAKLSAgICAyMDg3LCA2NDM3MCwgNjMxNCwgNDE3MTQsIDg1MDEsIDAsIDAsIDc0MjM5LCA0MTMxNywgOTI2MTQsIDIwOTEsIDc0NTQ1LCAKLSAgICAyMDkwLCAwLCA5MzUzLCA3MTE3LCAyMDc3LCA3Nzg4NiwgMCwgMTA0OTgsIDIwODMsIDc3ODg4LCAwLCAwLCAxMTkyMzYsIAotICAgIDYzNCwgMCwgMCwgMCwgNjk3NzksIDQxNjUsIDg3NDYsIDAsIDk2NTQsIDEyODU2LCA2OTI0LCAwLCA3MDY2LCA5ODM3MTAsIAotICAgIDAsIDEyODEzNSwgNDEwMzcsIDQyNjkyLCA3Nzg2LCAxMjk1OSwgNDEwMzksIDEyNzQ4MywgMCwgNjgwLCAyMzAyLCAKLSAgICAxMjgyMDAsIDExODEsIDcwNTYsIDMxNzQsIDEyNjUxNiwgMCwgOTI2NjgsIDY1NjY1LCAxMjczNzUsIDEyNjUwNiwgNjkyMCwgCi0gICAgMCwgOTIyOTUsIDAsIDExODk2NSwgMCwgNjQ2NDQsIDEyNjk4MSwgNzQxMTksIDAsIDQxMDI4LCAwLCA2MjMxLCAyNjEzLCAKLSAgICA2NTMwMiwgNDA5ODksIDAsIDE5NDY5NiwgMCwgNDI3NjAsIDAsIDk4MzU2NiwgMCwgNDA5ODcsIDQ2NjcsIDAsIDk4MzkyMywgCi0gICAgODgyOCwgMCwgMCwgMTI0NiwgNDc0NiwgMCwgMCwgMTEwMjEsIDQ3NDksIDkyNjc1LCAwLCA5MjEsIDQ3NDQsIDAsIDEyNzAyLCAKLSAgICAyNDIsIDAsIDE1NjYsIDgyMTcsIDAsIDY0NjUzLCA3ODM4NiwgMTI4MTIxLCA3NDAzNiwgNzQ1MDUsIDQzMjc0LCA1MzEzLCAKLSAgICA5NTEsIDAsIDAsIDk4Mzg1OCwgNzYwNCwgOTgzMjgyLCA0MDA5LCAxMjc4MTYsIDk4MzcwMSwgMTIwNTYyLCAwLCA5ODM3MTEsIAotICAgIDY0ODYwLCAxMTkxMzgsIDExOTA2OSwgMCwgMTI3MzcwLCA0MDQ4LCA5ODM1OTgsIDAsIDcwMDI0LCAxNjQ2LCA3Nzg5MCwgCi0gICAgNjQ1MzQsIDczOTk1LCAxMjA3MDUsIDAsIDExOTg5MCwgMjU3OSwgMTE5OTA1LCAzMTc3LCAxMTM1NywgOTA5OSwgNDEwNywgCi0gICAgMzQ0MSwgMTE5ODk0LCAyOTc1LCA3NDQ0MiwgOTgyMiwgOTgzOTI2LCA1NTIyMCwgMTAwODQsIDczOTQzLCAxMTg4NDAsIDAsIAotICAgIDkxNzU2MiwgMTk0NjEwLCAzMzk5LCA5ODUxLCA5ODM3MDgsIDExOTA5LCA5MDU5LCAwLCA3Njg3LCAwLCA2Nzg5LCAwLCAwLCAKLSAgICAwLCA3MTM2NywgMCwgMCwgMTc3NywgOTE1MSwgMTEzNywgNjk3NjcsIDc0OSwgNDIzNjYsIDAsIDUzODUsIDEyODU3NCwgCi0gICAgMTI4MjE4LCAwLCAwLCA1OTg5LCAwLCAwLCAxMjgwOTEsIDAsIDQxNjg1LCA2OTIyMywgMCwgOTc2OSwgNDE2ODQsIAotICAgIDk4MzIxNCwgNTE5LCAwLCAxMTc0MCwgNTc2NiwgMCwgMCwgMjYwMCwgODg0OCwgMTIwMTM4LCA0MTI5NywgMCwgMzY2NiwgCi0gICAgNzQ0NzMsIDQxMzAwLCA3NDQ2OCwgNjUxNjAsIDAsIDY5Njg4LCA2OTc3MSwgNzQ0NzksIDAsIDY1NTgsIDAsIDAsIDY5NzY1LCAKLSAgICAxMjA3NTAsIDI1MiwgMCwgNDEzMDIsIDAsIDAsIDAsIDY5NzYzLCAwLCAxMTcyOSwgODcxOSwgOTA2MCwgMCwgMTIwMTM5LCAKLSAgICAxMDc2MSwgMCwgMCwgMCwgMTE4NzkyLCAxMTczNCwgOTgzMjIxLCAxMTczMCwgMCwgOTU5MywgNTc1NywgMjQwMywgNjQ4MDgsIAotICAgIDU1Mjc1LCAwLCAxMTcyOCwgNDM1NzIsIDAsIDAsIDc3NjQsIDk4MzcwNSwgMTEwOTQsIDEyMDgyNSwgMCwgMCwgNDI4MiwgCi0gICAgODI5OCwgMCwgMCwgMCwgMCwgMCwgNjQ0NDksIDAsIDEyNjY1MCwgNjM4NTQsIDg0NTYsIDAsIDc0NzgzLCA2NTY3MCwgMCwgCi0gICAgNzgyNTAsIDAsIDc3NzQsIDEwNjA3LCA5NzkyLCAwLCAwLCAwLCAwLCAxMjA3NjQsIDAsIDEwMDE5LCA3NDc2MiwgMCwgCi0gICAgMzQ1OCwgNDM2NSwgNzAwNTMsIDk4MzcwMywgMzY0NywgMCwgMjYwMiwgMTI4MzQxLCAwLCAxOTQ3MDcsIDQxMTM1LCAwLCAwLCAKLSAgICAwLCA2NDYzMSwgMTcyLCA0OTcxLCA0MTIxOSwgNDExMzcsIDE4ODksIDcyMzgsIDY1NDUsIDEyNjQ3NiwgOTIxOTMsIDc1OTcsIAotICAgIDEwNTI4LCAwLCAwLCAzNzMyLCA3MzkxMCwgMTk0NTg4LCA1MzQ0LCAwLCA0MzM2NiwgNDMzNjMsIDkwNjIsIDExOTI1MiwgMCwgCi0gICAgMCwgMCwgNjQ0NzksIDkyMzIsIDkyNTk2LCAwLCAwLCAxOTQ3MTIsIDEwOTAwLCA0MTUzMSwgMTI2MywgMzcyMCwgMTIwNDgsIAotICAgIDAsIDY0MjkyLCA0MTUyNCwgNzIyNywgMTE5NjM1LCA2MDk5LCA0MTUzNCwgMCwgMTI3MzU0LCAxMjczNDUsIDI5OSwgCi0gICAgOTE3OTU3LCA4NTI1LCAxMjczNDcsIDM1MjQsIDkxNzU2NSwgODgzMSwgMTI3MzQ5LCA5MjU2NCwgMzA3NSwgNjc4NjcsIAotICAgIDEyNzM1MiwgMCwgNjYzNjIsIDAsIDY0MzUzLCAwLCAwLCA1ODQ1LCAwLCAwLCAwLCAyNTgxLCA4MjAwLCA2NTExNCwgCi0gICAgNjg0NjAsIDAsIDQzMjgzLCA1NTUxLCAwLCAxMjA3MzUsIDAsIDYzNDAsIDExODg1NSwgMCwgNzgxMzQsIDg2ODAsIDcyMDQsIAotICAgIDcwMDY1LCAyNTg4LCAyOTE0LCA3MDExLCA1NTI4MSwgMCwgMjQ3MSwgMTk0NjMxLCAyODgzLCAyNzQ5LCAxMTk1NjMsIAotICAgIDczNzc0LCAxMDkxMywgMCwgMCwgODY2NiwgNjc1LCA0MjQ5MywgMCwgNDM1NzEsIDAsIDYyMTksIDAsIDk5ODAsIDQxMjMyLCAKLSAgICAxMDkyOCwgMCwgNDExNTMsIDQxMjI5LCAxMTg5NjcsIDAsIDM3MzgsIDk0MDE2LCAwLCAxMjcxMSwgMzE4MSwgNjYyMTIsIAotICAgIDc0Mjg5LCA2ODQ3MiwgNDI4NTcsIDgyNjIsIDk4MzM3MSwgMCwgOTgzMjIwLCAwLCA0MjM0NywgMTIwOTIsIDk2MTUsIAotICAgIDcyMzQsIDc0MDQ3LCA5ODMwODgsIDAsIDQzNzQ0LCAwLCAwLCA3Mzg0NiwgMjkzNCwgMTI3MjIsIDEyMDc2MiwgOTIyLCAKLSAgICA0Mzk4MywgNzQ1MDcsIDk4MzEyNiwgNzQ0NjEsIDMyMTgsIDEyMDQ3MSwgNzQyOTAsIDEyMDQ2OSwgNjQ1NjIsIDEyMDQ3NSwgCi0gICAgODU2OSwgMTE0MDQsIDExOTMyLCA3MzcyOCwgMzIxNCwgMTIwNDYxLCAxMjA0NjgsIDEyMTI4LCAzMjA3LCA2NTQ4NiwgCi0gICAgNzg3MjksIDE5MDEsIDc4NzI3LCAxMjczMjYsIDEyMDQ2MCwgNzQyNSwgMzIwNSwgNjgwMDMsIDc4NzM3LCA3ODczNiwgCi0gICAgNzg3MzUsIDQzMzgzLCA2OTk0MCwgNjU0NTksIDI2MDYsIDc4NzMwLCA3Mzg5NywgMCwgMTE0OTYsIDExNzMsIDAsIDQxMjcyLCAKLSAgICAxMTk2NjEsIDAsIDAsIDk4MzMxMywgMTIwNzM3LCAwLCA5ODM5NjIsIDk4MzMxMiwgMzc4LCAyNjEwLCAwLCA2NTA3OSwgCi0gICAgOTgzMzE3LCA2NTY5NSwgMTI2NTU5LCAzNywgNzA2OCwgMCwgMTIwNDgwLCAxMjA0NzksIDMyMDksIDEyMDQ3NywgMCwgCi0gICAgMTA2MzgsIDk3NjgsIDY5OTUyLCAxMTk5MDksIDk4MzM5MSwgMCwgMCwgMCwgMCwgNjU1MTAsIDAsIDAsIDUyMzMsIAotICAgIDk4MzMyNywgNjQ3OTIsIDk4MzMyNiwgMCwgMTI2NjMzLCAwLCA3MDYwLCA5ODQ3LCAxMjAxNDQsIDE2ODUsIDU5NSwgMCwgCi0gICAgNzM5NzEsIDEyOTIsIDg5NDAsIDczODAsIDExMDg4LCAwLCAxMDAwNCwgMTI2OTk3LCAwLCA2NTQxLCAwLCAwLCAwLCAzMjQzLCAKLSAgICA5MDE0LCA1NjA2LCAwLCA1MzgsIDY0NjIwLCA1NjAyLCA4NDY3LCA3NDM5MSwgNjU0NywgMTI4MTMyLCA4MjAzLCA3ODQ4OCwgCi0gICAgOTgzMDkwLCA4NDU4LCA2NTIxMSwgODQ5NSwgMTE5OTA0LCAwLCA5MTc1NTIsIDc3OSwgNzgzMTQsIDY0MzY3LCAyNDY1LCAKLSAgICA2OTkwMSwgODE5MywgNTUyNzksIDk3MzAsIDkyODAsIDAsIDcwNjUsIDc0MTU1LCA0MzQ2LCAwLCA3Mzc5OCwgNTA0LCAwLCAKLSAgICA5MjQxNCwgODk4MiwgMCwgMCwgMCwgNzgyLCAwLCAxMDg4MywgMCwgMTk0ODUyLCA3MzIsIDM3MzcsIDEyNzI1MywgMTU0OCwgCi0gICAgNjg2NTAsIDkyNTA3LCAxODMyLCA1NjA0LCA1NzM1LCA0MTE0MSwgMTE5MDIwLCA0Mzc2LCAwLCAxMTc4NywgMzc0NSwgMCwgCi0gICAgMCwgNDI4ODgsIDY1NzEyLCA5ODMyOTYsIDM4NjksIDExOTM3LCA1NzI1LCAxMjc1MzksIDE3ODMsIDY4NjQ4LCA1NzI4LCAwLCAKLSAgICAwLCAwLCAxMTkxOCwgNjY1NjcsIDU3MjQsIDAsIDU3MjcsIDc4NTIxLCAwLCAwLCA3NjQsIDAsIDEyODExNiwgNDM1MzEsIDAsIAotICAgIDkwMzMsIDAsIDQyNTMyLCA2MjIzLCAxMTA0MiwgMTIwNzQ5LCAxMTQyMywgMCwgMTE5ODYxLCA3MTM0NCwgNDM0NjUsIDAsIAotICAgIDEyODI2NywgNjU1OSwgNjQ1NTcsIDcxMzQ4LCA5MjY0OSwgMTIwNjQ4LCA0MzAxOSwgNDM0NzcsIDEwMjM4LCA3NDQ5MSwgMCwgCi0gICAgNDMzNzcsIDkyMjgyLCA3MTM0NiwgMTQ3OCwgOTc4MywgMTE4MjUsIDI2MDcsIDY0NzQwLCAwLCA3NzM5LCA3NDU0MywgMCwgCi0gICAgMCwgMCwgNjEzMiwgMCwgNjM3NjUsIDAsIDcwMDU4LCA0MTE0NCwgMCwgOTI0MzgsIDQzNTM3LCA2NzYxLCAxMDA5MywgCi0gICAgNDM2OSwgOTE3NzkxLCAwLCA5ODMxNDgsIDg4MjAsIDM5NDcsIDAsIDAsIDExNTE1LCA1MjYsIDEyODEwMywgNDEyOTUsIAotICAgIDE5NDYwMywgOTE3Nzg1LCAxOTQ5MzIsIDAsIDc2ODgsIDkxNzc4NiwgNzY4NiwgODI4OCwgMTE4MTUsIDAsIDAsIDk4MzM3NCwgCi0gICAgMTU0MywgMzcxMywgNDEyMjEsIDEyNDIzLCA0MjI4MSwgOTE3Nzg4LCA3NDAyNCwgMTIyOTMsIDAsIDY0MzU3LCAxMTc5NCwgCi0gICAgNDIwODIsIDAsIDE3MzcsIDg5ODcsIDQyMDgxLCAwLCA3MjA1LCAwLCA5MzM1LCAxMjg1MCwgMTE5ODcwLCA2NTUzLCA3MDU1LCAKLSAgICAwLCA4Mjc3LCAwLCAwLCA1NDc1LCA3NDc5NSwgNjc4MCwgMCwgMCwgMTI5OTAsIDExNjAsIDQyMDg0LCAxMTk2NTAsIAotICAgIDQxMjE3LCAxMTk2NjAsIDEwMDE4LCAzNjAsIDAsIDAsIDY4MTc2LCA1ODYzLCAzMTM3LCAwLCA0MTQ3LCA5ODMxNzAsIAotICAgIDQxMjE2LCA3ODQ0LCAyNjE2LCAxMTkxOTAsIDY4NDYxLCA2NTIzNCwgOTgzMjg2LCAxMzA3NiwgMzEzNSwgOTgzMjc5LCAKLSAgICA3ODE0MywgMTE5MTM5LCAzMTQyLCA5MjQ1MSwgOTQwNjgsIDEwODE5LCAxMTk1ODAsIDEwMTgzLCAwLCAyNjA4LCAxNDcwLCAKLSAgICA3Mzk2NywgOTQwMDgsIDYyMjcsIDAsIDEyNzE3MywgNjk3NDEsIDk4MzU4MiwgNjE2MywgOTgzNTU4LCAwLCAxMjczMTQsIDAsIAotICAgIDAsIDg2MDMsIDAsIDExOTg2NiwgMzMwNiwgMTA4NzYsIDQzMzkyLCAxMTk1NzMsIDEyNzkzMSwgNTc1MSwgMCwgNjIyMiwgMCwgCi0gICAgMCwgMTIwODYsIDc0MDMsIDE2MDAsIDY0MzA5LCA2NDkzOSwgMCwgNjQ3ODMsIDkyNjU4LCAxMTMxMCwgMCwgODg4MiwgMCwgCi0gICAgMCwgMjU3MCwgNzAyMSwgMCwgMCwgNDMxMTAsIDAsIDEyMzQsIDY1NDAsIDY5NzQsIDAsIDAsIDk4MzIwOSwgNTAwMiwgMCwgCi0gICAgNDEyODYsIDY5OTQ2LCAxMjcwMTksIDAsIDQzNTg1LCAwLCA2NTUxLCA5ODM5NTMsIDEyODIyOSwgMCwgNDEyODksIDAsIAotICAgIDE5NDYwMiwgMCwgODk3NywgNjAyLCAxMjA4MTQsIDAsIDEyODc3OCwgMTI4NjYxLCAwLCA5ODMzNjcsIDQxMjc5LCAwLCAwLCAKLSAgICAwLCAxMTA4MSwgNDM2MTUsIDAsIDAsIDAsIDk4MzYxMiwgMTI3MjcsIDAsIDAsIDc4Mzk3LCA5NDc1LCA3MTEyLCA2NTEwNSwgCi0gICAgMCwgOTYzMywgMTA4ODYsIDQzNTkyLCA3ODMxLCA5ODM4MjAsIDE5NDU3MSwgMCwgNzM5MTUsIDgwNzYsIDQzMDQ4LCA4MjkwLCAKLSAgICA4MjkxLCA0MzA1MSwgOTI1NzAsIDAsIDI1OTYsIDQzNTg0LCAwLCAxMzExMywgMCwgMTI3NzU3LCAyMzkzLCA3MDU4LCAKLSAgICA5MDg3LCA3NDA2NywgNjg2NzMsIDQxNTc0LCA3ODMzNywgMCwgNzQwNTgsIDYzNzYsIDAsIDAsIDAsIDAsIDk4NTQsIAotICAgIDEyNzc0OCwgNjQ2OTYsIDAsIDEyODIyMCwgMCwgNjk5NCwgMCwgMTcyMCwgMCwgMCwgMCwgNjUyOSwgNzA2MywgOTgzMTgyLCAKLSAgICAzNzUxLCA5MTIwLCA5ODM0NzcsIDAsIDE3OTgsIDcwOSwgMCwgMTM1NCwgMTg3NiwgMTMxNTIsIDY1NTcsIDEyNDMwLCAKLSAgICA4MTM3LCA5NDA5OCwgOTI2NDIsIDAsIDAsIDI0NSwgMTI4MDk3LCAxMTQ1NiwgNDEyMzMsIDcwNzAsIDAsIDk0MDQ2LCAKLSAgICA2MTM2LCA5MTc2MDksIDY1Njc3LCA4NjgyLCA0MTIzNSwgOTI1OTUsIDQyMDQ1LCA5ODA0LCAxMTg5NjMsIDQzMiwgMzU5NSwgCi0gICAgMTk0OTQ1LCA2NTQzNywgMCwgNzQ0NTUsIDQyMzk5LCAwLCAwLCAxMjgyNzQsIDAsIDExOTY1OCwgMCwgMCwgMCwgNzc4OTQsIAotICAgIDg3OTcsIDAsIDkwNTIsIDY0ODg4LCA3MTY3LCAyMzU2LCA5NSwgNzQ3ODQsIDEwNTgwLCAwLCA0MjI4NiwgMCwgNjQ2NDAsIAotICAgIDAsIDk0MTA5LCAwLCA3NDEzNywgNzAwMzUsIDEwMDYzLCAxMjY1MiwgMTIxOTksIDkyNDgwLCAwLCAyNTY2LCAxMTk3MSwgCi0gICAgOTgzNzI4LCAwLCAxMDY1LCAwLCAwLCA0MzQwMCwgMjU3NiwgNjY2OTYsIDkzOTk5LCAwLCA0MzYwNCwgMCwgMCwgNzQwODIsIAotICAgIDUxNCwgNzQ1MDIsIDcwMDMyLCAyOTIxLCA0MzIxNSwgNjQ0OTMsIDU3NzIsIDEyOTY4LCA3MDA1NSwgMTk0OTQ0LCA3NDU4MCwgCi0gICAgNDMzOTgsIDI1ODAsIDk4MzgwMSwgNDEzNDEsIDQxMjIzLCA2NTY0LCAxNDYzLCA0MTM0MiwgMCwgNTI5MywgNzAwMjAsIDAsIAotICAgIDM3MzMsIDExMzQ2LCAwLCAxMjA1NCwgMCwgNzQwOTgsIDQyODI3LCAwLCAxMzA5MSwgMCwgMCwgMCwgOTE3OTE1LCAwLCAKLSAgICAxMjcwMjUsIDAsIDc0ODIxLCAwLCA5ODM3MjQsIDExOTA0MiwgMCwgMTI3ODY1LCAxMzA5MCwgNjY2NDMsIDAsIDEyNzAsIAotICAgIDExMzIsIDQyMzYwLCAwLCA3NDA5NiwgNjY2NTUsIDQyNTY5LCAxMjc4MjQsIDAsIDY0NzYxLCAwLCA0MTAyMSwgODUxMCwgCi0gICAgNDI0MzIsIDAsIDAsIDE5NDc4MiwgMCwgNjQ0OTYsIDc0MTA5LCA3MDAzMCwgOTkxNSwgMCwgOTgzMjE2LCA3MDYxLCAKLSAgICA0MTMzNiwgMzg1NCwgNjk3MDAsIDEzMTQxLCA2ODQxMywgNDM0MDEsIDQyMzE5LCAxMzA4MiwgMCwgNzA2NywgNjgyMjEsIDAsIAotICAgIDEyNzM4MywgMTI3MTcxLCAwLCAwLCAxMjc3OTcsIDkwMjksIDQzNTQzLCAxMTkzMTUsIDIzNTMsIDYzMDgsIDAsIDc0NzkyLCAKLSAgICAyNjExLCAxMTkxODYsIDAsIDAsIDAsIDQzNjY0LCA5MjM5OSwgNjY2MjcsIDAsIDQ0ODQsIDg1MDksIDExODk3NiwgMTEwNjYsIAotICAgIDY1MjMzLCAwLCA0MTIyNCwgNDEwMTcsIDAsIDM3NDcsIDEwNTIyLCAwLCAwLCAxNjkxLCA0MTIyNiwgMCwgMTIxMDcsIAotICAgIDcxMDAsIDEwOTA1LCA2NTAxMCwgMTk0OTg2LCA2OTcsIDY2MDE4LCA5Mjg0LCA0MjQ0LCAwLCAwLCA5MjY0NCwgMTMxMjEsIAotICAgIDEyMDAzNiwgMCwgMTIwMTAsIDEyODU3MywgMTI4MjIxLCAwLCAwLCAwLCAxMjcxOTMsIDY1ODE2LCA2ODExMSwgMCwgCi0gICAgMTI3OTMzLCA2NTY2OCwgOTIyNTcsIDY2MTgsIDExODc4NCwgNjYzNjUsIDAsIDQyMjM0LCAxMjY0OCwgNzgxMTAsIDcxMjMsIAotICAgIDcwMDM4LCA1Nzg1LCA5MTk4LCA5NzY0LCA0MTMxNiwgNjU4NzcsIDczODMsIDEzMjMwLCA0MTI5OSwgMCwgMCwgNjgzNjUsIAotICAgIDEyODI1OCwgMCwgMCwgMCwgMTMxMjIsIDAsIDE5MSwgNzAwNjAsIDg1ODUsIDgwMDAsIDY0NDExLCAxMjA2NTIsIDQyODg5LCAKLSAgICA2NDg1MCwgNDEwNzIsIDQxNTc4LCAwLCA0MTU3NywgMCwgMTAwMDIsIDAsIDY1MzMsIDczODAyLCA0MTU3MCwgMCwgNjgzLCAKLSAgICAzOTYsIDQxNTgwLCA2ODE0NiwgMCwgMTI5MDEsIDQzMDU4LCAwLCAzNDMsIDcxMjksIDQyNjgwLCA0MTM2MCwgNzgxNTQsIDAsIAotICAgIDQ3NDMsIDAsIDAsIDc0MDQwLCA3NDEwOCwgODc0MywgMTcyNCwgMTQzMywgMTE5MzIyLCAwLCAzNzM5LCA2MjYzLCA3MTM0OSwgCi0gICAgMCwgMzk2NCwgNjU5MiwgMCwgMTI4NjkzLCA2NjA0MCwgMCwgNDI1NjgsIDY5ODA2LCAxMjgxMTMsIDE3NzgsIDM5NTYsIDAsIAotICAgIDQyMDcwLCA2NTYzLCA0MzA3NSwgOTAxOCwgOTQwMDYsIDk4MzM4OCwgMTIwNjcsIDQxMzEyLCAwLCA1NTQ3LCA3NDUzMSwgCi0gICAgMTI3OTY5LCAwLCA4MTc1LCAwLCAyODQsIDgxMDgsIDkzNCwgMCwgNzQwMDEsIDE3MywgNjY0NjAsIDcxNzQsIDkyNzAzLCAKLSAgICAxMTg4MjIsIDE3NTAsIDAsIDQzOTQsIDY4MzY4LCAxODA3LCA5ODM4NzksIDkyMjk4LCAwLCA1ODg5LCAwLCA3MTgwLCAwLCAKLSAgICAxMTkxNDUsIDAsIDkxNzU1OCwgNDI0NzEsIDY5ODIsIDE3MjEsIDQ0MDIyLCA3ODkxLCA0MjI0MywgNDIxNjAsIDI1ODMsIAotICAgIDQ1MTIsIDExOTM2MCwgNjUyMzAsIDEyODEwOSwgMCwgMCwgMzg1NSwgMCwgMCwgMCwgMCwgNzQyOTUsIDAsIDAsIDkyNDE2LCAKLSAgICAzOTc1LCAwLCA3NDA4NywgMCwgMTI2NzIsIDM3OTgsIDI3MDMsIDk4MzU5OSwgMCwgMjEwOSwgOTc3NCwgMTI3NSwgMCwgMCwgCi0gICAgNDEwOTUsIDM5NjIsIDAsIDI5MzIsIDQxMTAxLCAzOTU0LCA2NDU3LCA0NTEzLCAwLCAwLCA3Mzk5NCwgNzM5OTIsIDE0NjgsIAotICAgIDAsIDAsIDQxODUxLCAxMjgyMzAsIDQxODQ2LCAwLCA1NTIzOCwgNzYzMywgNDE4NDksIDY4Mzg1LCA0MzIwLCAzMjI0LCAwLCAKKyAgICAxMjgyNSwgMCwgMCwgMTI3MjUsIDAsIDEyNzEwNiwgNzg2NDIsIDIyMywgMCwgNjk2NzUsIDEyMDE2NiwgNDI0NDQsIDAsIAorICAgIDY0NDk5LCA2NTI0NSwgMCwgMTE3MSwgMCwgNjk3MTcsIDAsIDE4MDUsIDg3NzIsIDQzODIwLCAwLCA5OTMwLCA2NTI0NywgCisgICAgNzg2MTksIDEyMDExMSwgMjMzOCwgMCwgMTE4ODUzLCAwLCA0MjY3NiwgMCwgNjQ4MDAsIDY1MjM2LCA2NzY0NCwgNjgxMjYsIAorICAgIDEyMTMsIDAsIDY0MDc1LCA3OTcsIDY0MDc0LCA4NzM0LCA0MjEyLCAxMjczNjksIDY0Mzg3LCA0MTE1LCAwLCA1MDA1LCAKKyAgICA2NDA3MCwgNjQwNzMsIDEwNjc5LCAwLCA3Nzk1NCwgOTQwMiwgNjQyNzYsIDQyNiwgMCwgMCwgODI1MSwgMTAxMzYsIAorICAgIDY1NDM2LCAwLCAyMTIwLCA0MzMwMiwgMTIyNCwgMCwgNjU1NzYsIDc0MTkyLCAxMDcwMSwgMTc2NCwgMzEwMSwgMTI3ODE1LCAKKyAgICAxMjg1OCwgMTIwMTU5LCAwLCAxMTM3MywgNjM3OCwgMTI3ODU5LCAxMjAxMDMsIDg2NjMsIDkzMTIsIDQxNjQ0LCA0NTM5LCAKKyAgICAyMTI5LCAwLCA5MjIyLCA5ODM3MzgsIDAsIDQyNTksIDkwOTIsIDc0NTY3LCA0MTk2MSwgMCwgMTI3MjQsIDY2MzU3LCAKKyAgICA0MjMzMSwgNjQ5MzUsIDAsIDAsIDEyOTMsIDc5NDcsIDIxMzIsIDk4Mzc2NywgNzQ1OTMsIDEyMDMwOCwgMjQ1NCwgNDI3MTcsIAorICAgIDM2MTMsIDEyODgzNywgMCwgMCwgNjU4ODgsIDg4MTYsIDEwOTc4LCAxMDg0MCwgMCwgMTA2NjgsIDAsIDQzMDg3LCAxMjU5NSwgCisgICAgMTIwMzA0LCA5ODMxMTQsIDg4MjIsIDAsIDExNTcsIDY0OTAzLCA4NjM4LCAwLCAwLCAwLCAwLCA2OTg0OCwgODIzNSwgCisgICAgMTIwMzE2LCA0NDA1LCAxMDA4NiwgMTIwMjQ3LCAwLCA2OTIxNiwgMCwgNjU0MzAsIDcxMzIxLCA2MDc5LCA2ODE3LCAKKyAgICAxMDc2NCwgMTI3OTEwLCA2NDI5MSwgMTI4MDUxLCA5OTgsIDEyMDMxMiwgMTEwNjIsIDEzMTcsIDY0MzI3LCAxNTU4LCAwLCAKKyAgICAxOTkxLCA3ODgyLCA0MjI1NCwgMCwgNDE3MDAsIDUzMCwgMCwgMTA0MjgsIDExOTMzNSwgMTIwMDIsIDExOTMzNiwgNTc0MiwgCisgICAgNDMwNzYsIDQ2OTIsIDY0NjMwLCA0MTgyMywgNDAwNywgNTAwNCwgMTE5MzM0LCA3ODk2LCA3NTEsIDY1OTUsIDY1OTYsIAorICAgIDEyMDMyNSwgNjYzNzMsIDAsIDAsIDY0OTA4LCA5MjY5MSwgNjMxMSwgMCwgMTIwMDQsIDExOTE5MiwgMTIwNDksIDQzMTA4LCAKKyAgICAxMjAzMjYsIDAsIDQxNzA1LCA5MjE4OCwgNjU5OCwgMCwgNjU5OSwgMTIwMzM0LCAwLCA0MjE0OCwgMTE4ODI1LCA2NjAyNywgCisgICAgMCwgNjU5NywgOTQxMiwgODM0MCwgMTE4MjQsIDY0NzQ1LCAyMjgxLCA2OTkwNCwgMCwgMTk4OCwgNTQwNywgNjc4NjUsIAorICAgIDI0MzAsIDQxNjc4LCAwLCAxMjAyNDMsIDIzMzYsIDk4MzkwMywgMCwgNzg4NzEsIDEyMDQ0MiwgOTgzNzY5LCAxOTIxLCAKKyAgICAxMDk0NywgMTk5MjcsIDAsIDY1NDA2LCAwLCAxOTkxMywgNDI4NCwgMTMyMTcsIDAsIDQzNzg5LCAxMjg0MSwgOTIyOSwgCisgICAgMTA5NTYsIDQyMjg1LCA0MTY3NCwgMTk5NjQsIDQxNjc5LCA2NTA4NCwgMzUyMSwgMCwgNTc3NCwgODMyNSwgMCwgNjU0MDMsIAorICAgIDk4MzA4OSwgMTg1NCwgMTA3OTQsIDAsIDY3NjYwLCA2OTg0NiwgMCwgNzgzNTksIDUyODAsIDAsIDQzNDQsIDEyOTA1LCAKKyAgICA2NTQzMywgNjA3NiwgNjQ3OTMsIDQxNjEwLCA3NjgsIDEyMDc0LCA0NDIsIDAsIDY4MTYyLCA2NDA4MSwgMTI5MzQsIAorICAgIDQxNjgyLCA2NTQzMiwgNDE2OTMsIDAsIDYwNzEsIDY1NDM0LCAxMjc0NjcsIDQ4MDQsIDQwNTMsIDAsIDEyNzQ2OSwgCisgICAgMTk0NjUzLCA0MTY5NiwgNDY3LCA2OTgyMywgMTI3NDYzLCA2OTc5NywgMTk0NjUyLCAxMjc0NzMsIDg0MjEsIDEyNzQ3MiwgCisgICAgNjk2ODIsIDQzNzA1LCA1MDIsIDAsIDY1NDMxLCAxMTkwNTYsIDY5OTU0LCAxMjA0MywgMTMwMywgMzE2LCA3MzY0LCAyMDI5LCAKKyAgICAyMTM2LCAxMTkyNDYsIDExNTMzLCA2NDM2NSwgNDM0ODAsIDkyNjM5LCA0ODYwLCAxMjY2NDgsIDEyNzg3NywgNDI0ODgsIDAsIAorICAgIDk1ODMsIDEyODg0OSwgNTU0NiwgODAxOSwgNzM4NTYsIDAsIDAsIDAsIDU1NDQsIDIzNTUsIDEyMTUwLCA2NTcyNSwgNTU0MywgCisgICAgNzc5ODksIDYzNzUxLCAxMjEzNywgNTU0OCwgNzc5ODUsIDAsIDY1NzI3LCA2ODM4OCwgNjU3MjYsIDYwNzcsIDEyODM1MiwgCisgICAgNjU0NTIsIDAsIDExMzAxLCA3ODAxMywgNzgwMDgsIDc4MDEwLCA5ODc0LCA3ODAwNywgMCwgMTMxOSwgMzA1MCwgNjU0MTAsIAorICAgIDAsIDAsIDc4MDE2LCA3ODAxNywgNDI4MzAsIDQzOTk2LCA2NjcxNiwgMTI4MTM3LCA0NjkxLCA5MjI0MiwgOTM0NSwgNjIxLCAKKyAgICA5MjcwOSwgMTI4MjIyLCAwLCA2NTQxMSwgMCwgNDExODIsIDczODgxLCA2NTQwOCwgNzM4OTksIDc4MDI0LCA5NDc0LCAKKyAgICAxMDU0NSwgMTE5MTE4LCAxMDg4NywgMzc4NiwgNjU0MDksIDg4OTQsIDQzMTc5LCAxMTk2MTEsIDc5MjMsIDM3MTYsIAorICAgIDkyMzYzLCA5OTk2LCA4NTA4LCAwLCA3MDEyLCA4MTk1LCAxMjc4MzQsIDk1NjYsIDAsIDM3MjIsIDAsIDQxNzA3LCA4NDkzLCAKKyAgICA1NDUsIDk1NzUsIDQxMzc5LCAxMDA1MCwgMTI3MTgsIDY5ODU0LCA4ODU5LCA2ODIwLCA3NDM0NSwgNjUxMTAsIDEyMDc0MCwgCisgICAgMCwgMCwgOTExOSwgMjc4NywgNzkyMCwgMTE4ODIzLCA0MDIxLCAyMDEyLCA3OTg1LCAwLCAxMTk2NjMsIDAsIDAsIDc4MDIxLCAKKyAgICA3ODAyMiwgNDEwLCA3ODAyMCwgMTgwMiwgNzgwMTgsIDc0MTA3LCAwLCA0MTY1OSwgNDE2NzEsIDE4MjcsIDAsIDY0Mzk2LCAKKyAgICAxMDEyNiwgMTIxMTYsIDQxNjczLCAxMjAzNzAsIDExNDIyLCA3ODE0MSwgMTIwMzczLCAzODYwLCAxMjAzNjcsIDY4NDEyLCAKKyAgICA0MTM0NSwgMTIwMzYyLCAxMjAzNjMsIDExNzQ4LCA0MjE1OCwgNzk0MSwgMTEwNzYsIDg3NDksIDEyMDM2MSwgMjEwNCwgCisgICAgNjQ4NTgsIDM2MSwgMTIwMzU3LCA4NDUsIDAsIDQxNTYwLCAxMTk3MCwgNDU2MiwgOTE3OTIwLCAyOTI2LCA5MTc5MTksIAorICAgIDQ1NjksIDc0MTMwLCAwLCA0MzQ4NywgMTk0NjMwLCA2MTEsIDc0MTI5LCA2NDg3MSwgMTE4ODkxLCA2NTYyOSwgMCwgCisgICAgMTk0ODU4LCAwLCAwLCAxMjc1NDUsIDEyMDU0MywgMCwgMCwgNjI5MSwgMCwgNzg2MzksIDQxNjY5LCA3MDk0LCA5MTc5MjEsIAorICAgIDAsIDk4MzU4MSwgNzQwNTQsIDEyNzc1NCwgMTk1MDI5LCAwLCA4MzksIDk4MzMxOSwgNzY5NSwgODc2OSwgNjUyNDYsIAorICAgIDQ4MjksIDE5NDY2MywgNDg1OSwgNjQ0NjcsIDAsIDk4Mzk2MywgMTE4OTk4LCA3MjA2LCAwLCA2NjQ3LCA0Mzk4NiwgMCwgCisgICAgNjk3NjYsIDAsIDY0NzY0LCA0MjEwLCA5ODM4NjMsIDEyNzkzNiwgODA0LCAwLCAwLCAxMjI5OCwgMCwgNjY2NTMsIDAsIAorICAgIDY0OTI0LCAxMDA5MSwgNzM5MzEsIDk0NjgsIDc0MjQ1LCAwLCAwLCA3NDI0NiwgOTI1MDMsIDEyODM5LCA2NDY2OSwgCisgICAgOTIyMDIsIDAsIDEyNzksIDE0MjUsIDYyMjQsIDExOTIyOSwgMTEwNDksIDAsIDkyNjk3LCA0MzIzOSwgODQ4MiwgOTI0NDAsIAorICAgIDAsIDUwMzIsIDY5Njc3LCAxMTk0MCwgNjc4ODgsIDY2NCwgMTIwNDM3LCA1MDM0LCAwLCAwLCAxMjc1MjUsIDQyNzAyLCAKKyAgICA3Mzg4OCwgOTgzMTQ5LCAxMzI5NCwgNjc4NzMsIDY0ODY5LCA2MDMyLCAwLCA5MTE1LCA3NDMwLCAxMjAzNzcsIDAsIAorICAgIDEyMDgxOSwgNjgzODcsIDEyMDE2OCwgNzM5MTMsIDEyMDE3MCwgNDExNjEsIDU1MTgsIDQxNzQsIDEwOTkzLCA0MTE2MiwgCisgICAgMTIwMTYwLCA2NDUyOCwgMTE2OSwgNDM0LCA0MTQzNywgMTkwNSwgNjAzNCwgNDExNjQsIDY0NzQ0LCA5NTI4LCAxMTg4NjcsIAorICAgIDEyODgwMCwgNTI0LCAwLCA3NDAyOSwgNzg4LCA3NDAyNywgMCwgMTk0NjM4LCAwLCAxNjYzLCAxMDQxOSwgNzQwMjUsIAorICAgIDQyNjM2LCAwLCA2OTcyNSwgMCwgMTIwNjU2LCAwLCA2Nzg3NiwgMCwgMCwgMCwgNjc4OTcsIDc0MDM5LCAwLCAwLCAxMTM5NSwgCisgICAgMCwgMTE5MTA3LCA0MzYxMiwgNjQzNDQsIDAsIDAsIDEwODU1LCA1NDQ1LCA5MzU1LCAwLCA2NTE5OCwgNzM5MSwgODk4OSwgCisgICAgMjIxLCA2NTY4NiwgMCwgMCwgODAxMCwgNzE5MSwgNDk2MiwgNjk3NzIsIDg4NTUsIDAsIDAsIDY0NDY5LCAxMjA0MjYsIAorICAgIDEwNTU1LCAwLCA0MzMzMywgOTIyOTksIDAsIDEyMDQyNywgMTA0NTEsIDAsIDY3NjUzLCA3MjQ1LCAxMjQ0MywgNzQ0MDUsIAorICAgIDk5NDcsIDEyMDE0OSwgNzgzMTcsIDM4NzMsIDgzNjcsIDAsIDEyMDE0NiwgNDM0MzMsIDQzNjQ5LCAxMTk4NywgMCwgMCwgCisgICAgMTEwMTAsIDEyNzIzLCA3NDA1OSwgNzQwNjIsIDYyMTcsIDU4OTYsIDAsIDc2ODIsIDc0MDQ5LCAxNDYyLCAxMDIzNSwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgNDI1OTUsIDAsIDc0NDAyLCAxMTg4NjAsIDAsIDEyMDQxOSwgOTI0OTcsIDc0MDUyLCAwLCAKKyAgICA5MjM3OCwgMTIwNTQ5LCAxMTkwODIsIDY0Mjk1LCAxMjA0MTgsIDAsIDY0NzY1LCA3MzkyMywgMTIwNDE3LCAxMjA2NjIsIAorICAgIDY5OTIwLCAxOTQ3MDIsIDYyMTYsIDAsIDEwNzU1LCA5NDU1LCAwLCA4MTI0LCAxMjcwNDIsIDk0NzAsIDY5NDQsIDEyNzU0MCwgCisgICAgMCwgNjk2ODAsIDI4MjgsIDAsIDUzMSwgNDI2MzgsIDAsIDAsIDAsIDQzNDI4LCA4MjA0LCAzNjE0LCAyODI3LCA5Njk2LCAwLCAKKyAgICAwLCA4NzI4LCA0MzU0LCAxMDkwNCwgNzg1NjIsIDE5OTM2LCA3ODMzLCAxMjA2OTEsIDAsIDQyNTk5LCA0MjU5NywgNDI3MDksIAorICAgIDEyMDQwOSwgMTI3MDQ0LCAwLCA4NTM3LCAwLCAwLCA5MzU0LCA5ODMxNjQsIDEyODgzMywgNDExOTksIDEwMTIxLCAyMDI4LCAKKyAgICAwLCA5ODMxOTQsIDY5NzE1LCAwLCAzMDYyLCAwLCA3NDQ0NywgMTI2MDgsIDAsIDY2NDQwLCA3NTQ1LCA5NzAwLCAxMjU4MCwgCisgICAgOTIyMDUsIDEyMDc3NywgMTIwNTAyLCA0MTE1NSwgMCwgNzQwNzEsIDAsIDk4MzQ1NywgMTI3MTMsIDAsIDAsIDAsIDc4NzcyLCAKKyAgICAwLCAxNzM0LCAwLCAwLCAxMjcwNDAsIDY0NTk0LCAyNDU2LCAyMzEsIDAsIDc0MTY3LCA1NDIsIDAsIDExODc4NiwgMCwgCisgICAgOTgzOTc5LCAxMjMwLCAwLCAwLCAzNTk3LCA0NDQ2LCAxMDU4NCwgNzQyMzUsIDkyMjE1LCA0MDM3LCAxMjc5MzgsIDgzNTIsIAorICAgIDAsIDU2ODcsIDAsIDY0NTE1LCAwLCAxOTQ4MDEsIDU1MjY1LCA2Nzg0NiwgNzg0MzQsIDk3MDQsIDAsIDAsIDcwMDgwLCAKKyAgICA3MTMzOCwgMCwgODY2MCwgMTI2NDk1LCAwLCAwLCA3ODc3MywgNzQ0ODIsIDQ0ODMsIDE3MDksIDY5NzIxLCA5OTA5LCAKKyAgICA2MDgwLCAwLCAxMjAzNTgsIDE3NDYsIDEzMTUsIDg2NjcsIDAsIDAsIDEzMTQwLCA2NTg5OSwgMTA2MDQsIDAsIDQ0ODAsIAorICAgIDExMjY2LCAxMjgxNTIsIDEyMjYsIDY5MzAsIDY3OTc5LCA5ODM2OTAsIDYzNjAsIDEwODk3LCA0MTIzMCwgNjA1LCAwLCAKKyAgICA3NDc4NSwgNjk4NzUsIDAsIDAsIDQxNTAwLCAwLCAzMTEsIDExNDUzLCA2MjIxLCAxMDYwOCwgNjQ5NDMsIDc0MjgwLCAKKyAgICAxMDg3NywgMTE4ODY4LCA2NDg4NSwgNzQyNzIsIDAsIDAsIDEyODU1OSwgMTIwNzM2LCA3NDMxMiwgMzQ1LCAwLCA3NDQ1NiwgCisgICAgNjQ2MDYsIDk5MTcsIDAsIDkyMjMxLCA1MDM3LCAwLCAxNzc2LCA4NDIyLCAwLCAxMTg4MTQsIDQxNTA4LCA0MTIwMSwgMzIzLCAKKyAgICA0MzMyOCwgMCwgNDI2OTgsIDEyOTUsIDE5NDg1MywgNDYyNSwgMCwgNDYzMCwgMTMxMTcsIDAsIDEyODc3MiwgNjUxMjMsIAorICAgIDExMjkzLCAyNjY4LCAxMTI4OCwgMCwgNDI2NDAsIDY1NjY2LCAyNTE5LCA5MjM2OSwgNjU0MjAsIDkyNDc5LCAwLCA0MjUyLCAKKyAgICA1MDQ5LCA0MjY1OSwgMTE5MDExLCA3MDYsIDc3NTQsIDEwODU0LCA4NzM4LCAwLCA2NTQxOSwgMCwgMCwgNjQ5LCA2NTQyMSwgCisgICAgMCwgNjY3MDIsIDAsIDEyNjcwLCAxMDEzLCAwLCA2NDkxOSwgNzA1LCAwLCA2NTQyMiwgMTI3ODAzLCAxMTgzLCAxMjY1MTksIAorICAgIDcwMTcsIDQyODUyLCAwLCA4MTU3LCA5NzM2LCA2NDUwMywgNjU0MTgsIDAsIDk4Mzg3OCwgNzQwMzUsIDAsIDExOTEzLCAKKyAgICA3Mzg3NCwgNjY5NiwgMCwgODkyMCwgMTE5Mjk4LCAwLCA3OTYyLCAxMjIxMSwgOTgzNywgMjA1MSwgNjYyMjcsIDAsIDQxODQsIAorICAgIDAsIDAsIDEwMTc3LCA3Mzc3NywgMTg1NywgMTk0NjU3LCA0NjI2LCA4NDY0LCA4NDcyLCAwLCA0NjI5LCA4NDk5LCA3ODMyMSwgCisgICAgNzgzMjIsIDQ2MjQsIDc4MTgsIDExOTE3MywgMCwgMCwgNzgwNSwgMCwgOTQwMDcsIDY5MzUsIDkyMjkyLCA3ODMyNSwgCisgICAgNzgzMjYsIDc4MzIzLCA0MzMyNywgNDM5ODksIDExOTA0NiwgODQ5MiwgODI1MCwgODQ1OSwgMCwgODQ5NywgODQ5NiwgMCwgCisgICAgMCwgNzgzMzYsIDc4MzM5LCA5NTQzLCA3ODMzNSwgNzgzMzIsIDc3ODMyLCA2NTg0OSwgNzc4MzEsIDk4Mzk2MSwgMCwgCisgICAgMTI0NTEsIDAsIDg2ODQsIDAsIDYxMDIsIDAsIDUyOTgsIDAsIDUyOTQsIDAsIDAsIDk4MzQ1OSwgMTk1MDYyLCA5OTQ5LCAKKyAgICAxMTk4MjYsIDQzNjE3LCAxMTkyMTUsIDAsIDEyMDczLCAwLCAwLCA3Nzg2MywgMTMxMDgsIDEyMDYxNywgMTE0MzksIAorICAgIDQxNDY4LCA5ODM3NTcsIDAsIDUyOTIsIDU1MjcyLCA5ODM4ODMsIDE5MzksIDUzMDIsIDM5NzAsIDkxNzg3OSwgMTI0NTUsIAorICAgIDE3OTMsIDAsIDAsIDAsIDY2NDMsIDkyNDc3LCA2NTI2MywgMCwgNzgzMzAsIDQxMjkzLCA3ODMyOCwgNjU5MjMsIDAsIAorICAgIDEzMjE5LCA5NTY5LCAwLCA3NDM4MywgMCwgNzQxOTcsIDAsIDU1MDAsIDg4MTMsIDAsIDAsIDc0NTY2LCA1MzIyLCAwLCAKKyAgICA3ODM0MCwgNDM2MzEsIDUzMjQsIDY2NDQzLCAzNzg0LCA0MTYxNCwgNjUyNjksIDYyMzAsIDc4MzQ5LCA3ODM0NSwgNDMzMjQsIAorICAgIDMzNjAsIDc4MzQ0LCAxMTUyMywgMCwgOTI0ODgsIDk5MjYsIDcxOTcsIDAsIDY4NDI5LCA0Mjg5NCwgNDE4MjEsIDEyNDksIAorICAgIDc4MzYwLCA3ODM2MSwgNzgzNTYsIDc4MzU4LCA3ODM1MywgNjQ4OTksIDY0NzYzLCA0MTE0OSwgNDE4MDcsIDQzMTYyLCAKKyAgICA0MTgxNSwgNDExNTAsIDAsIDEwNTcxLCAxMDA5NiwgMCwgMCwgNzgwNzQsIDY5NDcsIDQxMTUyLCA4ODcsIDkyNDksIDY1NjUsIAorICAgIDc4NTEwLCA0MTk5MCwgNzg1MDksIDQxODExLCA3NDQ2NiwgOTM5NjYsIDY2NzAsIDc3ODgyLCAwLCAwLCA0MzA5MiwgCisgICAgNDMzMjUsIDAsIDEwMTY4LCAwLCA5NzgxLCAxMjg2NTUsIDkxOTAsIDAsIDk2NjYsIDgyNjksIDY1OTQ0LCA3NDAwNSwgCisgICAgMTMwMTksIDExNjcwLCA2OTg2MCwgMzE1LCAxMjgxMywgOTgzNDU4LCA3ODQzMiwgNzgyNTYsIDc4MzUxLCA3ODM1MiwgMCwgCisgICAgOTgzNjU3LCAwLCAwLCAxMzc4LCA5NTA5LCAwLCAwLCA3NDQ3NSwgMzA2NiwgOTIyMjAsIDY3ODQ3LCAwLCA5MjM1NSwgMCwgCisgICAgNzgzNjUsIDg3ODcsIDEyMDM3OSwgMTk0NjE2LCA0MTYxOCwgMTk0NjE1LCA3ODI2MSwgMTk0NjE0LCAwLCA2NDY1MiwgMCwgCisgICAgMTk0NjEyLCAwLCA3ODM2NiwgNDIwODgsIDAsIDE5NTA2MSwgNzE3NiwgNDM3NTYsIDEwMTM3LCA2MTIxLCAxMDk5NSwgCisgICAgNzgyNTksIDc0NTM0LCA4MTE5LCA2NDg3NCwgOTE3ODE2LCAxMjcxOTksIDE5NDkzOSwgMCwgNzQ1MjUsIDAsIDAsIDEyOTMwLCAKKyAgICAxMzk0LCA3NDUxNCwgMCwgNzQ1MTUsIDAsIDExODgwNCwgMjk5OCwgOTUyNywgMTIwNjU5LCA2NTE5MCwgMTI5NzcsIAorICAgIDQyMDkwLCAxMTkxNjUsIDAsIDExOTEwMCwgNDEyMzYsIDkyMjM1LCA0MjAwNSwgNDIwMDMsIDQxMjM3LCA1ODQ4LCAwLCAwLCAKKyAgICAzNjcwLCAxMjg2NTcsIDE5NDYwMCwgMCwgMCwgNzg5MCwgMCwgMTEyOTgsIDQzMzE1LCAwLCA2MjI5LCAxNTkzLCAwLCAwLCAKKyAgICA2MTksIDQ2MzUsIDY1MDgwLCAwLCAxMjgwMDIsIDQxMjAsIDY1MzM3LCA2NTMzNiwgMCwgMTE4MDgsIDExOTIxNCwgNzQxMTUsIAorICAgIDkzNjYsIDQyNzkwLCA0MjAwNiwgMTE5MTE1LCA2NTMyNywgNjUzMjYsIDY1MzI1LCAxMDc1NywgMTUwNywgNDIyMTYsIAorICAgIDY1MzIxLCA2NTMyMCwgNjUzMzUsIDY1MzM0LCA2NTMzMywgNjUzMzIsIDY1MzMxLCA0MjA1OSwgNjUzMjksIDQyNjg5LCAKKyAgICA5MjQyNywgOTEyOCwgOTQwNDUsIDQyMDczLCA2Nzg1LCA2NDU5MCwgOTgzODMwLCA0MzcxLCA3MTk2LCA2NTMxOCwgMjAzNSwgCisgICAgNjUzMTYsIDQxMDYsIDY1MzE0LCA2NTMxMywgNDIwNzQsIDEyNzg0NywgNDEyMjgsIDAsIDY1NjA5LCA0MTI0MSwgNzkwMywgCisgICAgNDEyMzksIDQzNTMzLCA3ODQ1OSwgNzE4OSwgMCwgMCwgMCwgMTIzNTcsIDQyODAyLCA3ODQ1MCwgODQ4NywgOTEzMSwgMCwgCisgICAgNDYxNSwgMTI2OTUsIDEyNzc1MiwgMCwgMTIxNzUsIDAsIDY0NTM1LCAwLCA3ODA5LCAwLCAwLCA1NjIsIDEyMTY5LCA2NTkwLCAKKyAgICA2OTc2MiwgNjY0NTUsIDY0NzM4LCAzMjE5LCA2ODY1NCwgOTgzNzg3LCAwLCAxMDM3LCAwLCAyMDI1LCAxMjgyNjMsIAorICAgIDEzMDk4LCA3ODQ0MiwgMTA2MzcsIDQ1NjgsIDU0OSwgMTU3MCwgMCwgMjgzNSwgMCwgMTA2MjQsIDQzNjIzLCAxMTA3MiwgCisgICAgMTI3MTkxLCAwLCAwLCAxMjYwNiwgNzg0MzMsIDI4MjUsIDAsIDEwODI1LCA4MDc5LCAyODIxLCA0MTA0NiwgOTIzMjcsIAorICAgIDczNjUsIDk4Mzc1MywgMTIwNTkzLCAxMzA3MSwgMCwgNDUyLCA0MTA0OSwgNDI4NDAsIDYzNDYsIDI4MzEsIDU0NjEsIAorICAgIDc0NTk2LCAxMTQ2NSwgNTIxMiwgMCwgNjQ3MDMsIDExOTE5MSwgNDIzMDgsIDcxODEsIDAsIDQxMzMyLCAwLCAxMjMzMywgMCwgCisgICAgMTY2OCwgMCwgMCwgMCwgMTE4NywgOTgzMzg1LCA0MjYyOCwgNzg1NzUsIDAsIDEyODc3NywgMCwgMzI0MCwgMTI4NTE4LCAKKyAgICAxMjE5NCwgMCwgMTE1OTEsIDQxMDY1LCA1MzIzLCA4MTY2LCAwLCAwLCAwLCA3NDUzNSwgMTYyMywgNjUyOTcsIDEyODg1NiwgCisgICAgNTcxLCAwLCA0OTE4LCAwLCA1Mjg4LCAxMjcyOTUsIDg5MTYsIDY1MDQ4LCAxOTA5LCA4ODY0LCAwLCAwLCAxMDczNiwgCisgICAgOTI1MDgsIDExNTcxLCA3NjE1LCAxMjczMDAsIDkyMjk2LCA0MjM3LCA5MjU3NiwgMTAzNSwgNjU4MTUsIDAsIDc4ODEsIAorICAgIDcwMSwgNjU5MzYsIDM0ODksIDAsIDAsIDEyMDc1MSwgMTE0MDMsIDAsIDAsIDEyNzE0NiwgMzc5NiwgNjgwMCwgMCwgMzk5NCwgCisgICAgMTE0MjEsIDAsIDE5NTA3NiwgMCwgOTgzOTIyLCAwLCAwLCA2NDg1NywgMTI4MTA1LCAyODU1LCAxMjc4MjgsIDY2MzA4LCAKKyAgICA0MTYyMSwgNjgyMTQsIDEyNzI4MywgMTI3ODE3LCAxMDY1NCwgMCwgMTE5MjI2LCAxMjE2NCwgMzI0NiwgNzkwNiwgNDM5NzIsIAorICAgIDY1ODQ3LCA3MTgyLCAwLCAxMzAyNCwgMTk0ODIyLCA3NDI3MCwgMTI4Mjg5LCAwLCAwLCAwLCAxNDk2LCA3NDcsIDAsIDk0MiwgCisgICAgMjM3OCwgNDMxMzYsIDEyNzkwNSwgODQ2NiwgOTgzNTc1LCA5MzIwLCA4MDAxLCAxMjMyLCA4MTM5LCAxMTYxNywgMCwgMCwgCisgICAgMTE0MDksIDY4MzczLCA2MzgyLCAwLCA2NDYzNCwgMTI4Mjc5LCAwLCAxMTYxMiwgMCwgNjc2MDAsIDIzNzQsIDk0MDY2LCAKKyAgICA4NDc1LCAxMTYwOSwgNjYzMTMsIDAsIDAsIDUyODYsIDExOTI5NywgMCwgMCwgNjQ5MjUsIDEyMDI4MywgMTk0NTg0LCAKKyAgICAxMTg5ODIsIDE5NDU4MywgNzcwNSwgMTE5NDIsIDExMzA1LCAxOTQ1ODEsIDMzMDksIDAsIDAsIDAsIDAsIDY4MDIsIDAsIAorICAgIDQxNjUzLCAxMjgwLCAxMjQxLCA3MTY4LCAxMjA5NiwgMCwgNjY2MTUsIDQyNTY1LCA0MTY1MSwgMCwgMCwgMCwgNDE2NTAsIAorICAgIDY2NTA3LCA2NjQ3MCwgMCwgMTI5MTQsIDQxNDkxLCA2NjAxMCwgMTE5NTUyLCA2MDc4LCA5OTU0LCAwLCAxNDc1LCAKKyAgICAxMTkyNDcsIDk5MzgsIDYwODQsIDkxNzU0NiwgNDEwNjQsIDQxMDYyLCAwLCAwLCAzMjU2LCAxMDE4OSwgNDIwNzYsIAorICAgIDQzMjUyLCA3ODgyMywgOTE3OTA2LCA4NzI3LCAwLCA2NTg3NSwgMCwgMCwgMTI3NzYyLCAxMDU2MiwgNzQyMTUsIDQzMDY1LCAKKyAgICAwLCAwLCAzMjQ4LCA3NDI5NywgMzI2MSwgOTAxNSwgNzEzNTEsIDAsIDM2MzUsIDY0MzM3LCA5ODMyODEsIDAsIDAsIDcxOTUsIAorICAgIDAsIDIwMDcsIDY0NDMxLCAwLCAwLCAwLCAwLCA2MzUsIDAsIDAsIDY1NjEzLCA3NzkwOSwgOTI0MjAsIDczOTk3LCAwLCAwLCAKKyAgICAxMTkyMTgsIDc5ODQsIDg2MDAsIDc0NDM0LCAxMjc3NzAsIDQxNzYsIDcwMDUwLCAyMDM0LCA5MjU1MSwgMTIwODA1LCAKKyAgICA2NTg5MSwgMTI3MDM4LCAwLCAzMTgsIDIwMzgsIDEyODg2MCwgNzg1OTYsIDAsIDM2NDksIDEzMTQ5LCA0MjE0NSwgNDI3OTgsIAorICAgIDM2MzQsIDEyMDI5MSwgMTE4OTI3LCA2NzY3NywgMTIwMTI0LCA3ODY2LCAwLCAxMTQwMiwgNDIxNDYsIDk0MDMyLCA3NDIzOCwgCisgICAgNDI2NjQsIDI4NDksIDEyNzAzNCwgMCwgNzkzOCwgMTI5NjAsIDE3NjEsIDExODEyLCA2NTM3OSwgNjgzODYsIDEyODE4NSwgCisgICAgMTE1OSwgMCwgNjk3MjksIDAsIDAsIDcxNzgsIDE5NDYzMiwgMCwgNDE2ODAsIDAsIDEyODIwMywgMTE1MzQsIDE1MTQsIAorICAgIDExNjY4LCA2Nzg5MSwgOTMxMywgNzAxNSwgMCwgNjc4NzcsIDE5NDU2NywgMTI5ODksIDY2NDc0LCA5MzY4LCAxMjg0OCwgCisgICAgMTYyNCwgNDMyNzAsIDAsIDc0Mjc4LCAxMDgxOCwgMTI2NjQ0LCA5OTUzLCAwLCA3ODQyMSwgMTE5NCwgMzI0MiwgOTc2MSwgCisgICAgOTU1NSwgODU5OCwgMTIwMjk5LCA2MTY5LCAxMjg3MSwgMTU1MSwgMjc5OCwgNjUxNzYsIDQ5NTgsIDQyNzUyLCAxMTkwMjUsIAorICAgIDAsIDY3ODc1LCAxMjAzMDEsIDM0OTUsIDY2NjQ4LCAxOTQ3NjgsIDAsIDY4MzY0LCA5ODMyMjQsIDQ4OTEsIDAsIDEwNjQxLCAKKyAgICAwLCA3Mzc0NiwgMCwgNjgzNTIsIDAsIDczNzg3LCAxOTQ4MjksIDE5NDYzMywgNzE5OSwgNjQ5NTUsIDAsIDAsIDAsIDAsIDAsIAorICAgIDQyNjg1LCA0MjY3OSwgMTkzLCAwLCAwLCAwLCA0MjY2NywgMCwgNTI3MSwgOTIzMTgsIDkyNTE3LCAxMTg4ODIsIDEzNjIsIAorICAgIDEzMjk3LCAwLCAxMjgwOTQsIDAsIDk4MzMzMSwgNzM3ODksIDAsIDY2NTgsIDQ0MjYsIDAsIDkyNjI4LCA5ODM4NDIsIAorICAgIDkyMzE5LCA3Mjc2LCA0MjE2MywgNTIyMCwgMCwgMCwgOTgzMzMwLCAyNDE2LCAzMzEwLCA0MjcwMywgMCwgMzc5LCAwLCAKKyAgICA0Mzc1NSwgMCwgMCwgMzIyMywgNjU0OTIsIDEyODQsIDE5NDc3MSwgNDU0OSwgMCwgMCwgOTgzMTU0LCAxMjc3NjMsIAorICAgIDEwODA3LCA5NTU4LCAxOTQ2MTMsIDAsIDg1MTUsIDg2ODgsIDEyODY2LCA2NTMwOCwgMzI5NCwgOTgzMzMyLCA4NTI5LCAKKyAgICAxMjgxMDEsIDQzMzg1LCA3NTY0LCAwLCA0MzMyOSwgMCwgOTI0NTgsIDczNzU3LCA2NjQ1NiwgNDIzNTksIDAsIDIwMzEsIDAsIAorICAgIDcyMDIsIDAsIDEyNjc2LCA0MjcyOSwgOTIxOTgsIDMyMTUsIDAsIDc3MTAsIDE2MTAsIDczODAxLCAwLCAwLCA2NTY4MiwgMCwgCisgICAgMTIwNTM3LCA2NTkyNCwgOTk3NCwgMjI4LCA2NjM1NCwgMTUwMSwgMCwgNjQzOTUsIDUxNzksIDcyMDAsIDYyMjUsIDAsIAorICAgIDY1Nzk0LCAxNzI1LCA2NTUzMywgODE5NiwgNzQ3NiwgNzQzOTksIDAsIDAsIDcxNTIsIDg1MDIsIDU3NjIsIDE5NjcsIAorICAgIDc0ODMsIDAsIDAsIDgxMDQsIDAsIDc0NzQsIDc3OTc5LCAwLCAxMjY1MDcsIDEwNDE0LCAxMzAwMSwgODE0MSwgMCwgCisgICAgNDI1MzcsIDE1NTcsIDQzNTk0LCAxMjg2NDIsIDYzMzAsIDY4MDUsIDg2MzEsIDI1NDUsIDcwMDUyLCAxMjcxNjYsIDAsIAorICAgIDc0MTkwLCAwLCAwLCA5ODM3ODYsIDQyNzYyLCAwLCA0MjkxNCwgMTY1MCwgMjYyLCAxNjM3LCAwLCA3OTAxLCAzMjM4LCAKKyAgICAxMjgxNzMsIDQxODYxLCAwLCAxMjg1ODUsIDY1MTU4LCAxMDg2MCwgOTQwNTksIDQzNjU4LCA3NTI3LCAwLCA0MzMxOSwgCisgICAgNjQxOSwgMCwgNDUsIDAsIDY0NTg4LCA5Mzk4OSwgMCwgMTE5ODEwLCA3MTk0LCA1MjkxLCAwLCA0MzY2NiwgMTMxMjksIDAsIAorICAgIDkwODQsIDAsIDg3MzcsIDAsIDEyODgxLCAwLCAxMjkwNiwgOTYzOSwgNzkxMiwgMjYyMCwgMCwgMCwgMCwgOTgzODc1LCAKKyAgICAxNzksIDY1ODk2LCAwLCA2NDc1NiwgMjg1MywgNzg0NDMsIDExODgxMywgOTgzODkwLCAxMTg5OTYsIDExOTAwOSwgMjg1MCwgCisgICAgODA4NCwgOTgzMDg1LCA3Mzg1MCwgMjgwMSwgOTIyODQsIDQyMDY5LCAxMTk4MzksIDc0NzU0LCAxMTk4NDEsIDQyMDcyLCAKKyAgICAxMTk4NDMsIDExOTg0MiwgMTAzOTgsIDk4MzA1NiwgMCwgODM3NywgMTI3MTE2LCA4MjQ1LCA2ODQwMSwgMzE1OCwgOTIzOTYsIAorICAgIDM5ODMsIDQzNjU2LCA5MjMsIDExOTg1NywgMTE5ODU2LCAyOTIsIDEzMDAyLCAxMTk4NDUsIDExOTg0NCwgMzIyMSwgMTc2MywgCisgICAgOTI0NjMsIDQ2MTIsIDExOTg1MSwgMTE5ODUwLCA3MjUzLCAxMjcxMTAsIDY4MzkxLCAwLCAxMDc4MiwgMzYzNywgMTI5OTYsIAorICAgIDQzNTQyLCAwLCA2NDU3OCwgOTgzNjc1LCAzMjI4LCA2OTYzNiwgODc4MywgMCwgMTE5NjE0LCAyNzMxLCAwLCAwLCA3ODU4NSwgCisgICAgNDEwMiwgNzY5NiwgNzM4NzgsIDAsIDAsIDc4NTg2LCA0MzMxNiwgNDE3NywgMTEyODMsIDkwODksIDAsIDczOTk2LCAKKyAgICA5ODMxNzMsIDY0NTAwLCA0MzY3NCwgMCwgNjQ5NDcsIDE4NTYsIDAsIDAsIDYzNzksIDAsIDAsIDAsIDMyMDgsIDEyOTc1LCAKKyAgICA3NDc3NSwgMTI3MzgwLCA5ODM5MzEsIDkyMzg5LCA3NDA3MiwgNTUyNjksIDAsIDAsIDk4MzY4MywgMjAzMywgNzg1NzcsIAorICAgIDc4NTc2LCAxOTUwMjYsIDU1MjU0LCA3NzQwLCAwLCAwLCAwLCA3Mzk2NCwgMCwgOTM5ODgsIDY3NjEyLCA2NTY3NCwgCisgICAgMTI4MjQ0LCA5NDExMCwgNDE2ODksIDAsIDc0MDA2LCA2NDkwOSwgNjY0NiwgMTE3OTAsIDc0MDE5LCAwLCAxMjgwNjYsIAorICAgIDEyODAzMSwgODU2MSwgNDU3MywgMCwgNTMyNiwgMCwgMTIwNjA1LCA3MjMwLCA4MjU3LCAwLCA4Nzc4LCA0MTY4OCwgMCwgCisgICAgNjU3NzYsIDIwNzEsIDgzMTQsIDY0NTksIDAsIDc2MjgsIDY1MDkyLCA3MzkwMywgNjY3MjEsIDExMzQyLCAxMjg1NjEsIDAsIAorICAgIDAsIDEyODIyNiwgMTI3MDAxLCAwLCAxMTgxMCwgMTMxNjQsIDEwNzIzLCA5NjcsIDk4Mzk1MSwgMTI2NDY5LCAxMTk0NiwgMCwgCisgICAgMzI1NywgMCwgMTIzMDcsIDE4NDUsIDk4MzE1NywgNDM1MjYsIDAsIDAsIDE4ODYsIDQyMzQyLCAxMDA4OSwgODcwLCA3NjQ4LCAKKyAgICAzNDk5LCA4NjA5LCA3NjUyLCA4NzYsIDg3MSwgODc3LCAwLCA4NzgsIDQyMDE1LCA4NzksIDQzNjkyLCA0NTYzLCAwLCAwLCAKKyAgICA3NTkxLCA2NTg4NywgODY3LCA5NTIwLCA4NzIsIDEyNjYwNywgODY4LCA4NzMsIDc2NDIsIDAsIDg2OSwgODc0LCA3NjQ0LCAKKyAgICAxMjA2NzQsIDg3NSwgNzkwLCAxMjgzMDMsIDAsIDAsIDAsIDY2MTgyLCA5ODMyNTgsIDU0MjksIDE5NTA1NSwgNjYxODAsIAorICAgIDEyNjQ4MCwgNjYxODEsIDY4NDUyLCA5ODMyODksIDk4MzI0OCwgNDIwNjcsIDAsIDU0MzMsIDEwNjU3LCA3OTExLCAKKyAgICAxOTQ2MjIsIDE1NDcsIDY2MTc2LCA0MjAxMiwgMTIwNTc2LCA1NDI1LCA0OTc3LCA5OTk5LCA1MzE3LCA1NDIzLCA0NjExLCAKKyAgICAwLCA2NzYzNywgMCwgOTY3OSwgNzQxMjIsIDAsIDAsIDAsIDY2MTk0LCA0NDE4LCA2NjE4NCwgNDYyOCwgNDI0NSwgCisgICAgMTE5NjQ4LCAwLCAwLCAxODUxLCAwLCAxMjcxODksIDExOTA4LCAwLCA5MzYwLCAxMTg4OTcsIDk4MzIwMiwgNDI3NzYsIAorICAgIDY2MTg3LCAxMjgzNywgODgyOSwgNzcxMSwgOTI3MTQsIDAsIDkyMzIxLCA0MzMxOCwgMCwgODgwOSwgNjk4ODEsIDAsIAorICAgIDk4MzE0MiwgMTIwNjA0LCA5ODMwNTIsIDk4Mzg4MiwgMCwgOTgzMjcwLCAwLCAwLCA3NDI3LCA5OTU4LCA0NTg4LCA0MzY4MCwgCisgICAgMCwgNzQ0ODQsIDE5NDk2OCwgMjQzMywgMCwgMTE5NjIyLCAzMzUyLCA3NDM2MywgOTgzODg1LCAwLCA3OTMsIDc0NDA0LCAwLCAKKyAgICAzMDUsIDU2NywgNjc2NjIsIDg0MiwgMTI4NTE5LCA4MjA4LCAwLCA0MTY5NSwgMTY0NywgMTE4ODc3LCAwLCA3ODM3LCAKKyAgICA5MTc2MjUsIDgxOCwgNTMzNywgMTk0NjI4LCA5MTc2MjEsIDQxMzc2LCAxMTk5NzgsIDEyNjU3NiwgMTIwNTk0LCA3NDA4NiwgCisgICAgOTE3NjE1LCA5MTc2MTQsIDkxNzYxMywgMTA5NzMsIDY2MzU5LCAxMzcyLCAxMjcxNzIsIDkxNzYwOCwgNDk2OSwgMTI1NCwgCisgICAgOTE3NjA1LCA5MTc2MDQsIDkzOTY3LCA5MTc2MDIsIDY1MjI4LCA3ODIyMSwgMTI2NjEyLCAwLCAyODQwLCAwLCAxMTk5ODIsIAorICAgIDk4MzkzOSwgMCwgMzI0NSwgOTA2OCwgNjgxOTQsIDY0NzI1LCAwLCAwLCAxMjk5MSwgMCwgMjY1MSwgNjgwMTYsIDk4MzI2NSwgCisgICAgOTE3NjExLCAxMjcwMjYsIDEyODg4MywgMCwgMCwgNDM2NDgsIDEyMDgxMiwgMCwgNDMzMjIsIDkyNjYyLCAwLCAwLCAKKyAgICA2NDM3MiwgOTI2OTgsIDMyMjYsIDY1NSwgNzUyLCA3NDU3LCA3NDU2LCA3NDUyLCAzMjg1LCAxMjg3NzksIDEyNzgyMSwgCisgICAgMTE5OTg4LCA2NTYxMCwgMjM5MSwgMCwgOTIyNDgsIDY3MSwgMjUwLCA3NDM0LCA2MTgsIDY2OCwgNjEwLCA0MjgwMCwgCisgICAgNzQzMSwgMTE1MiwgNDI4MDEsIDY0MCwgMTIwNjY2LCA3NDQ4LCA3NDM5LCA2MjgsIDM5MDUsIDczODEwLCAwLCAxMjgyNjYsIAorICAgIDY0NzQ5LCA2Nzg1MCwgMjEwNywgMCwgMCwgNDYwNSwgMTI4MTc0LCA5ODMxOTIsIDQzMzcyLCA2NTk0NSwgMTI4ODM4LCAwLCAKKyAgICAxMTk1OTAsIDAsIDAsIDAsIDk4NywgNjkyNywgMTE1NzIsIDQyMjYxLCAxMTQ2NCwgMzM2NSwgOTk3MSwgMCwgMCwgCisgICAgMTI4Mjk3LCAwLCAwLCAwLCAwLCAxMTMzNCwgNDMzMjYsIDEyNjA5LCAxMTUxOSwgMTE1MDMsIDU1MzAsIDUyMTAsIDAsIAorICAgIDQ2MjcsIDk4Mzg5MiwgNTIwOCwgMCwgMTI4ODQyLCAxMDMzMiwgNTIxOCwgNzk3NiwgOTE1NiwgMCwgMzI0NCwgNTUyOSwgCisgICAgNjk2NDcsIDczODk0LCAxMjg4NTIsIDU0MzIsIDY0OTY1LCA1NTI3LCA3NDAzMywgMTA1MTYsIDc3OTAsIDU1MjgsIDAsIAorICAgIDQyMTQwLCAxMjAyODEsIDAsIDAsIDQzNTQ1LCA5ODg3LCAwLCA0MDAwLCA3NDI5LCA3NDI4LCA2NjUsIDc0MjQsIDMyMDYsIAorICAgIDEyMDI3OCwgNzg4NCwgMCwgMTI4NTY2LCA5MTc5ODksIDEyODY2NiwgMjExLCAyNTA5LCAxMjg4NTgsIDEyMDU3MywgCisgICAgNjg2NzIsIDMyMjAsIDQyMjM1LCAwLCAxMDY5MCwgODk1MSwgNTIxNCwgNDI0NzQsIDgxMTgsIDAsIDcwNDgsIDQ1OTAsIAorICAgIDEyNzI1OCwgNTg1MiwgMCwgMCwgMTI3MjU5LCAxNzA4LCAwLCA5ODMxNjUsIDI2MjMsIDExOTQzLCAwLCA2OTIyNiwgMCwgCisgICAgNDY5OCwgNjY1MDksIDEwNjYsIDExOTkyMSwgNDcwMSwgOTgzODc2LCAxMjAyODUsIDc0MjI1LCA5NDExMSwgODI2NywgMCwgCisgICAgMTI3MjY1LCAwLCA3NTE2LCAwLCAyNjI1LCA5ODM5NzcsIDgwMzQsIDc0MzA5LCAwLCAzNjMxLCAxMDk1NSwgNzg1MCwgCisgICAgMTIwMjkzLCA4NDE2LCAwLCAwLCAwLCA0MzM4NCwgMTI2NjAsIDAsIDAsIDAsIDc0ODUwLCA0MTA2OSwgMCwgMTI4MTU2LCAKKyAgICAxMjA5OSwgNDMxMCwgMTAwMzIsIDYyNTIsIDcxMywgNzk5MCwgMCwgMzk5MCwgMCwgOTgzMjYyLCA2NjM2OCwgNTAxNywgCisgICAgNjQ5NTYsIDcwNzEsIDAsIDExOTE0NCwgMTAzMCwgMTE4ODAwLCA5ODMxMjAsIDk1MTMsIDQxMDU5LCA5MzU3LCAwLCAxNzczLCAKKyAgICAwLCAxMjAzNTAsIDAsIDYzMzksIDc3NDUsIDk4NDQsIDAsIDY0NjUwLCA5NCwgMTg4MCwgNzQ3NjYsIDk4MzgzOCwgODkwOCwgCisgICAgMCwgMTI4NzA3LCA2NTkxMywgNzg0NzAsIDEwNzUyLCAxMzAwMywgMCwgMTI2NTcyLCA0MTMwNywgODczMiwgMTIwMzM4LCAwLCAKKyAgICAxNzU3LCA2OTY0LCA0Njk2LCAwLCAxMjAzMzUsIDY0Nzg1LCA3Mzk0LCAzNjQxLCA1NDE5LCAxMjgwNTUsIDAsIDEyNzg4MywgCisgICAgMCwgMTIwMzQ0LCA0Mzk4OCwgMCwgODYxMCwgNDMwNjIsIDc1OTIsIDg1NiwgNzQyOTksIDkzNiwgMTMyODksIDY5ODk0LCAKKyAgICA0MzE3MSwgMTQ1OSwgMCwgNjUyNDMsIDc4NjM4LCAxOTk1MywgMCwgMTUwNCwgNzAwNjQsIDAsIDEyOTEzLCA3NDIwNiwgCisgICAgNzUyOSwgMCwgMTI4Njk5LCA5ODM5NTcsIDEyMDc4MiwgNDExMywgMCwgMjM3MiwgMzM2LCAwLCA3NTA5LCAxMjE1MiwgMCwgCisgICAgNjgyLCA2NjQ1OCwgNDE1MDUsIDAsIDY0NzQzLCAxMDU5MywgMTcwMywgMCwgOTgzOTU1LCA4MDMzLCA2OTk1MywgMCwgCisgICAgOTgxMCwgMTI3MjY5LCAwLCAxMjk3MCwgMCwgNDIzNTEsIDEwMTA5LCA5MTc2MjMsIDAsIDE5NDY5MywgMCwgOTI2OTAsIDAsIAorICAgIDAsIDc0MjkxLCAxOTY1LCA3MDY5LCA0MzMxMiwgMCwgNzM4ODcsIDAsIDIwODcsIDY0MzcwLCA2MzE0LCA0MTcxNCwgODUwMSwgCisgICAgMCwgMCwgNzQyMzksIDQxMzE3LCA5MjYxNCwgMjA5MSwgNzQ1NDUsIDIwOTAsIDAsIDkzNTMsIDcxMTcsIDIwNzcsIDc3ODg2LCAKKyAgICAwLCAxMDQ5OCwgMjA4MywgNzc4ODgsIDAsIDAsIDExOTIzNiwgNjM0LCAwLCAwLCAwLCA2OTc3OSwgNDE2NSwgODc0NiwgMCwgCisgICAgOTY1NCwgMTI4NTYsIDY5MjQsIDAsIDcwNjYsIDk4MzcxOSwgMCwgMTI4MTM1LCA0MTAzNywgNDI2OTIsIDc3ODYsIDEyOTU5LCAKKyAgICA0MTAzOSwgMTI3NDgzLCAwLCA2ODAsIDIzMDIsIDEyODIwMCwgMTE4MSwgNzA1NiwgMzE3NCwgMTI2NTE2LCAwLCA5MjY2OCwgCisgICAgNjU2NjUsIDEyNzM3NSwgMTI2NTA2LCA2OTIwLCAwLCA5MjI5NSwgMCwgMTE4OTY1LCAwLCA2NDY0NCwgMTI2OTgxLCAKKyAgICA3NDExOSwgMCwgNDEwMjgsIDAsIDYyMzEsIDI2MTMsIDY1MzAyLCA0MDk4OSwgMCwgMTk0Njk2LCAwLCA0Mjc2MCwgMCwgCisgICAgOTgzNTY2LCAwLCA0MDk4NywgNDY2NywgMCwgOTgzOTMyLCA4ODI4LCAwLCAwLCAxMjQ2LCA0NzQ2LCAwLCAwLCAxMTAyMSwgCisgICAgNDc0OSwgOTI2NzUsIDAsIDkyMSwgNDc0NCwgMCwgMTI3MDIsIDI0MiwgMCwgMTU2NiwgODIxNywgMCwgNjQ2NTMsIDc4Mzg2LCAKKyAgICAxMjgxMjEsIDc0MDM2LCA3NDUwNSwgNDMyNzQsIDUzMTMsIDk1MSwgMCwgMCwgOTgzODY3LCA3NjA0LCA5ODMyOTAsIDQwMDksIAorICAgIDEyNzgxNiwgOTgzNzEwLCAxMjA1NjIsIDAsIDk4MzcyMCwgNjQ4NjAsIDExOTEzOCwgMTE5MDY5LCAwLCAxMjczNzAsIAorICAgIDQwNDgsIDk4MzU5OCwgMCwgNzAwMjQsIDE2NDYsIDc3ODkwLCA2NDUzNCwgNzM5OTUsIDEyMDcwNSwgMCwgMTE5ODkwLCAKKyAgICAyNTc5LCAxMTk5MDUsIDMxNzcsIDExMzU3LCA5MDk5LCA0MTA3LCAzNDQxLCAxMTk4OTQsIDI5NzUsIDc0NDQyLCA5ODIyLCAKKyAgICA5ODM5MzUsIDU1MjIwLCAxMDA4NCwgNzM5NDMsIDExODg0MCwgMCwgOTE3NTYyLCAxOTQ2MTAsIDMzOTksIDk4NTEsIAorICAgIDk4MzcxNywgMTE5MDksIDkwNTksIDAsIDc2ODcsIDAsIDY3ODksIDAsIDAsIDAsIDcxMzY3LCAwLCAwLCAxNzc3LCA5MTUxLCAKKyAgICAxMTM3LCA2OTc2NywgNzQ5LCA0MjM2NiwgMCwgNTM4NSwgMTI4NTc0LCAxMjgyMTgsIDAsIDAsIDU5ODksIDAsIDAsIAorICAgIDEyODA5MSwgMCwgNDE2ODUsIDY5MjIzLCAwLCA5NzY5LCA0MTY4NCwgOTgzMjE2LCA1MTksIDAsIDExNzQwLCA1NzY2LCAwLCAKKyAgICAwLCAyNjAwLCA4ODQ4LCAxMjAxMzgsIDQxMjk3LCAwLCAzNjY2LCA3NDQ3MywgNDEzMDAsIDc0NDY4LCA2NTE2MCwgMCwgCisgICAgNjk2ODgsIDY5NzcxLCA3NDQ3OSwgMCwgNjU1OCwgMCwgMCwgNjk3NjUsIDEyMDc1MCwgMjUyLCAwLCA0MTMwMiwgMCwgMCwgCisgICAgMCwgNjk3NjMsIDAsIDExNzI5LCA4NzE5LCA5MDYwLCAwLCAxMjAxMzksIDEwNzYxLCAwLCAwLCAwLCAxMTg3OTIsIDExNzM0LCAKKyAgICA5ODMyMjMsIDExNzMwLCAwLCA5NTkzLCA1NzU3LCAyNDAzLCA2NDgwOCwgNTUyNzUsIDAsIDExNzI4LCA0MzU3MiwgMCwgMCwgCisgICAgNzc2NCwgOTgzNzE0LCAxMTA5NCwgMTIwODI1LCAwLCA5ODMyMjYsIDQyODIsIDgyOTgsIDAsIDAsIDAsIDAsIDAsIDY0NDQ5LCAKKyAgICAwLCAxMjY2NTAsIDYzODU0LCA4NDU2LCAwLCA3NDc4MywgNjU2NzAsIDAsIDc4MjUwLCAwLCA3Nzc0LCAxMDYwNywgOTc5MiwgCisgICAgMCwgMCwgMCwgMCwgMTIwNzY0LCAwLCAxMDAxOSwgNzQ3NjIsIDAsIDM0NTgsIDQzNjUsIDcwMDUzLCA5ODM3MTIsIDM2NDcsIAorICAgIDAsIDI2MDIsIDEyODM0MSwgMCwgMTk0NzA3LCA0MTEzNSwgMCwgMCwgMCwgNjQ2MzEsIDE3MiwgNDk3MSwgNDEyMTksIAorICAgIDQxMTM3LCAxODg5LCA3MjM4LCA2NTQ1LCAxMjY0NzYsIDkyMTkzLCA3NTk3LCAxMDUyOCwgMCwgMCwgMzczMiwgNzM5MTAsIAorICAgIDE5NDU4OCwgNTM0NCwgMCwgNDMzNjYsIDQzMzYzLCA5MDYyLCAxMTkyNTIsIDAsIDAsIDAsIDY0NDc5LCA5MjMyLCA5MjU5NiwgCisgICAgMCwgMCwgMTk0NzEyLCAxMDkwMCwgNDE1MzEsIDEyNjMsIDM3MjAsIDEyMDQ4LCAwLCA2NDI5MiwgNDE1MjQsIDcyMjcsIAorICAgIDExOTYzNSwgNjA5OSwgNDE1MzQsIDAsIDEyNzM1NCwgMTI3MzQ1LCAyOTksIDkxNzk1NywgODUyNSwgMTI3MzQ3LCAzNTI0LCAKKyAgICA5MTc1NjUsIDg4MzEsIDEyNzM0OSwgOTI1NjQsIDMwNzUsIDY3ODY3LCAxMjczNTIsIDAsIDY2MzYyLCAwLCA2NDM1MywgMCwgCisgICAgMCwgNTg0NSwgMCwgMCwgMCwgMjU4MSwgODIwMCwgNjUxMTQsIDY4NDYwLCAwLCA0MzI4MywgNTU1MSwgMCwgMTIwNzM1LCAKKyAgICA5ODMyMDEsIDYzNDAsIDExODg1NSwgMCwgNzgxMzQsIDg2ODAsIDcyMDQsIDcwMDY1LCAyNTg4LCAyOTE0LCA3MDExLCAKKyAgICA1NTI4MSwgMCwgMjQ3MSwgMTk0NjMxLCAyODgzLCAyNzQ5LCAxMTk1NjMsIDczNzc0LCAxMDkxMywgMCwgMCwgODY2NiwgCisgICAgNjc1LCA0MjQ5MywgMCwgNDM1NzEsIDAsIDYyMTksIDAsIDk5ODAsIDQxMjMyLCAxMDkyOCwgMCwgNDExNTMsIDQxMjI5LCAKKyAgICAxMTg5NjcsIDAsIDM3MzgsIDk0MDE2LCAwLCAxMjcxMSwgMzE4MSwgNjYyMTIsIDc0Mjg5LCA2ODQ3MiwgNDI4NTcsIDgyNjIsIAorICAgIDk4MzM3OSwgMCwgOTgzMjIyLCAwLCA0MjM0NywgMTIwOTIsIDk2MTUsIDcyMzQsIDc0MDQ3LCA5ODMwODgsIDAsIDQzNzQ0LCAKKyAgICAwLCAwLCA3Mzg0NiwgMjkzNCwgMTI3MjIsIDEyMDc2MiwgOTIyLCA0Mzk4MywgNzQ1MDcsIDk4MzEyNiwgNzQ0NjEsIDMyMTgsIAorICAgIDEyMDQ3MSwgNzQyOTAsIDEyMDQ2OSwgNjQ1NjIsIDEyMDQ3NSwgODU2OSwgMTE0MDQsIDExOTMyLCA3MzcyOCwgMzIxNCwgCisgICAgMTIwNDYxLCAxMjA0NjgsIDEyMTI4LCAzMjA3LCA2NTQ4NiwgNzg3MjksIDE5MDEsIDc4NzI3LCAxMjczMjYsIDEyMDQ2MCwgCisgICAgNzQyNSwgMzIwNSwgNjgwMDMsIDc4NzM3LCA3ODczNiwgNzg3MzUsIDQzMzgzLCA2OTk0MCwgNjU0NTksIDI2MDYsIDc4NzMwLCAKKyAgICA3Mzg5NywgMCwgMTE0OTYsIDExNzMsIDAsIDQxMjcyLCAxMTk2NjEsIDAsIDAsIDk4MzMyMSwgMTIwNzM3LCAwLCA5ODM5NzEsIAorICAgIDk4MzMyMCwgMzc4LCAyNjEwLCAwLCA2NTA3OSwgOTgzMzI1LCA2NTY5NSwgMTI2NTU5LCAzNywgNzA2OCwgMCwgMTIwNDgwLCAKKyAgICAxMjA0NzksIDMyMDksIDEyMDQ3NywgMCwgMTA2MzgsIDk3NjgsIDY5OTUyLCAxMTk5MDksIDk4MzM5OSwgMCwgMCwgMCwgMCwgCisgICAgNjU1MTAsIDAsIDAsIDUyMzMsIDk4MzMzNSwgNjQ3OTIsIDk4MzMzNCwgMCwgMTI2NjMzLCAwLCA3MDYwLCA5ODQ3LCAKKyAgICAxMjAxNDQsIDE2ODUsIDU5NSwgMCwgNzM5NzEsIDEyOTIsIDg5NDAsIDczODAsIDExMDg4LCAwLCAxMDAwNCwgMTI2OTk3LCAKKyAgICAwLCA2NTQxLCAwLCAwLCAwLCAzMjQzLCA5MDE0LCA1NjA2LCAwLCA1MzgsIDY0NjIwLCA1NjAyLCA4NDY3LCA3NDM5MSwgCisgICAgNjU0NywgMTI4MTMyLCA4MjAzLCA3ODQ4OCwgOTgzMDkwLCA4NDU4LCA2NTIxMSwgODQ5NSwgMTE5OTA0LCAwLCA5MTc1NTIsIAorICAgIDc3OSwgNzgzMTQsIDY0MzY3LCAyNDY1LCA2OTkwMSwgODE5MywgNTUyNzksIDk3MzAsIDkyODAsIDAsIDcwNjUsIDc0MTU1LCAKKyAgICA0MzQ2LCAwLCA3Mzc5OCwgNTA0LCAwLCA5MjQxNCwgODk4MiwgMCwgMCwgMCwgNzgyLCAwLCAxMDg4MywgMCwgMTk0ODUyLCAKKyAgICA3MzIsIDM3MzcsIDEyNzI1MywgMTU0OCwgNjg2NTAsIDkyNTA3LCAxODMyLCA1NjA0LCA1NzM1LCA0MTE0MSwgMTE5MDIwLCAKKyAgICA0Mzc2LCAwLCAxMTc4NywgMzc0NSwgMCwgMCwgNDI4ODgsIDY1NzEyLCA5ODMzMDQsIDM4NjksIDExOTM3LCA1NzI1LCAKKyAgICAxMjc1MzksIDE3ODMsIDY4NjQ4LCA1NzI4LCAwLCAwLCAwLCAxMTkxOCwgNjY1NjcsIDU3MjQsIDAsIDU3MjcsIDc4NTIxLCAKKyAgICAwLCAwLCA3NjQsIDAsIDEyODExNiwgNDM1MzEsIDAsIDkwMzMsIDAsIDQyNTMyLCA2MjIzLCAxMTA0MiwgMTIwNzQ5LCAKKyAgICAxMTQyMywgMCwgMTE5ODYxLCA3MTM0NCwgNDM0NjUsIDAsIDEyODI2NywgNjU1OSwgNjQ1NTcsIDcxMzQ4LCA5MjY0OSwgCisgICAgMTIwNjQ4LCA0MzAxOSwgNDM0NzcsIDEwMjM4LCA3NDQ5MSwgMCwgNDMzNzcsIDkyMjgyLCA3MTM0NiwgMTQ3OCwgOTc4MywgCisgICAgMTE4MjUsIDI2MDcsIDY0NzQwLCAwLCA3NzM5LCA3NDU0MywgMCwgMCwgMCwgNjEzMiwgMCwgNjM3NjUsIDAsIDcwMDU4LCAKKyAgICA0MTE0NCwgMCwgOTI0MzgsIDQzNTM3LCA2NzYxLCAxMDA5MywgNDM2OSwgOTE3NzkxLCAwLCA5ODMxNDgsIDg4MjAsIDM5NDcsIAorICAgIDAsIDAsIDExNTE1LCA1MjYsIDEyODEwMywgNDEyOTUsIDE5NDYwMywgOTE3Nzg1LCAxOTQ5MzIsIDAsIDc2ODgsIDkxNzc4NiwgCisgICAgNzY4NiwgODI4OCwgMTE4MTUsIDAsIDAsIDk4MzM4MiwgMTU0MywgMzcxMywgNDEyMjEsIDEyNDIzLCA0MjI4MSwgOTE3Nzg4LCAKKyAgICA3NDAyNCwgMTIyOTMsIDAsIDY0MzU3LCAxMTc5NCwgNDIwODIsIDAsIDE3MzcsIDg5ODcsIDQyMDgxLCAwLCA3MjA1LCAwLCAKKyAgICA5MzM1LCAxMjg1MCwgMTE5ODcwLCA2NTUzLCA3MDU1LCAwLCA4Mjc3LCAwLCAwLCA1NDc1LCA3NDc5NSwgNjc4MCwgMCwgMCwgCisgICAgMTI5OTAsIDExNjAsIDQyMDg0LCAxMTk2NTAsIDQxMjE3LCAxMTk2NjAsIDEwMDE4LCAzNjAsIDAsIDAsIDY4MTc2LCA1ODYzLCAKKyAgICAzMTM3LCAwLCA0MTQ3LCA5ODMxNzAsIDQxMjE2LCA3ODQ0LCAyNjE2LCAxMTkxOTAsIDY4NDYxLCA2NTIzNCwgOTgzMjk0LCAKKyAgICAxMzA3NiwgMzEzNSwgOTgzMjg3LCA3ODE0MywgMTE5MTM5LCAzMTQyLCA5MjQ1MSwgOTQwNjgsIDEwODE5LCAxMTk1ODAsIAorICAgIDEwMTgzLCAwLCAyNjA4LCAxNDcwLCA3Mzk2NywgOTQwMDgsIDYyMjcsIDAsIDEyNzE3MywgNjk3NDEsIDk4MzU4MiwgNjE2MywgCisgICAgOTgzNTU4LCAwLCAxMjczMTQsIDAsIDAsIDg2MDMsIDAsIDExOTg2NiwgMzMwNiwgMTA4NzYsIDQzMzkyLCAxMTk1NzMsIAorICAgIDEyNzkzMSwgNTc1MSwgMCwgNjIyMiwgMCwgMCwgMTIwODYsIDc0MDMsIDE2MDAsIDY0MzA5LCA2NDkzOSwgMCwgNjQ3ODMsIAorICAgIDkyNjU4LCAxMTMxMCwgMCwgODg4MiwgMCwgMCwgMjU3MCwgNzAyMSwgMCwgMCwgNDMxMTAsIDAsIDEyMzQsIDY1NDAsIAorICAgIDY5NzQsIDAsIDAsIDk4MzIxMSwgNTAwMiwgMCwgNDEyODYsIDY5OTQ2LCAxMjcwMTksIDAsIDQzNTg1LCAwLCA2NTUxLCAKKyAgICA5ODM5NjIsIDEyODIyOSwgMCwgNDEyODksIDAsIDE5NDYwMiwgMCwgODk3NywgNjAyLCAxMjA4MTQsIDAsIDEyODc3OCwgCisgICAgMTI4NjYxLCAwLCA5ODMzNzUsIDQxMjc5LCAwLCAwLCAwLCAxMTA4MSwgNDM2MTUsIDAsIDAsIDAsIDk4MzYxMiwgMTI3MjcsIAorICAgIDAsIDAsIDc4Mzk3LCA5NDc1LCA3MTEyLCA2NTEwNSwgMCwgOTYzMywgMTA4ODYsIDQzNTkyLCA3ODMxLCA5ODM4MjksIAorICAgIDE5NDU3MSwgMCwgNzM5MTUsIDgwNzYsIDQzMDQ4LCA4MjkwLCA4MjkxLCA0MzA1MSwgOTI1NzAsIDAsIDI1OTYsIDQzNTg0LCAKKyAgICAwLCAxMzExMywgMCwgMTI3NzU3LCAyMzkzLCA3MDU4LCA5MDg3LCA3NDA2NywgNjg2NzMsIDQxNTc0LCA3ODMzNywgMCwgCisgICAgNzQwNTgsIDYzNzYsIDAsIDAsIDAsIDAsIDk4NTQsIDEyNzc0OCwgNjQ2OTYsIDAsIDEyODIyMCwgMCwgNjk5NCwgMCwgCisgICAgMTcyMCwgMCwgMCwgMCwgNjUyOSwgNzA2MywgOTgzMTgyLCAzNzUxLCA5MTIwLCA5ODM0ODUsIDAsIDE3OTgsIDcwOSwgMCwgCisgICAgMTM1NCwgMTg3NiwgMTMxNTIsIDY1NTcsIDEyNDMwLCA4MTM3LCA5NDA5OCwgOTI2NDIsIDAsIDAsIDI0NSwgMTI4MDk3LCAKKyAgICAxMTQ1NiwgNDEyMzMsIDcwNzAsIDAsIDk0MDQ2LCA2MTM2LCA5MTc2MDksIDY1Njc3LCA4NjgyLCA0MTIzNSwgOTI1OTUsIAorICAgIDQyMDQ1LCA5ODA0LCAxMTg5NjMsIDQzMiwgMzU5NSwgMTk0OTQ1LCA2NTQzNywgMCwgNzQ0NTUsIDQyMzk5LCAwLCAwLCAKKyAgICAxMjgyNzQsIDAsIDExOTY1OCwgMCwgMCwgMCwgNzc4OTQsIDg3OTcsIDAsIDkwNTIsIDY0ODg4LCA3MTY3LCAyMzU2LCA5NSwgCisgICAgNzQ3ODQsIDEwNTgwLCAwLCA0MjI4NiwgMCwgNjQ2NDAsIDAsIDk0MTA5LCAwLCA3NDEzNywgNzAwMzUsIDEwMDYzLCAKKyAgICAxMjY1MiwgMTIxOTksIDkyNDgwLCAwLCAyNTY2LCAxMTk3MSwgOTgzNzM3LCAwLCAxMDY1LCAwLCAwLCA0MzQwMCwgMjU3NiwgCisgICAgNjY2OTYsIDkzOTk5LCAwLCA0MzYwNCwgMCwgMCwgNzQwODIsIDUxNCwgNzQ1MDIsIDcwMDMyLCAyOTIxLCA0MzIxNSwgCisgICAgNjQ0OTMsIDU3NzIsIDEyOTY4LCA3MDA1NSwgMTk0OTQ0LCA3NDU4MCwgNDMzOTgsIDI1ODAsIDk4MzgxMCwgNDEzNDEsIAorICAgIDQxMjIzLCA2NTY0LCAxNDYzLCA0MTM0MiwgMCwgNTI5MywgNzAwMjAsIDAsIDM3MzMsIDExMzQ2LCAwLCAxMjA1NCwgMCwgCisgICAgNzQwOTgsIDQyODI3LCAwLCAxMzA5MSwgMCwgMCwgMCwgOTE3OTE1LCAwLCAxMjcwMjUsIDAsIDc0ODIxLCAwLCA5ODM3MzMsIAorICAgIDExOTA0MiwgMCwgMTI3ODY1LCAxMzA5MCwgNjY2NDMsIDAsIDEyNzAsIDExMzIsIDQyMzYwLCAwLCA3NDA5NiwgNjY2NTUsIAorICAgIDQyNTY5LCAxMjc4MjQsIDAsIDY0NzYxLCAwLCA0MTAyMSwgODUxMCwgNDI0MzIsIDAsIDAsIDE5NDc4MiwgMCwgNjQ0OTYsIAorICAgIDc0MTA5LCA3MDAzMCwgOTkxNSwgMCwgOTgzMjE4LCA3MDYxLCA0MTMzNiwgMzg1NCwgNjk3MDAsIDEzMTQxLCA2ODQxMywgCisgICAgNDM0MDEsIDQyMzE5LCAxMzA4MiwgMCwgNzA2NywgNjgyMjEsIDAsIDEyNzM4MywgMTI3MTcxLCAwLCAwLCAxMjc3OTcsIAorICAgIDkwMjksIDQzNTQzLCAxMTkzMTUsIDIzNTMsIDYzMDgsIDAsIDc0NzkyLCAyNjExLCAxMTkxODYsIDAsIDAsIDAsIDQzNjY0LCAKKyAgICA5MjM5OSwgNjY2MjcsIDAsIDQ0ODQsIDg1MDksIDExODk3NiwgMTEwNjYsIDY1MjMzLCAwLCA0MTIyNCwgNDEwMTcsIDAsIAorICAgIDM3NDcsIDEwNTIyLCAwLCAwLCAxNjkxLCA0MTIyNiwgMCwgMTIxMDcsIDcxMDAsIDEwOTA1LCA2NTAxMCwgMTk0OTg2LCAKKyAgICA2OTcsIDY2MDE4LCA5Mjg0LCA0MjQ0LCAwLCAwLCA5MjY0NCwgMTMxMjEsIDEyMDAzNiwgMCwgMTIwMTAsIDEyODU3MywgCisgICAgMTI4MjIxLCAwLCAwLCAwLCAxMjcxOTMsIDY1ODE2LCA2ODExMSwgMCwgMTI3OTMzLCA2NTY2OCwgOTIyNTcsIDY2MTgsIAorICAgIDExODc4NCwgNjYzNjUsIDAsIDQyMjM0LCAxMjY0OCwgNzgxMTAsIDcxMjMsIDcwMDM4LCA1Nzg1LCA5MTk4LCA5NzY0LCAKKyAgICA0MTMxNiwgNjU4NzcsIDczODMsIDEzMjMwLCA0MTI5OSwgMCwgMCwgNjgzNjUsIDEyODI1OCwgMCwgMCwgMCwgMTMxMjIsIDAsIAorICAgIDE5MSwgNzAwNjAsIDg1ODUsIDgwMDAsIDY0NDExLCAxMjA2NTIsIDQyODg5LCA2NDg1MCwgNDEwNzIsIDQxNTc4LCAwLCAKKyAgICA0MTU3NywgMCwgMTAwMDIsIDAsIDY1MzMsIDczODAyLCA0MTU3MCwgMCwgNjgzLCAzOTYsIDQxNTgwLCA2ODE0NiwgMCwgCisgICAgMTI5MDEsIDQzMDU4LCAwLCAzNDMsIDcxMjksIDQyNjgwLCA0MTM2MCwgNzgxNTQsIDAsIDQ3NDMsIDAsIDAsIDc0MDQwLCAKKyAgICA3NDEwOCwgODc0MywgMTcyNCwgMTQzMywgMTE5MzIyLCAwLCAzNzM5LCA2MjYzLCA3MTM0OSwgMCwgMzk2NCwgNjU5MiwgMCwgCisgICAgMTI4NjkzLCA2NjA0MCwgMCwgNDI1NjgsIDY5ODA2LCAxMjgxMTMsIDE3NzgsIDM5NTYsIDAsIDQyMDcwLCA2NTYzLCAKKyAgICA0MzA3NSwgOTAxOCwgOTQwMDYsIDk4MzM5NiwgMTIwNjcsIDQxMzEyLCAwLCA1NTQ3LCA3NDUzMSwgMTI3OTY5LCAwLCAKKyAgICA4MTc1LCAwLCAyODQsIDgxMDgsIDkzNCwgMCwgNzQwMDEsIDE3MywgNjY0NjAsIDcxNzQsIDkyNzAzLCAxMTg4MjIsIDE3NTAsIAorICAgIDAsIDQzOTQsIDY4MzY4LCAxODA3LCA5ODM4ODgsIDkyMjk4LCAwLCA1ODg5LCAwLCA3MTgwLCAwLCAxMTkxNDUsIDAsIAorICAgIDkxNzU1OCwgNDI0NzEsIDY5ODIsIDE3MjEsIDQ0MDIyLCA3ODkxLCA0MjI0MywgNDIxNjAsIDI1ODMsIDQ1MTIsIDExOTM2MCwgCisgICAgNjUyMzAsIDEyODEwOSwgMCwgMCwgMzg1NSwgMCwgMCwgMCwgMCwgNzQyOTUsIDAsIDAsIDkyNDE2LCAzOTc1LCAwLCAKKyAgICA3NDA4NywgMCwgMTI2NzIsIDM3OTgsIDI3MDMsIDk4MzU5OSwgMCwgMjEwOSwgOTc3NCwgMTI3NSwgMCwgMCwgNDEwOTUsIAorICAgIDM5NjIsIDAsIDI5MzIsIDQxMTAxLCAzOTU0LCA2NDU3LCA0NTEzLCAwLCAwLCA3Mzk5NCwgNzM5OTIsIDE0NjgsIDAsIDAsIAorICAgIDQxODUxLCAxMjgyMzAsIDQxODQ2LCAwLCA1NTIzOCwgNzYzMywgNDE4NDksIDY4Mzg1LCA0MzIwLCAzMjI0LCAwLCAKICAgICAxMjgwMzIsIDAsIDQyNTMxLCAxMTkxMDgsIDE1MTAsIDAsIDgyNTYsIDAsIDExMzkzLCAwLCA4ODc5LCAxMjgwNzUsIAogICAgIDkyNDc0LCA4NzcwLCAwLCAwLCA3ODM3NywgMTkxMCwgODY3MSwgNzgzNzQsIDQyODMsIDAsIDEyNzExNywgNjgzNjEsIAogICAgIDc4MzE4LCAyNjU0LCA3ODkzLCAxOTUwMDcsIDAsIDAsIDAsIDY1MTA2LCA0Mjc2MSwgMTI4NTcsIDQ1ODEsIDg0MTEsIApAQCAtMTkyMzYsMjggKzE5MjU2LDI4IEBACiAgICAgOTE3NjE5LCAwLCAwLCAxMDA0MywgMCwgMTE4NiwgNDE1NzEsIDY5OTksIDYxNywgOTQ2NCwgMTI2NjQyLCAzNjc1LCA1MjA3LCAKICAgICA2NTA2MiwgNTIxMywgMTk0NzY5LCAyNjE3LCA0MTM0OCwgNDE1NjgsIDEyODgwMywgMzI1MywgMTIwNTM1LCAwLCA4NjMwLCAKICAgICAxMjg1NDQsIDAsIDU1OTYsIDU1NDUsIDcyODgsIDI1ODYsIDY0ODg3LCAwLCA1MjE3LCA3MTMzNiwgMCwgMCwgMCwgNjQyOTMsIAotICAgIDY4MDk4LCAyNjM1LCAwLCAwLCA5ODM4MzcsIDAsIDk4MzYzMiwgNzgzNSwgNzAwNDAsIDAsIDE5NDk4OCwgOTIyODUsIAorICAgIDY4MDk4LCAyNjM1LCAwLCAwLCA5ODM4NDYsIDAsIDk4MzY0MSwgNzgzNSwgNzAwNDAsIDAsIDE5NDk4OCwgOTIyODUsIAogICAgIDY0NTU4LCAxMjcxMjIsIDAsIDEyNzEyMSwgMCwgMTI3OTEzLCAwLCA1Nzg0LCA5ODMxMDIsIDAsIDAsIDcwMDMzLCA0MDExLCAKLSAgICA5MTc2MTYsIDY4MTAxLCAwLCA3ODY0LCA0MjU0LCA2NTA5NSwgOTgzNDg4LCA1NjAwLCAzOTAzLCAxMjcwODMsIDEwNDQ3LCAKKyAgICA5MTc2MTYsIDY4MTAxLCAwLCA3ODY0LCA0MjU0LCA2NTA5NSwgOTgzNDk2LCA1NjAwLCAzOTAzLCAxMjcwODMsIDEwNDQ3LCAKICAgICA1NTk4LCAxMjA3LCAxMjA1MjEsIDY2Njg5LCAzNTAxLCA0MjU4MiwgNDM2MDAsIDE5NDc4MCwgMCwgMTEyNCwgNTU5NywgCi0gICAgMTk0Nzc4LCAxOTQ3NzIsIDkzMjEsIDk4MzQ3NiwgOTgzNDczLCA5ODM0NzQsIDAsIDE3MTksIDY4MzU2LCA2ODM1NCwgCi0gICAgOTY3MSwgMTEyNSwgNDM5OSwgMTI3NDc5LCA5MTc2MTAsIDk4MzQ4MCwgNzYzMSwgNTQ4OCwgNzEyOCwgMTIwNTMyLCAwLCAKKyAgICAxOTQ3NzgsIDE5NDc3MiwgOTMyMSwgOTgzNDg0LCA5ODM0ODEsIDk4MzQ4MiwgMCwgMTcxOSwgNjgzNTYsIDY4MzU0LCAKKyAgICA5NjcxLCAxMTI1LCA0Mzk5LCAxMjc0NzksIDkxNzYxMCwgOTgzNDg4LCA3NjMxLCA1NDg4LCA3MTI4LCAxMjA1MzIsIDAsIAogICAgIDU0OTEsIDAsIDg5MzcsIDQzMDQ0LCAyNjA0LCA3NDE4NywgNTQ5MCwgNDMwNDYsIDU0ODksIDcyMTIsIDExNzY4LCA0MzA0MywgCiAgICAgNjMwMCwgMCwgNzEyMiwgMCwgNDM5MCwgNDU0LCA0MTM5NywgMCwgOTg3NSwgNzU5MywgMTk0NzkxLCA5MjI3NCwgMTE4OTEzLCAKICAgICA3MjA3LCAwLCA2NTkwMSwgMjM5NCwgMjU3NSwgMCwgMzc0NiwgMTEwMTYsIDY1NzUyLCAxMjAwMzcsIDAsIDQzNDIzLCAKICAgICAxMjg2ODMsIDExOTg5LCAwLCAwLCAwLCAwLCAwLCA4MjQ5LCAxMjgxNzIsIDAsIDc4NTMxLCA2NjQwLCA3NDgwNiwgMjU5OCwgCi0gICAgNTEzLCAwLCA2NTg2LCA4NjU2LCAwLCAxMjA3MTAsIDY1MDA4LCAwLCAxOTQ3ODQsIDE5NDk4OSwgMTk0Nzk1LCA5ODM0NjUsIAotICAgIDkyNTE1LCA2ODQ3NSwgOTM5NzMsIDAsIDAsIDc4NjM3LCAxMjY0NywgMCwgMTI4MDQzLCA2OTg5MywgMTAzNiwgOTgzNDY5LCAKLSAgICA5MjQxOSwgMTcyMywgMTI4MDU2LCA3NDIxNywgMCwgNDE1NzksIDI0NDQsIDAsIDEwNzA1LCA3Mzg3NiwgOTgzNDYxLCAKLSAgICA3NDQ4NiwgOTgzNDU5LCA3NDAsIDExOTIyMiwgMTk0OTc4LCAxOTQ5ODQsIDAsIDQyMzgsIDExMDcxLCA5NDU5LCA2ODQzNywgCisgICAgNTEzLCAwLCA2NTg2LCA4NjU2LCAwLCAxMjA3MTAsIDY1MDA4LCAwLCAxOTQ3ODQsIDE5NDk4OSwgMTk0Nzk1LCA5ODM0NzMsIAorICAgIDkyNTE1LCA2ODQ3NSwgOTM5NzMsIDAsIDAsIDc4NjM3LCAxMjY0NywgMCwgMTI4MDQzLCA2OTg5MywgMTAzNiwgOTgzNDc3LCAKKyAgICA5MjQxOSwgMTcyMywgMTI4MDU2LCA3NDIxNywgMCwgNDE1NzksIDI0NDQsIDAsIDEwNzA1LCA3Mzg3NiwgOTgzNDY5LCAKKyAgICA3NDQ4NiwgOTgzNDY3LCA3NDAsIDExOTIyMiwgMTk0OTc4LCAxOTQ5ODQsIDAsIDQyMzgsIDExMDcxLCA5NDU5LCA2ODQzNywgCiAgICAgNzgxNDAsIDc4MTM5LCAxOTQ5ODUsIDgxMjEsIDEwNDM4LCA3NDQ4NywgNDI1NzQsIDEzMjg1LCA1NTI2MywgMTE5MDcsIAogICAgIDE5NTAwMCwgNTY5MCwgOTIyNTUsIDkzOTkyLCAwLCA0MzE4MSwgMTMwOTUsIDAsIDEyNzg1NywgNjQ0OTgsIDAsIDk1MDYsIAogICAgIDY5NzgsIDE5NDk5MywgNzc5OTIsIDAsIDAsIDE5NDk5MiwgMCwgMTI3ODQ1LCAxMTIyLCAzMTcsIDAsIDAsIDAsIDAsIAogICAgIDE5MjAsIDAsIDEwMTczLCA4MjcsIDAsIDAsIDc4Mzc4LCAxMjAxMjYsIDUyMjMsIDEzMDQsIDAsIDExOTU2NCwgNTIyNiwgCiAgICAgMTI2MDIsIDk0MDQ0LCAwLCA5MzI5LCA3NzU4LCA5MjM5LCA0MTE3MywgNTIyNCwgNTQ4NywgMTIyMiwgNTY5MiwgNDE3MjUsIAogICAgIDY5MjI5LCA5Njc0LCA1Njk1LCA0MTcxMSwgNjQ2MjcsIDE5OTA5LCAwLCA3NDYwNCwgNTY5MSwgMjg3LCA4NjYsIDIzMywgCi0gICAgMTI3NDkwLCA5ODM0MzMsIDQyODE2LCA5NDAzNiwgNjUxNDAsIDc0Nzk3LCAwLCA4ODMwLCA2NTY4LCA0MjMwMCwgMTA1MjQsIAotICAgIDQxMTc1LCA5ODM0NDAsIDk4MzQzNywgOTgzNDM4LCA1Mjk2LCA5ODM0MzYsIDQyNDkyLCA0MzQwMiwgOTI0NjYsIDMzMDIsIAorICAgIDEyNzQ5MCwgOTgzNDQxLCA0MjgxNiwgOTQwMzYsIDY1MTQwLCA3NDc5NywgMCwgODgzMCwgNjU2OCwgNDIzMDAsIDEwNTI0LCAKKyAgICA0MTE3NSwgOTgzNDQ4LCA5ODM0NDUsIDk4MzQ0NiwgNTI5NiwgOTgzNDQ0LCA0MjQ5MiwgNDM0MDIsIDkyNDY2LCAzMzAyLCAKICAgICAwLCAwLCA2NTE2LCA2NTE1LCA2NTE0LCA2NTEzLCA2NTEyLCAwLCA3ODU2LCA4NjkwLCAwLCAwLCAxMjEyMiwgMTE5NjAyLCAKICAgICA0Mzk3NiwgMCwgMTc4NSwgNjk5MjUsIDY4NjIyLCA2NTE1MywgMTk0ODEwLCA1MTM4LCAwLCAwLCAxMTg4NjksIDAsIDQ1NDAsIAogICAgIDQxMTgxLCAwLCA2MjAwLCAwLCA1MTM0LCAwLCAzMjIsIDQ2NDMsIDUxMzIsIDAsIDYzODksIDEyODUzMywgNTE0MywgMCwgCkBAIC0xOTI2NSw3ICsxOTI4NSw3IEBACiAgICAgMTI3MDEyLCAxMDI3MCwgMTAyODYsIDEwMzE4LCAxMDM4MiwgNDM1MjksIDY2NDc3LCAwLCAwLCA3NDE3MCwgMCwgMzIzNCwgCiAgICAgMCwgMCwgNzQzNzYsIDQzMTM5LCAxMTg4MTUsIDEyNzA4NCwgMTIwNjI3LCA4NzY3LCAwLCA3NDQ4OSwgOTY5NSwgMTIwNzQ2LCAKICAgICA1MjAxLCAwLCA2MjE1LCAxMjcxNCwgNjIxNCwgMTMxMDEsIDAsIDE5NDk5OSwgNjUyNjgsIDAsIDAsIDAsIDExMDI3LCAwLCAKLSAgICAxMDA1OSwgMTA1MTEsIDQyMDc1LCA5NzY3LCA3ODksIDE3NDksIDc4ODkwLCAxMjcwNzEsIDk4MzY2MSwgMzIwLCAwLCAKKyAgICAxMDA1OSwgMTA1MTEsIDQyMDc1LCA5NzY3LCA3ODksIDE3NDksIDc4ODkwLCAxMjcwNzEsIDk4MzY3MCwgMzIwLCAwLCAKICAgICA4NjQ3LCAwLCAzMDQ5LCAwLCA2NDcxLCA0MjA3MSwgNDMxNTYsIDk5MjUsIDEyNzM1NiwgMTI3MzU1LCA2NjQ3OCwgNDk2MCwgCiAgICAgNTU0OSwgMTI3MzU5LCAxMjczNDYsIDg0ODUsIDQ2NzEsIDU0MTgsIDEyNzM1MCwgMzM1MSwgMTI3MDA2LCAxMjczNTEsIAogICAgIDEwNjEwLCA1NDE0LCAzMDY0LCA2MjEyLCA0Mjg2LCA1NDIxLCAxMjczNDQsIDk1NTQsIDAsIDk0MDQ4LCAxMjcxMDksIApAQCAtMTkyNzMsMTYgKzE5MjkzLDE2IEBACiAgICAgMTI2MDMsIDcxMzEsIDExNDMwLCA0NTY2LCA3NTE4LCA5MzE3LCAzODAxLCAxMDM0MiwgMTA0MDYsIDAsIDExOTI1OSwgCiAgICAgNDI1NzYsIDAsIDUyMDAsIDEyNjYxMSwgOTE3OTQ4LCAwLCA5MTgzLCAxMjczNjEsIDc0NDU4LCA3MzgyNSwgMzk1LCA1NDgyLCAKICAgICA1MTk4LCA0MzQ5LCAxMDM5MCwgNzQyMDIsIDUxOTYsIDQzMjI0LCA2MTEzLCA0MjAwOSwgNTIwNSwgMCwgNDMzMDcsIDAsIAotICAgIDExODk3MywgMCwgMTIxMzQsIDAsIDAsIDExODg0MywgOTEyNiwgNDM1LCAwLCAxMjAxNCwgMTAzNzcsIDgwOTMsIDkwNzksIAotICAgIDMyMDMsIDE5MiwgNjUxMDksIDMzODUsIDAsIDY0NDMwLCA1MzgzLCAxMDI5NCwgMTAzMjYsIDEyODE3OCwgNTczOCwgCi0gICAgOTgzMjEzLCAzMzM2LCA3ODM1NSwgNTM2MSwgMzYyMywgNDExNTksIDAsIDY4MTEyLCA3ODcyLCA4NTgxLCAwLCAxMjYwLCAKKyAgICAxMTg5NzMsIDAsIDEyMTM0LCAwLCAwLCAxMTg4NDMsIDkxMjYsIDQzNSwgOTgzNjI0LCAxMjAxNCwgMTAzNzcsIDgwOTMsIAorICAgIDkwNzksIDMyMDMsIDE5MiwgNjUxMDksIDMzODUsIDAsIDY0NDMwLCA1MzgzLCAxMDI5NCwgMTAzMjYsIDEyODE3OCwgNTczOCwgCisgICAgOTgzMjE1LCAzMzM2LCA3ODM1NSwgNTM2MSwgMzYyMywgNDExNTksIDAsIDY4MTEyLCA3ODcyLCA4NTgxLCAwLCAxMjYwLCAKICAgICAzMTQ5LCA1MzU5LCAxMjAxMzQsIDAsIDc5MTQsIDUzNTcsIDkyMTcwLCAxMjg2NTksIDI2MjQsIDUzNjQsIDAsIDExNDMxLCAKICAgICAxMjAwMzAsIDkxMDEsIDExMDU4LCA3ODI4OCwgMCwgNzgyOTMsIDQyMjcxLCA3ODI4OSwgNDI5MTcsIDEyMDc5MywgMCwgCiAgICAgNjU1NjYsIDY3MTcsIDEwNjE5LCA0MzM2MCwgNzgzODUsIDc4Mzg0LCAxMTgzMiwgNzgzODIsIDc4MzgxLCA3ODM4MCwgCiAgICAgNzgzNzksIDkzMTksIDcwOTcsIDExOTA1NSwgNzc5MDYsIDMyMzIsIDczODI0LCA3NDU4MSwgMTIwNjMyLCAwLCAwLCAKICAgICA0MTg4OSwgOTI0NTMsIDAsIDExNjEsIDQxODk1LCA3NDEwMywgOTcwMSwgODYyMiwgMCwgMCwgNzM4MTksIDEyMDU4OCwgCiAgICAgNTAxMiwgNzc5MTIsIDQxMzYyLCA2OTg2MiwgNzgyOTYsIDExOTIxLCAwLCAxMTc2OSwgMCwgNjg2MDksIDQxMzY0LCAwLCAKLSAgICA3NDIyOCwgNDEzNTIsIDQxMzYxLCAwLCA0MTM2NiwgMCwgMzM1NiwgMCwgOTE3LCA2ODQyMiwgMTE5OTE1LCA3MTM0LCAKKyAgICA3NDIyOCwgNDEzNTIsIDQxMzYxLCAwLCA0MTM2NiwgMCwgMzM1NiwgMTE2MTEsIDkxNywgNjg0MjIsIDExOTkxNSwgNzEzNCwgCiAgICAgODE5OSwgNzgzODksIDExOTkxNywgNjc3LCAxMTk5MTYsIDAsIDExOTkzMiwgMTI3MTY5LCAwLCAwLCAwLCAzMzQ5LCAKICAgICA3NDEyNSwgNzAyMiwgODkyNywgNDczOSwgMCwgNTgwMiwgMCwgODYxNSwgMCwgMCwgNDkxLCAxMjg4MTksIDEwMTkwLCAKICAgICAxMjA2OTgsIDY1ODM3LCAxMjg4MjAsIDg0MjYsIDExMDkyLCA5ODkxLCAwLCA0MjQ5NywgNzExMywgNzU4NiwgNDIzMDUsIApAQCAtMTkzMTAsMzAgKzE5MzMwLDMwIEBACiAgICAgNTUyNTIsIDczOTcyLCAxNDQyLCAwLCA1ODk0LCA3MDA2OSwgMCwgNDExNzEsIDkyNTExLCA3NDMxMywgMCwgMTMxNjIsIDAsIAogICAgIDMzMzQsIDE5NTAxMCwgMTE4ODAzLCA3Nzg4MSwgNjYwMjIsIDAsIDAsIDE2NTEsIDEyODc3MSwgODg2MSwgMCwgMCwgMTE0MiwgCiAgICAgMCwgODI3MSwgMCwgOTgzMDU4LCAxMjY2NDUsIDEyOTAzLCAwLCA0MDAyLCA0MzYyNiwgMTA0NDIsIDEwNjc2LCAzMzQ0LCAwLCAKLSAgICAwLCAxMjkyMCwgMTk0NTYwLCAwLCAwLCA2NjY0MiwgMTI3NywgMCwgNzg3MSwgMCwgMCwgNzg4NTMsIDAsIDc4ODU0LCAKKyAgICAwLCAxMjkyMCwgMTk0NTYwLCAwLCAwLCA2NjY0MiwgMTI3NywgMCwgNzg3MSwgMCwgMTk0Njg2LCA3ODg1MywgMCwgNzg4NTQsIAogICAgIDEyMDM2MCwgMCwgMTE3ODQsIDAsIDc4MDEyLCA0NzAwLCA2NjM2NiwgNzg4NTgsIDEyMDM1OSwgMTEwMTIsIDAsIDc4ODU2LCAKICAgICA5MjQwMCwgNzc4NzksIDQ5NzMsIDg3ODQsIDc3ODc3LCA3NDgwNCwgNzc4NzQsIDc3ODY5LCA3Nzg3MSwgNDI0NDAsIDAsIAogICAgIDQzMTE4LCAwLCA0MjM2NCwgNjc3NCwgNjc3MywgOTE3NTYwLCAxMjAzNjksIDEwMzQ2LCAxMDQxMCwgNzg4NTksIDkyNDMsIAogICAgIDI0NjQsIDc0MjYzLCA2MTA4LCAzMzcyLCAwLCA2MjQ3LCA0MzExNywgNzQ1MjYsIDcxMjEsIDc0MTY2LCAwLCAxMjAzNTUsIAogICAgIDkyNTM3LCAwLCAwLCAxOTUwMzQsIDAsIDAsIDAsIDcwMDgzLCAzMzU0LCAxOTUwMzcsIDQxOTIsIDkyODksIDExODk5OSwgCiAgICAgNDExOTEsIDM4NzYsIDAsIDcwMDY3LCAxMjA2NjAsIDQzNjk2LCA0MzM4MCwgMCwgOTgzMDkxLCAwLCAwLCAxMTYwMywgCi0gICAgOTgzOTQ1LCAwLCA2NTg5LCAxMjg1ODgsIDE5NDY3OSwgMCwgMCwgOTgzNjkxLCAwLCAwLCA0MjU3MiwgMTI4MjY0LCAKKyAgICA5ODM5NTQsIDAsIDY1ODksIDEyODU4OCwgMTk0Njc5LCAwLCAwLCA5ODM3MDAsIDAsIDAsIDQyNTcyLCAxMjgyNjQsIAogICAgIDEwNjMwLCA3NDgyNywgMTk2MywgMTE2MjIsIDEyNzA5OCwgMTE2NTQsIDAsIDc1NTAsIDEwNjg2LCA1OTAzLCAwLCA3ODAwOSwgCiAgICAgNDEzMjksIDk2NjIsIDkxNzkzNywgNjQ2OTgsIDMzNjYsIDEwMzk5LCAwLCA1NTQyLCAxMTAxMywgMTI3OTI3LCAxMjgzMDAsIAotICAgIDAsIDc4NjIxLCAxOTQ2NzIsIDY5MjUsIDAsIDAsIDkxNzkyOSwgMCwgMTE1NjgsIDk4MzY2NCwgNDMzNjcsIDY0NTc5LCAKKyAgICAwLCA3ODYyMSwgMTk0NjcyLCA2OTI1LCAwLCAwLCA5MTc5MjksIDAsIDExNTY4LCA5ODM2NzMsIDQzMzY3LCA2NDU3OSwgCiAgICAgOTE3OTMwLCA3ODUyLCAwLCAwLCA2NzU0LCA2MzEyLCAwLCA2NDY3MiwgNjUyOTYsIDAsIDExODk1NywgMCwgNDE2LCAKICAgICAxMjI5NiwgNjg0NTcsIDczODM0LCA2ODE3NywgMTEwNTAsIDEwOTg0LCA5MjIwOCwgMCwgMCwgOTIxODIsIDAsIDk4MzYwNSwgCi0gICAgOTUzMiwgNjYzNTUsIDAsIDk4MzIyOCwgOTE3OTI1LCA2NDM0MywgMTk1MDMyLCAxMjgyODEsIDE5NTAzMSwgMCwgMTk1MDMwLCAKKyAgICA5NTMyLCA2NjM1NSwgMCwgOTgzMjM0LCA5MTc5MjUsIDY0MzQzLCAxOTUwMzIsIDEyODI4MSwgMTk1MDMxLCAwLCAxOTUwMzAsIAogICAgIDE5NTA1NywgMTE0NDUsIDAsIDIxMTIsIDE5NTA1NiwgMTI4ODE0LCAxMDE4NSwgMTAyMSwgMTI4MTMwLCA5NTA3LCAxMDIxMCwgCiAgICAgNzQ1NDQsIDgwMjMsIDEyMDAsIDEyMjQzLCA3ODAwMSwgNTI4MiwgNzgwMDMsIDk2MjQsIDExNTQ1LCAwLCAxMjA0OTMsIAogICAgIDMzNDMsIDQ0MjQsIDExMDQ3LCAxODg1LCA0MzI2OCwgMzg5NiwgNzg0NDQsIDY2NDk3LCAyOTQ3LCAzOTIsIDc4OTQsIAogICAgIDQzOTEsIDY4MTM5LCA5ODMwNjIsIDEzMDU5LCA3NDgxNiwgNzc5OTgsIDMzODEsIDc5NDIsIDAsIDY5MjE5LCAwLCA2NDc1NywgCiAgICAgMCwgMzkxMywgMCwgMCwgNzgyMzUsIDcwNDQsIDEyNjUsIDAsIDYzMDksIDcwNDUsIDcxNzUsIDcwNDcsIDc4MjM5LCAKLSAgICAxMTc5MSwgMCwgMCwgODIyMSwgNzgzMDcsIDQxODY0LCAwLCAwLCAwLCAwLCAxNjcsIDk4Mzg5NywgNzgzMDEsIDk4MzY0NCwgCi0gICAgNzQyMTEsIDQxODk3LCA2ODQ3NywgMCwgOTE3NTgzLCA5ODM2MjUsIDk0MDY1LCAyNDkzLCAwLCAxMTg4MTEsIDAsIDAsIAorICAgIDExNzkxLCAwLCAwLCA4MjIxLCA3ODMwNywgNDE4NjQsIDAsIDAsIDAsIDAsIDE2NywgOTgzOTA2LCA3ODMwMSwgOTgzNjUzLCAKKyAgICA3NDIxMSwgNDE4OTcsIDY4NDc3LCAwLCA5MTc1ODMsIDk4MzYzNCwgOTQwNjUsIDI0OTMsIDAsIDExODgxMSwgMCwgMCwgCiAgICAgNjQzNTQsIDAsIDg3NzcsIDAsIDQwNiwgODg4NCwgMjM4NSwgMCwgOTI0NTAsIDAsIDkxNzU3MywgNDMwMzAsIDQyMDI3LCAKICAgICAxMjExNCwgMCwgOTE3NTc5LCA2NDkzNiwgMTk0Njk1LCAwLCAxMjA2MjksIDEwNTYxLCAwLCA4MzY1LCAxMjA1MzksIAotICAgIDk4Mzc2NSwgNjU4NDEsIDEyMDc4NywgMTE2MDEsIDAsIDc0MTIxLCAwLCA5MTc1NzUsIDc4MzQsIDc0MTU5LCAwLCAKKyAgICA5ODM3NzQsIDY1ODQxLCAxMjA3ODcsIDExNjAxLCAwLCA3NDEyMSwgMCwgOTE3NTc1LCA3ODM0LCA3NDE1OSwgMCwgCiAgICAgOTE3NTc0LCAxMDI5OCwgNjYyNCwgNDkwOCwgOTE3NTk2LCAxNjM5LCAwLCAwLCA3NDE1NywgNjMyNywgNjcyNCwgMCwgCiAgICAgMTI4MDg2LCA5MjU2NiwgNjk5MTAsIDQ4MTcsIDc4NDQ2LCAxOTQ3NTksIDkyNTM2LCA3MDQzLCA5NjAwLCAxMTAyMiwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgNzU0OCwgNjQ3OTQsIDQyMDUwLCAxMjI5MSwgNTUyODksIDE5NDc2MSwgMTIzNDMsIDY1NywgCkBAIC0xOTM0MywxNCArMTkzNjMsMTQgQEAKICAgICA0MTQwNiwgNDMyNzMsIDc0MTYwLCAxMTk5ODMsIDczOTM5LCA5MjYzOCwgMTE5OTg0LCAxMTk5NzksIDQxNDA0LCAxMTY1LCAKICAgICAxMTk5ODAsIDQ0NTEsIDEzMDg3LCAwLCAxMTI4NCwgMTE5OTg3LCA3MDA5NywgNjUxNTUsIDQzMDE0LCA1NDM5LCA5MzYzLCAKICAgICA3MDA3MCwgMzM3NSwgMTI4ODY5LCA1OTAwLCA5Mzk5MCwgNzg4OSwgMjcyMiwgNDIyNjIsIDAsIDAsIDEyODc3NCwgMCwgCi0gICAgMjI4MiwgMCwgMTI3ODEwLCAxMTQwMSwgOTgzODEzLCAwLCA2ODQ1OSwgMCwgMCwgMCwgMCwgNjU0MzgsIDAsIDcyODAsIAotICAgIDEyNzg4NywgMCwgMTI3MzgxLCA0ODY4LCAxMTk5NjcsIDExOTk2NiwgMTE4Nzk4LCAwLCAwLCA0MzE2MSwgMCwgOTIzNjAsIAotICAgIDAsIDUxODIsIDAsIDEyMDU0MiwgMCwgMCwgNDIyNiwgMTE5MjQzLCAxMjEzNSwgNTczMiwgNDQ2NCwgMCwgNzEzMzAsIDk3NywgCisgICAgMjI4MiwgMCwgMTI3ODEwLCAxMTQwMSwgOTgzODIyLCAwLCA2ODQ1OSwgMCwgMCwgMCwgMCwgNjU0MzgsIDAsIDcyODAsIAorICAgIDEyNzg4NywgMCwgMTI3MzgxLCA0ODY4LCA4Mjk3LCAxMTk5NjYsIDExODc5OCwgMCwgMCwgNDMxNjEsIDAsIDkyMzYwLCAwLCAKKyAgICA1MTgyLCAwLCAxMjA1NDIsIDAsIDAsIDQyMjYsIDExOTI0MywgMTIxMzUsIDU3MzIsIDQ0NjQsIDAsIDcxMzMwLCA5NzcsIAogICAgIDQ0NTgsIDAsIDAsIDY0NzcwLCA3NDgzOCwgMCwgMzQ0LCAwLCAxOTQ3OTAsIDEzOTUsIDY0Mjc5LCAwLCA5MjI0MCwgMCwgCiAgICAgNzg2LCAwLCA0MzE3NCwgNjQzNDAsIDAsIDE5NDc2NywgMTIwNzIzLCA0MzAyNiwgNzYxMiwgMTAxMzIsIDY0NDEzLCAKICAgICA2NTAyNSwgMCwgMCwgMCwgOTM5NTYsIDAsIDY4NDQ0LCAwLCA5MjQzNywgMCwgMTE5MTYwLCAxMDIwNCwgOTI2NTYsIDAsIAotICAgIDEyNzgwOSwgOTgzNjM1LCAxMzk5LCA5ODM2NDMsIDY1MjE3LCAwLCA4ODUyLCAxMjg1NzEsIDI0MSwgMTI4NzgwLCA0OTA3LCAKLSAgICAwLCA5ODM2MzAsIDc5MzIsIDk3MjcsIDEyODg3MywgNzQyNTUsIDg3NDgsIDAsIDAsIDk4MzYzNCwgMCwgNDI3ODAsIDAsIDAsIAorICAgIDEyNzgwOSwgOTgzNjQ0LCAxMzk5LCA5ODM2NTIsIDY1MjE3LCAwLCA4ODUyLCAxMjg1NzEsIDI0MSwgMTI4NzgwLCA0OTA3LCAKKyAgICAwLCA5ODM2MzksIDc5MzIsIDk3MjcsIDEyODg3MywgNzQyNTUsIDg3NDgsIDAsIDAsIDk4MzY0MywgMCwgNDI3ODAsIDAsIDAsIAogICAgIDAsIDQyMTcsIDAsIDg2NTAsIDAsIDAsIDAsIDY5OTAwLCAxMTg4NzIsIDQzMDk5LCAzOTY1LCAxMTkxMTksIDY3MTksIDAsIAogICAgIDEzMzAwLCA3ODQzOSwgOTM5NzEsIDQzMDU3LCA2NjU4OCwgMTE4OTkxLCAwLCAwLCA3MzgxNSwgNDQyMCwgMCwgNjQxMCwgCiAgICAgNzc2MCwgMCwgMCwgMCwgMCwgMCwgNzI5NCwgMCwgMCwgMCwgOTA2NiwgMCwgMTE5OTMsIDQzMTg4LCAyNjI2LCA3NzYyLCAwLCAKQEAgLTE5MzU4LDQ1ICsxOTM3OCw0NSBAQAogICAgIDY2NDU0LCA5NTkyLCA0Mjg1MSwgMTI2OTkzLCAxNTQyLCA5MjMwMywgMCwgMCwgMCwgMCwgNzQzMTEsIDc4NDk3LCAwLCAKICAgICAxMDE4MSwgMCwgNDM2MjQsIDAsIDc3NzksIDAsIDEwMTk1LCA5NDc5LCA2MDI5LCAwLCA5MjI2OCwgOTY4OSwgMCwgNjU1NzcsIAogICAgIDg5OTMsIDY2MzU4LCAwLCA0MjM3OCwgMzM2OCwgNjA2LCAxMjcwMzAsIDc2OTcsIDY5MjM3LCA2OTc4NywgMjAzMCwgMCwgCi0gICAgNjAyNywgODM3MCwgNDMyMiwgMCwgNjUyMDcsIDAsIDk4MzMzMSwgOTgzMzMwLCA5ODMzMjksIDk4MzMyOCwgMjczNSwgCisgICAgNjAyNywgODM3MCwgNDMyMiwgMCwgNjUyMDcsIDAsIDk4MzMzOSwgOTgzMzM4LCA5ODMzMzcsIDk4MzMzNiwgMjczNSwgCiAgICAgNDI4MzEsIDc3OTM1LCAxMjcxMjAsIDc0ODY2LCA4ODgxLCAxMTkwNDcsIDAsIDAsIDczOTQ2LCAwLCAwLCAwLCA2ODE0MCwgCi0gICAgOTgzOTE5LCA5NTc2LCAxMjg4NzIsIDMzNDcsIDQxNjAsIDUxNTQsIDU1Mjg4LCAzNzk0LCA2NjU2NCwgODUzMCwgMTI3MDYzLCAKLSAgICA3NzA5LCA0MTExMiwgOTgzMTMyLCA2NjU2MCwgNDIwNDEsIDQ1NzIsIDEyODc2LCA2NjU2MSwgOTgzNzQ5LCA2NzU4LCAKLSAgICA5ODM5MTcsIDE2MTUsIDU4NTUsIDgwOSwgMCwgOTIyODMsIDEyODMxNiwgMTI4MDA0LCA1Nzk5LCA5ODMzMjAsIDcwMTAwLCAKLSAgICA5ODMzMTgsIDcyNjAsIDk4MzMxNiwgNDMwMzEsIDY0NDI1LCA2NTEyOCwgNzg4MTksIDY0Mzg2LCA2NTI1NywgMCwgNjg2MTYsIAorICAgIDk4MzkyOCwgOTU3NiwgMTI4ODcyLCAzMzQ3LCA0MTYwLCA1MTU0LCA1NTI4OCwgMzc5NCwgNjY1NjQsIDg1MzAsIDEyNzA2MywgCisgICAgNzcwOSwgNDExMTIsIDk4MzEzMiwgNjY1NjAsIDQyMDQxLCA0NTcyLCAxMjg3NiwgNjY1NjEsIDk4Mzc1OCwgNjc1OCwgCisgICAgOTgzOTI2LCAxNjE1LCA1ODU1LCA4MDksIDAsIDkyMjgzLCAxMjgzMTYsIDEyODAwNCwgNTc5OSwgOTgzMzI4LCA3MDEwMCwgCisgICAgOTgzMzI2LCA3MjYwLCA5ODMzMjQsIDQzMDMxLCA2NDQyNSwgNjUxMjgsIDc4ODE5LCA2NDM4NiwgNjUyNTcsIDAsIDY4NjE2LCAKICAgICAxMjA2MDcsIDkzNDcsIDEyODA2NywgNjUzMiwgMCwgMCwgMCwgMTI3MDYwLCA2NTgyOCwgMCwgMjgzLCA2ODY2NSwgNzg4MTMsIAotICAgIDUzMiwgNzg2NjMsIDAsIDk4Mzc4NywgMTIwNjA5LCAwLCAzMzcwLCAwLCAxMTM2MSwgNTQ0MywgNzg3NzgsIDgxNTMsIAotICAgIDczNzY3LCAwLCAxMDc0MSwgMCwgMjI5OCwgMCwgOTgzOTA4LCA2NTQ5NSwgNjQ3MDYsIDk4MzMxMCwgNDMzNDQsIDk4MzMwOCwgCi0gICAgNzE0NCwgOTQ2NiwgNzg4NjYsIDk4MjQsIDk4MzMwMywgOTgzMzAyLCAwLCAwLCA5MTUsIDQzNDI1LCAwLCAwLCAwLCAwLCAKKyAgICA1MzIsIDc4NjYzLCAwLCA5ODM3OTYsIDEyMDYwOSwgMCwgMzM3MCwgMCwgMTEzNjEsIDU0NDMsIDc4Nzc4LCA4MTUzLCAKKyAgICA3Mzc2NywgMCwgMTA3NDEsIDAsIDIyOTgsIDAsIDk4MzkxNywgNjU0OTUsIDY0NzA2LCA5ODMzMTgsIDQzMzQ0LCA5ODMzMTYsIAorICAgIDcxNDQsIDk0NjYsIDc4ODY2LCA5ODI0LCA5ODMzMTEsIDk4MzMxMCwgMCwgMCwgOTE1LCA0MzQyNSwgMCwgMCwgMCwgMCwgCiAgICAgMTI3MTc4LCA0MzI2NCwgNzAwOTYsIDAsIDAsIDQzMDM4LCA3ODg2NCwgNjczMCwgNzg4NjIsIDY4MTYxLCA2NDU1MCwgCiAgICAgNTE4NiwgNzM2MCwgMTI3ODM3LCAwLCAxMjEwOCwgMCwgNjUxMjQsIDQzMTI3LCA2NjA0MywgMCwgNjMyNiwgNDMxMDcsIAotICAgIDc3ODI2LCAwLCA0MjU2MiwgMCwgMTI4ODIxLCAwLCAxMjg1MjAsIDExNDg1LCA2MTAzLCAxMjcxMjMsIDk4MzI5NywgCi0gICAgMTE3MTgsIDk4MzI5NSwgMTI4ODksIDkyNjU3LCAxMjcxMzcsIDAsIDAsIDAsIDU1MjQ1LCAwLCAxNjMwLCAxMjgyMzIsIAorICAgIDc3ODI2LCAwLCA0MjU2MiwgMCwgMTI4ODIxLCAwLCAxMjg1MjAsIDExNDg1LCA2MTAzLCAxMjcxMjMsIDk4MzMwNSwgCisgICAgMTE3MTgsIDk4MzMwMywgMTI4ODksIDkyNjU3LCAxMjcxMzcsIDAsIDAsIDAsIDU1MjQ1LCAwLCAxNjMwLCAxMjgyMzIsIAogICAgIDY1NDgzLCAwLCAxMjU2NSwgMCwgNjU0NzYsIDEyMDAxMywgMCwgMTE5NTU0LCA5MjgzLCA3NzAwLCA5MTc1MzcsIDk2OTAsIAogICAgIDY1NDk5LCAwLCA2NDU5MywgNTEyLCAzMzc2LCA2ODIxMCwgMCwgMTI4Njc3LCA3Nzg5MiwgNjMyLCAxMjk0MCwgNzc4OTEsIAotICAgIDQyNTI5LCA3ODU4NywgMCwgNTk1NywgMTEwNTkzLCA4OTI2LCA5ODMyOTEsIDk4MzI5MCwgMTI4MjczLCAxMDc0NSwgCisgICAgNDI1MjksIDc4NTg3LCAwLCA1OTU3LCAxMTA1OTMsIDg5MjYsIDk4MzI5OSwgOTgzMjk4LCAxMjgyNzMsIDEwNzQ1LCAKICAgICAxMDE3NCwgNzM3OSwgNjQ1ODEsIDUzODYsIDEyMDY4NiwgMTE3MTMsIDEwNjMzLCA2OTcwOCwgNTA1NiwgMCwgMCwgMCwgCiAgICAgMTIwNzczLCAwLCA5ODEyLCAwLCA0NDYwLCAwLCAwLCA3MTMwNywgMTI4MDM4LCAwLCAwLCAxMjcxNzQsIDY0Mjc4LCAKICAgICA5MjM3MCwgNDM0NjYsIDAsIDAsIDY0Mzg5LCAyOTUzLCA3Mzg3OSwgMTgwMSwgMTI4MzUsIDExOTAyOSwgMCwgNzM4MjMsIDAsIAotICAgIDY2Mzc1LCAyMDg1LCA3MDIsIDQyNTc5LCA3Nzg4NCwgNzc4ODUsIDEzMDc0LCA3Nzg4MywgOTgzMjc4LCA5ODMyNzcsIAotICAgIDEyODU3MCwgMTIxMDYsIDk4MzI3NCwgNzQyMDcsIDE3NTUsIDEwNDgyLCAxMjg2MywgNzc4OTgsIDExNjMsIDI5NTEsIAorICAgIDY2Mzc1LCAyMDg1LCA3MDIsIDQyNTc5LCA3Nzg4NCwgNzc4ODUsIDEzMDc0LCA3Nzg4MywgOTgzMjg2LCA5ODMyODUsIAorICAgIDEyODU3MCwgMTIxMDYsIDk4MzI4MiwgNzQyMDcsIDE3NTUsIDEwNDgyLCAxMjg2MywgNzc4OTgsIDExNjMsIDI5NTEsIAogICAgIDk1MjIsIDc0MDc5LCA3ODI2NiwgNjY2MDQsIDAsIDMzODQsIDY5MjI3LCAxMDcwMiwgODMwLCA3NzkwMiwgNzc4OTksIAogICAgIDc3OTAwLCA4NDUxLCAwLCAwLCAwLCA2OTczOSwgMCwgMCwgMCwgMCwgMjkwOCwgMCwgNDMzODYsIDY0OTAyLCA0MjQzLCAwLCAKLSAgICAxMjIzOSwgMCwgMCwgNDQ0MSwgMCwgOTgzMjcxLCA3Mzk0MCwgNjQzNTIsIDEyNzUxMywgOTgzMjY3LCA0MTEsIDk4MzI2NSwgCi0gICAgOTE5OSwgOTgzMjYzLCA0MDU2LCAxMTg5OTIsIDQxODkwLCAwLCAyNzMwLCA0MTYwNCwgOTgzOTI4LCA1NDI4LCAxOTQ3NDMsIAorICAgIDEyMjM5LCAwLCAwLCA0NDQxLCAwLCA5ODMyNzksIDczOTQwLCA2NDM1MiwgMTI3NTEzLCA5ODMyNzUsIDQxMSwgOTgzMjczLCAKKyAgICA5MTk5LCA5ODMyNzEsIDQwNTYsIDExODk5MiwgNDE4OTAsIDAsIDI3MzAsIDQxNjA0LCA5ODM5MzcsIDU0MjgsIDE5NDc0MywgCiAgICAgMzM2NCwgNDIyNjUsIDY0NDM3LCAxMjc5MzUsIDExODgxNiwgMTk0NzQyLCA5Njg0LCAyMTYsIDAsIDE0MDEsIDEyODA1MywgCiAgICAgNDQwMTIsIDAsIDAsIDkyNTg1LCA5MTU4LCA3Nzg0MiwgNjk5MDUsIDU3NjgsIDAsIDAsIDAsIDQ4NCwgMTk0NzM5LCAwLCAwLCAKLSAgICA2NTg5NSwgMCwgMCwgMzMzOCwgNzM5MzUsIDU3MiwgNzA0MSwgMjczNiwgNjc2MDUsIDk4MzI1NSwgOTM5NjIsIDI3OTQsIAorICAgIDY1ODk1LCAwLCAwLCAzMzM4LCA3MzkzNSwgNTcyLCA3MDQxLCAyNzM2LCA2NzYwNSwgOTgzMjYzLCA5Mzk2MiwgMjc5NCwgCiAgICAgODgwNywgNjQ0OTEsIDc3ODQ3LCA1NDM4LCA1MjIyLCA1MzgxLCA0MzExNCwgMCwgNTE5MywgNTEyNSwgNTQ1NiwgNTUwOSwgCiAgICAgNzc4NDYsIDE5NDc0NywgOTUzNCwgMCwgMCwgMCwgMzQzMCwgMCwgMCwgNzg3MTcsIDAsIDk4MSwgMCwgNDMzMCwgNzM5MjksIAogICAgIDEyMDUzNiwgMTgyNCwgMTA5MDgsIDAsIDcwMzQsIDQxNjgzLCA2NDYxNywgMCwgNzM3NTQsIDM5NTcsIDY0MzU4LCA2NDU0NywgCi0gICAgMTI4MjU5LCA2NzQsIDYzOTkxLCA5ODMyNDMsIDI5NDYsIDUzNTQsIDUyNTEsIDUzMjgsIDUzMDcsIDM3NTksIDExNDExLCAKKyAgICAxMjgyNTksIDY3NCwgNjM5OTEsIDk4MzI0OSwgMjk0NiwgNTM1NCwgNTI1MSwgNTMyOCwgNTMwNywgMzc1OSwgMTE0MTEsIAogICAgIDgzNjQsIDUxMjMsIDExOTYyOCwgNTI4MSwgNTQ2OSwgNTEyMSwgMTE5MjQ1LCAxMTg5OTMsIDAsIDUxMzAsIDAsIDAsIAogICAgIDc3OTkwLCAwLCAxMjA3MjYsIDEyMjEsIDI3MzMsIDExNzQ2LCA3Nzk5MSwgNTIxNiwgMCwgMCwgMCwgMCwgMzQ2OCwgNzAzMywgCiAgICAgOTIzMCwgNTkzOSwgMTk1MDUyLCAwLCAwLCAxMjA2NzcsIDY4NDAwLCA3Mjc4LCAxMDMyMSwgMTAyODksIDY0NjEzLCAKLSAgICAxMDM4NSwgNDE3MDYsIDAsIDAsIDk4MzQwNSwgMCwgMTE3MzksIDk4MzQxOCwgNDE5ODEsIDAsIDU5MzgsIDAsIDQzNzY2LCAKKyAgICAxMDM4NSwgNDE3MDYsIDAsIDAsIDk4MzQxMywgMCwgMTE3MzksIDk4MzQyNiwgNDE5ODEsIDAsIDU5MzgsIDAsIDQzNzY2LCAKICAgICAxMjQ0OCwgNzU3NiwgMTA0MDEsIDEwMzM3LCA3Mzg1MiwgMCwgMTMwNTcsIDAsIDEyNjk3NiwgMCwgMTAwMDksIDAsIAotICAgIDQxNzAzLCA5ODM2MjksIDEyMTY1LCAwLCAwLCA5ODg1LCAwLCA4MDc3LCAwLCAxMjc5MDgsIDAsIDAsIDAsIDkyNDU3LCAwLCAKKyAgICA0MTcwMywgOTgzNjM4LCAxMjE2NSwgMCwgMCwgOTg4NSwgMCwgODA3NywgMCwgMTI3OTA4LCAwLCAwLCAwLCA5MjQ1NywgMCwgCiAgICAgNDIyMCwgMTA3MjUsIDEwNDMzLCAwLCA2ODM5NSwgNDk4NywgNjQ1MTksIDAsIDEyODM0MCwgMCwgMCwgMCwgMTA5NzAsIAogICAgIDExNzMzLCAwLCAxMjA3OTIsIDAsIDE5OTQ0LCAwLCA5MDA5LCA4NTUxLCA5MjM0NSwgMTE0NjgsIDY0NjM2LCA3NTc1LCAwLCAKICAgICAyNzI0LCAwLCAwLCAxMjMxMywgMTEwNTkyLCA1MTUsIDExOTk0NywgNDI3OTEsIDYzOTg3LCA3ODI4NiwgMTE5OTQzLCAKQEAgLTE5NDA2LDczICsxOTQyNiw3MyBAQAogICAgIDAsIDQ0NzcsIDExODk2NCwgODE0LCA0MjA2NiwgNjYxODMsIDY2MjA0LCA0Mzc4NiwgMTE5OTYxLCA2NjE5OCwgNDE4ODAsIAogICAgIDY2MTg4LCAxMTYyMywgNzgxNDgsIDExOTU1LCA2NjE5MCwgNjYxOTEsIDQxMTExLCA2NjE4OSwgNzM3ODgsIDc3ODgsIAogICAgIDQ4NDcsIDAsIDEyNzc1OSwgMCwgMCwgMCwgMTU4MSwgNjUzNSwgNzgxNjEsIDEyOTU0LCA0MzAsIDc4MTYwLCA1NTI1OSwgCi0gICAgNzgxNTgsIDEyODAzNiwgNTI3OCwgNDk0NSwgNDI4ODMsIDQ5NTAsIDk4MzQzMCwgNjg2MjUsIDk4MzQyOCwgNzI2OSwgMCwgCi0gICAgNTk2NCwgMTI5MDgsIDk4MzU1NSwgMCwgNzQ3NjQsIDc0NDc3LCAxMTkxNDYsIDE5NDkzNiwgNDk0OSwgOTgzNDIxLCA0NDMsIAotICAgIDk4MzQxOSwgNDk0NCwgNTQ2NywgMTE5NjAzLCAwLCA2NTEzNywgNjA0NCwgNjUzOTIsIDAsIDQyMTMsIDAsIDQxMzAzLCAwLCAKLSAgICAxOTQ5MzEsIDExOTk2MiwgNDEzMDYsIDczOTg0LCAyNjk4LCAxMjcxNTksIDAsIDEyMDcyLCAzMTkzLCAwLCA0MTMwNCwgCi0gICAgODI0LCAxMjg2NzYsIDEyMDkxLCA3ODg5MywgNzg4OTQsIDExOTgxNiwgNDY3MywgNjQ4MDQsIDQ2NzgsIDExOTgyMCwgCi0gICAgMTE5ODE5LCA2NTA1OSwgMCwgNjczOSwgMCwgNTQ4MSwgMzQ5MCwgMTE5OSwgMTE5ODExLCA4MzU2LCA2OTk0NywgMTE5ODMyLCAKLSAgICA0Njc3LCAxMjY4OCwgMzEwMiwgMCwgNDY3MiwgNzgxNzMsIDc4MTc1LCA1NTMxLCA2ODM2NywgNDI1NzUsIDc4MTcwLCAKLSAgICA3ODE2NiwgNDY3NCwgNDU0OCwgNDQwMDUsIDExOTk0OSwgNjg2NTgsIDExOTk0NiwgODAyNSwgNjg2MzAsIDEyNzAyNCwgCi0gICAgMTg1NSwgOTgzNDA0LCA2ODY2OSwgOTgzNDAyLCA5MjQ0NSwgMTI3NTU0LCAwLCAxMjczMzksIDExOTY1MiwgMjc0NSwgCi0gICAgMTE3OTcsIDk4MzQxMCwgMTI4MTU5LCA5MjAyLCA0NjU0LCA5ODM0MDYsIDk4MzQwOCwgNjg2MzgsIDczOTkzLCAxMDUyNSwgCi0gICAgNDY0OSwgNjUyMDksIDk4MzQwOSwgMCwgNDY0OCwgNDMwODAsIDk4MzM5OCwgOTgzMzk5LCA5ODMzOTYsIDYyNDYsIDY0OTUwLCAKLSAgICA3ODI4LCA0NjUwLCA2Nzc3LCA2Nzc2LCA2Nzc1LCA0NjUzLCA3ODIyLCA3ODAwNSwgOTIzODQsIDQzMTg3LCA4NjY5LCAKLSAgICA5ODM0MDcsIDY4MjEsIDY1MDkzLCAwLCA3ODg4MSwgMjcxNiwgMCwgOTgzMDYwLCA5ODM0MTEsIDAsIDY4MzY5LCAxMjAwNTQsIAotICAgIDExMDYwLCA4NTQ3LCAyNzExLCA0MjE2NSwgNzgwMjcsIDc4MDI2LCA3OTkyLCAwLCAwLCA0NjYyLCA3ODAzMywgNzgwMzIsIAotICAgIDkxNDksIDkxNDYsIDU5OSwgMjA4MSwgNzgwMzEsIDc4MDMwLCAxOTQ5NjIsIDQ2NTYsIDEwMTMwLCA2ODQ1MCwgNzgxMSwgCi0gICAgNDA5OTQsIDE5NDk2NSwgNjQxNCwgNTk2NywgNDY1OCwgMzcyNSwgNTcxMywgNTgxNCwgNDY2MSwgNDI0MzQsIDk4MzQwMywgCi0gICAgMCwgMCwgNjQ5MDQsIDkwMjYsIDEwODMzLCA3NDg2NCwgNzU0NywgNDg2NywgMCwgMTAwMDgsIDEwMjIyLCAzMDU0LCAKLSAgICAxOTQ5NTYsIDk3NDQsIDc4ODYwLCA3NjA1LCA0NjIyLCAxMTk2NTYsIDk4MzM4NywgOTQwNzAsIDk4MzM4NSwgOTgzMzg2LCAKLSAgICA5ODMzODMsIDkwNDUsIDc4ODg4LCA0MjI1LCAxOTkyNiwgNzg4ODcsIDEyODgwLCA2NTMwNywgNDYxNywgNzg4ODMsIAotICAgIDk4MzM3OCwgNDE3MzIsIDQ2MTYsIDEwNTE4LCAxMDQyMywgMTAzNTksIDk4MzM3MiwgNTk1OCwgMCwgOTgzNDI1LCA0MjE1LCAKLSAgICA5Nzg5LCA5MTc5NDEsIDQzMjEsIDQ2MjEsIDk4MzM4MSwgNDEzMTMsIDUyMiwgNTM2OCwgMCwgNjU4MDMsIDAsIDUzNjYsIAotICAgIDEyMjAxLCA1MzcyLCAwLCA5ODM0MDEsIDAsIDc3MjAsIDczOTAsIDI2OTYsIDk4MzM5MiwgMCwgNDYzOCwgOTgzMzk3LCAKLSAgICAxNzkwLCA3ODI0MiwgNTk2NSwgNjQzNjMsIDY2NTY5LCA2ODY0NiwgMTI3ODMzLCA1Mzc2LCAxODM1LCA1MzM1LCAxOTQ5NjYsIAotICAgIDEyODA4OSwgNDYzMywgMCwgNjgxMTksIDExODAsIDQ2MzIsIDEyODA5MywgNTM4NywgNTMzMywgMCwgMCwgNDIwOTQsIAotICAgIDUzMzEsIDQ2MzQsIDExOTI4LCA5ODM1OTQsIDUzMzgsIDQ2MzcsIDEyODE3MCwgNTk3MSwgNDI0MTQsIDAsIDEyNjgsIAotICAgIDY1MDk3LCA0MjM2MSwgMCwgMCwgNzM4NTMsIDE0MjcsIDAsIDAsIDU5NzAsIDM0MzEsIDAsIDEwMzU4LCAxMDQyMiwgNDc1OCwgCi0gICAgOTgzMzY2LCAxNjA4LCAyNzM4LCAwLCAxMDQ1NSwgNDc1MywgNzQwMjYsIDExMzQ0LCA0MjIyLCA2MjQwLCA1MjMxLCAKLSAgICA3NDM4NCwgOTgzMzcwLCA2ODM3NywgNjI0OCwgOTgzMzU0LCA5ODMzNTUsIDk4MzM1MiwgNDIzMTgsIDkyNTgyLCA1MjI5LCAKKyAgICA3ODE1OCwgMTI4MDM2LCA1Mjc4LCA0OTQ1LCA0Mjg4MywgNDk1MCwgOTgzNDM4LCA2ODYyNSwgOTgzNDM2LCA3MjY5LCAwLCAKKyAgICA1OTY0LCAxMjkwOCwgOTgzNTU1LCAwLCA3NDc2NCwgNzQ0NzcsIDExOTE0NiwgMTk0OTM2LCA0OTQ5LCA5ODM0MjksIDQ0MywgCisgICAgOTgzNDI3LCA0OTQ0LCA1NDY3LCAxMTk2MDMsIDk4MzI1NCwgNjUxMzcsIDYwNDQsIDY1MzkyLCAwLCA0MjEzLCAwLCAKKyAgICA0MTMwMywgMCwgMTk0OTMxLCAxMTk5NjIsIDQxMzA2LCA3Mzk4NCwgMjY5OCwgMTI3MTU5LCAwLCAxMjA3MiwgMzE5MywgMCwgCisgICAgNDEzMDQsIDgyNCwgMTI4Njc2LCAxMjA5MSwgNzg4OTMsIDc4ODk0LCAxMTk4MTYsIDQ2NzMsIDY0ODA0LCA0Njc4LCAKKyAgICAxMTk4MjAsIDExOTgxOSwgNjUwNTksIDAsIDY3MzksIDAsIDU0ODEsIDM0OTAsIDExOTksIDExOTgxMSwgODM1NiwgNjk5NDcsIAorICAgIDExOTgzMiwgNDY3NywgMTI2ODgsIDMxMDIsIDAsIDQ2NzIsIDc4MTczLCA3ODE3NSwgNTUzMSwgNjgzNjcsIDQyNTc1LCAKKyAgICA3ODE3MCwgNzgxNjYsIDQ2NzQsIDQ1NDgsIDQ0MDA1LCAxMTk5NDksIDY4NjU4LCAxMTk5NDYsIDgwMjUsIDY4NjMwLCAKKyAgICAxMjcwMjQsIDE4NTUsIDk4MzQxMiwgNjg2NjksIDk4MzQxMCwgOTI0NDUsIDEyNzU1NCwgMCwgMTI3MzM5LCAxMTk2NTIsIAorICAgIDI3NDUsIDExNzk3LCA5ODM0MTgsIDEyODE1OSwgOTIwMiwgNDY1NCwgOTgzNDE0LCA5ODM0MTYsIDY4NjM4LCA3Mzk5MywgCisgICAgMTA1MjUsIDQ2NDksIDY1MjA5LCA5ODM0MTcsIDAsIDQ2NDgsIDQzMDgwLCA5ODM0MDYsIDk4MzQwNywgOTgzNDA0LCA2MjQ2LCAKKyAgICA2NDk1MCwgNzgyOCwgNDY1MCwgNjc3NywgNjc3NiwgNjc3NSwgNDY1MywgNzgyMiwgNzgwMDUsIDkyMzg0LCA0MzE4NywgCisgICAgODY2OSwgOTgzNDE1LCA2ODIxLCA2NTA5MywgMCwgNzg4ODEsIDI3MTYsIDAsIDk4MzA2MCwgOTgzNDE5LCAwLCA2ODM2OSwgCisgICAgMTIwMDU0LCAxMTA2MCwgODU0NywgMjcxMSwgNDIxNjUsIDc4MDI3LCA3ODAyNiwgNzk5MiwgMCwgMCwgNDY2MiwgNzgwMzMsIAorICAgIDc4MDMyLCA5MTQ5LCA5MTQ2LCA1OTksIDIwODEsIDc4MDMxLCA3ODAzMCwgMTk0OTYyLCA0NjU2LCAxMDEzMCwgNjg0NTAsIAorICAgIDc4MTEsIDQwOTk0LCAxOTQ5NjUsIDY0MTQsIDU5NjcsIDQ2NTgsIDM3MjUsIDU3MTMsIDU4MTQsIDQ2NjEsIDQyNDM0LCAKKyAgICA5ODM0MTEsIDAsIDAsIDY0OTA0LCA5MDI2LCAxMDgzMywgNzQ4NjQsIDc1NDcsIDQ4NjcsIDAsIDEwMDA4LCAxMDIyMiwgCisgICAgMzA1NCwgMTk0OTU2LCA5NzQ0LCA3ODg2MCwgNzYwNSwgNDYyMiwgMTE5NjU2LCA5ODMzOTUsIDk0MDcwLCA5ODMzOTMsIAorICAgIDk4MzM5NCwgOTgzMzkxLCA5MDQ1LCA3ODg4OCwgNDIyNSwgMTk5MjYsIDc4ODg3LCAxMjg4MCwgNjUzMDcsIDQ2MTcsIAorICAgIDc4ODgzLCA5ODMzODYsIDQxNzMyLCA0NjE2LCAxMDUxOCwgMTA0MjMsIDEwMzU5LCA5ODMzODAsIDU5NTgsIDAsIDk4MzQzMywgCisgICAgNDIxNSwgOTc4OSwgOTE3OTQxLCA0MzIxLCA0NjIxLCA5ODMzODksIDQxMzEzLCA1MjIsIDUzNjgsIDAsIDY1ODAzLCAwLCAKKyAgICA1MzY2LCAxMjIwMSwgNTM3MiwgMCwgOTgzNDA5LCAwLCA3NzIwLCA3MzkwLCAyNjk2LCA5ODM0MDAsIDAsIDQ2MzgsIAorICAgIDk4MzQwNSwgMTc5MCwgNzgyNDIsIDU5NjUsIDY0MzYzLCA2NjU2OSwgNjg2NDYsIDEyNzgzMywgNTM3NiwgMTgzNSwgNTMzNSwgCisgICAgMTk0OTY2LCAxMjgwODksIDQ2MzMsIDAsIDY4MTE5LCAxMTgwLCA0NjMyLCAxMjgwOTMsIDUzODcsIDUzMzMsIDAsIDAsIAorICAgIDQyMDk0LCA1MzMxLCA0NjM0LCAxMTkyOCwgOTgzNTk0LCA1MzM4LCA0NjM3LCAxMjgxNzAsIDU5NzEsIDQyNDE0LCAwLCAKKyAgICAxMjY4LCA2NTA5NywgNDIzNjEsIDAsIDAsIDczODUzLCAxNDI3LCAwLCAwLCA1OTcwLCAzNDMxLCAwLCAxMDM1OCwgMTA0MjIsIAorICAgIDQ3NTgsIDk4MzM3NCwgMTYwOCwgMjczOCwgMCwgMTA0NTUsIDQ3NTMsIDc0MDI2LCAxMTM0NCwgNDIyMiwgNjI0MCwgNTIzMSwgCisgICAgNzQzODQsIDk4MzM3OCwgNjgzNzcsIDYyNDgsIDk4MzM2MiwgOTgzMzYzLCA5ODMzNjAsIDQyMzE4LCA5MjU4MiwgNTIyOSwgCiAgICAgNDc1NywgMCwgMCwgMjcyOCwgNDc1MiwgNjQ1NjMsIDY1MjM1LCA1MjM0LCAwLCAxMjgxNDUsIDAsIDEwNzEzLCA3MTY2LCAwLCAKICAgICAyNjIyLCA3NDYwLCAxMjczMDIsIDAsIDAsIDg5NTQsIDc0NzYwLCA2NTE4OSwgMjYzMiwgNDI2MTcsIDEwMTA4LCAxMDExLCAKICAgICA1NTc0LCAxODUzLCAyNzA5LCA2NTEzOSwgNTU3NywgMCwgMCwgMTE4ODcxLCA2ODY0MSwgODk2NSwgNzYzNSwgNDIxNzcsIAotICAgIDUzMTYsIDAsIDUzMTQsIDY0NTEsIDU1NzIsIDY2NDY0LCA1MzEyLCAwLCA1NTI1LCA1MzMwLCA1MzE5LCA5ODM0MTIsIAotICAgIDk4Mzg2MywgMTk0OTA3LCA0NDAwMywgMCwgOTgzNDcyLCA5ODM0MTUsIDEyMDQ5OCwgMTI3ODUxLCAxOTUwMDksIDk4Mzg1NiwgCi0gICAgNzQwMjIsIDk4MzQxNCwgNjQ2MDksIDY4NjQzLCAxMjA2MzQsIDk4MzQ4MSwgNTcyMSwgOTgzMzkzLCA1NTE5LCA4NjMyLCAKLSAgICA2NjQ2NSwgMTEyNjcsIDczOTYxLCA5MjI3OCwgNTcyMCwgOTgzMzQ0LCAxNjkyLCA0MjE5LCA0NjEwLCA4Njk2LCA0MzA1LCAKLSAgICAwLCA0NjA5LCA0MzQ3OCwgNDYxNCwgNTQxLCA5ODMzNDcsIDUyODcsIDUzMDksIDUyODUsIDY4Mzg5LCA1OTYxLCA0NjQ3LCAKLSAgICA1NiwgNDIxNiwgMTA1NzcsIDQxMzgxLCA2MDEsIDQ2MTMsIDk4MzM0MSwgOTgzMzM4LCA3Nzg0OSwgNDYwOCwgNjQyNjAsIAorICAgIDUzMTYsIDAsIDUzMTQsIDY0NTEsIDU1NzIsIDY2NDY0LCA1MzEyLCAwLCA1NTI1LCA1MzMwLCA1MzE5LCA5ODM0MjAsIAorICAgIDk4Mzg3MiwgMTk0OTA3LCA0NDAwMywgMCwgOTgzNDgwLCA5ODM0MjMsIDEyMDQ5OCwgMTI3ODUxLCAxOTUwMDksIDk4Mzg2NSwgCisgICAgNzQwMjIsIDk4MzQyMiwgNjQ2MDksIDY4NjQzLCAxMjA2MzQsIDk4MzQ4OSwgNTcyMSwgOTgzNDAxLCA1NTE5LCA4NjMyLCAKKyAgICA2NjQ2NSwgMTEyNjcsIDczOTYxLCA5MjI3OCwgNTcyMCwgOTgzMzUyLCAxNjkyLCA0MjE5LCA0NjEwLCA4Njk2LCA0MzA1LCAKKyAgICAwLCA0NjA5LCA0MzQ3OCwgNDYxNCwgNTQxLCA5ODMzNTUsIDUyODcsIDUzMDksIDUyODUsIDY4Mzg5LCA1OTYxLCA0NjQ3LCAKKyAgICA1NiwgNDIxNiwgMTA1NzcsIDQxMzgxLCA2MDEsIDQ2MTMsIDk4MzM0OSwgOTgzMzQ2LCA3Nzg0OSwgNDYwOCwgNjQyNjAsIAogICAgIDQxMTI0LCA1MTkwLCA2NzYyOCwgMCwgNjgxNDUsIDcwODYsIDAsIDY3OTk4LCA2NzYyMCwgMCwgMjczNCwgMTEwNzQsIDAsIAogICAgIDY3NjI3LCA0MzU5MywgMCwgNjc2MjUsIDU5NjAsIDAsIDg5OTIsIDQyNTkzLCAxMjgyNjAsIDE3ODIsIDY3NjIyLCA2ODExNCwgCiAgICAgMTE5OTM5LCAwLCA2ODE4MCwgNTUwMSwgMTE5OTUyLCA0MjUwOCwgNzQ0MiwgNDM2NjUsIDM1OSwgNDEyNTMsIDY4MzkyLCAKICAgICA2MjM5LCAxMTk5NTYsIDQxMjU2LCAwLCA2ODEzNCwgMCwgNzQyMDksIDkxNzU1MCwgOTM0NiwgNjk2NjAsIDQxMjU0LCAKICAgICAxMjgwNDcsIDQzMjkxLCAzNzY3LCA1NzM3LCAwLCA0ODY1LCAwLCA1NzQwLCA5MTc5OTcsIDU3MzYsIDQzNjgsIDY0NzI0LCAKLSAgICA3MTkzLCA2ODEzNywgMCwgNTczOSwgNDEwMjQsIDQ4NjYsIDAsIDczOTA0LCA5ODM4MzEsIDQ4NjksIDEyMDU2MywgMCwgCi0gICAgNDIyMywgMTI4MjAxLCA2NjUwLCAxMjY1MDksIDAsIDk4MzQ1NSwgMTI3ODkwLCA0ODcwLCAxMjA0NDUsIDY4NjYxLCA2NzE2LCAKKyAgICA3MTkzLCA2ODEzNywgMCwgNTczOSwgNDEwMjQsIDQ4NjYsIDAsIDczOTA0LCA5ODM4NDAsIDQ4NjksIDEyMDU2MywgMCwgCisgICAgNDIyMywgMTI4MjAxLCA2NjUwLCAxMjY1MDksIDAsIDk4MzQ2MywgMTI3ODkwLCA0ODcwLCAxMjA0NDUsIDY4NjYxLCA2NzE2LCAKICAgICA3ODE3NiwgNjg2NjcsIDY4MzgyLCA2ODY3NiwgMTI3OTI1LCAxMDEyMiwgNDg2NCwgNjY1NjgsIDQxNDQsIDc5MzcsIDAsIAogICAgIDYyNDUsIDY4NjUyLCAyNzMyLCA0MjczNCwgNzQ1LCAwLCAxOTUwOTcsIDkyMTk1LCA0Nzc3LCA3ODIxLCAwLCA2ODYzMSwgCi0gICAgNDI3NzUsIDAsIDE5NDk1NCwgMCwgMzA5NywgMCwgNTk2NiwgOTgzNDc4LCA0Nzc4LCAwLCAxMDg2MywgMCwgNDc4MSwgMCwgCisgICAgNDI3NzUsIDAsIDE5NDk1NCwgMCwgMzA5NywgMCwgNTk2NiwgOTgzNDg2LCA0Nzc4LCAwLCAxMDg2MywgMCwgNDc4MSwgMCwgCiAgICAgNjQ0MDcsIDAsIDEyODMyMywgODU3NywgMTI4NTYyLCA2ODE5NiwgNDMyODUsIDEwMjE2LCA0NzgyLCAwLCAwLCAxMjA3NTcsIAogICAgIDY4NjE4LCAxMjMyNSwgNDMwNTYsIDg3MTcsIDAsIDAsIDQ3NzYsIDczODE4LCAxMTQ5MiwgODcwMCwgMCwgMTMxNzYsIAogICAgIDY4MzYzLCAxMDQyNiwgMCwgOTE3NTk5LCAxMDM2MiwgMTk0NzA2LCAxNzE1LCA0ODQ5LCA4MjQyLCA5NTYxLCA3MzkyMiwgCiAgICAgNDMyNzgsIDQyNjM1LCAwLCAwLCA1OTYzLCA5MTc5MjYsIDAsIDAsIDQ4NTAsIDAsIDE2MDcsIDQ2NiwgNDg1MywgMTE4OTk1LCAKLSAgICA0ODU0LCAxMjc5MTgsIDUxNjQsIDk4Mzg2MSwgMTM1MCwgNTEyNCwgNjQ0MjAsIDE5OTMsIDUzNjIsIDg0NzEsIDI3MDgsIAorICAgIDQ4NTQsIDEyNzkxOCwgNTE2NCwgOTgzODcwLCAxMzUwLCA1MTI0LCA2NDQyMCwgMTk5MywgNTM2MiwgODQ3MSwgMjcwOCwgCiAgICAgOTI0NzEsIDEyNDQ1LCAzNzg1LCAyMzQsIDMxOTksIDAsIDQxMjY4LCA0ODQ4LCAyNTMwLCA5MTc5MDksIDIwNjgsIDE5NjQsIAogICAgIDAsIDczNzYyLCAxMDQ1OCwgMCwgODU3NiwgNzg1NDMsIDAsIDI3MDQsIDQ3OTQsIDAsIDY4MjExLCA4MzIyLCA0Nzk3LCAKLSAgICA1NzUzLCAwLCAyNjk0LCA0NzkyLCAwLCAyNDM5LCA2NTEwNCwgNjk4MDQsIDk4MzQxNiwgMzAzLCA5ODMxMDEsIDkyNjIyLCAKLSAgICA5ODM0MTcsIDI0MzcsIDAsIDQyMjEsIDQ4NDQsIDkyMjE2LCAwLCAwLCAwLCA3MDA0MiwgMCwgNDMyOTIsIDAsIDI0NDEsIAorICAgIDU3NTMsIDAsIDI2OTQsIDQ3OTIsIDAsIDI0MzksIDY1MTA0LCA2OTgwNCwgOTgzNDI0LCAzMDMsIDk4MzEwMSwgOTI2MjIsIAorICAgIDk4MzQyNSwgMjQzNywgMCwgNDIyMSwgNDg0NCwgOTIyMTYsIDAsIDAsIDAsIDcwMDQyLCAwLCA0MzI5MiwgMCwgMjQ0MSwgCiAgICAgMTA3MzksIDY1MDkwLCAwLCAxMTkzMjcsIDEyNjU0MSwgMjQ1MSwgMjcxNCwgMTE5MzI2LCAwLCA0MzM3OSwgNDkzNywgCiAgICAgNDMzNzYsIDc1MywgNTg0OSwgMTA1OTcsIDQzMDg5LCAxMTcyMiwgOTI0OCwgOTI1NTUsIDQyODc5LCAxMTcyNSwgMCwgMCwgCiAgICAgMjcyNiwgMzEwNywgNzM5NTgsIDQ5NDEsIDY0OTM3LCAxMTkyMzMsIDkxNDAsIDE0MDgsIDUyNjEsIDQ2MDcsIDAsIDE4MSwgCi0gICAgOTgzNDIyLCA0OTQyLCA5NTM5LCA0OTM4LCAwLCA2NTIwMSwgNTI1OSwgOTM2OSwgNjQxODUsIDQxNDIsIDUyNTcsIAorICAgIDk4MzQzMCwgNDk0MiwgOTUzOSwgNDkzOCwgMCwgNjUyMDEsIDUyNTksIDkzNjksIDY0MTg1LCA0MTQyLCA1MjU3LCAKICAgICA5ODM2MDEsIDAsIDQ5NjQsIDUyNjQsIDY0MTc4LCA2NDE3NywgMTI5NzksIDQxNDExLCA2NDE4MiwgNjQxODEsIDY0MTgwLCAKICAgICA2NDE3OSwgOTQ4MiwgNDg3MywgNDEyMzEsIDE4MjIsIDQyNTI2LCAxMjg1ODEsIDEyNzU4LCAzODY1LCAwLCAwLCAxMDUwMCwgCiAgICAgMCwgMTE5MDI0LCA3ODAyOCwgOTI0MDgsIDk4MzAsIDQzNjQyLCAzODksIDEwODkzLCA3NTIxLCAxMjc4NzksIDQ4NzIsIAogICAgIDU0NjMsIDAsIDMxMjUsIDk1NjcsIDAsIDQ4NzgsIDU0NTksIDQ2MDQsIDkxNzkzMSwgOTU1NywgNTQ2NSwgNjg2MTcsIDAsIAotICAgIDExNDk0LCAxMjY0OTIsIDk1NjMsIDEwODY1LCA3NDU3MCwgNDMyNzksIDY0MTg2LCA5ODM0MzEsIDc4NzE0LCA2NDE5MSwgCisgICAgMTE0OTQsIDEyNjQ5MiwgOTU2MywgMTA4NjUsIDc0NTcwLCA0MzI3OSwgNjQxODYsIDk4MzQzOSwgNzg3MTQsIDY0MTkxLCAKICAgICA2NDE5MCwgODg5OCwgNjQxODgsIDAsIDQxMDMwLCA3ODgzNiwgMCwgOTE3ODM1LCA3ODgyMCwgOTE3ODM0LCAwLCA3ODgwNSwgCi0gICAgNDEwMzEsIDc4ODAxLCAxMTk2MCwgNjc0NSwgMzA4MiwgOTgzNDI5LCA3ODUzOSwgNzM5MTksIDEwNTczLCA0MTc0NCwgCisgICAgNDEwMzEsIDc4ODAxLCAxMTk2MCwgNjc0NSwgMzA4MiwgOTgzNDM3LCA3ODUzOSwgNzM5MTksIDEwNTczLCA0MTc0NCwgCiAgICAgNzA3OSwgNTg1NiwgMTI3MDQzLCA1MTYzLCA3ODgwOSwgMTI4MTYyLCAxODE3LCA2NjcyNCwgNzg1MzgsIDAsIDEwNTY0LCAKICAgICA3NzYzLCAxMzA3NywgNDE4MTMsIDQ0MDAsIDQxNzQ1LCA2NDIwNywgMTAyNzUsIDg5MjUsIDEwMzcxLCAxMDMwNywgNDE4MTQsIAogICAgIDQyNDgsIDAsIDAsIDQ1NDEsIDYyOTksIDY0MjA0LCA2NDIwMywgNjQyMDEsIDY0MjAwLCA2NDE5OSwgNjQxOTgsIDEyNjQ3MSwgCkBAIC0xOTQ4NSwzMyArMTk1MDUsMzMgQEAKICAgICA2NTIyMiwgNjk5OCwgNzgxODAsIDAsIDMxMjgsIDQ3ODksIDUwNjcsIDUwNjYsIDExODg0OSwgNDc4NCwgMCwgODgyNywgCiAgICAgMTE0NiwgNTA2NSwgNjk4OTAsIDc4MTkyLCA2ODEzNiwgNzgxOTAsIDQzNDEyLCA1MDY0LCAyNDMxLCAwLCA5NDUwLCAxODA5LCAKICAgICAwLCA3ODIwMCwgNzgyMDEsIDUwNjIsIDEyNjQsIDY0ODE3LCAxMzI1NCwgMTE2OTcsIDEyNjU5OCwgOTc4NSwgNjQ3MTYsIDAsIAotICAgIDM5MzMsIDc0NTU5LCA0NzQwLCA3OTU0LCAwLCAwLCA0MjYwOSwgMCwgNzQxNzUsIDAsIDEyNzAxNiwgMCwgOTgzODY0LCAKKyAgICAzOTMzLCA3NDU1OSwgNDc0MCwgNzk1NCwgMCwgMCwgNDI2MDksIDAsIDc0MTc1LCAwLCAxMjcwMTYsIDAsIDk4Mzg3MywgCiAgICAgNDIxMzAsIDAsIDUxNTEsIDkxNzgyOSwgOTE3ODIzLCAwLCA5Mzk4MCwgMCwgNzYyMCwgMzgwMCwgNjUxMjIsIDAsIDAsIAogICAgIDgzNTUsIDc4NTQsIDAsIDk1NCwgNjQ5MjcsIDQxODUsIDQxMDQ1LCAxMjcxNDEsIDQxNDM4LCA0MTQzOSwgNjg2NjYsIAotICAgIDEwNzExLCA0NTkzLCAxMjc3NDUsIDEyMDU4NCwgOTgzNDAwLCA2NDc3NCwgODA1MywgMTA1MzIsIDY2NzI3LCAwLCAwLCAwLCAKKyAgICAxMDcxMSwgNDU5MywgMTI3NzQ1LCAxMjA1ODQsIDk4MzQwOCwgNjQ3NzQsIDgwNTMsIDEwNTMyLCA2NjcyNywgMCwgMCwgMCwgCiAgICAgNjQ3NTksIDYzODEsIDUxNjYsIDk4ODgsIDEyNzgwMCwgNTE0OCwgNDI4MzQsIDAsIDc4MjA1LCA3ODIwNiwgNDM3ODcsIAogICAgIDc4MjA0LCA2NDEzMSwgMzExOSwgOTE3ODE0LCAwLCAzMDYwLCA2NDEzNSwgOTk4NiwgMCwgNzc4NzYsIDYzNiwgMTE2OTgsIAotICAgIDAsIDk4MzQ0MywgOTkxNiwgMTE3MDEsIDc4MzYsIDQyNzQxLCA2NDEzNywgODMyMCwgNzg2NDAsIDg4NjMsIDkyNDMxLCAKLSAgICAxMTk5NjAsIDE0NzcsIDQzMjg5LCAwLCA3NDM1OCwgODYxOCwgOTgzMzk0LCA5OTA4LCA5ODM5NzIsIDAsIDAsIDM5MzcsIAotICAgIDEyMzEyLCAwLCA5ODMzOTUsIDAsIDY0NzgxLCA5MTIsIDYzNDksIDQ1MzYsIDkzOTU0LCA3NDUzMiwgMTI2NTk0LCA2MjQ0LCAKLSAgICA5MjIwOSwgNzEzNDEsIDM5MzUsIDEyMDY2NSwgOTgzNDY4LCAwLCAxMTk1MCwgNTM5MiwgNDIyNDgsIDY1MTI5LCA2ODY1NiwgCisgICAgMCwgOTgzNDUxLCA5OTE2LCAxMTcwMSwgNzgzNiwgNDI3NDEsIDY0MTM3LCA4MzIwLCA3ODY0MCwgODg2MywgOTI0MzEsIAorICAgIDExOTk2MCwgMTQ3NywgNDMyODksIDAsIDc0MzU4LCA4NjE4LCA5ODM0MDIsIDk5MDgsIDk4Mzk4MSwgMCwgMCwgMzkzNywgCisgICAgMTIzMTIsIDAsIDk4MzQwMywgMCwgNjQ3ODEsIDkxMiwgNjM0OSwgNDUzNiwgOTM5NTQsIDc0NTMyLCAxMjY1OTQsIDYyNDQsIAorICAgIDkyMjA5LCA3MTM0MSwgMzkzNSwgMTIwNjY1LCA5ODM0NzYsIDAsIDExOTUwLCA1MzkyLCA0MjI0OCwgNjUxMjksIDY4NjU2LCAKICAgICA1Mzk3LCAwLCAxMjA0NiwgMTI1OTksIDAsIDEyODI2MSwgNTM5NSwgMCwgNTM5MywgMzU0LCA2ODYxNSwgMTE5OTQ4LCAKICAgICA3ODUwMywgMCwgMCwgNDIwMzksIDAsIDAsIDY0MTQyLCA2MjYsIDAsIDU4OTUsIDAsIDAsIDU3ODAsIDAsIDAsIDEyODg3NCwgCiAgICAgMCwgMCwgNDMyOTcsIDk4MzA3OSwgNDMxMSwgNDY0NCwgODgxOCwgMCwgMTI4MTg2LCAwLCA3MTQ1LCAzOTE4LCA2NjQ1MiwgCiAgICAgMzc5NywgMTY0NCwgOTIzNDYsIDk2NTgsIDQxNDAsIDExMzg1LCA2NTk0NywgNjQ1NSwgOTAzMCwgODEzLCAxMTk5NDUsIAogICAgIDY4MTMxLCA0MTQ2LCAxMTk5NTcsIDUzNjAsIDI0NjYsIDAsIDY3NjY5LCAxMTk5NDIsIDYyNDksIDQyMTE3LCA5MjI4NywgCi0gICAgMTI4MjI0LCAwLCAwLCA3NDA0NiwgNDM3NDUsIDQ5MTEsIDk4OCwgOTE3ODA3LCAwLCA5ODM0NjAsIDQzMDYxLCA3MDU0LCAKKyAgICAxMjgyMjQsIDAsIDAsIDc0MDQ2LCA0Mzc0NSwgNDkxMSwgOTg4LCA5MTc4MDcsIDAsIDk4MzQ2OCwgNDMwNjEsIDcwNTQsIAogICAgIDY0MTQ3LCAwLCA2NDkyMCwgNjgxOTUsIDY2OTgsIDExODkzMywgOTI1MDYsIDAsIDEyMDAwNiwgMTE5ODEsIDEyMjAyLCAwLCAKICAgICAxMTAzMiwgNjc2NTQsIDYwOTMsIDExNjA4LCA5NzUsIDY4NjYyLCA2NTg0MywgMTcwLCAwLCAwLCA0MTY5LCAwLCA0MTg1OSwgCiAgICAgNjA1OCwgMTIwNDAxLCAxMzIwMywgMTIwNjU3LCAwLCAwLCA2ODY1NywgOTgxOCwgMTAxNzgsIDEwMzI0LCA0MjEwNiwgCiAgICAgNTg5OCwgNzQ1NDAsIDQ3MzgsIDQxODU2LCA3MDYyLCA5MTc4NjUsIDQ3MzcsIDExNzc5LCA0NzQyLCAxMjA1NjQsIDkyMzkxLCAKLSAgICA3MzczNiwgOTgzMzU2LCA5ODI1LCA2NDQ4LCA2NzE1LCAxMjcwMDgsIDQ4MzEsIDAsIDkyNTI1LCAwLCA1MzAwLCA0NzQxLCAKLSAgICA0MjEwOCwgOTgzMzQ2LCA2NDE1OSwgNDczNiwgNjQxNDgsIDAsIDg0OSwgOTIxOTEsIDc4NDkxLCA0MzI4OCwgMCwgNjY2MjAsIAotICAgIDkxNzkxNiwgMTI3MzMxLCA2NTU0OSwgOTQ5NiwgNjQ1OTgsIDExODg2NiwgOTgzMzU4LCA3ODc2LCA2ODEzMiwgOTE3ODcyLCAKKyAgICA3MzczNiwgOTgzMzY0LCA5ODI1LCA2NDQ4LCA2NzE1LCAxMjcwMDgsIDQ4MzEsIDAsIDkyNTI1LCAwLCA1MzAwLCA0NzQxLCAKKyAgICA0MjEwOCwgOTgzMzU0LCA2NDE1OSwgNDczNiwgNjQxNDgsIDAsIDg0OSwgOTIxOTEsIDc4NDkxLCA0MzI4OCwgMCwgNjY2MjAsIAorICAgIDkxNzkxNiwgMTI3MzMxLCA2NTU0OSwgOTQ5NiwgNjQ1OTgsIDExODg2NiwgOTgzMzY2LCA3ODc2LCA2ODEzMiwgOTE3ODcyLCAKICAgICAzOTI4LCA5MTc4NzAsIDQzMzc4LCAxMDcwNiwgNzE5OCwgMCwgNDg0MiwgMTIwNTMsIDEyODEyOSwgMCwgNDg0MSwgMCwgCiAgICAgNDE3MSwgMTIwMDgsIDYyNTEsIDM5MjMsIDE0OTAsIDAsIDExOTU5MSwgMTI2NTEyLCA0MDk3MiwgNTI0NSwgMCwgMTAxMTQsIAogICAgIDQyMDAxLCA0MTg4OCwgNDg0NSwgODMzMiwgNDA5NzQsIDY0MzQ3LCA0ODQwLCA5MDc3LCA3ODM0NiwgMTc0NywgOTE3ODQ5LCAKLSAgICA0ODI1LCA2OTI0MCwgOTE3ODUyLCA2ODY1NSwgMCwgOTgzMzgwLCAwLCAwLCA2ODYyOCwgOTgzMzM5LCA5ODUwLCAxMTg5MzcsIAorICAgIDQ4MjUsIDY5MjQwLCA5MTc4NTIsIDY4NjU1LCAwLCA5ODMzODgsIDAsIDAsIDY4NjI4LCA5ODMzNDcsIDk4NTAsIDExODkzNywgCiAgICAgMzY3LCAxNDcyLCA5MTc4NTksIDY2ODcsIDEyNzQsIDAsIDU5MDUsIDEyMzM5LCA4OTE5LCA3Mzk1MywgMTA5MDcsIDY1MjYxLCAKICAgICAxMTAyMywgMTE5NTU5LCA0ODMwLCA5MTM0LCA3ODY2NiwgNjQxMjYsIDQzMDExLCAwLCAxMjY2MjYsIDY0MTAxLCAwLCAwLCAKICAgICA0ODI0LCAxMDYxNCwgMTE5NjU5LCAwLCAxODg4LCAxOTYwLCA3ODYxLCA5MTc4NTYsIDc4NTI0LCA0MTgzNiwgNDMwMTIsIApAQCAtMTk1MjAsMTIgKzE5NTQwLDEyIEBACiAgICAgNjQxMTgsIDEyNjk5OCwgMTI5NjIsIDAsIDEyNjU4MCwgNDAxNywgMTI4MjcsIDUyNDEsIDEyMDM5MiwgMCwgNDExMTgsIAogICAgIDM5MjQsIDAsIDExMzY2LCA5MTc4NDMsIDAsIDAsIDkxNzg0NiwgNDExMTYsIDkxNzg0NCwgOTE3NTY0LCAwLCAxMTM2MywgCiAgICAgMTIwNTcsIDExOTE3LCAxNTY3LCA3NDAwMCwgNDcyMSwgMTI2NjQxLCA2NjIwMiwgODk1NywgNDEzOSwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMTI3NDAsIDEyODcwMiwgNDcyMiwgNjgxNiwgMTI3NzkzLCAxMjc1OSwgNDcyNSwgOTgzMzc1LCA0NzI2LCAwLCAKLSAgICAxOTQ4OTIsIDAsIDEyODMyMSwgOTE3OTA1LCAwLCAxMjc1NSwgMTI3NjIsIDQwMTUsIDAsIDgwNTIsIDQ3NiwgMCwgMCwgCi0gICAgMTI4Mjk0LCA2NDIxMiwgNDEwMjAsIDEzODIsIDY0MjA5LCA2NDIxNiwgNDQwMDIsIDY0MjE0LCAxNjU2LCA0MTgzMSwgMCwgCi0gICAgMCwgNDE4NDMsIDg3MjAsIDM5MDgsIDE0NTIsIDEzMTExLCAwLCA2NDA2NywgMTI3MzI4LCA4NTUyLCA2NDExMywgNDE4NDUsIAotICAgIDM4NDksIDc4NzMyLCA2NjIzMiwgOTc3OCwgMTIwMDY2LCA1ODkxLCA3MDY0LCA1NSwgOTk0OCwgMTE5MDg1LCAwLCAwLCAKLSAgICA3OTM1LCAyNDIwLCAwLCAxMTE0LCA5MjU5OSwgNjc1ODUsIDcwMTA0LCAxMjAwNTMsIDkyMzUwLCAxMjAwNTEsIDM5MzgsIAorICAgIDAsIDEyNzQwLCAxMjg3MDIsIDQ3MjIsIDY4MTYsIDEyNzc5MywgMTI3NTksIDQ3MjUsIDk4MzM4MywgNDcyNiwgMCwgCisgICAgMTk0ODkyLCA5ODM2MjIsIDEyODMyMSwgOTE3OTA1LCAwLCAxMjc1NSwgMTI3NjIsIDQwMTUsIDAsIDgwNTIsIDQ3NiwgMCwgCisgICAgMCwgMTI4Mjk0LCA2NDIxMiwgNDEwMjAsIDEzODIsIDY0MjA5LCA2NDIxNiwgNDQwMDIsIDY0MjE0LCAxNjU2LCA0MTgzMSwgCisgICAgMCwgMCwgNDE4NDMsIDg3MjAsIDM5MDgsIDE0NTIsIDEzMTExLCAwLCA2NDA2NywgMTI3MzI4LCA4NTUyLCA2NDExMywgCisgICAgNDE4NDUsIDM4NDksIDc4NzMyLCA2NjIzMiwgOTc3OCwgMTIwMDY2LCA1ODkxLCA3MDY0LCA1NSwgOTk0OCwgMTE5MDg1LCAwLCAKKyAgICAwLCA3OTM1LCAyNDIwLCAwLCAxMTE0LCA5MjU5OSwgNjc1ODUsIDcwMTA0LCAxMjAwNTMsIDkyMzUwLCAxMjAwNTEsIDM5MzgsIAogICAgIDEyMDA1NywgNjU0MTcsIDY0NzE3LCAxMjAwNjAsIDEyMDA2MSwgNjU0MTUsIDEyMDA1OSwgNjI5MiwgNjUzMDMsIDc5NTUsIAogICAgIDY0NTIsIDQ3MTMsIDEyODE5NiwgNjYyNDksIDkxNzg4NSwgOTE3ODkwLCA5MTc4OTEsIDY1MTUyLCA3MTksIDEyMDA0NCwgCiAgICAgNzg2MjMsIDEyMDA0MiwgNjcxMywgNDUzMiwgNjU0MTIsIDY5ODIyLCAxMDg2OCwgNDcxNywgMjM0OSwgNTkwMiwgNjY0NTAsIApAQCAtMTk1MzcsMjYgKzE5NTU3LDI2IEBACiAgICAgNDgxNCwgMCwgNDgxMCwgMCwgMCwgNjQ5MjgsIDEwNTQzLCAwLCAzNTIyLCA3MTMzNSwgNDE0LCA2NTQwNCwgMCwgMTk1MDI3LCAKICAgICA2NDU2LCA3MzgyMCwgMCwgNjY5MSwgNDIxOTMsIDkyMjI1LCAxMjgxNzEsIDAsIDc0NDk1LCAwLCAwLCAwLCAxMTg4MjAsIAogICAgIDk3NTEsIDY1NDA3LCAxMjgwODUsIDExNzcwLCAzOTE5LCAwLCAwLCA2NTA2MSwgMCwgMCwgMCwgMTIyMzUsIDAsIDAsIAotICAgIDEyNzIzMywgNjQwOTIsIDk4MzQ2MiwgNjQwODAsIDAsIDY0MDkwLCAwLCA2OTkxMywgMTAxNjIsIDEwMzEwLCAwLCA4NDU0LCAKKyAgICAxMjcyMzMsIDY0MDkyLCA5ODM0NzAsIDY0MDgwLCAwLCA2NDA5MCwgMCwgNjk5MTMsIDEwMTYyLCAxMDMxMCwgMCwgODQ1NCwgCiAgICAgMTI3ODg4LCA0MjAzOCwgMzg3LCA0MTM2MywgMTI3MzcsIDAsIDQ3ODAsIDQzMzY4LCAwLCA2NDMxMCwgNjQ2MjEsIDY3MzIsIAotICAgIDc4MTE2LCAwLCA5ODMxMzksIDAsIDk4MzA3NCwgODg5NiwgMCwgMzc1LCA2OTc2LCA2NjU4MiwgMTE5MDA1LCA5ODM4NjUsIAotICAgIDAsIDk4MzQyNiwgMTE5MjAyLCAxMTkyMDMsIDEyNTI2LCA0MzEyMCwgMjMxNSwgMCwgMTkzOCwgMTE5MTk3LCAwLCA0NTI5LCAKLSAgICAxMTkyMDAsIDExOTIwMSwgMTE5MTk4LCAxMTkxOTksIDY5NjkyLCA5ODM0MjQsIDY5Njk4LCAxMzE1MCwgNjQ0OTIsIDAsIDAsIAorICAgIDc4MTE2LCAwLCA5ODMxMzksIDAsIDk4MzA3NCwgODg5NiwgMCwgMzc1LCA2OTc2LCA2NjU4MiwgMTE5MDA1LCA5ODM4NzQsIAorICAgIDAsIDk4MzQzNCwgMTE5MjAyLCAxMTkyMDMsIDEyNTI2LCA0MzEyMCwgMjMxNSwgMCwgMTkzOCwgMTE5MTk3LCAwLCA0NTI5LCAKKyAgICAxMTkyMDAsIDExOTIwMSwgMTE5MTk4LCAxMTkxOTksIDY5NjkyLCA5ODM0MzIsIDY5Njk4LCAxMzE1MCwgNjQ0OTIsIDAsIDAsIAogICAgIDIyOTEsIDEyOTAyLCAwLCA0Mjg5MSwgNjYzMjcsIDc0Mjk4LCA5MTc4NTcsIDEwNzk5LCA2OTY5MCwgMjU4NywgNjYzNzIsIAogICAgIDAsIDQxOTMsIDkyMjUwLCA0MjQxLCA5ODMwNTcsIDc5OTgsIDAsIDAsIDAsIDEyNjY0MCwgMjMxNiwgMTE4ODIxLCAwLCAwLCAKLSAgICAwLCA2NDI5NywgNzQ3OTksIDkyNDQyLCA3NDE0MCwgMCwgNTM3MywgMCwgOTgzODc3LCAzNzYyLCAxMDAxNSwgMTIwNjcyLCAKKyAgICAwLCA2NDI5NywgNzQ3OTksIDkyNDQyLCA3NDE0MCwgMCwgNTM3MywgMCwgOTgzODg2LCAzNzYyLCAxMDAxNSwgMTIwNjcyLCAKICAgICAxMTkyMzIsIDAsIDQxNTkwLCAwLCA3MDA5OCwgMzc4MCwgNzQ4NSwgNTc3OSwgMCwgNDIwMzcsIDAsIDM5MDYsIDEyMzQ5LCAKICAgICAwLCA4MzI2LCAwLCA2NTQ5OCwgMzc2MywgNjk4MywgNTYxOCwgMCwgMzc3OSwgMCwgNDM2MTMsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDI4MCwgNzQ1NTgsIDEyNzMzMiwgNjgxMzgsIDEzMDcyLCAxODk0LCAwLCAwLCA2NTQ3OCwgNDMzMTAsIDcyMzEsIDAsIAotICAgIDExNzczLCAwLCAwLCAwLCAwLCAyNTUxLCAwLCA2NDUzLCAxMDIwMCwgNjIzNSwgOTgzNzQzLCAxMTkyMzcsIDAsIDEyODgwNSwgCisgICAgMTE3NzMsIDAsIDAsIDAsIDAsIDI1NTEsIDAsIDY0NTMsIDEwMjAwLCA2MjM1LCA5ODM3NTIsIDExOTIzNywgMCwgMTI4ODA1LCAKICAgICA0NDcwLCAxMTgyNiwgOTE3NTU3LCA3NzgwLCA1MzY5LCAxMTg5NTgsIDUyNDksIDAsIDUzNjcsIDg3NTYsIDEyNzE0MywgMCwgCi0gICAgNTM3NywgMTIwNTg1LCA2ODE0MywgMTY4OCwgNzgyNDUsIDk4MzM0OCwgNjk2ODUsIDk4Mzc0NywgMCwgMCwgNDQwMjAsIAorICAgIDUzNzcsIDEyMDU4NSwgNjgxNDMsIDE2ODgsIDc4MjQ1LCA5ODMzNTYsIDY5Njg1LCA5ODM3NTYsIDAsIDAsIDQ0MDIwLCAKICAgICA2ODA4LCA0MTMxOSwgMTMwMCwgMTA2NTAsIDQxNjkyLCA2NDUwNSwgMjI5MCwgMCwgMTE5NjI0LCAxNDY1LCAxMDg1MCwgCiAgICAgMzk0MywgMCwgNDEyMDUsIDQxMzE1LCAxMTg5NjEsIDAsIDAsIDUzNTIsIDAsIDAsIDg4MzksIDQxMzE0LCA3Mzg0LCA3Nzg1LCAKICAgICA0MTIwNCwgMTI3MzIyLCA0MTIwOSwgNjk2MzcsIDkyMjQxLCA0MzYwNywgMCwgMCwgNTQyMCwgMzg5NywgMTAxMzQsIDAsIAogICAgIDc0NDE3LCA0MDE4LCA3MTUwLCA2ODEyNywgMCwgMCwgMCwgMCwgMTI3NTI2LCAyNTYxLCA2ODYyMSwgMzU0MiwgNzE0OCwgCiAgICAgMTIwNzYsIDc5NTEsIDY4MTUyLCAxMTg4NTcsIDUzMDMsIDYyNzYsIDE3MDYsIDAsIDc4NzUxLCA3MTQ2LCAwLCA2NTE1MCwgCi0gICAgNDE4MTksIDAsIDczOTUxLCAxMDg0NywgNDE4MjIsIDk5ODUsIDg2MCwgMCwgMTA1MDYsIDk4MzQyNywgNjk2NDEsIDEwNzUzLCAKKyAgICA0MTgxOSwgMCwgNzM5NTEsIDEwODQ3LCA0MTgyMiwgOTk4NSwgODYwLCAwLCAxMDUwNiwgOTgzNDM1LCA2OTY0MSwgMTA3NTMsIAogICAgIDEwODMwLCAwLCA2MTUsIDY0NDkwLCA3NTc0LCA5MjYxNywgNzc5MjIsIDAsIDEyOTA5LCA0MzAxNiwgNjQ1NTksIDEyNzAyOCwgCiAgICAgMCwgMCwgNjc5OTYsIDIwMjAsIDAsIDQwMjIsIDEyODc4MywgMCwgNzc5MjMsIDEyNjU5MywgNDE2OTEsIDAsIDAsIDc0MzI5LCAKICAgICAwLCA2NDYyMiwgOTA3MCwgMCwgNjg0MTEsIDM5MTEsIDQyODI5LCA0MzEyMiwgMTAzMywgNzQ0NDAsIDAsIDcwMDAsIDM5MDQsIApAQCAtMTk1NzEsNyArMTk1OTEsNyBAQAogICAgIDY4Njc1LCAxMjgwNTQsIDE1MTEsIDkzMjQsIDc4MjExLCAxMDUxOSwgNjYzMzEsIDM0NTQsIDE5OTMwLCAwLCA0MTAxOSwgMCwgCiAgICAgMCwgNjUyOTIsIDY4MjIsIDEyODYyLCAwLCAwLCA0MjE0MywgNDE4MjgsIDc4MjA3LCA2NTUzMSwgNzgyMDgsIDExODg3OSwgCiAgICAgNTUyMjMsIDAsIDEyODA3MSwgNDE4MjYsIDg4NjUsIDY0MDIsIDAsIDEzMjc5LCA3OTE3LCA3NDc1NSwgMCwgNzczMywgMCwgCi0gICAgNDk5OCwgOTgzODg3LCA5MjMzMiwgNDE5NTAsIDAsIDQyNjgsIDAsIDAsIDcwMDYxLCA0MDEzLCAwLCAxMDg4MSwgMCwgMCwgCisgICAgNDk5OCwgOTgzODk2LCA5MjMzMiwgNDE5NTAsIDAsIDQyNjgsIDAsIDAsIDcwMDYxLCA0MDEzLCAwLCAxMDg4MSwgMCwgMCwgCiAgICAgMCwgNzQ3ODgsIDIwMTQsIDAsIDAsIDk3NjUsIDAsIDAsIDAsIDE5NTA1OSwgNzgzNTcsIDY1MjgxLCAxMjc4MjUsIDEwOTQ5LCAKICAgICAwLCAwLCAwLCAyMDE1LCAwLCAwLCAwLCA2NjMxOCwgNDMyMzMsIDAsIDQyNTE3LCAwLCAwLCAwLCAxMjY5OCwgODA5NCwgCiAgICAgMTAxMzUsIDY1OTA5LCA2NDc0LCA3OTQsIDAsIDEyNjU2LCAxMjgxMjIsIDExOTM1MywgMTI4MjcwLCAxNjY1LCAwLCA0ODMzLCAKQEAgLTE5NTkwLDkgKzE5NjEwLDkgQEAKICAgICA5NDI1LCA5NDI2LCA5NDI3LCA5NDI4LCA5NDI5LCA2NDc1OCwgMjM2MiwgOTY1NSwgMCwgMjAwNCwgOTA5NiwgOTc4MiwgCiAgICAgMTI4ODQ4LCA5MTcyLCAxMjg1NDUsIDE5OTY1LCAwLCA1OTU1LCA2NzY2NiwgMTEwOCwgMCwgNzQ3NzMsIDAsIDAsIDY0NzgyLCAKICAgICAzOTI2LCA5MjQ0OCwgNjUyMTAsIDg3OTgsIDAsIDkyMTY1LCAxMzkyLCAwLCAwLCAxMjczNjQsIDEwNjA2LCA4MDY1LCAKLSAgICAxMTg4MDUsIDEwMzUzLCAxMDQxNywgMCwgMCwgNjQ1MjQsIDkyNDE4LCA0MDE5LCAwLCA5ODMyODAsIDQzMjgwLCA4MjE5LCAKLSAgICA2ODQwMiwgMTgxMiwgMTE5OTYzLCA5ODM2ODMsIDAsIDEyNjQ4OCwgNDI0MTAsIDc0NDQ4LCAxMTkxMzIsIDYwNTQsIAotICAgIDEwNjk3LCAzMTY5LCA0MjI5NywgNDIzMjIsIDEwNjQyLCAzOTA5LCA5OTUwLCAwLCAxMjgxMzksIDk4MzI1MywgNjg2NzgsIAorICAgIDExODgwNSwgMTAzNTMsIDEwNDE3LCAwLCAwLCA2NDUyNCwgOTI0MTgsIDQwMTksIDAsIDk4MzI4OCwgNDMyODAsIDgyMTksIAorICAgIDY4NDAyLCAxODEyLCAxMTk5NjMsIDk4MzY5MiwgMCwgMTI2NDg4LCA0MjQxMCwgNzQ0NDgsIDExOTEzMiwgNjA1NCwgCisgICAgMTA2OTcsIDMxNjksIDQyMjk3LCA0MjMyMiwgMTA2NDIsIDM5MDksIDk5NTAsIDAsIDEyODEzOSwgOTgzMjYxLCA2ODY3OCwgCiAgICAgMCwgMCwgMTA0OSwgMCwgNjU3MDcsIDIzMDQsIDQxODA2LCA5MjMyNiwgNDIzMzYsIDM5MjEsIDAsIDExNzc1LCA2NDc2MCwgCiAgICAgMTE3NjYsIDEwMzgsIDQyMzAzLCA5ODIzLCAxMjcyNzgsIDY5MjM2LCA0MDA4LCA2NDAwNCwgODc3MywgMTA3MzMsIDM2LCAwLCAKICAgICA1MTUzLCA0MTgwNSwgMCwgNzM3MzUsIDc2MywgNDE4MDgsIDY0OTEwLCA5ODMxMzAsIDIwMDksIDAsIDAsIDEyNzE0MiwgCkBAIC0xOTYwNyw3ICsxOTYyNyw3IEBACiAgICAgNzgwMDIsIDAsIDc1MTMsIDE4NjMsIDQ3MTAsIDAsIDU5NTYsIDc2MjEsIDc4MDA2LCA5MjYyNCwgNDcwNSwgNzE2LCAKICAgICA3ODAwNCwgMCwgNDcwNCwgMTIwMDQwLCAxMjAyNzAsIDQyMjQxLCAxNjEsIDQzOTc3LCA3NDU0NiwgNjYyMTQsIDQ3MDYsIDAsIAogICAgIDY5OTE0LCA0MjY3MiwgNDcwOSwgMTA2ODAsIDExOTA2NSwgNDMyOTMsIDExOTk0NCwgMCwgMTE5MTY0LCAxMjAzMjgsIAotICAgIDkyNDY3LCAxMDE4NywgMTcwMCwgMTE5MjIzLCAwLCAwLCAxMjgxMTksIDQwMDQsIDAsIDEwOTY4LCA0MzI5NiwgOTgzNjMzLCAKKyAgICA5MjQ2NywgMTAxODcsIDE3MDAsIDExOTIyMywgMCwgMCwgMTI4MTE5LCA0MDA0LCAwLCAxMDk2OCwgNDMyOTYsIDk4MzY0MiwgCiAgICAgODUwNiwgMCwgMCwgMTI2OTk2LCAxMDA1LCA5MzcsIDc4MjE2LCA0NzM0LCAyODcwLCAwLCA3ODIxOCwgOTgzMTA5LCA3NDYzLCAKICAgICA0NzI5LCAwLCAyMzUsIDEzODQsIDQ3MjgsIDAsIDEyMDQyMCwgOTI0OTAsIDc0NDQ5LCA4MTA5LCA0MzEwNSwgOTgzMTc0LCAKICAgICA0NzMwLCA0NDcsIDEzMTg2LCAxNTEzLCA0NzMzLCAxMjA0MTUsIDAsIDAsIDQyNTI3LCAxMjkxMSwgNDM0MjcsIDEzODMsIApAQCAtMTk2MTgsNyArMTk2MzgsNyBAQAogICAgIDEyNzY5LCA2NTkwNSwgNDE2OTcsIDEyODMsIDEyMDMwMiwgNDc3OSwgMCwgMzcxOSwgNDAwNiwgOTgzNTY5LCAxOTk1NywgCiAgICAgMTI4NzczLCAyMDIxLCAxMTkzMzIsIDEyMDY5OSwgMTE5MTUwLCA0MzAyOCwgNjU0OTMsIDQxODM4LCAzODc1LCA1OTYyLCAKICAgICA2NDM0MSwgOTI2MTYsIDk4MTQsIDQzNDU3LCA1ODI3LCAzMzE0LCA3Nzg3LCA3ODIzNCwgNjU0OTQsIDY4MTUzLCAwLCAwLCAKLSAgICAxMjA2MzYsIDY0NTMxLCAxMjA2OTIsIDE5NDYyNiwgMCwgMCwgNjYzMTYsIDY1NDY3LCA1NzcxLCA0MTI5OCwgOTgzNzg1LCAKKyAgICAxMjA2MzYsIDY0NTMxLCAxMjA2OTIsIDE5NDYyNiwgMCwgMCwgNjYzMTYsIDY1NDY3LCA1NzcxLCA0MTI5OCwgOTgzNzk0LCAKICAgICA5NzQyLCA1MjEsIDAsIDEwODAwLCA5MjIyMiwgODQwNCwgMTk0NjI1LCA0ODMsIDcwOTYsIDcwODksIDY2MzIzLCA5MjgsIDAsIAogICAgIDAsIDExOTAxOCwgMTA1OTksIDExNTg2LCAzOTg5LCAxMDk3MSwgNDM3NDgsIDY1NzgyLCA5ODQxLCA4ODQzLCAxMjE0NSwgCiAgICAgOTI0NzAsIDEwMDc0LCA3ODU0OCwgMCwgMzc2OSwgMCwgMCwgMCwgOTgzMTA3LCA5NTczLCAwLCA2NTI5MCwgODg0OSwgMCwgCkBAIC0xOTYyNiwxNyArMTk2NDYsMTcgQEAKICAgICA3MzgzOCwgNzg1NTMsIDU4MjUsIDEzMDA3LCA2ODE2NSwgMCwgMTIwNDU3LCAxMjY2MSwgNzYwOCwgMTAzNTQsIDEwNDE4LCAKICAgICA0MjQxMSwgMjAyMiwgMCwgMTQwOSwgMTIxOTUsIDQwMDEsIDMxMTIsIDEwODI0LCAxMjA2MzksIDEzOTAsIDAsIDAsIDQyMSwgCiAgICAgNDM1MzYsIDU4NDYsIDEyMDEyMCwgNDEzMCwgMTI3Nzc1LCA3NTk1LCA0MjU4OCwgNzYwMCwgMTIwMTIxLCA2NjAzNSwgCi0gICAgOTgzOTA0LCAwLCA2NTg1MSwgNDI2MDcsIDEyODE5MCwgOTI0MDMsIDMxNjgsIDAsIDQyMTM0LCAxMTgzMSwgMjM3MCwgCisgICAgOTgzOTEzLCAwLCA2NTg1MSwgNDI2MDcsIDEyODE5MCwgOTI0MDMsIDMxNjgsIDAsIDQyMTM0LCAxMTgzMSwgMjM3MCwgCiAgICAgMjg0NiwgOTI2MDUsIDAsIDAsIDEyMDEzMiwgMCwgMTgzNiwgMCwgMCwgOTI1NTgsIDM3NDAsIDY5ODQzLCA2MjkwLCAKICAgICA2NTM3NCwgMTIwNDUxLCAyMzkwLCAzOTQ0LCA2NjYyOCwgMTIwNDM0LCAwLCA2MTM1LCAzMTE4LCA3NDI2NSwgMTE5MDkzLCAKLSAgICAxMjA0NDYsIDAsIDAsIDgxMjcsIDg5NzUsIDY0NzM5LCA3OTQzLCA5ODM3MzQsIDAsIDEwNjE4LCAyNTg0LCAwLCAwLCAwLCAKKyAgICAxMjA0NDYsIDAsIDAsIDgxMjcsIDg5NzUsIDY0NzM5LCA3OTQzLCA5ODM3NDMsIDAsIDEwNjE4LCAyNTg0LCAwLCAwLCAwLCAKICAgICA5OTk4LCAxMjg1NjQsIDAsIDAsIDAsIDAsIDYyMDQsIDAsIDAsIDgyNzksIDg3NzYsIDY0OTU0LCA0OTc1LCA3MDA3NSwgCiAgICAgMTIwMTMwLCA0MjY3LCAxNjMxLCA0MjIwNiwgNzc5ODMsIDAsIDE5NTA0NiwgNjU3MDAsIDY2NTYyLCAwLCA2NDY0NSwgMCwgCi0gICAgMCwgMTI2NTg4LCAxMjU4NiwgMCwgOTI0MiwgMTI3OTIyLCAwLCA0NTIzLCA1ODQyLCAxMDQ5NSwgMzEyMiwgOTgzNzg4LCAKKyAgICAwLCAxMjY1ODgsIDEyNTg2LCAwLCA5MjQyLCAxMjc5MjIsIDAsIDQ1MjMsIDU4NDIsIDEwNDk1LCAzMTIyLCA5ODM3OTcsIAogICAgIDc3OTMsIDc4Mjc1LCA5MzI4LCAxMTkxMDQsIDc4MzkzLCAxMjYwNCwgMCwgNjYxNSwgMjI4NSwgOTIzNDQsIDM5ODYsIAotICAgIDQ0MDI1LCAwLCA4OTEyLCA2NDU1NSwgNzQwOSwgMCwgOTgzMzUwLCA5NTQxLCA3ODI3NiwgMCwgMTEyNzUsIDg1NDAsIAotICAgIDExNDk4LCAwLCA5ODMzNDksIDQxMDQwLCAyNDU5LCAwLCAxMzA2MCwgNDEwNDEsIDc0NDEzLCA5ODMxMzgsIDAsIDAsIAotICAgIDY4NDI3LCAxMDQ1MCwgMTI1NTEsIDQxMDQzLCA3MDIwLCAxMjAzNTMsIDM3NjUsIDk4MzM0MiwgMCwgMTYwNiwgMTIwMzQ4LCAKKyAgICA0NDAyNSwgMCwgODkxMiwgNjQ1NTUsIDc0MDksIDAsIDk4MzM1OCwgOTU0MSwgNzgyNzYsIDAsIDExMjc1LCA4NTQwLCAKKyAgICAxMTQ5OCwgMCwgOTgzMzU3LCA0MTA0MCwgMjQ1OSwgMCwgMTMwNjAsIDQxMDQxLCA3NDQxMywgOTgzMTM4LCAwLCAwLCAKKyAgICA2ODQyNywgMTA0NTAsIDEyNTUxLCA0MTA0MywgNzAyMCwgMTIwMzUzLCAzNzY1LCA5ODMzNTAsIDAsIDE2MDYsIDEyMDM0OCwgCiAgICAgMTIwMzUxLCAzMDkzLCA2ODQzNiwgMCwgOTgzMDYxLCAxMTk2MTMsIDAsIDAsIDQzMTIsIDc0MDkxLCAxMjAzMzcsIAogICAgIDEyMDMzNiwgMTE5MjMsIDQwMjMsIDEyMDMzMywgNTc2MywgOTQwMTUsIDQ4MjcsIDEwODk0LCAxMjgxMCwgNjQ0MDYsIAogICAgIDExODc4NSwgNDQ1NSwgNzQzMjEsIDQzMywgMTE5NjIwLCA2NjY2MCwgMjQ5OSwgMCwgMCwgMTE4ODM3LCAxMTk3MywgCkBAIC0xOTY0NiwyNSArMTk2NjYsMjUgQEAKICAgICA3MDA0LCAwLCA2NTg4MCwgMTI3ODg2LCAxMTkwNDgsIDIzODAsIDExMzgwLCAwLCA5Mzk5NiwgMjM3NiwgMCwgMTE5MzIwLCAKICAgICAwLCA1MTk3LCAxMjcwNDYsIDEyNzA0NywgMTI3MDQ4LCAyMzY2LCAxMjcwNTAsIDEyNzA1MSwgMTIwNTU0LCAxMjAwNDUsIDAsIAogICAgIDAsIDAsIDk4MzA4NCwgMCwgMCwgMCwgNzQxODgsIDcxMzQyLCA5ODMwODYsIDk4MzU3MywgMTIwMDQ3LCAxMjg1NzUsIDAsIAotICAgIDAsIDEyMDA0OSwgMCwgMTg0NywgMCwgMTAzMzksIDk4MzM1NywgNDIzODQsIDAsIDQyMjcsIDc0MTU4LCAwLCA5MjUwMSwgCi0gICAgNDMwMzIsIDAsIDQyMzY1LCAwLCAxMjY3MSwgMTEzODQsIDAsIDk4MzQ1NywgMCwgNjQ3OTcsIDk4MzMzNywgNTgyMCwgCi0gICAgOTgzMzM2LCAxMjAwNTIsIDEyMDA2NSwgMCwgMTIwMDY0LCAxMjA2NTAsIDQyMTM3LCA5ODkzLCAyNzU0LCAxMjY2NCwgCisgICAgMCwgMTIwMDQ5LCAwLCAxODQ3LCAwLCAxMDMzOSwgOTgzMzY1LCA0MjM4NCwgMCwgNDIyNywgNzQxNTgsIDAsIDkyNTAxLCAKKyAgICA0MzAzMiwgMCwgNDIzNjUsIDAsIDEyNjcxLCAxMTM4NCwgMCwgOTgzNDY1LCAwLCA2NDc5NywgOTgzMzQ1LCA1ODIwLCAKKyAgICA5ODMzNDQsIDEyMDA1MiwgMTIwMDY1LCAwLCAxMjAwNjQsIDEyMDY1MCwgNDIxMzcsIDk4OTMsIDI3NTQsIDEyNjY0LCAKICAgICAxMjAwNjMsIDAsIDczNzcsIDEyNzg2NywgNDE3OTksIDY1NTMwLCAxNzExLCAxMjk4NCwgNDMwMzksIDMxMTQsIDYyNTUsIAotICAgIDk4MzMzMiwgMTE4OTM4LCAwLCAxMDg1MywgOTI2LCA5ODMzNjEsIDc0MTg0LCA5ODMzNjAsIDEyMDA1NSwgMCwgNDMxNzUsIAorICAgIDk4MzM0MCwgMTE4OTM4LCAwLCAxMDg1MywgOTI2LCA5ODMzNjksIDc0MTg0LCA5ODMzNjgsIDEyMDA1NSwgMCwgNDMxNzUsIAogICAgIDAsIDQzMDM3LCA0MTc5OCwgNDEwMzUsIDExNTgzLCAxMjc3NjksIDQxODAxLCAxMTkwODgsIDExOTYwNSwgNTIwLCA0MjAwLCAKLSAgICAxMjY5OSwgODMzMSwgMCwgMzA5MSwgNDEwMzQsIDEyNzM1MywgOTgzNjcyLCA4MzYwLCAwLCA3ODA0NCwgMzIxLCA0MjI5LCAKKyAgICAxMjY5OSwgODMzMSwgMCwgMzA5MSwgNDEwMzQsIDEyNzM1MywgOTgzNjgxLCA4MzYwLCAwLCA3ODA0NCwgMzIxLCA0MjI5LCAKICAgICA2NDU0MywgOTE3OTQ2LCA2NTU2MywgMCwgOTE3OTc0LCAyODYxLCA0Mzc5MywgMTAwOTUsIDAsIDkxOTUsIDkyMzg2LCAKICAgICAxODYxLCAwLCA3MzczMywgMCwgMCwgNDMwNDEsIDAsIDQzNzk0LCAxMjg1MzAsIDM4NTksIDEyMTgxLCA0MTY2MCwgODIwOSwgCiAgICAgMCwgNzM4NjcsIDEyOTczLCAwLCA3NDc1NywgMTI3NTE0LCA0MTY1OCwgMCwgMCwgNTc2MCwgMCwgNzQzLCA0NDE0LCAKICAgICAxMjA3NjYsIDAsIDQyNjMyLCA5MTc5NzMsIDY1MTYxLCA3Mzg5NiwgMTI4NTg5LCAwLCAxNDA1LCAxMTkwNjMsIDQzMjIwLCAKICAgICA0MzM0MSwgMCwgMTk5MTksIDAsIDY0NTMyLCA2NTM2NywgNDM3MTAsIDAsIDAsIDM1MTMsIDAsIDExODg4MywgNDMzNDIsIAogICAgIDExOTA2NCwgNjU1MjksIDY1MzY0LCAxMjgxOTcsIDAsIDY0ODUsIDEzOTcsIDAsIDQxOTg2LCA5MjY3OCwgMCwgMCwgCi0gICAgNzQwOTcsIDAsIDc0NzEsIDEyMDc5LCA2Nzk5NywgMTI2ODIsIDQzMjg3LCA5MjMxNywgMCwgOTgzMTQzLCA5ODM2OTgsIDAsIAorICAgIDc0MDk3LCAwLCA3NDcxLCAxMjA3OSwgNjc5OTcsIDEyNjgyLCA0MzI4NywgOTIzMTcsIDAsIDk4MzE0MywgOTgzNzA3LCAwLCAKICAgICAwLCAxMDk5LCAxMDQ5MCwgMCwgMTA1MDEsIDY1MTgxLCA3NDQ2MywgMCwgNDY0LCA0MTYyNCwgNjUyODMsIDY3NjYzLCAKICAgICA3ODIyMiwgMTM0NiwgMCwgOTE3NjMxLCA2NDU3MywgNjQ4OTcsIDQyMywgMTgxOCwgNjUxNDQsIDAsIDgyNzIsIDEyNzgxMiwgCi0gICAgMTk5MTEsIDQyMTgsIDMwODcsIDY0OTYwLCAxMjcyMzQsIDQzNTY0LCAwLCAwLCA5NTg0LCAxMDQ2NSwgOTgzODkzLCAKKyAgICAxOTkxMSwgNDIxOCwgMzA4NywgNjQ5NjAsIDEyNzIzNCwgNDM1NjQsIDAsIDAsIDk1ODQsIDEwNDY1LCA5ODM5MDIsIAogICAgIDc0MzU5LCAxMjYyNiwgOTEwNiwgMCwgNDI2NDIsIDEyMDIzMCwgNjQ3NTAsIDkzOTAsIDAsIDQxNzk3LCAwLCAwLCAyNjUsIAotICAgIDQxNzk1LCA2NDY2NiwgMTI2NTA4LCA0MzUzMCwgMjc1MiwgMCwgMCwgOTgzNDg1LCA1OSwgMCwgOTgzNTkzLCAwLCA5MjM3MSwgCisgICAgNDE3OTUsIDY0NjY2LCAxMjY1MDgsIDQzNTMwLCAyNzUyLCAwLCAwLCA5ODM0OTMsIDU5LCAwLCA5ODM1OTMsIDAsIDkyMzcxLCAKICAgICA3Nzg3MywgNDE4MTAsIDAsIDcwMTAsIDAsIDQxODA5LCA0MTQ5NSwgMTE5MzY0LCAwLCA0MjI1MiwgNDIyMTMsIDgwMDksIAogICAgIDMzMDUsIDQzMDMzLCA1MTEsIDkyNzAwLCA2NjI1NSwgMTMxMjcsIDEyMDA2NywgMCwgNzQzOTcsIDEyMDIzNSwgOTE3OTc3LCAKICAgICA2NTkxNSwgMTQwMCwgNDE4MTIsIDEwNjg1LCAxOTQ4NzAsIDIxMDMsIDEwMzg3LCA0NDUzLCA0MzI3NiwgOTE3NzgzLCAKQEAgLTE5Njc1LDE3ICsxOTY5NSwxNyBAQAogICAgIDAsIDQxODQxLCA0MzMzOCwgMCwgMCwgNTcyNiwgNjQ5MTUsIDQyMTc1LCAwLCAwLCA0MTQ5NywgNjUwNDQsIDEyMDEwOSwgCiAgICAgMjg1MSwgNDMwMTcsIDk4MzU4OSwgMCwgNDM3MywgNzgwNTgsIDAsIDk1ODcsIDE3ODksIDY2NzEsIDEyODg0MCwgMzEwMCwgCiAgICAgMCwgNjUzNjAsIDAsIDkyMzY1LCA5MTc3ODksIDY0OTIyLCAwLCA4MTkwLCAxMjA4MywgMCwgMCwgNjUwNiwgNjQzMTIsIAotICAgIDc0Mzc0LCAyMzY4LCAwLCA0NDE5LCA5ODM4MzgsIDExOTEyNSwgMzQzOSwgMTgyNSwgMTE5MiwgMTIwMTA2LCA4ODkxLCAKKyAgICA3NDM3NCwgMjM2OCwgMCwgNDQxOSwgOTgzODQ3LCAxMTkxMjUsIDM0MzksIDE4MjUsIDExOTIsIDEyMDEwNiwgODg5MSwgCiAgICAgMzA4MCwgMTIwMjI4LCAyMzQ3LCA1NDMwLCAwLCA4OTkwLCAyODQ4LCAwLCAxMjgyMjMsIDkyNTI4LCAyNDksIDAsIDAsIDAsIAogICAgIDEyMDY1OCwgMCwgMCwgODg4MywgOTE3ODAyLCA3MjgsIDY4MTc4LCA5OTUsIDAsIDAsIDY0ODI2LCAwLCA5MTc3OTgsIAotICAgIDEyODM0OCwgMCwgMTk5NDUsIDgwOTEsIDU1OCwgMCwgMTIyNzMsIDE5NDgxNCwgOTgzODQxLCAxMjExMiwgNjk5MTIsIDAsIAorICAgIDEyODM0OCwgMCwgMTk5NDUsIDgwOTEsIDU1OCwgMCwgMTIyNzMsIDE5NDgxNCwgOTgzODUwLCAxMjExMiwgNjk5MTIsIDAsIAogICAgIDAsIDc0NDE5LCAxMjMzNSwgMTIwMTA0LCA5MTc3OTUsIDM0NDMsIDMxMjksIDAsIDIxMDIsIDY1NDQ1LCA3ODI1OCwgCiAgICAgNjQ4OTEsIDAsIDc3MjUsIDY1MTA4LCA3ODI1NSwgMCwgODYyNCwgNjkyNDYsIDEyNDQ2LCA0MzI5NSwgMCwgNDE4OTQsIDAsIAogICAgIDYyNzcsIDQxNjcyLCA0MTg5MywgMTAwMTAsIDEyODY3OCwgMzU0MCwgMTI4NjQ5LCA4MzUsIDcxMzQwLCA2OTgxNiwgCiAgICAgMTE5ODY4LCA3NDQwOCwgMCwgNzM5NTksIDU0MjYsIDQyNTgsIDAsIDAsIDU0MjQsIDEyODEyNywgODI4MywgMCwgNTQzNCwgCiAgICAgOTgzNTkwLCAwLCAxOTkxNywgMTE0MDgsIDAsIDExOTQ3LCAwLCAxNDA0LCAzMDk1LCAxMTQzMiwgMTI4MzA3LCAzNDY0LCAKICAgICA2NDg2LCA0ODE5LCAxMjgyMzMsIDAsIDU3MCwgODA5NSwgMzY3MiwgMTE5ODY0LCAxNDk4LCA2Nzg2NiwgMCwgMTI4NTM5LCAKLSAgICA0MzEsIDAsIDAsIDEyODE4MiwgMTI4MDk2LCA2ODE2NywgOTgzNjU0LCAxMzA5NiwgMTI4NjQzLCAwLCA0MzQwOCwgOTUxNiwgCisgICAgNDMxLCAwLCAwLCAxMjgxODIsIDEyODA5NiwgNjgxNjcsIDk4MzY2MywgMTMwOTYsIDEyODY0MywgMCwgNDM0MDgsIDk1MTYsIAogICAgIDEyODUzOCwgNTI2OCwgNDIyMzAsIDQyMjIwLCAwLCA0NDUwLCAxMjA1MTEsIDExNTQ3LCA0MzQxNywgMTI4NTQyLCAzNTYsIAogICAgIDM0NzcsIDIyNywgMTA0ODgsIDY4MjAzLCAzODIsIDExNDE4LCAwLCAxOTUwNjYsIDAsIDAsIDAsIDAsIDY0ODQsIDI1NDEsIAogICAgIDY2MDM5LCAwLCA3ODcxOCwgOTI3MjMsIDM1NDksIDAsIDkxMTAsIDExOTY2NSwgMjc0MywgMCwgNDMyOTAsIDE5NDgxMiwgCkBAIC0xOTY5NCw3ICsxOTcxNCw3IEBACiAgICAgMTI4NDksIDM5NTMsIDE4OTcsIDAsIDY1MDk0LCAxMTk5NCwgNDMzOSwgNzQ1NTYsIDkyNjU0LCA2Nzg0MywgMCwgMCwgMCwgCiAgICAgNjg0NzMsIDc0MTA0LCA1MjI4LCAxMjg4MDQsIDc4NjgsIDQzMTg0LCAwLCAwLCA3Mzk4NiwgNDM0MzgsIDAsIDQzMDIyLCAwLCAKICAgICAxMTYyLCA5MTc4NDcsIDI2NzEsIDAsIDAsIDkyNjMyLCA5MjYzMSwgMTE4ODY1LCA0NTUzLCA3MzgxMSwgMCwgMTk1MDA1LCAKLSAgICAwLCAwLCAxOTkyMSwgNzQzMzEsIDExNDI0LCAxOTUwMDYsIDQ1NjcsIDQxODkxLCAwLCA5ODM3NzksIDU1MjQ5LCA0ODIwLCAKKyAgICAwLCAwLCAxOTkyMSwgNzQzMzEsIDExNDI0LCAxOTUwMDYsIDQ1NjcsIDQxODkxLCAwLCA5ODM3ODgsIDU1MjQ5LCA0ODIwLCAKICAgICA2NTIzOSwgMTk0NjYyLCAwLCAxOTQ2NjUsIDQzMDQyLCAxMTkyMTIsIDEzNzcsIDEyODY5LCA0ODk3LCA0MjgyMSwgOTI1MCwgCiAgICAgMCwgNDQzOCwgNjQzODUsIDAsIDE3NTMsIDExMzMxLCA2MTQ3LCAxOTQ5NDEsIDQzMjgyLCA4ODMzLCAwLCAwLCA2NTA0LCAKICAgICA3ODQwOCwgMTI2OTc5LCAxMDcxOSwgMCwgMTg5OCwgMTQxMywgNDI0NDMsIDAsIDgwMiwgMTIxNDEsIDAsIDE5NDY3MSwgCkBAIC0xOTcwMyw3ICsxOTcyMyw3IEBACiAgICAgNzg3MTksIDY2NTczLCAwLCA3ODcyNCwgNzg3MTIsIDExNzYxLCAxOTQ2NTUsIDAsIDQxMDk0LCAwLCAwLCAxOTQ4OTMsIDAsIAogICAgIDkyNjg5LCA2MTk2LCA2OTQ1LCA5Mzk2OSwgMTk0ODkwLCAxMjgxODQsIDEyMDQ5MSwgMTE4MTYsIDE5NDk0MywgNTczMywgCiAgICAgMjkzMCwgMCwgMCwgNDEwOTgsIDAsIDQxMDkzLCAwLCA2NjYyNiwgNTg4LCA5NzYwLCAwLCAxOTQ3MTcsIDEyMzgsIDIwMCwgCi0gICAgOTgzMjA1LCAxNjYwLCA3MzkxNiwgMCwgMTE4OTA1LCA3NDM2MiwgMCwgOTI0ODUsIDE5NDY1MSwgMCwgOTgzNjk3LCAzMzk0LCAKKyAgICA5ODMyMDcsIDE2NjAsIDczOTE2LCAwLCAxMTg5MDUsIDc0MzYyLCAwLCA5MjQ4NSwgMTk0NjUxLCAwLCA5ODM3MDYsIDMzOTQsIAogICAgIDE5NDg5NCwgMTIwNjY4LCAwLCAwLCAxMjczNTgsIDY2MjE5LCAxMjcxODMsIDQzMjg0LCAxOTQ2NTYsIDc4MTcsIDE4NDEsIAogICAgIDExMDU1LCAxMjA1MzMsIDE5NDk3OSwgMTk0OTgyLCAxNjY5LCAxMDc3NiwgMTk0OTgxLCA3NzAxLCAxOTQ5ODAsIDAsIAogICAgIDE5NDk5NSwgMTczMiwgNDAzMCwgMCwgMzk2MywgNjY2MTEsIDEyNzUzMCwgNDE3NjgsIDY0OTEsIDAsIDY1MzI0LCA5MTQsIApAQCAtMTk3MTEsMzAgKzE5NzMxLDMwIEBACiAgICAgMTIwMDksIDEyMzk5LCAwLCA2Nzg1MiwgNjU1MzcsIDAsIDEwODQxLCA0MzQzMCwgNTMwMSwgMCwgOTI2MTgsIDU3MzQsIAogICAgIDg5NjAsIDAsIDkyNTI3LCA2NTMxNywgNzc4ODAsIDAsIDAsIDAsIDEyMzA0LCAwLCAwLCA2NTMxNSwgOTI2NzAsIDEyODUxMSwgCiAgICAgMCwgMCwgMCwgMTE5NjIxLCA5MjUyOSwgNzQ1MzYsIDEyNDQ3LCA2NDQ4NiwgMTI3Mzc0LCAxMjY1NjIsIDk4MzEyOSwgMCwgCi0gICAgMCwgOTgzNzkzLCA0Mjc2NywgMTA5MTUsIDAsIDEyMDA3LCA0MzY5NSwgMTIwNTIwLCAxMTk3NSwgMTk0ODc4LCAwLCAKKyAgICAwLCA5ODM4MDIsIDQyNzY3LCAxMDkxNSwgMCwgMTIwMDcsIDQzNjk1LCAxMjA1MjAsIDExOTc1LCAxOTQ4NzgsIDAsIAogICAgIDkyNjA0LCAyNTU1LCA4NjI5LCAxMjg2NDAsIDQzMTY4LCA0MTg3MiwgNDM3MDYsIDQ0OTYsIDE5NDg3OSwgMTI4MTQ4LCAKICAgICAxMjAyNDEsIDAsIDAsIDAsIDAsIDY0NzMwLCA3MDA0MSwgNjY3MTQsIDY4MjIyLCAwLCA3MDA3NiwgNjU1OTYsIDkyMzA2LCAKICAgICAxMTQxNiwgNDI4MCwgNjc2NTUsIDg3NjUsIDEyNzg0LCA3NzkyLCAxMzkzLCAxMjY0NzMsIDY3ODcxLCA3NDM4NiwgMCwgCiAgICAgODIzMywgMTI4MjAsIDAsIDY2ODMsIDE5NDg3NiwgMzQ0MiwgMTIxNDQsIDI4NDEsIDEyNTQzLCAwLCAxNDczLCA0MjgyMCwgCiAgICAgNjQzMjksIDEyNzgzMiwgMCwgNjg2NDIsIDY0ODgsIDM1NywgMTA0OCwgNDExMDAsIDAsIDQxMTA0LCA5NDAwMywgMzQwNiwgCiAgICAgMTA1NCwgNzEzMjAsIDEwNDAsIDY1NDUwLCAwLCA0NDM0LCAxMDY5LCAwLCAxMTg4NjIsIDY1NzM3LCA5MTc3NjUsIAotICAgIDEyODcwNSwgMCwgOTgzNjg0LCA5NjkzLCA0MTk0MywgMTI2NTY0LCA0MTkzMSwgNDE3NTksIDEyNzU3LCA0MzUzLCAwLCAKLSAgICAxMDU5LCA5NzkwLCA4OTk1LCAxMTk5NzQsIDk4MzY4NywgNjU5MzcsIDAsIDQxNzY0LCAxMDY0NiwgMCwgMTE4ODMzLCAKLSAgICA5MjM3MiwgMCwgNzQ4MzAsIDc4NTY5LCAxMjc0MywgOTgzNjgwLCA2NDgwLCA5MTc3NjEsIDQxNzc5LCA0MjU4MCwgNjY2MDEsIAotICAgIDEyMjA3LCAxMTk2MTksIDYzMzUsIDY2NjAyLCAxMTMxMiwgNjQ4MDcsIDAsIDAsIDQxNzY3LCAxMTk2MjksIDk4Mzc1NSwgCi0gICAgNDMwMjAsIDEyODI3MSwgMzk1NSwgNzQyNTQsIDAsIDk4Mzc0NSwgOTE3ODYxLCAwLCA3NzkyNiwgOTc3MCwgOTI0NiwgCisgICAgMTI4NzA1LCAwLCA5ODM2OTMsIDk2OTMsIDQxOTQzLCAxMjY1NjQsIDQxOTMxLCA0MTc1OSwgMTI3NTcsIDQzNTMsIDAsIAorICAgIDEwNTksIDk3OTAsIDg5OTUsIDExOTk3NCwgOTgzNjk2LCA2NTkzNywgMCwgNDE3NjQsIDEwNjQ2LCAwLCAxMTg4MzMsIAorICAgIDkyMzcyLCAwLCA3NDgzMCwgNzg1NjksIDEyNzQzLCA5ODM2ODksIDY0ODAsIDkxNzc2MSwgNDE3NzksIDQyNTgwLCA2NjYwMSwgCisgICAgMTIyMDcsIDExOTYxOSwgNjMzNSwgNjY2MDIsIDExMzEyLCA2NDgwNywgMCwgMCwgNDE3NjcsIDExOTYyOSwgOTgzNzY0LCAKKyAgICA0MzAyMCwgMTI4MjcxLCAzOTU1LCA3NDI1NCwgMCwgOTgzNzU0LCA5MTc4NjEsIDAsIDc3OTI2LCA5NzcwLCA5MjQ2LCAKICAgICAxMjIzMCwgMCwgMCwgMCwgMTA0NDgsIDQxNzgzLCA0MTc4NiwgMTI3MDkzLCAxMjc5NywgMjc1NSwgNjQ1NzEsIDc4NTc4LCAKICAgICAxOTQ5MjcsIDQ4NTcsIDAsIDQ0MjgsIDEyNzk0LCA3Mzc1NSwgMTI4MDYxLCA3ODU3NCwgMCwgNzQyODQsIDAsIDU3NDcsIAogICAgIDc4ODI1LCAwLCA3OTc4LCA0MTA5MiwgNzQ1NzEsIDAsIDExOTI0LCA0MzgxMiwgNDIxNDQsIDY1MDE1LCAwLCA1NjMsIDAsIAotICAgIDk4MzY4MiwgMTI3OTgsIDExMjcxLCA1NywgMCwgMCwgOTE3ODYwLCAxMTkwNDMsIDAsIDk0MDUxLCA0MzEzNywgNjk0LCAwLCAKKyAgICA5ODM2OTEsIDEyNzk4LCAxMTI3MSwgNTcsIDAsIDAsIDkxNzg2MCwgMTE5MDQzLCAwLCA5NDA1MSwgNDMxMzcsIDY5NCwgMCwgCiAgICAgOTg3NiwgMCwgMTE5MTY4LCAwLCA3ODgyMiwgNjQ1MzcsIDAsIDI3NywgNzQzODUsIDcyMjksIDEyNzYxLCAwLCAwLCAKICAgICAxMzAyNSwgNjQ4MTEsIDg3NTcsIDc4ODI0LCAxMjY0NzgsIDE1NzQsIDczODEsIDAsIDI1MjUsIDQ4NTIsIDU3NDksIAogICAgIDY4NDY1LCAxMzAyNywgNDI4MjQsIDEyMDU3NCwgMTAzOSwgNzE1MSwgMTAxNTUsIDU3NDUsIDE4OCwgNDE4NTgsIDExNTkyLCAKICAgICAwLCA3NDAxNSwgOTA1NSwgNDE4NTMsIDQ4NTgsIDkxNzc4MCwgMCwgNDM2LCA0NzcxLCAwLCAyNzg2LCAwLCA0ODU2LCAKICAgICA4MDUxLCAwLCAxMTk2MDksIDcxMzI3LCA5NjQ0LCAwLCAwLCAwLCAxOTQ5MTYsIDEyMDczMiwgNjY3MTAsIDExODgzNCwgCi0gICAgOTgzMzUxLCA3MzkwNiwgMTI4NjgwLCAxMjcxMTQsIDAsIDEwMjM0LCA1ODQzLCAxMTkzOSwgMCwgNDIxNTcsIDAsIDMxNTcsIAorICAgIDk4MzM1OSwgNzM5MDYsIDEyODY4MCwgMTI3MTE0LCAwLCAxMDIzNCwgNTg0MywgMTE5MzksIDAsIDQyMTU3LCAwLCAzMTU3LCAKICAgICAxOTQ5MTgsIDY4MzkzLCAwLCAzNTA0LCAxMTkxNzgsIDAsIDEwODIyLCA1MTQ5LCA2NjAyOSwgMTAyMjYsIDY1MTQyLCAKLSAgICAxMjgwMjUsIDM1OTQsIDQyNDI0LCAxOTQ5NTksIDQwLCAxMjY1NywgOTgzNjU2LCAwLCAzODYsIDAsIDg4MzQsIDAsIAorICAgIDEyODAyNSwgMzU5NCwgNDI0MjQsIDE5NDk1OSwgNDAsIDEyNjU3LCA5ODM2NjUsIDAsIDM4NiwgMCwgODgzNCwgMCwgCiAgICAgMTI4MTUsIDQzNTc0LCAwLCA3MzkwNywgMCwgNzQxOTYsIDcyMjAsIDc0NTA0LCAwLCA3NDMxNiwgMCwgNjUzMjIsIDQzMDQsIAogICAgIDc0NTAzLCA4MTYwLCA3ODcwNywgMTk0NzUzLCAwLCAwLCAxMjg1MjYsIDEzNDgsIDkyMzQ5LCA3ODU5NywgMTI2NTM5LCAKICAgICAxMzMwMywgMCwgOTIzOTIsIDE5NDc1NSwgNzU5OSwgMTI3OCwgNDM2MTYsIDEzMjY5LCAwLCAwLCA3NDM4NywgNzgxNzksIApAQCAtMTk3NDYsMjUgKzE5NzY2LDI1IEBACiAgICAgNDI1MDcsIDE5NjIsIDQzMzA1LCA3ODQ3NiwgNDI1MDUsIDExNjYwLCAwLCAyMDcyLCA5MjMxMiwgNjk5NSwgNzQxNzMsIAogICAgIDU0MzcsIDc0MTc0LCAxMDY2OSwgODcwMiwgNzk2NCwgOTIzNTIsIDAsIDE5OSwgMTk0ODQzLCA0MTA1LCAxOTQ4NDUsIAogICAgIDE5NDY5OSwgMTk0ODQ3LCAxOTQ3MTAsIDExOTg3NSwgMTMxNDgsIDc1NjAsIDc4NDc5LCA5MjI2LCA3ODQ4MCwgMTk1MDcwLCAKLSAgICA2NDcyLCA2NTgxNCwgNzM5NTQsIDAsIDQ3MjQsIDAsIDAsIDkxOTEsIDAsIDY0NDMyLCA5ODM4MDgsIDk4MzI0MSwgCisgICAgNjQ3MiwgNjU4MTQsIDczOTU0LCAwLCA0NzI0LCAwLCAwLCA5MTkxLCAwLCA2NDQzMiwgOTgzODE3LCA5ODMyNDcsIAogICAgIDE5NTAyNCwgMTAxOTYsIDc4ODYsIDAsIDY1ODUsIDAsIDY2ODAsIDE5NTA0MiwgMCwgMTk1MDUxLCA2Njc5LCA3NDQxMiwgCi0gICAgOTIyNTEsIDE5NDg2NiwgNzQ0MjEsIDExMzgyLCA5ODM2MjIsIDk4MzYyOCwgMTI3ODkxLCAxMjc0ODQsIDE5NDgzMywgCisgICAgOTIyNTEsIDE5NDg2NiwgNzQ0MjEsIDExMzgyLCA5ODM2MzEsIDk4MzYzNywgMTI3ODkxLCAxMjc0ODQsIDE5NDgzMywgCiAgICAgMTk0ODMyLCA2NjgxLCAxMjc0ODIsIDEyNjkzLCAxOTQ4MzYsIDQyNzI3LCA3ODE5NiwgMTI4MjUyLCA3ODE5NSwgNjU0NDIsIAotICAgIDExOTYxMCwgNjk3MzMsIDk5ODksIDQzMjQ4LCA2NjI0OCwgMTk0ODE2LCAwLCAxOTQ4MTgsIDEyODg0NSwgMTk0ODIwLCAKKyAgICAxMTk2MTAsIDY5NzMzLCA5OTg5LCA0MzI0OCwgNjYyNDgsIDE5NDgxNiwgMCwgMTEzMjEsIDEyODg0NSwgMTk0ODIwLCAKICAgICAxOTQ4MTksIDUyOTcsIDcwNDIsIDEzMjg0LCA2MTEyLCA3OTY4LCAxOTQ4MjUsIDczOTI3LCA5MjQ0NCwgMTk0NzM2LCAKICAgICA2NTc0NiwgMTI3NDc2LCA2OTg4OSwgNzQzODksIDEyODY5NiwgNDM0MiwgNDI4MzksIDE5NDgzMSwgMTY3NywgMCwgMCwgCiAgICAgMTI2NTkwLCA5MTc4NTUsIDExMDkxLCAxMTAxMSwgMjcxOSwgMCwgMCwgMTE5NTk1LCAxMDE2MCwgMCwgMCwgNzU4NSwgCiAgICAgNjUxNjksIDIwNTIsIDQzMDgsIDkyMTc0LCA0MzAwMCwgNzUwNSwgNTQzLCA2NDkxNiwgNjQ3MzYsIDAsIDAsIDY0NjU1LCAwLCAKLSAgICAxMTg5MjIsIDIwNjQsIDAsIDQzMTU4LCA3OTAyLCAwLCA2NTI2NSwgMTk0NjM5LCAwLCAxMjcxNzAsIDAsIDAsIDAsIDAsIAotICAgIDEyOTk0LCA5MjcyOCwgMTA4MjgsIDk4MzkzNCwgNjIyOCwgNDMwNywgMzQ4MiwgMTI4NTI3LCAwLCAwLCAwLCA1MDYsIAotICAgIDc0NTczLCA0MTE5NCwgNjU3MzUsIDIwNTUsIDQzMjU1LCA0MTE5NSwgMCwgODE2OSwgOTgzNjcxLCA4ODQxLCAwLCA1MTYsIAorICAgIDExODkyMiwgMjA2NCwgMCwgNDMxNTgsIDc5MDIsIDAsIDY1MjY1LCAxOTQ2MzksIDAsIDEyNzE3MCwgMCwgOTgzNjI1LCAwLCAKKyAgICAwLCAxMjk5NCwgOTI3MjgsIDEwODI4LCA5ODM5NDMsIDYyMjgsIDQzMDcsIDM0ODIsIDEyODUyNywgMCwgMCwgMCwgNTA2LCAKKyAgICA3NDU3MywgNDExOTQsIDY1NzM1LCAyMDU1LCA0MzI1NSwgNDExOTUsIDAsIDgxNjksIDk4MzY4MCwgODg0MSwgMCwgNTE2LCAKICAgICA5Mzk3NCwgMjA2MywgMTE5MDUxLCAzNCwgMTI4ODUwLCAxMjAxODYsIDExNTA0LCAxNjEyLCA3NDMzMywgMTIwMTgyLCAKICAgICAxMTgyNywgNzQzMDgsIDEyMDAxLCAxMjAxNzgsIDEwMjQyLCA2NDU2NCwgMTIwMTc5LCA2Nzk4NiwgNjU4NCwgNzc0OSwgCiAgICAgMTEwMzcsIDAsIDE3NTgsIDEyNzA5MiwgMTA2NjcsIDEwNTYwLCAxMjAxOTcsIDkyNTkzLCAxOTM1LCAxMTUxNywgMTIwMTkzLCAKICAgICAxMjAxOTYsIDEyMDE5NSwgMTkzMSwgMTIwMTg5LCA3NDgzOSwgMTIwMTkxLCAxMjE3LCA2NDcwMiwgMTI2NDMsIDgyNSwgCiAgICAgMTI3ODM4LCAxOTQ5MDUsIDEyMjk0LCA5MjQyOCwgNzg4MzQsIDkxMzgsIDc4ODMxLCA3ODgzMywgMTI2MzEsIDc4ODI5LCAKICAgICAxMTA4MCwgNzQ1NTQsIDY0MDAwLCA1NTkxLCAxMjM5LCAwLCAxMTMxMywgMCwgMzQwMywgMCwgMCwgNjQzNjQsIDkyMjY5LCAKLSAgICAwLCA3NDU4MiwgODk5OCwgMTI5ODgsIDAsIDkxNTIsIDk4Mzg0MCwgMCwgMTI2NDg0LCA2NzU4OSwgNDE4NTAsIDY0MjkwLCAKKyAgICAwLCA3NDU4MiwgODk5OCwgMTI5ODgsIDAsIDkxNTIsIDk4Mzg0OSwgMCwgMTI2NDg0LCA2NzU4OSwgNDE4NTAsIDY0MjkwLCAKICAgICAzNDMzLCA5MjM5MywgMTI2MTUsIDE1OTQsIDQyMTkyLCA2OTE0LCA2NzYwMywgMCwgMTE5NTY5LCA3NDU2NSwgNDEzNTMsIAogICAgIDY3NjAyLCA2NzYxMSwgNDMzNywgMCwgMTI3Mjk2LCA5MTgsIDY1MDM1LCA0MTM1MSwgNzY4MSwgMTk0OTAwLCA0MjU3NywgCiAgICAgNDEzOTMsIDEyNjY4LCAxOTQ5MDQsIDI0NzcsIDEyNzI4NSwgMCwgMTI3MzAxLCAwLCA2NzYwNCwgMTk0ODgwLCAxMjcyMzUsIApAQCAtMTk3NzYsMTQgKzE5Nzk2LDE0IEBACiAgICAgNzM3OTYsIDAsIDExOTIyOCwgMTIwMzUsIDAsIDI4MTgsIDAsIDc0NDExLCA3Mzc5MywgMCwgNDE3MiwgMCwgMCwgODM3MywgCiAgICAgMTA4NzMsIDEyMTk3LCAwLCAwLCA5MjI2NSwgNjk3MDYsIDAsIDc4MjEwLCAwLCAxMjgxMTAsIDE5NDg2NSwgMTI2OTgyLCAKICAgICA3NDU2MywgNjQ4MjgsIDExNDE5LCAxOTQ4NjgsIDc2NiwgMTI1NywgMCwgMTE4ODQ1LCAxMTM4MSwgMzI2NSwgNjY2MTcsIAotICAgIDMyNzQsIDEyNzM2NSwgMTI2NTIzLCA5NDA0MiwgOTgzOTQxLCA3NDUyMiwgNDE5ODksIDAsIDAsIDEyODc5OCwgMzI2MywgMCwgCisgICAgMzI3NCwgMTI3MzY1LCAxMjY1MjMsIDk0MDQyLCA5ODM5NTAsIDc0NTIyLCA0MTk4OSwgMCwgMCwgMTI4Nzk4LCAzMjYzLCAwLCAKICAgICA2NTY3MiwgMCwgMzI3MCwgNjQ1MzksIDExNDg5LCAwLCAwLCAwLCAwLCA5NTA1LCA2NTUxOCwgMTk0Nzc2LCA3NTYsIAogICAgIDE5NDYwNSwgMCwgMCwgMCwgNzI2MSwgMCwgMTg2LCAwLCAxMTkxNTYsIDU3NzAsIDEzMTc5LCA2NTgzMCwgMTI2MTIsIAotICAgIDEyOTQ5LCA2NDg1NiwgMTI4MDAsIDk4Mzg5MiwgNzQyMDMsIDY0NzE4LCAxMTUwNywgMCwgOTI0MzQsIDExODkyOSwgMCwgCisgICAgMTI5NDksIDY0ODU2LCAxMjgwMCwgOTgzOTAxLCA3NDIwMywgNjQ3MTgsIDExNTA3LCAwLCA5MjQzNCwgMTE4OTI5LCAwLCAKICAgICAxMTU3OCwgMCwgMTE5Mjk2LCAwLCAwLCAwLCAwLCA3NDU2OCwgOTI1NCwgMCwgMTc5NCwgMTIwMjE3LCA2NDUyMSwgNTYyNCwgCiAgICAgMTIwMjIwLCAxMjAyMjEsIDExOTk1OCwgMTIwMjIzLCAzNjE3LCA2NjYzNiwgNjQ4ODYsIDk0MDYxLCAxMjAyMTIsIAogICAgIDEyMDIxMywgMTIwMjE0LCAxODcyLCA2NjUwOCwgMTIwNDY3LCA0MTA3OSwgMTA3NDgsIDU1MDIsIDExOTMzMCwgNDQ1MiwgMCwgCi0gICAgOTgzNzYyLCA5MjUyNiwgNDUxMSwgMCwgOTgzODY4LCA2NDY3OCwgMTE0MjUsIDAsIDQzMjQ1LCAxMjMxLCAxOTQ3ODMsIAorICAgIDk4Mzc3MSwgOTI1MjYsIDQ1MTEsIDAsIDk4Mzg3NywgNjQ2NzgsIDExNDI1LCAwLCA0MzI0NSwgMTIzMSwgMTk0NzgzLCAKICAgICA2OTkwMywgMCwgOTAwMywgODE5MiwgMCwgNTMwNSwgOTY1MywgMTA2MTYsIDg2OTQsIDk1NDYsIDAsIDAsIDEyMDQ3OCwgCiAgICAgMTIwMjAwLCA2NTIwNSwgMTIwMjAyLCA2NDA2MywgOTg3OCwgNzQ3ODAsIDExOTYyNiwgNzgyMDIsIDY0MDU4LCA4Nzk5LCAKICAgICA0MjEzMSwgMCwgNjQwNjIsIDEwMjgsIDY0MDYwLCA2NDA1OSwgODM3LCAxMDU2NywgMCwgNDMxMDMsIDAsIDEyMDc1NCwgCkBAIC0xOTc5MiwyNiArMTk4MTIsMjYgQEAKICAgICA2NDAzMiwgNDI3MzUsIDY0MDM4LCA2NDAzNywgNjQwMzYsIDY0MDM1LCA0MjkxLCAxOTQ5MjgsIDY0MDE1LCA2NDAxNCwgCiAgICAgNjQ2ODEsIDE5NDkzMCwgMCwgNzgxNDUsIDAsIDQzMDkwLCAwLCAzNDc2LCA4OTczLCA2NDAxMiwgNDI0NzMsIDY0MDEwLCAKICAgICA2NDAwOCwgNjQwMDcsIDIwMDMsIDc3MDYsIDY0NTE3LCA3ODE1MywgMjUzOCwgNjQwMDksIDIwNCwgMCwgNDgwMiwgNDExMSwgCi0gICAgODIzOSwgOTA5OCwgNDgwNSwgNjQwMDEsIDY0MDU3LCA3ODg1LCA3MjQ3LCA2NDA1NCwgOTgzMjU4LCAwLCA0NzY3LCA5MzQzLCAKKyAgICA4MjM5LCA5MDk4LCA0ODA1LCA2NDAwMSwgNjQwNTcsIDc4ODUsIDcyNDcsIDY0MDU0LCA5ODMyNjYsIDAsIDQ3NjcsIDkzNDMsIAogICAgIDY0MDQ5LCA2NDA0OCwgMTIwMDM0LCAxMTMzLCA2NDA1MywgNjQwNTIsIDQzNDUzLCA2NDA1MCwgNDEzNDAsIDExODk3NSwgCiAgICAgMTk0ODM1LCAxMDAwNSwgMTIzMjksIDQxMzMzLCAwLCA4NDg5LCAxOTQyLCAwLCAxOTQ4MzQsIDQyNTIwLCAxMjgyNDksIDAsIAogICAgIDAsIDEwNzYwLCA2NDAyMywgNjQwMjIsIDY0MDIxLCA2NTgyLCA0MzY3MCwgMCwgNjQwMjUsIDkxNjcsIDQyMTUxLCA3ODI0NCwgCi0gICAgOTgzMjI2LCAyMDI2LCA2NDAxOSwgNjQwMTgsIDY0MDE3LCA2NDAxNiwgMTI3NjgsIDAsIDc1ODIsIDc4MjUyLCA3ODI0OCwgCisgICAgOTgzMjMyLCAyMDI2LCA2NDAxOSwgNjQwMTgsIDY0MDE3LCA2NDAxNiwgMTI3NjgsIDAsIDc1ODIsIDc4MjUyLCA3ODI0OCwgCiAgICAgNzc5MTQsIDc4MjQ2LCA3ODI0NywgMCwgNzc5MTUsIDc4NzY2LCA2Nzg4LCAxMzA5NCwgNzc5MjAsIDc1MzIsIDQxNDE0LCAKICAgICA3ODUyMCwgMzE3OSwgNzg1MTgsIDY0NzY5LCA3ODUxNCwgNzg1MTcsIDExNDYxLCA3NDQ1NCwgMTA3NTEsIDkwNTEsIAotICAgIDEyMDcyMCwgNjcwOCwgMTA1MzUsIDAsIDY4MjE4LCA1NTI3NCwgMjAwOCwgNjQwMzEsIDY0MDMwLCAyOTQsIDQxODc0LCAwLCAKLSAgICAxMjY5OTEsIDY1OTI5LCAwLCAwLCAwLCAwLCA2NDAyOCwgODE0NiwgNjQwMjYsIDQxNzg4LCAxOTQ4NDQsIDAsIDQzNTEsIAotICAgIDYzNDMsIDQzMjQ3LCAxMTk4ODgsIDAsIDExOTg4NiwgMTE5ODkxLCAxMTk4OTIsIDExOTg4OSwgMTE0MzMsIDExOTg5NSwgCi0gICAgMTE5ODk2LCAwLCA3ODAxLCA2NTU3OCwgMTk0ODM5LCAxMjkxNSwgNDM5NjgsIDMyOTcsIDk2OTksIDE5NDk1NSwgMTEzNSwgCi0gICAgMCwgMCwgMTI4NTI1LCAxOTk1LCA2NzIyLCA5ODM5MTYsIDAsIDI1NTIsIDQxNTQ2LCA2MCwgNjgzOTQsIDg2NDksIDQxNTQ5LCAKLSAgICA3ODQ5NiwgOTgzMzE5LCAwLCA2NjgyLCAwLCA3ODY3OSwgNjQ3MTAsIDQxNTQ3LCA5ODM2MjEsIDIwMTMsIDEyODI5MSwgCi0gICAgNzg1MzAsIDc4NTMyLCA3ODUyOCwgNzg1MjksIDEyODMyLCA3ODQ5MywgODA4MSwgODM2MiwgMzUzNywgMTE5OTA4LCA5MTM3LCAKLSAgICA3MTU1LCA4OTk5LCAwLCA3ODUzMywgMzQ2NiwgMCwgMCwgMTk5NiwgMCwgMzQ1MywgNjI4MiwgMCwgMjAwMiwgMjAwMCwgCi0gICAgMTIwMTc1LCA1MzcsIDAsIDQxNzksIDY1MTE5LCAxOTk4LCAwLCAxODQyLCAwLCA5MjY3NCwgOTYyOCwgNjg0NDYsIDEyMDgxLCAKLSAgICA5ODI2LCA2NDUwMiwgMTc2NywgMCwgMCwgMCwgMTIwMjAxLCA5ODM2MzcsIDAsIDAsIDMwNTksIDQ0MDI0LCAxMjAyMDQsIAotICAgIDExOTk1MywgOTI2OTMsIDAsIDAsIDkyNDUyLCA0MTAwLCA5MjAsIDE4MTEsIDEzNTUsIDAsIDAsIDM1OTIsIDEwMDc4LCAwLCAKLSAgICAwLCAwLCA4NTkyLCA2NTg3MCwgNjgxNjQsIDEyODc5MiwgMTA3NDIsIDAsIDQyOTE4LCAxOTk0LCA5MjgxLCAzMjk2LCAKLSAgICAxMjg2NSwgMTk5NywgMTg5NSwgCisgICAgMTIwNzIwLCA2NzA4LCAxMDUzNSwgOTgzNjI3LCA2ODIxOCwgNTUyNzQsIDIwMDgsIDY0MDMxLCA2NDAzMCwgMjk0LCAKKyAgICA0MTg3NCwgMCwgMTI2OTkxLCA2NTkyOSwgMCwgMCwgMCwgMCwgNjQwMjgsIDgxNDYsIDY0MDI2LCA0MTc4OCwgMTk0ODQ0LCAKKyAgICAwLCA0MzUxLCA2MzQzLCA0MzI0NywgMTE5ODg4LCAwLCAxMTk4ODYsIDExOTg5MSwgMTE5ODkyLCAxMTk4ODksIDExNDMzLCAKKyAgICAxMTk4OTUsIDExOTg5NiwgMCwgNzgwMSwgNjU1NzgsIDE5NDgzOSwgMTI5MTUsIDQzOTY4LCAzMjk3LCA5Njk5LCAxOTQ5NTUsIAorICAgIDExMzUsIDAsIDAsIDEyODUyNSwgMTk5NSwgNjcyMiwgOTgzOTI1LCAwLCAyNTUyLCA0MTU0NiwgNjAsIDY4Mzk0LCA4NjQ5LCAKKyAgICA0MTU0OSwgNzg0OTYsIDk4MzMyNywgMCwgNjY4MiwgMCwgNzg2NzksIDY0NzEwLCA0MTU0NywgOTgzNjMwLCAyMDEzLCAKKyAgICAxMjgyOTEsIDc4NTMwLCA3ODUzMiwgNzg1MjgsIDc4NTI5LCAxMjgzMiwgNzg0OTMsIDgwODEsIDgzNjIsIDM1MzcsIAorICAgIDExOTkwOCwgOTEzNywgNzE1NSwgODk5OSwgMCwgNzg1MzMsIDM0NjYsIDAsIDAsIDE5OTYsIDAsIDM0NTMsIDYyODIsIDAsIAorICAgIDIwMDIsIDIwMDAsIDEyMDE3NSwgNTM3LCAwLCA0MTc5LCA2NTExOSwgMTk5OCwgMCwgMTg0MiwgMCwgOTI2NzQsIDk2MjgsIAorICAgIDY4NDQ2LCAxMjA4MSwgOTgyNiwgNjQ1MDIsIDE3NjcsIDAsIDAsIDAsIDEyMDIwMSwgOTgzNjQ2LCAwLCAwLCAzMDU5LCAKKyAgICA0NDAyNCwgMTIwMjA0LCAxMTk5NTMsIDkyNjkzLCAwLCAwLCA5MjQ1MiwgNDEwMCwgOTIwLCAxODExLCAxMzU1LCAwLCAwLCAKKyAgICAzNTkyLCAxMDA3OCwgMCwgMCwgMCwgODU5MiwgNjU4NzAsIDY4MTY0LCAxMjg3OTIsIDEwNzQyLCAwLCA0MjkxOCwgMTk5NCwgCisgICAgOTI4MSwgMzI5NiwgMTI4NjUsIDE5OTcsIDE4OTUsIAogfTsKIAogI2RlZmluZSBjb2RlX21hZ2ljIDQ3CkBAIC0xOTgxOSw3ICsxOTgzOSw3IEBACiAjZGVmaW5lIGNvZGVfcG9seSAzMjc3MQogCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGFsaWFzZXNfc3RhcnQgPSAweGYwMDAwOwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBhbGlhc2VzX2VuZCA9IDB4ZjAxYzE7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGFsaWFzZXNfZW5kID0gMHhmMDFjOTsKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbmFtZV9hbGlhc2VzW10gPSB7CiAgICAgMHgwMDAwLAogICAgIDB4MDAwMCwKQEAgLTE5OTgyLDYgKzIwMDAyLDggQEAKICAgICAweDAxQTIsCiAgICAgMHgwMUEzLAogICAgIDB4MDM0RiwKKyAgICAweDA2MUMsCisgICAgMHgwNzA5LAogICAgIDB4MENERSwKICAgICAweDBFOUQsCiAgICAgMHgwRTlGLApAQCAtMjAwMDUsNiArMjAwMjcsMTAgQEAKICAgICAweDIwMkYsCiAgICAgMHgyMDVGLAogICAgIDB4MjA2MCwKKyAgICAweDIwNjYsCisgICAgMHgyMDY3LAorICAgIDB4MjA2OCwKKyAgICAweDIwNjksCiAgICAgMHgyMTE4LAogICAgIDB4MjQ0OCwKICAgICAweDI0NDksCkBAIC0yMDAyOSw2ICsyMDA1NSw4IEBACiAgICAgMHhGRUZGLAogICAgIDB4RkVGRiwKICAgICAweEZFRkYsCisgICAgMHgxMjJENCwKKyAgICAweDEyMkQ1LAogICAgIDB4MUQwQzUsCiAgICAgMHhFMDEwMCwKICAgICAweEUwMTAxLApAQCAtMjAyNzgsNyArMjAzMDYsNyBAQAogfSBuYW1lZF9zZXF1ZW5jZTsKIAogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBuYW1lZF9zZXF1ZW5jZXNfc3RhcnQgPSAweGYwMjAwOwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBuYW1lZF9zZXF1ZW5jZXNfZW5kID0gMHhmMDNhNTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbmFtZWRfc2VxdWVuY2VzX2VuZCA9IDB4ZjAzYWU7CiBzdGF0aWMgY29uc3QgbmFtZWRfc2VxdWVuY2UgbmFtZWRfc2VxdWVuY2VzW10gPSB7CiAgICAgezIsIHsweDAxMDAsIDB4MDMwMH19LAogICAgIHsyLCB7MHgwMTAxLCAweDAzMDB9fSwKQEAgLTIwMzQ5LDYgKzIwMzc3LDE1IEBACiAgICAgezIsIHsweDAyNTksIDB4MDMwMX19LAogICAgIHsyLCB7MHgwMjVBLCAweDAzMDB9fSwKICAgICB7MiwgezB4MDI1QSwgMHgwMzAxfX0sCisgICAgezIsIHsweDA2MjYsIDB4MDYyN319LAorICAgIHsyLCB7MHgwNjI2LCAweDA2NDh9fSwKKyAgICB7MiwgezB4MDYyNiwgMHgwNjQ5fX0sCisgICAgezIsIHsweDA2MjYsIDB4MDZDNn19LAorICAgIHsyLCB7MHgwNjI2LCAweDA2Qzd9fSwKKyAgICB7MiwgezB4MDYyNiwgMHgwNkM4fX0sCisgICAgezIsIHsweDA2MjYsIDB4MDZEMH19LAorICAgIHsyLCB7MHgwNjI2LCAweDA2RDV9fSwKKyAgICB7MiwgezB4MDY0NiwgMHgwNkE5fX0sCiAgICAgezMsIHsweDA5OTUsIDB4MDlDRCwgMHgwOUI3fX0sCiAgICAgezIsIHsweDBCOTUsIDB4MEJDRH19LAogICAgIHsyLCB7MHgwQjk5LCAweDBCQ0R9fSwKZGlmZiAtLWdpdCBhL01vZHVsZXMveHhsaW1pdGVkLmMgYi9Nb2R1bGVzL3h4bGltaXRlZC5jCmluZGV4IDY2MWI2ZTIuLmVlY2RhYjkgMTAwNjQ0Ci0tLSBhL01vZHVsZXMveHhsaW1pdGVkLmMKKysrIGIvTW9kdWxlcy94eGxpbWl0ZWQuYwpAQCAtNDQsNyArNDQsNyBAQAogWHhvX2RlYWxsb2MoWHhvT2JqZWN0ICpzZWxmKQogewogICAgIFB5X1hERUNSRUYoc2VsZi0+eF9hdHRyKTsKLSAgICBQeU9iamVjdF9EZWwoc2VsZik7CisgICAgKChmcmVlZnVuYylQeVR5cGVfR2V0U2xvdChQeV9UWVBFKHNlbGYpLCBQeV90cF9mcmVlKSkoc2VsZik7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3ppcGltcG9ydC5jIGIvTW9kdWxlcy96aXBpbXBvcnQuYwppbmRleCAyZmViMmE4Li5mMmNjMjQ1IDEwMDY0NAotLS0gYS9Nb2R1bGVzL3ppcGltcG9ydC5jCisrKyBiL01vZHVsZXMvemlwaW1wb3J0LmMKQEAgLTE0LDYgKzE0LDEwIEBACiAgICAgaW50IHR5cGU7CiB9OwogCisjaWZkZWYgQUxUU0VQCitfUHlfSURFTlRJRklFUihyZXBsYWNlKTsKKyNlbmRpZgorCiAvKiB6aXBfc2VhcmNob3JkZXIgZGVmaW5lcyBob3cgd2Ugc2VhcmNoIGZvciBhIG1vZHVsZSBpbiB0aGUgWmlwCiAgICBhcmNoaXZlOiB3ZSBmaXJzdCBzZWFyY2ggZm9yIGEgcGFja2FnZSBfX2luaXRfXywgdGhlbiBmb3IKICAgIG5vbi1wYWNrYWdlIC5weWMsIC5weW8gYW5kIC5weSBlbnRyaWVzLiBUaGUgLnB5YyBhbmQgLnB5byBlbnRyaWVzCkBAIC02Niw5ICs3MCw2IEBACiAgICAgUHlPYmplY3QgKnBhdGgsICpmaWxlcywgKnRtcDsKICAgICBQeU9iamVjdCAqZmlsZW5hbWUgPSBOVUxMOwogICAgIFB5X3NzaXplX3QgbGVuLCBmbGVuOwotI2lmZGVmIEFMVFNFUAotICAgIF9QeV9JREVOVElGSUVSKHJlcGxhY2UpOwotI2VuZGlmCiAKICAgICBpZiAoIV9QeUFyZ19Ob0tleXdvcmRzKCJ6aXBpbXBvcnRlcigpIiwga3dkcykpCiAgICAgICAgIHJldHVybiAtMTsKQEAgLTExNyw2ICsxMTgsOCBAQAogICAgICAgICBpZiAoZmxlbiA9PSAtMSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBmaWxlbmFtZSA9IFB5VW5pY29kZV9TdWJzdHJpbmcocGF0aCwgMCwgZmxlbik7CisgICAgICAgIGlmIChmaWxlbmFtZSA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICB9CiAgICAgaWYgKGZpbGVuYW1lID09IE5VTEwpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFppcEltcG9ydEVycm9yLCAibm90IGEgWmlwIGZpbGUiKTsKQEAgLTIzMCw3ICsyMzMsNyBAQAogICAgIFB5X3NzaXplX3QgbGVuOwogCiAgICAgbGVuID0gUHlVbmljb2RlX0dFVF9MRU5HVEgocHJlZml4KSArIFB5VW5pY29kZV9HRVRfTEVOR1RIKG5hbWUpICsgMTsKLSAgICBwID0gYnVmID0gUHlNZW1fTWFsbG9jKHNpemVvZihQeV9VQ1M0KSAqIGxlbik7CisgICAgcCA9IGJ1ZiA9IFB5TWVtX05ldyhQeV9VQ1M0LCBsZW4pOwogICAgIGlmIChidWYgPT0gTlVMTCkgewogICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTQ2OSwxMCArNDcyLDEzIEBACiAgICAgaWYgKGlzcGFja2FnZSkgewogICAgICAgICAvKiBhZGQgX19wYXRoX18gdG8gdGhlIG1vZHVsZSAqYmVmb3JlKiB0aGUgY29kZSBnZXRzCiAgICAgICAgICAgIGV4ZWN1dGVkICovCi0gICAgICAgIFB5T2JqZWN0ICpwa2dwYXRoLCAqZnVsbHBhdGg7Ci0gICAgICAgIFB5T2JqZWN0ICpzdWJuYW1lID0gZ2V0X3N1Ym5hbWUoZnVsbG5hbWUpOworICAgICAgICBQeU9iamVjdCAqcGtncGF0aCwgKmZ1bGxwYXRoLCAqc3VibmFtZTsKICAgICAgICAgaW50IGVycjsKIAorICAgICAgICBzdWJuYW1lID0gZ2V0X3N1Ym5hbWUoZnVsbG5hbWUpOworICAgICAgICBpZiAoc3VibmFtZSA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKwogICAgICAgICBmdWxscGF0aCA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0KCIlVSVjJVUlVSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYtPmFyY2hpdmUsIFNFUCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi0+cHJlZml4LCBzdWJuYW1lKTsKQEAgLTU1NCw5ICs1NjAsNiBAQAogewogICAgIFppcEltcG9ydGVyICpzZWxmID0gKFppcEltcG9ydGVyICopb2JqOwogICAgIFB5T2JqZWN0ICpwYXRoLCAqa2V5OwotI2lmZGVmIEFMVFNFUAotICAgIF9QeV9JREVOVElGSUVSKHJlcGxhY2UpOwotI2VuZGlmCiAgICAgUHlPYmplY3QgKnRvY19lbnRyeTsKICAgICBQeV9zc2l6ZV90IHBhdGhfc3RhcnQsIHBhdGhfbGVuLCBsZW47CiAKQEAgLTg2Miw2ICs4NjUsNyBAQAogICAgIGxvbmcgbCwgY291bnQ7CiAgICAgUHlfc3NpemVfdCBpOwogICAgIGNoYXIgbmFtZVtNQVhQQVRITEVOICsgNV07CisgICAgY2hhciBkdW1teVs4XTsgLyogQnVmZmVyIHRvIHJlYWQgdW51c2VkIGhlYWRlciB2YWx1ZXMgaW50byAqLwogICAgIFB5T2JqZWN0ICpuYW1lb2JqID0gTlVMTDsKICAgICBjaGFyICpwLCBlbmRvZl9jZW50cmFsX2RpclsyMl07CiAgICAgUHlfc3NpemVfdCBhcmNfb2Zmc2V0OyAgLyogQWJzb2x1dGUgb2Zmc2V0IHRvIHN0YXJ0IG9mIHRoZSB6aXAtYXJjaGl2ZS4gKi8KQEAgLTg2OSw3ICs4NzMsNyBAQAogICAgIGNvbnN0IGNoYXIgKmNoYXJzZXQ7CiAgICAgaW50IGJvb3RzdHJhcDsKIAotICAgIGZwID0gX1B5X2ZvcGVuKGFyY2hpdmUsICJyYiIpOworICAgIGZwID0gX1B5X2ZvcGVuX29iaihhcmNoaXZlLCAicmIiKTsKICAgICBpZiAoZnAgPT0gTlVMTCkgewogICAgICAgICBpZiAoIVB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoWmlwSW1wb3J0RXJyb3IsICJjYW4ndCBvcGVuIFppcCBmaWxlOiAlUiIsIGFyY2hpdmUpOwpAQCAtOTA1LDE3ICs5MDksMjUgQEAKIAogICAgIC8qIFN0YXJ0IG9mIENlbnRyYWwgRGlyZWN0b3J5ICovCiAgICAgY291bnQgPSAwOworICAgIGlmIChmc2VlayhmcCwgaGVhZGVyX29mZnNldCwgMCkgPT0gLTEpCisgICAgICAgIGdvdG8gZmlsZV9lcnJvcjsKICAgICBmb3IgKDs7KSB7CiAgICAgICAgIFB5T2JqZWN0ICp0OwogICAgICAgICBpbnQgZXJyOwogCi0gICAgICAgIGlmIChmc2VlayhmcCwgaGVhZGVyX29mZnNldCwgMCkgPT0gLTEpICAvKiBTdGFydCBvZiBmaWxlIGhlYWRlciAqLwotICAgICAgICAgICAgZ290byBmc2Vla19lcnJvcjsKKyAgICAgICAgLyogU3RhcnQgb2YgZmlsZSBoZWFkZXIgKi8KICAgICAgICAgbCA9IFB5TWFyc2hhbF9SZWFkTG9uZ0Zyb21GaWxlKGZwKTsKKyAgICAgICAgaWYgKGwgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgIGlmIChsICE9IDB4MDIwMTRCNTApCiAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgIC8qIEJhZDogQ2VudHJhbCBEaXIgRmlsZSBIZWFkZXIgKi8KLSAgICAgICAgaWYgKGZzZWVrKGZwLCBoZWFkZXJfb2Zmc2V0ICsgOCwgMCkgPT0gLTEpCi0gICAgICAgICAgICBnb3RvIGZzZWVrX2Vycm9yOworCisgICAgICAgIC8qIE9uIFdpbmRvd3MsIGNhbGxpbmcgZnNlZWsgdG8gc2tpcCBvdmVyIHRoZSBmaWVsZHMgd2UgZG9uJ3QgdXNlIGlzCisgICAgICAgIHNsb3dlciB0aGFuIHJlYWRpbmcgdGhlIGRhdGEgaW50byBhIGR1bW15IGJ1ZmZlciBiZWNhdXNlIGZzZWVrIGZsdXNoZXMKKyAgICAgICAgc3RkaW8ncyBpbnRlcm5hbCBidWZmZXJzLiBTZWUgaXNzdWUgIzg3NDUuICovCisgICAgICAgIGlmIChmcmVhZChkdW1teSwgMSwgNCwgZnApICE9IDQpIC8qIFNraXAgdW51c2VkIGZpZWxkcywgYXZvaWQgZnNlZWsgKi8KKyAgICAgICAgICAgIGdvdG8gZmlsZV9lcnJvcjsKKwogICAgICAgICBmbGFncyA9ICh1bnNpZ25lZCBzaG9ydClQeU1hcnNoYWxfUmVhZFNob3J0RnJvbUZpbGUoZnApOwogICAgICAgICBjb21wcmVzcyA9IFB5TWFyc2hhbF9SZWFkU2hvcnRGcm9tRmlsZShmcCk7CiAgICAgICAgIHRpbWUgPSBQeU1hcnNoYWxfUmVhZFNob3J0RnJvbUZpbGUoZnApOwpAQCAtOTI0LDEyICs5MzYsMTUgQEAKICAgICAgICAgZGF0YV9zaXplID0gUHlNYXJzaGFsX1JlYWRMb25nRnJvbUZpbGUoZnApOwogICAgICAgICBmaWxlX3NpemUgPSBQeU1hcnNoYWxfUmVhZExvbmdGcm9tRmlsZShmcCk7CiAgICAgICAgIG5hbWVfc2l6ZSA9IFB5TWFyc2hhbF9SZWFkU2hvcnRGcm9tRmlsZShmcCk7Ci0gICAgICAgIGhlYWRlcl9zaXplID0gNDYgKyBuYW1lX3NpemUgKworICAgICAgICBoZWFkZXJfc2l6ZSA9IG5hbWVfc2l6ZSArCiAgICAgICAgICAgIFB5TWFyc2hhbF9SZWFkU2hvcnRGcm9tRmlsZShmcCkgKwogICAgICAgICAgICBQeU1hcnNoYWxfUmVhZFNob3J0RnJvbUZpbGUoZnApOwotICAgICAgICBpZiAoZnNlZWsoZnAsIGhlYWRlcl9vZmZzZXQgKyA0MiwgMCkgPT0gLTEpCi0gICAgICAgICAgICBnb3RvIGZzZWVrX2Vycm9yOworICAgICAgICBpZiAoZnJlYWQoZHVtbXksIDEsIDgsIGZwKSAhPSA4KSAvKiBTa2lwIHVudXNlZCBmaWVsZHMsIGF2b2lkIGZzZWVrICovCisgICAgICAgICAgICBnb3RvIGZpbGVfZXJyb3I7CiAgICAgICAgIGZpbGVfb2Zmc2V0ID0gUHlNYXJzaGFsX1JlYWRMb25nRnJvbUZpbGUoZnApICsgYXJjX29mZnNldDsKKyAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgICBnb3RvIGVycm9yOworCiAgICAgICAgIGlmIChuYW1lX3NpemUgPiBNQVhQQVRITEVOKQogICAgICAgICAgICAgbmFtZV9zaXplID0gTUFYUEFUSExFTjsKIApAQCAtOTQxLDcgKzk1Niw5IEBACiAgICAgICAgICAgICBwKys7CiAgICAgICAgIH0KICAgICAgICAgKnAgPSAwOyAgICAgICAgIC8qIEFkZCB0ZXJtaW5hdGluZyBudWxsIGJ5dGUgKi8KLSAgICAgICAgaGVhZGVyX29mZnNldCArPSBoZWFkZXJfc2l6ZTsKKyAgICAgICAgZm9yICg7IGkgPCBoZWFkZXJfc2l6ZTsgaSsrKSAvKiBTa2lwIHRoZSByZXN0IG9mIHRoZSBoZWFkZXIgKi8KKyAgICAgICAgICAgIGlmKGdldGMoZnApID09IEVPRikgLyogQXZvaWQgZnNlZWsgKi8KKyAgICAgICAgICAgICAgICBnb3RvIGZpbGVfZXJyb3I7CiAKICAgICAgICAgYm9vdHN0cmFwID0gMDsKICAgICAgICAgaWYgKGZsYWdzICYgMHgwODAwKQpAQCAtOTg4LDcgKzEwMDUsNyBAQAogICAgICAgICBQeVN5c19Gb3JtYXRTdGRlcnIoIiMgemlwaW1wb3J0OiBmb3VuZCAlbGQgbmFtZXMgaW4gJVJcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCwgYXJjaGl2ZSk7CiAgICAgcmV0dXJuIGZpbGVzOwotZnNlZWtfZXJyb3I6CitmaWxlX2Vycm9yOgogICAgIGZjbG9zZShmcCk7CiAgICAgUHlfWERFQ1JFRihmaWxlcyk7CiAgICAgUHlfWERFQ1JFRihuYW1lb2JqKTsKQEAgLTEwNTUsNyArMTA3Miw3IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIGZwID0gX1B5X2ZvcGVuKGFyY2hpdmUsICJyYiIpOworICAgIGZwID0gX1B5X2ZvcGVuX29iaihhcmNoaXZlLCAicmIiKTsKICAgICBpZiAoIWZwKSB7CiAgICAgICAgIGlmICghUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19JT0Vycm9yLApAQCAtMTA3Myw5ICsxMDkwLDEwIEBACiAgICAgbCA9IFB5TWFyc2hhbF9SZWFkTG9uZ0Zyb21GaWxlKGZwKTsKICAgICBpZiAobCAhPSAweDA0MDM0QjUwKSB7CiAgICAgICAgIC8qIEJhZDogTG9jYWwgRmlsZSBIZWFkZXIgKi8KLSAgICAgICAgUHlFcnJfRm9ybWF0KFppcEltcG9ydEVycm9yLAotICAgICAgICAgICAgICAgICAgICAgImJhZCBsb2NhbCBmaWxlIGhlYWRlciBpbiAlVSIsCi0gICAgICAgICAgICAgICAgICAgICBhcmNoaXZlKTsKKyAgICAgICAgaWYgKCFQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFppcEltcG9ydEVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICJiYWQgbG9jYWwgZmlsZSBoZWFkZXIgaW4gJVUiLAorICAgICAgICAgICAgICAgICAgICAgICAgIGFyY2hpdmUpOwogICAgICAgICBmY2xvc2UoZnApOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CkBAIC0xMDg3LDYgKzExMDUsMTAgQEAKIAogICAgIGwgPSAzMCArIFB5TWFyc2hhbF9SZWFkU2hvcnRGcm9tRmlsZShmcCkgKwogICAgICAgICBQeU1hcnNoYWxfUmVhZFNob3J0RnJvbUZpbGUoZnApOyAgICAgICAgLyogbG9jYWwgaGVhZGVyIHNpemUgKi8KKyAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICBmY2xvc2UoZnApOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAgICAgZmlsZV9vZmZzZXQgKz0gbDsgICAgICAgICAgIC8qIFN0YXJ0IG9mIGZpbGUgZGF0YSAqLwogCiAgICAgYnl0ZXNfc2l6ZSA9IGNvbXByZXNzID09IDAgPyBkYXRhX3NpemUgOiBkYXRhX3NpemUgKyAxOwpAQCAtMTI0OSw3ICsxMjcxLDcgQEAKIH0KIAogLyogR2l2ZW4gYSBzdHJpbmcgYnVmZmVyIGNvbnRhaW5pbmcgUHl0aG9uIHNvdXJjZSBjb2RlLCBjb21waWxlIGl0Ci0gICByZXR1cm4gYW5kIHJldHVybiBhIGNvZGUgb2JqZWN0IGFzIGEgbmV3IHJlZmVyZW5jZS4gKi8KKyAgIGFuZCByZXR1cm4gYSBjb2RlIG9iamVjdCBhcyBhIG5ldyByZWZlcmVuY2UuICovCiBzdGF0aWMgUHlPYmplY3QgKgogY29tcGlsZV9zb3VyY2UoUHlPYmplY3QgKnBhdGhuYW1lLCBQeU9iamVjdCAqc291cmNlKQogewpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL0NoYW5nZUxvZyBiL01vZHVsZXMvemxpYi9DaGFuZ2VMb2cKaW5kZXggZjMxMGJiMC4uZjIyYWFiYSAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL0NoYW5nZUxvZworKysgYi9Nb2R1bGVzL3psaWIvQ2hhbmdlTG9nCkBAIC0xLDEyICsxLDI3NiBAQAogCiAgICAgICAgICAgICAgICAgQ2hhbmdlTG9nIGZpbGUgZm9yIHpsaWIKIAorQ2hhbmdlcyBpbiAxLjIuOCAoMjggQXByIDIwMTMpCistIFVwZGF0ZSBjb250cmliL21pbml6aXAvaW93aW4zMi5jIGZvciBXaW5kb3dzIFJUIFtWb2xsYW50XQorLSBEbyBub3QgZm9yY2UgWl9DT05TVCBmb3IgQysrCistIENsZWFuIHVwIGNvbnRyaWIvdnN0dWRpbyBbUm+nXQorLSBDb3JyZWN0IHNwZWxsaW5nIGVycm9yIGluIHpsaWIuaAorLSBGaXggbWl4ZWQgbGluZSBlbmRpbmdzIGluIGNvbnRyaWIvdnN0dWRpbworCitDaGFuZ2VzIGluIDEuMi43LjMgKDEzIEFwciAyMDEzKQorLSBGaXggdmVyc2lvbiBudW1iZXJzIGFuZCBETEwgbmFtZXMgaW4gY29udHJpYi92c3R1ZGlvLyovemxpYi5yYworCitDaGFuZ2VzIGluIDEuMi43LjIgKDEzIEFwciAyMDEzKQorLSBDaGFuZ2UgY2hlY2sgZm9yIGEgZm91ci1ieXRlIHR5cGUgYmFjayB0byBoZXhhZGVjaW1hbAorLSBGaXggdHlwbyBpbiB3aW4zMi9NYWtlZmlsZS5tc2MKKy0gQWRkIGNhc3RzIGluIGd6d3JpdGUuYyBmb3IgcG9pbnRlciBkaWZmZXJlbmNlcworCitDaGFuZ2VzIGluIDEuMi43LjEgKDI0IE1hciAyMDEzKQorLSBSZXBsYWNlIHVzZSBvZiB1bnNhZmUgc3RyaW5nIGZ1bmN0aW9ucyB3aXRoIHNucHJpbnRmIGlmIGF2YWlsYWJsZQorLSBBdm9pZCBpbmNsdWRpbmcgc3RkZGVmLmggb24gV2luZG93cyBmb3IgWl9TT0xPIGNvbXBpbGUgW05pZXNzaW5rXQorLSBGaXggZ3pnZXRjIHVuZGVmaW5lIHdoZW4gWl9QUkVGSVggc2V0IFtUdXJrXQorLSBFbGltaW5hdGUgdXNlIG9mIG1rdGVtcCBpbiBNYWtlZmlsZSAobm90IGFsd2F5cyBhdmFpbGFibGUpCistIEZpeCBidWcgaW4gJ0YnIG1vZGUgZm9yIGd6b3BlbigpCistIEFkZCBpbmZsYXRlR2V0RGljdGlvbmFyeSgpIGZ1bmN0aW9uCistIENvcnJlY3QgY29tbWVudCBpbiBkZWZsYXRlLmgKKy0gVXNlIF9zbnByaW50ZiBmb3Igc25wcmludGYgaW4gTWljcm9zb2Z0IEMKKy0gT24gRGFyd2luLCBvbmx5IHVzZSAvdXNyL2Jpbi9saWJ0b29sIGlmIGxpYnRvb2wgaXMgbm90IEFwcGxlCistIERlbGV0ZSAiLS12ZXJzaW9uIiBmaWxlIGlmIGNyZWF0ZWQgYnkgImFyIC0tdmVyc2lvbiIgW1JpY2hhcmQgRy5dCistIEZpeCBjb25maWd1cmUgY2hlY2sgZm9yIHZlcmFjaXR5IG9mIGNvbXBpbGVyIGVycm9yIHJldHVybiBjb2RlcworLSBGaXggQ01ha2UgY29tcGlsYXRpb24gb2Ygc3RhdGljIGxpYiBmb3IgTVNWQzIwMTAgeDY0CistIFJlbW92ZSB1bnVzZWQgdmFyaWFibGUgaW4gaW5mYmFjazkuYworLSBGaXggYXJndW1lbnQgY2hlY2tzIGluIGd6bG9nX2NvbXByZXNzKCkgYW5kIGd6bG9nX3dyaXRlKCkKKy0gQ2xlYW4gdXAgdGhlIHVzYWdlIG9mIHpfY29uc3QgYW5kIHJlc3BlY3QgY29uc3QgdXNhZ2Ugd2l0aGluIHpsaWIKKy0gQ2xlYW4gdXAgZXhhbXBsZXMvZ3psb2cuW2NoXSBjb21wYXJpc29ucyBvZiBkaWZmZXJlbnQgdHlwZXMKKy0gQXZvaWQgc2hpZnQgZXF1YWwgdG8gYml0cyBpbiB0eXBlIChjYXVzZWQgZW5kbGVzcyBsb29wKQorLSBGaXggdW5pbnRpYWxpemVkIHZhbHVlIGJ1ZyBpbiBnenB1dGMoKSBpbnRyb2R1Y2VkIGJ5IGNvbnN0IHBhdGNoZXMKKy0gRml4IG1lbW9yeSBhbGxvY2F0aW9uIGVycm9yIGluIGV4YW1wbGVzL3pyYW4uYyBbTm9yXQorLSBGaXggYnVnIHdoZXJlIGd6b3BlbigpLCBnemNsb3NlKCkgd291bGQgd3JpdGUgYW4gZW1wdHkgZmlsZQorLSBGaXggYnVnIGluIGd6Y2xvc2UoKSB3aGVuIGd6d3JpdGUoKSBydW5zIG91dCBvZiBtZW1vcnkKKy0gQ2hlY2sgZm9yIGlucHV0IGJ1ZmZlciBtYWxsb2MgZmFpbHVyZSBpbiBleGFtcGxlcy9nemFwcGVuZC5jCistIEFkZCBub3RlIHRvIGNvbnRyaWIvYmxhc3QgdG8gdXNlIGJpbmFyeSBtb2RlIGluIHN0ZGlvCistIEZpeCBjb21wYXJpc29ucyBvZiBkaWZmZXJlbnRseSBzaWduZWQgaW50ZWdlcnMgaW4gY29udHJpYi9ibGFzdAorLSBDaGVjayBmb3IgaW52YWxpZCBjb2RlIGxlbmd0aCBjb2RlcyBpbiBjb250cmliL3B1ZmYKKy0gRml4IHNlcmlvdXMgYnV0IHZlcnkgcmFyZSBkZWNvbXByZXNzaW9uIGJ1ZyBpbiBpbmZ0cmVlcy5jCistIFVwZGF0ZSBpbmZsYXRlQmFjaygpIGNvbW1lbnRzLCBzaW5jZSBpbmZsYXRlKCkgY2FuIGJlIGZhc3RlcgorLSBVc2UgdW5kZXJzY29yZWQgSS9PIGZ1bmN0aW9uIG5hbWVzIGZvciBXSU5BUElfRkFNSUxZCistIEFkZCBfdHJfZmx1c2hfYml0cyB0byB0aGUgZXh0ZXJuYWwgc3ltYm9scyBwcmVmaXhlZCBieSAtLXpwcmVmaXgKKy0gQWRkIGNvbnRyaWIvdnN0dWRpby92YzEwIHByZS1idWlsZCBzdGVwIGZvciBzdGF0aWMgb25seQorLSBRdW90ZSAtLXZlcnNpb24tc2NyaXB0IGFyZ3VtZW50IGluIENNYWtlTGlzdHMudHh0CistIERvbid0IHNwZWNpZnkgLS12ZXJzaW9uLXNjcmlwdCBvbiBBcHBsZSBwbGF0Zm9ybXMgaW4gQ01ha2VMaXN0cy50eHQKKy0gRml4IGNhc3RpbmcgZXJyb3IgaW4gY29udHJpYi90ZXN0emxpYi90ZXN0emxpYi5jCistIEZpeCB0eXBlcyBpbiBjb250cmliL21pbml6aXAgdG8gbWF0Y2ggcmVzdWx0IG9mIGdldF9jcmNfdGFibGUoKQorLSBTaW1wbGlmeSBjb250cmliL3ZzdHVkaW8vdmMxMCB3aXRoICdkJyBzdWZmaXgKKy0gQWRkIFRPUCBzdXBwb3J0IHRvIHdpbjMyL01ha2VmaWxlLm1zYworLSBTdXBvcnQgaTY4NiBhbmQgYW1kNjQgYXNzZW1ibGVyIGJ1aWxkcyBpbiBDTWFrZUxpc3RzLnR4dAorLSBGaXggdHlwb3MgaW4gdGhlIHVzZSBvZiBfTEFSR0VGSUxFNjRfU09VUkNFIGluIHpjb25mLmgKKy0gQWRkIHZjMTEgYW5kIHZjMTIgYnVpbGQgZmlsZXMgdG8gY29udHJpYi92c3R1ZGlvCistIEFkZCBnenZwcmludGYoKSBhcyBhbiB1bmRvY3VtZW50ZWQgZnVuY3Rpb24gaW4gemxpYgorLSBGaXggY29uZmlndXJlIGZvciBTdW4gc2hlbGwKKy0gUmVtb3ZlIHJ1bnRpbWUgY2hlY2sgaW4gY29uZmlndXJlIGZvciBmb3VyLWJ5dGUgaW50ZWdlciB0eXBlCistIEFkZCBjYXN0cyBhbmQgY29uc3RzIHRvIGVhc2UgdXNlciBjb252ZXJzaW9uIHRvIEMrKworLSBBZGQgbWFuIHBhZ2VzIGZvciBtaW5pemlwIGFuZCBtaW5pdW56aXAKKy0gSW4gTWFrZWZpbGUgdW5pbnN0YWxsLCBkb24ndCBybSBpZiBwcmVjZWRpbmcgY2QgZmFpbHMKKy0gRG8gbm90IHJldHVybiBaX0JVRl9FUlJPUiBpZiBkZWZsYXRlUGFyYW0oKSBoYXMgbm90aGluZyB0byB3cml0ZQorCitDaGFuZ2VzIGluIDEuMi43ICgyIE1heSAyMDEyKQorLSBSZXBsYWNlIHVzZSBvZiBtZW1tb3ZlKCkgd2l0aCBhIHNpbXBsZSBjb3B5IGZvciBwb3J0YWJpbGl0eQorLSBUZXN0IGZvciBleGlzdGVuY2Ugb2Ygc3RyZXJyb3IKKy0gUmVzdG9yZSBnemdldGNfIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGggMS4yLjYKKy0gRml4IGJ1aWxkIHdpdGggbm9uLUdOVSBtYWtlIG9uIFNvbGFyaXMKKy0gUmVxdWlyZSBnY2MgNC4wIG9yIGxhdGVyIG9uIE1hYyBPUyBYIHRvIHVzZSB0aGUgaGlkZGVuIGF0dHJpYnV0ZQorLSBJbmNsdWRlIHVuaXN0ZC5oIGZvciBXYXRjb20gQworLSBVc2UgX19XQVRDT01DX18gaW5zdGVhZCBvZiBfX1dBVENPTV9fCistIERvIG5vdCB1c2UgdGhlIHZpc2liaWxpdHkgYXR0cmlidXRlIGlmIE5PX1ZJWiBkZWZpbmVkCistIEltcHJvdmUgdGhlIGRldGVjdGlvbiBvZiBubyBoaWRkZW4gdmlzaWJpbGl0eSBhdHRyaWJ1dGUKKy0gQXZvaWQgdXNpbmcgX19pbnQ2NCBmb3IgZ2NjIG9yIHNvbG8gY29tcGlsYXRpb24KKy0gQ2FzdCB0byBjaGFyICogaW4gZ3pwcmludGYgdG8gYXZvaWQgd2FybmluZ3MgW1ppbnNlcl0KKy0gRml4IG1ha2Vfdm1zLmNvbSBmb3IgVkFYIFtaaW5zZXJdCistIERvbid0IHVzZSBsaWJyYXJ5IG9yIGJ1aWx0LWluIGJ5dGUgc3dhcHMKKy0gU2ltcGxpZnkgdGVzdCBhbmQgdXNlIG9mIGdjYyBoaWRkZW4gYXR0cmlidXRlCistIEZpeCBidWcgaW4gZ3pjbG9zZV93KCkgd2hlbiBnendyaXRlKCkgZmFpbHMgdG8gYWxsb2NhdGUgbWVtb3J5CistIEFkZCAieCIgKE9fRVhDTCkgYW5kICJlIiAoT19DTE9FWEVDKSBtb2RlcyBzdXBwb3J0IHRvIGd6b3BlbigpCistIEZpeCBidWcgaW4gdGVzdC9taW5pZ3ppcC5jIGZvciBjb25maWd1cmUgLS1zb2xvCistIEZpeCBjb250cmliL3ZzdHVkaW8gcHJvamVjdCBsaW5rIGVycm9ycyBbTW9oYW5hdGhhc10KKy0gQWRkIGFiaWxpdHkgdG8gY2hvb3NlIHRoZSBidWlsZGVyIGluIG1ha2Vfdm1zLmNvbSBbU2Nod2VkYV0KKy0gQWRkIERFU1RESVIgc3VwcG9ydCB0byBtaW5ndzMyIHdpbjMyL01ha2VmaWxlLmdjYworLSBGaXggY29tbWVudHMgaW4gd2luMzIvTWFrZWZpbGUuZ2NjIGZvciBwcm9wZXIgdXNhZ2UKKy0gQWxsb3cgb3ZlcnJpZGluZyB0aGUgZGVmYXVsdCBpbnN0YWxsIGxvY2F0aW9ucyBmb3IgY21ha2UKKy0gR2VuZXJhdGUgYW5kIGluc3RhbGwgdGhlIHBrZy1jb25maWcgZmlsZSB3aXRoIGNtYWtlCistIEJ1aWxkIGJvdGggYSBzdGF0aWMgYW5kIGEgc2hhcmVkIHZlcnNpb24gb2YgemxpYiB3aXRoIGNtYWtlCistIEluY2x1ZGUgdmVyc2lvbiBzeW1ib2xzIGZvciBjbWFrZSBidWlsZHMKKy0gSWYgdXNpbmcgY21ha2Ugd2l0aCBNU1ZDLCBhZGQgdGhlIHNvdXJjZSBkaXJlY3RvcnkgdG8gdGhlIGluY2x1ZGVzCistIFJlbW92ZSB1bm5lZWRlZCBFWFRSQV9DRkxBR1MgZnJvbSB3aW4zMi9NYWtlZmlsZS5nY2MgW1RydXRhXQorLSBNb3ZlIG9ic29sZXRlIGVteCBtYWtlZmlsZSB0byBvbGQgW1RydXRhXQorLSBBbGxvdyB0aGUgdXNlIG9mIC1XdW5kZWYgd2hlbiBjb21waWxpbmcgb3IgdXNpbmcgemxpYgorLSBBdm9pZCB0aGUgdXNlIG9mIHRoZSAtdSBvcHRpb24gd2l0aCBta3RlbXAKKy0gSW1wcm92ZSBpbmZsYXRlKCkgZG9jdW1lbnRhdGlvbiBvbiB0aGUgdXNlIG9mIFpfRklOSVNICistIFJlY29nbml6ZSBjbGFuZyBhcyBnY2MKKy0gQWRkIGd6b3Blbl93KCkgaW4gV2luZG93cyBmb3Igd2lkZSBjaGFyYWN0ZXIgcGF0aCBuYW1lcworLSBSZW5hbWUgemNvbmYuaCBpbiBDTWFrZUxpc3RzLnR4dCB0byBtb3ZlIGl0IG91dCBvZiB0aGUgd2F5CistIEFkZCBzb3VyY2UgZGlyZWN0b3J5IGluIENNYWtlTGlzdHMudHh0IGZvciBidWlsZGluZyBleGFtcGxlcworLSBMb29rIGluIGJ1aWxkIGRpcmVjdG9yeSBmb3IgemxpYi5wYyBpbiBDTWFrZUxpc3RzLnR4dAorLSBSZW1vdmUgZ3pmbGFncyBmcm9tIHpsaWJ2Yy5kZWYgaW4gdmM5IGFuZCB2YzEwCistIEZpeCBjb250cmliL21pbml6aXAgY29tcGlsYXRpb24gaW4gdGhlIE1pbkdXIGVudmlyb25tZW50CistIFVwZGF0ZSAuL2NvbmZpZ3VyZSBmb3IgU29sYXJpcywgc3VwcG9ydCAtLTY0IFtNb29uZXldCistIFJlbW92ZSAtUi4gZnJvbSBTb2xhcmlzIHNoYXJlZCBidWlsZCAocG9zc2libGUgc2VjdXJpdHkgaXNzdWUpCistIEF2b2lkIHJhY2UgY29uZGl0aW9uIGZvciBwYXJhbGxlbCBtYWtlICgtaikgcnVubmluZyBleGFtcGxlCistIEZpeCB0eXBlIG1pc21hdGNoIGJldHdlZW4gZ2V0X2NyY190YWJsZSgpIGFuZCBjcmNfdGFibGUKKy0gRml4IHBhcnNpbmcgb2YgdmVyc2lvbiB3aXRoICItIiBpbiBDTWFrZUxpc3RzLnR4dCBbU25pZGVyLCBaaWVnbGVyXQorLSBGaXggdGhlIHBhdGggdG8gemxpYi5tYXAgaW4gQ01ha2VMaXN0cy50eHQKKy0gRm9yY2UgdGhlIG5hdGl2ZSBsaWJ0b29sIGluIE1hYyBPUyBYIHRvIGF2b2lkIEdOVSBsaWJ0b29sIFtCZWViZV0KKy0gQWRkIGluc3RydWN0aW9ucyB0byB3aW4zMi9NYWtlZmlsZS5nY2MgZm9yIHNoYXJlZCBpbnN0YWxsIFtUb3JyaV0KKworQ2hhbmdlcyBpbiAxLjIuNi4xICgxMiBGZWIgMjAxMikKKy0gQXZvaWQgdGhlIHVzZSBvZiB0aGUgT2JqZWN0aXZlLUMgcmVzZXJ2ZWQgbmFtZSAiaWQiCistIEluY2x1ZGUgaW8uaCBpbiBnemd1dHMuaCBmb3IgTWljcm9zb2Z0IGNvbXBpbGVycworLSBGaXggcHJvYmxlbSB3aXRoIC4vY29uZmlndXJlIC0tcHJlZml4IGFuZCBnemdldGMgbWFjcm8KKy0gSW5jbHVkZSBnel9oZWFkZXIgZGVmaW5pdGlvbiB3aGVuIGNvbXBpbGluZyB6bGliIHNvbG8KKy0gUHV0IGd6ZmxhZ3MoKSBmdW5jdGlvbmFsaXR5IGJhY2sgaW4genV0aWwuYworLSBBdm9pZCBsaWJyYXJ5IGhlYWRlciBpbmNsdWRlIGluIGNyYzMyLmMgZm9yIFpfU09MTworLSBVc2UgbmFtZSBpbiBHQ0NfQ0xBU1NJQyBhcyBDIGNvbXBpbGVyIGZvciBjb3ZlcmFnZSB0ZXN0aW5nLCBpZiBzZXQKKy0gTWlub3IgY2xlYW51cCBpbiBjb250cmliL21pbml6aXAvemlwLmMgW1ZvbGxhbnRdCistIFVwZGF0ZSBtYWtlX3Ztcy5jb20gW1ppbnNlcl0KKy0gUmVtb3ZlIHVubmVjZXNzYXJ5IGd6Z2V0Y18gZnVuY3Rpb24KKy0gVXNlIG9wdGltaXplZCBieXRlIHN3YXAgb3BlcmF0aW9ucyBmb3IgTWljcm9zb2Z0IGFuZCBHTlUgW1NueWRlcl0KKy0gRml4IG1pbm9yIHR5cG8gaW4gemxpYi5oIGNvbW1lbnRzIFtSemVzbmlvd2llY2tpXQorCitDaGFuZ2VzIGluIDEuMi42ICgyOSBKYW4gMjAxMikKKy0gVXBkYXRlIHRoZSBQYXNjYWwgaW50ZXJmYWNlIGluIGNvbnRyaWIvcGFzY2FsCistIEZpeCBmdW5jdGlvbiBudW1iZXJzIGZvciBnemdldGNfIGluIHpsaWJ2Yy5kZWYgZmlsZXMKKy0gRml4IGNvbmZpZ3VyZS5hYyBmb3IgY29udHJpYi9taW5pemlwIFtTY2hpZmZlcl0KKy0gRml4IGxhcmdlLWVudHJ5IGRldGVjdGlvbiBpbiBtaW5pemlwIG9uIDY0LWJpdCBzeXN0ZW1zIFtTY2hpZmZlcl0KKy0gSGF2ZSAuL2NvbmZpZ3VyZSB1c2UgdGhlIGNvbXBpbGVyIHJldHVybiBjb2RlIGZvciBlcnJvciBpbmRpY2F0aW9uCistIEZpeCBDTWFrZUxpc3RzLnR4dCBmb3IgY3Jvc3MgY29tcGlsYXRpb24gW01jQ2x1cmVdCistIEZpeCBjb250cmliL21pbml6aXAvemlwLmMgZm9yIDY0LWJpdCBhcmNoaXRlY3R1cmVzIFtEYWxzbmVzXQorLSBGaXggY29tcGlsYXRpb24gb2YgY29udHJpYi9taW5pemlwIG9uIEZyZWVCU0QgW01hcnF1ZXpdCistIENvcnJlY3Qgc3VnZ2VzdGVkIHVzYWdlcyBpbiB3aW4zMi9NYWtlZmlsZS5tc2MgW1NoYWNoYXIsIEhvcnZhdGhdCistIEluY2x1ZGUgaW8uaCBmb3IgVHVyYm8gQyAvIEJvcmxhbmQgQyBvbiBhbGwgcGxhdGZvcm1zIFtUcnV0YV0KKy0gTWFrZSB2ZXJzaW9uIGV4cGxpY2l0IGluIGNvbnRyaWIvbWluaXppcC9jb25maWd1cmUuYWMgW0Jvc21hbnNdCistIEF2b2lkIHdhcm5pbmcgZm9yIG5vIGVuY3J5cHRpb24gaW4gY29udHJpYi9taW5pemlwL3ppcC5jIFtWb2xsYW50XQorLSBNaW5vciBjbGVhbnVwIHVwIGNvbnRyaWIvbWluaXppcC91bnppcC5jIFtWb2xsYW50XQorLSBGaXggYnVnIHdoZW4gY29tcGlsaW5nIG1pbml6aXAgd2l0aCBDKysgW1ZvbGxhbnRdCistIFByb3RlY3QgZm9yIGxvbmcgbmFtZSBhbmQgZXh0cmEgZmllbGRzIGluIGNvbnRyaWIvbWluaXppcCBbVm9sbGFudF0KKy0gQXZvaWQgc29tZSB3YXJuaW5ncyBpbiBjb250cmliL21pbml6aXAgW1ZvbGxhbnRdCistIEFkZCAtSS4uLy4uIC1MLi4vLi4gdG8gQ0ZMQUdTIGZvciBtaW5pemlwIGFuZCBtaW5pdW56aXAKKy0gQWRkIG1pc3NpbmcgbGlicyB0byBtaW5pemlwIGxpbmtlciBjb21tYW5kCistIEFkZCBzdXBwb3J0IGZvciBWUEFUSCBidWlsZHMgaW4gY29udHJpYi9taW5pemlwCistIEFkZCBhbiAtLWVuYWJsZS1kZW1vcyBvcHRpb24gdG8gY29udHJpYi9taW5pemlwL2NvbmZpZ3VyZQorLSBBZGQgdGhlIGdlbmVyYXRpb24gb2YgY29uZmlndXJlLmxvZyBieSAuL2NvbmZpZ3VyZQorLSBFeGl0IHdoZW4gcmVxdWlyZWQgcGFyYW1ldGVycyBub3QgcHJvdmlkZWQgdG8gd2luMzIvTWFrZWZpbGUuZ2NjCistIEhhdmUgZ3pwdXRjIHJldHVybiB0aGUgY2hhcmFjdGVyIHdyaXR0ZW4gaW5zdGVhZCBvZiB0aGUgYXJndW1lbnQKKy0gVXNlIHRoZSAtbSBvcHRpb24gb24gbGRjb25maWcgZm9yIEJTRCBzeXN0ZW1zIFtUb2JpYXNdCistIENvcnJlY3QgaW4gemxpYi5tYXAgd2hlbiBkZWZsYXRlUmVzZXRLZWVwIHdhcyBhZGRlZAorCitDaGFuZ2VzIGluIDEuMi41LjMgKDE1IEphbiAyMDEyKQorLSBSZXN0b3JlIGd6Z2V0YyBmdW5jdGlvbiBmb3IgYmluYXJ5IGNvbXBhdGliaWxpdHkKKy0gRG8gbm90IHVzZSBfbHNlZWtpNjQgdW5kZXIgQm9ybGFuZCBDKysgW1RydXRhXQorLSBVcGRhdGUgd2luMzIvTWFrZWZpbGUubXNjIHRvIGJ1aWxkIHRlc3QvKi5jIFtUcnV0YV0KKy0gUmVtb3ZlIG9sZC92aXN1YWxjNiBnaXZlbiBDTWFrZWZpbGUgYW5kIG90aGVyIGFsdGVybmF0aXZlcworLSBVcGRhdGUgQVM0MDAgYnVpbGQgZmlsZXMgYW5kIGRvY3VtZW50YXRpb24gW01vbm5lcmF0XQorLSBVcGRhdGUgd2luMzIvTWFrZWZpbGUuZ2NjIHRvIGJ1aWxkIHRlc3QvKi5jIFtUcnV0YV0KKy0gUGVybWl0IHN0cm9uZ2VyIGZsdXNoZXMgYWZ0ZXIgWl9CTE9DSyBmbHVzaGVzCistIEF2b2lkIGV4dHJhbmVvdXMgZW1wdHkgYmxvY2tzIHdoZW4gZG9pbmcgZW1wdHkgZmx1c2hlcworLSBQZXJtaXQgWl9OVUxMIGFyZ3VtZW50cyB0byBkZWZsYXRlUGVuZGluZworLSBBbGxvdyBkZWZsYXRlUHJpbWUoKSB0byBpbnNlcnQgYml0cyBpbiB0aGUgbWlkZGxlIG9mIGEgc3RyZWFtCistIFJlbW92ZSBzZWNvbmQgZW1wdHkgc3RhdGljIGJsb2NrIGZvciBaX1BBUlRJQUxfRkxVU0gKKy0gV3JpdGUgb3V0IGFsbCBvZiB0aGUgYXZhaWxhYmxlIGJpdHMgd2hlbiB1c2luZyBaX0JMT0NLCistIEluc2VydCB0aGUgZmlyc3QgdHdvIHN0cmluZ3MgaW4gdGhlIGhhc2ggdGFibGUgYWZ0ZXIgYSBmbHVzaAorCitDaGFuZ2VzIGluIDEuMi41LjIgKDE3IERlYyAyMDExKQorLSBmaXggbGQgZXJyb3I6IHVuYWJsZSB0byBmaW5kIHZlcnNpb24gZGVwZW5kZW5jeSAnWkxJQl8xLjIuNScKKy0gdXNlIHJlbGF0aXZlIHN5bWxpbmtzIGZvciBzaGFyZWQgbGlicworLSBBdm9pZCBzZWFyY2hpbmcgcGFzdCB3aW5kb3cgZm9yIFpfUkxFIHN0cmF0ZWd5CistIEFzc3VyZSB0aGF0IGhpZ2gtd2F0ZXIgbWFyayBpbml0aWFsaXphdGlvbiBpcyBhbHdheXMgYXBwbGllZCBpbiBkZWZsYXRlCistIEFkZCBhc3NlcnRpb25zIHRvIGZpbGxfd2luZG93KCkgaW4gZGVmbGF0ZS5jIHRvIG1hdGNoIGNvbW1lbnRzCistIFVwZGF0ZSBweXRob24gbGluayBpbiBSRUFETUUKKy0gQ29ycmVjdCBzcGVsbGluZyBlcnJvciBpbiBnenJlYWQuYworLSBGaXggYnVnIGluIGd6Z2V0cygpIGZvciBhIGNvbmNhdGVuYXRlZCBlbXB0eSBnemlwIHN0cmVhbQorLSBDb3JyZWN0IGVycm9yIGluIGNvbW1lbnQgZm9yIGd6X21ha2UoKQorLSBDaGFuZ2UgZ3pyZWFkKCkgYW5kIHJlbGF0ZWQgdG8gaWdub3JlIGp1bmsgYWZ0ZXIgZ3ppcCBzdHJlYW1zCistIEFsbG93IGd6cmVhZCgpIGFuZCByZWxhdGVkIHRvIGNvbnRpbnVlIGFmdGVyIGd6Y2xlYXJlcnIoKQorLSBBbGxvdyBnenJld2luZCgpIGFuZCBnenNlZWsoKSBhZnRlciBhIHByZW1hdHVyZSBlbmQtb2YtZmlsZQorLSBTaW1wbGlmeSBnenNlZWsoKSBub3cgdGhhdCByYXcgYWZ0ZXIgZ3ppcCBpcyBpZ25vcmVkCistIENoYW5nZSBnemdldGMoKSB0byBhIG1hY3JvIGZvciBzcGVlZCAofjQwJSBzcGVlZHVwIGluIHRlc3RpbmcpCistIEZpeCBnemNsb3NlKCkgdG8gcmV0dXJuIHRoZSBhY3R1YWwgZXJyb3IgbGFzdCBlbmNvdW50ZXJlZAorLSBBbHdheXMgYWRkIGxhcmdlIGZpbGUgc3VwcG9ydCBmb3Igd2luZG93cworLSBJbmNsdWRlIHpjb25mLmggZm9yIHdpbmRvd3MgbGFyZ2UgZmlsZSBzdXBwb3J0CistIEluY2x1ZGUgemNvbmYuaC5jbWFrZWluIGZvciB3aW5kb3dzIGxhcmdlIGZpbGUgc3VwcG9ydAorLSBVcGRhdGUgemNvbmYuaC5jbWFrZWluIG9uIG1ha2UgZGlzdGNsZWFuCistIE1lcmdlIHZlc3RpZ2lhbCB2c25wcmludGYgZGV0ZXJtaW5hdGlvbiBmcm9tIHp1dGlsLmggdG8gZ3pndXRzLmgKKy0gQ2xhcmlmeSBob3cgZ3pvcGVuKCkgYXBwZW5kcyBpbiB6bGliLmggY29tbWVudHMKKy0gQ29ycmVjdCBkb2N1bWVudGF0aW9uIG9mIGd6ZGlyZWN0KCkgc2luY2UganVuayBhdCBlbmQgbm93IGlnbm9yZWQKKy0gQWRkIGEgdHJhbnNwYXJlbnQgd3JpdGUgbW9kZSB0byBnem9wZW4oKSB3aGVuICdUJyBpcyBpbiB0aGUgbW9kZQorLSBVcGRhdGUgcHl0aG9uIGxpbmsgaW4gemxpYiBtYW4gcGFnZQorLSBHZXQgaW5mZml4ZWQuaCBhbmQgTUFLRUZJWEVEIHJlc3VsdCB0byBtYXRjaAorLSBBZGQgYSAuL2NvbmZpZyAtLXNvbG8gb3B0aW9uIHRvIG1ha2UgemxpYiBzdWJzZXQgd2l0aCBubyBsaWJhcnkgdXNlCistIEFkZCB1bmRvY3VtZW50ZWQgaW5mbGF0ZVJlc2V0S2VlcCgpIGZ1bmN0aW9uIGZvciBDQUIgZmlsZSBkZWNvZGluZworLSBBZGQgLS1jb3ZlciBvcHRpb24gdG8gLi9jb25maWd1cmUgZm9yIGdjYyBjb3ZlcmFnZSB0ZXN0aW5nCistIEFkZCAjZGVmaW5lIFpMSUJfQ09OU1Qgb3B0aW9uIHRvIHVzZSBjb25zdCBpbiB0aGUgel9zdHJlYW0gaW50ZXJmYWNlCistIEFkZCBjb21tZW50IHRvIGd6ZG9wZW4oKSBpbiB6bGliLmggdG8gdXNlIGR1cCgpIHdoZW4gdXNpbmcgZmlsZW5vKCkKKy0gTm90ZSBiZWhhdmlvciBvZiB1bmNvbXByZXNzKCkgdG8gcHJvdmlkZSBhcyBtdWNoIGRhdGEgYXMgaXQgY2FuCistIEFkZCBmaWxlcyBpbiBjb250cmliL21pbml6aXAgdG8gYWlkIGluIGJ1aWxkaW5nIGxpYm1pbml6aXAKKy0gU3BsaXQgb2ZmIEFSIG9wdGlvbnMgaW4gTWFrZWZpbGUuaW4gYW5kIGNvbmZpZ3VyZQorLSBDaGFuZ2UgT04gbWFjcm8gdG8gWl9BUkcgdG8gYXZvaWQgYXBwbGljYXRpb24gY29uZmxpY3RzCistIEZhY2lsaXRhdGUgY29tcGlsYXRpb24gd2l0aCBCb3JsYW5kIEMrKyBmb3IgcHJhZ21hcyBhbmQgdnNucHJpbnRmCistIEluY2x1ZGUgaW8uaCBmb3IgVHVyYm8gQyAvIEJvcmxhbmQgQysrCistIE1vdmUgZXhhbXBsZS5jIGFuZCBtaW5pZ3ppcC5jIHRvIHRlc3QvCistIFNpbXBsaWZ5IGluY29tcGxldGUgY29kZSB0YWJsZSBmaWxsaW5nIGluIGluZmxhdGVfdGFibGUoKQorLSBSZW1vdmUgY29kZSBmcm9tIGluZmxhdGUuYyBhbmQgaW5mYmFjay5jIHRoYXQgaXMgaW1wb3NzaWJsZSB0byBleGVjdXRlCistIFRlc3QgdGhlIGluZmxhdGUgY29kZSB3aXRoIGZ1bGwgY292ZXJhZ2UKKy0gQWxsb3cgZGVmbGF0ZVNldERpY3Rpb25hcnksIGluZmxhdGVTZXREaWN0aW9uYXJ5IGF0IGFueSB0aW1lIChpbiByYXcpCistIEFkZCBkZWZsYXRlUmVzZXRLZWVwIGFuZCBmaXggaW5mbGF0ZVJlc2V0S2VlcCB0byByZXRhaW4gZGljdGlvbmFyeQorLSBGaXggZ3p3cml0ZS5jIHRvIGFjY29tbW9kYXRlIHJlZHVjZWQgbWVtb3J5IHpsaWIgY29tcGlsYXRpb24KKy0gSGF2ZSBpbmZsYXRlKCkgd2l0aCBaX0ZJTklTSCBhdm9pZCB0aGUgYWxsb2NhdGlvbiBvZiBhIHdpbmRvdworLSBEbyBub3Qgc2V0IHN0cm0tPmFkbGVyIHdoZW4gZG9pbmcgcmF3IGluZmxhdGUKKy0gRml4IGd6ZW9mKCkgdG8gYmVoYXZlIGp1c3QgbGlrZSBmZW9mKCkgd2hlbiByZWFkIGlzIG5vdCBwYXN0IGVuZCBvZiBmaWxlCistIEZpeCBidWcgaW4gZ3pyZWFkLmMgd2hlbiBlbmQtb2YtZmlsZSBpcyByZWFjaGVkCistIEF2b2lkIHVzZSBvZiBaX0JVRl9FUlJPUiBpbiBneiogZnVuY3Rpb25zIGV4Y2VwdCBmb3IgcHJlbWF0dXJlIEVPRgorLSBEb2N1bWVudCBnenJlYWQoKSBjYXBhYmlsaXR5IHRvIHJlYWQgY29uY3VycmVudGx5IHdyaXR0ZW4gZmlsZXMKKy0gUmVtb3ZlIGhhcmQtY29kaW5nIG9mIHJlc291cmNlIGNvbXBpbGVyIGluIENNYWtlTGlzdHMudHh0IFtCbGFtbW9dCisKK0NoYW5nZXMgaW4gMS4yLjUuMSAoMTAgU2VwIDIwMTEpCistIFVwZGF0ZSBGQVEgZW50cnkgb24gc2hhcmVkIGJ1aWxkcyAoIzEzKQorLSBBdm9pZCBzeW1ib2xpYyBhcmd1bWVudCB0byBjaG1vZCBpbiBNYWtlZmlsZS5pbgorLSBGaXggYnVnIGFuZCBhZGQgY29uc3RzIGluIGNvbnRyaWIvcHVmZiBbT2Jlcmh1bWVyXQorLSBVcGRhdGUgY29udHJpYi9wdWZmL3plcm9zLnJhdyB0ZXN0IGZpbGUgdG8gaGF2ZSBhbGwgYmxvY2sgdHlwZXMKKy0gQWRkIGZ1bGwgY292ZXJhZ2UgdGVzdCBmb3IgcHVmZiBpbiBjb250cmliL3B1ZmYvTWFrZWZpbGUKKy0gRml4IHN0YXRpYy1vbmx5LWJ1aWxkIGluc3RhbGwgaW4gTWFrZWZpbGUuaW4KKy0gRml4IGJ1ZyBpbiB1bnpHZXRDdXJyZW50RmlsZUluZm8oKSBpbiBjb250cmliL21pbml6aXAgW0t1bm9dCistIEFkZCBsaWJ6LmEgZGVwZW5kZW5jeSB0byBzaGFyZWQgaW4gTWFrZWZpbGUuaW4gZm9yIHBhcmFsbGVsIGJ1aWxkcworLSBTcGVsbCBvdXQgIm51bWJlciIgKGluc3RlYWQgb2YgIm5iIikgaW4gemxpYi5oIGZvciB0b3RhbF9pbiwgdG90YWxfb3V0CistIFJlcGxhY2UgJCguLi4pIHdpdGggYC4uLmAgaW4gY29uZmlndXJlIGZvciBub24tYmFzaCBzaCBbQm93bGVyXQorLSBBZGQgZGFyd2luKiB0byBEYXJ3aW4qIGFuZCBzb2xhcmlzKiB0byBTdW5PU1wgNSogaW4gY29uZmlndXJlIFtHcm9mZmVuXQorLSBBZGQgc29sYXJpcyogdG8gTGludXgqIGluIGNvbmZpZ3VyZSB0byBhbGxvdyBnY2MgdXNlIFtHcm9mZmVuXQorLSBBZGQgKmJzZCogdG8gTGludXgqIGNhc2UgaW4gY29uZmlndXJlIFtCYXItTGV2XQorLSBBZGQgaW5mZmFzdC5vYmogdG8gZGVwZW5kZW5jaWVzIGluIHdpbjMyL01ha2VmaWxlLm1zYworLSBDb3JyZWN0IHNwZWxsaW5nIGVycm9yIGluIGRlZmxhdGUuaCBbS29obGVyXQorLSBDaGFuZ2UgbGliemRsbC5hIGFnYWluIHRvIGxpYnouZGxsLmEgKCEpIGluIHdpbjMyL01ha2VmaWxlLmdjYworLSBBZGQgdGVzdCB0byBjb25maWd1cmUgZm9yIEdOVSBDIGxvb2tpbmcgZm9yIGdjYyBpbiBvdXRwdXQgb2YgJGNjIC12CistIEFkZCB6bGliLnBjIGdlbmVyYXRpb24gdG8gd2luMzIvTWFrZWZpbGUuZ2NjIFtXZWlnZWx0XQorLSBGaXggYnVnIGluIHpsaWIuaCBmb3IgX0ZJTEVfT0ZGU0VUX0JJVFMgc2V0IGFuZCBfTEFSR0VGSUxFNjRfU09VUkNFIG5vdAorLSBBZGQgY29tbWVudCBpbiB6bGliLmggdGhhdCBhZGxlcjMyX2NvbWJpbmUgd2l0aCBsZW4yIDwgMCBtYWtlcyBubyBzZW5zZQorLSBNYWtlIE5PX0RJVklERSBvcHRpb24gaW4gYWRsZXIzMi5jIG11Y2ggZmFzdGVyICh0aGFua3MgdG8gSm9obiBSZWlzZXIpCistIE1ha2Ugc3Ryb25nZXIgdGVzdCBpbiB6Y29uZi5oIHRvIGluY2x1ZGUgdW5pc3RkLmggZm9yIExGUworLSBBcHBseSBEYXJ3aW4gcGF0Y2hlcyBmb3IgNjQtYml0IGZpbGUgb2Zmc2V0cyB0byBjb250cmliL21pbml6aXAgW1NsYWNrXQorLSBGaXggemxpYi5oIExGUyBzdXBwb3J0IHdoZW4gWl9QUkVGSVggdXNlZAorLSBBZGQgdXBkYXRlZCBhczQwMCBzdXBwb3J0IChyZW1vdmVkIGZyb20gb2xkKSBbTW9ubmVyYXRdCistIEF2b2lkIGRlZmxhdGUgc2Vuc2l0aXZpdHkgdG8gdm9sYXRpbGUgaW5wdXQgZGF0YQorLSBBdm9pZCBkaXZpc2lvbiBpbiBhZGxlcjMyX2NvbWJpbmUgZm9yIE5PX0RJVklERQorLSBDbGFyaWZ5IHRoZSB1c2Ugb2YgWl9GSU5JU0ggd2l0aCBkZWZsYXRlQm91bmQoKSBhbW91bnQgb2Ygc3BhY2UKKy0gU2V0IGJpbmFyeSBmb3Igb3V0cHV0IGZpbGUgaW4gcHVmZi5jCistIFVzZSB1NCB0eXBlIGZvciBjcmNfdGFibGUgdG8gYXZvaWQgY29udmVyc2lvbiB3YXJuaW5ncworLSBBcHBseSBjYXN0cyBpbiB6bGliLmggdG8gYXZvaWQgY29udmVyc2lvbiB3YXJuaW5ncworLSBBZGQgT0YgdG8gcHJvdG90eXBlcyBmb3IgYWRsZXIzMl9jb21iaW5lXyBhbmQgY3JjMzJfY29tYmluZV8gW01pbGxlcl0KKy0gSW1wcm92ZSBpbmZsYXRlU3luYygpIGRvY3VtZW50YXRpb24gdG8gbm90ZSBpbmRldGVybWluYW5jeQorLSBBZGQgZGVmbGF0ZVBlbmRpbmcoKSBmdW5jdGlvbiB0byByZXR1cm4gdGhlIGFtb3VudCBvZiBwZW5kaW5nIG91dHB1dAorLSBDb3JyZWN0IHRoZSBzcGVsbGluZyBvZiAic3BlY2lmaWNhdGlvbiIgaW4gRkFRIFtSYW5kZXJzLVBlaHJzb25dCistIEFkZCBhIGNoZWNrIGluIGNvbmZpZ3VyZSBmb3Igc3RkYXJnLmgsIHVzZSBmb3IgZ3pwcmludGYoKQorLSBDaGVjayB0aGF0IHBvaW50ZXJzIGZpdCBpbiBpbnRzIHdoZW4gZ3pwcmludCgpIGNvbXBpbGVkIG9sZCBzdHlsZQorLSBBZGQgZHVtbXkgbmFtZSBiZWZvcmUgJChTSEFSRURMSUJWKSBpbiBNYWtlZmlsZSBbQmFyLUxldiwgQm93bGVyXQorLSBEZWxldGUgbGluZSBpbiBjb25maWd1cmUgdGhhdCBhZGRzIC1MLiBsaWJ6LmEgdG8gTERGTEFHUyBbV2VpZ2VsdF0KKy0gQWRkIGRlYnVnIHJlY29yZHMgaW4gYXNzbWVibGVyIGNvZGUgW0xvbmRlcl0KKy0gVXBkYXRlIFJGQyByZWZlcmVuY2VzIHRvIHVzZSBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC8uLi4gW0xpXQorLSBBZGQgLS1hcmNocyBvcHRpb24sIHVzZSBvZiBsaWJ0b29sIHRvIGNvbmZpZ3VyZSBmb3IgTWFjIE9TIFggW0JvcnN0ZWxdCisKIENoYW5nZXMgaW4gMS4yLjUgKDE5IEFwciAyMDEwKQogLSBEaXNhYmxlIHZpc2liaWxpdHkgYXR0cmlidXRlIGluIHdpbjMyL01ha2VmaWxlLmdjYyBbQmFyLUxldl0KIC0gRGVmYXVsdCB0byBsaWJkaXIgYXMgc2hhcmVkbGliZGlyIGluIGNvbmZpZ3VyZSBbTmllZGVyXQogLSBVcGRhdGUgY29weXJpZ2h0IGRhdGVzIG9uIG1vZGlmaWVkIHNvdXJjZSBmaWxlcwogLSBVcGRhdGUgdHJlZXMuYyB0byBiZSBhYmxlIHRvIGdlbmVyYXRlIG1vZGlmaWVkIHRyZWVzLmgKIC0gRXhpdCBjb25maWd1cmUgZm9yIE1pbkdXLCBzdWdnZXN0aW5nIHdpbjMyL01ha2VmaWxlLmdjYworLSBDaGVjayBmb3IgTlVMTCBwYXRoIGluIGd6X29wZW4gW0hvbXVybHVdCiAKIENoYW5nZXMgaW4gMS4yLjQuNSAoMTggQXByIDIwMTApCiAtIFNldCBzaGFyZWRsaWJkaXIgaW4gY29uZmlndXJlIFtUb3Jva10KQEAgLTI2MSw3ICs1MjUsNyBAQAogLSBDbGVhciBieXRlcyBhZnRlciBkZWZsYXRlIGxvb2thaGVhZCB0byBhdm9pZCB1c2Ugb2YgdW5pbml0aWFsaXplZCBkYXRhCiAtIENoYW5nZSBhIGxpbWl0IGluIGluZnRyZWVzLmMgdG8gYmUgbW9yZSB0cmFuc3BhcmVudCB0byBDb3Zlcml0eSBQcmV2ZW50CiAtIFVwZGF0ZSB3aW4zMi96bGliLmRlZiB3aXRoIGV4cG9ydGVkIHN5bWJvbHMgZnJvbSB6bGliLmgKLS0gQ29ycmVjdCBzcGVsbGluZyBlcnJvciBpbiB6bGliLmggW1dpbGxlbV0KKy0gQ29ycmVjdCBzcGVsbGluZyBlcnJvcnMgaW4gemxpYi5oIFtXaWxsZW0sIFNvYnJhZG9dCiAtIEFsbG93IFpfQkxPQ0sgZm9yIGRlZmxhdGUoKSB0byBmb3JjZSBhIG5ldyBibG9jawogLSBBbGxvdyBuZWdhdGl2ZSBiaXRzIGluIGluZmxhdGVQcmltZSgpIHRvIGRlbGV0ZSBleGlzdGluZyBiaXQgYnVmZmVyCiAtIEFkZCBaX1RSRUVTIGZsdXNoIG9wdGlvbiB0byBpbmZsYXRlKCkgdG8gcmV0dXJuIGF0IGVuZCBvZiB0cmVlcwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL0ZBUSBiL01vZHVsZXMvemxpYi9GQVEKaW5kZXggMWEyMjc1MC4uOTliN2NmOSAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL0ZBUQorKysgYi9Nb2R1bGVzL3psaWIvRkFRCkBAIC00NCw4ICs0NCw4IEBACiAKICA2LiBXaGVyZSdzIHRoZSB6bGliIGRvY3VtZW50YXRpb24gKG1hbiBwYWdlcywgZXRjLik/CiAKLSAgICBJdCdzIGluIHpsaWIuaCAuICBFeGFtcGxlcyBvZiB6bGliIHVzYWdlIGFyZSBpbiB0aGUgZmlsZXMgZXhhbXBsZS5jIGFuZAotICAgIG1pbmlnemlwLmMsIHdpdGggbW9yZSBpbiBleGFtcGxlcy8gLgorICAgIEl0J3MgaW4gemxpYi5oIC4gIEV4YW1wbGVzIG9mIHpsaWIgdXNhZ2UgYXJlIGluIHRoZSBmaWxlcyB0ZXN0L2V4YW1wbGUuYworICAgIGFuZCB0ZXN0L21pbmlnemlwLmMsIHdpdGggbW9yZSBpbiBleGFtcGxlcy8gLgogCiAgNy4gV2h5IGRvbid0IHlvdSB1c2UgR05VIGF1dG9jb25mIG9yIGxpYnRvb2wgb3IgLi4uPwogCkBAIC04NCw4ICs4NCwxMCBAQAogCiAxMy4gSG93IGNhbiBJIG1ha2UgYSBVbml4IHNoYXJlZCBsaWJyYXJ5PwogCi0gICAgbWFrZSBjbGVhbgotICAgIC4vY29uZmlndXJlIC1zCisgICAgQnkgZGVmYXVsdCBhIHNoYXJlZCAoYW5kIGEgc3RhdGljKSBsaWJyYXJ5IGlzIGJ1aWx0IGZvciBVbml4LiAgU286CisKKyAgICBtYWtlIGRpc3RjbGVhbgorICAgIC4vY29uZmlndXJlCiAgICAgbWFrZQogCiAxNC4gSG93IGRvIEkgaW5zdGFsbCBhIHNoYXJlZCB6bGliIGxpYnJhcnkgb24gVW5peD8KQEAgLTMyNSw3ICszMjcsNyBAQAogICAgIGNvcnJlY3RseSBwb2ludHMgdG8gdGhlIHpsaWIgc3BlY2lmaWNhdGlvbiBpbiBSRkMgMTk1MCBmb3IgdGhlICJkZWZsYXRlIgogICAgIHRyYW5zZmVyIGVuY29kaW5nLCB0aGVyZSBoYXZlIGJlZW4gcmVwb3J0cyBvZiBzZXJ2ZXJzIGFuZCBicm93c2VycyB0aGF0CiAgICAgaW5jb3JyZWN0bHkgcHJvZHVjZSBvciBleHBlY3QgcmF3IGRlZmxhdGUgZGF0YSBwZXIgdGhlIGRlZmxhdGUKLSAgICBzcGVjZmljaWF0aW9uIGluIFJGQyAxOTUxLCBtb3N0IG5vdGFibHkgTWljcm9zb2Z0LiAgU28gZXZlbiB0aG91Z2ggdGhlCisgICAgc3BlY2lmaWNhdGlvbiBpbiBSRkMgMTk1MSwgbW9zdCBub3RhYmx5IE1pY3Jvc29mdC4gIFNvIGV2ZW4gdGhvdWdoIHRoZQogICAgICJkZWZsYXRlIiB0cmFuc2ZlciBlbmNvZGluZyB1c2luZyB0aGUgemxpYiBmb3JtYXQgd291bGQgYmUgdGhlIG1vcmUKICAgICBlZmZpY2llbnQgYXBwcm9hY2ggKGFuZCBpbiBmYWN0IGV4YWN0bHkgd2hhdCB0aGUgemxpYiBmb3JtYXQgd2FzIGRlc2lnbmVkCiAgICAgZm9yKSwgdXNpbmcgdGhlICJnemlwIiB0cmFuc2ZlciBlbmNvZGluZyBpcyBwcm9iYWJseSBtb3JlIHJlbGlhYmxlIGR1ZSB0bwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL0lOREVYIGIvTW9kdWxlcy96bGliL0lOREVYCmluZGV4IGY2YzUxY2EuLjJiYTA2NDEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi9JTkRFWAorKysgYi9Nb2R1bGVzL3psaWIvSU5ERVgKQEAgLTcsNiArNyw5IEBACiBSRUFETUUgICAgICAgICAgZ3Vlc3Mgd2hhdAogY29uZmlndXJlICAgICAgIGNvbmZpZ3VyZSBzY3JpcHQgZm9yIFVuaXgKIG1ha2Vfdm1zLmNvbSAgICBtYWtlZmlsZSBmb3IgVk1TCit0ZXN0L2V4YW1wbGUuYyAgemxpYiB1c2FnZXMgZXhhbXBsZXMgZm9yIGJ1aWxkIHRlc3RpbmcKK3Rlc3QvbWluaWd6aXAuYyBtaW5pbWFsIGd6aXAtbGlrZSBmdW5jdGlvbmFsaXR5IGZvciBidWlsZCB0ZXN0aW5nCit0ZXN0L2luZmNvdmVyLmMgaW5mKi5jIGNvZGUgY292ZXJhZ2UgZm9yIGJ1aWxkIGNvdmVyYWdlIHRlc3RpbmcKIHRyZWVidWlsZC54bWwgICBYTUwgZGVzY3JpcHRpb24gb2Ygc291cmNlIGZpbGUgZGVwZW5kZW5jaWVzCiB6Y29uZi5oLmNtYWtlaW4gemNvbmYuaCB0ZW1wbGF0ZSBmb3IgY21ha2UKIHpjb25mLmguaW4gICAgICB6Y29uZi5oIHRlbXBsYXRlIGZvciBjb25maWd1cmUKQEAgLTE0LDkgKzE3LDExIEBACiB6bGliLjMucGRmICAgICAgTWFuIHBhZ2UgaW4gUERGIGZvcm1hdAogemxpYi5tYXAgICAgICAgIExpbnV4IHN5bWJvbCBpbmZvcm1hdGlvbgogemxpYi5wYy5pbiAgICAgIFRlbXBsYXRlIGZvciBwa2ctY29uZmlnIGRlc2NyaXB0b3IKK3psaWIucGMuY21ha2VpbiB6bGliLnBjIHRlbXBsYXRlIGZvciBjbWFrZQogemxpYjJhbnNpICAgICAgIHBlcmwgc2NyaXB0IHRvIGNvbnZlcnQgc291cmNlIGZpbGVzIGZvciBDKysgY29tcGlsYXRpb24KIAogYW1pZ2EvICAgICAgICAgIG1ha2VmaWxlcyBmb3IgQW1pZ2EgU0FTIEMKK2FzNDAwLyAgICAgICAgICBtYWtlZmlsZXMgZm9yIEFTLzQwMAogZG9jLyAgICAgICAgICAgIGRvY3VtZW50YXRpb24gZm9yIGZvcm1hdHMgYW5kIGFsZ29yaXRobXMKIG1zZG9zLyAgICAgICAgICBtYWtlZmlsZXMgZm9yIE1TRE9TCiBuaW50ZW5kb2RzLyAgICAgbWFrZWZpbGUgZm9yIE5pbnRlbmRvIERTCkBAIC01NiwxMCArNjEsOCBAQAogenV0aWwuYwogenV0aWwuaAogCi0gICAgICAgICAgICAgICAgc291cmNlIGZpbGVzIGZvciBzYW1wbGUgcHJvZ3JhbXM6Ci1leGFtcGxlLmMKLW1pbmlnemlwLmMKLVNlZSBleGFtcGxlcy9SRUFETUUuZXhhbXBsZXMgZm9yIG1vcmUKKyAgICAgICAgICAgICAgICBzb3VyY2UgZmlsZXMgZm9yIHNhbXBsZSBwcm9ncmFtcworU2VlIGV4YW1wbGVzL1JFQURNRS5leGFtcGxlcwogCi0gICAgICAgICAgICAgICAgdW5zdXBwb3J0ZWQgY29udHJpYnV0aW9uIGJ5IHRoaXJkIHBhcnRpZXMKKyAgICAgICAgICAgICAgICB1bnN1cHBvcnRlZCBjb250cmlidXRpb25zIGJ5IHRoaXJkIHBhcnRpZXMKIFNlZSBjb250cmliL1JFQURNRS5jb250cmliCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvTWFrZWZpbGUuaW4gYi9Nb2R1bGVzL3psaWIvTWFrZWZpbGUuaW4KaW5kZXggNWIxNWJkMC4uYzYxYWEzMCAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL01ha2VmaWxlLmluCisrKyBiL01vZHVsZXMvemxpYi9NYWtlZmlsZS5pbgpAQCAtMSw1ICsxLDUgQEAKICMgTWFrZWZpbGUgZm9yIHpsaWIKLSMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMTAgSmVhbi1sb3VwIEdhaWxseS4KKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMTMgSmVhbi1sb3VwIEdhaWxseSwgTWFyayBBZGxlcgogIyBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCiAKICMgVG8gY29tcGlsZSBhbmQgdGVzdCwgdHlwZToKQEAgLTMyLDExICszMiwxMiBAQAogCiBTVEFUSUNMSUI9bGliei5hCiBTSEFSRURMSUI9bGliei5zbwotU0hBUkVETElCVj1saWJ6LnNvLjEuMi41CitTSEFSRURMSUJWPWxpYnouc28uMS4yLjgKIFNIQVJFRExJQk09bGliei5zby4xCiBMSUJTPSQoU1RBVElDTElCKSAkKFNIQVJFRExJQlYpCiAKLUFSPWFyIHJjCitBUj1hcgorQVJGTEFHUz1yYwogUkFOTElCPXJhbmxpYgogTERDT05GSUc9bGRjb25maWcKIExEU0hBUkVETElCQz0tbGMKQEAgLTUzLDExICs1NCwxMyBAQAogbWFuM2RpciA9ICR7bWFuZGlyfS9tYW4zCiBwa2djb25maWdkaXIgPSAke2xpYmRpcn0vcGtnY29uZmlnCiAKLU9CSkMgPSBhZGxlcjMyLm8gY29tcHJlc3MubyBjcmMzMi5vIGRlZmxhdGUubyBnemNsb3NlLm8gZ3psaWIubyBnenJlYWQubyBcCi0JZ3p3cml0ZS5vIGluZmJhY2subyBpbmZmYXN0Lm8gaW5mbGF0ZS5vIGluZnRyZWVzLm8gdHJlZXMubyB1bmNvbXByLm8genV0aWwubworT0JKWiA9IGFkbGVyMzIubyBjcmMzMi5vIGRlZmxhdGUubyBpbmZiYWNrLm8gaW5mZmFzdC5vIGluZmxhdGUubyBpbmZ0cmVlcy5vIHRyZWVzLm8genV0aWwubworT0JKRyA9IGNvbXByZXNzLm8gdW5jb21wci5vIGd6Y2xvc2UubyBnemxpYi5vIGd6cmVhZC5vIGd6d3JpdGUubworT0JKQyA9ICQoT0JKWikgJChPQkpHKQogCi1QSUNfT0JKQyA9IGFkbGVyMzIubG8gY29tcHJlc3MubG8gY3JjMzIubG8gZGVmbGF0ZS5sbyBnemNsb3NlLmxvIGd6bGliLmxvIGd6cmVhZC5sbyBcCi0JZ3p3cml0ZS5sbyBpbmZiYWNrLmxvIGluZmZhc3QubG8gaW5mbGF0ZS5sbyBpbmZ0cmVlcy5sbyB0cmVlcy5sbyB1bmNvbXByLmxvIHp1dGlsLmxvCitQSUNfT0JKWiA9IGFkbGVyMzIubG8gY3JjMzIubG8gZGVmbGF0ZS5sbyBpbmZiYWNrLmxvIGluZmZhc3QubG8gaW5mbGF0ZS5sbyBpbmZ0cmVlcy5sbyB0cmVlcy5sbyB6dXRpbC5sbworUElDX09CSkcgPSBjb21wcmVzcy5sbyB1bmNvbXByLmxvIGd6Y2xvc2UubG8gZ3psaWIubG8gZ3pyZWFkLmxvIGd6d3JpdGUubG8KK1BJQ19PQkpDID0gJChQSUNfT0JKWikgJChQSUNfT0JKRykKIAogIyB0byB1c2UgdGhlIGFzbSBjb2RlOiBtYWtlIE9CSkE9bWF0Y2gubywgUElDX09CSkE9bWF0Y2gubG8KIE9CSkEgPQpAQCAtODAsMzUgKzgzLDQ5IEBACiB0ZXN0OiBhbGwgdGVzdHN0YXRpYyB0ZXN0c2hhcmVkCiAKIHRlc3RzdGF0aWM6IHN0YXRpYwotCUBpZiBlY2hvIGhlbGxvIHdvcmxkIHwgLi9taW5pZ3ppcCB8IC4vbWluaWd6aXAgLWQgJiYgLi9leGFtcGxlOyB0aGVuIFwKKwlAVE1QU1Q9dG1wc3RfJCQ7IFwKKwlpZiBlY2hvIGhlbGxvIHdvcmxkIHwgLi9taW5pZ3ppcCB8IC4vbWluaWd6aXAgLWQgJiYgLi9leGFtcGxlICQkVE1QU1QgOyB0aGVuIFwKIAkgIGVjaG8gJwkJKioqIHpsaWIgdGVzdCBPSyAqKionOyBcCiAJZWxzZSBcCiAJICBlY2hvICcJCSoqKiB6bGliIHRlc3QgRkFJTEVEICoqKic7IGZhbHNlOyBcCi0JZmkKLQktQHJtIC1mIGZvby5negorCWZpOyBcCisJcm0gLWYgJCRUTVBTVAogCiB0ZXN0c2hhcmVkOiBzaGFyZWQKIAlATERfTElCUkFSWV9QQVRIPWBwd2RgOiQoTERfTElCUkFSWV9QQVRIKSA7IGV4cG9ydCBMRF9MSUJSQVJZX1BBVEg7IFwKIAlMRF9MSUJSQVJZTjMyX1BBVEg9YHB3ZGA6JChMRF9MSUJSQVJZTjMyX1BBVEgpIDsgZXhwb3J0IExEX0xJQlJBUllOMzJfUEFUSDsgXAogCURZTERfTElCUkFSWV9QQVRIPWBwd2RgOiQoRFlMRF9MSUJSQVJZX1BBVEgpIDsgZXhwb3J0IERZTERfTElCUkFSWV9QQVRIOyBcCiAJU0hMSUJfUEFUSD1gcHdkYDokKFNITElCX1BBVEgpIDsgZXhwb3J0IFNITElCX1BBVEg7IFwKLQlpZiBlY2hvIGhlbGxvIHdvcmxkIHwgLi9taW5pZ3ppcHNoIHwgLi9taW5pZ3ppcHNoIC1kICYmIC4vZXhhbXBsZXNoOyB0aGVuIFwKKwlUTVBTSD10bXBzaF8kJDsgXAorCWlmIGVjaG8gaGVsbG8gd29ybGQgfCAuL21pbmlnemlwc2ggfCAuL21pbmlnemlwc2ggLWQgJiYgLi9leGFtcGxlc2ggJCRUTVBTSDsgdGhlbiBcCiAJICBlY2hvICcJCSoqKiB6bGliIHNoYXJlZCB0ZXN0IE9LICoqKic7IFwKIAllbHNlIFwKIAkgIGVjaG8gJwkJKioqIHpsaWIgc2hhcmVkIHRlc3QgRkFJTEVEICoqKic7IGZhbHNlOyBcCi0JZmkKLQktQHJtIC1mIGZvby5negorCWZpOyBcCisJcm0gLWYgJCRUTVBTSAogCiB0ZXN0NjQ6IGFsbDY0Ci0JQGlmIGVjaG8gaGVsbG8gd29ybGQgfCAuL21pbmlnemlwNjQgfCAuL21pbmlnemlwNjQgLWQgJiYgLi9leGFtcGxlNjQ7IHRoZW4gXAorCUBUTVA2ND10bXA2NF8kJDsgXAorCWlmIGVjaG8gaGVsbG8gd29ybGQgfCAuL21pbmlnemlwNjQgfCAuL21pbmlnemlwNjQgLWQgJiYgLi9leGFtcGxlNjQgJCRUTVA2NDsgdGhlbiBcCiAJICBlY2hvICcJCSoqKiB6bGliIDY0LWJpdCB0ZXN0IE9LICoqKic7IFwKIAllbHNlIFwKIAkgIGVjaG8gJwkJKioqIHpsaWIgNjQtYml0IHRlc3QgRkFJTEVEICoqKic7IGZhbHNlOyBcCi0JZmkKLQktQHJtIC1mIGZvby5negorCWZpOyBcCisJcm0gLWYgJCRUTVA2NAorCitpbmZjb3Zlci5vOiB0ZXN0L2luZmNvdmVyLmMgemxpYi5oIHpjb25mLmgKKwkkKENDKSAkKENGTEFHUykgLUkuIC1jIC1vICRAIHRlc3QvaW5mY292ZXIuYworCitpbmZjb3ZlcjogaW5mY292ZXIubyBsaWJ6LmEKKwkkKENDKSAkKENGTEFHUykgLW8gJEAgaW5mY292ZXIubyBsaWJ6LmEKKworY292ZXI6IGluZmNvdmVyCisJcm0gLWYgKi5nY2RhCisJLi9pbmZjb3ZlcgorCWdjb3YgaW5mKi5jCiAKIGxpYnouYTogJChPQkpTKQotCSQoQVIpICRAICQoT0JKUykKKwkkKEFSKSAkKEFSRkxBR1MpICRAICQoT0JKUykKIAktQCAoJChSQU5MSUIpICRAIHx8IHRydWUpID4vZGV2L251bGwgMj4mMQogCiBtYXRjaC5vOiBtYXRjaC5TCkBAIC0xMjMsMTEgKzE0MCwxNyBAQAogCW12IF9tYXRjaC5vIG1hdGNoLmxvCiAJcm0gLWYgX21hdGNoLnMKIAotZXhhbXBsZTY0Lm86IGV4YW1wbGUuYyB6bGliLmggemNvbmYuaAotCSQoQ0MpICQoQ0ZMQUdTKSAtRF9GSUxFX09GRlNFVF9CSVRTPTY0IC1jIC1vICRAIGV4YW1wbGUuYworZXhhbXBsZS5vOiB0ZXN0L2V4YW1wbGUuYyB6bGliLmggemNvbmYuaAorCSQoQ0MpICQoQ0ZMQUdTKSAtSS4gLWMgLW8gJEAgdGVzdC9leGFtcGxlLmMKIAotbWluaWd6aXA2NC5vOiBtaW5pZ3ppcC5jIHpsaWIuaCB6Y29uZi5oCi0JJChDQykgJChDRkxBR1MpIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQgLWMgLW8gJEAgbWluaWd6aXAuYworbWluaWd6aXAubzogdGVzdC9taW5pZ3ppcC5jIHpsaWIuaCB6Y29uZi5oCisJJChDQykgJChDRkxBR1MpIC1JLiAtYyAtbyAkQCB0ZXN0L21pbmlnemlwLmMKKworZXhhbXBsZTY0Lm86IHRlc3QvZXhhbXBsZS5jIHpsaWIuaCB6Y29uZi5oCisJJChDQykgJChDRkxBR1MpIC1JLiAtRF9GSUxFX09GRlNFVF9CSVRTPTY0IC1jIC1vICRAIHRlc3QvZXhhbXBsZS5jCisKK21pbmlnemlwNjQubzogdGVzdC9taW5pZ3ppcC5jIHpsaWIuaCB6Y29uZi5oCisJJChDQykgJChDRkxBR1MpIC1JLiAtRF9GSUxFX09GRlNFVF9CSVRTPTY0IC1jIC1vICRAIHRlc3QvbWluaWd6aXAuYwogCiAuU1VGRklYRVM6IC5sbwogCkBAIC0xMzYsNyArMTU5LDcgQEAKIAkkKENDKSAkKFNGTEFHUykgLURQSUMgLWMgLW8gb2Jqcy8kKi5vICQ8CiAJLUBtdiBvYmpzLyQqLm8gJEAKIAotJChTSEFSRURMSUJWKTogJChQSUNfT0JKUykKK3BsYWNlYm8gJChTSEFSRURMSUJWKTogJChQSUNfT0JKUykgbGliei5hCiAJJChMRFNIQVJFRCkgJChTRkxBR1MpIC1vICRAICQoUElDX09CSlMpICQoTERTSEFSRURMSUJDKSAkKExERkxBR1MpCiAJcm0gLWYgJChTSEFSRURMSUIpICQoU0hBUkVETElCTSkKIAlsbiAtcyAkQCAkKFNIQVJFRExJQikKQEAgLTE2OCwxNCArMTkxLDE2IEBACiAJLUBpZiBbICEgLWQgJChERVNURElSKSQobWFuM2RpcikgICAgICBdOyB0aGVuIG1rZGlyIC1wICQoREVTVERJUikkKG1hbjNkaXIpOyBmaQogCS1AaWYgWyAhIC1kICQoREVTVERJUikkKHBrZ2NvbmZpZ2RpcikgXTsgdGhlbiBta2RpciAtcCAkKERFU1RESVIpJChwa2djb25maWdkaXIpOyBmaQogCWNwICQoU1RBVElDTElCKSAkKERFU1RESVIpJChsaWJkaXIpCi0JY3AgJChTSEFSRURMSUJWKSAkKERFU1RESVIpJChzaGFyZWRsaWJkaXIpCi0JY2QgJChERVNURElSKSQobGliZGlyKTsgY2htb2QgdT1ydyxnbz1yICQoU1RBVElDTElCKQotCS1AKGNkICQoREVTVERJUikkKGxpYmRpcik7ICQoUkFOTElCKSBsaWJ6LmEgfHwgdHJ1ZSkgPi9kZXYvbnVsbCAyPiYxCi0JLUBjZCAkKERFU1RESVIpJChzaGFyZWRsaWJkaXIpOyBpZiB0ZXN0ICIkKFNIQVJFRExJQlYpIiAtYSAtZiAkKFNIQVJFRExJQlYpOyB0aGVuIFwKLQkgIGNobW9kIDc1NSAkKFNIQVJFRExJQlYpOyBcCi0JICBybSAtZiAkKFNIQVJFRExJQikgJChTSEFSRURMSUJNKTsgXAotCSAgbG4gLXMgJChTSEFSRURMSUJWKSAkKFNIQVJFRExJQik7IFwKLQkgIGxuIC1zICQoU0hBUkVETElCVikgJChTSEFSRURMSUJNKTsgXAorCWNobW9kIDY0NCAkKERFU1RESVIpJChsaWJkaXIpLyQoU1RBVElDTElCKQorCS1AKCQoUkFOTElCKSAkKERFU1RESVIpJChsaWJkaXIpL2xpYnouYSB8fCB0cnVlKSA+L2Rldi9udWxsIDI+JjEKKwktQGlmIHRlc3QgLW4gIiQoU0hBUkVETElCVikiOyB0aGVuIFwKKwkgIGNwICQoU0hBUkVETElCVikgJChERVNURElSKSQoc2hhcmVkbGliZGlyKTsgXAorCSAgZWNobyAiY3AgJChTSEFSRURMSUJWKSAkKERFU1RESVIpJChzaGFyZWRsaWJkaXIpIjsgXAorCSAgY2htb2QgNzU1ICQoREVTVERJUikkKHNoYXJlZGxpYmRpcikvJChTSEFSRURMSUJWKTsgXAorCSAgZWNobyAiY2htb2QgNzU1ICQoREVTVERJUikkKHNoYXJlZGxpYmRpcikvJChTSEFSRURMSUJWKSI7IFwKKwkgIHJtIC1mICQoREVTVERJUikkKHNoYXJlZGxpYmRpcikvJChTSEFSRURMSUIpICQoREVTVERJUikkKHNoYXJlZGxpYmRpcikvJChTSEFSRURMSUJNKTsgXAorCSAgbG4gLXMgJChTSEFSRURMSUJWKSAkKERFU1RESVIpJChzaGFyZWRsaWJkaXIpLyQoU0hBUkVETElCKTsgXAorCSAgbG4gLXMgJChTSEFSRURMSUJWKSAkKERFU1RESVIpJChzaGFyZWRsaWJkaXIpLyQoU0hBUkVETElCTSk7IFwKIAkgICgkKExEQ09ORklHKSB8fCB0cnVlKSAgPi9kZXYvbnVsbCAyPiYxOyBcCiAJZmkKIAljcCB6bGliLjMgJChERVNURElSKSQobWFuM2RpcikKQEAgLTE5MSwyMiArMjE2LDI1IEBACiAJY2htb2QgNjQ0ICQoREVTVERJUikkKGluY2x1ZGVkaXIpL3psaWIuaCAkKERFU1RESVIpJChpbmNsdWRlZGlyKS96Y29uZi5oCiAKIHVuaW5zdGFsbDoKLQljZCAkKERFU1RESVIpJChpbmNsdWRlZGlyKTsgcm0gLWYgemxpYi5oIHpjb25mLmgKLQljZCAkKERFU1RESVIpJChsaWJkaXIpOyBybSAtZiBsaWJ6LmE7IFwKLQlpZiB0ZXN0ICIkKFNIQVJFRExJQlYpIiAtYSAtZiAkKFNIQVJFRExJQlYpOyB0aGVuIFwKKwljZCAkKERFU1RESVIpJChpbmNsdWRlZGlyKSAmJiBybSAtZiB6bGliLmggemNvbmYuaAorCWNkICQoREVTVERJUikkKGxpYmRpcikgJiYgcm0gLWYgbGliei5hOyBcCisJaWYgdGVzdCAtbiAiJChTSEFSRURMSUJWKSIgLWEgLWYgJChTSEFSRURMSUJWKTsgdGhlbiBcCiAJICBybSAtZiAkKFNIQVJFRExJQlYpICQoU0hBUkVETElCKSAkKFNIQVJFRExJQk0pOyBcCiAJZmkKLQljZCAkKERFU1RESVIpJChtYW4zZGlyKTsgcm0gLWYgemxpYi4zCi0JY2QgJChERVNURElSKSQocGtnY29uZmlnZGlyKTsgcm0gLWYgemxpYi5wYworCWNkICQoREVTVERJUikkKG1hbjNkaXIpICYmIHJtIC1mIHpsaWIuMworCWNkICQoREVTVERJUikkKHBrZ2NvbmZpZ2RpcikgJiYgcm0gLWYgemxpYi5wYwogCiBkb2NzOiB6bGliLjMucGRmCiAKIHpsaWIuMy5wZGY6IHpsaWIuMwogCWdyb2ZmIC1tYW5kb2MgLWYgSCAtVCBwcyB6bGliLjMgfCBwczJwZGYgLSB6bGliLjMucGRmCiAKLXpjb25mLmguaW46IHpjb25mLmguY21ha2VpbgotCXNlZCAiL14jY21ha2VkZWZpbmUvRCIgPCB6Y29uZi5oLmNtYWtlaW4gPiB6Y29uZi5oLmluCi0JdG91Y2ggLXIgemNvbmYuaC5jbWFrZWluIHpjb25mLmguaW4KK3pjb25mLmguY21ha2VpbjogemNvbmYuaC5pbgorCS1AIFRFTVBGSUxFPXpjb25maF8kJDsgXAorCWVjaG8gIi8jZGVmaW5lIFpDT05GX0gvIGFcXFxcXG4jY21ha2VkZWZpbmUgWl9QUkVGSVhcXFxcXG4jY21ha2VkZWZpbmUgWl9IQVZFX1VOSVNURF9IXG4iID4+ICQkVEVNUEZJTEUgJiZcCisJc2VkIC1mICQkVEVNUEZJTEUgemNvbmYuaC5pbiA+IHpjb25mLmguY21ha2VpbiAmJlwKKwl0b3VjaCAtciB6Y29uZi5oLmluIHpjb25mLmguY21ha2VpbiAmJlwKKwlybSAkJFRFTVBGSUxFCiAKIHpjb25mOiB6Y29uZi5oLmluCiAJY3AgLXAgemNvbmYuaC5pbiB6Y29uZi5oCkBAIC0yMTYsMTMgKzI0NCwxNiBAQAogCXJtIC1mICoubyAqLmxvICp+IFwKIAkgICBleGFtcGxlJChFWEUpIG1pbmlnemlwJChFWEUpIGV4YW1wbGVzaCQoRVhFKSBtaW5pZ3ppcHNoJChFWEUpIFwKIAkgICBleGFtcGxlNjQkKEVYRSkgbWluaWd6aXA2NCQoRVhFKSBcCisJICAgaW5mY292ZXIgXAogCSAgIGxpYnouKiBmb28uZ3ogc29fbG9jYXRpb25zIFwKIAkgICBfbWF0Y2gucyBtYWtldHJlZSBjb250cmliL2luZmJhY2s5LyoubwogCXJtIC1yZiBvYmpzCisJcm0gLWYgKi5nY2RhICouZ2NubyAqLmdjb3YKKwlybSAtZiBjb250cmliL2luZmJhY2s5LyouZ2NkYSBjb250cmliL2luZmJhY2s5LyouZ2NubyBjb250cmliL2luZmJhY2s5LyouZ2NvdgogCiBtYWludGFpbmVyLWNsZWFuOiBkaXN0Y2xlYW4KLWRpc3RjbGVhbjogY2xlYW4gemNvbmYgZG9jcwotCXJtIC1mIE1ha2VmaWxlIHpsaWIucGMKK2Rpc3RjbGVhbjogY2xlYW4gemNvbmYgemNvbmYuaC5jbWFrZWluIGRvY3MKKwlybSAtZiBNYWtlZmlsZSB6bGliLnBjIGNvbmZpZ3VyZS5sb2cKIAktQHJtIC1mIC5EU19TdG9yZQogCS1AcHJpbnRmICdhbGw6XG5cdC1AZWNobyAiUGxlYXNlIHVzZSAuL2NvbmZpZ3VyZSBmaXJzdC4gIFRoYW5rIHlvdS4iXG4nID4gTWFrZWZpbGUKIAktQHByaW50ZiAnXG5kaXN0Y2xlYW46XG5cdG1ha2UgLWYgTWFrZWZpbGUuaW4gZGlzdGNsZWFuXG4nID4+IE1ha2VmaWxlCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvUkVBRE1FIGIvTW9kdWxlcy96bGliL1JFQURNRQppbmRleCBkNDIxOWJmLi41Y2E5ZDEyIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvUkVBRE1FCisrKyBiL01vZHVsZXMvemxpYi9SRUFETUUKQEAgLTEsMjIgKzEsMjIgQEAKIFpMSUIgREFUQSBDT01QUkVTU0lPTiBMSUJSQVJZCiAKLXpsaWIgMS4yLjUgaXMgYSBnZW5lcmFsIHB1cnBvc2UgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5LiAgQWxsIHRoZSBjb2RlIGlzCit6bGliIDEuMi44IGlzIGEgZ2VuZXJhbCBwdXJwb3NlIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS4gIEFsbCB0aGUgY29kZSBpcwogdGhyZWFkIHNhZmUuICBUaGUgZGF0YSBmb3JtYXQgdXNlZCBieSB0aGUgemxpYiBsaWJyYXJ5IGlzIGRlc2NyaWJlZCBieSBSRkNzCiAoUmVxdWVzdCBmb3IgQ29tbWVudHMpIDE5NTAgdG8gMTk1MiBpbiB0aGUgZmlsZXMKLWh0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzE5NTAudHh0ICh6bGliIGZvcm1hdCksIHJmYzE5NTEudHh0IChkZWZsYXRlIGZvcm1hdCkKLWFuZCByZmMxOTUyLnR4dCAoZ3ppcCBmb3JtYXQpLgoraHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMTk1MCAoemxpYiBmb3JtYXQpLCByZmMxOTUxIChkZWZsYXRlIGZvcm1hdCkgYW5kCityZmMxOTUyIChnemlwIGZvcm1hdCkuCiAKIEFsbCBmdW5jdGlvbnMgb2YgdGhlIGNvbXByZXNzaW9uIGxpYnJhcnkgYXJlIGRvY3VtZW50ZWQgaW4gdGhlIGZpbGUgemxpYi5oCiAodm9sdW50ZWVyIHRvIHdyaXRlIG1hbiBwYWdlcyB3ZWxjb21lLCBjb250YWN0IHpsaWJAZ3ppcC5vcmcpLiAgQSB1c2FnZSBleGFtcGxlCi1vZiB0aGUgbGlicmFyeSBpcyBnaXZlbiBpbiB0aGUgZmlsZSBleGFtcGxlLmMgd2hpY2ggYWxzbyB0ZXN0cyB0aGF0IHRoZSBsaWJyYXJ5Ci1pcyB3b3JraW5nIGNvcnJlY3RseS4gIEFub3RoZXIgZXhhbXBsZSBpcyBnaXZlbiBpbiB0aGUgZmlsZSBtaW5pZ3ppcC5jLiAgVGhlCi1jb21wcmVzc2lvbiBsaWJyYXJ5IGl0c2VsZiBpcyBjb21wb3NlZCBvZiBhbGwgc291cmNlIGZpbGVzIGV4Y2VwdCBleGFtcGxlLmMgYW5kCi1taW5pZ3ppcC5jLgorb2YgdGhlIGxpYnJhcnkgaXMgZ2l2ZW4gaW4gdGhlIGZpbGUgdGVzdC9leGFtcGxlLmMgd2hpY2ggYWxzbyB0ZXN0cyB0aGF0Cit0aGUgbGlicmFyeSBpcyB3b3JraW5nIGNvcnJlY3RseS4gIEFub3RoZXIgZXhhbXBsZSBpcyBnaXZlbiBpbiB0aGUgZmlsZQordGVzdC9taW5pZ3ppcC5jLiAgVGhlIGNvbXByZXNzaW9uIGxpYnJhcnkgaXRzZWxmIGlzIGNvbXBvc2VkIG9mIGFsbCBzb3VyY2UKK2ZpbGVzIGluIHRoZSByb290IGRpcmVjdG9yeS4KIAogVG8gY29tcGlsZSBhbGwgZmlsZXMgYW5kIHJ1biB0aGUgdGVzdCBwcm9ncmFtLCBmb2xsb3cgdGhlIGluc3RydWN0aW9ucyBnaXZlbiBhdAogdGhlIHRvcCBvZiBNYWtlZmlsZS5pbi4gIEluIHNob3J0ICIuL2NvbmZpZ3VyZTsgbWFrZSB0ZXN0IiwgYW5kIGlmIHRoYXQgZ29lcwotd2VsbCwgIm1ha2UgaW5zdGFsbCIgc2hvdWxkIHdvcmsgZm9yIG1vc3QgZmxhdm9ycyBvZiBVbml4LiAgRm9yIFdpbmRvd3MsIHVzZSBvbmUKLW9mIHRoZSBzcGVjaWFsIG1ha2VmaWxlcyBpbiB3aW4zMi8gb3IgY29udHJpYi92c3R1ZGlvLyAuICBGb3IgVk1TLCB1c2UKK3dlbGwsICJtYWtlIGluc3RhbGwiIHNob3VsZCB3b3JrIGZvciBtb3N0IGZsYXZvcnMgb2YgVW5peC4gIEZvciBXaW5kb3dzLCB1c2UKK29uZSBvZiB0aGUgc3BlY2lhbCBtYWtlZmlsZXMgaW4gd2luMzIvIG9yIGNvbnRyaWIvdnN0dWRpby8gLiAgRm9yIFZNUywgdXNlCiBtYWtlX3Ztcy5jb20uCiAKIFF1ZXN0aW9ucyBhYm91dCB6bGliIHNob3VsZCBiZSBzZW50IHRvIDx6bGliQGd6aXAub3JnPiwgb3IgdG8gR2lsbGVzIFZvbGxhbnQKQEAgLTMxLDcgKzMxLDcgQEAKIGlzc3VlIG9mIERyLiAgRG9iYidzIEpvdXJuYWw7IGEgY29weSBvZiB0aGUgYXJ0aWNsZSBpcyBhdmFpbGFibGUgYXQKIGh0dHA6Ly9tYXJrbmVsc29uLnVzLzE5OTcvMDEvMDEvemxpYi1lbmdpbmUvIC4KIAotVGhlIGNoYW5nZXMgbWFkZSBpbiB2ZXJzaW9uIDEuMi41IGFyZSBkb2N1bWVudGVkIGluIHRoZSBmaWxlIENoYW5nZUxvZy4KK1RoZSBjaGFuZ2VzIG1hZGUgaW4gdmVyc2lvbiAxLjIuOCBhcmUgZG9jdW1lbnRlZCBpbiB0aGUgZmlsZSBDaGFuZ2VMb2cuCiAKIFVuc3VwcG9ydGVkIHRoaXJkIHBhcnR5IGNvbnRyaWJ1dGlvbnMgYXJlIHByb3ZpZGVkIGluIGRpcmVjdG9yeSBjb250cmliLyAuCiAKQEAgLTQ0LDcgKzQ0LDcgQEAKIAogQSBQeXRob24gaW50ZXJmYWNlIHRvIHpsaWIgd3JpdHRlbiBieSBBLk0uIEt1Y2hsaW5nIDxhbWtAYW1rLmNhPiBpcwogYXZhaWxhYmxlIGluIFB5dGhvbiAxLjUgYW5kIGxhdGVyIHZlcnNpb25zLCBzZWUKLWh0dHA6Ly93d3cucHl0aG9uLm9yZy9kb2MvbGliL21vZHVsZS16bGliLmh0bWwgLgoraHR0cDovL2RvY3MucHl0aG9uLm9yZy9saWJyYXJ5L3psaWIuaHRtbCAuCiAKIHpsaWIgaXMgYnVpbHQgaW50byB0Y2w6IGh0dHA6Ly93aWtpLnRjbC50ay80NjEwIC4KIApAQCAtODQsNyArODQsNyBAQAogCiBDb3B5cmlnaHQgbm90aWNlOgogCi0gKEMpIDE5OTUtMjAxMCBKZWFuLWxvdXAgR2FpbGx5IGFuZCBNYXJrIEFkbGVyCisgKEMpIDE5OTUtMjAxMyBKZWFuLWxvdXAgR2FpbGx5IGFuZCBNYXJrIEFkbGVyCiAKICAgVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCAnYXMtaXMnLCB3aXRob3V0IGFueSBleHByZXNzIG9yIGltcGxpZWQKICAgd2FycmFudHkuICBJbiBubyBldmVudCB3aWxsIHRoZSBhdXRob3JzIGJlIGhlbGQgbGlhYmxlIGZvciBhbnkgZGFtYWdlcwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL2FkbGVyMzIuYyBiL01vZHVsZXMvemxpYi9hZGxlcjMyLmMKaW5kZXggNjVhZDZhNS4uYTg2OGYwNyAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL2FkbGVyMzIuYworKysgYi9Nb2R1bGVzL3psaWIvYWRsZXIzMi5jCkBAIC0xLDUgKzEsNSBAQAogLyogYWRsZXIzMi5jIC0tIGNvbXB1dGUgdGhlIEFkbGVyLTMyIGNoZWNrc3VtIG9mIGEgZGF0YSBzdHJlYW0KLSAqIENvcHlyaWdodCAoQykgMTk5NS0yMDA3IE1hcmsgQWRsZXIKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDExIE1hcmsgQWRsZXIKICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKICAqLwogCkBAIC05LDkgKzksOSBAQAogCiAjZGVmaW5lIGxvY2FsIHN0YXRpYwogCi1sb2NhbCB1TG9uZyBhZGxlcjMyX2NvbWJpbmVfKHVMb25nIGFkbGVyMSwgdUxvbmcgYWRsZXIyLCB6X29mZjY0X3QgbGVuMik7Citsb2NhbCB1TG9uZyBhZGxlcjMyX2NvbWJpbmVfIE9GKCh1TG9uZyBhZGxlcjEsIHVMb25nIGFkbGVyMiwgel9vZmY2NF90IGxlbjIpKTsKIAotI2RlZmluZSBCQVNFIDY1NTIxVUwgICAgLyogbGFyZ2VzdCBwcmltZSBzbWFsbGVyIHRoYW4gNjU1MzYgKi8KKyNkZWZpbmUgQkFTRSA2NTUyMSAgICAgIC8qIGxhcmdlc3QgcHJpbWUgc21hbGxlciB0aGFuIDY1NTM2ICovCiAjZGVmaW5lIE5NQVggNTU1MgogLyogTk1BWCBpcyB0aGUgbGFyZ2VzdCBuIHN1Y2ggdGhhdCAyNTVuKG4rMSkvMiArIChuKzEpKEJBU0UtMSkgPD0gMl4zMi0xICovCiAKQEAgLTIxLDM5ICsyMSw0NCBAQAogI2RlZmluZSBETzgoYnVmLGkpICBETzQoYnVmLGkpOyBETzQoYnVmLGkrNCk7CiAjZGVmaW5lIERPMTYoYnVmKSAgIERPOChidWYsMCk7IERPOChidWYsOCk7CiAKLS8qIHVzZSBOT19ESVZJREUgaWYgeW91ciBwcm9jZXNzb3IgZG9lcyBub3QgZG8gZGl2aXNpb24gaW4gaGFyZHdhcmUgKi8KKy8qIHVzZSBOT19ESVZJREUgaWYgeW91ciBwcm9jZXNzb3IgZG9lcyBub3QgZG8gZGl2aXNpb24gaW4gaGFyZHdhcmUgLS0KKyAgIHRyeSBpdCBib3RoIHdheXMgdG8gc2VlIHdoaWNoIGlzIGZhc3RlciAqLwogI2lmZGVmIE5PX0RJVklERQotIyAgZGVmaW5lIE1PRChhKSBcCisvKiBub3RlIHRoYXQgdGhpcyBhc3N1bWVzIEJBU0UgaXMgNjU1MjEsIHdoZXJlIDY1NTM2ICUgNjU1MjEgPT0gMTUKKyAgICh0aGFuayB5b3UgdG8gSm9obiBSZWlzZXIgZm9yIHBvaW50aW5nIHRoaXMgb3V0KSAqLworIyAgZGVmaW5lIENIT1AoYSkgXAogICAgIGRvIHsgXAotICAgICAgICBpZiAoYSA+PSAoQkFTRSA8PCAxNikpIGEgLT0gKEJBU0UgPDwgMTYpOyBcCi0gICAgICAgIGlmIChhID49IChCQVNFIDw8IDE1KSkgYSAtPSAoQkFTRSA8PCAxNSk7IFwKLSAgICAgICAgaWYgKGEgPj0gKEJBU0UgPDwgMTQpKSBhIC09IChCQVNFIDw8IDE0KTsgXAotICAgICAgICBpZiAoYSA+PSAoQkFTRSA8PCAxMykpIGEgLT0gKEJBU0UgPDwgMTMpOyBcCi0gICAgICAgIGlmIChhID49IChCQVNFIDw8IDEyKSkgYSAtPSAoQkFTRSA8PCAxMik7IFwKLSAgICAgICAgaWYgKGEgPj0gKEJBU0UgPDwgMTEpKSBhIC09IChCQVNFIDw8IDExKTsgXAotICAgICAgICBpZiAoYSA+PSAoQkFTRSA8PCAxMCkpIGEgLT0gKEJBU0UgPDwgMTApOyBcCi0gICAgICAgIGlmIChhID49IChCQVNFIDw8IDkpKSBhIC09IChCQVNFIDw8IDkpOyBcCi0gICAgICAgIGlmIChhID49IChCQVNFIDw8IDgpKSBhIC09IChCQVNFIDw8IDgpOyBcCi0gICAgICAgIGlmIChhID49IChCQVNFIDw8IDcpKSBhIC09IChCQVNFIDw8IDcpOyBcCi0gICAgICAgIGlmIChhID49IChCQVNFIDw8IDYpKSBhIC09IChCQVNFIDw8IDYpOyBcCi0gICAgICAgIGlmIChhID49IChCQVNFIDw8IDUpKSBhIC09IChCQVNFIDw8IDUpOyBcCi0gICAgICAgIGlmIChhID49IChCQVNFIDw8IDQpKSBhIC09IChCQVNFIDw8IDQpOyBcCi0gICAgICAgIGlmIChhID49IChCQVNFIDw8IDMpKSBhIC09IChCQVNFIDw8IDMpOyBcCi0gICAgICAgIGlmIChhID49IChCQVNFIDw8IDIpKSBhIC09IChCQVNFIDw8IDIpOyBcCi0gICAgICAgIGlmIChhID49IChCQVNFIDw8IDEpKSBhIC09IChCQVNFIDw8IDEpOyBcCisgICAgICAgIHVuc2lnbmVkIGxvbmcgdG1wID0gYSA+PiAxNjsgXAorICAgICAgICBhICY9IDB4ZmZmZlVMOyBcCisgICAgICAgIGEgKz0gKHRtcCA8PCA0KSAtIHRtcDsgXAorICAgIH0gd2hpbGUgKDApCisjICBkZWZpbmUgTU9EMjgoYSkgXAorICAgIGRvIHsgXAorICAgICAgICBDSE9QKGEpOyBcCiAgICAgICAgIGlmIChhID49IEJBU0UpIGEgLT0gQkFTRTsgXAogICAgIH0gd2hpbGUgKDApCi0jICBkZWZpbmUgTU9ENChhKSBcCisjICBkZWZpbmUgTU9EKGEpIFwKICAgICBkbyB7IFwKLSAgICAgICAgaWYgKGEgPj0gKEJBU0UgPDwgNCkpIGEgLT0gKEJBU0UgPDwgNCk7IFwKLSAgICAgICAgaWYgKGEgPj0gKEJBU0UgPDwgMykpIGEgLT0gKEJBU0UgPDwgMyk7IFwKLSAgICAgICAgaWYgKGEgPj0gKEJBU0UgPDwgMikpIGEgLT0gKEJBU0UgPDwgMik7IFwKLSAgICAgICAgaWYgKGEgPj0gKEJBU0UgPDwgMSkpIGEgLT0gKEJBU0UgPDwgMSk7IFwKKyAgICAgICAgQ0hPUChhKTsgXAorICAgICAgICBNT0QyOChhKTsgXAorICAgIH0gd2hpbGUgKDApCisjICBkZWZpbmUgTU9ENjMoYSkgXAorICAgIGRvIHsgLyogdGhpcyBhc3N1bWVzIGEgaXMgbm90IG5lZ2F0aXZlICovIFwKKyAgICAgICAgel9vZmY2NF90IHRtcCA9IGEgPj4gMzI7IFwKKyAgICAgICAgYSAmPSAweGZmZmZmZmZmTDsgXAorICAgICAgICBhICs9ICh0bXAgPDwgOCkgLSAodG1wIDw8IDUpICsgdG1wOyBcCisgICAgICAgIHRtcCA9IGEgPj4gMTY7IFwKKyAgICAgICAgYSAmPSAweGZmZmZMOyBcCisgICAgICAgIGEgKz0gKHRtcCA8PCA0KSAtIHRtcDsgXAorICAgICAgICB0bXAgPSBhID4+IDE2OyBcCisgICAgICAgIGEgJj0gMHhmZmZmTDsgXAorICAgICAgICBhICs9ICh0bXAgPDwgNCkgLSB0bXA7IFwKICAgICAgICAgaWYgKGEgPj0gQkFTRSkgYSAtPSBCQVNFOyBcCiAgICAgfSB3aGlsZSAoMCkKICNlbHNlCiAjICBkZWZpbmUgTU9EKGEpIGEgJT0gQkFTRQotIyAgZGVmaW5lIE1PRDQoYSkgYSAlPSBCQVNFCisjICBkZWZpbmUgTU9EMjgoYSkgYSAlPSBCQVNFCisjICBkZWZpbmUgTU9ENjMoYSkgYSAlPSBCQVNFCiAjZW5kaWYKIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwpAQCAtOTIsNyArOTcsNyBAQAogICAgICAgICB9CiAgICAgICAgIGlmIChhZGxlciA+PSBCQVNFKQogICAgICAgICAgICAgYWRsZXIgLT0gQkFTRTsKLSAgICAgICAgTU9ENChzdW0yKTsgICAgICAgICAgICAgLyogb25seSBhZGRlZCBzbyBtYW55IEJBU0UncyAqLworICAgICAgICBNT0QyOChzdW0yKTsgICAgICAgICAgICAvKiBvbmx5IGFkZGVkIHNvIG1hbnkgQkFTRSdzICovCiAgICAgICAgIHJldHVybiBhZGxlciB8IChzdW0yIDw8IDE2KTsKICAgICB9CiAKQEAgLTEzNyw4ICsxNDIsMTMgQEAKICAgICB1bnNpZ25lZCBsb25nIHN1bTI7CiAgICAgdW5zaWduZWQgcmVtOwogCisgICAgLyogZm9yIG5lZ2F0aXZlIGxlbiwgcmV0dXJuIGludmFsaWQgYWRsZXIzMiBhcyBhIGNsdWUgZm9yIGRlYnVnZ2luZyAqLworICAgIGlmIChsZW4yIDwgMCkKKyAgICAgICAgcmV0dXJuIDB4ZmZmZmZmZmZVTDsKKwogICAgIC8qIHRoZSBkZXJpdmF0aW9uIG9mIHRoaXMgZm9ybXVsYSBpcyBsZWZ0IGFzIGFuIGV4ZXJjaXNlIGZvciB0aGUgcmVhZGVyICovCi0gICAgcmVtID0gKHVuc2lnbmVkKShsZW4yICUgQkFTRSk7CisgICAgTU9ENjMobGVuMik7ICAgICAgICAgICAgICAgIC8qIGFzc3VtZXMgbGVuMiA+PSAwICovCisgICAgcmVtID0gKHVuc2lnbmVkKWxlbjI7CiAgICAgc3VtMSA9IGFkbGVyMSAmIDB4ZmZmZjsKICAgICBzdW0yID0gcmVtICogc3VtMTsKICAgICBNT0Qoc3VtMik7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvYWxnb3JpdGhtLnR4dCBiL01vZHVsZXMvemxpYi9hbGdvcml0aG0udHh0CmluZGV4IGIwMjJkZGUuLmM5N2Y0OTUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi9hbGdvcml0aG0udHh0CisrKyBiL01vZHVsZXMvemxpYi9hbGdvcml0aG0udHh0CkBAIC0xMjEsNyArMTIxLDcgQEAKIGtieXRlcy4gIFlvdSBjYW4gaW1hZ2luZSB0aGF0IGZpbGxpbmcgaW4gYSAyXjE1IGVudHJ5IHRhYmxlIGZvciBhIDE1LWJpdCBjb2RlCiB3b3VsZCB0YWtlIHRvbyBsb25nIGlmIHlvdSdyZSBvbmx5IGRlY29kaW5nIHNldmVyYWwgdGhvdXNhbmQgc3ltYm9scy4gIEF0IHRoZQogb3RoZXIgZXh0cmVtZSwgeW91IGNvdWxkIG1ha2UgYSBuZXcgdGFibGUgZm9yIGV2ZXJ5IGJpdCBpbiB0aGUgY29kZS4gIEluIGZhY3QsCi10aGF0J3MgZXNzZW50aWFsbHkgYSBIdWZmbWFuIHRyZWUuICBCdXQgdGhlbiB5b3Ugc3BlbmQgdHdvIG11Y2ggdGltZQordGhhdCdzIGVzc2VudGlhbGx5IGEgSHVmZm1hbiB0cmVlLiAgQnV0IHRoZW4geW91IHNwZW5kIHRvbyBtdWNoIHRpbWUKIHRyYXZlcnNpbmcgdGhlIHRyZWUgd2hpbGUgZGVjb2RpbmcsIGV2ZW4gZm9yIHNob3J0IHN5bWJvbHMuCiAKIFNvIHRoZSBudW1iZXIgb2YgYml0cyBmb3IgdGhlIGZpcnN0IGxvb2t1cCB0YWJsZSBpcyBhIHRyYWRlIG9mIHRoZSB0aW1lIHRvCkBAIC0yMDYsNCArMjA2LDQgQEAKIHBwLiAzMzctMzQzLgogCiBgYERFRkxBVEUgQ29tcHJlc3NlZCBEYXRhIEZvcm1hdCBTcGVjaWZpY2F0aW9uJycgYXZhaWxhYmxlIGluCi1odHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmMxOTUxLnR4dAoraHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMTk1MQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL2NvbXByZXNzLmMgYi9Nb2R1bGVzL3psaWIvY29tcHJlc3MuYwppbmRleCBlYTRkZmJlLi42ZTk3NjI2IDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvY29tcHJlc3MuYworKysgYi9Nb2R1bGVzL3psaWIvY29tcHJlc3MuYwpAQCAtMjksNyArMjksNyBAQAogICAgIHpfc3RyZWFtIHN0cmVhbTsKICAgICBpbnQgZXJyOwogCi0gICAgc3RyZWFtLm5leHRfaW4gPSAoQnl0ZWYqKXNvdXJjZTsKKyAgICBzdHJlYW0ubmV4dF9pbiA9ICh6X2NvbnN0IEJ5dGVmICopc291cmNlOwogICAgIHN0cmVhbS5hdmFpbF9pbiA9ICh1SW50KXNvdXJjZUxlbjsKICNpZmRlZiBNQVhTRUdfNjRLCiAgICAgLyogQ2hlY2sgZm9yIHNvdXJjZSA+IDY0SyBvbiAxNi1iaXQgbWFjaGluZTogKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi9jb25maWd1cmUgYi9Nb2R1bGVzL3psaWIvY29uZmlndXJlCmluZGV4IGJkOWVkZDIuLmI3N2E4YTggMTAwNzU1Ci0tLSBhL01vZHVsZXMvemxpYi9jb25maWd1cmUKKysrIGIvTW9kdWxlcy96bGliL2NvbmZpZ3VyZQpAQCAtMTMsMzkgKzEzLDUyIEBACiAjIElmIHlvdSBoYXZlIHByb2JsZW1zLCB0cnkgd2l0aG91dCBkZWZpbmluZyBDQyBhbmQgQ0ZMQUdTIGJlZm9yZSByZXBvcnRpbmcKICMgYW4gZXJyb3IuCiAKKyMgc3RhcnQgb2ZmIGNvbmZpZ3VyZS5sb2cKK2VjaG8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gPj4gY29uZmlndXJlLmxvZworZWNobyAkMCAkKiA+PiBjb25maWd1cmUubG9nCitkYXRlID4+IGNvbmZpZ3VyZS5sb2cKKworIyBzZXQgY29tbWFuZCBwcmVmaXggZm9yIGNyb3NzLWNvbXBpbGF0aW9uCiBpZiBbIC1uICIke0NIT1NUfSIgXTsgdGhlbgotICAgIHVuYW1lPSIkKGVjaG8gIiR7Q0hPU1R9IiB8IHNlZCAtZSAncy9eW14tXSotXChbXi1dKlwpJC9cMS8nIC1lICdzL15bXi1dKi1bXi1dKi1cKFteLV0qXCkkL1wxLycgLWUgJ3MvXlteLV0qLVteLV0qLVwoW14tXSpcKS0uKiQvXDEvJykiCisgICAgdW5hbWU9ImBlY2hvICIke0NIT1NUfSIgfCBzZWQgLWUgJ3MvXlteLV0qLVwoW14tXSpcKSQvXDEvJyAtZSAncy9eW14tXSotW14tXSotXChbXi1dKlwpJC9cMS8nIC1lICdzL15bXi1dKi1bXi1dKi1cKFteLV0qXCktLiokL1wxLydgIgogICAgIENST1NTX1BSRUZJWD0iJHtDSE9TVH0tIgogZmkKIAorIyBkZXN0aW5hdGlvbiBuYW1lIGZvciBzdGF0aWMgbGlicmFyeQogU1RBVElDTElCPWxpYnouYQotTERGTEFHUz0iJHtMREZMQUdTfSAtTC4gJHtTVEFUSUNMSUJ9IgorCisjIGV4dHJhY3QgemxpYiB2ZXJzaW9uIG51bWJlcnMgZnJvbSB6bGliLmgKIFZFUj1gc2VkIC1uIC1lICcvVkVSU0lPTiAiL3MvLioiXCguKlwpIi4qL1wxL3AnIDwgemxpYi5oYAogVkVSMz1gc2VkIC1uIC1lICcvVkVSU0lPTiAiL3MvLioiXChbMC05XSpcXC5bMC05XSpcXC5bMC05XSpcKS4qL1wxL3AnIDwgemxpYi5oYAogVkVSMj1gc2VkIC1uIC1lICcvVkVSU0lPTiAiL3MvLioiXChbMC05XSpcXC5bMC05XSpcKVxcLi4qL1wxL3AnIDwgemxpYi5oYAogVkVSMT1gc2VkIC1uIC1lICcvVkVSU0lPTiAiL3MvLioiXChbMC05XSpcKVxcLi4qL1wxL3AnIDwgemxpYi5oYAorCisjIGVzdGFibGlzaCBjb21tYW5kcyBmb3IgbGlicmFyeSBidWlsZGluZwogaWYgIiR7Q1JPU1NfUFJFRklYfWFyIiAtLXZlcnNpb24gPi9kZXYvbnVsbCAyPi9kZXYvbnVsbCB8fCB0ZXN0ICQ/IC1sdCAxMjY7IHRoZW4KICAgICBBUj0ke0FSLSIke0NST1NTX1BSRUZJWH1hciJ9Ci0gICAgdGVzdCAtbiAiJHtDUk9TU19QUkVGSVh9IiAmJiBlY2hvIFVzaW5nICR7QVJ9CisgICAgdGVzdCAtbiAiJHtDUk9TU19QUkVGSVh9IiAmJiBlY2hvIFVzaW5nICR7QVJ9IHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKIGVsc2UKICAgICBBUj0ke0FSLSJhciJ9Ci0gICAgdGVzdCAtbiAiJHtDUk9TU19QUkVGSVh9IiAmJiBlY2hvIFVzaW5nICR7QVJ9CisgICAgdGVzdCAtbiAiJHtDUk9TU19QUkVGSVh9IiAmJiBlY2hvIFVzaW5nICR7QVJ9IHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKIGZpCi1BUl9SQz0iJHtBUn0gcmMiCitBUkZMQUdTPSR7QVJGTEFHUy0icmMifQogaWYgIiR7Q1JPU1NfUFJFRklYfXJhbmxpYiIgLS12ZXJzaW9uID4vZGV2L251bGwgMj4vZGV2L251bGwgfHwgdGVzdCAkPyAtbHQgMTI2OyB0aGVuCiAgICAgUkFOTElCPSR7UkFOTElCLSIke0NST1NTX1BSRUZJWH1yYW5saWIifQotICAgIHRlc3QgLW4gIiR7Q1JPU1NfUFJFRklYfSIgJiYgZWNobyBVc2luZyAke1JBTkxJQn0KKyAgICB0ZXN0IC1uICIke0NST1NTX1BSRUZJWH0iICYmIGVjaG8gVXNpbmcgJHtSQU5MSUJ9IHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKIGVsc2UKICAgICBSQU5MSUI9JHtSQU5MSUItInJhbmxpYiJ9CiBmaQogaWYgIiR7Q1JPU1NfUFJFRklYfW5tIiAtLXZlcnNpb24gPi9kZXYvbnVsbCAyPi9kZXYvbnVsbCB8fCB0ZXN0ICQ/IC1sdCAxMjY7IHRoZW4KICAgICBOTT0ke05NLSIke0NST1NTX1BSRUZJWH1ubSJ9Ci0gICAgdGVzdCAtbiAiJHtDUk9TU19QUkVGSVh9IiAmJiBlY2hvIFVzaW5nICR7Tk19CisgICAgdGVzdCAtbiAiJHtDUk9TU19QUkVGSVh9IiAmJiBlY2hvIFVzaW5nICR7Tk19IHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKIGVsc2UKICAgICBOTT0ke05NLSJubSJ9CiBmaQorCisjIHNldCBkZWZhdWx0cyBiZWZvcmUgcHJvY2Vzc2luZyBjb21tYW5kIGxpbmUgb3B0aW9ucwogTERDT05GSUc9JHtMRENPTkZJRy0ibGRjb25maWcifQogTERTSEFSRURMSUJDPSIke0xEU0hBUkVETElCQy0tbGN9IgorQVJDSFM9CiBwcmVmaXg9JHtwcmVmaXgtL3Vzci9sb2NhbH0KIGV4ZWNfcHJlZml4PSR7ZXhlY19wcmVmaXgtJyR7cHJlZml4fSd9CiBsaWJkaXI9JHtsaWJkaXItJyR7ZXhlY19wcmVmaXh9L2xpYid9CkBAIC01NCwyMCArNjcsMzkgQEAKIG1hbmRpcj0ke21hbmRpci0nJHtwcmVmaXh9L3NoYXJlL21hbid9CiBzaGFyZWRfZXh0PScuc28nCiBzaGFyZWQ9MQorc29sbz0wCitjb3Zlcj0wCiB6cHJlZml4PTAKK3pjb25zdD0wCiBidWlsZDY0PTAKIGdjYz0wCiBvbGRfY2M9IiRDQyIKIG9sZF9jZmxhZ3M9IiRDRkxBR1MiCitPQkpDPSckKE9CSlopICQoT0JKRyknCitQSUNfT0JKQz0nJChQSUNfT0JKWikgJChQSUNfT0JKRyknCiAKKyMgbGVhdmUgdGhpcyBzY3JpcHQsIG9wdGlvbmFsbHkgaW4gYSBiYWQgd2F5CitsZWF2ZSgpCit7CisgIGlmIHRlc3QgIiQqIiAhPSAiMCI7IHRoZW4KKyAgICBlY2hvICIqKiAkMCBhYm9ydGluZy4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgZmkKKyAgcm0gLWYgJHRlc3QuW2NvXSAkdGVzdCAkdGVzdCRzaGFyZWRfZXh0ICR0ZXN0Lmdjbm8gLi8tLXZlcnNpb24KKyAgZWNobyAtLS0tLS0tLS0tLS0tLS0tLS0tLSA+PiBjb25maWd1cmUubG9nCisgIGVjaG8gPj4gY29uZmlndXJlLmxvZworICBlY2hvID4+IGNvbmZpZ3VyZS5sb2cKKyAgZXhpdCAkMQorfQorCisjIHByb2Nlc3MgY29tbWFuZCBsaW5lIG9wdGlvbnMKIHdoaWxlIHRlc3QgJCMgLWdlIDEKIGRvCiBjYXNlICIkMSIgaW4KICAgICAtaCogfCAtLWhlbHApCi0gICAgICBlY2hvICd1c2FnZTonCi0gICAgICBlY2hvICcgIGNvbmZpZ3VyZSBbLS16cHJlZml4XSBbLS1wcmVmaXg9UFJFRklYXSAgWy0tZXByZWZpeD1FWFBSRUZJWF0nCi0gICAgICBlY2hvICcgICAgWy0tc3RhdGljXSBbLS02NF0gWy0tbGliZGlyPUxJQkRJUl0gWy0tc2hhcmVkbGliZGlyPUxJQkRJUl0nCi0gICAgICBlY2hvICcgICAgWy0taW5jbHVkZWRpcj1JTkNMVURFRElSXScKKyAgICAgIGVjaG8gJ3VzYWdlOicgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICAgICAgZWNobyAnICBjb25maWd1cmUgWy0tY29uc3RdIFstLXpwcmVmaXhdIFstLXByZWZpeD1QUkVGSVhdICBbLS1lcHJlZml4PUVYUFJFRklYXScgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICAgICAgZWNobyAnICAgIFstLXN0YXRpY10gWy0tNjRdIFstLWxpYmRpcj1MSUJESVJdIFstLXNoYXJlZGxpYmRpcj1MSUJESVJdJyB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAgICBlY2hvICcgICAgWy0taW5jbHVkZWRpcj1JTkNMVURFRElSXSBbLS1hcmNocz0iLWFyY2ggaTM4NiAtYXJjaCB4ODZfNjQiXScgfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogICAgICAgICBleGl0IDAgOzsKICAgICAtcCo9KiB8IC0tcHJlZml4PSopIHByZWZpeD1gZWNobyAkMSB8IHNlZCAncy8uKj0vLydgOyBzaGlmdCA7OwogICAgIC1lKj0qIHwgLS1lcHJlZml4PSopIGV4ZWNfcHJlZml4PWBlY2hvICQxIHwgc2VkICdzLy4qPS8vJ2A7IHNoaWZ0IDs7CkBAIC04MSw1MSArMTEzLDg4IEBACiAgICAgLWkqIHwgLS1pbmNsdWRlZGlyKSBpbmNsdWRlZGlyPSIkMiI7IHNoaWZ0OyBzaGlmdCA7OwogICAgIC1zKiB8IC0tc2hhcmVkIHwgLS1lbmFibGUtc2hhcmVkKSBzaGFyZWQ9MTsgc2hpZnQgOzsKICAgICAtdCB8IC0tc3RhdGljKSBzaGFyZWQ9MDsgc2hpZnQgOzsKKyAgICAtLXNvbG8pIHNvbG89MTsgc2hpZnQgOzsKKyAgICAtLWNvdmVyKSBjb3Zlcj0xOyBzaGlmdCA7OwogICAgIC16KiB8IC0tenByZWZpeCkgenByZWZpeD0xOyBzaGlmdCA7OwogICAgIC02KiB8IC0tNjQpIGJ1aWxkNjQ9MTsgc2hpZnQgOzsKLSAgICAtLXN5c2NvbmZkaXI9KikgZWNobyAiaWdub3JlZCBvcHRpb246IC0tc3lzY29uZmRpciI7IHNoaWZ0IDs7Ci0gICAgLS1sb2NhbHN0YXRlZGlyPSopIGVjaG8gImlnbm9yZWQgb3B0aW9uOiAtLWxvY2Fsc3RhdGVkaXIiOyBzaGlmdCA7OwotICAgICopIGVjaG8gInVua25vd24gb3B0aW9uOiAkMSI7IGVjaG8gIiQwIC0taGVscCBmb3IgaGVscCI7IGV4aXQgMSA7OworICAgIC1hKj0qIHwgLS1hcmNocz0qKSBBUkNIUz1gZWNobyAkMSB8IHNlZCAncy8uKj0vLydgOyBzaGlmdCA7OworICAgIC0tc3lzY29uZmRpcj0qKSBlY2hvICJpZ25vcmVkIG9wdGlvbjogLS1zeXNjb25mZGlyIiB8IHRlZSAtYSBjb25maWd1cmUubG9nOyBzaGlmdCA7OworICAgIC0tbG9jYWxzdGF0ZWRpcj0qKSBlY2hvICJpZ25vcmVkIG9wdGlvbjogLS1sb2NhbHN0YXRlZGlyIiB8IHRlZSAtYSBjb25maWd1cmUubG9nOyBzaGlmdCA7OworICAgIC1jKiB8IC0tY29uc3QpIHpjb25zdD0xOyBzaGlmdCA7OworICAgICopCisgICAgICBlY2hvICJ1bmtub3duIG9wdGlvbjogJDEiIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgICAgIGVjaG8gIiQwIC0taGVscCBmb3IgaGVscCIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICAgICAgbGVhdmUgMTs7CiAgICAgZXNhYwogZG9uZQogCisjIHRlbXBvcmFyeSBmaWxlIG5hbWUKIHRlc3Q9enRlc3QkJAorCisjIHB1dCBhcmd1bWVudHMgaW4gbG9nLCBhbHNvIHB1dCB0ZXN0IGZpbGUgaW4gbG9nIGlmIHVzZWQgaW4gYXJndW1lbnRzCitzaG93KCkKK3sKKyAgY2FzZSAiJCoiIGluCisgICAgKiR0ZXN0LmMqKQorICAgICAgZWNobyA9PT0gJHRlc3QuYyA9PT0gPj4gY29uZmlndXJlLmxvZworICAgICAgY2F0ICR0ZXN0LmMgPj4gY29uZmlndXJlLmxvZworICAgICAgZWNobyA9PT0gPj4gY29uZmlndXJlLmxvZzs7CisgIGVzYWMKKyAgZWNobyAkKiA+PiBjb25maWd1cmUubG9nCit9CisKKyMgY2hlY2sgZm9yIGdjYyB2cy4gY2MgYW5kIHNldCBjb21waWxlIGFuZCBsaW5rIGZsYWdzIGJhc2VkIG9uIHRoZSBzeXN0ZW0gaWRlbnRpZmllZCBieSB1bmFtZQogY2F0ID4gJHRlc3QuYyA8PEVPRgogZXh0ZXJuIGludCBnZXRjaGFyKCk7CiBpbnQgaGVsbG8oKSB7cmV0dXJuIGdldGNoYXIoKTt9CiBFT0YKIAotdGVzdCAteiAiJENDIiAmJiBlY2hvIENoZWNraW5nIGZvciAke0NST1NTX1BSRUZJWH1nY2MuLi4KK3Rlc3QgLXogIiRDQyIgJiYgZWNobyBDaGVja2luZyBmb3IgJHtDUk9TU19QUkVGSVh9Z2NjLi4uIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKIGNjPSR7Q0MtJHtDUk9TU19QUkVGSVh9Z2NjfQogY2ZsYWdzPSR7Q0ZMQUdTLSItTzMifQogIyB0byBmb3JjZSB0aGUgYXNtIHZlcnNpb24gdXNlOiBDRkxBR1M9Ii1PMyAtREFTTVYiIC4vY29uZmlndXJlCiBjYXNlICIkY2MiIGluCiAgICpnY2MqKSBnY2M9MSA7OworICAqY2xhbmcqKSBnY2M9MSA7OworZXNhYworY2FzZSBgJGNjIC12IDI+JjFgIGluCisgICpnY2MqKSBnY2M9MSA7OwogZXNhYwogCi1pZiB0ZXN0ICIkZ2NjIiAtZXEgMSAmJiAoJGNjIC1jICRjZmxhZ3MgJHRlc3QuYykgMj4vZGV2L251bGw7IHRoZW4KK3Nob3cgJGNjIC1jICR0ZXN0LmMKK2lmIHRlc3QgIiRnY2MiIC1lcSAxICYmICgkY2MgLWMgJHRlc3QuYykgPj4gY29uZmlndXJlLmxvZyAyPiYxOyB0aGVuCisgIGVjaG8gLi4uIHVzaW5nIGdjYyA+PiBjb25maWd1cmUubG9nCiAgIENDPSIkY2MiCisgIENGTEFHUz0iJHtDRkxBR1MtLU8zfSAke0FSQ0hTfSIKICAgU0ZMQUdTPSIke0NGTEFHUy0tTzN9IC1mUElDIgotICBDRkxBR1M9IiR7Q0ZMQUdTLS1PM30iCisgIExERkxBR1M9IiR7TERGTEFHU30gJHtBUkNIU30iCiAgIGlmIHRlc3QgJGJ1aWxkNjQgLWVxIDE7IHRoZW4KICAgICBDRkxBR1M9IiR7Q0ZMQUdTfSAtbTY0IgogICAgIFNGTEFHUz0iJHtTRkxBR1N9IC1tNjQiCiAgIGZpCiAgIGlmIHRlc3QgIiR7WkxJQkdDQ1dBUk59IiA9ICJZRVMiOyB0aGVuCi0gICAgQ0ZMQUdTPSIke0NGTEFHU30gLVdhbGwgLVdleHRyYSAtcGVkYW50aWMiCisgICAgaWYgdGVzdCAiJHpjb25zdCIgLWVxIDE7IHRoZW4KKyAgICAgIENGTEFHUz0iJHtDRkxBR1N9IC1XYWxsIC1XZXh0cmEgLVdjYXN0LXF1YWwgLXBlZGFudGljIC1EWkxJQl9DT05TVCIKKyAgICBlbHNlCisgICAgICBDRkxBR1M9IiR7Q0ZMQUdTfSAtV2FsbCAtV2V4dHJhIC1wZWRhbnRpYyIKKyAgICBmaQogICBmaQogICBpZiB0ZXN0IC16ICIkdW5hbWUiOyB0aGVuCiAgICAgdW5hbWU9YCh1bmFtZSAtcyB8fCBlY2hvIHVua25vd24pIDI+L2Rldi9udWxsYAogICBmaQogICBjYXNlICIkdW5hbWUiIGluCi0gIExpbnV4KiB8IGxpbnV4KiB8IEdOVSB8IEdOVS8qIHwgKkJTRCB8IERyYWdvbkZseSkgTERTSEFSRUQ9JHtMRFNIQVJFRC0iJGNjIC1zaGFyZWQgLVdsLC1zb25hbWUsbGliei5zby4xLC0tdmVyc2lvbi1zY3JpcHQsemxpYi5tYXAifSA7OworICBMaW51eCogfCBsaW51eCogfCBHTlUgfCBHTlUvKiB8IHNvbGFyaXMqKQorICAgICAgICBMRFNIQVJFRD0ke0xEU0hBUkVELSIkY2MgLXNoYXJlZCAtV2wsLXNvbmFtZSxsaWJ6LnNvLjEsLS12ZXJzaW9uLXNjcmlwdCx6bGliLm1hcCJ9IDs7CisgICpCU0QgfCAqYnNkKiB8IERyYWdvbkZseSkKKyAgICAgICAgTERTSEFSRUQ9JHtMRFNIQVJFRC0iJGNjIC1zaGFyZWQgLVdsLC1zb25hbWUsbGliei5zby4xLC0tdmVyc2lvbi1zY3JpcHQsemxpYi5tYXAifQorICAgICAgICBMRENPTkZJRz0ibGRjb25maWcgLW0iIDs7CiAgIENZR1dJTiogfCBDeWd3aW4qIHwgY3lnd2luKiB8IE9TLzIqKQogICAgICAgICBFWEU9Jy5leGUnIDs7Ci0gIE1JTkdXKnxtaW5ndyopCisgIE1JTkdXKiB8IG1pbmd3KikKICMgdGVtcG9yYXJ5IGJ5cGFzcwogICAgICAgICBybSAtZiAkdGVzdC5bY29dICR0ZXN0ICR0ZXN0JHNoYXJlZF9leHQKLSAgICAgICAgZWNobyAiUGxlYXNlIHVzZSB3aW4zMi9NYWtlZmlsZS5nY2MgaW5zdGVhZC4iCi0gICAgICAgIGV4aXQgMQorICAgICAgICBlY2hvICJQbGVhc2UgdXNlIHdpbjMyL01ha2VmaWxlLmdjYyBpbnN0ZWFkLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICAgICAgICBsZWF2ZSAxCiAgICAgICAgIExEU0hBUkVEPSR7TERTSEFSRUQtIiRjYyAtc2hhcmVkIn0KICAgICAgICAgTERTSEFSRURMSUJDPSIiCiAgICAgICAgIEVYRT0nLmV4ZScgOzsKQEAgLTE0MiwxNyArMjExLDI1IEBACiAgICAgICAgICAgICAgICAgIHNoYXJlZF9leHQ9Jy5zbCcKICAgICAgICAgICAgICAgICAgU0hBUkVETElCPSdsaWJ6LnNsJyA7OwogICAgICAgICAgZXNhYyA7OwotICBEYXJ3aW4qKSAgIHNoYXJlZF9leHQ9Jy5keWxpYicKKyAgRGFyd2luKiB8IGRhcndpbiopCisgICAgICAgICAgICAgc2hhcmVkX2V4dD0nLmR5bGliJwogICAgICAgICAgICAgIFNIQVJFRExJQj1saWJ6JHNoYXJlZF9leHQKICAgICAgICAgICAgICBTSEFSRURMSUJWPWxpYnouJFZFUiRzaGFyZWRfZXh0CiAgICAgICAgICAgICAgU0hBUkVETElCTT1saWJ6LiRWRVIxJHNoYXJlZF9leHQKLSAgICAgICAgICAgICBMRFNIQVJFRD0ke0xEU0hBUkVELSIkY2MgLWR5bmFtaWNsaWIgLWluc3RhbGxfbmFtZSAkbGliZGlyLyRTSEFSRURMSUJNIC1jb21wYXRpYmlsaXR5X3ZlcnNpb24gJFZFUjEgLWN1cnJlbnRfdmVyc2lvbiAkVkVSMyJ9IDs7CisgICAgICAgICAgICAgTERTSEFSRUQ9JHtMRFNIQVJFRC0iJGNjIC1keW5hbWljbGliIC1pbnN0YWxsX25hbWUgJGxpYmRpci8kU0hBUkVETElCTSAtY29tcGF0aWJpbGl0eV92ZXJzaW9uICRWRVIxIC1jdXJyZW50X3ZlcnNpb24gJFZFUjMifQorICAgICAgICAgICAgIGlmIGxpYnRvb2wgLVYgMj4mMSB8IGdyZXAgQXBwbGUgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgICAgICAgICAgICAgQVI9ImxpYnRvb2wiCisgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICBBUj0iL3Vzci9iaW4vbGlidG9vbCIKKyAgICAgICAgICAgICBmaQorICAgICAgICAgICAgIEFSRkxBR1M9Ii1vIiA7OwogICAqKSAgICAgICAgICAgICBMRFNIQVJFRD0ke0xEU0hBUkVELSIkY2MgLXNoYXJlZCJ9IDs7CiAgIGVzYWMKIGVsc2UKICAgIyBmaW5kIHN5c3RlbSBuYW1lIGFuZCBjb3JyZXNwb25kaW5nIGNjIG9wdGlvbnMKICAgQ0M9JHtDQy1jY30KICAgZ2NjPTAKKyAgZWNobyAuLi4gdXNpbmcgJENDID4+IGNvbmZpZ3VyZS5sb2cKICAgaWYgdGVzdCAteiAiJHVuYW1lIjsgdGhlbgogICAgIHVuYW1lPWAodW5hbWUgLXNyIHx8IGVjaG8gdW5rbm93bikgMj4vZGV2L251bGxgCiAgIGZpCkBAIC0xODMsMTkgKzI2MCwzNCBAQAogICAgICAgICAgICAgIENGTEFHUz0ke0NGTEFHUy0iLTQgLU8ifQogICAgICAgICAgICAgIExEU0hBUkVEPSR7TERTSEFSRUQtImNjIn0KICAgICAgICAgICAgICBSQU5MSUI9JHtSQU5MSUItInRydWUifQotICAgICAgICAgICAgIEFSX1JDPSJjYyAtQSIgOzsKKyAgICAgICAgICAgICBBUj0iY2MiCisgICAgICAgICAgICAgQVJGTEFHUz0iLUEiIDs7CiAgIFNDT19TVlwgMy4yKikgU0ZMQUdTPSR7Q0ZMQUdTLSItTzMgLWR5IC1LUElDICJ9CiAgICAgICAgICAgICAgQ0ZMQUdTPSR7Q0ZMQUdTLSItTzMifQogICAgICAgICAgICAgIExEU0hBUkVEPSR7TERTSEFSRUQtImNjIC1keSAtS1BJQyAtRyJ9IDs7Ci0gIFN1bk9TXCA1KikgTERTSEFSRUQ9JHtMRFNIQVJFRC0iY2MgLUcifQotICAgICAgICAgY2FzZSBgKHVuYW1lIC1tIHx8IGVjaG8gdW5rbm93bikgMj4vZGV2L251bGxgIGluCi0gICAgICAgICBpODYqKQotICAgICAgICAgICAgIFNGTEFHUz0ke0NGTEFHUy0iLXhwZW50aXVtIC1mYXN0IC1LUElDIC1SLiJ9Ci0gICAgICAgICAgICAgQ0ZMQUdTPSR7Q0ZMQUdTLSIteHBlbnRpdW0gLWZhc3QifSA7OwotICAgICAgICAgKikKLSAgICAgICAgICAgICBTRkxBR1M9JHtDRkxBR1MtIi1mYXN0IC14Y2c5MiAtS1BJQyAtUi4ifQotICAgICAgICAgICAgIENGTEFHUz0ke0NGTEFHUy0iLWZhc3QgLXhjZzkyIn0gOzsKLSAgICAgICAgIGVzYWMgOzsKKyAgU3VuT1NcIDUqIHwgc29sYXJpcyopCisgICAgICAgICBMRFNIQVJFRD0ke0xEU0hBUkVELSJjYyAtRyAtaCBsaWJ6JHNoYXJlZF9leHQuJFZFUjEifQorICAgICAgICAgU0ZMQUdTPSR7Q0ZMQUdTLSItZmFzdCAtS1BJQyJ9CisgICAgICAgICBDRkxBR1M9JHtDRkxBR1MtIi1mYXN0In0KKyAgICAgICAgIGlmIHRlc3QgJGJ1aWxkNjQgLWVxIDE7IHRoZW4KKyAgICAgICAgICAgICAjIG9sZCB2ZXJzaW9ucyBvZiBTdW5QUk8vV29ya3Nob3AvU3R1ZGlvIGRvbid0IHN1cHBvcnQgLW02NCwKKyAgICAgICAgICAgICAjIGJ1dCBuZXdlciBvbmVzIGRvLiAgQ2hlY2sgZm9yIGl0LgorICAgICAgICAgICAgIGZsYWc2ND1gJENDIC1mbGFncyB8IGVncmVwIC0tICdeLW02NCdgCisgICAgICAgICAgICAgaWYgdGVzdCB4IiRmbGFnNjQiICE9IHgiIiA7IHRoZW4KKyAgICAgICAgICAgICAgICAgQ0ZMQUdTPSIke0NGTEFHU30gLW02NCIKKyAgICAgICAgICAgICAgICAgU0ZMQUdTPSIke1NGTEFHU30gLW02NCIKKyAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgIGNhc2UgYCh1bmFtZSAtbSB8fCBlY2hvIHVua25vd24pIDI+L2Rldi9udWxsYCBpbgorICAgICAgICAgICAgICAgICAgIGk4NiopCisgICAgICAgICAgICAgICAgICAgICBTRkxBR1M9IiRTRkxBR1MgLXhhcmNoPWFtZDY0IgorICAgICAgICAgICAgICAgICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC14YXJjaD1hbWQ2NCIgOzsKKyAgICAgICAgICAgICAgICAgICAqKQorICAgICAgICAgICAgICAgICAgICAgU0ZMQUdTPSIkU0ZMQUdTIC14YXJjaD12OSIKKyAgICAgICAgICAgICAgICAgICAgIENGTEFHUz0iJENGTEFHUyAteGFyY2g9djkiIDs7CisgICAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICBmaQorICAgICAgICAgZmkKKyAgICAgICAgIDs7CiAgIFN1bk9TXCA0KikgU0ZMQUdTPSR7Q0ZMQUdTLSItTzIgLVBJQyJ9CiAgICAgICAgICAgICAgQ0ZMQUdTPSR7Q0ZMQUdTLSItTzIifQogICAgICAgICAgICAgIExEU0hBUkVEPSR7TERTSEFSRUQtImxkIn0gOzsKQEAgLTIyNSwyNSArMzE3LDc5IEBACiAgIGVzYWMKIGZpCiAKKyMgZGVzdGluYXRpb24gbmFtZXMgZm9yIHNoYXJlZCBsaWJyYXJ5IGlmIG5vdCBkZWZpbmVkIGFib3ZlCiBTSEFSRURMSUI9JHtTSEFSRURMSUItImxpYnokc2hhcmVkX2V4dCJ9CiBTSEFSRURMSUJWPSR7U0hBUkVETElCVi0ibGlieiRzaGFyZWRfZXh0LiRWRVIifQogU0hBUkVETElCTT0ke1NIQVJFRExJQk0tImxpYnokc2hhcmVkX2V4dC4kVkVSMSJ9CiAKK2VjaG8gPj4gY29uZmlndXJlLmxvZworCisjIGRlZmluZSBmdW5jdGlvbnMgZm9yIHRlc3RpbmcgY29tcGlsZXIgYW5kIGxpYnJhcnkgY2hhcmFjdGVyaXN0aWNzIGFuZCBsb2dnaW5nIHRoZSByZXN1bHRzCisKK2NhdCA+ICR0ZXN0LmMgPDxFT0YKKyNlcnJvciBlcnJvcgorRU9GCitpZiAoJENDIC1jICRDRkxBR1MgJHRlc3QuYykgMj4vZGV2L251bGw7IHRoZW4KKyAgdHJ5KCkKKyAgeworICAgIHNob3cgJCoKKyAgICB0ZXN0ICJgKCAkKiApIDI+JjEgfCB0ZWUgLWEgY29uZmlndXJlLmxvZ2AiID0gIiIKKyAgfQorICBlY2hvIC0gdXNpbmcgYW55IG91dHB1dCBmcm9tIGNvbXBpbGVyIHRvIGluZGljYXRlIGFuIGVycm9yID4+IGNvbmZpZ3VyZS5sb2cKK2Vsc2UKK3RyeSgpCit7CisgIHNob3cgJCoKKyAgKCAkKiApID4+IGNvbmZpZ3VyZS5sb2cgMj4mMQorICByZXQ9JD8KKyAgaWYgdGVzdCAkcmV0IC1uZSAwOyB0aGVuCisgICAgZWNobyAiKGV4aXQgY29kZSAiJHJldCIpIiA+PiBjb25maWd1cmUubG9nCisgIGZpCisgIHJldHVybiAkcmV0Cit9CitmaQorCit0cnlib3RoKCkKK3sKKyAgc2hvdyAkKgorICBnb3Q9YCggJCogKSAyPiYxYAorICByZXQ9JD8KKyAgcHJpbnRmICVzICIkZ290IiA+PiBjb25maWd1cmUubG9nCisgIGlmIHRlc3QgJHJldCAtbmUgMDsgdGhlbgorICAgIHJldHVybiAkcmV0CisgIGZpCisgIHRlc3QgIiRnb3QiID0gIiIKK30KKworY2F0ID4gJHRlc3QuYyA8PCBFT0YKK2ludCBmb28oKSB7IHJldHVybiAwOyB9CitFT0YKK2VjaG8gIkNoZWNraW5nIGZvciBvYnNlc3NpdmUtY29tcHVsc2l2ZSBjb21waWxlciBvcHRpb25zLi4uIiA+PiBjb25maWd1cmUubG9nCitpZiB0cnkgJENDIC1jICRDRkxBR1MgJHRlc3QuYzsgdGhlbgorICA6CitlbHNlCisgIGVjaG8gIkNvbXBpbGVyIGVycm9yIHJlcG9ydGluZyBpcyB0b28gaGFyc2ggZm9yICQwIChwZXJoYXBzIHJlbW92ZSAtV2Vycm9yKS4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgbGVhdmUgMQorZmkKKworZWNobyA+PiBjb25maWd1cmUubG9nCisKKyMgc2VlIGlmIHNoYXJlZCBsaWJyYXJ5IGJ1aWxkIHN1cHBvcnRlZAorY2F0ID4gJHRlc3QuYyA8PEVPRgorZXh0ZXJuIGludCBnZXRjaGFyKCk7CitpbnQgaGVsbG8oKSB7cmV0dXJuIGdldGNoYXIoKTt9CitFT0YKIGlmIHRlc3QgJHNoYXJlZCAtZXEgMTsgdGhlbgotICBlY2hvIENoZWNraW5nIGZvciBzaGFyZWQgbGlicmFyeSBzdXBwb3J0Li4uCisgIGVjaG8gQ2hlY2tpbmcgZm9yIHNoYXJlZCBsaWJyYXJ5IHN1cHBvcnQuLi4gfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogICAjIHdlIG11c3QgdGVzdCBpbiB0d28gc3RlcHMgKGNjIHRoZW4gbGQpLCByZXF1aXJlZCBhdCBsZWFzdCBvbiBTdW5PUyA0LngKLSAgaWYgdGVzdCAiYCgkQ0MgLXcgLWMgJFNGTEFHUyAkdGVzdC5jKSAyPiYxYCIgPSAiIiAmJgotICAgICB0ZXN0ICJgKCRMRFNIQVJFRCAkU0ZMQUdTIC1vICR0ZXN0JHNoYXJlZF9leHQgJHRlc3QubykgMj4mMWAiID0gIiI7IHRoZW4KLSAgICBlY2hvIEJ1aWxkaW5nIHNoYXJlZCBsaWJyYXJ5ICRTSEFSRURMSUJWIHdpdGggJENDLgorICBpZiB0cnkgJENDIC13IC1jICRTRkxBR1MgJHRlc3QuYyAmJgorICAgICB0cnkgJExEU0hBUkVEICRTRkxBR1MgLW8gJHRlc3Qkc2hhcmVkX2V4dCAkdGVzdC5vOyB0aGVuCisgICAgZWNobyBCdWlsZGluZyBzaGFyZWQgbGlicmFyeSAkU0hBUkVETElCViB3aXRoICRDQy4gfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogICBlbGlmIHRlc3QgLXogIiRvbGRfY2MiIC1hIC16ICIkb2xkX2NmbGFncyI7IHRoZW4KLSAgICBlY2hvIE5vIHNoYXJlZCBsaWJyYXJ5IHN1cHBvcnQuCisgICAgZWNobyBObyBzaGFyZWQgbGlicmFyeSBzdXBwb3J0LiB8IHRlZSAtYSBjb25maWd1cmUubG9nCiAgICAgc2hhcmVkPTA7CiAgIGVsc2UKLSAgICBlY2hvIFRlc3RlZCAkQ0MgLXcgLWMgJFNGTEFHUyAkdGVzdC5jCi0gICAgJENDIC13IC1jICRTRkxBR1MgJHRlc3QuYwotICAgIGVjaG8gVGVzdGVkICRMRFNIQVJFRCAkU0ZMQUdTIC1vICR0ZXN0JHNoYXJlZF9leHQgJHRlc3QubwotICAgICRMRFNIQVJFRCAkU0ZMQUdTIC1vICR0ZXN0JHNoYXJlZF9leHQgJHRlc3QubwotICAgIGVjaG8gJ05vIHNoYXJlZCBsaWJyYXJ5IHN1cHBvcnQ7IHRyeSB3aXRob3V0IGRlZmluaW5nIENDIGFuZCBDRkxBR1MnCisgICAgZWNobyAnTm8gc2hhcmVkIGxpYnJhcnkgc3VwcG9ydDsgdHJ5IHdpdGhvdXQgZGVmaW5pbmcgQ0MgYW5kIENGTEFHUycgfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogICAgIHNoYXJlZD0wOwogICBmaQogZmkKQEAgLTI1NCwyNSArNDAwLDQzIEBACiAgIFNIQVJFRExJQj0iIgogICBTSEFSRURMSUJWPSIiCiAgIFNIQVJFRExJQk09IiIKLSAgZWNobyBCdWlsZGluZyBzdGF0aWMgbGlicmFyeSAkU1RBVElDTElCIHZlcnNpb24gJFZFUiB3aXRoICRDQy4KKyAgZWNobyBCdWlsZGluZyBzdGF0aWMgbGlicmFyeSAkU1RBVElDTElCIHZlcnNpb24gJFZFUiB3aXRoICRDQy4gfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogZWxzZQogICBBTEw9InN0YXRpYyBzaGFyZWQiCiAgIFRFU1Q9ImFsbCB0ZXN0c3RhdGljIHRlc3RzaGFyZWQiCiBmaQogCisjIGNoZWNrIGZvciB1bmRlcnNjb3JlcyBpbiBleHRlcm5hbCBuYW1lcyBmb3IgdXNlIGJ5IGFzc2VtYmxlciBjb2RlCitDUFA9JHtDUFAtIiRDQyAtRSJ9CitjYXNlICRDRkxBR1MgaW4KKyAgKkFTTVYqKQorICAgIGVjaG8gPj4gY29uZmlndXJlLmxvZworICAgIHNob3cgIiROTSAkdGVzdC5vIHwgZ3JlcCBfaGVsbG8iCisgICAgaWYgdGVzdCAiYCROTSAkdGVzdC5vIHwgZ3JlcCBfaGVsbG8gfCB0ZWUgLWEgY29uZmlndXJlLmxvZ2AiID0gIiI7IHRoZW4KKyAgICAgIENQUD0iJENQUCAtRE5PX1VOREVSTElORSIKKyAgICAgIGVjaG8gQ2hlY2tpbmcgZm9yIHVuZGVybGluZSBpbiBleHRlcm5hbCBuYW1lcy4uLiBOby4gfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICAgIGVsc2UKKyAgICAgIGVjaG8gQ2hlY2tpbmcgZm9yIHVuZGVybGluZSBpbiBleHRlcm5hbCBuYW1lcy4uLiBZZXMuIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgICBmaSA7OworZXNhYworCitlY2hvID4+IGNvbmZpZ3VyZS5sb2cKKworIyBjaGVjayBmb3IgbGFyZ2UgZmlsZSBzdXBwb3J0LCBhbmQgaWYgbm9uZSwgY2hlY2sgZm9yIGZzZWVrbygpCiBjYXQgPiAkdGVzdC5jIDw8RU9GCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiBvZmY2NF90IGR1bW15ID0gMDsKIEVPRgotaWYgdGVzdCAiYCgkQ0MgLWMgJENGTEFHUyAtRF9MQVJHRUZJTEU2NF9TT1VSQ0U9MSAkdGVzdC5jKSAyPiYxYCIgPSAiIjsgdGhlbgoraWYgdHJ5ICRDQyAtYyAkQ0ZMQUdTIC1EX0xBUkdFRklMRTY0X1NPVVJDRT0xICR0ZXN0LmM7IHRoZW4KICAgQ0ZMQUdTPSIke0NGTEFHU30gLURfTEFSR0VGSUxFNjRfU09VUkNFPTEiCiAgIFNGTEFHUz0iJHtTRkxBR1N9IC1EX0xBUkdFRklMRTY0X1NPVVJDRT0xIgogICBBTEw9IiR7QUxMfSBhbGw2NCIKICAgVEVTVD0iJHtURVNUfSB0ZXN0NjQiCi0gIGVjaG8gIkNoZWNraW5nIGZvciBvZmY2NF90Li4uIFllcy4iCi0gIGVjaG8gIkNoZWNraW5nIGZvciBmc2Vla28uLi4gWWVzLiIKKyAgZWNobyAiQ2hlY2tpbmcgZm9yIG9mZjY0X3QuLi4gWWVzLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICBlY2hvICJDaGVja2luZyBmb3IgZnNlZWtvLi4uIFllcy4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKIGVsc2UKLSAgZWNobyAiQ2hlY2tpbmcgZm9yIG9mZjY0X3QuLi4gTm8uIgorICBlY2hvICJDaGVja2luZyBmb3Igb2ZmNjRfdC4uLiBOby4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgZWNobyA+PiBjb25maWd1cmUubG9nCiAgIGNhdCA+ICR0ZXN0LmMgPDxFT0YKICNpbmNsdWRlIDxzdGRpby5oPgogaW50IG1haW4odm9pZCkgewpAQCAtMjgwLDI3MiArNDQ0LDMzNSBAQAogICByZXR1cm4gMDsKIH0KIEVPRgotICBpZiB0ZXN0ICJgKCRDQyAkQ0ZMQUdTIC1vICR0ZXN0ICR0ZXN0LmMpIDI+JjFgIiA9ICIiOyB0aGVuCi0gICAgZWNobyAiQ2hlY2tpbmcgZm9yIGZzZWVrby4uLiBZZXMuIgorICBpZiB0cnkgJENDICRDRkxBR1MgLW8gJHRlc3QgJHRlc3QuYzsgdGhlbgorICAgIGVjaG8gIkNoZWNraW5nIGZvciBmc2Vla28uLi4gWWVzLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogICBlbHNlCiAgICAgQ0ZMQUdTPSIke0NGTEFHU30gLUROT19GU0VFS08iCiAgICAgU0ZMQUdTPSIke1NGTEFHU30gLUROT19GU0VFS08iCi0gICAgZWNobyAiQ2hlY2tpbmcgZm9yIGZzZWVrby4uLiBOby4iCisgICAgZWNobyAiQ2hlY2tpbmcgZm9yIGZzZWVrby4uLiBOby4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKICAgZmkKIGZpCiAKK2VjaG8gPj4gY29uZmlndXJlLmxvZworCisjIGNoZWNrIGZvciBzdHJlcnJvcigpIGZvciB1c2UgYnkgZ3oqIGZ1bmN0aW9ucworY2F0ID4gJHRlc3QuYyA8PEVPRgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CitpbnQgbWFpbigpIHsgcmV0dXJuIHN0cmxlbihzdHJlcnJvcihlcnJubykpOyB9CitFT0YKK2lmIHRyeSAkQ0MgJENGTEFHUyAtbyAkdGVzdCAkdGVzdC5jOyB0aGVuCisgIGVjaG8gIkNoZWNraW5nIGZvciBzdHJlcnJvci4uLiBZZXMuIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCitlbHNlCisgIENGTEFHUz0iJHtDRkxBR1N9IC1ETk9fU1RSRVJST1IiCisgIFNGTEFHUz0iJHtTRkxBR1N9IC1ETk9fU1RSRVJST1IiCisgIGVjaG8gIkNoZWNraW5nIGZvciBzdHJlcnJvci4uLiBOby4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKK2ZpCisKKyMgY29weSBjbGVhbiB6Y29uZi5oIGZvciBzdWJzZXF1ZW50IGVkaXRzCiBjcCAtcCB6Y29uZi5oLmluIHpjb25mLmgKIAorZWNobyA+PiBjb25maWd1cmUubG9nCisKKyMgY2hlY2sgZm9yIHVuaXN0ZC5oIGFuZCBzYXZlIHJlc3VsdCBpbiB6Y29uZi5oCiBjYXQgPiAkdGVzdC5jIDw8RU9GCiAjaW5jbHVkZSA8dW5pc3RkLmg+CiBpbnQgbWFpbigpIHsgcmV0dXJuIDA7IH0KIEVPRgotaWYgdGVzdCAiYCgkQ0MgLWMgJENGTEFHUyAkdGVzdC5jKSAyPiYxYCIgPSAiIjsgdGhlbgoraWYgdHJ5ICRDQyAtYyAkQ0ZMQUdTICR0ZXN0LmM7IHRoZW4KICAgc2VkIDwgemNvbmYuaCAiL14jaWZkZWYgSEFWRV9VTklTVERfSC4qIG1heSBiZS9zL2RlZiBIQVZFX1VOSVNURF9IXCguKlwpIG1heSBiZS8gMVwxIHdhcy8iID4gemNvbmYudGVtcC5oCiAgIG12IHpjb25mLnRlbXAuaCB6Y29uZi5oCi0gIGVjaG8gIkNoZWNraW5nIGZvciB1bmlzdGQuaC4uLiBZZXMuIgorICBlY2hvICJDaGVja2luZyBmb3IgdW5pc3RkLmguLi4gWWVzLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogZWxzZQotICBlY2hvICJDaGVja2luZyBmb3IgdW5pc3RkLmguLi4gTm8uIgorICBlY2hvICJDaGVja2luZyBmb3IgdW5pc3RkLmguLi4gTm8uIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCiBmaQogCitlY2hvID4+IGNvbmZpZ3VyZS5sb2cKKworIyBjaGVjayBmb3Igc3RkYXJnLmggYW5kIHNhdmUgcmVzdWx0IGluIHpjb25mLmgKK2NhdCA+ICR0ZXN0LmMgPDxFT0YKKyNpbmNsdWRlIDxzdGRhcmcuaD4KK2ludCBtYWluKCkgeyByZXR1cm4gMDsgfQorRU9GCitpZiB0cnkgJENDIC1jICRDRkxBR1MgJHRlc3QuYzsgdGhlbgorICBzZWQgPCB6Y29uZi5oICIvXiNpZmRlZiBIQVZFX1NUREFSR19ILiogbWF5IGJlL3MvZGVmIEhBVkVfU1REQVJHX0hcKC4qXCkgbWF5IGJlLyAxXDEgd2FzLyIgPiB6Y29uZi50ZW1wLmgKKyAgbXYgemNvbmYudGVtcC5oIHpjb25mLmgKKyAgZWNobyAiQ2hlY2tpbmcgZm9yIHN0ZGFyZy5oLi4uIFllcy4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKK2Vsc2UKKyAgZWNobyAiQ2hlY2tpbmcgZm9yIHN0ZGFyZy5oLi4uIE5vLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworZmkKKworIyBpZiB0aGUgel8gcHJlZml4IHdhcyByZXF1ZXN0ZWQsIHNhdmUgdGhhdCBpbiB6Y29uZi5oCiBpZiB0ZXN0ICR6cHJlZml4IC1lcSAxOyB0aGVuCiAgIHNlZCA8IHpjb25mLmggIi8jaWZkZWYgWl9QUkVGSVguKiBtYXkgYmUvcy9kZWYgWl9QUkVGSVhcKC4qXCkgbWF5IGJlLyAxXDEgd2FzLyIgPiB6Y29uZi50ZW1wLmgKICAgbXYgemNvbmYudGVtcC5oIHpjb25mLmgKLSAgZWNobyAiVXNpbmcgel8gcHJlZml4IG9uIGFsbCBzeW1ib2xzLiIKKyAgZWNobyA+PiBjb25maWd1cmUubG9nCisgIGVjaG8gIlVzaW5nIHpfIHByZWZpeCBvbiBhbGwgc3ltYm9scy4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKIGZpCiAKKyMgaWYgLS1zb2xvIGNvbXBpbGF0aW9uIHdhcyByZXF1ZXN0ZWQsIHNhdmUgdGhhdCBpbiB6Y29uZi5oIGFuZCByZW1vdmUgZ3ogc3R1ZmYgZnJvbSBvYmplY3QgbGlzdHMKK2lmIHRlc3QgJHNvbG8gLWVxIDE7IHRoZW4KKyAgc2VkICcvI2RlZmluZSBaQ09ORl9IL2FcCisjZGVmaW5lIFpfU09MTworCisnIDwgemNvbmYuaCA+IHpjb25mLnRlbXAuaAorICBtdiB6Y29uZi50ZW1wLmggemNvbmYuaAorT0JKQz0nJChPQkpaKScKK1BJQ19PQkpDPSckKFBJQ19PQkpaKScKK2ZpCisKKyMgaWYgY29kZSBjb3ZlcmFnZSB0ZXN0aW5nIHdhcyByZXF1ZXN0ZWQsIHVzZSBvbGRlciBnY2MgaWYgZGVmaW5lZCwgZS5nLiAiZ2NjLTQuMiIgb24gTWFjIE9TIFgKK2lmIHRlc3QgJGNvdmVyIC1lcSAxOyB0aGVuCisgIENGTEFHUz0iJHtDRkxBR1N9IC1mcHJvZmlsZS1hcmNzIC1mdGVzdC1jb3ZlcmFnZSIKKyAgaWYgdGVzdCAtbiAiJEdDQ19DTEFTU0lDIjsgdGhlbgorICAgIENDPSRHQ0NfQ0xBU1NJQworICBmaQorZmkKKworZWNobyA+PiBjb25maWd1cmUubG9nCisKKyMgY29uZHVjdCBhIHNlcmllcyBvZiB0ZXN0cyB0byByZXNvbHZlIGVpZ2h0IHBvc3NpYmxlIGNhc2VzIG9mIHVzaW5nICJ2cyIgb3IgInMiIHByaW50ZiBmdW5jdGlvbnMKKyMgKHVzaW5nIHN0ZGFyZyBvciBub3QpLCB3aXRoIG9yIHdpdGhvdXQgIm4iIChwcm92aW5nIHNpemUgb2YgYnVmZmVyKSwgYW5kIHdpdGggb3Igd2l0aG91dCBhCisjIHJldHVybiB2YWx1ZS4gIFRoZSBtb3N0IHNlY3VyZSByZXN1bHQgaXMgdnNucHJpbnRmKCkgd2l0aCBhIHJldHVybiB2YWx1ZS4gIHNucHJpbnRmKCkgd2l0aCBhCisjIHJldHVybiB2YWx1ZSBpcyBzZWN1cmUgYXMgd2VsbCwgYnV0IHRoZW4gZ3pwcmludGYoKSB3aWxsIGJlIGxpbWl0ZWQgdG8gMjAgYXJndW1lbnRzLgogY2F0ID4gJHRlc3QuYyA8PEVPRgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RkYXJnLmg+CiAjaW5jbHVkZSAiemNvbmYuaCIKLQogaW50IG1haW4oKQogewogI2lmbmRlZiBTVERDCiAgIGNob2tlIG1lCiAjZW5kaWYKLQogICByZXR1cm4gMDsKIH0KIEVPRgoraWYgdHJ5ICRDQyAtYyAkQ0ZMQUdTICR0ZXN0LmM7IHRoZW4KKyAgZWNobyAiQ2hlY2tpbmcgd2hldGhlciB0byB1c2UgdnNbbl1wcmludGYoKSBvciBzW25dcHJpbnRmKCkuLi4gdXNpbmcgdnNbbl1wcmludGYoKS4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKIAotaWYgdGVzdCAiYCgkQ0MgLWMgJENGTEFHUyAkdGVzdC5jKSAyPiYxYCIgPSAiIjsgdGhlbgotICBlY2hvICJDaGVja2luZyB3aGV0aGVyIHRvIHVzZSB2c1tuXXByaW50ZigpIG9yIHNbbl1wcmludGYoKS4uLiB1c2luZyB2c1tuXXByaW50ZigpLiIKLQorICBlY2hvID4+IGNvbmZpZ3VyZS5sb2cKICAgY2F0ID4gJHRlc3QuYyA8PEVPRgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RkYXJnLmg+Ci0KIGludCBteXRlc3QoY29uc3QgY2hhciAqZm10LCAuLi4pCiB7CiAgIGNoYXIgYnVmWzIwXTsKICAgdmFfbGlzdCBhcDsKLQogICB2YV9zdGFydChhcCwgZm10KTsKICAgdnNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZtdCwgYXApOwogICB2YV9lbmQoYXApOwogICByZXR1cm4gMDsKIH0KLQogaW50IG1haW4oKQogewogICByZXR1cm4gKG15dGVzdCgiSGVsbG8lZFxuIiwgMSkpOwogfQogRU9GCisgIGlmIHRyeSAkQ0MgJENGTEFHUyAtbyAkdGVzdCAkdGVzdC5jOyB0aGVuCisgICAgZWNobyAiQ2hlY2tpbmcgZm9yIHZzbnByaW50ZigpIGluIHN0ZGlvLmguLi4gWWVzLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogCi0gIGlmIHRlc3QgImAoJENDICRDRkxBR1MgLW8gJHRlc3QgJHRlc3QuYykgMj4mMWAiID0gIiI7IHRoZW4KLSAgICBlY2hvICJDaGVja2luZyBmb3IgdnNucHJpbnRmKCkgaW4gc3RkaW8uaC4uLiBZZXMuIgotCisgICAgZWNobyA+PiBjb25maWd1cmUubG9nCiAgICAgY2F0ID4kdGVzdC5jIDw8RU9GCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRhcmcuaD4KLQogaW50IG15dGVzdChjb25zdCBjaGFyICpmbXQsIC4uLikKIHsKICAgaW50IG47CiAgIGNoYXIgYnVmWzIwXTsKICAgdmFfbGlzdCBhcDsKLQogICB2YV9zdGFydChhcCwgZm10KTsKICAgbiA9IHZzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBmbXQsIGFwKTsKICAgdmFfZW5kKGFwKTsKICAgcmV0dXJuIG47CiB9Ci0KIGludCBtYWluKCkKIHsKICAgcmV0dXJuIChteXRlc3QoIkhlbGxvJWRcbiIsIDEpKTsKIH0KIEVPRgogCi0gICAgaWYgdGVzdCAiYCgkQ0MgLWMgJENGTEFHUyAkdGVzdC5jKSAyPiYxYCIgPSAiIjsgdGhlbgotICAgICAgZWNobyAiQ2hlY2tpbmcgZm9yIHJldHVybiB2YWx1ZSBvZiB2c25wcmludGYoKS4uLiBZZXMuIgorICAgIGlmIHRyeSAkQ0MgLWMgJENGTEFHUyAkdGVzdC5jOyB0aGVuCisgICAgICBlY2hvICJDaGVja2luZyBmb3IgcmV0dXJuIHZhbHVlIG9mIHZzbnByaW50ZigpLi4uIFllcy4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKICAgICBlbHNlCiAgICAgICBDRkxBR1M9IiRDRkxBR1MgLURIQVNfdnNucHJpbnRmX3ZvaWQiCiAgICAgICBTRkxBR1M9IiRTRkxBR1MgLURIQVNfdnNucHJpbnRmX3ZvaWQiCi0gICAgICBlY2hvICJDaGVja2luZyBmb3IgcmV0dXJuIHZhbHVlIG9mIHZzbnByaW50ZigpLi4uIE5vLiIKLSAgICAgIGVjaG8gIiAgV0FSTklORzogYXBwYXJlbnRseSB2c25wcmludGYoKSBkb2VzIG5vdCByZXR1cm4gYSB2YWx1ZS4gemxpYiIKLSAgICAgIGVjaG8gIiAgY2FuIGJ1aWxkIGJ1dCB3aWxsIGJlIG9wZW4gdG8gcG9zc2libGUgc3RyaW5nLWZvcm1hdCBzZWN1cml0eSIKLSAgICAgIGVjaG8gIiAgdnVsbmVyYWJpbGl0aWVzLiIKKyAgICAgIGVjaG8gIkNoZWNraW5nIGZvciByZXR1cm4gdmFsdWUgb2YgdnNucHJpbnRmKCkuLi4gTm8uIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAgICBlY2hvICIgIFdBUk5JTkc6IGFwcGFyZW50bHkgdnNucHJpbnRmKCkgZG9lcyBub3QgcmV0dXJuIGEgdmFsdWUuIHpsaWIiIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgICAgIGVjaG8gIiAgY2FuIGJ1aWxkIGJ1dCB3aWxsIGJlIG9wZW4gdG8gcG9zc2libGUgc3RyaW5nLWZvcm1hdCBzZWN1cml0eSIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICAgICAgZWNobyAiICB2dWxuZXJhYmlsaXRpZXMuIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCiAgICAgZmkKICAgZWxzZQogICAgIENGTEFHUz0iJENGTEFHUyAtRE5PX3ZzbnByaW50ZiIKICAgICBTRkxBR1M9IiRTRkxBR1MgLUROT192c25wcmludGYiCi0gICAgZWNobyAiQ2hlY2tpbmcgZm9yIHZzbnByaW50ZigpIGluIHN0ZGlvLmguLi4gTm8uIgotICAgIGVjaG8gIiAgV0FSTklORzogdnNucHJpbnRmKCkgbm90IGZvdW5kLCBmYWxsaW5nIGJhY2sgdG8gdnNwcmludGYoKS4gemxpYiIKLSAgICBlY2hvICIgIGNhbiBidWlsZCBidXQgd2lsbCBiZSBvcGVuIHRvIHBvc3NpYmxlIGJ1ZmZlci1vdmVyZmxvdyBzZWN1cml0eSIKLSAgICBlY2hvICIgIHZ1bG5lcmFiaWxpdGllcy4iCisgICAgZWNobyAiQ2hlY2tpbmcgZm9yIHZzbnByaW50ZigpIGluIHN0ZGlvLmguLi4gTm8uIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAgZWNobyAiICBXQVJOSU5HOiB2c25wcmludGYoKSBub3QgZm91bmQsIGZhbGxpbmcgYmFjayB0byB2c3ByaW50ZigpLiB6bGliIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAgZWNobyAiICBjYW4gYnVpbGQgYnV0IHdpbGwgYmUgb3BlbiB0byBwb3NzaWJsZSBidWZmZXItb3ZlcmZsb3cgc2VjdXJpdHkiIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgICBlY2hvICIgIHZ1bG5lcmFiaWxpdGllcy4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKIAorICAgIGVjaG8gPj4gY29uZmlndXJlLmxvZwogICAgIGNhdCA+JHRlc3QuYyA8PEVPRgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RkYXJnLmg+Ci0KIGludCBteXRlc3QoY29uc3QgY2hhciAqZm10LCAuLi4pCiB7CiAgIGludCBuOwogICBjaGFyIGJ1ZlsyMF07CiAgIHZhX2xpc3QgYXA7Ci0KICAgdmFfc3RhcnQoYXAsIGZtdCk7CiAgIG4gPSB2c3ByaW50ZihidWYsIGZtdCwgYXApOwogICB2YV9lbmQoYXApOwogICByZXR1cm4gbjsKIH0KLQogaW50IG1haW4oKQogewogICByZXR1cm4gKG15dGVzdCgiSGVsbG8lZFxuIiwgMSkpOwogfQogRU9GCiAKLSAgICBpZiB0ZXN0ICJgKCRDQyAtYyAkQ0ZMQUdTICR0ZXN0LmMpIDI+JjFgIiA9ICIiOyB0aGVuCi0gICAgICBlY2hvICJDaGVja2luZyBmb3IgcmV0dXJuIHZhbHVlIG9mIHZzcHJpbnRmKCkuLi4gWWVzLiIKKyAgICBpZiB0cnkgJENDIC1jICRDRkxBR1MgJHRlc3QuYzsgdGhlbgorICAgICAgZWNobyAiQ2hlY2tpbmcgZm9yIHJldHVybiB2YWx1ZSBvZiB2c3ByaW50ZigpLi4uIFllcy4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKICAgICBlbHNlCiAgICAgICBDRkxBR1M9IiRDRkxBR1MgLURIQVNfdnNwcmludGZfdm9pZCIKICAgICAgIFNGTEFHUz0iJFNGTEFHUyAtREhBU192c3ByaW50Zl92b2lkIgotICAgICAgZWNobyAiQ2hlY2tpbmcgZm9yIHJldHVybiB2YWx1ZSBvZiB2c3ByaW50ZigpLi4uIE5vLiIKLSAgICAgIGVjaG8gIiAgV0FSTklORzogYXBwYXJlbnRseSB2c3ByaW50ZigpIGRvZXMgbm90IHJldHVybiBhIHZhbHVlLiB6bGliIgotICAgICAgZWNobyAiICBjYW4gYnVpbGQgYnV0IHdpbGwgYmUgb3BlbiB0byBwb3NzaWJsZSBzdHJpbmctZm9ybWF0IHNlY3VyaXR5IgotICAgICAgZWNobyAiICB2dWxuZXJhYmlsaXRpZXMuIgorICAgICAgZWNobyAiQ2hlY2tpbmcgZm9yIHJldHVybiB2YWx1ZSBvZiB2c3ByaW50ZigpLi4uIE5vLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICAgICAgZWNobyAiICBXQVJOSU5HOiBhcHBhcmVudGx5IHZzcHJpbnRmKCkgZG9lcyBub3QgcmV0dXJuIGEgdmFsdWUuIHpsaWIiIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgICAgIGVjaG8gIiAgY2FuIGJ1aWxkIGJ1dCB3aWxsIGJlIG9wZW4gdG8gcG9zc2libGUgc3RyaW5nLWZvcm1hdCBzZWN1cml0eSIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICAgICAgZWNobyAiICB2dWxuZXJhYmlsaXRpZXMuIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCiAgICAgZmkKICAgZmkKIGVsc2UKLSAgZWNobyAiQ2hlY2tpbmcgd2hldGhlciB0byB1c2UgdnNbbl1wcmludGYoKSBvciBzW25dcHJpbnRmKCkuLi4gdXNpbmcgc1tuXXByaW50ZigpLiIKKyAgZWNobyAiQ2hlY2tpbmcgd2hldGhlciB0byB1c2UgdnNbbl1wcmludGYoKSBvciBzW25dcHJpbnRmKCkuLi4gdXNpbmcgc1tuXXByaW50ZigpLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogCisgIGVjaG8gPj4gY29uZmlndXJlLmxvZwogICBjYXQgPiR0ZXN0LmMgPDxFT0YKICNpbmNsdWRlIDxzdGRpby5oPgotCiBpbnQgbXl0ZXN0KCkKIHsKICAgY2hhciBidWZbMjBdOwotCiAgIHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlcyIsICJmb28iKTsKICAgcmV0dXJuIDA7CiB9Ci0KIGludCBtYWluKCkKIHsKICAgcmV0dXJuIChteXRlc3QoKSk7CiB9CiBFT0YKIAotICBpZiB0ZXN0ICJgKCRDQyAkQ0ZMQUdTIC1vICR0ZXN0ICR0ZXN0LmMpIDI+JjFgIiA9ICIiOyB0aGVuCi0gICAgZWNobyAiQ2hlY2tpbmcgZm9yIHNucHJpbnRmKCkgaW4gc3RkaW8uaC4uLiBZZXMuIgorICBpZiB0cnkgJENDICRDRkxBR1MgLW8gJHRlc3QgJHRlc3QuYzsgdGhlbgorICAgIGVjaG8gIkNoZWNraW5nIGZvciBzbnByaW50ZigpIGluIHN0ZGlvLmguLi4gWWVzLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogCisgICAgZWNobyA+PiBjb25maWd1cmUubG9nCiAgICAgY2F0ID4kdGVzdC5jIDw8RU9GCiAjaW5jbHVkZSA8c3RkaW8uaD4KLQogaW50IG15dGVzdCgpCiB7CiAgIGNoYXIgYnVmWzIwXTsKLQogICByZXR1cm4gc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVzIiwgImZvbyIpOwogfQotCiBpbnQgbWFpbigpCiB7CiAgIHJldHVybiAobXl0ZXN0KCkpOwogfQogRU9GCiAKLSAgICBpZiB0ZXN0ICJgKCRDQyAtYyAkQ0ZMQUdTICR0ZXN0LmMpIDI+JjFgIiA9ICIiOyB0aGVuCi0gICAgICBlY2hvICJDaGVja2luZyBmb3IgcmV0dXJuIHZhbHVlIG9mIHNucHJpbnRmKCkuLi4gWWVzLiIKKyAgICBpZiB0cnkgJENDIC1jICRDRkxBR1MgJHRlc3QuYzsgdGhlbgorICAgICAgZWNobyAiQ2hlY2tpbmcgZm9yIHJldHVybiB2YWx1ZSBvZiBzbnByaW50ZigpLi4uIFllcy4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKICAgICBlbHNlCiAgICAgICBDRkxBR1M9IiRDRkxBR1MgLURIQVNfc25wcmludGZfdm9pZCIKICAgICAgIFNGTEFHUz0iJFNGTEFHUyAtREhBU19zbnByaW50Zl92b2lkIgotICAgICAgZWNobyAiQ2hlY2tpbmcgZm9yIHJldHVybiB2YWx1ZSBvZiBzbnByaW50ZigpLi4uIE5vLiIKLSAgICAgIGVjaG8gIiAgV0FSTklORzogYXBwYXJlbnRseSBzbnByaW50ZigpIGRvZXMgbm90IHJldHVybiBhIHZhbHVlLiB6bGliIgotICAgICAgZWNobyAiICBjYW4gYnVpbGQgYnV0IHdpbGwgYmUgb3BlbiB0byBwb3NzaWJsZSBzdHJpbmctZm9ybWF0IHNlY3VyaXR5IgotICAgICAgZWNobyAiICB2dWxuZXJhYmlsaXRpZXMuIgorICAgICAgZWNobyAiQ2hlY2tpbmcgZm9yIHJldHVybiB2YWx1ZSBvZiBzbnByaW50ZigpLi4uIE5vLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICAgICAgZWNobyAiICBXQVJOSU5HOiBhcHBhcmVudGx5IHNucHJpbnRmKCkgZG9lcyBub3QgcmV0dXJuIGEgdmFsdWUuIHpsaWIiIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgICAgIGVjaG8gIiAgY2FuIGJ1aWxkIGJ1dCB3aWxsIGJlIG9wZW4gdG8gcG9zc2libGUgc3RyaW5nLWZvcm1hdCBzZWN1cml0eSIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICAgICAgZWNobyAiICB2dWxuZXJhYmlsaXRpZXMuIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCiAgICAgZmkKICAgZWxzZQogICAgIENGTEFHUz0iJENGTEFHUyAtRE5PX3NucHJpbnRmIgogICAgIFNGTEFHUz0iJFNGTEFHUyAtRE5PX3NucHJpbnRmIgotICAgIGVjaG8gIkNoZWNraW5nIGZvciBzbnByaW50ZigpIGluIHN0ZGlvLmguLi4gTm8uIgotICAgIGVjaG8gIiAgV0FSTklORzogc25wcmludGYoKSBub3QgZm91bmQsIGZhbGxpbmcgYmFjayB0byBzcHJpbnRmKCkuIHpsaWIiCi0gICAgZWNobyAiICBjYW4gYnVpbGQgYnV0IHdpbGwgYmUgb3BlbiB0byBwb3NzaWJsZSBidWZmZXItb3ZlcmZsb3cgc2VjdXJpdHkiCi0gICAgZWNobyAiICB2dWxuZXJhYmlsaXRpZXMuIgorICAgIGVjaG8gIkNoZWNraW5nIGZvciBzbnByaW50ZigpIGluIHN0ZGlvLmguLi4gTm8uIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAgZWNobyAiICBXQVJOSU5HOiBzbnByaW50ZigpIG5vdCBmb3VuZCwgZmFsbGluZyBiYWNrIHRvIHNwcmludGYoKS4gemxpYiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICAgIGVjaG8gIiAgY2FuIGJ1aWxkIGJ1dCB3aWxsIGJlIG9wZW4gdG8gcG9zc2libGUgYnVmZmVyLW92ZXJmbG93IHNlY3VyaXR5IiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAgZWNobyAiICB2dWxuZXJhYmlsaXRpZXMuIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCiAKKyAgICBlY2hvID4+IGNvbmZpZ3VyZS5sb2cKICAgICBjYXQgPiR0ZXN0LmMgPDxFT0YKICNpbmNsdWRlIDxzdGRpby5oPgotCiBpbnQgbXl0ZXN0KCkKIHsKICAgY2hhciBidWZbMjBdOwotCiAgIHJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzIiwgImZvbyIpOwogfQotCiBpbnQgbWFpbigpCiB7CiAgIHJldHVybiAobXl0ZXN0KCkpOwogfQogRU9GCiAKLSAgICBpZiB0ZXN0ICJgKCRDQyAtYyAkQ0ZMQUdTICR0ZXN0LmMpIDI+JjFgIiA9ICIiOyB0aGVuCi0gICAgICBlY2hvICJDaGVja2luZyBmb3IgcmV0dXJuIHZhbHVlIG9mIHNwcmludGYoKS4uLiBZZXMuIgorICAgIGlmIHRyeSAkQ0MgLWMgJENGTEFHUyAkdGVzdC5jOyB0aGVuCisgICAgICBlY2hvICJDaGVja2luZyBmb3IgcmV0dXJuIHZhbHVlIG9mIHNwcmludGYoKS4uLiBZZXMuIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCiAgICAgZWxzZQogICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1ESEFTX3NwcmludGZfdm9pZCIKICAgICAgIFNGTEFHUz0iJFNGTEFHUyAtREhBU19zcHJpbnRmX3ZvaWQiCi0gICAgICBlY2hvICJDaGVja2luZyBmb3IgcmV0dXJuIHZhbHVlIG9mIHNwcmludGYoKS4uLiBOby4iCi0gICAgICBlY2hvICIgIFdBUk5JTkc6IGFwcGFyZW50bHkgc3ByaW50ZigpIGRvZXMgbm90IHJldHVybiBhIHZhbHVlLiB6bGliIgotICAgICAgZWNobyAiICBjYW4gYnVpbGQgYnV0IHdpbGwgYmUgb3BlbiB0byBwb3NzaWJsZSBzdHJpbmctZm9ybWF0IHNlY3VyaXR5IgotICAgICAgZWNobyAiICB2dWxuZXJhYmlsaXRpZXMuIgorICAgICAgZWNobyAiQ2hlY2tpbmcgZm9yIHJldHVybiB2YWx1ZSBvZiBzcHJpbnRmKCkuLi4gTm8uIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAgICBlY2hvICIgIFdBUk5JTkc6IGFwcGFyZW50bHkgc3ByaW50ZigpIGRvZXMgbm90IHJldHVybiBhIHZhbHVlLiB6bGliIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAgICBlY2hvICIgIGNhbiBidWlsZCBidXQgd2lsbCBiZSBvcGVuIHRvIHBvc3NpYmxlIHN0cmluZy1mb3JtYXQgc2VjdXJpdHkiIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgICAgIGVjaG8gIiAgdnVsbmVyYWJpbGl0aWVzLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogICAgIGZpCiAgIGZpCiBmaQogCisjIHNlZSBpZiB3ZSBjYW4gaGlkZSB6bGliIGludGVybmFsIHN5bWJvbHMgdGhhdCBhcmUgbGlua2VkIGJldHdlZW4gc2VwYXJhdGUgc291cmNlIGZpbGVzCiBpZiB0ZXN0ICIkZ2NjIiAtZXEgMTsgdGhlbgorICBlY2hvID4+IGNvbmZpZ3VyZS5sb2cKICAgY2F0ID4gJHRlc3QuYyA8PEVPRgotI2lmICgoX19HTlVDX18tMCkgKiAxMCArIF9fR05VQ19NSU5PUl9fLTAgPj0gMzMpCi0jICBkZWZpbmUgWkxJQl9JTlRFUk5BTCBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiaGlkZGVuIikpKQotI2Vsc2UKLSMgIGRlZmluZSBaTElCX0lOVEVSTkFMCi0jZW5kaWYKKyNkZWZpbmUgWkxJQl9JTlRFUk5BTCBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiaGlkZGVuIikpKQogaW50IFpMSUJfSU5URVJOQUwgZm9vOwogaW50IG1haW4oKQogewogICByZXR1cm4gMDsKIH0KIEVPRgotICBpZiB0ZXN0ICJgKCRDQyAtYyAkQ0ZMQUdTICR0ZXN0LmMpIDI+JjFgIiA9ICIiOyB0aGVuCi0gICAgZWNobyAiQ2hlY2tpbmcgZm9yIGF0dHJpYnV0ZSh2aXNpYmlsaXR5KSBzdXBwb3J0Li4uIFllcy4iCisgIGlmIHRyeWJvdGggJENDIC1jICRDRkxBR1MgJHRlc3QuYzsgdGhlbgorICAgIENGTEFHUz0iJENGTEFHUyAtREhBVkVfSElEREVOIgorICAgIFNGTEFHUz0iJFNGTEFHUyAtREhBVkVfSElEREVOIgorICAgIGVjaG8gIkNoZWNraW5nIGZvciBhdHRyaWJ1dGUodmlzaWJpbGl0eSkgc3VwcG9ydC4uLiBZZXMuIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCiAgIGVsc2UKLSAgICBDRkxBR1M9IiRDRkxBR1MgLUROT19WSVoiCi0gICAgU0ZMQUdTPSIkU0ZMQUdTIC1ETk9fVklaIgotICAgIGVjaG8gIkNoZWNraW5nIGZvciBhdHRyaWJ1dGUodmlzaWJpbGl0eSkgc3VwcG9ydC4uLiBOby4iCisgICAgZWNobyAiQ2hlY2tpbmcgZm9yIGF0dHJpYnV0ZSh2aXNpYmlsaXR5KSBzdXBwb3J0Li4uIE5vLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogICBmaQogZmkKIAotQ1BQPSR7Q1BQLSIkQ0MgLUUifQotY2FzZSAkQ0ZMQUdTIGluCi0gICpBU01WKikKLSAgICBpZiB0ZXN0ICJgJE5NICR0ZXN0Lm8gfCBncmVwIF9oZWxsb2AiID0gIiI7IHRoZW4KLSAgICAgIENQUD0iJENQUCAtRE5PX1VOREVSTElORSIKLSAgICAgIGVjaG8gQ2hlY2tpbmcgZm9yIHVuZGVybGluZSBpbiBleHRlcm5hbCBuYW1lcy4uLiBOby4KLSAgICBlbHNlCi0gICAgICBlY2hvIENoZWNraW5nIGZvciB1bmRlcmxpbmUgaW4gZXh0ZXJuYWwgbmFtZXMuLi4gWWVzLgotICAgIGZpIDs7Ci1lc2FjCisjIHNob3cgdGhlIHJlc3VsdHMgaW4gdGhlIGxvZworZWNobyA+PiBjb25maWd1cmUubG9nCitlY2hvIEFMTCA9ICRBTEwgPj4gY29uZmlndXJlLmxvZworZWNobyBBUiA9ICRBUiA+PiBjb25maWd1cmUubG9nCitlY2hvIEFSRkxBR1MgPSAkQVJGTEFHUyA+PiBjb25maWd1cmUubG9nCitlY2hvIENDID0gJENDID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gQ0ZMQUdTID0gJENGTEFHUyA+PiBjb25maWd1cmUubG9nCitlY2hvIENQUCA9ICRDUFAgPj4gY29uZmlndXJlLmxvZworZWNobyBFWEUgPSAkRVhFID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gTERDT05GSUcgPSAkTERDT05GSUcgPj4gY29uZmlndXJlLmxvZworZWNobyBMREZMQUdTID0gJExERkxBR1MgPj4gY29uZmlndXJlLmxvZworZWNobyBMRFNIQVJFRCA9ICRMRFNIQVJFRCA+PiBjb25maWd1cmUubG9nCitlY2hvIExEU0hBUkVETElCQyA9ICRMRFNIQVJFRExJQkMgPj4gY29uZmlndXJlLmxvZworZWNobyBPQkpDID0gJE9CSkMgPj4gY29uZmlndXJlLmxvZworZWNobyBQSUNfT0JKQyA9ICRQSUNfT0JKQyA+PiBjb25maWd1cmUubG9nCitlY2hvIFJBTkxJQiA9ICRSQU5MSUIgPj4gY29uZmlndXJlLmxvZworZWNobyBTRkxBR1MgPSAkU0ZMQUdTID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gU0hBUkVETElCID0gJFNIQVJFRExJQiA+PiBjb25maWd1cmUubG9nCitlY2hvIFNIQVJFRExJQk0gPSAkU0hBUkVETElCTSA+PiBjb25maWd1cmUubG9nCitlY2hvIFNIQVJFRExJQlYgPSAkU0hBUkVETElCViA+PiBjb25maWd1cmUubG9nCitlY2hvIFNUQVRJQ0xJQiA9ICRTVEFUSUNMSUIgPj4gY29uZmlndXJlLmxvZworZWNobyBURVNUID0gJFRFU1QgPj4gY29uZmlndXJlLmxvZworZWNobyBWRVIgPSAkVkVSID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gWl9VNCA9ICRaX1U0ID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gZXhlY19wcmVmaXggPSAkZXhlY19wcmVmaXggPj4gY29uZmlndXJlLmxvZworZWNobyBpbmNsdWRlZGlyID0gJGluY2x1ZGVkaXIgPj4gY29uZmlndXJlLmxvZworZWNobyBsaWJkaXIgPSAkbGliZGlyID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gbWFuZGlyID0gJG1hbmRpciA+PiBjb25maWd1cmUubG9nCitlY2hvIHByZWZpeCA9ICRwcmVmaXggPj4gY29uZmlndXJlLmxvZworZWNobyBzaGFyZWRsaWJkaXIgPSAkc2hhcmVkbGliZGlyID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gdW5hbWUgPSAkdW5hbWUgPj4gY29uZmlndXJlLmxvZwogCi1ybSAtZiAkdGVzdC5bY29dICR0ZXN0ICR0ZXN0JHNoYXJlZF9leHQKLQotIyB1ZHBhdGUgTWFrZWZpbGUKKyMgdWRwYXRlIE1ha2VmaWxlIHdpdGggdGhlIGNvbmZpZ3VyZSByZXN1bHRzCiBzZWQgPCBNYWtlZmlsZS5pbiAiCiAvXkNDICo9L3MjPS4qIz0kQ0MjCiAvXkNGTEFHUyAqPS9zIz0uKiM9JENGTEFHUyMKQEAgLTU1Nyw3ICs3ODQsOCBAQAogL15TSEFSRURMSUIgKj0vcyM9LiojPSRTSEFSRURMSUIjCiAvXlNIQVJFRExJQlYgKj0vcyM9LiojPSRTSEFSRURMSUJWIwogL15TSEFSRURMSUJNICo9L3MjPS4qIz0kU0hBUkVETElCTSMKLS9eQVIgKj0vcyM9LiojPSRBUl9SQyMKKy9eQVIgKj0vcyM9LiojPSRBUiMKKy9eQVJGTEFHUyAqPS9zIz0uKiM9JEFSRkxBR1MjCiAvXlJBTkxJQiAqPS9zIz0uKiM9JFJBTkxJQiMKIC9eTERDT05GSUcgKj0vcyM9LiojPSRMRENPTkZJRyMKIC9eTERTSEFSRURMSUJDICo9L3MjPS4qIz0kTERTSEFSRURMSUJDIwpAQCAtNTY4LDEwICs3OTYsMTMgQEAKIC9ec2hhcmVkbGliZGlyICo9L3MjPS4qIz0kc2hhcmVkbGliZGlyIwogL15pbmNsdWRlZGlyICo9L3MjPS4qIz0kaW5jbHVkZWRpciMKIC9ebWFuZGlyICo9L3MjPS4qIz0kbWFuZGlyIworL15PQkpDICo9L3MjPS4qIz0gJE9CSkMjCisvXlBJQ19PQkpDICo9L3MjPS4qIz0gJFBJQ19PQkpDIwogL15hbGw6ICovcyM6LiojOiAkQUxMIwogL150ZXN0OiAqL3MjOi4qIzogJFRFU1QjCiAiID4gTWFrZWZpbGUKIAorIyBjcmVhdGUgemxpYi5wYyB3aXRoIHRoZSBjb25maWd1cmUgcmVzdWx0cwogc2VkIDwgemxpYi5wYy5pbiAiCiAvXkNDICo9L3MjPS4qIz0kQ0MjCiAvXkNGTEFHUyAqPS9zIz0uKiM9JENGTEFHUyMKQEAgLTU4MSw3ICs4MTIsOCBAQAogL15TSEFSRURMSUIgKj0vcyM9LiojPSRTSEFSRURMSUIjCiAvXlNIQVJFRExJQlYgKj0vcyM9LiojPSRTSEFSRURMSUJWIwogL15TSEFSRURMSUJNICo9L3MjPS4qIz0kU0hBUkVETElCTSMKLS9eQVIgKj0vcyM9LiojPSRBUl9SQyMKKy9eQVIgKj0vcyM9LiojPSRBUiMKKy9eQVJGTEFHUyAqPS9zIz0uKiM9JEFSRkxBR1MjCiAvXlJBTkxJQiAqPS9zIz0uKiM9JFJBTkxJQiMKIC9eRVhFICo9L3MjPS4qIz0kRVhFIwogL15wcmVmaXggKj0vcyM9LiojPSRwcmVmaXgjCkBAIC01OTQsMyArODI2LDYgQEAKICIgfCBzZWQgLWUgIgogcy9cQFZFUlNJT05cQC8kVkVSL2c7CiAiID4gemxpYi5wYworCisjIGRvbmUKK2xlYXZlIDAKZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi9jcmMzMi5jIGIvTW9kdWxlcy96bGliL2NyYzMyLmMKaW5kZXggOTFiZTM3Mi4uOTc5YTcxOSAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL2NyYzMyLmMKKysrIGIvTW9kdWxlcy96bGliL2NyYzMyLmMKQEAgLTEsNSArMSw1IEBACiAvKiBjcmMzMi5jIC0tIGNvbXB1dGUgdGhlIENSQy0zMiBvZiBhIGRhdGEgc3RyZWFtCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwNiwgMjAxMCBNYXJrIEFkbGVyCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwNiwgMjAxMCwgMjAxMSwgMjAxMiBNYXJrIEFkbGVyCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCiAgKgogICogVGhhbmtzIHRvIFJvZG5leSBCcm93biA8cmJyb3duNjRAY3NjLmNvbS5hdT4gZm9yIGhpcyBjb250cmlidXRpb24gb2YgZmFzdGVyCkBAIC0xNyw2ICsxNyw4IEBACiAgIG9mIHRoZSBjcmMgdGFibGVzLiAgVGhlcmVmb3JlLCBpZiB5b3UgI2RlZmluZSBEWU5BTUlDX0NSQ19UQUJMRSwgeW91IHNob3VsZAogICBmaXJzdCBjYWxsIGdldF9jcmNfdGFibGUoKSB0byBpbml0aWFsaXplIHRoZSB0YWJsZXMgYmVmb3JlIGFsbG93aW5nIG1vcmUgdGhhbgogICBvbmUgdGhyZWFkIHRvIHVzZSBjcmMzMigpLgorCisgIERZTkFNSUNfQ1JDX1RBQkxFIGFuZCBNQUtFQ1JDSCBjYW4gYmUgI2RlZmluZWQgdG8gd3JpdGUgb3V0IGNyYzMyLmguCiAgKi8KIAogI2lmZGVmIE1BS0VDUkNICkBAIC0zMCwzMSArMzIsMTEgQEAKIAogI2RlZmluZSBsb2NhbCBzdGF0aWMKIAotLyogRmluZCBhIGZvdXItYnl0ZSBpbnRlZ2VyIHR5cGUgZm9yIGNyYzMyX2xpdHRsZSgpIGFuZCBjcmMzMl9iaWcoKS4gKi8KLSNpZm5kZWYgTk9CWUZPVVIKLSMgIGlmZGVmIFNUREMgICAgICAgICAgIC8qIG5lZWQgQU5TSSBDIGxpbWl0cy5oIHRvIGRldGVybWluZSBzaXplcyAqLwotIyAgICBpbmNsdWRlIDxsaW1pdHMuaD4KLSMgICAgZGVmaW5lIEJZRk9VUgotIyAgICBpZiAoVUlOVF9NQVggPT0gMHhmZmZmZmZmZlVMKQotICAgICAgIHR5cGVkZWYgdW5zaWduZWQgaW50IHU0OwotIyAgICBlbHNlCi0jICAgICAgaWYgKFVMT05HX01BWCA9PSAweGZmZmZmZmZmVUwpCi0gICAgICAgICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgdTQ7Ci0jICAgICAgZWxzZQotIyAgICAgICAgaWYgKFVTSFJUX01BWCA9PSAweGZmZmZmZmZmVUwpCi0gICAgICAgICAgIHR5cGVkZWYgdW5zaWduZWQgc2hvcnQgdTQ7Ci0jICAgICAgICBlbHNlCi0jICAgICAgICAgIHVuZGVmIEJZRk9VUiAgICAgLyogY2FuJ3QgZmluZCBhIGZvdXItYnl0ZSBpbnRlZ2VyIHR5cGUhICovCi0jICAgICAgICBlbmRpZgotIyAgICAgIGVuZGlmCi0jICAgIGVuZGlmCi0jICBlbmRpZiAvKiBTVERDICovCi0jZW5kaWYgLyogIU5PQllGT1VSICovCi0KIC8qIERlZmluaXRpb25zIGZvciBkb2luZyB0aGUgY3JjIGZvdXIgZGF0YSBieXRlcyBhdCBhIHRpbWUuICovCisjaWYgIWRlZmluZWQoTk9CWUZPVVIpICYmIGRlZmluZWQoWl9VNCkKKyMgIGRlZmluZSBCWUZPVVIKKyNlbmRpZgogI2lmZGVmIEJZRk9VUgotIyAgZGVmaW5lIFJFVih3KSAoKCgodyk+PjI0KSYweGZmKSsoKCh3KT4+OCkmMHhmZjAwKSsgXAotICAgICAgICAgICAgICAgICgoKHcpJjB4ZmYwMCk8PDgpKygoKHcpJjB4ZmYpPDwyNCkpCiAgICBsb2NhbCB1bnNpZ25lZCBsb25nIGNyYzMyX2xpdHRsZSBPRigodW5zaWduZWQgbG9uZywKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgRkFSICosIHVuc2lnbmVkKSk7CiAgICBsb2NhbCB1bnNpZ25lZCBsb25nIGNyYzMyX2JpZyBPRigodW5zaWduZWQgbG9uZywKQEAgLTY4LDE2ICs1MCwxNiBAQAogbG9jYWwgdW5zaWduZWQgbG9uZyBnZjJfbWF0cml4X3RpbWVzIE9GKCh1bnNpZ25lZCBsb25nICptYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgdmVjKSk7CiBsb2NhbCB2b2lkIGdmMl9tYXRyaXhfc3F1YXJlIE9GKCh1bnNpZ25lZCBsb25nICpzcXVhcmUsIHVuc2lnbmVkIGxvbmcgKm1hdCkpOwotbG9jYWwgdUxvbmcgY3JjMzJfY29tYmluZV8odUxvbmcgY3JjMSwgdUxvbmcgY3JjMiwgel9vZmY2NF90IGxlbjIpOworbG9jYWwgdUxvbmcgY3JjMzJfY29tYmluZV8gT0YoKHVMb25nIGNyYzEsIHVMb25nIGNyYzIsIHpfb2ZmNjRfdCBsZW4yKSk7CiAKIAogI2lmZGVmIERZTkFNSUNfQ1JDX1RBQkxFCiAKIGxvY2FsIHZvbGF0aWxlIGludCBjcmNfdGFibGVfZW1wdHkgPSAxOwotbG9jYWwgdW5zaWduZWQgbG9uZyBGQVIgY3JjX3RhYmxlW1RCTFNdWzI1Nl07Citsb2NhbCB6X2NyY190IEZBUiBjcmNfdGFibGVbVEJMU11bMjU2XTsKIGxvY2FsIHZvaWQgbWFrZV9jcmNfdGFibGUgT0YoKHZvaWQpKTsKICNpZmRlZiBNQUtFQ1JDSAotICAgbG9jYWwgdm9pZCB3cml0ZV90YWJsZSBPRigoRklMRSAqLCBjb25zdCB1bnNpZ25lZCBsb25nIEZBUiAqKSk7CisgICBsb2NhbCB2b2lkIHdyaXRlX3RhYmxlIE9GKChGSUxFICosIGNvbnN0IHpfY3JjX3QgRkFSICopKTsKICNlbmRpZiAvKiBNQUtFQ1JDSCAqLwogLyoKICAgR2VuZXJhdGUgdGFibGVzIGZvciBhIGJ5dGUtd2lzZSAzMi1iaXQgQ1JDIGNhbGN1bGF0aW9uIG9uIHRoZSBwb2x5bm9taWFsOgpAQCAtMTA3LDkgKzg5LDkgQEAKICovCiBsb2NhbCB2b2lkIG1ha2VfY3JjX3RhYmxlKCkKIHsKLSAgICB1bnNpZ25lZCBsb25nIGM7CisgICAgel9jcmNfdCBjOwogICAgIGludCBuLCBrOwotICAgIHVuc2lnbmVkIGxvbmcgcG9seTsgICAgICAgICAgICAgICAgIC8qIHBvbHlub21pYWwgZXhjbHVzaXZlLW9yIHBhdHRlcm4gKi8KKyAgICB6X2NyY190IHBvbHk7ICAgICAgICAgICAgICAgICAgICAgICAvKiBwb2x5bm9taWFsIGV4Y2x1c2l2ZS1vciBwYXR0ZXJuICovCiAgICAgLyogdGVybXMgb2YgcG9seW5vbWlhbCBkZWZpbmluZyB0aGlzIGNyYyAoZXhjZXB0IHheMzIpOiAqLwogICAgIHN0YXRpYyB2b2xhdGlsZSBpbnQgZmlyc3QgPSAxOyAgICAgIC8qIGZsYWcgdG8gbGltaXQgY29uY3VycmVudCBtYWtpbmcgKi8KICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBwW10gPSB7MCwxLDIsNCw1LDcsOCwxMCwxMSwxMiwxNiwyMiwyMywyNn07CkBAIC0xMjEsMTMgKzEwMywxMyBAQAogICAgICAgICBmaXJzdCA9IDA7CiAKICAgICAgICAgLyogbWFrZSBleGNsdXNpdmUtb3IgcGF0dGVybiBmcm9tIHBvbHlub21pYWwgKDB4ZWRiODgzMjBVTCkgKi8KLSAgICAgICAgcG9seSA9IDBVTDsKLSAgICAgICAgZm9yIChuID0gMDsgbiA8IHNpemVvZihwKS9zaXplb2YodW5zaWduZWQgY2hhcik7IG4rKykKLSAgICAgICAgICAgIHBvbHkgfD0gMVVMIDw8ICgzMSAtIHBbbl0pOworICAgICAgICBwb2x5ID0gMDsKKyAgICAgICAgZm9yIChuID0gMDsgbiA8IChpbnQpKHNpemVvZihwKS9zaXplb2YodW5zaWduZWQgY2hhcikpOyBuKyspCisgICAgICAgICAgICBwb2x5IHw9ICh6X2NyY190KTEgPDwgKDMxIC0gcFtuXSk7CiAKICAgICAgICAgLyogZ2VuZXJhdGUgYSBjcmMgZm9yIGV2ZXJ5IDgtYml0IHZhbHVlICovCiAgICAgICAgIGZvciAobiA9IDA7IG4gPCAyNTY7IG4rKykgewotICAgICAgICAgICAgYyA9ICh1bnNpZ25lZCBsb25nKW47CisgICAgICAgICAgICBjID0gKHpfY3JjX3QpbjsKICAgICAgICAgICAgIGZvciAoayA9IDA7IGsgPCA4OyBrKyspCiAgICAgICAgICAgICAgICAgYyA9IGMgJiAxID8gcG9seSBeIChjID4+IDEpIDogYyA+PiAxOwogICAgICAgICAgICAgY3JjX3RhYmxlWzBdW25dID0gYzsKQEAgLTEzOCwxMSArMTIwLDExIEBACiAgICAgICAgICAgIGFuZCB0aGVuIHRoZSBieXRlIHJldmVyc2FsIG9mIHRob3NlIGFzIHdlbGwgYXMgdGhlIGZpcnN0IHRhYmxlICovCiAgICAgICAgIGZvciAobiA9IDA7IG4gPCAyNTY7IG4rKykgewogICAgICAgICAgICAgYyA9IGNyY190YWJsZVswXVtuXTsKLSAgICAgICAgICAgIGNyY190YWJsZVs0XVtuXSA9IFJFVihjKTsKKyAgICAgICAgICAgIGNyY190YWJsZVs0XVtuXSA9IFpTV0FQMzIoYyk7CiAgICAgICAgICAgICBmb3IgKGsgPSAxOyBrIDwgNDsgaysrKSB7CiAgICAgICAgICAgICAgICAgYyA9IGNyY190YWJsZVswXVtjICYgMHhmZl0gXiAoYyA+PiA4KTsKICAgICAgICAgICAgICAgICBjcmNfdGFibGVba11bbl0gPSBjOwotICAgICAgICAgICAgICAgIGNyY190YWJsZVtrICsgNF1bbl0gPSBSRVYoYyk7CisgICAgICAgICAgICAgICAgY3JjX3RhYmxlW2sgKyA0XVtuXSA9IFpTV0FQMzIoYyk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICNlbmRpZiAvKiBCWUZPVVIgKi8KQEAgLTE2NCw3ICsxNDYsNyBAQAogICAgICAgICBpZiAob3V0ID09IE5VTEwpIHJldHVybjsKICAgICAgICAgZnByaW50ZihvdXQsICIvKiBjcmMzMi5oIC0tIHRhYmxlcyBmb3IgcmFwaWQgQ1JDIGNhbGN1bGF0aW9uXG4iKTsKICAgICAgICAgZnByaW50ZihvdXQsICIgKiBHZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBjcmMzMi5jXG4gKi9cblxuIik7Ci0gICAgICAgIGZwcmludGYob3V0LCAibG9jYWwgY29uc3QgdW5zaWduZWQgbG9uZyBGQVIgIik7CisgICAgICAgIGZwcmludGYob3V0LCAibG9jYWwgY29uc3Qgel9jcmNfdCBGQVIgIik7CiAgICAgICAgIGZwcmludGYob3V0LCAiY3JjX3RhYmxlW1RCTFNdWzI1Nl0gPVxue1xuICB7XG4iKTsKICAgICAgICAgd3JpdGVfdGFibGUob3V0LCBjcmNfdGFibGVbMF0pOwogIyAgaWZkZWYgQllGT1VSCkBAIC0xODQsMTIgKzE2NiwxMyBAQAogI2lmZGVmIE1BS0VDUkNICiBsb2NhbCB2b2lkIHdyaXRlX3RhYmxlKG91dCwgdGFibGUpCiAgICAgRklMRSAqb3V0OwotICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgRkFSICp0YWJsZTsKKyAgICBjb25zdCB6X2NyY190IEZBUiAqdGFibGU7CiB7CiAgICAgaW50IG47CiAKICAgICBmb3IgKG4gPSAwOyBuIDwgMjU2OyBuKyspCi0gICAgICAgIGZwcmludGYob3V0LCAiJXMweCUwOGx4VUwlcyIsIG4gJSA1ID8gIiIgOiAiICAgICIsIHRhYmxlW25dLAorICAgICAgICBmcHJpbnRmKG91dCwgIiVzMHglMDhseFVMJXMiLCBuICUgNSA/ICIiIDogIiAgICAiLAorICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKSh0YWJsZVtuXSksCiAgICAgICAgICAgICAgICAgbiA9PSAyNTUgPyAiXG4iIDogKG4gJSA1ID09IDQgPyAiLFxuIiA6ICIsICIpKTsKIH0KICNlbmRpZiAvKiBNQUtFQ1JDSCAqLwpAQCAtMjA0LDEzICsxODcsMTMgQEAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgYnkgYXNtIHZlcnNpb25zIG9mIGNyYzMyKCkKICAqLwotY29uc3QgdW5zaWduZWQgbG9uZyBGQVIgKiBaRVhQT1JUIGdldF9jcmNfdGFibGUoKQorY29uc3Qgel9jcmNfdCBGQVIgKiBaRVhQT1JUIGdldF9jcmNfdGFibGUoKQogewogI2lmZGVmIERZTkFNSUNfQ1JDX1RBQkxFCiAgICAgaWYgKGNyY190YWJsZV9lbXB0eSkKICAgICAgICAgbWFrZV9jcmNfdGFibGUoKTsKICNlbmRpZiAvKiBEWU5BTUlDX0NSQ19UQUJMRSAqLwotICAgIHJldHVybiAoY29uc3QgdW5zaWduZWQgbG9uZyBGQVIgKiljcmNfdGFibGU7CisgICAgcmV0dXJuIChjb25zdCB6X2NyY190IEZBUiAqKWNyY190YWJsZTsKIH0KIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwpAQCAtMjMyLDcgKzIxNSw3IEBACiAKICNpZmRlZiBCWUZPVVIKICAgICBpZiAoc2l6ZW9mKHZvaWQgKikgPT0gc2l6ZW9mKHB0cmRpZmZfdCkpIHsKLSAgICAgICAgdTQgZW5kaWFuOworICAgICAgICB6X2NyY190IGVuZGlhbjsKIAogICAgICAgICBlbmRpYW4gPSAxOwogICAgICAgICBpZiAoKigodW5zaWduZWQgY2hhciAqKSgmZW5kaWFuKSkpCkBAIC0yNjYsMTcgKzI0OSwxNyBAQAogICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgRkFSICpidWY7CiAgICAgdW5zaWduZWQgbGVuOwogewotICAgIHJlZ2lzdGVyIHU0IGM7Ci0gICAgcmVnaXN0ZXIgY29uc3QgdTQgRkFSICpidWY0OworICAgIHJlZ2lzdGVyIHpfY3JjX3QgYzsKKyAgICByZWdpc3RlciBjb25zdCB6X2NyY190IEZBUiAqYnVmNDsKIAotICAgIGMgPSAodTQpY3JjOworICAgIGMgPSAoel9jcmNfdCljcmM7CiAgICAgYyA9IH5jOwogICAgIHdoaWxlIChsZW4gJiYgKChwdHJkaWZmX3QpYnVmICYgMykpIHsKICAgICAgICAgYyA9IGNyY190YWJsZVswXVsoYyBeICpidWYrKykgJiAweGZmXSBeIChjID4+IDgpOwogICAgICAgICBsZW4tLTsKICAgICB9CiAKLSAgICBidWY0ID0gKGNvbnN0IHU0IEZBUiAqKShjb25zdCB2b2lkIEZBUiAqKWJ1ZjsKKyAgICBidWY0ID0gKGNvbnN0IHpfY3JjX3QgRkFSICopKGNvbnN0IHZvaWQgRkFSICopYnVmOwogICAgIHdoaWxlIChsZW4gPj0gMzIpIHsKICAgICAgICAgRE9MSVQzMjsKICAgICAgICAgbGVuIC09IDMyOwpAQCAtMzA2LDE3ICsyODksMTcgQEAKICAgICBjb25zdCB1bnNpZ25lZCBjaGFyIEZBUiAqYnVmOwogICAgIHVuc2lnbmVkIGxlbjsKIHsKLSAgICByZWdpc3RlciB1NCBjOwotICAgIHJlZ2lzdGVyIGNvbnN0IHU0IEZBUiAqYnVmNDsKKyAgICByZWdpc3RlciB6X2NyY190IGM7CisgICAgcmVnaXN0ZXIgY29uc3Qgel9jcmNfdCBGQVIgKmJ1ZjQ7CiAKLSAgICBjID0gUkVWKCh1NCljcmMpOworICAgIGMgPSBaU1dBUDMyKCh6X2NyY190KWNyYyk7CiAgICAgYyA9IH5jOwogICAgIHdoaWxlIChsZW4gJiYgKChwdHJkaWZmX3QpYnVmICYgMykpIHsKICAgICAgICAgYyA9IGNyY190YWJsZVs0XVsoYyA+PiAyNCkgXiAqYnVmKytdIF4gKGMgPDwgOCk7CiAgICAgICAgIGxlbi0tOwogICAgIH0KIAotICAgIGJ1ZjQgPSAoY29uc3QgdTQgRkFSICopKGNvbnN0IHZvaWQgRkFSICopYnVmOworICAgIGJ1ZjQgPSAoY29uc3Qgel9jcmNfdCBGQVIgKikoY29uc3Qgdm9pZCBGQVIgKilidWY7CiAgICAgYnVmNC0tOwogICAgIHdoaWxlIChsZW4gPj0gMzIpIHsKICAgICAgICAgRE9CSUczMjsKQEAgLTMzMyw3ICszMTYsNyBAQAogICAgICAgICBjID0gY3JjX3RhYmxlWzRdWyhjID4+IDI0KSBeICpidWYrK10gXiAoYyA8PCA4KTsKICAgICB9IHdoaWxlICgtLWxlbik7CiAgICAgYyA9IH5jOwotICAgIHJldHVybiAodW5zaWduZWQgbG9uZykoUkVWKGMpKTsKKyAgICByZXR1cm4gKHVuc2lnbmVkIGxvbmcpKFpTV0FQMzIoYykpOwogfQogCiAjZW5kaWYgLyogQllGT1VSICovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvY3JjMzIuaCBiL01vZHVsZXMvemxpYi9jcmMzMi5oCmluZGV4IDgwNTNiNjEuLjllMGM3NzggMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi9jcmMzMi5oCisrKyBiL01vZHVsZXMvemxpYi9jcmMzMi5oCkBAIC0yLDcgKzIsNyBAQAogICogR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgY3JjMzIuYwogICovCiAKLWxvY2FsIGNvbnN0IHVuc2lnbmVkIGxvbmcgRkFSIGNyY190YWJsZVtUQkxTXVsyNTZdID0KK2xvY2FsIGNvbnN0IHpfY3JjX3QgRkFSIGNyY190YWJsZVtUQkxTXVsyNTZdID0KIHsKICAgewogICAgIDB4MDAwMDAwMDBVTCwgMHg3NzA3MzA5NlVMLCAweGVlMGU2MTJjVUwsIDB4OTkwOTUxYmFVTCwgMHgwNzZkYzQxOVVMLApkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL2RlZmxhdGUuYyBiL01vZHVsZXMvemxpYi9kZWZsYXRlLmMKaW5kZXggYmNlZjY3Yy4uNjk2OTU3NyAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL2RlZmxhdGUuYworKysgYi9Nb2R1bGVzL3psaWIvZGVmbGF0ZS5jCkBAIC0xLDUgKzEsNSBAQAogLyogZGVmbGF0ZS5jIC0tIGNvbXByZXNzIGRhdGEgdXNpbmcgdGhlIGRlZmxhdGlvbiBhbGdvcml0aG0KLSAqIENvcHlyaWdodCAoQykgMTk5NS0yMDEwIEplYW4tbG91cCBHYWlsbHkgYW5kIE1hcmsgQWRsZXIKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDEzIEplYW4tbG91cCBHYWlsbHkgYW5kIE1hcmsgQWRsZXIKICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKICAqLwogCkBAIC0zNyw3ICszNyw3IEBACiAgKiAgUkVGRVJFTkNFUwogICoKICAqICAgICAgRGV1dHNjaCwgTC5QLiwiREVGTEFURSBDb21wcmVzc2VkIERhdGEgRm9ybWF0IFNwZWNpZmljYXRpb24iLgotICogICAgICBBdmFpbGFibGUgaW4gaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMTk1MS50eHQKKyAqICAgICAgQXZhaWxhYmxlIGluIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzE5NTEKICAqCiAgKiAgICAgIEEgZGVzY3JpcHRpb24gb2YgdGhlIFJhYmluIGFuZCBLYXJwIGFsZ29yaXRobSBpcyBnaXZlbiBpbiB0aGUgYm9vawogICogICAgICAgICAiQWxnb3JpdGhtcyIgYnkgUi4gU2VkZ2V3aWNrLCBBZGRpc29uLVdlc2xleSwgcDI1Mi4KQEAgLTUyLDcgKzUyLDcgQEAKICNpbmNsdWRlICJkZWZsYXRlLmgiCiAKIGNvbnN0IGNoYXIgZGVmbGF0ZV9jb3B5cmlnaHRbXSA9Ci0gICAiIGRlZmxhdGUgMS4yLjUgQ29weXJpZ2h0IDE5OTUtMjAxMCBKZWFuLWxvdXAgR2FpbGx5IGFuZCBNYXJrIEFkbGVyICI7CisgICAiIGRlZmxhdGUgMS4yLjggQ29weXJpZ2h0IDE5OTUtMjAxMyBKZWFuLWxvdXAgR2FpbGx5IGFuZCBNYXJrIEFkbGVyICI7CiAvKgogICBJZiB5b3UgdXNlIHRoZSB6bGliIGxpYnJhcnkgaW4gYSBwcm9kdWN0LCBhbiBhY2tub3dsZWRnbWVudCBpcyB3ZWxjb21lCiAgIGluIHRoZSBkb2N1bWVudGF0aW9uIG9mIHlvdXIgcHJvZHVjdC4gSWYgZm9yIHNvbWUgcmVhc29uIHlvdSBjYW5ub3QKQEAgLTE1NSw5ICsxNTUsMTIgQEAKIHN0cnVjdCBzdGF0aWNfdHJlZV9kZXNjX3Mge2ludCBkdW1teTt9OyAvKiBmb3IgYnVnZ3kgY29tcGlsZXJzICovCiAjZW5kaWYKIAorLyogcmFuayBaX0JMT0NLIGJldHdlZW4gWl9OT19GTFVTSCBhbmQgWl9QQVJUSUFMX0ZMVVNIICovCisjZGVmaW5lIFJBTksoZikgKCgoZikgPDwgMSkgLSAoKGYpID4gNCA/IDkgOiAwKSkKKwogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKiBVcGRhdGUgYSBoYXNoIHZhbHVlIHdpdGggdGhlIGdpdmVuIGlucHV0IGJ5dGUKLSAqIElOICBhc3NlcnRpb246IGFsbCBjYWxscyB0byBVUERBVEVfSEFTSCBhcmUgbWFkZSB3aXRoIGNvbnNlY3V0aXZlCisgKiBJTiAgYXNzZXJ0aW9uOiBhbGwgY2FsbHMgdG8gdG8gVVBEQVRFX0hBU0ggYXJlIG1hZGUgd2l0aCBjb25zZWN1dGl2ZQogICogICAgaW5wdXQgY2hhcmFjdGVycywgc28gdGhhdCBhIHJ1bm5pbmcgaGFzaCBrZXkgY2FuIGJlIGNvbXB1dGVkIGZyb20gdGhlCiAgKiAgICBwcmV2aW91cyBrZXkgaW5zdGVhZCBvZiBjb21wbGV0ZSByZWNhbGN1bGF0aW9uIGVhY2ggdGltZS4KICAqLwpAQCAtMTcwLDcgKzE3Myw3IEBACiAgKiB0aGUgcHJldmlvdXMgbGVuZ3RoIG9mIHRoZSBoYXNoIGNoYWluLgogICogSWYgdGhpcyBmaWxlIGlzIGNvbXBpbGVkIHdpdGggLURGQVNURVNULCB0aGUgY29tcHJlc3Npb24gbGV2ZWwgaXMgZm9yY2VkCiAgKiB0byAxLCBhbmQgbm8gaGFzaCBjaGFpbnMgYXJlIG1haW50YWluZWQuCi0gKiBJTiAgYXNzZXJ0aW9uOiBhbGwgY2FsbHMgdG8gSU5TRVJUX1NUUklORyBhcmUgbWFkZSB3aXRoIGNvbnNlY3V0aXZlCisgKiBJTiAgYXNzZXJ0aW9uOiBhbGwgY2FsbHMgdG8gdG8gSU5TRVJUX1NUUklORyBhcmUgbWFkZSB3aXRoIGNvbnNlY3V0aXZlCiAgKiAgICBpbnB1dCBjaGFyYWN0ZXJzIGFuZCB0aGUgZmlyc3QgTUlOX01BVENIIGJ5dGVzIG9mIHN0ciBhcmUgdmFsaWQKICAqICAgIChleGNlcHQgZm9yIHRoZSBsYXN0IE1JTl9NQVRDSC0xIGJ5dGVzIG9mIHRoZSBpbnB1dCBmaWxlKS4KICAqLwpAQCAtMjM1LDEwICsyMzgsMTkgQEAKIAogICAgIHN0cm0tPm1zZyA9IFpfTlVMTDsKICAgICBpZiAoc3RybS0+emFsbG9jID09IChhbGxvY19mdW5jKTApIHsKKyNpZmRlZiBaX1NPTE8KKyAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOworI2Vsc2UKICAgICAgICAgc3RybS0+emFsbG9jID0gemNhbGxvYzsKICAgICAgICAgc3RybS0+b3BhcXVlID0gKHZvaWRwZikwOworI2VuZGlmCiAgICAgfQotICAgIGlmIChzdHJtLT56ZnJlZSA9PSAoZnJlZV9mdW5jKTApIHN0cm0tPnpmcmVlID0gemNmcmVlOworICAgIGlmIChzdHJtLT56ZnJlZSA9PSAoZnJlZV9mdW5jKTApCisjaWZkZWYgWl9TT0xPCisgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKKyNlbHNlCisgICAgICAgIHN0cm0tPnpmcmVlID0gemNmcmVlOworI2VuZGlmCiAKICNpZmRlZiBGQVNURVNUCiAgICAgaWYgKGxldmVsICE9IDApIGxldmVsID0gMTsKQEAgLTI5Myw3ICszMDUsNyBAQAogICAgIGlmIChzLT53aW5kb3cgPT0gWl9OVUxMIHx8IHMtPnByZXYgPT0gWl9OVUxMIHx8IHMtPmhlYWQgPT0gWl9OVUxMIHx8CiAgICAgICAgIHMtPnBlbmRpbmdfYnVmID09IFpfTlVMTCkgewogICAgICAgICBzLT5zdGF0dXMgPSBGSU5JU0hfU1RBVEU7Ci0gICAgICAgIHN0cm0tPm1zZyA9IChjaGFyKilFUlJfTVNHKFpfTUVNX0VSUk9SKTsKKyAgICAgICAgc3RybS0+bXNnID0gRVJSX01TRyhaX01FTV9FUlJPUik7CiAgICAgICAgIGRlZmxhdGVFbmQgKHN0cm0pOwogICAgICAgICByZXR1cm4gWl9NRU1fRVJST1I7CiAgICAgfQpAQCAtMzE0LDQzICszMjYsNzAgQEAKICAgICB1SW50ICBkaWN0TGVuZ3RoOwogewogICAgIGRlZmxhdGVfc3RhdGUgKnM7Ci0gICAgdUludCBsZW5ndGggPSBkaWN0TGVuZ3RoOwotICAgIHVJbnQgbjsKLSAgICBJUG9zIGhhc2hfaGVhZCA9IDA7CisgICAgdUludCBzdHIsIG47CisgICAgaW50IHdyYXA7CisgICAgdW5zaWduZWQgYXZhaWw7CisgICAgel9jb25zdCB1bnNpZ25lZCBjaGFyICpuZXh0OwogCi0gICAgaWYgKHN0cm0gPT0gWl9OVUxMIHx8IHN0cm0tPnN0YXRlID09IFpfTlVMTCB8fCBkaWN0aW9uYXJ5ID09IFpfTlVMTCB8fAotICAgICAgICBzdHJtLT5zdGF0ZS0+d3JhcCA9PSAyIHx8Ci0gICAgICAgIChzdHJtLT5zdGF0ZS0+d3JhcCA9PSAxICYmIHN0cm0tPnN0YXRlLT5zdGF0dXMgIT0gSU5JVF9TVEFURSkpCisgICAgaWYgKHN0cm0gPT0gWl9OVUxMIHx8IHN0cm0tPnN0YXRlID09IFpfTlVMTCB8fCBkaWN0aW9uYXJ5ID09IFpfTlVMTCkKKyAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOworICAgIHMgPSBzdHJtLT5zdGF0ZTsKKyAgICB3cmFwID0gcy0+d3JhcDsKKyAgICBpZiAod3JhcCA9PSAyIHx8ICh3cmFwID09IDEgJiYgcy0+c3RhdHVzICE9IElOSVRfU1RBVEUpIHx8IHMtPmxvb2thaGVhZCkKICAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwogCi0gICAgcyA9IHN0cm0tPnN0YXRlOwotICAgIGlmIChzLT53cmFwKQorICAgIC8qIHdoZW4gdXNpbmcgemxpYiB3cmFwcGVycywgY29tcHV0ZSBBZGxlci0zMiBmb3IgcHJvdmlkZWQgZGljdGlvbmFyeSAqLworICAgIGlmICh3cmFwID09IDEpCiAgICAgICAgIHN0cm0tPmFkbGVyID0gYWRsZXIzMihzdHJtLT5hZGxlciwgZGljdGlvbmFyeSwgZGljdExlbmd0aCk7CisgICAgcy0+d3JhcCA9IDA7ICAgICAgICAgICAgICAgICAgICAvKiBhdm9pZCBjb21wdXRpbmcgQWRsZXItMzIgaW4gcmVhZF9idWYgKi8KIAotICAgIGlmIChsZW5ndGggPCBNSU5fTUFUQ0gpIHJldHVybiBaX09LOwotICAgIGlmIChsZW5ndGggPiBzLT53X3NpemUpIHsKLSAgICAgICAgbGVuZ3RoID0gcy0+d19zaXplOwotICAgICAgICBkaWN0aW9uYXJ5ICs9IGRpY3RMZW5ndGggLSBsZW5ndGg7IC8qIHVzZSB0aGUgdGFpbCBvZiB0aGUgZGljdGlvbmFyeSAqLworICAgIC8qIGlmIGRpY3Rpb25hcnkgd291bGQgZmlsbCB3aW5kb3csIGp1c3QgcmVwbGFjZSB0aGUgaGlzdG9yeSAqLworICAgIGlmIChkaWN0TGVuZ3RoID49IHMtPndfc2l6ZSkgeworICAgICAgICBpZiAod3JhcCA9PSAwKSB7ICAgICAgICAgICAgLyogYWxyZWFkeSBlbXB0eSBvdGhlcndpc2UgKi8KKyAgICAgICAgICAgIENMRUFSX0hBU0gocyk7CisgICAgICAgICAgICBzLT5zdHJzdGFydCA9IDA7CisgICAgICAgICAgICBzLT5ibG9ja19zdGFydCA9IDBMOworICAgICAgICAgICAgcy0+aW5zZXJ0ID0gMDsKKyAgICAgICAgfQorICAgICAgICBkaWN0aW9uYXJ5ICs9IGRpY3RMZW5ndGggLSBzLT53X3NpemU7ICAvKiB1c2UgdGhlIHRhaWwgKi8KKyAgICAgICAgZGljdExlbmd0aCA9IHMtPndfc2l6ZTsKICAgICB9Ci0gICAgem1lbWNweShzLT53aW5kb3csIGRpY3Rpb25hcnksIGxlbmd0aCk7Ci0gICAgcy0+c3Ryc3RhcnQgPSBsZW5ndGg7Ci0gICAgcy0+YmxvY2tfc3RhcnQgPSAobG9uZylsZW5ndGg7CiAKLSAgICAvKiBJbnNlcnQgYWxsIHN0cmluZ3MgaW4gdGhlIGhhc2ggdGFibGUgKGV4Y2VwdCBmb3IgdGhlIGxhc3QgdHdvIGJ5dGVzKS4KLSAgICAgKiBzLT5sb29rYWhlYWQgc3RheXMgbnVsbCwgc28gcy0+aW5zX2ggd2lsbCBiZSByZWNvbXB1dGVkIGF0IHRoZSBuZXh0Ci0gICAgICogY2FsbCBvZiBmaWxsX3dpbmRvdy4KLSAgICAgKi8KLSAgICBzLT5pbnNfaCA9IHMtPndpbmRvd1swXTsKLSAgICBVUERBVEVfSEFTSChzLCBzLT5pbnNfaCwgcy0+d2luZG93WzFdKTsKLSAgICBmb3IgKG4gPSAwOyBuIDw9IGxlbmd0aCAtIE1JTl9NQVRDSDsgbisrKSB7Ci0gICAgICAgIElOU0VSVF9TVFJJTkcocywgbiwgaGFzaF9oZWFkKTsKKyAgICAvKiBpbnNlcnQgZGljdGlvbmFyeSBpbnRvIHdpbmRvdyBhbmQgaGFzaCAqLworICAgIGF2YWlsID0gc3RybS0+YXZhaWxfaW47CisgICAgbmV4dCA9IHN0cm0tPm5leHRfaW47CisgICAgc3RybS0+YXZhaWxfaW4gPSBkaWN0TGVuZ3RoOworICAgIHN0cm0tPm5leHRfaW4gPSAoel9jb25zdCBCeXRlZiAqKWRpY3Rpb25hcnk7CisgICAgZmlsbF93aW5kb3cocyk7CisgICAgd2hpbGUgKHMtPmxvb2thaGVhZCA+PSBNSU5fTUFUQ0gpIHsKKyAgICAgICAgc3RyID0gcy0+c3Ryc3RhcnQ7CisgICAgICAgIG4gPSBzLT5sb29rYWhlYWQgLSAoTUlOX01BVENILTEpOworICAgICAgICBkbyB7CisgICAgICAgICAgICBVUERBVEVfSEFTSChzLCBzLT5pbnNfaCwgcy0+d2luZG93W3N0ciArIE1JTl9NQVRDSC0xXSk7CisjaWZuZGVmIEZBU1RFU1QKKyAgICAgICAgICAgIHMtPnByZXZbc3RyICYgcy0+d19tYXNrXSA9IHMtPmhlYWRbcy0+aW5zX2hdOworI2VuZGlmCisgICAgICAgICAgICBzLT5oZWFkW3MtPmluc19oXSA9IChQb3Mpc3RyOworICAgICAgICAgICAgc3RyKys7CisgICAgICAgIH0gd2hpbGUgKC0tbik7CisgICAgICAgIHMtPnN0cnN0YXJ0ID0gc3RyOworICAgICAgICBzLT5sb29rYWhlYWQgPSBNSU5fTUFUQ0gtMTsKKyAgICAgICAgZmlsbF93aW5kb3cocyk7CiAgICAgfQotICAgIGlmIChoYXNoX2hlYWQpIGhhc2hfaGVhZCA9IDA7ICAvKiB0byBtYWtlIGNvbXBpbGVyIGhhcHB5ICovCisgICAgcy0+c3Ryc3RhcnQgKz0gcy0+bG9va2FoZWFkOworICAgIHMtPmJsb2NrX3N0YXJ0ID0gKGxvbmcpcy0+c3Ryc3RhcnQ7CisgICAgcy0+aW5zZXJ0ID0gcy0+bG9va2FoZWFkOworICAgIHMtPmxvb2thaGVhZCA9IDA7CisgICAgcy0+bWF0Y2hfbGVuZ3RoID0gcy0+cHJldl9sZW5ndGggPSBNSU5fTUFUQ0gtMTsKKyAgICBzLT5tYXRjaF9hdmFpbGFibGUgPSAwOworICAgIHN0cm0tPm5leHRfaW4gPSBuZXh0OworICAgIHN0cm0tPmF2YWlsX2luID0gYXZhaWw7CisgICAgcy0+d3JhcCA9IHdyYXA7CiAgICAgcmV0dXJuIFpfT0s7CiB9CiAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLWludCBaRVhQT1JUIGRlZmxhdGVSZXNldCAoc3RybSkKK2ludCBaRVhQT1JUIGRlZmxhdGVSZXNldEtlZXAgKHN0cm0pCiAgICAgel9zdHJlYW1wIHN0cm07CiB7CiAgICAgZGVmbGF0ZV9zdGF0ZSAqczsKQEAgLTM4MCwxMiArNDE5LDIzIEBACiAgICAgcy0+bGFzdF9mbHVzaCA9IFpfTk9fRkxVU0g7CiAKICAgICBfdHJfaW5pdChzKTsKLSAgICBsbV9pbml0KHMpOwogCiAgICAgcmV0dXJuIFpfT0s7CiB9CiAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KK2ludCBaRVhQT1JUIGRlZmxhdGVSZXNldCAoc3RybSkKKyAgICB6X3N0cmVhbXAgc3RybTsKK3sKKyAgICBpbnQgcmV0OworCisgICAgcmV0ID0gZGVmbGF0ZVJlc2V0S2VlcChzdHJtKTsKKyAgICBpZiAocmV0ID09IFpfT0spCisgICAgICAgIGxtX2luaXQoc3RybS0+c3RhdGUpOworICAgIHJldHVybiByZXQ7Cit9CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KIGludCBaRVhQT1JUIGRlZmxhdGVTZXRIZWFkZXIgKHN0cm0sIGhlYWQpCiAgICAgel9zdHJlYW1wIHN0cm07CiAgICAgZ3pfaGVhZGVycCBoZWFkOwpAQCAtMzk3LDE0ICs0NDcsNDIgQEAKIH0KIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworaW50IFpFWFBPUlQgZGVmbGF0ZVBlbmRpbmcgKHN0cm0sIHBlbmRpbmcsIGJpdHMpCisgICAgdW5zaWduZWQgKnBlbmRpbmc7CisgICAgaW50ICpiaXRzOworICAgIHpfc3RyZWFtcCBzdHJtOworeworICAgIGlmIChzdHJtID09IFpfTlVMTCB8fCBzdHJtLT5zdGF0ZSA9PSBaX05VTEwpIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKKyAgICBpZiAocGVuZGluZyAhPSBaX05VTEwpCisgICAgICAgICpwZW5kaW5nID0gc3RybS0+c3RhdGUtPnBlbmRpbmc7CisgICAgaWYgKGJpdHMgIT0gWl9OVUxMKQorICAgICAgICAqYml0cyA9IHN0cm0tPnN0YXRlLT5iaV92YWxpZDsKKyAgICByZXR1cm4gWl9PSzsKK30KKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogaW50IFpFWFBPUlQgZGVmbGF0ZVByaW1lIChzdHJtLCBiaXRzLCB2YWx1ZSkKICAgICB6X3N0cmVhbXAgc3RybTsKICAgICBpbnQgYml0czsKICAgICBpbnQgdmFsdWU7CiB7CisgICAgZGVmbGF0ZV9zdGF0ZSAqczsKKyAgICBpbnQgcHV0OworCiAgICAgaWYgKHN0cm0gPT0gWl9OVUxMIHx8IHN0cm0tPnN0YXRlID09IFpfTlVMTCkgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwotICAgIHN0cm0tPnN0YXRlLT5iaV92YWxpZCA9IGJpdHM7Ci0gICAgc3RybS0+c3RhdGUtPmJpX2J1ZiA9ICh1c2gpKHZhbHVlICYgKCgxIDw8IGJpdHMpIC0gMSkpOworICAgIHMgPSBzdHJtLT5zdGF0ZTsKKyAgICBpZiAoKEJ5dGVmICopKHMtPmRfYnVmKSA8IHMtPnBlbmRpbmdfb3V0ICsgKChCdWZfc2l6ZSArIDcpID4+IDMpKQorICAgICAgICByZXR1cm4gWl9CVUZfRVJST1I7CisgICAgZG8geworICAgICAgICBwdXQgPSBCdWZfc2l6ZSAtIHMtPmJpX3ZhbGlkOworICAgICAgICBpZiAocHV0ID4gYml0cykKKyAgICAgICAgICAgIHB1dCA9IGJpdHM7CisgICAgICAgIHMtPmJpX2J1ZiB8PSAodXNoKSgodmFsdWUgJiAoKDEgPDwgcHV0KSAtIDEpKSA8PCBzLT5iaV92YWxpZCk7CisgICAgICAgIHMtPmJpX3ZhbGlkICs9IHB1dDsKKyAgICAgICAgX3RyX2ZsdXNoX2JpdHMocyk7CisgICAgICAgIHZhbHVlID4+PSBwdXQ7CisgICAgICAgIGJpdHMgLT0gcHV0OworICAgIH0gd2hpbGUgKGJpdHMpOwogICAgIHJldHVybiBaX09LOwogfQogCkBAIC00MzUsNiArNTEzLDggQEAKICAgICAgICAgc3RybS0+dG90YWxfaW4gIT0gMCkgewogICAgICAgICAvKiBGbHVzaCB0aGUgbGFzdCBidWZmZXI6ICovCiAgICAgICAgIGVyciA9IGRlZmxhdGUoc3RybSwgWl9CTE9DSyk7CisgICAgICAgIGlmIChlcnIgPT0gWl9CVUZfRVJST1IgJiYgcy0+cGVuZGluZyA9PSAwKQorICAgICAgICAgICAgZXJyID0gWl9PSzsKICAgICB9CiAgICAgaWYgKHMtPmxldmVsICE9IGxldmVsKSB7CiAgICAgICAgIHMtPmxldmVsID0gbGV2ZWw7CkBAIC01NjIsMTkgKzY0MiwyMiBAQAogbG9jYWwgdm9pZCBmbHVzaF9wZW5kaW5nKHN0cm0pCiAgICAgel9zdHJlYW1wIHN0cm07CiB7Ci0gICAgdW5zaWduZWQgbGVuID0gc3RybS0+c3RhdGUtPnBlbmRpbmc7CisgICAgdW5zaWduZWQgbGVuOworICAgIGRlZmxhdGVfc3RhdGUgKnMgPSBzdHJtLT5zdGF0ZTsKIAorICAgIF90cl9mbHVzaF9iaXRzKHMpOworICAgIGxlbiA9IHMtPnBlbmRpbmc7CiAgICAgaWYgKGxlbiA+IHN0cm0tPmF2YWlsX291dCkgbGVuID0gc3RybS0+YXZhaWxfb3V0OwogICAgIGlmIChsZW4gPT0gMCkgcmV0dXJuOwogCi0gICAgem1lbWNweShzdHJtLT5uZXh0X291dCwgc3RybS0+c3RhdGUtPnBlbmRpbmdfb3V0LCBsZW4pOworICAgIHptZW1jcHkoc3RybS0+bmV4dF9vdXQsIHMtPnBlbmRpbmdfb3V0LCBsZW4pOwogICAgIHN0cm0tPm5leHRfb3V0ICArPSBsZW47Ci0gICAgc3RybS0+c3RhdGUtPnBlbmRpbmdfb3V0ICArPSBsZW47CisgICAgcy0+cGVuZGluZ19vdXQgICs9IGxlbjsKICAgICBzdHJtLT50b3RhbF9vdXQgKz0gbGVuOwogICAgIHN0cm0tPmF2YWlsX291dCAgLT0gbGVuOwotICAgIHN0cm0tPnN0YXRlLT5wZW5kaW5nIC09IGxlbjsKLSAgICBpZiAoc3RybS0+c3RhdGUtPnBlbmRpbmcgPT0gMCkgewotICAgICAgICBzdHJtLT5zdGF0ZS0+cGVuZGluZ19vdXQgPSBzdHJtLT5zdGF0ZS0+cGVuZGluZ19idWY7CisgICAgcy0+cGVuZGluZyAtPSBsZW47CisgICAgaWYgKHMtPnBlbmRpbmcgPT0gMCkgeworICAgICAgICBzLT5wZW5kaW5nX291dCA9IHMtPnBlbmRpbmdfYnVmOwogICAgIH0KIH0KIApAQCAtODAxLDcgKzg4NCw3IEBACiAgICAgICogZmx1c2hlcy4gRm9yIHJlcGVhdGVkIGFuZCB1c2VsZXNzIGNhbGxzIHdpdGggWl9GSU5JU0gsIHdlIGtlZXAKICAgICAgKiByZXR1cm5pbmcgWl9TVFJFQU1fRU5EIGluc3RlYWQgb2YgWl9CVUZfRVJST1IuCiAgICAgICovCi0gICAgfSBlbHNlIGlmIChzdHJtLT5hdmFpbF9pbiA9PSAwICYmIGZsdXNoIDw9IG9sZF9mbHVzaCAmJgorICAgIH0gZWxzZSBpZiAoc3RybS0+YXZhaWxfaW4gPT0gMCAmJiBSQU5LKGZsdXNoKSA8PSBSQU5LKG9sZF9mbHVzaCkgJiYKICAgICAgICAgICAgICAgIGZsdXNoICE9IFpfRklOSVNIKSB7CiAgICAgICAgIEVSUl9SRVRVUk4oc3RybSwgWl9CVUZfRVJST1IpOwogICAgIH0KQEAgLTg1MCw2ICs5MzMsNyBAQAogICAgICAgICAgICAgICAgICAgICBpZiAocy0+bG9va2FoZWFkID09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHMtPnN0cnN0YXJ0ID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgIHMtPmJsb2NrX3N0YXJ0ID0gMEw7CisgICAgICAgICAgICAgICAgICAgICAgICBzLT5pbnNlcnQgPSAwOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtOTQ1LDEyICsxMDI5LDEyIEBACiAKICAgICBzcyA9IHNvdXJjZS0+c3RhdGU7CiAKLSAgICB6bWVtY3B5KGRlc3QsIHNvdXJjZSwgc2l6ZW9mKHpfc3RyZWFtKSk7CisgICAgem1lbWNweSgodm9pZHBmKWRlc3QsICh2b2lkcGYpc291cmNlLCBzaXplb2Yoel9zdHJlYW0pKTsKIAogICAgIGRzID0gKGRlZmxhdGVfc3RhdGUgKikgWkFMTE9DKGRlc3QsIDEsIHNpemVvZihkZWZsYXRlX3N0YXRlKSk7CiAgICAgaWYgKGRzID09IFpfTlVMTCkgcmV0dXJuIFpfTUVNX0VSUk9SOwogICAgIGRlc3QtPnN0YXRlID0gKHN0cnVjdCBpbnRlcm5hbF9zdGF0ZSBGQVIgKikgZHM7Ci0gICAgem1lbWNweShkcywgc3MsIHNpemVvZihkZWZsYXRlX3N0YXRlKSk7CisgICAgem1lbWNweSgodm9pZHBmKWRzLCAodm9pZHBmKXNzLCBzaXplb2YoZGVmbGF0ZV9zdGF0ZSkpOwogICAgIGRzLT5zdHJtID0gZGVzdDsKIAogICAgIGRzLT53aW5kb3cgPSAoQnl0ZWYgKikgWkFMTE9DKGRlc3QsIGRzLT53X3NpemUsIDIqc2l6ZW9mKEJ5dGUpKTsKQEAgLTk2Niw4ICsxMDUwLDggQEAKICAgICB9CiAgICAgLyogZm9sbG93aW5nIHptZW1jcHkgZG8gbm90IHdvcmsgZm9yIDE2LWJpdCBNU0RPUyAqLwogICAgIHptZW1jcHkoZHMtPndpbmRvdywgc3MtPndpbmRvdywgZHMtPndfc2l6ZSAqIDIgKiBzaXplb2YoQnl0ZSkpOwotICAgIHptZW1jcHkoZHMtPnByZXYsIHNzLT5wcmV2LCBkcy0+d19zaXplICogc2l6ZW9mKFBvcykpOwotICAgIHptZW1jcHkoZHMtPmhlYWQsIHNzLT5oZWFkLCBkcy0+aGFzaF9zaXplICogc2l6ZW9mKFBvcykpOworICAgIHptZW1jcHkoKHZvaWRwZilkcy0+cHJldiwgKHZvaWRwZilzcy0+cHJldiwgZHMtPndfc2l6ZSAqIHNpemVvZihQb3MpKTsKKyAgICB6bWVtY3B5KCh2b2lkcGYpZHMtPmhlYWQsICh2b2lkcGYpc3MtPmhlYWQsIGRzLT5oYXNoX3NpemUgKiBzaXplb2YoUG9zKSk7CiAgICAgem1lbWNweShkcy0+cGVuZGluZ19idWYsIHNzLT5wZW5kaW5nX2J1ZiwgKHVJbnQpZHMtPnBlbmRpbmdfYnVmX3NpemUpOwogCiAgICAgZHMtPnBlbmRpbmdfb3V0ID0gZHMtPnBlbmRpbmdfYnVmICsgKHNzLT5wZW5kaW5nX291dCAtIHNzLT5wZW5kaW5nX2J1Zik7CkBAIC0xMDAxLDE1ICsxMDg1LDE1IEBACiAKICAgICBzdHJtLT5hdmFpbF9pbiAgLT0gbGVuOwogCisgICAgem1lbWNweShidWYsIHN0cm0tPm5leHRfaW4sIGxlbik7CiAgICAgaWYgKHN0cm0tPnN0YXRlLT53cmFwID09IDEpIHsKLSAgICAgICAgc3RybS0+YWRsZXIgPSBhZGxlcjMyKHN0cm0tPmFkbGVyLCBzdHJtLT5uZXh0X2luLCBsZW4pOworICAgICAgICBzdHJtLT5hZGxlciA9IGFkbGVyMzIoc3RybS0+YWRsZXIsIGJ1ZiwgbGVuKTsKICAgICB9CiAjaWZkZWYgR1pJUAogICAgIGVsc2UgaWYgKHN0cm0tPnN0YXRlLT53cmFwID09IDIpIHsKLSAgICAgICAgc3RybS0+YWRsZXIgPSBjcmMzMihzdHJtLT5hZGxlciwgc3RybS0+bmV4dF9pbiwgbGVuKTsKKyAgICAgICAgc3RybS0+YWRsZXIgPSBjcmMzMihzdHJtLT5hZGxlciwgYnVmLCBsZW4pOwogICAgIH0KICNlbmRpZgotICAgIHptZW1jcHkoYnVmLCBzdHJtLT5uZXh0X2luLCBsZW4pOwogICAgIHN0cm0tPm5leHRfaW4gICs9IGxlbjsKICAgICBzdHJtLT50b3RhbF9pbiArPSBsZW47CiAKQEAgLTEwMzYsNiArMTEyMCw3IEBACiAgICAgcy0+c3Ryc3RhcnQgPSAwOwogICAgIHMtPmJsb2NrX3N0YXJ0ID0gMEw7CiAgICAgcy0+bG9va2FoZWFkID0gMDsKKyAgICBzLT5pbnNlcnQgPSAwOwogICAgIHMtPm1hdGNoX2xlbmd0aCA9IHMtPnByZXZfbGVuZ3RoID0gTUlOX01BVENILTE7CiAgICAgcy0+bWF0Y2hfYXZhaWxhYmxlID0gMDsKICAgICBzLT5pbnNfaCA9IDA7CkBAIC0xMzEwLDYgKzEzOTUsOCBAQAogICAgIHVuc2lnbmVkIG1vcmU7ICAgIC8qIEFtb3VudCBvZiBmcmVlIHNwYWNlIGF0IHRoZSBlbmQgb2YgdGhlIHdpbmRvdy4gKi8KICAgICB1SW50IHdzaXplID0gcy0+d19zaXplOwogCisgICAgQXNzZXJ0KHMtPmxvb2thaGVhZCA8IE1JTl9MT09LQUhFQUQsICJhbHJlYWR5IGVub3VnaCBsb29rYWhlYWQiKTsKKwogICAgIGRvIHsKICAgICAgICAgbW9yZSA9ICh1bnNpZ25lZCkocy0+d2luZG93X3NpemUgLSh1bGcpcy0+bG9va2FoZWFkIC0odWxnKXMtPnN0cnN0YXJ0KTsKIApAQCAtMTM2Miw3ICsxNDQ5LDcgQEAKICNlbmRpZgogICAgICAgICAgICAgbW9yZSArPSB3c2l6ZTsKICAgICAgICAgfQotICAgICAgICBpZiAocy0+c3RybS0+YXZhaWxfaW4gPT0gMCkgcmV0dXJuOworICAgICAgICBpZiAocy0+c3RybS0+YXZhaWxfaW4gPT0gMCkgYnJlYWs7CiAKICAgICAgICAgLyogSWYgdGhlcmUgd2FzIG5vIHNsaWRpbmc6CiAgICAgICAgICAqICAgIHN0cnN0YXJ0IDw9IFdTSVpFK01BWF9ESVNULTEgJiYgbG9va2FoZWFkIDw9IE1JTl9MT09LQUhFQUQgLSAxICYmCkBAIC0xMzgxLDEyICsxNDY4LDI0IEBACiAgICAgICAgIHMtPmxvb2thaGVhZCArPSBuOwogCiAgICAgICAgIC8qIEluaXRpYWxpemUgdGhlIGhhc2ggdmFsdWUgbm93IHRoYXQgd2UgaGF2ZSBzb21lIGlucHV0OiAqLwotICAgICAgICBpZiAocy0+bG9va2FoZWFkID49IE1JTl9NQVRDSCkgewotICAgICAgICAgICAgcy0+aW5zX2ggPSBzLT53aW5kb3dbcy0+c3Ryc3RhcnRdOwotICAgICAgICAgICAgVVBEQVRFX0hBU0gocywgcy0+aW5zX2gsIHMtPndpbmRvd1tzLT5zdHJzdGFydCsxXSk7CisgICAgICAgIGlmIChzLT5sb29rYWhlYWQgKyBzLT5pbnNlcnQgPj0gTUlOX01BVENIKSB7CisgICAgICAgICAgICB1SW50IHN0ciA9IHMtPnN0cnN0YXJ0IC0gcy0+aW5zZXJ0OworICAgICAgICAgICAgcy0+aW5zX2ggPSBzLT53aW5kb3dbc3RyXTsKKyAgICAgICAgICAgIFVQREFURV9IQVNIKHMsIHMtPmluc19oLCBzLT53aW5kb3dbc3RyICsgMV0pOwogI2lmIE1JTl9NQVRDSCAhPSAzCiAgICAgICAgICAgICBDYWxsIFVQREFURV9IQVNIKCkgTUlOX01BVENILTMgbW9yZSB0aW1lcwogI2VuZGlmCisgICAgICAgICAgICB3aGlsZSAocy0+aW5zZXJ0KSB7CisgICAgICAgICAgICAgICAgVVBEQVRFX0hBU0gocywgcy0+aW5zX2gsIHMtPndpbmRvd1tzdHIgKyBNSU5fTUFUQ0gtMV0pOworI2lmbmRlZiBGQVNURVNUCisgICAgICAgICAgICAgICAgcy0+cHJldltzdHIgJiBzLT53X21hc2tdID0gcy0+aGVhZFtzLT5pbnNfaF07CisjZW5kaWYKKyAgICAgICAgICAgICAgICBzLT5oZWFkW3MtPmluc19oXSA9IChQb3Mpc3RyOworICAgICAgICAgICAgICAgIHN0cisrOworICAgICAgICAgICAgICAgIHMtPmluc2VydC0tOworICAgICAgICAgICAgICAgIGlmIChzLT5sb29rYWhlYWQgKyBzLT5pbnNlcnQgPCBNSU5fTUFUQ0gpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIC8qIElmIHRoZSB3aG9sZSBpbnB1dCBoYXMgbGVzcyB0aGFuIE1JTl9NQVRDSCBieXRlcywgaW5zX2ggaXMgZ2FyYmFnZSwKICAgICAgICAgICogYnV0IHRoaXMgaXMgbm90IGltcG9ydGFudCBzaW5jZSBvbmx5IGxpdGVyYWwgYnl0ZXMgd2lsbCBiZSBlbWl0dGVkLgpAQCAtMTQyNyw2ICsxNTI2LDkgQEAKICAgICAgICAgICAgIHMtPmhpZ2hfd2F0ZXIgKz0gaW5pdDsKICAgICAgICAgfQogICAgIH0KKworICAgIEFzc2VydCgodWxnKXMtPnN0cnN0YXJ0IDw9IHMtPndpbmRvd19zaXplIC0gTUlOX0xPT0tBSEVBRCwKKyAgICAgICAgICAgIm5vdCBlbm91Z2ggcm9vbSBmb3Igc2VhcmNoIik7CiB9CiAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMTUwNiw4ICsxNjA4LDE0IEBACiAgICAgICAgICAgICBGTFVTSF9CTE9DSyhzLCAwKTsKICAgICAgICAgfQogICAgIH0KLSAgICBGTFVTSF9CTE9DSyhzLCBmbHVzaCA9PSBaX0ZJTklTSCk7Ci0gICAgcmV0dXJuIGZsdXNoID09IFpfRklOSVNIID8gZmluaXNoX2RvbmUgOiBibG9ja19kb25lOworICAgIHMtPmluc2VydCA9IDA7CisgICAgaWYgKGZsdXNoID09IFpfRklOSVNIKSB7CisgICAgICAgIEZMVVNIX0JMT0NLKHMsIDEpOworICAgICAgICByZXR1cm4gZmluaXNoX2RvbmU7CisgICAgfQorICAgIGlmICgobG9uZylzLT5zdHJzdGFydCA+IHMtPmJsb2NrX3N0YXJ0KQorICAgICAgICBGTFVTSF9CTE9DSyhzLCAwKTsKKyAgICByZXR1cm4gYmxvY2tfZG9uZTsKIH0KIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0xNjAzLDggKzE3MTEsMTQgQEAKICAgICAgICAgfQogICAgICAgICBpZiAoYmZsdXNoKSBGTFVTSF9CTE9DSyhzLCAwKTsKICAgICB9Ci0gICAgRkxVU0hfQkxPQ0socywgZmx1c2ggPT0gWl9GSU5JU0gpOwotICAgIHJldHVybiBmbHVzaCA9PSBaX0ZJTklTSCA/IGZpbmlzaF9kb25lIDogYmxvY2tfZG9uZTsKKyAgICBzLT5pbnNlcnQgPSBzLT5zdHJzdGFydCA8IE1JTl9NQVRDSC0xID8gcy0+c3Ryc3RhcnQgOiBNSU5fTUFUQ0gtMTsKKyAgICBpZiAoZmx1c2ggPT0gWl9GSU5JU0gpIHsKKyAgICAgICAgRkxVU0hfQkxPQ0socywgMSk7CisgICAgICAgIHJldHVybiBmaW5pc2hfZG9uZTsKKyAgICB9CisgICAgaWYgKHMtPmxhc3RfbGl0KQorICAgICAgICBGTFVTSF9CTE9DSyhzLCAwKTsKKyAgICByZXR1cm4gYmxvY2tfZG9uZTsKIH0KIAogI2lmbmRlZiBGQVNURVNUCkBAIC0xNzI4LDggKzE4NDIsMTQgQEAKICAgICAgICAgX3RyX3RhbGx5X2xpdChzLCBzLT53aW5kb3dbcy0+c3Ryc3RhcnQtMV0sIGJmbHVzaCk7CiAgICAgICAgIHMtPm1hdGNoX2F2YWlsYWJsZSA9IDA7CiAgICAgfQotICAgIEZMVVNIX0JMT0NLKHMsIGZsdXNoID09IFpfRklOSVNIKTsKLSAgICByZXR1cm4gZmx1c2ggPT0gWl9GSU5JU0ggPyBmaW5pc2hfZG9uZSA6IGJsb2NrX2RvbmU7CisgICAgcy0+aW5zZXJ0ID0gcy0+c3Ryc3RhcnQgPCBNSU5fTUFUQ0gtMSA/IHMtPnN0cnN0YXJ0IDogTUlOX01BVENILTE7CisgICAgaWYgKGZsdXNoID09IFpfRklOSVNIKSB7CisgICAgICAgIEZMVVNIX0JMT0NLKHMsIDEpOworICAgICAgICByZXR1cm4gZmluaXNoX2RvbmU7CisgICAgfQorICAgIGlmIChzLT5sYXN0X2xpdCkKKyAgICAgICAgRkxVU0hfQkxPQ0socywgMCk7CisgICAgcmV0dXJuIGJsb2NrX2RvbmU7CiB9CiAjZW5kaWYgLyogRkFTVEVTVCAqLwogCkBAIC0xNzQ5LDExICsxODY5LDExIEBACiAgICAgZm9yICg7OykgewogICAgICAgICAvKiBNYWtlIHN1cmUgdGhhdCB3ZSBhbHdheXMgaGF2ZSBlbm91Z2ggbG9va2FoZWFkLCBleGNlcHQKICAgICAgICAgICogYXQgdGhlIGVuZCBvZiB0aGUgaW5wdXQgZmlsZS4gV2UgbmVlZCBNQVhfTUFUQ0ggYnl0ZXMKLSAgICAgICAgICogZm9yIHRoZSBsb25nZXN0IGVuY29kYWJsZSBydW4uCisgICAgICAgICAqIGZvciB0aGUgbG9uZ2VzdCBydW4sIHBsdXMgb25lIGZvciB0aGUgdW5yb2xsZWQgbG9vcC4KICAgICAgICAgICovCi0gICAgICAgIGlmIChzLT5sb29rYWhlYWQgPCBNQVhfTUFUQ0gpIHsKKyAgICAgICAgaWYgKHMtPmxvb2thaGVhZCA8PSBNQVhfTUFUQ0gpIHsKICAgICAgICAgICAgIGZpbGxfd2luZG93KHMpOwotICAgICAgICAgICAgaWYgKHMtPmxvb2thaGVhZCA8IE1BWF9NQVRDSCAmJiBmbHVzaCA9PSBaX05PX0ZMVVNIKSB7CisgICAgICAgICAgICBpZiAocy0+bG9va2FoZWFkIDw9IE1BWF9NQVRDSCAmJiBmbHVzaCA9PSBaX05PX0ZMVVNIKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG5lZWRfbW9yZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChzLT5sb29rYWhlYWQgPT0gMCkgYnJlYWs7IC8qIGZsdXNoIHRoZSBjdXJyZW50IGJsb2NrICovCkBAIC0xNzc2LDYgKzE4OTYsNyBAQAogICAgICAgICAgICAgICAgIGlmIChzLT5tYXRjaF9sZW5ndGggPiBzLT5sb29rYWhlYWQpCiAgICAgICAgICAgICAgICAgICAgIHMtPm1hdGNoX2xlbmd0aCA9IHMtPmxvb2thaGVhZDsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEFzc2VydChzY2FuIDw9IHMtPndpbmRvdysodUludCkocy0+d2luZG93X3NpemUtMSksICJ3aWxkIHNjYW4iKTsKICAgICAgICAgfQogCiAgICAgICAgIC8qIEVtaXQgbWF0Y2ggaWYgaGF2ZSBydW4gb2YgTUlOX01BVENIIG9yIGxvbmdlciwgZWxzZSBlbWl0IGxpdGVyYWwgKi8KQEAgLTE3OTYsOCArMTkxNywxNCBAQAogICAgICAgICB9CiAgICAgICAgIGlmIChiZmx1c2gpIEZMVVNIX0JMT0NLKHMsIDApOwogICAgIH0KLSAgICBGTFVTSF9CTE9DSyhzLCBmbHVzaCA9PSBaX0ZJTklTSCk7Ci0gICAgcmV0dXJuIGZsdXNoID09IFpfRklOSVNIID8gZmluaXNoX2RvbmUgOiBibG9ja19kb25lOworICAgIHMtPmluc2VydCA9IDA7CisgICAgaWYgKGZsdXNoID09IFpfRklOSVNIKSB7CisgICAgICAgIEZMVVNIX0JMT0NLKHMsIDEpOworICAgICAgICByZXR1cm4gZmluaXNoX2RvbmU7CisgICAgfQorICAgIGlmIChzLT5sYXN0X2xpdCkKKyAgICAgICAgRkxVU0hfQkxPQ0socywgMCk7CisgICAgcmV0dXJuIGJsb2NrX2RvbmU7CiB9CiAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMTgyOSw2ICsxOTU2LDEyIEBACiAgICAgICAgIHMtPnN0cnN0YXJ0Kys7CiAgICAgICAgIGlmIChiZmx1c2gpIEZMVVNIX0JMT0NLKHMsIDApOwogICAgIH0KLSAgICBGTFVTSF9CTE9DSyhzLCBmbHVzaCA9PSBaX0ZJTklTSCk7Ci0gICAgcmV0dXJuIGZsdXNoID09IFpfRklOSVNIID8gZmluaXNoX2RvbmUgOiBibG9ja19kb25lOworICAgIHMtPmluc2VydCA9IDA7CisgICAgaWYgKGZsdXNoID09IFpfRklOSVNIKSB7CisgICAgICAgIEZMVVNIX0JMT0NLKHMsIDEpOworICAgICAgICByZXR1cm4gZmluaXNoX2RvbmU7CisgICAgfQorICAgIGlmIChzLT5sYXN0X2xpdCkKKyAgICAgICAgRkxVU0hfQkxPQ0socywgMCk7CisgICAgcmV0dXJuIGJsb2NrX2RvbmU7CiB9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvZGVmbGF0ZS5oIGIvTW9kdWxlcy96bGliL2RlZmxhdGUuaAppbmRleCBjYmYwZDFlLi5jZTAyOTllIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvZGVmbGF0ZS5oCisrKyBiL01vZHVsZXMvemxpYi9kZWZsYXRlLmgKQEAgLTEsNSArMSw1IEBACiAvKiBkZWZsYXRlLmggLS0gaW50ZXJuYWwgY29tcHJlc3Npb24gc3RhdGUKLSAqIENvcHlyaWdodCAoQykgMTk5NS0yMDEwIEplYW4tbG91cCBHYWlsbHkKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDEyIEplYW4tbG91cCBHYWlsbHkKICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKICAqLwogCkBAIC00OCw2ICs0OCw5IEBACiAjZGVmaW5lIE1BWF9CSVRTIDE1CiAvKiBBbGwgY29kZXMgbXVzdCBub3QgZXhjZWVkIE1BWF9CSVRTIGJpdHMgKi8KIAorI2RlZmluZSBCdWZfc2l6ZSAxNgorLyogc2l6ZSBvZiBiaXQgYnVmZmVyIGluIGJpX2J1ZiAqLworCiAjZGVmaW5lIElOSVRfU1RBVEUgICAgNDIKICNkZWZpbmUgRVhUUkFfU1RBVEUgICA2OQogI2RlZmluZSBOQU1FX1NUQVRFICAgIDczCkBAIC0xMDEsNyArMTA0LDcgQEAKICAgICBpbnQgICB3cmFwOyAgICAgICAgICAvKiBiaXQgMCB0cnVlIGZvciB6bGliLCBiaXQgMSB0cnVlIGZvciBnemlwICovCiAgICAgZ3pfaGVhZGVycCAgZ3poZWFkOyAgLyogZ3ppcCBoZWFkZXIgaW5mb3JtYXRpb24gdG8gd3JpdGUgKi8KICAgICB1SW50ICAgZ3ppbmRleDsgICAgICAvKiB3aGVyZSBpbiBleHRyYSwgbmFtZSwgb3IgY29tbWVudCAqLwotICAgIEJ5dGUgIG1ldGhvZDsgICAgICAgIC8qIFNUT1JFRCAoZm9yIHppcCBvbmx5KSBvciBERUZMQVRFRCAqLworICAgIEJ5dGUgIG1ldGhvZDsgICAgICAgIC8qIGNhbiBvbmx5IGJlIERFRkxBVEVEICovCiAgICAgaW50ICAgbGFzdF9mbHVzaDsgICAgLyogdmFsdWUgb2YgZmx1c2ggcGFyYW0gZm9yIHByZXZpb3VzIGRlZmxhdGUgY2FsbCAqLwogCiAgICAgICAgICAgICAgICAgLyogdXNlZCBieSBkZWZsYXRlLmM6ICovCkBAIC0xODgsNyArMTkxLDcgQEAKICAgICBpbnQgbmljZV9tYXRjaDsgLyogU3RvcCBzZWFyY2hpbmcgd2hlbiBjdXJyZW50IG1hdGNoIGV4Y2VlZHMgdGhpcyAqLwogCiAgICAgICAgICAgICAgICAgLyogdXNlZCBieSB0cmVlcy5jOiAqLwotICAgIC8qIERpZG4ndCB1c2UgY3RfZGF0YSB0eXBlZGVmIGJlbG93IHRvIHN1cHJlc3MgY29tcGlsZXIgd2FybmluZyAqLworICAgIC8qIERpZG4ndCB1c2UgY3RfZGF0YSB0eXBlZGVmIGJlbG93IHRvIHN1cHByZXNzIGNvbXBpbGVyIHdhcm5pbmcgKi8KICAgICBzdHJ1Y3QgY3RfZGF0YV9zIGR5bl9sdHJlZVtIRUFQX1NJWkVdOyAgIC8qIGxpdGVyYWwgYW5kIGxlbmd0aCB0cmVlICovCiAgICAgc3RydWN0IGN0X2RhdGFfcyBkeW5fZHRyZWVbMipEX0NPREVTKzFdOyAvKiBkaXN0YW5jZSB0cmVlICovCiAgICAgc3RydWN0IGN0X2RhdGFfcyBibF90cmVlWzIqQkxfQ09ERVMrMV07ICAvKiBIdWZmbWFuIHRyZWUgZm9yIGJpdCBsZW5ndGhzICovCkBAIC0yNDQsNyArMjQ3LDcgQEAKICAgICB1bGcgb3B0X2xlbjsgICAgICAgIC8qIGJpdCBsZW5ndGggb2YgY3VycmVudCBibG9jayB3aXRoIG9wdGltYWwgdHJlZXMgKi8KICAgICB1bGcgc3RhdGljX2xlbjsgICAgIC8qIGJpdCBsZW5ndGggb2YgY3VycmVudCBibG9jayB3aXRoIHN0YXRpYyB0cmVlcyAqLwogICAgIHVJbnQgbWF0Y2hlczsgICAgICAgLyogbnVtYmVyIG9mIHN0cmluZyBtYXRjaGVzIGluIGN1cnJlbnQgYmxvY2sgKi8KLSAgICBpbnQgbGFzdF9lb2JfbGVuOyAgIC8qIGJpdCBsZW5ndGggb2YgRU9CIGNvZGUgZm9yIGxhc3QgYmxvY2sgKi8KKyAgICB1SW50IGluc2VydDsgICAgICAgIC8qIGJ5dGVzIGF0IGVuZCBvZiB3aW5kb3cgbGVmdCB0byBpbnNlcnQgKi8KIAogI2lmZGVmIERFQlVHCiAgICAgdWxnIGNvbXByZXNzZWRfbGVuOyAvKiB0b3RhbCBiaXQgbGVuZ3RoIG9mIGNvbXByZXNzZWQgZmlsZSBtb2QgMl4zMiAqLwpAQCAtMjk0LDYgKzI5Nyw3IEBACiBpbnQgWkxJQl9JTlRFUk5BTCBfdHJfdGFsbHkgT0YoKGRlZmxhdGVfc3RhdGUgKnMsIHVuc2lnbmVkIGRpc3QsIHVuc2lnbmVkIGxjKSk7CiB2b2lkIFpMSUJfSU5URVJOQUwgX3RyX2ZsdXNoX2Jsb2NrIE9GKChkZWZsYXRlX3N0YXRlICpzLCBjaGFyZiAqYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgdWxnIHN0b3JlZF9sZW4sIGludCBsYXN0KSk7Cit2b2lkIFpMSUJfSU5URVJOQUwgX3RyX2ZsdXNoX2JpdHMgT0YoKGRlZmxhdGVfc3RhdGUgKnMpKTsKIHZvaWQgWkxJQl9JTlRFUk5BTCBfdHJfYWxpZ24gT0YoKGRlZmxhdGVfc3RhdGUgKnMpKTsKIHZvaWQgWkxJQl9JTlRFUk5BTCBfdHJfc3RvcmVkX2Jsb2NrIE9GKChkZWZsYXRlX3N0YXRlICpzLCBjaGFyZiAqYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgdWxnIHN0b3JlZF9sZW4sIGludCBsYXN0KSk7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvZXhhbXBsZS5jIGIvTW9kdWxlcy96bGliL2V4YW1wbGUuYwppbmRleCA2MDQ3MzZmLi4xMzhhNjk5IDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvZXhhbXBsZS5jCisrKyBiL01vZHVsZXMvemxpYi9leGFtcGxlLmMKQEAgLTEsNSArMSw1IEBACiAvKiBleGFtcGxlLmMgLS0gdXNhZ2UgZXhhbXBsZSBvZiB0aGUgemxpYiBjb21wcmVzc2lvbiBsaWJyYXJ5Ci0gKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwNiBKZWFuLWxvdXAgR2FpbGx5LgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMDYsIDIwMTEgSmVhbi1sb3VwIEdhaWxseS4KICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKICAqLwogCkBAIC0yNiw3ICsyNiw3IEBACiAgICAgfSBcCiB9CiAKLWNvbnN0IGNoYXIgaGVsbG9bXSA9ICJoZWxsbywgaGVsbG8hIjsKK3pfY29uc3QgY2hhciBoZWxsb1tdID0gImhlbGxvLCBoZWxsbyEiOwogLyogImhlbGxvIHdvcmxkIiB3b3VsZCBiZSBtb3JlIHN0YW5kYXJkLCBidXQgdGhlIHJlcGVhdGVkICJoZWxsbyIKICAqIHN0cmVzc2VzIHRoZSBjb21wcmVzc2lvbiBjb2RlIGJldHRlciwgc29ycnkuLi4KICAqLwpAQCAtMzQsMTAgKzM0LDYgQEAKIGNvbnN0IGNoYXIgZGljdGlvbmFyeVtdID0gImhlbGxvIjsKIHVMb25nIGRpY3RJZDsgLyogQWRsZXIzMiB2YWx1ZSBvZiB0aGUgZGljdGlvbmFyeSAqLwogCi12b2lkIHRlc3RfY29tcHJlc3MgICAgICBPRigoQnl0ZSAqY29tcHIsIHVMb25nIGNvbXByTGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ5dGUgKnVuY29tcHIsIHVMb25nIHVuY29tcHJMZW4pKTsKLXZvaWQgdGVzdF9nemlvICAgICAgICAgIE9GKChjb25zdCBjaGFyICpmbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBCeXRlICp1bmNvbXByLCB1TG9uZyB1bmNvbXByTGVuKSk7CiB2b2lkIHRlc3RfZGVmbGF0ZSAgICAgICBPRigoQnl0ZSAqY29tcHIsIHVMb25nIGNvbXByTGVuKSk7CiB2b2lkIHRlc3RfaW5mbGF0ZSAgICAgICBPRigoQnl0ZSAqY29tcHIsIHVMb25nIGNvbXByTGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ5dGUgKnVuY29tcHIsIHVMb25nIHVuY29tcHJMZW4pKTsKQEAgLTUzLDYgKzQ5LDM5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnl0ZSAqdW5jb21wciwgdUxvbmcgdW5jb21wckxlbikpOwogaW50ICBtYWluICAgICAgICAgICAgICAgT0YoKGludCBhcmdjLCBjaGFyICphcmd2W10pKTsKIAorCisjaWZkZWYgWl9TT0xPCisKK3ZvaWQgKm15YWxsb2MgT0YoKHZvaWQgKiwgdW5zaWduZWQsIHVuc2lnbmVkKSk7Cit2b2lkIG15ZnJlZSBPRigodm9pZCAqLCB2b2lkICopKTsKKwordm9pZCAqbXlhbGxvYyhxLCBuLCBtKQorICAgIHZvaWQgKnE7CisgICAgdW5zaWduZWQgbiwgbTsKK3sKKyAgICBxID0gWl9OVUxMOworICAgIHJldHVybiBjYWxsb2MobiwgbSk7Cit9CisKK3ZvaWQgbXlmcmVlKHZvaWQgKnEsIHZvaWQgKnApCit7CisgICAgcSA9IFpfTlVMTDsKKyAgICBmcmVlKHApOworfQorCitzdGF0aWMgYWxsb2NfZnVuYyB6YWxsb2MgPSBteWFsbG9jOworc3RhdGljIGZyZWVfZnVuYyB6ZnJlZSA9IG15ZnJlZTsKKworI2Vsc2UgLyogIVpfU09MTyAqLworCitzdGF0aWMgYWxsb2NfZnVuYyB6YWxsb2MgPSAoYWxsb2NfZnVuYykwOworc3RhdGljIGZyZWVfZnVuYyB6ZnJlZSA9IChmcmVlX2Z1bmMpMDsKKwordm9pZCB0ZXN0X2NvbXByZXNzICAgICAgT0YoKEJ5dGUgKmNvbXByLCB1TG9uZyBjb21wckxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCeXRlICp1bmNvbXByLCB1TG9uZyB1bmNvbXByTGVuKSk7Cit2b2lkIHRlc3RfZ3ppbyAgICAgICAgICBPRigoY29uc3QgY2hhciAqZm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnl0ZSAqdW5jb21wciwgdUxvbmcgdW5jb21wckxlbikpOworCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqIFRlc3QgY29tcHJlc3MoKSBhbmQgdW5jb21wcmVzcygpCiAgKi8KQEAgLTE2Myw2ICsxOTIsOCBAQAogI2VuZGlmCiB9CiAKKyNlbmRpZiAvKiBaX1NPTE8gKi8KKwogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKiBUZXN0IGRlZmxhdGUoKSB3aXRoIHNtYWxsIGJ1ZmZlcnMKICAqLwpAQCAtMTc0LDE0ICsyMDUsMTQgQEAKICAgICBpbnQgZXJyOwogICAgIHVMb25nIGxlbiA9ICh1TG9uZylzdHJsZW4oaGVsbG8pKzE7CiAKLSAgICBjX3N0cmVhbS56YWxsb2MgPSAoYWxsb2NfZnVuYykwOwotICAgIGNfc3RyZWFtLnpmcmVlID0gKGZyZWVfZnVuYykwOworICAgIGNfc3RyZWFtLnphbGxvYyA9IHphbGxvYzsKKyAgICBjX3N0cmVhbS56ZnJlZSA9IHpmcmVlOwogICAgIGNfc3RyZWFtLm9wYXF1ZSA9ICh2b2lkcGYpMDsKIAogICAgIGVyciA9IGRlZmxhdGVJbml0KCZjX3N0cmVhbSwgWl9ERUZBVUxUX0NPTVBSRVNTSU9OKTsKICAgICBDSEVDS19FUlIoZXJyLCAiZGVmbGF0ZUluaXQiKTsKIAotICAgIGNfc3RyZWFtLm5leHRfaW4gID0gKEJ5dGVmKiloZWxsbzsKKyAgICBjX3N0cmVhbS5uZXh0X2luICA9ICh6X2NvbnN0IHVuc2lnbmVkIGNoYXIgKiloZWxsbzsKICAgICBjX3N0cmVhbS5uZXh0X291dCA9IGNvbXByOwogCiAgICAgd2hpbGUgKGNfc3RyZWFtLnRvdGFsX2luICE9IGxlbiAmJiBjX3N0cmVhbS50b3RhbF9vdXQgPCBjb21wckxlbikgewpAQCAtMjEzLDggKzI0NCw4IEBACiAKICAgICBzdHJjcHkoKGNoYXIqKXVuY29tcHIsICJnYXJiYWdlIik7CiAKLSAgICBkX3N0cmVhbS56YWxsb2MgPSAoYWxsb2NfZnVuYykwOwotICAgIGRfc3RyZWFtLnpmcmVlID0gKGZyZWVfZnVuYykwOworICAgIGRfc3RyZWFtLnphbGxvYyA9IHphbGxvYzsKKyAgICBkX3N0cmVhbS56ZnJlZSA9IHpmcmVlOwogICAgIGRfc3RyZWFtLm9wYXF1ZSA9ICh2b2lkcGYpMDsKIAogICAgIGRfc3RyZWFtLm5leHRfaW4gID0gY29tcHI7CkBAIC0yNTIsOCArMjgzLDggQEAKICAgICB6X3N0cmVhbSBjX3N0cmVhbTsgLyogY29tcHJlc3Npb24gc3RyZWFtICovCiAgICAgaW50IGVycjsKIAotICAgIGNfc3RyZWFtLnphbGxvYyA9IChhbGxvY19mdW5jKTA7Ci0gICAgY19zdHJlYW0uemZyZWUgPSAoZnJlZV9mdW5jKTA7CisgICAgY19zdHJlYW0uemFsbG9jID0gemFsbG9jOworICAgIGNfc3RyZWFtLnpmcmVlID0gemZyZWU7CiAgICAgY19zdHJlYW0ub3BhcXVlID0gKHZvaWRwZikwOwogCiAgICAgZXJyID0gZGVmbGF0ZUluaXQoJmNfc3RyZWFtLCBaX0JFU1RfU1BFRUQpOwpAQCAtMzA5LDggKzM0MCw4IEBACiAKICAgICBzdHJjcHkoKGNoYXIqKXVuY29tcHIsICJnYXJiYWdlIik7CiAKLSAgICBkX3N0cmVhbS56YWxsb2MgPSAoYWxsb2NfZnVuYykwOwotICAgIGRfc3RyZWFtLnpmcmVlID0gKGZyZWVfZnVuYykwOworICAgIGRfc3RyZWFtLnphbGxvYyA9IHphbGxvYzsKKyAgICBkX3N0cmVhbS56ZnJlZSA9IHpmcmVlOwogICAgIGRfc3RyZWFtLm9wYXF1ZSA9ICh2b2lkcGYpMDsKIAogICAgIGRfc3RyZWFtLm5leHRfaW4gID0gY29tcHI7CkBAIC0zNDksMTQgKzM4MCwxNCBAQAogICAgIGludCBlcnI7CiAgICAgdUludCBsZW4gPSAodUludClzdHJsZW4oaGVsbG8pKzE7CiAKLSAgICBjX3N0cmVhbS56YWxsb2MgPSAoYWxsb2NfZnVuYykwOwotICAgIGNfc3RyZWFtLnpmcmVlID0gKGZyZWVfZnVuYykwOworICAgIGNfc3RyZWFtLnphbGxvYyA9IHphbGxvYzsKKyAgICBjX3N0cmVhbS56ZnJlZSA9IHpmcmVlOwogICAgIGNfc3RyZWFtLm9wYXF1ZSA9ICh2b2lkcGYpMDsKIAogICAgIGVyciA9IGRlZmxhdGVJbml0KCZjX3N0cmVhbSwgWl9ERUZBVUxUX0NPTVBSRVNTSU9OKTsKICAgICBDSEVDS19FUlIoZXJyLCAiZGVmbGF0ZUluaXQiKTsKIAotICAgIGNfc3RyZWFtLm5leHRfaW4gID0gKEJ5dGVmKiloZWxsbzsKKyAgICBjX3N0cmVhbS5uZXh0X2luICA9ICh6X2NvbnN0IHVuc2lnbmVkIGNoYXIgKiloZWxsbzsKICAgICBjX3N0cmVhbS5uZXh0X291dCA9IGNvbXByOwogICAgIGNfc3RyZWFtLmF2YWlsX2luID0gMzsKICAgICBjX3N0cmVhbS5hdmFpbF9vdXQgPSAodUludCkqY29tcHJMZW47CkBAIC0zODgsOCArNDE5LDggQEAKIAogICAgIHN0cmNweSgoY2hhciopdW5jb21wciwgImdhcmJhZ2UiKTsKIAotICAgIGRfc3RyZWFtLnphbGxvYyA9IChhbGxvY19mdW5jKTA7Ci0gICAgZF9zdHJlYW0uemZyZWUgPSAoZnJlZV9mdW5jKTA7CisgICAgZF9zdHJlYW0uemFsbG9jID0gemFsbG9jOworICAgIGRfc3RyZWFtLnpmcmVlID0gemZyZWU7CiAgICAgZF9zdHJlYW0ub3BhcXVlID0gKHZvaWRwZikwOwogCiAgICAgZF9zdHJlYW0ubmV4dF9pbiAgPSBjb21wcjsKQEAgLTQzMCwyMiArNDYxLDIyIEBACiAgICAgel9zdHJlYW0gY19zdHJlYW07IC8qIGNvbXByZXNzaW9uIHN0cmVhbSAqLwogICAgIGludCBlcnI7CiAKLSAgICBjX3N0cmVhbS56YWxsb2MgPSAoYWxsb2NfZnVuYykwOwotICAgIGNfc3RyZWFtLnpmcmVlID0gKGZyZWVfZnVuYykwOworICAgIGNfc3RyZWFtLnphbGxvYyA9IHphbGxvYzsKKyAgICBjX3N0cmVhbS56ZnJlZSA9IHpmcmVlOwogICAgIGNfc3RyZWFtLm9wYXF1ZSA9ICh2b2lkcGYpMDsKIAogICAgIGVyciA9IGRlZmxhdGVJbml0KCZjX3N0cmVhbSwgWl9CRVNUX0NPTVBSRVNTSU9OKTsKICAgICBDSEVDS19FUlIoZXJyLCAiZGVmbGF0ZUluaXQiKTsKIAogICAgIGVyciA9IGRlZmxhdGVTZXREaWN0aW9uYXJ5KCZjX3N0cmVhbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgQnl0ZWYqKWRpY3Rpb25hcnksIHNpemVvZihkaWN0aW9uYXJ5KSk7CisgICAgICAgICAgICAgICAgKGNvbnN0IEJ5dGVmKilkaWN0aW9uYXJ5LCAoaW50KXNpemVvZihkaWN0aW9uYXJ5KSk7CiAgICAgQ0hFQ0tfRVJSKGVyciwgImRlZmxhdGVTZXREaWN0aW9uYXJ5Iik7CiAKICAgICBkaWN0SWQgPSBjX3N0cmVhbS5hZGxlcjsKICAgICBjX3N0cmVhbS5uZXh0X291dCA9IGNvbXByOwogICAgIGNfc3RyZWFtLmF2YWlsX291dCA9ICh1SW50KWNvbXByTGVuOwogCi0gICAgY19zdHJlYW0ubmV4dF9pbiA9IChCeXRlZiopaGVsbG87CisgICAgY19zdHJlYW0ubmV4dF9pbiA9ICh6X2NvbnN0IHVuc2lnbmVkIGNoYXIgKiloZWxsbzsKICAgICBjX3N0cmVhbS5hdmFpbF9pbiA9ICh1SW50KXN0cmxlbihoZWxsbykrMTsKIAogICAgIGVyciA9IGRlZmxhdGUoJmNfc3RyZWFtLCBaX0ZJTklTSCk7CkBAIC00NjksOCArNTAwLDggQEAKIAogICAgIHN0cmNweSgoY2hhciopdW5jb21wciwgImdhcmJhZ2UiKTsKIAotICAgIGRfc3RyZWFtLnphbGxvYyA9IChhbGxvY19mdW5jKTA7Ci0gICAgZF9zdHJlYW0uemZyZWUgPSAoZnJlZV9mdW5jKTA7CisgICAgZF9zdHJlYW0uemFsbG9jID0gemFsbG9jOworICAgIGRfc3RyZWFtLnpmcmVlID0gemZyZWU7CiAgICAgZF9zdHJlYW0ub3BhcXVlID0gKHZvaWRwZikwOwogCiAgICAgZF9zdHJlYW0ubmV4dF9pbiAgPSBjb21wcjsKQEAgLTQ5MSw3ICs1MjIsNyBAQAogICAgICAgICAgICAgICAgIGV4aXQoMSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlcnIgPSBpbmZsYXRlU2V0RGljdGlvbmFyeSgmZF9zdHJlYW0sIChjb25zdCBCeXRlZiopZGljdGlvbmFyeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihkaWN0aW9uYXJ5KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KXNpemVvZihkaWN0aW9uYXJ5KSk7CiAgICAgICAgIH0KICAgICAgICAgQ0hFQ0tfRVJSKGVyciwgImluZmxhdGUgd2l0aCBkaWN0Iik7CiAgICAgfQpAQCAtNTQwLDEwICs1NzEsMTUgQEAKICAgICAgICAgcHJpbnRmKCJvdXQgb2YgbWVtb3J5XG4iKTsKICAgICAgICAgZXhpdCgxKTsKICAgICB9CisKKyNpZmRlZiBaX1NPTE8KKyAgICBhcmdjID0gc3RybGVuKGFyZ3ZbMF0pOworI2Vsc2UKICAgICB0ZXN0X2NvbXByZXNzKGNvbXByLCBjb21wckxlbiwgdW5jb21wciwgdW5jb21wckxlbik7CiAKICAgICB0ZXN0X2d6aW8oKGFyZ2MgPiAxID8gYXJndlsxXSA6IFRFU1RGSUxFKSwKICAgICAgICAgICAgICAgdW5jb21wciwgdW5jb21wckxlbik7CisjZW5kaWYKIAogICAgIHRlc3RfZGVmbGF0ZShjb21wciwgY29tcHJMZW4pOwogICAgIHRlc3RfaW5mbGF0ZShjb21wciwgY29tcHJMZW4sIHVuY29tcHIsIHVuY29tcHJMZW4pOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL2d6Z3V0cy5oIGIvTW9kdWxlcy96bGliL2d6Z3V0cy5oCmluZGV4IDBmOGZiNzkuLmQ4NzY1OWQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi9nemd1dHMuaAorKysgYi9Nb2R1bGVzL3psaWIvZ3pndXRzLmgKQEAgLTEsNSArMSw1IEBACiAvKiBnemd1dHMuaCAtLSB6bGliIGludGVybmFsIGhlYWRlciBkZWZpbml0aW9ucyBmb3IgZ3oqIG9wZXJhdGlvbnMKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAxMCBNYXJrIEFkbGVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMTAsIDIwMTEsIDIwMTIsIDIwMTMgTWFyayBBZGxlcgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAogICovCiAKQEAgLTEyLDcgKzEyLDcgQEAKICMgIGVuZGlmCiAjZW5kaWYKIAotI2lmICgoX19HTlVDX18tMCkgKiAxMCArIF9fR05VQ19NSU5PUl9fLTAgPj0gMzMpICYmICFkZWZpbmVkKE5PX1ZJWikKKyNpZmRlZiBIQVZFX0hJRERFTgogIyAgZGVmaW5lIFpMSUJfSU5URVJOQUwgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImhpZGRlbiIpKSkKICNlbHNlCiAjICBkZWZpbmUgWkxJQl9JTlRFUk5BTApAQCAtMjcsMTMgKzI3LDgwIEBACiAjZW5kaWYKICNpbmNsdWRlIDxmY250bC5oPgogCisjaWZkZWYgX1dJTjMyCisjICBpbmNsdWRlIDxzdGRkZWYuaD4KKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX1RVUkJPQ19fKSB8fCBkZWZpbmVkKF9NU0NfVkVSKSB8fCBkZWZpbmVkKF9XSU4zMikKKyMgIGluY2x1ZGUgPGlvLmg+CisjZW5kaWYKKworI2lmZGVmIFdJTkFQSV9GQU1JTFkKKyMgIGRlZmluZSBvcGVuIF9vcGVuCisjICBkZWZpbmUgcmVhZCBfcmVhZAorIyAgZGVmaW5lIHdyaXRlIF93cml0ZQorIyAgZGVmaW5lIGNsb3NlIF9jbG9zZQorI2VuZGlmCisKICNpZmRlZiBOT19ERUZMQVRFICAgICAgIC8qIGZvciBjb21wYXRpYmlsaXR5IHdpdGggb2xkIGRlZmluaXRpb24gKi8KICMgIGRlZmluZSBOT19HWkNPTVBSRVNTCiAjZW5kaWYKIAorI2lmIGRlZmluZWQoU1REQzk5KSB8fCAoZGVmaW5lZChfX1RVUkJPQ19fKSAmJiBfX1RVUkJPQ19fID49IDB4NTUwKQorIyAgaWZuZGVmIEhBVkVfVlNOUFJJTlRGCisjICAgIGRlZmluZSBIQVZFX1ZTTlBSSU5URgorIyAgZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX0NZR1dJTl9fKQorIyAgaWZuZGVmIEhBVkVfVlNOUFJJTlRGCisjICAgIGRlZmluZSBIQVZFX1ZTTlBSSU5URgorIyAgZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNU0RPUykgJiYgZGVmaW5lZChfX0JPUkxBTkRDX18pICYmIChCT1JMQU5EQyA+IDB4NDEwKQorIyAgaWZuZGVmIEhBVkVfVlNOUFJJTlRGCisjICAgIGRlZmluZSBIQVZFX1ZTTlBSSU5URgorIyAgZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIEhBVkVfVlNOUFJJTlRGCisjICBpZmRlZiBNU0RPUworLyogdnNucHJpbnRmIG1heSBleGlzdCBvbiBzb21lIE1TLURPUyBjb21waWxlcnMgKERKR1BQPyksCisgICBidXQgZm9yIG5vdyB3ZSBqdXN0IGFzc3VtZSBpdCBkb2Vzbid0LiAqLworIyAgICBkZWZpbmUgTk9fdnNucHJpbnRmCisjICBlbmRpZgorIyAgaWZkZWYgX19UVVJCT0NfXworIyAgICBkZWZpbmUgTk9fdnNucHJpbnRmCisjICBlbmRpZgorIyAgaWZkZWYgV0lOMzIKKy8qIEluIFdpbjMyLCB2c25wcmludGYgaXMgYXZhaWxhYmxlIGFzIHRoZSAibm9uLUFOU0kiIF92c25wcmludGYuICovCisjICAgIGlmICFkZWZpbmVkKHZzbnByaW50ZikgJiYgIWRlZmluZWQoTk9fdnNucHJpbnRmKQorIyAgICAgIGlmICFkZWZpbmVkKF9NU0NfVkVSKSB8fCAoIGRlZmluZWQoX01TQ19WRVIpICYmIF9NU0NfVkVSIDwgMTUwMCApCisjICAgICAgICAgZGVmaW5lIHZzbnByaW50ZiBfdnNucHJpbnRmCisjICAgICAgZW5kaWYKKyMgICAgZW5kaWYKKyMgIGVuZGlmCisjICBpZmRlZiBfX1NBU0MKKyMgICAgZGVmaW5lIE5PX3ZzbnByaW50ZgorIyAgZW5kaWYKKyMgIGlmZGVmIFZNUworIyAgICBkZWZpbmUgTk9fdnNucHJpbnRmCisjICBlbmRpZgorIyAgaWZkZWYgX19PUzQwMF9fCisjICAgIGRlZmluZSBOT192c25wcmludGYKKyMgIGVuZGlmCisjICBpZmRlZiBfX01WU19fCisjICAgIGRlZmluZSBOT192c25wcmludGYKKyMgIGVuZGlmCisjZW5kaWYKKworLyogdW5saWtlIHNucHJpbnRmICh3aGljaCBpcyByZXF1aXJlZCBpbiBDOTksIHlldCBzdGlsbCBub3Qgc3VwcG9ydGVkIGJ5CisgICBNaWNyb3NvZnQgbW9yZSB0aGFuIGEgZGVjYWRlIGxhdGVyISksIF9zbnByaW50ZiBkb2VzIG5vdCBndWFyYW50ZWUgbnVsbAorICAgdGVybWluYXRpb24gb2YgdGhlIHJlc3VsdCAtLSBob3dldmVyIHRoaXMgaXMgb25seSB1c2VkIGluIGd6bGliLmMgd2hlcmUKKyAgIHRoZSByZXN1bHQgaXMgYXNzdXJlZCB0byBmaXQgaW4gdGhlIHNwYWNlIHByb3ZpZGVkICovCiAjaWZkZWYgX01TQ19WRVIKLSMgIGluY2x1ZGUgPGlvLmg+Ci0jICBkZWZpbmUgdnNucHJpbnRmIF92c25wcmludGYKKyMgIGRlZmluZSBzbnByaW50ZiBfc25wcmludGYKICNlbmRpZgogCiAjaWZuZGVmIGxvY2FsCkBAIC01Miw3ICsxMTksNyBAQAogIyAgaW5jbHVkZSA8d2luZG93cy5oPgogIyAgZGVmaW5lIHpzdHJlcnJvcigpIGd6X3N0cndpbmVycm9yKChEV09SRClHZXRMYXN0RXJyb3IoKSkKICNlbHNlCi0jICBpZmRlZiBTVERDCisjICBpZm5kZWYgTk9fU1RSRVJST1IKICMgICAgaW5jbHVkZSA8ZXJybm8uaD4KICMgICAgZGVmaW5lIHpzdHJlcnJvcigpIHN0cmVycm9yKGVycm5vKQogIyAgZWxzZQpAQCAtNjgsNyArMTM1LDE1IEBACiAgICAgWkVYVEVSTiB6X29mZjY0X3QgWkVYUE9SVCBnem9mZnNldDY0IE9GKChnekZpbGUpKTsKICNlbmRpZgogCi0vKiBkZWZhdWx0IGkvbyBidWZmZXIgc2l6ZSAtLSBkb3VibGUgdGhpcyBmb3Igb3V0cHV0IHdoZW4gcmVhZGluZyAqLworLyogZGVmYXVsdCBtZW1MZXZlbCAqLworI2lmIE1BWF9NRU1fTEVWRUwgPj0gOAorIyAgZGVmaW5lIERFRl9NRU1fTEVWRUwgOAorI2Vsc2UKKyMgIGRlZmluZSBERUZfTUVNX0xFVkVMICBNQVhfTUVNX0xFVkVMCisjZW5kaWYKKworLyogZGVmYXVsdCBpL28gYnVmZmVyIHNpemUgLS0gZG91YmxlIHRoaXMgZm9yIG91dHB1dCB3aGVuIHJlYWRpbmcgKHRoaXMgYW5kCisgICB0d2ljZSB0aGlzIG11c3QgYmUgYWJsZSB0byBmaXQgaW4gYW4gdW5zaWduZWQgdHlwZSkgKi8KICNkZWZpbmUgR1pCVUZTSVpFIDgxOTIKIAogLyogZ3ppcCBtb2RlcywgYWxzbyBwcm92aWRlIGEgbGl0dGxlIGludGVncml0eSBjaGVjayBvbiB0aGUgcGFzc2VkIHN0cnVjdHVyZSAqLwpAQCAtODQsMjMgKzE1OSwyNSBAQAogCiAvKiBpbnRlcm5hbCBnemlwIGZpbGUgc3RhdGUgZGF0YSBzdHJ1Y3R1cmUgKi8KIHR5cGVkZWYgc3RydWN0IHsKKyAgICAgICAgLyogZXhwb3NlZCBjb250ZW50cyBmb3IgZ3pnZXRjKCkgbWFjcm8gKi8KKyAgICBzdHJ1Y3QgZ3pGaWxlX3MgeDsgICAgICAvKiAieCIgZm9yIGV4cG9zZWQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB4LmhhdmU6IG51bWJlciBvZiBieXRlcyBhdmFpbGFibGUgYXQgeC5uZXh0ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogeC5uZXh0OiBuZXh0IG91dHB1dCBkYXRhIHRvIGRlbGl2ZXIgb3Igd3JpdGUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB4LnBvczogY3VycmVudCBwb3NpdGlvbiBpbiB1bmNvbXByZXNzZWQgZGF0YSAqLwogICAgICAgICAvKiB1c2VkIGZvciBib3RoIHJlYWRpbmcgYW5kIHdyaXRpbmcgKi8KICAgICBpbnQgbW9kZTsgICAgICAgICAgICAgICAvKiBzZWUgZ3ppcCBtb2RlcyBhYm92ZSAqLwogICAgIGludCBmZDsgICAgICAgICAgICAgICAgIC8qIGZpbGUgZGVzY3JpcHRvciAqLwogICAgIGNoYXIgKnBhdGg7ICAgICAgICAgICAgIC8qIHBhdGggb3IgZmQgZm9yIGVycm9yIG1lc3NhZ2VzICovCi0gICAgel9vZmY2NF90IHBvczsgICAgICAgICAgLyogY3VycmVudCBwb3NpdGlvbiBpbiB1bmNvbXByZXNzZWQgZGF0YSAqLwogICAgIHVuc2lnbmVkIHNpemU7ICAgICAgICAgIC8qIGJ1ZmZlciBzaXplLCB6ZXJvIGlmIG5vdCBhbGxvY2F0ZWQgeWV0ICovCiAgICAgdW5zaWduZWQgd2FudDsgICAgICAgICAgLyogcmVxdWVzdGVkIGJ1ZmZlciBzaXplLCBkZWZhdWx0IGlzIEdaQlVGU0laRSAqLwogICAgIHVuc2lnbmVkIGNoYXIgKmluOyAgICAgIC8qIGlucHV0IGJ1ZmZlciAqLwogICAgIHVuc2lnbmVkIGNoYXIgKm91dDsgICAgIC8qIG91dHB1dCBidWZmZXIgKGRvdWJsZS1zaXplZCB3aGVuIHJlYWRpbmcpICovCi0gICAgdW5zaWduZWQgY2hhciAqbmV4dDsgICAgLyogbmV4dCBvdXRwdXQgZGF0YSB0byBkZWxpdmVyIG9yIHdyaXRlICovCisgICAgaW50IGRpcmVjdDsgICAgICAgICAgICAgLyogMCBpZiBwcm9jZXNzaW5nIGd6aXAsIDEgaWYgdHJhbnNwYXJlbnQgKi8KICAgICAgICAgLyoganVzdCBmb3IgcmVhZGluZyAqLwotICAgIHVuc2lnbmVkIGhhdmU7ICAgICAgICAgIC8qIGFtb3VudCBvZiBvdXRwdXQgZGF0YSB1bnVzZWQgYXQgbmV4dCAqLwotICAgIGludCBlb2Y7ICAgICAgICAgICAgICAgIC8qIHRydWUgaWYgZW5kIG9mIGlucHV0IGZpbGUgcmVhY2hlZCAqLwotICAgIHpfb2ZmNjRfdCBzdGFydDsgICAgICAgIC8qIHdoZXJlIHRoZSBnemlwIGRhdGEgc3RhcnRlZCwgZm9yIHJld2luZGluZyAqLwotICAgIHpfb2ZmNjRfdCByYXc7ICAgICAgICAgIC8qIHdoZXJlIHRoZSByYXcgZGF0YSBzdGFydGVkLCBmb3Igc2Vla2luZyAqLwogICAgIGludCBob3c7ICAgICAgICAgICAgICAgIC8qIDA6IGdldCBoZWFkZXIsIDE6IGNvcHksIDI6IGRlY29tcHJlc3MgKi8KLSAgICBpbnQgZGlyZWN0OyAgICAgICAgICAgICAvKiB0cnVlIGlmIGxhc3QgcmVhZCBkaXJlY3QsIGZhbHNlIGlmIGd6aXAgKi8KKyAgICB6X29mZjY0X3Qgc3RhcnQ7ICAgICAgICAvKiB3aGVyZSB0aGUgZ3ppcCBkYXRhIHN0YXJ0ZWQsIGZvciByZXdpbmRpbmcgKi8KKyAgICBpbnQgZW9mOyAgICAgICAgICAgICAgICAvKiB0cnVlIGlmIGVuZCBvZiBpbnB1dCBmaWxlIHJlYWNoZWQgKi8KKyAgICBpbnQgcGFzdDsgICAgICAgICAgICAgICAvKiB0cnVlIGlmIHJlYWQgcmVxdWVzdGVkIHBhc3QgZW5kICovCiAgICAgICAgIC8qIGp1c3QgZm9yIHdyaXRpbmcgKi8KICAgICBpbnQgbGV2ZWw7ICAgICAgICAgICAgICAvKiBjb21wcmVzc2lvbiBsZXZlbCAqLwogICAgIGludCBzdHJhdGVneTsgICAgICAgICAgIC8qIGNvbXByZXNzaW9uIHN0cmF0ZWd5ICovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvZ3ppby5jIGIvTW9kdWxlcy96bGliL2d6aW8uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2U5MGY0OS4uMDAwMDAwMAotLS0gYS9Nb2R1bGVzL3psaWIvZ3ppby5jCisrKyAvZGV2L251bGwKQEAgLTEsMTAyNiArMCwwIEBACi0vKiBnemlvLmMgLS0gSU8gb24gLmd6IGZpbGVzCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwNSBKZWFuLWxvdXAgR2FpbGx5LgotICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAotICoKLSAqIENvbXBpbGUgdGhpcyBmaWxlIHdpdGggLUROT19HWkNPTVBSRVNTIHRvIGF2b2lkIHRoZSBjb21wcmVzc2lvbiBjb2RlLgotICovCi0KLS8qIEAoIykgJElkJCAqLwotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLQotI2luY2x1ZGUgInp1dGlsLmgiCi0KLSNpZmRlZiBOT19ERUZMQVRFICAgICAgIC8qIGZvciBjb21wYXRpYmlsaXR5IHdpdGggb2xkIGRlZmluaXRpb24gKi8KLSMgIGRlZmluZSBOT19HWkNPTVBSRVNTCi0jZW5kaWYKLQotI2lmbmRlZiBOT19EVU1NWV9ERUNMCi1zdHJ1Y3QgaW50ZXJuYWxfc3RhdGUge2ludCBkdW1teTt9OyAvKiBmb3IgYnVnZ3kgY29tcGlsZXJzICovCi0jZW5kaWYKLQotI2lmbmRlZiBaX0JVRlNJWkUKLSMgIGlmZGVmIE1BWFNFR182NEsKLSMgICAgZGVmaW5lIFpfQlVGU0laRSA0MDk2IC8qIG1pbmltaXplIG1lbW9yeSB1c2FnZSBmb3IgMTYtYml0IERPUyAqLwotIyAgZWxzZQotIyAgICBkZWZpbmUgWl9CVUZTSVpFIDE2Mzg0Ci0jICBlbmRpZgotI2VuZGlmCi0jaWZuZGVmIFpfUFJJTlRGX0JVRlNJWkUKLSMgIGRlZmluZSBaX1BSSU5URl9CVUZTSVpFIDQwOTYKLSNlbmRpZgotCi0jaWZkZWYgX19NVlNfXwotIyAgcHJhZ21hIG1hcCAoZmRvcGVuICwgIlwxNzRcMTc0RkRPUEVOIikKLSAgIEZJTEUgKmZkb3BlbihpbnQsIGNvbnN0IGNoYXIgKik7Ci0jZW5kaWYKLQotI2lmbmRlZiBTVERDCi1leHRlcm4gdm9pZHAgIG1hbGxvYyBPRigodUludCBzaXplKSk7Ci1leHRlcm4gdm9pZCAgIGZyZWUgICBPRigodm9pZHBmIHB0cikpOwotI2VuZGlmCi0KLSNkZWZpbmUgQUxMT0Moc2l6ZSkgbWFsbG9jKHNpemUpCi0jZGVmaW5lIFRSWUZSRUUocCkge2lmIChwKSBmcmVlKHApO30KLQotc3RhdGljIGludCBjb25zdCBnel9tYWdpY1syXSA9IHsweDFmLCAweDhifTsgLyogZ3ppcCBtYWdpYyBoZWFkZXIgKi8KLQotLyogZ3ppcCBmbGFnIGJ5dGUgKi8KLSNkZWZpbmUgQVNDSUlfRkxBRyAgIDB4MDEgLyogYml0IDAgc2V0OiBmaWxlIHByb2JhYmx5IGFzY2lpIHRleHQgKi8KLSNkZWZpbmUgSEVBRF9DUkMgICAgIDB4MDIgLyogYml0IDEgc2V0OiBoZWFkZXIgQ1JDIHByZXNlbnQgKi8KLSNkZWZpbmUgRVhUUkFfRklFTEQgIDB4MDQgLyogYml0IDIgc2V0OiBleHRyYSBmaWVsZCBwcmVzZW50ICovCi0jZGVmaW5lIE9SSUdfTkFNRSAgICAweDA4IC8qIGJpdCAzIHNldDogb3JpZ2luYWwgZmlsZSBuYW1lIHByZXNlbnQgKi8KLSNkZWZpbmUgQ09NTUVOVCAgICAgIDB4MTAgLyogYml0IDQgc2V0OiBmaWxlIGNvbW1lbnQgcHJlc2VudCAqLwotI2RlZmluZSBSRVNFUlZFRCAgICAgMHhFMCAvKiBiaXRzIDUuLjc6IHJlc2VydmVkICovCi0KLXR5cGVkZWYgc3RydWN0IGd6X3N0cmVhbSB7Ci0gICAgel9zdHJlYW0gc3RyZWFtOwotICAgIGludCAgICAgIHpfZXJyOyAgIC8qIGVycm9yIGNvZGUgZm9yIGxhc3Qgc3RyZWFtIG9wZXJhdGlvbiAqLwotICAgIGludCAgICAgIHpfZW9mOyAgIC8qIHNldCBpZiBlbmQgb2YgaW5wdXQgZmlsZSAqLwotICAgIEZJTEUgICAgICpmaWxlOyAgIC8qIC5neiBmaWxlICovCi0gICAgQnl0ZSAgICAgKmluYnVmOyAgLyogaW5wdXQgYnVmZmVyICovCi0gICAgQnl0ZSAgICAgKm91dGJ1ZjsgLyogb3V0cHV0IGJ1ZmZlciAqLwotICAgIHVMb25nICAgIGNyYzsgICAgIC8qIGNyYzMyIG9mIHVuY29tcHJlc3NlZCBkYXRhICovCi0gICAgY2hhciAgICAgKm1zZzsgICAgLyogZXJyb3IgbWVzc2FnZSAqLwotICAgIGNoYXIgICAgICpwYXRoOyAgIC8qIHBhdGggbmFtZSBmb3IgZGVidWdnaW5nIG9ubHkgKi8KLSAgICBpbnQgICAgICB0cmFuc3BhcmVudDsgLyogMSBpZiBpbnB1dCBmaWxlIGlzIG5vdCBhIC5neiBmaWxlICovCi0gICAgY2hhciAgICAgbW9kZTsgICAgLyogJ3cnIG9yICdyJyAqLwotICAgIHpfb2ZmX3QgIHN0YXJ0OyAgIC8qIHN0YXJ0IG9mIGNvbXByZXNzZWQgZGF0YSBpbiBmaWxlIChoZWFkZXIgc2tpcHBlZCkgKi8KLSAgICB6X29mZl90ICBpbjsgICAgICAvKiBieXRlcyBpbnRvIGRlZmxhdGUgb3IgaW5mbGF0ZSAqLwotICAgIHpfb2ZmX3QgIG91dDsgICAgIC8qIGJ5dGVzIG91dCBvZiBkZWZsYXRlIG9yIGluZmxhdGUgKi8KLSAgICBpbnQgICAgICBiYWNrOyAgICAvKiBvbmUgY2hhcmFjdGVyIHB1c2gtYmFjayAqLwotICAgIGludCAgICAgIGxhc3Q7ICAgIC8qIHRydWUgaWYgcHVzaC1iYWNrIGlzIGxhc3QgY2hhcmFjdGVyICovCi19IGd6X3N0cmVhbTsKLQotCi1sb2NhbCBnekZpbGUgZ3pfb3BlbiAgICAgIE9GKChjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICptb2RlLCBpbnQgIGZkKSk7Ci1sb2NhbCBpbnQgZG9fZmx1c2ggICAgICAgIE9GKChnekZpbGUgZmlsZSwgaW50IGZsdXNoKSk7Ci1sb2NhbCBpbnQgICAgZ2V0X2J5dGUgICAgIE9GKChnel9zdHJlYW0gKnMpKTsKLWxvY2FsIHZvaWQgICBjaGVja19oZWFkZXIgT0YoKGd6X3N0cmVhbSAqcykpOwotbG9jYWwgaW50ICAgIGRlc3Ryb3kgICAgICBPRigoZ3pfc3RyZWFtICpzKSk7Ci1sb2NhbCB2b2lkICAgcHV0TG9uZyAgICAgIE9GKChGSUxFICpmaWxlLCB1TG9uZyB4KSk7Ci1sb2NhbCB1TG9uZyAgZ2V0TG9uZyAgICAgIE9GKChnel9zdHJlYW0gKnMpKTsKLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgIE9wZW5zIGEgZ3ppcCAoLmd6KSBmaWxlIGZvciByZWFkaW5nIG9yIHdyaXRpbmcuIFRoZSBtb2RlIHBhcmFtZXRlcgotICAgaXMgYXMgaW4gZm9wZW4gKCJyYiIgb3IgIndiIikuIFRoZSBmaWxlIGlzIGdpdmVuIGVpdGhlciBieSBmaWxlIGRlc2NyaXB0b3IKLSAgIG9yIHBhdGggbmFtZSAoaWYgZmQgPT0gLTEpLgotICAgICBnel9vcGVuIHJldHVybnMgTlVMTCBpZiB0aGUgZmlsZSBjb3VsZCBub3QgYmUgb3BlbmVkIG9yIGlmIHRoZXJlIHdhcwotICAgaW5zdWZmaWNpZW50IG1lbW9yeSB0byBhbGxvY2F0ZSB0aGUgKGRlKWNvbXByZXNzaW9uIHN0YXRlOyBlcnJubwotICAgY2FuIGJlIGNoZWNrZWQgdG8gZGlzdGluZ3Vpc2ggdGhlIHR3byBjYXNlcyAoaWYgZXJybm8gaXMgemVybywgdGhlCi0gICB6bGliIGVycm9yIGlzIFpfTUVNX0VSUk9SKS4KLSovCi1sb2NhbCBnekZpbGUgZ3pfb3BlbiAocGF0aCwgbW9kZSwgZmQpCi0gICAgY29uc3QgY2hhciAqcGF0aDsKLSAgICBjb25zdCBjaGFyICptb2RlOwotICAgIGludCAgZmQ7Ci17Ci0gICAgaW50IGVycjsKLSAgICBpbnQgbGV2ZWwgPSBaX0RFRkFVTFRfQ09NUFJFU1NJT047IC8qIGNvbXByZXNzaW9uIGxldmVsICovCi0gICAgaW50IHN0cmF0ZWd5ID0gWl9ERUZBVUxUX1NUUkFURUdZOyAvKiBjb21wcmVzc2lvbiBzdHJhdGVneSAqLwotICAgIGNoYXIgKnAgPSAoY2hhciopbW9kZTsKLSAgICBnel9zdHJlYW0gKnM7Ci0gICAgY2hhciBmbW9kZVs4MF07IC8qIGNvcHkgb2YgbW9kZSwgd2l0aG91dCB0aGUgY29tcHJlc3Npb24gbGV2ZWwgKi8KLSAgICBjaGFyICptID0gZm1vZGU7Ci0KLSAgICBpZiAoIXBhdGggfHwgIW1vZGUpIHJldHVybiBaX05VTEw7Ci0KLSAgICBzID0gKGd6X3N0cmVhbSAqKUFMTE9DKHNpemVvZihnel9zdHJlYW0pKTsKLSAgICBpZiAoIXMpIHJldHVybiBaX05VTEw7Ci0KLSAgICBzLT5zdHJlYW0uemFsbG9jID0gKGFsbG9jX2Z1bmMpMDsKLSAgICBzLT5zdHJlYW0uemZyZWUgPSAoZnJlZV9mdW5jKTA7Ci0gICAgcy0+c3RyZWFtLm9wYXF1ZSA9ICh2b2lkcGYpMDsKLSAgICBzLT5zdHJlYW0ubmV4dF9pbiA9IHMtPmluYnVmID0gWl9OVUxMOwotICAgIHMtPnN0cmVhbS5uZXh0X291dCA9IHMtPm91dGJ1ZiA9IFpfTlVMTDsKLSAgICBzLT5zdHJlYW0uYXZhaWxfaW4gPSBzLT5zdHJlYW0uYXZhaWxfb3V0ID0gMDsKLSAgICBzLT5maWxlID0gTlVMTDsKLSAgICBzLT56X2VyciA9IFpfT0s7Ci0gICAgcy0+el9lb2YgPSAwOwotICAgIHMtPmluID0gMDsKLSAgICBzLT5vdXQgPSAwOwotICAgIHMtPmJhY2sgPSBFT0Y7Ci0gICAgcy0+Y3JjID0gY3JjMzIoMEwsIFpfTlVMTCwgMCk7Ci0gICAgcy0+bXNnID0gTlVMTDsKLSAgICBzLT50cmFuc3BhcmVudCA9IDA7Ci0KLSAgICBzLT5wYXRoID0gKGNoYXIqKUFMTE9DKHN0cmxlbihwYXRoKSsxKTsKLSAgICBpZiAocy0+cGF0aCA9PSBOVUxMKSB7Ci0gICAgICAgIHJldHVybiBkZXN0cm95KHMpLCAoZ3pGaWxlKVpfTlVMTDsKLSAgICB9Ci0gICAgc3RyY3B5KHMtPnBhdGgsIHBhdGgpOyAvKiBkbyB0aGlzIGVhcmx5IGZvciBkZWJ1Z2dpbmcgKi8KLQotICAgIHMtPm1vZGUgPSAnXDAnOwotICAgIGRvIHsKLSAgICAgICAgaWYgKCpwID09ICdyJykgcy0+bW9kZSA9ICdyJzsKLSAgICAgICAgaWYgKCpwID09ICd3JyB8fCAqcCA9PSAnYScpIHMtPm1vZGUgPSAndyc7Ci0gICAgICAgIGlmICgqcCA+PSAnMCcgJiYgKnAgPD0gJzknKSB7Ci0gICAgICAgICAgICBsZXZlbCA9ICpwIC0gJzAnOwotICAgICAgICB9IGVsc2UgaWYgKCpwID09ICdmJykgewotICAgICAgICAgIHN0cmF0ZWd5ID0gWl9GSUxURVJFRDsKLSAgICAgICAgfSBlbHNlIGlmICgqcCA9PSAnaCcpIHsKLSAgICAgICAgICBzdHJhdGVneSA9IFpfSFVGRk1BTl9PTkxZOwotICAgICAgICB9IGVsc2UgaWYgKCpwID09ICdSJykgewotICAgICAgICAgIHN0cmF0ZWd5ID0gWl9STEU7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAqbSsrID0gKnA7IC8qIGNvcHkgdGhlIG1vZGUgKi8KLSAgICAgICAgfQotICAgIH0gd2hpbGUgKCpwKysgJiYgbSAhPSBmbW9kZSArIHNpemVvZihmbW9kZSkpOwotICAgIGlmIChzLT5tb2RlID09ICdcMCcpIHJldHVybiBkZXN0cm95KHMpLCAoZ3pGaWxlKVpfTlVMTDsKLQotICAgIGlmIChzLT5tb2RlID09ICd3JykgewotI2lmZGVmIE5PX0daQ09NUFJFU1MKLSAgICAgICAgZXJyID0gWl9TVFJFQU1fRVJST1I7Ci0jZWxzZQotICAgICAgICBlcnIgPSBkZWZsYXRlSW5pdDIoJihzLT5zdHJlYW0pLCBsZXZlbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFpfREVGTEFURUQsIC1NQVhfV0JJVFMsIERFRl9NRU1fTEVWRUwsIHN0cmF0ZWd5KTsKLSAgICAgICAgLyogd2luZG93Qml0cyBpcyBwYXNzZWQgPCAwIHRvIHN1cHByZXNzIHpsaWIgaGVhZGVyICovCi0KLSAgICAgICAgcy0+c3RyZWFtLm5leHRfb3V0ID0gcy0+b3V0YnVmID0gKEJ5dGUqKUFMTE9DKFpfQlVGU0laRSk7Ci0jZW5kaWYKLSAgICAgICAgaWYgKGVyciAhPSBaX09LIHx8IHMtPm91dGJ1ZiA9PSBaX05VTEwpIHsKLSAgICAgICAgICAgIHJldHVybiBkZXN0cm95KHMpLCAoZ3pGaWxlKVpfTlVMTDsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIHMtPnN0cmVhbS5uZXh0X2luICA9IHMtPmluYnVmID0gKEJ5dGUqKUFMTE9DKFpfQlVGU0laRSk7Ci0KLSAgICAgICAgZXJyID0gaW5mbGF0ZUluaXQyKCYocy0+c3RyZWFtKSwgLU1BWF9XQklUUyk7Ci0gICAgICAgIC8qIHdpbmRvd0JpdHMgaXMgcGFzc2VkIDwgMCB0byB0ZWxsIHRoYXQgdGhlcmUgaXMgbm8gemxpYiBoZWFkZXIuCi0gICAgICAgICAqIE5vdGUgdGhhdCBpbiB0aGlzIGNhc2UgaW5mbGF0ZSAqcmVxdWlyZXMqIGFuIGV4dHJhICJkdW1teSIgYnl0ZQotICAgICAgICAgKiBhZnRlciB0aGUgY29tcHJlc3NlZCBzdHJlYW0gaW4gb3JkZXIgdG8gY29tcGxldGUgZGVjb21wcmVzc2lvbiBhbmQKLSAgICAgICAgICogcmV0dXJuIFpfU1RSRUFNX0VORC4gSGVyZSB0aGUgZ3ppcCBDUkMzMiBlbnN1cmVzIHRoYXQgNCBieXRlcyBhcmUKLSAgICAgICAgICogcHJlc2VudCBhZnRlciB0aGUgY29tcHJlc3NlZCBzdHJlYW0uCi0gICAgICAgICAqLwotICAgICAgICBpZiAoZXJyICE9IFpfT0sgfHwgcy0+aW5idWYgPT0gWl9OVUxMKSB7Ci0gICAgICAgICAgICByZXR1cm4gZGVzdHJveShzKSwgKGd6RmlsZSlaX05VTEw7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcy0+c3RyZWFtLmF2YWlsX291dCA9IFpfQlVGU0laRTsKLQotICAgIGVycm5vID0gMDsKLSAgICBzLT5maWxlID0gZmQgPCAwID8gRl9PUEVOKHBhdGgsIGZtb2RlKSA6IChGSUxFKilmZG9wZW4oZmQsIGZtb2RlKTsKLQotICAgIGlmIChzLT5maWxlID09IE5VTEwpIHsKLSAgICAgICAgcmV0dXJuIGRlc3Ryb3kocyksIChnekZpbGUpWl9OVUxMOwotICAgIH0KLSAgICBpZiAocy0+bW9kZSA9PSAndycpIHsKLSAgICAgICAgLyogV3JpdGUgYSB2ZXJ5IHNpbXBsZSAuZ3ogaGVhZGVyOgotICAgICAgICAgKi8KLSAgICAgICAgZnByaW50ZihzLT5maWxlLCAiJWMlYyVjJWMlYyVjJWMlYyVjJWMiLCBnel9tYWdpY1swXSwgZ3pfbWFnaWNbMV0sCi0gICAgICAgICAgICAgWl9ERUZMQVRFRCwgMCAvKmZsYWdzKi8sIDAsMCwwLDAgLyp0aW1lKi8sIDAgLyp4ZmxhZ3MqLywgT1NfQ09ERSk7Ci0gICAgICAgIHMtPnN0YXJ0ID0gMTBMOwotICAgICAgICAvKiBXZSB1c2UgMTBMIGluc3RlYWQgb2YgZnRlbGwocy0+ZmlsZSkgdG8gYmVjYXVzZSBmdGVsbCBjYXVzZXMgYW4KLSAgICAgICAgICogZmZsdXNoIG9uIHNvbWUgc3lzdGVtcy4gVGhpcyB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5IGRvZXNuJ3QgdXNlCi0gICAgICAgICAqIHN0YXJ0IGFueXdheSBpbiB3cml0ZSBtb2RlLCBzbyB0aGlzIGluaXRpYWxpemF0aW9uIGlzIG5vdAotICAgICAgICAgKiBuZWNlc3NhcnkuCi0gICAgICAgICAqLwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGNoZWNrX2hlYWRlcihzKTsgLyogc2tpcCB0aGUgLmd6IGhlYWRlciAqLwotICAgICAgICBzLT5zdGFydCA9IGZ0ZWxsKHMtPmZpbGUpIC0gcy0+c3RyZWFtLmF2YWlsX2luOwotICAgIH0KLQotICAgIHJldHVybiAoZ3pGaWxlKXM7Ci19Ci0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICBPcGVucyBhIGd6aXAgKC5neikgZmlsZSBmb3IgcmVhZGluZyBvciB3cml0aW5nLgotKi8KLWd6RmlsZSBaRVhQT1JUIGd6b3BlbiAocGF0aCwgbW9kZSkKLSAgICBjb25zdCBjaGFyICpwYXRoOwotICAgIGNvbnN0IGNoYXIgKm1vZGU7Ci17Ci0gICAgcmV0dXJuIGd6X29wZW4gKHBhdGgsIG1vZGUsIC0xKTsKLX0KLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgIEFzc29jaWF0ZSBhIGd6RmlsZSB3aXRoIHRoZSBmaWxlIGRlc2NyaXB0b3IgZmQuIGZkIGlzIG5vdCBkdXAnZWQgaGVyZQotICAgdG8gbWltaWMgdGhlIGJlaGF2aW8odSlyIG9mIGZkb3Blbi4KLSovCi1nekZpbGUgWkVYUE9SVCBnemRvcGVuIChmZCwgbW9kZSkKLSAgICBpbnQgZmQ7Ci0gICAgY29uc3QgY2hhciAqbW9kZTsKLXsKLSAgICBjaGFyIG5hbWVbNDZdOyAgICAgIC8qIGFsbG93IGZvciB1cCB0byAxMjgtYml0IGludGVnZXJzICovCi0KLSAgICBpZiAoZmQgPCAwKSByZXR1cm4gKGd6RmlsZSlaX05VTEw7Ci0gICAgc3ByaW50ZihuYW1lLCAiPGZkOiVkPiIsIGZkKTsgLyogZm9yIGRlYnVnZ2luZyAqLwotCi0gICAgcmV0dXJuIGd6X29wZW4gKG5hbWUsIG1vZGUsIGZkKTsKLX0KLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBVcGRhdGUgdGhlIGNvbXByZXNzaW9uIGxldmVsIGFuZCBzdHJhdGVneQotICovCi1pbnQgWkVYUE9SVCBnenNldHBhcmFtcyAoZmlsZSwgbGV2ZWwsIHN0cmF0ZWd5KQotICAgIGd6RmlsZSBmaWxlOwotICAgIGludCBsZXZlbDsKLSAgICBpbnQgc3RyYXRlZ3k7Ci17Ci0gICAgZ3pfc3RyZWFtICpzID0gKGd6X3N0cmVhbSopZmlsZTsKLQotICAgIGlmIChzID09IE5VTEwgfHwgcy0+bW9kZSAhPSAndycpIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKLQotICAgIC8qIE1ha2Ugcm9vbSB0byBhbGxvdyBmbHVzaGluZyAqLwotICAgIGlmIChzLT5zdHJlYW0uYXZhaWxfb3V0ID09IDApIHsKLQotICAgICAgICBzLT5zdHJlYW0ubmV4dF9vdXQgPSBzLT5vdXRidWY7Ci0gICAgICAgIGlmIChmd3JpdGUocy0+b3V0YnVmLCAxLCBaX0JVRlNJWkUsIHMtPmZpbGUpICE9IFpfQlVGU0laRSkgewotICAgICAgICAgICAgcy0+el9lcnIgPSBaX0VSUk5POwotICAgICAgICB9Ci0gICAgICAgIHMtPnN0cmVhbS5hdmFpbF9vdXQgPSBaX0JVRlNJWkU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGRlZmxhdGVQYXJhbXMgKCYocy0+c3RyZWFtKSwgbGV2ZWwsIHN0cmF0ZWd5KTsKLX0KLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgIFJlYWQgYSBieXRlIGZyb20gYSBnel9zdHJlYW07IHVwZGF0ZSBuZXh0X2luIGFuZCBhdmFpbF9pbi4gUmV0dXJuIEVPRgotICAgZm9yIGVuZCBvZiBmaWxlLgotICAgSU4gYXNzZXJ0aW9uOiB0aGUgc3RyZWFtIHMgaGFzIGJlZW4gc3VjZXNzZnVsbHkgb3BlbmVkIGZvciByZWFkaW5nLgotKi8KLWxvY2FsIGludCBnZXRfYnl0ZShzKQotICAgIGd6X3N0cmVhbSAqczsKLXsKLSAgICBpZiAocy0+el9lb2YpIHJldHVybiBFT0Y7Ci0gICAgaWYgKHMtPnN0cmVhbS5hdmFpbF9pbiA9PSAwKSB7Ci0gICAgICAgIGVycm5vID0gMDsKLSAgICAgICAgcy0+c3RyZWFtLmF2YWlsX2luID0gKHVJbnQpZnJlYWQocy0+aW5idWYsIDEsIFpfQlVGU0laRSwgcy0+ZmlsZSk7Ci0gICAgICAgIGlmIChzLT5zdHJlYW0uYXZhaWxfaW4gPT0gMCkgewotICAgICAgICAgICAgcy0+el9lb2YgPSAxOwotICAgICAgICAgICAgaWYgKGZlcnJvcihzLT5maWxlKSkgcy0+el9lcnIgPSBaX0VSUk5POwotICAgICAgICAgICAgcmV0dXJuIEVPRjsKLSAgICAgICAgfQotICAgICAgICBzLT5zdHJlYW0ubmV4dF9pbiA9IHMtPmluYnVmOwotICAgIH0KLSAgICBzLT5zdHJlYW0uYXZhaWxfaW4tLTsKLSAgICByZXR1cm4gKihzLT5zdHJlYW0ubmV4dF9pbikrKzsKLX0KLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgICBDaGVjayB0aGUgZ3ppcCBoZWFkZXIgb2YgYSBnel9zdHJlYW0gb3BlbmVkIGZvciByZWFkaW5nLiBTZXQgdGhlIHN0cmVhbQotICAgIG1vZGUgdG8gdHJhbnNwYXJlbnQgaWYgdGhlIGd6aXAgbWFnaWMgaGVhZGVyIGlzIG5vdCBwcmVzZW50OyBzZXQgcy0+ZXJyCi0gICAgdG8gWl9EQVRBX0VSUk9SIGlmIHRoZSBtYWdpYyBoZWFkZXIgaXMgcHJlc2VudCBidXQgdGhlIHJlc3Qgb2YgdGhlIGhlYWRlcgotICAgIGlzIGluY29ycmVjdC4KLSAgICBJTiBhc3NlcnRpb246IHRoZSBzdHJlYW0gcyBoYXMgYWxyZWFkeSBiZWVuIGNyZWF0ZWQgc3VjZXNzZnVsbHk7Ci0gICAgICAgcy0+c3RyZWFtLmF2YWlsX2luIGlzIHplcm8gZm9yIHRoZSBmaXJzdCB0aW1lLCBidXQgbWF5IGJlIG5vbi16ZXJvCi0gICAgICAgZm9yIGNvbmNhdGVuYXRlZCAuZ3ogZmlsZXMuCi0qLwotbG9jYWwgdm9pZCBjaGVja19oZWFkZXIocykKLSAgICBnel9zdHJlYW0gKnM7Ci17Ci0gICAgaW50IG1ldGhvZDsgLyogbWV0aG9kIGJ5dGUgKi8KLSAgICBpbnQgZmxhZ3M7ICAvKiBmbGFncyBieXRlICovCi0gICAgdUludCBsZW47Ci0gICAgaW50IGM7Ci0KLSAgICAvKiBBc3N1cmUgdHdvIGJ5dGVzIGluIHRoZSBidWZmZXIgc28gd2UgY2FuIHBlZWsgYWhlYWQgLS0gaGFuZGxlIGNhc2UKLSAgICAgICB3aGVyZSBmaXJzdCBieXRlIG9mIGhlYWRlciBpcyBhdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIgYWZ0ZXIgdGhlIGxhc3QKLSAgICAgICBnemlwIHNlZ21lbnQgKi8KLSAgICBsZW4gPSBzLT5zdHJlYW0uYXZhaWxfaW47Ci0gICAgaWYgKGxlbiA8IDIpIHsKLSAgICAgICAgaWYgKGxlbikgcy0+aW5idWZbMF0gPSBzLT5zdHJlYW0ubmV4dF9pblswXTsKLSAgICAgICAgZXJybm8gPSAwOwotICAgICAgICBsZW4gPSAodUludClmcmVhZChzLT5pbmJ1ZiArIGxlbiwgMSwgWl9CVUZTSVpFID4+IGxlbiwgcy0+ZmlsZSk7Ci0gICAgICAgIGlmIChsZW4gPT0gMCAmJiBmZXJyb3Iocy0+ZmlsZSkpIHMtPnpfZXJyID0gWl9FUlJOTzsKLSAgICAgICAgcy0+c3RyZWFtLmF2YWlsX2luICs9IGxlbjsKLSAgICAgICAgcy0+c3RyZWFtLm5leHRfaW4gPSBzLT5pbmJ1ZjsKLSAgICAgICAgaWYgKHMtPnN0cmVhbS5hdmFpbF9pbiA8IDIpIHsKLSAgICAgICAgICAgIHMtPnRyYW5zcGFyZW50ID0gcy0+c3RyZWFtLmF2YWlsX2luOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyogUGVlayBhaGVhZCB0byBjaGVjayB0aGUgZ3ppcCBtYWdpYyBoZWFkZXIgKi8KLSAgICBpZiAocy0+c3RyZWFtLm5leHRfaW5bMF0gIT0gZ3pfbWFnaWNbMF0gfHwKLSAgICAgICAgcy0+c3RyZWFtLm5leHRfaW5bMV0gIT0gZ3pfbWFnaWNbMV0pIHsKLSAgICAgICAgcy0+dHJhbnNwYXJlbnQgPSAxOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIHMtPnN0cmVhbS5hdmFpbF9pbiAtPSAyOwotICAgIHMtPnN0cmVhbS5uZXh0X2luICs9IDI7Ci0KLSAgICAvKiBDaGVjayB0aGUgcmVzdCBvZiB0aGUgZ3ppcCBoZWFkZXIgKi8KLSAgICBtZXRob2QgPSBnZXRfYnl0ZShzKTsKLSAgICBmbGFncyA9IGdldF9ieXRlKHMpOwotICAgIGlmIChtZXRob2QgIT0gWl9ERUZMQVRFRCB8fCAoZmxhZ3MgJiBSRVNFUlZFRCkgIT0gMCkgewotICAgICAgICBzLT56X2VyciA9IFpfREFUQV9FUlJPUjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8qIERpc2NhcmQgdGltZSwgeGZsYWdzIGFuZCBPUyBjb2RlOiAqLwotICAgIGZvciAobGVuID0gMDsgbGVuIDwgNjsgbGVuKyspICh2b2lkKWdldF9ieXRlKHMpOwotCi0gICAgaWYgKChmbGFncyAmIEVYVFJBX0ZJRUxEKSAhPSAwKSB7IC8qIHNraXAgdGhlIGV4dHJhIGZpZWxkICovCi0gICAgICAgIGxlbiAgPSAgKHVJbnQpZ2V0X2J5dGUocyk7Ci0gICAgICAgIGxlbiArPSAoKHVJbnQpZ2V0X2J5dGUocykpPDw4OwotICAgICAgICAvKiBsZW4gaXMgZ2FyYmFnZSBpZiBFT0YgYnV0IHRoZSBsb29wIGJlbG93IHdpbGwgcXVpdCBhbnl3YXkgKi8KLSAgICAgICAgd2hpbGUgKGxlbi0tICE9IDAgJiYgZ2V0X2J5dGUocykgIT0gRU9GKSA7Ci0gICAgfQotICAgIGlmICgoZmxhZ3MgJiBPUklHX05BTUUpICE9IDApIHsgLyogc2tpcCB0aGUgb3JpZ2luYWwgZmlsZSBuYW1lICovCi0gICAgICAgIHdoaWxlICgoYyA9IGdldF9ieXRlKHMpKSAhPSAwICYmIGMgIT0gRU9GKSA7Ci0gICAgfQotICAgIGlmICgoZmxhZ3MgJiBDT01NRU5UKSAhPSAwKSB7ICAgLyogc2tpcCB0aGUgLmd6IGZpbGUgY29tbWVudCAqLwotICAgICAgICB3aGlsZSAoKGMgPSBnZXRfYnl0ZShzKSkgIT0gMCAmJiBjICE9IEVPRikgOwotICAgIH0KLSAgICBpZiAoKGZsYWdzICYgSEVBRF9DUkMpICE9IDApIHsgIC8qIHNraXAgdGhlIGhlYWRlciBjcmMgKi8KLSAgICAgICAgZm9yIChsZW4gPSAwOyBsZW4gPCAyOyBsZW4rKykgKHZvaWQpZ2V0X2J5dGUocyk7Ci0gICAgfQotICAgIHMtPnpfZXJyID0gcy0+el9lb2YgPyBaX0RBVEFfRVJST1IgOiBaX09LOwotfQotCi0gLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDbGVhbnVwIHRoZW4gZnJlZSB0aGUgZ2l2ZW4gZ3pfc3RyZWFtLiBSZXR1cm4gYSB6bGliIGVycm9yIGNvZGUuCi0gICBUcnkgZnJlZWluZyBpbiB0aGUgcmV2ZXJzZSBvcmRlciBvZiBhbGxvY2F0aW9ucy4KLSAqLwotbG9jYWwgaW50IGRlc3Ryb3kgKHMpCi0gICAgZ3pfc3RyZWFtICpzOwotewotICAgIGludCBlcnIgPSBaX09LOwotCi0gICAgaWYgKCFzKSByZXR1cm4gWl9TVFJFQU1fRVJST1I7Ci0KLSAgICBUUllGUkVFKHMtPm1zZyk7Ci0KLSAgICBpZiAocy0+c3RyZWFtLnN0YXRlICE9IE5VTEwpIHsKLSAgICAgICAgaWYgKHMtPm1vZGUgPT0gJ3cnKSB7Ci0jaWZkZWYgTk9fR1pDT01QUkVTUwotICAgICAgICAgICAgZXJyID0gWl9TVFJFQU1fRVJST1I7Ci0jZWxzZQotICAgICAgICAgICAgZXJyID0gZGVmbGF0ZUVuZCgmKHMtPnN0cmVhbSkpOwotI2VuZGlmCi0gICAgICAgIH0gZWxzZSBpZiAocy0+bW9kZSA9PSAncicpIHsKLSAgICAgICAgICAgIGVyciA9IGluZmxhdGVFbmQoJihzLT5zdHJlYW0pKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAocy0+ZmlsZSAhPSBOVUxMICYmIGZjbG9zZShzLT5maWxlKSkgewotI2lmZGVmIEVTUElQRQotICAgICAgICBpZiAoZXJybm8gIT0gRVNQSVBFKSAvKiBmY2xvc2UgaXMgYnJva2VuIGZvciBwaXBlcyBpbiBIUC9VWCAqLwotI2VuZGlmCi0gICAgICAgICAgICBlcnIgPSBaX0VSUk5POwotICAgIH0KLSAgICBpZiAocy0+el9lcnIgPCAwKSBlcnIgPSBzLT56X2VycjsKLQotICAgIFRSWUZSRUUocy0+aW5idWYpOwotICAgIFRSWUZSRUUocy0+b3V0YnVmKTsKLSAgICBUUllGUkVFKHMtPnBhdGgpOwotICAgIFRSWUZSRUUocyk7Ci0gICAgcmV0dXJuIGVycjsKLX0KLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgIFJlYWRzIHRoZSBnaXZlbiBudW1iZXIgb2YgdW5jb21wcmVzc2VkIGJ5dGVzIGZyb20gdGhlIGNvbXByZXNzZWQgZmlsZS4KLSAgIGd6cmVhZCByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgYWN0dWFsbHkgcmVhZCAoMCBmb3IgZW5kIG9mIGZpbGUpLgotKi8KLWludCBaRVhQT1JUIGd6cmVhZCAoZmlsZSwgYnVmLCBsZW4pCi0gICAgZ3pGaWxlIGZpbGU7Ci0gICAgdm9pZHAgYnVmOwotICAgIHVuc2lnbmVkIGxlbjsKLXsKLSAgICBnel9zdHJlYW0gKnMgPSAoZ3pfc3RyZWFtKilmaWxlOwotICAgIEJ5dGVmICpzdGFydCA9IChCeXRlZiopYnVmOyAvKiBzdGFydGluZyBwb2ludCBmb3IgY3JjIGNvbXB1dGF0aW9uICovCi0gICAgQnl0ZSAgKm5leHRfb3V0OyAvKiA9PSBzdHJlYW0ubmV4dF9vdXQgYnV0IG5vdCBmb3JjZWQgZmFyIChmb3IgTVNET1MpICovCi0KLSAgICBpZiAocyA9PSBOVUxMIHx8IHMtPm1vZGUgIT0gJ3InKSByZXR1cm4gWl9TVFJFQU1fRVJST1I7Ci0KLSAgICBpZiAocy0+el9lcnIgPT0gWl9EQVRBX0VSUk9SIHx8IHMtPnpfZXJyID09IFpfRVJSTk8pIHJldHVybiAtMTsKLSAgICBpZiAocy0+el9lcnIgPT0gWl9TVFJFQU1fRU5EKSByZXR1cm4gMDsgIC8qIEVPRiAqLwotCi0gICAgbmV4dF9vdXQgPSAoQnl0ZSopYnVmOwotICAgIHMtPnN0cmVhbS5uZXh0X291dCA9IChCeXRlZiopYnVmOwotICAgIHMtPnN0cmVhbS5hdmFpbF9vdXQgPSBsZW47Ci0KLSAgICBpZiAocy0+c3RyZWFtLmF2YWlsX291dCAmJiBzLT5iYWNrICE9IEVPRikgewotICAgICAgICAqbmV4dF9vdXQrKyA9IHMtPmJhY2s7Ci0gICAgICAgIHMtPnN0cmVhbS5uZXh0X291dCsrOwotICAgICAgICBzLT5zdHJlYW0uYXZhaWxfb3V0LS07Ci0gICAgICAgIHMtPmJhY2sgPSBFT0Y7Ci0gICAgICAgIHMtPm91dCsrOwotICAgICAgICBzdGFydCsrOwotICAgICAgICBpZiAocy0+bGFzdCkgewotICAgICAgICAgICAgcy0+el9lcnIgPSBaX1NUUkVBTV9FTkQ7Ci0gICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHdoaWxlIChzLT5zdHJlYW0uYXZhaWxfb3V0ICE9IDApIHsKLQotICAgICAgICBpZiAocy0+dHJhbnNwYXJlbnQpIHsKLSAgICAgICAgICAgIC8qIENvcHkgZmlyc3QgdGhlIGxvb2thaGVhZCBieXRlczogKi8KLSAgICAgICAgICAgIHVJbnQgbiA9IHMtPnN0cmVhbS5hdmFpbF9pbjsKLSAgICAgICAgICAgIGlmIChuID4gcy0+c3RyZWFtLmF2YWlsX291dCkgbiA9IHMtPnN0cmVhbS5hdmFpbF9vdXQ7Ci0gICAgICAgICAgICBpZiAobiA+IDApIHsKLSAgICAgICAgICAgICAgICB6bWVtY3B5KHMtPnN0cmVhbS5uZXh0X291dCwgcy0+c3RyZWFtLm5leHRfaW4sIG4pOwotICAgICAgICAgICAgICAgIG5leHRfb3V0ICs9IG47Ci0gICAgICAgICAgICAgICAgcy0+c3RyZWFtLm5leHRfb3V0ID0gbmV4dF9vdXQ7Ci0gICAgICAgICAgICAgICAgcy0+c3RyZWFtLm5leHRfaW4gICArPSBuOwotICAgICAgICAgICAgICAgIHMtPnN0cmVhbS5hdmFpbF9vdXQgLT0gbjsKLSAgICAgICAgICAgICAgICBzLT5zdHJlYW0uYXZhaWxfaW4gIC09IG47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAocy0+c3RyZWFtLmF2YWlsX291dCA+IDApIHsKLSAgICAgICAgICAgICAgICBzLT5zdHJlYW0uYXZhaWxfb3V0IC09Ci0gICAgICAgICAgICAgICAgICAgICh1SW50KWZyZWFkKG5leHRfb3V0LCAxLCBzLT5zdHJlYW0uYXZhaWxfb3V0LCBzLT5maWxlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxlbiAtPSBzLT5zdHJlYW0uYXZhaWxfb3V0OwotICAgICAgICAgICAgcy0+aW4gICs9IGxlbjsKLSAgICAgICAgICAgIHMtPm91dCArPSBsZW47Ci0gICAgICAgICAgICBpZiAobGVuID09IDApIHMtPnpfZW9mID0gMTsKLSAgICAgICAgICAgIHJldHVybiAoaW50KWxlbjsKLSAgICAgICAgfQotICAgICAgICBpZiAocy0+c3RyZWFtLmF2YWlsX2luID09IDAgJiYgIXMtPnpfZW9mKSB7Ci0KLSAgICAgICAgICAgIGVycm5vID0gMDsKLSAgICAgICAgICAgIHMtPnN0cmVhbS5hdmFpbF9pbiA9ICh1SW50KWZyZWFkKHMtPmluYnVmLCAxLCBaX0JVRlNJWkUsIHMtPmZpbGUpOwotICAgICAgICAgICAgaWYgKHMtPnN0cmVhbS5hdmFpbF9pbiA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgcy0+el9lb2YgPSAxOwotICAgICAgICAgICAgICAgIGlmIChmZXJyb3Iocy0+ZmlsZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgcy0+el9lcnIgPSBaX0VSUk5POwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzLT5zdHJlYW0ubmV4dF9pbiA9IHMtPmluYnVmOwotICAgICAgICB9Ci0gICAgICAgIHMtPmluICs9IHMtPnN0cmVhbS5hdmFpbF9pbjsKLSAgICAgICAgcy0+b3V0ICs9IHMtPnN0cmVhbS5hdmFpbF9vdXQ7Ci0gICAgICAgIHMtPnpfZXJyID0gaW5mbGF0ZSgmKHMtPnN0cmVhbSksIFpfTk9fRkxVU0gpOwotICAgICAgICBzLT5pbiAtPSBzLT5zdHJlYW0uYXZhaWxfaW47Ci0gICAgICAgIHMtPm91dCAtPSBzLT5zdHJlYW0uYXZhaWxfb3V0OwotCi0gICAgICAgIGlmIChzLT56X2VyciA9PSBaX1NUUkVBTV9FTkQpIHsKLSAgICAgICAgICAgIC8qIENoZWNrIENSQyBhbmQgb3JpZ2luYWwgc2l6ZSAqLwotICAgICAgICAgICAgcy0+Y3JjID0gY3JjMzIocy0+Y3JjLCBzdGFydCwgKHVJbnQpKHMtPnN0cmVhbS5uZXh0X291dCAtIHN0YXJ0KSk7Ci0gICAgICAgICAgICBzdGFydCA9IHMtPnN0cmVhbS5uZXh0X291dDsKLQotICAgICAgICAgICAgaWYgKGdldExvbmcocykgIT0gcy0+Y3JjKSB7Ci0gICAgICAgICAgICAgICAgcy0+el9lcnIgPSBaX0RBVEFfRVJST1I7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICh2b2lkKWdldExvbmcocyk7Ci0gICAgICAgICAgICAgICAgLyogVGhlIHVuY29tcHJlc3NlZCBsZW5ndGggcmV0dXJuZWQgYnkgYWJvdmUgZ2V0bG9uZygpIG1heSBiZQotICAgICAgICAgICAgICAgICAqIGRpZmZlcmVudCBmcm9tIHMtPm91dCBpbiBjYXNlIG9mIGNvbmNhdGVuYXRlZCAuZ3ogZmlsZXMuCi0gICAgICAgICAgICAgICAgICogQ2hlY2sgZm9yIHN1Y2ggZmlsZXM6Ci0gICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgY2hlY2tfaGVhZGVyKHMpOwotICAgICAgICAgICAgICAgIGlmIChzLT56X2VyciA9PSBaX09LKSB7Ci0gICAgICAgICAgICAgICAgICAgIGluZmxhdGVSZXNldCgmKHMtPnN0cmVhbSkpOwotICAgICAgICAgICAgICAgICAgICBzLT5jcmMgPSBjcmMzMigwTCwgWl9OVUxMLCAwKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHMtPnpfZXJyICE9IFpfT0sgfHwgcy0+el9lb2YpIGJyZWFrOwotICAgIH0KLSAgICBzLT5jcmMgPSBjcmMzMihzLT5jcmMsIHN0YXJ0LCAodUludCkocy0+c3RyZWFtLm5leHRfb3V0IC0gc3RhcnQpKTsKLQotICAgIGlmIChsZW4gPT0gcy0+c3RyZWFtLmF2YWlsX291dCAmJgotICAgICAgICAocy0+el9lcnIgPT0gWl9EQVRBX0VSUk9SIHx8IHMtPnpfZXJyID09IFpfRVJSTk8pKQotICAgICAgICByZXR1cm4gLTE7Ci0gICAgcmV0dXJuIChpbnQpKGxlbiAtIHMtPnN0cmVhbS5hdmFpbF9vdXQpOwotfQotCi0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICAgUmVhZHMgb25lIGJ5dGUgZnJvbSB0aGUgY29tcHJlc3NlZCBmaWxlLiBnemdldGMgcmV0dXJucyB0aGlzIGJ5dGUKLSAgIG9yIC0xIGluIGNhc2Ugb2YgZW5kIG9mIGZpbGUgb3IgZXJyb3IuCi0qLwotaW50IFpFWFBPUlQgZ3pnZXRjKGZpbGUpCi0gICAgZ3pGaWxlIGZpbGU7Ci17Ci0gICAgdW5zaWduZWQgY2hhciBjOwotCi0gICAgcmV0dXJuIGd6cmVhZChmaWxlLCAmYywgMSkgPT0gMSA/IGMgOiAtMTsKLX0KLQotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgIFB1c2ggb25lIGJ5dGUgYmFjayBvbnRvIHRoZSBzdHJlYW0uCi0qLwotaW50IFpFWFBPUlQgZ3p1bmdldGMoYywgZmlsZSkKLSAgICBpbnQgYzsKLSAgICBnekZpbGUgZmlsZTsKLXsKLSAgICBnel9zdHJlYW0gKnMgPSAoZ3pfc3RyZWFtKilmaWxlOwotCi0gICAgaWYgKHMgPT0gTlVMTCB8fCBzLT5tb2RlICE9ICdyJyB8fCBjID09IEVPRiB8fCBzLT5iYWNrICE9IEVPRikgcmV0dXJuIEVPRjsKLSAgICBzLT5iYWNrID0gYzsKLSAgICBzLT5vdXQtLTsKLSAgICBzLT5sYXN0ID0gKHMtPnpfZXJyID09IFpfU1RSRUFNX0VORCk7Ci0gICAgaWYgKHMtPmxhc3QpIHMtPnpfZXJyID0gWl9PSzsKLSAgICBzLT56X2VvZiA9IDA7Ci0gICAgcmV0dXJuIGM7Ci19Ci0KLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgICBSZWFkcyBieXRlcyBmcm9tIHRoZSBjb21wcmVzc2VkIGZpbGUgdW50aWwgbGVuLTEgY2hhcmFjdGVycyBhcmUKLSAgIHJlYWQsIG9yIGEgbmV3bGluZSBjaGFyYWN0ZXIgaXMgcmVhZCBhbmQgdHJhbnNmZXJyZWQgdG8gYnVmLCBvciBhbgotICAgZW5kLW9mLWZpbGUgY29uZGl0aW9uIGlzIGVuY291bnRlcmVkLiAgVGhlIHN0cmluZyBpcyB0aGVuIHRlcm1pbmF0ZWQKLSAgIHdpdGggYSBudWxsIGNoYXJhY3Rlci4KLSAgICAgIGd6Z2V0cyByZXR1cm5zIGJ1Ziwgb3IgWl9OVUxMIGluIGNhc2Ugb2YgZXJyb3IuCi0KLSAgICAgIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIGlzIG5vdCBvcHRpbWl6ZWQgYXQgYWxsLgotKi8KLWNoYXIgKiBaRVhQT1JUIGd6Z2V0cyhmaWxlLCBidWYsIGxlbikKLSAgICBnekZpbGUgZmlsZTsKLSAgICBjaGFyICpidWY7Ci0gICAgaW50IGxlbjsKLXsKLSAgICBjaGFyICpiID0gYnVmOwotICAgIGlmIChidWYgPT0gWl9OVUxMIHx8IGxlbiA8PSAwKSByZXR1cm4gWl9OVUxMOwotCi0gICAgd2hpbGUgKC0tbGVuID4gMCAmJiBnenJlYWQoZmlsZSwgYnVmLCAxKSA9PSAxICYmICpidWYrKyAhPSAnXG4nKSA7Ci0gICAgKmJ1ZiA9ICdcMCc7Ci0gICAgcmV0dXJuIGIgPT0gYnVmICYmIGxlbiA+IDAgPyBaX05VTEwgOiBiOwotfQotCi0KLSNpZm5kZWYgTk9fR1pDT01QUkVTUwotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgIFdyaXRlcyB0aGUgZ2l2ZW4gbnVtYmVyIG9mIHVuY29tcHJlc3NlZCBieXRlcyBpbnRvIHRoZSBjb21wcmVzc2VkIGZpbGUuCi0gICBnendyaXRlIHJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyBhY3R1YWxseSB3cml0dGVuICgwIGluIGNhc2Ugb2YgZXJyb3IpLgotKi8KLWludCBaRVhQT1JUIGd6d3JpdGUgKGZpbGUsIGJ1ZiwgbGVuKQotICAgIGd6RmlsZSBmaWxlOwotICAgIHZvaWRwYyBidWY7Ci0gICAgdW5zaWduZWQgbGVuOwotewotICAgIGd6X3N0cmVhbSAqcyA9IChnel9zdHJlYW0qKWZpbGU7Ci0KLSAgICBpZiAocyA9PSBOVUxMIHx8IHMtPm1vZGUgIT0gJ3cnKSByZXR1cm4gWl9TVFJFQU1fRVJST1I7Ci0KLSAgICBzLT5zdHJlYW0ubmV4dF9pbiA9IChCeXRlZiopYnVmOwotICAgIHMtPnN0cmVhbS5hdmFpbF9pbiA9IGxlbjsKLQotICAgIHdoaWxlIChzLT5zdHJlYW0uYXZhaWxfaW4gIT0gMCkgewotCi0gICAgICAgIGlmIChzLT5zdHJlYW0uYXZhaWxfb3V0ID09IDApIHsKLQotICAgICAgICAgICAgcy0+c3RyZWFtLm5leHRfb3V0ID0gcy0+b3V0YnVmOwotICAgICAgICAgICAgaWYgKGZ3cml0ZShzLT5vdXRidWYsIDEsIFpfQlVGU0laRSwgcy0+ZmlsZSkgIT0gWl9CVUZTSVpFKSB7Ci0gICAgICAgICAgICAgICAgcy0+el9lcnIgPSBaX0VSUk5POwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcy0+c3RyZWFtLmF2YWlsX291dCA9IFpfQlVGU0laRTsKLSAgICAgICAgfQotICAgICAgICBzLT5pbiArPSBzLT5zdHJlYW0uYXZhaWxfaW47Ci0gICAgICAgIHMtPm91dCArPSBzLT5zdHJlYW0uYXZhaWxfb3V0OwotICAgICAgICBzLT56X2VyciA9IGRlZmxhdGUoJihzLT5zdHJlYW0pLCBaX05PX0ZMVVNIKTsKLSAgICAgICAgcy0+aW4gLT0gcy0+c3RyZWFtLmF2YWlsX2luOwotICAgICAgICBzLT5vdXQgLT0gcy0+c3RyZWFtLmF2YWlsX291dDsKLSAgICAgICAgaWYgKHMtPnpfZXJyICE9IFpfT0spIGJyZWFrOwotICAgIH0KLSAgICBzLT5jcmMgPSBjcmMzMihzLT5jcmMsIChjb25zdCBCeXRlZiAqKWJ1ZiwgbGVuKTsKLQotICAgIHJldHVybiAoaW50KShsZW4gLSBzLT5zdHJlYW0uYXZhaWxfaW4pOwotfQotCi0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICBDb252ZXJ0cywgZm9ybWF0cywgYW5kIHdyaXRlcyB0aGUgYXJncyB0byB0aGUgY29tcHJlc3NlZCBmaWxlIHVuZGVyCi0gICBjb250cm9sIG9mIHRoZSBmb3JtYXQgc3RyaW5nLCBhcyBpbiBmcHJpbnRmLiBnenByaW50ZiByZXR1cm5zIHRoZSBudW1iZXIgb2YKLSAgIHVuY29tcHJlc3NlZCBieXRlcyBhY3R1YWxseSB3cml0dGVuICgwIGluIGNhc2Ugb2YgZXJyb3IpLgotKi8KLSNpZmRlZiBTVERDCi0jaW5jbHVkZSA8c3RkYXJnLmg+Ci0KLWludCBaRVhQT1JUVkEgZ3pwcmludGYgKGd6RmlsZSBmaWxlLCBjb25zdCBjaGFyICpmb3JtYXQsIC8qIGFyZ3MgKi8gLi4uKQotewotICAgIGNoYXIgYnVmW1pfUFJJTlRGX0JVRlNJWkVdOwotICAgIHZhX2xpc3QgdmE7Ci0gICAgaW50IGxlbjsKLQotICAgIGJ1ZltzaXplb2YoYnVmKSAtIDFdID0gMDsKLSAgICB2YV9zdGFydCh2YSwgZm9ybWF0KTsKLSNpZmRlZiBOT192c25wcmludGYKLSMgIGlmZGVmIEhBU192c3ByaW50Zl92b2lkCi0gICAgKHZvaWQpdnNwcmludGYoYnVmLCBmb3JtYXQsIHZhKTsKLSAgICB2YV9lbmQodmEpOwotICAgIGZvciAobGVuID0gMDsgbGVuIDwgc2l6ZW9mKGJ1Zik7IGxlbisrKQotICAgICAgICBpZiAoYnVmW2xlbl0gPT0gMCkgYnJlYWs7Ci0jICBlbHNlCi0gICAgbGVuID0gdnNwcmludGYoYnVmLCBmb3JtYXQsIHZhKTsKLSAgICB2YV9lbmQodmEpOwotIyAgZW5kaWYKLSNlbHNlCi0jICBpZmRlZiBIQVNfdnNucHJpbnRmX3ZvaWQKLSAgICAodm9pZCl2c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgZm9ybWF0LCB2YSk7Ci0gICAgdmFfZW5kKHZhKTsKLSAgICBsZW4gPSBzdHJsZW4oYnVmKTsKLSMgIGVsc2UKLSAgICBsZW4gPSB2c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgZm9ybWF0LCB2YSk7Ci0gICAgdmFfZW5kKHZhKTsKLSMgIGVuZGlmCi0jZW5kaWYKLSAgICBpZiAobGVuIDw9IDAgfHwgbGVuID49IChpbnQpc2l6ZW9mKGJ1ZikgfHwgYnVmW3NpemVvZihidWYpIC0gMV0gIT0gMCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGd6d3JpdGUoZmlsZSwgYnVmLCAodW5zaWduZWQpbGVuKTsKLX0KLSNlbHNlIC8qIG5vdCBBTlNJIEMgKi8KLQotaW50IFpFWFBPUlRWQSBnenByaW50ZiAoZmlsZSwgZm9ybWF0LCBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNywgYTgsIGE5LCBhMTAsCi0gICAgICAgICAgICAgICAgICAgICAgIGExMSwgYTEyLCBhMTMsIGExNCwgYTE1LCBhMTYsIGExNywgYTE4LCBhMTksIGEyMCkKLSAgICBnekZpbGUgZmlsZTsKLSAgICBjb25zdCBjaGFyICpmb3JtYXQ7Ci0gICAgaW50IGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCwgYTksIGExMCwKLSAgICAgICAgYTExLCBhMTIsIGExMywgYTE0LCBhMTUsIGExNiwgYTE3LCBhMTgsIGExOSwgYTIwOwotewotICAgIGNoYXIgYnVmW1pfUFJJTlRGX0JVRlNJWkVdOwotICAgIGludCBsZW47Ci0KLSAgICBidWZbc2l6ZW9mKGJ1ZikgLSAxXSA9IDA7Ci0jaWZkZWYgTk9fc25wcmludGYKLSMgIGlmZGVmIEhBU19zcHJpbnRmX3ZvaWQKLSAgICBzcHJpbnRmKGJ1ZiwgZm9ybWF0LCBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNywgYTgsCi0gICAgICAgICAgICBhOSwgYTEwLCBhMTEsIGExMiwgYTEzLCBhMTQsIGExNSwgYTE2LCBhMTcsIGExOCwgYTE5LCBhMjApOwotICAgIGZvciAobGVuID0gMDsgbGVuIDwgc2l6ZW9mKGJ1Zik7IGxlbisrKQotICAgICAgICBpZiAoYnVmW2xlbl0gPT0gMCkgYnJlYWs7Ci0jICBlbHNlCi0gICAgbGVuID0gc3ByaW50ZihidWYsIGZvcm1hdCwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4LAotICAgICAgICAgICAgICAgIGE5LCBhMTAsIGExMSwgYTEyLCBhMTMsIGExNCwgYTE1LCBhMTYsIGExNywgYTE4LCBhMTksIGEyMCk7Ci0jICBlbmRpZgotI2Vsc2UKLSMgIGlmZGVmIEhBU19zbnByaW50Zl92b2lkCi0gICAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgZm9ybWF0LCBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNywgYTgsCi0gICAgICAgICAgICAgYTksIGExMCwgYTExLCBhMTIsIGExMywgYTE0LCBhMTUsIGExNiwgYTE3LCBhMTgsIGExOSwgYTIwKTsKLSAgICBsZW4gPSBzdHJsZW4oYnVmKTsKLSMgIGVsc2UKLSAgICBsZW4gPSBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBmb3JtYXQsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCwKLSAgICAgICAgICAgICAgICAgYTksIGExMCwgYTExLCBhMTIsIGExMywgYTE0LCBhMTUsIGExNiwgYTE3LCBhMTgsIGExOSwgYTIwKTsKLSMgIGVuZGlmCi0jZW5kaWYKLSAgICBpZiAobGVuIDw9IDAgfHwgbGVuID49IHNpemVvZihidWYpIHx8IGJ1ZltzaXplb2YoYnVmKSAtIDFdICE9IDApCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBnendyaXRlKGZpbGUsIGJ1ZiwgbGVuKTsKLX0KLSNlbmRpZgotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgIFdyaXRlcyBjLCBjb252ZXJ0ZWQgdG8gYW4gdW5zaWduZWQgY2hhciwgaW50byB0aGUgY29tcHJlc3NlZCBmaWxlLgotICAgZ3pwdXRjIHJldHVybnMgdGhlIHZhbHVlIHRoYXQgd2FzIHdyaXR0ZW4sIG9yIC0xIGluIGNhc2Ugb2YgZXJyb3IuCi0qLwotaW50IFpFWFBPUlQgZ3pwdXRjKGZpbGUsIGMpCi0gICAgZ3pGaWxlIGZpbGU7Ci0gICAgaW50IGM7Ci17Ci0gICAgdW5zaWduZWQgY2hhciBjYyA9ICh1bnNpZ25lZCBjaGFyKSBjOyAvKiByZXF1aXJlZCBmb3IgYmlnIGVuZGlhbiBzeXN0ZW1zICovCi0KLSAgICByZXR1cm4gZ3p3cml0ZShmaWxlLCAmY2MsIDEpID09IDEgPyAoaW50KWNjIDogLTE7Ci19Ci0KLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgICBXcml0ZXMgdGhlIGdpdmVuIG51bGwtdGVybWluYXRlZCBzdHJpbmcgdG8gdGhlIGNvbXByZXNzZWQgZmlsZSwgZXhjbHVkaW5nCi0gICB0aGUgdGVybWluYXRpbmcgbnVsbCBjaGFyYWN0ZXIuCi0gICAgICBnenB1dHMgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgd3JpdHRlbiwgb3IgLTEgaW4gY2FzZSBvZiBlcnJvci4KLSovCi1pbnQgWkVYUE9SVCBnenB1dHMoZmlsZSwgcykKLSAgICBnekZpbGUgZmlsZTsKLSAgICBjb25zdCBjaGFyICpzOwotewotICAgIHJldHVybiBnendyaXRlKGZpbGUsIChjaGFyKilzLCAodW5zaWduZWQpc3RybGVuKHMpKTsKLX0KLQotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgRmx1c2hlcyBhbGwgcGVuZGluZyBvdXRwdXQgaW50byB0aGUgY29tcHJlc3NlZCBmaWxlLiBUaGUgcGFyYW1ldGVyCi0gICBmbHVzaCBpcyBhcyBpbiB0aGUgZGVmbGF0ZSgpIGZ1bmN0aW9uLgotKi8KLWxvY2FsIGludCBkb19mbHVzaCAoZmlsZSwgZmx1c2gpCi0gICAgZ3pGaWxlIGZpbGU7Ci0gICAgaW50IGZsdXNoOwotewotICAgIHVJbnQgbGVuOwotICAgIGludCBkb25lID0gMDsKLSAgICBnel9zdHJlYW0gKnMgPSAoZ3pfc3RyZWFtKilmaWxlOwotCi0gICAgaWYgKHMgPT0gTlVMTCB8fCBzLT5tb2RlICE9ICd3JykgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwotCi0gICAgcy0+c3RyZWFtLmF2YWlsX2luID0gMDsgLyogc2hvdWxkIGJlIHplcm8gYWxyZWFkeSBhbnl3YXkgKi8KLQotICAgIGZvciAoOzspIHsKLSAgICAgICAgbGVuID0gWl9CVUZTSVpFIC0gcy0+c3RyZWFtLmF2YWlsX291dDsKLQotICAgICAgICBpZiAobGVuICE9IDApIHsKLSAgICAgICAgICAgIGlmICgodUludClmd3JpdGUocy0+b3V0YnVmLCAxLCBsZW4sIHMtPmZpbGUpICE9IGxlbikgewotICAgICAgICAgICAgICAgIHMtPnpfZXJyID0gWl9FUlJOTzsKLSAgICAgICAgICAgICAgICByZXR1cm4gWl9FUlJOTzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHMtPnN0cmVhbS5uZXh0X291dCA9IHMtPm91dGJ1ZjsKLSAgICAgICAgICAgIHMtPnN0cmVhbS5hdmFpbF9vdXQgPSBaX0JVRlNJWkU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGRvbmUpIGJyZWFrOwotICAgICAgICBzLT5vdXQgKz0gcy0+c3RyZWFtLmF2YWlsX291dDsKLSAgICAgICAgcy0+el9lcnIgPSBkZWZsYXRlKCYocy0+c3RyZWFtKSwgZmx1c2gpOwotICAgICAgICBzLT5vdXQgLT0gcy0+c3RyZWFtLmF2YWlsX291dDsKLQotICAgICAgICAvKiBJZ25vcmUgdGhlIHNlY29uZCBvZiB0d28gY29uc2VjdXRpdmUgZmx1c2hlczogKi8KLSAgICAgICAgaWYgKGxlbiA9PSAwICYmIHMtPnpfZXJyID09IFpfQlVGX0VSUk9SKSBzLT56X2VyciA9IFpfT0s7Ci0KLSAgICAgICAgLyogZGVmbGF0ZSBoYXMgZmluaXNoZWQgZmx1c2hpbmcgb25seSB3aGVuIGl0IGhhc24ndCB1c2VkIHVwCi0gICAgICAgICAqIGFsbCB0aGUgYXZhaWxhYmxlIHNwYWNlIGluIHRoZSBvdXRwdXQgYnVmZmVyOgotICAgICAgICAgKi8KLSAgICAgICAgZG9uZSA9IChzLT5zdHJlYW0uYXZhaWxfb3V0ICE9IDAgfHwgcy0+el9lcnIgPT0gWl9TVFJFQU1fRU5EKTsKLQotICAgICAgICBpZiAocy0+el9lcnIgIT0gWl9PSyAmJiBzLT56X2VyciAhPSBaX1NUUkVBTV9FTkQpIGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4gIHMtPnpfZXJyID09IFpfU1RSRUFNX0VORCA/IFpfT0sgOiBzLT56X2VycjsKLX0KLQotaW50IFpFWFBPUlQgZ3pmbHVzaCAoZmlsZSwgZmx1c2gpCi0gICAgIGd6RmlsZSBmaWxlOwotICAgICBpbnQgZmx1c2g7Ci17Ci0gICAgZ3pfc3RyZWFtICpzID0gKGd6X3N0cmVhbSopZmlsZTsKLSAgICBpbnQgZXJyID0gZG9fZmx1c2ggKGZpbGUsIGZsdXNoKTsKLQotICAgIGlmIChlcnIpIHJldHVybiBlcnI7Ci0gICAgZmZsdXNoKHMtPmZpbGUpOwotICAgIHJldHVybiAgcy0+el9lcnIgPT0gWl9TVFJFQU1fRU5EID8gWl9PSyA6IHMtPnpfZXJyOwotfQotI2VuZGlmIC8qIE5PX0daQ09NUFJFU1MgKi8KLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgICBTZXRzIHRoZSBzdGFydGluZyBwb3NpdGlvbiBmb3IgdGhlIG5leHQgZ3pyZWFkIG9yIGd6d3JpdGUgb24gdGhlIGdpdmVuCi0gICBjb21wcmVzc2VkIGZpbGUuIFRoZSBvZmZzZXQgcmVwcmVzZW50cyBhIG51bWJlciBvZiBieXRlcyBpbiB0aGUKLSAgICAgIGd6c2VlayByZXR1cm5zIHRoZSByZXN1bHRpbmcgb2Zmc2V0IGxvY2F0aW9uIGFzIG1lYXN1cmVkIGluIGJ5dGVzIGZyb20KLSAgIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHVuY29tcHJlc3NlZCBzdHJlYW0sIG9yIC0xIGluIGNhc2Ugb2YgZXJyb3IuCi0gICAgICBTRUVLX0VORCBpcyBub3QgaW1wbGVtZW50ZWQsIHJldHVybnMgZXJyb3IuCi0gICAgICBJbiB0aGlzIHZlcnNpb24gb2YgdGhlIGxpYnJhcnksIGd6c2VlayBjYW4gYmUgZXh0cmVtZWx5IHNsb3cuCi0qLwotel9vZmZfdCBaRVhQT1JUIGd6c2VlayAoZmlsZSwgb2Zmc2V0LCB3aGVuY2UpCi0gICAgZ3pGaWxlIGZpbGU7Ci0gICAgel9vZmZfdCBvZmZzZXQ7Ci0gICAgaW50IHdoZW5jZTsKLXsKLSAgICBnel9zdHJlYW0gKnMgPSAoZ3pfc3RyZWFtKilmaWxlOwotCi0gICAgaWYgKHMgPT0gTlVMTCB8fCB3aGVuY2UgPT0gU0VFS19FTkQgfHwKLSAgICAgICAgcy0+el9lcnIgPT0gWl9FUlJOTyB8fCBzLT56X2VyciA9PSBaX0RBVEFfRVJST1IpIHsKLSAgICAgICAgcmV0dXJuIC0xTDsKLSAgICB9Ci0KLSAgICBpZiAocy0+bW9kZSA9PSAndycpIHsKLSNpZmRlZiBOT19HWkNPTVBSRVNTCi0gICAgICAgIHJldHVybiAtMUw7Ci0jZWxzZQotICAgICAgICBpZiAod2hlbmNlID09IFNFRUtfU0VUKSB7Ci0gICAgICAgICAgICBvZmZzZXQgLT0gcy0+aW47Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG9mZnNldCA8IDApIHJldHVybiAtMUw7Ci0KLSAgICAgICAgLyogQXQgdGhpcyBwb2ludCwgb2Zmc2V0IGlzIHRoZSBudW1iZXIgb2YgemVybyBieXRlcyB0byB3cml0ZS4gKi8KLSAgICAgICAgaWYgKHMtPmluYnVmID09IFpfTlVMTCkgewotICAgICAgICAgICAgcy0+aW5idWYgPSAoQnl0ZSopQUxMT0MoWl9CVUZTSVpFKTsgLyogZm9yIHNlZWtpbmcgKi8KLSAgICAgICAgICAgIGlmIChzLT5pbmJ1ZiA9PSBaX05VTEwpIHJldHVybiAtMUw7Ci0gICAgICAgICAgICB6bWVtemVybyhzLT5pbmJ1ZiwgWl9CVUZTSVpFKTsKLSAgICAgICAgfQotICAgICAgICB3aGlsZSAob2Zmc2V0ID4gMCkgIHsKLSAgICAgICAgICAgIHVJbnQgc2l6ZSA9IFpfQlVGU0laRTsKLSAgICAgICAgICAgIGlmIChvZmZzZXQgPCBaX0JVRlNJWkUpIHNpemUgPSAodUludClvZmZzZXQ7Ci0KLSAgICAgICAgICAgIHNpemUgPSBnendyaXRlKGZpbGUsIHMtPmluYnVmLCBzaXplKTsKLSAgICAgICAgICAgIGlmIChzaXplID09IDApIHJldHVybiAtMUw7Ci0KLSAgICAgICAgICAgIG9mZnNldCAtPSBzaXplOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBzLT5pbjsKLSNlbmRpZgotICAgIH0KLSAgICAvKiBSZXN0IG9mIGZ1bmN0aW9uIGlzIGZvciByZWFkaW5nIG9ubHkgKi8KLQotICAgIC8qIGNvbXB1dGUgYWJzb2x1dGUgcG9zaXRpb24gKi8KLSAgICBpZiAod2hlbmNlID09IFNFRUtfQ1VSKSB7Ci0gICAgICAgIG9mZnNldCArPSBzLT5vdXQ7Ci0gICAgfQotICAgIGlmIChvZmZzZXQgPCAwKSByZXR1cm4gLTFMOwotCi0gICAgaWYgKHMtPnRyYW5zcGFyZW50KSB7Ci0gICAgICAgIC8qIG1hcCB0byBmc2VlayAqLwotICAgICAgICBzLT5iYWNrID0gRU9GOwotICAgICAgICBzLT5zdHJlYW0uYXZhaWxfaW4gPSAwOwotICAgICAgICBzLT5zdHJlYW0ubmV4dF9pbiA9IHMtPmluYnVmOwotICAgICAgICBpZiAoZnNlZWsocy0+ZmlsZSwgb2Zmc2V0LCBTRUVLX1NFVCkgPCAwKSByZXR1cm4gLTFMOwotCi0gICAgICAgIHMtPmluID0gcy0+b3V0ID0gb2Zmc2V0OwotICAgICAgICByZXR1cm4gb2Zmc2V0OwotICAgIH0KLQotICAgIC8qIEZvciBhIG5lZ2F0aXZlIHNlZWssIHJld2luZCBhbmQgdXNlIHBvc2l0aXZlIHNlZWsgKi8KLSAgICBpZiAob2Zmc2V0ID49IHMtPm91dCkgewotICAgICAgICBvZmZzZXQgLT0gcy0+b3V0OwotICAgIH0gZWxzZSBpZiAoZ3pyZXdpbmQoZmlsZSkgPCAwKSB7Ci0gICAgICAgIHJldHVybiAtMUw7Ci0gICAgfQotICAgIC8qIG9mZnNldCBpcyBub3cgdGhlIG51bWJlciBvZiBieXRlcyB0byBza2lwLiAqLwotCi0gICAgaWYgKG9mZnNldCAhPSAwICYmIHMtPm91dGJ1ZiA9PSBaX05VTEwpIHsKLSAgICAgICAgcy0+b3V0YnVmID0gKEJ5dGUqKUFMTE9DKFpfQlVGU0laRSk7Ci0gICAgICAgIGlmIChzLT5vdXRidWYgPT0gWl9OVUxMKSByZXR1cm4gLTFMOwotICAgIH0KLSAgICBpZiAob2Zmc2V0ICYmIHMtPmJhY2sgIT0gRU9GKSB7Ci0gICAgICAgIHMtPmJhY2sgPSBFT0Y7Ci0gICAgICAgIHMtPm91dCsrOwotICAgICAgICBvZmZzZXQtLTsKLSAgICAgICAgaWYgKHMtPmxhc3QpIHMtPnpfZXJyID0gWl9TVFJFQU1fRU5EOwotICAgIH0KLSAgICB3aGlsZSAob2Zmc2V0ID4gMCkgIHsKLSAgICAgICAgaW50IHNpemUgPSBaX0JVRlNJWkU7Ci0gICAgICAgIGlmIChvZmZzZXQgPCBaX0JVRlNJWkUpIHNpemUgPSAoaW50KW9mZnNldDsKLQotICAgICAgICBzaXplID0gZ3pyZWFkKGZpbGUsIHMtPm91dGJ1ZiwgKHVJbnQpc2l6ZSk7Ci0gICAgICAgIGlmIChzaXplIDw9IDApIHJldHVybiAtMUw7Ci0gICAgICAgIG9mZnNldCAtPSBzaXplOwotICAgIH0KLSAgICByZXR1cm4gcy0+b3V0OwotfQotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgUmV3aW5kcyBpbnB1dCBmaWxlLgotKi8KLWludCBaRVhQT1JUIGd6cmV3aW5kIChmaWxlKQotICAgIGd6RmlsZSBmaWxlOwotewotICAgIGd6X3N0cmVhbSAqcyA9IChnel9zdHJlYW0qKWZpbGU7Ci0KLSAgICBpZiAocyA9PSBOVUxMIHx8IHMtPm1vZGUgIT0gJ3InKSByZXR1cm4gLTE7Ci0KLSAgICBzLT56X2VyciA9IFpfT0s7Ci0gICAgcy0+el9lb2YgPSAwOwotICAgIHMtPmJhY2sgPSBFT0Y7Ci0gICAgcy0+c3RyZWFtLmF2YWlsX2luID0gMDsKLSAgICBzLT5zdHJlYW0ubmV4dF9pbiA9IHMtPmluYnVmOwotICAgIHMtPmNyYyA9IGNyYzMyKDBMLCBaX05VTEwsIDApOwotICAgIGlmICghcy0+dHJhbnNwYXJlbnQpICh2b2lkKWluZmxhdGVSZXNldCgmcy0+c3RyZWFtKTsKLSAgICBzLT5pbiA9IDA7Ci0gICAgcy0+b3V0ID0gMDsKLSAgICByZXR1cm4gZnNlZWsocy0+ZmlsZSwgcy0+c3RhcnQsIFNFRUtfU0VUKTsKLX0KLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgIFJldHVybnMgdGhlIHN0YXJ0aW5nIHBvc2l0aW9uIGZvciB0aGUgbmV4dCBnenJlYWQgb3IgZ3p3cml0ZSBvbiB0aGUKLSAgIGdpdmVuIGNvbXByZXNzZWQgZmlsZS4gVGhpcyBwb3NpdGlvbiByZXByZXNlbnRzIGEgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZQotICAgdW5jb21wcmVzc2VkIGRhdGEgc3RyZWFtLgotKi8KLXpfb2ZmX3QgWkVYUE9SVCBnenRlbGwgKGZpbGUpCi0gICAgZ3pGaWxlIGZpbGU7Ci17Ci0gICAgcmV0dXJuIGd6c2VlayhmaWxlLCAwTCwgU0VFS19DVVIpOwotfQotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgUmV0dXJucyAxIHdoZW4gRU9GIGhhcyBwcmV2aW91c2x5IGJlZW4gZGV0ZWN0ZWQgcmVhZGluZyB0aGUgZ2l2ZW4KLSAgIGlucHV0IHN0cmVhbSwgb3RoZXJ3aXNlIHplcm8uCi0qLwotaW50IFpFWFBPUlQgZ3plb2YgKGZpbGUpCi0gICAgZ3pGaWxlIGZpbGU7Ci17Ci0gICAgZ3pfc3RyZWFtICpzID0gKGd6X3N0cmVhbSopZmlsZTsKLQotICAgIC8qIFdpdGggY29uY2F0ZW5hdGVkIGNvbXByZXNzZWQgZmlsZXMgdGhhdCBjYW4gaGF2ZSBlbWJlZGRlZAotICAgICAqIGNyYyB0cmFpbGVycywgel9lb2YgaXMgbm8gbG9uZ2VyIHRoZSBvbmx5L2Jlc3QgaW5kaWNhdG9yIG9mIEVPRgotICAgICAqIG9uIGEgZ3pfc3RyZWFtLiBIYW5kbGUgZW5kLW9mLXN0cmVhbSBlcnJvciBleHBsaWNpdGx5IGhlcmUuCi0gICAgICovCi0gICAgaWYgKHMgPT0gTlVMTCB8fCBzLT5tb2RlICE9ICdyJykgcmV0dXJuIDA7Ci0gICAgaWYgKHMtPnpfZW9mKSByZXR1cm4gMTsKLSAgICByZXR1cm4gcy0+el9lcnIgPT0gWl9TVFJFQU1fRU5EOwotfQotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgUmV0dXJucyAxIGlmIHJlYWRpbmcgYW5kIGRvaW5nIHNvIHRyYW5zcGFyZW50bHksIG90aGVyd2lzZSB6ZXJvLgotKi8KLWludCBaRVhQT1JUIGd6ZGlyZWN0IChmaWxlKQotICAgIGd6RmlsZSBmaWxlOwotewotICAgIGd6X3N0cmVhbSAqcyA9IChnel9zdHJlYW0qKWZpbGU7Ci0KLSAgICBpZiAocyA9PSBOVUxMIHx8IHMtPm1vZGUgIT0gJ3InKSByZXR1cm4gMDsKLSAgICByZXR1cm4gcy0+dHJhbnNwYXJlbnQ7Ci19Ci0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgT3V0cHV0cyBhIGxvbmcgaW4gTFNCIG9yZGVyIHRvIHRoZSBnaXZlbiBmaWxlCi0qLwotbG9jYWwgdm9pZCBwdXRMb25nIChmaWxlLCB4KQotICAgIEZJTEUgKmZpbGU7Ci0gICAgdUxvbmcgeDsKLXsKLSAgICBpbnQgbjsKLSAgICBmb3IgKG4gPSAwOyBuIDwgNDsgbisrKSB7Ci0gICAgICAgIGZwdXRjKChpbnQpKHggJiAweGZmKSwgZmlsZSk7Ci0gICAgICAgIHggPj49IDg7Ci0gICAgfQotfQotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgIFJlYWRzIGEgbG9uZyBpbiBMU0Igb3JkZXIgZnJvbSB0aGUgZ2l2ZW4gZ3pfc3RyZWFtLiBTZXRzIHpfZXJyIGluIGNhc2UKLSAgIG9mIGVycm9yLgotKi8KLWxvY2FsIHVMb25nIGdldExvbmcgKHMpCi0gICAgZ3pfc3RyZWFtICpzOwotewotICAgIHVMb25nIHggPSAodUxvbmcpZ2V0X2J5dGUocyk7Ci0gICAgaW50IGM7Ci0KLSAgICB4ICs9ICgodUxvbmcpZ2V0X2J5dGUocykpPDw4OwotICAgIHggKz0gKCh1TG9uZylnZXRfYnl0ZShzKSk8PDE2OwotICAgIGMgPSBnZXRfYnl0ZShzKTsKLSAgICBpZiAoYyA9PSBFT0YpIHMtPnpfZXJyID0gWl9EQVRBX0VSUk9SOwotICAgIHggKz0gKCh1TG9uZyljKTw8MjQ7Ci0gICAgcmV0dXJuIHg7Ci19Ci0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICBGbHVzaGVzIGFsbCBwZW5kaW5nIG91dHB1dCBpZiBuZWNlc3NhcnksIGNsb3NlcyB0aGUgY29tcHJlc3NlZCBmaWxlCi0gICBhbmQgZGVhbGxvY2F0ZXMgYWxsIHRoZSAoZGUpY29tcHJlc3Npb24gc3RhdGUuCi0qLwotaW50IFpFWFBPUlQgZ3pjbG9zZSAoZmlsZSkKLSAgICBnekZpbGUgZmlsZTsKLXsKLSAgICBnel9zdHJlYW0gKnMgPSAoZ3pfc3RyZWFtKilmaWxlOwotCi0gICAgaWYgKHMgPT0gTlVMTCkgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwotCi0gICAgaWYgKHMtPm1vZGUgPT0gJ3cnKSB7Ci0jaWZkZWYgTk9fR1pDT01QUkVTUwotICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7Ci0jZWxzZQotICAgICAgICBpZiAoZG9fZmx1c2ggKGZpbGUsIFpfRklOSVNIKSAhPSBaX09LKQotICAgICAgICAgICAgcmV0dXJuIGRlc3Ryb3koKGd6X3N0cmVhbSopZmlsZSk7Ci0KLSAgICAgICAgcHV0TG9uZyAocy0+ZmlsZSwgcy0+Y3JjKTsKLSAgICAgICAgcHV0TG9uZyAocy0+ZmlsZSwgKHVMb25nKShzLT5pbiAmIDB4ZmZmZmZmZmYpKTsKLSNlbmRpZgotICAgIH0KLSAgICByZXR1cm4gZGVzdHJveSgoZ3pfc3RyZWFtKilmaWxlKTsKLX0KLQotI2lmZGVmIFNUREMKLSMgIGRlZmluZSB6c3RyZXJyb3IoZXJybnVtKSBzdHJlcnJvcihlcnJudW0pCi0jZWxzZQotIyAgZGVmaW5lIHpzdHJlcnJvcihlcnJudW0pICIiCi0jZW5kaWYKLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgIFJldHVybnMgdGhlIGVycm9yIG1lc3NhZ2UgZm9yIHRoZSBsYXN0IGVycm9yIHdoaWNoIG9jY3VycmVkIG9uIHRoZQotICAgZ2l2ZW4gY29tcHJlc3NlZCBmaWxlLiBlcnJudW0gaXMgc2V0IHRvIHpsaWIgZXJyb3IgbnVtYmVyLiBJZiBhbgotICAgZXJyb3Igb2NjdXJyZWQgaW4gdGhlIGZpbGUgc3lzdGVtIGFuZCBub3QgaW4gdGhlIGNvbXByZXNzaW9uIGxpYnJhcnksCi0gICBlcnJudW0gaXMgc2V0IHRvIFpfRVJSTk8gYW5kIHRoZSBhcHBsaWNhdGlvbiBtYXkgY29uc3VsdCBlcnJubwotICAgdG8gZ2V0IHRoZSBleGFjdCBlcnJvciBjb2RlLgotKi8KLWNvbnN0IGNoYXIgKiBaRVhQT1JUIGd6ZXJyb3IgKGZpbGUsIGVycm51bSkKLSAgICBnekZpbGUgZmlsZTsKLSAgICBpbnQgKmVycm51bTsKLXsKLSAgICBjaGFyICptOwotICAgIGd6X3N0cmVhbSAqcyA9IChnel9zdHJlYW0qKWZpbGU7Ci0KLSAgICBpZiAocyA9PSBOVUxMKSB7Ci0gICAgICAgICplcnJudW0gPSBaX1NUUkVBTV9FUlJPUjsKLSAgICAgICAgcmV0dXJuIChjb25zdCBjaGFyKilFUlJfTVNHKFpfU1RSRUFNX0VSUk9SKTsKLSAgICB9Ci0gICAgKmVycm51bSA9IHMtPnpfZXJyOwotICAgIGlmICgqZXJybnVtID09IFpfT0spIHJldHVybiAoY29uc3QgY2hhciopIiI7Ci0KLSAgICBtID0gKGNoYXIqKSgqZXJybnVtID09IFpfRVJSTk8gPyB6c3RyZXJyb3IoZXJybm8pIDogcy0+c3RyZWFtLm1zZyk7Ci0KLSAgICBpZiAobSA9PSBOVUxMIHx8ICptID09ICdcMCcpIG0gPSAoY2hhciopRVJSX01TRyhzLT56X2Vycik7Ci0KLSAgICBUUllGUkVFKHMtPm1zZyk7Ci0gICAgcy0+bXNnID0gKGNoYXIqKUFMTE9DKHN0cmxlbihzLT5wYXRoKSArIHN0cmxlbihtKSArIDMpOwotICAgIGlmIChzLT5tc2cgPT0gWl9OVUxMKSByZXR1cm4gKGNvbnN0IGNoYXIqKUVSUl9NU0coWl9NRU1fRVJST1IpOwotICAgIHN0cmNweShzLT5tc2csIHMtPnBhdGgpOwotICAgIHN0cmNhdChzLT5tc2csICI6ICIpOwotICAgIHN0cmNhdChzLT5tc2csIG0pOwotICAgIHJldHVybiAoY29uc3QgY2hhciopcy0+bXNnOwotfQotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgQ2xlYXIgdGhlIGVycm9yIGFuZCBlbmQtb2YtZmlsZSBmbGFncywgYW5kIGRvIHRoZSBzYW1lIGZvciB0aGUgcmVhbCBmaWxlLgotKi8KLXZvaWQgWkVYUE9SVCBnemNsZWFyZXJyIChmaWxlKQotICAgIGd6RmlsZSBmaWxlOwotewotICAgIGd6X3N0cmVhbSAqcyA9IChnel9zdHJlYW0qKWZpbGU7Ci0KLSAgICBpZiAocyA9PSBOVUxMKSByZXR1cm47Ci0gICAgaWYgKHMtPnpfZXJyICE9IFpfU1RSRUFNX0VORCkgcy0+el9lcnIgPSBaX09LOwotICAgIHMtPnpfZW9mID0gMDsKLSAgICBjbGVhcmVycihzLT5maWxlKTsKLX0KZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi9nemxpYi5jIGIvTW9kdWxlcy96bGliL2d6bGliLmMKaW5kZXggNjAzZTYwZS4uZmFlMjAyZSAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL2d6bGliLmMKKysrIGIvTW9kdWxlcy96bGliL2d6bGliLmMKQEAgLTEsMTkgKzEsMjMgQEAKIC8qIGd6bGliLmMgLS0gemxpYiBmdW5jdGlvbnMgY29tbW9uIHRvIHJlYWRpbmcgYW5kIHdyaXRpbmcgZ3ppcCBmaWxlcwotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDEwIE1hcmsgQWRsZXIKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAxMCwgMjAxMSwgMjAxMiwgMjAxMyBNYXJrIEFkbGVyCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCiAgKi8KIAogI2luY2x1ZGUgImd6Z3V0cy5oIgogCisjaWYgZGVmaW5lZChfV0lOMzIpICYmICFkZWZpbmVkKF9fQk9STEFORENfXykKKyMgIGRlZmluZSBMU0VFSyBfbHNlZWtpNjQKKyNlbHNlCiAjaWYgZGVmaW5lZChfTEFSR0VGSUxFNjRfU09VUkNFKSAmJiBfTEZTNjRfTEFSR0VGSUxFLTAKICMgIGRlZmluZSBMU0VFSyBsc2VlazY0CiAjZWxzZQogIyAgZGVmaW5lIExTRUVLIGxzZWVrCiAjZW5kaWYKKyNlbmRpZgogCiAvKiBMb2NhbCBmdW5jdGlvbnMgKi8KIGxvY2FsIHZvaWQgZ3pfcmVzZXQgT0YoKGd6X3N0YXRlcCkpOwotbG9jYWwgZ3pGaWxlIGd6X29wZW4gT0YoKGNvbnN0IGNoYXIgKiwgaW50LCBjb25zdCBjaGFyICopKTsKK2xvY2FsIGd6RmlsZSBnel9vcGVuIE9GKChjb25zdCB2b2lkICosIGludCwgY29uc3QgY2hhciAqKSk7CiAKICNpZiBkZWZpbmVkIFVOREVSX0NFCiAKQEAgLTcxLDI4ICs3NSw0MCBAQAogbG9jYWwgdm9pZCBnel9yZXNldChzdGF0ZSkKICAgICBnel9zdGF0ZXAgc3RhdGU7CiB7CisgICAgc3RhdGUtPnguaGF2ZSA9IDA7ICAgICAgICAgICAgICAvKiBubyBvdXRwdXQgZGF0YSBhdmFpbGFibGUgKi8KICAgICBpZiAoc3RhdGUtPm1vZGUgPT0gR1pfUkVBRCkgeyAgIC8qIGZvciByZWFkaW5nIC4uLiAqLwotICAgICAgICBzdGF0ZS0+aGF2ZSA9IDA7ICAgICAgICAgICAgLyogbm8gb3V0cHV0IGRhdGEgYXZhaWxhYmxlICovCiAgICAgICAgIHN0YXRlLT5lb2YgPSAwOyAgICAgICAgICAgICAvKiBub3QgYXQgZW5kIG9mIGZpbGUgKi8KKyAgICAgICAgc3RhdGUtPnBhc3QgPSAwOyAgICAgICAgICAgIC8qIGhhdmUgbm90IHJlYWQgcGFzdCBlbmQgeWV0ICovCiAgICAgICAgIHN0YXRlLT5ob3cgPSBMT09LOyAgICAgICAgICAvKiBsb29rIGZvciBnemlwIGhlYWRlciAqLwotICAgICAgICBzdGF0ZS0+ZGlyZWN0ID0gMTsgICAgICAgICAgLyogZGVmYXVsdCBmb3IgZW1wdHkgZmlsZSAqLwogICAgIH0KICAgICBzdGF0ZS0+c2VlayA9IDA7ICAgICAgICAgICAgICAgIC8qIG5vIHNlZWsgcmVxdWVzdCBwZW5kaW5nICovCiAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfT0ssIE5VTEwpOyAgICAvKiBjbGVhciBlcnJvciAqLwotICAgIHN0YXRlLT5wb3MgPSAwOyAgICAgICAgICAgICAgICAgLyogbm8gdW5jb21wcmVzc2VkIGRhdGEgeWV0ICovCisgICAgc3RhdGUtPngucG9zID0gMDsgICAgICAgICAgICAgICAvKiBubyB1bmNvbXByZXNzZWQgZGF0YSB5ZXQgKi8KICAgICBzdGF0ZS0+c3RybS5hdmFpbF9pbiA9IDA7ICAgICAgIC8qIG5vIGlucHV0IGRhdGEgeWV0ICovCiB9CiAKIC8qIE9wZW4gYSBnemlwIGZpbGUgZWl0aGVyIGJ5IG5hbWUgb3IgZmlsZSBkZXNjcmlwdG9yLiAqLwogbG9jYWwgZ3pGaWxlIGd6X29wZW4ocGF0aCwgZmQsIG1vZGUpCi0gICAgY29uc3QgY2hhciAqcGF0aDsKKyAgICBjb25zdCB2b2lkICpwYXRoOwogICAgIGludCBmZDsKICAgICBjb25zdCBjaGFyICptb2RlOwogewogICAgIGd6X3N0YXRlcCBzdGF0ZTsKKyAgICBzaXplX3QgbGVuOworICAgIGludCBvZmxhZzsKKyNpZmRlZiBPX0NMT0VYRUMKKyAgICBpbnQgY2xvZXhlYyA9IDA7CisjZW5kaWYKKyNpZmRlZiBPX0VYQ0wKKyAgICBpbnQgZXhjbHVzaXZlID0gMDsKKyNlbmRpZgorCisgICAgLyogY2hlY2sgaW5wdXQgKi8KKyAgICBpZiAocGF0aCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIC8qIGFsbG9jYXRlIGd6RmlsZSBzdHJ1Y3R1cmUgdG8gcmV0dXJuICovCi0gICAgc3RhdGUgPSBtYWxsb2Moc2l6ZW9mKGd6X3N0YXRlKSk7CisgICAgc3RhdGUgPSAoZ3pfc3RhdGVwKW1hbGxvYyhzaXplb2YoZ3pfc3RhdGUpKTsKICAgICBpZiAoc3RhdGUgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgc3RhdGUtPnNpemUgPSAwOyAgICAgICAgICAgIC8qIG5vIGJ1ZmZlcnMgYWxsb2NhdGVkIHlldCAqLwpAQCAtMTAzLDYgKzExOSw3IEBACiAgICAgc3RhdGUtPm1vZGUgPSBHWl9OT05FOwogICAgIHN0YXRlLT5sZXZlbCA9IFpfREVGQVVMVF9DT01QUkVTU0lPTjsKICAgICBzdGF0ZS0+c3RyYXRlZ3kgPSBaX0RFRkFVTFRfU1RSQVRFR1k7CisgICAgc3RhdGUtPmRpcmVjdCA9IDA7CiAgICAgd2hpbGUgKCptb2RlKSB7CiAgICAgICAgIGlmICgqbW9kZSA+PSAnMCcgJiYgKm1vZGUgPD0gJzknKQogICAgICAgICAgICAgc3RhdGUtPmxldmVsID0gKm1vZGUgLSAnMCc7CkBAIC0xMjQsNiArMTQxLDE2IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICBjYXNlICdiJzogICAgICAgLyogaWdub3JlIC0tIHdpbGwgcmVxdWVzdCBiaW5hcnkgYW55d2F5ICovCiAgICAgICAgICAgICAgICAgYnJlYWs7CisjaWZkZWYgT19DTE9FWEVDCisgICAgICAgICAgICBjYXNlICdlJzoKKyAgICAgICAgICAgICAgICBjbG9leGVjID0gMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyNlbmRpZgorI2lmZGVmIE9fRVhDTAorICAgICAgICAgICAgY2FzZSAneCc6CisgICAgICAgICAgICAgICAgZXhjbHVzaXZlID0gMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyNlbmRpZgogICAgICAgICAgICAgY2FzZSAnZic6CiAgICAgICAgICAgICAgICAgc3RhdGUtPnN0cmF0ZWd5ID0gWl9GSUxURVJFRDsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTEzNSw2ICsxNjIsMTAgQEAKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgJ0YnOgogICAgICAgICAgICAgICAgIHN0YXRlLT5zdHJhdGVneSA9IFpfRklYRUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICdUJzoKKyAgICAgICAgICAgICAgICBzdGF0ZS0+ZGlyZWN0ID0gMTsKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6ICAgICAgICAvKiBjb3VsZCBjb25zaWRlciBhcyBhbiBlcnJvciwgYnV0IGp1c3QgaWdub3JlICovCiAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgfQpAQCAtMTQ3LDMwICsxNzgsNzEgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCisgICAgLyogY2FuJ3QgZm9yY2UgdHJhbnNwYXJlbnQgcmVhZCAqLworICAgIGlmIChzdGF0ZS0+bW9kZSA9PSBHWl9SRUFEKSB7CisgICAgICAgIGlmIChzdGF0ZS0+ZGlyZWN0KSB7CisgICAgICAgICAgICBmcmVlKHN0YXRlKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIHN0YXRlLT5kaXJlY3QgPSAxOyAgICAgIC8qIGZvciBlbXB0eSBmaWxlICovCisgICAgfQorCiAgICAgLyogc2F2ZSB0aGUgcGF0aCBuYW1lIGZvciBlcnJvciBtZXNzYWdlcyAqLwotICAgIHN0YXRlLT5wYXRoID0gbWFsbG9jKHN0cmxlbihwYXRoKSArIDEpOworI2lmZGVmIF9XSU4zMgorICAgIGlmIChmZCA9PSAtMikgeworICAgICAgICBsZW4gPSB3Y3N0b21icyhOVUxMLCBwYXRoLCAwKTsKKyAgICAgICAgaWYgKGxlbiA9PSAoc2l6ZV90KS0xKQorICAgICAgICAgICAgbGVuID0gMDsKKyAgICB9CisgICAgZWxzZQorI2VuZGlmCisgICAgICAgIGxlbiA9IHN0cmxlbigoY29uc3QgY2hhciAqKXBhdGgpOworICAgIHN0YXRlLT5wYXRoID0gKGNoYXIgKiltYWxsb2MobGVuICsgMSk7CiAgICAgaWYgKHN0YXRlLT5wYXRoID09IE5VTEwpIHsKICAgICAgICAgZnJlZShzdGF0ZSk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBzdHJjcHkoc3RhdGUtPnBhdGgsIHBhdGgpOworI2lmZGVmIF9XSU4zMgorICAgIGlmIChmZCA9PSAtMikKKyAgICAgICAgaWYgKGxlbikKKyAgICAgICAgICAgIHdjc3RvbWJzKHN0YXRlLT5wYXRoLCBwYXRoLCBsZW4gKyAxKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgKihzdGF0ZS0+cGF0aCkgPSAwOworICAgIGVsc2UKKyNlbmRpZgorI2lmICFkZWZpbmVkKE5PX3NucHJpbnRmKSAmJiAhZGVmaW5lZChOT192c25wcmludGYpCisgICAgICAgIHNucHJpbnRmKHN0YXRlLT5wYXRoLCBsZW4gKyAxLCAiJXMiLCAoY29uc3QgY2hhciAqKXBhdGgpOworI2Vsc2UKKyAgICAgICAgc3RyY3B5KHN0YXRlLT5wYXRoLCBwYXRoKTsKKyNlbmRpZgogCi0gICAgLyogb3BlbiB0aGUgZmlsZSB3aXRoIHRoZSBhcHByb3ByaWF0ZSBtb2RlIChvciBqdXN0IHVzZSBmZCkgKi8KLSAgICBzdGF0ZS0+ZmQgPSBmZCAhPSAtMSA/IGZkIDoKLSAgICAgICAgb3BlbihwYXRoLAorICAgIC8qIGNvbXB1dGUgdGhlIGZsYWdzIGZvciBvcGVuKCkgKi8KKyAgICBvZmxhZyA9CiAjaWZkZWYgT19MQVJHRUZJTEUKLSAgICAgICAgICAgIE9fTEFSR0VGSUxFIHwKKyAgICAgICAgT19MQVJHRUZJTEUgfAogI2VuZGlmCiAjaWZkZWYgT19CSU5BUlkKLSAgICAgICAgICAgIE9fQklOQVJZIHwKKyAgICAgICAgT19CSU5BUlkgfAogI2VuZGlmCi0gICAgICAgICAgICAoc3RhdGUtPm1vZGUgPT0gR1pfUkVBRCA/Ci0gICAgICAgICAgICAgICAgT19SRE9OTFkgOgotICAgICAgICAgICAgICAgIChPX1dST05MWSB8IE9fQ1JFQVQgfCAoCi0gICAgICAgICAgICAgICAgICAgIHN0YXRlLT5tb2RlID09IEdaX1dSSVRFID8KLSAgICAgICAgICAgICAgICAgICAgICAgIE9fVFJVTkMgOgotICAgICAgICAgICAgICAgICAgICAgICAgT19BUFBFTkQpKSksCi0gICAgICAgICAgICAwNjY2KTsKKyNpZmRlZiBPX0NMT0VYRUMKKyAgICAgICAgKGNsb2V4ZWMgPyBPX0NMT0VYRUMgOiAwKSB8CisjZW5kaWYKKyAgICAgICAgKHN0YXRlLT5tb2RlID09IEdaX1JFQUQgPworICAgICAgICAgT19SRE9OTFkgOgorICAgICAgICAgKE9fV1JPTkxZIHwgT19DUkVBVCB8CisjaWZkZWYgT19FWENMCisgICAgICAgICAgKGV4Y2x1c2l2ZSA/IE9fRVhDTCA6IDApIHwKKyNlbmRpZgorICAgICAgICAgIChzdGF0ZS0+bW9kZSA9PSBHWl9XUklURSA/CisgICAgICAgICAgIE9fVFJVTkMgOgorICAgICAgICAgICBPX0FQUEVORCkpKTsKKworICAgIC8qIG9wZW4gdGhlIGZpbGUgd2l0aCB0aGUgYXBwcm9wcmlhdGUgZmxhZ3MgKG9yIGp1c3QgdXNlIGZkKSAqLworICAgIHN0YXRlLT5mZCA9IGZkID4gLTEgPyBmZCA6ICgKKyNpZmRlZiBfV0lOMzIKKyAgICAgICAgZmQgPT0gLTIgPyBfd29wZW4ocGF0aCwgb2ZsYWcsIDA2NjYpIDoKKyNlbmRpZgorICAgICAgICBvcGVuKChjb25zdCBjaGFyICopcGF0aCwgb2ZsYWcsIDA2NjYpKTsKICAgICBpZiAoc3RhdGUtPmZkID09IC0xKSB7CiAgICAgICAgIGZyZWUoc3RhdGUtPnBhdGgpOwogICAgICAgICBmcmVlKHN0YXRlKTsKQEAgLTIxNiwxNSArMjg4LDI5IEBACiAgICAgY2hhciAqcGF0aDsgICAgICAgICAvKiBpZGVudGlmaWVyIGZvciBlcnJvciBtZXNzYWdlcyAqLwogICAgIGd6RmlsZSBnejsKIAotICAgIGlmIChmZCA9PSAtMSB8fCAocGF0aCA9IG1hbGxvYyg3ICsgMyAqIHNpemVvZihpbnQpKSkgPT0gTlVMTCkKKyAgICBpZiAoZmQgPT0gLTEgfHwgKHBhdGggPSAoY2hhciAqKW1hbGxvYyg3ICsgMyAqIHNpemVvZihpbnQpKSkgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CisjaWYgIWRlZmluZWQoTk9fc25wcmludGYpICYmICFkZWZpbmVkKE5PX3ZzbnByaW50ZikKKyAgICBzbnByaW50ZihwYXRoLCA3ICsgMyAqIHNpemVvZihpbnQpLCAiPGZkOiVkPiIsIGZkKTsgLyogZm9yIGRlYnVnZ2luZyAqLworI2Vsc2UKICAgICBzcHJpbnRmKHBhdGgsICI8ZmQ6JWQ+IiwgZmQpOyAgIC8qIGZvciBkZWJ1Z2dpbmcgKi8KKyNlbmRpZgogICAgIGd6ID0gZ3pfb3BlbihwYXRoLCBmZCwgbW9kZSk7CiAgICAgZnJlZShwYXRoKTsKICAgICByZXR1cm4gZ3o7CiB9CiAKIC8qIC0tIHNlZSB6bGliLmggLS0gKi8KKyNpZmRlZiBfV0lOMzIKK2d6RmlsZSBaRVhQT1JUIGd6b3Blbl93KHBhdGgsIG1vZGUpCisgICAgY29uc3Qgd2NoYXJfdCAqcGF0aDsKKyAgICBjb25zdCBjaGFyICptb2RlOworeworICAgIHJldHVybiBnel9vcGVuKHBhdGgsIC0yLCBtb2RlKTsKK30KKyNlbmRpZgorCisvKiAtLSBzZWUgemxpYi5oIC0tICovCiBpbnQgWkVYUE9SVCBnemJ1ZmZlcihmaWxlLCBzaXplKQogICAgIGd6RmlsZSBmaWxlOwogICAgIHVuc2lnbmVkIHNpemU7CkBAIC0yNDMsOCArMzI5LDggQEAKICAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgLyogY2hlY2sgYW5kIHNldCByZXF1ZXN0ZWQgc2l6ZSAqLwotICAgIGlmIChzaXplID09IDApCi0gICAgICAgIHJldHVybiAtMTsKKyAgICBpZiAoc2l6ZSA8IDIpCisgICAgICAgIHNpemUgPSAyOyAgICAgICAgICAgICAgIC8qIG5lZWQgdHdvIGJ5dGVzIHRvIGNoZWNrIG1hZ2ljIGhlYWRlciAqLwogICAgIHN0YXRlLT53YW50ID0gc2l6ZTsKICAgICByZXR1cm4gMDsKIH0KQEAgLTI2MSw3ICszNDcsOCBAQAogICAgIHN0YXRlID0gKGd6X3N0YXRlcClmaWxlOwogCiAgICAgLyogY2hlY2sgdGhhdCB3ZSdyZSByZWFkaW5nIGFuZCB0aGF0IHRoZXJlJ3Mgbm8gZXJyb3IgKi8KLSAgICBpZiAoc3RhdGUtPm1vZGUgIT0gR1pfUkVBRCB8fCBzdGF0ZS0+ZXJyICE9IFpfT0spCisgICAgaWYgKHN0YXRlLT5tb2RlICE9IEdaX1JFQUQgfHwKKyAgICAgICAgICAgIChzdGF0ZS0+ZXJyICE9IFpfT0sgJiYgc3RhdGUtPmVyciAhPSBaX0JVRl9FUlJPUikpCiAgICAgICAgIHJldHVybiAtMTsKIAogICAgIC8qIGJhY2sgdXAgYW5kIHN0YXJ0IG92ZXIgKi8KQEAgLTI4OSw3ICszNzYsNyBAQAogICAgICAgICByZXR1cm4gLTE7CiAKICAgICAvKiBjaGVjayB0aGF0IHRoZXJlJ3Mgbm8gZXJyb3IgKi8KLSAgICBpZiAoc3RhdGUtPmVyciAhPSBaX09LKQorICAgIGlmIChzdGF0ZS0+ZXJyICE9IFpfT0sgJiYgc3RhdGUtPmVyciAhPSBaX0JVRl9FUlJPUikKICAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgLyogY2FuIG9ubHkgc2VlayBmcm9tIHN0YXJ0IG9yIHJlbGF0aXZlIHRvIGN1cnJlbnQgcG9zaXRpb24gKi8KQEAgLTI5OCwzMSArMzg1LDMyIEBACiAKICAgICAvKiBub3JtYWxpemUgb2Zmc2V0IHRvIGEgU0VFS19DVVIgc3BlY2lmaWNhdGlvbiAqLwogICAgIGlmICh3aGVuY2UgPT0gU0VFS19TRVQpCi0gICAgICAgIG9mZnNldCAtPSBzdGF0ZS0+cG9zOworICAgICAgICBvZmZzZXQgLT0gc3RhdGUtPngucG9zOwogICAgIGVsc2UgaWYgKHN0YXRlLT5zZWVrKQogICAgICAgICBvZmZzZXQgKz0gc3RhdGUtPnNraXA7CiAgICAgc3RhdGUtPnNlZWsgPSAwOwogCiAgICAgLyogaWYgd2l0aGluIHJhdyBhcmVhIHdoaWxlIHJlYWRpbmcsIGp1c3QgZ28gdGhlcmUgKi8KICAgICBpZiAoc3RhdGUtPm1vZGUgPT0gR1pfUkVBRCAmJiBzdGF0ZS0+aG93ID09IENPUFkgJiYKLSAgICAgICAgc3RhdGUtPnBvcyArIG9mZnNldCA+PSBzdGF0ZS0+cmF3KSB7Ci0gICAgICAgIHJldCA9IExTRUVLKHN0YXRlLT5mZCwgb2Zmc2V0IC0gc3RhdGUtPmhhdmUsIFNFRUtfQ1VSKTsKKyAgICAgICAgICAgIHN0YXRlLT54LnBvcyArIG9mZnNldCA+PSAwKSB7CisgICAgICAgIHJldCA9IExTRUVLKHN0YXRlLT5mZCwgb2Zmc2V0IC0gc3RhdGUtPnguaGF2ZSwgU0VFS19DVVIpOwogICAgICAgICBpZiAocmV0ID09IC0xKQogICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBzdGF0ZS0+aGF2ZSA9IDA7CisgICAgICAgIHN0YXRlLT54LmhhdmUgPSAwOwogICAgICAgICBzdGF0ZS0+ZW9mID0gMDsKKyAgICAgICAgc3RhdGUtPnBhc3QgPSAwOwogICAgICAgICBzdGF0ZS0+c2VlayA9IDA7CiAgICAgICAgIGd6X2Vycm9yKHN0YXRlLCBaX09LLCBOVUxMKTsKICAgICAgICAgc3RhdGUtPnN0cm0uYXZhaWxfaW4gPSAwOwotICAgICAgICBzdGF0ZS0+cG9zICs9IG9mZnNldDsKLSAgICAgICAgcmV0dXJuIHN0YXRlLT5wb3M7CisgICAgICAgIHN0YXRlLT54LnBvcyArPSBvZmZzZXQ7CisgICAgICAgIHJldHVybiBzdGF0ZS0+eC5wb3M7CiAgICAgfQogCiAgICAgLyogY2FsY3VsYXRlIHNraXAgYW1vdW50LCByZXdpbmRpbmcgaWYgbmVlZGVkIGZvciBiYWNrIHNlZWsgd2hlbiByZWFkaW5nICovCiAgICAgaWYgKG9mZnNldCA8IDApIHsKICAgICAgICAgaWYgKHN0YXRlLT5tb2RlICE9IEdaX1JFQUQpICAgICAgICAgLyogd3JpdGluZyAtLSBjYW4ndCBnbyBiYWNrd2FyZHMgKi8KICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgb2Zmc2V0ICs9IHN0YXRlLT5wb3M7CisgICAgICAgIG9mZnNldCArPSBzdGF0ZS0+eC5wb3M7CiAgICAgICAgIGlmIChvZmZzZXQgPCAwKSAgICAgICAgICAgICAgICAgICAgIC8qIGJlZm9yZSBzdGFydCBvZiBmaWxlISAqLwogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICBpZiAoZ3pyZXdpbmQoZmlsZSkgPT0gLTEpICAgICAgICAgICAvKiByZXdpbmQsIHRoZW4gc2tpcCB0byBvZmZzZXQgKi8KQEAgLTMzMSwxMSArNDE5LDExIEBACiAKICAgICAvKiBpZiByZWFkaW5nLCBza2lwIHdoYXQncyBpbiBvdXRwdXQgYnVmZmVyIChvbmUgbGVzcyBnemdldGMoKSBjaGVjaykgKi8KICAgICBpZiAoc3RhdGUtPm1vZGUgPT0gR1pfUkVBRCkgewotICAgICAgICBuID0gR1RfT0ZGKHN0YXRlLT5oYXZlKSB8fCAoel9vZmY2NF90KXN0YXRlLT5oYXZlID4gb2Zmc2V0ID8KLSAgICAgICAgICAgICh1bnNpZ25lZClvZmZzZXQgOiBzdGF0ZS0+aGF2ZTsKLSAgICAgICAgc3RhdGUtPmhhdmUgLT0gbjsKLSAgICAgICAgc3RhdGUtPm5leHQgKz0gbjsKLSAgICAgICAgc3RhdGUtPnBvcyArPSBuOworICAgICAgICBuID0gR1RfT0ZGKHN0YXRlLT54LmhhdmUpIHx8ICh6X29mZjY0X3Qpc3RhdGUtPnguaGF2ZSA+IG9mZnNldCA/CisgICAgICAgICAgICAodW5zaWduZWQpb2Zmc2V0IDogc3RhdGUtPnguaGF2ZTsKKyAgICAgICAgc3RhdGUtPnguaGF2ZSAtPSBuOworICAgICAgICBzdGF0ZS0+eC5uZXh0ICs9IG47CisgICAgICAgIHN0YXRlLT54LnBvcyArPSBuOwogICAgICAgICBvZmZzZXQgLT0gbjsKICAgICB9CiAKQEAgLTM0NCw3ICs0MzIsNyBAQAogICAgICAgICBzdGF0ZS0+c2VlayA9IDE7CiAgICAgICAgIHN0YXRlLT5za2lwID0gb2Zmc2V0OwogICAgIH0KLSAgICByZXR1cm4gc3RhdGUtPnBvcyArIG9mZnNldDsKKyAgICByZXR1cm4gc3RhdGUtPngucG9zICsgb2Zmc2V0OwogfQogCiAvKiAtLSBzZWUgemxpYi5oIC0tICovCkBAIC0zNzMsNyArNDYxLDcgQEAKICAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgLyogcmV0dXJuIHBvc2l0aW9uICovCi0gICAgcmV0dXJuIHN0YXRlLT5wb3MgKyAoc3RhdGUtPnNlZWsgPyBzdGF0ZS0+c2tpcCA6IDApOworICAgIHJldHVybiBzdGF0ZS0+eC5wb3MgKyAoc3RhdGUtPnNlZWsgPyBzdGF0ZS0+c2tpcCA6IDApOwogfQogCiAvKiAtLSBzZWUgemxpYi5oIC0tICovCkBAIC00MzMsOCArNTIxLDcgQEAKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICAvKiByZXR1cm4gZW5kLW9mLWZpbGUgc3RhdGUgKi8KLSAgICByZXR1cm4gc3RhdGUtPm1vZGUgPT0gR1pfUkVBRCA/Ci0gICAgICAgIChzdGF0ZS0+ZW9mICYmIHN0YXRlLT5zdHJtLmF2YWlsX2luID09IDAgJiYgc3RhdGUtPmhhdmUgPT0gMCkgOiAwOworICAgIHJldHVybiBzdGF0ZS0+bW9kZSA9PSBHWl9SRUFEID8gc3RhdGUtPnBhc3QgOiAwOwogfQogCiAvKiAtLSBzZWUgemxpYi5oIC0tICovCkBAIC00NTQsNyArNTQxLDggQEAKICAgICAvKiByZXR1cm4gZXJyb3IgaW5mb3JtYXRpb24gKi8KICAgICBpZiAoZXJybnVtICE9IE5VTEwpCiAgICAgICAgICplcnJudW0gPSBzdGF0ZS0+ZXJyOwotICAgIHJldHVybiBzdGF0ZS0+bXNnID09IE5VTEwgPyAiIiA6IHN0YXRlLT5tc2c7CisgICAgcmV0dXJuIHN0YXRlLT5lcnIgPT0gWl9NRU1fRVJST1IgPyAib3V0IG9mIG1lbW9yeSIgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0YXRlLT5tc2cgPT0gTlVMTCA/ICIiIDogc3RhdGUtPm1zZyk7CiB9CiAKIC8qIC0tIHNlZSB6bGliLmggLS0gKi8KQEAgLTQ3MSw4ICs1NTksMTAgQEAKICAgICAgICAgcmV0dXJuOwogCiAgICAgLyogY2xlYXIgZXJyb3IgYW5kIGVuZC1vZi1maWxlICovCi0gICAgaWYgKHN0YXRlLT5tb2RlID09IEdaX1JFQUQpCisgICAgaWYgKHN0YXRlLT5tb2RlID09IEdaX1JFQUQpIHsKICAgICAgICAgc3RhdGUtPmVvZiA9IDA7CisgICAgICAgIHN0YXRlLT5wYXN0ID0gMDsKKyAgICB9CiAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfT0ssIE5VTEwpOwogfQogCkBAIC00OTQsMjYgKzU4NCwzMyBAQAogICAgICAgICBzdGF0ZS0+bXNnID0gTlVMTDsKICAgICB9CiAKKyAgICAvKiBpZiBmYXRhbCwgc2V0IHN0YXRlLT54LmhhdmUgdG8gMCBzbyB0aGF0IHRoZSBnemdldGMoKSBtYWNybyBmYWlscyAqLworICAgIGlmIChlcnIgIT0gWl9PSyAmJiBlcnIgIT0gWl9CVUZfRVJST1IpCisgICAgICAgIHN0YXRlLT54LmhhdmUgPSAwOworCiAgICAgLyogc2V0IGVycm9yIGNvZGUsIGFuZCBpZiBubyBtZXNzYWdlLCB0aGVuIGRvbmUgKi8KICAgICBzdGF0ZS0+ZXJyID0gZXJyOwogICAgIGlmIChtc2cgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgLyogZm9yIGFuIG91dCBvZiBtZW1vcnkgZXJyb3IsIHNhdmUgYXMgc3RhdGljIHN0cmluZyAqLwotICAgIGlmIChlcnIgPT0gWl9NRU1fRVJST1IpIHsKLSAgICAgICAgc3RhdGUtPm1zZyA9IChjaGFyICopbXNnOworICAgIC8qIGZvciBhbiBvdXQgb2YgbWVtb3J5IGVycm9yLCByZXR1cm4gbGl0ZXJhbCBzdHJpbmcgd2hlbiByZXF1ZXN0ZWQgKi8KKyAgICBpZiAoZXJyID09IFpfTUVNX0VSUk9SKQogICAgICAgICByZXR1cm47Ci0gICAgfQogCiAgICAgLyogY29uc3RydWN0IGVycm9yIG1lc3NhZ2Ugd2l0aCBwYXRoICovCi0gICAgaWYgKChzdGF0ZS0+bXNnID0gbWFsbG9jKHN0cmxlbihzdGF0ZS0+cGF0aCkgKyBzdHJsZW4obXNnKSArIDMpKSA9PSBOVUxMKSB7CisgICAgaWYgKChzdGF0ZS0+bXNnID0gKGNoYXIgKiltYWxsb2Moc3RybGVuKHN0YXRlLT5wYXRoKSArIHN0cmxlbihtc2cpICsgMykpID09CisgICAgICAgICAgICBOVUxMKSB7CiAgICAgICAgIHN0YXRlLT5lcnIgPSBaX01FTV9FUlJPUjsKLSAgICAgICAgc3RhdGUtPm1zZyA9IChjaGFyICopIm91dCBvZiBtZW1vcnkiOwogICAgICAgICByZXR1cm47CiAgICAgfQorI2lmICFkZWZpbmVkKE5PX3NucHJpbnRmKSAmJiAhZGVmaW5lZChOT192c25wcmludGYpCisgICAgc25wcmludGYoc3RhdGUtPm1zZywgc3RybGVuKHN0YXRlLT5wYXRoKSArIHN0cmxlbihtc2cpICsgMywKKyAgICAgICAgICAgICAiJXMlcyVzIiwgc3RhdGUtPnBhdGgsICI6ICIsIG1zZyk7CisjZWxzZQogICAgIHN0cmNweShzdGF0ZS0+bXNnLCBzdGF0ZS0+cGF0aCk7CiAgICAgc3RyY2F0KHN0YXRlLT5tc2csICI6ICIpOwogICAgIHN0cmNhdChzdGF0ZS0+bXNnLCBtc2cpOworI2VuZGlmCiAgICAgcmV0dXJuOwogfQogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvZ3pyZWFkLmMgYi9Nb2R1bGVzL3psaWIvZ3pyZWFkLmMKaW5kZXggNTQ4MjAxYS4uYmY0NTM4ZSAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL2d6cmVhZC5jCisrKyBiL01vZHVsZXMvemxpYi9nenJlYWQuYwpAQCAtMSw1ICsxLDUgQEAKIC8qIGd6cmVhZC5jIC0tIHpsaWIgZnVuY3Rpb25zIGZvciByZWFkaW5nIGd6aXAgZmlsZXMKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAxMCBNYXJrIEFkbGVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMTAsIDIwMTEsIDIwMTIsIDIwMTMgTWFyayBBZGxlcgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAogICovCiAKQEAgLTgsMTAgKzgsOSBAQAogLyogTG9jYWwgZnVuY3Rpb25zICovCiBsb2NhbCBpbnQgZ3pfbG9hZCBPRigoZ3pfc3RhdGVwLCB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkLCB1bnNpZ25lZCAqKSk7CiBsb2NhbCBpbnQgZ3pfYXZhaWwgT0YoKGd6X3N0YXRlcCkpOwotbG9jYWwgaW50IGd6X25leHQ0IE9GKChnel9zdGF0ZXAsIHVuc2lnbmVkIGxvbmcgKikpOwotbG9jYWwgaW50IGd6X2hlYWQgT0YoKGd6X3N0YXRlcCkpOworbG9jYWwgaW50IGd6X2xvb2sgT0YoKGd6X3N0YXRlcCkpOwogbG9jYWwgaW50IGd6X2RlY29tcCBPRigoZ3pfc3RhdGVwKSk7Ci1sb2NhbCBpbnQgZ3pfbWFrZSBPRigoZ3pfc3RhdGVwKSk7Citsb2NhbCBpbnQgZ3pfZmV0Y2ggT0YoKGd6X3N0YXRlcCkpOwogbG9jYWwgaW50IGd6X3NraXAgT0YoKGd6X3N0YXRlcCwgel9vZmY2NF90KSk7CiAKIC8qIFVzZSByZWFkKCkgdG8gbG9hZCBhIGJ1ZmZlciAtLSByZXR1cm4gLTEgb24gZXJyb3IsIG90aGVyd2lzZSAwLiAgUmVhZCBmcm9tCkBAIC00Niw3MyArNDUsNTQgQEAKICAgIGVycm9yLCAwIG90aGVyd2lzZS4gIE5vdGUgdGhhdCB0aGUgZW9mIGZsYWcgaXMgc2V0IHdoZW4gdGhlIGVuZCBvZiB0aGUgaW5wdXQKICAgIGZpbGUgaXMgcmVhY2hlZCwgZXZlbiB0aG91Z2ggdGhlcmUgbWF5IGJlIHVudXNlZCBkYXRhIGluIHRoZSBidWZmZXIuICBPbmNlCiAgICB0aGF0IGRhdGEgaGFzIGJlZW4gdXNlZCwgbm8gbW9yZSBhdHRlbXB0cyB3aWxsIGJlIG1hZGUgdG8gcmVhZCB0aGUgZmlsZS4KLSAgIGd6X2F2YWlsKCkgYXNzdW1lcyB0aGF0IHN0cm0tPmF2YWlsX2luID09IDAuICovCisgICBJZiBzdHJtLT5hdmFpbF9pbiAhPSAwLCB0aGVuIHRoZSBjdXJyZW50IGRhdGEgaXMgbW92ZWQgdG8gdGhlIGJlZ2lubmluZyBvZgorICAgdGhlIGlucHV0IGJ1ZmZlciwgYW5kIHRoZW4gdGhlIHJlbWFpbmRlciBvZiB0aGUgYnVmZmVyIGlzIGxvYWRlZCB3aXRoIHRoZQorICAgYXZhaWxhYmxlIGRhdGEgZnJvbSB0aGUgaW5wdXQgZmlsZS4gKi8KIGxvY2FsIGludCBnel9hdmFpbChzdGF0ZSkKICAgICBnel9zdGF0ZXAgc3RhdGU7CiB7CisgICAgdW5zaWduZWQgZ290OwogICAgIHpfc3RyZWFtcCBzdHJtID0gJihzdGF0ZS0+c3RybSk7CiAKLSAgICBpZiAoc3RhdGUtPmVyciAhPSBaX09LKQorICAgIGlmIChzdGF0ZS0+ZXJyICE9IFpfT0sgJiYgc3RhdGUtPmVyciAhPSBaX0JVRl9FUlJPUikKICAgICAgICAgcmV0dXJuIC0xOwogICAgIGlmIChzdGF0ZS0+ZW9mID09IDApIHsKLSAgICAgICAgaWYgKGd6X2xvYWQoc3RhdGUsIHN0YXRlLT5pbiwgc3RhdGUtPnNpemUsCi0gICAgICAgICAgICAgICAgKHVuc2lnbmVkICopJihzdHJtLT5hdmFpbF9pbikpID09IC0xKQorICAgICAgICBpZiAoc3RybS0+YXZhaWxfaW4pIHsgICAgICAgLyogY29weSB3aGF0J3MgdGhlcmUgdG8gdGhlIHN0YXJ0ICovCisgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpwID0gc3RhdGUtPmluOworICAgICAgICAgICAgdW5zaWduZWQgY29uc3QgY2hhciAqcSA9IHN0cm0tPm5leHRfaW47CisgICAgICAgICAgICB1bnNpZ25lZCBuID0gc3RybS0+YXZhaWxfaW47CisgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgKnArKyA9ICpxKys7CisgICAgICAgICAgICB9IHdoaWxlICgtLW4pOworICAgICAgICB9CisgICAgICAgIGlmIChnel9sb2FkKHN0YXRlLCBzdGF0ZS0+aW4gKyBzdHJtLT5hdmFpbF9pbiwKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUtPnNpemUgLSBzdHJtLT5hdmFpbF9pbiwgJmdvdCkgPT0gLTEpCiAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIHN0cm0tPmF2YWlsX2luICs9IGdvdDsKICAgICAgICAgc3RybS0+bmV4dF9pbiA9IHN0YXRlLT5pbjsKICAgICB9CiAgICAgcmV0dXJuIDA7CiB9CiAKLS8qIEdldCBuZXh0IGJ5dGUgZnJvbSBpbnB1dCwgb3IgLTEgaWYgZW5kIG9yIGVycm9yLiAqLwotI2RlZmluZSBORVhUKCkgKChzdHJtLT5hdmFpbF9pbiA9PSAwICYmIGd6X2F2YWlsKHN0YXRlKSA9PSAtMSkgPyAtMSA6IFwKLSAgICAgICAgICAgICAgICAoc3RybS0+YXZhaWxfaW4gPT0gMCA/IC0xIDogXAotICAgICAgICAgICAgICAgICAoc3RybS0+YXZhaWxfaW4tLSwgKihzdHJtLT5uZXh0X2luKSsrKSkpCi0KLS8qIEdldCBhIGZvdXItYnl0ZSBsaXR0bGUtZW5kaWFuIGludGVnZXIgYW5kIHJldHVybiAwIG9uIHN1Y2Nlc3MgYW5kIHRoZSB2YWx1ZQotICAgaW4gKnJldC4gIE90aGVyd2lzZSAtMSBpcyByZXR1cm5lZCBhbmQgKnJldCBpcyBub3QgbW9kaWZpZWQuICovCi1sb2NhbCBpbnQgZ3pfbmV4dDQoc3RhdGUsIHJldCkKLSAgICBnel9zdGF0ZXAgc3RhdGU7Ci0gICAgdW5zaWduZWQgbG9uZyAqcmV0OwotewotICAgIGludCBjaDsKLSAgICB1bnNpZ25lZCBsb25nIHZhbDsKLSAgICB6X3N0cmVhbXAgc3RybSA9ICYoc3RhdGUtPnN0cm0pOwotCi0gICAgdmFsID0gTkVYVCgpOwotICAgIHZhbCArPSAodW5zaWduZWQpTkVYVCgpIDw8IDg7Ci0gICAgdmFsICs9ICh1bnNpZ25lZCBsb25nKU5FWFQoKSA8PCAxNjsKLSAgICBjaCA9IE5FWFQoKTsKLSAgICBpZiAoY2ggPT0gLTEpCi0gICAgICAgIHJldHVybiAtMTsKLSAgICB2YWwgKz0gKHVuc2lnbmVkIGxvbmcpY2ggPDwgMjQ7Ci0gICAgKnJldCA9IHZhbDsKLSAgICByZXR1cm4gMDsKLX0KLQotLyogTG9vayBmb3IgZ3ppcCBoZWFkZXIsIHNldCB1cCBmb3IgaW5mbGF0ZSBvciBjb3B5LiAgc3RhdGUtPmhhdmUgbXVzdCBiZSB6ZXJvLgorLyogTG9vayBmb3IgZ3ppcCBoZWFkZXIsIHNldCB1cCBmb3IgaW5mbGF0ZSBvciBjb3B5LiAgc3RhdGUtPnguaGF2ZSBtdXN0IGJlIDAuCiAgICBJZiB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIGluLCBhbGxvY2F0ZSByZXF1aXJlZCBtZW1vcnkuICBzdGF0ZS0+aG93IHdpbGwgYmUKICAgIGxlZnQgdW5jaGFuZ2VkIGlmIHRoZXJlIGlzIG5vIG1vcmUgaW5wdXQgZGF0YSBhdmFpbGFibGUsIHdpbGwgYmUgc2V0IHRvIENPUFkKICAgIGlmIHRoZXJlIGlzIG5vIGd6aXAgaGVhZGVyIGFuZCBkaXJlY3QgY29weWluZyB3aWxsIGJlIHBlcmZvcm1lZCwgb3IgaXQgd2lsbAotICAgYmUgc2V0IHRvIEdaSVAgZm9yIGRlY29tcHJlc3Npb24sIGFuZCB0aGUgZ3ppcCBoZWFkZXIgd2lsbCBiZSBza2lwcGVkIHNvCi0gICB0aGF0IHRoZSBuZXh0IGF2YWlsYWJsZSBpbnB1dCBkYXRhIGlzIHRoZSByYXcgZGVmbGF0ZSBzdHJlYW0uICBJZiBkaXJlY3QKLSAgIGNvcHlpbmcsIHRoZW4gbGVmdG92ZXIgaW5wdXQgZGF0YSBmcm9tIHRoZSBpbnB1dCBidWZmZXIgd2lsbCBiZSBjb3BpZWQgdG8KLSAgIHRoZSBvdXRwdXQgYnVmZmVyLiAgSW4gdGhhdCBjYXNlLCBhbGwgZnVydGhlciBmaWxlIHJlYWRzIHdpbGwgYmUgZGlyZWN0bHkgdG8KLSAgIGVpdGhlciB0aGUgb3V0cHV0IGJ1ZmZlciBvciBhIHVzZXIgYnVmZmVyLiAgSWYgZGVjb21wcmVzc2luZywgdGhlIGluZmxhdGUKLSAgIHN0YXRlIGFuZCB0aGUgY2hlY2sgdmFsdWUgd2lsbCBiZSBpbml0aWFsaXplZC4gIGd6X2hlYWQoKSB3aWxsIHJldHVybiAwIG9uCi0gICBzdWNjZXNzIG9yIC0xIG9uIGZhaWx1cmUuICBGYWlsdXJlcyBtYXkgaW5jbHVkZSByZWFkIGVycm9ycyBvciBnemlwIGhlYWRlcgotICAgZXJyb3JzLiAgKi8KLWxvY2FsIGludCBnel9oZWFkKHN0YXRlKQorICAgYmUgc2V0IHRvIEdaSVAgZm9yIGRlY29tcHJlc3Npb24uICBJZiBkaXJlY3QgY29weWluZywgdGhlbiBsZWZ0b3ZlciBpbnB1dAorICAgZGF0YSBmcm9tIHRoZSBpbnB1dCBidWZmZXIgd2lsbCBiZSBjb3BpZWQgdG8gdGhlIG91dHB1dCBidWZmZXIuICBJbiB0aGF0CisgICBjYXNlLCBhbGwgZnVydGhlciBmaWxlIHJlYWRzIHdpbGwgYmUgZGlyZWN0bHkgdG8gZWl0aGVyIHRoZSBvdXRwdXQgYnVmZmVyIG9yCisgICBhIHVzZXIgYnVmZmVyLiAgSWYgZGVjb21wcmVzc2luZywgdGhlIGluZmxhdGUgc3RhdGUgd2lsbCBiZSBpbml0aWFsaXplZC4KKyAgIGd6X2xvb2soKSB3aWxsIHJldHVybiAwIG9uIHN1Y2Nlc3Mgb3IgLTEgb24gZmFpbHVyZS4gKi8KK2xvY2FsIGludCBnel9sb29rKHN0YXRlKQogICAgIGd6X3N0YXRlcCBzdGF0ZTsKIHsKICAgICB6X3N0cmVhbXAgc3RybSA9ICYoc3RhdGUtPnN0cm0pOwotICAgIGludCBmbGFnczsKLSAgICB1bnNpZ25lZCBsZW47CiAKICAgICAvKiBhbGxvY2F0ZSByZWFkIGJ1ZmZlcnMgYW5kIGluZmxhdGUgbWVtb3J5ICovCiAgICAgaWYgKHN0YXRlLT5zaXplID09IDApIHsKICAgICAgICAgLyogYWxsb2NhdGUgYnVmZmVycyAqLwotICAgICAgICBzdGF0ZS0+aW4gPSBtYWxsb2Moc3RhdGUtPndhbnQpOwotICAgICAgICBzdGF0ZS0+b3V0ID0gbWFsbG9jKHN0YXRlLT53YW50IDw8IDEpOworICAgICAgICBzdGF0ZS0+aW4gPSAodW5zaWduZWQgY2hhciAqKW1hbGxvYyhzdGF0ZS0+d2FudCk7CisgICAgICAgIHN0YXRlLT5vdXQgPSAodW5zaWduZWQgY2hhciAqKW1hbGxvYyhzdGF0ZS0+d2FudCA8PCAxKTsKICAgICAgICAgaWYgKHN0YXRlLT5pbiA9PSBOVUxMIHx8IHN0YXRlLT5vdXQgPT0gTlVMTCkgewogICAgICAgICAgICAgaWYgKHN0YXRlLT5vdXQgIT0gTlVMTCkKICAgICAgICAgICAgICAgICBmcmVlKHN0YXRlLT5vdXQpOwpAQCAtMTI5LDcgKzEwOSw3IEBACiAgICAgICAgIHN0YXRlLT5zdHJtLm9wYXF1ZSA9IFpfTlVMTDsKICAgICAgICAgc3RhdGUtPnN0cm0uYXZhaWxfaW4gPSAwOwogICAgICAgICBzdGF0ZS0+c3RybS5uZXh0X2luID0gWl9OVUxMOwotICAgICAgICBpZiAoaW5mbGF0ZUluaXQyKCYoc3RhdGUtPnN0cm0pLCAtMTUpICE9IFpfT0spIHsgICAgLyogcmF3IGluZmxhdGUgKi8KKyAgICAgICAgaWYgKGluZmxhdGVJbml0MigmKHN0YXRlLT5zdHJtKSwgMTUgKyAxNikgIT0gWl9PSykgeyAgICAvKiBndW56aXAgKi8KICAgICAgICAgICAgIGZyZWUoc3RhdGUtPm91dCk7CiAgICAgICAgICAgICBmcmVlKHN0YXRlLT5pbik7CiAgICAgICAgICAgICBzdGF0ZS0+c2l6ZSA9IDA7CkBAIC0xMzgsODMgKzExOCw0NSBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgLyogZ2V0IHNvbWUgZGF0YSBpbiB0aGUgaW5wdXQgYnVmZmVyICovCi0gICAgaWYgKHN0cm0tPmF2YWlsX2luID09IDApIHsKKyAgICAvKiBnZXQgYXQgbGVhc3QgdGhlIG1hZ2ljIGJ5dGVzIGluIHRoZSBpbnB1dCBidWZmZXIgKi8KKyAgICBpZiAoc3RybS0+YXZhaWxfaW4gPCAyKSB7CiAgICAgICAgIGlmIChnel9hdmFpbChzdGF0ZSkgPT0gLTEpCiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIGlmIChzdHJtLT5hdmFpbF9pbiA9PSAwKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgLyogbG9vayBmb3IgdGhlIGd6aXAgbWFnaWMgaGVhZGVyIGJ5dGVzIDMxIGFuZCAxMzkgKi8KLSAgICBpZiAoc3RybS0+bmV4dF9pblswXSA9PSAzMSkgewotICAgICAgICBzdHJtLT5hdmFpbF9pbi0tOwotICAgICAgICBzdHJtLT5uZXh0X2luKys7Ci0gICAgICAgIGlmIChzdHJtLT5hdmFpbF9pbiA9PSAwICYmIGd6X2F2YWlsKHN0YXRlKSA9PSAtMSkKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgaWYgKHN0cm0tPmF2YWlsX2luICYmIHN0cm0tPm5leHRfaW5bMF0gPT0gMTM5KSB7Ci0gICAgICAgICAgICAvKiB3ZSBoYXZlIGEgZ3ppcCBoZWFkZXIsIHdvbyBob28hICovCi0gICAgICAgICAgICBzdHJtLT5hdmFpbF9pbi0tOwotICAgICAgICAgICAgc3RybS0+bmV4dF9pbisrOwotCi0gICAgICAgICAgICAvKiBza2lwIHJlc3Qgb2YgaGVhZGVyICovCi0gICAgICAgICAgICBpZiAoTkVYVCgpICE9IDgpIHsgICAgICAvKiBjb21wcmVzc2lvbiBtZXRob2QgKi8KLSAgICAgICAgICAgICAgICBnel9lcnJvcihzdGF0ZSwgWl9EQVRBX0VSUk9SLCAidW5rbm93biBjb21wcmVzc2lvbiBtZXRob2QiKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmbGFncyA9IE5FWFQoKTsKLSAgICAgICAgICAgIGlmIChmbGFncyAmIDB4ZTApIHsgICAgIC8qIHJlc2VydmVkIGZsYWcgYml0cyAqLwotICAgICAgICAgICAgICAgIGd6X2Vycm9yKHN0YXRlLCBaX0RBVEFfRVJST1IsICJ1bmtub3duIGhlYWRlciBmbGFncyBzZXQiKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBORVhUKCk7ICAgICAgICAgICAgICAgICAvKiBtb2RpZmljYXRpb24gdGltZSAqLwotICAgICAgICAgICAgTkVYVCgpOwotICAgICAgICAgICAgTkVYVCgpOwotICAgICAgICAgICAgTkVYVCgpOwotICAgICAgICAgICAgTkVYVCgpOyAgICAgICAgICAgICAgICAgLyogZXh0cmEgZmxhZ3MgKi8KLSAgICAgICAgICAgIE5FWFQoKTsgICAgICAgICAgICAgICAgIC8qIG9wZXJhdGluZyBzeXN0ZW0gKi8KLSAgICAgICAgICAgIGlmIChmbGFncyAmIDQpIHsgICAgICAgIC8qIGV4dHJhIGZpZWxkICovCi0gICAgICAgICAgICAgICAgbGVuID0gKHVuc2lnbmVkKU5FWFQoKTsKLSAgICAgICAgICAgICAgICBsZW4gKz0gKHVuc2lnbmVkKU5FWFQoKSA8PCA4OwotICAgICAgICAgICAgICAgIHdoaWxlIChsZW4tLSkKLSAgICAgICAgICAgICAgICAgICAgaWYgKE5FWFQoKSA8IDApCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChmbGFncyAmIDgpICAgICAgICAgIC8qIGZpbGUgbmFtZSAqLwotICAgICAgICAgICAgICAgIHdoaWxlIChORVhUKCkgPiAwKQotICAgICAgICAgICAgICAgICAgICA7Ci0gICAgICAgICAgICBpZiAoZmxhZ3MgJiAxNikgICAgICAgICAvKiBjb21tZW50ICovCi0gICAgICAgICAgICAgICAgd2hpbGUgKE5FWFQoKSA+IDApCi0gICAgICAgICAgICAgICAgICAgIDsKLSAgICAgICAgICAgIGlmIChmbGFncyAmIDIpIHsgICAgICAgIC8qIGhlYWRlciBjcmMgKi8KLSAgICAgICAgICAgICAgICBORVhUKCk7Ci0gICAgICAgICAgICAgICAgTkVYVCgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLyogYW4gdW5leHBlY3RlZCBlbmQgb2YgZmlsZSBpcyBub3QgY2hlY2tlZCBmb3IgaGVyZSAtLSBpdCB3aWxsIGJlCi0gICAgICAgICAgICAgICBub3RpY2VkIG9uIHRoZSBmaXJzdCByZXF1ZXN0IGZvciB1bmNvbXByZXNzZWQgZGF0YSAqLwotCi0gICAgICAgICAgICAvKiBzZXQgdXAgZm9yIGRlY29tcHJlc3Npb24gKi8KLSAgICAgICAgICAgIGluZmxhdGVSZXNldChzdHJtKTsKLSAgICAgICAgICAgIHN0cm0tPmFkbGVyID0gY3JjMzIoMEwsIFpfTlVMTCwgMCk7Ci0gICAgICAgICAgICBzdGF0ZS0+aG93ID0gR1pJUDsKLSAgICAgICAgICAgIHN0YXRlLT5kaXJlY3QgPSAwOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAvKiBub3QgYSBnemlwIGZpbGUgLS0gc2F2ZSBmaXJzdCBieXRlICgzMSkgYW5kIGZhbGwgdG8gcmF3IGkvbyAqLwotICAgICAgICAgICAgc3RhdGUtPm91dFswXSA9IDMxOwotICAgICAgICAgICAgc3RhdGUtPmhhdmUgPSAxOwotICAgICAgICB9CisgICAgLyogbG9vayBmb3IgZ3ppcCBtYWdpYyBieXRlcyAtLSBpZiB0aGVyZSwgZG8gZ3ppcCBkZWNvZGluZyAobm90ZTogdGhlcmUgaXMKKyAgICAgICBhIGxvZ2ljYWwgZGlsZW1tYSBoZXJlIHdoZW4gY29uc2lkZXJpbmcgdGhlIGNhc2Ugb2YgYSBwYXJ0aWFsbHkgd3JpdHRlbgorICAgICAgIGd6aXAgZmlsZSwgdG8gd2l0LCBpZiBhIHNpbmdsZSAzMSBieXRlIGlzIHdyaXR0ZW4sIHRoZW4gd2UgY2Fubm90IHRlbGwKKyAgICAgICB3aGV0aGVyIHRoaXMgaXMgYSBzaW5nbGUtYnl0ZSBmaWxlLCBvciBqdXN0IGEgcGFydGlhbGx5IHdyaXR0ZW4gZ3ppcAorICAgICAgIGZpbGUgLS0gZm9yIGhlcmUgd2UgYXNzdW1lIHRoYXQgaWYgYSBnemlwIGZpbGUgaXMgYmVpbmcgd3JpdHRlbiwgdGhlbgorICAgICAgIHRoZSBoZWFkZXIgd2lsbCBiZSB3cml0dGVuIGluIGEgc2luZ2xlIG9wZXJhdGlvbiwgc28gdGhhdCByZWFkaW5nIGEKKyAgICAgICBzaW5nbGUgYnl0ZSBpcyBzdWZmaWNpZW50IGluZGljYXRpb24gdGhhdCBpdCBpcyBub3QgYSBnemlwIGZpbGUpICovCisgICAgaWYgKHN0cm0tPmF2YWlsX2luID4gMSAmJgorICAgICAgICAgICAgc3RybS0+bmV4dF9pblswXSA9PSAzMSAmJiBzdHJtLT5uZXh0X2luWzFdID09IDEzOSkgeworICAgICAgICBpbmZsYXRlUmVzZXQoc3RybSk7CisgICAgICAgIHN0YXRlLT5ob3cgPSBHWklQOworICAgICAgICBzdGF0ZS0+ZGlyZWN0ID0gMDsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgLyogZG9pbmcgcmF3IGkvbywgc2F2ZSBzdGFydCBvZiByYXcgZGF0YSBmb3Igc2Vla2luZywgY29weSBhbnkgbGVmdG92ZXIKLSAgICAgICBpbnB1dCB0byBvdXRwdXQgLS0gdGhpcyBhc3N1bWVzIHRoYXQgdGhlIG91dHB1dCBidWZmZXIgaXMgbGFyZ2VyIHRoYW4KLSAgICAgICB0aGUgaW5wdXQgYnVmZmVyLCB3aGljaCBhbHNvIGFzc3VyZXMgc3BhY2UgZm9yIGd6dW5nZXRjKCkgKi8KLSAgICBzdGF0ZS0+cmF3ID0gc3RhdGUtPnBvczsKLSAgICBzdGF0ZS0+bmV4dCA9IHN0YXRlLT5vdXQ7CisgICAgLyogbm8gZ3ppcCBoZWFkZXIgLS0gaWYgd2Ugd2VyZSBkZWNvZGluZyBnemlwIGJlZm9yZSwgdGhlbiB0aGlzIGlzIHRyYWlsaW5nCisgICAgICAgZ2FyYmFnZS4gIElnbm9yZSB0aGUgdHJhaWxpbmcgZ2FyYmFnZSBhbmQgZmluaXNoLiAqLworICAgIGlmIChzdGF0ZS0+ZGlyZWN0ID09IDApIHsKKyAgICAgICAgc3RybS0+YXZhaWxfaW4gPSAwOworICAgICAgICBzdGF0ZS0+ZW9mID0gMTsKKyAgICAgICAgc3RhdGUtPnguaGF2ZSA9IDA7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIC8qIGRvaW5nIHJhdyBpL28sIGNvcHkgYW55IGxlZnRvdmVyIGlucHV0IHRvIG91dHB1dCAtLSB0aGlzIGFzc3VtZXMgdGhhdAorICAgICAgIHRoZSBvdXRwdXQgYnVmZmVyIGlzIGxhcmdlciB0aGFuIHRoZSBpbnB1dCBidWZmZXIsIHdoaWNoIGFsc28gYXNzdXJlcworICAgICAgIHNwYWNlIGZvciBnenVuZ2V0YygpICovCisgICAgc3RhdGUtPngubmV4dCA9IHN0YXRlLT5vdXQ7CiAgICAgaWYgKHN0cm0tPmF2YWlsX2luKSB7Ci0gICAgICAgIG1lbWNweShzdGF0ZS0+bmV4dCArIHN0YXRlLT5oYXZlLCBzdHJtLT5uZXh0X2luLCBzdHJtLT5hdmFpbF9pbik7Ci0gICAgICAgIHN0YXRlLT5oYXZlICs9IHN0cm0tPmF2YWlsX2luOworICAgICAgICBtZW1jcHkoc3RhdGUtPngubmV4dCwgc3RybS0+bmV4dF9pbiwgc3RybS0+YXZhaWxfaW4pOworICAgICAgICBzdGF0ZS0+eC5oYXZlID0gc3RybS0+YXZhaWxfaW47CiAgICAgICAgIHN0cm0tPmF2YWlsX2luID0gMDsKICAgICB9CiAgICAgc3RhdGUtPmhvdyA9IENPUFk7CkBAIC0yMjMsMTkgKzE2NSwxNSBAQAogfQogCiAvKiBEZWNvbXByZXNzIGZyb20gaW5wdXQgdG8gdGhlIHByb3ZpZGVkIG5leHRfb3V0IGFuZCBhdmFpbF9vdXQgaW4gdGhlIHN0YXRlLgotICAgSWYgdGhlIGVuZCBvZiB0aGUgY29tcHJlc3NlZCBkYXRhIGlzIHJlYWNoZWQsIHRoZW4gdmVyaWZ5IHRoZSBnemlwIHRyYWlsZXIKLSAgIGNoZWNrIHZhbHVlIGFuZCBsZW5ndGggKG1vZHVsbyAyXjMyKS4gIHN0YXRlLT5oYXZlIGFuZCBzdGF0ZS0+bmV4dCBhcmUgc2V0Ci0gICB0byBwb2ludCB0byB0aGUganVzdCBkZWNvbXByZXNzZWQgZGF0YSwgYW5kIHRoZSBjcmMgaXMgdXBkYXRlZC4gIElmIHRoZQotICAgdHJhaWxlciBpcyB2ZXJpZmllZCwgc3RhdGUtPmhvdyBpcyByZXNldCB0byBMT09LIHRvIGxvb2sgZm9yIHRoZSBuZXh0IGd6aXAKLSAgIHN0cmVhbSBvciByYXcgZGF0YSwgb25jZSBzdGF0ZS0+aGF2ZSBpcyBkZXBsZXRlZC4gIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtMQotICAgb24gZmFpbHVyZS4gIEZhaWx1cmVzIG1heSBpbmNsdWRlIGludmFsaWQgY29tcHJlc3NlZCBkYXRhIG9yIGEgZmFpbGVkIGd6aXAKLSAgIHRyYWlsZXIgdmVyaWZpY2F0aW9uLiAqLworICAgT24gcmV0dXJuLCBzdGF0ZS0+eC5oYXZlIGFuZCBzdGF0ZS0+eC5uZXh0IHBvaW50IHRvIHRoZSBqdXN0IGRlY29tcHJlc3NlZAorICAgZGF0YS4gIElmIHRoZSBnemlwIHN0cmVhbSBjb21wbGV0ZXMsIHN0YXRlLT5ob3cgaXMgcmVzZXQgdG8gTE9PSyB0byBsb29rIGZvcgorICAgdGhlIG5leHQgZ3ppcCBzdHJlYW0gb3IgcmF3IGRhdGEsIG9uY2Ugc3RhdGUtPnguaGF2ZSBpcyBkZXBsZXRlZC4gIFJldHVybnMgMAorICAgb24gc3VjY2VzcywgLTEgb24gZmFpbHVyZS4gKi8KIGxvY2FsIGludCBnel9kZWNvbXAoc3RhdGUpCiAgICAgZ3pfc3RhdGVwIHN0YXRlOwogewotICAgIGludCByZXQ7CisgICAgaW50IHJldCA9IFpfT0s7CiAgICAgdW5zaWduZWQgaGFkOwotICAgIHVuc2lnbmVkIGxvbmcgY3JjLCBsZW47CiAgICAgel9zdHJlYW1wIHN0cm0gPSAmKHN0YXRlLT5zdHJtKTsKIAogICAgIC8qIGZpbGwgb3V0cHV0IGJ1ZmZlciB1cCB0byBlbmQgb2YgZGVmbGF0ZSBzdHJlYW0gKi8KQEAgLTI0NSwxNSArMTgzLDE1IEBACiAgICAgICAgIGlmIChzdHJtLT5hdmFpbF9pbiA9PSAwICYmIGd6X2F2YWlsKHN0YXRlKSA9PSAtMSkKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgaWYgKHN0cm0tPmF2YWlsX2luID09IDApIHsKLSAgICAgICAgICAgIGd6X2Vycm9yKHN0YXRlLCBaX0RBVEFfRVJST1IsICJ1bmV4cGVjdGVkIGVuZCBvZiBmaWxlIik7Ci0gICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICBnel9lcnJvcihzdGF0ZSwgWl9CVUZfRVJST1IsICJ1bmV4cGVjdGVkIGVuZCBvZiBmaWxlIik7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCiAgICAgICAgIC8qIGRlY29tcHJlc3MgYW5kIGhhbmRsZSBlcnJvcnMgKi8KICAgICAgICAgcmV0ID0gaW5mbGF0ZShzdHJtLCBaX05PX0ZMVVNIKTsKICAgICAgICAgaWYgKHJldCA9PSBaX1NUUkVBTV9FUlJPUiB8fCByZXQgPT0gWl9ORUVEX0RJQ1QpIHsKICAgICAgICAgICAgIGd6X2Vycm9yKHN0YXRlLCBaX1NUUkVBTV9FUlJPUiwKLSAgICAgICAgICAgICAgICAgICAgICAiaW50ZXJuYWwgZXJyb3I6IGluZmxhdGUgc3RyZWFtIGNvcnJ1cHQiKTsKKyAgICAgICAgICAgICAgICAgICAgICJpbnRlcm5hbCBlcnJvcjogaW5mbGF0ZSBzdHJlYW0gY29ycnVwdCIpOwogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9CiAgICAgICAgIGlmIChyZXQgPT0gWl9NRU1fRVJST1IpIHsKQEAgLTI2Miw2NyArMjAwLDU1IEBACiAgICAgICAgIH0KICAgICAgICAgaWYgKHJldCA9PSBaX0RBVEFfRVJST1IpIHsgICAgICAgICAgICAgIC8qIGRlZmxhdGUgc3RyZWFtIGludmFsaWQgKi8KICAgICAgICAgICAgIGd6X2Vycm9yKHN0YXRlLCBaX0RBVEFfRVJST1IsCi0gICAgICAgICAgICAgICAgICAgICAgc3RybS0+bXNnID09IE5VTEwgPyAiY29tcHJlc3NlZCBkYXRhIGVycm9yIiA6IHN0cm0tPm1zZyk7CisgICAgICAgICAgICAgICAgICAgICBzdHJtLT5tc2cgPT0gTlVMTCA/ICJjb21wcmVzc2VkIGRhdGEgZXJyb3IiIDogc3RybS0+bXNnKTsKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQogICAgIH0gd2hpbGUgKHN0cm0tPmF2YWlsX291dCAmJiByZXQgIT0gWl9TVFJFQU1fRU5EKTsKIAotICAgIC8qIHVwZGF0ZSBhdmFpbGFibGUgb3V0cHV0IGFuZCBjcmMgY2hlY2sgdmFsdWUgKi8KLSAgICBzdGF0ZS0+aGF2ZSA9IGhhZCAtIHN0cm0tPmF2YWlsX291dDsKLSAgICBzdGF0ZS0+bmV4dCA9IHN0cm0tPm5leHRfb3V0IC0gc3RhdGUtPmhhdmU7Ci0gICAgc3RybS0+YWRsZXIgPSBjcmMzMihzdHJtLT5hZGxlciwgc3RhdGUtPm5leHQsIHN0YXRlLT5oYXZlKTsKKyAgICAvKiB1cGRhdGUgYXZhaWxhYmxlIG91dHB1dCAqLworICAgIHN0YXRlLT54LmhhdmUgPSBoYWQgLSBzdHJtLT5hdmFpbF9vdXQ7CisgICAgc3RhdGUtPngubmV4dCA9IHN0cm0tPm5leHRfb3V0IC0gc3RhdGUtPnguaGF2ZTsKIAotICAgIC8qIGNoZWNrIGd6aXAgdHJhaWxlciBpZiBhdCBlbmQgb2YgZGVmbGF0ZSBzdHJlYW0gKi8KLSAgICBpZiAocmV0ID09IFpfU1RSRUFNX0VORCkgewotICAgICAgICBpZiAoZ3pfbmV4dDQoc3RhdGUsICZjcmMpID09IC0xIHx8IGd6X25leHQ0KHN0YXRlLCAmbGVuKSA9PSAtMSkgewotICAgICAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfREFUQV9FUlJPUiwgInVuZXhwZWN0ZWQgZW5kIG9mIGZpbGUiKTsKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQotICAgICAgICBpZiAoY3JjICE9IHN0cm0tPmFkbGVyKSB7Ci0gICAgICAgICAgICBnel9lcnJvcihzdGF0ZSwgWl9EQVRBX0VSUk9SLCAiaW5jb3JyZWN0IGRhdGEgY2hlY2siKTsKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQotICAgICAgICBpZiAobGVuICE9IChzdHJtLT50b3RhbF9vdXQgJiAweGZmZmZmZmZmTCkpIHsKLSAgICAgICAgICAgIGd6X2Vycm9yKHN0YXRlLCBaX0RBVEFfRVJST1IsICJpbmNvcnJlY3QgbGVuZ3RoIGNoZWNrIik7Ci0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KLSAgICAgICAgc3RhdGUtPmhvdyA9IExPT0s7ICAgICAgLyogcmVhZHkgZm9yIG5leHQgc3RyZWFtLCBvbmNlIGhhdmUgaXMgMCAobGVhdmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUtPmRpcmVjdCB1bmNoYW5nZWQgdG8gcmVtZW1iZXIgaG93KSAqLwotICAgIH0KKyAgICAvKiBpZiB0aGUgZ3ppcCBzdHJlYW0gY29tcGxldGVkIHN1Y2Nlc3NmdWxseSwgbG9vayBmb3IgYW5vdGhlciAqLworICAgIGlmIChyZXQgPT0gWl9TVFJFQU1fRU5EKQorICAgICAgICBzdGF0ZS0+aG93ID0gTE9PSzsKIAogICAgIC8qIGdvb2QgZGVjb21wcmVzc2lvbiAqLwogICAgIHJldHVybiAwOwogfQogCi0vKiBNYWtlIGRhdGEgYW5kIHB1dCBpbiB0aGUgb3V0cHV0IGJ1ZmZlci4gIEFzc3VtZXMgdGhhdCBzdGF0ZS0+aGF2ZSA9PSAwLgorLyogRmV0Y2ggZGF0YSBhbmQgcHV0IGl0IGluIHRoZSBvdXRwdXQgYnVmZmVyLiAgQXNzdW1lcyBzdGF0ZS0+eC5oYXZlIGlzIDAuCiAgICBEYXRhIGlzIGVpdGhlciBjb3BpZWQgZnJvbSB0aGUgaW5wdXQgZmlsZSBvciBkZWNvbXByZXNzZWQgZnJvbSB0aGUgaW5wdXQKICAgIGZpbGUgZGVwZW5kaW5nIG9uIHN0YXRlLT5ob3cuICBJZiBzdGF0ZS0+aG93IGlzIExPT0ssIHRoZW4gYSBnemlwIGhlYWRlciBpcwotICAgbG9va2VkIGZvciAoYW5kIHNraXBwZWQgaWYgZm91bmQpIHRvIGRldGVybWluZSB3aXRoZXIgdG8gY29weSBvciBkZWNvbXByZXNzLgotICAgUmV0dXJucyAtMSBvbiBlcnJvciwgb3RoZXJ3aXNlIDAuICBnel9tYWtlKCkgd2lsbCBsZWF2ZSBzdGF0ZS0+aGF2ZSBhcyBDT1BZCi0gICBvciBHWklQIHVubGVzcyB0aGUgZW5kIG9mIHRoZSBpbnB1dCBmaWxlIGhhcyBiZWVuIHJlYWNoZWQgYW5kIGFsbCBkYXRhIGhhcwotICAgYmVlbiBwcm9jZXNzZWQuICAqLwotbG9jYWwgaW50IGd6X21ha2Uoc3RhdGUpCisgICBsb29rZWQgZm9yIHRvIGRldGVybWluZSB3aGV0aGVyIHRvIGNvcHkgb3IgZGVjb21wcmVzcy4gIFJldHVybnMgLTEgb24gZXJyb3IsCisgICBvdGhlcndpc2UgMC4gIGd6X2ZldGNoKCkgd2lsbCBsZWF2ZSBzdGF0ZS0+aG93IGFzIENPUFkgb3IgR1pJUCB1bmxlc3MgdGhlCisgICBlbmQgb2YgdGhlIGlucHV0IGZpbGUgaGFzIGJlZW4gcmVhY2hlZCBhbmQgYWxsIGRhdGEgaGFzIGJlZW4gcHJvY2Vzc2VkLiAgKi8KK2xvY2FsIGludCBnel9mZXRjaChzdGF0ZSkKICAgICBnel9zdGF0ZXAgc3RhdGU7CiB7CiAgICAgel9zdHJlYW1wIHN0cm0gPSAmKHN0YXRlLT5zdHJtKTsKIAotICAgIGlmIChzdGF0ZS0+aG93ID09IExPT0spIHsgICAgICAgICAgIC8qIGxvb2sgZm9yIGd6aXAgaGVhZGVyICovCi0gICAgICAgIGlmIChnel9oZWFkKHN0YXRlKSA9PSAtMSkKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgaWYgKHN0YXRlLT5oYXZlKSAgICAgICAgICAgICAgICAvKiBnb3Qgc29tZSBkYXRhIGZyb20gZ3pfaGVhZCgpICovCisgICAgZG8geworICAgICAgICBzd2l0Y2goc3RhdGUtPmhvdykgeworICAgICAgICBjYXNlIExPT0s6ICAgICAgLyogLT4gTE9PSywgQ09QWSAob25seSBpZiBuZXZlciBHWklQKSwgb3IgR1pJUCAqLworICAgICAgICAgICAgaWYgKGd6X2xvb2soc3RhdGUpID09IC0xKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIGlmIChzdGF0ZS0+aG93ID09IExPT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDT1BZOiAgICAgIC8qIC0+IENPUFkgKi8KKyAgICAgICAgICAgIGlmIChnel9sb2FkKHN0YXRlLCBzdGF0ZS0+b3V0LCBzdGF0ZS0+c2l6ZSA8PCAxLCAmKHN0YXRlLT54LmhhdmUpKQorICAgICAgICAgICAgICAgICAgICA9PSAtMSkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICBzdGF0ZS0+eC5uZXh0ID0gc3RhdGUtPm91dDsKICAgICAgICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBpZiAoc3RhdGUtPmhvdyA9PSBDT1BZKSB7ICAgICAgICAgICAvKiBzdHJhaWdodCBjb3B5ICovCi0gICAgICAgIGlmIChnel9sb2FkKHN0YXRlLCBzdGF0ZS0+b3V0LCBzdGF0ZS0+c2l6ZSA8PCAxLCAmKHN0YXRlLT5oYXZlKSkgPT0gLTEpCi0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIHN0YXRlLT5uZXh0ID0gc3RhdGUtPm91dDsKLSAgICB9Ci0gICAgZWxzZSBpZiAoc3RhdGUtPmhvdyA9PSBHWklQKSB7ICAgICAgLyogZGVjb21wcmVzcyAqLwotICAgICAgICBzdHJtLT5hdmFpbF9vdXQgPSBzdGF0ZS0+c2l6ZSA8PCAxOwotICAgICAgICBzdHJtLT5uZXh0X291dCA9IHN0YXRlLT5vdXQ7Ci0gICAgICAgIGlmIChnel9kZWNvbXAoc3RhdGUpID09IC0xKQotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KKyAgICAgICAgY2FzZSBHWklQOiAgICAgIC8qIC0+IEdaSVAgb3IgTE9PSyAoaWYgZW5kIG9mIGd6aXAgc3RyZWFtKSAqLworICAgICAgICAgICAgc3RybS0+YXZhaWxfb3V0ID0gc3RhdGUtPnNpemUgPDwgMTsKKyAgICAgICAgICAgIHN0cm0tPm5leHRfb3V0ID0gc3RhdGUtPm91dDsKKyAgICAgICAgICAgIGlmIChnel9kZWNvbXAoc3RhdGUpID09IC0xKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgIH0gd2hpbGUgKHN0YXRlLT54LmhhdmUgPT0gMCAmJiAoIXN0YXRlLT5lb2YgfHwgc3RybS0+YXZhaWxfaW4pKTsKICAgICByZXR1cm4gMDsKIH0KIApAQCAtMzM2LDEyICsyNjIsMTIgQEAKICAgICAvKiBza2lwIG92ZXIgbGVuIGJ5dGVzIG9yIHJlYWNoIGVuZC1vZi1maWxlLCB3aGljaGV2ZXIgY29tZXMgZmlyc3QgKi8KICAgICB3aGlsZSAobGVuKQogICAgICAgICAvKiBza2lwIG92ZXIgd2hhdGV2ZXIgaXMgaW4gb3V0cHV0IGJ1ZmZlciAqLwotICAgICAgICBpZiAoc3RhdGUtPmhhdmUpIHsKLSAgICAgICAgICAgIG4gPSBHVF9PRkYoc3RhdGUtPmhhdmUpIHx8ICh6X29mZjY0X3Qpc3RhdGUtPmhhdmUgPiBsZW4gPwotICAgICAgICAgICAgICAgICh1bnNpZ25lZClsZW4gOiBzdGF0ZS0+aGF2ZTsKLSAgICAgICAgICAgIHN0YXRlLT5oYXZlIC09IG47Ci0gICAgICAgICAgICBzdGF0ZS0+bmV4dCArPSBuOwotICAgICAgICAgICAgc3RhdGUtPnBvcyArPSBuOworICAgICAgICBpZiAoc3RhdGUtPnguaGF2ZSkgeworICAgICAgICAgICAgbiA9IEdUX09GRihzdGF0ZS0+eC5oYXZlKSB8fCAoel9vZmY2NF90KXN0YXRlLT54LmhhdmUgPiBsZW4gPworICAgICAgICAgICAgICAgICh1bnNpZ25lZClsZW4gOiBzdGF0ZS0+eC5oYXZlOworICAgICAgICAgICAgc3RhdGUtPnguaGF2ZSAtPSBuOworICAgICAgICAgICAgc3RhdGUtPngubmV4dCArPSBuOworICAgICAgICAgICAgc3RhdGUtPngucG9zICs9IG47CiAgICAgICAgICAgICBsZW4gLT0gbjsKICAgICAgICAgfQogCkBAIC0zNTIsNyArMjc4LDcgQEAKICAgICAgICAgLyogbmVlZCBtb3JlIGRhdGEgdG8gc2tpcCAtLSBsb2FkIHVwIG91dHB1dCBidWZmZXIgKi8KICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAvKiBnZXQgbW9yZSBvdXRwdXQsIGxvb2tpbmcgZm9yIGhlYWRlciBpZiByZXF1aXJlZCAqLwotICAgICAgICAgICAgaWYgKGd6X21ha2Uoc3RhdGUpID09IC0xKQorICAgICAgICAgICAgaWYgKGd6X2ZldGNoKHN0YXRlKSA9PSAtMSkKICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KICAgICByZXR1cm4gMDsKQEAgLTM3NCwxNCArMzAwLDE1IEBACiAgICAgc3RhdGUgPSAoZ3pfc3RhdGVwKWZpbGU7CiAgICAgc3RybSA9ICYoc3RhdGUtPnN0cm0pOwogCi0gICAgLyogY2hlY2sgdGhhdCB3ZSdyZSByZWFkaW5nIGFuZCB0aGF0IHRoZXJlJ3Mgbm8gZXJyb3IgKi8KLSAgICBpZiAoc3RhdGUtPm1vZGUgIT0gR1pfUkVBRCB8fCBzdGF0ZS0+ZXJyICE9IFpfT0spCisgICAgLyogY2hlY2sgdGhhdCB3ZSdyZSByZWFkaW5nIGFuZCB0aGF0IHRoZXJlJ3Mgbm8gKHNlcmlvdXMpIGVycm9yICovCisgICAgaWYgKHN0YXRlLT5tb2RlICE9IEdaX1JFQUQgfHwKKyAgICAgICAgICAgIChzdGF0ZS0+ZXJyICE9IFpfT0sgJiYgc3RhdGUtPmVyciAhPSBaX0JVRl9FUlJPUikpCiAgICAgICAgIHJldHVybiAtMTsKIAogICAgIC8qIHNpbmNlIGFuIGludCBpcyByZXR1cm5lZCwgbWFrZSBzdXJlIGxlbiBmaXRzIGluIG9uZSwgb3RoZXJ3aXNlIHJldHVybgogICAgICAgIHdpdGggYW4gZXJyb3IgKHRoaXMgYXZvaWRzIHRoZSBmbGF3IGluIHRoZSBpbnRlcmZhY2UpICovCiAgICAgaWYgKChpbnQpbGVuIDwgMCkgewotICAgICAgICBnel9lcnJvcihzdGF0ZSwgWl9CVUZfRVJST1IsICJyZXF1ZXN0ZWQgbGVuZ3RoIGRvZXMgbm90IGZpdCBpbiBpbnQiKTsKKyAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfREFUQV9FUlJPUiwgInJlcXVlc3RlZCBsZW5ndGggZG9lcyBub3QgZml0IGluIGludCIpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCkBAIC00MDAsNDkgKzMyNyw1MSBAQAogICAgIGdvdCA9IDA7CiAgICAgZG8gewogICAgICAgICAvKiBmaXJzdCBqdXN0IHRyeSBjb3B5aW5nIGRhdGEgZnJvbSB0aGUgb3V0cHV0IGJ1ZmZlciAqLwotICAgICAgICBpZiAoc3RhdGUtPmhhdmUpIHsKLSAgICAgICAgICAgIG4gPSBzdGF0ZS0+aGF2ZSA+IGxlbiA/IGxlbiA6IHN0YXRlLT5oYXZlOwotICAgICAgICAgICAgbWVtY3B5KGJ1Ziwgc3RhdGUtPm5leHQsIG4pOwotICAgICAgICAgICAgc3RhdGUtPm5leHQgKz0gbjsKLSAgICAgICAgICAgIHN0YXRlLT5oYXZlIC09IG47CisgICAgICAgIGlmIChzdGF0ZS0+eC5oYXZlKSB7CisgICAgICAgICAgICBuID0gc3RhdGUtPnguaGF2ZSA+IGxlbiA/IGxlbiA6IHN0YXRlLT54LmhhdmU7CisgICAgICAgICAgICBtZW1jcHkoYnVmLCBzdGF0ZS0+eC5uZXh0LCBuKTsKKyAgICAgICAgICAgIHN0YXRlLT54Lm5leHQgKz0gbjsKKyAgICAgICAgICAgIHN0YXRlLT54LmhhdmUgLT0gbjsKICAgICAgICAgfQogCiAgICAgICAgIC8qIG91dHB1dCBidWZmZXIgZW1wdHkgLS0gcmV0dXJuIGlmIHdlJ3JlIGF0IHRoZSBlbmQgb2YgdGhlIGlucHV0ICovCi0gICAgICAgIGVsc2UgaWYgKHN0YXRlLT5lb2YgJiYgc3RybS0+YXZhaWxfaW4gPT0gMCkKKyAgICAgICAgZWxzZSBpZiAoc3RhdGUtPmVvZiAmJiBzdHJtLT5hdmFpbF9pbiA9PSAwKSB7CisgICAgICAgICAgICBzdGF0ZS0+cGFzdCA9IDE7ICAgICAgICAvKiB0cmllZCB0byByZWFkIHBhc3QgZW5kICovCiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogCiAgICAgICAgIC8qIG5lZWQgb3V0cHV0IGRhdGEgLS0gZm9yIHNtYWxsIGxlbiBvciBuZXcgc3RyZWFtIGxvYWQgdXAgb3VyIG91dHB1dAogICAgICAgICAgICBidWZmZXIgKi8KICAgICAgICAgZWxzZSBpZiAoc3RhdGUtPmhvdyA9PSBMT09LIHx8IGxlbiA8IChzdGF0ZS0+c2l6ZSA8PCAxKSkgewogICAgICAgICAgICAgLyogZ2V0IG1vcmUgb3V0cHV0LCBsb29raW5nIGZvciBoZWFkZXIgaWYgcmVxdWlyZWQgKi8KLSAgICAgICAgICAgIGlmIChnel9tYWtlKHN0YXRlKSA9PSAtMSkKKyAgICAgICAgICAgIGlmIChnel9mZXRjaChzdGF0ZSkgPT0gLTEpCiAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgY29udGludWU7ICAgICAgIC8qIG5vIHByb2dyZXNzIHlldCAtLSBnbyBiYWNrIHRvIG1lbWNweSgpIGFib3ZlICovCisgICAgICAgICAgICBjb250aW51ZTsgICAgICAgLyogbm8gcHJvZ3Jlc3MgeWV0IC0tIGdvIGJhY2sgdG8gY29weSBhYm92ZSAqLwogICAgICAgICAgICAgLyogdGhlIGNvcHkgYWJvdmUgYXNzdXJlcyB0aGF0IHdlIHdpbGwgbGVhdmUgd2l0aCBzcGFjZSBpbiB0aGUKICAgICAgICAgICAgICAgIG91dHB1dCBidWZmZXIsIGFsbG93aW5nIGF0IGxlYXN0IG9uZSBnenVuZ2V0YygpIHRvIHN1Y2NlZWQgKi8KICAgICAgICAgfQogCiAgICAgICAgIC8qIGxhcmdlIGxlbiAtLSByZWFkIGRpcmVjdGx5IGludG8gdXNlciBidWZmZXIgKi8KICAgICAgICAgZWxzZSBpZiAoc3RhdGUtPmhvdyA9PSBDT1BZKSB7ICAgICAgLyogcmVhZCBkaXJlY3RseSAqLwotICAgICAgICAgICAgaWYgKGd6X2xvYWQoc3RhdGUsIGJ1ZiwgbGVuLCAmbikgPT0gLTEpCisgICAgICAgICAgICBpZiAoZ3pfbG9hZChzdGF0ZSwgKHVuc2lnbmVkIGNoYXIgKilidWYsIGxlbiwgJm4pID09IC0xKQogICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQogCiAgICAgICAgIC8qIGxhcmdlIGxlbiAtLSBkZWNvbXByZXNzIGRpcmVjdGx5IGludG8gdXNlciBidWZmZXIgKi8KICAgICAgICAgZWxzZSB7ICAvKiBzdGF0ZS0+aG93ID09IEdaSVAgKi8KICAgICAgICAgICAgIHN0cm0tPmF2YWlsX291dCA9IGxlbjsKLSAgICAgICAgICAgIHN0cm0tPm5leHRfb3V0ID0gYnVmOworICAgICAgICAgICAgc3RybS0+bmV4dF9vdXQgPSAodW5zaWduZWQgY2hhciAqKWJ1ZjsKICAgICAgICAgICAgIGlmIChnel9kZWNvbXAoc3RhdGUpID09IC0xKQogICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIG4gPSBzdGF0ZS0+aGF2ZTsKLSAgICAgICAgICAgIHN0YXRlLT5oYXZlID0gMDsKKyAgICAgICAgICAgIG4gPSBzdGF0ZS0+eC5oYXZlOworICAgICAgICAgICAgc3RhdGUtPnguaGF2ZSA9IDA7CiAgICAgICAgIH0KIAogICAgICAgICAvKiB1cGRhdGUgcHJvZ3Jlc3MgKi8KICAgICAgICAgbGVuIC09IG47CiAgICAgICAgIGJ1ZiA9IChjaGFyICopYnVmICsgbjsKICAgICAgICAgZ290ICs9IG47Ci0gICAgICAgIHN0YXRlLT5wb3MgKz0gbjsKKyAgICAgICAgc3RhdGUtPngucG9zICs9IG47CiAgICAgfSB3aGlsZSAobGVuKTsKIAogICAgIC8qIHJldHVybiBudW1iZXIgb2YgYnl0ZXMgcmVhZCBpbnRvIHVzZXIgYnVmZmVyICh3aWxsIGZpdCBpbiBpbnQpICovCkBAIC00NTAsNiArMzc5LDExIEBACiB9CiAKIC8qIC0tIHNlZSB6bGliLmggLS0gKi8KKyNpZmRlZiBaX1BSRUZJWF9TRVQKKyMgIHVuZGVmIHpfZ3pnZXRjCisjZWxzZQorIyAgdW5kZWYgZ3pnZXRjCisjZW5kaWYKIGludCBaRVhQT1JUIGd6Z2V0YyhmaWxlKQogICAgIGd6RmlsZSBmaWxlOwogewpAQCAtNDYyLDE1ICszOTYsMTYgQEAKICAgICAgICAgcmV0dXJuIC0xOwogICAgIHN0YXRlID0gKGd6X3N0YXRlcClmaWxlOwogCi0gICAgLyogY2hlY2sgdGhhdCB3ZSdyZSByZWFkaW5nIGFuZCB0aGF0IHRoZXJlJ3Mgbm8gZXJyb3IgKi8KLSAgICBpZiAoc3RhdGUtPm1vZGUgIT0gR1pfUkVBRCB8fCBzdGF0ZS0+ZXJyICE9IFpfT0spCisgICAgLyogY2hlY2sgdGhhdCB3ZSdyZSByZWFkaW5nIGFuZCB0aGF0IHRoZXJlJ3Mgbm8gKHNlcmlvdXMpIGVycm9yICovCisgICAgaWYgKHN0YXRlLT5tb2RlICE9IEdaX1JFQUQgfHwKKyAgICAgICAgKHN0YXRlLT5lcnIgIT0gWl9PSyAmJiBzdGF0ZS0+ZXJyICE9IFpfQlVGX0VSUk9SKSkKICAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgLyogdHJ5IG91dHB1dCBidWZmZXIgKG5vIG5lZWQgdG8gY2hlY2sgZm9yIHNraXAgcmVxdWVzdCkgKi8KLSAgICBpZiAoc3RhdGUtPmhhdmUpIHsKLSAgICAgICAgc3RhdGUtPmhhdmUtLTsKLSAgICAgICAgc3RhdGUtPnBvcysrOwotICAgICAgICByZXR1cm4gKihzdGF0ZS0+bmV4dCkrKzsKKyAgICBpZiAoc3RhdGUtPnguaGF2ZSkgeworICAgICAgICBzdGF0ZS0+eC5oYXZlLS07CisgICAgICAgIHN0YXRlLT54LnBvcysrOworICAgICAgICByZXR1cm4gKihzdGF0ZS0+eC5uZXh0KSsrOwogICAgIH0KIAogICAgIC8qIG5vdGhpbmcgdGhlcmUgLS0gdHJ5IGd6cmVhZCgpICovCkBAIC00NzgsNiArNDEzLDEyIEBACiAgICAgcmV0dXJuIHJldCA8IDEgPyAtMSA6IGJ1ZlswXTsKIH0KIAoraW50IFpFWFBPUlQgZ3pnZXRjXyhmaWxlKQorZ3pGaWxlIGZpbGU7Cit7CisgICAgcmV0dXJuIGd6Z2V0YyhmaWxlKTsKK30KKwogLyogLS0gc2VlIHpsaWIuaCAtLSAqLwogaW50IFpFWFBPUlQgZ3p1bmdldGMoYywgZmlsZSkKICAgICBpbnQgYzsKQEAgLTQ5MCw4ICs0MzEsOSBAQAogICAgICAgICByZXR1cm4gLTE7CiAgICAgc3RhdGUgPSAoZ3pfc3RhdGVwKWZpbGU7CiAKLSAgICAvKiBjaGVjayB0aGF0IHdlJ3JlIHJlYWRpbmcgYW5kIHRoYXQgdGhlcmUncyBubyBlcnJvciAqLwotICAgIGlmIChzdGF0ZS0+bW9kZSAhPSBHWl9SRUFEIHx8IHN0YXRlLT5lcnIgIT0gWl9PSykKKyAgICAvKiBjaGVjayB0aGF0IHdlJ3JlIHJlYWRpbmcgYW5kIHRoYXQgdGhlcmUncyBubyAoc2VyaW91cykgZXJyb3IgKi8KKyAgICBpZiAoc3RhdGUtPm1vZGUgIT0gR1pfUkVBRCB8fAorICAgICAgICAoc3RhdGUtPmVyciAhPSBaX09LICYmIHN0YXRlLT5lcnIgIT0gWl9CVUZfRVJST1IpKQogICAgICAgICByZXR1cm4gLTE7CiAKICAgICAvKiBwcm9jZXNzIGEgc2tpcCByZXF1ZXN0ICovCkBAIC01MDYsMzIgKzQ0OCwzNCBAQAogICAgICAgICByZXR1cm4gLTE7CiAKICAgICAvKiBpZiBvdXRwdXQgYnVmZmVyIGVtcHR5LCBwdXQgYnl0ZSBhdCBlbmQgKGFsbG93cyBtb3JlIHB1c2hpbmcpICovCi0gICAgaWYgKHN0YXRlLT5oYXZlID09IDApIHsKLSAgICAgICAgc3RhdGUtPmhhdmUgPSAxOwotICAgICAgICBzdGF0ZS0+bmV4dCA9IHN0YXRlLT5vdXQgKyAoc3RhdGUtPnNpemUgPDwgMSkgLSAxOwotICAgICAgICBzdGF0ZS0+bmV4dFswXSA9IGM7Ci0gICAgICAgIHN0YXRlLT5wb3MtLTsKKyAgICBpZiAoc3RhdGUtPnguaGF2ZSA9PSAwKSB7CisgICAgICAgIHN0YXRlLT54LmhhdmUgPSAxOworICAgICAgICBzdGF0ZS0+eC5uZXh0ID0gc3RhdGUtPm91dCArIChzdGF0ZS0+c2l6ZSA8PCAxKSAtIDE7CisgICAgICAgIHN0YXRlLT54Lm5leHRbMF0gPSBjOworICAgICAgICBzdGF0ZS0+eC5wb3MtLTsKKyAgICAgICAgc3RhdGUtPnBhc3QgPSAwOwogICAgICAgICByZXR1cm4gYzsKICAgICB9CiAKICAgICAvKiBpZiBubyByb29tLCBnaXZlIHVwIChtdXN0IGhhdmUgYWxyZWFkeSBkb25lIGEgZ3p1bmdldGMoKSkgKi8KLSAgICBpZiAoc3RhdGUtPmhhdmUgPT0gKHN0YXRlLT5zaXplIDw8IDEpKSB7Ci0gICAgICAgIGd6X2Vycm9yKHN0YXRlLCBaX0JVRl9FUlJPUiwgIm91dCBvZiByb29tIHRvIHB1c2ggY2hhcmFjdGVycyIpOworICAgIGlmIChzdGF0ZS0+eC5oYXZlID09IChzdGF0ZS0+c2l6ZSA8PCAxKSkgeworICAgICAgICBnel9lcnJvcihzdGF0ZSwgWl9EQVRBX0VSUk9SLCAib3V0IG9mIHJvb20gdG8gcHVzaCBjaGFyYWN0ZXJzIik7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKICAgICAvKiBzbGlkZSBvdXRwdXQgZGF0YSBpZiBuZWVkZWQgYW5kIGluc2VydCBieXRlIGJlZm9yZSBleGlzdGluZyBkYXRhICovCi0gICAgaWYgKHN0YXRlLT5uZXh0ID09IHN0YXRlLT5vdXQpIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciAqc3JjID0gc3RhdGUtPm91dCArIHN0YXRlLT5oYXZlOworICAgIGlmIChzdGF0ZS0+eC5uZXh0ID09IHN0YXRlLT5vdXQpIHsKKyAgICAgICAgdW5zaWduZWQgY2hhciAqc3JjID0gc3RhdGUtPm91dCArIHN0YXRlLT54LmhhdmU7CiAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBzdGF0ZS0+b3V0ICsgKHN0YXRlLT5zaXplIDw8IDEpOwogICAgICAgICB3aGlsZSAoc3JjID4gc3RhdGUtPm91dCkKICAgICAgICAgICAgICotLWRlc3QgPSAqLS1zcmM7Ci0gICAgICAgIHN0YXRlLT5uZXh0ID0gZGVzdDsKKyAgICAgICAgc3RhdGUtPngubmV4dCA9IGRlc3Q7CiAgICAgfQotICAgIHN0YXRlLT5oYXZlKys7Ci0gICAgc3RhdGUtPm5leHQtLTsKLSAgICBzdGF0ZS0+bmV4dFswXSA9IGM7Ci0gICAgc3RhdGUtPnBvcy0tOworICAgIHN0YXRlLT54LmhhdmUrKzsKKyAgICBzdGF0ZS0+eC5uZXh0LS07CisgICAgc3RhdGUtPngubmV4dFswXSA9IGM7CisgICAgc3RhdGUtPngucG9zLS07CisgICAgc3RhdGUtPnBhc3QgPSAwOwogICAgIHJldHVybiBjOwogfQogCkBAIC01NTEsOCArNDk1LDkgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgc3RhdGUgPSAoZ3pfc3RhdGVwKWZpbGU7CiAKLSAgICAvKiBjaGVjayB0aGF0IHdlJ3JlIHJlYWRpbmcgYW5kIHRoYXQgdGhlcmUncyBubyBlcnJvciAqLwotICAgIGlmIChzdGF0ZS0+bW9kZSAhPSBHWl9SRUFEIHx8IHN0YXRlLT5lcnIgIT0gWl9PSykKKyAgICAvKiBjaGVjayB0aGF0IHdlJ3JlIHJlYWRpbmcgYW5kIHRoYXQgdGhlcmUncyBubyAoc2VyaW91cykgZXJyb3IgKi8KKyAgICBpZiAoc3RhdGUtPm1vZGUgIT0gR1pfUkVBRCB8fAorICAgICAgICAoc3RhdGUtPmVyciAhPSBaX09LICYmIHN0YXRlLT5lcnIgIT0gWl9CVUZfRVJST1IpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIC8qIHByb2Nlc3MgYSBza2lwIHJlcXVlc3QgKi8KQEAgLTU2OSwzMiArNTE0LDMxIEBACiAgICAgbGVmdCA9ICh1bnNpZ25lZClsZW4gLSAxOwogICAgIGlmIChsZWZ0KSBkbyB7CiAgICAgICAgIC8qIGFzc3VyZSB0aGF0IHNvbWV0aGluZyBpcyBpbiB0aGUgb3V0cHV0IGJ1ZmZlciAqLwotICAgICAgICBpZiAoc3RhdGUtPmhhdmUgPT0gMCkgewotICAgICAgICAgICAgaWYgKGd6X21ha2Uoc3RhdGUpID09IC0xKQotICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOyAgICAgICAgICAgIC8qIGVycm9yICovCi0gICAgICAgICAgICBpZiAoc3RhdGUtPmhhdmUgPT0gMCkgeyAgICAgLyogZW5kIG9mIGZpbGUgKi8KLSAgICAgICAgICAgICAgICBpZiAoYnVmID09IHN0cikgICAgICAgICAvKiBnb3QgYnVwa3VzICovCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgIC8qIGdvdCBzb21ldGhpbmcgLS0gcmV0dXJuIGl0ICovCi0gICAgICAgICAgICB9CisgICAgICAgIGlmIChzdGF0ZS0+eC5oYXZlID09IDAgJiYgZ3pfZmV0Y2goc3RhdGUpID09IC0xKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7ICAgICAgICAgICAgICAgIC8qIGVycm9yICovCisgICAgICAgIGlmIChzdGF0ZS0+eC5oYXZlID09IDApIHsgICAgICAgLyogZW5kIG9mIGZpbGUgKi8KKyAgICAgICAgICAgIHN0YXRlLT5wYXN0ID0gMTsgICAgICAgICAgICAvKiByZWFkIHBhc3QgZW5kICovCisgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgLyogcmV0dXJuIHdoYXQgd2UgaGF2ZSAqLwogICAgICAgICB9CiAKICAgICAgICAgLyogbG9vayBmb3IgZW5kLW9mLWxpbmUgaW4gY3VycmVudCBvdXRwdXQgYnVmZmVyICovCi0gICAgICAgIG4gPSBzdGF0ZS0+aGF2ZSA+IGxlZnQgPyBsZWZ0IDogc3RhdGUtPmhhdmU7Ci0gICAgICAgIGVvbCA9IG1lbWNocihzdGF0ZS0+bmV4dCwgJ1xuJywgbik7CisgICAgICAgIG4gPSBzdGF0ZS0+eC5oYXZlID4gbGVmdCA/IGxlZnQgOiBzdGF0ZS0+eC5oYXZlOworICAgICAgICBlb2wgPSAodW5zaWduZWQgY2hhciAqKW1lbWNocihzdGF0ZS0+eC5uZXh0LCAnXG4nLCBuKTsKICAgICAgICAgaWYgKGVvbCAhPSBOVUxMKQotICAgICAgICAgICAgbiA9ICh1bnNpZ25lZCkoZW9sIC0gc3RhdGUtPm5leHQpICsgMTsKKyAgICAgICAgICAgIG4gPSAodW5zaWduZWQpKGVvbCAtIHN0YXRlLT54Lm5leHQpICsgMTsKIAogICAgICAgICAvKiBjb3B5IHRocm91Z2ggZW5kLW9mLWxpbmUsIG9yIHJlbWFpbmRlciBpZiBub3QgZm91bmQgKi8KLSAgICAgICAgbWVtY3B5KGJ1Ziwgc3RhdGUtPm5leHQsIG4pOwotICAgICAgICBzdGF0ZS0+aGF2ZSAtPSBuOwotICAgICAgICBzdGF0ZS0+bmV4dCArPSBuOwotICAgICAgICBzdGF0ZS0+cG9zICs9IG47CisgICAgICAgIG1lbWNweShidWYsIHN0YXRlLT54Lm5leHQsIG4pOworICAgICAgICBzdGF0ZS0+eC5oYXZlIC09IG47CisgICAgICAgIHN0YXRlLT54Lm5leHQgKz0gbjsKKyAgICAgICAgc3RhdGUtPngucG9zICs9IG47CiAgICAgICAgIGxlZnQgLT0gbjsKICAgICAgICAgYnVmICs9IG47CiAgICAgfSB3aGlsZSAobGVmdCAmJiBlb2wgPT0gTlVMTCk7CiAKLSAgICAvKiBmb3VuZCBlbmQtb2YtbGluZSBvciBvdXQgb2Ygc3BhY2UgLS0gdGVybWluYXRlIHN0cmluZyBhbmQgcmV0dXJuIGl0ICovCisgICAgLyogcmV0dXJuIHRlcm1pbmF0ZWQgc3RyaW5nLCBvciBpZiBub3RoaW5nLCBlbmQgb2YgZmlsZSAqLworICAgIGlmIChidWYgPT0gc3RyKQorICAgICAgICByZXR1cm4gTlVMTDsKICAgICBidWZbMF0gPSAwOwogICAgIHJldHVybiBzdHI7CiB9CkBAIC02MTAsMTYgKzU1NCwxMiBAQAogICAgICAgICByZXR1cm4gMDsKICAgICBzdGF0ZSA9IChnel9zdGF0ZXApZmlsZTsKIAotICAgIC8qIGNoZWNrIHRoYXQgd2UncmUgcmVhZGluZyAqLwotICAgIGlmIChzdGF0ZS0+bW9kZSAhPSBHWl9SRUFEKQotICAgICAgICByZXR1cm4gMDsKLQogICAgIC8qIGlmIHRoZSBzdGF0ZSBpcyBub3Qga25vd24sIGJ1dCB3ZSBjYW4gZmluZCBvdXQsIHRoZW4gZG8gc28gKHRoaXMgaXMKICAgICAgICBtYWlubHkgZm9yIHJpZ2h0IGFmdGVyIGEgZ3pvcGVuKCkgb3IgZ3pkb3BlbigpKSAqLwotICAgIGlmIChzdGF0ZS0+aG93ID09IExPT0sgJiYgc3RhdGUtPmhhdmUgPT0gMCkKLSAgICAgICAgKHZvaWQpZ3pfaGVhZChzdGF0ZSk7CisgICAgaWYgKHN0YXRlLT5tb2RlID09IEdaX1JFQUQgJiYgc3RhdGUtPmhvdyA9PSBMT09LICYmIHN0YXRlLT54LmhhdmUgPT0gMCkKKyAgICAgICAgKHZvaWQpZ3pfbG9vayhzdGF0ZSk7CiAKLSAgICAvKiByZXR1cm4gMSBpZiByZWFkaW5nIGRpcmVjdCwgMCBpZiBkZWNvbXByZXNzaW5nIGEgZ3ppcCBzdHJlYW0gKi8KKyAgICAvKiByZXR1cm4gMSBpZiB0cmFuc3BhcmVudCwgMCBpZiBwcm9jZXNzaW5nIGEgZ3ppcCBzdHJlYW0gKi8KICAgICByZXR1cm4gc3RhdGUtPmRpcmVjdDsKIH0KIApAQCAtNjI3LDcgKzU2Nyw3IEBACiBpbnQgWkVYUE9SVCBnemNsb3NlX3IoZmlsZSkKICAgICBnekZpbGUgZmlsZTsKIHsKLSAgICBpbnQgcmV0OworICAgIGludCByZXQsIGVycjsKICAgICBnel9zdGF0ZXAgc3RhdGU7CiAKICAgICAvKiBnZXQgaW50ZXJuYWwgc3RydWN0dXJlICovCkBAIC02NDUsOSArNTg1LDEwIEBACiAgICAgICAgIGZyZWUoc3RhdGUtPm91dCk7CiAgICAgICAgIGZyZWUoc3RhdGUtPmluKTsKICAgICB9CisgICAgZXJyID0gc3RhdGUtPmVyciA9PSBaX0JVRl9FUlJPUiA/IFpfQlVGX0VSUk9SIDogWl9PSzsKICAgICBnel9lcnJvcihzdGF0ZSwgWl9PSywgTlVMTCk7CiAgICAgZnJlZShzdGF0ZS0+cGF0aCk7CiAgICAgcmV0ID0gY2xvc2Uoc3RhdGUtPmZkKTsKICAgICBmcmVlKHN0YXRlKTsKLSAgICByZXR1cm4gcmV0ID8gWl9FUlJOTyA6IFpfT0s7CisgICAgcmV0dXJuIHJldCA/IFpfRVJSTk8gOiBlcnI7CiB9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvZ3p3cml0ZS5jIGIvTW9kdWxlcy96bGliL2d6d3JpdGUuYwppbmRleCBlOGRlZmM2Li5hYTc2N2ZiIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvZ3p3cml0ZS5jCisrKyBiL01vZHVsZXMvemxpYi9nendyaXRlLmMKQEAgLTEsNSArMSw1IEBACiAvKiBnendyaXRlLmMgLS0gemxpYiBmdW5jdGlvbnMgZm9yIHdyaXRpbmcgZ3ppcCBmaWxlcwotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDEwIE1hcmsgQWRsZXIKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAxMCwgMjAxMSwgMjAxMiwgMjAxMyBNYXJrIEFkbGVyCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCiAgKi8KIApAQCAtMTgsNDQgKzE4LDU1IEBACiAgICAgaW50IHJldDsKICAgICB6X3N0cmVhbXAgc3RybSA9ICYoc3RhdGUtPnN0cm0pOwogCi0gICAgLyogYWxsb2NhdGUgaW5wdXQgYW5kIG91dHB1dCBidWZmZXJzICovCi0gICAgc3RhdGUtPmluID0gbWFsbG9jKHN0YXRlLT53YW50KTsKLSAgICBzdGF0ZS0+b3V0ID0gbWFsbG9jKHN0YXRlLT53YW50KTsKLSAgICBpZiAoc3RhdGUtPmluID09IE5VTEwgfHwgc3RhdGUtPm91dCA9PSBOVUxMKSB7Ci0gICAgICAgIGlmIChzdGF0ZS0+b3V0ICE9IE5VTEwpCi0gICAgICAgICAgICBmcmVlKHN0YXRlLT5vdXQpOwotICAgICAgICBpZiAoc3RhdGUtPmluICE9IE5VTEwpCi0gICAgICAgICAgICBmcmVlKHN0YXRlLT5pbik7CisgICAgLyogYWxsb2NhdGUgaW5wdXQgYnVmZmVyICovCisgICAgc3RhdGUtPmluID0gKHVuc2lnbmVkIGNoYXIgKiltYWxsb2Moc3RhdGUtPndhbnQpOworICAgIGlmIChzdGF0ZS0+aW4gPT0gTlVMTCkgewogICAgICAgICBnel9lcnJvcihzdGF0ZSwgWl9NRU1fRVJST1IsICJvdXQgb2YgbWVtb3J5Iik7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKLSAgICAvKiBhbGxvY2F0ZSBkZWZsYXRlIG1lbW9yeSwgc2V0IHVwIGZvciBnemlwIGNvbXByZXNzaW9uICovCi0gICAgc3RybS0+emFsbG9jID0gWl9OVUxMOwotICAgIHN0cm0tPnpmcmVlID0gWl9OVUxMOwotICAgIHN0cm0tPm9wYXF1ZSA9IFpfTlVMTDsKLSAgICByZXQgPSBkZWZsYXRlSW5pdDIoc3RybSwgc3RhdGUtPmxldmVsLCBaX0RFRkxBVEVELAotICAgICAgICAgICAgICAgICAgICAgICAxNSArIDE2LCA4LCBzdGF0ZS0+c3RyYXRlZ3kpOwotICAgIGlmIChyZXQgIT0gWl9PSykgewotICAgICAgICBmcmVlKHN0YXRlLT5pbik7Ci0gICAgICAgIGd6X2Vycm9yKHN0YXRlLCBaX01FTV9FUlJPUiwgIm91dCBvZiBtZW1vcnkiKTsKLSAgICAgICAgcmV0dXJuIC0xOworICAgIC8qIG9ubHkgbmVlZCBvdXRwdXQgYnVmZmVyIGFuZCBkZWZsYXRlIHN0YXRlIGlmIGNvbXByZXNzaW5nICovCisgICAgaWYgKCFzdGF0ZS0+ZGlyZWN0KSB7CisgICAgICAgIC8qIGFsbG9jYXRlIG91dHB1dCBidWZmZXIgKi8KKyAgICAgICAgc3RhdGUtPm91dCA9ICh1bnNpZ25lZCBjaGFyICopbWFsbG9jKHN0YXRlLT53YW50KTsKKyAgICAgICAgaWYgKHN0YXRlLT5vdXQgPT0gTlVMTCkgeworICAgICAgICAgICAgZnJlZShzdGF0ZS0+aW4pOworICAgICAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfTUVNX0VSUk9SLCAib3V0IG9mIG1lbW9yeSIpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisKKyAgICAgICAgLyogYWxsb2NhdGUgZGVmbGF0ZSBtZW1vcnksIHNldCB1cCBmb3IgZ3ppcCBjb21wcmVzc2lvbiAqLworICAgICAgICBzdHJtLT56YWxsb2MgPSBaX05VTEw7CisgICAgICAgIHN0cm0tPnpmcmVlID0gWl9OVUxMOworICAgICAgICBzdHJtLT5vcGFxdWUgPSBaX05VTEw7CisgICAgICAgIHJldCA9IGRlZmxhdGVJbml0MihzdHJtLCBzdGF0ZS0+bGV2ZWwsIFpfREVGTEFURUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBNQVhfV0JJVFMgKyAxNiwgREVGX01FTV9MRVZFTCwgc3RhdGUtPnN0cmF0ZWd5KTsKKyAgICAgICAgaWYgKHJldCAhPSBaX09LKSB7CisgICAgICAgICAgICBmcmVlKHN0YXRlLT5vdXQpOworICAgICAgICAgICAgZnJlZShzdGF0ZS0+aW4pOworICAgICAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfTUVNX0VSUk9SLCAib3V0IG9mIG1lbW9yeSIpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CiAgICAgfQogCiAgICAgLyogbWFyayBzdGF0ZSBhcyBpbml0aWFsaXplZCAqLwogICAgIHN0YXRlLT5zaXplID0gc3RhdGUtPndhbnQ7CiAKLSAgICAvKiBpbml0aWFsaXplIHdyaXRlIGJ1ZmZlciAqLwotICAgIHN0cm0tPmF2YWlsX291dCA9IHN0YXRlLT5zaXplOwotICAgIHN0cm0tPm5leHRfb3V0ID0gc3RhdGUtPm91dDsKLSAgICBzdGF0ZS0+bmV4dCA9IHN0cm0tPm5leHRfb3V0OworICAgIC8qIGluaXRpYWxpemUgd3JpdGUgYnVmZmVyIGlmIGNvbXByZXNzaW5nICovCisgICAgaWYgKCFzdGF0ZS0+ZGlyZWN0KSB7CisgICAgICAgIHN0cm0tPmF2YWlsX291dCA9IHN0YXRlLT5zaXplOworICAgICAgICBzdHJtLT5uZXh0X291dCA9IHN0YXRlLT5vdXQ7CisgICAgICAgIHN0YXRlLT54Lm5leHQgPSBzdHJtLT5uZXh0X291dDsKKyAgICB9CiAgICAgcmV0dXJuIDA7CiB9CiAKIC8qIENvbXByZXNzIHdoYXRldmVyIGlzIGF0IGF2YWlsX2luIGFuZCBuZXh0X2luIGFuZCB3cml0ZSB0byB0aGUgb3V0cHV0IGZpbGUuCiAgICBSZXR1cm4gLTEgaWYgdGhlcmUgaXMgYW4gZXJyb3Igd3JpdGluZyB0byB0aGUgb3V0cHV0IGZpbGUsIG90aGVyd2lzZSAwLgogICAgZmx1c2ggaXMgYXNzdW1lZCB0byBiZSBhIHZhbGlkIGRlZmxhdGUoKSBmbHVzaCB2YWx1ZS4gIElmIGZsdXNoIGlzIFpfRklOSVNILAotICAgdGhlbiB0aGUgZGVmbGF0ZSgpIHN0YXRlIGlzIHJlc2V0IHRvIHN0YXJ0IGEgbmV3IGd6aXAgc3RyZWFtLiAqLworICAgdGhlbiB0aGUgZGVmbGF0ZSgpIHN0YXRlIGlzIHJlc2V0IHRvIHN0YXJ0IGEgbmV3IGd6aXAgc3RyZWFtLiAgSWYgZ3otPmRpcmVjdAorICAgaXMgdHJ1ZSwgdGhlbiBzaW1wbHkgd3JpdGUgdG8gdGhlIG91dHB1dCBmaWxlIHdpdGhvdXQgY29tcHJlc3NpbmcsIGFuZAorICAgaWdub3JlIGZsdXNoLiAqLwogbG9jYWwgaW50IGd6X2NvbXAoc3RhdGUsIGZsdXNoKQogICAgIGd6X3N0YXRlcCBzdGF0ZTsKICAgICBpbnQgZmx1c2g7CkBAIC02OCw2ICs3OSwxNyBAQAogICAgIGlmIChzdGF0ZS0+c2l6ZSA9PSAwICYmIGd6X2luaXQoc3RhdGUpID09IC0xKQogICAgICAgICByZXR1cm4gLTE7CiAKKyAgICAvKiB3cml0ZSBkaXJlY3RseSBpZiByZXF1ZXN0ZWQgKi8KKyAgICBpZiAoc3RhdGUtPmRpcmVjdCkgeworICAgICAgICBnb3QgPSB3cml0ZShzdGF0ZS0+ZmQsIHN0cm0tPm5leHRfaW4sIHN0cm0tPmF2YWlsX2luKTsKKyAgICAgICAgaWYgKGdvdCA8IDAgfHwgKHVuc2lnbmVkKWdvdCAhPSBzdHJtLT5hdmFpbF9pbikgeworICAgICAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfRVJSTk8sIHpzdHJlcnJvcigpKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBzdHJtLT5hdmFpbF9pbiA9IDA7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKwogICAgIC8qIHJ1biBkZWZsYXRlKCkgb24gcHJvdmlkZWQgaW5wdXQgdW50aWwgaXQgcHJvZHVjZXMgbm8gbW9yZSBvdXRwdXQgKi8KICAgICByZXQgPSBaX09LOwogICAgIGRvIHsKQEAgLTc1LDggKzk3LDggQEAKICAgICAgICAgICAgZG9pbmcgWl9GSU5JU0ggdGhlbiBkb24ndCB3cml0ZSB1bnRpbCB3ZSBnZXQgdG8gWl9TVFJFQU1fRU5EICovCiAgICAgICAgIGlmIChzdHJtLT5hdmFpbF9vdXQgPT0gMCB8fCAoZmx1c2ggIT0gWl9OT19GTFVTSCAmJgogICAgICAgICAgICAgKGZsdXNoICE9IFpfRklOSVNIIHx8IHJldCA9PSBaX1NUUkVBTV9FTkQpKSkgewotICAgICAgICAgICAgaGF2ZSA9ICh1bnNpZ25lZCkoc3RybS0+bmV4dF9vdXQgLSBzdGF0ZS0+bmV4dCk7Ci0gICAgICAgICAgICBpZiAoaGF2ZSAmJiAoKGdvdCA9IHdyaXRlKHN0YXRlLT5mZCwgc3RhdGUtPm5leHQsIGhhdmUpKSA8IDAgfHwKKyAgICAgICAgICAgIGhhdmUgPSAodW5zaWduZWQpKHN0cm0tPm5leHRfb3V0IC0gc3RhdGUtPngubmV4dCk7CisgICAgICAgICAgICBpZiAoaGF2ZSAmJiAoKGdvdCA9IHdyaXRlKHN0YXRlLT5mZCwgc3RhdGUtPngubmV4dCwgaGF2ZSkpIDwgMCB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZClnb3QgIT0gaGF2ZSkpIHsKICAgICAgICAgICAgICAgICBnel9lcnJvcihzdGF0ZSwgWl9FUlJOTywgenN0cmVycm9yKCkpOwogICAgICAgICAgICAgICAgIHJldHVybiAtMTsKQEAgLTg1LDcgKzEwNyw3IEBACiAgICAgICAgICAgICAgICAgc3RybS0+YXZhaWxfb3V0ID0gc3RhdGUtPnNpemU7CiAgICAgICAgICAgICAgICAgc3RybS0+bmV4dF9vdXQgPSBzdGF0ZS0+b3V0OwogICAgICAgICAgICAgfQotICAgICAgICAgICAgc3RhdGUtPm5leHQgPSBzdHJtLT5uZXh0X291dDsKKyAgICAgICAgICAgIHN0YXRlLT54Lm5leHQgPSBzdHJtLT5uZXh0X291dDsKICAgICAgICAgfQogCiAgICAgICAgIC8qIGNvbXByZXNzICovCkBAIC0xMzEsNyArMTUzLDcgQEAKICAgICAgICAgfQogICAgICAgICBzdHJtLT5hdmFpbF9pbiA9IG47CiAgICAgICAgIHN0cm0tPm5leHRfaW4gPSBzdGF0ZS0+aW47Ci0gICAgICAgIHN0YXRlLT5wb3MgKz0gbjsKKyAgICAgICAgc3RhdGUtPngucG9zICs9IG47CiAgICAgICAgIGlmIChnel9jb21wKHN0YXRlLCBaX05PX0ZMVVNIKSA9PSAtMSkKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgbGVuIC09IG47CkBAIC0xNDYsNyArMTY4LDYgQEAKICAgICB1bnNpZ25lZCBsZW47CiB7CiAgICAgdW5zaWduZWQgcHV0ID0gbGVuOwotICAgIHVuc2lnbmVkIG47CiAgICAgZ3pfc3RhdGVwIHN0YXRlOwogICAgIHpfc3RyZWFtcCBzdHJtOwogCkBAIC0xNjMsNyArMTg0LDcgQEAKICAgICAvKiBzaW5jZSBhbiBpbnQgaXMgcmV0dXJuZWQsIG1ha2Ugc3VyZSBsZW4gZml0cyBpbiBvbmUsIG90aGVyd2lzZSByZXR1cm4KICAgICAgICB3aXRoIGFuIGVycm9yICh0aGlzIGF2b2lkcyB0aGUgZmxhdyBpbiB0aGUgaW50ZXJmYWNlKSAqLwogICAgIGlmICgoaW50KWxlbiA8IDApIHsKLSAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfQlVGX0VSUk9SLCAicmVxdWVzdGVkIGxlbmd0aCBkb2VzIG5vdCBmaXQgaW4gaW50Iik7CisgICAgICAgIGd6X2Vycm9yKHN0YXRlLCBaX0RBVEFfRVJST1IsICJyZXF1ZXN0ZWQgbGVuZ3RoIGRvZXMgbm90IGZpdCBpbiBpbnQiKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCkBAIC0xODYsMTYgKzIwNywxOSBAQAogICAgIGlmIChsZW4gPCBzdGF0ZS0+c2l6ZSkgewogICAgICAgICAvKiBjb3B5IHRvIGlucHV0IGJ1ZmZlciwgY29tcHJlc3Mgd2hlbiBmdWxsICovCiAgICAgICAgIGRvIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGhhdmUsIGNvcHk7CisKICAgICAgICAgICAgIGlmIChzdHJtLT5hdmFpbF9pbiA9PSAwKQogICAgICAgICAgICAgICAgIHN0cm0tPm5leHRfaW4gPSBzdGF0ZS0+aW47Ci0gICAgICAgICAgICBuID0gc3RhdGUtPnNpemUgLSBzdHJtLT5hdmFpbF9pbjsKLSAgICAgICAgICAgIGlmIChuID4gbGVuKQotICAgICAgICAgICAgICAgIG4gPSBsZW47Ci0gICAgICAgICAgICBtZW1jcHkoc3RybS0+bmV4dF9pbiArIHN0cm0tPmF2YWlsX2luLCBidWYsIG4pOwotICAgICAgICAgICAgc3RybS0+YXZhaWxfaW4gKz0gbjsKLSAgICAgICAgICAgIHN0YXRlLT5wb3MgKz0gbjsKLSAgICAgICAgICAgIGJ1ZiA9IChjaGFyICopYnVmICsgbjsKLSAgICAgICAgICAgIGxlbiAtPSBuOworICAgICAgICAgICAgaGF2ZSA9ICh1bnNpZ25lZCkoKHN0cm0tPm5leHRfaW4gKyBzdHJtLT5hdmFpbF9pbikgLSBzdGF0ZS0+aW4pOworICAgICAgICAgICAgY29weSA9IHN0YXRlLT5zaXplIC0gaGF2ZTsKKyAgICAgICAgICAgIGlmIChjb3B5ID4gbGVuKQorICAgICAgICAgICAgICAgIGNvcHkgPSBsZW47CisgICAgICAgICAgICBtZW1jcHkoc3RhdGUtPmluICsgaGF2ZSwgYnVmLCBjb3B5KTsKKyAgICAgICAgICAgIHN0cm0tPmF2YWlsX2luICs9IGNvcHk7CisgICAgICAgICAgICBzdGF0ZS0+eC5wb3MgKz0gY29weTsKKyAgICAgICAgICAgIGJ1ZiA9IChjb25zdCBjaGFyICopYnVmICsgY29weTsKKyAgICAgICAgICAgIGxlbiAtPSBjb3B5OwogICAgICAgICAgICAgaWYgKGxlbiAmJiBnel9jb21wKHN0YXRlLCBaX05PX0ZMVVNIKSA9PSAtMSkKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfSB3aGlsZSAobGVuKTsKQEAgLTIwNyw4ICsyMzEsOCBAQAogCiAgICAgICAgIC8qIGRpcmVjdGx5IGNvbXByZXNzIHVzZXIgYnVmZmVyIHRvIGZpbGUgKi8KICAgICAgICAgc3RybS0+YXZhaWxfaW4gPSBsZW47Ci0gICAgICAgIHN0cm0tPm5leHRfaW4gPSAodm9pZHApYnVmOwotICAgICAgICBzdGF0ZS0+cG9zICs9IGxlbjsKKyAgICAgICAgc3RybS0+bmV4dF9pbiA9ICh6X2NvbnN0IEJ5dGVmICopYnVmOworICAgICAgICBzdGF0ZS0+eC5wb3MgKz0gbGVuOwogICAgICAgICBpZiAoZ3pfY29tcChzdGF0ZSwgWl9OT19GTFVTSCkgPT0gLTEpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICB9CkBAIC0yMjIsNiArMjQ2LDcgQEAKICAgICBnekZpbGUgZmlsZTsKICAgICBpbnQgYzsKIHsKKyAgICB1bnNpZ25lZCBoYXZlOwogICAgIHVuc2lnbmVkIGNoYXIgYnVmWzFdOwogICAgIGd6X3N0YXRlcCBzdGF0ZTsKICAgICB6X3N0cmVhbXAgc3RybTsKQEAgLTI0NSwxOSArMjcwLDIzIEBACiAKICAgICAvKiB0cnkgd3JpdGluZyB0byBpbnB1dCBidWZmZXIgZm9yIHNwZWVkIChzdGF0ZS0+c2l6ZSA9PSAwIGlmIGJ1ZmZlciBub3QKICAgICAgICBpbml0aWFsaXplZCkgKi8KLSAgICBpZiAoc3RybS0+YXZhaWxfaW4gPCBzdGF0ZS0+c2l6ZSkgeworICAgIGlmIChzdGF0ZS0+c2l6ZSkgewogICAgICAgICBpZiAoc3RybS0+YXZhaWxfaW4gPT0gMCkKICAgICAgICAgICAgIHN0cm0tPm5leHRfaW4gPSBzdGF0ZS0+aW47Ci0gICAgICAgIHN0cm0tPm5leHRfaW5bc3RybS0+YXZhaWxfaW4rK10gPSBjOwotICAgICAgICBzdGF0ZS0+cG9zKys7Ci0gICAgICAgIHJldHVybiBjOworICAgICAgICBoYXZlID0gKHVuc2lnbmVkKSgoc3RybS0+bmV4dF9pbiArIHN0cm0tPmF2YWlsX2luKSAtIHN0YXRlLT5pbik7CisgICAgICAgIGlmIChoYXZlIDwgc3RhdGUtPnNpemUpIHsKKyAgICAgICAgICAgIHN0YXRlLT5pbltoYXZlXSA9IGM7CisgICAgICAgICAgICBzdHJtLT5hdmFpbF9pbisrOworICAgICAgICAgICAgc3RhdGUtPngucG9zKys7CisgICAgICAgICAgICByZXR1cm4gYyAmIDB4ZmY7CisgICAgICAgIH0KICAgICB9CiAKICAgICAvKiBubyByb29tIGluIGJ1ZmZlciBvciBub3QgaW5pdGlhbGl6ZWQsIHVzZSBnel93cml0ZSgpICovCiAgICAgYnVmWzBdID0gYzsKICAgICBpZiAoZ3p3cml0ZShmaWxlLCBidWYsIDEpICE9IDEpCiAgICAgICAgIHJldHVybiAtMTsKLSAgICByZXR1cm4gYzsKKyAgICByZXR1cm4gYyAmIDB4ZmY7CiB9CiAKIC8qIC0tIHNlZSB6bGliLmggLS0gKi8KQEAgLTI3NCwxNiArMzAzLDE1IEBACiAgICAgcmV0dXJuIHJldCA9PSAwICYmIGxlbiAhPSAwID8gLTEgOiByZXQ7CiB9CiAKLSNpZmRlZiBTVERDCisjaWYgZGVmaW5lZChTVERDKSB8fCBkZWZpbmVkKFpfSEFWRV9TVERBUkdfSCkKICNpbmNsdWRlIDxzdGRhcmcuaD4KIAogLyogLS0gc2VlIHpsaWIuaCAtLSAqLwotaW50IFpFWFBPUlRWQSBnenByaW50ZiAoZ3pGaWxlIGZpbGUsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoraW50IFpFWFBPUlRWQSBnenZwcmludGYoZ3pGaWxlIGZpbGUsIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCB2YSkKIHsKICAgICBpbnQgc2l6ZSwgbGVuOwogICAgIGd6X3N0YXRlcCBzdGF0ZTsKICAgICB6X3N0cmVhbXAgc3RybTsKLSAgICB2YV9saXN0IHZhOwogCiAgICAgLyogZ2V0IGludGVybmFsIHN0cnVjdHVyZSAqLwogICAgIGlmIChmaWxlID09IE5VTEwpCkBAIC0zMTMsMjUgKzM0MSwyMCBAQAogICAgIC8qIGRvIHRoZSBwcmludGYoKSBpbnRvIHRoZSBpbnB1dCBidWZmZXIsIHB1dCBsZW5ndGggaW4gbGVuICovCiAgICAgc2l6ZSA9IChpbnQpKHN0YXRlLT5zaXplKTsKICAgICBzdGF0ZS0+aW5bc2l6ZSAtIDFdID0gMDsKLSAgICB2YV9zdGFydCh2YSwgZm9ybWF0KTsKICNpZmRlZiBOT192c25wcmludGYKICMgIGlmZGVmIEhBU192c3ByaW50Zl92b2lkCi0gICAgKHZvaWQpdnNwcmludGYoc3RhdGUtPmluLCBmb3JtYXQsIHZhKTsKLSAgICB2YV9lbmQodmEpOworICAgICh2b2lkKXZzcHJpbnRmKChjaGFyICopKHN0YXRlLT5pbiksIGZvcm1hdCwgdmEpOwogICAgIGZvciAobGVuID0gMDsgbGVuIDwgc2l6ZTsgbGVuKyspCiAgICAgICAgIGlmIChzdGF0ZS0+aW5bbGVuXSA9PSAwKSBicmVhazsKICMgIGVsc2UKLSAgICBsZW4gPSB2c3ByaW50ZihzdGF0ZS0+aW4sIGZvcm1hdCwgdmEpOwotICAgIHZhX2VuZCh2YSk7CisgICAgbGVuID0gdnNwcmludGYoKGNoYXIgKikoc3RhdGUtPmluKSwgZm9ybWF0LCB2YSk7CiAjICBlbmRpZgogI2Vsc2UKICMgIGlmZGVmIEhBU192c25wcmludGZfdm9pZAotICAgICh2b2lkKXZzbnByaW50ZihzdGF0ZS0+aW4sIHNpemUsIGZvcm1hdCwgdmEpOwotICAgIHZhX2VuZCh2YSk7Ci0gICAgbGVuID0gc3RybGVuKHN0YXRlLT5pbik7CisgICAgKHZvaWQpdnNucHJpbnRmKChjaGFyICopKHN0YXRlLT5pbiksIHNpemUsIGZvcm1hdCwgdmEpOworICAgIGxlbiA9IHN0cmxlbigoY2hhciAqKShzdGF0ZS0+aW4pKTsKICMgIGVsc2UKICAgICBsZW4gPSB2c25wcmludGYoKGNoYXIgKikoc3RhdGUtPmluKSwgc2l6ZSwgZm9ybWF0LCB2YSk7Ci0gICAgdmFfZW5kKHZhKTsKICMgIGVuZGlmCiAjZW5kaWYKIApAQCAtMzQyLDExICszNjUsMjIgQEAKICAgICAvKiB1cGRhdGUgYnVmZmVyIGFuZCBwb3NpdGlvbiwgZGVmZXIgY29tcHJlc3Npb24gdW50aWwgbmVlZGVkICovCiAgICAgc3RybS0+YXZhaWxfaW4gPSAodW5zaWduZWQpbGVuOwogICAgIHN0cm0tPm5leHRfaW4gPSBzdGF0ZS0+aW47Ci0gICAgc3RhdGUtPnBvcyArPSBsZW47CisgICAgc3RhdGUtPngucG9zICs9IGxlbjsKICAgICByZXR1cm4gbGVuOwogfQogCi0jZWxzZSAvKiAhU1REQyAqLworaW50IFpFWFBPUlRWQSBnenByaW50ZihnekZpbGUgZmlsZSwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisgICAgdmFfbGlzdCB2YTsKKyAgICBpbnQgcmV0OworCisgICAgdmFfc3RhcnQodmEsIGZvcm1hdCk7CisgICAgcmV0ID0gZ3p2cHJpbnRmKGZpbGUsIGZvcm1hdCwgdmEpOworICAgIHZhX2VuZCh2YSk7CisgICAgcmV0dXJuIHJldDsKK30KKworI2Vsc2UgLyogIVNUREMgJiYgIVpfSEFWRV9TVERBUkdfSCAqLwogCiAvKiAtLSBzZWUgemxpYi5oIC0tICovCiBpbnQgWkVYUE9SVFZBIGd6cHJpbnRmIChmaWxlLCBmb3JtYXQsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCwgYTksIGExMCwKQEAgLTM2Niw2ICs0MDAsMTAgQEAKICAgICBzdGF0ZSA9IChnel9zdGF0ZXApZmlsZTsKICAgICBzdHJtID0gJihzdGF0ZS0+c3RybSk7CiAKKyAgICAvKiBjaGVjayB0aGF0IGNhbiByZWFsbHkgcGFzcyBwb2ludGVyIGluIGludHMgKi8KKyAgICBpZiAoc2l6ZW9mKGludCkgIT0gc2l6ZW9mKHZvaWQgKikpCisgICAgICAgIHJldHVybiAwOworCiAgICAgLyogY2hlY2sgdGhhdCB3ZSdyZSB3cml0aW5nIGFuZCB0aGF0IHRoZXJlJ3Mgbm8gZXJyb3IgKi8KICAgICBpZiAoc3RhdGUtPm1vZGUgIT0gR1pfV1JJVEUgfHwgc3RhdGUtPmVyciAhPSBaX09LKQogICAgICAgICByZXR1cm4gMDsKQEAgLTM5MCwyMiArNDI4LDIzIEBACiAgICAgc3RhdGUtPmluW3NpemUgLSAxXSA9IDA7CiAjaWZkZWYgTk9fc25wcmludGYKICMgIGlmZGVmIEhBU19zcHJpbnRmX3ZvaWQKLSAgICBzcHJpbnRmKHN0YXRlLT5pbiwgZm9ybWF0LCBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNywgYTgsCisgICAgc3ByaW50ZigoY2hhciAqKShzdGF0ZS0+aW4pLCBmb3JtYXQsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCwKICAgICAgICAgICAgIGE5LCBhMTAsIGExMSwgYTEyLCBhMTMsIGExNCwgYTE1LCBhMTYsIGExNywgYTE4LCBhMTksIGEyMCk7CiAgICAgZm9yIChsZW4gPSAwOyBsZW4gPCBzaXplOyBsZW4rKykKICAgICAgICAgaWYgKHN0YXRlLT5pbltsZW5dID09IDApIGJyZWFrOwogIyAgZWxzZQotICAgIGxlbiA9IHNwcmludGYoc3RhdGUtPmluLCBmb3JtYXQsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCwKLSAgICAgICAgICAgICAgICBhOSwgYTEwLCBhMTEsIGExMiwgYTEzLCBhMTQsIGExNSwgYTE2LCBhMTcsIGExOCwgYTE5LCBhMjApOworICAgIGxlbiA9IHNwcmludGYoKGNoYXIgKikoc3RhdGUtPmluKSwgZm9ybWF0LCBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNywgYTgsCisgICAgICAgICAgICAgICAgICBhOSwgYTEwLCBhMTEsIGExMiwgYTEzLCBhMTQsIGExNSwgYTE2LCBhMTcsIGExOCwgYTE5LCBhMjApOwogIyAgZW5kaWYKICNlbHNlCiAjICBpZmRlZiBIQVNfc25wcmludGZfdm9pZAotICAgIHNucHJpbnRmKHN0YXRlLT5pbiwgc2l6ZSwgZm9ybWF0LCBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNywgYTgsCisgICAgc25wcmludGYoKGNoYXIgKikoc3RhdGUtPmluKSwgc2l6ZSwgZm9ybWF0LCBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNywgYTgsCiAgICAgICAgICAgICAgYTksIGExMCwgYTExLCBhMTIsIGExMywgYTE0LCBhMTUsIGExNiwgYTE3LCBhMTgsIGExOSwgYTIwKTsKLSAgICBsZW4gPSBzdHJsZW4oc3RhdGUtPmluKTsKKyAgICBsZW4gPSBzdHJsZW4oKGNoYXIgKikoc3RhdGUtPmluKSk7CiAjICBlbHNlCi0gICAgbGVuID0gc25wcmludGYoc3RhdGUtPmluLCBzaXplLCBmb3JtYXQsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCwKLSAgICAgICAgICAgICAgICAgYTksIGExMCwgYTExLCBhMTIsIGExMywgYTE0LCBhMTUsIGExNiwgYTE3LCBhMTgsIGExOSwgYTIwKTsKKyAgICBsZW4gPSBzbnByaW50ZigoY2hhciAqKShzdGF0ZS0+aW4pLCBzaXplLCBmb3JtYXQsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsCisgICAgICAgICAgICAgICAgICAgYTcsIGE4LCBhOSwgYTEwLCBhMTEsIGExMiwgYTEzLCBhMTQsIGExNSwgYTE2LCBhMTcsIGExOCwKKyAgICAgICAgICAgICAgICAgICBhMTksIGEyMCk7CiAjICBlbmRpZgogI2VuZGlmCiAKQEAgLTQxNiw3ICs0NTUsNyBAQAogICAgIC8qIHVwZGF0ZSBidWZmZXIgYW5kIHBvc2l0aW9uLCBkZWZlciBjb21wcmVzc2lvbiB1bnRpbCBuZWVkZWQgKi8KICAgICBzdHJtLT5hdmFpbF9pbiA9ICh1bnNpZ25lZClsZW47CiAgICAgc3RybS0+bmV4dF9pbiA9IHN0YXRlLT5pbjsKLSAgICBzdGF0ZS0+cG9zICs9IGxlbjsKKyAgICBzdGF0ZS0+eC5wb3MgKz0gbGVuOwogICAgIHJldHVybiBsZW47CiB9CiAKQEAgLTUwMCw3ICs1MzksNyBAQAogaW50IFpFWFBPUlQgZ3pjbG9zZV93KGZpbGUpCiAgICAgZ3pGaWxlIGZpbGU7CiB7Ci0gICAgaW50IHJldCA9IDA7CisgICAgaW50IHJldCA9IFpfT0s7CiAgICAgZ3pfc3RhdGVwIHN0YXRlOwogCiAgICAgLyogZ2V0IGludGVybmFsIHN0cnVjdHVyZSAqLwpAQCAtNTE1LDE3ICs1NTQsMjQgQEAKICAgICAvKiBjaGVjayBmb3Igc2VlayByZXF1ZXN0ICovCiAgICAgaWYgKHN0YXRlLT5zZWVrKSB7CiAgICAgICAgIHN0YXRlLT5zZWVrID0gMDsKLSAgICAgICAgcmV0ICs9IGd6X3plcm8oc3RhdGUsIHN0YXRlLT5za2lwKTsKKyAgICAgICAgaWYgKGd6X3plcm8oc3RhdGUsIHN0YXRlLT5za2lwKSA9PSAtMSkKKyAgICAgICAgICAgIHJldCA9IHN0YXRlLT5lcnI7CiAgICAgfQogCiAgICAgLyogZmx1c2gsIGZyZWUgbWVtb3J5LCBhbmQgY2xvc2UgZmlsZSAqLwotICAgIHJldCArPSBnel9jb21wKHN0YXRlLCBaX0ZJTklTSCk7Ci0gICAgKHZvaWQpZGVmbGF0ZUVuZCgmKHN0YXRlLT5zdHJtKSk7Ci0gICAgZnJlZShzdGF0ZS0+b3V0KTsKLSAgICBmcmVlKHN0YXRlLT5pbik7CisgICAgaWYgKGd6X2NvbXAoc3RhdGUsIFpfRklOSVNIKSA9PSAtMSkKKyAgICAgICAgcmV0ID0gc3RhdGUtPmVycjsKKyAgICBpZiAoc3RhdGUtPnNpemUpIHsKKyAgICAgICAgaWYgKCFzdGF0ZS0+ZGlyZWN0KSB7CisgICAgICAgICAgICAodm9pZClkZWZsYXRlRW5kKCYoc3RhdGUtPnN0cm0pKTsKKyAgICAgICAgICAgIGZyZWUoc3RhdGUtPm91dCk7CisgICAgICAgIH0KKyAgICAgICAgZnJlZShzdGF0ZS0+aW4pOworICAgIH0KICAgICBnel9lcnJvcihzdGF0ZSwgWl9PSywgTlVMTCk7CiAgICAgZnJlZShzdGF0ZS0+cGF0aCk7Ci0gICAgcmV0ICs9IGNsb3NlKHN0YXRlLT5mZCk7CisgICAgaWYgKGNsb3NlKHN0YXRlLT5mZCkgPT0gLTEpCisgICAgICAgIHJldCA9IFpfRVJSTk87CiAgICAgZnJlZShzdGF0ZSk7Ci0gICAgcmV0dXJuIHJldCA/IFpfRVJSTk8gOiBaX09LOworICAgIHJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvaW5mYmFjay5jIGIvTW9kdWxlcy96bGliL2luZmJhY2suYwppbmRleCBhZjNhOGM5Li5mMzgzM2MyIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvaW5mYmFjay5jCisrKyBiL01vZHVsZXMvemxpYi9pbmZiYWNrLmMKQEAgLTEsNSArMSw1IEBACiAvKiBpbmZiYWNrLmMgLS0gaW5mbGF0ZSB1c2luZyBhIGNhbGwtYmFjayBpbnRlcmZhY2UKLSAqIENvcHlyaWdodCAoQykgMTk5NS0yMDA5IE1hcmsgQWRsZXIKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDExIE1hcmsgQWRsZXIKICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKICAqLwogCkBAIC00MiwxMCArNDIsMTkgQEAKICAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwogICAgIHN0cm0tPm1zZyA9IFpfTlVMTDsgICAgICAgICAgICAgICAgIC8qIGluIGNhc2Ugd2UgcmV0dXJuIGFuIGVycm9yICovCiAgICAgaWYgKHN0cm0tPnphbGxvYyA9PSAoYWxsb2NfZnVuYykwKSB7CisjaWZkZWYgWl9TT0xPCisgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKKyNlbHNlCiAgICAgICAgIHN0cm0tPnphbGxvYyA9IHpjYWxsb2M7CiAgICAgICAgIHN0cm0tPm9wYXF1ZSA9ICh2b2lkcGYpMDsKKyNlbmRpZgogICAgIH0KLSAgICBpZiAoc3RybS0+emZyZWUgPT0gKGZyZWVfZnVuYykwKSBzdHJtLT56ZnJlZSA9IHpjZnJlZTsKKyAgICBpZiAoc3RybS0+emZyZWUgPT0gKGZyZWVfZnVuYykwKQorI2lmZGVmIFpfU09MTworICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CisjZWxzZQorICAgIHN0cm0tPnpmcmVlID0gemNmcmVlOworI2VuZGlmCiAgICAgc3RhdGUgPSAoc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICopWkFMTE9DKHN0cm0sIDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSkpOwogICAgIGlmIChzdGF0ZSA9PSBaX05VTEwpIHJldHVybiBaX01FTV9FUlJPUjsKQEAgLTI0Niw3ICsyNTUsNyBAQAogdm9pZCBGQVIgKm91dF9kZXNjOwogewogICAgIHN0cnVjdCBpbmZsYXRlX3N0YXRlIEZBUiAqc3RhdGU7Ci0gICAgdW5zaWduZWQgY2hhciBGQVIgKm5leHQ7ICAgIC8qIG5leHQgaW5wdXQgKi8KKyAgICB6X2NvbnN0IHVuc2lnbmVkIGNoYXIgRkFSICpuZXh0OyAgICAvKiBuZXh0IGlucHV0ICovCiAgICAgdW5zaWduZWQgY2hhciBGQVIgKnB1dDsgICAgIC8qIG5leHQgb3V0cHV0ICovCiAgICAgdW5zaWduZWQgaGF2ZSwgbGVmdDsgICAgICAgIC8qIGF2YWlsYWJsZSBpbnB1dCBhbmQgb3V0cHV0ICovCiAgICAgdW5zaWduZWQgbG9uZyBob2xkOyAgICAgICAgIC8qIGJpdCBidWZmZXIgKi8KQEAgLTM5NCw3ICs0MDMsNiBAQAogICAgICAgICAgICAgICAgICAgICBQVUxMQllURSgpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAoaGVyZS52YWwgPCAxNikgewotICAgICAgICAgICAgICAgICAgICBORUVEQklUUyhoZXJlLmJpdHMpOwogICAgICAgICAgICAgICAgICAgICBEUk9QQklUUyhoZXJlLmJpdHMpOwogICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+bGVuc1tzdGF0ZS0+aGF2ZSsrXSA9IGhlcmUudmFsOwogICAgICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi9pbmZmYXN0LmMgYi9Nb2R1bGVzL3psaWIvaW5mZmFzdC5jCmluZGV4IDJmMWQ2MGIuLmJkYTU5Y2UgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi9pbmZmYXN0LmMKKysrIGIvTW9kdWxlcy96bGliL2luZmZhc3QuYwpAQCAtMSw1ICsxLDUgQEAKIC8qIGluZmZhc3QuYyAtLSBmYXN0IGRlY29kaW5nCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwOCwgMjAxMCBNYXJrIEFkbGVyCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwOCwgMjAxMCwgMjAxMyBNYXJrIEFkbGVyCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCiAgKi8KIApAQCAtNjksOCArNjksOCBAQAogdW5zaWduZWQgc3RhcnQ7ICAgICAgICAgLyogaW5mbGF0ZSgpJ3Mgc3RhcnRpbmcgdmFsdWUgZm9yIHN0cm0tPmF2YWlsX291dCAqLwogewogICAgIHN0cnVjdCBpbmZsYXRlX3N0YXRlIEZBUiAqc3RhdGU7Ci0gICAgdW5zaWduZWQgY2hhciBGQVIgKmluOyAgICAgIC8qIGxvY2FsIHN0cm0tPm5leHRfaW4gKi8KLSAgICB1bnNpZ25lZCBjaGFyIEZBUiAqbGFzdDsgICAgLyogd2hpbGUgaW4gPCBsYXN0LCBlbm91Z2ggaW5wdXQgYXZhaWxhYmxlICovCisgICAgel9jb25zdCB1bnNpZ25lZCBjaGFyIEZBUiAqaW47ICAgICAgLyogbG9jYWwgc3RybS0+bmV4dF9pbiAqLworICAgIHpfY29uc3QgdW5zaWduZWQgY2hhciBGQVIgKmxhc3Q7ICAgIC8qIGhhdmUgZW5vdWdoIGlucHV0IHdoaWxlIGluIDwgbGFzdCAqLwogICAgIHVuc2lnbmVkIGNoYXIgRkFSICpvdXQ7ICAgICAvKiBsb2NhbCBzdHJtLT5uZXh0X291dCAqLwogICAgIHVuc2lnbmVkIGNoYXIgRkFSICpiZWc7ICAgICAvKiBpbmZsYXRlKCkncyBpbml0aWFsIHN0cm0tPm5leHRfb3V0ICovCiAgICAgdW5zaWduZWQgY2hhciBGQVIgKmVuZDsgICAgIC8qIHdoaWxlIG91dCA8IGVuZCwgZW5vdWdoIHNwYWNlIGF2YWlsYWJsZSAqLwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL2luZmZpeGVkLmggYi9Nb2R1bGVzL3psaWIvaW5mZml4ZWQuaAppbmRleCA3NWVkNGI1Li5kNjI4MzI3IDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvaW5mZml4ZWQuaAorKysgYi9Nb2R1bGVzL3psaWIvaW5mZml4ZWQuaApAQCAtMiw5ICsyLDkgQEAKICAgICAgKiBHZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBtYWtlZml4ZWQoKS4KICAgICAgKi8KIAotICAgIC8qIFdBUk5JTkc6IHRoaXMgZmlsZSBzaG91bGQgKm5vdCogYmUgdXNlZCBieSBhcHBsaWNhdGlvbnMuIEl0Ci0gICAgICAgaXMgcGFydCBvZiB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIGNvbXByZXNzaW9uIGxpYnJhcnkgYW5kCi0gICAgICAgaXMgc3ViamVjdCB0byBjaGFuZ2UuIEFwcGxpY2F0aW9ucyBzaG91bGQgb25seSB1c2UgemxpYi5oLgorICAgIC8qIFdBUk5JTkc6IHRoaXMgZmlsZSBzaG91bGQgKm5vdCogYmUgdXNlZCBieSBhcHBsaWNhdGlvbnMuCisgICAgICAgSXQgaXMgcGFydCBvZiB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBsaWJyYXJ5IGFuZCBpcworICAgICAgIHN1YmplY3QgdG8gY2hhbmdlLiBBcHBsaWNhdGlvbnMgc2hvdWxkIG9ubHkgdXNlIHpsaWIuaC4KICAgICAgKi8KIAogICAgIHN0YXRpYyBjb25zdCBjb2RlIGxlbmZpeFs1MTJdID0gewpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL2luZmxhdGUuYyBiL01vZHVsZXMvemxpYi9pbmZsYXRlLmMKaW5kZXggYTg0MzFhYi4uODcwZjg5YiAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL2luZmxhdGUuYworKysgYi9Nb2R1bGVzL3psaWIvaW5mbGF0ZS5jCkBAIC0xLDUgKzEsNSBAQAogLyogaW5mbGF0ZS5jIC0tIHpsaWIgZGVjb21wcmVzc2lvbgotICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMTAgTWFyayBBZGxlcgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMTIgTWFyayBBZGxlcgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAogICovCiAKQEAgLTkzLDE0ICs5MywxNSBAQAogCiAvKiBmdW5jdGlvbiBwcm90b3R5cGVzICovCiBsb2NhbCB2b2lkIGZpeGVkdGFibGVzIE9GKChzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKnN0YXRlKSk7Ci1sb2NhbCBpbnQgdXBkYXRld2luZG93IE9GKCh6X3N0cmVhbXAgc3RybSwgdW5zaWduZWQgb3V0KSk7Citsb2NhbCBpbnQgdXBkYXRld2luZG93IE9GKCh6X3N0cmVhbXAgc3RybSwgY29uc3QgdW5zaWduZWQgY2hhciBGQVIgKmVuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNvcHkpKTsKICNpZmRlZiBCVUlMREZJWEVECiAgICB2b2lkIG1ha2VmaXhlZCBPRigodm9pZCkpOwogI2VuZGlmCi1sb2NhbCB1bnNpZ25lZCBzeW5jc2VhcmNoIE9GKCh1bnNpZ25lZCBGQVIgKmhhdmUsIHVuc2lnbmVkIGNoYXIgRkFSICpidWYsCitsb2NhbCB1bnNpZ25lZCBzeW5jc2VhcmNoIE9GKCh1bnNpZ25lZCBGQVIgKmhhdmUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgRkFSICpidWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsZW4pKTsKIAotaW50IFpFWFBPUlQgaW5mbGF0ZVJlc2V0KHN0cm0pCitpbnQgWkVYUE9SVCBpbmZsYXRlUmVzZXRLZWVwKHN0cm0pCiB6X3N0cmVhbXAgc3RybTsKIHsKICAgICBzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKnN0YXRlOwpAQCAtMTA5LDE1ICsxMTAsMTMgQEAKICAgICBzdGF0ZSA9IChzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKilzdHJtLT5zdGF0ZTsKICAgICBzdHJtLT50b3RhbF9pbiA9IHN0cm0tPnRvdGFsX291dCA9IHN0YXRlLT50b3RhbCA9IDA7CiAgICAgc3RybS0+bXNnID0gWl9OVUxMOwotICAgIHN0cm0tPmFkbGVyID0gMTsgICAgICAgIC8qIHRvIHN1cHBvcnQgaWxsLWNvbmNlaXZlZCBKYXZhIHRlc3Qgc3VpdGUgKi8KKyAgICBpZiAoc3RhdGUtPndyYXApICAgICAgICAvKiB0byBzdXBwb3J0IGlsbC1jb25jZWl2ZWQgSmF2YSB0ZXN0IHN1aXRlICovCisgICAgICAgIHN0cm0tPmFkbGVyID0gc3RhdGUtPndyYXAgJiAxOwogICAgIHN0YXRlLT5tb2RlID0gSEVBRDsKICAgICBzdGF0ZS0+bGFzdCA9IDA7CiAgICAgc3RhdGUtPmhhdmVkaWN0ID0gMDsKICAgICBzdGF0ZS0+ZG1heCA9IDMyNzY4VTsKICAgICBzdGF0ZS0+aGVhZCA9IFpfTlVMTDsKLSAgICBzdGF0ZS0+d3NpemUgPSAwOwotICAgIHN0YXRlLT53aGF2ZSA9IDA7Ci0gICAgc3RhdGUtPnduZXh0ID0gMDsKICAgICBzdGF0ZS0+aG9sZCA9IDA7CiAgICAgc3RhdGUtPmJpdHMgPSAwOwogICAgIHN0YXRlLT5sZW5jb2RlID0gc3RhdGUtPmRpc3Rjb2RlID0gc3RhdGUtPm5leHQgPSBzdGF0ZS0+Y29kZXM7CkBAIC0xMjcsNiArMTI2LDE5IEBACiAgICAgcmV0dXJuIFpfT0s7CiB9CiAKK2ludCBaRVhQT1JUIGluZmxhdGVSZXNldChzdHJtKQorel9zdHJlYW1wIHN0cm07Cit7CisgICAgc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICpzdGF0ZTsKKworICAgIGlmIChzdHJtID09IFpfTlVMTCB8fCBzdHJtLT5zdGF0ZSA9PSBaX05VTEwpIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKKyAgICBzdGF0ZSA9IChzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKilzdHJtLT5zdGF0ZTsKKyAgICBzdGF0ZS0+d3NpemUgPSAwOworICAgIHN0YXRlLT53aGF2ZSA9IDA7CisgICAgc3RhdGUtPnduZXh0ID0gMDsKKyAgICByZXR1cm4gaW5mbGF0ZVJlc2V0S2VlcChzdHJtKTsKK30KKwogaW50IFpFWFBPUlQgaW5mbGF0ZVJlc2V0MihzdHJtLCB3aW5kb3dCaXRzKQogel9zdHJlYW1wIHN0cm07CiBpbnQgd2luZG93Qml0czsKQEAgLTE4MCwxMCArMTkyLDE5IEBACiAgICAgaWYgKHN0cm0gPT0gWl9OVUxMKSByZXR1cm4gWl9TVFJFQU1fRVJST1I7CiAgICAgc3RybS0+bXNnID0gWl9OVUxMOyAgICAgICAgICAgICAgICAgLyogaW4gY2FzZSB3ZSByZXR1cm4gYW4gZXJyb3IgKi8KICAgICBpZiAoc3RybS0+emFsbG9jID09IChhbGxvY19mdW5jKTApIHsKKyNpZmRlZiBaX1NPTE8KKyAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOworI2Vsc2UKICAgICAgICAgc3RybS0+emFsbG9jID0gemNhbGxvYzsKICAgICAgICAgc3RybS0+b3BhcXVlID0gKHZvaWRwZikwOworI2VuZGlmCiAgICAgfQotICAgIGlmIChzdHJtLT56ZnJlZSA9PSAoZnJlZV9mdW5jKTApIHN0cm0tPnpmcmVlID0gemNmcmVlOworICAgIGlmIChzdHJtLT56ZnJlZSA9PSAoZnJlZV9mdW5jKTApCisjaWZkZWYgWl9TT0xPCisgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKKyNlbHNlCisgICAgICAgIHN0cm0tPnpmcmVlID0gemNmcmVlOworI2VuZGlmCiAgICAgc3RhdGUgPSAoc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICopCiAgICAgICAgICAgICBaQUxMT0Moc3RybSwgMSwgc2l6ZW9mKHN0cnVjdCBpbmZsYXRlX3N0YXRlKSk7CiAgICAgaWYgKHN0YXRlID09IFpfTlVMTCkgcmV0dXJuIFpfTUVNX0VSUk9SOwpAQCAtMzIxLDggKzM0Miw4IEBACiAgICAgbG93ID0gMDsKICAgICBmb3IgKDs7KSB7CiAgICAgICAgIGlmICgobG93ICUgNykgPT0gMCkgcHJpbnRmKCJcbiAgICAgICAgIik7Ci0gICAgICAgIHByaW50ZigieyV1LCV1LCVkfSIsIHN0YXRlLmxlbmNvZGVbbG93XS5vcCwgc3RhdGUubGVuY29kZVtsb3ddLmJpdHMsCi0gICAgICAgICAgICAgICBzdGF0ZS5sZW5jb2RlW2xvd10udmFsKTsKKyAgICAgICAgcHJpbnRmKCJ7JXUsJXUsJWR9IiwgKGxvdyAmIDEyNykgPT0gOTkgPyA2NCA6IHN0YXRlLmxlbmNvZGVbbG93XS5vcCwKKyAgICAgICAgICAgICAgIHN0YXRlLmxlbmNvZGVbbG93XS5iaXRzLCBzdGF0ZS5sZW5jb2RlW2xvd10udmFsKTsKICAgICAgICAgaWYgKCsrbG93ID09IHNpemUpIGJyZWFrOwogICAgICAgICBwdXRjaGFyKCcsJyk7CiAgICAgfQpAQCAtMzU1LDEyICszNzYsMTMgQEAKICAgIG91dHB1dCB3aWxsIGZhbGwgaW4gdGhlIG91dHB1dCBkYXRhLCBtYWtpbmcgbWF0Y2ggY29waWVzIHNpbXBsZXIgYW5kIGZhc3Rlci4KICAgIFRoZSBhZHZhbnRhZ2UgbWF5IGJlIGRlcGVuZGVudCBvbiB0aGUgc2l6ZSBvZiB0aGUgcHJvY2Vzc29yJ3MgZGF0YSBjYWNoZXMuCiAgKi8KLWxvY2FsIGludCB1cGRhdGV3aW5kb3coc3RybSwgb3V0KQorbG9jYWwgaW50IHVwZGF0ZXdpbmRvdyhzdHJtLCBlbmQsIGNvcHkpCiB6X3N0cmVhbXAgc3RybTsKLXVuc2lnbmVkIG91dDsKK2NvbnN0IEJ5dGVmICplbmQ7Cit1bnNpZ25lZCBjb3B5OwogewogICAgIHN0cnVjdCBpbmZsYXRlX3N0YXRlIEZBUiAqc3RhdGU7Ci0gICAgdW5zaWduZWQgY29weSwgZGlzdDsKKyAgICB1bnNpZ25lZCBkaXN0OwogCiAgICAgc3RhdGUgPSAoc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICopc3RybS0+c3RhdGU7CiAKQEAgLTM4MCwxOSArNDAyLDE4IEBACiAgICAgfQogCiAgICAgLyogY29weSBzdGF0ZS0+d3NpemUgb3IgbGVzcyBvdXRwdXQgYnl0ZXMgaW50byB0aGUgY2lyY3VsYXIgd2luZG93ICovCi0gICAgY29weSA9IG91dCAtIHN0cm0tPmF2YWlsX291dDsKICAgICBpZiAoY29weSA+PSBzdGF0ZS0+d3NpemUpIHsKLSAgICAgICAgem1lbWNweShzdGF0ZS0+d2luZG93LCBzdHJtLT5uZXh0X291dCAtIHN0YXRlLT53c2l6ZSwgc3RhdGUtPndzaXplKTsKKyAgICAgICAgem1lbWNweShzdGF0ZS0+d2luZG93LCBlbmQgLSBzdGF0ZS0+d3NpemUsIHN0YXRlLT53c2l6ZSk7CiAgICAgICAgIHN0YXRlLT53bmV4dCA9IDA7CiAgICAgICAgIHN0YXRlLT53aGF2ZSA9IHN0YXRlLT53c2l6ZTsKICAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIGRpc3QgPSBzdGF0ZS0+d3NpemUgLSBzdGF0ZS0+d25leHQ7CiAgICAgICAgIGlmIChkaXN0ID4gY29weSkgZGlzdCA9IGNvcHk7Ci0gICAgICAgIHptZW1jcHkoc3RhdGUtPndpbmRvdyArIHN0YXRlLT53bmV4dCwgc3RybS0+bmV4dF9vdXQgLSBjb3B5LCBkaXN0KTsKKyAgICAgICAgem1lbWNweShzdGF0ZS0+d2luZG93ICsgc3RhdGUtPnduZXh0LCBlbmQgLSBjb3B5LCBkaXN0KTsKICAgICAgICAgY29weSAtPSBkaXN0OwogICAgICAgICBpZiAoY29weSkgewotICAgICAgICAgICAgem1lbWNweShzdGF0ZS0+d2luZG93LCBzdHJtLT5uZXh0X291dCAtIGNvcHksIGNvcHkpOworICAgICAgICAgICAgem1lbWNweShzdGF0ZS0+d2luZG93LCBlbmQgLSBjb3B5LCBjb3B5KTsKICAgICAgICAgICAgIHN0YXRlLT53bmV4dCA9IGNvcHk7CiAgICAgICAgICAgICBzdGF0ZS0+d2hhdmUgPSBzdGF0ZS0+d3NpemU7CiAgICAgICAgIH0KQEAgLTQ5OSwxMSArNTIwLDYgQEAKICAgICAgICAgYml0cyAtPSBiaXRzICYgNzsgXAogICAgIH0gd2hpbGUgKDApCiAKLS8qIFJldmVyc2UgdGhlIGJ5dGVzIGluIGEgMzItYml0IHZhbHVlICovCi0jZGVmaW5lIFJFVkVSU0UocSkgXAotICAgICgoKChxKSA+PiAyNCkgJiAweGZmKSArICgoKHEpID4+IDgpICYgMHhmZjAwKSArIFwKLSAgICAgKCgocSkgJiAweGZmMDApIDw8IDgpICsgKCgocSkgJiAweGZmKSA8PCAyNCkpCi0KIC8qCiAgICBpbmZsYXRlKCkgdXNlcyBhIHN0YXRlIG1hY2hpbmUgdG8gcHJvY2VzcyBhcyBtdWNoIGlucHV0IGRhdGEgYW5kIGdlbmVyYXRlIGFzCiAgICBtdWNoIG91dHB1dCBkYXRhIGFzIHBvc3NpYmxlIGJlZm9yZSByZXR1cm5pbmcuICBUaGUgc3RhdGUgbWFjaGluZSBpcwpAQCAtNTkxLDcgKzYwNyw3IEBACiBpbnQgZmx1c2g7CiB7CiAgICAgc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICpzdGF0ZTsKLSAgICB1bnNpZ25lZCBjaGFyIEZBUiAqbmV4dDsgICAgLyogbmV4dCBpbnB1dCAqLworICAgIHpfY29uc3QgdW5zaWduZWQgY2hhciBGQVIgKm5leHQ7ICAgIC8qIG5leHQgaW5wdXQgKi8KICAgICB1bnNpZ25lZCBjaGFyIEZBUiAqcHV0OyAgICAgLyogbmV4dCBvdXRwdXQgKi8KICAgICB1bnNpZ25lZCBoYXZlLCBsZWZ0OyAgICAgICAgLyogYXZhaWxhYmxlIGlucHV0IGFuZCBvdXRwdXQgKi8KICAgICB1bnNpZ25lZCBsb25nIGhvbGQ7ICAgICAgICAgLyogYml0IGJ1ZmZlciAqLwpAQCAtNzk3LDcgKzgxMyw3IEBACiAjZW5kaWYKICAgICAgICAgY2FzZSBESUNUSUQ6CiAgICAgICAgICAgICBORUVEQklUUygzMik7Ci0gICAgICAgICAgICBzdHJtLT5hZGxlciA9IHN0YXRlLT5jaGVjayA9IFJFVkVSU0UoaG9sZCk7CisgICAgICAgICAgICBzdHJtLT5hZGxlciA9IHN0YXRlLT5jaGVjayA9IFpTV0FQMzIoaG9sZCk7CiAgICAgICAgICAgICBJTklUQklUUygpOwogICAgICAgICAgICAgc3RhdGUtPm1vZGUgPSBESUNUOwogICAgICAgICBjYXNlIERJQ1Q6CkBAIC05MDUsNyArOTIxLDcgQEAKICAgICAgICAgICAgIHdoaWxlIChzdGF0ZS0+aGF2ZSA8IDE5KQogICAgICAgICAgICAgICAgIHN0YXRlLT5sZW5zW29yZGVyW3N0YXRlLT5oYXZlKytdXSA9IDA7CiAgICAgICAgICAgICBzdGF0ZS0+bmV4dCA9IHN0YXRlLT5jb2RlczsKLSAgICAgICAgICAgIHN0YXRlLT5sZW5jb2RlID0gKGNvZGUgY29uc3QgRkFSICopKHN0YXRlLT5uZXh0KTsKKyAgICAgICAgICAgIHN0YXRlLT5sZW5jb2RlID0gKGNvbnN0IGNvZGUgRkFSICopKHN0YXRlLT5uZXh0KTsKICAgICAgICAgICAgIHN0YXRlLT5sZW5iaXRzID0gNzsKICAgICAgICAgICAgIHJldCA9IGluZmxhdGVfdGFibGUoQ09ERVMsIHN0YXRlLT5sZW5zLCAxOSwgJihzdGF0ZS0+bmV4dCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYoc3RhdGUtPmxlbmJpdHMpLCBzdGF0ZS0+d29yayk7CkBAIC05MjUsNyArOTQxLDYgQEAKICAgICAgICAgICAgICAgICAgICAgUFVMTEJZVEUoKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKGhlcmUudmFsIDwgMTYpIHsKLSAgICAgICAgICAgICAgICAgICAgTkVFREJJVFMoaGVyZS5iaXRzKTsKICAgICAgICAgICAgICAgICAgICAgRFJPUEJJVFMoaGVyZS5iaXRzKTsKICAgICAgICAgICAgICAgICAgICAgc3RhdGUtPmxlbnNbc3RhdGUtPmhhdmUrK10gPSBoZXJlLnZhbDsKICAgICAgICAgICAgICAgICB9CkBAIC05ODAsNyArOTk1LDcgQEAKICAgICAgICAgICAgICAgIHZhbHVlcyBoZXJlICg5IGFuZCA2KSB3aXRob3V0IHJlYWRpbmcgdGhlIGNvbW1lbnRzIGluIGluZnRyZWVzLmgKICAgICAgICAgICAgICAgIGNvbmNlcm5pbmcgdGhlIEVOT1VHSCBjb25zdGFudHMsIHdoaWNoIGRlcGVuZCBvbiB0aG9zZSB2YWx1ZXMgKi8KICAgICAgICAgICAgIHN0YXRlLT5uZXh0ID0gc3RhdGUtPmNvZGVzOwotICAgICAgICAgICAgc3RhdGUtPmxlbmNvZGUgPSAoY29kZSBjb25zdCBGQVIgKikoc3RhdGUtPm5leHQpOworICAgICAgICAgICAgc3RhdGUtPmxlbmNvZGUgPSAoY29uc3QgY29kZSBGQVIgKikoc3RhdGUtPm5leHQpOwogICAgICAgICAgICAgc3RhdGUtPmxlbmJpdHMgPSA5OwogICAgICAgICAgICAgcmV0ID0gaW5mbGF0ZV90YWJsZShMRU5TLCBzdGF0ZS0+bGVucywgc3RhdGUtPm5sZW4sICYoc3RhdGUtPm5leHQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmKHN0YXRlLT5sZW5iaXRzKSwgc3RhdGUtPndvcmspOwpAQCAtOTg5LDcgKzEwMDQsNyBAQAogICAgICAgICAgICAgICAgIHN0YXRlLT5tb2RlID0gQkFEOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgc3RhdGUtPmRpc3Rjb2RlID0gKGNvZGUgY29uc3QgRkFSICopKHN0YXRlLT5uZXh0KTsKKyAgICAgICAgICAgIHN0YXRlLT5kaXN0Y29kZSA9IChjb25zdCBjb2RlIEZBUiAqKShzdGF0ZS0+bmV4dCk7CiAgICAgICAgICAgICBzdGF0ZS0+ZGlzdGJpdHMgPSA2OwogICAgICAgICAgICAgcmV0ID0gaW5mbGF0ZV90YWJsZShESVNUUywgc3RhdGUtPmxlbnMgKyBzdGF0ZS0+bmxlbiwgc3RhdGUtPm5kaXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICYoc3RhdGUtPm5leHQpLCAmKHN0YXRlLT5kaXN0Yml0cyksIHN0YXRlLT53b3JrKTsKQEAgLTExNzAsNyArMTE4NSw3IEBACiAjaWZkZWYgR1VOWklQCiAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+ZmxhZ3MgPyBob2xkIDoKICNlbmRpZgotICAgICAgICAgICAgICAgICAgICAgUkVWRVJTRShob2xkKSkgIT0gc3RhdGUtPmNoZWNrKSB7CisgICAgICAgICAgICAgICAgICAgICBaU1dBUDMyKGhvbGQpKSAhPSBzdGF0ZS0+Y2hlY2spIHsKICAgICAgICAgICAgICAgICAgICAgc3RybS0+bXNnID0gKGNoYXIgKikiaW5jb3JyZWN0IGRhdGEgY2hlY2siOwogICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+bW9kZSA9IEJBRDsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xMjE0LDggKzEyMjksOSBAQAogICAgICAqLwogICBpbmZfbGVhdmU6CiAgICAgUkVTVE9SRSgpOwotICAgIGlmIChzdGF0ZS0+d3NpemUgfHwgKHN0YXRlLT5tb2RlIDwgQ0hFQ0sgJiYgb3V0ICE9IHN0cm0tPmF2YWlsX291dCkpCi0gICAgICAgIGlmICh1cGRhdGV3aW5kb3coc3RybSwgb3V0KSkgeworICAgIGlmIChzdGF0ZS0+d3NpemUgfHwgKG91dCAhPSBzdHJtLT5hdmFpbF9vdXQgJiYgc3RhdGUtPm1vZGUgPCBCQUQgJiYKKyAgICAgICAgICAgIChzdGF0ZS0+bW9kZSA8IENIRUNLIHx8IGZsdXNoICE9IFpfRklOSVNIKSkpCisgICAgICAgIGlmICh1cGRhdGV3aW5kb3coc3RybSwgc3RybS0+bmV4dF9vdXQsIG91dCAtIHN0cm0tPmF2YWlsX291dCkpIHsKICAgICAgICAgICAgIHN0YXRlLT5tb2RlID0gTUVNOwogICAgICAgICAgICAgcmV0dXJuIFpfTUVNX0VSUk9SOwogICAgICAgICB9CkBAIC0xMjQ5LDEzICsxMjY1LDM3IEBACiAgICAgcmV0dXJuIFpfT0s7CiB9CiAKK2ludCBaRVhQT1JUIGluZmxhdGVHZXREaWN0aW9uYXJ5KHN0cm0sIGRpY3Rpb25hcnksIGRpY3RMZW5ndGgpCit6X3N0cmVhbXAgc3RybTsKK0J5dGVmICpkaWN0aW9uYXJ5OwordUludCAqZGljdExlbmd0aDsKK3sKKyAgICBzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKnN0YXRlOworCisgICAgLyogY2hlY2sgc3RhdGUgKi8KKyAgICBpZiAoc3RybSA9PSBaX05VTEwgfHwgc3RybS0+c3RhdGUgPT0gWl9OVUxMKSByZXR1cm4gWl9TVFJFQU1fRVJST1I7CisgICAgc3RhdGUgPSAoc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICopc3RybS0+c3RhdGU7CisKKyAgICAvKiBjb3B5IGRpY3Rpb25hcnkgKi8KKyAgICBpZiAoc3RhdGUtPndoYXZlICYmIGRpY3Rpb25hcnkgIT0gWl9OVUxMKSB7CisgICAgICAgIHptZW1jcHkoZGljdGlvbmFyeSwgc3RhdGUtPndpbmRvdyArIHN0YXRlLT53bmV4dCwKKyAgICAgICAgICAgICAgICBzdGF0ZS0+d2hhdmUgLSBzdGF0ZS0+d25leHQpOworICAgICAgICB6bWVtY3B5KGRpY3Rpb25hcnkgKyBzdGF0ZS0+d2hhdmUgLSBzdGF0ZS0+d25leHQsCisgICAgICAgICAgICAgICAgc3RhdGUtPndpbmRvdywgc3RhdGUtPnduZXh0KTsKKyAgICB9CisgICAgaWYgKGRpY3RMZW5ndGggIT0gWl9OVUxMKQorICAgICAgICAqZGljdExlbmd0aCA9IHN0YXRlLT53aGF2ZTsKKyAgICByZXR1cm4gWl9PSzsKK30KKwogaW50IFpFWFBPUlQgaW5mbGF0ZVNldERpY3Rpb25hcnkoc3RybSwgZGljdGlvbmFyeSwgZGljdExlbmd0aCkKIHpfc3RyZWFtcCBzdHJtOwogY29uc3QgQnl0ZWYgKmRpY3Rpb25hcnk7CiB1SW50IGRpY3RMZW5ndGg7CiB7CiAgICAgc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICpzdGF0ZTsKLSAgICB1bnNpZ25lZCBsb25nIGlkOworICAgIHVuc2lnbmVkIGxvbmcgZGljdGlkOworICAgIGludCByZXQ7CiAKICAgICAvKiBjaGVjayBzdGF0ZSAqLwogICAgIGlmIChzdHJtID09IFpfTlVMTCB8fCBzdHJtLT5zdGF0ZSA9PSBaX05VTEwpIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKQEAgLTEyNjMsMjkgKzEzMDMsMjEgQEAKICAgICBpZiAoc3RhdGUtPndyYXAgIT0gMCAmJiBzdGF0ZS0+bW9kZSAhPSBESUNUKQogICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CiAKLSAgICAvKiBjaGVjayBmb3IgY29ycmVjdCBkaWN0aW9uYXJ5IGlkICovCisgICAgLyogY2hlY2sgZm9yIGNvcnJlY3QgZGljdGlvbmFyeSBpZGVudGlmaWVyICovCiAgICAgaWYgKHN0YXRlLT5tb2RlID09IERJQ1QpIHsKLSAgICAgICAgaWQgPSBhZGxlcjMyKDBMLCBaX05VTEwsIDApOwotICAgICAgICBpZCA9IGFkbGVyMzIoaWQsIGRpY3Rpb25hcnksIGRpY3RMZW5ndGgpOwotICAgICAgICBpZiAoaWQgIT0gc3RhdGUtPmNoZWNrKQorICAgICAgICBkaWN0aWQgPSBhZGxlcjMyKDBMLCBaX05VTEwsIDApOworICAgICAgICBkaWN0aWQgPSBhZGxlcjMyKGRpY3RpZCwgZGljdGlvbmFyeSwgZGljdExlbmd0aCk7CisgICAgICAgIGlmIChkaWN0aWQgIT0gc3RhdGUtPmNoZWNrKQogICAgICAgICAgICAgcmV0dXJuIFpfREFUQV9FUlJPUjsKICAgICB9CiAKLSAgICAvKiBjb3B5IGRpY3Rpb25hcnkgdG8gd2luZG93ICovCi0gICAgaWYgKHVwZGF0ZXdpbmRvdyhzdHJtLCBzdHJtLT5hdmFpbF9vdXQpKSB7CisgICAgLyogY29weSBkaWN0aW9uYXJ5IHRvIHdpbmRvdyB1c2luZyB1cGRhdGV3aW5kb3coKSwgd2hpY2ggd2lsbCBhbWVuZCB0aGUKKyAgICAgICBleGlzdGluZyBkaWN0aW9uYXJ5IGlmIGFwcHJvcHJpYXRlICovCisgICAgcmV0ID0gdXBkYXRld2luZG93KHN0cm0sIGRpY3Rpb25hcnkgKyBkaWN0TGVuZ3RoLCBkaWN0TGVuZ3RoKTsKKyAgICBpZiAocmV0KSB7CiAgICAgICAgIHN0YXRlLT5tb2RlID0gTUVNOwogICAgICAgICByZXR1cm4gWl9NRU1fRVJST1I7CiAgICAgfQotICAgIGlmIChkaWN0TGVuZ3RoID4gc3RhdGUtPndzaXplKSB7Ci0gICAgICAgIHptZW1jcHkoc3RhdGUtPndpbmRvdywgZGljdGlvbmFyeSArIGRpY3RMZW5ndGggLSBzdGF0ZS0+d3NpemUsCi0gICAgICAgICAgICAgICAgc3RhdGUtPndzaXplKTsKLSAgICAgICAgc3RhdGUtPndoYXZlID0gc3RhdGUtPndzaXplOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgem1lbWNweShzdGF0ZS0+d2luZG93ICsgc3RhdGUtPndzaXplIC0gZGljdExlbmd0aCwgZGljdGlvbmFyeSwKLSAgICAgICAgICAgICAgICBkaWN0TGVuZ3RoKTsKLSAgICAgICAgc3RhdGUtPndoYXZlID0gZGljdExlbmd0aDsKLSAgICB9CiAgICAgc3RhdGUtPmhhdmVkaWN0ID0gMTsKICAgICBUcmFjZXYoKHN0ZGVyciwgImluZmxhdGU6ICAgZGljdGlvbmFyeSBzZXRcbiIpKTsKICAgICByZXR1cm4gWl9PSzsKQEAgLTEzMjEsNyArMTM1Myw3IEBACiAgKi8KIGxvY2FsIHVuc2lnbmVkIHN5bmNzZWFyY2goaGF2ZSwgYnVmLCBsZW4pCiB1bnNpZ25lZCBGQVIgKmhhdmU7Ci11bnNpZ25lZCBjaGFyIEZBUiAqYnVmOworY29uc3QgdW5zaWduZWQgY2hhciBGQVIgKmJ1ZjsKIHVuc2lnbmVkIGxlbjsKIHsKICAgICB1bnNpZ25lZCBnb3Q7CkBAIC0xNDMzLDggKzE0NjUsOCBAQAogICAgIH0KIAogICAgIC8qIGNvcHkgc3RhdGUgKi8KLSAgICB6bWVtY3B5KGRlc3QsIHNvdXJjZSwgc2l6ZW9mKHpfc3RyZWFtKSk7Ci0gICAgem1lbWNweShjb3B5LCBzdGF0ZSwgc2l6ZW9mKHN0cnVjdCBpbmZsYXRlX3N0YXRlKSk7CisgICAgem1lbWNweSgodm9pZHBmKWRlc3QsICh2b2lkcGYpc291cmNlLCBzaXplb2Yoel9zdHJlYW0pKTsKKyAgICB6bWVtY3B5KCh2b2lkcGYpY29weSwgKHZvaWRwZilzdGF0ZSwgc2l6ZW9mKHN0cnVjdCBpbmZsYXRlX3N0YXRlKSk7CiAgICAgaWYgKHN0YXRlLT5sZW5jb2RlID49IHN0YXRlLT5jb2RlcyAmJgogICAgICAgICBzdGF0ZS0+bGVuY29kZSA8PSBzdGF0ZS0+Y29kZXMgKyBFTk9VR0ggLSAxKSB7CiAgICAgICAgIGNvcHktPmxlbmNvZGUgPSBjb3B5LT5jb2RlcyArIChzdGF0ZS0+bGVuY29kZSAtIHN0YXRlLT5jb2Rlcyk7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvaW5mdHJlZXMuYyBiL01vZHVsZXMvemxpYi9pbmZ0cmVlcy5jCmluZGV4IDExZTljNTIuLjQ0ZDg5Y2YgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi9pbmZ0cmVlcy5jCisrKyBiL01vZHVsZXMvemxpYi9pbmZ0cmVlcy5jCkBAIC0xLDUgKzEsNSBAQAogLyogaW5mdHJlZXMuYyAtLSBnZW5lcmF0ZSBIdWZmbWFuIHRyZWVzIGZvciBlZmZpY2llbnQgZGVjb2RpbmcKLSAqIENvcHlyaWdodCAoQykgMTk5NS0yMDEwIE1hcmsgQWRsZXIKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDEzIE1hcmsgQWRsZXIKICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKICAqLwogCkBAIC05LDcgKzksNyBAQAogI2RlZmluZSBNQVhCSVRTIDE1CiAKIGNvbnN0IGNoYXIgaW5mbGF0ZV9jb3B5cmlnaHRbXSA9Ci0gICAiIGluZmxhdGUgMS4yLjUgQ29weXJpZ2h0IDE5OTUtMjAxMCBNYXJrIEFkbGVyICI7CisgICAiIGluZmxhdGUgMS4yLjggQ29weXJpZ2h0IDE5OTUtMjAxMyBNYXJrIEFkbGVyICI7CiAvKgogICBJZiB5b3UgdXNlIHRoZSB6bGliIGxpYnJhcnkgaW4gYSBwcm9kdWN0LCBhbiBhY2tub3dsZWRnbWVudCBpcyB3ZWxjb21lCiAgIGluIHRoZSBkb2N1bWVudGF0aW9uIG9mIHlvdXIgcHJvZHVjdC4gSWYgZm9yIHNvbWUgcmVhc29uIHlvdSBjYW5ub3QKQEAgLTYyLDcgKzYyLDcgQEAKICAgICAgICAgMzUsIDQzLCA1MSwgNTksIDY3LCA4MywgOTksIDExNSwgMTMxLCAxNjMsIDE5NSwgMjI3LCAyNTgsIDAsIDB9OwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBsZXh0WzMxXSA9IHsgLyogTGVuZ3RoIGNvZGVzIDI1Ny4uMjg1IGV4dHJhICovCiAgICAgICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTcsIDE3LCAxNywgMTcsIDE4LCAxOCwgMTgsIDE4LAotICAgICAgICAxOSwgMTksIDE5LCAxOSwgMjAsIDIwLCAyMCwgMjAsIDIxLCAyMSwgMjEsIDIxLCAxNiwgNzMsIDE5NX07CisgICAgICAgIDE5LCAxOSwgMTksIDE5LCAyMCwgMjAsIDIwLCAyMCwgMjEsIDIxLCAyMSwgMjEsIDE2LCA3MiwgNzh9OwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBkYmFzZVszMl0gPSB7IC8qIERpc3RhbmNlIGNvZGVzIDAuLjI5IGJhc2UgKi8KICAgICAgICAgMSwgMiwgMywgNCwgNSwgNywgOSwgMTMsIDE3LCAyNSwgMzMsIDQ5LCA2NSwgOTcsIDEyOSwgMTkzLAogICAgICAgICAyNTcsIDM4NSwgNTEzLCA3NjksIDEwMjUsIDE1MzcsIDIwNDksIDMwNzMsIDQwOTcsIDYxNDUsCkBAIC0yMDgsOCArMjA4LDggQEAKICAgICBtYXNrID0gdXNlZCAtIDE7ICAgICAgICAgICAgLyogbWFzayBmb3IgY29tcGFyaW5nIGxvdyAqLwogCiAgICAgLyogY2hlY2sgYXZhaWxhYmxlIHRhYmxlIHNwYWNlICovCi0gICAgaWYgKCh0eXBlID09IExFTlMgJiYgdXNlZCA+PSBFTk9VR0hfTEVOUykgfHwKLSAgICAgICAgKHR5cGUgPT0gRElTVFMgJiYgdXNlZCA+PSBFTk9VR0hfRElTVFMpKQorICAgIGlmICgodHlwZSA9PSBMRU5TICYmIHVzZWQgPiBFTk9VR0hfTEVOUykgfHwKKyAgICAgICAgKHR5cGUgPT0gRElTVFMgJiYgdXNlZCA+IEVOT1VHSF9ESVNUUykpCiAgICAgICAgIHJldHVybiAxOwogCiAgICAgLyogcHJvY2VzcyBhbGwgY29kZXMgYW5kIG1ha2UgdGFibGUgZW50cmllcyAqLwpAQCAtMjc3LDggKzI3Nyw4IEBACiAKICAgICAgICAgICAgIC8qIGNoZWNrIGZvciBlbm91Z2ggc3BhY2UgKi8KICAgICAgICAgICAgIHVzZWQgKz0gMVUgPDwgY3VycjsKLSAgICAgICAgICAgIGlmICgodHlwZSA9PSBMRU5TICYmIHVzZWQgPj0gRU5PVUdIX0xFTlMpIHx8Ci0gICAgICAgICAgICAgICAgKHR5cGUgPT0gRElTVFMgJiYgdXNlZCA+PSBFTk9VR0hfRElTVFMpKQorICAgICAgICAgICAgaWYgKCh0eXBlID09IExFTlMgJiYgdXNlZCA+IEVOT1VHSF9MRU5TKSB8fAorICAgICAgICAgICAgICAgICh0eXBlID09IERJU1RTICYmIHVzZWQgPiBFTk9VR0hfRElTVFMpKQogICAgICAgICAgICAgICAgIHJldHVybiAxOwogCiAgICAgICAgICAgICAvKiBwb2ludCBlbnRyeSBpbiByb290IHRhYmxlIHRvIHN1Yi10YWJsZSAqLwpAQCAtMjg5LDM4ICsyODksMTQgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIC8qCi0gICAgICAgRmlsbCBpbiByZXN0IG9mIHRhYmxlIGZvciBpbmNvbXBsZXRlIGNvZGVzLiAgVGhpcyBsb29wIGlzIHNpbWlsYXIgdG8gdGhlCi0gICAgICAgbG9vcCBhYm92ZSBpbiBpbmNyZW1lbnRpbmcgaHVmZiBmb3IgdGFibGUgaW5kaWNlcy4gIEl0IGlzIGFzc3VtZWQgdGhhdAotICAgICAgIGxlbiBpcyBlcXVhbCB0byBjdXJyICsgZHJvcCwgc28gdGhlcmUgaXMgbm8gbG9vcCBuZWVkZWQgdG8gaW5jcmVtZW50Ci0gICAgICAgdGhyb3VnaCBoaWdoIGluZGV4IGJpdHMuICBXaGVuIHRoZSBjdXJyZW50IHN1Yi10YWJsZSBpcyBmaWxsZWQsIHRoZSBsb29wCi0gICAgICAgZHJvcHMgYmFjayB0byB0aGUgcm9vdCB0YWJsZSB0byBmaWxsIGluIGFueSByZW1haW5pbmcgZW50cmllcyB0aGVyZS4KLSAgICAgKi8KLSAgICBoZXJlLm9wID0gKHVuc2lnbmVkIGNoYXIpNjQ7ICAgICAgICAgICAgICAgIC8qIGludmFsaWQgY29kZSBtYXJrZXIgKi8KLSAgICBoZXJlLmJpdHMgPSAodW5zaWduZWQgY2hhcikobGVuIC0gZHJvcCk7Ci0gICAgaGVyZS52YWwgPSAodW5zaWduZWQgc2hvcnQpMDsKLSAgICB3aGlsZSAoaHVmZiAhPSAwKSB7Ci0gICAgICAgIC8qIHdoZW4gZG9uZSB3aXRoIHN1Yi10YWJsZSwgZHJvcCBiYWNrIHRvIHJvb3QgdGFibGUgKi8KLSAgICAgICAgaWYgKGRyb3AgIT0gMCAmJiAoaHVmZiAmIG1hc2spICE9IGxvdykgewotICAgICAgICAgICAgZHJvcCA9IDA7Ci0gICAgICAgICAgICBsZW4gPSByb290OwotICAgICAgICAgICAgbmV4dCA9ICp0YWJsZTsKLSAgICAgICAgICAgIGhlcmUuYml0cyA9ICh1bnNpZ25lZCBjaGFyKWxlbjsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIHB1dCBpbnZhbGlkIGNvZGUgbWFya2VyIGluIHRhYmxlICovCi0gICAgICAgIG5leHRbaHVmZiA+PiBkcm9wXSA9IGhlcmU7Ci0KLSAgICAgICAgLyogYmFja3dhcmRzIGluY3JlbWVudCB0aGUgbGVuLWJpdCBjb2RlIGh1ZmYgKi8KLSAgICAgICAgaW5jciA9IDFVIDw8IChsZW4gLSAxKTsKLSAgICAgICAgd2hpbGUgKGh1ZmYgJiBpbmNyKQotICAgICAgICAgICAgaW5jciA+Pj0gMTsKLSAgICAgICAgaWYgKGluY3IgIT0gMCkgewotICAgICAgICAgICAgaHVmZiAmPSBpbmNyIC0gMTsKLSAgICAgICAgICAgIGh1ZmYgKz0gaW5jcjsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgICAgICBodWZmID0gMDsKKyAgICAvKiBmaWxsIGluIHJlbWFpbmluZyB0YWJsZSBlbnRyeSBpZiBjb2RlIGlzIGluY29tcGxldGUgKGd1YXJhbnRlZWQgdG8gaGF2ZQorICAgICAgIGF0IG1vc3Qgb25lIHJlbWFpbmluZyBlbnRyeSwgc2luY2UgaWYgdGhlIGNvZGUgaXMgaW5jb21wbGV0ZSwgdGhlCisgICAgICAgbWF4aW11bSBjb2RlIGxlbmd0aCB0aGF0IHdhcyBhbGxvd2VkIHRvIGdldCB0aGlzIGZhciBpcyBvbmUgYml0KSAqLworICAgIGlmIChodWZmICE9IDApIHsKKyAgICAgICAgaGVyZS5vcCA9ICh1bnNpZ25lZCBjaGFyKTY0OyAgICAgICAgICAgIC8qIGludmFsaWQgY29kZSBtYXJrZXIgKi8KKyAgICAgICAgaGVyZS5iaXRzID0gKHVuc2lnbmVkIGNoYXIpKGxlbiAtIGRyb3ApOworICAgICAgICBoZXJlLnZhbCA9ICh1bnNpZ25lZCBzaG9ydCkwOworICAgICAgICBuZXh0W2h1ZmZdID0gaGVyZTsKICAgICB9CiAKICAgICAvKiBzZXQgcmV0dXJuIHBhcmFtZXRlcnMgKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi9pbmZ0cmVlcy5oIGIvTW9kdWxlcy96bGliL2luZnRyZWVzLmgKaW5kZXggMjQyMzBjNS4uYmFhNTNhMCAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL2luZnRyZWVzLmgKKysrIGIvTW9kdWxlcy96bGliL2luZnRyZWVzLmgKQEAgLTQxLDcgKzQxLDcgQEAKICAgIGV4YW1wbGVzL2Vub3VnaC5jIGZvdW5kIGluIHRoZSB6bGliIGRpc3RyaWJ0dXRpb24uICBUaGUgYXJndW1lbnRzIHRvIHRoYXQKICAgIHByb2dyYW0gYXJlIHRoZSBudW1iZXIgb2Ygc3ltYm9scywgdGhlIGluaXRpYWwgcm9vdCB0YWJsZSBzaXplLCBhbmQgdGhlCiAgICBtYXhpbXVtIGJpdCBsZW5ndGggb2YgYSBjb2RlLiAgImVub3VnaCAyODYgOSAxNSIgZm9yIGxpdGVyYWwvbGVuZ3RoIGNvZGVzCi0gICByZXR1cm5zIDg1MiwgYW5kICJlbm91Z2ggMzAgNiAxNSIgZm9yIGRpc3RhbmNlIGNvZGVzIHJldHVybnMgNTkyLgorICAgcmV0dXJucyByZXR1cm5zIDg1MiwgYW5kICJlbm91Z2ggMzAgNiAxNSIgZm9yIGRpc3RhbmNlIGNvZGVzIHJldHVybnMgNTkyLgogICAgVGhlIGluaXRpYWwgcm9vdCB0YWJsZSBzaXplICg5IG9yIDYpIGlzIGZvdW5kIGluIHRoZSBmaWZ0aCBhcmd1bWVudCBvZiB0aGUKICAgIGluZmxhdGVfdGFibGUoKSBjYWxscyBpbiBpbmZsYXRlLmMgYW5kIGluZmJhY2suYy4gIElmIHRoZSByb290IHRhYmxlIHNpemUgaXMKICAgIGNoYW5nZWQsIHRoZW4gdGhlc2UgbWF4aW11bSBzaXplcyB3b3VsZCBiZSBuZWVkIHRvIGJlIHJlY2FsY3VsYXRlZCBhbmQKZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi9tYWtlX3Ztcy5jb20gYi9Nb2R1bGVzL3psaWIvbWFrZV92bXMuY29tCmluZGV4IDY1NzY0OTAuLjY1ZTlkMGMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi9tYWtlX3Ztcy5jb20KKysrIGIvTW9kdWxlcy96bGliL21ha2Vfdm1zLmNvbQpAQCAtMyw3ICszLDcgQEAKICQhCiAkISBJbiBjYXNlIG9mIHByb2JsZW1zIHdpdGggdGhlIGluc3RhbGwgeW91IG1pZ2h0IGNvbnRhY3QgbWUgYXQKICQhIHppbnNlckB6aW5zZXIubm8taXAuaW5mbyhwcmVmZXJyZWQpIG9yCi0kISB6aW5zZXJAc3lzZGV2LmRldXRzY2hlLWJvZXJzZS5jb20gKHdvcmspCiskISBtYXJ0aW4uemluc2VyQGV1cmV4Y2hhbmdlLmNvbSAod29yaykKICQhCiAkISBNYWtlIHByb2NlZHVyZSBoaXN0b3J5IGZvciBabGliCiAkIQpAQCAtMTQsOSArMTQsMTYgQEAKICQhIDAuMDMgMjAwOTEyMjQgQWRkIHN1cHBvcnQgZm9yIGxhcmdlIGZpbGUgY2hlY2sKICQhIDAuMDQgMjAxMDAxMTAgQWRkIG5ldyBnemNsb3NlLCBnemxpYiwgZ3pyZWFkLCBnendyaXRlCiAkISAwLjA1IDIwMTAwMjIxIEV4Y2hhbmdlIHpsaWJkZWZzLmggYnkgemNvbmYuaC5pbgorJCEgMC4wNiAyMDEyMDExMSBGaXggbWlzc2luZyBhbWlzc19lcnIsIHVwZGF0ZSB6Y29uZl9oLmluLCBmaXggbmV3IGV4bXBsZXMKKyQhICAgICAgICAgICAgICAgc3ViZGlyIHBhdGgsIHVwZGF0ZSBtb2R1bGUgc2VhcmNoIGluIG1ha2VmaWxlLmluCiskISAwLjA3IDIwMTIwMTE1IFRyaWdnZXJlZCBieSB3b3JrIGRvbmUgYnkgQWxleGV5IENodXBhaGluIGNvbXBsZXRseSByZWRlc2lnbmVkCiskISAgICAgICAgICAgICAgIHNoYXJlZCBpbWFnZSBjcmVhdGlvbgorJCEgMC4wOCAyMDEyMDIxOSBNYWtlIGl0IHdvcmsgb24gVkFYIGFnYWluLCBwcmUtbG9hZCBtaXNzaW5nIHN5bWJvbHMgdG8gc2hhcmVkCiskISAgICAgICAgICAgICAgIGltYWdlCiskISAwLjA5IDIwMTIwMzA1IFNNUy4gIFAxIHNldHMgYnVpbGRlciAoIk1NSyIsICJNTVMiLCAiICIgKGJ1aWx0LWluKSkuCiskISAgICAgICAgICAgICAgICIiIC0+IGF1dG9tYXRpYywgcHJlZmVyZW5jZTogTU1LLCBNTVMsIGJ1aWx0LWluLgogJCEKICQgb24gZXJyb3IgdGhlbiBnb3RvIGVycl9leGl0Ci0kIHNldCBwcm9jL3BhcnNlPWV4dAogJCEKICQgdHJ1ZSAgPSAxCiAkIGZhbHNlID0gMApAQCAtMzIsMzEgKzM5LDQzIEBACiAkIQogJCEgU2V0dXAgdmFyaWFibGVzIGhvbGRpbmcgImNvbmZpZyIgaW5mb3JtYXRpb24KICQhCi0kIE1ha2UgICAgPSAiIgorJCBNYWtlICAgID0gIicncDEnIgogJCBuYW1lICAgICA9ICJabGliIgogJCB2ZXJzaW9uICA9ICI/Lj8uPyIKICQgdl9zdHJpbmcgPSAiWkxJQl9WRVJTSU9OIgogJCB2X2ZpbGUgICA9ICJ6bGliLmgiCi0kIGNjb3B0ICAgPSAiIgorJCBjY29wdCAgID0gIi9pbmNsdWRlID0gW10iCiAkIGxvcHRzICAgPSAiIgogJCBkbnNybCAgID0gIiIKLSQgYWNvbmZfaW5fZmlsZSA9ICJ6Y29uZi5oLmluI3pjb25mLmhfaW4iCiskIGFjb25mX2luX2ZpbGUgPSAiemNvbmYuaC5pbiN6Y29uZi5oX2luI3pjb25mX2guaW4iCiAkIGNvbmZfY2hlY2tfc3RyaW5nID0gIiIKICQgbGlua29ubHkgPSBmYWxzZQogJCBvcHRmaWxlICA9IG5hbWUgKyAiLm9wdCIKKyQgbWFwZmlsZSAgPSBuYW1lICsgIi5tYXAiCiAkIGxpYmRlZnMgID0gIiIKKyQgdmF4ICAgICAgPSBmJGdldHN5aSgiSFdfTU9ERUwiKS5sdC4xMDI0CiAkIGF4cCAgICAgID0gZiRnZXRzeWkoIkhXX01PREVMIikuZ2UuMTAyNCAuYW5kLiBmJGdldHN5aSgiSFdfTU9ERUwiKS5sdC40MDk2CiskIGlhNjQgICAgID0gZiRnZXRzeWkoIkhXX01PREVMIikuZ2UuNDA5NgogJCEKLSQgd2hvYW1pID0gZiRwYXJzZShmJGVudmlvcm5tZW50KCJQcm9jZWR1cmUiKSwsLCwiTk9fQ09OQ0VBTCIpCiskISAyMDEyLTAzLTA1IFNNUy4KKyQhIFdoeSBpcyB0aGlzIG5lZWRlZD8gIEFuZCBpZiBpdCBpcyBuZWVkZWQsIHdoeSBub3Qgc2ltcGx5ICIubm90LiB2YXgiPworJCEKKyQhISEgaWYgYXhwIC5vci4gaWE2NCB0aGVuICBzZXQgcHJvYy9wYXJzZT1leHRlbmRlZAorJCEKKyQgd2hvYW1pID0gZiRwYXJzZShmJGVudmlyb25tZW50KCJQcm9jZWR1cmUiKSwsLCwiTk9fQ09OQ0VBTCIpCiAkIG15ZGVmICA9IEYkcGFyc2Uod2hvYW1pLCwsIkRFVklDRSIpCiAkIG15ZGlyICA9IGYkcGFyc2Uod2hvYW1pLCwsIkRJUkVDVE9SWSIpIC0gIl1bIgogJCBteXByb2MgPSBmJHBhcnNlKHdob2FtaSwsLCJOYW1lIikgKyBmJHBhcnNlKHdob2FtaSwsLCJ0eXBlIikKICQhCiAkISBDaGVjayBmb3IgTU1LL01NUwogJCEKLSQgSWYgRiRTZWFyY2ggKCJTeXMkU3lzdGVtOk1NUy5FWEUiKSAubmVzLiAiIiBUaGVuIE1ha2UgPSAiTU1TIgotJCBJZiBGJFR5cGUgKE1NSykgLmVxcy4gIlNUUklORyIgVGhlbiBNYWtlID0gIk1NSyIKLSQhCiskIGlmIChNYWtlIC5lcXMuICIiKQorJCB0aGVuCiskICAgSWYgRiRTZWFyY2ggKCJTeXMkU3lzdGVtOk1NUy5FWEUiKSAubmVzLiAiIiBUaGVuIE1ha2UgPSAiTU1TIgorJCAgIElmIEYkVHlwZSAoTU1LKSAuZXFzLiAiU1RSSU5HIiBUaGVuIE1ha2UgPSAiTU1LIgorJCBlbHNlCiskICAgTWFrZSA9IGYkZWRpdCggTWFrZSwgInRyaW0iKQorJCBlbmRpZgogJCEKICQgZ29zdWIgZmluZF92ZXJzaW9uCiAkIQpAQCAtNjksNiArODgsNyBAQAogJCEKICQgZ29zdWIgY2hlY2tfY29tcGlsZXIKICQgY2xvc2UgdG9wdAorJCBjbG9zZSBvcHRmCiAkIQogJCBpZiBpdHNfZGVjYwogJCB0aGVuCkBAIC04Myw2ICsxMDMsMTUgQEAKICQgICAgICAgZGVmaW5lIHN5cyBkZWNjJGxpYnJhcnlfaW5jbHVkZToKICQgICAgIGVuZGlmCiAkICAgZW5kaWYKKyQhCiskISAyMDEyLTAzLTA1IFNNUy4KKyQhIFdoeSAvTkFNRVMgPSBBU19JUz8gIFdoeSBub3Qgc2ltcGx5ICIubm90LiB2YXgiPyAgQW5kIHdoeSBub3Qgb24gVkFYPworJCEKKyQgICBpZiBheHAgLm9yLiBpYTY0CiskICAgdGhlbgorJCAgICAgICBjY29wdCA9IGNjb3B0ICsgIi9uYW1lPWFzX2lzL29wdD0oaW5saW5lPXNwZWVkKSIKKyQgICAgICAgc19jYXNlID0gdHJ1ZQorJCAgIGVuZGlmCiAkIGVuZGlmCiAkIGlmIGl0c192YXhjIC5vci4gaXRzX2dudWMKICQgdGhlbgpAQCAtMTIyLDE1ICsxNTEsMjAgQEAKICQgZW5kaWYKICQgZ290byBhY29uZl9sb29wCiAkQUNPTkZfRVhJVDoKKyQgd3JpdGUgYWNvbmYgIiIKKyQgd3JpdGUgYWNvbmYgIi8qIFZNUyBzcGVjaWZpY3MgYWRkZWQgYnkgbWFrZV92bXMuY29tOiAqLyIKICQgd3JpdGUgYWNvbmYgIiNkZWZpbmUgVk1TIDEiCiAkIHdyaXRlIGFjb25mICIjaW5jbHVkZSA8dW5pc3RkLmg+IgogJCB3cml0ZSBhY29uZiAiI2luY2x1ZGUgPHVuaXhpby5oPiIKICQgd3JpdGUgYWNvbmYgIiNpZmRlZiBfTEFSR0VGSUxFIgotJCB3cml0ZSBhY29uZiAiI2RlZmluZSBvZmY2NF90IF9fb2ZmNjRfdCIKLSQgd3JpdGUgYWNvbmYgIiNkZWZpbmUgZm9wZW42NCBmb3BlbiIKLSQgd3JpdGUgYWNvbmYgIiNkZWZpbmUgZnNlZWtvNjQgZnNlZWtvIgotJCB3cml0ZSBhY29uZiAiI2RlZmluZSBsc2VlazY0IGxzZWVrIgotJCB3cml0ZSBhY29uZiAiI2RlZmluZSBmdGVsbG82NCBmdGVsbCIKKyQgd3JpdGUgYWNvbmYgIiMgZGVmaW5lIG9mZjY0X3QgX19vZmY2NF90IgorJCB3cml0ZSBhY29uZiAiIyBkZWZpbmUgZm9wZW42NCBmb3BlbiIKKyQgd3JpdGUgYWNvbmYgIiMgZGVmaW5lIGZzZWVrbzY0IGZzZWVrbyIKKyQgd3JpdGUgYWNvbmYgIiMgZGVmaW5lIGxzZWVrNjQgbHNlZWsiCiskIHdyaXRlIGFjb25mICIjIGRlZmluZSBmdGVsbG82NCBmdGVsbCIKKyQgd3JpdGUgYWNvbmYgIiNlbmRpZiIKKyQgd3JpdGUgYWNvbmYgIiNpZiAhZGVmaW5lZCggX19WQVgpICYmIChfX0NSVExfVkVSID49IDcwMzEyMDAwKSIKKyQgd3JpdGUgYWNvbmYgIiMgZGVmaW5lIEhBVkVfVlNOUFJJTlRGIgogJCB3cml0ZSBhY29uZiAiI2VuZGlmIgogJCBjbG9zZSBhY29uZl9pbgogJCBjbG9zZSBhY29uZgpAQCAtMTM5LDggKzE3Myw5IEBACiAkIQogJCB3cml0ZSBzeXMkb3V0cHV0ICJDb21waWxpbmcgWmxpYiBzb3VyY2VzIC4uLiIKICQgaWYgbWFrZS5lcXMuIiIKLSQgIHRoZW4KLSQgICBkZWxlIGV4YW1wbGUub2JqOyosbWluaWd6aXAub2JqOyoKKyQgdGhlbgorJCAgIGlmIChmJHNlYXJjaCggImV4YW1wbGUub2JqOyoiKSAubmVzLiAiIikgdGhlbiBkZWxldGUgZXhhbXBsZS5vYmo7KgorJCAgIGlmIChmJHNlYXJjaCggIm1pbmlnemlwLm9iajsqIikgLm5lcy4gIiIpIHRoZW4gZGVsZXRlIG1pbmlnemlwLm9iajsqCiAkICAgQ0FMTCBNQUtFIGFkbGVyMzIuT0JKICJDQyAnJ0NDT1BUJyBhZGxlcjMyIiAtCiAgICAgICAgICAgICAgICAgYWRsZXIzMi5jIHpsaWIuaCB6Y29uZi5oCiAkICAgQ0FMTCBNQUtFIGNvbXByZXNzLk9CSiAiQ0MgJydDQ09QVCcgY29tcHJlc3MiIC0KQEAgLTE3NCw0MSArMjA5LDM0IEBACiAkICAgd3JpdGUgc3lzJG91dHB1dCAiQnVpbGRpbmcgWmxpYiAuLi4iCiAkICAgQ0FMTCBNQUtFIGxpYnouT0xCICJsaWIvY3JlYSBsaWJ6Lm9sYiAqLm9iaiIgKi5PQkoKICQgICB3cml0ZSBzeXMkb3V0cHV0ICJCdWlsZGluZyBleGFtcGxlLi4uIgotJCAgIENBTEwgTUFLRSBleGFtcGxlLk9CSiAiQ0MgJydDQ09QVCcgZXhhbXBsZSIgLQotICAgICAgICAgICAgICAgIGV4YW1wbGUuYyB6bGliLmggemNvbmYuaAorJCAgIENBTEwgTUFLRSBleGFtcGxlLk9CSiAiQ0MgJydDQ09QVCcgWy50ZXN0XWV4YW1wbGUiIC0KKyAgICAgICAgICAgICAgICBbLnRlc3RdZXhhbXBsZS5jIHpsaWIuaCB6Y29uZi5oCiAkICAgY2FsbCBtYWtlIGV4YW1wbGUuZXhlICJMSU5LIGV4YW1wbGUsbGliei5vbGIvbGliIiBleGFtcGxlLm9iaiBsaWJ6Lm9sYgotJCAgIGlmIGYkc2VhcmNoKCJ4MTF2bXM6eHZtc3V0aWxzLm9sYiIpIC5uZXMuICIiCi0kICAgdGhlbgotJCAgICAgd3JpdGUgc3lzJG91dHB1dCAiQnVpbGRpbmcgbWluaWd6aXAuLi4iCi0kICAgICBDQUxMIE1BS0UgbWluaWd6aXAuT0JKICJDQyAnJ0NDT1BUJyBtaW5pZ3ppcCIgLQotICAgICAgICAgICAgICAgIG1pbmlnemlwLmMgemxpYi5oIHpjb25mLmgKLSQgICAgIGNhbGwgbWFrZSBtaW5pZ3ppcC5leGUgLQotICAgICAgICAgICAgICAgICJMSU5LIG1pbmlnemlwLGxpYnoub2xiL2xpYix4MTF2bXM6eHZtc3V0aWxzLm9sYi9saWIiIC0KLSAgICAgICAgICAgICAgICBtaW5pZ3ppcC5vYmogbGliei5vbGIKLSQgICBlbmRpZgotJCAgZWxzZQorJCAgIHdyaXRlIHN5cyRvdXRwdXQgIkJ1aWxkaW5nIG1pbmlnemlwLi4uIgorJCAgIENBTEwgTUFLRSBtaW5pZ3ppcC5PQkogIkNDICcnQ0NPUFQnIFsudGVzdF1taW5pZ3ppcCIgLQorICAgICAgICAgICAgICBbLnRlc3RdbWluaWd6aXAuYyB6bGliLmggemNvbmYuaAorJCAgIGNhbGwgbWFrZSBtaW5pZ3ppcC5leGUgLQorICAgICAgICAgICAgICAiTElOSyBtaW5pZ3ppcCxsaWJ6Lm9sYi9saWIiIC0KKyAgICAgICAgICAgICAgbWluaWd6aXAub2JqIGxpYnoub2xiCiskIGVsc2UKICQgICBnb3N1YiBjcmVhX21tcwogJCAgIHdyaXRlIHN5cyRvdXRwdXQgIk1ha2UgJyduYW1lJyAnJ3ZlcnNpb24nIHdpdGggJydNYWtlJyAiCiAkICAgJ21ha2UnCi0kICBlbmRpZgotJCEKLSQhIEFscGhhIGdldHMgYSBzaGFyZWFibGUgaW1hZ2UKLSQhCi0kIElmIGF4cAotJCBUaGVuCi0kICAgZ29zdWIgY3JlYV9vbGlzdAotJCAgIHdyaXRlIHN5cyRvdXRwdXQgIkNyZWF0aW5nIGxpYnpzaHIuZXhlIgotJCAgIGNhbGwgYW5hbF9vYmpfYXhwIG1vZHVsZXMub3B0IF9saW5rLm9wdAotJCAgIGlmIHNfY2FzZQotJCAgIHRoZW4KLSQgICAgICBvcGVuL2FwcGVuZCBvcHRmIG1vZHVsZXMub3B0Ci0kICAgICAgd3JpdGUgb3B0ZiAiY2FzZV9zZW5zaXRpdmU9WUVTIgotJCAgICAgIGNsb3NlIG9wdGYKLSQgICBlbmRpZgotJCAgIExJTktfJ2xvcHRzJy9TSEFSRT1saWJ6c2hyLmV4ZSBtb2R1bGVzLm9wdC9vcHQsX2xpbmsub3B0L29wdAogJCBlbmRpZgorJCEKKyQhIENyZWF0ZSBzaGFyZWFibGUgaW1hZ2UKKyQhCiskIGdvc3ViIGNyZWFfb2xpc3QKKyQgd3JpdGUgc3lzJG91dHB1dCAiQ3JlYXRpbmcgbGlienNoci5leGUiCiskIGNhbGwgbWFwXzJfc2hvcHQgJ21hcGZpbGUnICdvcHRmaWxlJworJCBMSU5LXydsb3B0cycvU0hBUkU9bGlienNoci5leGUgbW9kdWxlcy5vcHQvb3B0LCdvcHRmaWxlJy9vcHQKICQgd3JpdGUgc3lzJG91dHB1dCAiWmxpYiBidWlsZCBjb21wbGV0ZWQiCiskIGRlbGV0ZS9ub2xvZyB0bXAub3B0OyoKICQgZXhpdAorJEFNSVNTX0VSUjoKKyQgd3JpdGUgc3lzJG91dHB1dCAiTm8gc291cmNlIGZvciBjb25maWcuaGluIGZvdW5kLiIKKyQgd3JpdGUgc3lzJG91dHB1dCAiVHJpZWQgYW55IG9mICcnYWNvbmZfaW5fZmlsZSciCiskIGdvdG8gZXJyX2V4aXQKICRDQ19FUlI6CiAkIHdyaXRlIHN5cyRvdXRwdXQgIkMgY29tcGlsZXIgcmVxdWlyZWQgdG8gYnVpbGQgJyduYW1lJyIKICQgZ290byBlcnJfZXhpdApAQCAtMjE2LDcgKzI0NCw2IEBACiAkIHNldCBtZXNzYWdlL2ZhY2lsL2lkZW50L3NldmVyL3RleHQKICQgY2xvc2Uvbm9sb2cgb3B0ZgogJCBjbG9zZS9ub2xvZyB0b3B0Ci0kIGNsb3NlL25vbG9nIGNvbmZfaGluCiAkIGNsb3NlL25vbG9nIGFjb25mX2luCiAkIGNsb3NlL25vbG9nIGFjb25mCiAkIGNsb3NlL25vbG9nIG91dApAQCAtMzk3LDcgKzQyNCw3IEBACiAkIGRlY2sKICMgZGVzY3JpcC5tbXM6IE1NUyBkZXNjcmlwdGlvbiBmaWxlIGZvciBidWlsZGluZyB6bGliIG9uIFZNUwogIyB3cml0dGVuIGJ5IE1hcnRpbiBQLkouIFppbnNlcgotIyA8emluc2VyQHppbnNlci5uby1pcC5pbmZvIG9yIHppbnNlckBzeXNkZXYuZGV1dHNjaGUtYm9lcnNlLmNvbT4KKyMgPHppbnNlckB6aW5zZXIubm8taXAuaW5mbyBvciBtYXJ0aW4uemluc2VyQGV1cmV4Y2hhbmdlLmNvbT4KIAogT0JKUyA9IGFkbGVyMzIub2JqLCBjb21wcmVzcy5vYmosIGNyYzMyLm9iaiwgZ3pjbG9zZS5vYmosIGd6bGliLm9ialwKICAgICAgICBnenJlYWQub2JqLCBnendyaXRlLm9iaiwgdW5jb21wci5vYmosIGluZmJhY2sub2JqXApAQCAtNDA3LDEwICs0MzQsOSBAQAogJCBlb2QKICQgd3JpdGUgb3V0ICJDRkxBR1M9IiwgY2NvcHQKICQgd3JpdGUgb3V0ICJMT1BUUz0iLCBsb3B0cworJCB3cml0ZSBvdXQgImFsbCA6IGV4YW1wbGUuZXhlIG1pbmlnemlwLmV4ZSBsaWJ6Lm9sYiIKICQgY29weSBzeXMkaW5wdXQ6IG91dAogJCBkZWNrCi0KLWFsbCA6IGV4YW1wbGUuZXhlIG1pbmlnemlwLmV4ZSBsaWJ6Lm9sYgogICAgICAgICBAIHdyaXRlIHN5cyRvdXRwdXQgIiBFeGFtcGxlIGFwcGxpY2F0aW9ucyBhdmFpbGFibGUiCiAKIGxpYnoub2xiIDogbGliei5vbGIoJChPQkpTKSkKQEAgLTQyMCw3ICs0NDYsNyBAQAogICAgICAgICAgICAgICBsaW5rICQoTE9QVFMpIGV4YW1wbGUsbGliei5vbGIvbGliCiAKIG1pbmlnemlwLmV4ZSA6IG1pbmlnemlwLm9iaiBsaWJ6Lm9sYgotICAgICAgICAgICAgICBsaW5rICQoTE9QVFMpIG1pbmlnemlwLGxpYnoub2xiL2xpYix4MTF2bXM6eHZtc3V0aWxzLm9sYi9saWIKKyAgICAgICAgICAgICAgbGluayAkKExPUFRTKSBtaW5pZ3ppcCxsaWJ6Lm9sYi9saWIKIAogY2xlYW4gOgogCWRlbGV0ZSAqLm9iajsqLGxpYnoub2xiOyosKi5vcHQ7KiwqLmV4ZTsqCkBAIC00MzEsNyArNDU3LDcgQEAKIGNvbXByZXNzLm9iaiA6IGNvbXByZXNzLmMgemxpYi5oIHpjb25mLmgKIGNyYzMyLm9iaiAgICA6IGNyYzMyLmMgenV0aWwuaCB6bGliLmggemNvbmYuaAogZGVmbGF0ZS5vYmogIDogZGVmbGF0ZS5jIGRlZmxhdGUuaCB6dXRpbC5oIHpsaWIuaCB6Y29uZi5oCi1leGFtcGxlLm9iaiAgOiBleGFtcGxlLmMgemxpYi5oIHpjb25mLmgKK2V4YW1wbGUub2JqICA6IFsudGVzdF1leGFtcGxlLmMgemxpYi5oIHpjb25mLmgKIGd6Y2xvc2Uub2JqICA6IGd6Y2xvc2UuYyB6dXRpbC5oIHpsaWIuaCB6Y29uZi5oCiBnemxpYi5vYmogICAgOiBnemxpYi5jIHp1dGlsLmggemxpYi5oIHpjb25mLmgKIGd6cmVhZC5vYmogICA6IGd6cmVhZC5jIHp1dGlsLmggemxpYi5oIHpjb25mLmgKQEAgLTQzOSw3ICs0NjUsNyBAQAogaW5mZmFzdC5vYmogIDogaW5mZmFzdC5jIHp1dGlsLmggemxpYi5oIHpjb25mLmggaW5mdHJlZXMuaCBpbmZmYXN0LmgKIGluZmxhdGUub2JqICA6IGluZmxhdGUuYyB6dXRpbC5oIHpsaWIuaCB6Y29uZi5oCiBpbmZ0cmVlcy5vYmogOiBpbmZ0cmVlcy5jIHp1dGlsLmggemxpYi5oIHpjb25mLmggaW5mdHJlZXMuaAotbWluaWd6aXAub2JqIDogbWluaWd6aXAuYyB6bGliLmggemNvbmYuaAorbWluaWd6aXAub2JqIDogWy50ZXN0XW1pbmlnemlwLmMgemxpYi5oIHpjb25mLmgKIHRyZWVzLm9iaiAgICA6IHRyZWVzLmMgZGVmbGF0ZS5oIHp1dGlsLmggemxpYi5oIHpjb25mLmgKIHVuY29tcHIub2JqICA6IHVuY29tcHIuYyB6bGliLmggemNvbmYuaAogenV0aWwub2JqICAgIDogenV0aWwuYyB6dXRpbC5oIHpsaWIuaCB6Y29uZi5oCkBAIC00NTUsMTMgKzQ4MSwxOCBAQAogJENSRUFfT0xJU1Q6CiAkIG9wZW4vcmVhZCBtaW4gbWFrZWZpbGUuaW4KICQgb3Blbi93cml0ZSBtb2QgbW9kdWxlcy5vcHQKLSQgc3JjX2NoZWNrID0gIk9CSkMgPSIKKyQgc3JjX2NoZWNrX2xpc3QgPSAiT0JKWiA9I09CSkcgPSIKICRNUkxPT1A6CiAkIHJlYWQvZW5kPW1yZG9uZSBtaW4gcmVjCi0kIGlmIChmJGV4dHJhY3QoMCw2LHJlYykgLm5lcy4gc3JjX2NoZWNrKSB0aGVuIGdvdG8gbXJsb29wCiskIGkgPSAwCiskU1JDX0NIRUNLX0xPT1A6CiskIHNyY19jaGVjayA9IGYkZWxlbWVudChpLCAiIyIsIHNyY19jaGVja19saXN0KQorJCBpID0gaSsxCiskIGlmIHNyY19jaGVjayAuZXFzLiAiIyIgdGhlbiBnb3RvIG1ybG9vcAorJCBpZiAoZiRleHRyYWN0KDAsNixyZWMpIC5uZXMuIHNyY19jaGVjaykgdGhlbiBnb3RvIHNyY19jaGVja19sb29wCiAkIHJlYyA9IHJlYyAtIHNyY19jaGVjawogJCBnb3N1YiBleHRyYV9maWxuYW0KLSQgaWYgKGYkZWxlbWVudCgxLCJcIixyZWMpIC5lcXMuICJcIikgdGhlbiBnb3RvIG1yZG9uZQorJCBpZiAoZiRlbGVtZW50KDEsIlwiLHJlYykgLmVxcy4gIlwiKSB0aGVuIGdvdG8gbXJsb29wCiAkTVJTTE9PUDoKICQgcmVhZC9lbmQ9bXJkb25lIG1pbiByZWMKICQgZ29zdWIgZXh0cmFfZmlsbmFtCkBAIC02NzIsMTI0ICs3MDMsNiBAQAogJCByZXR1cm4KICQhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAkIQotJCEgQW5hbHl6ZSBPYmplY3QgZmlsZXMgZm9yIE9wZW5WTVMgQVhQIHRvIGV4dHJhY3QgUHJvY2VkdXJlIGFuZCBEYXRhCi0kISBpbmZvcm1hdGlvbiB0byBidWlsZCBhIHN5bWJvbCB2ZWN0b3IgZm9yIGEgc2hhcmVhYmxlIGltYWdlCi0kISBBbGwgdGhlICJicmFpbnMiIG9mIHRoaXMgbG9naWMgd2FzIHN1Z2dlc3RlZCBieSBIYXJ0bXV0IEJlY2tlcgotJCEgKEhhcnRtdXQuQmVja2VyQGNvbXBhcS5jb20pLiBBbGwgdGhlIGJ1Z3Mgd2VyZSBpbnRyb2R1Y2VkIGJ5IG1lCi0kISAoemluc2VyQHppbnNlci5uby1pcC5pbmZvKSwgc28gaWYgeW91IGRvIGhhdmUgcHJvYmxlbSByZXBvcnRzIHBsZWFzZSBkbyBub3QKLSQhIGJvdGhlciBIYXJ0bXV0L0hQLCBidXQgZ2V0IGluIHRvdWNoIHdpdGggbWUKLSQhCi0kISBWZXJzaW9uIGhpc3RvcnkKLSQhIDAuMDEgMjAwNDA0MDYgU2tpcCBvdmVyIHNoYXJlYWJsZSBpbWFnZXMgaW4gb3B0aW9uIGZpbGUKLSQhIDAuMDIgMjAwNDExMDkgRml4IG9wdGlvbiBmaWxlIGZvciBzaGFyZWFibGUgaW1hZ2VzIHdpdGggY2FzZV9zZW5zaXRpdmU9WUVTCi0kISAwLjAzIDIwMDUwMTA3IFNraXAgb3ZlciBJZGVudGlmaWNhdGlvbiBsYWJlbHMgaW4gb3B0aW9uIGZpbGUKLSQhIDAuMDQgMjAwNjAxMTcgQWRkIHVwcGVyY2FzZSBhbGlhcyB0byBjb2RlIGNvbXBpbGVkIHdpdGggL25hbWU9YXNfaXMKLSQhCi0kIEFOQUxfT0JKX0FYUDogU3Vicm91dGluZQotJCBWID0gJ0YkVmVyaWZ5KDApCi0kIFNBWSA6PSAiV1JJVEVfIFNZUyRPVVRQVVQiCi0kCi0kIElGIEYkU0VBUkNIKCInJ1AxJyIpIC5FUVMuICIiCi0kIFRIRU4KLSQgICAgU0FZICJBTkFMX09CSl9BWFAtRS1OT1NVQ0hGSUxFOiAgRXJyb3IsIGlucHV0ZmlsZSAnJ3AxJyBub3QgYXZhaWxhYmxlIgotJCAgICBnb3RvIGV4aXRfYWEKLSQgRU5ESUYKLSQgSUYgIicnUDInIiAuRVFTLiAiIgotJCBUSEVOCi0kICAgIFNBWSAiQU5BTF9PQkpfQVhQOiAgRXJyb3IsIG5vIG91dHB1dCBmaWxlIHByb3ZpZGVkIgotJCAgICBnb3RvIGV4aXRfYWEKLSQgRU5ESUYKLSQKLSQgb3Blbi9yZWFkIGluICdwMQotJCBjcmVhdGUgYS50bXAKLSQgb3Blbi9hcHBlbmQgYXRtcCBhLnRtcAotJCBsb29wOgotJCByZWFkL2VuZD1lbmRfbG9vcCBpbiBsaW5lCi0kIGlmIGYkbG9jYXRlKCIvU0hBUkUiLGYkZWRpdChsaW5lLCJ1cGNhc2UiKSkgLmx0LiBmJGxlbmd0aChsaW5lKQotJCB0aGVuCi0kICAgd3JpdGUgc3lzJG91dHB1dCAiQU5BTF9TS1BfU0hSLWktc2tpcHNoYXJlLCAnJ2xpbmUnIgotJCAgIGdvdG8gbG9vcAotJCBlbmRpZgotJCBpZiBmJGxvY2F0ZSgiSURFTlRJRklDQVRJT049IixmJGVkaXQobGluZSwidXBjYXNlIikpIC5sdC4gZiRsZW5ndGgobGluZSkKLSQgdGhlbgotJCAgIHdyaXRlIHN5cyRvdXRwdXQgIkFOQUxfT0JKX0FYUC1pLWlkZW50OiBJZGVudGlmaWNhdGlvbiAiLCAtCi0gICAgICAgICAgICAgICAgICAgICBmJGVsZW1lbnQoMSwiPSIsbGluZSkKLSQgICBnb3RvIGxvb3AKLSQgZW5kaWYKLSQgZj0gZiRzZWFyY2gobGluZSkKLSQgaWYgZiAuZXFzLiAiIgotJCB0aGVuCi0kCXdyaXRlIHN5cyRvdXRwdXQgIkFOQUxfT0JKX0FYUC13LW5vc3VjaGZpbGUsICcnbGluZSciCi0kCWdvdG8gbG9vcAotJCBlbmRpZgotJCBkZWZpbmUvdXNlciBzeXMkb3V0cHV0IG5sOgotJCBkZWZpbmUvdXNlciBzeXMkZXJyb3Igbmw6Ci0kIGFuYWwvb2JqL2dzZCAnZiAvb3V0PXgudG1wCi0kIG9wZW4vcmVhZCB4dG1wIHgudG1wCi0kIFhMT09QOgotJCByZWFkL2VuZD1lbmRfeGxvb3AgeHRtcCB4bGluZQotJCB4bGluZSA9IGYkZWRpdCh4bGluZSwiY29tcHJlc3MiKQotJCB3cml0ZSBhdG1wIHhsaW5lCi0kIGdvdG8geGxvb3AKLSQgRU5EX1hMT09QOgotJCBjbG9zZSB4dG1wCi0kIGdvdG8gbG9vcAotJCBlbmRfbG9vcDoKLSQgY2xvc2UgaW4KLSQgY2xvc2UgYXRtcAotJCBpZiBmJHNlYXJjaCgiYS50bXAiKSAuZXFzLiAiIiAtCi0JdGhlbiAkIGV4aXQKLSQgISBhbGwgZ2xvYmFsIGRlZmluaXRpb25zCi0kIHNlYXJjaCBhLnRtcCAic3ltYm9sOiIsIkVHU1kkVl9ERUYgMSIsIkVHU1kkVl9OT1JNIDEiL291dD1iLnRtcAotJCAhIGFsbCBwcm9jZWR1cmVzCi0kIHNlYXJjaCBiLnRtcCAiRUdTWSRWX05PUk0gMSIvd2luZD0oMCwxKSAvb3V0PWMudG1wCi0kIHNlYXJjaCBjLnRtcCAic3ltYm9sOiIvb3V0PWQudG1wCi0kIGRlZmluZS91c2VyIHN5cyRvdXRwdXQgbmw6Ci0kIGVkaXRvL2VkdC9jb21tYW5kPXN5cyRpbnB1dCBkLnRtcAotc3ViL3N5bWJvbDogIi9zeW1ib2xfdmVjdG9yPSgvd2hvbGUKLXN1Yi8iLz1QUk9DRURVUkUpL3dob2xlCi1leGl0Ci0kICEgYWxsIGRhdGEKLSQgc2VhcmNoIGIudG1wICJFR1NZJFZfREVGIDEiL3dpbmQ9KDAsMSkgL291dD1lLnRtcAotJCBzZWFyY2ggZS50bXAgInN5bWJvbDoiL291dD1mLnRtcAotJCBkZWZpbmUvdXNlciBzeXMkb3V0cHV0IG5sOgotJCBlZGl0by9lZHQvY29tbWFuZD1zeXMkaW5wdXQgZi50bXAKLXN1Yi9zeW1ib2w6ICIvc3ltYm9sX3ZlY3Rvcj0oL3dob2xlCi1zdWIvIi89REFUQSkvd2hvbGUKLWV4aXQKLSQgc29ydC9ub2R1cGwgZC50bXAsZi50bXAgZy50bXAKLSQgb3Blbi9yZWFkIHJhd192ZWN0b3IgZy50bXAKLSQgb3Blbi93cml0ZSBjYXNlX3ZlY3RvciAncDInCi0kIFJBV0xPT1A6Ci0kIHJlYWQvZW5kPWVuZF9yYXdsb29wIHJhd192ZWN0b3IgcmF3X2VsZW1lbnQKLSQgd3JpdGUgY2FzZV92ZWN0b3IgcmF3X2VsZW1lbnQKLSQgaWYgZiRsb2NhdGUoIj1QUk9DRURVUkUpIixyYXdfZWxlbWVudCkgLmx0LiBmJGxlbmd0aChyYXdfZWxlbWVudCkKLSQgdGhlbgotJCAgICAgbmFtZSA9IGYkZWxlbWVudCgxLCI9IixyYXdfZWxlbWVudCkgLSAiKCIKLSQgICAgIGlmIGYkZWRpdChuYW1lLCJVUENBU0UiKSAubmVzLiBuYW1lIHRoZW4gLQotICAgICAgICAgIHdyaXRlIGNhc2VfdmVjdG9yIGYkZmFvKCIgc3ltYm9sX3ZlY3Rvcj0oIUFTLyFBUz1QUk9DRURVUkUpIiwgLQotCSAgICAgICAgICAgICAgICAgICAgICAgICAgZiRlZGl0KG5hbWUsIlVQQ0FTRSIpLCBuYW1lKQotJCBlbmRpZgotJCBpZiBmJGxvY2F0ZSgiPURBVEEpIixyYXdfZWxlbWVudCkgLmx0LiBmJGxlbmd0aChyYXdfZWxlbWVudCkKLSQgdGhlbgotJCAgICAgbmFtZSA9IGYkZWxlbWVudCgxLCI9IixyYXdfZWxlbWVudCkgLSAiKCIKLSQgICAgIGlmIGYkZWRpdChuYW1lLCJVUENBU0UiKSAubmVzLiBuYW1lIHRoZW4gLQotICAgICAgICAgIHdyaXRlIGNhc2VfdmVjdG9yIGYkZmFvKCIgc3ltYm9sX3ZlY3Rvcj0oIUFTLyFBUz1EQVRBKSIsIC0KLQkgICAgICAgICAgICAgICAgICAgICAgICAgIGYkZWRpdChuYW1lLCJVUENBU0UiKSwgbmFtZSkKLSQgZW5kaWYKLSQgZ290byByYXdsb29wCi0kIEVORF9SQVdMT09QOgotJCBjbG9zZSByYXdfdmVjdG9yCi0kIGNsb3NlIGNhc2VfdmVjdG9yCi0kIGRlbGV0ZSBhLnRtcDsqLGIudG1wOyosYy50bXA7KixkLnRtcDsqLGUudG1wOyosZi50bXA7KixnLnRtcDsqCi0kIGlmIGYkc2VhcmNoKCJ4LnRtcCIpIC5uZXMuICIiIC0KLQl0aGVuICQgZGVsZXRlIHgudG1wOyoKLSQhCi0kIEVYSVRfQUE6Ci0kIGlmIFYgdGhlbiBzZXQgdmVyaWZ5Ci0kIGVuZHN1YnJvdXRpbmUKLSQhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0kIQogJCEgV3JpdGUgY29uZmlndXJhdGlvbiB0byBib3RoIHBlcm1hbmVudCBhbmQgdGVtcG9yYXJ5IGNvbmZpZyBmaWxlCiAkIQogJCEgVmVyc2lvbiBoaXN0b3J5CkBAIC04MDIsMyArNzE1LDE1MyBAQAogJCAgY2xvc2UgY29uZmgKICRFTkRTVUJST1VUSU5FCiAkIS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCEKKyQhIEFuYWx5emUgdGhlIHByb2plY3QgbWFwIGZpbGUgYW5kIGNyZWF0ZSB0aGUgc3ltYm9sIHZlY3RvciBmb3IgYSBzaGFyZWFibGUKKyQhIGltYWdlIGZyb20gaXQKKyQhCiskISBWZXJzaW9uIGhpc3RvcnkKKyQhIDAuMDEgMjAxMjAxMjggRmlyc3QgdmVyc2lvbgorJCEgMC4wMiAyMDEyMDIyNiBBZGQgcHJlLWxvYWQgbG9naWMKKyQhCiskIE1BUF8yX1NIT1BUOiBTdWJyb3V0aW5lCiskIQorJCBTQVkgOj0gIldSSVRFXyBTWVMkT1VUUFVUIgorJCEKKyQgSUYgRiRTRUFSQ0goIicnUDEnIikgLkVRUy4gIiIKKyQgVEhFTgorJCAgICBTQVkgIk1BUF8yX1NIT1BULUUtTk9TVUNIRklMRTogIEVycm9yLCBpbnB1dGZpbGUgJydwMScgbm90IGF2YWlsYWJsZSIKKyQgICAgZ290byBleGl0X20ycworJCBFTkRJRgorJCBJRiAiJydQMiciIC5FUVMuICIiCiskIFRIRU4KKyQgICAgU0FZICJNQVBfMl9TSE9QVDogIEVycm9yLCBubyBvdXRwdXQgZmlsZSBwcm92aWRlZCIKKyQgICAgZ290byBleGl0X20ycworJCBFTkRJRgorJCEKKyQgbW9kdWxlMSA9ICJkZWZsYXRlI2RlZmxhdGVFbmQjZGVmbGF0ZUluaXRfI2RlZmxhdGVQYXJhbXMjZGVmbGF0ZVNldERpY3Rpb25hcnkiCiskIG1vZHVsZTIgPSAiZ3pjbG9zZSNnemVycm9yI2d6Z2V0YyNnemdldHMjZ3pvcGVuI2d6cHJpbnRmI2d6cHV0YyNnenB1dHMjZ3pyZWFkIgorJCBtb2R1bGUzID0gImd6c2VlayNnenRlbGwjaW5mbGF0ZSNpbmZsYXRlRW5kI2luZmxhdGVJbml0XyNpbmZsYXRlU2V0RGljdGlvbmFyeSIKKyQgbW9kdWxlNCA9ICJpbmZsYXRlU3luYyN1bmNvbXByZXNzI3psaWJWZXJzaW9uI2NvbXByZXNzIgorJCBvcGVuL3JlYWQgbWFwICdwMQorJCBpZiBheHAgLm9yLiBpYTY0CiskIHRoZW4KKyQgICAgIG9wZW4vd3JpdGUgYW9wdCBhLm9wdAorJCAgICAgb3Blbi93cml0ZSBib3B0IGIub3B0CiskICAgICB3cml0ZSBhb3B0ICIgQ0FTRV9TRU5TSVRJVkU9WUVTIgorJCAgICAgd3JpdGUgYm9wdCAiU1lNQk9MX1ZFQ1RPUj0gKC0iCiskICAgICBtb2Rfc3ltX251bSA9IDEKKyQgTU9EX1NZTV9MT09QOgorJCAgICAgaWYgZiR0eXBlKG1vZHVsZSdtb2Rfc3ltX251bScpIC5uZXMuICIiCiskICAgICB0aGVuCiskICAgICAgICAgbW9kX2luID0gMAorJCBNT0RfU1lNX0lOOgorJCAgICAgICAgIHNoYXJlZF9wcm9jID0gZiRlbGVtZW50KG1vZF9pbiwgIiMiLCBtb2R1bGUnbW9kX3N5bV9udW0nKQorJCAgICAgICAgIGlmIHNoYXJlZF9wcm9jIC5uZXMuICIjIgorJCAgICAgICAgIHRoZW4KKyQgICAgICAgICAgICAgd3JpdGUgYW9wdCBmJGZhbygiIHN5bWJvbF92ZWN0b3I9KCFBUy8hQVM9UFJPQ0VEVVJFKSIsLQorICAgICAgICAJCSAgICAgICBmJGVkaXQoc2hhcmVkX3Byb2MsInVwY2FzZSIpLHNoYXJlZF9wcm9jKQorJCAgICAgICAgICAgICB3cml0ZSBib3B0IGYkZmFvKCIhQVM9UFJPQ0VEVVJFLC0iLHNoYXJlZF9wcm9jKQorJCAgICAgICAgICAgICBtb2RfaW4gPSBtb2RfaW4gKyAxCiskICAgICAgICAgICAgIGdvdG8gbW9kX3N5bV9pbgorJCAgICAgICAgIGVuZGlmCiskICAgICAgICAgbW9kX3N5bV9udW0gPSBtb2Rfc3ltX251bSArIDEKKyQgICAgICAgICBnb3RvIG1vZF9zeW1fbG9vcAorJCAgICAgZW5kaWYKKyRNQVBfTE9PUDoKKyQgICAgIHJlYWQvZW5kPW1hcF9lbmQgbWFwIGxpbmUKKyQgICAgIGlmIChmJGxvY2F0ZSgieyIsbGluZSkubHQuIGYkbGVuZ3RoKGxpbmUpKSAub3IuIC0KKyAgICAgICAgIChmJGxvY2F0ZSgiZ2xvYmFsOiIsIGxpbmUpIC5sdC4gZiRsZW5ndGgobGluZSkpCiskICAgICB0aGVuCiskICAgICAgICAgcHJvYyA9IHRydWUKKyQgICAgICAgICBnb3RvIG1hcF9sb29wCiskICAgICBlbmRpZgorJCAgICAgaWYgZiRsb2NhdGUoIn0iLGxpbmUpLmx0LiBmJGxlbmd0aChsaW5lKSB0aGVuIHByb2MgPSBmYWxzZQorJCAgICAgaWYgZiRsb2NhdGUoImxvY2FsOiIsIGxpbmUpIC5sdC4gZiRsZW5ndGgobGluZSkgdGhlbiBwcm9jID0gZmFsc2UKKyQgICAgIGlmIHByb2MKKyQgICAgIHRoZW4KKyQgICAgICAgICBzaGFyZWRfcHJvYyA9IGYkZWRpdChsaW5lLCJjb2xsYXBzZSIpCiskICAgICAgICAgY2hvcF9zZW1pID0gZiRsb2NhdGUoIjsiLCBzaGFyZWRfcHJvYykKKyQgICAgICAgICBpZiBjaG9wX3NlbWkgLmx0LiBmJGxlbmd0aChzaGFyZWRfcHJvYykgdGhlbiAtCisgICAgICAgICAgICAgIHNoYXJlZF9wcm9jID0gZiRleHRyYWN0KDAsIGNob3Bfc2VtaSwgc2hhcmVkX3Byb2MpCiskICAgICAgICAgd3JpdGUgYW9wdCBmJGZhbygiIHN5bWJvbF92ZWN0b3I9KCFBUy8hQVM9UFJPQ0VEVVJFKSIsLQorICAgICAgICAJCQkgZiRlZGl0KHNoYXJlZF9wcm9jLCJ1cGNhc2UiKSxzaGFyZWRfcHJvYykKKyQgICAgICAgICB3cml0ZSBib3B0IGYkZmFvKCIhQVM9UFJPQ0VEVVJFLC0iLHNoYXJlZF9wcm9jKQorJCAgICAgZW5kaWYKKyQgICAgIGdvdG8gbWFwX2xvb3AKKyRNQVBfRU5EOgorJCAgICAgY2xvc2Uvbm9sb2cgYW9wdAorJCAgICAgY2xvc2Uvbm9sb2cgYm9wdAorJCAgICAgb3Blbi9hcHBlbmQgbGlib3B0ICdwMicKKyQgICAgIG9wZW4vcmVhZCBhb3B0IGEub3B0CiskICAgICBvcGVuL3JlYWQgYm9wdCBiLm9wdAorJEFMT09QOgorJCAgICAgcmVhZC9lbmQ9YWxvb3BfZW5kIGFvcHQgbGluZQorJCAgICAgd3JpdGUgbGlib3B0IGxpbmUKKyQgICAgIGdvdG8gYWxvb3AKKyRBTE9PUF9FTkQ6CiskICAgICBjbG9zZS9ub2xvZyBhb3B0CiskICAgICBzdiA9ICIiCiskQkxPT1A6CiskICAgICByZWFkL2VuZD1ibG9vcF9lbmQgYm9wdCBzdm4KKyQgICAgIGlmIChzdm4ubmVzLiIiKQorJCAgICAgdGhlbgorJCAgICAgICAgaWYgKHN2Lm5lcy4iIikgdGhlbiB3cml0ZSBsaWJvcHQgc3YKKyQgICAgICAgIHN2ID0gc3ZuCiskICAgICBlbmRpZgorJCAgICAgZ290byBibG9vcAorJEJMT09QX0VORDoKKyQgICAgIHdyaXRlIGxpYm9wdCBmJGV4dHJhY3QoMCxmJGxlbmd0aChzdiktMixzdiksICItIgorJCAgICAgd3JpdGUgbGlib3B0ICIpIgorJCAgICAgY2xvc2Uvbm9sb2cgYm9wdAorJCAgICAgZGVsZXRlL25vbG9nL25vY29uZiBhLm9wdDsqLGIub3B0OyoKKyQgZWxzZQorJCAgICAgaWYgdmF4CiskICAgICB0aGVuCiskICAgICBvcGVuL2FwcGVuZCBsaWJvcHQgJ3AyJworJCAgICAgbW9kX3N5bV9udW0gPSAxCiskIFZNT0RfU1lNX0xPT1A6CiskICAgICBpZiBmJHR5cGUobW9kdWxlJ21vZF9zeW1fbnVtJykgLm5lcy4gIiIKKyQgICAgIHRoZW4KKyQgICAgICAgICBtb2RfaW4gPSAwCiskIFZNT0RfU1lNX0lOOgorJCAgICAgICAgIHNoYXJlZF9wcm9jID0gZiRlbGVtZW50KG1vZF9pbiwgIiMiLCBtb2R1bGUnbW9kX3N5bV9udW0nKQorJCAgICAgICAgIGlmIHNoYXJlZF9wcm9jIC5uZXMuICIjIgorJCAgICAgICAgIHRoZW4KKyQgICAgIAkgICAgICB3cml0ZSBsaWJvcHQgZiRmYW8oIlVOSVZFUlNBTD0hQVMiLC0KKyAgICAgIAkgIAkJCSAgICAgZiRlZGl0KHNoYXJlZF9wcm9jLCJ1cGNhc2UiKSkKKyQgICAgICAgICAgICAgbW9kX2luID0gbW9kX2luICsgMQorJCAgICAgICAgICAgICBnb3RvIHZtb2Rfc3ltX2luCiskICAgICAgICAgZW5kaWYKKyQgICAgICAgICBtb2Rfc3ltX251bSA9IG1vZF9zeW1fbnVtICsgMQorJCAgICAgICAgIGdvdG8gdm1vZF9zeW1fbG9vcAorJCAgICAgZW5kaWYKKyRWTUFQX0xPT1A6CiskICAgICAJICByZWFkL2VuZD12bWFwX2VuZCBtYXAgbGluZQorJCAgICAgCSAgaWYgKGYkbG9jYXRlKCJ7IixsaW5lKS5sdC4gZiRsZW5ndGgobGluZSkpIC5vci4gLQorICAgCSAgICAgIChmJGxvY2F0ZSgiZ2xvYmFsOiIsIGxpbmUpIC5sdC4gZiRsZW5ndGgobGluZSkpCiskICAgICAJICB0aGVuCiskICAgICAJICAgICAgcHJvYyA9IHRydWUKKyQgICAgIAkgICAgICBnb3RvIHZtYXBfbG9vcAorJCAgICAgCSAgZW5kaWYKKyQgICAgIAkgIGlmIGYkbG9jYXRlKCJ9IixsaW5lKS5sdC4gZiRsZW5ndGgobGluZSkgdGhlbiBwcm9jID0gZmFsc2UKKyQgICAgIAkgIGlmIGYkbG9jYXRlKCJsb2NhbDoiLCBsaW5lKSAubHQuIGYkbGVuZ3RoKGxpbmUpIHRoZW4gcHJvYyA9IGZhbHNlCiskICAgICAJICBpZiBwcm9jCiskICAgICAJICB0aGVuCiskICAgICAJICAgICAgc2hhcmVkX3Byb2MgPSBmJGVkaXQobGluZSwiY29sbGFwc2UiKQorJCAgICAgCSAgICAgIGNob3Bfc2VtaSA9IGYkbG9jYXRlKCI7Iiwgc2hhcmVkX3Byb2MpCiskICAgICAJICAgICAgaWYgY2hvcF9zZW1pIC5sdC4gZiRsZW5ndGgoc2hhcmVkX3Byb2MpIHRoZW4gLQorICAgICAgCSAgCSAgc2hhcmVkX3Byb2MgPSBmJGV4dHJhY3QoMCwgY2hvcF9zZW1pLCBzaGFyZWRfcHJvYykKKyQgICAgIAkgICAgICB3cml0ZSBsaWJvcHQgZiRmYW8oIlVOSVZFUlNBTD0hQVMiLC0KKyAgICAgIAkgIAkJCSAgICAgZiRlZGl0KHNoYXJlZF9wcm9jLCJ1cGNhc2UiKSkKKyQgICAgIAkgIGVuZGlmCiskICAgICAJICBnb3RvIHZtYXBfbG9vcAorJFZNQVBfRU5EOgorJCAgICAgZWxzZQorJCAgICAgICAgIHdyaXRlIHN5cyRvdXRwdXQgIlVua25vd24gQXJjaGl0ZWN0dXJlIChOb3QgVkFYLCBBWFAsIG9yIElBNjQpIgorJCAgICAgICAgIHdyaXRlIHN5cyRvdXRwdXQgIk5vIG9wdGlvbnMgZmlsZSBjcmVhdGVkIgorJCAgICAgZW5kaWYKKyQgZW5kaWYKKyQgRVhJVF9NMlM6CiskIGNsb3NlL25vbG9nIG1hcAorJCBjbG9zZS9ub2xvZyBsaWJvcHQKKyQgZW5kc3Vicm91dGluZQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL21pbmlnemlwLmMgYi9Nb2R1bGVzL3psaWIvbWluaWd6aXAuYwppbmRleCA5ODI1Y2NjLi5iMzAyNWE0IDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvbWluaWd6aXAuYworKysgYi9Nb2R1bGVzL3psaWIvbWluaWd6aXAuYwpAQCAtMSw1ICsxLDUgQEAKIC8qIG1pbmlnemlwLmMgLS0gc2ltdWxhdGUgZ3ppcCB1c2luZyB0aGUgemxpYiBjb21wcmVzc2lvbiBsaWJyYXJ5Ci0gKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwNiwgMjAxMCBKZWFuLWxvdXAgR2FpbGx5LgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMDYsIDIwMTAsIDIwMTEgSmVhbi1sb3VwIEdhaWxseS4KICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKICAqLwogCkBAIC00MCw2ICs0MCwxMCBAQAogIyAgZGVmaW5lIFNFVF9CSU5BUllfTU9ERShmaWxlKQogI2VuZGlmCiAKKyNpZmRlZiBfTVNDX1ZFUgorIyAgZGVmaW5lIHNucHJpbnRmIF9zbnByaW50ZgorI2VuZGlmCisKICNpZmRlZiBWTVMKICMgIGRlZmluZSB1bmxpbmsgZGVsZXRlCiAjICBkZWZpbmUgR1pfU1VGRklYICItZ3oiCkBAIC0xMzgsNiArMTQyLDE5NyBAQAogIyAgZGVmaW5lIGxvY2FsCiAjZW5kaWYKIAorI2lmZGVmIFpfU09MTworLyogZm9yIFpfU09MTywgY3JlYXRlIHNpbXBsaWZpZWQgZ3oqIGZ1bmN0aW9ucyB1c2luZyBkZWZsYXRlIGFuZCBpbmZsYXRlICovCisKKyNpZiBkZWZpbmVkKFpfSEFWRV9VTklTVERfSCkgfHwgZGVmaW5lZChaX0xBUkdFKQorIyAgaW5jbHVkZSA8dW5pc3RkLmg+ICAgICAgIC8qIGZvciB1bmxpbmsoKSAqLworI2VuZGlmCisKK3ZvaWQgKm15YWxsb2MgT0YoKHZvaWQgKiwgdW5zaWduZWQsIHVuc2lnbmVkKSk7Cit2b2lkIG15ZnJlZSBPRigodm9pZCAqLCB2b2lkICopKTsKKwordm9pZCAqbXlhbGxvYyhxLCBuLCBtKQorICAgIHZvaWQgKnE7CisgICAgdW5zaWduZWQgbiwgbTsKK3sKKyAgICBxID0gWl9OVUxMOworICAgIHJldHVybiBjYWxsb2MobiwgbSk7Cit9CisKK3ZvaWQgbXlmcmVlKHEsIHApCisgICAgdm9pZCAqcSwgKnA7Cit7CisgICAgcSA9IFpfTlVMTDsKKyAgICBmcmVlKHApOworfQorCit0eXBlZGVmIHN0cnVjdCBnekZpbGVfcyB7CisgICAgRklMRSAqZmlsZTsKKyAgICBpbnQgd3JpdGU7CisgICAgaW50IGVycjsKKyAgICBjaGFyICptc2c7CisgICAgel9zdHJlYW0gc3RybTsKK30gKmd6RmlsZTsKKworZ3pGaWxlIGd6b3BlbiBPRigoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopKTsKK2d6RmlsZSBnemRvcGVuIE9GKChpbnQsIGNvbnN0IGNoYXIgKikpOworZ3pGaWxlIGd6X29wZW4gT0YoKGNvbnN0IGNoYXIgKiwgaW50LCBjb25zdCBjaGFyICopKTsKKworZ3pGaWxlIGd6b3BlbihwYXRoLCBtb2RlKQorY29uc3QgY2hhciAqcGF0aDsKK2NvbnN0IGNoYXIgKm1vZGU7Cit7CisgICAgcmV0dXJuIGd6X29wZW4ocGF0aCwgLTEsIG1vZGUpOworfQorCitnekZpbGUgZ3pkb3BlbihmZCwgbW9kZSkKK2ludCBmZDsKK2NvbnN0IGNoYXIgKm1vZGU7Cit7CisgICAgcmV0dXJuIGd6X29wZW4oTlVMTCwgZmQsIG1vZGUpOworfQorCitnekZpbGUgZ3pfb3BlbihwYXRoLCBmZCwgbW9kZSkKKyAgICBjb25zdCBjaGFyICpwYXRoOworICAgIGludCBmZDsKKyAgICBjb25zdCBjaGFyICptb2RlOworeworICAgIGd6RmlsZSBnejsKKyAgICBpbnQgcmV0OworCisgICAgZ3ogPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBnekZpbGVfcykpOworICAgIGlmIChneiA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBnei0+d3JpdGUgPSBzdHJjaHIobW9kZSwgJ3cnKSAhPSBOVUxMOworICAgIGd6LT5zdHJtLnphbGxvYyA9IG15YWxsb2M7CisgICAgZ3otPnN0cm0uemZyZWUgPSBteWZyZWU7CisgICAgZ3otPnN0cm0ub3BhcXVlID0gWl9OVUxMOworICAgIGlmIChnei0+d3JpdGUpCisgICAgICAgIHJldCA9IGRlZmxhdGVJbml0MigmKGd6LT5zdHJtKSwgLTEsIDgsIDE1ICsgMTYsIDgsIDApOworICAgIGVsc2UgeworICAgICAgICBnei0+c3RybS5uZXh0X2luID0gMDsKKyAgICAgICAgZ3otPnN0cm0uYXZhaWxfaW4gPSBaX05VTEw7CisgICAgICAgIHJldCA9IGluZmxhdGVJbml0MigmKGd6LT5zdHJtKSwgMTUgKyAxNik7CisgICAgfQorICAgIGlmIChyZXQgIT0gWl9PSykgeworICAgICAgICBmcmVlKGd6KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGd6LT5maWxlID0gcGF0aCA9PSBOVUxMID8gZmRvcGVuKGZkLCBnei0+d3JpdGUgPyAid2IiIDogInJiIikgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9wZW4ocGF0aCwgZ3otPndyaXRlID8gIndiIiA6ICJyYiIpOworICAgIGlmIChnei0+ZmlsZSA9PSBOVUxMKSB7CisgICAgICAgIGd6LT53cml0ZSA/IGRlZmxhdGVFbmQoJihnei0+c3RybSkpIDogaW5mbGF0ZUVuZCgmKGd6LT5zdHJtKSk7CisgICAgICAgIGZyZWUoZ3opOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgZ3otPmVyciA9IDA7CisgICAgZ3otPm1zZyA9ICIiOworICAgIHJldHVybiBnejsKK30KKworaW50IGd6d3JpdGUgT0YoKGd6RmlsZSwgY29uc3Qgdm9pZCAqLCB1bnNpZ25lZCkpOworCitpbnQgZ3p3cml0ZShneiwgYnVmLCBsZW4pCisgICAgZ3pGaWxlIGd6OworICAgIGNvbnN0IHZvaWQgKmJ1ZjsKKyAgICB1bnNpZ25lZCBsZW47Cit7CisgICAgel9zdHJlYW0gKnN0cm07CisgICAgdW5zaWduZWQgY2hhciBvdXRbQlVGTEVOXTsKKworICAgIGlmIChneiA9PSBOVUxMIHx8ICFnei0+d3JpdGUpCisgICAgICAgIHJldHVybiAwOworICAgIHN0cm0gPSAmKGd6LT5zdHJtKTsKKyAgICBzdHJtLT5uZXh0X2luID0gKHZvaWQgKilidWY7CisgICAgc3RybS0+YXZhaWxfaW4gPSBsZW47CisgICAgZG8geworICAgICAgICBzdHJtLT5uZXh0X291dCA9IG91dDsKKyAgICAgICAgc3RybS0+YXZhaWxfb3V0ID0gQlVGTEVOOworICAgICAgICAodm9pZClkZWZsYXRlKHN0cm0sIFpfTk9fRkxVU0gpOworICAgICAgICBmd3JpdGUob3V0LCAxLCBCVUZMRU4gLSBzdHJtLT5hdmFpbF9vdXQsIGd6LT5maWxlKTsKKyAgICB9IHdoaWxlIChzdHJtLT5hdmFpbF9vdXQgPT0gMCk7CisgICAgcmV0dXJuIGxlbjsKK30KKworaW50IGd6cmVhZCBPRigoZ3pGaWxlLCB2b2lkICosIHVuc2lnbmVkKSk7CisKK2ludCBnenJlYWQoZ3osIGJ1ZiwgbGVuKQorICAgIGd6RmlsZSBnejsKKyAgICB2b2lkICpidWY7CisgICAgdW5zaWduZWQgbGVuOworeworICAgIGludCByZXQ7CisgICAgdW5zaWduZWQgZ290OworICAgIHVuc2lnbmVkIGNoYXIgaW5bMV07CisgICAgel9zdHJlYW0gKnN0cm07CisKKyAgICBpZiAoZ3ogPT0gTlVMTCB8fCBnei0+d3JpdGUpCisgICAgICAgIHJldHVybiAwOworICAgIGlmIChnei0+ZXJyKQorICAgICAgICByZXR1cm4gMDsKKyAgICBzdHJtID0gJihnei0+c3RybSk7CisgICAgc3RybS0+bmV4dF9vdXQgPSAodm9pZCAqKWJ1ZjsKKyAgICBzdHJtLT5hdmFpbF9vdXQgPSBsZW47CisgICAgZG8geworICAgICAgICBnb3QgPSBmcmVhZChpbiwgMSwgMSwgZ3otPmZpbGUpOworICAgICAgICBpZiAoZ290ID09IDApCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgc3RybS0+bmV4dF9pbiA9IGluOworICAgICAgICBzdHJtLT5hdmFpbF9pbiA9IDE7CisgICAgICAgIHJldCA9IGluZmxhdGUoc3RybSwgWl9OT19GTFVTSCk7CisgICAgICAgIGlmIChyZXQgPT0gWl9EQVRBX0VSUk9SKSB7CisgICAgICAgICAgICBnei0+ZXJyID0gWl9EQVRBX0VSUk9SOworICAgICAgICAgICAgZ3otPm1zZyA9IHN0cm0tPm1zZzsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIGlmIChyZXQgPT0gWl9TVFJFQU1fRU5EKQorICAgICAgICAgICAgaW5mbGF0ZVJlc2V0KHN0cm0pOworICAgIH0gd2hpbGUgKHN0cm0tPmF2YWlsX291dCk7CisgICAgcmV0dXJuIGxlbiAtIHN0cm0tPmF2YWlsX291dDsKK30KKworaW50IGd6Y2xvc2UgT0YoKGd6RmlsZSkpOworCitpbnQgZ3pjbG9zZShneikKKyAgICBnekZpbGUgZ3o7Cit7CisgICAgel9zdHJlYW0gKnN0cm07CisgICAgdW5zaWduZWQgY2hhciBvdXRbQlVGTEVOXTsKKworICAgIGlmIChneiA9PSBOVUxMKQorICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CisgICAgc3RybSA9ICYoZ3otPnN0cm0pOworICAgIGlmIChnei0+d3JpdGUpIHsKKyAgICAgICAgc3RybS0+bmV4dF9pbiA9IFpfTlVMTDsKKyAgICAgICAgc3RybS0+YXZhaWxfaW4gPSAwOworICAgICAgICBkbyB7CisgICAgICAgICAgICBzdHJtLT5uZXh0X291dCA9IG91dDsKKyAgICAgICAgICAgIHN0cm0tPmF2YWlsX291dCA9IEJVRkxFTjsKKyAgICAgICAgICAgICh2b2lkKWRlZmxhdGUoc3RybSwgWl9GSU5JU0gpOworICAgICAgICAgICAgZndyaXRlKG91dCwgMSwgQlVGTEVOIC0gc3RybS0+YXZhaWxfb3V0LCBnei0+ZmlsZSk7CisgICAgICAgIH0gd2hpbGUgKHN0cm0tPmF2YWlsX291dCA9PSAwKTsKKyAgICAgICAgZGVmbGF0ZUVuZChzdHJtKTsKKyAgICB9CisgICAgZWxzZQorICAgICAgICBpbmZsYXRlRW5kKHN0cm0pOworICAgIGZjbG9zZShnei0+ZmlsZSk7CisgICAgZnJlZShneik7CisgICAgcmV0dXJuIFpfT0s7Cit9CisKK2NvbnN0IGNoYXIgKmd6ZXJyb3IgT0YoKGd6RmlsZSwgaW50ICopKTsKKworY29uc3QgY2hhciAqZ3plcnJvcihneiwgZXJyKQorICAgIGd6RmlsZSBnejsKKyAgICBpbnQgKmVycjsKK3sKKyAgICAqZXJyID0gZ3otPmVycjsKKyAgICByZXR1cm4gZ3otPm1zZzsKK30KKworI2VuZGlmCisKIGNoYXIgKnByb2c7CiAKIHZvaWQgZXJyb3IgICAgICAgICAgICBPRigoY29uc3QgY2hhciAqbXNnKSk7CkBAIC0yNzIsOCArNDY3LDEyIEBACiAgICAgICAgIGV4aXQoMSk7CiAgICAgfQogCisjaWYgIWRlZmluZWQoTk9fc25wcmludGYpICYmICFkZWZpbmVkKE5PX3ZzbnByaW50ZikKKyAgICBzbnByaW50ZihvdXRmaWxlLCBzaXplb2Yob3V0ZmlsZSksICIlcyVzIiwgZmlsZSwgR1pfU1VGRklYKTsKKyNlbHNlCiAgICAgc3RyY3B5KG91dGZpbGUsIGZpbGUpOwogICAgIHN0cmNhdChvdXRmaWxlLCBHWl9TVUZGSVgpOworI2VuZGlmCiAKICAgICBpbiA9IGZvcGVuKGZpbGUsICJyYiIpOwogICAgIGlmIChpbiA9PSBOVUxMKSB7CkBAIC0zMDgsNyArNTA3LDExIEBACiAgICAgICAgIGV4aXQoMSk7CiAgICAgfQogCisjaWYgIWRlZmluZWQoTk9fc25wcmludGYpICYmICFkZWZpbmVkKE5PX3ZzbnByaW50ZikKKyAgICBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXMiLCBmaWxlKTsKKyNlbHNlCiAgICAgc3RyY3B5KGJ1ZiwgZmlsZSk7CisjZW5kaWYKIAogICAgIGlmIChsZW4gPiBTVUZGSVhfTEVOICYmIHN0cmNtcChmaWxlK2xlbi1TVUZGSVhfTEVOLCBHWl9TVUZGSVgpID09IDApIHsKICAgICAgICAgaW5maWxlID0gZmlsZTsKQEAgLTMxNyw3ICs1MjAsMTEgQEAKICAgICB9IGVsc2UgewogICAgICAgICBvdXRmaWxlID0gZmlsZTsKICAgICAgICAgaW5maWxlID0gYnVmOworI2lmICFkZWZpbmVkKE5PX3NucHJpbnRmKSAmJiAhZGVmaW5lZChOT192c25wcmludGYpCisgICAgICAgIHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sICIlcyIsIEdaX1NVRkZJWCk7CisjZWxzZQogICAgICAgICBzdHJjYXQoaW5maWxlLCBHWl9TVUZGSVgpOworI2VuZGlmCiAgICAgfQogICAgIGluID0gZ3pvcGVuKGluZmlsZSwgInJiIik7CiAgICAgaWYgKGluID09IE5VTEwpIHsKQEAgLTM1NSw3ICs1NjIsMTEgQEAKICAgICBnekZpbGUgZmlsZTsKICAgICBjaGFyICpibmFtZSwgb3V0bW9kZVsyMF07CiAKKyNpZiAhZGVmaW5lZChOT19zbnByaW50ZikgJiYgIWRlZmluZWQoTk9fdnNucHJpbnRmKQorICAgIHNucHJpbnRmKG91dG1vZGUsIHNpemVvZihvdXRtb2RlKSwgIiVzIiwgIndiNiAiKTsKKyNlbHNlCiAgICAgc3RyY3B5KG91dG1vZGUsICJ3YjYgIik7CisjZW5kaWYKIAogICAgIHByb2cgPSBhcmd2WzBdOwogICAgIGJuYW1lID0gc3RycmNocihhcmd2WzBdLCAnLycpOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL3RyZWVzLmMgYi9Nb2R1bGVzL3psaWIvdHJlZXMuYwppbmRleCA1NmU5YmIxLi4xZmQ3NzU5IDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvdHJlZXMuYworKysgYi9Nb2R1bGVzL3psaWIvdHJlZXMuYwpAQCAtMSw1ICsxLDUgQEAKIC8qIHRyZWVzLmMgLS0gb3V0cHV0IGRlZmxhdGVkIGRhdGEgdXNpbmcgSHVmZm1hbiBjb2RpbmcKLSAqIENvcHlyaWdodCAoQykgMTk5NS0yMDEwIEplYW4tbG91cCBHYWlsbHkKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDEyIEplYW4tbG91cCBHYWlsbHkKICAqIGRldGVjdF9kYXRhX3R5cGUoKSBmdW5jdGlvbiBwcm92aWRlZCBmcmVlbHkgYnkgQ29zbWluIFRydXRhLCAyMDA2CiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCiAgKi8KQEAgLTc0LDExICs3NCw2IEBACiAgKiBwcm9iYWJpbGl0eSwgdG8gYXZvaWQgdHJhbnNtaXR0aW5nIHRoZSBsZW5ndGhzIGZvciB1bnVzZWQgYml0IGxlbmd0aCBjb2Rlcy4KICAqLwogCi0jZGVmaW5lIEJ1Zl9zaXplICg4ICogMipzaXplb2YoY2hhcikpCi0vKiBOdW1iZXIgb2YgYml0cyB1c2VkIHdpdGhpbiBiaV9idWYuIChiaV9idWYgbWlnaHQgYmUgaW1wbGVtZW50ZWQgb24KLSAqIG1vcmUgdGhhbiAxNiBiaXRzIG9uIHNvbWUgc3lzdGVtcy4pCi0gKi8KLQogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKiBMb2NhbCBkYXRhLiBUaGVzZSBhcmUgaW5pdGlhbGl6ZWQgb25seSBvbmNlLgogICovCkBAIC0xNTEsOCArMTQ2LDggQEAKIGxvY2FsIGludCAgYnVpbGRfYmxfdHJlZSAgT0YoKGRlZmxhdGVfc3RhdGUgKnMpKTsKIGxvY2FsIHZvaWQgc2VuZF9hbGxfdHJlZXMgT0YoKGRlZmxhdGVfc3RhdGUgKnMsIGludCBsY29kZXMsIGludCBkY29kZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYmxjb2RlcykpOwotbG9jYWwgdm9pZCBjb21wcmVzc19ibG9jayBPRigoZGVmbGF0ZV9zdGF0ZSAqcywgY3RfZGF0YSAqbHRyZWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdF9kYXRhICpkdHJlZSkpOworbG9jYWwgdm9pZCBjb21wcmVzc19ibG9jayBPRigoZGVmbGF0ZV9zdGF0ZSAqcywgY29uc3QgY3RfZGF0YSAqbHRyZWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjdF9kYXRhICpkdHJlZSkpOwogbG9jYWwgaW50ICBkZXRlY3RfZGF0YV90eXBlIE9GKChkZWZsYXRlX3N0YXRlICpzKSk7CiBsb2NhbCB1bnNpZ25lZCBiaV9yZXZlcnNlIE9GKCh1bnNpZ25lZCB2YWx1ZSwgaW50IGxlbmd0aCkpOwogbG9jYWwgdm9pZCBiaV93aW5kdXAgICAgICBPRigoZGVmbGF0ZV9zdGF0ZSAqcykpOwpAQCAtMzk5LDcgKzM5NCw2IEBACiAKICAgICBzLT5iaV9idWYgPSAwOwogICAgIHMtPmJpX3ZhbGlkID0gMDsKLSAgICBzLT5sYXN0X2VvYl9sZW4gPSA4OyAvKiBlbm91Z2ggbG9va2FoZWFkIGZvciBpbmZsYXRlICovCiAjaWZkZWYgREVCVUcKICAgICBzLT5jb21wcmVzc2VkX2xlbiA9IDBMOwogICAgIHMtPmJpdHNfc2VudCA9IDBMOwpAQCAtODgzLDE1ICs4NzcsMTcgQEAKIH0KIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBGbHVzaCB0aGUgYml0cyBpbiB0aGUgYml0IGJ1ZmZlciB0byBwZW5kaW5nIG91dHB1dCAobGVhdmVzIGF0IG1vc3QgNyBiaXRzKQorICovCit2b2lkIFpMSUJfSU5URVJOQUwgX3RyX2ZsdXNoX2JpdHMocykKKyAgICBkZWZsYXRlX3N0YXRlICpzOworeworICAgIGJpX2ZsdXNoKHMpOworfQorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqIFNlbmQgb25lIGVtcHR5IHN0YXRpYyBibG9jayB0byBnaXZlIGVub3VnaCBsb29rYWhlYWQgZm9yIGluZmxhdGUuCiAgKiBUaGlzIHRha2VzIDEwIGJpdHMsIG9mIHdoaWNoIDcgbWF5IHJlbWFpbiBpbiB0aGUgYml0IGJ1ZmZlci4KLSAqIFRoZSBjdXJyZW50IGluZmxhdGUgY29kZSByZXF1aXJlcyA5IGJpdHMgb2YgbG9va2FoZWFkLiBJZiB0aGUKLSAqIGxhc3QgdHdvIGNvZGVzIGZvciB0aGUgcHJldmlvdXMgYmxvY2sgKHJlYWwgY29kZSBwbHVzIEVPQikgd2VyZSBjb2RlZAotICogb24gNSBiaXRzIG9yIGxlc3MsIGluZmxhdGUgbWF5IGhhdmUgb25seSA1KzMgYml0cyBvZiBsb29rYWhlYWQgdG8gZGVjb2RlCi0gKiB0aGUgbGFzdCByZWFsIGNvZGUuIEluIHRoaXMgY2FzZSB3ZSBzZW5kIHR3byBlbXB0eSBzdGF0aWMgYmxvY2tzIGluc3RlYWQKLSAqIG9mIG9uZS4gKFRoZXJlIGFyZSBubyBwcm9ibGVtcyBpZiB0aGUgcHJldmlvdXMgYmxvY2sgaXMgc3RvcmVkIG9yIGZpeGVkLikKLSAqIFRvIHNpbXBsaWZ5IHRoZSBjb2RlLCB3ZSBhc3N1bWUgdGhlIHdvcnN0IGNhc2Ugb2YgbGFzdCByZWFsIGNvZGUgZW5jb2RlZAotICogb24gb25lIGJpdCBvbmx5LgogICovCiB2b2lkIFpMSUJfSU5URVJOQUwgX3RyX2FsaWduKHMpCiAgICAgZGVmbGF0ZV9zdGF0ZSAqczsKQEAgLTkwMiwyMCArODk4LDYgQEAKICAgICBzLT5jb21wcmVzc2VkX2xlbiArPSAxMEw7IC8qIDMgZm9yIGJsb2NrIHR5cGUsIDcgZm9yIEVPQiAqLwogI2VuZGlmCiAgICAgYmlfZmx1c2gocyk7Ci0gICAgLyogT2YgdGhlIDEwIGJpdHMgZm9yIHRoZSBlbXB0eSBibG9jaywgd2UgaGF2ZSBhbHJlYWR5IHNlbnQKLSAgICAgKiAoMTAgLSBiaV92YWxpZCkgYml0cy4gVGhlIGxvb2thaGVhZCBmb3IgdGhlIGxhc3QgcmVhbCBjb2RlIChiZWZvcmUKLSAgICAgKiB0aGUgRU9CIG9mIHRoZSBwcmV2aW91cyBibG9jaykgd2FzIHRodXMgYXQgbGVhc3Qgb25lIHBsdXMgdGhlIGxlbmd0aAotICAgICAqIG9mIHRoZSBFT0IgcGx1cyB3aGF0IHdlIGhhdmUganVzdCBzZW50IG9mIHRoZSBlbXB0eSBzdGF0aWMgYmxvY2suCi0gICAgICovCi0gICAgaWYgKDEgKyBzLT5sYXN0X2VvYl9sZW4gKyAxMCAtIHMtPmJpX3ZhbGlkIDwgOSkgewotICAgICAgICBzZW5kX2JpdHMocywgU1RBVElDX1RSRUVTPDwxLCAzKTsKLSAgICAgICAgc2VuZF9jb2RlKHMsIEVORF9CTE9DSywgc3RhdGljX2x0cmVlKTsKLSNpZmRlZiBERUJVRwotICAgICAgICBzLT5jb21wcmVzc2VkX2xlbiArPSAxMEw7Ci0jZW5kaWYKLSAgICAgICAgYmlfZmx1c2gocyk7Ci0gICAgfQotICAgIHMtPmxhc3RfZW9iX2xlbiA9IDc7CiB9CiAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtOTkwLDcgKzk3Miw4IEBACiAgICAgfSBlbHNlIGlmIChzLT5zdHJhdGVneSA9PSBaX0ZJWEVEIHx8IHN0YXRpY19sZW5iID09IG9wdF9sZW5iKSB7CiAjZW5kaWYKICAgICAgICAgc2VuZF9iaXRzKHMsIChTVEFUSUNfVFJFRVM8PDEpK2xhc3QsIDMpOwotICAgICAgICBjb21wcmVzc19ibG9jayhzLCAoY3RfZGF0YSAqKXN0YXRpY19sdHJlZSwgKGN0X2RhdGEgKilzdGF0aWNfZHRyZWUpOworICAgICAgICBjb21wcmVzc19ibG9jayhzLCAoY29uc3QgY3RfZGF0YSAqKXN0YXRpY19sdHJlZSwKKyAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IGN0X2RhdGEgKilzdGF0aWNfZHRyZWUpOwogI2lmZGVmIERFQlVHCiAgICAgICAgIHMtPmNvbXByZXNzZWRfbGVuICs9IDMgKyBzLT5zdGF0aWNfbGVuOwogI2VuZGlmCkBAIC05OTgsNyArOTgxLDggQEAKICAgICAgICAgc2VuZF9iaXRzKHMsIChEWU5fVFJFRVM8PDEpK2xhc3QsIDMpOwogICAgICAgICBzZW5kX2FsbF90cmVlcyhzLCBzLT5sX2Rlc2MubWF4X2NvZGUrMSwgcy0+ZF9kZXNjLm1heF9jb2RlKzEsCiAgICAgICAgICAgICAgICAgICAgICAgIG1heF9ibGluZGV4KzEpOwotICAgICAgICBjb21wcmVzc19ibG9jayhzLCAoY3RfZGF0YSAqKXMtPmR5bl9sdHJlZSwgKGN0X2RhdGEgKilzLT5keW5fZHRyZWUpOworICAgICAgICBjb21wcmVzc19ibG9jayhzLCAoY29uc3QgY3RfZGF0YSAqKXMtPmR5bl9sdHJlZSwKKyAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IGN0X2RhdGEgKilzLT5keW5fZHRyZWUpOwogI2lmZGVmIERFQlVHCiAgICAgICAgIHMtPmNvbXByZXNzZWRfbGVuICs9IDMgKyBzLT5vcHRfbGVuOwogI2VuZGlmCkBAIC0xMDc1LDggKzEwNTksOCBAQAogICovCiBsb2NhbCB2b2lkIGNvbXByZXNzX2Jsb2NrKHMsIGx0cmVlLCBkdHJlZSkKICAgICBkZWZsYXRlX3N0YXRlICpzOwotICAgIGN0X2RhdGEgKmx0cmVlOyAvKiBsaXRlcmFsIHRyZWUgKi8KLSAgICBjdF9kYXRhICpkdHJlZTsgLyogZGlzdGFuY2UgdHJlZSAqLworICAgIGNvbnN0IGN0X2RhdGEgKmx0cmVlOyAvKiBsaXRlcmFsIHRyZWUgKi8KKyAgICBjb25zdCBjdF9kYXRhICpkdHJlZTsgLyogZGlzdGFuY2UgdHJlZSAqLwogewogICAgIHVuc2lnbmVkIGRpc3Q7ICAgICAgLyogZGlzdGFuY2Ugb2YgbWF0Y2hlZCBzdHJpbmcgKi8KICAgICBpbnQgbGM7ICAgICAgICAgICAgIC8qIG1hdGNoIGxlbmd0aCBvciB1bm1hdGNoZWQgY2hhciAoaWYgZGlzdCA9PSAwKSAqLwpAQCAtMTExOCw3ICsxMTAyLDYgQEAKICAgICB9IHdoaWxlIChseCA8IHMtPmxhc3RfbGl0KTsKIAogICAgIHNlbmRfY29kZShzLCBFTkRfQkxPQ0ssIGx0cmVlKTsKLSAgICBzLT5sYXN0X2VvYl9sZW4gPSBsdHJlZVtFTkRfQkxPQ0tdLkxlbjsKIH0KIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0xMjI2LDcgKzEyMDksNiBAQAogICAgIGludCAgICAgIGhlYWRlcjsgIC8qIHRydWUgaWYgYmxvY2sgaGVhZGVyIG11c3QgYmUgd3JpdHRlbiAqLwogewogICAgIGJpX3dpbmR1cChzKTsgICAgICAgIC8qIGFsaWduIG9uIGJ5dGUgYm91bmRhcnkgKi8KLSAgICBzLT5sYXN0X2VvYl9sZW4gPSA4OyAvKiBlbm91Z2ggbG9va2FoZWFkIGZvciBpbmZsYXRlICovCiAKICAgICBpZiAoaGVhZGVyKSB7CiAgICAgICAgIHB1dF9zaG9ydChzLCAodXNoKWxlbik7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvdW5jb21wci5jIGIvTW9kdWxlcy96bGliL3VuY29tcHIuYwppbmRleCBhZDk4YmUzLi4yNDJlOTQ5IDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvdW5jb21wci5jCisrKyBiL01vZHVsZXMvemxpYi91bmNvbXByLmMKQEAgLTMwLDcgKzMwLDcgQEAKICAgICB6X3N0cmVhbSBzdHJlYW07CiAgICAgaW50IGVycjsKIAotICAgIHN0cmVhbS5uZXh0X2luID0gKEJ5dGVmKilzb3VyY2U7CisgICAgc3RyZWFtLm5leHRfaW4gPSAoel9jb25zdCBCeXRlZiAqKXNvdXJjZTsKICAgICBzdHJlYW0uYXZhaWxfaW4gPSAodUludClzb3VyY2VMZW47CiAgICAgLyogQ2hlY2sgZm9yIHNvdXJjZSA+IDY0SyBvbiAxNi1iaXQgbWFjaGluZTogKi8KICAgICBpZiAoKHVMb25nKXN0cmVhbS5hdmFpbF9pbiAhPSBzb3VyY2VMZW4pIHJldHVybiBaX0JVRl9FUlJPUjsKZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi96Y29uZi5oIGIvTW9kdWxlcy96bGliL3pjb25mLmgKaW5kZXggMDJjZTU2Yy4uOTk4N2E3NyAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL3pjb25mLmgKKysrIGIvTW9kdWxlcy96bGliL3pjb25mLmgKQEAgLTEsNSArMSw1IEBACiAvKiB6Y29uZi5oIC0tIGNvbmZpZ3VyYXRpb24gb2YgdGhlIHpsaWIgY29tcHJlc3Npb24gbGlicmFyeQotICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMTAgSmVhbi1sb3VwIEdhaWxseS4KKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDEzIEplYW4tbG91cCBHYWlsbHkuCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCiAgKi8KIApAQCAtMTUsMTEgKzE1LDEzIEBACiAgKiB0aGlzIHBlcm1hbmVudGx5IGluIHpjb25mLmggdXNpbmcgIi4vY29uZmlndXJlIC0tenByZWZpeCIuCiAgKi8KICNpZmRlZiBaX1BSRUZJWCAgICAgLyogbWF5IGJlIHNldCB0byAjaWYgMSBieSAuL2NvbmZpZ3VyZSAqLworIyAgZGVmaW5lIFpfUFJFRklYX1NFVAogCiAvKiBhbGwgbGlua2VkIHN5bWJvbHMgKi8KICMgIGRlZmluZSBfZGlzdF9jb2RlICAgICAgICAgICAgel9fZGlzdF9jb2RlCiAjICBkZWZpbmUgX2xlbmd0aF9jb2RlICAgICAgICAgIHpfX2xlbmd0aF9jb2RlCiAjICBkZWZpbmUgX3RyX2FsaWduICAgICAgICAgICAgIHpfX3RyX2FsaWduCisjICBkZWZpbmUgX3RyX2ZsdXNoX2JpdHMgICAgICAgIHpfX3RyX2ZsdXNoX2JpdHMKICMgIGRlZmluZSBfdHJfZmx1c2hfYmxvY2sgICAgICAgel9fdHJfZmx1c2hfYmxvY2sKICMgIGRlZmluZSBfdHJfaW5pdCAgICAgICAgICAgICAgel9fdHJfaW5pdAogIyAgZGVmaW5lIF90cl9zdG9yZWRfYmxvY2sgICAgICB6X190cl9zdG9yZWRfYmxvY2sKQEAgLTI3LDkgKzI5LDExIEBACiAjICBkZWZpbmUgYWRsZXIzMiAgICAgICAgICAgICAgIHpfYWRsZXIzMgogIyAgZGVmaW5lIGFkbGVyMzJfY29tYmluZSAgICAgICB6X2FkbGVyMzJfY29tYmluZQogIyAgZGVmaW5lIGFkbGVyMzJfY29tYmluZTY0ICAgICB6X2FkbGVyMzJfY29tYmluZTY0Ci0jICBkZWZpbmUgY29tcHJlc3MgICAgICAgICAgICAgIHpfY29tcHJlc3MKLSMgIGRlZmluZSBjb21wcmVzczIgICAgICAgICAgICAgel9jb21wcmVzczIKLSMgIGRlZmluZSBjb21wcmVzc0JvdW5kICAgICAgICAgel9jb21wcmVzc0JvdW5kCisjICBpZm5kZWYgWl9TT0xPCisjICAgIGRlZmluZSBjb21wcmVzcyAgICAgICAgICAgICAgel9jb21wcmVzcworIyAgICBkZWZpbmUgY29tcHJlc3MyICAgICAgICAgICAgIHpfY29tcHJlc3MyCisjICAgIGRlZmluZSBjb21wcmVzc0JvdW5kICAgICAgICAgel9jb21wcmVzc0JvdW5kCisjICBlbmRpZgogIyAgZGVmaW5lIGNyYzMyICAgICAgICAgICAgICAgICB6X2NyYzMyCiAjICBkZWZpbmUgY3JjMzJfY29tYmluZSAgICAgICAgIHpfY3JjMzJfY29tYmluZQogIyAgZGVmaW5lIGNyYzMyX2NvbWJpbmU2NCAgICAgICB6X2NyYzMyX2NvbWJpbmU2NApAQCAtNDAsNDQgKzQ0LDUzIEBACiAjICBkZWZpbmUgZGVmbGF0ZUluaXQyXyAgICAgICAgIHpfZGVmbGF0ZUluaXQyXwogIyAgZGVmaW5lIGRlZmxhdGVJbml0XyAgICAgICAgICB6X2RlZmxhdGVJbml0XwogIyAgZGVmaW5lIGRlZmxhdGVQYXJhbXMgICAgICAgICB6X2RlZmxhdGVQYXJhbXMKKyMgIGRlZmluZSBkZWZsYXRlUGVuZGluZyAgICAgICAgel9kZWZsYXRlUGVuZGluZwogIyAgZGVmaW5lIGRlZmxhdGVQcmltZSAgICAgICAgICB6X2RlZmxhdGVQcmltZQogIyAgZGVmaW5lIGRlZmxhdGVSZXNldCAgICAgICAgICB6X2RlZmxhdGVSZXNldAorIyAgZGVmaW5lIGRlZmxhdGVSZXNldEtlZXAgICAgICB6X2RlZmxhdGVSZXNldEtlZXAKICMgIGRlZmluZSBkZWZsYXRlU2V0RGljdGlvbmFyeSAgel9kZWZsYXRlU2V0RGljdGlvbmFyeQogIyAgZGVmaW5lIGRlZmxhdGVTZXRIZWFkZXIgICAgICB6X2RlZmxhdGVTZXRIZWFkZXIKICMgIGRlZmluZSBkZWZsYXRlVHVuZSAgICAgICAgICAgel9kZWZsYXRlVHVuZQogIyAgZGVmaW5lIGRlZmxhdGVfY29weXJpZ2h0ICAgICB6X2RlZmxhdGVfY29weXJpZ2h0CiAjICBkZWZpbmUgZ2V0X2NyY190YWJsZSAgICAgICAgIHpfZ2V0X2NyY190YWJsZQotIyAgZGVmaW5lIGd6X2Vycm9yICAgICAgICAgICAgICB6X2d6X2Vycm9yCi0jICBkZWZpbmUgZ3pfaW50bWF4ICAgICAgICAgICAgIHpfZ3pfaW50bWF4Ci0jICBkZWZpbmUgZ3pfc3Ryd2luZXJyb3IgICAgICAgIHpfZ3pfc3Ryd2luZXJyb3IKLSMgIGRlZmluZSBnemJ1ZmZlciAgICAgICAgICAgICAgel9nemJ1ZmZlcgotIyAgZGVmaW5lIGd6Y2xlYXJlcnIgICAgICAgICAgICB6X2d6Y2xlYXJlcnIKLSMgIGRlZmluZSBnemNsb3NlICAgICAgICAgICAgICAgel9nemNsb3NlCi0jICBkZWZpbmUgZ3pjbG9zZV9yICAgICAgICAgICAgIHpfZ3pjbG9zZV9yCi0jICBkZWZpbmUgZ3pjbG9zZV93ICAgICAgICAgICAgIHpfZ3pjbG9zZV93Ci0jICBkZWZpbmUgZ3pkaXJlY3QgICAgICAgICAgICAgIHpfZ3pkaXJlY3QKLSMgIGRlZmluZSBnemRvcGVuICAgICAgICAgICAgICAgel9nemRvcGVuCi0jICBkZWZpbmUgZ3plb2YgICAgICAgICAgICAgICAgIHpfZ3plb2YKLSMgIGRlZmluZSBnemVycm9yICAgICAgICAgICAgICAgel9nemVycm9yCi0jICBkZWZpbmUgZ3pmbHVzaCAgICAgICAgICAgICAgIHpfZ3pmbHVzaAotIyAgZGVmaW5lIGd6Z2V0YyAgICAgICAgICAgICAgICB6X2d6Z2V0YwotIyAgZGVmaW5lIGd6Z2V0cyAgICAgICAgICAgICAgICB6X2d6Z2V0cwotIyAgZGVmaW5lIGd6b2Zmc2V0ICAgICAgICAgICAgICB6X2d6b2Zmc2V0Ci0jICBkZWZpbmUgZ3pvZmZzZXQ2NCAgICAgICAgICAgIHpfZ3pvZmZzZXQ2NAotIyAgZGVmaW5lIGd6b3BlbiAgICAgICAgICAgICAgICB6X2d6b3BlbgotIyAgZGVmaW5lIGd6b3BlbjY0ICAgICAgICAgICAgICB6X2d6b3BlbjY0Ci0jICBkZWZpbmUgZ3pwcmludGYgICAgICAgICAgICAgIHpfZ3pwcmludGYKLSMgIGRlZmluZSBnenB1dGMgICAgICAgICAgICAgICAgel9nenB1dGMKLSMgIGRlZmluZSBnenB1dHMgICAgICAgICAgICAgICAgel9nenB1dHMKLSMgIGRlZmluZSBnenJlYWQgICAgICAgICAgICAgICAgel9nenJlYWQKLSMgIGRlZmluZSBnenJld2luZCAgICAgICAgICAgICAgel9nenJld2luZAotIyAgZGVmaW5lIGd6c2VlayAgICAgICAgICAgICAgICB6X2d6c2VlawotIyAgZGVmaW5lIGd6c2VlazY0ICAgICAgICAgICAgICB6X2d6c2VlazY0Ci0jICBkZWZpbmUgZ3pzZXRwYXJhbXMgICAgICAgICAgIHpfZ3pzZXRwYXJhbXMKLSMgIGRlZmluZSBnenRlbGwgICAgICAgICAgICAgICAgel9nenRlbGwKLSMgIGRlZmluZSBnenRlbGw2NCAgICAgICAgICAgICAgel9nenRlbGw2NAotIyAgZGVmaW5lIGd6dW5nZXRjICAgICAgICAgICAgICB6X2d6dW5nZXRjCi0jICBkZWZpbmUgZ3p3cml0ZSAgICAgICAgICAgICAgIHpfZ3p3cml0ZQorIyAgaWZuZGVmIFpfU09MTworIyAgICBkZWZpbmUgZ3pfZXJyb3IgICAgICAgICAgICAgIHpfZ3pfZXJyb3IKKyMgICAgZGVmaW5lIGd6X2ludG1heCAgICAgICAgICAgICB6X2d6X2ludG1heAorIyAgICBkZWZpbmUgZ3pfc3Ryd2luZXJyb3IgICAgICAgIHpfZ3pfc3Ryd2luZXJyb3IKKyMgICAgZGVmaW5lIGd6YnVmZmVyICAgICAgICAgICAgICB6X2d6YnVmZmVyCisjICAgIGRlZmluZSBnemNsZWFyZXJyICAgICAgICAgICAgel9nemNsZWFyZXJyCisjICAgIGRlZmluZSBnemNsb3NlICAgICAgICAgICAgICAgel9nemNsb3NlCisjICAgIGRlZmluZSBnemNsb3NlX3IgICAgICAgICAgICAgel9nemNsb3NlX3IKKyMgICAgZGVmaW5lIGd6Y2xvc2VfdyAgICAgICAgICAgICB6X2d6Y2xvc2VfdworIyAgICBkZWZpbmUgZ3pkaXJlY3QgICAgICAgICAgICAgIHpfZ3pkaXJlY3QKKyMgICAgZGVmaW5lIGd6ZG9wZW4gICAgICAgICAgICAgICB6X2d6ZG9wZW4KKyMgICAgZGVmaW5lIGd6ZW9mICAgICAgICAgICAgICAgICB6X2d6ZW9mCisjICAgIGRlZmluZSBnemVycm9yICAgICAgICAgICAgICAgel9nemVycm9yCisjICAgIGRlZmluZSBnemZsdXNoICAgICAgICAgICAgICAgel9nemZsdXNoCisjICAgIGRlZmluZSBnemdldGMgICAgICAgICAgICAgICAgel9nemdldGMKKyMgICAgZGVmaW5lIGd6Z2V0Y18gICAgICAgICAgICAgICB6X2d6Z2V0Y18KKyMgICAgZGVmaW5lIGd6Z2V0cyAgICAgICAgICAgICAgICB6X2d6Z2V0cworIyAgICBkZWZpbmUgZ3pvZmZzZXQgICAgICAgICAgICAgIHpfZ3pvZmZzZXQKKyMgICAgZGVmaW5lIGd6b2Zmc2V0NjQgICAgICAgICAgICB6X2d6b2Zmc2V0NjQKKyMgICAgZGVmaW5lIGd6b3BlbiAgICAgICAgICAgICAgICB6X2d6b3BlbgorIyAgICBkZWZpbmUgZ3pvcGVuNjQgICAgICAgICAgICAgIHpfZ3pvcGVuNjQKKyMgICAgaWZkZWYgX1dJTjMyCisjICAgICAgZGVmaW5lIGd6b3Blbl93ICAgICAgICAgICAgICB6X2d6b3Blbl93CisjICAgIGVuZGlmCisjICAgIGRlZmluZSBnenByaW50ZiAgICAgICAgICAgICAgel9nenByaW50ZgorIyAgICBkZWZpbmUgZ3p2cHJpbnRmICAgICAgICAgICAgIHpfZ3p2cHJpbnRmCisjICAgIGRlZmluZSBnenB1dGMgICAgICAgICAgICAgICAgel9nenB1dGMKKyMgICAgZGVmaW5lIGd6cHV0cyAgICAgICAgICAgICAgICB6X2d6cHV0cworIyAgICBkZWZpbmUgZ3pyZWFkICAgICAgICAgICAgICAgIHpfZ3pyZWFkCisjICAgIGRlZmluZSBnenJld2luZCAgICAgICAgICAgICAgel9nenJld2luZAorIyAgICBkZWZpbmUgZ3pzZWVrICAgICAgICAgICAgICAgIHpfZ3pzZWVrCisjICAgIGRlZmluZSBnenNlZWs2NCAgICAgICAgICAgICAgel9nenNlZWs2NAorIyAgICBkZWZpbmUgZ3pzZXRwYXJhbXMgICAgICAgICAgIHpfZ3pzZXRwYXJhbXMKKyMgICAgZGVmaW5lIGd6dGVsbCAgICAgICAgICAgICAgICB6X2d6dGVsbAorIyAgICBkZWZpbmUgZ3p0ZWxsNjQgICAgICAgICAgICAgIHpfZ3p0ZWxsNjQKKyMgICAgZGVmaW5lIGd6dW5nZXRjICAgICAgICAgICAgICB6X2d6dW5nZXRjCisjICAgIGRlZmluZSBnendyaXRlICAgICAgICAgICAgICAgel9nendyaXRlCisjICBlbmRpZgogIyAgZGVmaW5lIGluZmxhdGUgICAgICAgICAgICAgICB6X2luZmxhdGUKICMgIGRlZmluZSBpbmZsYXRlQmFjayAgICAgICAgICAgel9pbmZsYXRlQmFjawogIyAgZGVmaW5lIGluZmxhdGVCYWNrRW5kICAgICAgICB6X2luZmxhdGVCYWNrRW5kCkBAIC05MiwxNiArMTA1LDIyIEBACiAjICBkZWZpbmUgaW5mbGF0ZVJlc2V0ICAgICAgICAgIHpfaW5mbGF0ZVJlc2V0CiAjICBkZWZpbmUgaW5mbGF0ZVJlc2V0MiAgICAgICAgIHpfaW5mbGF0ZVJlc2V0MgogIyAgZGVmaW5lIGluZmxhdGVTZXREaWN0aW9uYXJ5ICB6X2luZmxhdGVTZXREaWN0aW9uYXJ5CisjICBkZWZpbmUgaW5mbGF0ZUdldERpY3Rpb25hcnkgIHpfaW5mbGF0ZUdldERpY3Rpb25hcnkKICMgIGRlZmluZSBpbmZsYXRlU3luYyAgICAgICAgICAgel9pbmZsYXRlU3luYwogIyAgZGVmaW5lIGluZmxhdGVTeW5jUG9pbnQgICAgICB6X2luZmxhdGVTeW5jUG9pbnQKICMgIGRlZmluZSBpbmZsYXRlVW5kZXJtaW5lICAgICAgel9pbmZsYXRlVW5kZXJtaW5lCisjICBkZWZpbmUgaW5mbGF0ZVJlc2V0S2VlcCAgICAgIHpfaW5mbGF0ZVJlc2V0S2VlcAogIyAgZGVmaW5lIGluZmxhdGVfY29weXJpZ2h0ICAgICB6X2luZmxhdGVfY29weXJpZ2h0CiAjICBkZWZpbmUgaW5mbGF0ZV9mYXN0ICAgICAgICAgIHpfaW5mbGF0ZV9mYXN0CiAjICBkZWZpbmUgaW5mbGF0ZV90YWJsZSAgICAgICAgIHpfaW5mbGF0ZV90YWJsZQotIyAgZGVmaW5lIHVuY29tcHJlc3MgICAgICAgICAgICB6X3VuY29tcHJlc3MKKyMgIGlmbmRlZiBaX1NPTE8KKyMgICAgZGVmaW5lIHVuY29tcHJlc3MgICAgICAgICAgICB6X3VuY29tcHJlc3MKKyMgIGVuZGlmCiAjICBkZWZpbmUgekVycm9yICAgICAgICAgICAgICAgIHpfekVycm9yCi0jICBkZWZpbmUgemNhbGxvYyAgICAgICAgICAgICAgIHpfemNhbGxvYwotIyAgZGVmaW5lIHpjZnJlZSAgICAgICAgICAgICAgICB6X3pjZnJlZQorIyAgaWZuZGVmIFpfU09MTworIyAgICBkZWZpbmUgemNhbGxvYyAgICAgICAgICAgICAgIHpfemNhbGxvYworIyAgICBkZWZpbmUgemNmcmVlICAgICAgICAgICAgICAgIHpfemNmcmVlCisjICBlbmRpZgogIyAgZGVmaW5lIHpsaWJDb21waWxlRmxhZ3MgICAgICB6X3psaWJDb21waWxlRmxhZ3MKICMgIGRlZmluZSB6bGliVmVyc2lvbiAgICAgICAgICAgel96bGliVmVyc2lvbgogCkBAIC0xMTEsNyArMTMwLDkgQEAKICMgIGRlZmluZSBhbGxvY19mdW5jICAgICAgICAgICAgel9hbGxvY19mdW5jCiAjICBkZWZpbmUgY2hhcmYgICAgICAgICAgICAgICAgIHpfY2hhcmYKICMgIGRlZmluZSBmcmVlX2Z1bmMgICAgICAgICAgICAgel9mcmVlX2Z1bmMKLSMgIGRlZmluZSBnekZpbGUgICAgICAgICAgICAgICAgel9nekZpbGUKKyMgIGlmbmRlZiBaX1NPTE8KKyMgICAgZGVmaW5lIGd6RmlsZSAgICAgICAgICAgICAgICB6X2d6RmlsZQorIyAgZW5kaWYKICMgIGRlZmluZSBnel9oZWFkZXIgICAgICAgICAgICAgel9nel9oZWFkZXIKICMgIGRlZmluZSBnel9oZWFkZXJwICAgICAgICAgICAgel9nel9oZWFkZXJwCiAjICBkZWZpbmUgaW5fZnVuYyAgICAgICAgICAgICAgIHpfaW5fZnVuYwpAQCAtMTk3LDYgKzIxOCwxMiBAQAogIyAgZW5kaWYKICNlbmRpZgogCisjaWYgZGVmaW5lZChaTElCX0NPTlNUKSAmJiAhZGVmaW5lZCh6X2NvbnN0KQorIyAgZGVmaW5lIHpfY29uc3QgY29uc3QKKyNlbHNlCisjICBkZWZpbmUgel9jb25zdAorI2VuZGlmCisKIC8qIFNvbWUgTWFjIGNvbXBpbGVycyBtZXJnZSBhbGwgLmggZmlsZXMgaW5jb3JyZWN0bHk6ICovCiAjaWYgZGVmaW5lZChfX01XRVJLU19fKXx8ZGVmaW5lZChhcHBsZWMpfHxkZWZpbmVkKFRISU5LX0MpfHxkZWZpbmVkKF9fU0NfXykKICMgIGRlZmluZSBOT19EVU1NWV9ERUNMCkBAIC0yNDMsNiArMjcwLDE0IEBACiAjICBlbmRpZgogI2VuZGlmCiAKKyNpZm5kZWYgWl9BUkcgLyogZnVuY3Rpb24gcHJvdG90eXBlcyBmb3Igc3RkYXJnICovCisjICBpZiBkZWZpbmVkKFNUREMpIHx8IGRlZmluZWQoWl9IQVZFX1NUREFSR19IKQorIyAgICBkZWZpbmUgWl9BUkcoYXJncykgIGFyZ3MKKyMgIGVsc2UKKyMgICAgZGVmaW5lIFpfQVJHKGFyZ3MpICAoKQorIyAgZW5kaWYKKyNlbmRpZgorCiAvKiBUaGUgZm9sbG93aW5nIGRlZmluaXRpb25zIGZvciBGQVIgYXJlIG5lZWRlZCBvbmx5IGZvciBNU0RPUyBtaXhlZAogICogbW9kZWwgcHJvZ3JhbW1pbmcgKHNtYWxsIG9yIG1lZGl1bSBtb2RlbCB3aXRoIHNvbWUgZmFyIGFsbG9jYXRpb25zKS4KICAqIFRoaXMgd2FzIHRlc3RlZCBvbmx5IHdpdGggTVNDOyBmb3Igb3RoZXIgTVNET1MgY29tcGlsZXJzIHlvdSBtYXkgaGF2ZQpAQCAtMzU2LDEyICszOTEsNDcgQEAKICAgIHR5cGVkZWYgQnl0ZSAgICAgICAqdm9pZHA7CiAjZW5kaWYKIAorI2lmICFkZWZpbmVkKFpfVTQpICYmICFkZWZpbmVkKFpfU09MTykgJiYgZGVmaW5lZChTVERDKQorIyAgaW5jbHVkZSA8bGltaXRzLmg+CisjICBpZiAoVUlOVF9NQVggPT0gMHhmZmZmZmZmZlVMKQorIyAgICBkZWZpbmUgWl9VNCB1bnNpZ25lZAorIyAgZWxpZiAoVUxPTkdfTUFYID09IDB4ZmZmZmZmZmZVTCkKKyMgICAgZGVmaW5lIFpfVTQgdW5zaWduZWQgbG9uZworIyAgZWxpZiAoVVNIUlRfTUFYID09IDB4ZmZmZmZmZmZVTCkKKyMgICAgZGVmaW5lIFpfVTQgdW5zaWduZWQgc2hvcnQKKyMgIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIFpfVTQKKyAgIHR5cGVkZWYgWl9VNCB6X2NyY190OworI2Vsc2UKKyAgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyB6X2NyY190OworI2VuZGlmCisKICNpZmRlZiBIQVZFX1VOSVNURF9IICAgIC8qIG1heSBiZSBzZXQgdG8gI2lmIDEgYnkgLi9jb25maWd1cmUgKi8KICMgIGRlZmluZSBaX0hBVkVfVU5JU1REX0gKICNlbmRpZgogCisjaWZkZWYgSEFWRV9TVERBUkdfSCAgICAvKiBtYXkgYmUgc2V0IHRvICNpZiAxIGJ5IC4vY29uZmlndXJlICovCisjICBkZWZpbmUgWl9IQVZFX1NUREFSR19ICisjZW5kaWYKKwogI2lmZGVmIFNUREMKLSMgIGluY2x1ZGUgPHN5cy90eXBlcy5oPiAgICAvKiBmb3Igb2ZmX3QgKi8KKyMgIGlmbmRlZiBaX1NPTE8KKyMgICAgaW5jbHVkZSA8c3lzL3R5cGVzLmg+ICAgICAgLyogZm9yIG9mZl90ICovCisjICBlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKFNUREMpIHx8IGRlZmluZWQoWl9IQVZFX1NUREFSR19IKQorIyAgaWZuZGVmIFpfU09MTworIyAgICBpbmNsdWRlIDxzdGRhcmcuaD4gICAgICAgICAvKiBmb3IgdmFfbGlzdCAqLworIyAgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgX1dJTjMyCisjICBpZm5kZWYgWl9TT0xPCisjICAgIGluY2x1ZGUgPHN0ZGRlZi5oPiAgICAgICAgIC8qIGZvciB3Y2hhcl90ICovCisjICBlbmRpZgogI2VuZGlmCiAKIC8qIGEgbGl0dGxlIHRyaWNrIHRvIGFjY29tbW9kYXRlIGJvdGggIiNkZWZpbmUgX0xBUkdFRklMRTY0X1NPVVJDRSIgYW5kCkBAIC0zNzAsMjEgKzQ0MCwzOCBAQAogICogYm90aCAiI3VuZGVmIF9MQVJHRUZJTEU2NF9TT1VSQ0UiIGFuZCAiI2RlZmluZSBfTEFSR0VGSUxFNjRfU09VUkNFIDAiIGFzCiAgKiBlcXVpdmFsZW50bHkgcmVxdWVzdGluZyBubyA2NC1iaXQgb3BlcmF0aW9ucwogICovCi0jaWYgLV9MQVJHRUZJTEU2NF9TT1VSQ0UgLSAtMSA9PSAxCisjaWYgZGVmaW5lZChfTEFSR0VGSUxFNjRfU09VUkNFKSAmJiAtX0xBUkdFRklMRTY0X1NPVVJDRSAtIC0xID09IDEKICMgIHVuZGVmIF9MQVJHRUZJTEU2NF9TT1VSQ0UKICNlbmRpZgogCi0jaWYgZGVmaW5lZChaX0hBVkVfVU5JU1REX0gpIHx8IGRlZmluZWQoX0xBUkdFRklMRTY0X1NPVVJDRSkKLSMgIGluY2x1ZGUgPHVuaXN0ZC5oPiAgICAgICAvKiBmb3IgU0VFS18qIGFuZCBvZmZfdCAqLwotIyAgaWZkZWYgVk1TCi0jICAgIGluY2x1ZGUgPHVuaXhpby5oPiAgICAgLyogZm9yIG9mZl90ICovCi0jICBlbmRpZgotIyAgaWZuZGVmIHpfb2ZmX3QKLSMgICAgZGVmaW5lIHpfb2ZmX3Qgb2ZmX3QKKyNpZiBkZWZpbmVkKF9fV0FUQ09NQ19fKSAmJiAhZGVmaW5lZChaX0hBVkVfVU5JU1REX0gpCisjICBkZWZpbmUgWl9IQVZFX1VOSVNURF9ICisjZW5kaWYKKyNpZm5kZWYgWl9TT0xPCisjICBpZiBkZWZpbmVkKFpfSEFWRV9VTklTVERfSCkgfHwgZGVmaW5lZChfTEFSR0VGSUxFNjRfU09VUkNFKQorIyAgICBpbmNsdWRlIDx1bmlzdGQuaD4gICAgICAgICAvKiBmb3IgU0VFS18qLCBvZmZfdCwgYW5kIF9MRlM2NF9MQVJHRUZJTEUgKi8KKyMgICAgaWZkZWYgVk1TCisjICAgICAgaW5jbHVkZSA8dW5peGlvLmg+ICAgICAgIC8qIGZvciBvZmZfdCAqLworIyAgICBlbmRpZgorIyAgICBpZm5kZWYgel9vZmZfdAorIyAgICAgIGRlZmluZSB6X29mZl90IG9mZl90CisjICAgIGVuZGlmCiAjICBlbmRpZgogI2VuZGlmCiAKLSNpZm5kZWYgU0VFS19TRVQKKyNpZiBkZWZpbmVkKF9MRlM2NF9MQVJHRUZJTEUpICYmIF9MRlM2NF9MQVJHRUZJTEUtMAorIyAgZGVmaW5lIFpfTEZTNjQKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfTEFSR0VGSUxFNjRfU09VUkNFKSAmJiBkZWZpbmVkKFpfTEZTNjQpCisjICBkZWZpbmUgWl9MQVJHRTY0CisjZW5kaWYKKworI2lmIGRlZmluZWQoX0ZJTEVfT0ZGU0VUX0JJVFMpICYmIF9GSUxFX09GRlNFVF9CSVRTLTAgPT0gNjQgJiYgZGVmaW5lZChaX0xGUzY0KQorIyAgZGVmaW5lIFpfV0FOVDY0CisjZW5kaWYKKworI2lmICFkZWZpbmVkKFNFRUtfU0VUKSAmJiAhZGVmaW5lZChaX1NPTE8pCiAjICBkZWZpbmUgU0VFS19TRVQgICAgICAgIDAgICAgICAgLyogU2VlayBmcm9tIGJlZ2lubmluZyBvZiBmaWxlLiAgKi8KICMgIGRlZmluZSBTRUVLX0NVUiAgICAgICAgMSAgICAgICAvKiBTZWVrIGZyb20gY3VycmVudCBwb3NpdGlvbi4gICovCiAjICBkZWZpbmUgU0VFS19FTkQgICAgICAgIDIgICAgICAgLyogU2V0IGZpbGUgcG9pbnRlciB0byBFT0YgcGx1cyAib2Zmc2V0IiAqLwpAQCAtMzk0LDE4ICs0ODEsMTQgQEAKICMgIGRlZmluZSB6X29mZl90IGxvbmcKICNlbmRpZgogCi0jaWYgZGVmaW5lZChfTEFSR0VGSUxFNjRfU09VUkNFKSAmJiBfTEZTNjRfTEFSR0VGSUxFLTAKKyNpZiAhZGVmaW5lZChfV0lOMzIpICYmIGRlZmluZWQoWl9MQVJHRTY0KQogIyAgZGVmaW5lIHpfb2ZmNjRfdCBvZmY2NF90CiAjZWxzZQotIyAgZGVmaW5lIHpfb2ZmNjRfdCB6X29mZl90Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoX19PUzQwMF9fKQotIyAgZGVmaW5lIE5PX3ZzbnByaW50ZgotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKF9fTVZTX18pCi0jICBkZWZpbmUgTk9fdnNucHJpbnRmCisjICBpZiBkZWZpbmVkKF9XSU4zMikgJiYgIWRlZmluZWQoX19HTlVDX18pICYmICFkZWZpbmVkKFpfU09MTykKKyMgICAgZGVmaW5lIHpfb2ZmNjRfdCBfX2ludDY0CisjICBlbHNlCisjICAgIGRlZmluZSB6X29mZjY0X3Qgel9vZmZfdAorIyAgZW5kaWYKICNlbmRpZgogCiAvKiBNVlMgbGlua2VyIGRvZXMgbm90IHN1cHBvcnQgZXh0ZXJuYWwgbmFtZXMgbGFyZ2VyIHRoYW4gOCBieXRlcyAqLwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL3pjb25mLmguY21ha2VpbiBiL01vZHVsZXMvemxpYi96Y29uZi5oLmNtYWtlaW4KaW5kZXggYTJmNzFiMS4uMDQzMDE5YyAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL3pjb25mLmguY21ha2VpbgorKysgYi9Nb2R1bGVzL3psaWIvemNvbmYuaC5jbWFrZWluCkBAIC0xLDUgKzEsNSBAQAogLyogemNvbmYuaCAtLSBjb25maWd1cmF0aW9uIG9mIHRoZSB6bGliIGNvbXByZXNzaW9uIGxpYnJhcnkKLSAqIENvcHlyaWdodCAoQykgMTk5NS0yMDEwIEplYW4tbG91cCBHYWlsbHkuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMyBKZWFuLWxvdXAgR2FpbGx5LgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAogICovCiAKQEAgLTE3LDExICsxNywxMyBAQAogICogdGhpcyBwZXJtYW5lbnRseSBpbiB6Y29uZi5oIHVzaW5nICIuL2NvbmZpZ3VyZSAtLXpwcmVmaXgiLgogICovCiAjaWZkZWYgWl9QUkVGSVggICAgIC8qIG1heSBiZSBzZXQgdG8gI2lmIDEgYnkgLi9jb25maWd1cmUgKi8KKyMgIGRlZmluZSBaX1BSRUZJWF9TRVQKIAogLyogYWxsIGxpbmtlZCBzeW1ib2xzICovCiAjICBkZWZpbmUgX2Rpc3RfY29kZSAgICAgICAgICAgIHpfX2Rpc3RfY29kZQogIyAgZGVmaW5lIF9sZW5ndGhfY29kZSAgICAgICAgICB6X19sZW5ndGhfY29kZQogIyAgZGVmaW5lIF90cl9hbGlnbiAgICAgICAgICAgICB6X190cl9hbGlnbgorIyAgZGVmaW5lIF90cl9mbHVzaF9iaXRzICAgICAgICB6X190cl9mbHVzaF9iaXRzCiAjICBkZWZpbmUgX3RyX2ZsdXNoX2Jsb2NrICAgICAgIHpfX3RyX2ZsdXNoX2Jsb2NrCiAjICBkZWZpbmUgX3RyX2luaXQgICAgICAgICAgICAgIHpfX3RyX2luaXQKICMgIGRlZmluZSBfdHJfc3RvcmVkX2Jsb2NrICAgICAgel9fdHJfc3RvcmVkX2Jsb2NrCkBAIC0yOSw5ICszMSwxMSBAQAogIyAgZGVmaW5lIGFkbGVyMzIgICAgICAgICAgICAgICB6X2FkbGVyMzIKICMgIGRlZmluZSBhZGxlcjMyX2NvbWJpbmUgICAgICAgel9hZGxlcjMyX2NvbWJpbmUKICMgIGRlZmluZSBhZGxlcjMyX2NvbWJpbmU2NCAgICAgel9hZGxlcjMyX2NvbWJpbmU2NAotIyAgZGVmaW5lIGNvbXByZXNzICAgICAgICAgICAgICB6X2NvbXByZXNzCi0jICBkZWZpbmUgY29tcHJlc3MyICAgICAgICAgICAgIHpfY29tcHJlc3MyCi0jICBkZWZpbmUgY29tcHJlc3NCb3VuZCAgICAgICAgIHpfY29tcHJlc3NCb3VuZAorIyAgaWZuZGVmIFpfU09MTworIyAgICBkZWZpbmUgY29tcHJlc3MgICAgICAgICAgICAgIHpfY29tcHJlc3MKKyMgICAgZGVmaW5lIGNvbXByZXNzMiAgICAgICAgICAgICB6X2NvbXByZXNzMgorIyAgICBkZWZpbmUgY29tcHJlc3NCb3VuZCAgICAgICAgIHpfY29tcHJlc3NCb3VuZAorIyAgZW5kaWYKICMgIGRlZmluZSBjcmMzMiAgICAgICAgICAgICAgICAgel9jcmMzMgogIyAgZGVmaW5lIGNyYzMyX2NvbWJpbmUgICAgICAgICB6X2NyYzMyX2NvbWJpbmUKICMgIGRlZmluZSBjcmMzMl9jb21iaW5lNjQgICAgICAgel9jcmMzMl9jb21iaW5lNjQKQEAgLTQyLDQ0ICs0Niw1MyBAQAogIyAgZGVmaW5lIGRlZmxhdGVJbml0Ml8gICAgICAgICB6X2RlZmxhdGVJbml0Ml8KICMgIGRlZmluZSBkZWZsYXRlSW5pdF8gICAgICAgICAgel9kZWZsYXRlSW5pdF8KICMgIGRlZmluZSBkZWZsYXRlUGFyYW1zICAgICAgICAgel9kZWZsYXRlUGFyYW1zCisjICBkZWZpbmUgZGVmbGF0ZVBlbmRpbmcgICAgICAgIHpfZGVmbGF0ZVBlbmRpbmcKICMgIGRlZmluZSBkZWZsYXRlUHJpbWUgICAgICAgICAgel9kZWZsYXRlUHJpbWUKICMgIGRlZmluZSBkZWZsYXRlUmVzZXQgICAgICAgICAgel9kZWZsYXRlUmVzZXQKKyMgIGRlZmluZSBkZWZsYXRlUmVzZXRLZWVwICAgICAgel9kZWZsYXRlUmVzZXRLZWVwCiAjICBkZWZpbmUgZGVmbGF0ZVNldERpY3Rpb25hcnkgIHpfZGVmbGF0ZVNldERpY3Rpb25hcnkKICMgIGRlZmluZSBkZWZsYXRlU2V0SGVhZGVyICAgICAgel9kZWZsYXRlU2V0SGVhZGVyCiAjICBkZWZpbmUgZGVmbGF0ZVR1bmUgICAgICAgICAgIHpfZGVmbGF0ZVR1bmUKICMgIGRlZmluZSBkZWZsYXRlX2NvcHlyaWdodCAgICAgel9kZWZsYXRlX2NvcHlyaWdodAogIyAgZGVmaW5lIGdldF9jcmNfdGFibGUgICAgICAgICB6X2dldF9jcmNfdGFibGUKLSMgIGRlZmluZSBnel9lcnJvciAgICAgICAgICAgICAgel9nel9lcnJvcgotIyAgZGVmaW5lIGd6X2ludG1heCAgICAgICAgICAgICB6X2d6X2ludG1heAotIyAgZGVmaW5lIGd6X3N0cndpbmVycm9yICAgICAgICB6X2d6X3N0cndpbmVycm9yCi0jICBkZWZpbmUgZ3pidWZmZXIgICAgICAgICAgICAgIHpfZ3pidWZmZXIKLSMgIGRlZmluZSBnemNsZWFyZXJyICAgICAgICAgICAgel9nemNsZWFyZXJyCi0jICBkZWZpbmUgZ3pjbG9zZSAgICAgICAgICAgICAgIHpfZ3pjbG9zZQotIyAgZGVmaW5lIGd6Y2xvc2VfciAgICAgICAgICAgICB6X2d6Y2xvc2VfcgotIyAgZGVmaW5lIGd6Y2xvc2VfdyAgICAgICAgICAgICB6X2d6Y2xvc2VfdwotIyAgZGVmaW5lIGd6ZGlyZWN0ICAgICAgICAgICAgICB6X2d6ZGlyZWN0Ci0jICBkZWZpbmUgZ3pkb3BlbiAgICAgICAgICAgICAgIHpfZ3pkb3BlbgotIyAgZGVmaW5lIGd6ZW9mICAgICAgICAgICAgICAgICB6X2d6ZW9mCi0jICBkZWZpbmUgZ3plcnJvciAgICAgICAgICAgICAgIHpfZ3plcnJvcgotIyAgZGVmaW5lIGd6Zmx1c2ggICAgICAgICAgICAgICB6X2d6Zmx1c2gKLSMgIGRlZmluZSBnemdldGMgICAgICAgICAgICAgICAgel9nemdldGMKLSMgIGRlZmluZSBnemdldHMgICAgICAgICAgICAgICAgel9nemdldHMKLSMgIGRlZmluZSBnem9mZnNldCAgICAgICAgICAgICAgel9nem9mZnNldAotIyAgZGVmaW5lIGd6b2Zmc2V0NjQgICAgICAgICAgICB6X2d6b2Zmc2V0NjQKLSMgIGRlZmluZSBnem9wZW4gICAgICAgICAgICAgICAgel9nem9wZW4KLSMgIGRlZmluZSBnem9wZW42NCAgICAgICAgICAgICAgel9nem9wZW42NAotIyAgZGVmaW5lIGd6cHJpbnRmICAgICAgICAgICAgICB6X2d6cHJpbnRmCi0jICBkZWZpbmUgZ3pwdXRjICAgICAgICAgICAgICAgIHpfZ3pwdXRjCi0jICBkZWZpbmUgZ3pwdXRzICAgICAgICAgICAgICAgIHpfZ3pwdXRzCi0jICBkZWZpbmUgZ3pyZWFkICAgICAgICAgICAgICAgIHpfZ3pyZWFkCi0jICBkZWZpbmUgZ3pyZXdpbmQgICAgICAgICAgICAgIHpfZ3pyZXdpbmQKLSMgIGRlZmluZSBnenNlZWsgICAgICAgICAgICAgICAgel9nenNlZWsKLSMgIGRlZmluZSBnenNlZWs2NCAgICAgICAgICAgICAgel9nenNlZWs2NAotIyAgZGVmaW5lIGd6c2V0cGFyYW1zICAgICAgICAgICB6X2d6c2V0cGFyYW1zCi0jICBkZWZpbmUgZ3p0ZWxsICAgICAgICAgICAgICAgIHpfZ3p0ZWxsCi0jICBkZWZpbmUgZ3p0ZWxsNjQgICAgICAgICAgICAgIHpfZ3p0ZWxsNjQKLSMgIGRlZmluZSBnenVuZ2V0YyAgICAgICAgICAgICAgel9nenVuZ2V0YwotIyAgZGVmaW5lIGd6d3JpdGUgICAgICAgICAgICAgICB6X2d6d3JpdGUKKyMgIGlmbmRlZiBaX1NPTE8KKyMgICAgZGVmaW5lIGd6X2Vycm9yICAgICAgICAgICAgICB6X2d6X2Vycm9yCisjICAgIGRlZmluZSBnel9pbnRtYXggICAgICAgICAgICAgel9nel9pbnRtYXgKKyMgICAgZGVmaW5lIGd6X3N0cndpbmVycm9yICAgICAgICB6X2d6X3N0cndpbmVycm9yCisjICAgIGRlZmluZSBnemJ1ZmZlciAgICAgICAgICAgICAgel9nemJ1ZmZlcgorIyAgICBkZWZpbmUgZ3pjbGVhcmVyciAgICAgICAgICAgIHpfZ3pjbGVhcmVycgorIyAgICBkZWZpbmUgZ3pjbG9zZSAgICAgICAgICAgICAgIHpfZ3pjbG9zZQorIyAgICBkZWZpbmUgZ3pjbG9zZV9yICAgICAgICAgICAgIHpfZ3pjbG9zZV9yCisjICAgIGRlZmluZSBnemNsb3NlX3cgICAgICAgICAgICAgel9nemNsb3NlX3cKKyMgICAgZGVmaW5lIGd6ZGlyZWN0ICAgICAgICAgICAgICB6X2d6ZGlyZWN0CisjICAgIGRlZmluZSBnemRvcGVuICAgICAgICAgICAgICAgel9nemRvcGVuCisjICAgIGRlZmluZSBnemVvZiAgICAgICAgICAgICAgICAgel9nemVvZgorIyAgICBkZWZpbmUgZ3plcnJvciAgICAgICAgICAgICAgIHpfZ3plcnJvcgorIyAgICBkZWZpbmUgZ3pmbHVzaCAgICAgICAgICAgICAgIHpfZ3pmbHVzaAorIyAgICBkZWZpbmUgZ3pnZXRjICAgICAgICAgICAgICAgIHpfZ3pnZXRjCisjICAgIGRlZmluZSBnemdldGNfICAgICAgICAgICAgICAgel9nemdldGNfCisjICAgIGRlZmluZSBnemdldHMgICAgICAgICAgICAgICAgel9nemdldHMKKyMgICAgZGVmaW5lIGd6b2Zmc2V0ICAgICAgICAgICAgICB6X2d6b2Zmc2V0CisjICAgIGRlZmluZSBnem9mZnNldDY0ICAgICAgICAgICAgel9nem9mZnNldDY0CisjICAgIGRlZmluZSBnem9wZW4gICAgICAgICAgICAgICAgel9nem9wZW4KKyMgICAgZGVmaW5lIGd6b3BlbjY0ICAgICAgICAgICAgICB6X2d6b3BlbjY0CisjICAgIGlmZGVmIF9XSU4zMgorIyAgICAgIGRlZmluZSBnem9wZW5fdyAgICAgICAgICAgICAgel9nem9wZW5fdworIyAgICBlbmRpZgorIyAgICBkZWZpbmUgZ3pwcmludGYgICAgICAgICAgICAgIHpfZ3pwcmludGYKKyMgICAgZGVmaW5lIGd6dnByaW50ZiAgICAgICAgICAgICB6X2d6dnByaW50ZgorIyAgICBkZWZpbmUgZ3pwdXRjICAgICAgICAgICAgICAgIHpfZ3pwdXRjCisjICAgIGRlZmluZSBnenB1dHMgICAgICAgICAgICAgICAgel9nenB1dHMKKyMgICAgZGVmaW5lIGd6cmVhZCAgICAgICAgICAgICAgICB6X2d6cmVhZAorIyAgICBkZWZpbmUgZ3pyZXdpbmQgICAgICAgICAgICAgIHpfZ3pyZXdpbmQKKyMgICAgZGVmaW5lIGd6c2VlayAgICAgICAgICAgICAgICB6X2d6c2VlaworIyAgICBkZWZpbmUgZ3pzZWVrNjQgICAgICAgICAgICAgIHpfZ3pzZWVrNjQKKyMgICAgZGVmaW5lIGd6c2V0cGFyYW1zICAgICAgICAgICB6X2d6c2V0cGFyYW1zCisjICAgIGRlZmluZSBnenRlbGwgICAgICAgICAgICAgICAgel9nenRlbGwKKyMgICAgZGVmaW5lIGd6dGVsbDY0ICAgICAgICAgICAgICB6X2d6dGVsbDY0CisjICAgIGRlZmluZSBnenVuZ2V0YyAgICAgICAgICAgICAgel9nenVuZ2V0YworIyAgICBkZWZpbmUgZ3p3cml0ZSAgICAgICAgICAgICAgIHpfZ3p3cml0ZQorIyAgZW5kaWYKICMgIGRlZmluZSBpbmZsYXRlICAgICAgICAgICAgICAgel9pbmZsYXRlCiAjICBkZWZpbmUgaW5mbGF0ZUJhY2sgICAgICAgICAgIHpfaW5mbGF0ZUJhY2sKICMgIGRlZmluZSBpbmZsYXRlQmFja0VuZCAgICAgICAgel9pbmZsYXRlQmFja0VuZApAQCAtOTQsMTYgKzEwNywyMiBAQAogIyAgZGVmaW5lIGluZmxhdGVSZXNldCAgICAgICAgICB6X2luZmxhdGVSZXNldAogIyAgZGVmaW5lIGluZmxhdGVSZXNldDIgICAgICAgICB6X2luZmxhdGVSZXNldDIKICMgIGRlZmluZSBpbmZsYXRlU2V0RGljdGlvbmFyeSAgel9pbmZsYXRlU2V0RGljdGlvbmFyeQorIyAgZGVmaW5lIGluZmxhdGVHZXREaWN0aW9uYXJ5ICB6X2luZmxhdGVHZXREaWN0aW9uYXJ5CiAjICBkZWZpbmUgaW5mbGF0ZVN5bmMgICAgICAgICAgIHpfaW5mbGF0ZVN5bmMKICMgIGRlZmluZSBpbmZsYXRlU3luY1BvaW50ICAgICAgel9pbmZsYXRlU3luY1BvaW50CiAjICBkZWZpbmUgaW5mbGF0ZVVuZGVybWluZSAgICAgIHpfaW5mbGF0ZVVuZGVybWluZQorIyAgZGVmaW5lIGluZmxhdGVSZXNldEtlZXAgICAgICB6X2luZmxhdGVSZXNldEtlZXAKICMgIGRlZmluZSBpbmZsYXRlX2NvcHlyaWdodCAgICAgel9pbmZsYXRlX2NvcHlyaWdodAogIyAgZGVmaW5lIGluZmxhdGVfZmFzdCAgICAgICAgICB6X2luZmxhdGVfZmFzdAogIyAgZGVmaW5lIGluZmxhdGVfdGFibGUgICAgICAgICB6X2luZmxhdGVfdGFibGUKLSMgIGRlZmluZSB1bmNvbXByZXNzICAgICAgICAgICAgel91bmNvbXByZXNzCisjICBpZm5kZWYgWl9TT0xPCisjICAgIGRlZmluZSB1bmNvbXByZXNzICAgICAgICAgICAgel91bmNvbXByZXNzCisjICBlbmRpZgogIyAgZGVmaW5lIHpFcnJvciAgICAgICAgICAgICAgICB6X3pFcnJvcgotIyAgZGVmaW5lIHpjYWxsb2MgICAgICAgICAgICAgICB6X3pjYWxsb2MKLSMgIGRlZmluZSB6Y2ZyZWUgICAgICAgICAgICAgICAgel96Y2ZyZWUKKyMgIGlmbmRlZiBaX1NPTE8KKyMgICAgZGVmaW5lIHpjYWxsb2MgICAgICAgICAgICAgICB6X3pjYWxsb2MKKyMgICAgZGVmaW5lIHpjZnJlZSAgICAgICAgICAgICAgICB6X3pjZnJlZQorIyAgZW5kaWYKICMgIGRlZmluZSB6bGliQ29tcGlsZUZsYWdzICAgICAgel96bGliQ29tcGlsZUZsYWdzCiAjICBkZWZpbmUgemxpYlZlcnNpb24gICAgICAgICAgIHpfemxpYlZlcnNpb24KIApAQCAtMTEzLDcgKzEzMiw5IEBACiAjICBkZWZpbmUgYWxsb2NfZnVuYyAgICAgICAgICAgIHpfYWxsb2NfZnVuYwogIyAgZGVmaW5lIGNoYXJmICAgICAgICAgICAgICAgICB6X2NoYXJmCiAjICBkZWZpbmUgZnJlZV9mdW5jICAgICAgICAgICAgIHpfZnJlZV9mdW5jCi0jICBkZWZpbmUgZ3pGaWxlICAgICAgICAgICAgICAgIHpfZ3pGaWxlCisjICBpZm5kZWYgWl9TT0xPCisjICAgIGRlZmluZSBnekZpbGUgICAgICAgICAgICAgICAgel9nekZpbGUKKyMgIGVuZGlmCiAjICBkZWZpbmUgZ3pfaGVhZGVyICAgICAgICAgICAgIHpfZ3pfaGVhZGVyCiAjICBkZWZpbmUgZ3pfaGVhZGVycCAgICAgICAgICAgIHpfZ3pfaGVhZGVycAogIyAgZGVmaW5lIGluX2Z1bmMgICAgICAgICAgICAgICB6X2luX2Z1bmMKQEAgLTE5OSw2ICsyMjAsMTIgQEAKICMgIGVuZGlmCiAjZW5kaWYKIAorI2lmIGRlZmluZWQoWkxJQl9DT05TVCkgJiYgIWRlZmluZWQoel9jb25zdCkKKyMgIGRlZmluZSB6X2NvbnN0IGNvbnN0CisjZWxzZQorIyAgZGVmaW5lIHpfY29uc3QKKyNlbmRpZgorCiAvKiBTb21lIE1hYyBjb21waWxlcnMgbWVyZ2UgYWxsIC5oIGZpbGVzIGluY29ycmVjdGx5OiAqLwogI2lmIGRlZmluZWQoX19NV0VSS1NfXyl8fGRlZmluZWQoYXBwbGVjKXx8ZGVmaW5lZChUSElOS19DKXx8ZGVmaW5lZChfX1NDX18pCiAjICBkZWZpbmUgTk9fRFVNTVlfREVDTApAQCAtMjQ1LDYgKzI3MiwxNCBAQAogIyAgZW5kaWYKICNlbmRpZgogCisjaWZuZGVmIFpfQVJHIC8qIGZ1bmN0aW9uIHByb3RvdHlwZXMgZm9yIHN0ZGFyZyAqLworIyAgaWYgZGVmaW5lZChTVERDKSB8fCBkZWZpbmVkKFpfSEFWRV9TVERBUkdfSCkKKyMgICAgZGVmaW5lIFpfQVJHKGFyZ3MpICBhcmdzCisjICBlbHNlCisjICAgIGRlZmluZSBaX0FSRyhhcmdzKSAgKCkKKyMgIGVuZGlmCisjZW5kaWYKKwogLyogVGhlIGZvbGxvd2luZyBkZWZpbml0aW9ucyBmb3IgRkFSIGFyZSBuZWVkZWQgb25seSBmb3IgTVNET1MgbWl4ZWQKICAqIG1vZGVsIHByb2dyYW1taW5nIChzbWFsbCBvciBtZWRpdW0gbW9kZWwgd2l0aCBzb21lIGZhciBhbGxvY2F0aW9ucykuCiAgKiBUaGlzIHdhcyB0ZXN0ZWQgb25seSB3aXRoIE1TQzsgZm9yIG90aGVyIE1TRE9TIGNvbXBpbGVycyB5b3UgbWF5IGhhdmUKQEAgLTM1OCwxMiArMzkzLDQ3IEBACiAgICB0eXBlZGVmIEJ5dGUgICAgICAgKnZvaWRwOwogI2VuZGlmCiAKKyNpZiAhZGVmaW5lZChaX1U0KSAmJiAhZGVmaW5lZChaX1NPTE8pICYmIGRlZmluZWQoU1REQykKKyMgIGluY2x1ZGUgPGxpbWl0cy5oPgorIyAgaWYgKFVJTlRfTUFYID09IDB4ZmZmZmZmZmZVTCkKKyMgICAgZGVmaW5lIFpfVTQgdW5zaWduZWQKKyMgIGVsaWYgKFVMT05HX01BWCA9PSAweGZmZmZmZmZmVUwpCisjICAgIGRlZmluZSBaX1U0IHVuc2lnbmVkIGxvbmcKKyMgIGVsaWYgKFVTSFJUX01BWCA9PSAweGZmZmZmZmZmVUwpCisjICAgIGRlZmluZSBaX1U0IHVuc2lnbmVkIHNob3J0CisjICBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBaX1U0CisgICB0eXBlZGVmIFpfVTQgel9jcmNfdDsKKyNlbHNlCisgICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgel9jcmNfdDsKKyNlbmRpZgorCiAjaWZkZWYgSEFWRV9VTklTVERfSCAgICAvKiBtYXkgYmUgc2V0IHRvICNpZiAxIGJ5IC4vY29uZmlndXJlICovCiAjICBkZWZpbmUgWl9IQVZFX1VOSVNURF9ICiAjZW5kaWYKIAorI2lmZGVmIEhBVkVfU1REQVJHX0ggICAgLyogbWF5IGJlIHNldCB0byAjaWYgMSBieSAuL2NvbmZpZ3VyZSAqLworIyAgZGVmaW5lIFpfSEFWRV9TVERBUkdfSAorI2VuZGlmCisKICNpZmRlZiBTVERDCi0jICBpbmNsdWRlIDxzeXMvdHlwZXMuaD4gICAgLyogZm9yIG9mZl90ICovCisjICBpZm5kZWYgWl9TT0xPCisjICAgIGluY2x1ZGUgPHN5cy90eXBlcy5oPiAgICAgIC8qIGZvciBvZmZfdCAqLworIyAgZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChTVERDKSB8fCBkZWZpbmVkKFpfSEFWRV9TVERBUkdfSCkKKyMgIGlmbmRlZiBaX1NPTE8KKyMgICAgaW5jbHVkZSA8c3RkYXJnLmg+ICAgICAgICAgLyogZm9yIHZhX2xpc3QgKi8KKyMgIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIF9XSU4zMgorIyAgaWZuZGVmIFpfU09MTworIyAgICBpbmNsdWRlIDxzdGRkZWYuaD4gICAgICAgICAvKiBmb3Igd2NoYXJfdCAqLworIyAgZW5kaWYKICNlbmRpZgogCiAvKiBhIGxpdHRsZSB0cmljayB0byBhY2NvbW1vZGF0ZSBib3RoICIjZGVmaW5lIF9MQVJHRUZJTEU2NF9TT1VSQ0UiIGFuZApAQCAtMzcyLDIxICs0NDIsMzggQEAKICAqIGJvdGggIiN1bmRlZiBfTEFSR0VGSUxFNjRfU09VUkNFIiBhbmQgIiNkZWZpbmUgX0xBUkdFRklMRTY0X1NPVVJDRSAwIiBhcwogICogZXF1aXZhbGVudGx5IHJlcXVlc3Rpbmcgbm8gNjQtYml0IG9wZXJhdGlvbnMKICAqLwotI2lmIC1fTEFSR0VGSUxFNjRfU09VUkNFIC0gLTEgPT0gMQorI2lmIGRlZmluZWQoX0xBUkdFRklMRTY0X1NPVVJDRSkgJiYgLV9MQVJHRUZJTEU2NF9TT1VSQ0UgLSAtMSA9PSAxCiAjICB1bmRlZiBfTEFSR0VGSUxFNjRfU09VUkNFCiAjZW5kaWYKIAotI2lmIGRlZmluZWQoWl9IQVZFX1VOSVNURF9IKSB8fCBkZWZpbmVkKF9MQVJHRUZJTEU2NF9TT1VSQ0UpCi0jICBpbmNsdWRlIDx1bmlzdGQuaD4gICAgICAgLyogZm9yIFNFRUtfKiBhbmQgb2ZmX3QgKi8KLSMgIGlmZGVmIFZNUwotIyAgICBpbmNsdWRlIDx1bml4aW8uaD4gICAgIC8qIGZvciBvZmZfdCAqLwotIyAgZW5kaWYKLSMgIGlmbmRlZiB6X29mZl90Ci0jICAgIGRlZmluZSB6X29mZl90IG9mZl90CisjaWYgZGVmaW5lZChfX1dBVENPTUNfXykgJiYgIWRlZmluZWQoWl9IQVZFX1VOSVNURF9IKQorIyAgZGVmaW5lIFpfSEFWRV9VTklTVERfSAorI2VuZGlmCisjaWZuZGVmIFpfU09MTworIyAgaWYgZGVmaW5lZChaX0hBVkVfVU5JU1REX0gpIHx8IGRlZmluZWQoX0xBUkdFRklMRTY0X1NPVVJDRSkKKyMgICAgaW5jbHVkZSA8dW5pc3RkLmg+ICAgICAgICAgLyogZm9yIFNFRUtfKiwgb2ZmX3QsIGFuZCBfTEZTNjRfTEFSR0VGSUxFICovCisjICAgIGlmZGVmIFZNUworIyAgICAgIGluY2x1ZGUgPHVuaXhpby5oPiAgICAgICAvKiBmb3Igb2ZmX3QgKi8KKyMgICAgZW5kaWYKKyMgICAgaWZuZGVmIHpfb2ZmX3QKKyMgICAgICBkZWZpbmUgel9vZmZfdCBvZmZfdAorIyAgICBlbmRpZgogIyAgZW5kaWYKICNlbmRpZgogCi0jaWZuZGVmIFNFRUtfU0VUCisjaWYgZGVmaW5lZChfTEZTNjRfTEFSR0VGSUxFKSAmJiBfTEZTNjRfTEFSR0VGSUxFLTAKKyMgIGRlZmluZSBaX0xGUzY0CisjZW5kaWYKKworI2lmIGRlZmluZWQoX0xBUkdFRklMRTY0X1NPVVJDRSkgJiYgZGVmaW5lZChaX0xGUzY0KQorIyAgZGVmaW5lIFpfTEFSR0U2NAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9GSUxFX09GRlNFVF9CSVRTKSAmJiBfRklMRV9PRkZTRVRfQklUUy0wID09IDY0ICYmIGRlZmluZWQoWl9MRlM2NCkKKyMgIGRlZmluZSBaX1dBTlQ2NAorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChTRUVLX1NFVCkgJiYgIWRlZmluZWQoWl9TT0xPKQogIyAgZGVmaW5lIFNFRUtfU0VUICAgICAgICAwICAgICAgIC8qIFNlZWsgZnJvbSBiZWdpbm5pbmcgb2YgZmlsZS4gICovCiAjICBkZWZpbmUgU0VFS19DVVIgICAgICAgIDEgICAgICAgLyogU2VlayBmcm9tIGN1cnJlbnQgcG9zaXRpb24uICAqLwogIyAgZGVmaW5lIFNFRUtfRU5EICAgICAgICAyICAgICAgIC8qIFNldCBmaWxlIHBvaW50ZXIgdG8gRU9GIHBsdXMgIm9mZnNldCIgKi8KQEAgLTM5NiwxOCArNDgzLDE0IEBACiAjICBkZWZpbmUgel9vZmZfdCBsb25nCiAjZW5kaWYKIAotI2lmIGRlZmluZWQoX0xBUkdFRklMRTY0X1NPVVJDRSkgJiYgX0xGUzY0X0xBUkdFRklMRS0wCisjaWYgIWRlZmluZWQoX1dJTjMyKSAmJiBkZWZpbmVkKFpfTEFSR0U2NCkKICMgIGRlZmluZSB6X29mZjY0X3Qgb2ZmNjRfdAogI2Vsc2UKLSMgIGRlZmluZSB6X29mZjY0X3Qgel9vZmZfdAotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKF9fT1M0MDBfXykKLSMgIGRlZmluZSBOT192c25wcmludGYKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChfX01WU19fKQotIyAgZGVmaW5lIE5PX3ZzbnByaW50ZgorIyAgaWYgZGVmaW5lZChfV0lOMzIpICYmICFkZWZpbmVkKF9fR05VQ19fKSAmJiAhZGVmaW5lZChaX1NPTE8pCisjICAgIGRlZmluZSB6X29mZjY0X3QgX19pbnQ2NAorIyAgZWxzZQorIyAgICBkZWZpbmUgel9vZmY2NF90IHpfb2ZmX3QKKyMgIGVuZGlmCiAjZW5kaWYKIAogLyogTVZTIGxpbmtlciBkb2VzIG5vdCBzdXBwb3J0IGV4dGVybmFsIG5hbWVzIGxhcmdlciB0aGFuIDggYnl0ZXMgKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi96Y29uZi5oLmluIGIvTW9kdWxlcy96bGliL3pjb25mLmguaW4KaW5kZXggMDJjZTU2Yy4uOTk4N2E3NyAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL3pjb25mLmguaW4KKysrIGIvTW9kdWxlcy96bGliL3pjb25mLmguaW4KQEAgLTEsNSArMSw1IEBACiAvKiB6Y29uZi5oIC0tIGNvbmZpZ3VyYXRpb24gb2YgdGhlIHpsaWIgY29tcHJlc3Npb24gbGlicmFyeQotICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMTAgSmVhbi1sb3VwIEdhaWxseS4KKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDEzIEplYW4tbG91cCBHYWlsbHkuCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCiAgKi8KIApAQCAtMTUsMTEgKzE1LDEzIEBACiAgKiB0aGlzIHBlcm1hbmVudGx5IGluIHpjb25mLmggdXNpbmcgIi4vY29uZmlndXJlIC0tenByZWZpeCIuCiAgKi8KICNpZmRlZiBaX1BSRUZJWCAgICAgLyogbWF5IGJlIHNldCB0byAjaWYgMSBieSAuL2NvbmZpZ3VyZSAqLworIyAgZGVmaW5lIFpfUFJFRklYX1NFVAogCiAvKiBhbGwgbGlua2VkIHN5bWJvbHMgKi8KICMgIGRlZmluZSBfZGlzdF9jb2RlICAgICAgICAgICAgel9fZGlzdF9jb2RlCiAjICBkZWZpbmUgX2xlbmd0aF9jb2RlICAgICAgICAgIHpfX2xlbmd0aF9jb2RlCiAjICBkZWZpbmUgX3RyX2FsaWduICAgICAgICAgICAgIHpfX3RyX2FsaWduCisjICBkZWZpbmUgX3RyX2ZsdXNoX2JpdHMgICAgICAgIHpfX3RyX2ZsdXNoX2JpdHMKICMgIGRlZmluZSBfdHJfZmx1c2hfYmxvY2sgICAgICAgel9fdHJfZmx1c2hfYmxvY2sKICMgIGRlZmluZSBfdHJfaW5pdCAgICAgICAgICAgICAgel9fdHJfaW5pdAogIyAgZGVmaW5lIF90cl9zdG9yZWRfYmxvY2sgICAgICB6X190cl9zdG9yZWRfYmxvY2sKQEAgLTI3LDkgKzI5LDExIEBACiAjICBkZWZpbmUgYWRsZXIzMiAgICAgICAgICAgICAgIHpfYWRsZXIzMgogIyAgZGVmaW5lIGFkbGVyMzJfY29tYmluZSAgICAgICB6X2FkbGVyMzJfY29tYmluZQogIyAgZGVmaW5lIGFkbGVyMzJfY29tYmluZTY0ICAgICB6X2FkbGVyMzJfY29tYmluZTY0Ci0jICBkZWZpbmUgY29tcHJlc3MgICAgICAgICAgICAgIHpfY29tcHJlc3MKLSMgIGRlZmluZSBjb21wcmVzczIgICAgICAgICAgICAgel9jb21wcmVzczIKLSMgIGRlZmluZSBjb21wcmVzc0JvdW5kICAgICAgICAgel9jb21wcmVzc0JvdW5kCisjICBpZm5kZWYgWl9TT0xPCisjICAgIGRlZmluZSBjb21wcmVzcyAgICAgICAgICAgICAgel9jb21wcmVzcworIyAgICBkZWZpbmUgY29tcHJlc3MyICAgICAgICAgICAgIHpfY29tcHJlc3MyCisjICAgIGRlZmluZSBjb21wcmVzc0JvdW5kICAgICAgICAgel9jb21wcmVzc0JvdW5kCisjICBlbmRpZgogIyAgZGVmaW5lIGNyYzMyICAgICAgICAgICAgICAgICB6X2NyYzMyCiAjICBkZWZpbmUgY3JjMzJfY29tYmluZSAgICAgICAgIHpfY3JjMzJfY29tYmluZQogIyAgZGVmaW5lIGNyYzMyX2NvbWJpbmU2NCAgICAgICB6X2NyYzMyX2NvbWJpbmU2NApAQCAtNDAsNDQgKzQ0LDUzIEBACiAjICBkZWZpbmUgZGVmbGF0ZUluaXQyXyAgICAgICAgIHpfZGVmbGF0ZUluaXQyXwogIyAgZGVmaW5lIGRlZmxhdGVJbml0XyAgICAgICAgICB6X2RlZmxhdGVJbml0XwogIyAgZGVmaW5lIGRlZmxhdGVQYXJhbXMgICAgICAgICB6X2RlZmxhdGVQYXJhbXMKKyMgIGRlZmluZSBkZWZsYXRlUGVuZGluZyAgICAgICAgel9kZWZsYXRlUGVuZGluZwogIyAgZGVmaW5lIGRlZmxhdGVQcmltZSAgICAgICAgICB6X2RlZmxhdGVQcmltZQogIyAgZGVmaW5lIGRlZmxhdGVSZXNldCAgICAgICAgICB6X2RlZmxhdGVSZXNldAorIyAgZGVmaW5lIGRlZmxhdGVSZXNldEtlZXAgICAgICB6X2RlZmxhdGVSZXNldEtlZXAKICMgIGRlZmluZSBkZWZsYXRlU2V0RGljdGlvbmFyeSAgel9kZWZsYXRlU2V0RGljdGlvbmFyeQogIyAgZGVmaW5lIGRlZmxhdGVTZXRIZWFkZXIgICAgICB6X2RlZmxhdGVTZXRIZWFkZXIKICMgIGRlZmluZSBkZWZsYXRlVHVuZSAgICAgICAgICAgel9kZWZsYXRlVHVuZQogIyAgZGVmaW5lIGRlZmxhdGVfY29weXJpZ2h0ICAgICB6X2RlZmxhdGVfY29weXJpZ2h0CiAjICBkZWZpbmUgZ2V0X2NyY190YWJsZSAgICAgICAgIHpfZ2V0X2NyY190YWJsZQotIyAgZGVmaW5lIGd6X2Vycm9yICAgICAgICAgICAgICB6X2d6X2Vycm9yCi0jICBkZWZpbmUgZ3pfaW50bWF4ICAgICAgICAgICAgIHpfZ3pfaW50bWF4Ci0jICBkZWZpbmUgZ3pfc3Ryd2luZXJyb3IgICAgICAgIHpfZ3pfc3Ryd2luZXJyb3IKLSMgIGRlZmluZSBnemJ1ZmZlciAgICAgICAgICAgICAgel9nemJ1ZmZlcgotIyAgZGVmaW5lIGd6Y2xlYXJlcnIgICAgICAgICAgICB6X2d6Y2xlYXJlcnIKLSMgIGRlZmluZSBnemNsb3NlICAgICAgICAgICAgICAgel9nemNsb3NlCi0jICBkZWZpbmUgZ3pjbG9zZV9yICAgICAgICAgICAgIHpfZ3pjbG9zZV9yCi0jICBkZWZpbmUgZ3pjbG9zZV93ICAgICAgICAgICAgIHpfZ3pjbG9zZV93Ci0jICBkZWZpbmUgZ3pkaXJlY3QgICAgICAgICAgICAgIHpfZ3pkaXJlY3QKLSMgIGRlZmluZSBnemRvcGVuICAgICAgICAgICAgICAgel9nemRvcGVuCi0jICBkZWZpbmUgZ3plb2YgICAgICAgICAgICAgICAgIHpfZ3plb2YKLSMgIGRlZmluZSBnemVycm9yICAgICAgICAgICAgICAgel9nemVycm9yCi0jICBkZWZpbmUgZ3pmbHVzaCAgICAgICAgICAgICAgIHpfZ3pmbHVzaAotIyAgZGVmaW5lIGd6Z2V0YyAgICAgICAgICAgICAgICB6X2d6Z2V0YwotIyAgZGVmaW5lIGd6Z2V0cyAgICAgICAgICAgICAgICB6X2d6Z2V0cwotIyAgZGVmaW5lIGd6b2Zmc2V0ICAgICAgICAgICAgICB6X2d6b2Zmc2V0Ci0jICBkZWZpbmUgZ3pvZmZzZXQ2NCAgICAgICAgICAgIHpfZ3pvZmZzZXQ2NAotIyAgZGVmaW5lIGd6b3BlbiAgICAgICAgICAgICAgICB6X2d6b3BlbgotIyAgZGVmaW5lIGd6b3BlbjY0ICAgICAgICAgICAgICB6X2d6b3BlbjY0Ci0jICBkZWZpbmUgZ3pwcmludGYgICAgICAgICAgICAgIHpfZ3pwcmludGYKLSMgIGRlZmluZSBnenB1dGMgICAgICAgICAgICAgICAgel9nenB1dGMKLSMgIGRlZmluZSBnenB1dHMgICAgICAgICAgICAgICAgel9nenB1dHMKLSMgIGRlZmluZSBnenJlYWQgICAgICAgICAgICAgICAgel9nenJlYWQKLSMgIGRlZmluZSBnenJld2luZCAgICAgICAgICAgICAgel9nenJld2luZAotIyAgZGVmaW5lIGd6c2VlayAgICAgICAgICAgICAgICB6X2d6c2VlawotIyAgZGVmaW5lIGd6c2VlazY0ICAgICAgICAgICAgICB6X2d6c2VlazY0Ci0jICBkZWZpbmUgZ3pzZXRwYXJhbXMgICAgICAgICAgIHpfZ3pzZXRwYXJhbXMKLSMgIGRlZmluZSBnenRlbGwgICAgICAgICAgICAgICAgel9nenRlbGwKLSMgIGRlZmluZSBnenRlbGw2NCAgICAgICAgICAgICAgel9nenRlbGw2NAotIyAgZGVmaW5lIGd6dW5nZXRjICAgICAgICAgICAgICB6X2d6dW5nZXRjCi0jICBkZWZpbmUgZ3p3cml0ZSAgICAgICAgICAgICAgIHpfZ3p3cml0ZQorIyAgaWZuZGVmIFpfU09MTworIyAgICBkZWZpbmUgZ3pfZXJyb3IgICAgICAgICAgICAgIHpfZ3pfZXJyb3IKKyMgICAgZGVmaW5lIGd6X2ludG1heCAgICAgICAgICAgICB6X2d6X2ludG1heAorIyAgICBkZWZpbmUgZ3pfc3Ryd2luZXJyb3IgICAgICAgIHpfZ3pfc3Ryd2luZXJyb3IKKyMgICAgZGVmaW5lIGd6YnVmZmVyICAgICAgICAgICAgICB6X2d6YnVmZmVyCisjICAgIGRlZmluZSBnemNsZWFyZXJyICAgICAgICAgICAgel9nemNsZWFyZXJyCisjICAgIGRlZmluZSBnemNsb3NlICAgICAgICAgICAgICAgel9nemNsb3NlCisjICAgIGRlZmluZSBnemNsb3NlX3IgICAgICAgICAgICAgel9nemNsb3NlX3IKKyMgICAgZGVmaW5lIGd6Y2xvc2VfdyAgICAgICAgICAgICB6X2d6Y2xvc2VfdworIyAgICBkZWZpbmUgZ3pkaXJlY3QgICAgICAgICAgICAgIHpfZ3pkaXJlY3QKKyMgICAgZGVmaW5lIGd6ZG9wZW4gICAgICAgICAgICAgICB6X2d6ZG9wZW4KKyMgICAgZGVmaW5lIGd6ZW9mICAgICAgICAgICAgICAgICB6X2d6ZW9mCisjICAgIGRlZmluZSBnemVycm9yICAgICAgICAgICAgICAgel9nemVycm9yCisjICAgIGRlZmluZSBnemZsdXNoICAgICAgICAgICAgICAgel9nemZsdXNoCisjICAgIGRlZmluZSBnemdldGMgICAgICAgICAgICAgICAgel9nemdldGMKKyMgICAgZGVmaW5lIGd6Z2V0Y18gICAgICAgICAgICAgICB6X2d6Z2V0Y18KKyMgICAgZGVmaW5lIGd6Z2V0cyAgICAgICAgICAgICAgICB6X2d6Z2V0cworIyAgICBkZWZpbmUgZ3pvZmZzZXQgICAgICAgICAgICAgIHpfZ3pvZmZzZXQKKyMgICAgZGVmaW5lIGd6b2Zmc2V0NjQgICAgICAgICAgICB6X2d6b2Zmc2V0NjQKKyMgICAgZGVmaW5lIGd6b3BlbiAgICAgICAgICAgICAgICB6X2d6b3BlbgorIyAgICBkZWZpbmUgZ3pvcGVuNjQgICAgICAgICAgICAgIHpfZ3pvcGVuNjQKKyMgICAgaWZkZWYgX1dJTjMyCisjICAgICAgZGVmaW5lIGd6b3Blbl93ICAgICAgICAgICAgICB6X2d6b3Blbl93CisjICAgIGVuZGlmCisjICAgIGRlZmluZSBnenByaW50ZiAgICAgICAgICAgICAgel9nenByaW50ZgorIyAgICBkZWZpbmUgZ3p2cHJpbnRmICAgICAgICAgICAgIHpfZ3p2cHJpbnRmCisjICAgIGRlZmluZSBnenB1dGMgICAgICAgICAgICAgICAgel9nenB1dGMKKyMgICAgZGVmaW5lIGd6cHV0cyAgICAgICAgICAgICAgICB6X2d6cHV0cworIyAgICBkZWZpbmUgZ3pyZWFkICAgICAgICAgICAgICAgIHpfZ3pyZWFkCisjICAgIGRlZmluZSBnenJld2luZCAgICAgICAgICAgICAgel9nenJld2luZAorIyAgICBkZWZpbmUgZ3pzZWVrICAgICAgICAgICAgICAgIHpfZ3pzZWVrCisjICAgIGRlZmluZSBnenNlZWs2NCAgICAgICAgICAgICAgel9nenNlZWs2NAorIyAgICBkZWZpbmUgZ3pzZXRwYXJhbXMgICAgICAgICAgIHpfZ3pzZXRwYXJhbXMKKyMgICAgZGVmaW5lIGd6dGVsbCAgICAgICAgICAgICAgICB6X2d6dGVsbAorIyAgICBkZWZpbmUgZ3p0ZWxsNjQgICAgICAgICAgICAgIHpfZ3p0ZWxsNjQKKyMgICAgZGVmaW5lIGd6dW5nZXRjICAgICAgICAgICAgICB6X2d6dW5nZXRjCisjICAgIGRlZmluZSBnendyaXRlICAgICAgICAgICAgICAgel9nendyaXRlCisjICBlbmRpZgogIyAgZGVmaW5lIGluZmxhdGUgICAgICAgICAgICAgICB6X2luZmxhdGUKICMgIGRlZmluZSBpbmZsYXRlQmFjayAgICAgICAgICAgel9pbmZsYXRlQmFjawogIyAgZGVmaW5lIGluZmxhdGVCYWNrRW5kICAgICAgICB6X2luZmxhdGVCYWNrRW5kCkBAIC05MiwxNiArMTA1LDIyIEBACiAjICBkZWZpbmUgaW5mbGF0ZVJlc2V0ICAgICAgICAgIHpfaW5mbGF0ZVJlc2V0CiAjICBkZWZpbmUgaW5mbGF0ZVJlc2V0MiAgICAgICAgIHpfaW5mbGF0ZVJlc2V0MgogIyAgZGVmaW5lIGluZmxhdGVTZXREaWN0aW9uYXJ5ICB6X2luZmxhdGVTZXREaWN0aW9uYXJ5CisjICBkZWZpbmUgaW5mbGF0ZUdldERpY3Rpb25hcnkgIHpfaW5mbGF0ZUdldERpY3Rpb25hcnkKICMgIGRlZmluZSBpbmZsYXRlU3luYyAgICAgICAgICAgel9pbmZsYXRlU3luYwogIyAgZGVmaW5lIGluZmxhdGVTeW5jUG9pbnQgICAgICB6X2luZmxhdGVTeW5jUG9pbnQKICMgIGRlZmluZSBpbmZsYXRlVW5kZXJtaW5lICAgICAgel9pbmZsYXRlVW5kZXJtaW5lCisjICBkZWZpbmUgaW5mbGF0ZVJlc2V0S2VlcCAgICAgIHpfaW5mbGF0ZVJlc2V0S2VlcAogIyAgZGVmaW5lIGluZmxhdGVfY29weXJpZ2h0ICAgICB6X2luZmxhdGVfY29weXJpZ2h0CiAjICBkZWZpbmUgaW5mbGF0ZV9mYXN0ICAgICAgICAgIHpfaW5mbGF0ZV9mYXN0CiAjICBkZWZpbmUgaW5mbGF0ZV90YWJsZSAgICAgICAgIHpfaW5mbGF0ZV90YWJsZQotIyAgZGVmaW5lIHVuY29tcHJlc3MgICAgICAgICAgICB6X3VuY29tcHJlc3MKKyMgIGlmbmRlZiBaX1NPTE8KKyMgICAgZGVmaW5lIHVuY29tcHJlc3MgICAgICAgICAgICB6X3VuY29tcHJlc3MKKyMgIGVuZGlmCiAjICBkZWZpbmUgekVycm9yICAgICAgICAgICAgICAgIHpfekVycm9yCi0jICBkZWZpbmUgemNhbGxvYyAgICAgICAgICAgICAgIHpfemNhbGxvYwotIyAgZGVmaW5lIHpjZnJlZSAgICAgICAgICAgICAgICB6X3pjZnJlZQorIyAgaWZuZGVmIFpfU09MTworIyAgICBkZWZpbmUgemNhbGxvYyAgICAgICAgICAgICAgIHpfemNhbGxvYworIyAgICBkZWZpbmUgemNmcmVlICAgICAgICAgICAgICAgIHpfemNmcmVlCisjICBlbmRpZgogIyAgZGVmaW5lIHpsaWJDb21waWxlRmxhZ3MgICAgICB6X3psaWJDb21waWxlRmxhZ3MKICMgIGRlZmluZSB6bGliVmVyc2lvbiAgICAgICAgICAgel96bGliVmVyc2lvbgogCkBAIC0xMTEsNyArMTMwLDkgQEAKICMgIGRlZmluZSBhbGxvY19mdW5jICAgICAgICAgICAgel9hbGxvY19mdW5jCiAjICBkZWZpbmUgY2hhcmYgICAgICAgICAgICAgICAgIHpfY2hhcmYKICMgIGRlZmluZSBmcmVlX2Z1bmMgICAgICAgICAgICAgel9mcmVlX2Z1bmMKLSMgIGRlZmluZSBnekZpbGUgICAgICAgICAgICAgICAgel9nekZpbGUKKyMgIGlmbmRlZiBaX1NPTE8KKyMgICAgZGVmaW5lIGd6RmlsZSAgICAgICAgICAgICAgICB6X2d6RmlsZQorIyAgZW5kaWYKICMgIGRlZmluZSBnel9oZWFkZXIgICAgICAgICAgICAgel9nel9oZWFkZXIKICMgIGRlZmluZSBnel9oZWFkZXJwICAgICAgICAgICAgel9nel9oZWFkZXJwCiAjICBkZWZpbmUgaW5fZnVuYyAgICAgICAgICAgICAgIHpfaW5fZnVuYwpAQCAtMTk3LDYgKzIxOCwxMiBAQAogIyAgZW5kaWYKICNlbmRpZgogCisjaWYgZGVmaW5lZChaTElCX0NPTlNUKSAmJiAhZGVmaW5lZCh6X2NvbnN0KQorIyAgZGVmaW5lIHpfY29uc3QgY29uc3QKKyNlbHNlCisjICBkZWZpbmUgel9jb25zdAorI2VuZGlmCisKIC8qIFNvbWUgTWFjIGNvbXBpbGVycyBtZXJnZSBhbGwgLmggZmlsZXMgaW5jb3JyZWN0bHk6ICovCiAjaWYgZGVmaW5lZChfX01XRVJLU19fKXx8ZGVmaW5lZChhcHBsZWMpfHxkZWZpbmVkKFRISU5LX0MpfHxkZWZpbmVkKF9fU0NfXykKICMgIGRlZmluZSBOT19EVU1NWV9ERUNMCkBAIC0yNDMsNiArMjcwLDE0IEBACiAjICBlbmRpZgogI2VuZGlmCiAKKyNpZm5kZWYgWl9BUkcgLyogZnVuY3Rpb24gcHJvdG90eXBlcyBmb3Igc3RkYXJnICovCisjICBpZiBkZWZpbmVkKFNUREMpIHx8IGRlZmluZWQoWl9IQVZFX1NUREFSR19IKQorIyAgICBkZWZpbmUgWl9BUkcoYXJncykgIGFyZ3MKKyMgIGVsc2UKKyMgICAgZGVmaW5lIFpfQVJHKGFyZ3MpICAoKQorIyAgZW5kaWYKKyNlbmRpZgorCiAvKiBUaGUgZm9sbG93aW5nIGRlZmluaXRpb25zIGZvciBGQVIgYXJlIG5lZWRlZCBvbmx5IGZvciBNU0RPUyBtaXhlZAogICogbW9kZWwgcHJvZ3JhbW1pbmcgKHNtYWxsIG9yIG1lZGl1bSBtb2RlbCB3aXRoIHNvbWUgZmFyIGFsbG9jYXRpb25zKS4KICAqIFRoaXMgd2FzIHRlc3RlZCBvbmx5IHdpdGggTVNDOyBmb3Igb3RoZXIgTVNET1MgY29tcGlsZXJzIHlvdSBtYXkgaGF2ZQpAQCAtMzU2LDEyICszOTEsNDcgQEAKICAgIHR5cGVkZWYgQnl0ZSAgICAgICAqdm9pZHA7CiAjZW5kaWYKIAorI2lmICFkZWZpbmVkKFpfVTQpICYmICFkZWZpbmVkKFpfU09MTykgJiYgZGVmaW5lZChTVERDKQorIyAgaW5jbHVkZSA8bGltaXRzLmg+CisjICBpZiAoVUlOVF9NQVggPT0gMHhmZmZmZmZmZlVMKQorIyAgICBkZWZpbmUgWl9VNCB1bnNpZ25lZAorIyAgZWxpZiAoVUxPTkdfTUFYID09IDB4ZmZmZmZmZmZVTCkKKyMgICAgZGVmaW5lIFpfVTQgdW5zaWduZWQgbG9uZworIyAgZWxpZiAoVVNIUlRfTUFYID09IDB4ZmZmZmZmZmZVTCkKKyMgICAgZGVmaW5lIFpfVTQgdW5zaWduZWQgc2hvcnQKKyMgIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIFpfVTQKKyAgIHR5cGVkZWYgWl9VNCB6X2NyY190OworI2Vsc2UKKyAgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyB6X2NyY190OworI2VuZGlmCisKICNpZmRlZiBIQVZFX1VOSVNURF9IICAgIC8qIG1heSBiZSBzZXQgdG8gI2lmIDEgYnkgLi9jb25maWd1cmUgKi8KICMgIGRlZmluZSBaX0hBVkVfVU5JU1REX0gKICNlbmRpZgogCisjaWZkZWYgSEFWRV9TVERBUkdfSCAgICAvKiBtYXkgYmUgc2V0IHRvICNpZiAxIGJ5IC4vY29uZmlndXJlICovCisjICBkZWZpbmUgWl9IQVZFX1NUREFSR19ICisjZW5kaWYKKwogI2lmZGVmIFNUREMKLSMgIGluY2x1ZGUgPHN5cy90eXBlcy5oPiAgICAvKiBmb3Igb2ZmX3QgKi8KKyMgIGlmbmRlZiBaX1NPTE8KKyMgICAgaW5jbHVkZSA8c3lzL3R5cGVzLmg+ICAgICAgLyogZm9yIG9mZl90ICovCisjICBlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKFNUREMpIHx8IGRlZmluZWQoWl9IQVZFX1NUREFSR19IKQorIyAgaWZuZGVmIFpfU09MTworIyAgICBpbmNsdWRlIDxzdGRhcmcuaD4gICAgICAgICAvKiBmb3IgdmFfbGlzdCAqLworIyAgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgX1dJTjMyCisjICBpZm5kZWYgWl9TT0xPCisjICAgIGluY2x1ZGUgPHN0ZGRlZi5oPiAgICAgICAgIC8qIGZvciB3Y2hhcl90ICovCisjICBlbmRpZgogI2VuZGlmCiAKIC8qIGEgbGl0dGxlIHRyaWNrIHRvIGFjY29tbW9kYXRlIGJvdGggIiNkZWZpbmUgX0xBUkdFRklMRTY0X1NPVVJDRSIgYW5kCkBAIC0zNzAsMjEgKzQ0MCwzOCBAQAogICogYm90aCAiI3VuZGVmIF9MQVJHRUZJTEU2NF9TT1VSQ0UiIGFuZCAiI2RlZmluZSBfTEFSR0VGSUxFNjRfU09VUkNFIDAiIGFzCiAgKiBlcXVpdmFsZW50bHkgcmVxdWVzdGluZyBubyA2NC1iaXQgb3BlcmF0aW9ucwogICovCi0jaWYgLV9MQVJHRUZJTEU2NF9TT1VSQ0UgLSAtMSA9PSAxCisjaWYgZGVmaW5lZChfTEFSR0VGSUxFNjRfU09VUkNFKSAmJiAtX0xBUkdFRklMRTY0X1NPVVJDRSAtIC0xID09IDEKICMgIHVuZGVmIF9MQVJHRUZJTEU2NF9TT1VSQ0UKICNlbmRpZgogCi0jaWYgZGVmaW5lZChaX0hBVkVfVU5JU1REX0gpIHx8IGRlZmluZWQoX0xBUkdFRklMRTY0X1NPVVJDRSkKLSMgIGluY2x1ZGUgPHVuaXN0ZC5oPiAgICAgICAvKiBmb3IgU0VFS18qIGFuZCBvZmZfdCAqLwotIyAgaWZkZWYgVk1TCi0jICAgIGluY2x1ZGUgPHVuaXhpby5oPiAgICAgLyogZm9yIG9mZl90ICovCi0jICBlbmRpZgotIyAgaWZuZGVmIHpfb2ZmX3QKLSMgICAgZGVmaW5lIHpfb2ZmX3Qgb2ZmX3QKKyNpZiBkZWZpbmVkKF9fV0FUQ09NQ19fKSAmJiAhZGVmaW5lZChaX0hBVkVfVU5JU1REX0gpCisjICBkZWZpbmUgWl9IQVZFX1VOSVNURF9ICisjZW5kaWYKKyNpZm5kZWYgWl9TT0xPCisjICBpZiBkZWZpbmVkKFpfSEFWRV9VTklTVERfSCkgfHwgZGVmaW5lZChfTEFSR0VGSUxFNjRfU09VUkNFKQorIyAgICBpbmNsdWRlIDx1bmlzdGQuaD4gICAgICAgICAvKiBmb3IgU0VFS18qLCBvZmZfdCwgYW5kIF9MRlM2NF9MQVJHRUZJTEUgKi8KKyMgICAgaWZkZWYgVk1TCisjICAgICAgaW5jbHVkZSA8dW5peGlvLmg+ICAgICAgIC8qIGZvciBvZmZfdCAqLworIyAgICBlbmRpZgorIyAgICBpZm5kZWYgel9vZmZfdAorIyAgICAgIGRlZmluZSB6X29mZl90IG9mZl90CisjICAgIGVuZGlmCiAjICBlbmRpZgogI2VuZGlmCiAKLSNpZm5kZWYgU0VFS19TRVQKKyNpZiBkZWZpbmVkKF9MRlM2NF9MQVJHRUZJTEUpICYmIF9MRlM2NF9MQVJHRUZJTEUtMAorIyAgZGVmaW5lIFpfTEZTNjQKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfTEFSR0VGSUxFNjRfU09VUkNFKSAmJiBkZWZpbmVkKFpfTEZTNjQpCisjICBkZWZpbmUgWl9MQVJHRTY0CisjZW5kaWYKKworI2lmIGRlZmluZWQoX0ZJTEVfT0ZGU0VUX0JJVFMpICYmIF9GSUxFX09GRlNFVF9CSVRTLTAgPT0gNjQgJiYgZGVmaW5lZChaX0xGUzY0KQorIyAgZGVmaW5lIFpfV0FOVDY0CisjZW5kaWYKKworI2lmICFkZWZpbmVkKFNFRUtfU0VUKSAmJiAhZGVmaW5lZChaX1NPTE8pCiAjICBkZWZpbmUgU0VFS19TRVQgICAgICAgIDAgICAgICAgLyogU2VlayBmcm9tIGJlZ2lubmluZyBvZiBmaWxlLiAgKi8KICMgIGRlZmluZSBTRUVLX0NVUiAgICAgICAgMSAgICAgICAvKiBTZWVrIGZyb20gY3VycmVudCBwb3NpdGlvbi4gICovCiAjICBkZWZpbmUgU0VFS19FTkQgICAgICAgIDIgICAgICAgLyogU2V0IGZpbGUgcG9pbnRlciB0byBFT0YgcGx1cyAib2Zmc2V0IiAqLwpAQCAtMzk0LDE4ICs0ODEsMTQgQEAKICMgIGRlZmluZSB6X29mZl90IGxvbmcKICNlbmRpZgogCi0jaWYgZGVmaW5lZChfTEFSR0VGSUxFNjRfU09VUkNFKSAmJiBfTEZTNjRfTEFSR0VGSUxFLTAKKyNpZiAhZGVmaW5lZChfV0lOMzIpICYmIGRlZmluZWQoWl9MQVJHRTY0KQogIyAgZGVmaW5lIHpfb2ZmNjRfdCBvZmY2NF90CiAjZWxzZQotIyAgZGVmaW5lIHpfb2ZmNjRfdCB6X29mZl90Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoX19PUzQwMF9fKQotIyAgZGVmaW5lIE5PX3ZzbnByaW50ZgotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKF9fTVZTX18pCi0jICBkZWZpbmUgTk9fdnNucHJpbnRmCisjICBpZiBkZWZpbmVkKF9XSU4zMikgJiYgIWRlZmluZWQoX19HTlVDX18pICYmICFkZWZpbmVkKFpfU09MTykKKyMgICAgZGVmaW5lIHpfb2ZmNjRfdCBfX2ludDY0CisjICBlbHNlCisjICAgIGRlZmluZSB6X29mZjY0X3Qgel9vZmZfdAorIyAgZW5kaWYKICNlbmRpZgogCiAvKiBNVlMgbGlua2VyIGRvZXMgbm90IHN1cHBvcnQgZXh0ZXJuYWwgbmFtZXMgbGFyZ2VyIHRoYW4gOCBieXRlcyAqLwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL3pjb25mLmluLmggYi9Nb2R1bGVzL3psaWIvemNvbmYuaW4uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDNhOTQzMS4uMDAwMDAwMAotLS0gYS9Nb2R1bGVzL3psaWIvemNvbmYuaW4uaAorKysgL2Rldi9udWxsCkBAIC0xLDMzMiArMCwwIEBACi0vKiB6Y29uZi5oIC0tIGNvbmZpZ3VyYXRpb24gb2YgdGhlIHpsaWIgY29tcHJlc3Npb24gbGlicmFyeQotICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMDUgSmVhbi1sb3VwIEdhaWxseS4KLSAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKLSAqLwotCi0vKiBAKCMpICRJZCQgKi8KLQotI2lmbmRlZiBaQ09ORl9ICi0jZGVmaW5lIFpDT05GX0gKLQotLyoKLSAqIElmIHlvdSAqcmVhbGx5KiBuZWVkIGEgdW5pcXVlIHByZWZpeCBmb3IgYWxsIHR5cGVzIGFuZCBsaWJyYXJ5IGZ1bmN0aW9ucywKLSAqIGNvbXBpbGUgd2l0aCAtRFpfUFJFRklYLiBUaGUgInN0YW5kYXJkIiB6bGliIHNob3VsZCBiZSBjb21waWxlZCB3aXRob3V0IGl0LgotICovCi0jaWZkZWYgWl9QUkVGSVgKLSMgIGRlZmluZSBkZWZsYXRlSW5pdF8gICAgICAgICAgel9kZWZsYXRlSW5pdF8KLSMgIGRlZmluZSBkZWZsYXRlICAgICAgICAgICAgICAgel9kZWZsYXRlCi0jICBkZWZpbmUgZGVmbGF0ZUVuZCAgICAgICAgICAgIHpfZGVmbGF0ZUVuZAotIyAgZGVmaW5lIGluZmxhdGVJbml0XyAgICAgICAgICB6X2luZmxhdGVJbml0XwotIyAgZGVmaW5lIGluZmxhdGUgICAgICAgICAgICAgICB6X2luZmxhdGUKLSMgIGRlZmluZSBpbmZsYXRlRW5kICAgICAgICAgICAgel9pbmZsYXRlRW5kCi0jICBkZWZpbmUgZGVmbGF0ZUluaXQyXyAgICAgICAgIHpfZGVmbGF0ZUluaXQyXwotIyAgZGVmaW5lIGRlZmxhdGVTZXREaWN0aW9uYXJ5ICB6X2RlZmxhdGVTZXREaWN0aW9uYXJ5Ci0jICBkZWZpbmUgZGVmbGF0ZUNvcHkgICAgICAgICAgIHpfZGVmbGF0ZUNvcHkKLSMgIGRlZmluZSBkZWZsYXRlUmVzZXQgICAgICAgICAgel9kZWZsYXRlUmVzZXQKLSMgIGRlZmluZSBkZWZsYXRlUGFyYW1zICAgICAgICAgel9kZWZsYXRlUGFyYW1zCi0jICBkZWZpbmUgZGVmbGF0ZUJvdW5kICAgICAgICAgIHpfZGVmbGF0ZUJvdW5kCi0jICBkZWZpbmUgZGVmbGF0ZVByaW1lICAgICAgICAgIHpfZGVmbGF0ZVByaW1lCi0jICBkZWZpbmUgaW5mbGF0ZUluaXQyXyAgICAgICAgIHpfaW5mbGF0ZUluaXQyXwotIyAgZGVmaW5lIGluZmxhdGVTZXREaWN0aW9uYXJ5ICB6X2luZmxhdGVTZXREaWN0aW9uYXJ5Ci0jICBkZWZpbmUgaW5mbGF0ZVN5bmMgICAgICAgICAgIHpfaW5mbGF0ZVN5bmMKLSMgIGRlZmluZSBpbmZsYXRlU3luY1BvaW50ICAgICAgel9pbmZsYXRlU3luY1BvaW50Ci0jICBkZWZpbmUgaW5mbGF0ZUNvcHkgICAgICAgICAgIHpfaW5mbGF0ZUNvcHkKLSMgIGRlZmluZSBpbmZsYXRlUmVzZXQgICAgICAgICAgel9pbmZsYXRlUmVzZXQKLSMgIGRlZmluZSBpbmZsYXRlQmFjayAgICAgICAgICAgel9pbmZsYXRlQmFjawotIyAgZGVmaW5lIGluZmxhdGVCYWNrRW5kICAgICAgICB6X2luZmxhdGVCYWNrRW5kCi0jICBkZWZpbmUgY29tcHJlc3MgICAgICAgICAgICAgIHpfY29tcHJlc3MKLSMgIGRlZmluZSBjb21wcmVzczIgICAgICAgICAgICAgel9jb21wcmVzczIKLSMgIGRlZmluZSBjb21wcmVzc0JvdW5kICAgICAgICAgel9jb21wcmVzc0JvdW5kCi0jICBkZWZpbmUgdW5jb21wcmVzcyAgICAgICAgICAgIHpfdW5jb21wcmVzcwotIyAgZGVmaW5lIGFkbGVyMzIgICAgICAgICAgICAgICB6X2FkbGVyMzIKLSMgIGRlZmluZSBjcmMzMiAgICAgICAgICAgICAgICAgel9jcmMzMgotIyAgZGVmaW5lIGdldF9jcmNfdGFibGUgICAgICAgICB6X2dldF9jcmNfdGFibGUKLSMgIGRlZmluZSB6RXJyb3IgICAgICAgICAgICAgICAgel96RXJyb3IKLQotIyAgZGVmaW5lIGFsbG9jX2Z1bmMgICAgICAgICAgICB6X2FsbG9jX2Z1bmMKLSMgIGRlZmluZSBmcmVlX2Z1bmMgICAgICAgICAgICAgel9mcmVlX2Z1bmMKLSMgIGRlZmluZSBpbl9mdW5jICAgICAgICAgICAgICAgel9pbl9mdW5jCi0jICBkZWZpbmUgb3V0X2Z1bmMgICAgICAgICAgICAgIHpfb3V0X2Z1bmMKLSMgIGRlZmluZSBCeXRlICAgICAgICAgICAgICAgICAgel9CeXRlCi0jICBkZWZpbmUgdUludCAgICAgICAgICAgICAgICAgIHpfdUludAotIyAgZGVmaW5lIHVMb25nICAgICAgICAgICAgICAgICB6X3VMb25nCi0jICBkZWZpbmUgQnl0ZWYgICAgICAgICAgICAgICAgIHpfQnl0ZWYKLSMgIGRlZmluZSBjaGFyZiAgICAgICAgICAgICAgICAgel9jaGFyZgotIyAgZGVmaW5lIGludGYgICAgICAgICAgICAgICAgICB6X2ludGYKLSMgIGRlZmluZSB1SW50ZiAgICAgICAgICAgICAgICAgel91SW50ZgotIyAgZGVmaW5lIHVMb25nZiAgICAgICAgICAgICAgICB6X3VMb25nZgotIyAgZGVmaW5lIHZvaWRwZiAgICAgICAgICAgICAgICB6X3ZvaWRwZgotIyAgZGVmaW5lIHZvaWRwICAgICAgICAgICAgICAgICB6X3ZvaWRwCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoX19NU0RPU19fKSAmJiAhZGVmaW5lZChNU0RPUykKLSMgIGRlZmluZSBNU0RPUwotI2VuZGlmCi0jaWYgKGRlZmluZWQoT1NfMikgfHwgZGVmaW5lZChfX09TMl9fKSkgJiYgIWRlZmluZWQoT1MyKQotIyAgZGVmaW5lIE9TMgotI2VuZGlmCi0jaWYgZGVmaW5lZChfV0lORE9XUykgJiYgIWRlZmluZWQoV0lORE9XUykKLSMgIGRlZmluZSBXSU5ET1dTCi0jZW5kaWYKLSNpZiBkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfV0lOMzJfV0NFKSB8fCBkZWZpbmVkKF9fV0lOMzJfXykKLSMgIGlmbmRlZiBXSU4zMgotIyAgICBkZWZpbmUgV0lOMzIKLSMgIGVuZGlmCi0jZW5kaWYKLSNpZiAoZGVmaW5lZChNU0RPUykgfHwgZGVmaW5lZChPUzIpIHx8IGRlZmluZWQoV0lORE9XUykpICYmICFkZWZpbmVkKFdJTjMyKQotIyAgaWYgIWRlZmluZWQoX19HTlVDX18pICYmICFkZWZpbmVkKF9fRkxBVF9fKSAmJiAhZGVmaW5lZChfXzM4Nl9fKQotIyAgICBpZm5kZWYgU1lTMTZCSVQKLSMgICAgICBkZWZpbmUgU1lTMTZCSVQKLSMgICAgZW5kaWYKLSMgIGVuZGlmCi0jZW5kaWYKLQotLyoKLSAqIENvbXBpbGUgd2l0aCAtRE1BWFNFR182NEsgaWYgdGhlIGFsbG9jIGZ1bmN0aW9uIGNhbm5vdCBhbGxvY2F0ZSBtb3JlCi0gKiB0aGFuIDY0ayBieXRlcyBhdCBhIHRpbWUgKG5lZWRlZCBvbiBzeXN0ZW1zIHdpdGggMTYtYml0IGludCkuCi0gKi8KLSNpZmRlZiBTWVMxNkJJVAotIyAgZGVmaW5lIE1BWFNFR182NEsKLSNlbmRpZgotI2lmZGVmIE1TRE9TCi0jICBkZWZpbmUgVU5BTElHTkVEX09LCi0jZW5kaWYKLQotI2lmZGVmIF9fU1REQ19WRVJTSU9OX18KLSMgIGlmbmRlZiBTVERDCi0jICAgIGRlZmluZSBTVERDCi0jICBlbmRpZgotIyAgaWYgX19TVERDX1ZFUlNJT05fXyA+PSAxOTk5MDFMCi0jICAgIGlmbmRlZiBTVERDOTkKLSMgICAgICBkZWZpbmUgU1REQzk5Ci0jICAgIGVuZGlmCi0jICBlbmRpZgotI2VuZGlmCi0jaWYgIWRlZmluZWQoU1REQykgJiYgKGRlZmluZWQoX19TVERDX18pIHx8IGRlZmluZWQoX19jcGx1c3BsdXMpKQotIyAgZGVmaW5lIFNUREMKLSNlbmRpZgotI2lmICFkZWZpbmVkKFNUREMpICYmIChkZWZpbmVkKF9fR05VQ19fKSB8fCBkZWZpbmVkKF9fQk9STEFORENfXykpCi0jICBkZWZpbmUgU1REQwotI2VuZGlmCi0jaWYgIWRlZmluZWQoU1REQykgJiYgKGRlZmluZWQoTVNET1MpIHx8IGRlZmluZWQoV0lORE9XUykgfHwgZGVmaW5lZChXSU4zMikpCi0jICBkZWZpbmUgU1REQwotI2VuZGlmCi0jaWYgIWRlZmluZWQoU1REQykgJiYgKGRlZmluZWQoT1MyKSB8fCBkZWZpbmVkKF9fSE9TX0FJWF9fKSkKLSMgIGRlZmluZSBTVERDCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoX19PUzQwMF9fKSAmJiAhZGVmaW5lZChTVERDKSAgICAvKiBpU2VyaWVzIChmb3JtZXJseSBBUy80MDApLiAqLwotIyAgZGVmaW5lIFNUREMKLSNlbmRpZgotCi0jaWZuZGVmIFNUREMKLSMgIGlmbmRlZiBjb25zdCAvKiBjYW5ub3QgdXNlICFkZWZpbmVkKFNUREMpICYmICFkZWZpbmVkKGNvbnN0KSBvbiBNYWMgKi8KLSMgICAgZGVmaW5lIGNvbnN0ICAgICAgIC8qIG5vdGU6IG5lZWQgYSBtb3JlIGdlbnRsZSBzb2x1dGlvbiBoZXJlICovCi0jICBlbmRpZgotI2VuZGlmCi0KLS8qIFNvbWUgTWFjIGNvbXBpbGVycyBtZXJnZSBhbGwgLmggZmlsZXMgaW5jb3JyZWN0bHk6ICovCi0jaWYgZGVmaW5lZChfX01XRVJLU19fKXx8ZGVmaW5lZChhcHBsZWMpfHxkZWZpbmVkKFRISU5LX0MpfHxkZWZpbmVkKF9fU0NfXykKLSMgIGRlZmluZSBOT19EVU1NWV9ERUNMCi0jZW5kaWYKLQotLyogTWF4aW11bSB2YWx1ZSBmb3IgbWVtTGV2ZWwgaW4gZGVmbGF0ZUluaXQyICovCi0jaWZuZGVmIE1BWF9NRU1fTEVWRUwKLSMgIGlmZGVmIE1BWFNFR182NEsKLSMgICAgZGVmaW5lIE1BWF9NRU1fTEVWRUwgOAotIyAgZWxzZQotIyAgICBkZWZpbmUgTUFYX01FTV9MRVZFTCA5Ci0jICBlbmRpZgotI2VuZGlmCi0KLS8qIE1heGltdW0gdmFsdWUgZm9yIHdpbmRvd0JpdHMgaW4gZGVmbGF0ZUluaXQyIGFuZCBpbmZsYXRlSW5pdDIuCi0gKiBXQVJOSU5HOiByZWR1Y2luZyBNQVhfV0JJVFMgbWFrZXMgbWluaWd6aXAgdW5hYmxlIHRvIGV4dHJhY3QgLmd6IGZpbGVzCi0gKiBjcmVhdGVkIGJ5IGd6aXAuIChGaWxlcyBjcmVhdGVkIGJ5IG1pbmlnemlwIGNhbiBzdGlsbCBiZSBleHRyYWN0ZWQgYnkKLSAqIGd6aXAuKQotICovCi0jaWZuZGVmIE1BWF9XQklUUwotIyAgZGVmaW5lIE1BWF9XQklUUyAgIDE1IC8qIDMySyBMWjc3IHdpbmRvdyAqLwotI2VuZGlmCi0KLS8qIFRoZSBtZW1vcnkgcmVxdWlyZW1lbnRzIGZvciBkZWZsYXRlIGFyZSAoaW4gYnl0ZXMpOgotICAgICAgICAgICAgKDEgPDwgKHdpbmRvd0JpdHMrMikpICsgICgxIDw8IChtZW1MZXZlbCs5KSkKLSB0aGF0IGlzOiAxMjhLIGZvciB3aW5kb3dCaXRzPTE1ICArICAxMjhLIGZvciBtZW1MZXZlbCA9IDggIChkZWZhdWx0IHZhbHVlcykKLSBwbHVzIGEgZmV3IGtpbG9ieXRlcyBmb3Igc21hbGwgb2JqZWN0cy4gRm9yIGV4YW1wbGUsIGlmIHlvdSB3YW50IHRvIHJlZHVjZQotIHRoZSBkZWZhdWx0IG1lbW9yeSByZXF1aXJlbWVudHMgZnJvbSAyNTZLIHRvIDEyOEssIGNvbXBpbGUgd2l0aAotICAgICBtYWtlIENGTEFHUz0iLU8gLURNQVhfV0JJVFM9MTQgLURNQVhfTUVNX0xFVkVMPTciCi0gT2YgY291cnNlIHRoaXMgd2lsbCBnZW5lcmFsbHkgZGVncmFkZSBjb21wcmVzc2lvbiAodGhlcmUncyBubyBmcmVlIGx1bmNoKS4KLQotICAgVGhlIG1lbW9yeSByZXF1aXJlbWVudHMgZm9yIGluZmxhdGUgYXJlIChpbiBieXRlcykgMSA8PCB3aW5kb3dCaXRzCi0gdGhhdCBpcywgMzJLIGZvciB3aW5kb3dCaXRzPTE1IChkZWZhdWx0IHZhbHVlKSBwbHVzIGEgZmV3IGtpbG9ieXRlcwotIGZvciBzbWFsbCBvYmplY3RzLgotKi8KLQotICAgICAgICAgICAgICAgICAgICAgICAgLyogVHlwZSBkZWNsYXJhdGlvbnMgKi8KLQotI2lmbmRlZiBPRiAvKiBmdW5jdGlvbiBwcm90b3R5cGVzICovCi0jICBpZmRlZiBTVERDCi0jICAgIGRlZmluZSBPRihhcmdzKSAgYXJncwotIyAgZWxzZQotIyAgICBkZWZpbmUgT0YoYXJncykgICgpCi0jICBlbmRpZgotI2VuZGlmCi0KLS8qIFRoZSBmb2xsb3dpbmcgZGVmaW5pdGlvbnMgZm9yIEZBUiBhcmUgbmVlZGVkIG9ubHkgZm9yIE1TRE9TIG1peGVkCi0gKiBtb2RlbCBwcm9ncmFtbWluZyAoc21hbGwgb3IgbWVkaXVtIG1vZGVsIHdpdGggc29tZSBmYXIgYWxsb2NhdGlvbnMpLgotICogVGhpcyB3YXMgdGVzdGVkIG9ubHkgd2l0aCBNU0M7IGZvciBvdGhlciBNU0RPUyBjb21waWxlcnMgeW91IG1heSBoYXZlCi0gKiB0byBkZWZpbmUgTk9fTUVNQ1BZIGluIHp1dGlsLmguICBJZiB5b3UgZG9uJ3QgbmVlZCB0aGUgbWl4ZWQgbW9kZWwsCi0gKiBqdXN0IGRlZmluZSBGQVIgdG8gYmUgZW1wdHkuCi0gKi8KLSNpZmRlZiBTWVMxNkJJVAotIyAgaWYgZGVmaW5lZChNX0k4NlNNKSB8fCBkZWZpbmVkKE1fSTg2TU0pCi0gICAgIC8qIE1TQyBzbWFsbCBvciBtZWRpdW0gbW9kZWwgKi8KLSMgICAgZGVmaW5lIFNNQUxMX01FRElVTQotIyAgICBpZmRlZiBfTVNDX1ZFUgotIyAgICAgIGRlZmluZSBGQVIgX2ZhcgotIyAgICBlbHNlCi0jICAgICAgZGVmaW5lIEZBUiBmYXIKLSMgICAgZW5kaWYKLSMgIGVuZGlmCi0jICBpZiAoZGVmaW5lZChfX1NNQUxMX18pIHx8IGRlZmluZWQoX19NRURJVU1fXykpCi0gICAgIC8qIFR1cmJvIEMgc21hbGwgb3IgbWVkaXVtIG1vZGVsICovCi0jICAgIGRlZmluZSBTTUFMTF9NRURJVU0KLSMgICAgaWZkZWYgX19CT1JMQU5EQ19fCi0jICAgICAgZGVmaW5lIEZBUiBfZmFyCi0jICAgIGVsc2UKLSMgICAgICBkZWZpbmUgRkFSIGZhcgotIyAgICBlbmRpZgotIyAgZW5kaWYKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChXSU5ET1dTKSB8fCBkZWZpbmVkKFdJTjMyKQotICAgLyogSWYgYnVpbGRpbmcgb3IgdXNpbmcgemxpYiBhcyBhIERMTCwgZGVmaW5lIFpMSUJfRExMLgotICAgICogVGhpcyBpcyBub3QgbWFuZGF0b3J5LCBidXQgaXQgb2ZmZXJzIGEgbGl0dGxlIHBlcmZvcm1hbmNlIGluY3JlYXNlLgotICAgICovCi0jICBpZmRlZiBaTElCX0RMTAotIyAgICBpZiBkZWZpbmVkKFdJTjMyKSAmJiAoIWRlZmluZWQoX19CT1JMQU5EQ19fKSB8fCAoX19CT1JMQU5EQ19fID49IDB4NTAwKSkKLSMgICAgICBpZmRlZiBaTElCX0lOVEVSTkFMCi0jICAgICAgICBkZWZpbmUgWkVYVEVSTiBleHRlcm4gX19kZWNsc3BlYyhkbGxleHBvcnQpCi0jICAgICAgZWxzZQotIyAgICAgICAgZGVmaW5lIFpFWFRFUk4gZXh0ZXJuIF9fZGVjbHNwZWMoZGxsaW1wb3J0KQotIyAgICAgIGVuZGlmCi0jICAgIGVuZGlmCi0jICBlbmRpZiAgLyogWkxJQl9ETEwgKi8KLSAgIC8qIElmIGJ1aWxkaW5nIG9yIHVzaW5nIHpsaWIgd2l0aCB0aGUgV0lOQVBJL1dJTkFQSVYgY2FsbGluZyBjb252ZW50aW9uLAotICAgICogZGVmaW5lIFpMSUJfV0lOQVBJLgotICAgICogQ2F1dGlvbjogdGhlIHN0YW5kYXJkIFpMSUIxLkRMTCBpcyBOT1QgY29tcGlsZWQgdXNpbmcgWkxJQl9XSU5BUEkuCi0gICAgKi8KLSMgIGlmZGVmIFpMSUJfV0lOQVBJCi0jICAgIGlmZGVmIEZBUgotIyAgICAgIHVuZGVmIEZBUgotIyAgICBlbmRpZgotIyAgICBpbmNsdWRlIDx3aW5kb3dzLmg+Ci0gICAgIC8qIE5vIG5lZWQgZm9yIF9leHBvcnQsIHVzZSBaTElCLkRFRiBpbnN0ZWFkLiAqLwotICAgICAvKiBGb3IgY29tcGxldGUgV2luZG93cyBjb21wYXRpYmlsaXR5LCB1c2UgV0lOQVBJLCBub3QgX19zdGRjYWxsLiAqLwotIyAgICBkZWZpbmUgWkVYUE9SVCBXSU5BUEkKLSMgICAgaWZkZWYgV0lOMzIKLSMgICAgICBkZWZpbmUgWkVYUE9SVFZBIFdJTkFQSVYKLSMgICAgZWxzZQotIyAgICAgIGRlZmluZSBaRVhQT1JUVkEgRkFSIENERUNMCi0jICAgIGVuZGlmCi0jICBlbmRpZgotI2VuZGlmCi0KLSNpZiBkZWZpbmVkIChfX0JFT1NfXykKLSMgIGlmZGVmIFpMSUJfRExMCi0jICAgIGlmZGVmIFpMSUJfSU5URVJOQUwKLSMgICAgICBkZWZpbmUgWkVYUE9SVCAgIF9fZGVjbHNwZWMoZGxsZXhwb3J0KQotIyAgICAgIGRlZmluZSBaRVhQT1JUVkEgX19kZWNsc3BlYyhkbGxleHBvcnQpCi0jICAgIGVsc2UKLSMgICAgICBkZWZpbmUgWkVYUE9SVCAgIF9fZGVjbHNwZWMoZGxsaW1wb3J0KQotIyAgICAgIGRlZmluZSBaRVhQT1JUVkEgX19kZWNsc3BlYyhkbGxpbXBvcnQpCi0jICAgIGVuZGlmCi0jICBlbmRpZgotI2VuZGlmCi0KLSNpZm5kZWYgWkVYVEVSTgotIyAgZGVmaW5lIFpFWFRFUk4gZXh0ZXJuCi0jZW5kaWYKLSNpZm5kZWYgWkVYUE9SVAotIyAgZGVmaW5lIFpFWFBPUlQKLSNlbmRpZgotI2lmbmRlZiBaRVhQT1JUVkEKLSMgIGRlZmluZSBaRVhQT1JUVkEKLSNlbmRpZgotCi0jaWZuZGVmIEZBUgotIyAgZGVmaW5lIEZBUgotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChfX01BQ1RZUEVTX18pCi10eXBlZGVmIHVuc2lnbmVkIGNoYXIgIEJ5dGU7ICAvKiA4IGJpdHMgKi8KLSNlbmRpZgotdHlwZWRlZiB1bnNpZ25lZCBpbnQgICB1SW50OyAgLyogMTYgYml0cyBvciBtb3JlICovCi10eXBlZGVmIHVuc2lnbmVkIGxvbmcgIHVMb25nOyAvKiAzMiBiaXRzIG9yIG1vcmUgKi8KLQotI2lmZGVmIFNNQUxMX01FRElVTQotICAgLyogQm9ybGFuZCBDL0MrKyBhbmQgc29tZSBvbGQgTVNDIHZlcnNpb25zIGlnbm9yZSBGQVIgaW5zaWRlIHR5cGVkZWYgKi8KLSMgIGRlZmluZSBCeXRlZiBCeXRlIEZBUgotI2Vsc2UKLSAgIHR5cGVkZWYgQnl0ZSAgRkFSIEJ5dGVmOwotI2VuZGlmCi10eXBlZGVmIGNoYXIgIEZBUiBjaGFyZjsKLXR5cGVkZWYgaW50ICAgRkFSIGludGY7Ci10eXBlZGVmIHVJbnQgIEZBUiB1SW50ZjsKLXR5cGVkZWYgdUxvbmcgRkFSIHVMb25nZjsKLQotI2lmZGVmIFNUREMKLSAgIHR5cGVkZWYgdm9pZCBjb25zdCAqdm9pZHBjOwotICAgdHlwZWRlZiB2b2lkIEZBUiAgICp2b2lkcGY7Ci0gICB0eXBlZGVmIHZvaWQgICAgICAgKnZvaWRwOwotI2Vsc2UKLSAgIHR5cGVkZWYgQnl0ZSBjb25zdCAqdm9pZHBjOwotICAgdHlwZWRlZiBCeXRlIEZBUiAgICp2b2lkcGY7Ci0gICB0eXBlZGVmIEJ5dGUgICAgICAgKnZvaWRwOwotI2VuZGlmCi0KLSNpZiAwICAgICAgICAgICAvKiBIQVZFX1VOSVNURF9IIC0tIHRoaXMgbGluZSBpcyB1cGRhdGVkIGJ5IC4vY29uZmlndXJlICovCi0jICBpbmNsdWRlIDxzeXMvdHlwZXMuaD4gLyogZm9yIG9mZl90ICovCi0jICBpbmNsdWRlIDx1bmlzdGQuaD4gICAgLyogZm9yIFNFRUtfKiBhbmQgb2ZmX3QgKi8KLSMgIGlmZGVmIFZNUwotIyAgICBpbmNsdWRlIDx1bml4aW8uaD4gICAvKiBmb3Igb2ZmX3QgKi8KLSMgIGVuZGlmCi0jICBkZWZpbmUgel9vZmZfdCBvZmZfdAotI2VuZGlmCi0jaWZuZGVmIFNFRUtfU0VUCi0jICBkZWZpbmUgU0VFS19TRVQgICAgICAgIDAgICAgICAgLyogU2VlayBmcm9tIGJlZ2lubmluZyBvZiBmaWxlLiAgKi8KLSMgIGRlZmluZSBTRUVLX0NVUiAgICAgICAgMSAgICAgICAvKiBTZWVrIGZyb20gY3VycmVudCBwb3NpdGlvbi4gICovCi0jICBkZWZpbmUgU0VFS19FTkQgICAgICAgIDIgICAgICAgLyogU2V0IGZpbGUgcG9pbnRlciB0byBFT0YgcGx1cyAib2Zmc2V0IiAqLwotI2VuZGlmCi0jaWZuZGVmIHpfb2ZmX3QKLSMgIGRlZmluZSB6X29mZl90IGxvbmcKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChfX09TNDAwX18pCi0jICBkZWZpbmUgTk9fdnNucHJpbnRmCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoX19NVlNfXykKLSMgIGRlZmluZSBOT192c25wcmludGYKLSMgIGlmZGVmIEZBUgotIyAgICB1bmRlZiBGQVIKLSMgIGVuZGlmCi0jZW5kaWYKLQotLyogTVZTIGxpbmtlciBkb2VzIG5vdCBzdXBwb3J0IGV4dGVybmFsIG5hbWVzIGxhcmdlciB0aGFuIDggYnl0ZXMgKi8KLSNpZiBkZWZpbmVkKF9fTVZTX18pCi0jICAgcHJhZ21hIG1hcChkZWZsYXRlSW5pdF8sIkRFSU4iKQotIyAgIHByYWdtYSBtYXAoZGVmbGF0ZUluaXQyXywiREVJTjIiKQotIyAgIHByYWdtYSBtYXAoZGVmbGF0ZUVuZCwiREVFTkQiKQotIyAgIHByYWdtYSBtYXAoZGVmbGF0ZUJvdW5kLCJERUJORCIpCi0jICAgcHJhZ21hIG1hcChpbmZsYXRlSW5pdF8sIklOSU4iKQotIyAgIHByYWdtYSBtYXAoaW5mbGF0ZUluaXQyXywiSU5JTjIiKQotIyAgIHByYWdtYSBtYXAoaW5mbGF0ZUVuZCwiSU5FTkQiKQotIyAgIHByYWdtYSBtYXAoaW5mbGF0ZVN5bmMsIklOU1kiKQotIyAgIHByYWdtYSBtYXAoaW5mbGF0ZVNldERpY3Rpb25hcnksIklOU0VESSIpCi0jICAgcHJhZ21hIG1hcChjb21wcmVzc0JvdW5kLCJDTUJORCIpCi0jICAgcHJhZ21hIG1hcChpbmZsYXRlX3RhYmxlLCJJTlRBQkwiKQotIyAgIHByYWdtYSBtYXAoaW5mbGF0ZV9mYXN0LCJJTkZBIikKLSMgICBwcmFnbWEgbWFwKGluZmxhdGVfY29weXJpZ2h0LCJJTkNPUFkiKQotI2VuZGlmCi0KLSNlbmRpZiAvKiBaQ09ORl9IICovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvemxpYi4zIGIvTW9kdWxlcy96bGliL3psaWIuMwppbmRleCAyN2FkYzRjLi4wMTYwZTYyIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvemxpYi4zCisrKyBiL01vZHVsZXMvemxpYi96bGliLjMKQEAgLTEsNCArMSw0IEBACi0uVEggWkxJQiAzICIxOSBBcHIgMjAxMCIKKy5USCBaTElCIDMgIjI4IEFwciAyMDEzIgogLlNIIE5BTUUKIHpsaWIgXC0gY29tcHJlc3Npb24vZGVjb21wcmVzc2lvbiBsaWJyYXJ5CiAuU0ggU1lOT1BTSVMKQEAgLTM2LDkgKzM2LDkgQEAKIC5JUiB6bGliLmggLgogVGhlIGRpc3RyaWJ1dGlvbiBzb3VyY2UgaW5jbHVkZXMgZXhhbXBsZXMgb2YgdXNlIG9mIHRoZSBsaWJyYXJ5CiBpbiB0aGUgZmlsZXMKLS5JIGV4YW1wbGUuYworLkkgdGVzdC9leGFtcGxlLmMKIGFuZAotLklSIG1pbmlnemlwLmMsCisuSVIgdGVzdC9taW5pZ3ppcC5jLAogYXMgd2VsbCBhcyBvdGhlciBleGFtcGxlcyBpbiB0aGUKIC5JUiBleGFtcGxlcy8KIGRpcmVjdG9yeS4KQEAgLTY1LDcgKzY1LDcgQEAKIHdyaXR0ZW4gYnkgQS5NLiBLdWNobGluZyAoYW1rQG1hZ25ldC5jb20pLAogaXMgYXZhaWxhYmxlIGluIFB5dGhvbiAxLjUgYW5kIGxhdGVyIHZlcnNpb25zOgogLklQCi1odHRwOi8vd3d3LnB5dGhvbi5vcmcvZG9jL2xpYi9tb2R1bGUtemxpYi5odG1sCitodHRwOi8vZG9jcy5weXRob24ub3JnL2xpYnJhcnkvemxpYi5odG1sCiAuTFAKIC5JIHpsaWIKIGlzIGJ1aWx0IGludG8KQEAgLTk1LDExICs5NSwxMSBAQAogVGhlIGRhdGEgZm9ybWF0IHVzZWQgYnkgdGhlIHpsaWIgbGlicmFyeSBpcyBkZXNjcmliZWQgYnkgUkZDCiAoUmVxdWVzdCBmb3IgQ29tbWVudHMpIDE5NTAgdG8gMTk1MiBpbiB0aGUgZmlsZXM6CiAuSVAKLWh0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzE5NTAudHh0IChmb3IgdGhlIHpsaWIgaGVhZGVyIGFuZCB0cmFpbGVyIGZvcm1hdCkKK2h0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzE5NTAgKGZvciB0aGUgemxpYiBoZWFkZXIgYW5kIHRyYWlsZXIgZm9ybWF0KQogLmJyCi1odHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmMxOTUxLnR4dCAoZm9yIHRoZSBkZWZsYXRlIGNvbXByZXNzZWQgZGF0YSBmb3JtYXQpCitodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMxOTUxIChmb3IgdGhlIGRlZmxhdGUgY29tcHJlc3NlZCBkYXRhIGZvcm1hdCkKIC5icgotaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMTk1Mi50eHQgKGZvciB0aGUgZ3ppcCBoZWFkZXIgYW5kIHRyYWlsZXIgZm9ybWF0KQoraHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMTk1MiAoZm9yIHRoZSBnemlwIGhlYWRlciBhbmQgdHJhaWxlciBmb3JtYXQpCiAuTFAKIE1hcmsgTmVsc29uIHdyb3RlIGFuIGFydGljbGUgYWJvdXQKIC5JIHpsaWIKQEAgLTEyNSw4ICsxMjUsOCBAQAogU2VuZCBxdWVzdGlvbnMgYW5kL29yIGNvbW1lbnRzIHRvIHpsaWJAZ3ppcC5vcmcsCiBvciAoZm9yIHRoZSBXaW5kb3dzIERMTCB2ZXJzaW9uKSB0byBHaWxsZXMgVm9sbGFudCAoaW5mb0B3aW5pbWFnZS5jb20pLgogLlNIIEFVVEhPUlMKLVZlcnNpb24gMS4yLjUKLUNvcHlyaWdodCAoQykgMTk5NS0yMDEwIEplYW4tbG91cCBHYWlsbHkgKGpsb3VwQGd6aXAub3JnKQorVmVyc2lvbiAxLjIuOAorQ29weXJpZ2h0IChDKSAxOTk1LTIwMTMgSmVhbi1sb3VwIEdhaWxseSAoamxvdXBAZ3ppcC5vcmcpCiBhbmQgTWFyayBBZGxlciAobWFkbGVyQGFsdW1uaS5jYWx0ZWNoLmVkdSkuCiAuTFAKIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgImFzLWlzLCIKZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi96bGliLmggYi9Nb2R1bGVzL3psaWIvemxpYi5oCmluZGV4IDc5YTE4N2MuLjNlMGM3NjcgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi96bGliLmgKKysrIGIvTW9kdWxlcy96bGliL3psaWIuaApAQCAtMSw3ICsxLDcgQEAKIC8qIHpsaWIuaCAtLSBpbnRlcmZhY2Ugb2YgdGhlICd6bGliJyBnZW5lcmFsIHB1cnBvc2UgY29tcHJlc3Npb24gbGlicmFyeQotICB2ZXJzaW9uIDEuMi41LCBBcHJpbCAxOXRoLCAyMDEwCisgIHZlcnNpb24gMS4yLjgsIEFwcmlsIDI4dGgsIDIwMTMKIAotICBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMCBKZWFuLWxvdXAgR2FpbGx5IGFuZCBNYXJrIEFkbGVyCisgIENvcHlyaWdodCAoQykgMTk5NS0yMDEzIEplYW4tbG91cCBHYWlsbHkgYW5kIE1hcmsgQWRsZXIKIAogICBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICdhcy1pcycsIHdpdGhvdXQgYW55IGV4cHJlc3Mgb3IgaW1wbGllZAogICB3YXJyYW50eS4gIEluIG5vIGV2ZW50IHdpbGwgdGhlIGF1dGhvcnMgYmUgaGVsZCBsaWFibGUgZm9yIGFueSBkYW1hZ2VzCkBAIC0yNCw4ICsyNCw4IEBACiAKIAogICBUaGUgZGF0YSBmb3JtYXQgdXNlZCBieSB0aGUgemxpYiBsaWJyYXJ5IGlzIGRlc2NyaWJlZCBieSBSRkNzIChSZXF1ZXN0IGZvcgotICBDb21tZW50cykgMTk1MCB0byAxOTUyIGluIHRoZSBmaWxlcyBodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmMxOTUwLnR4dAotICAoemxpYiBmb3JtYXQpLCByZmMxOTUxLnR4dCAoZGVmbGF0ZSBmb3JtYXQpIGFuZCByZmMxOTUyLnR4dCAoZ3ppcCBmb3JtYXQpLgorICBDb21tZW50cykgMTk1MCB0byAxOTUyIGluIHRoZSBmaWxlcyBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMxOTUwCisgICh6bGliIGZvcm1hdCksIHJmYzE5NTEgKGRlZmxhdGUgZm9ybWF0KSBhbmQgcmZjMTk1MiAoZ3ppcCBmb3JtYXQpLgogKi8KIAogI2lmbmRlZiBaTElCX0gKQEAgLTM3LDExICszNywxMSBAQAogZXh0ZXJuICJDIiB7CiAjZW5kaWYKIAotI2RlZmluZSBaTElCX1ZFUlNJT04gIjEuMi41IgotI2RlZmluZSBaTElCX1ZFUk5VTSAweDEyNTAKKyNkZWZpbmUgWkxJQl9WRVJTSU9OICIxLjIuOCIKKyNkZWZpbmUgWkxJQl9WRVJOVU0gMHgxMjgwCiAjZGVmaW5lIFpMSUJfVkVSX01BSk9SIDEKICNkZWZpbmUgWkxJQl9WRVJfTUlOT1IgMgotI2RlZmluZSBaTElCX1ZFUl9SRVZJU0lPTiA1CisjZGVmaW5lIFpMSUJfVkVSX1JFVklTSU9OIDgKICNkZWZpbmUgWkxJQl9WRVJfU1VCUkVWSVNJT04gMAogCiAvKgpAQCAtODMsMTUgKzgzLDE1IEBACiBzdHJ1Y3QgaW50ZXJuYWxfc3RhdGU7CiAKIHR5cGVkZWYgc3RydWN0IHpfc3RyZWFtX3MgewotICAgIEJ5dGVmICAgICpuZXh0X2luOyAgLyogbmV4dCBpbnB1dCBieXRlICovCisgICAgel9jb25zdCBCeXRlZiAqbmV4dF9pbjsgICAgIC8qIG5leHQgaW5wdXQgYnl0ZSAqLwogICAgIHVJbnQgICAgIGF2YWlsX2luOyAgLyogbnVtYmVyIG9mIGJ5dGVzIGF2YWlsYWJsZSBhdCBuZXh0X2luICovCi0gICAgdUxvbmcgICAgdG90YWxfaW47ICAvKiB0b3RhbCBuYiBvZiBpbnB1dCBieXRlcyByZWFkIHNvIGZhciAqLworICAgIHVMb25nICAgIHRvdGFsX2luOyAgLyogdG90YWwgbnVtYmVyIG9mIGlucHV0IGJ5dGVzIHJlYWQgc28gZmFyICovCiAKICAgICBCeXRlZiAgICAqbmV4dF9vdXQ7IC8qIG5leHQgb3V0cHV0IGJ5dGUgc2hvdWxkIGJlIHB1dCB0aGVyZSAqLwogICAgIHVJbnQgICAgIGF2YWlsX291dDsgLyogcmVtYWluaW5nIGZyZWUgc3BhY2UgYXQgbmV4dF9vdXQgKi8KLSAgICB1TG9uZyAgICB0b3RhbF9vdXQ7IC8qIHRvdGFsIG5iIG9mIGJ5dGVzIG91dHB1dCBzbyBmYXIgKi8KKyAgICB1TG9uZyAgICB0b3RhbF9vdXQ7IC8qIHRvdGFsIG51bWJlciBvZiBieXRlcyBvdXRwdXQgc28gZmFyICovCiAKLSAgICBjaGFyICAgICAqbXNnOyAgICAgIC8qIGxhc3QgZXJyb3IgbWVzc2FnZSwgTlVMTCBpZiBubyBlcnJvciAqLworICAgIHpfY29uc3QgY2hhciAqbXNnOyAgLyogbGFzdCBlcnJvciBtZXNzYWdlLCBOVUxMIGlmIG5vIGVycm9yICovCiAgICAgc3RydWN0IGludGVybmFsX3N0YXRlIEZBUiAqc3RhdGU7IC8qIG5vdCB2aXNpYmxlIGJ5IGFwcGxpY2F0aW9ucyAqLwogCiAgICAgYWxsb2NfZnVuYyB6YWxsb2M7ICAvKiB1c2VkIHRvIGFsbG9jYXRlIHRoZSBpbnRlcm5hbCBzdGF0ZSAqLwpAQCAtMzI3LDggKzMyNyw5IEBACiAKICAgICBaX0ZJTklTSCBjYW4gYmUgdXNlZCBpbW1lZGlhdGVseSBhZnRlciBkZWZsYXRlSW5pdCBpZiBhbGwgdGhlIGNvbXByZXNzaW9uCiAgIGlzIHRvIGJlIGRvbmUgaW4gYSBzaW5nbGUgc3RlcC4gIEluIHRoaXMgY2FzZSwgYXZhaWxfb3V0IG11c3QgYmUgYXQgbGVhc3QgdGhlCi0gIHZhbHVlIHJldHVybmVkIGJ5IGRlZmxhdGVCb3VuZCAoc2VlIGJlbG93KS4gIElmIGRlZmxhdGUgZG9lcyBub3QgcmV0dXJuCi0gIFpfU1RSRUFNX0VORCwgdGhlbiBpdCBtdXN0IGJlIGNhbGxlZCBhZ2FpbiBhcyBkZXNjcmliZWQgYWJvdmUuCisgIHZhbHVlIHJldHVybmVkIGJ5IGRlZmxhdGVCb3VuZCAoc2VlIGJlbG93KS4gIFRoZW4gZGVmbGF0ZSBpcyBndWFyYW50ZWVkIHRvCisgIHJldHVybiBaX1NUUkVBTV9FTkQuICBJZiBub3QgZW5vdWdoIG91dHB1dCBzcGFjZSBpcyBwcm92aWRlZCwgZGVmbGF0ZSB3aWxsCisgIG5vdCByZXR1cm4gWl9TVFJFQU1fRU5ELCBhbmQgaXQgbXVzdCBiZSBjYWxsZWQgYWdhaW4gYXMgZGVzY3JpYmVkIGFib3ZlLgogCiAgICAgZGVmbGF0ZSgpIHNldHMgc3RybS0+YWRsZXIgdG8gdGhlIGFkbGVyMzIgY2hlY2tzdW0gb2YgYWxsIGlucHV0IHJlYWQKICAgc28gZmFyICh0aGF0IGlzLCB0b3RhbF9pbiBieXRlcykuCkBAIC00NTEsMjMgKzQ1MiwyOSBAQAogICBlcnJvci4gIEhvd2V2ZXIgaWYgYWxsIGRlY29tcHJlc3Npb24gaXMgdG8gYmUgcGVyZm9ybWVkIGluIGEgc2luZ2xlIHN0ZXAgKGEKICAgc2luZ2xlIGNhbGwgb2YgaW5mbGF0ZSksIHRoZSBwYXJhbWV0ZXIgZmx1c2ggc2hvdWxkIGJlIHNldCB0byBaX0ZJTklTSC4gIEluCiAgIHRoaXMgY2FzZSBhbGwgcGVuZGluZyBpbnB1dCBpcyBwcm9jZXNzZWQgYW5kIGFsbCBwZW5kaW5nIG91dHB1dCBpcyBmbHVzaGVkOwotICBhdmFpbF9vdXQgbXVzdCBiZSBsYXJnZSBlbm91Z2ggdG8gaG9sZCBhbGwgdGhlIHVuY29tcHJlc3NlZCBkYXRhLiAgKFRoZSBzaXplCi0gIG9mIHRoZSB1bmNvbXByZXNzZWQgZGF0YSBtYXkgaGF2ZSBiZWVuIHNhdmVkIGJ5IHRoZSBjb21wcmVzc29yIGZvciB0aGlzCi0gIHB1cnBvc2UuKSBUaGUgbmV4dCBvcGVyYXRpb24gb24gdGhpcyBzdHJlYW0gbXVzdCBiZSBpbmZsYXRlRW5kIHRvIGRlYWxsb2NhdGUKLSAgdGhlIGRlY29tcHJlc3Npb24gc3RhdGUuICBUaGUgdXNlIG9mIFpfRklOSVNIIGlzIG5ldmVyIHJlcXVpcmVkLCBidXQgY2FuIGJlCi0gIHVzZWQgdG8gaW5mb3JtIGluZmxhdGUgdGhhdCBhIGZhc3RlciBhcHByb2FjaCBtYXkgYmUgdXNlZCBmb3IgdGhlIHNpbmdsZQotICBpbmZsYXRlKCkgY2FsbC4KKyAgYXZhaWxfb3V0IG11c3QgYmUgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgYWxsIG9mIHRoZSB1bmNvbXByZXNzZWQgZGF0YSBmb3IgdGhlCisgIG9wZXJhdGlvbiB0byBjb21wbGV0ZS4gIChUaGUgc2l6ZSBvZiB0aGUgdW5jb21wcmVzc2VkIGRhdGEgbWF5IGhhdmUgYmVlbgorICBzYXZlZCBieSB0aGUgY29tcHJlc3NvciBmb3IgdGhpcyBwdXJwb3NlLikgVGhlIHVzZSBvZiBaX0ZJTklTSCBpcyBub3QKKyAgcmVxdWlyZWQgdG8gcGVyZm9ybSBhbiBpbmZsYXRpb24gaW4gb25lIHN0ZXAuICBIb3dldmVyIGl0IG1heSBiZSB1c2VkIHRvCisgIGluZm9ybSBpbmZsYXRlIHRoYXQgYSBmYXN0ZXIgYXBwcm9hY2ggY2FuIGJlIHVzZWQgZm9yIHRoZSBzaW5nbGUgaW5mbGF0ZSgpCisgIGNhbGwuICBaX0ZJTklTSCBhbHNvIGluZm9ybXMgaW5mbGF0ZSB0byBub3QgbWFpbnRhaW4gYSBzbGlkaW5nIHdpbmRvdyBpZiB0aGUKKyAgc3RyZWFtIGNvbXBsZXRlcywgd2hpY2ggcmVkdWNlcyBpbmZsYXRlJ3MgbWVtb3J5IGZvb3RwcmludC4gIElmIHRoZSBzdHJlYW0KKyAgZG9lcyBub3QgY29tcGxldGUsIGVpdGhlciBiZWNhdXNlIG5vdCBhbGwgb2YgdGhlIHN0cmVhbSBpcyBwcm92aWRlZCBvciBub3QKKyAgZW5vdWdoIG91dHB1dCBzcGFjZSBpcyBwcm92aWRlZCwgdGhlbiBhIHNsaWRpbmcgd2luZG93IHdpbGwgYmUgYWxsb2NhdGVkIGFuZAorICBpbmZsYXRlKCkgY2FuIGJlIGNhbGxlZCBhZ2FpbiB0byBjb250aW51ZSB0aGUgb3BlcmF0aW9uIGFzIGlmIFpfTk9fRkxVU0ggaGFkCisgIGJlZW4gdXNlZC4KIAogICAgICBJbiB0aGlzIGltcGxlbWVudGF0aW9uLCBpbmZsYXRlKCkgYWx3YXlzIGZsdXNoZXMgYXMgbXVjaCBvdXRwdXQgYXMKICAgcG9zc2libGUgdG8gdGhlIG91dHB1dCBidWZmZXIsIGFuZCBhbHdheXMgdXNlcyB0aGUgZmFzdGVyIGFwcHJvYWNoIG9uIHRoZQotICBmaXJzdCBjYWxsLiAgU28gdGhlIG9ubHkgZWZmZWN0IG9mIHRoZSBmbHVzaCBwYXJhbWV0ZXIgaW4gdGhpcyBpbXBsZW1lbnRhdGlvbgotICBpcyBvbiB0aGUgcmV0dXJuIHZhbHVlIG9mIGluZmxhdGUoKSwgYXMgbm90ZWQgYmVsb3csIG9yIHdoZW4gaXQgcmV0dXJucyBlYXJseQotICBiZWNhdXNlIFpfQkxPQ0sgb3IgWl9UUkVFUyBpcyB1c2VkLgorICBmaXJzdCBjYWxsLiAgU28gdGhlIGVmZmVjdHMgb2YgdGhlIGZsdXNoIHBhcmFtZXRlciBpbiB0aGlzIGltcGxlbWVudGF0aW9uIGFyZQorICBvbiB0aGUgcmV0dXJuIHZhbHVlIG9mIGluZmxhdGUoKSBhcyBub3RlZCBiZWxvdywgd2hlbiBpbmZsYXRlKCkgcmV0dXJucyBlYXJseQorICB3aGVuIFpfQkxPQ0sgb3IgWl9UUkVFUyBpcyB1c2VkLCBhbmQgd2hlbiBpbmZsYXRlKCkgYXZvaWRzIHRoZSBhbGxvY2F0aW9uIG9mCisgIG1lbW9yeSBmb3IgYSBzbGlkaW5nIHdpbmRvdyB3aGVuIFpfRklOSVNIIGlzIHVzZWQuCiAKICAgICAgSWYgYSBwcmVzZXQgZGljdGlvbmFyeSBpcyBuZWVkZWQgYWZ0ZXIgdGhpcyBjYWxsIChzZWUgaW5mbGF0ZVNldERpY3Rpb25hcnkKLSAgYmVsb3cpLCBpbmZsYXRlIHNldHMgc3RybS0+YWRsZXIgdG8gdGhlIGFkbGVyMzIgY2hlY2tzdW0gb2YgdGhlIGRpY3Rpb25hcnkKKyAgYmVsb3cpLCBpbmZsYXRlIHNldHMgc3RybS0+YWRsZXIgdG8gdGhlIEFkbGVyLTMyIGNoZWNrc3VtIG9mIHRoZSBkaWN0aW9uYXJ5CiAgIGNob3NlbiBieSB0aGUgY29tcHJlc3NvciBhbmQgcmV0dXJucyBaX05FRURfRElDVDsgb3RoZXJ3aXNlIGl0IHNldHMKLSAgc3RybS0+YWRsZXIgdG8gdGhlIGFkbGVyMzIgY2hlY2tzdW0gb2YgYWxsIG91dHB1dCBwcm9kdWNlZCBzbyBmYXIgKHRoYXQgaXMsCisgIHN0cm0tPmFkbGVyIHRvIHRoZSBBZGxlci0zMiBjaGVja3N1bSBvZiBhbGwgb3V0cHV0IHByb2R1Y2VkIHNvIGZhciAodGhhdCBpcywKICAgdG90YWxfb3V0IGJ5dGVzKSBhbmQgcmV0dXJucyBaX09LLCBaX1NUUkVBTV9FTkQgb3IgYW4gZXJyb3IgY29kZSBhcyBkZXNjcmliZWQKICAgYmVsb3cuICBBdCB0aGUgZW5kIG9mIHRoZSBzdHJlYW0sIGluZmxhdGUoKSBjaGVja3MgdGhhdCBpdHMgY29tcHV0ZWQgYWRsZXIzMgogICBjaGVja3N1bSBpcyBlcXVhbCB0byB0aGF0IHNhdmVkIGJ5IHRoZSBjb21wcmVzc29yIGFuZCByZXR1cm5zIFpfU1RSRUFNX0VORApAQCAtNDc4LDcgKzQ4NSw5IEBACiAgIGluaXRpYWxpemluZyB3aXRoIGluZmxhdGVJbml0MigpLiAgQW55IGluZm9ybWF0aW9uIGNvbnRhaW5lZCBpbiB0aGUgZ3ppcAogICBoZWFkZXIgaXMgbm90IHJldGFpbmVkLCBzbyBhcHBsaWNhdGlvbnMgdGhhdCBuZWVkIHRoYXQgaW5mb3JtYXRpb24gc2hvdWxkCiAgIGluc3RlYWQgdXNlIHJhdyBpbmZsYXRlLCBzZWUgaW5mbGF0ZUluaXQyKCkgYmVsb3csIG9yIGluZmxhdGVCYWNrKCkgYW5kCi0gIHBlcmZvcm0gdGhlaXIgb3duIHByb2Nlc3Npbmcgb2YgdGhlIGd6aXAgaGVhZGVyIGFuZCB0cmFpbGVyLgorICBwZXJmb3JtIHRoZWlyIG93biBwcm9jZXNzaW5nIG9mIHRoZSBnemlwIGhlYWRlciBhbmQgdHJhaWxlci4gIFdoZW4gcHJvY2Vzc2luZworICBnemlwLXdyYXBwZWQgZGVmbGF0ZSBkYXRhLCBzdHJtLT5hZGxlcjMyIGlzIHNldCB0byB0aGUgQ1JDLTMyIG9mIHRoZSBvdXRwdXQKKyAgcHJvZHVjdGVkIHNvIGZhci4gIFRoZSBDUkMtMzIgaXMgY2hlY2tlZCBhZ2FpbnN0IHRoZSBnemlwIHRyYWlsZXIuCiAKICAgICBpbmZsYXRlKCkgcmV0dXJucyBaX09LIGlmIHNvbWUgcHJvZ3Jlc3MgaGFzIGJlZW4gbWFkZSAobW9yZSBpbnB1dCBwcm9jZXNzZWQKICAgb3IgbW9yZSBvdXRwdXQgcHJvZHVjZWQpLCBaX1NUUkVBTV9FTkQgaWYgdGhlIGVuZCBvZiB0aGUgY29tcHJlc3NlZCBkYXRhIGhhcwpAQCAtNTgwLDEwICs1ODksMTUgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVJbnQgIGRpY3RMZW5ndGgpKTsKIC8qCiAgICAgIEluaXRpYWxpemVzIHRoZSBjb21wcmVzc2lvbiBkaWN0aW9uYXJ5IGZyb20gdGhlIGdpdmVuIGJ5dGUgc2VxdWVuY2UKLSAgIHdpdGhvdXQgcHJvZHVjaW5nIGFueSBjb21wcmVzc2VkIG91dHB1dC4gIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQKLSAgIGltbWVkaWF0ZWx5IGFmdGVyIGRlZmxhdGVJbml0LCBkZWZsYXRlSW5pdDIgb3IgZGVmbGF0ZVJlc2V0LCBiZWZvcmUgYW55IGNhbGwKLSAgIG9mIGRlZmxhdGUuICBUaGUgY29tcHJlc3NvciBhbmQgZGVjb21wcmVzc29yIG11c3QgdXNlIGV4YWN0bHkgdGhlIHNhbWUKLSAgIGRpY3Rpb25hcnkgKHNlZSBpbmZsYXRlU2V0RGljdGlvbmFyeSkuCisgICB3aXRob3V0IHByb2R1Y2luZyBhbnkgY29tcHJlc3NlZCBvdXRwdXQuICBXaGVuIHVzaW5nIHRoZSB6bGliIGZvcm1hdCwgdGhpcworICAgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgZGVmbGF0ZUluaXQsIGRlZmxhdGVJbml0MiBvcgorICAgZGVmbGF0ZVJlc2V0LCBhbmQgYmVmb3JlIGFueSBjYWxsIG9mIGRlZmxhdGUuICBXaGVuIGRvaW5nIHJhdyBkZWZsYXRlLCB0aGlzCisgICBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBlaXRoZXIgYmVmb3JlIGFueSBjYWxsIG9mIGRlZmxhdGUsIG9yIGltbWVkaWF0ZWx5CisgICBhZnRlciB0aGUgY29tcGxldGlvbiBvZiBhIGRlZmxhdGUgYmxvY2ssIGkuZS4gYWZ0ZXIgYWxsIGlucHV0IGhhcyBiZWVuCisgICBjb25zdW1lZCBhbmQgYWxsIG91dHB1dCBoYXMgYmVlbiBkZWxpdmVyZWQgd2hlbiB1c2luZyBhbnkgb2YgdGhlIGZsdXNoCisgICBvcHRpb25zIFpfQkxPQ0ssIFpfUEFSVElBTF9GTFVTSCwgWl9TWU5DX0ZMVVNILCBvciBaX0ZVTExfRkxVU0guICBUaGUKKyAgIGNvbXByZXNzb3IgYW5kIGRlY29tcHJlc3NvciBtdXN0IHVzZSBleGFjdGx5IHRoZSBzYW1lIGRpY3Rpb25hcnkgKHNlZQorICAgaW5mbGF0ZVNldERpY3Rpb25hcnkpLgogCiAgICAgIFRoZSBkaWN0aW9uYXJ5IHNob3VsZCBjb25zaXN0IG9mIHN0cmluZ3MgKGJ5dGUgc2VxdWVuY2VzKSB0aGF0IGFyZSBsaWtlbHkKICAgIHRvIGJlIGVuY291bnRlcmVkIGxhdGVyIGluIHRoZSBkYXRhIHRvIGJlIGNvbXByZXNzZWQsIHdpdGggdGhlIG1vc3QgY29tbW9ubHkKQEAgLTYxMCw4ICs2MjQsOCBAQAogICAgICBkZWZsYXRlU2V0RGljdGlvbmFyeSByZXR1cm5zIFpfT0sgaWYgc3VjY2Vzcywgb3IgWl9TVFJFQU1fRVJST1IgaWYgYQogICAgcGFyYW1ldGVyIGlzIGludmFsaWQgKGUuZy4gIGRpY3Rpb25hcnkgYmVpbmcgWl9OVUxMKSBvciB0aGUgc3RyZWFtIHN0YXRlIGlzCiAgICBpbmNvbnNpc3RlbnQgKGZvciBleGFtcGxlIGlmIGRlZmxhdGUgaGFzIGFscmVhZHkgYmVlbiBjYWxsZWQgZm9yIHRoaXMgc3RyZWFtCi0gICBvciBpZiB0aGUgY29tcHJlc3Npb24gbWV0aG9kIGlzIGJzb3J0KS4gIGRlZmxhdGVTZXREaWN0aW9uYXJ5IGRvZXMgbm90Ci0gICBwZXJmb3JtIGFueSBjb21wcmVzc2lvbjogdGhpcyB3aWxsIGJlIGRvbmUgYnkgZGVmbGF0ZSgpLgorICAgb3IgaWYgbm90IGF0IGEgYmxvY2sgYm91bmRhcnkgZm9yIHJhdyBkZWZsYXRlKS4gIGRlZmxhdGVTZXREaWN0aW9uYXJ5IGRvZXMKKyAgIG5vdCBwZXJmb3JtIGFueSBjb21wcmVzc2lvbjogdGhpcyB3aWxsIGJlIGRvbmUgYnkgZGVmbGF0ZSgpLgogKi8KIAogWkVYVEVSTiBpbnQgWkVYUE9SVCBkZWZsYXRlQ29weSBPRigoel9zdHJlYW1wIGRlc3QsCkBAIC02ODgsOSArNzAyLDI5IEBACiAgICBkZWZsYXRpb24gb2Ygc291cmNlTGVuIGJ5dGVzLiAgSXQgbXVzdCBiZSBjYWxsZWQgYWZ0ZXIgZGVmbGF0ZUluaXQoKSBvcgogICAgZGVmbGF0ZUluaXQyKCksIGFuZCBhZnRlciBkZWZsYXRlU2V0SGVhZGVyKCksIGlmIHVzZWQuICBUaGlzIHdvdWxkIGJlIHVzZWQKICAgIHRvIGFsbG9jYXRlIGFuIG91dHB1dCBidWZmZXIgZm9yIGRlZmxhdGlvbiBpbiBhIHNpbmdsZSBwYXNzLCBhbmQgc28gd291bGQgYmUKLSAgIGNhbGxlZCBiZWZvcmUgZGVmbGF0ZSgpLgorICAgY2FsbGVkIGJlZm9yZSBkZWZsYXRlKCkuICBJZiB0aGF0IGZpcnN0IGRlZmxhdGUoKSBjYWxsIGlzIHByb3ZpZGVkIHRoZQorICAgc291cmNlTGVuIGlucHV0IGJ5dGVzLCBhbiBvdXRwdXQgYnVmZmVyIGFsbG9jYXRlZCB0byB0aGUgc2l6ZSByZXR1cm5lZCBieQorICAgZGVmbGF0ZUJvdW5kKCksIGFuZCB0aGUgZmx1c2ggdmFsdWUgWl9GSU5JU0gsIHRoZW4gZGVmbGF0ZSgpIGlzIGd1YXJhbnRlZWQKKyAgIHRvIHJldHVybiBaX1NUUkVBTV9FTkQuICBOb3RlIHRoYXQgaXQgaXMgcG9zc2libGUgZm9yIHRoZSBjb21wcmVzc2VkIHNpemUgdG8KKyAgIGJlIGxhcmdlciB0aGFuIHRoZSB2YWx1ZSByZXR1cm5lZCBieSBkZWZsYXRlQm91bmQoKSBpZiBmbHVzaCBvcHRpb25zIG90aGVyCisgICB0aGFuIFpfRklOSVNIIG9yIFpfTk9fRkxVU0ggYXJlIHVzZWQuCiAqLwogCitaRVhURVJOIGludCBaRVhQT1JUIGRlZmxhdGVQZW5kaW5nIE9GKCh6X3N0cmVhbXAgc3RybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkICpwZW5kaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpiaXRzKSk7CisvKgorICAgICBkZWZsYXRlUGVuZGluZygpIHJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyBhbmQgYml0cyBvZiBvdXRwdXQgdGhhdCBoYXZlCisgICBiZWVuIGdlbmVyYXRlZCwgYnV0IG5vdCB5ZXQgcHJvdmlkZWQgaW4gdGhlIGF2YWlsYWJsZSBvdXRwdXQuICBUaGUgYnl0ZXMgbm90CisgICBwcm92aWRlZCB3b3VsZCBiZSBkdWUgdG8gdGhlIGF2YWlsYWJsZSBvdXRwdXQgc3BhY2UgaGF2aW5nIGJlaW5nIGNvbnN1bWVkLgorICAgVGhlIG51bWJlciBvZiBiaXRzIG9mIG91dHB1dCBub3QgcHJvdmlkZWQgYXJlIGJldHdlZW4gMCBhbmQgNywgd2hlcmUgdGhleQorICAgYXdhaXQgbW9yZSBiaXRzIHRvIGpvaW4gdGhlbSBpbiBvcmRlciB0byBmaWxsIG91dCBhIGZ1bGwgYnl0ZS4gIElmIHBlbmRpbmcKKyAgIG9yIGJpdHMgYXJlIFpfTlVMTCwgdGhlbiB0aG9zZSB2YWx1ZXMgYXJlIG5vdCBzZXQuCisKKyAgICAgZGVmbGF0ZVBlbmRpbmcgcmV0dXJucyBaX09LIGlmIHN1Y2Nlc3MsIG9yIFpfU1RSRUFNX0VSUk9SIGlmIHRoZSBzb3VyY2UKKyAgIHN0cmVhbSBzdGF0ZSB3YXMgaW5jb25zaXN0ZW50LgorICovCisKIFpFWFRFUk4gaW50IFpFWFBPUlQgZGVmbGF0ZVByaW1lIE9GKCh6X3N0cmVhbXAgc3RybSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYml0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdmFsdWUpKTsKQEAgLTcwMyw4ICs3MzcsOSBAQAogICAgdGhhbiBvciBlcXVhbCB0byAxNiwgYW5kIHRoYXQgbWFueSBvZiB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBvZiB2YWx1ZQogICAgd2lsbCBiZSBpbnNlcnRlZCBpbiB0aGUgb3V0cHV0LgogCi0gICAgIGRlZmxhdGVQcmltZSByZXR1cm5zIFpfT0sgaWYgc3VjY2Vzcywgb3IgWl9TVFJFQU1fRVJST1IgaWYgdGhlIHNvdXJjZQotICAgc3RyZWFtIHN0YXRlIHdhcyBpbmNvbnNpc3RlbnQuCisgICAgIGRlZmxhdGVQcmltZSByZXR1cm5zIFpfT0sgaWYgc3VjY2VzcywgWl9CVUZfRVJST1IgaWYgdGhlcmUgd2FzIG5vdCBlbm91Z2gKKyAgIHJvb20gaW4gdGhlIGludGVybmFsIGJ1ZmZlciB0byBpbnNlcnQgdGhlIGJpdHMsIG9yIFpfU1RSRUFNX0VSUk9SIGlmIHRoZQorICAgc291cmNlIHN0cmVhbSBzdGF0ZSB3YXMgaW5jb25zaXN0ZW50LgogKi8KIAogWkVYVEVSTiBpbnQgWkVYUE9SVCBkZWZsYXRlU2V0SGVhZGVyIE9GKCh6X3N0cmVhbXAgc3RybSwKQEAgLTc5MCwxMCArODI1LDExIEBACiAgICBpZiB0aGF0IGNhbGwgcmV0dXJuZWQgWl9ORUVEX0RJQ1QuICBUaGUgZGljdGlvbmFyeSBjaG9zZW4gYnkgdGhlIGNvbXByZXNzb3IKICAgIGNhbiBiZSBkZXRlcm1pbmVkIGZyb20gdGhlIGFkbGVyMzIgdmFsdWUgcmV0dXJuZWQgYnkgdGhhdCBjYWxsIG9mIGluZmxhdGUuCiAgICBUaGUgY29tcHJlc3NvciBhbmQgZGVjb21wcmVzc29yIG11c3QgdXNlIGV4YWN0bHkgdGhlIHNhbWUgZGljdGlvbmFyeSAoc2VlCi0gICBkZWZsYXRlU2V0RGljdGlvbmFyeSkuICBGb3IgcmF3IGluZmxhdGUsIHRoaXMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZAotICAgaW1tZWRpYXRlbHkgYWZ0ZXIgaW5mbGF0ZUluaXQyKCkgb3IgaW5mbGF0ZVJlc2V0KCkgYW5kIGJlZm9yZSBhbnkgY2FsbCBvZgotICAgaW5mbGF0ZSgpIHRvIHNldCB0aGUgZGljdGlvbmFyeS4gIFRoZSBhcHBsaWNhdGlvbiBtdXN0IGluc3VyZSB0aGF0IHRoZQotICAgZGljdGlvbmFyeSB0aGF0IHdhcyB1c2VkIGZvciBjb21wcmVzc2lvbiBpcyBwcm92aWRlZC4KKyAgIGRlZmxhdGVTZXREaWN0aW9uYXJ5KS4gIEZvciByYXcgaW5mbGF0ZSwgdGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIGF0IGFueQorICAgdGltZSB0byBzZXQgdGhlIGRpY3Rpb25hcnkuICBJZiB0aGUgcHJvdmlkZWQgZGljdGlvbmFyeSBpcyBzbWFsbGVyIHRoYW4gdGhlCisgICB3aW5kb3cgYW5kIHRoZXJlIGlzIGFscmVhZHkgZGF0YSBpbiB0aGUgd2luZG93LCB0aGVuIHRoZSBwcm92aWRlZCBkaWN0aW9uYXJ5CisgICB3aWxsIGFtZW5kIHdoYXQncyB0aGVyZS4gIFRoZSBhcHBsaWNhdGlvbiBtdXN0IGluc3VyZSB0aGF0IHRoZSBkaWN0aW9uYXJ5CisgICB0aGF0IHdhcyB1c2VkIGZvciBjb21wcmVzc2lvbiBpcyBwcm92aWRlZC4KIAogICAgICBpbmZsYXRlU2V0RGljdGlvbmFyeSByZXR1cm5zIFpfT0sgaWYgc3VjY2VzcywgWl9TVFJFQU1fRVJST1IgaWYgYQogICAgcGFyYW1ldGVyIGlzIGludmFsaWQgKGUuZy4gIGRpY3Rpb25hcnkgYmVpbmcgWl9OVUxMKSBvciB0aGUgc3RyZWFtIHN0YXRlIGlzCkBAIC04MDMsMTkgKzgzOSwzOCBAQAogICAgaW5mbGF0ZSgpLgogKi8KIAorWkVYVEVSTiBpbnQgWkVYUE9SVCBpbmZsYXRlR2V0RGljdGlvbmFyeSBPRigoel9zdHJlYW1wIHN0cm0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCeXRlZiAqZGljdGlvbmFyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVJbnQgICpkaWN0TGVuZ3RoKSk7CisvKgorICAgICBSZXR1cm5zIHRoZSBzbGlkaW5nIGRpY3Rpb25hcnkgYmVpbmcgbWFpbnRhaW5lZCBieSBpbmZsYXRlLiAgZGljdExlbmd0aCBpcworICAgc2V0IHRvIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIGRpY3Rpb25hcnksIGFuZCB0aGF0IG1hbnkgYnl0ZXMgYXJlIGNvcGllZAorICAgdG8gZGljdGlvbmFyeS4gIGRpY3Rpb25hcnkgbXVzdCBoYXZlIGVub3VnaCBzcGFjZSwgd2hlcmUgMzI3NjggYnl0ZXMgaXMKKyAgIGFsd2F5cyBlbm91Z2guICBJZiBpbmZsYXRlR2V0RGljdGlvbmFyeSgpIGlzIGNhbGxlZCB3aXRoIGRpY3Rpb25hcnkgZXF1YWwgdG8KKyAgIFpfTlVMTCwgdGhlbiBvbmx5IHRoZSBkaWN0aW9uYXJ5IGxlbmd0aCBpcyByZXR1cm5lZCwgYW5kIG5vdGhpbmcgaXMgY29waWVkLgorICAgU2ltaWxhcnksIGlmIGRpY3RMZW5ndGggaXMgWl9OVUxMLCB0aGVuIGl0IGlzIG5vdCBzZXQuCisKKyAgICAgaW5mbGF0ZUdldERpY3Rpb25hcnkgcmV0dXJucyBaX09LIG9uIHN1Y2Nlc3MsIG9yIFpfU1RSRUFNX0VSUk9SIGlmIHRoZQorICAgc3RyZWFtIHN0YXRlIGlzIGluY29uc2lzdGVudC4KKyovCisKIFpFWFRFUk4gaW50IFpFWFBPUlQgaW5mbGF0ZVN5bmMgT0YoKHpfc3RyZWFtcCBzdHJtKSk7CiAvKgotICAgICBTa2lwcyBpbnZhbGlkIGNvbXByZXNzZWQgZGF0YSB1bnRpbCBhIGZ1bGwgZmx1c2ggcG9pbnQgKHNlZSBhYm92ZSB0aGUKLSAgIGRlc2NyaXB0aW9uIG9mIGRlZmxhdGUgd2l0aCBaX0ZVTExfRkxVU0gpIGNhbiBiZSBmb3VuZCwgb3IgdW50aWwgYWxsCisgICAgIFNraXBzIGludmFsaWQgY29tcHJlc3NlZCBkYXRhIHVudGlsIGEgcG9zc2libGUgZnVsbCBmbHVzaCBwb2ludCAoc2VlIGFib3ZlCisgICBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mIGRlZmxhdGUgd2l0aCBaX0ZVTExfRkxVU0gpIGNhbiBiZSBmb3VuZCwgb3IgdW50aWwgYWxsCiAgICBhdmFpbGFibGUgaW5wdXQgaXMgc2tpcHBlZC4gIE5vIG91dHB1dCBpcyBwcm92aWRlZC4KIAotICAgICBpbmZsYXRlU3luYyByZXR1cm5zIFpfT0sgaWYgYSBmdWxsIGZsdXNoIHBvaW50IGhhcyBiZWVuIGZvdW5kLCBaX0JVRl9FUlJPUgotICAgaWYgbm8gbW9yZSBpbnB1dCB3YXMgcHJvdmlkZWQsIFpfREFUQV9FUlJPUiBpZiBubyBmbHVzaCBwb2ludCBoYXMgYmVlbgotICAgZm91bmQsIG9yIFpfU1RSRUFNX0VSUk9SIGlmIHRoZSBzdHJlYW0gc3RydWN0dXJlIHdhcyBpbmNvbnNpc3RlbnQuICBJbiB0aGUKLSAgIHN1Y2Nlc3MgY2FzZSwgdGhlIGFwcGxpY2F0aW9uIG1heSBzYXZlIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRvdGFsX2luCi0gICB3aGljaCBpbmRpY2F0ZXMgd2hlcmUgdmFsaWQgY29tcHJlc3NlZCBkYXRhIHdhcyBmb3VuZC4gIEluIHRoZSBlcnJvciBjYXNlLAotICAgdGhlIGFwcGxpY2F0aW9uIG1heSByZXBlYXRlZGx5IGNhbGwgaW5mbGF0ZVN5bmMsIHByb3ZpZGluZyBtb3JlIGlucHV0IGVhY2gKLSAgIHRpbWUsIHVudGlsIHN1Y2Nlc3Mgb3IgZW5kIG9mIHRoZSBpbnB1dCBkYXRhLgorICAgICBpbmZsYXRlU3luYyBzZWFyY2hlcyBmb3IgYSAwMCAwMCBGRiBGRiBwYXR0ZXJuIGluIHRoZSBjb21wcmVzc2VkIGRhdGEuCisgICBBbGwgZnVsbCBmbHVzaCBwb2ludHMgaGF2ZSB0aGlzIHBhdHRlcm4sIGJ1dCBub3QgYWxsIG9jY3VycmVuY2VzIG9mIHRoaXMKKyAgIHBhdHRlcm4gYXJlIGZ1bGwgZmx1c2ggcG9pbnRzLgorCisgICAgIGluZmxhdGVTeW5jIHJldHVybnMgWl9PSyBpZiBhIHBvc3NpYmxlIGZ1bGwgZmx1c2ggcG9pbnQgaGFzIGJlZW4gZm91bmQsCisgICBaX0JVRl9FUlJPUiBpZiBubyBtb3JlIGlucHV0IHdhcyBwcm92aWRlZCwgWl9EQVRBX0VSUk9SIGlmIG5vIGZsdXNoIHBvaW50CisgICBoYXMgYmVlbiBmb3VuZCwgb3IgWl9TVFJFQU1fRVJST1IgaWYgdGhlIHN0cmVhbSBzdHJ1Y3R1cmUgd2FzIGluY29uc2lzdGVudC4KKyAgIEluIHRoZSBzdWNjZXNzIGNhc2UsIHRoZSBhcHBsaWNhdGlvbiBtYXkgc2F2ZSB0aGUgY3VycmVudCBjdXJyZW50IHZhbHVlIG9mCisgICB0b3RhbF9pbiB3aGljaCBpbmRpY2F0ZXMgd2hlcmUgdmFsaWQgY29tcHJlc3NlZCBkYXRhIHdhcyBmb3VuZC4gIEluIHRoZQorICAgZXJyb3IgY2FzZSwgdGhlIGFwcGxpY2F0aW9uIG1heSByZXBlYXRlZGx5IGNhbGwgaW5mbGF0ZVN5bmMsIHByb3ZpZGluZyBtb3JlCisgICBpbnB1dCBlYWNoIHRpbWUsIHVudGlsIHN1Y2Nlc3Mgb3IgZW5kIG9mIHRoZSBpbnB1dCBkYXRhLgogKi8KIAogWkVYVEVSTiBpbnQgWkVYUE9SVCBpbmZsYXRlQ29weSBPRigoel9zdHJlYW1wIGRlc3QsCkBAIC05NjIsMTIgKzEwMTcsMTMgQEAKICAgICAgU2VlIGluZmxhdGVCYWNrKCkgZm9yIHRoZSB1c2FnZSBvZiB0aGVzZSByb3V0aW5lcy4KIAogICAgICBpbmZsYXRlQmFja0luaXQgd2lsbCByZXR1cm4gWl9PSyBvbiBzdWNjZXNzLCBaX1NUUkVBTV9FUlJPUiBpZiBhbnkgb2YKLSAgIHRoZSBwYXJhbWF0ZXJzIGFyZSBpbnZhbGlkLCBaX01FTV9FUlJPUiBpZiB0aGUgaW50ZXJuYWwgc3RhdGUgY291bGQgbm90IGJlCisgICB0aGUgcGFyYW1ldGVycyBhcmUgaW52YWxpZCwgWl9NRU1fRVJST1IgaWYgdGhlIGludGVybmFsIHN0YXRlIGNvdWxkIG5vdCBiZQogICAgYWxsb2NhdGVkLCBvciBaX1ZFUlNJT05fRVJST1IgaWYgdGhlIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkgZG9lcyBub3QgbWF0Y2gKICAgIHRoZSB2ZXJzaW9uIG9mIHRoZSBoZWFkZXIgZmlsZS4KICovCiAKLXR5cGVkZWYgdW5zaWduZWQgKCppbl9mdW5jKSBPRigodm9pZCBGQVIgKiwgdW5zaWduZWQgY2hhciBGQVIgKiBGQVIgKikpOwordHlwZWRlZiB1bnNpZ25lZCAoKmluX2Z1bmMpIE9GKCh2b2lkIEZBUiAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6X2NvbnN0IHVuc2lnbmVkIGNoYXIgRkFSICogRkFSICopKTsKIHR5cGVkZWYgaW50ICgqb3V0X2Z1bmMpIE9GKCh2b2lkIEZBUiAqLCB1bnNpZ25lZCBjaGFyIEZBUiAqLCB1bnNpZ25lZCkpOwogCiBaRVhURVJOIGludCBaRVhQT1JUIGluZmxhdGVCYWNrIE9GKCh6X3N0cmVhbXAgc3RybSwKQEAgLTk3NSwxMSArMTAzMSwxMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0X2Z1bmMgb3V0LCB2b2lkIEZBUiAqb3V0X2Rlc2MpKTsKIC8qCiAgICAgIGluZmxhdGVCYWNrKCkgZG9lcyBhIHJhdyBpbmZsYXRlIHdpdGggYSBzaW5nbGUgY2FsbCB1c2luZyBhIGNhbGwtYmFjawotICAgaW50ZXJmYWNlIGZvciBpbnB1dCBhbmQgb3V0cHV0LiAgVGhpcyBpcyBtb3JlIGVmZmljaWVudCB0aGFuIGluZmxhdGUoKSBmb3IKLSAgIGZpbGUgaS9vIGFwcGxpY2F0aW9ucyBpbiB0aGF0IGl0IGF2b2lkcyBjb3B5aW5nIGJldHdlZW4gdGhlIG91dHB1dCBhbmQgdGhlCi0gICBzbGlkaW5nIHdpbmRvdyBieSBzaW1wbHkgbWFraW5nIHRoZSB3aW5kb3cgaXRzZWxmIHRoZSBvdXRwdXQgYnVmZmVyLiAgVGhpcwotICAgZnVuY3Rpb24gdHJ1c3RzIHRoZSBhcHBsaWNhdGlvbiB0byBub3QgY2hhbmdlIHRoZSBvdXRwdXQgYnVmZmVyIHBhc3NlZCBieQotICAgdGhlIG91dHB1dCBmdW5jdGlvbiwgYXQgbGVhc3QgdW50aWwgaW5mbGF0ZUJhY2soKSByZXR1cm5zLgorICAgaW50ZXJmYWNlIGZvciBpbnB1dCBhbmQgb3V0cHV0LiAgVGhpcyBpcyBwb3RlbnRpYWxseSBtb3JlIGVmZmljaWVudCB0aGFuCisgICBpbmZsYXRlKCkgZm9yIGZpbGUgaS9vIGFwcGxpY2F0aW9ucywgaW4gdGhhdCBpdCBhdm9pZHMgY29weWluZyBiZXR3ZWVuIHRoZQorICAgb3V0cHV0IGFuZCB0aGUgc2xpZGluZyB3aW5kb3cgYnkgc2ltcGx5IG1ha2luZyB0aGUgd2luZG93IGl0c2VsZiB0aGUgb3V0cHV0CisgICBidWZmZXIuICBpbmZsYXRlKCkgY2FuIGJlIGZhc3RlciBvbiBtb2Rlcm4gQ1BVcyB3aGVuIHVzZWQgd2l0aCBsYXJnZQorICAgYnVmZmVycy4gIGluZmxhdGVCYWNrKCkgdHJ1c3RzIHRoZSBhcHBsaWNhdGlvbiB0byBub3QgY2hhbmdlIHRoZSBvdXRwdXQKKyAgIGJ1ZmZlciBwYXNzZWQgYnkgdGhlIG91dHB1dCBmdW5jdGlvbiwgYXQgbGVhc3QgdW50aWwgaW5mbGF0ZUJhY2soKSByZXR1cm5zLgogCiAgICAgIGluZmxhdGVCYWNrSW5pdCgpIG11c3QgYmUgY2FsbGVkIGZpcnN0IHRvIGFsbG9jYXRlIHRoZSBpbnRlcm5hbCBzdGF0ZQogICAgYW5kIHRvIGluaXRpYWxpemUgdGhlIHN0YXRlIHdpdGggdGhlIHVzZXItcHJvdmlkZWQgd2luZG93IGJ1ZmZlci4KQEAgLTEwODgsNiArMTE0NSw3IEBACiAgICAgIDI3LTMxOiAwIChyZXNlcnZlZCkKICAqLwogCisjaWZuZGVmIFpfU09MTwogCiAgICAgICAgICAgICAgICAgICAgICAgICAvKiB1dGlsaXR5IGZ1bmN0aW9ucyAqLwogCkBAIC0xMTQ5LDEwICsxMjA3LDExIEBACiAKICAgICAgdW5jb21wcmVzcyByZXR1cm5zIFpfT0sgaWYgc3VjY2VzcywgWl9NRU1fRVJST1IgaWYgdGhlcmUgd2FzIG5vdAogICAgZW5vdWdoIG1lbW9yeSwgWl9CVUZfRVJST1IgaWYgdGhlcmUgd2FzIG5vdCBlbm91Z2ggcm9vbSBpbiB0aGUgb3V0cHV0Ci0gICBidWZmZXIsIG9yIFpfREFUQV9FUlJPUiBpZiB0aGUgaW5wdXQgZGF0YSB3YXMgY29ycnVwdGVkIG9yIGluY29tcGxldGUuCisgICBidWZmZXIsIG9yIFpfREFUQV9FUlJPUiBpZiB0aGUgaW5wdXQgZGF0YSB3YXMgY29ycnVwdGVkIG9yIGluY29tcGxldGUuICBJbgorICAgdGhlIGNhc2Ugd2hlcmUgdGhlcmUgaXMgbm90IGVub3VnaCByb29tLCB1bmNvbXByZXNzKCkgd2lsbCBmaWxsIHRoZSBvdXRwdXQKKyAgIGJ1ZmZlciB3aXRoIHRoZSB1bmNvbXByZXNzZWQgZGF0YSB1cCB0byB0aGF0IHBvaW50LgogKi8KIAotCiAgICAgICAgICAgICAgICAgICAgICAgICAvKiBnemlwIGZpbGUgYWNjZXNzIGZ1bmN0aW9ucyAqLwogCiAvKgpAQCAtMTE2Miw3ICsxMjIxLDcgQEAKICAgIHdyYXBwZXIsIGRvY3VtZW50ZWQgaW4gUkZDIDE5NTIsIHdyYXBwZWQgYXJvdW5kIGEgZGVmbGF0ZSBzdHJlYW0uCiAqLwogCi10eXBlZGVmIHZvaWRwIGd6RmlsZTsgICAgICAgLyogb3BhcXVlIGd6aXAgZmlsZSBkZXNjcmlwdG9yICovCit0eXBlZGVmIHN0cnVjdCBnekZpbGVfcyAqZ3pGaWxlOyAgICAvKiBzZW1pLW9wYXF1ZSBnemlwIGZpbGUgZGVzY3JpcHRvciAqLwogCiAvKgogWkVYVEVSTiBnekZpbGUgWkVYUE9SVCBnem9wZW4gT0YoKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUpKTsKQEAgLTExNzIsMTMgKzEyMzEsMjggQEAKICAgIGEgc3RyYXRlZ3k6ICdmJyBmb3IgZmlsdGVyZWQgZGF0YSBhcyBpbiAid2I2ZiIsICdoJyBmb3IgSHVmZm1hbi1vbmx5CiAgICBjb21wcmVzc2lvbiBhcyBpbiAid2IxaCIsICdSJyBmb3IgcnVuLWxlbmd0aCBlbmNvZGluZyBhcyBpbiAid2IxUiIsIG9yICdGJwogICAgZm9yIGZpeGVkIGNvZGUgY29tcHJlc3Npb24gYXMgaW4gIndiOUYiLiAgKFNlZSB0aGUgZGVzY3JpcHRpb24gb2YKLSAgIGRlZmxhdGVJbml0MiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3RyYXRlZ3kgcGFyYW1ldGVyLikgQWxzbyAiYSIKLSAgIGNhbiBiZSB1c2VkIGluc3RlYWQgb2YgInciIHRvIHJlcXVlc3QgdGhhdCB0aGUgZ3ppcCBzdHJlYW0gdGhhdCB3aWxsIGJlCi0gICB3cml0dGVuIGJlIGFwcGVuZGVkIHRvIHRoZSBmaWxlLiAgIisiIHdpbGwgcmVzdWx0IGluIGFuIGVycm9yLCBzaW5jZSByZWFkaW5nCi0gICBhbmQgd3JpdGluZyB0byB0aGUgc2FtZSBnemlwIGZpbGUgaXMgbm90IHN1cHBvcnRlZC4KKyAgIGRlZmxhdGVJbml0MiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3RyYXRlZ3kgcGFyYW1ldGVyLikgICdUJyB3aWxsCisgICByZXF1ZXN0IHRyYW5zcGFyZW50IHdyaXRpbmcgb3IgYXBwZW5kaW5nIHdpdGggbm8gY29tcHJlc3Npb24gYW5kIG5vdCB1c2luZworICAgdGhlIGd6aXAgZm9ybWF0LgorCisgICAgICJhIiBjYW4gYmUgdXNlZCBpbnN0ZWFkIG9mICJ3IiB0byByZXF1ZXN0IHRoYXQgdGhlIGd6aXAgc3RyZWFtIHRoYXQgd2lsbAorICAgYmUgd3JpdHRlbiBiZSBhcHBlbmRlZCB0byB0aGUgZmlsZS4gICIrIiB3aWxsIHJlc3VsdCBpbiBhbiBlcnJvciwgc2luY2UKKyAgIHJlYWRpbmcgYW5kIHdyaXRpbmcgdG8gdGhlIHNhbWUgZ3ppcCBmaWxlIGlzIG5vdCBzdXBwb3J0ZWQuICBUaGUgYWRkaXRpb24gb2YKKyAgICJ4IiB3aGVuIHdyaXRpbmcgd2lsbCBjcmVhdGUgdGhlIGZpbGUgZXhjbHVzaXZlbHksIHdoaWNoIGZhaWxzIGlmIHRoZSBmaWxlCisgICBhbHJlYWR5IGV4aXN0cy4gIE9uIHN5c3RlbXMgdGhhdCBzdXBwb3J0IGl0LCB0aGUgYWRkaXRpb24gb2YgImUiIHdoZW4KKyAgIHJlYWRpbmcgb3Igd3JpdGluZyB3aWxsIHNldCB0aGUgZmxhZyB0byBjbG9zZSB0aGUgZmlsZSBvbiBhbiBleGVjdmUoKSBjYWxsLgorCisgICAgIFRoZXNlIGZ1bmN0aW9ucywgYXMgd2VsbCBhcyBnemlwLCB3aWxsIHJlYWQgYW5kIGRlY29kZSBhIHNlcXVlbmNlIG9mIGd6aXAKKyAgIHN0cmVhbXMgaW4gYSBmaWxlLiAgVGhlIGFwcGVuZCBmdW5jdGlvbiBvZiBnem9wZW4oKSBjYW4gYmUgdXNlZCB0byBjcmVhdGUKKyAgIHN1Y2ggYSBmaWxlLiAgKEFsc28gc2VlIGd6Zmx1c2goKSBmb3IgYW5vdGhlciB3YXkgdG8gZG8gdGhpcy4pICBXaGVuCisgICBhcHBlbmRpbmcsIGd6b3BlbiBkb2VzIG5vdCB0ZXN0IHdoZXRoZXIgdGhlIGZpbGUgYmVnaW5zIHdpdGggYSBnemlwIHN0cmVhbSwKKyAgIG5vciBkb2VzIGl0IGxvb2sgZm9yIHRoZSBlbmQgb2YgdGhlIGd6aXAgc3RyZWFtcyB0byBiZWdpbiBhcHBlbmRpbmcuICBnem9wZW4KKyAgIHdpbGwgc2ltcGx5IGFwcGVuZCBhIGd6aXAgc3RyZWFtIHRvIHRoZSBleGlzdGluZyBmaWxlLgogCiAgICAgIGd6b3BlbiBjYW4gYmUgdXNlZCB0byByZWFkIGEgZmlsZSB3aGljaCBpcyBub3QgaW4gZ3ppcCBmb3JtYXQ7IGluIHRoaXMKLSAgIGNhc2UgZ3pyZWFkIHdpbGwgZGlyZWN0bHkgcmVhZCBmcm9tIHRoZSBmaWxlIHdpdGhvdXQgZGVjb21wcmVzc2lvbi4KKyAgIGNhc2UgZ3pyZWFkIHdpbGwgZGlyZWN0bHkgcmVhZCBmcm9tIHRoZSBmaWxlIHdpdGhvdXQgZGVjb21wcmVzc2lvbi4gIFdoZW4KKyAgIHJlYWRpbmcsIHRoaXMgd2lsbCBiZSBkZXRlY3RlZCBhdXRvbWF0aWNhbGx5IGJ5IGxvb2tpbmcgZm9yIHRoZSBtYWdpYyB0d28tCisgICBieXRlIGd6aXAgaGVhZGVyLgogCiAgICAgIGd6b3BlbiByZXR1cm5zIE5VTEwgaWYgdGhlIGZpbGUgY291bGQgbm90IGJlIG9wZW5lZCwgaWYgdGhlcmUgd2FzCiAgICBpbnN1ZmZpY2llbnQgbWVtb3J5IHRvIGFsbG9jYXRlIHRoZSBnekZpbGUgc3RhdGUsIG9yIGlmIGFuIGludmFsaWQgbW9kZSB3YXMKQEAgLTExOTcsNyArMTI3MSwxMSBAQAogICAgZGVzY3JpcHRvciBmZCwganVzdCBsaWtlIGZjbG9zZShmZG9wZW4oZmQsIG1vZGUpKSBjbG9zZXMgdGhlIGZpbGUgZGVzY3JpcHRvcgogICAgZmQuICBJZiB5b3Ugd2FudCB0byBrZWVwIGZkIG9wZW4sIHVzZSBmZCA9IGR1cChmZF9rZWVwKTsgZ3ogPSBnemRvcGVuKGZkLAogICAgbW9kZSk7LiAgVGhlIGR1cGxpY2F0ZWQgZGVzY3JpcHRvciBzaG91bGQgYmUgc2F2ZWQgdG8gYXZvaWQgYSBsZWFrLCBzaW5jZQotICAgZ3pkb3BlbiBkb2VzIG5vdCBjbG9zZSBmZCBpZiBpdCBmYWlscy4KKyAgIGd6ZG9wZW4gZG9lcyBub3QgY2xvc2UgZmQgaWYgaXQgZmFpbHMuICBJZiB5b3UgYXJlIHVzaW5nIGZpbGVubygpIHRvIGdldCB0aGUKKyAgIGZpbGUgZGVzY3JpcHRvciBmcm9tIGEgRklMRSAqLCB0aGVuIHlvdSB3aWxsIGhhdmUgdG8gdXNlIGR1cCgpIHRvIGF2b2lkCisgICBkb3VibGUtY2xvc2UoKWluZyB0aGUgZmlsZSBkZXNjcmlwdG9yLiAgQm90aCBnemNsb3NlKCkgYW5kIGZjbG9zZSgpIHdpbGwKKyAgIGNsb3NlIHRoZSBhc3NvY2lhdGVkIGZpbGUgZGVzY3JpcHRvciwgc28gdGhleSBuZWVkIHRvIGhhdmUgZGlmZmVyZW50IGZpbGUKKyAgIGRlc2NyaXB0b3JzLgogCiAgICAgIGd6ZG9wZW4gcmV0dXJucyBOVUxMIGlmIHRoZXJlIHdhcyBpbnN1ZmZpY2llbnQgbWVtb3J5IHRvIGFsbG9jYXRlIHRoZQogICAgZ3pGaWxlIHN0YXRlLCBpZiBhbiBpbnZhbGlkIG1vZGUgd2FzIHNwZWNpZmllZCAoYW4gJ3InLCAndycsIG9yICdhJyB3YXMgbm90CkBAIC0xMjM1LDE0ICsxMzEzLDI2IEBACiBaRVhURVJOIGludCBaRVhQT1JUIGd6cmVhZCBPRigoZ3pGaWxlIGZpbGUsIHZvaWRwIGJ1ZiwgdW5zaWduZWQgbGVuKSk7CiAvKgogICAgICBSZWFkcyB0aGUgZ2l2ZW4gbnVtYmVyIG9mIHVuY29tcHJlc3NlZCBieXRlcyBmcm9tIHRoZSBjb21wcmVzc2VkIGZpbGUuICBJZgotICAgdGhlIGlucHV0IGZpbGUgd2FzIG5vdCBpbiBnemlwIGZvcm1hdCwgZ3pyZWFkIGNvcGllcyB0aGUgZ2l2ZW4gbnVtYmVyIG9mCi0gICBieXRlcyBpbnRvIHRoZSBidWZmZXIuCisgICB0aGUgaW5wdXQgZmlsZSBpcyBub3QgaW4gZ3ppcCBmb3JtYXQsIGd6cmVhZCBjb3BpZXMgdGhlIGdpdmVuIG51bWJlciBvZgorICAgYnl0ZXMgaW50byB0aGUgYnVmZmVyIGRpcmVjdGx5IGZyb20gdGhlIGZpbGUuCiAKICAgICAgQWZ0ZXIgcmVhY2hpbmcgdGhlIGVuZCBvZiBhIGd6aXAgc3RyZWFtIGluIHRoZSBpbnB1dCwgZ3pyZWFkIHdpbGwgY29udGludWUKLSAgIHRvIHJlYWQsIGxvb2tpbmcgZm9yIGFub3RoZXIgZ3ppcCBzdHJlYW0sIG9yIGZhaWxpbmcgdGhhdCwgcmVhZGluZyB0aGUgcmVzdAotICAgb2YgdGhlIGlucHV0IGZpbGUgZGlyZWN0bHkgd2l0aG91dCBkZWNvbXByZXNzaW9uLiAgVGhlIGVudGlyZSBpbnB1dCBmaWxlCi0gICB3aWxsIGJlIHJlYWQgaWYgZ3pyZWFkIGlzIGNhbGxlZCB1bnRpbCBpdCByZXR1cm5zIGxlc3MgdGhhbiB0aGUgcmVxdWVzdGVkCi0gICBsZW4uCisgICB0byByZWFkLCBsb29raW5nIGZvciBhbm90aGVyIGd6aXAgc3RyZWFtLiAgQW55IG51bWJlciBvZiBnemlwIHN0cmVhbXMgbWF5IGJlCisgICBjb25jYXRlbmF0ZWQgaW4gdGhlIGlucHV0IGZpbGUsIGFuZCB3aWxsIGFsbCBiZSBkZWNvbXByZXNzZWQgYnkgZ3pyZWFkKCkuCisgICBJZiBzb21ldGhpbmcgb3RoZXIgdGhhbiBhIGd6aXAgc3RyZWFtIGlzIGVuY291bnRlcmVkIGFmdGVyIGEgZ3ppcCBzdHJlYW0sCisgICB0aGF0IHJlbWFpbmluZyB0cmFpbGluZyBnYXJiYWdlIGlzIGlnbm9yZWQgKGFuZCBubyBlcnJvciBpcyByZXR1cm5lZCkuCisKKyAgICAgZ3pyZWFkIGNhbiBiZSB1c2VkIHRvIHJlYWQgYSBnemlwIGZpbGUgdGhhdCBpcyBiZWluZyBjb25jdXJyZW50bHkgd3JpdHRlbi4KKyAgIFVwb24gcmVhY2hpbmcgdGhlIGVuZCBvZiB0aGUgaW5wdXQsIGd6cmVhZCB3aWxsIHJldHVybiB3aXRoIHRoZSBhdmFpbGFibGUKKyAgIGRhdGEuICBJZiB0aGUgZXJyb3IgY29kZSByZXR1cm5lZCBieSBnemVycm9yIGlzIFpfT0sgb3IgWl9CVUZfRVJST1IsIHRoZW4KKyAgIGd6Y2xlYXJlcnIgY2FuIGJlIHVzZWQgdG8gY2xlYXIgdGhlIGVuZCBvZiBmaWxlIGluZGljYXRvciBpbiBvcmRlciB0byBwZXJtaXQKKyAgIGd6cmVhZCB0byBiZSB0cmllZCBhZ2Fpbi4gIFpfT0sgaW5kaWNhdGVzIHRoYXQgYSBnemlwIHN0cmVhbSB3YXMgY29tcGxldGVkCisgICBvbiB0aGUgbGFzdCBnenJlYWQuICBaX0JVRl9FUlJPUiBpbmRpY2F0ZXMgdGhhdCB0aGUgaW5wdXQgZmlsZSBlbmRlZCBpbiB0aGUKKyAgIG1pZGRsZSBvZiBhIGd6aXAgc3RyZWFtLiAgTm90ZSB0aGF0IGd6cmVhZCBkb2VzIG5vdCByZXR1cm4gLTEgaW4gdGhlIGV2ZW50CisgICBvZiBhbiBpbmNvbXBsZXRlIGd6aXAgc3RyZWFtLiAgVGhpcyBlcnJvciBpcyBkZWZlcnJlZCB1bnRpbCBnemNsb3NlKCksIHdoaWNoCisgICB3aWxsIHJldHVybiBaX0JVRl9FUlJPUiBpZiB0aGUgbGFzdCBnenJlYWQgZW5kZWQgaW4gdGhlIG1pZGRsZSBvZiBhIGd6aXAKKyAgIHN0cmVhbS4gIEFsdGVybmF0aXZlbHksIGd6ZXJyb3IgY2FuIGJlIHVzZWQgYmVmb3JlIGd6Y2xvc2UgdG8gZGV0ZWN0IHRoaXMKKyAgIGNhc2UuCiAKICAgICAgZ3pyZWFkIHJldHVybnMgdGhlIG51bWJlciBvZiB1bmNvbXByZXNzZWQgYnl0ZXMgYWN0dWFsbHkgcmVhZCwgbGVzcyB0aGFuCiAgICBsZW4gZm9yIGVuZCBvZiBmaWxlLCBvciAtMSBmb3IgZXJyb3IuCkBAIC0xMjU2LDcgKzEzNDYsNyBAQAogICAgZXJyb3IuCiAqLwogCi1aRVhURVJOIGludCBaRVhQT1JUVkEgZ3pwcmludGYgT0YoKGd6RmlsZSBmaWxlLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikpOworWkVYVEVSTiBpbnQgWkVYUE9SVFZBIGd6cHJpbnRmIFpfQVJHKChnekZpbGUgZmlsZSwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pKTsKIC8qCiAgICAgIENvbnZlcnRzLCBmb3JtYXRzLCBhbmQgd3JpdGVzIHRoZSBhcmd1bWVudHMgdG8gdGhlIGNvbXByZXNzZWQgZmlsZSB1bmRlcgogICAgY29udHJvbCBvZiB0aGUgZm9ybWF0IHN0cmluZywgYXMgaW4gZnByaW50Zi4gIGd6cHJpbnRmIHJldHVybnMgdGhlIG51bWJlciBvZgpAQCAtMTMwMSw3ICsxMzkxLDEwIEBACiBaRVhURVJOIGludCBaRVhQT1JUIGd6Z2V0YyBPRigoZ3pGaWxlIGZpbGUpKTsKIC8qCiAgICAgIFJlYWRzIG9uZSBieXRlIGZyb20gdGhlIGNvbXByZXNzZWQgZmlsZS4gIGd6Z2V0YyByZXR1cm5zIHRoaXMgYnl0ZSBvciAtMQotICAgaW4gY2FzZSBvZiBlbmQgb2YgZmlsZSBvciBlcnJvci4KKyAgIGluIGNhc2Ugb2YgZW5kIG9mIGZpbGUgb3IgZXJyb3IuICBUaGlzIGlzIGltcGxlbWVudGVkIGFzIGEgbWFjcm8gZm9yIHNwZWVkLgorICAgQXMgc3VjaCwgaXQgZG9lcyBub3QgZG8gYWxsIG9mIHRoZSBjaGVja2luZyB0aGUgb3RoZXIgZnVuY3Rpb25zIGRvLiAgSS5lLgorICAgaXQgZG9lcyBub3QgY2hlY2sgdG8gc2VlIGlmIGZpbGUgaXMgTlVMTCwgbm9yIHdoZXRoZXIgdGhlIHN0cnVjdHVyZSBmaWxlCisgICBwb2ludHMgdG8gaGFzIGJlZW4gY2xvYmJlcmVkIG9yIG5vdC4KICovCiAKIFpFWFRFUk4gaW50IFpFWFBPUlQgZ3p1bmdldGMgT0YoKGludCBjLCBnekZpbGUgZmlsZSkpOwpAQCAtMTM5Nyw5ICsxNDkwLDcgQEAKIFpFWFRFUk4gaW50IFpFWFBPUlQgZ3pkaXJlY3QgT0YoKGd6RmlsZSBmaWxlKSk7CiAvKgogICAgICBSZXR1cm5zIHRydWUgKDEpIGlmIGZpbGUgaXMgYmVpbmcgY29waWVkIGRpcmVjdGx5IHdoaWxlIHJlYWRpbmcsIG9yIGZhbHNlCi0gICAoMCkgaWYgZmlsZSBpcyBhIGd6aXAgc3RyZWFtIGJlaW5nIGRlY29tcHJlc3NlZC4gIFRoaXMgc3RhdGUgY2FuIGNoYW5nZSBmcm9tCi0gICBmYWxzZSB0byB0cnVlIHdoaWxlIHJlYWRpbmcgdGhlIGlucHV0IGZpbGUgaWYgdGhlIGVuZCBvZiBhIGd6aXAgc3RyZWFtIGlzCi0gICByZWFjaGVkLCBidXQgaXMgZm9sbG93ZWQgYnkgZGF0YSB0aGF0IGlzIG5vdCBhbm90aGVyIGd6aXAgc3RyZWFtLgorICAgKDApIGlmIGZpbGUgaXMgYSBnemlwIHN0cmVhbSBiZWluZyBkZWNvbXByZXNzZWQuCiAKICAgICAgSWYgdGhlIGlucHV0IGZpbGUgaXMgZW1wdHksIGd6ZGlyZWN0KCkgd2lsbCByZXR1cm4gdHJ1ZSwgc2luY2UgdGhlIGlucHV0CiAgICBkb2VzIG5vdCBjb250YWluIGEgZ3ppcCBzdHJlYW0uCkBAIC0xNDA4LDYgKzE0OTksMTMgQEAKICAgIGNhdXNlIGJ1ZmZlcnMgdG8gYmUgYWxsb2NhdGVkIHRvIGFsbG93IHJlYWRpbmcgdGhlIGZpbGUgdG8gZGV0ZXJtaW5lIGlmIGl0CiAgICBpcyBhIGd6aXAgZmlsZS4gIFRoZXJlZm9yZSBpZiBnemJ1ZmZlcigpIGlzIHVzZWQsIGl0IHNob3VsZCBiZSBjYWxsZWQgYmVmb3JlCiAgICBnemRpcmVjdCgpLgorCisgICAgIFdoZW4gd3JpdGluZywgZ3pkaXJlY3QoKSByZXR1cm5zIHRydWUgKDEpIGlmIHRyYW5zcGFyZW50IHdyaXRpbmcgd2FzCisgICByZXF1ZXN0ZWQgKCJ3VCIgZm9yIHRoZSBnem9wZW4oKSBtb2RlKSwgb3IgZmFsc2UgKDApIG90aGVyd2lzZS4gIChOb3RlOgorICAgZ3pkaXJlY3QoKSBpcyBub3QgbmVlZGVkIHdoZW4gd3JpdGluZy4gIFRyYW5zcGFyZW50IHdyaXRpbmcgbXVzdCBiZQorICAgZXhwbGljaXRseSByZXF1ZXN0ZWQsIHNvIHRoZSBhcHBsaWNhdGlvbiBhbHJlYWR5IGtub3dzIHRoZSBhbnN3ZXIuICBXaGVuCisgICBsaW5raW5nIHN0YXRpY2FsbHksIHVzaW5nIGd6ZGlyZWN0KCkgd2lsbCBpbmNsdWRlIGFsbCBvZiB0aGUgemxpYiBjb2RlIGZvcgorICAgZ3ppcCBmaWxlIHJlYWRpbmcgYW5kIGRlY29tcHJlc3Npb24sIHdoaWNoIG1heSBub3QgYmUgZGVzaXJlZC4pCiAqLwogCiBaRVhURVJOIGludCBaRVhQT1JUICAgIGd6Y2xvc2UgT0YoKGd6RmlsZSBmaWxlKSk7CkBAIC0xNDE5LDcgKzE1MTcsOCBAQAogICAgbXVzdCBub3QgYmUgY2FsbGVkIG1vcmUgdGhhbiBvbmNlIG9uIHRoZSBzYW1lIGFsbG9jYXRpb24uCiAKICAgICAgZ3pjbG9zZSB3aWxsIHJldHVybiBaX1NUUkVBTV9FUlJPUiBpZiBmaWxlIGlzIG5vdCB2YWxpZCwgWl9FUlJOTyBvbiBhCi0gICBmaWxlIG9wZXJhdGlvbiBlcnJvciwgb3IgWl9PSyBvbiBzdWNjZXNzLgorICAgZmlsZSBvcGVyYXRpb24gZXJyb3IsIFpfTUVNX0VSUk9SIGlmIG91dCBvZiBtZW1vcnksIFpfQlVGX0VSUk9SIGlmIHRoZQorICAgbGFzdCByZWFkIGVuZGVkIGluIHRoZSBtaWRkbGUgb2YgYSBnemlwIHN0cmVhbSwgb3IgWl9PSyBvbiBzdWNjZXNzLgogKi8KIAogWkVYVEVSTiBpbnQgWkVYUE9SVCBnemNsb3NlX3IgT0YoKGd6RmlsZSBmaWxlKSk7CkBAIC0xNDU3LDYgKzE1NTYsNyBAQAogICAgZmlsZSB0aGF0IGlzIGJlaW5nIHdyaXR0ZW4gY29uY3VycmVudGx5LgogKi8KIAorI2VuZGlmIC8qICFaX1NPTE8gKi8KIAogICAgICAgICAgICAgICAgICAgICAgICAgLyogY2hlY2tzdW0gZnVuY3Rpb25zICovCiAKQEAgLTE0OTIsMTYgKzE1OTIsMTcgQEAKICAgICAgQ29tYmluZSB0d28gQWRsZXItMzIgY2hlY2tzdW1zIGludG8gb25lLiAgRm9yIHR3byBzZXF1ZW5jZXMgb2YgYnl0ZXMsIHNlcTEKICAgIGFuZCBzZXEyIHdpdGggbGVuZ3RocyBsZW4xIGFuZCBsZW4yLCBBZGxlci0zMiBjaGVja3N1bXMgd2VyZSBjYWxjdWxhdGVkIGZvcgogICAgZWFjaCwgYWRsZXIxIGFuZCBhZGxlcjIuICBhZGxlcjMyX2NvbWJpbmUoKSByZXR1cm5zIHRoZSBBZGxlci0zMiBjaGVja3N1bSBvZgotICAgc2VxMSBhbmQgc2VxMiBjb25jYXRlbmF0ZWQsIHJlcXVpcmluZyBvbmx5IGFkbGVyMSwgYWRsZXIyLCBhbmQgbGVuMi4KKyAgIHNlcTEgYW5kIHNlcTIgY29uY2F0ZW5hdGVkLCByZXF1aXJpbmcgb25seSBhZGxlcjEsIGFkbGVyMiwgYW5kIGxlbjIuICBOb3RlCisgICB0aGF0IHRoZSB6X29mZl90IHR5cGUgKGxpa2Ugb2ZmX3QpIGlzIGEgc2lnbmVkIGludGVnZXIuICBJZiBsZW4yIGlzCisgICBuZWdhdGl2ZSwgdGhlIHJlc3VsdCBoYXMgbm8gbWVhbmluZyBvciB1dGlsaXR5LgogKi8KIAogWkVYVEVSTiB1TG9uZyBaRVhQT1JUIGNyYzMyICAgT0YoKHVMb25nIGNyYywgY29uc3QgQnl0ZWYgKmJ1ZiwgdUludCBsZW4pKTsKIC8qCiAgICAgIFVwZGF0ZSBhIHJ1bm5pbmcgQ1JDLTMyIHdpdGggdGhlIGJ5dGVzIGJ1ZlswLi5sZW4tMV0gYW5kIHJldHVybiB0aGUKICAgIHVwZGF0ZWQgQ1JDLTMyLiAgSWYgYnVmIGlzIFpfTlVMTCwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSByZXF1aXJlZAotICAgaW5pdGlhbCB2YWx1ZSBmb3IgdGhlIGZvciB0aGUgY3JjLiAgUHJlLSBhbmQgcG9zdC1jb25kaXRpb25pbmcgKG9uZSdzCi0gICBjb21wbGVtZW50KSBpcyBwZXJmb3JtZWQgd2l0aGluIHRoaXMgZnVuY3Rpb24gc28gaXQgc2hvdWxkbid0IGJlIGRvbmUgYnkgdGhlCi0gICBhcHBsaWNhdGlvbi4KKyAgIGluaXRpYWwgdmFsdWUgZm9yIHRoZSBjcmMuICBQcmUtIGFuZCBwb3N0LWNvbmRpdGlvbmluZyAob25lJ3MgY29tcGxlbWVudCkgaXMKKyAgIHBlcmZvcm1lZCB3aXRoaW4gdGhpcyBmdW5jdGlvbiBzbyBpdCBzaG91bGRuJ3QgYmUgZG9uZSBieSB0aGUgYXBwbGljYXRpb24uCiAKICAgIFVzYWdlIGV4YW1wbGU6CiAKQEAgLTE1NDQsMTcgKzE2NDUsNDIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqdmVyc2lvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0cmVhbV9zaXplKSk7CiAjZGVmaW5lIGRlZmxhdGVJbml0KHN0cm0sIGxldmVsKSBcCi0gICAgICAgIGRlZmxhdGVJbml0Xygoc3RybSksIChsZXZlbCksICAgICAgIFpMSUJfVkVSU0lPTiwgc2l6ZW9mKHpfc3RyZWFtKSkKKyAgICAgICAgZGVmbGF0ZUluaXRfKChzdHJtKSwgKGxldmVsKSwgWkxJQl9WRVJTSU9OLCAoaW50KXNpemVvZih6X3N0cmVhbSkpCiAjZGVmaW5lIGluZmxhdGVJbml0KHN0cm0pIFwKLSAgICAgICAgaW5mbGF0ZUluaXRfKChzdHJtKSwgICAgICAgICAgICAgICAgWkxJQl9WRVJTSU9OLCBzaXplb2Yoel9zdHJlYW0pKQorICAgICAgICBpbmZsYXRlSW5pdF8oKHN0cm0pLCBaTElCX1ZFUlNJT04sIChpbnQpc2l6ZW9mKHpfc3RyZWFtKSkKICNkZWZpbmUgZGVmbGF0ZUluaXQyKHN0cm0sIGxldmVsLCBtZXRob2QsIHdpbmRvd0JpdHMsIG1lbUxldmVsLCBzdHJhdGVneSkgXAogICAgICAgICBkZWZsYXRlSW5pdDJfKChzdHJtKSwobGV2ZWwpLChtZXRob2QpLCh3aW5kb3dCaXRzKSwobWVtTGV2ZWwpLFwKLSAgICAgICAgICAgICAgICAgICAgICAoc3RyYXRlZ3kpLCAgICAgICAgICAgWkxJQl9WRVJTSU9OLCBzaXplb2Yoel9zdHJlYW0pKQorICAgICAgICAgICAgICAgICAgICAgIChzdHJhdGVneSksIFpMSUJfVkVSU0lPTiwgKGludClzaXplb2Yoel9zdHJlYW0pKQogI2RlZmluZSBpbmZsYXRlSW5pdDIoc3RybSwgd2luZG93Qml0cykgXAotICAgICAgICBpbmZsYXRlSW5pdDJfKChzdHJtKSwgKHdpbmRvd0JpdHMpLCBaTElCX1ZFUlNJT04sIHNpemVvZih6X3N0cmVhbSkpCisgICAgICAgIGluZmxhdGVJbml0Ml8oKHN0cm0pLCAod2luZG93Qml0cyksIFpMSUJfVkVSU0lPTiwgXAorICAgICAgICAgICAgICAgICAgICAgIChpbnQpc2l6ZW9mKHpfc3RyZWFtKSkKICNkZWZpbmUgaW5mbGF0ZUJhY2tJbml0KHN0cm0sIHdpbmRvd0JpdHMsIHdpbmRvdykgXAogICAgICAgICBpbmZsYXRlQmFja0luaXRfKChzdHJtKSwgKHdpbmRvd0JpdHMpLCAod2luZG93KSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBaTElCX1ZFUlNJT04sIHNpemVvZih6X3N0cmVhbSkpCisgICAgICAgICAgICAgICAgICAgICAgWkxJQl9WRVJTSU9OLCAoaW50KXNpemVvZih6X3N0cmVhbSkpCisKKyNpZm5kZWYgWl9TT0xPCisKKy8qIGd6Z2V0YygpIG1hY3JvIGFuZCBpdHMgc3VwcG9ydGluZyBmdW5jdGlvbiBhbmQgZXhwb3NlZCBkYXRhIHN0cnVjdHVyZS4gIE5vdGUKKyAqIHRoYXQgdGhlIHJlYWwgaW50ZXJuYWwgc3RhdGUgaXMgbXVjaCBsYXJnZXIgdGhhbiB0aGUgZXhwb3NlZCBzdHJ1Y3R1cmUuCisgKiBUaGlzIGFiYnJldmlhdGVkIHN0cnVjdHVyZSBleHBvc2VzIGp1c3QgZW5vdWdoIGZvciB0aGUgZ3pnZXRjKCkgbWFjcm8uICBUaGUKKyAqIHVzZXIgc2hvdWxkIG5vdCBtZXNzIHdpdGggdGhlc2UgZXhwb3NlZCBlbGVtZW50cywgc2luY2UgdGhlaXIgbmFtZXMgb3IKKyAqIGJlaGF2aW9yIGNvdWxkIGNoYW5nZSBpbiB0aGUgZnV0dXJlLCBwZXJoYXBzIGV2ZW4gY2FwcmljaW91c2x5LiAgVGhleSBjYW4KKyAqIG9ubHkgYmUgdXNlZCBieSB0aGUgZ3pnZXRjKCkgbWFjcm8uICBZb3UgaGF2ZSBiZWVuIHdhcm5lZC4KKyAqLworc3RydWN0IGd6RmlsZV9zIHsKKyAgICB1bnNpZ25lZCBoYXZlOworICAgIHVuc2lnbmVkIGNoYXIgKm5leHQ7CisgICAgel9vZmY2NF90IHBvczsKK307CitaRVhURVJOIGludCBaRVhQT1JUIGd6Z2V0Y18gT0YoKGd6RmlsZSBmaWxlKSk7ICAvKiBiYWNrd2FyZCBjb21wYXRpYmlsaXR5ICovCisjaWZkZWYgWl9QUkVGSVhfU0VUCisjICB1bmRlZiB6X2d6Z2V0YworIyAgZGVmaW5lIHpfZ3pnZXRjKGcpIFwKKyAgICAgICAgICAoKGcpLT5oYXZlID8gKChnKS0+aGF2ZS0tLCAoZyktPnBvcysrLCAqKChnKS0+bmV4dCkrKykgOiBnemdldGMoZykpCisjZWxzZQorIyAgZGVmaW5lIGd6Z2V0YyhnKSBcCisgICAgICAgICAgKChnKS0+aGF2ZSA/ICgoZyktPmhhdmUtLSwgKGcpLT5wb3MrKywgKigoZyktPm5leHQpKyspIDogZ3pnZXRjKGcpKQorI2VuZGlmCiAKIC8qIHByb3ZpZGUgNjQtYml0IG9mZnNldCBmdW5jdGlvbnMgaWYgX0xBUkdFRklMRTY0X1NPVVJDRSBkZWZpbmVkLCBhbmQvb3IKICAqIGNoYW5nZSB0aGUgcmVndWxhciBmdW5jdGlvbnMgdG8gNjQgYml0cyBpZiBfRklMRV9PRkZTRVRfQklUUyBpcyA2NCAoaWYKQEAgLTE1NjIsNyArMTY4OCw3IEBACiAgKiBmdW5jdGlvbnMgYXJlIGNoYW5nZWQgdG8gNjQgYml0cykgLS0gaW4gY2FzZSB0aGVzZSBhcmUgc2V0IG9uIHN5c3RlbXMKICAqIHdpdGhvdXQgbGFyZ2UgZmlsZSBzdXBwb3J0LCBfTEZTNjRfTEFSR0VGSUxFIG11c3QgYWxzbyBiZSB0cnVlCiAgKi8KLSNpZiBkZWZpbmVkKF9MQVJHRUZJTEU2NF9TT1VSQ0UpICYmIF9MRlM2NF9MQVJHRUZJTEUtMAorI2lmZGVmIFpfTEFSR0U2NAogICAgWkVYVEVSTiBnekZpbGUgWkVYUE9SVCBnem9wZW42NCBPRigoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopKTsKICAgIFpFWFRFUk4gel9vZmY2NF90IFpFWFBPUlQgZ3pzZWVrNjQgT0YoKGd6RmlsZSwgel9vZmY2NF90LCBpbnQpKTsKICAgIFpFWFRFUk4gel9vZmY2NF90IFpFWFBPUlQgZ3p0ZWxsNjQgT0YoKGd6RmlsZSkpOwpAQCAtMTU3MSwxNCArMTY5NywyMyBAQAogICAgWkVYVEVSTiB1TG9uZyBaRVhQT1JUIGNyYzMyX2NvbWJpbmU2NCBPRigodUxvbmcsIHVMb25nLCB6X29mZjY0X3QpKTsKICNlbmRpZgogCi0jaWYgIWRlZmluZWQoWkxJQl9JTlRFUk5BTCkgJiYgX0ZJTEVfT0ZGU0VUX0JJVFMtMCA9PSA2NCAmJiBfTEZTNjRfTEFSR0VGSUxFLTAKLSMgIGRlZmluZSBnem9wZW4gZ3pvcGVuNjQKLSMgIGRlZmluZSBnenNlZWsgZ3pzZWVrNjQKLSMgIGRlZmluZSBnenRlbGwgZ3p0ZWxsNjQKLSMgIGRlZmluZSBnem9mZnNldCBnem9mZnNldDY0Ci0jICBkZWZpbmUgYWRsZXIzMl9jb21iaW5lIGFkbGVyMzJfY29tYmluZTY0Ci0jICBkZWZpbmUgY3JjMzJfY29tYmluZSBjcmMzMl9jb21iaW5lNjQKLSMgIGlmZGVmIF9MQVJHRUZJTEU2NF9TT1VSQ0UKKyNpZiAhZGVmaW5lZChaTElCX0lOVEVSTkFMKSAmJiBkZWZpbmVkKFpfV0FOVDY0KQorIyAgaWZkZWYgWl9QUkVGSVhfU0VUCisjICAgIGRlZmluZSB6X2d6b3BlbiB6X2d6b3BlbjY0CisjICAgIGRlZmluZSB6X2d6c2VlayB6X2d6c2VlazY0CisjICAgIGRlZmluZSB6X2d6dGVsbCB6X2d6dGVsbDY0CisjICAgIGRlZmluZSB6X2d6b2Zmc2V0IHpfZ3pvZmZzZXQ2NAorIyAgICBkZWZpbmUgel9hZGxlcjMyX2NvbWJpbmUgel9hZGxlcjMyX2NvbWJpbmU2NAorIyAgICBkZWZpbmUgel9jcmMzMl9jb21iaW5lIHpfY3JjMzJfY29tYmluZTY0CisjICBlbHNlCisjICAgIGRlZmluZSBnem9wZW4gZ3pvcGVuNjQKKyMgICAgZGVmaW5lIGd6c2VlayBnenNlZWs2NAorIyAgICBkZWZpbmUgZ3p0ZWxsIGd6dGVsbDY0CisjICAgIGRlZmluZSBnem9mZnNldCBnem9mZnNldDY0CisjICAgIGRlZmluZSBhZGxlcjMyX2NvbWJpbmUgYWRsZXIzMl9jb21iaW5lNjQKKyMgICAgZGVmaW5lIGNyYzMyX2NvbWJpbmUgY3JjMzJfY29tYmluZTY0CisjICBlbmRpZgorIyAgaWZuZGVmIFpfTEFSR0U2NAogICAgICBaRVhURVJOIGd6RmlsZSBaRVhQT1JUIGd6b3BlbjY0IE9GKChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKikpOwogICAgICBaRVhURVJOIHpfb2ZmX3QgWkVYUE9SVCBnenNlZWs2NCBPRigoZ3pGaWxlLCB6X29mZl90LCBpbnQpKTsKICAgICAgWkVYVEVSTiB6X29mZl90IFpFWFBPUlQgZ3p0ZWxsNjQgT0YoKGd6RmlsZSkpOwpAQCAtMTU5NSw2ICsxNzMwLDEzIEBACiAgICBaRVhURVJOIHVMb25nIFpFWFBPUlQgY3JjMzJfY29tYmluZSBPRigodUxvbmcsIHVMb25nLCB6X29mZl90KSk7CiAjZW5kaWYKIAorI2Vsc2UgLyogWl9TT0xPICovCisKKyAgIFpFWFRFUk4gdUxvbmcgWkVYUE9SVCBhZGxlcjMyX2NvbWJpbmUgT0YoKHVMb25nLCB1TG9uZywgel9vZmZfdCkpOworICAgWkVYVEVSTiB1TG9uZyBaRVhQT1JUIGNyYzMyX2NvbWJpbmUgT0YoKHVMb25nLCB1TG9uZywgel9vZmZfdCkpOworCisjZW5kaWYgLyogIVpfU09MTyAqLworCiAvKiBoYWNrIGZvciBidWdneSBjb21waWxlcnMgKi8KICNpZiAhZGVmaW5lZChaVVRJTF9IKSAmJiAhZGVmaW5lZChOT19EVU1NWV9ERUNMKQogICAgIHN0cnVjdCBpbnRlcm5hbF9zdGF0ZSB7aW50IGR1bW15O307CkBAIC0xNjAzLDggKzE3NDUsMjEgQEAKIC8qIHVuZG9jdW1lbnRlZCBmdW5jdGlvbnMgKi8KIFpFWFRFUk4gY29uc3QgY2hhciAgICogWkVYUE9SVCB6RXJyb3IgICAgICAgICAgIE9GKChpbnQpKTsKIFpFWFRFUk4gaW50ICAgICAgICAgICAgWkVYUE9SVCBpbmZsYXRlU3luY1BvaW50IE9GKCh6X3N0cmVhbXApKTsKLVpFWFRFUk4gY29uc3QgdUxvbmdmICogWkVYUE9SVCBnZXRfY3JjX3RhYmxlICAgIE9GKCh2b2lkKSk7CitaRVhURVJOIGNvbnN0IHpfY3JjX3QgRkFSICogWkVYUE9SVCBnZXRfY3JjX3RhYmxlICAgIE9GKCh2b2lkKSk7CiBaRVhURVJOIGludCAgICAgICAgICAgIFpFWFBPUlQgaW5mbGF0ZVVuZGVybWluZSBPRigoel9zdHJlYW1wLCBpbnQpKTsKK1pFWFRFUk4gaW50ICAgICAgICAgICAgWkVYUE9SVCBpbmZsYXRlUmVzZXRLZWVwIE9GKCh6X3N0cmVhbXApKTsKK1pFWFRFUk4gaW50ICAgICAgICAgICAgWkVYUE9SVCBkZWZsYXRlUmVzZXRLZWVwIE9GKCh6X3N0cmVhbXApKTsKKyNpZiBkZWZpbmVkKF9XSU4zMikgJiYgIWRlZmluZWQoWl9TT0xPKQorWkVYVEVSTiBnekZpbGUgICAgICAgICBaRVhQT1JUIGd6b3Blbl93IE9GKChjb25zdCB3Y2hhcl90ICpwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICptb2RlKSk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKFNUREMpIHx8IGRlZmluZWQoWl9IQVZFX1NUREFSR19IKQorIyAgaWZuZGVmIFpfU09MTworWkVYVEVSTiBpbnQgICAgICAgICAgICBaRVhQT1JUVkEgZ3p2cHJpbnRmIFpfQVJHKChnekZpbGUgZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9saXN0IHZhKSk7CisjICBlbmRpZgorI2VuZGlmCiAKICNpZmRlZiBfX2NwbHVzcGx1cwogfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL3psaWIubWFwIGIvTW9kdWxlcy96bGliL3psaWIubWFwCmluZGV4IGYyODJkMzYuLjU1YzY2NDcgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi96bGliLm1hcAorKysgYi9Nb2R1bGVzL3psaWIvemxpYi5tYXAKQEAgLTY2LDMgKzY2LDE4IEBACiAgICAgZ3pjbG9zZV9yOwogICAgIGd6Y2xvc2VfdzsKIH0gWkxJQl8xLjIuMy40OworCitaTElCXzEuMi41LjEgeworICAgIGRlZmxhdGVQZW5kaW5nOworfSBaTElCXzEuMi4zLjU7CisKK1pMSUJfMS4yLjUuMiB7CisgICAgZGVmbGF0ZVJlc2V0S2VlcDsKKyAgICBnemdldGNfOworICAgIGluZmxhdGVSZXNldEtlZXA7Cit9IFpMSUJfMS4yLjUuMTsKKworWkxJQl8xLjIuNy4xIHsKKyAgICBpbmZsYXRlR2V0RGljdGlvbmFyeTsKKyAgICBnenZwcmludGY7Cit9IFpMSUJfMS4yLjUuMjsKZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi96dXRpbC5jIGIvTW9kdWxlcy96bGliL3p1dGlsLmMKaW5kZXggODk4ZWQzNC4uMjNkMmViZSAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL3p1dGlsLmMKKysrIGIvTW9kdWxlcy96bGliL3p1dGlsLmMKQEAgLTEsMTcgKzEsMjAgQEAKIC8qIHp1dGlsLmMgLS0gdGFyZ2V0IGRlcGVuZGVudCB1dGlsaXR5IGZ1bmN0aW9ucyBmb3IgdGhlIGNvbXByZXNzaW9uIGxpYnJhcnkKLSAqIENvcHlyaWdodCAoQykgMTk5NS0yMDA1LCAyMDEwIEplYW4tbG91cCBHYWlsbHkuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwNSwgMjAxMCwgMjAxMSwgMjAxMiBKZWFuLWxvdXAgR2FpbGx5LgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAogICovCiAKIC8qIEAoIykgJElkJCAqLwogCiAjaW5jbHVkZSAienV0aWwuaCIKKyNpZm5kZWYgWl9TT0xPCisjICBpbmNsdWRlICJnemd1dHMuaCIKKyNlbmRpZgogCiAjaWZuZGVmIE5PX0RVTU1ZX0RFQ0wKIHN0cnVjdCBpbnRlcm5hbF9zdGF0ZSAgICAgIHtpbnQgZHVtbXk7fTsgLyogZm9yIGJ1Z2d5IGNvbXBpbGVycyAqLwogI2VuZGlmCiAKLWNvbnN0IGNoYXIgKiBjb25zdCB6X2Vycm1zZ1sxMF0gPSB7Cit6X2NvbnN0IGNoYXIgKiBjb25zdCB6X2Vycm1zZ1sxMF0gPSB7CiAibmVlZCBkaWN0aW9uYXJ5IiwgICAgIC8qIFpfTkVFRF9ESUNUICAgICAgIDIgICovCiAic3RyZWFtIGVuZCIsICAgICAgICAgIC8qIFpfU1RSRUFNX0VORCAgICAgIDEgICovCiAiIiwgICAgICAgICAgICAgICAgICAgIC8qIFpfT0sgICAgICAgICAgICAgIDAgICovCkBAIC04NSwyNyArODgsMjcgQEAKICNpZmRlZiBGQVNURVNUCiAgICAgZmxhZ3MgKz0gMUwgPDwgMjE7CiAjZW5kaWYKLSNpZmRlZiBTVERDCisjaWYgZGVmaW5lZChTVERDKSB8fCBkZWZpbmVkKFpfSEFWRV9TVERBUkdfSCkKICMgIGlmZGVmIE5PX3ZzbnByaW50ZgotICAgICAgICBmbGFncyArPSAxTCA8PCAyNTsKKyAgICBmbGFncyArPSAxTCA8PCAyNTsKICMgICAgaWZkZWYgSEFTX3ZzcHJpbnRmX3ZvaWQKLSAgICAgICAgZmxhZ3MgKz0gMUwgPDwgMjY7CisgICAgZmxhZ3MgKz0gMUwgPDwgMjY7CiAjICAgIGVuZGlmCiAjICBlbHNlCiAjICAgIGlmZGVmIEhBU192c25wcmludGZfdm9pZAotICAgICAgICBmbGFncyArPSAxTCA8PCAyNjsKKyAgICBmbGFncyArPSAxTCA8PCAyNjsKICMgICAgZW5kaWYKICMgIGVuZGlmCiAjZWxzZQotICAgICAgICBmbGFncyArPSAxTCA8PCAyNDsKKyAgICBmbGFncyArPSAxTCA8PCAyNDsKICMgIGlmZGVmIE5PX3NucHJpbnRmCi0gICAgICAgIGZsYWdzICs9IDFMIDw8IDI1OworICAgIGZsYWdzICs9IDFMIDw8IDI1OwogIyAgICBpZmRlZiBIQVNfc3ByaW50Zl92b2lkCi0gICAgICAgIGZsYWdzICs9IDFMIDw8IDI2OworICAgIGZsYWdzICs9IDFMIDw8IDI2OwogIyAgICBlbmRpZgogIyAgZWxzZQogIyAgICBpZmRlZiBIQVNfc25wcmludGZfdm9pZAotICAgICAgICBmbGFncyArPSAxTCA8PCAyNjsKKyAgICBmbGFncyArPSAxTCA8PCAyNjsKICMgICAgZW5kaWYKICMgIGVuZGlmCiAjZW5kaWYKQEAgLTE4MSw2ICsxODQsNyBAQAogfQogI2VuZGlmCiAKKyNpZm5kZWYgWl9TT0xPCiAKICNpZmRlZiBTWVMxNkJJVAogCkBAIC0zMTYsMyArMzIwLDUgQEAKIH0KIAogI2VuZGlmIC8qIE1ZX1pDQUxMT0MgKi8KKworI2VuZGlmIC8qICFaX1NPTE8gKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi96dXRpbC5oIGIvTW9kdWxlcy96bGliL3p1dGlsLmgKaW5kZXggMjU4ZmE4OC4uMjRhYjA2YiAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL3p1dGlsLmgKKysrIGIvTW9kdWxlcy96bGliL3p1dGlsLmgKQEAgLTEsNSArMSw1IEBACiAvKiB6dXRpbC5oIC0tIGludGVybmFsIGludGVyZmFjZSBhbmQgY29uZmlndXJhdGlvbiBvZiB0aGUgY29tcHJlc3Npb24gbGlicmFyeQotICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMTAgSmVhbi1sb3VwIEdhaWxseS4KKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDEzIEplYW4tbG91cCBHYWlsbHkuCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCiAgKi8KIApAQCAtMTMsNyArMTMsNyBAQAogI2lmbmRlZiBaVVRJTF9ICiAjZGVmaW5lIFpVVElMX0gKIAotI2lmICgoX19HTlVDX18tMCkgKiAxMCArIF9fR05VQ19NSU5PUl9fLTAgPj0gMzMpICYmICFkZWZpbmVkKE5PX1ZJWikKKyNpZmRlZiBIQVZFX0hJRERFTgogIyAgZGVmaW5lIFpMSUJfSU5URVJOQUwgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImhpZGRlbiIpKSkKICNlbHNlCiAjICBkZWZpbmUgWkxJQl9JTlRFUk5BTApAQCAtMjEsNyArMjEsNyBAQAogCiAjaW5jbHVkZSAiemxpYi5oIgogCi0jaWZkZWYgU1REQworI2lmIGRlZmluZWQoU1REQykgJiYgIWRlZmluZWQoWl9TT0xPKQogIyAgaWYgIShkZWZpbmVkKF9XSU4zMl9XQ0UpICYmIGRlZmluZWQoX01TQ19WRVIpKQogIyAgICBpbmNsdWRlIDxzdGRkZWYuaD4KICMgIGVuZGlmCkBAIC0yOSw2ICsyOSwxMCBAQAogIyAgaW5jbHVkZSA8c3RkbGliLmg+CiAjZW5kaWYKIAorI2lmZGVmIFpfU09MTworICAgdHlwZWRlZiBsb25nIHB0cmRpZmZfdDsgIC8qIGd1ZXNzIC0tIHdpbGwgYmUgY2F1Z2h0IGlmIGd1ZXNzIGlzIHdyb25nICovCisjZW5kaWYKKwogI2lmbmRlZiBsb2NhbAogIyAgZGVmaW5lIGxvY2FsIHN0YXRpYwogI2VuZGlmCkBAIC00MCwxMyArNDQsMTMgQEAKIHR5cGVkZWYgdXNoIEZBUiB1c2hmOwogdHlwZWRlZiB1bnNpZ25lZCBsb25nICB1bGc7CiAKLWV4dGVybiBjb25zdCBjaGFyICogY29uc3Qgel9lcnJtc2dbMTBdOyAvKiBpbmRleGVkIGJ5IDItemxpYl9lcnJvciAqLworZXh0ZXJuIHpfY29uc3QgY2hhciAqIGNvbnN0IHpfZXJybXNnWzEwXTsgLyogaW5kZXhlZCBieSAyLXpsaWJfZXJyb3IgKi8KIC8qIChzaXplIGdpdmVuIHRvIGF2b2lkIHNpbGx5IHdhcm5pbmdzIHdpdGggVmlzdWFsIEMrKykgKi8KIAogI2RlZmluZSBFUlJfTVNHKGVycikgel9lcnJtc2dbWl9ORUVEX0RJQ1QtKGVycildCiAKICNkZWZpbmUgRVJSX1JFVFVSTihzdHJtLGVycikgXAotICByZXR1cm4gKHN0cm0tPm1zZyA9IChjaGFyKilFUlJfTVNHKGVyciksIChlcnIpKQorICByZXR1cm4gKHN0cm0tPm1zZyA9IEVSUl9NU0coZXJyKSwgKGVycikpCiAvKiBUbyBiZSB1c2VkIG9ubHkgd2hlbiB0aGUgc3RhdGUgaXMga25vd24gdG8gYmUgdmFsaWQgKi8KIAogICAgICAgICAvKiBjb21tb24gY29uc3RhbnRzICovCkBAIC03OCwxNiArODIsMTggQEAKIAogI2lmIGRlZmluZWQoTVNET1MpIHx8IChkZWZpbmVkKFdJTkRPV1MpICYmICFkZWZpbmVkKFdJTjMyKSkKICMgIGRlZmluZSBPU19DT0RFICAweDAwCi0jICBpZiBkZWZpbmVkKF9fVFVSQk9DX18pIHx8IGRlZmluZWQoX19CT1JMQU5EQ19fKQotIyAgICBpZiAoX19TVERDX18gPT0gMSkgJiYgKGRlZmluZWQoX19MQVJHRV9fKSB8fCBkZWZpbmVkKF9fQ09NUEFDVF9fKSkKLSAgICAgICAvKiBBbGxvdyBjb21waWxhdGlvbiB3aXRoIEFOU0kga2V5d29yZHMgb25seSBlbmFibGVkICovCi0gICAgICAgdm9pZCBfQ2RlY2wgZmFyZnJlZSggdm9pZCAqYmxvY2sgKTsKLSAgICAgICB2b2lkICpfQ2RlY2wgZmFybWFsbG9jKCB1bnNpZ25lZCBsb25nIG5ieXRlcyApOwotIyAgICBlbHNlCi0jICAgICAgaW5jbHVkZSA8YWxsb2MuaD4KKyMgIGlmbmRlZiBaX1NPTE8KKyMgICAgaWYgZGVmaW5lZChfX1RVUkJPQ19fKSB8fCBkZWZpbmVkKF9fQk9STEFORENfXykKKyMgICAgICBpZiAoX19TVERDX18gPT0gMSkgJiYgKGRlZmluZWQoX19MQVJHRV9fKSB8fCBkZWZpbmVkKF9fQ09NUEFDVF9fKSkKKyAgICAgICAgIC8qIEFsbG93IGNvbXBpbGF0aW9uIHdpdGggQU5TSSBrZXl3b3JkcyBvbmx5IGVuYWJsZWQgKi8KKyAgICAgICAgIHZvaWQgX0NkZWNsIGZhcmZyZWUoIHZvaWQgKmJsb2NrICk7CisgICAgICAgICB2b2lkICpfQ2RlY2wgZmFybWFsbG9jKCB1bnNpZ25lZCBsb25nIG5ieXRlcyApOworIyAgICAgIGVsc2UKKyMgICAgICAgIGluY2x1ZGUgPGFsbG9jLmg+CisjICAgICAgZW5kaWYKKyMgICAgZWxzZSAvKiBNU0Mgb3IgREpHUFAgKi8KKyMgICAgICBpbmNsdWRlIDxtYWxsb2MuaD4KICMgICAgZW5kaWYKLSMgIGVsc2UgLyogTVNDIG9yIERKR1BQICovCi0jICAgIGluY2x1ZGUgPG1hbGxvYy5oPgogIyAgZW5kaWYKICNlbmRpZgogCkBAIC0xMDcsMTggKzExMywyMCBAQAogCiAjaWZkZWYgT1MyCiAjICBkZWZpbmUgT1NfQ09ERSAgMHgwNgotIyAgaWZkZWYgTV9JODYKKyMgIGlmIGRlZmluZWQoTV9JODYpICYmICFkZWZpbmVkKFpfU09MTykKICMgICAgaW5jbHVkZSA8bWFsbG9jLmg+CiAjICBlbmRpZgogI2VuZGlmCiAKICNpZiBkZWZpbmVkKE1BQ09TKSB8fCBkZWZpbmVkKFRBUkdFVF9PU19NQUMpCiAjICBkZWZpbmUgT1NfQ09ERSAgMHgwNwotIyAgaWYgZGVmaW5lZChfX01XRVJLU19fKSAmJiBfX2Rlc3Rfb3MgIT0gX19iZV9vcyAmJiBfX2Rlc3Rfb3MgIT0gX193aW4zMl9vcwotIyAgICBpbmNsdWRlIDx1bml4Lmg+IC8qIGZvciBmZG9wZW4gKi8KLSMgIGVsc2UKLSMgICAgaWZuZGVmIGZkb3BlbgotIyAgICAgIGRlZmluZSBmZG9wZW4oZmQsbW9kZSkgTlVMTCAvKiBObyBmZG9wZW4oKSAqLworIyAgaWZuZGVmIFpfU09MTworIyAgICBpZiBkZWZpbmVkKF9fTVdFUktTX18pICYmIF9fZGVzdF9vcyAhPSBfX2JlX29zICYmIF9fZGVzdF9vcyAhPSBfX3dpbjMyX29zCisjICAgICAgaW5jbHVkZSA8dW5peC5oPiAvKiBmb3IgZmRvcGVuICovCisjICAgIGVsc2UKKyMgICAgICBpZm5kZWYgZmRvcGVuCisjICAgICAgICBkZWZpbmUgZmRvcGVuKGZkLG1vZGUpIE5VTEwgLyogTm8gZmRvcGVuKCkgKi8KKyMgICAgICBlbmRpZgogIyAgICBlbmRpZgogIyAgZW5kaWYKICNlbmRpZgpAQCAtMTUzLDE0ICsxNjEsMTUgQEAKICMgIGVuZGlmCiAjZW5kaWYKIAotI2lmIGRlZmluZWQoX19CT1JMQU5EQ19fKQorI2lmIGRlZmluZWQoX19CT1JMQU5EQ19fKSAmJiAhZGVmaW5lZChNU0RPUykKICAgI3ByYWdtYSB3YXJuIC04MDA0CiAgICNwcmFnbWEgd2FybiAtODAwOAogICAjcHJhZ21hIHdhcm4gLTgwNjYKICNlbmRpZgogCiAvKiBwcm92aWRlIHByb3RvdHlwZXMgZm9yIHRoZXNlIHdoZW4gYnVpbGRpbmcgemxpYiB3aXRob3V0IExGUyAqLwotI2lmICFkZWZpbmVkKF9MQVJHRUZJTEU2NF9TT1VSQ0UpIHx8IF9MRlM2NF9MQVJHRUZJTEUtMCA9PSAwCisjaWYgIWRlZmluZWQoX1dJTjMyKSAmJiBcCisgICAgKCFkZWZpbmVkKF9MQVJHRUZJTEU2NF9TT1VSQ0UpIHx8IF9MRlM2NF9MQVJHRUZJTEUtMCA9PSAwKQogICAgIFpFWFRFUk4gdUxvbmcgWkVYUE9SVCBhZGxlcjMyX2NvbWJpbmU2NCBPRigodUxvbmcsIHVMb25nLCB6X29mZl90KSk7CiAgICAgWkVYVEVSTiB1TG9uZyBaRVhQT1JUIGNyYzMyX2NvbWJpbmU2NCBPRigodUxvbmcsIHVMb25nLCB6X29mZl90KSk7CiAjZW5kaWYKQEAgLTE3Nyw0MiArMTg2LDcgQEAKIAogICAgICAgICAgLyogZnVuY3Rpb25zICovCiAKLSNpZiBkZWZpbmVkKFNUREM5OSkgfHwgKGRlZmluZWQoX19UVVJCT0NfXykgJiYgX19UVVJCT0NfXyA+PSAweDU1MCkKLSMgIGlmbmRlZiBIQVZFX1ZTTlBSSU5URgotIyAgICBkZWZpbmUgSEFWRV9WU05QUklOVEYKLSMgIGVuZGlmCi0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fQ1lHV0lOX18pCi0jICBpZm5kZWYgSEFWRV9WU05QUklOVEYKLSMgICAgZGVmaW5lIEhBVkVfVlNOUFJJTlRGCi0jICBlbmRpZgotI2VuZGlmCi0jaWZuZGVmIEhBVkVfVlNOUFJJTlRGCi0jICBpZmRlZiBNU0RPUwotICAgICAvKiB2c25wcmludGYgbWF5IGV4aXN0IG9uIHNvbWUgTVMtRE9TIGNvbXBpbGVycyAoREpHUFA/KSwKLSAgICAgICAgYnV0IGZvciBub3cgd2UganVzdCBhc3N1bWUgaXQgZG9lc24ndC4gKi8KLSMgICAgZGVmaW5lIE5PX3ZzbnByaW50ZgotIyAgZW5kaWYKLSMgIGlmZGVmIF9fVFVSQk9DX18KLSMgICAgZGVmaW5lIE5PX3ZzbnByaW50ZgotIyAgZW5kaWYKLSMgIGlmZGVmIFdJTjMyCi0gICAgIC8qIEluIFdpbjMyLCB2c25wcmludGYgaXMgYXZhaWxhYmxlIGFzIHRoZSAibm9uLUFOU0kiIF92c25wcmludGYuICovCi0jICAgIGlmICFkZWZpbmVkKHZzbnByaW50ZikgJiYgIWRlZmluZWQoTk9fdnNucHJpbnRmKQotIyAgICAgIGlmICFkZWZpbmVkKF9NU0NfVkVSKSB8fCAoIGRlZmluZWQoX01TQ19WRVIpICYmIF9NU0NfVkVSIDwgMTUwMCApCi0jICAgICAgICAgZGVmaW5lIHZzbnByaW50ZiBfdnNucHJpbnRmCi0jICAgICAgZW5kaWYKLSMgICAgZW5kaWYKLSMgIGVuZGlmCi0jICBpZmRlZiBfX1NBU0MKLSMgICAgZGVmaW5lIE5PX3ZzbnByaW50ZgotIyAgZW5kaWYKLSNlbmRpZgotI2lmZGVmIFZNUwotIyAgZGVmaW5lIE5PX3ZzbnByaW50ZgotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKHB5cikKKyNpZiBkZWZpbmVkKHB5cikgfHwgZGVmaW5lZChaX1NPTE8pCiAjICBkZWZpbmUgTk9fTUVNQ1BZCiAjZW5kaWYKICNpZiBkZWZpbmVkKFNNQUxMX01FRElVTSkgJiYgIWRlZmluZWQoX01TQ19WRVIpICYmICFkZWZpbmVkKF9fU0NfXykKQEAgLTI2MSwxNCArMjM1LDE5IEBACiAjICBkZWZpbmUgVHJhY2VjdihjLHgpCiAjZW5kaWYKIAotCi12b2lkcGYgWkxJQl9JTlRFUk5BTCB6Y2FsbG9jIE9GKCh2b2lkcGYgb3BhcXVlLCB1bnNpZ25lZCBpdGVtcywKLSAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNpemUpKTsKLXZvaWQgWkxJQl9JTlRFUk5BTCB6Y2ZyZWUgIE9GKCh2b2lkcGYgb3BhcXVlLCB2b2lkcGYgcHRyKSk7CisjaWZuZGVmIFpfU09MTworICAgdm9pZHBmIFpMSUJfSU5URVJOQUwgemNhbGxvYyBPRigodm9pZHBmIG9wYXF1ZSwgdW5zaWduZWQgaXRlbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaXplKSk7CisgICB2b2lkIFpMSUJfSU5URVJOQUwgemNmcmVlICBPRigodm9pZHBmIG9wYXF1ZSwgdm9pZHBmIHB0cikpOworI2VuZGlmCiAKICNkZWZpbmUgWkFMTE9DKHN0cm0sIGl0ZW1zLCBzaXplKSBcCiAgICAgICAgICAgICgqKChzdHJtKS0+emFsbG9jKSkoKHN0cm0pLT5vcGFxdWUsIChpdGVtcyksIChzaXplKSkKICNkZWZpbmUgWkZSRUUoc3RybSwgYWRkcikgICgqKChzdHJtKS0+emZyZWUpKSgoc3RybSktPm9wYXF1ZSwgKHZvaWRwZikoYWRkcikpCiAjZGVmaW5lIFRSWV9GUkVFKHMsIHApIHtpZiAocCkgWkZSRUUocywgcCk7fQogCisvKiBSZXZlcnNlIHRoZSBieXRlcyBpbiBhIDMyLWJpdCB2YWx1ZSAqLworI2RlZmluZSBaU1dBUDMyKHEpICgoKChxKSA+PiAyNCkgJiAweGZmKSArICgoKHEpID4+IDgpICYgMHhmZjAwKSArIFwKKyAgICAgICAgICAgICAgICAgICAgKCgocSkgJiAweGZmMDApIDw8IDgpICsgKCgocSkgJiAweGZmKSA8PCAyNCkpCisKICNlbmRpZiAvKiBaVVRJTF9IICovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWJtb2R1bGUuYyBiL01vZHVsZXMvemxpYm1vZHVsZS5jCmluZGV4IDFkMTA3MmQuLjBkMmUxODggMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYm1vZHVsZS5jCisrKyBiL01vZHVsZXMvemxpYm1vZHVsZS5jCkBAIC0zLDExICszLDEzIEBACiAKIC8qIFdpbmRvd3MgdXNlcnM6ICByZWFkIFB5dGhvbidzIFBDYnVpbGRccmVhZG1lLnR4dCAqLwogCisjZGVmaW5lIFBZX1NTSVpFX1RfQ0xFQU4KIAogI2luY2x1ZGUgIlB5dGhvbi5oIgogI2luY2x1ZGUgInN0cnVjdG1lbWJlci5oIgogI2luY2x1ZGUgInpsaWIuaCIKIAorCiAjaWZkZWYgV0lUSF9USFJFQUQKICAgICAjaW5jbHVkZSAicHl0aHJlYWQuaCIKICAgICAjZGVmaW5lIEVOVEVSX1pMSUIob2JqKSBcCkBAIC0yNywxMCArMjksOSBAQAogI2Vsc2UKICMgIGRlZmluZSBERUZfTUVNX0xFVkVMICBNQVhfTUVNX0xFVkVMCiAjZW5kaWYKLSNkZWZpbmUgREVGX1dCSVRTIE1BWF9XQklUUwogCi0vKiBUaGUgb3V0cHV0IGJ1ZmZlciB3aWxsIGJlIGluY3JlYXNlZCBpbiBjaHVua3Mgb2YgREVGQVVMVEFMTE9DIGJ5dGVzLiAqLwotI2RlZmluZSBERUZBVUxUQUxMT0MgKDE2KjEwMjQpCisvKiBJbml0aWFsIGJ1ZmZlciBzaXplLiAqLworI2RlZmluZSBERUZfQlVGX1NJWkUgKDE2KjEwMjQpCiAKIHN0YXRpYyBQeVR5cGVPYmplY3QgQ29tcHR5cGU7CiBzdGF0aWMgUHlUeXBlT2JqZWN0IERlY29tcHR5cGU7CkBAIC04MCwzNSArODEsMTMgQEAKICAgICAgICAgUHlFcnJfRm9ybWF0KFpsaWJFcnJvciwgIkVycm9yICVkICVzOiAlLjIwMHMiLCBlcnIsIG1zZywgem1zZyk7CiB9CiAKLVB5RG9jX1NUUlZBUihjb21wcmVzc29ial9fZG9jX18sCi0iY29tcHJlc3NvYmoobGV2ZWw9LTEsIG1ldGhvZD1ERUZMQVRFRCwgd2JpdHM9MTUsIG1lbWxldmVsPTgsXG4iCi0iICAgICAgICAgICAgc3RyYXRlZ3k9Wl9ERUZBVUxUX1NUUkFURUdZWywgemRpY3RdKVxuIgotIiAtLSBSZXR1cm4gYSBjb21wcmVzc29yIG9iamVjdC5cbiIKLSJcbiIKLSJsZXZlbCBpcyB0aGUgY29tcHJlc3Npb24gbGV2ZWwgKGFuIGludGVnZXIgaW4gdGhlIHJhbmdlIDAtOTsgZGVmYXVsdCBpcyA2KS5cbiIKLSJIaWdoZXIgY29tcHJlc3Npb24gbGV2ZWxzIGFyZSBzbG93ZXIsIGJ1dCBwcm9kdWNlIHNtYWxsZXIgcmVzdWx0cy5cbiIKLSJcbiIKLSJtZXRob2QgaXMgdGhlIGNvbXByZXNzaW9uIGFsZ29yaXRobS4gSWYgZ2l2ZW4sIHRoaXMgbXVzdCBiZSBERUZMQVRFRC5cbiIKLSJcbiIKLSJ3Yml0cyBpcyB0aGUgYmFzZSB0d28gbG9nYXJpdGhtIG9mIHRoZSB3aW5kb3cgc2l6ZSAocmFuZ2U6IDguLjE1KS5cbiIKLSJcbiIKLSJtZW1sZXZlbCBjb250cm9scyB0aGUgYW1vdW50IG9mIG1lbW9yeSB1c2VkIGZvciBpbnRlcm5hbCBjb21wcmVzc2lvbiBzdGF0ZS5cbiIKLSJWYWxpZCB2YWx1ZXMgcmFuZ2UgZnJvbSAxIHRvIDkuIEhpZ2hlciB2YWx1ZXMgcmVzdWx0IGluIGhpZ2hlciBtZW1vcnkgdXNhZ2UsXG4iCi0iZmFzdGVyIGNvbXByZXNzaW9uLCBhbmQgc21hbGxlciBvdXRwdXQuXG4iCi0iXG4iCi0ic3RyYXRlZ3kgaXMgdXNlZCB0byB0dW5lIHRoZSBjb21wcmVzc2lvbiBhbGdvcml0aG0uIFBvc3NpYmxlIHZhbHVlcyBhcmVcbiIKLSJaX0RFRkFVTFRfU1RSQVRFR1ksIFpfRklMVEVSRUQsIGFuZCBaX0hVRkZNQU5fT05MWS5cbiIKLSJcbiIKLSJ6ZGljdCBpcyB0aGUgcHJlZGVmaW5lZCBjb21wcmVzc2lvbiBkaWN0aW9uYXJ5IC0gYSBzZXF1ZW5jZSBvZiBieXRlc1xuIgotImNvbnRhaW5pbmcgc3Vic2VxdWVuY2VzIHRoYXQgYXJlIGxpa2VseSB0byBvY2N1ciBpbiB0aGUgaW5wdXQgZGF0YS4iKTsKLQotUHlEb2NfU1RSVkFSKGRlY29tcHJlc3NvYmpfX2RvY19fLAotImRlY29tcHJlc3NvYmooW3diaXRzWywgemRpY3RdXSkgLS0gUmV0dXJuIGEgZGVjb21wcmVzc29yIG9iamVjdC5cbiIKLSJcbiIKLSJPcHRpb25hbCBhcmcgd2JpdHMgaXMgdGhlIHdpbmRvdyBidWZmZXIgc2l6ZS5cbiIKLSJcbiIKLSJPcHRpb25hbCBhcmcgemRpY3QgaXMgdGhlIHByZWRlZmluZWQgY29tcHJlc3Npb24gZGljdGlvbmFyeS4gVGhpcyBtdXN0IGJlXG4iCi0idGhlIHNhbWUgZGljdGlvbmFyeSBhcyB1c2VkIGJ5IHRoZSBjb21wcmVzc29yIHRoYXQgcHJvZHVjZWQgdGhlIGlucHV0IGRhdGEuIik7CisvKltjbGluaWMgaW5wdXRdCitvdXRwdXQgcHJlc2V0IGZpbGUKK21vZHVsZSB6bGliCitjbGFzcyB6bGliLkNvbXByZXNzICJjb21wb2JqZWN0ICoiICImQ29tcHR5cGUiCitjbGFzcyB6bGliLkRlY29tcHJlc3MgImNvbXBvYmplY3QgKiIgIiZEZWNvbXB0eXBlIgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWRhMzlhM2VlNWU2YjRiMGQgaW5wdXQ9YmZkNGMzNDA1NzNiYTkxZF0qLwogCiBzdGF0aWMgY29tcG9iamVjdCAqCiBuZXdjb21wb2JqZWN0KFB5VHlwZU9iamVjdCAqdHlwZSkKQEAgLTEzMiw0MCArMTExLDYzIEBACiAgICAgfQogI2lmZGVmIFdJVEhfVEhSRUFECiAgICAgc2VsZi0+bG9jayA9IFB5VGhyZWFkX2FsbG9jYXRlX2xvY2soKTsKKyAgICBpZiAoc2VsZi0+bG9jayA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19NZW1vcnlFcnJvciwgIlVuYWJsZSB0byBhbGxvY2F0ZSBsb2NrIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KICNlbmRpZgogICAgIHJldHVybiBzZWxmOwogfQogCi1QeURvY19TVFJWQVIoY29tcHJlc3NfX2RvY19fLAotImNvbXByZXNzKHN0cmluZ1ssIGxldmVsXSkgLS0gUmV0dXJuZWQgY29tcHJlc3NlZCBzdHJpbmcuXG4iCi0iXG4iCi0iT3B0aW9uYWwgYXJnIGxldmVsIGlzIHRoZSBjb21wcmVzc2lvbiBsZXZlbCwgaW4gMC05LiIpOworc3RhdGljIHZvaWQqCitQeVpsaWJfTWFsbG9jKHZvaWRwZiBjdHgsIHVJbnQgaXRlbXMsIHVJbnQgc2l6ZSkKK3sKKyAgICBpZiAoaXRlbXMgPiAoc2l6ZV90KVBZX1NTSVpFX1RfTUFYIC8gc2l6ZSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgLyogUHlNZW1fTWFsbG9jKCkgY2Fubm90IGJlIHVzZWQ6IHRoZSBHSUwgaXMgbm90IGhlbGQgd2hlbgorICAgICAgIGluZmxhdGUoKSBhbmQgZGVmbGF0ZSgpIGFyZSBjYWxsZWQgKi8KKyAgICByZXR1cm4gUHlNZW1fUmF3TWFsbG9jKGl0ZW1zICogc2l6ZSk7Cit9CisKK3N0YXRpYyB2b2lkCitQeVpsaWJfRnJlZSh2b2lkcGYgY3R4LCB2b2lkICpwdHIpCit7CisgICAgUHlNZW1fUmF3RnJlZShwdHIpOworfQorCisvKltjbGluaWMgaW5wdXRdCit6bGliLmNvbXByZXNzCisKKyAgICBieXRlczogUHlfYnVmZmVyCisgICAgICAgIEJpbmFyeSBkYXRhIHRvIGJlIGNvbXByZXNzZWQuCisgICAgbGV2ZWw6IGludChjX2RlZmF1bHQ9IlpfREVGQVVMVF9DT01QUkVTU0lPTiIpID0gWl9ERUZBVUxUX0NPTVBSRVNTSU9OCisgICAgICAgIENvbXByZXNzaW9uIGxldmVsLCBpbiAwLTkuCisgICAgLworCitSZXR1cm5zIGEgYnl0ZXMgb2JqZWN0IGNvbnRhaW5pbmcgY29tcHJlc3NlZCBkYXRhLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotUHlabGliX2NvbXByZXNzKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3psaWJfY29tcHJlc3NfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmJ5dGVzLCBpbnQgbGV2ZWwpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NWQ3ZGQ0NTg4Nzg4ZWZkMyBpbnB1dD1iZTNhYmU5OTM0YmRhNGIzXSovCiB7CiAgICAgUHlPYmplY3QgKlJldHVyblZhbCA9IE5VTEw7Ci0gICAgUHlfYnVmZmVyIHBpbnB1dDsKICAgICBCeXRlICppbnB1dCwgKm91dHB1dCA9IE5VTEw7CiAgICAgdW5zaWduZWQgaW50IGxlbmd0aDsKLSAgICBpbnQgbGV2ZWw9Wl9ERUZBVUxUX0NPTVBSRVNTSU9OLCBlcnI7CisgICAgaW50IGVycjsKICAgICB6X3N0cmVhbSB6c3Q7CiAKLSAgICAvKiByZXF1aXJlIFB5dGhvbiBzdHJpbmcgb2JqZWN0LCBvcHRpb25hbCAnbGV2ZWwnIGFyZyAqLwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAieSp8aTpjb21wcmVzcyIsICZwaW5wdXQsICZsZXZlbCkpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgaWYgKHBpbnB1dC5sZW4gPiBVSU5UX01BWCkgeworICAgIGlmICgoc2l6ZV90KWJ5dGVzLT5sZW4gPiBVSU5UX01BWCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJTaXplIGRvZXMgbm90IGZpdCBpbiBhbiB1bnNpZ25lZCBpbnQiKTsKICAgICAgICAgZ290byBlcnJvcjsKICAgICB9Ci0gICAgaW5wdXQgPSBwaW5wdXQuYnVmOwotICAgIGxlbmd0aCA9IHBpbnB1dC5sZW47CisgICAgaW5wdXQgPSBieXRlcy0+YnVmOworICAgIGxlbmd0aCA9ICh1bnNpZ25lZCBpbnQpYnl0ZXMtPmxlbjsKIAogICAgIHpzdC5hdmFpbF9vdXQgPSBsZW5ndGggKyBsZW5ndGgvMTAwMCArIDEyICsgMTsKIAotICAgIG91dHB1dCA9IChCeXRlKiltYWxsb2MoenN0LmF2YWlsX291dCk7CisgICAgb3V0cHV0ID0gKEJ5dGUqKVB5TWVtX01hbGxvYyh6c3QuYXZhaWxfb3V0KTsKICAgICBpZiAob3V0cHV0ID09IE5VTEwpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX01lbW9yeUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgIkNhbid0IGFsbG9jYXRlIG1lbW9yeSB0byBjb21wcmVzcyBkYXRhIik7CkBAIC0xNzUsOCArMTc3LDkgQEAKICAgICAvKiBQYXN0IHRoZSBwb2ludCBvZiBubyByZXR1cm4uICBGcm9tIGhlcmUgb24gb3V0LCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZQogICAgICAgIHdlIGNsZWFuIHVwIG1hbGxvY3MgJiBJTkNSRUZzLiAqLwogCi0gICAgenN0LnphbGxvYyA9IChhbGxvY19mdW5jKU5VTEw7Ci0gICAgenN0LnpmcmVlID0gKGZyZWVfZnVuYylaX05VTEw7CisgICAgenN0Lm9wYXF1ZSA9IE5VTEw7CisgICAgenN0LnphbGxvYyA9IFB5WmxpYl9NYWxsb2M7CisgICAgenN0LnpmcmVlID0gUHlabGliX0ZyZWU7CiAgICAgenN0Lm5leHRfb3V0ID0gKEJ5dGUgKilvdXRwdXQ7CiAgICAgenN0Lm5leHRfaW4gPSAoQnl0ZSAqKWlucHV0OwogICAgIHpzdC5hdmFpbF9pbiA9IGxlbmd0aDsKQEAgLTIxNyw1NiArMjIwLDEwMCBAQAogICAgICAgICB6bGliX2Vycm9yKHpzdCwgZXJyLCAid2hpbGUgZmluaXNoaW5nIGNvbXByZXNzaW9uIik7CiAKICBlcnJvcjoKLSAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwaW5wdXQpOwotICAgIGZyZWUob3V0cHV0KTsKKyAgICBQeU1lbV9GcmVlKG91dHB1dCk7CiAKICAgICByZXR1cm4gUmV0dXJuVmFsOwogfQogCi1QeURvY19TVFJWQVIoZGVjb21wcmVzc19fZG9jX18sCi0iZGVjb21wcmVzcyhzdHJpbmdbLCB3Yml0c1ssIGJ1ZnNpemVdXSkgLS0gUmV0dXJuIGRlY29tcHJlc3NlZCBzdHJpbmcuXG4iCi0iXG4iCi0iT3B0aW9uYWwgYXJnIHdiaXRzIGlzIHRoZSB3aW5kb3cgYnVmZmVyIHNpemUuICBPcHRpb25hbCBhcmcgYnVmc2l6ZSBpc1xuIgotInRoZSBpbml0aWFsIG91dHB1dCBidWZmZXIgc2l6ZS4iKTsKKy8qW3B5dGhvbiBpbnB1dF0KKworY2xhc3MgdWludF9jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgdHlwZSA9ICd1bnNpZ25lZCBpbnQnCisgICAgY29udmVydGVyID0gJ3VpbnRfY29udmVydGVyJworICAgIGNfaWdub3JlZF9kZWZhdWx0ID0gIjAiCisKK1tweXRob24gc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKy8qW3B5dGhvbiBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kYTM5YTNlZTVlNmI0YjBkIGlucHV0PTIyMjYzODU1ZjdhM2ViZmRdKi8KKworc3RhdGljIGludAordWludF9jb252ZXJ0ZXIoUHlPYmplY3QgKm9iaiwgdm9pZCAqcHRyKQoreworICAgIGxvbmcgdmFsOworICAgIHVuc2lnbmVkIGxvbmcgdXZhbDsKKworICAgIHZhbCA9IFB5TG9uZ19Bc0xvbmcob2JqKTsKKyAgICBpZiAodmFsID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgdXZhbCA9IFB5TG9uZ19Bc1Vuc2lnbmVkTG9uZyhvYmopOworICAgICAgICBpZiAodXZhbCA9PSAodW5zaWduZWQgbG9uZyktMSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBpZiAodmFsIDwgMCkgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIG11c3QgYmUgcG9zaXRpdmUiKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIHV2YWwgPSAodW5zaWduZWQgbG9uZyl2YWw7CisgICAgfQorCisgICAgaWYgKHV2YWwgPiBVSU5UX01BWCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJQeXRob24gaW50IHRvbyBsYXJnZSBmb3IgQyB1bnNpZ25lZCBpbnQiKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgKih1bnNpZ25lZCBpbnQgKilwdHIgPSBQeV9TQUZFX0RPV05DQVNUKHV2YWwsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGludCk7CisgICAgcmV0dXJuIDE7Cit9CisKKy8qW2NsaW5pYyBpbnB1dF0KK3psaWIuZGVjb21wcmVzcworCisgICAgZGF0YTogUHlfYnVmZmVyCisgICAgICAgIENvbXByZXNzZWQgZGF0YS4KKyAgICB3Yml0czogaW50KGNfZGVmYXVsdD0iTUFYX1dCSVRTIikgPSBNQVhfV0JJVFMKKyAgICAgICAgVGhlIHdpbmRvdyBidWZmZXIgc2l6ZS4KKyAgICBidWZzaXplOiB1aW50KGNfZGVmYXVsdD0iREVGX0JVRl9TSVpFIikgPSBERUZfQlVGX1NJWkUKKyAgICAgICAgVGhlIGluaXRpYWwgb3V0cHV0IGJ1ZmZlciBzaXplLgorICAgIC8KKworUmV0dXJucyBhIGJ5dGVzIG9iamVjdCBjb250YWluaW5nIHRoZSB1bmNvbXByZXNzZWQgZGF0YS4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLVB5WmxpYl9kZWNvbXByZXNzKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3psaWJfZGVjb21wcmVzc19pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZGF0YSwgaW50IHdiaXRzLCB1bnNpZ25lZCBpbnQgYnVmc2l6ZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD05ZTU0NjRlNzJkZjljYjVmIGlucHV0PTBmNGI5YWJiNzEwM2Y1MGVdKi8KIHsKICAgICBQeU9iamVjdCAqcmVzdWx0X3N0ciA9IE5VTEw7Ci0gICAgUHlfYnVmZmVyIHBpbnB1dDsKICAgICBCeXRlICppbnB1dDsKICAgICB1bnNpZ25lZCBpbnQgbGVuZ3RoOwogICAgIGludCBlcnI7Ci0gICAgaW50IHdzaXplPURFRl9XQklUUzsKLSAgICBQeV9zc2l6ZV90IHJfc3RybGVuPURFRkFVTFRBTExPQzsKKyAgICB1bnNpZ25lZCBpbnQgbmV3X2J1ZnNpemU7CiAgICAgel9zdHJlYW0genN0OwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ5KnxpbjpkZWNvbXByZXNzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJnBpbnB1dCwgJndzaXplLCAmcl9zdHJsZW4pKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIGlmIChwaW5wdXQubGVuID4gVUlOVF9NQVgpIHsKKyAgICBpZiAoKHNpemVfdClkYXRhLT5sZW4gPiBVSU5UX01BWCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJTaXplIGRvZXMgbm90IGZpdCBpbiBhbiB1bnNpZ25lZCBpbnQiKTsKICAgICAgICAgZ290byBlcnJvcjsKICAgICB9Ci0gICAgaW5wdXQgPSBwaW5wdXQuYnVmOwotICAgIGxlbmd0aCA9IHBpbnB1dC5sZW47CisgICAgaW5wdXQgPSBkYXRhLT5idWY7CisgICAgbGVuZ3RoID0gKHVuc2lnbmVkIGludClkYXRhLT5sZW47CiAKLSAgICBpZiAocl9zdHJsZW4gPD0gMCkKLSAgICAgICAgcl9zdHJsZW4gPSAxOworICAgIGlmIChidWZzaXplID09IDApCisgICAgICAgIGJ1ZnNpemUgPSAxOwogCiAgICAgenN0LmF2YWlsX2luID0gbGVuZ3RoOwotICAgIHpzdC5hdmFpbF9vdXQgPSByX3N0cmxlbjsKKyAgICB6c3QuYXZhaWxfb3V0ID0gYnVmc2l6ZTsKIAotICAgIGlmICghKHJlc3VsdF9zdHIgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIHJfc3RybGVuKSkpCisgICAgaWYgKCEocmVzdWx0X3N0ciA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgYnVmc2l6ZSkpKQogICAgICAgICBnb3RvIGVycm9yOwogCi0gICAgenN0LnphbGxvYyA9IChhbGxvY19mdW5jKU5VTEw7Ci0gICAgenN0LnpmcmVlID0gKGZyZWVfZnVuYylaX05VTEw7CisgICAgenN0Lm9wYXF1ZSA9IE5VTEw7CisgICAgenN0LnphbGxvYyA9IFB5WmxpYl9NYWxsb2M7CisgICAgenN0LnpmcmVlID0gUHlabGliX0ZyZWU7CiAgICAgenN0Lm5leHRfb3V0ID0gKEJ5dGUgKilQeUJ5dGVzX0FTX1NUUklORyhyZXN1bHRfc3RyKTsKICAgICB6c3QubmV4dF9pbiA9IChCeXRlICopaW5wdXQ7Ci0gICAgZXJyID0gaW5mbGF0ZUluaXQyKCZ6c3QsIHdzaXplKTsKKyAgICBlcnIgPSBpbmZsYXRlSW5pdDIoJnpzdCwgd2JpdHMpOwogCiAgICAgc3dpdGNoKGVycikgewogICAgIGNhc2UoWl9PSyk6CkBAIC0zMDMsMTQgKzM1MCwxOCBAQAogICAgICAgICAgICAgLyogZmFsbCB0aHJvdWdoICovCiAgICAgICAgIGNhc2UoWl9PSyk6CiAgICAgICAgICAgICAvKiBuZWVkIG1vcmUgbWVtb3J5ICovCi0gICAgICAgICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZyZXN1bHRfc3RyLCByX3N0cmxlbiA8PCAxKSA8IDApIHsKKyAgICAgICAgICAgIGlmIChidWZzaXplIDw9IChVSU5UX01BWCA+PiAxKSkKKyAgICAgICAgICAgICAgICBuZXdfYnVmc2l6ZSA9IGJ1ZnNpemUgPDwgMTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBuZXdfYnVmc2l6ZSA9IFVJTlRfTUFYOworICAgICAgICAgICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZSgmcmVzdWx0X3N0ciwgbmV3X2J1ZnNpemUpIDwgMCkgewogICAgICAgICAgICAgICAgIGluZmxhdGVFbmQoJnpzdCk7CiAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHpzdC5uZXh0X291dCA9Ci0gICAgICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FTX1NUUklORyhyZXN1bHRfc3RyKSArIHJfc3RybGVuOwotICAgICAgICAgICAgenN0LmF2YWlsX291dCA9IHJfc3RybGVuOwotICAgICAgICAgICAgcl9zdHJsZW4gPSByX3N0cmxlbiA8PCAxOworICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyICopUHlCeXRlc19BU19TVFJJTkcocmVzdWx0X3N0cikgKyBidWZzaXplOworICAgICAgICAgICAgenN0LmF2YWlsX291dCA9IGJ1ZnNpemU7CisgICAgICAgICAgICBidWZzaXplID0gbmV3X2J1ZnNpemU7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGluZmxhdGVFbmQoJnpzdCk7CkBAIC0zMjgsNDYgKzM3OSw2NyBAQAogICAgIGlmIChfUHlCeXRlc19SZXNpemUoJnJlc3VsdF9zdHIsIHpzdC50b3RhbF9vdXQpIDwgMCkKICAgICAgICAgZ290byBlcnJvcjsKIAotICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBpbnB1dCk7CiAgICAgcmV0dXJuIHJlc3VsdF9zdHI7CiAKICBlcnJvcjoKLSAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwaW5wdXQpOwogICAgIFB5X1hERUNSRUYocmVzdWx0X3N0cik7CiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyBQeU9iamVjdCAqCi1QeVpsaWJfY29tcHJlc3NvYmooUHlPYmplY3QgKnNlbGZwdHIsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQotewotICAgIGNvbXBvYmplY3QgKnNlbGY7Ci0gICAgaW50IGxldmVsPVpfREVGQVVMVF9DT01QUkVTU0lPTiwgbWV0aG9kPURFRkxBVEVEOwotICAgIGludCB3Yml0cz1NQVhfV0JJVFMsIG1lbUxldmVsPURFRl9NRU1fTEVWRUwsIHN0cmF0ZWd5PTAsIGVycjsKLSAgICBQeV9idWZmZXIgemRpY3Q7Ci0gICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJsZXZlbCIsICJtZXRob2QiLCAid2JpdHMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWVtTGV2ZWwiLCAic3RyYXRlZ3kiLCAiemRpY3QiLCBOVUxMfTsKKy8qW2NsaW5pYyBpbnB1dF0KK3psaWIuY29tcHJlc3NvYmoKIAotICAgIHpkaWN0LmJ1ZiA9IE5VTEw7IC8qIFNlbnRpbmVsLCBzbyB3ZSBjYW4gdGVsbCB3aGV0aGVyIHpkaWN0IHdhcyBzdXBwbGllZC4gKi8KLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJ8aWlpaWl5Kjpjb21wcmVzc29iaiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3dsaXN0LCAmbGV2ZWwsICZtZXRob2QsICZ3Yml0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbWVtTGV2ZWwsICZzdHJhdGVneSwgJnpkaWN0KSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgbGV2ZWw6IGludChjX2RlZmF1bHQ9IlpfREVGQVVMVF9DT01QUkVTU0lPTiIpID0gWl9ERUZBVUxUX0NPTVBSRVNTSU9OCisgICAgICAgIFRoZSBjb21wcmVzc2lvbiBsZXZlbCAoYW4gaW50ZWdlciBpbiB0aGUgcmFuZ2UgMC05OyBkZWZhdWx0IGlzIDYpLgorICAgICAgICBIaWdoZXIgY29tcHJlc3Npb24gbGV2ZWxzIGFyZSBzbG93ZXIsIGJ1dCBwcm9kdWNlIHNtYWxsZXIgcmVzdWx0cy4KKyAgICBtZXRob2Q6IGludChjX2RlZmF1bHQ9IkRFRkxBVEVEIikgPSBERUZMQVRFRAorICAgICAgICBUaGUgY29tcHJlc3Npb24gYWxnb3JpdGhtLiAgSWYgZ2l2ZW4sIHRoaXMgbXVzdCBiZSBERUZMQVRFRC4KKyAgICB3Yml0czogaW50KGNfZGVmYXVsdD0iTUFYX1dCSVRTIikgPSBNQVhfV0JJVFMKKyAgICAgICAgVGhlIGJhc2UgdHdvIGxvZ2FyaXRobSBvZiB0aGUgd2luZG93IHNpemUgKHJhbmdlOiA4Li4xNSkuCisgICAgbWVtTGV2ZWw6IGludChjX2RlZmF1bHQ9IkRFRl9NRU1fTEVWRUwiKSA9IERFRl9NRU1fTEVWRUwKKyAgICAgICAgQ29udHJvbHMgdGhlIGFtb3VudCBvZiBtZW1vcnkgdXNlZCBmb3IgaW50ZXJuYWwgY29tcHJlc3Npb24gc3RhdGUuCisgICAgICAgIFZhbGlkIHZhbHVlcyByYW5nZSBmcm9tIDEgdG8gOS4gIEhpZ2hlciB2YWx1ZXMgcmVzdWx0IGluIGhpZ2hlciBtZW1vcnkKKyAgICAgICAgdXNhZ2UsIGZhc3RlciBjb21wcmVzc2lvbiwgYW5kIHNtYWxsZXIgb3V0cHV0LgorICAgIHN0cmF0ZWd5OiBpbnQoY19kZWZhdWx0PSJaX0RFRkFVTFRfU1RSQVRFR1kiKSA9IFpfREVGQVVMVF9TVFJBVEVHWQorICAgICAgICBVc2VkIHRvIHR1bmUgdGhlIGNvbXByZXNzaW9uIGFsZ29yaXRobS4gIFBvc3NpYmxlIHZhbHVlcyBhcmUKKyAgICAgICAgWl9ERUZBVUxUX1NUUkFURUdZLCBaX0ZJTFRFUkVELCBhbmQgWl9IVUZGTUFOX09OTFkuCisgICAgemRpY3Q6IFB5X2J1ZmZlciA9IE5vbmUKKyAgICAgICAgVGhlIHByZWRlZmluZWQgY29tcHJlc3Npb24gZGljdGlvbmFyeSAtIGEgc2VxdWVuY2Ugb2YgYnl0ZXMKKyAgICAgICAgY29udGFpbmluZyBzdWJzZXF1ZW5jZXMgdGhhdCBhcmUgbGlrZWx5IHRvIG9jY3VyIGluIHRoZSBpbnB1dCBkYXRhLgorCitSZXR1cm4gYSBjb21wcmVzc29yIG9iamVjdC4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworc3RhdGljIFB5T2JqZWN0ICoKK3psaWJfY29tcHJlc3NvYmpfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBpbnQgbGV2ZWwsIGludCBtZXRob2QsIGludCB3Yml0cywgaW50IG1lbUxldmVsLCBpbnQgc3RyYXRlZ3ksIFB5X2J1ZmZlciAqemRpY3QpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ODllNWE2YzE0NDljYWE5ZSBpbnB1dD1iMDM0ODQ3Zjg4MjFmNmFmXSovCit7CisgICAgY29tcG9iamVjdCAqc2VsZiA9IE5VTEw7CisgICAgaW50IGVycjsKKworICAgIGlmICh6ZGljdC0+YnVmICE9IE5VTEwgJiYgKHNpemVfdCl6ZGljdC0+bGVuID4gVUlOVF9NQVgpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiemRpY3QgbGVuZ3RoIGRvZXMgbm90IGZpdCBpbiBhbiB1bnNpZ25lZCBpbnQiKTsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CiAKICAgICBzZWxmID0gbmV3Y29tcG9iamVjdCgmQ29tcHR5cGUpOwogICAgIGlmIChzZWxmPT1OVUxMKQogICAgICAgICBnb3RvIGVycm9yOwotICAgIHNlbGYtPnpzdC56YWxsb2MgPSAoYWxsb2NfZnVuYylOVUxMOwotICAgIHNlbGYtPnpzdC56ZnJlZSA9IChmcmVlX2Z1bmMpWl9OVUxMOworICAgIHNlbGYtPnpzdC5vcGFxdWUgPSBOVUxMOworICAgIHNlbGYtPnpzdC56YWxsb2MgPSBQeVpsaWJfTWFsbG9jOworICAgIHNlbGYtPnpzdC56ZnJlZSA9IFB5WmxpYl9GcmVlOwogICAgIHNlbGYtPnpzdC5uZXh0X2luID0gTlVMTDsKICAgICBzZWxmLT56c3QuYXZhaWxfaW4gPSAwOwogICAgIGVyciA9IGRlZmxhdGVJbml0Migmc2VsZi0+enN0LCBsZXZlbCwgbWV0aG9kLCB3Yml0cywgbWVtTGV2ZWwsIHN0cmF0ZWd5KTsKICAgICBzd2l0Y2goZXJyKSB7CiAgICAgY2FzZSAoWl9PSyk6CiAgICAgICAgIHNlbGYtPmlzX2luaXRpYWxpc2VkID0gMTsKLSAgICAgICAgaWYgKHpkaWN0LmJ1ZiA9PSBOVUxMKSB7CisgICAgICAgIGlmICh6ZGljdC0+YnVmID09IE5VTEwpIHsKICAgICAgICAgICAgIGdvdG8gc3VjY2VzczsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGVyciA9IGRlZmxhdGVTZXREaWN0aW9uYXJ5KCZzZWxmLT56c3QsIHpkaWN0LmJ1ZiwgemRpY3QubGVuKTsKKyAgICAgICAgICAgIGVyciA9IGRlZmxhdGVTZXREaWN0aW9uYXJ5KCZzZWxmLT56c3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6ZGljdC0+YnVmLCAodW5zaWduZWQgaW50KXpkaWN0LT5sZW4pOwogICAgICAgICAgICAgc3dpdGNoIChlcnIpIHsKICAgICAgICAgICAgIGNhc2UgKFpfT0spOgogICAgICAgICAgICAgICAgIGdvdG8gc3VjY2VzczsKQEAgLTM5NCwyMiArNDY2LDI4IEBACiAgZXJyb3I6CiAgICAgUHlfQ0xFQVIoc2VsZik7CiAgc3VjY2VzczoKLSAgICBpZiAoemRpY3QuYnVmICE9IE5VTEwpCi0gICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnpkaWN0KTsKICAgICByZXR1cm4gKFB5T2JqZWN0KilzZWxmOwogfQogCi1zdGF0aWMgUHlPYmplY3QgKgotUHlabGliX2RlY29tcHJlc3NvYmooUHlPYmplY3QgKnNlbGZwdHIsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQotewotICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsid2JpdHMiLCAiemRpY3QiLCBOVUxMfTsKLSAgICBpbnQgd2JpdHM9REVGX1dCSVRTLCBlcnI7Ci0gICAgY29tcG9iamVjdCAqc2VsZjsKLSAgICBQeU9iamVjdCAqemRpY3Q9TlVMTDsKKy8qW2NsaW5pYyBpbnB1dF0KK3psaWIuZGVjb21wcmVzc29iagogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAifGlPOmRlY29tcHJlc3NvYmoiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt3bGlzdCwgJndiaXRzLCAmemRpY3QpKQotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB3Yml0czogaW50KGNfZGVmYXVsdD0iTUFYX1dCSVRTIikgPSBNQVhfV0JJVFMKKyAgICAgICAgVGhlIHdpbmRvdyBidWZmZXIgc2l6ZS4KKyAgICB6ZGljdDogb2JqZWN0KGNfZGVmYXVsdD0iTlVMTCIpID0gYicnCisgICAgICAgIFRoZSBwcmVkZWZpbmVkIGNvbXByZXNzaW9uIGRpY3Rpb25hcnkuICBUaGlzIG11c3QgYmUgdGhlIHNhbWUKKyAgICAgICAgZGljdGlvbmFyeSBhcyB1c2VkIGJ5IHRoZSBjb21wcmVzc29yIHRoYXQgcHJvZHVjZWQgdGhlIGlucHV0IGRhdGEuCisKK1JldHVybiBhIGRlY29tcHJlc3NvciBvYmplY3QuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK3N0YXRpYyBQeU9iamVjdCAqCit6bGliX2RlY29tcHJlc3NvYmpfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBpbnQgd2JpdHMsIFB5T2JqZWN0ICp6ZGljdCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD04Y2NkNTgzZmJkNjMxNzk4IGlucHV0PTY3ZjA1MTQ1YTY5MjAxMjddKi8KK3sKKyAgICBpbnQgZXJyOworICAgIGNvbXBvYmplY3QgKnNlbGY7CisKICAgICBpZiAoemRpY3QgIT0gTlVMTCAmJiAhUHlPYmplY3RfQ2hlY2tCdWZmZXIoemRpY3QpKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiemRpY3QgYXJndW1lbnQgbXVzdCBzdXBwb3J0IHRoZSBidWZmZXIgcHJvdG9jb2wiKTsKQEAgLTQxOSw4ICs0OTcsOSBAQAogICAgIHNlbGYgPSBuZXdjb21wb2JqZWN0KCZEZWNvbXB0eXBlKTsKICAgICBpZiAoc2VsZiA9PSBOVUxMKQogICAgICAgICByZXR1cm4oTlVMTCk7Ci0gICAgc2VsZi0+enN0LnphbGxvYyA9IChhbGxvY19mdW5jKU5VTEw7Ci0gICAgc2VsZi0+enN0LnpmcmVlID0gKGZyZWVfZnVuYylaX05VTEw7CisgICAgc2VsZi0+enN0Lm9wYXF1ZSA9IE5VTEw7CisgICAgc2VsZi0+enN0LnphbGxvYyA9IFB5WmxpYl9NYWxsb2M7CisgICAgc2VsZi0+enN0LnpmcmVlID0gUHlabGliX0ZyZWU7CiAgICAgc2VsZi0+enN0Lm5leHRfaW4gPSBOVUxMOwogICAgIHNlbGYtPnpzdC5hdmFpbF9pbiA9IDA7CiAgICAgaWYgKHpkaWN0ICE9IE5VTEwpIHsKQEAgLTQ3NiwzNyArNTU1LDQxIEBACiAgICAgRGVhbGxvYyhzZWxmKTsKIH0KIAotUHlEb2NfU1RSVkFSKGNvbXBfY29tcHJlc3NfX2RvY19fLAotImNvbXByZXNzKGRhdGEpIC0tIFJldHVybiBhIHN0cmluZyBjb250YWluaW5nIGRhdGEgY29tcHJlc3NlZC5cbiIKLSJcbiIKLSJBZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24sIHNvbWUgb2YgdGhlIGlucHV0IGRhdGEgbWF5IHN0aWxsXG4iCi0iYmUgc3RvcmVkIGluIGludGVybmFsIGJ1ZmZlcnMgZm9yIGxhdGVyIHByb2Nlc3NpbmcuXG4iCi0iQ2FsbCB0aGUgZmx1c2goKSBtZXRob2QgdG8gY2xlYXIgdGhlc2UgYnVmZmVycy4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK3psaWIuQ29tcHJlc3MuY29tcHJlc3MKIAorICAgIGRhdGE6IFB5X2J1ZmZlcgorICAgICAgICBCaW5hcnkgZGF0YSB0byBiZSBjb21wcmVzc2VkLgorICAgIC8KKworUmV0dXJucyBhIGJ5dGVzIG9iamVjdCBjb250YWluaW5nIGNvbXByZXNzZWQgZGF0YS4KKworQWZ0ZXIgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLCBzb21lIG9mIHRoZSBpbnB1dCBkYXRhIG1heSBzdGlsbAorYmUgc3RvcmVkIGluIGludGVybmFsIGJ1ZmZlcnMgZm9yIGxhdGVyIHByb2Nlc3NpbmcuCitDYWxsIHRoZSBmbHVzaCgpIG1ldGhvZCB0byBjbGVhciB0aGVzZSBidWZmZXJzLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotUHlabGliX29iamNvbXByZXNzKGNvbXBvYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoremxpYl9Db21wcmVzc19jb21wcmVzc19pbXBsKGNvbXBvYmplY3QgKnNlbGYsIFB5X2J1ZmZlciAqZGF0YSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD01ZDVjZDc5MWNiYzZhN2Y0IGlucHV0PTBkOTU5MDhkNmU2NGZhYjhdKi8KIHsKICAgICBpbnQgZXJyOwogICAgIHVuc2lnbmVkIGludCBpbnBsZW47Ci0gICAgUHlfc3NpemVfdCBsZW5ndGggPSBERUZBVUxUQUxMT0M7Ci0gICAgUHlPYmplY3QgKlJldFZhbCA9IE5VTEw7Ci0gICAgUHlfYnVmZmVyIHBpbnB1dDsKKyAgICB1bnNpZ25lZCBpbnQgbGVuZ3RoID0gREVGX0JVRl9TSVpFLCBuZXdfbGVuZ3RoOworICAgIFB5T2JqZWN0ICpSZXRWYWw7CiAgICAgQnl0ZSAqaW5wdXQ7CiAgICAgdW5zaWduZWQgbG9uZyBzdGFydF90b3RhbF9vdXQ7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqOmNvbXByZXNzIiwgJnBpbnB1dCkpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmIChwaW5wdXQubGVuID4gVUlOVF9NQVgpIHsKKyAgICBpZiAoKHNpemVfdClkYXRhLT5sZW4gPiBVSU5UX01BWCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJTaXplIGRvZXMgbm90IGZpdCBpbiBhbiB1bnNpZ25lZCBpbnQiKTsKLSAgICAgICAgZ290byBlcnJvcl9vdXRlcjsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIGlucHV0ID0gcGlucHV0LmJ1ZjsKLSAgICBpbnBsZW4gPSBwaW5wdXQubGVuOworICAgIGlucHV0ID0gZGF0YS0+YnVmOworICAgIGlucGxlbiA9ICh1bnNpZ25lZCBpbnQpZGF0YS0+bGVuOwogCiAgICAgaWYgKCEoUmV0VmFsID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBsZW5ndGgpKSkKLSAgICAgICAgZ290byBlcnJvcl9vdXRlcjsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBFTlRFUl9aTElCKHNlbGYpOwogCkBAIC01MjMsMTUgKzYwNiwxOCBAQAogICAgIC8qIHdoaWxlIFpfT0sgYW5kIHRoZSBvdXRwdXQgYnVmZmVyIGlzIGZ1bGwsIHRoZXJlIG1pZ2h0IGJlIG1vcmUgb3V0cHV0LAogICAgICAgIHNvIGV4dGVuZCB0aGUgb3V0cHV0IGJ1ZmZlciBhbmQgdHJ5IGFnYWluICovCiAgICAgd2hpbGUgKGVyciA9PSBaX09LICYmIHNlbGYtPnpzdC5hdmFpbF9vdXQgPT0gMCkgewotICAgICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZSZXRWYWwsIGxlbmd0aCA8PCAxKSA8IDApIHsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihSZXRWYWwpOwotICAgICAgICAgICAgUmV0VmFsID0gTlVMTDsKLSAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIGlmIChsZW5ndGggPD0gKFVJTlRfTUFYID4+IDEpKQorICAgICAgICAgICAgbmV3X2xlbmd0aCA9IGxlbmd0aCA8PCAxOworICAgICAgICBlbHNlCisgICAgICAgICAgICBuZXdfbGVuZ3RoID0gVUlOVF9NQVg7CisgICAgICAgIGlmIChfUHlCeXRlc19SZXNpemUoJlJldFZhbCwgbmV3X2xlbmd0aCkgPCAwKSB7CisgICAgICAgICAgICBQeV9DTEVBUihSZXRWYWwpOworICAgICAgICAgICAgZ290byBkb25lOwogICAgICAgICB9CiAgICAgICAgIHNlbGYtPnpzdC5uZXh0X291dCA9CiAgICAgICAgICAgICAodW5zaWduZWQgY2hhciAqKVB5Qnl0ZXNfQVNfU1RSSU5HKFJldFZhbCkgKyBsZW5ndGg7CiAgICAgICAgIHNlbGYtPnpzdC5hdmFpbF9vdXQgPSBsZW5ndGg7Ci0gICAgICAgIGxlbmd0aCA9IGxlbmd0aCA8PCAxOworICAgICAgICBsZW5ndGggPSBuZXdfbGVuZ3RoOwogCiAgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICAgICAgZXJyID0gZGVmbGF0ZSgmKHNlbGYtPnpzdCksIFpfTk9fRkxVU0gpOwpAQCAtNTQ0LDE5ICs2MzAsMTUgQEAKIAogICAgIGlmIChlcnIgIT0gWl9PSyAmJiBlcnIgIT0gWl9CVUZfRVJST1IpIHsKICAgICAgICAgemxpYl9lcnJvcihzZWxmLT56c3QsIGVyciwgIndoaWxlIGNvbXByZXNzaW5nIGRhdGEiKTsKLSAgICAgICAgUHlfREVDUkVGKFJldFZhbCk7Ci0gICAgICAgIFJldFZhbCA9IE5VTEw7Ci0gICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIFB5X0NMRUFSKFJldFZhbCk7CisgICAgICAgIGdvdG8gZG9uZTsKICAgICB9CiAgICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZSgmUmV0VmFsLCBzZWxmLT56c3QudG90YWxfb3V0IC0gc3RhcnRfdG90YWxfb3V0KSA8IDApIHsKLSAgICAgICAgUHlfREVDUkVGKFJldFZhbCk7Ci0gICAgICAgIFJldFZhbCA9IE5VTEw7CisgICAgICAgIFB5X0NMRUFSKFJldFZhbCk7CiAgICAgfQogCi0gZXJyb3I6CisgZG9uZToKICAgICBMRUFWRV9aTElCKHNlbGYpOwotIGVycm9yX291dGVyOgotICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBpbnB1dCk7CiAgICAgcmV0dXJuIFJldFZhbDsKIH0KIApAQCAtNTcyLDcgKzY1NCw3IEBACiAgICAgICAgICAgICBQeV9zc2l6ZV90IG9sZF9zaXplID0gUHlCeXRlc19HRVRfU0laRShzZWxmLT51bnVzZWRfZGF0YSk7CiAgICAgICAgICAgICBQeV9zc2l6ZV90IG5ld19zaXplOwogICAgICAgICAgICAgUHlPYmplY3QgKm5ld19kYXRhOwotICAgICAgICAgICAgaWYgKHNlbGYtPnpzdC5hdmFpbF9pbiA+IFBZX1NTSVpFX1RfTUFYIC0gb2xkX3NpemUpIHsKKyAgICAgICAgICAgIGlmICgoc2l6ZV90KXNlbGYtPnpzdC5hdmFpbF9pbiA+IChzaXplX3QpVUlOVF9NQVggLSAoc2l6ZV90KW9sZF9zaXplKSB7CiAgICAgICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgICAgICB9CkBAIC02MDMsNTUgKzY4NSw1MCBAQAogICAgIHJldHVybiAwOwogfQogCi1QeURvY19TVFJWQVIoZGVjb21wX2RlY29tcHJlc3NfX2RvY19fLAotImRlY29tcHJlc3MoZGF0YSwgbWF4X2xlbmd0aCkgLS0gUmV0dXJuIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGRlY29tcHJlc3NlZFxuIgotInZlcnNpb24gb2YgdGhlIGRhdGEuXG4iCi0iXG4iCi0iQWZ0ZXIgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLCBzb21lIG9mIHRoZSBpbnB1dCBkYXRhIG1heSBzdGlsbCBiZSBzdG9yZWQgaW5cbiIKLSJpbnRlcm5hbCBidWZmZXJzIGZvciBsYXRlciBwcm9jZXNzaW5nLlxuIgotIkNhbGwgdGhlIGZsdXNoKCkgbWV0aG9kIHRvIGNsZWFyIHRoZXNlIGJ1ZmZlcnMuXG4iCi0iSWYgdGhlIG1heF9sZW5ndGggcGFyYW1ldGVyIGlzIHNwZWNpZmllZCB0aGVuIHRoZSByZXR1cm4gdmFsdWUgd2lsbCBiZVxuIgotIm5vIGxvbmdlciB0aGFuIG1heF9sZW5ndGguICBVbmNvbnN1bWVkIGlucHV0IGRhdGEgd2lsbCBiZSBzdG9yZWQgaW5cbiIKLSJ0aGUgdW5jb25zdW1lZF90YWlsIGF0dHJpYnV0ZS4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK3psaWIuRGVjb21wcmVzcy5kZWNvbXByZXNzCisKKyAgICBkYXRhOiBQeV9idWZmZXIKKyAgICAgICAgVGhlIGJpbmFyeSBkYXRhIHRvIGRlY29tcHJlc3MuCisgICAgbWF4X2xlbmd0aDogdWludCA9IDAKKyAgICAgICAgVGhlIG1heGltdW0gYWxsb3dhYmxlIGxlbmd0aCBvZiB0aGUgZGVjb21wcmVzc2VkIGRhdGEuCisgICAgICAgIFVuY29uc3VtZWQgaW5wdXQgZGF0YSB3aWxsIGJlIHN0b3JlZCBpbgorICAgICAgICB0aGUgdW5jb25zdW1lZF90YWlsIGF0dHJpYnV0ZS4KKyAgICAvCisKK1JldHVybiBhIGJ5dGVzIG9iamVjdCBjb250YWluaW5nIHRoZSBkZWNvbXByZXNzZWQgdmVyc2lvbiBvZiB0aGUgZGF0YS4KKworQWZ0ZXIgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLCBzb21lIG9mIHRoZSBpbnB1dCBkYXRhIG1heSBzdGlsbCBiZSBzdG9yZWQgaW4KK2ludGVybmFsIGJ1ZmZlcnMgZm9yIGxhdGVyIHByb2Nlc3NpbmcuCitDYWxsIHRoZSBmbHVzaCgpIG1ldGhvZCB0byBjbGVhciB0aGVzZSBidWZmZXJzLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotUHlabGliX29iamRlY29tcHJlc3MoY29tcG9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit6bGliX0RlY29tcHJlc3NfZGVjb21wcmVzc19pbXBsKGNvbXBvYmplY3QgKnNlbGYsIFB5X2J1ZmZlciAqZGF0YSwgdW5zaWduZWQgaW50IG1heF9sZW5ndGgpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NzU1Y2NjYzkwODdiZmU1NSBpbnB1dD0wMmNmYzA0NzM3N2NlYzg2XSovCiB7Ci0gICAgaW50IGVyciwgbWF4X2xlbmd0aCA9IDA7Ci0gICAgdW5zaWduZWQgaW50IGlucGxlbjsKLSAgICBQeV9zc2l6ZV90IG9sZF9sZW5ndGgsIGxlbmd0aCA9IERFRkFVTFRBTExPQzsKKyAgICBpbnQgZXJyOworICAgIHVuc2lnbmVkIGludCBvbGRfbGVuZ3RoLCBsZW5ndGggPSBERUZfQlVGX1NJWkU7CiAgICAgUHlPYmplY3QgKlJldFZhbCA9IE5VTEw7Ci0gICAgUHlfYnVmZmVyIHBpbnB1dDsKLSAgICBCeXRlICppbnB1dDsKICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0X3RvdGFsX291dDsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAieSp8aTpkZWNvbXByZXNzIiwgJnBpbnB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJm1heF9sZW5ndGgpKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAocGlucHV0LmxlbiA+IFVJTlRfTUFYKSB7CisgICAgaWYgKChzaXplX3QpZGF0YS0+bGVuID4gVUlOVF9NQVgpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiU2l6ZSBkb2VzIG5vdCBmaXQgaW4gYW4gdW5zaWduZWQgaW50Iik7Ci0gICAgICAgIGdvdG8gZXJyb3Jfb3V0ZXI7Ci0gICAgfQotICAgIGlucHV0ID0gcGlucHV0LmJ1ZjsKLSAgICBpbnBsZW4gPSBwaW5wdXQubGVuOwotICAgIGlmIChtYXhfbGVuZ3RoIDwgMCkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJtYXhfbGVuZ3RoIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8iKTsKLSAgICAgICAgZ290byBlcnJvcl9vdXRlcjsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCiAgICAgLyogbGltaXQgYW1vdW50IG9mIGRhdGEgYWxsb2NhdGVkIHRvIG1heF9sZW5ndGggKi8KICAgICBpZiAobWF4X2xlbmd0aCAmJiBsZW5ndGggPiBtYXhfbGVuZ3RoKQogICAgICAgICBsZW5ndGggPSBtYXhfbGVuZ3RoOwogICAgIGlmICghKFJldFZhbCA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgbGVuZ3RoKSkpCi0gICAgICAgIGdvdG8gZXJyb3Jfb3V0ZXI7CisgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgRU5URVJfWkxJQihzZWxmKTsKIAogICAgIHN0YXJ0X3RvdGFsX291dCA9IHNlbGYtPnpzdC50b3RhbF9vdXQ7Ci0gICAgc2VsZi0+enN0LmF2YWlsX2luID0gaW5wbGVuOwotICAgIHNlbGYtPnpzdC5uZXh0X2luID0gaW5wdXQ7CisgICAgc2VsZi0+enN0LmF2YWlsX2luID0gKHVuc2lnbmVkIGludClkYXRhLT5sZW47CisgICAgc2VsZi0+enN0Lm5leHRfaW4gPSBkYXRhLT5idWY7CiAgICAgc2VsZi0+enN0LmF2YWlsX291dCA9IGxlbmd0aDsKICAgICBzZWxmLT56c3QubmV4dF9vdXQgPSAodW5zaWduZWQgY2hhciAqKVB5Qnl0ZXNfQVNfU1RSSU5HKFJldFZhbCk7CiAKQEAgLTY2NiwxMiArNzQzLDIxIEBACiAgICAgICAgICAgICBSZXRWYWwgPSBOVUxMOwogICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgfQotICAgICAgICBlcnIgPSBpbmZsYXRlU2V0RGljdGlvbmFyeSgmKHNlbGYtPnpzdCksIHpkaWN0X2J1Zi5idWYsIHpkaWN0X2J1Zi5sZW4pOworCisgICAgICAgIGlmICgoc2l6ZV90KXpkaWN0X2J1Zi5sZW4gPiBVSU5UX01BWCkgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICJ6ZGljdCBsZW5ndGggZG9lcyBub3QgZml0IGluIGFuIHVuc2lnbmVkIGludCIpOworICAgICAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmemRpY3RfYnVmKTsKKyAgICAgICAgICAgIFB5X0NMRUFSKFJldFZhbCk7CisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICB9CisKKyAgICAgICAgZXJyID0gaW5mbGF0ZVNldERpY3Rpb25hcnkoJihzZWxmLT56c3QpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6ZGljdF9idWYuYnVmLCAodW5zaWduZWQgaW50KXpkaWN0X2J1Zi5sZW4pOwogICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ6ZGljdF9idWYpOwogICAgICAgICBpZiAoZXJyICE9IFpfT0spIHsKICAgICAgICAgICAgIHpsaWJfZXJyb3Ioc2VsZi0+enN0LCBlcnIsICJ3aGlsZSBkZWNvbXByZXNzaW5nIGRhdGEiKTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihSZXRWYWwpOwotICAgICAgICAgICAgUmV0VmFsID0gTlVMTDsKKyAgICAgICAgICAgIFB5X0NMRUFSKFJldFZhbCk7CiAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICB9CiAgICAgICAgIC8qIFJlcGVhdCB0aGUgY2FsbCB0byBpbmZsYXRlLiAqLwpAQCAtNjk3LDggKzc4Myw3IEBACiAgICAgICAgICAgICBsZW5ndGggPSBtYXhfbGVuZ3RoOwogCiAgICAgICAgIGlmIChfUHlCeXRlc19SZXNpemUoJlJldFZhbCwgbGVuZ3RoKSA8IDApIHsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihSZXRWYWwpOwotICAgICAgICAgICAgUmV0VmFsID0gTlVMTDsKKyAgICAgICAgICAgIFB5X0NMRUFSKFJldFZhbCk7CiAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICB9CiAgICAgICAgIHNlbGYtPnpzdC5uZXh0X291dCA9CkBAIC03MzIsMzkgKzgxNywzOSBAQAogICAgIH0KIAogICAgIGlmIChfUHlCeXRlc19SZXNpemUoJlJldFZhbCwgc2VsZi0+enN0LnRvdGFsX291dCAtIHN0YXJ0X3RvdGFsX291dCkgPCAwKSB7Ci0gICAgICAgIFB5X0RFQ1JFRihSZXRWYWwpOwotICAgICAgICBSZXRWYWwgPSBOVUxMOworICAgICAgICBQeV9DTEVBUihSZXRWYWwpOwogICAgIH0KIAogIGVycm9yOgogICAgIExFQVZFX1pMSUIoc2VsZik7Ci0gZXJyb3Jfb3V0ZXI6Ci0gICAgUHlCdWZmZXJfUmVsZWFzZSgmcGlucHV0KTsKICAgICByZXR1cm4gUmV0VmFsOwogfQogCi1QeURvY19TVFJWQVIoY29tcF9mbHVzaF9fZG9jX18sCi0iZmx1c2goIFttb2RlXSApIC0tIFJldHVybiBhIHN0cmluZyBjb250YWluaW5nIGFueSByZW1haW5pbmcgY29tcHJlc3NlZCBkYXRhLlxuIgotIlxuIgotIm1vZGUgY2FuIGJlIG9uZSBvZiB0aGUgY29uc3RhbnRzIFpfU1lOQ19GTFVTSCwgWl9GVUxMX0ZMVVNILCBaX0ZJTklTSDsgdGhlXG4iCi0iZGVmYXVsdCB2YWx1ZSB1c2VkIHdoZW4gbW9kZSBpcyBub3Qgc3BlY2lmaWVkIGlzIFpfRklOSVNILlxuIgotIklmIG1vZGUgPT0gWl9GSU5JU0gsIHRoZSBjb21wcmVzc29yIG9iamVjdCBjYW4gbm8gbG9uZ2VyIGJlIHVzZWQgYWZ0ZXJcbiIKLSJjYWxsaW5nIHRoZSBmbHVzaCgpIG1ldGhvZC4gIE90aGVyd2lzZSwgbW9yZSBkYXRhIGNhbiBzdGlsbCBiZSBjb21wcmVzc2VkLiIpOworLypbY2xpbmljIGlucHV0XQoremxpYi5Db21wcmVzcy5mbHVzaAorCisgICAgbW9kZTogaW50KGNfZGVmYXVsdD0iWl9GSU5JU0giKSA9IHpsaWIuWl9GSU5JU0gKKyAgICAgICAgT25lIG9mIHRoZSBjb25zdGFudHMgWl9TWU5DX0ZMVVNILCBaX0ZVTExfRkxVU0gsIFpfRklOSVNILgorICAgICAgICBJZiBtb2RlID09IFpfRklOSVNILCB0aGUgY29tcHJlc3NvciBvYmplY3QgY2FuIG5vIGxvbmdlciBiZQorICAgICAgICB1c2VkIGFmdGVyIGNhbGxpbmcgdGhlIGZsdXNoKCkgbWV0aG9kLiAgT3RoZXJ3aXNlLCBtb3JlIGRhdGEKKyAgICAgICAgY2FuIHN0aWxsIGJlIGNvbXByZXNzZWQuCisgICAgLworCitSZXR1cm4gYSBieXRlcyBvYmplY3QgY29udGFpbmluZyBhbnkgcmVtYWluaW5nIGNvbXByZXNzZWQgZGF0YS4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLVB5WmxpYl9mbHVzaChjb21wb2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3psaWJfQ29tcHJlc3NfZmx1c2hfaW1wbChjb21wb2JqZWN0ICpzZWxmLCBpbnQgbW9kZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1hMjAzZjRjZWZjOWRlNzI3IGlucHV0PTczZWQwNjY3OTRiZDE1YmNdKi8KIHsKLSAgICBpbnQgZXJyLCBsZW5ndGggPSBERUZBVUxUQUxMT0M7CisgICAgaW50IGVycjsKKyAgICB1bnNpZ25lZCBpbnQgbGVuZ3RoID0gREVGX0JVRl9TSVpFLCBuZXdfbGVuZ3RoOwogICAgIFB5T2JqZWN0ICpSZXRWYWw7Ci0gICAgaW50IGZsdXNobW9kZSA9IFpfRklOSVNIOwogICAgIHVuc2lnbmVkIGxvbmcgc3RhcnRfdG90YWxfb3V0OwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8aTpmbHVzaCIsICZmbHVzaG1vZGUpKQotICAgICAgICByZXR1cm4gTlVMTDsKLQogICAgIC8qIEZsdXNoaW5nIHdpdGggWl9OT19GTFVTSCBpcyBhIG5vLW9wLCBzbyB0aGVyZSdzIG5vIHBvaW50IGluCiAgICAgICAgZG9pbmcgYW55IHdvcmsgYXQgYWxsOyBqdXN0IHJldHVybiBhbiBlbXB0eSBzdHJpbmcuICovCi0gICAgaWYgKGZsdXNobW9kZSA9PSBaX05PX0ZMVVNIKSB7CisgICAgaWYgKG1vZGUgPT0gWl9OT19GTFVTSCkgewogICAgICAgICByZXR1cm4gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCAwKTsKICAgICB9CiAKQEAgLTc3OSwzMSArODY0LDM0IEBACiAgICAgc2VsZi0+enN0Lm5leHRfb3V0ID0gKHVuc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FTX1NUUklORyhSZXRWYWwpOwogCiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgIGVyciA9IGRlZmxhdGUoJihzZWxmLT56c3QpLCBmbHVzaG1vZGUpOworICAgIGVyciA9IGRlZmxhdGUoJihzZWxmLT56c3QpLCBtb2RlKTsKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCiAgICAgLyogd2hpbGUgWl9PSyBhbmQgdGhlIG91dHB1dCBidWZmZXIgaXMgZnVsbCwgdGhlcmUgbWlnaHQgYmUgbW9yZSBvdXRwdXQsCiAgICAgICAgc28gZXh0ZW5kIHRoZSBvdXRwdXQgYnVmZmVyIGFuZCB0cnkgYWdhaW4gKi8KICAgICB3aGlsZSAoZXJyID09IFpfT0sgJiYgc2VsZi0+enN0LmF2YWlsX291dCA9PSAwKSB7Ci0gICAgICAgIGlmIChfUHlCeXRlc19SZXNpemUoJlJldFZhbCwgbGVuZ3RoIDw8IDEpIDwgMCkgewotICAgICAgICAgICAgUHlfREVDUkVGKFJldFZhbCk7Ci0gICAgICAgICAgICBSZXRWYWwgPSBOVUxMOworICAgICAgICBpZiAobGVuZ3RoIDw9IChVSU5UX01BWCA+PiAxKSkKKyAgICAgICAgICAgIG5ld19sZW5ndGggPSBsZW5ndGggPDwgMTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbmV3X2xlbmd0aCA9IFVJTlRfTUFYOworICAgICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZSZXRWYWwsIG5ld19sZW5ndGgpIDwgMCkgeworICAgICAgICAgICAgUHlfQ0xFQVIoUmV0VmFsKTsKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgIH0KICAgICAgICAgc2VsZi0+enN0Lm5leHRfb3V0ID0KICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyICopUHlCeXRlc19BU19TVFJJTkcoUmV0VmFsKSArIGxlbmd0aDsKICAgICAgICAgc2VsZi0+enN0LmF2YWlsX291dCA9IGxlbmd0aDsKLSAgICAgICAgbGVuZ3RoID0gbGVuZ3RoIDw8IDE7CisgICAgICAgIGxlbmd0aCA9IG5ld19sZW5ndGg7CiAKICAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgICAgICBlcnIgPSBkZWZsYXRlKCYoc2VsZi0+enN0KSwgZmx1c2htb2RlKTsKKyAgICAgICAgZXJyID0gZGVmbGF0ZSgmKHNlbGYtPnpzdCksIG1vZGUpOwogICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogICAgIH0KIAotICAgIC8qIElmIGZsdXNobW9kZSBpcyBaX0ZJTklTSCwgd2UgYWxzbyBoYXZlIHRvIGNhbGwgZGVmbGF0ZUVuZCgpIHRvIGZyZWUKKyAgICAvKiBJZiBtb2RlIGlzIFpfRklOSVNILCB3ZSBhbHNvIGhhdmUgdG8gY2FsbCBkZWZsYXRlRW5kKCkgdG8gZnJlZQogICAgICAgIHZhcmlvdXMgZGF0YSBzdHJ1Y3R1cmVzLiBOb3RlIHdlIHNob3VsZCBvbmx5IGdldCBaX1NUUkVBTV9FTkQgd2hlbgotICAgICAgIGZsdXNobW9kZSBpcyBaX0ZJTklTSCwgYnV0IGNoZWNraW5nIGJvdGggZm9yIHNhZmV0eSovCi0gICAgaWYgKGVyciA9PSBaX1NUUkVBTV9FTkQgJiYgZmx1c2htb2RlID09IFpfRklOSVNIKSB7CisgICAgICAgbW9kZSBpcyBaX0ZJTklTSCwgYnV0IGNoZWNraW5nIGJvdGggZm9yIHNhZmV0eSovCisgICAgaWYgKGVyciA9PSBaX1NUUkVBTV9FTkQgJiYgbW9kZSA9PSBaX0ZJTklTSCkgewogICAgICAgICBlcnIgPSBkZWZsYXRlRW5kKCYoc2VsZi0+enN0KSk7CiAgICAgICAgIGlmIChlcnIgIT0gWl9PSykgewogICAgICAgICAgICAgemxpYl9lcnJvcihzZWxmLT56c3QsIGVyciwgIndoaWxlIGZpbmlzaGluZyBjb21wcmVzc2lvbiIpOwpAQCAtODI2LDggKzkxNCw3IEBACiAgICAgfQogCiAgICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZSgmUmV0VmFsLCBzZWxmLT56c3QudG90YWxfb3V0IC0gc3RhcnRfdG90YWxfb3V0KSA8IDApIHsKLSAgICAgICAgUHlfREVDUkVGKFJldFZhbCk7Ci0gICAgICAgIFJldFZhbCA9IE5VTEw7CisgICAgICAgIFB5X0NMRUFSKFJldFZhbCk7CiAgICAgfQogCiAgZXJyb3I6CkBAIC04MzcsMTEgKzkyNCwxNiBAQAogfQogCiAjaWZkZWYgSEFWRV9aTElCX0NPUFkKLVB5RG9jX1NUUlZBUihjb21wX2NvcHlfX2RvY19fLAotImNvcHkoKSAtLSBSZXR1cm4gYSBjb3B5IG9mIHRoZSBjb21wcmVzc2lvbiBvYmplY3QuIik7CisKKy8qW2NsaW5pYyBpbnB1dF0KK3psaWIuQ29tcHJlc3MuY29weQorCitSZXR1cm4gYSBjb3B5IG9mIHRoZSBjb21wcmVzc2lvbiBvYmplY3QuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1QeVpsaWJfY29weShjb21wb2JqZWN0ICpzZWxmKQoremxpYl9Db21wcmVzc19jb3B5X2ltcGwoY29tcG9iamVjdCAqc2VsZikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD01MTQ0YWExNTNjMjFlODA1IGlucHV0PWM2NTYzNTFmOTRiODI3MThdKi8KIHsKICAgICBjb21wb2JqZWN0ICpyZXR2YWwgPSBOVUxMOwogICAgIGludCBlcnI7CkBAIC04OTEsMTEgKzk4MywxNSBAQAogICAgIHJldHVybiBOVUxMOwogfQogCi1QeURvY19TVFJWQVIoZGVjb21wX2NvcHlfX2RvY19fLAotImNvcHkoKSAtLSBSZXR1cm4gYSBjb3B5IG9mIHRoZSBkZWNvbXByZXNzaW9uIG9iamVjdC4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK3psaWIuRGVjb21wcmVzcy5jb3B5CisKK1JldHVybiBhIGNvcHkgb2YgdGhlIGRlY29tcHJlc3Npb24gb2JqZWN0LgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotUHlabGliX3VuY29weShjb21wb2JqZWN0ICpzZWxmKQoremxpYl9EZWNvbXByZXNzX2NvcHlfaW1wbChjb21wb2JqZWN0ICpzZWxmKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTAyYTg4M2EyYTUxMGM4Y2MgaW5wdXQ9YmE2YzNlOTY3MTJhNTk2Yl0qLwogewogICAgIGNvbXBvYmplY3QgKnJldHZhbCA9IE5VTEw7CiAgICAgaW50IGVycjsKQEAgLTk0NywzNCArMTA0Myw0MyBAQAogfQogI2VuZGlmCiAKLVB5RG9jX1NUUlZBUihkZWNvbXBfZmx1c2hfX2RvY19fLAotImZsdXNoKCBbbGVuZ3RoXSApIC0tIFJldHVybiBhIHN0cmluZyBjb250YWluaW5nIGFueSByZW1haW5pbmdcbiIKLSJkZWNvbXByZXNzZWQgZGF0YS4gbGVuZ3RoLCBpZiBnaXZlbiwgaXMgdGhlIGluaXRpYWwgc2l6ZSBvZiB0aGVcbiIKLSJvdXRwdXQgYnVmZmVyLlxuIgotIlxuIgotIlRoZSBkZWNvbXByZXNzb3Igb2JqZWN0IGNhbiBubyBsb25nZXIgYmUgdXNlZCBhZnRlciB0aGlzIGNhbGwuIik7CisvKltjbGluaWMgaW5wdXRdCit6bGliLkRlY29tcHJlc3MuZmx1c2gKKworICAgIGxlbmd0aDogdWludChjX2RlZmF1bHQ9IkRFRl9CVUZfU0laRSIpID0gemxpYi5ERUZfQlVGX1NJWkUKKyAgICAgICAgdGhlIGluaXRpYWwgc2l6ZSBvZiB0aGUgb3V0cHV0IGJ1ZmZlci4KKyAgICAvCisKK1JldHVybiBhIGJ5dGVzIG9iamVjdCBjb250YWluaW5nIGFueSByZW1haW5pbmcgZGVjb21wcmVzc2VkIGRhdGEuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1QeVpsaWJfdW5mbHVzaChjb21wb2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3psaWJfRGVjb21wcmVzc19mbHVzaF9pbXBsKGNvbXBvYmplY3QgKnNlbGYsIHVuc2lnbmVkIGludCBsZW5ndGgpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZGI2ZmI3NTNhYjY5OGUyMiBpbnB1dD0xNTgwOTU2NTA1OTc4OTkzXSovCiB7Ci0gICAgaW50IGVyciwgbGVuZ3RoID0gREVGQVVMVEFMTE9DOworICAgIGludCBlcnI7CisgICAgdW5zaWduZWQgaW50IG5ld19sZW5ndGg7CiAgICAgUHlPYmplY3QgKiByZXR2YWwgPSBOVUxMOwogICAgIHVuc2lnbmVkIGxvbmcgc3RhcnRfdG90YWxfb3V0OworICAgIFB5X3NzaXplX3Qgc2l6ZTsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifGk6Zmx1c2giLCAmbGVuZ3RoKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKGxlbmd0aCA8PSAwKSB7CisgICAgaWYgKGxlbmd0aCA9PSAwKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAibGVuZ3RoIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8iKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQorCiAgICAgaWYgKCEocmV0dmFsID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBsZW5ndGgpKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKIAogICAgIEVOVEVSX1pMSUIoc2VsZik7CiAKKyAgICBzaXplID0gUHlCeXRlc19HRVRfU0laRShzZWxmLT51bmNvbnN1bWVkX3RhaWwpOworCiAgICAgc3RhcnRfdG90YWxfb3V0ID0gc2VsZi0+enN0LnRvdGFsX291dDsKLSAgICBzZWxmLT56c3QuYXZhaWxfaW4gPSBQeUJ5dGVzX0dFVF9TSVpFKHNlbGYtPnVuY29uc3VtZWRfdGFpbCk7CisgICAgLyogc2F2ZV91bmNvbnN1bWVkX2lucHV0KCkgZW5zdXJlcyB0aGF0IHVuY29uc3VtZWRfdGFpbCBsZW5ndGggaXMgbGVzc2VyCisgICAgICAgb3IgZXF1YWwgdGhhbiBVSU5UX01BWCAqLworICAgIHNlbGYtPnpzdC5hdmFpbF9pbiA9IFB5X1NBRkVfRE9XTkNBU1Qoc2l6ZSwgUHlfc3NpemVfdCwgdW5zaWduZWQgaW50KTsKICAgICBzZWxmLT56c3QubmV4dF9pbiA9IChCeXRlICopUHlCeXRlc19BU19TVFJJTkcoc2VsZi0+dW5jb25zdW1lZF90YWlsKTsKICAgICBzZWxmLT56c3QuYXZhaWxfb3V0ID0gbGVuZ3RoOwogICAgIHNlbGYtPnpzdC5uZXh0X291dCA9IChCeXRlICopUHlCeXRlc19BU19TVFJJTkcocmV0dmFsKTsKQEAgLTk4NiwxNCArMTA5MSwxNyBAQAogICAgIC8qIHdoaWxlIFpfT0sgYW5kIHRoZSBvdXRwdXQgYnVmZmVyIGlzIGZ1bGwsIHRoZXJlIG1pZ2h0IGJlIG1vcmUgb3V0cHV0LAogICAgICAgIHNvIGV4dGVuZCB0aGUgb3V0cHV0IGJ1ZmZlciBhbmQgdHJ5IGFnYWluICovCiAgICAgd2hpbGUgKChlcnIgPT0gWl9PSyB8fCBlcnIgPT0gWl9CVUZfRVJST1IpICYmIHNlbGYtPnpzdC5hdmFpbF9vdXQgPT0gMCkgewotICAgICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZyZXR2YWwsIGxlbmd0aCA8PCAxKSA8IDApIHsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihyZXR2YWwpOwotICAgICAgICAgICAgcmV0dmFsID0gTlVMTDsKKyAgICAgICAgaWYgKGxlbmd0aCA8PSAoVUlOVF9NQVggPj4gMSkpCisgICAgICAgICAgICBuZXdfbGVuZ3RoID0gbGVuZ3RoIDw8IDE7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG5ld19sZW5ndGggPSBVSU5UX01BWDsKKyAgICAgICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZSgmcmV0dmFsLCBuZXdfbGVuZ3RoKSA8IDApIHsKKyAgICAgICAgICAgIFB5X0NMRUFSKHJldHZhbCk7CiAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICB9CiAgICAgICAgIHNlbGYtPnpzdC5uZXh0X291dCA9IChCeXRlICopUHlCeXRlc19BU19TVFJJTkcocmV0dmFsKSArIGxlbmd0aDsKICAgICAgICAgc2VsZi0+enN0LmF2YWlsX291dCA9IGxlbmd0aDsKLSAgICAgICAgbGVuZ3RoID0gbGVuZ3RoIDw8IDE7CisgICAgICAgIGxlbmd0aCA9IG5ld19sZW5ndGg7CiAKICAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgICAgICBlcnIgPSBpbmZsYXRlKCYoc2VsZi0+enN0KSwgWl9GSU5JU0gpOwpAQCAtMTAyMCw4ICsxMTI4LDcgQEAKICAgICB9CiAKICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZyZXR2YWwsIHNlbGYtPnpzdC50b3RhbF9vdXQgLSBzdGFydF90b3RhbF9vdXQpIDwgMCkgewotICAgICAgICBQeV9ERUNSRUYocmV0dmFsKTsKLSAgICAgICAgcmV0dmFsID0gTlVMTDsKKyAgICAgICAgUHlfQ0xFQVIocmV0dmFsKTsKICAgICB9CiAKIGVycm9yOgpAQCAtMTAzMSwyOCArMTEzOCwyNCBAQAogICAgIHJldHVybiByZXR2YWw7CiB9CiAKKyNpbmNsdWRlICJjbGluaWMvemxpYm1vZHVsZS5jLmgiCisKIHN0YXRpYyBQeU1ldGhvZERlZiBjb21wX21ldGhvZHNbXSA9CiB7Ci0gICAgeyJjb21wcmVzcyIsIChiaW5hcnlmdW5jKVB5WmxpYl9vYmpjb21wcmVzcywgTUVUSF9WQVJBUkdTLAotICAgICAgICAgICAgICAgICBjb21wX2NvbXByZXNzX19kb2NfX30sCi0gICAgeyJmbHVzaCIsIChiaW5hcnlmdW5jKVB5WmxpYl9mbHVzaCwgTUVUSF9WQVJBUkdTLAotICAgICAgICAgICAgICBjb21wX2ZsdXNoX19kb2NfX30sCisgICAgWkxJQl9DT01QUkVTU19DT01QUkVTU19NRVRIT0RERUYKKyAgICBaTElCX0NPTVBSRVNTX0ZMVVNIX01FVEhPRERFRgogI2lmZGVmIEhBVkVfWkxJQl9DT1BZCi0gICAgeyJjb3B5IiwgIChQeUNGdW5jdGlvbilQeVpsaWJfY29weSwgTUVUSF9OT0FSR1MsCi0gICAgICAgICAgICAgIGNvbXBfY29weV9fZG9jX199LAorICAgIFpMSUJfQ09NUFJFU1NfQ09QWV9NRVRIT0RERUYKICNlbmRpZgogICAgIHtOVUxMLCBOVUxMfQogfTsKIAogc3RhdGljIFB5TWV0aG9kRGVmIERlY29tcF9tZXRob2RzW10gPQogewotICAgIHsiZGVjb21wcmVzcyIsIChiaW5hcnlmdW5jKVB5WmxpYl9vYmpkZWNvbXByZXNzLCBNRVRIX1ZBUkFSR1MsCi0gICAgICAgICAgICAgICAgICAgZGVjb21wX2RlY29tcHJlc3NfX2RvY19ffSwKLSAgICB7ImZsdXNoIiwgKGJpbmFyeWZ1bmMpUHlabGliX3VuZmx1c2gsIE1FVEhfVkFSQVJHUywKLSAgICAgICAgICAgICAgZGVjb21wX2ZsdXNoX19kb2NfX30sCisgICAgWkxJQl9ERUNPTVBSRVNTX0RFQ09NUFJFU1NfTUVUSE9EREVGCisgICAgWkxJQl9ERUNPTVBSRVNTX0ZMVVNIX01FVEhPRERFRgogI2lmZGVmIEhBVkVfWkxJQl9DT1BZCi0gICAgeyJjb3B5IiwgIChQeUNGdW5jdGlvbilQeVpsaWJfdW5jb3B5LCBNRVRIX05PQVJHUywKLSAgICAgICAgICAgICAgZGVjb21wX2NvcHlfX2RvY19ffSwKKyAgICBaTElCX0RFQ09NUFJFU1NfQ09QWV9NRVRIT0RERUYKICNlbmRpZgogICAgIHtOVUxMLCBOVUxMfQogfTsKQEAgLTEwNjUsOTYgKzExNjgsOTUgQEAKICAgICB7TlVMTH0sCiB9OwogCi1QeURvY19TVFJWQVIoYWRsZXIzMl9fZG9jX18sCi0iYWRsZXIzMihzdHJpbmdbLCBzdGFydF0pIC0tIENvbXB1dGUgYW4gQWRsZXItMzIgY2hlY2tzdW0gb2Ygc3RyaW5nLlxuIgotIlxuIgotIkFuIG9wdGlvbmFsIHN0YXJ0aW5nIHZhbHVlIGNhbiBiZSBzcGVjaWZpZWQuICBUaGUgcmV0dXJuZWQgY2hlY2tzdW0gaXNcbiIKLSJhbiBpbnRlZ2VyLiIpOworLypbY2xpbmljIGlucHV0XQoremxpYi5hZGxlcjMyCisKKyAgICBkYXRhOiBQeV9idWZmZXIKKyAgICB2YWx1ZTogdW5zaWduZWRfaW50KGJpdHdpc2U9VHJ1ZSkgPSAxCisgICAgICAgIFN0YXJ0aW5nIHZhbHVlIG9mIHRoZSBjaGVja3N1bS4KKyAgICAvCisKK0NvbXB1dGUgYW4gQWRsZXItMzIgY2hlY2tzdW0gb2YgZGF0YS4KKworVGhlIHJldHVybmVkIGNoZWNrc3VtIGlzIGFuIGludGVnZXIuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1QeVpsaWJfYWRsZXIzMihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit6bGliX2FkbGVyMzJfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmRhdGEsIHVuc2lnbmVkIGludCB2YWx1ZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD01MWQ2ZDc1ZWU2NTVjNzhhIGlucHV0PTZmZjQ1NTc4NzIxNjBlODhdKi8KIHsKLSAgICB1bnNpZ25lZCBpbnQgYWRsZXIzMnZhbCA9IDE7ICAvKiBhZGxlcjMyKDBMLCBaX05VTEwsIDApICovCi0gICAgUHlfYnVmZmVyIHBidWY7Ci0KLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqfEk6YWRsZXIzMiIsICZwYnVmLCAmYWRsZXIzMnZhbCkpCi0gICAgICAgIHJldHVybiBOVUxMOwogICAgIC8qIFJlbGVhc2luZyB0aGUgR0lMIGZvciB2ZXJ5IHNtYWxsIGJ1ZmZlcnMgaXMgaW5lZmZpY2llbnQKICAgICAgICBhbmQgbWF5IGxvd2VyIHBlcmZvcm1hbmNlICovCi0gICAgaWYgKHBidWYubGVuID4gMTAyNCo1KSB7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZiA9IHBidWYuYnVmOwotICAgICAgICBQeV9zc2l6ZV90IGxlbiA9IHBidWYubGVuOworICAgIGlmIChkYXRhLT5sZW4gPiAxMDI0KjUpIHsKKyAgICAgICAgdW5zaWduZWQgY2hhciAqYnVmID0gZGF0YS0+YnVmOworICAgICAgICBQeV9zc2l6ZV90IGxlbiA9IGRhdGEtPmxlbjsKIAogICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgICAgIC8qIEF2b2lkIHRydW5jYXRpb24gb2YgbGVuZ3RoIGZvciB2ZXJ5IGxhcmdlIGJ1ZmZlcnMuIGFkbGVyMzIoKSB0YWtlcwogICAgICAgICAgICBsZW5ndGggYXMgYW4gdW5zaWduZWQgaW50LCB3aGljaCBtYXkgYmUgbmFycm93ZXIgdGhhbiBQeV9zc2l6ZV90LiAqLwotICAgICAgICB3aGlsZSAobGVuID4gKHNpemVfdCkgVUlOVF9NQVgpIHsKLSAgICAgICAgICAgIGFkbGVyMzJ2YWwgPSBhZGxlcjMyKGFkbGVyMzJ2YWwsIGJ1ZiwgVUlOVF9NQVgpOworICAgICAgICB3aGlsZSAoKHNpemVfdClsZW4gPiBVSU5UX01BWCkgeworICAgICAgICAgICAgdmFsdWUgPSBhZGxlcjMyKHZhbHVlLCBidWYsIFVJTlRfTUFYKTsKICAgICAgICAgICAgIGJ1ZiArPSAoc2l6ZV90KSBVSU5UX01BWDsKICAgICAgICAgICAgIGxlbiAtPSAoc2l6ZV90KSBVSU5UX01BWDsKICAgICAgICAgfQotICAgICAgICBhZGxlcjMydmFsID0gYWRsZXIzMihhZGxlcjMydmFsLCBidWYsIGxlbik7CisgICAgICAgIHZhbHVlID0gYWRsZXIzMih2YWx1ZSwgYnVmLCAodW5zaWduZWQgaW50KWxlbik7CiAgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCiAgICAgfSBlbHNlIHsKLSAgICAgICAgYWRsZXIzMnZhbCA9IGFkbGVyMzIoYWRsZXIzMnZhbCwgcGJ1Zi5idWYsIHBidWYubGVuKTsKKyAgICAgICAgdmFsdWUgPSBhZGxlcjMyKHZhbHVlLCBkYXRhLT5idWYsICh1bnNpZ25lZCBpbnQpZGF0YS0+bGVuKTsKICAgICB9Ci0gICAgUHlCdWZmZXJfUmVsZWFzZSgmcGJ1Zik7Ci0gICAgcmV0dXJuIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nKGFkbGVyMzJ2YWwgJiAweGZmZmZmZmZmVSk7CisgICAgcmV0dXJuIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nKHZhbHVlICYgMHhmZmZmZmZmZlUpOwogfQogCi1QeURvY19TVFJWQVIoY3JjMzJfX2RvY19fLAotImNyYzMyKHN0cmluZ1ssIHN0YXJ0XSkgLS0gQ29tcHV0ZSBhIENSQy0zMiBjaGVja3N1bSBvZiBzdHJpbmcuXG4iCi0iXG4iCi0iQW4gb3B0aW9uYWwgc3RhcnRpbmcgdmFsdWUgY2FuIGJlIHNwZWNpZmllZC4gIFRoZSByZXR1cm5lZCBjaGVja3N1bSBpc1xuIgotImFuIGludGVnZXIuIik7CisvKltjbGluaWMgaW5wdXRdCit6bGliLmNyYzMyCisKKyAgICBkYXRhOiBQeV9idWZmZXIKKyAgICB2YWx1ZTogdW5zaWduZWRfaW50KGJpdHdpc2U9VHJ1ZSkgPSAwCisgICAgICAgIFN0YXJ0aW5nIHZhbHVlIG9mIHRoZSBjaGVja3N1bS4KKyAgICAvCisKK0NvbXB1dGUgYSBDUkMtMzIgY2hlY2tzdW0gb2YgZGF0YS4KKworVGhlIHJldHVybmVkIGNoZWNrc3VtIGlzIGFuIGludGVnZXIuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1QeVpsaWJfY3JjMzIoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoremxpYl9jcmMzMl9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZGF0YSwgdW5zaWduZWQgaW50IHZhbHVlKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWMxZTk4NmU3NGZlN2I2MjMgaW5wdXQ9MjZjM2VkNDMwZmEwMGI0Y10qLwogewotICAgIHVuc2lnbmVkIGludCBjcmMzMnZhbCA9IDA7ICAvKiBjcmMzMigwTCwgWl9OVUxMLCAwKSAqLwotICAgIFB5X2J1ZmZlciBwYnVmOwogICAgIGludCBzaWduZWRfdmFsOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ5KnxJOmNyYzMyIiwgJnBidWYsICZjcmMzMnZhbCkpCi0gICAgICAgIHJldHVybiBOVUxMOwogICAgIC8qIFJlbGVhc2luZyB0aGUgR0lMIGZvciB2ZXJ5IHNtYWxsIGJ1ZmZlcnMgaXMgaW5lZmZpY2llbnQKICAgICAgICBhbmQgbWF5IGxvd2VyIHBlcmZvcm1hbmNlICovCi0gICAgaWYgKHBidWYubGVuID4gMTAyNCo1KSB7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZiA9IHBidWYuYnVmOwotICAgICAgICBQeV9zc2l6ZV90IGxlbiA9IHBidWYubGVuOworICAgIGlmIChkYXRhLT5sZW4gPiAxMDI0KjUpIHsKKyAgICAgICAgdW5zaWduZWQgY2hhciAqYnVmID0gZGF0YS0+YnVmOworICAgICAgICBQeV9zc2l6ZV90IGxlbiA9IGRhdGEtPmxlbjsKIAogICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgICAgIC8qIEF2b2lkIHRydW5jYXRpb24gb2YgbGVuZ3RoIGZvciB2ZXJ5IGxhcmdlIGJ1ZmZlcnMuIGNyYzMyKCkgdGFrZXMKICAgICAgICAgICAgbGVuZ3RoIGFzIGFuIHVuc2lnbmVkIGludCwgd2hpY2ggbWF5IGJlIG5hcnJvd2VyIHRoYW4gUHlfc3NpemVfdC4gKi8KLSAgICAgICAgd2hpbGUgKGxlbiA+IChzaXplX3QpIFVJTlRfTUFYKSB7Ci0gICAgICAgICAgICBjcmMzMnZhbCA9IGNyYzMyKGNyYzMydmFsLCBidWYsIFVJTlRfTUFYKTsKKyAgICAgICAgd2hpbGUgKChzaXplX3QpbGVuID4gVUlOVF9NQVgpIHsKKyAgICAgICAgICAgIHZhbHVlID0gY3JjMzIodmFsdWUsIGJ1ZiwgVUlOVF9NQVgpOwogICAgICAgICAgICAgYnVmICs9IChzaXplX3QpIFVJTlRfTUFYOwogICAgICAgICAgICAgbGVuIC09IChzaXplX3QpIFVJTlRfTUFYOwogICAgICAgICB9Ci0gICAgICAgIHNpZ25lZF92YWwgPSBjcmMzMihjcmMzMnZhbCwgYnVmLCBsZW4pOworICAgICAgICBzaWduZWRfdmFsID0gY3JjMzIodmFsdWUsIGJ1ZiwgKHVuc2lnbmVkIGludClsZW4pOwogICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogICAgIH0gZWxzZSB7Ci0gICAgICAgIHNpZ25lZF92YWwgPSBjcmMzMihjcmMzMnZhbCwgcGJ1Zi5idWYsIHBidWYubGVuKTsKKyAgICAgICAgc2lnbmVkX3ZhbCA9IGNyYzMyKHZhbHVlLCBkYXRhLT5idWYsICh1bnNpZ25lZCBpbnQpZGF0YS0+bGVuKTsKICAgICB9Ci0gICAgUHlCdWZmZXJfUmVsZWFzZSgmcGJ1Zik7CiAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nKHNpZ25lZF92YWwgJiAweGZmZmZmZmZmVSk7CiB9CiAKIAogc3RhdGljIFB5TWV0aG9kRGVmIHpsaWJfbWV0aG9kc1tdID0KIHsKLSAgICB7ImFkbGVyMzIiLCAoUHlDRnVuY3Rpb24pUHlabGliX2FkbGVyMzIsIE1FVEhfVkFSQVJHUywKLSAgICAgICAgICAgICAgICBhZGxlcjMyX19kb2NfX30sCi0gICAgeyJjb21wcmVzcyIsIChQeUNGdW5jdGlvbilQeVpsaWJfY29tcHJlc3MsICBNRVRIX1ZBUkFSR1MsCi0gICAgICAgICAgICAgICAgIGNvbXByZXNzX19kb2NfX30sCi0gICAgeyJjb21wcmVzc29iaiIsIChQeUNGdW5jdGlvbilQeVpsaWJfY29tcHJlc3NvYmosIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLAotICAgICAgICAgICAgICAgICAgICBjb21wcmVzc29ial9fZG9jX199LAotICAgIHsiY3JjMzIiLCAoUHlDRnVuY3Rpb24pUHlabGliX2NyYzMyLCBNRVRIX1ZBUkFSR1MsCi0gICAgICAgICAgICAgIGNyYzMyX19kb2NfX30sCi0gICAgeyJkZWNvbXByZXNzIiwgKFB5Q0Z1bmN0aW9uKVB5WmxpYl9kZWNvbXByZXNzLCBNRVRIX1ZBUkFSR1MsCi0gICAgICAgICAgICAgICAgICAgZGVjb21wcmVzc19fZG9jX199LAotICAgIHsiZGVjb21wcmVzc29iaiIsIChQeUNGdW5jdGlvbilQeVpsaWJfZGVjb21wcmVzc29iaiwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsCi0gICAgICAgICAgICAgICAgICAgZGVjb21wcmVzc29ial9fZG9jX199LAorICAgIFpMSUJfQURMRVIzMl9NRVRIT0RERUYKKyAgICBaTElCX0NPTVBSRVNTX01FVEhPRERFRgorICAgIFpMSUJfQ09NUFJFU1NPQkpfTUVUSE9EREVGCisgICAgWkxJQl9DUkMzMl9NRVRIT0RERUYKKyAgICBaTElCX0RFQ09NUFJFU1NfTUVUSE9EREVGCisgICAgWkxJQl9ERUNPTVBSRVNTT0JKX01FVEhPRERFRgogICAgIHtOVUxMLCBOVUxMfQogfTsKIApAQCAtMTI2NSwyMCArMTM2NywyMSBAQAogICAgICAgICBQeV9JTkNSRUYoWmxpYkVycm9yKTsKICAgICAgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJlcnJvciIsIFpsaWJFcnJvcik7CiAgICAgfQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJNQVhfV0JJVFMiLCBNQVhfV0JJVFMpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJERUZMQVRFRCIsIERFRkxBVEVEKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiREVGX01FTV9MRVZFTCIsIERFRl9NRU1fTEVWRUwpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJaX0JFU1RfU1BFRUQiLCBaX0JFU1RfU1BFRUQpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJaX0JFU1RfQ09NUFJFU1NJT04iLCBaX0JFU1RfQ09NUFJFU1NJT04pOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJaX0RFRkFVTFRfQ09NUFJFU1NJT04iLCBaX0RFRkFVTFRfQ09NUFJFU1NJT04pOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJaX0ZJTFRFUkVEIiwgWl9GSUxURVJFRCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlpfSFVGRk1BTl9PTkxZIiwgWl9IVUZGTUFOX09OTFkpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJaX0RFRkFVTFRfU1RSQVRFR1kiLCBaX0RFRkFVTFRfU1RSQVRFR1kpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1BWF9XQklUUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgREVGTEFURUQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIERFRl9NRU1fTEVWRUwpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIERFRl9CVUZfU0laRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgWl9CRVNUX1NQRUVEKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBaX0JFU1RfQ09NUFJFU1NJT04pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFpfREVGQVVMVF9DT01QUkVTU0lPTik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgWl9GSUxURVJFRCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgWl9IVUZGTUFOX09OTFkpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFpfREVGQVVMVF9TVFJBVEVHWSk7CiAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiWl9GSU5JU0giLCBaX0ZJTklTSCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlpfTk9fRkxVU0giLCBaX05PX0ZMVVNIKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiWl9TWU5DX0ZMVVNIIiwgWl9TWU5DX0ZMVVNIKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiWl9GVUxMX0ZMVVNIIiwgWl9GVUxMX0ZMVVNIKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBaX0ZJTklTSCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgWl9OT19GTFVTSCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgWl9TWU5DX0ZMVVNIKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBaX0ZVTExfRkxVU0gpOwogCiAgICAgdmVyID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoWkxJQl9WRVJTSU9OKTsKICAgICBpZiAodmVyICE9IE5VTEwpCmRpZmYgLS1naXQgYS9PYmplY3RzL2Fic3RyYWN0LmMgYi9PYmplY3RzL2Fic3RyYWN0LmMKaW5kZXggMTI0ZTc2Ni4uNWU5NjEzOCAxMDA2NDQKLS0tIGEvT2JqZWN0cy9hYnN0cmFjdC5jCisrKyBiL09iamVjdHMvYWJzdHJhY3QuYwpAQCAtNjQsNDkgKzY0LDcyIEBACiB9CiAjZGVmaW5lIFB5T2JqZWN0X0xlbmd0aCBQeU9iamVjdF9TaXplCiAKK2ludAorX1B5T2JqZWN0X0hhc0xlbihQeU9iamVjdCAqbykgeworICAgIHJldHVybiAoUHlfVFlQRShvKS0+dHBfYXNfc2VxdWVuY2UgJiYgUHlfVFlQRShvKS0+dHBfYXNfc2VxdWVuY2UtPnNxX2xlbmd0aCkgfHwKKyAgICAgICAgKFB5X1RZUEUobyktPnRwX2FzX21hcHBpbmcgJiYgUHlfVFlQRShvKS0+dHBfYXNfbWFwcGluZy0+bXBfbGVuZ3RoKTsKK30KIAogLyogVGhlIGxlbmd0aCBoaW50IGZ1bmN0aW9uIHJldHVybnMgYSBub24tbmVnYXRpdmUgdmFsdWUgZnJvbSBvLl9fbGVuX18oKQotICAgb3Igby5fX2xlbmd0aF9oaW50X18oKS4gIElmIHRob3NlIG1ldGhvZHMgYXJlbid0IGZvdW5kIG9yIHJldHVybiBhIG5lZ2F0aXZlCi0gICB2YWx1ZSwgdGhlbiB0aGUgZGVmYXVsdHZhbHVlIGlzIHJldHVybmVkLiAgSWYgb25lIG9mIHRoZSBjYWxscyBmYWlscywKKyAgIG9yIG8uX19sZW5ndGhfaGludF9fKCkuIElmIHRob3NlIG1ldGhvZHMgYXJlbid0IGZvdW5kIHRoZSBkZWZhdWx0dmFsdWUgaXMKKyAgIHJldHVybmVkLiAgSWYgb25lIG9mIHRoZSBjYWxscyBmYWlscyB3aXRoIGFuIGV4Y2VwdGlvbiBvdGhlciB0aGFuIFR5cGVFcnJvcgogICAgdGhpcyBmdW5jdGlvbiByZXR1cm5zIC0xLgogKi8KIAogUHlfc3NpemVfdAotX1B5T2JqZWN0X0xlbmd0aEhpbnQoUHlPYmplY3QgKm8sIFB5X3NzaXplX3QgZGVmYXVsdHZhbHVlKQorUHlPYmplY3RfTGVuZ3RoSGludChQeU9iamVjdCAqbywgUHlfc3NpemVfdCBkZWZhdWx0dmFsdWUpCiB7CisgICAgUHlPYmplY3QgKmhpbnQsICpyZXN1bHQ7CisgICAgUHlfc3NpemVfdCByZXM7CiAgICAgX1B5X0lERU5USUZJRVIoX19sZW5ndGhfaGludF9fKTsKLSAgICBQeU9iamVjdCAqcm8sICpoaW50bWV0aDsKLSAgICBQeV9zc2l6ZV90IHJ2OwotCi0gICAgLyogdHJ5IG8uX19sZW5fXygpICovCi0gICAgcnYgPSBQeU9iamVjdF9TaXplKG8pOwotICAgIGlmIChydiA+PSAwKQotICAgICAgICByZXR1cm4gcnY7Ci0gICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKLSAgICAgICAgaWYgKCFQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX1R5cGVFcnJvcikpCi0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgaWYgKF9QeU9iamVjdF9IYXNMZW4obykpIHsKKyAgICAgICAgcmVzID0gUHlPYmplY3RfTGVuZ3RoKG8pOworICAgICAgICBpZiAocmVzIDwgMCAmJiBQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgICAgICBpZiAoIVB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfVHlwZUVycm9yKSkgeworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gcmVzOworICAgICAgICB9CiAgICAgfQotCi0gICAgLyogdHJ5IG8uX19sZW5ndGhfaGludF9fKCkgKi8KLSAgICBoaW50bWV0aCA9IF9QeU9iamVjdF9Mb29rdXBTcGVjaWFsKG8sICZQeUlkX19fbGVuZ3RoX2hpbnRfXyk7Ci0gICAgaWYgKGhpbnRtZXRoID09IE5VTEwpIHsKLSAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCisgICAgaGludCA9IF9QeU9iamVjdF9Mb29rdXBTcGVjaWFsKG8sICZQeUlkX19fbGVuZ3RoX2hpbnRfXyk7CisgICAgaWYgKGhpbnQgPT0gTlVMTCkgeworICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgewogICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gZGVmYXVsdHZhbHVlOwotICAgIH0KLSAgICBybyA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3MoaGludG1ldGgsIE5VTEwpOwotICAgIFB5X0RFQ1JFRihoaW50bWV0aCk7Ci0gICAgaWYgKHJvID09IE5VTEwpIHsKLSAgICAgICAgaWYgKCFQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX1R5cGVFcnJvcikpCi0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGRlZmF1bHR2YWx1ZTsKICAgICB9Ci0gICAgcnYgPSBQeUxvbmdfQ2hlY2socm8pID8gUHlMb25nX0FzU3NpemVfdChybykgOiBkZWZhdWx0dmFsdWU7Ci0gICAgUHlfREVDUkVGKHJvKTsKLSAgICByZXR1cm4gcnY7CisgICAgcmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyhoaW50LCBOVUxMKTsKKyAgICBQeV9ERUNSRUYoaGludCk7CisgICAgaWYgKHJlc3VsdCA9PSBOVUxMKSB7CisgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX1R5cGVFcnJvcikpIHsKKyAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgICAgICAgICByZXR1cm4gZGVmYXVsdHZhbHVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgZWxzZSBpZiAocmVzdWx0ID09IFB5X05vdEltcGxlbWVudGVkKSB7CisgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgICAgICByZXR1cm4gZGVmYXVsdHZhbHVlOworICAgIH0KKyAgICBpZiAoIVB5TG9uZ19DaGVjayhyZXN1bHQpKSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsICJfX2xlbmd0aF9oaW50X18gbXVzdCBiZSBhbiBpbnRlZ2VyLCBub3QgJS4xMDBzIiwKKyAgICAgICAgICAgIFB5X1RZUEUocmVzdWx0KS0+dHBfbmFtZSk7CisgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIHJlcyA9IFB5TG9uZ19Bc1NzaXplX3QocmVzdWx0KTsKKyAgICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICBpZiAocmVzIDwgMCAmJiBQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgaWYgKHJlcyA8IDApIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsICJfX2xlbmd0aF9oaW50X18oKSBzaG91bGQgcmV0dXJuID49IDAiKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICByZXR1cm4gcmVzOwogfQogCiBQeU9iamVjdCAqCkBAIC0yMDIsNyArMjI1LDcgQEAKIH0KIAogaW50Ci1QeU9iamVjdF9EZWxJdGVtU3RyaW5nKFB5T2JqZWN0ICpvLCBjaGFyICprZXkpCitQeU9iamVjdF9EZWxJdGVtU3RyaW5nKFB5T2JqZWN0ICpvLCBjb25zdCBjaGFyICprZXkpCiB7CiAgICAgUHlPYmplY3QgKm9rZXk7CiAgICAgaW50IHJldDsKQEAgLTIyNywyOCArMjUwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICoqYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgKmJ1ZmZlcl9sZW4pCiB7Ci0gICAgUHlCdWZmZXJQcm9jcyAqcGI7Ci0gICAgUHlfYnVmZmVyIHZpZXc7Ci0KLSAgICBpZiAob2JqID09IE5VTEwgfHwgYnVmZmVyID09IE5VTEwgfHwgYnVmZmVyX2xlbiA9PSBOVUxMKSB7Ci0gICAgICAgIG51bGxfZXJyb3IoKTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICBwYiA9IG9iai0+b2JfdHlwZS0+dHBfYXNfYnVmZmVyOwotICAgIGlmIChwYiA9PSBOVUxMIHx8IHBiLT5iZl9nZXRidWZmZXIgPT0gTlVMTCkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkIGJ5dGVzLCBieXRlYXJyYXkgIgotICAgICAgICAgICAgICAgICAgICAgICAgIm9yIGJ1ZmZlciBjb21wYXRpYmxlIG9iamVjdCIpOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotICAgIGlmICgoKnBiLT5iZl9nZXRidWZmZXIpKG9iaiwgJnZpZXcsIFB5QlVGX1NJTVBMRSkpIHJldHVybiAtMTsKLQotICAgICpidWZmZXIgPSB2aWV3LmJ1ZjsKLSAgICAqYnVmZmVyX2xlbiA9IHZpZXcubGVuOwotICAgIGlmIChwYi0+YmZfcmVsZWFzZWJ1ZmZlciAhPSBOVUxMKQotICAgICAgICAoKnBiLT5iZl9yZWxlYXNlYnVmZmVyKShvYmosICZ2aWV3KTsKLSAgICBQeV9YREVDUkVGKHZpZXcub2JqKTsKLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gUHlPYmplY3RfQXNSZWFkQnVmZmVyKG9iaiwgKGNvbnN0IHZvaWQgKiopYnVmZmVyLCBidWZmZXJfbGVuKTsKIH0KIAogaW50CkBAIC0yNzIsMjggKzI3NCwxOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICoqYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90ICpidWZmZXJfbGVuKQogewotICAgIFB5QnVmZmVyUHJvY3MgKnBiOwogICAgIFB5X2J1ZmZlciB2aWV3OwogCiAgICAgaWYgKG9iaiA9PSBOVUxMIHx8IGJ1ZmZlciA9PSBOVUxMIHx8IGJ1ZmZlcl9sZW4gPT0gTlVMTCkgewogICAgICAgICBudWxsX2Vycm9yKCk7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9Ci0gICAgcGIgPSBvYmotPm9iX3R5cGUtPnRwX2FzX2J1ZmZlcjsKLSAgICBpZiAocGIgPT0gTlVMTCB8fAotICAgICAgICBwYi0+YmZfZ2V0YnVmZmVyID09IE5VTEwpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJleHBlY3RlZCBhbiBvYmplY3Qgd2l0aCBhIGJ1ZmZlciBpbnRlcmZhY2UiKTsKKyAgICBpZiAoUHlPYmplY3RfR2V0QnVmZmVyKG9iaiwgJnZpZXcsIFB5QlVGX1NJTVBMRSkgIT0gMCkKICAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLQotICAgIGlmICgoKnBiLT5iZl9nZXRidWZmZXIpKG9iaiwgJnZpZXcsIFB5QlVGX1NJTVBMRSkpIHJldHVybiAtMTsKIAogICAgICpidWZmZXIgPSB2aWV3LmJ1ZjsKICAgICAqYnVmZmVyX2xlbiA9IHZpZXcubGVuOwotICAgIGlmIChwYi0+YmZfcmVsZWFzZWJ1ZmZlciAhPSBOVUxMKQotICAgICAgICAoKnBiLT5iZl9yZWxlYXNlYnVmZmVyKShvYmosICZ2aWV3KTsKLSAgICBQeV9YREVDUkVGKHZpZXcub2JqKTsKKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2aWV3KTsKICAgICByZXR1cm4gMDsKIH0KIApAQCAtMzE5LDkgKzMxMSw3IEBACiAKICAgICAqYnVmZmVyID0gdmlldy5idWY7CiAgICAgKmJ1ZmZlcl9sZW4gPSB2aWV3LmxlbjsKLSAgICBpZiAocGItPmJmX3JlbGVhc2VidWZmZXIgIT0gTlVMTCkKLSAgICAgICAgKCpwYi0+YmZfcmVsZWFzZWJ1ZmZlcikob2JqLCAmdmlldyk7Ci0gICAgUHlfWERFQ1JFRih2aWV3Lm9iaik7CisgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmlldyk7CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTMzMCwxMyArMzIwLDE1IEBACiBpbnQKIFB5T2JqZWN0X0dldEJ1ZmZlcihQeU9iamVjdCAqb2JqLCBQeV9idWZmZXIgKnZpZXcsIGludCBmbGFncykKIHsKLSAgICBpZiAoIVB5T2JqZWN0X0NoZWNrQnVmZmVyKG9iaikpIHsKKyAgICBQeUJ1ZmZlclByb2NzICpwYiA9IG9iai0+b2JfdHlwZS0+dHBfYXNfYnVmZmVyOworCisgICAgaWYgKHBiID09IE5VTEwgfHwgcGItPmJmX2dldGJ1ZmZlciA9PSBOVUxMKSB7CiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAiJyUuMTAwcycgZG9lcyBub3Qgc3VwcG9ydCB0aGUgYnVmZmVyIGludGVyZmFjZSIsCiAgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKG9iaiktPnRwX25hbWUpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQotICAgIHJldHVybiAoKihvYmotPm9iX3R5cGUtPnRwX2FzX2J1ZmZlci0+YmZfZ2V0YnVmZmVyKSkob2JqLCB2aWV3LCBmbGFncyk7CisgICAgcmV0dXJuICgqcGItPmJmX2dldGJ1ZmZlcikob2JqLCB2aWV3LCBmbGFncyk7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTQ2NSw3ICs0NTcsNyBAQAogCiAgICAgLyogT3RoZXJ3aXNlIGEgbW9yZSBlbGFib3JhdGUgc2NoZW1lIGlzIG5lZWRlZCAqLwogCi0gICAgLyogWFhYKG5ub3J3aXR6KTogbmVlZCB0byBjaGVjayBmb3Igb3ZlcmZsb3chICovCisgICAgLyogdmlldy0+bmRpbSA8PSA2NCAqLwogICAgIGluZGljZXMgPSAoUHlfc3NpemVfdCAqKVB5TWVtX01hbGxvYyhzaXplb2YoUHlfc3NpemVfdCkqKHZpZXctPm5kaW0pKTsKICAgICBpZiAoaW5kaWNlcyA9PSBOVUxMKSB7CiAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CkBAIC00ODcsMTAgKzQ3OSwxMCBAQAogICAgICAqLwogICAgIGVsZW1lbnRzID0gbGVuIC8gdmlldy0+aXRlbXNpemU7CiAgICAgd2hpbGUgKGVsZW1lbnRzLS0pIHsKLSAgICAgICAgYWRkb25lKHZpZXctPm5kaW0sIGluZGljZXMsIHZpZXctPnNoYXBlKTsKICAgICAgICAgcHRyID0gUHlCdWZmZXJfR2V0UG9pbnRlcih2aWV3LCBpbmRpY2VzKTsKICAgICAgICAgbWVtY3B5KHB0ciwgc3JjLCB2aWV3LT5pdGVtc2l6ZSk7CiAgICAgICAgIHNyYyArPSB2aWV3LT5pdGVtc2l6ZTsKKyAgICAgICAgYWRkb25lKHZpZXctPm5kaW0sIGluZGljZXMsIHZpZXctPnNoYXBlKTsKICAgICB9CiAKICAgICBQeU1lbV9GcmVlKGluZGljZXMpOwpAQCAtNjI5LDEwICs2MjEsMTQgQEAKIFB5QnVmZmVyX1JlbGVhc2UoUHlfYnVmZmVyICp2aWV3KQogewogICAgIFB5T2JqZWN0ICpvYmogPSB2aWV3LT5vYmo7Ci0gICAgaWYgKG9iaiAmJiBQeV9UWVBFKG9iaiktPnRwX2FzX2J1ZmZlciAmJiBQeV9UWVBFKG9iaiktPnRwX2FzX2J1ZmZlci0+YmZfcmVsZWFzZWJ1ZmZlcikKLSAgICAgICAgUHlfVFlQRShvYmopLT50cF9hc19idWZmZXItPmJmX3JlbGVhc2VidWZmZXIob2JqLCB2aWV3KTsKLSAgICBQeV9YREVDUkVGKG9iaik7CisgICAgUHlCdWZmZXJQcm9jcyAqcGI7CisgICAgaWYgKG9iaiA9PSBOVUxMKQorICAgICAgICByZXR1cm47CisgICAgcGIgPSBQeV9UWVBFKG9iaiktPnRwX2FzX2J1ZmZlcjsKKyAgICBpZiAocGIgJiYgcGItPmJmX3JlbGVhc2VidWZmZXIpCisgICAgICAgIHBiLT5iZl9yZWxlYXNlYnVmZmVyKG9iaiwgdmlldyk7CiAgICAgdmlldy0+b2JqID0gTlVMTDsKKyAgICBQeV9ERUNSRUYob2JqKTsKIH0KIAogUHlPYmplY3QgKgpAQCAtMTE2Miw2ICsxMTU4LDE1IEBACiAgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CisgICAgLyogSXNzdWUgIzE3NTc2OiB3YXJuIGlmICdyZXN1bHQnIG5vdCBvZiBleGFjdCB0eXBlIGludC4gKi8KKyAgICBpZiAoUHlFcnJfV2FybkZvcm1hdChQeUV4Y19EZXByZWNhdGlvbldhcm5pbmcsIDEsCisgICAgICAgICAgICAiX19pbmRleF9fIHJldHVybmVkIG5vbi1pbnQgKHR5cGUgJS4yMDBzKS4gICIKKyAgICAgICAgICAgICJUaGUgYWJpbGl0eSB0byByZXR1cm4gYW4gaW5zdGFuY2Ugb2YgYSBzdHJpY3Qgc3ViY2xhc3Mgb2YgaW50ICIKKyAgICAgICAgICAgICJpcyBkZXByZWNhdGVkLCBhbmQgbWF5IGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbiBvZiBQeXRob24uIiwKKyAgICAgICAgICAgIHJlc3VsdC0+b2JfdHlwZS0+dHBfbmFtZSkpIHsKKyAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0xMjE3LDggKzEyMjIsNyBAQAogewogICAgIFB5TnVtYmVyTWV0aG9kcyAqbTsKICAgICBQeU9iamVjdCAqdHJ1bmNfZnVuYzsKLSAgICBjb25zdCBjaGFyICpidWZmZXI7Ci0gICAgUHlfc3NpemVfdCBidWZmZXJfbGVuOworICAgIFB5X2J1ZmZlciB2aWV3OwogICAgIF9QeV9JREVOVElGSUVSKF9fdHJ1bmNfXyk7CiAKICAgICBpZiAobyA9PSBOVUxMKQpAQCAtMTIzOSw3ICsxMjQzLDcgQEAKICAgICAgICAgaWYgKHRydW5jYXRlZCA9PSBOVUxMIHx8IFB5TG9uZ19DaGVjayh0cnVuY2F0ZWQpKQogICAgICAgICAgICAgcmV0dXJuIHRydW5jYXRlZDsKICAgICAgICAgLyogX190cnVuY19fIGlzIHNwZWNpZmllZCB0byByZXR1cm4gYW4gSW50ZWdyYWwgdHlwZSwKLSAgICAgICAgICAgYnV0IGludCgpIG5lZWRzIHRvIHJldHVybiBhIGludC4gKi8KKyAgICAgICAgICAgYnV0IGludCgpIG5lZWRzIHRvIHJldHVybiBhbiBpbnQuICovCiAgICAgICAgIG0gPSB0cnVuY2F0ZWQtPm9iX3R5cGUtPnRwX2FzX251bWJlcjsKICAgICAgICAgaWYgKG0gPT0gTlVMTCB8fCBtLT5uYl9pbnQgPT0gTlVMTCkgewogICAgICAgICAgICAgUHlFcnJfRm9ybWF0KApAQCAtMTI1Niw2ICsxMjYwLDEwIEBACiAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCisgICAgaWYgKFB5VW5pY29kZV9DaGVjayhvKSkKKyAgICAgICAgLyogVGhlIGJlbG93IGNoZWNrIGlzIGRvbmUgaW4gUHlMb25nX0Zyb21Vbmljb2RlKCkuICovCisgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbVVuaWNvZGVPYmplY3QobywgMTApOworCiAgICAgaWYgKFB5Qnl0ZXNfQ2hlY2sobykpCiAgICAgICAgIC8qIG5lZWQgdG8gZG8gZXh0cmEgZXJyb3IgY2hlY2tpbmcgdGhhdCBQeUxvbmdfRnJvbVN0cmluZygpCiAgICAgICAgICAqIGRvZXNuJ3QgZG8uICBJbiBwYXJ0aWN1bGFyIGludCgnOVx4MDA1JykgbXVzdCByYWlzZSBhbgpAQCAtMTI2MywxNCArMTI3MSwyOSBAQAogICAgICAgICAgKi8KICAgICAgICAgcmV0dXJuIF9QeUxvbmdfRnJvbUJ5dGVzKFB5Qnl0ZXNfQVNfU1RSSU5HKG8pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlCeXRlc19HRVRfU0laRShvKSwgMTApOwotICAgIGlmIChQeVVuaWNvZGVfQ2hlY2sobykpCi0gICAgICAgIC8qIFRoZSBhYm92ZSBjaGVjayBpcyBkb25lIGluIFB5TG9uZ19Gcm9tVW5pY29kZSgpLiAqLwotICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21Vbmljb2RlT2JqZWN0KG8sIDEwKTsKLSAgICBpZiAoIVB5T2JqZWN0X0FzQ2hhckJ1ZmZlcihvLCAmYnVmZmVyLCAmYnVmZmVyX2xlbikpCi0gICAgICAgIHJldHVybiBfUHlMb25nX0Zyb21CeXRlcyhidWZmZXIsIGJ1ZmZlcl9sZW4sIDEwKTsKIAotICAgIHJldHVybiB0eXBlX2Vycm9yKCJpbnQoKSBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nIG9yIGEgIgotICAgICAgICAgICAgICAgICAgICAgICJudW1iZXIsIG5vdCAnJS4yMDBzJyIsIG8pOworICAgIGlmIChQeUJ5dGVBcnJheV9DaGVjayhvKSkKKyAgICAgICAgcmV0dXJuIF9QeUxvbmdfRnJvbUJ5dGVzKFB5Qnl0ZUFycmF5X0FTX1NUUklORyhvKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5Qnl0ZUFycmF5X0dFVF9TSVpFKG8pLCAxMCk7CisKKyAgICBpZiAoUHlPYmplY3RfR2V0QnVmZmVyKG8sICZ2aWV3LCBQeUJVRl9TSU1QTEUpID09IDApIHsKKyAgICAgICAgUHlPYmplY3QgKnJlc3VsdCwgKmJ5dGVzOworCisgICAgICAgIC8qIENvcHkgdG8gTlVMLXRlcm1pbmF0ZWQgYnVmZmVyLiAqLworICAgICAgICBieXRlcyA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoKGNvbnN0IGNoYXIgKil2aWV3LmJ1Ziwgdmlldy5sZW4pOworICAgICAgICBpZiAoYnl0ZXMgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmlldyk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICByZXN1bHQgPSBfUHlMb25nX0Zyb21CeXRlcyhQeUJ5dGVzX0FTX1NUUklORyhieXRlcyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5Qnl0ZXNfR0VUX1NJWkUoYnl0ZXMpLCAxMCk7CisgICAgICAgIFB5X0RFQ1JFRihieXRlcyk7CisgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZpZXcpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHJldHVybiB0eXBlX2Vycm9yKCJpbnQoKSBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nLCBhIGJ5dGVzLWxpa2Ugb2JqZWN0ICIKKyAgICAgICAgICAgICAgICAgICAgICAib3IgYSBudW1iZXIsIG5vdCAnJS4yMDBzJyIsIG8pOwogfQogCiBQeU9iamVjdCAqCkBAIC0xNjMxLDcgKzE2NTQsNyBAQAogICAgICAgICBQeV9JTkNSRUYodik7CiAgICAgICAgIHJldHVybiB2OwogICAgIH0KLSAgICBpZiAoUHlMaXN0X0NoZWNrKHYpKQorICAgIGlmIChQeUxpc3RfQ2hlY2tFeGFjdCh2KSkKICAgICAgICAgcmV0dXJuIFB5TGlzdF9Bc1R1cGxlKHYpOwogCiAgICAgLyogR2V0IGl0ZXJhdG9yLiAqLwpAQCAtMTY0MCw3ICsxNjYzLDcgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICAvKiBHdWVzcyByZXN1bHQgc2l6ZSBhbmQgYWxsb2NhdGUgc3BhY2UuICovCi0gICAgbiA9IF9QeU9iamVjdF9MZW5ndGhIaW50KHYsIDEwKTsKKyAgICBuID0gUHlPYmplY3RfTGVuZ3RoSGludCh2LCAxMCk7CiAgICAgaWYgKG4gPT0gLTEpCiAgICAgICAgIGdvdG8gRmFpbDsKICAgICByZXN1bHQgPSBQeVR1cGxlX05ldyhuKTsKQEAgLTE5MDAsNyArMTkyMyw3IEBACiAjZGVmaW5lIFB5TWFwcGluZ19MZW5ndGggUHlNYXBwaW5nX1NpemUKIAogUHlPYmplY3QgKgotUHlNYXBwaW5nX0dldEl0ZW1TdHJpbmcoUHlPYmplY3QgKm8sIGNoYXIgKmtleSkKK1B5TWFwcGluZ19HZXRJdGVtU3RyaW5nKFB5T2JqZWN0ICpvLCBjb25zdCBjaGFyICprZXkpCiB7CiAgICAgUHlPYmplY3QgKm9rZXksICpyOwogCkBAIC0xOTE2LDcgKzE5MzksNyBAQAogfQogCiBpbnQKLVB5TWFwcGluZ19TZXRJdGVtU3RyaW5nKFB5T2JqZWN0ICpvLCBjaGFyICprZXksIFB5T2JqZWN0ICp2YWx1ZSkKK1B5TWFwcGluZ19TZXRJdGVtU3RyaW5nKFB5T2JqZWN0ICpvLCBjb25zdCBjaGFyICprZXksIFB5T2JqZWN0ICp2YWx1ZSkKIHsKICAgICBQeU9iamVjdCAqb2tleTsKICAgICBpbnQgcjsKQEAgLTE5MzUsNyArMTk1OCw3IEBACiB9CiAKIGludAotUHlNYXBwaW5nX0hhc0tleVN0cmluZyhQeU9iamVjdCAqbywgY2hhciAqa2V5KQorUHlNYXBwaW5nX0hhc0tleVN0cmluZyhQeU9iamVjdCAqbywgY29uc3QgY2hhciAqa2V5KQogewogICAgIFB5T2JqZWN0ICp2OwogCkBAIC0yMDM0LDEwICsyMDU3LDE2IEBACiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgcmVzdWx0ID0gKCpjYWxsKShmdW5jLCBhcmcsIGt3KTsKICAgICAgICAgUHlfTGVhdmVSZWN1cnNpdmVDYWxsKCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gTlVMTCAmJiAhUHlFcnJfT2NjdXJyZWQoKSkKKyNpZmRlZiBOREVCVUcKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBOVUxMICYmICFQeUVycl9PY2N1cnJlZCgpKSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoCiAgICAgICAgICAgICAgICAgUHlFeGNfU3lzdGVtRXJyb3IsCiAgICAgICAgICAgICAgICAgIk5VTEwgcmVzdWx0IHdpdGhvdXQgZXJyb3IgaW4gUHlPYmplY3RfQ2FsbCIpOworICAgICAgICB9CisjZWxzZQorICAgICAgICBhc3NlcnQoKHJlc3VsdCAhPSBOVUxMICYmICFQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICAgICAgIHx8IChyZXN1bHQgPT0gTlVMTCAmJiBQeUVycl9PY2N1cnJlZCgpKSk7CisjZW5kaWYKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwgIiclLjIwMHMnIG9iamVjdCBpcyBub3QgY2FsbGFibGUiLApAQCAtMjA3Miw3ICsyMTAxLDcgQEAKIH0KIAogUHlPYmplY3QgKgotUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKFB5T2JqZWN0ICpjYWxsYWJsZSwgY2hhciAqZm9ybWF0LCAuLi4pCitQeU9iamVjdF9DYWxsRnVuY3Rpb24oUHlPYmplY3QgKmNhbGxhYmxlLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKIHsKICAgICB2YV9saXN0IHZhOwogICAgIFB5T2JqZWN0ICphcmdzOwpAQCAtMjA4NywxMiArMjExNiwxNCBAQAogICAgIH0KICAgICBlbHNlCiAgICAgICAgIGFyZ3MgPSBQeVR1cGxlX05ldygwKTsKKyAgICBpZiAoYXJncyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIHJldHVybiBjYWxsX2Z1bmN0aW9uX3RhaWwoY2FsbGFibGUsIGFyZ3MpOwogfQogCiBQeU9iamVjdCAqCi1fUHlPYmplY3RfQ2FsbEZ1bmN0aW9uX1NpemVUKFB5T2JqZWN0ICpjYWxsYWJsZSwgY2hhciAqZm9ybWF0LCAuLi4pCitfUHlPYmplY3RfQ2FsbEZ1bmN0aW9uX1NpemVUKFB5T2JqZWN0ICpjYWxsYWJsZSwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCiB7CiAgICAgdmFfbGlzdCB2YTsKICAgICBQeU9iamVjdCAqYXJnczsKQEAgLTIxMTIsNyArMjE0Myw3IEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCoKLWNhbGxtZXRob2QoUHlPYmplY3QqIGZ1bmMsIGNoYXIgKmZvcm1hdCwgdmFfbGlzdCB2YSwgaW50IGlzX3NpemVfdCkKK2NhbGxtZXRob2QoUHlPYmplY3QqIGZ1bmMsIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCB2YSwgaW50IGlzX3NpemVfdCkKIHsKICAgICBQeU9iamVjdCAqcmV0dmFsID0gTlVMTDsKICAgICBQeU9iamVjdCAqYXJnczsKQEAgLTIxNDEsNyArMjE3Miw3IEBACiB9CiAKIFB5T2JqZWN0ICoKLVB5T2JqZWN0X0NhbGxNZXRob2QoUHlPYmplY3QgKm8sIGNoYXIgKm5hbWUsIGNoYXIgKmZvcm1hdCwgLi4uKQorUHlPYmplY3RfQ2FsbE1ldGhvZChQeU9iamVjdCAqbywgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCiB7CiAgICAgdmFfbGlzdCB2YTsKICAgICBQeU9iamVjdCAqZnVuYyA9IE5VTEw7CkBAIC0yMTUxLDkgKzIxODIsOCBAQAogICAgICAgICByZXR1cm4gbnVsbF9lcnJvcigpOwogCiAgICAgZnVuYyA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcobywgbmFtZSk7Ci0gICAgaWYgKGZ1bmMgPT0gTlVMTCkgewotICAgICAgICByZXR1cm4gMDsKLSAgICB9CisgICAgaWYgKGZ1bmMgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICB2YV9zdGFydCh2YSwgZm9ybWF0KTsKICAgICByZXR2YWwgPSBjYWxsbWV0aG9kKGZ1bmMsIGZvcm1hdCwgdmEsIDApOwpAQCAtMjE2Miw3ICsyMTkyLDggQEAKIH0KIAogUHlPYmplY3QgKgotX1B5T2JqZWN0X0NhbGxNZXRob2RJZChQeU9iamVjdCAqbywgX1B5X0lkZW50aWZpZXIgKm5hbWUsIGNoYXIgKmZvcm1hdCwgLi4uKQorX1B5T2JqZWN0X0NhbGxNZXRob2RJZChQeU9iamVjdCAqbywgX1B5X0lkZW50aWZpZXIgKm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQogewogICAgIHZhX2xpc3QgdmE7CiAgICAgUHlPYmplY3QgKmZ1bmMgPSBOVUxMOwpAQCAtMjE3Miw5ICsyMjAzLDggQEAKICAgICAgICAgcmV0dXJuIG51bGxfZXJyb3IoKTsKIAogICAgIGZ1bmMgPSBfUHlPYmplY3RfR2V0QXR0cklkKG8sIG5hbWUpOwotICAgIGlmIChmdW5jID09IE5VTEwpIHsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQorICAgIGlmIChmdW5jID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgdmFfc3RhcnQodmEsIGZvcm1hdCk7CiAgICAgcmV0dmFsID0gY2FsbG1ldGhvZChmdW5jLCBmb3JtYXQsIHZhLCAwKTsKQEAgLTIxODMsNyArMjIxMyw4IEBACiB9CiAKIFB5T2JqZWN0ICoKLV9QeU9iamVjdF9DYWxsTWV0aG9kX1NpemVUKFB5T2JqZWN0ICpvLCBjaGFyICpuYW1lLCBjaGFyICpmb3JtYXQsIC4uLikKK19QeU9iamVjdF9DYWxsTWV0aG9kX1NpemVUKFB5T2JqZWN0ICpvLCBjb25zdCBjaGFyICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCiB7CiAgICAgdmFfbGlzdCB2YTsKICAgICBQeU9iamVjdCAqZnVuYyA9IE5VTEw7CkBAIC0yMTkzLDkgKzIyMjQsOCBAQAogICAgICAgICByZXR1cm4gbnVsbF9lcnJvcigpOwogCiAgICAgZnVuYyA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcobywgbmFtZSk7Ci0gICAgaWYgKGZ1bmMgPT0gTlVMTCkgewotICAgICAgICByZXR1cm4gMDsKLSAgICB9CisgICAgaWYgKGZ1bmMgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgdmFfc3RhcnQodmEsIGZvcm1hdCk7CiAgICAgcmV0dmFsID0gY2FsbG1ldGhvZChmdW5jLCBmb3JtYXQsIHZhLCAxKTsKICAgICB2YV9lbmQodmEpOwpAQCAtMjIwMyw3ICsyMjMzLDggQEAKIH0KIAogUHlPYmplY3QgKgotX1B5T2JqZWN0X0NhbGxNZXRob2RJZF9TaXplVChQeU9iamVjdCAqbywgX1B5X0lkZW50aWZpZXIgKm5hbWUsIGNoYXIgKmZvcm1hdCwgLi4uKQorX1B5T2JqZWN0X0NhbGxNZXRob2RJZF9TaXplVChQeU9iamVjdCAqbywgX1B5X0lkZW50aWZpZXIgKm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQogewogICAgIHZhX2xpc3QgdmE7CiAgICAgUHlPYmplY3QgKmZ1bmMgPSBOVUxMOwpAQCAtMjI3Myw3ICsyMzA0LDcgQEAKIH0KIAogUHlPYmplY3QgKgotX1B5T2JqZWN0X0NhbGxNZXRob2RPYmpJZEFyZ3MoUHlPYmplY3QgKmNhbGxhYmxlLAorX1B5T2JqZWN0X0NhbGxNZXRob2RJZE9iakFyZ3MoUHlPYmplY3QgKmNhbGxhYmxlLAogICAgICAgICBzdHJ1Y3QgX1B5X0lkZW50aWZpZXIgKm5hbWUsIC4uLikKIHsKICAgICBQeU9iamVjdCAqYXJncywgKnRtcDsKQEAgLTI2NDgsOCArMjY3OSw4IEBACiAgKiBOVUxMIHRlcm1pbmF0ZWQgc3RyaW5nIHBvaW50ZXJzIHdpdGggYSBOVUxMIGNoYXIqIHRlcm1pbmF0aW5nIHRoZSBhcnJheS4KICAqIChpZTogYW4gYXJndiBvciBlbnYgbGlzdCkKICAqCi0gKiBNZW1vcnkgYWxsb2NhdGVkIGZvciB0aGUgcmV0dXJuZWQgbGlzdCBpcyBhbGxvY2F0ZWQgdXNpbmcgbWFsbG9jKCkgYW5kIE1VU1QKLSAqIGJlIGZyZWVkIGJ5IHRoZSBjYWxsZXIgdXNpbmcgYSBmcmVlKCkgbG9vcCBvciBfUHlfRnJlZUNoYXJQQXJyYXkoKS4KKyAqIE1lbW9yeSBhbGxvY2F0ZWQgZm9yIHRoZSByZXR1cm5lZCBsaXN0IGlzIGFsbG9jYXRlZCB1c2luZyBQeU1lbV9NYWxsb2MoKQorICogYW5kIE1VU1QgYmUgZnJlZWQgYnkgX1B5X0ZyZWVDaGFyUEFycmF5KCkuCiAgKi8KIGNoYXIgKmNvbnN0ICoKIF9QeVNlcXVlbmNlX0J5dGVzVG9DaGFycEFycmF5KFB5T2JqZWN0KiBzZWxmKQpAQCAtMjY1Nyw2ICsyNjg4LDcgQEAKICAgICBjaGFyICoqYXJyYXk7CiAgICAgUHlfc3NpemVfdCBpLCBhcmdjOwogICAgIFB5T2JqZWN0ICppdGVtID0gTlVMTDsKKyAgICBQeV9zc2l6ZV90IHNpemU7CiAKICAgICBhcmdjID0gUHlTZXF1ZW5jZV9TaXplKHNlbGYpOwogICAgIGlmIChhcmdjID09IC0xKQpAQCAtMjY2OSw3ICsyNzAxLDcgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgYXJyYXkgPSBtYWxsb2MoKGFyZ2MgKyAxKSAqIHNpemVvZihjaGFyICopKTsKKyAgICBhcnJheSA9IFB5TWVtX01hbGxvYygoYXJnYyArIDEpICogc2l6ZW9mKGNoYXIgKikpOwogICAgIGlmIChhcnJheSA9PSBOVUxMKSB7CiAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMjY4OCwxMSArMjcyMCwxMyBAQAogICAgICAgICAgICAgYXJyYXlbaV0gPSBOVUxMOwogICAgICAgICAgICAgZ290byBmYWlsOwogICAgICAgICB9Ci0gICAgICAgIGFycmF5W2ldID0gc3RyZHVwKGRhdGEpOworICAgICAgICBzaXplID0gUHlCeXRlc19HRVRfU0laRShpdGVtKSArIDE7CisgICAgICAgIGFycmF5W2ldID0gUHlNZW1fTWFsbG9jKHNpemUpOwogICAgICAgICBpZiAoIWFycmF5W2ldKSB7CiAgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICAgICAgZ290byBmYWlsOwogICAgICAgICB9CisgICAgICAgIG1lbWNweShhcnJheVtpXSwgZGF0YSwgc2l6ZSk7CiAgICAgICAgIFB5X0RFQ1JFRihpdGVtKTsKICAgICB9CiAgICAgYXJyYXlbYXJnY10gPSBOVUxMOwpAQCAtMjcxMiw3ICsyNzQ2LDcgQEAKIHsKICAgICBQeV9zc2l6ZV90IGk7CiAgICAgZm9yIChpID0gMDsgYXJyYXlbaV0gIT0gTlVMTDsgKytpKSB7Ci0gICAgICAgIGZyZWUoYXJyYXlbaV0pOworICAgICAgICBQeU1lbV9GcmVlKGFycmF5W2ldKTsKICAgICB9Ci0gICAgZnJlZSgodm9pZCopYXJyYXkpOworICAgIFB5TWVtX0ZyZWUoKHZvaWQqKWFycmF5KTsKIH0KZGlmZiAtLWdpdCBhL09iamVjdHMvYnl0ZWFycmF5b2JqZWN0LmMgYi9PYmplY3RzL2J5dGVhcnJheW9iamVjdC5jCmluZGV4IDUwNjY3YTYuLjE1YzUyNWMgMTAwNjQ0Ci0tLSBhL09iamVjdHMvYnl0ZWFycmF5b2JqZWN0LmMKKysrIGIvT2JqZWN0cy9ieXRlYXJyYXlvYmplY3QuYwpAQCAtNzQsMjQgKzc0LDYgQEAKICAgICBvYmotPm9iX2V4cG9ydHMtLTsKIH0KIAotc3RhdGljIFB5X3NzaXplX3QKLV9nZXRidWZmZXIoUHlPYmplY3QgKm9iaiwgUHlfYnVmZmVyICp2aWV3KQotewotICAgIFB5QnVmZmVyUHJvY3MgKmJ1ZmZlciA9IFB5X1RZUEUob2JqKS0+dHBfYXNfYnVmZmVyOwotCi0gICAgaWYgKGJ1ZmZlciA9PSBOVUxMIHx8IGJ1ZmZlci0+YmZfZ2V0YnVmZmVyID09IE5VTEwpCi0gICAgewotICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgIlR5cGUgJS4xMDBzIGRvZXNuJ3Qgc3VwcG9ydCB0aGUgYnVmZmVyIEFQSSIsCi0gICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKG9iaiktPnRwX25hbWUpOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotCi0gICAgaWYgKGJ1ZmZlci0+YmZfZ2V0YnVmZmVyKG9iaiwgdmlldywgUHlCVUZfU0lNUExFKSA8IDApCi0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgcmV0dXJuIHZpZXctPmxlbjsKLX0KLQogc3RhdGljIGludAogX2NhbnJlc2l6ZShQeUJ5dGVBcnJheU9iamVjdCAqc2VsZikKIHsKQEAgLTE1MCw2ICsxMzIsNyBAQAogICAgIH0KICAgICBQeV9TSVpFKG5ldykgPSBzaXplOwogICAgIG5ldy0+b2JfYWxsb2MgPSBhbGxvYzsKKyAgICBuZXctPm9iX3N0YXJ0ID0gbmV3LT5vYl9ieXRlczsKICAgICBuZXctPm9iX2V4cG9ydHMgPSAwOwogCiAgICAgcmV0dXJuIChQeU9iamVjdCAqKW5ldzsKQEAgLTE3NCw1MSArMTU3LDgwIEBACiB9CiAKIGludAotUHlCeXRlQXJyYXlfUmVzaXplKFB5T2JqZWN0ICpzZWxmLCBQeV9zc2l6ZV90IHNpemUpCitQeUJ5dGVBcnJheV9SZXNpemUoUHlPYmplY3QgKnNlbGYsIFB5X3NzaXplX3QgcmVxdWVzdGVkX3NpemUpCiB7CiAgICAgdm9pZCAqc3ZhbDsKLSAgICBQeV9zc2l6ZV90IGFsbG9jID0gKChQeUJ5dGVBcnJheU9iamVjdCAqKXNlbGYpLT5vYl9hbGxvYzsKKyAgICBQeUJ5dGVBcnJheU9iamVjdCAqb2JqID0gKChQeUJ5dGVBcnJheU9iamVjdCAqKXNlbGYpOworICAgIC8qIEFsbCBjb21wdXRhdGlvbnMgYXJlIGRvbmUgdW5zaWduZWQgdG8gYXZvaWQgaW50ZWdlciBvdmVyZmxvd3MKKyAgICAgICAoc2VlIGlzc3VlICMyMjMzNSkuICovCisgICAgc2l6ZV90IGFsbG9jID0gKHNpemVfdCkgb2JqLT5vYl9hbGxvYzsKKyAgICBzaXplX3QgbG9naWNhbF9vZmZzZXQgPSAoc2l6ZV90KSAob2JqLT5vYl9zdGFydCAtIG9iai0+b2JfYnl0ZXMpOworICAgIHNpemVfdCBzaXplID0gKHNpemVfdCkgcmVxdWVzdGVkX3NpemU7CiAKICAgICBhc3NlcnQoc2VsZiAhPSBOVUxMKTsKICAgICBhc3NlcnQoUHlCeXRlQXJyYXlfQ2hlY2soc2VsZikpOwotICAgIGFzc2VydChzaXplID49IDApOworICAgIGFzc2VydChsb2dpY2FsX29mZnNldCA8PSBhbGxvYyk7CisgICAgYXNzZXJ0KHJlcXVlc3RlZF9zaXplID49IDApOwogCi0gICAgaWYgKHNpemUgPT0gUHlfU0laRShzZWxmKSkgeworICAgIGlmIChyZXF1ZXN0ZWRfc2l6ZSA9PSBQeV9TSVpFKHNlbGYpKSB7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICBpZiAoIV9jYW5yZXNpemUoKFB5Qnl0ZUFycmF5T2JqZWN0ICopc2VsZikpIHsKKyAgICBpZiAoIV9jYW5yZXNpemUob2JqKSkgewogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCi0gICAgaWYgKHNpemUgPCBhbGxvYyAvIDIpIHsKLSAgICAgICAgLyogTWFqb3IgZG93bnNpemU7IHJlc2l6ZSBkb3duIHRvIGV4YWN0IHNpemUgKi8KLSAgICAgICAgYWxsb2MgPSBzaXplICsgMTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoc2l6ZSA8IGFsbG9jKSB7Ci0gICAgICAgIC8qIFdpdGhpbiBhbGxvY2F0ZWQgc2l6ZTsgcXVpY2sgZXhpdCAqLwotICAgICAgICBQeV9TSVpFKHNlbGYpID0gc2l6ZTsKLSAgICAgICAgKChQeUJ5dGVBcnJheU9iamVjdCAqKXNlbGYpLT5vYl9ieXRlc1tzaXplXSA9ICdcMCc7IC8qIFRyYWlsaW5nIG51bGwgKi8KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIGVsc2UgaWYgKHNpemUgPD0gYWxsb2MgKiAxLjEyNSkgewotICAgICAgICAvKiBNb2RlcmF0ZSB1cHNpemU7IG92ZXJhbGxvY2F0ZSBzaW1pbGFyIHRvIGxpc3RfcmVzaXplKCkgKi8KLSAgICAgICAgYWxsb2MgPSBzaXplICsgKHNpemUgPj4gMykgKyAoc2l6ZSA8IDkgPyAzIDogNik7CisgICAgaWYgKHNpemUgKyBsb2dpY2FsX29mZnNldCArIDEgPD0gYWxsb2MpIHsKKyAgICAgICAgLyogQ3VycmVudCBidWZmZXIgaXMgbGFyZ2UgZW5vdWdoIHRvIGhvc3QgdGhlIHJlcXVlc3RlZCBzaXplLAorICAgICAgICAgICBkZWNpZGUgb24gYSBzdHJhdGVneS4gKi8KKyAgICAgICAgaWYgKHNpemUgPCBhbGxvYyAvIDIpIHsKKyAgICAgICAgICAgIC8qIE1ham9yIGRvd25zaXplOyByZXNpemUgZG93biB0byBleGFjdCBzaXplICovCisgICAgICAgICAgICBhbGxvYyA9IHNpemUgKyAxOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLyogTWlub3IgZG93bnNpemU7IHF1aWNrIGV4aXQgKi8KKyAgICAgICAgICAgIFB5X1NJWkUoc2VsZikgPSBzaXplOworICAgICAgICAgICAgUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHNlbGYpW3NpemVdID0gJ1wwJzsgLyogVHJhaWxpbmcgbnVsbCAqLworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIC8qIE1ham9yIHVwc2l6ZTsgcmVzaXplIHVwIHRvIGV4YWN0IHNpemUgKi8KLSAgICAgICAgYWxsb2MgPSBzaXplICsgMTsKKyAgICAgICAgLyogTmVlZCBncm93aW5nLCBkZWNpZGUgb24gYSBzdHJhdGVneSAqLworICAgICAgICBpZiAoc2l6ZSA8PSBhbGxvYyAqIDEuMTI1KSB7CisgICAgICAgICAgICAvKiBNb2RlcmF0ZSB1cHNpemU7IG92ZXJhbGxvY2F0ZSBzaW1pbGFyIHRvIGxpc3RfcmVzaXplKCkgKi8KKyAgICAgICAgICAgIGFsbG9jID0gc2l6ZSArIChzaXplID4+IDMpICsgKHNpemUgPCA5ID8gMyA6IDYpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLyogTWFqb3IgdXBzaXplOyByZXNpemUgdXAgdG8gZXhhY3Qgc2l6ZSAqLworICAgICAgICAgICAgYWxsb2MgPSBzaXplICsgMTsKKyAgICAgICAgfQogICAgIH0KLQotICAgIHN2YWwgPSBQeU9iamVjdF9SZWFsbG9jKCgoUHlCeXRlQXJyYXlPYmplY3QgKilzZWxmKS0+b2JfYnl0ZXMsIGFsbG9jKTsKLSAgICBpZiAoc3ZhbCA9PSBOVUxMKSB7CisgICAgaWYgKGFsbG9jID4gUFlfU1NJWkVfVF9NQVgpIHsKICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIAotICAgICgoUHlCeXRlQXJyYXlPYmplY3QgKilzZWxmKS0+b2JfYnl0ZXMgPSBzdmFsOworICAgIGlmIChsb2dpY2FsX29mZnNldCA+IDApIHsKKyAgICAgICAgc3ZhbCA9IFB5T2JqZWN0X01hbGxvYyhhbGxvYyk7CisgICAgICAgIGlmIChzdmFsID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgbWVtY3B5KHN2YWwsIFB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZWxmKSwKKyAgICAgICAgICAgICAgIFB5X01JTihyZXF1ZXN0ZWRfc2l6ZSwgUHlfU0laRShzZWxmKSkpOworICAgICAgICBQeU9iamVjdF9GcmVlKG9iai0+b2JfYnl0ZXMpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgc3ZhbCA9IFB5T2JqZWN0X1JlYWxsb2Mob2JqLT5vYl9ieXRlcywgYWxsb2MpOworICAgICAgICBpZiAoc3ZhbCA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgfQorCisgICAgb2JqLT5vYl9ieXRlcyA9IG9iai0+b2Jfc3RhcnQgPSBzdmFsOwogICAgIFB5X1NJWkUoc2VsZikgPSBzaXplOwotICAgICgoUHlCeXRlQXJyYXlPYmplY3QgKilzZWxmKS0+b2JfYWxsb2MgPSBhbGxvYzsKLSAgICAoKFB5Qnl0ZUFycmF5T2JqZWN0ICopc2VsZiktPm9iX2J5dGVzW3NpemVdID0gJ1wwJzsgLyogVHJhaWxpbmcgbnVsbCBieXRlICovCisgICAgb2JqLT5vYl9hbGxvYyA9IGFsbG9jOworICAgIG9iai0+b2JfYnl0ZXNbc2l6ZV0gPSAnXDAnOyAvKiBUcmFpbGluZyBudWxsIGJ5dGUgKi8KIAogICAgIHJldHVybiAwOwogfQpAQCAtMjMyLDggKzI0NCw4IEBACiAKICAgICB2YS5sZW4gPSAtMTsKICAgICB2Yi5sZW4gPSAtMTsKLSAgICBpZiAoX2dldGJ1ZmZlcihhLCAmdmEpIDwgMCAgfHwKLSAgICAgICAgX2dldGJ1ZmZlcihiLCAmdmIpIDwgMCkgeworICAgIGlmIChQeU9iamVjdF9HZXRCdWZmZXIoYSwgJnZhLCBQeUJVRl9TSU1QTEUpICE9IDAgfHwKKyAgICAgICAgUHlPYmplY3RfR2V0QnVmZmVyKGIsICZ2YiwgUHlCVUZfU0lNUExFKSAhPSAwKSB7CiAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLCAiY2FuJ3QgY29uY2F0ICUuMTAwcyB0byAlLjEwMHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUoYSktPnRwX25hbWUsIFB5X1RZUEUoYiktPnRwX25hbWUpOwogICAgICAgICAgICAgZ290byBkb25lOwpAQCAtMjc0LDcgKzI4Niw3IEBACiAgICAgUHlfc3NpemVfdCBzaXplOwogICAgIFB5X2J1ZmZlciB2bzsKIAotICAgIGlmIChfZ2V0YnVmZmVyKG90aGVyLCAmdm8pIDwgMCkgeworICAgIGlmIChQeU9iamVjdF9HZXRCdWZmZXIob3RoZXIsICZ2bywgUHlCVUZfU0lNUExFKSAhPSAwKSB7CiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsICJjYW4ndCBjb25jYXQgJS4xMDBzIHRvICUuMTAwcyIsCiAgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKG90aGVyKS0+dHBfbmFtZSwgUHlfVFlQRShzZWxmKS0+dHBfbmFtZSk7CiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMjg2LDE1ICsyOTgsMTEgQEAKICAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmdm8pOwogICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKICAgICB9Ci0gICAgaWYgKHNpemUgPCBzZWxmLT5vYl9hbGxvYykgewotICAgICAgICBQeV9TSVpFKHNlbGYpID0gc2l6ZTsKLSAgICAgICAgc2VsZi0+b2JfYnl0ZXNbUHlfU0laRShzZWxmKV0gPSAnXDAnOyAvKiBUcmFpbGluZyBudWxsIGJ5dGUgKi8KLSAgICB9Ci0gICAgZWxzZSBpZiAoUHlCeXRlQXJyYXlfUmVzaXplKChQeU9iamVjdCAqKXNlbGYsIHNpemUpIDwgMCkgeworICAgIGlmIChQeUJ5dGVBcnJheV9SZXNpemUoKFB5T2JqZWN0ICopc2VsZiwgc2l6ZSkgPCAwKSB7CiAgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZvKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIG1lbWNweShzZWxmLT5vYl9ieXRlcyArIG15c2l6ZSwgdm8uYnVmLCB2by5sZW4pOworICAgIG1lbWNweShQeUJ5dGVBcnJheV9BU19TVFJJTkcoc2VsZikgKyBteXNpemUsIHZvLmJ1Ziwgdm8ubGVuKTsKICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2byk7CiAgICAgUHlfSU5DUkVGKHNlbGYpOwogICAgIHJldHVybiAoUHlPYmplY3QgKilzZWxmOwpAQCAtMzMxLDYgKzMzOSw3IEBACiB7CiAgICAgUHlfc3NpemVfdCBteXNpemU7CiAgICAgUHlfc3NpemVfdCBzaXplOworICAgIGNoYXIgKmJ1ZjsKIAogICAgIGlmIChjb3VudCA8IDApCiAgICAgICAgIGNvdW50ID0gMDsKQEAgLTMzOCwxOSArMzQ3LDE2IEBACiAgICAgaWYgKGNvdW50ID4gMCAmJiBteXNpemUgPiBQWV9TU0laRV9UX01BWCAvIGNvdW50KQogICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKICAgICBzaXplID0gbXlzaXplICogY291bnQ7Ci0gICAgaWYgKHNpemUgPCBzZWxmLT5vYl9hbGxvYykgewotICAgICAgICBQeV9TSVpFKHNlbGYpID0gc2l6ZTsKLSAgICAgICAgc2VsZi0+b2JfYnl0ZXNbUHlfU0laRShzZWxmKV0gPSAnXDAnOyAvKiBUcmFpbGluZyBudWxsIGJ5dGUgKi8KLSAgICB9Ci0gICAgZWxzZSBpZiAoUHlCeXRlQXJyYXlfUmVzaXplKChQeU9iamVjdCAqKXNlbGYsIHNpemUpIDwgMCkKKyAgICBpZiAoUHlCeXRlQXJyYXlfUmVzaXplKChQeU9iamVjdCAqKXNlbGYsIHNpemUpIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKKyAgICBidWYgPSBQeUJ5dGVBcnJheV9BU19TVFJJTkcoc2VsZik7CiAgICAgaWYgKG15c2l6ZSA9PSAxKQotICAgICAgICBtZW1zZXQoc2VsZi0+b2JfYnl0ZXMsIHNlbGYtPm9iX2J5dGVzWzBdLCBzaXplKTsKKyAgICAgICAgbWVtc2V0KGJ1ZiwgYnVmWzBdLCBzaXplKTsKICAgICBlbHNlIHsKICAgICAgICAgUHlfc3NpemVfdCBpOwogICAgICAgICBmb3IgKGkgPSAxOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAgICAgIG1lbWNweShzZWxmLT5vYl9ieXRlcyArIGkqbXlzaXplLCBzZWxmLT5vYl9ieXRlcywgbXlzaXplKTsKKyAgICAgICAgICAgIG1lbWNweShidWYgKyBpKm15c2l6ZSwgYnVmLCBteXNpemUpOwogICAgIH0KIAogICAgIFB5X0lOQ1JFRihzZWxmKTsKQEAgLTM2Niw3ICszNzIsNyBAQAogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfSW5kZXhFcnJvciwgImJ5dGVhcnJheSBpbmRleCBvdXQgb2YgcmFuZ2UiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoKHVuc2lnbmVkIGNoYXIpKHNlbGYtPm9iX2J5dGVzW2ldKSk7CisgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZygodW5zaWduZWQgY2hhcikoUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHNlbGYpW2ldKSk7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC0zODUsNyArMzkxLDcgQEAKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19JbmRleEVycm9yLCAiYnl0ZWFycmF5IGluZGV4IG91dCBvZiByYW5nZSIpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZygodW5zaWduZWQgY2hhcikoc2VsZi0+b2JfYnl0ZXNbaV0pKTsKKyAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZygodW5zaWduZWQgY2hhcikoUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHNlbGYpW2ldKSk7CiAgICAgfQogICAgIGVsc2UgaWYgKFB5U2xpY2VfQ2hlY2soaW5kZXgpKSB7CiAgICAgICAgIFB5X3NzaXplX3Qgc3RhcnQsIHN0b3AsIHN0ZXAsIHNsaWNlbGVuZ3RoLCBjdXIsIGk7CkBAIC0zOTgsOCArNDA0LDggQEAKICAgICAgICAgaWYgKHNsaWNlbGVuZ3RoIDw9IDApCiAgICAgICAgICAgICByZXR1cm4gUHlCeXRlQXJyYXlfRnJvbVN0cmluZ0FuZFNpemUoIiIsIDApOwogICAgICAgICBlbHNlIGlmIChzdGVwID09IDEpIHsKLSAgICAgICAgICAgIHJldHVybiBQeUJ5dGVBcnJheV9Gcm9tU3RyaW5nQW5kU2l6ZShzZWxmLT5vYl9ieXRlcyArIHN0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xpY2VsZW5ndGgpOworICAgICAgICAgICAgcmV0dXJuIFB5Qnl0ZUFycmF5X0Zyb21TdHJpbmdBbmRTaXplKAorICAgICAgICAgICAgICAgIFB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZWxmKSArIHN0YXJ0LCBzbGljZWxlbmd0aCk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBjaGFyICpzb3VyY2VfYnVmID0gUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHNlbGYpOwpAQCAtNDI1LDEwICs0MzEsOTQgQEAKIH0KIAogc3RhdGljIGludAorYnl0ZWFycmF5X3NldHNsaWNlX2xpbmVhcihQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBsbywgUHlfc3NpemVfdCBoaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYnl0ZXMsIFB5X3NzaXplX3QgYnl0ZXNfbGVuKQoreworICAgIFB5X3NzaXplX3QgYXZhaWwgPSBoaSAtIGxvOworICAgIGNoYXIgKmJ1ZiA9IFB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZWxmKTsKKyAgICBQeV9zc2l6ZV90IGdyb3d0aCA9IGJ5dGVzX2xlbiAtIGF2YWlsOworICAgIGludCByZXMgPSAwOworICAgIGFzc2VydChhdmFpbCA+PSAwKTsKKworICAgIGlmIChncm93dGggPCAwKSB7CisgICAgICAgIGlmICghX2NhbnJlc2l6ZShzZWxmKSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKworICAgICAgICBpZiAobG8gPT0gMCkgeworICAgICAgICAgICAgLyogU2hyaW5rIHRoZSBidWZmZXIgYnkgYWR2YW5jaW5nIGl0cyBsb2dpY2FsIHN0YXJ0ICovCisgICAgICAgICAgICBzZWxmLT5vYl9zdGFydCAtPSBncm93dGg7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAwICAgbG8gICAgICAgICAgICAgICBoaSAgICAgICAgICAgICBvbGRfc2l6ZQorICAgICAgICAgICAgICB8ICAgfDwtLS0tYXZhaWwtLS0tLT58PC0tLS0tdGFpbC0tLS0tLT58CisgICAgICAgICAgICAgIHwgICAgICB8PC1ieXRlc19sZW4tPnw8LS0tLS10YWlsLS0tLS0tPnwKKyAgICAgICAgICAgICAgMCAgICBuZXdfbG8gICAgICAgICBuZXdfaGkgICAgICAgICAgbmV3X3NpemUKKyAgICAgICAgICAgICovCisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAwICAgbG8gICAgICAgICAgICAgICBoaSAgICAgICAgICAgICAgIG9sZF9zaXplCisgICAgICAgICAgICAgIHwgICB8PC0tLS1hdmFpbC0tLS0tPnw8LS0tLS10b21vdmUtLS0tLS0+fAorICAgICAgICAgICAgICB8ICAgfDwtYnl0ZXNfbGVuLT58PC0tLS0tdG9tb3ZlLS0tLS0tPnwKKyAgICAgICAgICAgICAgMCAgIGxvICAgICAgICAgbmV3X2hpICAgICAgICAgICAgICBuZXdfc2l6ZQorICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG1lbW1vdmUoYnVmICsgbG8gKyBieXRlc19sZW4sIGJ1ZiArIGhpLAorICAgICAgICAgICAgICAgICAgICBQeV9TSVpFKHNlbGYpIC0gaGkpOworICAgICAgICB9CisgICAgICAgIGlmIChQeUJ5dGVBcnJheV9SZXNpemUoKFB5T2JqZWN0ICopc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9TSVpFKHNlbGYpICsgZ3Jvd3RoKSA8IDApIHsKKyAgICAgICAgICAgIC8qIElzc3VlICMxOTU3ODogSGFuZGxpbmcgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUgaGVyZSBpcworICAgICAgICAgICAgICAgdHJpY2t5IGhlcmUgYmVjYXVzZSB0aGUgYnl0ZWFycmF5IG9iamVjdCBoYXMgYWxyZWFkeSBiZWVuCisgICAgICAgICAgICAgICBtb2RpZmllZC4gRGVwZW5kaW5nIG9uIGdyb3d0aCBhbmQgbG8sIHRoZSBiZWhhdmlvdXIgaXMKKyAgICAgICAgICAgICAgIGRpZmZlcmVudC4KKworICAgICAgICAgICAgICAgSWYgZ3Jvd3RoIDwgMCBhbmQgbG8gIT0gMCwgdGhlIG9wZXJhdGlvbiBpcyBjb21wbGV0ZWQsIGJ1dCBhCisgICAgICAgICAgICAgICBNZW1vcnlFcnJvciBpcyBzdGlsbCByYWlzZWQgYW5kIHRoZSBtZW1vcnkgYmxvY2sgaXMgbm90CisgICAgICAgICAgICAgICBzaHJpbmtlZC4gT3RoZXJ3aXNlLCB0aGUgYnl0ZWFycmF5IGlzIHJlc3RvcmVkIGluIGl0cyBwcmV2aW91cworICAgICAgICAgICAgICAgc3RhdGUgYW5kIGEgTWVtb3J5RXJyb3IgaXMgcmFpc2VkLiAqLworICAgICAgICAgICAgaWYgKGxvID09IDApIHsKKyAgICAgICAgICAgICAgICBzZWxmLT5vYl9zdGFydCArPSBncm93dGg7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLyogbWVtbW92ZSgpIHJlbW92ZWQgYnl0ZXMsIHRoZSBieXRlYXJyYXkgb2JqZWN0IGNhbm5vdCBiZQorICAgICAgICAgICAgICAgcmVzdG9yZWQgaW4gaXRzIHByZXZpb3VzIHN0YXRlLiAqLworICAgICAgICAgICAgUHlfU0laRShzZWxmKSArPSBncm93dGg7CisgICAgICAgICAgICByZXMgPSAtMTsKKyAgICAgICAgfQorICAgICAgICBidWYgPSBQeUJ5dGVBcnJheV9BU19TVFJJTkcoc2VsZik7CisgICAgfQorICAgIGVsc2UgaWYgKGdyb3d0aCA+IDApIHsKKyAgICAgICAgaWYgKFB5X1NJWkUoc2VsZikgPiAoUHlfc3NpemVfdClQWV9TU0laRV9UX01BWCAtIGdyb3d0aCkgeworICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChQeUJ5dGVBcnJheV9SZXNpemUoKFB5T2JqZWN0ICopc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9TSVpFKHNlbGYpICsgZ3Jvd3RoKSA8IDApIHsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBidWYgPSBQeUJ5dGVBcnJheV9BU19TVFJJTkcoc2VsZik7CisgICAgICAgIC8qIE1ha2UgdGhlIHBsYWNlIGZvciB0aGUgYWRkaXRpb25hbCBieXRlcyAqLworICAgICAgICAvKgorICAgICAgICAgIDAgICBsbyAgICAgICAgaGkgICAgICAgICAgICAgICBvbGRfc2l6ZQorICAgICAgICAgIHwgICB8PC1hdmFpbC0+fDwtLS0tLXRvbW92ZS0tLS0tLT58CisgICAgICAgICAgfCAgIHw8LS0tYnl0ZXNfbGVuLS0+fDwtLS0tLXRvbW92ZS0tLS0tLT58CisgICAgICAgICAgMCAgIGxvICAgICAgICAgICAgbmV3X2hpICAgICAgICAgICAgICBuZXdfc2l6ZQorICAgICAgICAgKi8KKyAgICAgICAgbWVtbW92ZShidWYgKyBsbyArIGJ5dGVzX2xlbiwgYnVmICsgaGksCisgICAgICAgICAgICAgICAgUHlfU0laRShzZWxmKSAtIGxvIC0gYnl0ZXNfbGVuKTsKKyAgICB9CisKKyAgICBpZiAoYnl0ZXNfbGVuID4gMCkKKyAgICAgICAgbWVtY3B5KGJ1ZiArIGxvLCBieXRlcywgYnl0ZXNfbGVuKTsKKyAgICByZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW50CiBieXRlYXJyYXlfc2V0c2xpY2UoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5X3NzaXplX3QgbG8sIFB5X3NzaXplX3QgaGksCiAgICAgICAgICAgICAgICBQeU9iamVjdCAqdmFsdWVzKQogewotICAgIFB5X3NzaXplX3QgYXZhaWwsIG5lZWRlZDsKKyAgICBQeV9zc2l6ZV90IG5lZWRlZDsKICAgICB2b2lkICpieXRlczsKICAgICBQeV9idWZmZXIgdmJ5dGVzOwogICAgIGludCByZXMgPSAwOwpAQCAtNDUwLDE0ICs1NDAsMTQgQEAKICAgICAgICAgbmVlZGVkID0gMDsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgICAgICBpZiAoX2dldGJ1ZmZlcih2YWx1ZXMsICZ2Ynl0ZXMpIDwgMCkgewotICAgICAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNhbid0IHNldCBieXRlYXJyYXkgc2xpY2UgZnJvbSAlLjEwMHMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRSh2YWx1ZXMpLT50cF9uYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbmVlZGVkID0gdmJ5dGVzLmxlbjsKLSAgICAgICAgICAgIGJ5dGVzID0gdmJ5dGVzLmJ1ZjsKKyAgICAgICAgaWYgKFB5T2JqZWN0X0dldEJ1ZmZlcih2YWx1ZXMsICZ2Ynl0ZXMsIFB5QlVGX1NJTVBMRSkgIT0gMCkgeworICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiY2FuJ3Qgc2V0IGJ5dGVhcnJheSBzbGljZSBmcm9tICUuMTAwcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRSh2YWx1ZXMpLT50cF9uYW1lKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBuZWVkZWQgPSB2Ynl0ZXMubGVuOworICAgICAgICBieXRlcyA9IHZieXRlcy5idWY7CiAgICAgfQogCiAgICAgaWYgKGxvIDwgMCkKQEAgLTQ2Nyw1MCArNTU3LDkgQEAKICAgICBpZiAoaGkgPiBQeV9TSVpFKHNlbGYpKQogICAgICAgICBoaSA9IFB5X1NJWkUoc2VsZik7CiAKLSAgICBhdmFpbCA9IGhpIC0gbG87Ci0gICAgaWYgKGF2YWlsIDwgMCkKLSAgICAgICAgbG8gPSBoaSA9IGF2YWlsID0gMDsKLQotICAgIGlmIChhdmFpbCAhPSBuZWVkZWQpIHsKLSAgICAgICAgaWYgKGF2YWlsID4gbmVlZGVkKSB7Ci0gICAgICAgICAgICBpZiAoIV9jYW5yZXNpemUoc2VsZikpIHsKLSAgICAgICAgICAgICAgICByZXMgPSAtMTsKLSAgICAgICAgICAgICAgICBnb3RvIGZpbmlzaDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgIDAgICBsbyAgICAgICAgICAgICAgIGhpICAgICAgICAgICAgICAgb2xkX3NpemUKLSAgICAgICAgICAgICAgfCAgIHw8LS0tLWF2YWlsLS0tLS0+fDwtLS0tLXRvbW92ZS0tLS0tLT58Ci0gICAgICAgICAgICAgIHwgICB8PC1uZWVkZWQtPnw8LS0tLS10b21vdmUtLS0tLS0+fAotICAgICAgICAgICAgICAwICAgbG8gICAgICBuZXdfaGkgICAgICAgICAgICAgIG5ld19zaXplCi0gICAgICAgICAgICAqLwotICAgICAgICAgICAgbWVtbW92ZShzZWxmLT5vYl9ieXRlcyArIGxvICsgbmVlZGVkLCBzZWxmLT5vYl9ieXRlcyArIGhpLAotICAgICAgICAgICAgICAgICAgICBQeV9TSVpFKHNlbGYpIC0gaGkpOwotICAgICAgICB9Ci0gICAgICAgIC8qIFhYWChubm9yd2l0eik6IG5lZWQgdG8gdmVyaWZ5IHRoaXMgY2FuJ3Qgb3ZlcmZsb3chICovCi0gICAgICAgIGlmIChQeUJ5dGVBcnJheV9SZXNpemUoKFB5T2JqZWN0ICopc2VsZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X1NJWkUoc2VsZikgKyBuZWVkZWQgLSBhdmFpbCkgPCAwKSB7Ci0gICAgICAgICAgICAgICAgcmVzID0gLTE7Ci0gICAgICAgICAgICAgICAgZ290byBmaW5pc2g7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGF2YWlsIDwgbmVlZGVkKSB7Ci0gICAgICAgICAgICAvKgotICAgICAgICAgICAgICAwICAgbG8gICAgICAgIGhpICAgICAgICAgICAgICAgb2xkX3NpemUKLSAgICAgICAgICAgICAgfCAgIHw8LWF2YWlsLT58PC0tLS0tdG9tb3ZlLS0tLS0tPnwKLSAgICAgICAgICAgICAgfCAgIHw8LS0tLW5lZWRlZC0tLS0+fDwtLS0tLXRvbW92ZS0tLS0tLT58Ci0gICAgICAgICAgICAgIDAgICBsbyAgICAgICAgICAgIG5ld19oaSAgICAgICAgICAgICAgbmV3X3NpemUKLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgbWVtbW92ZShzZWxmLT5vYl9ieXRlcyArIGxvICsgbmVlZGVkLCBzZWxmLT5vYl9ieXRlcyArIGhpLAotICAgICAgICAgICAgICAgICAgICBQeV9TSVpFKHNlbGYpIC0gbG8gLSBuZWVkZWQpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG5lZWRlZCA+IDApCi0gICAgICAgIG1lbWNweShzZWxmLT5vYl9ieXRlcyArIGxvLCBieXRlcywgbmVlZGVkKTsKLQotCi0gZmluaXNoOgorICAgIHJlcyA9IGJ5dGVhcnJheV9zZXRzbGljZV9saW5lYXIoc2VsZiwgbG8sIGhpLCBieXRlcywgbmVlZGVkKTsKICAgICBpZiAodmJ5dGVzLmxlbiAhPSAtMSkKLSAgICAgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZieXRlcyk7CisgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZieXRlcyk7CiAgICAgcmV0dXJuIHJlczsKIH0KIApAQCAtNTMzLDcgKzU4Miw3IEBACiAgICAgaWYgKCFfZ2V0Ynl0ZXZhbHVlKHZhbHVlLCAmaXZhbCkpCiAgICAgICAgIHJldHVybiAtMTsKIAotICAgIHNlbGYtPm9iX2J5dGVzW2ldID0gaXZhbDsKKyAgICBQeUJ5dGVBcnJheV9BU19TVFJJTkcoc2VsZilbaV0gPSBpdmFsOwogICAgIHJldHVybiAwOwogfQogCkBAIC01NDEsNyArNTkwLDggQEAKIGJ5dGVhcnJheV9hc3Nfc3Vic2NyaXB0KFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqaW5kZXgsIFB5T2JqZWN0ICp2YWx1ZXMpCiB7CiAgICAgUHlfc3NpemVfdCBzdGFydCwgc3RvcCwgc3RlcCwgc2xpY2VsZW4sIG5lZWRlZDsKLSAgICBjaGFyICpieXRlczsKKyAgICBjaGFyICpidWYsICpieXRlczsKKyAgICBidWYgPSBQeUJ5dGVBcnJheV9BU19TVFJJTkcoc2VsZik7CiAKICAgICBpZiAoUHlJbmRleF9DaGVjayhpbmRleCkpIHsKICAgICAgICAgUHlfc3NpemVfdCBpID0gUHlOdW1iZXJfQXNTc2l6ZV90KGluZGV4LCBQeUV4Y19JbmRleEVycm9yKTsKQEAgLTU2OCw3ICs2MTgsNyBAQAogICAgICAgICAgICAgaW50IGl2YWw7CiAgICAgICAgICAgICBpZiAoIV9nZXRieXRldmFsdWUodmFsdWVzLCAmaXZhbCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgc2VsZi0+b2JfYnl0ZXNbaV0gPSAoY2hhcilpdmFsOworICAgICAgICAgICAgYnVmW2ldID0gKGNoYXIpaXZhbDsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAgICAgfQpAQCAtNjA2LDcgKzY1Niw3IEBACiAgICAgfQogICAgIGVsc2UgewogICAgICAgICBhc3NlcnQoUHlCeXRlQXJyYXlfQ2hlY2sodmFsdWVzKSk7Ci0gICAgICAgIGJ5dGVzID0gKChQeUJ5dGVBcnJheU9iamVjdCAqKXZhbHVlcyktPm9iX2J5dGVzOworICAgICAgICBieXRlcyA9IFB5Qnl0ZUFycmF5X0FTX1NUUklORyh2YWx1ZXMpOwogICAgICAgICBuZWVkZWQgPSBQeV9TSVpFKHZhbHVlcyk7CiAgICAgfQogICAgIC8qIE1ha2Ugc3VyZSBiWzU6Ml0gPSAuLi4gaW5zZXJ0cyBiZWZvcmUgNSwgbm90IGJlZm9yZSAyLiAqLwpAQCAtNjE0LDM4ICs2NjQsNyBAQAogICAgICAgICAoc3RlcCA+IDAgJiYgc3RhcnQgPiBzdG9wKSkKICAgICAgICAgc3RvcCA9IHN0YXJ0OwogICAgIGlmIChzdGVwID09IDEpIHsKLSAgICAgICAgaWYgKHNsaWNlbGVuICE9IG5lZWRlZCkgewotICAgICAgICAgICAgaWYgKCFfY2FucmVzaXplKHNlbGYpKQotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIGlmIChzbGljZWxlbiA+IG5lZWRlZCkgewotICAgICAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgICAgICAwICAgc3RhcnQgICAgICAgICAgIHN0b3AgICAgICAgICAgICAgIG9sZF9zaXplCi0gICAgICAgICAgICAgICAgICB8ICAgfDwtLS1zbGljZWxlbi0tLT58PC0tLS0tdG9tb3ZlLS0tLS0tPnwKLSAgICAgICAgICAgICAgICAgIHwgICB8PC1uZWVkZWQtPnw8LS0tLS10b21vdmUtLS0tLS0+fAotICAgICAgICAgICAgICAgICAgMCAgIGxvICAgICAgbmV3X2hpICAgICAgICAgICAgICBuZXdfc2l6ZQotICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgbWVtbW92ZShzZWxmLT5vYl9ieXRlcyArIHN0YXJ0ICsgbmVlZGVkLCBzZWxmLT5vYl9ieXRlcyArIHN0b3AsCi0gICAgICAgICAgICAgICAgICAgICAgICBQeV9TSVpFKHNlbGYpIC0gc3RvcCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoUHlCeXRlQXJyYXlfUmVzaXplKChQeU9iamVjdCAqKXNlbGYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfU0laRShzZWxmKSArIG5lZWRlZCAtIHNsaWNlbGVuKSA8IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgaWYgKHNsaWNlbGVuIDwgbmVlZGVkKSB7Ci0gICAgICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAgICAgIDAgICBsbyAgICAgICAgaGkgICAgICAgICAgICAgICBvbGRfc2l6ZQotICAgICAgICAgICAgICAgICAgfCAgIHw8LWF2YWlsLT58PC0tLS0tdG9tb3ZlLS0tLS0tPnwKLSAgICAgICAgICAgICAgICAgIHwgICB8PC0tLS1uZWVkZWQtLS0tPnw8LS0tLS10b21vdmUtLS0tLS0+fAotICAgICAgICAgICAgICAgICAgMCAgIGxvICAgICAgICAgICAgbmV3X2hpICAgICAgICAgICAgICBuZXdfc2l6ZQotICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgIG1lbW1vdmUoc2VsZi0+b2JfYnl0ZXMgKyBzdGFydCArIG5lZWRlZCwgc2VsZi0+b2JfYnl0ZXMgKyBzdG9wLAotICAgICAgICAgICAgICAgICAgICAgICAgUHlfU0laRShzZWxmKSAtIHN0YXJ0IC0gbmVlZGVkKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChuZWVkZWQgPiAwKQotICAgICAgICAgICAgbWVtY3B5KHNlbGYtPm9iX2J5dGVzICsgc3RhcnQsIGJ5dGVzLCBuZWVkZWQpOwotCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gYnl0ZWFycmF5X3NldHNsaWNlX2xpbmVhcihzZWxmLCBzdGFydCwgc3RvcCwgYnl0ZXMsIG5lZWRlZCk7CiAgICAgfQogICAgIGVsc2UgewogICAgICAgICBpZiAobmVlZGVkID09IDApIHsKQEAgLTY3MiwxNCArNjkxLDE0IEBACiAgICAgICAgICAgICAgICAgaWYgKGN1ciArIHN0ZXAgPj0gKHNpemVfdClQeUJ5dGVBcnJheV9HRVRfU0laRShzZWxmKSkKICAgICAgICAgICAgICAgICAgICAgbGltID0gUHlCeXRlQXJyYXlfR0VUX1NJWkUoc2VsZikgLSBjdXIgLSAxOwogCi0gICAgICAgICAgICAgICAgbWVtbW92ZShzZWxmLT5vYl9ieXRlcyArIGN1ciAtIGksCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLT5vYl9ieXRlcyArIGN1ciArIDEsIGxpbSk7CisgICAgICAgICAgICAgICAgbWVtbW92ZShidWYgKyBjdXIgLSBpLAorICAgICAgICAgICAgICAgICAgICAgICAgYnVmICsgY3VyICsgMSwgbGltKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8qIE1vdmUgdGhlIHRhaWwgb2YgdGhlIGJ5dGVzLCBpbiBvbmUgY2h1bmsgKi8KICAgICAgICAgICAgIGN1ciA9IHN0YXJ0ICsgKHNpemVfdClzbGljZWxlbipzdGVwOwogICAgICAgICAgICAgaWYgKGN1ciA8IChzaXplX3QpUHlCeXRlQXJyYXlfR0VUX1NJWkUoc2VsZikpIHsKLSAgICAgICAgICAgICAgICBtZW1tb3ZlKHNlbGYtPm9iX2J5dGVzICsgY3VyIC0gc2xpY2VsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLT5vYl9ieXRlcyArIGN1ciwKKyAgICAgICAgICAgICAgICBtZW1tb3ZlKGJ1ZiArIGN1ciAtIHNsaWNlbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgYnVmICsgY3VyLAogICAgICAgICAgICAgICAgICAgICAgICAgUHlCeXRlQXJyYXlfR0VUX1NJWkUoc2VsZikgLSBjdXIpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKFB5Qnl0ZUFycmF5X1Jlc2l6ZSgoUHlPYmplY3QgKilzZWxmLApAQCAtNzAxLDcgKzcyMCw3IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZm9yIChjdXIgPSBzdGFydCwgaSA9IDA7IGkgPCBzbGljZWxlbjsgY3VyICs9IHN0ZXAsIGkrKykKLSAgICAgICAgICAgICAgICBzZWxmLT5vYl9ieXRlc1tjdXJdID0gYnl0ZXNbaV07CisgICAgICAgICAgICAgICAgYnVmW2N1cl0gPSBieXRlc1tpXTsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAgICAgfQpAQCAtNzgxLDcgKzgwMCw3IEBACiAgICAgICAgIGlmIChjb3VudCA+IDApIHsKICAgICAgICAgICAgIGlmIChQeUJ5dGVBcnJheV9SZXNpemUoKFB5T2JqZWN0ICopc2VsZiwgY291bnQpKQogICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIG1lbXNldChzZWxmLT5vYl9ieXRlcywgMCwgY291bnQpOworICAgICAgICAgICAgbWVtc2V0KFB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZWxmKSwgMCwgY291bnQpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KQEAgLTc5NCw3ICs4MTMsOCBAQAogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICBzaXplID0gdmlldy5sZW47CiAgICAgICAgIGlmIChQeUJ5dGVBcnJheV9SZXNpemUoKFB5T2JqZWN0ICopc2VsZiwgc2l6ZSkgPCAwKSBnb3RvIGZhaWw7Ci0gICAgICAgIGlmIChQeUJ1ZmZlcl9Ub0NvbnRpZ3VvdXMoc2VsZi0+b2JfYnl0ZXMsICZ2aWV3LCBzaXplLCAnQycpIDwgMCkKKyAgICAgICAgaWYgKFB5QnVmZmVyX1RvQ29udGlndW91cyhQeUJ5dGVBcnJheV9BU19TVFJJTkcoc2VsZiksCisgICAgICAgICAgICAmdmlldywgc2l6ZSwgJ0MnKSA8IDApCiAgICAgICAgICAgICBnb3RvIGZhaWw7CiAgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZpZXcpOwogICAgICAgICByZXR1cm4gMDsKQEAgLTgzNCwxMSArODU0LDEzIEBACiAgICAgICAgICAgICBnb3RvIGVycm9yOwogCiAgICAgICAgIC8qIEFwcGVuZCB0aGUgYnl0ZSAqLwotICAgICAgICBpZiAoUHlfU0laRShzZWxmKSA8IHNlbGYtPm9iX2FsbG9jKQorICAgICAgICBpZiAoUHlfU0laRShzZWxmKSArIDEgPCBzZWxmLT5vYl9hbGxvYykgewogICAgICAgICAgICAgUHlfU0laRShzZWxmKSsrOworICAgICAgICAgICAgUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHNlbGYpW1B5X1NJWkUoc2VsZildID0gJ1wwJzsKKyAgICAgICAgfQogICAgICAgICBlbHNlIGlmIChQeUJ5dGVBcnJheV9SZXNpemUoKFB5T2JqZWN0ICopc2VsZiwgUHlfU0laRShzZWxmKSsxKSA8IDApCiAgICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICBzZWxmLT5vYl9ieXRlc1tQeV9TSVpFKHNlbGYpLTFdID0gdmFsdWU7CisgICAgICAgIFB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZWxmKVtQeV9TSVpFKHNlbGYpLTFdID0gdmFsdWU7CiAgICAgfQogCiAgICAgLyogQ2xlYW4gdXAgYW5kIHJldHVybiBzdWNjZXNzICovCkBAIC04NjIsOSArODg0LDEwIEBACiAgICAgLyogMTUgPT0gc3RybGVuKHF1b3RlX3ByZWZpeCkgKyAyICsgc3RybGVuKHF1b3RlX3Bvc3RmaXgpICsgMSAqLwogICAgIHNpemVfdCBuZXdzaXplOwogICAgIFB5T2JqZWN0ICp2OwotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgaTsKLSAgICByZWdpc3RlciBjaGFyIGM7Ci0gICAgcmVnaXN0ZXIgY2hhciAqcDsKKyAgICBQeV9zc2l6ZV90IGk7CisgICAgY2hhciAqYnl0ZXM7CisgICAgY2hhciBjOworICAgIGNoYXIgKnA7CiAgICAgaW50IHF1b3RlOwogICAgIGNoYXIgKnRlc3QsICpzdGFydDsKICAgICBjaGFyICpidWZmZXI7CkBAIC04OTksMTEgKzkyMiwxMiBAQAogICAgICAgICAqcCsrID0gKnF1b3RlX3ByZWZpeCsrOwogICAgICpwKysgPSBxdW90ZTsKIAorICAgIGJ5dGVzID0gUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHNlbGYpOwogICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgICAvKiBUaGVyZSdzIGF0IGxlYXN0IGVub3VnaCByb29tIGZvciBhIGhleCBlc2NhcGUKICAgICAgICAgICAgYW5kIGEgY2xvc2luZyBxdW90ZS4gKi8KICAgICAgICAgYXNzZXJ0KG5ld3NpemUgLSAocCAtIGJ1ZmZlcikgPj0gNSk7Ci0gICAgICAgIGMgPSBzZWxmLT5vYl9ieXRlc1tpXTsKKyAgICAgICAgYyA9IGJ5dGVzW2ldOwogICAgICAgICBpZiAoYyA9PSAnXCcnIHx8IGMgPT0gJ1xcJykKICAgICAgICAgICAgICpwKysgPSAnXFwnLCAqcCsrID0gYzsKICAgICAgICAgZWxzZSBpZiAoYyA9PSAnXHQnKQpAQCAtOTUyLDEzICs5NzYsMTcgQEAKICAgICBQeV9idWZmZXIgc2VsZl9ieXRlcywgb3RoZXJfYnl0ZXM7CiAgICAgUHlPYmplY3QgKnJlczsKICAgICBQeV9zc2l6ZV90IG1pbnNpemU7Ci0gICAgaW50IGNtcDsKKyAgICBpbnQgY21wLCByYzsKIAogICAgIC8qIEJ5dGVzIGNhbiBiZSBjb21wYXJlZCB0byBhbnl0aGluZyB0aGF0IHN1cHBvcnRzIHRoZSAoYmluYXJ5KQogICAgICAgIGJ1ZmZlciBBUEkuICBFeGNlcHQgdGhhdCBhIGNvbXBhcmlzb24gd2l0aCBVbmljb2RlIGlzIGFsd2F5cyBhbgogICAgICAgIGVycm9yLCBldmVuIGlmIHRoZSBjb21wYXJpc29uIGlzIGZvciBlcXVhbGl0eS4gKi8KLSAgICBpZiAoUHlPYmplY3RfSXNJbnN0YW5jZShzZWxmLCAoUHlPYmplY3QqKSZQeVVuaWNvZGVfVHlwZSkgfHwKLSAgICAgICAgUHlPYmplY3RfSXNJbnN0YW5jZShvdGhlciwgKFB5T2JqZWN0KikmUHlVbmljb2RlX1R5cGUpKSB7CisgICAgcmMgPSBQeU9iamVjdF9Jc0luc3RhbmNlKHNlbGYsIChQeU9iamVjdCopJlB5VW5pY29kZV9UeXBlKTsKKyAgICBpZiAoIXJjKQorICAgICAgICByYyA9IFB5T2JqZWN0X0lzSW5zdGFuY2Uob3RoZXIsIChQeU9iamVjdCopJlB5VW5pY29kZV9UeXBlKTsKKyAgICBpZiAocmMgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAocmMpIHsKICAgICAgICAgaWYgKFB5X0J5dGVzV2FybmluZ0ZsYWcgJiYgKG9wID09IFB5X0VRIHx8IG9wID09IFB5X05FKSkgewogICAgICAgICAgICAgaWYgKFB5RXJyX1dhcm5FeChQeUV4Y19CeXRlc1dhcm5pbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNvbXBhcmlzb24gYmV0d2VlbiBieXRlYXJyYXkgYW5kIHN0cmluZyIsIDEpKQpAQCAtOTY4LDE4ICs5OTYsMTggQEAKICAgICAgICAgUHlfUkVUVVJOX05PVElNUExFTUVOVEVEOwogICAgIH0KIAotICAgIHNlbGZfc2l6ZSA9IF9nZXRidWZmZXIoc2VsZiwgJnNlbGZfYnl0ZXMpOwotICAgIGlmIChzZWxmX3NpemUgPCAwKSB7CisgICAgaWYgKFB5T2JqZWN0X0dldEJ1ZmZlcihzZWxmLCAmc2VsZl9ieXRlcywgUHlCVUZfU0lNUExFKSAhPSAwKSB7CiAgICAgICAgIFB5RXJyX0NsZWFyKCk7CiAgICAgICAgIFB5X1JFVFVSTl9OT1RJTVBMRU1FTlRFRDsKICAgICB9CisgICAgc2VsZl9zaXplID0gc2VsZl9ieXRlcy5sZW47CiAKLSAgICBvdGhlcl9zaXplID0gX2dldGJ1ZmZlcihvdGhlciwgJm90aGVyX2J5dGVzKTsKLSAgICBpZiAob3RoZXJfc2l6ZSA8IDApIHsKKyAgICBpZiAoUHlPYmplY3RfR2V0QnVmZmVyKG90aGVyLCAmb3RoZXJfYnl0ZXMsIFB5QlVGX1NJTVBMRSkgIT0gMCkgewogICAgICAgICBQeUVycl9DbGVhcigpOwogICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZzZWxmX2J5dGVzKTsKICAgICAgICAgUHlfUkVUVVJOX05PVElNUExFTUVOVEVEOwogICAgIH0KKyAgICBvdGhlcl9zaXplID0gb3RoZXJfYnl0ZXMubGVuOwogCiAgICAgaWYgKHNlbGZfc2l6ZSAhPSBvdGhlcl9zaXplICYmIChvcCA9PSBQeV9FUSB8fCBvcCA9PSBQeV9ORSkpIHsKICAgICAgICAgLyogU2hvcnRjdXQ6IGlmIHRoZSBsZW5ndGhzIGRpZmZlciwgdGhlIG9iamVjdHMgZGlmZmVyICovCkBAIC0xMDM4LDYgKzEwNjYsNyBAQAogI2RlZmluZSBGQVNUU0VBUkNIIGZhc3RzZWFyY2gKICNkZWZpbmUgU1RSSU5HTElCKEYpIHN0cmluZ2xpYl8jI0YKICNkZWZpbmUgU1RSSU5HTElCX0NIQVIgY2hhcgorI2RlZmluZSBTVFJJTkdMSUJfU0laRU9GX0NIQVIgMQogI2RlZmluZSBTVFJJTkdMSUJfTEVOIFB5Qnl0ZUFycmF5X0dFVF9TSVpFCiAjZGVmaW5lIFNUUklOR0xJQl9TVFIgUHlCeXRlQXJyYXlfQVNfU1RSSU5HCiAjZGVmaW5lIFNUUklOR0xJQl9ORVcgUHlCeXRlQXJyYXlfRnJvbVN0cmluZ0FuZFNpemUKQEAgLTEwNDksNiArMTA3OCw3IEBACiAjaW5jbHVkZSAic3RyaW5nbGliL2Zhc3RzZWFyY2guaCIKICNpbmNsdWRlICJzdHJpbmdsaWIvY291bnQuaCIKICNpbmNsdWRlICJzdHJpbmdsaWIvZmluZC5oIgorI2luY2x1ZGUgInN0cmluZ2xpYi9qb2luLmgiCiAjaW5jbHVkZSAic3RyaW5nbGliL3BhcnRpdGlvbi5oIgogI2luY2x1ZGUgInN0cmluZ2xpYi9zcGxpdC5oIgogI2luY2x1ZGUgInN0cmluZ2xpYi9jdHlwZS5oIgpAQCAtMTA4OSw3ICsxMTE5LDcgQEAKICAgICAgICAgcmV0dXJuIC0yOwogCiAgICAgaWYgKHN1Ym9iaikgewotICAgICAgICBpZiAoX2dldGJ1ZmZlcihzdWJvYmosICZzdWJidWYpIDwgMCkKKyAgICAgICAgaWYgKFB5T2JqZWN0X0dldEJ1ZmZlcihzdWJvYmosICZzdWJidWYsIFB5QlVGX1NJTVBMRSkgIT0gMCkKICAgICAgICAgICAgIHJldHVybiAtMjsKIAogICAgICAgICBzdWIgPSBzdWJidWYuYnVmOwpAQCAtMTE1Nyw3ICsxMTg3LDcgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBpZiAoc3ViX29iaikgewotICAgICAgICBpZiAoX2dldGJ1ZmZlcihzdWJfb2JqLCAmdnN1YikgPCAwKQorICAgICAgICBpZiAoUHlPYmplY3RfR2V0QnVmZmVyKHN1Yl9vYmosICZ2c3ViLCBQeUJVRl9TSU1QTEUpICE9IDApCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgICAgICBzdWIgPSB2c3ViLmJ1ZjsKQEAgLTEyNzIsNyArMTMwMiw3IEBACiAgICAgICAgIFB5X2J1ZmZlciB2YXJnOwogICAgICAgICBQeV9zc2l6ZV90IHBvczsKICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKLSAgICAgICAgaWYgKF9nZXRidWZmZXIoYXJnLCAmdmFyZykgPCAwKQorICAgICAgICBpZiAoUHlPYmplY3RfR2V0QnVmZmVyKGFyZywgJnZhcmcsIFB5QlVGX1NJTVBMRSkgIT0gMCkKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgcG9zID0gc3RyaW5nbGliX2ZpbmQoUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHNlbGYpLCBQeV9TSVpFKHNlbGYpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJnLmJ1ZiwgdmFyZy5sZW4sIDApOwpAQCAtMTMwMyw3ICsxMzMzLDcgQEAKIAogICAgIHN0ciA9IFB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZWxmKTsKIAotICAgIGlmIChfZ2V0YnVmZmVyKHN1YnN0ciwgJnZzdWJzdHIpIDwgMCkKKyAgICBpZiAoUHlPYmplY3RfR2V0QnVmZmVyKHN1YnN0ciwgJnZzdWJzdHIsIFB5QlVGX1NJTVBMRSkgIT0gMCkKICAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgQURKVVNUX0lORElDRVMoc3RhcnQsIGVuZCwgbGVuKTsKQEAgLTE0MjksOSArMTQ1OSw5IEBACiBzdGF0aWMgUHlPYmplY3QgKgogYnl0ZWFycmF5X3RyYW5zbGF0ZShQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgcmVnaXN0ZXIgY2hhciAqaW5wdXQsICpvdXRwdXQ7Ci0gICAgcmVnaXN0ZXIgY29uc3QgY2hhciAqdGFibGU7Ci0gICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBpLCBjOworICAgIGNoYXIgKmlucHV0LCAqb3V0cHV0OworICAgIGNvbnN0IGNoYXIgKnRhYmxlOworICAgIFB5X3NzaXplX3QgaSwgYzsKICAgICBQeU9iamVjdCAqaW5wdXRfb2JqID0gKFB5T2JqZWN0KilzZWxmOwogICAgIGNvbnN0IGNoYXIgKm91dHB1dF9zdGFydDsKICAgICBQeV9zc2l6ZV90IGlubGVuOwpAQCAtMTQ0Nyw3ICsxNDc3LDcgQEAKICAgICBpZiAodGFibGVvYmogPT0gUHlfTm9uZSkgewogICAgICAgICB0YWJsZSA9IE5VTEw7CiAgICAgICAgIHRhYmxlb2JqID0gTlVMTDsKLSAgICB9IGVsc2UgaWYgKF9nZXRidWZmZXIodGFibGVvYmosICZ2dGFibGUpIDwgMCkgeworICAgIH0gZWxzZSBpZiAoUHlPYmplY3RfR2V0QnVmZmVyKHRhYmxlb2JqLCAmdnRhYmxlLCBQeUJVRl9TSU1QTEUpICE9IDApIHsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKHZ0YWJsZS5sZW4gIT0gMjU2KSB7CkBAIC0xNDYwLDcgKzE0OTAsNyBAQAogICAgIH0KIAogICAgIGlmIChkZWxvYmogIT0gTlVMTCkgewotICAgICAgICBpZiAoX2dldGJ1ZmZlcihkZWxvYmosICZ2ZGVsKSA8IDApIHsKKyAgICAgICAgaWYgKFB5T2JqZWN0X0dldEJ1ZmZlcihkZWxvYmosICZ2ZGVsLCBQeUJVRl9TSU1QTEUpICE9IDApIHsKICAgICAgICAgICAgIGlmICh0YWJsZW9iaiAhPSBOVUxMKQogICAgICAgICAgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZ0YWJsZSk7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTIwMjQsMjYgKzIwNTQsMjAgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBieXRlYXJyYXlfcmVwbGFjZShQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CisgICAgUHlPYmplY3QgKnJlczsKKyAgICBQeV9idWZmZXIgb2xkID0ge05VTEwsIE5VTEx9OworICAgIFB5X2J1ZmZlciBuZXcgPSB7TlVMTCwgTlVMTH07CiAgICAgUHlfc3NpemVfdCBjb3VudCA9IC0xOwotICAgIFB5T2JqZWN0ICpmcm9tLCAqdG8sICpyZXM7Ci0gICAgUHlfYnVmZmVyIHZmcm9tLCB2dG87CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk9PfG46cmVwbGFjZSIsICZmcm9tLCAmdG8sICZjb3VudCkpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ5KnkqfG46cmVwbGFjZSIsICZvbGQsICZuZXcsICZjb3VudCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgaWYgKF9nZXRidWZmZXIoZnJvbSwgJnZmcm9tKSA8IDApCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmIChfZ2V0YnVmZmVyKHRvLCAmdnRvKSA8IDApIHsKLSAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmZyb20pOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KICAgICByZXMgPSAoUHlPYmplY3QgKilyZXBsYWNlKChQeUJ5dGVBcnJheU9iamVjdCAqKSBzZWxmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmZyb20uYnVmLCB2ZnJvbS5sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2dG8uYnVmLCB2dG8ubGVuLCBjb3VudCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqKW9sZC5idWYsIG9sZC5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqKW5ldy5idWYsIG5ldy5sZW4sIGNvdW50KTsKIAotICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZmcm9tKTsKLSAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2dG8pOworICAgIFB5QnVmZmVyX1JlbGVhc2UoJm9sZCk7CisgICAgUHlCdWZmZXJfUmVsZWFzZSgmbmV3KTsKICAgICByZXR1cm4gcmVzOwogfQogCkBAIC0yMDc0LDcgKzIwOTgsNyBAQAogICAgIGlmIChzdWJvYmogPT0gUHlfTm9uZSkKICAgICAgICAgcmV0dXJuIHN0cmluZ2xpYl9zcGxpdF93aGl0ZXNwYWNlKChQeU9iamVjdCopIHNlbGYsIHMsIGxlbiwgbWF4c3BsaXQpOwogCi0gICAgaWYgKF9nZXRidWZmZXIoc3Vib2JqLCAmdnN1YikgPCAwKQorICAgIGlmIChQeU9iamVjdF9HZXRCdWZmZXIoc3Vib2JqLCAmdnN1YiwgUHlCVUZfU0lNUExFKSAhPSAwKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBzdWIgPSB2c3ViLmJ1ZjsKICAgICBuID0gdnN1Yi5sZW47CkBAIC0yMTY5LDcgKzIxOTMsNyBAQAogICAgIGlmIChzdWJvYmogPT0gUHlfTm9uZSkKICAgICAgICAgcmV0dXJuIHN0cmluZ2xpYl9yc3BsaXRfd2hpdGVzcGFjZSgoUHlPYmplY3QqKSBzZWxmLCBzLCBsZW4sIG1heHNwbGl0KTsKIAotICAgIGlmIChfZ2V0YnVmZmVyKHN1Ym9iaiwgJnZzdWIpIDwgMCkKKyAgICBpZiAoUHlPYmplY3RfR2V0QnVmZmVyKHN1Ym9iaiwgJnZzdWIsIFB5QlVGX1NJTVBMRSkgIT0gMCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgc3ViID0gdnN1Yi5idWY7CiAgICAgbiA9IHZzdWIubGVuOwpAQCAtMjE5Miw3ICsyMjE2LDcgQEAKICAgICBQeV9zc2l6ZV90IGksIGosIG4gPSBQeV9TSVpFKHNlbGYpOwogCiAgICAgaiA9IG4gLyAyOwotICAgIGhlYWQgPSBzZWxmLT5vYl9ieXRlczsKKyAgICBoZWFkID0gUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHNlbGYpOwogICAgIHRhaWwgPSBoZWFkICsgbiAtIDE7CiAgICAgZm9yIChpID0gMDsgaSA8IGo7IGkrKykgewogICAgICAgICBzd2FwID0gKmhlYWQ7CkBAIC0yMjEzLDYgKzIyMzcsNyBAQAogICAgIFB5T2JqZWN0ICp2YWx1ZTsKICAgICBpbnQgaXZhbDsKICAgICBQeV9zc2l6ZV90IHdoZXJlLCBuID0gUHlfU0laRShzZWxmKTsKKyAgICBjaGFyICpidWY7CiAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIm5POmluc2VydCIsICZ3aGVyZSwgJnZhbHVlKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0yMjI2LDYgKzIyNTEsNyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpZiAoUHlCeXRlQXJyYXlfUmVzaXplKChQeU9iamVjdCAqKXNlbGYsIG4gKyAxKSA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOworICAgIGJ1ZiA9IFB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZWxmKTsKIAogICAgIGlmICh3aGVyZSA8IDApIHsKICAgICAgICAgd2hlcmUgKz0gbjsKQEAgLTIyMzQsOCArMjI2MCw4IEBACiAgICAgfQogICAgIGlmICh3aGVyZSA+IG4pCiAgICAgICAgIHdoZXJlID0gbjsKLSAgICBtZW1tb3ZlKHNlbGYtPm9iX2J5dGVzICsgd2hlcmUgKyAxLCBzZWxmLT5vYl9ieXRlcyArIHdoZXJlLCBuIC0gd2hlcmUpOwotICAgIHNlbGYtPm9iX2J5dGVzW3doZXJlXSA9IGl2YWw7CisgICAgbWVtbW92ZShidWYgKyB3aGVyZSArIDEsIGJ1ZiArIHdoZXJlLCBuIC0gd2hlcmUpOworICAgIGJ1Zlt3aGVyZV0gPSBpdmFsOwogCiAgICAgUHlfUkVUVVJOX05PTkU7CiB9CkBAIC0yMjYwLDcgKzIyODYsNyBAQAogICAgIGlmIChQeUJ5dGVBcnJheV9SZXNpemUoKFB5T2JqZWN0ICopc2VsZiwgbiArIDEpIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBzZWxmLT5vYl9ieXRlc1tuXSA9IHZhbHVlOworICAgIFB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZWxmKVtuXSA9IHZhbHVlOwogCiAgICAgUHlfUkVUVVJOX05PTkU7CiB9CkBAIC0yMjkxLDcgKzIzMTcsNyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIC8qIFRyeSB0byBkZXRlcm1pbmUgdGhlIGxlbmd0aCBvZiB0aGUgYXJndW1lbnQuIDMyIGlzIGFyYml0cmFyeS4gKi8KLSAgICBidWZfc2l6ZSA9IF9QeU9iamVjdF9MZW5ndGhIaW50KGFyZywgMzIpOworICAgIGJ1Zl9zaXplID0gUHlPYmplY3RfTGVuZ3RoSGludChhcmcsIDMyKTsKICAgICBpZiAoYnVmX3NpemUgPT0gLTEpIHsKICAgICAgICAgUHlfREVDUkVGKGl0KTsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0yMzUzLDYgKzIzNzksNyBAQAogewogICAgIGludCB2YWx1ZTsKICAgICBQeV9zc2l6ZV90IHdoZXJlID0gLTEsIG4gPSBQeV9TSVpFKHNlbGYpOworICAgIGNoYXIgKmJ1ZjsKIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifG46cG9wIiwgJndoZXJlKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0yMzcxLDggKzIzOTgsOSBAQAogICAgIGlmICghX2NhbnJlc2l6ZShzZWxmKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICB2YWx1ZSA9IHNlbGYtPm9iX2J5dGVzW3doZXJlXTsKLSAgICBtZW1tb3ZlKHNlbGYtPm9iX2J5dGVzICsgd2hlcmUsIHNlbGYtPm9iX2J5dGVzICsgd2hlcmUgKyAxLCBuIC0gd2hlcmUpOworICAgIGJ1ZiA9IFB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZWxmKTsKKyAgICB2YWx1ZSA9IGJ1Zlt3aGVyZV07CisgICAgbWVtbW92ZShidWYgKyB3aGVyZSwgYnVmICsgd2hlcmUgKyAxLCBuIC0gd2hlcmUpOwogICAgIGlmIChQeUJ5dGVBcnJheV9SZXNpemUoKFB5T2JqZWN0ICopc2VsZiwgbiAtIDEpIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTIzODgsMTIgKzI0MTYsMTMgQEAKIHsKICAgICBpbnQgdmFsdWU7CiAgICAgUHlfc3NpemVfdCB3aGVyZSwgbiA9IFB5X1NJWkUoc2VsZik7CisgICAgY2hhciAqYnVmID0gUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHNlbGYpOwogCiAgICAgaWYgKCEgX2dldGJ5dGV2YWx1ZShhcmcsICZ2YWx1ZSkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgZm9yICh3aGVyZSA9IDA7IHdoZXJlIDwgbjsgd2hlcmUrKykgewotICAgICAgICBpZiAoc2VsZi0+b2JfYnl0ZXNbd2hlcmVdID09IHZhbHVlKQorICAgICAgICBpZiAoYnVmW3doZXJlXSA9PSB2YWx1ZSkKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBpZiAod2hlcmUgPT0gbikgewpAQCAtMjQwMyw3ICsyNDMyLDcgQEAKICAgICBpZiAoIV9jYW5yZXNpemUoc2VsZikpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgbWVtbW92ZShzZWxmLT5vYl9ieXRlcyArIHdoZXJlLCBzZWxmLT5vYl9ieXRlcyArIHdoZXJlICsgMSwgbiAtIHdoZXJlKTsKKyAgICBtZW1tb3ZlKGJ1ZiArIHdoZXJlLCBidWYgKyB3aGVyZSArIDEsIG4gLSB3aGVyZSk7CiAgICAgaWYgKFB5Qnl0ZUFycmF5X1Jlc2l6ZSgoUHlPYmplY3QgKilzZWxmLCBuIC0gMSkgPCAwKQogICAgICAgICByZXR1cm4gTlVMTDsKIApAQCAtMjQxMywyMSArMjQ0MiwyMSBAQAogLyogWFhYIFRoZXNlIHR3byBoZWxwZXJzIGNvdWxkIGJlIG9wdGltaXplZCBpZiBhcmdzaXplID09IDEgKi8KIAogc3RhdGljIFB5X3NzaXplX3QKLWxzdHJpcF9oZWxwZXIodW5zaWduZWQgY2hhciAqbXlwdHIsIFB5X3NzaXplX3QgbXlzaXplLAorbHN0cmlwX2hlbHBlcihjaGFyICpteXB0ciwgUHlfc3NpemVfdCBteXNpemUsCiAgICAgICAgICAgICAgIHZvaWQgKmFyZ3B0ciwgUHlfc3NpemVfdCBhcmdzaXplKQogewogICAgIFB5X3NzaXplX3QgaSA9IDA7Ci0gICAgd2hpbGUgKGkgPCBteXNpemUgJiYgbWVtY2hyKGFyZ3B0ciwgbXlwdHJbaV0sIGFyZ3NpemUpKQorICAgIHdoaWxlIChpIDwgbXlzaXplICYmIG1lbWNocihhcmdwdHIsICh1bnNpZ25lZCBjaGFyKSBteXB0cltpXSwgYXJnc2l6ZSkpCiAgICAgICAgIGkrKzsKICAgICByZXR1cm4gaTsKIH0KIAogc3RhdGljIFB5X3NzaXplX3QKLXJzdHJpcF9oZWxwZXIodW5zaWduZWQgY2hhciAqbXlwdHIsIFB5X3NzaXplX3QgbXlzaXplLAorcnN0cmlwX2hlbHBlcihjaGFyICpteXB0ciwgUHlfc3NpemVfdCBteXNpemUsCiAgICAgICAgICAgICAgIHZvaWQgKmFyZ3B0ciwgUHlfc3NpemVfdCBhcmdzaXplKQogewogICAgIFB5X3NzaXplX3QgaSA9IG15c2l6ZSAtIDE7Ci0gICAgd2hpbGUgKGkgPj0gMCAmJiBtZW1jaHIoYXJncHRyLCBteXB0cltpXSwgYXJnc2l6ZSkpCisgICAgd2hpbGUgKGkgPj0gMCAmJiBtZW1jaHIoYXJncHRyLCAodW5zaWduZWQgY2hhcikgbXlwdHJbaV0sIGFyZ3NpemUpKQogICAgICAgICBpLS07CiAgICAgcmV0dXJuIGkgKyAxOwogfQpAQCAtMjQ0Miw3ICsyNDcxLDcgQEAKIGJ5dGVhcnJheV9zdHJpcChQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CiAgICAgUHlfc3NpemVfdCBsZWZ0LCByaWdodCwgbXlzaXplLCBhcmdzaXplOwotICAgIHZvaWQgKm15cHRyLCAqYXJncHRyOworICAgIGNoYXIgKm15cHRyLCAqYXJncHRyOwogICAgIFB5T2JqZWN0ICphcmcgPSBQeV9Ob25lOwogICAgIFB5X2J1ZmZlciB2YXJnOwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifE86c3RyaXAiLCAmYXJnKSkKQEAgLTI0NTIsMTIgKzI0ODEsMTIgQEAKICAgICAgICAgYXJnc2l6ZSA9IDY7CiAgICAgfQogICAgIGVsc2UgewotICAgICAgICBpZiAoX2dldGJ1ZmZlcihhcmcsICZ2YXJnKSA8IDApCisgICAgICAgIGlmIChQeU9iamVjdF9HZXRCdWZmZXIoYXJnLCAmdmFyZywgUHlCVUZfU0lNUExFKSAhPSAwKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIGFyZ3B0ciA9IHZhcmcuYnVmOworICAgICAgICBhcmdwdHIgPSAoY2hhciAqKSB2YXJnLmJ1ZjsKICAgICAgICAgYXJnc2l6ZSA9IHZhcmcubGVuOwogICAgIH0KLSAgICBteXB0ciA9IHNlbGYtPm9iX2J5dGVzOworICAgIG15cHRyID0gUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHNlbGYpOwogICAgIG15c2l6ZSA9IFB5X1NJWkUoc2VsZik7CiAgICAgbGVmdCA9IGxzdHJpcF9oZWxwZXIobXlwdHIsIG15c2l6ZSwgYXJncHRyLCBhcmdzaXplKTsKICAgICBpZiAobGVmdCA9PSBteXNpemUpCkBAIC0yNDY2LDcgKzI0OTUsNyBAQAogICAgICAgICByaWdodCA9IHJzdHJpcF9oZWxwZXIobXlwdHIsIG15c2l6ZSwgYXJncHRyLCBhcmdzaXplKTsKICAgICBpZiAoYXJnICE9IFB5X05vbmUpCiAgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZhcmcpOwotICAgIHJldHVybiBQeUJ5dGVBcnJheV9Gcm9tU3RyaW5nQW5kU2l6ZShzZWxmLT5vYl9ieXRlcyArIGxlZnQsIHJpZ2h0IC0gbGVmdCk7CisgICAgcmV0dXJuIFB5Qnl0ZUFycmF5X0Zyb21TdHJpbmdBbmRTaXplKG15cHRyICsgbGVmdCwgcmlnaHQgLSBsZWZ0KTsKIH0KIAogUHlEb2NfU1RSVkFSKGxzdHJpcF9fZG9jX18sCkBAIC0yNDc5LDcgKzI1MDgsNyBAQAogYnl0ZWFycmF5X2xzdHJpcChQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CiAgICAgUHlfc3NpemVfdCBsZWZ0LCByaWdodCwgbXlzaXplLCBhcmdzaXplOwotICAgIHZvaWQgKm15cHRyLCAqYXJncHRyOworICAgIGNoYXIgKm15cHRyLCAqYXJncHRyOwogICAgIFB5T2JqZWN0ICphcmcgPSBQeV9Ob25lOwogICAgIFB5X2J1ZmZlciB2YXJnOwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifE86bHN0cmlwIiwgJmFyZykpCkBAIC0yNDg5LDE4ICsyNTE4LDE4IEBACiAgICAgICAgIGFyZ3NpemUgPSA2OwogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgaWYgKF9nZXRidWZmZXIoYXJnLCAmdmFyZykgPCAwKQorICAgICAgICBpZiAoUHlPYmplY3RfR2V0QnVmZmVyKGFyZywgJnZhcmcsIFB5QlVGX1NJTVBMRSkgIT0gMCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICBhcmdwdHIgPSB2YXJnLmJ1ZjsKKyAgICAgICAgYXJncHRyID0gKGNoYXIgKikgdmFyZy5idWY7CiAgICAgICAgIGFyZ3NpemUgPSB2YXJnLmxlbjsKICAgICB9Ci0gICAgbXlwdHIgPSBzZWxmLT5vYl9ieXRlczsKKyAgICBteXB0ciA9IFB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZWxmKTsKICAgICBteXNpemUgPSBQeV9TSVpFKHNlbGYpOwogICAgIGxlZnQgPSBsc3RyaXBfaGVscGVyKG15cHRyLCBteXNpemUsIGFyZ3B0ciwgYXJnc2l6ZSk7CiAgICAgcmlnaHQgPSBteXNpemU7CiAgICAgaWYgKGFyZyAhPSBQeV9Ob25lKQogICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2YXJnKTsKLSAgICByZXR1cm4gUHlCeXRlQXJyYXlfRnJvbVN0cmluZ0FuZFNpemUoc2VsZi0+b2JfYnl0ZXMgKyBsZWZ0LCByaWdodCAtIGxlZnQpOworICAgIHJldHVybiBQeUJ5dGVBcnJheV9Gcm9tU3RyaW5nQW5kU2l6ZShteXB0ciArIGxlZnQsIHJpZ2h0IC0gbGVmdCk7CiB9CiAKIFB5RG9jX1NUUlZBUihyc3RyaXBfX2RvY19fLApAQCAtMjUxMyw3ICsyNTQyLDcgQEAKIGJ5dGVhcnJheV9yc3RyaXAoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewogICAgIFB5X3NzaXplX3QgcmlnaHQsIG15c2l6ZSwgYXJnc2l6ZTsKLSAgICB2b2lkICpteXB0ciwgKmFyZ3B0cjsKKyAgICBjaGFyICpteXB0ciwgKmFyZ3B0cjsKICAgICBQeU9iamVjdCAqYXJnID0gUHlfTm9uZTsKICAgICBQeV9idWZmZXIgdmFyZzsKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxPOnJzdHJpcCIsICZhcmcpKQpAQCAtMjUyMywxNyArMjU1MiwxNyBAQAogICAgICAgICBhcmdzaXplID0gNjsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIGlmIChfZ2V0YnVmZmVyKGFyZywgJnZhcmcpIDwgMCkKKyAgICAgICAgaWYgKFB5T2JqZWN0X0dldEJ1ZmZlcihhcmcsICZ2YXJnLCBQeUJVRl9TSU1QTEUpICE9IDApCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgYXJncHRyID0gdmFyZy5idWY7CisgICAgICAgIGFyZ3B0ciA9IChjaGFyICopIHZhcmcuYnVmOwogICAgICAgICBhcmdzaXplID0gdmFyZy5sZW47CiAgICAgfQotICAgIG15cHRyID0gc2VsZi0+b2JfYnl0ZXM7CisgICAgbXlwdHIgPSBQeUJ5dGVBcnJheV9BU19TVFJJTkcoc2VsZik7CiAgICAgbXlzaXplID0gUHlfU0laRShzZWxmKTsKICAgICByaWdodCA9IHJzdHJpcF9oZWxwZXIobXlwdHIsIG15c2l6ZSwgYXJncHRyLCBhcmdzaXplKTsKICAgICBpZiAoYXJnICE9IFB5X05vbmUpCiAgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZhcmcpOwotICAgIHJldHVybiBQeUJ5dGVBcnJheV9Gcm9tU3RyaW5nQW5kU2l6ZShzZWxmLT5vYl9ieXRlcywgcmlnaHQpOworICAgIHJldHVybiBQeUJ5dGVBcnJheV9Gcm9tU3RyaW5nQW5kU2l6ZShteXB0ciwgcmlnaHQpOwogfQogCiBQeURvY19TVFJWQVIoZGVjb2RlX2RvYywKQEAgLTI1NzgsNzMgKzI2MDcsOSBAQAogaW4gYmV0d2VlbiBlYWNoIHBhaXIsIGFuZCByZXR1cm4gdGhlIHJlc3VsdCBhcyBhIG5ldyBieXRlYXJyYXkuIik7CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1ieXRlYXJyYXlfam9pbihQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKml0KQorYnl0ZWFycmF5X2pvaW4oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICppdGVyYWJsZSkKIHsKLSAgICBQeU9iamVjdCAqc2VxOwotICAgIFB5X3NzaXplX3QgbXlzaXplID0gUHlfU0laRShzZWxmKTsKLSAgICBQeV9zc2l6ZV90IGk7Ci0gICAgUHlfc3NpemVfdCBuOwotICAgIFB5T2JqZWN0ICoqaXRlbXM7Ci0gICAgUHlfc3NpemVfdCB0b3RhbHNpemUgPSAwOwotICAgIFB5T2JqZWN0ICpyZXN1bHQ7Ci0gICAgY2hhciAqZGVzdDsKLQotICAgIHNlcSA9IFB5U2VxdWVuY2VfRmFzdChpdCwgImNhbiBvbmx5IGpvaW4gYW4gaXRlcmFibGUiKTsKLSAgICBpZiAoc2VxID09IE5VTEwpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIG4gPSBQeVNlcXVlbmNlX0Zhc3RfR0VUX1NJWkUoc2VxKTsKLSAgICBpdGVtcyA9IFB5U2VxdWVuY2VfRmFzdF9JVEVNUyhzZXEpOwotCi0gICAgLyogQ29tcHV0ZSB0aGUgdG90YWwgc2l6ZSwgYW5kIGNoZWNrIHRoYXQgdGhleSBhcmUgYWxsIGJ5dGVzICovCi0gICAgLyogWFhYIFNob3VsZG4ndCB3ZSB1c2UgX2dldGJ1ZmZlcigpIG9uIHRoZXNlIGl0ZW1zIGluc3RlYWQ/ICovCi0gICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotICAgICAgICBQeU9iamVjdCAqb2JqID0gaXRlbXNbaV07Ci0gICAgICAgIGlmICghUHlCeXRlQXJyYXlfQ2hlY2sob2JqKSAmJiAhUHlCeXRlc19DaGVjayhvYmopKSB7Ci0gICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICJjYW4gb25seSBqb2luIGFuIGl0ZXJhYmxlIG9mIGJ5dGVzICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAiKGl0ZW0gJWxkIGhhcyB0eXBlICclLjEwMHMnKSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgLyogWFhYICVsZCBpc24ndCByaWdodCBvbiBXaW42NCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKWksIFB5X1RZUEUob2JqKS0+dHBfbmFtZSk7Ci0gICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICB9Ci0gICAgICAgIGlmIChpID4gMCkKLSAgICAgICAgICAgIHRvdGFsc2l6ZSArPSBteXNpemU7Ci0gICAgICAgIHRvdGFsc2l6ZSArPSBQeV9TSVpFKG9iaik7Ci0gICAgICAgIGlmICh0b3RhbHNpemUgPCAwKSB7Ci0gICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwotICAgICAgICAgICAgZ290byBlcnJvcjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qIEFsbG9jYXRlIHRoZSByZXN1bHQsIGFuZCBjb3B5IHRoZSBieXRlcyAqLwotICAgIHJlc3VsdCA9IFB5Qnl0ZUFycmF5X0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIHRvdGFsc2l6ZSk7Ci0gICAgaWYgKHJlc3VsdCA9PSBOVUxMKQotICAgICAgICBnb3RvIGVycm9yOwotICAgIGRlc3QgPSBQeUJ5dGVBcnJheV9BU19TVFJJTkcocmVzdWx0KTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0gICAgICAgIFB5T2JqZWN0ICpvYmogPSBpdGVtc1tpXTsKLSAgICAgICAgUHlfc3NpemVfdCBzaXplID0gUHlfU0laRShvYmopOwotICAgICAgICBjaGFyICpidWY7Ci0gICAgICAgIGlmIChQeUJ5dGVBcnJheV9DaGVjayhvYmopKQotICAgICAgICAgICBidWYgPSBQeUJ5dGVBcnJheV9BU19TVFJJTkcob2JqKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICBidWYgPSBQeUJ5dGVzX0FTX1NUUklORyhvYmopOwotICAgICAgICBpZiAoaSkgewotICAgICAgICAgICAgbWVtY3B5KGRlc3QsIHNlbGYtPm9iX2J5dGVzLCBteXNpemUpOwotICAgICAgICAgICAgZGVzdCArPSBteXNpemU7Ci0gICAgICAgIH0KLSAgICAgICAgbWVtY3B5KGRlc3QsIGJ1Ziwgc2l6ZSk7Ci0gICAgICAgIGRlc3QgKz0gc2l6ZTsKLSAgICB9Ci0KLSAgICAvKiBEb25lICovCi0gICAgUHlfREVDUkVGKHNlcSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLQotICAgIC8qIEVycm9yIGhhbmRsaW5nICovCi0gIGVycm9yOgotICAgIFB5X0RFQ1JFRihzZXEpOwotICAgIHJldHVybiBOVUxMOworICAgIHJldHVybiBzdHJpbmdsaWJfYnl0ZXNfam9pbihzZWxmLCBpdGVyYWJsZSk7CiB9CiAKIFB5RG9jX1NUUlZBUihzcGxpdGxpbmVzX19kb2NfXywKQEAgLTI3NDgsNiArMjcxMyw3IEBACiB7CiAgICAgUHlPYmplY3QgKmRpY3Q7CiAgICAgX1B5X0lERU5USUZJRVIoX19kaWN0X18pOworICAgIGNoYXIgKmJ1ZjsKIAogICAgIGRpY3QgPSBfUHlPYmplY3RfR2V0QXR0cklkKChQeU9iamVjdCAqKXNlbGYsICZQeUlkX19fZGljdF9fKTsKICAgICBpZiAoZGljdCA9PSBOVUxMKSB7CkBAIC0yNzU2LDE5ICsyNzIyLDIwIEBACiAgICAgICAgIFB5X0lOQ1JFRihkaWN0KTsKICAgICB9CiAKKyAgICBidWYgPSBQeUJ5dGVBcnJheV9BU19TVFJJTkcoc2VsZik7CiAgICAgaWYgKHByb3RvIDwgMykgewogICAgICAgICAvKiB1c2Ugc3RyIGJhc2VkIHJlZHVjdGlvbiBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCBQeXRob24gMi54ICovCiAgICAgICAgIFB5T2JqZWN0ICpsYXRpbjE7Ci0gICAgICAgIGlmIChzZWxmLT5vYl9ieXRlcykKLSAgICAgICAgICAgIGxhdGluMSA9IFB5VW5pY29kZV9EZWNvZGVMYXRpbjEoc2VsZi0+b2JfYnl0ZXMsIFB5X1NJWkUoc2VsZiksIE5VTEwpOworICAgICAgICBpZiAoUHlfU0laRShzZWxmKSkKKyAgICAgICAgICAgIGxhdGluMSA9IFB5VW5pY29kZV9EZWNvZGVMYXRpbjEoYnVmLCBQeV9TSVpFKHNlbGYpLCBOVUxMKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbGF0aW4xID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoIiIpOwogICAgICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiKE8oTnMpTikiLCBQeV9UWVBFKHNlbGYpLCBsYXRpbjEsICJsYXRpbi0xIiwgZGljdCk7CiAgICAgfQogICAgIGVsc2UgewogICAgICAgICAvKiB1c2UgbW9yZSBlZmZpY2llbnQgYnl0ZSBiYXNlZCByZWR1Y3Rpb24gKi8KLSAgICAgICAgaWYgKHNlbGYtPm9iX2J5dGVzKSB7Ci0gICAgICAgICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiKE8oeSMpTikiLCBQeV9UWVBFKHNlbGYpLCBzZWxmLT5vYl9ieXRlcywgUHlfU0laRShzZWxmKSwgZGljdCk7CisgICAgICAgIGlmIChQeV9TSVpFKHNlbGYpKSB7CisgICAgICAgICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiKE8oeSMpTikiLCBQeV9UWVBFKHNlbGYpLCBidWYsIFB5X1NJWkUoc2VsZiksIGRpY3QpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIihPKClOKSIsIFB5X1RZUEUoc2VsZiksIGRpY3QpOwpAQCAtMjg0OSw3ICsyODE2LDcgQEAKICAgICB7ImNvdW50IiwgKFB5Q0Z1bmN0aW9uKWJ5dGVhcnJheV9jb3VudCwgTUVUSF9WQVJBUkdTLCBjb3VudF9fZG9jX199LAogICAgIHsiZGVjb2RlIiwgKFB5Q0Z1bmN0aW9uKWJ5dGVhcnJheV9kZWNvZGUsIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsIGRlY29kZV9kb2N9LAogICAgIHsiZW5kc3dpdGgiLCAoUHlDRnVuY3Rpb24pYnl0ZWFycmF5X2VuZHN3aXRoLCBNRVRIX1ZBUkFSR1MsIGVuZHN3aXRoX19kb2NfX30sCi0gICAgeyJleHBhbmR0YWJzIiwgKFB5Q0Z1bmN0aW9uKXN0cmluZ2xpYl9leHBhbmR0YWJzLCBNRVRIX1ZBUkFSR1MsCisgICAgeyJleHBhbmR0YWJzIiwgKFB5Q0Z1bmN0aW9uKXN0cmluZ2xpYl9leHBhbmR0YWJzLCBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLAogICAgICBleHBhbmR0YWJzX19kb2NfX30sCiAgICAgeyJleHRlbmQiLCAoUHlDRnVuY3Rpb24pYnl0ZWFycmF5X2V4dGVuZCwgTUVUSF9PLCBleHRlbmRfX2RvY19ffSwKICAgICB7ImZpbmQiLCAoUHlDRnVuY3Rpb24pYnl0ZWFycmF5X2ZpbmQsIE1FVEhfVkFSQVJHUywgZmluZF9fZG9jX199LApAQCAtMzAwMCw3ICsyOTY3LDcgQEAKIAogICAgIGlmIChpdC0+aXRfaW5kZXggPCBQeUJ5dGVBcnJheV9HRVRfU0laRShzZXEpKSB7CiAgICAgICAgIGl0ZW0gPSBQeUxvbmdfRnJvbUxvbmcoCi0gICAgICAgICAgICAodW5zaWduZWQgY2hhcilzZXEtPm9iX2J5dGVzW2l0LT5pdF9pbmRleF0pOworICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIpUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHNlcSlbaXQtPml0X2luZGV4XSk7CiAgICAgICAgIGlmIChpdGVtICE9IE5VTEwpCiAgICAgICAgICAgICArK2l0LT5pdF9pbmRleDsKICAgICAgICAgcmV0dXJuIGl0ZW07CmRpZmYgLS1naXQgYS9PYmplY3RzL2J5dGVzX21ldGhvZHMuYyBiL09iamVjdHMvYnl0ZXNfbWV0aG9kcy5jCmluZGV4IGVmM2MyZjcuLjlmZjdhY2UgMTAwNjQ0Ci0tLSBhL09iamVjdHMvYnl0ZXNfbWV0aG9kcy5jCisrKyBiL09iamVjdHMvYnl0ZXNfbWV0aG9kcy5jCkBAIC0xMCw5ICsxMCw5IEBACiBQeU9iamVjdCoKIF9QeV9ieXRlc19pc3NwYWNlKGNvbnN0IGNoYXIgKmNwdHIsIFB5X3NzaXplX3QgbGVuKQogewotICAgIHJlZ2lzdGVyIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnAKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwCiAgICAgICAgID0gKHVuc2lnbmVkIGNoYXIgKikgY3B0cjsKLSAgICByZWdpc3RlciBjb25zdCB1bnNpZ25lZCBjaGFyICplOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmU7CiAKICAgICAvKiBTaG9ydGN1dCBmb3Igc2luZ2xlIGNoYXJhY3RlciBzdHJpbmdzICovCiAgICAgaWYgKGxlbiA9PSAxICYmIFB5X0lTU1BBQ0UoKnApKQpAQCAtNDAsOSArNDAsOSBAQAogUHlPYmplY3QqCiBfUHlfYnl0ZXNfaXNhbHBoYShjb25zdCBjaGFyICpjcHRyLCBQeV9zc2l6ZV90IGxlbikKIHsKLSAgICByZWdpc3RlciBjb25zdCB1bnNpZ25lZCBjaGFyICpwCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcAogICAgICAgICA9ICh1bnNpZ25lZCBjaGFyICopIGNwdHI7Ci0gICAgcmVnaXN0ZXIgY29uc3QgdW5zaWduZWQgY2hhciAqZTsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplOwogCiAgICAgLyogU2hvcnRjdXQgZm9yIHNpbmdsZSBjaGFyYWN0ZXIgc3RyaW5ncyAqLwogICAgIGlmIChsZW4gPT0gMSAmJiBQeV9JU0FMUEhBKCpwKSkKQEAgLTcwLDkgKzcwLDkgQEAKIFB5T2JqZWN0KgogX1B5X2J5dGVzX2lzYWxudW0oY29uc3QgY2hhciAqY3B0ciwgUHlfc3NpemVfdCBsZW4pCiB7Ci0gICAgcmVnaXN0ZXIgY29uc3QgdW5zaWduZWQgY2hhciAqcAorICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnAKICAgICAgICAgPSAodW5zaWduZWQgY2hhciAqKSBjcHRyOwotICAgIHJlZ2lzdGVyIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmU7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZTsKIAogICAgIC8qIFNob3J0Y3V0IGZvciBzaW5nbGUgY2hhcmFjdGVyIHN0cmluZ3MgKi8KICAgICBpZiAobGVuID09IDEgJiYgUHlfSVNBTE5VTSgqcCkpCkBAIC0xMDAsOSArMTAwLDkgQEAKIFB5T2JqZWN0KgogX1B5X2J5dGVzX2lzZGlnaXQoY29uc3QgY2hhciAqY3B0ciwgUHlfc3NpemVfdCBsZW4pCiB7Ci0gICAgcmVnaXN0ZXIgY29uc3QgdW5zaWduZWQgY2hhciAqcAorICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnAKICAgICAgICAgPSAodW5zaWduZWQgY2hhciAqKSBjcHRyOwotICAgIHJlZ2lzdGVyIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmU7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZTsKIAogICAgIC8qIFNob3J0Y3V0IGZvciBzaW5nbGUgY2hhcmFjdGVyIHN0cmluZ3MgKi8KICAgICBpZiAobGVuID09IDEgJiYgUHlfSVNESUdJVCgqcCkpCkBAIC0xMzAsOSArMTMwLDkgQEAKIFB5T2JqZWN0KgogX1B5X2J5dGVzX2lzbG93ZXIoY29uc3QgY2hhciAqY3B0ciwgUHlfc3NpemVfdCBsZW4pCiB7Ci0gICAgcmVnaXN0ZXIgY29uc3QgdW5zaWduZWQgY2hhciAqcAorICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnAKICAgICAgICAgPSAodW5zaWduZWQgY2hhciAqKSBjcHRyOwotICAgIHJlZ2lzdGVyIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmU7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZTsKICAgICBpbnQgY2FzZWQ7CiAKICAgICAvKiBTaG9ydGN1dCBmb3Igc2luZ2xlIGNoYXJhY3RlciBzdHJpbmdzICovCkBAIC0xNjQsOSArMTY0LDkgQEAKIFB5T2JqZWN0KgogX1B5X2J5dGVzX2lzdXBwZXIoY29uc3QgY2hhciAqY3B0ciwgUHlfc3NpemVfdCBsZW4pCiB7Ci0gICAgcmVnaXN0ZXIgY29uc3QgdW5zaWduZWQgY2hhciAqcAorICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnAKICAgICAgICAgPSAodW5zaWduZWQgY2hhciAqKSBjcHRyOwotICAgIHJlZ2lzdGVyIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmU7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZTsKICAgICBpbnQgY2FzZWQ7CiAKICAgICAvKiBTaG9ydGN1dCBmb3Igc2luZ2xlIGNoYXJhY3RlciBzdHJpbmdzICovCkBAIC0yMDAsOSArMjAwLDkgQEAKIFB5T2JqZWN0KgogX1B5X2J5dGVzX2lzdGl0bGUoY29uc3QgY2hhciAqY3B0ciwgUHlfc3NpemVfdCBsZW4pCiB7Ci0gICAgcmVnaXN0ZXIgY29uc3QgdW5zaWduZWQgY2hhciAqcAorICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnAKICAgICAgICAgPSAodW5zaWduZWQgY2hhciAqKSBjcHRyOwotICAgIHJlZ2lzdGVyIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmU7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZTsKICAgICBpbnQgY2FzZWQsIHByZXZpb3VzX2lzX2Nhc2VkOwogCiAgICAgLyogU2hvcnRjdXQgZm9yIHNpbmdsZSBjaGFyYWN0ZXIgc3RyaW5ncyAqLwpAQCAtMjE3LDcgKzIxNyw3IEBACiAgICAgY2FzZWQgPSAwOwogICAgIHByZXZpb3VzX2lzX2Nhc2VkID0gMDsKICAgICBmb3IgKDsgcCA8IGU7IHArKykgewotICAgICAgICByZWdpc3RlciBjb25zdCB1bnNpZ25lZCBjaGFyIGNoID0gKnA7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgY2ggPSAqcDsKIAogICAgICAgICBpZiAoUHlfSVNVUFBFUihjaCkpIHsKICAgICAgICAgICAgIGlmIChwcmV2aW91c19pc19jYXNlZCkKQEAgLTM2Myw0MSArMzYzLDIwIEBACiBpbiBmcm0gaXMgbWFwcGVkIHRvIHRoZSBieXRlIGF0IHRoZSBzYW1lIHBvc2l0aW9uIGluIHRvLlxuXAogVGhlIGJ5dGVzIG9iamVjdHMgZnJtIGFuZCB0byBtdXN0IGJlIG9mIHRoZSBzYW1lIGxlbmd0aC4iKTsKIAotc3RhdGljIFB5X3NzaXplX3QKLV9nZXRidWZmZXIoUHlPYmplY3QgKm9iaiwgUHlfYnVmZmVyICp2aWV3KQotewotICAgIFB5QnVmZmVyUHJvY3MgKmJ1ZmZlciA9IFB5X1RZUEUob2JqKS0+dHBfYXNfYnVmZmVyOwotCi0gICAgaWYgKGJ1ZmZlciA9PSBOVUxMIHx8IGJ1ZmZlci0+YmZfZ2V0YnVmZmVyID09IE5VTEwpCi0gICAgewotICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgIlR5cGUgJS4xMDBzIGRvZXNuJ3Qgc3VwcG9ydCB0aGUgYnVmZmVyIEFQSSIsCi0gICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKG9iaiktPnRwX25hbWUpOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotCi0gICAgaWYgKGJ1ZmZlci0+YmZfZ2V0YnVmZmVyKG9iaiwgdmlldywgUHlCVUZfU0lNUExFKSA8IDApCi0gICAgICAgIHJldHVybiAtMTsKLSAgICByZXR1cm4gdmlldy0+bGVuOwotfQotCiBQeU9iamVjdCAqCiBfUHlfYnl0ZXNfbWFrZXRyYW5zKFB5T2JqZWN0ICphcmdzKQogewotICAgIFB5T2JqZWN0ICpmcm0sICp0bywgKnJlcyA9IE5VTEw7Ci0gICAgUHlfYnVmZmVyIGJmcm0sIGJ0bzsKKyAgICBQeU9iamVjdCAqcmVzID0gTlVMTDsKKyAgICBQeV9idWZmZXIgYmZybSA9IHtOVUxMLCBOVUxMfTsKKyAgICBQeV9idWZmZXIgYnRvID0ge05VTEwsIE5VTEx9OwogICAgIFB5X3NzaXplX3QgaTsKICAgICBjaGFyICpwOwogCiAgICAgYmZybS5sZW4gPSAtMTsKICAgICBidG8ubGVuID0gLTE7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk9POm1ha2V0cmFucyIsICZmcm0sICZ0bykpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ5KnkqOm1ha2V0cmFucyIsICZiZnJtLCAmYnRvKSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKF9nZXRidWZmZXIoZnJtLCAmYmZybSkgPCAwKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAoX2dldGJ1ZmZlcih0bywgJmJ0bykgPCAwKQotICAgICAgICBnb3RvIGRvbmU7CiAgICAgaWYgKGJmcm0ubGVuICE9IGJ0by5sZW4pIHsKICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAibWFrZXRyYW5zIGFyZ3VtZW50cyBtdXN0IGhhdmUgc2FtZSBsZW5ndGgiKTsKQEAgLTQxNSw5ICszOTQsOSBAQAogICAgIH0KIAogZG9uZToKLSAgICBpZiAoYmZybS5sZW4gIT0gLTEpCisgICAgaWYgKGJmcm0ub2JqICE9IE5VTEwpCiAgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmJmcm0pOwotICAgIGlmIChidG8ubGVuICE9IC0xKQorICAgIGlmIChiZnJtLm9iaiAhPSBOVUxMKQogICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZidG8pOwogICAgIHJldHVybiByZXM7CiB9CmRpZmYgLS1naXQgYS9PYmplY3RzL2J5dGVzb2JqZWN0LmMgYi9PYmplY3RzL2J5dGVzb2JqZWN0LmMKaW5kZXggMzJjNWQ3MS4uMjdmNDA2OSAxMDA2NDQKLS0tIGEvT2JqZWN0cy9ieXRlc29iamVjdC5jCisrKyBiL09iamVjdHMvYnl0ZXNvYmplY3QuYwpAQCAtNywyNCArNyw2IEBACiAjaW5jbHVkZSAiYnl0ZXNfbWV0aG9kcy5oIgogI2luY2x1ZGUgPHN0ZGRlZi5oPgogCi1zdGF0aWMgUHlfc3NpemVfdAotX2dldGJ1ZmZlcihQeU9iamVjdCAqb2JqLCBQeV9idWZmZXIgKnZpZXcpCi17Ci0gICAgUHlCdWZmZXJQcm9jcyAqYnVmZmVyID0gUHlfVFlQRShvYmopLT50cF9hc19idWZmZXI7Ci0KLSAgICBpZiAoYnVmZmVyID09IE5VTEwgfHwgYnVmZmVyLT5iZl9nZXRidWZmZXIgPT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAiVHlwZSAlLjEwMHMgZG9lc24ndCBzdXBwb3J0IHRoZSBidWZmZXIgQVBJIiwKLSAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUob2JqKS0+dHBfbmFtZSk7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0KLSAgICBpZiAoYnVmZmVyLT5iZl9nZXRidWZmZXIob2JqLCB2aWV3LCBQeUJVRl9TSU1QTEUpIDwgMCkKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIHJldHVybiB2aWV3LT5sZW47Ci19Ci0KICNpZmRlZiBDT1VOVF9BTExPQ1MKIFB5X3NzaXplX3QgbnVsbF9zdHJpbmdzLCBvbmVfc3RyaW5nczsKICNlbmRpZgpAQCAtNjUsNyArNDcsNyBAQAogUHlPYmplY3QgKgogUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShjb25zdCBjaGFyICpzdHIsIFB5X3NzaXplX3Qgc2l6ZSkKIHsKLSAgICByZWdpc3RlciBQeUJ5dGVzT2JqZWN0ICpvcDsKKyAgICBQeUJ5dGVzT2JqZWN0ICpvcDsKICAgICBpZiAoc2l6ZSA8IDApIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1N5c3RlbUVycm9yLAogICAgICAgICAgICAgIk5lZ2F0aXZlIHNpemUgcGFzc2VkIHRvIFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUiKTsKQEAgLTk4LDcgKzgwLDcgQEAKICAgICBvcCA9IChQeUJ5dGVzT2JqZWN0ICopUHlPYmplY3RfTUFMTE9DKFB5Qnl0ZXNPYmplY3RfU0laRSArIHNpemUpOwogICAgIGlmIChvcCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKLSAgICBQeU9iamVjdF9JTklUX1ZBUihvcCwgJlB5Qnl0ZXNfVHlwZSwgc2l6ZSk7CisgICAgKHZvaWQpUHlPYmplY3RfSU5JVF9WQVIob3AsICZQeUJ5dGVzX1R5cGUsIHNpemUpOwogICAgIG9wLT5vYl9zaGFzaCA9IC0xOwogICAgIGlmIChzdHIgIT0gTlVMTCkKICAgICAgICAgUHlfTUVNQ1BZKG9wLT5vYl9zdmFsLCBzdHIsIHNpemUpOwpAQCAtMTE3LDggKzk5LDggQEAKIFB5T2JqZWN0ICoKIFB5Qnl0ZXNfRnJvbVN0cmluZyhjb25zdCBjaGFyICpzdHIpCiB7Ci0gICAgcmVnaXN0ZXIgc2l6ZV90IHNpemU7Ci0gICAgcmVnaXN0ZXIgUHlCeXRlc09iamVjdCAqb3A7CisgICAgc2l6ZV90IHNpemU7CisgICAgUHlCeXRlc09iamVjdCAqb3A7CiAKICAgICBhc3NlcnQoc3RyICE9IE5VTEwpOwogICAgIHNpemUgPSBzdHJsZW4oc3RyKTsKQEAgLTE0Niw3ICsxMjgsNyBAQAogICAgIG9wID0gKFB5Qnl0ZXNPYmplY3QgKilQeU9iamVjdF9NQUxMT0MoUHlCeXRlc09iamVjdF9TSVpFICsgc2l6ZSk7CiAgICAgaWYgKG9wID09IE5VTEwpCiAgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOwotICAgIFB5T2JqZWN0X0lOSVRfVkFSKG9wLCAmUHlCeXRlc19UeXBlLCBzaXplKTsKKyAgICAodm9pZClQeU9iamVjdF9JTklUX1ZBUihvcCwgJlB5Qnl0ZXNfVHlwZSwgc2l6ZSk7CiAgICAgb3AtPm9iX3NoYXNoID0gLTE7CiAgICAgUHlfTUVNQ1BZKG9wLT5vYl9zdmFsLCBzdHIsIHNpemUrMSk7CiAgICAgLyogc2hhcmUgc2hvcnQgc3RyaW5ncyAqLwpAQCAtNTE3LDcgKzQ5OSw3IEBACiAvKiBvYmplY3QgYXBpICovCiAKIFB5X3NzaXplX3QKLVB5Qnl0ZXNfU2l6ZShyZWdpc3RlciBQeU9iamVjdCAqb3ApCitQeUJ5dGVzX1NpemUoUHlPYmplY3QgKm9wKQogewogICAgIGlmICghUHlCeXRlc19DaGVjayhvcCkpIHsKICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKQEAgLTUyOCw3ICs1MTAsNyBAQAogfQogCiBjaGFyICoKLVB5Qnl0ZXNfQXNTdHJpbmcocmVnaXN0ZXIgUHlPYmplY3QgKm9wKQorUHlCeXRlc19Bc1N0cmluZyhQeU9iamVjdCAqb3ApCiB7CiAgICAgaWYgKCFQeUJ5dGVzX0NoZWNrKG9wKSkgewogICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLApAQCAtNTM5LDkgKzUyMSw5IEBACiB9CiAKIGludAotUHlCeXRlc19Bc1N0cmluZ0FuZFNpemUocmVnaXN0ZXIgUHlPYmplY3QgKm9iaiwKLSAgICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RlciBjaGFyICoqcywKLSAgICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RlciBQeV9zc2l6ZV90ICpsZW4pCitQeUJ5dGVzX0FzU3RyaW5nQW5kU2l6ZShQeU9iamVjdCAqb2JqLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipzLAorICAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgKmxlbikKIHsKICAgICBpZiAocyA9PSBOVUxMKSB7CiAgICAgICAgIFB5RXJyX0JhZEludGVybmFsQ2FsbCgpOwpAQCAtNTczLDYgKzU1NSw3IEBACiAjaW5jbHVkZSAic3RyaW5nbGliL2Zhc3RzZWFyY2guaCIKICNpbmNsdWRlICJzdHJpbmdsaWIvY291bnQuaCIKICNpbmNsdWRlICJzdHJpbmdsaWIvZmluZC5oIgorI2luY2x1ZGUgInN0cmluZ2xpYi9qb2luLmgiCiAjaW5jbHVkZSAic3RyaW5nbGliL3BhcnRpdGlvbi5oIgogI2luY2x1ZGUgInN0cmluZ2xpYi9zcGxpdC5oIgogI2luY2x1ZGUgInN0cmluZ2xpYi9jdHlwZS5oIgpAQCAtNTgyLDcgKzU2NSw3IEBACiBQeU9iamVjdCAqCiBQeUJ5dGVzX1JlcHIoUHlPYmplY3QgKm9iaiwgaW50IHNtYXJ0cXVvdGVzKQogewotICAgIHJlZ2lzdGVyIFB5Qnl0ZXNPYmplY3QqIG9wID0gKFB5Qnl0ZXNPYmplY3QqKSBvYmo7CisgICAgUHlCeXRlc09iamVjdCogb3AgPSAoUHlCeXRlc09iamVjdCopIG9iajsKICAgICBQeV9zc2l6ZV90IGksIGxlbmd0aCA9IFB5X1NJWkUob3ApOwogICAgIFB5X3NzaXplX3QgbmV3c2l6ZSwgc3F1b3RlcywgZHF1b3RlczsKICAgICBQeU9iamVjdCAqdjsKQEAgLTY4NSw4ICs2NjgsOCBAQAogCiAgICAgdmEubGVuID0gLTE7CiAgICAgdmIubGVuID0gLTE7Ci0gICAgaWYgKF9nZXRidWZmZXIoYSwgJnZhKSA8IDAgIHx8Ci0gICAgICAgIF9nZXRidWZmZXIoYiwgJnZiKSA8IDApIHsKKyAgICBpZiAoUHlPYmplY3RfR2V0QnVmZmVyKGEsICZ2YSwgUHlCVUZfU0lNUExFKSAhPSAwIHx8CisgICAgICAgIFB5T2JqZWN0X0dldEJ1ZmZlcihiLCAmdmIsIFB5QlVGX1NJTVBMRSkgIT0gMCkgewogICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLCAiY2FuJ3QgY29uY2F0ICUuMTAwcyB0byAlLjEwMHMiLAogICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRShhKS0+dHBfbmFtZSwgUHlfVFlQRShiKS0+dHBfbmFtZSk7CiAgICAgICAgIGdvdG8gZG9uZTsKQEAgLTcyNSwxMiArNzA4LDEyIEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1ieXRlc19yZXBlYXQocmVnaXN0ZXIgUHlCeXRlc09iamVjdCAqYSwgcmVnaXN0ZXIgUHlfc3NpemVfdCBuKQorYnl0ZXNfcmVwZWF0KFB5Qnl0ZXNPYmplY3QgKmEsIFB5X3NzaXplX3QgbikKIHsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGk7Ci0gICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBqOwotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3Qgc2l6ZTsKLSAgICByZWdpc3RlciBQeUJ5dGVzT2JqZWN0ICpvcDsKKyAgICBQeV9zc2l6ZV90IGk7CisgICAgUHlfc3NpemVfdCBqOworICAgIFB5X3NzaXplX3Qgc2l6ZTsKKyAgICBQeUJ5dGVzT2JqZWN0ICpvcDsKICAgICBzaXplX3QgbmJ5dGVzOwogICAgIGlmIChuIDwgMCkKICAgICAgICAgbiA9IDA7CkBAIC03NTYsNyArNzM5LDcgQEAKICAgICBvcCA9IChQeUJ5dGVzT2JqZWN0ICopUHlPYmplY3RfTUFMTE9DKFB5Qnl0ZXNPYmplY3RfU0laRSArIG5ieXRlcyk7CiAgICAgaWYgKG9wID09IE5VTEwpCiAgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOwotICAgIFB5T2JqZWN0X0lOSVRfVkFSKG9wLCAmUHlCeXRlc19UeXBlLCBzaXplKTsKKyAgICAodm9pZClQeU9iamVjdF9JTklUX1ZBUihvcCwgJlB5Qnl0ZXNfVHlwZSwgc2l6ZSk7CiAgICAgb3AtPm9iX3NoYXNoID0gLTE7CiAgICAgb3AtPm9iX3N2YWxbc2l6ZV0gPSAnXDAnOwogICAgIGlmIChQeV9TSVpFKGEpID09IDEgJiYgbiA+IDApIHsKQEAgLTc4NCw3ICs3NjcsNyBAQAogICAgICAgICBQeV9idWZmZXIgdmFyZzsKICAgICAgICAgUHlfc3NpemVfdCBwb3M7CiAgICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgICAgIGlmIChfZ2V0YnVmZmVyKGFyZywgJnZhcmcpIDwgMCkKKyAgICAgICAgaWYgKFB5T2JqZWN0X0dldEJ1ZmZlcihhcmcsICZ2YXJnLCBQeUJVRl9TSU1QTEUpICE9IDApCiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIHBvcyA9IHN0cmluZ2xpYl9maW5kKFB5Qnl0ZXNfQVNfU1RSSU5HKHNlbGYpLCBQeV9TSVpFKHNlbGYpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJnLmJ1ZiwgdmFyZy5sZW4sIDApOwpAQCAtODAwLDcgKzc4Myw3IEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1ieXRlc19pdGVtKFB5Qnl0ZXNPYmplY3QgKmEsIHJlZ2lzdGVyIFB5X3NzaXplX3QgaSkKK2J5dGVzX2l0ZW0oUHlCeXRlc09iamVjdCAqYSwgUHlfc3NpemVfdCBpKQogewogICAgIGlmIChpIDwgMCB8fCBpID49IFB5X1NJWkUoYSkpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0luZGV4RXJyb3IsICJpbmRleCBvdXQgb2YgcmFuZ2UiKTsKQEAgLTgwOSw2ICs3OTIsMjMgQEAKICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKCh1bnNpZ25lZCBjaGFyKWEtPm9iX3N2YWxbaV0pOwogfQogCitQeV9MT0NBTChpbnQpCitieXRlc19jb21wYXJlX2VxKFB5Qnl0ZXNPYmplY3QgKmEsIFB5Qnl0ZXNPYmplY3QgKmIpCit7CisgICAgaW50IGNtcDsKKyAgICBQeV9zc2l6ZV90IGxlbjsKKworICAgIGxlbiA9IFB5X1NJWkUoYSk7CisgICAgaWYgKFB5X1NJWkUoYikgIT0gbGVuKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChhLT5vYl9zdmFsWzBdICE9IGItPm9iX3N2YWxbMF0pCisgICAgICAgIHJldHVybiAwOworCisgICAgY21wID0gbWVtY21wKGEtPm9iX3N2YWwsIGItPm9iX3N2YWwsIGxlbik7CisgICAgcmV0dXJuIChjbXAgPT0gMCk7Cit9CisKIHN0YXRpYyBQeU9iamVjdCoKIGJ5dGVzX3JpY2hjb21wYXJlKFB5Qnl0ZXNPYmplY3QgKmEsIFB5Qnl0ZXNPYmplY3QgKmIsIGludCBvcCkKIHsKQEAgLTgxNiw2NiArODE2LDc0IEBACiAgICAgUHlfc3NpemVfdCBsZW5fYSwgbGVuX2I7CiAgICAgUHlfc3NpemVfdCBtaW5fbGVuOwogICAgIFB5T2JqZWN0ICpyZXN1bHQ7CisgICAgaW50IHJjOwogCiAgICAgLyogTWFrZSBzdXJlIGJvdGggYXJndW1lbnRzIGFyZSBzdHJpbmdzLiAqLwogICAgIGlmICghKFB5Qnl0ZXNfQ2hlY2soYSkgJiYgUHlCeXRlc19DaGVjayhiKSkpIHsKLSAgICAgICAgaWYgKFB5X0J5dGVzV2FybmluZ0ZsYWcgJiYgKG9wID09IFB5X0VRIHx8IG9wID09IFB5X05FKSAmJgotICAgICAgICAgICAgKFB5T2JqZWN0X0lzSW5zdGFuY2UoKFB5T2JqZWN0KilhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFB5T2JqZWN0KikmUHlVbmljb2RlX1R5cGUpIHx8Ci0gICAgICAgICAgICBQeU9iamVjdF9Jc0luc3RhbmNlKChQeU9iamVjdCopYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQeU9iamVjdCopJlB5VW5pY29kZV9UeXBlKSkpIHsKLSAgICAgICAgICAgIGlmIChQeUVycl9XYXJuRXgoUHlFeGNfQnl0ZXNXYXJuaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgIkNvbXBhcmlzb24gYmV0d2VlbiBieXRlcyBhbmQgc3RyaW5nIiwgMSkpCisgICAgICAgIGlmIChQeV9CeXRlc1dhcm5pbmdGbGFnICYmIChvcCA9PSBQeV9FUSB8fCBvcCA9PSBQeV9ORSkpIHsKKyAgICAgICAgICAgIHJjID0gUHlPYmplY3RfSXNJbnN0YW5jZSgoUHlPYmplY3QqKWEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFB5T2JqZWN0KikmUHlVbmljb2RlX1R5cGUpOworICAgICAgICAgICAgaWYgKCFyYykKKyAgICAgICAgICAgICAgICByYyA9IFB5T2JqZWN0X0lzSW5zdGFuY2UoKFB5T2JqZWN0KiliLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUHlPYmplY3QqKSZQeVVuaWNvZGVfVHlwZSk7CisgICAgICAgICAgICBpZiAocmMgPCAwKQogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgaWYgKHJjKSB7CisgICAgICAgICAgICAgICAgaWYgKFB5RXJyX1dhcm5FeChQeUV4Y19CeXRlc1dhcm5pbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ29tcGFyaXNvbiBiZXR3ZWVuIGJ5dGVzIGFuZCBzdHJpbmciLCAxKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcmVzdWx0ID0gUHlfTm90SW1wbGVtZW50ZWQ7Ci0gICAgICAgIGdvdG8gb3V0OwogICAgIH0KLSAgICBpZiAoYSA9PSBiKSB7CisgICAgZWxzZSBpZiAoYSA9PSBiKSB7CiAgICAgICAgIHN3aXRjaCAob3ApIHsKLSAgICAgICAgY2FzZSBQeV9FUTpjYXNlIFB5X0xFOmNhc2UgUHlfR0U6CisgICAgICAgIGNhc2UgUHlfRVE6CisgICAgICAgIGNhc2UgUHlfTEU6CisgICAgICAgIGNhc2UgUHlfR0U6CisgICAgICAgICAgICAvKiBhIHN0cmluZyBpcyBlcXVhbCB0byBpdHNlbGYgKi8KICAgICAgICAgICAgIHJlc3VsdCA9IFB5X1RydWU7Ci0gICAgICAgICAgICBnb3RvIG91dDsKLSAgICAgICAgY2FzZSBQeV9ORTpjYXNlIFB5X0xUOmNhc2UgUHlfR1Q6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQeV9ORToKKyAgICAgICAgY2FzZSBQeV9MVDoKKyAgICAgICAgY2FzZSBQeV9HVDoKICAgICAgICAgICAgIHJlc3VsdCA9IFB5X0ZhbHNlOwotICAgICAgICAgICAgZ290byBvdXQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFB5RXJyX0JhZEFyZ3VtZW50KCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQogICAgIH0KLSAgICBpZiAob3AgPT0gUHlfRVEpIHsKLSAgICAgICAgLyogU3VwcG9ydGluZyBQeV9ORSBoZXJlIGFzIHdlbGwgZG9lcyBub3Qgc2F2ZQotICAgICAgICAgICBtdWNoIHRpbWUsIHNpbmNlIFB5X05FIGlzIHJhcmVseSB1c2VkLiAgKi8KLSAgICAgICAgaWYgKFB5X1NJWkUoYSkgPT0gUHlfU0laRShiKQotICAgICAgICAgICAgJiYgKGEtPm9iX3N2YWxbMF0gPT0gYi0+b2Jfc3ZhbFswXQotICAgICAgICAgICAgJiYgbWVtY21wKGEtPm9iX3N2YWwsIGItPm9iX3N2YWwsIFB5X1NJWkUoYSkpID09IDApKSB7Ci0gICAgICAgICAgICByZXN1bHQgPSBQeV9UcnVlOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmVzdWx0ID0gUHlfRmFsc2U7CisgICAgZWxzZSBpZiAob3AgPT0gUHlfRVEgfHwgb3AgPT0gUHlfTkUpIHsKKyAgICAgICAgaW50IGVxID0gYnl0ZXNfY29tcGFyZV9lcShhLCBiKTsKKyAgICAgICAgZXEgXj0gKG9wID09IFB5X05FKTsKKyAgICAgICAgcmVzdWx0ID0gZXEgPyBQeV9UcnVlIDogUHlfRmFsc2U7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBsZW5fYSA9IFB5X1NJWkUoYSk7CisgICAgICAgIGxlbl9iID0gUHlfU0laRShiKTsKKyAgICAgICAgbWluX2xlbiA9IFB5X01JTihsZW5fYSwgbGVuX2IpOworICAgICAgICBpZiAobWluX2xlbiA+IDApIHsKKyAgICAgICAgICAgIGMgPSBQeV9DSEFSTUFTSygqYS0+b2Jfc3ZhbCkgLSBQeV9DSEFSTUFTSygqYi0+b2Jfc3ZhbCk7CisgICAgICAgICAgICBpZiAoYyA9PSAwKQorICAgICAgICAgICAgICAgIGMgPSBtZW1jbXAoYS0+b2Jfc3ZhbCwgYi0+b2Jfc3ZhbCwgbWluX2xlbik7CiAgICAgICAgIH0KLSAgICAgICAgZ290byBvdXQ7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGMgPSAwOworICAgICAgICBpZiAoYyA9PSAwKQorICAgICAgICAgICAgYyA9IChsZW5fYSA8IGxlbl9iKSA/IC0xIDogKGxlbl9hID4gbGVuX2IpID8gMSA6IDA7CisgICAgICAgIHN3aXRjaCAob3ApIHsKKyAgICAgICAgY2FzZSBQeV9MVDogYyA9IGMgPCAgMDsgYnJlYWs7CisgICAgICAgIGNhc2UgUHlfTEU6IGMgPSBjIDw9IDA7IGJyZWFrOworICAgICAgICBjYXNlIFB5X0dUOiBjID0gYyA+ICAwOyBicmVhazsKKyAgICAgICAgY2FzZSBQeV9HRTogYyA9IGMgPj0gMDsgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBQeUVycl9CYWRBcmd1bWVudCgpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgcmVzdWx0ID0gYyA/IFB5X1RydWUgOiBQeV9GYWxzZTsKICAgICB9Ci0gICAgbGVuX2EgPSBQeV9TSVpFKGEpOyBsZW5fYiA9IFB5X1NJWkUoYik7Ci0gICAgbWluX2xlbiA9IChsZW5fYSA8IGxlbl9iKSA/IGxlbl9hIDogbGVuX2I7Ci0gICAgaWYgKG1pbl9sZW4gPiAwKSB7Ci0gICAgICAgIGMgPSBQeV9DSEFSTUFTSygqYS0+b2Jfc3ZhbCkgLSBQeV9DSEFSTUFTSygqYi0+b2Jfc3ZhbCk7Ci0gICAgICAgIGlmIChjPT0wKQotICAgICAgICAgICAgYyA9IG1lbWNtcChhLT5vYl9zdmFsLCBiLT5vYl9zdmFsLCBtaW5fbGVuKTsKLSAgICB9IGVsc2UKLSAgICAgICAgYyA9IDA7Ci0gICAgaWYgKGMgPT0gMCkKLSAgICAgICAgYyA9IChsZW5fYSA8IGxlbl9iKSA/IC0xIDogKGxlbl9hID4gbGVuX2IpID8gMSA6IDA7Ci0gICAgc3dpdGNoIChvcCkgewotICAgIGNhc2UgUHlfTFQ6IGMgPSBjIDwgIDA7IGJyZWFrOwotICAgIGNhc2UgUHlfTEU6IGMgPSBjIDw9IDA7IGJyZWFrOwotICAgIGNhc2UgUHlfRVE6IGFzc2VydCgwKTsgIGJyZWFrOyAvKiB1bnJlYWNoYWJsZSAqLwotICAgIGNhc2UgUHlfTkU6IGMgPSBjICE9IDA7IGJyZWFrOwotICAgIGNhc2UgUHlfR1Q6IGMgPSBjID4gIDA7IGJyZWFrOwotICAgIGNhc2UgUHlfR0U6IGMgPSBjID49IDA7IGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJlc3VsdCA9IFB5X05vdEltcGxlbWVudGVkOwotICAgICAgICBnb3RvIG91dDsKLSAgICB9Ci0gICAgcmVzdWx0ID0gYyA/IFB5X1RydWUgOiBQeV9GYWxzZTsKLSAgb3V0OgorCiAgICAgUHlfSU5DUkVGKHJlc3VsdCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTg4NSw3ICs4OTMsNyBAQAogewogICAgIGlmIChhLT5vYl9zaGFzaCA9PSAtMSkgewogICAgICAgICAvKiBDYW4ndCBmYWlsICovCi0gICAgICAgIGEtPm9iX3NoYXNoID0gX1B5X0hhc2hCeXRlcygodW5zaWduZWQgY2hhciAqKSBhLT5vYl9zdmFsLCBQeV9TSVpFKGEpKTsKKyAgICAgICAgYS0+b2Jfc2hhc2ggPSBfUHlfSGFzaEJ5dGVzKGEtPm9iX3N2YWwsIFB5X1NJWkUoYSkpOwogICAgIH0KICAgICByZXR1cm4gYS0+b2Jfc2hhc2g7CiB9CkBAIC0xMDE5LDcgKzEwMjcsNyBAQAogICAgICAgICBtYXhzcGxpdCA9IFBZX1NTSVpFX1RfTUFYOwogICAgIGlmIChzdWJvYmogPT0gUHlfTm9uZSkKICAgICAgICAgcmV0dXJuIHN0cmluZ2xpYl9zcGxpdF93aGl0ZXNwYWNlKChQeU9iamVjdCopIHNlbGYsIHMsIGxlbiwgbWF4c3BsaXQpOwotICAgIGlmIChfZ2V0YnVmZmVyKHN1Ym9iaiwgJnZzdWIpIDwgMCkKKyAgICBpZiAoUHlPYmplY3RfR2V0QnVmZmVyKHN1Ym9iaiwgJnZzdWIsIFB5QlVGX1NJTVBMRSkgIT0gMCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgc3ViID0gdnN1Yi5idWY7CiAgICAgbiA9IHZzdWIubGVuOwpAQCAtMTAzOSwyMSArMTA0NywxOSBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGJ5dGVzX3BhcnRpdGlvbihQeUJ5dGVzT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqc2VwX29iaikKIHsKLSAgICBjb25zdCBjaGFyICpzZXA7Ci0gICAgUHlfc3NpemVfdCBzZXBfbGVuOworICAgIFB5X2J1ZmZlciBzZXAgPSB7TlVMTCwgTlVMTH07CisgICAgUHlPYmplY3QgKnJlczsKIAotICAgIGlmIChQeUJ5dGVzX0NoZWNrKHNlcF9vYmopKSB7Ci0gICAgICAgIHNlcCA9IFB5Qnl0ZXNfQVNfU1RSSU5HKHNlcF9vYmopOwotICAgICAgICBzZXBfbGVuID0gUHlCeXRlc19HRVRfU0laRShzZXBfb2JqKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoUHlPYmplY3RfQXNDaGFyQnVmZmVyKHNlcF9vYmosICZzZXAsICZzZXBfbGVuKSkKKyAgICBpZiAoUHlPYmplY3RfR2V0QnVmZmVyKHNlcF9vYmosICZzZXAsIFB5QlVGX1NJTVBMRSkgIT0gMCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICByZXR1cm4gc3RyaW5nbGliX3BhcnRpdGlvbigKKyAgICByZXMgPSBzdHJpbmdsaWJfcGFydGl0aW9uKAogICAgICAgICAoUHlPYmplY3QqKSBzZWxmLAogICAgICAgICBQeUJ5dGVzX0FTX1NUUklORyhzZWxmKSwgUHlCeXRlc19HRVRfU0laRShzZWxmKSwKLSAgICAgICAgc2VwX29iaiwgc2VwLCBzZXBfbGVuCisgICAgICAgIHNlcF9vYmosIHNlcC5idWYsIHNlcC5sZW4KICAgICAgICAgKTsKKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZzZXApOworICAgIHJldHVybiByZXM7CiB9CiAKIFB5RG9jX1NUUlZBUihycGFydGl0aW9uX19kb2NfXywKQEAgLTEwNjcsMjEgKzEwNzMsMTkgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBieXRlc19ycGFydGl0aW9uKFB5Qnl0ZXNPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpzZXBfb2JqKQogewotICAgIGNvbnN0IGNoYXIgKnNlcDsKLSAgICBQeV9zc2l6ZV90IHNlcF9sZW47CisgICAgUHlfYnVmZmVyIHNlcCA9IHtOVUxMLCBOVUxMfTsKKyAgICBQeU9iamVjdCAqcmVzOwogCi0gICAgaWYgKFB5Qnl0ZXNfQ2hlY2soc2VwX29iaikpIHsKLSAgICAgICAgc2VwID0gUHlCeXRlc19BU19TVFJJTkcoc2VwX29iaik7Ci0gICAgICAgIHNlcF9sZW4gPSBQeUJ5dGVzX0dFVF9TSVpFKHNlcF9vYmopOwotICAgIH0KLSAgICBlbHNlIGlmIChQeU9iamVjdF9Bc0NoYXJCdWZmZXIoc2VwX29iaiwgJnNlcCwgJnNlcF9sZW4pKQorICAgIGlmIChQeU9iamVjdF9HZXRCdWZmZXIoc2VwX29iaiwgJnNlcCwgUHlCVUZfU0lNUExFKSAhPSAwKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIHJldHVybiBzdHJpbmdsaWJfcnBhcnRpdGlvbigKKyAgICByZXMgPSBzdHJpbmdsaWJfcnBhcnRpdGlvbigKICAgICAgICAgKFB5T2JqZWN0Kikgc2VsZiwKICAgICAgICAgUHlCeXRlc19BU19TVFJJTkcoc2VsZiksIFB5Qnl0ZXNfR0VUX1NJWkUoc2VsZiksCi0gICAgICAgIHNlcF9vYmosIHNlcCwgc2VwX2xlbgorICAgICAgICBzZXBfb2JqLCBzZXAuYnVmLCBzZXAubGVuCiAgICAgICAgICk7CisgICAgUHlCdWZmZXJfUmVsZWFzZSgmc2VwKTsKKyAgICByZXR1cm4gcmVzOwogfQogCiBQeURvY19TVFJWQVIocnNwbGl0X19kb2NfXywKQEAgLTExMTEsNyArMTExNSw3IEBACiAgICAgICAgIG1heHNwbGl0ID0gUFlfU1NJWkVfVF9NQVg7CiAgICAgaWYgKHN1Ym9iaiA9PSBQeV9Ob25lKQogICAgICAgICByZXR1cm4gc3RyaW5nbGliX3JzcGxpdF93aGl0ZXNwYWNlKChQeU9iamVjdCopIHNlbGYsIHMsIGxlbiwgbWF4c3BsaXQpOwotICAgIGlmIChfZ2V0YnVmZmVyKHN1Ym9iaiwgJnZzdWIpIDwgMCkKKyAgICBpZiAoUHlPYmplY3RfR2V0QnVmZmVyKHN1Ym9iaiwgJnZzdWIsIFB5QlVGX1NJTVBMRSkgIT0gMCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgc3ViID0gdnN1Yi5idWY7CiAgICAgbiA9IHZzdWIubGVuOwpAQCAtMTEyOSw5NCArMTEzMyw5IEBACiBFeGFtcGxlOiBiJy4nLmpvaW4oW2InYWInLCBiJ3BxJywgYidycyddKSAtPiBiJ2FiLnBxLnJzJy4iKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLWJ5dGVzX2pvaW4oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpvcmlnKQorYnl0ZXNfam9pbihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKml0ZXJhYmxlKQogewotICAgIGNoYXIgKnNlcCA9IFB5Qnl0ZXNfQVNfU1RSSU5HKHNlbGYpOwotICAgIGNvbnN0IFB5X3NzaXplX3Qgc2VwbGVuID0gUHlCeXRlc19HRVRfU0laRShzZWxmKTsKLSAgICBQeU9iamVjdCAqcmVzID0gTlVMTDsKLSAgICBjaGFyICpwOwotICAgIFB5X3NzaXplX3Qgc2VxbGVuID0gMDsKLSAgICBzaXplX3Qgc3ogPSAwOwotICAgIFB5X3NzaXplX3QgaTsKLSAgICBQeU9iamVjdCAqc2VxLCAqaXRlbTsKLQotICAgIHNlcSA9IFB5U2VxdWVuY2VfRmFzdChvcmlnLCAiIik7Ci0gICAgaWYgKHNlcSA9PSBOVUxMKSB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIHNlcWxlbiA9IFB5U2VxdWVuY2VfU2l6ZShzZXEpOwotICAgIGlmIChzZXFsZW4gPT0gMCkgewotICAgICAgICBQeV9ERUNSRUYoc2VxKTsKLSAgICAgICAgcmV0dXJuIFB5Qnl0ZXNfRnJvbVN0cmluZygiIik7Ci0gICAgfQotICAgIGlmIChzZXFsZW4gPT0gMSkgewotICAgICAgICBpdGVtID0gUHlTZXF1ZW5jZV9GYXN0X0dFVF9JVEVNKHNlcSwgMCk7Ci0gICAgICAgIGlmIChQeUJ5dGVzX0NoZWNrRXhhY3QoaXRlbSkpIHsKLSAgICAgICAgICAgIFB5X0lOQ1JFRihpdGVtKTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihzZXEpOwotICAgICAgICAgICAgcmV0dXJuIGl0ZW07Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKiBUaGVyZSBhcmUgYXQgbGVhc3QgdHdvIHRoaW5ncyB0byBqb2luLCBvciBlbHNlIHdlIGhhdmUgYSBzdWJjbGFzcwotICAgICAqIG9mIHRoZSBidWlsdGluIHR5cGVzIGluIHRoZSBzZXF1ZW5jZS4KLSAgICAgKiBEbyBhIHByZS1wYXNzIHRvIGZpZ3VyZSBvdXQgdGhlIHRvdGFsIGFtb3VudCBvZiBzcGFjZSB3ZSdsbAotICAgICAqIG5lZWQgKHN6KSwgYW5kIHNlZSB3aGV0aGVyIGFsbCBhcmd1bWVudCBhcmUgYnl0ZXMuCi0gICAgICovCi0gICAgLyogWFhYIFNob3VsZG4ndCB3ZSB1c2UgX2dldGJ1ZmZlcigpIG9uIHRoZXNlIGl0ZW1zIGluc3RlYWQ/ICovCi0gICAgZm9yIChpID0gMDsgaSA8IHNlcWxlbjsgaSsrKSB7Ci0gICAgICAgIGNvbnN0IHNpemVfdCBvbGRfc3ogPSBzejsKLSAgICAgICAgaXRlbSA9IFB5U2VxdWVuY2VfRmFzdF9HRVRfSVRFTShzZXEsIGkpOwotICAgICAgICBpZiAoIVB5Qnl0ZXNfQ2hlY2soaXRlbSkgJiYgIVB5Qnl0ZUFycmF5X0NoZWNrKGl0ZW0pKSB7Ci0gICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICJzZXF1ZW5jZSBpdGVtICV6ZDogZXhwZWN0ZWQgYnl0ZXMsIgotICAgICAgICAgICAgICAgICAgICAgICAgICIgJS44MHMgZm91bmQiLAotICAgICAgICAgICAgICAgICAgICAgICAgIGksIFB5X1RZUEUoaXRlbSktPnRwX25hbWUpOwotICAgICAgICAgICAgUHlfREVDUkVGKHNlcSk7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAgICAgICBzeiArPSBQeV9TSVpFKGl0ZW0pOwotICAgICAgICBpZiAoaSAhPSAwKQotICAgICAgICAgICAgc3ogKz0gc2VwbGVuOwotICAgICAgICBpZiAoc3ogPCBvbGRfc3ogfHwgc3ogPiBQWV9TU0laRV9UX01BWCkgewotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCi0gICAgICAgICAgICAgICAgImpvaW4oKSByZXN1bHQgaXMgdG9vIGxvbmcgZm9yIGJ5dGVzIik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYoc2VxKTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyogQWxsb2NhdGUgcmVzdWx0IHNwYWNlLiAqLwotICAgIHJlcyA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoKGNoYXIqKU5VTEwsIHN6KTsKLSAgICBpZiAocmVzID09IE5VTEwpIHsKLSAgICAgICAgUHlfREVDUkVGKHNlcSk7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIC8qIENhdGVuYXRlIGV2ZXJ5dGhpbmcuICovCi0gICAgLyogSSdtIG5vdCB3b3JyaWVkIGFib3V0IGEgUHlCeXRlQXJyYXkgaXRlbSBncm93aW5nIGJlY2F1c2UgdGhlcmUncwotICAgICAgIG5vd2hlcmUgaW4gdGhpcyBmdW5jdGlvbiB3aGVyZSB3ZSByZWxlYXNlIHRoZSBHSUwuICovCi0gICAgcCA9IFB5Qnl0ZXNfQVNfU1RSSU5HKHJlcyk7Ci0gICAgZm9yIChpID0gMDsgaSA8IHNlcWxlbjsgKytpKSB7Ci0gICAgICAgIHNpemVfdCBuOwotICAgICAgICBjaGFyICpxOwotICAgICAgICBpZiAoaSkgewotICAgICAgICAgICAgUHlfTUVNQ1BZKHAsIHNlcCwgc2VwbGVuKTsKLSAgICAgICAgICAgIHAgKz0gc2VwbGVuOwotICAgICAgICB9Ci0gICAgICAgIGl0ZW0gPSBQeVNlcXVlbmNlX0Zhc3RfR0VUX0lURU0oc2VxLCBpKTsKLSAgICAgICAgbiA9IFB5X1NJWkUoaXRlbSk7Ci0gICAgICAgIGlmIChQeUJ5dGVzX0NoZWNrKGl0ZW0pKQotICAgICAgICAgICAgcSA9IFB5Qnl0ZXNfQVNfU1RSSU5HKGl0ZW0pOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBxID0gUHlCeXRlQXJyYXlfQVNfU1RSSU5HKGl0ZW0pOwotICAgICAgICBQeV9NRU1DUFkocCwgcSwgbik7Ci0gICAgICAgIHAgKz0gbjsKLSAgICB9Ci0KLSAgICBQeV9ERUNSRUYoc2VxKTsKLSAgICByZXR1cm4gcmVzOworICAgIHJldHVybiBzdHJpbmdsaWJfYnl0ZXNfam9pbihzZWxmLCBpdGVyYWJsZSk7CiB9CiAKIFB5T2JqZWN0ICoKQEAgLTEyNTgsNyArMTE3Nyw3IEBACiAgICAgICAgIHJldHVybiAtMjsKIAogICAgIGlmIChzdWJvYmopIHsKLSAgICAgICAgaWYgKF9nZXRidWZmZXIoc3Vib2JqLCAmc3ViYnVmKSA8IDApCisgICAgICAgIGlmIChQeU9iamVjdF9HZXRCdWZmZXIoc3Vib2JqLCAmc3ViYnVmLCBQeUJVRl9TSU1QTEUpICE9IDApCiAgICAgICAgICAgICByZXR1cm4gLTI7CiAKICAgICAgICAgc3ViID0gc3ViYnVmLmJ1ZjsKQEAgLTEzNzMsNyArMTI5Miw3IEBACiAgICAgUHlfc3NpemVfdCBzZXBsZW47CiAgICAgUHlfc3NpemVfdCBpLCBqOwogCi0gICAgaWYgKF9nZXRidWZmZXIoc2Vwb2JqLCAmdnNlcCkgPCAwKQorICAgIGlmIChQeU9iamVjdF9HZXRCdWZmZXIoc2Vwb2JqLCAmdnNlcCwgUHlCVUZfU0lNUExFKSAhPSAwKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBzZXAgPSB2c2VwLmJ1ZjsKICAgICBzZXBsZW4gPSB2c2VwLmxlbjsKQEAgLTE0MzksNyArMTM1OCw3IEBACiB7CiAgICAgUHlPYmplY3QgKnNlcCA9IE5VTEw7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgKGNoYXIgKilzdHJpcGZvcm1hdFtzdHJpcHR5cGVdLCAmc2VwKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgc3RyaXBmb3JtYXRbc3RyaXB0eXBlXSwgJnNlcCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgaWYgKHNlcCAhPSBOVUxMICYmIHNlcCAhPSBQeV9Ob25lKSB7CkBAIC0xNTE4LDcgKzE0MzcsNyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGlmIChzdWJfb2JqKSB7Ci0gICAgICAgIGlmIChfZ2V0YnVmZmVyKHN1Yl9vYmosICZ2c3ViKSA8IDApCisgICAgICAgIGlmIChQeU9iamVjdF9HZXRCdWZmZXIoc3ViX29iaiwgJnZzdWIsIFB5QlVGX1NJTVBMRSkgIT0gMCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgICAgIHN1YiA9IHZzdWIuYnVmOwpAQCAtMTU1Myw5ICsxNDcyLDExIEBACiBzdGF0aWMgUHlPYmplY3QgKgogYnl0ZXNfdHJhbnNsYXRlKFB5Qnl0ZXNPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIHJlZ2lzdGVyIGNoYXIgKmlucHV0LCAqb3V0cHV0OworICAgIGNoYXIgKmlucHV0LCAqb3V0cHV0OworICAgIFB5X2J1ZmZlciB0YWJsZV92aWV3ID0ge05VTEwsIE5VTEx9OworICAgIFB5X2J1ZmZlciBkZWxfdGFibGVfdmlldyA9IHtOVUxMLCBOVUxMfTsKICAgICBjb25zdCBjaGFyICp0YWJsZTsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGksIGMsIGNoYW5nZWQgPSAwOworICAgIFB5X3NzaXplX3QgaSwgYywgY2hhbmdlZCA9IDA7CiAgICAgUHlPYmplY3QgKmlucHV0X29iaiA9IChQeU9iamVjdCopc2VsZjsKICAgICBjb25zdCBjaGFyICpvdXRwdXRfc3RhcnQsICpkZWxfdGFibGU9TlVMTDsKICAgICBQeV9zc2l6ZV90IGlubGVuLCB0YWJsZW4sIGRlbGxlbiA9IDA7CkBAIC0xNTc1LDEyICsxNDk2LDE3IEBACiAgICAgICAgIHRhYmxlID0gTlVMTDsKICAgICAgICAgdGFibGVuID0gMjU2OwogICAgIH0KLSAgICBlbHNlIGlmIChQeU9iamVjdF9Bc0NoYXJCdWZmZXIodGFibGVvYmosICZ0YWJsZSwgJnRhYmxlbikpCi0gICAgICAgIHJldHVybiBOVUxMOworICAgIGVsc2UgeworICAgICAgICBpZiAoUHlPYmplY3RfR2V0QnVmZmVyKHRhYmxlb2JqLCAmdGFibGVfdmlldywgUHlCVUZfU0lNUExFKSAhPSAwKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIHRhYmxlID0gdGFibGVfdmlldy5idWY7CisgICAgICAgIHRhYmxlbiA9IHRhYmxlX3ZpZXcubGVuOworICAgIH0KIAogICAgIGlmICh0YWJsZW4gIT0gMjU2KSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAogICAgICAgICAgICJ0cmFuc2xhdGlvbiB0YWJsZSBtdXN0IGJlIDI1NiBjaGFyYWN0ZXJzIGxvbmciKTsKKyAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmdGFibGVfdmlldyk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIApAQCAtMTU4OSw4ICsxNTE1LDE0IEBACiAgICAgICAgICAgICBkZWxfdGFibGUgPSBQeUJ5dGVzX0FTX1NUUklORyhkZWxvYmopOwogICAgICAgICAgICAgZGVsbGVuID0gUHlCeXRlc19HRVRfU0laRShkZWxvYmopOwogICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKFB5T2JqZWN0X0FzQ2hhckJ1ZmZlcihkZWxvYmosICZkZWxfdGFibGUsICZkZWxsZW4pKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaWYgKFB5T2JqZWN0X0dldEJ1ZmZlcihkZWxvYmosICZkZWxfdGFibGVfdmlldywgUHlCVUZfU0lNUExFKSAhPSAwKSB7CisgICAgICAgICAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmdGFibGVfdmlldyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWxfdGFibGUgPSBkZWxfdGFibGVfdmlldy5idWY7CisgICAgICAgICAgICBkZWxsZW4gPSBkZWxfdGFibGVfdmlldy5sZW47CisgICAgICAgIH0KICAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIGRlbF90YWJsZSA9IE5VTEw7CkBAIC0xNTk5LDggKzE1MzEsMTEgQEAKIAogICAgIGlubGVuID0gUHlCeXRlc19HRVRfU0laRShpbnB1dF9vYmopOwogICAgIHJlc3VsdCA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoKGNoYXIgKilOVUxMLCBpbmxlbik7Ci0gICAgaWYgKHJlc3VsdCA9PSBOVUxMKQorICAgIGlmIChyZXN1bHQgPT0gTlVMTCkgeworICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZkZWxfdGFibGVfdmlldyk7CisgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnRhYmxlX3ZpZXcpOwogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAgICAgb3V0cHV0X3N0YXJ0ID0gb3V0cHV0ID0gUHlCeXRlc19Bc1N0cmluZyhyZXN1bHQpOwogICAgIGlucHV0ID0gUHlCeXRlc19BU19TVFJJTkcoaW5wdXRfb2JqKTsKIApAQCAtMTYxMSwxMSArMTU0NiwxNCBAQAogICAgICAgICAgICAgaWYgKFB5X0NIQVJNQVNLKCgqb3V0cHV0KysgPSB0YWJsZVtjXSkpICE9IGMpCiAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IDE7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGNoYW5nZWQgfHwgIVB5Qnl0ZXNfQ2hlY2tFeGFjdChpbnB1dF9vYmopKQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7Ci0gICAgICAgIFB5X0lOQ1JFRihpbnB1dF9vYmopOwotICAgICAgICByZXR1cm4gaW5wdXRfb2JqOworICAgICAgICBpZiAoIWNoYW5nZWQgJiYgUHlCeXRlc19DaGVja0V4YWN0KGlucHV0X29iaikpIHsKKyAgICAgICAgICAgIFB5X0lOQ1JFRihpbnB1dF9vYmopOworICAgICAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgICAgICAgICByZXN1bHQgPSBpbnB1dF9vYmo7CisgICAgICAgIH0KKyAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmZGVsX3RhYmxlX3ZpZXcpOworICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ0YWJsZV92aWV3KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKICAgICBpZiAodGFibGUgPT0gTlVMTCkgewpAQCAtMTYyNSw5ICsxNTYzLDExIEBACiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykKICAgICAgICAgICAgIHRyYW5zX3RhYmxlW2ldID0gUHlfQ0hBUk1BU0sodGFibGVbaV0pOwogICAgIH0KKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ0YWJsZV92aWV3KTsKIAogICAgIGZvciAoaSA9IDA7IGkgPCBkZWxsZW47IGkrKykKICAgICAgICAgdHJhbnNfdGFibGVbKGludCkgUHlfQ0hBUk1BU0soZGVsX3RhYmxlW2ldKV0gPSAtMTsKKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZkZWxfdGFibGVfdmlldyk7CiAKICAgICBmb3IgKGkgPSBpbmxlbjsgLS1pID49IDA7ICkgewogICAgICAgICBjID0gUHlfQ0hBUk1BU0soKmlucHV0KyspOwpAQCAtMjE1NiwzMSArMjA5NiwyMSBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGJ5dGVzX3JlcGxhY2UoUHlCeXRlc09iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CisgICAgUHlPYmplY3QgKnJlczsKKyAgICBQeV9idWZmZXIgb2xkID0ge05VTEwsIE5VTEx9OworICAgIFB5X2J1ZmZlciBuZXcgPSB7TlVMTCwgTlVMTH07CiAgICAgUHlfc3NpemVfdCBjb3VudCA9IC0xOwotICAgIFB5T2JqZWN0ICpmcm9tLCAqdG87Ci0gICAgY29uc3QgY2hhciAqZnJvbV9zLCAqdG9fczsKLSAgICBQeV9zc2l6ZV90IGZyb21fbGVuLCB0b19sZW47CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk9PfG46cmVwbGFjZSIsICZmcm9tLCAmdG8sICZjb3VudCkpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ5KnkqfG46cmVwbGFjZSIsICZvbGQsICZuZXcsICZjb3VudCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgaWYgKFB5Qnl0ZXNfQ2hlY2soZnJvbSkpIHsKLSAgICAgICAgZnJvbV9zID0gUHlCeXRlc19BU19TVFJJTkcoZnJvbSk7Ci0gICAgICAgIGZyb21fbGVuID0gUHlCeXRlc19HRVRfU0laRShmcm9tKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoUHlPYmplY3RfQXNDaGFyQnVmZmVyKGZyb20sICZmcm9tX3MsICZmcm9tX2xlbikpCi0gICAgICAgIHJldHVybiBOVUxMOworICAgIHJlcyA9IChQeU9iamVjdCAqKXJlcGxhY2UoKFB5Qnl0ZXNPYmplY3QgKikgc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBjaGFyICopb2xkLmJ1Ziwgb2xkLmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBjaGFyICopbmV3LmJ1ZiwgbmV3LmxlbiwgY291bnQpOwogCi0gICAgaWYgKFB5Qnl0ZXNfQ2hlY2sodG8pKSB7Ci0gICAgICAgIHRvX3MgPSBQeUJ5dGVzX0FTX1NUUklORyh0byk7Ci0gICAgICAgIHRvX2xlbiA9IFB5Qnl0ZXNfR0VUX1NJWkUodG8pOwotICAgIH0KLSAgICBlbHNlIGlmIChQeU9iamVjdF9Bc0NoYXJCdWZmZXIodG8sICZ0b19zLCAmdG9fbGVuKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICByZXR1cm4gKFB5T2JqZWN0ICopcmVwbGFjZSgoUHlCeXRlc09iamVjdCAqKSBzZWxmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb21fcywgZnJvbV9sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9fcywgdG9fbGVuLCBjb3VudCk7CisgICAgUHlCdWZmZXJfUmVsZWFzZSgmb2xkKTsKKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZuZXcpOworICAgIHJldHVybiByZXM7CiB9CiAKIC8qKiBFbmQgREFMS0UgKiovCkBAIC0yMTk1LDYgKzIxMjUsNyBAQAogewogICAgIFB5X3NzaXplX3QgbGVuID0gUHlCeXRlc19HRVRfU0laRShzZWxmKTsKICAgICBQeV9zc2l6ZV90IHNsZW47CisgICAgUHlfYnVmZmVyIHN1Yl92aWV3ID0ge05VTEwsIE5VTEx9OwogICAgIGNvbnN0IGNoYXIqIHN1YjsKICAgICBjb25zdCBjaGFyKiBzdHI7CiAKQEAgLTIyMDIsOCArMjEzMywxMiBAQAogICAgICAgICBzdWIgPSBQeUJ5dGVzX0FTX1NUUklORyhzdWJzdHIpOwogICAgICAgICBzbGVuID0gUHlCeXRlc19HRVRfU0laRShzdWJzdHIpOwogICAgIH0KLSAgICBlbHNlIGlmIChQeU9iamVjdF9Bc0NoYXJCdWZmZXIoc3Vic3RyLCAmc3ViLCAmc2xlbikpCi0gICAgICAgIHJldHVybiAtMTsKKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKFB5T2JqZWN0X0dldEJ1ZmZlcihzdWJzdHIsICZzdWJfdmlldywgUHlCVUZfU0lNUExFKSAhPSAwKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICBzdWIgPSBzdWJfdmlldy5idWY7CisgICAgICAgIHNsZW4gPSBzdWJfdmlldy5sZW47CisgICAgfQogICAgIHN0ciA9IFB5Qnl0ZXNfQVNfU1RSSU5HKHNlbGYpOwogCiAgICAgQURKVVNUX0lORElDRVMoc3RhcnQsIGVuZCwgbGVuKTsKQEAgLTIyMTEsMTcgKzIxNDYsMjUgQEAKICAgICBpZiAoZGlyZWN0aW9uIDwgMCkgewogICAgICAgICAvKiBzdGFydHN3aXRoICovCiAgICAgICAgIGlmIChzdGFydCtzbGVuID4gbGVuKQotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBnb3RvIG5vdGZvdW5kOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8qIGVuZHN3aXRoICovCiAgICAgICAgIGlmIChlbmQtc3RhcnQgPCBzbGVuIHx8IHN0YXJ0ID4gbGVuKQotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBnb3RvIG5vdGZvdW5kOwogCiAgICAgICAgIGlmIChlbmQtc2xlbiA+IHN0YXJ0KQogICAgICAgICAgICAgc3RhcnQgPSBlbmQgLSBzbGVuOwogICAgIH0KLSAgICBpZiAoZW5kLXN0YXJ0ID49IHNsZW4pCi0gICAgICAgIHJldHVybiAhIG1lbWNtcChzdHIrc3RhcnQsIHN1Yiwgc2xlbik7CisgICAgaWYgKGVuZC1zdGFydCA8IHNsZW4pCisgICAgICAgIGdvdG8gbm90Zm91bmQ7CisgICAgaWYgKG1lbWNtcChzdHIrc3RhcnQsIHN1Yiwgc2xlbikgIT0gMCkKKyAgICAgICAgZ290byBub3Rmb3VuZDsKKworICAgIFB5QnVmZmVyX1JlbGVhc2UoJnN1Yl92aWV3KTsKKyAgICByZXR1cm4gMTsKKworbm90Zm91bmQ6CisgICAgUHlCdWZmZXJfUmVsZWFzZSgmc3ViX3ZpZXcpOwogICAgIHJldHVybiAwOwogfQogCkBAIC0yMzMzLDggKzIyNzYsNiBAQAogCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAifHNzOmRlY29kZSIsIGt3bGlzdCwgJmVuY29kaW5nLCAmZXJyb3JzKSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKGVuY29kaW5nID09IE5VTEwpCi0gICAgICAgIGVuY29kaW5nID0gUHlVbmljb2RlX0dldERlZmF1bHRFbmNvZGluZygpOwogICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbUVuY29kZWRPYmplY3Qoc2VsZiwgZW5jb2RpbmcsIGVycm9ycyk7CiB9CiAKQEAgLTI0MzUsMTggKzIzNzYsNiBAQAogICAgIHJldHVybiBOVUxMOwogfQogCi1QeURvY19TVFJWQVIoc2l6ZW9mX19kb2NfXywKLSJCLl9fc2l6ZW9mX18oKSAtPiBzaXplIG9mIEIgaW4gbWVtb3J5LCBpbiBieXRlcyIpOwotCi1zdGF0aWMgUHlPYmplY3QgKgotYnl0ZXNfc2l6ZW9mKFB5Qnl0ZXNPYmplY3QgKnYpCi17Ci0gICAgUHlfc3NpemVfdCByZXM7Ci0gICAgcmVzID0gUHlCeXRlc09iamVjdF9TSVpFICsgUHlfU0laRSh2KSAqIFB5X1RZUEUodiktPnRwX2l0ZW1zaXplOwotICAgIHJldHVybiBQeUxvbmdfRnJvbVNzaXplX3QocmVzKTsKLX0KLQotCiBzdGF0aWMgUHlPYmplY3QgKgogYnl0ZXNfZ2V0bmV3YXJncyhQeUJ5dGVzT2JqZWN0ICp2KQogewpAQCAtMjQ2NCw3ICsyMzkzLDcgQEAKICAgICB7ImRlY29kZSIsIChQeUNGdW5jdGlvbilieXRlc19kZWNvZGUsIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsIGRlY29kZV9fZG9jX199LAogICAgIHsiZW5kc3dpdGgiLCAoUHlDRnVuY3Rpb24pYnl0ZXNfZW5kc3dpdGgsIE1FVEhfVkFSQVJHUywKICAgICAgZW5kc3dpdGhfX2RvY19ffSwKLSAgICB7ImV4cGFuZHRhYnMiLCAoUHlDRnVuY3Rpb24pc3RyaW5nbGliX2V4cGFuZHRhYnMsIE1FVEhfVkFSQVJHUywKKyAgICB7ImV4cGFuZHRhYnMiLCAoUHlDRnVuY3Rpb24pc3RyaW5nbGliX2V4cGFuZHRhYnMsIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsCiAgICAgIGV4cGFuZHRhYnNfX2RvY19ffSwKICAgICB7ImZpbmQiLCAoUHlDRnVuY3Rpb24pYnl0ZXNfZmluZCwgTUVUSF9WQVJBUkdTLCBmaW5kX19kb2NfX30sCiAgICAgeyJmcm9taGV4IiwgKFB5Q0Z1bmN0aW9uKWJ5dGVzX2Zyb21oZXgsIE1FVEhfVkFSQVJHU3xNRVRIX0NMQVNTLApAQCAtMjUxMiwxMyArMjQ0MSwxMSBAQAogICAgICB0cmFuc2xhdGVfX2RvY19ffSwKICAgICB7InVwcGVyIiwgKFB5Q0Z1bmN0aW9uKXN0cmluZ2xpYl91cHBlciwgTUVUSF9OT0FSR1MsIF9QeV91cHBlcl9fZG9jX199LAogICAgIHsiemZpbGwiLCAoUHlDRnVuY3Rpb24pc3RyaW5nbGliX3pmaWxsLCBNRVRIX1ZBUkFSR1MsIHpmaWxsX19kb2NfX30sCi0gICAgeyJfX3NpemVvZl9fIiwgKFB5Q0Z1bmN0aW9uKWJ5dGVzX3NpemVvZiwgTUVUSF9OT0FSR1MsCi0gICAgIHNpemVvZl9fZG9jX199LAogICAgIHtOVUxMLCAgICAgTlVMTH0gICAgICAgICAgICAgICAgICAgICAgICAgLyogc2VudGluZWwgKi8KIH07CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1zdHJfc3VidHlwZV9uZXcoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpOworYnl0ZXNfc3VidHlwZV9uZXcoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpOwogCiBzdGF0aWMgUHlPYmplY3QgKgogYnl0ZXNfbmV3KFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQpAQCAtMjUzMyw3ICsyNDYwLDcgQEAKICAgICBfUHlfSURFTlRJRklFUihfX2J5dGVzX18pOwogCiAgICAgaWYgKHR5cGUgIT0gJlB5Qnl0ZXNfVHlwZSkKLSAgICAgICAgcmV0dXJuIHN0cl9zdWJ0eXBlX25ldyh0eXBlLCBhcmdzLCBrd2RzKTsKKyAgICAgICAgcmV0dXJuIGJ5dGVzX3N1YnR5cGVfbmV3KHR5cGUsIGFyZ3MsIGt3ZHMpOwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJ8T3NzOmJ5dGVzIiwga3dsaXN0LCAmeCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZW5jb2RpbmcsICZlcnJvcnMpKQogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTI1NjEsNiArMjQ4OCwxMyBAQAogICAgICAgICByZXR1cm4gbmV3OwogICAgIH0KIAorICAgIC8qIElmIGl0J3Mgbm90IHVuaWNvZGUsIHRoZXJlIGNhbid0IGJlIGVuY29kaW5nIG9yIGVycm9ycyAqLworICAgIGlmIChlbmNvZGluZyAhPSBOVUxMIHx8IGVycm9ycyAhPSBOVUxMKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAiZW5jb2Rpbmcgb3IgZXJyb3JzIHdpdGhvdXQgYSBzdHJpbmcgYXJndW1lbnQiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCiAgICAgLyogV2UnZCBsaWtlIHRvIGNhbGwgUHlPYmplY3RfQnl0ZXMgaGVyZSwgYnV0IHdlIG5lZWQgdG8gY2hlY2sgZm9yIGFuCiAgICAgICAgaW50ZWdlciBhcmd1bWVudCBiZWZvcmUgZGVmZXJyaW5nIHRvIFB5Qnl0ZXNfRnJvbU9iamVjdCwgc29tZXRoaW5nCiAgICAgICAgUHlPYmplY3RfQnl0ZXMgZG9lc24ndCBkby4gKi8KQEAgLTI2MDIsMTMgKzI1MzYsNiBAQAogICAgICAgICByZXR1cm4gbmV3OwogICAgIH0KIAotICAgIC8qIElmIGl0J3Mgbm90IHVuaWNvZGUsIHRoZXJlIGNhbid0IGJlIGVuY29kaW5nIG9yIGVycm9ycyAqLwotICAgIGlmIChlbmNvZGluZyAhPSBOVUxMIHx8IGVycm9ycyAhPSBOVUxMKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAiZW5jb2Rpbmcgb3IgZXJyb3JzIHdpdGhvdXQgYSBzdHJpbmcgYXJndW1lbnQiKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCiAgICAgcmV0dXJuIFB5Qnl0ZXNfRnJvbU9iamVjdCh4KTsKIH0KIApAQCAtMjY5Niw3ICsyNjIzLDcgQEAKICAgICB9CiAKICAgICAvKiBGb3IgaXRlcmF0b3IgdmVyc2lvbiwgY3JlYXRlIGEgc3RyaW5nIG9iamVjdCBhbmQgcmVzaXplIGFzIG5lZWRlZCAqLwotICAgIHNpemUgPSBfUHlPYmplY3RfTGVuZ3RoSGludCh4LCA2NCk7CisgICAgc2l6ZSA9IFB5T2JqZWN0X0xlbmd0aEhpbnQoeCwgNjQpOwogICAgIGlmIChzaXplID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIC8qIEFsbG9jYXRlIGFuIGV4dHJhIGJ5dGUgdG8gcHJldmVudCBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKCkgZnJvbQpAQCAtMjc1NCwxNCArMjY4MSwxMyBAQAogICAgIHJldHVybiBuZXc7CiAKICAgZXJyb3I6Ci0gICAgLyogRXJyb3IgaGFuZGxpbmcgd2hlbiBuZXcgIT0gTlVMTCAqLwogICAgIFB5X1hERUNSRUYoaXQpOwotICAgIFB5X0RFQ1JFRihuZXcpOworICAgIFB5X1hERUNSRUYobmV3KTsKICAgICByZXR1cm4gTlVMTDsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKLXN0cl9zdWJ0eXBlX25ldyhQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKK2J5dGVzX3N1YnR5cGVfbmV3KFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQogewogICAgIFB5T2JqZWN0ICp0bXAsICpwbmV3OwogICAgIFB5X3NzaXplX3QgbjsKQEAgLTI3NzAsNyArMjY5Niw3IEBACiAgICAgdG1wID0gYnl0ZXNfbmV3KCZQeUJ5dGVzX1R5cGUsIGFyZ3MsIGt3ZHMpOwogICAgIGlmICh0bXAgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgYXNzZXJ0KFB5Qnl0ZXNfQ2hlY2tFeGFjdCh0bXApKTsKKyAgICBhc3NlcnQoUHlCeXRlc19DaGVjayh0bXApKTsKICAgICBuID0gUHlCeXRlc19HRVRfU0laRSh0bXApOwogICAgIHBuZXcgPSB0eXBlLT50cF9hbGxvYyh0eXBlLCBuKTsKICAgICBpZiAocG5ldyAhPSBOVUxMKSB7CkBAIC0yODQyLDkgKzI3NjgsOSBAQAogfTsKIAogdm9pZAotUHlCeXRlc19Db25jYXQocmVnaXN0ZXIgUHlPYmplY3QgKipwdiwgcmVnaXN0ZXIgUHlPYmplY3QgKncpCitQeUJ5dGVzX0NvbmNhdChQeU9iamVjdCAqKnB2LCBQeU9iamVjdCAqdykKIHsKLSAgICByZWdpc3RlciBQeU9iamVjdCAqdjsKKyAgICBQeU9iamVjdCAqdjsKICAgICBhc3NlcnQocHYgIT0gTlVMTCk7CiAgICAgaWYgKCpwdiA9PSBOVUxMKQogICAgICAgICByZXR1cm47CkBAIC0yODU4LDcgKzI3ODQsNyBAQAogfQogCiB2b2lkCi1QeUJ5dGVzX0NvbmNhdEFuZERlbChyZWdpc3RlciBQeU9iamVjdCAqKnB2LCByZWdpc3RlciBQeU9iamVjdCAqdykKK1B5Qnl0ZXNfQ29uY2F0QW5kRGVsKFB5T2JqZWN0ICoqcHYsIFB5T2JqZWN0ICp3KQogewogICAgIFB5Qnl0ZXNfQ29uY2F0KHB2LCB3KTsKICAgICBQeV9YREVDUkVGKHcpOwpAQCAtMjg4Miw4ICsyODA4LDggQEAKIGludAogX1B5Qnl0ZXNfUmVzaXplKFB5T2JqZWN0ICoqcHYsIFB5X3NzaXplX3QgbmV3c2l6ZSkKIHsKLSAgICByZWdpc3RlciBQeU9iamVjdCAqdjsKLSAgICByZWdpc3RlciBQeUJ5dGVzT2JqZWN0ICpzdjsKKyAgICBQeU9iamVjdCAqdjsKKyAgICBQeUJ5dGVzT2JqZWN0ICpzdjsKICAgICB2ID0gKnB2OwogICAgIGlmICghUHlCeXRlc19DaGVjayh2KSB8fCBQeV9SRUZDTlQodikgIT0gMSB8fCBuZXdzaXplIDwgMCkgewogICAgICAgICAqcHYgPSAwOwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9jbGFzc29iamVjdC5jIGIvT2JqZWN0cy9jbGFzc29iamVjdC5jCmluZGV4IGNkYzliMWMuLjBjMGJkNDcgMTAwNjQ0Ci0tLSBhL09iamVjdHMvY2xhc3NvYmplY3QuYworKysgYi9PYmplY3RzL2NsYXNzb2JqZWN0LmMKQEAgLTQ0LDcgKzQ0LDcgQEAKIFB5T2JqZWN0ICoKIFB5TWV0aG9kX05ldyhQeU9iamVjdCAqZnVuYywgUHlPYmplY3QgKnNlbGYpCiB7Ci0gICAgcmVnaXN0ZXIgUHlNZXRob2RPYmplY3QgKmltOworICAgIFB5TWV0aG9kT2JqZWN0ICppbTsKICAgICBpZiAoc2VsZiA9PSBOVUxMKSB7CiAgICAgICAgIFB5RXJyX0JhZEludGVybmFsQ2FsbCgpOwogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTUyLDcgKzUyLDcgQEAKICAgICBpbSA9IGZyZWVfbGlzdDsKICAgICBpZiAoaW0gIT0gTlVMTCkgewogICAgICAgICBmcmVlX2xpc3QgPSAoUHlNZXRob2RPYmplY3QgKikoaW0tPmltX3NlbGYpOwotICAgICAgICBQeU9iamVjdF9JTklUKGltLCAmUHlNZXRob2RfVHlwZSk7CisgICAgICAgICh2b2lkKVB5T2JqZWN0X0lOSVQoaW0sICZQeU1ldGhvZF9UeXBlKTsKICAgICAgICAgbnVtZnJlZS0tOwogICAgIH0KICAgICBlbHNlIHsKQEAgLTY5LDYgKzY5LDMwIEBACiAgICAgcmV0dXJuIChQeU9iamVjdCAqKWltOwogfQogCitzdGF0aWMgUHlPYmplY3QgKgorbWV0aG9kX3JlZHVjZShQeU1ldGhvZE9iamVjdCAqaW0pCit7CisgICAgUHlPYmplY3QgKnNlbGYgPSBQeU1ldGhvZF9HRVRfU0VMRihpbSk7CisgICAgUHlPYmplY3QgKmZ1bmMgPSBQeU1ldGhvZF9HRVRfRlVOQ1RJT04oaW0pOworICAgIFB5T2JqZWN0ICpidWlsdGluczsKKyAgICBQeU9iamVjdCAqZ2V0YXR0cjsKKyAgICBQeU9iamVjdCAqZnVuY25hbWU7CisgICAgX1B5X0lERU5USUZJRVIoZ2V0YXR0cik7CisKKyAgICBmdW5jbmFtZSA9IF9QeU9iamVjdF9HZXRBdHRySWQoZnVuYywgJlB5SWRfX19uYW1lX18pOworICAgIGlmIChmdW5jbmFtZSA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBidWlsdGlucyA9IFB5RXZhbF9HZXRCdWlsdGlucygpOworICAgIGdldGF0dHIgPSBfUHlEaWN0X0dldEl0ZW1JZChidWlsdGlucywgJlB5SWRfZ2V0YXR0cik7CisgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIk8oT04pIiwgZ2V0YXR0ciwgc2VsZiwgZnVuY25hbWUpOworfQorCitzdGF0aWMgUHlNZXRob2REZWYgbWV0aG9kX21ldGhvZHNbXSA9IHsKKyAgICB7Il9fcmVkdWNlX18iLCAoUHlDRnVuY3Rpb24pbWV0aG9kX3JlZHVjZSwgTUVUSF9OT0FSR1MsIE5VTEx9LAorICAgIHtOVUxMLCBOVUxMfQorfTsKKwogLyogRGVzY3JpcHRvcnMgZm9yIFB5TWV0aG9kIGF0dHJpYnV0ZXMgKi8KIAogLyogaW1fZnVuYyBhbmQgaW1fc2VsZiBhcmUgc3RvcmVkIGluIHRoZSBQeU1ldGhvZCBvYmplY3QgKi8KQEAgLTE2NCw3ICsxODgsNyBAQAogfQogCiBzdGF0aWMgdm9pZAotbWV0aG9kX2RlYWxsb2MocmVnaXN0ZXIgUHlNZXRob2RPYmplY3QgKmltKQorbWV0aG9kX2RlYWxsb2MoUHlNZXRob2RPYmplY3QgKmltKQogewogICAgIF9QeU9iamVjdF9HQ19VTlRSQUNLKGltKTsKICAgICBpZiAoaW0tPmltX3dlYWtyZWZsaXN0ICE9IE5VTEwpCkBAIC0zNjcsNyArMzkxLDcgQEAKICAgICBvZmZzZXRvZihQeU1ldGhvZE9iamVjdCwgaW1fd2Vha3JlZmxpc3QpLCAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlcm5leHQgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KKyAgICBtZXRob2RfbWV0aG9kcywgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KICAgICBtZXRob2RfbWVtYmVybGlzdCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21lbWJlcnMgKi8KICAgICBtZXRob2RfZ2V0c2V0LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldHNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzZSAqLwpAQCAtNTA5LDcgKzUzMyw3IEBACiAKIHN0YXRpYyBQeU9iamVjdCAqCiBpbnN0YW5jZW1ldGhvZF9kZXNjcl9nZXQoUHlPYmplY3QgKmRlc2NyLCBQeU9iamVjdCAqb2JqLCBQeU9iamVjdCAqdHlwZSkgewotICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICpmdW5jID0gUHlJbnN0YW5jZU1ldGhvZF9HRVRfRlVOQ1RJT04oZGVzY3IpOworICAgIFB5T2JqZWN0ICpmdW5jID0gUHlJbnN0YW5jZU1ldGhvZF9HRVRfRlVOQ1RJT04oZGVzY3IpOwogICAgIGlmIChvYmogPT0gTlVMTCkgewogICAgICAgICBQeV9JTkNSRUYoZnVuYyk7CiAgICAgICAgIHJldHVybiBmdW5jOwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9jb2Rlb2JqZWN0LmMgYi9PYmplY3RzL2NvZGVvYmplY3QuYwppbmRleCA5NzEzZjYxLi4zNTNmNDE0IDEwMDY0NAotLS0gYS9PYmplY3RzL2NvZGVvYmplY3QuYworKysgYi9PYmplY3RzL2NvZGVvYmplY3QuYwpAQCAtNzQsNiArNzQsMTEgQEAKICAgICAgICAgUHlFcnJfQmFkSW50ZXJuYWxDYWxsKCk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KKworICAgIC8qIEVuc3VyZSB0aGF0IHRoZSBmaWxlbmFtZSBpcyBhIHJlYWR5IFVuaWNvZGUgc3RyaW5nICovCisgICAgaWYgKFB5VW5pY29kZV9SRUFEWShmaWxlbmFtZSkgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKKwogICAgIG5fY2VsbHZhcnMgPSBQeVR1cGxlX0dFVF9TSVpFKGNlbGx2YXJzKTsKICAgICBpbnRlcm5fc3RyaW5ncyhuYW1lcyk7CiAgICAgaW50ZXJuX3N0cmluZ3ModmFybmFtZXMpOwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9jb21wbGV4b2JqZWN0LmMgYi9PYmplY3RzL2NvbXBsZXhvYmplY3QuYwppbmRleCBiMDhhYTZmLi43YWFhZWFiIDEwMDY0NAotLS0gYS9PYmplY3RzL2NvbXBsZXhvYmplY3QuYworKysgYi9PYmplY3RzL2NvbXBsZXhvYmplY3QuYwpAQCAtNzgsNyArNzgsNyBAQAogICAgICBjb25zdCBkb3VibGUgYWJzX2JyZWFsID0gYi5yZWFsIDwgMCA/IC1iLnJlYWwgOiBiLnJlYWw7CiAgICAgIGNvbnN0IGRvdWJsZSBhYnNfYmltYWcgPSBiLmltYWcgPCAwID8gLWIuaW1hZyA6IGIuaW1hZzsKIAotICAgICBpZiAoYWJzX2JyZWFsID49IGFic19iaW1hZykgeworICAgIGlmIChhYnNfYnJlYWwgPj0gYWJzX2JpbWFnKSB7CiAgICAgICAgIC8qIGRpdmlkZSB0b3BzIGFuZCBib3R0b20gYnkgYi5yZWFsICovCiAgICAgICAgIGlmIChhYnNfYnJlYWwgPT0gMC4wKSB7CiAgICAgICAgICAgICBlcnJubyA9IEVET007CkBAIC05MSw3ICs5MSw3IEBACiAgICAgICAgICAgICByLmltYWcgPSAoYS5pbWFnIC0gYS5yZWFsICogcmF0aW8pIC8gZGVub207CiAgICAgICAgIH0KICAgICB9Ci0gICAgZWxzZSB7CisgICAgZWxzZSBpZiAoYWJzX2JpbWFnID49IGFic19icmVhbCkgewogICAgICAgICAvKiBkaXZpZGUgdG9wcyBhbmQgYm90dG9tIGJ5IGIuaW1hZyAqLwogICAgICAgICBjb25zdCBkb3VibGUgcmF0aW8gPSBiLnJlYWwgLyBiLmltYWc7CiAgICAgICAgIGNvbnN0IGRvdWJsZSBkZW5vbSA9IGIucmVhbCAqIHJhdGlvICsgYi5pbWFnOwpAQCAtOTksNiArOTksMTAgQEAKICAgICAgICAgci5yZWFsID0gKGEucmVhbCAqIHJhdGlvICsgYS5pbWFnKSAvIGRlbm9tOwogICAgICAgICByLmltYWcgPSAoYS5pbWFnICogcmF0aW8gLSBhLnJlYWwpIC8gZGVub207CiAgICAgfQorICAgIGVsc2UgeworICAgICAgICAvKiBBdCBsZWFzdCBvbmUgb2YgYi5yZWFsIG9yIGIuaW1hZyBpcyBhIE5hTiAqLworICAgICAgICByLnJlYWwgPSByLmltYWcgPSBQeV9OQU47CisgICAgfQogICAgIHJldHVybiByOwogfQogCkBAIC0yMTEsMTMgKzIxNSwxMyBAQAogUHlPYmplY3QgKgogUHlDb21wbGV4X0Zyb21DQ29tcGxleChQeV9jb21wbGV4IGN2YWwpCiB7Ci0gICAgcmVnaXN0ZXIgUHlDb21wbGV4T2JqZWN0ICpvcDsKKyAgICBQeUNvbXBsZXhPYmplY3QgKm9wOwogCiAgICAgLyogSW5saW5lIFB5T2JqZWN0X05ldyAqLwogICAgIG9wID0gKFB5Q29tcGxleE9iamVjdCAqKSBQeU9iamVjdF9NQUxMT0Moc2l6ZW9mKFB5Q29tcGxleE9iamVjdCkpOwogICAgIGlmIChvcCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKLSAgICBQeU9iamVjdF9JTklUKG9wLCAmUHlDb21wbGV4X1R5cGUpOworICAgICh2b2lkKVB5T2JqZWN0X0lOSVQob3AsICZQeUNvbXBsZXhfVHlwZSk7CiAgICAgb3AtPmN2YWwgPSBjdmFsOwogICAgIHJldHVybiAoUHlPYmplY3QgKikgb3A7CiB9CkBAIC0yNzEsNiArMjc1LDEyIEBACiAgICAgaWYgKGYpIHsKICAgICAgICAgUHlPYmplY3QgKnJlcyA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3MoZiwgTlVMTCk7CiAgICAgICAgIFB5X0RFQ1JFRihmKTsKKyAgICAgICAgaWYgKHJlcyAhPSBOVUxMICYmICFQeUNvbXBsZXhfQ2hlY2socmVzKSkgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAiX19jb21wbGV4X18gc2hvdWxkIHJldHVybiBhIGNvbXBsZXggb2JqZWN0Iik7CisgICAgICAgICAgICBQeV9ERUNSRUYocmVzKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CiAgICAgICAgIHJldHVybiByZXM7CiAgICAgfQogICAgIHJldHVybiBOVUxMOwpAQCAtMjk2LDEyICszMDYsNiBAQAogICAgIG5ld29wID0gdHJ5X2NvbXBsZXhfc3BlY2lhbF9tZXRob2Qob3ApOwogCiAgICAgaWYgKG5ld29wKSB7Ci0gICAgICAgIGlmICghUHlDb21wbGV4X0NoZWNrKG5ld29wKSkgewotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAiX19jb21wbGV4X18gc2hvdWxkIHJldHVybiBhIGNvbXBsZXggb2JqZWN0Iik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYobmV3b3ApOwotICAgICAgICAgICAgcmV0dXJuIGN2OwotICAgICAgICB9CiAgICAgICAgIGN2ID0gKChQeUNvbXBsZXhPYmplY3QgKiluZXdvcCktPmN2YWw7CiAgICAgICAgIFB5X0RFQ1JFRihuZXdvcCk7CiAgICAgICAgIHJldHVybiBjdjsKQEAgLTcwNSw3ICs3MDksNyBAQAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiVTpfX2Zvcm1hdF9fIiwgJmZvcm1hdF9zcGVjKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBfUHlVbmljb2RlV3JpdGVyX0luaXQoJndyaXRlciwgMCk7CisgICAgX1B5VW5pY29kZVdyaXRlcl9Jbml0KCZ3cml0ZXIpOwogICAgIHJldCA9IF9QeUNvbXBsZXhfRm9ybWF0QWR2YW5jZWRXcml0ZXIoCiAgICAgICAgICZ3cml0ZXIsCiAgICAgICAgIHNlbGYsCkBAIC03NzIsOSArNzc2LDEwIEBACiAgICAgICAgIGlmIChzID09IE5VTEwpCiAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KLSAgICBlbHNlIGlmIChQeU9iamVjdF9Bc0NoYXJCdWZmZXIodiwgJnMsICZsZW4pKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAiY29tcGxleCgpIGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcgb3IgYSBudW1iZXIiKTsKKyAgICBlbHNlIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICJjb21wbGV4KCkgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZyBvciBhIG51bWJlciwgbm90ICclLjIwMHMnIiwKKyAgICAgICAgICAgIFB5X1RZUEUodiktPnRwX25hbWUpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKQEAgLTk1Myw4ICs5NTgsOSBAQAogICAgICAgICBuYmkgPSBpLT5vYl90eXBlLT50cF9hc19udW1iZXI7CiAgICAgaWYgKG5iciA9PSBOVUxMIHx8IG5ici0+bmJfZmxvYXQgPT0gTlVMTCB8fAogICAgICAgICAoKGkgIT0gTlVMTCkgJiYgKG5iaSA9PSBOVUxMIHx8IG5iaS0+bmJfZmxvYXQgPT0gTlVMTCkpKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgImNvbXBsZXgoKSBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nIG9yIGEgbnVtYmVyIik7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAiY29tcGxleCgpIGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcgb3IgYSBudW1iZXIsIG5vdCAnJS4yMDBzJyIsCisgICAgICAgICAgICBQeV9UWVBFKHIpLT50cF9uYW1lKTsKICAgICAgICAgaWYgKG93bl9yKSB7CiAgICAgICAgICAgICBQeV9ERUNSRUYocik7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL09iamVjdHMvZGVzY3JvYmplY3QuYyBiL09iamVjdHMvZGVzY3JvYmplY3QuYwppbmRleCBiYTk4YTMwLi42MTVmNDk5IDEwMDY0NAotLS0gYS9PYmplY3RzL2Rlc2Nyb2JqZWN0LmMKKysrIGIvT2JqZWN0cy9kZXNjcm9iamVjdC5jCkBAIC0xMTUsNyArMTE1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICgoUHlUeXBlT2JqZWN0ICopdHlwZSktPnRwX25hbWUpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgcmV0dXJuIFB5Q0Z1bmN0aW9uX05ldyhkZXNjci0+ZF9tZXRob2QsIHR5cGUpOworICAgIHJldHVybiBQeUNGdW5jdGlvbl9OZXdFeChkZXNjci0+ZF9tZXRob2QsIHR5cGUsIE5VTEwpOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtMTI1LDcgKzEyNSw3IEBACiAKICAgICBpZiAoZGVzY3JfY2hlY2soKFB5RGVzY3JPYmplY3QgKilkZXNjciwgb2JqLCAmcmVzKSkKICAgICAgICAgcmV0dXJuIHJlczsKLSAgICByZXR1cm4gUHlDRnVuY3Rpb25fTmV3KGRlc2NyLT5kX21ldGhvZCwgb2JqKTsKKyAgICByZXR1cm4gUHlDRnVuY3Rpb25fTmV3RXgoZGVzY3ItPmRfbWV0aG9kLCBvYmosIE5VTEwpOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtMjM5LDcgKzIzOSw3IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIGZ1bmMgPSBQeUNGdW5jdGlvbl9OZXcoZGVzY3ItPmRfbWV0aG9kLCBzZWxmKTsKKyAgICBmdW5jID0gUHlDRnVuY3Rpb25fTmV3RXgoZGVzY3ItPmRfbWV0aG9kLCBzZWxmLCBOVUxMKTsKICAgICBpZiAoZnVuYyA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBhcmdzID0gUHlUdXBsZV9HZXRTbGljZShhcmdzLCAxLCBhcmdjKTsKQEAgLTI5Miw3ICsyOTIsNyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBmdW5jID0gUHlDRnVuY3Rpb25fTmV3KGRlc2NyLT5kX21ldGhvZCwgc2VsZik7CisgICAgZnVuYyA9IFB5Q0Z1bmN0aW9uX05ld0V4KGRlc2NyLT5kX21ldGhvZCwgc2VsZiwgTlVMTCk7CiAgICAgaWYgKGZ1bmMgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgYXJncyA9IFB5VHVwbGVfR2V0U2xpY2UoYXJncywgMSwgYXJnYyk7CkBAIC0zNTMsMTEgKzM1MywxMyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIG1ldGhvZF9nZXRfZG9jKFB5TWV0aG9kRGVzY3JPYmplY3QgKmRlc2NyLCB2b2lkICpjbG9zdXJlKQogewotICAgIGlmIChkZXNjci0+ZF9tZXRob2QtPm1sX2RvYyA9PSBOVUxMKSB7Ci0gICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICAgICAgcmV0dXJuIFB5X05vbmU7Ci0gICAgfQotICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZyhkZXNjci0+ZF9tZXRob2QtPm1sX2RvYyk7CisgICAgcmV0dXJuIF9QeVR5cGVfR2V0RG9jRnJvbUludGVybmFsRG9jKGRlc2NyLT5kX21ldGhvZC0+bWxfbmFtZSwgZGVzY3ItPmRfbWV0aG9kLT5tbF9kb2MpOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorbWV0aG9kX2dldF90ZXh0X3NpZ25hdHVyZShQeU1ldGhvZERlc2NyT2JqZWN0ICpkZXNjciwgdm9pZCAqY2xvc3VyZSkKK3sKKyAgICByZXR1cm4gX1B5VHlwZV9HZXRUZXh0U2lnbmF0dXJlRnJvbUludGVybmFsRG9jKGRlc2NyLT5kX21ldGhvZC0+bWxfbmFtZSwgZGVzY3ItPmRfbWV0aG9kLT5tbF9kb2MpOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtMzk4LDYgKzQwMCwyNCBAQAogICAgIHJldHVybiBkZXNjci0+ZF9xdWFsbmFtZTsKIH0KIAorc3RhdGljIFB5T2JqZWN0ICoKK2Rlc2NyX3JlZHVjZShQeURlc2NyT2JqZWN0ICpkZXNjcikKK3sKKyAgICBQeU9iamVjdCAqYnVpbHRpbnM7CisgICAgUHlPYmplY3QgKmdldGF0dHI7CisgICAgX1B5X0lERU5USUZJRVIoZ2V0YXR0cik7CisKKyAgICBidWlsdGlucyA9IFB5RXZhbF9HZXRCdWlsdGlucygpOworICAgIGdldGF0dHIgPSBfUHlEaWN0X0dldEl0ZW1JZChidWlsdGlucywgJlB5SWRfZ2V0YXR0cik7CisgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIk8oT08pIiwgZ2V0YXR0ciwgUHlEZXNjcl9UWVBFKGRlc2NyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBQeURlc2NyX05BTUUoZGVzY3IpKTsKK30KKworc3RhdGljIFB5TWV0aG9kRGVmIGRlc2NyX21ldGhvZHNbXSA9IHsKKyAgICB7Il9fcmVkdWNlX18iLCAoUHlDRnVuY3Rpb24pZGVzY3JfcmVkdWNlLCBNRVRIX05PQVJHUywgTlVMTH0sCisgICAge05VTEwsIE5VTEx9Cit9OworCiBzdGF0aWMgUHlNZW1iZXJEZWYgZGVzY3JfbWVtYmVyc1tdID0gewogICAgIHsiX19vYmpjbGFzc19fIiwgVF9PQkpFQ1QsIG9mZnNldG9mKFB5RGVzY3JPYmplY3QsIGRfdHlwZSksIFJFQURPTkxZfSwKICAgICB7Il9fbmFtZV9fIiwgVF9PQkpFQ1QsIG9mZnNldG9mKFB5RGVzY3JPYmplY3QsIGRfbmFtZSksIFJFQURPTkxZfSwKQEAgLTQwNyw2ICs0MjcsNyBAQAogc3RhdGljIFB5R2V0U2V0RGVmIG1ldGhvZF9nZXRzZXRbXSA9IHsKICAgICB7Il9fZG9jX18iLCAoZ2V0dGVyKW1ldGhvZF9nZXRfZG9jfSwKICAgICB7Il9fcXVhbG5hbWVfXyIsIChnZXR0ZXIpZGVzY3JfZ2V0X3F1YWxuYW1lfSwKKyAgICB7Il9fdGV4dF9zaWduYXR1cmVfXyIsIChnZXR0ZXIpbWV0aG9kX2dldF90ZXh0X3NpZ25hdHVyZX0sCiAgICAgezB9CiB9OwogCkBAIC00NDUsMTYgKzQ2NiwxOSBAQAogc3RhdGljIFB5T2JqZWN0ICoKIHdyYXBwZXJkZXNjcl9nZXRfZG9jKFB5V3JhcHBlckRlc2NyT2JqZWN0ICpkZXNjciwgdm9pZCAqY2xvc3VyZSkKIHsKLSAgICBpZiAoZGVzY3ItPmRfYmFzZS0+ZG9jID09IE5VTEwpIHsKLSAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwotICAgICAgICByZXR1cm4gUHlfTm9uZTsKLSAgICB9Ci0gICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nKGRlc2NyLT5kX2Jhc2UtPmRvYyk7CisgICAgcmV0dXJuIF9QeVR5cGVfR2V0RG9jRnJvbUludGVybmFsRG9jKGRlc2NyLT5kX2Jhc2UtPm5hbWUsIGRlc2NyLT5kX2Jhc2UtPmRvYyk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCit3cmFwcGVyZGVzY3JfZ2V0X3RleHRfc2lnbmF0dXJlKFB5V3JhcHBlckRlc2NyT2JqZWN0ICpkZXNjciwgdm9pZCAqY2xvc3VyZSkKK3sKKyAgICByZXR1cm4gX1B5VHlwZV9HZXRUZXh0U2lnbmF0dXJlRnJvbUludGVybmFsRG9jKGRlc2NyLT5kX2Jhc2UtPm5hbWUsIGRlc2NyLT5kX2Jhc2UtPmRvYyk7CiB9CiAKIHN0YXRpYyBQeUdldFNldERlZiB3cmFwcGVyZGVzY3JfZ2V0c2V0W10gPSB7CiAgICAgeyJfX2RvY19fIiwgKGdldHRlcil3cmFwcGVyZGVzY3JfZ2V0X2RvY30sCiAgICAgeyJfX3F1YWxuYW1lX18iLCAoZ2V0dGVyKWRlc2NyX2dldF9xdWFsbmFtZX0sCisgICAgeyJfX3RleHRfc2lnbmF0dXJlX18iLCAoZ2V0dGVyKXdyYXBwZXJkZXNjcl9nZXRfdGV4dF9zaWduYXR1cmV9LAogICAgIHswfQogfTsKIApAQCAtNDk0LDcgKzUxOCw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlcm5leHQgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KKyAgICBkZXNjcl9tZXRob2RzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KICAgICBkZXNjcl9tZW1iZXJzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21lbWJlcnMgKi8KICAgICBtZXRob2RfZ2V0c2V0LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldHNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzZSAqLwpAQCAtNTMyLDcgKzU1Niw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlcm5leHQgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KKyAgICBkZXNjcl9tZXRob2RzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KICAgICBkZXNjcl9tZW1iZXJzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21lbWJlcnMgKi8KICAgICBtZXRob2RfZ2V0c2V0LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldHNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzZSAqLwpAQCAtNTY5LDcgKzU5Myw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlcm5leHQgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KKyAgICBkZXNjcl9tZXRob2RzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KICAgICBkZXNjcl9tZW1iZXJzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21lbWJlcnMgKi8KICAgICBtZW1iZXJfZ2V0c2V0LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldHNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzZSAqLwpAQCAtNjQzLDcgKzY2Nyw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlcm5leHQgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KKyAgICBkZXNjcl9tZXRob2RzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KICAgICBkZXNjcl9tZW1iZXJzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21lbWJlcnMgKi8KICAgICB3cmFwcGVyZGVzY3JfZ2V0c2V0LCAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldHNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzZSAqLwpAQCAtMTAwOSw3ICsxMDMzLDcgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiB3cmFwcGVyX3JpY2hjb21wYXJlKFB5T2JqZWN0ICphLCBQeU9iamVjdCAqYiwgaW50IG9wKQogewotICAgIGludCByZXN1bHQ7CisgICAgUHlfaW50cHRyX3QgcmVzdWx0OwogICAgIFB5T2JqZWN0ICp2OwogICAgIFB5V3JhcHBlckRlc2NyT2JqZWN0ICphX2Rlc2NyLCAqYl9kZXNjcjsKIApAQCAtMTA4NSw2ICsxMTA5LDIzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3AtPnNlbGYpOwogfQogCitzdGF0aWMgUHlPYmplY3QgKgord3JhcHBlcl9yZWR1Y2Uod3JhcHBlcm9iamVjdCAqd3ApCit7CisgICAgUHlPYmplY3QgKmJ1aWx0aW5zOworICAgIFB5T2JqZWN0ICpnZXRhdHRyOworICAgIF9QeV9JREVOVElGSUVSKGdldGF0dHIpOworCisgICAgYnVpbHRpbnMgPSBQeUV2YWxfR2V0QnVpbHRpbnMoKTsKKyAgICBnZXRhdHRyID0gX1B5RGljdF9HZXRJdGVtSWQoYnVpbHRpbnMsICZQeUlkX2dldGF0dHIpOworICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJPKE9PKSIsIGdldGF0dHIsIHdwLT5zZWxmLCBQeURlc2NyX05BTUUod3AtPmRlc2NyKSk7Cit9CisKK3N0YXRpYyBQeU1ldGhvZERlZiB3cmFwcGVyX21ldGhvZHNbXSA9IHsKKyAgICB7Il9fcmVkdWNlX18iLCAoUHlDRnVuY3Rpb24pd3JhcHBlcl9yZWR1Y2UsIE1FVEhfTk9BUkdTLCBOVUxMfSwKKyAgICB7TlVMTCwgTlVMTH0KK307CisKIHN0YXRpYyBQeU1lbWJlckRlZiB3cmFwcGVyX21lbWJlcnNbXSA9IHsKICAgICB7Il9fc2VsZl9fIiwgVF9PQkpFQ1QsIG9mZnNldG9mKHdyYXBwZXJvYmplY3QsIHNlbGYpLCBSRUFET05MWX0sCiAgICAgezB9CkBAIC0xMTA4LDE3ICsxMTQ5LDE1IEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi13cmFwcGVyX2RvYyh3cmFwcGVyb2JqZWN0ICp3cCkKK3dyYXBwZXJfZG9jKHdyYXBwZXJvYmplY3QgKndwLCB2b2lkICpjbG9zdXJlKQogewotICAgIGNvbnN0IGNoYXIgKnMgPSB3cC0+ZGVzY3ItPmRfYmFzZS0+ZG9jOworICAgIHJldHVybiBfUHlUeXBlX0dldERvY0Zyb21JbnRlcm5hbERvYyh3cC0+ZGVzY3ItPmRfYmFzZS0+bmFtZSwgd3AtPmRlc2NyLT5kX2Jhc2UtPmRvYyk7Cit9CiAKLSAgICBpZiAocyA9PSBOVUxMKSB7Ci0gICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICAgICAgcmV0dXJuIFB5X05vbmU7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmcocyk7Ci0gICAgfQorc3RhdGljIFB5T2JqZWN0ICoKK3dyYXBwZXJfdGV4dF9zaWduYXR1cmUod3JhcHBlcm9iamVjdCAqd3AsIHZvaWQgKmNsb3N1cmUpCit7CisgICAgcmV0dXJuIF9QeVR5cGVfR2V0VGV4dFNpZ25hdHVyZUZyb21JbnRlcm5hbERvYyh3cC0+ZGVzY3ItPmRfYmFzZS0+bmFtZSwgd3AtPmRlc2NyLT5kX2Jhc2UtPmRvYyk7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC0xMTMyLDYgKzExNzEsNyBAQAogICAgIHsiX19uYW1lX18iLCAoZ2V0dGVyKXdyYXBwZXJfbmFtZX0sCiAgICAgeyJfX3F1YWxuYW1lX18iLCAoZ2V0dGVyKXdyYXBwZXJfcXVhbG5hbWV9LAogICAgIHsiX19kb2NfXyIsIChnZXR0ZXIpd3JhcHBlcl9kb2N9LAorICAgIHsiX190ZXh0X3NpZ25hdHVyZV9fIiwgKGdldHRlcil3cmFwcGVyX3RleHRfc2lnbmF0dXJlfSwKICAgICB7MH0KIH07CiAKQEAgLTExOTMsNyArMTIzMyw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlcm5leHQgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KKyAgICB3cmFwcGVyX21ldGhvZHMsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KICAgICB3cmFwcGVyX21lbWJlcnMsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21lbWJlcnMgKi8KICAgICB3cmFwcGVyX2dldHNldHMsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldHNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzZSAqLwpAQCAtMTIyOCwxMSArMTI2OCwxMSBAQAogLyogQSBidWlsdC1pbiAncHJvcGVydHknIHR5cGUgKi8KIAogLyoKLSAgICBjbGFzcyBwcm9wZXJ0eShvYmplY3QpOgorY2xhc3MgcHJvcGVydHkob2JqZWN0KToKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmZ2V0PU5vbmUsIGZzZXQ9Tm9uZSwgZmRlbD1Ob25lLCBkb2M9Tm9uZSk6CiAgICAgICAgIGlmIGRvYyBpcyBOb25lIGFuZCBmZ2V0IGlzIG5vdCBOb25lIGFuZCBoYXNhdHRyKGZnZXQsICJfX2RvY19fIik6Ci0gICAgICAgIGRvYyA9IGZnZXQuX19kb2NfXworICAgICAgICAgICAgZG9jID0gZmdldC5fX2RvY19fCiAgICAgICAgIHNlbGYuX19nZXQgPSBmZ2V0CiAgICAgICAgIHNlbGYuX19zZXQgPSBmc2V0CiAgICAgICAgIHNlbGYuX19kZWwgPSBmZGVsCkBAIC0xMjQwLDE5ICsxMjgwLDE5IEBACiAKICAgICBkZWYgX19nZXRfXyhzZWxmLCBpbnN0LCB0eXBlPU5vbmUpOgogICAgICAgICBpZiBpbnN0IGlzIE5vbmU6Ci0gICAgICAgIHJldHVybiBzZWxmCisgICAgICAgICAgICByZXR1cm4gc2VsZgogICAgICAgICBpZiBzZWxmLl9fZ2V0IGlzIE5vbmU6Ci0gICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yLCAidW5yZWFkYWJsZSBhdHRyaWJ1dGUiCisgICAgICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvciwgInVucmVhZGFibGUgYXR0cmlidXRlIgogICAgICAgICByZXR1cm4gc2VsZi5fX2dldChpbnN0KQogCiAgICAgZGVmIF9fc2V0X18oc2VsZiwgaW5zdCwgdmFsdWUpOgogICAgICAgICBpZiBzZWxmLl9fc2V0IGlzIE5vbmU6Ci0gICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yLCAiY2FuJ3Qgc2V0IGF0dHJpYnV0ZSIKKyAgICAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yLCAiY2FuJ3Qgc2V0IGF0dHJpYnV0ZSIKICAgICAgICAgcmV0dXJuIHNlbGYuX19zZXQoaW5zdCwgdmFsdWUpCiAKICAgICBkZWYgX19kZWxldGVfXyhzZWxmLCBpbnN0KToKICAgICAgICAgaWYgc2VsZi5fX2RlbCBpcyBOb25lOgotICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvciwgImNhbid0IGRlbGV0ZSBhdHRyaWJ1dGUiCisgICAgICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvciwgImNhbid0IGRlbGV0ZSBhdHRyaWJ1dGUiCiAgICAgICAgIHJldHVybiBzZWxmLl9fZGVsKGluc3QpCiAKICovCmRpZmYgLS1naXQgYS9PYmplY3RzL2RpY3RvYmplY3QuYyBiL09iamVjdHMvZGljdG9iamVjdC5jCmluZGV4IDk1MzQ4NGMuLmE0OTRkNmIgMTAwNjQ0Ci0tLSBhL09iamVjdHMvZGljdG9iamVjdC5jCisrKyBiL09iamVjdHMvZGljdG9iamVjdC5jCkBAIC02OSw2ICs2OSwxMSBAQAogI2luY2x1ZGUgIlB5dGhvbi5oIgogI2luY2x1ZGUgInN0cmluZ2xpYi9lcS5oIgogCisvKltjbGluaWMgaW5wdXRdCitjbGFzcyBkaWN0ICJQeURpY3RPYmplY3QgKiIgIiZQeURpY3RfVHlwZSIKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kYTM5YTNlZTVlNmI0YjBkIGlucHV0PWYxNTdhNWEwY2U5NTg5ZDZdKi8KKwogdHlwZWRlZiBzdHJ1Y3QgewogICAgIC8qIENhY2hlZCBoYXNoIGNvZGUgb2YgbWVfa2V5LiAqLwogICAgIFB5X2hhc2hfdCBtZV9oYXNoOwpAQCAtOTUsMjAgKzEwMCw2IEBACiBpdCdzIFVTQUJMRV9GUkFDVElPTiAoY3VycmVudGx5IHR3by10aGlyZHMpIGZ1bGwuCiAqLwogCi0vKiBTZXQgYSBrZXkgZXJyb3Igd2l0aCB0aGUgc3BlY2lmaWVkIGFyZ3VtZW50LCB3cmFwcGluZyBpdCBpbiBhCi0gKiB0dXBsZSBhdXRvbWF0aWNhbGx5IHNvIHRoYXQgdHVwbGUga2V5cyBhcmUgbm90IHVucGFja2VkIGFzIHRoZQotICogZXhjZXB0aW9uIGFyZ3VtZW50cy4gKi8KLXN0YXRpYyB2b2lkCi1zZXRfa2V5X2Vycm9yKFB5T2JqZWN0ICphcmcpCi17Ci0gICAgUHlPYmplY3QgKnR1cDsKLSAgICB0dXAgPSBQeVR1cGxlX1BhY2soMSwgYXJnKTsKLSAgICBpZiAoIXR1cCkKLSAgICAgICAgcmV0dXJuOyAvKiBjYWxsZXIgd2lsbCBleHBlY3QgZXJyb3IgdG8gYmUgc2V0IGFueXdheSAqLwotICAgIFB5RXJyX1NldE9iamVjdChQeUV4Y19LZXlFcnJvciwgdHVwKTsKLSAgICBQeV9ERUNSRUYodHVwKTsKLX0KLQogI2RlZmluZSBQRVJUVVJCX1NISUZUIDUKIAogLyoKQEAgLTMwNSw5ICsyOTYsOSBAQAogICogI2RlZmluZSBVU0FCTEVfRlJBQ1RJT04obikgKCgobikgPj4gMSkgKyAoKG4pID4+IDIpIC0gKChuKSA+PiAzKSkKICovCiAKLS8qIEdST1dUSF9SQVRFLiBHcm93dGggcmF0ZSB1cG9uIGhpdHRpbmcgbWF4aW11bSBsb2FkLiAKLSAqIEN1cnJlbnRseSBzZXQgdG8gdXNlZCoyICsgY2FwYWNpdHkvMi4gCi0gKiBUaGlzIG1lYW5zIHRoYXQgZGljdHMgZG91YmxlIGluIHNpemUgd2hlbiBncm93aW5nIHdpdGhvdXQgZGVsZXRpb25zLCAKKy8qIEdST1dUSF9SQVRFLiBHcm93dGggcmF0ZSB1cG9uIGhpdHRpbmcgbWF4aW11bSBsb2FkLgorICogQ3VycmVudGx5IHNldCB0byB1c2VkKjIgKyBjYXBhY2l0eS8yLgorICogVGhpcyBtZWFucyB0aGF0IGRpY3RzIGRvdWJsZSBpbiBzaXplIHdoZW4gZ3Jvd2luZyB3aXRob3V0IGRlbGV0aW9ucywKICAqIGJ1dCBoYXZlIG1vcmUgaGVhZCByb29tIHdoZW4gdGhlIG51bWJlciBvZiBkZWxldGlvbnMgaXMgb24gYSBwYXIgd2l0aCB0aGUKICAqIG51bWJlciBvZiBpbnNlcnRpb25zLgogICogUmFpc2luZyB0aGlzIHRvIHVzZWQqNCBkb3VibGVzIG1lbW9yeSBjb25zdW1wdGlvbiBkZXBlbmRpbmcgb24gdGhlIHNpemUgb2YKQEAgLTM4OSw2ICszODAsNyBAQAogbmV3X2RpY3QoUHlEaWN0S2V5c09iamVjdCAqa2V5cywgUHlPYmplY3QgKip2YWx1ZXMpCiB7CiAgICAgUHlEaWN0T2JqZWN0ICptcDsKKyAgICBhc3NlcnQoa2V5cyAhPSBOVUxMKTsKICAgICBpZiAobnVtZnJlZSkgewogICAgICAgICBtcCA9IGZyZWVfbGlzdFstLW51bWZyZWVdOwogICAgICAgICBhc3NlcnQgKG1wICE9IE5VTEwpOwpAQCAtNDMxLDcgKzQyMywxMCBAQAogUHlPYmplY3QgKgogUHlEaWN0X05ldyh2b2lkKQogewotICAgIHJldHVybiBuZXdfZGljdChuZXdfa2V5c19vYmplY3QoUHlEaWN0X01JTlNJWkVfQ09NQklORUQpLCBOVUxMKTsKKyAgICBQeURpY3RLZXlzT2JqZWN0ICprZXlzID0gbmV3X2tleXNfb2JqZWN0KFB5RGljdF9NSU5TSVpFX0NPTUJJTkVEKTsKKyAgICBpZiAoa2V5cyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gbmV3X2RpY3Qoa2V5cywgTlVMTCk7CiB9CiAKIC8qCkBAIC00NjMsMTMgKzQ1OCwxMyBAQAogbG9va2RpY3QoUHlEaWN0T2JqZWN0ICptcCwgUHlPYmplY3QgKmtleSwKICAgICAgICAgIFB5X2hhc2hfdCBoYXNoLCBQeU9iamVjdCAqKip2YWx1ZV9hZGRyKQogewotICAgIHJlZ2lzdGVyIHNpemVfdCBpOwotICAgIHJlZ2lzdGVyIHNpemVfdCBwZXJ0dXJiOwotICAgIHJlZ2lzdGVyIFB5RGljdEtleUVudHJ5ICpmcmVlc2xvdDsKLSAgICByZWdpc3RlciBzaXplX3QgbWFzazsKKyAgICBzaXplX3QgaTsKKyAgICBzaXplX3QgcGVydHVyYjsKKyAgICBQeURpY3RLZXlFbnRyeSAqZnJlZXNsb3Q7CisgICAgc2l6ZV90IG1hc2s7CiAgICAgUHlEaWN0S2V5RW50cnkgKmVwMDsKLSAgICByZWdpc3RlciBQeURpY3RLZXlFbnRyeSAqZXA7Ci0gICAgcmVnaXN0ZXIgaW50IGNtcDsKKyAgICBQeURpY3RLZXlFbnRyeSAqZXA7CisgICAgaW50IGNtcDsKICAgICBQeU9iamVjdCAqc3RhcnRrZXk7CiAKIHRvcDoKQEAgLTU1NSwxMiArNTUwLDEyIEBACiBsb29rZGljdF91bmljb2RlKFB5RGljdE9iamVjdCAqbXAsIFB5T2JqZWN0ICprZXksCiAgICAgICAgICAgICAgICAgIFB5X2hhc2hfdCBoYXNoLCBQeU9iamVjdCAqKip2YWx1ZV9hZGRyKQogewotICAgIHJlZ2lzdGVyIHNpemVfdCBpOwotICAgIHJlZ2lzdGVyIHNpemVfdCBwZXJ0dXJiOwotICAgIHJlZ2lzdGVyIFB5RGljdEtleUVudHJ5ICpmcmVlc2xvdDsKLSAgICByZWdpc3RlciBzaXplX3QgbWFzayA9IERLX01BU0sobXAtPm1hX2tleXMpOworICAgIHNpemVfdCBpOworICAgIHNpemVfdCBwZXJ0dXJiOworICAgIFB5RGljdEtleUVudHJ5ICpmcmVlc2xvdDsKKyAgICBzaXplX3QgbWFzayA9IERLX01BU0sobXAtPm1hX2tleXMpOwogICAgIFB5RGljdEtleUVudHJ5ICplcDAgPSAmbXAtPm1hX2tleXMtPmRrX2VudHJpZXNbMF07Ci0gICAgcmVnaXN0ZXIgUHlEaWN0S2V5RW50cnkgKmVwOworICAgIFB5RGljdEtleUVudHJ5ICplcDsKIAogICAgIC8qIE1ha2Ugc3VyZSB0aGlzIGZ1bmN0aW9uIGRvZXNuJ3QgaGF2ZSB0byBoYW5kbGUgbm9uLXVuaWNvZGUga2V5cywKICAgICAgICBpbmNsdWRpbmcgc3ViY2xhc3NlcyBvZiBzdHI7IGUuZy4sIG9uZSByZWFzb24gdG8gc3ViY2xhc3MKQEAgLTYyMCwxMSArNjE1LDExIEBACiBsb29rZGljdF91bmljb2RlX25vZHVtbXkoUHlEaWN0T2JqZWN0ICptcCwgUHlPYmplY3QgKmtleSwKICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9oYXNoX3QgaGFzaCwgUHlPYmplY3QgKioqdmFsdWVfYWRkcikKIHsKLSAgICByZWdpc3RlciBzaXplX3QgaTsKLSAgICByZWdpc3RlciBzaXplX3QgcGVydHVyYjsKLSAgICByZWdpc3RlciBzaXplX3QgbWFzayA9IERLX01BU0sobXAtPm1hX2tleXMpOworICAgIHNpemVfdCBpOworICAgIHNpemVfdCBwZXJ0dXJiOworICAgIHNpemVfdCBtYXNrID0gREtfTUFTSyhtcC0+bWFfa2V5cyk7CiAgICAgUHlEaWN0S2V5RW50cnkgKmVwMCA9ICZtcC0+bWFfa2V5cy0+ZGtfZW50cmllc1swXTsKLSAgICByZWdpc3RlciBQeURpY3RLZXlFbnRyeSAqZXA7CisgICAgUHlEaWN0S2V5RW50cnkgKmVwOwogCiAgICAgLyogTWFrZSBzdXJlIHRoaXMgZnVuY3Rpb24gZG9lc24ndCBoYXZlIHRvIGhhbmRsZSBub24tdW5pY29kZSBrZXlzLAogICAgICAgIGluY2x1ZGluZyBzdWJjbGFzc2VzIG9mIHN0cjsgZS5nLiwgb25lIHJlYXNvbiB0byBzdWJjbGFzcwpAQCAtNjY1LDExICs2NjAsMTEgQEAKIGxvb2tkaWN0X3NwbGl0KFB5RGljdE9iamVjdCAqbXAsIFB5T2JqZWN0ICprZXksCiAgICAgICAgICAgICAgICBQeV9oYXNoX3QgaGFzaCwgUHlPYmplY3QgKioqdmFsdWVfYWRkcikKIHsKLSAgICByZWdpc3RlciBzaXplX3QgaTsKLSAgICByZWdpc3RlciBzaXplX3QgcGVydHVyYjsKLSAgICByZWdpc3RlciBzaXplX3QgbWFzayA9IERLX01BU0sobXAtPm1hX2tleXMpOworICAgIHNpemVfdCBpOworICAgIHNpemVfdCBwZXJ0dXJiOworICAgIHNpemVfdCBtYXNrID0gREtfTUFTSyhtcC0+bWFfa2V5cyk7CiAgICAgUHlEaWN0S2V5RW50cnkgKmVwMCA9ICZtcC0+bWFfa2V5cy0+ZGtfZW50cmllc1swXTsKLSAgICByZWdpc3RlciBQeURpY3RLZXlFbnRyeSAqZXA7CisgICAgUHlEaWN0S2V5RW50cnkgKmVwOwogCiAgICAgaWYgKCFQeVVuaWNvZGVfQ2hlY2tFeGFjdChrZXkpKSB7CiAgICAgICAgIGVwID0gbG9va2RpY3QobXAsIGtleSwgaGFzaCwgdmFsdWVfYWRkcik7CkBAIC04MTksMTMgKzgxNCwxNCBAQAogICAgIGlmIChlcCA9PSBOVUxMKSB7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CisgICAgYXNzZXJ0KFB5VW5pY29kZV9DaGVja0V4YWN0KGtleSkgfHwgbXAtPm1hX2tleXMtPmRrX2xvb2t1cCA9PSBsb29rZGljdCk7CiAgICAgUHlfSU5DUkVGKHZhbHVlKTsKICAgICBNQUlOVEFJTl9UUkFDS0lORyhtcCwga2V5LCB2YWx1ZSk7CiAgICAgb2xkX3ZhbHVlID0gKnZhbHVlX2FkZHI7CiAgICAgaWYgKG9sZF92YWx1ZSAhPSBOVUxMKSB7CiAgICAgICAgIGFzc2VydChlcC0+bWVfa2V5ICE9IE5VTEwgJiYgZXAtPm1lX2tleSAhPSBkdW1teSk7CiAgICAgICAgICp2YWx1ZV9hZGRyID0gdmFsdWU7Ci0gICAgICAgIFB5X0RFQ1JFRihvbGRfdmFsdWUpOyAvKiB3aGljaCAqKkNBTioqIHJlLWVudGVyICovCisgICAgICAgIFB5X0RFQ1JFRihvbGRfdmFsdWUpOyAvKiB3aGljaCAqKkNBTioqIHJlLWVudGVyIChzZWUgaXNzdWUgIzIyNjUzKSAqLwogICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgaWYgKGVwLT5tZV9rZXkgPT0gTlVMTCkgewpAQCAtODU2LDkgKzg1Miw4IEBACiAgICAgICAgIH0KICAgICAgICAgbXAtPm1hX3VzZWQrKzsKICAgICAgICAgKnZhbHVlX2FkZHIgPSB2YWx1ZTsKKyAgICAgICAgYXNzZXJ0KGVwLT5tZV9rZXkgIT0gTlVMTCAmJiBlcC0+bWVfa2V5ICE9IGR1bW15KTsKICAgICB9Ci0gICAgYXNzZXJ0KGVwLT5tZV9rZXkgIT0gTlVMTCAmJiBlcC0+bWVfa2V5ICE9IGR1bW15KTsKLSAgICBhc3NlcnQoUHlVbmljb2RlX0NoZWNrRXhhY3Qoa2V5KSB8fCBtcC0+bWFfa2V5cy0+ZGtfbG9va3VwID09IGxvb2tkaWN0KTsKICAgICByZXR1cm4gMDsKIH0KIApAQCAtMTIzNyw3ICsxMjMyLDcgQEAKICAgICBpZiAoZXAgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIC0xOwogICAgIGlmICgqdmFsdWVfYWRkciA9PSBOVUxMKSB7Ci0gICAgICAgIHNldF9rZXlfZXJyb3Ioa2V5KTsKKyAgICAgICAgX1B5RXJyX1NldEtleUVycm9yKGtleSk7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAgICAgb2xkX3ZhbHVlID0gKnZhbHVlX2FkZHI7CkBAIC0xMzkxLDcgKzEzODYsNyBAQAogICAgICAgICB9CiAgICAgICAgIERLX0RFQ1JFRihrZXlzKTsKICAgICB9Ci0gICAgZWxzZSB7CisgICAgZWxzZSBpZiAoa2V5cyAhPSBOVUxMKSB7CiAgICAgICAgIGFzc2VydChrZXlzLT5ka19yZWZjbnQgPT0gMSk7CiAgICAgICAgIERLX0RFQ1JFRihrZXlzKTsKICAgICB9CkBAIC0xNDA3LDkgKzE0MDIsOSBAQAogZGljdF9yZXByKFB5RGljdE9iamVjdCAqbXApCiB7CiAgICAgUHlfc3NpemVfdCBpOwotICAgIFB5T2JqZWN0ICpzLCAqdGVtcCwgKmNvbG9uID0gTlVMTDsKLSAgICBQeU9iamVjdCAqcGllY2VzID0gTlVMTCwgKnJlc3VsdCA9IE5VTEw7Ci0gICAgUHlPYmplY3QgKmtleSwgKnZhbHVlOworICAgIFB5T2JqZWN0ICprZXkgPSBOVUxMLCAqdmFsdWUgPSBOVUxMOworICAgIF9QeVVuaWNvZGVXcml0ZXIgd3JpdGVyOworICAgIGludCBmaXJzdDsKIAogICAgIGkgPSBQeV9SZXByRW50ZXIoKFB5T2JqZWN0ICopbXApOwogICAgIGlmIChpICE9IDApIHsKQEAgLTE0MTcsNzEgKzE0MTIsNzMgQEAKICAgICB9CiAKICAgICBpZiAobXAtPm1hX3VzZWQgPT0gMCkgewotICAgICAgICByZXN1bHQgPSBQeVVuaWNvZGVfRnJvbVN0cmluZygie30iKTsKLSAgICAgICAgZ290byBEb25lOworICAgICAgICBQeV9SZXByTGVhdmUoKFB5T2JqZWN0ICopbXApOworICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmcoInt9Iik7CiAgICAgfQogCi0gICAgcGllY2VzID0gUHlMaXN0X05ldygwKTsKLSAgICBpZiAocGllY2VzID09IE5VTEwpCi0gICAgICAgIGdvdG8gRG9uZTsKKyAgICBfUHlVbmljb2RlV3JpdGVyX0luaXQoJndyaXRlcik7CisgICAgd3JpdGVyLm92ZXJhbGxvY2F0ZSA9IDE7CisgICAgLyogInsiICsgIjE6IDIiICsgIiwgMzogNCIgKiAobGVuIC0gMSkgKyAifSIgKi8KKyAgICB3cml0ZXIubWluX2xlbmd0aCA9IDEgKyA0ICsgKDIgKyA0KSAqIChtcC0+bWFfdXNlZCAtIDEpICsgMTsKIAotICAgIGNvbG9uID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoIjogIik7Ci0gICAgaWYgKGNvbG9uID09IE5VTEwpCi0gICAgICAgIGdvdG8gRG9uZTsKKyAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUNoYXIoJndyaXRlciwgJ3snKSA8IDApCisgICAgICAgIGdvdG8gZXJyb3I7CiAKICAgICAvKiBEbyByZXByKCkgb24gZWFjaCBrZXkrdmFsdWUgcGFpciwgYW5kIGluc2VydCAiOiAiIGJldHdlZW4gdGhlbS4KICAgICAgICBOb3RlIHRoYXQgcmVwciBtYXkgbXV0YXRlIHRoZSBkaWN0LiAqLwogICAgIGkgPSAwOworICAgIGZpcnN0ID0gMTsKICAgICB3aGlsZSAoUHlEaWN0X05leHQoKFB5T2JqZWN0ICopbXAsICZpLCAma2V5LCAmdmFsdWUpKSB7Ci0gICAgICAgIGludCBzdGF0dXM7CisgICAgICAgIFB5T2JqZWN0ICpzOworICAgICAgICBpbnQgcmVzOworCiAgICAgICAgIC8qIFByZXZlbnQgcmVwciBmcm9tIGRlbGV0aW5nIGtleSBvciB2YWx1ZSBkdXJpbmcga2V5IGZvcm1hdC4gKi8KICAgICAgICAgUHlfSU5DUkVGKGtleSk7CiAgICAgICAgIFB5X0lOQ1JFRih2YWx1ZSk7CisKKyAgICAgICAgaWYgKCFmaXJzdCkgeworICAgICAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVBU0NJSVN0cmluZygmd3JpdGVyLCAiLCAiLCAyKSA8IDApCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQorICAgICAgICBmaXJzdCA9IDA7CisKICAgICAgICAgcyA9IFB5T2JqZWN0X1JlcHIoa2V5KTsKLSAgICAgICAgUHlVbmljb2RlX0FwcGVuZCgmcywgY29sb24pOwotICAgICAgICBQeVVuaWNvZGVfQXBwZW5kQW5kRGVsKCZzLCBQeU9iamVjdF9SZXByKHZhbHVlKSk7Ci0gICAgICAgIFB5X0RFQ1JFRihrZXkpOwotICAgICAgICBQeV9ERUNSRUYodmFsdWUpOwogICAgICAgICBpZiAocyA9PSBOVUxMKQotICAgICAgICAgICAgZ290byBEb25lOwotICAgICAgICBzdGF0dXMgPSBQeUxpc3RfQXBwZW5kKHBpZWNlcywgcyk7Ci0gICAgICAgIFB5X0RFQ1JFRihzKTsgIC8qIGFwcGVuZCBjcmVhdGVkIGEgbmV3IHJlZiAqLwotICAgICAgICBpZiAoc3RhdHVzIDwgMCkKLSAgICAgICAgICAgIGdvdG8gRG9uZTsKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIHJlcyA9IF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVTdHIoJndyaXRlciwgcyk7CisgICAgICAgIFB5X0RFQ1JFRihzKTsKKyAgICAgICAgaWYgKHJlcyA8IDApCisgICAgICAgICAgICBnb3RvIGVycm9yOworCisgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQVNDSUlTdHJpbmcoJndyaXRlciwgIjogIiwgMikgPCAwKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKworICAgICAgICBzID0gUHlPYmplY3RfUmVwcih2YWx1ZSk7CisgICAgICAgIGlmIChzID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICByZXMgPSBfUHlVbmljb2RlV3JpdGVyX1dyaXRlU3RyKCZ3cml0ZXIsIHMpOworICAgICAgICBQeV9ERUNSRUYocyk7CisgICAgICAgIGlmIChyZXMgPCAwKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKworICAgICAgICBQeV9DTEVBUihrZXkpOworICAgICAgICBQeV9DTEVBUih2YWx1ZSk7CiAgICAgfQogCi0gICAgLyogQWRkICJ7fSIgZGVjb3JhdGlvbnMgdG8gdGhlIGZpcnN0IGFuZCBsYXN0IGl0ZW1zLiAqLwotICAgIGFzc2VydChQeUxpc3RfR0VUX1NJWkUocGllY2VzKSA+IDApOwotICAgIHMgPSBQeVVuaWNvZGVfRnJvbVN0cmluZygieyIpOwotICAgIGlmIChzID09IE5VTEwpCi0gICAgICAgIGdvdG8gRG9uZTsKLSAgICB0ZW1wID0gUHlMaXN0X0dFVF9JVEVNKHBpZWNlcywgMCk7Ci0gICAgUHlVbmljb2RlX0FwcGVuZEFuZERlbCgmcywgdGVtcCk7Ci0gICAgUHlMaXN0X1NFVF9JVEVNKHBpZWNlcywgMCwgcyk7Ci0gICAgaWYgKHMgPT0gTlVMTCkKLSAgICAgICAgZ290byBEb25lOworICAgIHdyaXRlci5vdmVyYWxsb2NhdGUgPSAwOworICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcigmd3JpdGVyLCAnfScpIDwgMCkKKyAgICAgICAgZ290byBlcnJvcjsKIAotICAgIHMgPSBQeVVuaWNvZGVfRnJvbVN0cmluZygifSIpOwotICAgIGlmIChzID09IE5VTEwpCi0gICAgICAgIGdvdG8gRG9uZTsKLSAgICB0ZW1wID0gUHlMaXN0X0dFVF9JVEVNKHBpZWNlcywgUHlMaXN0X0dFVF9TSVpFKHBpZWNlcykgLSAxKTsKLSAgICBQeVVuaWNvZGVfQXBwZW5kQW5kRGVsKCZ0ZW1wLCBzKTsKLSAgICBQeUxpc3RfU0VUX0lURU0ocGllY2VzLCBQeUxpc3RfR0VUX1NJWkUocGllY2VzKSAtIDEsIHRlbXApOwotICAgIGlmICh0ZW1wID09IE5VTEwpCi0gICAgICAgIGdvdG8gRG9uZTsKLQotICAgIC8qIFBhc3RlIHRoZW0gYWxsIHRvZ2V0aGVyIHdpdGggIiwgIiBiZXR3ZWVuLiAqLwotICAgIHMgPSBQeVVuaWNvZGVfRnJvbVN0cmluZygiLCAiKTsKLSAgICBpZiAocyA9PSBOVUxMKQotICAgICAgICBnb3RvIERvbmU7Ci0gICAgcmVzdWx0ID0gUHlVbmljb2RlX0pvaW4ocywgcGllY2VzKTsKLSAgICBQeV9ERUNSRUYocyk7Ci0KLURvbmU6Ci0gICAgUHlfWERFQ1JFRihwaWVjZXMpOwotICAgIFB5X1hERUNSRUYoY29sb24pOwogICAgIFB5X1JlcHJMZWF2ZSgoUHlPYmplY3QgKiltcCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKworICAgIHJldHVybiBfUHlVbmljb2RlV3JpdGVyX0ZpbmlzaCgmd3JpdGVyKTsKKworZXJyb3I6CisgICAgUHlfUmVwckxlYXZlKChQeU9iamVjdCAqKW1wKTsKKyAgICBfUHlVbmljb2RlV3JpdGVyX0RlYWxsb2MoJndyaXRlcik7CisgICAgUHlfWERFQ1JFRihrZXkpOworICAgIFB5X1hERUNSRUYodmFsdWUpOworICAgIHJldHVybiBOVUxMOwogfQogCiBzdGF0aWMgUHlfc3NpemVfdApAQCAtMTQ5MSw3ICsxNDg4LDcgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKLWRpY3Rfc3Vic2NyaXB0KFB5RGljdE9iamVjdCAqbXAsIHJlZ2lzdGVyIFB5T2JqZWN0ICprZXkpCitkaWN0X3N1YnNjcmlwdChQeURpY3RPYmplY3QgKm1wLCBQeU9iamVjdCAqa2V5KQogewogICAgIFB5T2JqZWN0ICp2OwogICAgIFB5X2hhc2hfdCBoYXNoOwpAQCAtMTUyMyw3ICsxNTIwLDcgQEAKICAgICAgICAgICAgIGVsc2UgaWYgKFB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KLSAgICAgICAgc2V0X2tleV9lcnJvcihrZXkpOworICAgICAgICBfUHlFcnJfU2V0S2V5RXJyb3Ioa2V5KTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIGVsc2UKQEAgLTE1NDcsMTAgKzE1NDQsMTAgQEAKIH07CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1kaWN0X2tleXMocmVnaXN0ZXIgUHlEaWN0T2JqZWN0ICptcCkKK2RpY3Rfa2V5cyhQeURpY3RPYmplY3QgKm1wKQogewotICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICp2OwotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgaSwgajsKKyAgICBQeU9iamVjdCAqdjsKKyAgICBQeV9zc2l6ZV90IGksIGo7CiAgICAgUHlEaWN0S2V5RW50cnkgKmVwOwogICAgIFB5X3NzaXplX3Qgc2l6ZSwgbiwgb2Zmc2V0OwogICAgIFB5T2JqZWN0ICoqdmFsdWVfcHRyOwpAQCAtMTU5MSwxMCArMTU4OCwxMCBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotZGljdF92YWx1ZXMocmVnaXN0ZXIgUHlEaWN0T2JqZWN0ICptcCkKK2RpY3RfdmFsdWVzKFB5RGljdE9iamVjdCAqbXApCiB7Ci0gICAgcmVnaXN0ZXIgUHlPYmplY3QgKnY7Ci0gICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBpLCBqOworICAgIFB5T2JqZWN0ICp2OworICAgIFB5X3NzaXplX3QgaSwgajsKICAgICBQeV9zc2l6ZV90IHNpemUsIG4sIG9mZnNldDsKICAgICBQeU9iamVjdCAqKnZhbHVlX3B0cjsKIApAQCAtMTYzMywxMCArMTYzMCwxMCBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotZGljdF9pdGVtcyhyZWdpc3RlciBQeURpY3RPYmplY3QgKm1wKQorZGljdF9pdGVtcyhQeURpY3RPYmplY3QgKm1wKQogewotICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICp2OwotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgaSwgaiwgbjsKKyAgICBQeU9iamVjdCAqdjsKKyAgICBQeV9zc2l6ZV90IGksIGosIG47CiAgICAgUHlfc3NpemVfdCBzaXplLCBvZmZzZXQ7CiAgICAgUHlPYmplY3QgKml0ZW0sICprZXk7CiAgICAgUHlEaWN0S2V5RW50cnkgKmVwOwpAQCAtMTY5NCwzNyArMTY5MSw3MiBAQAogICAgIHJldHVybiB2OwogfQogCisvKltjbGluaWMgaW5wdXRdCitAY2xhc3NtZXRob2QKK2RpY3QuZnJvbWtleXMKKyAgICBpdGVyYWJsZTogb2JqZWN0CisgICAgdmFsdWU6IG9iamVjdD1Ob25lCisgICAgLworCitSZXR1cm5zIGEgbmV3IGRpY3Qgd2l0aCBrZXlzIGZyb20gaXRlcmFibGUgYW5kIHZhbHVlcyBlcXVhbCB0byB2YWx1ZS4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworUHlEb2NfU1RSVkFSKGRpY3RfZnJvbWtleXNfX2RvY19fLAorImZyb21rZXlzKCR0eXBlLCBpdGVyYWJsZSwgdmFsdWU9Tm9uZSwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybnMgYSBuZXcgZGljdCB3aXRoIGtleXMgZnJvbSBpdGVyYWJsZSBhbmQgdmFsdWVzIGVxdWFsIHRvIHZhbHVlLiIpOworCisjZGVmaW5lIERJQ1RfRlJPTUtFWVNfTUVUSE9EREVGICAgIFwKKyAgICB7ImZyb21rZXlzIiwgKFB5Q0Z1bmN0aW9uKWRpY3RfZnJvbWtleXMsIE1FVEhfVkFSQVJHU3xNRVRIX0NMQVNTLCBkaWN0X2Zyb21rZXlzX19kb2NfX30sCisKIHN0YXRpYyBQeU9iamVjdCAqCi1kaWN0X2Zyb21rZXlzKFB5T2JqZWN0ICpjbHMsIFB5T2JqZWN0ICphcmdzKQorZGljdF9mcm9ta2V5c19pbXBsKFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKml0ZXJhYmxlLCBQeU9iamVjdCAqdmFsdWUpOworCitzdGF0aWMgUHlPYmplY3QgKgorZGljdF9mcm9ta2V5cyhQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICphcmdzKQogewotICAgIFB5T2JqZWN0ICpzZXE7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlPYmplY3QgKml0ZXJhYmxlOwogICAgIFB5T2JqZWN0ICp2YWx1ZSA9IFB5X05vbmU7CisKKyAgICBpZiAoIVB5QXJnX1VucGFja1R1cGxlKGFyZ3MsICJmcm9ta2V5cyIsCisgICAgICAgIDEsIDIsCisgICAgICAgICZpdGVyYWJsZSwgJnZhbHVlKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IGRpY3RfZnJvbWtleXNfaW1wbCh0eXBlLCBpdGVyYWJsZSwgdmFsdWUpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitkaWN0X2Zyb21rZXlzX2ltcGwoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqaXRlcmFibGUsIFB5T2JqZWN0ICp2YWx1ZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD01NWY4ZGMwZmZhODc0MDZmIGlucHV0PWI4NWE2NjdmOWJmNDY2OWRdKi8KK3sKICAgICBQeU9iamVjdCAqaXQ7ICAgICAgIC8qIGl0ZXIoc2VxKSAqLwogICAgIFB5T2JqZWN0ICprZXk7CiAgICAgUHlPYmplY3QgKmQ7CiAgICAgaW50IHN0YXR1czsKIAotICAgIGlmICghUHlBcmdfVW5wYWNrVHVwbGUoYXJncywgImZyb21rZXlzIiwgMSwgMiwgJnNlcSwgJnZhbHVlKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBkID0gUHlPYmplY3RfQ2FsbE9iamVjdChjbHMsIE5VTEwpOworICAgIGQgPSBQeU9iamVjdF9DYWxsT2JqZWN0KChQeU9iamVjdCAqKXR5cGUsIE5VTEwpOwogICAgIGlmIChkID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgaWYgKFB5RGljdF9DaGVja0V4YWN0KGQpICYmICgoUHlEaWN0T2JqZWN0ICopZCktPm1hX3VzZWQgPT0gMCkgewotICAgICAgICBpZiAoUHlEaWN0X0NoZWNrRXhhY3Qoc2VxKSkgeworICAgICAgICBpZiAoUHlEaWN0X0NoZWNrRXhhY3QoaXRlcmFibGUpKSB7CiAgICAgICAgICAgICBQeURpY3RPYmplY3QgKm1wID0gKFB5RGljdE9iamVjdCAqKWQ7CiAgICAgICAgICAgICBQeU9iamVjdCAqb2xkdmFsdWU7CiAgICAgICAgICAgICBQeV9zc2l6ZV90IHBvcyA9IDA7CiAgICAgICAgICAgICBQeU9iamVjdCAqa2V5OwogICAgICAgICAgICAgUHlfaGFzaF90IGhhc2g7CiAKLSAgICAgICAgICAgIGlmIChkaWN0cmVzaXplKG1wLCBQeV9TSVpFKHNlcSkpKSB7CisgICAgICAgICAgICBpZiAoZGljdHJlc2l6ZShtcCwgUHlfU0laRShpdGVyYWJsZSkpKSB7CiAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGQpOwogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICB3aGlsZSAoX1B5RGljdF9OZXh0KHNlcSwgJnBvcywgJmtleSwgJm9sZHZhbHVlLCAmaGFzaCkpIHsKKyAgICAgICAgICAgIHdoaWxlIChfUHlEaWN0X05leHQoaXRlcmFibGUsICZwb3MsICZrZXksICZvbGR2YWx1ZSwgJmhhc2gpKSB7CiAgICAgICAgICAgICAgICAgaWYgKGluc2VydGRpY3QobXAsIGtleSwgaGFzaCwgdmFsdWUpKSB7CiAgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihkKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0xNzMyLDE4ICsxNzY0LDE4IEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gZDsKICAgICAgICAgfQotICAgICAgICBpZiAoUHlBbnlTZXRfQ2hlY2tFeGFjdChzZXEpKSB7CisgICAgICAgIGlmIChQeUFueVNldF9DaGVja0V4YWN0KGl0ZXJhYmxlKSkgewogICAgICAgICAgICAgUHlEaWN0T2JqZWN0ICptcCA9IChQeURpY3RPYmplY3QgKilkOwogICAgICAgICAgICAgUHlfc3NpemVfdCBwb3MgPSAwOwogICAgICAgICAgICAgUHlPYmplY3QgKmtleTsKICAgICAgICAgICAgIFB5X2hhc2hfdCBoYXNoOwogCi0gICAgICAgICAgICBpZiAoZGljdHJlc2l6ZShtcCwgUHlTZXRfR0VUX1NJWkUoc2VxKSkpIHsKKyAgICAgICAgICAgIGlmIChkaWN0cmVzaXplKG1wLCBQeVNldF9HRVRfU0laRShpdGVyYWJsZSkpKSB7CiAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGQpOwogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICB3aGlsZSAoX1B5U2V0X05leHRFbnRyeShzZXEsICZwb3MsICZrZXksICZoYXNoKSkgeworICAgICAgICAgICAgd2hpbGUgKF9QeVNldF9OZXh0RW50cnkoaXRlcmFibGUsICZwb3MsICZrZXksICZoYXNoKSkgewogICAgICAgICAgICAgICAgIGlmIChpbnNlcnRkaWN0KG1wLCBrZXksIGhhc2gsIHZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZCk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMTc1Myw3ICsxNzg1LDcgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIGl0ID0gUHlPYmplY3RfR2V0SXRlcihzZXEpOworICAgIGl0ID0gUHlPYmplY3RfR2V0SXRlcihpdGVyYWJsZSk7CiAgICAgaWYgKGl0ID09IE5VTEwpewogICAgICAgICBQeV9ERUNSRUYoZCk7CiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMTkwOCw4ICsxOTQwLDggQEAKIGludAogUHlEaWN0X01lcmdlKFB5T2JqZWN0ICphLCBQeU9iamVjdCAqYiwgaW50IG92ZXJyaWRlKQogewotICAgIHJlZ2lzdGVyIFB5RGljdE9iamVjdCAqbXAsICpvdGhlcjsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGksIG47CisgICAgUHlEaWN0T2JqZWN0ICptcCwgKm90aGVyOworICAgIFB5X3NzaXplX3QgaSwgbjsKICAgICBQeURpY3RLZXlFbnRyeSAqZW50cnk7CiAKICAgICAvKiBXZSBhY2NlcHQgZm9yIHRoZSBhcmd1bWVudCBlaXRoZXIgYSBjb25jcmV0ZSBkaWN0aW9uYXJ5IG9iamVjdCwKQEAgLTIwMTgsNyArMjA1MCw3IEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1kaWN0X2NvcHkocmVnaXN0ZXIgUHlEaWN0T2JqZWN0ICptcCkKK2RpY3RfY29weShQeURpY3RPYmplY3QgKm1wKQogewogICAgIHJldHVybiBQeURpY3RfQ29weSgoUHlPYmplY3QqKW1wKTsKIH0KQEAgLTIxMzAsMTMgKzIxNjIsMTggQEAKICAgICAgICAgaWYgKGF2YWwgIT0gTlVMTCkgewogICAgICAgICAgICAgaW50IGNtcDsKICAgICAgICAgICAgIFB5T2JqZWN0ICpidmFsOworICAgICAgICAgICAgUHlPYmplY3QgKip2YWRkcjsKICAgICAgICAgICAgIFB5T2JqZWN0ICprZXkgPSBlcC0+bWVfa2V5OwogICAgICAgICAgICAgLyogdGVtcG9yYXJpbHkgYnVtcCBhdmFsJ3MgcmVmY291bnQgdG8gZW5zdXJlIGl0IHN0YXlzCiAgICAgICAgICAgICAgICBhbGl2ZSB1bnRpbCB3ZSdyZSBkb25lIHdpdGggaXQgKi8KICAgICAgICAgICAgIFB5X0lOQ1JFRihhdmFsKTsKICAgICAgICAgICAgIC8qIGRpdHRvIGZvciBrZXkgKi8KICAgICAgICAgICAgIFB5X0lOQ1JFRihrZXkpOwotICAgICAgICAgICAgYnZhbCA9IFB5RGljdF9HZXRJdGVtV2l0aEVycm9yKChQeU9iamVjdCAqKWIsIGtleSk7CisgICAgICAgICAgICAvKiByZXVzZSB0aGUga25vd24gaGFzaCB2YWx1ZSAqLworICAgICAgICAgICAgaWYgKChiLT5tYV9rZXlzLT5ka19sb29rdXApKGIsIGtleSwgZXAtPm1lX2hhc2gsICZ2YWRkcikgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBidmFsID0gTlVMTDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBidmFsID0gKnZhZGRyOwogICAgICAgICAgICAgUHlfREVDUkVGKGtleSk7CiAgICAgICAgICAgICBpZiAoYnZhbCA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGF2YWwpOwpAQCAtMjE3NCw5ICsyMjExLDMxIEBACiAgICAgcmV0dXJuIHJlczsKIH0KIAorLypbY2xpbmljIGlucHV0XQorCitAY29leGlzdAorZGljdC5fX2NvbnRhaW5zX18KKworICBrZXk6IG9iamVjdAorICAvCisKK1RydWUgaWYgRCBoYXMgYSBrZXkgaywgZWxzZSBGYWxzZS4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworUHlEb2NfU1RSVkFSKGRpY3RfX19jb250YWluc19fX19kb2NfXywKKyJfX2NvbnRhaW5zX18oJHNlbGYsIGtleSwgLylcbiIKKyItLVxuIgorIlxuIgorIlRydWUgaWYgRCBoYXMgYSBrZXkgaywgZWxzZSBGYWxzZS4iKTsKKworI2RlZmluZSBESUNUX19fQ09OVEFJTlNfX19NRVRIT0RERUYgICAgXAorICAgIHsiX19jb250YWluc19fIiwgKFB5Q0Z1bmN0aW9uKWRpY3RfX19jb250YWluc19fLCBNRVRIX098TUVUSF9DT0VYSVNULCBkaWN0X19fY29udGFpbnNfX19fZG9jX199LAorCiBzdGF0aWMgUHlPYmplY3QgKgotZGljdF9jb250YWlucyhyZWdpc3RlciBQeURpY3RPYmplY3QgKm1wLCBQeU9iamVjdCAqa2V5KQorZGljdF9fX2NvbnRhaW5zX18oUHlEaWN0T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqa2V5KQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTNjZjNmOGFhZjJjYzVjYzMgaW5wdXQ9Yjg1MmIyYTE5YjUxYWIyNF0qLwogeworICAgIHJlZ2lzdGVyIFB5RGljdE9iamVjdCAqbXAgPSBzZWxmOwogICAgIFB5X2hhc2hfdCBoYXNoOwogICAgIFB5RGljdEtleUVudHJ5ICplcDsKICAgICBQeU9iamVjdCAqKnZhbHVlX2FkZHI7CkBAIC0yMTk0LDcgKzIyNTMsNyBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotZGljdF9nZXQocmVnaXN0ZXIgUHlEaWN0T2JqZWN0ICptcCwgUHlPYmplY3QgKmFyZ3MpCitkaWN0X2dldChQeURpY3RPYmplY3QgKm1wLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBQeU9iamVjdCAqa2V5OwogICAgIFB5T2JqZWN0ICpmYWlsb2JqID0gUHlfTm9uZTsKQEAgLTIyMjIsMTkgKzIyODEsMTkgQEAKICAgICByZXR1cm4gdmFsOwogfQogCi1zdGF0aWMgUHlPYmplY3QgKgotZGljdF9zZXRkZWZhdWx0KHJlZ2lzdGVyIFB5RGljdE9iamVjdCAqbXAsIFB5T2JqZWN0ICphcmdzKQorUHlPYmplY3QgKgorUHlEaWN0X1NldERlZmF1bHQoUHlPYmplY3QgKmQsIFB5T2JqZWN0ICprZXksIFB5T2JqZWN0ICpkZWZhdWx0b2JqKQogewotICAgIFB5T2JqZWN0ICprZXk7Ci0gICAgUHlPYmplY3QgKmZhaWxvYmogPSBQeV9Ob25lOworICAgIFB5RGljdE9iamVjdCAqbXAgPSAoUHlEaWN0T2JqZWN0ICopZDsKICAgICBQeU9iamVjdCAqdmFsID0gTlVMTDsKICAgICBQeV9oYXNoX3QgaGFzaDsKICAgICBQeURpY3RLZXlFbnRyeSAqZXA7CiAgICAgUHlPYmplY3QgKip2YWx1ZV9hZGRyOwogCi0gICAgaWYgKCFQeUFyZ19VbnBhY2tUdXBsZShhcmdzLCAic2V0ZGVmYXVsdCIsIDEsIDIsICZrZXksICZmYWlsb2JqKSkKKyAgICBpZiAoIVB5RGljdF9DaGVjayhkKSkgeworICAgICAgICBQeUVycl9CYWRJbnRlcm5hbENhbGwoKTsKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0KKyAgICB9CiAgICAgaWYgKCFQeVVuaWNvZGVfQ2hlY2tFeGFjdChrZXkpIHx8CiAgICAgICAgIChoYXNoID0gKChQeUFTQ0lJT2JqZWN0ICopIGtleSktPmhhc2gpID09IC0xKSB7CiAgICAgICAgIGhhc2ggPSBQeU9iamVjdF9IYXNoKGtleSk7CkBAIC0yMjUyLDIzICsyMzExLDM1IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICBlcCA9IGZpbmRfZW1wdHlfc2xvdChtcCwga2V5LCBoYXNoLCAmdmFsdWVfYWRkcik7CiAgICAgICAgIH0KLSAgICAgICAgUHlfSU5DUkVGKGZhaWxvYmopOworICAgICAgICBQeV9JTkNSRUYoZGVmYXVsdG9iaik7CiAgICAgICAgIFB5X0lOQ1JFRihrZXkpOwotICAgICAgICBNQUlOVEFJTl9UUkFDS0lORyhtcCwga2V5LCBmYWlsb2JqKTsKKyAgICAgICAgTUFJTlRBSU5fVFJBQ0tJTkcobXAsIGtleSwgZGVmYXVsdG9iaik7CiAgICAgICAgIGVwLT5tZV9rZXkgPSBrZXk7CiAgICAgICAgIGVwLT5tZV9oYXNoID0gaGFzaDsKLSAgICAgICAgKnZhbHVlX2FkZHIgPSBmYWlsb2JqOwotICAgICAgICB2YWwgPSBmYWlsb2JqOworICAgICAgICAqdmFsdWVfYWRkciA9IGRlZmF1bHRvYmo7CisgICAgICAgIHZhbCA9IGRlZmF1bHRvYmo7CiAgICAgICAgIG1wLT5tYV9rZXlzLT5ka191c2FibGUtLTsKICAgICAgICAgbXAtPm1hX3VzZWQrKzsKICAgICB9Ci0gICAgUHlfSU5DUkVGKHZhbCk7CiAgICAgcmV0dXJuIHZhbDsKIH0KIAorc3RhdGljIFB5T2JqZWN0ICoKK2RpY3Rfc2V0ZGVmYXVsdChQeURpY3RPYmplY3QgKm1wLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqa2V5LCAqdmFsOworICAgIFB5T2JqZWN0ICpkZWZhdWx0b2JqID0gUHlfTm9uZTsKKworICAgIGlmICghUHlBcmdfVW5wYWNrVHVwbGUoYXJncywgInNldGRlZmF1bHQiLCAxLCAyLCAma2V5LCAmZGVmYXVsdG9iaikpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgdmFsID0gUHlEaWN0X1NldERlZmF1bHQoKFB5T2JqZWN0ICopbXAsIGtleSwgZGVmYXVsdG9iaik7CisgICAgUHlfWElOQ1JFRih2YWwpOworICAgIHJldHVybiB2YWw7Cit9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1kaWN0X2NsZWFyKHJlZ2lzdGVyIFB5RGljdE9iamVjdCAqbXApCitkaWN0X2NsZWFyKFB5RGljdE9iamVjdCAqbXApCiB7CiAgICAgUHlEaWN0X0NsZWFyKChQeU9iamVjdCAqKW1wKTsKICAgICBQeV9SRVRVUk5fTk9ORTsKQEAgLTIyOTAsNyArMjM2MSw3IEBACiAgICAgICAgICAgICBQeV9JTkNSRUYoZGVmbHQpOwogICAgICAgICAgICAgcmV0dXJuIGRlZmx0OwogICAgICAgICB9Ci0gICAgICAgIHNldF9rZXlfZXJyb3Ioa2V5KTsKKyAgICAgICAgX1B5RXJyX1NldEtleUVycm9yKGtleSk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBpZiAoIVB5VW5pY29kZV9DaGVja0V4YWN0KGtleSkgfHwKQEAgLTIzMDgsNyArMjM3OSw3IEBACiAgICAgICAgICAgICBQeV9JTkNSRUYoZGVmbHQpOwogICAgICAgICAgICAgcmV0dXJuIGRlZmx0OwogICAgICAgICB9Ci0gICAgICAgIHNldF9rZXlfZXJyb3Ioa2V5KTsKKyAgICAgICAgX1B5RXJyX1NldEtleUVycm9yKGtleSk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICAqdmFsdWVfYWRkciA9IE5VTEw7CkBAIC0yNDQ5LDkgKzI1MjAsNiBAQAogICAgIHJldHVybiBzaXplb2YoUHlEaWN0S2V5c09iamVjdCkgKyAoREtfU0laRShrZXlzKS0xKSAqIHNpemVvZihQeURpY3RLZXlFbnRyeSk7CiB9CiAKLVB5RG9jX1NUUlZBUihjb250YWluc19fZG9jX18sCi0iRC5fX2NvbnRhaW5zX18oaykgLT4gVHJ1ZSBpZiBEIGhhcyBhIGtleSBrLCBlbHNlIEZhbHNlIik7Ci0KIFB5RG9jX1NUUlZBUihnZXRpdGVtX19kb2NfXywgInguX19nZXRpdGVtX18oeSkgPD09PiB4W3ldIik7CiAKIFB5RG9jX1NUUlZBUihzaXplb2ZfX2RvY19fLApAQCAtMjQ3MiwxNCArMjU0MCwxMCBAQAogMi10dXBsZTsgYnV0IHJhaXNlIEtleUVycm9yIGlmIEQgaXMgZW1wdHkuIik7CiAKIFB5RG9jX1NUUlZBUih1cGRhdGVfX2RvY19fLAotIkQudXBkYXRlKFtFLCBdKipGKSAtPiBOb25lLiAgVXBkYXRlIEQgZnJvbSBkaWN0L2l0ZXJhYmxlIEUgYW5kIEYuXG4iCi0iSWYgRSBwcmVzZW50IGFuZCBoYXMgYSAua2V5cygpIG1ldGhvZCwgZG9lczogICAgIGZvciBrIGluIEU6IERba10gPSBFW2tdXG5cCi1JZiBFIHByZXNlbnQgYW5kIGxhY2tzIC5rZXlzKCkgbWV0aG9kLCBkb2VzOiAgICAgZm9yIChrLCB2KSBpbiBFOiBEW2tdID0gdlxuXAotSW4gZWl0aGVyIGNhc2UsIHRoaXMgaXMgZm9sbG93ZWQgYnk6IGZvciBrIGluIEY6IERba10gPSBGW2tdIik7Ci0KLVB5RG9jX1NUUlZBUihmcm9ta2V5c19fZG9jX18sCi0iZGljdC5mcm9ta2V5cyhTWyx2XSkgLT4gTmV3IGRpY3Qgd2l0aCBrZXlzIGZyb20gUyBhbmQgdmFsdWVzIGVxdWFsIHRvIHYuXG5cCi12IGRlZmF1bHRzIHRvIE5vbmUuIik7CisiRC51cGRhdGUoW0UsIF0qKkYpIC0+IE5vbmUuICBVcGRhdGUgRCBmcm9tIGRpY3QvaXRlcmFibGUgRSBhbmQgRi5cblwKK0lmIEUgaXMgcHJlc2VudCBhbmQgaGFzIGEgLmtleXMoKSBtZXRob2QsIHRoZW4gZG9lczogIGZvciBrIGluIEU6IERba10gPSBFW2tdXG5cCitJZiBFIGlzIHByZXNlbnQgYW5kIGxhY2tzIGEgLmtleXMoKSBtZXRob2QsIHRoZW4gZG9lczogIGZvciBrLCB2IGluIEU6IERba10gPSB2XG5cCitJbiBlaXRoZXIgY2FzZSwgdGhpcyBpcyBmb2xsb3dlZCBieTogZm9yIGsgaW4gRjogIERba10gPSBGW2tdIik7CiAKIFB5RG9jX1NUUlZBUihjbGVhcl9fZG9jX18sCiAiRC5jbGVhcigpIC0+IE5vbmUuICBSZW1vdmUgYWxsIGl0ZW1zIGZyb20gRC4iKTsKQEAgLTI1MDAsOCArMjU2NCw3IEBACiAgICAgICAgICAgICAgIkQudmFsdWVzKCkgLT4gYW4gb2JqZWN0IHByb3ZpZGluZyBhIHZpZXcgb24gRCdzIHZhbHVlcyIpOwogCiBzdGF0aWMgUHlNZXRob2REZWYgbWFwcF9tZXRob2RzW10gPSB7Ci0gICAgeyJfX2NvbnRhaW5zX18iLChQeUNGdW5jdGlvbilkaWN0X2NvbnRhaW5zLCAgICAgTUVUSF9PIHwgTUVUSF9DT0VYSVNULAotICAgICBjb250YWluc19fZG9jX199LAorICAgIERJQ1RfX19DT05UQUlOU19fX01FVEhPRERFRgogICAgIHsiX19nZXRpdGVtX18iLCAoUHlDRnVuY3Rpb24pZGljdF9zdWJzY3JpcHQsICAgICAgICBNRVRIX08gfCBNRVRIX0NPRVhJU1QsCiAgICAgIGdldGl0ZW1fX2RvY19ffSwKICAgICB7Il9fc2l6ZW9mX18iLCAgICAgIChQeUNGdW5jdGlvbilkaWN0X3NpemVvZiwgICAgICAgTUVUSF9OT0FSR1MsCkBAIC0yNTIyLDggKzI1ODUsNyBAQAogICAgIHZhbHVlc19fZG9jX199LAogICAgIHsidXBkYXRlIiwgICAgICAgICAgKFB5Q0Z1bmN0aW9uKWRpY3RfdXBkYXRlLCAgICAgICBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLAogICAgICB1cGRhdGVfX2RvY19ffSwKLSAgICB7ImZyb21rZXlzIiwgICAgICAgIChQeUNGdW5jdGlvbilkaWN0X2Zyb21rZXlzLCAgICAgTUVUSF9WQVJBUkdTIHwgTUVUSF9DTEFTUywKLSAgICAgZnJvbWtleXNfX2RvY19ffSwKKyAgICBESUNUX0ZST01LRVlTX01FVEhPRERFRgogICAgIHsiY2xlYXIiLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKWRpY3RfY2xlYXIsICAgICAgICBNRVRIX05PQVJHUywKICAgICAgY2xlYXJfX2RvY19ffSwKICAgICB7ImNvcHkiLCAgICAgICAgICAgIChQeUNGdW5jdGlvbilkaWN0X2NvcHksICAgICAgICAgTUVUSF9OT0FSR1MsCkBAIC0yNTgwLDIyICsyNjQyLDIzIEBACiBkaWN0X25ldyhQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKIHsKICAgICBQeU9iamVjdCAqc2VsZjsKKyAgICBQeURpY3RPYmplY3QgKmQ7CiAKICAgICBhc3NlcnQodHlwZSAhPSBOVUxMICYmIHR5cGUtPnRwX2FsbG9jICE9IE5VTEwpOwogICAgIHNlbGYgPSB0eXBlLT50cF9hbGxvYyh0eXBlLCAwKTsKLSAgICBpZiAoc2VsZiAhPSBOVUxMKSB7Ci0gICAgICAgIFB5RGljdE9iamVjdCAqZCA9IChQeURpY3RPYmplY3QgKilzZWxmOwotICAgICAgICBkLT5tYV9rZXlzID0gbmV3X2tleXNfb2JqZWN0KFB5RGljdF9NSU5TSVpFX0NPTUJJTkVEKTsKLSAgICAgICAgLyogWFhYIC0gU2hvdWxkIHdlIHJhaXNlIGEgbm8tbWVtb3J5IGVycm9yPyAqLwotICAgICAgICBpZiAoZC0+bWFfa2V5cyA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBES19JTkNSRUYoUHlfRU1QVFlfS0VZUyk7Ci0gICAgICAgICAgICBkLT5tYV9rZXlzID0gUHlfRU1QVFlfS0VZUzsKLSAgICAgICAgICAgIGQtPm1hX3ZhbHVlcyA9IGVtcHR5X3ZhbHVlczsKLSAgICAgICAgfQotICAgICAgICBkLT5tYV91c2VkID0gMDsKLSAgICAgICAgLyogVGhlIG9iamVjdCBoYXMgYmVlbiBpbXBsaWNpdGx5IHRyYWNrZWQgYnkgdHBfYWxsb2MgKi8KLSAgICAgICAgaWYgKHR5cGUgPT0gJlB5RGljdF9UeXBlKQotICAgICAgICAgICAgX1B5T2JqZWN0X0dDX1VOVFJBQ0soZCk7CisgICAgaWYgKHNlbGYgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgZCA9IChQeURpY3RPYmplY3QgKilzZWxmOworCisgICAgLyogVGhlIG9iamVjdCBoYXMgYmVlbiBpbXBsaWNpdGx5IHRyYWNrZWQgYnkgdHBfYWxsb2MgKi8KKyAgICBpZiAodHlwZSA9PSAmUHlEaWN0X1R5cGUpCisgICAgICAgIF9QeU9iamVjdF9HQ19VTlRSQUNLKGQpOworCisgICAgZC0+bWFfdXNlZCA9IDA7CisgICAgZC0+bWFfa2V5cyA9IG5ld19rZXlzX29iamVjdChQeURpY3RfTUlOU0laRV9DT01CSU5FRCk7CisgICAgaWYgKGQtPm1hX2tleXMgPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYoc2VsZik7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICByZXR1cm4gc2VsZjsKIH0KQEAgLTI2NzEsOCArMjczNCwxMCBAQAogewogICAgIFB5T2JqZWN0ICprdjsKICAgICBrdiA9IF9QeVVuaWNvZGVfRnJvbUlkKGtleSk7IC8qIGJvcnJvd2VkICovCi0gICAgaWYgKGt2ID09IE5VTEwpCisgICAgaWYgKGt2ID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfQ2xlYXIoKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogICAgIHJldHVybiBQeURpY3RfR2V0SXRlbShkcCwga3YpOwogfQogCkBAIC0yNjgzLDggKzI3NDgsMTAgQEAKIHsKICAgICBQeU9iamVjdCAqa3YsICpydjsKICAgICBrdiA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKGtleSk7Ci0gICAgaWYgKGt2ID09IE5VTEwpCisgICAgaWYgKGt2ID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfQ2xlYXIoKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogICAgIHJ2ID0gUHlEaWN0X0dldEl0ZW0odiwga3YpOwogICAgIFB5X0RFQ1JFRihrdik7CiAgICAgcmV0dXJuIHJ2OwpAQCAtMjcxNSw2ICsyNzgyLDE1IEBACiB9CiAKIGludAorX1B5RGljdF9EZWxJdGVtSWQoUHlPYmplY3QgKnYsIF9QeV9JZGVudGlmaWVyICprZXkpCit7CisgICAgUHlPYmplY3QgKmt2ID0gX1B5VW5pY29kZV9Gcm9tSWQoa2V5KTsgLyogYm9ycm93ZWQgKi8KKyAgICBpZiAoa3YgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIHJldHVybiBQeURpY3RfRGVsSXRlbSh2LCBrdik7Cit9CisKK2ludAogUHlEaWN0X0RlbEl0ZW1TdHJpbmcoUHlPYmplY3QgKnYsIGNvbnN0IGNoYXIgKmtleSkKIHsKICAgICBQeU9iamVjdCAqa3Y7CkBAIC0yODA3LDggKzI4ODMsOCBAQAogc3RhdGljIFB5T2JqZWN0ICpkaWN0aXRlcl9pdGVybmV4dGtleShkaWN0aXRlcm9iamVjdCAqZGkpCiB7CiAgICAgUHlPYmplY3QgKmtleTsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGksIG1hc2ssIG9mZnNldDsKLSAgICByZWdpc3RlciBQeURpY3RLZXlzT2JqZWN0ICprOworICAgIFB5X3NzaXplX3QgaSwgbWFzaywgb2Zmc2V0OworICAgIFB5RGljdEtleXNPYmplY3QgKms7CiAgICAgUHlEaWN0T2JqZWN0ICpkID0gZGktPmRpX2RpY3Q7CiAgICAgUHlPYmplY3QgKip2YWx1ZV9wdHI7CiAKQEAgLTI4OTAsNyArMjk2Niw3IEBACiBzdGF0aWMgUHlPYmplY3QgKmRpY3RpdGVyX2l0ZXJuZXh0dmFsdWUoZGljdGl0ZXJvYmplY3QgKmRpKQogewogICAgIFB5T2JqZWN0ICp2YWx1ZTsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGksIG1hc2ssIG9mZnNldDsKKyAgICBQeV9zc2l6ZV90IGksIG1hc2ssIG9mZnNldDsKICAgICBQeURpY3RPYmplY3QgKmQgPSBkaS0+ZGlfZGljdDsKICAgICBQeU9iamVjdCAqKnZhbHVlX3B0cjsKIApAQCAtMjk3MSw3ICszMDQ3LDcgQEAKIHN0YXRpYyBQeU9iamVjdCAqZGljdGl0ZXJfaXRlcm5leHRpdGVtKGRpY3RpdGVyb2JqZWN0ICpkaSkKIHsKICAgICBQeU9iamVjdCAqa2V5LCAqdmFsdWUsICpyZXN1bHQgPSBkaS0+ZGlfcmVzdWx0OwotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgaSwgbWFzaywgb2Zmc2V0OworICAgIFB5X3NzaXplX3QgaSwgbWFzaywgb2Zmc2V0OwogICAgIFB5RGljdE9iamVjdCAqZCA9IGRpLT5kaV9kaWN0OwogICAgIFB5T2JqZWN0ICoqdmFsdWVfcHRyOwogCmRpZmYgLS1naXQgYS9PYmplY3RzL2V4Y2VwdGlvbnMuYyBiL09iamVjdHMvZXhjZXB0aW9ucy5jCmluZGV4IDZiMDQ3MDAuLjFhMjE4YzEgMTAwNjQ0Ci0tLSBhL09iamVjdHMvZXhjZXB0aW9ucy5jCisrKyBiL09iamVjdHMvZXhjZXB0aW9ucy5jCkBAIC0xNiw5ICsxNiw2IEBACiAjaWZkZWYgTVNfV0lORE9XUwogUHlPYmplY3QgKlB5RXhjX1dpbmRvd3NFcnJvciA9IE5VTEw7CiAjZW5kaWYKLSNpZmRlZiBfX1ZNUwotUHlPYmplY3QgKlB5RXhjX1ZNU0Vycm9yID0gTlVMTDsKLSNlbmRpZgogCiAvKiBUaGUgZGljdCBtYXAgZnJvbSBlcnJubyBjb2RlcyB0byBPU0Vycm9yIHN1YmNsYXNzZXMgKi8KIHN0YXRpYyBQeU9iamVjdCAqZXJybm9tYXAgPSBOVUxMOwpAQCAtMTIxLDExICsxMTgsMTEgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBCYXNlRXhjZXB0aW9uX3JlcHIoUHlCYXNlRXhjZXB0aW9uT2JqZWN0ICpzZWxmKQogewotICAgIGNoYXIgKm5hbWU7Ci0gICAgY2hhciAqZG90OworICAgIGNvbnN0IGNoYXIgKm5hbWU7CisgICAgY29uc3QgY2hhciAqZG90OwogCi0gICAgbmFtZSA9IChjaGFyICopUHlfVFlQRShzZWxmKS0+dHBfbmFtZTsKLSAgICBkb3QgPSBzdHJyY2hyKG5hbWUsICcuJyk7CisgICAgbmFtZSA9IFB5X1RZUEUoc2VsZiktPnRwX25hbWU7CisgICAgZG90ID0gKGNvbnN0IGNoYXIgKikgc3RycmNocihuYW1lLCAnLicpOwogICAgIGlmIChkb3QgIT0gTlVMTCkgbmFtZSA9IGRvdCsxOwogCiAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tRm9ybWF0KCIlcyVSIiwgbmFtZSwgc2VsZi0+YXJncyk7CkBAIC03MjcsMTMgKzcyNCwxNyBAQAogICogd2UgaGFjayBhcmdzIHNvIHRoYXQgaXQgb25seSBjb250YWlucyB0d28gaXRlbXMuICBUaGlzIGFsc28KICAqIG1lYW5zIHdlIG5lZWQgb3VyIG93biBfX3N0cl9fKCkgd2hpY2ggcHJpbnRzIG91dCB0aGUgZmlsZW5hbWUKICAqIHdoZW4gaXQgd2FzIHN1cHBsaWVkLgorICoKKyAqIChJZiBhIGZ1bmN0aW9uIGhhcyB0d28gZmlsZW5hbWVzLCBzdWNoIGFzIHJlbmFtZSgpLCBzeW1saW5rKCksCisgKiBvciBjb3B5KCksIFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZU9iamVjdHMoKSBpcyBjYWxsZWQsCisgKiB3aGljaCBhbGxvd3MgcGFzc2luZyBpbiBhIHNlY29uZCBmaWxlbmFtZS4pCiAgKi8KIAogLyogVGhpcyBmdW5jdGlvbiBkb2Vzbid0IGNsZWFudXAgb24gZXJyb3IsIHRoZSBjYWxsZXIgc2hvdWxkICovCiBzdGF0aWMgaW50CiBvc2Vycm9yX3BhcnNlX2FyZ3MoUHlPYmplY3QgKipwX2FyZ3MsCiAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKipteWVycm5vLCBQeU9iamVjdCAqKnN0cmVycm9yLAotICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICoqZmlsZW5hbWUKKyAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqKmZpbGVuYW1lLCBQeU9iamVjdCAqKmZpbGVuYW1lMgogI2lmZGVmIE1TX1dJTkRPV1MKICAgICAgICAgICAgICAgICAgICAsIFB5T2JqZWN0ICoqd2luZXJyb3IKICNlbmRpZgpAQCAtNzQxLDE0ICs3NDIsMjMgQEAKIHsKICAgICBQeV9zc2l6ZV90IG5hcmdzOwogICAgIFB5T2JqZWN0ICphcmdzID0gKnBfYXJnczsKKyNpZm5kZWYgTVNfV0lORE9XUworICAgIC8qCisgICAgICogaWdub3JlZCBvbiBub24tV2luZG93cyBwbGF0Zm9ybXMsCisgICAgICogYnV0IHBhcnNlZCBzbyBPU0Vycm9yIGhhcyBhIGNvbnNpc3RlbnQgc2lnbmF0dXJlCisgICAgICovCisgICAgUHlPYmplY3QgKl93aW5lcnJvciA9IE5VTEw7CisgICAgUHlPYmplY3QgKip3aW5lcnJvciA9ICZfd2luZXJyb3I7CisjZW5kaWYgLyogTVNfV0lORE9XUyAqLwogCiAgICAgbmFyZ3MgPSBQeVR1cGxlX0dFVF9TSVpFKGFyZ3MpOwogCi0jaWZkZWYgTVNfV0lORE9XUwotICAgIGlmIChuYXJncyA+PSAyICYmIG5hcmdzIDw9IDQpIHsKLSAgICAgICAgaWYgKCFQeUFyZ19VbnBhY2tUdXBsZShhcmdzLCAiT1NFcnJvciIsIDIsIDQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXllcnJubywgc3RyZXJyb3IsIGZpbGVuYW1lLCB3aW5lcnJvcikpCisgICAgaWYgKG5hcmdzID49IDIgJiYgbmFyZ3MgPD0gNSkgeworICAgICAgICBpZiAoIVB5QXJnX1VucGFja1R1cGxlKGFyZ3MsICJPU0Vycm9yIiwgMiwgNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteWVycm5vLCBzdHJlcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSwgd2luZXJyb3IsIGZpbGVuYW1lMikpCiAgICAgICAgICAgICByZXR1cm4gLTE7CisjaWZkZWYgTVNfV0lORE9XUwogICAgICAgICBpZiAoKndpbmVycm9yICYmIFB5TG9uZ19DaGVjaygqd2luZXJyb3IpKSB7CiAgICAgICAgICAgICBsb25nIGVycmNvZGUsIHdpbmVycmNvZGU7CiAgICAgICAgICAgICBQeU9iamVjdCAqbmV3YXJnczsKQEAgLTc4MCwxNCArNzkwLDggQEAKICAgICAgICAgICAgIFB5X0RFQ1JFRihhcmdzKTsKICAgICAgICAgICAgIGFyZ3MgPSAqcF9hcmdzID0gbmV3YXJnczsKICAgICAgICAgfQorI2VuZGlmIC8qIE1TX1dJTkRPV1MgKi8KICAgICB9Ci0jZWxzZQotICAgIGlmIChuYXJncyA+PSAyICYmIG5hcmdzIDw9IDMpIHsKLSAgICAgICAgaWYgKCFQeUFyZ19VbnBhY2tUdXBsZShhcmdzLCAiT1NFcnJvciIsIDIsIDMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXllcnJubywgc3RyZXJyb3IsIGZpbGVuYW1lKSkKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0jZW5kaWYKIAogICAgIHJldHVybiAwOwogfQpAQCAtNzk1LDcgKzc5OSw3IEBACiBzdGF0aWMgaW50CiBvc2Vycm9yX2luaXQoUHlPU0Vycm9yT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqKnBfYXJncywKICAgICAgICAgICAgICBQeU9iamVjdCAqbXllcnJubywgUHlPYmplY3QgKnN0cmVycm9yLAotICAgICAgICAgICAgIFB5T2JqZWN0ICpmaWxlbmFtZQorICAgICAgICAgICAgIFB5T2JqZWN0ICpmaWxlbmFtZSwgUHlPYmplY3QgKmZpbGVuYW1lMgogI2lmZGVmIE1TX1dJTkRPV1MKICAgICAgICAgICAgICAsIFB5T2JqZWN0ICp3aW5lcnJvcgogI2VuZGlmCkBAIC04MTksOSArODIzLDE0IEBACiAgICAgICAgICAgICBQeV9JTkNSRUYoZmlsZW5hbWUpOwogICAgICAgICAgICAgc2VsZi0+ZmlsZW5hbWUgPSBmaWxlbmFtZTsKIAotICAgICAgICAgICAgaWYgKG5hcmdzID49IDIgJiYgbmFyZ3MgPD0gMykgewotICAgICAgICAgICAgICAgIC8qIGZpbGVuYW1lIGlzIHJlbW92ZWQgZnJvbSB0aGUgYXJncyB0dXBsZSAoZm9yIGNvbXBhdGliaWxpdHkKLSAgICAgICAgICAgICAgICAgICBwdXJwb3Nlcywgc2VlIHRlc3RfZXhjZXB0aW9ucy5weSkgKi8KKyAgICAgICAgICAgIGlmIChmaWxlbmFtZTIgJiYgZmlsZW5hbWUyICE9IFB5X05vbmUpIHsKKyAgICAgICAgICAgICAgICBQeV9JTkNSRUYoZmlsZW5hbWUyKTsKKyAgICAgICAgICAgICAgICBzZWxmLT5maWxlbmFtZTIgPSBmaWxlbmFtZTI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChuYXJncyA+PSAyICYmIG5hcmdzIDw9IDUpIHsKKyAgICAgICAgICAgICAgICAvKiBmaWxlbmFtZSwgZmlsZW5hbWUyLCBhbmQgd2luZXJyb3IgYXJlIHJlbW92ZWQgZnJvbSB0aGUgYXJncyB0dXBsZQorICAgICAgICAgICAgICAgICAgIChmb3IgY29tcGF0aWJpbGl0eSBwdXJwb3Nlcywgc2VlIHRlc3RfZXhjZXB0aW9ucy5weSkgKi8KICAgICAgICAgICAgICAgICBQeU9iamVjdCAqc3Vic2xpY2UgPSBQeVR1cGxlX0dldFNsaWNlKGFyZ3MsIDAsIDIpOwogICAgICAgICAgICAgICAgIGlmICghc3Vic2xpY2UpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKQEAgLTg0NSw3ICs4NTQsNyBAQAogICAgIC8qIFN0ZWFscyB0aGUgcmVmZXJlbmNlIHRvIGFyZ3MgKi8KICAgICBQeV9DTEVBUihzZWxmLT5hcmdzKTsKICAgICBzZWxmLT5hcmdzID0gYXJnczsKLSAgICBhcmdzID0gTlVMTDsKKyAgICAqcF9hcmdzID0gYXJncyA9IE5VTEw7CiAKICAgICByZXR1cm4gMDsKIH0KQEAgLTg1OCw3ICs4NjcsNyBAQAogc3RhdGljIGludAogb3NlcnJvcl91c2VfaW5pdChQeVR5cGVPYmplY3QgKnR5cGUpCiB7Ci0gICAgLyogV2hlbiBfX2luaXRfXyBpcyBkZWZpbmVkIGluIGEgT1NFcnJvciBzdWJjbGFzcywgd2Ugd2FudCBhbnkKKyAgICAvKiBXaGVuIF9faW5pdF9fIGlzIGRlZmluZWQgaW4gYW4gT1NFcnJvciBzdWJjbGFzcywgd2Ugd2FudCBhbnkKICAgICAgICBleHRyYW5lb3VzIGFyZ3VtZW50IHRvIF9fbmV3X18gdG8gYmUgaWdub3JlZC4gIFRoZSBvbmx5IHJlYXNvbmFibGUKICAgICAgICBzb2x1dGlvbiwgZ2l2ZW4gX19uZXdfXyB0YWtlcyBhIHZhcmlhYmxlIG51bWJlciBvZiBhcmd1bWVudHMsCiAgICAgICAgaXMgdG8gZGVmZXIgYXJnIHBhcnNpbmcgYW5kIGluaXRpYWxpemF0aW9uIHRvIF9faW5pdF9fLgpAQCAtODgwLDE3ICs4ODksMjAgQEAKIE9TRXJyb3JfbmV3KFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQogewogICAgIFB5T1NFcnJvck9iamVjdCAqc2VsZiA9IE5VTEw7Ci0gICAgUHlPYmplY3QgKm15ZXJybm8gPSBOVUxMLCAqc3RyZXJyb3IgPSBOVUxMLCAqZmlsZW5hbWUgPSBOVUxMOworICAgIFB5T2JqZWN0ICpteWVycm5vID0gTlVMTCwgKnN0cmVycm9yID0gTlVMTDsKKyAgICBQeU9iamVjdCAqZmlsZW5hbWUgPSBOVUxMLCAqZmlsZW5hbWUyID0gTlVMTDsKICNpZmRlZiBNU19XSU5ET1dTCiAgICAgUHlPYmplY3QgKndpbmVycm9yID0gTlVMTDsKICNlbmRpZgogCisgICAgUHlfSU5DUkVGKGFyZ3MpOworCiAgICAgaWYgKCFvc2Vycm9yX3VzZV9pbml0KHR5cGUpKSB7CiAgICAgICAgIGlmICghX1B5QXJnX05vS2V5d29yZHModHlwZS0+dHBfbmFtZSwga3dkcykpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAKLSAgICAgICAgUHlfSU5DUkVGKGFyZ3MpOwotICAgICAgICBpZiAob3NlcnJvcl9wYXJzZV9hcmdzKCZhcmdzLCAmbXllcnJubywgJnN0cmVycm9yLCAmZmlsZW5hbWUKKyAgICAgICAgaWYgKG9zZXJyb3JfcGFyc2VfYXJncygmYXJncywgJm15ZXJybm8sICZzdHJlcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZmlsZW5hbWUsICZmaWxlbmFtZTIKICNpZmRlZiBNU19XSU5ET1dTCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAmd2luZXJyb3IKICNlbmRpZgpAQCAtOTE5LDcgKzkzMSw3IEBACiAgICAgc2VsZi0+d3JpdHRlbiA9IC0xOwogCiAgICAgaWYgKCFvc2Vycm9yX3VzZV9pbml0KHR5cGUpKSB7Ci0gICAgICAgIGlmIChvc2Vycm9yX2luaXQoc2VsZiwgJmFyZ3MsIG15ZXJybm8sIHN0cmVycm9yLCBmaWxlbmFtZQorICAgICAgICBpZiAob3NlcnJvcl9pbml0KHNlbGYsICZhcmdzLCBteWVycm5vLCBzdHJlcnJvciwgZmlsZW5hbWUsIGZpbGVuYW1lMgogI2lmZGVmIE1TX1dJTkRPV1MKICAgICAgICAgICAgICAgICAgICAgICAgICAsIHdpbmVycm9yCiAjZW5kaWYKQEAgLTkzMiw2ICs5NDQsNyBAQAogICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICB9CiAKKyAgICBQeV9YREVDUkVGKGFyZ3MpOwogICAgIHJldHVybiAoUHlPYmplY3QgKikgc2VsZjsKIAogZXJyb3I6CkBAIC05NDMsNyArOTU2LDggQEAKIHN0YXRpYyBpbnQKIE9TRXJyb3JfaW5pdChQeU9TRXJyb3JPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKIHsKLSAgICBQeU9iamVjdCAqbXllcnJubyA9IE5VTEwsICpzdHJlcnJvciA9IE5VTEwsICpmaWxlbmFtZSA9IE5VTEw7CisgICAgUHlPYmplY3QgKm15ZXJybm8gPSBOVUxMLCAqc3RyZXJyb3IgPSBOVUxMOworICAgIFB5T2JqZWN0ICpmaWxlbmFtZSA9IE5VTEwsICpmaWxlbmFtZTIgPSBOVUxMOwogI2lmZGVmIE1TX1dJTkRPV1MKICAgICBQeU9iamVjdCAqd2luZXJyb3IgPSBOVUxMOwogI2VuZGlmCkBAIC05NTYsMTQgKzk3MCwxNCBAQAogICAgICAgICByZXR1cm4gLTE7CiAKICAgICBQeV9JTkNSRUYoYXJncyk7Ci0gICAgaWYgKG9zZXJyb3JfcGFyc2VfYXJncygmYXJncywgJm15ZXJybm8sICZzdHJlcnJvciwgJmZpbGVuYW1lCisgICAgaWYgKG9zZXJyb3JfcGFyc2VfYXJncygmYXJncywgJm15ZXJybm8sICZzdHJlcnJvciwgJmZpbGVuYW1lLCAmZmlsZW5hbWUyCiAjaWZkZWYgTVNfV0lORE9XUwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAmd2luZXJyb3IKICNlbmRpZgogICAgICAgICApKQogICAgICAgICBnb3RvIGVycm9yOwogCi0gICAgaWYgKG9zZXJyb3JfaW5pdChzZWxmLCAmYXJncywgbXllcnJubywgc3RyZXJyb3IsIGZpbGVuYW1lCisgICAgaWYgKG9zZXJyb3JfaW5pdChzZWxmLCAmYXJncywgbXllcnJubywgc3RyZXJyb3IsIGZpbGVuYW1lLCBmaWxlbmFtZTIKICNpZmRlZiBNU19XSU5ET1dTCiAgICAgICAgICAgICAgICAgICAgICAsIHdpbmVycm9yCiAjZW5kaWYKQEAgLTk4Myw2ICs5OTcsNyBAQAogICAgIFB5X0NMRUFSKHNlbGYtPm15ZXJybm8pOwogICAgIFB5X0NMRUFSKHNlbGYtPnN0cmVycm9yKTsKICAgICBQeV9DTEVBUihzZWxmLT5maWxlbmFtZSk7CisgICAgUHlfQ0xFQVIoc2VsZi0+ZmlsZW5hbWUyKTsKICNpZmRlZiBNU19XSU5ET1dTCiAgICAgUHlfQ0xFQVIoc2VsZi0+d2luZXJyb3IpOwogI2VuZGlmCkBAIC0xMDA0LDYgKzEwMTksNyBAQAogICAgIFB5X1ZJU0lUKHNlbGYtPm15ZXJybm8pOwogICAgIFB5X1ZJU0lUKHNlbGYtPnN0cmVycm9yKTsKICAgICBQeV9WSVNJVChzZWxmLT5maWxlbmFtZSk7CisgICAgUHlfVklTSVQoc2VsZi0+ZmlsZW5hbWUyKTsKICNpZmRlZiBNU19XSU5ET1dTCiAgICAgUHlfVklTSVQoc2VsZi0+d2luZXJyb3IpOwogI2VuZGlmCkBAIC0xMDEzLDIzICsxMDI5LDQyIEBACiBzdGF0aWMgUHlPYmplY3QgKgogT1NFcnJvcl9zdHIoUHlPU0Vycm9yT2JqZWN0ICpzZWxmKQogeworI2RlZmluZSBPUl9OT05FKHgpICgoeCk/KHgpOlB5X05vbmUpCiAjaWZkZWYgTVNfV0lORE9XUwogICAgIC8qIElmIGF2YWlsYWJsZSwgd2luZXJyb3IgaGFzIHRoZSBwcmlvcml0eSBvdmVyIG15ZXJybm8gKi8KLSAgICBpZiAoc2VsZi0+d2luZXJyb3IgJiYgc2VsZi0+ZmlsZW5hbWUpCi0gICAgICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiW1dpbkVycm9yICVTXSAlUzogJVIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi0+d2luZXJyb3IgPyBzZWxmLT53aW5lcnJvcjogUHlfTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYtPnN0cmVycm9yID8gc2VsZi0+c3RyZXJyb3I6IFB5X05vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLT5maWxlbmFtZSk7CisgICAgaWYgKHNlbGYtPndpbmVycm9yICYmIHNlbGYtPmZpbGVuYW1lKSB7CisgICAgICAgIGlmIChzZWxmLT5maWxlbmFtZTIpIHsKKyAgICAgICAgICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiW1dpbkVycm9yICVTXSAlUzogJVIgLT4gJVIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9SX05PTkUoc2VsZi0+d2luZXJyb3IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9SX05PTkUoc2VsZi0+c3RyZXJyb3IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYtPmZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYtPmZpbGVuYW1lMik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIltXaW5FcnJvciAlU10gJVM6ICVSIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPUl9OT05FKHNlbGYtPndpbmVycm9yKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPUl9OT05FKHNlbGYtPnN0cmVycm9yKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLT5maWxlbmFtZSk7CisgICAgICAgIH0KKyAgICB9CiAgICAgaWYgKHNlbGYtPndpbmVycm9yICYmIHNlbGYtPnN0cmVycm9yKQogICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIltXaW5FcnJvciAlU10gJVMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi0+d2luZXJyb3IgPyBzZWxmLT53aW5lcnJvcjogUHlfTm9uZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYtPnN0cmVycm9yID8gc2VsZi0+c3RyZXJyb3I6IFB5X05vbmUpOwogI2VuZGlmCi0gICAgaWYgKHNlbGYtPmZpbGVuYW1lKQotICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIltFcnJubyAlU10gJVM6ICVSIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYtPm15ZXJybm8gPyBzZWxmLT5teWVycm5vOiBQeV9Ob25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi0+c3RyZXJyb3IgPyBzZWxmLT5zdHJlcnJvcjogUHlfTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYtPmZpbGVuYW1lKTsKKyAgICBpZiAoc2VsZi0+ZmlsZW5hbWUpIHsKKyAgICAgICAgaWYgKHNlbGYtPmZpbGVuYW1lMikgeworICAgICAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tRm9ybWF0KCJbRXJybm8gJVNdICVTOiAlUiAtPiAlUiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1JfTk9ORShzZWxmLT5teWVycm5vKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPUl9OT05FKHNlbGYtPnN0cmVycm9yKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLT5maWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLT5maWxlbmFtZTIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tRm9ybWF0KCJbRXJybm8gJVNdICVTOiAlUiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1JfTk9ORShzZWxmLT5teWVycm5vKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPUl9OT05FKHNlbGYtPnN0cmVycm9yKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLT5maWxlbmFtZSk7CisgICAgICAgIH0KKyAgICB9CiAgICAgaWYgKHNlbGYtPm15ZXJybm8gJiYgc2VsZi0+c3RyZXJyb3IpCiAgICAgICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiW0Vycm5vICVTXSAlUyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLT5teWVycm5vID8gc2VsZi0+bXllcnJubzogUHlfTm9uZSwKQEAgLTEwNDYsNyArMTA4MSw4IEBACiAgICAgLyogc2VsZi0+YXJncyBpcyBvbmx5IHRoZSBmaXJzdCB0d28gcmVhbCBhcmd1bWVudHMgaWYgdGhlcmUgd2FzIGEKICAgICAgKiBmaWxlIG5hbWUgZ2l2ZW4gdG8gT1NFcnJvci4gKi8KICAgICBpZiAoUHlUdXBsZV9HRVRfU0laRShhcmdzKSA9PSAyICYmIHNlbGYtPmZpbGVuYW1lKSB7Ci0gICAgICAgIGFyZ3MgPSBQeVR1cGxlX05ldygzKTsKKyAgICAgICAgUHlfc3NpemVfdCBzaXplID0gc2VsZi0+ZmlsZW5hbWUyID8gNSA6IDM7CisgICAgICAgIGFyZ3MgPSBQeVR1cGxlX05ldyhzaXplKTsKICAgICAgICAgaWYgKCFhcmdzKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTEwNjAsNiArMTA5NiwyMCBAQAogCiAgICAgICAgIFB5X0lOQ1JFRihzZWxmLT5maWxlbmFtZSk7CiAgICAgICAgIFB5VHVwbGVfU0VUX0lURU0oYXJncywgMiwgc2VsZi0+ZmlsZW5hbWUpOworCisgICAgICAgIGlmIChzZWxmLT5maWxlbmFtZTIpIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBUaGlzIHR1cGxlIGlzIGVzc2VudGlhbGx5IHVzZWQgYXMgT1NFcnJvcigqYXJncykuCisgICAgICAgICAgICAgKiBTbywgdG8gcmVjcmVhdGUgZmlsZW5hbWUyLCB3ZSBuZWVkIHRvIHBhc3MgaW4KKyAgICAgICAgICAgICAqIHdpbmVycm9yIGFzIHdlbGwuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKKyAgICAgICAgICAgIFB5VHVwbGVfU0VUX0lURU0oYXJncywgMywgUHlfTm9uZSk7CisKKyAgICAgICAgICAgIC8qIGZpbGVuYW1lMiAqLworICAgICAgICAgICAgUHlfSU5DUkVGKHNlbGYtPmZpbGVuYW1lMik7CisgICAgICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKGFyZ3MsIDQsIHNlbGYtPmZpbGVuYW1lMik7CisgICAgICAgIH0KICAgICB9IGVsc2UKICAgICAgICAgUHlfSU5DUkVGKGFyZ3MpOwogCkBAIC0xMDk5LDYgKzExNDksOCBAQAogICAgICAgICBQeURvY19TVFIoImV4Y2VwdGlvbiBzdHJlcnJvciIpfSwKICAgICB7ImZpbGVuYW1lIiwgVF9PQkpFQ1QsIG9mZnNldG9mKFB5T1NFcnJvck9iamVjdCwgZmlsZW5hbWUpLCAwLAogICAgICAgICBQeURvY19TVFIoImV4Y2VwdGlvbiBmaWxlbmFtZSIpfSwKKyAgICB7ImZpbGVuYW1lMiIsIFRfT0JKRUNULCBvZmZzZXRvZihQeU9TRXJyb3JPYmplY3QsIGZpbGVuYW1lMiksIDAsCisgICAgICAgIFB5RG9jX1NUUigic2Vjb25kIGV4Y2VwdGlvbiBmaWxlbmFtZSIpfSwKICNpZmRlZiBNU19XSU5ET1dTCiAgICAgeyJ3aW5lcnJvciIsIFRfT0JKRUNULCBvZmZzZXRvZihQeU9TRXJyb3JPYmplY3QsIHdpbmVycm9yKSwgMCwKICAgICAgICAgUHlEb2NfU1RSKCJXaW4zMiBleGNlcHRpb24gY29kZSIpfSwKQEAgLTEyMDIsNiArMTI1NCw5IEBACiAgKiAgICBTeW50YXhFcnJvciBleHRlbmRzIEV4Y2VwdGlvbgogICovCiAKKy8qIEhlbHBlciBmdW5jdGlvbiB0byBjdXN0b21pc2UgZXJyb3IgbWVzc2FnZSBmb3Igc29tZSBzeW50YXggZXJyb3JzICovCitzdGF0aWMgaW50IF9yZXBvcnRfbWlzc2luZ19wYXJlbnRoZXNlcyhQeVN5bnRheEVycm9yT2JqZWN0ICpzZWxmKTsKKwogc3RhdGljIGludAogU3ludGF4RXJyb3JfaW5pdChQeVN5bnRheEVycm9yT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCiB7CkBAIC0xMjQ2LDYgKzEzMDEsMTMgQEAKICAgICAgICAgUHlfSU5DUkVGKHNlbGYtPnRleHQpOwogCiAgICAgICAgIFB5X0RFQ1JFRihpbmZvKTsKKworICAgICAgICAvKiBJc3N1ZSAjMjE2Njk6IEN1c3RvbSBlcnJvciBmb3IgJ3ByaW50JyAmICdleGVjJyBhcyBzdGF0ZW1lbnRzICovCisgICAgICAgIGlmIChzZWxmLT50ZXh0ICYmIFB5VW5pY29kZV9DaGVjayhzZWxmLT50ZXh0KSkgeworICAgICAgICAgICAgaWYgKF9yZXBvcnRfbWlzc2luZ19wYXJlbnRoZXNlcyhzZWxmKSA8IDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIDA7CiB9CkBAIC0xNzg1LDYgKzE4NDcsMTAgQEAKICAgICBQeU9iamVjdCAqcmVhc29uX3N0ciA9IE5VTEw7CiAgICAgUHlPYmplY3QgKmVuY29kaW5nX3N0ciA9IE5VTEw7CiAKKyAgICBpZiAoIXVzZWxmLT5vYmplY3QpCisgICAgICAgIC8qIE5vdCBwcm9wZXJseSBpbml0aWFsaXplZC4gKi8KKyAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nKCIiKTsKKwogICAgIC8qIEdldCByZWFzb24gYW5kIGVuY29kaW5nIGFzIHN0cmluZ3MsIHdoaWNoIHRoZXkgbWlnaHQgbm90IGJlIGlmCiAgICAgICAgdGhleSd2ZSBiZWVuIG1vZGlmaWVkIGFmdGVyIHdlIHdlcmUgY29udHJ1Y3RlZC4gKi8KICAgICByZWFzb25fc3RyID0gUHlPYmplY3RfU3RyKHVzZWxmLT5yZWFzb24pOwpAQCAtMTg1Niw4ICsxOTIyLDYgQEAKIFVuaWNvZGVEZWNvZGVFcnJvcl9pbml0KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCiB7CiAgICAgUHlVbmljb2RlRXJyb3JPYmplY3QgKnVkZTsKLSAgICBjb25zdCBjaGFyICpkYXRhOwotICAgIFB5X3NzaXplX3Qgc2l6ZTsKIAogICAgIGlmIChCYXNlRXhjZXB0aW9uX2luaXQoKFB5QmFzZUV4Y2VwdGlvbk9iamVjdCAqKXNlbGYsIGFyZ3MsIGt3ZHMpID09IC0xKQogICAgICAgICByZXR1cm4gLTE7CkBAIC0xODc4LDIxICsxOTQyLDI3IEBACiAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIAotICAgIGlmICghUHlCeXRlc19DaGVjayh1ZGUtPm9iamVjdCkpIHsKLSAgICAgICAgaWYgKFB5T2JqZWN0X0FzUmVhZEJ1ZmZlcih1ZGUtPm9iamVjdCwgKGNvbnN0IHZvaWQgKiopJmRhdGEsICZzaXplKSkgewotICAgICAgICAgICAgdWRlLT5lbmNvZGluZyA9IHVkZS0+b2JqZWN0ID0gdWRlLT5yZWFzb24gPSBOVUxMOwotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9Ci0gICAgICAgIHVkZS0+b2JqZWN0ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShkYXRhLCBzaXplKTsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIFB5X0lOQ1JFRih1ZGUtPm9iamVjdCk7Ci0gICAgfQotCiAgICAgUHlfSU5DUkVGKHVkZS0+ZW5jb2RpbmcpOworICAgIFB5X0lOQ1JFRih1ZGUtPm9iamVjdCk7CiAgICAgUHlfSU5DUkVGKHVkZS0+cmVhc29uKTsKIAorICAgIGlmICghUHlCeXRlc19DaGVjayh1ZGUtPm9iamVjdCkpIHsKKyAgICAgICAgUHlfYnVmZmVyIHZpZXc7CisgICAgICAgIGlmIChQeU9iamVjdF9HZXRCdWZmZXIodWRlLT5vYmplY3QsICZ2aWV3LCBQeUJVRl9TSU1QTEUpICE9IDApCisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICBQeV9DTEVBUih1ZGUtPm9iamVjdCk7CisgICAgICAgIHVkZS0+b2JqZWN0ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZSh2aWV3LmJ1Ziwgdmlldy5sZW4pOworICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2aWV3KTsKKyAgICAgICAgaWYgKCF1ZGUtPm9iamVjdCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQogICAgIHJldHVybiAwOworCitlcnJvcjoKKyAgICBQeV9DTEVBUih1ZGUtPmVuY29kaW5nKTsKKyAgICBQeV9DTEVBUih1ZGUtPm9iamVjdCk7CisgICAgUHlfQ0xFQVIodWRlLT5yZWFzb24pOworICAgIHJldHVybiAtMTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTE5MDMsNiArMTk3MywxMCBAQAogICAgIFB5T2JqZWN0ICpyZWFzb25fc3RyID0gTlVMTDsKICAgICBQeU9iamVjdCAqZW5jb2Rpbmdfc3RyID0gTlVMTDsKIAorICAgIGlmICghdXNlbGYtPm9iamVjdCkKKyAgICAgICAgLyogTm90IHByb3Blcmx5IGluaXRpYWxpemVkLiAqLworICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmcoIiIpOworCiAgICAgLyogR2V0IHJlYXNvbiBhbmQgZW5jb2RpbmcgYXMgc3RyaW5ncywgd2hpY2ggdGhleSBtaWdodCBub3QgYmUgaWYKICAgICAgICB0aGV5J3ZlIGJlZW4gbW9kaWZpZWQgYWZ0ZXIgd2Ugd2VyZSBjb250cnVjdGVkLiAqLwogICAgIHJlYXNvbl9zdHIgPSBQeU9iamVjdF9TdHIodXNlbGYtPnJlYXNvbik7CkBAIC0xOTk3LDYgKzIwNzEsMTAgQEAKICAgICBQeU9iamVjdCAqcmVzdWx0ID0gTlVMTDsKICAgICBQeU9iamVjdCAqcmVhc29uX3N0ciA9IE5VTEw7CiAKKyAgICBpZiAoIXVzZWxmLT5vYmplY3QpCisgICAgICAgIC8qIE5vdCBwcm9wZXJseSBpbml0aWFsaXplZC4gKi8KKyAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nKCIiKTsKKwogICAgIC8qIEdldCByZWFzb24gYXMgYSBzdHJpbmcsIHdoaWNoIGl0IG1pZ2h0IG5vdCBiZSBpZiBpdCdzIGJlZW4KICAgICAgICBtb2RpZmllZCBhZnRlciB3ZSB3ZXJlIGNvbnRydWN0ZWQuICovCiAgICAgcmVhc29uX3N0ciA9IFB5T2JqZWN0X1N0cih1c2VsZi0+cmVhc29uKTsKQEAgLTIwNjAsNyArMjEzOCw3IEBACiAgICAgUHlPYmplY3QgKm9iamVjdCwKICAgICBQeV9zc2l6ZV90IHN0YXJ0LCBQeV9zc2l6ZV90IGVuZCwgY29uc3QgY2hhciAqcmVhc29uKQogewotICAgIHJldHVybiBQeU9iamVjdF9DYWxsRnVuY3Rpb24oUHlFeGNfVW5pY29kZVRyYW5zbGF0ZUVycm9yLCAiT25zIiwKKyAgICByZXR1cm4gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKFB5RXhjX1VuaWNvZGVUcmFuc2xhdGVFcnJvciwgIk9ubnMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LCBzdGFydCwgZW5kLCByZWFzb24pOwogfQogCkBAIC0yMzI3LDcgKzI0MDUsNyBAQAogICAgIH0KIAogI2lmZGVmIE1TX1dJTkRPV1MKLSNpbmNsdWRlIDxXaW5zb2NrMi5oPgorI2luY2x1ZGUgPHdpbnNvY2syLmg+CiAvKiBUaGUgZm9sbG93aW5nIGNvbnN0YW50cyB3ZXJlIGFkZGVkIHRvIGVycm5vLmggaW4gVlMyMDEwIGJ1dCBoYXZlCiAgICBwcmVmZXJyZWQgV1NBIGVxdWl2YWxlbnRzLiAqLwogI3VuZGVmIEVBRERSSU5VU0UKQEAgLTI0NzEsOSArMjU0OSw2IEBACiAjaWZkZWYgTVNfV0lORE9XUwogICAgIElOSVRfQUxJQVMoV2luZG93c0Vycm9yLCBPU0Vycm9yKQogI2VuZGlmCi0jaWZkZWYgX19WTVMKLSAgICBJTklUX0FMSUFTKFZNU0Vycm9yLCBPU0Vycm9yKQotI2VuZGlmCiAgICAgUE9TVF9JTklUKEVPRkVycm9yKQogICAgIFBPU1RfSU5JVChSdW50aW1lRXJyb3IpCiAgICAgUE9TVF9JTklUKE5vdEltcGxlbWVudGVkRXJyb3IpCkBAIC0yNTkxLDMgKzI2NjYsMjU5IEBACiAgICAgZnJlZV9wcmVhbGxvY2F0ZWRfbWVtZXJyb3JzKCk7CiAgICAgUHlfQ0xFQVIoZXJybm9tYXApOwogfQorCisvKiBIZWxwZXIgdG8gZG8gdGhlIGVxdWl2YWxlbnQgb2YgInJhaXNlIFggZnJvbSBZIiBpbiBDLCBidXQgYWx3YXlzIHVzaW5nCisgKiB0aGUgY3VycmVudCBleGNlcHRpb24gcmF0aGVyIHRoYW4gcGFzc2luZyBvbmUgaW4uCisgKgorICogV2UgY3VycmVudGx5IGxpbWl0IHRoaXMgdG8gKm9ubHkqIGV4Y2VwdGlvbnMgdGhhdCB1c2UgdGhlIEJhc2VFeGNlcHRpb24KKyAqIHRwX2luaXQgYW5kIHRwX25ldyBtZXRob2RzLCBzaW5jZSB3ZSBjYW4gYmUgcmVhc29uYWJseSBzdXJlIHdlIGNhbiB3cmFwCisgKiB0aG9zZSBjb3JyZWN0bHkgd2l0aG91dCBsb3NpbmcgZGF0YSBhbmQgd2l0aG91dCBsb3NpbmcgYmFja3dhcmRzCisgKiBjb21wYXRpYmlsaXR5LgorICoKKyAqIFdlIGFsc28gYWltIHRvIHJ1bGUgb3V0ICphbGwqIGV4Y2VwdGlvbnMgdGhhdCBtaWdodCBiZSBzdG9yaW5nIGFkZGl0aW9uYWwKKyAqIHN0YXRlLCB3aGV0aGVyIGJ5IGhhdmluZyBhIHNpemUgZGlmZmVyZW5jZSByZWxhdGl2ZSB0byBCYXNlRXhjZXB0aW9uLAorICogYWRkaXRpb25hbCBhcmd1bWVudHMgcGFzc2VkIGluIGR1cmluZyBjb25zdHJ1Y3Rpb24gb3IgYnkgaGF2aW5nIGEKKyAqIG5vbi1lbXB0eSBpbnN0YW5jZSBkaWN0LgorICoKKyAqIFdlIG5lZWQgdG8gYmUgdmVyeSBjYXJlZnVsIHdpdGggd2hhdCB3ZSB3cmFwLCBzaW5jZSBjaGFuZ2luZyB0eXBlcyB0bworICogYSBicm9hZGVyIGV4Y2VwdGlvbiB0eXBlIHdvdWxkIGJlIGJhY2t3YXJkcyBpbmNvbXBhdGlibGUgZm9yCisgKiBleGlzdGluZyBjb2RlY3MsIGFuZCB3aXRoIGRpZmZlcmVudCBpbml0IG9yIG5ldyBtZXRob2QgaW1wbGVtZW50YXRpb25zCisgKiBtYXkgZWl0aGVyIG5vdCBzdXBwb3J0IGluc3RhbnRpYXRpb24gd2l0aCBQeUVycl9Gb3JtYXQgb3IgbG9zZQorICogaW5mb3JtYXRpb24gd2hlbiBpbnN0YW50aWF0ZWQgdGhhdCB3YXkuCisgKgorICogWFhYIChuY29naGxhbik6IFRoaXMgY291bGQgYmUgbWFkZSBtb3JlIGNvbXByZWhlbnNpdmUgYnkgZXhwbG9pdGluZyB0aGUKKyAqIGZhY3QgdGhhdCBleGNlcHRpb25zIGFyZSBleHBlY3RlZCB0byBzdXBwb3J0IHBpY2tsaW5nLiBJZiBtb3JlIGJ1aWx0aW4KKyAqIGV4Y2VwdGlvbnMgKGUuZy4gQXR0cmlidXRlRXJyb3IpIHN0YXJ0IHRvIGJlIGNvbnZlcnRlZCB0byByaWNoCisgKiBleGNlcHRpb25zIHdpdGggYWRkaXRpb25hbCBhdHRyaWJ1dGVzLCB0aGF0J3MgcHJvYmFibHkgYSBiZXR0ZXIgYXBwcm9hY2gKKyAqIHRvIHB1cnN1ZSBvdmVyIGFkZGluZyBzcGVjaWFsIGNhc2VzIGZvciBwYXJ0aWN1bGFyIHN0YXRlZnVsIHN1YmNsYXNzZXMuCisgKgorICogUmV0dXJucyBhIGJvcnJvd2VkIHJlZmVyZW5jZSB0byB0aGUgbmV3IGV4Y2VwdGlvbiAoaWYgYW55KSwgTlVMTCBpZiB0aGUKKyAqIGV4aXN0aW5nIGV4Y2VwdGlvbiB3YXMgbGVmdCBpbiBwbGFjZS4KKyAqLworUHlPYmplY3QgKgorX1B5RXJyX1RyeVNldEZyb21DYXVzZShjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKyAgICBQeU9iamVjdCogbXNnX3ByZWZpeDsKKyAgICBQeU9iamVjdCAqZXhjLCAqdmFsLCAqdGI7CisgICAgUHlUeXBlT2JqZWN0ICpjYXVnaHRfdHlwZTsKKyAgICBQeU9iamVjdCAqKmRpY3RwdHI7CisgICAgUHlPYmplY3QgKmluc3RhbmNlX2FyZ3M7CisgICAgUHlfc3NpemVfdCBudW1fYXJncywgY2F1Z2h0X3R5cGVfc2l6ZSwgYmFzZV9leGNfc2l6ZTsKKyAgICBQeU9iamVjdCAqbmV3X2V4YywgKm5ld192YWwsICpuZXdfdGI7CisgICAgdmFfbGlzdCB2YXJnczsKKyAgICBpbnQgc2FtZV9iYXNpY19zaXplOworCisgICAgUHlFcnJfRmV0Y2goJmV4YywgJnZhbCwgJnRiKTsKKyAgICBjYXVnaHRfdHlwZSA9IChQeVR5cGVPYmplY3QgKilleGM7CisgICAgLyogRW5zdXJlIHR5cGUgaW5mbyBpbmRpY2F0ZXMgbm8gZXh0cmEgc3RhdGUgaXMgc3RvcmVkIGF0IHRoZSBDIGxldmVsCisgICAgICogYW5kIHRoYXQgdGhlIHR5cGUgY2FuIGJlIHJlaW5zdGFudGlhdGVkIHVzaW5nIFB5RXJyX0Zvcm1hdAorICAgICAqLworICAgIGNhdWdodF90eXBlX3NpemUgPSBjYXVnaHRfdHlwZS0+dHBfYmFzaWNzaXplOworICAgIGJhc2VfZXhjX3NpemUgPSBfUHlFeGNfQmFzZUV4Y2VwdGlvbi50cF9iYXNpY3NpemU7CisgICAgc2FtZV9iYXNpY19zaXplID0gKAorICAgICAgICBjYXVnaHRfdHlwZV9zaXplID09IGJhc2VfZXhjX3NpemUgfHwKKyAgICAgICAgKFB5VHlwZV9TVVBQT1JUU19XRUFLUkVGUyhjYXVnaHRfdHlwZSkgJiYKKyAgICAgICAgICAgIChjYXVnaHRfdHlwZV9zaXplID09IGJhc2VfZXhjX3NpemUgKyBzaXplb2YoUHlPYmplY3QgKikpCisgICAgICAgICkKKyAgICApOworICAgIGlmIChjYXVnaHRfdHlwZS0+dHBfaW5pdCAhPSAoaW5pdHByb2MpQmFzZUV4Y2VwdGlvbl9pbml0IHx8CisgICAgICAgIGNhdWdodF90eXBlLT50cF9uZXcgIT0gQmFzZUV4Y2VwdGlvbl9uZXcgfHwKKyAgICAgICAgIXNhbWVfYmFzaWNfc2l6ZSB8fAorICAgICAgICBjYXVnaHRfdHlwZS0+dHBfaXRlbXNpemUgIT0gX1B5RXhjX0Jhc2VFeGNlcHRpb24udHBfaXRlbXNpemUpIHsKKyAgICAgICAgLyogV2UgY2FuJ3QgYmUgc3VyZSB3ZSBjYW4gd3JhcCB0aGlzIHNhZmVseSwgc2luY2UgaXQgbWF5IGNvbnRhaW4KKyAgICAgICAgICogbW9yZSBzdGF0ZSB0aGFuIGp1c3QgdGhlIGV4Y2VwdGlvbiB0eXBlLiBBY2NvcmRpbmdseSwgd2UganVzdAorICAgICAgICAgKiBsZWF2ZSBpdCBhbG9uZS4KKyAgICAgICAgICovCisgICAgICAgIFB5RXJyX1Jlc3RvcmUoZXhjLCB2YWwsIHRiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgLyogQ2hlY2sgdGhlIGFyZ3MgYXJlIGVtcHR5IG9yIGNvbnRhaW4gYSBzaW5nbGUgc3RyaW5nICovCisgICAgUHlFcnJfTm9ybWFsaXplRXhjZXB0aW9uKCZleGMsICZ2YWwsICZ0Yik7CisgICAgaW5zdGFuY2VfYXJncyA9ICgoUHlCYXNlRXhjZXB0aW9uT2JqZWN0ICopdmFsKS0+YXJnczsKKyAgICBudW1fYXJncyA9IFB5VHVwbGVfR0VUX1NJWkUoaW5zdGFuY2VfYXJncyk7CisgICAgaWYgKG51bV9hcmdzID4gMSB8fAorICAgICAgICAobnVtX2FyZ3MgPT0gMSAmJgorICAgICAgICAgIVB5VW5pY29kZV9DaGVja0V4YWN0KFB5VHVwbGVfR0VUX0lURU0oaW5zdGFuY2VfYXJncywgMCkpKSkgeworICAgICAgICAvKiBNb3JlIHRoYW4gMSBhcmcsIG9yIHRoZSBvbmUgYXJnIHdlIGRvIGhhdmUgaXNuJ3QgYSBzdHJpbmcKKyAgICAgICAgICovCisgICAgICAgIFB5RXJyX1Jlc3RvcmUoZXhjLCB2YWwsIHRiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgLyogRW5zdXJlIHRoZSBpbnN0YW5jZSBkaWN0IGlzIGFsc28gZW1wdHkgKi8KKyAgICBkaWN0cHRyID0gX1B5T2JqZWN0X0dldERpY3RQdHIodmFsKTsKKyAgICBpZiAoZGljdHB0ciAhPSBOVUxMICYmICpkaWN0cHRyICE9IE5VTEwgJiYKKyAgICAgICAgUHlPYmplY3RfTGVuZ3RoKCpkaWN0cHRyKSA+IDApIHsKKyAgICAgICAgLyogV2hpbGUgd2UgY291bGQgcG90ZW50aWFsbHkgY29weSBhIG5vbi1lbXB0eSBpbnN0YW5jZSBkaWN0aW9uYXJ5CisgICAgICAgICAqIHRvIHRoZSByZXBsYWNlbWVudCBleGNlcHRpb24sIGZvciBub3cgd2UgdGFrZSB0aGUgbW9yZQorICAgICAgICAgKiBjb25zZXJ2YXRpdmUgcGF0aCBvZiBsZWF2aW5nIGV4Y2VwdGlvbnMgd2l0aCBhdHRyaWJ1dGVzIHNldAorICAgICAgICAgKiBhbG9uZS4KKyAgICAgICAgICovCisgICAgICAgIFB5RXJyX1Jlc3RvcmUoZXhjLCB2YWwsIHRiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgLyogRm9yIGV4Y2VwdGlvbnMgdGhhdCB3ZSBjYW4gd3JhcCBzYWZlbHksIHdlIGNoYWluIHRoZSBvcmlnaW5hbAorICAgICAqIGV4Y2VwdGlvbiB0byBhIG5ldyBvbmUgb2YgdGhlIGV4YWN0IHNhbWUgdHlwZSB3aXRoIGFuCisgICAgICogZXJyb3IgbWVzc2FnZSB0aGF0IG1lbnRpb25zIHRoZSBhZGRpdGlvbmFsIGRldGFpbHMgYW5kIHRoZQorICAgICAqIG9yaWdpbmFsIGV4Y2VwdGlvbi4KKyAgICAgKgorICAgICAqIEl0IHdvdWxkIGJlIG5pY2UgdG8gd3JhcCBPU0Vycm9yIGFuZCB2YXJpb3VzIG90aGVyIGV4Y2VwdGlvbgorICAgICAqIHR5cGVzIGFzIHdlbGwsIGJ1dCB0aGF0J3MgcXVpdGUgYSBiaXQgdHJpY2tpZXIgZHVlIHRvIHRoZSBleHRyYQorICAgICAqIHN0YXRlIHBvdGVudGlhbGx5IHN0b3JlZCBvbiBPU0Vycm9yIGluc3RhbmNlcy4KKyAgICAgKi8KKyAgICAvKiBFbnN1cmUgdGhlIHRyYWNlYmFjayBpcyBzZXQgY29ycmVjdGx5IG9uIHRoZSBleGlzdGluZyBleGNlcHRpb24gKi8KKyAgICBpZiAodGIgIT0gTlVMTCkgeworICAgICAgICBQeUV4Y2VwdGlvbl9TZXRUcmFjZWJhY2sodmFsLCB0Yik7CisgICAgICAgIFB5X0RFQ1JFRih0Yik7CisgICAgfQorCisjaWZkZWYgSEFWRV9TVERBUkdfUFJPVE9UWVBFUworICAgIHZhX3N0YXJ0KHZhcmdzLCBmb3JtYXQpOworI2Vsc2UKKyAgICB2YV9zdGFydCh2YXJncyk7CisjZW5kaWYKKyAgICBtc2dfcHJlZml4ID0gUHlVbmljb2RlX0Zyb21Gb3JtYXRWKGZvcm1hdCwgdmFyZ3MpOworICAgIHZhX2VuZCh2YXJncyk7CisgICAgaWYgKG1zZ19wcmVmaXggPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYoZXhjKTsKKyAgICAgICAgUHlfREVDUkVGKHZhbCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIFB5RXJyX0Zvcm1hdChleGMsICIlVSAoJXM6ICVTKSIsCisgICAgICAgICAgICAgICAgIG1zZ19wcmVmaXgsIFB5X1RZUEUodmFsKS0+dHBfbmFtZSwgdmFsKTsKKyAgICBQeV9ERUNSRUYoZXhjKTsKKyAgICBQeV9ERUNSRUYobXNnX3ByZWZpeCk7CisgICAgUHlFcnJfRmV0Y2goJm5ld19leGMsICZuZXdfdmFsLCAmbmV3X3RiKTsKKyAgICBQeUVycl9Ob3JtYWxpemVFeGNlcHRpb24oJm5ld19leGMsICZuZXdfdmFsLCAmbmV3X3RiKTsKKyAgICBQeUV4Y2VwdGlvbl9TZXRDYXVzZShuZXdfdmFsLCB2YWwpOworICAgIFB5RXJyX1Jlc3RvcmUobmV3X2V4YywgbmV3X3ZhbCwgbmV3X3RiKTsKKyAgICByZXR1cm4gbmV3X3ZhbDsKK30KKworCisvKiBUbyBoZWxwIHdpdGggbWlncmF0aW9uIGZyb20gUHl0aG9uIDIsIFN5bnRheEVycm9yLl9faW5pdF9fIGFwcGxpZXMgc29tZQorICogaGV1cmlzdGljcyB0byB0cnkgdG8gcmVwb3J0IGEgbW9yZSBtZWFuaW5nZnVsIGV4Y2VwdGlvbiB3aGVuIHByaW50IGFuZAorICogZXhlYyBhcmUgdXNlZCBsaWtlIHN0YXRlbWVudHMuCisgKgorICogVGhlIGhldXJpc3RpY3MgYXJlIGN1cnJlbnRseSBleHBlY3RlZCB0byBkZXRlY3QgdGhlIGZvbGxvd2luZyBjYXNlczoKKyAqICAgLSB0b3AgbGV2ZWwgc3RhdGVtZW50CisgKiAgIC0gc3RhdGVtZW50IGluIGEgbmVzdGVkIHN1aXRlCisgKiAgIC0gdHJhaWxpbmcgc2VjdGlvbiBvZiBhIG9uZSBsaW5lIGNvbXBsZXggc3RhdGVtZW50CisgKgorICogVGhleSdyZSBjdXJyZW50bHkga25vd24gbm90IHRvIHRyaWdnZXI6CisgKiAgIC0gYWZ0ZXIgYSBzZW1pLWNvbG9uCisgKgorICogVGhlIGVycm9yIG1lc3NhZ2UgY2FuIGJlIGEgYml0IG9kZCBpbiBjYXNlcyB3aGVyZSB0aGUgImFyZ3VtZW50cyIgYXJlCisgKiBjb21wbGV0ZWx5IGlsbGVnYWwgc3ludGFjdGljYWxseSwgYnV0IHRoYXQgaXNuJ3Qgd29ydGggdGhlIGhhc3NsZSBvZgorICogZml4aW5nLgorICoKKyAqIFdlIGFsc28gY2FuJ3QgZG8gYW55dGhpbmcgYWJvdXQgY2FzZXMgdGhhdCBhcmUgbGVnYWwgUHl0aG9uIDMgc3ludGF4CisgKiBidXQgbWVhbiBzb21ldGhpbmcgZW50aXJlbHkgZGlmZmVyZW50IGZyb20gd2hhdCB0aGV5IGRpZCBpbiBQeXRob24gMgorICogKG9taXR0aW5nIHRoZSBhcmd1bWVudHMgZW50aXJlbHksIHByaW50aW5nIGl0ZW1zIHByZWNlZGVkIGJ5IGEgdW5hcnkgcGx1cworICogb3IgbWludXMsIHVzaW5nIHRoZSBzdHJlYW0gcmVkaXJlY3Rpb24gc3ludGF4KS4KKyAqLworCitzdGF0aWMgaW50CitfY2hlY2tfZm9yX2xlZ2FjeV9zdGF0ZW1lbnRzKFB5U3ludGF4RXJyb3JPYmplY3QgKnNlbGYsIFB5X3NzaXplX3Qgc3RhcnQpCit7CisgICAgLyogUmV0dXJuIHZhbHVlczoKKyAgICAgKiAgIC0xOiBhbiBlcnJvciBvY2N1cnJlZAorICAgICAqICAgIDA6IG5vdGhpbmcgaGFwcGVuZWQKKyAgICAgKiAgICAxOiB0aGUgY2hlY2sgdHJpZ2dlcmVkICYgdGhlIGVycm9yIG1lc3NhZ2Ugd2FzIGNoYW5nZWQKKyAgICAgKi8KKyAgICBzdGF0aWMgUHlPYmplY3QgKnByaW50X3ByZWZpeCA9IE5VTEw7CisgICAgc3RhdGljIFB5T2JqZWN0ICpleGVjX3ByZWZpeCA9IE5VTEw7CisgICAgUHlfc3NpemVfdCB0ZXh0X2xlbiA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHNlbGYtPnRleHQpOworICAgIGludCBraW5kID0gUHlVbmljb2RlX0tJTkQoc2VsZi0+dGV4dCk7CisgICAgdm9pZCAqZGF0YSA9IFB5VW5pY29kZV9EQVRBKHNlbGYtPnRleHQpOworCisgICAgLyogSWdub3JlIGxlYWRpbmcgd2hpdGVzcGFjZSAqLworICAgIHdoaWxlIChzdGFydCA8IHRleHRfbGVuKSB7CisgICAgICAgIFB5X1VDUzQgY2ggPSBQeVVuaWNvZGVfUkVBRChraW5kLCBkYXRhLCBzdGFydCk7CisgICAgICAgIGlmICghUHlfVU5JQ09ERV9JU1NQQUNFKGNoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBzdGFydCsrOworICAgIH0KKyAgICAvKiBDaGVja2luZyBhZ2FpbnN0IGFuIGVtcHR5IG9yIHdoaXRlc3BhY2Utb25seSBwYXJ0IG9mIHRoZSBzdHJpbmcgKi8KKyAgICBpZiAoc3RhcnQgPT0gdGV4dF9sZW4pIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgLyogQ2hlY2sgZm9yIGxlZ2FjeSBwcmludCBzdGF0ZW1lbnRzICovCisgICAgaWYgKHByaW50X3ByZWZpeCA9PSBOVUxMKSB7CisgICAgICAgIHByaW50X3ByZWZpeCA9IFB5VW5pY29kZV9JbnRlcm5Gcm9tU3RyaW5nKCJwcmludCAiKTsKKyAgICAgICAgaWYgKHByaW50X3ByZWZpeCA9PSBOVUxMKSB7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKFB5VW5pY29kZV9UYWlsbWF0Y2goc2VsZi0+dGV4dCwgcHJpbnRfcHJlZml4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0LCB0ZXh0X2xlbiwgLTEpKSB7CisgICAgICAgIFB5X0NMRUFSKHNlbGYtPm1zZyk7CisgICAgICAgIHNlbGYtPm1zZyA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKAorICAgICAgICAgICAgICAgICAgICJNaXNzaW5nIHBhcmVudGhlc2VzIGluIGNhbGwgdG8gJ3ByaW50JyIpOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICAvKiBDaGVjayBmb3IgbGVnYWN5IGV4ZWMgc3RhdGVtZW50cyAqLworICAgIGlmIChleGVjX3ByZWZpeCA9PSBOVUxMKSB7CisgICAgICAgIGV4ZWNfcHJlZml4ID0gUHlVbmljb2RlX0ludGVybkZyb21TdHJpbmcoImV4ZWMgIik7CisgICAgICAgIGlmIChleGVjX3ByZWZpeCA9PSBOVUxMKSB7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKFB5VW5pY29kZV9UYWlsbWF0Y2goc2VsZi0+dGV4dCwgZXhlY19wcmVmaXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQsIHRleHRfbGVuLCAtMSkpIHsKKyAgICAgICAgUHlfQ0xFQVIoc2VsZi0+bXNnKTsKKyAgICAgICAgc2VsZi0+bXNnID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoCisgICAgICAgICAgICAgICAgICAgICJNaXNzaW5nIHBhcmVudGhlc2VzIGluIGNhbGwgdG8gJ2V4ZWMnIik7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKyAgICAvKiBGYWxsIGJhY2sgdG8gdGhlIGRlZmF1bHQgZXJyb3IgbWVzc2FnZSAqLworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CitfcmVwb3J0X21pc3NpbmdfcGFyZW50aGVzZXMoUHlTeW50YXhFcnJvck9iamVjdCAqc2VsZikKK3sKKyAgICBQeV9VQ1M0IGxlZnRfcGFyZW4gPSA0MDsKKyAgICBQeV9zc2l6ZV90IGxlZnRfcGFyZW5faW5kZXg7CisgICAgUHlfc3NpemVfdCB0ZXh0X2xlbiA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHNlbGYtPnRleHQpOworICAgIGludCBsZWdhY3lfY2hlY2tfcmVzdWx0ID0gMDsKKworICAgIC8qIFNraXAgZW50aXJlbHkgaWYgdGhlcmUgaXMgYW4gb3BlbmluZyBwYXJlbnRoZXNpcyAqLworICAgIGxlZnRfcGFyZW5faW5kZXggPSBQeVVuaWNvZGVfRmluZENoYXIoc2VsZi0+dGV4dCwgbGVmdF9wYXJlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIHRleHRfbGVuLCAxKTsKKyAgICBpZiAobGVmdF9wYXJlbl9pbmRleCA8IC0xKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgaWYgKGxlZnRfcGFyZW5faW5kZXggIT0gLTEpIHsKKyAgICAgICAgLyogVXNlIGRlZmF1bHQgZXJyb3IgbWVzc2FnZSBmb3IgYW55IGxpbmUgd2l0aCBhbiBvcGVuaW5nIHBhcmVuICovCisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAvKiBIYW5kbGUgdGhlIHNpbXBsZSBzdGF0ZW1lbnQgY2FzZSAqLworICAgIGxlZ2FjeV9jaGVja19yZXN1bHQgPSBfY2hlY2tfZm9yX2xlZ2FjeV9zdGF0ZW1lbnRzKHNlbGYsIDApOworICAgIGlmIChsZWdhY3lfY2hlY2tfcmVzdWx0IDwgMCkgeworICAgICAgICByZXR1cm4gLTE7CisKKyAgICB9CisgICAgaWYgKGxlZ2FjeV9jaGVja19yZXN1bHQgPT0gMCkgeworICAgICAgICAvKiBIYW5kbGUgdGhlIG9uZS1saW5lIGNvbXBsZXggc3RhdGVtZW50IGNhc2UgKi8KKyAgICAgICAgUHlfVUNTNCBjb2xvbiA9IDU4OworICAgICAgICBQeV9zc2l6ZV90IGNvbG9uX2luZGV4OworICAgICAgICBjb2xvbl9pbmRleCA9IFB5VW5pY29kZV9GaW5kQ2hhcihzZWxmLT50ZXh0LCBjb2xvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgdGV4dF9sZW4sIDEpOworICAgICAgICBpZiAoY29sb25faW5kZXggPCAtMSkgeworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIGlmIChjb2xvbl9pbmRleCA+PSAwICYmIGNvbG9uX2luZGV4IDwgdGV4dF9sZW4pIHsKKyAgICAgICAgICAgIC8qIENoZWNrIGFnYWluLCBzdGFydGluZyBmcm9tIGp1c3QgYWZ0ZXIgdGhlIGNvbG9uICovCisgICAgICAgICAgICBpZiAoX2NoZWNrX2Zvcl9sZWdhY3lfc3RhdGVtZW50cyhzZWxmLCBjb2xvbl9pbmRleCsxKSA8IDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9PYmplY3RzL2ZpbGVvYmplY3QuYyBiL09iamVjdHMvZmlsZW9iamVjdC5jCmluZGV4IDk4ZjQyYTkuLjFhOTNhNmQgMTAwNjQ0Ci0tLSBhL09iamVjdHMvZmlsZW9iamVjdC5jCisrKyBiL09iamVjdHMvZmlsZW9iamVjdC5jCkBAIC0yNiw4ICsyNiw4IEBACiAvKiBFeHRlcm5hbCBDIGludGVyZmFjZSAqLwogCiBQeU9iamVjdCAqCi1QeUZpbGVfRnJvbUZkKGludCBmZCwgY2hhciAqbmFtZSwgY2hhciAqbW9kZSwgaW50IGJ1ZmZlcmluZywgY2hhciAqZW5jb2RpbmcsCi0gICAgICAgICAgICAgIGNoYXIgKmVycm9ycywgY2hhciAqbmV3bGluZSwgaW50IGNsb3NlZmQpCitQeUZpbGVfRnJvbUZkKGludCBmZCwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqbW9kZSwgaW50IGJ1ZmZlcmluZywgY29uc3QgY2hhciAqZW5jb2RpbmcsCisgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVycm9ycywgY29uc3QgY2hhciAqbmV3bGluZSwgaW50IGNsb3NlZmQpCiB7CiAgICAgUHlPYmplY3QgKmlvLCAqc3RyZWFtOwogICAgIF9QeV9JREVOVElGSUVSKG9wZW4pOwpAQCAtMzcyLDggKzM3MiwxMSBAQAogc3RhdGljIFB5T2JqZWN0ICoKIHN0ZHByaW50ZXJfd3JpdGUoUHlTdGRQcmludGVyX09iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgY2hhciAqYzsKKyAgICBQeU9iamVjdCAqdW5pY29kZTsKKyAgICBQeU9iamVjdCAqYnl0ZXMgPSBOVUxMOworICAgIGNoYXIgKnN0cjsKICAgICBQeV9zc2l6ZV90IG47CisgICAgaW50IGVycjsKIAogICAgIGlmIChzZWxmLT5mZCA8IDApIHsKICAgICAgICAgLyogZmQgbWlnaHQgYmUgaW52YWxpZCBvbiBXaW5kb3dzCkBAIC0zODMsMjUgKzM4Niw0MSBAQAogICAgICAgICBQeV9SRVRVUk5fTk9ORTsKICAgICB9CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMiLCAmYykpIHsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIlUiLCAmdW5pY29kZSkpCiAgICAgICAgIHJldHVybiBOVUxMOworCisgICAgLyogZW5jb2RlIFVuaWNvZGUgdG8gVVRGLTggKi8KKyAgICBzdHIgPSBQeVVuaWNvZGVfQXNVVEY4QW5kU2l6ZSh1bmljb2RlLCAmbik7CisgICAgaWYgKHN0ciA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgICAgIGJ5dGVzID0gX1B5VW5pY29kZV9Bc1VURjhTdHJpbmcodW5pY29kZSwgImJhY2tzbGFzaHJlcGxhY2UiKTsKKyAgICAgICAgaWYgKGJ5dGVzID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgaWYgKFB5Qnl0ZXNfQXNTdHJpbmdBbmRTaXplKGJ5dGVzLCAmc3RyLCAmbikgPCAwKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoYnl0ZXMpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KICAgICB9Ci0gICAgbiA9IHN0cmxlbihjKTsKIAogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICBlcnJubyA9IDA7Ci0jaWYgZGVmaW5lZChNU19XSU42NCkgfHwgZGVmaW5lZChNU19XSU5ET1dTKQorI2lmZGVmIE1TX1dJTkRPV1MKICAgICBpZiAobiA+IElOVF9NQVgpCiAgICAgICAgIG4gPSBJTlRfTUFYOwotICAgIG4gPSB3cml0ZShzZWxmLT5mZCwgYywgKGludCluKTsKKyAgICBuID0gd3JpdGUoc2VsZi0+ZmQsIHN0ciwgKGludCluKTsKICNlbHNlCi0gICAgbiA9IHdyaXRlKHNlbGYtPmZkLCBjLCBuKTsKKyAgICBuID0gd3JpdGUoc2VsZi0+ZmQsIHN0ciwgbik7CiAjZW5kaWYKKyAgICAvKiBzYXZlIGVycm5vLCBpdCBjYW4gYmUgbW9kaWZpZWQgaW5kaXJlY3RseSBieSBQeV9YREVDUkVGKCkgKi8KKyAgICBlcnIgPSBlcnJubzsKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCisgICAgUHlfWERFQ1JFRihieXRlcyk7CisKICAgICBpZiAobiA8IDApIHsKLSAgICAgICAgaWYgKGVycm5vID09IEVBR0FJTikKKyAgICAgICAgaWYgKGVyciA9PSBFQUdBSU4pCiAgICAgICAgICAgICBQeV9SRVRVUk5fTk9ORTsKKyAgICAgICAgZXJybm8gPSBlcnI7CiAgICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19JT0Vycm9yKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9mbG9hdG9iamVjdC5jIGIvT2JqZWN0cy9mbG9hdG9iamVjdC5jCmluZGV4IGEwOGE4NTIuLmFjZDg4ZDYgMTAwNjQ0Ci0tLSBhL09iamVjdHMvZmxvYXRvYmplY3QuYworKysgYi9PYmplY3RzL2Zsb2F0b2JqZWN0LmMKQEAgLTksMTEgKzksNiBAQAogI2luY2x1ZGUgPGN0eXBlLmg+CiAjaW5jbHVkZSA8ZmxvYXQuaD4KIAotI3VuZGVmIE1BWAotI3VuZGVmIE1JTgotI2RlZmluZSBNQVgoeCwgeSkgKCh4KSA8ICh5KSA/ICh5KSA6ICh4KSkKLSNkZWZpbmUgTUlOKHgsIHkpICgoeCkgPCAoeSkgPyAoeCkgOiAoeSkpCi0KIAogLyogU3BlY2lhbCBmcmVlIGxpc3QKICAgIGZyZWVfbGlzdCBpcyBhIHNpbmdseS1saW5rZWQgbGlzdCBvZiBhdmFpbGFibGUgUHlGbG9hdE9iamVjdHMsIGxpbmtlZApAQCAtMTE0LDcgKzEwOSw3IEBACiBQeU9iamVjdCAqCiBQeUZsb2F0X0Zyb21Eb3VibGUoZG91YmxlIGZ2YWwpCiB7Ci0gICAgcmVnaXN0ZXIgUHlGbG9hdE9iamVjdCAqb3AgPSBmcmVlX2xpc3Q7CisgICAgUHlGbG9hdE9iamVjdCAqb3AgPSBmcmVlX2xpc3Q7CiAgICAgaWYgKG9wICE9IE5VTEwpIHsKICAgICAgICAgZnJlZV9saXN0ID0gKFB5RmxvYXRPYmplY3QgKikgUHlfVFlQRShvcCk7CiAgICAgICAgIG51bWZyZWUtLTsKQEAgLTEyNCw3ICsxMTksNyBAQAogICAgICAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgfQogICAgIC8qIElubGluZSBQeU9iamVjdF9OZXcgKi8KLSAgICBQeU9iamVjdF9JTklUKG9wLCAmUHlGbG9hdF9UeXBlKTsKKyAgICAodm9pZClQeU9iamVjdF9JTklUKG9wLCAmUHlGbG9hdF9UeXBlKTsKICAgICBvcC0+b2JfZnZhbCA9IGZ2YWw7CiAgICAgcmV0dXJuIChQeU9iamVjdCAqKSBvcDsKIH0KQEAgLTEzNiw2ICsxMzEsNyBAQAogICAgIGRvdWJsZSB4OwogICAgIFB5T2JqZWN0ICpzX2J1ZmZlciA9IE5VTEw7CiAgICAgUHlfc3NpemVfdCBsZW47CisgICAgUHlfYnVmZmVyIHZpZXcgPSB7TlVMTCwgTlVMTH07CiAgICAgUHlPYmplY3QgKnJlc3VsdCA9IE5VTEw7CiAKICAgICBpZiAoUHlVbmljb2RlX0NoZWNrKHYpKSB7CkBAIC0xNDgsOSArMTQ0LDI5IEBACiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQogICAgIH0KLSAgICBlbHNlIGlmIChQeU9iamVjdF9Bc0NoYXJCdWZmZXIodiwgJnMsICZsZW4pKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAiZmxvYXQoKSBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nIG9yIGEgbnVtYmVyIik7CisgICAgZWxzZSBpZiAoUHlCeXRlc19DaGVjayh2KSkgeworICAgICAgICBzID0gUHlCeXRlc19BU19TVFJJTkcodik7CisgICAgICAgIGxlbiA9IFB5Qnl0ZXNfR0VUX1NJWkUodik7CisgICAgfQorICAgIGVsc2UgaWYgKFB5Qnl0ZUFycmF5X0NoZWNrKHYpKSB7CisgICAgICAgIHMgPSBQeUJ5dGVBcnJheV9BU19TVFJJTkcodik7CisgICAgICAgIGxlbiA9IFB5Qnl0ZUFycmF5X0dFVF9TSVpFKHYpOworICAgIH0KKyAgICBlbHNlIGlmIChQeU9iamVjdF9HZXRCdWZmZXIodiwgJnZpZXcsIFB5QlVGX1NJTVBMRSkgPT0gMCkgeworICAgICAgICBzID0gKGNvbnN0IGNoYXIgKil2aWV3LmJ1ZjsKKyAgICAgICAgbGVuID0gdmlldy5sZW47CisgICAgICAgIC8qIENvcHkgdG8gTlVMLXRlcm1pbmF0ZWQgYnVmZmVyLiAqLworICAgICAgICBzX2J1ZmZlciA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUocywgbGVuKTsKKyAgICAgICAgaWYgKHNfYnVmZmVyID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZpZXcpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgcyA9IFB5Qnl0ZXNfQVNfU1RSSU5HKHNfYnVmZmVyKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAiZmxvYXQoKSBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nIG9yIGEgbnVtYmVyLCBub3QgJyUuMjAwcyciLAorICAgICAgICAgICAgUHlfVFlQRSh2KS0+dHBfbmFtZSk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBsYXN0ID0gcyArIGxlbjsKQEAgLTE3NCw2ICsxOTAsNyBAQAogICAgIGVsc2UKICAgICAgICAgcmVzdWx0ID0gUHlGbG9hdF9Gcm9tRG91YmxlKHgpOwogCisgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmlldyk7CiAgICAgUHlfWERFQ1JFRihzX2J1ZmZlcik7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTIxOCw2ICsyMzUsNyBAQAogICAgIGlmIChmbyA9PSBOVUxMKQogICAgICAgICByZXR1cm4gLTE7CiAgICAgaWYgKCFQeUZsb2F0X0NoZWNrKGZvKSkgeworICAgICAgICBQeV9ERUNSRUYoZm8pOwogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgIm5iX2Zsb2F0IHNob3VsZCByZXR1cm4gZmxvYXQgb2JqZWN0Iik7CiAgICAgICAgIHJldHVybiAtMTsKQEAgLTI0Niw3ICsyNjQsNyBAQAogc3RhdGljIGludAogY29udmVydF90b19kb3VibGUoUHlPYmplY3QgKip2LCBkb3VibGUgKmRibCkKIHsKLSAgICByZWdpc3RlciBQeU9iamVjdCAqb2JqID0gKnY7CisgICAgUHlPYmplY3QgKm9iaiA9ICp2OwogCiAgICAgaWYgKFB5TG9uZ19DaGVjayhvYmopKSB7CiAgICAgICAgICpkYmwgPSBQeUxvbmdfQXNEb3VibGUob2JqKTsKQEAgLTExMzEsNyArMTE0OSw3IEBACiAgICAgfQogCiAgICAgbSA9IGZyZXhwKGZhYnMoeCksICZlKTsKLSAgICBzaGlmdCA9IDEgLSBNQVgoREJMX01JTl9FWFAgLSBlLCAwKTsKKyAgICBzaGlmdCA9IDEgLSBQeV9NQVgoREJMX01JTl9FWFAgLSBlLCAwKTsKICAgICBtID0gbGRleHAobSwgc2hpZnQpOwogICAgIGUgLT0gc2hpZnQ7CiAKQEAgLTEyODUsOCArMTMwMyw4IEBACiAgICAgZmRpZ2l0cyA9IGNvZWZmX2VuZCAtIHNfc3RvcmU7CiAgICAgaWYgKG5kaWdpdHMgPT0gMCkKICAgICAgICAgZ290byBwYXJzZV9lcnJvcjsKLSAgICBpZiAobmRpZ2l0cyA+IE1JTihEQkxfTUlOX0VYUCAtIERCTF9NQU5UX0RJRyAtIExPTkdfTUlOLzIsCi0gICAgICAgICAgICAgICAgICAgICAgTE9OR19NQVgvMiArIDEgLSBEQkxfTUFYX0VYUCkvNCkKKyAgICBpZiAobmRpZ2l0cyA+IFB5X01JTihEQkxfTUlOX0VYUCAtIERCTF9NQU5UX0RJRyAtIExPTkdfTUlOLzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgTE9OR19NQVgvMiArIDEgLSBEQkxfTUFYX0VYUCkvNCkKICAgICAgICAgZ290byBpbnNhbmVfbGVuZ3RoX2Vycm9yOwogCiAgICAgLyogW3AgPGV4cG9uZW50Pl0gKi8KQEAgLTEzNDIsNyArMTM2MCw3IEBACiAKICAgICAvKiBsc2IgPSBleHBvbmVudCBvZiBsZWFzdCBzaWduaWZpY2FudCBiaXQgb2YgdGhlICpyb3VuZGVkKiB2YWx1ZS4KICAgICAgICBUaGlzIGlzIHRvcF9leHAgLSBEQkxfTUFOVF9ESUcgdW5sZXNzIHJlc3VsdCBpcyBzdWJub3JtYWwuICovCi0gICAgbHNiID0gTUFYKHRvcF9leHAsIChsb25nKURCTF9NSU5fRVhQKSAtIERCTF9NQU5UX0RJRzsKKyAgICBsc2IgPSBQeV9NQVgodG9wX2V4cCwgKGxvbmcpREJMX01JTl9FWFApIC0gREJMX01BTlRfRElHOwogCiAgICAgeCA9IDAuMDsKICAgICBpZiAoZXhwID49IGxzYikgewpAQCAtMTQyMSw3ICsxNDM5LDcgQEAKID4+PiBmbG9hdC5mcm9taGV4KCcweDEuZmZmZnAxMCcpXG5cCiAyMDQ3Ljk4NDM3NVxuXAogPj4+IGZsb2F0LmZyb21oZXgoJy0weDFwLTEwNzQnKVxuXAotLTQuOTQwNjU2NDU4NDEyNDY1NGUtMzI0Iik7CistNWUtMzI0Iik7CiAKIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTE1NDksNyArMTU2Nyw3IEBACiAgICAgdG1wID0gZmxvYXRfbmV3KCZQeUZsb2F0X1R5cGUsIGFyZ3MsIGt3ZHMpOwogICAgIGlmICh0bXAgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgYXNzZXJ0KFB5RmxvYXRfQ2hlY2tFeGFjdCh0bXApKTsKKyAgICBhc3NlcnQoUHlGbG9hdF9DaGVjayh0bXApKTsKICAgICBuZXdvYmogPSB0eXBlLT50cF9hbGxvYyh0eXBlLCAwKTsKICAgICBpZiAobmV3b2JqID09IE5VTEwpIHsKICAgICAgICAgUHlfREVDUkVGKHRtcCk7CkBAIC0xNzExLDcgKzE3MjksNyBAQAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiVTpfX2Zvcm1hdF9fIiwgJmZvcm1hdF9zcGVjKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBfUHlVbmljb2RlV3JpdGVyX0luaXQoJndyaXRlciwgMCk7CisgICAgX1B5VW5pY29kZVdyaXRlcl9Jbml0KCZ3cml0ZXIpOwogICAgIHJldCA9IF9QeUZsb2F0X0Zvcm1hdEFkdmFuY2VkV3JpdGVyKAogICAgICAgICAmd3JpdGVyLAogICAgICAgICBzZWxmLApAQCAtMTg1OCw3ICsxODc2LDcgQEAKICAgICBmbG9hdF9uZXcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX25ldyAqLwogfTsKIAotdm9pZAoraW50CiBfUHlGbG9hdF9Jbml0KHZvaWQpCiB7CiAgICAgLyogV2UgYXR0ZW1wdCB0byBkZXRlcm1pbmUgaWYgdGhpcyBtYWNoaW5lIGlzIHVzaW5nIElFRUUKQEAgLTE5MDgsOCArMTkyNiwxMSBAQAogICAgIGZsb2F0X2Zvcm1hdCA9IGRldGVjdGVkX2Zsb2F0X2Zvcm1hdDsKIAogICAgIC8qIEluaXQgZmxvYXQgaW5mbyAqLwotICAgIGlmIChGbG9hdEluZm9UeXBlLnRwX25hbWUgPT0gMCkKLSAgICAgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZSgmRmxvYXRJbmZvVHlwZSwgJmZsb2F0aW5mb19kZXNjKTsKKyAgICBpZiAoRmxvYXRJbmZvVHlwZS50cF9uYW1lID09IE5VTEwpIHsKKyAgICAgICAgaWYgKFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUyKCZGbG9hdEluZm9UeXBlLCAmZmxvYXRpbmZvX2Rlc2MpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICByZXR1cm4gMTsKIH0KIAogaW50CmRpZmYgLS1naXQgYS9PYmplY3RzL2ZyYW1lb2JqZWN0LmMgYi9PYmplY3RzL2ZyYW1lb2JqZWN0LmMKaW5kZXggYjMxMjEzMC4uNTVlZTU2MyAxMDA2NDQKLS0tIGEvT2JqZWN0cy9mcmFtZW9iamVjdC5jCisrKyBiL09iamVjdHMvZnJhbWVvYmplY3QuYwpAQCAtNywxMSArNyw2IEBACiAjaW5jbHVkZSAib3Bjb2RlLmgiCiAjaW5jbHVkZSAic3RydWN0bWVtYmVyLmgiCiAKLSN1bmRlZiBNSU4KLSN1bmRlZiBNQVgKLSNkZWZpbmUgTUlOKGEsIGIpICgoYSkgPCAoYikgPyAoYSkgOiAoYikpCi0jZGVmaW5lIE1BWChhLCBiKSAoKGEpID4gKGIpID8gKGEpIDogKGIpKQotCiAjZGVmaW5lIE9GRih4KSBvZmZzZXRvZihQeUZyYW1lT2JqZWN0LCB4KQogCiBzdGF0aWMgUHlNZW1iZXJEZWYgZnJhbWVfbWVtYmVybGlzdFtdID0gewpAQCAtMjYsNyArMjEsOCBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGZyYW1lX2dldGxvY2FscyhQeUZyYW1lT2JqZWN0ICpmLCB2b2lkICpjbG9zdXJlKQogewotICAgIFB5RnJhbWVfRmFzdFRvTG9jYWxzKGYpOworICAgIGlmIChQeUZyYW1lX0Zhc3RUb0xvY2Fsc1dpdGhFcnJvcihmKSA8IDApCisgICAgICAgIHJldHVybiBOVUxMOwogICAgIFB5X0lOQ1JFRihmLT5mX2xvY2Fscyk7CiAgICAgcmV0dXJuIGYtPmZfbG9jYWxzOwogfQpAQCAtMTYwLDggKzE1Niw4IEBACiAKICAgICAvKiBXZSdyZSBub3cgcmVhZHkgdG8gbG9vayBhdCB0aGUgYnl0ZWNvZGUuICovCiAgICAgUHlCeXRlc19Bc1N0cmluZ0FuZFNpemUoZi0+Zl9jb2RlLT5jb19jb2RlLCAoY2hhciAqKikmY29kZSwgJmNvZGVfbGVuKTsKLSAgICBtaW5fYWRkciA9IE1JTihuZXdfbGFzdGksIGYtPmZfbGFzdGkpOwotICAgIG1heF9hZGRyID0gTUFYKG5ld19sYXN0aSwgZi0+Zl9sYXN0aSk7CisgICAgbWluX2FkZHIgPSBQeV9NSU4obmV3X2xhc3RpLCBmLT5mX2xhc3RpKTsKKyAgICBtYXhfYWRkciA9IFB5X01BWChuZXdfbGFzdGksIGYtPmZfbGFzdGkpOwogCiAgICAgLyogWW91IGNhbid0IGp1bXAgb250byBhIGxpbmUgd2l0aCBhbiAnZXhjZXB0JyBzdGF0ZW1lbnQgb24gaXQgLQogICAgICAqIHRoZXkgZXhwZWN0IHRvIGhhdmUgYW4gZXhjZXB0aW9uIG9uIHRoZSB0b3Agb2YgdGhlIHN0YWNrLCB3aGljaApAQCAtMjkzLDcgKzI4OSw3IEBACiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAgIG1pbl9kZWx0YV9pYmxvY2sgPSBNSU4obWluX2RlbHRhX2libG9jaywgZGVsdGFfaWJsb2NrKTsKKyAgICAgICAgbWluX2RlbHRhX2libG9jayA9IFB5X01JTihtaW5fZGVsdGFfaWJsb2NrLCBkZWx0YV9pYmxvY2spOwogCiAgICAgICAgIGlmIChvcCA+PSBIQVZFX0FSR1VNRU5UKSB7CiAgICAgICAgICAgICBhZGRyICs9IDI7CkBAIC00NjYsNyArNDYyLDcgQEAKIGZyYW1lX3RyYXZlcnNlKFB5RnJhbWVPYmplY3QgKmYsIHZpc2l0cHJvYyB2aXNpdCwgdm9pZCAqYXJnKQogewogICAgIFB5T2JqZWN0ICoqZmFzdGxvY2FscywgKipwOwotICAgIGludCBpLCBzbG90czsKKyAgICBQeV9zc2l6ZV90IGksIHNsb3RzOwogCiAgICAgUHlfVklTSVQoZi0+Zl9iYWNrKTsKICAgICBQeV9WSVNJVChmLT5mX2NvZGUpOwpAQCAtNDkzLDEwICs0ODksMTAgQEAKIH0KIAogc3RhdGljIHZvaWQKLWZyYW1lX2NsZWFyKFB5RnJhbWVPYmplY3QgKmYpCitmcmFtZV90cF9jbGVhcihQeUZyYW1lT2JqZWN0ICpmKQogewogICAgIFB5T2JqZWN0ICoqZmFzdGxvY2FscywgKipwLCAqKm9sZHRvcDsKLSAgICBpbnQgaSwgc2xvdHM7CisgICAgUHlfc3NpemVfdCBpLCBzbG90czsKIAogICAgIC8qIEJlZm9yZSBhbnl0aGluZyBlbHNlLCBtYWtlIHN1cmUgdGhhdCB0aGlzIGZyYW1lIGlzIGNsZWFybHkgbWFya2VkCiAgICAgICogYXMgYmVpbmcgZGVmdW5jdCEgIEVsc2UsIGUuZy4sIGEgZ2VuZXJhdG9yIHJlYWNoYWJsZSBmcm9tIHRoaXMKQEAgLTUwNSw2ICs1MDEsNyBAQAogICAgICAqLwogICAgIG9sZHRvcCA9IGYtPmZfc3RhY2t0b3A7CiAgICAgZi0+Zl9zdGFja3RvcCA9IE5VTEw7CisgICAgZi0+Zl9leGVjdXRpbmcgPSAwOwogCiAgICAgUHlfQ0xFQVIoZi0+Zl9leGNfdHlwZSk7CiAgICAgUHlfQ0xFQVIoZi0+Zl9leGNfdmFsdWUpOwpAQCAtNTI1LDYgKzUyMiwyNSBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgorZnJhbWVfY2xlYXIoUHlGcmFtZU9iamVjdCAqZikKK3sKKyAgICBpZiAoZi0+Zl9leGVjdXRpbmcpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJjYW5ub3QgY2xlYXIgYW4gZXhlY3V0aW5nIGZyYW1lIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAoZi0+Zl9nZW4pIHsKKyAgICAgICAgX1B5R2VuX0ZpbmFsaXplKGYtPmZfZ2VuKTsKKyAgICAgICAgYXNzZXJ0KGYtPmZfZ2VuID09IE5VTEwpOworICAgIH0KKyAgICBmcmFtZV90cF9jbGVhcihmKTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKworUHlEb2NfU1RSVkFSKGNsZWFyX19kb2NfXywKKyJGLmNsZWFyKCk6IGNsZWFyIG1vc3QgcmVmZXJlbmNlcyBoZWxkIGJ5IHRoZSBmcmFtZSIpOworCitzdGF0aWMgUHlPYmplY3QgKgogZnJhbWVfc2l6ZW9mKFB5RnJhbWVPYmplY3QgKmYpCiB7CiAgICAgUHlfc3NpemVfdCByZXMsIGV4dHJhcywgbmNlbGxzLCBuZnJlZXM7CkBAIC01NDMsNiArNTU5LDggQEAKICJGLl9fc2l6ZW9mX18oKSAtPiBzaXplIG9mIEYgaW4gbWVtb3J5LCBpbiBieXRlcyIpOwogCiBzdGF0aWMgUHlNZXRob2REZWYgZnJhbWVfbWV0aG9kc1tdID0geworICAgIHsiY2xlYXIiLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKWZyYW1lX2NsZWFyLCAgICAgICBNRVRIX05PQVJHUywKKyAgICAgY2xlYXJfX2RvY19ffSwKICAgICB7Il9fc2l6ZW9mX18iLCAgICAgIChQeUNGdW5jdGlvbilmcmFtZV9zaXplb2YsICAgICAgTUVUSF9OT0FSR1MsCiAgICAgIHNpemVvZl9fZG9jX199LAogICAgIHtOVUxMLCAgICAgICAgICAgICAgTlVMTH0gICAvKiBzZW50aW5lbCAqLwpAQCAtNTcxLDcgKzU4OSw3IEBACiAgICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19IQVZFX0dDLC8qIHRwX2ZsYWdzICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kb2MgKi8KICAgICAodHJhdmVyc2Vwcm9jKWZyYW1lX3RyYXZlcnNlLCAgICAgICAgICAgICAgIC8qIHRwX3RyYXZlcnNlICovCi0gICAgKGlucXVpcnkpZnJhbWVfY2xlYXIsICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jbGVhciAqLworICAgIChpbnF1aXJ5KWZyYW1lX3RwX2NsZWFyLCAgICAgICAgICAgICAgICAgICAgLyogdHBfY2xlYXIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JpY2hjb21wYXJlICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlciAqLwpAQCAtNTgzLDEzICs2MDEsMTMgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RpY3QgKi8KIH07CiAKLXN0YXRpYyBQeU9iamVjdCAqYnVpbHRpbl9vYmplY3Q7CitfUHlfSURFTlRJRklFUihfX2J1aWx0aW5zX18pOwogCiBpbnQgX1B5RnJhbWVfSW5pdCgpCiB7Ci0gICAgYnVpbHRpbl9vYmplY3QgPSBQeVVuaWNvZGVfSW50ZXJuRnJvbVN0cmluZygiX19idWlsdGluc19fIik7Ci0gICAgaWYgKGJ1aWx0aW5fb2JqZWN0ID09IE5VTEwpCi0gICAgICAgIHJldHVybiAwOworICAgIC8qIEJlZm9yZSwgUHlJZF9fX2J1aWx0aW5zX18gd2FzIGEgc3RyaW5nIGNyZWF0ZWQgZXhwbGljaXRseSBpbgorICAgICAgIHRoaXMgZnVuY3Rpb24uIE5vdyB0aGVyZSBpcyBub3RoaW5nIHRvIGluaXRpYWxpemUgYW55bW9yZSwgYnV0CisgICAgICAgdGhlIGZ1bmN0aW9uIGlzIGtlcHQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuICovCiAgICAgcmV0dXJuIDE7CiB9CiAKQEAgLTYxMCw3ICs2MjgsNyBAQAogICAgIH0KICNlbmRpZgogICAgIGlmIChiYWNrID09IE5VTEwgfHwgYmFjay0+Zl9nbG9iYWxzICE9IGdsb2JhbHMpIHsKLSAgICAgICAgYnVpbHRpbnMgPSBQeURpY3RfR2V0SXRlbShnbG9iYWxzLCBidWlsdGluX29iamVjdCk7CisgICAgICAgIGJ1aWx0aW5zID0gX1B5RGljdF9HZXRJdGVtSWQoZ2xvYmFscywgJlB5SWRfX19idWlsdGluc19fKTsKICAgICAgICAgaWYgKGJ1aWx0aW5zKSB7CiAgICAgICAgICAgICBpZiAoUHlNb2R1bGVfQ2hlY2soYnVpbHRpbnMpKSB7CiAgICAgICAgICAgICAgICAgYnVpbHRpbnMgPSBQeU1vZHVsZV9HZXREaWN0KGJ1aWx0aW5zKTsKQEAgLTcwOCwxMSArNzI2LDEyIEBACiAgICAgICAgIFB5X0lOQ1JFRihsb2NhbHMpOwogICAgICAgICBmLT5mX2xvY2FscyA9IGxvY2FsczsKICAgICB9Ci0gICAgZi0+Zl90c3RhdGUgPSB0c3RhdGU7CiAKICAgICBmLT5mX2xhc3RpID0gLTE7CiAgICAgZi0+Zl9saW5lbm8gPSBjb2RlLT5jb19maXJzdGxpbmVubzsKICAgICBmLT5mX2libG9jayA9IDA7CisgICAgZi0+Zl9leGVjdXRpbmcgPSAwOworICAgIGYtPmZfZ2VuID0gTlVMTDsKIAogICAgIF9QeU9iamVjdF9HQ19UUkFDSyhmKTsKICAgICByZXR1cm4gZjsKQEAgLTc1MywxMiArNzcyLDkgQEAKICAgIElmIGRlcmVmIGlzIHRydWUsIHRoZW4gdGhlIHZhbHVlcyBiZWluZyBjb3BpZWQgYXJlIGNlbGwgdmFyaWFibGVzCiAgICBhbmQgdGhlIHZhbHVlIGlzIGV4dHJhY3RlZCBmcm9tIHRoZSBjZWxsIHZhcmlhYmxlIGJlZm9yZSBiZWluZyBwdXQKICAgIGluIGRpY3QuCi0KLSAgIEV4Y2VwdGlvbnMgcmFpc2VkIHdoaWxlIG1vZGlmeWluZyB0aGUgZGljdCBhcmUgc2lsZW50bHkgaWdub3JlZCwKLSAgIGJlY2F1c2UgdGhlcmUgaXMgbm8gZ29vZCB3YXkgdG8gcmVwb3J0IHRoZW0uCiAgKi8KIAotc3RhdGljIHZvaWQKK3N0YXRpYyBpbnQKIG1hcF90b19kaWN0KFB5T2JqZWN0ICptYXAsIFB5X3NzaXplX3Qgbm1hcCwgUHlPYmplY3QgKmRpY3QsIFB5T2JqZWN0ICoqdmFsdWVzLAogICAgICAgICAgICAgaW50IGRlcmVmKQogewpAQCAtNzcwLDE5ICs3ODYsMjQgQEAKICAgICAgICAgUHlPYmplY3QgKmtleSA9IFB5VHVwbGVfR0VUX0lURU0obWFwLCBqKTsKICAgICAgICAgUHlPYmplY3QgKnZhbHVlID0gdmFsdWVzW2pdOwogICAgICAgICBhc3NlcnQoUHlVbmljb2RlX0NoZWNrKGtleSkpOwotICAgICAgICBpZiAoZGVyZWYpIHsKKyAgICAgICAgaWYgKGRlcmVmICYmIHZhbHVlICE9IE5VTEwpIHsKICAgICAgICAgICAgIGFzc2VydChQeUNlbGxfQ2hlY2sodmFsdWUpKTsKICAgICAgICAgICAgIHZhbHVlID0gUHlDZWxsX0dFVCh2YWx1ZSk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHZhbHVlID09IE5VTEwpIHsKLSAgICAgICAgICAgIGlmIChQeU9iamVjdF9EZWxJdGVtKGRpY3QsIGtleSkgIT0gMCkKLSAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICAgICAgaWYgKFB5T2JqZWN0X0RlbEl0ZW0oZGljdCwga2V5KSAhPSAwKSB7CisgICAgICAgICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfS2V5RXJyb3IpKQorICAgICAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgaWYgKFB5T2JqZWN0X1NldEl0ZW0oZGljdCwga2V5LCB2YWx1ZSkgIT0gMCkKLSAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQogICAgIH0KKyAgICByZXR1cm4gMDsKIH0KIAogLyogQ29weSB2YWx1ZXMgZnJvbSB0aGUgImxvY2FscyIgZGljdCBpbnRvIHRoZSBmYXN0IGxvY2Fscy4KQEAgLTgzOSw0MiArODYwLDQ5IEBACiAgICAgfQogfQogCi12b2lkCi1QeUZyYW1lX0Zhc3RUb0xvY2FscyhQeUZyYW1lT2JqZWN0ICpmKQoraW50CitQeUZyYW1lX0Zhc3RUb0xvY2Fsc1dpdGhFcnJvcihQeUZyYW1lT2JqZWN0ICpmKQogewogICAgIC8qIE1lcmdlIGZhc3QgbG9jYWxzIGludG8gZi0+Zl9sb2NhbHMgKi8KICAgICBQeU9iamVjdCAqbG9jYWxzLCAqbWFwOwogICAgIFB5T2JqZWN0ICoqZmFzdDsKLSAgICBQeU9iamVjdCAqZXJyb3JfdHlwZSwgKmVycm9yX3ZhbHVlLCAqZXJyb3JfdHJhY2ViYWNrOwogICAgIFB5Q29kZU9iamVjdCAqY287CiAgICAgUHlfc3NpemVfdCBqOwotICAgIGludCBuY2VsbHMsIG5mcmVldmFyczsKLSAgICBpZiAoZiA9PSBOVUxMKQotICAgICAgICByZXR1cm47CisgICAgUHlfc3NpemVfdCBuY2VsbHMsIG5mcmVldmFyczsKKworICAgIGlmIChmID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfQmFkSW50ZXJuYWxDYWxsKCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CiAgICAgbG9jYWxzID0gZi0+Zl9sb2NhbHM7CiAgICAgaWYgKGxvY2FscyA9PSBOVUxMKSB7CiAgICAgICAgIGxvY2FscyA9IGYtPmZfbG9jYWxzID0gUHlEaWN0X05ldygpOwotICAgICAgICBpZiAobG9jYWxzID09IE5VTEwpIHsKLSAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7IC8qIENhbid0IHJlcG9ydCBpdCA6LSggKi8KLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQorICAgICAgICBpZiAobG9jYWxzID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogICAgIGNvID0gZi0+Zl9jb2RlOwogICAgIG1hcCA9IGNvLT5jb192YXJuYW1lczsKLSAgICBpZiAoIVB5VHVwbGVfQ2hlY2sobWFwKSkKLSAgICAgICAgcmV0dXJuOwotICAgIFB5RXJyX0ZldGNoKCZlcnJvcl90eXBlLCAmZXJyb3JfdmFsdWUsICZlcnJvcl90cmFjZWJhY2spOworICAgIGlmICghUHlUdXBsZV9DaGVjayhtYXApKSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19TeXN0ZW1FcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICJjb192YXJuYW1lcyBtdXN0IGJlIGEgdHVwbGUsIG5vdCAlcyIsCisgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKG1hcCktPnRwX25hbWUpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQogICAgIGZhc3QgPSBmLT5mX2xvY2Fsc3BsdXM7CiAgICAgaiA9IFB5VHVwbGVfR0VUX1NJWkUobWFwKTsKICAgICBpZiAoaiA+IGNvLT5jb19ubG9jYWxzKQogICAgICAgICBqID0gY28tPmNvX25sb2NhbHM7Ci0gICAgaWYgKGNvLT5jb19ubG9jYWxzKQotICAgICAgICBtYXBfdG9fZGljdChtYXAsIGosIGxvY2FscywgZmFzdCwgMCk7CisgICAgaWYgKGNvLT5jb19ubG9jYWxzKSB7CisgICAgICAgIGlmIChtYXBfdG9fZGljdChtYXAsIGosIGxvY2FscywgZmFzdCwgMCkgPCAwKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgIH0KICAgICBuY2VsbHMgPSBQeVR1cGxlX0dFVF9TSVpFKGNvLT5jb19jZWxsdmFycyk7CiAgICAgbmZyZWV2YXJzID0gUHlUdXBsZV9HRVRfU0laRShjby0+Y29fZnJlZXZhcnMpOwogICAgIGlmIChuY2VsbHMgfHwgbmZyZWV2YXJzKSB7Ci0gICAgICAgIG1hcF90b19kaWN0KGNvLT5jb19jZWxsdmFycywgbmNlbGxzLAotICAgICAgICAgICAgICAgICAgICBsb2NhbHMsIGZhc3QgKyBjby0+Y29fbmxvY2FscywgMSk7CisgICAgICAgIGlmIChtYXBfdG9fZGljdChjby0+Y29fY2VsbHZhcnMsIG5jZWxscywKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FscywgZmFzdCArIGNvLT5jb19ubG9jYWxzLCAxKSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKwogICAgICAgICAvKiBJZiB0aGUgbmFtZXNwYWNlIGlzIHVub3B0aW1pemVkLCB0aGVuIG9uZSBvZiB0aGUKICAgICAgICAgICAgZm9sbG93aW5nIGNhc2VzIGFwcGxpZXM6CiAgICAgICAgICAgIDEuIEl0IGRvZXMgbm90IGNvbnRhaW4gZnJlZSB2YXJpYWJsZXMsIGJlY2F1c2UgaXQKQEAgLTg4NCwxMSArOTEyLDI0IEBACiAgICAgICAgICAgIGludG8gdGhlIGxvY2FscyBkaWN0IHVzZWQgYnkgdGhlIGNsYXNzLgogICAgICAgICAqLwogICAgICAgICBpZiAoY28tPmNvX2ZsYWdzICYgQ09fT1BUSU1JWkVEKSB7Ci0gICAgICAgICAgICBtYXBfdG9fZGljdChjby0+Y29fZnJlZXZhcnMsIG5mcmVldmFycywKLSAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FscywgZmFzdCArIGNvLT5jb19ubG9jYWxzICsgbmNlbGxzLCAxKTsKKyAgICAgICAgICAgIGlmIChtYXBfdG9fZGljdChjby0+Y29fZnJlZXZhcnMsIG5mcmVldmFycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbHMsIGZhc3QgKyBjby0+Y29fbmxvY2FscyArIG5jZWxscywgMSkgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQogICAgIH0KLSAgICBQeUVycl9SZXN0b3JlKGVycm9yX3R5cGUsIGVycm9yX3ZhbHVlLCBlcnJvcl90cmFjZWJhY2spOworICAgIHJldHVybiAwOworfQorCit2b2lkCitQeUZyYW1lX0Zhc3RUb0xvY2FscyhQeUZyYW1lT2JqZWN0ICpmKQoreworICAgIGludCByZXM7CisKKyAgICBhc3NlcnQoIVB5RXJyX09jY3VycmVkKCkpOworCisgICAgcmVzID0gUHlGcmFtZV9GYXN0VG9Mb2NhbHNXaXRoRXJyb3IoZik7CisgICAgaWYgKHJlcyA8IDApCisgICAgICAgIFB5RXJyX0NsZWFyKCk7CiB9CiAKIHZvaWQKQEAgLTkwMCw3ICs5NDEsNyBAQAogICAgIFB5T2JqZWN0ICplcnJvcl90eXBlLCAqZXJyb3JfdmFsdWUsICplcnJvcl90cmFjZWJhY2s7CiAgICAgUHlDb2RlT2JqZWN0ICpjbzsKICAgICBQeV9zc2l6ZV90IGo7Ci0gICAgaW50IG5jZWxscywgbmZyZWV2YXJzOworICAgIFB5X3NzaXplX3QgbmNlbGxzLCBuZnJlZXZhcnM7CiAgICAgaWYgKGYgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuOwogICAgIGxvY2FscyA9IGYtPmZfbG9jYWxzOwpAQCAtOTUyLDcgKzk5Myw2IEBACiBQeUZyYW1lX0Zpbmkodm9pZCkKIHsKICAgICAodm9pZClQeUZyYW1lX0NsZWFyRnJlZUxpc3QoKTsKLSAgICBQeV9DTEVBUihidWlsdGluX29iamVjdCk7CiB9CiAKIC8qIFByaW50IHN1bW1hcnkgaW5mbyBhYm91dCB0aGUgc3RhdGUgb2YgdGhlIG9wdGltaXplZCBhbGxvY2F0b3IgKi8KZGlmZiAtLWdpdCBhL09iamVjdHMvZnVuY29iamVjdC5jIGIvT2JqZWN0cy9mdW5jb2JqZWN0LmMKaW5kZXggNDk0MTViOS4uYjA0MzkzNCAxMDA2NDQKLS0tIGEvT2JqZWN0cy9mdW5jb2JqZWN0LmMKKysrIGIvT2JqZWN0cy9mdW5jb2JqZWN0LmMKQEAgLTgsNjAgKzgsNTkgQEAKIFB5T2JqZWN0ICoKIFB5RnVuY3Rpb25fTmV3V2l0aFF1YWxOYW1lKFB5T2JqZWN0ICpjb2RlLCBQeU9iamVjdCAqZ2xvYmFscywgUHlPYmplY3QgKnF1YWxuYW1lKQogewotICAgIFB5RnVuY3Rpb25PYmplY3QgKm9wID0gUHlPYmplY3RfR0NfTmV3KFB5RnVuY3Rpb25PYmplY3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlB5RnVuY3Rpb25fVHlwZSk7Ci0gICAgc3RhdGljIFB5T2JqZWN0ICpfX25hbWVfXyA9IDA7Ci0gICAgaWYgKG9wICE9IE5VTEwpIHsKLSAgICAgICAgUHlPYmplY3QgKmRvYzsKLSAgICAgICAgUHlPYmplY3QgKmNvbnN0czsKLSAgICAgICAgUHlPYmplY3QgKm1vZHVsZTsKLSAgICAgICAgb3AtPmZ1bmNfd2Vha3JlZmxpc3QgPSBOVUxMOwotICAgICAgICBQeV9JTkNSRUYoY29kZSk7Ci0gICAgICAgIG9wLT5mdW5jX2NvZGUgPSBjb2RlOwotICAgICAgICBQeV9JTkNSRUYoZ2xvYmFscyk7Ci0gICAgICAgIG9wLT5mdW5jX2dsb2JhbHMgPSBnbG9iYWxzOwotICAgICAgICBvcC0+ZnVuY19uYW1lID0gKChQeUNvZGVPYmplY3QgKiljb2RlKS0+Y29fbmFtZTsKLSAgICAgICAgUHlfSU5DUkVGKG9wLT5mdW5jX25hbWUpOwotICAgICAgICBvcC0+ZnVuY19kZWZhdWx0cyA9IE5VTEw7IC8qIE5vIGRlZmF1bHQgYXJndW1lbnRzICovCi0gICAgICAgIG9wLT5mdW5jX2t3ZGVmYXVsdHMgPSBOVUxMOyAvKiBObyBrZXl3b3JkIG9ubHkgZGVmYXVsdHMgKi8KLSAgICAgICAgb3AtPmZ1bmNfY2xvc3VyZSA9IE5VTEw7Ci0gICAgICAgIGNvbnN0cyA9ICgoUHlDb2RlT2JqZWN0ICopY29kZSktPmNvX2NvbnN0czsKLSAgICAgICAgaWYgKFB5VHVwbGVfU2l6ZShjb25zdHMpID49IDEpIHsKLSAgICAgICAgICAgIGRvYyA9IFB5VHVwbGVfR2V0SXRlbShjb25zdHMsIDApOwotICAgICAgICAgICAgaWYgKCFQeVVuaWNvZGVfQ2hlY2soZG9jKSkKLSAgICAgICAgICAgICAgICBkb2MgPSBQeV9Ob25lOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGRvYyA9IFB5X05vbmU7Ci0gICAgICAgIFB5X0lOQ1JFRihkb2MpOwotICAgICAgICBvcC0+ZnVuY19kb2MgPSBkb2M7Ci0gICAgICAgIG9wLT5mdW5jX2RpY3QgPSBOVUxMOwotICAgICAgICBvcC0+ZnVuY19tb2R1bGUgPSBOVUxMOwotICAgICAgICBvcC0+ZnVuY19hbm5vdGF0aW9ucyA9IE5VTEw7CisgICAgUHlGdW5jdGlvbk9iamVjdCAqb3A7CisgICAgUHlPYmplY3QgKmRvYywgKmNvbnN0cywgKm1vZHVsZTsKKyAgICBzdGF0aWMgUHlPYmplY3QgKl9fbmFtZV9fID0gTlVMTDsKIAotICAgICAgICAvKiBfX21vZHVsZV9fOiBJZiBtb2R1bGUgbmFtZSBpcyBpbiBnbG9iYWxzLCB1c2UgaXQuCi0gICAgICAgICAgIE90aGVyd2lzZSwgdXNlIE5vbmUuCi0gICAgICAgICovCi0gICAgICAgIGlmICghX19uYW1lX18pIHsKLSAgICAgICAgICAgIF9fbmFtZV9fID0gUHlVbmljb2RlX0ludGVybkZyb21TdHJpbmcoIl9fbmFtZV9fIik7Ci0gICAgICAgICAgICBpZiAoIV9fbmFtZV9fKSB7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKG9wKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBtb2R1bGUgPSBQeURpY3RfR2V0SXRlbShnbG9iYWxzLCBfX25hbWVfXyk7Ci0gICAgICAgIGlmIChtb2R1bGUpIHsKLSAgICAgICAgICAgIFB5X0lOQ1JFRihtb2R1bGUpOwotICAgICAgICAgICAgb3AtPmZ1bmNfbW9kdWxlID0gbW9kdWxlOwotICAgICAgICB9Ci0gICAgICAgIGlmIChxdWFsbmFtZSkKLSAgICAgICAgICAgIG9wLT5mdW5jX3F1YWxuYW1lID0gcXVhbG5hbWU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG9wLT5mdW5jX3F1YWxuYW1lID0gb3AtPmZ1bmNfbmFtZTsKLSAgICAgICAgUHlfSU5DUkVGKG9wLT5mdW5jX3F1YWxuYW1lKTsKKyAgICBpZiAoX19uYW1lX18gPT0gTlVMTCkgeworICAgICAgICBfX25hbWVfXyA9IFB5VW5pY29kZV9JbnRlcm5Gcm9tU3RyaW5nKCJfX25hbWVfXyIpOworICAgICAgICBpZiAoX19uYW1lX18gPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIG9wID0gUHlPYmplY3RfR0NfTmV3KFB5RnVuY3Rpb25PYmplY3QsICZQeUZ1bmN0aW9uX1R5cGUpOworICAgIGlmIChvcCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIG9wLT5mdW5jX3dlYWtyZWZsaXN0ID0gTlVMTDsKKyAgICBQeV9JTkNSRUYoY29kZSk7CisgICAgb3AtPmZ1bmNfY29kZSA9IGNvZGU7CisgICAgUHlfSU5DUkVGKGdsb2JhbHMpOworICAgIG9wLT5mdW5jX2dsb2JhbHMgPSBnbG9iYWxzOworICAgIG9wLT5mdW5jX25hbWUgPSAoKFB5Q29kZU9iamVjdCAqKWNvZGUpLT5jb19uYW1lOworICAgIFB5X0lOQ1JFRihvcC0+ZnVuY19uYW1lKTsKKyAgICBvcC0+ZnVuY19kZWZhdWx0cyA9IE5VTEw7IC8qIE5vIGRlZmF1bHQgYXJndW1lbnRzICovCisgICAgb3AtPmZ1bmNfa3dkZWZhdWx0cyA9IE5VTEw7IC8qIE5vIGtleXdvcmQgb25seSBkZWZhdWx0cyAqLworICAgIG9wLT5mdW5jX2Nsb3N1cmUgPSBOVUxMOworCisgICAgY29uc3RzID0gKChQeUNvZGVPYmplY3QgKiljb2RlKS0+Y29fY29uc3RzOworICAgIGlmIChQeVR1cGxlX1NpemUoY29uc3RzKSA+PSAxKSB7CisgICAgICAgIGRvYyA9IFB5VHVwbGVfR2V0SXRlbShjb25zdHMsIDApOworICAgICAgICBpZiAoIVB5VW5pY29kZV9DaGVjayhkb2MpKQorICAgICAgICAgICAgZG9jID0gUHlfTm9uZTsKICAgICB9CiAgICAgZWxzZQotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgZG9jID0gUHlfTm9uZTsKKyAgICBQeV9JTkNSRUYoZG9jKTsKKyAgICBvcC0+ZnVuY19kb2MgPSBkb2M7CisKKyAgICBvcC0+ZnVuY19kaWN0ID0gTlVMTDsKKyAgICBvcC0+ZnVuY19tb2R1bGUgPSBOVUxMOworICAgIG9wLT5mdW5jX2Fubm90YXRpb25zID0gTlVMTDsKKworICAgIC8qIF9fbW9kdWxlX186IElmIG1vZHVsZSBuYW1lIGlzIGluIGdsb2JhbHMsIHVzZSBpdC4KKyAgICAgICBPdGhlcndpc2UsIHVzZSBOb25lLiAqLworICAgIG1vZHVsZSA9IFB5RGljdF9HZXRJdGVtKGdsb2JhbHMsIF9fbmFtZV9fKTsKKyAgICBpZiAobW9kdWxlKSB7CisgICAgICAgIFB5X0lOQ1JFRihtb2R1bGUpOworICAgICAgICBvcC0+ZnVuY19tb2R1bGUgPSBtb2R1bGU7CisgICAgfQorICAgIGlmIChxdWFsbmFtZSkKKyAgICAgICAgb3AtPmZ1bmNfcXVhbG5hbWUgPSBxdWFsbmFtZTsKKyAgICBlbHNlCisgICAgICAgIG9wLT5mdW5jX3F1YWxuYW1lID0gb3AtPmZ1bmNfbmFtZTsKKyAgICBQeV9JTkNSRUYob3AtPmZ1bmNfcXVhbG5hbWUpOworCiAgICAgX1B5T2JqZWN0X0dDX1RSQUNLKG9wKTsKICAgICByZXR1cm4gKFB5T2JqZWN0ICopb3A7CiB9CmRpZmYgLS1naXQgYS9PYmplY3RzL2dlbm9iamVjdC5jIGIvT2JqZWN0cy9nZW5vYmplY3QuYwppbmRleCAyZTc0YjhjLi42N2U2ZWY5IDEwMDY0NAotLS0gYS9PYmplY3RzL2dlbm9iamVjdC5jCisrKyBiL09iamVjdHMvZ2Vub2JqZWN0LmMKQEAgLTE1LDYgKzE1LDMxIEBACiAgICAgcmV0dXJuIDA7CiB9CiAKK3ZvaWQKK19QeUdlbl9GaW5hbGl6ZShQeU9iamVjdCAqc2VsZikKK3sKKyAgICBQeUdlbk9iamVjdCAqZ2VuID0gKFB5R2VuT2JqZWN0ICopc2VsZjsKKyAgICBQeU9iamVjdCAqcmVzOworICAgIFB5T2JqZWN0ICplcnJvcl90eXBlLCAqZXJyb3JfdmFsdWUsICplcnJvcl90cmFjZWJhY2s7CisKKyAgICBpZiAoZ2VuLT5naV9mcmFtZSA9PSBOVUxMIHx8IGdlbi0+Z2lfZnJhbWUtPmZfc3RhY2t0b3AgPT0gTlVMTCkKKyAgICAgICAgLyogR2VuZXJhdG9yIGlzbid0IHBhdXNlZCwgc28gbm8gbmVlZCB0byBjbG9zZSAqLworICAgICAgICByZXR1cm47CisKKyAgICAvKiBTYXZlIHRoZSBjdXJyZW50IGV4Y2VwdGlvbiwgaWYgYW55LiAqLworICAgIFB5RXJyX0ZldGNoKCZlcnJvcl90eXBlLCAmZXJyb3JfdmFsdWUsICZlcnJvcl90cmFjZWJhY2spOworCisgICAgcmVzID0gZ2VuX2Nsb3NlKGdlbiwgTlVMTCk7CisKKyAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgIFB5RXJyX1dyaXRlVW5yYWlzYWJsZShzZWxmKTsKKyAgICBlbHNlCisgICAgICAgIFB5X0RFQ1JFRihyZXMpOworCisgICAgLyogUmVzdG9yZSB0aGUgc2F2ZWQgZXhjZXB0aW9uLiAqLworICAgIFB5RXJyX1Jlc3RvcmUoZXJyb3JfdHlwZSwgZXJyb3JfdmFsdWUsIGVycm9yX3RyYWNlYmFjayk7Cit9CisKIHN0YXRpYyB2b2lkCiBnZW5fZGVhbGxvYyhQeUdlbk9iamVjdCAqZ2VuKQogewpAQCAtMjcsMTIgKzUyLDggQEAKIAogICAgIF9QeU9iamVjdF9HQ19UUkFDSyhzZWxmKTsKIAotICAgIGlmIChnZW4tPmdpX2ZyYW1lICE9IE5VTEwgJiYgZ2VuLT5naV9mcmFtZS0+Zl9zdGFja3RvcCAhPSBOVUxMKSB7Ci0gICAgICAgIC8qIEdlbmVyYXRvciBpcyBwYXVzZWQsIHNvIHdlIG5lZWQgdG8gY2xvc2UgKi8KLSAgICAgICAgUHlfVFlQRShnZW4pLT50cF9kZWwoc2VsZik7Ci0gICAgICAgIGlmIChzZWxmLT5vYl9yZWZjbnQgPiAwKQotICAgICAgICAgICAgcmV0dXJuOyAgICAgICAgICAgICAgICAgICAgIC8qIHJlc3VycmVjdGVkLiAgOiggKi8KLSAgICB9CisgICAgaWYgKFB5T2JqZWN0X0NhbGxGaW5hbGl6ZXJGcm9tRGVhbGxvYyhzZWxmKSkKKyAgICAgICAgcmV0dXJuOyAgICAgICAgICAgICAgICAgICAgIC8qIHJlc3VycmVjdGVkLiAgOiggKi8KIAogICAgIF9QeU9iamVjdF9HQ19VTlRSQUNLKHNlbGYpOwogICAgIFB5X0NMRUFSKGdlbi0+Z2lfZnJhbWUpOwpAQCAtNDAsNyArNjEsNiBAQAogICAgIFB5T2JqZWN0X0dDX0RlbChnZW4pOwogfQogCi0KIHN0YXRpYyBQeU9iamVjdCAqCiBnZW5fc2VuZF9leChQeUdlbk9iamVjdCAqZ2VuLCBQeU9iamVjdCAqYXJnLCBpbnQgZXhjKQogewpAQCAtNzYsNyArOTYsNiBAQAogCiAgICAgLyogR2VuZXJhdG9ycyBhbHdheXMgcmV0dXJuIHRvIHRoZWlyIG1vc3QgcmVjZW50IGNhbGxlciwgbm90CiAgICAgICogbmVjZXNzYXJpbHkgdGhlaXIgY3JlYXRvci4gKi8KLSAgICBmLT5mX3RzdGF0ZSA9IHRzdGF0ZTsKICAgICBQeV9YSU5DUkVGKHRzdGF0ZS0+ZnJhbWUpOwogICAgIGFzc2VydChmLT5mX2JhY2sgPT0gTlVMTCk7CiAgICAgZi0+Zl9iYWNrID0gdHN0YXRlLT5mcmFtZTsKQEAgLTkwLDggKzEwOSw2IEBACiAgICAgICogY3ljbGUuICovCiAgICAgYXNzZXJ0KGYtPmZfYmFjayA9PSB0c3RhdGUtPmZyYW1lKTsKICAgICBQeV9DTEVBUihmLT5mX2JhY2spOwotICAgIC8qIENsZWFyIHRoZSBib3Jyb3dlZCByZWZlcmVuY2UgdG8gdGhlIHRocmVhZCBzdGF0ZSAqLwotICAgIGYtPmZfdHN0YXRlID0gTlVMTDsKIAogICAgIC8qIElmIHRoZSBnZW5lcmF0b3IganVzdCByZXR1cm5lZCAoYXMgb3Bwb3NlZCB0byB5aWVsZGluZyksIHNpZ25hbAogICAgICAqIHRoYXQgdGhlIGdlbmVyYXRvciBpcyBleGhhdXN0ZWQuICovCkBAIC0xMjMsNiArMTQwLDcgQEAKICAgICAgICAgUHlfWERFQ1JFRih0KTsKICAgICAgICAgUHlfWERFQ1JFRih2KTsKICAgICAgICAgUHlfWERFQ1JFRih0Yik7CisgICAgICAgIGdlbi0+Z2lfZnJhbWUtPmZfZ2VuID0gTlVMTDsKICAgICAgICAgZ2VuLT5naV9mcmFtZSA9IE5VTEw7CiAgICAgICAgIFB5X0RFQ1JFRihmKTsKICAgICB9CkBAIC0yMjUsNjggKzI0Myw2IEBACiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyB2b2lkCi1nZW5fZGVsKFB5T2JqZWN0ICpzZWxmKQotewotICAgIFB5T2JqZWN0ICpyZXM7Ci0gICAgUHlPYmplY3QgKmVycm9yX3R5cGUsICplcnJvcl92YWx1ZSwgKmVycm9yX3RyYWNlYmFjazsKLSAgICBQeUdlbk9iamVjdCAqZ2VuID0gKFB5R2VuT2JqZWN0ICopc2VsZjsKLQotICAgIGlmIChnZW4tPmdpX2ZyYW1lID09IE5VTEwgfHwgZ2VuLT5naV9mcmFtZS0+Zl9zdGFja3RvcCA9PSBOVUxMKQotICAgICAgICAvKiBHZW5lcmF0b3IgaXNuJ3QgcGF1c2VkLCBzbyBubyBuZWVkIHRvIGNsb3NlICovCi0gICAgICAgIHJldHVybjsKLQotICAgIC8qIFRlbXBvcmFyaWx5IHJlc3VycmVjdCB0aGUgb2JqZWN0LiAqLwotICAgIGFzc2VydChzZWxmLT5vYl9yZWZjbnQgPT0gMCk7Ci0gICAgc2VsZi0+b2JfcmVmY250ID0gMTsKLQotICAgIC8qIFNhdmUgdGhlIGN1cnJlbnQgZXhjZXB0aW9uLCBpZiBhbnkuICovCi0gICAgUHlFcnJfRmV0Y2goJmVycm9yX3R5cGUsICZlcnJvcl92YWx1ZSwgJmVycm9yX3RyYWNlYmFjayk7Ci0KLSAgICByZXMgPSBnZW5fY2xvc2UoZ2VuLCBOVUxMKTsKLQotICAgIGlmIChyZXMgPT0gTlVMTCkKLSAgICAgICAgUHlFcnJfV3JpdGVVbnJhaXNhYmxlKHNlbGYpOwotICAgIGVsc2UKLSAgICAgICAgUHlfREVDUkVGKHJlcyk7Ci0KLSAgICAvKiBSZXN0b3JlIHRoZSBzYXZlZCBleGNlcHRpb24uICovCi0gICAgUHlFcnJfUmVzdG9yZShlcnJvcl90eXBlLCBlcnJvcl92YWx1ZSwgZXJyb3JfdHJhY2ViYWNrKTsKLQotICAgIC8qIFVuZG8gdGhlIHRlbXBvcmFyeSByZXN1cnJlY3Rpb247IGNhbid0IHVzZSBERUNSRUYgaGVyZSwgaXQgd291bGQKLSAgICAgKiBjYXVzZSBhIHJlY3Vyc2l2ZSBjYWxsLgotICAgICAqLwotICAgIGFzc2VydChzZWxmLT5vYl9yZWZjbnQgPiAwKTsKLSAgICBpZiAoLS1zZWxmLT5vYl9yZWZjbnQgPT0gMCkKLSAgICAgICAgcmV0dXJuOyAvKiB0aGlzIGlzIHRoZSBub3JtYWwgcGF0aCBvdXQgKi8KLQotICAgIC8qIGNsb3NlKCkgcmVzdXJyZWN0ZWQgaXQhICBNYWtlIGl0IGxvb2sgbGlrZSB0aGUgb3JpZ2luYWwgUHlfREVDUkVGCi0gICAgICogbmV2ZXIgaGFwcGVuZWQuCi0gICAgICovCi0gICAgewotICAgICAgICBQeV9zc2l6ZV90IHJlZmNudCA9IHNlbGYtPm9iX3JlZmNudDsKLSAgICAgICAgX1B5X05ld1JlZmVyZW5jZShzZWxmKTsKLSAgICAgICAgc2VsZi0+b2JfcmVmY250ID0gcmVmY250OwotICAgIH0KLSAgICBhc3NlcnQoUHlUeXBlX0lTX0dDKFB5X1RZUEUoc2VsZikpICYmCi0gICAgICAgICAgIF9QeV9BU19HQyhzZWxmKS0+Z2MuZ2NfcmVmcyAhPSBfUHlHQ19SRUZTX1VOVFJBQ0tFRCk7Ci0KLSAgICAvKiBJZiBQeV9SRUZfREVCVUcsIF9QeV9OZXdSZWZlcmVuY2UgYnVtcGVkIF9QeV9SZWZUb3RhbCwgc28KLSAgICAgKiB3ZSBuZWVkIHRvIHVuZG8gdGhhdC4gKi8KLSAgICBfUHlfREVDX1JFRlRPVEFMOwotICAgIC8qIElmIFB5X1RSQUNFX1JFRlMsIF9QeV9OZXdSZWZlcmVuY2UgcmUtYWRkZWQgc2VsZiB0byB0aGUgb2JqZWN0Ci0gICAgICogY2hhaW4sIHNvIG5vIG1vcmUgdG8gZG8gdGhlcmUuCi0gICAgICogSWYgQ09VTlRfQUxMT0NTLCB0aGUgb3JpZ2luYWwgZGVjcmVmIGJ1bXBlZCB0cF9mcmVlcywgYW5kCi0gICAgICogX1B5X05ld1JlZmVyZW5jZSBidW1wZWQgdHBfYWxsb2NzOiAgYm90aCBvZiB0aG9zZSBuZWVkIHRvIGJlCi0gICAgICogdW5kb25lLgotICAgICAqLwotI2lmZGVmIENPVU5UX0FMTE9DUwotICAgIC0tKFB5X1RZUEUoc2VsZiktPnRwX2ZyZWVzKTsKLSAgICAtLShQeV9UWVBFKHNlbGYpLT50cF9hbGxvY3MpOwotI2VuZGlmCi19Ci0KLQogCiBQeURvY19TVFJWQVIodGhyb3dfZG9jLAogInRocm93KHR5cFssdmFsWyx0Yl1dKSAtPiByYWlzZSBleGNlcHRpb24gaW4gZ2VuZXJhdG9yLFxuXApAQCAtNDQwLDEzICszOTYsMjkgQEAKIAogICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX1N0b3BJdGVyYXRpb24pKSB7CiAgICAgICAgIFB5RXJyX0ZldGNoKCZldCwgJmV2LCAmdGIpOworICAgICAgICBpZiAoZXYpIHsKKyAgICAgICAgICAgIC8qIGV4Y2VwdGlvbiB3aWxsIHVzdWFsbHkgYmUgbm9ybWFsaXNlZCBhbHJlYWR5ICovCisgICAgICAgICAgICBpZiAoUHlPYmplY3RfVHlwZUNoZWNrKGV2LCAoUHlUeXBlT2JqZWN0ICopIGV0KSkgeworICAgICAgICAgICAgICAgIHZhbHVlID0gKChQeVN0b3BJdGVyYXRpb25PYmplY3QgKilldiktPnZhbHVlOworICAgICAgICAgICAgICAgIFB5X0lOQ1JFRih2YWx1ZSk7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGV2KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoZXQgPT0gUHlFeGNfU3RvcEl0ZXJhdGlvbikgeworICAgICAgICAgICAgICAgIC8qIGF2b2lkIG5vcm1hbGlzYXRpb24gYW5kIHRha2UgZXYgYXMgdmFsdWUgKi8KKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGV2OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvKiBub3JtYWxpc2F0aW9uIHJlcXVpcmVkICovCisgICAgICAgICAgICAgICAgUHlFcnJfTm9ybWFsaXplRXhjZXB0aW9uKCZldCwgJmV2LCAmdGIpOworICAgICAgICAgICAgICAgIGlmICghUHlPYmplY3RfVHlwZUNoZWNrKGV2LCAoUHlUeXBlT2JqZWN0ICopUHlFeGNfU3RvcEl0ZXJhdGlvbikpIHsKKyAgICAgICAgICAgICAgICAgICAgUHlFcnJfUmVzdG9yZShldCwgZXYsIHRiKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB2YWx1ZSA9ICgoUHlTdG9wSXRlcmF0aW9uT2JqZWN0ICopZXYpLT52YWx1ZTsKKyAgICAgICAgICAgICAgICBQeV9JTkNSRUYodmFsdWUpOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihldik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICAgICAgUHlfWERFQ1JFRihldCk7CiAgICAgICAgIFB5X1hERUNSRUYodGIpOwotICAgICAgICBpZiAoZXYpIHsKLSAgICAgICAgICAgIHZhbHVlID0gKChQeVN0b3BJdGVyYXRpb25PYmplY3QgKilldiktPnZhbHVlOwotICAgICAgICAgICAgUHlfSU5DUkVGKHZhbHVlKTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihldik7Ci0gICAgICAgIH0KICAgICB9IGVsc2UgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KQEAgLTUyMCw3ICs0OTIsOCBAQAogICAgIFB5T2JqZWN0X0dlbmVyaWNHZXRBdHRyLCAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0YXR0cm8gKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3NldGF0dHJvICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19idWZmZXIgKi8KLSAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0hBVkVfR0MsLyogdHBfZmxhZ3MgKi8KKyAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0hBVkVfR0MgfAorICAgICAgICBQeV9UUEZMQUdTX0hBVkVfRklOQUxJWkUsICAgICAgICAgICAgICAgLyogdHBfZmxhZ3MgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RvYyAqLwogICAgICh0cmF2ZXJzZXByb2MpZ2VuX3RyYXZlcnNlLCAgICAgICAgICAgICAgICAgLyogdHBfdHJhdmVyc2UgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NsZWFyICovCkBAIC01NDcsNyArNTIwLDkgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NhY2hlICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zdWJjbGFzc2VzICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdCAqLwotICAgIGdlbl9kZWwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVsICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZWwgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3ZlcnNpb25fdGFnICovCisgICAgX1B5R2VuX0ZpbmFsaXplLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9maW5hbGl6ZSAqLwogfTsKIAogUHlPYmplY3QgKgpAQCAtNTU5LDYgKzUzNCw3IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBnZW4tPmdpX2ZyYW1lID0gZjsKKyAgICBmLT5mX2dlbiA9IChQeU9iamVjdCAqKSBnZW47CiAgICAgUHlfSU5DUkVGKGYtPmZfY29kZSk7CiAgICAgZ2VuLT5naV9jb2RlID0gKFB5T2JqZWN0ICopKGYtPmZfY29kZSk7CiAgICAgZ2VuLT5naV9ydW5uaW5nID0gMDsKZGlmZiAtLWdpdCBhL09iamVjdHMvaXRlcm9iamVjdC5jIGIvT2JqZWN0cy9pdGVyb2JqZWN0LmMKaW5kZXggM2NmYmVhZi4uMzA0N2Q2YiAxMDA2NDQKLS0tIGEvT2JqZWN0cy9pdGVyb2JqZWN0LmMKKysrIGIvT2JqZWN0cy9pdGVyb2JqZWN0LmMKQEAgLTQsNyArNCw3IEBACiAKIHR5cGVkZWYgc3RydWN0IHsKICAgICBQeU9iamVjdF9IRUFECi0gICAgbG9uZyAgICAgIGl0X2luZGV4OworICAgIFB5X3NzaXplX3QgaXRfaW5kZXg7CiAgICAgUHlPYmplY3QgKml0X3NlcTsgLyogU2V0IHRvIE5VTEwgd2hlbiBpdGVyYXRvciBpcyBleGhhdXN0ZWQgKi8KIH0gc2VxaXRlcm9iamVjdDsKIApAQCAtNTQsNiArNTQsMTEgQEAKICAgICBzZXEgPSBpdC0+aXRfc2VxOwogICAgIGlmIChzZXEgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKGl0LT5pdF9pbmRleCA9PSBQWV9TU0laRV9UX01BWCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJpdGVyIGluZGV4IHRvbyBsYXJnZSIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAKICAgICByZXN1bHQgPSBQeVNlcXVlbmNlX0dldEl0ZW0oc2VxLCBpdC0+aXRfaW5kZXgpOwogICAgIGlmIChyZXN1bHQgIT0gTlVMTCkgewpAQCAtNzYsOSArODEsMTQgQEAKICAgICBQeV9zc2l6ZV90IHNlcXNpemUsIGxlbjsKIAogICAgIGlmIChpdC0+aXRfc2VxKSB7Ci0gICAgICAgIHNlcXNpemUgPSBQeVNlcXVlbmNlX1NpemUoaXQtPml0X3NlcSk7Ci0gICAgICAgIGlmIChzZXFzaXplID09IC0xKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGlmIChfUHlPYmplY3RfSGFzTGVuKGl0LT5pdF9zZXEpKSB7CisgICAgICAgICAgICBzZXFzaXplID0gUHlTZXF1ZW5jZV9TaXplKGl0LT5pdF9zZXEpOworICAgICAgICAgICAgaWYgKHNlcXNpemUgPT0gLTEpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBQeV9SRVRVUk5fTk9USU1QTEVNRU5URUQ7CisgICAgICAgIH0KICAgICAgICAgbGVuID0gc2Vxc2l6ZSAtIGl0LT5pdF9pbmRleDsKICAgICAgICAgaWYgKGxlbiA+PSAwKQogICAgICAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tU3NpemVfdChsZW4pOwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9saXN0b2JqZWN0LmMgYi9PYmplY3RzL2xpc3RvYmplY3QuYwppbmRleCAyOTdlZGYxLi4xOTk2N2NhIDEwMDY0NAotLS0gYS9PYmplY3RzL2xpc3RvYmplY3QuYworKysgYi9PYmplY3RzL2xpc3RvYmplY3QuYwpAQCAtMjEzLDExICsyMTMsMTEgQEAKIH0KIAogaW50Ci1QeUxpc3RfU2V0SXRlbShyZWdpc3RlciBQeU9iamVjdCAqb3AsIHJlZ2lzdGVyIFB5X3NzaXplX3QgaSwKLSAgICAgICAgICAgICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICpuZXdpdGVtKQorUHlMaXN0X1NldEl0ZW0oUHlPYmplY3QgKm9wLCBQeV9zc2l6ZV90IGksCisgICAgICAgICAgICAgICBQeU9iamVjdCAqbmV3aXRlbSkKIHsKLSAgICByZWdpc3RlciBQeU9iamVjdCAqb2xkaXRlbTsKLSAgICByZWdpc3RlciBQeU9iamVjdCAqKnA7CisgICAgUHlPYmplY3QgKm9sZGl0ZW07CisgICAgUHlPYmplY3QgKipwOwogICAgIGlmICghUHlMaXN0X0NoZWNrKG9wKSkgewogICAgICAgICBQeV9YREVDUkVGKG5ld2l0ZW0pOwogICAgICAgICBQeUVycl9CYWRJbnRlcm5hbENhbGwoKTsKQEAgLTMzOCw1NyArMzM4LDU3IEBACiBsaXN0X3JlcHIoUHlMaXN0T2JqZWN0ICp2KQogewogICAgIFB5X3NzaXplX3QgaTsKLSAgICBQeU9iamVjdCAqcyA9IE5VTEw7Ci0gICAgX1B5QWNjdSBhY2M7Ci0gICAgc3RhdGljIFB5T2JqZWN0ICpzZXAgPSBOVUxMOworICAgIFB5T2JqZWN0ICpzOworICAgIF9QeVVuaWNvZGVXcml0ZXIgd3JpdGVyOwogCiAgICAgaWYgKFB5X1NJWkUodikgPT0gMCkgewogICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmcoIltdIik7CiAgICAgfQogCi0gICAgaWYgKHNlcCA9PSBOVUxMKSB7Ci0gICAgICAgIHNlcCA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCIsICIpOwotICAgICAgICBpZiAoc2VwID09IE5VTEwpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KICAgICBpID0gUHlfUmVwckVudGVyKChQeU9iamVjdCopdik7CiAgICAgaWYgKGkgIT0gMCkgewogICAgICAgICByZXR1cm4gaSA+IDAgPyBQeVVuaWNvZGVfRnJvbVN0cmluZygiWy4uLl0iKSA6IE5VTEw7CiAgICAgfQogCi0gICAgaWYgKF9QeUFjY3VfSW5pdCgmYWNjKSkKLSAgICAgICAgZ290byBlcnJvcjsKKyAgICBfUHlVbmljb2RlV3JpdGVyX0luaXQoJndyaXRlcik7CisgICAgd3JpdGVyLm92ZXJhbGxvY2F0ZSA9IDE7CisgICAgLyogIlsiICsgIjEiICsgIiwgMiIgKiAobGVuIC0gMSkgKyAiXSIgKi8KKyAgICB3cml0ZXIubWluX2xlbmd0aCA9IDEgKyAxICsgKDIgKyAxKSAqIChQeV9TSVpFKHYpIC0gMSkgKyAxOwogCi0gICAgcyA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCJbIik7Ci0gICAgaWYgKHMgPT0gTlVMTCB8fCBfUHlBY2N1X0FjY3VtdWxhdGUoJmFjYywgcykpCisgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVDaGFyKCZ3cml0ZXIsICdbJykgPCAwKQogICAgICAgICBnb3RvIGVycm9yOwotICAgIFB5X0NMRUFSKHMpOwogCiAgICAgLyogRG8gcmVwcigpIG9uIGVhY2ggZWxlbWVudC4gIE5vdGUgdGhhdCB0aGlzIG1heSBtdXRhdGUgdGhlIGxpc3QsCiAgICAgICAgc28gbXVzdCByZWZldGNoIHRoZSBsaXN0IHNpemUgb24gZWFjaCBpdGVyYXRpb24uICovCiAgICAgZm9yIChpID0gMDsgaSA8IFB5X1NJWkUodik7ICsraSkgeworICAgICAgICBpZiAoaSA+IDApIHsKKyAgICAgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQVNDSUlTdHJpbmcoJndyaXRlciwgIiwgIiwgMikgPCAwKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KKwogICAgICAgICBpZiAoUHlfRW50ZXJSZWN1cnNpdmVDYWxsKCIgd2hpbGUgZ2V0dGluZyB0aGUgcmVwciBvZiBhIGxpc3QiKSkKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgIHMgPSBQeU9iamVjdF9SZXByKHYtPm9iX2l0ZW1baV0pOwogICAgICAgICBQeV9MZWF2ZVJlY3Vyc2l2ZUNhbGwoKTsKLSAgICAgICAgaWYgKGkgPiAwICYmIF9QeUFjY3VfQWNjdW11bGF0ZSgmYWNjLCBzZXApKQorICAgICAgICBpZiAocyA9PSBOVUxMKQogICAgICAgICAgICAgZ290byBlcnJvcjsKLSAgICAgICAgaWYgKHMgPT0gTlVMTCB8fCBfUHlBY2N1X0FjY3VtdWxhdGUoJmFjYywgcykpCisKKyAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVTdHIoJndyaXRlciwgcykgPCAwKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYocyk7CiAgICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICBQeV9DTEVBUihzKTsKKyAgICAgICAgfQorICAgICAgICBQeV9ERUNSRUYocyk7CiAgICAgfQotICAgIHMgPSBQeVVuaWNvZGVfRnJvbVN0cmluZygiXSIpOwotICAgIGlmIChzID09IE5VTEwgfHwgX1B5QWNjdV9BY2N1bXVsYXRlKCZhY2MsIHMpKQorCisgICAgd3JpdGVyLm92ZXJhbGxvY2F0ZSA9IDA7CisgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVDaGFyKCZ3cml0ZXIsICddJykgPCAwKQogICAgICAgICBnb3RvIGVycm9yOwotICAgIFB5X0NMRUFSKHMpOwogCiAgICAgUHlfUmVwckxlYXZlKChQeU9iamVjdCAqKXYpOwotICAgIHJldHVybiBfUHlBY2N1X0ZpbmlzaCgmYWNjKTsKKyAgICByZXR1cm4gX1B5VW5pY29kZVdyaXRlcl9GaW5pc2goJndyaXRlcik7CiAKIGVycm9yOgotICAgIF9QeUFjY3VfRGVzdHJveSgmYWNjKTsKLSAgICBQeV9YREVDUkVGKHMpOworICAgIF9QeVVuaWNvZGVXcml0ZXJfRGVhbGxvYygmd3JpdGVyKTsKICAgICBQeV9SZXByTGVhdmUoKFB5T2JqZWN0ICopdik7CiAgICAgcmV0dXJuIE5VTEw7CiB9CkBAIC02NDQsOSArNjQ0LDE0IEBACiAgICAgbWVtY3B5KHJlY3ljbGUsICZpdGVtW2lsb3ddLCBzKTsKIAogICAgIGlmIChkIDwgMCkgeyAvKiBEZWxldGUgLWQgaXRlbXMgKi8KLSAgICAgICAgbWVtbW92ZSgmaXRlbVtpaGlnaCtkXSwgJml0ZW1baWhpZ2hdLAotICAgICAgICAgICAgKFB5X1NJWkUoYSkgLSBpaGlnaCkqc2l6ZW9mKFB5T2JqZWN0ICopKTsKLSAgICAgICAgbGlzdF9yZXNpemUoYSwgUHlfU0laRShhKSArIGQpOworICAgICAgICBQeV9zc2l6ZV90IHRhaWw7CisgICAgICAgIHRhaWwgPSAoUHlfU0laRShhKSAtIGloaWdoKSAqIHNpemVvZihQeU9iamVjdCAqKTsKKyAgICAgICAgbWVtbW92ZSgmaXRlbVtpaGlnaCtkXSwgJml0ZW1baWhpZ2hdLCB0YWlsKTsKKyAgICAgICAgaWYgKGxpc3RfcmVzaXplKGEsIFB5X1NJWkUoYSkgKyBkKSA8IDApIHsKKyAgICAgICAgICAgIG1lbW1vdmUoJml0ZW1baWhpZ2hdLCAmaXRlbVtpaGlnaCtkXSwgdGFpbCk7CisgICAgICAgICAgICBtZW1jcHkoJml0ZW1baWxvd10sIHJlY3ljbGUsIHMpOworICAgICAgICAgICAgZ290byBFcnJvcjsKKyAgICAgICAgfQogICAgICAgICBpdGVtID0gYS0+b2JfaXRlbTsKICAgICB9CiAgICAgZWxzZSBpZiAoZCA+IDApIHsgLyogSW5zZXJ0IGQgaXRlbXMgKi8KQEAgLTgyNiw3ICs4MzEsNyBAQAogICAgIGl0ZXJuZXh0ID0gKml0LT5vYl90eXBlLT50cF9pdGVybmV4dDsKIAogICAgIC8qIEd1ZXNzIGEgcmVzdWx0IGxpc3Qgc2l6ZS4gKi8KLSAgICBuID0gX1B5T2JqZWN0X0xlbmd0aEhpbnQoYiwgOCk7CisgICAgbiA9IFB5T2JqZWN0X0xlbmd0aEhpbnQoYiwgOCk7CiAgICAgaWYgKG4gPT0gLTEpIHsKICAgICAgICAgUHlfREVDUkVGKGl0KTsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC04NzEsOCArODc2LDEwIEBACiAgICAgfQogCiAgICAgLyogQ3V0IGJhY2sgcmVzdWx0IGxpc3QgaWYgaW5pdGlhbCBndWVzcyB3YXMgdG9vIGxhcmdlLiAqLwotICAgIGlmIChQeV9TSVpFKHNlbGYpIDwgc2VsZi0+YWxsb2NhdGVkKQotICAgICAgICBsaXN0X3Jlc2l6ZShzZWxmLCBQeV9TSVpFKHNlbGYpKTsgIC8qIHNocmlua2luZyBjYW4ndCBmYWlsICovCisgICAgaWYgKFB5X1NJWkUoc2VsZikgPCBzZWxmLT5hbGxvY2F0ZWQpIHsKKyAgICAgICAgaWYgKGxpc3RfcmVzaXplKHNlbGYsIFB5X1NJWkUoc2VsZikpIDwgMCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQogCiAgICAgUHlfREVDUkVGKGl0KTsKICAgICBQeV9SRVRVUk5fTk9ORTsKQEAgLTkyNSwxNyArOTMyLDE3IEBACiAgICAgdiA9IHNlbGYtPm9iX2l0ZW1baV07CiAgICAgaWYgKGkgPT0gUHlfU0laRShzZWxmKSAtIDEpIHsKICAgICAgICAgc3RhdHVzID0gbGlzdF9yZXNpemUoc2VsZiwgUHlfU0laRShzZWxmKSAtIDEpOwotICAgICAgICBhc3NlcnQoc3RhdHVzID49IDApOwotICAgICAgICByZXR1cm4gdjsgLyogYW5kIHYgbm93IG93bnMgdGhlIHJlZmVyZW5jZSB0aGUgbGlzdCBoYWQgKi8KKyAgICAgICAgaWYgKHN0YXR1cyA+PSAwKQorICAgICAgICAgICAgcmV0dXJuIHY7IC8qIGFuZCB2IG5vdyBvd25zIHRoZSByZWZlcmVuY2UgdGhlIGxpc3QgaGFkICovCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBQeV9JTkNSRUYodik7CiAgICAgc3RhdHVzID0gbGlzdF9hc3Nfc2xpY2Uoc2VsZiwgaSwgaSsxLCAoUHlPYmplY3QgKilOVUxMKTsKLSAgICBhc3NlcnQoc3RhdHVzID49IDApOwotICAgIC8qIFVzZSBzdGF0dXMsIHNvIHRoYXQgaW4gYSByZWxlYXNlIGJ1aWxkIGNvbXBpbGVycyBkb24ndAotICAgICAqIGNvbXBsYWluIGFib3V0IHRoZSB1bnVzZWQgbmFtZS4KLSAgICAgKi8KLSAgICAodm9pZCkgc3RhdHVzOwotCisgICAgaWYgKHN0YXR1cyA8IDApIHsKKyAgICAgICAgUHlfREVDUkVGKHYpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAgICAgcmV0dXJuIHY7CiB9CiAKQEAgLTEwNTEsOSArMTA1OCw5IEBACiBzdGF0aWMgaW50CiBiaW5hcnlzb3J0KHNvcnRzbGljZSBsbywgUHlPYmplY3QgKipoaSwgUHlPYmplY3QgKipzdGFydCkKIHsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGs7Ci0gICAgcmVnaXN0ZXIgUHlPYmplY3QgKipsLCAqKnAsICoqcjsKLSAgICByZWdpc3RlciBQeU9iamVjdCAqcGl2b3Q7CisgICAgUHlfc3NpemVfdCBrOworICAgIFB5T2JqZWN0ICoqbCwgKipwLCAqKnI7CisgICAgUHlPYmplY3QgKnBpdm90OwogCiAgICAgYXNzZXJ0KGxvLmtleXMgPD0gc3RhcnQgJiYgc3RhcnQgPD0gaGkpOwogICAgIC8qIGFzc2VydCBbbG8sIHN0YXJ0KSBpcyBzb3J0ZWQgKi8KQEAgLTE4MjUsNyArMTgzMiw4IEBACiAgICAgYXNzZXJ0KG1zKTsKICAgICB3aGlsZSAobXMtPm4gPiAxKSB7CiAgICAgICAgIFB5X3NzaXplX3QgbiA9IG1zLT5uIC0gMjsKLSAgICAgICAgaWYgKG4gPiAwICYmIHBbbi0xXS5sZW4gPD0gcFtuXS5sZW4gKyBwW24rMV0ubGVuKSB7CisgICAgICAgIGlmICgobiA+IDAgJiYgcFtuLTFdLmxlbiA8PSBwW25dLmxlbiArIHBbbisxXS5sZW4pIHx8CisgICAgICAgICAgICAobiA+IDEgJiYgcFtuLTJdLmxlbiA8PSBwW24tMV0ubGVuICsgcFtuXS5sZW4pKSB7CiAgICAgICAgICAgICBpZiAocFtuLTFdLmxlbiA8IHBbbisxXS5sZW4pCiAgICAgICAgICAgICAgICAgLS1uOwogICAgICAgICAgICAgaWYgKG1lcmdlX2F0KG1zLCBuKSA8IDApCkBAIC0yNDc4LDYgKzI0ODYsNyBAQAogICAgICAgICAgICAgUHlPYmplY3QgKipnYXJiYWdlOwogICAgICAgICAgICAgc2l6ZV90IGN1cjsKICAgICAgICAgICAgIFB5X3NzaXplX3QgaTsKKyAgICAgICAgICAgIGludCByZXM7CiAKICAgICAgICAgICAgIGlmIChzbGljZWxlbmd0aCA8PSAwKQogICAgICAgICAgICAgICAgIHJldHVybiAwOwpAQCAtMjUyOCwxNCArMjUzNywxNCBAQAogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBQeV9TSVpFKHNlbGYpIC09IHNsaWNlbGVuZ3RoOwotICAgICAgICAgICAgbGlzdF9yZXNpemUoc2VsZiwgUHlfU0laRShzZWxmKSk7CisgICAgICAgICAgICByZXMgPSBsaXN0X3Jlc2l6ZShzZWxmLCBQeV9TSVpFKHNlbGYpKTsKIAogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHNsaWNlbGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZ2FyYmFnZVtpXSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBQeU1lbV9GUkVFKGdhcmJhZ2UpOwogCi0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiByZXM7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAvKiBhc3NpZ24gc2xpY2UgKi8KQEAgLTI2NjIsNyArMjY3MSw3IEBACiAKIHR5cGVkZWYgc3RydWN0IHsKICAgICBQeU9iamVjdF9IRUFECi0gICAgbG9uZyBpdF9pbmRleDsKKyAgICBQeV9zc2l6ZV90IGl0X2luZGV4OwogICAgIFB5TGlzdE9iamVjdCAqaXRfc2VxOyAvKiBTZXQgdG8gTlVMTCB3aGVuIGl0ZXJhdG9yIGlzIGV4aGF1c3RlZCAqLwogfSBsaXN0aXRlcm9iamVjdDsKIApAQCAtMjc5OSw3ICsyODA4LDcgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBsaXN0aXRlcl9zZXRzdGF0ZShsaXN0aXRlcm9iamVjdCAqaXQsIFB5T2JqZWN0ICpzdGF0ZSkKIHsKLSAgICBsb25nIGluZGV4ID0gUHlMb25nX0FzTG9uZyhzdGF0ZSk7CisgICAgUHlfc3NpemVfdCBpbmRleCA9IFB5TG9uZ19Bc1NzaXplX3Qoc3RhdGUpOwogICAgIGlmIChpbmRleCA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpZiAoaXQtPml0X3NlcSAhPSBOVUxMKSB7CkBAIC0yOTYyLDcgKzI5NzEsNyBAQAogICAgIGlmIChmb3J3YXJkKSB7CiAgICAgICAgIGxpc3RpdGVyb2JqZWN0ICppdCA9IChsaXN0aXRlcm9iamVjdCAqKV9pdDsKICAgICAgICAgaWYgKGl0LT5pdF9zZXEpCi0gICAgICAgICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiTihPKWwiLCBfUHlPYmplY3RfR2V0QnVpbHRpbigiaXRlciIpLAorICAgICAgICAgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIk4oTyluIiwgX1B5T2JqZWN0X0dldEJ1aWx0aW4oIml0ZXIiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0LT5pdF9zZXEsIGl0LT5pdF9pbmRleCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgbGlzdHJldml0ZXJvYmplY3QgKml0ID0gKGxpc3RyZXZpdGVyb2JqZWN0ICopX2l0OwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9sb25nb2JqZWN0LmMgYi9PYmplY3RzL2xvbmdvYmplY3QuYwppbmRleCAyMjQ1ZWNlLi4zYTY0YjUzIDEwMDY0NAotLS0gYS9PYmplY3RzL2xvbmdvYmplY3QuYworKysgYi9PYmplY3RzL2xvbmdvYmplY3QuYwpAQCAtMTcsNyArMTcsOCBAQAogI2VuZGlmCiAKIC8qIGNvbnZlcnQgYSBQeUxvbmcgb2Ygc2l6ZSAxLCAwIG9yIC0xIHRvIGFuIHNkaWdpdCAqLwotI2RlZmluZSBNRURJVU1fVkFMVUUoeCkgKFB5X1NJWkUoeCkgPCAwID8gLShzZGlnaXQpKHgpLT5vYl9kaWdpdFswXSA6ICAgXAorI2RlZmluZSBNRURJVU1fVkFMVUUoeCkgKGFzc2VydCgtMSA8PSBQeV9TSVpFKHgpICYmIFB5X1NJWkUoeCkgPD0gMSksICAgXAorICAgICAgICAgUHlfU0laRSh4KSA8IDAgPyAtKHNkaWdpdCkoeCktPm9iX2RpZ2l0WzBdIDogICBcCiAgICAgICAgICAgICAgKFB5X1NJWkUoeCkgPT0gMCA/IChzZGlnaXQpMCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgIChzZGlnaXQpKHgpLT5vYl9kaWdpdFswXSkpCiAjZGVmaW5lIEFCUyh4KSAoKHgpIDwgMCA/IC0oeCkgOiAoeCkpCkBAIC03MiwxMSArNzMsMjEgQEAKIAogLyogSWYgYSBmcmVzaGx5LWFsbG9jYXRlZCBpbnQgaXMgYWxyZWFkeSBzaGFyZWQsIGl0IG11c3QKICAgIGJlIGEgc21hbGwgaW50ZWdlciwgc28gbmVnYXRpbmcgaXQgbXVzdCBnbyB0byBQeUxvbmdfRnJvbUxvbmcgKi8KLSNkZWZpbmUgTkVHQVRFKHgpIFwKLSAgICBkbyBpZiAoUHlfUkVGQ05UKHgpID09IDEpIFB5X1NJWkUoeCkgPSAtUHlfU0laRSh4KTsgIFwKLSAgICAgICBlbHNlIHsgUHlPYmplY3QqIHRtcD1QeUxvbmdfRnJvbUxvbmcoLU1FRElVTV9WQUxVRSh4KSk7ICBcCi0gICAgICAgICAgIFB5X0RFQ1JFRih4KTsgKHgpID0gKFB5TG9uZ09iamVjdCopdG1wOyB9ICAgICAgICAgICAgICAgXAotICAgIHdoaWxlKDApCitQeV9MT0NBTF9JTkxJTkUodm9pZCkKK19QeUxvbmdfTmVnYXRlKFB5TG9uZ09iamVjdCAqKnhfcCkKK3sKKyAgICBQeUxvbmdPYmplY3QgKng7CisKKyAgICB4ID0gKFB5TG9uZ09iamVjdCAqKSp4X3A7CisgICAgaWYgKFB5X1JFRkNOVCh4KSA9PSAxKSB7CisgICAgICAgIFB5X1NJWkUoeCkgPSAtUHlfU0laRSh4KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgICp4X3AgPSAoUHlMb25nT2JqZWN0ICopUHlMb25nX0Zyb21Mb25nKC1NRURJVU1fVkFMVUUoeCkpOworICAgIFB5X0RFQ1JFRih4KTsKK30KKwogLyogRm9yIGludCBtdWx0aXBsaWNhdGlvbiwgdXNlIHRoZSBPKE4qKjIpIHNjaG9vbCBhbGdvcml0aG0gdW5sZXNzCiAgKiBib3RoIG9wZXJhbmRzIGNvbnRhaW4gbW9yZSB0aGFuIEtBUkFUU1VCQV9DVVRPRkYgZGlnaXRzICh0aGlzCiAgKiBiZWluZyBhbiBpbnRlcm5hbCBQeXRob24gaW50IGRpZ2l0LCBpbiBiYXNlIEJBU0UpLgpAQCAtOTEsMTEgKzEwMiw2IEBACiAgKi8KICNkZWZpbmUgRklWRUFSWV9DVVRPRkYgOAogCi0jdW5kZWYgTUlOCi0jdW5kZWYgTUFYCi0jZGVmaW5lIE1BWCh4LCB5KSAoKHgpIDwgKHkpID8gKHkpIDogKHgpKQotI2RlZmluZSBNSU4oeCwgeSkgKCh4KSA+ICh5KSA/ICh5KSA6ICh4KSkKLQogI2RlZmluZSBTSUdDSEVDSyhQeVRyeUJsb2NrKSAgICAgICAgICAgICAgICAgICAgXAogICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBpZiAoUHlFcnJfQ2hlY2tTaWduYWxzKCkpIFB5VHJ5QmxvY2sgICAgXApAQCAtMTA2LDcgKzExMiw3IEBACiAgICBvZiB0aGUgYWxnb3JpdGhtcyB1c2VkLCB0aGlzIGNvdWxkIHNhdmUgYXQgbW9zdCBiZSBvbmUgd29yZCBhbnl3YXkuICovCiAKIHN0YXRpYyBQeUxvbmdPYmplY3QgKgotbG9uZ19ub3JtYWxpemUocmVnaXN0ZXIgUHlMb25nT2JqZWN0ICp2KQorbG9uZ19ub3JtYWxpemUoUHlMb25nT2JqZWN0ICp2KQogewogICAgIFB5X3NzaXplX3QgaiA9IEFCUyhQeV9TSVpFKHYpKTsKICAgICBQeV9zc2l6ZV90IGkgPSBqOwpAQCAtMTU1LDYgKzE2MSwxNSBAQAogICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQorICAgIC8qIElzc3VlICMxNzU3Njogd2FybiBpZiAncmVzdWx0JyBub3Qgb2YgZXhhY3QgdHlwZSBpbnQuICovCisgICAgaWYgKFB5RXJyX1dhcm5Gb3JtYXQoUHlFeGNfRGVwcmVjYXRpb25XYXJuaW5nLCAxLAorICAgICAgICAgICAgIl9faW50X18gcmV0dXJuZWQgbm9uLWludCAodHlwZSAlLjIwMHMpLiAgIgorICAgICAgICAgICAgIlRoZSBhYmlsaXR5IHRvIHJldHVybiBhbiBpbnN0YW5jZSBvZiBhIHN0cmljdCBzdWJjbGFzcyBvZiBpbnQgIgorICAgICAgICAgICAgImlzIGRlcHJlY2F0ZWQsIGFuZCBtYXkgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uIG9mIFB5dGhvbi4iLAorICAgICAgICAgICAgcmVzdWx0LT5vYl90eXBlLT50cF9uYW1lKSkgeworICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogICAgIHJldHVybiAoUHlMb25nT2JqZWN0ICopcmVzdWx0OwogfQogCkBAIC0zNzcsNyArMzkyLDcgQEAKIFB5TG9uZ19Bc0xvbmdBbmRPdmVyZmxvdyhQeU9iamVjdCAqdnYsIGludCAqb3ZlcmZsb3cpCiB7CiAgICAgLyogVGhpcyB2ZXJzaW9uIGJ5IFRpbSBQZXRlcnMgKi8KLSAgICByZWdpc3RlciBQeUxvbmdPYmplY3QgKnY7CisgICAgUHlMb25nT2JqZWN0ICp2OwogICAgIHVuc2lnbmVkIGxvbmcgeCwgcHJldjsKICAgICBsb25nIHJlczsKICAgICBQeV9zc2l6ZV90IGk7CkBAIC00ODksNyArNTA0LDcgQEAKIAogUHlfc3NpemVfdAogUHlMb25nX0FzU3NpemVfdChQeU9iamVjdCAqdnYpIHsKLSAgICByZWdpc3RlciBQeUxvbmdPYmplY3QgKnY7CisgICAgUHlMb25nT2JqZWN0ICp2OwogICAgIHNpemVfdCB4LCBwcmV2OwogICAgIFB5X3NzaXplX3QgaTsKICAgICBpbnQgc2lnbjsKQEAgLTU0NSw3ICs1NjAsNyBAQAogdW5zaWduZWQgbG9uZwogUHlMb25nX0FzVW5zaWduZWRMb25nKFB5T2JqZWN0ICp2dikKIHsKLSAgICByZWdpc3RlciBQeUxvbmdPYmplY3QgKnY7CisgICAgUHlMb25nT2JqZWN0ICp2OwogICAgIHVuc2lnbmVkIGxvbmcgeCwgcHJldjsKICAgICBQeV9zc2l6ZV90IGk7CiAKQEAgLTU3NSw3ICs1OTAsNyBAQAogICAgICAgICB4ID0gKHggPDwgUHlMb25nX1NISUZUKSB8IHYtPm9iX2RpZ2l0W2ldOwogICAgICAgICBpZiAoKHggPj4gUHlMb25nX1NISUZUKSAhPSBwcmV2KSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHl0aG9uIGludCB0b28gbGFyZ2UgdG8gY29udmVydCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlB5dGhvbiBpbnQgdG9vIGxhcmdlIHRvIGNvbnZlcnQgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0byBDIHVuc2lnbmVkIGxvbmciKTsKICAgICAgICAgICAgIHJldHVybiAodW5zaWduZWQgbG9uZykgLTE7CiAgICAgICAgIH0KQEAgLTU4OSw3ICs2MDQsNyBAQAogc2l6ZV90CiBQeUxvbmdfQXNTaXplX3QoUHlPYmplY3QgKnZ2KQogewotICAgIHJlZ2lzdGVyIFB5TG9uZ09iamVjdCAqdjsKKyAgICBQeUxvbmdPYmplY3QgKnY7CiAgICAgc2l6ZV90IHgsIHByZXY7CiAgICAgUHlfc3NpemVfdCBpOwogCkBAIC02MzIsNyArNjQ3LDcgQEAKIHN0YXRpYyB1bnNpZ25lZCBsb25nCiBfUHlMb25nX0FzVW5zaWduZWRMb25nTWFzayhQeU9iamVjdCAqdnYpCiB7Ci0gICAgcmVnaXN0ZXIgUHlMb25nT2JqZWN0ICp2OworICAgIFB5TG9uZ09iamVjdCAqdjsKICAgICB1bnNpZ25lZCBsb25nIHg7CiAgICAgUHlfc3NpemVfdCBpOwogICAgIGludCBzaWduOwpAQCAtNjYwLDcgKzY3NSw3IEBACiB9CiAKIHVuc2lnbmVkIGxvbmcKLVB5TG9uZ19Bc1Vuc2lnbmVkTG9uZ01hc2socmVnaXN0ZXIgUHlPYmplY3QgKm9wKQorUHlMb25nX0FzVW5zaWduZWRMb25nTWFzayhQeU9iamVjdCAqb3ApCiB7CiAgICAgUHlMb25nT2JqZWN0ICpsbzsKICAgICB1bnNpZ25lZCBsb25nIHZhbDsKQEAgLTk3NSw5ICs5OTAsNiBAQAogUHlMb25nX0Zyb21Wb2lkUHRyKHZvaWQgKnApCiB7CiAjaWYgU0laRU9GX1ZPSURfUCA8PSBTSVpFT0ZfTE9ORwotICAgIC8qIHNwZWNpYWwtY2FzZSBudWxsIHBvaW50ZXIgKi8KLSAgICBpZiAoIXApCi0gICAgICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoMCk7CiAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nKCh1bnNpZ25lZCBsb25nKShQeV91aW50cHRyX3QpcCk7CiAjZWxzZQogCkBAIC05ODcsOSArOTk5LDYgQEAKICNpZiBTSVpFT0ZfTE9OR19MT05HIDwgU0laRU9GX1ZPSURfUAogIyAgIGVycm9yICJQeUxvbmdfRnJvbVZvaWRQdHI6IHNpemVvZihQWV9MT05HX0xPTkcpIDwgc2l6ZW9mKHZvaWQqKSIKICNlbmRpZgotICAgIC8qIHNwZWNpYWwtY2FzZSBudWxsIHBvaW50ZXIgKi8KLSAgICBpZiAoIXApCi0gICAgICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoMCk7CiAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nTG9uZygodW5zaWduZWQgUFlfTE9OR19MT05HKShQeV91aW50cHRyX3QpcCk7CiAjZW5kaWYgLyogU0laRU9GX1ZPSURfUCA8PSBTSVpFT0ZfTE9ORyAqLwogCkBAIC0xMDM1LDcgKzEwNDQsNiBAQAogICogcmV3cml0dGVuIHRvIHVzZSB0aGUgbmV3ZXIgUHlMb25nX3tBcyxGcm9tfUJ5dGVBcnJheSBBUEkuCiAgKi8KIAotI2RlZmluZSBJU19MSVRUTEVfRU5ESUFOIChpbnQpKih1bnNpZ25lZCBjaGFyKikmb25lCiAjZGVmaW5lIFBZX0FCU19MTE9OR19NSU4gKDAtKHVuc2lnbmVkIFBZX0xPTkdfTE9ORylQWV9MTE9OR19NSU4pCiAKIC8qIENyZWF0ZSBhIG5ldyBpbnQgb2JqZWN0IGZyb20gYSBDIFBZX0xPTkdfTE9ORyBpbnQuICovCkBAIC0xMTg4LDcgKzExOTYsNiBAQAogewogICAgIFB5TG9uZ09iamVjdCAqdjsKICAgICBQWV9MT05HX0xPTkcgYnl0ZXM7Ci0gICAgaW50IG9uZSA9IDE7CiAgICAgaW50IHJlczsKICAgICBpbnQgZG9fZGVjcmVmID0gMDsgLyogaWYgbmJfaW50IHdhcyBjYWxsZWQgKi8KIApAQCAtMTIyMCw3ICsxMjI3LDcgQEAKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgcmVzID0gX1B5TG9uZ19Bc0J5dGVBcnJheSgoUHlMb25nT2JqZWN0ICopdiwgKHVuc2lnbmVkIGNoYXIgKikmYnl0ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0laRU9GX0xPTkdfTE9ORywgSVNfTElUVExFX0VORElBTiwgMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0laRU9GX0xPTkdfTE9ORywgUFlfTElUVExFX0VORElBTiwgMSk7CiAgICAgfQogICAgIGlmIChkb19kZWNyZWYpIHsKICAgICAgICAgUHlfREVDUkVGKHYpOwpAQCAtMTI0MSw3ICsxMjQ4LDYgQEAKIHsKICAgICBQeUxvbmdPYmplY3QgKnY7CiAgICAgdW5zaWduZWQgUFlfTE9OR19MT05HIGJ5dGVzOwotICAgIGludCBvbmUgPSAxOwogICAgIGludCByZXM7CiAKICAgICBpZiAodnYgPT0gTlVMTCkgewpAQCAtMTI2MCw3ICsxMjY2LDcgQEAKICAgICB9CiAKICAgICByZXMgPSBfUHlMb25nX0FzQnl0ZUFycmF5KChQeUxvbmdPYmplY3QgKil2diwgKHVuc2lnbmVkIGNoYXIgKikmYnl0ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTSVpFT0ZfTE9OR19MT05HLCBJU19MSVRUTEVfRU5ESUFOLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNJWkVPRl9MT05HX0xPTkcsIFBZX0xJVFRMRV9FTkRJQU4sIDApOwogCiAgICAgLyogUGxhbiA5IGNhbid0IGhhbmRsZSBQWV9MT05HX0xPTkcgaW4gPyA6IGV4cHJlc3Npb25zICovCiAgICAgaWYgKHJlcyA8IDApCkBAIC0xMjc1LDcgKzEyODEsNyBAQAogc3RhdGljIHVuc2lnbmVkIFBZX0xPTkdfTE9ORwogX1B5TG9uZ19Bc1Vuc2lnbmVkTG9uZ0xvbmdNYXNrKFB5T2JqZWN0ICp2dikKIHsKLSAgICByZWdpc3RlciBQeUxvbmdPYmplY3QgKnY7CisgICAgUHlMb25nT2JqZWN0ICp2OwogICAgIHVuc2lnbmVkIFBZX0xPTkdfTE9ORyB4OwogICAgIFB5X3NzaXplX3QgaTsKICAgICBpbnQgc2lnbjsKQEAgLTEzMDMsNyArMTMwOSw3IEBACiB9CiAKIHVuc2lnbmVkIFBZX0xPTkdfTE9ORwotUHlMb25nX0FzVW5zaWduZWRMb25nTG9uZ01hc2socmVnaXN0ZXIgUHlPYmplY3QgKm9wKQorUHlMb25nX0FzVW5zaWduZWRMb25nTG9uZ01hc2soUHlPYmplY3QgKm9wKQogewogICAgIFB5TG9uZ09iamVjdCAqbG87CiAgICAgdW5zaWduZWQgUFlfTE9OR19MT05HIHZhbDsKQEAgLTEzMjUsNyArMTMzMSw2IEBACiAgICAgUHlfREVDUkVGKGxvKTsKICAgICByZXR1cm4gdmFsOwogfQotI3VuZGVmIElTX0xJVFRMRV9FTkRJQU4KIAogLyogR2V0IGEgQyBsb25nIGxvbmcgaW50IGZyb20gYW4gaW50IG9iamVjdCBvciBhbnkgb2JqZWN0IHRoYXQgaGFzIGFuCiAgICBfX2ludF9fIG1ldGhvZC4KQEAgLTEzNDEsNyArMTM0Niw3IEBACiBQeUxvbmdfQXNMb25nTG9uZ0FuZE92ZXJmbG93KFB5T2JqZWN0ICp2diwgaW50ICpvdmVyZmxvdykKIHsKICAgICAvKiBUaGlzIHZlcnNpb24gYnkgVGltIFBldGVycyAqLwotICAgIHJlZ2lzdGVyIFB5TG9uZ09iamVjdCAqdjsKKyAgICBQeUxvbmdPYmplY3QgKnY7CiAgICAgdW5zaWduZWQgUFlfTE9OR19MT05HIHgsIHByZXY7CiAgICAgUFlfTE9OR19MT05HIHJlczsKICAgICBQeV9zc2l6ZV90IGk7CkBAIC0xNjA2LDcgKzE2MTEsNyBAQAogICAgICovCiAgICAgaWYgKHNpemVfYSA+IFBZX1NTSVpFX1RfTUFYIC8gUHlMb25nX1NISUZUKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgImxvbmcgaXMgdG9vIGxhcmdlIHRvIGZvcm1hdCIpOworICAgICAgICAgICAgICAgICAgICAgICAgImludCB0b28gbGFyZ2UgdG8gZm9ybWF0Iik7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAgICAgLyogdGhlIGV4cHJlc3Npb24gc2l6ZV9hICogUHlMb25nX1NISUZUIGlzIG5vdyBzYWZlIGZyb20gb3ZlcmZsb3cgKi8KQEAgLTE2NzYsNyArMTY4MSw2IEBACiAgICAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgcCA9IChUWVBFKilQeVVuaWNvZGVfREFUQShzdHIpICsgc3RybGVuOyAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICpwID0gJ1wwJzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAvKiBwb3V0WzBdIHRocm91Z2ggcG91dFtzaXplLTJdIGNvbnRyaWJ1dGUgZXhhY3RseSAgICAgICAgICAgIFwKICAgICAgICAgICAgX1B5TG9uZ19ERUNJTUFMX1NISUZUIGRpZ2l0cyBlYWNoICovICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIGZvciAoaT0wOyBpIDwgc2l6ZSAtIDE7IGkrKykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtMTc0OSw3ICsxNzUzLDcgQEAKIGxvbmdfZm9ybWF0X2JpbmFyeShQeU9iamVjdCAqYWEsIGludCBiYXNlLCBpbnQgYWx0ZXJuYXRlLAogICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICoqcF9vdXRwdXQsIF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlcikKIHsKLSAgICByZWdpc3RlciBQeUxvbmdPYmplY3QgKmEgPSAoUHlMb25nT2JqZWN0ICopYWE7CisgICAgUHlMb25nT2JqZWN0ICphID0gKFB5TG9uZ09iamVjdCAqKWFhOwogICAgIFB5T2JqZWN0ICp2OwogICAgIFB5X3NzaXplX3Qgc3o7CiAgICAgUHlfc3NpemVfdCBzaXplX2E7CkBAIC0xNzkwLDcgKzE3OTQsNyBAQAogICAgICAgICAvKiBFbnN1cmUgb3ZlcmZsb3cgZG9lc24ndCBvY2N1ciBkdXJpbmcgY29tcHV0YXRpb24gb2Ygc3ouICovCiAgICAgICAgIGlmIChzaXplX2EgPiAoUFlfU1NJWkVfVF9NQVggLSAzKSAvIFB5TG9uZ19TSElGVCkgewogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImludCBpcyB0b28gbGFyZ2UgdG8gZm9ybWF0Iik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImludCB0b28gbGFyZ2UgdG8gZm9ybWF0Iik7CiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KICAgICAgICAgc2l6ZV9hX2luX2JpdHMgPSAoc2l6ZV9hIC0gMSkgKiBQeUxvbmdfU0hJRlQgKwpAQCAtMTk0NiwxMCArMTk1MCwxMCBAQAogICogc3RyaW5nIGNoYXJhY3RlcnMuCiAgKi8KIHN0YXRpYyBQeUxvbmdPYmplY3QgKgotbG9uZ19mcm9tX2JpbmFyeV9iYXNlKGNoYXIgKipzdHIsIGludCBiYXNlKQorbG9uZ19mcm9tX2JpbmFyeV9iYXNlKGNvbnN0IGNoYXIgKipzdHIsIGludCBiYXNlKQogewotICAgIGNoYXIgKnAgPSAqc3RyOwotICAgIGNoYXIgKnN0YXJ0ID0gcDsKKyAgICBjb25zdCBjaGFyICpwID0gKnN0cjsKKyAgICBjb25zdCBjaGFyICpzdGFydCA9IHA7CiAgICAgaW50IGJpdHNfcGVyX2NoYXI7CiAgICAgUHlfc3NpemVfdCBuOwogICAgIFB5TG9uZ09iamVjdCAqejsKQEAgLTIwMTQsMTAgKzIwMTgsMTAgQEAKICAqIElmIHVuc3VjY2Vzc2Z1bCwgTlVMTCB3aWxsIGJlIHJldHVybmVkLgogICovCiBQeU9iamVjdCAqCi1QeUxvbmdfRnJvbVN0cmluZyhjaGFyICpzdHIsIGNoYXIgKipwZW5kLCBpbnQgYmFzZSkKK1B5TG9uZ19Gcm9tU3RyaW5nKGNvbnN0IGNoYXIgKnN0ciwgY2hhciAqKnBlbmQsIGludCBiYXNlKQogewogICAgIGludCBzaWduID0gMSwgZXJyb3JfaWZfbm9uemVybyA9IDA7Ci0gICAgY2hhciAqc3RhcnQsICpvcmlnX3N0ciA9IHN0cjsKKyAgICBjb25zdCBjaGFyICpzdGFydCwgKm9yaWdfc3RyID0gc3RyOwogICAgIFB5TG9uZ09iamVjdCAqeiA9IE5VTEw7CiAgICAgUHlPYmplY3QgKnN0cm9iajsKICAgICBQeV9zc2l6ZV90IHNsZW47CkBAIC0yMTQ2LDEzICsyMTUwLDEzIEBACiBqdXN0IDEgZGlnaXQgYXQgdGhlIHN0YXJ0LCBzbyB0aGF0IHRoZSBjb3B5aW5nIGNvZGUgd2FzIGV4ZXJjaXNlZCBmb3IgZXZlcnkKIGRpZ2l0IGJleW9uZCB0aGUgZmlyc3QuCiAqKiovCi0gICAgICAgIHJlZ2lzdGVyIHR3b2RpZ2l0cyBjOyAgICAgICAgICAgLyogY3VycmVudCBpbnB1dCBjaGFyYWN0ZXIgKi8KKyAgICAgICAgdHdvZGlnaXRzIGM7ICAgICAgICAgICAvKiBjdXJyZW50IGlucHV0IGNoYXJhY3RlciAqLwogICAgICAgICBQeV9zc2l6ZV90IHNpemVfejsKICAgICAgICAgaW50IGk7CiAgICAgICAgIGludCBjb252d2lkdGg7CiAgICAgICAgIHR3b2RpZ2l0cyBjb252bXVsdG1heCwgY29udm11bHQ7CiAgICAgICAgIGRpZ2l0ICpweiwgKnB6c3RvcDsKLSAgICAgICAgY2hhciogc2NhbjsKKyAgICAgICAgY29uc3QgY2hhciogc2NhbjsKIAogICAgICAgICBzdGF0aWMgZG91YmxlIGxvZ19iYXNlX0JBU0VbMzddID0gezAuMGUwLH07CiAgICAgICAgIHN0YXRpYyBpbnQgY29udndpZHRoX2Jhc2VbMzddID0gezAsfTsKQEAgLTIyODAsMTkgKzIyODQsMTkgQEAKICAgICBpZiAoeiA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpZiAocGVuZCAhPSBOVUxMKQotICAgICAgICAqcGVuZCA9IHN0cjsKKyAgICAgICAgKnBlbmQgPSAoY2hhciAqKXN0cjsKICAgICByZXR1cm4gKFB5T2JqZWN0ICopIHo7CiAKICAgb25FcnJvcjoKICAgICBpZiAocGVuZCAhPSBOVUxMKQotICAgICAgICAqcGVuZCA9IHN0cjsKKyAgICAgICAgKnBlbmQgPSAoY2hhciAqKXN0cjsKICAgICBQeV9YREVDUkVGKHopOwogICAgIHNsZW4gPSBzdHJsZW4ob3JpZ19zdHIpIDwgMjAwID8gc3RybGVuKG9yaWdfc3RyKSA6IDIwMDsKICAgICBzdHJvYmogPSBQeVVuaWNvZGVfRnJvbVN0cmluZ0FuZFNpemUob3JpZ19zdHIsIHNsZW4pOwogICAgIGlmIChzdHJvYmogPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICJpbnZhbGlkIGxpdGVyYWwgZm9yIGludCgpIHdpdGggYmFzZSAlZDogJVIiLAorICAgICAgICAgICAgICAgICAiaW52YWxpZCBsaXRlcmFsIGZvciBpbnQoKSB3aXRoIGJhc2UgJWQ6ICUuMjAwUiIsCiAgICAgICAgICAgICAgICAgIGJhc2UsIHN0cm9iaik7CiAgICAgUHlfREVDUkVGKHN0cm9iaik7CiAgICAgcmV0dXJuIE5VTEw7CkBAIC0yMzE2LDcgKzIzMjAsNyBAQAogICAgIHN0cm9iaiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUocywgUHlfTUlOKGxlbiwgMjAwKSk7CiAgICAgaWYgKHN0cm9iaiAhPSBOVUxMKSB7CiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgImludmFsaWQgbGl0ZXJhbCBmb3IgaW50KCkgd2l0aCBiYXNlICVkOiAlUiIsCisgICAgICAgICAgICAgICAgICAgICAiaW52YWxpZCBsaXRlcmFsIGZvciBpbnQoKSB3aXRoIGJhc2UgJWQ6ICUuMjAwUiIsCiAgICAgICAgICAgICAgICAgICAgICBiYXNlLCBzdHJvYmopOwogICAgICAgICBQeV9ERUNSRUYoc3Ryb2JqKTsKICAgICB9CkBAIC0yMzM3LDcgKzIzNDEsNyBAQAogUHlPYmplY3QgKgogUHlMb25nX0Zyb21Vbmljb2RlT2JqZWN0KFB5T2JqZWN0ICp1LCBpbnQgYmFzZSkKIHsKLSAgICBQeU9iamVjdCAqcmVzdWx0LCAqYXNjaWlkaWcsICpzdHJvYmo7CisgICAgUHlPYmplY3QgKnJlc3VsdCwgKmFzY2lpZGlnOwogICAgIGNoYXIgKmJ1ZmZlciwgKmVuZCA9IE5VTEw7CiAgICAgUHlfc3NpemVfdCBidWZsZW47CiAKQEAgLTIzNTksMTMgKzIzNjMsOSBAQAogICAgICAgICBQeV9ERUNSRUYoYXNjaWlkaWcpOwogICAgICAgICBQeV9YREVDUkVGKHJlc3VsdCk7CiAgICAgfQotICAgIHN0cm9iaiA9IFB5U2VxdWVuY2VfR2V0U2xpY2UodSwgMCwgMjAwKTsKLSAgICBpZiAoc3Ryb2JqICE9IE5VTEwpIHsKLSAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAiaW52YWxpZCBsaXRlcmFsIGZvciBpbnQoKSB3aXRoIGJhc2UgJWQ6ICVSIiwKLSAgICAgICAgICAgICAgICAgICAgIGJhc2UsIHN0cm9iaik7Ci0gICAgICAgIFB5X0RFQ1JFRihzdHJvYmopOwotICAgIH0KKyAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgImludmFsaWQgbGl0ZXJhbCBmb3IgaW50KCkgd2l0aCBiYXNlICVkOiAlLjIwMFIiLAorICAgICAgICAgICAgICAgICBiYXNlLCB1KTsKICAgICByZXR1cm4gTlVMTDsKIH0KIApAQCAtMjQxOSwxMCArMjQxOSwyMSBAQAogICAgICAgIFRoZSBxdW90aWVudCB6IGhhcyB0aGUgc2lnbiBvZiBhKmI7CiAgICAgICAgdGhlIHJlbWFpbmRlciByIGhhcyB0aGUgc2lnbiBvZiBhLAogICAgICAgIHNvIGEgPSBiKnogKyByLiAqLwotICAgIGlmICgoUHlfU0laRShhKSA8IDApICE9IChQeV9TSVpFKGIpIDwgMCkpCi0gICAgICAgIE5FR0FURSh6KTsKLSAgICBpZiAoUHlfU0laRShhKSA8IDAgJiYgUHlfU0laRSgqcHJlbSkgIT0gMCkKLSAgICAgICAgTkVHQVRFKCpwcmVtKTsKKyAgICBpZiAoKFB5X1NJWkUoYSkgPCAwKSAhPSAoUHlfU0laRShiKSA8IDApKSB7CisgICAgICAgIF9QeUxvbmdfTmVnYXRlKCZ6KTsKKyAgICAgICAgaWYgKHogPT0gTlVMTCkgeworICAgICAgICAgICAgUHlfQ0xFQVIoKnByZW0pOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgfQorICAgIGlmIChQeV9TSVpFKGEpIDwgMCAmJiBQeV9TSVpFKCpwcmVtKSAhPSAwKSB7CisgICAgICAgIF9QeUxvbmdfTmVnYXRlKHByZW0pOworICAgICAgICBpZiAoKnByZW0gPT0gTlVMTCkgeworICAgICAgICAgICAgUHlfREVDUkVGKHopOworICAgICAgICAgICAgUHlfQ0xFQVIoKnByZW0pOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgfQogICAgICpwZGl2ID0gbWF5YmVfc21hbGxfbG9uZyh6KTsKICAgICByZXR1cm4gMDsKIH0KQEAgLTI2OTgsNyArMjcwOSw3IEBACiAgICAgeCA9IF9QeUxvbmdfRnJleHAoKFB5TG9uZ09iamVjdCAqKXYsICZleHBvbmVudCk7CiAgICAgaWYgKCh4ID09IC0xLjAgJiYgUHlFcnJfT2NjdXJyZWQoKSkgfHwgZXhwb25lbnQgPiBEQkxfTUFYX0VYUCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJsb25nIGludCB0b28gbGFyZ2UgdG8gY29udmVydCB0byBmbG9hdCIpOworICAgICAgICAgICAgICAgICAgICAgICAgImludCB0b28gbGFyZ2UgdG8gY29udmVydCB0byBmbG9hdCIpOwogICAgICAgICByZXR1cm4gLTEuMDsKICAgICB9CiAgICAgcmV0dXJuIGxkZXhwKHgsIChpbnQpZXhwb25lbnQpOwpAQCAtMjkxOCw4ICsyOTI5LDExIEBACiAgICAgICAgIGJvcnJvdyAmPSAxOyAvKiBLZWVwIG9ubHkgb25lIHNpZ24gYml0ICovCiAgICAgfQogICAgIGFzc2VydChib3Jyb3cgPT0gMCk7Ci0gICAgaWYgKHNpZ24gPCAwKQotICAgICAgICBORUdBVEUoeik7CisgICAgaWYgKHNpZ24gPCAwKSB7CisgICAgICAgIF9QeUxvbmdfTmVnYXRlKCZ6KTsKKyAgICAgICAgaWYgKHogPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KICAgICByZXR1cm4gbG9uZ19ub3JtYWxpemUoeik7CiB9CiAKQEAgLTMwODYsNyArMzEwMCw3IEBACiAgICAgUHlfc3NpemVfdCBzaXplX2xvLCBzaXplX2hpOwogICAgIGNvbnN0IFB5X3NzaXplX3Qgc2l6ZV9uID0gQUJTKFB5X1NJWkUobikpOwogCi0gICAgc2l6ZV9sbyA9IE1JTihzaXplX24sIHNpemUpOworICAgIHNpemVfbG8gPSBQeV9NSU4oc2l6ZV9uLCBzaXplKTsKICAgICBzaXplX2hpID0gc2l6ZV9uIC0gc2l6ZV9sbzsKIAogICAgIGlmICgoaGkgPSBfUHlMb25nX05ldyhzaXplX2hpKSkgPT0gTlVMTCkKQEAgLTMzNTcsNyArMzM3MSw3IEBACiAgICAgbmJkb25lID0gMDsKICAgICB3aGlsZSAoYnNpemUgPiAwKSB7CiAgICAgICAgIFB5TG9uZ09iamVjdCAqcHJvZHVjdDsKLSAgICAgICAgY29uc3QgUHlfc3NpemVfdCBuYnRvdXNlID0gTUlOKGJzaXplLCBhc2l6ZSk7CisgICAgICAgIGNvbnN0IFB5X3NzaXplX3QgbmJ0b3VzZSA9IFB5X01JTihic2l6ZSwgYXNpemUpOwogCiAgICAgICAgIC8qIE11bHRpcGx5IHRoZSBuZXh0IHNsaWNlIG9mIGIgYnkgYS4gKi8KICAgICAgICAgbWVtY3B5KGJzbGljZS0+b2JfZGlnaXQsIGItPm9iX2RpZ2l0ICsgbmJkb25lLApAQCAtMzQxMCw4ICszNDI0LDExIEBACiAKICAgICB6ID0ga19tdWwoYSwgYik7CiAgICAgLyogTmVnYXRlIGlmIGV4YWN0bHkgb25lIG9mIHRoZSBpbnB1dHMgaXMgbmVnYXRpdmUuICovCi0gICAgaWYgKCgoUHlfU0laRShhKSBeIFB5X1NJWkUoYikpIDwgMCkgJiYgeikKLSAgICAgICAgTkVHQVRFKHopOworICAgIGlmICgoKFB5X1NJWkUoYSkgXiBQeV9TSVpFKGIpKSA8IDApICYmIHopIHsKKyAgICAgICAgX1B5TG9uZ19OZWdhdGUoJnopOworICAgICAgICBpZiAoeiA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogICAgIHJldHVybiAoUHlPYmplY3QgKil6OwogfQogCkBAIC0zNjQ4LDcgKzM2NjUsNyBAQAogICAgICAgICBnb3RvIHVuZGVyZmxvd19vcl96ZXJvOwogCiAgICAgLyogQ2hvb3NlIHZhbHVlIGZvciBzaGlmdDsgc2VlIGNvbW1lbnRzIGZvciBzdGVwIDEgYWJvdmUuICovCi0gICAgc2hpZnQgPSBNQVgoZGlmZiwgREJMX01JTl9FWFApIC0gREJMX01BTlRfRElHIC0gMjsKKyAgICBzaGlmdCA9IFB5X01BWChkaWZmLCBEQkxfTUlOX0VYUCkgLSBEQkxfTUFOVF9ESUcgLSAyOwogCiAgICAgaW5leGFjdCA9IDA7CiAKQEAgLTM3MTksNyArMzczNiw3IEBACiAgICAgeF9iaXRzID0gKHhfc2l6ZS0xKSpQeUxvbmdfU0hJRlQrYml0c19pbl9kaWdpdCh4LT5vYl9kaWdpdFt4X3NpemUtMV0pOwogCiAgICAgLyogVGhlIG51bWJlciBvZiBleHRyYSBiaXRzIHRoYXQgaGF2ZSB0byBiZSByb3VuZGVkIGF3YXkuICovCi0gICAgZXh0cmFfYml0cyA9IE1BWCh4X2JpdHMsIERCTF9NSU5fRVhQIC0gc2hpZnQpIC0gREJMX01BTlRfRElHOworICAgIGV4dHJhX2JpdHMgPSBQeV9NQVgoeF9iaXRzLCBEQkxfTUlOX0VYUCAtIHNoaWZ0KSAtIERCTF9NQU5UX0RJRzsKICAgICBhc3NlcnQoZXh0cmFfYml0cyA9PSAyIHx8IGV4dHJhX2JpdHMgPT0gMyk7CiAKICAgICAvKiBSb3VuZCBieSBkaXJlY3RseSBtb2RpZnlpbmcgdGhlIGxvdyBkaWdpdCBvZiB4LiAqLwpAQCAtMzg1OCw3ICszODc1LDkgQEAKICAgICAgICAgICAgIFB5X0RFQ1JFRihjKTsKICAgICAgICAgICAgIGMgPSB0ZW1wOwogICAgICAgICAgICAgdGVtcCA9IE5VTEw7Ci0gICAgICAgICAgICBORUdBVEUoYyk7CisgICAgICAgICAgICBfUHlMb25nX05lZ2F0ZSgmYyk7CisgICAgICAgICAgICBpZiAoYyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gRXJyb3I7CiAgICAgICAgIH0KIAogICAgICAgICAvKiBpZiBtb2R1bHVzID09IDE6CkBAIC0zOTY0LDEwICszOTgzLDcgQEAKICAgICBnb3RvIERvbmU7CiAKICAgRXJyb3I6Ci0gICAgaWYgKHogIT0gTlVMTCkgewotICAgICAgICBQeV9ERUNSRUYoeik7Ci0gICAgICAgIHogPSBOVUxMOwotICAgIH0KKyAgICBQeV9DTEVBUih6KTsKICAgICAvKiBmYWxsIHRocm91Z2ggKi8KICAgRG9uZToKICAgICBpZiAoUHlfU0laRShiKSA+IEZJVkVBUllfQ1VUT0ZGKSB7CkBAIC00MDk3LDEwICs0MTEzLDEwIEBACiAKICAgICBzaGlmdGJ5ID0gUHlMb25nX0FzU3NpemVfdCgoUHlPYmplY3QgKiliKTsKICAgICBpZiAoc2hpZnRieSA9PSAtMUwgJiYgUHlFcnJfT2NjdXJyZWQoKSkKLSAgICAgICAgZ290byBsc2hpZnRfZXJyb3I7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmIChzaGlmdGJ5IDwgMCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIm5lZ2F0aXZlIHNoaWZ0IGNvdW50Iik7Ci0gICAgICAgIGdvdG8gbHNoaWZ0X2Vycm9yOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgLyogd29yZHNoaWZ0LCByZW1zaGlmdCA9IGRpdm1vZChzaGlmdGJ5LCBQeUxvbmdfU0hJRlQpICovCiAgICAgd29yZHNoaWZ0ID0gc2hpZnRieSAvIFB5TG9uZ19TSElGVDsKQEAgLTQxMTIsOSArNDEyOCwxMSBAQAogICAgICAgICArK25ld3NpemU7CiAgICAgeiA9IF9QeUxvbmdfTmV3KG5ld3NpemUpOwogICAgIGlmICh6ID09IE5VTEwpCi0gICAgICAgIGdvdG8gbHNoaWZ0X2Vycm9yOwotICAgIGlmIChQeV9TSVpFKGEpIDwgMCkKLSAgICAgICAgTkVHQVRFKHopOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlfU0laRShhKSA8IDApIHsKKyAgICAgICAgYXNzZXJ0KFB5X1JFRkNOVCh6KSA9PSAxKTsKKyAgICAgICAgUHlfU0laRSh6KSA9IC1QeV9TSVpFKHopOworICAgIH0KICAgICBmb3IgKGkgPSAwOyBpIDwgd29yZHNoaWZ0OyBpKyspCiAgICAgICAgIHotPm9iX2RpZ2l0W2ldID0gMDsKICAgICBhY2N1bSA9IDA7CkBAIC00MTI4LDcgKzQxNDYsNiBAQAogICAgIGVsc2UKICAgICAgICAgYXNzZXJ0KCFhY2N1bSk7CiAgICAgeiA9IGxvbmdfbm9ybWFsaXplKHopOwotICBsc2hpZnRfZXJyb3I6CiAgICAgcmV0dXJuIChQeU9iamVjdCAqKSBtYXliZV9zbWFsbF9sb25nKHopOwogfQogCkBAIC00MTUzLDcgKzQxNzAsNyBAQAogCiBzdGF0aWMgUHlPYmplY3QgKgogbG9uZ19iaXR3aXNlKFB5TG9uZ09iamVjdCAqYSwKLSAgICAgICAgICAgICBpbnQgb3AsICAvKiAnJicsICd8JywgJ14nICovCisgICAgICAgICAgICAgY2hhciBvcCwgIC8qICcmJywgJ3wnLCAnXicgKi8KICAgICAgICAgICAgICBQeUxvbmdPYmplY3QgKmIpCiB7CiAgICAgaW50IG5lZ2EsIG5lZ2IsIG5lZ3o7CkBAIC00MzI4LDggKzQzNDUsNyBAQAogbG9uZ19uZXcoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCiB7CiAgICAgUHlPYmplY3QgKm9iYXNlID0gTlVMTCwgKnggPSBOVUxMOwotICAgIGxvbmcgYmFzZTsKLSAgICBpbnQgb3ZlcmZsb3c7CisgICAgUHlfc3NpemVfdCBiYXNlOwogICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsieCIsICJiYXNlIiwgMH07CiAKICAgICBpZiAodHlwZSAhPSAmUHlMb25nX1R5cGUpCkBAIC00MzQ4LDEwICs0MzY0LDEwIEBACiAgICAgaWYgKG9iYXNlID09IE5VTEwpCiAgICAgICAgIHJldHVybiBQeU51bWJlcl9Mb25nKHgpOwogCi0gICAgYmFzZSA9IFB5TG9uZ19Bc0xvbmdBbmRPdmVyZmxvdyhvYmFzZSwgJm92ZXJmbG93KTsKKyAgICBiYXNlID0gUHlOdW1iZXJfQXNTc2l6ZV90KG9iYXNlLCBOVUxMKTsKICAgICBpZiAoYmFzZSA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAob3ZlcmZsb3cgfHwgKGJhc2UgIT0gMCAmJiBiYXNlIDwgMikgfHwgYmFzZSA+IDM2KSB7CisgICAgaWYgKChiYXNlICE9IDAgJiYgYmFzZSA8IDIpIHx8IGJhc2UgPiAzNikgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJpbnQoKSBiYXNlIG11c3QgYmUgPj0gMiBhbmQgPD0gMzYiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC00Mzg5LDcgKzQ0MDUsNyBAQAogICAgIHRtcCA9IChQeUxvbmdPYmplY3QgKilsb25nX25ldygmUHlMb25nX1R5cGUsIGFyZ3MsIGt3ZHMpOwogICAgIGlmICh0bXAgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgYXNzZXJ0KFB5TG9uZ19DaGVja0V4YWN0KHRtcCkpOworICAgIGFzc2VydChQeUxvbmdfQ2hlY2sodG1wKSk7CiAgICAgbiA9IFB5X1NJWkUodG1wKTsKICAgICBpZiAobiA8IDApCiAgICAgICAgIG4gPSAtbjsKQEAgLTQ0MzIsNyArNDQ0OCw3IEBACiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJVOl9fZm9ybWF0X18iLCAmZm9ybWF0X3NwZWMpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIF9QeVVuaWNvZGVXcml0ZXJfSW5pdCgmd3JpdGVyLCAwKTsKKyAgICBfUHlVbmljb2RlV3JpdGVyX0luaXQoJndyaXRlcik7CiAgICAgcmV0ID0gX1B5TG9uZ19Gb3JtYXRBZHZhbmNlZFdyaXRlcigKICAgICAgICAgJndyaXRlciwKICAgICAgICAgc2VsZiwKQEAgLTUwODIsMTUgKzUwOTgsMTcgQEAKICAgICAgICAgICAgIGFzc2VydCh2LT5vYl9kaWdpdFswXSA9PSBhYnMoaXZhbCkpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgUHlPYmplY3RfSU5JVCh2LCAmUHlMb25nX1R5cGUpOworICAgICAgICAgICAgKHZvaWQpUHlPYmplY3RfSU5JVCh2LCAmUHlMb25nX1R5cGUpOwogICAgICAgICB9CiAgICAgICAgIFB5X1NJWkUodikgPSBzaXplOwogICAgICAgICB2LT5vYl9kaWdpdFswXSA9IGFicyhpdmFsKTsKICAgICB9CiAjZW5kaWYKICAgICAvKiBpbml0aWFsaXplIGludF9pbmZvICovCi0gICAgaWYgKEludF9JbmZvVHlwZS50cF9uYW1lID09IDApCi0gICAgICAgIFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUoJkludF9JbmZvVHlwZSwgJmludF9pbmZvX2Rlc2MpOworICAgIGlmIChJbnRfSW5mb1R5cGUudHBfbmFtZSA9PSBOVUxMKSB7CisgICAgICAgIGlmIChQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlMigmSW50X0luZm9UeXBlLCAmaW50X2luZm9fZGVzYykgPCAwKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgfQogCiAgICAgcmV0dXJuIDE7CiB9CmRpZmYgLS1naXQgYS9PYmplY3RzL21lbW9yeW9iamVjdC5jIGIvT2JqZWN0cy9tZW1vcnlvYmplY3QuYwppbmRleCAxODlhZjg4Li4wYmU4NDkzIDEwMDY0NAotLS0gYS9PYmplY3RzL21lbW9yeW9iamVjdC5jCisrKyBiL09iamVjdHMvbWVtb3J5b2JqZWN0LmMKQEAgLTExMzUsNiArMTEzNSw1MSBAQAogICAgIHJldHVybiAtMTsKIH0KIAorUHlfTE9DQUxfSU5MSU5FKGNoYXIgKikKK2dldF9uYXRpdmVfZm10c3RyKGNvbnN0IGNoYXIgKmZtdCkKK3sKKyAgICBpbnQgYXQgPSAwOworCisgICAgaWYgKGZtdFswXSA9PSAnQCcpIHsKKyAgICAgICAgYXQgPSAxOworICAgICAgICBmbXQrKzsKKyAgICB9CisgICAgaWYgKGZtdFswXSA9PSAnXDAnIHx8IGZtdFsxXSAhPSAnXDAnKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworI2RlZmluZSBSRVRVUk4ocykgZG8geyByZXR1cm4gYXQgPyAiQCIgcyA6IHM7IH0gd2hpbGUgKDApCisKKyAgICBzd2l0Y2ggKGZtdFswXSkgeworICAgIGNhc2UgJ2MnOiBSRVRVUk4oImMiKTsKKyAgICBjYXNlICdiJzogUkVUVVJOKCJiIik7CisgICAgY2FzZSAnQic6IFJFVFVSTigiQiIpOworICAgIGNhc2UgJ2gnOiBSRVRVUk4oImgiKTsKKyAgICBjYXNlICdIJzogUkVUVVJOKCJIIik7CisgICAgY2FzZSAnaSc6IFJFVFVSTigiaSIpOworICAgIGNhc2UgJ0knOiBSRVRVUk4oIkkiKTsKKyAgICBjYXNlICdsJzogUkVUVVJOKCJsIik7CisgICAgY2FzZSAnTCc6IFJFVFVSTigiTCIpOworICAgICNpZmRlZiBIQVZFX0xPTkdfTE9ORworICAgIGNhc2UgJ3EnOiBSRVRVUk4oInEiKTsKKyAgICBjYXNlICdRJzogUkVUVVJOKCJRIik7CisgICAgI2VuZGlmCisgICAgY2FzZSAnbic6IFJFVFVSTigibiIpOworICAgIGNhc2UgJ04nOiBSRVRVUk4oIk4iKTsKKyAgICBjYXNlICdmJzogUkVUVVJOKCJmIik7CisgICAgY2FzZSAnZCc6IFJFVFVSTigiZCIpOworICAgICNpZmRlZiBIQVZFX0M5OV9CT09MCisgICAgY2FzZSAnPyc6IFJFVFVSTigiPyIpOworICAgICNlbHNlCisgICAgY2FzZSAnPyc6IFJFVFVSTigiPyIpOworICAgICNlbmRpZgorICAgIGNhc2UgJ1AnOiBSRVRVUk4oIlAiKTsKKyAgICB9CisKKyAgICByZXR1cm4gTlVMTDsKK30KKworCiAvKiBDYXN0IGEgbWVtb3J5dmlldydzIGRhdGEgdHlwZSB0byAnZm9ybWF0Jy4gVGhlIGlucHV0IGFycmF5IG11c3QgYmUKICAgIEMtY29udGlndW91cy4gQXQgbGVhc3Qgb25lIG9mIGlucHV0LWZvcm1hdCwgb3V0cHV0LWZvcm1hdCBtdXN0IGhhdmUKICAgIGJ5dGUgc2l6ZS4gVGhlIG91dHB1dCBhcnJheSBpcyAxLUQsIHdpdGggdGhlIHNhbWUgYnl0ZSBsZW5ndGggYXMgdGhlCkBAIC0xMTg0LDEwICsxMjI5LDEzIEBACiAgICAgICAgIGdvdG8gb3V0OwogICAgIH0KIAotICAgIHN0cm5jcHkobXYtPmZvcm1hdCwgUHlCeXRlc19BU19TVFJJTkcoYXNjaWlmbXQpLAotICAgICAgICAgICAgX1B5X01FTU9SWVZJRVdfTUFYX0ZPUk1BVCk7Ci0gICAgbXYtPmZvcm1hdFtfUHlfTUVNT1JZVklFV19NQVhfRk9STUFULTFdID0gJ1wwJzsKLSAgICB2aWV3LT5mb3JtYXQgPSBtdi0+Zm9ybWF0OworICAgIHZpZXctPmZvcm1hdCA9IGdldF9uYXRpdmVfZm10c3RyKFB5Qnl0ZXNfQVNfU1RSSU5HKGFzY2lpZm10KSk7CisgICAgaWYgKHZpZXctPmZvcm1hdCA9PSBOVUxMKSB7CisgICAgICAgIC8qIE5PVF9SRUFDSEVEOiBnZXRfbmF0aXZlX2ZtdGNoYXIoKSBhbHJlYWR5IHZhbGlkYXRlcyB0aGUgZm9ybWF0LiAqLworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLAorICAgICAgICAgICAgIm1lbW9yeXZpZXc6IGludGVybmFsIGVycm9yIik7CisgICAgICAgIGdvdG8gb3V0OworICAgIH0KICAgICB2aWV3LT5pdGVtc2l6ZSA9IGl0ZW1zaXplOwogCiAgICAgdmlldy0+bmRpbSA9IDE7CkBAIC0yNDAyLDcgKzI0NTAsNyBAQAogCiAvKiBBcyBzZXF1ZW5jZSAqLwogc3RhdGljIFB5U2VxdWVuY2VNZXRob2RzIG1lbW9yeV9hc19zZXF1ZW5jZSA9IHsKLSAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNxX2xlbmd0aCAqLworICAgICAgICAobGVuZnVuYyltZW1vcnlfbGVuZ3RoLCAgICAgICAgICAgLyogc3FfbGVuZ3RoICovCiAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzcV9jb25jYXQgKi8KICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNxX3JlcGVhdCAqLwogICAgICAgICAoc3NpemVhcmdmdW5jKW1lbW9yeV9pdGVtLCAgICAgICAgLyogc3FfaXRlbSAqLwpAQCAtMjc0Miw3ICsyNzkwLDcgQEAKICAgICAgICAgfQogCiAgICAgICAgIC8qIENhbid0IGZhaWwgKi8KLSAgICAgICAgc2VsZi0+aGFzaCA9IF9QeV9IYXNoQnl0ZXMoKHVuc2lnbmVkIGNoYXIgKiltZW0sIHZpZXctPmxlbik7CisgICAgICAgIHNlbGYtPmhhc2ggPSBfUHlfSGFzaEJ5dGVzKG1lbSwgdmlldy0+bGVuKTsKIAogICAgICAgICBpZiAobWVtICE9IHZpZXctPmJ1ZikKICAgICAgICAgICAgIFB5TWVtX0ZyZWUobWVtKTsKZGlmZiAtLWdpdCBhL09iamVjdHMvbWV0aG9kb2JqZWN0LmMgYi9PYmplY3RzL21ldGhvZG9iamVjdC5jCmluZGV4IGYwNjg1ZGQuLjliNmU1ZTQgMTAwNjQ0Ci0tLSBhL09iamVjdHMvbWV0aG9kb2JqZWN0LmMKKysrIGIvT2JqZWN0cy9tZXRob2RvYmplY3QuYwpAQCAtMTMsNiArMTMsMTUgQEAKICNkZWZpbmUgUHlDRnVuY3Rpb25fTUFYRlJFRUxJU1QgMjU2CiAjZW5kaWYKIAorLyogdW5kZWZpbmUgbWFjcm8gdHJhbXBvbGluZSB0byBQeUNGdW5jdGlvbl9OZXdFeCAqLworI3VuZGVmIFB5Q0Z1bmN0aW9uX05ldworCitQeUFQSV9GVU5DKFB5T2JqZWN0ICopCitQeUNGdW5jdGlvbl9OZXcoUHlNZXRob2REZWYgKm1sLCBQeU9iamVjdCAqc2VsZikKK3sKKyAgICByZXR1cm4gUHlDRnVuY3Rpb25fTmV3RXgobWwsIHNlbGYsIE5VTEwpOworfQorCiBQeU9iamVjdCAqCiBQeUNGdW5jdGlvbl9OZXdFeChQeU1ldGhvZERlZiAqbWwsIFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqbW9kdWxlKQogewpAQCAtMjAsNyArMjksNyBAQAogICAgIG9wID0gZnJlZV9saXN0OwogICAgIGlmIChvcCAhPSBOVUxMKSB7CiAgICAgICAgIGZyZWVfbGlzdCA9IChQeUNGdW5jdGlvbk9iamVjdCAqKShvcC0+bV9zZWxmKTsKLSAgICAgICAgUHlPYmplY3RfSU5JVChvcCwgJlB5Q0Z1bmN0aW9uX1R5cGUpOworICAgICAgICAodm9pZClQeU9iamVjdF9JTklUKG9wLCAmUHlDRnVuY3Rpb25fVHlwZSk7CiAgICAgICAgIG51bWZyZWUtLTsKICAgICB9CiAgICAgZWxzZSB7CkBAIC03MCwyMyArNzksMzQgQEAKIFB5T2JqZWN0ICoKIFB5Q0Z1bmN0aW9uX0NhbGwoUHlPYmplY3QgKmZ1bmMsIFB5T2JqZWN0ICphcmcsIFB5T2JqZWN0ICprdykKIHsKKyNkZWZpbmUgQ0hFQ0tfUkVTVUxUKHJlcykgYXNzZXJ0KHJlcyAhPSBOVUxMIHx8IFB5RXJyX09jY3VycmVkKCkpCisKICAgICBQeUNGdW5jdGlvbk9iamVjdCogZiA9IChQeUNGdW5jdGlvbk9iamVjdCopZnVuYzsKICAgICBQeUNGdW5jdGlvbiBtZXRoID0gUHlDRnVuY3Rpb25fR0VUX0ZVTkNUSU9OKGZ1bmMpOwogICAgIFB5T2JqZWN0ICpzZWxmID0gUHlDRnVuY3Rpb25fR0VUX1NFTEYoZnVuYyk7CisgICAgUHlPYmplY3QgKnJlczsKICAgICBQeV9zc2l6ZV90IHNpemU7CiAKICAgICBzd2l0Y2ggKFB5Q0Z1bmN0aW9uX0dFVF9GTEFHUyhmdW5jKSAmIH4oTUVUSF9DTEFTUyB8IE1FVEhfU1RBVElDIHwgTUVUSF9DT0VYSVNUKSkgewogICAgIGNhc2UgTUVUSF9WQVJBUkdTOgotICAgICAgICBpZiAoa3cgPT0gTlVMTCB8fCBQeURpY3RfU2l6ZShrdykgPT0gMCkKLSAgICAgICAgICAgIHJldHVybiAoKm1ldGgpKHNlbGYsIGFyZyk7CisgICAgICAgIGlmIChrdyA9PSBOVUxMIHx8IFB5RGljdF9TaXplKGt3KSA9PSAwKSB7CisgICAgICAgICAgICByZXMgPSAoKm1ldGgpKHNlbGYsIGFyZyk7CisgICAgICAgICAgICBDSEVDS19SRVNVTFQocmVzKTsKKyAgICAgICAgICAgIHJldHVybiByZXM7CisgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTOgotICAgICAgICByZXR1cm4gKCooUHlDRnVuY3Rpb25XaXRoS2V5d29yZHMpbWV0aCkoc2VsZiwgYXJnLCBrdyk7CisgICAgICAgIHJlcyA9ICgqKFB5Q0Z1bmN0aW9uV2l0aEtleXdvcmRzKW1ldGgpKHNlbGYsIGFyZywga3cpOworICAgICAgICBDSEVDS19SRVNVTFQocmVzKTsKKyAgICAgICAgcmV0dXJuIHJlczsKICAgICBjYXNlIE1FVEhfTk9BUkdTOgogICAgICAgICBpZiAoa3cgPT0gTlVMTCB8fCBQeURpY3RfU2l6ZShrdykgPT0gMCkgewogICAgICAgICAgICAgc2l6ZSA9IFB5VHVwbGVfR0VUX1NJWkUoYXJnKTsKLSAgICAgICAgICAgIGlmIChzaXplID09IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuICgqbWV0aCkoc2VsZiwgTlVMTCk7CisgICAgICAgICAgICBpZiAoc2l6ZSA9PSAwKSB7CisgICAgICAgICAgICAgICAgcmVzID0gKCptZXRoKShzZWxmLCBOVUxMKTsKKyAgICAgICAgICAgICAgICBDSEVDS19SRVNVTFQocmVzKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzOworICAgICAgICAgICAgfQogICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKICAgICAgICAgICAgICAgICAiJS4yMDBzKCkgdGFrZXMgbm8gYXJndW1lbnRzICglemQgZ2l2ZW4pIiwKICAgICAgICAgICAgICAgICBmLT5tX21sLT5tbF9uYW1lLCBzaXplKTsKQEAgLTk2LDggKzExNiwxMSBAQAogICAgIGNhc2UgTUVUSF9POgogICAgICAgICBpZiAoa3cgPT0gTlVMTCB8fCBQeURpY3RfU2l6ZShrdykgPT0gMCkgewogICAgICAgICAgICAgc2l6ZSA9IFB5VHVwbGVfR0VUX1NJWkUoYXJnKTsKLSAgICAgICAgICAgIGlmIChzaXplID09IDEpCi0gICAgICAgICAgICAgICAgcmV0dXJuICgqbWV0aCkoc2VsZiwgUHlUdXBsZV9HRVRfSVRFTShhcmcsIDApKTsKKyAgICAgICAgICAgIGlmIChzaXplID09IDEpIHsKKyAgICAgICAgICAgICAgICByZXMgPSAoKm1ldGgpKHNlbGYsIFB5VHVwbGVfR0VUX0lURU0oYXJnLCAwKSk7CisgICAgICAgICAgICAgICAgQ0hFQ0tfUkVTVUxUKHJlcyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlczsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCiAgICAgICAgICAgICAgICAgIiUuMjAwcygpIHRha2VzIGV4YWN0bHkgb25lIGFyZ3VtZW50ICglemQgZ2l2ZW4pIiwKICAgICAgICAgICAgICAgICBmLT5tX21sLT5tbF9uYW1lLCBzaXplKTsKQEAgLTExNCw2ICsxMzcsOCBAQAogICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsICIlLjIwMHMoKSB0YWtlcyBubyBrZXl3b3JkIGFyZ3VtZW50cyIsCiAgICAgICAgICAgICAgICAgIGYtPm1fbWwtPm1sX25hbWUpOwogICAgIHJldHVybiBOVUxMOworCisjdW5kZWYgQ0hFQ0tfUkVTVUxUCiB9CiAKIC8qIE1ldGhvZHMgKHRoZSBzdGFuZGFyZCBidWlsdC1pbiBtZXRob2RzLCB0aGF0IGlzKSAqLwpAQCAtMTM1LDE0ICsxNjAsMzUgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKK21ldGhfcmVkdWNlKFB5Q0Z1bmN0aW9uT2JqZWN0ICptKQoreworICAgIFB5T2JqZWN0ICpidWlsdGluczsKKyAgICBQeU9iamVjdCAqZ2V0YXR0cjsKKyAgICBfUHlfSURFTlRJRklFUihnZXRhdHRyKTsKKworICAgIGlmIChtLT5tX3NlbGYgPT0gTlVMTCB8fCBQeU1vZHVsZV9DaGVjayhtLT5tX3NlbGYpKQorICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmcobS0+bV9tbC0+bWxfbmFtZSk7CisKKyAgICBidWlsdGlucyA9IFB5RXZhbF9HZXRCdWlsdGlucygpOworICAgIGdldGF0dHIgPSBfUHlEaWN0X0dldEl0ZW1JZChidWlsdGlucywgJlB5SWRfZ2V0YXR0cik7CisgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIk8oT3MpIiwgZ2V0YXR0ciwgbS0+bV9zZWxmLCBtLT5tX21sLT5tbF9uYW1lKTsKK30KKworc3RhdGljIFB5TWV0aG9kRGVmIG1ldGhfbWV0aG9kc1tdID0geworICAgIHsiX19yZWR1Y2VfXyIsIChQeUNGdW5jdGlvbiltZXRoX3JlZHVjZSwgTUVUSF9OT0FSR1MsIE5VTEx9LAorICAgIHtOVUxMLCBOVUxMfQorfTsKKworc3RhdGljIFB5T2JqZWN0ICoKK21ldGhfZ2V0X190ZXh0X3NpZ25hdHVyZV9fKFB5Q0Z1bmN0aW9uT2JqZWN0ICptLCB2b2lkICpjbG9zdXJlKQoreworICAgIHJldHVybiBfUHlUeXBlX0dldFRleHRTaWduYXR1cmVGcm9tSW50ZXJuYWxEb2MobS0+bV9tbC0+bWxfbmFtZSwgbS0+bV9tbC0+bWxfZG9jKTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKIG1ldGhfZ2V0X19kb2NfXyhQeUNGdW5jdGlvbk9iamVjdCAqbSwgdm9pZCAqY2xvc3VyZSkKIHsKLSAgICBjb25zdCBjaGFyICpkb2MgPSBtLT5tX21sLT5tbF9kb2M7Ci0KLSAgICBpZiAoZG9jICE9IE5VTEwpCi0gICAgICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZyhkb2MpOwotICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICByZXR1cm4gUHlfTm9uZTsKKyAgICByZXR1cm4gX1B5VHlwZV9HZXREb2NGcm9tSW50ZXJuYWxEb2MobS0+bV9tbC0+bWxfbmFtZSwgbS0+bV9tbC0+bWxfZG9jKTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTIxMSw2ICsyNTcsNyBAQAogICAgIHsiX19uYW1lX18iLCAoZ2V0dGVyKW1ldGhfZ2V0X19uYW1lX18sIE5VTEwsIE5VTEx9LAogICAgIHsiX19xdWFsbmFtZV9fIiwgKGdldHRlciltZXRoX2dldF9fcXVhbG5hbWVfXywgTlVMTCwgTlVMTH0sCiAgICAgeyJfX3NlbGZfXyIsIChnZXR0ZXIpbWV0aF9nZXRfX3NlbGZfXywgTlVMTCwgTlVMTH0sCisgICAgeyJfX3RleHRfc2lnbmF0dXJlX18iLCAoZ2V0dGVyKW1ldGhfZ2V0X190ZXh0X3NpZ25hdHVyZV9fLCBOVUxMLCBOVUxMfSwKICAgICB7MH0KIH07CiAKQEAgLTMwOCw3ICszNTUsNyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3RvZmZzZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXJuZXh0ICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZXRob2RzICovCisgICAgbWV0aF9tZXRob2RzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZXRob2RzICovCiAgICAgbWV0aF9tZW1iZXJzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZW1iZXJzICovCiAgICAgbWV0aF9nZXRzZXRzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRzZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2UgKi8KQEAgLTM0NiwxNyArMzkzLDMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmcmVlIFB5Q0Z1bmN0aW9uT2JqZWN0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWZyZWUsIHNpemVvZihQeUNGdW5jdGlvbk9iamVjdCkpOwogfQotCi0vKiBQeUNGdW5jdGlvbl9OZXcoKSBpcyBub3cganVzdCBhIG1hY3JvIHRoYXQgY2FsbHMgUHlDRnVuY3Rpb25fTmV3RXgoKSwKLSAgIGJ1dCBpdCdzIHBhcnQgb2YgdGhlIEFQSSBzbyB3ZSBuZWVkIHRvIGtlZXAgYSBmdW5jdGlvbiBhcm91bmQgdGhhdAotICAgZXhpc3RpbmcgQyBleHRlbnNpb25zIGNhbiBjYWxsLgotKi8KLQotI3VuZGVmIFB5Q0Z1bmN0aW9uX05ldwotUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUNGdW5jdGlvbl9OZXcoUHlNZXRob2REZWYgKiwgUHlPYmplY3QgKik7Ci0KLVB5T2JqZWN0ICoKLVB5Q0Z1bmN0aW9uX05ldyhQeU1ldGhvZERlZiAqbWwsIFB5T2JqZWN0ICpzZWxmKQotewotICAgIHJldHVybiBQeUNGdW5jdGlvbl9OZXdFeChtbCwgc2VsZiwgTlVMTCk7Ci19CmRpZmYgLS1naXQgYS9PYmplY3RzL21vZHVsZW9iamVjdC5jIGIvT2JqZWN0cy9tb2R1bGVvYmplY3QuYwppbmRleCA3Mjk3OGFlLi5mNTA5OTMyIDEwMDY0NAotLS0gYS9PYmplY3RzL21vZHVsZW9iamVjdC5jCisrKyBiL09iamVjdHMvbW9kdWxlb2JqZWN0LmMKQEAgLTExLDYgKzExLDggQEAKICAgICBQeU9iamVjdCAqbWRfZGljdDsKICAgICBzdHJ1Y3QgUHlNb2R1bGVEZWYgKm1kX2RlZjsKICAgICB2b2lkICptZF9zdGF0ZTsKKyAgICBQeU9iamVjdCAqbWRfd2Vha2xpc3Q7CisgICAgUHlPYmplY3QgKm1kX25hbWU7ICAvKiBmb3IgbG9nZ2luZyBwdXJwb3NlcyBhZnRlciBtZF9kaWN0IGlzIGNsZWFyZWQgKi8KIH0gUHlNb2R1bGVPYmplY3Q7CiAKIHN0YXRpYyBQeU1lbWJlckRlZiBtb2R1bGVfbWVtYmVyc1tdID0gewpAQCAtMjYsNiArMjgsMzUgQEAKIH07CiAKIAorc3RhdGljIGludAorbW9kdWxlX2luaXRfZGljdChQeU1vZHVsZU9iamVjdCAqbW9kLCBQeU9iamVjdCAqbWRfZGljdCwKKyAgICAgICAgICAgICAgICAgUHlPYmplY3QgKm5hbWUsIFB5T2JqZWN0ICpkb2MpCit7CisgICAgaWYgKG1kX2RpY3QgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIGlmIChkb2MgPT0gTlVMTCkKKyAgICAgICAgZG9jID0gUHlfTm9uZTsKKworICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhtZF9kaWN0LCAiX19uYW1lX18iLCBuYW1lKSAhPSAwKQorICAgICAgICByZXR1cm4gLTE7CisgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKG1kX2RpY3QsICJfX2RvY19fIiwgZG9jKSAhPSAwKQorICAgICAgICByZXR1cm4gLTE7CisgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKG1kX2RpY3QsICJfX3BhY2thZ2VfXyIsIFB5X05vbmUpICE9IDApCisgICAgICAgIHJldHVybiAtMTsKKyAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcobWRfZGljdCwgIl9fbG9hZGVyX18iLCBQeV9Ob25lKSAhPSAwKQorICAgICAgICByZXR1cm4gLTE7CisgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKG1kX2RpY3QsICJfX3NwZWNfXyIsIFB5X05vbmUpICE9IDApCisgICAgICAgIHJldHVybiAtMTsKKyAgICBpZiAoUHlVbmljb2RlX0NoZWNrRXhhY3QobmFtZSkpIHsKKyAgICAgICAgUHlfSU5DUkVGKG5hbWUpOworICAgICAgICBQeV9YREVDUkVGKG1vZC0+bWRfbmFtZSk7CisgICAgICAgIG1vZC0+bWRfbmFtZSA9IG5hbWU7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKKwogUHlPYmplY3QgKgogUHlNb2R1bGVfTmV3T2JqZWN0KFB5T2JqZWN0ICpuYW1lKQogewpAQCAtMzUsMTQgKzY2LDEwIEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIG0tPm1kX2RlZiA9IE5VTEw7CiAgICAgbS0+bWRfc3RhdGUgPSBOVUxMOworICAgIG0tPm1kX3dlYWtsaXN0ID0gTlVMTDsKKyAgICBtLT5tZF9uYW1lID0gTlVMTDsKICAgICBtLT5tZF9kaWN0ID0gUHlEaWN0X05ldygpOwotICAgIGlmIChtLT5tZF9kaWN0ID09IE5VTEwpCi0gICAgICAgIGdvdG8gZmFpbDsKLSAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcobS0+bWRfZGljdCwgIl9fbmFtZV9fIiwgbmFtZSkgIT0gMCkKLSAgICAgICAgZ290byBmYWlsOwotICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhtLT5tZF9kaWN0LCAiX19kb2NfXyIsIFB5X05vbmUpICE9IDApCi0gICAgICAgIGdvdG8gZmFpbDsKLSAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcobS0+bWRfZGljdCwgIl9fcGFja2FnZV9fIiwgUHlfTm9uZSkgIT0gMCkKKyAgICBpZiAobW9kdWxlX2luaXRfZGljdChtLCBtLT5tZF9kaWN0LCBuYW1lLCBOVUxMKSAhPSAwKQogICAgICAgICBnb3RvIGZhaWw7CiAgICAgUHlPYmplY3RfR0NfVHJhY2sobSk7CiAgICAgcmV0dXJuIChQeU9iamVjdCAqKW07CkBAIC0yNzIsNiArMjk5LDE0IEBACiB2b2lkCiBfUHlNb2R1bGVfQ2xlYXIoUHlPYmplY3QgKm0pCiB7CisgICAgUHlPYmplY3QgKmQgPSAoKFB5TW9kdWxlT2JqZWN0ICopbSktPm1kX2RpY3Q7CisgICAgaWYgKGQgIT0gTlVMTCkKKyAgICAgICAgX1B5TW9kdWxlX0NsZWFyRGljdChkKTsKK30KKwordm9pZAorX1B5TW9kdWxlX0NsZWFyRGljdChQeU9iamVjdCAqZCkKK3sKICAgICAvKiBUbyBtYWtlIHRoZSBleGVjdXRpb24gb3JkZXIgb2YgZGVzdHJ1Y3RvcnMgZm9yIGdsb2JhbAogICAgICAgIG9iamVjdHMgYSBiaXQgbW9yZSBwcmVkaWN0YWJsZSwgd2UgZmlyc3QgemFwIGFsbCBvYmplY3RzCiAgICAgICAgd2hvc2UgbmFtZSBzdGFydHMgd2l0aCBhIHNpbmdsZSB1bmRlcnNjb3JlLCBiZWZvcmUgd2UgY2xlYXIKQEAgLTI4MSwxMSArMzE2LDYgQEAKIAogICAgIFB5X3NzaXplX3QgcG9zOwogICAgIFB5T2JqZWN0ICprZXksICp2YWx1ZTsKLSAgICBQeU9iamVjdCAqZDsKLQotICAgIGQgPSAoKFB5TW9kdWxlT2JqZWN0ICopbSktPm1kX2RpY3Q7Ci0gICAgaWYgKGQgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuOwogCiAgICAgLyogRmlyc3QsIGNsZWFyIG9ubHkgbmFtZXMgc3RhcnRpbmcgd2l0aCBhIHNpbmdsZSB1bmRlcnNjb3JlICovCiAgICAgcG9zID0gMDsKQEAgLTM0OSw5ICszNzksNyBAQAogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICBtLT5tZF9kaWN0ID0gZGljdDsKICAgICB9Ci0gICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGRpY3QsICJfX25hbWVfXyIsIG5hbWUpIDwgMCkKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhkaWN0LCAiX19kb2NfXyIsIGRvYykgPCAwKQorICAgIGlmIChtb2R1bGVfaW5pdF9kaWN0KG0sIGRpY3QsIG5hbWUsIGRvYykgPCAwKQogICAgICAgICByZXR1cm4gLTE7CiAgICAgcmV0dXJuIDA7CiB9CkBAIC0zNjAsMTIgKzM4OCwxNSBAQAogbW9kdWxlX2RlYWxsb2MoUHlNb2R1bGVPYmplY3QgKm0pCiB7CiAgICAgUHlPYmplY3RfR0NfVW5UcmFjayhtKTsKKyAgICBpZiAoUHlfVmVyYm9zZUZsYWcgJiYgbS0+bWRfbmFtZSkgeworICAgICAgICBQeVN5c19Gb3JtYXRTdGRlcnIoIiMgZGVzdHJveSAlU1xuIiwgbS0+bWRfbmFtZSk7CisgICAgfQorICAgIGlmIChtLT5tZF93ZWFrbGlzdCAhPSBOVUxMKQorICAgICAgICBQeU9iamVjdF9DbGVhcldlYWtSZWZzKChQeU9iamVjdCAqKSBtKTsKICAgICBpZiAobS0+bWRfZGVmICYmIG0tPm1kX2RlZi0+bV9mcmVlKQogICAgICAgICBtLT5tZF9kZWYtPm1fZnJlZShtKTsKLSAgICBpZiAobS0+bWRfZGljdCAhPSBOVUxMKSB7Ci0gICAgICAgIF9QeU1vZHVsZV9DbGVhcigoUHlPYmplY3QgKiltKTsKLSAgICAgICAgUHlfREVDUkVGKG0tPm1kX2RpY3QpOwotICAgIH0KKyAgICBQeV9YREVDUkVGKG0tPm1kX2RpY3QpOworICAgIFB5X1hERUNSRUYobS0+bWRfbmFtZSk7CiAgICAgaWYgKG0tPm1kX3N0YXRlICE9IE5VTEwpCiAgICAgICAgIFB5TWVtX0ZSRUUobS0+bWRfc3RhdGUpOwogICAgIFB5X1RZUEUobSktPnRwX2ZyZWUoKFB5T2JqZWN0ICopbSk7CkBAIC0zNzQsNTUgKzQwNSwxMCBAQAogc3RhdGljIFB5T2JqZWN0ICoKIG1vZHVsZV9yZXByKFB5TW9kdWxlT2JqZWN0ICptKQogewotICAgIFB5T2JqZWN0ICpuYW1lLCAqZmlsZW5hbWUsICpyZXByLCAqbG9hZGVyID0gTlVMTDsKKyAgICBQeVRocmVhZFN0YXRlICp0c3RhdGUgPSBQeVRocmVhZFN0YXRlX0dFVCgpOworICAgIFB5SW50ZXJwcmV0ZXJTdGF0ZSAqaW50ZXJwID0gdHN0YXRlLT5pbnRlcnA7CiAKLSAgICAvKiBTZWUgaWYgdGhlIG1vZHVsZSBoYXMgYW4gX19sb2FkZXJfXy4gIElmIGl0IGRvZXMsIGdpdmUgdGhlIGxvYWRlciB0aGUKLSAgICAgKiBmaXJzdCBzaG90IGF0IHByb2R1Y2luZyBhIHJlcHIgZm9yIHRoZSBtb2R1bGUuCi0gICAgICovCi0gICAgaWYgKG0tPm1kX2RpY3QgIT0gTlVMTCkgewotICAgICAgICBsb2FkZXIgPSBQeURpY3RfR2V0SXRlbVN0cmluZyhtLT5tZF9kaWN0LCAiX19sb2FkZXJfXyIpOwotICAgIH0KLSAgICBpZiAobG9hZGVyICE9IE5VTEwpIHsKLSAgICAgICAgcmVwciA9IFB5T2JqZWN0X0NhbGxNZXRob2QobG9hZGVyLCAibW9kdWxlX3JlcHIiLCAiKE8pIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFB5T2JqZWN0ICopbSwgTlVMTCk7Ci0gICAgICAgIGlmIChyZXByID09IE5VTEwpIHsKLSAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICByZXR1cm4gcmVwcjsKLSAgICAgICAgfQotICAgIH0KLSAgICAvKiBfX2xvYWRlcl9fLm1vZHVsZV9yZXByKG0pIGRpZCBub3QgcHJvdmlkZSB1cyB3aXRoIGEgcmVwci4gIE5leHQsIHNlZSBpZgotICAgICAqIHRoZSBtb2R1bGUgaGFzIGFuIF9fZmlsZV9fLiAgSWYgaXQgZG9lc24ndCB0aGVuIHVzZSByZXByKF9fbG9hZGVyX18pIGlmCi0gICAgICogaXQgZXhpc3RzLCBvdGhlcndpc2UsIGp1c3QgdXNlIG1vZHVsZS5fX25hbWVfXy4KLSAgICAgKi8KLSAgICBuYW1lID0gUHlNb2R1bGVfR2V0TmFtZU9iamVjdCgoUHlPYmplY3QgKiltKTsKLSAgICBpZiAobmFtZSA9PSBOVUxMKSB7Ci0gICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgICAgIG5hbWUgPSBQeVVuaWNvZGVfRnJvbVN0cmluZ0FuZFNpemUoIj8iLCAxKTsKLSAgICAgICAgaWYgKG5hbWUgPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBmaWxlbmFtZSA9IFB5TW9kdWxlX0dldEZpbGVuYW1lT2JqZWN0KChQeU9iamVjdCAqKW0pOwotICAgIGlmIChmaWxlbmFtZSA9PSBOVUxMKSB7Ci0gICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgICAgIC8qIFRoZXJlJ3Mgbm8gbS5fX2ZpbGVfXywgc28gaWYgdGhlcmUgd2FzIGFuIF9fbG9hZGVyX18sIHVzZSB0aGF0IGluCi0gICAgICAgICAqIHRoZSByZXByLCBvdGhlcndpc2UsIHRoZSBvbmx5IHRoaW5nIHlvdSBjYW4gdXNlIGlzIG0uX19uYW1lX18KLSAgICAgICAgICovCi0gICAgICAgIGlmIChsb2FkZXIgPT0gTlVMTCkgewotICAgICAgICAgICAgcmVwciA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0KCI8bW9kdWxlICVSPiIsIG5hbWUpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgcmVwciA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0KCI8bW9kdWxlICVSICglUik+IiwgbmFtZSwgbG9hZGVyKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAvKiBGaW5hbGx5LCB1c2UgbS5fX2ZpbGVfXyAqLwotICAgIGVsc2UgewotICAgICAgICByZXByID0gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIjxtb2R1bGUgJVIgZnJvbSAlUj4iLCBuYW1lLCBmaWxlbmFtZSk7Ci0gICAgICAgIFB5X0RFQ1JFRihmaWxlbmFtZSk7Ci0gICAgfQotICAgIFB5X0RFQ1JFRihuYW1lKTsKLSAgICByZXR1cm4gcmVwcjsKKyAgICByZXR1cm4gUHlPYmplY3RfQ2FsbE1ldGhvZChpbnRlcnAtPmltcG9ydGxpYiwgIl9tb2R1bGVfcmVwciIsICJPIiwgbSk7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTUxMSw3ICs0OTcsNyBAQAogICAgICh0cmF2ZXJzZXByb2MpbW9kdWxlX3RyYXZlcnNlLCAgICAgICAgICAgICAgLyogdHBfdHJhdmVyc2UgKi8KICAgICAoaW5xdWlyeSltb2R1bGVfY2xlYXIsICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NsZWFyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yaWNoY29tcGFyZSAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3RvZmZzZXQgKi8KKyAgICBvZmZzZXRvZihQeU1vZHVsZU9iamVjdCwgbWRfd2Vha2xpc3QpLCAgICAgIC8qIHRwX3dlYWtsaXN0b2Zmc2V0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVybmV4dCAqLwogICAgIG1vZHVsZV9tZXRob2RzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWV0aG9kcyAqLwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9uYW1lc3BhY2VvYmplY3QuYyBiL09iamVjdHMvbmFtZXNwYWNlb2JqZWN0LmMKaW5kZXggZmYyNzhkMy4uM2QyN2E5NSAxMDA2NDQKLS0tIGEvT2JqZWN0cy9uYW1lc3BhY2VvYmplY3QuYworKysgYi9PYmplY3RzL25hbWVzcGFjZW9iamVjdC5jCkBAIC00NCw3ICs0NCw3IEBACiAgICAgaWYgKGFyZ3MgIT0gTlVMTCkgewogICAgICAgICBQeV9zc2l6ZV90IGFyZ2NvdW50ID0gUHlPYmplY3RfU2l6ZShhcmdzKTsKICAgICAgICAgaWYgKGFyZ2NvdW50IDwgMCkKLSAgICAgICAgICAgIHJldHVybiBhcmdjb3VudDsKKyAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgZWxzZSBpZiAoYXJnY291bnQgPiAwKSB7CiAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLCAibm8gcG9zaXRpb25hbCBhcmd1bWVudHMgZXhwZWN0ZWQiKTsKICAgICAgICAgICAgIHJldHVybiAtMTsKQEAgLTY2LDE2ICs2NiwyMCBAQAogCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1uYW1lc3BhY2VfcmVwcihfUHlOYW1lc3BhY2VPYmplY3QgKm5zKQorbmFtZXNwYWNlX3JlcHIoUHlPYmplY3QgKm5zKQogewogICAgIGludCBpLCBsb29wX2Vycm9yID0gMDsKICAgICBQeU9iamVjdCAqcGFpcnMgPSBOVUxMLCAqZCA9IE5VTEwsICprZXlzID0gTlVMTCwgKmtleXNfaXRlciA9IE5VTEw7CiAgICAgUHlPYmplY3QgKmtleTsKICAgICBQeU9iamVjdCAqc2VwYXJhdG9yLCAqcGFpcnNyZXByLCAqcmVwciA9IE5VTEw7CisgICAgY29uc3QgY2hhciAqIG5hbWU7CiAKLSAgICBpID0gUHlfUmVwckVudGVyKChQeU9iamVjdCAqKW5zKTsKKyAgICBuYW1lID0gKFB5X1RZUEUobnMpID09ICZfUHlOYW1lc3BhY2VfVHlwZSkgPyAibmFtZXNwYWNlIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG5zLT5vYl90eXBlLT50cF9uYW1lOworCisgICAgaSA9IFB5X1JlcHJFbnRlcihucyk7CiAgICAgaWYgKGkgIT0gMCkgewotICAgICAgICByZXR1cm4gaSA+IDAgPyBQeVVuaWNvZGVfRnJvbVN0cmluZygibmFtZXNwYWNlKC4uLikiKSA6IE5VTEw7CisgICAgICAgIHJldHVybiBpID4gMCA/IFB5VW5pY29kZV9Gcm9tRm9ybWF0KCIlcyguLi4pIiwgbmFtZSkgOiBOVUxMOwogICAgIH0KIAogICAgIHBhaXJzID0gUHlMaXN0X05ldygwKTsKQEAgLTk3LDcgKzEwMSw3IEBACiAgICAgICAgIGdvdG8gZXJyb3I7CiAKICAgICB3aGlsZSAoKGtleSA9IFB5SXRlcl9OZXh0KGtleXNfaXRlcikpICE9IE5VTEwpIHsKLSAgICAgICAgaWYgKFB5VW5pY29kZV9DaGVjayhrZXkpICYmIFB5VW5pY29kZV9HRVRfU0laRShrZXkpID4gMCkgeworICAgICAgICBpZiAoUHlVbmljb2RlX0NoZWNrKGtleSkgJiYgUHlVbmljb2RlX0dFVF9MRU5HVEgoa2V5KSA+IDApIHsKICAgICAgICAgICAgIFB5T2JqZWN0ICp2YWx1ZSwgKml0ZW07CiAKICAgICAgICAgICAgIHZhbHVlID0gUHlEaWN0X0dldEl0ZW0oZCwga2V5KTsKQEAgLTEyNyw4ICsxMzEsNyBAQAogICAgIGlmIChwYWlyc3JlcHIgPT0gTlVMTCkKICAgICAgICAgZ290byBlcnJvcjsKIAotICAgIHJlcHIgPSBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiJXMoJVMpIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChQeU9iamVjdCAqKW5zKS0+b2JfdHlwZS0+dHBfbmFtZSwgcGFpcnNyZXByKTsKKyAgICByZXByID0gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIiVzKCVTKSIsIG5hbWUsIHBhaXJzcmVwcik7CiAgICAgUHlfREVDUkVGKHBhaXJzcmVwcik7CiAKIGVycm9yOgpAQCAtMTM2LDcgKzEzOSw3IEBACiAgICAgUHlfWERFQ1JFRihkKTsKICAgICBQeV9YREVDUkVGKGtleXMpOwogICAgIFB5X1hERUNSRUYoa2V5c19pdGVyKTsKLSAgICBQeV9SZXByTGVhdmUoKFB5T2JqZWN0ICopbnMpOworICAgIFB5X1JlcHJMZWF2ZShucyk7CiAKICAgICByZXR1cm4gcmVwcjsKIH0KQEAgLTE1OCwxNCArMTYxLDQ4IEBACiB9CiAKIAorc3RhdGljIFB5T2JqZWN0ICoKK25hbWVzcGFjZV9yaWNoY29tcGFyZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm90aGVyLCBpbnQgb3ApCit7CisgICAgaWYgKFB5T2JqZWN0X1R5cGVDaGVjayhzZWxmLCAmX1B5TmFtZXNwYWNlX1R5cGUpICYmCisgICAgICAgIFB5T2JqZWN0X1R5cGVDaGVjayhvdGhlciwgJl9QeU5hbWVzcGFjZV9UeXBlKSkKKyAgICAgICAgcmV0dXJuIFB5T2JqZWN0X1JpY2hDb21wYXJlKCgoX1B5TmFtZXNwYWNlT2JqZWN0ICopc2VsZiktPm5zX2RpY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX1B5TmFtZXNwYWNlT2JqZWN0ICopb3RoZXIpLT5uc19kaWN0LCBvcCk7CisgICAgUHlfUkVUVVJOX05PVElNUExFTUVOVEVEOworfQorCisKK1B5RG9jX1NUUlZBUihuYW1lc3BhY2VfcmVkdWNlX19kb2NfXywgIlJldHVybiBzdGF0ZSBpbmZvcm1hdGlvbiBmb3IgcGlja2xpbmciKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK25hbWVzcGFjZV9yZWR1Y2UoX1B5TmFtZXNwYWNlT2JqZWN0ICpucykKK3sKKyAgICBQeU9iamVjdCAqcmVzdWx0LCAqYXJncyA9IFB5VHVwbGVfTmV3KDApOworCisgICAgaWYgKCFhcmdzKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHJlc3VsdCA9IFB5VHVwbGVfUGFjaygzLCAoUHlPYmplY3QgKilQeV9UWVBFKG5zKSwgYXJncywgbnMtPm5zX2RpY3QpOworICAgIFB5X0RFQ1JFRihhcmdzKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisKK3N0YXRpYyBQeU1ldGhvZERlZiBuYW1lc3BhY2VfbWV0aG9kc1tdID0geworICAgIHsiX19yZWR1Y2VfXyIsIChQeUNGdW5jdGlvbiluYW1lc3BhY2VfcmVkdWNlLCBNRVRIX05PQVJHUywKKyAgICAgbmFtZXNwYWNlX3JlZHVjZV9fZG9jX199LAorICAgIHtOVUxMLCAgICAgICAgIE5VTEx9ICAvKiBzZW50aW5lbCAqLworfTsKKworCiBQeURvY19TVFJWQVIobmFtZXNwYWNlX2RvYywKICJBIHNpbXBsZSBhdHRyaWJ1dGUtYmFzZWQgbmFtZXNwYWNlLlxuXAogXG5cCi1uYW1lc3BhY2UoKiprd2FyZ3MpIik7CitTaW1wbGVOYW1lc3BhY2UoKiprd2FyZ3MpIik7CiAKIFB5VHlwZU9iamVjdCBfUHlOYW1lc3BhY2VfVHlwZSA9IHsKICAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoJlB5VHlwZV9UeXBlLCAwKQotICAgICJuYW1lc3BhY2UiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbmFtZSAqLworICAgICJ0eXBlcy5TaW1wbGVOYW1lc3BhY2UiLCAgICAgICAgICAgICAgICAgICAgLyogdHBfbmFtZSAqLwogICAgIHNpemVvZihfUHlOYW1lc3BhY2VPYmplY3QpLCAgICAgICAgICAgICAgICAgLyogdHBfc2l6ZSAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlbXNpemUgKi8KICAgICAoZGVzdHJ1Y3RvciluYW1lc3BhY2VfZGVhbGxvYywgICAgICAgICAgICAgIC8qIHRwX2RlYWxsb2MgKi8KQEAgLTE4OCwxMSArMjI1LDExIEBACiAgICAgbmFtZXNwYWNlX2RvYywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kb2MgKi8KICAgICAodHJhdmVyc2Vwcm9jKW5hbWVzcGFjZV90cmF2ZXJzZSwgICAgICAgICAgIC8qIHRwX3RyYXZlcnNlICovCiAgICAgKGlucXVpcnkpbmFtZXNwYWNlX2NsZWFyLCAgICAgICAgICAgICAgICAgICAvKiB0cF9jbGVhciAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmljaGNvbXBhcmUgKi8KKyAgICBuYW1lc3BhY2VfcmljaGNvbXBhcmUsICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JpY2hjb21wYXJlICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlcm5leHQgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KKyAgICBuYW1lc3BhY2VfbWV0aG9kcywgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KICAgICBuYW1lc3BhY2VfbWVtYmVycywgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21lbWJlcnMgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldHNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzZSAqLwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9vYmplY3QuYyBiL09iamVjdHMvb2JqZWN0LmMKaW5kZXggZTA3OWQ1MS4uMzA3ZTNhYyAxMDA2NDQKLS0tIGEvT2JqZWN0cy9vYmplY3QuYworKysgYi9PYmplY3RzL29iamVjdC5jCkBAIC04LDYgKzgsMTIgQEAKIGV4dGVybiAiQyIgewogI2VuZGlmCiAKK19QeV9JREVOVElGSUVSKFB5X1JlcHIpOworX1B5X0lERU5USUZJRVIoX19ieXRlc19fKTsKK19QeV9JREVOVElGSUVSKF9fZGlyX18pOworX1B5X0lERU5USUZJRVIoX19pc2Fic3RyYWN0bWV0aG9kX18pOworX1B5X0lERU5USUZJRVIoYnVpbHRpbnMpOworCiAjaWZkZWYgUHlfUkVGX0RFQlVHCiBQeV9zc2l6ZV90IF9QeV9SZWZUb3RhbDsKIApAQCAtMjIsNyArMjgsNyBAQAogICAgIG8gPSBfUHlEaWN0X0R1bW15KCk7CiAgICAgaWYgKG8gIT0gTlVMTCkKICAgICAgICAgdG90YWwgLT0gby0+b2JfcmVmY250OwotICAgIG8gPSBfUHlTZXRfRHVtbXkoKTsKKyAgICBvID0gX1B5U2V0X0R1bW15OwogICAgIGlmIChvICE9IE5VTEwpCiAgICAgICAgIHRvdGFsIC09IG8tPm9iX3JlZmNudDsKICAgICByZXR1cm4gdG90YWw7CkBAIC0yNTUsNiArMjYxLDcyIEBACiAgICAgcmV0dXJuIFB5T2JqZWN0X0lOSVRfVkFSKG9wLCB0cCwgbml0ZW1zKTsKIH0KIAordm9pZAorUHlPYmplY3RfQ2FsbEZpbmFsaXplcihQeU9iamVjdCAqc2VsZikKK3sKKyAgICBQeVR5cGVPYmplY3QgKnRwID0gUHlfVFlQRShzZWxmKTsKKworICAgIC8qIFRoZSBmb3JtZXIgY291bGQgaGFwcGVuIG9uIGhlYXB0eXBlcyBjcmVhdGVkIGZyb20gdGhlIEMgQVBJLCBlLmcuCisgICAgICAgUHlUeXBlX0Zyb21TcGVjKCkuICovCisgICAgaWYgKCFQeVR5cGVfSGFzRmVhdHVyZSh0cCwgUHlfVFBGTEFHU19IQVZFX0ZJTkFMSVpFKSB8fAorICAgICAgICB0cC0+dHBfZmluYWxpemUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuOworICAgIC8qIHRwX2ZpbmFsaXplIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBvbmNlLiAqLworICAgIGlmIChQeVR5cGVfSVNfR0ModHApICYmIF9QeUdDX0ZJTkFMSVpFRChzZWxmKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgdHAtPnRwX2ZpbmFsaXplKHNlbGYpOworICAgIGlmIChQeVR5cGVfSVNfR0ModHApKQorICAgICAgICBfUHlHQ19TRVRfRklOQUxJWkVEKHNlbGYsIDEpOworfQorCitpbnQKK1B5T2JqZWN0X0NhbGxGaW5hbGl6ZXJGcm9tRGVhbGxvYyhQeU9iamVjdCAqc2VsZikKK3sKKyAgICBQeV9zc2l6ZV90IHJlZmNudDsKKworICAgIC8qIFRlbXBvcmFyaWx5IHJlc3VycmVjdCB0aGUgb2JqZWN0LiAqLworICAgIGlmIChzZWxmLT5vYl9yZWZjbnQgIT0gMCkgeworICAgICAgICBQeV9GYXRhbEVycm9yKCJQeU9iamVjdF9DYWxsRmluYWxpemVyRnJvbURlYWxsb2MgY2FsbGVkIG9uICIKKyAgICAgICAgICAgICAgICAgICAgICAib2JqZWN0IHdpdGggYSBub24temVybyByZWZjb3VudCIpOworICAgIH0KKyAgICBzZWxmLT5vYl9yZWZjbnQgPSAxOworCisgICAgUHlPYmplY3RfQ2FsbEZpbmFsaXplcihzZWxmKTsKKworICAgIC8qIFVuZG8gdGhlIHRlbXBvcmFyeSByZXN1cnJlY3Rpb247IGNhbid0IHVzZSBERUNSRUYgaGVyZSwgaXQgd291bGQKKyAgICAgKiBjYXVzZSBhIHJlY3Vyc2l2ZSBjYWxsLgorICAgICAqLworICAgIGFzc2VydChzZWxmLT5vYl9yZWZjbnQgPiAwKTsKKyAgICBpZiAoLS1zZWxmLT5vYl9yZWZjbnQgPT0gMCkKKyAgICAgICAgcmV0dXJuIDA7ICAgICAgICAgLyogdGhpcyBpcyB0aGUgbm9ybWFsIHBhdGggb3V0ICovCisKKyAgICAvKiB0cF9maW5hbGl6ZSByZXN1cnJlY3RlZCBpdCEgIE1ha2UgaXQgbG9vayBsaWtlIHRoZSBvcmlnaW5hbCBQeV9ERUNSRUYKKyAgICAgKiBuZXZlciBoYXBwZW5lZC4KKyAgICAgKi8KKyAgICByZWZjbnQgPSBzZWxmLT5vYl9yZWZjbnQ7CisgICAgX1B5X05ld1JlZmVyZW5jZShzZWxmKTsKKyAgICBzZWxmLT5vYl9yZWZjbnQgPSByZWZjbnQ7CisKKyAgICBpZiAoUHlUeXBlX0lTX0dDKFB5X1RZUEUoc2VsZikpKSB7CisgICAgICAgIGFzc2VydChfUHlHQ19SRUZTKHNlbGYpICE9IF9QeUdDX1JFRlNfVU5UUkFDS0VEKTsKKyAgICB9CisgICAgLyogSWYgUHlfUkVGX0RFQlVHLCBfUHlfTmV3UmVmZXJlbmNlIGJ1bXBlZCBfUHlfUmVmVG90YWwsIHNvCisgICAgICogd2UgbmVlZCB0byB1bmRvIHRoYXQuICovCisgICAgX1B5X0RFQ19SRUZUT1RBTDsKKyAgICAvKiBJZiBQeV9UUkFDRV9SRUZTLCBfUHlfTmV3UmVmZXJlbmNlIHJlLWFkZGVkIHNlbGYgdG8gdGhlIG9iamVjdAorICAgICAqIGNoYWluLCBzbyBubyBtb3JlIHRvIGRvIHRoZXJlLgorICAgICAqIElmIENPVU5UX0FMTE9DUywgdGhlIG9yaWdpbmFsIGRlY3JlZiBidW1wZWQgdHBfZnJlZXMsIGFuZAorICAgICAqIF9QeV9OZXdSZWZlcmVuY2UgYnVtcGVkIHRwX2FsbG9jczogIGJvdGggb2YgdGhvc2UgbmVlZCB0byBiZQorICAgICAqIHVuZG9uZS4KKyAgICAgKi8KKyNpZmRlZiBDT1VOVF9BTExPQ1MKKyAgICAtLVB5X1RZUEUoc2VsZiktPnRwX2ZyZWVzOworICAgIC0tUHlfVFlQRShzZWxmKS0+dHBfYWxsb2NzOworI2VuZGlmCisgICAgcmV0dXJuIC0xOworfQorCiBpbnQKIFB5T2JqZWN0X1ByaW50KFB5T2JqZWN0ICpvcCwgRklMRSAqZnAsIGludCBmbGFncykKIHsKQEAgLTM0MCwxMSArNDEyLDE3IEBACiAjaWZkZWYgV0lUSF9USFJFQUQKICAgICAgICAgUHlHSUxTdGF0ZV9TVEFURSBnaWw7CiAjZW5kaWYKKyAgICAgICAgUHlPYmplY3QgKmVycm9yX3R5cGUsICplcnJvcl92YWx1ZSwgKmVycm9yX3RyYWNlYmFjazsKKwogICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIm9iamVjdCAgOiAiKTsKICNpZmRlZiBXSVRIX1RIUkVBRAogICAgICAgICBnaWwgPSBQeUdJTFN0YXRlX0Vuc3VyZSgpOwogI2VuZGlmCisKKyAgICAgICAgUHlFcnJfRmV0Y2goJmVycm9yX3R5cGUsICZlcnJvcl92YWx1ZSwgJmVycm9yX3RyYWNlYmFjayk7CiAgICAgICAgICh2b2lkKVB5T2JqZWN0X1ByaW50KG9wLCBzdGRlcnIsIDApOworICAgICAgICBQeUVycl9SZXN0b3JlKGVycm9yX3R5cGUsIGVycm9yX3ZhbHVlLCBlcnJvcl90cmFjZWJhY2spOworCiAjaWZkZWYgV0lUSF9USFJFQUQKICAgICAgICAgUHlHSUxTdGF0ZV9SZWxlYXNlKGdpbCk7CiAjZW5kaWYKQEAgLTM3Nyw2ICs0NTUsMTQgQEAKICAgICBpZiAoUHlfVFlQRSh2KS0+dHBfcmVwciA9PSBOVUxMKQogICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIjwlcyBvYmplY3QgYXQgJXA+IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYtPm9iX3R5cGUtPnRwX25hbWUsIHYpOworCisjaWZkZWYgUHlfREVCVUcKKyAgICAvKiBQeU9iamVjdF9SZXByKCkgbXVzdCBub3QgYmUgY2FsbGVkIHdpdGggYW4gZXhjZXB0aW9uIHNldCwKKyAgICAgICBiZWNhdXNlIGl0IG1heSBjbGVhciBpdCAoZGlyZWN0bHkgb3IgaW5kaXJlY3RseSkgYW5kIHNvIHRoZQorICAgICAgIGNhbGxlciBsb3NlcyBpdHMgZXhjZXB0aW9uICovCisgICAgYXNzZXJ0KCFQeUVycl9PY2N1cnJlZCgpKTsKKyNlbmRpZgorCiAgICAgcmVzID0gKCp2LT5vYl90eXBlLT50cF9yZXByKSh2KTsKICAgICBpZiAocmVzID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtNDE5LDYgKzUwNSwxMyBAQAogICAgIGlmIChQeV9UWVBFKHYpLT50cF9zdHIgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIFB5T2JqZWN0X1JlcHIodik7CiAKKyNpZmRlZiBQeV9ERUJVRworICAgIC8qIFB5T2JqZWN0X1N0cigpIG11c3Qgbm90IGJlIGNhbGxlZCB3aXRoIGFuIGV4Y2VwdGlvbiBzZXQsCisgICAgICAgYmVjYXVzZSBpdCBtYXkgY2xlYXIgaXQgKGRpcmVjdGx5IG9yIGluZGlyZWN0bHkpIGFuZCBzbyB0aGUKKyAgICAgICBjYWxsZXIgbG9zZXMgaXRzIGV4Y2VwdGlvbiAqLworICAgIGFzc2VydCghUHlFcnJfT2NjdXJyZWQoKSk7CisjZW5kaWYKKwogICAgIC8qIEl0IGlzIHBvc3NpYmxlIGZvciBhIHR5cGUgdG8gaGF2ZSBhIHRwX3N0ciByZXByZXNlbnRhdGlvbiB0aGF0IGxvb3BzCiAgICAgICAgaW5maW5pdGVseS4gKi8KICAgICBpZiAoUHlfRW50ZXJSZWN1cnNpdmVDYWxsKCIgd2hpbGUgZ2V0dGluZyB0aGUgc3RyIG9mIGFuIG9iamVjdCIpKQpAQCAtNDUxLDYgKzU0NCw5IEBACiAgICAgaWYgKHJlcHIgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKKyAgICBpZiAoUHlVbmljb2RlX0lTX0FTQ0lJKHJlcHIpKQorICAgICAgICByZXR1cm4gcmVwcjsKKwogICAgIC8qIHJlcHIgaXMgZ3VhcmFudGVlZCB0byBiZSBhIFB5VW5pY29kZSBvYmplY3QgYnkgUHlPYmplY3RfUmVwciAqLwogICAgIGFzY2lpID0gX1B5VW5pY29kZV9Bc0FTQ0lJU3RyaW5nKHJlcHIsICJiYWNrc2xhc2hyZXBsYWNlIik7CiAgICAgUHlfREVDUkVGKHJlcHIpOwpAQCAtNDcwLDcgKzU2Niw2IEBACiBQeU9iamVjdF9CeXRlcyhQeU9iamVjdCAqdikKIHsKICAgICBQeU9iamVjdCAqcmVzdWx0LCAqZnVuYzsKLSAgICBfUHlfSURFTlRJRklFUihfX2J5dGVzX18pOwogCiAgICAgaWYgKHYgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIFB5Qnl0ZXNfRnJvbVN0cmluZygiPE5VTEw+Iik7CkBAIC02MzYsMTUwICs3MzEsNiBAQAogICAgIHJldHVybiBvazsKIH0KIAotLyogU2V0IG9mIGhhc2ggdXRpbGl0eSBmdW5jdGlvbnMgdG8gaGVscCBtYWludGFpbmluZyB0aGUgaW52YXJpYW50IHRoYXQKLSAgICBpZiBhPT1iIHRoZW4gaGFzaChhKT09aGFzaChiKQotCi0gICBBbGwgdGhlIHV0aWxpdHkgZnVuY3Rpb25zIChfUHlfSGFzaCooKSkgcmV0dXJuICItMSIgdG8gc2lnbmlmeSBhbiBlcnJvci4KLSovCi0KLS8qIEZvciBudW1lcmljIHR5cGVzLCB0aGUgaGFzaCBvZiBhIG51bWJlciB4IGlzIGJhc2VkIG9uIHRoZSByZWR1Y3Rpb24KLSAgIG9mIHggbW9kdWxvIHRoZSBwcmltZSBQID0gMioqX1B5SEFTSF9CSVRTIC0gMS4gIEl0J3MgZGVzaWduZWQgc28gdGhhdAotICAgaGFzaCh4KSA9PSBoYXNoKHkpIHdoZW5ldmVyIHggYW5kIHkgYXJlIG51bWVyaWNhbGx5IGVxdWFsLCBldmVuIGlmCi0gICB4IGFuZCB5IGhhdmUgZGlmZmVyZW50IHR5cGVzLgotCi0gICBBIHF1aWNrIHN1bW1hcnkgb2YgdGhlIGhhc2hpbmcgc3RyYXRlZ3k6Ci0KLSAgICgxKSBGaXJzdCBkZWZpbmUgdGhlICdyZWR1Y3Rpb24gb2YgeCBtb2R1bG8gUCcgZm9yIGFueSByYXRpb25hbAotICAgbnVtYmVyIHg7IHRoaXMgaXMgYSBzdGFuZGFyZCBleHRlbnNpb24gb2YgdGhlIHVzdWFsIG5vdGlvbiBvZgotICAgcmVkdWN0aW9uIG1vZHVsbyBQIGZvciBpbnRlZ2Vycy4gIElmIHggPT0gcC9xICh3cml0dGVuIGluIGxvd2VzdAotICAgdGVybXMpLCB0aGUgcmVkdWN0aW9uIGlzIGludGVycHJldGVkIGFzIHRoZSByZWR1Y3Rpb24gb2YgcCB0aW1lcwotICAgdGhlIGludmVyc2Ugb2YgdGhlIHJlZHVjdGlvbiBvZiBxLCBhbGwgbW9kdWxvIFA7IGlmIHEgaXMgZXhhY3RseQotICAgZGl2aXNpYmxlIGJ5IFAgdGhlbiBkZWZpbmUgdGhlIHJlZHVjdGlvbiB0byBiZSBpbmZpbml0eS4gIFNvIHdlJ3ZlCi0gICBnb3QgYSB3ZWxsLWRlZmluZWQgbWFwCi0KLSAgICAgIHJlZHVjZSA6IHsgcmF0aW9uYWwgbnVtYmVycyB9IC0+IHsgMCwgMSwgMiwgLi4uLCBQLTEsIGluZmluaXR5IH0uCi0KLSAgICgyKSBOb3cgZm9yIGEgcmF0aW9uYWwgbnVtYmVyIHgsIGRlZmluZSBoYXNoKHgpIGJ5OgotCi0gICAgICByZWR1Y2UoeCkgICBpZiB4ID49IDAKLSAgICAgIC1yZWR1Y2UoLXgpIGlmIHggPCAwCi0KLSAgIElmIHRoZSByZXN1bHQgb2YgdGhlIHJlZHVjdGlvbiBpcyBpbmZpbml0eSAodGhpcyBpcyBpbXBvc3NpYmxlIGZvcgotICAgaW50ZWdlcnMsIGZsb2F0cyBhbmQgRGVjaW1hbHMpIHRoZW4gdXNlIHRoZSBwcmVkZWZpbmVkIGhhc2ggdmFsdWUKLSAgIF9QeUhBU0hfSU5GIGZvciB4ID49IDAsIG9yIC1fUHlIQVNIX0lORiBmb3IgeCA8IDAsIGluc3RlYWQuCi0gICBfUHlIQVNIX0lORiwgLV9QeUhBU0hfSU5GIGFuZCBfUHlIQVNIX05BTiBhcmUgYWxzbyB1c2VkIGZvciB0aGUKLSAgIGhhc2hlcyBvZiBmbG9hdCBhbmQgRGVjaW1hbCBpbmZpbml0aWVzIGFuZCBuYW5zLgotCi0gICBBIHNlbGxpbmcgcG9pbnQgZm9yIHRoZSBhYm92ZSBzdHJhdGVneSBpcyB0aGF0IGl0IG1ha2VzIGl0IHBvc3NpYmxlCi0gICB0byBjb21wdXRlIGhhc2hlcyBvZiBkZWNpbWFsIGFuZCBiaW5hcnkgZmxvYXRpbmctcG9pbnQgbnVtYmVycwotICAgZWZmaWNpZW50bHksIGV2ZW4gaWYgdGhlIGV4cG9uZW50IG9mIHRoZSBiaW5hcnkgb3IgZGVjaW1hbCBudW1iZXIKLSAgIGlzIGxhcmdlLiAgVGhlIGtleSBwb2ludCBpcyB0aGF0Ci0KLSAgICAgIHJlZHVjZSh4ICogeSkgPT0gcmVkdWNlKHgpICogcmVkdWNlKHkpIChtb2R1bG8gX1B5SEFTSF9NT0RVTFVTKQotCi0gICBwcm92aWRlZCB0aGF0IHtyZWR1Y2UoeCksIHJlZHVjZSh5KX0gIT0gezAsIGluZmluaXR5fS4gIFRoZSByZWR1Y3Rpb24gb2YgYQotICAgYmluYXJ5IG9yIGRlY2ltYWwgZmxvYXQgaXMgbmV2ZXIgaW5maW5pdHksIHNpbmNlIHRoZSBkZW5vbWluYXRvciBpcyBhIHBvd2VyCi0gICBvZiAyIChmb3IgYmluYXJ5KSBvciBhIGRpdmlzb3Igb2YgYSBwb3dlciBvZiAxMCAoZm9yIGRlY2ltYWwpLiAgU28gd2UgaGF2ZSwKLSAgIGZvciBub25uZWdhdGl2ZSB4LAotCi0gICAgICByZWR1Y2UoeCAqIDIqKmUpID09IHJlZHVjZSh4KSAqIHJlZHVjZSgyKiplKSAlIF9QeUhBU0hfTU9EVUxVUwotCi0gICAgICByZWR1Y2UoeCAqIDEwKiplKSA9PSByZWR1Y2UoeCkgKiByZWR1Y2UoMTAqKmUpICUgX1B5SEFTSF9NT0RVTFVTCi0KLSAgIGFuZCByZWR1Y2UoMTAqKmUpIGNhbiBiZSBjb21wdXRlZCBlZmZpY2llbnRseSBieSB0aGUgdXN1YWwgbW9kdWxhcgotICAgZXhwb25lbnRpYXRpb24gYWxnb3JpdGhtLiAgRm9yIHJlZHVjZSgyKiplKSBpdCdzIGV2ZW4gYmV0dGVyOiBzaW5jZQotICAgUCBpcyBvZiB0aGUgZm9ybSAyKipuLTEsIHJlZHVjZSgyKiplKSBpcyAyKiooZSBtb2QgbiksIGFuZCBtdWx0aXBsaWNhdGlvbgotICAgYnkgMioqKGUgbW9kIG4pIG1vZHVsbyAyKipuLTEganVzdCBhbW91bnRzIHRvIGEgcm90YXRpb24gb2YgYml0cy4KLQotICAgKi8KLQotUHlfaGFzaF90Ci1fUHlfSGFzaERvdWJsZShkb3VibGUgdikKLXsKLSAgICBpbnQgZSwgc2lnbjsKLSAgICBkb3VibGUgbTsKLSAgICBQeV91aGFzaF90IHgsIHk7Ci0KLSAgICBpZiAoIVB5X0lTX0ZJTklURSh2KSkgewotICAgICAgICBpZiAoUHlfSVNfSU5GSU5JVFkodikpCi0gICAgICAgICAgICByZXR1cm4gdiA+IDAgPyBfUHlIQVNIX0lORiA6IC1fUHlIQVNIX0lORjsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIF9QeUhBU0hfTkFOOwotICAgIH0KLQotICAgIG0gPSBmcmV4cCh2LCAmZSk7Ci0KLSAgICBzaWduID0gMTsKLSAgICBpZiAobSA8IDApIHsKLSAgICAgICAgc2lnbiA9IC0xOwotICAgICAgICBtID0gLW07Ci0gICAgfQotCi0gICAgLyogcHJvY2VzcyAyOCBiaXRzIGF0IGEgdGltZTsgIHRoaXMgc2hvdWxkIHdvcmsgd2VsbCBib3RoIGZvciBiaW5hcnkKLSAgICAgICBhbmQgaGV4YWRlY2ltYWwgZmxvYXRpbmcgcG9pbnQuICovCi0gICAgeCA9IDA7Ci0gICAgd2hpbGUgKG0pIHsKLSAgICAgICAgeCA9ICgoeCA8PCAyOCkgJiBfUHlIQVNIX01PRFVMVVMpIHwgeCA+PiAoX1B5SEFTSF9CSVRTIC0gMjgpOwotICAgICAgICBtICo9IDI2ODQzNTQ1Ni4wOyAgLyogMioqMjggKi8KLSAgICAgICAgZSAtPSAyODsKLSAgICAgICAgeSA9IChQeV91aGFzaF90KW07ICAvKiBwdWxsIG91dCBpbnRlZ2VyIHBhcnQgKi8KLSAgICAgICAgbSAtPSB5OwotICAgICAgICB4ICs9IHk7Ci0gICAgICAgIGlmICh4ID49IF9QeUhBU0hfTU9EVUxVUykKLSAgICAgICAgICAgIHggLT0gX1B5SEFTSF9NT0RVTFVTOwotICAgIH0KLQotICAgIC8qIGFkanVzdCBmb3IgdGhlIGV4cG9uZW50OyAgZmlyc3QgcmVkdWNlIGl0IG1vZHVsbyBfUHlIQVNIX0JJVFMgKi8KLSAgICBlID0gZSA+PSAwID8gZSAlIF9QeUhBU0hfQklUUyA6IF9QeUhBU0hfQklUUy0xLSgoLTEtZSkgJSBfUHlIQVNIX0JJVFMpOwotICAgIHggPSAoKHggPDwgZSkgJiBfUHlIQVNIX01PRFVMVVMpIHwgeCA+PiAoX1B5SEFTSF9CSVRTIC0gZSk7Ci0KLSAgICB4ID0geCAqIHNpZ247Ci0gICAgaWYgKHggPT0gKFB5X3VoYXNoX3QpLTEpCi0gICAgICAgIHggPSAoUHlfdWhhc2hfdCktMjsKLSAgICByZXR1cm4gKFB5X2hhc2hfdCl4OwotfQotCi1QeV9oYXNoX3QKLV9QeV9IYXNoUG9pbnRlcih2b2lkICpwKQotewotICAgIFB5X2hhc2hfdCB4OwotICAgIHNpemVfdCB5ID0gKHNpemVfdClwOwotICAgIC8qIGJvdHRvbSAzIG9yIDQgYml0cyBhcmUgbGlrZWx5IHRvIGJlIDA7IHJvdGF0ZSB5IGJ5IDQgdG8gYXZvaWQKLSAgICAgICBleGNlc3NpdmUgaGFzaCBjb2xsaXNpb25zIGZvciBkaWN0cyBhbmQgc2V0cyAqLwotICAgIHkgPSAoeSA+PiA0KSB8ICh5IDw8ICg4ICogU0laRU9GX1ZPSURfUCAtIDQpKTsKLSAgICB4ID0gKFB5X2hhc2hfdCl5OwotICAgIGlmICh4ID09IC0xKQotICAgICAgICB4ID0gLTI7Ci0gICAgcmV0dXJuIHg7Ci19Ci0KLVB5X2hhc2hfdAotX1B5X0hhc2hCeXRlcyh1bnNpZ25lZCBjaGFyICpwLCBQeV9zc2l6ZV90IGxlbikKLXsKLSAgICBQeV91aGFzaF90IHg7Ci0gICAgUHlfc3NpemVfdCBpOwotCi0gICAgLyoKLSAgICAgIFdlIG1ha2UgdGhlIGhhc2ggb2YgdGhlIGVtcHR5IHN0cmluZyBiZSAwLCByYXRoZXIgdGhhbiB1c2luZwotICAgICAgKHByZWZpeCBeIHN1ZmZpeCksIHNpbmNlIHRoaXMgc2xpZ2h0bHkgb2JmdXNjYXRlcyB0aGUgaGFzaCBzZWNyZXQKLSAgICAqLwotI2lmZGVmIFB5X0RFQlVHCi0gICAgYXNzZXJ0KF9QeV9IYXNoU2VjcmV0X0luaXRpYWxpemVkKTsKLSNlbmRpZgotICAgIGlmIChsZW4gPT0gMCkgewotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgeCA9IChQeV91aGFzaF90KSBfUHlfSGFzaFNlY3JldC5wcmVmaXg7Ci0gICAgeCBePSAoUHlfdWhhc2hfdCkgKnAgPDwgNzsKLSAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCi0gICAgICAgIHggPSAoX1B5SEFTSF9NVUxUSVBMSUVSICogeCkgXiAoUHlfdWhhc2hfdCkgKnArKzsKLSAgICB4IF49IChQeV91aGFzaF90KSBsZW47Ci0gICAgeCBePSAoUHlfdWhhc2hfdCkgX1B5X0hhc2hTZWNyZXQuc3VmZml4OwotICAgIGlmICh4ID09IC0xKQotICAgICAgICB4ID0gLTI7Ci0gICAgcmV0dXJuIHg7Ci19Ci0KIFB5X2hhc2hfdAogUHlPYmplY3RfSGFzaE5vdEltcGxlbWVudGVkKFB5T2JqZWN0ICp2KQogewpAQCAtNzg4LDggKzczOSw2IEBACiAgICAgcmV0dXJuIC0xOwogfQogCi1fUHlfSGFzaFNlY3JldF90IF9QeV9IYXNoU2VjcmV0OwotCiBQeV9oYXNoX3QKIFB5T2JqZWN0X0hhc2goUHlPYmplY3QgKnYpCiB7CkBAIC04NTksNyArODA4LDYgQEAKIHsKICAgICBpbnQgcmVzOwogICAgIFB5T2JqZWN0KiBpc2Fic3RyYWN0OwotICAgIF9QeV9JREVOVElGSUVSKF9faXNhYnN0cmFjdG1ldGhvZF9fKTsKIAogICAgIGlmIChvYmogPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xMDMyLDggKzk4MCwxMiBAQAogUHlPYmplY3QgKgogX1B5T2JqZWN0X0dldEJ1aWx0aW4oY29uc3QgY2hhciAqbmFtZSkKIHsKLSAgICBQeU9iamVjdCAqbW9kLCAqYXR0cjsKLSAgICBtb2QgPSBQeUltcG9ydF9JbXBvcnRNb2R1bGUoImJ1aWx0aW5zIik7CisgICAgUHlPYmplY3QgKm1vZF9uYW1lLCAqbW9kLCAqYXR0cjsKKworICAgIG1vZF9uYW1lID0gX1B5VW5pY29kZV9Gcm9tSWQoJlB5SWRfYnVpbHRpbnMpOyAgIC8qIGJvcnJvd2VkICovCisgICAgaWYgKG1vZF9uYW1lID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIG1vZCA9IFB5SW1wb3J0X0ltcG9ydChtb2RfbmFtZSk7CiAgICAgaWYgKG1vZCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBhdHRyID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhtb2QsIG5hbWUpOwpAQCAtMTMxNywxMiArMTI2OSwxMSBAQAogX2Rpcl9sb2NhbHModm9pZCkKIHsKICAgICBQeU9iamVjdCAqbmFtZXM7Ci0gICAgUHlPYmplY3QgKmxvY2FscyA9IFB5RXZhbF9HZXRMb2NhbHMoKTsKKyAgICBQeU9iamVjdCAqbG9jYWxzOwogCi0gICAgaWYgKGxvY2FscyA9PSBOVUxMKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19TeXN0ZW1FcnJvciwgImZyYW1lIGRvZXMgbm90IGV4aXN0Iik7CisgICAgbG9jYWxzID0gUHlFdmFsX0dldExvY2FscygpOworICAgIGlmIChsb2NhbHMgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQogCiAgICAgbmFtZXMgPSBQeU1hcHBpbmdfS2V5cyhsb2NhbHMpOwogICAgIGlmICghbmFtZXMpCkBAIC0xMzQ3LDcgKzEyOTgsNiBAQAogX2Rpcl9vYmplY3QoUHlPYmplY3QgKm9iaikKIHsKICAgICBQeU9iamVjdCAqcmVzdWx0LCAqc29ydGVkOwotICAgIF9QeV9JREVOVElGSUVSKF9fZGlyX18pOwogICAgIFB5T2JqZWN0ICpkaXJmdW5jID0gX1B5T2JqZWN0X0xvb2t1cFNwZWNpYWwob2JqLCAmUHlJZF9fX2Rpcl9fKTsKIAogICAgIGFzc2VydChvYmopOwpAQCAtMTUxNSw2ICsxNDY1LDE3IEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCitOb3RJbXBsZW1lbnRlZF9yZWR1Y2UoUHlPYmplY3QgKm9wKQoreworICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZygiTm90SW1wbGVtZW50ZWQiKTsKK30KKworc3RhdGljIFB5TWV0aG9kRGVmIG5vdGltcGxlbWVudGVkX21ldGhvZHNbXSA9IHsKKyAgICB7Il9fcmVkdWNlX18iLCAoUHlDRnVuY3Rpb24pTm90SW1wbGVtZW50ZWRfcmVkdWNlLCBNRVRIX05PQVJHUywgTlVMTH0sCisgICAge05VTEwsIE5VTEx9Cit9OworCitzdGF0aWMgUHlPYmplY3QgKgogbm90aW1wbGVtZW50ZWRfbmV3KFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCiB7CiAgICAgaWYgKFB5VHVwbGVfR0VUX1NJWkUoYXJncykgfHwgKGt3YXJncyAmJiBQeURpY3RfU2l6ZShrd2FyZ3MpKSkgewpAQCAtMTUyNCwxMiArMTQ4NSwyMSBAQAogICAgIFB5X1JFVFVSTl9OT1RJTVBMRU1FTlRFRDsKIH0KIAorc3RhdGljIHZvaWQKK25vdGltcGxlbWVudGVkX2RlYWxsb2MoUHlPYmplY3QqIGlnbm9yZSkKK3sKKyAgICAvKiBUaGlzIHNob3VsZCBuZXZlciBnZXQgY2FsbGVkLCBidXQgd2UgYWxzbyBkb24ndCB3YW50IHRvIFNFR1YgaWYKKyAgICAgKiB3ZSBhY2NpZGVudGFsbHkgZGVjcmVmIE5vdEltcGxlbWVudGVkIG91dCBvZiBleGlzdGVuY2UuCisgICAgICovCisgICAgUHlfRmF0YWxFcnJvcigiZGVhbGxvY2F0aW5nIE5vdEltcGxlbWVudGVkIik7Cit9CisKIFB5VHlwZU9iamVjdCBfUHlOb3RJbXBsZW1lbnRlZF9UeXBlID0gewogICAgIFB5VmFyT2JqZWN0X0hFQURfSU5JVCgmUHlUeXBlX1R5cGUsIDApCiAgICAgIk5vdEltcGxlbWVudGVkVHlwZSIsCiAgICAgMCwKICAgICAwLAotICAgIG5vbmVfZGVhbGxvYywgICAgICAgLyp0cF9kZWFsbG9jKi8gLypuZXZlciBjYWxsZWQqLworICAgIG5vdGltcGxlbWVudGVkX2RlYWxsb2MsICAgICAgIC8qdHBfZGVhbGxvYyovIC8qbmV2ZXIgY2FsbGVkKi8KICAgICAwLCAgICAgICAgICAgICAgICAgIC8qdHBfcHJpbnQqLwogICAgIDAsICAgICAgICAgICAgICAgICAgLyp0cF9nZXRhdHRyKi8KICAgICAwLCAgICAgICAgICAgICAgICAgIC8qdHBfc2V0YXR0ciovCkBAIC0xNTUyLDcgKzE1MjIsNyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgLyp0cF93ZWFrbGlzdG9mZnNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgLyp0cF9pdGVyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAvKnRwX2l0ZXJuZXh0ICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAvKnRwX21ldGhvZHMgKi8KKyAgICBub3RpbXBsZW1lbnRlZF9tZXRob2RzLCAvKnRwX21ldGhvZHMgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgIC8qdHBfbWVtYmVycyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgLyp0cF9nZXRzZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgIC8qdHBfYmFzZSAqLwpAQCAtMTY5OSwxNSArMTY2OSw2IEBACiAgICAgaWYgKFB5VHlwZV9SZWFkeSgmUHlNZW1iZXJEZXNjcl9UeXBlKSA8IDApCiAgICAgICAgIFB5X0ZhdGFsRXJyb3IoIkNhbid0IGluaXRpYWxpemUgbWVtYmVyIGRlc2NyaXB0b3IgdHlwZSIpOwogCi0gICAgaWYgKFB5VHlwZV9SZWFkeSgmUHlGaWx0ZXJfVHlwZSkgPCAwKQotICAgICAgICBQeV9GYXRhbEVycm9yKCJDYW4ndCBpbml0aWFsaXplIGZpbHRlciB0eXBlIik7Ci0KLSAgICBpZiAoUHlUeXBlX1JlYWR5KCZQeU1hcF9UeXBlKSA8IDApCi0gICAgICAgIFB5X0ZhdGFsRXJyb3IoIkNhbid0IGluaXRpYWxpemUgbWFwIHR5cGUiKTsKLQotICAgIGlmIChQeVR5cGVfUmVhZHkoJlB5WmlwX1R5cGUpIDwgMCkKLSAgICAgICAgUHlfRmF0YWxFcnJvcigiQ2FuJ3QgaW5pdGlhbGl6ZSB6aXAgdHlwZSIpOwotCiAgICAgaWYgKFB5VHlwZV9SZWFkeSgmX1B5TmFtZXNwYWNlX1R5cGUpIDwgMCkKICAgICAgICAgUHlfRmF0YWxFcnJvcigiQ2FuJ3QgaW5pdGlhbGl6ZSBuYW1lc3BhY2UgdHlwZSIpOwogCkBAIC0xNzQ5LDEwICsxNzEwLDEwIEBACiB9CiAKIHZvaWQKLV9QeV9Gb3JnZXRSZWZlcmVuY2UocmVnaXN0ZXIgUHlPYmplY3QgKm9wKQorX1B5X0ZvcmdldFJlZmVyZW5jZShQeU9iamVjdCAqb3ApCiB7CiAjaWZkZWYgU0xPV19VTlJFRl9DSEVDSwotICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICpwOworICAgIFB5T2JqZWN0ICpwOwogI2VuZGlmCiAgICAgaWYgKG9wLT5vYl9yZWZjbnQgPCAwKQogICAgICAgICBQeV9GYXRhbEVycm9yKCJVTlJFRiBuZWdhdGl2ZSByZWZjbnQiKTsKQEAgLTE4NTYsMjYgKzE4MTcsNiBAQAogUHlfc3NpemVfdCAoKl9QeV9hYnN0cmFjdF9oYWNrKShQeU9iamVjdCAqKSA9IFB5T2JqZWN0X1NpemU7CiAKIAotLyogUHl0aG9uJ3MgbWFsbG9jIHdyYXBwZXJzIChzZWUgcHltZW0uaCkgKi8KLQotdm9pZCAqCi1QeU1lbV9NYWxsb2Moc2l6ZV90IG5ieXRlcykKLXsKLSAgICByZXR1cm4gUHlNZW1fTUFMTE9DKG5ieXRlcyk7Ci19Ci0KLXZvaWQgKgotUHlNZW1fUmVhbGxvYyh2b2lkICpwLCBzaXplX3QgbmJ5dGVzKQotewotICAgIHJldHVybiBQeU1lbV9SRUFMTE9DKHAsIG5ieXRlcyk7Ci19Ci0KLXZvaWQKLVB5TWVtX0ZyZWUodm9pZCAqcCkKLXsKLSAgICBQeU1lbV9GUkVFKHApOwotfQotCiB2b2lkCiBfUHlPYmplY3RfRGVidWdUeXBlU3RhdHMoRklMRSAqb3V0KQogewpAQCAtMTg4NSw3ICsxODI2LDYgQEAKICAgICBfUHlGcmFtZV9EZWJ1Z01hbGxvY1N0YXRzKG91dCk7CiAgICAgX1B5TGlzdF9EZWJ1Z01hbGxvY1N0YXRzKG91dCk7CiAgICAgX1B5TWV0aG9kX0RlYnVnTWFsbG9jU3RhdHMob3V0KTsKLSAgICBfUHlTZXRfRGVidWdNYWxsb2NTdGF0cyhvdXQpOwogICAgIF9QeVR1cGxlX0RlYnVnTWFsbG9jU3RhdHMob3V0KTsKIH0KIApAQCAtMTkwMSw4ICsxODQxLDYgQEAKICAgIFNlZSBkaWN0b2JqZWN0LmMgYW5kIGxpc3RvYmplY3QuYyBmb3IgZXhhbXBsZXMgb2YgdXNlLgogKi8KIAotI2RlZmluZSBLRVkgIlB5X1JlcHIiCi0KIGludAogUHlfUmVwckVudGVyKFB5T2JqZWN0ICpvYmopCiB7CkBAIC0xOTExLDE0ICsxODQ5LDE2IEBACiAgICAgUHlfc3NpemVfdCBpOwogCiAgICAgZGljdCA9IFB5VGhyZWFkU3RhdGVfR2V0RGljdCgpOworICAgIC8qIElnbm9yZSBhIG1pc3NpbmcgdGhyZWFkLXN0YXRlLCBzbyB0aGF0IHRoaXMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZAorICAgICAgIGVhcmx5IG9uIHN0YXJ0dXAuICovCiAgICAgaWYgKGRpY3QgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgbGlzdCA9IFB5RGljdF9HZXRJdGVtU3RyaW5nKGRpY3QsIEtFWSk7CisgICAgbGlzdCA9IF9QeURpY3RfR2V0SXRlbUlkKGRpY3QsICZQeUlkX1B5X1JlcHIpOwogICAgIGlmIChsaXN0ID09IE5VTEwpIHsKICAgICAgICAgbGlzdCA9IFB5TGlzdF9OZXcoMCk7CiAgICAgICAgIGlmIChsaXN0ID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhkaWN0LCBLRVksIGxpc3QpIDwgMCkKKyAgICAgICAgaWYgKF9QeURpY3RfU2V0SXRlbUlkKGRpY3QsICZQeUlkX1B5X1JlcHIsIGxpc3QpIDwgMCkKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgUHlfREVDUkVGKGxpc3QpOwogICAgIH0KQEAgLTE5MjcsNyArMTg2Nyw4IEBACiAgICAgICAgIGlmIChQeUxpc3RfR0VUX0lURU0obGlzdCwgaSkgPT0gb2JqKQogICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgfQotICAgIFB5TGlzdF9BcHBlbmQobGlzdCwgb2JqKTsKKyAgICBpZiAoUHlMaXN0X0FwcGVuZChsaXN0LCBvYmopIDwgMCkKKyAgICAgICAgcmV0dXJuIC0xOwogICAgIHJldHVybiAwOwogfQogCkBAIC0xOTM3LDEzICsxODc4LDE4IEBACiAgICAgUHlPYmplY3QgKmRpY3Q7CiAgICAgUHlPYmplY3QgKmxpc3Q7CiAgICAgUHlfc3NpemVfdCBpOworICAgIFB5T2JqZWN0ICplcnJvcl90eXBlLCAqZXJyb3JfdmFsdWUsICplcnJvcl90cmFjZWJhY2s7CisKKyAgICBQeUVycl9GZXRjaCgmZXJyb3JfdHlwZSwgJmVycm9yX3ZhbHVlLCAmZXJyb3JfdHJhY2ViYWNrKTsKIAogICAgIGRpY3QgPSBQeVRocmVhZFN0YXRlX0dldERpY3QoKTsKICAgICBpZiAoZGljdCA9PSBOVUxMKQotICAgICAgICByZXR1cm47Ci0gICAgbGlzdCA9IFB5RGljdF9HZXRJdGVtU3RyaW5nKGRpY3QsIEtFWSk7CisgICAgICAgIGdvdG8gZmluYWxseTsKKworICAgIGxpc3QgPSBfUHlEaWN0X0dldEl0ZW1JZChkaWN0LCAmUHlJZF9QeV9SZXByKTsKICAgICBpZiAobGlzdCA9PSBOVUxMIHx8ICFQeUxpc3RfQ2hlY2sobGlzdCkpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgZ290byBmaW5hbGx5OworCiAgICAgaSA9IFB5TGlzdF9HRVRfU0laRShsaXN0KTsKICAgICAvKiBDb3VudCBiYWNrd2FyZHMgYmVjYXVzZSB3ZSBhbHdheXMgZXhwZWN0IG9iaiB0byBiZSBsaXN0Wy0xXSAqLwogICAgIHdoaWxlICgtLWkgPj0gMCkgewpAQCAtMTk1Miw2ICsxODk4LDEwIEBACiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KKworZmluYWxseToKKyAgICAvKiBpZ25vcmUgZXhjZXB0aW9ucyBiZWNhdXNlIHRoZXJlIGlzIG5vIHdheSB0byByZXBvcnQgdGhlbS4gKi8KKyAgICBQeUVycl9SZXN0b3JlKGVycm9yX3R5cGUsIGVycm9yX3ZhbHVlLCBlcnJvcl90cmFjZWJhY2spOwogfQogCiAvKiBUcmFzaGNhbiBzdXBwb3J0LiAqLwpAQCAtMTk3Miw3ICsxOTIyLDcgQEAKIF9QeVRyYXNoX2RlcG9zaXRfb2JqZWN0KFB5T2JqZWN0ICpvcCkKIHsKICAgICBhc3NlcnQoUHlPYmplY3RfSVNfR0Mob3ApKTsKLSAgICBhc3NlcnQoX1B5X0FTX0dDKG9wKS0+Z2MuZ2NfcmVmcyA9PSBfUHlHQ19SRUZTX1VOVFJBQ0tFRCk7CisgICAgYXNzZXJ0KF9QeUdDX1JFRlMob3ApID09IF9QeUdDX1JFRlNfVU5UUkFDS0VEKTsKICAgICBhc3NlcnQob3AtPm9iX3JlZmNudCA9PSAwKTsKICAgICBfUHlfQVNfR0Mob3ApLT5nYy5nY19wcmV2ID0gKFB5R0NfSGVhZCAqKV9QeVRyYXNoX2RlbGV0ZV9sYXRlcjsKICAgICBfUHlUcmFzaF9kZWxldGVfbGF0ZXIgPSBvcDsKQEAgLTE5ODQsNyArMTkzNCw3IEBACiB7CiAgICAgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlID0gUHlUaHJlYWRTdGF0ZV9HRVQoKTsKICAgICBhc3NlcnQoUHlPYmplY3RfSVNfR0Mob3ApKTsKLSAgICBhc3NlcnQoX1B5X0FTX0dDKG9wKS0+Z2MuZ2NfcmVmcyA9PSBfUHlHQ19SRUZTX1VOVFJBQ0tFRCk7CisgICAgYXNzZXJ0KF9QeUdDX1JFRlMob3ApID09IF9QeUdDX1JFRlNfVU5UUkFDS0VEKTsKICAgICBhc3NlcnQob3AtPm9iX3JlZmNudCA9PSAwKTsKICAgICBfUHlfQVNfR0Mob3ApLT5nYy5nY19wcmV2ID0gKFB5R0NfSGVhZCAqKSB0c3RhdGUtPnRyYXNoX2RlbGV0ZV9sYXRlcjsKICAgICB0c3RhdGUtPnRyYXNoX2RlbGV0ZV9sYXRlciA9IG9wOwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9vYm1hbGxvYy5jIGIvT2JqZWN0cy9vYm1hbGxvYy5jCmluZGV4IGMyNjFiNjguLjNjMzMyNTUgMTAwNjQ0Ci0tLSBhL09iamVjdHMvb2JtYWxsb2MuYworKysgYi9PYmplY3RzL29ibWFsbG9jLmMKQEAgLTEsMTQgKzEsMzc0IEBACiAjaW5jbHVkZSAiUHl0aG9uLmgiCiAKLSNpZmRlZiBXSVRIX1BZTUFMTE9DCisvKiBQeXRob24ncyBtYWxsb2Mgd3JhcHBlcnMgKHNlZSBweW1lbS5oKSAqLwogCi0jaWZkZWYgSEFWRV9NTUFQCi0gI2luY2x1ZGUgPHN5cy9tbWFuLmg+Ci0gI2lmZGVmIE1BUF9BTk9OWU1PVVMKLSAgI2RlZmluZSBBUkVOQVNfVVNFX01NQVAKKyNpZmRlZiBQWU1BTExPQ19ERUJVRyAgIC8qIFdJVEhfUFlNQUxMT0MgJiYgUFlNQUxMT0NfREVCVUcgKi8KKy8qIEZvcndhcmQgZGVjbGFyYXRpb24gKi8KK3N0YXRpYyB2b2lkKiBfUHlNZW1fRGVidWdNYWxsb2Modm9pZCAqY3R4LCBzaXplX3Qgc2l6ZSk7CitzdGF0aWMgdm9pZCBfUHlNZW1fRGVidWdGcmVlKHZvaWQgKmN0eCwgdm9pZCAqcCk7CitzdGF0aWMgdm9pZCogX1B5TWVtX0RlYnVnUmVhbGxvYyh2b2lkICpjdHgsIHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpOworCitzdGF0aWMgdm9pZCBfUHlPYmplY3RfRGVidWdEdW1wQWRkcmVzcyhjb25zdCB2b2lkICpwKTsKK3N0YXRpYyB2b2lkIF9QeU1lbV9EZWJ1Z0NoZWNrQWRkcmVzcyhjaGFyIGFwaV9pZCwgY29uc3Qgdm9pZCAqcCk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoX19oYXNfZmVhdHVyZSkgIC8qIENsYW5nICovCisgI2lmIF9faGFzX2ZlYXR1cmUoYWRkcmVzc19zYW5pdGl6ZXIpICAvKiBpcyBBU0FOIGVuYWJsZWQ/ICovCisgICNkZWZpbmUgQVRUUklCVVRFX05PX0FERFJFU1NfU0FGRVRZX0FOQUxZU0lTIFwKKyAgICAgICAgX19hdHRyaWJ1dGVfXygobm9fYWRkcmVzc19zYWZldHlfYW5hbHlzaXMpKSBcCisgICAgICAgIF9fYXR0cmlidXRlX18gKChub2lubGluZSkpCisgI2Vsc2UKKyAgI2RlZmluZSBBVFRSSUJVVEVfTk9fQUREUkVTU19TQUZFVFlfQU5BTFlTSVMKKyAjZW5kaWYKKyNlbHNlCisgI2lmIGRlZmluZWQoX19TQU5JVElaRV9BRERSRVNTX18pICAvKiBHQ0MgNC44LngsIGlzIEFTQU4gZW5hYmxlZD8gKi8KKyAgI2RlZmluZSBBVFRSSUJVVEVfTk9fQUREUkVTU19TQUZFVFlfQU5BTFlTSVMgXAorICAgICAgICBfX2F0dHJpYnV0ZV9fKChub19hZGRyZXNzX3NhZmV0eV9hbmFseXNpcykpIFwKKyAgICAgICAgX19hdHRyaWJ1dGVfXyAoKG5vaW5saW5lKSkKKyAjZWxzZQorICAjZGVmaW5lIEFUVFJJQlVURV9OT19BRERSRVNTX1NBRkVUWV9BTkFMWVNJUwogICNlbmRpZgogI2VuZGlmCiAKKyNpZmRlZiBXSVRIX1BZTUFMTE9DCisKKyNpZmRlZiBNU19XSU5ET1dTCisjICBpbmNsdWRlIDx3aW5kb3dzLmg+CisjZWxpZiBkZWZpbmVkKEhBVkVfTU1BUCkKKyMgIGluY2x1ZGUgPHN5cy9tbWFuLmg+CisjICBpZmRlZiBNQVBfQU5PTllNT1VTCisjICAgIGRlZmluZSBBUkVOQVNfVVNFX01NQVAKKyMgIGVuZGlmCisjZW5kaWYKKworLyogRm9yd2FyZCBkZWNsYXJhdGlvbiAqLworc3RhdGljIHZvaWQqIF9QeU9iamVjdF9NYWxsb2Modm9pZCAqY3R4LCBzaXplX3Qgc2l6ZSk7CitzdGF0aWMgdm9pZCBfUHlPYmplY3RfRnJlZSh2b2lkICpjdHgsIHZvaWQgKnApOworc3RhdGljIHZvaWQqIF9QeU9iamVjdF9SZWFsbG9jKHZvaWQgKmN0eCwgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSk7CisjZW5kaWYKKworCitzdGF0aWMgdm9pZCAqCitfUHlNZW1fUmF3TWFsbG9jKHZvaWQgKmN0eCwgc2l6ZV90IHNpemUpCit7CisgICAgLyogUHlNZW1fTWFsbG9jKDApIG1lYW5zIG1hbGxvYygxKS4gU29tZSBzeXN0ZW1zIHdvdWxkIHJldHVybiBOVUxMCisgICAgICAgZm9yIG1hbGxvYygwKSwgd2hpY2ggd291bGQgYmUgdHJlYXRlZCBhcyBhbiBlcnJvci4gU29tZSBwbGF0Zm9ybXMgd291bGQKKyAgICAgICByZXR1cm4gYSBwb2ludGVyIHdpdGggbm8gbWVtb3J5IGJlaGluZCBpdCwgd2hpY2ggd291bGQgYnJlYWsgcHltYWxsb2MuCisgICAgICAgVG8gc29sdmUgdGhlc2UgcHJvYmxlbXMsIGFsbG9jYXRlIGFuIGV4dHJhIGJ5dGUuICovCisgICAgaWYgKHNpemUgPT0gMCkKKyAgICAgICAgc2l6ZSA9IDE7CisgICAgcmV0dXJuIG1hbGxvYyhzaXplKTsKK30KKworc3RhdGljIHZvaWQgKgorX1B5TWVtX1Jhd1JlYWxsb2Modm9pZCAqY3R4LCB2b2lkICpwdHIsIHNpemVfdCBzaXplKQoreworICAgIGlmIChzaXplID09IDApCisgICAgICAgIHNpemUgPSAxOworICAgIHJldHVybiByZWFsbG9jKHB0ciwgc2l6ZSk7Cit9CisKK3N0YXRpYyB2b2lkCitfUHlNZW1fUmF3RnJlZSh2b2lkICpjdHgsIHZvaWQgKnB0cikKK3sKKyAgICBmcmVlKHB0cik7Cit9CisKKworI2lmZGVmIE1TX1dJTkRPV1MKK3N0YXRpYyB2b2lkICoKK19QeU9iamVjdF9BcmVuYVZpcnR1YWxBbGxvYyh2b2lkICpjdHgsIHNpemVfdCBzaXplKQoreworICAgIHJldHVybiBWaXJ0dWFsQWxsb2MoTlVMTCwgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1FTV9DT01NSVQgfCBNRU1fUkVTRVJWRSwgUEFHRV9SRUFEV1JJVEUpOworfQorCitzdGF0aWMgdm9pZAorX1B5T2JqZWN0X0FyZW5hVmlydHVhbEZyZWUodm9pZCAqY3R4LCB2b2lkICpwdHIsIHNpemVfdCBzaXplKQoreworICAgIFZpcnR1YWxGcmVlKHB0ciwgMCwgTUVNX1JFTEVBU0UpOworfQorCisjZWxpZiBkZWZpbmVkKEFSRU5BU19VU0VfTU1BUCkKK3N0YXRpYyB2b2lkICoKK19QeU9iamVjdF9BcmVuYU1tYXAodm9pZCAqY3R4LCBzaXplX3Qgc2l6ZSkKK3sKKyAgICB2b2lkICpwdHI7CisgICAgcHRyID0gbW1hcChOVUxMLCBzaXplLCBQUk9UX1JFQUR8UFJPVF9XUklURSwKKyAgICAgICAgICAgICAgIE1BUF9QUklWQVRFfE1BUF9BTk9OWU1PVVMsIC0xLCAwKTsKKyAgICBpZiAocHRyID09IE1BUF9GQUlMRUQpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGFzc2VydChwdHIgIT0gTlVMTCk7CisgICAgcmV0dXJuIHB0cjsKK30KKworc3RhdGljIHZvaWQKK19QeU9iamVjdF9BcmVuYU11bm1hcCh2b2lkICpjdHgsIHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpCit7CisgICAgbXVubWFwKHB0ciwgc2l6ZSk7Cit9CisKKyNlbHNlCitzdGF0aWMgdm9pZCAqCitfUHlPYmplY3RfQXJlbmFNYWxsb2Modm9pZCAqY3R4LCBzaXplX3Qgc2l6ZSkKK3sKKyAgICByZXR1cm4gbWFsbG9jKHNpemUpOworfQorCitzdGF0aWMgdm9pZAorX1B5T2JqZWN0X0FyZW5hRnJlZSh2b2lkICpjdHgsIHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpCit7CisgICAgZnJlZShwdHIpOworfQorI2VuZGlmCisKKworI2RlZmluZSBQWVJBV19GVU5DUyBfUHlNZW1fUmF3TWFsbG9jLCBfUHlNZW1fUmF3UmVhbGxvYywgX1B5TWVtX1Jhd0ZyZWUKKyNpZmRlZiBXSVRIX1BZTUFMTE9DCisjICBkZWZpbmUgUFlPQkpfRlVOQ1MgX1B5T2JqZWN0X01hbGxvYywgX1B5T2JqZWN0X1JlYWxsb2MsIF9QeU9iamVjdF9GcmVlCisjZWxzZQorIyAgZGVmaW5lIFBZT0JKX0ZVTkNTIFBZUkFXX0ZVTkNTCisjZW5kaWYKKyNkZWZpbmUgUFlNRU1fRlVOQ1MgUFlSQVdfRlVOQ1MKKworI2lmZGVmIFBZTUFMTE9DX0RFQlVHCit0eXBlZGVmIHN0cnVjdCB7CisgICAgLyogV2UgdGFnIGVhY2ggYmxvY2sgd2l0aCBhbiBBUEkgSUQgaW4gb3JkZXIgdG8gdGFnIEFQSSB2aW9sYXRpb25zICovCisgICAgY2hhciBhcGlfaWQ7CisgICAgUHlNZW1BbGxvY2F0b3IgYWxsb2M7Cit9IGRlYnVnX2FsbG9jX2FwaV90Oworc3RhdGljIHN0cnVjdCB7CisgICAgZGVidWdfYWxsb2NfYXBpX3QgcmF3OworICAgIGRlYnVnX2FsbG9jX2FwaV90IG1lbTsKKyAgICBkZWJ1Z19hbGxvY19hcGlfdCBvYmo7Cit9IF9QeU1lbV9EZWJ1ZyA9IHsKKyAgICB7J3InLCB7TlVMTCwgUFlSQVdfRlVOQ1N9fSwKKyAgICB7J20nLCB7TlVMTCwgUFlNRU1fRlVOQ1N9fSwKKyAgICB7J28nLCB7TlVMTCwgUFlPQkpfRlVOQ1N9fQorICAgIH07CisKKyNkZWZpbmUgUFlEQkdfRlVOQ1MgX1B5TWVtX0RlYnVnTWFsbG9jLCBfUHlNZW1fRGVidWdSZWFsbG9jLCBfUHlNZW1fRGVidWdGcmVlCisjZW5kaWYKKworc3RhdGljIFB5TWVtQWxsb2NhdG9yIF9QeU1lbV9SYXcgPSB7CisjaWZkZWYgUFlNQUxMT0NfREVCVUcKKyAgICAmX1B5TWVtX0RlYnVnLnJhdywgUFlEQkdfRlVOQ1MKKyNlbHNlCisgICAgTlVMTCwgUFlSQVdfRlVOQ1MKKyNlbmRpZgorICAgIH07CisKK3N0YXRpYyBQeU1lbUFsbG9jYXRvciBfUHlNZW0gPSB7CisjaWZkZWYgUFlNQUxMT0NfREVCVUcKKyAgICAmX1B5TWVtX0RlYnVnLm1lbSwgUFlEQkdfRlVOQ1MKKyNlbHNlCisgICAgTlVMTCwgUFlNRU1fRlVOQ1MKKyNlbmRpZgorICAgIH07CisKK3N0YXRpYyBQeU1lbUFsbG9jYXRvciBfUHlPYmplY3QgPSB7CisjaWZkZWYgUFlNQUxMT0NfREVCVUcKKyAgICAmX1B5TWVtX0RlYnVnLm9iaiwgUFlEQkdfRlVOQ1MKKyNlbHNlCisgICAgTlVMTCwgUFlPQkpfRlVOQ1MKKyNlbmRpZgorICAgIH07CisKKyN1bmRlZiBQWVJBV19GVU5DUworI3VuZGVmIFBZTUVNX0ZVTkNTCisjdW5kZWYgUFlPQkpfRlVOQ1MKKyN1bmRlZiBQWURCR19GVU5DUworCitzdGF0aWMgUHlPYmplY3RBcmVuYUFsbG9jYXRvciBfUHlPYmplY3RfQXJlbmEgPSB7TlVMTCwKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgX1B5T2JqZWN0X0FyZW5hVmlydHVhbEFsbG9jLCBfUHlPYmplY3RfQXJlbmFWaXJ0dWFsRnJlZQorI2VsaWYgZGVmaW5lZChBUkVOQVNfVVNFX01NQVApCisgICAgX1B5T2JqZWN0X0FyZW5hTW1hcCwgX1B5T2JqZWN0X0FyZW5hTXVubWFwCisjZWxzZQorICAgIF9QeU9iamVjdF9BcmVuYU1hbGxvYywgX1B5T2JqZWN0X0FyZW5hRnJlZQorI2VuZGlmCisgICAgfTsKKwordm9pZAorUHlNZW1fU2V0dXBEZWJ1Z0hvb2tzKHZvaWQpCit7CisjaWZkZWYgUFlNQUxMT0NfREVCVUcKKyAgICBQeU1lbUFsbG9jYXRvciBhbGxvYzsKKworICAgIGFsbG9jLm1hbGxvYyA9IF9QeU1lbV9EZWJ1Z01hbGxvYzsKKyAgICBhbGxvYy5yZWFsbG9jID0gX1B5TWVtX0RlYnVnUmVhbGxvYzsKKyAgICBhbGxvYy5mcmVlID0gX1B5TWVtX0RlYnVnRnJlZTsKKworICAgIGlmIChfUHlNZW1fUmF3Lm1hbGxvYyAhPSBfUHlNZW1fRGVidWdNYWxsb2MpIHsKKyAgICAgICAgYWxsb2MuY3R4ID0gJl9QeU1lbV9EZWJ1Zy5yYXc7CisgICAgICAgIFB5TWVtX0dldEFsbG9jYXRvcihQWU1FTV9ET01BSU5fUkFXLCAmX1B5TWVtX0RlYnVnLnJhdy5hbGxvYyk7CisgICAgICAgIFB5TWVtX1NldEFsbG9jYXRvcihQWU1FTV9ET01BSU5fUkFXLCAmYWxsb2MpOworICAgIH0KKworICAgIGlmIChfUHlNZW0ubWFsbG9jICE9IF9QeU1lbV9EZWJ1Z01hbGxvYykgeworICAgICAgICBhbGxvYy5jdHggPSAmX1B5TWVtX0RlYnVnLm1lbTsKKyAgICAgICAgUHlNZW1fR2V0QWxsb2NhdG9yKFBZTUVNX0RPTUFJTl9NRU0sICZfUHlNZW1fRGVidWcubWVtLmFsbG9jKTsKKyAgICAgICAgUHlNZW1fU2V0QWxsb2NhdG9yKFBZTUVNX0RPTUFJTl9NRU0sICZhbGxvYyk7CisgICAgfQorCisgICAgaWYgKF9QeU9iamVjdC5tYWxsb2MgIT0gX1B5TWVtX0RlYnVnTWFsbG9jKSB7CisgICAgICAgIGFsbG9jLmN0eCA9ICZfUHlNZW1fRGVidWcub2JqOworICAgICAgICBQeU1lbV9HZXRBbGxvY2F0b3IoUFlNRU1fRE9NQUlOX09CSiwgJl9QeU1lbV9EZWJ1Zy5vYmouYWxsb2MpOworICAgICAgICBQeU1lbV9TZXRBbGxvY2F0b3IoUFlNRU1fRE9NQUlOX09CSiwgJmFsbG9jKTsKKyAgICB9CisjZW5kaWYKK30KKwordm9pZAorUHlNZW1fR2V0QWxsb2NhdG9yKFB5TWVtQWxsb2NhdG9yRG9tYWluIGRvbWFpbiwgUHlNZW1BbGxvY2F0b3IgKmFsbG9jYXRvcikKK3sKKyAgICBzd2l0Y2goZG9tYWluKQorICAgIHsKKyAgICBjYXNlIFBZTUVNX0RPTUFJTl9SQVc6ICphbGxvY2F0b3IgPSBfUHlNZW1fUmF3OyBicmVhazsKKyAgICBjYXNlIFBZTUVNX0RPTUFJTl9NRU06ICphbGxvY2F0b3IgPSBfUHlNZW07IGJyZWFrOworICAgIGNhc2UgUFlNRU1fRE9NQUlOX09CSjogKmFsbG9jYXRvciA9IF9QeU9iamVjdDsgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgLyogdW5rbm93biBkb21haW4gKi8KKyAgICAgICAgYWxsb2NhdG9yLT5jdHggPSBOVUxMOworICAgICAgICBhbGxvY2F0b3ItPm1hbGxvYyA9IE5VTEw7CisgICAgICAgIGFsbG9jYXRvci0+cmVhbGxvYyA9IE5VTEw7CisgICAgICAgIGFsbG9jYXRvci0+ZnJlZSA9IE5VTEw7CisgICAgfQorfQorCit2b2lkCitQeU1lbV9TZXRBbGxvY2F0b3IoUHlNZW1BbGxvY2F0b3JEb21haW4gZG9tYWluLCBQeU1lbUFsbG9jYXRvciAqYWxsb2NhdG9yKQoreworICAgIHN3aXRjaChkb21haW4pCisgICAgeworICAgIGNhc2UgUFlNRU1fRE9NQUlOX1JBVzogX1B5TWVtX1JhdyA9ICphbGxvY2F0b3I7IGJyZWFrOworICAgIGNhc2UgUFlNRU1fRE9NQUlOX01FTTogX1B5TWVtID0gKmFsbG9jYXRvcjsgYnJlYWs7CisgICAgY2FzZSBQWU1FTV9ET01BSU5fT0JKOiBfUHlPYmplY3QgPSAqYWxsb2NhdG9yOyBicmVhazsKKyAgICAvKiBpZ25vcmUgdW5rbm93biBkb21haW4gKi8KKyAgICB9CisKK30KKwordm9pZAorUHlPYmplY3RfR2V0QXJlbmFBbGxvY2F0b3IoUHlPYmplY3RBcmVuYUFsbG9jYXRvciAqYWxsb2NhdG9yKQoreworICAgICphbGxvY2F0b3IgPSBfUHlPYmplY3RfQXJlbmE7Cit9CisKK3ZvaWQKK1B5T2JqZWN0X1NldEFyZW5hQWxsb2NhdG9yKFB5T2JqZWN0QXJlbmFBbGxvY2F0b3IgKmFsbG9jYXRvcikKK3sKKyAgICBfUHlPYmplY3RfQXJlbmEgPSAqYWxsb2NhdG9yOworfQorCit2b2lkICoKK1B5TWVtX1Jhd01hbGxvYyhzaXplX3Qgc2l6ZSkKK3sKKyAgICAvKgorICAgICAqIExpbWl0IG91cnNlbHZlcyB0byBQWV9TU0laRV9UX01BWCBieXRlcyB0byBwcmV2ZW50IHNlY3VyaXR5IGhvbGVzLgorICAgICAqIE1vc3QgcHl0aG9uIGludGVybmFscyBibGluZGx5IHVzZSBhIHNpZ25lZCBQeV9zc2l6ZV90IHRvIHRyYWNrCisgICAgICogdGhpbmdzIHdpdGhvdXQgY2hlY2tpbmcgZm9yIG92ZXJmbG93cyBvciBuZWdhdGl2ZXMuCisgICAgICogQXMgc2l6ZV90IGlzIHVuc2lnbmVkLCBjaGVja2luZyBmb3Igc2l6ZSA8IDAgaXMgbm90IHJlcXVpcmVkLgorICAgICAqLworICAgIGlmIChzaXplID4gKHNpemVfdClQWV9TU0laRV9UX01BWCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICByZXR1cm4gX1B5TWVtX1Jhdy5tYWxsb2MoX1B5TWVtX1Jhdy5jdHgsIHNpemUpOworfQorCit2b2lkKgorUHlNZW1fUmF3UmVhbGxvYyh2b2lkICpwdHIsIHNpemVfdCBuZXdfc2l6ZSkKK3sKKyAgICAvKiBzZWUgUHlNZW1fUmF3TWFsbG9jKCkgKi8KKyAgICBpZiAobmV3X3NpemUgPiAoc2l6ZV90KVBZX1NTSVpFX1RfTUFYKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gX1B5TWVtX1Jhdy5yZWFsbG9jKF9QeU1lbV9SYXcuY3R4LCBwdHIsIG5ld19zaXplKTsKK30KKwordm9pZCBQeU1lbV9SYXdGcmVlKHZvaWQgKnB0cikKK3sKKyAgICBfUHlNZW1fUmF3LmZyZWUoX1B5TWVtX1Jhdy5jdHgsIHB0cik7Cit9CisKK3ZvaWQgKgorUHlNZW1fTWFsbG9jKHNpemVfdCBzaXplKQoreworICAgIC8qIHNlZSBQeU1lbV9SYXdNYWxsb2MoKSAqLworICAgIGlmIChzaXplID4gKHNpemVfdClQWV9TU0laRV9UX01BWCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmV0dXJuIF9QeU1lbS5tYWxsb2MoX1B5TWVtLmN0eCwgc2l6ZSk7Cit9CisKK3ZvaWQgKgorUHlNZW1fUmVhbGxvYyh2b2lkICpwdHIsIHNpemVfdCBuZXdfc2l6ZSkKK3sKKyAgICAvKiBzZWUgUHlNZW1fUmF3TWFsbG9jKCkgKi8KKyAgICBpZiAobmV3X3NpemUgPiAoc2l6ZV90KVBZX1NTSVpFX1RfTUFYKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gX1B5TWVtLnJlYWxsb2MoX1B5TWVtLmN0eCwgcHRyLCBuZXdfc2l6ZSk7Cit9CisKK3ZvaWQKK1B5TWVtX0ZyZWUodm9pZCAqcHRyKQoreworICAgIF9QeU1lbS5mcmVlKF9QeU1lbS5jdHgsIHB0cik7Cit9CisKK2NoYXIgKgorX1B5TWVtX1Jhd1N0cmR1cChjb25zdCBjaGFyICpzdHIpCit7CisgICAgc2l6ZV90IHNpemU7CisgICAgY2hhciAqY29weTsKKworICAgIHNpemUgPSBzdHJsZW4oc3RyKSArIDE7CisgICAgY29weSA9IFB5TWVtX1Jhd01hbGxvYyhzaXplKTsKKyAgICBpZiAoY29weSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBtZW1jcHkoY29weSwgc3RyLCBzaXplKTsKKyAgICByZXR1cm4gY29weTsKK30KKworY2hhciAqCitfUHlNZW1fU3RyZHVwKGNvbnN0IGNoYXIgKnN0cikKK3sKKyAgICBzaXplX3Qgc2l6ZTsKKyAgICBjaGFyICpjb3B5OworCisgICAgc2l6ZSA9IHN0cmxlbihzdHIpICsgMTsKKyAgICBjb3B5ID0gUHlNZW1fTWFsbG9jKHNpemUpOworICAgIGlmIChjb3B5ID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIG1lbWNweShjb3B5LCBzdHIsIHNpemUpOworICAgIHJldHVybiBjb3B5OworfQorCit2b2lkICoKK1B5T2JqZWN0X01hbGxvYyhzaXplX3Qgc2l6ZSkKK3sKKyAgICAvKiBzZWUgUHlNZW1fUmF3TWFsbG9jKCkgKi8KKyAgICBpZiAoc2l6ZSA+IChzaXplX3QpUFlfU1NJWkVfVF9NQVgpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHJldHVybiBfUHlPYmplY3QubWFsbG9jKF9QeU9iamVjdC5jdHgsIHNpemUpOworfQorCit2b2lkICoKK1B5T2JqZWN0X1JlYWxsb2Modm9pZCAqcHRyLCBzaXplX3QgbmV3X3NpemUpCit7CisgICAgLyogc2VlIFB5TWVtX1Jhd01hbGxvYygpICovCisgICAgaWYgKG5ld19zaXplID4gKHNpemVfdClQWV9TU0laRV9UX01BWCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmV0dXJuIF9QeU9iamVjdC5yZWFsbG9jKF9QeU9iamVjdC5jdHgsIHB0ciwgbmV3X3NpemUpOworfQorCit2b2lkCitQeU9iamVjdF9GcmVlKHZvaWQgKnB0cikKK3sKKyAgICBfUHlPYmplY3QuZnJlZShfUHlPYmplY3QuY3R4LCBwdHIpOworfQorCisKKyNpZmRlZiBXSVRIX1BZTUFMTE9DCisKICNpZmRlZiBXSVRIX1ZBTEdSSU5ECiAjaW5jbHVkZSA8dmFsZ3JpbmQvdmFsZ3JpbmQuaD4KIApAQCAtNTI1LDYgKzg4NSwxNSBAQAogLyogSGlnaCB3YXRlciBtYXJrIChtYXggdmFsdWUgZXZlciBzZWVuKSBmb3IgbmFyZW5hc19jdXJyZW50bHlfYWxsb2NhdGVkLiAqLwogc3RhdGljIHNpemVfdCBuYXJlbmFzX2hpZ2h3YXRlciA9IDA7CiAKK3N0YXRpYyBQeV9zc2l6ZV90IF9QeV9BbGxvY2F0ZWRCbG9ja3MgPSAwOworCitQeV9zc2l6ZV90CitfUHlfR2V0QWxsb2NhdGVkQmxvY2tzKHZvaWQpCit7CisgICAgcmV0dXJuIF9QeV9BbGxvY2F0ZWRCbG9ja3M7Cit9CisKKwogLyogQWxsb2NhdGUgYSBuZXcgYXJlbmEuICBJZiB3ZSBydW4gb3V0IG9mIG1lbW9yeSwgcmV0dXJuIE5VTEwuICBFbHNlCiAgKiBhbGxvY2F0ZSBhIG5ldyBhcmVuYSwgYW5kIHJldHVybiB0aGUgYWRkcmVzcyBvZiBhbiBhcmVuYV9vYmplY3QKICAqIGRlc2NyaWJpbmcgdGhlIG5ldyBhcmVuYS4gIEl0J3MgZXhwZWN0ZWQgdGhhdCB0aGUgY2FsbGVyIHdpbGwgc2V0CkBAIC01MzYsNyArOTA1LDYgQEAKICAgICBzdHJ1Y3QgYXJlbmFfb2JqZWN0KiBhcmVuYW9iajsKICAgICB1aW50IGV4Y2VzczsgICAgICAgIC8qIG51bWJlciBvZiBieXRlcyBhYm92ZSBwb29sIGFsaWdubWVudCAqLwogICAgIHZvaWQgKmFkZHJlc3M7Ci0gICAgaW50IGVycjsKIAogI2lmZGVmIFBZTUFMTE9DX0RFQlVHCiAgICAgaWYgKFB5X0dFVEVOVigiUFlUSE9OTUFMTE9DU1RBVFMiKSkKQEAgLTU1OCw3ICs5MjYsNyBAQAogICAgICAgICAgICAgcmV0dXJuIE5VTEw7ICAgICAgICAgICAgICAgIC8qIG92ZXJmbG93ICovCiAjZW5kaWYKICAgICAgICAgbmJ5dGVzID0gbnVtYXJlbmFzICogc2l6ZW9mKCphcmVuYXMpOwotICAgICAgICBhcmVuYW9iaiA9IChzdHJ1Y3QgYXJlbmFfb2JqZWN0ICopcmVhbGxvYyhhcmVuYXMsIG5ieXRlcyk7CisgICAgICAgIGFyZW5hb2JqID0gKHN0cnVjdCBhcmVuYV9vYmplY3QgKilQeU1lbV9SYXdSZWFsbG9jKGFyZW5hcywgbmJ5dGVzKTsKICAgICAgICAgaWYgKGFyZW5hb2JqID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgYXJlbmFzID0gYXJlbmFvYmo7CkBAIC01ODksMTUgKzk1Nyw4IEBACiAgICAgYXJlbmFvYmogPSB1bnVzZWRfYXJlbmFfb2JqZWN0czsKICAgICB1bnVzZWRfYXJlbmFfb2JqZWN0cyA9IGFyZW5hb2JqLT5uZXh0YXJlbmE7CiAgICAgYXNzZXJ0KGFyZW5hb2JqLT5hZGRyZXNzID09IDApOwotI2lmZGVmIEFSRU5BU19VU0VfTU1BUAotICAgIGFkZHJlc3MgPSBtbWFwKE5VTEwsIEFSRU5BX1NJWkUsIFBST1RfUkVBRHxQUk9UX1dSSVRFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQVBfUFJJVkFURXxNQVBfQU5PTllNT1VTLCAtMSwgMCk7Ci0gICAgZXJyID0gKGFkZHJlc3MgPT0gTUFQX0ZBSUxFRCk7Ci0jZWxzZQotICAgIGFkZHJlc3MgPSBtYWxsb2MoQVJFTkFfU0laRSk7Ci0gICAgZXJyID0gKGFkZHJlc3MgPT0gMCk7Ci0jZW5kaWYKLSAgICBpZiAoZXJyKSB7CisgICAgYWRkcmVzcyA9IF9QeU9iamVjdF9BcmVuYS5hbGxvYyhfUHlPYmplY3RfQXJlbmEuY3R4LCBBUkVOQV9TSVpFKTsKKyAgICBpZiAoYWRkcmVzcyA9PSBOVUxMKSB7CiAgICAgICAgIC8qIFRoZSBhbGxvY2F0aW9uIGZhaWxlZDogcmV0dXJuIE5VTEwgYWZ0ZXIgcHV0dGluZyB0aGUKICAgICAgICAgICogYXJlbmFvYmogYmFjay4KICAgICAgICAgICovCkBAIC03NjAsMTUgKzExMjEsMTYgQEAKICAqIFVubGVzcyB0aGUgb3B0aW1pemVyIHJlb3JkZXJzIGV2ZXJ5dGhpbmcsIGJlaW5nIHRvbyBzbWFydC4uLgogICovCiAKLSN1bmRlZiBQeU9iamVjdF9NYWxsb2MKLXZvaWQgKgotUHlPYmplY3RfTWFsbG9jKHNpemVfdCBuYnl0ZXMpCitzdGF0aWMgdm9pZCAqCitfUHlPYmplY3RfTWFsbG9jKHZvaWQgKmN0eCwgc2l6ZV90IG5ieXRlcykKIHsKICAgICBibG9jayAqYnA7CiAgICAgcG9vbHAgcG9vbDsKICAgICBwb29scCBuZXh0OwogICAgIHVpbnQgc2l6ZTsKIAorICAgIF9QeV9BbGxvY2F0ZWRCbG9ja3MrKzsKKwogI2lmZGVmIFdJVEhfVkFMR1JJTkQKICAgICBpZiAoVU5MSUtFTFkocnVubmluZ19vbl92YWxncmluZCA9PSAtMSkpCiAgICAgICAgIHJ1bm5pbmdfb25fdmFsZ3JpbmQgPSBSVU5OSU5HX09OX1ZBTEdSSU5EOwpAQCAtNzc3LDE1ICsxMTM5LDYgQEAKICNlbmRpZgogCiAgICAgLyoKLSAgICAgKiBMaW1pdCBvdXJzZWx2ZXMgdG8gUFlfU1NJWkVfVF9NQVggYnl0ZXMgdG8gcHJldmVudCBzZWN1cml0eSBob2xlcy4KLSAgICAgKiBNb3N0IHB5dGhvbiBpbnRlcm5hbHMgYmxpbmRseSB1c2UgYSBzaWduZWQgUHlfc3NpemVfdCB0byB0cmFjawotICAgICAqIHRoaW5ncyB3aXRob3V0IGNoZWNraW5nIGZvciBvdmVyZmxvd3Mgb3IgbmVnYXRpdmVzLgotICAgICAqIEFzIHNpemVfdCBpcyB1bnNpZ25lZCwgY2hlY2tpbmcgZm9yIG5ieXRlcyA8IDAgaXMgbm90IHJlcXVpcmVkLgotICAgICAqLwotICAgIGlmIChuYnl0ZXMgPiBQWV9TU0laRV9UX01BWCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICAvKgogICAgICAqIFRoaXMgaW1wbGljaXRseSByZWRpcmVjdHMgbWFsbG9jKDApLgogICAgICAqLwogICAgIGlmICgobmJ5dGVzIC0gMSkgPCBTTUFMTF9SRVFVRVNUX1RIUkVTSE9MRCkgewpAQCAtOTAxLDYgKzEyNTQsNyBAQAogICAgICAgICAgICAgICAgICAqIGFuZCBmcmVlIGxpc3QgYXJlIGFscmVhZHkgaW5pdGlhbGl6ZWQuCiAgICAgICAgICAgICAgICAgICovCiAgICAgICAgICAgICAgICAgYnAgPSBwb29sLT5mcmVlYmxvY2s7CisgICAgICAgICAgICAgICAgYXNzZXJ0KGJwICE9IE5VTEwpOwogICAgICAgICAgICAgICAgIHBvb2wtPmZyZWVibG9jayA9ICooYmxvY2sgKiopYnA7CiAgICAgICAgICAgICAgICAgVU5MT0NLKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuICh2b2lkICopYnA7CkBAIC05NTYsMTYgKzEzMTAsMTkgQEAKICAgICAgKiBsYXN0IGNoYW5jZSB0byBzZXJ2ZSB0aGUgcmVxdWVzdCkgb3Igd2hlbiB0aGUgbWF4IG1lbW9yeSBsaW1pdAogICAgICAqIGhhcyBiZWVuIHJlYWNoZWQuCiAgICAgICovCi0gICAgaWYgKG5ieXRlcyA9PSAwKQotICAgICAgICBuYnl0ZXMgPSAxOwotICAgIHJldHVybiAodm9pZCAqKW1hbGxvYyhuYnl0ZXMpOworICAgIHsKKyAgICAgICAgdm9pZCAqcmVzdWx0ID0gUHlNZW1fUmF3TWFsbG9jKG5ieXRlcyk7CisgICAgICAgIGlmICghcmVzdWx0KQorICAgICAgICAgICAgX1B5X0FsbG9jYXRlZEJsb2Nrcy0tOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KIH0KIAogLyogZnJlZSAqLwogCi0jdW5kZWYgUHlPYmplY3RfRnJlZQotdm9pZAotUHlPYmplY3RfRnJlZSh2b2lkICpwKQorQVRUUklCVVRFX05PX0FERFJFU1NfU0FGRVRZX0FOQUxZU0lTCitzdGF0aWMgdm9pZAorX1B5T2JqZWN0X0ZyZWUodm9pZCAqY3R4LCB2b2lkICpwKQogewogICAgIHBvb2xwIHBvb2w7CiAgICAgYmxvY2sgKmxhc3RmcmVlOwpAQCAtOTc4LDYgKzEzMzUsOCBAQAogICAgIGlmIChwID09IE5VTEwpICAgICAgLyogZnJlZShOVUxMKSBoYXMgbm8gZWZmZWN0ICovCiAgICAgICAgIHJldHVybjsKIAorICAgIF9QeV9BbGxvY2F0ZWRCbG9ja3MtLTsKKwogI2lmZGVmIFdJVEhfVkFMR1JJTkQKICAgICBpZiAoVU5MSUtFTFkocnVubmluZ19vbl92YWxncmluZCA+IDApKQogICAgICAgICBnb3RvIHJlZGlyZWN0OwpAQCAtMTA3MiwxMSArMTQzMSw4IEBACiAgICAgICAgICAgICAgICAgdW51c2VkX2FyZW5hX29iamVjdHMgPSBhbzsKIAogICAgICAgICAgICAgICAgIC8qIEZyZWUgdGhlIGVudGlyZSBhcmVuYS4gKi8KLSNpZmRlZiBBUkVOQVNfVVNFX01NQVAKLSAgICAgICAgICAgICAgICBtdW5tYXAoKHZvaWQgKilhby0+YWRkcmVzcywgQVJFTkFfU0laRSk7Ci0jZWxzZQotICAgICAgICAgICAgICAgIGZyZWUoKHZvaWQgKilhby0+YWRkcmVzcyk7Ci0jZW5kaWYKKyAgICAgICAgICAgICAgICBfUHlPYmplY3RfQXJlbmEuZnJlZShfUHlPYmplY3RfQXJlbmEuY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICopYW8tPmFkZHJlc3MsIEFSRU5BX1NJWkUpOwogICAgICAgICAgICAgICAgIGFvLT5hZGRyZXNzID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBtYXJrIHVuYXNzb2NpYXRlZCAqLwogICAgICAgICAgICAgICAgIC0tbmFyZW5hc19jdXJyZW50bHlfYWxsb2NhdGVkOwogCkBAIC0xMTg1LDcgKzE1NDEsNyBAQAogcmVkaXJlY3Q6CiAjZW5kaWYKICAgICAvKiBXZSBkaWRuJ3QgYWxsb2NhdGUgdGhpcyBhZGRyZXNzLiAqLwotICAgIGZyZWUocCk7CisgICAgUHlNZW1fUmF3RnJlZShwKTsKIH0KIAogLyogcmVhbGxvYy4gIElmIHAgaXMgTlVMTCwgdGhpcyBhY3RzIGxpa2UgbWFsbG9jKG5ieXRlcykuICBFbHNlIGlmIG5ieXRlcz09MCwKQEAgLTExOTMsOSArMTU0OSw5IEBACiAgKiByZXR1cm4gYSBub24tTlVMTCByZXN1bHQuCiAgKi8KIAotI3VuZGVmIFB5T2JqZWN0X1JlYWxsb2MKLXZvaWQgKgotUHlPYmplY3RfUmVhbGxvYyh2b2lkICpwLCBzaXplX3QgbmJ5dGVzKQorQVRUUklCVVRFX05PX0FERFJFU1NfU0FGRVRZX0FOQUxZU0lTCitzdGF0aWMgdm9pZCAqCitfUHlPYmplY3RfUmVhbGxvYyh2b2lkICpjdHgsIHZvaWQgKnAsIHNpemVfdCBuYnl0ZXMpCiB7CiAgICAgdm9pZCAqYnA7CiAgICAgcG9vbHAgcG9vbDsKQEAgLTEyMDUsMTYgKzE1NjEsNyBAQAogI2VuZGlmCiAKICAgICBpZiAocCA9PSBOVUxMKQotICAgICAgICByZXR1cm4gUHlPYmplY3RfTWFsbG9jKG5ieXRlcyk7Ci0KLSAgICAvKgotICAgICAqIExpbWl0IG91cnNlbHZlcyB0byBQWV9TU0laRV9UX01BWCBieXRlcyB0byBwcmV2ZW50IHNlY3VyaXR5IGhvbGVzLgotICAgICAqIE1vc3QgcHl0aG9uIGludGVybmFscyBibGluZGx5IHVzZSBhIHNpZ25lZCBQeV9zc2l6ZV90IHRvIHRyYWNrCi0gICAgICogdGhpbmdzIHdpdGhvdXQgY2hlY2tpbmcgZm9yIG92ZXJmbG93cyBvciBuZWdhdGl2ZXMuCi0gICAgICogQXMgc2l6ZV90IGlzIHVuc2lnbmVkLCBjaGVja2luZyBmb3IgbmJ5dGVzIDwgMCBpcyBub3QgcmVxdWlyZWQuCi0gICAgICovCi0gICAgaWYgKG5ieXRlcyA+IFBZX1NTSVpFX1RfTUFYKQotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgcmV0dXJuIF9QeU9iamVjdF9NYWxsb2MoY3R4LCBuYnl0ZXMpOwogCiAjaWZkZWYgV0lUSF9WQUxHUklORAogICAgIC8qIFRyZWF0IHJ1bm5pbmdfb25fdmFsZ3JpbmQgPT0gLTEgdGhlIHNhbWUgYXMgMCAqLwpAQCAtMTI0MiwxMCArMTU4OSwxMCBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgc2l6ZSA9IG5ieXRlczsKICAgICAgICAgfQotICAgICAgICBicCA9IFB5T2JqZWN0X01hbGxvYyhuYnl0ZXMpOworICAgICAgICBicCA9IF9QeU9iamVjdF9NYWxsb2MoY3R4LCBuYnl0ZXMpOwogICAgICAgICBpZiAoYnAgIT0gTlVMTCkgewogICAgICAgICAgICAgbWVtY3B5KGJwLCBwLCBzaXplKTsKLSAgICAgICAgICAgIFB5T2JqZWN0X0ZyZWUocCk7CisgICAgICAgICAgICBfUHlPYmplY3RfRnJlZShjdHgsIHApOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBicDsKICAgICB9CkBAIC0xMjYzLDE0ICsxNjEwLDE0IEBACiAgICAgICogYXQgcC4gIEluc3RlYWQgd2UgcHVudDogIGxldCBDIGNvbnRpbnVlIHRvIG1hbmFnZSB0aGlzIGJsb2NrLgogICAgICAqLwogICAgIGlmIChuYnl0ZXMpCi0gICAgICAgIHJldHVybiByZWFsbG9jKHAsIG5ieXRlcyk7CisgICAgICAgIHJldHVybiBQeU1lbV9SYXdSZWFsbG9jKHAsIG5ieXRlcyk7CiAgICAgLyogQyBkb2Vzbid0IGRlZmluZSB0aGUgcmVzdWx0IG9mIHJlYWxsb2MocCwgMCkgKGl0IG1heSBvciBtYXkgbm90CiAgICAgICogcmV0dXJuIE5VTEwgdGhlbiksIGJ1dCBQeXRob24ncyBkb2NzIHByb21pc2UgdGhhdCBuYnl0ZXM9PTAgbmV2ZXIKICAgICAgKiByZXR1cm5zIE5VTEwuICBXZSBkb24ndCBwYXNzIDAgdG8gcmVhbGxvYygpLCB0byBhdm9pZCB0aGF0IGVuZGNhc2UKICAgICAgKiB0byBiZWdpbiB3aXRoLiAgRXZlbiB0aGVuLCB3ZSBjYW4ndCBiZSBzdXJlIHRoYXQgcmVhbGxvYygpIHdvbid0CiAgICAgICogcmV0dXJuIE5VTEwuCiAgICAgICovCi0gICAgYnAgPSByZWFsbG9jKHAsIDEpOworICAgIGJwID0gUHlNZW1fUmF3UmVhbGxvYyhwLCAxKTsKICAgICByZXR1cm4gYnAgPyBicCA6IHA7CiB9CiAKQEAgLTEyODAsMjMgKzE2MjcsMTIgQEAKIC8qIHB5bWFsbG9jIG5vdCBlbmFibGVkOiAgUmVkaXJlY3QgdGhlIGVudHJ5IHBvaW50cyB0byBtYWxsb2MuICBUaGVzZSB3aWxsCiAgKiBvbmx5IGJlIHVzZWQgYnkgZXh0ZW5zaW9ucyB0aGF0IGFyZSBjb21waWxlZCB3aXRoIHB5bWFsbG9jIGVuYWJsZWQuICovCiAKLXZvaWQgKgotUHlPYmplY3RfTWFsbG9jKHNpemVfdCBuKQorUHlfc3NpemVfdAorX1B5X0dldEFsbG9jYXRlZEJsb2Nrcyh2b2lkKQogewotICAgIHJldHVybiBQeU1lbV9NQUxMT0Mobik7CisgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgKgotUHlPYmplY3RfUmVhbGxvYyh2b2lkICpwLCBzaXplX3QgbikKLXsKLSAgICByZXR1cm4gUHlNZW1fUkVBTExPQyhwLCBuKTsKLX0KLQotdm9pZAotUHlPYmplY3RfRnJlZSh2b2lkICpwKQotewotICAgIFB5TWVtX0ZSRUUocCk7Ci19CiAjZW5kaWYgLyogV0lUSF9QWU1BTExPQyAqLwogCiAjaWZkZWYgUFlNQUxMT0NfREVCVUcKQEAgLTEzMTYsMTAgKzE2NTIsNiBAQAogI2RlZmluZSBERUFEQllURSAgICAgICAweERCICAgIC8qIGRlYWQgKG5ld2x5IGZyZWVkKSBtZW1vcnkgKi8KICNkZWZpbmUgRk9SQklEREVOQllURSAgMHhGQiAgICAvKiB1bnRvdWNoYWJsZSBieXRlcyBhdCBlYWNoIGVuZCBvZiBhIGJsb2NrICovCiAKLS8qIFdlIHRhZyBlYWNoIGJsb2NrIHdpdGggYW4gQVBJIElEIGluIG9yZGVyIHRvIHRhZyBBUEkgdmlvbGF0aW9ucyAqLwotI2RlZmluZSBfUFlNQUxMT0NfTUVNX0lEICdtJyAgIC8qIHRoZSBQeU1lbV9NYWxsb2MoKSBBUEkgKi8KLSNkZWZpbmUgX1BZTUFMTE9DX09CSl9JRCAnbycgICAvKiBUaGUgUHlPYmplY3RfTWFsbG9jKCkgQVBJICovCi0KIHN0YXRpYyBzaXplX3Qgc2VyaWFsbm8gPSAwOyAgICAgLyogaW5jcmVtZW50ZWQgb24gZWFjaCBkZWJ1ZyB7bSxyZX1hbGxvYyAqLwogCiAvKiBzZXJpYWxubyBpcyBhbHdheXMgaW5jcmVtZW50ZWQgdmlhIGNhbGxpbmcgdGhpcyByb3V0aW5lLiAgVGhlIHBvaW50IGlzCkBAIC0xMzkyLDcgKzE3MjQsOSBAQAogcFswOiBTXQogICAgIE51bWJlciBvZiBieXRlcyBvcmlnaW5hbGx5IGFza2VkIGZvci4gIFRoaXMgaXMgYSBzaXplX3QsIGJpZy1lbmRpYW4gKGVhc2llcgogICAgIHRvIHJlYWQgaW4gYSBtZW1vcnkgZHVtcCkuCi1wW1M6IDIqU10KK3BbU10KKyAgICBBUEkgSUQuICBTZWUgUEVQIDQ0NS4gIFRoaXMgaXMgYSBjaGFyYWN0ZXIsIGJ1dCBzZWVtcyB1bmRvY3VtZW50ZWQuCitwW1MrMTogMipTXQogICAgIENvcGllcyBvZiBGT1JCSURERU5CWVRFLiAgVXNlZCB0byBjYXRjaCB1bmRlci0gd3JpdGVzIGFuZCByZWFkcy4KIHBbMipTOiAyKlMrbl0KICAgICBUaGUgcmVxdWVzdGVkIG1lbW9yeSwgZmlsbGVkIHdpdGggY29waWVzIG9mIENMRUFOQllURS4KQEAgLTE0MDIsNzYgKzE3MzYsMzYgQEAKIHBbMipTK246IDIqUytuK1NdCiAgICAgQ29waWVzIG9mIEZPUkJJRERFTkJZVEUuICBVc2VkIHRvIGNhdGNoIG92ZXItIHdyaXRlcyBhbmQgcmVhZHMuCiBwWzIqUytuK1M6IDIqUytuKzIqU10KLSAgICBBIHNlcmlhbCBudW1iZXIsIGluY3JlbWVudGVkIGJ5IDEgb24gZWFjaCBjYWxsIHRvIF9QeU9iamVjdF9EZWJ1Z01hbGxvYwotICAgIGFuZCBfUHlPYmplY3RfRGVidWdSZWFsbG9jLgorICAgIEEgc2VyaWFsIG51bWJlciwgaW5jcmVtZW50ZWQgYnkgMSBvbiBlYWNoIGNhbGwgdG8gX1B5TWVtX0RlYnVnTWFsbG9jCisgICAgYW5kIF9QeU1lbV9EZWJ1Z1JlYWxsb2MuCiAgICAgVGhpcyBpcyBhIGJpZy1lbmRpYW4gc2l6ZV90LgogICAgIElmICJiYWQgbWVtb3J5IiBpcyBkZXRlY3RlZCBsYXRlciwgdGhlIHNlcmlhbCBudW1iZXIgZ2l2ZXMgYW4KICAgICBleGNlbGxlbnQgd2F5IHRvIHNldCBhIGJyZWFrcG9pbnQgb24gdGhlIG5leHQgcnVuLCB0byBjYXB0dXJlIHRoZQogICAgIGluc3RhbnQgYXQgd2hpY2ggdGhpcyBibG9jayB3YXMgcGFzc2VkIG91dC4KICovCiAKLS8qIGRlYnVnIHJlcGxhY2VtZW50cyBmb3IgdGhlIFB5TWVtXyogbWVtb3J5IEFQSSAqLwotdm9pZCAqCi1fUHlNZW1fRGVidWdNYWxsb2Moc2l6ZV90IG5ieXRlcykKK3N0YXRpYyB2b2lkICoKK19QeU1lbV9EZWJ1Z01hbGxvYyh2b2lkICpjdHgsIHNpemVfdCBuYnl0ZXMpCiB7Ci0gICAgcmV0dXJuIF9QeU9iamVjdF9EZWJ1Z01hbGxvY0FwaShfUFlNQUxMT0NfTUVNX0lELCBuYnl0ZXMpOwotfQotdm9pZCAqCi1fUHlNZW1fRGVidWdSZWFsbG9jKHZvaWQgKnAsIHNpemVfdCBuYnl0ZXMpCi17Ci0gICAgcmV0dXJuIF9QeU9iamVjdF9EZWJ1Z1JlYWxsb2NBcGkoX1BZTUFMTE9DX01FTV9JRCwgcCwgbmJ5dGVzKTsKLX0KLXZvaWQKLV9QeU1lbV9EZWJ1Z0ZyZWUodm9pZCAqcCkKLXsKLSAgICBfUHlPYmplY3RfRGVidWdGcmVlQXBpKF9QWU1BTExPQ19NRU1fSUQsIHApOwotfQotCi0vKiBkZWJ1ZyByZXBsYWNlbWVudHMgZm9yIHRoZSBQeU9iamVjdF8qIG1lbW9yeSBBUEkgKi8KLXZvaWQgKgotX1B5T2JqZWN0X0RlYnVnTWFsbG9jKHNpemVfdCBuYnl0ZXMpCi17Ci0gICAgcmV0dXJuIF9QeU9iamVjdF9EZWJ1Z01hbGxvY0FwaShfUFlNQUxMT0NfT0JKX0lELCBuYnl0ZXMpOwotfQotdm9pZCAqCi1fUHlPYmplY3RfRGVidWdSZWFsbG9jKHZvaWQgKnAsIHNpemVfdCBuYnl0ZXMpCi17Ci0gICAgcmV0dXJuIF9QeU9iamVjdF9EZWJ1Z1JlYWxsb2NBcGkoX1BZTUFMTE9DX09CSl9JRCwgcCwgbmJ5dGVzKTsKLX0KLXZvaWQKLV9QeU9iamVjdF9EZWJ1Z0ZyZWUodm9pZCAqcCkKLXsKLSAgICBfUHlPYmplY3RfRGVidWdGcmVlQXBpKF9QWU1BTExPQ19PQkpfSUQsIHApOwotfQotdm9pZAotX1B5T2JqZWN0X0RlYnVnQ2hlY2tBZGRyZXNzKGNvbnN0IHZvaWQgKnApCi17Ci0gICAgX1B5T2JqZWN0X0RlYnVnQ2hlY2tBZGRyZXNzQXBpKF9QWU1BTExPQ19PQkpfSUQsIHApOwotfQotCi0KLS8qIGdlbmVyaWMgZGVidWcgbWVtb3J5IGFwaSwgd2l0aCBhbiAiaWQiIHRvIGlkZW50aWZ5IHRoZSBBUEkgaW4gdXNlICovCi12b2lkICoKLV9QeU9iamVjdF9EZWJ1Z01hbGxvY0FwaShjaGFyIGlkLCBzaXplX3QgbmJ5dGVzKQoteworICAgIGRlYnVnX2FsbG9jX2FwaV90ICphcGkgPSAoZGVidWdfYWxsb2NfYXBpX3QgKiljdHg7CiAgICAgdWNoYXIgKnA7ICAgICAgICAgICAvKiBiYXNlIGFkZHJlc3Mgb2YgbWFsbG9jJ2VkIGJsb2NrICovCiAgICAgdWNoYXIgKnRhaWw7ICAgICAgICAvKiBwICsgMipTU1QgKyBuYnl0ZXMgPT0gcG9pbnRlciB0byB0YWlsIHBhZCBieXRlcyAqLwogICAgIHNpemVfdCB0b3RhbDsgICAgICAgLyogbmJ5dGVzICsgNCpTU1QgKi8KIAogICAgIGJ1bXBzZXJpYWxubygpOwogICAgIHRvdGFsID0gbmJ5dGVzICsgNCpTU1Q7Ci0gICAgaWYgKHRvdGFsIDwgbmJ5dGVzKQotICAgICAgICAvKiBvdmVyZmxvdzogIGNhbid0IHJlcHJlc2VudCB0b3RhbCBhcyBhIHNpemVfdCAqLworICAgIGlmIChuYnl0ZXMgPiBQWV9TU0laRV9UX01BWCAtIDQqU1NUKQorICAgICAgICAvKiBvdmVyZmxvdzogIGNhbid0IHJlcHJlc2VudCB0b3RhbCBhcyBhIFB5X3NzaXplX3QgKi8KICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBwID0gKHVjaGFyICopUHlPYmplY3RfTWFsbG9jKHRvdGFsKTsKKyAgICBwID0gKHVjaGFyICopYXBpLT5hbGxvYy5tYWxsb2MoYXBpLT5hbGxvYy5jdHgsIHRvdGFsKTsKICAgICBpZiAocCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIC8qIGF0IHAsIHdyaXRlIHNpemUgKFNTVCBieXRlcyksIGlkICgxIGJ5dGUpLCBwYWQgKFNTVC0xIGJ5dGVzKSAqLwogICAgIHdyaXRlX3NpemVfdChwLCBuYnl0ZXMpOwotICAgIHBbU1NUXSA9ICh1Y2hhcilpZDsKLSAgICBtZW1zZXQocCArIFNTVCArIDEgLCBGT1JCSURERU5CWVRFLCBTU1QtMSk7CisgICAgcFtTU1RdID0gKHVjaGFyKWFwaS0+YXBpX2lkOworICAgIG1lbXNldChwICsgU1NUICsgMSwgRk9SQklEREVOQllURSwgU1NULTEpOwogCiAgICAgaWYgKG5ieXRlcyA+IDApCiAgICAgICAgIG1lbXNldChwICsgMipTU1QsIENMRUFOQllURSwgbmJ5dGVzKTsKQEAgLTE0ODksNjAgKzE3ODMsNjQgQEAKICAgIFRoZW4gZmlsbHMgdGhlIG9yaWdpbmFsIGJ5dGVzIHdpdGggREVBREJZVEUuCiAgICBUaGVuIGNhbGxzIHRoZSB1bmRlcmx5aW5nIGZyZWUuCiAqLwotdm9pZAotX1B5T2JqZWN0X0RlYnVnRnJlZUFwaShjaGFyIGFwaSwgdm9pZCAqcCkKK3N0YXRpYyB2b2lkCitfUHlNZW1fRGVidWdGcmVlKHZvaWQgKmN0eCwgdm9pZCAqcCkKIHsKKyAgICBkZWJ1Z19hbGxvY19hcGlfdCAqYXBpID0gKGRlYnVnX2FsbG9jX2FwaV90ICopY3R4OwogICAgIHVjaGFyICpxID0gKHVjaGFyICopcCAtIDIqU1NUOyAgLyogYWRkcmVzcyByZXR1cm5lZCBmcm9tIG1hbGxvYyAqLwogICAgIHNpemVfdCBuYnl0ZXM7CiAKICAgICBpZiAocCA9PSBOVUxMKQogICAgICAgICByZXR1cm47Ci0gICAgX1B5T2JqZWN0X0RlYnVnQ2hlY2tBZGRyZXNzQXBpKGFwaSwgcCk7CisgICAgX1B5TWVtX0RlYnVnQ2hlY2tBZGRyZXNzKGFwaS0+YXBpX2lkLCBwKTsKICAgICBuYnl0ZXMgPSByZWFkX3NpemVfdChxKTsKICAgICBuYnl0ZXMgKz0gNCpTU1Q7CiAgICAgaWYgKG5ieXRlcyA+IDApCiAgICAgICAgIG1lbXNldChxLCBERUFEQllURSwgbmJ5dGVzKTsKLSAgICBQeU9iamVjdF9GcmVlKHEpOworICAgIGFwaS0+YWxsb2MuZnJlZShhcGktPmFsbG9jLmN0eCwgcSk7CiB9CiAKLXZvaWQgKgotX1B5T2JqZWN0X0RlYnVnUmVhbGxvY0FwaShjaGFyIGFwaSwgdm9pZCAqcCwgc2l6ZV90IG5ieXRlcykKK3N0YXRpYyB2b2lkICoKK19QeU1lbV9EZWJ1Z1JlYWxsb2Modm9pZCAqY3R4LCB2b2lkICpwLCBzaXplX3QgbmJ5dGVzKQogewotICAgIHVjaGFyICpxID0gKHVjaGFyICopcDsKKyAgICBkZWJ1Z19hbGxvY19hcGlfdCAqYXBpID0gKGRlYnVnX2FsbG9jX2FwaV90ICopY3R4OworICAgIHVjaGFyICpxID0gKHVjaGFyICopcCwgKm9sZHE7CiAgICAgdWNoYXIgKnRhaWw7CiAgICAgc2l6ZV90IHRvdGFsOyAgICAgICAvKiBuYnl0ZXMgKyA0KlNTVCAqLwogICAgIHNpemVfdCBvcmlnaW5hbF9uYnl0ZXM7CiAgICAgaW50IGk7CiAKICAgICBpZiAocCA9PSBOVUxMKQotICAgICAgICByZXR1cm4gX1B5T2JqZWN0X0RlYnVnTWFsbG9jQXBpKGFwaSwgbmJ5dGVzKTsKKyAgICAgICAgcmV0dXJuIF9QeU1lbV9EZWJ1Z01hbGxvYyhjdHgsIG5ieXRlcyk7CiAKLSAgICBfUHlPYmplY3RfRGVidWdDaGVja0FkZHJlc3NBcGkoYXBpLCBwKTsKKyAgICBfUHlNZW1fRGVidWdDaGVja0FkZHJlc3MoYXBpLT5hcGlfaWQsIHApOwogICAgIGJ1bXBzZXJpYWxubygpOwogICAgIG9yaWdpbmFsX25ieXRlcyA9IHJlYWRfc2l6ZV90KHEgLSAyKlNTVCk7CiAgICAgdG90YWwgPSBuYnl0ZXMgKyA0KlNTVDsKLSAgICBpZiAodG90YWwgPCBuYnl0ZXMpCi0gICAgICAgIC8qIG92ZXJmbG93OiAgY2FuJ3QgcmVwcmVzZW50IHRvdGFsIGFzIGEgc2l6ZV90ICovCisgICAgaWYgKG5ieXRlcyA+IFBZX1NTSVpFX1RfTUFYIC0gNCpTU1QpCisgICAgICAgIC8qIG92ZXJmbG93OiAgY2FuJ3QgcmVwcmVzZW50IHRvdGFsIGFzIGEgUHlfc3NpemVfdCAqLwogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGlmIChuYnl0ZXMgPCBvcmlnaW5hbF9uYnl0ZXMpIHsKLSAgICAgICAgLyogc2hyaW5raW5nOiAgbWFyayBvbGQgZXh0cmEgbWVtb3J5IGRlYWQgKi8KLSAgICAgICAgbWVtc2V0KHEgKyBuYnl0ZXMsIERFQURCWVRFLCBvcmlnaW5hbF9uYnl0ZXMgLSBuYnl0ZXMgKyAyKlNTVCk7Ci0gICAgfQotCiAgICAgLyogUmVzaXplIGFuZCBhZGQgZGVjb3JhdGlvbnMuIFdlIG1heSBnZXQgYSBuZXcgcG9pbnRlciBoZXJlLCBpbiB3aGljaAogICAgICAqIGNhc2Ugd2UgZGlkbid0IGdldCB0aGUgY2hhbmNlIHRvIG1hcmsgdGhlIG9sZCBtZW1vcnkgd2l0aCBERUFEQllURSwKICAgICAgKiBidXQgd2UgbGl2ZSB3aXRoIHRoYXQuCiAgICAgICovCi0gICAgcSA9ICh1Y2hhciAqKVB5T2JqZWN0X1JlYWxsb2MocSAtIDIqU1NULCB0b3RhbCk7CisgICAgb2xkcSA9IHE7CisgICAgcSA9ICh1Y2hhciAqKWFwaS0+YWxsb2MucmVhbGxvYyhhcGktPmFsbG9jLmN0eCwgcSAtIDIqU1NULCB0b3RhbCk7CiAgICAgaWYgKHEgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKKyAgICBpZiAocSA9PSBvbGRxICYmIG5ieXRlcyA8IG9yaWdpbmFsX25ieXRlcykgeworICAgICAgICAvKiBzaHJpbmtpbmc6ICBtYXJrIG9sZCBleHRyYSBtZW1vcnkgZGVhZCAqLworICAgICAgICBtZW1zZXQocSArIG5ieXRlcywgREVBREJZVEUsIG9yaWdpbmFsX25ieXRlcyAtIG5ieXRlcyk7CisgICAgfQorCiAgICAgd3JpdGVfc2l6ZV90KHEsIG5ieXRlcyk7Ci0gICAgYXNzZXJ0KHFbU1NUXSA9PSAodWNoYXIpYXBpKTsKKyAgICBhc3NlcnQocVtTU1RdID09ICh1Y2hhcilhcGktPmFwaV9pZCk7CiAgICAgZm9yIChpID0gMTsgaSA8IFNTVDsgKytpKQogICAgICAgICBhc3NlcnQocVtTU1QgKyBpXSA9PSBGT1JCSURERU5CWVRFKTsKICAgICBxICs9IDIqU1NUOworCiAgICAgdGFpbCA9IHEgKyBuYnl0ZXM7CiAgICAgbWVtc2V0KHRhaWwsIEZPUkJJRERFTkJZVEUsIFNTVCk7CiAgICAgd3JpdGVfc2l6ZV90KHRhaWwgKyBTU1QsIHNlcmlhbG5vKTsKQEAgLTE1NjEsOCArMTg1OSw4IEBACiAgKiBhbmQgY2FsbCBQeV9GYXRhbEVycm9yIHRvIGtpbGwgdGhlIHByb2dyYW0uCiAgKiBUaGUgQVBJIGlkLCBpcyBhbHNvIGNoZWNrZWQuCiAgKi8KLSB2b2lkCi1fUHlPYmplY3RfRGVidWdDaGVja0FkZHJlc3NBcGkoY2hhciBhcGksIGNvbnN0IHZvaWQgKnApCitzdGF0aWMgdm9pZAorX1B5TWVtX0RlYnVnQ2hlY2tBZGRyZXNzKGNoYXIgYXBpLCBjb25zdCB2b2lkICpwKQogewogICAgIGNvbnN0IHVjaGFyICpxID0gKGNvbnN0IHVjaGFyICopcDsKICAgICBjaGFyIG1zZ2J1Zls2NF07CkBAIC0xNjE0LDcgKzE5MTIsNyBAQAogfQogCiAvKiBEaXNwbGF5IGluZm8gdG8gc3RkZXJyIGFib3V0IHRoZSBtZW1vcnkgYmxvY2sgYXQgcC4gKi8KLXZvaWQKK3N0YXRpYyB2b2lkCiBfUHlPYmplY3RfRGVidWdEdW1wQWRkcmVzcyhjb25zdCB2b2lkICpwKQogewogICAgIGNvbnN0IHVjaGFyICpxID0gKGNvbnN0IHVjaGFyICopcDsKZGlmZiAtLWdpdCBhL09iamVjdHMvcmFuZ2VvYmplY3QuYyBiL09iamVjdHMvcmFuZ2VvYmplY3QuYwppbmRleCBmMjAzMGMzLi5jNGJhNzE1IDEwMDY0NAotLS0gYS9PYmplY3RzL3Jhbmdlb2JqZWN0LmMKKysrIGIvT2JqZWN0cy9yYW5nZW9iamVjdC5jCkBAIC0xMzksNyArMTM5LDExIEBACiAicmFuZ2Uoc3RvcCkgLT4gcmFuZ2Ugb2JqZWN0XG5cCiByYW5nZShzdGFydCwgc3RvcFssIHN0ZXBdKSAtPiByYW5nZSBvYmplY3RcblwKIFxuXAotUmV0dXJuIGEgdmlydHVhbCBzZXF1ZW5jZSBvZiBudW1iZXJzIGZyb20gc3RhcnQgdG8gc3RvcCBieSBzdGVwLiIpOworUmV0dXJuIGFuIG9iamVjdCB0aGF0IHByb2R1Y2VzIGEgc2VxdWVuY2Ugb2YgaW50ZWdlcnMgZnJvbSBzdGFydCAoaW5jbHVzaXZlKVxuXAordG8gc3RvcCAoZXhjbHVzaXZlKSBieSBzdGVwLiAgcmFuZ2UoaSwgaikgcHJvZHVjZXMgaSwgaSsxLCBpKzIsIC4uLiwgai0xLlxuXAorc3RhcnQgZGVmYXVsdHMgdG8gMCwgYW5kIHN0b3AgaXMgb21pdHRlZCEgIHJhbmdlKDQpIHByb2R1Y2VzIDAsIDEsIDIsIDMuXG5cCitUaGVzZSBhcmUgZXhhY3RseSB0aGUgdmFsaWQgaW5kaWNlcyBmb3IgYSBsaXN0IG9mIDQgZWxlbWVudHMuXG5cCitXaGVuIHN0ZXAgaXMgZ2l2ZW4sIGl0IHNwZWNpZmllcyB0aGUgaW5jcmVtZW50IChvciBkZWNyZW1lbnQpLiIpOwogCiBzdGF0aWMgdm9pZAogcmFuZ2VfZGVhbGxvYyhyYW5nZW9iamVjdCAqcikKQEAgLTE5MCw4ICsxOTQsMTEgQEAKICAgICB9CiAKICAgICAvKiBpZiAobG8gPj0gaGkpLCByZXR1cm4gbGVuZ3RoIG9mIDAuICovCi0gICAgaWYgKFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbChsbywgaGksIFB5X0dFKSA9PSAxKSB7CisgICAgY21wX3Jlc3VsdCA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbChsbywgaGksIFB5X0dFKTsKKyAgICBpZiAoY21wX3Jlc3VsdCAhPSAwKSB7CiAgICAgICAgIFB5X1hERUNSRUYoc3RlcCk7CisgICAgICAgIGlmIChjbXBfcmVzdWx0IDwgMCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKDApOwogICAgIH0KIApAQCAtMzE4LDE5NSArMzI1LDYgQEAKICAgICByZXR1cm4gcmVzOwogfQogCi0vKiBBZGRpdGlvbmFsIGhlbHBlcnMsIHNpbmNlIHRoZSBzdGFuZGFyZCBzbGljZSBoZWxwZXJzCi0gKiBhbGwgY2xpcCB0byBQWV9TU0laRV9UX01BWAotICovCi0KLS8qIFJlcGxhY2UgX1B5RXZhbF9TbGljZUluZGV4ICovCi1zdGF0aWMgUHlPYmplY3QgKgotY29tcHV0ZV9zbGljZV9lbGVtZW50KFB5T2JqZWN0ICpvYmopCi17Ci0gICAgUHlPYmplY3QgKnJlc3VsdCA9IE5VTEw7Ci0gICAgaWYgKG9iaiAhPSBOVUxMKSB7Ci0gICAgICAgIGlmIChQeUluZGV4X0NoZWNrKG9iaikpIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IFB5TnVtYmVyX0luZGV4KG9iaik7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzbGljZSBpbmRpY2VzIG11c3QgYmUgaW50ZWdlcnMgb3IgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOb25lIG9yIGhhdmUgYW4gX19pbmRleF9fIG1ldGhvZCIpOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLS8qIFJlcGxhY2UgUHlTbGljZV9HZXRJbmRpY2VzRXgKLSAqICAgUmVzdWx0IGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgc2xpY2UgaXMgZW1wdHkKLSAqICAgICgtMSA9IGVycm9yLCAwID0gZW1wdHkgc2xpY2UsIDEgPSBzbGljZSBjb250YWlucyBlbGVtZW50cykKLSAqLwotc3RhdGljIGludAotY29tcHV0ZV9zbGljZV9pbmRpY2VzKHJhbmdlb2JqZWN0ICpyLCBQeVNsaWNlT2JqZWN0ICpzbGljZSwKLSAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqKnN0YXJ0LCBQeU9iamVjdCAqKnN0b3AsIFB5T2JqZWN0ICoqc3RlcCkKLXsKLSAgICBpbnQgY21wX3Jlc3VsdCwgaGFzX2VsZW1lbnRzOwotICAgIFB5X3NzaXplX3QgY2xhbXBlZF9zdGVwID0gMDsKLSAgICBQeU9iamVjdCAqemVybyA9IE5VTEwsICpvbmUgPSBOVUxMLCAqbmVnX29uZSA9IE5VTEwsICpjYW5kaWRhdGUgPSBOVUxMOwotICAgIFB5T2JqZWN0ICp0bXBfc3RhcnQgPSBOVUxMLCAqdG1wX3N0b3AgPSBOVUxMLCAqdG1wX3N0ZXAgPSBOVUxMOwotICAgIHplcm8gPSBQeUxvbmdfRnJvbUxvbmcoMCk7Ci0gICAgaWYgKHplcm8gPT0gTlVMTCkgZ290byBGYWlsOwotICAgIG9uZSA9IFB5TG9uZ19Gcm9tTG9uZygxKTsKLSAgICBpZiAob25lID09IE5VTEwpIGdvdG8gRmFpbDsKLSAgICBuZWdfb25lID0gUHlMb25nX0Zyb21Mb25nKC0xKTsKLSAgICBpZiAobmVnX29uZSA9PSBOVUxMKSBnb3RvIEZhaWw7Ci0KLSAgICAvKiBDYWxjdWxhdGUgc3RlcCB2YWx1ZSAqLwotICAgIGlmIChzbGljZS0+c3RlcCA9PSBQeV9Ob25lKSB7Ci0gICAgICAgIGNsYW1wZWRfc3RlcCA9IDE7Ci0gICAgICAgIHRtcF9zdGVwID0gb25lOwotICAgICAgICBQeV9JTkNSRUYodG1wX3N0ZXApOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICghX1B5RXZhbF9TbGljZUluZGV4KHNsaWNlLT5zdGVwLCAmY2xhbXBlZF9zdGVwKSkgZ290byBGYWlsOwotICAgICAgICBpZiAoY2xhbXBlZF9zdGVwID09IDApIHsKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzbGljZSBzdGVwIGNhbm5vdCBiZSB6ZXJvIik7Ci0gICAgICAgICAgICBnb3RvIEZhaWw7Ci0gICAgICAgIH0KLSAgICAgICAgdG1wX3N0ZXAgPSBjb21wdXRlX3NsaWNlX2VsZW1lbnQoc2xpY2UtPnN0ZXApOwotICAgICAgICBpZiAodG1wX3N0ZXAgPT0gTlVMTCkgZ290byBGYWlsOwotICAgIH0KLQotICAgIC8qIENhbGN1bGF0ZSBzdGFydCB2YWx1ZSAqLwotICAgIGlmIChzbGljZS0+c3RhcnQgPT0gUHlfTm9uZSkgewotICAgICAgICBpZiAoY2xhbXBlZF9zdGVwIDwgMCkgewotICAgICAgICAgICAgdG1wX3N0YXJ0ID0gUHlOdW1iZXJfU3VidHJhY3Qoci0+bGVuZ3RoLCBvbmUpOwotICAgICAgICAgICAgaWYgKHRtcF9zdGFydCA9PSBOVUxMKSBnb3RvIEZhaWw7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB0bXBfc3RhcnQgPSB6ZXJvOwotICAgICAgICAgICAgUHlfSU5DUkVGKHRtcF9zdGFydCk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBjYW5kaWRhdGUgPSBjb21wdXRlX3NsaWNlX2VsZW1lbnQoc2xpY2UtPnN0YXJ0KTsKLSAgICAgICAgaWYgKGNhbmRpZGF0ZSA9PSBOVUxMKSBnb3RvIEZhaWw7Ci0gICAgICAgIGNtcF9yZXN1bHQgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2woY2FuZGlkYXRlLCB6ZXJvLCBQeV9MVCk7Ci0gICAgICAgIGlmIChjbXBfcmVzdWx0ID09IC0xKSBnb3RvIEZhaWw7Ci0gICAgICAgIGlmIChjbXBfcmVzdWx0KSB7Ci0gICAgICAgICAgICAvKiBjYW5kaWRhdGUgPCAwICovCi0gICAgICAgICAgICB0bXBfc3RhcnQgPSBQeU51bWJlcl9BZGQoci0+bGVuZ3RoLCBjYW5kaWRhdGUpOwotICAgICAgICAgICAgaWYgKHRtcF9zdGFydCA9PSBOVUxMKSBnb3RvIEZhaWw7Ci0gICAgICAgICAgICBQeV9DTEVBUihjYW5kaWRhdGUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLyogY2FuZGlkYXRlID49IDAgKi8KLSAgICAgICAgICAgIHRtcF9zdGFydCA9IGNhbmRpZGF0ZTsKLSAgICAgICAgICAgIGNhbmRpZGF0ZSA9IE5VTEw7Ci0gICAgICAgIH0KLSAgICAgICAgY21wX3Jlc3VsdCA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbCh0bXBfc3RhcnQsIHplcm8sIFB5X0xUKTsKLSAgICAgICAgaWYgKGNtcF9yZXN1bHQgPT0gLTEpIGdvdG8gRmFpbDsKLSAgICAgICAgaWYgKGNtcF9yZXN1bHQpIHsKLSAgICAgICAgICAgIC8qIHRtcF9zdGFydCA8IDAgKi8KLSAgICAgICAgICAgIFB5X0NMRUFSKHRtcF9zdGFydCk7Ci0gICAgICAgICAgICBpZiAoY2xhbXBlZF9zdGVwIDwgMCkgewotICAgICAgICAgICAgICAgIHRtcF9zdGFydCA9IG5lZ19vbmU7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHRtcF9zdGFydCA9IHplcm87Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBQeV9JTkNSRUYodG1wX3N0YXJ0KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8qIHRtcF9zdGFydCA+PSAwICovCi0gICAgICAgICAgICBjbXBfcmVzdWx0ID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKHRtcF9zdGFydCwgci0+bGVuZ3RoLCBQeV9HRSk7Ci0gICAgICAgICAgICBpZiAoY21wX3Jlc3VsdCA9PSAtMSkgZ290byBGYWlsOwotICAgICAgICAgICAgaWYgKGNtcF9yZXN1bHQpIHsKLSAgICAgICAgICAgICAgICAvKiB0bXBfc3RhcnQgPj0gci0+bGVuZ3RoICovCi0gICAgICAgICAgICAgICAgUHlfQ0xFQVIodG1wX3N0YXJ0KTsKLSAgICAgICAgICAgICAgICBpZiAoY2xhbXBlZF9zdGVwIDwgMCkgewotICAgICAgICAgICAgICAgICAgICB0bXBfc3RhcnQgPSBQeU51bWJlcl9TdWJ0cmFjdChyLT5sZW5ndGgsIG9uZSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0bXBfc3RhcnQgPT0gTlVMTCkgZ290byBGYWlsOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHRtcF9zdGFydCA9IHItPmxlbmd0aDsKLSAgICAgICAgICAgICAgICAgICAgUHlfSU5DUkVGKHRtcF9zdGFydCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyogQ2FsY3VsYXRlIHN0b3AgdmFsdWUgKi8KLSAgICBpZiAoc2xpY2UtPnN0b3AgPT0gUHlfTm9uZSkgewotICAgICAgICBpZiAoY2xhbXBlZF9zdGVwIDwgMCkgewotICAgICAgICAgICAgdG1wX3N0b3AgPSBuZWdfb25lOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdG1wX3N0b3AgPSByLT5sZW5ndGg7Ci0gICAgICAgIH0KLSAgICAgICAgUHlfSU5DUkVGKHRtcF9zdG9wKTsKLSAgICB9IGVsc2UgewotICAgICAgICBjYW5kaWRhdGUgPSBjb21wdXRlX3NsaWNlX2VsZW1lbnQoc2xpY2UtPnN0b3ApOwotICAgICAgICBpZiAoY2FuZGlkYXRlID09IE5VTEwpIGdvdG8gRmFpbDsKLSAgICAgICAgY21wX3Jlc3VsdCA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbChjYW5kaWRhdGUsIHplcm8sIFB5X0xUKTsKLSAgICAgICAgaWYgKGNtcF9yZXN1bHQgPT0gLTEpIGdvdG8gRmFpbDsKLSAgICAgICAgaWYgKGNtcF9yZXN1bHQpIHsKLSAgICAgICAgICAgIC8qIGNhbmRpZGF0ZSA8IDAgKi8KLSAgICAgICAgICAgIHRtcF9zdG9wID0gUHlOdW1iZXJfQWRkKHItPmxlbmd0aCwgY2FuZGlkYXRlKTsKLSAgICAgICAgICAgIGlmICh0bXBfc3RvcCA9PSBOVUxMKSBnb3RvIEZhaWw7Ci0gICAgICAgICAgICBQeV9DTEVBUihjYW5kaWRhdGUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLyogY2FuZGlkYXRlID49IDAgKi8KLSAgICAgICAgICAgIHRtcF9zdG9wID0gY2FuZGlkYXRlOwotICAgICAgICAgICAgY2FuZGlkYXRlID0gTlVMTDsKLSAgICAgICAgfQotICAgICAgICBjbXBfcmVzdWx0ID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKHRtcF9zdG9wLCB6ZXJvLCBQeV9MVCk7Ci0gICAgICAgIGlmIChjbXBfcmVzdWx0ID09IC0xKSBnb3RvIEZhaWw7Ci0gICAgICAgIGlmIChjbXBfcmVzdWx0KSB7Ci0gICAgICAgICAgICAvKiB0bXBfc3RvcCA8IDAgKi8KLSAgICAgICAgICAgIFB5X0NMRUFSKHRtcF9zdG9wKTsKLSAgICAgICAgICAgIGlmIChjbGFtcGVkX3N0ZXAgPCAwKSB7Ci0gICAgICAgICAgICAgICAgdG1wX3N0b3AgPSBuZWdfb25lOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB0bXBfc3RvcCA9IHplcm87Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBQeV9JTkNSRUYodG1wX3N0b3ApOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLyogdG1wX3N0b3AgPj0gMCAqLwotICAgICAgICAgICAgY21wX3Jlc3VsdCA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbCh0bXBfc3RvcCwgci0+bGVuZ3RoLCBQeV9HRSk7Ci0gICAgICAgICAgICBpZiAoY21wX3Jlc3VsdCA9PSAtMSkgZ290byBGYWlsOwotICAgICAgICAgICAgaWYgKGNtcF9yZXN1bHQpIHsKLSAgICAgICAgICAgICAgICAvKiB0bXBfc3RvcCA+PSByLT5sZW5ndGggKi8KLSAgICAgICAgICAgICAgICBQeV9DTEVBUih0bXBfc3RvcCk7Ci0gICAgICAgICAgICAgICAgaWYgKGNsYW1wZWRfc3RlcCA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAgdG1wX3N0b3AgPSBQeU51bWJlcl9TdWJ0cmFjdChyLT5sZW5ndGgsIG9uZSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0bXBfc3RvcCA9PSBOVUxMKSBnb3RvIEZhaWw7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgdG1wX3N0b3AgPSByLT5sZW5ndGg7Ci0gICAgICAgICAgICAgICAgICAgIFB5X0lOQ1JFRih0bXBfc3RvcCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyogQ2hlY2sgaWYgdGhlIHNsaWNlIGlzIGVtcHR5IG9yIG5vdCAqLwotICAgIGlmIChjbGFtcGVkX3N0ZXAgPCAwKSB7Ci0gICAgICAgIGhhc19lbGVtZW50cyA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbCh0bXBfc3RhcnQsIHRtcF9zdG9wLCBQeV9HVCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaGFzX2VsZW1lbnRzID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKHRtcF9zdGFydCwgdG1wX3N0b3AsIFB5X0xUKTsKLSAgICB9Ci0gICAgaWYgKGhhc19lbGVtZW50cyA9PSAtMSkgZ290byBGYWlsOwotCi0gICAgKnN0YXJ0ID0gdG1wX3N0YXJ0OwotICAgICpzdG9wID0gdG1wX3N0b3A7Ci0gICAgKnN0ZXAgPSB0bXBfc3RlcDsKLSAgICBQeV9ERUNSRUYobmVnX29uZSk7Ci0gICAgUHlfREVDUkVGKG9uZSk7Ci0gICAgUHlfREVDUkVGKHplcm8pOwotICAgIHJldHVybiBoYXNfZWxlbWVudHM7Ci0KLSAgRmFpbDoKLSAgICBQeV9YREVDUkVGKHRtcF9zdGFydCk7Ci0gICAgUHlfWERFQ1JFRih0bXBfc3RvcCk7Ci0gICAgUHlfWERFQ1JFRih0bXBfc3RlcCk7Ci0gICAgUHlfWERFQ1JFRihjYW5kaWRhdGUpOwotICAgIFB5X1hERUNSRUYobmVnX29uZSk7Ci0gICAgUHlfWERFQ1JFRihvbmUpOwotICAgIFB5X1hERUNSRUYoemVybyk7Ci0gICAgcmV0dXJuIC0xOwotfQotCiBzdGF0aWMgUHlPYmplY3QgKgogY29tcHV0ZV9zbGljZShyYW5nZW9iamVjdCAqciwgUHlPYmplY3QgKl9zbGljZSkKIHsKQEAgLTUxNCwxMCArMzMyLDExIEBACiAgICAgcmFuZ2VvYmplY3QgKnJlc3VsdDsKICAgICBQeU9iamVjdCAqc3RhcnQgPSBOVUxMLCAqc3RvcCA9IE5VTEwsICpzdGVwID0gTlVMTDsKICAgICBQeU9iamVjdCAqc3Vic3RhcnQgPSBOVUxMLCAqc3Vic3RvcCA9IE5VTEwsICpzdWJzdGVwID0gTlVMTDsKLSAgICBpbnQgaGFzX2VsZW1lbnRzOworICAgIGludCBlcnJvcjsKIAotICAgIGhhc19lbGVtZW50cyA9IGNvbXB1dGVfc2xpY2VfaW5kaWNlcyhyLCBzbGljZSwgJnN0YXJ0LCAmc3RvcCwgJnN0ZXApOwotICAgIGlmIChoYXNfZWxlbWVudHMgPT0gLTEpIHJldHVybiBOVUxMOworICAgIGVycm9yID0gX1B5U2xpY2VfR2V0TG9uZ0luZGljZXMoc2xpY2UsIHItPmxlbmd0aCwgJnN0YXJ0LCAmc3RvcCwgJnN0ZXApOworICAgIGlmIChlcnJvciA9PSAtMSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBzdWJzdGVwID0gUHlOdW1iZXJfTXVsdGlwbHkoci0+c3RlcCwgc3RlcCk7CiAgICAgaWYgKHN1YnN0ZXAgPT0gTlVMTCkgZ290byBmYWlsOwpAQCAtNTI3LDEzICszNDYsOCBAQAogICAgIGlmIChzdWJzdGFydCA9PSBOVUxMKSBnb3RvIGZhaWw7CiAgICAgUHlfQ0xFQVIoc3RhcnQpOwogCi0gICAgaWYgKGhhc19lbGVtZW50cykgewotICAgICAgICBzdWJzdG9wID0gY29tcHV0ZV9pdGVtKHIsIHN0b3ApOwotICAgICAgICBpZiAoc3Vic3RvcCA9PSBOVUxMKSBnb3RvIGZhaWw7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc3Vic3RvcCA9IHN1YnN0YXJ0OwotICAgICAgICBQeV9JTkNSRUYoc3Vic3RvcCk7Ci0gICAgfQorICAgIHN1YnN0b3AgPSBjb21wdXRlX2l0ZW0ociwgc3RvcCk7CisgICAgaWYgKHN1YnN0b3AgPT0gTlVMTCkgZ290byBmYWlsOwogICAgIFB5X0NMRUFSKHN0b3ApOwogCiAgICAgcmVzdWx0ID0gbWFrZV9yYW5nZV9vYmplY3QoUHlfVFlQRShyKSwgc3Vic3RhcnQsIHN1YnN0b3AsIHN1YnN0ZXApOwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9zZXRvYmplY3QuYyBiL09iamVjdHMvc2V0b2JqZWN0LmMKaW5kZXggZWE1YTI0Yy4uMzA0NTE5YyAxMDA2NDQKLS0tIGEvT2JqZWN0cy9zZXRvYmplY3QuYworKysgYi9PYmplY3RzL3NldG9iamVjdC5jCkBAIC0xLDE1NCArMSwxMTggQEAKIAogLyogc2V0IG9iamVjdCBpbXBsZW1lbnRhdGlvbgorCiAgICBXcml0dGVuIGFuZCBtYWludGFpbmVkIGJ5IFJheW1vbmQgRC4gSGV0dGluZ2VyIDxweXRob25AcmNuLmNvbT4KICAgIERlcml2ZWQgZnJvbSBMaWIvc2V0cy5weSBhbmQgT2JqZWN0cy9kaWN0b2JqZWN0LmMuCiAKLSAgIENvcHlyaWdodCAoYykgMjAwMy0yMDA4IFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICAgQ29weXJpZ2h0IChjKSAyMDAzLTIwMTMgUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgICBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisgICBUaGUgYmFzaWMgbG9va3VwIGZ1bmN0aW9uIHVzZWQgYnkgYWxsIG9wZXJhdGlvbnMuCisgICBUaGlzIGlzIGJhc2VkIG9uIEFsZ29yaXRobSBEIGZyb20gS251dGggVm9sLiAzLCBTZWMuIDYuNC4KKworICAgVGhlIGluaXRpYWwgcHJvYmUgaW5kZXggaXMgY29tcHV0ZWQgYXMgaGFzaCBtb2QgdGhlIHRhYmxlIHNpemUuCisgICBTdWJzZXF1ZW50IHByb2JlIGluZGljZXMgYXJlIGNvbXB1dGVkIGFzIGV4cGxhaW5lZCBpbiBPYmplY3RzL2RpY3RvYmplY3QuYy4KKworICAgVG8gaW1wcm92ZSBjYWNoZSBsb2NhbGl0eSwgZWFjaCBwcm9iZSBpbnNwZWN0cyBhIHNlcmllcyBvZiBjb25zZWN1dGl2ZQorICAgbmVhcmJ5IGVudHJpZXMgYmVmb3JlIG1vdmluZyBvbiB0byBwcm9iZXMgZWxzZXdoZXJlIGluIG1lbW9yeS4gIFRoaXMgbGVhdmVzCisgICB1cyB3aXRoIGEgaHlicmlkIG9mIGxpbmVhciBwcm9iaW5nIGFuZCBvcGVuIGFkZHJlc3NpbmcuICBUaGUgbGluZWFyIHByb2JpbmcKKyAgIHJlZHVjZXMgdGhlIGNvc3Qgb2YgaGFzaCBjb2xsaXNpb25zIGJlY2F1c2UgY29uc2VjdXRpdmUgbWVtb3J5IGFjY2Vzc2VzCisgICB0ZW5kIHRvIGJlIG11Y2ggY2hlYXBlciB0aGFuIHNjYXR0ZXJlZCBwcm9iZXMuICBBZnRlciBMSU5FQVJfUFJPQkVTIHN0ZXBzLAorICAgd2UgdGhlbiB1c2Ugb3BlbiBhZGRyZXNzaW5nIHdpdGggdGhlIHVwcGVyIGJpdHMgZnJvbSB0aGUgaGFzaCB2YWx1ZS4gIFRoaXMKKyAgIGhlbHBzIGJyZWFrLXVwIGxvbmcgY2hhaW5zIG9mIGNvbGxpc2lvbnMuCisKKyAgIEFsbCBhcml0aG1ldGljIG9uIGhhc2ggc2hvdWxkIGlnbm9yZSBvdmVyZmxvdy4KKworICAgVW5saWtlIHRoZSBkaWN0aW9uYXJ5IGltcGxlbWVudGF0aW9uLCB0aGUgbG9va2tleSBmdW5jdGlvbnMgY2FuIHJldHVybgorICAgTlVMTCBpZiB0aGUgcmljaCBjb21wYXJpc29uIHJldHVybnMgYW4gZXJyb3IuCiAqLwogCiAjaW5jbHVkZSAiUHl0aG9uLmgiCiAjaW5jbHVkZSAic3RydWN0bWVtYmVyLmgiCiAjaW5jbHVkZSAic3RyaW5nbGliL2VxLmgiCiAKLS8qIFNldCBhIGtleSBlcnJvciB3aXRoIHRoZSBzcGVjaWZpZWQgYXJndW1lbnQsIHdyYXBwaW5nIGl0IGluIGEKLSAqIHR1cGxlIGF1dG9tYXRpY2FsbHkgc28gdGhhdCB0dXBsZSBrZXlzIGFyZSBub3QgdW5wYWNrZWQgYXMgdGhlCi0gKiBleGNlcHRpb24gYXJndW1lbnRzLiAqLwotc3RhdGljIHZvaWQKLXNldF9rZXlfZXJyb3IoUHlPYmplY3QgKmFyZykKLXsKLSAgICBQeU9iamVjdCAqdHVwOwotICAgIHR1cCA9IFB5VHVwbGVfUGFjaygxLCBhcmcpOwotICAgIGlmICghdHVwKQotICAgICAgICByZXR1cm47IC8qIGNhbGxlciB3aWxsIGV4cGVjdCBlcnJvciB0byBiZSBzZXQgYW55d2F5ICovCi0gICAgUHlFcnJfU2V0T2JqZWN0KFB5RXhjX0tleUVycm9yLCB0dXApOwotICAgIFB5X0RFQ1JFRih0dXApOwotfQorLyogT2JqZWN0IHVzZWQgYXMgZHVtbXkga2V5IHRvIGZpbGwgZGVsZXRlZCBlbnRyaWVzICovCitzdGF0aWMgUHlPYmplY3QgX2R1bW15X3N0cnVjdDsKIAotLyogVGhpcyBtdXN0IGJlID49IDEuICovCisjZGVmaW5lIGR1bW15ICgmX2R1bW15X3N0cnVjdCkKKworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT0gQmVnaW4gbG9naWMgZm9yIHByb2JpbmcgdGhlIGhhc2ggdGFibGUgPT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisvKiBTZXQgdGhpcyB0byB6ZXJvIHRvIHR1cm4tb2ZmIGxpbmVhciBwcm9iaW5nICovCisjaWZuZGVmIExJTkVBUl9QUk9CRVMKKyNkZWZpbmUgTElORUFSX1BST0JFUyA5CisjZW5kaWYKKworLyogVGhpcyBtdXN0IGJlID49IDEgKi8KICNkZWZpbmUgUEVSVFVSQl9TSElGVCA1CiAKLS8qIE9iamVjdCB1c2VkIGFzIGR1bW15IGtleSB0byBmaWxsIGRlbGV0ZWQgZW50cmllcyAqLwotc3RhdGljIFB5T2JqZWN0ICpkdW1teSA9IE5VTEw7IC8qIEluaXRpYWxpemVkIGJ5IGZpcnN0IGNhbGwgdG8gbWFrZV9uZXdfc2V0KCkgKi8KLQotI2lmZGVmIFB5X1JFRl9ERUJVRwotUHlPYmplY3QgKgotX1B5U2V0X0R1bW15KHZvaWQpCi17Ci0gICAgcmV0dXJuIGR1bW15OwotfQotI2VuZGlmCi0KLSNkZWZpbmUgSU5JVF9OT05aRVJPX1NFVF9TTE9UUyhzbykgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgKHNvKS0+dGFibGUgPSAoc28pLT5zbWFsbHRhYmxlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIChzbyktPm1hc2sgPSBQeVNldF9NSU5TSVpFIC0gMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAoc28pLT5oYXNoID0gLTE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSB3aGlsZSgwKQotCi0jZGVmaW5lIEVNUFRZX1RPX01JTlNJWkUoc28pIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1lbXNldCgoc28pLT5zbWFsbHRhYmxlLCAwLCBzaXplb2YoKHNvKS0+c21hbGx0YWJsZSkpOyAgICAgIFwKLSAgICAoc28pLT51c2VkID0gKHNvKS0+ZmlsbCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgSU5JVF9OT05aRVJPX1NFVF9TTE9UUyhzbyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gd2hpbGUoMCkKLQotLyogUmV1c2Ugc2NoZW1lIHRvIHNhdmUgY2FsbHMgdG8gbWFsbG9jLCBmcmVlLCBhbmQgbWVtc2V0ICovCi0jaWZuZGVmIFB5U2V0X01BWEZSRUVMSVNUCi0jZGVmaW5lIFB5U2V0X01BWEZSRUVMSVNUIDgwCi0jZW5kaWYKLXN0YXRpYyBQeVNldE9iamVjdCAqZnJlZV9saXN0W1B5U2V0X01BWEZSRUVMSVNUXTsKLXN0YXRpYyBpbnQgbnVtZnJlZSA9IDA7Ci0KLQotLyoKLVRoZSBiYXNpYyBsb29rdXAgZnVuY3Rpb24gdXNlZCBieSBhbGwgb3BlcmF0aW9ucy4KLVRoaXMgaXMgYmFzZWQgb24gQWxnb3JpdGhtIEQgZnJvbSBLbnV0aCBWb2wuIDMsIFNlYy4gNi40LgotT3BlbiBhZGRyZXNzaW5nIGlzIHByZWZlcnJlZCBvdmVyIGNoYWluaW5nIHNpbmNlIHRoZSBsaW5rIG92ZXJoZWFkIGZvcgotY2hhaW5pbmcgd291bGQgYmUgc3Vic3RhbnRpYWwgKDEwMCUgd2l0aCB0eXBpY2FsIG1hbGxvYyBvdmVyaGVhZCkuCi0KLVRoZSBpbml0aWFsIHByb2JlIGluZGV4IGlzIGNvbXB1dGVkIGFzIGhhc2ggbW9kIHRoZSB0YWJsZSBzaXplLiBTdWJzZXF1ZW50Ci1wcm9iZSBpbmRpY2VzIGFyZSBjb21wdXRlZCBhcyBleHBsYWluZWQgaW4gT2JqZWN0cy9kaWN0b2JqZWN0LmMuCi0KLUFsbCBhcml0aG1ldGljIG9uIGhhc2ggc2hvdWxkIGlnbm9yZSBvdmVyZmxvdy4KLQotVW5saWtlIHRoZSBkaWN0aW9uYXJ5IGltcGxlbWVudGF0aW9uLCB0aGUgbG9va2tleSBmdW5jdGlvbnMgY2FuIHJldHVybgotTlVMTCBpZiB0aGUgcmljaCBjb21wYXJpc29uIHJldHVybnMgYW4gZXJyb3IuCi0qLwotCiBzdGF0aWMgc2V0ZW50cnkgKgotc2V0X2xvb2trZXkoUHlTZXRPYmplY3QgKnNvLCBQeU9iamVjdCAqa2V5LCByZWdpc3RlciBQeV9oYXNoX3QgaGFzaCkKK3NldF9sb29ra2V5KFB5U2V0T2JqZWN0ICpzbywgUHlPYmplY3QgKmtleSwgUHlfaGFzaF90IGhhc2gpCiB7Ci0gICAgcmVnaXN0ZXIgc2l6ZV90IGk7ICAvKiBVbnNpZ25lZCBmb3IgZGVmaW5lZCBvdmVyZmxvdyBiZWhhdmlvci4gKi8KLSAgICByZWdpc3RlciBzaXplX3QgcGVydHVyYjsKLSAgICByZWdpc3RlciBzZXRlbnRyeSAqZnJlZXNsb3Q7Ci0gICAgcmVnaXN0ZXIgc2l6ZV90IG1hc2sgPSBzby0+bWFzazsKICAgICBzZXRlbnRyeSAqdGFibGUgPSBzby0+dGFibGU7Ci0gICAgcmVnaXN0ZXIgc2V0ZW50cnkgKmVudHJ5OwotICAgIHJlZ2lzdGVyIGludCBjbXA7Ci0gICAgUHlPYmplY3QgKnN0YXJ0a2V5OworICAgIHNldGVudHJ5ICpmcmVlc2xvdCA9IE5VTEw7CisgICAgc2V0ZW50cnkgKmVudHJ5OworICAgIHNpemVfdCBwZXJ0dXJiID0gaGFzaDsKKyAgICBzaXplX3QgbWFzayA9IHNvLT5tYXNrOworICAgIHNpemVfdCBpID0gKHNpemVfdCloYXNoOyAvKiBVbnNpZ25lZCBmb3IgZGVmaW5lZCBvdmVyZmxvdyBiZWhhdmlvci4gKi8KKyAgICBzaXplX3QgajsKKyAgICBpbnQgY21wOwogCi0gICAgaSA9IChzaXplX3QpaGFzaCAmIG1hc2s7Ci0gICAgZW50cnkgPSAmdGFibGVbaV07Ci0gICAgaWYgKGVudHJ5LT5rZXkgPT0gTlVMTCB8fCBlbnRyeS0+a2V5ID09IGtleSkKKyAgICBlbnRyeSA9ICZ0YWJsZVtpICYgbWFza107CisgICAgaWYgKGVudHJ5LT5rZXkgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIGVudHJ5OwogCi0gICAgaWYgKGVudHJ5LT5rZXkgPT0gZHVtbXkpCi0gICAgICAgIGZyZWVzbG90ID0gZW50cnk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGlmIChlbnRyeS0+aGFzaCA9PSBoYXNoKSB7Ci0gICAgICAgICAgICBzdGFydGtleSA9IGVudHJ5LT5rZXk7CisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgaWYgKGVudHJ5LT5rZXkgPT0ga2V5KQorICAgICAgICAgICAgcmV0dXJuIGVudHJ5OworICAgICAgICBpZiAoZW50cnktPmhhc2ggPT0gaGFzaCAmJiBlbnRyeS0+a2V5ICE9IGR1bW15KSB7CisgICAgICAgICAgICBQeU9iamVjdCAqc3RhcnRrZXkgPSBlbnRyeS0+a2V5OwogICAgICAgICAgICAgUHlfSU5DUkVGKHN0YXJ0a2V5KTsKICAgICAgICAgICAgIGNtcCA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbChzdGFydGtleSwga2V5LCBQeV9FUSk7CiAgICAgICAgICAgICBQeV9ERUNSRUYoc3RhcnRrZXkpOwogICAgICAgICAgICAgaWYgKGNtcCA8IDApCiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICBpZiAodGFibGUgPT0gc28tPnRhYmxlICYmIGVudHJ5LT5rZXkgPT0gc3RhcnRrZXkpIHsKKyAgICAgICAgICAgIGlmICh0YWJsZSAhPSBzby0+dGFibGUgfHwgZW50cnktPmtleSAhPSBzdGFydGtleSkKKyAgICAgICAgICAgICAgICByZXR1cm4gc2V0X2xvb2trZXkoc28sIGtleSwgaGFzaCk7CisgICAgICAgICAgICBpZiAoY21wID4gMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZW50cnk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGVudHJ5LT5rZXkgPT0gZHVtbXkgJiYgZnJlZXNsb3QgPT0gTlVMTCkKKyAgICAgICAgICAgIGZyZWVzbG90ID0gZW50cnk7CisKKyAgICAgICAgZm9yIChqID0gMSA7IGogPD0gTElORUFSX1BST0JFUyA7IGorKykgeworICAgICAgICAgICAgZW50cnkgPSAmdGFibGVbKGkgKyBqKSAmIG1hc2tdOworICAgICAgICAgICAgaWYgKGVudHJ5LT5rZXkgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGZvdW5kX251bGw7CisgICAgICAgICAgICBpZiAoZW50cnktPmtleSA9PSBrZXkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGVudHJ5OworICAgICAgICAgICAgaWYgKGVudHJ5LT5oYXNoID09IGhhc2ggJiYgZW50cnktPmtleSAhPSBkdW1teSkgeworICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpzdGFydGtleSA9IGVudHJ5LT5rZXk7CisgICAgICAgICAgICAgICAgUHlfSU5DUkVGKHN0YXJ0a2V5KTsKKyAgICAgICAgICAgICAgICBjbXAgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2woc3RhcnRrZXksIGtleSwgUHlfRVEpOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihzdGFydGtleSk7CisgICAgICAgICAgICAgICAgaWYgKGNtcCA8IDApCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgICAgIGlmICh0YWJsZSAhPSBzby0+dGFibGUgfHwgZW50cnktPmtleSAhPSBzdGFydGtleSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldF9sb29ra2V5KHNvLCBrZXksIGhhc2gpOwogICAgICAgICAgICAgICAgIGlmIChjbXAgPiAwKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZW50cnk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAvKiBUaGUgY29tcGFyZSBkaWQgbWFqb3IgbmFzdHkgc3R1ZmYgdG8gdGhlCi0gICAgICAgICAgICAgICAgICogc2V0OiAgc3RhcnQgb3Zlci4KLSAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICByZXR1cm4gc2V0X2xvb2trZXkoc28sIGtleSwgaGFzaCk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZW50cnktPmtleSA9PSBkdW1teSAmJiBmcmVlc2xvdCA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGZyZWVzbG90ID0gZW50cnk7CiAgICAgICAgIH0KLSAgICAgICAgZnJlZXNsb3QgPSBOVUxMOwotICAgIH0KIAotICAgIC8qIEluIHRoZSBsb29wLCBrZXkgPT0gZHVtbXkgaXMgYnkgZmFyIChmYWN0b3Igb2YgMTAwcykgdGhlCi0gICAgICAgbGVhc3QgbGlrZWx5IG91dGNvbWUsIHNvIHRlc3QgZm9yIHRoYXQgbGFzdC4gKi8KLSAgICBmb3IgKHBlcnR1cmIgPSBoYXNoOyA7IHBlcnR1cmIgPj49IFBFUlRVUkJfU0hJRlQpIHsKLSAgICAgICAgaSA9IChpIDw8IDIpICsgaSArIHBlcnR1cmIgKyAxOworICAgICAgICBwZXJ0dXJiID4+PSBQRVJUVVJCX1NISUZUOworICAgICAgICBpID0gaSAqIDUgKyAxICsgcGVydHVyYjsKKwogICAgICAgICBlbnRyeSA9ICZ0YWJsZVtpICYgbWFza107Ci0gICAgICAgIGlmIChlbnRyeS0+a2V5ID09IE5VTEwpIHsKLSAgICAgICAgICAgIGlmIChmcmVlc2xvdCAhPSBOVUxMKQotICAgICAgICAgICAgICAgIGVudHJ5ID0gZnJlZXNsb3Q7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAoZW50cnktPmtleSA9PSBrZXkpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgaWYgKGVudHJ5LT5oYXNoID09IGhhc2ggJiYgZW50cnktPmtleSAhPSBkdW1teSkgewotICAgICAgICAgICAgc3RhcnRrZXkgPSBlbnRyeS0+a2V5OwotICAgICAgICAgICAgUHlfSU5DUkVGKHN0YXJ0a2V5KTsKLSAgICAgICAgICAgIGNtcCA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbChzdGFydGtleSwga2V5LCBQeV9FUSk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYoc3RhcnRrZXkpOwotICAgICAgICAgICAgaWYgKGNtcCA8IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICBpZiAodGFibGUgPT0gc28tPnRhYmxlICYmIGVudHJ5LT5rZXkgPT0gc3RhcnRrZXkpIHsKLSAgICAgICAgICAgICAgICBpZiAoY21wID4gMCkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAvKiBUaGUgY29tcGFyZSBkaWQgbWFqb3IgbmFzdHkgc3R1ZmYgdG8gdGhlCi0gICAgICAgICAgICAgICAgICogc2V0OiAgc3RhcnQgb3Zlci4KLSAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICByZXR1cm4gc2V0X2xvb2trZXkoc28sIGtleSwgaGFzaCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoZW50cnktPmtleSA9PSBkdW1teSAmJiBmcmVlc2xvdCA9PSBOVUxMKQotICAgICAgICAgICAgZnJlZXNsb3QgPSBlbnRyeTsKKyAgICAgICAgaWYgKGVudHJ5LT5rZXkgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZm91bmRfbnVsbDsKICAgICB9Ci0gICAgcmV0dXJuIGVudHJ5OworICBmb3VuZF9udWxsOgorICAgIHJldHVybiBmcmVlc2xvdCA9PSBOVUxMID8gZW50cnkgOiBmcmVlc2xvdDsKIH0KIAogLyoKQEAgLTE1NywxNCArMTIxLDE1IEBACiAgKiBzZWUgaWYgdGhlIGNvbXBhcmlzb24gYWx0ZXJlZCB0aGUgdGFibGUuCiAgKi8KIHN0YXRpYyBzZXRlbnRyeSAqCi1zZXRfbG9va2tleV91bmljb2RlKFB5U2V0T2JqZWN0ICpzbywgUHlPYmplY3QgKmtleSwgcmVnaXN0ZXIgUHlfaGFzaF90IGhhc2gpCitzZXRfbG9va2tleV91bmljb2RlKFB5U2V0T2JqZWN0ICpzbywgUHlPYmplY3QgKmtleSwgUHlfaGFzaF90IGhhc2gpCiB7Ci0gICAgcmVnaXN0ZXIgc2l6ZV90IGk7ICAvKiBVbnNpZ25lZCBmb3IgZGVmaW5lZCBvdmVyZmxvdyBiZWhhdmlvci4gKi8KLSAgICByZWdpc3RlciBzaXplX3QgcGVydHVyYjsKLSAgICByZWdpc3RlciBzZXRlbnRyeSAqZnJlZXNsb3Q7Ci0gICAgcmVnaXN0ZXIgc2l6ZV90IG1hc2sgPSBzby0+bWFzazsKICAgICBzZXRlbnRyeSAqdGFibGUgPSBzby0+dGFibGU7Ci0gICAgcmVnaXN0ZXIgc2V0ZW50cnkgKmVudHJ5OworICAgIHNldGVudHJ5ICpmcmVlc2xvdCA9IE5VTEw7CisgICAgc2V0ZW50cnkgKmVudHJ5OworICAgIHNpemVfdCBwZXJ0dXJiID0gaGFzaDsKKyAgICBzaXplX3QgbWFzayA9IHNvLT5tYXNrOworICAgIHNpemVfdCBpID0gKHNpemVfdCloYXNoOworICAgIHNpemVfdCBqOwogCiAgICAgLyogTWFrZSBzdXJlIHRoaXMgZnVuY3Rpb24gZG9lc24ndCBoYXZlIHRvIGhhbmRsZSBub24tdW5pY29kZSBrZXlzLAogICAgICAgIGluY2x1ZGluZyBzdWJjbGFzc2VzIG9mIHN0cjsgZS5nLiwgb25lIHJlYXNvbiB0byBzdWJjbGFzcwpAQCAtMTc0LDQ2ICsxMzksOTQgQEAKICAgICAgICAgc28tPmxvb2t1cCA9IHNldF9sb29ra2V5OwogICAgICAgICByZXR1cm4gc2V0X2xvb2trZXkoc28sIGtleSwgaGFzaCk7CiAgICAgfQotICAgIGkgPSAoc2l6ZV90KWhhc2ggJiBtYXNrOwotICAgIGVudHJ5ID0gJnRhYmxlW2ldOwotICAgIGlmIChlbnRyeS0+a2V5ID09IE5VTEwgfHwgZW50cnktPmtleSA9PSBrZXkpCi0gICAgICAgIHJldHVybiBlbnRyeTsKLSAgICBpZiAoZW50cnktPmtleSA9PSBkdW1teSkKLSAgICAgICAgZnJlZXNsb3QgPSBlbnRyeTsKLSAgICBlbHNlIHsKLSAgICAgICAgaWYgKGVudHJ5LT5oYXNoID09IGhhc2ggJiYgdW5pY29kZV9lcShlbnRyeS0+a2V5LCBrZXkpKQotICAgICAgICAgICAgcmV0dXJuIGVudHJ5OwotICAgICAgICBmcmVlc2xvdCA9IE5VTEw7Ci0gICAgfQogCi0gICAgLyogSW4gdGhlIGxvb3AsIGtleSA9PSBkdW1teSBpcyBieSBmYXIgKGZhY3RvciBvZiAxMDBzKSB0aGUKLSAgICAgICBsZWFzdCBsaWtlbHkgb3V0Y29tZSwgc28gdGVzdCBmb3IgdGhhdCBsYXN0LiAqLwotICAgIGZvciAocGVydHVyYiA9IGhhc2g7IDsgcGVydHVyYiA+Pj0gUEVSVFVSQl9TSElGVCkgewotICAgICAgICBpID0gKGkgPDwgMikgKyBpICsgcGVydHVyYiArIDE7Ci0gICAgICAgIGVudHJ5ID0gJnRhYmxlW2kgJiBtYXNrXTsKLSAgICAgICAgaWYgKGVudHJ5LT5rZXkgPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiBmcmVlc2xvdCA9PSBOVUxMID8gZW50cnkgOiBmcmVlc2xvdDsKKyAgICBlbnRyeSA9ICZ0YWJsZVtpICYgbWFza107CisgICAgaWYgKGVudHJ5LT5rZXkgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIGVudHJ5OworCisgICAgd2hpbGUgKDEpIHsKICAgICAgICAgaWYgKGVudHJ5LT5rZXkgPT0ga2V5CiAgICAgICAgICAgICB8fCAoZW50cnktPmhhc2ggPT0gaGFzaAotICAgICAgICAgICAgJiYgZW50cnktPmtleSAhPSBkdW1teQotICAgICAgICAgICAgJiYgdW5pY29kZV9lcShlbnRyeS0+a2V5LCBrZXkpKSkKKyAgICAgICAgICAgICAgICAmJiBlbnRyeS0+a2V5ICE9IGR1bW15CisgICAgICAgICAgICAgICAgJiYgdW5pY29kZV9lcShlbnRyeS0+a2V5LCBrZXkpKSkKICAgICAgICAgICAgIHJldHVybiBlbnRyeTsKICAgICAgICAgaWYgKGVudHJ5LT5rZXkgPT0gZHVtbXkgJiYgZnJlZXNsb3QgPT0gTlVMTCkKICAgICAgICAgICAgIGZyZWVzbG90ID0gZW50cnk7CisKKyAgICAgICAgZm9yIChqID0gMSA7IGogPD0gTElORUFSX1BST0JFUyA7IGorKykgeworICAgICAgICAgICAgZW50cnkgPSAmdGFibGVbKGkgKyBqKSAmIG1hc2tdOworICAgICAgICAgICAgaWYgKGVudHJ5LT5rZXkgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGZvdW5kX251bGw7CisgICAgICAgICAgICBpZiAoZW50cnktPmtleSA9PSBrZXkKKyAgICAgICAgICAgICAgICB8fCAoZW50cnktPmhhc2ggPT0gaGFzaAorICAgICAgICAgICAgICAgICAgICAmJiBlbnRyeS0+a2V5ICE9IGR1bW15CisgICAgICAgICAgICAgICAgICAgICYmIHVuaWNvZGVfZXEoZW50cnktPmtleSwga2V5KSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGVudHJ5OworICAgICAgICAgICAgaWYgKGVudHJ5LT5rZXkgPT0gZHVtbXkgJiYgZnJlZXNsb3QgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBmcmVlc2xvdCA9IGVudHJ5OworICAgICAgICB9CisKKyAgICAgICAgcGVydHVyYiA+Pj0gUEVSVFVSQl9TSElGVDsKKyAgICAgICAgaSA9IGkgKiA1ICsgMSArIHBlcnR1cmI7CisKKyAgICAgICAgZW50cnkgPSAmdGFibGVbaSAmIG1hc2tdOworICAgICAgICBpZiAoZW50cnktPmtleSA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBmb3VuZF9udWxsOwogICAgIH0KLSAgICBhc3NlcnQoMCk7ICAgICAgICAgIC8qIE5PVCBSRUFDSEVEICovCi0gICAgcmV0dXJuIDA7CisgIGZvdW5kX251bGw6CisgICAgcmV0dXJuIGZyZWVzbG90ID09IE5VTEwgPyBlbnRyeSA6IGZyZWVzbG90OwogfQogCiAvKgorSW50ZXJuYWwgcm91dGluZSB1c2VkIGJ5IHNldF90YWJsZV9yZXNpemUoKSB0byBpbnNlcnQgYW4gaXRlbSB3aGljaCBpcwora25vd24gdG8gYmUgYWJzZW50IGZyb20gdGhlIHNldC4gIFRoaXMgcm91dGluZSBhbHNvIGFzc3VtZXMgdGhhdAordGhlIHNldCBjb250YWlucyBubyBkZWxldGVkIGVudHJpZXMuICBCZXNpZGVzIHRoZSBwZXJmb3JtYW5jZSBiZW5lZml0LAordXNpbmcgc2V0X2luc2VydF9jbGVhbigpIGluIHNldF90YWJsZV9yZXNpemUoKSBpcyBkYW5nZXJvdXMgKFNGIGJ1ZyAjMTQ1NjIwOSkuCitOb3RlIHRoYXQgbm8gcmVmY291bnRzIGFyZSBjaGFuZ2VkIGJ5IHRoaXMgcm91dGluZTsgaWYgbmVlZGVkLCB0aGUgY2FsbGVyCitpcyByZXNwb25zaWJsZSBmb3IgaW5jcmVmJ2luZyBga2V5YC4KKyovCitzdGF0aWMgdm9pZAorc2V0X2luc2VydF9jbGVhbihQeVNldE9iamVjdCAqc28sIFB5T2JqZWN0ICprZXksIFB5X2hhc2hfdCBoYXNoKQoreworICAgIHNldGVudHJ5ICp0YWJsZSA9IHNvLT50YWJsZTsKKyAgICBzZXRlbnRyeSAqZW50cnk7CisgICAgc2l6ZV90IHBlcnR1cmIgPSBoYXNoOworICAgIHNpemVfdCBtYXNrID0gKHNpemVfdClzby0+bWFzazsKKyAgICBzaXplX3QgaSA9IChzaXplX3QpaGFzaDsKKyAgICBzaXplX3QgajsKKworICAgIHdoaWxlICgxKSB7CisgICAgICAgIGVudHJ5ID0gJnRhYmxlW2kgJiBtYXNrXTsKKyAgICAgICAgaWYgKGVudHJ5LT5rZXkgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZm91bmRfbnVsbDsKKyAgICAgICAgZm9yIChqID0gMSA7IGogPD0gTElORUFSX1BST0JFUyA7IGorKykgeworICAgICAgICAgICAgZW50cnkgPSAmdGFibGVbKGkgKyBqKSAmIG1hc2tdOworICAgICAgICAgICAgaWYgKGVudHJ5LT5rZXkgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGZvdW5kX251bGw7CisgICAgICAgIH0KKyAgICAgICAgcGVydHVyYiA+Pj0gUEVSVFVSQl9TSElGVDsKKyAgICAgICAgaSA9IGkgKiA1ICsgMSArIHBlcnR1cmI7CisgICAgfQorICBmb3VuZF9udWxsOgorICAgIGVudHJ5LT5rZXkgPSBrZXk7CisgICAgZW50cnktPmhhc2ggPSBoYXNoOworICAgIHNvLT5maWxsKys7CisgICAgc28tPnVzZWQrKzsKK30KKworLyogPT09PT09PT0gRW5kIGxvZ2ljIGZvciBwcm9iaW5nIHRoZSBoYXNoIHRhYmxlID09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworCisvKgogSW50ZXJuYWwgcm91dGluZSB0byBpbnNlcnQgYSBuZXcga2V5IGludG8gdGhlIHRhYmxlLgogVXNlZCBieSB0aGUgcHVibGljIGluc2VydCByb3V0aW5lLgogRWF0cyBhIHJlZmVyZW5jZSB0byBrZXkuCiAqLwogc3RhdGljIGludAotc2V0X2luc2VydF9rZXkocmVnaXN0ZXIgUHlTZXRPYmplY3QgKnNvLCBQeU9iamVjdCAqa2V5LCBQeV9oYXNoX3QgaGFzaCkKK3NldF9pbnNlcnRfa2V5KFB5U2V0T2JqZWN0ICpzbywgUHlPYmplY3QgKmtleSwgUHlfaGFzaF90IGhhc2gpCiB7Ci0gICAgcmVnaXN0ZXIgc2V0ZW50cnkgKmVudHJ5OworICAgIHNldGVudHJ5ICplbnRyeTsKIAogICAgIGFzc2VydChzby0+bG9va3VwICE9IE5VTEwpOwogICAgIGVudHJ5ID0gc28tPmxvb2t1cChzbywga2V5LCBoYXNoKTsKQEAgLTIzMCw3ICsyNDMsNiBAQAogICAgICAgICBlbnRyeS0+a2V5ID0ga2V5OwogICAgICAgICBlbnRyeS0+aGFzaCA9IGhhc2g7CiAgICAgICAgIHNvLT51c2VkKys7Ci0gICAgICAgIFB5X0RFQ1JFRihkdW1teSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLyogQUNUSVZFICovCiAgICAgICAgIFB5X0RFQ1JFRihrZXkpOwpAQCAtMjM5LDM1ICsyNTEsNiBAQAogfQogCiAvKgotSW50ZXJuYWwgcm91dGluZSB1c2VkIGJ5IHNldF90YWJsZV9yZXNpemUoKSB0byBpbnNlcnQgYW4gaXRlbSB3aGljaCBpcwota25vd24gdG8gYmUgYWJzZW50IGZyb20gdGhlIHNldC4gIFRoaXMgcm91dGluZSBhbHNvIGFzc3VtZXMgdGhhdAotdGhlIHNldCBjb250YWlucyBubyBkZWxldGVkIGVudHJpZXMuICBCZXNpZGVzIHRoZSBwZXJmb3JtYW5jZSBiZW5lZml0LAotdXNpbmcgc2V0X2luc2VydF9jbGVhbigpIGluIHNldF90YWJsZV9yZXNpemUoKSBpcyBkYW5nZXJvdXMgKFNGIGJ1ZyAjMTQ1NjIwOSkuCi1Ob3RlIHRoYXQgbm8gcmVmY291bnRzIGFyZSBjaGFuZ2VkIGJ5IHRoaXMgcm91dGluZTsgaWYgbmVlZGVkLCB0aGUgY2FsbGVyCi1pcyByZXNwb25zaWJsZSBmb3IgaW5jcmVmJ2luZyBga2V5YC4KLSovCi1zdGF0aWMgdm9pZAotc2V0X2luc2VydF9jbGVhbihyZWdpc3RlciBQeVNldE9iamVjdCAqc28sIFB5T2JqZWN0ICprZXksIFB5X2hhc2hfdCBoYXNoKQotewotICAgIHJlZ2lzdGVyIHNpemVfdCBpOwotICAgIHJlZ2lzdGVyIHNpemVfdCBwZXJ0dXJiOwotICAgIHJlZ2lzdGVyIHNpemVfdCBtYXNrID0gKHNpemVfdClzby0+bWFzazsKLSAgICBzZXRlbnRyeSAqdGFibGUgPSBzby0+dGFibGU7Ci0gICAgcmVnaXN0ZXIgc2V0ZW50cnkgKmVudHJ5OwotCi0gICAgaSA9IChzaXplX3QpaGFzaCAmIG1hc2s7Ci0gICAgZW50cnkgPSAmdGFibGVbaV07Ci0gICAgZm9yIChwZXJ0dXJiID0gaGFzaDsgZW50cnktPmtleSAhPSBOVUxMOyBwZXJ0dXJiID4+PSBQRVJUVVJCX1NISUZUKSB7Ci0gICAgICAgIGkgPSAoaSA8PCAyKSArIGkgKyBwZXJ0dXJiICsgMTsKLSAgICAgICAgZW50cnkgPSAmdGFibGVbaSAmIG1hc2tdOwotICAgIH0KLSAgICBzby0+ZmlsbCsrOwotICAgIGVudHJ5LT5rZXkgPSBrZXk7Ci0gICAgZW50cnktPmhhc2ggPSBoYXNoOwotICAgIHNvLT51c2VkKys7Ci19Ci0KLS8qCiBSZXN0cnVjdHVyZSB0aGUgdGFibGUgYnkgYWxsb2NhdGluZyBhIG5ldyB0YWJsZSBhbmQgcmVpbnNlcnRpbmcgYWxsCiBrZXlzIGFnYWluLiAgV2hlbiBlbnRyaWVzIGhhdmUgYmVlbiBkZWxldGVkLCB0aGUgbmV3IHRhYmxlIG1heQogYWN0dWFsbHkgYmUgc21hbGxlciB0aGFuIHRoZSBvbGQgb25lLgpAQCAtMzMwLDIzICszMTMsMTQgQEAKICAgICBzby0+dGFibGUgPSBuZXd0YWJsZTsKICAgICBzby0+bWFzayA9IG5ld3NpemUgLSAxOwogICAgIG1lbXNldChuZXd0YWJsZSwgMCwgc2l6ZW9mKHNldGVudHJ5KSAqIG5ld3NpemUpOworICAgIGkgPSBzby0+dXNlZDsKICAgICBzby0+dXNlZCA9IDA7Ci0gICAgaSA9IHNvLT5maWxsOwogICAgIHNvLT5maWxsID0gMDsKIAogICAgIC8qIENvcHkgdGhlIGRhdGEgb3ZlcjsgdGhpcyBpcyByZWZjb3VudC1uZXV0cmFsIGZvciBhY3RpdmUgZW50cmllczsKICAgICAgICBkdW1teSBlbnRyaWVzIGFyZW4ndCBjb3BpZWQgb3Zlciwgb2YgY291cnNlICovCiAgICAgZm9yIChlbnRyeSA9IG9sZHRhYmxlOyBpID4gMDsgZW50cnkrKykgewotICAgICAgICBpZiAoZW50cnktPmtleSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAvKiBVTlVTRUQgKi8KLSAgICAgICAgICAgIDsKLSAgICAgICAgfSBlbHNlIGlmIChlbnRyeS0+a2V5ID09IGR1bW15KSB7Ci0gICAgICAgICAgICAvKiBEVU1NWSAqLwotICAgICAgICAgICAgLS1pOwotICAgICAgICAgICAgYXNzZXJ0KGVudHJ5LT5rZXkgPT0gZHVtbXkpOwotICAgICAgICAgICAgUHlfREVDUkVGKGVudHJ5LT5rZXkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLyogQUNUSVZFICovCisgICAgICAgIGlmIChlbnRyeS0+a2V5ICE9IE5VTEwgJiYgZW50cnktPmtleSAhPSBkdW1teSkgewogICAgICAgICAgICAgLS1pOwogICAgICAgICAgICAgc2V0X2luc2VydF9jbGVhbihzbywgZW50cnktPmtleSwgZW50cnktPmhhc2gpOwogICAgICAgICB9CkBAIC0zNjAsOSArMzM0LDkgQEAKIC8qIENBVVRJT046IHNldF9hZGRfa2V5L2VudHJ5KCkgbXVzdCBndWFyYW50ZWUgaXQgd29uJ3QgcmVzaXplIHRoZSB0YWJsZSAqLwogCiBzdGF0aWMgaW50Ci1zZXRfYWRkX2VudHJ5KHJlZ2lzdGVyIFB5U2V0T2JqZWN0ICpzbywgc2V0ZW50cnkgKmVudHJ5KQorc2V0X2FkZF9lbnRyeShQeVNldE9iamVjdCAqc28sIHNldGVudHJ5ICplbnRyeSkKIHsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IG5fdXNlZDsKKyAgICBQeV9zc2l6ZV90IG5fdXNlZDsKICAgICBQeU9iamVjdCAqa2V5ID0gZW50cnktPmtleTsKICAgICBQeV9oYXNoX3QgaGFzaCA9IGVudHJ5LT5oYXNoOwogCkBAIC0zNzksMTAgKzM1MywxMCBAQAogfQogCiBzdGF0aWMgaW50Ci1zZXRfYWRkX2tleShyZWdpc3RlciBQeVNldE9iamVjdCAqc28sIFB5T2JqZWN0ICprZXkpCitzZXRfYWRkX2tleShQeVNldE9iamVjdCAqc28sIFB5T2JqZWN0ICprZXkpCiB7Ci0gICAgcmVnaXN0ZXIgUHlfaGFzaF90IGhhc2g7Ci0gICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBuX3VzZWQ7CisgICAgUHlfaGFzaF90IGhhc2g7CisgICAgUHlfc3NpemVfdCBuX3VzZWQ7CiAKICAgICBpZiAoIVB5VW5pY29kZV9DaGVja0V4YWN0KGtleSkgfHwKICAgICAgICAgKGhhc2ggPSAoKFB5QVNDSUlPYmplY3QgKikga2V5KS0+aGFzaCkgPT0gLTEpIHsKQEAgLTQwNyw3ICszODEsNyBAQAogCiBzdGF0aWMgaW50CiBzZXRfZGlzY2FyZF9lbnRyeShQeVNldE9iamVjdCAqc28sIHNldGVudHJ5ICpvbGRlbnRyeSkKLXsgICAgICAgcmVnaXN0ZXIgc2V0ZW50cnkgKmVudHJ5OworeyAgICAgICBzZXRlbnRyeSAqZW50cnk7CiAgICAgUHlPYmplY3QgKm9sZF9rZXk7CiAKICAgICBlbnRyeSA9IChzby0+bG9va3VwKShzbywgb2xkZW50cnktPmtleSwgb2xkZW50cnktPmhhc2gpOwpAQCAtNDE2LDcgKzM5MCw2IEBACiAgICAgaWYgKGVudHJ5LT5rZXkgPT0gTlVMTCAgfHwgIGVudHJ5LT5rZXkgPT0gZHVtbXkpCiAgICAgICAgIHJldHVybiBESVNDQVJEX05PVEZPVU5EOwogICAgIG9sZF9rZXkgPSBlbnRyeS0+a2V5OwotICAgIFB5X0lOQ1JFRihkdW1teSk7CiAgICAgZW50cnktPmtleSA9IGR1bW15OwogICAgIHNvLT51c2VkLS07CiAgICAgUHlfREVDUkVGKG9sZF9rZXkpOwpAQCAtNDI2LDggKzM5OSw4IEBACiBzdGF0aWMgaW50CiBzZXRfZGlzY2FyZF9rZXkoUHlTZXRPYmplY3QgKnNvLCBQeU9iamVjdCAqa2V5KQogewotICAgIHJlZ2lzdGVyIFB5X2hhc2hfdCBoYXNoOwotICAgIHJlZ2lzdGVyIHNldGVudHJ5ICplbnRyeTsKKyAgICBQeV9oYXNoX3QgaGFzaDsKKyAgICBzZXRlbnRyeSAqZW50cnk7CiAgICAgUHlPYmplY3QgKm9sZF9rZXk7CiAKICAgICBhc3NlcnQgKFB5QW55U2V0X0NoZWNrKHNvKSk7CkBAIC00NDQsMTMgKzQxNywyMyBAQAogICAgIGlmIChlbnRyeS0+a2V5ID09IE5VTEwgIHx8ICBlbnRyeS0+a2V5ID09IGR1bW15KQogICAgICAgICByZXR1cm4gRElTQ0FSRF9OT1RGT1VORDsKICAgICBvbGRfa2V5ID0gZW50cnktPmtleTsKLSAgICBQeV9JTkNSRUYoZHVtbXkpOwogICAgIGVudHJ5LT5rZXkgPSBkdW1teTsKICAgICBzby0+dXNlZC0tOwogICAgIFB5X0RFQ1JFRihvbGRfa2V5KTsKICAgICByZXR1cm4gRElTQ0FSRF9GT1VORDsKIH0KIAorc3RhdGljIHZvaWQKK3NldF9lbXB0eV90b19taW5zaXplKFB5U2V0T2JqZWN0ICpzbykKK3sKKyAgICBtZW1zZXQoc28tPnNtYWxsdGFibGUsIDAsIHNpemVvZihzby0+c21hbGx0YWJsZSkpOworICAgIHNvLT5maWxsID0gMDsKKyAgICBzby0+dXNlZCA9IDA7CisgICAgc28tPm1hc2sgPSBQeVNldF9NSU5TSVpFIC0gMTsKKyAgICBzby0+dGFibGUgPSBzby0+c21hbGx0YWJsZTsKKyAgICBzby0+aGFzaCA9IC0xOworfQorCiBzdGF0aWMgaW50CiBzZXRfY2xlYXJfaW50ZXJuYWwoUHlTZXRPYmplY3QgKnNvKQogewpAQCAtNDU4LDE0ICs0NDEsMTMgQEAKICAgICBpbnQgdGFibGVfaXNfbWFsbG9jZWQ7CiAgICAgUHlfc3NpemVfdCBmaWxsOwogICAgIHNldGVudHJ5IHNtYWxsX2NvcHlbUHlTZXRfTUlOU0laRV07Ci0jaWZkZWYgUHlfREVCVUcKLSAgICBQeV9zc2l6ZV90IGksIG47Ci0gICAgYXNzZXJ0IChQeUFueVNldF9DaGVjayhzbykpOwogCi0gICAgbiA9IHNvLT5tYXNrICsgMTsKLSAgICBpID0gMDsKKyNpZmRlZiBQeV9ERUJVRworICAgIFB5X3NzaXplX3QgaSA9IDA7CisgICAgUHlfc3NpemVfdCBuID0gc28tPm1hc2sgKyAxOwogI2VuZGlmCiAKKyAgICBhc3NlcnQgKFB5QW55U2V0X0NoZWNrKHNvKSk7CiAgICAgdGFibGUgPSBzby0+dGFibGU7CiAgICAgYXNzZXJ0KHRhYmxlICE9IE5VTEwpOwogICAgIHRhYmxlX2lzX21hbGxvY2VkID0gdGFibGUgIT0gc28tPnNtYWxsdGFibGU7CkBAIC00NzgsNyArNDYwLDcgQEAKICAgICAgKi8KICAgICBmaWxsID0gc28tPmZpbGw7CiAgICAgaWYgKHRhYmxlX2lzX21hbGxvY2VkKQotICAgICAgICBFTVBUWV9UT19NSU5TSVpFKHNvKTsKKyAgICAgICAgc2V0X2VtcHR5X3RvX21pbnNpemUoc28pOwogCiAgICAgZWxzZSBpZiAoZmlsbCA+IDApIHsKICAgICAgICAgLyogSXQncyBhIHNtYWxsIHRhYmxlIHdpdGggc29tZXRoaW5nIHRoYXQgbmVlZHMgdG8gYmUgY2xlYXJlZC4KQEAgLTQ4Nyw3ICs0NjksNyBAQAogICAgICAgICAgKi8KICAgICAgICAgbWVtY3B5KHNtYWxsX2NvcHksIHRhYmxlLCBzaXplb2Yoc21hbGxfY29weSkpOwogICAgICAgICB0YWJsZSA9IHNtYWxsX2NvcHk7Ci0gICAgICAgIEVNUFRZX1RPX01JTlNJWkUoc28pOworICAgICAgICBzZXRfZW1wdHlfdG9fbWluc2l6ZShzbyk7CiAgICAgfQogICAgIC8qIGVsc2UgaXQncyBhIHNtYWxsIHRhYmxlIHRoYXQncyBhbHJlYWR5IGVtcHR5ICovCiAKQEAgLTUwMiw3ICs0ODQsOCBAQAogI2VuZGlmCiAgICAgICAgIGlmIChlbnRyeS0+a2V5KSB7CiAgICAgICAgICAgICAtLWZpbGw7Ci0gICAgICAgICAgICBQeV9ERUNSRUYoZW50cnktPmtleSk7CisgICAgICAgICAgICBpZiAoZW50cnktPmtleSAhPSBkdW1teSkKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZW50cnktPmtleSk7CiAgICAgICAgIH0KICNpZmRlZiBQeV9ERUJVRwogICAgICAgICBlbHNlCkBAIC01MzMsNyArNTE2LDcgQEAKIHsKICAgICBQeV9zc2l6ZV90IGk7CiAgICAgUHlfc3NpemVfdCBtYXNrOwotICAgIHJlZ2lzdGVyIHNldGVudHJ5ICp0YWJsZTsKKyAgICBzZXRlbnRyeSAqdGFibGU7CiAKICAgICBhc3NlcnQgKFB5QW55U2V0X0NoZWNrKHNvKSk7CiAgICAgaSA9ICpwb3NfcHRyOwpAQCAtNTUzLDcgKzUzNiw3IEBACiBzdGF0aWMgdm9pZAogc2V0X2RlYWxsb2MoUHlTZXRPYmplY3QgKnNvKQogewotICAgIHJlZ2lzdGVyIHNldGVudHJ5ICplbnRyeTsKKyAgICBzZXRlbnRyeSAqZW50cnk7CiAgICAgUHlfc3NpemVfdCBmaWxsID0gc28tPmZpbGw7CiAgICAgUHlPYmplY3RfR0NfVW5UcmFjayhzbyk7CiAgICAgUHlfVFJBU0hDQU5fU0FGRV9CRUdJTihzbykKQEAgLTU2MywxNSArNTQ2LDEzIEBACiAgICAgZm9yIChlbnRyeSA9IHNvLT50YWJsZTsgZmlsbCA+IDA7IGVudHJ5KyspIHsKICAgICAgICAgaWYgKGVudHJ5LT5rZXkpIHsKICAgICAgICAgICAgIC0tZmlsbDsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihlbnRyeS0+a2V5KTsKKyAgICAgICAgICAgIGlmIChlbnRyeS0+a2V5ICE9IGR1bW15KQorICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihlbnRyeS0+a2V5KTsKICAgICAgICAgfQogICAgIH0KICAgICBpZiAoc28tPnRhYmxlICE9IHNvLT5zbWFsbHRhYmxlKQogICAgICAgICBQeU1lbV9ERUwoc28tPnRhYmxlKTsKLSAgICBpZiAobnVtZnJlZSA8IFB5U2V0X01BWEZSRUVMSVNUICYmIFB5QW55U2V0X0NoZWNrRXhhY3Qoc28pKQotICAgICAgICBmcmVlX2xpc3RbbnVtZnJlZSsrXSA9IHNvOwotICAgIGVsc2UKLSAgICAgICAgUHlfVFlQRShzbyktPnRwX2ZyZWUoc28pOworICAgIFB5X1RZUEUoc28pLT50cF9mcmVlKHNvKTsKICAgICBQeV9UUkFTSENBTl9TQUZFX0VORChzbykKIH0KIApAQCAtNjMyLDggKzYxMyw4IEBACiAgICAgUHlTZXRPYmplY3QgKm90aGVyOwogICAgIFB5T2JqZWN0ICprZXk7CiAgICAgUHlfaGFzaF90IGhhc2g7Ci0gICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBpOwotICAgIHJlZ2lzdGVyIHNldGVudHJ5ICplbnRyeTsKKyAgICBQeV9zc2l6ZV90IGk7CisgICAgc2V0ZW50cnkgKmVudHJ5OwogCiAgICAgYXNzZXJ0IChQeUFueVNldF9DaGVjayhzbykpOwogICAgIGFzc2VydCAoUHlBbnlTZXRfQ2hlY2sob3RoZXJzZXQpKTsKQEAgLTcwMSw4ICs2ODIsOCBAQAogc3RhdGljIFB5T2JqZWN0ICoKIHNldF9wb3AoUHlTZXRPYmplY3QgKnNvKQogewotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgaSA9IDA7Ci0gICAgcmVnaXN0ZXIgc2V0ZW50cnkgKmVudHJ5OworICAgIFB5X3NzaXplX3QgaSA9IDA7CisgICAgc2V0ZW50cnkgKmVudHJ5OwogICAgIFB5T2JqZWN0ICprZXk7CiAKICAgICBhc3NlcnQgKFB5QW55U2V0X0NoZWNrKHNvKSk7CkBAIC03MzQsNyArNzE1LDYgQEAKICAgICAgICAgfQogICAgIH0KICAgICBrZXkgPSBlbnRyeS0+a2V5OwotICAgIFB5X0lOQ1JFRihkdW1teSk7CiAgICAgZW50cnktPmtleSA9IGR1bW15OwogICAgIHNvLT51c2VkLS07CiAgICAgc28tPnRhYmxlWzBdLmhhc2ggPSBpICsgMTsgIC8qIG5leHQgcGxhY2UgdG8gc3RhcnQgKi8KQEAgLTc1OCw2ICs3MzgsMTcgQEAKIHN0YXRpYyBQeV9oYXNoX3QKIGZyb3plbnNldF9oYXNoKFB5T2JqZWN0ICpzZWxmKQogeworICAgIC8qIE1vc3Qgb2YgdGhlIGNvbnN0YW50cyBpbiB0aGlzIGhhc2ggYWxnb3JpdGhtIGFyZSByYW5kb21seSBjaG9vc2VuCisgICAgICAgbGFyZ2UgcHJpbWVzIHdpdGggImludGVyZXN0aW5nIGJpdCBwYXR0ZXJucyIgYW5kIHRoYXQgcGFzc2VkCisgICAgICAgdGVzdHMgZm9yIGdvb2QgY29sbGlzaW9uIHN0YXRpc3RpY3Mgb24gYSB2YXJpZXR5IG9mIHByb2JsZW1hdGljCisgICAgICAgZGF0YXNldHMgc3VjaCBhczoKKworICAgICAgICAgIHBzID0gW10KKyAgICAgICAgICBmb3IgciBpbiByYW5nZSgyMSk6CisgICAgICAgICAgICAgIHBzICs9IGl0ZXJ0b29scy5jb21iaW5hdGlvbnMocmFuZ2UoMjApLCByKQorICAgICAgICAgIG51bV9kaXN0aW5jdF9oYXNoZXMgPSBsZW4oe2hhc2goZnJvemVuc2V0KHMpKSBmb3IgcyBpbiBwc30pCisKKyAgICAqLwogICAgIFB5U2V0T2JqZWN0ICpzbyA9IChQeVNldE9iamVjdCAqKXNlbGY7CiAgICAgUHlfdWhhc2hfdCBoLCBoYXNoID0gMTkyNzg2ODIzN1VMOwogICAgIHNldGVudHJ5ICplbnRyeTsKQEAgLTc3NCw4ICs3NjUsMTAgQEAKICAgICAgICAgICAgaGFzaGVzIHNvIHRoYXQgbWFueSBkaXN0aW5jdCBjb21iaW5hdGlvbnMgY29sbGFwc2UgdG8gb25seQogICAgICAgICAgICBhIGhhbmRmdWwgb2YgZGlzdGluY3QgaGFzaCB2YWx1ZXMuICovCiAgICAgICAgIGggPSBlbnRyeS0+aGFzaDsKLSAgICAgICAgaGFzaCBePSAoaCBeIChoIDw8IDE2KSBeIDg5ODY5NzQ3VUwpICAqIDM2NDQ3OTgxNjdVTDsKKyAgICAgICAgaGFzaCBePSAoKGggXiA4OTg2OTc0N1VMKSBeIChoIDw8IDE2KSkgKiAzNjQ0Nzk4MTY3VUw7CiAgICAgfQorICAgIC8qIE1ha2UgdGhlIGZpbmFsIHJlc3VsdCBzcHJlYWQtb3V0IGluIGEgZGlmZmVyZW50IHBhdHRlcm4KKyAgICAgICB0aGFuIHRoZSBhbGdvcml0aG0gZm9yIHR1cGxlcyBvciBvdGhlciBweXRob24gb2JqZWN0cy4gKi8KICAgICBoYXNoID0gaGFzaCAqIDY5MDY5VSArIDkwNzEzMzkyM1VMOwogICAgIGlmIChoYXNoID09IC0xKQogICAgICAgICBoYXNoID0gNTkwOTIzNzEzVUw7CkBAIC04NjksOCArODYyLDggQEAKIHN0YXRpYyBQeU9iamVjdCAqc2V0aXRlcl9pdGVybmV4dChzZXRpdGVyb2JqZWN0ICpzaSkKIHsKICAgICBQeU9iamVjdCAqa2V5OwotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgaSwgbWFzazsKLSAgICByZWdpc3RlciBzZXRlbnRyeSAqZW50cnk7CisgICAgUHlfc3NpemVfdCBpLCBtYXNrOworICAgIHNldGVudHJ5ICplbnRyeTsKICAgICBQeVNldE9iamVjdCAqc28gPSBzaS0+c2lfc2V0OwogCiAgICAgaWYgKHNvID09IE5VTEwpCkBAIC0xMDI0LDMzICsxMDE3LDE5IEBACiBzdGF0aWMgUHlPYmplY3QgKgogbWFrZV9uZXdfc2V0KFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKml0ZXJhYmxlKQogewotICAgIHJlZ2lzdGVyIFB5U2V0T2JqZWN0ICpzbyA9IE5VTEw7Ci0KLSAgICBpZiAoZHVtbXkgPT0gTlVMTCkgeyAvKiBBdXRvLWluaXRpYWxpemUgZHVtbXkgKi8KLSAgICAgICAgZHVtbXkgPSBQeVVuaWNvZGVfRnJvbVN0cmluZygiPGR1bW15IGtleT4iKTsKLSAgICAgICAgaWYgKGR1bW15ID09IE5VTEwpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9CisgICAgUHlTZXRPYmplY3QgKnNvID0gTlVMTDsKIAogICAgIC8qIGNyZWF0ZSBQeVNldE9iamVjdCBzdHJ1Y3R1cmUgKi8KLSAgICBpZiAobnVtZnJlZSAmJgotICAgICAgICAodHlwZSA9PSAmUHlTZXRfVHlwZSAgfHwgIHR5cGUgPT0gJlB5RnJvemVuU2V0X1R5cGUpKSB7Ci0gICAgICAgIHNvID0gZnJlZV9saXN0Wy0tbnVtZnJlZV07Ci0gICAgICAgIGFzc2VydCAoc28gIT0gTlVMTCAmJiBQeUFueVNldF9DaGVja0V4YWN0KHNvKSk7Ci0gICAgICAgIFB5X1RZUEUoc28pID0gdHlwZTsKLSAgICAgICAgX1B5X05ld1JlZmVyZW5jZSgoUHlPYmplY3QgKilzbyk7Ci0gICAgICAgIEVNUFRZX1RPX01JTlNJWkUoc28pOwotICAgICAgICBQeU9iamVjdF9HQ19UcmFjayhzbyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc28gPSAoUHlTZXRPYmplY3QgKil0eXBlLT50cF9hbGxvYyh0eXBlLCAwKTsKLSAgICAgICAgaWYgKHNvID09IE5VTEwpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgLyogdHBfYWxsb2MgaGFzIGFscmVhZHkgemVyb2VkIHRoZSBzdHJ1Y3R1cmUgKi8KLSAgICAgICAgYXNzZXJ0KHNvLT50YWJsZSA9PSBOVUxMICYmIHNvLT5maWxsID09IDAgJiYgc28tPnVzZWQgPT0gMCk7Ci0gICAgICAgIElOSVRfTk9OWkVST19TRVRfU0xPVFMoc28pOwotICAgIH0KKyAgICBzbyA9IChQeVNldE9iamVjdCAqKXR5cGUtPnRwX2FsbG9jKHR5cGUsIDApOworICAgIGlmIChzbyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKIAorICAgIHNvLT5maWxsID0gMDsKKyAgICBzby0+dXNlZCA9IDA7CisgICAgc28tPm1hc2sgPSBQeVNldF9NSU5TSVpFIC0gMTsKKyAgICBzby0+dGFibGUgPSBzby0+c21hbGx0YWJsZTsKICAgICBzby0+bG9va3VwID0gc2V0X2xvb2trZXlfdW5pY29kZTsKKyAgICBzby0+aGFzaCA9IC0xOwogICAgIHNvLT53ZWFrcmVmbGlzdCA9IE5VTEw7CiAKICAgICBpZiAoaXRlcmFibGUgIT0gTlVMTCkgewpAQCAtMTExMywzNSArMTA5MiwxNSBAQAogaW50CiBQeVNldF9DbGVhckZyZWVMaXN0KHZvaWQpCiB7Ci0gICAgaW50IGZyZWVsaXN0X3NpemUgPSBudW1mcmVlOwotICAgIFB5U2V0T2JqZWN0ICpzbzsKLQotICAgIHdoaWxlIChudW1mcmVlKSB7Ci0gICAgICAgIG51bWZyZWUtLTsKLSAgICAgICAgc28gPSBmcmVlX2xpc3RbbnVtZnJlZV07Ci0gICAgICAgIFB5T2JqZWN0X0dDX0RlbChzbyk7Ci0gICAgfQotICAgIHJldHVybiBmcmVlbGlzdF9zaXplOworICAgIHJldHVybiAwOwogfQogCiB2b2lkCiBQeVNldF9GaW5pKHZvaWQpCiB7Ci0gICAgUHlTZXRfQ2xlYXJGcmVlTGlzdCgpOwotICAgIFB5X0NMRUFSKGR1bW15KTsKICAgICBQeV9DTEVBUihlbXB0eWZyb3plbnNldCk7CiB9CiAKLS8qIFByaW50IHN1bW1hcnkgaW5mbyBhYm91dCB0aGUgc3RhdGUgb2YgdGhlIG9wdGltaXplZCBhbGxvY2F0b3IgKi8KLXZvaWQKLV9QeVNldF9EZWJ1Z01hbGxvY1N0YXRzKEZJTEUgKm91dCkKLXsKLSAgICBfUHlEZWJ1Z0FsbG9jYXRvclN0YXRzKG91dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJmcmVlIFB5U2V0T2JqZWN0IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWZyZWUsIHNpemVvZihQeVNldE9iamVjdCkpOwotfQotCi0KIHN0YXRpYyBQeU9iamVjdCAqCiBzZXRfbmV3KFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQogewpAQCAtMTYxMCw5ICsxNTY5LDE1IEBACiAgICAgaWYgKFB5RGljdF9DaGVja0V4YWN0KG90aGVyKSkgewogICAgICAgICB3aGlsZSAoc2V0X25leHQoc28sICZwb3MsICZlbnRyeSkpIHsKICAgICAgICAgICAgIHNldGVudHJ5IGVudHJ5Y29weTsKKyAgICAgICAgICAgIGludCBydjsKICAgICAgICAgICAgIGVudHJ5Y29weS5oYXNoID0gZW50cnktPmhhc2g7CiAgICAgICAgICAgICBlbnRyeWNvcHkua2V5ID0gZW50cnktPmtleTsKLSAgICAgICAgICAgIGlmICghX1B5RGljdF9Db250YWlucyhvdGhlciwgZW50cnktPmtleSwgZW50cnktPmhhc2gpKSB7CisgICAgICAgICAgICBydiA9IF9QeURpY3RfQ29udGFpbnMob3RoZXIsIGVudHJ5LT5rZXksIGVudHJ5LT5oYXNoKTsKKyAgICAgICAgICAgIGlmIChydiA8IDApIHsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghcnYpIHsKICAgICAgICAgICAgICAgICBpZiAoc2V0X2FkZF9lbnRyeSgoUHlTZXRPYmplY3QgKilyZXN1bHQsICZlbnRyeWNvcHkpID09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTE4NDgsNyArMTgxMyw4IEBACiBzdGF0aWMgUHlPYmplY3QgKgogc2V0X3JpY2hjb21wYXJlKFB5U2V0T2JqZWN0ICp2LCBQeU9iamVjdCAqdywgaW50IG9wKQogewotICAgIFB5T2JqZWN0ICpyMSwgKnIyOworICAgIFB5T2JqZWN0ICpyMTsKKyAgICBpbnQgcjI7CiAKICAgICBpZighUHlBbnlTZXRfQ2hlY2sodykpCiAgICAgICAgIFB5X1JFVFVSTl9OT1RJTVBMRU1FTlRFRDsKQEAgLTE4NjYsOSArMTgzMiwxMSBAQAogICAgICAgICByMSA9IHNldF9yaWNoY29tcGFyZSh2LCB3LCBQeV9FUSk7CiAgICAgICAgIGlmIChyMSA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIHIyID0gUHlCb29sX0Zyb21Mb25nKFB5T2JqZWN0X05vdChyMSkpOworICAgICAgICByMiA9IFB5T2JqZWN0X0lzVHJ1ZShyMSk7CiAgICAgICAgIFB5X0RFQ1JFRihyMSk7Ci0gICAgICAgIHJldHVybiByMjsKKyAgICAgICAgaWYgKHIyIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICByZXR1cm4gUHlCb29sX0Zyb21Mb25nKCFyMik7CiAgICAgY2FzZSBQeV9MRToKICAgICAgICAgcmV0dXJuIHNldF9pc3N1YnNldCh2LCB3KTsKICAgICBjYXNlIFB5X0dFOgpAQCAtMTk1Miw3ICsxOTIwLDcgQEAKICAgICB9CiAKICAgICBpZiAocnYgPT0gRElTQ0FSRF9OT1RGT1VORCkgewotICAgICAgICBzZXRfa2V5X2Vycm9yKGtleSk7CisgICAgICAgIF9QeUVycl9TZXRLZXlFcnJvcihrZXkpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgUHlfUkVUVVJOX05PTkU7CkBAIC0yMzk2LDYgKzIzNjQsOSBAQAogICAgIHJldHVybiBzZXRfdXBkYXRlX2ludGVybmFsKChQeVNldE9iamVjdCAqKXNldCwgaXRlcmFibGUpOwogfQogCisvKiBFeHBvcnRlZCBmb3IgdGhlIGdkYiBwbHVnaW4ncyBiZW5lZml0LiAqLworUHlPYmplY3QgKl9QeVNldF9EdW1teSA9IGR1bW15OworCiAjaWZkZWYgUHlfREVCVUcKIAogLyogVGVzdCBjb2RlIHRvIGJlIGNhbGxlZCB3aXRoIGFueSB0aHJlZSBlbGVtZW50IHNldC4KQEAgLTI0MTQsNyArMjM4NSw3IEBACiAgICAgUHlfc3NpemVfdCBjb3VudDsKICAgICBjaGFyICpzOwogICAgIFB5X3NzaXplX3QgaTsKLSAgICBQeU9iamVjdCAqZWxlbT1OVUxMLCAqZHVwPU5VTEwsICp0LCAqZiwgKmR1cDIsICp4OworICAgIFB5T2JqZWN0ICplbGVtPU5VTEwsICpkdXA9TlVMTCwgKnQsICpmLCAqZHVwMiwgKng9TlVMTDsKICAgICBQeU9iamVjdCAqb2IgPSAoUHlPYmplY3QgKilzbzsKICAgICBQeV9oYXNoX3QgaGFzaDsKICAgICBQeU9iamVjdCAqc3RyOwpAQCAtMjUzNywzICsyNTA4LDQ2IEBACiAjdW5kZWYgYXNzZXJ0UmFpc2VzCiAKICNlbmRpZgorCisvKioqKiogRHVtbXkgU3RydWN0ICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgUHlPYmplY3QgKgorZHVtbXlfcmVwcihQeU9iamVjdCAqb3ApCit7CisgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nKCI8ZHVtbXkga2V5PiIpOworfQorCitzdGF0aWMgdm9pZAorZHVtbXlfZGVhbGxvYyhQeU9iamVjdCogaWdub3JlKQoreworICAgIFB5X0ZhdGFsRXJyb3IoImRlYWxsb2NhdGluZyA8ZHVtbXkga2V5PiIpOworfQorCitzdGF0aWMgUHlUeXBlT2JqZWN0IF9QeVNldER1bW15X1R5cGUgPSB7CisgICAgUHlWYXJPYmplY3RfSEVBRF9JTklUKCZQeVR5cGVfVHlwZSwgMCkKKyAgICAiPGR1bW15IGtleT4gdHlwZSIsCisgICAgMCwKKyAgICAwLAorICAgIGR1bW15X2RlYWxsb2MsICAgICAgLyp0cF9kZWFsbG9jKi8gLypuZXZlciBjYWxsZWQqLworICAgIDAsICAgICAgICAgICAgICAgICAgLyp0cF9wcmludCovCisgICAgMCwgICAgICAgICAgICAgICAgICAvKnRwX2dldGF0dHIqLworICAgIDAsICAgICAgICAgICAgICAgICAgLyp0cF9zZXRhdHRyKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgIC8qdHBfcmVzZXJ2ZWQqLworICAgIGR1bW15X3JlcHIsICAgICAgICAgLyp0cF9yZXByKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgIC8qdHBfYXNfbnVtYmVyKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgIC8qdHBfYXNfc2VxdWVuY2UqLworICAgIDAsICAgICAgICAgICAgICAgICAgLyp0cF9hc19tYXBwaW5nKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgIC8qdHBfaGFzaCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgLyp0cF9jYWxsICovCisgICAgMCwgICAgICAgICAgICAgICAgICAvKnRwX3N0ciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgLyp0cF9nZXRhdHRybyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgLyp0cF9zZXRhdHRybyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgLyp0cF9hc19idWZmZXIgKi8KKyAgICBQeV9UUEZMQUdTX0RFRkFVTFQsIC8qdHBfZmxhZ3MgKi8KK307CisKK3N0YXRpYyBQeU9iamVjdCBfZHVtbXlfc3RydWN0ID0geworICBfUHlPYmplY3RfRVhUUkFfSU5JVAorICAyLCAmX1B5U2V0RHVtbXlfVHlwZQorfTsKKwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9zbGljZW9iamVjdC5jIGIvT2JqZWN0cy9zbGljZW9iamVjdC5jCmluZGV4IDE1OTMzMzUuLjEwNDk1MjMgMTAwNjQ0Ci0tLSBhL09iamVjdHMvc2xpY2VvYmplY3QuYworKysgYi9PYmplY3RzL3NsaWNlb2JqZWN0LmMKQEAgLTMzLDYgKzMzLDE3IEBACiAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nKCJFbGxpcHNpcyIpOwogfQogCitzdGF0aWMgUHlPYmplY3QgKgorZWxsaXBzaXNfcmVkdWNlKFB5T2JqZWN0ICpvcCkKK3sKKyAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmcoIkVsbGlwc2lzIik7Cit9CisKK3N0YXRpYyBQeU1ldGhvZERlZiBlbGxpcHNpc19tZXRob2RzW10gPSB7CisgICAgeyJfX3JlZHVjZV9fIiwgKFB5Q0Z1bmN0aW9uKWVsbGlwc2lzX3JlZHVjZSwgTUVUSF9OT0FSR1MsIE5VTEx9LAorICAgIHtOVUxMLCBOVUxMfQorfTsKKwogUHlUeXBlT2JqZWN0IFB5RWxsaXBzaXNfVHlwZSA9IHsKICAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoJlB5VHlwZV9UeXBlLCAwKQogICAgICJlbGxpcHNpcyIsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX25hbWUgKi8KQEAgLTYxLDcgKzcyLDcgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVybmV4dCAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KKyAgICBlbGxpcHNpc19tZXRob2RzLCAgICAgICAgICAgICAgICAgICAvKiB0cF9tZXRob2RzICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWVtYmVycyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldHNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2UgKi8KQEAgLTI5OSwyMyArMzEwLDE5OCBAQAogICAgIHswfQogfTsKIAorLyogSGVscGVyIGZ1bmN0aW9uIHRvIGNvbnZlcnQgYSBzbGljZSBhcmd1bWVudCB0byBhIFB5TG9uZywgYW5kIHJhaXNlIFR5cGVFcnJvcgorICAgd2l0aCBhIHN1aXRhYmxlIG1lc3NhZ2Ugb24gZmFpbHVyZS4gKi8KKworc3RhdGljIFB5T2JqZWN0KgorZXZhbHVhdGVfc2xpY2VfaW5kZXgoUHlPYmplY3QgKnYpCit7CisgICAgaWYgKFB5SW5kZXhfQ2hlY2sodikpIHsKKyAgICAgICAgcmV0dXJuIFB5TnVtYmVyX0luZGV4KHYpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJzbGljZSBpbmRpY2VzIG11c3QgYmUgaW50ZWdlcnMgb3IgIgorICAgICAgICAgICAgICAgICAgICAgICAgIk5vbmUgb3IgaGF2ZSBhbiBfX2luZGV4X18gbWV0aG9kIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KK30KKworLyogQ29tcHV0ZSBzbGljZSBpbmRpY2VzIGdpdmVuIGEgc2xpY2UgYW5kIGxlbmd0aC4gIFJldHVybiAtMSBvbiBmYWlsdXJlLiAgVXNlZAorICAgYnkgc2xpY2UuaW5kaWNlcyBhbmQgcmFuZ2VvYmplY3Qgc2xpY2luZy4gIEFzc3VtZXMgdGhhdCBgbGVuYCBpcyBhCisgICBub25uZWdhdGl2ZSBpbnN0YW5jZSBvZiBQeUxvbmcuICovCisKK2ludAorX1B5U2xpY2VfR2V0TG9uZ0luZGljZXMoUHlTbGljZU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICoqc3RhcnRfcHRyLCBQeU9iamVjdCAqKnN0b3BfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKipzdGVwX3B0cikKK3sKKyAgICBQeU9iamVjdCAqc3RhcnQ9TlVMTCwgKnN0b3A9TlVMTCwgKnN0ZXA9TlVMTDsKKyAgICBQeU9iamVjdCAqdXBwZXI9TlVMTCwgKmxvd2VyPU5VTEw7CisgICAgaW50IHN0ZXBfaXNfbmVnYXRpdmUsIGNtcF9yZXN1bHQ7CisKKyAgICAvKiBDb252ZXJ0IHN0ZXAgdG8gYW4gaW50ZWdlcjsgcmFpc2UgZm9yIHplcm8gc3RlcC4gKi8KKyAgICBpZiAoc2VsZi0+c3RlcCA9PSBQeV9Ob25lKSB7CisgICAgICAgIHN0ZXAgPSBQeUxvbmdfRnJvbUxvbmcoMUwpOworICAgICAgICBpZiAoc3RlcCA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgc3RlcF9pc19uZWdhdGl2ZSA9IDA7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBpbnQgc3RlcF9zaWduOworICAgICAgICBzdGVwID0gZXZhbHVhdGVfc2xpY2VfaW5kZXgoc2VsZi0+c3RlcCk7CisgICAgICAgIGlmIChzdGVwID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICBzdGVwX3NpZ24gPSBfUHlMb25nX1NpZ24oc3RlcCk7CisgICAgICAgIGlmIChzdGVwX3NpZ24gPT0gMCkgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNsaWNlIHN0ZXAgY2Fubm90IGJlIHplcm8iKTsKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KKyAgICAgICAgc3RlcF9pc19uZWdhdGl2ZSA9IHN0ZXBfc2lnbiA8IDA7CisgICAgfQorCisgICAgLyogRmluZCBsb3dlciBhbmQgdXBwZXIgYm91bmRzIGZvciBzdGFydCBhbmQgc3RvcC4gKi8KKyAgICBpZiAoc3RlcF9pc19uZWdhdGl2ZSkgeworICAgICAgICBsb3dlciA9IFB5TG9uZ19Gcm9tTG9uZygtMUwpOworICAgICAgICBpZiAobG93ZXIgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisKKyAgICAgICAgdXBwZXIgPSBQeU51bWJlcl9BZGQobGVuZ3RoLCBsb3dlcik7CisgICAgICAgIGlmICh1cHBlciA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGxvd2VyID0gUHlMb25nX0Zyb21Mb25nKDBMKTsKKyAgICAgICAgaWYgKGxvd2VyID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGVycm9yOworCisgICAgICAgIHVwcGVyID0gbGVuZ3RoOworICAgICAgICBQeV9JTkNSRUYodXBwZXIpOworICAgIH0KKworICAgIC8qIENvbXB1dGUgc3RhcnQuICovCisgICAgaWYgKHNlbGYtPnN0YXJ0ID09IFB5X05vbmUpIHsKKyAgICAgICAgc3RhcnQgPSBzdGVwX2lzX25lZ2F0aXZlID8gdXBwZXIgOiBsb3dlcjsKKyAgICAgICAgUHlfSU5DUkVGKHN0YXJ0KTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHN0YXJ0ID0gZXZhbHVhdGVfc2xpY2VfaW5kZXgoc2VsZi0+c3RhcnQpOworICAgICAgICBpZiAoc3RhcnQgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisKKyAgICAgICAgaWYgKF9QeUxvbmdfU2lnbihzdGFydCkgPCAwKSB7CisgICAgICAgICAgICAvKiBzdGFydCArPSBsZW5ndGggKi8KKyAgICAgICAgICAgIFB5T2JqZWN0ICp0bXAgPSBQeU51bWJlcl9BZGQoc3RhcnQsIGxlbmd0aCk7CisgICAgICAgICAgICBQeV9ERUNSRUYoc3RhcnQpOworICAgICAgICAgICAgc3RhcnQgPSB0bXA7CisgICAgICAgICAgICBpZiAoc3RhcnQgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworCisgICAgICAgICAgICBjbXBfcmVzdWx0ID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKHN0YXJ0LCBsb3dlciwgUHlfTFQpOworICAgICAgICAgICAgaWYgKGNtcF9yZXN1bHQgPCAwKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBpZiAoY21wX3Jlc3VsdCkgeworICAgICAgICAgICAgICAgIFB5X0lOQ1JFRihsb3dlcik7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKHN0YXJ0KTsKKyAgICAgICAgICAgICAgICBzdGFydCA9IGxvd2VyOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgY21wX3Jlc3VsdCA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbChzdGFydCwgdXBwZXIsIFB5X0dUKTsKKyAgICAgICAgICAgIGlmIChjbXBfcmVzdWx0IDwgMCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgaWYgKGNtcF9yZXN1bHQpIHsKKyAgICAgICAgICAgICAgICBQeV9JTkNSRUYodXBwZXIpOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihzdGFydCk7CisgICAgICAgICAgICAgICAgc3RhcnQgPSB1cHBlcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIENvbXB1dGUgc3RvcC4gKi8KKyAgICBpZiAoc2VsZi0+c3RvcCA9PSBQeV9Ob25lKSB7CisgICAgICAgIHN0b3AgPSBzdGVwX2lzX25lZ2F0aXZlID8gbG93ZXIgOiB1cHBlcjsKKyAgICAgICAgUHlfSU5DUkVGKHN0b3ApOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgc3RvcCA9IGV2YWx1YXRlX3NsaWNlX2luZGV4KHNlbGYtPnN0b3ApOworICAgICAgICBpZiAoc3RvcCA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKworICAgICAgICBpZiAoX1B5TG9uZ19TaWduKHN0b3ApIDwgMCkgeworICAgICAgICAgICAgLyogc3RvcCArPSBsZW5ndGggKi8KKyAgICAgICAgICAgIFB5T2JqZWN0ICp0bXAgPSBQeU51bWJlcl9BZGQoc3RvcCwgbGVuZ3RoKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihzdG9wKTsKKyAgICAgICAgICAgIHN0b3AgPSB0bXA7CisgICAgICAgICAgICBpZiAoc3RvcCA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisKKyAgICAgICAgICAgIGNtcF9yZXN1bHQgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2woc3RvcCwgbG93ZXIsIFB5X0xUKTsKKyAgICAgICAgICAgIGlmIChjbXBfcmVzdWx0IDwgMCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgaWYgKGNtcF9yZXN1bHQpIHsKKyAgICAgICAgICAgICAgICBQeV9JTkNSRUYobG93ZXIpOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihzdG9wKTsKKyAgICAgICAgICAgICAgICBzdG9wID0gbG93ZXI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBjbXBfcmVzdWx0ID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKHN0b3AsIHVwcGVyLCBQeV9HVCk7CisgICAgICAgICAgICBpZiAoY21wX3Jlc3VsdCA8IDApCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIGlmIChjbXBfcmVzdWx0KSB7CisgICAgICAgICAgICAgICAgUHlfSU5DUkVGKHVwcGVyKTsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoc3RvcCk7CisgICAgICAgICAgICAgICAgc3RvcCA9IHVwcGVyOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgKnN0YXJ0X3B0ciA9IHN0YXJ0OworICAgICpzdG9wX3B0ciA9IHN0b3A7CisgICAgKnN0ZXBfcHRyID0gc3RlcDsKKyAgICBQeV9ERUNSRUYodXBwZXIpOworICAgIFB5X0RFQ1JFRihsb3dlcik7CisgICAgcmV0dXJuIDA7CisKKyAgZXJyb3I6CisgICAgKnN0YXJ0X3B0ciA9ICpzdG9wX3B0ciA9ICpzdGVwX3B0ciA9IE5VTEw7CisgICAgUHlfWERFQ1JFRihzdGFydCk7CisgICAgUHlfWERFQ1JFRihzdG9wKTsKKyAgICBQeV9YREVDUkVGKHN0ZXApOworICAgIFB5X1hERUNSRUYodXBwZXIpOworICAgIFB5X1hERUNSRUYobG93ZXIpOworICAgIHJldHVybiAtMTsKK30KKworLyogSW1wbGVtZW50YXRpb24gb2Ygc2xpY2UuaW5kaWNlcy4gKi8KKwogc3RhdGljIFB5T2JqZWN0Kgogc2xpY2VfaW5kaWNlcyhQeVNsaWNlT2JqZWN0KiBzZWxmLCBQeU9iamVjdCogbGVuKQogewotICAgIFB5X3NzaXplX3QgaWxlbiwgc3RhcnQsIHN0b3AsIHN0ZXAsIHNsaWNlbGVuZ3RoOworICAgIFB5T2JqZWN0ICpzdGFydCwgKnN0b3AsICpzdGVwOworICAgIFB5T2JqZWN0ICpsZW5ndGg7CisgICAgaW50IGVycm9yOwogCi0gICAgaWxlbiA9IFB5TnVtYmVyX0FzU3NpemVfdChsZW4sIFB5RXhjX092ZXJmbG93RXJyb3IpOworICAgIC8qIENvbnZlcnQgbGVuZ3RoIHRvIGFuIGludGVnZXIgaWYgbmVjZXNzYXJ5OyByYWlzZSBmb3IgbmVnYXRpdmUgbGVuZ3RoLiAqLworICAgIGxlbmd0aCA9IFB5TnVtYmVyX0luZGV4KGxlbik7CisgICAgaWYgKGxlbmd0aCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGlmIChpbGVuID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICBpZiAoX1B5TG9uZ19TaWduKGxlbmd0aCkgPCAwKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgImxlbmd0aCBzaG91bGQgbm90IGJlIG5lZ2F0aXZlIik7CisgICAgICAgIFB5X0RFQ1JFRihsZW5ndGgpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBpZiAoUHlTbGljZV9HZXRJbmRpY2VzRXgoKFB5T2JqZWN0KilzZWxmLCBpbGVuLCAmc3RhcnQsICZzdG9wLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3RlcCwgJnNsaWNlbGVuZ3RoKSA8IDApIHsKKyAgICBlcnJvciA9IF9QeVNsaWNlX0dldExvbmdJbmRpY2VzKHNlbGYsIGxlbmd0aCwgJnN0YXJ0LCAmc3RvcCwgJnN0ZXApOworICAgIFB5X0RFQ1JFRihsZW5ndGgpOworICAgIGlmIChlcnJvciA9PSAtMSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIihubm4pIiwgc3RhcnQsIHN0b3AsIHN0ZXApOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIihOTk4pIiwgc3RhcnQsIHN0b3AsIHN0ZXApOwogfQogCiBQeURvY19TVFJWQVIoc2xpY2VfaW5kaWNlc19kb2MsCmRpZmYgLS1naXQgYS9PYmplY3RzL3N0cmluZ2xpYi9SRUFETUUudHh0IGIvT2JqZWN0cy9zdHJpbmdsaWIvUkVBRE1FLnR4dAppbmRleCBhYjUwNmQ2Li44ZmY2YWQ4IDEwMDY0NAotLS0gYS9PYmplY3RzL3N0cmluZ2xpYi9SRUFETUUudHh0CisrKyBiL09iamVjdHMvc3RyaW5nbGliL1JFQURNRS50eHQKQEAgLTEsNCArMSw0IEBACi1iaXRzIHNoYXJlZCBieSB0aGUgc3RyaW5nb2JqZWN0IGFuZCB1bmljb2Rlb2JqZWN0IGltcGxlbWVudGF0aW9ucyAoYW5kCitiaXRzIHNoYXJlZCBieSB0aGUgYnl0ZXNvYmplY3QgYW5kIHVuaWNvZGVvYmplY3QgaW1wbGVtZW50YXRpb25zIChhbmQKIHBvc3NpYmx5IG90aGVyIG1vZHVsZXMsIGluIGEgbm90IHRvbyBkaXN0YW50IGZ1dHVyZSkuCiAKIHRoZSBzdHVmZiBpbiBoZXJlIGlzIGluY2x1ZGVkIGludG8gcmVsZXZhbnQgcGxhY2VzOyBzZWUgdGhlIGluZGl2aWR1YWwKZGlmZiAtLWdpdCBhL09iamVjdHMvc3RyaW5nbGliL2FzY2lpbGliLmggYi9PYmplY3RzL3N0cmluZ2xpYi9hc2NpaWxpYi5oCmluZGV4IGY2MjgxM2QuLmQwZmMxOGQgMTAwNjQ0Ci0tLSBhL09iamVjdHMvc3RyaW5nbGliL2FzY2lpbGliLmgKKysrIGIvT2JqZWN0cy9zdHJpbmdsaWIvYXNjaWlsaWIuaApAQCAtMTksNyArMTksNiBAQAogI2RlZmluZSBTVFJJTkdMSUJfU1RSICAgICAgICAgICAgUHlVbmljb2RlXzFCWVRFX0RBVEEKICNkZWZpbmUgU1RSSU5HTElCX0xFTiAgICAgICAgICAgIFB5VW5pY29kZV9HRVRfTEVOR1RICiAjZGVmaW5lIFNUUklOR0xJQl9ORVcoU1RSLExFTikgICBfUHlVbmljb2RlX0Zyb21BU0NJSSgoY2hhciopKFNUUiksKExFTikpCi0jZGVmaW5lIFNUUklOR0xJQl9SRVNJWkUgICAgICAgICBub3Rfc3VwcG9ydGVkCiAjZGVmaW5lIFNUUklOR0xJQl9DSEVDSyAgICAgICAgICBQeVVuaWNvZGVfQ2hlY2sKICNkZWZpbmUgU1RSSU5HTElCX0NIRUNLX0VYQUNUICAgIFB5VW5pY29kZV9DaGVja0V4YWN0CiAKZGlmZiAtLWdpdCBhL09iamVjdHMvc3RyaW5nbGliL2NvZGVjcy5oIGIvT2JqZWN0cy9zdHJpbmdsaWIvY29kZWNzLmgKaW5kZXggZjM1MzM2Ny4uZWUxYmYyYiAxMDA2NDQKLS0tIGEvT2JqZWN0cy9zdHJpbmdsaWIvY29kZWNzLmgKKysrIGIvT2JqZWN0cy9zdHJpbmdsaWIvY29kZWNzLmgKQEAgLTM4LDggKzM4LDggQEAKICAgICAgICAgICAgICovCiAgICAgICAgICAgICBpZiAoX1B5X0lTX0FMSUdORUQocywgU0laRU9GX0xPTkcpKSB7CiAgICAgICAgICAgICAgICAgLyogSGVscCByZWdpc3RlciBhbGxvY2F0aW9uICovCi0gICAgICAgICAgICAgICAgcmVnaXN0ZXIgY29uc3QgY2hhciAqX3MgPSBzOwotICAgICAgICAgICAgICAgIHJlZ2lzdGVyIFNUUklOR0xJQl9DSEFSICpfcCA9IHA7CisgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqX3MgPSBzOworICAgICAgICAgICAgICAgIFNUUklOR0xJQl9DSEFSICpfcCA9IHA7CiAgICAgICAgICAgICAgICAgd2hpbGUgKF9zIDwgYWxpZ25lZF9lbmQpIHsKICAgICAgICAgICAgICAgICAgICAgLyogUmVhZCBhIHdob2xlIGxvbmcgYXQgYSB0aW1lIChlaXRoZXIgNCBvciA4IGJ5dGVzKSwKICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGRvIGEgZmFzdCB1bnJvbGxlZCBjb3B5IGlmIGl0IG9ubHkgY29udGFpbnMgQVNDSUkKQEAgLTQ3LDcgKzQ3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyB2YWx1ZSA9ICoodW5zaWduZWQgbG9uZyAqKSBfczsKICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlICYgQVNDSUlfQ0hBUl9NQVNLKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0jaWZkZWYgQllURU9SREVSX0lTX0xJVFRMRV9FTkRJQU4KKyNpZiBQWV9MSVRUTEVfRU5ESUFOCiAgICAgICAgICAgICAgICAgICAgIF9wWzBdID0gKFNUUklOR0xJQl9DSEFSKSh2YWx1ZSAmIDB4RkZ1KTsKICAgICAgICAgICAgICAgICAgICAgX3BbMV0gPSAoU1RSSU5HTElCX0NIQVIpKCh2YWx1ZSA+PiA4KSAmIDB4RkZ1KTsKICAgICAgICAgICAgICAgICAgICAgX3BbMl0gPSAoU1RSSU5HTElCX0NIQVIpKCh2YWx1ZSA+PiAxNikgJiAweEZGdSk7CkBAIC00ODYsNyArNDg2LDcgQEAKICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpxID0gKmlucHRyOwogICAgIFNUUklOR0xJQl9DSEFSICpwID0gZGVzdCArICpvdXRwb3M7CiAgICAgLyogT2Zmc2V0cyBmcm9tIHEgZm9yIHJldHJpZXZpbmcgYnl0ZSBwYWlycyBpbiB0aGUgcmlnaHQgb3JkZXIuICovCi0jaWZkZWYgQllURU9SREVSX0lTX0xJVFRMRV9FTkRJQU4KKyNpZiBQWV9MSVRUTEVfRU5ESUFOCiAgICAgaW50IGloaSA9ICEhbmF0aXZlX29yZGVyaW5nLCBpbG8gPSAhbmF0aXZlX29yZGVyaW5nOwogI2Vsc2UKICAgICBpbnQgaWhpID0gIW5hdGl2ZV9vcmRlcmluZywgaWxvID0gISFuYXRpdmVfb3JkZXJpbmc7CkBAIC00OTksNyArNDk5LDcgQEAKICAgICAgICAgICAgcmVhZHMgYXJlIG1vcmUgZXhwZW5zaXZlLCBiZXR0ZXIgdG8gZGVmZXIgdG8gYW5vdGhlciBpdGVyYXRpb24uICovCiAgICAgICAgIGlmIChfUHlfSVNfQUxJR05FRChxLCBTSVpFT0ZfTE9ORykpIHsKICAgICAgICAgICAgIC8qIEZhc3QgcGF0aCBmb3IgcnVucyBvZiBpbi1yYW5nZSBub24tc3Vycm9nYXRlIGNoYXJzLiAqLwotICAgICAgICAgICAgcmVnaXN0ZXIgY29uc3QgdW5zaWduZWQgY2hhciAqX3EgPSBxOworICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqX3EgPSBxOwogICAgICAgICAgICAgd2hpbGUgKF9xIDwgYWxpZ25lZF9lbmQpIHsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGJsb2NrID0gKiAodW5zaWduZWQgbG9uZyAqKSBfcTsKICAgICAgICAgICAgICAgICBpZiAobmF0aXZlX29yZGVyaW5nKSB7CkBAIC01MTcsNyArNTE3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgYmxvY2sgPSBTV0FCKGJsb2NrKTsKICNlbmRpZgogICAgICAgICAgICAgICAgIH0KLSNpZmRlZiBCWVRFT1JERVJfSVNfTElUVExFX0VORElBTgorI2lmIFBZX0xJVFRMRV9FTkRJQU4KICMgaWYgU0laRU9GX0xPTkcgPT0gNAogICAgICAgICAgICAgICAgIHBbMF0gPSAoU1RSSU5HTElCX0NIQVIpKGJsb2NrICYgMHhGRkZGdSk7CiAgICAgICAgICAgICAgICAgcFsxXSA9IChTVFJJTkdMSUJfQ0hBUikoYmxvY2sgPj4gMTYpOwpAQCAtNTk2LDI2ICs1OTYsMzAgQEAKICN1bmRlZiBTV0FCCiAKIAotUHlfTE9DQUxfSU5MSU5FKHZvaWQpCi1TVFJJTkdMSUIodXRmMTZfZW5jb2RlKSh1bnNpZ25lZCBzaG9ydCAqb3V0LAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU1RSSU5HTElCX0NIQVIgKmluLAorI2lmIFNUUklOR0xJQl9NQVhfQ0hBUiA+PSAweDgwCitQeV9MT0NBTF9JTkxJTkUoUHlfc3NpemVfdCkKK1NUUklOR0xJQih1dGYxNl9lbmNvZGUpKGNvbnN0IFNUUklOR0xJQl9DSEFSICppbiwKICAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgKipvdXRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbmF0aXZlX29yZGVyaW5nKQogeworICAgIHVuc2lnbmVkIHNob3J0ICpvdXQgPSAqb3V0cHRyOwogICAgIGNvbnN0IFNUUklOR0xJQl9DSEFSICplbmQgPSBpbiArIGxlbjsKICNpZiBTVFJJTkdMSUJfU0laRU9GX0NIQVIgPT0gMQotIyBkZWZpbmUgU1dBQjIoQ0gpICAoKENIKSA8PCA4KQotI2Vsc2UKLSMgZGVmaW5lIFNXQUIyKENIKSAgKCgoQ0gpIDw8IDgpIHwgKChDSCkgPj4gOCkpCi0jZW5kaWYKLSNpZiBTVFJJTkdMSUJfTUFYX0NIQVIgPCAweDEwMDAwCiAgICAgaWYgKG5hdGl2ZV9vcmRlcmluZykgewotIyBpZiBTVFJJTkdMSUJfU0laRU9GX0NIQVIgPT0gMgotICAgICAgICBQeV9NRU1DUFkob3V0LCBpbiwgMiAqIGxlbik7Ci0jIGVsc2UKLSAgICAgICAgX1B5VW5pY29kZV9DT05WRVJUX0JZVEVTKFNUUklOR0xJQl9DSEFSLCB1bnNpZ25lZCBzaG9ydCwgaW4sIGVuZCwgb3V0KTsKLSMgZW5kaWYKKyAgICAgICAgY29uc3QgU1RSSU5HTElCX0NIQVIgKnVucm9sbGVkX2VuZCA9IGluICsgX1B5X1NJWkVfUk9VTkRfRE9XTihsZW4sIDQpOworICAgICAgICB3aGlsZSAoaW4gPCB1bnJvbGxlZF9lbmQpIHsKKyAgICAgICAgICAgIG91dFswXSA9IGluWzBdOworICAgICAgICAgICAgb3V0WzFdID0gaW5bMV07CisgICAgICAgICAgICBvdXRbMl0gPSBpblsyXTsKKyAgICAgICAgICAgIG91dFszXSA9IGluWzNdOworICAgICAgICAgICAgaW4gKz0gNDsgb3V0ICs9IDQ7CisgICAgICAgIH0KKyAgICAgICAgd2hpbGUgKGluIDwgZW5kKSB7CisgICAgICAgICAgICAqb3V0KysgPSAqaW4rKzsKKyAgICAgICAgfQogICAgIH0gZWxzZSB7CisjIGRlZmluZSBTV0FCMihDSCkgICgoQ0gpIDw8IDgpIC8qIGhpZ2ggYnl0ZSBpcyB6ZXJvICovCiAgICAgICAgIGNvbnN0IFNUUklOR0xJQl9DSEFSICp1bnJvbGxlZF9lbmQgPSBpbiArIF9QeV9TSVpFX1JPVU5EX0RPV04obGVuLCA0KTsKICAgICAgICAgd2hpbGUgKGluIDwgdW5yb2xsZWRfZW5kKSB7CiAgICAgICAgICAgICBvdXRbMF0gPSBTV0FCMihpblswXSk7CkBAIC02MjUsMzcgKzYyOSw5NSBAQAogICAgICAgICAgICAgaW4gKz0gNDsgb3V0ICs9IDQ7CiAgICAgICAgIH0KICAgICAgICAgd2hpbGUgKGluIDwgZW5kKSB7Ci0gICAgICAgICAgICAqb3V0KysgPSBTV0FCMigqaW4pOwotICAgICAgICAgICAgKytpbjsKKyAgICAgICAgICAgIFB5X1VDUzQgY2ggPSAqaW4rKzsKKyAgICAgICAgICAgICpvdXQrKyA9IFNXQUIyKChQeV9VQ1MyKWNoKTsKICAgICAgICAgfQorI3VuZGVmIFNXQUIyCiAgICAgfQorICAgICpvdXRwdHIgPSBvdXQ7CisgICAgcmV0dXJuIGxlbjsKICNlbHNlCiAgICAgaWYgKG5hdGl2ZV9vcmRlcmluZykgeworI2lmIFNUUklOR0xJQl9NQVhfQ0hBUiA8IDB4MTAwMDAKKyAgICAgICAgY29uc3QgU1RSSU5HTElCX0NIQVIgKnVucm9sbGVkX2VuZCA9IGluICsgX1B5X1NJWkVfUk9VTkRfRE9XTihsZW4sIDQpOworICAgICAgICB3aGlsZSAoaW4gPCB1bnJvbGxlZF9lbmQpIHsKKyAgICAgICAgICAgIC8qIGNoZWNrIGlmIGFueSBjaGFyYWN0ZXIgaXMgYSBzdXJyb2dhdGUgY2hhcmFjdGVyICovCisgICAgICAgICAgICBpZiAoKChpblswXSBeIDB4ZDgwMCkgJgorICAgICAgICAgICAgICAgICAoaW5bMV0gXiAweGQ4MDApICYKKyAgICAgICAgICAgICAgICAgKGluWzJdIF4gMHhkODAwKSAmCisgICAgICAgICAgICAgICAgIChpblszXSBeIDB4ZDgwMCkgJiAweGY4MDApID09IDApCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBvdXRbMF0gPSBpblswXTsKKyAgICAgICAgICAgIG91dFsxXSA9IGluWzFdOworICAgICAgICAgICAgb3V0WzJdID0gaW5bMl07CisgICAgICAgICAgICBvdXRbM10gPSBpblszXTsKKyAgICAgICAgICAgIGluICs9IDQ7IG91dCArPSA0OworICAgICAgICB9CisjZW5kaWYKICAgICAgICAgd2hpbGUgKGluIDwgZW5kKSB7Ci0gICAgICAgICAgICBQeV9VQ1M0IGNoID0gKmluKys7Ci0gICAgICAgICAgICBpZiAoY2ggPCAweDEwMDAwKQorICAgICAgICAgICAgUHlfVUNTNCBjaDsKKyAgICAgICAgICAgIGNoID0gKmluKys7CisgICAgICAgICAgICBpZiAoY2ggPCAweGQ4MDApCiAgICAgICAgICAgICAgICAgKm91dCsrID0gY2g7Ci0gICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGVsc2UgaWYgKGNoIDwgMHhlMDAwKQorICAgICAgICAgICAgICAgIC8qIHJlamVjdCBzdXJyb2dhdGUgY2hhcmFjdGVycyAoVStEODAwLVUrREZGRikgKi8KKyAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CisjaWYgU1RSSU5HTElCX01BWF9DSEFSID49IDB4MTAwMDAKKyAgICAgICAgICAgIGVsc2UgaWYgKGNoID49IDB4MTAwMDApIHsKICAgICAgICAgICAgICAgICBvdXRbMF0gPSBQeV9VTklDT0RFX0hJR0hfU1VSUk9HQVRFKGNoKTsKICAgICAgICAgICAgICAgICBvdXRbMV0gPSBQeV9VTklDT0RFX0xPV19TVVJST0dBVEUoY2gpOwogICAgICAgICAgICAgICAgIG91dCArPSAyOwogICAgICAgICAgICAgfQorI2VuZGlmCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgKm91dCsrID0gY2g7CiAgICAgICAgIH0KICAgICB9IGVsc2UgeworI2RlZmluZSBTV0FCMihDSCkgICgoKENIKSA8PCA4KSB8ICgoQ0gpID4+IDgpKQorI2lmIFNUUklOR0xJQl9NQVhfQ0hBUiA8IDB4MTAwMDAKKyAgICAgICAgY29uc3QgU1RSSU5HTElCX0NIQVIgKnVucm9sbGVkX2VuZCA9IGluICsgX1B5X1NJWkVfUk9VTkRfRE9XTihsZW4sIDQpOworICAgICAgICB3aGlsZSAoaW4gPCB1bnJvbGxlZF9lbmQpIHsKKyAgICAgICAgICAgIC8qIGNoZWNrIGlmIGFueSBjaGFyYWN0ZXIgaXMgYSBzdXJyb2dhdGUgY2hhcmFjdGVyICovCisgICAgICAgICAgICBpZiAoKChpblswXSBeIDB4ZDgwMCkgJgorICAgICAgICAgICAgICAgICAoaW5bMV0gXiAweGQ4MDApICYKKyAgICAgICAgICAgICAgICAgKGluWzJdIF4gMHhkODAwKSAmCisgICAgICAgICAgICAgICAgIChpblszXSBeIDB4ZDgwMCkgJiAweGY4MDApID09IDApCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBvdXRbMF0gPSBTV0FCMihpblswXSk7CisgICAgICAgICAgICBvdXRbMV0gPSBTV0FCMihpblsxXSk7CisgICAgICAgICAgICBvdXRbMl0gPSBTV0FCMihpblsyXSk7CisgICAgICAgICAgICBvdXRbM10gPSBTV0FCMihpblszXSk7CisgICAgICAgICAgICBpbiArPSA0OyBvdXQgKz0gNDsKKyAgICAgICAgfQorI2VuZGlmCiAgICAgICAgIHdoaWxlIChpbiA8IGVuZCkgewogICAgICAgICAgICAgUHlfVUNTNCBjaCA9ICppbisrOwotICAgICAgICAgICAgaWYgKGNoIDwgMHgxMDAwMCkKKyAgICAgICAgICAgIGlmIChjaCA8IDB4ZDgwMCkKICAgICAgICAgICAgICAgICAqb3V0KysgPSBTV0FCMigoUHlfVUNTMiljaCk7Ci0gICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGVsc2UgaWYgKGNoIDwgMHhlMDAwKQorICAgICAgICAgICAgICAgIC8qIHJlamVjdCBzdXJyb2dhdGUgY2hhcmFjdGVycyAoVStEODAwLVUrREZGRikgKi8KKyAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CisjaWYgU1RSSU5HTElCX01BWF9DSEFSID49IDB4MTAwMDAKKyAgICAgICAgICAgIGVsc2UgaWYgKGNoID49IDB4MTAwMDApIHsKICAgICAgICAgICAgICAgICBQeV9VQ1MyIGNoMSA9IFB5X1VOSUNPREVfSElHSF9TVVJST0dBVEUoY2gpOwogICAgICAgICAgICAgICAgIFB5X1VDUzIgY2gyID0gUHlfVU5JQ09ERV9MT1dfU1VSUk9HQVRFKGNoKTsKICAgICAgICAgICAgICAgICBvdXRbMF0gPSBTV0FCMihjaDEpOwogICAgICAgICAgICAgICAgIG91dFsxXSA9IFNXQUIyKGNoMik7CiAgICAgICAgICAgICAgICAgb3V0ICs9IDI7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9CiAjZW5kaWYKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAqb3V0KysgPSBTV0FCMigoUHlfVUNTMiljaCk7CisgICAgICAgIH0KICN1bmRlZiBTV0FCMgorICAgIH0KKyAgICAqb3V0cHRyID0gb3V0OworICAgIHJldHVybiBsZW47CisgIGZhaWw6CisgICAgKm91dHB0ciA9IG91dDsKKyAgICByZXR1cm4gbGVuIC0gKGVuZCAtIGluICsgMSk7CisjZW5kaWYKIH0KKyNlbmRpZgorCiAjZW5kaWYgLyogU1RSSU5HTElCX0lTX1VOSUNPREUgKi8KZGlmZiAtLWdpdCBhL09iamVjdHMvc3RyaW5nbGliL2VxLmggYi9PYmplY3RzL3N0cmluZ2xpYi9lcS5oCmluZGV4IDNlNWY1MTAuLmY4ZmQzODQgMTAwNjQ0Ci0tLSBhL09iamVjdHMvc3RyaW5nbGliL2VxLmgKKysrIGIvT2JqZWN0cy9zdHJpbmdsaWIvZXEuaApAQCAtNiw4ICs2LDggQEAKIFB5X0xPQ0FMX0lOTElORShpbnQpCiB1bmljb2RlX2VxKFB5T2JqZWN0ICphYSwgUHlPYmplY3QgKmJiKQogewotICAgIHJlZ2lzdGVyIFB5VW5pY29kZU9iamVjdCAqYSA9IChQeVVuaWNvZGVPYmplY3QgKilhYTsKLSAgICByZWdpc3RlciBQeVVuaWNvZGVPYmplY3QgKmIgPSAoUHlVbmljb2RlT2JqZWN0ICopYmI7CisgICAgUHlVbmljb2RlT2JqZWN0ICphID0gKFB5VW5pY29kZU9iamVjdCAqKWFhOworICAgIFB5VW5pY29kZU9iamVjdCAqYiA9IChQeVVuaWNvZGVPYmplY3QgKiliYjsKIAogICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoYSkgPT0gLTEgfHwgUHlVbmljb2RlX1JFQURZKGIpID09IC0xKSB7CiAgICAgICAgIGFzc2VydCgwICYmICJ1bmljb2RlX2VxIHJlYWR5IGZhaWwiKTsKZGlmZiAtLWdpdCBhL09iamVjdHMvc3RyaW5nbGliL2Zhc3RzZWFyY2guaCBiL09iamVjdHMvc3RyaW5nbGliL2Zhc3RzZWFyY2guaAppbmRleCA1NWFjNzdkLi5jZDdjYWM0IDEwMDY0NAotLS0gYS9PYmplY3RzL3N0cmluZ2xpYi9mYXN0c2VhcmNoLmgKKysrIGIvT2JqZWN0cy9zdHJpbmdsaWIvZmFzdHNlYXJjaC5oCkBAIC0xNDIsNiArMTQyLDggQEAKICAgICBtYXNrID0gMDsKIAogICAgIGlmIChtb2RlICE9IEZBU1RfUlNFQVJDSCkgeworICAgICAgICBjb25zdCBTVFJJTkdMSUJfQ0hBUiAqc3MgPSBzICsgbSAtIDE7CisgICAgICAgIGNvbnN0IFNUUklOR0xJQl9DSEFSICpwcCA9IHAgKyBtIC0gMTsKIAogICAgICAgICAvKiBjcmVhdGUgY29tcHJlc3NlZCBib3llci1tb29yZSBkZWx0YSAxIHRhYmxlICovCiAKQEAgLTE1Niw3ICsxNTgsNyBAQAogCiAgICAgICAgIGZvciAoaSA9IDA7IGkgPD0gdzsgaSsrKSB7CiAgICAgICAgICAgICAvKiBub3RlOiB1c2luZyBtbGFzdCBpbiB0aGUgc2tpcCBwYXRoIHNsb3dzIHRoaW5ncyBkb3duIG9uIHg4NiAqLwotICAgICAgICAgICAgaWYgKHNbaSttLTFdID09IHBbbS0xXSkgeworICAgICAgICAgICAgaWYgKHNzW2ldID09IHBwWzBdKSB7CiAgICAgICAgICAgICAgICAgLyogY2FuZGlkYXRlIG1hdGNoICovCiAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IG1sYXN0OyBqKyspCiAgICAgICAgICAgICAgICAgICAgIGlmIChzW2kral0gIT0gcFtqXSkKQEAgLTE3MiwxMyArMTc0LDEzIEBACiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAvKiBtaXNzOiBjaGVjayBpZiBuZXh0IGNoYXJhY3RlciBpcyBwYXJ0IG9mIHBhdHRlcm4gKi8KLSAgICAgICAgICAgICAgICBpZiAoIVNUUklOR0xJQl9CTE9PTShtYXNrLCBzW2krbV0pKQorICAgICAgICAgICAgICAgIGlmICghU1RSSU5HTElCX0JMT09NKG1hc2ssIHNzW2krMV0pKQogICAgICAgICAgICAgICAgICAgICBpID0gaSArIG07CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBpID0gaSArIHNraXA7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIC8qIHNraXA6IGNoZWNrIGlmIG5leHQgY2hhcmFjdGVyIGlzIHBhcnQgb2YgcGF0dGVybiAqLwotICAgICAgICAgICAgICAgIGlmICghU1RSSU5HTElCX0JMT09NKG1hc2ssIHNbaSttXSkpCisgICAgICAgICAgICAgICAgaWYgKCFTVFJJTkdMSUJfQkxPT00obWFzaywgc3NbaSsxXSkpCiAgICAgICAgICAgICAgICAgICAgIGkgPSBpICsgbTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9zdHJpbmdsaWIvZmluZF9tYXhfY2hhci5oIGIvT2JqZWN0cy9zdHJpbmdsaWIvZmluZF9tYXhfY2hhci5oCmluZGV4IDA2NTU5YzguLmViM2ZlODggMTAwNjQ0Ci0tLSBhL09iamVjdHMvc3RyaW5nbGliL2ZpbmRfbWF4X2NoYXIuaAorKysgYi9PYmplY3RzL3N0cmluZ2xpYi9maW5kX21heF9jaGFyLmgKQEAgLTI0LDcgKzI0LDcgQEAKICAgICB3aGlsZSAocCA8IGVuZCkgewogICAgICAgICBpZiAoX1B5X0lTX0FMSUdORUQocCwgU0laRU9GX0xPTkcpKSB7CiAgICAgICAgICAgICAvKiBIZWxwIHJlZ2lzdGVyIGFsbG9jYXRpb24gKi8KLSAgICAgICAgICAgIHJlZ2lzdGVyIGNvbnN0IHVuc2lnbmVkIGNoYXIgKl9wID0gcDsKKyAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKl9wID0gcDsKICAgICAgICAgICAgIHdoaWxlIChfcCA8IGFsaWduZWRfZW5kKSB7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyB2YWx1ZSA9ICoodW5zaWduZWQgbG9uZyAqKSBfcDsKICAgICAgICAgICAgICAgICBpZiAodmFsdWUgJiBVQ1MxX0FTQ0lJX0NIQVJfTUFTSykKQEAgLTY2LDcgKzY2LDcgQEAKICNlbHNlCiAjZXJyb3IgSW52YWxpZCBTVFJJTkdMSUJfU0laRU9GX0NIQVIgKG11c3QgYmUgMSwgMiBvciA0KQogI2VuZGlmCi0gICAgcmVnaXN0ZXIgUHlfVUNTNCBtYXNrOworICAgIFB5X1VDUzQgbWFzazsKICAgICBQeV9zc2l6ZV90IG4gPSBlbmQgLSBiZWdpbjsKICAgICBjb25zdCBTVFJJTkdMSUJfQ0hBUiAqcCA9IGJlZ2luOwogICAgIGNvbnN0IFNUUklOR0xJQl9DSEFSICp1bnJvbGxlZF9lbmQgPSBiZWdpbiArIF9QeV9TSVpFX1JPVU5EX0RPV04obiwgNCk7CmRpZmYgLS1naXQgYS9PYmplY3RzL3N0cmluZ2xpYi9qb2luLmggYi9PYmplY3RzL3N0cmluZ2xpYi9qb2luLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JmODFiZQotLS0gL2Rldi9udWxsCisrKyBiL09iamVjdHMvc3RyaW5nbGliL2pvaW4uaApAQCAtMCwwICsxLDE0MCBAQAorLyogc3RyaW5nbGliOiBieXRlcyBqb2luaW5nIGltcGxlbWVudGF0aW9uICovCisKKyNpZiBTVFJJTkdMSUJfU0laRU9GX0NIQVIgIT0gMQorI2Vycm9yIGpvaW4uaCBvbmx5IGNvbXBhdGlibGUgd2l0aCBieXRlLXdpc2Ugc3RyaW5ncworI2VuZGlmCisKK1B5X0xPQ0FMX0lOTElORShQeU9iamVjdCAqKQorU1RSSU5HTElCKGJ5dGVzX2pvaW4pKFB5T2JqZWN0ICpzZXAsIFB5T2JqZWN0ICppdGVyYWJsZSkKK3sKKyAgICBjaGFyICpzZXBzdHIgPSBTVFJJTkdMSUJfU1RSKHNlcCk7CisgICAgY29uc3QgUHlfc3NpemVfdCBzZXBsZW4gPSBTVFJJTkdMSUJfTEVOKHNlcCk7CisgICAgUHlPYmplY3QgKnJlcyA9IE5VTEw7CisgICAgY2hhciAqcDsKKyAgICBQeV9zc2l6ZV90IHNlcWxlbiA9IDA7CisgICAgUHlfc3NpemVfdCBzeiA9IDA7CisgICAgUHlfc3NpemVfdCBpLCBuYnVmczsKKyAgICBQeU9iamVjdCAqc2VxLCAqaXRlbTsKKyAgICBQeV9idWZmZXIgKmJ1ZmZlcnMgPSBOVUxMOworI2RlZmluZSBOQl9TVEFUSUNfQlVGRkVSUyAxMAorICAgIFB5X2J1ZmZlciBzdGF0aWNfYnVmZmVyc1tOQl9TVEFUSUNfQlVGRkVSU107CisKKyAgICBzZXEgPSBQeVNlcXVlbmNlX0Zhc3QoaXRlcmFibGUsICJjYW4gb25seSBqb2luIGFuIGl0ZXJhYmxlIik7CisgICAgaWYgKHNlcSA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHNlcWxlbiA9IFB5U2VxdWVuY2VfRmFzdF9HRVRfU0laRShzZXEpOworICAgIGlmIChzZXFsZW4gPT0gMCkgeworICAgICAgICBQeV9ERUNSRUYoc2VxKTsKKyAgICAgICAgcmV0dXJuIFNUUklOR0xJQl9ORVcoTlVMTCwgMCk7CisgICAgfQorI2lmbmRlZiBTVFJJTkdMSUJfTVVUQUJMRQorICAgIGlmIChzZXFsZW4gPT0gMSkgeworICAgICAgICBpdGVtID0gUHlTZXF1ZW5jZV9GYXN0X0dFVF9JVEVNKHNlcSwgMCk7CisgICAgICAgIGlmIChTVFJJTkdMSUJfQ0hFQ0tfRVhBQ1QoaXRlbSkpIHsKKyAgICAgICAgICAgIFB5X0lOQ1JFRihpdGVtKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihzZXEpOworICAgICAgICAgICAgcmV0dXJuIGl0ZW07CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKyAgICBpZiAoc2VxbGVuID4gTkJfU1RBVElDX0JVRkZFUlMpIHsKKyAgICAgICAgYnVmZmVycyA9IFB5TWVtX05FVyhQeV9idWZmZXIsIHNlcWxlbik7CisgICAgICAgIGlmIChidWZmZXJzID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihzZXEpOworICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBidWZmZXJzID0gc3RhdGljX2J1ZmZlcnM7CisgICAgfQorCisgICAgLyogSGVyZSBpcyB0aGUgZ2VuZXJhbCBjYXNlLiAgRG8gYSBwcmUtcGFzcyB0byBmaWd1cmUgb3V0IHRoZSB0b3RhbAorICAgICAqIGFtb3VudCBvZiBzcGFjZSB3ZSdsbCBuZWVkIChzeiksIGFuZCBzZWUgd2hldGhlciBhbGwgYXJndW1lbnRzIGFyZQorICAgICAqIGJ5dGVzLWxpa2UuCisgICAgICovCisgICAgZm9yIChpID0gMCwgbmJ1ZnMgPSAwOyBpIDwgc2VxbGVuOyBpKyspIHsKKyAgICAgICAgUHlfc3NpemVfdCBpdGVtbGVuOworICAgICAgICBpdGVtID0gUHlTZXF1ZW5jZV9GYXN0X0dFVF9JVEVNKHNlcSwgaSk7CisgICAgICAgIGlmIChQeUJ5dGVzX0NoZWNrRXhhY3QoaXRlbSkpIHsKKyAgICAgICAgICAgIC8qIEZhc3QgcGF0aC4gKi8KKyAgICAgICAgICAgIFB5X0lOQ1JFRihpdGVtKTsKKyAgICAgICAgICAgIGJ1ZmZlcnNbaV0ub2JqID0gaXRlbTsKKyAgICAgICAgICAgIGJ1ZmZlcnNbaV0uYnVmID0gUHlCeXRlc19BU19TVFJJTkcoaXRlbSk7CisgICAgICAgICAgICBidWZmZXJzW2ldLmxlbiA9IFB5Qnl0ZXNfR0VUX1NJWkUoaXRlbSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoUHlPYmplY3RfR2V0QnVmZmVyKGl0ZW0sICZidWZmZXJzW2ldLCBQeUJVRl9TSU1QTEUpICE9IDApIHsKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgInNlcXVlbmNlIGl0ZW0gJXpkOiBleHBlY3RlZCBhIGJ5dGVzLWxpa2Ugb2JqZWN0LCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgIiUuODBzIGZvdW5kIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpLCBQeV9UWVBFKGl0ZW0pLT50cF9uYW1lKTsKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KKyAgICAgICAgbmJ1ZnMgPSBpICsgMTsgIC8qIGZvciBlcnJvciBjbGVhbnVwICovCisgICAgICAgIGl0ZW1sZW4gPSBidWZmZXJzW2ldLmxlbjsKKyAgICAgICAgaWYgKGl0ZW1sZW4gPiBQWV9TU0laRV9UX01BWCAtIHN6KSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiam9pbigpIHJlc3VsdCBpcyB0b28gbG9uZyIpOworICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQorICAgICAgICBzeiArPSBpdGVtbGVuOworICAgICAgICBpZiAoaSAhPSAwKSB7CisgICAgICAgICAgICBpZiAoc2VwbGVuID4gUFlfU1NJWkVfVF9NQVggLSBzeikgeworICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiam9pbigpIHJlc3VsdCBpcyB0b28gbG9uZyIpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzeiArPSBzZXBsZW47CisgICAgICAgIH0KKyAgICAgICAgaWYgKHNlcWxlbiAhPSBQeVNlcXVlbmNlX0Zhc3RfR0VUX1NJWkUoc2VxKSkgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2VxdWVuY2UgY2hhbmdlZCBzaXplIGR1cmluZyBpdGVyYXRpb24iKTsKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBBbGxvY2F0ZSByZXN1bHQgc3BhY2UuICovCisgICAgcmVzID0gU1RSSU5HTElCX05FVyhOVUxMLCBzeik7CisgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICBnb3RvIGVycm9yOworCisgICAgLyogQ2F0ZW5hdGUgZXZlcnl0aGluZy4gKi8KKyAgICBwID0gU1RSSU5HTElCX1NUUihyZXMpOworICAgIGlmICghc2VwbGVuKSB7CisgICAgICAgIC8qIGZhc3QgcGF0aCAqLworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbmJ1ZnM7IGkrKykgeworICAgICAgICAgICAgUHlfc3NpemVfdCBuID0gYnVmZmVyc1tpXS5sZW47CisgICAgICAgICAgICBjaGFyICpxID0gYnVmZmVyc1tpXS5idWY7CisgICAgICAgICAgICBQeV9NRU1DUFkocCwgcSwgbik7CisgICAgICAgICAgICBwICs9IG47CisgICAgICAgIH0KKyAgICAgICAgZ290byBkb25lOworICAgIH0KKyAgICBmb3IgKGkgPSAwOyBpIDwgbmJ1ZnM7IGkrKykgeworICAgICAgICBQeV9zc2l6ZV90IG47CisgICAgICAgIGNoYXIgKnE7CisgICAgICAgIGlmIChpKSB7CisgICAgICAgICAgICBQeV9NRU1DUFkocCwgc2Vwc3RyLCBzZXBsZW4pOworICAgICAgICAgICAgcCArPSBzZXBsZW47CisgICAgICAgIH0KKyAgICAgICAgbiA9IGJ1ZmZlcnNbaV0ubGVuOworICAgICAgICBxID0gYnVmZmVyc1tpXS5idWY7CisgICAgICAgIFB5X01FTUNQWShwLCBxLCBuKTsKKyAgICAgICAgcCArPSBuOworICAgIH0KKyAgICBnb3RvIGRvbmU7CisKK2Vycm9yOgorICAgIHJlcyA9IE5VTEw7Citkb25lOgorICAgIFB5X0RFQ1JFRihzZXEpOworICAgIGZvciAoaSA9IDA7IGkgPCBuYnVmczsgaSsrKQorICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZidWZmZXJzW2ldKTsKKyAgICBpZiAoYnVmZmVycyAhPSBzdGF0aWNfYnVmZmVycykKKyAgICAgICAgUHlNZW1fRlJFRShidWZmZXJzKTsKKyAgICByZXR1cm4gcmVzOworfQorCisjdW5kZWYgTkJfU1RBVElDX0JVRkZFUlMKZGlmZiAtLWdpdCBhL09iamVjdHMvc3RyaW5nbGliL3BhcnRpdGlvbi5oIGIvT2JqZWN0cy9zdHJpbmdsaWIvcGFydGl0aW9uLmgKaW5kZXggNDBjYjUxMi4uZWQzMmE2ZiAxMDA2NDQKLS0tIGEvT2JqZWN0cy9zdHJpbmdsaWIvcGFydGl0aW9uLmgKKysrIGIvT2JqZWN0cy9zdHJpbmdsaWIvcGFydGl0aW9uLmgKQEAgLTI5LDYgKzI5LDExIEBACiAgICAgICAgIFB5VHVwbGVfU0VUX0lURU0ob3V0LCAwLCBTVFJJTkdMSUJfTkVXKHN0ciwgc3RyX2xlbikpOwogICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKG91dCwgMSwgU1RSSU5HTElCX05FVyhOVUxMLCAwKSk7CiAgICAgICAgIFB5VHVwbGVfU0VUX0lURU0ob3V0LCAyLCBTVFJJTkdMSUJfTkVXKE5VTEwsIDApKTsKKworICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICAgICAgUHlfREVDUkVGKG91dCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQogI2Vsc2UKICAgICAgICAgUHlfSU5DUkVGKHN0cl9vYmopOwogICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKG91dCwgMCwgKFB5T2JqZWN0Kikgc3RyX29iaik7CkBAIC03OSw2ICs4NCwxMSBAQAogICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKG91dCwgMCwgU1RSSU5HTElCX05FVyhOVUxMLCAwKSk7CiAgICAgICAgIFB5VHVwbGVfU0VUX0lURU0ob3V0LCAxLCBTVFJJTkdMSUJfTkVXKE5VTEwsIDApKTsKICAgICAgICAgUHlUdXBsZV9TRVRfSVRFTShvdXQsIDIsIFNUUklOR0xJQl9ORVcoc3RyLCBzdHJfbGVuKSk7CisKKyAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihvdXQpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KICNlbHNlCiAgICAgICAgIFB5X0lOQ1JFRihTVFJJTkdMSUJfRU1QVFkpOwogICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKG91dCwgMCwgKFB5T2JqZWN0KikgU1RSSU5HTElCX0VNUFRZKTsKZGlmZiAtLWdpdCBhL09iamVjdHMvc3RyaW5nbGliL3JlcGxhY2UuaCBiL09iamVjdHMvc3RyaW5nbGliL3JlcGxhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjMxOGVkCi0tLSAvZGV2L251bGwKKysrIGIvT2JqZWN0cy9zdHJpbmdsaWIvcmVwbGFjZS5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qIHN0cmluZ2xpYjogcmVwbGFjZSBpbXBsZW1lbnRhdGlvbiAqLworCisjaWZuZGVmIFNUUklOR0xJQl9GQVNUU0VBUkNIX0gKKyNlcnJvciBtdXN0IGluY2x1ZGUgInN0cmluZ2xpYi9mYXN0c2VhcmNoLmgiIGJlZm9yZSBpbmNsdWRpbmcgdGhpcyBtb2R1bGUKKyNlbmRpZgorCitQeV9MT0NBTF9JTkxJTkUodm9pZCkKK1NUUklOR0xJQihyZXBsYWNlXzFjaGFyX2lucGxhY2UpKFNUUklOR0xJQl9DSEFSKiBzLCBTVFJJTkdMSUJfQ0hBUiogZW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfVUNTNCB1MSwgUHlfVUNTNCB1MiwgUHlfc3NpemVfdCBtYXhjb3VudCkKK3sKKyAgICAqcyA9IHUyOworICAgIHdoaWxlICgtLW1heGNvdW50ICYmICsrcyAhPSBlbmQpIHsKKyAgICAgICAgLyogRmluZCB0aGUgbmV4dCBjaGFyYWN0ZXIgdG8gYmUgcmVwbGFjZWQuCisKKyAgICAgICAgICAgSWYgaXQgb2NjdXJzIG9mdGVuLCBpdCBpcyBmYXN0ZXIgdG8gc2NhbiBmb3IgaXQgdXNpbmcgYW4gaW5saW5lCisgICAgICAgICAgIGxvb3AuICBJZiBpdCBvY2N1cnMgc2VsZG9tLCBpdCBpcyBmYXN0ZXIgdG8gc2NhbiBmb3IgaXQgdXNpbmcgYQorICAgICAgICAgICBmdW5jdGlvbiBjYWxsOyB0aGUgb3ZlcmhlYWQgb2YgdGhlIGZ1bmN0aW9uIGNhbGwgaXMgYW1vcnRpemVkCisgICAgICAgICAgIGFjcm9zcyB0aGUgbWFueSBjaGFyYWN0ZXJzIHRoYXQgY2FsbCBjb3ZlcnMuICBXZSBzdGFydCB3aXRoIGFuCisgICAgICAgICAgIGlubGluZSBsb29wIGFuZCB1c2UgYSBoZXVyaXN0aWMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdG8gZmFsbCBiYWNrCisgICAgICAgICAgIHRvIGEgZnVuY3Rpb24gY2FsbC4gKi8KKyAgICAgICAgaWYgKCpzICE9IHUxKSB7CisgICAgICAgICAgICBpbnQgYXR0ZW1wdHMgPSAxMDsKKyAgICAgICAgICAgIC8qIHNlYXJjaCB1MSBpbiBhIGR1bW15IGxvb3AgKi8KKyAgICAgICAgICAgIHdoaWxlICgxKSB7CisgICAgICAgICAgICAgICAgaWYgKCsrcyA9PSBlbmQpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBpZiAoKnMgPT0gdTEpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGlmICghLS1hdHRlbXB0cykgeworICAgICAgICAgICAgICAgICAgICAvKiBpZiB1MSB3YXMgbm90IGZvdW5kIGZvciBhdHRlbXB0cyBpdGVyYXRpb25zLAorICAgICAgICAgICAgICAgICAgICAgICB1c2UgRkFTVFNFQVJDSCgpIG9yIG1lbWNocigpICovCisjaWYgU1RSSU5HTElCX1NJWkVPRl9DSEFSID09IDEKKyAgICAgICAgICAgICAgICAgICAgcysrOworICAgICAgICAgICAgICAgICAgICBzID0gbWVtY2hyKHMsIHUxLCBlbmQgLSBzKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyNlbHNlCisgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgaTsKKyAgICAgICAgICAgICAgICAgICAgU1RSSU5HTElCX0NIQVIgY2gxID0gKFNUUklOR0xJQl9DSEFSKSB1MTsKKyAgICAgICAgICAgICAgICAgICAgcysrOworICAgICAgICAgICAgICAgICAgICBpID0gRkFTVFNFQVJDSChzLCBlbmQgLSBzLCAmY2gxLCAxLCAwLCBGQVNUX1NFQVJDSCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChpIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgcyArPSBpOworI2VuZGlmCisgICAgICAgICAgICAgICAgICAgIC8qIHJlc3RhcnQgdGhlIGR1bW15IGxvb3AgKi8KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgICpzID0gdTI7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9zdHJpbmdsaWIvc3BsaXQuaCBiL09iamVjdHMvc3RyaW5nbGliL3NwbGl0LmgKaW5kZXggOTQ3ZGQyOC4uMzFmNzdhNyAxMDA2NDQKLS0tIGEvT2JqZWN0cy9zdHJpbmdsaWIvc3BsaXQuaAorKysgYi9PYmplY3RzL3N0cmluZ2xpYi9zcGxpdC5oCkBAIC0zNDUsOCArMzQ1LDggQEAKICAgICAgICBhbmQgdGhlIGFwcGVuZHMgb25seSBkb25lIHdoZW4gdGhlIHByZWFsbG9jIGJ1ZmZlciBpcyBmdWxsLgogICAgICAgIFRoYXQncyB0b28gbXVjaCB3b3JrIGZvciBsaXR0bGUgZ2Fpbi4qLwogCi0gICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBpOwotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgajsKKyAgICBQeV9zc2l6ZV90IGk7CisgICAgUHlfc3NpemVfdCBqOwogICAgIFB5T2JqZWN0ICpsaXN0ID0gUHlMaXN0X05ldygwKTsKICAgICBQeU9iamVjdCAqc3ViOwogCmRpZmYgLS1naXQgYS9PYmplY3RzL3N0cmluZ2xpYi9zdHJpbmdkZWZzLmggYi9PYmplY3RzL3N0cmluZ2xpYi9zdHJpbmdkZWZzLmgKaW5kZXggN2JiOTFhNy4uY2UyN2YzZSAxMDA2NDQKLS0tIGEvT2JqZWN0cy9zdHJpbmdsaWIvc3RyaW5nZGVmcy5oCisrKyBiL09iamVjdHMvc3RyaW5nbGliL3N0cmluZ2RlZnMuaApAQCAtMjEsNyArMjEsNiBAQAogI2RlZmluZSBTVFJJTkdMSUJfU1RSICAgICAgICAgICAgUHlCeXRlc19BU19TVFJJTkcKICNkZWZpbmUgU1RSSU5HTElCX0xFTiAgICAgICAgICAgIFB5Qnl0ZXNfR0VUX1NJWkUKICNkZWZpbmUgU1RSSU5HTElCX05FVyAgICAgICAgICAgIFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUKLSNkZWZpbmUgU1RSSU5HTElCX1JFU0laRSAgICAgICAgIF9QeUJ5dGVzX1Jlc2l6ZQogI2RlZmluZSBTVFJJTkdMSUJfQ0hFQ0sgICAgICAgICAgUHlCeXRlc19DaGVjawogI2RlZmluZSBTVFJJTkdMSUJfQ0hFQ0tfRVhBQ1QgICAgUHlCeXRlc19DaGVja0V4YWN0CiAjZGVmaW5lIFNUUklOR0xJQl9UT1NUUiAgICAgICAgICBQeU9iamVjdF9TdHIKZGlmZiAtLWdpdCBhL09iamVjdHMvc3RyaW5nbGliL3RyYW5zbW9ncmlmeS5oIGIvT2JqZWN0cy9zdHJpbmdsaWIvdHJhbnNtb2dyaWZ5LmgKaW5kZXggY2JkNzE0NC4uY2FlNmVhMSAxMDA2NDQKLS0tIGEvT2JqZWN0cy9zdHJpbmdsaWIvdHJhbnNtb2dyaWZ5LmgKKysrIGIvT2JqZWN0cy9zdHJpbmdsaWIvdHJhbnNtb2dyaWZ5LmgKQEAgLTUsMjEgKzUsMjMgQEAKICAgIHNoYXJlZCBjb2RlIGluIGJ5dGVzX21ldGhvZHMuYyB0byBjdXQgZG93biBvbiBkdXBsaWNhdGUgY29kZSBibG9hdC4gICovCiAKIFB5RG9jX1NUUlZBUihleHBhbmR0YWJzX19kb2NfXywKLSJCLmV4cGFuZHRhYnMoW3RhYnNpemVdKSAtPiBjb3B5IG9mIEJcblwKKyJCLmV4cGFuZHRhYnModGFic2l6ZT04KSAtPiBjb3B5IG9mIEJcblwKIFxuXAogUmV0dXJuIGEgY29weSBvZiBCIHdoZXJlIGFsbCB0YWIgY2hhcmFjdGVycyBhcmUgZXhwYW5kZWQgdXNpbmcgc3BhY2VzLlxuXAogSWYgdGFic2l6ZSBpcyBub3QgZ2l2ZW4sIGEgdGFiIHNpemUgb2YgOCBjaGFyYWN0ZXJzIGlzIGFzc3VtZWQuIik7CiAKIHN0YXRpYyBQeU9iamVjdCoKLXN0cmluZ2xpYl9leHBhbmR0YWJzKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3N0cmluZ2xpYl9leHBhbmR0YWJzKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCiB7CiAgICAgY29uc3QgY2hhciAqZSwgKnA7CiAgICAgY2hhciAqcTsKICAgICBQeV9zc2l6ZV90IGksIGo7CiAgICAgUHlPYmplY3QgKnU7CisgICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJ0YWJzaXplIiwgMH07CiAgICAgaW50IHRhYnNpemUgPSA4OwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8aTpleHBhbmR0YWJzIiwgJnRhYnNpemUpKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJ8aTpleHBhbmR0YWJzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrd2xpc3QsICZ0YWJzaXplKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICAvKiBGaXJzdCBwYXNzOiBkZXRlcm1pbmUgc2l6ZSBvZiBvdXRwdXQgc3RyaW5nICovCmRpZmYgLS1naXQgYS9PYmplY3RzL3N0cmluZ2xpYi91Y3MxbGliLmggYi9PYmplY3RzL3N0cmluZ2xpYi91Y3MxbGliLmgKaW5kZXggZThjNmZjYi4uY2UxZWI1NyAxMDA2NDQKLS0tIGEvT2JqZWN0cy9zdHJpbmdsaWIvdWNzMWxpYi5oCisrKyBiL09iamVjdHMvc3RyaW5nbGliL3VjczFsaWIuaApAQCAtMTksNyArMTksNiBAQAogI2RlZmluZSBTVFJJTkdMSUJfU1RSICAgICAgICAgICAgUHlVbmljb2RlXzFCWVRFX0RBVEEKICNkZWZpbmUgU1RSSU5HTElCX0xFTiAgICAgICAgICAgIFB5VW5pY29kZV9HRVRfTEVOR1RICiAjZGVmaW5lIFNUUklOR0xJQl9ORVcgICAgICAgICAgICBfUHlVbmljb2RlX0Zyb21VQ1MxCi0jZGVmaW5lIFNUUklOR0xJQl9SRVNJWkUgICAgICAgICBub3Rfc3VwcG9ydGVkCiAjZGVmaW5lIFNUUklOR0xJQl9DSEVDSyAgICAgICAgICBQeVVuaWNvZGVfQ2hlY2sKICNkZWZpbmUgU1RSSU5HTElCX0NIRUNLX0VYQUNUICAgIFB5VW5pY29kZV9DaGVja0V4YWN0CiAKZGlmZiAtLWdpdCBhL09iamVjdHMvc3RyaW5nbGliL3VjczJsaWIuaCBiL09iamVjdHMvc3RyaW5nbGliL3VjczJsaWIuaAppbmRleCA0NWU1NzI5Li5mOTAwY2I2IDEwMDY0NAotLS0gYS9PYmplY3RzL3N0cmluZ2xpYi91Y3MybGliLmgKKysrIGIvT2JqZWN0cy9zdHJpbmdsaWIvdWNzMmxpYi5oCkBAIC0xOSw3ICsxOSw2IEBACiAjZGVmaW5lIFNUUklOR0xJQl9TVFIgICAgICAgICAgICBQeVVuaWNvZGVfMkJZVEVfREFUQQogI2RlZmluZSBTVFJJTkdMSUJfTEVOICAgICAgICAgICAgUHlVbmljb2RlX0dFVF9MRU5HVEgKICNkZWZpbmUgU1RSSU5HTElCX05FVyAgICAgICAgICAgIF9QeVVuaWNvZGVfRnJvbVVDUzIKLSNkZWZpbmUgU1RSSU5HTElCX1JFU0laRSAgICAgICAgIG5vdF9zdXBwb3J0ZWQKICNkZWZpbmUgU1RSSU5HTElCX0NIRUNLICAgICAgICAgIFB5VW5pY29kZV9DaGVjawogI2RlZmluZSBTVFJJTkdMSUJfQ0hFQ0tfRVhBQ1QgICAgUHlVbmljb2RlX0NoZWNrRXhhY3QKIApkaWZmIC0tZ2l0IGEvT2JqZWN0cy9zdHJpbmdsaWIvdWNzNGxpYi5oIGIvT2JqZWN0cy9zdHJpbmdsaWIvdWNzNGxpYi5oCmluZGV4IDY0N2EyN2UuLjg2YTQ4MGYgMTAwNjQ0Ci0tLSBhL09iamVjdHMvc3RyaW5nbGliL3VjczRsaWIuaAorKysgYi9PYmplY3RzL3N0cmluZ2xpYi91Y3M0bGliLmgKQEAgLTE5LDcgKzE5LDYgQEAKICNkZWZpbmUgU1RSSU5HTElCX1NUUiAgICAgICAgICAgIFB5VW5pY29kZV80QllURV9EQVRBCiAjZGVmaW5lIFNUUklOR0xJQl9MRU4gICAgICAgICAgICBQeVVuaWNvZGVfR0VUX0xFTkdUSAogI2RlZmluZSBTVFJJTkdMSUJfTkVXICAgICAgICAgICAgX1B5VW5pY29kZV9Gcm9tVUNTNAotI2RlZmluZSBTVFJJTkdMSUJfUkVTSVpFICAgICAgICAgbm90X3N1cHBvcnRlZAogI2RlZmluZSBTVFJJTkdMSUJfQ0hFQ0sgICAgICAgICAgUHlVbmljb2RlX0NoZWNrCiAjZGVmaW5lIFNUUklOR0xJQl9DSEVDS19FWEFDVCAgICBQeVVuaWNvZGVfQ2hlY2tFeGFjdAogCmRpZmYgLS1naXQgYS9PYmplY3RzL3N0cmluZ2xpYi91bmRlZi5oIGIvT2JqZWN0cy9zdHJpbmdsaWIvdW5kZWYuaAppbmRleCAwMzExN2VjLi5mOWQzZjFkIDEwMDY0NAotLS0gYS9PYmplY3RzL3N0cmluZ2xpYi91bmRlZi5oCisrKyBiL09iamVjdHMvc3RyaW5nbGliL3VuZGVmLmgKQEAgLTYsNyArNiw2IEBACiAjdW5kZWYgIFNUUklOR0xJQl9TVFIKICN1bmRlZiAgU1RSSU5HTElCX0xFTgogI3VuZGVmICBTVFJJTkdMSUJfTkVXCi0jdW5kZWYgIFNUUklOR0xJQl9SRVNJWkUKICN1bmRlZiAgX1B5X0luc2VydFRob3VzYW5kc0dyb3VwaW5nCiAjdW5kZWYgU1RSSU5HTElCX0lTX1VOSUNPREUKIApkaWZmIC0tZ2l0IGEvT2JqZWN0cy9zdHJpbmdsaWIvdW5pY29kZV9mb3JtYXQuaCBiL09iamVjdHMvc3RyaW5nbGliL3VuaWNvZGVfZm9ybWF0LmgKaW5kZXggZDQ3MTlhNS4uYWVjMjIxYSAxMDA2NDQKLS0tIGEvT2JqZWN0cy9zdHJpbmdsaWIvdW5pY29kZV9mb3JtYXQuaAorKysgYi9PYmplY3RzL3N0cmluZ2xpYi91bmljb2RlX2Zvcm1hdC5oCkBAIC01NDMsNyArNTQzLDcgQEAKIAogc3RhdGljIGludAogcGFyc2VfZmllbGQoU3ViU3RyaW5nICpzdHIsIFN1YlN0cmluZyAqZmllbGRfbmFtZSwgU3ViU3RyaW5nICpmb3JtYXRfc3BlYywKLSAgICAgICAgICAgIFB5X1VDUzQgKmNvbnZlcnNpb24pCisgICAgICAgICAgICBpbnQgKmZvcm1hdF9zcGVjX25lZWRzX2V4cGFuZGluZywgUHlfVUNTNCAqY29udmVyc2lvbikKIHsKICAgICAvKiBOb3RlIHRoaXMgZnVuY3Rpb24gd29ya3MgaWYgdGhlIGZpZWxkIG5hbWUgaXMgemVybyBsZW5ndGgsCiAgICAgICAgd2hpY2ggaXMgZ29vZC4gIFplcm8gbGVuZ3RoIGZpZWxkIG5hbWVzIGFyZSBoYW5kbGVkIGxhdGVyLCBpbgpAQCAtNTYxLDYgKzU2MSwxNSBAQAogICAgIGZpZWxkX25hbWUtPnN0YXJ0ID0gc3RyLT5zdGFydDsKICAgICB3aGlsZSAoc3RyLT5zdGFydCA8IHN0ci0+ZW5kKSB7CiAgICAgICAgIHN3aXRjaCAoKGMgPSBQeVVuaWNvZGVfUkVBRF9DSEFSKHN0ci0+c3RyLCBzdHItPnN0YXJ0KyspKSkgeworICAgICAgICBjYXNlICd7JzoKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAidW5leHBlY3RlZCAneycgaW4gZmllbGQgbmFtZSIpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGNhc2UgJ1snOgorICAgICAgICAgICAgZm9yICg7IHN0ci0+c3RhcnQgPCBzdHItPmVuZDsgc3RyLT5zdGFydCsrKQorICAgICAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfUkVBRF9DSEFSKHN0ci0+c3RyLCBzdHItPnN0YXJ0KSA9PSAnXScpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGNhc2UgJ30nOgogICAgICAgICBjYXNlICc6JzoKICAgICAgICAgY2FzZSAnISc6CiAgICAgICAgICAgICBicmVhazsKQEAgLTU3MCw0MSArNTc5LDYyIEBACiAgICAgICAgIGJyZWFrOwogICAgIH0KIAorICAgIGZpZWxkX25hbWUtPmVuZCA9IHN0ci0+c3RhcnQgLSAxOwogICAgIGlmIChjID09ICchJyB8fCBjID09ICc6JykgeworICAgICAgICBQeV9zc2l6ZV90IGNvdW50OwogICAgICAgICAvKiB3ZSBoYXZlIGEgZm9ybWF0IHNwZWNpZmllciBhbmQvb3IgYSBjb252ZXJzaW9uICovCiAgICAgICAgIC8qIGRvbid0IGluY2x1ZGUgdGhlIGxhc3QgY2hhcmFjdGVyICovCi0gICAgICAgIGZpZWxkX25hbWUtPmVuZCA9IHN0ci0+c3RhcnQtMTsKLQotICAgICAgICAvKiB0aGUgZm9ybWF0IHNwZWNpZmllciBpcyB0aGUgcmVzdCBvZiB0aGUgc3RyaW5nICovCi0gICAgICAgIGZvcm1hdF9zcGVjLT5zdHIgPSBzdHItPnN0cjsKLSAgICAgICAgZm9ybWF0X3NwZWMtPnN0YXJ0ID0gc3RyLT5zdGFydDsKLSAgICAgICAgZm9ybWF0X3NwZWMtPmVuZCA9IHN0ci0+ZW5kOwogCiAgICAgICAgIC8qIHNlZSBpZiB0aGVyZSdzIGEgY29udmVyc2lvbiBzcGVjaWZpZXIgKi8KICAgICAgICAgaWYgKGMgPT0gJyEnKSB7CiAgICAgICAgICAgICAvKiB0aGVyZSBtdXN0IGJlIGFub3RoZXIgY2hhcmFjdGVyIHByZXNlbnQgKi8KLSAgICAgICAgICAgIGlmIChmb3JtYXRfc3BlYy0+c3RhcnQgPj0gZm9ybWF0X3NwZWMtPmVuZCkgeworICAgICAgICAgICAgaWYgKHN0ci0+c3RhcnQgPj0gc3RyLT5lbmQpIHsKICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImVuZCBvZiBmb3JtYXQgd2hpbGUgbG9va2luZyBmb3IgY29udmVyc2lvbiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlbmQgb2Ygc3RyaW5nIHdoaWxlIGxvb2tpbmcgZm9yIGNvbnZlcnNpb24gIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3BlY2lmaWVyIik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAqY29udmVyc2lvbiA9IFB5VW5pY29kZV9SRUFEX0NIQVIoZm9ybWF0X3NwZWMtPnN0ciwgZm9ybWF0X3NwZWMtPnN0YXJ0KyspOworICAgICAgICAgICAgKmNvbnZlcnNpb24gPSBQeVVuaWNvZGVfUkVBRF9DSEFSKHN0ci0+c3RyLCBzdHItPnN0YXJ0KyspOwogCi0gICAgICAgICAgICAvKiBpZiB0aGVyZSBpcyBhbm90aGVyIGNoYXJhY3RlciwgaXQgbXVzdCBiZSBhIGNvbG9uICovCi0gICAgICAgICAgICBpZiAoZm9ybWF0X3NwZWMtPnN0YXJ0IDwgZm9ybWF0X3NwZWMtPmVuZCkgewotICAgICAgICAgICAgICAgIGMgPSBQeVVuaWNvZGVfUkVBRF9DSEFSKGZvcm1hdF9zcGVjLT5zdHIsIGZvcm1hdF9zcGVjLT5zdGFydCsrKTsKKyAgICAgICAgICAgIGlmIChzdHItPnN0YXJ0IDwgc3RyLT5lbmQpIHsKKyAgICAgICAgICAgICAgICBjID0gUHlVbmljb2RlX1JFQURfQ0hBUihzdHItPnN0ciwgc3RyLT5zdGFydCsrKTsKKyAgICAgICAgICAgICAgICBpZiAoYyA9PSAnfScpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICAgICAgICAgIGlmIChjICE9ICc6JykgewogICAgICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHBlY3RlZCAnOicgYWZ0ZXIgZm9ybWF0IHNwZWNpZmllciIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkICc6JyBhZnRlciBjb252ZXJzaW9uIHNwZWNpZmllciIpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KKyAgICAgICAgZm9ybWF0X3NwZWMtPnN0ciA9IHN0ci0+c3RyOworICAgICAgICBmb3JtYXRfc3BlYy0+c3RhcnQgPSBzdHItPnN0YXJ0OworICAgICAgICBjb3VudCA9IDE7CisgICAgICAgIHdoaWxlIChzdHItPnN0YXJ0IDwgc3RyLT5lbmQpIHsKKyAgICAgICAgICAgIHN3aXRjaCAoKGMgPSBQeVVuaWNvZGVfUkVBRF9DSEFSKHN0ci0+c3RyLCBzdHItPnN0YXJ0KyspKSkgeworICAgICAgICAgICAgY2FzZSAneyc6CisgICAgICAgICAgICAgICAgKmZvcm1hdF9zcGVjX25lZWRzX2V4cGFuZGluZyA9IDE7CisgICAgICAgICAgICAgICAgY291bnQrKzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ30nOgorICAgICAgICAgICAgICAgIGNvdW50LS07CisgICAgICAgICAgICAgICAgaWYgKGNvdW50ID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgZm9ybWF0X3NwZWMtPmVuZCA9IHN0ci0+c3RhcnQgLSAxOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJ1bm1hdGNoZWQgJ3snIGluIGZvcm1hdCBzcGVjIik7CisgICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICBlbHNlCi0gICAgICAgIC8qIGVuZCBvZiBzdHJpbmcsIHRoZXJlJ3Mgbm8gZm9ybWF0X3NwZWMgb3IgY29udmVyc2lvbiAqLwotICAgICAgICBmaWVsZF9uYW1lLT5lbmQgPSBzdHItPnN0YXJ0OworICAgIGVsc2UgaWYgKGMgIT0gJ30nKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiZXhwZWN0ZWQgJ30nIGJlZm9yZSBlbmQgb2Ygc3RyaW5nIik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KIAogICAgIHJldHVybiAxOwogfQpAQCAtNjM4LDEwICs2NjgsOSBAQAogICAgICAgICAgICAgICAgICAgICBTdWJTdHJpbmcgKmZvcm1hdF9zcGVjLCBQeV9VQ1M0ICpjb252ZXJzaW9uLAogICAgICAgICAgICAgICAgICAgICBpbnQgKmZvcm1hdF9zcGVjX25lZWRzX2V4cGFuZGluZykKIHsKLSAgICBpbnQgYXRfZW5kLCBoaXRfZm9ybWF0X3NwZWM7CisgICAgaW50IGF0X2VuZDsKICAgICBQeV9VQ1M0IGMgPSAwOwogICAgIFB5X3NzaXplX3Qgc3RhcnQ7Ci0gICAgaW50IGNvdW50OwogICAgIFB5X3NzaXplX3QgbGVuOwogICAgIGludCBtYXJrdXBfZm9sbG93cyA9IDA7CiAKQEAgLTcxMyw1MiArNzQyLDEyIEBACiAgICAgaWYgKCFtYXJrdXBfZm9sbG93cykKICAgICAgICAgcmV0dXJuIDI7CiAKLSAgICAvKiB0aGlzIGlzIG1hcmt1cCwgZmluZCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcgYnkgY291bnRpbmcgbmVzdGVkCi0gICAgICAgYnJhY2VzLiAgbm90ZSB0aGF0IHRoaXMgcHJvaGliaXRzIGVzY2FwZWQgYnJhY2VzLCBzbyB0aGF0Ci0gICAgICAgZm9ybWF0X3NwZWNzIGNhbm5vdCBoYXZlIGJyYWNlcyBpbiB0aGVtLiAqLworICAgIC8qIHRoaXMgaXMgbWFya3VwOyBwYXJzZSB0aGUgZmllbGQgKi8KICAgICAqZmllbGRfcHJlc2VudCA9IDE7Ci0gICAgY291bnQgPSAxOwotCi0gICAgc3RhcnQgPSBzZWxmLT5zdHIuc3RhcnQ7Ci0KLSAgICAvKiB3ZSBrbm93IHdlIGNhbid0IGhhdmUgYSB6ZXJvIGxlbmd0aCBzdHJpbmcsIHNvIGRvbid0IHdvcnJ5Ci0gICAgICAgYWJvdXQgdGhhdCBjYXNlICovCi0gICAgaGl0X2Zvcm1hdF9zcGVjID0gMDsKLSAgICB3aGlsZSAoc2VsZi0+c3RyLnN0YXJ0IDwgc2VsZi0+c3RyLmVuZCkgewotICAgICAgICBzd2l0Y2ggKGMgPSBQeVVuaWNvZGVfUkVBRF9DSEFSKHNlbGYtPnN0ci5zdHIsIHNlbGYtPnN0ci5zdGFydCsrKSkgewotICAgICAgICBjYXNlICc6JzoKLSAgICAgICAgICAgIGlmICghaGl0X2Zvcm1hdF9zcGVjKSB7Ci0gICAgICAgICAgICAgICAgY291bnQgPSAxOwotICAgICAgICAgICAgICAgIGhpdF9mb3JtYXRfc3BlYyA9IDE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAneyc6Ci0gICAgICAgICAgICAvKiB0aGUgZm9ybWF0IHNwZWMgbmVlZHMgdG8gYmUgcmVjdXJzaXZlbHkgZXhwYW5kZWQuCi0gICAgICAgICAgICAgICB0aGlzIGlzIGFuIG9wdGltaXphdGlvbiwgYW5kIG5vdCBzdHJpY3RseSBuZWVkZWQgKi8KLSAgICAgICAgICAgIGlmIChoaXRfZm9ybWF0X3NwZWMpCi0gICAgICAgICAgICAgICAgKmZvcm1hdF9zcGVjX25lZWRzX2V4cGFuZGluZyA9IDE7Ci0gICAgICAgICAgICBjb3VudCsrOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgJ30nOgotICAgICAgICAgICAgY291bnQtLTsKLSAgICAgICAgICAgIGlmIChjb3VudCA8PSAwKSB7Ci0gICAgICAgICAgICAgICAgLyogd2UncmUgZG9uZS4gIHBhcnNlIGFuZCBnZXQgb3V0ICovCi0gICAgICAgICAgICAgICAgU3ViU3RyaW5nIHM7Ci0KLSAgICAgICAgICAgICAgICBTdWJTdHJpbmdfaW5pdCgmcywgc2VsZi0+c3RyLnN0ciwgc3RhcnQsIHNlbGYtPnN0ci5zdGFydCAtIDEpOwotICAgICAgICAgICAgICAgIGlmIChwYXJzZV9maWVsZCgmcywgZmllbGRfbmFtZSwgZm9ybWF0X3NwZWMsIGNvbnZlcnNpb24pID09IDApCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotCi0gICAgICAgICAgICAgICAgLyogc3VjY2VzcyAqLwotICAgICAgICAgICAgICAgIHJldHVybiAyOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKiBlbmQgb2Ygc3RyaW5nIHdoaWxlIHNlYXJjaGluZyBmb3IgbWF0Y2hpbmcgJ30nICovCi0gICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJ1bm1hdGNoZWQgJ3snIGluIGZvcm1hdCIpOwotICAgIHJldHVybiAwOworICAgIGlmICghcGFyc2VfZmllbGQoJnNlbGYtPnN0ciwgZmllbGRfbmFtZSwgZm9ybWF0X3NwZWMsCisgICAgICAgICAgICAgICAgICAgICBmb3JtYXRfc3BlY19uZWVkc19leHBhbmRpbmcsIGNvbnZlcnNpb24pKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gMjsKIH0KIAogCkBAIC04NzcsMjUgKzg2NiwxOSBAQAogICAgIFN1YlN0cmluZyBsaXRlcmFsOwogICAgIFN1YlN0cmluZyBmaWVsZF9uYW1lOwogICAgIFN1YlN0cmluZyBmb3JtYXRfc3BlYzsKLSAgICBQeV9VQ1M0IGNvbnZlcnNpb24sIG1heGNoYXI7Ci0gICAgUHlfc3NpemVfdCBzdWJsZW47Ci0gICAgaW50IGVycjsKKyAgICBQeV9VQ1M0IGNvbnZlcnNpb247CiAKICAgICBNYXJrdXBJdGVyYXRvcl9pbml0KCZpdGVyLCBpbnB1dC0+c3RyLCBpbnB1dC0+c3RhcnQsIGlucHV0LT5lbmQpOwogICAgIHdoaWxlICgocmVzdWx0ID0gTWFya3VwSXRlcmF0b3JfbmV4dCgmaXRlciwgJmxpdGVyYWwsICZmaWVsZF9wcmVzZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZmllbGRfbmFtZSwgJmZvcm1hdF9zcGVjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY29udmVyc2lvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZvcm1hdF9zcGVjX25lZWRzX2V4cGFuZGluZykpID09IDIpIHsKLSAgICAgICAgc3VibGVuID0gbGl0ZXJhbC5lbmQgLSBsaXRlcmFsLnN0YXJ0OwotICAgICAgICBpZiAoc3VibGVuKSB7Ci0gICAgICAgICAgICBtYXhjaGFyID0gX1B5VW5pY29kZV9GaW5kTWF4Q2hhcihsaXRlcmFsLnN0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpdGVyYWwuc3RhcnQsIGxpdGVyYWwuZW5kKTsKLSAgICAgICAgICAgIGVyciA9IF9QeVVuaWNvZGVXcml0ZXJfUHJlcGFyZSh3cml0ZXIsIHN1YmxlbiwgbWF4Y2hhcik7Ci0gICAgICAgICAgICBpZiAoZXJyID09IC0xKQorICAgICAgICBpZiAobGl0ZXJhbC5lbmQgIT0gbGl0ZXJhbC5zdGFydCkgeworICAgICAgICAgICAgaWYgKCFmaWVsZF9wcmVzZW50ICYmIGl0ZXIuc3RyLnN0YXJ0ID09IGl0ZXIuc3RyLmVuZCkKKyAgICAgICAgICAgICAgICB3cml0ZXItPm92ZXJhbGxvY2F0ZSA9IDA7CisgICAgICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZVN1YnN0cmluZyh3cml0ZXIsIGxpdGVyYWwuc3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGl0ZXJhbC5zdGFydCwgbGl0ZXJhbC5lbmQpIDwgMCkKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIF9QeVVuaWNvZGVfRmFzdENvcHlDaGFyYWN0ZXJzKHdyaXRlci0+YnVmZmVyLCB3cml0ZXItPnBvcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpdGVyYWwuc3RyLCBsaXRlcmFsLnN0YXJ0LCBzdWJsZW4pOwotICAgICAgICAgICAgd3JpdGVyLT5wb3MgKz0gc3VibGVuOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGZpZWxkX3ByZXNlbnQpIHsKQEAgLTkyMCw3ICs5MDMsNiBAQAogICAgICAgICAgICAgIGludCByZWN1cnNpb25fZGVwdGgsIEF1dG9OdW1iZXIgKmF1dG9fbnVtYmVyKQogewogICAgIF9QeVVuaWNvZGVXcml0ZXIgd3JpdGVyOwotICAgIFB5X3NzaXplX3QgbWlubGVuOwogCiAgICAgLyogY2hlY2sgdGhlIHJlY3Vyc2lvbiBsZXZlbCAqLwogICAgIGlmIChyZWN1cnNpb25fZGVwdGggPD0gMCkgewpAQCAtOTI5LDggKzkxMSw5IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIG1pbmxlbiA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKGlucHV0LT5zdHIpICsgMTAwOwotICAgIF9QeVVuaWNvZGVXcml0ZXJfSW5pdCgmd3JpdGVyLCBtaW5sZW4pOworICAgIF9QeVVuaWNvZGVXcml0ZXJfSW5pdCgmd3JpdGVyKTsKKyAgICB3cml0ZXIub3ZlcmFsbG9jYXRlID0gMTsKKyAgICB3cml0ZXIubWluX2xlbmd0aCA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKGlucHV0LT5zdHIpICsgMTAwOwogCiAgICAgaWYgKCFkb19tYXJrdXAoaW5wdXQsIGFyZ3MsIGt3YXJncywgJndyaXRlciwgcmVjdXJzaW9uX2RlcHRoLAogICAgICAgICAgICAgICAgICAgIGF1dG9fbnVtYmVyKSkgewpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9zdHJpbmdsaWIvdW5pY29kZWRlZnMuaCBiL09iamVjdHMvc3RyaW5nbGliL3VuaWNvZGVkZWZzLmgKaW5kZXggZjE2ZjIxZS4uM2RiNTYyOSAxMDA2NDQKLS0tIGEvT2JqZWN0cy9zdHJpbmdsaWIvdW5pY29kZWRlZnMuaAorKysgYi9PYmplY3RzL3N0cmluZ2xpYi91bmljb2RlZGVmcy5oCkBAIC0yMSwxNyArMjEsMTEgQEAKICNkZWZpbmUgU1RSSU5HTElCX1NUUiAgICAgICAgICAgIFB5VW5pY29kZV9BU19VTklDT0RFCiAjZGVmaW5lIFNUUklOR0xJQl9MRU4gICAgICAgICAgICBQeVVuaWNvZGVfR0VUX1NJWkUKICNkZWZpbmUgU1RSSU5HTElCX05FVyAgICAgICAgICAgIFB5VW5pY29kZV9Gcm9tVW5pY29kZQotI2RlZmluZSBTVFJJTkdMSUJfUkVTSVpFICAgICAgICAgUHlVbmljb2RlX1Jlc2l6ZQogI2RlZmluZSBTVFJJTkdMSUJfQ0hFQ0sgICAgICAgICAgUHlVbmljb2RlX0NoZWNrCiAjZGVmaW5lIFNUUklOR0xJQl9DSEVDS19FWEFDVCAgICBQeVVuaWNvZGVfQ2hlY2tFeGFjdAogCi0jaWYgUFlfVkVSU0lPTl9IRVggPCAweDAzMDAwMDAwCi0jZGVmaW5lIFNUUklOR0xJQl9UT1NUUiAgICAgICAgICBQeU9iamVjdF9Vbmljb2RlCi0jZGVmaW5lIFNUUklOR0xJQl9UT0FTQ0lJICAgICAgICBQeU9iamVjdF9SZXByCi0jZWxzZQogI2RlZmluZSBTVFJJTkdMSUJfVE9TVFIgICAgICAgICAgUHlPYmplY3RfU3RyCiAjZGVmaW5lIFNUUklOR0xJQl9UT0FTQ0lJICAgICAgICBQeU9iamVjdF9BU0NJSQotI2VuZGlmCiAKICNkZWZpbmUgU1RSSU5HTElCX1dBTlRfQ09OVEFJTlNfT0JKIDEKIApkaWZmIC0tZ2l0IGEvT2JqZWN0cy9zdHJ1Y3RzZXEuYyBiL09iamVjdHMvc3RydWN0c2VxLmMKaW5kZXggYzNiOWE3Mi4uNjY0MzQ0YiAxMDA2NDQKLS0tIGEvT2JqZWN0cy9zdHJ1Y3RzZXEuYworKysgYi9PYmplY3RzL3N0cnVjdHNlcS5jCkBAIC0xMSwxNyArMTEsMjAgQEAKIC8qIEZpZWxkcyB3aXRoIHRoaXMgbmFtZSBoYXZlIG9ubHkgYSBmaWVsZCBpbmRleCwgbm90IGEgZmllbGQgbmFtZS4KICAgIFRoZXkgYXJlIG9ubHkgYWxsb3dlZCBmb3IgaW5kaWNlcyA8IG5fdmlzaWJsZV9maWVsZHMuICovCiBjaGFyICpQeVN0cnVjdFNlcXVlbmNlX1VubmFtZWRGaWVsZCA9ICJ1bm5hbWVkIGZpZWxkIjsKK19QeV9JREVOVElGSUVSKG5fc2VxdWVuY2VfZmllbGRzKTsKK19QeV9JREVOVElGSUVSKG5fZmllbGRzKTsKK19QeV9JREVOVElGSUVSKG5fdW5uYW1lZF9maWVsZHMpOwogCiAjZGVmaW5lIFZJU0lCTEVfU0laRShvcCkgUHlfU0laRShvcCkKICNkZWZpbmUgVklTSUJMRV9TSVpFX1RQKHRwKSBQeUxvbmdfQXNMb25nKCBcCi0gICAgICAgICAgICAgICAgICAgICAgUHlEaWN0X0dldEl0ZW1TdHJpbmcoKHRwKS0+dHBfZGljdCwgdmlzaWJsZV9sZW5ndGhfa2V5KSkKKyAgICAgICAgICAgICAgICAgICAgICBfUHlEaWN0X0dldEl0ZW1JZCgodHApLT50cF9kaWN0LCAmUHlJZF9uX3NlcXVlbmNlX2ZpZWxkcykpCiAKICNkZWZpbmUgUkVBTF9TSVpFX1RQKHRwKSBQeUxvbmdfQXNMb25nKCBcCi0gICAgICAgICAgICAgICAgICAgICAgUHlEaWN0X0dldEl0ZW1TdHJpbmcoKHRwKS0+dHBfZGljdCwgcmVhbF9sZW5ndGhfa2V5KSkKKyAgICAgICAgICAgICAgICAgICAgICBfUHlEaWN0X0dldEl0ZW1JZCgodHApLT50cF9kaWN0LCAmUHlJZF9uX2ZpZWxkcykpCiAjZGVmaW5lIFJFQUxfU0laRShvcCkgUkVBTF9TSVpFX1RQKFB5X1RZUEUob3ApKQogCiAjZGVmaW5lIFVOTkFNRURfRklFTERTX1RQKHRwKSBQeUxvbmdfQXNMb25nKCBcCi0gICAgICAgICAgICAgICAgICAgICAgUHlEaWN0X0dldEl0ZW1TdHJpbmcoKHRwKS0+dHBfZGljdCwgdW5uYW1lZF9maWVsZHNfa2V5KSkKKyAgICAgICAgICAgICAgICAgICAgICBfUHlEaWN0X0dldEl0ZW1JZCgodHApLT50cF9kaWN0LCAmUHlJZF9uX3VubmFtZWRfZmllbGRzKSkKICNkZWZpbmUgVU5OQU1FRF9GSUVMRFMob3ApIFVOTkFNRURfRklFTERTX1RQKFB5X1RZUEUob3ApKQogCiAKQEAgLTU5LDcgKzYyLDcgQEAKIHN0cnVjdHNlcV9kZWFsbG9jKFB5U3RydWN0U2VxdWVuY2UgKm9iaikKIHsKICAgICBQeV9zc2l6ZV90IGksIHNpemU7Ci0gICAgCisKICAgICBzaXplID0gUkVBTF9TSVpFKG9iaik7CiAgICAgZm9yIChpID0gMDsgaSA8IHNpemU7ICsraSkgewogICAgICAgICBQeV9YREVDUkVGKG9iai0+b2JfaXRlbVtpXSk7CkBAIC0yMzAsOCArMjMzLDggQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBzdHJ1Y3RzZXFfcmVkdWNlKFB5U3RydWN0U2VxdWVuY2UqIHNlbGYpCiB7Ci0gICAgUHlPYmplY3QqIHR1cDsKLSAgICBQeU9iamVjdCogZGljdDsKKyAgICBQeU9iamVjdCogdHVwID0gTlVMTDsKKyAgICBQeU9iamVjdCogZGljdCA9IE5VTEw7CiAgICAgUHlPYmplY3QqIHJlc3VsdDsKICAgICBQeV9zc2l6ZV90IG5fZmllbGRzLCBuX3Zpc2libGVfZmllbGRzLCBuX3VubmFtZWRfZmllbGRzOwogICAgIGludCBpOwpAQCAtMjQwLDE1ICsyNDMsMTIgQEAKICAgICBuX3Zpc2libGVfZmllbGRzID0gVklTSUJMRV9TSVpFKHNlbGYpOwogICAgIG5fdW5uYW1lZF9maWVsZHMgPSBVTk5BTUVEX0ZJRUxEUyhzZWxmKTsKICAgICB0dXAgPSBQeVR1cGxlX05ldyhuX3Zpc2libGVfZmllbGRzKTsKLSAgICBpZiAoIXR1cCkgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9CisgICAgaWYgKCF0dXApCisgICAgICAgIGdvdG8gZXJyb3I7CiAKICAgICBkaWN0ID0gUHlEaWN0X05ldygpOwotICAgIGlmICghZGljdCkgewotICAgICAgICBQeV9ERUNSRUYodHVwKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQorICAgIGlmICghZGljdCkKKyAgICAgICAgZ290byBlcnJvcjsKIAogICAgIGZvciAoaSA9IDA7IGkgPCBuX3Zpc2libGVfZmllbGRzOyBpKyspIHsKICAgICAgICAgUHlfSU5DUkVGKHNlbGYtPm9iX2l0ZW1baV0pOwpAQCAtMjU3LDggKzI1Nyw4IEBACiAKICAgICBmb3IgKDsgaSA8IG5fZmllbGRzOyBpKyspIHsKICAgICAgICAgY2hhciAqbiA9IFB5X1RZUEUoc2VsZiktPnRwX21lbWJlcnNbaS1uX3VubmFtZWRfZmllbGRzXS5uYW1lOwotICAgICAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhkaWN0LCBuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLT5vYl9pdGVtW2ldKTsKKyAgICAgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGRpY3QsIG4sIHNlbGYtPm9iX2l0ZW1baV0pIDwgMCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQogCiAgICAgcmVzdWx0ID0gUHlfQnVpbGRWYWx1ZSgiKE8oT08pKSIsIFB5X1RZUEUoc2VsZiksIHR1cCwgZGljdCk7CkBAIC0yNjcsNiArMjY3LDExIEBACiAgICAgUHlfREVDUkVGKGRpY3QpOwogCiAgICAgcmV0dXJuIHJlc3VsdDsKKworZXJyb3I6CisgICAgUHlfWERFQ1JFRih0dXApOworICAgIFB5X1hERUNSRUYoZGljdCk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIHN0YXRpYyBQeU1ldGhvZERlZiBzdHJ1Y3RzZXFfbWV0aG9kc1tdID0gewpAQCAtMzE1LDEyICszMjAsMTMgQEAKICAgICBzdHJ1Y3RzZXFfbmV3LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX25ldyAqLwogfTsKIAotdm9pZAotUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZShQeVR5cGVPYmplY3QgKnR5cGUsIFB5U3RydWN0U2VxdWVuY2VfRGVzYyAqZGVzYykKK2ludAorUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZTIoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeVN0cnVjdFNlcXVlbmNlX0Rlc2MgKmRlc2MpCiB7CiAgICAgUHlPYmplY3QgKmRpY3Q7CiAgICAgUHlNZW1iZXJEZWYqIG1lbWJlcnM7CiAgICAgaW50IG5fbWVtYmVycywgbl91bm5hbWVkX21lbWJlcnMsIGksIGs7CisgICAgUHlPYmplY3QgKnY7CiAKICNpZmRlZiBQeV9UUkFDRV9SRUZTCiAgICAgLyogaWYgdGhlIHR5cGUgb2JqZWN0IHdhcyBjaGFpbmVkLCB1bmNoYWluIGl0IGZpcnN0CkBAIC0zNDIsOCArMzQ4LDEwIEBACiAgICAgdHlwZS0+dHBfZG9jID0gZGVzYy0+ZG9jOwogCiAgICAgbWVtYmVycyA9IFB5TWVtX05FVyhQeU1lbWJlckRlZiwgbl9tZW1iZXJzLW5fdW5uYW1lZF9tZW1iZXJzKzEpOwotICAgIGlmIChtZW1iZXJzID09IE5VTEwpCi0gICAgICAgIHJldHVybjsKKyAgICBpZiAobWVtYmVycyA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CiAKICAgICBmb3IgKGkgPSBrID0gMDsgaSA8IG5fbWVtYmVyczsgKytpKSB7CiAgICAgICAgIGlmIChkZXNjLT5maWVsZHNbaV0ubmFtZSA9PSBQeVN0cnVjdFNlcXVlbmNlX1VubmFtZWRGaWVsZCkKQEAgLTM2MSwzMCArMzY5LDU2IEBACiAgICAgdHlwZS0+dHBfbWVtYmVycyA9IG1lbWJlcnM7CiAKICAgICBpZiAoUHlUeXBlX1JlYWR5KHR5cGUpIDwgMCkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gLTE7CiAgICAgUHlfSU5DUkVGKHR5cGUpOwogCiAgICAgZGljdCA9IHR5cGUtPnRwX2RpY3Q7CiAjZGVmaW5lIFNFVF9ESUNUX0ZST01fSU5UKGtleSwgdmFsdWUpICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgUHlPYmplY3QgKnYgPSBQeUxvbmdfRnJvbUxvbmcoKGxvbmcpIHZhbHVlKTsgICAgICAgICAgICBcCi0gICAgICAgIGlmICh2ICE9IE5VTEwpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoZGljdCwga2V5LCB2KTsgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgdiA9IFB5TG9uZ19Gcm9tTG9uZygobG9uZykgdmFsdWUpOyAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmICh2ID09IE5VTEwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgcmV0dXJuIC0xOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGRpY3QsIGtleSwgdikgPCAwKSB7ICAgICAgICAgICBcCiAgICAgICAgICAgICBQeV9ERUNSRUYodik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgcmV0dXJuIC0xOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIFB5X0RFQ1JFRih2KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIH0gd2hpbGUgKDApCiAKICAgICBTRVRfRElDVF9GUk9NX0lOVCh2aXNpYmxlX2xlbmd0aF9rZXksIGRlc2MtPm5faW5fc2VxdWVuY2UpOwogICAgIFNFVF9ESUNUX0ZST01fSU5UKHJlYWxfbGVuZ3RoX2tleSwgbl9tZW1iZXJzKTsKICAgICBTRVRfRElDVF9GUk9NX0lOVCh1bm5hbWVkX2ZpZWxkc19rZXksIG5fdW5uYW1lZF9tZW1iZXJzKTsKKworICAgIHJldHVybiAwOworfQorCit2b2lkCitQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlKFB5VHlwZU9iamVjdCAqdHlwZSwgUHlTdHJ1Y3RTZXF1ZW5jZV9EZXNjICpkZXNjKQoreworICAgICh2b2lkKVB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUyKHR5cGUsIGRlc2MpOwogfQogCiBQeVR5cGVPYmplY3QqCiBQeVN0cnVjdFNlcXVlbmNlX05ld1R5cGUoUHlTdHJ1Y3RTZXF1ZW5jZV9EZXNjICpkZXNjKQogewotICAgIFB5VHlwZU9iamVjdCAqcmVzdWx0ID0gKFB5VHlwZU9iamVjdCopUHlUeXBlX0dlbmVyaWNBbGxvYygmUHlUeXBlX1R5cGUsIDApOwotICAgIGlmIChyZXN1bHQgIT0gTlVMTCkgewotICAgICAgICBQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlKHJlc3VsdCwgZGVzYyk7CisgICAgUHlUeXBlT2JqZWN0ICpyZXN1bHQ7CisKKyAgICByZXN1bHQgPSAoUHlUeXBlT2JqZWN0KilQeVR5cGVfR2VuZXJpY0FsbG9jKCZQeVR5cGVfVHlwZSwgMCk7CisgICAgaWYgKHJlc3VsdCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZTIocmVzdWx0LCBkZXNjKSA8IDApIHsKKyAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICByZXR1cm4gcmVzdWx0OwogfQorCitpbnQgX1B5U3RydWN0U2VxdWVuY2VfSW5pdCh2b2lkKQoreworICAgIGlmIChfUHlVbmljb2RlX0Zyb21JZCgmUHlJZF9uX3NlcXVlbmNlX2ZpZWxkcykgPT0gTlVMTAorICAgICAgICB8fCBfUHlVbmljb2RlX0Zyb21JZCgmUHlJZF9uX2ZpZWxkcykgPT0gTlVMTAorICAgICAgICB8fCBfUHlVbmljb2RlX0Zyb21JZCgmUHlJZF9uX3VubmFtZWRfZmllbGRzKSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL09iamVjdHMvdHVwbGVvYmplY3QuYyBiL09iamVjdHMvdHVwbGVvYmplY3QuYwppbmRleCBmODE1NTk1Li44YzAwMjEwIDEwMDY0NAotLS0gYS9PYmplY3RzL3R1cGxlb2JqZWN0LmMKKysrIGIvT2JqZWN0cy90dXBsZW9iamVjdC5jCkBAIC02Myw5ICs2Myw5IEBACiB9CiAKIFB5T2JqZWN0ICoKLVB5VHVwbGVfTmV3KHJlZ2lzdGVyIFB5X3NzaXplX3Qgc2l6ZSkKK1B5VHVwbGVfTmV3KFB5X3NzaXplX3Qgc2l6ZSkKIHsKLSAgICByZWdpc3RlciBQeVR1cGxlT2JqZWN0ICpvcDsKKyAgICBQeVR1cGxlT2JqZWN0ICpvcDsKICAgICBQeV9zc2l6ZV90IGk7CiAgICAgaWYgKHNpemUgPCAwKSB7CiAgICAgICAgIFB5RXJyX0JhZEludGVybmFsQ2FsbCgpOwpAQCAtMTIyLDcgKzEyMiw3IEBACiB9CiAKIFB5X3NzaXplX3QKLVB5VHVwbGVfU2l6ZShyZWdpc3RlciBQeU9iamVjdCAqb3ApCitQeVR1cGxlX1NpemUoUHlPYmplY3QgKm9wKQogewogICAgIGlmICghUHlUdXBsZV9DaGVjayhvcCkpIHsKICAgICAgICAgUHlFcnJfQmFkSW50ZXJuYWxDYWxsKCk7CkBAIC0xMzMsNyArMTMzLDcgQEAKIH0KIAogUHlPYmplY3QgKgotUHlUdXBsZV9HZXRJdGVtKHJlZ2lzdGVyIFB5T2JqZWN0ICpvcCwgcmVnaXN0ZXIgUHlfc3NpemVfdCBpKQorUHlUdXBsZV9HZXRJdGVtKFB5T2JqZWN0ICpvcCwgUHlfc3NpemVfdCBpKQogewogICAgIGlmICghUHlUdXBsZV9DaGVjayhvcCkpIHsKICAgICAgICAgUHlFcnJfQmFkSW50ZXJuYWxDYWxsKCk7CkBAIC0xNDcsMTAgKzE0NywxMCBAQAogfQogCiBpbnQKLVB5VHVwbGVfU2V0SXRlbShyZWdpc3RlciBQeU9iamVjdCAqb3AsIHJlZ2lzdGVyIFB5X3NzaXplX3QgaSwgUHlPYmplY3QgKm5ld2l0ZW0pCitQeVR1cGxlX1NldEl0ZW0oUHlPYmplY3QgKm9wLCBQeV9zc2l6ZV90IGksIFB5T2JqZWN0ICpuZXdpdGVtKQogewotICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICpvbGRpdGVtOwotICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICoqcDsKKyAgICBQeU9iamVjdCAqb2xkaXRlbTsKKyAgICBQeU9iamVjdCAqKnA7CiAgICAgaWYgKCFQeVR1cGxlX0NoZWNrKG9wKSB8fCBvcC0+b2JfcmVmY250ICE9IDEpIHsKICAgICAgICAgUHlfWERFQ1JFRihuZXdpdGVtKTsKICAgICAgICAgUHlFcnJfQmFkSW50ZXJuYWxDYWxsKCk7CkBAIC0yMjQsMTAgKzIyNCwxMCBAQAogLyogTWV0aG9kcyAqLwogCiBzdGF0aWMgdm9pZAotdHVwbGVkZWFsbG9jKHJlZ2lzdGVyIFB5VHVwbGVPYmplY3QgKm9wKQordHVwbGVkZWFsbG9jKFB5VHVwbGVPYmplY3QgKm9wKQogewotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgaTsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGxlbiA9ICBQeV9TSVpFKG9wKTsKKyAgICBQeV9zc2l6ZV90IGk7CisgICAgUHlfc3NpemVfdCBsZW4gPSAgUHlfU0laRShvcCk7CiAgICAgUHlPYmplY3RfR0NfVW5UcmFjayhvcCk7CiAgICAgUHlfVFJBU0hDQU5fU0FGRV9CRUdJTihvcCkKICAgICBpZiAobGVuID4gMCkgewpAQCAtMjU1LDIwICsyNTUsMTIgQEAKIHR1cGxlcmVwcihQeVR1cGxlT2JqZWN0ICp2KQogewogICAgIFB5X3NzaXplX3QgaSwgbjsKLSAgICBQeU9iamVjdCAqcyA9IE5VTEw7Ci0gICAgX1B5QWNjdSBhY2M7Ci0gICAgc3RhdGljIFB5T2JqZWN0ICpzZXAgPSBOVUxMOworICAgIF9QeVVuaWNvZGVXcml0ZXIgd3JpdGVyOwogCiAgICAgbiA9IFB5X1NJWkUodik7CiAgICAgaWYgKG4gPT0gMCkKICAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nKCIoKSIpOwogCi0gICAgaWYgKHNlcCA9PSBOVUxMKSB7Ci0gICAgICAgIHNlcCA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCIsICIpOwotICAgICAgICBpZiAoc2VwID09IE5VTEwpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KICAgICAvKiBXaGlsZSBub3QgbXV0YWJsZSwgaXQgaXMgc3RpbGwgcG9zc2libGUgdG8gZW5kIHVwIHdpdGggYSBjeWNsZSBpbiBhCiAgICAgICAgdHVwbGUgdGhyb3VnaCBhbiBvYmplY3QgdGhhdCBzdG9yZXMgaXRzZWxmIHdpdGhpbiBhIHR1cGxlIChhbmQgdGh1cwogICAgICAgIGluZmluaXRlbHkgYXNrcyBmb3IgdGhlIHJlcHIgb2YgaXRzZWxmKS4gVGhpcyBzaG91bGQgb25seSBiZQpAQCAtMjc4LDQwICsyNzAsNTggQEAKICAgICAgICAgcmV0dXJuIGkgPiAwID8gUHlVbmljb2RlX0Zyb21TdHJpbmcoIiguLi4pIikgOiBOVUxMOwogICAgIH0KIAotICAgIGlmIChfUHlBY2N1X0luaXQoJmFjYykpCi0gICAgICAgIGdvdG8gZXJyb3I7CisgICAgX1B5VW5pY29kZVdyaXRlcl9Jbml0KCZ3cml0ZXIpOworICAgIHdyaXRlci5vdmVyYWxsb2NhdGUgPSAxOworICAgIGlmIChQeV9TSVpFKHYpID4gMSkgeworICAgICAgICAvKiAiKCIgKyAiMSIgKyAiLCAyIiAqIChsZW4gLSAxKSArICIpIiAqLworICAgICAgICB3cml0ZXIubWluX2xlbmd0aCA9IDEgKyAxICsgKDIgKyAxKSAqIChQeV9TSVpFKHYpIC0gMSkgKyAxOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgLyogIigxLCkiICovCisgICAgICAgIHdyaXRlci5taW5fbGVuZ3RoID0gNDsKKyAgICB9CiAKLSAgICBzID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoIigiKTsKLSAgICBpZiAocyA9PSBOVUxMIHx8IF9QeUFjY3VfQWNjdW11bGF0ZSgmYWNjLCBzKSkKKyAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUNoYXIoJndyaXRlciwgJygnKSA8IDApCiAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgUHlfQ0xFQVIocyk7CiAKICAgICAvKiBEbyByZXByKCkgb24gZWFjaCBlbGVtZW50LiAqLwogICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHsKKyAgICAgICAgUHlPYmplY3QgKnM7CisKKyAgICAgICAgaWYgKGkgPiAwKSB7CisgICAgICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUFTQ0lJU3RyaW5nKCZ3cml0ZXIsICIsICIsIDIpIDwgMCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICB9CisKICAgICAgICAgaWYgKFB5X0VudGVyUmVjdXJzaXZlQ2FsbCgiIHdoaWxlIGdldHRpbmcgdGhlIHJlcHIgb2YgYSB0dXBsZSIpKQogICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgcyA9IFB5T2JqZWN0X1JlcHIodi0+b2JfaXRlbVtpXSk7CiAgICAgICAgIFB5X0xlYXZlUmVjdXJzaXZlQ2FsbCgpOwotICAgICAgICBpZiAoaSA+IDAgJiYgX1B5QWNjdV9BY2N1bXVsYXRlKCZhY2MsIHNlcCkpCisgICAgICAgIGlmIChzID09IE5VTEwpCiAgICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICBpZiAocyA9PSBOVUxMIHx8IF9QeUFjY3VfQWNjdW11bGF0ZSgmYWNjLCBzKSkKKworICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZVN0cigmd3JpdGVyLCBzKSA8IDApIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihzKTsKICAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgIFB5X0NMRUFSKHMpOworICAgICAgICB9CisgICAgICAgIFB5X0RFQ1JFRihzKTsKICAgICB9Ci0gICAgaWYgKG4gPiAxKQotICAgICAgICBzID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoIikiKTsKLSAgICBlbHNlCi0gICAgICAgIHMgPSBQeVVuaWNvZGVfRnJvbVN0cmluZygiLCkiKTsKLSAgICBpZiAocyA9PSBOVUxMIHx8IF9QeUFjY3VfQWNjdW11bGF0ZSgmYWNjLCBzKSkKLSAgICAgICAgZ290byBlcnJvcjsKLSAgICBQeV9DTEVBUihzKTsKKworICAgIHdyaXRlci5vdmVyYWxsb2NhdGUgPSAwOworICAgIGlmIChuID4gMSkgeworICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUNoYXIoJndyaXRlciwgJyknKSA8IDApCisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVBU0NJSVN0cmluZygmd3JpdGVyLCAiLCkiLCAyKSA8IDApCisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgIH0KIAogICAgIFB5X1JlcHJMZWF2ZSgoUHlPYmplY3QgKil2KTsKLSAgICByZXR1cm4gX1B5QWNjdV9GaW5pc2goJmFjYyk7CisgICAgcmV0dXJuIF9QeVVuaWNvZGVXcml0ZXJfRmluaXNoKCZ3cml0ZXIpOwogCiBlcnJvcjoKLSAgICBfUHlBY2N1X0Rlc3Ryb3koJmFjYyk7Ci0gICAgUHlfWERFQ1JFRihzKTsKKyAgICBfUHlVbmljb2RlV3JpdGVyX0RlYWxsb2MoJndyaXRlcik7CiAgICAgUHlfUmVwckxlYXZlKChQeU9iamVjdCAqKXYpOwogICAgIHJldHVybiBOVUxMOwogfQpAQCAtMzIyLDE1ICszMzIsMTggQEAKIAogICAgICAxMDgyNTI3LCAxMTY1MDQ5LCAxMDgyNTMxLCAxMTY1MDU3LCAxMjQ3NTgxLCAxMzMwMTAzLCAxMDgyNTMzLAogICAgICAxMzMwMTExLCAxNDEyNjMzLCAxMTY1MDY5LCAxMjQ3NTk5LCAxNDk1MTc3LCAxNTc3Njk5CisKKyAgIFRlc3RzIGhhdmUgc2hvd24gdGhhdCBpdCdzIG5vdCB3b3J0aCB0byBjYWNoZSB0aGUgaGFzaCB2YWx1ZSwgc2VlCisgICBpc3N1ZSAjOTY4NS4KICovCiAKIHN0YXRpYyBQeV9oYXNoX3QKIHR1cGxlaGFzaChQeVR1cGxlT2JqZWN0ICp2KQogewotICAgIHJlZ2lzdGVyIFB5X3VoYXNoX3QgeDsgIC8qIFVuc2lnbmVkIGZvciBkZWZpbmVkIG92ZXJmbG93IGJlaGF2aW9yLiAqLwotICAgIHJlZ2lzdGVyIFB5X2hhc2hfdCB5OwotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgbGVuID0gUHlfU0laRSh2KTsKLSAgICByZWdpc3RlciBQeU9iamVjdCAqKnA7CisgICAgUHlfdWhhc2hfdCB4OyAgLyogVW5zaWduZWQgZm9yIGRlZmluZWQgb3ZlcmZsb3cgYmVoYXZpb3IuICovCisgICAgUHlfaGFzaF90IHk7CisgICAgUHlfc3NpemVfdCBsZW4gPSBQeV9TSVpFKHYpOworICAgIFB5T2JqZWN0ICoqcDsKICAgICBQeV91aGFzaF90IG11bHQgPSBfUHlIQVNIX01VTFRJUExJRVI7CiAgICAgeCA9IDB4MzQ1Njc4VUw7CiAgICAgcCA9IHYtPm9iX2l0ZW07CkBAIC0zNjcsNyArMzgwLDcgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKLXR1cGxlaXRlbShyZWdpc3RlciBQeVR1cGxlT2JqZWN0ICphLCByZWdpc3RlciBQeV9zc2l6ZV90IGkpCit0dXBsZWl0ZW0oUHlUdXBsZU9iamVjdCAqYSwgUHlfc3NpemVfdCBpKQogewogICAgIGlmIChpIDwgMCB8fCBpID49IFB5X1NJWkUoYSkpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0luZGV4RXJyb3IsICJ0dXBsZSBpbmRleCBvdXQgb2YgcmFuZ2UiKTsKQEAgLTM3OCwxMiArMzkxLDEyIEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi10dXBsZXNsaWNlKHJlZ2lzdGVyIFB5VHVwbGVPYmplY3QgKmEsIHJlZ2lzdGVyIFB5X3NzaXplX3QgaWxvdywKLSAgICAgICAgICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBpaGlnaCkKK3R1cGxlc2xpY2UoUHlUdXBsZU9iamVjdCAqYSwgUHlfc3NpemVfdCBpbG93LAorICAgICAgICAgICBQeV9zc2l6ZV90IGloaWdoKQogewotICAgIHJlZ2lzdGVyIFB5VHVwbGVPYmplY3QgKm5wOworICAgIFB5VHVwbGVPYmplY3QgKm5wOwogICAgIFB5T2JqZWN0ICoqc3JjLCAqKmRlc3Q7Ci0gICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBpOworICAgIFB5X3NzaXplX3QgaTsKICAgICBQeV9zc2l6ZV90IGxlbjsKICAgICBpZiAoaWxvdyA8IDApCiAgICAgICAgIGlsb3cgPSAwOwpAQCAtNDIwLDEwICs0MzMsMTAgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKLXR1cGxlY29uY2F0KHJlZ2lzdGVyIFB5VHVwbGVPYmplY3QgKmEsIHJlZ2lzdGVyIFB5T2JqZWN0ICpiYikKK3R1cGxlY29uY2F0KFB5VHVwbGVPYmplY3QgKmEsIFB5T2JqZWN0ICpiYikKIHsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IHNpemU7Ci0gICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBpOworICAgIFB5X3NzaXplX3Qgc2l6ZTsKKyAgICBQeV9zc2l6ZV90IGk7CiAgICAgUHlPYmplY3QgKipzcmMsICoqZGVzdDsKICAgICBQeVR1cGxlT2JqZWN0ICpucDsKICAgICBpZiAoIVB5VHVwbGVfQ2hlY2soYmIpKSB7CkBAIC03NDYsMjcgKzc1OSwxNSBAQAogCiB9CiAKLXN0YXRpYyBQeU9iamVjdCAqCi10dXBsZV9zaXplb2YoUHlUdXBsZU9iamVjdCAqc2VsZikKLXsKLSAgICBQeV9zc2l6ZV90IHJlczsKLQotICAgIHJlcyA9IFB5VHVwbGVfVHlwZS50cF9iYXNpY3NpemUgKyBQeV9TSVpFKHNlbGYpICogc2l6ZW9mKFB5T2JqZWN0ICopOwotICAgIHJldHVybiBQeUxvbmdfRnJvbVNzaXplX3QocmVzKTsKLX0KLQogUHlEb2NfU1RSVkFSKGluZGV4X2RvYywKICJULmluZGV4KHZhbHVlLCBbc3RhcnQsIFtzdG9wXV0pIC0+IGludGVnZXIgLS0gcmV0dXJuIGZpcnN0IGluZGV4IG9mIHZhbHVlLlxuIgogIlJhaXNlcyBWYWx1ZUVycm9yIGlmIHRoZSB2YWx1ZSBpcyBub3QgcHJlc2VudC4iCiApOwogUHlEb2NfU1RSVkFSKGNvdW50X2RvYywKICJULmNvdW50KHZhbHVlKSAtPiBpbnRlZ2VyIC0tIHJldHVybiBudW1iZXIgb2Ygb2NjdXJyZW5jZXMgb2YgdmFsdWUiKTsKLVB5RG9jX1NUUlZBUihzaXplb2ZfZG9jLAotIlQuX19zaXplb2ZfXygpIC0tIHNpemUgb2YgVCBpbiBtZW1vcnksIGluIGJ5dGVzIik7CiAKIHN0YXRpYyBQeU1ldGhvZERlZiB0dXBsZV9tZXRob2RzW10gPSB7CiAgICAgeyJfX2dldG5ld2FyZ3NfXyIsICAgICAgICAgIChQeUNGdW5jdGlvbil0dXBsZV9nZXRuZXdhcmdzLCAgTUVUSF9OT0FSR1N9LAotICAgIHsiX19zaXplb2ZfXyIsICAgICAgKFB5Q0Z1bmN0aW9uKXR1cGxlX3NpemVvZiwgTUVUSF9OT0FSR1MsIHNpemVvZl9kb2N9LAogICAgIHsiaW5kZXgiLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKXR1cGxlaW5kZXgsICBNRVRIX1ZBUkFSR1MsIGluZGV4X2RvY30sCiAgICAgeyJjb3VudCIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pdHVwbGVjb3VudCwgIE1FVEhfTywgY291bnRfZG9jfSwKICAgICB7TlVMTCwgICAgICAgICAgICAgIE5VTEx9ICAgICAgICAgICAvKiBzZW50aW5lbCAqLwpAQCAtODMzLDggKzgzNCw4IEBACiBpbnQKIF9QeVR1cGxlX1Jlc2l6ZShQeU9iamVjdCAqKnB2LCBQeV9zc2l6ZV90IG5ld3NpemUpCiB7Ci0gICAgcmVnaXN0ZXIgUHlUdXBsZU9iamVjdCAqdjsKLSAgICByZWdpc3RlciBQeVR1cGxlT2JqZWN0ICpzdjsKKyAgICBQeVR1cGxlT2JqZWN0ICp2OworICAgIFB5VHVwbGVPYmplY3QgKnN2OwogICAgIFB5X3NzaXplX3QgaTsKICAgICBQeV9zc2l6ZV90IG9sZHNpemU7CiAKQEAgLTkyNSw3ICs5MjYsNyBAQAogCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgUHlPYmplY3RfSEVBRAotICAgIGxvbmcgaXRfaW5kZXg7CisgICAgUHlfc3NpemVfdCBpdF9pbmRleDsKICAgICBQeVR1cGxlT2JqZWN0ICppdF9zZXE7IC8qIFNldCB0byBOVUxMIHdoZW4gaXRlcmF0b3IgaXMgZXhoYXVzdGVkICovCiB9IHR1cGxlaXRlcm9iamVjdDsKIApAQCAtOTgzLDcgKzk4NCw3IEBACiB0dXBsZWl0ZXJfcmVkdWNlKHR1cGxlaXRlcm9iamVjdCAqaXQpCiB7CiAgICAgaWYgKGl0LT5pdF9zZXEpCi0gICAgICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJOKE8pbCIsIF9QeU9iamVjdF9HZXRCdWlsdGluKCJpdGVyIiksCisgICAgICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJOKE8pbiIsIF9QeU9iamVjdF9HZXRCdWlsdGluKCJpdGVyIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0LT5pdF9zZXEsIGl0LT5pdF9pbmRleCk7CiAgICAgZWxzZQogICAgICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiTigoKSkiLCBfUHlPYmplY3RfR2V0QnVpbHRpbigiaXRlciIpKTsKQEAgLTk5Miw3ICs5OTMsNyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIHR1cGxlaXRlcl9zZXRzdGF0ZSh0dXBsZWl0ZXJvYmplY3QgKml0LCBQeU9iamVjdCAqc3RhdGUpCiB7Ci0gICAgbG9uZyBpbmRleCA9IFB5TG9uZ19Bc0xvbmcoc3RhdGUpOworICAgIFB5X3NzaXplX3QgaW5kZXggPSBQeUxvbmdfQXNTc2l6ZV90KHN0YXRlKTsKICAgICBpZiAoaW5kZXggPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgaWYgKGl0LT5pdF9zZXEgIT0gTlVMTCkgewpkaWZmIC0tZ2l0IGEvT2JqZWN0cy90eXBlb2JqZWN0LmMgYi9PYmplY3RzL3R5cGVvYmplY3QuYwppbmRleCA4ODUxZmFlLi5jYTUzNTVhIDEwMDY0NAotLS0gYS9PYmplY3RzL3R5cGVvYmplY3QuYworKysgYi9PYmplY3RzL3R5cGVvYmplY3QuYwpAQCAtMzUsMTkgKzM1LDEyNyBAQAogc3RhdGljIHN0cnVjdCBtZXRob2RfY2FjaGVfZW50cnkgbWV0aG9kX2NhY2hlWzEgPDwgTUNBQ0hFX1NJWkVfRVhQXTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgbmV4dF92ZXJzaW9uX3RhZyA9IDA7CiAKKy8qIGFscGhhYmV0aWNhbCBvcmRlciAqLworX1B5X0lERU5USUZJRVIoX19hYnN0cmFjdG1ldGhvZHNfXyk7CiBfUHlfSURFTlRJRklFUihfX2NsYXNzX18pOworX1B5X0lERU5USUZJRVIoX19kZWxpdGVtX18pOwogX1B5X0lERU5USUZJRVIoX19kaWN0X18pOwogX1B5X0lERU5USUZJRVIoX19kb2NfXyk7Ci1fUHlfSURFTlRJRklFUihfX2dldGl0ZW1fXyk7CiBfUHlfSURFTlRJRklFUihfX2dldGF0dHJpYnV0ZV9fKTsKK19QeV9JREVOVElGSUVSKF9fZ2V0aXRlbV9fKTsKIF9QeV9JREVOVElGSUVSKF9faGFzaF9fKTsKK19QeV9JREVOVElGSUVSKF9fbGVuX18pOwogX1B5X0lERU5USUZJRVIoX19tb2R1bGVfXyk7CiBfUHlfSURFTlRJRklFUihfX25hbWVfXyk7CiBfUHlfSURFTlRJRklFUihfX25ld19fKTsKK19QeV9JREVOVElGSUVSKF9fc2V0aXRlbV9fKTsKK19QeV9JREVOVElGSUVSKGJ1aWx0aW5zKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKIHNsb3RfdHBfbmV3KFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKTsKIAorLyoKKyAqIGZpbmRzIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGRvY3N0cmluZydzIGludHJvc3BlY3Rpb24gc2lnbmF0dXJlLgorICogaWYgcHJlc2VudCwgcmV0dXJucyBhIHBvaW50ZXIgcG9pbnRpbmcgdG8gdGhlIGZpcnN0ICcoJy4KKyAqIG90aGVyd2lzZSByZXR1cm5zIE5VTEwuCisgKgorICogZG9lc24ndCBndWFyYW50ZWUgdGhhdCB0aGUgc2lnbmF0dXJlIGlzIHZhbGlkLCBvbmx5IHRoYXQgaXQKKyAqIGhhcyBhIHZhbGlkIHByZWZpeC4gICh0aGUgc2lnbmF0dXJlIG11c3QgYWxzbyBwYXNzIHNraXBfc2lnbmF0dXJlLikKKyAqLworc3RhdGljIGNvbnN0IGNoYXIgKgorZmluZF9zaWduYXR1cmUoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqZG9jKQoreworICAgIGNvbnN0IGNoYXIgKmRvdDsKKyAgICBzaXplX3QgbGVuZ3RoOworCisgICAgaWYgKCFkb2MpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgYXNzZXJ0KG5hbWUgIT0gTlVMTCk7CisKKyAgICAvKiBmb3IgZG90dGVkIG5hbWVzIGxpa2UgY2xhc3Nlcywgb25seSB1c2UgdGhlIGxhc3QgY29tcG9uZW50ICovCisgICAgZG90ID0gc3RycmNocihuYW1lLCAnLicpOworICAgIGlmIChkb3QpCisgICAgICAgIG5hbWUgPSBkb3QgKyAxOworCisgICAgbGVuZ3RoID0gc3RybGVuKG5hbWUpOworICAgIGlmIChzdHJuY21wKGRvYywgbmFtZSwgbGVuZ3RoKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgZG9jICs9IGxlbmd0aDsKKyAgICBpZiAoKmRvYyAhPSAnKCcpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHJldHVybiBkb2M7Cit9CisKKyNkZWZpbmUgU0lHTkFUVVJFX0VORF9NQVJLRVIgICAgICAgICAiKVxuLS1cblxuIgorI2RlZmluZSBTSUdOQVRVUkVfRU5EX01BUktFUl9MRU5HVEggIDYKKy8qCisgKiBza2lwcyBwYXN0IHRoZSBlbmQgb2YgdGhlIGRvY3N0cmluZydzIGluc3Ryb3NwZWN0aW9uIHNpZ25hdHVyZS4KKyAqIChhc3N1bWVzIGRvYyBzdGFydHMgd2l0aCBhIHZhbGlkIHNpZ25hdHVyZSBwcmVmaXguKQorICovCitzdGF0aWMgY29uc3QgY2hhciAqCitza2lwX3NpZ25hdHVyZShjb25zdCBjaGFyICpkb2MpCit7CisgICAgd2hpbGUgKCpkb2MpIHsKKyAgICAgICAgaWYgKCgqZG9jID09ICpTSUdOQVRVUkVfRU5EX01BUktFUikgJiYKKyAgICAgICAgICAgICFzdHJuY21wKGRvYywgU0lHTkFUVVJFX0VORF9NQVJLRVIsIFNJR05BVFVSRV9FTkRfTUFSS0VSX0xFTkdUSCkpCisgICAgICAgICAgICByZXR1cm4gZG9jICsgU0lHTkFUVVJFX0VORF9NQVJLRVJfTEVOR1RIOworICAgICAgICBpZiAoKCpkb2MgPT0gJ1xuJykgJiYgKGRvY1sxXSA9PSAnXG4nKSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBkb2MrKzsKKyAgICB9CisgICAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICoKK19QeVR5cGVfRG9jV2l0aG91dFNpZ25hdHVyZShjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICppbnRlcm5hbF9kb2MpCit7CisgICAgY29uc3QgY2hhciAqZG9jID0gZmluZF9zaWduYXR1cmUobmFtZSwgaW50ZXJuYWxfZG9jKTsKKworICAgIGlmIChkb2MpIHsKKyAgICAgICAgZG9jID0gc2tpcF9zaWduYXR1cmUoZG9jKTsKKyAgICAgICAgaWYgKGRvYykKKyAgICAgICAgICAgIHJldHVybiBkb2M7CisgICAgICAgIH0KKyAgICByZXR1cm4gaW50ZXJuYWxfZG9jOworfQorCitQeU9iamVjdCAqCitfUHlUeXBlX0dldERvY0Zyb21JbnRlcm5hbERvYyhjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICppbnRlcm5hbF9kb2MpCit7CisgICAgY29uc3QgY2hhciAqZG9jID0gX1B5VHlwZV9Eb2NXaXRob3V0U2lnbmF0dXJlKG5hbWUsIGludGVybmFsX2RvYyk7CisKKyAgICBpZiAoIWRvYykgeworICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CisgICAgICAgIHJldHVybiBQeV9Ob25lOworICAgIH0KKworICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZyhkb2MpOworfQorCitQeU9iamVjdCAqCitfUHlUeXBlX0dldFRleHRTaWduYXR1cmVGcm9tSW50ZXJuYWxEb2MoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqaW50ZXJuYWxfZG9jKQoreworICAgIGNvbnN0IGNoYXIgKnN0YXJ0ID0gZmluZF9zaWduYXR1cmUobmFtZSwgaW50ZXJuYWxfZG9jKTsKKyAgICBjb25zdCBjaGFyICplbmQ7CisKKyAgICBpZiAoc3RhcnQpCisgICAgICAgIGVuZCA9IHNraXBfc2lnbmF0dXJlKHN0YXJ0KTsKKyAgICBlbHNlCisgICAgICAgIGVuZCA9IE5VTEw7CisgICAgaWYgKCFlbmQpIHsKKyAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOworICAgICAgICByZXR1cm4gUHlfTm9uZTsKKyAgICB9CisKKyAgICAvKiBiYWNrICJlbmQiIHVwIHVudGlsIGl0IHBvaW50cyBqdXN0IHBhc3QgdGhlIGZpbmFsICcpJyAqLworICAgIGVuZCAtPSBTSUdOQVRVUkVfRU5EX01BUktFUl9MRU5HVEggLSAxOworICAgIGFzc2VydCgoZW5kIC0gc3RhcnQpID49IDIpOyAvKiBzaG91bGQgYmUgIigpIiBhdCBsZWFzdCAqLworICAgIGFzc2VydChlbmRbLTFdID09ICcpJyk7CisgICAgYXNzZXJ0KGVuZFswXSA9PSAnXG4nKTsKKyAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmdBbmRTaXplKHN0YXJ0LCBlbmQgLSBzdGFydCk7Cit9CisKIHVuc2lnbmVkIGludAogUHlUeXBlX0NsZWFyQ2FjaGUodm9pZCkKIHsKQEAgLTk0LDE2ICsyMDIsMTcgQEAKICAgICAgICBuZWVkZWQuCiAgICAgICovCiAgICAgUHlPYmplY3QgKnJhdywgKnJlZjsKLSAgICBQeV9zc2l6ZV90IGksIG47CisgICAgUHlfc3NpemVfdCBpOwogCiAgICAgaWYgKCFQeVR5cGVfSGFzRmVhdHVyZSh0eXBlLCBQeV9UUEZMQUdTX1ZBTElEX1ZFUlNJT05fVEFHKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgcmF3ID0gdHlwZS0+dHBfc3ViY2xhc3NlczsKICAgICBpZiAocmF3ICE9IE5VTEwpIHsKLSAgICAgICAgbiA9IFB5TGlzdF9HRVRfU0laRShyYXcpOwotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0gICAgICAgICAgICByZWYgPSBQeUxpc3RfR0VUX0lURU0ocmF3LCBpKTsKKyAgICAgICAgYXNzZXJ0KFB5RGljdF9DaGVja0V4YWN0KHJhdykpOworICAgICAgICBpID0gMDsKKyAgICAgICAgd2hpbGUgKFB5RGljdF9OZXh0KHJhdywgJmksIE5VTEwsICZyZWYpKSB7CisgICAgICAgICAgICBhc3NlcnQoUHlXZWFrcmVmX0NoZWNrUmVmKHJlZikpOwogICAgICAgICAgICAgcmVmID0gUHlXZWFrcmVmX0dFVF9PQkpFQ1QocmVmKTsKICAgICAgICAgICAgIGlmIChyZWYgIT0gUHlfTm9uZSkgewogICAgICAgICAgICAgICAgIFB5VHlwZV9Nb2RpZmllZCgoUHlUeXBlT2JqZWN0ICopcmVmKTsKQEAgLTMzNiwxMSArNDQ1LDEwIEBACiBzdGF0aWMgUHlPYmplY3QgKgogdHlwZV9tb2R1bGUoUHlUeXBlT2JqZWN0ICp0eXBlLCB2b2lkICpjb250ZXh0KQogewotICAgIFB5T2JqZWN0ICptb2Q7CiAgICAgY2hhciAqczsKIAogICAgIGlmICh0eXBlLT50cF9mbGFncyAmIFB5X1RQRkxBR1NfSEVBUFRZUEUpIHsKLSAgICAgICAgbW9kID0gX1B5RGljdF9HZXRJdGVtSWQodHlwZS0+dHBfZGljdCwgJlB5SWRfX19tb2R1bGVfXyk7CisgICAgICAgIFB5T2JqZWN0ICptb2QgPSBfUHlEaWN0X0dldEl0ZW1JZCh0eXBlLT50cF9kaWN0LCAmUHlJZF9fX21vZHVsZV9fKTsKICAgICAgICAgaWYgKCFtb2QpIHsKICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19BdHRyaWJ1dGVFcnJvciwgIl9fbW9kdWxlX18iKTsKICAgICAgICAgICAgIHJldHVybiAwOwpAQCAtMzQ5LDExICs0NTcsMTQgQEAKICAgICAgICAgcmV0dXJuIG1vZDsKICAgICB9CiAgICAgZWxzZSB7CisgICAgICAgIFB5T2JqZWN0ICpuYW1lOwogICAgICAgICBzID0gc3RycmNocih0eXBlLT50cF9uYW1lLCAnLicpOwogICAgICAgICBpZiAocyAhPSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nQW5kU2l6ZSgKICAgICAgICAgICAgICAgICB0eXBlLT50cF9uYW1lLCAoUHlfc3NpemVfdCkocyAtIHR5cGUtPnRwX25hbWUpKTsKLSAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nKCJidWlsdGlucyIpOworICAgICAgICBuYW1lID0gX1B5VW5pY29kZV9Gcm9tSWQoJlB5SWRfYnVpbHRpbnMpOworICAgICAgICBQeV9YSU5DUkVGKG5hbWUpOworICAgICAgICByZXR1cm4gbmFtZTsKICAgICB9CiB9CiAKQEAgLTM3NSw5ICs0ODYsMTEgQEAKICAgICAvKiB0eXBlIGl0c2VsZiBoYXMgYW4gX19hYnN0cmFjdG1ldGhvZHNfXyBkZXNjcmlwdG9yICh0aGlzKS4gRG9uJ3QgcmV0dXJuCiAgICAgICAgdGhhdC4gKi8KICAgICBpZiAodHlwZSAhPSAmUHlUeXBlX1R5cGUpCi0gICAgICAgIG1vZCA9IFB5RGljdF9HZXRJdGVtU3RyaW5nKHR5cGUtPnRwX2RpY3QsICJfX2Fic3RyYWN0bWV0aG9kc19fIik7CisgICAgICAgIG1vZCA9IF9QeURpY3RfR2V0SXRlbUlkKHR5cGUtPnRwX2RpY3QsICZQeUlkX19fYWJzdHJhY3RtZXRob2RzX18pOwogICAgIGlmICghbW9kKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19BdHRyaWJ1dGVFcnJvciwgIl9fYWJzdHJhY3RtZXRob2RzX18iKTsKKyAgICAgICAgUHlPYmplY3QgKm1lc3NhZ2UgPSBfUHlVbmljb2RlX0Zyb21JZCgmUHlJZF9fX2Fic3RyYWN0bWV0aG9kc19fKTsKKyAgICAgICAgaWYgKG1lc3NhZ2UpCisgICAgICAgICAgICBQeUVycl9TZXRPYmplY3QoUHlFeGNfQXR0cmlidXRlRXJyb3IsIG1lc3NhZ2UpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgUHlfWElOQ1JFRihtb2QpOwpAQCAtMzk2LDEzICs1MDksMTUgQEAKICAgICAgICAgYWJzdHJhY3QgPSBQeU9iamVjdF9Jc1RydWUodmFsdWUpOwogICAgICAgICBpZiAoYWJzdHJhY3QgPCAwKQogICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICByZXMgPSBQeURpY3RfU2V0SXRlbVN0cmluZyh0eXBlLT50cF9kaWN0LCAiX19hYnN0cmFjdG1ldGhvZHNfXyIsIHZhbHVlKTsKKyAgICAgICAgcmVzID0gX1B5RGljdF9TZXRJdGVtSWQodHlwZS0+dHBfZGljdCwgJlB5SWRfX19hYnN0cmFjdG1ldGhvZHNfXywgdmFsdWUpOwogICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgYWJzdHJhY3QgPSAwOwotICAgICAgICByZXMgPSBQeURpY3RfRGVsSXRlbVN0cmluZyh0eXBlLT50cF9kaWN0LCAiX19hYnN0cmFjdG1ldGhvZHNfXyIpOworICAgICAgICByZXMgPSBfUHlEaWN0X0RlbEl0ZW1JZCh0eXBlLT50cF9kaWN0LCAmUHlJZF9fX2Fic3RyYWN0bWV0aG9kc19fKTsKICAgICAgICAgaWYgKHJlcyAmJiBQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0tleUVycm9yKSkgewotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0F0dHJpYnV0ZUVycm9yLCAiX19hYnN0cmFjdG1ldGhvZHNfXyIpOworICAgICAgICAgICAgUHlPYmplY3QgKm1lc3NhZ2UgPSBfUHlVbmljb2RlX0Zyb21JZCgmUHlJZF9fX2Fic3RyYWN0bWV0aG9kc19fKTsKKyAgICAgICAgICAgIGlmIChtZXNzYWdlKQorICAgICAgICAgICAgICAgIFB5RXJyX1NldE9iamVjdChQeUV4Y19BdHRyaWJ1dGVFcnJvciwgbWVzc2FnZSk7CiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KICAgICB9CkBAIC00MjQsMTAgKzUzOSwxMyBAQAogfQogCiBzdGF0aWMgUHlUeXBlT2JqZWN0ICpiZXN0X2Jhc2UoUHlPYmplY3QgKik7Ci1zdGF0aWMgaW50IG1yb19pbnRlcm5hbChQeVR5cGVPYmplY3QgKik7CitzdGF0aWMgaW50IG1yb19pbnRlcm5hbChQeVR5cGVPYmplY3QgKiwgUHlPYmplY3QgKiopOworUHlfTE9DQUxfSU5MSU5FKGludCkgdHlwZV9pc19zdWJ0eXBlX2Jhc2VfY2hhaW4oUHlUeXBlT2JqZWN0ICosIFB5VHlwZU9iamVjdCAqKTsKIHN0YXRpYyBpbnQgY29tcGF0aWJsZV9mb3JfYXNzaWdubWVudChQeVR5cGVPYmplY3QgKiwgUHlUeXBlT2JqZWN0ICosIGNoYXIgKik7CiBzdGF0aWMgaW50IGFkZF9zdWJjbGFzcyhQeVR5cGVPYmplY3QqLCBQeVR5cGVPYmplY3QqKTsKK3N0YXRpYyBpbnQgYWRkX2FsbF9zdWJjbGFzc2VzKFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKmJhc2VzKTsKIHN0YXRpYyB2b2lkIHJlbW92ZV9zdWJjbGFzcyhQeVR5cGVPYmplY3QgKiwgUHlUeXBlT2JqZWN0ICopOworc3RhdGljIHZvaWQgcmVtb3ZlX2FsbF9zdWJjbGFzc2VzKFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKmJhc2VzKTsKIHN0YXRpYyB2b2lkIHVwZGF0ZV9hbGxfc2xvdHMoUHlUeXBlT2JqZWN0ICopOwogCiB0eXBlZGVmIGludCAoKnVwZGF0ZV9jYWxsYmFjaykoUHlUeXBlT2JqZWN0ICosIHZvaWQgKik7CkBAIC00MzUsMTczICs1NTMsMTk0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZV9jYWxsYmFjayBjYWxsYmFjaywgdm9pZCAqZGF0YSk7CiBzdGF0aWMgaW50IHJlY3Vyc2VfZG93bl9zdWJjbGFzc2VzKFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZV9jYWxsYmFjayBjYWxsYmFjaywgdm9pZCAqZGF0YSk7CitzdGF0aWMgUHlPYmplY3QgKnR5cGVfc3ViY2xhc3NlcyhQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICppZ25vcmVkKTsKIAogc3RhdGljIGludAotbXJvX3N1YmNsYXNzZXMoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCogdGVtcCkKK21yb19oaWVyYXJjaHkoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqdGVtcCkKIHsKLSAgICBQeVR5cGVPYmplY3QgKnN1YmNsYXNzOwotICAgIFB5T2JqZWN0ICpyZWYsICpzdWJjbGFzc2VzLCAqb2xkX21ybzsKKyAgICBpbnQgcmVzOworICAgIFB5T2JqZWN0ICpuZXdfbXJvLCAqb2xkX21ybzsKKyAgICBQeU9iamVjdCAqdHVwbGU7CisgICAgUHlPYmplY3QgKnN1YmNsYXNzZXM7CiAgICAgUHlfc3NpemVfdCBpLCBuOwogCi0gICAgc3ViY2xhc3NlcyA9IHR5cGUtPnRwX3N1YmNsYXNzZXM7CisgICAgcmVzID0gbXJvX2ludGVybmFsKHR5cGUsICZvbGRfbXJvKTsKKyAgICBpZiAocmVzIDw9IDApCisgICAgICAgIC8qIGVycm9yIC8gcmVlbnRyYW5jZSAqLworICAgICAgICByZXR1cm4gcmVzOworICAgIG5ld19tcm8gPSB0eXBlLT50cF9tcm87CisKKyAgICBpZiAob2xkX21ybyAhPSBOVUxMKQorICAgICAgICB0dXBsZSA9IFB5VHVwbGVfUGFjaygzLCB0eXBlLCBuZXdfbXJvLCBvbGRfbXJvKTsKKyAgICBlbHNlCisgICAgICAgIHR1cGxlID0gUHlUdXBsZV9QYWNrKDIsIHR5cGUsIG5ld19tcm8pOworCisgICAgaWYgKHR1cGxlICE9IE5VTEwpCisgICAgICAgIHJlcyA9IFB5TGlzdF9BcHBlbmQodGVtcCwgdHVwbGUpOworICAgIGVsc2UKKyAgICAgICAgcmVzID0gLTE7CisgICAgUHlfWERFQ1JFRih0dXBsZSk7CisKKyAgICBpZiAocmVzIDwgMCkgeworICAgICAgICB0eXBlLT50cF9tcm8gPSBvbGRfbXJvOworICAgICAgICBQeV9ERUNSRUYobmV3X21ybyk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgUHlfWERFQ1JFRihvbGRfbXJvKTsKKworICAgIC8qIE9idGFpbiBhIGNvcHkgb2Ygc3ViY2xhc3NlcyBsaXN0IHRvIGl0ZXJhdGUgb3Zlci4KKworICAgICAgIE90aGVyd2lzZSB0eXBlLT50cF9zdWJjbGFzc2VzIG1pZ2h0IGJlIGFsdGVyZWQKKyAgICAgICBpbiB0aGUgbWlkZGxlIG9mIHRoZSBsb29wLCBmb3IgZXhhbXBsZSwgdGhyb3VnaCBhIGN1c3RvbSBtcm8oKSwKKyAgICAgICBieSBpbnZva2luZyB0eXBlX3NldF9iYXNlcyBvbiBzb21lIHN1YmNsYXNzIG9mIHRoZSB0eXBlCisgICAgICAgd2hpY2ggaW4gdHVybiBjYWxscyByZW1vdmVfc3ViY2xhc3MvYWRkX3N1YmNsYXNzIG9uIHRoaXMgdHlwZS4KKworICAgICAgIEZpbmFsbHksIHRoaXMgbWFrZXMgdGhpbmdzIHNpbXBsZSBhdm9pZGluZyB0aGUgbmVlZCB0byBkZWFsCisgICAgICAgd2l0aCBkaWN0aW9uYXJ5IGl0ZXJhdG9ycyBhbmQgd2VhayByZWZlcmVuY2VzLgorICAgICovCisgICAgc3ViY2xhc3NlcyA9IHR5cGVfc3ViY2xhc3Nlcyh0eXBlLCBOVUxMKTsKICAgICBpZiAoc3ViY2xhc3NlcyA9PSBOVUxMKQotICAgICAgICByZXR1cm4gMDsKLSAgICBhc3NlcnQoUHlMaXN0X0NoZWNrKHN1YmNsYXNzZXMpKTsKKyAgICAgICAgcmV0dXJuIC0xOwogICAgIG4gPSBQeUxpc3RfR0VUX1NJWkUoc3ViY2xhc3Nlcyk7CiAgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotICAgICAgICByZWYgPSBQeUxpc3RfR0VUX0lURU0oc3ViY2xhc3NlcywgaSk7Ci0gICAgICAgIGFzc2VydChQeVdlYWtyZWZfQ2hlY2tSZWYocmVmKSk7Ci0gICAgICAgIHN1YmNsYXNzID0gKFB5VHlwZU9iamVjdCAqKVB5V2Vha3JlZl9HRVRfT0JKRUNUKHJlZik7Ci0gICAgICAgIGFzc2VydChzdWJjbGFzcyAhPSBOVUxMKTsKLSAgICAgICAgaWYgKChQeU9iamVjdCAqKXN1YmNsYXNzID09IFB5X05vbmUpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgYXNzZXJ0KFB5VHlwZV9DaGVjayhzdWJjbGFzcykpOwotICAgICAgICBvbGRfbXJvID0gc3ViY2xhc3MtPnRwX21ybzsKLSAgICAgICAgaWYgKG1yb19pbnRlcm5hbChzdWJjbGFzcykgPCAwKSB7Ci0gICAgICAgICAgICBzdWJjbGFzcy0+dHBfbXJvID0gb2xkX21ybzsKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIFB5T2JqZWN0KiB0dXBsZTsKLSAgICAgICAgICAgIHR1cGxlID0gUHlUdXBsZV9QYWNrKDIsIHN1YmNsYXNzLCBvbGRfbXJvKTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihvbGRfbXJvKTsKLSAgICAgICAgICAgIGlmICghdHVwbGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgaWYgKFB5TGlzdF9BcHBlbmQodGVtcCwgdHVwbGUpIDwgMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodHVwbGUpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtcm9fc3ViY2xhc3NlcyhzdWJjbGFzcywgdGVtcCkgPCAwKQotICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICBQeVR5cGVPYmplY3QgKnN1YmNsYXNzOworICAgICAgICBzdWJjbGFzcyA9IChQeVR5cGVPYmplY3QgKilQeUxpc3RfR0VUX0lURU0oc3ViY2xhc3NlcywgaSk7CisgICAgICAgIHJlcyA9IG1yb19oaWVyYXJjaHkoc3ViY2xhc3MsIHRlbXApOworICAgICAgICBpZiAocmVzIDwgMCkKKyAgICAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICByZXR1cm4gMDsKKyAgICBQeV9ERUNSRUYoc3ViY2xhc3Nlcyk7CisKKyAgICByZXR1cm4gcmVzOwogfQogCiBzdGF0aWMgaW50Ci10eXBlX3NldF9iYXNlcyhQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICp2YWx1ZSwgdm9pZCAqY29udGV4dCkKK3R5cGVfc2V0X2Jhc2VzKFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKm5ld19iYXNlcywgdm9pZCAqY29udGV4dCkKIHsKLSAgICBQeV9zc2l6ZV90IGk7Ci0gICAgaW50IHIgPSAwOwotICAgIFB5T2JqZWN0ICpvYiwgKnRlbXA7CisgICAgaW50IHJlcyA9IDA7CisgICAgUHlPYmplY3QgKnRlbXA7CisgICAgUHlPYmplY3QgKm9sZF9iYXNlczsKICAgICBQeVR5cGVPYmplY3QgKm5ld19iYXNlLCAqb2xkX2Jhc2U7Ci0gICAgUHlPYmplY3QgKm9sZF9iYXNlcywgKm9sZF9tcm87CisgICAgUHlfc3NpemVfdCBpOwogCi0gICAgaWYgKCFjaGVja19zZXRfc3BlY2lhbF90eXBlX2F0dHIodHlwZSwgdmFsdWUsICJfX2Jhc2VzX18iKSkKKyAgICBpZiAoIWNoZWNrX3NldF9zcGVjaWFsX3R5cGVfYXR0cih0eXBlLCBuZXdfYmFzZXMsICJfX2Jhc2VzX18iKSkKICAgICAgICAgcmV0dXJuIC0xOwotICAgIGlmICghUHlUdXBsZV9DaGVjayh2YWx1ZSkpIHsKKyAgICBpZiAoIVB5VHVwbGVfQ2hlY2sobmV3X2Jhc2VzKSkgewogICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAogICAgICAgICAgICAgICJjYW4gb25seSBhc3NpZ24gdHVwbGUgdG8gJXMuX19iYXNlc19fLCBub3QgJXMiLAotICAgICAgICAgICAgICAgICB0eXBlLT50cF9uYW1lLCBQeV9UWVBFKHZhbHVlKS0+dHBfbmFtZSk7CisgICAgICAgICAgICAgICAgIHR5cGUtPnRwX25hbWUsIFB5X1RZUEUobmV3X2Jhc2VzKS0+dHBfbmFtZSk7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9Ci0gICAgaWYgKFB5VHVwbGVfR0VUX1NJWkUodmFsdWUpID09IDApIHsKKyAgICBpZiAoUHlUdXBsZV9HRVRfU0laRShuZXdfYmFzZXMpID09IDApIHsKICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKICAgICAgICAgICAgICAiY2FuIG9ubHkgYXNzaWduIG5vbi1lbXB0eSB0dXBsZSB0byAlcy5fX2Jhc2VzX18sIG5vdCAoKSIsCiAgICAgICAgICAgICAgICAgIHR5cGUtPnRwX25hbWUpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQotICAgIGZvciAoaSA9IDA7IGkgPCBQeVR1cGxlX0dFVF9TSVpFKHZhbHVlKTsgaSsrKSB7Ci0gICAgICAgIG9iID0gUHlUdXBsZV9HRVRfSVRFTSh2YWx1ZSwgaSk7CisgICAgZm9yIChpID0gMDsgaSA8IFB5VHVwbGVfR0VUX1NJWkUobmV3X2Jhc2VzKTsgaSsrKSB7CisgICAgICAgIFB5T2JqZWN0ICpvYjsKKyAgICAgICAgUHlUeXBlT2JqZWN0ICpiYXNlOworCisgICAgICAgIG9iID0gUHlUdXBsZV9HRVRfSVRFTShuZXdfYmFzZXMsIGkpOwogICAgICAgICBpZiAoIVB5VHlwZV9DaGVjayhvYikpIHsKICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzLl9fYmFzZXNfXyBtdXN0IGJlIHR1cGxlIG9mIGNsYXNzZXMsIG5vdCAnJXMnIiwKICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLT50cF9uYW1lLCBQeV9UWVBFKG9iKS0+dHBfbmFtZSk7CiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKFB5VHlwZV9Jc1N1YnR5cGUoKFB5VHlwZU9iamVjdCopb2IsIHR5cGUpKSB7CisKKyAgICAgICAgYmFzZSA9IChQeVR5cGVPYmplY3QqKW9iOworICAgICAgICBpZiAoUHlUeXBlX0lzU3VidHlwZShiYXNlLCB0eXBlKSB8fAorICAgICAgICAgICAgLyogSW4gY2FzZSBvZiByZWVudGVyaW5nIGhlcmUgYWdhaW4gdGhyb3VnaCBhIGN1c3RvbSBtcm8oKQorICAgICAgICAgICAgICAgdGhlIGFib3ZlIGNoZWNrIGlzIG5vdCBlbm91Z2ggc2luY2UgaXQgcmVsaWVzIG9uCisgICAgICAgICAgICAgICBiYXNlLT50cF9tcm8gd2hpY2ggd291bGQgZ29ubmEgYmUgdXBkYXRlZCBpbnNpZGUKKyAgICAgICAgICAgICAgIG1yb19pbnRlcm5hbCBvbmx5IHVwb24gcmV0dXJuaW5nIGZyb20gdGhlIG1ybygpLgorCisgICAgICAgICAgICAgICBIb3dldmVyLCBiYXNlLT50cF9iYXNlIGhhcyBhbHJlYWR5IGJlZW4gYXNzaWduZWQgKHNlZQorICAgICAgICAgICAgICAgYmVsb3cpLCB3aGljaCBpbiB0dXJuIG1heSBjYXVzZSBhbiBpbmhlcml0YW5jZSBjeWNsZQorICAgICAgICAgICAgICAgdGhyb3VnaCB0cF9iYXNlIGNoYWluLiAgQW5kIHRoaXMgaXMgZGVmaW5pdGVseQorICAgICAgICAgICAgICAgbm90IHdoYXQgeW91IHdhbnQgdG8gZXZlciBoYXBwZW4uICAqLworICAgICAgICAgICAgKGJhc2UtPnRwX21ybyAhPSBOVUxMICYmIHR5cGVfaXNfc3VidHlwZV9iYXNlX2NoYWluKGJhc2UsIHR5cGUpKSkgeworCiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhIF9fYmFzZXNfXyBpdGVtIGNhdXNlcyBhbiBpbmhlcml0YW5jZSBjeWNsZSIpOwogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9CiAgICAgfQogCi0gICAgbmV3X2Jhc2UgPSBiZXN0X2Jhc2UodmFsdWUpOwotCi0gICAgaWYgKCFuZXdfYmFzZSkKKyAgICBuZXdfYmFzZSA9IGJlc3RfYmFzZShuZXdfYmFzZXMpOworICAgIGlmIChuZXdfYmFzZSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gLTE7CiAKICAgICBpZiAoIWNvbXBhdGlibGVfZm9yX2Fzc2lnbm1lbnQodHlwZS0+dHBfYmFzZSwgbmV3X2Jhc2UsICJfX2Jhc2VzX18iKSkKICAgICAgICAgcmV0dXJuIC0xOwogCisgICAgUHlfSU5DUkVGKG5ld19iYXNlcyk7CiAgICAgUHlfSU5DUkVGKG5ld19iYXNlKTsKLSAgICBQeV9JTkNSRUYodmFsdWUpOwogCiAgICAgb2xkX2Jhc2VzID0gdHlwZS0+dHBfYmFzZXM7CiAgICAgb2xkX2Jhc2UgPSB0eXBlLT50cF9iYXNlOwotICAgIG9sZF9tcm8gPSB0eXBlLT50cF9tcm87CiAKLSAgICB0eXBlLT50cF9iYXNlcyA9IHZhbHVlOworICAgIHR5cGUtPnRwX2Jhc2VzID0gbmV3X2Jhc2VzOwogICAgIHR5cGUtPnRwX2Jhc2UgPSBuZXdfYmFzZTsKIAotICAgIGlmIChtcm9faW50ZXJuYWwodHlwZSkgPCAwKSB7Ci0gICAgICAgIGdvdG8gYmFpbDsKLSAgICB9Ci0KICAgICB0ZW1wID0gUHlMaXN0X05ldygwKTsKLSAgICBpZiAoIXRlbXApCisgICAgaWYgKHRlbXAgPT0gTlVMTCkKICAgICAgICAgZ290byBiYWlsOwotCi0gICAgciA9IG1yb19zdWJjbGFzc2VzKHR5cGUsIHRlbXApOwotCi0gICAgaWYgKHIgPCAwKSB7Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBQeUxpc3RfU2l6ZSh0ZW1wKTsgaSsrKSB7Ci0gICAgICAgICAgICBQeVR5cGVPYmplY3QqIGNsczsKLSAgICAgICAgICAgIFB5T2JqZWN0KiBtcm87Ci0gICAgICAgICAgICBQeUFyZ19VbnBhY2tUdXBsZShQeUxpc3RfR0VUX0lURU0odGVtcCwgaSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICIiLCAyLCAyLCAmY2xzLCAmbXJvKTsKLSAgICAgICAgICAgIFB5X0lOQ1JFRihtcm8pOwotICAgICAgICAgICAgb2IgPSBjbHMtPnRwX21ybzsKLSAgICAgICAgICAgIGNscy0+dHBfbXJvID0gbXJvOwotICAgICAgICAgICAgUHlfREVDUkVGKG9iKTsKLSAgICAgICAgfQotICAgICAgICBQeV9ERUNSRUYodGVtcCk7Ci0gICAgICAgIGdvdG8gYmFpbDsKLSAgICB9Ci0KKyAgICBpZiAobXJvX2hpZXJhcmNoeSh0eXBlLCB0ZW1wKSA8IDApCisgICAgICAgIGdvdG8gdW5kbzsKICAgICBQeV9ERUNSRUYodGVtcCk7CiAKLSAgICAvKiBhbnkgYmFzZSB0aGF0IHdhcyBpbiBfX2Jhc2VzX18gYnV0IG5vdyBpc24ndCwgd2UKLSAgICAgICBuZWVkIHRvIHJlbW92ZSB8dHlwZXwgZnJvbSBpdHMgdHBfc3ViY2xhc3Nlcy4KLSAgICAgICBjb252ZXJzZWx5LCBhbnkgY2xhc3Mgbm93IGluIF9fYmFzZXNfXyB0aGF0IHdhc24ndAotICAgICAgIG5lZWRzIHRvIGhhdmUgfHR5cGV8IGFkZGVkIHRvIGl0cyBzdWJjbGFzc2VzLiAqLworICAgIC8qIFRha2Ugbm8gYWN0aW9uIGluIGNhc2UgaWYgdHlwZS0+dHBfYmFzZXMgaGFzIGJlZW4gcmVwbGFjZWQKKyAgICAgICB0aHJvdWdoIHJlZW50cmFuY2UuICAqLworICAgIGlmICh0eXBlLT50cF9iYXNlcyA9PSBuZXdfYmFzZXMpIHsKKyAgICAgICAgLyogYW55IGJhc2UgdGhhdCB3YXMgaW4gX19iYXNlc19fIGJ1dCBub3cgaXNuJ3QsIHdlCisgICAgICAgICAgIG5lZWQgdG8gcmVtb3ZlIHx0eXBlfCBmcm9tIGl0cyB0cF9zdWJjbGFzc2VzLgorICAgICAgICAgICBjb252ZXJzZWx5LCBhbnkgY2xhc3Mgbm93IGluIF9fYmFzZXNfXyB0aGF0IHdhc24ndAorICAgICAgICAgICBuZWVkcyB0byBoYXZlIHx0eXBlfCBhZGRlZCB0byBpdHMgc3ViY2xhc3Nlcy4gKi8KIAotICAgIC8qIGZvciBub3csIHNvZCB0aGF0OiBqdXN0IHJlbW92ZSBmcm9tIGFsbCBvbGRfYmFzZXMsCi0gICAgICAgYWRkIHRvIGFsbCBuZXdfYmFzZXMgKi8KLQotICAgIGZvciAoaSA9IFB5VHVwbGVfR0VUX1NJWkUob2xkX2Jhc2VzKSAtIDE7IGkgPj0gMDsgaS0tKSB7Ci0gICAgICAgIG9iID0gUHlUdXBsZV9HRVRfSVRFTShvbGRfYmFzZXMsIGkpOwotICAgICAgICBpZiAoUHlUeXBlX0NoZWNrKG9iKSkgewotICAgICAgICAgICAgcmVtb3ZlX3N1YmNsYXNzKAotICAgICAgICAgICAgICAgIChQeVR5cGVPYmplY3QqKW9iLCB0eXBlKTsKLSAgICAgICAgfQorICAgICAgICAvKiBmb3Igbm93LCBzb2QgdGhhdDoganVzdCByZW1vdmUgZnJvbSBhbGwgb2xkX2Jhc2VzLAorICAgICAgICAgICBhZGQgdG8gYWxsIG5ld19iYXNlcyAqLworICAgICAgICByZW1vdmVfYWxsX3N1YmNsYXNzZXModHlwZSwgb2xkX2Jhc2VzKTsKKyAgICAgICAgcmVzID0gYWRkX2FsbF9zdWJjbGFzc2VzKHR5cGUsIG5ld19iYXNlcyk7CisgICAgICAgIHVwZGF0ZV9hbGxfc2xvdHModHlwZSk7CiAgICAgfQogCi0gICAgZm9yIChpID0gUHlUdXBsZV9HRVRfU0laRSh2YWx1ZSkgLSAxOyBpID49IDA7IGktLSkgewotICAgICAgICBvYiA9IFB5VHVwbGVfR0VUX0lURU0odmFsdWUsIGkpOwotICAgICAgICBpZiAoUHlUeXBlX0NoZWNrKG9iKSkgewotICAgICAgICAgICAgaWYgKGFkZF9zdWJjbGFzcygoUHlUeXBlT2JqZWN0KilvYiwgdHlwZSkgPCAwKQotICAgICAgICAgICAgICAgIHIgPSAtMTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHVwZGF0ZV9hbGxfc2xvdHModHlwZSk7Ci0KICAgICBQeV9ERUNSRUYob2xkX2Jhc2VzKTsKICAgICBQeV9ERUNSRUYob2xkX2Jhc2UpOwotICAgIFB5X0RFQ1JFRihvbGRfbXJvKTsKIAotICAgIHJldHVybiByOworICAgIHJldHVybiByZXM7CisKKyAgdW5kbzoKKyAgICBmb3IgKGkgPSBQeUxpc3RfR0VUX1NJWkUodGVtcCkgLSAxOyBpID49IDA7IGktLSkgeworICAgICAgICBQeVR5cGVPYmplY3QgKmNsczsKKyAgICAgICAgUHlPYmplY3QgKm5ld19tcm8sICpvbGRfbXJvID0gTlVMTDsKKworICAgICAgICBQeUFyZ19VbnBhY2tUdXBsZShQeUxpc3RfR0VUX0lURU0odGVtcCwgaSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICIiLCAyLCAzLCAmY2xzLCAmbmV3X21ybywgJm9sZF9tcm8pOworICAgICAgICAvKiBEbyBub3Qgcm9sbGJhY2sgaWYgY2xzIGhhcyBhIG5ld2VyIHZlcnNpb24gb2YgTVJPLiAgKi8KKyAgICAgICAgaWYgKGNscy0+dHBfbXJvID09IG5ld19tcm8pIHsKKyAgICAgICAgICAgIFB5X1hJTkNSRUYob2xkX21ybyk7CisgICAgICAgICAgICBjbHMtPnRwX21ybyA9IG9sZF9tcm87CisgICAgICAgICAgICBQeV9ERUNSRUYobmV3X21ybyk7CisgICAgICAgIH0KKyAgICB9CisgICAgUHlfREVDUkVGKHRlbXApOwogCiAgIGJhaWw6Ci0gICAgUHlfREVDUkVGKHR5cGUtPnRwX2Jhc2VzKTsKLSAgICBQeV9ERUNSRUYodHlwZS0+dHBfYmFzZSk7Ci0gICAgaWYgKHR5cGUtPnRwX21ybyAhPSBvbGRfbXJvKSB7Ci0gICAgICAgIFB5X0RFQ1JFRih0eXBlLT50cF9tcm8pOwotICAgIH0KKyAgICBpZiAodHlwZS0+dHBfYmFzZXMgPT0gbmV3X2Jhc2VzKSB7CisgICAgICAgIGFzc2VydCh0eXBlLT50cF9iYXNlID09IG5ld19iYXNlKTsKIAotICAgIHR5cGUtPnRwX2Jhc2VzID0gb2xkX2Jhc2VzOwotICAgIHR5cGUtPnRwX2Jhc2UgPSBvbGRfYmFzZTsKLSAgICB0eXBlLT50cF9tcm8gPSBvbGRfbXJvOworICAgICAgICB0eXBlLT50cF9iYXNlcyA9IG9sZF9iYXNlczsKKyAgICAgICAgdHlwZS0+dHBfYmFzZSA9IG9sZF9iYXNlOworCisgICAgICAgIFB5X0RFQ1JFRihuZXdfYmFzZXMpOworICAgICAgICBQeV9ERUNSRUYobmV3X2Jhc2UpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgUHlfREVDUkVGKG9sZF9iYXNlcyk7CisgICAgICAgIFB5X0RFQ1JFRihvbGRfYmFzZSk7CisgICAgfQogCiAgICAgcmV0dXJuIC0xOwogfQpAQCAtNjIwLDggKzc1OSw5IEBACiB0eXBlX2dldF9kb2MoUHlUeXBlT2JqZWN0ICp0eXBlLCB2b2lkICpjb250ZXh0KQogewogICAgIFB5T2JqZWN0ICpyZXN1bHQ7Ci0gICAgaWYgKCEodHlwZS0+dHBfZmxhZ3MgJiBQeV9UUEZMQUdTX0hFQVBUWVBFKSAmJiB0eXBlLT50cF9kb2MgIT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nKHR5cGUtPnRwX2RvYyk7CisgICAgaWYgKCEodHlwZS0+dHBfZmxhZ3MgJiBQeV9UUEZMQUdTX0hFQVBUWVBFKSAmJiB0eXBlLT50cF9kb2MgIT0gTlVMTCkgeworICAgICAgICByZXR1cm4gX1B5VHlwZV9HZXREb2NGcm9tSW50ZXJuYWxEb2ModHlwZS0+dHBfbmFtZSwgdHlwZS0+dHBfZG9jKTsKKyAgICB9CiAgICAgcmVzdWx0ID0gX1B5RGljdF9HZXRJdGVtSWQodHlwZS0+dHBfZGljdCwgJlB5SWRfX19kb2NfXyk7CiAgICAgaWYgKHJlc3VsdCA9PSBOVUxMKSB7CiAgICAgICAgIHJlc3VsdCA9IFB5X05vbmU7CkBAIC02MzcsNiArNzc3LDEyIEBACiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorc3RhdGljIFB5T2JqZWN0ICoKK3R5cGVfZ2V0X3RleHRfc2lnbmF0dXJlKFB5VHlwZU9iamVjdCAqdHlwZSwgdm9pZCAqY29udGV4dCkKK3sKKyAgICByZXR1cm4gX1B5VHlwZV9HZXRUZXh0U2lnbmF0dXJlRnJvbUludGVybmFsRG9jKHR5cGUtPnRwX25hbWUsIHR5cGUtPnRwX2RvYyk7Cit9CisKIHN0YXRpYyBpbnQKIHR5cGVfc2V0X2RvYyhQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICp2YWx1ZSwgdm9pZCAqY29udGV4dCkKIHsKQEAgLTY4Myw2ICs4MjksNyBAQAogICAgICAoc2V0dGVyKXR5cGVfc2V0X2Fic3RyYWN0bWV0aG9kcywgTlVMTH0sCiAgICAgeyJfX2RpY3RfXyIsICAoZ2V0dGVyKXR5cGVfZGljdCwgIE5VTEwsIE5VTEx9LAogICAgIHsiX19kb2NfXyIsIChnZXR0ZXIpdHlwZV9nZXRfZG9jLCAoc2V0dGVyKXR5cGVfc2V0X2RvYywgTlVMTH0sCisgICAgeyJfX3RleHRfc2lnbmF0dXJlX18iLCAoZ2V0dGVyKXR5cGVfZ2V0X3RleHRfc2lnbmF0dXJlLCBOVUxMLCBOVUxMfSwKICAgICB7MH0KIH07CiAKQEAgLTcwNCw3ICs4NTEsNyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBpZiAobW9kICE9IE5VTEwgJiYgUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcobW9kLCAiYnVpbHRpbnMiKSkKKyAgICBpZiAobW9kICE9IE5VTEwgJiYgX1B5VW5pY29kZV9Db21wYXJlV2l0aElkKG1vZCwgJlB5SWRfYnVpbHRpbnMpKQogICAgICAgICBydG4gPSBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiPGNsYXNzICclVS4lVSc+IiwgbW9kLCBuYW1lKTsKICAgICBlbHNlCiAgICAgICAgIHJ0biA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0KCI8Y2xhc3MgJyVzJz4iLCB0eXBlLT50cF9uYW1lKTsKQEAgLTcyNiw2ICs4NzMsMTMgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCisjaWZkZWYgUHlfREVCVUcKKyAgICAvKiB0eXBlX2NhbGwoKSBtdXN0IG5vdCBiZSBjYWxsZWQgd2l0aCBhbiBleGNlcHRpb24gc2V0LAorICAgICAgIGJlY2F1c2UgaXQgbWF5IGNsZWFyIGl0IChkaXJlY3RseSBvciBpbmRpcmVjdGx5KSBhbmQgc28gdGhlCisgICAgICAgY2FsbGVyIGxvc2VzIGl0cyBleGNlcHRpb24gKi8KKyAgICBhc3NlcnQoIVB5RXJyX09jY3VycmVkKCkpOworI2VuZGlmCisKICAgICBvYmogPSB0eXBlLT50cF9uZXcodHlwZSwgYXJncywga3dkcyk7CiAgICAgaWYgKG9iaiAhPSBOVUxMKSB7CiAgICAgICAgIC8qIFVnbHkgZXhjZXB0aW9uOiB3aGVuIHRoZSBjYWxsIHdhcyB0eXBlKHNvbWV0aGluZyksCkBAIC03NDAsMTAgKzg5NCwxMiBAQAogICAgICAgICBpZiAoIVB5VHlwZV9Jc1N1YnR5cGUoUHlfVFlQRShvYmopLCB0eXBlKSkKICAgICAgICAgICAgIHJldHVybiBvYmo7CiAgICAgICAgIHR5cGUgPSBQeV9UWVBFKG9iaik7Ci0gICAgICAgIGlmICh0eXBlLT50cF9pbml0ICE9IE5VTEwgJiYKLSAgICAgICAgICAgIHR5cGUtPnRwX2luaXQob2JqLCBhcmdzLCBrd2RzKSA8IDApIHsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihvYmopOwotICAgICAgICAgICAgb2JqID0gTlVMTDsKKyAgICAgICAgaWYgKHR5cGUtPnRwX2luaXQgIT0gTlVMTCkgeworICAgICAgICAgICAgaW50IHJlcyA9IHR5cGUtPnRwX2luaXQob2JqLCBhcmdzLCBrd2RzKTsKKyAgICAgICAgICAgIGlmIChyZXMgPCAwKSB7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKG9iaik7CisgICAgICAgICAgICAgICAgb2JqID0gTlVMTDsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gb2JqOwpAQCAtNzcwLDcgKzkyNiw3IEBACiAgICAgICAgIFB5X0lOQ1JFRih0eXBlKTsKIAogICAgIGlmICh0eXBlLT50cF9pdGVtc2l6ZSA9PSAwKQotICAgICAgICBQeU9iamVjdF9JTklUKG9iaiwgdHlwZSk7CisgICAgICAgICh2b2lkKVB5T2JqZWN0X0lOSVQob2JqLCB0eXBlKTsKICAgICBlbHNlCiAgICAgICAgICh2b2lkKSBQeU9iamVjdF9JTklUX1ZBUigoUHlWYXJPYmplY3QgKilvYmosIHR5cGUsIG5pdGVtcyk7CiAKQEAgLTkwMiw2ICsxMDU4LDcgQEAKICAgICBQeVR5cGVPYmplY3QgKnR5cGUsICpiYXNlOwogICAgIGRlc3RydWN0b3IgYmFzZWRlYWxsb2M7CiAgICAgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlID0gUHlUaHJlYWRTdGF0ZV9HRVQoKTsKKyAgICBpbnQgaGFzX2ZpbmFsaXplcjsKIAogICAgIC8qIEV4dHJhY3QgdGhlIHR5cGU7IHdlIGV4cGVjdCBpdCB0byBiZSBhIGhlYXAgdHlwZSAqLwogICAgIHR5cGUgPSBQeV9UWVBFKHNlbGYpOwpAQCAtOTE3LDYgKzEwNzQsMTAgQEAKICAgICAgICAgICAgY2xlYXJfc2xvdHMoKSwgb3IgREVDUkVGIHRoZSBkaWN0LCBvciBjbGVhciB3ZWFrcmVmcy4gKi8KIAogICAgICAgICAvKiBNYXliZSBjYWxsIGZpbmFsaXplcjsgZXhpdCBlYXJseSBpZiByZXN1cnJlY3RlZCAqLworICAgICAgICBpZiAodHlwZS0+dHBfZmluYWxpemUpIHsKKyAgICAgICAgICAgIGlmIChQeU9iamVjdF9DYWxsRmluYWxpemVyRnJvbURlYWxsb2Moc2VsZikgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogICAgICAgICBpZiAodHlwZS0+dHBfZGVsKSB7CiAgICAgICAgICAgICB0eXBlLT50cF9kZWwoc2VsZik7CiAgICAgICAgICAgICBpZiAoc2VsZi0+b2JfcmVmY250ID4gMCkKQEAgLTk2OCwyNSArMTEyOSwzNiBAQAogICAgICAgICBhc3NlcnQoYmFzZSk7CiAgICAgfQogCi0gICAgLyogSWYgd2UgYWRkZWQgYSB3ZWFrbGlzdCwgd2UgY2xlYXIgaXQuICAgICAgRG8gdGhpcyAqYmVmb3JlKiBjYWxsaW5nCi0gICAgICAgdGhlIGZpbmFsaXplciAoX19kZWxfXyksIGNsZWFyaW5nIHNsb3RzLCBvciBjbGVhcmluZyB0aGUgaW5zdGFuY2UKLSAgICAgICBkaWN0LiAqLworICAgIGhhc19maW5hbGl6ZXIgPSB0eXBlLT50cF9maW5hbGl6ZSB8fCB0eXBlLT50cF9kZWw7CiAKKyAgICAvKiBNYXliZSBjYWxsIGZpbmFsaXplcjsgZXhpdCBlYXJseSBpZiByZXN1cnJlY3RlZCAqLworICAgIGlmIChoYXNfZmluYWxpemVyKQorICAgICAgICBfUHlPYmplY3RfR0NfVFJBQ0soc2VsZik7CisKKyAgICBpZiAodHlwZS0+dHBfZmluYWxpemUpIHsKKyAgICAgICAgaWYgKFB5T2JqZWN0X0NhbGxGaW5hbGl6ZXJGcm9tRGVhbGxvYyhzZWxmKSA8IDApIHsKKyAgICAgICAgICAgIC8qIFJlc3VycmVjdGVkICovCisgICAgICAgICAgICBnb3RvIGVuZGxhYmVsOworICAgICAgICB9CisgICAgfQorICAgIC8qIElmIHdlIGFkZGVkIGEgd2Vha2xpc3QsIHdlIGNsZWFyIGl0LiAgICAgIERvIHRoaXMgKmJlZm9yZSogY2FsbGluZworICAgICAgIHRwX2RlbCwgY2xlYXJpbmcgc2xvdHMsIG9yIGNsZWFyaW5nIHRoZSBpbnN0YW5jZSBkaWN0LiAqLwogICAgIGlmICh0eXBlLT50cF93ZWFrbGlzdG9mZnNldCAmJiAhYmFzZS0+dHBfd2Vha2xpc3RvZmZzZXQpCiAgICAgICAgIFB5T2JqZWN0X0NsZWFyV2Vha1JlZnMoc2VsZik7CiAKLSAgICAvKiBNYXliZSBjYWxsIGZpbmFsaXplcjsgZXhpdCBlYXJseSBpZiByZXN1cnJlY3RlZCAqLwogICAgIGlmICh0eXBlLT50cF9kZWwpIHsKLSAgICAgICAgX1B5T2JqZWN0X0dDX1RSQUNLKHNlbGYpOwogICAgICAgICB0eXBlLT50cF9kZWwoc2VsZik7Ci0gICAgICAgIGlmIChzZWxmLT5vYl9yZWZjbnQgPiAwKQotICAgICAgICAgICAgZ290byBlbmRsYWJlbDsgICAgICAgICAgICAgIC8qIHJlc3VycmVjdGVkICovCi0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIF9QeU9iamVjdF9HQ19VTlRSQUNLKHNlbGYpOworICAgICAgICBpZiAoc2VsZi0+b2JfcmVmY250ID4gMCkgeworICAgICAgICAgICAgLyogUmVzdXJyZWN0ZWQgKi8KKyAgICAgICAgICAgIGdvdG8gZW5kbGFiZWw7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGhhc19maW5hbGl6ZXIpIHsKKyAgICAgICAgX1B5T2JqZWN0X0dDX1VOVFJBQ0soc2VsZik7CiAgICAgICAgIC8qIE5ldyB3ZWFrcmVmcyBjb3VsZCBiZSBjcmVhdGVkIGR1cmluZyB0aGUgZmluYWxpemVyIGNhbGwuCi0gICAgICAgICAgICBJZiB0aGlzIG9jY3VycywgY2xlYXIgdGhlbSBvdXQgd2l0aG91dCBjYWxsaW5nIHRoZWlyCi0gICAgICAgICAgICBmaW5hbGl6ZXJzIHNpbmNlIHRoZXkgbWlnaHQgcmVseSBvbiBwYXJ0IG9mIHRoZSBvYmplY3QKLSAgICAgICAgICAgIGJlaW5nIGZpbmFsaXplZCB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gZGVzdHJveWVkLiAqLworICAgICAgICAgICBJZiB0aGlzIG9jY3VycywgY2xlYXIgdGhlbSBvdXQgd2l0aG91dCBjYWxsaW5nIHRoZWlyCisgICAgICAgICAgIGZpbmFsaXplcnMgc2luY2UgdGhleSBtaWdodCByZWx5IG9uIHBhcnQgb2YgdGhlIG9iamVjdAorICAgICAgICAgICBiZWluZyBmaW5hbGl6ZWQgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIGRlc3Ryb3llZC4gKi8KICAgICAgICAgaWYgKHR5cGUtPnRwX3dlYWtsaXN0b2Zmc2V0ICYmICFiYXNlLT50cF93ZWFrbGlzdG9mZnNldCkgewogICAgICAgICAgICAgLyogTW9kZWxlZCBhZnRlciBHRVRfV0VBS1JFRlNfTElTVFBUUigpICovCiAgICAgICAgICAgICBQeVdlYWtSZWZlcmVuY2UgKipsaXN0ID0gKFB5V2Vha1JlZmVyZW5jZSAqKikgXApAQCAtMTE0MSw2ICsxMzEzLDE4IEBACiAKIC8qIHR5cGUgdGVzdCB3aXRoIHN1YmNsYXNzaW5nIHN1cHBvcnQgKi8KIAorUHlfTE9DQUxfSU5MSU5FKGludCkKK3R5cGVfaXNfc3VidHlwZV9iYXNlX2NoYWluKFB5VHlwZU9iamVjdCAqYSwgUHlUeXBlT2JqZWN0ICpiKQoreworICAgIGRvIHsKKyAgICAgICAgaWYgKGEgPT0gYikKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICBhID0gYS0+dHBfYmFzZTsKKyAgICB9IHdoaWxlIChhICE9IE5VTEwpOworCisgICAgcmV0dXJuIChiID09ICZQeUJhc2VPYmplY3RfVHlwZSk7Cit9CisKIGludAogUHlUeXBlX0lzU3VidHlwZShQeVR5cGVPYmplY3QgKmEsIFB5VHlwZU9iamVjdCAqYikKIHsKQEAgLTExNTksMTUgKzEzNDMsOSBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICBlbHNlIHsKKyAgICBlbHNlCiAgICAgICAgIC8qIGEgaXMgbm90IGNvbXBsZXRlbHkgaW5pdGlsaXplZCB5ZXQ7IGZvbGxvdyB0cF9iYXNlICovCi0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIGlmIChhID09IGIpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgICAgICBhID0gYS0+dHBfYmFzZTsKLSAgICAgICAgfSB3aGlsZSAoYSAhPSBOVUxMKTsKLSAgICAgICAgcmV0dXJuIGIgPT0gJlB5QmFzZU9iamVjdF9UeXBlOwotICAgIH0KKyAgICAgICAgcmV0dXJuIHR5cGVfaXNfc3VidHlwZV9iYXNlX2NoYWluKGEsIGIpOwogfQogCiAvKiBJbnRlcm5hbCByb3V0aW5lcyB0byBkbyBhIG1ldGhvZCBsb29rdXAgaW4gdGhlIHR5cGUKQEAgLTE0MzQsMTAgKzE2MTIsMTEgQEAKIH0KIAogc3RhdGljIGludAotcG1lcmdlKFB5T2JqZWN0ICphY2MsIFB5T2JqZWN0KiB0b19tZXJnZSkgeworcG1lcmdlKFB5T2JqZWN0ICphY2MsIFB5T2JqZWN0KiB0b19tZXJnZSkKK3sKKyAgICBpbnQgcmVzID0gMDsKICAgICBQeV9zc2l6ZV90IGksIGosIHRvX21lcmdlX3NpemUsIGVtcHR5X2NudDsKICAgICBpbnQgKnJlbWFpbjsKLSAgICBpbnQgb2s7CiAKICAgICB0b19tZXJnZV9zaXplID0gUHlMaXN0X0dFVF9TSVpFKHRvX21lcmdlKTsKIApAQCAtMTQ0Niw4ICsxNjI1LDEwIEBACiAgICAgICAgdGhhdCBpcyBub3QgaW5jbHVkZWQgaW4gYWNjLgogICAgICovCiAgICAgcmVtYWluID0gKGludCAqKVB5TWVtX01BTExPQyhTSVpFT0ZfSU5UKnRvX21lcmdlX3NpemUpOwotICAgIGlmIChyZW1haW4gPT0gTlVMTCkKKyAgICBpZiAocmVtYWluID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgcmV0dXJuIC0xOworICAgIH0KICAgICBmb3IgKGkgPSAwOyBpIDwgdG9fbWVyZ2Vfc2l6ZTsgaSsrKQogICAgICAgICByZW1haW5baV0gPSAwOwogCkBAIC0xNDczLDE1ICsxNjU0LDEzIEBACiAgICAgICAgIGNhbmRpZGF0ZSA9IFB5TGlzdF9HRVRfSVRFTShjdXJfbGlzdCwgcmVtYWluW2ldKTsKICAgICAgICAgZm9yIChqID0gMDsgaiA8IHRvX21lcmdlX3NpemU7IGorKykgewogICAgICAgICAgICAgUHlPYmplY3QgKmpfbHN0ID0gUHlMaXN0X0dFVF9JVEVNKHRvX21lcmdlLCBqKTsKLSAgICAgICAgICAgIGlmICh0YWlsX2NvbnRhaW5zKGpfbHN0LCByZW1haW5bal0sIGNhbmRpZGF0ZSkpIHsKKyAgICAgICAgICAgIGlmICh0YWlsX2NvbnRhaW5zKGpfbHN0LCByZW1haW5bal0sIGNhbmRpZGF0ZSkpCiAgICAgICAgICAgICAgICAgZ290byBza2lwOyAvKiBjb250aW51ZSBvdXRlciBsb29wICovCi0gICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgb2sgPSBQeUxpc3RfQXBwZW5kKGFjYywgY2FuZGlkYXRlKTsKLSAgICAgICAgaWYgKG9rIDwgMCkgewotICAgICAgICAgICAgUHlNZW1fRnJlZShyZW1haW4pOwotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9CisgICAgICAgIHJlcyA9IFB5TGlzdF9BcHBlbmQoYWNjLCBjYW5kaWRhdGUpOworICAgICAgICBpZiAocmVzIDwgMCkKKyAgICAgICAgICAgIGdvdG8gb3V0OworCiAgICAgICAgIGZvciAoaiA9IDA7IGogPCB0b19tZXJnZV9zaXplOyBqKyspIHsKICAgICAgICAgICAgIFB5T2JqZWN0ICpqX2xzdCA9IFB5TGlzdF9HRVRfSVRFTSh0b19tZXJnZSwgaik7CiAgICAgICAgICAgICBpZiAocmVtYWluW2pdIDwgUHlMaXN0X0dFVF9TSVpFKGpfbHN0KSAmJgpAQCAtMTQ5MywyMiArMTY3MiwyNSBAQAogICAgICAgc2tpcDogOwogICAgIH0KIAotICAgIGlmIChlbXB0eV9jbnQgPT0gdG9fbWVyZ2Vfc2l6ZSkgewotICAgICAgICBQeU1lbV9GUkVFKHJlbWFpbik7Ci0gICAgICAgIHJldHVybiAwOworICAgIGlmIChlbXB0eV9jbnQgIT0gdG9fbWVyZ2Vfc2l6ZSkgeworICAgICAgICBzZXRfbXJvX2Vycm9yKHRvX21lcmdlLCByZW1haW4pOworICAgICAgICByZXMgPSAtMTsKICAgICB9Ci0gICAgc2V0X21yb19lcnJvcih0b19tZXJnZSwgcmVtYWluKTsKKworICBvdXQ6CiAgICAgUHlNZW1fRlJFRShyZW1haW4pOwotICAgIHJldHVybiAtMTsKKworICAgIHJldHVybiByZXM7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCiBtcm9faW1wbGVtZW50YXRpb24oUHlUeXBlT2JqZWN0ICp0eXBlKQogewotICAgIFB5X3NzaXplX3QgaSwgbjsKLSAgICBpbnQgb2s7Ci0gICAgUHlPYmplY3QgKmJhc2VzLCAqcmVzdWx0OworICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBOVUxMOworICAgIFB5T2JqZWN0ICpiYXNlczsKICAgICBQeU9iamVjdCAqdG9fbWVyZ2UsICpiYXNlc19hc2xpc3Q7CisgICAgaW50IHJlczsKKyAgICBQeV9zc2l6ZV90IGksIG47CiAKICAgICBpZiAodHlwZS0+dHBfZGljdCA9PSBOVUxMKSB7CiAgICAgICAgIGlmIChQeVR5cGVfUmVhZHkodHlwZSkgPCAwKQpAQCAtMTUzMiw0MiArMTcxNCw0NCBAQAogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLSAgICAgICAgUHlPYmplY3QgKmJhc2UgPSBQeVR1cGxlX0dFVF9JVEVNKGJhc2VzLCBpKTsKLSAgICAgICAgUHlPYmplY3QgKnBhcmVudE1STzsKLSAgICAgICAgcGFyZW50TVJPID0gUHlTZXF1ZW5jZV9MaXN0KCgoUHlUeXBlT2JqZWN0KiliYXNlKS0+dHBfbXJvKTsKLSAgICAgICAgaWYgKHBhcmVudE1STyA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodG9fbWVyZ2UpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIFB5VHlwZU9iamVjdCAqYmFzZTsKKyAgICAgICAgUHlPYmplY3QgKmJhc2VfbXJvX2FzbGlzdDsKKworICAgICAgICBiYXNlID0gKFB5VHlwZU9iamVjdCAqKVB5VHVwbGVfR0VUX0lURU0oYmFzZXMsIGkpOworICAgICAgICBpZiAoYmFzZS0+dHBfbXJvID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIkNhbm5vdCBleHRlbmQgYW4gaW5jb21wbGV0ZSB0eXBlICclLjEwMHMnIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlLT50cF9uYW1lKTsKKyAgICAgICAgICAgIGdvdG8gb3V0OwogICAgICAgICB9CiAKLSAgICAgICAgUHlMaXN0X1NFVF9JVEVNKHRvX21lcmdlLCBpLCBwYXJlbnRNUk8pOworICAgICAgICBiYXNlX21yb19hc2xpc3QgPSBQeVNlcXVlbmNlX0xpc3QoYmFzZS0+dHBfbXJvKTsKKyAgICAgICAgaWYgKGJhc2VfbXJvX2FzbGlzdCA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBvdXQ7CisKKyAgICAgICAgUHlMaXN0X1NFVF9JVEVNKHRvX21lcmdlLCBpLCBiYXNlX21yb19hc2xpc3QpOwogICAgIH0KIAogICAgIGJhc2VzX2FzbGlzdCA9IFB5U2VxdWVuY2VfTGlzdChiYXNlcyk7Ci0gICAgaWYgKGJhc2VzX2FzbGlzdCA9PSBOVUxMKSB7Ci0gICAgICAgIFB5X0RFQ1JFRih0b19tZXJnZSk7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KKyAgICBpZiAoYmFzZXNfYXNsaXN0ID09IE5VTEwpCisgICAgICAgIGdvdG8gb3V0OwogICAgIC8qIFRoaXMgaXMganVzdCBhIGJhc2ljIHNhbml0eSBjaGVjay4gKi8KICAgICBpZiAoY2hlY2tfZHVwbGljYXRlcyhiYXNlc19hc2xpc3QpIDwgMCkgewotICAgICAgICBQeV9ERUNSRUYodG9fbWVyZ2UpOwogICAgICAgICBQeV9ERUNSRUYoYmFzZXNfYXNsaXN0KTsKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGdvdG8gb3V0OwogICAgIH0KICAgICBQeUxpc3RfU0VUX0lURU0odG9fbWVyZ2UsIG4sIGJhc2VzX2FzbGlzdCk7CiAKICAgICByZXN1bHQgPSBQeV9CdWlsZFZhbHVlKCJbT10iLCAoUHlPYmplY3QgKil0eXBlKTsKLSAgICBpZiAocmVzdWx0ID09IE5VTEwpIHsKLSAgICAgICAgUHlfREVDUkVGKHRvX21lcmdlKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQorICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKKyAgICAgICAgZ290byBvdXQ7CiAKLSAgICBvayA9IHBtZXJnZShyZXN1bHQsIHRvX21lcmdlKTsKKyAgICByZXMgPSBwbWVyZ2UocmVzdWx0LCB0b19tZXJnZSk7CisgICAgaWYgKHJlcyA8IDApCisgICAgICAgIFB5X0NMRUFSKHJlc3VsdCk7CisKKyAgb3V0OgogICAgIFB5X0RFQ1JFRih0b19tZXJnZSk7Ci0gICAgaWYgKG9rIDwgMCkgewotICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQogCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTE1ODEsNTkgKzE3NjUsMTMzIEBACiB9CiAKIHN0YXRpYyBpbnQKLW1yb19pbnRlcm5hbChQeVR5cGVPYmplY3QgKnR5cGUpCittcm9fY2hlY2soUHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqbXJvKQogewotICAgIFB5T2JqZWN0ICptcm8sICpyZXN1bHQsICp0dXBsZTsKLSAgICBpbnQgY2hlY2tpdCA9IDA7CisgICAgUHlUeXBlT2JqZWN0ICpzb2xpZDsKKyAgICBQeV9zc2l6ZV90IGksIG47CiAKLSAgICBpZiAoUHlfVFlQRSh0eXBlKSA9PSAmUHlUeXBlX1R5cGUpIHsKLSAgICAgICAgcmVzdWx0ID0gbXJvX2ltcGxlbWVudGF0aW9uKHR5cGUpOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgX1B5X0lERU5USUZJRVIobXJvKTsKLSAgICAgICAgY2hlY2tpdCA9IDE7Ci0gICAgICAgIG1ybyA9IGxvb2t1cF9tZXRob2QoKFB5T2JqZWN0ICopdHlwZSwgJlB5SWRfbXJvKTsKLSAgICAgICAgaWYgKG1ybyA9PSBOVUxMKQorICAgIHNvbGlkID0gc29saWRfYmFzZSh0eXBlKTsKKworICAgIG4gPSBQeVR1cGxlX0dFVF9TSVpFKG1ybyk7CisgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworICAgICAgICBQeVR5cGVPYmplY3QgKmJhc2U7CisgICAgICAgIFB5T2JqZWN0ICp0bXA7CisKKyAgICAgICAgdG1wID0gUHlUdXBsZV9HRVRfSVRFTShtcm8sIGkpOworICAgICAgICBpZiAoIVB5VHlwZV9DaGVjayh0bXApKSB7CisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoCisgICAgICAgICAgICAgICAgUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICJtcm8oKSByZXR1cm5lZCBhIG5vbi1jbGFzcyAoJyUuNTAwcycpIiwKKyAgICAgICAgICAgICAgICBQeV9UWVBFKHRtcCktPnRwX25hbWUpOwogICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICByZXN1bHQgPSBQeU9iamVjdF9DYWxsT2JqZWN0KG1ybywgTlVMTCk7Ci0gICAgICAgIFB5X0RFQ1JFRihtcm8pOwotICAgIH0KLSAgICBpZiAocmVzdWx0ID09IE5VTEwpCi0gICAgICAgIHJldHVybiAtMTsKLSAgICB0dXBsZSA9IFB5U2VxdWVuY2VfVHVwbGUocmVzdWx0KTsKLSAgICBQeV9ERUNSRUYocmVzdWx0KTsKLSAgICBpZiAodHVwbGUgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIGlmIChjaGVja2l0KSB7Ci0gICAgICAgIFB5X3NzaXplX3QgaSwgbGVuOwotICAgICAgICBQeU9iamVjdCAqY2xzOwotICAgICAgICBQeVR5cGVPYmplY3QgKnNvbGlkOworICAgICAgICB9CiAKLSAgICAgICAgc29saWQgPSBzb2xpZF9iYXNlKHR5cGUpOwotCi0gICAgICAgIGxlbiA9IFB5VHVwbGVfR0VUX1NJWkUodHVwbGUpOwotCi0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewotICAgICAgICAgICAgUHlUeXBlT2JqZWN0ICp0OwotICAgICAgICAgICAgY2xzID0gUHlUdXBsZV9HRVRfSVRFTSh0dXBsZSwgaSk7Ci0gICAgICAgICAgICBpZiAoIVB5VHlwZV9DaGVjayhjbHMpKSB7Ci0gICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgIm1ybygpIHJldHVybmVkIGEgbm9uLWNsYXNzICgnJS41MDBzJykiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRShjbHMpLT50cF9uYW1lKTsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYodHVwbGUpOwotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHQgPSAoUHlUeXBlT2JqZWN0KiljbHM7Ci0gICAgICAgICAgICBpZiAoIVB5VHlwZV9Jc1N1YnR5cGUoc29saWQsIHNvbGlkX2Jhc2UodCkpKSB7Ci0gICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAibXJvKCkgcmV0dXJuZWQgYmFzZSB3aXRoIHVuc3VpdGFibGUgbGF5b3V0ICgnJS41MDBzJykiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQtPnRwX25hbWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHR1cGxlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgYmFzZSA9IChQeVR5cGVPYmplY3QqKXRtcDsKKyAgICAgICAgaWYgKCFQeVR5cGVfSXNTdWJ0eXBlKHNvbGlkLCBzb2xpZF9iYXNlKGJhc2UpKSkgeworICAgICAgICAgICAgUHlFcnJfRm9ybWF0KAorICAgICAgICAgICAgICAgIFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAibXJvKCkgcmV0dXJuZWQgYmFzZSB3aXRoIHVuc3VpdGFibGUgbGF5b3V0ICgnJS41MDBzJykiLAorICAgICAgICAgICAgICAgIGJhc2UtPnRwX25hbWUpOworICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9CiAgICAgfQotICAgIHR5cGUtPnRwX21ybyA9IHR1cGxlOworCisgICAgcmV0dXJuIDA7Cit9CisKKy8qIExvb2t1cHMgYW4gbWNscy5tcm8gbWV0aG9kLCBpbnZva2VzIGl0IGFuZCBjaGVja3MgdGhlIHJlc3VsdCAoaWYgbmVlZGVkLAorICAgaW4gY2FzZSBvZiBhIGN1c3RvbSBtcm8oKSBpbXBsZW1lbnRhdGlvbikuCisKKyAgIEtlZXAgaW4gbWluZCB0aGF0IGR1cmluZyBleGVjdXRpb24gb2YgdGhpcyBmdW5jdGlvbiB0eXBlLT50cF9tcm8KKyAgIGNhbiBiZSByZXBsYWNlZCBkdWUgdG8gcG9zc2libGUgcmVlbnRyYW5jZSAoZm9yIGV4YW1wbGUsCisgICB0aHJvdWdoIHR5cGVfc2V0X2Jhc2VzKToKKworICAgICAgLSB3aGVuIGxvb2tpbmcgdXAgdGhlIG1jbHMubXJvIGF0dHJpYnV0ZSAoaXQgY291bGQgYmUKKyAgICAgICAgYSB1c2VyLXByb3ZpZGVkIGRlc2NyaXB0b3IpOworCisgICAgICAtIGZyb20gaW5zaWRlIGEgY3VzdG9tIG1ybygpIGl0c2VsZjsKKworICAgICAgLSB0aHJvdWdoIGEgZmluYWxpemVyIG9mIHRoZSByZXR1cm4gdmFsdWUgb2YgbXJvKCkuCisqLworc3RhdGljIFB5T2JqZWN0ICoKK21yb19pbnZva2UoUHlUeXBlT2JqZWN0ICp0eXBlKQoreworICAgIFB5T2JqZWN0ICptcm9fcmVzdWx0OworICAgIFB5T2JqZWN0ICpuZXdfbXJvOworICAgIGludCBjdXN0b20gPSAoUHlfVFlQRSh0eXBlKSAhPSAmUHlUeXBlX1R5cGUpOworCisgICAgaWYgKGN1c3RvbSkgeworICAgICAgICBfUHlfSURFTlRJRklFUihtcm8pOworICAgICAgICBQeU9iamVjdCAqbXJvX21ldGggPSBsb29rdXBfbWV0aG9kKChQeU9iamVjdCAqKXR5cGUsICZQeUlkX21ybyk7CisgICAgICAgIGlmIChtcm9fbWV0aCA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIG1yb19yZXN1bHQgPSBQeU9iamVjdF9DYWxsT2JqZWN0KG1yb19tZXRoLCBOVUxMKTsKKyAgICAgICAgUHlfREVDUkVGKG1yb19tZXRoKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIG1yb19yZXN1bHQgPSBtcm9faW1wbGVtZW50YXRpb24odHlwZSk7CisgICAgfQorICAgIGlmIChtcm9fcmVzdWx0ID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgbmV3X21ybyA9IFB5U2VxdWVuY2VfVHVwbGUobXJvX3Jlc3VsdCk7CisgICAgUHlfREVDUkVGKG1yb19yZXN1bHQpOworICAgIGlmIChuZXdfbXJvID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKGN1c3RvbSAmJiBtcm9fY2hlY2sodHlwZSwgbmV3X21ybykgPCAwKSB7CisgICAgICAgIFB5X0RFQ1JFRihuZXdfbXJvKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgcmV0dXJuIG5ld19tcm87Cit9CisKKy8qIENhbGN1bGF0ZXMgYW5kIGFzc2lnbnMgYSBuZXcgTVJPIHRvIHR5cGUtPnRwX21yby4KKyAgIFJldHVybiB2YWx1ZXMgYW5kIGludmFyaWFudHM6CisKKyAgICAgLSBSZXR1cm5zIDEgaWYgYSBuZXcgTVJPIHZhbHVlIGhhcyBiZWVuIHNldCB0byB0eXBlLT50cF9tcm8gZHVlIHRvCisgICAgICAgdGhpcyBjYWxsIG9mIG1yb19pbnRlcm5hbCAobm8gdHJpY2t5IHJlZW50cmFuY3kgYW5kIG5vIGVycm9ycykuCisKKyAgICAgICBJbiBjYXNlIGlmIHBfb2xkX21ybyBhcmd1bWVudCBpcyBub3QgTlVMTCwgYSBwcmV2aW91cyB2YWx1ZQorICAgICAgIG9mIHR5cGUtPnRwX21ybyBpcyBwdXQgdGhlcmUsIGFuZCB0aGUgb3duZXJzaGlwIG9mIHRoaXMKKyAgICAgICByZWZlcmVuY2UgaXMgdHJhbnNmZXJyZWQgdG8gYSBjYWxsZXIuCisgICAgICAgT3RoZXJ3aXNlLCB0aGUgcHJldmlvdXMgdmFsdWUgKGlmIGFueSkgaXMgZGVjcmVmJ2VkLgorCisgICAgIC0gUmV0dXJucyAwIGluIGNhc2Ugd2hlbiB0eXBlLT50cF9tcm8gZ2V0cyBjaGFuZ2VkIGJlY2F1c2Ugb2YKKyAgICAgICByZWVudGVyaW5nIGhlcmUgdGhyb3VnaCBhIGN1c3RvbSBtcm8oKSAoc2VlIGEgY29tbWVudCB0byBtcm9faW52b2tlKS4KKworICAgICAgIEluIHRoaXMgY2FzZSwgYSByZWZjb3VudCBvZiBhbiBvbGQgdHlwZS0+dHBfbXJvIGlzIGFkanVzdGVkCisgICAgICAgc29tZXdoZXJlIGRlZXBlciBpbiB0aGUgY2FsbCBzdGFjayAoYnkgdGhlIGlubmVybW9zdCBtcm9faW50ZXJuYWwKKyAgICAgICBvciBpdHMgY2FsbGVyKSBhbmQgbWF5IGJlY29tZSB6ZXJvIHVwb24gcmV0dXJuaW5nIGZyb20gaGVyZS4KKyAgICAgICBUaGlzIGFsc28gaW1wbGllcyB0aGF0IHRoZSB3aG9sZSBoaWVyYXJjaHkgb2Ygc3ViY2xhc3NlcyBvZiB0aGUgdHlwZQorICAgICAgIGhhcyBzZWVuIHRoZSBuZXcgdmFsdWUgYW5kIHVwZGF0ZWQgdGhlaXIgTVJPIGFjY29yZGluZ2x5LgorCisgICAgIC0gUmV0dXJucyAtMSBpbiBjYXNlIG9mIGFuIGVycm9yLgorKi8KK3N0YXRpYyBpbnQKK21yb19pbnRlcm5hbChQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICoqcF9vbGRfbXJvKQoreworICAgIFB5T2JqZWN0ICpuZXdfbXJvLCAqb2xkX21ybzsKKyAgICBpbnQgcmVlbnQ7CisKKyAgICAvKiBLZWVwIGEgcmVmZXJlbmNlIHRvIGJlIGFibGUgdG8gZG8gYSByZWVudHJhbmN5IGNoZWNrIGJlbG93LgorICAgICAgIERvbid0IGxldCBvbGRfbXJvIGJlIEdDJ2VkIGFuZCBpdHMgYWRkcmVzcyBiZSByZXVzZWQgZm9yCisgICAgICAgYW5vdGhlciBvYmplY3QsIGxpa2UgKHN1ZGRlbmx5ISkgYSBuZXcgdHBfbXJvLiAgKi8KKyAgICBvbGRfbXJvID0gdHlwZS0+dHBfbXJvOworICAgIFB5X1hJTkNSRUYob2xkX21ybyk7CisgICAgbmV3X21ybyA9IG1yb19pbnZva2UodHlwZSk7ICAvKiBtaWdodCBjYXVzZSByZWVudHJhbmNlICovCisgICAgcmVlbnQgPSAodHlwZS0+dHBfbXJvICE9IG9sZF9tcm8pOworICAgIFB5X1hERUNSRUYob2xkX21ybyk7CisgICAgaWYgKG5ld19tcm8gPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgaWYgKHJlZW50KSB7CisgICAgICAgIFB5X0RFQ1JFRihuZXdfbXJvKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgdHlwZS0+dHBfbXJvID0gbmV3X21ybzsKIAogICAgIHR5cGVfbXJvX21vZGlmaWVkKHR5cGUsIHR5cGUtPnRwX21ybyk7CiAgICAgLyogY29ybmVyIGNhc2U6IHRoZSBzdXBlciBjbGFzcyBtaWdodCBoYXZlIGJlZW4gaGlkZGVuCkBAIC0xNjQyLDcgKzE5MDAsMTIgQEAKIAogICAgIFB5VHlwZV9Nb2RpZmllZCh0eXBlKTsKIAotICAgIHJldHVybiAwOworICAgIGlmIChwX29sZF9tcm8gIT0gTlVMTCkKKyAgICAgICAgKnBfb2xkX21ybyA9IG9sZF9tcm87ICAvKiB0cmFuc2ZlciB0aGUgb3duZXJzaGlwICovCisgICAgZWxzZQorICAgICAgICBQeV9YREVDUkVGKG9sZF9tcm8pOworCisgICAgcmV0dXJuIDE7CiB9CiAKIApAQCAtMTY3NCw2ICsxOTM3LDEyIEBACiAgICAgICAgICAgICBpZiAoUHlUeXBlX1JlYWR5KGJhc2VfaSkgPCAwKQogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CisgICAgICAgIGlmICghUHlUeXBlX0hhc0ZlYXR1cmUoYmFzZV9pLCBQeV9UUEZMQUdTX0JBU0VUWVBFKSkgeworICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSAnJS4xMDBzJyBpcyBub3QgYW4gYWNjZXB0YWJsZSBiYXNlIHR5cGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VfaS0+dHBfbmFtZSk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQogICAgICAgICBjYW5kaWRhdGUgPSBzb2xpZF9iYXNlKGJhc2VfaSk7CiAgICAgICAgIGlmICh3aW5uZXIgPT0gTlVMTCkgewogICAgICAgICAgICAgd2lubmVyID0gY2FuZGlkYXRlOwpAQCAtMTkzOSw3ICsyMjA4LDcgQEAKICAgICByZXR1cm4gcmVzOwogfQogCi1sb25nCit1bnNpZ25lZCBsb25nCiBQeVR5cGVfR2V0RmxhZ3MoUHlUeXBlT2JqZWN0ICp0eXBlKQogewogICAgIHJldHVybiB0eXBlLT50cF9mbGFnczsKQEAgLTIwNTQsMTIgKzIzMjMsNiBAQAogICAgIGlmIChiYXNlID09IE5VTEwpIHsKICAgICAgICAgZ290byBlcnJvcjsKICAgICB9Ci0gICAgaWYgKCFQeVR5cGVfSGFzRmVhdHVyZShiYXNlLCBQeV9UUEZMQUdTX0JBU0VUWVBFKSkgewotICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgInR5cGUgJyUuMTAwcycgaXMgbm90IGFuIGFjY2VwdGFibGUgYmFzZSB0eXBlIiwKLSAgICAgICAgICAgICAgICAgICAgIGJhc2UtPnRwX25hbWUpOwotICAgICAgICBnb3RvIGVycm9yOwotICAgIH0KIAogICAgIGRpY3QgPSBQeURpY3RfQ29weShvcmlnX2RpY3QpOwogICAgIGlmIChkaWN0ID09IE5VTEwpCkBAIC0yMTA4LDcgKzIzNzEsNyBAQAogICAgICAgICAgICAgaWYgKCF2YWxpZF9pZGVudGlmaWVyKHRtcCkpCiAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIGFzc2VydChQeVVuaWNvZGVfQ2hlY2sodG1wKSk7Ci0gICAgICAgICAgICBpZiAoUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcodG1wLCAiX19kaWN0X18iKSA9PSAwKSB7CisgICAgICAgICAgICBpZiAoX1B5VW5pY29kZV9Db21wYXJlV2l0aElkKHRtcCwgJlB5SWRfX19kaWN0X18pID09IDApIHsKICAgICAgICAgICAgICAgICBpZiAoIW1heV9hZGRfZGljdCB8fCBhZGRfZGljdCkgewogICAgICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgIl9fZGljdF9fIHNsb3QgZGlzYWxsb3dlZDogIgpAQCAtMjEzOSw3ICsyNDAyLDcgQEAKICAgICAgICAgZm9yIChpID0gaiA9IDA7IGkgPCBuc2xvdHM7IGkrKykgewogICAgICAgICAgICAgdG1wID0gUHlUdXBsZV9HRVRfSVRFTShzbG90cywgaSk7CiAgICAgICAgICAgICBpZiAoKGFkZF9kaWN0ICYmCi0gICAgICAgICAgICAgICAgIFB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKHRtcCwgIl9fZGljdF9fIikgPT0gMCkgfHwKKyAgICAgICAgICAgICAgICAgX1B5VW5pY29kZV9Db21wYXJlV2l0aElkKHRtcCwgJlB5SWRfX19kaWN0X18pID09IDApIHx8CiAgICAgICAgICAgICAgICAgKGFkZF93ZWFrICYmCiAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKHRtcCwgIl9fd2Vha3JlZl9fIikgPT0gMCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC0yMjEwLDcgKzI0NzMsNyBAQAogCiAgICAgLyogSW5pdGlhbGl6ZSB0cF9mbGFncyAqLwogICAgIHR5cGUtPnRwX2ZsYWdzID0gUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19IRUFQVFlQRSB8Ci0gICAgICAgIFB5X1RQRkxBR1NfQkFTRVRZUEU7CisgICAgICAgIFB5X1RQRkxBR1NfQkFTRVRZUEUgfCBQeV9UUEZMQUdTX0hBVkVfRklOQUxJWkU7CiAgICAgaWYgKGJhc2UtPnRwX2ZsYWdzICYgUHlfVFBGTEFHU19IQVZFX0dDKQogICAgICAgICB0eXBlLT50cF9mbGFncyB8PSBQeV9UUEZMQUdTX0hBVkVfR0M7CiAKQEAgLTIyODAsOCArMjU0MywxMCBAQAogICAgICAgICAgICAgLyogU2lsZW50bHkgdHJ1bmNhdGUgdGhlIGRvY3N0cmluZyBpZiBpdCBjb250YWlucyBudWxsIGJ5dGVzLiAqLwogICAgICAgICAgICAgbGVuID0gc3RybGVuKGRvY19zdHIpOwogICAgICAgICAgICAgdHBfZG9jID0gKGNoYXIgKilQeU9iamVjdF9NQUxMT0MobGVuICsgMSk7Ci0gICAgICAgICAgICBpZiAodHBfZG9jID09IE5VTEwpCisgICAgICAgICAgICBpZiAodHBfZG9jID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBtZW1jcHkodHBfZG9jLCBkb2Nfc3RyLCBsZW4gKyAxKTsKICAgICAgICAgICAgIHR5cGUtPnRwX2RvYyA9IHRwX2RvYzsKICAgICAgICAgfQpAQCAtMjMyNSw5ICsyNTkwLDYgQEAKICAgICAgICAgICAgIHR5cGUtPnRwX2RpY3RvZmZzZXQgPSBzbG90b2Zmc2V0OwogICAgICAgICBzbG90b2Zmc2V0ICs9IHNpemVvZihQeU9iamVjdCAqKTsKICAgICB9Ci0gICAgaWYgKHR5cGUtPnRwX2RpY3RvZmZzZXQpIHsKLSAgICAgICAgZXQtPmh0X2NhY2hlZF9rZXlzID0gX1B5RGljdF9OZXdLZXlzRm9yQ2xhc3MoKTsKLSAgICB9CiAgICAgaWYgKGFkZF93ZWFrKSB7CiAgICAgICAgIGFzc2VydCghYmFzZS0+dHBfaXRlbXNpemUpOwogICAgICAgICB0eXBlLT50cF93ZWFrbGlzdG9mZnNldCA9IHNsb3RvZmZzZXQ7CkBAIC0yMzc3LDYgKzI2MzksMTAgQEAKICAgICAvKiBQdXQgdGhlIHByb3BlciBzbG90cyBpbiBwbGFjZSAqLwogICAgIGZpeHVwX3Nsb3RfZGlzcGF0Y2hlcnModHlwZSk7CiAKKyAgICBpZiAodHlwZS0+dHBfZGljdG9mZnNldCkgeworICAgICAgICBldC0+aHRfY2FjaGVkX2tleXMgPSBfUHlEaWN0X05ld0tleXNGb3JDbGFzcygpOworICAgIH0KKwogICAgIFB5X0RFQ1JFRihkaWN0KTsKICAgICByZXR1cm4gKFB5T2JqZWN0ICopdHlwZTsKIApAQCAtMjQwMSw3ICsyNjY3LDcgQEAKICAgICBjaGFyICpzOwogICAgIGNoYXIgKnJlc19zdGFydCA9IChjaGFyKilyZXM7CiAgICAgUHlUeXBlX1Nsb3QgKnNsb3Q7Ci0gICAgCisKICAgICAvKiBTZXQgdGhlIHR5cGUgbmFtZSBhbmQgcXVhbG5hbWUgKi8KICAgICBzID0gc3RycmNocihzcGVjLT5uYW1lLCAnLicpOwogICAgIGlmIChzID09IE5VTEwpCkBAIC0yNDIyLDcgKzI2ODgsNyBAQAogICAgIHR5cGUtPnRwX25hbWUgPSBzcGVjLT5uYW1lOwogICAgIGlmICghdHlwZS0+dHBfbmFtZSkKICAgICAgICAgZ290byBmYWlsOwotICAgIAorCiAgICAgLyogQWRqdXN0IGZvciBlbXB0eSB0dXBsZSBiYXNlcyAqLwogICAgIGlmICghYmFzZXMpIHsKICAgICAgICAgYmFzZSA9ICZQeUJhc2VPYmplY3RfVHlwZTsKQEAgLTI0ODIsMTcgKzI3NDgsMTcgQEAKICAgICAgICAgLyogbmVlZCB0byBtYWtlIGEgY29weSBvZiB0aGUgZG9jc3RyaW5nIHNsb3QsIHdoaWNoIHVzdWFsbHkKICAgICAgICAgICAgcG9pbnRzIHRvIGEgc3RhdGljIHN0cmluZyBsaXRlcmFsICovCiAgICAgICAgIGlmIChzbG90LT5zbG90ID09IFB5X3RwX2RvYykgewotICAgICAgICAgICAgc2l6ZV90IGxlbiA9IHN0cmxlbihzbG90LT5wZnVuYykrMTsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIgKm9sZF9kb2MgPSBfUHlUeXBlX0RvY1dpdGhvdXRTaWduYXR1cmUodHlwZS0+dHBfbmFtZSwgc2xvdC0+cGZ1bmMpOworICAgICAgICAgICAgc2l6ZV90IGxlbiA9IHN0cmxlbihvbGRfZG9jKSsxOwogICAgICAgICAgICAgY2hhciAqdHBfZG9jID0gUHlPYmplY3RfTUFMTE9DKGxlbik7Ci0gICAgICAgICAgICBpZiAodHBfZG9jID09IE5VTEwpCisgICAgICAgICAgICBpZiAodHBfZG9jID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKLSAgICAgICAgICAgIG1lbWNweSh0cF9kb2MsIHNsb3QtPnBmdW5jLCBsZW4pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbWVtY3B5KHRwX2RvYywgb2xkX2RvYywgbGVuKTsKICAgICAgICAgICAgIHR5cGUtPnRwX2RvYyA9IHRwX2RvYzsKICAgICAgICAgfQogICAgIH0KLSAgICBpZiAodHlwZS0+dHBfZGljdG9mZnNldCkgewotICAgICAgICByZXMtPmh0X2NhY2hlZF9rZXlzID0gX1B5RGljdF9OZXdLZXlzRm9yQ2xhc3MoKTsKLSAgICB9CiAgICAgaWYgKHR5cGUtPnRwX2RlYWxsb2MgPT0gTlVMTCkgewogICAgICAgICAvKiBJdCdzIGEgaGVhcCB0eXBlLCBzbyBuZWVkcyB0aGUgaGVhcCB0eXBlcycgZGVhbGxvYy4KICAgICAgICAgICAgc3VidHlwZV9kZWFsbG9jIHdpbGwgY2FsbCB0aGUgYmFzZSB0eXBlJ3MgdHBfZGVhbGxvYywgaWYKQEAgLTI1MDMsMTAgKzI3NjksMTQgQEAKICAgICBpZiAoUHlUeXBlX1JlYWR5KHR5cGUpIDwgMCkKICAgICAgICAgZ290byBmYWlsOwogCisgICAgaWYgKHR5cGUtPnRwX2RpY3RvZmZzZXQpIHsKKyAgICAgICAgcmVzLT5odF9jYWNoZWRfa2V5cyA9IF9QeURpY3RfTmV3S2V5c0ZvckNsYXNzKCk7CisgICAgfQorCiAgICAgLyogU2V0IHR5cGUuX19tb2R1bGVfXyAqLwogICAgIHMgPSBzdHJyY2hyKHNwZWMtPm5hbWUsICcuJyk7CiAgICAgaWYgKHMgIT0gTlVMTCkKLSAgICAgICAgX1B5RGljdF9TZXRJdGVtSWQodHlwZS0+dHBfZGljdCwgJlB5SWRfX19tb2R1bGVfXywgCisgICAgICAgIF9QeURpY3RfU2V0SXRlbUlkKHR5cGUtPnRwX2RpY3QsICZQeUlkX19fbW9kdWxlX18sCiAgICAgICAgICAgICBQeVVuaWNvZGVfRnJvbVN0cmluZ0FuZFNpemUoCiAgICAgICAgICAgICAgICAgc3BlYy0+bmFtZSwgKFB5X3NzaXplX3QpKHMgLSBzcGVjLT5uYW1lKSkpOwogCkBAIC0yNTIzLDYgKzI3OTMsMTkgQEAKICAgICByZXR1cm4gUHlUeXBlX0Zyb21TcGVjV2l0aEJhc2VzKHNwZWMsIE5VTEwpOwogfQogCit2b2lkICoKK1B5VHlwZV9HZXRTbG90KFB5VHlwZU9iamVjdCAqdHlwZSwgaW50IHNsb3QpCit7CisgICAgaWYgKCFQeVR5cGVfSGFzRmVhdHVyZSh0eXBlLCBQeV9UUEZMQUdTX0hFQVBUWVBFKSkgeworICAgICAgICBQeUVycl9CYWRJbnRlcm5hbENhbGwoKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmIChzbG90ID49IFB5X0FSUkFZX0xFTkdUSChzbG90b2Zmc2V0cykpIHsKKyAgICAgICAgLyogRXh0ZW5zaW9uIG1vZHVsZSByZXF1ZXN0aW5nIHNsb3QgZnJvbSBhIGZ1dHVyZSB2ZXJzaW9uICovCisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXR1cm4gICoodm9pZCoqKSgoKGNoYXIqKXR5cGUpICsgc2xvdG9mZnNldHNbc2xvdF0pOworfQogCiAvKiBJbnRlcm5hbCBBUEkgdG8gbG9vayBmb3IgYSBuYW1lIHRocm91Z2ggdGhlIE1STy4KICAgIFRoaXMgcmV0dXJucyBhIGJvcnJvd2VkIHJlZmVyZW5jZSwgYW5kIGRvZXNuJ3Qgc2V0IGFuIGV4Y2VwdGlvbiEgKi8KQEAgLTI2OTUsMTAgKzI5NzgsMTQgQEAKIHR5cGVfZGVhbGxvYyhQeVR5cGVPYmplY3QgKnR5cGUpCiB7CiAgICAgUHlIZWFwVHlwZU9iamVjdCAqZXQ7CisgICAgUHlPYmplY3QgKnRwLCAqdmFsLCAqdGI7CiAKICAgICAvKiBBc3NlcnQgdGhpcyBpcyBhIGhlYXAtYWxsb2NhdGVkIHR5cGUgb2JqZWN0ICovCiAgICAgYXNzZXJ0KHR5cGUtPnRwX2ZsYWdzICYgUHlfVFBGTEFHU19IRUFQVFlQRSk7CiAgICAgX1B5T2JqZWN0X0dDX1VOVFJBQ0sodHlwZSk7CisgICAgUHlFcnJfRmV0Y2goJnRwLCAmdmFsLCAmdGIpOworICAgIHJlbW92ZV9hbGxfc3ViY2xhc3Nlcyh0eXBlLCB0eXBlLT50cF9iYXNlcyk7CisgICAgUHlFcnJfUmVzdG9yZSh0cCwgdmFsLCB0Yik7CiAgICAgUHlPYmplY3RfQ2xlYXJXZWFrUmVmcygoUHlPYmplY3QgKil0eXBlKTsKICAgICBldCA9IChQeUhlYXBUeXBlT2JqZWN0ICopdHlwZTsKICAgICBQeV9YREVDUkVGKHR5cGUtPnRwX2Jhc2UpOwpAQCAtMjcyMyw3ICszMDEwLDcgQEAKIHR5cGVfc3ViY2xhc3NlcyhQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICphcmdzX2lnbm9yZWQpCiB7CiAgICAgUHlPYmplY3QgKmxpc3QsICpyYXcsICpyZWY7Ci0gICAgUHlfc3NpemVfdCBpLCBuOworICAgIFB5X3NzaXplX3QgaTsKIAogICAgIGxpc3QgPSBQeUxpc3RfTmV3KDApOwogICAgIGlmIChsaXN0ID09IE5VTEwpCkBAIC0yNzMxLDEwICszMDE4LDkgQEAKICAgICByYXcgPSB0eXBlLT50cF9zdWJjbGFzc2VzOwogICAgIGlmIChyYXcgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIGxpc3Q7Ci0gICAgYXNzZXJ0KFB5TGlzdF9DaGVjayhyYXcpKTsKLSAgICBuID0gUHlMaXN0X0dFVF9TSVpFKHJhdyk7Ci0gICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotICAgICAgICByZWYgPSBQeUxpc3RfR0VUX0lURU0ocmF3LCBpKTsKKyAgICBhc3NlcnQoUHlEaWN0X0NoZWNrRXhhY3QocmF3KSk7CisgICAgaSA9IDA7CisgICAgd2hpbGUgKFB5RGljdF9OZXh0KHJhdywgJmksIE5VTEwsICZyZWYpKSB7CiAgICAgICAgIGFzc2VydChQeVdlYWtyZWZfQ2hlY2tSZWYocmVmKSk7CiAgICAgICAgIHJlZiA9IFB5V2Vha3JlZl9HRVRfT0JKRUNUKHJlZik7CiAgICAgICAgIGlmIChyZWYgIT0gUHlfTm9uZSkgewpAQCAtMjg2Nyw2ICszMTUzLDggQEAKIH07CiAKIFB5RG9jX1NUUlZBUih0eXBlX2RvYywKKy8qIHRoaXMgdGV4dCBzaWduYXR1cmUgY2Fubm90IGJlIGFjY3VyYXRlIHlldC4gIHdpbGwgZml4LiAgLS1sYXJyeSAqLworInR5cGUob2JqZWN0X29yX25hbWUsIGJhc2VzLCBkaWN0KVxuIgogInR5cGUob2JqZWN0KSAtPiB0aGUgb2JqZWN0J3MgdHlwZVxuIgogInR5cGUobmFtZSwgYmFzZXMsIGRpY3QpIC0+IGEgbmV3IHR5cGUiKTsKIApAQCAtMjkyMyw4ICszMjExLDggQEAKICAgICAgICAgICAgY2xhc3MncyBkaWN0OyB0aGUgY3ljbGUgd2lsbCBiZSBicm9rZW4gdGhhdCB3YXkuCiAKICAgICAgICB0cF9zdWJjbGFzc2VzOgotICAgICAgICAgICBBIGxpc3Qgb2Ygd2VhayByZWZlcmVuY2VzIGNhbid0IGJlIHBhcnQgb2YgYSBjeWNsZTsgYW5kCi0gICAgICAgICAgIGxpc3RzIGhhdmUgdGhlaXIgb3duIHRwX2NsZWFyLgorICAgICAgICAgICBBIGRpY3Qgb2Ygd2VhayByZWZlcmVuY2VzIGNhbid0IGJlIHBhcnQgb2YgYSBjeWNsZTsgYW5kCisgICAgICAgICAgIGRpY3RzIGhhdmUgdGhlaXIgb3duIHRwX2NsZWFyLgogCiAgICAgICAgc2xvdHMgKGluIFB5SGVhcFR5cGVPYmplY3QpOgogICAgICAgICAgICBBIHR1cGxlIG9mIHN0cmluZ3MgY2FuJ3QgYmUgcGFydCBvZiBhIGN5Y2xlLgpAQCAtMzE0MSw3ICszNDI5LDcgQEAKICAgICAgICAgUHlfWERFQ1JFRihtb2QpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgaWYgKG1vZCAhPSBOVUxMICYmIFB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKG1vZCwgImJ1aWx0aW5zIikpCisgICAgaWYgKG1vZCAhPSBOVUxMICYmIF9QeVVuaWNvZGVfQ29tcGFyZVdpdGhJZChtb2QsICZQeUlkX2J1aWx0aW5zKSkKICAgICAgICAgcnRuID0gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIjwlVS4lVSBvYmplY3QgYXQgJXA+IiwgbW9kLCBuYW1lLCBzZWxmKTsKICAgICBlbHNlCiAgICAgICAgIHJ0biA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0KCI8JXMgb2JqZWN0IGF0ICVwPiIsCkBAIC0zMTc4LDkgKzM0NjYsMTQgQEAKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIFB5X05FOgotICAgICAgICAvKiBCeSBkZWZhdWx0LCAhPSByZXR1cm5zIHRoZSBvcHBvc2l0ZSBvZiA9PSwKKyAgICAgICAgLyogQnkgZGVmYXVsdCwgX19uZV9fKCkgZGVsZWdhdGVzIHRvIF9fZXFfXygpIGFuZCBpbnZlcnRzIHRoZSByZXN1bHQsCiAgICAgICAgICAgIHVubGVzcyB0aGUgbGF0dGVyIHJldHVybnMgTm90SW1wbGVtZW50ZWQuICovCi0gICAgICAgIHJlcyA9IFB5T2JqZWN0X1JpY2hDb21wYXJlKHNlbGYsIG90aGVyLCBQeV9FUSk7CisgICAgICAgIGlmIChzZWxmLT5vYl90eXBlLT50cF9yaWNoY29tcGFyZSA9PSBOVUxMKSB7CisgICAgICAgICAgICByZXMgPSBQeV9Ob3RJbXBsZW1lbnRlZDsKKyAgICAgICAgICAgIFB5X0lOQ1JFRihyZXMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgcmVzID0gKCpzZWxmLT5vYl90eXBlLT50cF9yaWNoY29tcGFyZSkoc2VsZiwgb3RoZXIsIFB5X0VRKTsKICAgICAgICAgaWYgKHJlcyAhPSBOVUxMICYmIHJlcyAhPSBQeV9Ob3RJbXBsZW1lbnRlZCkgewogICAgICAgICAgICAgaW50IG9rID0gUHlPYmplY3RfSXNUcnVlKHJlcyk7CiAgICAgICAgICAgICBQeV9ERUNSRUYocmVzKTsKQEAgLTMzMTMsNyArMzYwNiw3IEBACiAgICAgICAgICAgICAgICAgICAgICAiX19jbGFzc19fIGFzc2lnbm1lbnQ6IG9ubHkgZm9yIGhlYXAgdHlwZXMiKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KLSAgICBpZiAoY29tcGF0aWJsZV9mb3JfYXNzaWdubWVudChuZXd0bywgb2xkdG8sICJfX2NsYXNzX18iKSkgeworICAgIGlmIChjb21wYXRpYmxlX2Zvcl9hc3NpZ25tZW50KG9sZHRvLCBuZXd0bywgIl9fY2xhc3NfXyIpKSB7CiAgICAgICAgIFB5X0lOQ1JFRihuZXd0byk7CiAgICAgICAgIFB5X1RZUEUoc2VsZikgPSBuZXd0bzsKICAgICAgICAgUHlfREVDUkVGKG9sZHRvKTsKQEAgLTMzNjYsMTUwICszNjU5LDQzOCBAQAogICAgIHJldHVybiBQeUltcG9ydF9JbXBvcnQoY29weXJlZ19zdHIpOwogfQogCi1zdGF0aWMgUHlPYmplY3QgKgotc2xvdG5hbWVzKFB5T2JqZWN0ICpjbHMpCitQeV9MT0NBTChQeU9iamVjdCAqKQorX1B5VHlwZV9HZXRTbG90TmFtZXMoUHlUeXBlT2JqZWN0ICpjbHMpCiB7Ci0gICAgUHlPYmplY3QgKmNsc2RpY3Q7CiAgICAgUHlPYmplY3QgKmNvcHlyZWc7CiAgICAgUHlPYmplY3QgKnNsb3RuYW1lczsKICAgICBfUHlfSURFTlRJRklFUihfX3Nsb3RuYW1lc19fKTsKICAgICBfUHlfSURFTlRJRklFUihfc2xvdG5hbWVzKTsKIAotICAgIGNsc2RpY3QgPSAoKFB5VHlwZU9iamVjdCAqKWNscyktPnRwX2RpY3Q7Ci0gICAgc2xvdG5hbWVzID0gX1B5RGljdF9HZXRJdGVtSWQoY2xzZGljdCwgJlB5SWRfX19zbG90bmFtZXNfXyk7Ci0gICAgaWYgKHNsb3RuYW1lcyAhPSBOVUxMICYmIFB5TGlzdF9DaGVjayhzbG90bmFtZXMpKSB7CisgICAgYXNzZXJ0KFB5VHlwZV9DaGVjayhjbHMpKTsKKworICAgIC8qIEdldCB0aGUgc2xvdCBuYW1lcyBmcm9tIHRoZSBjYWNoZSBpbiB0aGUgY2xhc3MgaWYgcG9zc2libGUuICovCisgICAgc2xvdG5hbWVzID0gX1B5RGljdF9HZXRJdGVtSWRXaXRoRXJyb3IoY2xzLT50cF9kaWN0LCAmUHlJZF9fX3Nsb3RuYW1lc19fKTsKKyAgICBpZiAoc2xvdG5hbWVzICE9IE5VTEwpIHsKKyAgICAgICAgaWYgKHNsb3RuYW1lcyAhPSBQeV9Ob25lICYmICFQeUxpc3RfQ2hlY2soc2xvdG5hbWVzKSkgeworICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiJS4yMDBzLl9fc2xvdG5hbWVzX18gc2hvdWxkIGJlIGEgbGlzdCBvciBOb25lLCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgIm5vdCAlLjIwMHMiLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNscy0+dHBfbmFtZSwgUHlfVFlQRShzbG90bmFtZXMpLT50cF9uYW1lKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CiAgICAgICAgIFB5X0lOQ1JFRihzbG90bmFtZXMpOwogICAgICAgICByZXR1cm4gc2xvdG5hbWVzOwogICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIC8qIFRoZSBjbGFzcyBkb2VzIG5vdCBoYXZlIHRoZSBzbG90IG5hbWVzIGNhY2hlZCB5ZXQuICovCisgICAgfQogCiAgICAgY29weXJlZyA9IGltcG9ydF9jb3B5cmVnKCk7CiAgICAgaWYgKGNvcHlyZWcgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBzbG90bmFtZXMgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKGNvcHlyZWcsICZQeUlkX19zbG90bmFtZXMsICJPIiwgY2xzKTsKKyAgICAvKiBVc2UgX3Nsb3RuYW1lcyBmdW5jdGlvbiBmcm9tIHRoZSBjb3B5cmVnIG1vZHVsZSB0byBmaW5kIHRoZSBzbG90cworICAgICAgIGJ5IHRoaXMgY2xhc3MgYW5kIGl0cyBiYXNlcy4gVGhpcyBmdW5jdGlvbiB3aWxsIGNhY2hlIHRoZSByZXN1bHQKKyAgICAgICBpbiBfX3Nsb3RuYW1lc19fLiAqLworICAgIHNsb3RuYW1lcyA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWRPYmpBcmdzKGNvcHlyZWcsICZQeUlkX19zbG90bmFtZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xzLCBOVUxMKTsKICAgICBQeV9ERUNSRUYoY29weXJlZyk7Ci0gICAgaWYgKHNsb3RuYW1lcyAhPSBOVUxMICYmCi0gICAgICAgIHNsb3RuYW1lcyAhPSBQeV9Ob25lICYmCi0gICAgICAgICFQeUxpc3RfQ2hlY2soc2xvdG5hbWVzKSkKLSAgICB7CisgICAgaWYgKHNsb3RuYW1lcyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChzbG90bmFtZXMgIT0gUHlfTm9uZSAmJiAhUHlMaXN0X0NoZWNrKHNsb3RuYW1lcykpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICJjb3B5cmVnLl9zbG90bmFtZXMgZGlkbid0IHJldHVybiBhIGxpc3Qgb3IgTm9uZSIpOworICAgICAgICAgICAgICAgICAgICAgICAgImNvcHlyZWcuX3Nsb3RuYW1lcyBkaWRuJ3QgcmV0dXJuIGEgbGlzdCBvciBOb25lIik7CiAgICAgICAgIFB5X0RFQ1JFRihzbG90bmFtZXMpOwotICAgICAgICBzbG90bmFtZXMgPSBOVUxMOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKICAgICByZXR1cm4gc2xvdG5hbWVzOwogfQogCi1zdGF0aWMgUHlPYmplY3QgKgotcmVkdWNlXzIoUHlPYmplY3QgKm9iaikKK1B5X0xPQ0FMKFB5T2JqZWN0ICopCitfUHlPYmplY3RfR2V0U3RhdGUoUHlPYmplY3QgKm9iaikKIHsKLSAgICBQeU9iamVjdCAqY2xzLCAqZ2V0bmV3YXJnczsKLSAgICBQeU9iamVjdCAqYXJncyA9IE5VTEwsICphcmdzMiA9IE5VTEw7Ci0gICAgUHlPYmplY3QgKmdldHN0YXRlID0gTlVMTCwgKnN0YXRlID0gTlVMTCwgKm5hbWVzID0gTlVMTDsKLSAgICBQeU9iamVjdCAqc2xvdHMgPSBOVUxMLCAqbGlzdGl0ZW1zID0gTlVMTCwgKmRpY3RpdGVtcyA9IE5VTEw7Ci0gICAgUHlPYmplY3QgKmNvcHlyZWcgPSBOVUxMLCAqbmV3b2JqID0gTlVMTCwgKnJlcyA9IE5VTEw7Ci0gICAgUHlfc3NpemVfdCBpLCBuOwotICAgIF9QeV9JREVOVElGSUVSKF9fZ2V0bmV3YXJnc19fKTsKKyAgICBQeU9iamVjdCAqc3RhdGU7CisgICAgUHlPYmplY3QgKmdldHN0YXRlOwogICAgIF9QeV9JREVOVElGSUVSKF9fZ2V0c3RhdGVfXyk7Ci0gICAgX1B5X0lERU5USUZJRVIoX19uZXdvYmpfXyk7Ci0KLSAgICBjbHMgPSAoUHlPYmplY3QgKikgUHlfVFlQRShvYmopOwotCi0gICAgZ2V0bmV3YXJncyA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF9fX2dldG5ld2FyZ3NfXyk7Ci0gICAgaWYgKGdldG5ld2FyZ3MgIT0gTlVMTCkgewotICAgICAgICBhcmdzID0gUHlPYmplY3RfQ2FsbE9iamVjdChnZXRuZXdhcmdzLCBOVUxMKTsKLSAgICAgICAgUHlfREVDUkVGKGdldG5ld2FyZ3MpOwotICAgICAgICBpZiAoYXJncyAhPSBOVUxMICYmICFQeVR1cGxlX0NoZWNrKGFyZ3MpKSB7Ci0gICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICJfX2dldG5ld2FyZ3NfXyBzaG91bGQgcmV0dXJuIGEgdHVwbGUsICIKLSAgICAgICAgICAgICAgICAibm90ICclLjIwMHMnIiwgUHlfVFlQRShhcmdzKS0+dHBfbmFtZSk7Ci0gICAgICAgICAgICBnb3RvIGVuZDsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgUHlFcnJfQ2xlYXIoKTsKLSAgICAgICAgYXJncyA9IFB5VHVwbGVfTmV3KDApOwotICAgIH0KLSAgICBpZiAoYXJncyA9PSBOVUxMKQotICAgICAgICBnb3RvIGVuZDsKIAogICAgIGdldHN0YXRlID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX19fZ2V0c3RhdGVfXyk7Ci0gICAgaWYgKGdldHN0YXRlICE9IE5VTEwpIHsKKyAgICBpZiAoZ2V0c3RhdGUgPT0gTlVMTCkgeworICAgICAgICBQeU9iamVjdCAqc2xvdG5hbWVzOworCisgICAgICAgIGlmICghUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19BdHRyaWJ1dGVFcnJvcikpIHsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIFB5RXJyX0NsZWFyKCk7CisKKyAgICAgICAgeworICAgICAgICAgICAgUHlPYmplY3QgKipkaWN0OworICAgICAgICAgICAgZGljdCA9IF9QeU9iamVjdF9HZXREaWN0UHRyKG9iaik7CisgICAgICAgICAgICAvKiBJdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBvYmplY3QncyBkaWN0IGlzIG5vdCBpbml0aWFsaXplZAorICAgICAgICAgICAgICAgeWV0LiBJbiB0aGlzIGNhc2UsIHdlIHdpbGwgcmV0dXJuIE5vbmUgZm9yIHRoZSBzdGF0ZS4KKyAgICAgICAgICAgICAgIFdlIGFsc28gcmV0dXJuIE5vbmUgaWYgdGhlIGRpY3QgaXMgZW1wdHkgdG8gbWFrZSB0aGUgYmVoYXZpb3IKKyAgICAgICAgICAgICAgIGNvbnNpc3RlbnQgcmVnYXJkbGVzcyB3aGV0aGVyIHRoZSBkaWN0IHdhcyBpbml0aWFsaXplZCBvciBub3QuCisgICAgICAgICAgICAgICBUaGlzIG1ha2UgdW5pdCB0ZXN0aW5nIGVhc2llci4gKi8KKyAgICAgICAgICAgIGlmIChkaWN0ICE9IE5VTEwgJiYgKmRpY3QgIT0gTlVMTCAmJiBQeURpY3RfU2l6ZSgqZGljdCkgPiAwKSB7CisgICAgICAgICAgICAgICAgc3RhdGUgPSAqZGljdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHN0YXRlID0gUHlfTm9uZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFB5X0lOQ1JFRihzdGF0ZSk7CisgICAgICAgIH0KKworICAgICAgICBzbG90bmFtZXMgPSBfUHlUeXBlX0dldFNsb3ROYW1lcyhQeV9UWVBFKG9iaikpOworICAgICAgICBpZiAoc2xvdG5hbWVzID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihzdGF0ZSk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorCisgICAgICAgIGFzc2VydChzbG90bmFtZXMgPT0gUHlfTm9uZSB8fCBQeUxpc3RfQ2hlY2soc2xvdG5hbWVzKSk7CisgICAgICAgIGlmIChzbG90bmFtZXMgIT0gUHlfTm9uZSAmJiBQeV9TSVpFKHNsb3RuYW1lcykgPiAwKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqc2xvdHM7CisgICAgICAgICAgICBQeV9zc2l6ZV90IHNsb3RuYW1lc19zaXplLCBpOworCisgICAgICAgICAgICBzbG90cyA9IFB5RGljdF9OZXcoKTsKKyAgICAgICAgICAgIGlmIChzbG90cyA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKHNsb3RuYW1lcyk7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKHN0YXRlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc2xvdG5hbWVzX3NpemUgPSBQeV9TSVpFKHNsb3RuYW1lcyk7CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc2xvdG5hbWVzX3NpemU7IGkrKykgeworICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpuYW1lLCAqdmFsdWU7CisKKyAgICAgICAgICAgICAgICBuYW1lID0gUHlMaXN0X0dFVF9JVEVNKHNsb3RuYW1lcywgaSk7CisgICAgICAgICAgICAgICAgUHlfSU5DUkVGKG5hbWUpOworICAgICAgICAgICAgICAgIHZhbHVlID0gUHlPYmplY3RfR2V0QXR0cihvYmosIG5hbWUpOworICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihuYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0F0dHJpYnV0ZUVycm9yKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAvKiBJdCBpcyBub3QgYW4gZXJyb3IgaWYgdGhlIGF0dHJpYnV0ZSBpcyBub3QgcHJlc2VudC4gKi8KKyAgICAgICAgICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGludCBlcnIgPSBQeURpY3RfU2V0SXRlbShzbG90cywgbmFtZSwgdmFsdWUpOworICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYobmFtZSk7CisgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvKiBUaGUgbGlzdCBpcyBzdG9yZWQgb24gdGhlIGNsYXNzIHNvIGl0IG1heSBtdXRhdGVzIHdoaWxlIHdlCisgICAgICAgICAgICAgICAgICAgaXRlcmF0ZSBvdmVyIGl0ICovCisgICAgICAgICAgICAgICAgaWYgKHNsb3RuYW1lc19zaXplICE9IFB5X1NJWkUoc2xvdG5hbWVzKSkgeworICAgICAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfUnVudGltZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl9fc2xvdHNuYW1lX18gY2hhbmdlZCBzaXplIGR1cmluZyBpdGVyYXRpb24iKTsKKyAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvKiBXZSBoYW5kbGUgZXJyb3JzIHdpdGhpbiB0aGUgbG9vcCBoZXJlLiAqLworICAgICAgICAgICAgICAgIGlmICgwKSB7CisgICAgICAgICAgICAgICAgICBlcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHNsb3RuYW1lcyk7CisgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihzbG90cyk7CisgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihzdGF0ZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogSWYgd2UgZm91bmQgc29tZSBzbG90IGF0dHJpYnV0ZXMsIHBhY2sgdGhlbSBpbiBhIHR1cGxlIGFsb25nCisgICAgICAgICAgICAgICB0aGUgb3JnaW5hbCBhdHRyaWJ1dGUgZGljdGlvbmFyeS4gKi8KKyAgICAgICAgICAgIGlmIChQeURpY3RfU2l6ZShzbG90cykgPiAwKSB7CisgICAgICAgICAgICAgICAgUHlPYmplY3QgKnN0YXRlMjsKKworICAgICAgICAgICAgICAgIHN0YXRlMiA9IFB5VHVwbGVfUGFjaygyLCBzdGF0ZSwgc2xvdHMpOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihzdGF0ZSk7CisgICAgICAgICAgICAgICAgaWYgKHN0YXRlMiA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihzbG90bmFtZXMpOworICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoc2xvdHMpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc3RhdGUgPSBzdGF0ZTI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBQeV9ERUNSRUYoc2xvdHMpOworICAgICAgICB9CisgICAgICAgIFB5X0RFQ1JFRihzbG90bmFtZXMpOworICAgIH0KKyAgICBlbHNlIHsgLyogZ2V0c3RhdGUgIT0gTlVMTCAqLwogICAgICAgICBzdGF0ZSA9IFB5T2JqZWN0X0NhbGxPYmplY3QoZ2V0c3RhdGUsIE5VTEwpOwogICAgICAgICBQeV9ERUNSRUYoZ2V0c3RhdGUpOwogICAgICAgICBpZiAoc3RhdGUgPT0gTlVMTCkKLSAgICAgICAgICAgIGdvdG8gZW5kOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIGVsc2UgewotICAgICAgICBQeU9iamVjdCAqKmRpY3Q7Ci0gICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgICAgIGRpY3QgPSBfUHlPYmplY3RfR2V0RGljdFB0cihvYmopOwotICAgICAgICBpZiAoZGljdCAmJiAqZGljdCkKLSAgICAgICAgICAgIHN0YXRlID0gKmRpY3Q7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHN0YXRlID0gUHlfTm9uZTsKLSAgICAgICAgUHlfSU5DUkVGKHN0YXRlKTsKLSAgICAgICAgbmFtZXMgPSBzbG90bmFtZXMoY2xzKTsKLSAgICAgICAgaWYgKG5hbWVzID09IE5VTEwpCi0gICAgICAgICAgICBnb3RvIGVuZDsKLSAgICAgICAgaWYgKG5hbWVzICE9IFB5X05vbmUgJiYgUHlMaXN0X0dFVF9TSVpFKG5hbWVzKSA+IDApIHsKLSAgICAgICAgICAgIGFzc2VydChQeUxpc3RfQ2hlY2sobmFtZXMpKTsKLSAgICAgICAgICAgIHNsb3RzID0gUHlEaWN0X05ldygpOwotICAgICAgICAgICAgaWYgKHNsb3RzID09IE5VTEwpCi0gICAgICAgICAgICAgICAgZ290byBlbmQ7Ci0gICAgICAgICAgICBuID0gMDsKLSAgICAgICAgICAgIC8qIENhbid0IHByZS1jb21wdXRlIHRoZSBsaXN0IHNpemU7IHRoZSBsaXN0Ci0gICAgICAgICAgICAgICBpcyBzdG9yZWQgb24gdGhlIGNsYXNzIHNvIGFjY2Vzc2libGUgdG8gb3RoZXIKLSAgICAgICAgICAgICAgIHRocmVhZHMsIHdoaWNoIG1heSBiZSBydW4gYnkgREVDUkVGICovCi0gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgUHlMaXN0X0dFVF9TSVpFKG5hbWVzKTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgUHlPYmplY3QgKm5hbWUsICp2YWx1ZTsKLSAgICAgICAgICAgICAgICBuYW1lID0gUHlMaXN0X0dFVF9JVEVNKG5hbWVzLCBpKTsKLSAgICAgICAgICAgICAgICB2YWx1ZSA9IFB5T2JqZWN0X0dldEF0dHIob2JqLCBuYW1lKTsKLSAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IGVyciA9IFB5RGljdF9TZXRJdGVtKHNsb3RzLCBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUpOwotICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYodmFsdWUpOwotICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKQotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBlbmQ7Ci0gICAgICAgICAgICAgICAgICAgIG4rKzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAobikgewotICAgICAgICAgICAgICAgIHN0YXRlID0gUHlfQnVpbGRWYWx1ZSgiKE5PKSIsIHN0YXRlLCBzbG90cyk7Ci0gICAgICAgICAgICAgICAgaWYgKHN0YXRlID09IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgIGdvdG8gZW5kOwotICAgICAgICAgICAgfQorCisgICAgcmV0dXJuIHN0YXRlOworfQorCitQeV9MT0NBTChpbnQpCitfUHlPYmplY3RfR2V0TmV3QXJndW1lbnRzKFB5T2JqZWN0ICpvYmosIFB5T2JqZWN0ICoqYXJncywgUHlPYmplY3QgKiprd2FyZ3MpCit7CisgICAgUHlPYmplY3QgKmdldG5ld2FyZ3MsICpnZXRuZXdhcmdzX2V4OworICAgIF9QeV9JREVOVElGSUVSKF9fZ2V0bmV3YXJnc19leF9fKTsKKyAgICBfUHlfSURFTlRJRklFUihfX2dldG5ld2FyZ3NfXyk7CisKKyAgICBpZiAoYXJncyA9PSBOVUxMIHx8IGt3YXJncyA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX0JhZEludGVybmFsQ2FsbCgpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgLyogV2UgZmlyc3QgYXR0ZW1wdCB0byBmZXRjaCB0aGUgYXJndW1lbnRzIGZvciBfX25ld19fIGJ5IGNhbGxpbmcKKyAgICAgICBfX2dldG5ld2FyZ3NfZXhfXyBvbiB0aGUgb2JqZWN0LiAqLworICAgIGdldG5ld2FyZ3NfZXggPSBfUHlPYmplY3RfTG9va3VwU3BlY2lhbChvYmosICZQeUlkX19fZ2V0bmV3YXJnc19leF9fKTsKKyAgICBpZiAoZ2V0bmV3YXJnc19leCAhPSBOVUxMKSB7CisgICAgICAgIFB5T2JqZWN0ICpuZXdhcmdzID0gUHlPYmplY3RfQ2FsbE9iamVjdChnZXRuZXdhcmdzX2V4LCBOVUxMKTsKKyAgICAgICAgUHlfREVDUkVGKGdldG5ld2FyZ3NfZXgpOworICAgICAgICBpZiAobmV3YXJncyA9PSBOVUxMKSB7CisgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KKyAgICAgICAgaWYgKCFQeVR1cGxlX0NoZWNrKG5ld2FyZ3MpKSB7CisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICJfX2dldG5ld2FyZ3NfZXhfXyBzaG91bGQgcmV0dXJuIGEgdHVwbGUsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAibm90ICclLjIwMHMnIiwgUHlfVFlQRShuZXdhcmdzKS0+dHBfbmFtZSk7CisgICAgICAgICAgICBQeV9ERUNSRUYobmV3YXJncyk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgaWYgKFB5X1NJWkUobmV3YXJncykgIT0gMikgeworICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIl9fZ2V0bmV3YXJnc19leF9fIHNob3VsZCByZXR1cm4gYSB0dXBsZSBvZiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgImxlbmd0aCAyLCBub3QgJXpkIiwgUHlfU0laRShuZXdhcmdzKSk7CisgICAgICAgICAgICBQeV9ERUNSRUYobmV3YXJncyk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgKmFyZ3MgPSBQeVR1cGxlX0dFVF9JVEVNKG5ld2FyZ3MsIDApOworICAgICAgICBQeV9JTkNSRUYoKmFyZ3MpOworICAgICAgICAqa3dhcmdzID0gUHlUdXBsZV9HRVRfSVRFTShuZXdhcmdzLCAxKTsKKyAgICAgICAgUHlfSU5DUkVGKCprd2FyZ3MpOworICAgICAgICBQeV9ERUNSRUYobmV3YXJncyk7CisKKyAgICAgICAgLyogWFhYIFdlIHNob3VsZCBwZXJoYXBzIGFsbG93IE5vbmUgdG8gYmUgcGFzc2VkIGhlcmUuICovCisgICAgICAgIGlmICghUHlUdXBsZV9DaGVjaygqYXJncykpIHsKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgImZpcnN0IGl0ZW0gb2YgdGhlIHR1cGxlIHJldHVybmVkIGJ5ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiX19nZXRuZXdhcmdzX2V4X18gbXVzdCBiZSBhIHR1cGxlLCBub3QgJyUuMjAwcyciLAorICAgICAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUoKmFyZ3MpLT50cF9uYW1lKTsKKyAgICAgICAgICAgIFB5X0NMRUFSKCphcmdzKTsKKyAgICAgICAgICAgIFB5X0NMRUFSKCprd2FyZ3MpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIGlmICghUHlEaWN0X0NoZWNrKCprd2FyZ3MpKSB7CisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICJzZWNvbmQgaXRlbSBvZiB0aGUgdHVwbGUgcmV0dXJuZWQgYnkgIgorICAgICAgICAgICAgICAgICAgICAgICAgICJfX2dldG5ld2FyZ3NfZXhfXyBtdXN0IGJlIGEgZGljdCwgbm90ICclLjIwMHMnIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKCprd2FyZ3MpLT50cF9uYW1lKTsKKyAgICAgICAgICAgIFB5X0NMRUFSKCphcmdzKTsKKyAgICAgICAgICAgIFB5X0NMRUFSKCprd2FyZ3MpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIHJldHVybiAwOworICAgIH0gZWxzZSBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgLyogVGhlIG9iamVjdCBkb2VzIG5vdCBoYXZlIF9fZ2V0bmV3YXJnc19leF9fIHNvIHdlIGZhbGxiYWNrIG9uIHVzaW5nCisgICAgICAgX19nZXRuZXdhcmdzX18gaW5zdGVhZC4gKi8KKyAgICBnZXRuZXdhcmdzID0gX1B5T2JqZWN0X0xvb2t1cFNwZWNpYWwob2JqLCAmUHlJZF9fX2dldG5ld2FyZ3NfXyk7CisgICAgaWYgKGdldG5ld2FyZ3MgIT0gTlVMTCkgeworICAgICAgICAqYXJncyA9IFB5T2JqZWN0X0NhbGxPYmplY3QoZ2V0bmV3YXJncywgTlVMTCk7CisgICAgICAgIFB5X0RFQ1JFRihnZXRuZXdhcmdzKTsKKyAgICAgICAgaWYgKCphcmdzID09IE5VTEwpIHsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIVB5VHVwbGVfQ2hlY2soKmFyZ3MpKSB7CisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICJfX2dldG5ld2FyZ3NfXyBzaG91bGQgcmV0dXJuIGEgdHVwbGUsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAibm90ICclLjIwMHMnIiwgUHlfVFlQRSgqYXJncyktPnRwX25hbWUpOworICAgICAgICAgICAgUHlfQ0xFQVIoKmFyZ3MpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgICprd2FyZ3MgPSBOVUxMOworICAgICAgICByZXR1cm4gMDsKKyAgICB9IGVsc2UgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIC8qIFRoZSBvYmplY3QgZG9lcyBub3QgaGF2ZSBfX2dldG5ld2FyZ3NfZXhfXyBhbmQgX19nZXRuZXdhcmdzX18uIFRoaXMgbWF5CisgICAgICAgbWVhbnMgX19uZXdfXyBkb2VzIG5vdCB0YWtlcyBhbnkgYXJndW1lbnRzIG9uIHRoaXMgb2JqZWN0LCBvciB0aGF0IHRoZQorICAgICAgIG9iamVjdCBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIHJlZHVjZSBwcm90b2NvbCBmb3IgcGlja2xpbmcgb3IKKyAgICAgICBjb3B5aW5nLiAqLworICAgICphcmdzID0gTlVMTDsKKyAgICAqa3dhcmdzID0gTlVMTDsKKyAgICByZXR1cm4gMDsKK30KKworUHlfTE9DQUwoaW50KQorX1B5T2JqZWN0X0dldEl0ZW1zSXRlcihQeU9iamVjdCAqb2JqLCBQeU9iamVjdCAqKmxpc3RpdGVtcywKKyAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKipkaWN0aXRlbXMpCit7CisgICAgaWYgKGxpc3RpdGVtcyA9PSBOVUxMIHx8IGRpY3RpdGVtcyA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX0JhZEludGVybmFsQ2FsbCgpOworICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCiAgICAgaWYgKCFQeUxpc3RfQ2hlY2sob2JqKSkgewotICAgICAgICBsaXN0aXRlbXMgPSBQeV9Ob25lOwotICAgICAgICBQeV9JTkNSRUYobGlzdGl0ZW1zKTsKKyAgICAgICAgKmxpc3RpdGVtcyA9IFB5X05vbmU7CisgICAgICAgIFB5X0lOQ1JFRigqbGlzdGl0ZW1zKTsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIGxpc3RpdGVtcyA9IFB5T2JqZWN0X0dldEl0ZXIob2JqKTsKLSAgICAgICAgaWYgKGxpc3RpdGVtcyA9PSBOVUxMKQotICAgICAgICAgICAgZ290byBlbmQ7CisgICAgICAgICpsaXN0aXRlbXMgPSBQeU9iamVjdF9HZXRJdGVyKG9iaik7CisgICAgICAgIGlmICgqbGlzdGl0ZW1zID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCiAgICAgaWYgKCFQeURpY3RfQ2hlY2sob2JqKSkgewotICAgICAgICBkaWN0aXRlbXMgPSBQeV9Ob25lOwotICAgICAgICBQeV9JTkNSRUYoZGljdGl0ZW1zKTsKKyAgICAgICAgKmRpY3RpdGVtcyA9IFB5X05vbmU7CisgICAgICAgIFB5X0lOQ1JFRigqZGljdGl0ZW1zKTsKICAgICB9CiAgICAgZWxzZSB7CisgICAgICAgIFB5T2JqZWN0ICppdGVtczsKICAgICAgICAgX1B5X0lERU5USUZJRVIoaXRlbXMpOwotICAgICAgICBQeU9iamVjdCAqaXRlbXMgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKG9iaiwgJlB5SWRfaXRlbXMsICIiKTsKLSAgICAgICAgaWYgKGl0ZW1zID09IE5VTEwpCi0gICAgICAgICAgICBnb3RvIGVuZDsKLSAgICAgICAgZGljdGl0ZW1zID0gUHlPYmplY3RfR2V0SXRlcihpdGVtcyk7CisKKyAgICAgICAgaXRlbXMgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkT2JqQXJncyhvYmosICZQeUlkX2l0ZW1zLCBOVUxMKTsKKyAgICAgICAgaWYgKGl0ZW1zID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5X0NMRUFSKCpsaXN0aXRlbXMpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgICpkaWN0aXRlbXMgPSBQeU9iamVjdF9HZXRJdGVyKGl0ZW1zKTsKICAgICAgICAgUHlfREVDUkVGKGl0ZW1zKTsKLSAgICAgICAgaWYgKGRpY3RpdGVtcyA9PSBOVUxMKQotICAgICAgICAgICAgZ290byBlbmQ7CisgICAgICAgIGlmICgqZGljdGl0ZW1zID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5X0NMRUFSKCpsaXN0aXRlbXMpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CiAgICAgfQogCisgICAgYXNzZXJ0KCpsaXN0aXRlbXMgIT0gTlVMTCAmJiAqZGljdGl0ZW1zICE9IE5VTEwpOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCityZWR1Y2VfNChQeU9iamVjdCAqb2JqKQoreworICAgIFB5T2JqZWN0ICphcmdzID0gTlVMTCwgKmt3YXJncyA9IE5VTEw7CisgICAgUHlPYmplY3QgKmNvcHlyZWc7CisgICAgUHlPYmplY3QgKm5ld29iaiwgKm5ld2FyZ3MsICpzdGF0ZSwgKmxpc3RpdGVtcywgKmRpY3RpdGVtczsKKyAgICBQeU9iamVjdCAqcmVzdWx0OworICAgIF9QeV9JREVOVElGSUVSKF9fbmV3b2JqX2V4X18pOworCisgICAgaWYgKFB5X1RZUEUob2JqKS0+dHBfbmV3ID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICJjYW4ndCBwaWNrbGUgJXMgb2JqZWN0cyIsCisgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKG9iaiktPnRwX25hbWUpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKF9QeU9iamVjdF9HZXROZXdBcmd1bWVudHMob2JqLCAmYXJncywgJmt3YXJncykgPCAwKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAoYXJncyA9PSBOVUxMKSB7CisgICAgICAgIGFyZ3MgPSBQeVR1cGxlX05ldygwKTsKKyAgICAgICAgaWYgKGFyZ3MgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAoa3dhcmdzID09IE5VTEwpIHsKKyAgICAgICAga3dhcmdzID0gUHlEaWN0X05ldygpOworICAgICAgICBpZiAoa3dhcmdzID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBjb3B5cmVnID0gaW1wb3J0X2NvcHlyZWcoKTsKKyAgICBpZiAoY29weXJlZyA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRihhcmdzKTsKKyAgICAgICAgUHlfREVDUkVGKGt3YXJncyk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBuZXdvYmogPSBfUHlPYmplY3RfR2V0QXR0cklkKGNvcHlyZWcsICZQeUlkX19fbmV3b2JqX2V4X18pOworICAgIFB5X0RFQ1JFRihjb3B5cmVnKTsKKyAgICBpZiAobmV3b2JqID09IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKGFyZ3MpOworICAgICAgICBQeV9ERUNSRUYoa3dhcmdzKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIG5ld2FyZ3MgPSBQeVR1cGxlX1BhY2soMywgUHlfVFlQRShvYmopLCBhcmdzLCBrd2FyZ3MpOworICAgIFB5X0RFQ1JFRihhcmdzKTsKKyAgICBQeV9ERUNSRUYoa3dhcmdzKTsKKyAgICBpZiAobmV3YXJncyA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRihuZXdvYmopOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgc3RhdGUgPSBfUHlPYmplY3RfR2V0U3RhdGUob2JqKTsKKyAgICBpZiAoc3RhdGUgPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYobmV3b2JqKTsKKyAgICAgICAgUHlfREVDUkVGKG5ld2FyZ3MpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKF9QeU9iamVjdF9HZXRJdGVtc0l0ZXIob2JqLCAmbGlzdGl0ZW1zLCAmZGljdGl0ZW1zKSA8IDApIHsKKyAgICAgICAgUHlfREVDUkVGKG5ld29iaik7CisgICAgICAgIFB5X0RFQ1JFRihuZXdhcmdzKTsKKyAgICAgICAgUHlfREVDUkVGKHN0YXRlKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgcmVzdWx0ID0gUHlUdXBsZV9QYWNrKDUsIG5ld29iaiwgbmV3YXJncywgc3RhdGUsIGxpc3RpdGVtcywgZGljdGl0ZW1zKTsKKyAgICBQeV9ERUNSRUYobmV3b2JqKTsKKyAgICBQeV9ERUNSRUYobmV3YXJncyk7CisgICAgUHlfREVDUkVGKHN0YXRlKTsKKyAgICBQeV9ERUNSRUYobGlzdGl0ZW1zKTsKKyAgICBQeV9ERUNSRUYoZGljdGl0ZW1zKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgUHlPYmplY3QgKgorcmVkdWNlXzIoUHlPYmplY3QgKm9iaikKK3sKKyAgICBQeU9iamVjdCAqY2xzOworICAgIFB5T2JqZWN0ICphcmdzID0gTlVMTCwgKmFyZ3MyID0gTlVMTCwgKmt3YXJncyA9IE5VTEw7CisgICAgUHlPYmplY3QgKnN0YXRlID0gTlVMTCwgKmxpc3RpdGVtcyA9IE5VTEwsICpkaWN0aXRlbXMgPSBOVUxMOworICAgIFB5T2JqZWN0ICpjb3B5cmVnID0gTlVMTCwgKm5ld29iaiA9IE5VTEwsICpyZXMgPSBOVUxMOworICAgIFB5X3NzaXplX3QgaSwgbjsKKyAgICBfUHlfSURFTlRJRklFUihfX25ld29ial9fKTsKKworICAgIGlmIChQeV9UWVBFKG9iaiktPnRwX25ldyA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAiY2FuJ3QgcGlja2xlICVzIG9iamVjdHMiLAorICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRShvYmopLT50cF9uYW1lKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmIChfUHlPYmplY3RfR2V0TmV3QXJndW1lbnRzKG9iaiwgJmFyZ3MsICZrd2FyZ3MpIDwgMCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKGFyZ3MgPT0gTlVMTCkgeworICAgICAgICBhc3NlcnQoa3dhcmdzID09IE5VTEwpOworICAgICAgICBhcmdzID0gUHlUdXBsZV9OZXcoMCk7CisgICAgICAgIGlmIChhcmdzID09IE5VTEwpIHsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKGt3YXJncyAhPSBOVUxMKSB7CisgICAgICAgIGlmIChQeURpY3RfU2l6ZShrd2FyZ3MpID4gMCkgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm11c3QgdXNlIHByb3RvY29sIDQgb3IgZ3JlYXRlciB0byBjb3B5IHRoaXMgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvYmplY3Q7IHNpbmNlIF9fZ2V0bmV3YXJnc19leF9fIHJldHVybmVkICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAia2V5d29yZCBhcmd1bWVudHMuIik7CisgICAgICAgICAgICBQeV9ERUNSRUYoYXJncyk7CisgICAgICAgICAgICBQeV9ERUNSRUYoa3dhcmdzKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIFB5X0NMRUFSKGt3YXJncyk7CisgICAgfQorCisgICAgc3RhdGUgPSBfUHlPYmplY3RfR2V0U3RhdGUob2JqKTsKKyAgICBpZiAoc3RhdGUgPT0gTlVMTCkKKyAgICAgICAgZ290byBlbmQ7CisKKyAgICBpZiAoX1B5T2JqZWN0X0dldEl0ZW1zSXRlcihvYmosICZsaXN0aXRlbXMsICZkaWN0aXRlbXMpIDwgMCkKKyAgICAgICAgZ290byBlbmQ7CisKICAgICBjb3B5cmVnID0gaW1wb3J0X2NvcHlyZWcoKTsKICAgICBpZiAoY29weXJlZyA9PSBOVUxMKQogICAgICAgICBnb3RvIGVuZDsKQEAgLTM1MjEsNiArNDEwMiw3IEBACiAgICAgYXJnczIgPSBQeVR1cGxlX05ldyhuKzEpOwogICAgIGlmIChhcmdzMiA9PSBOVUxMKQogICAgICAgICBnb3RvIGVuZDsKKyAgICBjbHMgPSAoUHlPYmplY3QgKikgUHlfVFlQRShvYmopOwogICAgIFB5X0lOQ1JFRihjbHMpOwogICAgIFB5VHVwbGVfU0VUX0lURU0oYXJnczIsIDAsIGNscyk7CiAgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewpAQCAtMzUzNCw5ICs0MTE2LDcgQEAKICAgZW5kOgogICAgIFB5X1hERUNSRUYoYXJncyk7CiAgICAgUHlfWERFQ1JFRihhcmdzMik7Ci0gICAgUHlfWERFQ1JFRihzbG90cyk7CiAgICAgUHlfWERFQ1JFRihzdGF0ZSk7Ci0gICAgUHlfWERFQ1JFRihuYW1lcyk7CiAgICAgUHlfWERFQ1JFRihsaXN0aXRlbXMpOwogICAgIFB5X1hERUNSRUYoZGljdGl0ZW1zKTsKICAgICBQeV9YREVDUkVGKGNvcHlyZWcpOwpAQCAtMzU2NCw3ICs0MTQ0LDkgQEAKIHsKICAgICBQeU9iamVjdCAqY29weXJlZywgKnJlczsKIAotICAgIGlmIChwcm90byA+PSAyKQorICAgIGlmIChwcm90byA+PSA0KQorICAgICAgICByZXR1cm4gcmVkdWNlXzQoc2VsZik7CisgICAgZWxzZSBpZiAocHJvdG8gPj0gMikKICAgICAgICAgcmV0dXJuIHJlZHVjZV8yKHNlbGYpOwogCiAgICAgY29weXJlZyA9IGltcG9ydF9jb3B5cmVnKCk7CkBAIC0zNjUyLDcgKzQyMzQsNyBAQAogCiAgICBjbGFzcyBvYmplY3Q6CiAgICAgICAgZGVmIF9fZm9ybWF0X18oc2VsZiwgZm9ybWF0X3NwZWMpOgotICAgICAgIHJldHVybiBmb3JtYXQoc3RyKHNlbGYpLCBmb3JtYXRfc3BlYykKKyAgICAgICAgICAgcmV0dXJuIGZvcm1hdChzdHIoc2VsZiksIGZvcm1hdF9zcGVjKQogKi8KIHN0YXRpYyBQeU9iamVjdCAqCiBvYmplY3RfZm9ybWF0KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKQEAgLTM2NjksMTYgKzQyNTEsOSBAQAogICAgICAgICAvKiBJc3N1ZSA3OTk0OiBJZiB3ZSdyZSBjb252ZXJ0aW5nIHRvIGEgc3RyaW5nLCB3ZQogICAgICAgICAgICBzaG91bGQgcmVqZWN0IGZvcm1hdCBzcGVjaWZpY2F0aW9ucyAqLwogICAgICAgICBpZiAoUHlVbmljb2RlX0dFVF9MRU5HVEgoZm9ybWF0X3NwZWMpID4gMCkgewotICAgICAgICAgICAgaWYgKFB5RXJyX1dhcm5FeChQeUV4Y19EZXByZWNhdGlvbldhcm5pbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvYmplY3QuX19mb3JtYXRfXyB3aXRoIGEgbm9uLWVtcHR5IGZvcm1hdCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdHJpbmcgaXMgZGVwcmVjYXRlZCIsIDEpIDwgMCkgewotICAgICAgICAgICAgICBnb3RvIGRvbmU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvKiBFdmVudHVhbGx5IHRoaXMgd2lsbCBiZWNvbWUgYW4gZXJyb3I6Ci0gICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKICAgICAgICAgICAgICAgICJub24tZW1wdHkgZm9ybWF0IHN0cmluZyBwYXNzZWQgdG8gb2JqZWN0Ll9fZm9ybWF0X18iKTsKLSAgICAgICAgICAgICAgIGdvdG8gZG9uZTsKLSAgICAgICAgICAgICovCisgICAgICAgICAgICBnb3RvIGRvbmU7CiAgICAgICAgIH0KIAogICAgICAgICByZXN1bHQgPSBQeU9iamVjdF9Gb3JtYXQoc2VsZl9hc19zdHIsIGZvcm1hdF9zcGVjKTsKQEAgLTM2OTgsNyArNDI3Myw3IEBACiAgICAgcmVzID0gMDsKICAgICBpc2l6ZSA9IHNlbGYtPm9iX3R5cGUtPnRwX2l0ZW1zaXplOwogICAgIGlmIChpc2l6ZSA+IDApCi0gICAgICAgIHJlcyA9IFB5X1NJWkUoc2VsZi0+b2JfdHlwZSkgKiBpc2l6ZTsKKyAgICAgICAgcmVzID0gUHlfU0laRShzZWxmKSAqIGlzaXplOwogICAgIHJlcyArPSBzZWxmLT5vYl90eXBlLT50cF9iYXNpY3NpemU7CiAKICAgICByZXR1cm4gUHlMb25nX0Zyb21Tc2l6ZV90KHJlcyk7CkBAIC0zNzg4LDggKzQzNjMsOCBAQAogICAgIFB5T2JqZWN0X0dlbmVyaWNHZXRBdHRyLCAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0YXR0cm8gKi8KICAgICBQeU9iamVjdF9HZW5lcmljU2V0QXR0ciwgICAgICAgICAgICAgICAgICAgIC8qIHRwX3NldGF0dHJvICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19idWZmZXIgKi8KLSAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0JBU0VUWVBFLCAvKiB0cF9mbGFncyAqLwotICAgIFB5RG9jX1NUUigiVGhlIG1vc3QgYmFzZSB0eXBlIiksICAgICAgICAgICAgLyogdHBfZG9jICovCisgICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19CQVNFVFlQRSwgICAvKiB0cF9mbGFncyAqLworICAgIFB5RG9jX1NUUigib2JqZWN0KClcbi0tXG5cblRoZSBtb3N0IGJhc2UgdHlwZSIpLCAgLyogdHBfZG9jICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF90cmF2ZXJzZSAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2xlYXIgKi8KICAgICBvYmplY3RfcmljaGNvbXBhcmUsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JpY2hjb21wYXJlICovCkBAIC0zODMzLDcgKzQ0MDgsNyBAQAogICAgICAgICAgICAgZGVzY3IgPSBQeURlc2NyX05ld0NsYXNzTWV0aG9kKHR5cGUsIG1ldGgpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKG1ldGgtPm1sX2ZsYWdzICYgTUVUSF9TVEFUSUMpIHsKLSAgICAgICAgICAgIFB5T2JqZWN0ICpjZnVuYyA9IFB5Q0Z1bmN0aW9uX05ldyhtZXRoLCAoUHlPYmplY3QqKXR5cGUpOworICAgICAgICAgIFB5T2JqZWN0ICpjZnVuYyA9IFB5Q0Z1bmN0aW9uX05ld0V4KG1ldGgsIChQeU9iamVjdCopdHlwZSwgTlVMTCk7CiAgICAgICAgICAgICBpZiAoY2Z1bmMgPT0gTlVMTCkKICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgICAgICBkZXNjciA9IFB5U3RhdGljTWV0aG9kX05ldyhjZnVuYyk7CkBAIC00MTAzLDYgKzQ2NzgsMTAgQEAKICAgICAgICAgQ09QWVNMT1QodHBfaW5pdCk7CiAgICAgICAgIENPUFlTTE9UKHRwX2FsbG9jKTsKICAgICAgICAgQ09QWVNMT1QodHBfaXNfZ2MpOworICAgICAgICBpZiAoKHR5cGUtPnRwX2ZsYWdzICYgUHlfVFBGTEFHU19IQVZFX0ZJTkFMSVpFKSAmJgorICAgICAgICAgICAgKGJhc2UtPnRwX2ZsYWdzICYgUHlfVFBGTEFHU19IQVZFX0ZJTkFMSVpFKSkgeworICAgICAgICAgICAgQ09QWVNMT1QodHBfZmluYWxpemUpOworICAgICAgICB9CiAgICAgICAgIGlmICgodHlwZS0+dHBfZmxhZ3MgJiBQeV9UUEZMQUdTX0hBVkVfR0MpID09CiAgICAgICAgICAgICAoYmFzZS0+dHBfZmxhZ3MgJiBQeV9UUEZMQUdTX0hBVkVfR0MpKSB7CiAgICAgICAgICAgICAvKiBUaGV5IGFncmVlIGFib3V0IGdjLiAqLwpAQCAtNDIxNSw5ICs0Nzk0LDggQEAKICAgICB9CiAKICAgICAvKiBDYWxjdWxhdGUgbWV0aG9kIHJlc29sdXRpb24gb3JkZXIgKi8KLSAgICBpZiAobXJvX2ludGVybmFsKHR5cGUpIDwgMCkgeworICAgIGlmIChtcm9faW50ZXJuYWwodHlwZSwgTlVMTCkgPCAwKQogICAgICAgICBnb3RvIGVycm9yOwotICAgIH0KIAogICAgIC8qIEluaGVyaXQgc3BlY2lhbCBmbGFncyBmcm9tIGRvbWluYW50IGJhc2UgKi8KICAgICBpZiAodHlwZS0+dHBfYmFzZSAhPSBOVUxMKQpAQCAtNDIzNCw2ICs0ODEyLDIzIEBACiAgICAgICAgICAgICBpbmhlcml0X3Nsb3RzKHR5cGUsIChQeVR5cGVPYmplY3QgKiliKTsKICAgICB9CiAKKyAgICAvKiBBbGwgYmFzZXMgb2Ygc3RhdGljYWxseSBhbGxvY2F0ZWQgdHlwZSBzaG91bGQgYmUgc3RhdGljYWxseSBhbGxvY2F0ZWQgKi8KKyAgICBpZiAoISh0eXBlLT50cF9mbGFncyAmIFB5X1RQRkxBR1NfSEVBUFRZUEUpKQorICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqYiA9IFB5VHVwbGVfR0VUX0lURU0oYmFzZXMsIGkpOworICAgICAgICAgICAgaWYgKFB5VHlwZV9DaGVjayhiKSAmJgorICAgICAgICAgICAgICAgICgoKFB5VHlwZU9iamVjdCAqKWIpLT50cF9mbGFncyAmIFB5X1RQRkxBR1NfSEVBUFRZUEUpKSB7CisgICAgICAgICAgICAgICAgY2hhciBidWZbMzAwXTsKKyAgICAgICAgICAgICAgICBQeU9TX3NucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSAnJS4xMDBzJyBpcyBub3QgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGJ1dCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaXRzIGJhc2UgdHlwZSAnJS4xMDBzJyBpcyBkeW5hbWljYWxseSBhbGxvY2F0ZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZS0+dHBfbmFtZSwgKChQeVR5cGVPYmplY3QgKiliKS0+dHBfbmFtZSk7CisgICAgICAgICAgICAgICAgaWYgKFB5RXJyX1dhcm4oUHlFeGNfRGVwcmVjYXRpb25XYXJuaW5nLCBidWYpIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCiAgICAgLyogU2FuaXR5IGNoZWNrIGZvciB0cF9mcmVlLiAqLwogICAgIGlmIChQeVR5cGVfSVNfR0ModHlwZSkgJiYgKHR5cGUtPnRwX2ZsYWdzICYgUHlfVFBGTEFHU19CQVNFVFlQRSkgJiYKICAgICAgICAgKHR5cGUtPnRwX2ZyZWUgPT0gTlVMTCB8fCB0eXBlLT50cF9mcmVlID09IFB5T2JqZWN0X0RlbCkpIHsKQEAgLTQyNTIsMTQgKzQ4NDcsMjAgQEAKICAgICAgKi8KICAgICBpZiAoX1B5RGljdF9HZXRJdGVtSWQodHlwZS0+dHBfZGljdCwgJlB5SWRfX19kb2NfXykgPT0gTlVMTCkgewogICAgICAgICBpZiAodHlwZS0+dHBfZG9jICE9IE5VTEwpIHsKLSAgICAgICAgICAgIFB5T2JqZWN0ICpkb2MgPSBQeVVuaWNvZGVfRnJvbVN0cmluZyh0eXBlLT50cF9kb2MpOworICAgICAgICAgICAgY29uc3QgY2hhciAqb2xkX2RvYyA9IF9QeVR5cGVfRG9jV2l0aG91dFNpZ25hdHVyZSh0eXBlLT50cF9uYW1lLAorICAgICAgICAgICAgICAgIHR5cGUtPnRwX2RvYyk7CisgICAgICAgICAgICBQeU9iamVjdCAqZG9jID0gUHlVbmljb2RlX0Zyb21TdHJpbmcob2xkX2RvYyk7CiAgICAgICAgICAgICBpZiAoZG9jID09IE5VTEwpCiAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKLSAgICAgICAgICAgIF9QeURpY3RfU2V0SXRlbUlkKHR5cGUtPnRwX2RpY3QsICZQeUlkX19fZG9jX18sIGRvYyk7CisgICAgICAgICAgICBpZiAoX1B5RGljdF9TZXRJdGVtSWQodHlwZS0+dHBfZGljdCwgJlB5SWRfX19kb2NfXywgZG9jKSA8IDApIHsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZG9jKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQogICAgICAgICAgICAgUHlfREVDUkVGKGRvYyk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBfUHlEaWN0X1NldEl0ZW1JZCh0eXBlLT50cF9kaWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlB5SWRfX19kb2NfXywgUHlfTm9uZSk7CisgICAgICAgICAgICBpZiAoX1B5RGljdF9TZXRJdGVtSWQodHlwZS0+dHBfZGljdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUHlJZF9fX2RvY19fLCBQeV9Ob25lKSA8IDApCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgfQogICAgIH0KIApAQCAtNDMwMywxMyArNDkwNCwxMSBAQAogICAgIC8qIFdhcm4gZm9yIGEgdHlwZSB0aGF0IGltcGxlbWVudHMgdHBfY29tcGFyZSAobm93IGtub3duIGFzCiAgICAgICAgdHBfcmVzZXJ2ZWQpIGJ1dCBub3QgdHBfcmljaGNvbXBhcmUuICovCiAgICAgaWYgKHR5cGUtPnRwX3Jlc2VydmVkICYmICF0eXBlLT50cF9yaWNoY29tcGFyZSkgewotICAgICAgICBpbnQgZXJyb3I7Ci0gICAgICAgIGVycm9yID0gUHlFcnJfV2FybkZvcm1hdChQeUV4Y19EZXByZWNhdGlvbldhcm5pbmcsIDEsCisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCiAgICAgICAgICAgICAiVHlwZSAlLjEwMHMgZGVmaW5lcyB0cF9yZXNlcnZlZCAoZm9ybWVybHkgdHBfY29tcGFyZSkgIgogICAgICAgICAgICAgImJ1dCBub3QgdHBfcmljaGNvbXBhcmUuIENvbXBhcmlzb25zIG1heSBub3QgYmVoYXZlIGFzIGludGVuZGVkLiIsCiAgICAgICAgICAgICB0eXBlLT50cF9uYW1lKTsKLSAgICAgICAgaWYgKGVycm9yID09IC0xKQotICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgZ290byBlcnJvcjsKICAgICB9CiAKICAgICAvKiBBbGwgZG9uZSAtLSBzZXQgdGhlIHJlYWR5IGZsYWcgKi8KQEAgLTQzMjYsNDkgKzQ5MjUsNzUgQEAKIHN0YXRpYyBpbnQKIGFkZF9zdWJjbGFzcyhQeVR5cGVPYmplY3QgKmJhc2UsIFB5VHlwZU9iamVjdCAqdHlwZSkKIHsKLSAgICBQeV9zc2l6ZV90IGk7Ci0gICAgaW50IHJlc3VsdDsKLSAgICBQeU9iamVjdCAqbGlzdCwgKnJlZiwgKm5ld29iajsKKyAgICBpbnQgcmVzdWx0ID0gLTE7CisgICAgUHlPYmplY3QgKmRpY3QsICprZXksICpuZXdvYmo7CiAKLSAgICBsaXN0ID0gYmFzZS0+dHBfc3ViY2xhc3NlczsKLSAgICBpZiAobGlzdCA9PSBOVUxMKSB7Ci0gICAgICAgIGJhc2UtPnRwX3N1YmNsYXNzZXMgPSBsaXN0ID0gUHlMaXN0X05ldygwKTsKLSAgICAgICAgaWYgKGxpc3QgPT0gTlVMTCkKKyAgICBkaWN0ID0gYmFzZS0+dHBfc3ViY2xhc3NlczsKKyAgICBpZiAoZGljdCA9PSBOVUxMKSB7CisgICAgICAgIGJhc2UtPnRwX3N1YmNsYXNzZXMgPSBkaWN0ID0gUHlEaWN0X05ldygpOworICAgICAgICBpZiAoZGljdCA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KLSAgICBhc3NlcnQoUHlMaXN0X0NoZWNrKGxpc3QpKTsKKyAgICBhc3NlcnQoUHlEaWN0X0NoZWNrRXhhY3QoZGljdCkpOworICAgIGtleSA9IFB5TG9uZ19Gcm9tVm9pZFB0cigodm9pZCAqKSB0eXBlKTsKKyAgICBpZiAoa2V5ID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKICAgICBuZXdvYmogPSBQeVdlYWtyZWZfTmV3UmVmKChQeU9iamVjdCAqKXR5cGUsIE5VTEwpOwotICAgIGkgPSBQeUxpc3RfR0VUX1NJWkUobGlzdCk7Ci0gICAgd2hpbGUgKC0taSA+PSAwKSB7Ci0gICAgICAgIHJlZiA9IFB5TGlzdF9HRVRfSVRFTShsaXN0LCBpKTsKLSAgICAgICAgYXNzZXJ0KFB5V2Vha3JlZl9DaGVja1JlZihyZWYpKTsKLSAgICAgICAgaWYgKFB5V2Vha3JlZl9HRVRfT0JKRUNUKHJlZikgPT0gUHlfTm9uZSkKLSAgICAgICAgICAgIHJldHVybiBQeUxpc3RfU2V0SXRlbShsaXN0LCBpLCBuZXdvYmopOworICAgIGlmIChuZXdvYmogIT0gTlVMTCkgeworICAgICAgICByZXN1bHQgPSBQeURpY3RfU2V0SXRlbShkaWN0LCBrZXksIG5ld29iaik7CisgICAgICAgIFB5X0RFQ1JFRihuZXdvYmopOwogICAgIH0KLSAgICByZXN1bHQgPSBQeUxpc3RfQXBwZW5kKGxpc3QsIG5ld29iaik7Ci0gICAgUHlfREVDUkVGKG5ld29iaik7CisgICAgUHlfREVDUkVGKGtleSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorc3RhdGljIGludAorYWRkX2FsbF9zdWJjbGFzc2VzKFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKmJhc2VzKQoreworICAgIGludCByZXMgPSAwOworCisgICAgaWYgKGJhc2VzKSB7CisgICAgICAgIFB5X3NzaXplX3QgaTsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IFB5VHVwbGVfR0VUX1NJWkUoYmFzZXMpOyBpKyspIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpiYXNlID0gUHlUdXBsZV9HRVRfSVRFTShiYXNlcywgaSk7CisgICAgICAgICAgICBpZiAoUHlUeXBlX0NoZWNrKGJhc2UpICYmCisgICAgICAgICAgICAgICAgYWRkX3N1YmNsYXNzKChQeVR5cGVPYmplY3QqKWJhc2UsIHR5cGUpIDwgMCkKKyAgICAgICAgICAgICAgICByZXMgPSAtMTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiByZXM7Cit9CisKIHN0YXRpYyB2b2lkCiByZW1vdmVfc3ViY2xhc3MoUHlUeXBlT2JqZWN0ICpiYXNlLCBQeVR5cGVPYmplY3QgKnR5cGUpCiB7Ci0gICAgUHlfc3NpemVfdCBpOwotICAgIFB5T2JqZWN0ICpsaXN0LCAqcmVmOworICAgIFB5T2JqZWN0ICpkaWN0LCAqa2V5OwogCi0gICAgbGlzdCA9IGJhc2UtPnRwX3N1YmNsYXNzZXM7Ci0gICAgaWYgKGxpc3QgPT0gTlVMTCkgeworICAgIGRpY3QgPSBiYXNlLT50cF9zdWJjbGFzc2VzOworICAgIGlmIChkaWN0ID09IE5VTEwpIHsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBhc3NlcnQoUHlMaXN0X0NoZWNrKGxpc3QpKTsKLSAgICBpID0gUHlMaXN0X0dFVF9TSVpFKGxpc3QpOwotICAgIHdoaWxlICgtLWkgPj0gMCkgewotICAgICAgICByZWYgPSBQeUxpc3RfR0VUX0lURU0obGlzdCwgaSk7Ci0gICAgICAgIGFzc2VydChQeVdlYWtyZWZfQ2hlY2tSZWYocmVmKSk7Ci0gICAgICAgIGlmIChQeVdlYWtyZWZfR0VUX09CSkVDVChyZWYpID09IChQeU9iamVjdCopdHlwZSkgewotICAgICAgICAgICAgLyogdGhpcyBjYW4ndCBmYWlsLCByaWdodD8gKi8KLSAgICAgICAgICAgIFB5U2VxdWVuY2VfRGVsSXRlbShsaXN0LCBpKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICBhc3NlcnQoUHlEaWN0X0NoZWNrRXhhY3QoZGljdCkpOworICAgIGtleSA9IFB5TG9uZ19Gcm9tVm9pZFB0cigodm9pZCAqKSB0eXBlKTsKKyAgICBpZiAoa2V5ID09IE5VTEwgfHwgUHlEaWN0X0RlbEl0ZW0oZGljdCwga2V5KSkgeworICAgICAgICAvKiBUaGlzIGNhbiBoYXBwZW4gaWYgdGhlIHR5cGUgaW5pdGlhbGl6YXRpb24gZXJyb3JlZCBvdXQgYmVmb3JlCisgICAgICAgICAgIHRoZSBiYXNlIHN1YmNsYXNzZXMgd2VyZSB1cGRhdGVkIChlLmcuIGEgbm9uLXN0ciBfX3F1YWxuYW1lX18KKyAgICAgICAgICAgd2FzIHBhc3NlZCBpbiB0aGUgdHlwZSBkaWN0KS4gKi8KKyAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICB9CisgICAgUHlfWERFQ1JFRihrZXkpOworfQorCitzdGF0aWMgdm9pZAorcmVtb3ZlX2FsbF9zdWJjbGFzc2VzKFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKmJhc2VzKQoreworICAgIGlmIChiYXNlcykgeworICAgICAgICBQeV9zc2l6ZV90IGk7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBQeVR1cGxlX0dFVF9TSVpFKGJhc2VzKTsgaSsrKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqYmFzZSA9IFB5VHVwbGVfR0VUX0lURU0oYmFzZXMsIGkpOworICAgICAgICAgICAgaWYgKFB5VHlwZV9DaGVjayhiYXNlKSkKKyAgICAgICAgICAgICAgICByZW1vdmVfc3ViY2xhc3MoKFB5VHlwZU9iamVjdCopIGJhc2UsIHR5cGUpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtNDcyNSw2ICs1MzUwLDE4IEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCit3cmFwX2RlbChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIHZvaWQgKndyYXBwZWQpCit7CisgICAgZGVzdHJ1Y3RvciBmdW5jID0gKGRlc3RydWN0b3Ipd3JhcHBlZDsKKworICAgIGlmICghY2hlY2tfbnVtX2FyZ3MoYXJncywgMCkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgKCpmdW5jKShzZWxmKTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKIHdyYXBfcmljaGNtcGZ1bmMoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCB2b2lkICp3cmFwcGVkLCBpbnQgb3ApCiB7CiAgICAgcmljaGNtcGZ1bmMgZnVuYyA9IChyaWNoY21wZnVuYyl3cmFwcGVkOwpAQCAtNDg3Nyw3ICs1NTE0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICIlcy5fX25ld19fKCVzKSBpcyBub3Qgc2FmZSwgdXNlICVzLl9fbmV3X18oKSIsCiAgICAgICAgICAgICAgICAgICAgICB0eXBlLT50cF9uYW1lLAogICAgICAgICAgICAgICAgICAgICAgc3VidHlwZS0+dHBfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgIHN0YXRpY2Jhc2UgPT0gTlVMTCA/ICI/IiA6IHN0YXRpY2Jhc2UtPnRwX25hbWUpOworICAgICAgICAgICAgICAgICAgICAgc3RhdGljYmFzZS0+dHBfbmFtZSk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIApAQCAtNDg5MSw4ICs1NTI4LDkgQEAKIAogc3RhdGljIHN0cnVjdCBQeU1ldGhvZERlZiB0cF9uZXdfbWV0aG9kZGVmW10gPSB7CiAgICAgeyJfX25ld19fIiwgKFB5Q0Z1bmN0aW9uKXRwX25ld193cmFwcGVyLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywKLSAgICAgUHlEb2NfU1RSKCJULl9fbmV3X18oUywgLi4uKSAtPiAiCi0gICAgICAgICAgICAgICAiYSBuZXcgb2JqZWN0IHdpdGggdHlwZSBTLCBhIHN1YnR5cGUgb2YgVCIpfSwKKyAgICAgUHlEb2NfU1RSKCJfX25ld19fKCR0eXBlLCAqYXJncywgKiprd2FyZ3MpXG4tLVxuXG4iCisgICAgICAgICAgICAgICAiQ3JlYXRlIGFuZCByZXR1cm4gYSBuZXcgb2JqZWN0LiAgIgorICAgICAgICAgICAgICAgIlNlZSBoZWxwKHR5cGUpIGZvciBhY2N1cmF0ZSBzaWduYXR1cmUuIil9LAogICAgIHswfQogfTsKIApAQCAtNDkwMyw3ICs1NTQxLDcgQEAKIAogICAgIGlmIChfUHlEaWN0X0dldEl0ZW1JZCh0eXBlLT50cF9kaWN0LCAmUHlJZF9fX25ld19fKSAhPSBOVUxMKQogICAgICAgICByZXR1cm4gMDsKLSAgICBmdW5jID0gUHlDRnVuY3Rpb25fTmV3KHRwX25ld19tZXRob2RkZWYsIChQeU9iamVjdCAqKXR5cGUpOworICAgIGZ1bmMgPSBQeUNGdW5jdGlvbl9OZXdFeCh0cF9uZXdfbWV0aG9kZGVmLCAoUHlPYmplY3QgKil0eXBlLCBOVUxMKTsKICAgICBpZiAoZnVuYyA9PSBOVUxMKQogICAgICAgICByZXR1cm4gLTE7CiAgICAgaWYgKF9QeURpY3RfU2V0SXRlbUlkKHR5cGUtPnRwX2RpY3QsICZQeUlkX19fbmV3X18sIGZ1bmMpKSB7CkBAIC01MDE1LDcgKzU2NTMsNiBAQAogc3RhdGljIFB5X3NzaXplX3QKIHNsb3Rfc3FfbGVuZ3RoKFB5T2JqZWN0ICpzZWxmKQogewotICAgIF9QeV9JREVOVElGSUVSKF9fbGVuX18pOwogICAgIFB5T2JqZWN0ICpyZXMgPSBjYWxsX21ldGhvZChzZWxmLCAmUHlJZF9fX2xlbl9fLCAiKCkiKTsKICAgICBQeV9zc2l6ZV90IGxlbjsKIApAQCAtNTA3Niw4ICs1NzEzLDYgQEAKIHNsb3Rfc3FfYXNzX2l0ZW0oUHlPYmplY3QgKnNlbGYsIFB5X3NzaXplX3QgaW5kZXgsIFB5T2JqZWN0ICp2YWx1ZSkKIHsKICAgICBQeU9iamVjdCAqcmVzOwotICAgIF9QeV9JREVOVElGSUVSKF9fZGVsaXRlbV9fKTsKLSAgICBfUHlfSURFTlRJRklFUihfX3NldGl0ZW1fXyk7CiAKICAgICBpZiAodmFsdWUgPT0gTlVMTCkKICAgICAgICAgcmVzID0gY2FsbF9tZXRob2Qoc2VsZiwgJlB5SWRfX19kZWxpdGVtX18sICIobikiLCBpbmRleCk7CkBAIC01MTI3LDggKzU3NjIsNiBAQAogc2xvdF9tcF9hc3Nfc3Vic2NyaXB0KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqa2V5LCBQeU9iamVjdCAqdmFsdWUpCiB7CiAgICAgUHlPYmplY3QgKnJlczsKLSAgICBfUHlfSURFTlRJRklFUihfX2RlbGl0ZW1fXyk7Ci0gICAgX1B5X0lERU5USUZJRVIoX19zZXRpdGVtX18pOwogCiAgICAgaWYgKHZhbHVlID09IE5VTEwpCiAgICAgICAgIHJlcyA9IGNhbGxfbWV0aG9kKHNlbGYsICZQeUlkX19fZGVsaXRlbV9fLCAiKE8pIiwga2V5KTsKQEAgLTUxNzksNyArNTgxMiw2IEBACiAgICAgUHlPYmplY3QgKmZ1bmMsICphcmdzOwogICAgIGludCByZXN1bHQgPSAtMTsKICAgICBpbnQgdXNpbmdfbGVuID0gMDsKLSAgICBfUHlfSURFTlRJRklFUihfX2xlbl9fKTsKICAgICBfUHlfSURFTlRJRklFUihfX2Jvb2xfXyk7CiAKICAgICBmdW5jID0gbG9va3VwX21heWJlKHNlbGYsICZQeUlkX19fYm9vbF9fKTsKQEAgLTUyODEsMjggKzU5MTMsMTEgQEAKICAgICBfUHlfSURFTlRJRklFUihfX3N0cl9fKTsKIAogICAgIGZ1bmMgPSBsb29rdXBfbWV0aG9kKHNlbGYsICZQeUlkX19fc3RyX18pOwotICAgIGlmIChmdW5jICE9IE5VTEwpIHsKLSAgICAgICAgcmVzID0gUHlFdmFsX0NhbGxPYmplY3QoZnVuYywgTlVMTCk7Ci0gICAgICAgIFB5X0RFQ1JFRihmdW5jKTsKLSAgICAgICAgcmV0dXJuIHJlczsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIC8qIFB5T2JqZWN0ICpyZXNzOyAqLwotICAgICAgICBQeUVycl9DbGVhcigpOwotICAgICAgICByZXMgPSBzbG90X3RwX3JlcHIoc2VsZik7Ci0gICAgICAgIGlmICghcmVzKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIC8qIFhYWCB0aGlzIGlzIG5vbi1zZW5zaWNhbC4gV2h5IHNob3VsZCB3ZSByZXR1cm4KLSAgICAgICAgICAgYSBieXRlcyBvYmplY3QgZnJvbSBfX3N0cl9fLiBJcyB0aGlzIGNvZGUgZXZlbgotICAgICAgICAgICB1c2VkPyAtIG12bCAqLwotICAgICAgICBhc3NlcnQoMCk7Ci0gICAgICAgIHJldHVybiByZXM7Ci0gICAgICAgIC8qCi0gICAgICAgIHJlc3MgPSBfUHlVbmljb2RlX0FzRGVmYXVsdEVuY29kZWRTdHJpbmcocmVzKTsKLSAgICAgICAgUHlfREVDUkVGKHJlcyk7Ci0gICAgICAgIHJldHVybiByZXNzOwotICAgICAgICAqLwotICAgIH0KKyAgICBpZiAoZnVuYyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICByZXMgPSBQeUV2YWxfQ2FsbE9iamVjdChmdW5jLCBOVUxMKTsKKyAgICBQeV9ERUNSRUYoZnVuYyk7CisgICAgcmV0dXJuIHJlczsKIH0KIAogc3RhdGljIFB5X2hhc2hfdApAQCAtNTU5OCw3ICs2MjEzLDYgQEAKICAgICBQeU9iamVjdCAqZnVuYzsKICAgICBQeU9iamVjdCAqbmV3YXJncywgKng7CiAgICAgUHlfc3NpemVfdCBpLCBuOwotICAgIF9QeV9JREVOVElGSUVSKF9fbmV3X18pOwogCiAgICAgZnVuYyA9IF9QeU9iamVjdF9HZXRBdHRySWQoKFB5T2JqZWN0ICopdHlwZSwgJlB5SWRfX19uZXdfXyk7CiAgICAgaWYgKGZ1bmMgPT0gTlVMTCkKQEAgLTU2MjIsMTYgKzYyMzYsMTIgQEAKIH0KIAogc3RhdGljIHZvaWQKLXNsb3RfdHBfZGVsKFB5T2JqZWN0ICpzZWxmKQorc2xvdF90cF9maW5hbGl6ZShQeU9iamVjdCAqc2VsZikKIHsKICAgICBfUHlfSURFTlRJRklFUihfX2RlbF9fKTsKICAgICBQeU9iamVjdCAqZGVsLCAqcmVzOwogICAgIFB5T2JqZWN0ICplcnJvcl90eXBlLCAqZXJyb3JfdmFsdWUsICplcnJvcl90cmFjZWJhY2s7CiAKLSAgICAvKiBUZW1wb3JhcmlseSByZXN1cnJlY3QgdGhlIG9iamVjdC4gKi8KLSAgICBhc3NlcnQoc2VsZi0+b2JfcmVmY250ID09IDApOwotICAgIHNlbGYtPm9iX3JlZmNudCA9IDE7Ci0KICAgICAvKiBTYXZlIHRoZSBjdXJyZW50IGV4Y2VwdGlvbiwgaWYgYW55LiAqLwogICAgIFB5RXJyX0ZldGNoKCZlcnJvcl90eXBlLCAmZXJyb3JfdmFsdWUsICZlcnJvcl90cmFjZWJhY2spOwogCkBAIC01NjQ4LDM3ICs2MjU4LDYgQEAKIAogICAgIC8qIFJlc3RvcmUgdGhlIHNhdmVkIGV4Y2VwdGlvbi4gKi8KICAgICBQeUVycl9SZXN0b3JlKGVycm9yX3R5cGUsIGVycm9yX3ZhbHVlLCBlcnJvcl90cmFjZWJhY2spOwotCi0gICAgLyogVW5kbyB0aGUgdGVtcG9yYXJ5IHJlc3VycmVjdGlvbjsgY2FuJ3QgdXNlIERFQ1JFRiBoZXJlLCBpdCB3b3VsZAotICAgICAqIGNhdXNlIGEgcmVjdXJzaXZlIGNhbGwuCi0gICAgICovCi0gICAgYXNzZXJ0KHNlbGYtPm9iX3JlZmNudCA+IDApOwotICAgIGlmICgtLXNlbGYtPm9iX3JlZmNudCA9PSAwKQotICAgICAgICByZXR1cm47ICAgICAgICAgLyogdGhpcyBpcyB0aGUgbm9ybWFsIHBhdGggb3V0ICovCi0KLSAgICAvKiBfX2RlbF9fIHJlc3VycmVjdGVkIGl0ISAgTWFrZSBpdCBsb29rIGxpa2UgdGhlIG9yaWdpbmFsIFB5X0RFQ1JFRgotICAgICAqIG5ldmVyIGhhcHBlbmVkLgotICAgICAqLwotICAgIHsKLSAgICAgICAgUHlfc3NpemVfdCByZWZjbnQgPSBzZWxmLT5vYl9yZWZjbnQ7Ci0gICAgICAgIF9QeV9OZXdSZWZlcmVuY2Uoc2VsZik7Ci0gICAgICAgIHNlbGYtPm9iX3JlZmNudCA9IHJlZmNudDsKLSAgICB9Ci0gICAgYXNzZXJ0KCFQeVR5cGVfSVNfR0MoUHlfVFlQRShzZWxmKSkgfHwKLSAgICAgICAgICAgX1B5X0FTX0dDKHNlbGYpLT5nYy5nY19yZWZzICE9IF9QeUdDX1JFRlNfVU5UUkFDS0VEKTsKLSAgICAvKiBJZiBQeV9SRUZfREVCVUcsIF9QeV9OZXdSZWZlcmVuY2UgYnVtcGVkIF9QeV9SZWZUb3RhbCwgc28KLSAgICAgKiB3ZSBuZWVkIHRvIHVuZG8gdGhhdC4gKi8KLSAgICBfUHlfREVDX1JFRlRPVEFMOwotICAgIC8qIElmIFB5X1RSQUNFX1JFRlMsIF9QeV9OZXdSZWZlcmVuY2UgcmUtYWRkZWQgc2VsZiB0byB0aGUgb2JqZWN0Ci0gICAgICogY2hhaW4sIHNvIG5vIG1vcmUgdG8gZG8gdGhlcmUuCi0gICAgICogSWYgQ09VTlRfQUxMT0NTLCB0aGUgb3JpZ2luYWwgZGVjcmVmIGJ1bXBlZCB0cF9mcmVlcywgYW5kCi0gICAgICogX1B5X05ld1JlZmVyZW5jZSBidW1wZWQgdHBfYWxsb2NzOiAgYm90aCBvZiB0aG9zZSBuZWVkIHRvIGJlCi0gICAgICogdW5kb25lLgotICAgICAqLwotI2lmZGVmIENPVU5UX0FMTE9DUwotICAgIC0tUHlfVFlQRShzZWxmKS0+dHBfZnJlZXM7Ci0gICAgLS1QeV9UWVBFKHNlbGYpLT50cF9hbGxvY3M7Ci0jZW5kaWYKIH0KIAogCkBAIC01NzIzLDIyICs2MzAyLDIyIEBACiAgICAgRVRTTE9UKE5BTUUsIGFzX251bWJlci5TTE9ULCBGVU5DVElPTiwgV1JBUFBFUiwgRE9DKQogI2RlZmluZSBVTlNMT1QoTkFNRSwgU0xPVCwgRlVOQ1RJT04sIFdSQVBQRVIsIERPQykgXAogICAgIEVUU0xPVChOQU1FLCBhc19udW1iZXIuU0xPVCwgRlVOQ1RJT04sIFdSQVBQRVIsIFwKLSAgICAgICAgICAgInguIiBOQU1FICIoKSA8PT0+ICIgRE9DKQorICAgICAgICAgICBOQU1FICIoJHNlbGYsIC8pXG4tLVxuXG4iIERPQykKICNkZWZpbmUgSUJTTE9UKE5BTUUsIFNMT1QsIEZVTkNUSU9OLCBXUkFQUEVSLCBET0MpIFwKICAgICBFVFNMT1QoTkFNRSwgYXNfbnVtYmVyLlNMT1QsIEZVTkNUSU9OLCBXUkFQUEVSLCBcCi0gICAgICAgICAgICJ4LiIgTkFNRSAiKHkpIDw9PT4geCIgRE9DICJ5IikKKyAgICAgICAgICAgTkFNRSAiKCRzZWxmLCB2YWx1ZSwgLylcbi0tXG5cblJldHVybiBzZWxmIiBET0MgInZhbHVlLiIpCiAjZGVmaW5lIEJJTlNMT1QoTkFNRSwgU0xPVCwgRlVOQ1RJT04sIERPQykgXAogICAgIEVUU0xPVChOQU1FLCBhc19udW1iZXIuU0xPVCwgRlVOQ1RJT04sIHdyYXBfYmluYXJ5ZnVuY19sLCBcCi0gICAgICAgICAgICJ4LiIgTkFNRSAiKHkpIDw9PT4geCIgRE9DICJ5IikKKyAgICAgICAgICAgTkFNRSAiKCRzZWxmLCB2YWx1ZSwgLylcbi0tXG5cblJldHVybiBzZWxmIiBET0MgInZhbHVlLiIpCiAjZGVmaW5lIFJCSU5TTE9UKE5BTUUsIFNMT1QsIEZVTkNUSU9OLCBET0MpIFwKICAgICBFVFNMT1QoTkFNRSwgYXNfbnVtYmVyLlNMT1QsIEZVTkNUSU9OLCB3cmFwX2JpbmFyeWZ1bmNfciwgXAotICAgICAgICAgICAieC4iIE5BTUUgIih5KSA8PT0+IHkiIERPQyAieCIpCisgICAgICAgICAgIE5BTUUgIigkc2VsZiwgdmFsdWUsIC8pXG4tLVxuXG5SZXR1cm4gdmFsdWUiIERPQyAic2VsZi4iKQogI2RlZmluZSBCSU5TTE9UTk9USU5GSVgoTkFNRSwgU0xPVCwgRlVOQ1RJT04sIERPQykgXAogICAgIEVUU0xPVChOQU1FLCBhc19udW1iZXIuU0xPVCwgRlVOQ1RJT04sIHdyYXBfYmluYXJ5ZnVuY19sLCBcCi0gICAgICAgICAgICJ4LiIgTkFNRSAiKHkpIDw9PT4gIiBET0MpCisgICAgICAgICAgIE5BTUUgIigkc2VsZiwgdmFsdWUsIC8pXG4tLVxuXG4iIERPQykKICNkZWZpbmUgUkJJTlNMT1ROT1RJTkZJWChOQU1FLCBTTE9ULCBGVU5DVElPTiwgRE9DKSBcCiAgICAgRVRTTE9UKE5BTUUsIGFzX251bWJlci5TTE9ULCBGVU5DVElPTiwgd3JhcF9iaW5hcnlmdW5jX3IsIFwKLSAgICAgICAgICAgInguIiBOQU1FICIoeSkgPD09PiAiIERPQykKKyAgICAgICAgICAgTkFNRSAiKCRzZWxmLCB2YWx1ZSwgLylcbi0tXG5cbiIgRE9DKQogCiBzdGF0aWMgc2xvdGRlZiBzbG90ZGVmc1tdID0gewogICAgIFRQU0xPVCgiX19nZXRhdHRyaWJ1dGVfXyIsIHRwX2dldGF0dHIsIE5VTEwsIE5VTEwsICIiKSwKQEAgLTU3NDYsODAgKzYzMjUsODUgQEAKICAgICBUUFNMT1QoIl9fc2V0YXR0cl9fIiwgdHBfc2V0YXR0ciwgTlVMTCwgTlVMTCwgIiIpLAogICAgIFRQU0xPVCgiX19kZWxhdHRyX18iLCB0cF9zZXRhdHRyLCBOVUxMLCBOVUxMLCAiIiksCiAgICAgVFBTTE9UKCJfX3JlcHJfXyIsIHRwX3JlcHIsIHNsb3RfdHBfcmVwciwgd3JhcF91bmFyeWZ1bmMsCi0gICAgICAgICAgICJ4Ll9fcmVwcl9fKCkgPD09PiByZXByKHgpIiksCisgICAgICAgICAgICJfX3JlcHJfXygkc2VsZiwgLylcbi0tXG5cblJldHVybiByZXByKHNlbGYpLiIpLAogICAgIFRQU0xPVCgiX19oYXNoX18iLCB0cF9oYXNoLCBzbG90X3RwX2hhc2gsIHdyYXBfaGFzaGZ1bmMsCi0gICAgICAgICAgICJ4Ll9faGFzaF9fKCkgPD09PiBoYXNoKHgpIiksCisgICAgICAgICAgICJfX2hhc2hfXygkc2VsZiwgLylcbi0tXG5cblJldHVybiBoYXNoKHNlbGYpLiIpLAogICAgIEZMU0xPVCgiX19jYWxsX18iLCB0cF9jYWxsLCBzbG90X3RwX2NhbGwsICh3cmFwcGVyZnVuYyl3cmFwX2NhbGwsCi0gICAgICAgICAgICJ4Ll9fY2FsbF9fKC4uLikgPD09PiB4KC4uLikiLCBQeVdyYXBwZXJGbGFnX0tFWVdPUkRTKSwKKyAgICAgICAgICAgIl9fY2FsbF9fKCRzZWxmLCAvLCAqYXJncywgKiprd2FyZ3MpXG4tLVxuXG5DYWxsIHNlbGYgYXMgYSBmdW5jdGlvbi4iLAorICAgICAgICAgICBQeVdyYXBwZXJGbGFnX0tFWVdPUkRTKSwKICAgICBUUFNMT1QoIl9fc3RyX18iLCB0cF9zdHIsIHNsb3RfdHBfc3RyLCB3cmFwX3VuYXJ5ZnVuYywKLSAgICAgICAgICAgInguX19zdHJfXygpIDw9PT4gc3RyKHgpIiksCisgICAgICAgICAgICJfX3N0cl9fKCRzZWxmLCAvKVxuLS1cblxuUmV0dXJuIHN0cihzZWxmKS4iKSwKICAgICBUUFNMT1QoIl9fZ2V0YXR0cmlidXRlX18iLCB0cF9nZXRhdHRybywgc2xvdF90cF9nZXRhdHRyX2hvb2ssCi0gICAgICAgICAgIHdyYXBfYmluYXJ5ZnVuYywgInguX19nZXRhdHRyaWJ1dGVfXygnbmFtZScpIDw9PT4geC5uYW1lIiksCisgICAgICAgICAgIHdyYXBfYmluYXJ5ZnVuYywKKyAgICAgICAgICAgIl9fZ2V0YXR0cmlidXRlX18oJHNlbGYsIG5hbWUsIC8pXG4tLVxuXG5SZXR1cm4gZ2V0YXR0cihzZWxmLCBuYW1lKS4iKSwKICAgICBUUFNMT1QoIl9fZ2V0YXR0cl9fIiwgdHBfZ2V0YXR0cm8sIHNsb3RfdHBfZ2V0YXR0cl9ob29rLCBOVUxMLCAiIiksCiAgICAgVFBTTE9UKCJfX3NldGF0dHJfXyIsIHRwX3NldGF0dHJvLCBzbG90X3RwX3NldGF0dHJvLCB3cmFwX3NldGF0dHIsCi0gICAgICAgICAgICJ4Ll9fc2V0YXR0cl9fKCduYW1lJywgdmFsdWUpIDw9PT4geC5uYW1lID0gdmFsdWUiKSwKKyAgICAgICAgICAgIl9fc2V0YXR0cl9fKCRzZWxmLCBuYW1lLCB2YWx1ZSwgLylcbi0tXG5cbkltcGxlbWVudCBzZXRhdHRyKHNlbGYsIG5hbWUsIHZhbHVlKS4iKSwKICAgICBUUFNMT1QoIl9fZGVsYXR0cl9fIiwgdHBfc2V0YXR0cm8sIHNsb3RfdHBfc2V0YXR0cm8sIHdyYXBfZGVsYXR0ciwKLSAgICAgICAgICAgInguX19kZWxhdHRyX18oJ25hbWUnKSA8PT0+IGRlbCB4Lm5hbWUiKSwKKyAgICAgICAgICAgIl9fZGVsYXR0cl9fKCRzZWxmLCBuYW1lLCAvKVxuLS1cblxuSW1wbGVtZW50IGRlbGF0dHIoc2VsZiwgbmFtZSkuIiksCiAgICAgVFBTTE9UKCJfX2x0X18iLCB0cF9yaWNoY29tcGFyZSwgc2xvdF90cF9yaWNoY29tcGFyZSwgcmljaGNtcF9sdCwKLSAgICAgICAgICAgInguX19sdF9fKHkpIDw9PT4geDx5IiksCisgICAgICAgICAgICJfX2x0X18oJHNlbGYsIHZhbHVlLCAvKVxuLS1cblxuUmV0dXJuIHNlbGY8dmFsdWUuIiksCiAgICAgVFBTTE9UKCJfX2xlX18iLCB0cF9yaWNoY29tcGFyZSwgc2xvdF90cF9yaWNoY29tcGFyZSwgcmljaGNtcF9sZSwKLSAgICAgICAgICAgInguX19sZV9fKHkpIDw9PT4geDw9eSIpLAorICAgICAgICAgICAiX19sZV9fKCRzZWxmLCB2YWx1ZSwgLylcbi0tXG5cblJldHVybiBzZWxmPD12YWx1ZS4iKSwKICAgICBUUFNMT1QoIl9fZXFfXyIsIHRwX3JpY2hjb21wYXJlLCBzbG90X3RwX3JpY2hjb21wYXJlLCByaWNoY21wX2VxLAotICAgICAgICAgICAieC5fX2VxX18oeSkgPD09PiB4PT15IiksCisgICAgICAgICAgICJfX2VxX18oJHNlbGYsIHZhbHVlLCAvKVxuLS1cblxuUmV0dXJuIHNlbGY9PXZhbHVlLiIpLAogICAgIFRQU0xPVCgiX19uZV9fIiwgdHBfcmljaGNvbXBhcmUsIHNsb3RfdHBfcmljaGNvbXBhcmUsIHJpY2hjbXBfbmUsCi0gICAgICAgICAgICJ4Ll9fbmVfXyh5KSA8PT0+IHghPXkiKSwKKyAgICAgICAgICAgIl9fbmVfXygkc2VsZiwgdmFsdWUsIC8pXG4tLVxuXG5SZXR1cm4gc2VsZiE9dmFsdWUuIiksCiAgICAgVFBTTE9UKCJfX2d0X18iLCB0cF9yaWNoY29tcGFyZSwgc2xvdF90cF9yaWNoY29tcGFyZSwgcmljaGNtcF9ndCwKLSAgICAgICAgICAgInguX19ndF9fKHkpIDw9PT4geD55IiksCisgICAgICAgICAgICJfX2d0X18oJHNlbGYsIHZhbHVlLCAvKVxuLS1cblxuUmV0dXJuIHNlbGY+dmFsdWUuIiksCiAgICAgVFBTTE9UKCJfX2dlX18iLCB0cF9yaWNoY29tcGFyZSwgc2xvdF90cF9yaWNoY29tcGFyZSwgcmljaGNtcF9nZSwKLSAgICAgICAgICAgInguX19nZV9fKHkpIDw9PT4geD49eSIpLAorICAgICAgICAgICAiX19nZV9fKCRzZWxmLCB2YWx1ZSwgLylcbi0tXG5cblJldHVybiBzZWxmPj12YWx1ZS4iKSwKICAgICBUUFNMT1QoIl9faXRlcl9fIiwgdHBfaXRlciwgc2xvdF90cF9pdGVyLCB3cmFwX3VuYXJ5ZnVuYywKLSAgICAgICAgICAgInguX19pdGVyX18oKSA8PT0+IGl0ZXIoeCkiKSwKKyAgICAgICAgICAgIl9faXRlcl9fKCRzZWxmLCAvKVxuLS1cblxuSW1wbGVtZW50IGl0ZXIoc2VsZikuIiksCiAgICAgVFBTTE9UKCJfX25leHRfXyIsIHRwX2l0ZXJuZXh0LCBzbG90X3RwX2l0ZXJuZXh0LCB3cmFwX25leHQsCi0gICAgICAgICAgICJ4Ll9fbmV4dF9fKCkgPD09PiBuZXh0KHgpIiksCisgICAgICAgICAgICJfX25leHRfXygkc2VsZiwgLylcbi0tXG5cbkltcGxlbWVudCBuZXh0KHNlbGYpLiIpLAogICAgIFRQU0xPVCgiX19nZXRfXyIsIHRwX2Rlc2NyX2dldCwgc2xvdF90cF9kZXNjcl9nZXQsIHdyYXBfZGVzY3JfZ2V0LAotICAgICAgICAgICAiZGVzY3IuX19nZXRfXyhvYmpbLCB0eXBlXSkgLT4gdmFsdWUiKSwKKyAgICAgICAgICAgIl9fZ2V0X18oJHNlbGYsIGluc3RhbmNlLCBvd25lciwgLylcbi0tXG5cblJldHVybiBhbiBhdHRyaWJ1dGUgb2YgaW5zdGFuY2UsIHdoaWNoIGlzIG9mIHR5cGUgb3duZXIuIiksCiAgICAgVFBTTE9UKCJfX3NldF9fIiwgdHBfZGVzY3Jfc2V0LCBzbG90X3RwX2Rlc2NyX3NldCwgd3JhcF9kZXNjcl9zZXQsCi0gICAgICAgICAgICJkZXNjci5fX3NldF9fKG9iaiwgdmFsdWUpIiksCisgICAgICAgICAgICJfX3NldF9fKCRzZWxmLCBpbnN0YW5jZSwgdmFsdWUsIC8pXG4tLVxuXG5TZXQgYW4gYXR0cmlidXRlIG9mIGluc3RhbmNlIHRvIHZhbHVlLiIpLAogICAgIFRQU0xPVCgiX19kZWxldGVfXyIsIHRwX2Rlc2NyX3NldCwgc2xvdF90cF9kZXNjcl9zZXQsCi0gICAgICAgICAgIHdyYXBfZGVzY3JfZGVsZXRlLCAiZGVzY3IuX19kZWxldGVfXyhvYmopIiksCisgICAgICAgICAgIHdyYXBfZGVzY3JfZGVsZXRlLAorICAgICAgICAgICAiX19kZWxldGVfXygkc2VsZiwgaW5zdGFuY2UsIC8pXG4tLVxuXG5EZWxldGUgYW4gYXR0cmlidXRlIG9mIGluc3RhbmNlLiIpLAogICAgIEZMU0xPVCgiX19pbml0X18iLCB0cF9pbml0LCBzbG90X3RwX2luaXQsICh3cmFwcGVyZnVuYyl3cmFwX2luaXQsCi0gICAgICAgICAgICJ4Ll9faW5pdF9fKC4uLikgaW5pdGlhbGl6ZXMgeDsgIgotICAgICAgICAgICAic2VlIGhlbHAodHlwZSh4KSkgZm9yIHNpZ25hdHVyZSIsCisgICAgICAgICAgICJfX2luaXRfXygkc2VsZiwgLywgKmFyZ3MsICoqa3dhcmdzKVxuLS1cblxuIgorICAgICAgICAgICAiSW5pdGlhbGl6ZSBzZWxmLiAgU2VlIGhlbHAodHlwZShzZWxmKSkgZm9yIGFjY3VyYXRlIHNpZ25hdHVyZS4iLAogICAgICAgICAgICBQeVdyYXBwZXJGbGFnX0tFWVdPUkRTKSwKLSAgICBUUFNMT1QoIl9fbmV3X18iLCB0cF9uZXcsIHNsb3RfdHBfbmV3LCBOVUxMLCAiIiksCi0gICAgVFBTTE9UKCJfX2RlbF9fIiwgdHBfZGVsLCBzbG90X3RwX2RlbCwgTlVMTCwgIiIpLAorICAgIFRQU0xPVCgiX19uZXdfXyIsIHRwX25ldywgc2xvdF90cF9uZXcsIE5VTEwsCisgICAgICAgICAgICJfX25ld19fKHR5cGUsIC8sICphcmdzLCAqKmt3YXJncylcbi0tXG5cbiIKKyAgICAgICAgICAgIkNyZWF0ZSBhbmQgcmV0dXJuIG5ldyBvYmplY3QuICBTZWUgaGVscCh0eXBlKSBmb3IgYWNjdXJhdGUgc2lnbmF0dXJlLiIpLAorICAgIFRQU0xPVCgiX19kZWxfXyIsIHRwX2ZpbmFsaXplLCBzbG90X3RwX2ZpbmFsaXplLCAod3JhcHBlcmZ1bmMpd3JhcF9kZWwsICIiKSwKIAogICAgIEJJTlNMT1QoIl9fYWRkX18iLCBuYl9hZGQsIHNsb3RfbmJfYWRkLAotICAgICAgICAiKyIpLAorICAgICAgICAgICAiKyIpLAogICAgIFJCSU5TTE9UKCJfX3JhZGRfXyIsIG5iX2FkZCwgc2xvdF9uYl9hZGQsCi0gICAgICAgICAgICAgIisiKSwKKyAgICAgICAgICAgIisiKSwKICAgICBCSU5TTE9UKCJfX3N1Yl9fIiwgbmJfc3VidHJhY3QsIHNsb3RfbmJfc3VidHJhY3QsCi0gICAgICAgICItIiksCisgICAgICAgICAgICItIiksCiAgICAgUkJJTlNMT1QoIl9fcnN1Yl9fIiwgbmJfc3VidHJhY3QsIHNsb3RfbmJfc3VidHJhY3QsCi0gICAgICAgICAgICAgIi0iKSwKKyAgICAgICAgICAgIi0iKSwKICAgICBCSU5TTE9UKCJfX211bF9fIiwgbmJfbXVsdGlwbHksIHNsb3RfbmJfbXVsdGlwbHksCi0gICAgICAgICIqIiksCisgICAgICAgICAgICIqIiksCiAgICAgUkJJTlNMT1QoIl9fcm11bF9fIiwgbmJfbXVsdGlwbHksIHNsb3RfbmJfbXVsdGlwbHksCi0gICAgICAgICAgICAgIioiKSwKKyAgICAgICAgICAgIioiKSwKICAgICBCSU5TTE9UKCJfX21vZF9fIiwgbmJfcmVtYWluZGVyLCBzbG90X25iX3JlbWFpbmRlciwKLSAgICAgICAgIiUiKSwKKyAgICAgICAgICAgIiUiKSwKICAgICBSQklOU0xPVCgiX19ybW9kX18iLCBuYl9yZW1haW5kZXIsIHNsb3RfbmJfcmVtYWluZGVyLAotICAgICAgICAgICAgICIlIiksCisgICAgICAgICAgICIlIiksCiAgICAgQklOU0xPVE5PVElORklYKCJfX2Rpdm1vZF9fIiwgbmJfZGl2bW9kLCBzbG90X25iX2Rpdm1vZCwKLSAgICAgICAgImRpdm1vZCh4LCB5KSIpLAorICAgICAgICAgICAiUmV0dXJuIGRpdm1vZChzZWxmLCB2YWx1ZSkuIiksCiAgICAgUkJJTlNMT1ROT1RJTkZJWCgiX19yZGl2bW9kX18iLCBuYl9kaXZtb2QsIHNsb3RfbmJfZGl2bW9kLAotICAgICAgICAgICAgICJkaXZtb2QoeSwgeCkiKSwKKyAgICAgICAgICAgIlJldHVybiBkaXZtb2QodmFsdWUsIHNlbGYpLiIpLAogICAgIE5CU0xPVCgiX19wb3dfXyIsIG5iX3Bvd2VyLCBzbG90X25iX3Bvd2VyLCB3cmFwX3Rlcm5hcnlmdW5jLAotICAgICAgICAgICAieC5fX3Bvd19fKHlbLCB6XSkgPD09PiBwb3coeCwgeVssIHpdKSIpLAorICAgICAgICAgICAiX19wb3dfXygkc2VsZiwgdmFsdWUsIG1vZD1Ob25lLCAvKVxuLS1cblxuUmV0dXJuIHBvdyhzZWxmLCB2YWx1ZSwgbW9kKS4iKSwKICAgICBOQlNMT1QoIl9fcnBvd19fIiwgbmJfcG93ZXIsIHNsb3RfbmJfcG93ZXIsIHdyYXBfdGVybmFyeWZ1bmNfciwKLSAgICAgICAgICAgInkuX19ycG93X18oeFssIHpdKSA8PT0+IHBvdyh4LCB5Wywgel0pIiksCi0gICAgVU5TTE9UKCJfX25lZ19fIiwgbmJfbmVnYXRpdmUsIHNsb3RfbmJfbmVnYXRpdmUsIHdyYXBfdW5hcnlmdW5jLCAiLXgiKSwKLSAgICBVTlNMT1QoIl9fcG9zX18iLCBuYl9wb3NpdGl2ZSwgc2xvdF9uYl9wb3NpdGl2ZSwgd3JhcF91bmFyeWZ1bmMsICIreCIpLAorICAgICAgICAgICAiX19ycG93X18oJHNlbGYsIHZhbHVlLCBtb2Q9Tm9uZSwgLylcbi0tXG5cblJldHVybiBwb3codmFsdWUsIHNlbGYsIG1vZCkuIiksCisgICAgVU5TTE9UKCJfX25lZ19fIiwgbmJfbmVnYXRpdmUsIHNsb3RfbmJfbmVnYXRpdmUsIHdyYXBfdW5hcnlmdW5jLCAiLXNlbGYiKSwKKyAgICBVTlNMT1QoIl9fcG9zX18iLCBuYl9wb3NpdGl2ZSwgc2xvdF9uYl9wb3NpdGl2ZSwgd3JhcF91bmFyeWZ1bmMsICIrc2VsZiIpLAogICAgIFVOU0xPVCgiX19hYnNfXyIsIG5iX2Fic29sdXRlLCBzbG90X25iX2Fic29sdXRlLCB3cmFwX3VuYXJ5ZnVuYywKLSAgICAgICAgICAgImFicyh4KSIpLAorICAgICAgICAgICAiYWJzKHNlbGYpIiksCiAgICAgVU5TTE9UKCJfX2Jvb2xfXyIsIG5iX2Jvb2wsIHNsb3RfbmJfYm9vbCwgd3JhcF9pbnF1aXJ5cHJlZCwKLSAgICAgICAgICAgInggIT0gMCIpLAotICAgIFVOU0xPVCgiX19pbnZlcnRfXyIsIG5iX2ludmVydCwgc2xvdF9uYl9pbnZlcnQsIHdyYXBfdW5hcnlmdW5jLCAifngiKSwKKyAgICAgICAgICAgInNlbGYgIT0gMCIpLAorICAgIFVOU0xPVCgiX19pbnZlcnRfXyIsIG5iX2ludmVydCwgc2xvdF9uYl9pbnZlcnQsIHdyYXBfdW5hcnlmdW5jLCAifnNlbGYiKSwKICAgICBCSU5TTE9UKCJfX2xzaGlmdF9fIiwgbmJfbHNoaWZ0LCBzbG90X25iX2xzaGlmdCwgIjw8IiksCiAgICAgUkJJTlNMT1QoIl9fcmxzaGlmdF9fIiwgbmJfbHNoaWZ0LCBzbG90X25iX2xzaGlmdCwgIjw8IiksCiAgICAgQklOU0xPVCgiX19yc2hpZnRfXyIsIG5iX3JzaGlmdCwgc2xvdF9uYl9yc2hpZnQsICI+PiIpLApAQCAtNTgzMSw5ICs2NDE1LDkgQEAKICAgICBCSU5TTE9UKCJfX29yX18iLCBuYl9vciwgc2xvdF9uYl9vciwgInwiKSwKICAgICBSQklOU0xPVCgiX19yb3JfXyIsIG5iX29yLCBzbG90X25iX29yLCAifCIpLAogICAgIFVOU0xPVCgiX19pbnRfXyIsIG5iX2ludCwgc2xvdF9uYl9pbnQsIHdyYXBfdW5hcnlmdW5jLAotICAgICAgICAgICAiaW50KHgpIiksCisgICAgICAgICAgICJpbnQoc2VsZikiKSwKICAgICBVTlNMT1QoIl9fZmxvYXRfXyIsIG5iX2Zsb2F0LCBzbG90X25iX2Zsb2F0LCB3cmFwX3VuYXJ5ZnVuYywKLSAgICAgICAgICAgImZsb2F0KHgpIiksCisgICAgICAgICAgICJmbG9hdChzZWxmKSIpLAogICAgIElCU0xPVCgiX19pYWRkX18iLCBuYl9pbnBsYWNlX2FkZCwgc2xvdF9uYl9pbnBsYWNlX2FkZCwKICAgICAgICAgICAgd3JhcF9iaW5hcnlmdW5jLCAiKz0iKSwKICAgICBJQlNMT1QoIl9faXN1Yl9fIiwgbmJfaW5wbGFjZV9zdWJ0cmFjdCwgc2xvdF9uYl9pbnBsYWNlX3N1YnRyYWN0LApAQCAtNTg1OSw0OSArNjQ0Myw1MiBAQAogICAgIEJJTlNMT1QoIl9fdHJ1ZWRpdl9fIiwgbmJfdHJ1ZV9kaXZpZGUsIHNsb3RfbmJfdHJ1ZV9kaXZpZGUsICIvIiksCiAgICAgUkJJTlNMT1QoIl9fcnRydWVkaXZfXyIsIG5iX3RydWVfZGl2aWRlLCBzbG90X25iX3RydWVfZGl2aWRlLCAiLyIpLAogICAgIElCU0xPVCgiX19pZmxvb3JkaXZfXyIsIG5iX2lucGxhY2VfZmxvb3JfZGl2aWRlLAotICAgICAgICAgICBzbG90X25iX2lucGxhY2VfZmxvb3JfZGl2aWRlLCB3cmFwX2JpbmFyeWZ1bmMsICIvLyIpLAorICAgICAgICAgICBzbG90X25iX2lucGxhY2VfZmxvb3JfZGl2aWRlLCB3cmFwX2JpbmFyeWZ1bmMsICIvLz0iKSwKICAgICBJQlNMT1QoIl9faXRydWVkaXZfXyIsIG5iX2lucGxhY2VfdHJ1ZV9kaXZpZGUsCi0gICAgICAgICAgIHNsb3RfbmJfaW5wbGFjZV90cnVlX2RpdmlkZSwgd3JhcF9iaW5hcnlmdW5jLCAiLyIpLAorICAgICAgICAgICBzbG90X25iX2lucGxhY2VfdHJ1ZV9kaXZpZGUsIHdyYXBfYmluYXJ5ZnVuYywgIi89IiksCiAgICAgTkJTTE9UKCJfX2luZGV4X18iLCBuYl9pbmRleCwgc2xvdF9uYl9pbmRleCwgd3JhcF91bmFyeWZ1bmMsCi0gICAgICAgICAgICJ4W3k6el0gPD09PiB4W3kuX19pbmRleF9fKCk6ei5fX2luZGV4X18oKV0iKSwKLQorICAgICAgICAgICAiX19pbmRleF9fKCRzZWxmLCAvKVxuLS1cblxuIgorICAgICAgICAgICAiUmV0dXJuIHNlbGYgY29udmVydGVkIHRvIGFuIGludGVnZXIsIGlmIHNlbGYgaXMgc3VpdGFibGUgIgorICAgICAgICAgICAiZm9yIHVzZSBhcyBhbiBpbmRleCBpbnRvIGEgbGlzdC4iKSwKICAgICBNUFNMT1QoIl9fbGVuX18iLCBtcF9sZW5ndGgsIHNsb3RfbXBfbGVuZ3RoLCB3cmFwX2xlbmZ1bmMsCi0gICAgICAgICAgICJ4Ll9fbGVuX18oKSA8PT0+IGxlbih4KSIpLAorICAgICAgICAgICAiX19sZW5fXygkc2VsZiwgLylcbi0tXG5cblJldHVybiBsZW4oc2VsZikuIiksCiAgICAgTVBTTE9UKCJfX2dldGl0ZW1fXyIsIG1wX3N1YnNjcmlwdCwgc2xvdF9tcF9zdWJzY3JpcHQsCiAgICAgICAgICAgIHdyYXBfYmluYXJ5ZnVuYywKLSAgICAgICAgICAgInguX19nZXRpdGVtX18oeSkgPD09PiB4W3ldIiksCisgICAgICAgICAgICJfX2dldGl0ZW1fXygkc2VsZiwga2V5LCAvKVxuLS1cblxuUmV0dXJuIHNlbGZba2V5XS4iKSwKICAgICBNUFNMT1QoIl9fc2V0aXRlbV9fIiwgbXBfYXNzX3N1YnNjcmlwdCwgc2xvdF9tcF9hc3Nfc3Vic2NyaXB0LAogICAgICAgICAgICB3cmFwX29iam9iamFyZ3Byb2MsCi0gICAgICAgICAgICJ4Ll9fc2V0aXRlbV9fKGksIHkpIDw9PT4geFtpXT15IiksCisgICAgICAgICAgICJfX3NldGl0ZW1fXygkc2VsZiwga2V5LCB2YWx1ZSwgLylcbi0tXG5cblNldCBzZWxmW2tleV0gdG8gdmFsdWUuIiksCiAgICAgTVBTTE9UKCJfX2RlbGl0ZW1fXyIsIG1wX2Fzc19zdWJzY3JpcHQsIHNsb3RfbXBfYXNzX3N1YnNjcmlwdCwKICAgICAgICAgICAgd3JhcF9kZWxpdGVtLAotICAgICAgICAgICAieC5fX2RlbGl0ZW1fXyh5KSA8PT0+IGRlbCB4W3ldIiksCisgICAgICAgICAgICJfX2RlbGl0ZW1fXygkc2VsZiwga2V5LCAvKVxuLS1cblxuRGVsZXRlIHNlbGZba2V5XS4iKSwKIAogICAgIFNRU0xPVCgiX19sZW5fXyIsIHNxX2xlbmd0aCwgc2xvdF9zcV9sZW5ndGgsIHdyYXBfbGVuZnVuYywKLSAgICAgICAgICAgInguX19sZW5fXygpIDw9PT4gbGVuKHgpIiksCisgICAgICAgICAgICJfX2xlbl9fKCRzZWxmLCAvKVxuLS1cblxuUmV0dXJuIGxlbihzZWxmKS4iKSwKICAgICAvKiBIZWFwIHR5cGVzIGRlZmluaW5nIF9fYWRkX18vX19tdWxfXyBoYXZlIHNxX2NvbmNhdC9zcV9yZXBlYXQgPT0gTlVMTC4KICAgICAgICBUaGUgbG9naWMgaW4gYWJzdHJhY3QuYyBhbHdheXMgZmFsbHMgYmFjayB0byBuYl9hZGQvbmJfbXVsdGlwbHkgaW4KICAgICAgICB0aGlzIGNhc2UuICBEZWZpbmluZyBib3RoIHRoZSBuYl8qIGFuZCB0aGUgc3FfKiBzbG90cyB0byBjYWxsIHRoZQogICAgICAgIHVzZXItZGVmaW5lZCBtZXRob2RzIGhhcyB1bmV4cGVjdGVkIHNpZGUtZWZmZWN0cywgYXMgc2hvd24gYnkKICAgICAgICB0ZXN0X2Rlc2NyLm5vdGltcGxlbWVudGVkKCkgKi8KICAgICBTUVNMT1QoIl9fYWRkX18iLCBzcV9jb25jYXQsIE5VTEwsIHdyYXBfYmluYXJ5ZnVuYywKLSAgICAgICJ4Ll9fYWRkX18oeSkgPD09PiB4K3kiKSwKKyAgICAgICAgICAgIl9fYWRkX18oJHNlbGYsIHZhbHVlLCAvKVxuLS1cblxuUmV0dXJuIHNlbGYrdmFsdWUuIiksCiAgICAgU1FTTE9UKCJfX211bF9fIiwgc3FfcmVwZWF0LCBOVUxMLCB3cmFwX2luZGV4YXJnZnVuYywKLSAgICAgICJ4Ll9fbXVsX18obikgPD09PiB4Km4iKSwKKyAgICAgICAgICAgIl9fbXVsX18oJHNlbGYsIHZhbHVlLCAvKVxuLS1cblxuUmV0dXJuIHNlbGYqdmFsdWUubiIpLAogICAgIFNRU0xPVCgiX19ybXVsX18iLCBzcV9yZXBlYXQsIE5VTEwsIHdyYXBfaW5kZXhhcmdmdW5jLAotICAgICAgInguX19ybXVsX18obikgPD09PiBuKngiKSwKKyAgICAgICAgICAgIl9fcm11bF9fKCRzZWxmLCB2YWx1ZSwgLylcbi0tXG5cblJldHVybiBzZWxmKnZhbHVlLiIpLAogICAgIFNRU0xPVCgiX19nZXRpdGVtX18iLCBzcV9pdGVtLCBzbG90X3NxX2l0ZW0sIHdyYXBfc3FfaXRlbSwKLSAgICAgICAgICAgInguX19nZXRpdGVtX18oeSkgPD09PiB4W3ldIiksCisgICAgICAgICAgICJfX2dldGl0ZW1fXygkc2VsZiwga2V5LCAvKVxuLS1cblxuUmV0dXJuIHNlbGZba2V5XS4iKSwKICAgICBTUVNMT1QoIl9fc2V0aXRlbV9fIiwgc3FfYXNzX2l0ZW0sIHNsb3Rfc3FfYXNzX2l0ZW0sIHdyYXBfc3Ffc2V0aXRlbSwKLSAgICAgICAgICAgInguX19zZXRpdGVtX18oaSwgeSkgPD09PiB4W2ldPXkiKSwKKyAgICAgICAgICAgIl9fc2V0aXRlbV9fKCRzZWxmLCBrZXksIHZhbHVlLCAvKVxuLS1cblxuU2V0IHNlbGZba2V5XSB0byB2YWx1ZS4iKSwKICAgICBTUVNMT1QoIl9fZGVsaXRlbV9fIiwgc3FfYXNzX2l0ZW0sIHNsb3Rfc3FfYXNzX2l0ZW0sIHdyYXBfc3FfZGVsaXRlbSwKLSAgICAgICAgICAgInguX19kZWxpdGVtX18oeSkgPD09PiBkZWwgeFt5XSIpLAorICAgICAgICAgICAiX19kZWxpdGVtX18oJHNlbGYsIGtleSwgLylcbi0tXG5cbkRlbGV0ZSBzZWxmW2tleV0uIiksCiAgICAgU1FTTE9UKCJfX2NvbnRhaW5zX18iLCBzcV9jb250YWlucywgc2xvdF9zcV9jb250YWlucywgd3JhcF9vYmpvYmpwcm9jLAotICAgICAgICAgICAieC5fX2NvbnRhaW5zX18oeSkgPD09PiB5IGluIHgiKSwKKyAgICAgICAgICAgIl9fY29udGFpbnNfXygkc2VsZiwga2V5LCAvKVxuLS1cblxuUmV0dXJuIGtleSBpbiBzZWxmLiIpLAogICAgIFNRU0xPVCgiX19pYWRkX18iLCBzcV9pbnBsYWNlX2NvbmNhdCwgTlVMTCwKLSAgICAgIHdyYXBfYmluYXJ5ZnVuYywgInguX19pYWRkX18oeSkgPD09PiB4Kz15IiksCisgICAgICAgICAgIHdyYXBfYmluYXJ5ZnVuYywKKyAgICAgICAgICAgIl9faWFkZF9fKCRzZWxmLCB2YWx1ZSwgLylcbi0tXG5cbkltcGxlbWVudCBzZWxmKz12YWx1ZS4iKSwKICAgICBTUVNMT1QoIl9faW11bF9fIiwgc3FfaW5wbGFjZV9yZXBlYXQsIE5VTEwsCi0gICAgICB3cmFwX2luZGV4YXJnZnVuYywgInguX19pbXVsX18oeSkgPD09PiB4Kj15IiksCisgICAgICAgICAgIHdyYXBfaW5kZXhhcmdmdW5jLAorICAgICAgICAgICAiX19pbXVsX18oJHNlbGYsIHZhbHVlLCAvKVxuLS1cblxuSW1wbGVtZW50IHNlbGYqPXZhbHVlLiIpLAogCiAgICAge05VTEx9CiB9OwpAQCAtNjE4NCwxNSArNjc3MSwxNCBAQAogewogICAgIFB5VHlwZU9iamVjdCAqc3ViY2xhc3M7CiAgICAgUHlPYmplY3QgKnJlZiwgKnN1YmNsYXNzZXMsICpkaWN0OwotICAgIFB5X3NzaXplX3QgaSwgbjsKKyAgICBQeV9zc2l6ZV90IGk7CiAKICAgICBzdWJjbGFzc2VzID0gdHlwZS0+dHBfc3ViY2xhc3NlczsKICAgICBpZiAoc3ViY2xhc3NlcyA9PSBOVUxMKQogICAgICAgICByZXR1cm4gMDsKLSAgICBhc3NlcnQoUHlMaXN0X0NoZWNrKHN1YmNsYXNzZXMpKTsKLSAgICBuID0gUHlMaXN0X0dFVF9TSVpFKHN1YmNsYXNzZXMpOwotICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLSAgICAgICAgcmVmID0gUHlMaXN0X0dFVF9JVEVNKHN1YmNsYXNzZXMsIGkpOworICAgIGFzc2VydChQeURpY3RfQ2hlY2tFeGFjdChzdWJjbGFzc2VzKSk7CisgICAgaSA9IDA7CisgICAgd2hpbGUgKFB5RGljdF9OZXh0KHN1YmNsYXNzZXMsICZpLCBOVUxMLCAmcmVmKSkgewogICAgICAgICBhc3NlcnQoUHlXZWFrcmVmX0NoZWNrUmVmKHJlZikpOwogICAgICAgICBzdWJjbGFzcyA9IChQeVR5cGVPYmplY3QgKilQeVdlYWtyZWZfR0VUX09CSkVDVChyZWYpOwogICAgICAgICBhc3NlcnQoc3ViY2xhc3MgIT0gTlVMTCk7CkBAIC02MzMyLDcwICs2OTE4LDc0IEBACiBzdXBlcl9nZXRhdHRybyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm5hbWUpCiB7CiAgICAgc3VwZXJvYmplY3QgKnN1ID0gKHN1cGVyb2JqZWN0ICopc2VsZjsKLSAgICBpbnQgc2tpcCA9IHN1LT5vYmpfdHlwZSA9PSBOVUxMOworICAgIFB5VHlwZU9iamVjdCAqc3RhcnR0eXBlOworICAgIFB5T2JqZWN0ICptcm87CisgICAgUHlfc3NpemVfdCBpLCBuOwogCi0gICAgaWYgKCFza2lwKSB7Ci0gICAgICAgIC8qIFdlIHdhbnQgX19jbGFzc19fIHRvIHJldHVybiB0aGUgY2xhc3Mgb2YgdGhlIHN1cGVyIG9iamVjdAotICAgICAgICAgICAoaS5lLiBzdXBlciwgb3IgYSBzdWJjbGFzcyksIG5vdCB0aGUgY2xhc3Mgb2Ygc3UtPm9iai4gKi8KLSAgICAgICAgc2tpcCA9IChQeVVuaWNvZGVfQ2hlY2sobmFtZSkgJiYKLSAgICAgICAgICAgIFB5VW5pY29kZV9HRVRfTEVOR1RIKG5hbWUpID09IDkgJiYKLSAgICAgICAgICAgIFB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKG5hbWUsICJfX2NsYXNzX18iKSA9PSAwKTsKKyAgICBzdGFydHR5cGUgPSBzdS0+b2JqX3R5cGU7CisgICAgaWYgKHN0YXJ0dHlwZSA9PSBOVUxMKQorICAgICAgICBnb3RvIHNraXA7CisKKyAgICAvKiBXZSB3YW50IF9fY2xhc3NfXyB0byByZXR1cm4gdGhlIGNsYXNzIG9mIHRoZSBzdXBlciBvYmplY3QKKyAgICAgICAoaS5lLiBzdXBlciwgb3IgYSBzdWJjbGFzcyksIG5vdCB0aGUgY2xhc3Mgb2Ygc3UtPm9iai4gKi8KKyAgICBpZiAoUHlVbmljb2RlX0NoZWNrKG5hbWUpICYmCisgICAgICAgIFB5VW5pY29kZV9HRVRfTEVOR1RIKG5hbWUpID09IDkgJiYKKyAgICAgICAgX1B5VW5pY29kZV9Db21wYXJlV2l0aElkKG5hbWUsICZQeUlkX19fY2xhc3NfXykgPT0gMCkKKyAgICAgICAgZ290byBza2lwOworCisgICAgbXJvID0gc3RhcnR0eXBlLT50cF9tcm87CisgICAgaWYgKG1ybyA9PSBOVUxMKQorICAgICAgICBnb3RvIHNraXA7CisKKyAgICBhc3NlcnQoUHlUdXBsZV9DaGVjayhtcm8pKTsKKyAgICBuID0gUHlUdXBsZV9HRVRfU0laRShtcm8pOworCisgICAgLyogTm8gbmVlZCB0byBjaGVjayB0aGUgbGFzdCBvbmU6IGl0J3MgZ29ubmEgYmUgc2tpcHBlZCBhbnl3YXkuICAqLworICAgIGZvciAoaSA9IDA7IGkrMSA8IG47IGkrKykgeworICAgICAgICBpZiAoKFB5T2JqZWN0ICopKHN1LT50eXBlKSA9PSBQeVR1cGxlX0dFVF9JVEVNKG1ybywgaSkpCisgICAgICAgICAgICBicmVhazsKICAgICB9CisgICAgaSsrOyAgLyogc2tpcCBzdS0+dHlwZSAoaWYgYW55KSAgKi8KKyAgICBpZiAoaSA+PSBuKQorICAgICAgICBnb3RvIHNraXA7CiAKLSAgICBpZiAoIXNraXApIHsKLSAgICAgICAgUHlPYmplY3QgKm1ybywgKnJlcywgKnRtcCwgKmRpY3Q7Ci0gICAgICAgIFB5VHlwZU9iamVjdCAqc3RhcnR0eXBlOworICAgIC8qIGtlZXAgYSBzdHJvbmcgcmVmZXJlbmNlIHRvIG1ybyBiZWNhdXNlIHN0YXJ0dHlwZS0+dHBfbXJvIGNhbiBiZQorICAgICAgIHJlcGxhY2VkIGR1cmluZyBQeURpY3RfR2V0SXRlbShkaWN0LCBuYW1lKSAgKi8KKyAgICBQeV9JTkNSRUYobXJvKTsKKyAgICBkbyB7CisgICAgICAgIFB5T2JqZWN0ICpyZXMsICp0bXAsICpkaWN0OwogICAgICAgICBkZXNjcmdldGZ1bmMgZjsKLSAgICAgICAgUHlfc3NpemVfdCBpLCBuOwogCi0gICAgICAgIHN0YXJ0dHlwZSA9IHN1LT5vYmpfdHlwZTsKLSAgICAgICAgbXJvID0gc3RhcnR0eXBlLT50cF9tcm87CisgICAgICAgIHRtcCA9IFB5VHVwbGVfR0VUX0lURU0obXJvLCBpKTsKKyAgICAgICAgYXNzZXJ0KFB5VHlwZV9DaGVjayh0bXApKTsKIAotICAgICAgICBpZiAobXJvID09IE5VTEwpCi0gICAgICAgICAgICBuID0gMDsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBhc3NlcnQoUHlUdXBsZV9DaGVjayhtcm8pKTsKLSAgICAgICAgICAgIG4gPSBQeVR1cGxlX0dFVF9TSVpFKG1ybyk7Ci0gICAgICAgIH0KLSAgICAgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotICAgICAgICAgICAgaWYgKChQeU9iamVjdCAqKShzdS0+dHlwZSkgPT0gUHlUdXBsZV9HRVRfSVRFTShtcm8sIGkpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGkrKzsKLSAgICAgICAgcmVzID0gTlVMTDsKLSAgICAgICAgLyoga2VlcCBhIHN0cm9uZyByZWZlcmVuY2UgdG8gbXJvIGJlY2F1c2Ugc3RhcnR0eXBlLT50cF9tcm8gY2FuIGJlCi0gICAgICAgICAgIHJlcGxhY2VkIGR1cmluZyBQeURpY3RfR2V0SXRlbShkaWN0LCBuYW1lKSAgKi8KLSAgICAgICAgUHlfSU5DUkVGKG1ybyk7Ci0gICAgICAgIGZvciAoOyBpIDwgbjsgaSsrKSB7Ci0gICAgICAgICAgICB0bXAgPSBQeVR1cGxlX0dFVF9JVEVNKG1ybywgaSk7Ci0gICAgICAgICAgICBpZiAoUHlUeXBlX0NoZWNrKHRtcCkpCi0gICAgICAgICAgICAgICAgZGljdCA9ICgoUHlUeXBlT2JqZWN0ICopdG1wKS0+dHBfZGljdDsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHJlcyA9IFB5RGljdF9HZXRJdGVtKGRpY3QsIG5hbWUpOwotICAgICAgICAgICAgaWYgKHJlcyAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgUHlfSU5DUkVGKHJlcyk7Ci0gICAgICAgICAgICAgICAgZiA9IFB5X1RZUEUocmVzKS0+dHBfZGVzY3JfZ2V0OwotICAgICAgICAgICAgICAgIGlmIChmICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgdG1wID0gZihyZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAvKiBPbmx5IHBhc3MgJ29iaicgcGFyYW0gaWYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgaXMgaW5zdGFuY2UtbW9kZSBzdXBlcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgKFNlZSBTRiBJRCAjNzQzNjI3KQotICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIChzdS0+b2JqID09IChQeU9iamVjdCAqKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3UtPm9ial90eXBlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAoUHlPYmplY3QgKilOVUxMCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBzdS0+b2JqKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIChQeU9iamVjdCAqKXN0YXJ0dHlwZSk7Ci0gICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihyZXMpOwotICAgICAgICAgICAgICAgICAgICByZXMgPSB0bXA7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihtcm8pOwotICAgICAgICAgICAgICAgIHJldHVybiByZXM7CisgICAgICAgIGRpY3QgPSAoKFB5VHlwZU9iamVjdCAqKXRtcCktPnRwX2RpY3Q7CisgICAgICAgIGFzc2VydChkaWN0ICE9IE5VTEwgJiYgUHlEaWN0X0NoZWNrKGRpY3QpKTsKKworICAgICAgICByZXMgPSBQeURpY3RfR2V0SXRlbShkaWN0LCBuYW1lKTsKKyAgICAgICAgaWYgKHJlcyAhPSBOVUxMKSB7CisgICAgICAgICAgICBQeV9JTkNSRUYocmVzKTsKKworICAgICAgICAgICAgZiA9IFB5X1RZUEUocmVzKS0+dHBfZGVzY3JfZ2V0OworICAgICAgICAgICAgaWYgKGYgIT0gTlVMTCkgeworICAgICAgICAgICAgICAgIHRtcCA9IGYocmVzLAorICAgICAgICAgICAgICAgICAgICAvKiBPbmx5IHBhc3MgJ29iaicgcGFyYW0gaWYgdGhpcyBpcyBpbnN0YW5jZS1tb2RlIHN1cGVyCisgICAgICAgICAgICAgICAgICAgICAgIChTZWUgU0YgSUQgIzc0MzYyNykgICovCisgICAgICAgICAgICAgICAgICAgIChzdS0+b2JqID09IChQeU9iamVjdCAqKXN0YXJ0dHlwZSkgPyBOVUxMIDogc3UtPm9iaiwKKyAgICAgICAgICAgICAgICAgICAgKFB5T2JqZWN0ICopc3RhcnR0eXBlKTsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYocmVzKTsKKyAgICAgICAgICAgICAgICByZXMgPSB0bXA7CiAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFB5X0RFQ1JFRihtcm8pOworICAgICAgICAgICAgcmV0dXJuIHJlczsKICAgICAgICAgfQotICAgICAgICBQeV9ERUNSRUYobXJvKTsKLSAgICB9CisKKyAgICAgICAgaSsrOworICAgIH0gd2hpbGUgKGkgPCBuKTsKKyAgICBQeV9ERUNSRUYobXJvKTsKKworICBza2lwOgogICAgIHJldHVybiBQeU9iamVjdF9HZW5lcmljR2V0QXR0cihzZWxmLCBuYW1lKTsKIH0KIApAQCAtNjUwNSw5ICs3MDk1LDE2IEBACiAgICAgaWYgKHR5cGUgPT0gTlVMTCkgewogICAgICAgICAvKiBDYWxsIHN1cGVyKCksIHdpdGhvdXQgYXJncyAtLSBmaWxsIGluIGZyb20gX19jbGFzc19fCiAgICAgICAgICAgIGFuZCBmaXJzdCBsb2NhbCB2YXJpYWJsZSBvbiB0aGUgc3RhY2suICovCi0gICAgICAgIFB5RnJhbWVPYmplY3QgKmYgPSBQeVRocmVhZFN0YXRlX0dFVCgpLT5mcmFtZTsKLSAgICAgICAgUHlDb2RlT2JqZWN0ICpjbyA9IGYtPmZfY29kZTsKKyAgICAgICAgUHlGcmFtZU9iamVjdCAqZjsKKyAgICAgICAgUHlDb2RlT2JqZWN0ICpjbzsKICAgICAgICAgUHlfc3NpemVfdCBpLCBuOworICAgICAgICBmID0gUHlUaHJlYWRTdGF0ZV9HRVQoKS0+ZnJhbWU7CisgICAgICAgIGlmIChmID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1cGVyKCk6IG5vIGN1cnJlbnQgZnJhbWUiKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBjbyA9IGYtPmZfY29kZTsKICAgICAgICAgaWYgKGNvID09IE5VTEwpIHsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1cGVyKCk6IG5vIGNvZGUgb2JqZWN0Iik7CkBAIC02NTQ1LDggKzcxNDIsNyBAQAogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CiAgICAgICAgICAgICBQeU9iamVjdCAqbmFtZSA9IFB5VHVwbGVfR0VUX0lURU0oY28tPmNvX2ZyZWV2YXJzLCBpKTsKICAgICAgICAgICAgIGFzc2VydChQeVVuaWNvZGVfQ2hlY2sobmFtZSkpOwotICAgICAgICAgICAgaWYgKCFQeVVuaWNvZGVfQ29tcGFyZVdpdGhBU0NJSVN0cmluZyhuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiX19jbGFzc19fIikpIHsKKyAgICAgICAgICAgIGlmICghX1B5VW5pY29kZV9Db21wYXJlV2l0aElkKG5hbWUsICZQeUlkX19fY2xhc3NfXykpIHsKICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IGluZGV4ID0gY28tPmNvX25sb2NhbHMgKwogICAgICAgICAgICAgICAgICAgICBQeVR1cGxlX0dFVF9TSVpFKGNvLT5jb19jZWxsdmFycykgKyBpOwogICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpjZWxsID0gZi0+Zl9sb2NhbHNwbHVzW2luZGV4XTsKZGlmZiAtLWdpdCBhL09iamVjdHMvdW5pY29kZWN0eXBlLmMgYi9PYmplY3RzL3VuaWNvZGVjdHlwZS5jCmluZGV4IGE1NzJjMTIuLmVhNTQwZDYgMTAwNjQ0Ci0tLSBhL09iamVjdHMvdW5pY29kZWN0eXBlLmMKKysrIGIvT2JqZWN0cy91bmljb2RlY3R5cGUuYwpAQCAtNjEsNyArNjEsNyBAQAogLyogUmV0dXJucyB0aGUgdGl0bGVjYXNlIFVuaWNvZGUgY2hhcmFjdGVycyBjb3JyZXNwb25kaW5nIHRvIGNoIG9yIGp1c3QKICAgIGNoIGlmIG5vIHRpdGxlY2FzZSBtYXBwaW5nIGlzIGtub3duLiAqLwogCi1QeV9VQ1M0IF9QeVVuaWNvZGVfVG9UaXRsZWNhc2UocmVnaXN0ZXIgUHlfVUNTNCBjaCkKK1B5X1VDUzQgX1B5VW5pY29kZV9Ub1RpdGxlY2FzZShQeV9VQ1M0IGNoKQogewogICAgIGNvbnN0IF9QeVVuaWNvZGVfVHlwZVJlY29yZCAqY3R5cGUgPSBnZXR0eXBlcmVjb3JkKGNoKTsKIApkaWZmIC0tZ2l0IGEvT2JqZWN0cy91bmljb2Rlb2JqZWN0LmMgYi9PYmplY3RzL3VuaWNvZGVvYmplY3QuYwppbmRleCAyYmMzNGM1Li4xOTNkODk4IDEwMDY0NAotLS0gYS9PYmplY3RzL3VuaWNvZGVvYmplY3QuYworKysgYi9PYmplY3RzL3VuaWNvZGVvYmplY3QuYwpAQCAtNDcsMTMgKzQ3LDEwIEBACiAjaW5jbHVkZSA8d2luZG93cy5oPgogI2VuZGlmCiAKLS8qIEVuZGlhbm5lc3Mgc3dpdGNoZXM7IGRlZmF1bHRzIHRvIGxpdHRsZSBlbmRpYW4gKi8KLQotI2lmZGVmIFdPUkRTX0JJR0VORElBTgotIyBkZWZpbmUgQllURU9SREVSX0lTX0JJR19FTkRJQU4KLSNlbHNlCi0jIGRlZmluZSBCWVRFT1JERVJfSVNfTElUVExFX0VORElBTgotI2VuZGlmCisvKltjbGluaWMgaW5wdXRdCitjbGFzcyBzdHIgIlB5VW5pY29kZU9iamVjdCAqIiAiJlB5VW5pY29kZV9UeXBlIgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWRhMzlhM2VlNWU2YjRiMGQgaW5wdXQ9NjA0ZTkxNjg1NDgwMGZhOF0qLwogCiAvKiAtLS0gR2xvYmFscyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtMTMwLDE2ICsxMjcsMTQgQEAKIC8qIHRydWUgaWYgdGhlIFVuaWNvZGUgb2JqZWN0IGhhcyBhbiBhbGxvY2F0ZWQgVVRGLTggbWVtb3J5IGJsb2NrCiAgICAobm90IHNoYXJlZCB3aXRoIG90aGVyIGRhdGEpICovCiAjZGVmaW5lIF9QeVVuaWNvZGVfSEFTX1VURjhfTUVNT1JZKG9wKSAgICAgICAgICAgICAgICAgIFwKLSAgICAoYXNzZXJ0KF9QeVVuaWNvZGVfQ0hFQ0sob3ApKSwgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAoIVB5VW5pY29kZV9JU19DT01QQUNUX0FTQ0lJKG9wKSAgICAgICAgICAgICAgICAgICBcCisgICAgKCghUHlVbmljb2RlX0lTX0NPTVBBQ1RfQVNDSUkob3ApICAgICAgICAgICAgICAgICAgIFwKICAgICAgICYmIF9QeVVuaWNvZGVfVVRGOChvcCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgJiYgX1B5VW5pY29kZV9VVEY4KG9wKSAhPSBQeVVuaWNvZGVfREFUQShvcCkpKQogCiAvKiB0cnVlIGlmIHRoZSBVbmljb2RlIG9iamVjdCBoYXMgYW4gYWxsb2NhdGVkIHdzdHIgbWVtb3J5IGJsb2NrCiAgICAobm90IHNoYXJlZCB3aXRoIG90aGVyIGRhdGEpICovCiAjZGVmaW5lIF9QeVVuaWNvZGVfSEFTX1dTVFJfTUVNT1JZKG9wKSAgICAgICAgICAgICAgICAgIFwKLSAgICAoYXNzZXJ0KF9QeVVuaWNvZGVfQ0hFQ0sob3ApKSwgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAoX1B5VW5pY29kZV9XU1RSKG9wKSAmJiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKChfUHlVbmljb2RlX1dTVFIob3ApICYmICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICghUHlVbmljb2RlX0lTX1JFQURZKG9wKSB8fCAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgIF9QeVVuaWNvZGVfV1NUUihvcCkgIT0gUHlVbmljb2RlX0RBVEEob3ApKSkpCiAKQEAgLTE1MCw5ICsxNDUsOSBAQAogICAgYnVmZmVyIHdoZXJlIHRoZSByZXN1bHQgY2hhcmFjdGVycyBhcmUgd3JpdHRlbiB0by4gKi8KICNkZWZpbmUgX1B5VW5pY29kZV9DT05WRVJUX0JZVEVTKGZyb21fdHlwZSwgdG9fdHlwZSwgYmVnaW4sIGVuZCwgdG8pIFwKICAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB0b190eXBlICpfdG8gPSAodG9fdHlwZSAqKSB0bzsgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGNvbnN0IGZyb21fdHlwZSAqX2l0ZXIgPSAoYmVnaW4pOyAgICAgICAgICAgICAgIFwKLSAgICAgICAgY29uc3QgZnJvbV90eXBlICpfZW5kID0gKGVuZCk7ICAgICAgICAgICAgICAgICAgXAorICAgICAgICB0b190eXBlICpfdG8gPSAodG9fdHlwZSAqKSh0byk7ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgY29uc3QgZnJvbV90eXBlICpfaXRlciA9IChmcm9tX3R5cGUgKikoYmVnaW4pOyAgXAorICAgICAgICBjb25zdCBmcm9tX3R5cGUgKl9lbmQgPSAoZnJvbV90eXBlICopKGVuZCk7ICAgICBcCiAgICAgICAgIFB5X3NzaXplX3QgbiA9IChfZW5kKSAtIChfaXRlcik7ICAgICAgICAgICAgICAgIFwKICAgICAgICAgY29uc3QgZnJvbV90eXBlICpfdW5yb2xsZWRfZW5kID0gICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgX2l0ZXIgKyBfUHlfU0laRV9ST1VORF9ET1dOKG4sIDQpOyAgICAgICAgICBcCkBAIC0xOTksNiArMTk0LDEwIEBACiAgICAgICAgIHJldHVybiB1bmljb2RlX2VtcHR5OyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICB9IHdoaWxlICgwKQogCisvKiBGb3J3YXJkIGRlY2xhcmF0aW9uICovCitQeV9MT0NBTF9JTkxJTkUoaW50KQorX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUNoYXJJbmxpbmUoX1B5VW5pY29kZVdyaXRlciAqd3JpdGVyLCBQeV9VQ1M0IGNoKTsKKwogLyogTGlzdCBvZiBzdGF0aWMgc3RyaW5ncy4gKi8KIHN0YXRpYyBfUHlfSWRlbnRpZmllciAqc3RhdGljX3N0cmluZ3MgPSBOVUxMOwogCkBAIC00MjcsOCArNDI2LDYgQEAKICNpZm5kZWYgUHlfREVCVUcKICAgICBQeV9zc2l6ZV90IGxlbjsKIAotICAgIGFzc2VydChQeV9SRUZDTlQodW5pY29kZSkgPT0gMSk7Ci0KICAgICBsZW4gPSBfUHlVbmljb2RlX1dTVFJfTEVOR1RIKHVuaWNvZGUpOwogICAgIGlmIChsZW4gPT0gMCkgewogICAgICAgICBQeV9ERUNSRUYodW5pY29kZSk7CkBAIC00NDUsMTAgKzQ0MiwxMiBAQAogICAgIH0KIAogICAgIGlmIChfUHlVbmljb2RlX1JlYWR5KHVuaWNvZGUpIDwgMCkgewotICAgICAgICBQeV9YREVDUkVGKHVuaWNvZGUpOworICAgICAgICBQeV9ERUNSRUYodW5pY29kZSk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICNlbHNlCisgICAgYXNzZXJ0KFB5X1JFRkNOVCh1bmljb2RlKSA9PSAxKTsKKwogICAgIC8qIGRvbid0IG1ha2UgdGhlIHJlc3VsdCByZWFkeSBpbiBkZWJ1ZyBtb2RlIHRvIGVuc3VyZSB0aGF0IHRoZSBjYWxsZXIKICAgICAgICBtYWtlcyB0aGUgc3RyaW5nIHJlYWR5IGJlZm9yZSB1c2luZyBpdCAqLwogICAgIGFzc2VydChfUHlVbmljb2RlX0NoZWNrQ29uc2lzdGVuY3kodW5pY29kZSwgMSkpOwpAQCAtNDcxLDcgKzQ3MCw5IEBACiAgICAgfQogCiAgICAgaWYgKGxlbmd0aCA9PSAxKSB7Ci0gICAgICAgIFB5X1VDUzQgY2ggPSBQeVVuaWNvZGVfUkVBRF9DSEFSKHVuaWNvZGUsIDApOworICAgICAgICB2b2lkICpkYXRhID0gUHlVbmljb2RlX0RBVEEodW5pY29kZSk7CisgICAgICAgIGludCBraW5kID0gUHlVbmljb2RlX0tJTkQodW5pY29kZSk7CisgICAgICAgIFB5X1VDUzQgY2ggPSBQeVVuaWNvZGVfUkVBRChraW5kLCBkYXRhLCAwKTsKICAgICAgICAgaWYgKGNoIDwgMjU2KSB7CiAgICAgICAgICAgICBQeU9iamVjdCAqbGF0aW4xX2NoYXIgPSB1bmljb2RlX2xhdGluMVtjaF07CiAgICAgICAgICAgICBpZiAobGF0aW4xX2NoYXIgIT0gTlVMTCkgewpAQCAtNTQ0LDcgKzU0NSw2IEBACiAKIHN0YXRpYyBCTE9PTV9NQVNLIGJsb29tX2xpbmVicmVhayA9IH4oQkxPT01fTUFTSykwOwogCi0jZGVmaW5lIEJMT09NX0FERChtYXNrLCBjaCkgKChtYXNrIHw9ICgxVUwgPDwgKChjaCkgJiAoQkxPT01fV0lEVEggLSAxKSkpKSkKICNkZWZpbmUgQkxPT00obWFzaywgY2gpICAgICAoKG1hc2sgJiAgKDFVTCA8PCAoKGNoKSAmIChCTE9PTV9XSURUSCAtIDEpKSkpKQogCiAjZGVmaW5lIEJMT09NX0xJTkVCUkVBSyhjaCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC01NTQsMjEgKzU1NCw0MCBAQAogUHlfTE9DQUxfSU5MSU5FKEJMT09NX01BU0spCiBtYWtlX2Jsb29tX21hc2soaW50IGtpbmQsIHZvaWQqIHB0ciwgUHlfc3NpemVfdCBsZW4pCiB7CisjZGVmaW5lIEJMT09NX1VQREFURShUWVBFLCBNQVNLLCBQVFIsIExFTikgICAgICAgICAgICAgXAorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgVFlQRSAqZGF0YSA9IChUWVBFICopUFRSOyAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIFRZUEUgKmVuZCA9IGRhdGEgKyBMRU47ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBQeV9VQ1M0IGNoOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZm9yICg7IGRhdGEgIT0gZW5kOyBkYXRhKyspIHsgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBjaCA9ICpkYXRhOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgTUFTSyB8PSAoMVVMIDw8IChjaCAmIChCTE9PTV9XSURUSCAtIDEpKSk7IFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKDApCisKICAgICAvKiBjYWxjdWxhdGUgc2ltcGxlIGJsb29tLXN0eWxlIGJpdG1hc2sgZm9yIGEgZ2l2ZW4gdW5pY29kZSBzdHJpbmcgKi8KIAogICAgIEJMT09NX01BU0sgbWFzazsKLSAgICBQeV9zc2l6ZV90IGk7CiAKICAgICBtYXNrID0gMDsKLSAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCi0gICAgICAgIEJMT09NX0FERChtYXNrLCBQeVVuaWNvZGVfUkVBRChraW5kLCBwdHIsIGkpKTsKLQorICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNhc2UgUHlVbmljb2RlXzFCWVRFX0tJTkQ6CisgICAgICAgIEJMT09NX1VQREFURShQeV9VQ1MxLCBtYXNrLCBwdHIsIGxlbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUHlVbmljb2RlXzJCWVRFX0tJTkQ6CisgICAgICAgIEJMT09NX1VQREFURShQeV9VQ1MyLCBtYXNrLCBwdHIsIGxlbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUHlVbmljb2RlXzRCWVRFX0tJTkQ6CisgICAgICAgIEJMT09NX1VQREFURShQeV9VQ1M0LCBtYXNrLCBwdHIsIGxlbik7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGFzc2VydCgwKTsKKyAgICB9CiAgICAgcmV0dXJuIG1hc2s7Ci19CiAKLSNkZWZpbmUgQkxPT01fTUVNQkVSKG1hc2ssIGNociwgc3RyKSBcCi0gICAgKEJMT09NKG1hc2ssIGNocikgXAotICAgICAmJiAoUHlVbmljb2RlX0ZpbmRDaGFyKHN0ciwgY2hyLCAwLCBQeVVuaWNvZGVfR0VUX0xFTkdUSChzdHIpLCAxKSA+PSAwKSkKKyN1bmRlZiBCTE9PTV9VUERBVEUKK30KIAogLyogQ29tcGlsYXRpb24gb2YgdGVtcGxhdGVkIHJvdXRpbmVzICovCiAKQEAgLTU4OCw2ICs2MDcsNyBAQAogI2luY2x1ZGUgInN0cmluZ2xpYi9zcGxpdC5oIgogI2luY2x1ZGUgInN0cmluZ2xpYi9jb3VudC5oIgogI2luY2x1ZGUgInN0cmluZ2xpYi9maW5kLmgiCisjaW5jbHVkZSAic3RyaW5nbGliL3JlcGxhY2UuaCIKICNpbmNsdWRlICJzdHJpbmdsaWIvZmluZF9tYXhfY2hhci5oIgogI2luY2x1ZGUgInN0cmluZ2xpYi9sb2NhbGV1dGlsLmgiCiAjaW5jbHVkZSAic3RyaW5nbGliL3VuZGVmLmgiCkBAIC01OTgsNiArNjE4LDcgQEAKICNpbmNsdWRlICJzdHJpbmdsaWIvc3BsaXQuaCIKICNpbmNsdWRlICJzdHJpbmdsaWIvY291bnQuaCIKICNpbmNsdWRlICJzdHJpbmdsaWIvZmluZC5oIgorI2luY2x1ZGUgInN0cmluZ2xpYi9yZXBsYWNlLmgiCiAjaW5jbHVkZSAic3RyaW5nbGliL2ZpbmRfbWF4X2NoYXIuaCIKICNpbmNsdWRlICJzdHJpbmdsaWIvbG9jYWxldXRpbC5oIgogI2luY2x1ZGUgInN0cmluZ2xpYi91bmRlZi5oIgpAQCAtNjA4LDYgKzYyOSw3IEBACiAjaW5jbHVkZSAic3RyaW5nbGliL3NwbGl0LmgiCiAjaW5jbHVkZSAic3RyaW5nbGliL2NvdW50LmgiCiAjaW5jbHVkZSAic3RyaW5nbGliL2ZpbmQuaCIKKyNpbmNsdWRlICJzdHJpbmdsaWIvcmVwbGFjZS5oIgogI2luY2x1ZGUgInN0cmluZ2xpYi9maW5kX21heF9jaGFyLmgiCiAjaW5jbHVkZSAic3RyaW5nbGliL2xvY2FsZXV0aWwuaCIKICNpbmNsdWRlICJzdHJpbmdsaWIvdW5kZWYuaCIKQEAgLTY1NCw2ICs2NzYsMjUgQEAKICAgICB9CiB9CiAKKyNpZmRlZiBQeV9ERUJVRworLyogRmlsbCB0aGUgZGF0YSBvZiBhbiBVbmljb2RlIHN0cmluZyB3aXRoIGludmFsaWQgY2hhcmFjdGVycyB0byBkZXRlY3QgYnVncworICAgZWFybGllci4KKworICAgX1B5VW5pY29kZV9DaGVja0NvbnNpc3RlbmN5KHN0ciwgMSkgZGV0ZWN0cyBpbnZhbGlkIGNoYXJhY3RlcnMsIGF0IGxlYXN0IGZvcgorICAgQVNDSUkgYW5kIFVDUy00IHN0cmluZ3MuIFUrMDBGRiBpcyBpbnZhbGlkIGluIEFTQ0lJIGFuZCBVK0ZGRkZGRkZGIGlzIGFuCisgICBpbnZhbGlkIGNoYXJhY3RlciBpbiBVbmljb2RlIDYuMC4gKi8KK3N0YXRpYyB2b2lkCit1bmljb2RlX2ZpbGxfaW52YWxpZChQeU9iamVjdCAqdW5pY29kZSwgUHlfc3NpemVfdCBvbGRfbGVuZ3RoKQoreworICAgIGludCBraW5kID0gUHlVbmljb2RlX0tJTkQodW5pY29kZSk7CisgICAgUHlfVUNTMSAqZGF0YSA9IFB5VW5pY29kZV8xQllURV9EQVRBKHVuaWNvZGUpOworICAgIFB5X3NzaXplX3QgbGVuZ3RoID0gX1B5VW5pY29kZV9MRU5HVEgodW5pY29kZSk7CisgICAgaWYgKGxlbmd0aCA8PSBvbGRfbGVuZ3RoKQorICAgICAgICByZXR1cm47CisgICAgbWVtc2V0KGRhdGEgKyBvbGRfbGVuZ3RoICoga2luZCwgMHhmZiwgKGxlbmd0aCAtIG9sZF9sZW5ndGgpICoga2luZCk7Cit9CisjZW5kaWYKKwogc3RhdGljIFB5T2JqZWN0KgogcmVzaXplX2NvbXBhY3QoUHlPYmplY3QgKnVuaWNvZGUsIFB5X3NzaXplX3QgbGVuZ3RoKQogewpAQCAtNjYyLDYgKzcwMywxMCBAQAogICAgIFB5X3NzaXplX3QgbmV3X3NpemU7CiAgICAgaW50IHNoYXJlX3dzdHI7CiAgICAgUHlPYmplY3QgKm5ld191bmljb2RlOworI2lmZGVmIFB5X0RFQlVHCisgICAgUHlfc3NpemVfdCBvbGRfbGVuZ3RoID0gX1B5VW5pY29kZV9MRU5HVEgodW5pY29kZSk7CisjZW5kaWYKKwogICAgIGFzc2VydCh1bmljb2RlX21vZGlmaWFibGUodW5pY29kZSkpOwogICAgIGFzc2VydChQeVVuaWNvZGVfSVNfUkVBRFkodW5pY29kZSkpOwogICAgIGFzc2VydChQeVVuaWNvZGVfSVNfQ09NUEFDVCh1bmljb2RlKSk7CkBAIC02NzksNiArNzI0LDExIEBACiAgICAgfQogICAgIG5ld19zaXplID0gKHN0cnVjdF9zaXplICsgKGxlbmd0aCArIDEpICogY2hhcl9zaXplKTsKIAorICAgIGlmIChfUHlVbmljb2RlX0hBU19VVEY4X01FTU9SWSh1bmljb2RlKSkgeworICAgICAgICBQeU9iamVjdF9ERUwoX1B5VW5pY29kZV9VVEY4KHVuaWNvZGUpKTsKKyAgICAgICAgX1B5VW5pY29kZV9VVEY4KHVuaWNvZGUpID0gTlVMTDsKKyAgICAgICAgX1B5VW5pY29kZV9VVEY4X0xFTkdUSCh1bmljb2RlKSA9IDA7CisgICAgfQogICAgIF9QeV9ERUNfUkVGVE9UQUw7CiAgICAgX1B5X0ZvcmdldFJlZmVyZW5jZSh1bmljb2RlKTsKIApAQCAtNzAxLDYgKzc1MSw5IEBACiAgICAgICAgIFB5T2JqZWN0X0RFTChfUHlVbmljb2RlX1dTVFIodW5pY29kZSkpOwogICAgICAgICBfUHlVbmljb2RlX1dTVFIodW5pY29kZSkgPSBOVUxMOwogICAgIH0KKyNpZmRlZiBQeV9ERUJVRworICAgIHVuaWNvZGVfZmlsbF9pbnZhbGlkKHVuaWNvZGUsIG9sZF9sZW5ndGgpOworI2VuZGlmCiAgICAgUHlVbmljb2RlX1dSSVRFKFB5VW5pY29kZV9LSU5EKHVuaWNvZGUpLCBQeVVuaWNvZGVfREFUQSh1bmljb2RlKSwKICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoLCAwKTsKICAgICBhc3NlcnQoX1B5VW5pY29kZV9DaGVja0NvbnNpc3RlbmN5KHVuaWNvZGUsIDApKTsKQEAgLTcxOSw2ICs3NzIsOSBAQAogICAgICAgICBQeV9zc2l6ZV90IGNoYXJfc2l6ZTsKICAgICAgICAgaW50IHNoYXJlX3dzdHIsIHNoYXJlX3V0Zjg7CiAgICAgICAgIHZvaWQgKmRhdGE7CisjaWZkZWYgUHlfREVCVUcKKyAgICAgICAgUHlfc3NpemVfdCBvbGRfbGVuZ3RoID0gX1B5VW5pY29kZV9MRU5HVEgodW5pY29kZSk7CisjZW5kaWYKIAogICAgICAgICBkYXRhID0gX1B5VW5pY29kZV9EQVRBX0FOWSh1bmljb2RlKTsKICAgICAgICAgY2hhcl9zaXplID0gUHlVbmljb2RlX0tJTkQodW5pY29kZSk7CkBAIC03NTQsNiArODEwLDkgQEAKICAgICAgICAgfQogICAgICAgICBfUHlVbmljb2RlX0xFTkdUSCh1bmljb2RlKSA9IGxlbmd0aDsKICAgICAgICAgUHlVbmljb2RlX1dSSVRFKFB5VW5pY29kZV9LSU5EKHVuaWNvZGUpLCBkYXRhLCBsZW5ndGgsIDApOworI2lmZGVmIFB5X0RFQlVHCisgICAgICAgIHVuaWNvZGVfZmlsbF9pbnZhbGlkKHVuaWNvZGUsIG9sZF9sZW5ndGgpOworI2VuZGlmCiAgICAgICAgIGlmIChzaGFyZV93c3RyIHx8IF9QeVVuaWNvZGVfV1NUUih1bmljb2RlKSA9PSBOVUxMKSB7CiAgICAgICAgICAgICBhc3NlcnQoX1B5VW5pY29kZV9DaGVja0NvbnNpc3RlbmN5KHVuaWNvZGUsIDApKTsKICAgICAgICAgICAgIHJldHVybiAwOwpAQCAtODA2LDggKzg2NSw4IEBACiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgY29weV9sZW5ndGggPSBfUHlVbmljb2RlX1dTVFJfTEVOR1RIKHVuaWNvZGUpOwogICAgICAgICBjb3B5X2xlbmd0aCA9IFB5X01JTihjb3B5X2xlbmd0aCwgbGVuZ3RoKTsKLSAgICAgICAgUHlfVU5JQ09ERV9DT1BZKF9QeVVuaWNvZGVfV1NUUih3KSwgX1B5VW5pY29kZV9XU1RSKHVuaWNvZGUpLAotICAgICAgICAgICAgICAgICAgICAgICAgY29weV9sZW5ndGgpOworICAgICAgICBQeV9NRU1DUFkoX1B5VW5pY29kZV9XU1RSKHcpLCBfUHlVbmljb2RlX1dTVFIodW5pY29kZSksCisgICAgICAgICAgICAgICAgICBjb3B5X2xlbmd0aCAqIHNpemVvZih3Y2hhcl90KSk7CiAgICAgICAgIHJldHVybiB3OwogICAgIH0KIH0KQEAgLTgyNCw3ICs4ODMsNyBAQAogc3RhdGljIFB5VW5pY29kZU9iamVjdCAqCiBfUHlVbmljb2RlX05ldyhQeV9zc2l6ZV90IGxlbmd0aCkKIHsKLSAgICByZWdpc3RlciBQeVVuaWNvZGVPYmplY3QgKnVuaWNvZGU7CisgICAgUHlVbmljb2RlT2JqZWN0ICp1bmljb2RlOwogICAgIHNpemVfdCBuZXdfc2l6ZTsKIAogICAgIC8qIE9wdGltaXphdGlvbiBmb3IgZW1wdHkgc3RyaW5ncyAqLwpAQCAtODQ3LDYgKzkwNiwxOSBAQAogICAgIGlmICh1bmljb2RlID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIG5ld19zaXplID0gc2l6ZW9mKFB5X1VOSUNPREUpICogKChzaXplX3QpbGVuZ3RoICsgMSk7CisKKyAgICBfUHlVbmljb2RlX1dTVFJfTEVOR1RIKHVuaWNvZGUpID0gbGVuZ3RoOworICAgIF9QeVVuaWNvZGVfSEFTSCh1bmljb2RlKSA9IC0xOworICAgIF9QeVVuaWNvZGVfU1RBVEUodW5pY29kZSkuaW50ZXJuZWQgPSAwOworICAgIF9QeVVuaWNvZGVfU1RBVEUodW5pY29kZSkua2luZCA9IDA7CisgICAgX1B5VW5pY29kZV9TVEFURSh1bmljb2RlKS5jb21wYWN0ID0gMDsKKyAgICBfUHlVbmljb2RlX1NUQVRFKHVuaWNvZGUpLnJlYWR5ID0gMDsKKyAgICBfUHlVbmljb2RlX1NUQVRFKHVuaWNvZGUpLmFzY2lpID0gMDsKKyAgICBfUHlVbmljb2RlX0RBVEFfQU5ZKHVuaWNvZGUpID0gTlVMTDsKKyAgICBfUHlVbmljb2RlX0xFTkdUSCh1bmljb2RlKSA9IDA7CisgICAgX1B5VW5pY29kZV9VVEY4KHVuaWNvZGUpID0gTlVMTDsKKyAgICBfUHlVbmljb2RlX1VURjhfTEVOR1RIKHVuaWNvZGUpID0gMDsKKwogICAgIF9QeVVuaWNvZGVfV1NUUih1bmljb2RlKSA9IChQeV9VTklDT0RFKikgUHlPYmplY3RfTUFMTE9DKG5ld19zaXplKTsKICAgICBpZiAoIV9QeVVuaWNvZGVfV1NUUih1bmljb2RlKSkgewogICAgICAgICBQeV9ERUNSRUYodW5pY29kZSk7CkBAIC04NjMsMTcgKzkzNSw3IEBACiAgICAgICovCiAgICAgX1B5VW5pY29kZV9XU1RSKHVuaWNvZGUpWzBdID0gMDsKICAgICBfUHlVbmljb2RlX1dTVFIodW5pY29kZSlbbGVuZ3RoXSA9IDA7Ci0gICAgX1B5VW5pY29kZV9XU1RSX0xFTkdUSCh1bmljb2RlKSA9IGxlbmd0aDsKLSAgICBfUHlVbmljb2RlX0hBU0godW5pY29kZSkgPSAtMTsKLSAgICBfUHlVbmljb2RlX1NUQVRFKHVuaWNvZGUpLmludGVybmVkID0gMDsKLSAgICBfUHlVbmljb2RlX1NUQVRFKHVuaWNvZGUpLmtpbmQgPSAwOwotICAgIF9QeVVuaWNvZGVfU1RBVEUodW5pY29kZSkuY29tcGFjdCA9IDA7Ci0gICAgX1B5VW5pY29kZV9TVEFURSh1bmljb2RlKS5yZWFkeSA9IDA7Ci0gICAgX1B5VW5pY29kZV9TVEFURSh1bmljb2RlKS5hc2NpaSA9IDA7Ci0gICAgX1B5VW5pY29kZV9EQVRBX0FOWSh1bmljb2RlKSA9IE5VTEw7Ci0gICAgX1B5VW5pY29kZV9MRU5HVEgodW5pY29kZSkgPSAwOwotICAgIF9QeVVuaWNvZGVfVVRGOCh1bmljb2RlKSA9IE5VTEw7Ci0gICAgX1B5VW5pY29kZV9VVEY4X0xFTkdUSCh1bmljb2RlKSA9IDA7CisKICAgICBhc3NlcnQoX1B5VW5pY29kZV9DaGVja0NvbnNpc3RlbmN5KChQeU9iamVjdCAqKXVuaWNvZGUsIDApKTsKICAgICByZXR1cm4gdW5pY29kZTsKIH0KQEAgLTk1NCwxNyArMTAxNiwxOSBAQAogICAgIH0KICAgICBlbHNlCiAgICAgICAgIGRhdGEgPSB1bmljb2RlLT5kYXRhLmFueTsKLSAgICBwcmludGYoIiVzOiBsZW49JXp1LCAiLHVuaWNvZGVfa2luZF9uYW1lKG9wKSwgYXNjaWktPmxlbmd0aCk7CisgICAgcHJpbnRmKCIlczogbGVuPSUiIFBZX0ZPUk1BVF9TSVpFX1QgInUsICIsCisgICAgICAgICAgIHVuaWNvZGVfa2luZF9uYW1lKG9wKSwgYXNjaWktPmxlbmd0aCk7CiAKICAgICBpZiAoYXNjaWktPndzdHIgPT0gZGF0YSkKICAgICAgICAgcHJpbnRmKCJzaGFyZWQgIik7CiAgICAgcHJpbnRmKCJ3c3RyPSVwIiwgYXNjaWktPndzdHIpOwogCiAgICAgaWYgKCEoYXNjaWktPnN0YXRlLmFzY2lpID09IDEgJiYgYXNjaWktPnN0YXRlLmNvbXBhY3QgPT0gMSkpIHsKLSAgICAgICAgcHJpbnRmKCIgKCV6dSksICIsIGNvbXBhY3QtPndzdHJfbGVuZ3RoKTsKKyAgICAgICAgcHJpbnRmKCIgKCUiIFBZX0ZPUk1BVF9TSVpFX1QgInUpLCAiLCBjb21wYWN0LT53c3RyX2xlbmd0aCk7CiAgICAgICAgIGlmICghYXNjaWktPnN0YXRlLmNvbXBhY3QgJiYgY29tcGFjdC0+dXRmOCA9PSB1bmljb2RlLT5kYXRhLmFueSkKICAgICAgICAgICAgIHByaW50Zigic2hhcmVkICIpOwotICAgICAgICBwcmludGYoInV0Zjg9JXAgKCV6dSkiLCBjb21wYWN0LT51dGY4LCBjb21wYWN0LT51dGY4X2xlbmd0aCk7CisgICAgICAgIHByaW50ZigidXRmOD0lcCAoJSIgUFlfRk9STUFUX1NJWkVfVCAidSkiLAorICAgICAgICAgICAgICAgY29tcGFjdC0+dXRmOCwgY29tcGFjdC0+dXRmOF9sZW5ndGgpOwogICAgIH0KICAgICBwcmludGYoIiwgZGF0YT0lcFxuIiwgZGF0YSk7CiB9CkBAIC0xMDc4LDExICsxMTQyLDcgQEAKICAgICAgICAgfQogICAgIH0KICNpZmRlZiBQeV9ERUJVRwotICAgIC8qIEZpbGwgdGhlIGRhdGEgd2l0aCBpbnZhbGlkIGNoYXJhY3RlcnMgdG8gZGV0ZWN0IGJ1Z3MgZWFybGllci4KLSAgICAgICBfUHlVbmljb2RlX0NoZWNrQ29uc2lzdGVuY3koc3RyLCAxKSBkZXRlY3RzIGludmFsaWQgY2hhcmFjdGVycywKLSAgICAgICBhdCBsZWFzdCBmb3IgQVNDSUkgYW5kIFVDUy00IHN0cmluZ3MuIFUrMDBGRiBpcyBpbnZhbGlkIGluIEFTQ0lJCi0gICAgICAgYW5kIFUrRkZGRkZGRkYgaXMgYW4gaW52YWxpZCBjaGFyYWN0ZXIgaW4gVW5pY29kZSA2LjAuICovCi0gICAgbWVtc2V0KGRhdGEsIDB4ZmYsIHNpemUgKiBraW5kKTsKKyAgICB1bmljb2RlX2ZpbGxfaW52YWxpZCgoUHlPYmplY3QqKXVuaWNvZGUsIDApOwogI2VuZGlmCiAgICAgYXNzZXJ0KF9QeVVuaWNvZGVfQ2hlY2tDb25zaXN0ZW5jeSgoUHlPYmplY3QqKXVuaWNvZGUsIDApKTsKICAgICByZXR1cm4gb2JqOwpAQCAtMTQ4MCw2ICsxNTQwLDEwIEBACiAgICAgICAgIC8qIGluIGNhc2UgdGhlIG5hdGl2ZSByZXByZXNlbnRhdGlvbiBpcyAyLWJ5dGVzLCB3ZSBuZWVkIHRvIGFsbG9jYXRlIGEKICAgICAgICAgICAgbmV3IG5vcm1hbGl6ZWQgNC1ieXRlIHZlcnNpb24uICovCiAgICAgICAgIGxlbmd0aF93b19zdXJyb2dhdGVzID0gX1B5VW5pY29kZV9XU1RSX0xFTkdUSCh1bmljb2RlKSAtIG51bV9zdXJyb2dhdGVzOworICAgICAgICBpZiAobGVuZ3RoX3dvX3N1cnJvZ2F0ZXMgPiBQWV9TU0laRV9UX01BWCAvIDQgLSAxKSB7CisgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CiAgICAgICAgIF9QeVVuaWNvZGVfREFUQV9BTlkodW5pY29kZSkgPSBQeU9iamVjdF9NQUxMT0MoNCAqIChsZW5ndGhfd29fc3Vycm9nYXRlcyArIDEpKTsKICAgICAgICAgaWYgKCFfUHlVbmljb2RlX0RBVEFfQU5ZKHVuaWNvZGUpKSB7CiAgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwpAQCAtMTUxMiw3ICsxNTc2LDcgQEAKIH0KIAogc3RhdGljIHZvaWQKLXVuaWNvZGVfZGVhbGxvYyhyZWdpc3RlciBQeU9iamVjdCAqdW5pY29kZSkKK3VuaWNvZGVfZGVhbGxvYyhQeU9iamVjdCAqdW5pY29kZSkKIHsKICAgICBzd2l0Y2ggKFB5VW5pY29kZV9DSEVDS19JTlRFUk5FRCh1bmljb2RlKSkgewogICAgIGNhc2UgU1NUQVRFX05PVF9JTlRFUk5FRDoKQEAgLTE2NDQsMzkgKzE3MDgsNyBAQAogICAgIHJldHVybiB1bmljb2RlX3Jlc2l6ZShwX3VuaWNvZGUsIGxlbmd0aCk7CiB9CiAKLXN0YXRpYyBpbnQKLXVuaWNvZGVfd2lkZW4oUHlPYmplY3QgKipwX3VuaWNvZGUsIFB5X3NzaXplX3QgbGVuZ3RoLAotICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbWF4Y2hhcikKLXsKLSAgICBQeU9iamVjdCAqcmVzdWx0OwotICAgIGFzc2VydChQeVVuaWNvZGVfSVNfUkVBRFkoKnBfdW5pY29kZSkpOwotICAgIGFzc2VydChsZW5ndGggPD0gUHlVbmljb2RlX0dFVF9MRU5HVEgoKnBfdW5pY29kZSkpOwotICAgIGlmIChtYXhjaGFyIDw9IFB5VW5pY29kZV9NQVhfQ0hBUl9WQUxVRSgqcF91bmljb2RlKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmVzdWx0ID0gUHlVbmljb2RlX05ldyhQeVVuaWNvZGVfR0VUX0xFTkdUSCgqcF91bmljb2RlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heGNoYXIpOwotICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIF9QeVVuaWNvZGVfRmFzdENvcHlDaGFyYWN0ZXJzKHJlc3VsdCwgMCwgKnBfdW5pY29kZSwgMCwgbGVuZ3RoKTsKLSAgICBQeV9ERUNSRUYoKnBfdW5pY29kZSk7Ci0gICAgKnBfdW5pY29kZSA9IHJlc3VsdDsKLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotdW5pY29kZV9wdXRjaGFyKFB5T2JqZWN0ICoqcF91bmljb2RlLCBQeV9zc2l6ZV90ICpwb3MsCi0gICAgICAgICAgICAgICAgUHlfVUNTNCBjaCkKLXsKLSAgICBhc3NlcnQoY2ggPD0gTUFYX1VOSUNPREUpOwotICAgIGlmICh1bmljb2RlX3dpZGVuKHBfdW5pY29kZSwgKnBvcywgY2gpIDwgMCkKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIFB5VW5pY29kZV9XUklURShQeVVuaWNvZGVfS0lORCgqcF91bmljb2RlKSwKLSAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0RBVEEoKnBfdW5pY29kZSksCi0gICAgICAgICAgICAgICAgICAgICgqcG9zKSsrLCBjaCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLS8qIENvcHkgYSBBU0NJSSBvciBsYXRpbjEgY2hhciogc3RyaW5nIGludG8gYSBQeXRob24gVW5pY29kZSBzdHJpbmcuCisvKiBDb3B5IGFuIEFTQ0lJIG9yIGxhdGluMSBjaGFyKiBzdHJpbmcgaW50byBhIFB5dGhvbiBVbmljb2RlIHN0cmluZy4KIAogICAgV0FSTklORzogVGhlIGZ1bmN0aW9uIGRvZXNuJ3QgY29weSB0aGUgdGVybWluYXRpbmcgbnVsbCBjaGFyYWN0ZXIgYW5kCiAgICBkb2Vzbid0IGNoZWNrIHRoZSBtYXhpbXVtIGNoYXJhY3RlciAobWF5IHdyaXRlIGEgbGF0aW4xIGNoYXJhY3RlciBpbiBhbgpAQCAtMTY5Miw2ICsxNzI0LDE0IEBACiAgICAgc3dpdGNoIChraW5kKSB7CiAgICAgY2FzZSBQeVVuaWNvZGVfMUJZVEVfS0lORDogewogICAgICAgICBhc3NlcnQoaW5kZXggKyBsZW4gPD0gUHlVbmljb2RlX0dFVF9MRU5HVEgodW5pY29kZSkpOworI2lmZGVmIFB5X0RFQlVHCisgICAgICAgIGlmIChQeVVuaWNvZGVfSVNfQVNDSUkodW5pY29kZSkpIHsKKyAgICAgICAgICAgIFB5X1VDUzQgbWF4Y2hhciA9IHVjczFsaWJfZmluZF9tYXhfY2hhcigKKyAgICAgICAgICAgICAgICAoY29uc3QgUHlfVUNTMSopc3RyLAorICAgICAgICAgICAgICAgIChjb25zdCBQeV9VQ1MxKilzdHIgKyBsZW4pOworICAgICAgICAgICAgYXNzZXJ0KG1heGNoYXIgPCAxMjgpOworICAgICAgICB9CisjZW5kaWYKICAgICAgICAgbWVtY3B5KChjaGFyICopIGRhdGEgKyBpbmRleCwgc3RyLCBsZW4pOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC0xNzIwLDcgKzE3NjAsNiBAQAogICAgIH0KIH0KIAotCiBzdGF0aWMgUHlPYmplY3QqCiBnZXRfbGF0aW4xX2NoYXIodW5zaWduZWQgY2hhciBjaCkKIHsKQEAgLTE3MzcsNiArMTc3NiwzNCBAQAogICAgIHJldHVybiB1bmljb2RlOwogfQogCitzdGF0aWMgUHlPYmplY3QqCit1bmljb2RlX2NoYXIoUHlfVUNTNCBjaCkKK3sKKyAgICBQeU9iamVjdCAqdW5pY29kZTsKKworICAgIGFzc2VydChjaCA8PSBNQVhfVU5JQ09ERSk7CisKKyAgICBpZiAoY2ggPCAyNTYpCisgICAgICAgIHJldHVybiBnZXRfbGF0aW4xX2NoYXIoY2gpOworCisgICAgdW5pY29kZSA9IFB5VW5pY29kZV9OZXcoMSwgY2gpOworICAgIGlmICh1bmljb2RlID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHN3aXRjaCAoUHlVbmljb2RlX0tJTkQodW5pY29kZSkpIHsKKyAgICBjYXNlIFB5VW5pY29kZV8xQllURV9LSU5EOgorICAgICAgICBQeVVuaWNvZGVfMUJZVEVfREFUQSh1bmljb2RlKVswXSA9IChQeV9VQ1MxKWNoOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFB5VW5pY29kZV8yQllURV9LSU5EOgorICAgICAgICBQeVVuaWNvZGVfMkJZVEVfREFUQSh1bmljb2RlKVswXSA9IChQeV9VQ1MyKWNoOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBhc3NlcnQoUHlVbmljb2RlX0tJTkQodW5pY29kZSkgPT0gUHlVbmljb2RlXzRCWVRFX0tJTkQpOworICAgICAgICBQeVVuaWNvZGVfNEJZVEVfREFUQSh1bmljb2RlKVswXSA9IGNoOworICAgIH0KKyAgICBhc3NlcnQoX1B5VW5pY29kZV9DaGVja0NvbnNpc3RlbmN5KHVuaWNvZGUsIDEpKTsKKyAgICByZXR1cm4gdW5pY29kZTsKK30KKwogUHlPYmplY3QgKgogUHlVbmljb2RlX0Zyb21Vbmljb2RlKGNvbnN0IFB5X1VOSUNPREUgKnUsIFB5X3NzaXplX3Qgc2l6ZSkKIHsKQEAgLTE5MzQsMTggKzIwMDEsOCBAQAogICAgIGlmIChzaXplID09IDApCiAgICAgICAgIF9QeV9SRVRVUk5fVU5JQ09ERV9FTVBUWSgpOwogICAgIGFzc2VydChzaXplID4gMCk7Ci0gICAgaWYgKHNpemUgPT0gMSkgewotICAgICAgICBQeV9VQ1M0IGNoID0gdVswXTsKLSAgICAgICAgaWYgKGNoIDwgMjU2KQotICAgICAgICAgICAgcmV0dXJuIGdldF9sYXRpbjFfY2hhcigodW5zaWduZWQgY2hhciljaCk7Ci0KLSAgICAgICAgcmVzID0gUHlVbmljb2RlX05ldygxLCBjaCk7Ci0gICAgICAgIGlmIChyZXMgPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICBQeVVuaWNvZGVfV1JJVEUoUHlVbmljb2RlX0tJTkQocmVzKSwgUHlVbmljb2RlX0RBVEEocmVzKSwgMCwgY2gpOwotICAgICAgICBhc3NlcnQoX1B5VW5pY29kZV9DaGVja0NvbnNpc3RlbmN5KHJlcywgMSkpOwotICAgICAgICByZXR1cm4gcmVzOwotICAgIH0KKyAgICBpZiAoc2l6ZSA9PSAxKQorICAgICAgICByZXR1cm4gdW5pY29kZV9jaGFyKHVbMF0pOwogCiAgICAgbWF4X2NoYXIgPSB1Y3MybGliX2ZpbmRfbWF4X2NoYXIodSwgdSArIHNpemUpOwogICAgIHJlcyA9IFB5VW5pY29kZV9OZXcoc2l6ZSwgbWF4X2NoYXIpOwpAQCAtMTk3MCwxOCArMjAyNyw4IEBACiAgICAgaWYgKHNpemUgPT0gMCkKICAgICAgICAgX1B5X1JFVFVSTl9VTklDT0RFX0VNUFRZKCk7CiAgICAgYXNzZXJ0KHNpemUgPiAwKTsKLSAgICBpZiAoc2l6ZSA9PSAxKSB7Ci0gICAgICAgIFB5X1VDUzQgY2ggPSB1WzBdOwotICAgICAgICBpZiAoY2ggPCAyNTYpCi0gICAgICAgICAgICByZXR1cm4gZ2V0X2xhdGluMV9jaGFyKCh1bnNpZ25lZCBjaGFyKWNoKTsKLQotICAgICAgICByZXMgPSBQeVVuaWNvZGVfTmV3KDEsIGNoKTsKLSAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIFB5VW5pY29kZV9XUklURShQeVVuaWNvZGVfS0lORChyZXMpLCBQeVVuaWNvZGVfREFUQShyZXMpLCAwLCBjaCk7Ci0gICAgICAgIGFzc2VydChfUHlVbmljb2RlX0NoZWNrQ29uc2lzdGVuY3kocmVzLCAxKSk7Ci0gICAgICAgIHJldHVybiByZXM7Ci0gICAgfQorICAgIGlmIChzaXplID09IDEpCisgICAgICAgIHJldHVybiB1bmljb2RlX2NoYXIodVswXSk7CiAKICAgICBtYXhfY2hhciA9IHVjczRsaWJfZmluZF9tYXhfY2hhcih1LCB1ICsgc2l6ZSk7CiAgICAgcmVzID0gUHlVbmljb2RlX05ldyhzaXplLCBtYXhfY2hhcik7CkBAIC0yMTQ4LDcgKzIxOTUsNyBAQAogICAgIH0KICAgICBzd2l0Y2ggKGtpbmQpIHsKICAgICBjYXNlIFB5VW5pY29kZV8yQllURV9LSU5EOgotICAgICAgICByZXN1bHQgPSBQeU1lbV9NYWxsb2MobGVuICogc2l6ZW9mKFB5X1VDUzIpKTsKKyAgICAgICAgcmVzdWx0ID0gUHlNZW1fTmV3KFB5X1VDUzIsIGxlbik7CiAgICAgICAgIGlmICghcmVzdWx0KQogICAgICAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgIGFzc2VydChza2luZCA9PSBQeVVuaWNvZGVfMUJZVEVfS0lORCk7CkBAIC0yMTU5LDcgKzIyMDYsNyBAQAogICAgICAgICAgICAgcmVzdWx0KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICBjYXNlIFB5VW5pY29kZV80QllURV9LSU5EOgotICAgICAgICByZXN1bHQgPSBQeU1lbV9NYWxsb2MobGVuICogc2l6ZW9mKFB5X1VDUzQpKTsKKyAgICAgICAgcmVzdWx0ID0gUHlNZW1fTmV3KFB5X1VDUzQsIGxlbik7CiAgICAgICAgIGlmICghcmVzdWx0KQogICAgICAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgIGlmIChza2luZCA9PSBQeVVuaWNvZGVfMkJZVEVfS0lORCkgewpAQCAtMjIwMSwxMSArMjI0OCw3IEBACiAgICAgaWYgKGNvcHlfbnVsbCkKICAgICAgICAgdGFyZ2V0bGVuKys7CiAgICAgaWYgKCF0YXJnZXQpIHsKLSAgICAgICAgaWYgKFBZX1NTSVpFX1RfTUFYIC8gc2l6ZW9mKFB5X1VDUzQpIDwgdGFyZ2V0bGVuKSB7Ci0gICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICAgICAgdGFyZ2V0ID0gUHlNZW1fTWFsbG9jKHRhcmdldGxlbiAqIHNpemVvZihQeV9VQ1M0KSk7CisgICAgICAgIHRhcmdldCA9IFB5TWVtX05ldyhQeV9VQ1M0LCB0YXJnZXRsZW4pOwogICAgICAgICBpZiAoIXRhcmdldCkgewogICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMjI1Nyw3ICsyMzAwLDcgQEAKICNpZmRlZiBIQVZFX1dDSEFSX0gKIAogUHlPYmplY3QgKgotUHlVbmljb2RlX0Zyb21XaWRlQ2hhcihyZWdpc3RlciBjb25zdCB3Y2hhcl90ICp3LCBQeV9zc2l6ZV90IHNpemUpCitQeVVuaWNvZGVfRnJvbVdpZGVDaGFyKGNvbnN0IHdjaGFyX3QgKncsIFB5X3NzaXplX3Qgc2l6ZSkKIHsKICAgICBpZiAodyA9PSBOVUxMKSB7CiAgICAgICAgIGlmIChzaXplID09IDApCkBAIC0yMjc3LDE2ICsyMzIwLDkgQEAKIAogc3RhdGljIHZvaWQKIG1ha2VmbXQoY2hhciAqZm10LCBpbnQgbG9uZ2ZsYWcsIGludCBsb25nbG9uZ2ZsYWcsIGludCBzaXplX3RmbGFnLAotICAgICAgICBpbnQgemVyb3BhZCwgaW50IHdpZHRoLCBpbnQgcHJlY2lzaW9uLCBjaGFyIGMpCisgICAgICAgIGNoYXIgYykKIHsKICAgICAqZm10KysgPSAnJSc7Ci0gICAgaWYgKHdpZHRoKSB7Ci0gICAgICAgIGlmICh6ZXJvcGFkKQotICAgICAgICAgICAgKmZtdCsrID0gJzAnOwotICAgICAgICBmbXQgKz0gc3ByaW50ZihmbXQsICIlZCIsIHdpZHRoKTsKLSAgICB9Ci0gICAgaWYgKHByZWNpc2lvbikKLSAgICAgICAgZm10ICs9IHNwcmludGYoZm10LCAiLiVkIiwgcHJlY2lzaW9uKTsKICAgICBpZiAobG9uZ2ZsYWcpCiAgICAgICAgICpmbXQrKyA9ICdsJzsKICAgICBlbHNlIGlmIChsb25nbG9uZ2ZsYWcpIHsKQEAgLTIzMTEsNDYgKzIzNDcsMTM5IEBACiAgICAgKmZtdCA9ICdcMCc7CiB9CiAKLS8qIGhlbHBlciBmb3IgUHlVbmljb2RlX0Zyb21Gb3JtYXRWKCkgKi8KKy8qIG1heGltdW0gbnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVxdWlyZWQgZm9yIG91dHB1dCBvZiAlbGxkIG9yICVwLgorICAgV2UgbmVlZCBhdCBtb3N0IGNlaWwobG9nMTAoMjU2KSpTSVpFT0ZfTE9OR19MT05HKSBkaWdpdHMsCisgICBwbHVzIDEgZm9yIHRoZSBzaWduLiAgNTMvMjIgaXMgYW4gdXBwZXIgYm91bmQgZm9yIGxvZzEwKDI1NikuICovCisjZGVmaW5lIE1BWF9MT05HX0xPTkdfQ0hBUlMgKDIgKyAoU0laRU9GX0xPTkdfTE9ORyo1My0xKSAvIDIyKQorCitzdGF0aWMgaW50Cit1bmljb2RlX2Zyb21mb3JtYXRfd3JpdGVfc3RyKF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlciwgUHlPYmplY3QgKnN0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCB3aWR0aCwgUHlfc3NpemVfdCBwcmVjaXNpb24pCit7CisgICAgUHlfc3NpemVfdCBsZW5ndGgsIGZpbGwsIGFyZ2xlbjsKKyAgICBQeV9VQ1M0IG1heGNoYXI7CisKKyAgICBpZiAoUHlVbmljb2RlX1JFQURZKHN0cikgPT0gLTEpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGxlbmd0aCA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHN0cik7CisgICAgaWYgKChwcmVjaXNpb24gPT0gLTEgfHwgcHJlY2lzaW9uID49IGxlbmd0aCkKKyAgICAgICAgJiYgd2lkdGggPD0gbGVuZ3RoKQorICAgICAgICByZXR1cm4gX1B5VW5pY29kZVdyaXRlcl9Xcml0ZVN0cih3cml0ZXIsIHN0cik7CisKKyAgICBpZiAocHJlY2lzaW9uICE9IC0xKQorICAgICAgICBsZW5ndGggPSBQeV9NSU4ocHJlY2lzaW9uLCBsZW5ndGgpOworCisgICAgYXJnbGVuID0gUHlfTUFYKGxlbmd0aCwgd2lkdGgpOworICAgIGlmIChQeVVuaWNvZGVfTUFYX0NIQVJfVkFMVUUoc3RyKSA+IHdyaXRlci0+bWF4Y2hhcikKKyAgICAgICAgbWF4Y2hhciA9IF9QeVVuaWNvZGVfRmluZE1heENoYXIoc3RyLCAwLCBsZW5ndGgpOworICAgIGVsc2UKKyAgICAgICAgbWF4Y2hhciA9IHdyaXRlci0+bWF4Y2hhcjsKKworICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1ByZXBhcmUod3JpdGVyLCBhcmdsZW4sIG1heGNoYXIpID09IC0xKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBpZiAod2lkdGggPiBsZW5ndGgpIHsKKyAgICAgICAgZmlsbCA9IHdpZHRoIC0gbGVuZ3RoOworICAgICAgICBpZiAoUHlVbmljb2RlX0ZpbGwod3JpdGVyLT5idWZmZXIsIHdyaXRlci0+cG9zLCBmaWxsLCAnICcpID09IC0xKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB3cml0ZXItPnBvcyArPSBmaWxsOworICAgIH0KKworICAgIF9QeVVuaWNvZGVfRmFzdENvcHlDaGFyYWN0ZXJzKHdyaXRlci0+YnVmZmVyLCB3cml0ZXItPnBvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIsIDAsIGxlbmd0aCk7CisgICAgd3JpdGVyLT5wb3MgKz0gbGVuZ3RoOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50Cit1bmljb2RlX2Zyb21mb3JtYXRfd3JpdGVfY3N0cihfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIsIGNvbnN0IGNoYXIgKnN0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3Qgd2lkdGgsIFB5X3NzaXplX3QgcHJlY2lzaW9uKQoreworICAgIC8qIFVURi04ICovCisgICAgUHlfc3NpemVfdCBsZW5ndGg7CisgICAgUHlPYmplY3QgKnVuaWNvZGU7CisgICAgaW50IHJlczsKKworICAgIGxlbmd0aCA9IHN0cmxlbihzdHIpOworICAgIGlmIChwcmVjaXNpb24gIT0gLTEpCisgICAgICAgIGxlbmd0aCA9IFB5X01JTihsZW5ndGgsIHByZWNpc2lvbik7CisgICAgdW5pY29kZSA9IFB5VW5pY29kZV9EZWNvZGVVVEY4U3RhdGVmdWwoc3RyLCBsZW5ndGgsICJyZXBsYWNlIiwgTlVMTCk7CisgICAgaWYgKHVuaWNvZGUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgcmVzID0gdW5pY29kZV9mcm9tZm9ybWF0X3dyaXRlX3N0cih3cml0ZXIsIHVuaWNvZGUsIHdpZHRoLCAtMSk7CisgICAgUHlfREVDUkVGKHVuaWNvZGUpOworICAgIHJldHVybiByZXM7Cit9CiAKIHN0YXRpYyBjb25zdCBjaGFyKgotcGFyc2VfZm9ybWF0X2ZsYWdzKGNvbnN0IGNoYXIgKmYsCi0gICAgICAgICAgICAgICAgICAgaW50ICpwX3dpZHRoLCBpbnQgKnBfcHJlY2lzaW9uLAotICAgICAgICAgICAgICAgICAgIGludCAqcF9sb25nZmxhZywgaW50ICpwX2xvbmdsb25nZmxhZywgaW50ICpwX3NpemVfdGZsYWcpCit1bmljb2RlX2Zyb21mb3JtYXRfYXJnKF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZiwgdmFfbGlzdCAqdmFyZ3MpCiB7Ci0gICAgaW50IHdpZHRoLCBwcmVjaXNpb24sIGxvbmdmbGFnLCBsb25nbG9uZ2ZsYWcsIHNpemVfdGZsYWc7CisgICAgY29uc3QgY2hhciAqcDsKKyAgICBQeV9zc2l6ZV90IGxlbjsKKyAgICBpbnQgemVyb3BhZDsKKyAgICBQeV9zc2l6ZV90IHdpZHRoOworICAgIFB5X3NzaXplX3QgcHJlY2lzaW9uOworICAgIGludCBsb25nZmxhZzsKKyAgICBpbnQgbG9uZ2xvbmdmbGFnOworICAgIGludCBzaXplX3RmbGFnOworICAgIFB5X3NzaXplX3QgZmlsbDsKKworICAgIHAgPSBmOworICAgIGYrKzsKKyAgICB6ZXJvcGFkID0gMDsKKyAgICBpZiAoKmYgPT0gJzAnKSB7CisgICAgICAgIHplcm9wYWQgPSAxOworICAgICAgICBmKys7CisgICAgfQogCiAgICAgLyogcGFyc2UgdGhlIHdpZHRoLnByZWNpc2lvbiBwYXJ0LCBlLmcuICIlMi41cyIgPT4gd2lkdGg9MiwgcHJlY2lzaW9uPTUgKi8KLSAgICBmKys7Ci0gICAgd2lkdGggPSAwOwotICAgIHdoaWxlIChQeV9JU0RJR0lUKCh1bnNpZ25lZCkqZikpCi0gICAgICAgIHdpZHRoID0gKHdpZHRoKjEwKSArICpmKysgLSAnMCc7Ci0gICAgcHJlY2lzaW9uID0gMDsKKyAgICB3aWR0aCA9IC0xOworICAgIGlmIChQeV9JU0RJR0lUKCh1bnNpZ25lZCkqZikpIHsKKyAgICAgICAgd2lkdGggPSAqZiAtICcwJzsKKyAgICAgICAgZisrOworICAgICAgICB3aGlsZSAoUHlfSVNESUdJVCgodW5zaWduZWQpKmYpKSB7CisgICAgICAgICAgICBpZiAod2lkdGggPiAoUFlfU1NJWkVfVF9NQVggLSAoKGludCkqZiAtICcwJykpIC8gMTApIHsKKyAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndpZHRoIHRvbyBiaWciKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHdpZHRoID0gKHdpZHRoICogMTApICsgKCpmIC0gJzAnKTsKKyAgICAgICAgICAgIGYrKzsKKyAgICAgICAgfQorICAgIH0KKyAgICBwcmVjaXNpb24gPSAtMTsKICAgICBpZiAoKmYgPT0gJy4nKSB7CiAgICAgICAgIGYrKzsKLSAgICAgICAgd2hpbGUgKFB5X0lTRElHSVQoKHVuc2lnbmVkKSpmKSkKLSAgICAgICAgICAgIHByZWNpc2lvbiA9IChwcmVjaXNpb24qMTApICsgKmYrKyAtICcwJzsKKyAgICAgICAgaWYgKFB5X0lTRElHSVQoKHVuc2lnbmVkKSpmKSkgeworICAgICAgICAgICAgcHJlY2lzaW9uID0gKCpmIC0gJzAnKTsKKyAgICAgICAgICAgIGYrKzsKKyAgICAgICAgICAgIHdoaWxlIChQeV9JU0RJR0lUKCh1bnNpZ25lZCkqZikpIHsKKyAgICAgICAgICAgICAgICBpZiAocHJlY2lzaW9uID4gKFBZX1NTSVpFX1RfTUFYIC0gKChpbnQpKmYgLSAnMCcpKSAvIDEwKSB7CisgICAgICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInByZWNpc2lvbiB0b28gYmlnIik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwcmVjaXNpb24gPSAocHJlY2lzaW9uICogMTApICsgKCpmIC0gJzAnKTsKKyAgICAgICAgICAgICAgICBmKys7CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICAgICAgaWYgKCpmID09ICclJykgewogICAgICAgICAgICAgLyogIiUuMyVzIiA9PiBmIHBvaW50cyB0byAiMyIgKi8KICAgICAgICAgICAgIGYtLTsKICAgICAgICAgfQogICAgIH0KLSAgICBpZiAod2lkdGggPCBwcmVjaXNpb24pCi0gICAgICAgIHdpZHRoID0gcHJlY2lzaW9uOwogICAgIGlmICgqZiA9PSAnXDAnKSB7Ci0gICAgICAgIC8qIGJvZ3VzIGZvcm1hdCAiJS4xIiA9PiBnbyBiYWNrd2FyZCwgZiBwb2ludHMgdG8gIjEiICovCisgICAgICAgIC8qIGJvZ3VzIGZvcm1hdCAiJS4xMjMiID0+IGdvIGJhY2t3YXJkLCBmIHBvaW50cyB0byAiMyIgKi8KICAgICAgICAgZi0tOwogICAgIH0KLSAgICBpZiAocF93aWR0aCAhPSBOVUxMKQotICAgICAgICAqcF93aWR0aCA9IHdpZHRoOwotICAgIGlmIChwX3ByZWNpc2lvbiAhPSBOVUxMKQotICAgICAgICAqcF9wcmVjaXNpb24gPSBwcmVjaXNpb247CiAKICAgICAvKiBIYW5kbGUgJWxkLCAlbHUsICVsbGQgYW5kICVsbHUuICovCiAgICAgbG9uZ2ZsYWcgPSAwOwogICAgIGxvbmdsb25nZmxhZyA9IDA7CiAgICAgc2l6ZV90ZmxhZyA9IDA7Ci0KICAgICBpZiAoKmYgPT0gJ2wnKSB7CiAgICAgICAgIGlmIChmWzFdID09ICdkJyB8fCBmWzFdID09ICd1JyB8fCBmWzFdID09ICdpJykgewogICAgICAgICAgICAgbG9uZ2ZsYWcgPSAxOwpAQCAtMjM2OSw0OTkgKzI0OTgsMjg0IEBACiAgICAgICAgIHNpemVfdGZsYWcgPSAxOwogICAgICAgICArK2Y7CiAgICAgfQotICAgIGlmIChwX2xvbmdmbGFnICE9IE5VTEwpCi0gICAgICAgICpwX2xvbmdmbGFnID0gbG9uZ2ZsYWc7Ci0gICAgaWYgKHBfbG9uZ2xvbmdmbGFnICE9IE5VTEwpCi0gICAgICAgICpwX2xvbmdsb25nZmxhZyA9IGxvbmdsb25nZmxhZzsKLSAgICBpZiAocF9zaXplX3RmbGFnICE9IE5VTEwpCi0gICAgICAgICpwX3NpemVfdGZsYWcgPSBzaXplX3RmbGFnOworCisgICAgaWYgKGZbMV0gPT0gJ1wwJykKKyAgICAgICAgd3JpdGVyLT5vdmVyYWxsb2NhdGUgPSAwOworCisgICAgc3dpdGNoICgqZikgeworICAgIGNhc2UgJ2MnOgorICAgIHsKKyAgICAgICAgaW50IG9yZGluYWwgPSB2YV9hcmcoKnZhcmdzLCBpbnQpOworICAgICAgICBpZiAob3JkaW5hbCA8IDAgfHwgb3JkaW5hbCA+IE1BWF9VTklDT0RFKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2hhcmFjdGVyIGFyZ3VtZW50IG5vdCBpbiByYW5nZSgweDExMDAwMCkiKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcklubGluZSh3cml0ZXIsIG9yZGluYWwpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlICdpJzoKKyAgICBjYXNlICdkJzoKKyAgICBjYXNlICd1JzoKKyAgICBjYXNlICd4JzoKKyAgICB7CisgICAgICAgIC8qIHVzZWQgYnkgc3ByaW50ZiAqLworICAgICAgICBjaGFyIGZtdFsxMF07IC8qIHNob3VsZCBiZSBlbm91Z2ggZm9yICIlMGxsZFwwIiAqLworICAgICAgICBjaGFyIGJ1ZmZlcltNQVhfTE9OR19MT05HX0NIQVJTXTsKKyAgICAgICAgUHlfc3NpemVfdCBhcmdsZW47CisKKyAgICAgICAgaWYgKCpmID09ICd1JykgeworICAgICAgICAgICAgbWFrZWZtdChmbXQsIGxvbmdmbGFnLCBsb25nbG9uZ2ZsYWcsIHNpemVfdGZsYWcsICpmKTsKKworICAgICAgICAgICAgaWYgKGxvbmdmbGFnKQorICAgICAgICAgICAgICAgIGxlbiA9IHNwcmludGYoYnVmZmVyLCBmbXQsCisgICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcoKnZhcmdzLCB1bnNpZ25lZCBsb25nKSk7CisjaWZkZWYgSEFWRV9MT05HX0xPTkcKKyAgICAgICAgICAgIGVsc2UgaWYgKGxvbmdsb25nZmxhZykKKyAgICAgICAgICAgICAgICBsZW4gPSBzcHJpbnRmKGJ1ZmZlciwgZm10LAorICAgICAgICAgICAgICAgICAgICAgICAgdmFfYXJnKCp2YXJncywgdW5zaWduZWQgUFlfTE9OR19MT05HKSk7CisjZW5kaWYKKyAgICAgICAgICAgIGVsc2UgaWYgKHNpemVfdGZsYWcpCisgICAgICAgICAgICAgICAgbGVuID0gc3ByaW50ZihidWZmZXIsIGZtdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhX2FyZygqdmFyZ3MsIHNpemVfdCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGxlbiA9IHNwcmludGYoYnVmZmVyLCBmbXQsCisgICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcoKnZhcmdzLCB1bnNpZ25lZCBpbnQpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICgqZiA9PSAneCcpIHsKKyAgICAgICAgICAgIG1ha2VmbXQoZm10LCAwLCAwLCAwLCAneCcpOworICAgICAgICAgICAgbGVuID0gc3ByaW50ZihidWZmZXIsIGZtdCwgdmFfYXJnKCp2YXJncywgaW50KSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBtYWtlZm10KGZtdCwgbG9uZ2ZsYWcsIGxvbmdsb25nZmxhZywgc2l6ZV90ZmxhZywgKmYpOworCisgICAgICAgICAgICBpZiAobG9uZ2ZsYWcpCisgICAgICAgICAgICAgICAgbGVuID0gc3ByaW50ZihidWZmZXIsIGZtdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhX2FyZygqdmFyZ3MsIGxvbmcpKTsKKyNpZmRlZiBIQVZFX0xPTkdfTE9ORworICAgICAgICAgICAgZWxzZSBpZiAobG9uZ2xvbmdmbGFnKQorICAgICAgICAgICAgICAgIGxlbiA9IHNwcmludGYoYnVmZmVyLCBmbXQsCisgICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcoKnZhcmdzLCBQWV9MT05HX0xPTkcpKTsKKyNlbmRpZgorICAgICAgICAgICAgZWxzZSBpZiAoc2l6ZV90ZmxhZykKKyAgICAgICAgICAgICAgICBsZW4gPSBzcHJpbnRmKGJ1ZmZlciwgZm10LAorICAgICAgICAgICAgICAgICAgICAgICAgdmFfYXJnKCp2YXJncywgUHlfc3NpemVfdCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGxlbiA9IHNwcmludGYoYnVmZmVyLCBmbXQsCisgICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcoKnZhcmdzLCBpbnQpKTsKKyAgICAgICAgfQorICAgICAgICBhc3NlcnQobGVuID49IDApOworCisgICAgICAgIGlmIChwcmVjaXNpb24gPCBsZW4pCisgICAgICAgICAgICBwcmVjaXNpb24gPSBsZW47CisKKyAgICAgICAgYXJnbGVuID0gUHlfTUFYKHByZWNpc2lvbiwgd2lkdGgpOworICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9QcmVwYXJlKHdyaXRlciwgYXJnbGVuLCAxMjcpID09IC0xKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAgICAgaWYgKHdpZHRoID4gcHJlY2lzaW9uKSB7CisgICAgICAgICAgICBQeV9VQ1M0IGZpbGxjaGFyOworICAgICAgICAgICAgZmlsbCA9IHdpZHRoIC0gcHJlY2lzaW9uOworICAgICAgICAgICAgZmlsbGNoYXIgPSB6ZXJvcGFkPycwJzonICc7CisgICAgICAgICAgICBpZiAoUHlVbmljb2RlX0ZpbGwod3JpdGVyLT5idWZmZXIsIHdyaXRlci0+cG9zLCBmaWxsLCBmaWxsY2hhcikgPT0gLTEpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB3cml0ZXItPnBvcyArPSBmaWxsOworICAgICAgICB9CisgICAgICAgIGlmIChwcmVjaXNpb24gPiBsZW4pIHsKKyAgICAgICAgICAgIGZpbGwgPSBwcmVjaXNpb24gLSBsZW47CisgICAgICAgICAgICBpZiAoUHlVbmljb2RlX0ZpbGwod3JpdGVyLT5idWZmZXIsIHdyaXRlci0+cG9zLCBmaWxsLCAnMCcpID09IC0xKQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgd3JpdGVyLT5wb3MgKz0gZmlsbDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQVNDSUlTdHJpbmcod3JpdGVyLCBidWZmZXIsIGxlbikgPCAwKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgJ3AnOgorICAgIHsKKyAgICAgICAgY2hhciBudW1iZXJbTUFYX0xPTkdfTE9OR19DSEFSU107CisKKyAgICAgICAgbGVuID0gc3ByaW50ZihudW1iZXIsICIlcCIsIHZhX2FyZygqdmFyZ3MsIHZvaWQqKSk7CisgICAgICAgIGFzc2VydChsZW4gPj0gMCk7CisKKyAgICAgICAgLyogJXAgaXMgaWxsLWRlZmluZWQ6ICBlbnN1cmUgbGVhZGluZyAweC4gKi8KKyAgICAgICAgaWYgKG51bWJlclsxXSA9PSAnWCcpCisgICAgICAgICAgICBudW1iZXJbMV0gPSAneCc7CisgICAgICAgIGVsc2UgaWYgKG51bWJlclsxXSAhPSAneCcpIHsKKyAgICAgICAgICAgIG1lbW1vdmUobnVtYmVyICsgMiwgbnVtYmVyLAorICAgICAgICAgICAgICAgICAgICBzdHJsZW4obnVtYmVyKSArIDEpOworICAgICAgICAgICAgbnVtYmVyWzBdID0gJzAnOworICAgICAgICAgICAgbnVtYmVyWzFdID0gJ3gnOworICAgICAgICAgICAgbGVuICs9IDI7CisgICAgICAgIH0KKworICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUFTQ0lJU3RyaW5nKHdyaXRlciwgbnVtYmVyLCBsZW4pIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlICdzJzoKKyAgICB7CisgICAgICAgIC8qIFVURi04ICovCisgICAgICAgIGNvbnN0IGNoYXIgKnMgPSB2YV9hcmcoKnZhcmdzLCBjb25zdCBjaGFyKik7CisgICAgICAgIGlmICh1bmljb2RlX2Zyb21mb3JtYXRfd3JpdGVfY3N0cih3cml0ZXIsIHMsIHdpZHRoLCBwcmVjaXNpb24pIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlICdVJzoKKyAgICB7CisgICAgICAgIFB5T2JqZWN0ICpvYmogPSB2YV9hcmcoKnZhcmdzLCBQeU9iamVjdCAqKTsKKyAgICAgICAgYXNzZXJ0KG9iaiAmJiBfUHlVbmljb2RlX0NIRUNLKG9iaikpOworCisgICAgICAgIGlmICh1bmljb2RlX2Zyb21mb3JtYXRfd3JpdGVfc3RyKHdyaXRlciwgb2JqLCB3aWR0aCwgcHJlY2lzaW9uKSA9PSAtMSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlICdWJzoKKyAgICB7CisgICAgICAgIFB5T2JqZWN0ICpvYmogPSB2YV9hcmcoKnZhcmdzLCBQeU9iamVjdCAqKTsKKyAgICAgICAgY29uc3QgY2hhciAqc3RyID0gdmFfYXJnKCp2YXJncywgY29uc3QgY2hhciAqKTsKKyAgICAgICAgaWYgKG9iaikgeworICAgICAgICAgICAgYXNzZXJ0KF9QeVVuaWNvZGVfQ0hFQ0sob2JqKSk7CisgICAgICAgICAgICBpZiAodW5pY29kZV9mcm9tZm9ybWF0X3dyaXRlX3N0cih3cml0ZXIsIG9iaiwgd2lkdGgsIHByZWNpc2lvbikgPT0gLTEpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBhc3NlcnQoc3RyICE9IE5VTEwpOworICAgICAgICAgICAgaWYgKHVuaWNvZGVfZnJvbWZvcm1hdF93cml0ZV9jc3RyKHdyaXRlciwgc3RyLCB3aWR0aCwgcHJlY2lzaW9uKSA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSAnUyc6CisgICAgeworICAgICAgICBQeU9iamVjdCAqb2JqID0gdmFfYXJnKCp2YXJncywgUHlPYmplY3QgKik7CisgICAgICAgIFB5T2JqZWN0ICpzdHI7CisgICAgICAgIGFzc2VydChvYmopOworICAgICAgICBzdHIgPSBQeU9iamVjdF9TdHIob2JqKTsKKyAgICAgICAgaWYgKCFzdHIpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgaWYgKHVuaWNvZGVfZnJvbWZvcm1hdF93cml0ZV9zdHIod3JpdGVyLCBzdHIsIHdpZHRoLCBwcmVjaXNpb24pID09IC0xKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoc3RyKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIFB5X0RFQ1JFRihzdHIpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlICdSJzoKKyAgICB7CisgICAgICAgIFB5T2JqZWN0ICpvYmogPSB2YV9hcmcoKnZhcmdzLCBQeU9iamVjdCAqKTsKKyAgICAgICAgUHlPYmplY3QgKnJlcHI7CisgICAgICAgIGFzc2VydChvYmopOworICAgICAgICByZXByID0gUHlPYmplY3RfUmVwcihvYmopOworICAgICAgICBpZiAoIXJlcHIpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgaWYgKHVuaWNvZGVfZnJvbWZvcm1hdF93cml0ZV9zdHIod3JpdGVyLCByZXByLCB3aWR0aCwgcHJlY2lzaW9uKSA9PSAtMSkgeworICAgICAgICAgICAgUHlfREVDUkVGKHJlcHIpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgUHlfREVDUkVGKHJlcHIpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlICdBJzoKKyAgICB7CisgICAgICAgIFB5T2JqZWN0ICpvYmogPSB2YV9hcmcoKnZhcmdzLCBQeU9iamVjdCAqKTsKKyAgICAgICAgUHlPYmplY3QgKmFzY2lpOworICAgICAgICBhc3NlcnQob2JqKTsKKyAgICAgICAgYXNjaWkgPSBQeU9iamVjdF9BU0NJSShvYmopOworICAgICAgICBpZiAoIWFzY2lpKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGlmICh1bmljb2RlX2Zyb21mb3JtYXRfd3JpdGVfc3RyKHdyaXRlciwgYXNjaWksIHdpZHRoLCBwcmVjaXNpb24pID09IC0xKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoYXNjaWkpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgUHlfREVDUkVGKGFzY2lpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSAnJSc6CisgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcklubGluZSh3cml0ZXIsICclJykgPCAwKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgLyogaWYgd2Ugc3R1bWJsZSB1cG9uIGFuIHVua25vd24gZm9ybWF0dGluZyBjb2RlLCBjb3B5IHRoZSByZXN0CisgICAgICAgICAgIG9mIHRoZSBmb3JtYXQgc3RyaW5nIHRvIHRoZSBvdXRwdXQgc3RyaW5nLiAod2UgY2Fubm90IGp1c3QKKyAgICAgICAgICAgc2tpcCB0aGUgY29kZSwgc2luY2UgdGhlcmUncyBubyB3YXkgdG8ga25vdyB3aGF0J3MgaW4gdGhlCisgICAgICAgICAgIGFyZ3VtZW50IGxpc3QpICovCisgICAgICAgIGxlbiA9IHN0cmxlbihwKTsKKyAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVMYXRpbjFTdHJpbmcod3JpdGVyLCBwLCBsZW4pID09IC0xKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGYgPSBwK2xlbjsKKyAgICAgICAgcmV0dXJuIGY7CisgICAgfQorCisgICAgZisrOwogICAgIHJldHVybiBmOwogfQogCi0vKiBtYXhpbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzIHJlcXVpcmVkIGZvciBvdXRwdXQgb2YgJWxkLiAgMjEgY2hhcmFjdGVycwotICAgYWxsb3dzIGZvciA2NC1iaXQgaW50ZWdlcnMgKGluIGRlY2ltYWwpIGFuZCBhbiBvcHRpb25hbCBzaWduLiAqLwotI2RlZmluZSBNQVhfTE9OR19DSEFSUyAyMQotLyogbWF4aW11bSBudW1iZXIgb2YgY2hhcmFjdGVycyByZXF1aXJlZCBmb3Igb3V0cHV0IG9mICVsbGQuCi0gICBXZSBuZWVkIGF0IG1vc3QgY2VpbChsb2cxMCgyNTYpKlNJWkVPRl9MT05HX0xPTkcpIGRpZ2l0cywKLSAgIHBsdXMgMSBmb3IgdGhlIHNpZ24uICA1My8yMiBpcyBhbiB1cHBlciBib3VuZCBmb3IgbG9nMTAoMjU2KS4gKi8KLSNkZWZpbmUgTUFYX0xPTkdfTE9OR19DSEFSUyAoMiArIChTSVpFT0ZfTE9OR19MT05HKjUzLTEpIC8gMjIpCi0KIFB5T2JqZWN0ICoKIFB5VW5pY29kZV9Gcm9tRm9ybWF0Vihjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgdmFyZ3MpCiB7Ci0gICAgdmFfbGlzdCBjb3VudDsKLSAgICBQeV9zc2l6ZV90IGNhbGxjb3VudCA9IDA7Ci0gICAgUHlPYmplY3QgKipjYWxscmVzdWx0cyA9IE5VTEw7Ci0gICAgUHlPYmplY3QgKipjYWxscmVzdWx0ID0gTlVMTDsKLSAgICBQeV9zc2l6ZV90IG4gPSAwOwotICAgIGludCB3aWR0aCA9IDA7Ci0gICAgaW50IHByZWNpc2lvbiA9IDA7Ci0gICAgaW50IHplcm9wYWQ7Ci0gICAgY29uc3QgY2hhciogZjsKLSAgICBQeU9iamVjdCAqc3RyaW5nOwotICAgIC8qIHVzZWQgYnkgc3ByaW50ZiAqLwotICAgIGNoYXIgZm10WzYxXTsgLyogc2hvdWxkIGJlIGVub3VnaCBmb3IgJTB3aWR0aC5wcmVjaXNpb25sbGQgKi8KLSAgICBQeV9VQ1M0IG1heGNoYXIgPSAxMjc7IC8qIHJlc3VsdCBpcyBBU0NJSSBieSBkZWZhdWx0ICovCi0gICAgUHlfVUNTNCBhcmdtYXhjaGFyOwotICAgIFB5X3NzaXplX3QgbnVtYmVyc2l6ZSA9IDA7Ci0gICAgY2hhciAqbnVtYmVycmVzdWx0cyA9IE5VTEw7Ci0gICAgY2hhciAqbnVtYmVycmVzdWx0ID0gTlVMTDsKLSAgICBQeV9zc2l6ZV90IGk7Ci0gICAgaW50IGtpbmQ7Ci0gICAgdm9pZCAqZGF0YTsKKyAgICB2YV9saXN0IHZhcmdzMjsKKyAgICBjb25zdCBjaGFyICpmOworICAgIF9QeVVuaWNvZGVXcml0ZXIgd3JpdGVyOwogCi0gICAgUHlfVkFfQ09QWShjb3VudCwgdmFyZ3MpOwotICAgIC8qIHN0ZXAgMTogY291bnQgdGhlIG51bWJlciBvZiAlUy8lUi8lQS8lcyBmb3JtYXQgc3BlY2lmaWNhdGlvbnMKLSAgICAgKiAod2UgY2FsbCBQeU9iamVjdF9TdHIoKS9QeU9iamVjdF9SZXByKCkvUHlPYmplY3RfQVNDSUkoKS8KLSAgICAgKiBQeVVuaWNvZGVfRGVjb2RlVVRGOCgpIGZvciB0aGVzZSBvYmplY3RzIG9uY2UgZHVyaW5nIHN0ZXAgMyBhbmQgcHV0IHRoZQotICAgICAqIHJlc3VsdCBpbiBhbiBhcnJheSkKLSAgICAgKiBhbHNvIGVzdGltYXRlIGEgdXBwZXIgYm91bmQgZm9yIGFsbCB0aGUgbnVtYmVyIGZvcm1hdHMgaW4gdGhlIHN0cmluZywKLSAgICAgKiBudW1iZXJzIHdpbGwgYmUgZm9ybWF0dGVkIGluIHN0ZXAgMyBhbmQgYmUga2VwdCBpbiBhICdcMCctc2VwYXJhdGVkCi0gICAgICogYnVmZmVyIGJlZm9yZSBwdXR0aW5nIGV2ZXJ5dGhpbmcgdG9nZXRoZXIuICovCi0gICAgZm9yIChmID0gZm9ybWF0OyAqZjsgZisrKSB7CisgICAgX1B5VW5pY29kZVdyaXRlcl9Jbml0KCZ3cml0ZXIpOworICAgIHdyaXRlci5taW5fbGVuZ3RoID0gc3RybGVuKGZvcm1hdCkgKyAxMDA7CisgICAgd3JpdGVyLm92ZXJhbGxvY2F0ZSA9IDE7CisKKyAgICAvKiB2YV9saXN0IG1heSBiZSBhbiBhcnJheSAob2YgMSBpdGVtKSBvbiBzb21lIHBsYXRmb3JtcyAoZXg6IEFNRDY0KS4KKyAgICAgICBDb3B5IGl0IHRvIGJlIGFibGUgdG8gcGFzcyBhIHJlZmVyZW5jZSB0byBhIHN1YmZ1bmN0aW9uLiAqLworICAgIFB5X1ZBX0NPUFkodmFyZ3MyLCB2YXJncyk7CisKKyAgICBmb3IgKGYgPSBmb3JtYXQ7ICpmOyApIHsKICAgICAgICAgaWYgKCpmID09ICclJykgewotICAgICAgICAgICAgaW50IGxvbmdsb25nZmxhZzsKLSAgICAgICAgICAgIC8qIHNraXAgd2lkdGggb3Igd2lkdGgucHJlY2lzaW9uIChlZy4gIjEuMiIgb2YgIiUxLjJmIikgKi8KLSAgICAgICAgICAgIGYgPSBwYXJzZV9mb3JtYXRfZmxhZ3MoZiwgJndpZHRoLCBOVUxMLCBOVUxMLCAmbG9uZ2xvbmdmbGFnLCBOVUxMKTsKLSAgICAgICAgICAgIGlmICgqZiA9PSAncycgfHwgKmY9PSdTJyB8fCAqZj09J1InIHx8ICpmPT0nQScgfHwgKmY9PSdWJykKLSAgICAgICAgICAgICAgICArK2NhbGxjb3VudDsKLQotICAgICAgICAgICAgZWxzZSBpZiAoKmYgPT0gJ2QnIHx8ICpmPT0ndScgfHwgKmY9PSdpJyB8fCAqZj09J3gnIHx8ICpmPT0ncCcpIHsKLSNpZmRlZiBIQVZFX0xPTkdfTE9ORwotICAgICAgICAgICAgICAgIGlmIChsb25nbG9uZ2ZsYWcpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHdpZHRoIDwgTUFYX0xPTkdfTE9OR19DSEFSUykKLSAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoID0gTUFYX0xPTkdfTE9OR19DSEFSUzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgIC8qIE1BWF9MT05HX0NIQVJTIGlzIGVub3VnaCB0byBob2xkIGEgNjQtYml0IGludGVnZXIsCi0gICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGluZyBzaWduLiAgRGVjaW1hbCB0YWtlcyB0aGUgbW9zdCBzcGFjZS4gIFRoaXMKLSAgICAgICAgICAgICAgICAgICAgICAgaXNuJ3QgZW5vdWdoIGZvciBvY3RhbC4gIElmIGEgd2lkdGggaXMgc3BlY2lmaWVkIHdlCi0gICAgICAgICAgICAgICAgICAgICAgIG5lZWQgbW9yZSAod2hpY2ggd2UgYWxsb2NhdGUgbGF0ZXIpLiAqLwotICAgICAgICAgICAgICAgICAgICBpZiAod2lkdGggPCBNQVhfTE9OR19DSEFSUykKLSAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoID0gTUFYX0xPTkdfQ0hBUlM7Ci0KLSAgICAgICAgICAgICAgICAvKiBhY2NvdW50IGZvciB0aGUgc2l6ZSArICdcMCcgdG8gc2VwYXJhdGUgbnVtYmVycwotICAgICAgICAgICAgICAgICAgIGluc2lkZSBvZiB0aGUgbnVtYmVycmVzdWx0cyBidWZmZXIgKi8KLSAgICAgICAgICAgICAgICBudW1iZXJzaXplICs9ICh3aWR0aCArIDEpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKCh1bnNpZ25lZCBjaGFyKSpmID4gMTI3KSB7Ci0gICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAiUHlVbmljb2RlX0Zyb21Gb3JtYXRWKCkgZXhwZWN0cyBhbiBBU0NJSS1lbmNvZGVkIGZvcm1hdCAiCi0gICAgICAgICAgICAgICAgInN0cmluZywgZ290IGEgbm9uLUFTQ0lJIGJ5dGU6IDB4JTAyeCIsCi0gICAgICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIpKmYpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgLyogc3RlcCAyOiBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSByZXN1bHRzIG9mCi0gICAgICogUHlPYmplY3RfU3RyKCkvUHlPYmplY3RfUmVwcigpL1B5VW5pY29kZV9EZWNvZGVVVEY4KCkgY2FsbHMgKi8KLSAgICBpZiAoY2FsbGNvdW50KSB7Ci0gICAgICAgIGNhbGxyZXN1bHRzID0gUHlPYmplY3RfTWFsbG9jKHNpemVvZihQeU9iamVjdCAqKSAqIGNhbGxjb3VudCk7Ci0gICAgICAgIGlmICghY2FsbHJlc3VsdHMpIHsKLSAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAgICAgICBjYWxscmVzdWx0ID0gY2FsbHJlc3VsdHM7Ci0gICAgfQotICAgIC8qIHN0ZXAgMi41OiBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSByZXN1bHRzIG9mIGZvcm1hdGluZyBudW1iZXJzICovCi0gICAgaWYgKG51bWJlcnNpemUpIHsKLSAgICAgICAgbnVtYmVycmVzdWx0cyA9IFB5T2JqZWN0X01hbGxvYyhudW1iZXJzaXplKTsKLSAgICAgICAgaWYgKCFudW1iZXJyZXN1bHRzKSB7Ci0gICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwotICAgICAgICAgICAgZ290byBmYWlsOwotICAgICAgICB9Ci0gICAgICAgIG51bWJlcnJlc3VsdCA9IG51bWJlcnJlc3VsdHM7Ci0gICAgfQotCi0gICAgLyogc3RlcCAzOiBmb3JtYXQgbnVtYmVycyBhbmQgZmlndXJlIG91dCBob3cgbGFyZ2UgYSBidWZmZXIgd2UgbmVlZCAqLwotICAgIGZvciAoZiA9IGZvcm1hdDsgKmY7IGYrKykgewotICAgICAgICBpZiAoKmYgPT0gJyUnKSB7Ci0gICAgICAgICAgICBjb25zdCBjaGFyKiBwOwotICAgICAgICAgICAgaW50IGxvbmdmbGFnOwotICAgICAgICAgICAgaW50IGxvbmdsb25nZmxhZzsKLSAgICAgICAgICAgIGludCBzaXplX3RmbGFnOwotICAgICAgICAgICAgaW50IG51bXByaW50ZWQ7Ci0KLSAgICAgICAgICAgIHAgPSBmOwotICAgICAgICAgICAgemVyb3BhZCA9IChmWzFdID09ICcwJyk7Ci0gICAgICAgICAgICBmID0gcGFyc2VfZm9ybWF0X2ZsYWdzKGYsICZ3aWR0aCwgJnByZWNpc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmxvbmdmbGFnLCAmbG9uZ2xvbmdmbGFnLCAmc2l6ZV90ZmxhZyk7Ci0gICAgICAgICAgICBzd2l0Y2ggKCpmKSB7Ci0gICAgICAgICAgICBjYXNlICdjJzoKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpbnQgb3JkaW5hbCA9IHZhX2FyZyhjb3VudCwgaW50KTsKLSAgICAgICAgICAgICAgICBpZiAob3JkaW5hbCA8IDAgfHwgb3JkaW5hbCA+IE1BWF9VTklDT0RFKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVjIGFyZyBub3QgaW4gcmFuZ2UoMHgxMTAwMDApIik7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbWF4Y2hhciA9IFB5X01BWChtYXhjaGFyLCAoUHlfVUNTNClvcmRpbmFsKTsKLSAgICAgICAgICAgICAgICBuKys7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlICclJzoKLSAgICAgICAgICAgICAgICBuKys7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlICdpJzoKLSAgICAgICAgICAgIGNhc2UgJ2QnOgotICAgICAgICAgICAgICAgIG1ha2VmbXQoZm10LCBsb25nZmxhZywgbG9uZ2xvbmdmbGFnLCBzaXplX3RmbGFnLCB6ZXJvcGFkLAotICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgsIHByZWNpc2lvbiwgKmYpOwotICAgICAgICAgICAgICAgIGlmIChsb25nZmxhZykKLSAgICAgICAgICAgICAgICAgICAgbnVtcHJpbnRlZCA9IHNwcmludGYobnVtYmVycmVzdWx0LCBmbXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhX2FyZyhjb3VudCwgbG9uZykpOwotI2lmZGVmIEhBVkVfTE9OR19MT05HCi0gICAgICAgICAgICAgICAgZWxzZSBpZiAobG9uZ2xvbmdmbGFnKQotICAgICAgICAgICAgICAgICAgICBudW1wcmludGVkID0gc3ByaW50ZihudW1iZXJyZXN1bHQsIGZtdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFfYXJnKGNvdW50LCBQWV9MT05HX0xPTkcpKTsKLSNlbmRpZgotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNpemVfdGZsYWcpCi0gICAgICAgICAgICAgICAgICAgIG51bXByaW50ZWQgPSBzcHJpbnRmKG51bWJlcnJlc3VsdCwgZm10LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcoY291bnQsIFB5X3NzaXplX3QpKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIG51bXByaW50ZWQgPSBzcHJpbnRmKG51bWJlcnJlc3VsdCwgZm10LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcoY291bnQsIGludCkpOwotICAgICAgICAgICAgICAgIG4gKz0gbnVtcHJpbnRlZDsKLSAgICAgICAgICAgICAgICAvKiBhZHZhbmNlIGJ5ICsxIHRvIHNraXAgb3ZlciB0aGUgJ1wwJyAqLwotICAgICAgICAgICAgICAgIG51bWJlcnJlc3VsdCArPSAobnVtcHJpbnRlZCArIDEpOwotICAgICAgICAgICAgICAgIGFzc2VydCgqKG51bWJlcnJlc3VsdCAtIDEpID09ICdcMCcpOwotICAgICAgICAgICAgICAgIGFzc2VydCgqKG51bWJlcnJlc3VsdCAtIDIpICE9ICdcMCcpOwotICAgICAgICAgICAgICAgIGFzc2VydChudW1wcmludGVkID49IDApOwotICAgICAgICAgICAgICAgIGFzc2VydChudW1iZXJyZXN1bHQgPD0gbnVtYmVycmVzdWx0cyArIG51bWJlcnNpemUpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAndSc6Ci0gICAgICAgICAgICAgICAgbWFrZWZtdChmbXQsIGxvbmdmbGFnLCBsb25nbG9uZ2ZsYWcsIHNpemVfdGZsYWcsIHplcm9wYWQsCi0gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCwgcHJlY2lzaW9uLCAndScpOwotICAgICAgICAgICAgICAgIGlmIChsb25nZmxhZykKLSAgICAgICAgICAgICAgICAgICAgbnVtcHJpbnRlZCA9IHNwcmludGYobnVtYmVycmVzdWx0LCBmbXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhX2FyZyhjb3VudCwgdW5zaWduZWQgbG9uZykpOwotI2lmZGVmIEhBVkVfTE9OR19MT05HCi0gICAgICAgICAgICAgICAgZWxzZSBpZiAobG9uZ2xvbmdmbGFnKQotICAgICAgICAgICAgICAgICAgICBudW1wcmludGVkID0gc3ByaW50ZihudW1iZXJyZXN1bHQsIGZtdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFfYXJnKGNvdW50LCB1bnNpZ25lZCBQWV9MT05HX0xPTkcpKTsKLSNlbmRpZgotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNpemVfdGZsYWcpCi0gICAgICAgICAgICAgICAgICAgIG51bXByaW50ZWQgPSBzcHJpbnRmKG51bWJlcnJlc3VsdCwgZm10LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcoY291bnQsIHNpemVfdCkpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbnVtcHJpbnRlZCA9IHNwcmludGYobnVtYmVycmVzdWx0LCBmbXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhX2FyZyhjb3VudCwgdW5zaWduZWQgaW50KSk7Ci0gICAgICAgICAgICAgICAgbiArPSBudW1wcmludGVkOwotICAgICAgICAgICAgICAgIG51bWJlcnJlc3VsdCArPSAobnVtcHJpbnRlZCArIDEpOwotICAgICAgICAgICAgICAgIGFzc2VydCgqKG51bWJlcnJlc3VsdCAtIDEpID09ICdcMCcpOwotICAgICAgICAgICAgICAgIGFzc2VydCgqKG51bWJlcnJlc3VsdCAtIDIpICE9ICdcMCcpOwotICAgICAgICAgICAgICAgIGFzc2VydChudW1wcmludGVkID49IDApOwotICAgICAgICAgICAgICAgIGFzc2VydChudW1iZXJyZXN1bHQgPD0gbnVtYmVycmVzdWx0cyArIG51bWJlcnNpemUpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAneCc6Ci0gICAgICAgICAgICAgICAgbWFrZWZtdChmbXQsIDAsIDAsIDAsIHplcm9wYWQsIHdpZHRoLCBwcmVjaXNpb24sICd4Jyk7Ci0gICAgICAgICAgICAgICAgbnVtcHJpbnRlZCA9IHNwcmludGYobnVtYmVycmVzdWx0LCBmbXQsIHZhX2FyZyhjb3VudCwgaW50KSk7Ci0gICAgICAgICAgICAgICAgbiArPSBudW1wcmludGVkOwotICAgICAgICAgICAgICAgIG51bWJlcnJlc3VsdCArPSAobnVtcHJpbnRlZCArIDEpOwotICAgICAgICAgICAgICAgIGFzc2VydCgqKG51bWJlcnJlc3VsdCAtIDEpID09ICdcMCcpOwotICAgICAgICAgICAgICAgIGFzc2VydCgqKG51bWJlcnJlc3VsdCAtIDIpICE9ICdcMCcpOwotICAgICAgICAgICAgICAgIGFzc2VydChudW1wcmludGVkID49IDApOwotICAgICAgICAgICAgICAgIGFzc2VydChudW1iZXJyZXN1bHQgPD0gbnVtYmVycmVzdWx0cyArIG51bWJlcnNpemUpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAncCc6Ci0gICAgICAgICAgICAgICAgbnVtcHJpbnRlZCA9IHNwcmludGYobnVtYmVycmVzdWx0LCAiJXAiLCB2YV9hcmcoY291bnQsIHZvaWQqKSk7Ci0gICAgICAgICAgICAgICAgLyogJXAgaXMgaWxsLWRlZmluZWQ6ICBlbnN1cmUgbGVhZGluZyAweC4gKi8KLSAgICAgICAgICAgICAgICBpZiAobnVtYmVycmVzdWx0WzFdID09ICdYJykKLSAgICAgICAgICAgICAgICAgICAgbnVtYmVycmVzdWx0WzFdID0gJ3gnOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKG51bWJlcnJlc3VsdFsxXSAhPSAneCcpIHsKLSAgICAgICAgICAgICAgICAgICAgbWVtbW92ZShudW1iZXJyZXN1bHQgKyAyLCBudW1iZXJyZXN1bHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RybGVuKG51bWJlcnJlc3VsdCkgKyAxKTsKLSAgICAgICAgICAgICAgICAgICAgbnVtYmVycmVzdWx0WzBdID0gJzAnOwotICAgICAgICAgICAgICAgICAgICBudW1iZXJyZXN1bHRbMV0gPSAneCc7Ci0gICAgICAgICAgICAgICAgICAgIG51bXByaW50ZWQgKz0gMjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbiArPSBudW1wcmludGVkOwotICAgICAgICAgICAgICAgIG51bWJlcnJlc3VsdCArPSAobnVtcHJpbnRlZCArIDEpOwotICAgICAgICAgICAgICAgIGFzc2VydCgqKG51bWJlcnJlc3VsdCAtIDEpID09ICdcMCcpOwotICAgICAgICAgICAgICAgIGFzc2VydCgqKG51bWJlcnJlc3VsdCAtIDIpICE9ICdcMCcpOwotICAgICAgICAgICAgICAgIGFzc2VydChudW1wcmludGVkID49IDApOwotICAgICAgICAgICAgICAgIGFzc2VydChudW1iZXJyZXN1bHQgPD0gbnVtYmVycmVzdWx0cyArIG51bWJlcnNpemUpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAncyc6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLyogVVRGLTggKi8KLSAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzID0gdmFfYXJnKGNvdW50LCBjb25zdCBjaGFyKik7Ci0gICAgICAgICAgICAgICAgUHlPYmplY3QgKnN0ciA9IFB5VW5pY29kZV9EZWNvZGVVVEY4U3RhdGVmdWwocywgc3RybGVuKHMpLCAicmVwbGFjZSIsIE5VTEwpOwotICAgICAgICAgICAgICAgIGlmICghc3RyKQotICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWw7Ci0gICAgICAgICAgICAgICAgLyogc2luY2UgUHlVbmljb2RlX0RlY29kZVVURjggcmV0dXJucyBhbHJlYWR5IGZsZXhpYmxlCi0gICAgICAgICAgICAgICAgICAgdW5pY29kZSBvYmplY3RzLCB0aGVyZSBpcyBubyBuZWVkIHRvIGNhbGwgcmVhZHkgb24gdGhlbSAqLwotICAgICAgICAgICAgICAgIGFyZ21heGNoYXIgPSBQeVVuaWNvZGVfTUFYX0NIQVJfVkFMVUUoc3RyKTsKLSAgICAgICAgICAgICAgICBtYXhjaGFyID0gUHlfTUFYKG1heGNoYXIsIGFyZ21heGNoYXIpOwotICAgICAgICAgICAgICAgIG4gKz0gUHlVbmljb2RlX0dFVF9MRU5HVEgoc3RyKTsKLSAgICAgICAgICAgICAgICAvKiBSZW1lbWJlciB0aGUgc3RyIGFuZCBzd2l0Y2ggdG8gdGhlIG5leHQgc2xvdCAqLwotICAgICAgICAgICAgICAgICpjYWxscmVzdWx0KysgPSBzdHI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlICdVJzoKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBQeU9iamVjdCAqb2JqID0gdmFfYXJnKGNvdW50LCBQeU9iamVjdCAqKTsKLSAgICAgICAgICAgICAgICBhc3NlcnQob2JqICYmIF9QeVVuaWNvZGVfQ0hFQ0sob2JqKSk7Ci0gICAgICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9SRUFEWShvYmopID09IC0xKQotICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWw7Ci0gICAgICAgICAgICAgICAgYXJnbWF4Y2hhciA9IFB5VW5pY29kZV9NQVhfQ0hBUl9WQUxVRShvYmopOwotICAgICAgICAgICAgICAgIG1heGNoYXIgPSBQeV9NQVgobWF4Y2hhciwgYXJnbWF4Y2hhcik7Ci0gICAgICAgICAgICAgICAgbiArPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChvYmopOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSAnVic6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgUHlPYmplY3QgKm9iaiA9IHZhX2FyZyhjb3VudCwgUHlPYmplY3QgKik7Ci0gICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc3RyID0gdmFfYXJnKGNvdW50LCBjb25zdCBjaGFyICopOwotICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpzdHJfb2JqOwotICAgICAgICAgICAgICAgIGFzc2VydChvYmogfHwgc3RyKTsKLSAgICAgICAgICAgICAgICBhc3NlcnQoIW9iaiB8fCBfUHlVbmljb2RlX0NIRUNLKG9iaikpOwotICAgICAgICAgICAgICAgIGlmIChvYmopIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9SRUFEWShvYmopID09IC0xKQotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsOwotICAgICAgICAgICAgICAgICAgICBhcmdtYXhjaGFyID0gUHlVbmljb2RlX01BWF9DSEFSX1ZBTFVFKG9iaik7Ci0gICAgICAgICAgICAgICAgICAgIG1heGNoYXIgPSBQeV9NQVgobWF4Y2hhciwgYXJnbWF4Y2hhcik7Ci0gICAgICAgICAgICAgICAgICAgIG4gKz0gUHlVbmljb2RlX0dFVF9MRU5HVEgob2JqKTsKLSAgICAgICAgICAgICAgICAgICAgKmNhbGxyZXN1bHQrKyA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBzdHJfb2JqID0gUHlVbmljb2RlX0RlY29kZVVURjhTdGF0ZWZ1bChzdHIsIHN0cmxlbihzdHIpLCAicmVwbGFjZSIsIE5VTEwpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIXN0cl9vYmopCi0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWw7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoc3RyX29iaikgPT0gLTEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihzdHJfb2JqKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBhcmdtYXhjaGFyID0gUHlVbmljb2RlX01BWF9DSEFSX1ZBTFVFKHN0cl9vYmopOwotICAgICAgICAgICAgICAgICAgICBtYXhjaGFyID0gUHlfTUFYKG1heGNoYXIsIGFyZ21heGNoYXIpOwotICAgICAgICAgICAgICAgICAgICBuICs9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHN0cl9vYmopOwotICAgICAgICAgICAgICAgICAgICAqY2FsbHJlc3VsdCsrID0gc3RyX29iajsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlICdTJzoKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBQeU9iamVjdCAqb2JqID0gdmFfYXJnKGNvdW50LCBQeU9iamVjdCAqKTsKLSAgICAgICAgICAgICAgICBQeU9iamVjdCAqc3RyOwotICAgICAgICAgICAgICAgIGFzc2VydChvYmopOwotICAgICAgICAgICAgICAgIHN0ciA9IFB5T2JqZWN0X1N0cihvYmopOwotICAgICAgICAgICAgICAgIGlmICghc3RyKQotICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWw7Ci0gICAgICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9SRUFEWShzdHIpID09IC0xKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihzdHIpOwotICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGFyZ21heGNoYXIgPSBQeVVuaWNvZGVfTUFYX0NIQVJfVkFMVUUoc3RyKTsKLSAgICAgICAgICAgICAgICBtYXhjaGFyID0gUHlfTUFYKG1heGNoYXIsIGFyZ21heGNoYXIpOwotICAgICAgICAgICAgICAgIG4gKz0gUHlVbmljb2RlX0dFVF9MRU5HVEgoc3RyKTsKLSAgICAgICAgICAgICAgICAvKiBSZW1lbWJlciB0aGUgc3RyIGFuZCBzd2l0Y2ggdG8gdGhlIG5leHQgc2xvdCAqLwotICAgICAgICAgICAgICAgICpjYWxscmVzdWx0KysgPSBzdHI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlICdSJzoKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBQeU9iamVjdCAqb2JqID0gdmFfYXJnKGNvdW50LCBQeU9iamVjdCAqKTsKLSAgICAgICAgICAgICAgICBQeU9iamVjdCAqcmVwcjsKLSAgICAgICAgICAgICAgICBhc3NlcnQob2JqKTsKLSAgICAgICAgICAgICAgICByZXByID0gUHlPYmplY3RfUmVwcihvYmopOwotICAgICAgICAgICAgICAgIGlmICghcmVwcikKLSAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsOwotICAgICAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfUkVBRFkocmVwcikgPT0gLTEpIHsKLSAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHJlcHIpOwotICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGFyZ21heGNoYXIgPSBQeVVuaWNvZGVfTUFYX0NIQVJfVkFMVUUocmVwcik7Ci0gICAgICAgICAgICAgICAgbWF4Y2hhciA9IFB5X01BWChtYXhjaGFyLCBhcmdtYXhjaGFyKTsKLSAgICAgICAgICAgICAgICBuICs9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHJlcHIpOwotICAgICAgICAgICAgICAgIC8qIFJlbWVtYmVyIHRoZSByZXByIGFuZCBzd2l0Y2ggdG8gdGhlIG5leHQgc2xvdCAqLwotICAgICAgICAgICAgICAgICpjYWxscmVzdWx0KysgPSByZXByOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSAnQSc6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgUHlPYmplY3QgKm9iaiA9IHZhX2FyZyhjb3VudCwgUHlPYmplY3QgKik7Ci0gICAgICAgICAgICAgICAgUHlPYmplY3QgKmFzY2lpOwotICAgICAgICAgICAgICAgIGFzc2VydChvYmopOwotICAgICAgICAgICAgICAgIGFzY2lpID0gUHlPYmplY3RfQVNDSUkob2JqKTsKLSAgICAgICAgICAgICAgICBpZiAoIWFzY2lpKQotICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWw7Ci0gICAgICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9SRUFEWShhc2NpaSkgPT0gLTEpIHsKLSAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGFzY2lpKTsKLSAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBhcmdtYXhjaGFyID0gUHlVbmljb2RlX01BWF9DSEFSX1ZBTFVFKGFzY2lpKTsKLSAgICAgICAgICAgICAgICBtYXhjaGFyID0gUHlfTUFYKG1heGNoYXIsIGFyZ21heGNoYXIpOwotICAgICAgICAgICAgICAgIG4gKz0gUHlVbmljb2RlX0dFVF9MRU5HVEgoYXNjaWkpOwotICAgICAgICAgICAgICAgIC8qIFJlbWVtYmVyIHRoZSByZXByIGFuZCBzd2l0Y2ggdG8gdGhlIG5leHQgc2xvdCAqLwotICAgICAgICAgICAgICAgICpjYWxscmVzdWx0KysgPSBhc2NpaTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgLyogaWYgd2Ugc3R1bWJsZSB1cG9uIGFuIHVua25vd24KLSAgICAgICAgICAgICAgICAgICBmb3JtYXR0aW5nIGNvZGUsIGNvcHkgdGhlIHJlc3Qgb2YKLSAgICAgICAgICAgICAgICAgICB0aGUgZm9ybWF0IHN0cmluZyB0byB0aGUgb3V0cHV0Ci0gICAgICAgICAgICAgICAgICAgc3RyaW5nLiAod2UgY2Fubm90IGp1c3Qgc2tpcCB0aGUKLSAgICAgICAgICAgICAgICAgICBjb2RlLCBzaW5jZSB0aGVyZSdzIG5vIHdheSB0byBrbm93Ci0gICAgICAgICAgICAgICAgICAgd2hhdCdzIGluIHRoZSBhcmd1bWVudCBsaXN0KSAqLwotICAgICAgICAgICAgICAgIG4gKz0gc3RybGVuKHApOwotICAgICAgICAgICAgICAgIGdvdG8gZXhwYW5kOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG4rKzsKLSAgICB9Ci0gIGV4cGFuZDoKLSAgICAvKiBzdGVwIDQ6IGZpbGwgdGhlIGJ1ZmZlciAqLwotICAgIC8qIFNpbmNlIHdlJ3ZlIGFuYWx5emVkIGhvdyBtdWNoIHNwYWNlIHdlIG5lZWQsCi0gICAgICAgd2UgZG9uJ3QgaGF2ZSB0byByZXNpemUgdGhlIHN0cmluZy4KLSAgICAgICBUaGVyZSBjYW4gYmUgbm8gZXJyb3JzIGJleW9uZCB0aGlzIHBvaW50LiAqLwotICAgIHN0cmluZyA9IFB5VW5pY29kZV9OZXcobiwgbWF4Y2hhcik7Ci0gICAgaWYgKCFzdHJpbmcpCi0gICAgICAgIGdvdG8gZmFpbDsKLSAgICBraW5kID0gUHlVbmljb2RlX0tJTkQoc3RyaW5nKTsKLSAgICBkYXRhID0gUHlVbmljb2RlX0RBVEEoc3RyaW5nKTsKLSAgICBjYWxscmVzdWx0ID0gY2FsbHJlc3VsdHM7Ci0gICAgbnVtYmVycmVzdWx0ID0gbnVtYmVycmVzdWx0czsKLQotICAgIGZvciAoaSA9IDAsIGYgPSBmb3JtYXQ7ICpmOyBmKyspIHsKLSAgICAgICAgaWYgKCpmID09ICclJykgewotICAgICAgICAgICAgY29uc3QgY2hhciogcDsKLQotICAgICAgICAgICAgcCA9IGY7Ci0gICAgICAgICAgICBmID0gcGFyc2VfZm9ybWF0X2ZsYWdzKGYsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpOwotICAgICAgICAgICAgLyogY2hlY2tpbmcgZm9yID09IGJlY2F1c2UgdGhlIGxhc3QgYXJndW1lbnQgY291bGQgYmUgYSBlbXB0eQotICAgICAgICAgICAgICAgc3RyaW5nLCB3aGljaCBjYXVzZXMgaSB0byBwb2ludCB0byBlbmQsIHRoZSBhc3NlcnQgYXQgdGhlIGVuZCBvZgotICAgICAgICAgICAgICAgdGhlIGxvb3AgKi8KLSAgICAgICAgICAgIGFzc2VydChpIDw9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHN0cmluZykpOwotCi0gICAgICAgICAgICBzd2l0Y2ggKCpmKSB7Ci0gICAgICAgICAgICBjYXNlICdjJzoKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjb25zdCBpbnQgb3JkaW5hbCA9IHZhX2FyZyh2YXJncywgaW50KTsKLSAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUoa2luZCwgZGF0YSwgaSsrLCBvcmRpbmFsKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgJ2knOgotICAgICAgICAgICAgY2FzZSAnZCc6Ci0gICAgICAgICAgICBjYXNlICd1JzoKLSAgICAgICAgICAgIGNhc2UgJ3gnOgotICAgICAgICAgICAgY2FzZSAncCc6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgUHlfc3NpemVfdCBsZW47Ci0gICAgICAgICAgICAgICAgLyogdW51c2VkLCBzaW5jZSB3ZSBhbHJlYWR5IGhhdmUgdGhlIHJlc3VsdCAqLwotICAgICAgICAgICAgICAgIGlmICgqZiA9PSAncCcpCi0gICAgICAgICAgICAgICAgICAgICh2b2lkKSB2YV9hcmcodmFyZ3MsIHZvaWQgKik7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAodm9pZCkgdmFfYXJnKHZhcmdzLCBpbnQpOwotICAgICAgICAgICAgICAgIC8qIGV4dHJhY3QgdGhlIHJlc3VsdCBmcm9tIG51bWJlcnJlc3VsdHMgYW5kIGFwcGVuZC4gKi8KLSAgICAgICAgICAgICAgICBsZW4gPSBzdHJsZW4obnVtYmVycmVzdWx0KTsKLSAgICAgICAgICAgICAgICB1bmljb2RlX3dyaXRlX2NzdHIoc3RyaW5nLCBpLCBudW1iZXJyZXN1bHQsIGxlbik7Ci0gICAgICAgICAgICAgICAgLyogc2tpcCBvdmVyIHRoZSBzZXBhcmF0aW5nICdcMCcgKi8KLSAgICAgICAgICAgICAgICBpICs9IGxlbjsKLSAgICAgICAgICAgICAgICBudW1iZXJyZXN1bHQgKz0gbGVuOwotICAgICAgICAgICAgICAgIGFzc2VydCgqbnVtYmVycmVzdWx0ID09ICdcMCcpOwotICAgICAgICAgICAgICAgIG51bWJlcnJlc3VsdCsrOwotICAgICAgICAgICAgICAgIGFzc2VydChudW1iZXJyZXN1bHQgPD0gbnVtYmVycmVzdWx0cyArIG51bWJlcnNpemUpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSAncyc6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLyogdW51c2VkLCBzaW5jZSB3ZSBhbHJlYWR5IGhhdmUgdGhlIHJlc3VsdCAqLwotICAgICAgICAgICAgICAgIFB5X3NzaXplX3Qgc2l6ZTsKLSAgICAgICAgICAgICAgICAodm9pZCkgdmFfYXJnKHZhcmdzLCBjaGFyICopOwotICAgICAgICAgICAgICAgIHNpemUgPSBQeVVuaWNvZGVfR0VUX0xFTkdUSCgqY2FsbHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KFB5VW5pY29kZV9LSU5EKCpjYWxscmVzdWx0KSA8PSBQeVVuaWNvZGVfS0lORChzdHJpbmcpKTsKLSAgICAgICAgICAgICAgICBfUHlVbmljb2RlX0Zhc3RDb3B5Q2hhcmFjdGVycyhzdHJpbmcsIGksICpjYWxscmVzdWx0LCAwLCBzaXplKTsKLSAgICAgICAgICAgICAgICBpICs9IHNpemU7Ci0gICAgICAgICAgICAgICAgLyogV2UncmUgZG9uZSB3aXRoIHRoZSB1bmljb2RlKCkvcmVwcigpID0+IGZvcmdldCBpdCAqLwotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRigqY2FsbHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgLyogc3dpdGNoIHRvIG5leHQgdW5pY29kZSgpL3JlcHIoKSByZXN1bHQgKi8KLSAgICAgICAgICAgICAgICArK2NhbGxyZXN1bHQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlICdVJzoKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBQeU9iamVjdCAqb2JqID0gdmFfYXJnKHZhcmdzLCBQeU9iamVjdCAqKTsKLSAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IHNpemU7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KFB5VW5pY29kZV9LSU5EKG9iaikgPD0gUHlVbmljb2RlX0tJTkQoc3RyaW5nKSk7Ci0gICAgICAgICAgICAgICAgc2l6ZSA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKG9iaik7Ci0gICAgICAgICAgICAgICAgX1B5VW5pY29kZV9GYXN0Q29weUNoYXJhY3RlcnMoc3RyaW5nLCBpLCBvYmosIDAsIHNpemUpOwotICAgICAgICAgICAgICAgIGkgKz0gc2l6ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgJ1YnOgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFB5X3NzaXplX3Qgc2l6ZTsKLSAgICAgICAgICAgICAgICBQeU9iamVjdCAqb2JqID0gdmFfYXJnKHZhcmdzLCBQeU9iamVjdCAqKTsKLSAgICAgICAgICAgICAgICB2YV9hcmcodmFyZ3MsIGNvbnN0IGNoYXIgKik7Ci0gICAgICAgICAgICAgICAgaWYgKG9iaikgewotICAgICAgICAgICAgICAgICAgICBzaXplID0gUHlVbmljb2RlX0dFVF9MRU5HVEgob2JqKTsKLSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KFB5VW5pY29kZV9LSU5EKG9iaikgPD0gUHlVbmljb2RlX0tJTkQoc3RyaW5nKSk7Ci0gICAgICAgICAgICAgICAgICAgIF9QeVVuaWNvZGVfRmFzdENvcHlDaGFyYWN0ZXJzKHN0cmluZywgaSwgb2JqLCAwLCBzaXplKTsKLSAgICAgICAgICAgICAgICAgICAgaSArPSBzaXplOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHNpemUgPSBQeVVuaWNvZGVfR0VUX0xFTkdUSCgqY2FsbHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgICAgIGFzc2VydChQeVVuaWNvZGVfS0lORCgqY2FsbHJlc3VsdCkgPD0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9LSU5EKHN0cmluZykpOwotICAgICAgICAgICAgICAgICAgICBfUHlVbmljb2RlX0Zhc3RDb3B5Q2hhcmFjdGVycyhzdHJpbmcsIGksICpjYWxscmVzdWx0LCAwLCBzaXplKTsKLSAgICAgICAgICAgICAgICAgICAgaSArPSBzaXplOwotICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoKmNhbGxyZXN1bHQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICArK2NhbGxyZXN1bHQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlICdTJzoKLSAgICAgICAgICAgIGNhc2UgJ1InOgotICAgICAgICAgICAgY2FzZSAnQSc6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgUHlfc3NpemVfdCBzaXplID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoKmNhbGxyZXN1bHQpOwotICAgICAgICAgICAgICAgIC8qIHVudXNlZCwgc2luY2Ugd2UgYWxyZWFkeSBoYXZlIHRoZSByZXN1bHQgKi8KLSAgICAgICAgICAgICAgICAodm9pZCkgdmFfYXJnKHZhcmdzLCBQeU9iamVjdCAqKTsKLSAgICAgICAgICAgICAgICBhc3NlcnQoUHlVbmljb2RlX0tJTkQoKmNhbGxyZXN1bHQpIDw9IFB5VW5pY29kZV9LSU5EKHN0cmluZykpOwotICAgICAgICAgICAgICAgIF9QeVVuaWNvZGVfRmFzdENvcHlDaGFyYWN0ZXJzKHN0cmluZywgaSwgKmNhbGxyZXN1bHQsIDAsICBzaXplKTsKLSAgICAgICAgICAgICAgICBpICs9IHNpemU7Ci0gICAgICAgICAgICAgICAgLyogV2UncmUgZG9uZSB3aXRoIHRoZSB1bmljb2RlKCkvcmVwcigpID0+IGZvcmdldCBpdCAqLwotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRigqY2FsbHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgLyogc3dpdGNoIHRvIG5leHQgdW5pY29kZSgpL3JlcHIoKSByZXN1bHQgKi8KLSAgICAgICAgICAgICAgICArK2NhbGxyZXN1bHQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlICclJzoKLSAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUoa2luZCwgZGF0YSwgaSsrLCAnJScpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IGxlbiA9IHN0cmxlbihwKTsKLSAgICAgICAgICAgICAgICB1bmljb2RlX3dyaXRlX2NzdHIoc3RyaW5nLCBpLCBwLCBsZW4pOwotICAgICAgICAgICAgICAgIGkgKz0gbGVuOwotICAgICAgICAgICAgICAgIGFzc2VydChpID09IFB5VW5pY29kZV9HRVRfTEVOR1RIKHN0cmluZykpOwotICAgICAgICAgICAgICAgIGdvdG8gZW5kOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgfQorICAgICAgICAgICAgZiA9IHVuaWNvZGVfZnJvbWZvcm1hdF9hcmcoJndyaXRlciwgZiwgJnZhcmdzMik7CisgICAgICAgICAgICBpZiAoZiA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGFzc2VydChpIDwgUHlVbmljb2RlX0dFVF9MRU5HVEgoc3RyaW5nKSk7Ci0gICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUoa2luZCwgZGF0YSwgaSsrLCAqZik7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgYXNzZXJ0KGkgPT0gUHlVbmljb2RlX0dFVF9MRU5HVEgoc3RyaW5nKSk7CisgICAgICAgICAgICBjb25zdCBjaGFyICpwOworICAgICAgICAgICAgUHlfc3NpemVfdCBsZW47CiAKLSAgZW5kOgotICAgIGlmIChjYWxscmVzdWx0cykKLSAgICAgICAgUHlPYmplY3RfRnJlZShjYWxscmVzdWx0cyk7Ci0gICAgaWYgKG51bWJlcnJlc3VsdHMpCi0gICAgICAgIFB5T2JqZWN0X0ZyZWUobnVtYmVycmVzdWx0cyk7Ci0gICAgcmV0dXJuIHVuaWNvZGVfcmVzdWx0KHN0cmluZyk7Ci0gIGZhaWw6Ci0gICAgaWYgKGNhbGxyZXN1bHRzKSB7Ci0gICAgICAgIFB5T2JqZWN0ICoqY2FsbHJlc3VsdDIgPSBjYWxscmVzdWx0czsKLSAgICAgICAgd2hpbGUgKGNhbGxyZXN1bHQyIDwgY2FsbHJlc3VsdCkgewotICAgICAgICAgICAgUHlfWERFQ1JFRigqY2FsbHJlc3VsdDIpOwotICAgICAgICAgICAgKytjYWxscmVzdWx0MjsKKyAgICAgICAgICAgIHAgPSBmOworICAgICAgICAgICAgZG8KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoKHVuc2lnbmVkIGNoYXIpKnAgPiAxMjcpIHsKKyAgICAgICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiUHlVbmljb2RlX0Zyb21Gb3JtYXRWKCkgZXhwZWN0cyBhbiBBU0NJSS1lbmNvZGVkIGZvcm1hdCAiCisgICAgICAgICAgICAgICAgICAgICAgICAic3RyaW5nLCBnb3QgYSBub24tQVNDSUkgYnl0ZTogMHglMDJ4IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKSpwKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHArKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHdoaWxlICgqcCAhPSAnXDAnICYmICpwICE9ICclJyk7CisgICAgICAgICAgICBsZW4gPSBwIC0gZjsKKworICAgICAgICAgICAgaWYgKCpwID09ICdcMCcpCisgICAgICAgICAgICAgICAgd3JpdGVyLm92ZXJhbGxvY2F0ZSA9IDA7CisKKyAgICAgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQVNDSUlTdHJpbmcoJndyaXRlciwgZiwgbGVuKSA8IDApCisgICAgICAgICAgICAgICAgZ290byBmYWlsOworCisgICAgICAgICAgICBmID0gcDsKICAgICAgICAgfQotICAgICAgICBQeU9iamVjdF9GcmVlKGNhbGxyZXN1bHRzKTsKICAgICB9Ci0gICAgaWYgKG51bWJlcnJlc3VsdHMpCi0gICAgICAgIFB5T2JqZWN0X0ZyZWUobnVtYmVycmVzdWx0cyk7CisgICAgcmV0dXJuIF9QeVVuaWNvZGVXcml0ZXJfRmluaXNoKCZ3cml0ZXIpOworCisgIGZhaWw6CisgICAgX1B5VW5pY29kZVdyaXRlcl9EZWFsbG9jKCZ3cml0ZXIpOwogICAgIHJldHVybiBOVUxMOwogfQogCkBAIC0yOTQzLDEyICsyODU3LDcgQEAKICAgICBidWZsZW4gPSB1bmljb2RlX2Fzd2lkZWNoYXIodW5pY29kZSwgTlVMTCwgMCk7CiAgICAgaWYgKGJ1ZmxlbiA9PSAtMSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKFBZX1NTSVpFX1RfTUFYIC8gc2l6ZW9mKHdjaGFyX3QpIDwgYnVmbGVuKSB7Ci0gICAgICAgIFB5RXJyX05vTWVtb3J5KCk7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIGJ1ZmZlciA9IFB5TWVtX01BTExPQyhidWZsZW4gKiBzaXplb2Yod2NoYXJfdCkpOworICAgIGJ1ZmZlciA9IFB5TWVtX05FVyh3Y2hhcl90LCBidWZsZW4pOwogICAgIGlmIChidWZmZXIgPT0gTlVMTCkgewogICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTI5NjgsMjYgKzI4NzcsMTcgQEAKIFB5T2JqZWN0ICoKIFB5VW5pY29kZV9Gcm9tT3JkaW5hbChpbnQgb3JkaW5hbCkKIHsKLSAgICBQeU9iamVjdCAqdjsKICAgICBpZiAob3JkaW5hbCA8IDAgfHwgb3JkaW5hbCA+IE1BWF9VTklDT0RFKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgImNocigpIGFyZyBub3QgaW4gcmFuZ2UoMHgxMTAwMDApIik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIGlmICgoUHlfVUNTNClvcmRpbmFsIDwgMjU2KQotICAgICAgICByZXR1cm4gZ2V0X2xhdGluMV9jaGFyKCh1bnNpZ25lZCBjaGFyKW9yZGluYWwpOwotCi0gICAgdiA9IFB5VW5pY29kZV9OZXcoMSwgb3JkaW5hbCk7Ci0gICAgaWYgKHYgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgUHlVbmljb2RlX1dSSVRFKFB5VW5pY29kZV9LSU5EKHYpLCBQeVVuaWNvZGVfREFUQSh2KSwgMCwgb3JkaW5hbCk7Ci0gICAgYXNzZXJ0KF9QeVVuaWNvZGVfQ2hlY2tDb25zaXN0ZW5jeSh2LCAxKSk7Ci0gICAgcmV0dXJuIHY7CisgICAgcmV0dXJuIHVuaWNvZGVfY2hhcigoUHlfVUNTNClvcmRpbmFsKTsKIH0KIAogUHlPYmplY3QgKgotUHlVbmljb2RlX0Zyb21PYmplY3QocmVnaXN0ZXIgUHlPYmplY3QgKm9iaikKK1B5VW5pY29kZV9Gcm9tT2JqZWN0KFB5T2JqZWN0ICpvYmopCiB7CiAgICAgLyogWFhYIFBlcmhhcHMgd2Ugc2hvdWxkIG1ha2UgdGhpcyBBUEkgYW4gYWxpYXMgb2YKICAgICAgICBQeU9iamVjdF9TdHIoKSBpbnN0ZWFkID8hICovCkBAIC0zMDA5LDcgKzI5MDksNyBAQAogfQogCiBQeU9iamVjdCAqCi1QeVVuaWNvZGVfRnJvbUVuY29kZWRPYmplY3QocmVnaXN0ZXIgUHlPYmplY3QgKm9iaiwKK1B5VW5pY29kZV9Gcm9tRW5jb2RlZE9iamVjdChQeU9iamVjdCAqb2JqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVuY29kaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVycm9ycykKIHsKQEAgLTMwNDAsOCArMjk0MCw3IEBACiAgICAgLyogUmV0cmlldmUgYSBieXRlcyBidWZmZXIgdmlldyB0aHJvdWdoIHRoZSBQRVAgMzExOCBidWZmZXIgaW50ZXJmYWNlICovCiAgICAgaWYgKFB5T2JqZWN0X0dldEJ1ZmZlcihvYmosICZidWZmZXIsIFB5QlVGX1NJTVBMRSkgPCAwKSB7CiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAiY29lcmNpbmcgdG8gc3RyOiBuZWVkIGJ5dGVzLCBieXRlYXJyYXkgIgotICAgICAgICAgICAgICAgICAgICAgIm9yIGJ1ZmZlci1saWtlIG9iamVjdCwgJS44MHMgZm91bmQiLAorICAgICAgICAgICAgICAgICAgICAgImNvZXJjaW5nIHRvIHN0cjogbmVlZCBhIGJ5dGVzLWxpa2Ugb2JqZWN0LCAlLjgwcyBmb3VuZCIsCiAgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKG9iaiktPnRwX25hbWUpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CkBAIC0zMDYxLDE0ICsyOTYwLDE3IEBACiAgICAxIG9uIHN1Y2Nlc3MuICovCiBpbnQKIF9QeV9ub3JtYWxpemVfZW5jb2RpbmcoY29uc3QgY2hhciAqZW5jb2RpbmcsCi0gICAgICAgICAgICAgICAgICAgY2hhciAqbG93ZXIsCi0gICAgICAgICAgICAgICAgICAgc2l6ZV90IGxvd2VyX2xlbikKKyAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqbG93ZXIsCisgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsb3dlcl9sZW4pCiB7CiAgICAgY29uc3QgY2hhciAqZTsKICAgICBjaGFyICpsOwogICAgIGNoYXIgKmxfZW5kOwogCiAgICAgaWYgKGVuY29kaW5nID09IE5VTEwpIHsKKyAgICAgICAgLyogNiA9PSBzdHJsZW4oInV0Zi04IikgKyAxICovCisgICAgICAgIGlmIChsb3dlcl9sZW4gPCA2KQorICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIHN0cmNweShsb3dlciwgInV0Zi04Iik7CiAgICAgICAgIHJldHVybiAxOwogICAgIH0KQEAgLTMxMTAsNyArMzAxMiw4IEBACiAgICAgICAgICAgICByZXR1cm4gUHlVbmljb2RlX0RlY29kZVVURjhTdGF0ZWZ1bChzLCBzaXplLCBlcnJvcnMsIE5VTEwpOwogICAgICAgICBlbHNlIGlmICgoc3RyY21wKGxvd2VyLCAibGF0aW4tMSIpID09IDApIHx8CiAgICAgICAgICAgICAgICAgIChzdHJjbXAobG93ZXIsICJsYXRpbjEiKSA9PSAwKSB8fAotICAgICAgICAgICAgICAgICAoc3RyY21wKGxvd2VyLCAiaXNvLTg4NTktMSIpID09IDApKQorICAgICAgICAgICAgICAgICAoc3RyY21wKGxvd2VyLCAiaXNvLTg4NTktMSIpID09IDApIHx8CisgICAgICAgICAgICAgICAgIChzdHJjbXAobG93ZXIsICJpc284ODU5LTEiKSA9PSAwKSkKICAgICAgICAgICAgIHJldHVybiBQeVVuaWNvZGVfRGVjb2RlTGF0aW4xKHMsIHNpemUsIGVycm9ycyk7CiAjaWZkZWYgSEFWRV9NQkNTCiAgICAgICAgIGVsc2UgaWYgKHN0cmNtcChsb3dlciwgIm1iY3MiKSA9PSAwKQpAQCAtMzEzNiw4ICszMDM5LDEwIEBACiAgICAgICAgIGdvdG8gb25FcnJvcjsKICAgICBpZiAoIVB5VW5pY29kZV9DaGVjayh1bmljb2RlKSkgewogICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgImRlY29kZXIgZGlkIG5vdCByZXR1cm4gYSBzdHIgb2JqZWN0ICh0eXBlPSUuNDAwcykiLAotICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRSh1bmljb2RlKS0+dHBfbmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAiJyUuNDAwcycgZGVjb2RlciByZXR1cm5lZCAnJS40MDBzJyBpbnN0ZWFkIG9mICdzdHInOyAiCisgICAgICAgICAgICAgICAgICAgICAidXNlIGNvZGVjcy5kZWNvZGUoKSB0byBkZWNvZGUgdG8gYXJiaXRyYXJ5IHR5cGVzIiwKKyAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nLAorICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRSh1bmljb2RlKS0+dHBfbmFtZSwgUHlfVFlQRSh1bmljb2RlKS0+dHBfbmFtZSk7CiAgICAgICAgIFB5X0RFQ1JFRih1bmljb2RlKTsKICAgICAgICAgZ290byBvbkVycm9yOwogICAgIH0KQEAgLTMxOTUsOCArMzEwMCwxMCBAQAogICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgaWYgKCFQeVVuaWNvZGVfQ2hlY2sodikpIHsKICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICJkZWNvZGVyIGRpZCBub3QgcmV0dXJuIGEgc3RyIG9iamVjdCAodHlwZT0lLjQwMHMpIiwKLSAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUodiktPnRwX25hbWUpOworICAgICAgICAgICAgICAgICAgICAgIiclLjQwMHMnIGRlY29kZXIgcmV0dXJuZWQgJyUuNDAwcycgaW5zdGVhZCBvZiAnc3RyJzsgIgorICAgICAgICAgICAgICAgICAgICAgInVzZSBjb2RlY3MuZGVjb2RlKCkgdG8gZGVjb2RlIHRvIGFyYml0cmFyeSB0eXBlcyIsCisgICAgICAgICAgICAgICAgICAgICBlbmNvZGluZywKKyAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUodW5pY29kZSktPnRwX25hbWUsIFB5X1RZUEUodW5pY29kZSktPnRwX25hbWUpOwogICAgICAgICBQeV9ERUNSRUYodik7CiAgICAgICAgIGdvdG8gb25FcnJvcjsKICAgICB9CkBAIC0zMzQ0LDcgKzMyNTEsNyBAQAogICAgIH0KIAogICAgIGlmIChzdXJyb2dhdGVlc2NhcGUpIHsKLSAgICAgICAgLyogbG9jYWxlIGVuY29kaW5nIHdpdGggc3Vycm9nYXRlZXNjYXBlICovCisgICAgICAgIC8qICJzdXJyb2dhdGVlc2NhcGUiIGVycm9yIGhhbmRsZXIgKi8KICAgICAgICAgY2hhciAqc3RyOwogCiAgICAgICAgIHN0ciA9IF9QeV93Y2hhcjJjaGFyKHdzdHIsICZlcnJvcl9wb3MpOwpAQCAtMzM2NCw2ICszMjcxLDcgQEAKICAgICAgICAgUHlNZW1fRnJlZShzdHIpOwogICAgIH0KICAgICBlbHNlIHsKKyAgICAgICAgLyogc3RyaWN0IG1vZGUgKi8KICAgICAgICAgc2l6ZV90IGxlbiwgbGVuMjsKIAogICAgICAgICBsZW4gPSB3Y3N0b21icyhOVUxMLCB3c3RyLCAwKTsKQEAgLTM0MDIsNyArMzMxMCw3IEBACiAgICAgICAgIHdzdHIgPSBfUHlfY2hhcjJ3Y2hhcihlcnJtc2csICZlcnJsZW4pOwogICAgICAgICBpZiAod3N0ciAhPSBOVUxMKSB7CiAgICAgICAgICAgICByZWFzb24gPSBQeVVuaWNvZGVfRnJvbVdpZGVDaGFyKHdzdHIsIGVycmxlbik7Ci0gICAgICAgICAgICBQeU1lbV9GcmVlKHdzdHIpOworICAgICAgICAgICAgUHlNZW1fUmF3RnJlZSh3c3RyKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBlcnJtc2cgPSBOVUxMOwogICAgIH0KQEAgLTM0ODAsNyArMzM4OCw4IEBACiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoKHN0cmNtcChsb3dlciwgImxhdGluLTEiKSA9PSAwKSB8fAogICAgICAgICAgICAgICAgICAoc3RyY21wKGxvd2VyLCAibGF0aW4xIikgPT0gMCkgfHwKLSAgICAgICAgICAgICAgICAgKHN0cmNtcChsb3dlciwgImlzby04ODU5LTEiKSA9PSAwKSkKKyAgICAgICAgICAgICAgICAgKHN0cmNtcChsb3dlciwgImlzby04ODU5LTEiKSA9PSAwKSB8fAorICAgICAgICAgICAgICAgICAoc3RyY21wKGxvd2VyLCAiaXNvODg1OS0xIikgPT0gMCkpCiAgICAgICAgICAgICByZXR1cm4gX1B5VW5pY29kZV9Bc0xhdGluMVN0cmluZyh1bmljb2RlLCBlcnJvcnMpOwogI2lmZGVmIEhBVkVfTUJDUwogICAgICAgICBlbHNlIGlmIChzdHJjbXAobG93ZXIsICJtYmNzIikgPT0gMCkKQEAgLTM1MDUsNyArMzQxNCw4IEBACiAgICAgICAgIFB5T2JqZWN0ICpiOwogCiAgICAgICAgIGVycm9yID0gUHlFcnJfV2FybkZvcm1hdChQeUV4Y19SdW50aW1lV2FybmluZywgMSwKLSAgICAgICAgICAgICJlbmNvZGVyICVzIHJldHVybmVkIGJ5dGVhcnJheSBpbnN0ZWFkIG9mIGJ5dGVzIiwKKyAgICAgICAgICAgICJlbmNvZGVyICVzIHJldHVybmVkIGJ5dGVhcnJheSBpbnN0ZWFkIG9mIGJ5dGVzOyAiCisgICAgICAgICAgICAidXNlIGNvZGVjcy5lbmNvZGUoKSB0byBlbmNvZGUgdG8gYXJiaXRyYXJ5IHR5cGVzIiwKICAgICAgICAgICAgIGVuY29kaW5nKTsKICAgICAgICAgaWYgKGVycm9yKSB7CiAgICAgICAgICAgICBQeV9ERUNSRUYodik7CkBAIC0zNTE4LDggKzM0MjgsMTAgQEAKICAgICB9CiAKICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAiZW5jb2RlciBkaWQgbm90IHJldHVybiBhIGJ5dGVzIG9iamVjdCAodHlwZT0lLjQwMHMpIiwKLSAgICAgICAgICAgICAgICAgUHlfVFlQRSh2KS0+dHBfbmFtZSk7CisgICAgICAgICAgICAgICAgICInJS40MDBzJyBlbmNvZGVyIHJldHVybmVkICclLjQwMHMnIGluc3RlYWQgb2YgJ2J5dGVzJzsgIgorICAgICAgICAgICAgICAgICAidXNlIGNvZGVjcy5lbmNvZGUoKSB0byBlbmNvZGUgdG8gYXJiaXRyYXJ5IHR5cGVzIiwKKyAgICAgICAgICAgICAgICAgZW5jb2RpbmcsCisgICAgICAgICAgICAgICAgIFB5X1RZUEUodiktPnRwX25hbWUsIFB5X1RZUEUodiktPnRwX25hbWUpOwogICAgIFB5X0RFQ1JFRih2KTsKICAgICByZXR1cm4gTlVMTDsKIH0KQEAgLTM1NDUsOCArMzQ1NywxMCBAQAogICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgaWYgKCFQeVVuaWNvZGVfQ2hlY2sodikpIHsKICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICJlbmNvZGVyIGRpZCBub3QgcmV0dXJuIGFuIHN0ciBvYmplY3QgKHR5cGU9JS40MDBzKSIsCi0gICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKHYpLT50cF9uYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICInJS40MDBzJyBlbmNvZGVyIHJldHVybmVkICclLjQwMHMnIGluc3RlYWQgb2YgJ3N0cic7ICIKKyAgICAgICAgICAgICAgICAgICAgICJ1c2UgY29kZWNzLmVuY29kZSgpIHRvIGVuY29kZSB0byBhcmJpdHJhcnkgdHlwZXMiLAorICAgICAgICAgICAgICAgICAgICAgZW5jb2RpbmcsCisgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKHYpLT50cF9uYW1lLCBQeV9UWVBFKHYpLT50cF9uYW1lKTsKICAgICAgICAgUHlfREVDUkVGKHYpOwogICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgfQpAQCAtMzYwOSw4ICszNTIzLDggQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgaWYgKHN1cnJvZ2F0ZWVzY2FwZSkKLSAgICB7CisgICAgaWYgKHN1cnJvZ2F0ZWVzY2FwZSkgeworICAgICAgICAvKiAic3Vycm9nYXRlZXNjYXBlIiBlcnJvciBoYW5kbGVyICovCiAgICAgICAgIHdzdHIgPSBfUHlfY2hhcjJ3Y2hhcihzdHIsICZ3bGVuKTsKICAgICAgICAgaWYgKHdzdHIgPT0gTlVMTCkgewogICAgICAgICAgICAgaWYgKHdsZW4gPT0gKHNpemVfdCktMSkKQEAgLTM2MjEsOSArMzUzNSwxMCBAQAogICAgICAgICB9CiAKICAgICAgICAgdW5pY29kZSA9IFB5VW5pY29kZV9Gcm9tV2lkZUNoYXIod3N0ciwgd2xlbik7Ci0gICAgICAgIFB5TWVtX0ZyZWUod3N0cik7CisgICAgICAgIFB5TWVtX1Jhd0ZyZWUod3N0cik7CiAgICAgfQogICAgIGVsc2UgeworICAgICAgICAvKiBzdHJpY3QgbW9kZSAqLwogI2lmbmRlZiBIQVZFX0JST0tFTl9NQlNUT1dDUwogICAgICAgICB3bGVuID0gbWJzdG93Y3MoTlVMTCwgc3RyLCAwKTsKICNlbHNlCkBAIC0zNjM1LDE1ICszNTUwLDExIEBACiAgICAgICAgICAgICB3c3RyID0gc21hbGxidWY7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBpZiAod2xlbiA+IFBZX1NTSVpFX1RfTUFYIC8gc2l6ZW9mKHdjaGFyX3QpIC0gMSkKLSAgICAgICAgICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKLQotICAgICAgICAgICAgd3N0ciA9IFB5TWVtX01hbGxvYygod2xlbisxKSAqIHNpemVvZih3Y2hhcl90KSk7CisgICAgICAgICAgICB3c3RyID0gUHlNZW1fTmV3KHdjaGFyX3QsIHdsZW4rMSk7CiAgICAgICAgICAgICBpZiAoIXdzdHIpCiAgICAgICAgICAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgIH0KIAotICAgICAgICAvKiBUaGlzIHNob3VsZG4ndCBmYWlsIG5vdyAqLwogICAgICAgICB3bGVuMiA9IG1ic3Rvd2NzKHdzdHIsIHN0ciwgd2xlbisxKTsKICAgICAgICAgaWYgKHdsZW4yID09IChzaXplX3QpLTEpIHsKICAgICAgICAgICAgIGlmICh3c3RyICE9IHNtYWxsYnVmKQpAQCAtMzY2MCw2ICszNTcxLDcgQEAKICAgICByZXR1cm4gdW5pY29kZTsKIAogZGVjb2RlX2Vycm9yOgorICAgIHJlYXNvbiA9IE5VTEw7CiAgICAgZXJybXNnID0gc3RyZXJyb3IoZXJybm8pOwogICAgIGFzc2VydChlcnJtc2cgIT0gTlVMTCk7CiAKQEAgLTM2NjksMTEgKzM1ODEsMTAgQEAKICAgICAgICAgd3N0ciA9IF9QeV9jaGFyMndjaGFyKGVycm1zZywgJmVycmxlbik7CiAgICAgICAgIGlmICh3c3RyICE9IE5VTEwpIHsKICAgICAgICAgICAgIHJlYXNvbiA9IFB5VW5pY29kZV9Gcm9tV2lkZUNoYXIod3N0ciwgZXJybGVuKTsKLSAgICAgICAgICAgIFB5TWVtX0ZyZWUod3N0cik7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgZXJybXNnID0gTlVMTDsKKyAgICAgICAgICAgIFB5TWVtX1Jhd0ZyZWUod3N0cik7CisgICAgICAgIH0KICAgICB9Ci0gICAgaWYgKGVycm1zZyA9PSBOVUxMKQorICAgIGlmIChyZWFzb24gPT0gTlVMTCkKICAgICAgICAgcmVhc29uID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoCiAgICAgICAgICAgICAibWJzdG93Y3MoKSBlbmNvdW50ZXJlZCBhbiBpbnZhbGlkIG11bHRpYnl0ZSBzZXF1ZW5jZSIpOwogICAgIGlmIChyZWFzb24gPT0gTlVMTCkKQEAgLTM3MzcsMTggKzM2NDgsMjAgQEAKIAogCiBpbnQKLV9QeVVuaWNvZGVfSGFzTlVMQ2hhcnMoUHlPYmplY3QqIHMpCitfUHlVbmljb2RlX0hhc05VTENoYXJzKFB5T2JqZWN0KiBzdHIpCiB7Ci0gICAgc3RhdGljIFB5T2JqZWN0ICpudWwgPSBOVUxMOworICAgIFB5X3NzaXplX3QgcG9zOwogCi0gICAgaWYgKG51bCA9PSBOVUxMKQotICAgICAgICBudWwgPSBQeVVuaWNvZGVfRnJvbVN0cmluZ0FuZFNpemUoIlwwIiwgMSk7Ci0gICAgaWYgKG51bCA9PSBOVUxMKQorICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoc3RyKSA9PSAtMSkKICAgICAgICAgcmV0dXJuIC0xOwotICAgIHJldHVybiBQeVVuaWNvZGVfQ29udGFpbnMocywgbnVsKTsKKyAgICBwb3MgPSBmaW5kY2hhcihQeVVuaWNvZGVfREFUQShzdHIpLCBQeVVuaWNvZGVfS0lORChzdHIpLAorICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9HRVRfTEVOR1RIKHN0ciksICdcMCcsIDEpOworICAgIGlmIChwb3MgPT0gLTEpCisgICAgICAgIHJldHVybiAwOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIDE7CiB9CiAKLQogaW50CiBQeVVuaWNvZGVfRlNDb252ZXJ0ZXIoUHlPYmplY3QqIGFyZywgdm9pZCogYWRkcikKIHsKQEAgLTM4NTIsNiArMzc2NSw3IEBACiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgX1B5VW5pY29kZV9VVEY4KHVuaWNvZGUpID0gUHlPYmplY3RfTUFMTE9DKFB5Qnl0ZXNfR0VUX1NJWkUoYnl0ZXMpICsgMSk7CiAgICAgICAgIGlmIChfUHlVbmljb2RlX1VURjgodW5pY29kZSkgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgICAgIFB5X0RFQ1JFRihieXRlcyk7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQpAQCAtMzk0MSw2ICszODU1LDExIEBACiAjZW5kaWYKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlmICgoc2l6ZV90KV9QeVVuaWNvZGVfTEVOR1RIKHVuaWNvZGUpID4KKyAgICAgICAgICAgICAgICAgICAgUFlfU1NJWkVfVF9NQVggLyBzaXplb2Yod2NoYXJfdCkgLSAxKSB7CisgICAgICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIF9QeVVuaWNvZGVfV1NUUih1bmljb2RlKSA9ICh3Y2hhcl90ICopIFB5T2JqZWN0X01BTExPQyhzaXplb2Yod2NoYXJfdCkgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX1B5VW5pY29kZV9MRU5HVEgodW5pY29kZSkgKyAxKSk7CiAgICAgICAgICAgICBpZiAoIV9QeVVuaWNvZGVfV1NUUih1bmljb2RlKSkgewpAQCAtNDAyMCw2ICszOTM5LDkgQEAKIFB5X1VDUzQKIFB5VW5pY29kZV9SZWFkQ2hhcihQeU9iamVjdCAqdW5pY29kZSwgUHlfc3NpemVfdCBpbmRleCkKIHsKKyAgICB2b2lkICpkYXRhOworICAgIGludCBraW5kOworCiAgICAgaWYgKCFQeVVuaWNvZGVfQ2hlY2sodW5pY29kZSkgfHwgUHlVbmljb2RlX1JFQURZKHVuaWNvZGUpID09IC0xKSB7CiAgICAgICAgIFB5RXJyX0JhZEFyZ3VtZW50KCk7CiAgICAgICAgIHJldHVybiAoUHlfVUNTNCktMTsKQEAgLTQwMjgsNyArMzk1MCw5IEBACiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19JbmRleEVycm9yLCAic3RyaW5nIGluZGV4IG91dCBvZiByYW5nZSIpOwogICAgICAgICByZXR1cm4gKFB5X1VDUzQpLTE7CiAgICAgfQotICAgIHJldHVybiBQeVVuaWNvZGVfUkVBRF9DSEFSKHVuaWNvZGUsIGluZGV4KTsKKyAgICBkYXRhID0gUHlVbmljb2RlX0RBVEEodW5pY29kZSk7CisgICAga2luZCA9IFB5VW5pY29kZV9LSU5EKHVuaWNvZGUpOworICAgIHJldHVybiBQeVVuaWNvZGVfUkVBRChraW5kLCBkYXRhLCBpbmRleCk7CiB9CiAKIGludApAQCAtNDA4Niw2ICs0MDEwLDcgQEAKICAgICBQeV9DTEVBUigqZXhjZXB0aW9uT2JqZWN0KTsKIH0KIAorI2lmZGVmIEhBVkVfTUJDUwogLyogZXJyb3IgaGFuZGxpbmcgY2FsbGJhY2sgaGVscGVyOgogICAgYnVpbGQgYXJndW1lbnRzLCBjYWxsIHRoZSBjYWxsYmFjayBhbmQgY2hlY2sgdGhlIGFyZ3VtZW50cywKICAgIGlmIG5vIGV4Y2VwdGlvbiBvY2N1cnJlZCwgY29weSB0aGUgcmVwbGFjZW1lbnQgdG8gdGhlIG91dHB1dApAQCAtNDA5NCwxMSArNDAxOSwxMiBAQAogKi8KIAogc3RhdGljIGludAotdW5pY29kZV9kZWNvZGVfY2FsbF9lcnJvcmhhbmRsZXIoY29uc3QgY2hhciAqZXJyb3JzLCBQeU9iamVjdCAqKmVycm9ySGFuZGxlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVuY29kaW5nLCBjb25zdCBjaGFyICpyZWFzb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICoqaW5wdXQsIGNvbnN0IGNoYXIgKippbmVuZCwgUHlfc3NpemVfdCAqc3RhcnRpbnBvcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgKmVuZGlucG9zLCBQeU9iamVjdCAqKmV4Y2VwdGlvbk9iamVjdCwgY29uc3QgY2hhciAqKmlucHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKipvdXRwdXQsIFB5X3NzaXplX3QgKm91dHBvcykKK3VuaWNvZGVfZGVjb2RlX2NhbGxfZXJyb3JoYW5kbGVyX3djaGFyKAorICAgIGNvbnN0IGNoYXIgKmVycm9ycywgUHlPYmplY3QgKiplcnJvckhhbmRsZXIsCisgICAgY29uc3QgY2hhciAqZW5jb2RpbmcsIGNvbnN0IGNoYXIgKnJlYXNvbiwKKyAgICBjb25zdCBjaGFyICoqaW5wdXQsIGNvbnN0IGNoYXIgKippbmVuZCwgUHlfc3NpemVfdCAqc3RhcnRpbnBvcywKKyAgICBQeV9zc2l6ZV90ICplbmRpbnBvcywgUHlPYmplY3QgKipleGNlcHRpb25PYmplY3QsIGNvbnN0IGNoYXIgKippbnB0ciwKKyAgICBQeU9iamVjdCAqKm91dHB1dCwgUHlfc3NpemVfdCAqb3V0cG9zKQogewogICAgIHN0YXRpYyBjaGFyICphcmdwYXJzZSA9ICJPIW47ZGVjb2RpbmcgZXJyb3IgaGFuZGxlciBtdXN0IHJldHVybiAoc3RyLCBpbnQpIHR1cGxlIjsKIApAQCAtNDEwOSwxMiArNDAzNSwxMSBAQAogICAgIFB5X3NzaXplX3QgcmVxdWlyZWRzaXplOwogICAgIFB5X3NzaXplX3QgbmV3cG9zOwogICAgIFB5T2JqZWN0ICppbnB1dG9iaiA9IE5VTEw7Ci0gICAgaW50IHJlcyA9IC0xOworICAgIHdjaGFyX3QgKnJlcHdzdHI7CisgICAgUHlfc3NpemVfdCByZXB3bGVuOwogCi0gICAgaWYgKF9QeVVuaWNvZGVfS0lORCgqb3V0cHV0KSAhPSBQeVVuaWNvZGVfV0NIQVJfS0lORCkKLSAgICAgICAgb3V0c2l6ZSA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKCpvdXRwdXQpOwotICAgIGVsc2UKLSAgICAgICAgb3V0c2l6ZSA9IF9QeVVuaWNvZGVfV1NUUl9MRU5HVEgoKm91dHB1dCk7CisgICAgYXNzZXJ0IChfUHlVbmljb2RlX0tJTkQoKm91dHB1dCkgPT0gUHlVbmljb2RlX1dDSEFSX0tJTkQpOworICAgIG91dHNpemUgPSBfUHlVbmljb2RlX1dTVFJfTEVOR1RIKCpvdXRwdXQpOwogCiAgICAgaWYgKCplcnJvckhhbmRsZXIgPT0gTlVMTCkgewogICAgICAgICAqZXJyb3JIYW5kbGVyID0gUHlDb2RlY19Mb29rdXBFcnJvcihlcnJvcnMpOwpAQCAtNDEzOSw3ICs0MDY0LDEwNyBAQAogICAgIH0KICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUocmVzdHVwbGUsIGFyZ3BhcnNlLCAmUHlVbmljb2RlX1R5cGUsICZyZXB1bmljb2RlLCAmbmV3cG9zKSkKICAgICAgICAgZ290byBvbkVycm9yOwotICAgIGlmIChQeVVuaWNvZGVfUkVBRFkocmVwdW5pY29kZSkgPT0gLTEpCisKKyAgICAvKiBDb3B5IGJhY2sgdGhlIGJ5dGVzIHZhcmlhYmxlcywgd2hpY2ggbWlnaHQgaGF2ZSBiZWVuIG1vZGlmaWVkIGJ5IHRoZQorICAgICAgIGNhbGxiYWNrICovCisgICAgaW5wdXRvYmogPSBQeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRPYmplY3QoKmV4Y2VwdGlvbk9iamVjdCk7CisgICAgaWYgKCFpbnB1dG9iaikKKyAgICAgICAgZ290byBvbkVycm9yOworICAgIGlmICghUHlCeXRlc19DaGVjayhpbnB1dG9iaikpIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwgImV4Y2VwdGlvbiBhdHRyaWJ1dGUgb2JqZWN0IG11c3QgYmUgYnl0ZXMiKTsKKyAgICB9CisgICAgKmlucHV0ID0gUHlCeXRlc19BU19TVFJJTkcoaW5wdXRvYmopOworICAgIGluc2l6ZSA9IFB5Qnl0ZXNfR0VUX1NJWkUoaW5wdXRvYmopOworICAgICppbmVuZCA9ICppbnB1dCArIGluc2l6ZTsKKyAgICAvKiB3ZSBjYW4gREVDUkVGIHNhZmVseSwgYXMgdGhlIGV4Y2VwdGlvbiBoYXMgYW5vdGhlciByZWZlcmVuY2UsCisgICAgICAgc28gdGhlIG9iamVjdCB3b24ndCBnbyBhd2F5LiAqLworICAgIFB5X0RFQ1JFRihpbnB1dG9iaik7CisKKyAgICBpZiAobmV3cG9zPDApCisgICAgICAgIG5ld3BvcyA9IGluc2l6ZStuZXdwb3M7CisgICAgaWYgKG5ld3BvczwwIHx8IG5ld3Bvcz5pbnNpemUpIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX0luZGV4RXJyb3IsICJwb3NpdGlvbiAlemQgZnJvbSBlcnJvciBoYW5kbGVyIG91dCBvZiBib3VuZHMiLCBuZXdwb3MpOworICAgICAgICBnb3RvIG9uRXJyb3I7CisgICAgfQorCisgICAgcmVwd3N0ciA9IFB5VW5pY29kZV9Bc1VuaWNvZGVBbmRTaXplKHJlcHVuaWNvZGUsICZyZXB3bGVuKTsKKyAgICBpZiAocmVwd3N0ciA9PSBOVUxMKQorICAgICAgICBnb3RvIG9uRXJyb3I7CisgICAgLyogbmVlZCBtb3JlIHNwYWNlPyAoYXQgbGVhc3QgZW5vdWdoIGZvciB3aGF0IHdlCisgICAgICAgaGF2ZSt0aGUgcmVwbGFjZW1lbnQrdGhlIHJlc3Qgb2YgdGhlIHN0cmluZyAoc3RhcnRpbmcKKyAgICAgICBhdCB0aGUgbmV3IGlucHV0IHBvc2l0aW9uKSwgc28gd2Ugd29uJ3QgaGF2ZSB0byBjaGVjayBzcGFjZQorICAgICAgIHdoZW4gdGhlcmUgYXJlIG5vIGVycm9ycyBpbiB0aGUgcmVzdCBvZiB0aGUgc3RyaW5nKSAqLworICAgIHJlcXVpcmVkc2l6ZSA9ICpvdXRwb3M7CisgICAgaWYgKHJlcXVpcmVkc2l6ZSA+IFBZX1NTSVpFX1RfTUFYIC0gcmVwd2xlbikKKyAgICAgICAgZ290byBvdmVyZmxvdzsKKyAgICByZXF1aXJlZHNpemUgKz0gcmVwd2xlbjsKKyAgICBpZiAocmVxdWlyZWRzaXplID4gUFlfU1NJWkVfVF9NQVggLSAoaW5zaXplIC0gbmV3cG9zKSkKKyAgICAgICAgZ290byBvdmVyZmxvdzsKKyAgICByZXF1aXJlZHNpemUgKz0gaW5zaXplIC0gbmV3cG9zOworICAgIGlmIChyZXF1aXJlZHNpemUgPiBvdXRzaXplKSB7CisgICAgICAgIGlmIChvdXRzaXplIDw9IFBZX1NTSVpFX1RfTUFYLzIgJiYgcmVxdWlyZWRzaXplIDwgMipvdXRzaXplKQorICAgICAgICAgICAgcmVxdWlyZWRzaXplID0gMipvdXRzaXplOworICAgICAgICBpZiAodW5pY29kZV9yZXNpemUob3V0cHV0LCByZXF1aXJlZHNpemUpIDwgMCkKKyAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKKyAgICB9CisgICAgd2NzbmNweShfUHlVbmljb2RlX1dTVFIoKm91dHB1dCkgKyAqb3V0cG9zLCByZXB3c3RyLCByZXB3bGVuKTsKKyAgICAqb3V0cG9zICs9IHJlcHdsZW47CisgICAgKmVuZGlucG9zID0gbmV3cG9zOworICAgICppbnB0ciA9ICppbnB1dCArIG5ld3BvczsKKworICAgIC8qIHdlIG1hZGUgaXQhICovCisgICAgUHlfWERFQ1JFRihyZXN0dXBsZSk7CisgICAgcmV0dXJuIDA7CisKKyAgb3ZlcmZsb3c6CisgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICJkZWNvZGVkIHJlc3VsdCBpcyB0b28gbG9uZyBmb3IgYSBQeXRob24gc3RyaW5nIik7CisKKyAgb25FcnJvcjoKKyAgICBQeV9YREVDUkVGKHJlc3R1cGxlKTsKKyAgICByZXR1cm4gLTE7Cit9CisjZW5kaWYgICAvKiBIQVZFX01CQ1MgKi8KKworc3RhdGljIGludAordW5pY29kZV9kZWNvZGVfY2FsbF9lcnJvcmhhbmRsZXJfd3JpdGVyKAorICAgIGNvbnN0IGNoYXIgKmVycm9ycywgUHlPYmplY3QgKiplcnJvckhhbmRsZXIsCisgICAgY29uc3QgY2hhciAqZW5jb2RpbmcsIGNvbnN0IGNoYXIgKnJlYXNvbiwKKyAgICBjb25zdCBjaGFyICoqaW5wdXQsIGNvbnN0IGNoYXIgKippbmVuZCwgUHlfc3NpemVfdCAqc3RhcnRpbnBvcywKKyAgICBQeV9zc2l6ZV90ICplbmRpbnBvcywgUHlPYmplY3QgKipleGNlcHRpb25PYmplY3QsIGNvbnN0IGNoYXIgKippbnB0ciwKKyAgICBfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIgLyogUHlPYmplY3QgKipvdXRwdXQsIFB5X3NzaXplX3QgKm91dHBvcyAqLykKK3sKKyAgICBzdGF0aWMgY2hhciAqYXJncGFyc2UgPSAiTyFuO2RlY29kaW5nIGVycm9yIGhhbmRsZXIgbXVzdCByZXR1cm4gKHN0ciwgaW50KSB0dXBsZSI7CisKKyAgICBQeU9iamVjdCAqcmVzdHVwbGUgPSBOVUxMOworICAgIFB5T2JqZWN0ICpyZXB1bmljb2RlID0gTlVMTDsKKyAgICBQeV9zc2l6ZV90IGluc2l6ZTsKKyAgICBQeV9zc2l6ZV90IG5ld3BvczsKKyAgICBQeV9zc2l6ZV90IHJlcGxlbjsKKyAgICBQeU9iamVjdCAqaW5wdXRvYmogPSBOVUxMOworCisgICAgaWYgKCplcnJvckhhbmRsZXIgPT0gTlVMTCkgeworICAgICAgICAqZXJyb3JIYW5kbGVyID0gUHlDb2RlY19Mb29rdXBFcnJvcihlcnJvcnMpOworICAgICAgICBpZiAoKmVycm9ySGFuZGxlciA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBvbkVycm9yOworICAgIH0KKworICAgIG1ha2VfZGVjb2RlX2V4Y2VwdGlvbihleGNlcHRpb25PYmplY3QsCisgICAgICAgIGVuY29kaW5nLAorICAgICAgICAqaW5wdXQsICppbmVuZCAtICppbnB1dCwKKyAgICAgICAgKnN0YXJ0aW5wb3MsICplbmRpbnBvcywKKyAgICAgICAgcmVhc29uKTsKKyAgICBpZiAoKmV4Y2VwdGlvbk9iamVjdCA9PSBOVUxMKQorICAgICAgICBnb3RvIG9uRXJyb3I7CisKKyAgICByZXN0dXBsZSA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3MoKmVycm9ySGFuZGxlciwgKmV4Y2VwdGlvbk9iamVjdCwgTlVMTCk7CisgICAgaWYgKHJlc3R1cGxlID09IE5VTEwpCisgICAgICAgIGdvdG8gb25FcnJvcjsKKyAgICBpZiAoIVB5VHVwbGVfQ2hlY2socmVzdHVwbGUpKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICZhcmdwYXJzZVs0XSk7CisgICAgICAgIGdvdG8gb25FcnJvcjsKKyAgICB9CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKHJlc3R1cGxlLCBhcmdwYXJzZSwgJlB5VW5pY29kZV9UeXBlLCAmcmVwdW5pY29kZSwgJm5ld3BvcykpCiAgICAgICAgIGdvdG8gb25FcnJvcjsKIAogICAgIC8qIENvcHkgYmFjayB0aGUgYnl0ZXMgdmFyaWFibGVzLCB3aGljaCBtaWdodCBoYXZlIGJlZW4gbW9kaWZpZWQgYnkgdGhlCkBAIC00MTY0LDcxICs0MTg5LDI5IEBACiAgICAgICAgIGdvdG8gb25FcnJvcjsKICAgICB9CiAKLSAgICBpZiAoX1B5VW5pY29kZV9LSU5EKCpvdXRwdXQpICE9IFB5VW5pY29kZV9XQ0hBUl9LSU5EKSB7Ci0gICAgICAgIC8qIG5lZWQgbW9yZSBzcGFjZT8gKGF0IGxlYXN0IGVub3VnaCBmb3Igd2hhdCB3ZQotICAgICAgICAgICBoYXZlK3RoZSByZXBsYWNlbWVudCt0aGUgcmVzdCBvZiB0aGUgc3RyaW5nIChzdGFydGluZwotICAgICAgICAgICBhdCB0aGUgbmV3IGlucHV0IHBvc2l0aW9uKSwgc28gd2Ugd29uJ3QgaGF2ZSB0byBjaGVjayBzcGFjZQotICAgICAgICAgICB3aGVuIHRoZXJlIGFyZSBubyBlcnJvcnMgaW4gdGhlIHJlc3Qgb2YgdGhlIHN0cmluZykgKi8KLSAgICAgICAgUHlfc3NpemVfdCByZXBsZW4gPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChyZXB1bmljb2RlKTsKLSAgICAgICAgcmVxdWlyZWRzaXplID0gKm91dHBvczsKLSAgICAgICAgaWYgKHJlcXVpcmVkc2l6ZSA+IFBZX1NTSVpFX1RfTUFYIC0gcmVwbGVuKQotICAgICAgICAgICAgZ290byBvdmVyZmxvdzsKLSAgICAgICAgcmVxdWlyZWRzaXplICs9IHJlcGxlbjsKLSAgICAgICAgaWYgKHJlcXVpcmVkc2l6ZSA+IFBZX1NTSVpFX1RfTUFYIC0gKGluc2l6ZSAtIG5ld3BvcykpCi0gICAgICAgICAgICBnb3RvIG92ZXJmbG93OwotICAgICAgICByZXF1aXJlZHNpemUgKz0gaW5zaXplIC0gbmV3cG9zOwotICAgICAgICBpZiAocmVxdWlyZWRzaXplID4gb3V0c2l6ZSkgewotICAgICAgICAgICAgaWYgKG91dHNpemUgPD0gUFlfU1NJWkVfVF9NQVgvMiAmJiByZXF1aXJlZHNpemUgPCAyKm91dHNpemUpCi0gICAgICAgICAgICAgICAgcmVxdWlyZWRzaXplID0gMipvdXRzaXplOwotICAgICAgICAgICAgaWYgKHVuaWNvZGVfcmVzaXplKG91dHB1dCwgcmVxdWlyZWRzaXplKSA8IDApCi0gICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICB9Ci0gICAgICAgIGlmICh1bmljb2RlX3dpZGVuKG91dHB1dCwgKm91dHBvcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX01BWF9DSEFSX1ZBTFVFKHJlcHVuaWNvZGUpKSA8IDApCisgICAgaWYgKFB5VW5pY29kZV9SRUFEWShyZXB1bmljb2RlKSA8IDApCisgICAgICAgIGdvdG8gb25FcnJvcjsKKyAgICByZXBsZW4gPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChyZXB1bmljb2RlKTsKKyAgICBpZiAocmVwbGVuID4gMSkgeworICAgICAgICB3cml0ZXItPm1pbl9sZW5ndGggKz0gcmVwbGVuIC0gMTsKKyAgICAgICAgd3JpdGVyLT5vdmVyYWxsb2NhdGUgPSAxOworICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9QcmVwYXJlKHdyaXRlciwgd3JpdGVyLT5taW5fbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9NQVhfQ0hBUl9WQUxVRShyZXB1bmljb2RlKSkgPT0gLTEpCiAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgIF9QeVVuaWNvZGVfRmFzdENvcHlDaGFyYWN0ZXJzKCpvdXRwdXQsICpvdXRwb3MsIHJlcHVuaWNvZGUsIDAsIHJlcGxlbik7Ci0gICAgICAgICpvdXRwb3MgKz0gcmVwbGVuOwogICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgd2NoYXJfdCAqcmVwd3N0cjsKLSAgICAgICAgUHlfc3NpemVfdCByZXB3bGVuOwotICAgICAgICByZXB3c3RyID0gUHlVbmljb2RlX0FzVW5pY29kZUFuZFNpemUocmVwdW5pY29kZSwgJnJlcHdsZW4pOwotICAgICAgICBpZiAocmVwd3N0ciA9PSBOVUxMKQotICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAvKiBuZWVkIG1vcmUgc3BhY2U/IChhdCBsZWFzdCBlbm91Z2ggZm9yIHdoYXQgd2UKLSAgICAgICAgICAgaGF2ZSt0aGUgcmVwbGFjZW1lbnQrdGhlIHJlc3Qgb2YgdGhlIHN0cmluZyAoc3RhcnRpbmcKLSAgICAgICAgICAgYXQgdGhlIG5ldyBpbnB1dCBwb3NpdGlvbiksIHNvIHdlIHdvbid0IGhhdmUgdG8gY2hlY2sgc3BhY2UKLSAgICAgICAgICAgd2hlbiB0aGVyZSBhcmUgbm8gZXJyb3JzIGluIHRoZSByZXN0IG9mIHRoZSBzdHJpbmcpICovCi0gICAgICAgIHJlcXVpcmVkc2l6ZSA9ICpvdXRwb3M7Ci0gICAgICAgIGlmIChyZXF1aXJlZHNpemUgPiBQWV9TU0laRV9UX01BWCAtIHJlcHdsZW4pCi0gICAgICAgICAgICBnb3RvIG92ZXJmbG93OwotICAgICAgICByZXF1aXJlZHNpemUgKz0gcmVwd2xlbjsKLSAgICAgICAgaWYgKHJlcXVpcmVkc2l6ZSA+IFBZX1NTSVpFX1RfTUFYIC0gKGluc2l6ZSAtIG5ld3BvcykpCi0gICAgICAgICAgICBnb3RvIG92ZXJmbG93OwotICAgICAgICByZXF1aXJlZHNpemUgKz0gaW5zaXplIC0gbmV3cG9zOwotICAgICAgICBpZiAocmVxdWlyZWRzaXplID4gb3V0c2l6ZSkgewotICAgICAgICAgICAgaWYgKG91dHNpemUgPD0gUFlfU1NJWkVfVF9NQVgvMiAmJiByZXF1aXJlZHNpemUgPCAyKm91dHNpemUpCi0gICAgICAgICAgICAgICAgcmVxdWlyZWRzaXplID0gMipvdXRzaXplOwotICAgICAgICAgICAgaWYgKHVuaWNvZGVfcmVzaXplKG91dHB1dCwgcmVxdWlyZWRzaXplKSA8IDApCi0gICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICB9Ci0gICAgICAgIHdjc25jcHkoX1B5VW5pY29kZV9XU1RSKCpvdXRwdXQpICsgKm91dHBvcywgcmVwd3N0ciwgcmVwd2xlbik7Ci0gICAgICAgICpvdXRwb3MgKz0gcmVwd2xlbjsKLSAgICB9CisgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVTdHIod3JpdGVyLCByZXB1bmljb2RlKSA9PSAtMSkKKyAgICAgICAgZ290byBvbkVycm9yOworCiAgICAgKmVuZGlucG9zID0gbmV3cG9zOwogICAgICppbnB0ciA9ICppbnB1dCArIG5ld3BvczsKIAogICAgIC8qIHdlIG1hZGUgaXQhICovCi0gICAgcmVzID0gMDsKKyAgICBQeV9YREVDUkVGKHJlc3R1cGxlKTsKKyAgICByZXR1cm4gMDsKIAogICBvbkVycm9yOgogICAgIFB5X1hERUNSRUYocmVzdHVwbGUpOwotICAgIHJldHVybiByZXM7Ci0KLSAgb3ZlcmZsb3c6Ci0gICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICJkZWNvZGVkIHJlc3VsdCBpcyB0b28gbG9uZyBmb3IgYSBQeXRob24gc3RyaW5nIik7Ci0gICAgZ290byBvbkVycm9yOworICAgIHJldHVybiAtMTsKIH0KIAogLyogLS0tIFVURi03IENvZGVjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC00MzM2LDkgKzQzMTksOCBAQAogICAgIGNvbnN0IGNoYXIgKnN0YXJ0cyA9IHM7CiAgICAgUHlfc3NpemVfdCBzdGFydGlucG9zOwogICAgIFB5X3NzaXplX3QgZW5kaW5wb3M7Ci0gICAgUHlfc3NpemVfdCBvdXRwb3M7CiAgICAgY29uc3QgY2hhciAqZTsKLSAgICBQeU9iamVjdCAqdW5pY29kZTsKKyAgICBfUHlVbmljb2RlV3JpdGVyIHdyaXRlcjsKICAgICBjb25zdCBjaGFyICplcnJtc2cgPSAiIjsKICAgICBpbnQgaW5TaGlmdCA9IDA7CiAgICAgUHlfc3NpemVfdCBzaGlmdE91dFN0YXJ0OwpAQCAtNDM0OCwxNyArNDMzMCwxNyBAQAogICAgIFB5T2JqZWN0ICplcnJvckhhbmRsZXIgPSBOVUxMOwogICAgIFB5T2JqZWN0ICpleGMgPSBOVUxMOwogCi0gICAgLyogU3RhcnQgb2ZmIGFzc3VtaW5nIGl0J3MgYWxsIEFTQ0lJLiBXaWRlbiBsYXRlciBhcyBuZWNlc3NhcnkuICovCi0gICAgdW5pY29kZSA9IFB5VW5pY29kZV9OZXcoc2l6ZSwgMTI3KTsKLSAgICBpZiAoIXVuaWNvZGUpCi0gICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmIChzaXplID09IDApIHsKICAgICAgICAgaWYgKGNvbnN1bWVkKQogICAgICAgICAgICAgKmNvbnN1bWVkID0gMDsKLSAgICAgICAgcmV0dXJuIHVuaWNvZGU7CisgICAgICAgIF9QeV9SRVRVUk5fVU5JQ09ERV9FTVBUWSgpOwogICAgIH0KIAotICAgIHNoaWZ0T3V0U3RhcnQgPSBvdXRwb3MgPSAwOworICAgIC8qIFN0YXJ0IG9mZiBhc3N1bWluZyBpdCdzIGFsbCBBU0NJSS4gV2lkZW4gbGF0ZXIgYXMgbmVjZXNzYXJ5LiAqLworICAgIF9QeVVuaWNvZGVXcml0ZXJfSW5pdCgmd3JpdGVyKTsKKyAgICB3cml0ZXIubWluX2xlbmd0aCA9IHNpemU7CisKKyAgICBzaGlmdE91dFN0YXJ0ID0gMDsKICAgICBlID0gcyArIHNpemU7CiAKICAgICB3aGlsZSAocyA8IGUpIHsKQEAgLTQzODEsMTMgKzQzNjMsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGV4cGVjdGluZyBhIHNlY29uZCBzdXJyb2dhdGUgKi8KICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChQeV9VTklDT0RFX0lTX0xPV19TVVJST0dBVEUob3V0Q2gpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfVUNTNCBjaDIgPSBQeV9VTklDT0RFX0pPSU5fU1VSUk9HQVRFUyhzdXJyb2dhdGUsIG91dENoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodW5pY29kZV9wdXRjaGFyKCZ1bmljb2RlLCAmb3V0cG9zLCBjaDIpIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUNoYXJJbmxpbmUoJndyaXRlciwgY2gyKSA8IDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXJyb2dhdGUgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVuaWNvZGVfcHV0Y2hhcigmdW5pY29kZSwgJm91dHBvcywgc3Vycm9nYXRlKSA8IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVDaGFySW5saW5lKCZ3cml0ZXIsIHN1cnJvZ2F0ZSkgPCAwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Vycm9nYXRlID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTQzOTcsMzggKzQzNzksMzggQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHN1cnJvZ2F0ZSA9IG91dENoOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVuaWNvZGVfcHV0Y2hhcigmdW5pY29kZSwgJm91dHBvcywgb3V0Q2gpIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcklubGluZSgmd3JpdGVyLCBvdXRDaCkgPCAwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgeyAvKiBub3cgbGVhdmluZyBhIGJhc2UtNjQgc2VjdGlvbiAqLwogICAgICAgICAgICAgICAgIGluU2hpZnQgPSAwOwotICAgICAgICAgICAgICAgIHMrKzsKLSAgICAgICAgICAgICAgICBpZiAoc3Vycm9nYXRlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh1bmljb2RlX3B1dGNoYXIoJnVuaWNvZGUsICZvdXRwb3MsIHN1cnJvZ2F0ZSkgPCAwKQotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgICAgICAgICBzdXJyb2dhdGUgPSAwOwotICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAoYmFzZTY0Yml0cyA+IDApIHsgLyogbGVmdC1vdmVyIGJpdHMgKi8KICAgICAgICAgICAgICAgICAgICAgaWYgKGJhc2U2NGJpdHMgPj0gNikgewogICAgICAgICAgICAgICAgICAgICAgICAgLyogV2UndmUgc2VlbiBhdCBsZWFzdCBvbmUgYmFzZS02NCBjaGFyYWN0ZXIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIHMrKzsKICAgICAgICAgICAgICAgICAgICAgICAgIGVycm1zZyA9ICJwYXJ0aWFsIGNoYXJhY3RlciBpbiBzaGlmdCBzZXF1ZW5jZSI7CiAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHV0ZjdFcnJvcjsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNvbWUgYml0cyByZW1haW47IHRoZXkgc2hvdWxkIGJlIHplcm8gKi8KICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiYXNlNjRidWZmZXIgIT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMrKzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJtc2cgPSAibm9uLXplcm8gcGFkZGluZyBiaXRzIGluIHNoaWZ0IHNlcXVlbmNlIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHV0ZjdFcnJvcjsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoY2ggIT0gJy0nKSB7CisgICAgICAgICAgICAgICAgaWYgKHN1cnJvZ2F0ZSAmJiBERUNPREVfRElSRUNUKGNoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUNoYXJJbmxpbmUoJndyaXRlciwgc3Vycm9nYXRlKSA8IDApCisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHN1cnJvZ2F0ZSA9IDA7CisgICAgICAgICAgICAgICAgaWYgKGNoID09ICctJykgewogICAgICAgICAgICAgICAgICAgICAvKiAnLScgaXMgYWJzb3JiZWQ7IG90aGVyIHRlcm1pbmF0aW5nCiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlcnMgYXJlIHByZXNlcnZlZCAqLwotICAgICAgICAgICAgICAgICAgICBpZiAodW5pY29kZV9wdXRjaGFyKCZ1bmljb2RlLCAmb3V0cG9zLCBjaCkgPCAwKQotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOworICAgICAgICAgICAgICAgICAgICBzKys7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC00NDM3LDIwICs0NDE5LDIxIEBACiAgICAgICAgICAgICBzKys7IC8qIGNvbnN1bWUgJysnICovCiAgICAgICAgICAgICBpZiAocyA8IGUgJiYgKnMgPT0gJy0nKSB7IC8qICcrLScgZW5jb2RlcyAnKycgKi8KICAgICAgICAgICAgICAgICBzKys7Ci0gICAgICAgICAgICAgICAgaWYgKHVuaWNvZGVfcHV0Y2hhcigmdW5pY29kZSwgJm91dHBvcywgJysnKSA8IDApCisgICAgICAgICAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVDaGFySW5saW5lKCZ3cml0ZXIsICcrJykgPCAwKQogICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIHsgLyogYmVnaW4gYmFzZTY0LWVuY29kZWQgc2VjdGlvbiAqLwogICAgICAgICAgICAgICAgIGluU2hpZnQgPSAxOwotICAgICAgICAgICAgICAgIHNoaWZ0T3V0U3RhcnQgPSBvdXRwb3M7CisgICAgICAgICAgICAgICAgc3Vycm9nYXRlID0gMDsKKyAgICAgICAgICAgICAgICBzaGlmdE91dFN0YXJ0ID0gd3JpdGVyLnBvczsKICAgICAgICAgICAgICAgICBiYXNlNjRiaXRzID0gMDsKICAgICAgICAgICAgICAgICBiYXNlNjRidWZmZXIgPSAwOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKERFQ09ERV9ESVJFQ1QoY2gpKSB7IC8qIGNoYXJhY3RlciBkZWNvZGVzIGFzIGl0c2VsZiAqLwotICAgICAgICAgICAgaWYgKHVuaWNvZGVfcHV0Y2hhcigmdW5pY29kZSwgJm91dHBvcywgY2gpIDwgMCkKLSAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgICAgICAgICBzKys7CisgICAgICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUNoYXJJbmxpbmUoJndyaXRlciwgY2gpIDwgMCkKKyAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBzdGFydGlucG9zID0gcy1zdGFydHM7CkBAIC00NDYxLDExICs0NDQ0LDExIEBACiAgICAgICAgIGNvbnRpbnVlOwogdXRmN0Vycm9yOgogICAgICAgICBlbmRpbnBvcyA9IHMtc3RhcnRzOwotICAgICAgICBpZiAodW5pY29kZV9kZWNvZGVfY2FsbF9lcnJvcmhhbmRsZXIoCisgICAgICAgIGlmICh1bmljb2RlX2RlY29kZV9jYWxsX2Vycm9yaGFuZGxlcl93cml0ZXIoCiAgICAgICAgICAgICAgICAgZXJyb3JzLCAmZXJyb3JIYW5kbGVyLAogICAgICAgICAgICAgICAgICJ1dGY3IiwgZXJybXNnLAogICAgICAgICAgICAgICAgICZzdGFydHMsICZlLCAmc3RhcnRpbnBvcywgJmVuZGlucG9zLCAmZXhjLCAmcywKLSAgICAgICAgICAgICAgICAmdW5pY29kZSwgJm91dHBvcykpCisgICAgICAgICAgICAgICAgJndyaXRlcikpCiAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgfQogCkBAIC00NDczLDE1ICs0NDU2LDE2IEBACiAKICAgICBpZiAoaW5TaGlmdCAmJiAhY29uc3VtZWQpIHsgLyogaW4gc2hpZnQgc2VxdWVuY2UsIG5vIG1vcmUgdG8gZm9sbG93ICovCiAgICAgICAgIC8qIGlmIHdlJ3JlIGluIGFuIGluY29uc2lzdGVudCBzdGF0ZSwgdGhhdCdzIGFuIGVycm9yICovCisgICAgICAgIGluU2hpZnQgPSAwOwogICAgICAgICBpZiAoc3Vycm9nYXRlIHx8CiAgICAgICAgICAgICAgICAgKGJhc2U2NGJpdHMgPj0gNikgfHwKICAgICAgICAgICAgICAgICAoYmFzZTY0Yml0cyA+IDAgJiYgYmFzZTY0YnVmZmVyICE9IDApKSB7CiAgICAgICAgICAgICBlbmRpbnBvcyA9IHNpemU7Ci0gICAgICAgICAgICBpZiAodW5pY29kZV9kZWNvZGVfY2FsbF9lcnJvcmhhbmRsZXIoCisgICAgICAgICAgICBpZiAodW5pY29kZV9kZWNvZGVfY2FsbF9lcnJvcmhhbmRsZXJfd3JpdGVyKAogICAgICAgICAgICAgICAgICAgICBlcnJvcnMsICZlcnJvckhhbmRsZXIsCiAgICAgICAgICAgICAgICAgICAgICJ1dGY3IiwgInVudGVybWluYXRlZCBzaGlmdCBzZXF1ZW5jZSIsCiAgICAgICAgICAgICAgICAgICAgICZzdGFydHMsICZlLCAmc3RhcnRpbnBvcywgJmVuZGlucG9zLCAmZXhjLCAmcywKLSAgICAgICAgICAgICAgICAgICAgJnVuaWNvZGUsICZvdXRwb3MpKQorICAgICAgICAgICAgICAgICAgICAmd3JpdGVyKSkKICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgICAgICAgICBpZiAocyA8IGUpCiAgICAgICAgICAgICAgICAgZ290byByZXN0YXJ0OwpAQCAtNDQ5MiwzMiArNDQ3NiwyOSBAQAogICAgIGlmIChjb25zdW1lZCkgewogICAgICAgICBpZiAoaW5TaGlmdCkgewogICAgICAgICAgICAgKmNvbnN1bWVkID0gc3RhcnRpbnBvczsKLSAgICAgICAgICAgIGlmIChvdXRwb3MgIT0gc2hpZnRPdXRTdGFydCAmJgotICAgICAgICAgICAgICAgIFB5VW5pY29kZV9NQVhfQ0hBUl9WQUxVRSh1bmljb2RlKSA+IDEyNykgeworICAgICAgICAgICAgaWYgKHdyaXRlci5wb3MgIT0gc2hpZnRPdXRTdGFydCAmJiB3cml0ZXIubWF4Y2hhciA+IDEyNykgewogICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBQeVVuaWNvZGVfRnJvbUtpbmRBbmREYXRhKAotICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0tJTkQodW5pY29kZSksIFB5VW5pY29kZV9EQVRBKHVuaWNvZGUpLAotICAgICAgICAgICAgICAgICAgICAgICAgc2hpZnRPdXRTdGFydCk7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKHVuaWNvZGUpOwotICAgICAgICAgICAgICAgIHVuaWNvZGUgPSByZXN1bHQ7CisgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIua2luZCwgd3JpdGVyLmRhdGEsIHNoaWZ0T3V0U3RhcnQpOworICAgICAgICAgICAgICAgIFB5X1hERUNSRUYoZXJyb3JIYW5kbGVyKTsKKyAgICAgICAgICAgICAgICBQeV9YREVDUkVGKGV4Yyk7CisgICAgICAgICAgICAgICAgX1B5VW5pY29kZVdyaXRlcl9EZWFsbG9jKCZ3cml0ZXIpOworICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBvdXRwb3MgPSBzaGlmdE91dFN0YXJ0OyAvKiBiYWNrIG9mZiBvdXRwdXQgKi8KKyAgICAgICAgICAgIHdyaXRlci5wb3MgPSBzaGlmdE91dFN0YXJ0OyAvKiBiYWNrIG9mZiBvdXRwdXQgKi8KICAgICAgICAgfQogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICpjb25zdW1lZCA9IHMtc3RhcnRzOwogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKHVuaWNvZGVfcmVzaXplKCZ1bmljb2RlLCBvdXRwb3MpIDwgMCkKLSAgICAgICAgZ290byBvbkVycm9yOwotCiAgICAgUHlfWERFQ1JFRihlcnJvckhhbmRsZXIpOwogICAgIFB5X1hERUNSRUYoZXhjKTsKLSAgICByZXR1cm4gdW5pY29kZV9yZXN1bHQodW5pY29kZSk7CisgICAgcmV0dXJuIF9QeVVuaWNvZGVXcml0ZXJfRmluaXNoKCZ3cml0ZXIpOwogCiAgIG9uRXJyb3I6CiAgICAgUHlfWERFQ1JFRihlcnJvckhhbmRsZXIpOwogICAgIFB5X1hERUNSRUYoZXhjKTsKLSAgICBQeV9ERUNSRUYodW5pY29kZSk7CisgICAgX1B5VW5pY29kZVdyaXRlcl9EZWFsbG9jKCZ3cml0ZXIpOwogICAgIHJldHVybiBOVUxMOwogfQogCkBAIC00NjAwLDcgKzQ1ODEsNyBAQAogCiAgICAgICAgICAgICAvKiBjb2RlIGZpcnN0IHN1cnJvZ2F0ZSAqLwogICAgICAgICAgICAgYmFzZTY0Yml0cyArPSAxNjsKLSAgICAgICAgICAgIGJhc2U2NGJ1ZmZlciA9IChiYXNlNjRidWZmZXIgPDwgMTYpIHwgMHhkODAwIHwgKChjaC0weDEwMDAwKSA+PiAxMCk7CisgICAgICAgICAgICBiYXNlNjRidWZmZXIgPSAoYmFzZTY0YnVmZmVyIDw8IDE2KSB8IFB5X1VOSUNPREVfSElHSF9TVVJST0dBVEUoY2gpOwogICAgICAgICAgICAgd2hpbGUgKGJhc2U2NGJpdHMgPj0gNikgewogICAgICAgICAgICAgICAgICpvdXQrKyA9IFRPX0JBU0U2NChiYXNlNjRidWZmZXIgPj4gKGJhc2U2NGJpdHMtNikpOwogICAgICAgICAgICAgICAgIGJhc2U2NGJpdHMgLT0gNjsKQEAgLTQ3MDEsOSArNDY4Miw5IEBACiAgICAgaWYgKF9QeV9JU19BTElHTkVEKHAsIFNJWkVPRl9MT05HKSkgewogICAgICAgICAvKiBGYXN0IHBhdGgsIHNlZSBpbiBTVFJJTkdMSUIodXRmOF9kZWNvZGUpIGZvcgogICAgICAgICAgICBhbiBleHBsYW5hdGlvbi4gKi8KLSAgICAgICAgLyogSGVscCByZWdpc3RlciBhbGxvY2F0aW9uICovCi0gICAgICAgIHJlZ2lzdGVyIGNvbnN0IGNoYXIgKl9wID0gcDsKLSAgICAgICAgcmVnaXN0ZXIgUHlfVUNTMSAqIHEgPSBkZXN0OworICAgICAgICAvKiBIZWxwIGFsbG9jYXRpb24gKi8KKyAgICAgICAgY29uc3QgY2hhciAqX3AgPSBwOworICAgICAgICBQeV9VQ1MxICogcSA9IGRlc3Q7CiAgICAgICAgIHdoaWxlIChfcCA8IGFsaWduZWRfZW5kKSB7CiAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHZhbHVlID0gKihjb25zdCB1bnNpZ25lZCBsb25nICopIF9wOwogICAgICAgICAgICAgaWYgKHZhbHVlICYgQVNDSUlfQ0hBUl9NQVNLKQpAQCAtNDcyNiw4ICs0NzA3LDggQEAKICAgICAgICAgLyogRmFzdCBwYXRoLCBzZWUgaW4gU1RSSU5HTElCKHV0ZjhfZGVjb2RlKSBpbiBzdHJpbmdsaWIvY29kZWNzLmgKICAgICAgICAgICAgZm9yIGFuIGV4cGxhbmF0aW9uLiAqLwogICAgICAgICBpZiAoX1B5X0lTX0FMSUdORUQocCwgU0laRU9GX0xPTkcpKSB7Ci0gICAgICAgICAgICAvKiBIZWxwIHJlZ2lzdGVyIGFsbG9jYXRpb24gKi8KLSAgICAgICAgICAgIHJlZ2lzdGVyIGNvbnN0IGNoYXIgKl9wID0gcDsKKyAgICAgICAgICAgIC8qIEhlbHAgYWxsb2NhdGlvbiAqLworICAgICAgICAgICAgY29uc3QgY2hhciAqX3AgPSBwOwogICAgICAgICAgICAgd2hpbGUgKF9wIDwgYWxpZ25lZF9lbmQpIHsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHZhbHVlID0gKih1bnNpZ25lZCBsb25nICopIF9wOwogICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAmIEFTQ0lJX0NIQVJfTUFTSykKQEAgLTQ3NTIsMTAgKzQ3MzMsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplcnJvcnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgKmNvbnN1bWVkKQogewotICAgIFB5T2JqZWN0ICp1bmljb2RlOworICAgIF9QeVVuaWNvZGVXcml0ZXIgd3JpdGVyOwogICAgIGNvbnN0IGNoYXIgKnN0YXJ0cyA9IHM7CiAgICAgY29uc3QgY2hhciAqZW5kID0gcyArIHNpemU7Ci0gICAgUHlfc3NpemVfdCBvdXRwb3M7CiAKICAgICBQeV9zc2l6ZV90IHN0YXJ0aW5wb3M7CiAgICAgUHlfc3NpemVfdCBlbmRpbnBvczsKQEAgLTQ3NzYsMjkgKzQ3NTYsMjYgQEAKICAgICAgICAgcmV0dXJuIGdldF9sYXRpbjFfY2hhcigodW5zaWduZWQgY2hhcilzWzBdKTsKICAgICB9CiAKLSAgICB1bmljb2RlID0gUHlVbmljb2RlX05ldyhzaXplLCAxMjcpOwotICAgIGlmICghdW5pY29kZSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgX1B5VW5pY29kZVdyaXRlcl9Jbml0KCZ3cml0ZXIpOworICAgIHdyaXRlci5taW5fbGVuZ3RoID0gc2l6ZTsKKyAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9QcmVwYXJlKCZ3cml0ZXIsIHdyaXRlci5taW5fbGVuZ3RoLCAxMjcpID09IC0xKQorICAgICAgICBnb3RvIG9uRXJyb3I7CiAKLSAgICBvdXRwb3MgPSBhc2NpaV9kZWNvZGUocywgZW5kLCBQeVVuaWNvZGVfMUJZVEVfREFUQSh1bmljb2RlKSk7Ci0gICAgcyArPSBvdXRwb3M7CisgICAgd3JpdGVyLnBvcyA9IGFzY2lpX2RlY29kZShzLCBlbmQsIHdyaXRlci5kYXRhKTsKKyAgICBzICs9IHdyaXRlci5wb3M7CiAgICAgd2hpbGUgKHMgPCBlbmQpIHsKICAgICAgICAgUHlfVUNTNCBjaDsKLSAgICAgICAgaW50IGtpbmQgPSBQeVVuaWNvZGVfS0lORCh1bmljb2RlKTsKKyAgICAgICAgaW50IGtpbmQgPSB3cml0ZXIua2luZDsKICAgICAgICAgaWYgKGtpbmQgPT0gUHlVbmljb2RlXzFCWVRFX0tJTkQpIHsKLSAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfSVNfQVNDSUkodW5pY29kZSkpCi0gICAgICAgICAgICAgICAgY2ggPSBhc2NpaWxpYl91dGY4X2RlY29kZSgmcywgZW5kLAotICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlXzFCWVRFX0RBVEEodW5pY29kZSksICZvdXRwb3MpOworICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9JU19BU0NJSSh3cml0ZXIuYnVmZmVyKSkKKyAgICAgICAgICAgICAgICBjaCA9IGFzY2lpbGliX3V0ZjhfZGVjb2RlKCZzLCBlbmQsIHdyaXRlci5kYXRhLCAmd3JpdGVyLnBvcyk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgY2ggPSB1Y3MxbGliX3V0ZjhfZGVjb2RlKCZzLCBlbmQsCi0gICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfMUJZVEVfREFUQSh1bmljb2RlKSwgJm91dHBvcyk7CisgICAgICAgICAgICAgICAgY2ggPSB1Y3MxbGliX3V0ZjhfZGVjb2RlKCZzLCBlbmQsIHdyaXRlci5kYXRhLCAmd3JpdGVyLnBvcyk7CiAgICAgICAgIH0gZWxzZSBpZiAoa2luZCA9PSBQeVVuaWNvZGVfMkJZVEVfS0lORCkgewotICAgICAgICAgICAgY2ggPSB1Y3MybGliX3V0ZjhfZGVjb2RlKCZzLCBlbmQsCi0gICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV8yQllURV9EQVRBKHVuaWNvZGUpLCAmb3V0cG9zKTsKKyAgICAgICAgICAgIGNoID0gdWNzMmxpYl91dGY4X2RlY29kZSgmcywgZW5kLCB3cml0ZXIuZGF0YSwgJndyaXRlci5wb3MpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgYXNzZXJ0KGtpbmQgPT0gUHlVbmljb2RlXzRCWVRFX0tJTkQpOwotICAgICAgICAgICAgY2ggPSB1Y3M0bGliX3V0ZjhfZGVjb2RlKCZzLCBlbmQsCi0gICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV80QllURV9EQVRBKHVuaWNvZGUpLCAmb3V0cG9zKTsKKyAgICAgICAgICAgIGNoID0gdWNzNGxpYl91dGY4X2RlY29kZSgmcywgZW5kLCB3cml0ZXIuZGF0YSwgJndyaXRlci5wb3MpOwogICAgICAgICB9CiAKICAgICAgICAgc3dpdGNoIChjaCkgewpAQCAtNDgyMiwzNSArNDc5OSwzMSBAQAogICAgICAgICAgICAgZW5kaW5wb3MgPSBzdGFydGlucG9zICsgY2ggLSAxOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBpZiAodW5pY29kZV9wdXRjaGFyKCZ1bmljb2RlLCAmb3V0cG9zLCBjaCkgPCAwKQorICAgICAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVDaGFySW5saW5lKCZ3cml0ZXIsIGNoKSA8IDApCiAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAodW5pY29kZV9kZWNvZGVfY2FsbF9lcnJvcmhhbmRsZXIoCisgICAgICAgIGlmICh1bmljb2RlX2RlY29kZV9jYWxsX2Vycm9yaGFuZGxlcl93cml0ZXIoCiAgICAgICAgICAgICAgICAgZXJyb3JzLCAmZXJyb3JIYW5kbGVyLAogICAgICAgICAgICAgICAgICJ1dGYtOCIsIGVycm1zZywKICAgICAgICAgICAgICAgICAmc3RhcnRzLCAmZW5kLCAmc3RhcnRpbnBvcywgJmVuZGlucG9zLCAmZXhjLCAmcywKLSAgICAgICAgICAgICAgICAmdW5pY29kZSwgJm91dHBvcykpCisgICAgICAgICAgICAgICAgJndyaXRlcikpCiAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgfQogCiBFbmQ6Ci0gICAgaWYgKHVuaWNvZGVfcmVzaXplKCZ1bmljb2RlLCBvdXRwb3MpIDwgMCkKLSAgICAgICAgZ290byBvbkVycm9yOwotCiAgICAgaWYgKGNvbnN1bWVkKQogICAgICAgICAqY29uc3VtZWQgPSBzIC0gc3RhcnRzOwogCiAgICAgUHlfWERFQ1JFRihlcnJvckhhbmRsZXIpOwogICAgIFB5X1hERUNSRUYoZXhjKTsKLSAgICBhc3NlcnQoX1B5VW5pY29kZV9DaGVja0NvbnNpc3RlbmN5KHVuaWNvZGUsIDEpKTsKLSAgICByZXR1cm4gdW5pY29kZTsKKyAgICByZXR1cm4gX1B5VW5pY29kZVdyaXRlcl9GaW5pc2goJndyaXRlcik7CiAKIG9uRXJyb3I6CiAgICAgUHlfWERFQ1JFRihlcnJvckhhbmRsZXIpOwogICAgIFB5X1hERUNSRUYoZXhjKTsKLSAgICBQeV9YREVDUkVGKHVuaWNvZGUpOworICAgIF9QeVVuaWNvZGVXcml0ZXJfRGVhbGxvYygmd3JpdGVyKTsKICAgICByZXR1cm4gTlVMTDsKIH0KIApAQCAtNDg2MCw3ICs0ODMzLDcgQEAKICAgIHVzZWQgdG8gZGVjb2RlIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzIG9uIE1hYyBPUyBYLgogCiAgICBSZXR1cm4gYSBwb2ludGVyIHRvIGEgbmV3bHkgYWxsb2NhdGVkIHdpZGUgY2hhcmFjdGVyIHN0cmluZyAodXNlCi0gICBQeU1lbV9GcmVlKCkgdG8gZnJlZSB0aGUgbWVtb3J5KSwgb3IgTlVMTCBvbiBtZW1vcnkgYWxsb2NhdGlvbiBlcnJvci4gKi8KKyAgIFB5TWVtX1Jhd0ZyZWUoKSB0byBmcmVlIHRoZSBtZW1vcnkpLCBvciBOVUxMIG9uIG1lbW9yeSBhbGxvY2F0aW9uIGVycm9yLiAqLwogCiB3Y2hhcl90KgogX1B5X0RlY29kZVVURjhfc3Vycm9nYXRlZXNjYXBlKGNvbnN0IGNoYXIgKnMsIFB5X3NzaXplX3Qgc2l6ZSkKQEAgLTQ4NzMsNyArNDg0Niw3IEBACiAgICAgICAgY2hhcmFjdGVyIGNvdW50ICovCiAgICAgaWYgKFBZX1NTSVpFX1RfTUFYIC8gc2l6ZW9mKHdjaGFyX3QpIDwgKHNpemUgKyAxKSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgdW5pY29kZSA9IFB5TWVtX01hbGxvYygoc2l6ZSArIDEpICogc2l6ZW9mKHdjaGFyX3QpKTsKKyAgICB1bmljb2RlID0gUHlNZW1fUmF3TWFsbG9jKChzaXplICsgMSkgKiBzaXplb2Yod2NoYXJfdCkpOwogICAgIGlmICghdW5pY29kZSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTQ5OTYsMTcgKzQ5NjksMTEgQEAKICAgICBjb25zdCBjaGFyICpzdGFydHMgPSBzOwogICAgIFB5X3NzaXplX3Qgc3RhcnRpbnBvczsKICAgICBQeV9zc2l6ZV90IGVuZGlucG9zOwotICAgIFB5X3NzaXplX3Qgb3V0cG9zOwotICAgIFB5T2JqZWN0ICp1bmljb2RlOworICAgIF9QeVVuaWNvZGVXcml0ZXIgd3JpdGVyOwogICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnEsICplOwotICAgIGludCBibyA9IDA7ICAgICAgIC8qIGFzc3VtZSBuYXRpdmUgb3JkZXJpbmcgYnkgZGVmYXVsdCAqLworICAgIGludCBsZSwgYm8gPSAwOyAgICAgICAvKiBhc3N1bWUgbmF0aXZlIG9yZGVyaW5nIGJ5IGRlZmF1bHQgKi8KKyAgICBjb25zdCBjaGFyICplbmNvZGluZzsKICAgICBjb25zdCBjaGFyICplcnJtc2cgPSAiIjsKLSAgICAvKiBPZmZzZXRzIGZyb20gcSBmb3IgcmV0cmlldmluZyBieXRlcyBpbiB0aGUgcmlnaHQgb3JkZXIuICovCi0jaWZkZWYgQllURU9SREVSX0lTX0xJVFRMRV9FTkRJQU4KLSAgICBpbnQgaW9yZGVyW10gPSB7MCwgMSwgMiwgM307Ci0jZWxzZQotICAgIGludCBpb3JkZXJbXSA9IHszLCAyLCAxLCAwfTsKLSNlbmRpZgogICAgIFB5T2JqZWN0ICplcnJvckhhbmRsZXIgPSBOVUxMOwogICAgIFB5T2JqZWN0ICpleGMgPSBOVUxMOwogCkBAIC01MDIwLDEwNyArNDk4NywxMTggQEAKICAgICAgICBieXRlIG9yZGVyIHNldHRpbmcgYWNjb3JkaW5nbHkuIEluIG5hdGl2ZSBtb2RlLCB0aGUgbGVhZGluZyBCT00KICAgICAgICBtYXJrIGlzIHNraXBwZWQsIGluIGFsbCBvdGhlciBtb2RlcywgaXQgaXMgY29waWVkIHRvIHRoZSBvdXRwdXQKICAgICAgICBzdHJlYW0gYXMtaXMgKGdpdmluZyBhIFpXTkJTUCBjaGFyYWN0ZXIpLiAqLwotICAgIGlmIChibyA9PSAwKSB7Ci0gICAgICAgIGlmIChzaXplID49IDQpIHsKLSAgICAgICAgICAgIGNvbnN0IFB5X1VDUzQgYm9tID0gKHFbaW9yZGVyWzNdXSA8PCAyNCkgfCAocVtpb3JkZXJbMl1dIDw8IDE2KSB8Ci0gICAgICAgICAgICAgICAgKHFbaW9yZGVyWzFdXSA8PCA4KSB8IHFbaW9yZGVyWzBdXTsKLSNpZmRlZiBCWVRFT1JERVJfSVNfTElUVExFX0VORElBTgotICAgICAgICAgICAgaWYgKGJvbSA9PSAweDAwMDBGRUZGKSB7Ci0gICAgICAgICAgICAgICAgcSArPSA0OwotICAgICAgICAgICAgICAgIGJvID0gLTE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChib20gPT0gMHhGRkZFMDAwMCkgewotICAgICAgICAgICAgICAgIHEgKz0gNDsKLSAgICAgICAgICAgICAgICBibyA9IDE7Ci0gICAgICAgICAgICB9CisgICAgaWYgKGJvID09IDAgJiYgc2l6ZSA+PSA0KSB7CisgICAgICAgIFB5X1VDUzQgYm9tID0gKHFbM10gPDwgMjQpIHwgKHFbMl0gPDwgMTYpIHwgKHFbMV0gPDwgOCkgfCBxWzBdOworICAgICAgICBpZiAoYm9tID09IDB4MDAwMEZFRkYpIHsKKyAgICAgICAgICAgIGJvID0gLTE7CisgICAgICAgICAgICBxICs9IDQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoYm9tID09IDB4RkZGRTAwMDApIHsKKyAgICAgICAgICAgIGJvID0gMTsKKyAgICAgICAgICAgIHEgKz0gNDsKKyAgICAgICAgfQorICAgICAgICBpZiAoYnl0ZW9yZGVyKQorICAgICAgICAgICAgKmJ5dGVvcmRlciA9IGJvOworICAgIH0KKworICAgIGlmIChxID09IGUpIHsKKyAgICAgICAgaWYgKGNvbnN1bWVkKQorICAgICAgICAgICAgKmNvbnN1bWVkID0gc2l6ZTsKKyAgICAgICAgX1B5X1JFVFVSTl9VTklDT0RFX0VNUFRZKCk7CisgICAgfQorCisjaWZkZWYgV09SRFNfQklHRU5ESUFOCisgICAgbGUgPSBibyA8IDA7CiAjZWxzZQotICAgICAgICAgICAgaWYgKGJvbSA9PSAweDAwMDBGRUZGKSB7Ci0gICAgICAgICAgICAgICAgcSArPSA0OwotICAgICAgICAgICAgICAgIGJvID0gMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKGJvbSA9PSAweEZGRkUwMDAwKSB7Ci0gICAgICAgICAgICAgICAgcSArPSA0OwotICAgICAgICAgICAgICAgIGJvID0gLTE7Ci0gICAgICAgICAgICB9CisgICAgbGUgPSBibyA8PSAwOwogI2VuZGlmCisgICAgZW5jb2RpbmcgPSBsZSA/ICJ1dGYtMzItbGUiIDogInV0Zi0zMi1iZSI7CisKKyAgICBfUHlVbmljb2RlV3JpdGVyX0luaXQoJndyaXRlcik7CisgICAgd3JpdGVyLm1pbl9sZW5ndGggPSAoZSAtIHEgKyAzKSAvIDQ7CisgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfUHJlcGFyZSgmd3JpdGVyLCB3cml0ZXIubWluX2xlbmd0aCwgMTI3KSA9PSAtMSkKKyAgICAgICAgZ290byBvbkVycm9yOworCisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgUHlfVUNTNCBjaCA9IDA7CisgICAgICAgIFB5X1VDUzQgbWF4Y2ggPSBQeVVuaWNvZGVfTUFYX0NIQVJfVkFMVUUod3JpdGVyLmJ1ZmZlcik7CisKKyAgICAgICAgaWYgKGUgLSBxID49IDQpIHsKKyAgICAgICAgICAgIGVudW0gUHlVbmljb2RlX0tpbmQga2luZCA9IHdyaXRlci5raW5kOworICAgICAgICAgICAgdm9pZCAqZGF0YSA9IHdyaXRlci5kYXRhOworICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbGFzdCA9IGUgLSA0OworICAgICAgICAgICAgUHlfc3NpemVfdCBwb3MgPSB3cml0ZXIucG9zOworICAgICAgICAgICAgaWYgKGxlKSB7CisgICAgICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgICAgICBjaCA9IChxWzNdIDw8IDI0KSB8IChxWzJdIDw8IDE2KSB8IChxWzFdIDw8IDgpIHwgcVswXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNoID4gbWF4Y2gpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGtpbmQgIT0gUHlVbmljb2RlXzFCWVRFX0tJTkQgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5X1VOSUNPREVfSVNfU1VSUk9HQVRFKGNoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUoa2luZCwgZGF0YSwgcG9zKyssIGNoKTsKKyAgICAgICAgICAgICAgICAgICAgcSArPSA0OworICAgICAgICAgICAgICAgIH0gd2hpbGUgKHEgPD0gbGFzdCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgICAgIGNoID0gKHFbMF0gPDwgMjQpIHwgKHFbMV0gPDwgMTYpIHwgKHFbMl0gPDwgOCkgfCBxWzNdOworICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPiBtYXhjaCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBpZiAoa2luZCAhPSBQeVVuaWNvZGVfMUJZVEVfS0lORCAmJgorICAgICAgICAgICAgICAgICAgICAgICAgUHlfVU5JQ09ERV9JU19TVVJST0dBVEUoY2gpKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShraW5kLCBkYXRhLCBwb3MrKywgY2gpOworICAgICAgICAgICAgICAgICAgICBxICs9IDQ7CisgICAgICAgICAgICAgICAgfSB3aGlsZSAocSA8PSBsYXN0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHdyaXRlci5wb3MgPSBwb3M7CiAgICAgICAgIH0KLSAgICB9CiAKLSAgICBpZiAoYm8gPT0gLTEpIHsKLSAgICAgICAgLyogZm9yY2UgTEUgKi8KLSAgICAgICAgaW9yZGVyWzBdID0gMDsKLSAgICAgICAgaW9yZGVyWzFdID0gMTsKLSAgICAgICAgaW9yZGVyWzJdID0gMjsKLSAgICAgICAgaW9yZGVyWzNdID0gMzsKLSAgICB9Ci0gICAgZWxzZSBpZiAoYm8gPT0gMSkgewotICAgICAgICAvKiBmb3JjZSBCRSAqLwotICAgICAgICBpb3JkZXJbMF0gPSAzOwotICAgICAgICBpb3JkZXJbMV0gPSAyOwotICAgICAgICBpb3JkZXJbMl0gPSAxOwotICAgICAgICBpb3JkZXJbM10gPSAwOwotICAgIH0KLQotICAgIC8qIFRoaXMgbWlnaHQgYmUgb25lIHRvIG11Y2gsIGJlY2F1c2Ugb2YgYSBCT00gKi8KLSAgICB1bmljb2RlID0gUHlVbmljb2RlX05ldygoc2l6ZSszKS80LCAxMjcpOwotICAgIGlmICghdW5pY29kZSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKHNpemUgPT0gMCkKLSAgICAgICAgcmV0dXJuIHVuaWNvZGU7Ci0gICAgb3V0cG9zID0gMDsKLQotICAgIHdoaWxlIChxIDwgZSkgewotICAgICAgICBQeV9VQ1M0IGNoOwotICAgICAgICAvKiByZW1haW5pbmcgYnl0ZXMgYXQgdGhlIGVuZD8gKHNpemUgc2hvdWxkIGJlIGRpdmlzaWJsZSBieSA0KSAqLwotICAgICAgICBpZiAoZS1xPDQpIHsKLSAgICAgICAgICAgIGlmIChjb25zdW1lZCkKKyAgICAgICAgaWYgKFB5X1VOSUNPREVfSVNfU1VSUk9HQVRFKGNoKSkgeworICAgICAgICAgICAgZXJybXNnID0gImNvZGUgcG9pbnQgaW4gc3Vycm9nYXRlIGNvZGUgcG9pbnQgcmFuZ2UoMHhkODAwLCAweGUwMDApIjsKKyAgICAgICAgICAgIHN0YXJ0aW5wb3MgPSAoKGNvbnN0IGNoYXIgKilxKSAtIHN0YXJ0czsKKyAgICAgICAgICAgIGVuZGlucG9zID0gc3RhcnRpbnBvcyArIDQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoY2ggPD0gbWF4Y2gpIHsKKyAgICAgICAgICAgIGlmIChxID09IGUgfHwgY29uc3VtZWQpCiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAvKiByZW1haW5pbmcgYnl0ZXMgYXQgdGhlIGVuZD8gKHNpemUgc2hvdWxkIGJlIGRpdmlzaWJsZSBieSA0KSAqLwogICAgICAgICAgICAgZXJybXNnID0gInRydW5jYXRlZCBkYXRhIjsKLSAgICAgICAgICAgIHN0YXJ0aW5wb3MgPSAoKGNvbnN0IGNoYXIgKilxKS1zdGFydHM7Ci0gICAgICAgICAgICBlbmRpbnBvcyA9ICgoY29uc3QgY2hhciAqKWUpLXN0YXJ0czsKLSAgICAgICAgICAgIGdvdG8gdXRmMzJFcnJvcjsKLSAgICAgICAgICAgIC8qIFRoZSByZW1haW5pbmcgaW5wdXQgY2hhcnMgYXJlIGlnbm9yZWQgaWYgdGhlIGNhbGxiYWNrCi0gICAgICAgICAgICAgICBjaG9vc2VzIHRvIHNraXAgdGhlIGlucHV0ICovCisgICAgICAgICAgICBzdGFydGlucG9zID0gKChjb25zdCBjaGFyICopcSkgLSBzdGFydHM7CisgICAgICAgICAgICBlbmRpbnBvcyA9ICgoY29uc3QgY2hhciAqKWUpIC0gc3RhcnRzOwogICAgICAgICB9Ci0gICAgICAgIGNoID0gKHFbaW9yZGVyWzNdXSA8PCAyNCkgfCAocVtpb3JkZXJbMl1dIDw8IDE2KSB8Ci0gICAgICAgICAgICAocVtpb3JkZXJbMV1dIDw8IDgpIHwgcVtpb3JkZXJbMF1dOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlmIChjaCA8IDB4MTEwMDAwKSB7CisgICAgICAgICAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVDaGFySW5saW5lKCZ3cml0ZXIsIGNoKSA8IDApCisgICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKKyAgICAgICAgICAgICAgICBxICs9IDQ7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlcnJtc2cgPSAiY29kZSBwb2ludCBub3QgaW4gcmFuZ2UoMHgxMTAwMDApIjsKKyAgICAgICAgICAgIHN0YXJ0aW5wb3MgPSAoKGNvbnN0IGNoYXIgKilxKSAtIHN0YXJ0czsKKyAgICAgICAgICAgIGVuZGlucG9zID0gc3RhcnRpbnBvcyArIDQ7CisgICAgICAgIH0KIAotICAgICAgICBpZiAoY2ggPj0gMHgxMTAwMDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGVycm1zZyA9ICJjb2RlcG9pbnQgbm90IGluIHJhbmdlKDB4MTEwMDAwKSI7Ci0gICAgICAgICAgICBzdGFydGlucG9zID0gKChjb25zdCBjaGFyICopcSktc3RhcnRzOwotICAgICAgICAgICAgZW5kaW5wb3MgPSBzdGFydGlucG9zKzQ7Ci0gICAgICAgICAgICBnb3RvIHV0ZjMyRXJyb3I7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHVuaWNvZGVfcHV0Y2hhcigmdW5pY29kZSwgJm91dHBvcywgY2gpIDwgMCkKLSAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgcSArPSA0OwotICAgICAgICBjb250aW51ZTsKLSAgICAgIHV0ZjMyRXJyb3I6Ci0gICAgICAgIGlmICh1bmljb2RlX2RlY29kZV9jYWxsX2Vycm9yaGFuZGxlcigKKyAgICAgICAgLyogVGhlIHJlbWFpbmluZyBpbnB1dCBjaGFycyBhcmUgaWdub3JlZCBpZiB0aGUgY2FsbGJhY2sKKyAgICAgICAgICAgY2hvb3NlcyB0byBza2lwIHRoZSBpbnB1dCAqLworICAgICAgICBpZiAodW5pY29kZV9kZWNvZGVfY2FsbF9lcnJvcmhhbmRsZXJfd3JpdGVyKAogICAgICAgICAgICAgICAgIGVycm9ycywgJmVycm9ySGFuZGxlciwKLSAgICAgICAgICAgICAgICAidXRmMzIiLCBlcnJtc2csCisgICAgICAgICAgICAgICAgZW5jb2RpbmcsIGVycm1zZywKICAgICAgICAgICAgICAgICAmc3RhcnRzLCAoY29uc3QgY2hhciAqKikmZSwgJnN0YXJ0aW5wb3MsICZlbmRpbnBvcywgJmV4YywgKGNvbnN0IGNoYXIgKiopJnEsCi0gICAgICAgICAgICAgICAgJnVuaWNvZGUsICZvdXRwb3MpKQorICAgICAgICAgICAgICAgICZ3cml0ZXIpKQogICAgICAgICAgICAgZ290byBvbkVycm9yOwogICAgIH0KIAotICAgIGlmIChieXRlb3JkZXIpCi0gICAgICAgICpieXRlb3JkZXIgPSBibzsKLQogICAgIGlmIChjb25zdW1lZCkKICAgICAgICAgKmNvbnN1bWVkID0gKGNvbnN0IGNoYXIgKilxLXN0YXJ0czsKIAotICAgIC8qIEFkanVzdCBsZW5ndGggKi8KLSAgICBpZiAodW5pY29kZV9yZXNpemUoJnVuaWNvZGUsIG91dHBvcykgPCAwKQotICAgICAgICBnb3RvIG9uRXJyb3I7Ci0KICAgICBQeV9YREVDUkVGKGVycm9ySGFuZGxlcik7CiAgICAgUHlfWERFQ1JFRihleGMpOwotICAgIHJldHVybiB1bmljb2RlX3Jlc3VsdCh1bmljb2RlKTsKKyAgICByZXR1cm4gX1B5VW5pY29kZVdyaXRlcl9GaW5pc2goJndyaXRlcik7CiAKICAgb25FcnJvcjoKLSAgICBQeV9ERUNSRUYodW5pY29kZSk7CisgICAgX1B5VW5pY29kZVdyaXRlcl9EZWFsbG9jKCZ3cml0ZXIpOwogICAgIFB5X1hERUNSRUYoZXJyb3JIYW5kbGVyKTsKICAgICBQeV9YREVDUkVGKGV4Yyk7CiAgICAgcmV0dXJuIE5VTEw7CkBAIC01MTM4LDExICs1MTE2LDE1IEBACiAgICAgdW5zaWduZWQgY2hhciAqcDsKICAgICBQeV9zc2l6ZV90IG5zaXplLCBpOwogICAgIC8qIE9mZnNldHMgZnJvbSBwIGZvciBzdG9yaW5nIGJ5dGUgcGFpcnMgaW4gdGhlIHJpZ2h0IG9yZGVyLiAqLwotI2lmZGVmIEJZVEVPUkRFUl9JU19MSVRUTEVfRU5ESUFOCisjaWYgUFlfTElUVExFX0VORElBTgogICAgIGludCBpb3JkZXJbXSA9IHswLCAxLCAyLCAzfTsKICNlbHNlCiAgICAgaW50IGlvcmRlcltdID0gezMsIDIsIDEsIDB9OwogI2VuZGlmCisgICAgY29uc3QgY2hhciAqZW5jb2Rpbmc7CisgICAgUHlPYmplY3QgKmVycm9ySGFuZGxlciA9IE5VTEw7CisgICAgUHlPYmplY3QgKmV4YyA9IE5VTEw7CisgICAgUHlPYmplY3QgKnJlcCA9IE5VTEw7CiAKICNkZWZpbmUgU1RPUkVDSEFSKENIKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTUxNzQsNyArNTE1Niw3IEBACiAgICAgaWYgKGJ5dGVvcmRlciA9PSAwKQogICAgICAgICBTVE9SRUNIQVIoMHhGRUZGKTsKICAgICBpZiAobGVuID09IDApCi0gICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAgcmV0dXJuIHY7CiAKICAgICBpZiAoYnl0ZW9yZGVyID09IC0xKSB7CiAgICAgICAgIC8qIGZvcmNlIExFICovCkBAIC01MTgyLDYgKzUxNjQsNyBAQAogICAgICAgICBpb3JkZXJbMV0gPSAxOwogICAgICAgICBpb3JkZXJbMl0gPSAyOwogICAgICAgICBpb3JkZXJbM10gPSAzOworICAgICAgICBlbmNvZGluZyA9ICJ1dGYtMzItbGUiOwogICAgIH0KICAgICBlbHNlIGlmIChieXRlb3JkZXIgPT0gMSkgewogICAgICAgICAvKiBmb3JjZSBCRSAqLwpAQCAtNTE4OSwxMyArNTE3MiwxMDMgQEAKICAgICAgICAgaW9yZGVyWzFdID0gMjsKICAgICAgICAgaW9yZGVyWzJdID0gMTsKICAgICAgICAgaW9yZGVyWzNdID0gMDsKKyAgICAgICAgZW5jb2RpbmcgPSAidXRmLTMyLWJlIjsKKyAgICB9CisgICAgZWxzZQorICAgICAgICBlbmNvZGluZyA9ICJ1dGYtMzIiOworCisgICAgaWYgKGtpbmQgPT0gUHlVbmljb2RlXzFCWVRFX0tJTkQpIHsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQorICAgICAgICAgICAgU1RPUkVDSEFSKFB5VW5pY29kZV9SRUFEKGtpbmQsIGRhdGEsIGkpKTsKKyAgICAgICAgcmV0dXJuIHY7CiAgICAgfQogCi0gICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQotICAgICAgICBTVE9SRUNIQVIoUHlVbmljb2RlX1JFQUQoa2luZCwgZGF0YSwgaSkpOworICAgIGZvciAoaSA9IDA7IGkgPCBsZW47KSB7CisgICAgICAgIFB5X3NzaXplX3QgcmVwc2l6ZSwgbW9yZXVuaXRzOworICAgICAgICBQeV9VQ1M0IGNoID0gUHlVbmljb2RlX1JFQUQoa2luZCwgZGF0YSwgaSk7CisgICAgICAgIGkrKzsKKyAgICAgICAgYXNzZXJ0KGNoIDw9IE1BWF9VTklDT0RFKTsKKyAgICAgICAgaWYgKCFQeV9VTklDT0RFX0lTX1NVUlJPR0FURShjaCkpIHsKKyAgICAgICAgICAgIFNUT1JFQ0hBUihjaCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQogCi0gIGRvbmU6CisgICAgICAgIHJlcCA9IHVuaWNvZGVfZW5jb2RlX2NhbGxfZXJyb3JoYW5kbGVyKAorICAgICAgICAgICAgICAgIGVycm9ycywgJmVycm9ySGFuZGxlciwKKyAgICAgICAgICAgICAgICBlbmNvZGluZywgInN1cnJvZ2F0ZXMgbm90IGFsbG93ZWQiLAorICAgICAgICAgICAgICAgIHN0ciwgJmV4YywgaS0xLCBpLCAmaSk7CisKKyAgICAgICAgaWYgKCFyZXApCisgICAgICAgICAgICBnb3RvIGVycm9yOworCisgICAgICAgIGlmIChQeUJ5dGVzX0NoZWNrKHJlcCkpIHsKKyAgICAgICAgICAgIHJlcHNpemUgPSBQeUJ5dGVzX0dFVF9TSVpFKHJlcCk7CisgICAgICAgICAgICBpZiAocmVwc2l6ZSAmIDMpIHsKKyAgICAgICAgICAgICAgICByYWlzZV9lbmNvZGVfZXhjZXB0aW9uKCZleGMsIGVuY29kaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyLCBpIC0gMSwgaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdXJyb2dhdGVzIG5vdCBhbGxvd2VkIik7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1vcmV1bml0cyA9IHJlcHNpemUgLyA0OworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgYXNzZXJ0KFB5VW5pY29kZV9DaGVjayhyZXApKTsKKyAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfUkVBRFkocmVwKSA8IDApCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIG1vcmV1bml0cyA9IHJlcHNpemUgPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChyZXApOworICAgICAgICAgICAgaWYgKCFQeVVuaWNvZGVfSVNfQVNDSUkocmVwKSkgeworICAgICAgICAgICAgICAgIHJhaXNlX2VuY29kZV9leGNlcHRpb24oJmV4YywgZW5jb2RpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIsIGkgLSAxLCBpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1cnJvZ2F0ZXMgbm90IGFsbG93ZWQiKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLyogZm91ciBieXRlcyBhcmUgcmVzZXJ2ZWQgZm9yIGVhY2ggc3Vycm9nYXRlICovCisgICAgICAgIGlmIChtb3JldW5pdHMgPiAxKSB7CisgICAgICAgICAgICBQeV9zc2l6ZV90IG91dHBvcyA9IHAgLSAodW5zaWduZWQgY2hhciopIFB5Qnl0ZXNfQVNfU1RSSU5HKHYpOworICAgICAgICAgICAgUHlfc3NpemVfdCBtb3JlYnl0ZXMgPSA0ICogKG1vcmV1bml0cyAtIDEpOworICAgICAgICAgICAgaWYgKFB5Qnl0ZXNfR0VUX1NJWkUodikgPiBQWV9TU0laRV9UX01BWCAtIG1vcmVieXRlcykgeworICAgICAgICAgICAgICAgIC8qIGludGVnZXIgb3ZlcmZsb3cgKi8KKyAgICAgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZ2LCBQeUJ5dGVzX0dFVF9TSVpFKHYpICsgbW9yZWJ5dGVzKSA8IDApCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIHAgPSAodW5zaWduZWQgY2hhciopIFB5Qnl0ZXNfQVNfU1RSSU5HKHYpICsgb3V0cG9zOworICAgICAgICB9CisKKyAgICAgICAgaWYgKFB5Qnl0ZXNfQ2hlY2socmVwKSkgeworICAgICAgICAgICAgUHlfTUVNQ1BZKHAsIFB5Qnl0ZXNfQVNfU1RSSU5HKHJlcCksIHJlcHNpemUpOworICAgICAgICAgICAgcCArPSByZXBzaXplOworICAgICAgICB9IGVsc2UgLyogcmVwIGlzIHVuaWNvZGUgKi8geworICAgICAgICAgICAgY29uc3QgUHlfVUNTMSAqcmVwZGF0YTsKKyAgICAgICAgICAgIGFzc2VydChQeVVuaWNvZGVfS0lORChyZXApID09IFB5VW5pY29kZV8xQllURV9LSU5EKTsKKyAgICAgICAgICAgIHJlcGRhdGEgPSBQeVVuaWNvZGVfMUJZVEVfREFUQShyZXApOworICAgICAgICAgICAgd2hpbGUgKHJlcHNpemUtLSkgeworICAgICAgICAgICAgICAgIFB5X1VDUzQgY2ggPSAqcmVwZGF0YSsrOworICAgICAgICAgICAgICAgIFNUT1JFQ0hBUihjaCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBQeV9DTEVBUihyZXApOworICAgIH0KKworICAgIC8qIEN1dCBiYWNrIHRvIHNpemUgYWN0dWFsbHkgbmVlZGVkLiBUaGlzIGlzIG5lY2Vzc2FyeSBmb3IsIGZvciBleGFtcGxlLAorICAgICAgIGVuY29kaW5nIG9mIGEgc3RyaW5nIGNvbnRhaW5pbmcgaXNvbGF0ZWQgc3Vycm9nYXRlcyBhbmQgdGhlICdpZ25vcmUnCisgICAgICAgaGFuZGxlciBpcyB1c2VkLiAqLworICAgIG5zaXplID0gcCAtICh1bnNpZ25lZCBjaGFyKikgUHlCeXRlc19BU19TVFJJTkcodik7CisgICAgaWYgKG5zaXplICE9IFB5Qnl0ZXNfR0VUX1NJWkUodikpCisgICAgICBfUHlCeXRlc19SZXNpemUoJnYsIG5zaXplKTsKKyAgICBQeV9YREVDUkVGKGVycm9ySGFuZGxlcik7CisgICAgUHlfWERFQ1JFRihleGMpOwogICAgIHJldHVybiB2OworICBlcnJvcjoKKyAgICBQeV9YREVDUkVGKHJlcCk7CisgICAgUHlfWERFQ1JFRihlcnJvckhhbmRsZXIpOworICAgIFB5X1hERUNSRUYoZXhjKTsKKyAgICBQeV9YREVDUkVGKHYpOworICAgIHJldHVybiBOVUxMOwogI3VuZGVmIFNUT1JFQ0hBUgogfQogCkBAIC01MjQxLDE0ICs1MzE0LDE0IEBACiAgICAgY29uc3QgY2hhciAqc3RhcnRzID0gczsKICAgICBQeV9zc2l6ZV90IHN0YXJ0aW5wb3M7CiAgICAgUHlfc3NpemVfdCBlbmRpbnBvczsKLSAgICBQeV9zc2l6ZV90IG91dHBvczsKLSAgICBQeU9iamVjdCAqdW5pY29kZTsKKyAgICBfUHlVbmljb2RlV3JpdGVyIHdyaXRlcjsKICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpxLCAqZTsKICAgICBpbnQgYm8gPSAwOyAgICAgICAvKiBhc3N1bWUgbmF0aXZlIG9yZGVyaW5nIGJ5IGRlZmF1bHQgKi8KICAgICBpbnQgbmF0aXZlX29yZGVyaW5nOwogICAgIGNvbnN0IGNoYXIgKmVycm1zZyA9ICIiOwogICAgIFB5T2JqZWN0ICplcnJvckhhbmRsZXIgPSBOVUxMOwogICAgIFB5T2JqZWN0ICpleGMgPSBOVUxMOworICAgIGNvbnN0IGNoYXIgKmVuY29kaW5nOwogCiAgICAgcSA9ICh1bnNpZ25lZCBjaGFyICopczsKICAgICBlID0gcSArIHNpemU7CkBAIC01MjgwLDQwICs1MzUzLDQyIEBACiAgICAgICAgIF9QeV9SRVRVUk5fVU5JQ09ERV9FTVBUWSgpOwogICAgIH0KIAotI2lmZGVmIEJZVEVPUkRFUl9JU19MSVRUTEVfRU5ESUFOCisjaWYgUFlfTElUVExFX0VORElBTgogICAgIG5hdGl2ZV9vcmRlcmluZyA9IGJvIDw9IDA7CisgICAgZW5jb2RpbmcgPSBibyA8PSAwID8gInV0Zi0xNi1sZSIgOiAidXRmLTE2LWJlIjsKICNlbHNlCiAgICAgbmF0aXZlX29yZGVyaW5nID0gYm8gPj0gMDsKKyAgICBlbmNvZGluZyA9IGJvID49IDAgPyAidXRmLTE2LWJlIiA6ICJ1dGYtMTYtbGUiOwogI2VuZGlmCiAKICAgICAvKiBOb3RlOiBzaXplIHdpbGwgYWx3YXlzIGJlIGxvbmdlciB0aGFuIHRoZSByZXN1bHRpbmcgVW5pY29kZQogICAgICAgIGNoYXJhY3RlciBjb3VudCAqLwotICAgIHVuaWNvZGUgPSBQeVVuaWNvZGVfTmV3KChlIC0gcSArIDEpIC8gMiwgMTI3KTsKLSAgICBpZiAoIXVuaWNvZGUpCi0gICAgICAgIHJldHVybiBOVUxMOworICAgIF9QeVVuaWNvZGVXcml0ZXJfSW5pdCgmd3JpdGVyKTsKKyAgICB3cml0ZXIubWluX2xlbmd0aCA9IChlIC0gcSArIDEpIC8gMjsKKyAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9QcmVwYXJlKCZ3cml0ZXIsIHdyaXRlci5taW5fbGVuZ3RoLCAxMjcpID09IC0xKQorICAgICAgICBnb3RvIG9uRXJyb3I7CiAKLSAgICBvdXRwb3MgPSAwOwogICAgIHdoaWxlICgxKSB7CiAgICAgICAgIFB5X1VDUzQgY2ggPSAwOwogICAgICAgICBpZiAoZSAtIHEgPj0gMikgewotICAgICAgICAgICAgaW50IGtpbmQgPSBQeVVuaWNvZGVfS0lORCh1bmljb2RlKTsKKyAgICAgICAgICAgIGludCBraW5kID0gd3JpdGVyLmtpbmQ7CiAgICAgICAgICAgICBpZiAoa2luZCA9PSBQeVVuaWNvZGVfMUJZVEVfS0lORCkgewotICAgICAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfSVNfQVNDSUkodW5pY29kZSkpCisgICAgICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9JU19BU0NJSSh3cml0ZXIuYnVmZmVyKSkKICAgICAgICAgICAgICAgICAgICAgY2ggPSBhc2NpaWxpYl91dGYxNl9kZWNvZGUoJnEsIGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlXzFCWVRFX0RBVEEodW5pY29kZSksICZvdXRwb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFB5X1VDUzEqKXdyaXRlci5kYXRhLCAmd3JpdGVyLnBvcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVfb3JkZXJpbmcpOwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgY2ggPSB1Y3MxbGliX3V0ZjE2X2RlY29kZSgmcSwgZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfMUJZVEVfREFUQSh1bmljb2RlKSwgJm91dHBvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUHlfVUNTMSopd3JpdGVyLmRhdGEsICZ3cml0ZXIucG9zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZV9vcmRlcmluZyk7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKGtpbmQgPT0gUHlVbmljb2RlXzJCWVRFX0tJTkQpIHsKICAgICAgICAgICAgICAgICBjaCA9IHVjczJsaWJfdXRmMTZfZGVjb2RlKCZxLCBlLAotICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlXzJCWVRFX0RBVEEodW5pY29kZSksICZvdXRwb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAoUHlfVUNTMiopd3JpdGVyLmRhdGEsICZ3cml0ZXIucG9zLAogICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlX29yZGVyaW5nKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgYXNzZXJ0KGtpbmQgPT0gUHlVbmljb2RlXzRCWVRFX0tJTkQpOwogICAgICAgICAgICAgICAgIGNoID0gdWNzNGxpYl91dGYxNl9kZWNvZGUoJnEsIGUsCi0gICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfNEJZVEVfREFUQSh1bmljb2RlKSwgJm91dHBvcywKKyAgICAgICAgICAgICAgICAgICAgICAgIChQeV9VQ1M0Kil3cml0ZXIuZGF0YSwgJndyaXRlci5wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVfb3JkZXJpbmcpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC01MzQ5LDIzICs1NDI0LDIyIEBACiAgICAgICAgICAgICBlbmRpbnBvcyA9IHN0YXJ0aW5wb3MgKyAyOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBpZiAodW5pY29kZV9wdXRjaGFyKCZ1bmljb2RlLCAmb3V0cG9zLCBjaCkgPCAwKQorICAgICAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVDaGFySW5saW5lKCZ3cml0ZXIsIGNoKSA8IDApCiAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAodW5pY29kZV9kZWNvZGVfY2FsbF9lcnJvcmhhbmRsZXIoCisgICAgICAgIGlmICh1bmljb2RlX2RlY29kZV9jYWxsX2Vycm9yaGFuZGxlcl93cml0ZXIoCiAgICAgICAgICAgICAgICAgZXJyb3JzLAogICAgICAgICAgICAgICAgICZlcnJvckhhbmRsZXIsCi0gICAgICAgICAgICAgICAgInV0ZjE2IiwgZXJybXNnLAorICAgICAgICAgICAgICAgIGVuY29kaW5nLCBlcnJtc2csCiAgICAgICAgICAgICAgICAgJnN0YXJ0cywKICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqKikmZSwKICAgICAgICAgICAgICAgICAmc3RhcnRpbnBvcywKICAgICAgICAgICAgICAgICAmZW5kaW5wb3MsCiAgICAgICAgICAgICAgICAgJmV4YywKICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqKikmcSwKLSAgICAgICAgICAgICAgICAmdW5pY29kZSwKLSAgICAgICAgICAgICAgICAmb3V0cG9zKSkKKyAgICAgICAgICAgICAgICAmd3JpdGVyKSkKICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKICAgICB9CiAKQEAgLTUzNzMsMTYgKzU0NDcsMTIgQEAKICAgICBpZiAoY29uc3VtZWQpCiAgICAgICAgICpjb25zdW1lZCA9IChjb25zdCBjaGFyICopcS1zdGFydHM7CiAKLSAgICAvKiBBZGp1c3QgbGVuZ3RoICovCi0gICAgaWYgKHVuaWNvZGVfcmVzaXplKCZ1bmljb2RlLCBvdXRwb3MpIDwgMCkKLSAgICAgICAgZ290byBvbkVycm9yOwotCiAgICAgUHlfWERFQ1JFRihlcnJvckhhbmRsZXIpOwogICAgIFB5X1hERUNSRUYoZXhjKTsKLSAgICByZXR1cm4gdW5pY29kZV9yZXN1bHQodW5pY29kZSk7CisgICAgcmV0dXJuIF9QeVVuaWNvZGVXcml0ZXJfRmluaXNoKCZ3cml0ZXIpOwogCiAgIG9uRXJyb3I6Ci0gICAgUHlfREVDUkVGKHVuaWNvZGUpOworICAgIF9QeVVuaWNvZGVXcml0ZXJfRGVhbGxvYygmd3JpdGVyKTsKICAgICBQeV9YREVDUkVGKGVycm9ySGFuZGxlcik7CiAgICAgUHlfWERFQ1JFRihleGMpOwogICAgIHJldHVybiBOVUxMOwpAQCAtNTM5OCwxMyArNTQ2OCwxNyBAQAogICAgIFB5X3NzaXplX3QgbGVuOwogICAgIFB5T2JqZWN0ICp2OwogICAgIHVuc2lnbmVkIHNob3J0ICpvdXQ7Ci0gICAgUHlfc3NpemVfdCBieXRlc2l6ZTsKICAgICBQeV9zc2l6ZV90IHBhaXJzOwotI2lmZGVmIFdPUkRTX0JJR0VORElBTgorI2lmIFBZX0JJR19FTkRJQU4KICAgICBpbnQgbmF0aXZlX29yZGVyaW5nID0gYnl0ZW9yZGVyID49IDA7CiAjZWxzZQogICAgIGludCBuYXRpdmVfb3JkZXJpbmcgPSBieXRlb3JkZXIgPD0gMDsKICNlbmRpZgorICAgIGNvbnN0IGNoYXIgKmVuY29kaW5nOworICAgIFB5X3NzaXplX3QgbnNpemUsIHBvczsKKyAgICBQeU9iamVjdCAqZXJyb3JIYW5kbGVyID0gTlVMTDsKKyAgICBQeU9iamVjdCAqZXhjID0gTlVMTDsKKyAgICBQeU9iamVjdCAqcmVwID0gTlVMTDsKIAogICAgIGlmICghUHlVbmljb2RlX0NoZWNrKHN0cikpIHsKICAgICAgICAgUHlFcnJfQmFkQXJndW1lbnQoKTsKQEAgLTU0MjYsOCArNTUwMCw4IEBACiAgICAgfQogICAgIGlmIChsZW4gPiBQWV9TU0laRV9UX01BWCAvIDIgLSBwYWlycyAtIChieXRlb3JkZXIgPT0gMCkpCiAgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOwotICAgIGJ5dGVzaXplID0gKGxlbiArIHBhaXJzICsgKGJ5dGVvcmRlciA9PSAwKSkgKiAyOwotICAgIHYgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGJ5dGVzaXplKTsKKyAgICBuc2l6ZSA9IGxlbiArIHBhaXJzICsgKGJ5dGVvcmRlciA9PSAwKTsKKyAgICB2ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBuc2l6ZSAqIDIpOwogICAgIGlmICh2ID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCkBAIC01NDM5LDI1ICs1NTEzLDEwNyBAQAogICAgIGlmIChsZW4gPT0gMCkKICAgICAgICAgZ290byBkb25lOwogCi0gICAgc3dpdGNoIChraW5kKSB7Ci0gICAgY2FzZSBQeVVuaWNvZGVfMUJZVEVfS0lORDogewotICAgICAgICB1Y3MxbGliX3V0ZjE2X2VuY29kZShvdXQsIChjb25zdCBQeV9VQ1MxICopZGF0YSwgbGVuLCBuYXRpdmVfb3JkZXJpbmcpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQeVVuaWNvZGVfMkJZVEVfS0lORDogewotICAgICAgICB1Y3MybGliX3V0ZjE2X2VuY29kZShvdXQsIChjb25zdCBQeV9VQ1MyICopZGF0YSwgbGVuLCBuYXRpdmVfb3JkZXJpbmcpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQeVVuaWNvZGVfNEJZVEVfS0lORDogewotICAgICAgICB1Y3M0bGliX3V0ZjE2X2VuY29kZShvdXQsIChjb25zdCBQeV9VQ1M0ICopZGF0YSwgbGVuLCBuYXRpdmVfb3JkZXJpbmcpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYXNzZXJ0KDApOworICAgIGlmIChraW5kID09IFB5VW5pY29kZV8xQllURV9LSU5EKSB7CisgICAgICAgIHVjczFsaWJfdXRmMTZfZW5jb2RlKChjb25zdCBQeV9VQ1MxICopZGF0YSwgbGVuLCAmb3V0LCBuYXRpdmVfb3JkZXJpbmcpOworICAgICAgICBnb3RvIGRvbmU7CiAgICAgfQogCisgICAgaWYgKGJ5dGVvcmRlciA8IDApCisgICAgICAgIGVuY29kaW5nID0gInV0Zi0xNi1sZSI7CisgICAgZWxzZSBpZiAoYnl0ZW9yZGVyID4gMCkKKyAgICAgICAgZW5jb2RpbmcgPSAidXRmLTE2LWJlIjsKKyAgICBlbHNlCisgICAgICAgIGVuY29kaW5nID0gInV0Zi0xNiI7CisKKyAgICBwb3MgPSAwOworICAgIHdoaWxlIChwb3MgPCBsZW4pIHsKKyAgICAgICAgUHlfc3NpemVfdCByZXBzaXplLCBtb3JldW5pdHM7CisKKyAgICAgICAgaWYgKGtpbmQgPT0gUHlVbmljb2RlXzJCWVRFX0tJTkQpIHsKKyAgICAgICAgICAgIHBvcyArPSB1Y3MybGliX3V0ZjE2X2VuY29kZSgoY29uc3QgUHlfVUNTMiAqKWRhdGEgKyBwb3MsIGxlbiAtIHBvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb3V0LCBuYXRpdmVfb3JkZXJpbmcpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgYXNzZXJ0KGtpbmQgPT0gUHlVbmljb2RlXzRCWVRFX0tJTkQpOworICAgICAgICAgICAgcG9zICs9IHVjczRsaWJfdXRmMTZfZW5jb2RlKChjb25zdCBQeV9VQ1M0ICopZGF0YSArIHBvcywgbGVuIC0gcG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvdXQsIG5hdGl2ZV9vcmRlcmluZyk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHBvcyA9PSBsZW4pCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICByZXAgPSB1bmljb2RlX2VuY29kZV9jYWxsX2Vycm9yaGFuZGxlcigKKyAgICAgICAgICAgICAgICBlcnJvcnMsICZlcnJvckhhbmRsZXIsCisgICAgICAgICAgICAgICAgZW5jb2RpbmcsICJzdXJyb2dhdGVzIG5vdCBhbGxvd2VkIiwKKyAgICAgICAgICAgICAgICBzdHIsICZleGMsIHBvcywgcG9zICsgMSwgJnBvcyk7CisgICAgICAgIGlmICghcmVwKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKworICAgICAgICBpZiAoUHlCeXRlc19DaGVjayhyZXApKSB7CisgICAgICAgICAgICByZXBzaXplID0gUHlCeXRlc19HRVRfU0laRShyZXApOworICAgICAgICAgICAgaWYgKHJlcHNpemUgJiAxKSB7CisgICAgICAgICAgICAgICAgcmFpc2VfZW5jb2RlX2V4Y2VwdGlvbigmZXhjLCBlbmNvZGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciwgcG9zIC0gMSwgcG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1cnJvZ2F0ZXMgbm90IGFsbG93ZWQiKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbW9yZXVuaXRzID0gcmVwc2l6ZSAvIDI7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBhc3NlcnQoUHlVbmljb2RlX0NoZWNrKHJlcCkpOworICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9SRUFEWShyZXApIDwgMCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgbW9yZXVuaXRzID0gcmVwc2l6ZSA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHJlcCk7CisgICAgICAgICAgICBpZiAoIVB5VW5pY29kZV9JU19BU0NJSShyZXApKSB7CisgICAgICAgICAgICAgICAgcmFpc2VfZW5jb2RlX2V4Y2VwdGlvbigmZXhjLCBlbmNvZGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciwgcG9zIC0gMSwgcG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1cnJvZ2F0ZXMgbm90IGFsbG93ZWQiKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLyogdHdvIGJ5dGVzIGFyZSByZXNlcnZlZCBmb3IgZWFjaCBzdXJyb2dhdGUgKi8KKyAgICAgICAgaWYgKG1vcmV1bml0cyA+IDEpIHsKKyAgICAgICAgICAgIFB5X3NzaXplX3Qgb3V0cG9zID0gb3V0IC0gKHVuc2lnbmVkIHNob3J0KikgUHlCeXRlc19BU19TVFJJTkcodik7CisgICAgICAgICAgICBQeV9zc2l6ZV90IG1vcmVieXRlcyA9IDIgKiAobW9yZXVuaXRzIC0gMSk7CisgICAgICAgICAgICBpZiAoUHlCeXRlc19HRVRfU0laRSh2KSA+IFBZX1NTSVpFX1RfTUFYIC0gbW9yZWJ5dGVzKSB7CisgICAgICAgICAgICAgICAgLyogaW50ZWdlciBvdmVyZmxvdyAqLworICAgICAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChfUHlCeXRlc19SZXNpemUoJnYsIFB5Qnl0ZXNfR0VUX1NJWkUodikgKyBtb3JlYnl0ZXMpIDwgMCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgb3V0ID0gKHVuc2lnbmVkIHNob3J0KikgUHlCeXRlc19BU19TVFJJTkcodikgKyBvdXRwb3M7CisgICAgICAgIH0KKworICAgICAgICBpZiAoUHlCeXRlc19DaGVjayhyZXApKSB7CisgICAgICAgICAgICBQeV9NRU1DUFkob3V0LCBQeUJ5dGVzX0FTX1NUUklORyhyZXApLCByZXBzaXplKTsKKyAgICAgICAgICAgIG91dCArPSBtb3JldW5pdHM7CisgICAgICAgIH0gZWxzZSAvKiByZXAgaXMgdW5pY29kZSAqLyB7CisgICAgICAgICAgICBhc3NlcnQoUHlVbmljb2RlX0tJTkQocmVwKSA9PSBQeVVuaWNvZGVfMUJZVEVfS0lORCk7CisgICAgICAgICAgICB1Y3MxbGliX3V0ZjE2X2VuY29kZShQeVVuaWNvZGVfMUJZVEVfREFUQShyZXApLCByZXBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm91dCwgbmF0aXZlX29yZGVyaW5nKTsKKyAgICAgICAgfQorCisgICAgICAgIFB5X0NMRUFSKHJlcCk7CisgICAgfQorCisgICAgLyogQ3V0IGJhY2sgdG8gc2l6ZSBhY3R1YWxseSBuZWVkZWQuIFRoaXMgaXMgbmVjZXNzYXJ5IGZvciwgZm9yIGV4YW1wbGUsCisgICAgZW5jb2Rpbmcgb2YgYSBzdHJpbmcgY29udGFpbmluZyBpc29sYXRlZCBzdXJyb2dhdGVzIGFuZCB0aGUgJ2lnbm9yZScgaGFuZGxlcgorICAgIGlzIHVzZWQuICovCisgICAgbnNpemUgPSAodW5zaWduZWQgY2hhciopIG91dCAtICh1bnNpZ25lZCBjaGFyKikgUHlCeXRlc19BU19TVFJJTkcodik7CisgICAgaWYgKG5zaXplICE9IFB5Qnl0ZXNfR0VUX1NJWkUodikpCisgICAgICBfUHlCeXRlc19SZXNpemUoJnYsIG5zaXplKTsKKyAgICBQeV9YREVDUkVGKGVycm9ySGFuZGxlcik7CisgICAgUHlfWERFQ1JFRihleGMpOwogICBkb25lOgogICAgIHJldHVybiB2OworICBlcnJvcjoKKyAgICBQeV9YREVDUkVGKHJlcCk7CisgICAgUHlfWERFQ1JFRihlcnJvckhhbmRsZXIpOworICAgIFB5X1hERUNSRUYoZXhjKTsKKyAgICBQeV9YREVDUkVGKHYpOworICAgIHJldHVybiBOVUxMOworI3VuZGVmIFNUT1JFQ0hBUgogfQogCiBQeU9iamVjdCAqCkBAIC01NTQ4LDI3ICs1NzA0LDI2IEBACiAgICAgY29uc3QgY2hhciAqc3RhcnRzID0gczsKICAgICBQeV9zc2l6ZV90IHN0YXJ0aW5wb3M7CiAgICAgUHlfc3NpemVfdCBlbmRpbnBvczsKLSAgICBQeU9iamVjdCAqdjsKKyAgICBfUHlVbmljb2RlV3JpdGVyIHdyaXRlcjsKICAgICBjb25zdCBjaGFyICplbmQ7CiAgICAgY2hhciogbWVzc2FnZTsKICAgICBQeV9VQ1M0IGNociA9IDB4ZmZmZmZmZmY7IC8qIGluIGNhc2UgJ2dldGNvZGUnIG1lc3NlcyB1cCAqLwogICAgIFB5T2JqZWN0ICplcnJvckhhbmRsZXIgPSBOVUxMOwogICAgIFB5T2JqZWN0ICpleGMgPSBOVUxMOwogICAgIFB5X3NzaXplX3QgbGVuOwotICAgIFB5X3NzaXplX3QgaTsKIAogICAgIGxlbiA9IGxlbmd0aF9vZl9lc2NhcGVkX2FzY2lpX3N0cmluZyhzLCBzaXplKTsKKyAgICBpZiAobGVuID09IDApCisgICAgICAgIF9QeV9SRVRVUk5fVU5JQ09ERV9FTVBUWSgpOwogCiAgICAgLyogQWZ0ZXIgbGVuZ3RoX29mX2VzY2FwZWRfYXNjaWlfc3RyaW5nKCkgdGhlcmUgYXJlIHR3byBhbHRlcm5hdGl2ZXMsCiAgICAgICAgZWl0aGVyIHRoZSBzdHJpbmcgaXMgcHVyZSBBU0NJSSB3aXRoIG5hbWVkIGVzY2FwZXMgbGlrZSBcbiwgZXRjLgogICAgICAgIGFuZCB3ZSBkZXRlcm1pbmVkIGl0J3MgZXhhY3Qgc2l6ZSAoY29tbW9uIGNhc2UpCiAgICAgICAgb3IgaXQgY29udGFpbnMgXHgsIFx1LCAuLi4gZXNjYXBlIHNlcXVlbmNlcy4gIHRoZW4gd2UgY3JlYXRlIGEKICAgICAgICBsZWdhY3kgd2NoYXIgc3RyaW5nIGFuZCByZXNpemUgaXQgYXQgdGhlIGVuZCBvZiB0aGlzIGZ1bmN0aW9uLiAqLwotICAgIGlmIChsZW4gPj0gMCkgewotICAgICAgICB2ID0gUHlVbmljb2RlX05ldyhsZW4sIDEyNyk7Ci0gICAgICAgIGlmICghdikKLSAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgYXNzZXJ0KFB5VW5pY29kZV9LSU5EKHYpID09IFB5VW5pY29kZV8xQllURV9LSU5EKTsKKyAgICBfUHlVbmljb2RlV3JpdGVyX0luaXQoJndyaXRlcik7CisgICAgaWYgKGxlbiA+IDApIHsKKyAgICAgICAgd3JpdGVyLm1pbl9sZW5ndGggPSBsZW47CiAgICAgfQogICAgIGVsc2UgewogICAgICAgICAvKiBFc2NhcGVkIHN0cmluZ3Mgd2lsbCBhbHdheXMgYmUgbG9uZ2VyIHRoYW4gdGhlIHJlc3VsdGluZwpAQCAtNTU3NiwxNSArNTczMSwxMSBAQAogICAgICAgICAgICBsZW5ndGggYWZ0ZXIgY29udmVyc2lvbiB0byB0aGUgdHJ1ZSB2YWx1ZS4KICAgICAgICAgICAgKGJ1dCBpZiB0aGUgZXJyb3IgY2FsbGJhY2sgcmV0dXJucyBhIGxvbmcgcmVwbGFjZW1lbnQgc3RyaW5nCiAgICAgICAgICAgIHdlJ2xsIGhhdmUgdG8gYWxsb2NhdGUgbW9yZSBzcGFjZSkgKi8KLSAgICAgICAgdiA9IFB5VW5pY29kZV9OZXcoc2l6ZSwgMTI3KTsKLSAgICAgICAgaWYgKCF2KQotICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICBsZW4gPSBzaXplOworICAgICAgICB3cml0ZXIubWluX2xlbmd0aCA9IHNpemU7CiAgICAgfQogCiAgICAgaWYgKHNpemUgPT0gMCkKLSAgICAgICAgcmV0dXJuIHY7Ci0gICAgaSA9IDA7CisgICAgICAgIHJldHVybiBfUHlVbmljb2RlV3JpdGVyX0ZpbmlzaCgmd3JpdGVyKTsKICAgICBlbmQgPSBzICsgc2l6ZTsKIAogICAgIHdoaWxlIChzIDwgZW5kKSB7CkBAIC01NTkyLDEzICs1NzQzLDExIEBACiAgICAgICAgIFB5X1VDUzQgeDsKICAgICAgICAgaW50IGRpZ2l0czsKIAotICAgICAgICAvKiBUaGUgb25seSBjYXNlIGluIHdoaWNoIGkgPT0gYXNjaWlfbGVuZ3RoIGlzIGEgYmFja3NsYXNoCi0gICAgICAgICAgIGZvbGxvd2VkIGJ5IGEgbmV3bGluZS4gKi8KLSAgICAgICAgYXNzZXJ0KGkgPD0gbGVuKTsKLQogICAgICAgICAvKiBOb24tZXNjYXBlIGNoYXJhY3RlcnMgYXJlIGludGVycHJldGVkIGFzIFVuaWNvZGUgb3JkaW5hbHMgKi8KICAgICAgICAgaWYgKCpzICE9ICdcXCcpIHsKLSAgICAgICAgICAgIGlmICh1bmljb2RlX3B1dGNoYXIoJnYsICZpLCAodW5zaWduZWQgY2hhcikgKnMrKykgPCAwKQorICAgICAgICAgICAgeCA9ICh1bnNpZ25lZCBjaGFyKSpzOworICAgICAgICAgICAgcysrOworICAgICAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVDaGFySW5saW5lKCZ3cml0ZXIsIHgpIDwgMCkKICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQpAQCAtNTYxMCwxOCArNTc1OSwxNCBAQAogICAgICAgICBpZiAocyA+IGVuZCkKICAgICAgICAgICAgIGMgPSAnXDAnOyAvKiBJbnZhbGlkIGFmdGVyIFwgKi8KIAotICAgICAgICAvKiBUaGUgb25seSBjYXNlIGluIHdoaWNoIGkgPT0gYXNjaWlfbGVuZ3RoIGlzIGEgYmFja3NsYXNoCi0gICAgICAgICAgIGZvbGxvd2VkIGJ5IGEgbmV3bGluZS4gKi8KLSAgICAgICAgYXNzZXJ0KGkgPCBsZW4gfHwgKGkgPT0gbGVuICYmIGMgPT0gJ1xuJykpOwotCiAgICAgICAgIHN3aXRjaCAoYykgewogCiAgICAgICAgICAgICAvKiBceCBlc2NhcGVzICovCi0jZGVmaW5lIFdSSVRFQ0hBUihjaCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIGlmICh1bmljb2RlX3B1dGNoYXIoJnYsICZpLCBjaCkgPCAwKSAgICBcCi0gICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIH13aGlsZSgwKQorI2RlZmluZSBXUklURUNIQVIoY2gpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcklubGluZSgmd3JpdGVyLCAoY2gpKSA8IDApICAgIFwKKyAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIH0gd2hpbGUoMCkKIAogICAgICAgICBjYXNlICdcbic6IGJyZWFrOwogICAgICAgICBjYXNlICdcXCc6IFdSSVRFQ0hBUignXFwnKTsgYnJlYWs7CkBAIC01NzQ1LDM1ICs1ODkwLDMyIEBACiAKICAgICAgIGVycm9yOgogICAgICAgICBlbmRpbnBvcyA9IHMtc3RhcnRzOwotICAgICAgICBpZiAodW5pY29kZV9kZWNvZGVfY2FsbF9lcnJvcmhhbmRsZXIoCisgICAgICAgIGlmICh1bmljb2RlX2RlY29kZV9jYWxsX2Vycm9yaGFuZGxlcl93cml0ZXIoCiAgICAgICAgICAgICAgICAgZXJyb3JzLCAmZXJyb3JIYW5kbGVyLAogICAgICAgICAgICAgICAgICJ1bmljb2RlZXNjYXBlIiwgbWVzc2FnZSwKICAgICAgICAgICAgICAgICAmc3RhcnRzLCAmZW5kLCAmc3RhcnRpbnBvcywgJmVuZGlucG9zLCAmZXhjLCAmcywKLSAgICAgICAgICAgICAgICAmdiwgJmkpKQorICAgICAgICAgICAgICAgICZ3cml0ZXIpKQogICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICBsZW4gPSBQeVVuaWNvZGVfR0VUX0xFTkdUSCh2KTsKICAgICAgICAgY29udGludWU7CiAgICAgfQogI3VuZGVmIFdSSVRFQ0hBUgogCi0gICAgaWYgKHVuaWNvZGVfcmVzaXplKCZ2LCBpKSA8IDApCi0gICAgICAgIGdvdG8gb25FcnJvcjsKICAgICBQeV9YREVDUkVGKGVycm9ySGFuZGxlcik7CiAgICAgUHlfWERFQ1JFRihleGMpOwotICAgIHJldHVybiB1bmljb2RlX3Jlc3VsdCh2KTsKKyAgICByZXR1cm4gX1B5VW5pY29kZVdyaXRlcl9GaW5pc2goJndyaXRlcik7CiAKICAgdWNuaGFzaEVycm9yOgogICAgIFB5RXJyX1NldFN0cmluZygKICAgICAgICAgUHlFeGNfVW5pY29kZUVycm9yLAogICAgICAgICAiXFxOIGVzY2FwZXMgbm90IHN1cHBvcnRlZCAoY2FuJ3QgbG9hZCB1bmljb2RlZGF0YSBtb2R1bGUpIgogICAgICAgICApOwotICAgIFB5X1hERUNSRUYodik7CisgICAgX1B5VW5pY29kZVdyaXRlcl9EZWFsbG9jKCZ3cml0ZXIpOwogICAgIFB5X1hERUNSRUYoZXJyb3JIYW5kbGVyKTsKICAgICBQeV9YREVDUkVGKGV4Yyk7CiAgICAgcmV0dXJuIE5VTEw7CiAKICAgb25FcnJvcjoKLSAgICBQeV9YREVDUkVGKHYpOworICAgIF9QeVVuaWNvZGVXcml0ZXJfRGVhbGxvYygmd3JpdGVyKTsKICAgICBQeV9YREVDUkVGKGVycm9ySGFuZGxlcik7CiAgICAgUHlfWERFQ1JFRihleGMpOwogICAgIHJldHVybiBOVUxMOwpAQCAtNTkyNiwyMyArNjA2OCwyMiBAQAogICAgIGNvbnN0IGNoYXIgKnN0YXJ0cyA9IHM7CiAgICAgUHlfc3NpemVfdCBzdGFydGlucG9zOwogICAgIFB5X3NzaXplX3QgZW5kaW5wb3M7Ci0gICAgUHlfc3NpemVfdCBvdXRwb3M7Ci0gICAgUHlPYmplY3QgKnY7CisgICAgX1B5VW5pY29kZVdyaXRlciB3cml0ZXI7CiAgICAgY29uc3QgY2hhciAqZW5kOwogICAgIGNvbnN0IGNoYXIgKmJzOwogICAgIFB5T2JqZWN0ICplcnJvckhhbmRsZXIgPSBOVUxMOwogICAgIFB5T2JqZWN0ICpleGMgPSBOVUxMOwogCisgICAgaWYgKHNpemUgPT0gMCkKKyAgICAgICAgX1B5X1JFVFVSTl9VTklDT0RFX0VNUFRZKCk7CisKICAgICAvKiBFc2NhcGVkIHN0cmluZ3Mgd2lsbCBhbHdheXMgYmUgbG9uZ2VyIHRoYW4gdGhlIHJlc3VsdGluZwogICAgICAgIFVuaWNvZGUgc3RyaW5nLCBzbyB3ZSBzdGFydCB3aXRoIHNpemUgaGVyZSBhbmQgdGhlbiByZWR1Y2UgdGhlCiAgICAgICAgbGVuZ3RoIGFmdGVyIGNvbnZlcnNpb24gdG8gdGhlIHRydWUgdmFsdWUuIChCdXQgZGVjb2RpbmcgZXJyb3IKICAgICAgICBoYW5kbGVyIG1pZ2h0IGhhdmUgdG8gcmVzaXplIHRoZSBzdHJpbmcpICovCi0gICAgdiA9IFB5VW5pY29kZV9OZXcoc2l6ZSwgMTI3KTsKLSAgICBpZiAodiA9PSBOVUxMKQotICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgaWYgKHNpemUgPT0gMCkKLSAgICAgICAgcmV0dXJuIHY7Ci0gICAgb3V0cG9zID0gMDsKKyAgICBfUHlVbmljb2RlV3JpdGVyX0luaXQoJndyaXRlcik7CisgICAgd3JpdGVyLm1pbl9sZW5ndGggPSBzaXplOworCiAgICAgZW5kID0gcyArIHNpemU7CiAgICAgd2hpbGUgKHMgPCBlbmQpIHsKICAgICAgICAgdW5zaWduZWQgY2hhciBjOwpAQCAtNTk1Miw3ICs2MDkzLDggQEAKIAogICAgICAgICAvKiBOb24tZXNjYXBlIGNoYXJhY3RlcnMgYXJlIGludGVycHJldGVkIGFzIFVuaWNvZGUgb3JkaW5hbHMgKi8KICAgICAgICAgaWYgKCpzICE9ICdcXCcpIHsKLSAgICAgICAgICAgIGlmICh1bmljb2RlX3B1dGNoYXIoJnYsICZvdXRwb3MsICh1bnNpZ25lZCBjaGFyKSpzKyspIDwgMCkKKyAgICAgICAgICAgIHggPSAodW5zaWduZWQgY2hhcikqcysrOworICAgICAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVDaGFySW5saW5lKCZ3cml0ZXIsIHgpIDwgMCkKICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQpAQCAtNTk2NCw3ICs2MTA2LDggQEAKICAgICAgICAgZm9yICg7cyA8IGVuZDspIHsKICAgICAgICAgICAgIGlmICgqcyAhPSAnXFwnKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgaWYgKHVuaWNvZGVfcHV0Y2hhcigmdiwgJm91dHBvcywgKHVuc2lnbmVkIGNoYXIpKnMrKykgPCAwKQorICAgICAgICAgICAgeCA9ICh1bnNpZ25lZCBjaGFyKSpzKys7CisgICAgICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUNoYXJJbmxpbmUoJndyaXRlciwgeCkgPCAwKQogICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKICAgICAgICAgfQogICAgICAgICBpZiAoKChzIC0gYnMpICYgMSkgPT0gMCB8fApAQCAtNTk3Miw3ICs2MTE1LDcgQEAKICAgICAgICAgICAgICgqcyAhPSAndScgJiYgKnMgIT0gJ1UnKSkgewogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAgb3V0cG9zLS07CisgICAgICAgIHdyaXRlci5wb3MtLTsKICAgICAgICAgY291bnQgPSAqcz09J3UnID8gNCA6IDg7CiAgICAgICAgIHMrKzsKIApAQCAtNTk4MSwxMSArNjEyNCwxMSBAQAogICAgICAgICAgICAgYyA9ICh1bnNpZ25lZCBjaGFyKSpzOwogICAgICAgICAgICAgaWYgKCFQeV9JU1hESUdJVChjKSkgewogICAgICAgICAgICAgICAgIGVuZGlucG9zID0gcy1zdGFydHM7Ci0gICAgICAgICAgICAgICAgaWYgKHVuaWNvZGVfZGVjb2RlX2NhbGxfZXJyb3JoYW5kbGVyKAorICAgICAgICAgICAgICAgIGlmICh1bmljb2RlX2RlY29kZV9jYWxsX2Vycm9yaGFuZGxlcl93cml0ZXIoCiAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMsICZlcnJvckhhbmRsZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAicmF3dW5pY29kZWVzY2FwZSIsICJ0cnVuY2F0ZWQgXFx1WFhYWCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAmc3RhcnRzLCAmZW5kLCAmc3RhcnRpbnBvcywgJmVuZGlucG9zLCAmZXhjLCAmcywKLSAgICAgICAgICAgICAgICAgICAgICAgICZ2LCAmb3V0cG9zKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICZ3cml0ZXIpKQogICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgICAgICAgICAgICAgZ290byBuZXh0Qnl0ZTsKICAgICAgICAgICAgIH0KQEAgLTU5OTgsMjggKzYxNDEsMjcgQEAKICAgICAgICAgICAgICAgICB4ICs9IDEwICsgYyAtICdBJzsKICAgICAgICAgfQogICAgICAgICBpZiAoeCA8PSBNQVhfVU5JQ09ERSkgewotICAgICAgICAgICAgaWYgKHVuaWNvZGVfcHV0Y2hhcigmdiwgJm91dHBvcywgeCkgPCAwKQorICAgICAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVDaGFySW5saW5lKCZ3cml0ZXIsIHgpIDwgMCkKICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgIH0gZWxzZSB7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBlbmRpbnBvcyA9IHMtc3RhcnRzOwotICAgICAgICAgICAgaWYgKHVuaWNvZGVfZGVjb2RlX2NhbGxfZXJyb3JoYW5kbGVyKAorICAgICAgICAgICAgaWYgKHVuaWNvZGVfZGVjb2RlX2NhbGxfZXJyb3JoYW5kbGVyX3dyaXRlcigKICAgICAgICAgICAgICAgICAgICAgZXJyb3JzLCAmZXJyb3JIYW5kbGVyLAogICAgICAgICAgICAgICAgICAgICAicmF3dW5pY29kZWVzY2FwZSIsICJcXFV4eHh4eHh4eCBvdXQgb2YgcmFuZ2UiLAogICAgICAgICAgICAgICAgICAgICAmc3RhcnRzLCAmZW5kLCAmc3RhcnRpbnBvcywgJmVuZGlucG9zLCAmZXhjLCAmcywKLSAgICAgICAgICAgICAgICAgICAgJnYsICZvdXRwb3MpKQorICAgICAgICAgICAgICAgICAgICAmd3JpdGVyKSkKICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgICAgIH0KICAgICAgIG5leHRCeXRlOgogICAgICAgICA7CiAgICAgfQotICAgIGlmICh1bmljb2RlX3Jlc2l6ZSgmdiwgb3V0cG9zKSA8IDApCi0gICAgICAgIGdvdG8gb25FcnJvcjsKICAgICBQeV9YREVDUkVGKGVycm9ySGFuZGxlcik7CiAgICAgUHlfWERFQ1JFRihleGMpOwotICAgIHJldHVybiB1bmljb2RlX3Jlc3VsdCh2KTsKKyAgICByZXR1cm4gX1B5VW5pY29kZVdyaXRlcl9GaW5pc2goJndyaXRlcik7CiAKICAgb25FcnJvcjoKLSAgICBQeV9YREVDUkVGKHYpOworICAgIF9QeVVuaWNvZGVXcml0ZXJfRGVhbGxvYygmd3JpdGVyKTsKICAgICBQeV9YREVDUkVGKGVycm9ySGFuZGxlcik7CiAgICAgUHlfWERFQ1JFRihleGMpOwogICAgIHJldHVybiBOVUxMOwpAQCAtNjExOSw4ICs2MjYxLDcgQEAKICAgICBjb25zdCBjaGFyICpzdGFydHMgPSBzOwogICAgIFB5X3NzaXplX3Qgc3RhcnRpbnBvczsKICAgICBQeV9zc2l6ZV90IGVuZGlucG9zOwotICAgIFB5X3NzaXplX3Qgb3V0cG9zOwotICAgIFB5T2JqZWN0ICp2OworICAgIF9QeVVuaWNvZGVXcml0ZXIgd3JpdGVyOwogICAgIGNvbnN0IGNoYXIgKmVuZDsKICAgICBjb25zdCBjaGFyICpyZWFzb247CiAgICAgUHlPYmplY3QgKmVycm9ySGFuZGxlciA9IE5VTEw7CkBAIC02MTMxLDE1ICs2MjcyLDE3IEBACiAgICAgICAgICAgICAgICAgICAgICAxKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICAvKiBYWFggb3ZlcmZsb3cgZGV0ZWN0aW9uIG1pc3NpbmcgKi8KLSAgICB2ID0gUHlVbmljb2RlX05ldygoc2l6ZStQeV9VTklDT0RFX1NJWkUtMSkvIFB5X1VOSUNPREVfU0laRSwgMTI3KTsKLSAgICBpZiAodiA9PSBOVUxMKQotICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgaWYgKFB5VW5pY29kZV9HRVRfTEVOR1RIKHYpID09IDApCi0gICAgICAgIHJldHVybiB2OwotICAgIG91dHBvcyA9IDA7Ci0gICAgZW5kID0gcyArIHNpemU7CisgICAgaWYgKHNpemUgPT0gMCkKKyAgICAgICAgX1B5X1JFVFVSTl9VTklDT0RFX0VNUFRZKCk7CiAKKyAgICBfUHlVbmljb2RlV3JpdGVyX0luaXQoJndyaXRlcik7CisgICAgaWYgKHNpemUgLyBQeV9VTklDT0RFX1NJWkUgPiBQWV9TU0laRV9UX01BWCAtIDEpIHsKKyAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgZ290byBvbkVycm9yOworICAgIH0KKyAgICB3cml0ZXIubWluX2xlbmd0aCA9IChzaXplICsgKFB5X1VOSUNPREVfU0laRSAtIDEpKSAvIFB5X1VOSUNPREVfU0laRTsKKworICAgIGVuZCA9IHMgKyBzaXplOwogICAgIHdoaWxlIChzIDwgZW5kKSB7CiAgICAgICAgIFB5X1VOSUNPREUgdWNoOwogICAgICAgICBQeV9VQ1M0IGNoOwpAQCAtNjE4MSwyOCArNjMyNCwyNiBAQAogICAgICAgICB9CiAjZW5kaWYKIAotICAgICAgICBpZiAodW5pY29kZV9wdXRjaGFyKCZ2LCAmb3V0cG9zLCBjaCkgPCAwKQorICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUNoYXJJbmxpbmUoJndyaXRlciwgY2gpIDwgMCkKICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKICAgICAgICAgY29udGludWU7CiAKICAgZXJyb3I6CiAgICAgICAgIHN0YXJ0aW5wb3MgPSBzIC0gc3RhcnRzOwotICAgICAgICBpZiAodW5pY29kZV9kZWNvZGVfY2FsbF9lcnJvcmhhbmRsZXIoCisgICAgICAgIGlmICh1bmljb2RlX2RlY29kZV9jYWxsX2Vycm9yaGFuZGxlcl93cml0ZXIoCiAgICAgICAgICAgICAgICAgZXJyb3JzLCAmZXJyb3JIYW5kbGVyLAogICAgICAgICAgICAgICAgICJ1bmljb2RlX2ludGVybmFsIiwgcmVhc29uLAogICAgICAgICAgICAgICAgICZzdGFydHMsICZlbmQsICZzdGFydGlucG9zLCAmZW5kaW5wb3MsICZleGMsICZzLAotICAgICAgICAgICAgICAgICZ2LCAmb3V0cG9zKSkKKyAgICAgICAgICAgICAgICAmd3JpdGVyKSkKICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKICAgICB9CiAKLSAgICBpZiAodW5pY29kZV9yZXNpemUoJnYsIG91dHBvcykgPCAwKQotICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgUHlfWERFQ1JFRihlcnJvckhhbmRsZXIpOwogICAgIFB5X1hERUNSRUYoZXhjKTsKLSAgICByZXR1cm4gdW5pY29kZV9yZXN1bHQodik7CisgICAgcmV0dXJuIF9QeVVuaWNvZGVXcml0ZXJfRmluaXNoKCZ3cml0ZXIpOwogCiAgIG9uRXJyb3I6Ci0gICAgUHlfWERFQ1JFRih2KTsKKyAgICBfUHlVbmljb2RlV3JpdGVyX0RlYWxsb2MoJndyaXRlcik7CiAgICAgUHlfWERFQ1JFRihlcnJvckhhbmRsZXIpOwogICAgIFB5X1hERUNSRUYoZXhjKTsKICAgICByZXR1cm4gTlVMTDsKQEAgLTY1ODYsNyArNjcyNyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZXJyb3JzKQogewogICAgIGNvbnN0IGNoYXIgKnN0YXJ0cyA9IHM7Ci0gICAgUHlPYmplY3QgKnVuaWNvZGU7CisgICAgX1B5VW5pY29kZVdyaXRlciB3cml0ZXI7CiAgICAgaW50IGtpbmQ7CiAgICAgdm9pZCAqZGF0YTsKICAgICBQeV9zc2l6ZV90IHN0YXJ0aW5wb3M7CkBAIC02NjAzLDQ2ICs2NzQ0LDQ2IEBACiAgICAgaWYgKHNpemUgPT0gMSAmJiAodW5zaWduZWQgY2hhcilzWzBdIDwgMTI4KQogICAgICAgICByZXR1cm4gZ2V0X2xhdGluMV9jaGFyKCh1bnNpZ25lZCBjaGFyKXNbMF0pOwogCi0gICAgdW5pY29kZSA9IFB5VW5pY29kZV9OZXcoc2l6ZSwgMTI3KTsKLSAgICBpZiAodW5pY29kZSA9PSBOVUxMKQotICAgICAgICBnb3RvIG9uRXJyb3I7CisgICAgX1B5VW5pY29kZVdyaXRlcl9Jbml0KCZ3cml0ZXIpOworICAgIHdyaXRlci5taW5fbGVuZ3RoID0gc2l6ZTsKKyAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9QcmVwYXJlKCZ3cml0ZXIsIHdyaXRlci5taW5fbGVuZ3RoLCAxMjcpIDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBlID0gcyArIHNpemU7Ci0gICAgZGF0YSA9IFB5VW5pY29kZV8xQllURV9EQVRBKHVuaWNvZGUpOworICAgIGRhdGEgPSB3cml0ZXIuZGF0YTsKICAgICBvdXRwb3MgPSBhc2NpaV9kZWNvZGUocywgZSwgKFB5X1VDUzEgKilkYXRhKTsKLSAgICBpZiAob3V0cG9zID09IHNpemUpCi0gICAgICAgIHJldHVybiB1bmljb2RlOworICAgIHdyaXRlci5wb3MgPSBvdXRwb3M7CisgICAgaWYgKHdyaXRlci5wb3MgPT0gc2l6ZSkKKyAgICAgICAgcmV0dXJuIF9QeVVuaWNvZGVXcml0ZXJfRmluaXNoKCZ3cml0ZXIpOwogCi0gICAgcyArPSBvdXRwb3M7Ci0gICAga2luZCA9IFB5VW5pY29kZV8xQllURV9LSU5EOworICAgIHMgKz0gd3JpdGVyLnBvczsKKyAgICBraW5kID0gd3JpdGVyLmtpbmQ7CiAgICAgd2hpbGUgKHMgPCBlKSB7Ci0gICAgICAgIHJlZ2lzdGVyIHVuc2lnbmVkIGNoYXIgYyA9ICh1bnNpZ25lZCBjaGFyKSpzOworICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSAodW5zaWduZWQgY2hhcikqczsKICAgICAgICAgaWYgKGMgPCAxMjgpIHsKLSAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShraW5kLCBkYXRhLCBvdXRwb3MrKywgYyk7CisgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUoa2luZCwgZGF0YSwgd3JpdGVyLnBvcywgYyk7CisgICAgICAgICAgICB3cml0ZXIucG9zKys7CiAgICAgICAgICAgICArK3M7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBzdGFydGlucG9zID0gcy1zdGFydHM7CiAgICAgICAgICAgICBlbmRpbnBvcyA9IHN0YXJ0aW5wb3MgKyAxOwotICAgICAgICAgICAgaWYgKHVuaWNvZGVfZGVjb2RlX2NhbGxfZXJyb3JoYW5kbGVyKAorICAgICAgICAgICAgaWYgKHVuaWNvZGVfZGVjb2RlX2NhbGxfZXJyb3JoYW5kbGVyX3dyaXRlcigKICAgICAgICAgICAgICAgICAgICAgZXJyb3JzLCAmZXJyb3JIYW5kbGVyLAogICAgICAgICAgICAgICAgICAgICAiYXNjaWkiLCAib3JkaW5hbCBub3QgaW4gcmFuZ2UoMTI4KSIsCiAgICAgICAgICAgICAgICAgICAgICZzdGFydHMsICZlLCAmc3RhcnRpbnBvcywgJmVuZGlucG9zLCAmZXhjLCAmcywKLSAgICAgICAgICAgICAgICAgICAgJnVuaWNvZGUsICZvdXRwb3MpKQorICAgICAgICAgICAgICAgICAgICAmd3JpdGVyKSkKICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgICAgICBraW5kID0gUHlVbmljb2RlX0tJTkQodW5pY29kZSk7Ci0gICAgICAgICAgICBkYXRhID0gUHlVbmljb2RlX0RBVEEodW5pY29kZSk7CisgICAgICAgICAgICBraW5kID0gd3JpdGVyLmtpbmQ7CisgICAgICAgICAgICBkYXRhID0gd3JpdGVyLmRhdGE7CiAgICAgICAgIH0KICAgICB9Ci0gICAgaWYgKHVuaWNvZGVfcmVzaXplKCZ1bmljb2RlLCBvdXRwb3MpIDwgMCkKLSAgICAgICAgZ290byBvbkVycm9yOwogICAgIFB5X1hERUNSRUYoZXJyb3JIYW5kbGVyKTsKICAgICBQeV9YREVDUkVGKGV4Yyk7Ci0gICAgYXNzZXJ0KF9QeVVuaWNvZGVfQ2hlY2tDb25zaXN0ZW5jeSh1bmljb2RlLCAxKSk7Ci0gICAgcmV0dXJuIHVuaWNvZGU7CisgICAgcmV0dXJuIF9QeVVuaWNvZGVXcml0ZXJfRmluaXNoKCZ3cml0ZXIpOwogCiAgIG9uRXJyb3I6Ci0gICAgUHlfWERFQ1JFRih1bmljb2RlKTsKKyAgICBfUHlVbmljb2RlV3JpdGVyX0RlYWxsb2MoJndyaXRlcik7CiAgICAgUHlfWERFQ1JFRihlcnJvckhhbmRsZXIpOwogICAgIFB5X1hERUNSRUYoZXhjKTsKICAgICByZXR1cm4gTlVMTDsKQEAgLTY2NzQsNyArNjgxNSw3IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIC8qIEZhc3QgcGF0aDogaWYgaXQgaXMgYW4gQVNDSUktb25seSBzdHJpbmcsIGNvbnN0cnVjdCBieXRlcyBvYmplY3QKICAgICAgICBkaXJlY3RseS4gRWxzZSBkZWZlciB0byBhYm92ZSBmdW5jdGlvbiB0byByYWlzZSB0aGUgZXhjZXB0aW9uLiAqLwotICAgIGlmIChQeVVuaWNvZGVfTUFYX0NIQVJfVkFMVUUodW5pY29kZSkgPCAxMjgpCisgICAgaWYgKFB5VW5pY29kZV9JU19BU0NJSSh1bmljb2RlKSkKICAgICAgICAgcmV0dXJuIFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoUHlVbmljb2RlX0RBVEEodW5pY29kZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9HRVRfTEVOR1RIKHVuaWNvZGUpKTsKICAgICByZXR1cm4gdW5pY29kZV9lbmNvZGVfdWNzMSh1bmljb2RlLCBlcnJvcnMsIDEyOCk7CkBAIC02NzUyLDggKzY4OTMsOCBAQAogICogRGVjb2RlIGEgYnl0ZSBzdHJpbmcgZnJvbSBhIFdpbmRvd3MgY29kZSBwYWdlIGludG8gdW5pY29kZSBvYmplY3QgaW4gc3RyaWN0CiAgKiBtb2RlLgogICoKLSAqIFJldHVybnMgY29uc3VtZWQgc2l6ZSBpZiBzdWNjZWVkLCByZXR1cm5zIC0yIG9uIGRlY29kZSBlcnJvciwgb3IgcmFpc2UgYQotICogV2luZG93c0Vycm9yIGFuZCByZXR1cm5zIC0xIG9uIG90aGVyIGVycm9yLgorICogUmV0dXJucyBjb25zdW1lZCBzaXplIGlmIHN1Y2NlZWQsIHJldHVybnMgLTIgb24gZGVjb2RlIGVycm9yLCBvciByYWlzZSBhbgorICogT1NFcnJvciBhbmQgcmV0dXJucyAtMSBvbiBvdGhlciBlcnJvci4KICAqLwogc3RhdGljIGludAogZGVjb2RlX2NvZGVfcGFnZV9zdHJpY3QoVUlOVCBjb2RlX3BhZ2UsCkBAIC02ODA0LDcgKzY5NDUsNyBAQAogICogRGVjb2RlIGEgYnl0ZSBzdHJpbmcgZnJvbSBhIGNvZGUgcGFnZSBpbnRvIHVuaWNvZGUgb2JqZWN0IHdpdGggYW4gZXJyb3IKICAqIGhhbmRsZXIuCiAgKgotICogUmV0dXJucyBjb25zdW1lZCBzaXplIGlmIHN1Y2NlZWQsIG9yIHJhaXNlIGEgV2luZG93c0Vycm9yIG9yCisgKiBSZXR1cm5zIGNvbnN1bWVkIHNpemUgaWYgc3VjY2VlZCwgb3IgcmFpc2UgYW4gT1NFcnJvciBvcgogICogVW5pY29kZURlY29kZUVycm9yIGV4Y2VwdGlvbiBhbmQgcmV0dXJucyAtMSBvbiBlcnJvci4KICAqLwogc3RhdGljIGludApAQCAtNjgyMyw3ICs2OTY0LDggQEAKICAgICAvKiBlYWNoIHN0ZXAgY2Fubm90IGRlY29kZSBtb3JlIHRoYW4gMSBjaGFyYWN0ZXIsIGJ1dCBhIGNoYXJhY3RlciBjYW4gYmUKICAgICAgICByZXByZXNlbnRlZCBhcyBhIHN1cnJvZ2F0ZSBwYWlyICovCiAgICAgd2NoYXJfdCBidWZmZXJbMl0sICpzdGFydG91dCwgKm91dDsKLSAgICBpbnQgaW5zaXplLCBvdXRzaXplOworICAgIGludCBpbnNpemU7CisgICAgUHlfc3NpemVfdCBvdXRzaXplOwogICAgIFB5T2JqZWN0ICplcnJvckhhbmRsZXIgPSBOVUxMOwogICAgIFB5T2JqZWN0ICpleGMgPSBOVUxMOwogICAgIFB5T2JqZWN0ICplbmNvZGluZ19vYmogPSBOVUxMOwpAQCAtNjkwMyw3ICs3MDQ1LDcgQEAKICAgICAgICAgICAgIHN0YXJ0aW5wb3MgPSBpbiAtIHN0YXJ0aW47CiAgICAgICAgICAgICBlbmRpbnBvcyA9IHN0YXJ0aW5wb3MgKyAxOwogICAgICAgICAgICAgb3V0cG9zID0gb3V0IC0gUHlVbmljb2RlX0FTX1VOSUNPREUoKnYpOwotICAgICAgICAgICAgaWYgKHVuaWNvZGVfZGVjb2RlX2NhbGxfZXJyb3JoYW5kbGVyKAorICAgICAgICAgICAgaWYgKHVuaWNvZGVfZGVjb2RlX2NhbGxfZXJyb3JoYW5kbGVyX3djaGFyKAogICAgICAgICAgICAgICAgICAgICBlcnJvcnMsICZlcnJvckhhbmRsZXIsCiAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nLCByZWFzb24sCiAgICAgICAgICAgICAgICAgICAgICZzdGFydGluLCAmZW5kaW4sICZzdGFydGlucG9zLCAmZW5kaW5wb3MsICZleGMsICZpbiwKQEAgLTcwNTksNyArNzIwMSw3IEBACiAgKiBtb2RlLgogICoKICAqIFJldHVybnMgY29uc3VtZWQgY2hhcmFjdGVycyBpZiBzdWNjZWVkLCByZXR1cm5zIC0yIG9uIGVuY29kZSBlcnJvciwgb3IgcmFpc2UKLSAqIGEgV2luZG93c0Vycm9yIGFuZCByZXR1cm5zIC0xIG9uIG90aGVyIGVycm9yLgorICogYW4gT1NFcnJvciBhbmQgcmV0dXJucyAtMSBvbiBvdGhlciBlcnJvci4KICAqLwogc3RhdGljIGludAogZW5jb2RlX2NvZGVfcGFnZV9zdHJpY3QoVUlOVCBjb2RlX3BhZ2UsIFB5T2JqZWN0ICoqb3V0Ynl0ZXMsCkBAIC03MDkzLDEwICs3MjM1LDExIEBACiAgICAgICAgIFB5X0RFQ1JFRihzdWJzdHJpbmcpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQorICAgIGFzc2VydChzaXplIDw9IElOVF9NQVgpOwogCiAgICAgLyogRmlyc3QgZ2V0IHRoZSBzaXplIG9mIHRoZSByZXN1bHQgKi8KICAgICBvdXRzaXplID0gV2lkZUNoYXJUb011bHRpQnl0ZShjb2RlX3BhZ2UsIGZsYWdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAsIHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCwgKGludClzaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgcHVzZWREZWZhdWx0Q2hhcik7CiAgICAgaWYgKG91dHNpemUgPD0gMCkKQEAgLTcxMzMsNyArNzI3Niw3IEBACiAKICAgICAvKiBEbyB0aGUgY29udmVyc2lvbiAqLwogICAgIG91dHNpemUgPSBXaWRlQ2hhclRvTXVsdGlCeXRlKGNvZGVfcGFnZSwgZmxhZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCwgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLCAoaW50KXNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0LCBvdXRzaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIHB1c2VkRGVmYXVsdENoYXIpOwogICAgIFB5X0NMRUFSKHN1YnN0cmluZyk7CkBAIC03MTUyLDEwICs3Mjk1LDEwIEBACiB9CiAKIC8qCi0gKiBFbmNvZGUgYSBVbmljb2RlIHN0cmluZyB0byBhIFdpbmRvd3MgY29kZSBwYWdlIGludG8gYSBieXRlIHN0cmluZyB1c2luZyBhCisgKiBFbmNvZGUgYSBVbmljb2RlIHN0cmluZyB0byBhIFdpbmRvd3MgY29kZSBwYWdlIGludG8gYSBieXRlIHN0cmluZyB1c2luZyBhbgogICogZXJyb3IgaGFuZGxlci4KICAqCi0gKiBSZXR1cm5zIGNvbnN1bWVkIGNoYXJhY3RlcnMgaWYgc3VjY2VlZCwgb3IgcmFpc2UgYSBXaW5kb3dzRXJyb3IgYW5kIHJldHVybnMKKyAqIFJldHVybnMgY29uc3VtZWQgY2hhcmFjdGVycyBpZiBzdWNjZWVkLCBvciByYWlzZSBhbiBPU0Vycm9yIGFuZCByZXR1cm5zCiAgKiAtMSBvbiBvdGhlciBlcnJvci4KICAqLwogc3RhdGljIGludApAQCAtNzI0MSw5ICs3Mzg0LDggQEAKICAgICAgICAgICAgIGNoYXJzaXplID0gMTsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGNoIC09IDB4MTAwMDA7Ci0gICAgICAgICAgICBjaGFyc1swXSA9IDB4ZDgwMCArIChjaCA+PiAxMCk7Ci0gICAgICAgICAgICBjaGFyc1sxXSA9IDB4ZGMwMCArIChjaCAmIDB4M2ZmKTsKKyAgICAgICAgICAgIGNoYXJzWzBdID0gUHlfVU5JQ09ERV9ISUdIX1NVUlJPR0FURShjaCk7CisgICAgICAgICAgICBjaGFyc1sxXSA9IFB5X1VOSUNPREVfTE9XX1NVUlJPR0FURShjaCk7CiAgICAgICAgICAgICBjaGFyc2l6ZSA9IDI7CiAgICAgICAgIH0KIApAQCAtNzQzNiwyMjAgKzc1NzgsMjU4IEBACiAKIC8qIC0tLSBDaGFyYWN0ZXIgTWFwcGluZyBDb2RlYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCitzdGF0aWMgaW50CitjaGFybWFwX2RlY29kZV9zdHJpbmcoY29uc3QgY2hhciAqcywKKyAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKm1hcHBpbmcsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZXJyb3JzLAorICAgICAgICAgICAgICAgICAgICAgIF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlcikKK3sKKyAgICBjb25zdCBjaGFyICpzdGFydHMgPSBzOworICAgIGNvbnN0IGNoYXIgKmU7CisgICAgUHlfc3NpemVfdCBzdGFydGlucG9zLCBlbmRpbnBvczsKKyAgICBQeU9iamVjdCAqZXJyb3JIYW5kbGVyID0gTlVMTCwgKmV4YyA9IE5VTEw7CisgICAgUHlfc3NpemVfdCBtYXBsZW47CisgICAgZW51bSBQeVVuaWNvZGVfS2luZCBtYXBraW5kOworICAgIHZvaWQgKm1hcGRhdGE7CisgICAgUHlfVUNTNCB4OworICAgIHVuc2lnbmVkIGNoYXIgY2g7CisKKyAgICBpZiAoUHlVbmljb2RlX1JFQURZKG1hcHBpbmcpID09IC0xKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBtYXBsZW4gPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChtYXBwaW5nKTsKKyAgICBtYXBkYXRhID0gUHlVbmljb2RlX0RBVEEobWFwcGluZyk7CisgICAgbWFwa2luZCA9IFB5VW5pY29kZV9LSU5EKG1hcHBpbmcpOworCisgICAgZSA9IHMgKyBzaXplOworCisgICAgaWYgKG1hcGtpbmQgPT0gUHlVbmljb2RlXzFCWVRFX0tJTkQgJiYgbWFwbGVuID49IDI1NikgeworICAgICAgICAvKiBmYXN0LXBhdGggZm9yIGNwMDM3LCBjcDUwMCBhbmQgaXNvODg1OV8xIGVuY29kaW5ncy4gaXNvODg1OV8xCisgICAgICAgICAqIGlzIGRpc2FibGVkIGluIGVuY29kaW5nIGFsaWFzZXMsIGxhdGluMSBpcyBwcmVmZXJyZWQgYmVjYXVzZQorICAgICAgICAgKiBpdHMgaW1wbGVtZW50YXRpb24gaXMgZmFzdGVyLiAqLworICAgICAgICBQeV9VQ1MxICptYXBkYXRhX3VjczEgPSAoUHlfVUNTMSAqKW1hcGRhdGE7CisgICAgICAgIFB5X1VDUzEgKm91dGRhdGEgPSAoUHlfVUNTMSAqKXdyaXRlci0+ZGF0YTsKKyAgICAgICAgUHlfVUNTNCBtYXhjaGFyID0gd3JpdGVyLT5tYXhjaGFyOworCisgICAgICAgIGFzc2VydCAod3JpdGVyLT5raW5kID09IFB5VW5pY29kZV8xQllURV9LSU5EKTsKKyAgICAgICAgd2hpbGUgKHMgPCBlKSB7CisgICAgICAgICAgICBjaCA9ICpzOworICAgICAgICAgICAgeCA9IG1hcGRhdGFfdWNzMVtjaF07CisgICAgICAgICAgICBpZiAoeCA+IG1heGNoYXIpIHsKKyAgICAgICAgICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9QcmVwYXJlKHdyaXRlciwgMSwgMHhmZikgPT0gLTEpCisgICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKKyAgICAgICAgICAgICAgICBtYXhjaGFyID0gd3JpdGVyLT5tYXhjaGFyOworICAgICAgICAgICAgICAgIG91dGRhdGEgPSAoUHlfVUNTMSAqKXdyaXRlci0+ZGF0YTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG91dGRhdGFbd3JpdGVyLT5wb3NdID0geDsKKyAgICAgICAgICAgIHdyaXRlci0+cG9zKys7CisgICAgICAgICAgICArK3M7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgd2hpbGUgKHMgPCBlKSB7CisgICAgICAgIGlmIChtYXBraW5kID09IFB5VW5pY29kZV8yQllURV9LSU5EICYmIG1hcGxlbiA+PSAyNTYpIHsKKyAgICAgICAgICAgIGVudW0gUHlVbmljb2RlX0tpbmQgb3V0a2luZCA9IHdyaXRlci0+a2luZDsKKyAgICAgICAgICAgIFB5X1VDUzIgKm1hcGRhdGFfdWNzMiA9IChQeV9VQ1MyICopbWFwZGF0YTsKKyAgICAgICAgICAgIGlmIChvdXRraW5kID09IFB5VW5pY29kZV8xQllURV9LSU5EKSB7CisgICAgICAgICAgICAgICAgUHlfVUNTMSAqb3V0ZGF0YSA9IChQeV9VQ1MxICopd3JpdGVyLT5kYXRhOworICAgICAgICAgICAgICAgIFB5X1VDUzQgbWF4Y2hhciA9IHdyaXRlci0+bWF4Y2hhcjsKKyAgICAgICAgICAgICAgICB3aGlsZSAocyA8IGUpIHsKKyAgICAgICAgICAgICAgICAgICAgY2ggPSAqczsKKyAgICAgICAgICAgICAgICAgICAgeCA9IG1hcGRhdGFfdWNzMltjaF07CisgICAgICAgICAgICAgICAgICAgIGlmICh4ID4gbWF4Y2hhcikKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gRXJyb3I7CisgICAgICAgICAgICAgICAgICAgIG91dGRhdGFbd3JpdGVyLT5wb3NdID0geDsKKyAgICAgICAgICAgICAgICAgICAgd3JpdGVyLT5wb3MrKzsKKyAgICAgICAgICAgICAgICAgICAgKytzOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKG91dGtpbmQgPT0gUHlVbmljb2RlXzJCWVRFX0tJTkQpIHsKKyAgICAgICAgICAgICAgICBQeV9VQ1MyICpvdXRkYXRhID0gKFB5X1VDUzIgKil3cml0ZXItPmRhdGE7CisgICAgICAgICAgICAgICAgd2hpbGUgKHMgPCBlKSB7CisgICAgICAgICAgICAgICAgICAgIGNoID0gKnM7CisgICAgICAgICAgICAgICAgICAgIHggPSBtYXBkYXRhX3VjczJbY2hdOworICAgICAgICAgICAgICAgICAgICBpZiAoeCA9PSAweEZGRkUpCisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIEVycm9yOworICAgICAgICAgICAgICAgICAgICBvdXRkYXRhW3dyaXRlci0+cG9zXSA9IHg7CisgICAgICAgICAgICAgICAgICAgIHdyaXRlci0+cG9zKys7CisgICAgICAgICAgICAgICAgICAgICsrczsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgY2ggPSAqczsKKworICAgICAgICBpZiAoY2ggPCBtYXBsZW4pCisgICAgICAgICAgICB4ID0gUHlVbmljb2RlX1JFQUQobWFwa2luZCwgbWFwZGF0YSwgY2gpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB4ID0gMHhmZmZlOyAvKiBpbnZhbGlkIHZhbHVlICovCitFcnJvcjoKKyAgICAgICAgaWYgKHggPT0gMHhmZmZlKQorICAgICAgICB7CisgICAgICAgICAgICAvKiB1bmRlZmluZWQgbWFwcGluZyAqLworICAgICAgICAgICAgc3RhcnRpbnBvcyA9IHMtc3RhcnRzOworICAgICAgICAgICAgZW5kaW5wb3MgPSBzdGFydGlucG9zKzE7CisgICAgICAgICAgICBpZiAodW5pY29kZV9kZWNvZGVfY2FsbF9lcnJvcmhhbmRsZXJfd3JpdGVyKAorICAgICAgICAgICAgICAgICAgICBlcnJvcnMsICZlcnJvckhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICJjaGFybWFwIiwgImNoYXJhY3RlciBtYXBzIHRvIDx1bmRlZmluZWQ+IiwKKyAgICAgICAgICAgICAgICAgICAgJnN0YXJ0cywgJmUsICZzdGFydGlucG9zLCAmZW5kaW5wb3MsICZleGMsICZzLAorICAgICAgICAgICAgICAgICAgICB3cml0ZXIpKSB7CisgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUNoYXJJbmxpbmUod3JpdGVyLCB4KSA8IDApCisgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CisgICAgICAgICsrczsKKyAgICB9CisgICAgUHlfWERFQ1JFRihlcnJvckhhbmRsZXIpOworICAgIFB5X1hERUNSRUYoZXhjKTsKKyAgICByZXR1cm4gMDsKKworb25FcnJvcjoKKyAgICBQeV9YREVDUkVGKGVycm9ySGFuZGxlcik7CisgICAgUHlfWERFQ1JFRihleGMpOworICAgIHJldHVybiAtMTsKK30KKworc3RhdGljIGludAorY2hhcm1hcF9kZWNvZGVfbWFwcGluZyhjb25zdCBjaGFyICpzLAorICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICptYXBwaW5nLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplcnJvcnMsCisgICAgICAgICAgICAgICAgICAgICAgIF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlcikKK3sKKyAgICBjb25zdCBjaGFyICpzdGFydHMgPSBzOworICAgIGNvbnN0IGNoYXIgKmU7CisgICAgUHlfc3NpemVfdCBzdGFydGlucG9zLCBlbmRpbnBvczsKKyAgICBQeU9iamVjdCAqZXJyb3JIYW5kbGVyID0gTlVMTCwgKmV4YyA9IE5VTEw7CisgICAgdW5zaWduZWQgY2hhciBjaDsKKyAgICBQeU9iamVjdCAqa2V5LCAqaXRlbSA9IE5VTEw7CisKKyAgICBlID0gcyArIHNpemU7CisKKyAgICB3aGlsZSAocyA8IGUpIHsKKyAgICAgICAgY2ggPSAqczsKKworICAgICAgICAvKiBHZXQgbWFwcGluZyAoY2hhciBvcmRpbmFsIC0+IGludGVnZXIsIFVuaWNvZGUgY2hhciBvciBOb25lKSAqLworICAgICAgICBrZXkgPSBQeUxvbmdfRnJvbUxvbmcoKGxvbmcpY2gpOworICAgICAgICBpZiAoa2V5ID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CisKKyAgICAgICAgaXRlbSA9IFB5T2JqZWN0X0dldEl0ZW0obWFwcGluZywga2V5KTsKKyAgICAgICAgUHlfREVDUkVGKGtleSk7CisgICAgICAgIGlmIChpdGVtID09IE5VTEwpIHsKKyAgICAgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0xvb2t1cEVycm9yKSkgeworICAgICAgICAgICAgICAgIC8qIE5vIG1hcHBpbmcgZm91bmQgbWVhbnM6IG1hcHBpbmcgaXMgdW5kZWZpbmVkLiAqLworICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgICAgICAgICAgICAgZ290byBVbmRlZmluZWQ7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CisgICAgICAgIH0KKworICAgICAgICAvKiBBcHBseSBtYXBwaW5nICovCisgICAgICAgIGlmIChpdGVtID09IFB5X05vbmUpCisgICAgICAgICAgICBnb3RvIFVuZGVmaW5lZDsKKyAgICAgICAgaWYgKFB5TG9uZ19DaGVjayhpdGVtKSkgeworICAgICAgICAgICAgbG9uZyB2YWx1ZSA9IFB5TG9uZ19BU19MT05HKGl0ZW0pOworICAgICAgICAgICAgaWYgKHZhbHVlID09IDB4RkZGRSkKKyAgICAgICAgICAgICAgICBnb3RvIFVuZGVmaW5lZDsKKyAgICAgICAgICAgIGlmICh2YWx1ZSA8IDAgfHwgdmFsdWUgPiBNQVhfVU5JQ09ERSkgeworICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjaGFyYWN0ZXIgbWFwcGluZyBtdXN0IGJlIGluIHJhbmdlKDB4JWx4KSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKU1BWF9VTklDT0RFICsgMSk7CisgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUNoYXJJbmxpbmUod3JpdGVyLCB2YWx1ZSkgPCAwKQorICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChQeVVuaWNvZGVfQ2hlY2soaXRlbSkpIHsKKyAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoaXRlbSkgPT0gLTEpCisgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOworICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9HRVRfTEVOR1RIKGl0ZW0pID09IDEpIHsKKyAgICAgICAgICAgICAgICBQeV9VQ1M0IHZhbHVlID0gUHlVbmljb2RlX1JFQURfQ0hBUihpdGVtLCAwKTsKKyAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gMHhGRkZFKQorICAgICAgICAgICAgICAgICAgICBnb3RvIFVuZGVmaW5lZDsKKyAgICAgICAgICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUNoYXJJbmxpbmUod3JpdGVyLCB2YWx1ZSkgPCAwKQorICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB3cml0ZXItPm92ZXJhbGxvY2F0ZSA9IDE7CisgICAgICAgICAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVTdHIod3JpdGVyLCBpdGVtKSA9PSAtMSkKKyAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLyogd3JvbmcgcmV0dXJuIHZhbHVlICovCisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjaGFyYWN0ZXIgbWFwcGluZyBtdXN0IHJldHVybiBpbnRlZ2VyLCBOb25lIG9yIHN0ciIpOworICAgICAgICAgICAgZ290byBvbkVycm9yOworICAgICAgICB9CisgICAgICAgIFB5X0NMRUFSKGl0ZW0pOworICAgICAgICArK3M7CisgICAgICAgIGNvbnRpbnVlOworCitVbmRlZmluZWQ6CisgICAgICAgIC8qIHVuZGVmaW5lZCBtYXBwaW5nICovCisgICAgICAgIFB5X0NMRUFSKGl0ZW0pOworICAgICAgICBzdGFydGlucG9zID0gcy1zdGFydHM7CisgICAgICAgIGVuZGlucG9zID0gc3RhcnRpbnBvcysxOworICAgICAgICBpZiAodW5pY29kZV9kZWNvZGVfY2FsbF9lcnJvcmhhbmRsZXJfd3JpdGVyKAorICAgICAgICAgICAgICAgIGVycm9ycywgJmVycm9ySGFuZGxlciwKKyAgICAgICAgICAgICAgICAiY2hhcm1hcCIsICJjaGFyYWN0ZXIgbWFwcyB0byA8dW5kZWZpbmVkPiIsCisgICAgICAgICAgICAgICAgJnN0YXJ0cywgJmUsICZzdGFydGlucG9zLCAmZW5kaW5wb3MsICZleGMsICZzLAorICAgICAgICAgICAgICAgIHdyaXRlcikpIHsKKyAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKKyAgICAgICAgfQorICAgIH0KKyAgICBQeV9YREVDUkVGKGVycm9ySGFuZGxlcik7CisgICAgUHlfWERFQ1JFRihleGMpOworICAgIHJldHVybiAwOworCitvbkVycm9yOgorICAgIFB5X1hERUNSRUYoaXRlbSk7CisgICAgUHlfWERFQ1JFRihlcnJvckhhbmRsZXIpOworICAgIFB5X1hERUNSRUYoZXhjKTsKKyAgICByZXR1cm4gLTE7Cit9CisKIFB5T2JqZWN0ICoKIFB5VW5pY29kZV9EZWNvZGVDaGFybWFwKGNvbnN0IGNoYXIgKnMsCiAgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IHNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqbWFwcGluZywKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVycm9ycykKIHsKLSAgICBjb25zdCBjaGFyICpzdGFydHMgPSBzOwotICAgIFB5X3NzaXplX3Qgc3RhcnRpbnBvczsKLSAgICBQeV9zc2l6ZV90IGVuZGlucG9zOwotICAgIFB5X3NzaXplX3Qgb3V0cG9zOwotICAgIGNvbnN0IGNoYXIgKmU7Ci0gICAgUHlPYmplY3QgKnY7Ci0gICAgUHlfc3NpemVfdCBleHRyYWNoYXJzID0gMDsKLSAgICBQeU9iamVjdCAqZXJyb3JIYW5kbGVyID0gTlVMTDsKLSAgICBQeU9iamVjdCAqZXhjID0gTlVMTDsKKyAgICBfUHlVbmljb2RlV3JpdGVyIHdyaXRlcjsKIAogICAgIC8qIERlZmF1bHQgdG8gTGF0aW4tMSAqLwogICAgIGlmIChtYXBwaW5nID09IE5VTEwpCiAgICAgICAgIHJldHVybiBQeVVuaWNvZGVfRGVjb2RlTGF0aW4xKHMsIHNpemUsIGVycm9ycyk7CiAKLSAgICB2ID0gUHlVbmljb2RlX05ldyhzaXplLCAxMjcpOwotICAgIGlmICh2ID09IE5VTEwpCi0gICAgICAgIGdvdG8gb25FcnJvcjsKICAgICBpZiAoc2l6ZSA9PSAwKQotICAgICAgICByZXR1cm4gdjsKLSAgICBvdXRwb3MgPSAwOwotICAgIGUgPSBzICsgc2l6ZTsKKyAgICAgICAgX1B5X1JFVFVSTl9VTklDT0RFX0VNUFRZKCk7CisgICAgX1B5VW5pY29kZVdyaXRlcl9Jbml0KCZ3cml0ZXIpOworICAgIHdyaXRlci5taW5fbGVuZ3RoID0gc2l6ZTsKKyAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9QcmVwYXJlKCZ3cml0ZXIsIHdyaXRlci5taW5fbGVuZ3RoLCAxMjcpID09IC0xKQorICAgICAgICBnb3RvIG9uRXJyb3I7CisKICAgICBpZiAoUHlVbmljb2RlX0NoZWNrRXhhY3QobWFwcGluZykpIHsKLSAgICAgICAgUHlfc3NpemVfdCBtYXBsZW47Ci0gICAgICAgIGVudW0gUHlVbmljb2RlX0tpbmQgbWFwa2luZDsKLSAgICAgICAgdm9pZCAqbWFwZGF0YTsKLSAgICAgICAgUHlfVUNTNCB4OwotCi0gICAgICAgIGlmIChQeVVuaWNvZGVfUkVBRFkobWFwcGluZykgPT0gLTEpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgICAgICBtYXBsZW4gPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChtYXBwaW5nKTsKLSAgICAgICAgbWFwZGF0YSA9IFB5VW5pY29kZV9EQVRBKG1hcHBpbmcpOwotICAgICAgICBtYXBraW5kID0gUHlVbmljb2RlX0tJTkQobWFwcGluZyk7Ci0gICAgICAgIHdoaWxlIChzIDwgZSkgewotICAgICAgICAgICAgdW5zaWduZWQgY2hhciBjaDsKLSAgICAgICAgICAgIGlmIChtYXBraW5kID09IFB5VW5pY29kZV8yQllURV9LSU5EICYmIG1hcGxlbiA+PSAyNTYpIHsKLSAgICAgICAgICAgICAgICBlbnVtIFB5VW5pY29kZV9LaW5kIG91dGtpbmQgPSBQeVVuaWNvZGVfS0lORCh2KTsKLSAgICAgICAgICAgICAgICBpZiAob3V0a2luZCA9PSBQeVVuaWNvZGVfMUJZVEVfS0lORCkgewotICAgICAgICAgICAgICAgICAgICB2b2lkICpvdXRkYXRhID0gUHlVbmljb2RlX0RBVEEodik7Ci0gICAgICAgICAgICAgICAgICAgIFB5X1VDUzQgbWF4Y2hhciA9IFB5VW5pY29kZV9NQVhfQ0hBUl9WQUxVRSh2KTsKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHMgPCBlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGNoID0gKnM7Ci0gICAgICAgICAgICAgICAgICAgICAgICB4ID0gUHlVbmljb2RlX1JFQUQoUHlVbmljb2RlXzJCWVRFX0tJTkQsIG1hcGRhdGEsIGNoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4ID4gbWF4Y2hhcikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIEVycm9yOwotICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKFB5VW5pY29kZV8xQllURV9LSU5ELCBvdXRkYXRhLCBvdXRwb3MrKywgeCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICArK3M7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKG91dGtpbmQgPT0gUHlVbmljb2RlXzJCWVRFX0tJTkQpIHsKLSAgICAgICAgICAgICAgICAgICAgdm9pZCAqb3V0ZGF0YSA9IFB5VW5pY29kZV9EQVRBKHYpOwotICAgICAgICAgICAgICAgICAgICB3aGlsZSAocyA8IGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgY2ggPSAqczsKLSAgICAgICAgICAgICAgICAgICAgICAgIHggPSBQeVVuaWNvZGVfUkVBRChQeVVuaWNvZGVfMkJZVEVfS0lORCwgbWFwZGF0YSwgY2gpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHggPT0gMHhGRkZFKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gRXJyb3I7Ci0gICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUoUHlVbmljb2RlXzJCWVRFX0tJTkQsIG91dGRhdGEsIG91dHBvcysrLCB4KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICsrczsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjaCA9ICpzOwotCi0gICAgICAgICAgICBpZiAoY2ggPCBtYXBsZW4pCi0gICAgICAgICAgICAgICAgeCA9IFB5VW5pY29kZV9SRUFEKG1hcGtpbmQsIG1hcGRhdGEsIGNoKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB4ID0gMHhmZmZlOyAvKiBpbnZhbGlkIHZhbHVlICovCi1FcnJvcjoKLSAgICAgICAgICAgIGlmICh4ID09IDB4ZmZmZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvKiB1bmRlZmluZWQgbWFwcGluZyAqLwotICAgICAgICAgICAgICAgIHN0YXJ0aW5wb3MgPSBzLXN0YXJ0czsKLSAgICAgICAgICAgICAgICBlbmRpbnBvcyA9IHN0YXJ0aW5wb3MrMTsKLSAgICAgICAgICAgICAgICBpZiAodW5pY29kZV9kZWNvZGVfY2FsbF9lcnJvcmhhbmRsZXIoCi0gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMsICZlcnJvckhhbmRsZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAiY2hhcm1hcCIsICJjaGFyYWN0ZXIgbWFwcyB0byA8dW5kZWZpbmVkPiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAmc3RhcnRzLCAmZSwgJnN0YXJ0aW5wb3MsICZlbmRpbnBvcywgJmV4YywgJnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAmdiwgJm91dHBvcykpIHsKLSAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHVuaWNvZGVfcHV0Y2hhcigmdiwgJm91dHBvcywgeCkgPCAwKQotICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgICsrczsKLSAgICAgICAgfQorICAgICAgICBpZiAoY2hhcm1hcF9kZWNvZGVfc3RyaW5nKHMsIHNpemUsIG1hcHBpbmcsIGVycm9ycywgJndyaXRlcikgPCAwKQorICAgICAgICAgICAgZ290byBvbkVycm9yOwogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgd2hpbGUgKHMgPCBlKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGNoID0gKnM7Ci0gICAgICAgICAgICBQeU9iamVjdCAqdywgKng7Ci0KLSAgICAgICAgICAgIC8qIEdldCBtYXBwaW5nIChjaGFyIG9yZGluYWwgLT4gaW50ZWdlciwgVW5pY29kZSBjaGFyIG9yIE5vbmUpICovCi0gICAgICAgICAgICB3ID0gUHlMb25nX0Zyb21Mb25nKChsb25nKWNoKTsKLSAgICAgICAgICAgIGlmICh3ID09IE5VTEwpCi0gICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgeCA9IFB5T2JqZWN0X0dldEl0ZW0obWFwcGluZywgdyk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBpZiAoeCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfTG9va3VwRXJyb3IpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8qIE5vIG1hcHBpbmcgZm91bmQgbWVhbnM6IG1hcHBpbmcgaXMgdW5kZWZpbmVkLiAqLwotICAgICAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwotICAgICAgICAgICAgICAgICAgICBnb3RvIFVuZGVmaW5lZDsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvKiBBcHBseSBtYXBwaW5nICovCi0gICAgICAgICAgICBpZiAoeCA9PSBQeV9Ob25lKQotICAgICAgICAgICAgICAgIGdvdG8gVW5kZWZpbmVkOwotICAgICAgICAgICAgaWYgKFB5TG9uZ19DaGVjayh4KSkgewotICAgICAgICAgICAgICAgIGxvbmcgdmFsdWUgPSBQeUxvbmdfQVNfTE9ORyh4KTsKLSAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gMHhGRkZFKQotICAgICAgICAgICAgICAgICAgICBnb3RvIFVuZGVmaW5lZDsKLSAgICAgICAgICAgICAgICBpZiAodmFsdWUgPCAwIHx8IHZhbHVlID4gTUFYX1VOSUNPREUpIHsKLSAgICAgICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjaGFyYWN0ZXIgbWFwcGluZyBtdXN0IGJlIGluIHJhbmdlKDB4JWx4KSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZylNQVhfVU5JQ09ERSArIDEpOwotICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoeCk7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHVuaWNvZGVfcHV0Y2hhcigmdiwgJm91dHBvcywgdmFsdWUpIDwgMCkgewotICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoeCk7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChQeVVuaWNvZGVfQ2hlY2soeCkpIHsKLSAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IHRhcmdldHNpemU7Ci0KLSAgICAgICAgICAgICAgICBpZiAoUHlVbmljb2RlX1JFQURZKHgpID09IC0xKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih4KTsKLSAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB0YXJnZXRzaXplID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoeCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAodGFyZ2V0c2l6ZSA9PSAxKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8qIDEtMSBtYXBwaW5nICovCi0gICAgICAgICAgICAgICAgICAgIFB5X1VDUzQgdmFsdWUgPSBQeVVuaWNvZGVfUkVBRF9DSEFSKHgsIDApOwotICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gMHhGRkZFKQotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBVbmRlZmluZWQ7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh1bmljb2RlX3B1dGNoYXIoJnYsICZvdXRwb3MsIHZhbHVlKSA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih4KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmICh0YXJnZXRzaXplID4gMSkgewotICAgICAgICAgICAgICAgICAgICAvKiAxLW4gbWFwcGluZyAqLwotICAgICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0c2l6ZSA+IGV4dHJhY2hhcnMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJlc2l6ZSBmaXJzdCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBuZWVkZWQgPSAodGFyZ2V0c2l6ZSAtIGV4dHJhY2hhcnMpICsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0YXJnZXRzaXplIDw8IDIpOwotICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFjaGFycyArPSBuZWVkZWQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvKiBYWFggb3ZlcmZsb3cgZGV0ZWN0aW9uIG1pc3NpbmcgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1bmljb2RlX3Jlc2l6ZSgmdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfR0VUX0xFTkdUSCh2KSArIG5lZWRlZCkgPCAwKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih4KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHVuaWNvZGVfd2lkZW4oJnYsIG91dHBvcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX01BWF9DSEFSX1ZBTFVFKHgpKSA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih4KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfQ29weUNoYXJhY3RlcnModiwgb3V0cG9zLCB4LCAwLCB0YXJnZXRzaXplKTsKLSAgICAgICAgICAgICAgICAgICAgb3V0cG9zICs9IHRhcmdldHNpemU7Ci0gICAgICAgICAgICAgICAgICAgIGV4dHJhY2hhcnMgLT0gdGFyZ2V0c2l6ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgLyogMS0wIG1hcHBpbmc6IHNraXAgdGhlIGNoYXJhY3RlciAqLwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgLyogd3JvbmcgcmV0dXJuIHZhbHVlICovCi0gICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNoYXJhY3RlciBtYXBwaW5nIG11c3QgcmV0dXJuIGludGVnZXIsIE5vbmUgb3Igc3RyIik7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKHgpOwotICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFB5X0RFQ1JFRih4KTsKLSAgICAgICAgICAgICsrczsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotVW5kZWZpbmVkOgotICAgICAgICAgICAgLyogdW5kZWZpbmVkIG1hcHBpbmcgKi8KLSAgICAgICAgICAgIFB5X1hERUNSRUYoeCk7Ci0gICAgICAgICAgICBzdGFydGlucG9zID0gcy1zdGFydHM7Ci0gICAgICAgICAgICBlbmRpbnBvcyA9IHN0YXJ0aW5wb3MrMTsKLSAgICAgICAgICAgIGlmICh1bmljb2RlX2RlY29kZV9jYWxsX2Vycm9yaGFuZGxlcigKLSAgICAgICAgICAgICAgICAgICAgZXJyb3JzLCAmZXJyb3JIYW5kbGVyLAotICAgICAgICAgICAgICAgICAgICAiY2hhcm1hcCIsICJjaGFyYWN0ZXIgbWFwcyB0byA8dW5kZWZpbmVkPiIsCi0gICAgICAgICAgICAgICAgICAgICZzdGFydHMsICZlLCAmc3RhcnRpbnBvcywgJmVuZGlucG9zLCAmZXhjLCAmcywKLSAgICAgICAgICAgICAgICAgICAgJnYsICZvdXRwb3MpKSB7Ci0gICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgfQotICAgICAgICB9CisgICAgICAgIGlmIChjaGFybWFwX2RlY29kZV9tYXBwaW5nKHMsIHNpemUsIG1hcHBpbmcsIGVycm9ycywgJndyaXRlcikgPCAwKQorICAgICAgICAgICAgZ290byBvbkVycm9yOwogICAgIH0KLSAgICBpZiAodW5pY29kZV9yZXNpemUoJnYsIG91dHBvcykgPCAwKQotICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgUHlfWERFQ1JFRihlcnJvckhhbmRsZXIpOwotICAgIFB5X1hERUNSRUYoZXhjKTsKLSAgICByZXR1cm4gdW5pY29kZV9yZXN1bHQodik7CisgICAgcmV0dXJuIF9QeVVuaWNvZGVXcml0ZXJfRmluaXNoKCZ3cml0ZXIpOwogCiAgIG9uRXJyb3I6Ci0gICAgUHlfWERFQ1JFRihlcnJvckhhbmRsZXIpOwotICAgIFB5X1hERUNSRUYoZXhjKTsKLSAgICBQeV9YREVDUkVGKHYpOworICAgIF9QeVVuaWNvZGVXcml0ZXJfRGVhbGxvYygmd3JpdGVyKTsKICAgICByZXR1cm4gTlVMTDsKIH0KIApAQCAtODE2MywxMCArODM0MywxNCBAQAogICAgICAqIC0xPW5vdCBpbml0aWFsaXplZCwgMD11bmtub3duLCAxPXN0cmljdCwgMj1yZXBsYWNlLAogICAgICAqIDM9aWdub3JlLCA0PXhtbGNoYXJyZWZyZXBsYWNlICovCiAgICAgaW50IGtub3duX2Vycm9ySGFuZGxlciA9IC0xOworICAgIHZvaWQgKmRhdGE7CisgICAgaW50IGtpbmQ7CiAKICAgICBpZiAoUHlVbmljb2RlX1JFQURZKHVuaWNvZGUpID09IC0xKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBzaXplID0gUHlVbmljb2RlX0dFVF9MRU5HVEgodW5pY29kZSk7CisgICAgZGF0YSA9IFB5VW5pY29kZV9EQVRBKHVuaWNvZGUpOworICAgIGtpbmQgPSBQeVVuaWNvZGVfS0lORCh1bmljb2RlKTsKIAogICAgIC8qIERlZmF1bHQgdG8gTGF0aW4tMSAqLwogICAgIGlmIChtYXBwaW5nID09IE5VTEwpCkBAIC04MTgxLDcgKzgzNjUsNyBAQAogICAgICAgICByZXR1cm4gcmVzOwogCiAgICAgd2hpbGUgKGlucG9zPHNpemUpIHsKLSAgICAgICAgUHlfVUNTNCBjaCA9IFB5VW5pY29kZV9SRUFEX0NIQVIodW5pY29kZSwgaW5wb3MpOworICAgICAgICBQeV9VQ1M0IGNoID0gUHlVbmljb2RlX1JFQUQoa2luZCwgZGF0YSwgaW5wb3MpOwogICAgICAgICAvKiB0cnkgdG8gZW5jb2RlIGl0ICovCiAgICAgICAgIGNoYXJtYXBlbmNvZGVfcmVzdWx0IHggPSBjaGFybWFwZW5jb2RlX291dHB1dChjaCwgbWFwcGluZywgJnJlcywgJnJlc3Bvcyk7CiAgICAgICAgIGlmICh4PT1lbmNfRVhDRVBUSU9OKSAvKiBlcnJvciAqLwpAQCAtODI2NiwxOSArODQ1MCw2IEBACiAgICAgfQogfQogCi0vKiByYWlzZXMgYSBVbmljb2RlVHJhbnNsYXRlRXJyb3IgKi8KLXN0YXRpYyB2b2lkCi1yYWlzZV90cmFuc2xhdGVfZXhjZXB0aW9uKFB5T2JqZWN0ICoqZXhjZXB0aW9uT2JqZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqdW5pY29kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBzdGFydHBvcywgUHlfc3NpemVfdCBlbmRwb3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnJlYXNvbikKLXsKLSAgICBtYWtlX3RyYW5zbGF0ZV9leGNlcHRpb24oZXhjZXB0aW9uT2JqZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmljb2RlLCBzdGFydHBvcywgZW5kcG9zLCByZWFzb24pOwotICAgIGlmICgqZXhjZXB0aW9uT2JqZWN0ICE9IE5VTEwpCi0gICAgICAgIFB5Q29kZWNfU3RyaWN0RXJyb3JzKCpleGNlcHRpb25PYmplY3QpOwotfQotCiAvKiBlcnJvciBoYW5kbGluZyBjYWxsYmFjayBoZWxwZXI6CiAgICBidWlsZCBhcmd1bWVudHMsIGNhbGwgdGhlIGNhbGxiYWNrIGFuZCBjaGVjayB0aGUgYXJndW1lbnRzLAogICAgcHV0IHRoZSByZXN1bHQgaW50byBuZXdwb3MgYW5kIHJldHVybiB0aGUgcmVwbGFjZW1lbnQgc3RyaW5nLCB3aGljaApAQCAtODU1NCw4ICs4NzI1LDEwIEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBzd2l0Y2ggKGtub3duX2Vycm9ySGFuZGxlcikgewogICAgICAgICAgICAgY2FzZSAxOiAvKiBzdHJpY3QgKi8KLSAgICAgICAgICAgICAgICByYWlzZV90cmFuc2xhdGVfZXhjZXB0aW9uKCZleGMsIGlucHV0LCBjb2xsc3RhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xsZW5kLCByZWFzb24pOworICAgICAgICAgICAgICAgIG1ha2VfdHJhbnNsYXRlX2V4Y2VwdGlvbigmZXhjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dCwgY29sbHN0YXJ0LCBjb2xsZW5kLCByZWFzb24pOworICAgICAgICAgICAgICAgIGlmIChleGMgIT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgUHlDb2RlY19TdHJpY3RFcnJvcnMoZXhjKTsKICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgICAgICAgICBjYXNlIDI6IC8qIHJlcGxhY2UgKi8KICAgICAgICAgICAgICAgICAvKiBObyBuZWVkIHRvIGNoZWNrIGZvciBzcGFjZSwgdGhpcyBpcyBhIDE6MSByZXBsYWNlbWVudCAqLwpAQCAtOTE0Nyw3ICs5MzIwLDcgQEAKIAogICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoc2VsZikgPT0gLTEgfHwKICAgICAgICAgUHlVbmljb2RlX1JFQURZKHN1YnN0cmluZykgPT0gLTEpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gLTE7CiAKICAgICBpZiAoUHlVbmljb2RlX0dFVF9MRU5HVEgoc3Vic3RyaW5nKSA9PSAwKQogICAgICAgICByZXR1cm4gMTsKQEAgLTkxODUsNyArOTM1OCw2IEBACiAgICAgICAgICAgICAvKiBXZSBkbyBub3QgbmVlZCB0byBjb21wYXJlIDAgYW5kIGxlbihzdWJzdHJpbmcpLTEgYmVjYXVzZQogICAgICAgICAgICAgICAgdGhlIGlmIHN0YXRlbWVudCBhYm92ZSBlbnN1cmVkIGFscmVhZHkgdGhhdCB0aGV5IGFyZSBlcXVhbAogICAgICAgICAgICAgICAgd2hlbiB3ZSBlbmQgdXAgaGVyZS4gKi8KLSAgICAgICAgICAgIC8qIFRPRE86IGhvbm9yIGRpcmVjdGlvbiBhbmQgZG8gYSBmb3J3YXJkIG9yIGJhY2t3YXJkcyBzZWFyY2ggKi8KICAgICAgICAgICAgIGZvciAoaSA9IDE7IGkgPCBlbmRfc3ViOyArK2kpIHsKICAgICAgICAgICAgICAgICBpZiAoUHlVbmljb2RlX1JFQUQoa2luZF9zZWxmLCBkYXRhX3NlbGYsIG9mZnNldCArIGkpICE9CiAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9SRUFEKGtpbmRfc3ViLCBkYXRhX3N1YiwgaSkpCkBAIC05MzA5LDcgKzk0ODEsNyBAQAogewogICAgIFB5X3NzaXplX3QgajsKICAgICBpbnQgZmluYWxfc2lnbWE7Ci0gICAgUHlfVUNTNCBjOworICAgIFB5X1VDUzQgYyA9IDA7CiAgICAgLyogVSswM0EzIGlzIGluIHRoZSBGaW5hbF9TaWdtYSBjb250ZXh0IHdoZW4sIGl0IGlzIGZvdW5kIGxpa2UgdGhpczoKIAogICAgICBccHtjYXNlZH1ccHtjYXNlLWlnbm9yYWJsZX0qVSswM0EzIShccHtjYXNlLWlnbm9yYWJsZX0qXHB7Y2FzZWR9KQpAQCAtOTY1MSw0MSArOTgyMyw0OSBAQAogICAgICAgICAgICAgc2VwX2RhdGEgPSBQeVVuaWNvZGVfMUJZVEVfREFUQShzZXApOwogICAgIH0KICNlbmRpZgotICAgIGZvciAoaSA9IDAsIHJlc19vZmZzZXQgPSAwOyBpIDwgc2VxbGVuOyArK2kpIHsKLSAgICAgICAgUHlfc3NpemVfdCBpdGVtbGVuOwotICAgICAgICBpdGVtID0gaXRlbXNbaV07Ci0gICAgICAgIC8qIENvcHkgaXRlbSwgYW5kIG1heWJlIHRoZSBzZXBhcmF0b3IuICovCi0gICAgICAgIGlmIChpICYmIHNlcGxlbiAhPSAwKSB7Ci0gICAgICAgICAgICBpZiAodXNlX21lbWNweSkgeworICAgIGlmICh1c2VfbWVtY3B5KSB7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzZXFsZW47ICsraSkgeworICAgICAgICAgICAgUHlfc3NpemVfdCBpdGVtbGVuOworICAgICAgICAgICAgaXRlbSA9IGl0ZW1zW2ldOworCisgICAgICAgICAgICAvKiBDb3B5IGl0ZW0sIGFuZCBtYXliZSB0aGUgc2VwYXJhdG9yLiAqLworICAgICAgICAgICAgaWYgKGkgJiYgc2VwbGVuICE9IDApIHsKICAgICAgICAgICAgICAgICBQeV9NRU1DUFkocmVzX2RhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcF9kYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICBraW5kICogc2VwbGVuKTsKICAgICAgICAgICAgICAgICByZXNfZGF0YSArPSBraW5kICogc2VwbGVuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgX1B5VW5pY29kZV9GYXN0Q29weUNoYXJhY3RlcnMocmVzLCByZXNfb2Zmc2V0LCBzZXAsIDAsIHNlcGxlbik7Ci0gICAgICAgICAgICAgICAgcmVzX29mZnNldCArPSBzZXBsZW47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaXRlbWxlbiA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKGl0ZW0pOwotICAgICAgICBpZiAoaXRlbWxlbiAhPSAwKSB7Ci0gICAgICAgICAgICBpZiAodXNlX21lbWNweSkgeworCisgICAgICAgICAgICBpdGVtbGVuID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoaXRlbSk7CisgICAgICAgICAgICBpZiAoaXRlbWxlbiAhPSAwKSB7CiAgICAgICAgICAgICAgICAgUHlfTUVNQ1BZKHJlc19kYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfREFUQShpdGVtKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAga2luZCAqIGl0ZW1sZW4pOwogICAgICAgICAgICAgICAgIHJlc19kYXRhICs9IGtpbmQgKiBpdGVtbGVuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7CisgICAgICAgIH0KKyAgICAgICAgYXNzZXJ0KHJlc19kYXRhID09IFB5VW5pY29kZV8xQllURV9EQVRBKHJlcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICsga2luZCAqIFB5VW5pY29kZV9HRVRfTEVOR1RIKHJlcykpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgZm9yIChpID0gMCwgcmVzX29mZnNldCA9IDA7IGkgPCBzZXFsZW47ICsraSkgeworICAgICAgICAgICAgUHlfc3NpemVfdCBpdGVtbGVuOworICAgICAgICAgICAgaXRlbSA9IGl0ZW1zW2ldOworCisgICAgICAgICAgICAvKiBDb3B5IGl0ZW0sIGFuZCBtYXliZSB0aGUgc2VwYXJhdG9yLiAqLworICAgICAgICAgICAgaWYgKGkgJiYgc2VwbGVuICE9IDApIHsKKyAgICAgICAgICAgICAgICBfUHlVbmljb2RlX0Zhc3RDb3B5Q2hhcmFjdGVycyhyZXMsIHJlc19vZmZzZXQsIHNlcCwgMCwgc2VwbGVuKTsKKyAgICAgICAgICAgICAgICByZXNfb2Zmc2V0ICs9IHNlcGxlbjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaXRlbWxlbiA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKGl0ZW0pOworICAgICAgICAgICAgaWYgKGl0ZW1sZW4gIT0gMCkgewogICAgICAgICAgICAgICAgIF9QeVVuaWNvZGVfRmFzdENvcHlDaGFyYWN0ZXJzKHJlcywgcmVzX29mZnNldCwgaXRlbSwgMCwgaXRlbWxlbik7CiAgICAgICAgICAgICAgICAgcmVzX29mZnNldCArPSBpdGVtbGVuOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgfQotICAgIGlmICh1c2VfbWVtY3B5KQotICAgICAgICBhc3NlcnQocmVzX2RhdGEgPT0gUHlVbmljb2RlXzFCWVRFX0RBVEEocmVzKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBraW5kICogUHlVbmljb2RlX0dFVF9MRU5HVEgocmVzKSk7Ci0gICAgZWxzZQogICAgICAgICBhc3NlcnQocmVzX29mZnNldCA9PSBQeVVuaWNvZGVfR0VUX0xFTkdUSChyZXMpKTsKKyAgICB9CiAKICAgICBQeV9ERUNSRUYoZnNlcSk7CiAgICAgUHlfWERFQ1JFRihzZXApOwpAQCAtOTcxOCw4ICs5ODk4LDggQEAKICAgICAgICAgICAgIFB5X1VDUzQgKiB0b18gPSAoUHlfVUNTNCAqKSgoZGF0YSkpICsgKHN0YXJ0KTsgXAogICAgICAgICAgICAgZm9yICg7IGlfIDwgKGxlbmd0aCk7ICsraV8sICsrdG9fKSAqdG9fID0gKHZhbHVlKTsgXAogICAgICAgICAgICAgYnJlYWs7IFwKLSAgICAgICAgZGVmYXVsdDogYXNzZXJ0KDApOyBcCiAgICAgICAgIH0gXAorICAgICAgICBkZWZhdWx0OiBhc3NlcnQoMCk7IFwKICAgICAgICAgfSBcCiAgICAgfSB3aGlsZSAoMCkKIApAQCAtMTAwNzcsNiArMTAyNTcsMzEgQEAKICAgICByZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQKK3JlcGxhY2VfMWNoYXJfaW5wbGFjZShQeU9iamVjdCAqdSwgUHlfc3NpemVfdCBwb3MsCisgICAgICAgICAgICAgICAgICAgICAgUHlfVUNTNCB1MSwgUHlfVUNTNCB1MiwgUHlfc3NpemVfdCBtYXhjb3VudCkKK3sKKyAgICBpbnQga2luZCA9IFB5VW5pY29kZV9LSU5EKHUpOworICAgIHZvaWQgKmRhdGEgPSBQeVVuaWNvZGVfREFUQSh1KTsKKyAgICBQeV9zc2l6ZV90IGxlbiA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHUpOworICAgIGlmIChraW5kID09IFB5VW5pY29kZV8xQllURV9LSU5EKSB7CisgICAgICAgIHVjczFsaWJfcmVwbGFjZV8xY2hhcl9pbnBsYWNlKChQeV9VQ1MxICopZGF0YSArIHBvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFB5X1VDUzEgKilkYXRhICsgbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MSwgdTIsIG1heGNvdW50KTsKKyAgICB9CisgICAgZWxzZSBpZiAoa2luZCA9PSBQeVVuaWNvZGVfMkJZVEVfS0lORCkgeworICAgICAgICB1Y3MybGliX3JlcGxhY2VfMWNoYXJfaW5wbGFjZSgoUHlfVUNTMiAqKWRhdGEgKyBwb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQeV9VQ1MyICopZGF0YSArIGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTEsIHUyLCBtYXhjb3VudCk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBhc3NlcnQoa2luZCA9PSBQeVVuaWNvZGVfNEJZVEVfS0lORCk7CisgICAgICAgIHVjczRsaWJfcmVwbGFjZV8xY2hhcl9pbnBsYWNlKChQeV9VQ1M0ICopZGF0YSArIHBvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFB5X1VDUzQgKilkYXRhICsgbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MSwgdTIsIG1heGNvdW50KTsKKyAgICB9Cit9CisKIHN0YXRpYyBQeU9iamVjdCAqCiByZXBsYWNlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqc3RyMSwKICAgICAgICAgUHlPYmplY3QgKnN0cjIsIFB5X3NzaXplX3QgbWF4Y291bnQpCkBAIC0xMDA5Myw3ICsxMDI5OCw3IEBACiAgICAgUHlfc3NpemVfdCBsZW4xID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoc3RyMSk7CiAgICAgUHlfc3NpemVfdCBsZW4yID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoc3RyMik7CiAgICAgaW50IG1heXNocmluazsKLSAgICBQeV9VQ1M0IG1heGNoYXIsIG1heGNoYXJfc3RyMjsKKyAgICBQeV9VQ1M0IG1heGNoYXIsIG1heGNoYXJfc3RyMSwgbWF4Y2hhcl9zdHIyOwogCiAgICAgaWYgKG1heGNvdW50IDwgMCkKICAgICAgICAgbWF4Y291bnQgPSBQWV9TU0laRV9UX01BWDsKQEAgLTEwMTAyLDE1ICsxMDMwNywxNiBAQAogCiAgICAgaWYgKHN0cjEgPT0gc3RyMikKICAgICAgICAgZ290byBub3RoaW5nOwotICAgIGlmIChza2luZCA8IGtpbmQxKQotICAgICAgICAvKiBzdWJzdHJpbmcgdG9vIHdpZGUgdG8gYmUgcHJlc2VudCAqLwotICAgICAgICBnb3RvIG5vdGhpbmc7CiAKICAgICBtYXhjaGFyID0gUHlVbmljb2RlX01BWF9DSEFSX1ZBTFVFKHNlbGYpOworICAgIG1heGNoYXJfc3RyMSA9IFB5VW5pY29kZV9NQVhfQ0hBUl9WQUxVRShzdHIxKTsKKyAgICBpZiAobWF4Y2hhciA8IG1heGNoYXJfc3RyMSkKKyAgICAgICAgLyogc3Vic3RyaW5nIHRvbyB3aWRlIHRvIGJlIHByZXNlbnQgKi8KKyAgICAgICAgZ290byBub3RoaW5nOwogICAgIG1heGNoYXJfc3RyMiA9IFB5VW5pY29kZV9NQVhfQ0hBUl9WQUxVRShzdHIyKTsKICAgICAvKiBSZXBsYWNpbmcgc3RyMSB3aXRoIHN0cjIgbWF5IGNhdXNlIGEgbWF4Y2hhciByZWR1Y3Rpb24gaW4gdGhlCiAgICAgICAgcmVzdWx0IHN0cmluZy4gKi8KLSAgICBtYXlzaHJpbmsgPSAobWF4Y2hhcl9zdHIyIDwgbWF4Y2hhcik7CisgICAgbWF5c2hyaW5rID0gKG1heGNoYXJfc3RyMiA8IG1heGNoYXJfc3RyMSkgJiYgKG1heGNoYXIgPT0gbWF4Y2hhcl9zdHIxKTsKICAgICBtYXhjaGFyID0gUHlfTUFYKG1heGNoYXIsIG1heGNoYXJfc3RyMik7CiAKICAgICBpZiAobGVuMSA9PSBsZW4yKSB7CkBAIC0xMDEyMCwzNSArMTAzMjYsMTkgQEAKICAgICAgICAgaWYgKGxlbjEgPT0gMSkgewogICAgICAgICAgICAgLyogcmVwbGFjZSBjaGFyYWN0ZXJzICovCiAgICAgICAgICAgICBQeV9VQ1M0IHUxLCB1MjsKLSAgICAgICAgICAgIGludCBya2luZDsKLSAgICAgICAgICAgIFB5X3NzaXplX3QgaW5kZXgsIHBvczsKLSAgICAgICAgICAgIGNoYXIgKnNyYzsKKyAgICAgICAgICAgIFB5X3NzaXplX3QgcG9zOwogCi0gICAgICAgICAgICB1MSA9IFB5VW5pY29kZV9SRUFEX0NIQVIoc3RyMSwgMCk7Ci0gICAgICAgICAgICBwb3MgPSBmaW5kY2hhcihzYnVmLCBQeVVuaWNvZGVfS0lORChzZWxmKSwgc2xlbiwgdTEsIDEpOworICAgICAgICAgICAgdTEgPSBQeVVuaWNvZGVfUkVBRChraW5kMSwgYnVmMSwgMCk7CisgICAgICAgICAgICBwb3MgPSBmaW5kY2hhcihzYnVmLCBza2luZCwgc2xlbiwgdTEsIDEpOwogICAgICAgICAgICAgaWYgKHBvcyA8IDApCiAgICAgICAgICAgICAgICAgZ290byBub3RoaW5nOwotICAgICAgICAgICAgdTIgPSBQeVVuaWNvZGVfUkVBRF9DSEFSKHN0cjIsIDApOworICAgICAgICAgICAgdTIgPSBQeVVuaWNvZGVfUkVBRChraW5kMiwgYnVmMiwgMCk7CiAgICAgICAgICAgICB1ID0gUHlVbmljb2RlX05ldyhzbGVuLCBtYXhjaGFyKTsKICAgICAgICAgICAgIGlmICghdSkKICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICAgICAgX1B5VW5pY29kZV9GYXN0Q29weUNoYXJhY3RlcnModSwgMCwgc2VsZiwgMCwgc2xlbik7Ci0gICAgICAgICAgICBya2luZCA9IFB5VW5pY29kZV9LSU5EKHUpOwogCi0gICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUocmtpbmQsIFB5VW5pY29kZV9EQVRBKHUpLCBwb3MsIHUyKTsKLSAgICAgICAgICAgIGluZGV4ID0gMDsKLSAgICAgICAgICAgIHNyYyA9IHNidWY7Ci0gICAgICAgICAgICB3aGlsZSAoLS1tYXhjb3VudCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBwb3MrKzsKLSAgICAgICAgICAgICAgICBzcmMgKz0gcG9zICogUHlVbmljb2RlX0tJTkQoc2VsZik7Ci0gICAgICAgICAgICAgICAgc2xlbiAtPSBwb3M7Ci0gICAgICAgICAgICAgICAgaW5kZXggKz0gcG9zOwotICAgICAgICAgICAgICAgIHBvcyA9IGZpbmRjaGFyKHNyYywgUHlVbmljb2RlX0tJTkQoc2VsZiksIHNsZW4sIHUxLCAxKTsKLSAgICAgICAgICAgICAgICBpZiAocG9zIDwgMCkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKHJraW5kLCBQeVVuaWNvZGVfREFUQSh1KSwgaW5kZXggKyBwb3MsIHUyKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF9QeVVuaWNvZGVfRmFzdENvcHlDaGFyYWN0ZXJzKHUsIDAsIHNlbGYsIDAsIHNsZW4pOworICAgICAgICAgICAgcmVwbGFjZV8xY2hhcl9pbnBsYWNlKHUsIHBvcywgdTEsIHUyLCBtYXhjb3VudCk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBpbnQgcmtpbmQgPSBza2luZDsKQEAgLTEwNDYwLDkgKzEwNjUwLDI0IEBACiBzdGF0aWMgaW50CiB1bmljb2RlX2NvbXBhcmUoUHlPYmplY3QgKnN0cjEsIFB5T2JqZWN0ICpzdHIyKQogeworI2RlZmluZSBDT01QQVJFKFRZUEUxLCBUWVBFMikgXAorICAgIGRvIHsgXAorICAgICAgICBUWVBFMSogcDEgPSAoVFlQRTEgKilkYXRhMTsgXAorICAgICAgICBUWVBFMiogcDIgPSAoVFlQRTIgKilkYXRhMjsgXAorICAgICAgICBUWVBFMSogZW5kID0gcDEgKyBsZW47IFwKKyAgICAgICAgUHlfVUNTNCBjMSwgYzI7IFwKKyAgICAgICAgZm9yICg7IHAxICE9IGVuZDsgcDErKywgcDIrKykgeyBcCisgICAgICAgICAgICBjMSA9ICpwMTsgXAorICAgICAgICAgICAgYzIgPSAqcDI7IFwKKyAgICAgICAgICAgIGlmIChjMSAhPSBjMikgXAorICAgICAgICAgICAgICAgIHJldHVybiAoYzEgPCBjMikgPyAtMSA6IDE7IFwKKyAgICAgICAgfSBcCisgICAgfSBcCisgICAgd2hpbGUgKDApCisKICAgICBpbnQga2luZDEsIGtpbmQyOwogICAgIHZvaWQgKmRhdGExLCAqZGF0YTI7Ci0gICAgUHlfc3NpemVfdCBsZW4xLCBsZW4yLCBpOworICAgIFB5X3NzaXplX3QgbGVuMSwgbGVuMiwgbGVuOwogCiAgICAga2luZDEgPSBQeVVuaWNvZGVfS0lORChzdHIxKTsKICAgICBraW5kMiA9IFB5VW5pY29kZV9LSU5EKHN0cjIpOwpAQCAtMTA0NzAsMTkgKzEwNjc1LDExNiBAQAogICAgIGRhdGEyID0gUHlVbmljb2RlX0RBVEEoc3RyMik7CiAgICAgbGVuMSA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHN0cjEpOwogICAgIGxlbjIgPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChzdHIyKTsKKyAgICBsZW4gPSBQeV9NSU4obGVuMSwgbGVuMik7CiAKLSAgICBmb3IgKGkgPSAwOyBpIDwgbGVuMSAmJiBpIDwgbGVuMjsgKytpKSB7Ci0gICAgICAgIFB5X1VDUzQgYzEsIGMyOwotICAgICAgICBjMSA9IFB5VW5pY29kZV9SRUFEKGtpbmQxLCBkYXRhMSwgaSk7Ci0gICAgICAgIGMyID0gUHlVbmljb2RlX1JFQUQoa2luZDIsIGRhdGEyLCBpKTsKLQotICAgICAgICBpZiAoYzEgIT0gYzIpCi0gICAgICAgICAgICByZXR1cm4gKGMxIDwgYzIpID8gLTEgOiAxOworICAgIHN3aXRjaChraW5kMSkgeworICAgIGNhc2UgUHlVbmljb2RlXzFCWVRFX0tJTkQ6CisgICAgeworICAgICAgICBzd2l0Y2goa2luZDIpIHsKKyAgICAgICAgY2FzZSBQeVVuaWNvZGVfMUJZVEVfS0lORDoKKyAgICAgICAgeworICAgICAgICAgICAgaW50IGNtcCA9IG1lbWNtcChkYXRhMSwgZGF0YTIsIGxlbik7CisgICAgICAgICAgICAvKiBub3JtYWxpemUgcmVzdWx0IG9mIG1lbWNtcCgpIGludG8gdGhlIHJhbmdlIFstMTsgMV0gKi8KKyAgICAgICAgICAgIGlmIChjbXAgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIGlmIChjbXAgPiAwKQorICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBQeVVuaWNvZGVfMkJZVEVfS0lORDoKKyAgICAgICAgICAgIENPTVBBUkUoUHlfVUNTMSwgUHlfVUNTMik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQeVVuaWNvZGVfNEJZVEVfS0lORDoKKyAgICAgICAgICAgIENPTVBBUkUoUHlfVUNTMSwgUHlfVUNTNCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGFzc2VydCgwKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQeVVuaWNvZGVfMkJZVEVfS0lORDoKKyAgICB7CisgICAgICAgIHN3aXRjaChraW5kMikgeworICAgICAgICBjYXNlIFB5VW5pY29kZV8xQllURV9LSU5EOgorICAgICAgICAgICAgQ09NUEFSRShQeV9VQ1MyLCBQeV9VQ1MxKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFB5VW5pY29kZV8yQllURV9LSU5EOgorICAgICAgICB7CisgICAgICAgICAgICBDT01QQVJFKFB5X1VDUzIsIFB5X1VDUzIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBQeVVuaWNvZGVfNEJZVEVfS0lORDoKKyAgICAgICAgICAgIENPTVBBUkUoUHlfVUNTMiwgUHlfVUNTNCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGFzc2VydCgwKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQeVVuaWNvZGVfNEJZVEVfS0lORDoKKyAgICB7CisgICAgICAgIHN3aXRjaChraW5kMikgeworICAgICAgICBjYXNlIFB5VW5pY29kZV8xQllURV9LSU5EOgorICAgICAgICAgICAgQ09NUEFSRShQeV9VQ1M0LCBQeV9VQ1MxKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFB5VW5pY29kZV8yQllURV9LSU5EOgorICAgICAgICAgICAgQ09NUEFSRShQeV9VQ1M0LCBQeV9VQ1MyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFB5VW5pY29kZV80QllURV9LSU5EOgorICAgICAgICB7CisjaWYgZGVmaW5lZChIQVZFX1dNRU1DTVApICYmIFNJWkVPRl9XQ0hBUl9UID09IDQKKyAgICAgICAgICAgIGludCBjbXAgPSB3bWVtY21wKCh3Y2hhcl90ICopZGF0YTEsICh3Y2hhcl90ICopZGF0YTIsIGxlbik7CisgICAgICAgICAgICAvKiBub3JtYWxpemUgcmVzdWx0IG9mIHdtZW1jbXAoKSBpbnRvIHRoZSByYW5nZSBbLTE7IDFdICovCisgICAgICAgICAgICBpZiAoY21wIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICBpZiAoY21wID4gMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyNlbHNlCisgICAgICAgICAgICBDT01QQVJFKFB5X1VDUzQsIFB5X1VDUzQpOworI2VuZGlmCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYXNzZXJ0KDApOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICBhc3NlcnQoMCk7CiAgICAgfQogCi0gICAgcmV0dXJuIChsZW4xIDwgbGVuMikgPyAtMSA6IChsZW4xICE9IGxlbjIpOworICAgIGlmIChsZW4xID09IGxlbjIpCisgICAgICAgIHJldHVybiAwOworICAgIGlmIChsZW4xIDwgbGVuMikKKyAgICAgICAgcmV0dXJuIC0xOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIDE7CisKKyN1bmRlZiBDT01QQVJFCiB9CiAKK1B5X0xPQ0FMKGludCkKK3VuaWNvZGVfY29tcGFyZV9lcShQeU9iamVjdCAqc3RyMSwgUHlPYmplY3QgKnN0cjIpCit7CisgICAgaW50IGtpbmQ7CisgICAgdm9pZCAqZGF0YTEsICpkYXRhMjsKKyAgICBQeV9zc2l6ZV90IGxlbjsKKyAgICBpbnQgY21wOworCisgICAgbGVuID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoc3RyMSk7CisgICAgaWYgKFB5VW5pY29kZV9HRVRfTEVOR1RIKHN0cjIpICE9IGxlbikKKyAgICAgICAgcmV0dXJuIDA7CisgICAga2luZCA9IFB5VW5pY29kZV9LSU5EKHN0cjEpOworICAgIGlmIChQeVVuaWNvZGVfS0lORChzdHIyKSAhPSBraW5kKQorICAgICAgICByZXR1cm4gMDsKKyAgICBkYXRhMSA9IFB5VW5pY29kZV9EQVRBKHN0cjEpOworICAgIGRhdGEyID0gUHlVbmljb2RlX0RBVEEoc3RyMik7CisKKyAgICBjbXAgPSBtZW1jbXAoZGF0YTEsIGRhdGEyLCBsZW4gKiBraW5kKTsKKyAgICByZXR1cm4gKGNtcCA9PSAwKTsKK30KKworCiBpbnQKIFB5VW5pY29kZV9Db21wYXJlKFB5T2JqZWN0ICpsZWZ0LCBQeU9iamVjdCAqcmlnaHQpCiB7CkBAIC0xMDQ5MCw2ICsxMDc5MiwxMSBAQAogICAgICAgICBpZiAoUHlVbmljb2RlX1JFQURZKGxlZnQpID09IC0xIHx8CiAgICAgICAgICAgICBQeVVuaWNvZGVfUkVBRFkocmlnaHQpID09IC0xKQogICAgICAgICAgICAgcmV0dXJuIC0xOworCisgICAgICAgIC8qIGEgc3RyaW5nIGlzIGVxdWFsIHRvIGl0c2VsZiAqLworICAgICAgICBpZiAobGVmdCA9PSByaWdodCkKKyAgICAgICAgICAgIHJldHVybiAwOworCiAgICAgICAgIHJldHVybiB1bmljb2RlX2NvbXBhcmUobGVmdCwgcmlnaHQpOwogICAgIH0KICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLApAQCAtMTA1MDAsMjkgKzEwODA3LDU5IEBACiB9CiAKIGludAorX1B5VW5pY29kZV9Db21wYXJlV2l0aElkKFB5T2JqZWN0ICpsZWZ0LCBfUHlfSWRlbnRpZmllciAqcmlnaHQpCit7CisgICAgUHlPYmplY3QgKnJpZ2h0X3N0ciA9IF9QeVVuaWNvZGVfRnJvbUlkKHJpZ2h0KTsgICAvKiBib3Jyb3dlZCAqLworICAgIGlmIChyaWdodF9zdHIgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIHJldHVybiBQeVVuaWNvZGVfQ29tcGFyZShsZWZ0LCByaWdodF9zdHIpOworfQorCitpbnQKIFB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKFB5T2JqZWN0KiB1bmksIGNvbnN0IGNoYXIqIHN0cikKIHsKICAgICBQeV9zc2l6ZV90IGk7CiAgICAgaW50IGtpbmQ7Ci0gICAgdm9pZCAqZGF0YTsKICAgICBQeV9VQ1M0IGNocjsKIAogICAgIGFzc2VydChfUHlVbmljb2RlX0NIRUNLKHVuaSkpOwogICAgIGlmIChQeVVuaWNvZGVfUkVBRFkodW5pKSA9PSAtMSkKICAgICAgICAgcmV0dXJuIC0xOwogICAgIGtpbmQgPSBQeVVuaWNvZGVfS0lORCh1bmkpOwotICAgIGRhdGEgPSBQeVVuaWNvZGVfREFUQSh1bmkpOwotICAgIC8qIENvbXBhcmUgVW5pY29kZSBzdHJpbmcgYW5kIHNvdXJjZSBjaGFyYWN0ZXIgc2V0IHN0cmluZyAqLwotICAgIGZvciAoaSA9IDA7IChjaHIgPSBQeVVuaWNvZGVfUkVBRChraW5kLCBkYXRhLCBpKSkgJiYgc3RyW2ldOyBpKyspCi0gICAgICAgIGlmIChjaHIgIT0gc3RyW2ldKQotICAgICAgICAgICAgcmV0dXJuIChjaHIgPCAodW5zaWduZWQgY2hhcikoc3RyW2ldKSkgPyAtMSA6IDE7Ci0gICAgLyogVGhpcyBjaGVjayBrZWVwcyBQeXRob24gc3RyaW5ncyB0aGF0IGVuZCBpbiAnXDAnIGZyb20gY29tcGFyaW5nIGVxdWFsCi0gICAgIHRvIEMgc3RyaW5ncyBpZGVudGljYWwgdXAgdG8gdGhhdCBwb2ludC4gKi8KLSAgICBpZiAoUHlVbmljb2RlX0dFVF9MRU5HVEgodW5pKSAhPSBpIHx8IGNocikKLSAgICAgICAgcmV0dXJuIDE7IC8qIHVuaSBpcyBsb25nZXIgKi8KLSAgICBpZiAoc3RyW2ldKQotICAgICAgICByZXR1cm4gLTE7IC8qIHN0ciBpcyBsb25nZXIgKi8KLSAgICByZXR1cm4gMDsKKyAgICBpZiAoa2luZCA9PSBQeVVuaWNvZGVfMUJZVEVfS0lORCkgeworICAgICAgICBjb25zdCB2b2lkICpkYXRhID0gUHlVbmljb2RlXzFCWVRFX0RBVEEodW5pKTsKKyAgICAgICAgc2l6ZV90IGxlbjEgPSAoc2l6ZV90KVB5VW5pY29kZV9HRVRfTEVOR1RIKHVuaSk7CisgICAgICAgIHNpemVfdCBsZW4sIGxlbjIgPSBzdHJsZW4oc3RyKTsKKyAgICAgICAgaW50IGNtcDsKKworICAgICAgICBsZW4gPSBQeV9NSU4obGVuMSwgbGVuMik7CisgICAgICAgIGNtcCA9IG1lbWNtcChkYXRhLCBzdHIsIGxlbik7CisgICAgICAgIGlmIChjbXAgIT0gMCkgeworICAgICAgICAgICAgaWYgKGNtcCA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9CisgICAgICAgIGlmIChsZW4xID4gbGVuMikKKyAgICAgICAgICAgIHJldHVybiAxOyAvKiB1bmkgaXMgbG9uZ2VyICovCisgICAgICAgIGlmIChsZW4yID4gbGVuMSkKKyAgICAgICAgICAgIHJldHVybiAtMTsgLyogc3RyIGlzIGxvbmdlciAqLworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHZvaWQgKmRhdGEgPSBQeVVuaWNvZGVfREFUQSh1bmkpOworICAgICAgICAvKiBDb21wYXJlIFVuaWNvZGUgc3RyaW5nIGFuZCBzb3VyY2UgY2hhcmFjdGVyIHNldCBzdHJpbmcgKi8KKyAgICAgICAgZm9yIChpID0gMDsgKGNociA9IFB5VW5pY29kZV9SRUFEKGtpbmQsIGRhdGEsIGkpKSAmJiBzdHJbaV07IGkrKykKKyAgICAgICAgICAgIGlmIChjaHIgIT0gc3RyW2ldKQorICAgICAgICAgICAgICAgIHJldHVybiAoY2hyIDwgKHVuc2lnbmVkIGNoYXIpKHN0cltpXSkpID8gLTEgOiAxOworICAgICAgICAvKiBUaGlzIGNoZWNrIGtlZXBzIFB5dGhvbiBzdHJpbmdzIHRoYXQgZW5kIGluICdcMCcgZnJvbSBjb21wYXJpbmcgZXF1YWwKKyAgICAgICAgIHRvIEMgc3RyaW5ncyBpZGVudGljYWwgdXAgdG8gdGhhdCBwb2ludC4gKi8KKyAgICAgICAgaWYgKFB5VW5pY29kZV9HRVRfTEVOR1RIKHVuaSkgIT0gaSB8fCBjaHIpCisgICAgICAgICAgICByZXR1cm4gMTsgLyogdW5pIGlzIGxvbmdlciAqLworICAgICAgICBpZiAoc3RyW2ldKQorICAgICAgICAgICAgcmV0dXJuIC0xOyAvKiBzdHIgaXMgbG9uZ2VyICovCisgICAgICAgIHJldHVybiAwOworICAgIH0KIH0KIAogCkBAIC0xMDUzMywzNiArMTA4NzAsNDMgQEAKIFB5VW5pY29kZV9SaWNoQ29tcGFyZShQeU9iamVjdCAqbGVmdCwgUHlPYmplY3QgKnJpZ2h0LCBpbnQgb3ApCiB7CiAgICAgaW50IHJlc3VsdDsKKyAgICBQeU9iamVjdCAqdjsKIAotICAgIGlmIChQeVVuaWNvZGVfQ2hlY2sobGVmdCkgJiYgUHlVbmljb2RlX0NoZWNrKHJpZ2h0KSkgewotICAgICAgICBQeU9iamVjdCAqdjsKLSAgICAgICAgaWYgKFB5VW5pY29kZV9SRUFEWShsZWZ0KSA9PSAtMSB8fAotICAgICAgICAgICAgUHlVbmljb2RlX1JFQURZKHJpZ2h0KSA9PSAtMSkKKyAgICBpZiAoIVB5VW5pY29kZV9DaGVjayhsZWZ0KSB8fCAhUHlVbmljb2RlX0NoZWNrKHJpZ2h0KSkKKyAgICAgICAgUHlfUkVUVVJOX05PVElNUExFTUVOVEVEOworCisgICAgaWYgKFB5VW5pY29kZV9SRUFEWShsZWZ0KSA9PSAtMSB8fAorICAgICAgICBQeVVuaWNvZGVfUkVBRFkocmlnaHQpID09IC0xKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChsZWZ0ID09IHJpZ2h0KSB7CisgICAgICAgIHN3aXRjaCAob3ApIHsKKyAgICAgICAgY2FzZSBQeV9FUToKKyAgICAgICAgY2FzZSBQeV9MRToKKyAgICAgICAgY2FzZSBQeV9HRToKKyAgICAgICAgICAgIC8qIGEgc3RyaW5nIGlzIGVxdWFsIHRvIGl0c2VsZiAqLworICAgICAgICAgICAgdiA9IFB5X1RydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQeV9ORToKKyAgICAgICAgY2FzZSBQeV9MVDoKKyAgICAgICAgY2FzZSBQeV9HVDoKKyAgICAgICAgICAgIHYgPSBQeV9GYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUHlFcnJfQmFkQXJndW1lbnQoKTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICBpZiAoUHlVbmljb2RlX0dFVF9MRU5HVEgobGVmdCkgIT0gUHlVbmljb2RlX0dFVF9MRU5HVEgocmlnaHQpIHx8Ci0gICAgICAgICAgICBQeVVuaWNvZGVfS0lORChsZWZ0KSAhPSBQeVVuaWNvZGVfS0lORChyaWdodCkpIHsKLSAgICAgICAgICAgIGlmIChvcCA9PSBQeV9FUSkgewotICAgICAgICAgICAgICAgIFB5X0lOQ1JFRihQeV9GYWxzZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFB5X0ZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG9wID09IFB5X05FKSB7Ci0gICAgICAgICAgICAgICAgUHlfSU5DUkVGKFB5X1RydWUpOwotICAgICAgICAgICAgICAgIHJldHVybiBQeV9UcnVlOwotICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGlmIChsZWZ0ID09IHJpZ2h0KQotICAgICAgICAgICAgcmVzdWx0ID0gMDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmVzdWx0ID0gdW5pY29kZV9jb21wYXJlKGxlZnQsIHJpZ2h0KTsKKyAgICB9CisgICAgZWxzZSBpZiAob3AgPT0gUHlfRVEgfHwgb3AgPT0gUHlfTkUpIHsKKyAgICAgICAgcmVzdWx0ID0gdW5pY29kZV9jb21wYXJlX2VxKGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgcmVzdWx0IF49IChvcCA9PSBQeV9ORSk7CisgICAgICAgIHYgPSBURVNUX0NPTkQocmVzdWx0KTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHJlc3VsdCA9IHVuaWNvZGVfY29tcGFyZShsZWZ0LCByaWdodCk7CiAKICAgICAgICAgLyogQ29udmVydCB0aGUgcmV0dXJuIHZhbHVlIHRvIGEgQm9vbGVhbiAqLwogICAgICAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgICAgIGNhc2UgUHlfRVE6Ci0gICAgICAgICAgICB2ID0gVEVTVF9DT05EKHJlc3VsdCA9PSAwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFB5X05FOgotICAgICAgICAgICAgdiA9IFRFU1RfQ09ORChyZXN1bHQgIT0gMCk7Ci0gICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBQeV9MRToKICAgICAgICAgICAgIHYgPSBURVNUX0NPTkQocmVzdWx0IDw9IDApOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xMDU3OSwxOCArMTA5MjMsMTYgQEAKICAgICAgICAgICAgIFB5RXJyX0JhZEFyZ3VtZW50KCk7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQotICAgICAgICBQeV9JTkNSRUYodik7Ci0gICAgICAgIHJldHVybiB2OwogICAgIH0KLQotICAgIFB5X1JFVFVSTl9OT1RJTVBMRU1FTlRFRDsKKyAgICBQeV9JTkNSRUYodik7CisgICAgcmV0dXJuIHY7CiB9CiAKIGludAogUHlVbmljb2RlX0NvbnRhaW5zKFB5T2JqZWN0ICpjb250YWluZXIsIFB5T2JqZWN0ICplbGVtZW50KQogewogICAgIFB5T2JqZWN0ICpzdHIsICpzdWI7Ci0gICAgaW50IGtpbmQxLCBraW5kMiwga2luZDsKKyAgICBpbnQga2luZDEsIGtpbmQyOwogICAgIHZvaWQgKmJ1ZjEsICpidWYyOwogICAgIFB5X3NzaXplX3QgbGVuMSwgbGVuMjsKICAgICBpbnQgcmVzdWx0OwpAQCAtMTA2MDksMjMgKzEwOTUxLDE4IEBACiAgICAgICAgIFB5X0RFQ1JFRihzdWIpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQotICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoc3ViKSA9PSAtMSB8fCBQeVVuaWNvZGVfUkVBRFkoc3RyKSA9PSAtMSkgewotICAgICAgICBQeV9ERUNSRUYoc3ViKTsKLSAgICAgICAgUHlfREVDUkVGKHN0cik7Ci0gICAgfQogCiAgICAga2luZDEgPSBQeVVuaWNvZGVfS0lORChzdHIpOwogICAgIGtpbmQyID0gUHlVbmljb2RlX0tJTkQoc3ViKTsKLSAgICBraW5kID0ga2luZDE7CiAgICAgYnVmMSA9IFB5VW5pY29kZV9EQVRBKHN0cik7CiAgICAgYnVmMiA9IFB5VW5pY29kZV9EQVRBKHN1Yik7Ci0gICAgaWYgKGtpbmQyICE9IGtpbmQpIHsKLSAgICAgICAgaWYgKGtpbmQyID4ga2luZCkgeworICAgIGlmIChraW5kMiAhPSBraW5kMSkgeworICAgICAgICBpZiAoa2luZDIgPiBraW5kMSkgewogICAgICAgICAgICAgUHlfREVDUkVGKHN1Yik7CiAgICAgICAgICAgICBQeV9ERUNSRUYoc3RyKTsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9Ci0gICAgICAgIGJ1ZjIgPSBfUHlVbmljb2RlX0FzS2luZChzdWIsIGtpbmQpOworICAgICAgICBidWYyID0gX1B5VW5pY29kZV9Bc0tpbmQoc3ViLCBraW5kMSk7CiAgICAgfQogICAgIGlmICghYnVmMikgewogICAgICAgICBQeV9ERUNSRUYoc3ViKTsKQEAgLTEwNjM1LDcgKzEwOTcyLDcgQEAKICAgICBsZW4xID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoc3RyKTsKICAgICBsZW4yID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoc3ViKTsKIAotICAgIHN3aXRjaCAoa2luZCkgeworICAgIHN3aXRjaCAoa2luZDEpIHsKICAgICBjYXNlIFB5VW5pY29kZV8xQllURV9LSU5EOgogICAgICAgICByZXN1bHQgPSB1Y3MxbGliX2ZpbmQoYnVmMSwgbGVuMSwgYnVmMiwgbGVuMiwgMCkgIT0gLTE7CiAgICAgICAgIGJyZWFrOwpAQCAtMTA2NTMsNyArMTA5OTAsNyBAQAogICAgIFB5X0RFQ1JFRihzdHIpOwogICAgIFB5X0RFQ1JFRihzdWIpOwogCi0gICAgaWYgKGtpbmQyICE9IGtpbmQpCisgICAgaWYgKGtpbmQyICE9IGtpbmQxKQogICAgICAgICBQeU1lbV9GcmVlKGJ1ZjIpOwogCiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTEwNzI5LDcgKzExMDY2LDggQEAKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBsZWZ0ID0gKnBfbGVmdDsKLSAgICBpZiAocmlnaHQgPT0gTlVMTCB8fCBsZWZ0ID09IE5VTEwgfHwgIVB5VW5pY29kZV9DaGVjayhsZWZ0KSkgeworICAgIGlmIChyaWdodCA9PSBOVUxMIHx8IGxlZnQgPT0gTlVMTAorICAgICAgICB8fCAhUHlVbmljb2RlX0NoZWNrKGxlZnQpIHx8ICFQeVVuaWNvZGVfQ2hlY2socmlnaHQpKSB7CiAgICAgICAgIGlmICghUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgICAgIFB5RXJyX0JhZEludGVybmFsQ2FsbCgpOwogICAgICAgICBnb3RvIGVycm9yOwpAQCAtMTA3NjksMTUgKzExMTA3LDkgQEAKICAgICAgICAgJiYgIShQeVVuaWNvZGVfSVNfQVNDSUkobGVmdCkgJiYgIVB5VW5pY29kZV9JU19BU0NJSShyaWdodCkpKQogICAgIHsKICAgICAgICAgLyogYXBwZW5kIGlucGxhY2UgKi8KLSAgICAgICAgaWYgKHVuaWNvZGVfcmVzaXplKHBfbGVmdCwgbmV3X2xlbikgIT0gMCkgewotICAgICAgICAgICAgLyogWFhYIGlmIF9QeVVuaWNvZGVfUmVzaXplKCkgZmFpbHMsICdsZWZ0JyBoYXMgYmVlbgotICAgICAgICAgICAgICogZGVhbGxvY2F0ZWQgc28gaXQgY2Fubm90IGJlIHB1dCBiYWNrIGludG8KLSAgICAgICAgICAgICAqICd2YXJpYWJsZScuICBUaGUgTWVtb3J5RXJyb3IgaXMgcmFpc2VkIHdoZW4gdGhlcmUKLSAgICAgICAgICAgICAqIGlzIG5vIHZhbHVlIGluICd2YXJpYWJsZScsIHdoaWNoIG1pZ2h0ICh2ZXJ5Ci0gICAgICAgICAgICAgKiByZW1vdGVseSkgYmUgYSBjYXVzZSBvZiBpbmNvbXBhdGliaWxpdGllcy4KLSAgICAgICAgICAgICAqLworICAgICAgICBpZiAodW5pY29kZV9yZXNpemUocF9sZWZ0LCBuZXdfbGVuKSAhPSAwKQogICAgICAgICAgICAgZ290byBlcnJvcjsKLSAgICAgICAgfQorCiAgICAgICAgIC8qIGNvcHkgJ3JpZ2h0JyBpbnRvIHRoZSBuZXdseSBhbGxvY2F0ZWQgYXJlYSBvZiAnbGVmdCcgKi8KICAgICAgICAgX1B5VW5pY29kZV9GYXN0Q29weUNoYXJhY3RlcnMoKnBfbGVmdCwgbGVmdF9sZW4sIHJpZ2h0LCAwLCByaWdodF9sZW4pOwogICAgIH0KQEAgLTEwODE5LDcgKzExMTUxLDcgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiB1bmljb2RlX2NvdW50KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICBQeU9iamVjdCAqc3Vic3RyaW5nOworICAgIFB5T2JqZWN0ICpzdWJzdHJpbmcgPSBOVUxMOwogICAgIFB5X3NzaXplX3Qgc3RhcnQgPSAwOwogICAgIFB5X3NzaXplX3QgZW5kID0gUFlfU1NJWkVfVF9NQVg7CiAgICAgUHlPYmplY3QgKnJlc3VsdDsKQEAgLTEwODMzLDggKzExMTY1LDEwIEBACiAKICAgICBraW5kMSA9IFB5VW5pY29kZV9LSU5EKHNlbGYpOwogICAgIGtpbmQyID0gUHlVbmljb2RlX0tJTkQoc3Vic3RyaW5nKTsKLSAgICBpZiAoa2luZDIgPiBraW5kMSkKKyAgICBpZiAoa2luZDIgPiBraW5kMSkgeworICAgICAgICBQeV9ERUNSRUYoc3Vic3RyaW5nKTsKICAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZygwKTsKKyAgICB9CiAgICAga2luZCA9IGtpbmQxOwogICAgIGJ1ZjEgPSBQeVVuaWNvZGVfREFUQShzZWxmKTsKICAgICBidWYyID0gUHlVbmljb2RlX0RBVEEoc3Vic3RyaW5nKTsKQEAgLTEwOTA1LDIzICsxMTIzOSwyNSBAQAogfQogCiBQeURvY19TVFJWQVIoZXhwYW5kdGFic19fZG9jX18sCi0gICAgICAgICAgICAgIlMuZXhwYW5kdGFicyhbdGFic2l6ZV0pIC0+IHN0clxuXAorICAgICAgICAgICAgICJTLmV4cGFuZHRhYnModGFic2l6ZT04KSAtPiBzdHJcblwKIFxuXAogUmV0dXJuIGEgY29weSBvZiBTIHdoZXJlIGFsbCB0YWIgY2hhcmFjdGVycyBhcmUgZXhwYW5kZWQgdXNpbmcgc3BhY2VzLlxuXAogSWYgdGFic2l6ZSBpcyBub3QgZ2l2ZW4sIGEgdGFiIHNpemUgb2YgOCBjaGFyYWN0ZXJzIGlzIGFzc3VtZWQuIik7CiAKIHN0YXRpYyBQeU9iamVjdCoKLXVuaWNvZGVfZXhwYW5kdGFicyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit1bmljb2RlX2V4cGFuZHRhYnMoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKIHsKICAgICBQeV9zc2l6ZV90IGksIGosIGxpbmVfcG9zLCBzcmNfbGVuLCBpbmNyOwogICAgIFB5X1VDUzQgY2g7CiAgICAgUHlPYmplY3QgKnU7CiAgICAgdm9pZCAqc3JjX2RhdGEsICpkZXN0X2RhdGE7CisgICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJ0YWJzaXplIiwgMH07CiAgICAgaW50IHRhYnNpemUgPSA4OwogICAgIGludCBraW5kOwogICAgIGludCBmb3VuZDsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifGk6ZXhwYW5kdGFicyIsICZ0YWJzaXplKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAifGk6ZXhwYW5kdGFicyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3dsaXN0LCAmdGFic2l6ZSkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgaWYgKFB5VW5pY29kZV9SRUFEWShzZWxmKSA9PSAtMSkKQEAgLTExMDAzLDE5ICsxMTMzOSwyMyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIHVuaWNvZGVfZmluZChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgUHlPYmplY3QgKnN1YnN0cmluZzsKLSAgICBQeV9zc2l6ZV90IHN0YXJ0OwotICAgIFB5X3NzaXplX3QgZW5kOworICAgIFB5T2JqZWN0ICpzdWJzdHJpbmcgPSBOVUxMOworICAgIFB5X3NzaXplX3Qgc3RhcnQgPSAwOworICAgIFB5X3NzaXplX3QgZW5kID0gMDsKICAgICBQeV9zc2l6ZV90IHJlc3VsdDsKIAogICAgIGlmICghc3RyaW5nbGliX3BhcnNlX2FyZ3NfZmluZHNfdW5pY29kZSgiZmluZCIsIGFyZ3MsICZzdWJzdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdGFydCwgJmVuZCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgaWYgKFB5VW5pY29kZV9SRUFEWShzZWxmKSA9PSAtMSkKKyAgICBpZiAoUHlVbmljb2RlX1JFQURZKHNlbGYpID09IC0xKSB7CisgICAgICAgIFB5X0RFQ1JFRihzdWJzdHJpbmcpOwogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAoUHlVbmljb2RlX1JFQURZKHN1YnN0cmluZykgPT0gLTEpCisgICAgfQorICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoc3Vic3RyaW5nKSA9PSAtMSkgeworICAgICAgICBQeV9ERUNSRUYoc3Vic3RyaW5nKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogCiAgICAgcmVzdWx0ID0gYW55X2ZpbmRfc2xpY2UoMSwgc2VsZiwgc3Vic3RyaW5nLCBzdGFydCwgZW5kKTsKIApAQCAtMTEwMzMsNyArMTEzNzMsNiBAQAogICAgIHZvaWQgKmRhdGE7CiAgICAgZW51bSBQeVVuaWNvZGVfS2luZCBraW5kOwogICAgIFB5X1VDUzQgY2g7Ci0gICAgUHlPYmplY3QgKnJlczsKIAogICAgIGlmICghUHlVbmljb2RlX0NoZWNrKHNlbGYpIHx8IFB5VW5pY29kZV9SRUFEWShzZWxmKSA9PSAtMSkgewogICAgICAgICBQeUVycl9CYWRBcmd1bWVudCgpOwpAQCAtMTEwNDYsMTcgKzExMzg1LDcgQEAKICAgICBraW5kID0gUHlVbmljb2RlX0tJTkQoc2VsZik7CiAgICAgZGF0YSA9IFB5VW5pY29kZV9EQVRBKHNlbGYpOwogICAgIGNoID0gUHlVbmljb2RlX1JFQUQoa2luZCwgZGF0YSwgaW5kZXgpOwotICAgIGlmIChjaCA8IDI1NikKLSAgICAgICAgcmV0dXJuIGdldF9sYXRpbjFfY2hhcihjaCk7Ci0KLSAgICByZXMgPSBQeVVuaWNvZGVfTmV3KDEsIGNoKTsKLSAgICBpZiAocmVzID09IE5VTEwpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGtpbmQgPSBQeVVuaWNvZGVfS0lORChyZXMpOwotICAgIGRhdGEgPSBQeVVuaWNvZGVfREFUQShyZXMpOwotICAgIFB5VW5pY29kZV9XUklURShraW5kLCBkYXRhLCAwLCBjaCk7Ci0gICAgYXNzZXJ0KF9QeVVuaWNvZGVfQ2hlY2tDb25zaXN0ZW5jeShyZXMsIDEpKTsKLSAgICByZXR1cm4gcmVzOworICAgIHJldHVybiB1bmljb2RlX2NoYXIoY2gpOwogfQogCiAvKiBCZWxpZXZlIGl0IG9yIG5vdCwgdGhpcyBwcm9kdWNlcyB0aGUgc2FtZSB2YWx1ZSBmb3IgQVNDSUkgc3RyaW5ncwpAQCAtMTEwODMsNDMgKzExNDEyLDExIEBACiAgICAgICAgIF9QeVVuaWNvZGVfSEFTSChzZWxmKSA9IDA7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KLQotICAgIC8qIFRoZSBoYXNoIGZ1bmN0aW9uIGFzIGEgbWFjcm8sIGdldHMgZXhwYW5kZWQgdGhyZWUgdGltZXMgYmVsb3cuICovCi0jZGVmaW5lIEhBU0goUCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB4IF49IChQeV91aGFzaF90KSAqUCA8PCA3OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHdoaWxlICgtLWxlbiA+PSAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHggPSAoX1B5SEFTSF9NVUxUSVBMSUVSICogeCkgXiAoUHlfdWhhc2hfdCkgKlArKzsgIFwKLQotICAgIHggPSAoUHlfdWhhc2hfdCkgX1B5X0hhc2hTZWNyZXQucHJlZml4OwotICAgIHN3aXRjaCAoUHlVbmljb2RlX0tJTkQoc2VsZikpIHsKLSAgICBjYXNlIFB5VW5pY29kZV8xQllURV9LSU5EOiB7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmMgPSBQeVVuaWNvZGVfMUJZVEVfREFUQShzZWxmKTsKLSAgICAgICAgSEFTSChjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUHlVbmljb2RlXzJCWVRFX0tJTkQ6IHsKLSAgICAgICAgY29uc3QgUHlfVUNTMiAqcyA9IFB5VW5pY29kZV8yQllURV9EQVRBKHNlbGYpOwotICAgICAgICBIQVNIKHMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDogewotICAgICAgICBQeV9VQ1M0ICpsOwotICAgICAgICBhc3NlcnQoUHlVbmljb2RlX0tJTkQoc2VsZikgPT0gUHlVbmljb2RlXzRCWVRFX0tJTkQgJiYKLSAgICAgICAgICAgICAgICJJbXBvc3NpYmxlIHN3aXRjaCBjYXNlIGluIHVuaWNvZGVfaGFzaCIpOwotICAgICAgICBsID0gUHlVbmljb2RlXzRCWVRFX0RBVEEoc2VsZik7Ci0gICAgICAgIEhBU0gobCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICB9Ci0gICAgeCBePSAoUHlfdWhhc2hfdCkgUHlVbmljb2RlX0dFVF9MRU5HVEgoc2VsZik7Ci0gICAgeCBePSAoUHlfdWhhc2hfdCkgX1B5X0hhc2hTZWNyZXQuc3VmZml4OwotCi0gICAgaWYgKHggPT0gLTEpCi0gICAgICAgIHggPSAtMjsKKyAgICB4ID0gX1B5X0hhc2hCeXRlcyhQeVVuaWNvZGVfREFUQShzZWxmKSwKKyAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfR0VUX0xFTkdUSChzZWxmKSAqIFB5VW5pY29kZV9LSU5EKHNlbGYpKTsKICAgICBfUHlVbmljb2RlX0hBU0goc2VsZikgPSB4OwogICAgIHJldHVybiB4OwogfQotI3VuZGVmIEhBU0gKIAogUHlEb2NfU1RSVkFSKGluZGV4X19kb2NfXywKICAgICAgICAgICAgICAiUy5pbmRleChzdWJbLCBzdGFydFssIGVuZF1dKSAtPiBpbnRcblwKQEAgLTExMTMwLDE4ICsxMTQyNywyMiBAQAogdW5pY29kZV9pbmRleChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CiAgICAgUHlfc3NpemVfdCByZXN1bHQ7Ci0gICAgUHlPYmplY3QgKnN1YnN0cmluZzsKLSAgICBQeV9zc2l6ZV90IHN0YXJ0OwotICAgIFB5X3NzaXplX3QgZW5kOworICAgIFB5T2JqZWN0ICpzdWJzdHJpbmcgPSBOVUxMOworICAgIFB5X3NzaXplX3Qgc3RhcnQgPSAwOworICAgIFB5X3NzaXplX3QgZW5kID0gMDsKIAogICAgIGlmICghc3RyaW5nbGliX3BhcnNlX2FyZ3NfZmluZHNfdW5pY29kZSgiaW5kZXgiLCBhcmdzLCAmc3Vic3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3RhcnQsICZlbmQpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoc2VsZikgPT0gLTEpCisgICAgaWYgKFB5VW5pY29kZV9SRUFEWShzZWxmKSA9PSAtMSkgeworICAgICAgICBQeV9ERUNSRUYoc3Vic3RyaW5nKTsKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKFB5VW5pY29kZV9SRUFEWShzdWJzdHJpbmcpID09IC0xKQorICAgIH0KKyAgICBpZiAoUHlVbmljb2RlX1JFQURZKHN1YnN0cmluZykgPT0gLTEpIHsKKyAgICAgICAgUHlfREVDUkVGKHN1YnN0cmluZyk7CiAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAogICAgIHJlc3VsdCA9IGFueV9maW5kX3NsaWNlKDEsIHNlbGYsIHN1YnN0cmluZywgc3RhcnQsIGVuZCk7CiAKQEAgLTExNjcxLDYgKzExOTcyLDcgQEAKICAgICBpbnQga2luZDsKICAgICBQeV9zc2l6ZV90IGksIGosIGxlbjsKICAgICBCTE9PTV9NQVNLIHNlcG1hc2s7CisgICAgUHlfc3NpemVfdCBzZXBsZW47CiAKICAgICBpZiAoUHlVbmljb2RlX1JFQURZKHNlbGYpID09IC0xIHx8IFB5VW5pY29kZV9SRUFEWShzZXBvYmopID09IC0xKQogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTExNjc4LDI0ICsxMTk4MCwzNSBAQAogICAgIGtpbmQgPSBQeVVuaWNvZGVfS0lORChzZWxmKTsKICAgICBkYXRhID0gUHlVbmljb2RlX0RBVEEoc2VsZik7CiAgICAgbGVuID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoc2VsZik7CisgICAgc2VwbGVuID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoc2Vwb2JqKTsKICAgICBzZXBtYXNrID0gbWFrZV9ibG9vbV9tYXNrKFB5VW5pY29kZV9LSU5EKHNlcG9iaiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfREFUQShzZXBvYmopLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0dFVF9MRU5HVEgoc2Vwb2JqKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXBsZW4pOwogCiAgICAgaSA9IDA7CiAgICAgaWYgKHN0cmlwdHlwZSAhPSBSSUdIVFNUUklQKSB7Ci0gICAgICAgIHdoaWxlIChpIDwgbGVuICYmCi0gICAgICAgICAgICAgICBCTE9PTV9NRU1CRVIoc2VwbWFzaywgUHlVbmljb2RlX1JFQUQoa2luZCwgZGF0YSwgaSksIHNlcG9iaikpIHsKKyAgICAgICAgd2hpbGUgKGkgPCBsZW4pIHsKKyAgICAgICAgICAgIFB5X1VDUzQgY2ggPSBQeVVuaWNvZGVfUkVBRChraW5kLCBkYXRhLCBpKTsKKyAgICAgICAgICAgIGlmICghQkxPT00oc2VwbWFzaywgY2gpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9GaW5kQ2hhcihzZXBvYmosIGNoLCAwLCBzZXBsZW4sIDEpIDwgMCkKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGkrKzsKICAgICAgICAgfQogICAgIH0KIAogICAgIGogPSBsZW47CiAgICAgaWYgKHN0cmlwdHlwZSAhPSBMRUZUU1RSSVApIHsKLSAgICAgICAgZG8geworICAgICAgICBqLS07CisgICAgICAgIHdoaWxlIChqID49IGkpIHsKKyAgICAgICAgICAgIFB5X1VDUzQgY2ggPSBQeVVuaWNvZGVfUkVBRChraW5kLCBkYXRhLCBqKTsKKyAgICAgICAgICAgIGlmICghQkxPT00oc2VwbWFzaywgY2gpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9GaW5kQ2hhcihzZXBvYmosIGNoLCAwLCBzZXBsZW4sIDEpIDwgMCkKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGotLTsKLSAgICAgICAgfSB3aGlsZSAoaiA+PSBpICYmCi0gICAgICAgICAgICAgICAgIEJMT09NX01FTUJFUihzZXBtYXNrLCBQeVVuaWNvZGVfUkVBRChraW5kLCBkYXRhLCBqKSwgc2Vwb2JqKSk7CisgICAgICAgIH0KKwogICAgICAgICBqKys7CiAgICAgfQogCkBAIC0xMTc0MiwzMCArMTIwNTUsNjMgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBkb19zdHJpcChQeU9iamVjdCAqc2VsZiwgaW50IHN0cmlwdHlwZSkKIHsKLSAgICBpbnQga2luZDsKLSAgICB2b2lkICpkYXRhOwogICAgIFB5X3NzaXplX3QgbGVuLCBpLCBqOwogCiAgICAgaWYgKFB5VW5pY29kZV9SRUFEWShzZWxmKSA9PSAtMSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBraW5kID0gUHlVbmljb2RlX0tJTkQoc2VsZik7Ci0gICAgZGF0YSA9IFB5VW5pY29kZV9EQVRBKHNlbGYpOwogICAgIGxlbiA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHNlbGYpOwogCi0gICAgaSA9IDA7Ci0gICAgaWYgKHN0cmlwdHlwZSAhPSBSSUdIVFNUUklQKSB7Ci0gICAgICAgIHdoaWxlIChpIDwgbGVuICYmIFB5X1VOSUNPREVfSVNTUEFDRShQeVVuaWNvZGVfUkVBRChraW5kLCBkYXRhLCBpKSkpIHsKLSAgICAgICAgICAgIGkrKzsKKyAgICBpZiAoUHlVbmljb2RlX0lTX0FTQ0lJKHNlbGYpKSB7CisgICAgICAgIFB5X1VDUzEgKmRhdGEgPSBQeVVuaWNvZGVfMUJZVEVfREFUQShzZWxmKTsKKworICAgICAgICBpID0gMDsKKyAgICAgICAgaWYgKHN0cmlwdHlwZSAhPSBSSUdIVFNUUklQKSB7CisgICAgICAgICAgICB3aGlsZSAoaSA8IGxlbikgeworICAgICAgICAgICAgICAgIFB5X1VDUzEgY2ggPSBkYXRhW2ldOworICAgICAgICAgICAgICAgIGlmICghX1B5X2FzY2lpX3doaXRlc3BhY2VbY2hdKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBpKys7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBqID0gbGVuOworICAgICAgICBpZiAoc3RyaXB0eXBlICE9IExFRlRTVFJJUCkgeworICAgICAgICAgICAgai0tOworICAgICAgICAgICAgd2hpbGUgKGogPj0gaSkgeworICAgICAgICAgICAgICAgIFB5X1VDUzEgY2ggPSBkYXRhW2pdOworICAgICAgICAgICAgICAgIGlmICghX1B5X2FzY2lpX3doaXRlc3BhY2VbY2hdKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBqLS07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBqKys7CiAgICAgICAgIH0KICAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGludCBraW5kID0gUHlVbmljb2RlX0tJTkQoc2VsZik7CisgICAgICAgIHZvaWQgKmRhdGEgPSBQeVVuaWNvZGVfREFUQShzZWxmKTsKIAotICAgIGogPSBsZW47Ci0gICAgaWYgKHN0cmlwdHlwZSAhPSBMRUZUU1RSSVApIHsKLSAgICAgICAgZG8geworICAgICAgICBpID0gMDsKKyAgICAgICAgaWYgKHN0cmlwdHlwZSAhPSBSSUdIVFNUUklQKSB7CisgICAgICAgICAgICB3aGlsZSAoaSA8IGxlbikgeworICAgICAgICAgICAgICAgIFB5X1VDUzQgY2ggPSBQeVVuaWNvZGVfUkVBRChraW5kLCBkYXRhLCBpKTsKKyAgICAgICAgICAgICAgICBpZiAoIVB5X1VOSUNPREVfSVNTUEFDRShjaCkpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGkrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGogPSBsZW47CisgICAgICAgIGlmIChzdHJpcHR5cGUgIT0gTEVGVFNUUklQKSB7CiAgICAgICAgICAgICBqLS07Ci0gICAgICAgIH0gd2hpbGUgKGogPj0gaSAmJiBQeV9VTklDT0RFX0lTU1BBQ0UoUHlVbmljb2RlX1JFQUQoa2luZCwgZGF0YSwgaikpKTsKLSAgICAgICAgaisrOworICAgICAgICAgICAgd2hpbGUgKGogPj0gaSkgeworICAgICAgICAgICAgICAgIFB5X1VDUzQgY2ggPSBQeVVuaWNvZGVfUkVBRChraW5kLCBkYXRhLCBqKTsKKyAgICAgICAgICAgICAgICBpZiAoIVB5X1VOSUNPREVfSVNTUEFDRShjaCkpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGotLTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGorKzsKKyAgICAgICAgfQogICAgIH0KIAogICAgIHJldHVybiBQeVVuaWNvZGVfU3Vic3RyaW5nKHNlbGYsIGksIGopOwpAQCAtMTE3NzcsNyArMTIxMjMsNyBAQAogewogICAgIFB5T2JqZWN0ICpzZXAgPSBOVUxMOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIChjaGFyICopc3RyaXBmb3JtYXRbc3RyaXB0eXBlXSwgJnNlcCkpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIHN0cmlwZm9ybWF0W3N0cmlwdHlwZV0sICZzZXApKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGlmIChzZXAgIT0gTlVMTCAmJiBzZXAgIT0gUHlfTm9uZSkgewpAQCAtMTE5ODksNyArMTIzMzUsNyBAQAogICAgIFB5X3NzaXplX3QgaXNpemU7CiAgICAgUHlfc3NpemVfdCBvc2l6ZSwgc3F1b3RlLCBkcXVvdGUsIGksIG87CiAgICAgUHlfVUNTNCBtYXgsIHF1b3RlOwotICAgIGludCBpa2luZCwgb2tpbmQ7CisgICAgaW50IGlraW5kLCBva2luZCwgdW5jaGFuZ2VkOwogICAgIHZvaWQgKmlkYXRhLCAqb2RhdGE7CiAKICAgICBpZiAoUHlVbmljb2RlX1JFQURZKHVuaWNvZGUpID09IC0xKQpAQCAtMTIwMDAsNyArMTIzNDYsNyBAQAogCiAgICAgLyogQ29tcHV0ZSBsZW5ndGggb2Ygb3V0cHV0LCBxdW90ZSBjaGFyYWN0ZXJzLCBhbmQKICAgICAgICBtYXhpbXVtIGNoYXJhY3RlciAqLwotICAgIG9zaXplID0gMjsgLyogcXVvdGVzICovCisgICAgb3NpemUgPSAwOwogICAgIG1heCA9IDEyNzsKICAgICBzcXVvdGUgPSBkcXVvdGUgPSAwOwogICAgIGlraW5kID0gUHlVbmljb2RlX0tJTkQodW5pY29kZSk7CkBAIC0xMjAzNyw3ICsxMjM4Myw5IEBACiAgICAgfQogCiAgICAgcXVvdGUgPSAnXCcnOworICAgIHVuY2hhbmdlZCA9IChvc2l6ZSA9PSBpc2l6ZSk7CiAgICAgaWYgKHNxdW90ZSkgeworICAgICAgICB1bmNoYW5nZWQgPSAwOwogICAgICAgICBpZiAoZHF1b3RlKQogICAgICAgICAgICAgLyogQm90aCBzcXVvdGUgYW5kIGRxdW90ZSBwcmVzZW50LiBVc2Ugc3F1b3RlLAogICAgICAgICAgICAgICAgYW5kIGVzY2FwZSB0aGVtICovCkBAIC0xMjA0NSw2ICsxMjM5Myw3IEBACiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHF1b3RlID0gJyInOwogICAgIH0KKyAgICBvc2l6ZSArPSAyOyAgIC8qIHF1b3RlcyAqLwogCiAgICAgcmVwciA9IFB5VW5pY29kZV9OZXcob3NpemUsIG1heCk7CiAgICAgaWYgKHJlcHIgPT0gTlVMTCkKQEAgLTEyMDU0LDgxICsxMjQwMyw4NyBAQAogCiAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgMCwgcXVvdGUpOwogICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG9zaXplLTEsIHF1b3RlKTsKKyAgICBpZiAodW5jaGFuZ2VkKSB7CisgICAgICAgIF9QeVVuaWNvZGVfRmFzdENvcHlDaGFyYWN0ZXJzKHJlcHIsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaWNvZGUsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzaXplKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGZvciAoaSA9IDAsIG8gPSAxOyBpIDwgaXNpemU7IGkrKykgeworICAgICAgICAgICAgUHlfVUNTNCBjaCA9IFB5VW5pY29kZV9SRUFEKGlraW5kLCBpZGF0YSwgaSk7CiAKLSAgICBmb3IgKGkgPSAwLCBvID0gMTsgaSA8IGlzaXplOyBpKyspIHsKLSAgICAgICAgUHlfVUNTNCBjaCA9IFB5VW5pY29kZV9SRUFEKGlraW5kLCBpZGF0YSwgaSk7Ci0KLSAgICAgICAgLyogRXNjYXBlIHF1b3RlcyBhbmQgYmFja3NsYXNoZXMgKi8KLSAgICAgICAgaWYgKChjaCA9PSBxdW90ZSkgfHwgKGNoID09ICdcXCcpKSB7Ci0gICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssICdcXCcpOwotICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBjaCk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIE1hcCBzcGVjaWFsIHdoaXRlc3BhY2UgdG8gJ1x0JywgXG4nLCAnXHInICovCi0gICAgICAgIGlmIChjaCA9PSAnXHQnKSB7Ci0gICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssICdcXCcpOwotICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCAndCcpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKGNoID09ICdcbicpIHsKLSAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgJ1xcJyk7Ci0gICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssICduJyk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoY2ggPT0gJ1xyJykgewotICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCAnXFwnKTsKLSAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgJ3InKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIE1hcCBub24tcHJpbnRhYmxlIFVTIEFTQ0lJIHRvICdceGhoJyAqLwotICAgICAgICBlbHNlIGlmIChjaCA8ICcgJyB8fCBjaCA9PSAweDdGKSB7Ci0gICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssICdcXCcpOwotICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCAneCcpOwotICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbKGNoID4+IDQpICYgMHgwMDBGXSk7Ci0gICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIFB5X2hleGRpZ2l0c1tjaCAmIDB4MDAwRl0pOwotICAgICAgICB9Ci0KLSAgICAgICAgLyogQ29weSBBU0NJSSBjaGFyYWN0ZXJzIGFzLWlzICovCi0gICAgICAgIGVsc2UgaWYgKGNoIDwgMHg3RikgewotICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBjaCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBOb24tQVNDSUkgY2hhcmFjdGVycyAqLwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8qIE1hcCBVbmljb2RlIHdoaXRlc3BhY2UgYW5kIGNvbnRyb2wgY2hhcmFjdGVycwotICAgICAgICAgICAgICAgKGNhdGVnb3JpZXMgWiogYW5kIEMqIGV4Y2VwdCBBU0NJSSBzcGFjZSkKLSAgICAgICAgICAgICovCi0gICAgICAgICAgICBpZiAoIVB5X1VOSUNPREVfSVNQUklOVEFCTEUoY2gpKSB7CisgICAgICAgICAgICAvKiBFc2NhcGUgcXVvdGVzIGFuZCBiYWNrc2xhc2hlcyAqLworICAgICAgICAgICAgaWYgKChjaCA9PSBxdW90ZSkgfHwgKGNoID09ICdcXCcpKSB7CiAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCAnXFwnKTsKLSAgICAgICAgICAgICAgICAvKiBNYXAgOC1iaXQgY2hhcmFjdGVycyB0byAnXHhoaCcgKi8KLSAgICAgICAgICAgICAgICBpZiAoY2ggPD0gMHhmZikgewotICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssICd4Jyk7Ci0gICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgUHlfaGV4ZGlnaXRzWyhjaCA+PiA0KSAmIDB4MDAwRl0pOwotICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIFB5X2hleGRpZ2l0c1tjaCAmIDB4MDAwRl0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAvKiBNYXAgMTYtYml0IGNoYXJhY3RlcnMgdG8gJ1x1eHh4eCcgKi8KLSAgICAgICAgICAgICAgICBlbHNlIGlmIChjaCA8PSAweGZmZmYpIHsKLSAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCAndScpOwotICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIFB5X2hleGRpZ2l0c1soY2ggPj4gMTIpICYgMHhGXSk7Ci0gICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgUHlfaGV4ZGlnaXRzWyhjaCA+PiA4KSAmIDB4Rl0pOwotICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIFB5X2hleGRpZ2l0c1soY2ggPj4gNCkgJiAweEZdKTsKLSAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbY2ggJiAweEZdKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgLyogTWFwIDIxLWJpdCBjaGFyYWN0ZXJzIHRvICdcVTAweHh4eHh4JyAqLwotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssICdVJyk7Ci0gICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgUHlfaGV4ZGlnaXRzWyhjaCA+PiAyOCkgJiAweEZdKTsKLSAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbKGNoID4+IDI0KSAmIDB4Rl0pOwotICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIFB5X2hleGRpZ2l0c1soY2ggPj4gMjApICYgMHhGXSk7Ci0gICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgUHlfaGV4ZGlnaXRzWyhjaCA+PiAxNikgJiAweEZdKTsKLSAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbKGNoID4+IDEyKSAmIDB4Rl0pOwotICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIFB5X2hleGRpZ2l0c1soY2ggPj4gOCkgJiAweEZdKTsKLSAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbKGNoID4+IDQpICYgMHhGXSk7Ci0gICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgUHlfaGV4ZGlnaXRzW2NoICYgMHhGXSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgLyogQ29weSBjaGFyYWN0ZXJzIGFzLWlzICovCi0gICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIGNoKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogTWFwIHNwZWNpYWwgd2hpdGVzcGFjZSB0byAnXHQnLCBcbicsICdccicgKi8KKyAgICAgICAgICAgIGlmIChjaCA9PSAnXHQnKSB7CisgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCAnXFwnKTsKKyAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssICd0Jyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChjaCA9PSAnXG4nKSB7CisgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCAnXFwnKTsKKyAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssICduJyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChjaCA9PSAnXHInKSB7CisgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCAnXFwnKTsKKyAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssICdyJyk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIE1hcCBub24tcHJpbnRhYmxlIFVTIEFTQ0lJIHRvICdceGhoJyAqLworICAgICAgICAgICAgZWxzZSBpZiAoY2ggPCAnICcgfHwgY2ggPT0gMHg3RikgeworICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgJ1xcJyk7CisgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCAneCcpOworICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgUHlfaGV4ZGlnaXRzWyhjaCA+PiA0KSAmIDB4MDAwRl0pOworICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgUHlfaGV4ZGlnaXRzW2NoICYgMHgwMDBGXSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIENvcHkgQVNDSUkgY2hhcmFjdGVycyBhcy1pcyAqLworICAgICAgICAgICAgZWxzZSBpZiAoY2ggPCAweDdGKSB7CisgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBjaCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIE5vbi1BU0NJSSBjaGFyYWN0ZXJzICovCisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAvKiBNYXAgVW5pY29kZSB3aGl0ZXNwYWNlIGFuZCBjb250cm9sIGNoYXJhY3RlcnMKKyAgICAgICAgICAgICAgICAgICAoY2F0ZWdvcmllcyBaKiBhbmQgQyogZXhjZXB0IEFTQ0lJIHNwYWNlKQorICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgaWYgKCFQeV9VTklDT0RFX0lTUFJJTlRBQkxFKGNoKSkgeworICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssICdcXCcpOworICAgICAgICAgICAgICAgICAgICAvKiBNYXAgOC1iaXQgY2hhcmFjdGVycyB0byAnXHhoaCcgKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKGNoIDw9IDB4ZmYpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgJ3gnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgUHlfaGV4ZGlnaXRzWyhjaCA+PiA0KSAmIDB4MDAwRl0pOworICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbY2ggJiAweDAwMEZdKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAvKiBNYXAgMTYtYml0IGNoYXJhY3RlcnMgdG8gJ1x1eHh4eCcgKi8KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY2ggPD0gMHhmZmZmKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssICd1Jyk7CisgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIFB5X2hleGRpZ2l0c1soY2ggPj4gMTIpICYgMHhGXSk7CisgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIFB5X2hleGRpZ2l0c1soY2ggPj4gOCkgJiAweEZdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgUHlfaGV4ZGlnaXRzWyhjaCA+PiA0KSAmIDB4Rl0pOworICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbY2ggJiAweEZdKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAvKiBNYXAgMjEtYml0IGNoYXJhY3RlcnMgdG8gJ1xVMDB4eHh4eHgnICovCisgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCAnVScpOworICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbKGNoID4+IDI4KSAmIDB4Rl0pOworICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbKGNoID4+IDI0KSAmIDB4Rl0pOworICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbKGNoID4+IDIwKSAmIDB4Rl0pOworICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbKGNoID4+IDE2KSAmIDB4Rl0pOworICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbKGNoID4+IDEyKSAmIDB4Rl0pOworICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbKGNoID4+IDgpICYgMHhGXSk7CisgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIFB5X2hleGRpZ2l0c1soY2ggPj4gNCkgJiAweEZdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgUHlfaGV4ZGlnaXRzW2NoICYgMHhGXSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLyogQ29weSBjaGFyYWN0ZXJzIGFzLWlzICovCisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgY2gpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTEyMTQ5LDE5ICsxMjUwNCwyMyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIHVuaWNvZGVfcmZpbmQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIFB5T2JqZWN0ICpzdWJzdHJpbmc7Ci0gICAgUHlfc3NpemVfdCBzdGFydDsKLSAgICBQeV9zc2l6ZV90IGVuZDsKKyAgICBQeU9iamVjdCAqc3Vic3RyaW5nID0gTlVMTDsKKyAgICBQeV9zc2l6ZV90IHN0YXJ0ID0gMDsKKyAgICBQeV9zc2l6ZV90IGVuZCA9IDA7CiAgICAgUHlfc3NpemVfdCByZXN1bHQ7CiAKICAgICBpZiAoIXN0cmluZ2xpYl9wYXJzZV9hcmdzX2ZpbmRzX3VuaWNvZGUoInJmaW5kIiwgYXJncywgJnN1YnN0cmluZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0YXJ0LCAmZW5kKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBpZiAoUHlVbmljb2RlX1JFQURZKHNlbGYpID09IC0xKQorICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoc2VsZikgPT0gLTEpIHsKKyAgICAgICAgUHlfREVDUkVGKHN1YnN0cmluZyk7CiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoc3Vic3RyaW5nKSA9PSAtMSkKKyAgICB9CisgICAgaWYgKFB5VW5pY29kZV9SRUFEWShzdWJzdHJpbmcpID09IC0xKSB7CisgICAgICAgIFB5X0RFQ1JFRihzdWJzdHJpbmcpOwogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAKICAgICByZXN1bHQgPSBhbnlfZmluZF9zbGljZSgtMSwgc2VsZiwgc3Vic3RyaW5nLCBzdGFydCwgZW5kKTsKIApAQCAtMTIxODEsMTkgKzEyNTQwLDIzIEBACiBzdGF0aWMgUHlPYmplY3QgKgogdW5pY29kZV9yaW5kZXgoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIFB5T2JqZWN0ICpzdWJzdHJpbmc7Ci0gICAgUHlfc3NpemVfdCBzdGFydDsKLSAgICBQeV9zc2l6ZV90IGVuZDsKKyAgICBQeU9iamVjdCAqc3Vic3RyaW5nID0gTlVMTDsKKyAgICBQeV9zc2l6ZV90IHN0YXJ0ID0gMDsKKyAgICBQeV9zc2l6ZV90IGVuZCA9IDA7CiAgICAgUHlfc3NpemVfdCByZXN1bHQ7CiAKICAgICBpZiAoIXN0cmluZ2xpYl9wYXJzZV9hcmdzX2ZpbmRzX3VuaWNvZGUoInJpbmRleCIsIGFyZ3MsICZzdWJzdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdGFydCwgJmVuZCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgaWYgKFB5VW5pY29kZV9SRUFEWShzZWxmKSA9PSAtMSkKKyAgICBpZiAoUHlVbmljb2RlX1JFQURZKHNlbGYpID09IC0xKSB7CisgICAgICAgIFB5X0RFQ1JFRihzdWJzdHJpbmcpOwogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAoUHlVbmljb2RlX1JFQURZKHN1YnN0cmluZykgPT0gLTEpCisgICAgfQorICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoc3Vic3RyaW5nKSA9PSAtMSkgeworICAgICAgICBQeV9ERUNSRUYoc3Vic3RyaW5nKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogCiAgICAgcmVzdWx0ID0gYW55X2ZpbmRfc2xpY2UoLTEsIHNlbGYsIHN1YnN0cmluZywgc3RhcnQsIGVuZCk7CiAKQEAgLTEyMzI1LDcgKzEyNjg4LDcgQEAKICAgICBsZW4xID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoc3RyX29iaik7CiAgICAgbGVuMiA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHNlcF9vYmopOwogCi0gICAgc3dpdGNoIChQeVVuaWNvZGVfS0lORChzdHJfb2JqKSkgeworICAgIHN3aXRjaCAoa2luZCkgewogICAgIGNhc2UgUHlVbmljb2RlXzFCWVRFX0tJTkQ6CiAgICAgICAgIGlmIChQeVVuaWNvZGVfSVNfQVNDSUkoc3RyX29iaikgJiYgUHlVbmljb2RlX0lTX0FTQ0lJKHNlcF9vYmopKQogICAgICAgICAgICAgb3V0ID0gYXNjaWlsaWJfcGFydGl0aW9uKHN0cl9vYmosIGJ1ZjEsIGxlbjEsIHNlcF9vYmosIGJ1ZjIsIGxlbjIpOwpAQCAtMTIzODEsMTIgKzEyNzQ0LDEyIEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIGtpbmQxID0gUHlVbmljb2RlX0tJTkQoc3RyX2luKTsKKyAgICBraW5kMSA9IFB5VW5pY29kZV9LSU5EKHN0cl9vYmopOwogICAgIGtpbmQyID0gUHlVbmljb2RlX0tJTkQoc2VwX29iaik7CiAgICAga2luZCA9IFB5X01BWChraW5kMSwga2luZDIpOwotICAgIGJ1ZjEgPSBQeVVuaWNvZGVfREFUQShzdHJfaW4pOworICAgIGJ1ZjEgPSBQeVVuaWNvZGVfREFUQShzdHJfb2JqKTsKICAgICBpZiAoa2luZDEgIT0ga2luZCkKLSAgICAgICAgYnVmMSA9IF9QeVVuaWNvZGVfQXNLaW5kKHN0cl9pbiwga2luZCk7CisgICAgICAgIGJ1ZjEgPSBfUHlVbmljb2RlX0FzS2luZChzdHJfb2JqLCBraW5kKTsKICAgICBpZiAoIWJ1ZjEpCiAgICAgICAgIGdvdG8gb25FcnJvcjsKICAgICBidWYyID0gUHlVbmljb2RlX0RBVEEoc2VwX29iaik7CkBAIC0xMjM5Nyw3ICsxMjc2MCw3IEBACiAgICAgbGVuMSA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHN0cl9vYmopOwogICAgIGxlbjIgPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChzZXBfb2JqKTsKIAotICAgIHN3aXRjaCAoUHlVbmljb2RlX0tJTkQoc3RyX2luKSkgeworICAgIHN3aXRjaCAoa2luZCkgewogICAgIGNhc2UgUHlVbmljb2RlXzFCWVRFX0tJTkQ6CiAgICAgICAgIGlmIChQeVVuaWNvZGVfSVNfQVNDSUkoc3RyX29iaikgJiYgUHlVbmljb2RlX0lTX0FTQ0lJKHNlcF9vYmopKQogICAgICAgICAgICAgb3V0ID0gYXNjaWlsaWJfcnBhcnRpdGlvbihzdHJfb2JqLCBidWYxLCBsZW4xLCBzZXBfb2JqLCBidWYyLCBsZW4yKTsKQEAgLTEyNTUwLDI4ICsxMjkxMyw3NiBAQAogICAgIHJldHVybiBjYXNlX29wZXJhdGlvbihzZWxmLCBkb19zd2FwY2FzZSk7CiB9CiAKLVB5RG9jX1NUUlZBUihtYWtldHJhbnNfX2RvY19fLAotICAgICAgICAgICAgICJzdHIubWFrZXRyYW5zKHhbLCB5Wywgel1dKSAtPiBkaWN0IChzdGF0aWMgbWV0aG9kKVxuXAotXG5cCi1SZXR1cm4gYSB0cmFuc2xhdGlvbiB0YWJsZSB1c2FibGUgZm9yIHN0ci50cmFuc2xhdGUoKS5cblwKLUlmIHRoZXJlIGlzIG9ubHkgb25lIGFyZ3VtZW50LCBpdCBtdXN0IGJlIGEgZGljdGlvbmFyeSBtYXBwaW5nIFVuaWNvZGVcblwKLW9yZGluYWxzIChpbnRlZ2Vycykgb3IgY2hhcmFjdGVycyB0byBVbmljb2RlIG9yZGluYWxzLCBzdHJpbmdzIG9yIE5vbmUuXG5cCi1DaGFyYWN0ZXIga2V5cyB3aWxsIGJlIHRoZW4gY29udmVydGVkIHRvIG9yZGluYWxzLlxuXAotSWYgdGhlcmUgYXJlIHR3byBhcmd1bWVudHMsIHRoZXkgbXVzdCBiZSBzdHJpbmdzIG9mIGVxdWFsIGxlbmd0aCwgYW5kXG5cCi1pbiB0aGUgcmVzdWx0aW5nIGRpY3Rpb25hcnksIGVhY2ggY2hhcmFjdGVyIGluIHggd2lsbCBiZSBtYXBwZWQgdG8gdGhlXG5cCi1jaGFyYWN0ZXIgYXQgdGhlIHNhbWUgcG9zaXRpb24gaW4geS4gSWYgdGhlcmUgaXMgYSB0aGlyZCBhcmd1bWVudCwgaXRcblwKLW11c3QgYmUgYSBzdHJpbmcsIHdob3NlIGNoYXJhY3RlcnMgd2lsbCBiZSBtYXBwZWQgdG8gTm9uZSBpbiB0aGUgcmVzdWx0LiIpOworLypbY2xpbmljIGlucHV0XQogCi1zdGF0aWMgUHlPYmplY3QqCi11bmljb2RlX21ha2V0cmFucyhQeU9iamVjdCAqbnVsbCwgUHlPYmplY3QgKmFyZ3MpCitAc3RhdGljbWV0aG9kCitzdHIubWFrZXRyYW5zIGFzIHVuaWNvZGVfbWFrZXRyYW5zCisKKyAgeDogb2JqZWN0CisKKyAgeTogdW5pY29kZT1OVUxMCisKKyAgejogdW5pY29kZT1OVUxMCisKKyAgLworCitSZXR1cm4gYSB0cmFuc2xhdGlvbiB0YWJsZSB1c2FibGUgZm9yIHN0ci50cmFuc2xhdGUoKS4KKworSWYgdGhlcmUgaXMgb25seSBvbmUgYXJndW1lbnQsIGl0IG11c3QgYmUgYSBkaWN0aW9uYXJ5IG1hcHBpbmcgVW5pY29kZQorb3JkaW5hbHMgKGludGVnZXJzKSBvciBjaGFyYWN0ZXJzIHRvIFVuaWNvZGUgb3JkaW5hbHMsIHN0cmluZ3Mgb3IgTm9uZS4KK0NoYXJhY3RlciBrZXlzIHdpbGwgYmUgdGhlbiBjb252ZXJ0ZWQgdG8gb3JkaW5hbHMuCitJZiB0aGVyZSBhcmUgdHdvIGFyZ3VtZW50cywgdGhleSBtdXN0IGJlIHN0cmluZ3Mgb2YgZXF1YWwgbGVuZ3RoLCBhbmQKK2luIHRoZSByZXN1bHRpbmcgZGljdGlvbmFyeSwgZWFjaCBjaGFyYWN0ZXIgaW4geCB3aWxsIGJlIG1hcHBlZCB0byB0aGUKK2NoYXJhY3RlciBhdCB0aGUgc2FtZSBwb3NpdGlvbiBpbiB5LiBJZiB0aGVyZSBpcyBhIHRoaXJkIGFyZ3VtZW50LCBpdAorbXVzdCBiZSBhIHN0cmluZywgd2hvc2UgY2hhcmFjdGVycyB3aWxsIGJlIG1hcHBlZCB0byBOb25lIGluIHRoZSByZXN1bHQuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK1B5RG9jX1NUUlZBUih1bmljb2RlX21ha2V0cmFuc19fZG9jX18sCisibWFrZXRyYW5zKHgsIHk9Tm9uZSwgej1Ob25lLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIGEgdHJhbnNsYXRpb24gdGFibGUgdXNhYmxlIGZvciBzdHIudHJhbnNsYXRlKCkuXG4iCisiXG4iCisiSWYgdGhlcmUgaXMgb25seSBvbmUgYXJndW1lbnQsIGl0IG11c3QgYmUgYSBkaWN0aW9uYXJ5IG1hcHBpbmcgVW5pY29kZVxuIgorIm9yZGluYWxzIChpbnRlZ2Vycykgb3IgY2hhcmFjdGVycyB0byBVbmljb2RlIG9yZGluYWxzLCBzdHJpbmdzIG9yIE5vbmUuXG4iCisiQ2hhcmFjdGVyIGtleXMgd2lsbCBiZSB0aGVuIGNvbnZlcnRlZCB0byBvcmRpbmFscy5cbiIKKyJJZiB0aGVyZSBhcmUgdHdvIGFyZ3VtZW50cywgdGhleSBtdXN0IGJlIHN0cmluZ3Mgb2YgZXF1YWwgbGVuZ3RoLCBhbmRcbiIKKyJpbiB0aGUgcmVzdWx0aW5nIGRpY3Rpb25hcnksIGVhY2ggY2hhcmFjdGVyIGluIHggd2lsbCBiZSBtYXBwZWQgdG8gdGhlXG4iCisiY2hhcmFjdGVyIGF0IHRoZSBzYW1lIHBvc2l0aW9uIGluIHkuIElmIHRoZXJlIGlzIGEgdGhpcmQgYXJndW1lbnQsIGl0XG4iCisibXVzdCBiZSBhIHN0cmluZywgd2hvc2UgY2hhcmFjdGVycyB3aWxsIGJlIG1hcHBlZCB0byBOb25lIGluIHRoZSByZXN1bHQuIik7CisKKyNkZWZpbmUgVU5JQ09ERV9NQUtFVFJBTlNfTUVUSE9EREVGICAgIFwKKyAgICB7Im1ha2V0cmFucyIsIChQeUNGdW5jdGlvbil1bmljb2RlX21ha2V0cmFucywgTUVUSF9WQVJBUkdTfE1FVEhfU1RBVElDLCB1bmljb2RlX21ha2V0cmFuc19fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgordW5pY29kZV9tYWtldHJhbnNfaW1wbChQeU9iamVjdCAqeCwgUHlPYmplY3QgKnksIFB5T2JqZWN0ICp6KTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3VuaWNvZGVfbWFrZXRyYW5zKHZvaWQgKm51bGwsIFB5T2JqZWN0ICphcmdzKQogewotICAgIFB5T2JqZWN0ICp4LCAqeSA9IE5VTEwsICp6ID0gTlVMTDsKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeU9iamVjdCAqeDsKKyAgICBQeU9iamVjdCAqeSA9IE5VTEw7CisgICAgUHlPYmplY3QgKnogPSBOVUxMOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJPfFVVOm1ha2V0cmFucyIsCisgICAgICAgICZ4LCAmeSwgJnopKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gdW5pY29kZV9tYWtldHJhbnNfaW1wbCh4LCB5LCB6KTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitzdGF0aWMgUHlPYmplY3QgKgordW5pY29kZV9tYWtldHJhbnNfaW1wbChQeU9iamVjdCAqeCwgUHlPYmplY3QgKnksIFB5T2JqZWN0ICp6KQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTU2NmVkZjYzMGY3NzQzNmEgaW5wdXQ9N2JmYmY1MjlhMjkzYzZjNV0qLworewogICAgIFB5T2JqZWN0ICpuZXcgPSBOVUxMLCAqa2V5LCAqdmFsdWU7CiAgICAgUHlfc3NpemVfdCBpID0gMDsKICAgICBpbnQgcmVzOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPfFVVOm1ha2V0cmFucyIsICZ4LCAmeSwgJnopKQotICAgICAgICByZXR1cm4gTlVMTDsKICAgICBuZXcgPSBQeURpY3RfTmV3KCk7CiAgICAgaWYgKCFuZXcpCiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMTI2NzMsMTEgKzEzMDg0LDEyIEBACiBQeURvY19TVFJWQVIodHJhbnNsYXRlX19kb2NfXywKICAgICAgICAgICAgICAiUy50cmFuc2xhdGUodGFibGUpIC0+IHN0clxuXAogXG5cCi1SZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgUywgd2hlcmUgYWxsIGNoYXJhY3RlcnMgaGF2ZSBiZWVuIG1hcHBlZFxuXAotdGhyb3VnaCB0aGUgZ2l2ZW4gdHJhbnNsYXRpb24gdGFibGUsIHdoaWNoIG11c3QgYmUgYSBtYXBwaW5nIG9mXG5cCi1Vbmljb2RlIG9yZGluYWxzIHRvIFVuaWNvZGUgb3JkaW5hbHMsIHN0cmluZ3MsIG9yIE5vbmUuXG5cCi1Vbm1hcHBlZCBjaGFyYWN0ZXJzIGFyZSBsZWZ0IHVudG91Y2hlZC4gQ2hhcmFjdGVycyBtYXBwZWQgdG8gTm9uZVxuXAotYXJlIGRlbGV0ZWQuIik7CitSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgUyBpbiB3aGljaCBlYWNoIGNoYXJhY3RlciBoYXMgYmVlbiBtYXBwZWRcblwKK3Rocm91Z2ggdGhlIGdpdmVuIHRyYW5zbGF0aW9uIHRhYmxlLiBUaGUgdGFibGUgbXVzdCBpbXBsZW1lbnRcblwKK2xvb2t1cC9pbmRleGluZyB2aWEgX19nZXRpdGVtX18sIGZvciBpbnN0YW5jZSBhIGRpY3Rpb25hcnkgb3IgbGlzdCxcblwKK21hcHBpbmcgVW5pY29kZSBvcmRpbmFscyB0byBVbmljb2RlIG9yZGluYWxzLCBzdHJpbmdzLCBvciBOb25lLiBJZlxuXAordGhpcyBvcGVyYXRpb24gcmFpc2VzIExvb2t1cEVycm9yLCB0aGUgY2hhcmFjdGVyIGlzIGxlZnQgdW50b3VjaGVkLlxuXAorQ2hhcmFjdGVycyBtYXBwZWQgdG8gTm9uZSBhcmUgZGVsZXRlZC4iKTsKIAogc3RhdGljIFB5T2JqZWN0KgogdW5pY29kZV90cmFuc2xhdGUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICp0YWJsZSkKQEAgLTEyNzgyLDYgKzEzMTk0LDggQEAKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIHJlc3VsdCA9IHRhaWxtYXRjaChzZWxmLCBzdWJzdHJpbmcsIHN0YXJ0LCBlbmQsIC0xKTsKICAgICAgICAgICAgIFB5X0RFQ1JFRihzdWJzdHJpbmcpOworICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSAtMSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIGlmIChyZXN1bHQpIHsKICAgICAgICAgICAgICAgICBQeV9SRVRVUk5fVFJVRTsKICAgICAgICAgICAgIH0KQEAgLTEyNzk4LDYgKzEzMjEyLDggQEAKICAgICB9CiAgICAgcmVzdWx0ID0gdGFpbG1hdGNoKHNlbGYsIHN1YnN0cmluZywgc3RhcnQsIGVuZCwgLTEpOwogICAgIFB5X0RFQ1JFRihzdWJzdHJpbmcpOworICAgIGlmIChyZXN1bHQgPT0gLTEpCisgICAgICAgIHJldHVybiBOVUxMOwogICAgIHJldHVybiBQeUJvb2xfRnJvbUxvbmcocmVzdWx0KTsKIH0KIApAQCAtMTI4MzEsNiArMTMyNDcsOCBAQAogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgcmVzdWx0ID0gdGFpbG1hdGNoKHNlbGYsIHN1YnN0cmluZywgc3RhcnQsIGVuZCwgKzEpOwogICAgICAgICAgICAgUHlfREVDUkVGKHN1YnN0cmluZyk7CisgICAgICAgICAgICBpZiAocmVzdWx0ID09IC0xKQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgaWYgKHJlc3VsdCkgewogICAgICAgICAgICAgICAgIFB5X1JFVFVSTl9UUlVFOwogICAgICAgICAgICAgfQpAQCAtMTI4NDYsMzMgKzEzMjY0LDQ4IEBACiAgICAgfQogICAgIHJlc3VsdCA9IHRhaWxtYXRjaChzZWxmLCBzdWJzdHJpbmcsIHN0YXJ0LCBlbmQsICsxKTsKICAgICBQeV9ERUNSRUYoc3Vic3RyaW5nKTsKKyAgICBpZiAocmVzdWx0ID09IC0xKQorICAgICAgICByZXR1cm4gTlVMTDsKICAgICByZXR1cm4gUHlCb29sX0Zyb21Mb25nKHJlc3VsdCk7CiB9CiAKIFB5X0xPQ0FMX0lOTElORSh2b2lkKQogX1B5VW5pY29kZVdyaXRlcl9VcGRhdGUoX1B5VW5pY29kZVdyaXRlciAqd3JpdGVyKQogewotICAgIHdyaXRlci0+c2l6ZSA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHdyaXRlci0+YnVmZmVyKTsKKyAgICBpZiAoIXdyaXRlci0+cmVhZG9ubHkpCisgICAgICAgIHdyaXRlci0+c2l6ZSA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHdyaXRlci0+YnVmZmVyKTsKKyAgICBlbHNlIHsKKyAgICAgICAgLyogQ29weS1vbi13cml0ZSBtb2RlOiBzZXQgYnVmZmVyIHNpemUgdG8gMCBzbworICAgICAgICAgKiBfUHlVbmljb2RlV3JpdGVyX1ByZXBhcmUoKSB3aWxsIGNvcHkgKGFuZCBlbmxhcmdlKSB0aGUgYnVmZmVyIG9uCisgICAgICAgICAqIG5leHQgd3JpdGUuICovCisgICAgICAgIHdyaXRlci0+c2l6ZSA9IDA7CisgICAgfQogICAgIHdyaXRlci0+bWF4Y2hhciA9IFB5VW5pY29kZV9NQVhfQ0hBUl9WQUxVRSh3cml0ZXItPmJ1ZmZlcik7CiAgICAgd3JpdGVyLT5kYXRhID0gUHlVbmljb2RlX0RBVEEod3JpdGVyLT5idWZmZXIpOwogICAgIHdyaXRlci0+a2luZCA9IFB5VW5pY29kZV9LSU5EKHdyaXRlci0+YnVmZmVyKTsKIH0KIAogdm9pZAotX1B5VW5pY29kZVdyaXRlcl9Jbml0KF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlciwgUHlfc3NpemVfdCBtaW5fbGVuZ3RoKQorX1B5VW5pY29kZVdyaXRlcl9Jbml0KF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlcikKIHsKICAgICBtZW1zZXQod3JpdGVyLCAwLCBzaXplb2YoKndyaXRlcikpOwogI2lmZGVmIFB5X0RFQlVHCiAgICAgd3JpdGVyLT5raW5kID0gNTsgICAgLyogaW52YWxpZCBraW5kICovCiAjZW5kaWYKLSAgICB3cml0ZXItPm1pbl9sZW5ndGggPSBQeV9NQVgobWluX2xlbmd0aCwgMTAwKTsKLSAgICB3cml0ZXItPm92ZXJhbGxvY2F0ZSA9IChtaW5fbGVuZ3RoID4gMCk7CisgICAgd3JpdGVyLT5taW5fY2hhciA9IDEyNzsKIH0KIAogaW50CiBfUHlVbmljb2RlV3JpdGVyX1ByZXBhcmVJbnRlcm5hbChfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IGxlbmd0aCwgUHlfVUNTNCBtYXhjaGFyKQogeworI2lmZGVmIE1TX1dJTkRPV1MKKyAgIC8qIE9uIFdpbmRvd3MsIG92ZXJhbGxvY2F0ZSBieSA1MCUgaXMgdGhlIGJlc3QgZmFjdG9yICovCisjICBkZWZpbmUgT1ZFUkFMTE9DQVRFX0ZBQ1RPUiAyCisjZWxzZQorICAgLyogT24gTGludXgsIG92ZXJhbGxvY2F0ZSBieSAyNSUgaXMgdGhlIGJlc3QgZmFjdG9yICovCisjICBkZWZpbmUgT1ZFUkFMTE9DQVRFX0ZBQ1RPUiA0CisjZW5kaWYKICAgICBQeV9zc2l6ZV90IG5ld2xlbjsKICAgICBQeU9iamVjdCAqbmV3YnVmZmVyOwogCkBAIC0xMjg4NCwzMiArMTMzMTcsMzQgQEAKICAgICB9CiAgICAgbmV3bGVuID0gd3JpdGVyLT5wb3MgKyBsZW5ndGg7CiAKKyAgICBtYXhjaGFyID0gUHlfTUFYKG1heGNoYXIsIHdyaXRlci0+bWluX2NoYXIpOworCiAgICAgaWYgKHdyaXRlci0+YnVmZmVyID09IE5VTEwpIHsKLSAgICAgICAgaWYgKHdyaXRlci0+b3ZlcmFsbG9jYXRlKSB7Ci0gICAgICAgICAgICAvKiBvdmVyYWxsb2NhdGUgMjUlIHRvIGxpbWl0IHRoZSBudW1iZXIgb2YgcmVzaXplICovCi0gICAgICAgICAgICBpZiAobmV3bGVuIDw9IChQWV9TU0laRV9UX01BWCAtIG5ld2xlbiAvIDQpKQotICAgICAgICAgICAgICAgIG5ld2xlbiArPSBuZXdsZW4gLyA0OwotICAgICAgICAgICAgaWYgKG5ld2xlbiA8IHdyaXRlci0+bWluX2xlbmd0aCkKLSAgICAgICAgICAgICAgICBuZXdsZW4gPSB3cml0ZXItPm1pbl9sZW5ndGg7CisgICAgICAgIGFzc2VydCghd3JpdGVyLT5yZWFkb25seSk7CisgICAgICAgIGlmICh3cml0ZXItPm92ZXJhbGxvY2F0ZQorICAgICAgICAgICAgJiYgbmV3bGVuIDw9IChQWV9TU0laRV9UX01BWCAtIG5ld2xlbiAvIE9WRVJBTExPQ0FURV9GQUNUT1IpKSB7CisgICAgICAgICAgICAvKiBvdmVyYWxsb2NhdGUgdG8gbGltaXQgdGhlIG51bWJlciBvZiByZWFsbG9jKCkgKi8KKyAgICAgICAgICAgIG5ld2xlbiArPSBuZXdsZW4gLyBPVkVSQUxMT0NBVEVfRkFDVE9SOwogICAgICAgICB9CisgICAgICAgIGlmIChuZXdsZW4gPCB3cml0ZXItPm1pbl9sZW5ndGgpCisgICAgICAgICAgICBuZXdsZW4gPSB3cml0ZXItPm1pbl9sZW5ndGg7CisKICAgICAgICAgd3JpdGVyLT5idWZmZXIgPSBQeVVuaWNvZGVfTmV3KG5ld2xlbiwgbWF4Y2hhcik7CiAgICAgICAgIGlmICh3cml0ZXItPmJ1ZmZlciA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBfUHlVbmljb2RlV3JpdGVyX1VwZGF0ZSh3cml0ZXIpOwotICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0KLSAgICBpZiAobmV3bGVuID4gd3JpdGVyLT5zaXplKSB7Ci0gICAgICAgIGlmICh3cml0ZXItPm92ZXJhbGxvY2F0ZSkgewotICAgICAgICAgICAgLyogb3ZlcmFsbG9jYXRlIDI1JSB0byBsaW1pdCB0aGUgbnVtYmVyIG9mIHJlc2l6ZSAqLwotICAgICAgICAgICAgaWYgKG5ld2xlbiA8PSAoUFlfU1NJWkVfVF9NQVggLSBuZXdsZW4gLyA0KSkKLSAgICAgICAgICAgICAgICBuZXdsZW4gKz0gbmV3bGVuIC8gNDsKLSAgICAgICAgICAgIGlmIChuZXdsZW4gPCB3cml0ZXItPm1pbl9sZW5ndGgpCi0gICAgICAgICAgICAgICAgbmV3bGVuID0gd3JpdGVyLT5taW5fbGVuZ3RoOworICAgIGVsc2UgaWYgKG5ld2xlbiA+IHdyaXRlci0+c2l6ZSkgeworICAgICAgICBpZiAod3JpdGVyLT5vdmVyYWxsb2NhdGUKKyAgICAgICAgICAgICYmIG5ld2xlbiA8PSAoUFlfU1NJWkVfVF9NQVggLSBuZXdsZW4gLyBPVkVSQUxMT0NBVEVfRkFDVE9SKSkgeworICAgICAgICAgICAgLyogb3ZlcmFsbG9jYXRlIHRvIGxpbWl0IHRoZSBudW1iZXIgb2YgcmVhbGxvYygpICovCisgICAgICAgICAgICBuZXdsZW4gKz0gbmV3bGVuIC8gT1ZFUkFMTE9DQVRFX0ZBQ1RPUjsKICAgICAgICAgfQorICAgICAgICBpZiAobmV3bGVuIDwgd3JpdGVyLT5taW5fbGVuZ3RoKQorICAgICAgICAgICAgbmV3bGVuID0gd3JpdGVyLT5taW5fbGVuZ3RoOwogCiAgICAgICAgIGlmIChtYXhjaGFyID4gd3JpdGVyLT5tYXhjaGFyIHx8IHdyaXRlci0+cmVhZG9ubHkpIHsKICAgICAgICAgICAgIC8qIHJlc2l6ZSArIHdpZGVuICovCisgICAgICAgICAgICBtYXhjaGFyID0gUHlfTUFYKG1heGNoYXIsIHdyaXRlci0+bWF4Y2hhcik7CiAgICAgICAgICAgICBuZXdidWZmZXIgPSBQeVVuaWNvZGVfTmV3KG5ld2xlbiwgbWF4Y2hhcik7CiAgICAgICAgICAgICBpZiAobmV3YnVmZmVyID09IE5VTEwpCiAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwpAQCAtMTI5MjQsNyArMTMzNTksNiBAQAogICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQogICAgICAgICB3cml0ZXItPmJ1ZmZlciA9IG5ld2J1ZmZlcjsKLSAgICAgICAgX1B5VW5pY29kZVdyaXRlcl9VcGRhdGUod3JpdGVyKTsKICAgICB9CiAgICAgZWxzZSBpZiAobWF4Y2hhciA+IHdyaXRlci0+bWF4Y2hhcikgewogICAgICAgICBhc3NlcnQoIXdyaXRlci0+cmVhZG9ubHkpOwpAQCAtMTI5MzUsOSArMTMzNjksMjcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLT5idWZmZXIsIDAsIHdyaXRlci0+cG9zKTsKICAgICAgICAgUHlfREVDUkVGKHdyaXRlci0+YnVmZmVyKTsKICAgICAgICAgd3JpdGVyLT5idWZmZXIgPSBuZXdidWZmZXI7Ci0gICAgICAgIF9QeVVuaWNvZGVXcml0ZXJfVXBkYXRlKHdyaXRlcik7CiAgICAgfQorICAgIF9QeVVuaWNvZGVXcml0ZXJfVXBkYXRlKHdyaXRlcik7CiAgICAgcmV0dXJuIDA7CisKKyN1bmRlZiBPVkVSQUxMT0NBVEVfRkFDVE9SCit9CisKK1B5X0xPQ0FMX0lOTElORShpbnQpCitfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcklubGluZShfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIsIFB5X1VDUzQgY2gpCit7CisgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfUHJlcGFyZSh3cml0ZXIsIDEsIGNoKSA8IDApCisgICAgICAgIHJldHVybiAtMTsKKyAgICBQeVVuaWNvZGVfV1JJVEUod3JpdGVyLT5raW5kLCB3cml0ZXItPmRhdGEsIHdyaXRlci0+cG9zLCBjaCk7CisgICAgd3JpdGVyLT5wb3MrKzsKKyAgICByZXR1cm4gMDsKK30KKworaW50CitfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcihfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIsIFB5X1VDUzQgY2gpCit7CisgICAgcmV0dXJuIF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVDaGFySW5saW5lKHdyaXRlciwgY2gpOwogfQogCiBpbnQKQEAgLTEyOTU0LDExICsxMzQwNiwxMCBAQAogICAgIG1heGNoYXIgPSBQeVVuaWNvZGVfTUFYX0NIQVJfVkFMVUUoc3RyKTsKICAgICBpZiAobWF4Y2hhciA+IHdyaXRlci0+bWF4Y2hhciB8fCBsZW4gPiB3cml0ZXItPnNpemUgLSB3cml0ZXItPnBvcykgewogICAgICAgICBpZiAod3JpdGVyLT5idWZmZXIgPT0gTlVMTCAmJiAhd3JpdGVyLT5vdmVyYWxsb2NhdGUpIHsKKyAgICAgICAgICAgIHdyaXRlci0+cmVhZG9ubHkgPSAxOwogICAgICAgICAgICAgUHlfSU5DUkVGKHN0cik7CiAgICAgICAgICAgICB3cml0ZXItPmJ1ZmZlciA9IHN0cjsKICAgICAgICAgICAgIF9QeVVuaWNvZGVXcml0ZXJfVXBkYXRlKHdyaXRlcik7Ci0gICAgICAgICAgICB3cml0ZXItPnJlYWRvbmx5ID0gMTsKLSAgICAgICAgICAgIHdyaXRlci0+c2l6ZSA9IDA7CiAgICAgICAgICAgICB3cml0ZXItPnBvcyArPSBsZW47CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQpAQCAtMTI5NzEsMjggKzEzNDIyLDE0MiBAQAogICAgIHJldHVybiAwOwogfQogCitpbnQKK19QeVVuaWNvZGVXcml0ZXJfV3JpdGVTdWJzdHJpbmcoX1B5VW5pY29kZVdyaXRlciAqd3JpdGVyLCBQeU9iamVjdCAqc3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IHN0YXJ0LCBQeV9zc2l6ZV90IGVuZCkKK3sKKyAgICBQeV9VQ1M0IG1heGNoYXI7CisgICAgUHlfc3NpemVfdCBsZW47CisKKyAgICBpZiAoUHlVbmljb2RlX1JFQURZKHN0cikgPT0gLTEpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGFzc2VydCgwIDw9IHN0YXJ0KTsKKyAgICBhc3NlcnQoZW5kIDw9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHN0cikpOworICAgIGFzc2VydChzdGFydCA8PSBlbmQpOworCisgICAgaWYgKGVuZCA9PSAwKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChzdGFydCA9PSAwICYmIGVuZCA9PSBQeVVuaWNvZGVfR0VUX0xFTkdUSChzdHIpKQorICAgICAgICByZXR1cm4gX1B5VW5pY29kZVdyaXRlcl9Xcml0ZVN0cih3cml0ZXIsIHN0cik7CisKKyAgICBpZiAoUHlVbmljb2RlX01BWF9DSEFSX1ZBTFVFKHN0cikgPiB3cml0ZXItPm1heGNoYXIpCisgICAgICAgIG1heGNoYXIgPSBfUHlVbmljb2RlX0ZpbmRNYXhDaGFyKHN0ciwgc3RhcnQsIGVuZCk7CisgICAgZWxzZQorICAgICAgICBtYXhjaGFyID0gd3JpdGVyLT5tYXhjaGFyOworICAgIGxlbiA9IGVuZCAtIHN0YXJ0OworCisgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfUHJlcGFyZSh3cml0ZXIsIGxlbiwgbWF4Y2hhcikgPCAwKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBfUHlVbmljb2RlX0Zhc3RDb3B5Q2hhcmFjdGVycyh3cml0ZXItPmJ1ZmZlciwgd3JpdGVyLT5wb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyLCBzdGFydCwgbGVuKTsKKyAgICB3cml0ZXItPnBvcyArPSBsZW47CisgICAgcmV0dXJuIDA7Cit9CisKK2ludAorX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUFTQ0lJU3RyaW5nKF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICphc2NpaSwgUHlfc3NpemVfdCBsZW4pCit7CisgICAgaWYgKGxlbiA9PSAtMSkKKyAgICAgICAgbGVuID0gc3RybGVuKGFzY2lpKTsKKworICAgIGFzc2VydCh1Y3MxbGliX2ZpbmRfbWF4X2NoYXIoKFB5X1VDUzEqKWFzY2lpLCAoUHlfVUNTMSopYXNjaWkgKyBsZW4pIDwgMTI4KTsKKworICAgIGlmICh3cml0ZXItPmJ1ZmZlciA9PSBOVUxMICYmICF3cml0ZXItPm92ZXJhbGxvY2F0ZSkgeworICAgICAgICBQeU9iamVjdCAqc3RyOworCisgICAgICAgIHN0ciA9IF9QeVVuaWNvZGVfRnJvbUFTQ0lJKGFzY2lpLCBsZW4pOworICAgICAgICBpZiAoc3RyID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gLTE7CisKKyAgICAgICAgd3JpdGVyLT5yZWFkb25seSA9IDE7CisgICAgICAgIHdyaXRlci0+YnVmZmVyID0gc3RyOworICAgICAgICBfUHlVbmljb2RlV3JpdGVyX1VwZGF0ZSh3cml0ZXIpOworICAgICAgICB3cml0ZXItPnBvcyArPSBsZW47CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1ByZXBhcmUod3JpdGVyLCBsZW4sIDEyNykgPT0gLTEpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIHN3aXRjaCAod3JpdGVyLT5raW5kKQorICAgIHsKKyAgICBjYXNlIFB5VW5pY29kZV8xQllURV9LSU5EOgorICAgIHsKKyAgICAgICAgY29uc3QgUHlfVUNTMSAqc3RyID0gKGNvbnN0IFB5X1VDUzEgKilhc2NpaTsKKyAgICAgICAgUHlfVUNTMSAqZGF0YSA9IHdyaXRlci0+ZGF0YTsKKworICAgICAgICBQeV9NRU1DUFkoZGF0YSArIHdyaXRlci0+cG9zLCBzdHIsIGxlbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFB5VW5pY29kZV8yQllURV9LSU5EOgorICAgIHsKKyAgICAgICAgX1B5VW5pY29kZV9DT05WRVJUX0JZVEVTKAorICAgICAgICAgICAgUHlfVUNTMSwgUHlfVUNTMiwKKyAgICAgICAgICAgIGFzY2lpLCBhc2NpaSArIGxlbiwKKyAgICAgICAgICAgIChQeV9VQ1MyICopd3JpdGVyLT5kYXRhICsgd3JpdGVyLT5wb3MpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQeVVuaWNvZGVfNEJZVEVfS0lORDoKKyAgICB7CisgICAgICAgIF9QeVVuaWNvZGVfQ09OVkVSVF9CWVRFUygKKyAgICAgICAgICAgIFB5X1VDUzEsIFB5X1VDUzQsCisgICAgICAgICAgICBhc2NpaSwgYXNjaWkgKyBsZW4sCisgICAgICAgICAgICAoUHlfVUNTNCAqKXdyaXRlci0+ZGF0YSArIHdyaXRlci0+cG9zKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIGFzc2VydCgwKTsKKyAgICB9CisKKyAgICB3cml0ZXItPnBvcyArPSBsZW47CisgICAgcmV0dXJuIDA7Cit9CisKK2ludAorX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUxhdGluMVN0cmluZyhfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnN0ciwgUHlfc3NpemVfdCBsZW4pCit7CisgICAgUHlfVUNTNCBtYXhjaGFyOworCisgICAgbWF4Y2hhciA9IHVjczFsaWJfZmluZF9tYXhfY2hhcigoUHlfVUNTMSopc3RyLCAoUHlfVUNTMSopc3RyICsgbGVuKTsKKyAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9QcmVwYXJlKHdyaXRlciwgbGVuLCBtYXhjaGFyKSA9PSAtMSkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIHVuaWNvZGVfd3JpdGVfY3N0cih3cml0ZXItPmJ1ZmZlciwgd3JpdGVyLT5wb3MsIHN0ciwgbGVuKTsKKyAgICB3cml0ZXItPnBvcyArPSBsZW47CisgICAgcmV0dXJuIDA7Cit9CisKIFB5T2JqZWN0ICoKIF9QeVVuaWNvZGVXcml0ZXJfRmluaXNoKF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlcikKIHsKKyAgICBQeU9iamVjdCAqc3RyOwogICAgIGlmICh3cml0ZXItPnBvcyA9PSAwKSB7Ci0gICAgICAgIFB5X1hERUNSRUYod3JpdGVyLT5idWZmZXIpOworICAgICAgICBQeV9DTEVBUih3cml0ZXItPmJ1ZmZlcik7CiAgICAgICAgIF9QeV9SRVRVUk5fVU5JQ09ERV9FTVBUWSgpOwogICAgIH0KICAgICBpZiAod3JpdGVyLT5yZWFkb25seSkgewotICAgICAgICBhc3NlcnQoUHlVbmljb2RlX0dFVF9MRU5HVEgod3JpdGVyLT5idWZmZXIpID09IHdyaXRlci0+cG9zKTsKLSAgICAgICAgcmV0dXJuIHdyaXRlci0+YnVmZmVyOworICAgICAgICBzdHIgPSB3cml0ZXItPmJ1ZmZlcjsKKyAgICAgICAgd3JpdGVyLT5idWZmZXIgPSBOVUxMOworICAgICAgICBhc3NlcnQoUHlVbmljb2RlX0dFVF9MRU5HVEgoc3RyKSA9PSB3cml0ZXItPnBvcyk7CisgICAgICAgIHJldHVybiBzdHI7CiAgICAgfQogICAgIGlmIChQeVVuaWNvZGVfR0VUX0xFTkdUSCh3cml0ZXItPmJ1ZmZlcikgIT0gd3JpdGVyLT5wb3MpIHsKICAgICAgICAgUHlPYmplY3QgKm5ld2J1ZmZlcjsKICAgICAgICAgbmV3YnVmZmVyID0gcmVzaXplX2NvbXBhY3Qod3JpdGVyLT5idWZmZXIsIHdyaXRlci0+cG9zKTsKICAgICAgICAgaWYgKG5ld2J1ZmZlciA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBQeV9ERUNSRUYod3JpdGVyLT5idWZmZXIpOworICAgICAgICAgICAgUHlfQ0xFQVIod3JpdGVyLT5idWZmZXIpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KICAgICAgICAgd3JpdGVyLT5idWZmZXIgPSBuZXdidWZmZXI7CiAgICAgfQotICAgIGFzc2VydChfUHlVbmljb2RlX0NoZWNrQ29uc2lzdGVuY3kod3JpdGVyLT5idWZmZXIsIDEpKTsKLSAgICByZXR1cm4gdW5pY29kZV9yZXN1bHRfcmVhZHkod3JpdGVyLT5idWZmZXIpOworICAgIHN0ciA9IHdyaXRlci0+YnVmZmVyOworICAgIHdyaXRlci0+YnVmZmVyID0gTlVMTDsKKyAgICBhc3NlcnQoX1B5VW5pY29kZV9DaGVja0NvbnNpc3RlbmN5KHN0ciwgMSkpOworICAgIHJldHVybiB1bmljb2RlX3Jlc3VsdF9yZWFkeShzdHIpOwogfQogCiB2b2lkCkBAIC0xMzAyNyw3ICsxMzU5Miw3IEBACiAKICAgICBpZiAoUHlVbmljb2RlX1JFQURZKHNlbGYpID09IC0xKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBfUHlVbmljb2RlV3JpdGVyX0luaXQoJndyaXRlciwgMCk7CisgICAgX1B5VW5pY29kZVdyaXRlcl9Jbml0KCZ3cml0ZXIpOwogICAgIHJldCA9IF9QeVVuaWNvZGVfRm9ybWF0QWR2YW5jZWRXcml0ZXIoJndyaXRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYsIGZvcm1hdF9zcGVjLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0dFVF9MRU5HVEgoZm9ybWF0X3NwZWMpKTsKQEAgLTEzMDk2LDcgKzEzNjYxLDggQEAKICAgICB7InRpdGxlIiwgKFB5Q0Z1bmN0aW9uKSB1bmljb2RlX3RpdGxlLCBNRVRIX05PQVJHUywgdGl0bGVfX2RvY19ffSwKICAgICB7ImNlbnRlciIsIChQeUNGdW5jdGlvbikgdW5pY29kZV9jZW50ZXIsIE1FVEhfVkFSQVJHUywgY2VudGVyX19kb2NfX30sCiAgICAgeyJjb3VudCIsIChQeUNGdW5jdGlvbikgdW5pY29kZV9jb3VudCwgTUVUSF9WQVJBUkdTLCBjb3VudF9fZG9jX199LAotICAgIHsiZXhwYW5kdGFicyIsIChQeUNGdW5jdGlvbikgdW5pY29kZV9leHBhbmR0YWJzLCBNRVRIX1ZBUkFSR1MsIGV4cGFuZHRhYnNfX2RvY19ffSwKKyAgICB7ImV4cGFuZHRhYnMiLCAoUHlDRnVuY3Rpb24pIHVuaWNvZGVfZXhwYW5kdGFicywKKyAgICAgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywgZXhwYW5kdGFic19fZG9jX199LAogICAgIHsiZmluZCIsIChQeUNGdW5jdGlvbikgdW5pY29kZV9maW5kLCBNRVRIX1ZBUkFSR1MsIGZpbmRfX2RvY19ffSwKICAgICB7InBhcnRpdGlvbiIsIChQeUNGdW5jdGlvbikgdW5pY29kZV9wYXJ0aXRpb24sIE1FVEhfTywgcGFydGl0aW9uX19kb2NfX30sCiAgICAgeyJpbmRleCIsIChQeUNGdW5jdGlvbikgdW5pY29kZV9pbmRleCwgTUVUSF9WQVJBUkdTLCBpbmRleF9fZG9jX199LApAQCAtMTMxMDgsNyArMTM2NzQsOCBAQAogICAgIHsicmp1c3QiLCAoUHlDRnVuY3Rpb24pIHVuaWNvZGVfcmp1c3QsIE1FVEhfVkFSQVJHUywgcmp1c3RfX2RvY19ffSwKICAgICB7InJzdHJpcCIsIChQeUNGdW5jdGlvbikgdW5pY29kZV9yc3RyaXAsIE1FVEhfVkFSQVJHUywgcnN0cmlwX19kb2NfX30sCiAgICAgeyJycGFydGl0aW9uIiwgKFB5Q0Z1bmN0aW9uKSB1bmljb2RlX3JwYXJ0aXRpb24sIE1FVEhfTywgcnBhcnRpdGlvbl9fZG9jX199LAotICAgIHsic3BsaXRsaW5lcyIsIChQeUNGdW5jdGlvbikgdW5pY29kZV9zcGxpdGxpbmVzLCBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLCBzcGxpdGxpbmVzX19kb2NfX30sCisgICAgeyJzcGxpdGxpbmVzIiwgKFB5Q0Z1bmN0aW9uKSB1bmljb2RlX3NwbGl0bGluZXMsCisgICAgIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsIHNwbGl0bGluZXNfX2RvY19ffSwKICAgICB7InN0cmlwIiwgKFB5Q0Z1bmN0aW9uKSB1bmljb2RlX3N0cmlwLCBNRVRIX1ZBUkFSR1MsIHN0cmlwX19kb2NfX30sCiAgICAgeyJzd2FwY2FzZSIsIChQeUNGdW5jdGlvbikgdW5pY29kZV9zd2FwY2FzZSwgTUVUSF9OT0FSR1MsIHN3YXBjYXNlX19kb2NfX30sCiAgICAgeyJ0cmFuc2xhdGUiLCAoUHlDRnVuY3Rpb24pIHVuaWNvZGVfdHJhbnNsYXRlLCBNRVRIX08sIHRyYW5zbGF0ZV9fZG9jX199LApAQCAtMTMxMzAsOCArMTM2OTcsNyBAQAogICAgIHsiZm9ybWF0IiwgKFB5Q0Z1bmN0aW9uKSBkb19zdHJpbmdfZm9ybWF0LCBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLCBmb3JtYXRfX2RvY19ffSwKICAgICB7ImZvcm1hdF9tYXAiLCAoUHlDRnVuY3Rpb24pIGRvX3N0cmluZ19mb3JtYXRfbWFwLCBNRVRIX08sIGZvcm1hdF9tYXBfX2RvY19ffSwKICAgICB7Il9fZm9ybWF0X18iLCAoUHlDRnVuY3Rpb24pIHVuaWNvZGVfX2Zvcm1hdF9fLCBNRVRIX1ZBUkFSR1MsIHBfZm9ybWF0X19kb2NfX30sCi0gICAgeyJtYWtldHJhbnMiLCAoUHlDRnVuY3Rpb24pIHVuaWNvZGVfbWFrZXRyYW5zLAotICAgICBNRVRIX1ZBUkFSR1MgfCBNRVRIX1NUQVRJQywgbWFrZXRyYW5zX19kb2NfX30sCisgICAgVU5JQ09ERV9NQUtFVFJBTlNfTUVUSE9EREVGCiAgICAgeyJfX3NpemVvZl9fIiwgKFB5Q0Z1bmN0aW9uKSB1bmljb2RlX19zaXplb2ZfXywgTUVUSF9OT0FSR1MsIHNpemVvZl9fZG9jX199LAogI2lmIDAKICAgICAvKiBUaGVzZSBtZXRob2RzIGFyZSBqdXN0IHVzZWQgZm9yIGRlYnVnZ2luZyB0aGUgaW1wbGVtZW50YXRpb24uICovCkBAIC0xMzI0NiwxNiArMTM4MTIsMzkgQEAKIAogLyogSGVscGVycyBmb3IgUHlVbmljb2RlX0Zvcm1hdCgpICovCiAKK3N0cnVjdCB1bmljb2RlX2Zvcm1hdHRlcl90IHsKKyAgICBQeU9iamVjdCAqYXJnczsKKyAgICBpbnQgYXJnc19vd25lZDsKKyAgICBQeV9zc2l6ZV90IGFyZ2xlbiwgYXJnaWR4OworICAgIFB5T2JqZWN0ICpkaWN0OworCisgICAgZW51bSBQeVVuaWNvZGVfS2luZCBmbXRraW5kOworICAgIFB5X3NzaXplX3QgZm10Y250LCBmbXRwb3M7CisgICAgdm9pZCAqZm10ZGF0YTsKKyAgICBQeU9iamVjdCAqZm10c3RyOworCisgICAgX1B5VW5pY29kZVdyaXRlciB3cml0ZXI7Cit9OworCitzdHJ1Y3QgdW5pY29kZV9mb3JtYXRfYXJnX3QgeworICAgIFB5X1VDUzQgY2g7CisgICAgaW50IGZsYWdzOworICAgIFB5X3NzaXplX3Qgd2lkdGg7CisgICAgaW50IHByZWM7CisgICAgaW50IHNpZ247Cit9OworCiBzdGF0aWMgUHlPYmplY3QgKgotZ2V0bmV4dGFyZyhQeU9iamVjdCAqYXJncywgUHlfc3NpemVfdCBhcmdsZW4sIFB5X3NzaXplX3QgKnBfYXJnaWR4KQordW5pY29kZV9mb3JtYXRfZ2V0bmV4dGFyZyhzdHJ1Y3QgdW5pY29kZV9mb3JtYXR0ZXJfdCAqY3R4KQogewotICAgIFB5X3NzaXplX3QgYXJnaWR4ID0gKnBfYXJnaWR4OwotICAgIGlmIChhcmdpZHggPCBhcmdsZW4pIHsKLSAgICAgICAgKCpwX2FyZ2lkeCkrKzsKLSAgICAgICAgaWYgKGFyZ2xlbiA8IDApCi0gICAgICAgICAgICByZXR1cm4gYXJnczsKKyAgICBQeV9zc2l6ZV90IGFyZ2lkeCA9IGN0eC0+YXJnaWR4OworCisgICAgaWYgKGFyZ2lkeCA8IGN0eC0+YXJnbGVuKSB7CisgICAgICAgIGN0eC0+YXJnaWR4Kys7CisgICAgICAgIGlmIChjdHgtPmFyZ2xlbiA8IDApCisgICAgICAgICAgICByZXR1cm4gY3R4LT5hcmdzOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gUHlUdXBsZV9HZXRJdGVtKGFyZ3MsIGFyZ2lkeCk7CisgICAgICAgICAgICByZXR1cm4gUHlUdXBsZV9HZXRJdGVtKGN0eC0+YXJncywgYXJnaWR4KTsKICAgICB9CiAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgIm5vdCBlbm91Z2ggYXJndW1lbnRzIGZvciBmb3JtYXQgc3RyaW5nIik7CkBAIC0xMzI2NCwzMyArMTM4NTMsNDIgQEAKIAogLyogUmV0dXJucyBhIG5ldyByZWZlcmVuY2UgdG8gYSBQeVVuaWNvZGUgb2JqZWN0LCBvciBOVUxMIG9uIGZhaWx1cmUuICovCiAKKy8qIEZvcm1hdCBhIGZsb2F0IGludG8gdGhlIHdyaXRlciBpZiB0aGUgd3JpdGVyIGlzIG5vdCBOVUxMLCBvciBpbnRvICpwX291dHB1dAorICAgb3RoZXJ3aXNlLgorCisgICBSZXR1cm4gMCBvbiBzdWNjZXNzLCByYWlzZSBhbiBleGNlcHRpb24gYW5kIHJldHVybiAtMSBvbiBlcnJvci4gKi8KIHN0YXRpYyBpbnQKLWZvcm1hdGZsb2F0KFB5T2JqZWN0ICp2LCBpbnQgZmxhZ3MsIGludCBwcmVjLCBpbnQgdHlwZSwKLSAgICAgICAgICAgIFB5T2JqZWN0ICoqcF9vdXRwdXQsIF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlcikKK2Zvcm1hdGZsb2F0KFB5T2JqZWN0ICp2LCBzdHJ1Y3QgdW5pY29kZV9mb3JtYXRfYXJnX3QgKmFyZywKKyAgICAgICAgICAgIFB5T2JqZWN0ICoqcF9vdXRwdXQsCisgICAgICAgICAgICBfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIpCiB7CiAgICAgY2hhciAqcDsKICAgICBkb3VibGUgeDsKICAgICBQeV9zc2l6ZV90IGxlbjsKKyAgICBpbnQgcHJlYzsKKyAgICBpbnQgZHRvYV9mbGFnczsKIAogICAgIHggPSBQeUZsb2F0X0FzRG91YmxlKHYpOwogICAgIGlmICh4ID09IC0xLjAgJiYgUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgcmV0dXJuIC0xOwogCisgICAgcHJlYyA9IGFyZy0+cHJlYzsKICAgICBpZiAocHJlYyA8IDApCiAgICAgICAgIHByZWMgPSA2OwogCi0gICAgcCA9IFB5T1NfZG91YmxlX3RvX3N0cmluZyh4LCB0eXBlLCBwcmVjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZsYWdzICYgRl9BTFQpID8gUHlfRFRTRl9BTFQgOiAwLCBOVUxMKTsKKyAgICBpZiAoYXJnLT5mbGFncyAmIEZfQUxUKQorICAgICAgICBkdG9hX2ZsYWdzID0gUHlfRFRTRl9BTFQ7CisgICAgZWxzZQorICAgICAgICBkdG9hX2ZsYWdzID0gMDsKKyAgICBwID0gUHlPU19kb3VibGVfdG9fc3RyaW5nKHgsIGFyZy0+Y2gsIHByZWMsIGR0b2FfZmxhZ3MsIE5VTEwpOwogICAgIGlmIChwID09IE5VTEwpCiAgICAgICAgIHJldHVybiAtMTsKICAgICBsZW4gPSBzdHJsZW4ocCk7CiAgICAgaWYgKHdyaXRlcikgewotICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9QcmVwYXJlKHdyaXRlciwgbGVuLCAxMjcpID09IC0xKSB7CisgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQVNDSUlTdHJpbmcod3JpdGVyLCBwLCBsZW4pIDwgMCkgewogICAgICAgICAgICAgUHlNZW1fRnJlZShwKTsKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQotICAgICAgICB1bmljb2RlX3dyaXRlX2NzdHIod3JpdGVyLT5idWZmZXIsIHdyaXRlci0+cG9zLCBwLCBsZW4pOwotICAgICAgICB3cml0ZXItPnBvcyArPSBsZW47CiAgICAgfQogICAgIGVsc2UKICAgICAgICAgKnBfb3V0cHV0ID0gX1B5VW5pY29kZV9Gcm9tQVNDSUkocCwgbGVuKTsKQEAgLTEzMzE3LDcgKzEzOTE1LDcgQEAKICAqIHByb2R1Y2UgYSAnLScgc2lnbiwgYnV0IGNhbiBmb3IgUHl0aG9uJ3MgdW5ib3VuZGVkIGludHMuCiAgKi8KIHN0YXRpYyBQeU9iamVjdCoKLWZvcm1hdGxvbmcoUHlPYmplY3QgKnZhbCwgaW50IGZsYWdzLCBpbnQgcHJlYywgaW50IHR5cGUpCitmb3JtYXRsb25nKFB5T2JqZWN0ICp2YWwsIHN0cnVjdCB1bmljb2RlX2Zvcm1hdF9hcmdfdCAqYXJnKQogewogICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBOVUxMOwogICAgIGNoYXIgKmJ1ZjsKQEAgLTEzMzI3LDYgKzEzOTI1LDggQEAKICAgICBQeV9zc2l6ZV90IGxsZW47CiAgICAgaW50IG51bWRpZ2l0czsgICAgICAvKiBsZW4gPT0gbnVtbm9uZGlnaXRzICsgbnVtZGlnaXRzICovCiAgICAgaW50IG51bW5vbmRpZ2l0cyA9IDA7CisgICAgaW50IHByZWMgPSBhcmctPnByZWM7CisgICAgaW50IHR5cGUgPSBhcmctPmNoOwogCiAgICAgLyogQXZvaWQgZXhjZWVkaW5nIFNTSVpFX1RfTUFYICovCiAgICAgaWYgKHByZWMgPiBJTlRfTUFYLTMpIHsKQEAgLTEzMzM4LDEzICsxMzkzOCwxNCBAQAogICAgIGFzc2VydChQeUxvbmdfQ2hlY2sodmFsKSk7CiAKICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBkZWZhdWx0OgorICAgICAgICBhc3NlcnQoISIndHlwZScgbm90IGluIFtkaXVveFhdIik7CiAgICAgY2FzZSAnZCc6CisgICAgY2FzZSAnaSc6CiAgICAgY2FzZSAndSc6Ci0gICAgICAgIC8qIFNwZWNpYWwtY2FzZSBib29sZWFuOiB3ZSB3YW50IDAvMSAqLwotICAgICAgICBpZiAoUHlCb29sX0NoZWNrKHZhbCkpCi0gICAgICAgICAgICByZXN1bHQgPSBQeU51bWJlcl9Ub0Jhc2UodmFsLCAxMCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJlc3VsdCA9IFB5X1RZUEUodmFsKS0+dHBfc3RyKHZhbCk7CisgICAgICAgIC8qIGludCBhbmQgaW50IHN1YmNsYXNzZXMgc2hvdWxkIHByaW50IG51bWVyaWNhbGx5IHdoZW4gYSBudW1lcmljICovCisgICAgICAgIC8qIGZvcm1hdCBjb2RlIGlzIHVzZWQgKHNlZSBpc3N1ZTE4NzgwKSAqLworICAgICAgICByZXN1bHQgPSBQeU51bWJlcl9Ub0Jhc2UodmFsLCAxMCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgJ28nOgogICAgICAgICBudW1ub25kaWdpdHMgPSAyOwpAQCAtMTMzNTUsOCArMTM5NTYsNiBAQAogICAgICAgICBudW1ub25kaWdpdHMgPSAyOwogICAgICAgICByZXN1bHQgPSBQeU51bWJlcl9Ub0Jhc2UodmFsLCAxNik7CiAgICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGFzc2VydCghIid0eXBlJyBub3QgaW4gW2R1b3hYXSIpOwogICAgIH0KICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0xMzM2NywxMiArMTM5NjYsMTQgQEAKIAogICAgIC8qIFRvIG1vZGlmeSB0aGUgc3RyaW5nIGluLXBsYWNlLCB0aGVyZSBjYW4gb25seSBiZSBvbmUgcmVmZXJlbmNlLiAqLwogICAgIGlmIChQeV9SRUZDTlQocmVzdWx0KSAhPSAxKSB7CisgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOwogICAgICAgICBQeUVycl9CYWRJbnRlcm5hbENhbGwoKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIGJ1ZiA9IFB5VW5pY29kZV9EQVRBKHJlc3VsdCk7CiAgICAgbGxlbiA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHJlc3VsdCk7CiAgICAgaWYgKGxsZW4gPiBJTlRfTUFYKSB7CisgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOwogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJzdHJpbmcgdG9vIGxhcmdlIGluIF9QeUJ5dGVzX0Zvcm1hdExvbmciKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0xMzM4NCw3ICsxMzk4NSw3IEBACiAgICAgYXNzZXJ0KG51bWRpZ2l0cyA+IDApOwogCiAgICAgLyogR2V0IHJpZCBvZiBiYXNlIG1hcmtlciB1bmxlc3MgRl9BTFQgKi8KLSAgICBpZiAoKChmbGFncyAmIEZfQUxUKSA9PSAwICYmCisgICAgaWYgKCgoYXJnLT5mbGFncyAmIEZfQUxUKSA9PSAwICYmCiAgICAgICAgICh0eXBlID09ICdvJyB8fCB0eXBlID09ICd4JyB8fCB0eXBlID09ICdYJykpKSB7CiAgICAgICAgIGFzc2VydChidWZbc2lnbl0gPT0gJzAnKTsKICAgICAgICAgYXNzZXJ0KGJ1ZltzaWduKzFdID09ICd4JyB8fCBidWZbc2lnbisxXSA9PSAnWCcgfHwKQEAgLTEzNDI5LDE1ICsxNDAzMCwxMjEgQEAKICAgICAgICAgICAgIGlmIChidWZbaV0gPj0gJ2EnICYmIGJ1ZltpXSA8PSAneCcpCiAgICAgICAgICAgICAgICAgYnVmW2ldIC09ICdhJy0nQSc7CiAgICAgfQotICAgIGlmICghUHlVbmljb2RlX0NoZWNrKHJlc3VsdCkgfHwgbGVuICE9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHJlc3VsdCkpIHsKKyAgICBpZiAoIVB5VW5pY29kZV9DaGVjayhyZXN1bHQpCisgICAgICAgIHx8IGJ1ZiAhPSBQeVVuaWNvZGVfREFUQShyZXN1bHQpKSB7CiAgICAgICAgIFB5T2JqZWN0ICp1bmljb2RlOwogICAgICAgICB1bmljb2RlID0gX1B5VW5pY29kZV9Gcm9tQVNDSUkoYnVmLCBsZW4pOwogICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKICAgICAgICAgcmVzdWx0ID0gdW5pY29kZTsKICAgICB9CisgICAgZWxzZSBpZiAobGVuICE9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHJlc3VsdCkpIHsKKyAgICAgICAgaWYgKFB5VW5pY29kZV9SZXNpemUoJnJlc3VsdCwgbGVuKSA8IDApCisgICAgICAgICAgICBQeV9DTEVBUihyZXN1bHQpOworICAgIH0KICAgICByZXR1cm4gcmVzdWx0OwogfQogCisvKiBGb3JtYXQgYW4gaW50ZWdlciBvciBhIGZsb2F0IGFzIGFuIGludGVnZXIuCisgKiBSZXR1cm4gMSBpZiB0aGUgbnVtYmVyIGhhcyBiZWVuIGZvcm1hdHRlZCBpbnRvIHRoZSB3cml0ZXIsCisgKiAgICAgICAgMCBpZiB0aGUgbnVtYmVyIGhhcyBiZWVuIGZvcm1hdHRlZCBpbnRvICpwX291dHB1dAorICogICAgICAgLTEgYW5kIHJhaXNlIGFuIGV4Y2VwdGlvbiBvbiBlcnJvciAqLworc3RhdGljIGludAorbWFpbmZvcm1hdGxvbmcoUHlPYmplY3QgKnYsCisgICAgICAgICAgICAgICBzdHJ1Y3QgdW5pY29kZV9mb3JtYXRfYXJnX3QgKmFyZywKKyAgICAgICAgICAgICAgIFB5T2JqZWN0ICoqcF9vdXRwdXQsCisgICAgICAgICAgICAgICBfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIpCit7CisgICAgUHlPYmplY3QgKmlvYmosICpyZXM7CisgICAgY2hhciB0eXBlID0gKGNoYXIpYXJnLT5jaDsKKworICAgIGlmICghUHlOdW1iZXJfQ2hlY2sodikpCisgICAgICAgIGdvdG8gd3Jvbmd0eXBlOworCisgICAgLyogbWFrZSBzdXJlIG51bWJlciBpcyBhIHR5cGUgb2YgaW50ZWdlciAqLworICAgIC8qIGlmIG5vdCwgaXNzdWUgZGVwcmVjYXRpb24gd2FybmluZyBmb3Igbm93ICovCisgICAgaWYgKCFQeUxvbmdfQ2hlY2sodikpIHsKKyAgICAgICAgaWYgKHR5cGUgPT0gJ28nIHx8IHR5cGUgPT0gJ3gnIHx8IHR5cGUgPT0gJ1gnKSB7CisgICAgICAgICAgICBpb2JqID0gUHlOdW1iZXJfSW5kZXgodik7CisgICAgICAgICAgICBpZiAoaW9iaiA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgICAgICAgICBpZiAoUHlFcnJfV2FybkV4KFB5RXhjX0RlcHJlY2F0aW9uV2FybmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhdXRvbWF0aWMgaW50IGNvbnZlcnNpb25zIGhhdmUgYmVlbiBkZXByZWNhdGVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaW9iaiA9IFB5TnVtYmVyX0xvbmcodik7CisgICAgICAgICAgICAgICAgaWYgKGlvYmogPT0gTlVMTCApIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfVHlwZUVycm9yKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gd3Jvbmd0eXBlOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaW9iaiA9IFB5TnVtYmVyX0xvbmcodik7CisgICAgICAgICAgICBpZiAoaW9iaiA9PSBOVUxMICkgeworICAgICAgICAgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX1R5cGVFcnJvcikpCisgICAgICAgICAgICAgICAgICAgIGdvdG8gd3Jvbmd0eXBlOworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBhc3NlcnQoUHlMb25nX0NoZWNrKGlvYmopKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGlvYmogPSB2OworICAgICAgICBQeV9JTkNSRUYoaW9iaik7CisgICAgfQorCisgICAgaWYgKFB5TG9uZ19DaGVja0V4YWN0KHYpCisgICAgICAgICYmIGFyZy0+d2lkdGggPT0gLTEgJiYgYXJnLT5wcmVjID09IC0xCisgICAgICAgICYmICEoYXJnLT5mbGFncyAmIChGX1NJR04gfCBGX0JMQU5LKSkKKyAgICAgICAgJiYgdHlwZSAhPSAnWCcpCisgICAgeworICAgICAgICAvKiBGYXN0IHBhdGggKi8KKyAgICAgICAgaW50IGFsdGVybmF0ZSA9IGFyZy0+ZmxhZ3MgJiBGX0FMVDsKKyAgICAgICAgaW50IGJhc2U7CisKKyAgICAgICAgc3dpdGNoKHR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYXNzZXJ0KDAgJiYgIid0eXBlJyBub3QgaW4gW2RpdW94WF0iKTsKKyAgICAgICAgICAgIGNhc2UgJ2QnOgorICAgICAgICAgICAgY2FzZSAnaSc6CisgICAgICAgICAgICBjYXNlICd1JzoKKyAgICAgICAgICAgICAgICBiYXNlID0gMTA7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICdvJzoKKyAgICAgICAgICAgICAgICBiYXNlID0gODsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ3gnOgorICAgICAgICAgICAgY2FzZSAnWCc6CisgICAgICAgICAgICAgICAgYmFzZSA9IDE2OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKF9QeUxvbmdfRm9ybWF0V3JpdGVyKHdyaXRlciwgdiwgYmFzZSwgYWx0ZXJuYXRlKSA9PSAtMSkgeworICAgICAgICAgICAgUHlfREVDUkVGKGlvYmopOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIFB5X0RFQ1JFRihpb2JqKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgcmVzID0gZm9ybWF0bG9uZyhpb2JqLCBhcmcpOworICAgIFB5X0RFQ1JFRihpb2JqKTsKKyAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKyAgICAqcF9vdXRwdXQgPSByZXM7CisgICAgcmV0dXJuIDA7CisKK3dyb25ndHlwZToKKyAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgIiUlJWMgZm9ybWF0OiBhIG51bWJlciBpcyByZXF1aXJlZCwgIgorICAgICAgICAgICAgIm5vdCAlLjIwMHMiLAorICAgICAgICAgICAgdHlwZSwgUHlfVFlQRSh2KS0+dHBfbmFtZSk7CisgICAgcmV0dXJuIC0xOworfQorCiBzdGF0aWMgUHlfVUNTNAogZm9ybWF0Y2hhcihQeU9iamVjdCAqdikKIHsKQEAgLTEzNDQ5LDggKzE0MTU2LDMwIEBACiAgICAgICAgIGdvdG8gb25FcnJvcjsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIC8qIEludGVnZXIgaW5wdXQgdHJ1bmNhdGVkIHRvIGEgY2hhcmFjdGVyICovCisgICAgICAgIFB5T2JqZWN0ICppb2JqOwogICAgICAgICBsb25nIHg7CisgICAgICAgIC8qIG1ha2Ugc3VyZSBudW1iZXIgaXMgYSB0eXBlIG9mIGludGVnZXIgKi8KKyAgICAgICAgLyogaWYgbm90LCBpc3N1ZSBkZXByZWNhdGlvbiB3YXJuaW5nIGZvciBub3cgKi8KKyAgICAgICAgaWYgKCFQeUxvbmdfQ2hlY2sodikpIHsKKyAgICAgICAgICAgIGlvYmogPSBQeU51bWJlcl9JbmRleCh2KTsKKyAgICAgICAgICAgIGlmIChpb2JqID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICAgICAgICAgIGlmIChQeUVycl9XYXJuRXgoUHlFeGNfRGVwcmVjYXRpb25XYXJuaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImF1dG9tYXRpYyBpbnQgY29udmVyc2lvbnMgaGF2ZSBiZWVuIGRlcHJlY2F0ZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpb2JqID0gUHlOdW1iZXJfTG9uZyh2KTsKKyAgICAgICAgICAgICAgICBpZiAoaW9iaiA9PSBOVUxMICkgeworICAgICAgICAgICAgICAgICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19UeXBlRXJyb3IpKQorICAgICAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgdiA9IGlvYmo7CisgICAgICAgICAgICBQeV9ERUNSRUYoaW9iaik7CisgICAgICAgIH0KKyAgICAgICAgLyogSW50ZWdlciBpbnB1dCB0cnVuY2F0ZWQgdG8gYSBjaGFyYWN0ZXIgKi8KICAgICAgICAgeCA9IFB5TG9uZ19Bc0xvbmcodik7CiAgICAgICAgIGlmICh4ID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CkBAIC0xMzQ3MCw1NDAgKzE0MTk5LDU4OCBAQAogICAgIHJldHVybiAoUHlfVUNTNCkgLTE7CiB9CiAKKy8qIFBhcnNlIG9wdGlvbnMgb2YgYW4gYXJndW1lbnQ6IGZsYWdzLCB3aWR0aCwgcHJlY2lzaW9uLgorICAgSGFuZGxlIGFsc28gIiUobmFtZSkiIHN5bnRheC4KKworICAgUmV0dXJuIDAgaWYgdGhlIGFyZ3VtZW50IGhhcyBiZWVuIGZvcm1hdHRlZCBpbnRvIGFyZy0+c3RyLgorICAgUmV0dXJuIDEgaWYgdGhlIGFyZ3VtZW50IGhhcyBiZWVuIHdyaXR0ZW4gaW50byBjdHgtPndyaXRlciwKKyAgIFJhaXNlIGFuIGV4Y2VwdGlvbiBhbmQgcmV0dXJuIC0xIG9uIGVycm9yLiAqLworc3RhdGljIGludAordW5pY29kZV9mb3JtYXRfYXJnX3BhcnNlKHN0cnVjdCB1bmljb2RlX2Zvcm1hdHRlcl90ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHVuaWNvZGVfZm9ybWF0X2FyZ190ICphcmcpCit7CisjZGVmaW5lIEZPUk1BVF9SRUFEKGN0eCkgXAorICAgICAgICBQeVVuaWNvZGVfUkVBRCgoY3R4KS0+Zm10a2luZCwgKGN0eCktPmZtdGRhdGEsIChjdHgpLT5mbXRwb3MpCisKKyAgICBQeU9iamVjdCAqdjsKKworICAgIGlmIChhcmctPmNoID09ICcoJykgeworICAgICAgICAvKiBHZXQgYXJndW1lbnQgdmFsdWUgZnJvbSBhIGRpY3Rpb25hcnkuIEV4YW1wbGU6ICIlKG5hbWUpcyIuICovCisgICAgICAgIFB5X3NzaXplX3Qga2V5c3RhcnQ7CisgICAgICAgIFB5X3NzaXplX3Qga2V5bGVuOworICAgICAgICBQeU9iamVjdCAqa2V5OworICAgICAgICBpbnQgcGNvdW50ID0gMTsKKworICAgICAgICBpZiAoY3R4LT5kaWN0ID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZvcm1hdCByZXF1aXJlcyBhIG1hcHBpbmciKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICArK2N0eC0+Zm10cG9zOworICAgICAgICAtLWN0eC0+Zm10Y250OworICAgICAgICBrZXlzdGFydCA9IGN0eC0+Zm10cG9zOworICAgICAgICAvKiBTa2lwIG92ZXIgYmFsYW5jZWQgcGFyZW50aGVzZXMgKi8KKyAgICAgICAgd2hpbGUgKHBjb3VudCA+IDAgJiYgLS1jdHgtPmZtdGNudCA+PSAwKSB7CisgICAgICAgICAgICBhcmctPmNoID0gRk9STUFUX1JFQUQoY3R4KTsKKyAgICAgICAgICAgIGlmIChhcmctPmNoID09ICcpJykKKyAgICAgICAgICAgICAgICAtLXBjb3VudDsKKyAgICAgICAgICAgIGVsc2UgaWYgKGFyZy0+Y2ggPT0gJygnKQorICAgICAgICAgICAgICAgICsrcGNvdW50OworICAgICAgICAgICAgY3R4LT5mbXRwb3MrKzsKKyAgICAgICAgfQorICAgICAgICBrZXlsZW4gPSBjdHgtPmZtdHBvcyAtIGtleXN0YXJ0IC0gMTsKKyAgICAgICAgaWYgKGN0eC0+Zm10Y250IDwgMCB8fCBwY291bnQgPiAwKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW5jb21wbGV0ZSBmb3JtYXQga2V5Iik7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAga2V5ID0gUHlVbmljb2RlX1N1YnN0cmluZyhjdHgtPmZtdHN0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlzdGFydCwga2V5c3RhcnQgKyBrZXlsZW4pOworICAgICAgICBpZiAoa2V5ID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIGlmIChjdHgtPmFyZ3Nfb3duZWQpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihjdHgtPmFyZ3MpOworICAgICAgICAgICAgY3R4LT5hcmdzX293bmVkID0gMDsKKyAgICAgICAgfQorICAgICAgICBjdHgtPmFyZ3MgPSBQeU9iamVjdF9HZXRJdGVtKGN0eC0+ZGljdCwga2V5KTsKKyAgICAgICAgUHlfREVDUkVGKGtleSk7CisgICAgICAgIGlmIChjdHgtPmFyZ3MgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgY3R4LT5hcmdzX293bmVkID0gMTsKKyAgICAgICAgY3R4LT5hcmdsZW4gPSAtMTsKKyAgICAgICAgY3R4LT5hcmdpZHggPSAtMjsKKyAgICB9CisKKyAgICAvKiBQYXJzZSBmbGFncy4gRXhhbXBsZTogIiUraSIgPT4gZmxhZ3M9Rl9TSUdOLiAqLworICAgIHdoaWxlICgtLWN0eC0+Zm10Y250ID49IDApIHsKKyAgICAgICAgYXJnLT5jaCA9IEZPUk1BVF9SRUFEKGN0eCk7CisgICAgICAgIGN0eC0+Zm10cG9zKys7CisgICAgICAgIHN3aXRjaCAoYXJnLT5jaCkgeworICAgICAgICBjYXNlICctJzogYXJnLT5mbGFncyB8PSBGX0xKVVNUOyBjb250aW51ZTsKKyAgICAgICAgY2FzZSAnKyc6IGFyZy0+ZmxhZ3MgfD0gRl9TSUdOOyBjb250aW51ZTsKKyAgICAgICAgY2FzZSAnICc6IGFyZy0+ZmxhZ3MgfD0gRl9CTEFOSzsgY29udGludWU7CisgICAgICAgIGNhc2UgJyMnOiBhcmctPmZsYWdzIHw9IEZfQUxUOyBjb250aW51ZTsKKyAgICAgICAgY2FzZSAnMCc6IGFyZy0+ZmxhZ3MgfD0gRl9aRVJPOyBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICAvKiBQYXJzZSB3aWR0aC4gRXhhbXBsZTogIiUxMHMiID0+IHdpZHRoPTEwICovCisgICAgaWYgKGFyZy0+Y2ggPT0gJyonKSB7CisgICAgICAgIHYgPSB1bmljb2RlX2Zvcm1hdF9nZXRuZXh0YXJnKGN0eCk7CisgICAgICAgIGlmICh2ID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIGlmICghUHlMb25nX0NoZWNrKHYpKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIqIHdhbnRzIGludCIpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIGFyZy0+d2lkdGggPSBQeUxvbmdfQXNTc2l6ZV90KHYpOworICAgICAgICBpZiAoYXJnLT53aWR0aCA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICBpZiAoYXJnLT53aWR0aCA8IDApIHsKKyAgICAgICAgICAgIGFyZy0+ZmxhZ3MgfD0gRl9MSlVTVDsKKyAgICAgICAgICAgIGFyZy0+d2lkdGggPSAtYXJnLT53aWR0aDsKKyAgICAgICAgfQorICAgICAgICBpZiAoLS1jdHgtPmZtdGNudCA+PSAwKSB7CisgICAgICAgICAgICBhcmctPmNoID0gRk9STUFUX1JFQUQoY3R4KTsKKyAgICAgICAgICAgIGN0eC0+Zm10cG9zKys7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoYXJnLT5jaCA+PSAnMCcgJiYgYXJnLT5jaCA8PSAnOScpIHsKKyAgICAgICAgYXJnLT53aWR0aCA9IGFyZy0+Y2ggLSAnMCc7CisgICAgICAgIHdoaWxlICgtLWN0eC0+Zm10Y250ID49IDApIHsKKyAgICAgICAgICAgIGFyZy0+Y2ggPSBGT1JNQVRfUkVBRChjdHgpOworICAgICAgICAgICAgY3R4LT5mbXRwb3MrKzsKKyAgICAgICAgICAgIGlmIChhcmctPmNoIDwgJzAnIHx8IGFyZy0+Y2ggPiAnOScpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAvKiBTaW5jZSBhcmctPmNoIGlzIHVuc2lnbmVkLCB0aGUgUkhTIHdvdWxkIGVuZCB1cCBhcyB1bnNpZ25lZCwKKyAgICAgICAgICAgICAgIG1peGluZyBzaWduZWQgYW5kIHVuc2lnbmVkIGNvbXBhcmlzb24uIFNpbmNlIGFyZy0+Y2ggaXMgYmV0d2VlbgorICAgICAgICAgICAgICAgJzAnIGFuZCAnOScsIGNhc3RpbmcgdG8gaW50IGlzIHNhZmUuICovCisgICAgICAgICAgICBpZiAoYXJnLT53aWR0aCA+IChQWV9TU0laRV9UX01BWCAtICgoaW50KWFyZy0+Y2ggLSAnMCcpKSAvIDEwKSB7CisgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aWR0aCB0b28gYmlnIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYXJnLT53aWR0aCA9IGFyZy0+d2lkdGgqMTAgKyAoYXJnLT5jaCAtICcwJyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBQYXJzZSBwcmVjaXNpb24uIEV4YW1wbGU6ICIlLjNmIiA9PiBwcmVjPTMgKi8KKyAgICBpZiAoYXJnLT5jaCA9PSAnLicpIHsKKyAgICAgICAgYXJnLT5wcmVjID0gMDsKKyAgICAgICAgaWYgKC0tY3R4LT5mbXRjbnQgPj0gMCkgeworICAgICAgICAgICAgYXJnLT5jaCA9IEZPUk1BVF9SRUFEKGN0eCk7CisgICAgICAgICAgICBjdHgtPmZtdHBvcysrOworICAgICAgICB9CisgICAgICAgIGlmIChhcmctPmNoID09ICcqJykgeworICAgICAgICAgICAgdiA9IHVuaWNvZGVfZm9ybWF0X2dldG5leHRhcmcoY3R4KTsKKyAgICAgICAgICAgIGlmICh2ID09IE5VTEwpCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgaWYgKCFQeUxvbmdfQ2hlY2sodikpIHsKKyAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKiB3YW50cyBpbnQiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhcmctPnByZWMgPSBfUHlMb25nX0FzSW50KHYpOworICAgICAgICAgICAgaWYgKGFyZy0+cHJlYyA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIGlmIChhcmctPnByZWMgPCAwKQorICAgICAgICAgICAgICAgIGFyZy0+cHJlYyA9IDA7CisgICAgICAgICAgICBpZiAoLS1jdHgtPmZtdGNudCA+PSAwKSB7CisgICAgICAgICAgICAgICAgYXJnLT5jaCA9IEZPUk1BVF9SRUFEKGN0eCk7CisgICAgICAgICAgICAgICAgY3R4LT5mbXRwb3MrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChhcmctPmNoID49ICcwJyAmJiBhcmctPmNoIDw9ICc5JykgeworICAgICAgICAgICAgYXJnLT5wcmVjID0gYXJnLT5jaCAtICcwJzsKKyAgICAgICAgICAgIHdoaWxlICgtLWN0eC0+Zm10Y250ID49IDApIHsKKyAgICAgICAgICAgICAgICBhcmctPmNoID0gRk9STUFUX1JFQUQoY3R4KTsKKyAgICAgICAgICAgICAgICBjdHgtPmZtdHBvcysrOworICAgICAgICAgICAgICAgIGlmIChhcmctPmNoIDwgJzAnIHx8IGFyZy0+Y2ggPiAnOScpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGlmIChhcmctPnByZWMgPiAoSU5UX01BWCAtICgoaW50KWFyZy0+Y2ggLSAnMCcpKSAvIDEwKSB7CisgICAgICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInByZWNpc2lvbiB0b28gYmlnIik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYXJnLT5wcmVjID0gYXJnLT5wcmVjKjEwICsgKGFyZy0+Y2ggLSAnMCcpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyogSWdub3JlICJoIiwgImwiIGFuZCAiTCIgZm9ybWF0IHByZWZpeCAoZXg6ICIlaGkiIG9yICIlbHMiKSAqLworICAgIGlmIChjdHgtPmZtdGNudCA+PSAwKSB7CisgICAgICAgIGlmIChhcmctPmNoID09ICdoJyB8fCBhcmctPmNoID09ICdsJyB8fCBhcmctPmNoID09ICdMJykgeworICAgICAgICAgICAgaWYgKC0tY3R4LT5mbXRjbnQgPj0gMCkgeworICAgICAgICAgICAgICAgIGFyZy0+Y2ggPSBGT1JNQVRfUkVBRChjdHgpOworICAgICAgICAgICAgICAgIGN0eC0+Zm10cG9zKys7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGN0eC0+Zm10Y250IDwgMCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJpbmNvbXBsZXRlIGZvcm1hdCIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIHJldHVybiAwOworCisjdW5kZWYgRk9STUFUX1JFQUQKK30KKworLyogRm9ybWF0IG9uZSBhcmd1bWVudC4gU3VwcG9ydGVkIGNvbnZlcnNpb24gc3BlY2lmaWVyczoKKworICAgLSAicyIsICJyIiwgImEiOiBhbnkgdHlwZQorICAgLSAiaSIsICJkIiwgInUiOiBpbnQgb3IgZmxvYXQKKyAgIC0gIm8iLCAieCIsICJYIjogaW50CisgICAtICJlIiwgIkUiLCAiZiIsICJGIiwgImciLCAiRyI6IGZsb2F0CisgICAtICJjIjogaW50IG9yIHN0ciAoMSBjaGFyYWN0ZXIpCisKKyAgIFdoZW4gcG9zc2libGUsIHRoZSBvdXRwdXQgaXMgd3JpdHRlbiBkaXJlY3RseSBpbnRvIHRoZSBVbmljb2RlIHdyaXRlcgorICAgKGN0eC0+d3JpdGVyKS4gQSBzdHJpbmcgaXMgY3JlYXRlZCB3aGVuIHBhZGRpbmcgaXMgcmVxdWlyZWQuCisKKyAgIFJldHVybiAwIGlmIHRoZSBhcmd1bWVudCBoYXMgYmVlbiBmb3JtYXR0ZWQgaW50byAqcF9zdHIsCisgICAgICAgICAgMSBpZiB0aGUgYXJndW1lbnQgaGFzIGJlZW4gd3JpdHRlbiBpbnRvIGN0eC0+d3JpdGVyLAorICAgICAgICAgLTEgb24gZXJyb3IuICovCitzdGF0aWMgaW50Cit1bmljb2RlX2Zvcm1hdF9hcmdfZm9ybWF0KHN0cnVjdCB1bmljb2RlX2Zvcm1hdHRlcl90ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB1bmljb2RlX2Zvcm1hdF9hcmdfdCAqYXJnLAorICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqKnBfc3RyKQoreworICAgIFB5T2JqZWN0ICp2OworICAgIF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlciA9ICZjdHgtPndyaXRlcjsKKworICAgIGlmIChjdHgtPmZtdGNudCA9PSAwKQorICAgICAgICBjdHgtPndyaXRlci5vdmVyYWxsb2NhdGUgPSAwOworCisgICAgaWYgKGFyZy0+Y2ggPT0gJyUnKSB7CisgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcklubGluZSh3cml0ZXIsICclJykgPCAwKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICB2ID0gdW5pY29kZV9mb3JtYXRfZ2V0bmV4dGFyZyhjdHgpOworICAgIGlmICh2ID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKworCisgICAgc3dpdGNoIChhcmctPmNoKSB7CisgICAgY2FzZSAncyc6CisgICAgY2FzZSAncic6CisgICAgY2FzZSAnYSc6CisgICAgICAgIGlmIChQeUxvbmdfQ2hlY2tFeGFjdCh2KSAmJiBhcmctPndpZHRoID09IC0xICYmIGFyZy0+cHJlYyA9PSAtMSkgeworICAgICAgICAgICAgLyogRmFzdCBwYXRoICovCisgICAgICAgICAgICBpZiAoX1B5TG9uZ19Gb3JtYXRXcml0ZXIod3JpdGVyLCB2LCAxMCwgYXJnLT5mbGFncyAmIEZfQUxUKSA9PSAtMSkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChQeVVuaWNvZGVfQ2hlY2tFeGFjdCh2KSAmJiBhcmctPmNoID09ICdzJykgeworICAgICAgICAgICAgKnBfc3RyID0gdjsKKyAgICAgICAgICAgIFB5X0lOQ1JFRigqcF9zdHIpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaWYgKGFyZy0+Y2ggPT0gJ3MnKQorICAgICAgICAgICAgICAgICpwX3N0ciA9IFB5T2JqZWN0X1N0cih2KTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGFyZy0+Y2ggPT0gJ3InKQorICAgICAgICAgICAgICAgICpwX3N0ciA9IFB5T2JqZWN0X1JlcHIodik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgKnBfc3RyID0gUHlPYmplY3RfQVNDSUkodik7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlICdpJzoKKyAgICBjYXNlICdkJzoKKyAgICBjYXNlICd1JzoKKyAgICBjYXNlICdvJzoKKyAgICBjYXNlICd4JzoKKyAgICBjYXNlICdYJzoKKyAgICB7CisgICAgICAgIGludCByZXQgPSBtYWluZm9ybWF0bG9uZyh2LCBhcmcsIHBfc3RyLCB3cml0ZXIpOworICAgICAgICBpZiAocmV0ICE9IDApCisgICAgICAgICAgICByZXR1cm4gcmV0OworICAgICAgICBhcmctPnNpZ24gPSAxOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlICdlJzoKKyAgICBjYXNlICdFJzoKKyAgICBjYXNlICdmJzoKKyAgICBjYXNlICdGJzoKKyAgICBjYXNlICdnJzoKKyAgICBjYXNlICdHJzoKKyAgICAgICAgaWYgKGFyZy0+d2lkdGggPT0gLTEgJiYgYXJnLT5wcmVjID09IC0xCisgICAgICAgICAgICAmJiAhKGFyZy0+ZmxhZ3MgJiAoRl9TSUdOIHwgRl9CTEFOSykpKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBGYXN0IHBhdGggKi8KKyAgICAgICAgICAgIGlmIChmb3JtYXRmbG9hdCh2LCBhcmcsIE5VTEwsIHdyaXRlcikgPT0gLTEpCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKworICAgICAgICBhcmctPnNpZ24gPSAxOworICAgICAgICBpZiAoZm9ybWF0ZmxvYXQodiwgYXJnLCBwX3N0ciwgTlVMTCkgPT0gLTEpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSAnYyc6CisgICAgeworICAgICAgICBQeV9VQ1M0IGNoID0gZm9ybWF0Y2hhcih2KTsKKyAgICAgICAgaWYgKGNoID09IChQeV9VQ1M0KSAtMSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgaWYgKGFyZy0+d2lkdGggPT0gLTEgJiYgYXJnLT5wcmVjID09IC0xKSB7CisgICAgICAgICAgICAvKiBGYXN0IHBhdGggKi8KKyAgICAgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcklubGluZSh3cml0ZXIsIGNoKSA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKyAgICAgICAgKnBfc3RyID0gUHlVbmljb2RlX0Zyb21PcmRpbmFsKGNoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgZGVmYXVsdDoKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAidW5zdXBwb3J0ZWQgZm9ybWF0IGNoYXJhY3RlciAnJWMnICgweCV4KSAiCisgICAgICAgICAgICAgICAgICAgICAiYXQgaW5kZXggJXpkIiwKKyAgICAgICAgICAgICAgICAgICAgICgzMTw9YXJnLT5jaCAmJiBhcmctPmNoPD0xMjYpID8gKGNoYXIpYXJnLT5jaCA6ICc/JywKKyAgICAgICAgICAgICAgICAgICAgIChpbnQpYXJnLT5jaCwKKyAgICAgICAgICAgICAgICAgICAgIGN0eC0+Zm10cG9zIC0gMSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgaWYgKCpwX3N0ciA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisgICAgYXNzZXJ0IChQeVVuaWNvZGVfQ2hlY2soKnBfc3RyKSk7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3VuaWNvZGVfZm9ybWF0X2FyZ19vdXRwdXQoc3RydWN0IHVuaWNvZGVfZm9ybWF0dGVyX3QgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHVuaWNvZGVfZm9ybWF0X2FyZ190ICphcmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpzdHIpCit7CisgICAgUHlfc3NpemVfdCBsZW47CisgICAgZW51bSBQeVVuaWNvZGVfS2luZCBraW5kOworICAgIHZvaWQgKnBidWY7CisgICAgUHlfc3NpemVfdCBwaW5kZXg7CisgICAgUHlfVUNTNCBzaWduY2hhcjsKKyAgICBQeV9zc2l6ZV90IGJ1ZmxlbjsKKyAgICBQeV9VQ1M0IG1heGNoYXI7CisgICAgUHlfc3NpemVfdCBzdWJsZW47CisgICAgX1B5VW5pY29kZVdyaXRlciAqd3JpdGVyID0gJmN0eC0+d3JpdGVyOworICAgIFB5X1VDUzQgZmlsbDsKKworICAgIGZpbGwgPSAnICc7CisgICAgaWYgKGFyZy0+c2lnbiAmJiBhcmctPmZsYWdzICYgRl9aRVJPKQorICAgICAgICBmaWxsID0gJzAnOworCisgICAgaWYgKFB5VW5pY29kZV9SRUFEWShzdHIpID09IC0xKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBsZW4gPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChzdHIpOworICAgIGlmICgoYXJnLT53aWR0aCA9PSAtMSB8fCBhcmctPndpZHRoIDw9IGxlbikKKyAgICAgICAgJiYgKGFyZy0+cHJlYyA9PSAtMSB8fCBhcmctPnByZWMgPj0gbGVuKQorICAgICAgICAmJiAhKGFyZy0+ZmxhZ3MgJiAoRl9TSUdOIHwgRl9CTEFOSykpKQorICAgIHsKKyAgICAgICAgLyogRmFzdCBwYXRoICovCisgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlU3RyKHdyaXRlciwgc3RyKSA9PSAtMSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgLyogVHJ1bmNhdGUgdGhlIHN0cmluZyBmb3IgInMiLCAiciIgYW5kICJhIiBmb3JtYXRzCisgICAgICAgaWYgdGhlIHByZWNpc2lvbiBpcyBzZXQgKi8KKyAgICBpZiAoYXJnLT5jaCA9PSAncycgfHwgYXJnLT5jaCA9PSAncicgfHwgYXJnLT5jaCA9PSAnYScpIHsKKyAgICAgICAgaWYgKGFyZy0+cHJlYyA+PSAwICYmIGxlbiA+IGFyZy0+cHJlYykKKyAgICAgICAgICAgIGxlbiA9IGFyZy0+cHJlYzsKKyAgICB9CisKKyAgICAvKiBBZGp1c3Qgc2lnbiBhbmQgd2lkdGggKi8KKyAgICBraW5kID0gUHlVbmljb2RlX0tJTkQoc3RyKTsKKyAgICBwYnVmID0gUHlVbmljb2RlX0RBVEEoc3RyKTsKKyAgICBwaW5kZXggPSAwOworICAgIHNpZ25jaGFyID0gJ1wwJzsKKyAgICBpZiAoYXJnLT5zaWduKSB7CisgICAgICAgIFB5X1VDUzQgY2ggPSBQeVVuaWNvZGVfUkVBRChraW5kLCBwYnVmLCBwaW5kZXgpOworICAgICAgICBpZiAoY2ggPT0gJy0nIHx8IGNoID09ICcrJykgeworICAgICAgICAgICAgc2lnbmNoYXIgPSBjaDsKKyAgICAgICAgICAgIGxlbi0tOworICAgICAgICAgICAgcGluZGV4Kys7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoYXJnLT5mbGFncyAmIEZfU0lHTikKKyAgICAgICAgICAgIHNpZ25jaGFyID0gJysnOworICAgICAgICBlbHNlIGlmIChhcmctPmZsYWdzICYgRl9CTEFOSykKKyAgICAgICAgICAgIHNpZ25jaGFyID0gJyAnOworICAgICAgICBlbHNlCisgICAgICAgICAgICBhcmctPnNpZ24gPSAwOworICAgIH0KKyAgICBpZiAoYXJnLT53aWR0aCA8IGxlbikKKyAgICAgICAgYXJnLT53aWR0aCA9IGxlbjsKKworICAgIC8qIFByZXBhcmUgdGhlIHdyaXRlciAqLworICAgIG1heGNoYXIgPSB3cml0ZXItPm1heGNoYXI7CisgICAgaWYgKCEoYXJnLT5mbGFncyAmIEZfTEpVU1QpKSB7CisgICAgICAgIGlmIChhcmctPnNpZ24pIHsKKyAgICAgICAgICAgIGlmICgoYXJnLT53aWR0aC0xKSA+IGxlbikKKyAgICAgICAgICAgICAgICBtYXhjaGFyID0gUHlfTUFYKG1heGNoYXIsIGZpbGwpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaWYgKGFyZy0+d2lkdGggPiBsZW4pCisgICAgICAgICAgICAgICAgbWF4Y2hhciA9IFB5X01BWChtYXhjaGFyLCBmaWxsKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoUHlVbmljb2RlX01BWF9DSEFSX1ZBTFVFKHN0cikgPiBtYXhjaGFyKSB7CisgICAgICAgIFB5X1VDUzQgc3RybWF4Y2hhciA9IF9QeVVuaWNvZGVfRmluZE1heENoYXIoc3RyLCAwLCBwaW5kZXgrbGVuKTsKKyAgICAgICAgbWF4Y2hhciA9IFB5X01BWChtYXhjaGFyLCBzdHJtYXhjaGFyKTsKKyAgICB9CisKKyAgICBidWZsZW4gPSBhcmctPndpZHRoOworICAgIGlmIChhcmctPnNpZ24gJiYgbGVuID09IGFyZy0+d2lkdGgpCisgICAgICAgIGJ1ZmxlbisrOworICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1ByZXBhcmUod3JpdGVyLCBidWZsZW4sIG1heGNoYXIpID09IC0xKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICAvKiBXcml0ZSB0aGUgc2lnbiBpZiBuZWVkZWQgKi8KKyAgICBpZiAoYXJnLT5zaWduKSB7CisgICAgICAgIGlmIChmaWxsICE9ICcgJykgeworICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKHdyaXRlci0+a2luZCwgd3JpdGVyLT5kYXRhLCB3cml0ZXItPnBvcywgc2lnbmNoYXIpOworICAgICAgICAgICAgd3JpdGVyLT5wb3MgKz0gMTsKKyAgICAgICAgfQorICAgICAgICBpZiAoYXJnLT53aWR0aCA+IGxlbikKKyAgICAgICAgICAgIGFyZy0+d2lkdGgtLTsKKyAgICB9CisKKyAgICAvKiBXcml0ZSB0aGUgbnVtZXJpYyBwcmVmaXggZm9yICJ4IiwgIlgiIGFuZCAibyIgZm9ybWF0cworICAgICAgIGlmIHRoZSBhbHRlcm5hdGUgZm9ybSBpcyB1c2VkLgorICAgICAgIEZvciBleGFtcGxlLCB3cml0ZSAiMHgiIGZvciB0aGUgIiUjeCIgZm9ybWF0LiAqLworICAgIGlmICgoYXJnLT5mbGFncyAmIEZfQUxUKSAmJiAoYXJnLT5jaCA9PSAneCcgfHwgYXJnLT5jaCA9PSAnWCcgfHwgYXJnLT5jaCA9PSAnbycpKSB7CisgICAgICAgIGFzc2VydChQeVVuaWNvZGVfUkVBRChraW5kLCBwYnVmLCBwaW5kZXgpID09ICcwJyk7CisgICAgICAgIGFzc2VydChQeVVuaWNvZGVfUkVBRChraW5kLCBwYnVmLCBwaW5kZXggKyAxKSA9PSBhcmctPmNoKTsKKyAgICAgICAgaWYgKGZpbGwgIT0gJyAnKSB7CisgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUod3JpdGVyLT5raW5kLCB3cml0ZXItPmRhdGEsIHdyaXRlci0+cG9zLCAnMCcpOworICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKHdyaXRlci0+a2luZCwgd3JpdGVyLT5kYXRhLCB3cml0ZXItPnBvcysxLCBhcmctPmNoKTsKKyAgICAgICAgICAgIHdyaXRlci0+cG9zICs9IDI7CisgICAgICAgICAgICBwaW5kZXggKz0gMjsKKyAgICAgICAgfQorICAgICAgICBhcmctPndpZHRoIC09IDI7CisgICAgICAgIGlmIChhcmctPndpZHRoIDwgMCkKKyAgICAgICAgICAgIGFyZy0+d2lkdGggPSAwOworICAgICAgICBsZW4gLT0gMjsKKyAgICB9CisKKyAgICAvKiBQYWQgbGVmdCB3aXRoIHRoZSBmaWxsIGNoYXJhY3RlciBpZiBuZWVkZWQgKi8KKyAgICBpZiAoYXJnLT53aWR0aCA+IGxlbiAmJiAhKGFyZy0+ZmxhZ3MgJiBGX0xKVVNUKSkgeworICAgICAgICBzdWJsZW4gPSBhcmctPndpZHRoIC0gbGVuOworICAgICAgICBGSUxMKHdyaXRlci0+a2luZCwgd3JpdGVyLT5kYXRhLCBmaWxsLCB3cml0ZXItPnBvcywgc3VibGVuKTsKKyAgICAgICAgd3JpdGVyLT5wb3MgKz0gc3VibGVuOworICAgICAgICBhcmctPndpZHRoID0gbGVuOworICAgIH0KKworICAgIC8qIElmIHBhZGRpbmcgd2l0aCBzcGFjZXM6IHdyaXRlIHNpZ24gaWYgbmVlZGVkIGFuZC9vciBudW1lcmljIHByZWZpeCBpZgorICAgICAgIHRoZSBhbHRlcm5hdGUgZm9ybSBpcyB1c2VkICovCisgICAgaWYgKGZpbGwgPT0gJyAnKSB7CisgICAgICAgIGlmIChhcmctPnNpZ24pIHsKKyAgICAgICAgICAgIFB5VW5pY29kZV9XUklURSh3cml0ZXItPmtpbmQsIHdyaXRlci0+ZGF0YSwgd3JpdGVyLT5wb3MsIHNpZ25jaGFyKTsKKyAgICAgICAgICAgIHdyaXRlci0+cG9zICs9IDE7CisgICAgICAgIH0KKyAgICAgICAgaWYgKChhcmctPmZsYWdzICYgRl9BTFQpICYmIChhcmctPmNoID09ICd4JyB8fCBhcmctPmNoID09ICdYJyB8fCBhcmctPmNoID09ICdvJykpIHsKKyAgICAgICAgICAgIGFzc2VydChQeVVuaWNvZGVfUkVBRChraW5kLCBwYnVmLCBwaW5kZXgpID09ICcwJyk7CisgICAgICAgICAgICBhc3NlcnQoUHlVbmljb2RlX1JFQUQoa2luZCwgcGJ1ZiwgcGluZGV4KzEpID09IGFyZy0+Y2gpOworICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKHdyaXRlci0+a2luZCwgd3JpdGVyLT5kYXRhLCB3cml0ZXItPnBvcywgJzAnKTsKKyAgICAgICAgICAgIFB5VW5pY29kZV9XUklURSh3cml0ZXItPmtpbmQsIHdyaXRlci0+ZGF0YSwgd3JpdGVyLT5wb3MrMSwgYXJnLT5jaCk7CisgICAgICAgICAgICB3cml0ZXItPnBvcyArPSAyOworICAgICAgICAgICAgcGluZGV4ICs9IDI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBXcml0ZSBjaGFyYWN0ZXJzICovCisgICAgaWYgKGxlbikgeworICAgICAgICBfUHlVbmljb2RlX0Zhc3RDb3B5Q2hhcmFjdGVycyh3cml0ZXItPmJ1ZmZlciwgd3JpdGVyLT5wb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciwgcGluZGV4LCBsZW4pOworICAgICAgICB3cml0ZXItPnBvcyArPSBsZW47CisgICAgfQorCisgICAgLyogUGFkIHJpZ2h0IHdpdGggdGhlIGZpbGwgY2hhcmFjdGVyIGlmIG5lZWRlZCAqLworICAgIGlmIChhcmctPndpZHRoID4gbGVuKSB7CisgICAgICAgIHN1YmxlbiA9IGFyZy0+d2lkdGggLSBsZW47CisgICAgICAgIEZJTEwod3JpdGVyLT5raW5kLCB3cml0ZXItPmRhdGEsICcgJywgd3JpdGVyLT5wb3MsIHN1Ymxlbik7CisgICAgICAgIHdyaXRlci0+cG9zICs9IHN1YmxlbjsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKKy8qIEhlbHBlciBvZiBQeVVuaWNvZGVfRm9ybWF0KCk6IGZvcm1hdCBvbmUgYXJnLgorICAgUmV0dXJuIDAgb24gc3VjY2VzcywgcmFpc2UgYW4gZXhjZXB0aW9uIGFuZCByZXR1cm4gLTEgb24gZXJyb3IuICovCitzdGF0aWMgaW50Cit1bmljb2RlX2Zvcm1hdF9hcmcoc3RydWN0IHVuaWNvZGVfZm9ybWF0dGVyX3QgKmN0eCkKK3sKKyAgICBzdHJ1Y3QgdW5pY29kZV9mb3JtYXRfYXJnX3QgYXJnOworICAgIFB5T2JqZWN0ICpzdHI7CisgICAgaW50IHJldDsKKworICAgIGFyZy5jaCA9IFB5VW5pY29kZV9SRUFEKGN0eC0+Zm10a2luZCwgY3R4LT5mbXRkYXRhLCBjdHgtPmZtdHBvcyk7CisgICAgYXJnLmZsYWdzID0gMDsKKyAgICBhcmcud2lkdGggPSAtMTsKKyAgICBhcmcucHJlYyA9IC0xOworICAgIGFyZy5zaWduID0gMDsKKyAgICBzdHIgPSBOVUxMOworCisgICAgcmV0ID0gdW5pY29kZV9mb3JtYXRfYXJnX3BhcnNlKGN0eCwgJmFyZyk7CisgICAgaWYgKHJldCA9PSAtMSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgcmV0ID0gdW5pY29kZV9mb3JtYXRfYXJnX2Zvcm1hdChjdHgsICZhcmcsICZzdHIpOworICAgIGlmIChyZXQgPT0gLTEpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGlmIChyZXQgIT0gMSkgeworICAgICAgICByZXQgPSB1bmljb2RlX2Zvcm1hdF9hcmdfb3V0cHV0KGN0eCwgJmFyZywgc3RyKTsKKyAgICAgICAgUHlfREVDUkVGKHN0cik7CisgICAgICAgIGlmIChyZXQgPT0gLTEpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKGN0eC0+ZGljdCAmJiAoY3R4LT5hcmdpZHggPCBjdHgtPmFyZ2xlbikgJiYgYXJnLmNoICE9ICclJykgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgIm5vdCBhbGwgYXJndW1lbnRzIGNvbnZlcnRlZCBkdXJpbmcgc3RyaW5nIGZvcm1hdHRpbmciKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKwogUHlPYmplY3QgKgogUHlVbmljb2RlX0Zvcm1hdChQeU9iamVjdCAqZm9ybWF0LCBQeU9iamVjdCAqYXJncykKIHsKLSAgICBQeV9zc2l6ZV90IGZtdGNudCwgZm10cG9zLCBhcmdsZW4sIGFyZ2lkeDsKLSAgICBpbnQgYXJnc19vd25lZCA9IDA7Ci0gICAgUHlPYmplY3QgKmRpY3QgPSBOVUxMOwotICAgIFB5T2JqZWN0ICp0ZW1wID0gTlVMTDsKLSAgICBQeU9iamVjdCAqc2Vjb25kID0gTlVMTDsKLSAgICBQeU9iamVjdCAqdWZvcm1hdDsKLSAgICB2b2lkICpmbXQ7Ci0gICAgZW51bSBQeVVuaWNvZGVfS2luZCBraW5kLCBmbXRraW5kOwotICAgIF9QeVVuaWNvZGVXcml0ZXIgd3JpdGVyOwotICAgIFB5X3NzaXplX3Qgc3VibGVuOwotICAgIFB5X1VDUzQgbWF4Y2hhcjsKKyAgICBzdHJ1Y3QgdW5pY29kZV9mb3JtYXR0ZXJfdCBjdHg7CiAKICAgICBpZiAoZm9ybWF0ID09IE5VTEwgfHwgYXJncyA9PSBOVUxMKSB7CiAgICAgICAgIFB5RXJyX0JhZEludGVybmFsQ2FsbCgpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgdWZvcm1hdCA9IFB5VW5pY29kZV9Gcm9tT2JqZWN0KGZvcm1hdCk7Ci0gICAgaWYgKHVmb3JtYXQgPT0gTlVMTCkKKworICAgIGN0eC5mbXRzdHIgPSBQeVVuaWNvZGVfRnJvbU9iamVjdChmb3JtYXQpOworICAgIGlmIChjdHguZm10c3RyID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmIChQeVVuaWNvZGVfUkVBRFkodWZvcm1hdCkgPT0gLTEpIHsKLSAgICAgICAgUHlfREVDUkVGKHVmb3JtYXQpOworICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoY3R4LmZtdHN0cikgPT0gLTEpIHsKKyAgICAgICAgUHlfREVDUkVGKGN0eC5mbXRzdHIpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CisgICAgY3R4LmZtdGRhdGEgPSBQeVVuaWNvZGVfREFUQShjdHguZm10c3RyKTsKKyAgICBjdHguZm10a2luZCA9IFB5VW5pY29kZV9LSU5EKGN0eC5mbXRzdHIpOworICAgIGN0eC5mbXRjbnQgPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChjdHguZm10c3RyKTsKKyAgICBjdHguZm10cG9zID0gMDsKIAotICAgIGZtdCA9IFB5VW5pY29kZV9EQVRBKHVmb3JtYXQpOwotICAgIGZtdGtpbmQgPSBQeVVuaWNvZGVfS0lORCh1Zm9ybWF0KTsKLSAgICBmbXRjbnQgPSBQeVVuaWNvZGVfR0VUX0xFTkdUSCh1Zm9ybWF0KTsKLSAgICBmbXRwb3MgPSAwOwotCi0gICAgX1B5VW5pY29kZVdyaXRlcl9Jbml0KCZ3cml0ZXIsIGZtdGNudCArIDEwMCk7CisgICAgX1B5VW5pY29kZVdyaXRlcl9Jbml0KCZjdHgud3JpdGVyKTsKKyAgICBjdHgud3JpdGVyLm1pbl9sZW5ndGggPSBjdHguZm10Y250ICsgMTAwOworICAgIGN0eC53cml0ZXIub3ZlcmFsbG9jYXRlID0gMTsKIAogICAgIGlmIChQeVR1cGxlX0NoZWNrKGFyZ3MpKSB7Ci0gICAgICAgIGFyZ2xlbiA9IFB5VHVwbGVfU2l6ZShhcmdzKTsKLSAgICAgICAgYXJnaWR4ID0gMDsKKyAgICAgICAgY3R4LmFyZ2xlbiA9IFB5VHVwbGVfU2l6ZShhcmdzKTsKKyAgICAgICAgY3R4LmFyZ2lkeCA9IDA7CiAgICAgfQogICAgIGVsc2UgewotICAgICAgICBhcmdsZW4gPSAtMTsKLSAgICAgICAgYXJnaWR4ID0gLTI7CisgICAgICAgIGN0eC5hcmdsZW4gPSAtMTsKKyAgICAgICAgY3R4LmFyZ2lkeCA9IC0yOwogICAgIH0KKyAgICBjdHguYXJnc19vd25lZCA9IDA7CiAgICAgaWYgKFB5TWFwcGluZ19DaGVjayhhcmdzKSAmJiAhUHlUdXBsZV9DaGVjayhhcmdzKSAmJiAhUHlVbmljb2RlX0NoZWNrKGFyZ3MpKQotICAgICAgICBkaWN0ID0gYXJnczsKKyAgICAgICAgY3R4LmRpY3QgPSBhcmdzOworICAgIGVsc2UKKyAgICAgICAgY3R4LmRpY3QgPSBOVUxMOworICAgIGN0eC5hcmdzID0gYXJnczsKIAotICAgIHdoaWxlICgtLWZtdGNudCA+PSAwKSB7Ci0gICAgICAgIGlmIChQeVVuaWNvZGVfUkVBRChmbXRraW5kLCBmbXQsIGZtdHBvcykgIT0gJyUnKSB7CisgICAgd2hpbGUgKC0tY3R4LmZtdGNudCA+PSAwKSB7CisgICAgICAgIGlmIChQeVVuaWNvZGVfUkVBRChjdHguZm10a2luZCwgY3R4LmZtdGRhdGEsIGN0eC5mbXRwb3MpICE9ICclJykgewogICAgICAgICAgICAgUHlfc3NpemVfdCBub25mbXRwb3M7Ci0gICAgICAgICAgICBub25mbXRwb3MgPSBmbXRwb3MrKzsKLSAgICAgICAgICAgIHdoaWxlIChmbXRjbnQgPj0gMCAmJgotICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9SRUFEKGZtdGtpbmQsIGZtdCwgZm10cG9zKSAhPSAnJScpIHsKLSAgICAgICAgICAgICAgICBmbXRwb3MrKzsKLSAgICAgICAgICAgICAgICBmbXRjbnQtLTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChmbXRjbnQgPCAwKQotICAgICAgICAgICAgICAgIGZtdHBvcy0tOwotICAgICAgICAgICAgc3VibGVuID0gZm10cG9zIC0gbm9uZm10cG9zOwotICAgICAgICAgICAgbWF4Y2hhciA9IF9QeVVuaWNvZGVfRmluZE1heENoYXIodWZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vbmZtdHBvcywgbm9uZm10cG9zICsgc3VibGVuKTsKLSAgICAgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1ByZXBhcmUoJndyaXRlciwgc3VibGVuLCBtYXhjaGFyKSA9PSAtMSkKLSAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CiAKLSAgICAgICAgICAgIF9QeVVuaWNvZGVfRmFzdENvcHlDaGFyYWN0ZXJzKHdyaXRlci5idWZmZXIsIHdyaXRlci5wb3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1Zm9ybWF0LCBub25mbXRwb3MsIHN1Ymxlbik7Ci0gICAgICAgICAgICB3cml0ZXIucG9zICs9IHN1YmxlbjsKKyAgICAgICAgICAgIG5vbmZtdHBvcyA9IGN0eC5mbXRwb3MrKzsKKyAgICAgICAgICAgIHdoaWxlIChjdHguZm10Y250ID49IDAgJiYKKyAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfUkVBRChjdHguZm10a2luZCwgY3R4LmZtdGRhdGEsIGN0eC5mbXRwb3MpICE9ICclJykgeworICAgICAgICAgICAgICAgIGN0eC5mbXRwb3MrKzsKKyAgICAgICAgICAgICAgICBjdHguZm10Y250LS07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoY3R4LmZtdGNudCA8IDApIHsKKyAgICAgICAgICAgICAgICBjdHguZm10cG9zLS07CisgICAgICAgICAgICAgICAgY3R4LndyaXRlci5vdmVyYWxsb2NhdGUgPSAwOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZVN1YnN0cmluZygmY3R4LndyaXRlciwgY3R4LmZtdHN0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vbmZtdHBvcywgY3R4LmZtdHBvcykgPCAwKQorICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8qIEdvdCBhIGZvcm1hdCBzcGVjaWZpZXIgKi8KLSAgICAgICAgICAgIGludCBmbGFncyA9IDA7Ci0gICAgICAgICAgICBQeV9zc2l6ZV90IHdpZHRoID0gLTE7Ci0gICAgICAgICAgICBpbnQgcHJlYyA9IC0xOwotICAgICAgICAgICAgUHlfVUNTNCBjID0gJ1wwJzsKLSAgICAgICAgICAgIFB5X1VDUzQgZmlsbDsKLSAgICAgICAgICAgIGludCBzaWduOwotICAgICAgICAgICAgUHlfVUNTNCBzaWduY2hhcjsKLSAgICAgICAgICAgIGludCBpc251bW9rOwotICAgICAgICAgICAgUHlPYmplY3QgKnYgPSBOVUxMOwotICAgICAgICAgICAgdm9pZCAqcGJ1ZiA9IE5VTEw7Ci0gICAgICAgICAgICBQeV9zc2l6ZV90IHBpbmRleCwgbGVuOwotICAgICAgICAgICAgUHlfVUNTNCBidWZtYXhjaGFyOwotICAgICAgICAgICAgUHlfc3NpemVfdCBidWZsZW47Ci0KLSAgICAgICAgICAgIGZtdHBvcysrOwotICAgICAgICAgICAgYyA9IFB5VW5pY29kZV9SRUFEKGZtdGtpbmQsIGZtdCwgZm10cG9zKTsKLSAgICAgICAgICAgIGlmIChjID09ICcoJykgewotICAgICAgICAgICAgICAgIFB5X3NzaXplX3Qga2V5c3RhcnQ7Ci0gICAgICAgICAgICAgICAgUHlfc3NpemVfdCBrZXlsZW47Ci0gICAgICAgICAgICAgICAgUHlPYmplY3QgKmtleTsKLSAgICAgICAgICAgICAgICBpbnQgcGNvdW50ID0gMTsKLQotICAgICAgICAgICAgICAgIGlmIChkaWN0ID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmb3JtYXQgcmVxdWlyZXMgYSBtYXBwaW5nIik7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgKytmbXRwb3M7Ci0gICAgICAgICAgICAgICAgLS1mbXRjbnQ7Ci0gICAgICAgICAgICAgICAga2V5c3RhcnQgPSBmbXRwb3M7Ci0gICAgICAgICAgICAgICAgLyogU2tpcCBvdmVyIGJhbGFuY2VkIHBhcmVudGhlc2VzICovCi0gICAgICAgICAgICAgICAgd2hpbGUgKHBjb3VudCA+IDAgJiYgLS1mbXRjbnQgPj0gMCkgewotICAgICAgICAgICAgICAgICAgICBjID0gUHlVbmljb2RlX1JFQUQoZm10a2luZCwgZm10LCBmbXRwb3MpOwotICAgICAgICAgICAgICAgICAgICBpZiAoYyA9PSAnKScpCi0gICAgICAgICAgICAgICAgICAgICAgICAtLXBjb3VudDsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoYyA9PSAnKCcpCi0gICAgICAgICAgICAgICAgICAgICAgICArK3Bjb3VudDsKLSAgICAgICAgICAgICAgICAgICAgZm10cG9zKys7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGtleWxlbiA9IGZtdHBvcyAtIGtleXN0YXJ0IC0gMTsKLSAgICAgICAgICAgICAgICBpZiAoZm10Y250IDwgMCB8fCBwY291bnQgPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImluY29tcGxldGUgZm9ybWF0IGtleSIpOwotICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGtleSA9IFB5VW5pY29kZV9TdWJzdHJpbmcodWZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleXN0YXJ0LCBrZXlzdGFydCArIGtleWxlbik7Ci0gICAgICAgICAgICAgICAgaWYgKGtleSA9PSBOVUxMKQotICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgICAgICAgICAgaWYgKGFyZ3Nfb3duZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGFyZ3MpOwotICAgICAgICAgICAgICAgICAgICBhcmdzX293bmVkID0gMDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYXJncyA9IFB5T2JqZWN0X0dldEl0ZW0oZGljdCwga2V5KTsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYoa2V5KTsKLSAgICAgICAgICAgICAgICBpZiAoYXJncyA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYXJnc19vd25lZCA9IDE7Ci0gICAgICAgICAgICAgICAgYXJnbGVuID0gLTE7Ci0gICAgICAgICAgICAgICAgYXJnaWR4ID0gLTI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB3aGlsZSAoLS1mbXRjbnQgPj0gMCkgewotICAgICAgICAgICAgICAgIGMgPSBQeVVuaWNvZGVfUkVBRChmbXRraW5kLCBmbXQsIGZtdHBvcysrKTsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKGMpIHsKLSAgICAgICAgICAgICAgICBjYXNlICctJzogZmxhZ3MgfD0gRl9MSlVTVDsgY29udGludWU7Ci0gICAgICAgICAgICAgICAgY2FzZSAnKyc6IGZsYWdzIHw9IEZfU0lHTjsgY29udGludWU7Ci0gICAgICAgICAgICAgICAgY2FzZSAnICc6IGZsYWdzIHw9IEZfQkxBTks7IGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIGNhc2UgJyMnOiBmbGFncyB8PSBGX0FMVDsgY29udGludWU7Ci0gICAgICAgICAgICAgICAgY2FzZSAnMCc6IGZsYWdzIHw9IEZfWkVSTzsgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGMgPT0gJyonKSB7Ci0gICAgICAgICAgICAgICAgdiA9IGdldG5leHRhcmcoYXJncywgYXJnbGVuLCAmYXJnaWR4KTsKLSAgICAgICAgICAgICAgICBpZiAodiA9PSBOVUxMKQotICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgICAgICAgICAgaWYgKCFQeUxvbmdfQ2hlY2sodikpIHsKLSAgICAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIqIHdhbnRzIGludCIpOwotICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHdpZHRoID0gUHlMb25nX0FzU3NpemVfdCh2KTsKLSAgICAgICAgICAgICAgICBpZiAod2lkdGggPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKLSAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgICAgIGlmICh3aWR0aCA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAgZmxhZ3MgfD0gRl9MSlVTVDsKLSAgICAgICAgICAgICAgICAgICAgd2lkdGggPSAtd2lkdGg7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICgtLWZtdGNudCA+PSAwKQotICAgICAgICAgICAgICAgICAgICBjID0gUHlVbmljb2RlX1JFQUQoZm10a2luZCwgZm10LCBmbXRwb3MrKyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChjID49ICcwJyAmJiBjIDw9ICc5JykgewotICAgICAgICAgICAgICAgIHdpZHRoID0gYyAtICcwJzsKLSAgICAgICAgICAgICAgICB3aGlsZSAoLS1mbXRjbnQgPj0gMCkgewotICAgICAgICAgICAgICAgICAgICBjID0gUHlVbmljb2RlX1JFQUQoZm10a2luZCwgZm10LCBmbXRwb3MrKyk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjIDwgJzAnIHx8IGMgPiAnOScpCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgLyogU2luY2UgYyBpcyB1bnNpZ25lZCwgdGhlIFJIUyB3b3VsZCBlbmQgdXAgYXMgdW5zaWduZWQsCi0gICAgICAgICAgICAgICAgICAgICAgIG1peGluZyBzaWduZWQgYW5kIHVuc2lnbmVkIGNvbXBhcmlzb24uIFNpbmNlIGMgaXMgYmV0d2VlbgotICAgICAgICAgICAgICAgICAgICAgICAnMCcgYW5kICc5JywgY2FzdGluZyB0byBpbnQgaXMgc2FmZS4gKi8KLSAgICAgICAgICAgICAgICAgICAgaWYgKHdpZHRoID4gKFBZX1NTSVpFX1RfTUFYIC0gKChpbnQpYyAtICcwJykpIC8gMTApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aWR0aCB0b28gYmlnIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgd2lkdGggPSB3aWR0aCoxMCArIChjIC0gJzAnKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoYyA9PSAnLicpIHsKLSAgICAgICAgICAgICAgICBwcmVjID0gMDsKLSAgICAgICAgICAgICAgICBpZiAoLS1mbXRjbnQgPj0gMCkKLSAgICAgICAgICAgICAgICAgICAgYyA9IFB5VW5pY29kZV9SRUFEKGZtdGtpbmQsIGZtdCwgZm10cG9zKyspOwotICAgICAgICAgICAgICAgIGlmIChjID09ICcqJykgewotICAgICAgICAgICAgICAgICAgICB2ID0gZ2V0bmV4dGFyZyhhcmdzLCBhcmdsZW4sICZhcmdpZHgpOwotICAgICAgICAgICAgICAgICAgICBpZiAodiA9PSBOVUxMKQotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgICAgICAgICBpZiAoIVB5TG9uZ19DaGVjayh2KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKiB3YW50cyBpbnQiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBwcmVjID0gX1B5TG9uZ19Bc0ludCh2KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHByZWMgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHByZWMgPCAwKQotICAgICAgICAgICAgICAgICAgICAgICAgcHJlYyA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgtLWZtdGNudCA+PSAwKQotICAgICAgICAgICAgICAgICAgICAgICAgYyA9IFB5VW5pY29kZV9SRUFEKGZtdGtpbmQsIGZtdCwgZm10cG9zKyspOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmIChjID49ICcwJyAmJiBjIDw9ICc5JykgewotICAgICAgICAgICAgICAgICAgICBwcmVjID0gYyAtICcwJzsKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKC0tZm10Y250ID49IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGMgPSBQeVVuaWNvZGVfUkVBRChmbXRraW5kLCBmbXQsIGZtdHBvcysrKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjIDwgJzAnIHx8IGMgPiAnOScpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJlYyA+IChJTlRfTUFYIC0gKChpbnQpYyAtICcwJykpIC8gMTApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInByZWMgdG9vIGJpZyIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIHByZWMgPSBwcmVjKjEwICsgKGMgLSAnMCcpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSAvKiBwcmVjICovCi0gICAgICAgICAgICBpZiAoZm10Y250ID49IDApIHsKLSAgICAgICAgICAgICAgICBpZiAoYyA9PSAnaCcgfHwgYyA9PSAnbCcgfHwgYyA9PSAnTCcpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKC0tZm10Y250ID49IDApCi0gICAgICAgICAgICAgICAgICAgICAgICBjID0gUHlVbmljb2RlX1JFQUQoZm10a2luZCwgZm10LCBmbXRwb3MrKyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGZtdGNudCA8IDApIHsKLSAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImluY29tcGxldGUgZm9ybWF0Iik7CisgICAgICAgICAgICBjdHguZm10cG9zKys7CisgICAgICAgICAgICBpZiAodW5pY29kZV9mb3JtYXRfYXJnKCZjdHgpID09IC0xKQogICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChmbXRjbnQgPT0gMCkKLSAgICAgICAgICAgICAgICB3cml0ZXIub3ZlcmFsbG9jYXRlID0gMDsKKyAgICAgICAgfQorICAgIH0KIAotICAgICAgICAgICAgaWYgKGMgPT0gJyUnKSB7Ci0gICAgICAgICAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfUHJlcGFyZSgmd3JpdGVyLCAxLCAnJScpID09IC0xKQotICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKHdyaXRlci5raW5kLCB3cml0ZXIuZGF0YSwgd3JpdGVyLnBvcywgJyUnKTsKLSAgICAgICAgICAgICAgICB3cml0ZXIucG9zICs9IDE7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHYgPSBnZXRuZXh0YXJnKGFyZ3MsIGFyZ2xlbiwgJmFyZ2lkeCk7Ci0gICAgICAgICAgICBpZiAodiA9PSBOVUxMKQotICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLQotICAgICAgICAgICAgc2lnbiA9IDA7Ci0gICAgICAgICAgICBzaWduY2hhciA9ICdcMCc7Ci0gICAgICAgICAgICBmaWxsID0gJyAnOwotICAgICAgICAgICAgc3dpdGNoIChjKSB7Ci0KLSAgICAgICAgICAgIGNhc2UgJ3MnOgotICAgICAgICAgICAgY2FzZSAncic6Ci0gICAgICAgICAgICBjYXNlICdhJzoKLSAgICAgICAgICAgICAgICBpZiAoUHlMb25nX0NoZWNrRXhhY3QodikgJiYgd2lkdGggPT0gLTEgJiYgcHJlYyA9PSAtMSkgewotICAgICAgICAgICAgICAgICAgICAvKiBGYXN0IHBhdGggKi8KLSAgICAgICAgICAgICAgICAgICAgaWYgKF9QeUxvbmdfRm9ybWF0V3JpdGVyKCZ3cml0ZXIsIHYsIDEwLCBmbGFncyAmIEZfQUxUKSA9PSAtMSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgICAgICAgICAgZ290byBuZXh0YXJnOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfQ2hlY2tFeGFjdCh2KSAmJiBjID09ICdzJykgewotICAgICAgICAgICAgICAgICAgICB0ZW1wID0gdjsKLSAgICAgICAgICAgICAgICAgICAgUHlfSU5DUkVGKHRlbXApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT0gJ3MnKQotICAgICAgICAgICAgICAgICAgICAgICAgdGVtcCA9IFB5T2JqZWN0X1N0cih2KTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoYyA9PSAncicpCi0gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wID0gUHlPYmplY3RfUmVwcih2KTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgdGVtcCA9IFB5T2JqZWN0X0FTQ0lJKHYpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSAnaSc6Ci0gICAgICAgICAgICBjYXNlICdkJzoKLSAgICAgICAgICAgIGNhc2UgJ3UnOgotICAgICAgICAgICAgY2FzZSAnbyc6Ci0gICAgICAgICAgICBjYXNlICd4JzoKLSAgICAgICAgICAgIGNhc2UgJ1gnOgotICAgICAgICAgICAgICAgIGlmIChQeUxvbmdfQ2hlY2tFeGFjdCh2KQotICAgICAgICAgICAgICAgICAgICAmJiB3aWR0aCA9PSAtMSAmJiBwcmVjID09IC0xCi0gICAgICAgICAgICAgICAgICAgICYmICEoZmxhZ3MgJiAoRl9TSUdOIHwgRl9CTEFOSykpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgLyogRmFzdCBwYXRoICovCi0gICAgICAgICAgICAgICAgICAgIHN3aXRjaChjKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2QnOgotICAgICAgICAgICAgICAgICAgICBjYXNlICdpJzoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAndSc6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX1B5TG9uZ19Gb3JtYXRXcml0ZXIoJndyaXRlciwgdiwgMTAsIGZsYWdzICYgRl9BTFQpID09IC0xKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gbmV4dGFyZzsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAneCc6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX1B5TG9uZ19Gb3JtYXRXcml0ZXIoJndyaXRlciwgdiwgMTYsIGZsYWdzICYgRl9BTFQpID09IC0xKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gbmV4dGFyZzsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAnbyc6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX1B5TG9uZ19Gb3JtYXRXcml0ZXIoJndyaXRlciwgdiwgOCwgZmxhZ3MgJiBGX0FMVCkgPT0gLTEpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBuZXh0YXJnOwotICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpc251bW9rID0gMDsKLSAgICAgICAgICAgICAgICBpZiAoUHlOdW1iZXJfQ2hlY2sodikpIHsKLSAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmlvYmo9TlVMTDsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoUHlMb25nX0NoZWNrKHYpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpb2JqID0gdjsKLSAgICAgICAgICAgICAgICAgICAgICAgIFB5X0lOQ1JFRihpb2JqKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlvYmogPSBQeU51bWJlcl9Mb25nKHYpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpb2JqIT1OVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoUHlMb25nX0NoZWNrKGlvYmopKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNudW1vayA9IDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbiA9IDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcCA9IGZvcm1hdGxvbmcoaW9iaiwgZmxhZ3MsIHByZWMsIChjID09ICdpJz8gJ2QnOiBjKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGlvYmopOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGlvYmopOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICghaXNudW1vaykgewotICAgICAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiUlJWMgZm9ybWF0OiBhIG51bWJlciBpcyByZXF1aXJlZCwgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vdCAlLjIwMHMiLCAoY2hhciljLCBQeV9UWVBFKHYpLT50cF9uYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoZmxhZ3MgJiBGX1pFUk8pCi0gICAgICAgICAgICAgICAgICAgIGZpbGwgPSAnMCc7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgJ2UnOgotICAgICAgICAgICAgY2FzZSAnRSc6Ci0gICAgICAgICAgICBjYXNlICdmJzoKLSAgICAgICAgICAgIGNhc2UgJ0YnOgotICAgICAgICAgICAgY2FzZSAnZyc6Ci0gICAgICAgICAgICBjYXNlICdHJzoKLSAgICAgICAgICAgICAgICBpZiAod2lkdGggPT0gLTEgJiYgcHJlYyA9PSAtMQotICAgICAgICAgICAgICAgICAgICAmJiAhKGZsYWdzICYgKEZfU0lHTiB8IEZfQkxBTkspKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIC8qIEZhc3QgcGF0aCAqLwotICAgICAgICAgICAgICAgICAgICBpZiAoZm9ybWF0ZmxvYXQodiwgZmxhZ3MsIHByZWMsIGMsIE5VTEwsICZ3cml0ZXIpID09IC0xKQotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgICAgICAgICBnb3RvIG5leHRhcmc7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgc2lnbiA9IDE7Ci0gICAgICAgICAgICAgICAgaWYgKGZsYWdzICYgRl9aRVJPKQotICAgICAgICAgICAgICAgICAgICBmaWxsID0gJzAnOwotICAgICAgICAgICAgICAgIGlmIChmb3JtYXRmbG9hdCh2LCBmbGFncywgcHJlYywgYywgJnRlbXAsIE5VTEwpID09IC0xKQotICAgICAgICAgICAgICAgICAgICB0ZW1wID0gTlVMTDsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSAnYyc6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgUHlfVUNTNCBjaCA9IGZvcm1hdGNoYXIodik7Ci0gICAgICAgICAgICAgICAgaWYgKGNoID09IChQeV9VQ1M0KSAtMSkKLSAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgICAgIGlmICh3aWR0aCA9PSAtMSAmJiBwcmVjID09IC0xKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8qIEZhc3QgcGF0aCAqLwotICAgICAgICAgICAgICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9QcmVwYXJlKCZ3cml0ZXIsIDEsIGNoKSA9PSAtMSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKHdyaXRlci5raW5kLCB3cml0ZXIuZGF0YSwgd3JpdGVyLnBvcywgY2gpOwotICAgICAgICAgICAgICAgICAgICB3cml0ZXIucG9zICs9IDE7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gbmV4dGFyZzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdGVtcCA9IFB5VW5pY29kZV9Gcm9tT3JkaW5hbChjaCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bnN1cHBvcnRlZCBmb3JtYXQgY2hhcmFjdGVyICclYycgKDB4JXgpICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImF0IGluZGV4ICV6ZCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICgzMTw9YyAmJiBjPD0xMjYpID8gKGNoYXIpYyA6ICc/JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCljLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbXRwb3MgLSAxKTsKLSAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAodGVtcCA9PSBOVUxMKQotICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgIGFzc2VydCAoUHlVbmljb2RlX0NoZWNrKHRlbXApKTsKLQotICAgICAgICAgICAgaWYgKHdpZHRoID09IC0xICYmIHByZWMgPT0gLTEKLSAgICAgICAgICAgICAgICAmJiAhKGZsYWdzICYgKEZfU0lHTiB8IEZfQkxBTkspKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvKiBGYXN0IHBhdGggKi8KLSAgICAgICAgICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZVN0cigmd3JpdGVyLCB0ZW1wKSA9PSAtMSkKLSAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgICAgIGdvdG8gbmV4dGFyZzsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9SRUFEWSh0ZW1wKSA9PSAtMSkgewotICAgICAgICAgICAgICAgIFB5X0NMRUFSKHRlbXApOwotICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGtpbmQgPSBQeVVuaWNvZGVfS0lORCh0ZW1wKTsKLSAgICAgICAgICAgIHBidWYgPSBQeVVuaWNvZGVfREFUQSh0ZW1wKTsKLSAgICAgICAgICAgIGxlbiA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHRlbXApOwotCi0gICAgICAgICAgICBpZiAoYyA9PSAncycgfHwgYyA9PSAncicgfHwgYyA9PSAnYScpIHsKLSAgICAgICAgICAgICAgICBpZiAocHJlYyA+PSAwICYmIGxlbiA+IHByZWMpCi0gICAgICAgICAgICAgICAgICAgIGxlbiA9IHByZWM7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8qIHBidWYgaXMgaW5pdGlhbGl6ZWQgaGVyZS4gKi8KLSAgICAgICAgICAgIHBpbmRleCA9IDA7Ci0gICAgICAgICAgICBpZiAoc2lnbikgewotICAgICAgICAgICAgICAgIFB5X1VDUzQgY2ggPSBQeVVuaWNvZGVfUkVBRChraW5kLCBwYnVmLCBwaW5kZXgpOwotICAgICAgICAgICAgICAgIGlmIChjaCA9PSAnLScgfHwgY2ggPT0gJysnKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNpZ25jaGFyID0gY2g7Ci0gICAgICAgICAgICAgICAgICAgIGxlbi0tOwotICAgICAgICAgICAgICAgICAgICBwaW5kZXgrKzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoZmxhZ3MgJiBGX1NJR04pCi0gICAgICAgICAgICAgICAgICAgIHNpZ25jaGFyID0gJysnOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZsYWdzICYgRl9CTEFOSykKLSAgICAgICAgICAgICAgICAgICAgc2lnbmNoYXIgPSAnICc7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBzaWduID0gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh3aWR0aCA8IGxlbikKLSAgICAgICAgICAgICAgICB3aWR0aCA9IGxlbjsKLQotICAgICAgICAgICAgLyogQ29tcHV0ZSB0aGUgbGVuZ3RoIGFuZCBtYXhpbXVtIGNoYXJhY3RlciBvZiB0aGUKLSAgICAgICAgICAgICAgIHdyaXR0ZW4gY2hhcmFjdGVycyAqLwotICAgICAgICAgICAgYnVmbWF4Y2hhciA9IDEyNzsKLSAgICAgICAgICAgIGlmICghKGZsYWdzICYgRl9MSlVTVCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoc2lnbikgewotICAgICAgICAgICAgICAgICAgICBpZiAoKHdpZHRoLTEpID4gbGVuKQotICAgICAgICAgICAgICAgICAgICAgICAgYnVmbWF4Y2hhciA9IFB5X01BWChidWZtYXhjaGFyLCBmaWxsKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh3aWR0aCA+IGxlbikKLSAgICAgICAgICAgICAgICAgICAgICAgIGJ1Zm1heGNoYXIgPSBQeV9NQVgoYnVmbWF4Y2hhciwgZmlsbCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgbWF4Y2hhciA9IF9QeVVuaWNvZGVfRmluZE1heENoYXIodGVtcCwgMCwgcGluZGV4K2xlbik7Ci0gICAgICAgICAgICBidWZtYXhjaGFyID0gUHlfTUFYKGJ1Zm1heGNoYXIsIG1heGNoYXIpOwotCi0gICAgICAgICAgICBidWZsZW4gPSB3aWR0aDsKLSAgICAgICAgICAgIGlmIChzaWduICYmIGxlbiA9PSB3aWR0aCkKLSAgICAgICAgICAgICAgICBidWZsZW4rKzsKLQotICAgICAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfUHJlcGFyZSgmd3JpdGVyLCBidWZsZW4sIGJ1Zm1heGNoYXIpID09IC0xKQotICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLQotICAgICAgICAgICAgLyogV3JpdGUgY2hhcmFjdGVycyAqLwotICAgICAgICAgICAgaWYgKHNpZ24pIHsKLSAgICAgICAgICAgICAgICBpZiAoZmlsbCAhPSAnICcpIHsKLSAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKHdyaXRlci5raW5kLCB3cml0ZXIuZGF0YSwgd3JpdGVyLnBvcywgc2lnbmNoYXIpOwotICAgICAgICAgICAgICAgICAgICB3cml0ZXIucG9zICs9IDE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICh3aWR0aCA+IGxlbikKLSAgICAgICAgICAgICAgICAgICAgd2lkdGgtLTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICgoZmxhZ3MgJiBGX0FMVCkgJiYgKGMgPT0gJ3gnIHx8IGMgPT0gJ1gnIHx8IGMgPT0gJ28nKSkgewotICAgICAgICAgICAgICAgIGFzc2VydChQeVVuaWNvZGVfUkVBRChraW5kLCBwYnVmLCBwaW5kZXgpID09ICcwJyk7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KFB5VW5pY29kZV9SRUFEKGtpbmQsIHBidWYsIHBpbmRleCArIDEpID09IGMpOwotICAgICAgICAgICAgICAgIGlmIChmaWxsICE9ICcgJykgewotICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUod3JpdGVyLmtpbmQsIHdyaXRlci5kYXRhLCB3cml0ZXIucG9zLCAnMCcpOwotICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUod3JpdGVyLmtpbmQsIHdyaXRlci5kYXRhLCB3cml0ZXIucG9zKzEsIGMpOwotICAgICAgICAgICAgICAgICAgICB3cml0ZXIucG9zICs9IDI7Ci0gICAgICAgICAgICAgICAgICAgIHBpbmRleCArPSAyOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB3aWR0aCAtPSAyOwotICAgICAgICAgICAgICAgIGlmICh3aWR0aCA8IDApCi0gICAgICAgICAgICAgICAgICAgIHdpZHRoID0gMDsKLSAgICAgICAgICAgICAgICBsZW4gLT0gMjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh3aWR0aCA+IGxlbiAmJiAhKGZsYWdzICYgRl9MSlVTVCkpIHsKLSAgICAgICAgICAgICAgICBzdWJsZW4gPSB3aWR0aCAtIGxlbjsKLSAgICAgICAgICAgICAgICBGSUxMKHdyaXRlci5raW5kLCB3cml0ZXIuZGF0YSwgZmlsbCwgd3JpdGVyLnBvcywgc3VibGVuKTsKLSAgICAgICAgICAgICAgICB3cml0ZXIucG9zICs9IHN1YmxlbjsKLSAgICAgICAgICAgICAgICB3aWR0aCA9IGxlbjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChmaWxsID09ICcgJykgewotICAgICAgICAgICAgICAgIGlmIChzaWduKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURSh3cml0ZXIua2luZCwgd3JpdGVyLmRhdGEsIHdyaXRlci5wb3MsIHNpZ25jaGFyKTsKLSAgICAgICAgICAgICAgICAgICAgd3JpdGVyLnBvcyArPSAxOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoKGZsYWdzICYgRl9BTFQpICYmIChjID09ICd4JyB8fCBjID09ICdYJyB8fCBjID09ICdvJykpIHsKLSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KFB5VW5pY29kZV9SRUFEKGtpbmQsIHBidWYsIHBpbmRleCkgPT0gJzAnKTsKLSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KFB5VW5pY29kZV9SRUFEKGtpbmQsIHBidWYsIHBpbmRleCsxKSA9PSBjKTsKLSAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKHdyaXRlci5raW5kLCB3cml0ZXIuZGF0YSwgd3JpdGVyLnBvcywgJzAnKTsKLSAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKHdyaXRlci5raW5kLCB3cml0ZXIuZGF0YSwgd3JpdGVyLnBvcysxLCBjKTsKLSAgICAgICAgICAgICAgICAgICAgd3JpdGVyLnBvcyArPSAyOwotICAgICAgICAgICAgICAgICAgICBwaW5kZXggKz0gMjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChsZW4pIHsKLSAgICAgICAgICAgICAgICBfUHlVbmljb2RlX0Zhc3RDb3B5Q2hhcmFjdGVycyh3cml0ZXIuYnVmZmVyLCB3cml0ZXIucG9zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAsIHBpbmRleCwgbGVuKTsKLSAgICAgICAgICAgICAgICB3cml0ZXIucG9zICs9IGxlbjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh3aWR0aCA+IGxlbikgewotICAgICAgICAgICAgICAgIHN1YmxlbiA9IHdpZHRoIC0gbGVuOwotICAgICAgICAgICAgICAgIEZJTEwod3JpdGVyLmtpbmQsIHdyaXRlci5kYXRhLCAnICcsIHdyaXRlci5wb3MsIHN1Ymxlbik7Ci0gICAgICAgICAgICAgICAgd3JpdGVyLnBvcyArPSBzdWJsZW47Ci0gICAgICAgICAgICB9Ci0KLW5leHRhcmc6Ci0gICAgICAgICAgICBpZiAoZGljdCAmJiAoYXJnaWR4IDwgYXJnbGVuKSAmJiBjICE9ICclJykgewotICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJub3QgYWxsIGFyZ3VtZW50cyBjb252ZXJ0ZWQgZHVyaW5nIHN0cmluZyBmb3JtYXR0aW5nIik7Ci0gICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgUHlfQ0xFQVIodGVtcCk7Ci0gICAgICAgIH0gLyogJyUnICovCi0gICAgfSAvKiB1bnRpbCBlbmQgKi8KLSAgICBpZiAoYXJnaWR4IDwgYXJnbGVuICYmICFkaWN0KSB7CisgICAgaWYgKGN0eC5hcmdpZHggPCBjdHguYXJnbGVuICYmICFjdHguZGljdCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgIm5vdCBhbGwgYXJndW1lbnRzIGNvbnZlcnRlZCBkdXJpbmcgc3RyaW5nIGZvcm1hdHRpbmciKTsKICAgICAgICAgZ290byBvbkVycm9yOwogICAgIH0KIAotICAgIGlmIChhcmdzX293bmVkKSB7Ci0gICAgICAgIFB5X0RFQ1JFRihhcmdzKTsKKyAgICBpZiAoY3R4LmFyZ3Nfb3duZWQpIHsKKyAgICAgICAgUHlfREVDUkVGKGN0eC5hcmdzKTsKICAgICB9Ci0gICAgUHlfREVDUkVGKHVmb3JtYXQpOwotICAgIFB5X1hERUNSRUYodGVtcCk7Ci0gICAgUHlfWERFQ1JFRihzZWNvbmQpOwotICAgIHJldHVybiBfUHlVbmljb2RlV3JpdGVyX0ZpbmlzaCgmd3JpdGVyKTsKKyAgICBQeV9ERUNSRUYoY3R4LmZtdHN0cik7CisgICAgcmV0dXJuIF9QeVVuaWNvZGVXcml0ZXJfRmluaXNoKCZjdHgud3JpdGVyKTsKIAogICBvbkVycm9yOgotICAgIFB5X0RFQ1JFRih1Zm9ybWF0KTsKLSAgICBQeV9YREVDUkVGKHRlbXApOwotICAgIFB5X1hERUNSRUYoc2Vjb25kKTsKLSAgICBfUHlVbmljb2RlV3JpdGVyX0RlYWxsb2MoJndyaXRlcik7Ci0gICAgaWYgKGFyZ3Nfb3duZWQpIHsKLSAgICAgICAgUHlfREVDUkVGKGFyZ3MpOworICAgIFB5X0RFQ1JFRihjdHguZm10c3RyKTsKKyAgICBfUHlVbmljb2RlV3JpdGVyX0RlYWxsb2MoJmN0eC53cml0ZXIpOworICAgIGlmIChjdHguYXJnc19vd25lZCkgeworICAgICAgICBQeV9ERUNSRUYoY3R4LmFyZ3MpOwogICAgIH0KICAgICByZXR1cm4gTlVMTDsKIH0KQEAgLTE0MjYzLDcgKzE1MDQwLDcgQEAKIHZvaWQKIFB5VW5pY29kZV9JbnRlcm5JblBsYWNlKFB5T2JqZWN0ICoqcCkKIHsKLSAgICByZWdpc3RlciBQeU9iamVjdCAqcyA9ICpwOworICAgIFB5T2JqZWN0ICpzID0gKnA7CiAgICAgUHlPYmplY3QgKnQ7CiAjaWZkZWYgUHlfREVCVUcKICAgICBhc3NlcnQocyAhPSBOVUxMKTsKQEAgLTE0MjkyLDEyICsxNTA2OSwxMiBAQAogICAgIHQgPSBQeURpY3RfR2V0SXRlbShpbnRlcm5lZCwgcyk7CiAgICAgUHlfRU5EX0FMTE9XX1JFQ1VSU0lPTgogCi0gICAgICAgIGlmICh0KSB7Ci0gICAgICAgICAgICBQeV9JTkNSRUYodCk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYoKnApOwotICAgICAgICAgICAgKnAgPSB0OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CisgICAgaWYgKHQpIHsKKyAgICAgICAgUHlfSU5DUkVGKHQpOworICAgICAgICBQeV9ERUNSRUYoKnApOworICAgICAgICAqcCA9IHQ7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKICAgICBQeVRocmVhZFN0YXRlX0dFVCgpLT5yZWN1cnNpb25fY3JpdGljYWwgPSAxOwogICAgIGlmIChQeURpY3RfU2V0SXRlbShpbnRlcm5lZCwgcywgcykgPCAwKSB7CkBAIC0xNDYwMCw3ICsxNTM3Nyw3IEBACiBpbnQKIFB5X1VOSUNPREVfc3RybmNtcChjb25zdCBQeV9VTklDT0RFICpzMSwgY29uc3QgUHlfVU5JQ09ERSAqczIsIHNpemVfdCBuKQogewotICAgIHJlZ2lzdGVyIFB5X1VOSUNPREUgdTEsIHUyOworICAgIFB5X1VOSUNPREUgdTEsIHUyOwogICAgIGZvciAoOyBuICE9IDA7IG4tLSkgewogICAgICAgICB1MSA9ICpzMTsKICAgICAgICAgdTIgPSAqczI7CmRpZmYgLS1naXQgYS9PYmplY3RzL3VuaWNvZGV0eXBlX2RiLmggYi9PYmplY3RzL3VuaWNvZGV0eXBlX2RiLmgKaW5kZXggNDZhOTJiYi4uMWZkYzA5MiAxMDA2NDQKLS0tIGEvT2JqZWN0cy91bmljb2RldHlwZV9kYi5oCisrKyBiL09iamVjdHMvdW5pY29kZXR5cGVfZGIuaApAQCAtMTU4OSw3ICsxNTg5LDcgQEAKICAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDAsIDAsIAogICAgIDAsIDAsIDAsIDU1LCA1NSwgNTUsIDUsIDYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIxLCAyMSwgMjEsIAogICAgIDIxLCAyMSwgMCwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAKLSAgICAyNSwgMjUsIDI1LCA1LCAwLCAwLCA1LCA1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDI1LCAyNSwgMjUsIDUsIDIxLCAwLCA1LCA1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAogICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAogICAgIDU1LCA1NSwgNTUsIDk2LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMjUsIDI1LCAyNSwgMjUsIAogICAgIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgNywgOCwgCkBAIC0xODAxLDcgKzE4MDEsNyBAQAogICAgIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgNSwgNSwgNSwgOTYsIDUsIDUsIDUsIDUsIDU1LCAyNSwgMCwgMCwgNywgCiAgICAgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDAsIDAsIDAsIDAsIDAsIDAsIDI3LCAyNywgMjcsIDI3LCAyNywgCiAgICAgMjcsIDI3LCAyNywgMjcsIDI3LCAwLCAwLCAwLCAwLCAwLCAwLCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAKLSAgICAyNSwgMjUsIDI1LCAyLCAwLCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMjUsIDI1LCAyNSwgMjEsIDAsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKICAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDk2LCAKICAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKQEAgLTE4MjgsNyArMTgyOCw3IEBACiAgICAgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDEzMiwgMCwgMCwgMCwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCiAgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCiAgICAgNSwgNSwgNSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAyNSwgMjUsIDE4LCAxOCwgMTgsIDAsIDAsIDUsIDUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAyNSwgMjUsIDE4LCAxOCwgMjUsIDAsIDAsIDUsIDUsIDU1LCA1NSwgNTUsIAogICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAogICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAogICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMTgsIDI1LCAxOCwgMjUsIApAQCAtMTkxNSwxMSArMTkxNSwxMSBAQAogICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDYsIDUsIDUsIDYsIDMsIDMsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMiwgNSwgNSwgCiAgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgMTgsIDE4LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAKICAgICA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAxOCwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgMiwgMjEsIAotICAgIDIxLCAyMSwgMjEsIDIxLCAwLCAwLCAwLCAwLCAwLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyNDUsIDk1LCAwLCAwLCAKKyAgICAyMSwgMjEsIDIxLCAyMSwgMCwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDI0NSwgOTUsIDAsIDAsIAogICAgIDI0NiwgMjQ3LCAyNDgsIDI0OSwgMjUwLCAyNTEsIDUsIDUsIDUsIDUsIDUsIDk1LCAyNDUsIDI2LCAyMiwgMjMsIDI0NiwgCiAgICAgMjQ3LCAyNDgsIDI0OSwgMjUwLCAyNTEsIDUsIDUsIDUsIDUsIDUsIDAsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCAKICAgICA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCAwLCAwLCAwLCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAKLSAgICA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgCiAgICAgMjUsIDI1LCAyNSwgNiwgNiwgNiwgNiwgMjUsIDYsIDYsIDYsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIAogICAgIDI1LCAyNSwgMjUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUsIDUsIDExMywgNSwgNSwgCkBAIC0yNTkzLDEwICsyNTkzLDEwIEBACiAgICAgMCwgMCwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAKICAgICAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgCiAgICAgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIAotICAgIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDI1MiwgMjUyLCAxNDEsIDE0MSwgMTQxLCAKICAgICAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgCiAgICAgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIAotICAgIDE0MSwgMTQxLCAxNDEsIDI1MiwgMjUyLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAKKyAgICAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgCisgICAgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIAogICAgIDE0MSwgMTQxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1LCA1LCA1LCA1LCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKICAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKQEAgLTMzODAsNiArMzM4MCw3IEBACiAgICAgY2FzZSAweDEyNDM1OgogICAgIGNhc2UgMHgxMjQ0QToKICAgICBjYXNlIDB4MTI0NTA6CisgICAgY2FzZSAweDEyNDU2OgogICAgIGNhc2UgMHgxMjQ1OToKICAgICBjYXNlIDB4MUQzNjE6CiAgICAgY2FzZSAweDFEN0QwOgpAQCAtMzQyNyw2ICszNDI4LDggQEAKICAgICAgICAgcmV0dXJuIChkb3VibGUpIDIwMDAwLjA7CiAgICAgY2FzZSAweDMyNTE6CiAgICAgICAgIHJldHVybiAoZG91YmxlKSAyMS4wOworICAgIGNhc2UgMHgxMjQzMjoKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDIxNjAwMC4wOwogICAgIGNhc2UgMHgzMjUyOgogICAgICAgICByZXR1cm4gKGRvdWJsZSkgMjIuMDsKICAgICBjYXNlIDB4MzI1MzoKQEAgLTM1MzQsNiArMzUzNyw3IEBACiAgICAgY2FzZSAweDEyNDNCOgogICAgIGNhc2UgMHgxMjQ0QjoKICAgICBjYXNlIDB4MTI0NTE6CisgICAgY2FzZSAweDEyNDU3OgogICAgIGNhc2UgMHgxRDM2MjoKICAgICBjYXNlIDB4MUQ3RDE6CiAgICAgY2FzZSAweDFEN0RCOgpAQCAtMzcyMSw2ICszNzI1LDggQEAKICAgICAgICAgcmV0dXJuIChkb3VibGUpIDQyLjA7CiAgICAgY2FzZSAweDMyQjg6CiAgICAgICAgIHJldHVybiAoZG91YmxlKSA0My4wOworICAgIGNhc2UgMHgxMjQzMzoKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDQzMjAwMC4wOwogICAgIGNhc2UgMHgzMkI5OgogICAgICAgICByZXR1cm4gKGRvdWJsZSkgNDQuMDsKICAgICBjYXNlIDB4MzJCQToKQEAgLTQyNzEsNyArNDI3Nyw3IEBACiAvKiBSZXR1cm5zIDEgZm9yIFVuaWNvZGUgY2hhcmFjdGVycyBoYXZpbmcgdGhlIGJpZGlyZWN0aW9uYWwKICAqIHR5cGUgJ1dTJywgJ0InIG9yICdTJyBvciB0aGUgY2F0ZWdvcnkgJ1pzJywgMCBvdGhlcndpc2UuCiAgKi8KLWludCBfUHlVbmljb2RlX0lzV2hpdGVzcGFjZShyZWdpc3RlciBjb25zdCBQeV9VQ1M0IGNoKQoraW50IF9QeVVuaWNvZGVfSXNXaGl0ZXNwYWNlKGNvbnN0IFB5X1VDUzQgY2gpCiB7CiAgICAgc3dpdGNoIChjaCkgewogICAgIGNhc2UgMHgwMDA5OgpAQCAtNDI4Nyw3ICs0MjkzLDYgQEAKICAgICBjYXNlIDB4MDA4NToKICAgICBjYXNlIDB4MDBBMDoKICAgICBjYXNlIDB4MTY4MDoKLSAgICBjYXNlIDB4MTgwRToKICAgICBjYXNlIDB4MjAwMDoKICAgICBjYXNlIDB4MjAwMToKICAgICBjYXNlIDB4MjAwMjoKQEAgLTQzMTMsNyArNDMxOCw3IEBACiAgKiBwcm9wZXJ0eSAnQksnLCAnQ1InLCAnTEYnIG9yICdOTCcgb3IgaGF2aW5nIGJpZGlyZWN0aW9uYWwKICAqIHR5cGUgJ0InLCAwIG90aGVyd2lzZS4KICAqLwotaW50IF9QeVVuaWNvZGVfSXNMaW5lYnJlYWsocmVnaXN0ZXIgY29uc3QgUHlfVUNTNCBjaCkKK2ludCBfUHlVbmljb2RlX0lzTGluZWJyZWFrKGNvbnN0IFB5X1VDUzQgY2gpCiB7CiAgICAgc3dpdGNoIChjaCkgewogICAgIGNhc2UgMHgwMDBBOgpkaWZmIC0tZ2l0IGEvT2JqZWN0cy93ZWFrcmVmb2JqZWN0LmMgYi9PYmplY3RzL3dlYWtyZWZvYmplY3QuYwppbmRleCBiNDlkY2VlLi5kNGQ1MmU2IDEwMDY0NAotLS0gYS9PYmplY3RzL3dlYWtyZWZvYmplY3QuYworKysgYi9PYmplY3RzL3dlYWtyZWZvYmplY3QuYwpAQCAtMzM4LDYgKzMzOCwxMSBAQAogfQogCiAKK3N0YXRpYyBQeU1lbWJlckRlZiB3ZWFrcmVmX21lbWJlcnNbXSA9IHsKKyAgICB7Il9fY2FsbGJhY2tfXyIsIFRfT0JKRUNULCBvZmZzZXRvZihQeVdlYWtSZWZlcmVuY2UsIHdyX2NhbGxiYWNrKSwgUkVBRE9OTFl9LAorICAgIHtOVUxMfSAvKiBTZW50aW5lbCAqLworfTsKKwogUHlUeXBlT2JqZWN0CiBfUHlXZWFrcmVmX1JlZlR5cGUgPSB7CiAgICAgUHlWYXJPYmplY3RfSEVBRF9JTklUKCZQeVR5cGVfVHlwZSwgMCkKQEAgLTM2OSw3ICszNzQsNyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2l0ZXIqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2l0ZXJuZXh0Ki8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9tZXRob2RzKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9tZW1iZXJzKi8KKyAgICB3ZWFrcmVmX21lbWJlcnMsICAgICAgICAgICAgLyp0cF9tZW1iZXJzKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9nZXRzZXQqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2Jhc2UqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2RpY3QqLwpAQCAtODk1LDExICs5MDAsOSBAQAogICAgIGlmICgqbGlzdCAhPSBOVUxMKSB7CiAgICAgICAgIFB5V2Vha1JlZmVyZW5jZSAqY3VycmVudCA9ICpsaXN0OwogICAgICAgICBQeV9zc2l6ZV90IGNvdW50ID0gX1B5V2Vha3JlZl9HZXRXZWFrcmVmQ291bnQoY3VycmVudCk7Ci0gICAgICAgIGludCByZXN0b3JlX2Vycm9yID0gUHlFcnJfT2NjdXJyZWQoKSA/IDEgOiAwOwogICAgICAgICBQeU9iamVjdCAqZXJyX3R5cGUsICplcnJfdmFsdWUsICplcnJfdGI7CiAKLSAgICAgICAgaWYgKHJlc3RvcmVfZXJyb3IpCi0gICAgICAgICAgICBQeUVycl9GZXRjaCgmZXJyX3R5cGUsICZlcnJfdmFsdWUsICZlcnJfdGIpOworICAgICAgICBQeUVycl9GZXRjaCgmZXJyX3R5cGUsICZlcnJfdmFsdWUsICZlcnJfdGIpOwogICAgICAgICBpZiAoY291bnQgPT0gMSkgewogICAgICAgICAgICAgUHlPYmplY3QgKmNhbGxiYWNrID0gY3VycmVudC0+d3JfY2FsbGJhY2s7CiAKQEAgLTkxNyw4ICs5MjAsNyBAQAogCiAgICAgICAgICAgICB0dXBsZSA9IFB5VHVwbGVfTmV3KGNvdW50ICogMik7CiAgICAgICAgICAgICBpZiAodHVwbGUgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIGlmIChyZXN0b3JlX2Vycm9yKQotICAgICAgICAgICAgICAgICAgICBQeUVycl9GZXRjaCgmZXJyX3R5cGUsICZlcnJfdmFsdWUsICZlcnJfdGIpOworICAgICAgICAgICAgICAgIF9QeUVycl9DaGFpbkV4Y2VwdGlvbnMoZXJyX3R5cGUsIGVycl92YWx1ZSwgZXJyX3RiKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKQEAgLTk0OSw3ICs5NTEsNyBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgUHlfREVDUkVGKHR1cGxlKTsKICAgICAgICAgfQotICAgICAgICBpZiAocmVzdG9yZV9lcnJvcikKLSAgICAgICAgICAgIFB5RXJyX1Jlc3RvcmUoZXJyX3R5cGUsIGVycl92YWx1ZSwgZXJyX3RiKTsKKyAgICAgICAgYXNzZXJ0KCFQeUVycl9PY2N1cnJlZCgpKTsKKyAgICAgICAgUHlFcnJfUmVzdG9yZShlcnJfdHlwZSwgZXJyX3ZhbHVlLCBlcnJfdGIpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1BDL1ZDNi9fY3R5cGVzLmRzcCBiL1BDL1ZDNi9fY3R5cGVzLmRzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWM5OGVhYy4uMDAwMDAwMAotLS0gYS9QQy9WQzYvX2N0eXBlcy5kc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxMzEgKzAsMCBAQAotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJfY3R5cGVzIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMA0KLSMgKiogRE8gTk9UIEVESVQgKioNCi0NCi0jIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIgMHgwMTAyDQotDQotQ0ZHPV9jdHlwZXMgLSBXaW4zMiBEZWJ1Zw0KLSFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwNCi0hTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAiX2N0eXBlcy5tYWsiLg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFDQotIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAiX2N0eXBlcy5tYWsiIENGRz0iX2N0eXBlcyAtIFdpbjMyIERlYnVnIg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFICJfY3R5cGVzIC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQotIU1FU1NBR0UgIl9jdHlwZXMgLSBXaW4zMiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQotIU1FU1NBR0UgDQotDQotIyBCZWdpbiBQcm9qZWN0DQotIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDANCi0jIFBST1AgU2NjX1Byb2pOYW1lICJfY3R5cGVzIg0KLSMgUFJPUCBTY2NfTG9jYWxQYXRoICIuLiINCi1DUFA9Y2wuZXhlDQotTVRMPW1pZGwuZXhlDQotUlNDPXJjLmV4ZQ0KLQ0KLSFJRiAgIiQoQ0ZHKSIgPT0gIl9jdHlwZXMgLSBXaW4zMiBSZWxlYXNlIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtcmVsZWFzZVxfY3R5cGVzIg0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVQgL1czIC9HWCAvTzIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9aaSAvTzIgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0kgIi4uXC4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2YyIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiTkRFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL21hY2hpbmU6STM4Ng0KLSMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFkMWEwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL19jdHlwZXMucHlkIg0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTFNFSUYgICIkKENGRykiID09ICJfY3R5cGVzIC0gV2luMzIgRGVidWciDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLWRlYnVnXF9jdHlwZXMiDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9JICIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmMiIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIl9ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCi0jIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvYmFzZToiMHgxZDFhMDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9fY3R5cGVzX2QucHlkIiAvcGRidHlwZTpzZXB0DQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVORElGIA0KLQ0KLSMgQmVnaW4gVGFyZ2V0DQotDQotIyBOYW1lICJfY3R5cGVzIC0gV2luMzIgUmVsZWFzZSINCi0jIE5hbWUgIl9jdHlwZXMgLSBXaW4zMiBEZWJ1ZyINCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX2N0eXBlc1xfY3R5cGVzLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfY3R5cGVzXGNhbGxiYWNrcy5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX2N0eXBlc1xjYWxscHJvYy5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX2N0eXBlc1xjZmllbGQuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmNcZmZpLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfY3R5cGVzXG1hbGxvY19jbG9zdXJlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfY3R5cGVzXGxpYmZmaV9tc3ZjXHByZXBfY2lmLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfY3R5cGVzXHN0Z2RpY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmNcd2luMzIuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBFbmQgVGFyZ2V0DQotIyBFbmQgUHJvamVjdA0KZGlmZiAtLWdpdCBhL1BDL1ZDNi9fY3R5cGVzX3Rlc3QuZHNwIGIvUEMvVkM2L19jdHlwZXNfdGVzdC5kc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQxZWIyMTcuLjAwMDAwMDAKLS0tIGEvUEMvVkM2L19jdHlwZXNfdGVzdC5kc3AKKysrIC9kZXYvbnVsbApAQCAtMSw5OSArMCwwIEBACi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9Il9jdHlwZXNfdGVzdCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDANCi0jICoqIERPIE5PVCBFRElUICoqDQotDQotIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiIDB4MDEwMg0KLQ0KLUNGRz1fY3R5cGVzX3Rlc3QgLSBXaW4zMiBEZWJ1Zw0KLSFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwNCi0hTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAiX2N0eXBlc190ZXN0Lm1hayIuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UNCi0hTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJfY3R5cGVzX3Rlc3QubWFrIiBDRkc9Il9jdHlwZXNfdGVzdCAtIFdpbjMyIERlYnVnIg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFICJfY3R5cGVzX3Rlc3QgLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSAiX2N0eXBlc190ZXN0IC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFIA0KLQ0KLSMgQmVnaW4gUHJvamVjdA0KLSMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwDQotIyBQUk9QIFNjY19Qcm9qTmFtZSAiX2N0eXBlc190ZXN0Ig0KLSMgUFJPUCBTY2NfTG9jYWxQYXRoICIuLiINCi1DUFA9Y2wuZXhlDQotTVRMPW1pZGwuZXhlDQotUlNDPXJjLmV4ZQ0KLQ0KLSFJRiAgIiQoQ0ZHKSIgPT0gIl9jdHlwZXNfdGVzdCAtIFdpbjMyIFJlbGVhc2UiDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1yZWxlYXNlXF9jdHlwZXNfdGVzdCINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UIC9XMyAvR1ggL08yIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTUQgL1czIC9HWCAvWmkgL08yIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIk5ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9tYWNoaW5lOkkzODYNCi0jIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL19jdHlwZXNfdGVzdC5weWQiDQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gIl9jdHlwZXNfdGVzdCAtIFdpbjMyIERlYnVnIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1kZWJ1Z1xfY3R5cGVzX3Rlc3QiDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIl9ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCi0jIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL19jdHlwZXNfdGVzdF9kLnB5ZCIgL3BkYnR5cGU6c2VwdA0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTkRJRiANCi0NCi0jIEJlZ2luIFRhcmdldA0KLQ0KLSMgTmFtZSAiX2N0eXBlc190ZXN0IC0gV2luMzIgUmVsZWFzZSINCi0jIE5hbWUgIl9jdHlwZXNfdGVzdCAtIFdpbjMyIERlYnVnIg0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfY3R5cGVzXF9jdHlwZXNfdGVzdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEVuZCBUYXJnZXQNCi0jIEVuZCBQcm9qZWN0DQpkaWZmIC0tZ2l0IGEvUEMvVkM2L19lbGVtZW50dHJlZS5kc3AgYi9QQy9WQzYvX2VsZW1lbnR0cmVlLmRzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGRjMGNkZC4uMDAwMDAwMAotLS0gYS9QQy9WQzYvX2VsZW1lbnR0cmVlLmRzcAorKysgL2Rldi9udWxsCkBAIC0xLDExMSArMCwwIEBACi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9Il9lbGVtZW50dHJlZSIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDANCi0jICoqIERPIE5PVCBFRElUICoqDQotDQotIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiIDB4MDEwMg0KLQ0KLUNGRz1fZWxlbWVudHRyZWUgLSBXaW4zMiBEZWJ1Zw0KLSFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwNCi0hTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAiX2VsZW1lbnR0cmVlLm1hayIuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UNCi0hTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJfZWxlbWVudHRyZWUubWFrIiBDRkc9Il9lbGVtZW50dHJlZSAtIFdpbjMyIERlYnVnIg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFICJfZWxlbWVudHRyZWUgLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSAiX2VsZW1lbnR0cmVlIC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFIA0KLQ0KLSMgQmVnaW4gUHJvamVjdA0KLSMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwDQotIyBQUk9QIFNjY19Qcm9qTmFtZSAiX2VsZW1lbnR0cmVlIg0KLSMgUFJPUCBTY2NfTG9jYWxQYXRoICIuLiINCi1DUFA9Y2wuZXhlDQotTVRMPW1pZGwuZXhlDQotUlNDPXJjLmV4ZQ0KLQ0KLSFJRiAgIiQoQ0ZHKSIgPT0gIl9lbGVtZW50dHJlZSAtIFdpbjMyIFJlbGVhc2UiDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1yZWxlYXNlXF9lbGVtZW50dHJlZSINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UIC9XMyAvR1ggL08yIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTUQgL1czIC9HWCAvWmkgL08yIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9JICIuLlwuLlxNb2R1bGVzXGV4cGF0IiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJOREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvRCAiWE1MX05TIiAvRCAiWE1MX0RURCIgL0QgIkJZVEVPUkRFUj0xMjM0IiAvRCAiWE1MX0NPTlRFWFRfQllURVM9MTAyNCIgL0QgIlVTRV9QWUVYUEFUX0NBUEkiIC9EICJYTUxfU1RBVElDIiAvRCAiSEFWRV9NRU1NT1ZFIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvbWFjaGluZTpJMzg2DQotIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWQxMDAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vX2VsZW1lbnR0cmVlLnB5ZCINCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRUxTRUlGICAiJChDRkcpIiA9PSAiX2VsZW1lbnR0cmVlIC0gV2luMzIgRGVidWciDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLWRlYnVnXF9lbGVtZW50dHJlZSINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0kgIi4uXC4uXE1vZHVsZXNcZXhwYXQiIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIl9ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9EICJYTUxfTlMiIC9EICJYTUxfRFREIiAvRCAiQllURU9SREVSPTEyMzQiIC9EICJYTUxfQ09OVEVYVF9CWVRFUz0xMDI0IiAvRCAiVVNFX1BZRVhQQVRfQ0FQSSIgL0QgIlhNTF9TVEFUSUMiIC9EICJIQVZFX01FTU1PVkUiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCi0jIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvYmFzZToiMHgxZDEwMDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9fZWxlbWVudHRyZWVfZC5weWQiIC9wZGJ0eXBlOnNlcHQNCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRU5ESUYgDQotDQotIyBCZWdpbiBUYXJnZXQNCi0NCi0jIE5hbWUgIl9lbGVtZW50dHJlZSAtIFdpbjMyIFJlbGVhc2UiDQotIyBOYW1lICJfZWxlbWVudHRyZWUgLSBXaW4zMiBEZWJ1ZyINCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX2VsZW1lbnR0cmVlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xleHBhdFx4bWxwYXJzZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcZXhwYXRceG1scm9sZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcZXhwYXRceG1sdG9rLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgRW5kIFRhcmdldA0KLSMgRW5kIFByb2plY3QNCmRpZmYgLS1naXQgYS9QQy9WQzYvX21zaS5kc3AgYi9QQy9WQzYvX21zaS5kc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2YTYxYmMuLjAwMDAwMDAKLS0tIGEvUEMvVkM2L19tc2kuZHNwCisrKyAvZGV2L251bGwKQEAgLTEsOTkgKzAsMCBAQAotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJfbXNpIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMA0KLSMgKiogRE8gTk9UIEVESVQgKioNCi0NCi0jIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIgMHgwMTAyDQotDQotQ0ZHPV9tc2kgLSBXaW4zMiBEZWJ1Zw0KLSFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwNCi0hTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAiX21zaS5tYWsiLg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFDQotIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAiX21zaS5tYWsiIENGRz0iX21zaSAtIFdpbjMyIERlYnVnIg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFICJfbXNpIC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQotIU1FU1NBR0UgIl9tc2kgLSBXaW4zMiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQotIU1FU1NBR0UgDQotDQotIyBCZWdpbiBQcm9qZWN0DQotIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDANCi0jIFBST1AgU2NjX1Byb2pOYW1lICJfbXNpIg0KLSMgUFJPUCBTY2NfTG9jYWxQYXRoICIuLiINCi1DUFA9Y2wuZXhlDQotTVRMPW1pZGwuZXhlDQotUlNDPXJjLmV4ZQ0KLQ0KLSFJRiAgIiQoQ0ZHKSIgPT0gIl9tc2kgLSBXaW4zMiBSZWxlYXNlIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtcmVsZWFzZVxfbXNpIg0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVQgL1czIC9HWCAvTzIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9aaSAvTzIgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiTkRFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIGZjaS5saWIgbXNpLmxpYiBycGNydDQubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL21hY2hpbmU6STM4Ng0KLSMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiBmY2kubGliIG1zaS5saWIgcnBjcnQ0LmxpYiAvbm9sb2dvIC9iYXNlOiIweDFkMWEwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL19tc2kucHlkIg0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTFNFSUYgICIkKENGRykiID09ICJfbXNpIC0gV2luMzIgRGVidWciDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLWRlYnVnXF9tc2kiDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIl9ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiBmY2kubGliIG1zaS5saWIgcnBjcnQ0LmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCi0jIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgZmNpLmxpYiBtc2kubGliIHJwY3J0NC5saWIgL25vbG9nbyAvYmFzZToiMHgxZDFhMDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9fbXNpX2QucHlkIiAvcGRidHlwZTpzZXB0DQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVORElGIA0KLQ0KLSMgQmVnaW4gVGFyZ2V0DQotDQotIyBOYW1lICJfbXNpIC0gV2luMzIgUmVsZWFzZSINCi0jIE5hbWUgIl9tc2kgLSBXaW4zMiBEZWJ1ZyINCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFBDXF9tc2kuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBFbmQgVGFyZ2V0DQotIyBFbmQgUHJvamVjdA0KZGlmZiAtLWdpdCBhL1BDL1ZDNi9fbXVsdGlwcm9jZXNzaW5nLmRzcCBiL1BDL1ZDNi9fbXVsdGlwcm9jZXNzaW5nLmRzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTFiODQ3MC4uMDAwMDAwMAotLS0gYS9QQy9WQzYvX211bHRpcHJvY2Vzc2luZy5kc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxMDcgKzAsMCBAQAotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJfbXVsdGlwcm9jZXNzaW5nIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMA0KLSMgKiogRE8gTk9UIEVESVQgKioNCi0NCi0jIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIgMHgwMTAyDQotDQotQ0ZHPV9tdWx0aXByb2Nlc3NpbmcgLSBXaW4zMiBEZWJ1Zw0KLSFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwNCi0hTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAiX211bHRpcHJvY2Vzc2luZy5tYWsiLg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFDQotIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAiX211bHRpcHJvY2Vzc2luZy5tYWsiIENGRz0iX211bHRpcHJvY2Vzc2luZyAtIFdpbjMyIERlYnVnIg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFICJfbXVsdGlwcm9jZXNzaW5nIC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQotIU1FU1NBR0UgIl9tdWx0aXByb2Nlc3NpbmcgLSBXaW4zMiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQotIU1FU1NBR0UgDQotDQotIyBCZWdpbiBQcm9qZWN0DQotIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDANCi0jIFBST1AgU2NjX1Byb2pOYW1lICJfbXVsdGlwcm9jZXNzaW5nIg0KLSMgUFJPUCBTY2NfTG9jYWxQYXRoICIuLiINCi1DUFA9Y2wuZXhlDQotTVRMPW1pZGwuZXhlDQotUlNDPXJjLmV4ZQ0KLQ0KLSFJRiAgIiQoQ0ZHKSIgPT0gIl9tdWx0aXByb2Nlc3NpbmcgLSBXaW4zMiBSZWxlYXNlIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtcmVsZWFzZVxfbXVsdGlwcm9jZXNzaW5nIg0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVQgL1czIC9HWCAvTzIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9aaSAvTzIgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiTkRFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL21hY2hpbmU6STM4Ng0KLSMgQUREIExJTkszMiB1c2VyMzIubGliIGtlcm5lbDMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiB3czJfMzIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWUxRDAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vX211bHRpcHJvY2Vzc2luZy5weWQiDQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gIl9tdWx0aXByb2Nlc3NpbmcgLSBXaW4zMiBEZWJ1ZyINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtZGVidWdcX211bHRpcHJvY2Vzc2luZyINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiX0RFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdA0KLSMgQUREIExJTkszMiB1c2VyMzIubGliIGtlcm5lbDMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiB3czJfMzIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWUxZDAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vX211bHRpcHJvY2Vzc2luZ19kLnB5ZCIgL3BkYnR5cGU6c2VwdA0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTkRJRiANCi0NCi0jIEJlZ2luIFRhcmdldA0KLQ0KLSMgTmFtZSAiX211bHRpcHJvY2Vzc2luZyAtIFdpbjMyIFJlbGVhc2UiDQotIyBOYW1lICJfbXVsdGlwcm9jZXNzaW5nIC0gV2luMzIgRGVidWciDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9tdWx0aXByb2Nlc3NpbmdcbXVsdGlwcm9jZXNzaW5nLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfbXVsdGlwcm9jZXNzaW5nXHNlbWFwaG9yZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX211bHRpcHJvY2Vzc2luZ1x3aW4zMl9mdW5jdGlvbnMuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBFbmQgVGFyZ2V0DQotIyBFbmQgUHJvamVjdA0KZGlmZiAtLWdpdCBhL1BDL1ZDNi9fc29ja2V0LmRzcCBiL1BDL1ZDNi9fc29ja2V0LmRzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTVlZThmMi4uMDAwMDAwMAotLS0gYS9QQy9WQzYvX3NvY2tldC5kc3AKKysrIC9kZXYvbnVsbApAQCAtMSw5OSArMCwwIEBACi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9Il9zb2NrZXQiIC0gUGFja2FnZSBPd25lcj08ND4NCi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQotIyAqKiBETyBOT1QgRURJVCAqKg0KLQ0KLSMgVEFSR1RZUEUgIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IiAweDAxMDINCi0NCi1DRkc9X3NvY2tldCAtIFdpbjMyIERlYnVnDQotIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLA0KLSFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJfc29ja2V0Lm1hayIuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UNCi0hTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJfc29ja2V0Lm1hayIgQ0ZHPSJfc29ja2V0IC0gV2luMzIgRGVidWciDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgIl9zb2NrZXQgLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSAiX3NvY2tldCAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSANCi0NCi0jIEJlZ2luIFByb2plY3QNCi0jIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMA0KLSMgUFJPUCBTY2NfUHJvak5hbWUgIl9zb2NrZXQiDQotIyBQUk9QIFNjY19Mb2NhbFBhdGggIi4uIg0KLUNQUD1jbC5leGUNCi1NVEw9bWlkbC5leGUNCi1SU0M9cmMuZXhlDQotDQotIUlGICAiJChDRkcpIiA9PSAiX3NvY2tldCAtIFdpbjMyIFJlbGVhc2UiDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1yZWxlYXNlXF9zb2NrZXQiDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVCAvVzMgL0dYIC9PMiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL1ppIC9PMiAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJOREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvbWFjaGluZTpJMzg2DQotIyBBREQgTElOSzMyIHVzZXIzMi5saWIga2VybmVsMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIHdzMl8zMi5saWIgL25vbG9nbyAvYmFzZToiMHgxZTFEMDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9fc29ja2V0LnB5ZCINCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRUxTRUlGICAiJChDRkcpIiA9PSAiX3NvY2tldCAtIFdpbjMyIERlYnVnIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1kZWJ1Z1xfc29ja2V0Ig0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVRkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJfREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0DQotIyBBREQgTElOSzMyIHVzZXIzMi5saWIga2VybmVsMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIHdzMl8zMi5saWIgL25vbG9nbyAvYmFzZToiMHgxZTFEMDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9fc29ja2V0X2QucHlkIiAvcGRidHlwZTpzZXB0DQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVORElGIA0KLQ0KLSMgQmVnaW4gVGFyZ2V0DQotDQotIyBOYW1lICJfc29ja2V0IC0gV2luMzIgUmVsZWFzZSINCi0jIE5hbWUgIl9zb2NrZXQgLSBXaW4zMiBEZWJ1ZyINCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcc29ja2V0bW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgRW5kIFRhcmdldA0KLSMgRW5kIFByb2plY3QNCmRpZmYgLS1naXQgYS9QQy9WQzYvX3NxbGl0ZTMuZHNwIGIvUEMvVkM2L19zcWxpdGUzLmRzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzg2OTkzOC4uMDAwMDAwMAotLS0gYS9QQy9WQzYvX3NxbGl0ZTMuZHNwCisrKyAvZGV2L251bGwKQEAgLTEsMTMxICswLDAgQEAKLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0iX3NxbGl0ZTMiIC0gUGFja2FnZSBPd25lcj08ND4NCi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQotIyAqKiBETyBOT1QgRURJVCAqKg0KLQ0KLSMgVEFSR1RZUEUgIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IiAweDAxMDINCi0NCi1DRkc9X3NxbGl0ZTMgLSBXaW4zMiBEZWJ1Zw0KLSFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwNCi0hTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAiX3NxbGl0ZTMubWFrIi4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQ0KLSFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgIl9zcWxpdGUzLm1hayIgQ0ZHPSJfc3FsaXRlMyAtIFdpbjMyIERlYnVnIg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFICJfc3FsaXRlMyAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFICJfc3FsaXRlMyAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSANCi0NCi0jIEJlZ2luIFByb2plY3QNCi0jIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMA0KLSMgUFJPUCBTY2NfUHJvak5hbWUgIl9zcWxpdGUzIg0KLSMgUFJPUCBTY2NfTG9jYWxQYXRoICIuLiINCi1DUFA9Y2wuZXhlDQotTVRMPW1pZGwuZXhlDQotUlNDPXJjLmV4ZQ0KLQ0KLSFJRiAgIiQoQ0ZHKSIgPT0gIl9zcWxpdGUzIC0gV2luMzIgUmVsZWFzZSINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLXJlbGVhc2VcX3NxbGl0ZTMiDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVCAvVzMgL0dYIC9PMiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL1ppIC9PMiAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvSSAiLi5cLi5cLi5cc3FsaXRlLXNvdXJjZS0zLjMuNCIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiTkRFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL0QgTU9EVUxFX05BTUU9XCJzcWxpdGUzXCIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL21hY2hpbmU6STM4Ng0KLSMgQUREIExJTkszMiB1c2VyMzIubGliIGtlcm5lbDMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAuLlwuLlwuLlxzcWxpdGUtc291cmNlLTMuMy40XHNxbGl0ZTMubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWUxODAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vX3NxbGl0ZTMucHlkIg0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTFNFSUYgICIkKENGRykiID09ICJfc3FsaXRlMyAtIFdpbjMyIERlYnVnIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1kZWJ1Z1xfc3FsaXRlMyINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0kgIi4uXC4uXC4uXHNxbGl0ZS1zb3VyY2UtMy4zLjQiIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIl9ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9EIE1PRFVMRV9OQU1FPVwic3FsaXRlM1wiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCi0jIEFERCBMSU5LMzIgdXNlcjMyLmxpYiBrZXJuZWwzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgLi5cLi5cLi5cc3FsaXRlLXNvdXJjZS0zLjMuNFxzcWxpdGUzLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFlMTgwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL19zcWxpdGUzX2QucHlkIiAvcGRidHlwZTpzZXB0DQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVORElGIA0KLQ0KLSMgQmVnaW4gVGFyZ2V0DQotDQotIyBOYW1lICJfc3FsaXRlMyAtIFdpbjMyIFJlbGVhc2UiDQotIyBOYW1lICJfc3FsaXRlMyAtIFdpbjMyIERlYnVnIg0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfc3FsaXRlXGNhY2hlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfc3FsaXRlXGNvbm5lY3Rpb24uYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9zcWxpdGVcY3Vyc29yLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfc3FsaXRlXG1pY3JvcHJvdG9jb2xzLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfc3FsaXRlXG1vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxwcmVwYXJlX3Byb3RvY29sLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfc3FsaXRlXHJvdy5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxzdGF0ZW1lbnQuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9zcWxpdGVcdXRpbC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEVuZCBUYXJnZXQNCi0jIEVuZCBQcm9qZWN0DQpkaWZmIC0tZ2l0IGEvUEMvVkM2L19zc2wuZHNwIGIvUEMvVkM2L19zc2wuZHNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOGJiOTkzLi4wMDAwMDAwCi0tLSBhL1BDL1ZDNi9fc3NsLmRzcAorKysgL2Rldi9udWxsCkBAIC0xLDg5ICswLDAgQEAKLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0iX3NzbCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDANCi0jICoqIERPIE5PVCBFRElUICoqDQotDQotIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgRXh0ZXJuYWwgVGFyZ2V0IiAweDAxMDYNCi0NCi1DRkc9X3NzbCAtIFdpbjMyIERlYnVnDQotIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLA0KLSFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJfc3NsLm1hayIuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UNCi0hTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJfc3NsLm1hayIgQ0ZHPSJfc3NsIC0gV2luMzIgRGVidWciDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgIl9zc2wgLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIEV4dGVybmFsIFRhcmdldCIpDQotIU1FU1NBR0UgIl9zc2wgLSBXaW4zMiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBFeHRlcm5hbCBUYXJnZXQiKQ0KLSFNRVNTQUdFIA0KLQ0KLSMgQmVnaW4gUHJvamVjdA0KLSMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwDQotIyBQUk9QIFNjY19Qcm9qTmFtZSAiIg0KLSMgUFJPUCBTY2NfTG9jYWxQYXRoICIiDQotDQotIUlGICAiJChDRkcpIiA9PSAiX3NzbCAtIFdpbjMyIFJlbGVhc2UiDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIENtZF9MaW5lICJOTUFLRSAvZiBfc3NsLm1hayINCi0jIFBST1AgQkFTRSBSZWJ1aWxkX09wdCAiL2EiDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0ZpbGUgIl9zc2wuZXhlIg0KLSMgUFJPUCBCQVNFIEJzY19OYW1lICJfc3NsLmJzYyINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtcmVsZWFzZVxfc3NsIg0KLSMgUFJPUCBDbWRfTGluZSAicHl0aG9uIGJ1aWxkX3NzbC5weSINCi0jIFBST1AgUmVidWlsZF9PcHQgIi1hIg0KLSMgUFJPUCBUYXJnZXRfRmlsZSAiX3NzbC5weWQiDQotIyBQUk9QIEJzY19OYW1lICIiDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi0NCi0hRUxTRUlGICAiJChDRkcpIiA9PSAiX3NzbCAtIFdpbjMyIERlYnVnIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIng4Ni10ZW1wLWRlYnVnXF9zc2wiDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtZGVidWdcX3NzbCINCi0jIFBST1AgQkFTRSBDbWRfTGluZSAiTk1BS0UgL2YgX3NzbC5tYWsiDQotIyBQUk9QIEJBU0UgUmVidWlsZF9PcHQgIi9hIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9GaWxlICJfc3NsX2QucHlkIg0KLSMgUFJPUCBCQVNFIEJzY19OYW1lICJfc3NsX2QuYnNjIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1kZWJ1Z1xfc3NsIg0KLSMgUFJPUCBDbWRfTGluZSAicHl0aG9uX2QgLXUgYnVpbGRfc3NsLnB5IC1kIg0KLSMgUFJPUCBSZWJ1aWxkX09wdCAiLWEiDQotIyBQUk9QIFRhcmdldF9GaWxlICJfc3NsX2QucHlkIg0KLSMgUFJPUCBCc2NfTmFtZSAiIg0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotDQotIUVORElGIA0KLQ0KLSMgQmVnaW4gVGFyZ2V0DQotDQotIyBOYW1lICJfc3NsIC0gV2luMzIgUmVsZWFzZSINCi0jIE5hbWUgIl9zc2wgLSBXaW4zMiBEZWJ1ZyINCi0NCi0hSUYgICIkKENGRykiID09ICJfc3NsIC0gV2luMzIgUmVsZWFzZSINCi0NCi0hRUxTRUlGICAiJChDRkcpIiA9PSAiX3NzbCAtIFdpbjMyIERlYnVnIg0KLQ0KLSFFTkRJRiANCi0NCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX3NzbC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEVuZCBUYXJnZXQNCi0jIEVuZCBQcm9qZWN0DQpkaWZmIC0tZ2l0IGEvUEMvVkM2L19zc2wubWFrIGIvUEMvVkM2L19zc2wubWFrCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NzdhNjE0Li4wMDAwMDAwCi0tLSBhL1BDL1ZDNi9fc3NsLm1haworKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLQotIUlGREVGIERFQlVHCi1NT0RVTEU9X3NzbF9kLnB5ZAotVEVNUF9ESVI9eDg2LXRlbXAtZGVidWcvX3NzbAotQ0ZMQUdTPS9PZCAvWmkgL01EZCAvTERkIC9EREVCVUcgL0RfREVCVUcgL0RXSU4zMgotTEZMQUdTPS9ub2RlZmF1bHRsaWI6Im1zdmNydCIKLSFFTFNFCi1NT0RVTEU9X3NzbC5weWQKLVRFTVBfRElSPXg4Ni10ZW1wLXJlbGVhc2UvX3NzbAotQ0ZMQUdTPS9PeCAvTUQgL0xEIC9EV0lOMzIKLUxGTEFHUz0KLSFFTkRJRgotCi1JTkNMVURFUz0tSSAuLi8uLi9JbmNsdWRlIC1JIC4uIC1JICQoU1NMX0RJUikvaW5jMzIKLVNTTF9MSUJfRElSPSQoU1NMX0RJUikvb3V0MzIKLUxJQlM9Z2RpMzIubGliIHdzb2NrMzIubGliIHVzZXIzMi5saWIgYWR2YXBpMzIubGliIC9saWJwYXRoOiQoU1NMX0xJQl9ESVIpIGxpYmVheTMyLmxpYiBzc2xlYXkzMi5saWIKLQotU09VUkNFPS4uLy4uL01vZHVsZXMvX3NzbC5jICQoU1NMX0xJQl9ESVIpL2xpYmVheTMyLmxpYiAkKFNTTF9MSUJfRElSKS9zc2xlYXkzMi5saWIKLQotJChNT0RVTEUpOiAkKFNPVVJDRSkgLi4vKi5oIC4uLy4uL0luY2x1ZGUvKi5oCi0gICAgQGlmIG5vdCBleGlzdCAiJChURU1QX0RJUikvLiIgbWtkaXIgIiQoVEVNUF9ESVIpIgotICAgIGNsIC9ub2xvZ28gJChTT1VSQ0UpICQoQ0ZMQUdTKSAvRm8kKFRFTVBfRElSKVwkKi5vYmogJChJTkNMVURFUykgL2xpbmsgL291dDokKE1PRFVMRSkgJChMSUJTKSAkKExGTEFHUykKZGlmZiAtLWdpdCBhL1BDL1ZDNi9fdGVzdGNhcGkuZHNwIGIvUEMvVkM2L190ZXN0Y2FwaS5kc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlYWEyNWEuLjAwMDAwMDAKLS0tIGEvUEMvVkM2L190ZXN0Y2FwaS5kc3AKKysrIC9kZXYvbnVsbApAQCAtMSw5OSArMCwwIEBACi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9Il90ZXN0Y2FwaSIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDANCi0jICoqIERPIE5PVCBFRElUICoqDQotDQotIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiIDB4MDEwMg0KLQ0KLUNGRz1fdGVzdGNhcGkgLSBXaW4zMiBEZWJ1Zw0KLSFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwNCi0hTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAiX3Rlc3RjYXBpLm1hayIuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UNCi0hTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJfdGVzdGNhcGkubWFrIiBDRkc9Il90ZXN0Y2FwaSAtIFdpbjMyIERlYnVnIg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFICJfdGVzdGNhcGkgLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSAiX3Rlc3RjYXBpIC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFIA0KLQ0KLSMgQmVnaW4gUHJvamVjdA0KLSMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwDQotIyBQUk9QIFNjY19Qcm9qTmFtZSAiX3Rlc3RjYXBpIg0KLSMgUFJPUCBTY2NfTG9jYWxQYXRoICIuLiINCi1DUFA9Y2wuZXhlDQotTVRMPW1pZGwuZXhlDQotUlNDPXJjLmV4ZQ0KLQ0KLSFJRiAgIiQoQ0ZHKSIgPT0gIl90ZXN0Y2FwaSAtIFdpbjMyIFJlbGVhc2UiDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1yZWxlYXNlXF90ZXN0Y2FwaSINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UIC9XMyAvR1ggL08yIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9EICJfTUJDUyIgL0QgIl9VU1JETEwiIC9EICJNTUFQX0VYUE9SVFMiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTUQgL1czIC9HWCAvTzIgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL0QgIl9NQkNTIiAvRCAiX1VTUkRMTCIgL0QgIk1NQVBfRVhQT1JUUyIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweGMwOSAvZCAiTkRFQlVHIg0KLSMgQUREIFJTQyAvbCAweGMwOSAvZCAiTkRFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL2RsbCAvbWFjaGluZTpJMzg2DQotIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWUxRjAwMDAiIC9kbGwgL21hY2hpbmU6STM4NiAvb3V0OiIuL190ZXN0Y2FwaS5weWQiDQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gIl90ZXN0Y2FwaSAtIFdpbjMyIERlYnVnIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1kZWJ1Z1xfdGVzdGNhcGkiDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVGQgL1czIC9HbSAvR1ggL1pJIC9PZCAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvRCAiX01CQ1MiIC9EICJfVVNSRExMIiAvRCAiTU1BUF9FWFBPUlRTIiAvWVggL0ZEIC9HWiAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvRCAiX01CQ1MiIC9EICJfVVNSRExMIiAvRCAiTU1BUF9FWFBPUlRTIiAvWVggL0ZEIC9HWiAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweGMwOSAvZCAiX0RFQlVHIg0KLSMgQUREIFJTQyAvbCAweGMwOSAvZCAiX0RFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0DQotIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWUxRjAwMDAiIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9fdGVzdGNhcGlfZC5weWQiIC9wZGJ0eXBlOnNlcHQNCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRU5ESUYgDQotDQotIyBCZWdpbiBUYXJnZXQNCi0NCi0jIE5hbWUgIl90ZXN0Y2FwaSAtIFdpbjMyIFJlbGVhc2UiDQotIyBOYW1lICJfdGVzdGNhcGkgLSBXaW4zMiBEZWJ1ZyINCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX3Rlc3RjYXBpbW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgRW5kIFRhcmdldA0KLSMgRW5kIFByb2plY3QNCmRpZmYgLS1naXQgYS9QQy9WQzYvX3RraW50ZXIuZHNwIGIvUEMvVkM2L190a2ludGVyLmRzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWQ2OWY1OS4uMDAwMDAwMAotLS0gYS9QQy9WQzYvX3RraW50ZXIuZHNwCisrKyAvZGV2L251bGwKQEAgLTEsMTAzICswLDAgQEAKLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0iX3RraW50ZXIiIC0gUGFja2FnZSBPd25lcj08ND4NCi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQotIyAqKiBETyBOT1QgRURJVCAqKg0KLQ0KLSMgVEFSR1RZUEUgIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IiAweDAxMDINCi0NCi1DRkc9X3RraW50ZXIgLSBXaW4zMiBSZWxlYXNlDQotIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLA0KLSFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJfdGtpbnRlci5tYWsiLg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFDQotIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAiX3RraW50ZXIubWFrIiBDRkc9Il90a2ludGVyIC0gV2luMzIgUmVsZWFzZSINCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSAiX3RraW50ZXIgLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSAiX3RraW50ZXIgLSBXaW4zMiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQotIU1FU1NBR0UgDQotDQotIyBCZWdpbiBQcm9qZWN0DQotIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDANCi0jIFBST1AgU2NjX1Byb2pOYW1lICJfdGtpbnRlciINCi0jIFBST1AgU2NjX0xvY2FsUGF0aCAiLi5cLi5cLi4iDQotQ1BQPWNsLmV4ZQ0KLU1UTD1taWRsLmV4ZQ0KLVJTQz1yYy5leGUNCi0NCi0hSUYgICIkKENGRykiID09ICJfdGtpbnRlciAtIFdpbjMyIERlYnVnIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1kZWJ1Z1xfdGtpbnRlciINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4uXC4uXC4uXHRjbHRrXGluY2x1ZGUiIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIl9ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9EICJXSVRIX0FQUElOSVQiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCi0jIEFERCBMSU5LMzIgLi5cLi5cLi5cdGNsdGtcbGliXHRrODVnLmxpYiAuLlwuLlwuLlx0Y2x0a1xsaWJcdGNsODVnLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiB1c2VyMzIubGliIGtlcm5lbDMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFlMTkwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL190a2ludGVyX2QucHlkIiAvcGRidHlwZTpzZXB0DQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gIl90a2ludGVyIC0gV2luMzIgUmVsZWFzZSINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLXJlbGVhc2VcX3RraW50ZXIiDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVCAvVzMgL0dYIC9PMiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL1ppIC9PMiAvSSAiLi5cLi5cLi5cdGNsdGtcaW5jbHVkZSIgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiTkRFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL0QgIldJVEhfQVBQSU5JVCIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL21hY2hpbmU6STM4Ng0KLSMgQUREIExJTkszMiAuLlwuLlwuLlx0Y2x0a1xsaWJcdGs4NS5saWIgLi5cLi5cLi5cdGNsdGtcbGliXHRjbDg1LmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiB1c2VyMzIubGliIGtlcm5lbDMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFlMTkwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL190a2ludGVyLnB5ZCINCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRU5ESUYgDQotDQotIyBCZWdpbiBUYXJnZXQNCi0NCi0jIE5hbWUgIl90a2ludGVyIC0gV2luMzIgUmVsZWFzZSINCi0jIE5hbWUgIl90a2ludGVyIC0gV2luMzIgRGVidWciDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF90a2ludGVyLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1x0a2FwcGluaXQuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBFbmQgVGFyZ2V0DQotIyBFbmQgUHJvamVjdA0KZGlmZiAtLWdpdCBhL1BDL1ZDNi9idWlsZF9zc2wucHkgYi9QQy9WQzYvYnVpbGRfc3NsLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NWFmMDg0Li4wMDAwMDAwCi0tLSBhL1BDL1ZDNi9idWlsZF9zc2wucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyMjggKzAsMCBAQAotIyBTY3JpcHQgZm9yIGJ1aWxkaW5nIHRoZSBfc3NsIG1vZHVsZSBmb3IgV2luZG93cy4KLSMgVXNlcyBQZXJsIHRvIHNldHVwIHRoZSBPcGVuU1NMIGVudmlyb25tZW50IGNvcnJlY3RseQotIyBhbmQgYnVpbGQgT3BlblNTTCwgdGhlbiBpbnZva2VzIGEgc2ltcGxlIG5tYWtlIHNlc3Npb24KLSMgZm9yIF9zc2wucHlkIGl0c2VsZi4KLQotIyBUSEVPUkVUSUNBTExZLCB5b3UgY2FuOgotIyAqIFVucGFjayB0aGUgbGF0ZXN0IFNTTCByZWxlYXNlIG9uZSBsZXZlbCBhYm92ZSB5b3VyIG1haW4gUHl0aG9uIHNvdXJjZQotIyAgIGRpcmVjdG9yeS4gIEl0IGlzIGxpa2VseSB5b3Ugd2lsbCBhbHJlYWR5IGZpbmQgdGhlIHpsaWIgbGlicmFyeSBhbmQKLSMgICBhbnkgb3RoZXIgZXh0ZXJuYWwgcGFja2FnZXMgdGhlcmUuCi0jICogSW5zdGFsbCBBY3RpdmVQZXJsIGFuZCBlbnN1cmUgaXQgaXMgc29tZXdoZXJlIG9uIHlvdXIgcGF0aC4KLSMgKiBSdW4gdGhpcyBzY3JpcHQgZnJvbSB0aGUgUEMvVkM2IGRpcmVjdG9yeS4KLSMKLSMgaXQgc2hvdWxkIGNvbmZpZ3VyZSBhbmQgYnVpbGQgU1NMLCB0aGVuIGJ1aWxkIHRoZSBzc2wgUHl0aG9uIGV4dGVuc2lvbgotIyB3aXRob3V0IGludGVydmVudGlvbi4KLQotIyBNb2RpZmllZCBieSBDaHJpc3RpYW4gSGVpbWVzCi0jIE5vdyB0aGlzIHNjcmlwdCBzdXBwb3J0cyBwcmUtZ2VuZXJhdGVkIG1ha2VmaWxlcyBhbmQgYXNzZW1ibHkgZmlsZXMuCi0jIERldmVsb3BlcnMgZG9uJ3QgbmVlZCBhbiBpbnN0YWxsYXRpb24gb2YgUGVybCBhbnltb3JlIHRvIGJ1aWxkIFB5dGhvbi4gQSBzdm4KLSMgY2hlY2tvdXQgZnJvbSBvdXIgc3ZuIHJlcG9zaXRvcnkgaXMgZW5vdWdoLgotCi1pbXBvcnQgb3MsIHN5cywgcmUsIHNodXRpbAotCi0jIEZpbmQgYWxsICJmb28uZXhlIiBmaWxlcyBvbiB0aGUgUEFUSC4KLWRlZiBmaW5kX2FsbF9vbl9wYXRoKGZpbGVuYW1lLCBleHRyYXMgPSBOb25lKToKLSAgICBlbnRyaWVzID0gb3MuZW52aXJvblsiUEFUSCJdLnNwbGl0KG9zLnBhdGhzZXApCi0gICAgcmV0ID0gW10KLSAgICBmb3IgcCBpbiBlbnRyaWVzOgotICAgICAgICBmbmFtZSA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmpvaW4ocCwgZmlsZW5hbWUpKQotICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShmbmFtZSkgYW5kIGZuYW1lIG5vdCBpbiByZXQ6Ci0gICAgICAgICAgICByZXQuYXBwZW5kKGZuYW1lKQotICAgIGlmIGV4dHJhczoKLSAgICAgICAgZm9yIHAgaW4gZXh0cmFzOgotICAgICAgICAgICAgZm5hbWUgPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKHAsIGZpbGVuYW1lKSkKLSAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGZuYW1lKSBhbmQgZm5hbWUgbm90IGluIHJldDoKLSAgICAgICAgICAgICAgICByZXQuYXBwZW5kKGZuYW1lKQotICAgIHJldHVybiByZXQKLQotIyBGaW5kIGEgc3VpdGFibGUgUGVybCBpbnN0YWxsYXRpb24gZm9yIE9wZW5TU0wuCi0jIGN5Z3dpbiBwZXJsIGRvZXMgKm5vdCogd29yay4gIEFjdGl2ZVBlcmwgZG9lcy4KLSMgQmVpbmcgYSBQZXJsIGR1bW15LCB0aGUgc2ltcGxlc3Qgd2F5IEkgY2FuIGNoZWNrIGlzIGlmIHRoZSAiV2luMzIiIHBhY2thZ2UKLSMgaXMgYXZhaWxhYmxlLgotZGVmIGZpbmRfd29ya2luZ19wZXJsKHBlcmxzKToKLSAgICBmb3IgcGVybCBpbiBwZXJsczoKLSAgICAgICAgZmggPSBvcy5wb3BlbignIiVzIiAtZSAidXNlIFdpbjMyOyInICUgcGVybCkKLSAgICAgICAgZmgucmVhZCgpCi0gICAgICAgIHJjID0gZmguY2xvc2UoKQotICAgICAgICBpZiByYzoKLSAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgIHJldHVybiBwZXJsCi0gICAgcHJpbnQoIkNhbiBub3QgZmluZCBhIHN1aXRhYmxlIFBFUkw6IikKLSAgICBpZiBwZXJsczoKLSAgICAgICAgcHJpbnQoIiB0aGUgZm9sbG93aW5nIHBlcmwgaW50ZXJwcmV0ZXJzIHdlcmUgZm91bmQ6IikKLSAgICAgICAgZm9yIHAgaW4gcGVybHM6Ci0gICAgICAgICAgICBwcmludCgiICIsIHApCi0gICAgICAgIHByaW50KCIgTm9uZSBvZiB0aGVzZSB2ZXJzaW9ucyBhcHBlYXIgc3VpdGFibGUgZm9yIGJ1aWxkaW5nIE9wZW5TU0wiKQotICAgIGVsc2U6Ci0gICAgICAgIHByaW50KCIgTk8gcGVybCBpbnRlcnByZXRlcnMgd2VyZSBmb3VuZCBvbiB0aGlzIG1hY2hpbmUgYXQgYWxsISIpCi0gICAgcHJpbnQoIiBQbGVhc2UgaW5zdGFsbCBBY3RpdmVQZXJsIGFuZCBlbnN1cmUgaXQgYXBwZWFycyBvbiB5b3VyIHBhdGgiKQotICAgIHJldHVybiBOb25lCi0KLSMgTG9jYXRlIHRoZSBiZXN0IFNTTCBkaXJlY3RvcnkgZ2l2ZW4gYSBmZXcgcm9vdHMgdG8gbG9vayBpbnRvLgotZGVmIGZpbmRfYmVzdF9zc2xfZGlyKHNvdXJjZXMpOgotICAgIGNhbmRpZGF0ZXMgPSBbXQotICAgIGZvciBzIGluIHNvdXJjZXM6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgICMgbm90ZTogZG8gbm90IGFic3BhdGggczsgdGhlIGJ1aWxkIHdpbGwgZmFpbCBpZiBhbnkKLSAgICAgICAgICAgICMgaGlnaGVyIHVwIGRpcmVjdG9yeSBuYW1lIGhhcyBzcGFjZXMgaW4gaXQuCi0gICAgICAgICAgICBmbmFtZXMgPSBvcy5saXN0ZGlyKHMpCi0gICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKLSAgICAgICAgICAgIGZuYW1lcyA9IFtdCi0gICAgICAgIGZvciBmbmFtZSBpbiBmbmFtZXM6Ci0gICAgICAgICAgICBmcW4gPSBvcy5wYXRoLmpvaW4ocywgZm5hbWUpCi0gICAgICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKGZxbikgYW5kIGZuYW1lLnN0YXJ0c3dpdGgoIm9wZW5zc2wtIik6Ci0gICAgICAgICAgICAgICAgY2FuZGlkYXRlcy5hcHBlbmQoZnFuKQotICAgICMgTm93IHdlIGhhdmUgYWxsIHRoZSBjYW5kaWRhdGVzLCBsb2NhdGUgdGhlIGJlc3QuCi0gICAgYmVzdF9wYXJ0cyA9IFtdCi0gICAgYmVzdF9uYW1lID0gTm9uZQotICAgIGZvciBjIGluIGNhbmRpZGF0ZXM6Ci0gICAgICAgIHBhcnRzID0gcmUuc3BsaXQoIlsuLV0iLCBvcy5wYXRoLmJhc2VuYW1lKGMpKVsxOl0KLSAgICAgICAgIyBlZyAtIG9wZW5zc2wtMC45LjctYmV0YTEgLSBpZ25vcmUgYWxsICJiZXRhIiBvciBhbnkgb3RoZXIgcXVhbGlmaWVycwotICAgICAgICBpZiBsZW4ocGFydHMpID49IDQ6Ci0gICAgICAgICAgICBjb250aW51ZQotICAgICAgICBpZiBwYXJ0cyA+IGJlc3RfcGFydHM6Ci0gICAgICAgICAgICBiZXN0X3BhcnRzID0gcGFydHMKLSAgICAgICAgICAgIGJlc3RfbmFtZSA9IGMKLSAgICBpZiBiZXN0X25hbWUgaXMgbm90IE5vbmU6Ci0gICAgICAgIHByaW50KCJGb3VuZCBhbiBTU0wgZGlyZWN0b3J5IGF0ICclcyciICUgKGJlc3RfbmFtZSwpKQotICAgIGVsc2U6Ci0gICAgICAgIHByaW50KCJDb3VsZCBub3QgZmluZCBhbiBTU0wgZGlyZWN0b3J5IGluICclcyciICUgKHNvdXJjZXMsKSkKLSAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKLSAgICByZXR1cm4gYmVzdF9uYW1lCi0KLWRlZiBmaXhfbWFrZWZpbGUobWFrZWZpbGUpOgotICAgICIiIkZpeCBzb21lIHN0dWZmIGluIGFsbCBtYWtlZmlsZXMKLSAgICAiIiIKLSAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUobWFrZWZpbGUpOgotICAgICAgICByZXR1cm4KLSAgICB3aXRoIG9wZW4obWFrZWZpbGUpIGFzIGZpbjoKLSAgICAgICAgbGluZXMgPSBmaW4ucmVhZGxpbmVzKCkKLSAgICB3aXRoIG9wZW4obWFrZWZpbGUsICd3JykgYXMgZm91dDoKLSAgICAgICAgZm9yIGxpbmUgaW4gbGluZXM6Ci0gICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoIlBFUkw9Iik6Ci0gICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgiQ1A9Iik6Ci0gICAgICAgICAgICAgICAgbGluZSA9ICJDUD1jb3B5XG4iCi0gICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoIk1LRElSPSIpOgotICAgICAgICAgICAgICAgIGxpbmUgPSAiTUtESVI9bWtkaXJcbiIKLSAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgiQ0ZMQUc9Iik6Ci0gICAgICAgICAgICAgICAgbGluZSA9IGxpbmUuc3RyaXAoKQotICAgICAgICAgICAgICAgIGZvciBhbGdvIGluICgiUkM1IiwgIk1EQzIiLCAiSURFQSIpOgotICAgICAgICAgICAgICAgICAgICBub2FsZ28gPSAiIC1ET1BFTlNTTF9OT18lcyIgJSBhbGdvCi0gICAgICAgICAgICAgICAgICAgIGlmIG5vYWxnbyBub3QgaW4gbGluZToKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lICsgbm9hbGdvCi0gICAgICAgICAgICAgICAgbGluZSA9IGxpbmUgKyAnXG4nCi0gICAgICAgICAgICBmb3V0LndyaXRlKGxpbmUpCi0KLWRlZiBydW5fY29uZmlndXJlKGNvbmZpZ3VyZSwgZG9fc2NyaXB0KToKLSAgICBwcmludCgicGVybCBDb25maWd1cmUgIitjb25maWd1cmUpCi0gICAgb3Muc3lzdGVtKCJwZXJsIENvbmZpZ3VyZSAiK2NvbmZpZ3VyZSkKLSAgICBwcmludChkb19zY3JpcHQpCi0gICAgb3Muc3lzdGVtKGRvX3NjcmlwdCkKLQotZGVmIGNtcChmMSwgZjIpOgotICAgIGJ1ZnNpemUgPSAxMDI0ICogOAotICAgIHdpdGggb3BlbihmMSwgJ3JiJykgYXMgZnAxLCBvcGVuKGYyLCAncmInKSBhcyBmcDI6Ci0gICAgICAgIHdoaWxlIFRydWU6Ci0gICAgICAgICAgICBiMSA9IGZwMS5yZWFkKGJ1ZnNpemUpCi0gICAgICAgICAgICBiMiA9IGZwMi5yZWFkKGJ1ZnNpemUpCi0gICAgICAgICAgICBpZiBiMSAhPSBiMjoKLSAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgICAgIGlmIG5vdCBiMToKLSAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQotCi1kZWYgY29weShzcmMsIGRzdCk6Ci0gICAgaWYgb3MucGF0aC5pc2ZpbGUoZHN0KSBhbmQgY21wKHNyYywgZHN0KToKLSAgICAgICAgcmV0dXJuCi0gICAgc2h1dGlsLmNvcHkoc3JjLCBkc3QpCi0KLWRlZiBtYWluKCk6Ci0gICAgZGVidWcgPSAiLWQiIGluIHN5cy5hcmd2Ci0gICAgYnVpbGRfYWxsID0gIi1hIiBpbiBzeXMuYXJndgotICAgIGlmIDE6ICMgV2luMzIKLSAgICAgICAgYXJjaCA9ICJ4ODYiCi0gICAgICAgIGNvbmZpZ3VyZSA9ICJWQy1XSU4zMiIKLSAgICAgICAgZG9fc2NyaXB0ID0gIm1zXFxkb19uYXNtIgotICAgICAgICBtYWtlZmlsZT0ibXNcXG50Lm1hayIKLSAgICAgICAgbTMyID0gbWFrZWZpbGUKLSAgICAgICAgZGlyc3VmZml4ID0gIjMyIgotICAgIGNvbmZpZ3VyZSArPSAiIG5vLWlkZWEgbm8tcmM1IG5vLW1kYzIiCi0gICAgbWFrZV9mbGFncyA9ICIiCi0gICAgaWYgYnVpbGRfYWxsOgotICAgICAgICBtYWtlX2ZsYWdzID0gIi1hIgotICAgICMgcGVybCBzaG91bGQgYmUgb24gdGhlIHBhdGgsIGJ1dCB3ZSBhbHNvIGxvb2sgaW4gIlxwZXJsIiBhbmQgImM6XFxwZXJsIgotICAgICMgYXMgIndlbGwga25vd24iIGxvY2F0aW9ucwotICAgIHBlcmxzID0gZmluZF9hbGxfb25fcGF0aCgicGVybC5leGUiLCBbIlxccGVybFxcYmluIiwgIkM6XFxwZXJsXFxiaW4iXSkKLSAgICBwZXJsID0gZmluZF93b3JraW5nX3BlcmwocGVybHMpCi0gICAgaWYgcGVybDoKLSAgICAgICAgcHJpbnQoIkZvdW5kIGEgd29ya2luZyBwZXJsIGF0ICclcyciICUgKHBlcmwsKSkKLSAgICBlbHNlOgotICAgICAgICBwcmludCgiTm8gUGVybCBpbnN0YWxsYXRpb24gd2FzIGZvdW5kLiBFeGlzdGluZyBNYWtlZmlsZXMgYXJlIHVzZWQuIikKLSAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKLSAgICAjIExvb2sgZm9yIFNTTCAzIGxldmVscyB1cCBmcm9tIFBDL1ZDNiAtIGllLCBzYW1lIHBsYWNlIHpsaWIgZXRjIGFsbCBsaXZlLgotICAgIHNzbF9kaXIgPSBmaW5kX2Jlc3Rfc3NsX2RpcigoIi4uXFwuLlxcLi4iLCkpCi0gICAgaWYgc3NsX2RpciBpcyBOb25lOgotICAgICAgICBzeXMuZXhpdCgxKQotCi0gICAgb2xkX2NkID0gb3MuZ2V0Y3dkKCkKLSAgICB0cnk6Ci0gICAgICAgIG9zLmNoZGlyKHNzbF9kaXIpCi0gICAgICAgICMgSWYgdGhlIHNzbCBtYWtlZmlsZXMgZG8gbm90IGV4aXN0LCB3ZSBpbnZva2UgUGVybCB0byBnZW5lcmF0ZSB0aGVtLgotICAgICAgICAjIER1ZSB0byBhIGJ1ZyBpbiB0aGlzIHNjcmlwdCwgdGhlIG1ha2VmaWxlIHNvbWV0aW1lcyBlbmRlZCB1cCBlbXB0eQotICAgICAgICAjIEZvcmNlIGEgcmVnZW5lcmF0aW9uIGlmIGl0IGlzLgotICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUobWFrZWZpbGUpIG9yIG9zLnBhdGguZ2V0c2l6ZShtYWtlZmlsZSk9PTA6Ci0gICAgICAgICAgICBpZiBwZXJsIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgcHJpbnQoIlBlcmwgaXMgcmVxdWlyZWQgdG8gYnVpbGQgdGhlIG1ha2VmaWxlcyEiKQotICAgICAgICAgICAgICAgIHN5cy5leGl0KDEpCi0KLSAgICAgICAgICAgIHByaW50KCJDcmVhdGluZyB0aGUgbWFrZWZpbGVzLi4uIikKLSAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQotICAgICAgICAgICAgIyBQdXQgb3VyIHdvcmtpbmcgUGVybCBhdCB0aGUgZnJvbnQgb2Ygb3VyIHBhdGgKLSAgICAgICAgICAgIG9zLmVudmlyb25bIlBBVEgiXSA9IG9zLnBhdGguZGlybmFtZShwZXJsKSArIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGhzZXAgKyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5lbnZpcm9uWyJQQVRIIl0KLSAgICAgICAgICAgIHJ1bl9jb25maWd1cmUoY29uZmlndXJlLCBkb19zY3JpcHQpCi0gICAgICAgICAgICBpZiBkZWJ1ZzoKLSAgICAgICAgICAgICAgICBwcmludCgiT3BlblNTTCBkZWJ1ZyBidWlsZHMgYXJlbid0IHN1cHBvcnRlZC4iKQotICAgICAgICAgICAgI2lmIGFyY2g9PSJ4ODYiIGFuZCBkZWJ1ZzoKLSAgICAgICAgICAgICMgICAgIyB0aGUgZG9fbWFzbSBzY3JpcHQgaW4gb3BlbnNzbCBkb2Vzbid0IGdlbmVyYXRlIGEgZGVidWcKLSAgICAgICAgICAgICMgICAgIyBidWlsZCBtYWtlZmlsZSBzbyB3ZSBnZW5lcmF0ZSBpdCBoZXJlOgotICAgICAgICAgICAgIyAgICBvcy5zeXN0ZW0oInBlcmwgdXRpbFxtazFtZi5wbCBkZWJ1ZyAiK2NvbmZpZ3VyZSsiID4iK21ha2VmaWxlKQotCi0gICAgICAgICAgICBmaXhfbWFrZWZpbGUobWFrZWZpbGUpCi0gICAgICAgICAgICBjb3B5KHIiY3J5cHRvXGJ1aWxkaW5mLmgiLCByImNyeXB0b1xidWlsZGluZl8lcy5oIiAlIGFyY2gpCi0gICAgICAgICAgICBjb3B5KHIiY3J5cHRvXG9wZW5zc2xjb25mLmgiLCByImNyeXB0b1xvcGVuc3NsY29uZl8lcy5oIiAlIGFyY2gpCi0KLSAgICAgICAgIyBJZiB0aGUgYXNzZW1ibGVyIGZpbGVzIGRvbid0IGV4aXN0IGluIHRtcFhYLCBjb3B5IHRoZW0gdGhlcmUKLSAgICAgICAgaWYgcGVybCBpcyBOb25lIGFuZCBvcy5wYXRoLmV4aXN0cygiYXNtIitkaXJzdWZmaXgpOgotICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKCJ0bXAiK2RpcnN1ZmZpeCk6Ci0gICAgICAgICAgICAgICAgb3MubWtkaXIoInRtcCIrZGlyc3VmZml4KQotICAgICAgICAgICAgZm9yIGYgaW4gb3MubGlzdGRpcigiYXNtIitkaXJzdWZmaXgpOgotICAgICAgICAgICAgICAgIGlmIG5vdCBmLmVuZHN3aXRoKCIuYXNtIik6IGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUociJ0bXAlc1wlcyIgJSAoZGlyc3VmZml4LCBmKSk6IGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgc2h1dGlsLmNvcHkociJhc20lc1wlcyIgJSAoZGlyc3VmZml4LCBmKSwgInRtcCIrZGlyc3VmZml4KQotCi0gICAgICAgICMgTm93IHJ1biBtYWtlLgotICAgICAgICBjb3B5KHIiY3J5cHRvXGJ1aWxkaW5mXyVzLmgiICUgYXJjaCwgciJjcnlwdG9cYnVpbGRpbmYuaCIpCi0gICAgICAgIGNvcHkociJjcnlwdG9cb3BlbnNzbGNvbmZfJXMuaCIgJSBhcmNoLCByImNyeXB0b1xvcGVuc3NsY29uZi5oIikKLQotICAgICAgICAjbWFrZUNvbW1hbmQgPSAibm1ha2UgL25vbG9nbyBQRVJMPVwiJXNcIiAtZiBcIiVzXCIiICUocGVybCwgbWFrZWZpbGUpCi0gICAgICAgIG1ha2VDb21tYW5kID0gIm5tYWtlIC9ub2xvZ28gLWYgXCIlc1wiIiAlIG1ha2VmaWxlCi0gICAgICAgIHByaW50KCJFeGVjdXRpbmcgc3NsIG1ha2VmaWxlczoiLCBtYWtlQ29tbWFuZCkKLSAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCi0gICAgICAgIHJjID0gb3Muc3lzdGVtKG1ha2VDb21tYW5kKQotICAgICAgICBpZiByYzoKLSAgICAgICAgICAgIHByaW50KCJFeGVjdXRpbmcgIittYWtlZmlsZSsiIGZhaWxlZCIpCi0gICAgICAgICAgICBwcmludChyYykKLSAgICAgICAgICAgIHN5cy5leGl0KHJjKQotICAgIGZpbmFsbHk6Ci0gICAgICAgIG9zLmNoZGlyKG9sZF9jZCkKLSAgICAjIEFuZCBmaW5hbGx5LCB3ZSBjYW4gYnVpbGQgdGhlIF9zc2wgbW9kdWxlIGl0c2VsZiBmb3IgUHl0aG9uLgotICAgIGRlZnMgPSAiU1NMX0RJUj0lcyIgJSAoc3NsX2RpciwpCi0gICAgaWYgZGVidWc6Ci0gICAgICAgIGRlZnMgPSBkZWZzICsgIiAiICsgIkRFQlVHPTEiCi0gICAgcmMgPSBvcy5zeXN0ZW0oJ25tYWtlIC9ub2xvZ28gLWYgX3NzbC5tYWsgJyArIGRlZnMgKyAiICIgKyBtYWtlX2ZsYWdzKQotICAgIHN5cy5leGl0KHJjKQotCi1pZiBfX25hbWVfXz09J19fbWFpbl9fJzoKLSAgICBtYWluKCkKZGlmZiAtLWdpdCBhL1BDL1ZDNi9idWlsZF90a2ludGVyLnB5IGIvUEMvVkM2L2J1aWxkX3RraW50ZXIucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1Y2E5MmMuLjAwMDAwMDAKLS0tIGEvUEMvVkM2L2J1aWxkX3RraW50ZXIucHkKKysrIC9kZXYvbnVsbApAQCAtMSw4MSArMCwwIEBACi1pbXBvcnQgb3MKLWltcG9ydCBzeXMKLWltcG9ydCBzdWJwcm9jZXNzCi0KLVRDTF9NQUpPUiA9IDgKLVRDTF9NSU5PUiA9IDUKLVRDTF9QQVRDSCA9IDIKLQotVElYX01BSk9SID0gOAotVElYX01JTk9SID0gNAotVElYX1BBVENIID0gMwotCi1kZWYgYWJzcGF0aChuYW1lKToKLSAgICBwYXIgPSBvcy5wYXRoLnBhcmRpcgotICAgIHJldHVybiBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKF9fZmlsZV9fLCBwYXIsIHBhciwgcGFyLCBwYXIsIG5hbWUpKQotCi1UQ0xfRElSID0gYWJzcGF0aCgidGNsJWQuJWQuJWQiICUgKFRDTF9NQUpPUiwgVENMX01JTk9SLCBUQ0xfUEFUQ0gpKQotVEtfRElSICA9IGFic3BhdGgoInRrJWQuJWQuJWQiICAlIChUQ0xfTUFKT1IsIFRDTF9NSU5PUiwgVENMX1BBVENIKSkKLVRJWF9ESVIgPSBhYnNwYXRoKCJ0aXglZC4lZC4lZCIgJSAoVElYX01BSk9SLCBUSVhfTUlOT1IsIFRJWF9QQVRDSCkpCi1PVVRfRElSID0gYWJzcGF0aCgidGNsdGsiKQotCi1kZWYgaGF2ZV9hcmdzKCphKToKLSAgICByZXR1cm4gYW55KHMgaW4gc3lzLmFyZ3ZbMTpdIGZvciBzIGluIGEpCi0KLWRlZiBlbnRlcihkaXIpOgotICAgIG9zLmNoZGlyKG9zLnBhdGguam9pbihkaXIsICJ3aW4iKSkKLQotZGVmIG1haW4oKToKLSAgICBkZWJ1ZyA9IGhhdmVfYXJncygiLWQiLCAiLS1kZWJ1ZyIpCi0gICAgY2xlYW4gPSBoYXZlX2FyZ3MoImNsZWFuIikKLSAgICBpbnN0YWxsID0gaGF2ZV9hcmdzKCJpbnN0YWxsIikKLSAgICB0Y2wgPSBoYXZlX2FyZ3MoInRjbCIpCi0gICAgdGsgPSBoYXZlX2FyZ3MoInRrIikKLSAgICB0aXggPSBoYXZlX2FyZ3MoInRpeCIpCi0gICAgaWYgbm90KHRjbCkgYW5kIG5vdCh0aykgYW5kIG5vdCh0aXgpOgotICAgICAgICB0Y2wgPSB0ayA9IHRpeCA9IFRydWUKLQotICAgIGRlZiBubWFrZShtYWtlZmlsZSwgKmEpOgotICAgICAgICBhcmdzID0gWyJubWFrZSIsICIvbm9sb2dvIiwgIi9mIiwgbWFrZWZpbGUsICJERUJVRz0lZCIgJSBkZWJ1Z10KLSAgICAgICAgYXJncy5leHRlbmQoYSkKLSAgICAgICAgc3VicHJvY2Vzcy5jaGVja19jYWxsKGFyZ3MpCi0KLSAgICBpZiB0Y2w6Ci0gICAgICAgIGVudGVyKFRDTF9ESVIpCi0gICAgICAgIGRlZiBubWFrZV90Y2woKmEpOgotICAgICAgICAgICAgbm1ha2UoIm1ha2VmaWxlLnZjIiwgKmEpCi0gICAgICAgIGlmIGNsZWFuOgotICAgICAgICAgICAgbm1ha2VfdGNsKCJjbGVhbiIpCi0gICAgICAgIGVsaWYgaW5zdGFsbDoKLSAgICAgICAgICAgIG5tYWtlX3RjbCgiaW5zdGFsbCIsICJJTlNUQUxMRElSPSIgKyBPVVRfRElSKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgbm1ha2VfdGNsKCkKLQotICAgIGlmIHRrOgotICAgICAgICBlbnRlcihUS19ESVIpCi0gICAgICAgIGRlZiBubWFrZV90aygqYSk6Ci0gICAgICAgICAgICBubWFrZSgibWFrZWZpbGUudmMiLCAiVENMRElSPSIgKyBUQ0xfRElSLCAqYSkKLSAgICAgICAgaWYgY2xlYW46Ci0gICAgICAgICAgICBubWFrZV90aygiY2xlYW4iKQotICAgICAgICBlbGlmIGluc3RhbGw6Ci0gICAgICAgICAgICBubWFrZV90aygiaW5zdGFsbCIsICJJTlNUQUxMRElSPSIgKyBPVVRfRElSKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgbm1ha2VfdGsoKQotCi0gICAgaWYgdGl4OgotICAgICAgICBlbnRlcihUSVhfRElSKQotICAgICAgICBkZWYgbm1ha2VfdGl4KCphKToKLSAgICAgICAgICAgIG5tYWtlKCJweXRob24ubWFrIiwKLSAgICAgICAgICAgICAgICAgICJUQ0xfTUFKT1I9JWQiICUgVENMX01BSk9SLAotICAgICAgICAgICAgICAgICAgIlRDTF9NSU5PUj0lZCIgJSBUQ0xfTUlOT1IsCi0gICAgICAgICAgICAgICAgICAiVENMX1BBVENIPSVkIiAlIFRDTF9QQVRDSCwKLSAgICAgICAgICAgICAgICAgICJNQUNISU5FPUlYODYiLCAqYSkKLSAgICAgICAgaWYgY2xlYW46Ci0gICAgICAgICAgICBubWFrZV90aXgoImNsZWFuIikKLSAgICAgICAgZWxpZiBpbnN0YWxsOgotICAgICAgICAgICAgbm1ha2VfdGl4KCJpbnN0YWxsIiwgIklOU1RBTExfRElSPSIgKyBPVVRfRElSKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgbm1ha2VfdGl4KCkKLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICBtYWluKCkKZGlmZiAtLWdpdCBhL1BDL1ZDNi9iejIuZHNwIGIvUEMvVkM2L2J6Mi5kc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM1MmNiYWQuLjAwMDAwMDAKLS0tIGEvUEMvVkM2L2J6Mi5kc3AKKysrIC9kZXYvbnVsbApAQCAtMSw5OSArMCwwIEBACi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9ImJ6MiIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDANCi0jICoqIERPIE5PVCBFRElUICoqDQotDQotIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiIDB4MDEwMg0KLQ0KLUNGRz1iejIgLSBXaW4zMiBEZWJ1Zw0KLSFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwNCi0hTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAiYnoyLm1hayIuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UNCi0hTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJiejIubWFrIiBDRkc9ImJ6MiAtIFdpbjMyIERlYnVnIg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFICJiejIgLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSAiYnoyIC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFIA0KLQ0KLSMgQmVnaW4gUHJvamVjdA0KLSMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwDQotIyBQUk9QIFNjY19Qcm9qTmFtZSAiYnoyIg0KLSMgUFJPUCBTY2NfTG9jYWxQYXRoICIuLiINCi1DUFA9Y2wuZXhlDQotTVRMPW1pZGwuZXhlDQotUlNDPXJjLmV4ZQ0KLQ0KLSFJRiAgIiQoQ0ZHKSIgPT0gImJ6MiAtIFdpbjMyIFJlbGVhc2UiDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1yZWxlYXNlXGJ6MiINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UIC9XMyAvR1ggL08yIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTUQgL1czIC9HWCAvWmkgL08yIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9JICIuLlwuLlwuLlxiemlwMi0xLjAuNiIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiTkRFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL21hY2hpbmU6STM4Ng0KLSMgQUREIExJTkszMiAuLlwuLlwuLlxiemlwMi0xLjAuNlxsaWJiejIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MUQxNzAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9ub2RlZmF1bHRsaWI6ImxpYmMiIC9vdXQ6Ii4vYnoyLnB5ZCINCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUgL25vZGVmYXVsdGxpYg0KLQ0KLSFFTFNFSUYgICIkKENGRykiID09ICJiejIgLSBXaW4zMiBEZWJ1ZyINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtZGVidWdcYnoyIg0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVRkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvSSAiLi5cLi5cLi5cYnppcDItMS4wLjYiIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIl9ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCi0jIEFERCBMSU5LMzIgLi5cLi5cLi5cYnppcDItMS4wLjZcbGliYnoyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFEMTcwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvbm9kZWZhdWx0bGliOiJtc3ZjcnQiIC9ub2RlZmF1bHRsaWI6ImxpYmMiIC9vdXQ6Ii4vYnoyX2QucHlkIiAvcGRidHlwZTpzZXB0DQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVORElGIA0KLQ0KLSMgQmVnaW4gVGFyZ2V0DQotDQotIyBOYW1lICJiejIgLSBXaW4zMiBSZWxlYXNlIg0KLSMgTmFtZSAiYnoyIC0gV2luMzIgRGVidWciDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXGJ6Mm1vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEVuZCBUYXJnZXQNCi0jIEVuZCBQcm9qZWN0DQpkaWZmIC0tZ2l0IGEvUEMvVkM2L21ha2VfdmVyc2lvbmluZm8uZHNwIGIvUEMvVkM2L21ha2VfdmVyc2lvbmluZm8uZHNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNzM1ZTEyLi4wMDAwMDAwCi0tLSBhL1BDL1ZDNi9tYWtlX3ZlcnNpb25pbmZvLmRzcAorKysgL2Rldi9udWxsCkBAIC0xLDEwOCArMCwwIEBACi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9Im1ha2VfdmVyc2lvbmluZm8iIC0gUGFja2FnZSBPd25lcj08ND4NCi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQotIyAqKiBETyBOT1QgRURJVCAqKg0KLQ0KLSMgVEFSR1RZUEUgIldpbjMyICh4ODYpIENvbnNvbGUgQXBwbGljYXRpb24iIDB4MDEwMw0KLQ0KLUNGRz1tYWtlX3ZlcnNpb25pbmZvIC0gV2luMzIgUmVsZWFzZQ0KLSFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwNCi0hTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAibWFrZV92ZXJzaW9uaW5mby5tYWsiLg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFDQotIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAibWFrZV92ZXJzaW9uaW5mby5tYWsiIENGRz0ibWFrZV92ZXJzaW9uaW5mbyAtIFdpbjMyIFJlbGVhc2UiDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgIm1ha2VfdmVyc2lvbmluZm8gLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIENvbnNvbGUgQXBwbGljYXRpb24iKQ0KLSFNRVNTQUdFICJtYWtlX3ZlcnNpb25pbmZvIC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgQ29uc29sZSBBcHBsaWNhdGlvbiIpDQotIU1FU1NBR0UgDQotDQotIyBCZWdpbiBQcm9qZWN0DQotIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDANCi0jIFBST1AgU2NjX1Byb2pOYW1lICJtYWtlX3ZlcnNpb25pbmZvIg0KLSMgUFJPUCBTY2NfTG9jYWxQYXRoICIuLiINCi1DUFA9Y2wuZXhlDQotUlNDPXJjLmV4ZQ0KLQ0KLSFJRiAgIiQoQ0ZHKSIgPT0gIm1ha2VfdmVyc2lvbmluZm8gLSBXaW4zMiBSZWxlYXNlIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtcmVsZWFzZVxtYWtlX3ZlcnNpb25pbmZvIg0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9XMyAvR1ggL08yIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX01CQ1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTUQgL1czIC9HWCAvWmkgL08yIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX01CQ1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9tYWNoaW5lOkkzODYNCi0jIEFERCBMSU5LMzIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgL25vbG9nbyAvYmFzZToiMHgxZDAwMDAwMCIgL3N1YnN5c3RlbTpjb25zb2xlIC9kZWJ1ZyAvbWFjaGluZTpJMzg2DQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotIyBCZWdpbiBDdXN0b20gQnVpbGQNCi1JbnB1dFBhdGg9LlxtYWtlX3ZlcnNpb25pbmZvLmV4ZQ0KLVNPVVJDRT0iJChJbnB1dFBhdGgpIg0KLQ0KLSIuLlxweXRob25udF9yYy5oIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIiAiJChPVVRESVIpIg0KLQkuXG1ha2VfdmVyc2lvbmluZm8uZXhlID4uLlxweXRob25udF9yYy5oDQotDQotIyBFbmQgQ3VzdG9tIEJ1aWxkDQotDQotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gIm1ha2VfdmVyc2lvbmluZm8gLSBXaW4zMiBEZWJ1ZyINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtZGVidWdcbWFrZV92ZXJzaW9uaW5mbyINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvVzMgL0dtIC9HWCAvWmkgL09kIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX01CQ1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfTUJDUyIgL0ZSIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvaSAiLi5cLi5cSW5jbHVkZSIgL2QgIl9ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0DQotIyBBREQgTElOSzMyIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWQwMDAwMDAiIC9zdWJzeXN0ZW06Y29uc29sZSAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL21ha2VfdmVyc2lvbmluZm9fZC5leGUiIC9wZGJ0eXBlOnNlcHQNCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0jIEJlZ2luIEN1c3RvbSBCdWlsZA0KLUlucHV0UGF0aD0uXG1ha2VfdmVyc2lvbmluZm9fZC5leGUNCi1TT1VSQ0U9IiQoSW5wdXRQYXRoKSINCi0NCi0iLi5ccHl0aG9ubnRfcmNfZC5oIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIiAiJChPVVRESVIpIg0KLQkuXG1ha2VfdmVyc2lvbmluZm9fZC5leGUgPi4uXHB5dGhvbm50X3JjX2QuaA0KLQ0KLSMgRW5kIEN1c3RvbSBCdWlsZA0KLQ0KLSFFTkRJRiANCi0NCi0jIEJlZ2luIFRhcmdldA0KLQ0KLSMgTmFtZSAibWFrZV92ZXJzaW9uaW5mbyAtIFdpbjMyIFJlbGVhc2UiDQotIyBOYW1lICJtYWtlX3ZlcnNpb25pbmZvIC0gV2luMzIgRGVidWciDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlxtYWtlX3ZlcnNpb25pbmZvLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgRW5kIFRhcmdldA0KLSMgRW5kIFByb2plY3QNCmRpZmYgLS1naXQgYS9QQy9WQzYvcGNidWlsZC5kc3cgYi9QQy9WQzYvcGNidWlsZC5kc3cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3YjJlYmMuLjAwMDAwMDAKLS0tIGEvUEMvVkM2L3BjYnVpbGQuZHN3CisrKyAvZGV2L251bGwKQEAgLTEsMzA2ICswLDAgQEAKLU1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFdvcmtzcGFjZSBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQotIyBXQVJOSU5HOiBETyBOT1QgRURJVCBPUiBERUxFVEUgVEhJUyBXT1JLU1BBQ0UgRklMRSENCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogIl9jdHlwZXMiPSIuXF9jdHlwZXMuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLSAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gICAgUHJvamVjdF9EZXBfTmFtZSBweXRob25jb3JlDQotICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogIl9jdHlwZXNfdGVzdCI9Ii5cX2N0eXBlc190ZXN0LmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08ND4NCi17e3sNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogIl9lbGVtZW50dHJlZSI9Ii5cX2VsZW1lbnR0cmVlLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08ND4NCi17e3sNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogIl9tc2kiPSIuXF9tc2kuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLSAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gICAgUHJvamVjdF9EZXBfTmFtZSBweXRob25jb3JlDQotICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogIl9tdWx0aXByb2Nlc3NpbmciPSIuXF9tdWx0aXByb2Nlc3NpbmcuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLSAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gICAgUHJvamVjdF9EZXBfTmFtZSBweXRob25jb3JlDQotICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogIl9zb2NrZXQiPSIuXF9zb2NrZXQuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLSAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gICAgUHJvamVjdF9EZXBfTmFtZSBweXRob25jb3JlDQotICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogIl9zcWxpdGUzIj0iLlxfc3FsaXRlMy5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDQ+DQote3t7DQotfX19DQotDQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0KLVByb2plY3Q6ICJfc3NsIj0iLlxfc3NsLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08ND4NCi17e3sNCi0gICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICAgIFByb2plY3RfRGVwX05hbWUgcHl0aG9uY29yZQ0KLSAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQotICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgICBQcm9qZWN0X0RlcF9OYW1lIHB5dGhvbg0KLSAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQotICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgICBQcm9qZWN0X0RlcF9OYW1lIHc5eHBvcGVuDQotICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogIl90ZXN0Y2FwaSI9Ii5cX3Rlc3RjYXBpLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08ND4NCi17e3sNCi0gICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICAgIFByb2plY3RfRGVwX05hbWUgcHl0aG9uY29yZQ0KLSAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQotfX19DQotDQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0KLVByb2plY3Q6ICJfdGtpbnRlciI9Ii5cX3RraW50ZXIuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLSAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gICAgUHJvamVjdF9EZXBfTmFtZSBweXRob25jb3JlDQotICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogImJ6MiI9Ii5cYnoyLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08ND4NCi17e3sNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogIm1ha2VfdmVyc2lvbmluZm8iPSIuXG1ha2VfdmVyc2lvbmluZm8uZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1Qcm9qZWN0OiAicHlleHBhdCI9Ii5ccHlleHBhdC5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDQ+DQote3t7DQotICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgICBQcm9qZWN0X0RlcF9OYW1lIHB5dGhvbmNvcmUNCi0gICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1Qcm9qZWN0OiAicHl0aG9uIj0iLlxweXRob24uZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLSAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gICAgUHJvamVjdF9EZXBfTmFtZSBweXRob25jb3JlDQotICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogInB5dGhvbmNvcmUiPSIuXHB5dGhvbmNvcmUuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLSAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gICAgUHJvamVjdF9EZXBfTmFtZSBtYWtlX3ZlcnNpb25pbmZvDQotICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogInB5dGhvbnciPSIuXHB5dGhvbncuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLSAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gICAgUHJvamVjdF9EZXBfTmFtZSBweXRob25jb3JlDQotICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogInNlbGVjdCI9Ii5cc2VsZWN0LmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08ND4NCi17e3sNCi0gICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICAgIFByb2plY3RfRGVwX05hbWUgcHl0aG9uY29yZQ0KLSAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQotfX19DQotDQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0KLVByb2plY3Q6ICJ1bmljb2RlZGF0YSI9Ii5cdW5pY29kZWRhdGEuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLSAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gICAgUHJvamVjdF9EZXBfTmFtZSBweXRob25jb3JlDQotICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogInc5eHBvcGVuIj0iLlx3OXhwb3Blbi5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDQ+DQote3t7DQotfX19DQotDQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0KLVByb2plY3Q6ICJ3aW5zb3VuZCI9Ii5cd2luc291bmQuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLSAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gICAgUHJvamVjdF9EZXBfTmFtZSBweXRob25jb3JlDQotICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotR2xvYmFsOg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08Mz4NCi17e3sNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotDQpkaWZmIC0tZ2l0IGEvUEMvVkM2L3B5ZXhwYXQuZHNwIGIvUEMvVkM2L3B5ZXhwYXQuZHNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NjFjOWVmLi4wMDAwMDAwCi0tLSBhL1BDL1ZDNi9weWV4cGF0LmRzcAorKysgL2Rldi9udWxsCkBAIC0xLDExMSArMCwwIEBACi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9InB5ZXhwYXQiIC0gUGFja2FnZSBPd25lcj08ND4NCi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQotIyAqKiBETyBOT1QgRURJVCAqKg0KLQ0KLSMgVEFSR1RZUEUgIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IiAweDAxMDINCi0NCi1DRkc9cHlleHBhdCAtIFdpbjMyIFJlbGVhc2UNCi0hTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsDQotIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgInB5ZXhwYXQubWFrIi4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQ0KLSFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgInB5ZXhwYXQubWFrIiBDRkc9InB5ZXhwYXQgLSBXaW4zMiBSZWxlYXNlIg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFICJweWV4cGF0IC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQotIU1FU1NBR0UgInB5ZXhwYXQgLSBXaW4zMiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQotIU1FU1NBR0UgDQotDQotIyBCZWdpbiBQcm9qZWN0DQotIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDANCi0jIFBST1AgU2NjX1Byb2pOYW1lICJweWV4cGF0Ig0KLSMgUFJPUCBTY2NfTG9jYWxQYXRoICIuLiINCi1DUFA9Y2wuZXhlDQotTVRMPW1pZGwuZXhlDQotUlNDPXJjLmV4ZQ0KLQ0KLSFJRiAgIiQoQ0ZHKSIgPT0gInB5ZXhwYXQgLSBXaW4zMiBSZWxlYXNlIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtcmVsZWFzZVxweWV4cGF0Ig0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVQgL1czIC9HWCAvTzIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9aaSAvTzIgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0kgIi4uXC4uXE1vZHVsZXNcZXhwYXQiIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIk5ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9EICJYTUxfTlMiIC9EICJYTUxfRFREIiAvRCBCWVRFT1JERVI9MTIzNCAvRCBYTUxfQ09OVEVYVF9CWVRFUz0xMDI0IC9EICJYTUxfU1RBVElDIiAvRCAiSEFWRV9NRU1NT1ZFIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvbWFjaGluZTpJMzg2DQotIyBBREQgTElOSzMyIHVzZXIzMi5saWIga2VybmVsMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MUQxMDAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vcHlleHBhdC5weWQiDQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gInB5ZXhwYXQgLSBXaW4zMiBEZWJ1ZyINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtZGVidWdccHlleHBhdCINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0kgIi4uXC4uXE1vZHVsZXNcZXhwYXQiIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIl9ERUJVRyIgL0QgIkhBVkVfRVhQQVRfSCIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9EICJYTUxfTlMiIC9EICJYTUxfRFREIiAvRCBCWVRFT1JERVI9MTIzNCAvRCBYTUxfQ09OVEVYVF9CWVRFUz0xMDI0IC9EICJYTUxfU1RBVElDIiAvRCAiSEFWRV9NRU1NT1ZFIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0DQotIyBBREQgTElOSzMyIHVzZXIzMi5saWIga2VybmVsMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MUQxMDAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vcHlleHBhdF9kLnB5ZCIgL3BkYnR5cGU6c2VwdA0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTkRJRiANCi0NCi0jIEJlZ2luIFRhcmdldA0KLQ0KLSMgTmFtZSAicHlleHBhdCAtIFdpbjMyIFJlbGVhc2UiDQotIyBOYW1lICJweWV4cGF0IC0gV2luMzIgRGVidWciDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHB5ZXhwYXQuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXGV4cGF0XHhtbHBhcnNlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xleHBhdFx4bWxyb2xlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xleHBhdFx4bWx0b2suYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBFbmQgVGFyZ2V0DQotIyBFbmQgUHJvamVjdA0KZGlmZiAtLWdpdCBhL1BDL1ZDNi9weXRob24uZHNwIGIvUEMvVkM2L3B5dGhvbi5kc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhOGI3NzIuLjAwMDAwMDAKLS0tIGEvUEMvVkM2L3B5dGhvbi5kc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxMDAgKzAsMCBAQAotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJweXRob24iIC0gUGFja2FnZSBPd25lcj08ND4NCi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQotIyAqKiBETyBOT1QgRURJVCAqKg0KLQ0KLSMgVEFSR1RZUEUgIldpbjMyICh4ODYpIENvbnNvbGUgQXBwbGljYXRpb24iIDB4MDEwMw0KLQ0KLUNGRz1weXRob24gLSBXaW4zMiBSZWxlYXNlDQotIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLA0KLSFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJweXRob24ubWFrIi4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQ0KLSFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgInB5dGhvbi5tYWsiIENGRz0icHl0aG9uIC0gV2luMzIgUmVsZWFzZSINCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSAicHl0aG9uIC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBDb25zb2xlIEFwcGxpY2F0aW9uIikNCi0hTUVTU0FHRSAicHl0aG9uIC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgQ29uc29sZSBBcHBsaWNhdGlvbiIpDQotIU1FU1NBR0UgDQotDQotIyBCZWdpbiBQcm9qZWN0DQotIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDANCi0jIFBST1AgU2NjX1Byb2pOYW1lICJweXRob24iDQotIyBQUk9QIFNjY19Mb2NhbFBhdGggIi4uIg0KLUNQUD1jbC5leGUNCi1SU0M9cmMuZXhlDQotDQotIUlGICAiJChDRkcpIiA9PSAicHl0aG9uIC0gV2luMzIgUmVsZWFzZSINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLXJlbGVhc2VccHl0aG9uIg0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9XMyAvR1ggL08yIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX01CQ1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTUQgL1czIC9HWCAvWmkgL08yIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX01CQ1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9tYWNoaW5lOkkzODYNCi0jIEFERCBMSU5LMzIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgL25vbG9nbyAvYmFzZToiMHgxZDAwMDAwMCIgL3N1YnN5c3RlbTpjb25zb2xlIC9kZWJ1ZyAvbWFjaGluZTpJMzg2DQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gInB5dGhvbiAtIFdpbjMyIERlYnVnIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1kZWJ1Z1xweXRob24iDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL1czIC9HbSAvR1ggL1ppIC9PZCAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9NQkNTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX01CQ1MiIC9GUiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2kgIi4uLi5cXEluY2x1ZGUiIC9kICJfREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdA0KLSMgQUREIExJTkszMiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFkMDAwMDAwIiAvc3RhY2s6MHgyMDAwMDAgL3N1YnN5c3RlbTpjb25zb2xlIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vcHl0aG9uX2QuZXhlIiAvcGRidHlwZTpzZXB0DQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVORElGIA0KLQ0KLSMgQmVnaW4gVGFyZ2V0DQotDQotIyBOYW1lICJweXRob24gLSBXaW4zMiBSZWxlYXNlIg0KLSMgTmFtZSAicHl0aG9uIC0gV2luMzIgRGVidWciDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlxweWNvbi5pY28NCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xweXRob24uYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlxweXRob25fZXhlLnJjDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEVuZCBUYXJnZXQNCi0jIEVuZCBQcm9qZWN0DQpkaWZmIC0tZ2l0IGEvUEMvVkM2L3B5dGhvbmNvcmUuZHNwIGIvUEMvVkM2L3B5dGhvbmNvcmUuZHNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwY2U5OGQxLi4wMDAwMDAwCi0tLSBhL1BDL1ZDNi9weXRob25jb3JlLmRzcAorKysgL2Rldi9udWxsCkBAIC0xLDc4MCArMCwwIEBACi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9InB5dGhvbmNvcmUiIC0gUGFja2FnZSBPd25lcj08ND4NCi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQotIyAqKiBETyBOT1QgRURJVCAqKg0KLQ0KLSMgVEFSR1RZUEUgIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IiAweDAxMDINCi0NCi1DRkc9cHl0aG9uY29yZSAtIFdpbjMyIFJlbGVhc2UNCi0hTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsDQotIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgInB5dGhvbmNvcmUubWFrIi4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQ0KLSFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgInB5dGhvbmNvcmUubWFrIiBDRkc9InB5dGhvbmNvcmUgLSBXaW4zMiBSZWxlYXNlIg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFICJweXRob25jb3JlIC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQotIU1FU1NBR0UgInB5dGhvbmNvcmUgLSBXaW4zMiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQotIU1FU1NBR0UgDQotDQotIyBCZWdpbiBQcm9qZWN0DQotIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDANCi0jIFBST1AgU2NjX1Byb2pOYW1lICJweXRob25jb3JlIg0KLSMgUFJPUCBTY2NfTG9jYWxQYXRoICIuLiINCi1DUFA9Y2wuZXhlDQotTVRMPW1pZGwuZXhlDQotUlNDPXJjLmV4ZQ0KLQ0KLSFJRiAgIiQoQ0ZHKSIgPT0gInB5dGhvbmNvcmUgLSBXaW4zMiBSZWxlYXNlIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtcmVsZWFzZVxweXRob25jb3JlIg0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVQgL1czIC9HWCAvTzIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9aaSAvTzIgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0kgIi4uXC4uXG1vZHVsZXNcemxpYiIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiTkRFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL0QgIlVTRV9ETF9FWFBPUlQiIC9ZWCAvRkQgL1ptMjAwIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gL3dpbjMyICJOVUwiDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vIC93aW4zMiAiTlVMIg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9pICIuLlwuLlxJbmNsdWRlIiAvZCAiTkRFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL21hY2hpbmU6STM4Ng0KLSMgQUREIExJTkszMiBsYXJnZWludC5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWUwMDAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9ub2RlZmF1bHRsaWI6ImxpYmMiIC9vdXQ6Ii4vcHl0aG9uMzMuZGxsIg0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTFNFSUYgICIkKENGRykiID09ICJweXRob25jb3JlIC0gV2luMzIgRGVidWciDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLWRlYnVnXHB5dGhvbmNvcmUiDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9JICIuLlwuLlxtb2R1bGVzXHpsaWIiIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIl9ERUJVRyIgL0QgIlVTRV9ETF9FWFBPUlQiIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9abTIwMCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vIC93aW4zMiAiTlVMIg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAvd2luMzIgIk5VTCINCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvaSAiLi5cLi5cSW5jbHVkZSIgL2QgIl9ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCi0jIEFERCBMSU5LMzIgbGFyZ2VpbnQubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFlMDAwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvbm9kZWZhdWx0bGliOiJsaWJjIiAvb3V0OiIuL3B5dGhvbjMzX2QuZGxsIiAvcGRidHlwZTpzZXB0DQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVORElGIA0KLQ0KLSMgQmVnaW4gVGFyZ2V0DQotDQotIyBOYW1lICJweXRob25jb3JlIC0gV2luMzIgUmVsZWFzZSINCi0jIE5hbWUgInB5dGhvbmNvcmUgLSBXaW4zMiBEZWJ1ZyINCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX2Jpc2VjdG1vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcY2prY29kZWNzXF9jb2RlY3NfY24uYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXGNqa2NvZGVjc1xfY29kZWNzX2hrLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xjamtjb2RlY3NcX2NvZGVjc19pc28yMDIyLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xjamtjb2RlY3NcX2NvZGVjc19qcC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcY2prY29kZWNzXF9jb2RlY3Nfa3IuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXGNqa2NvZGVjc1xfY29kZWNzX3R3LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfY29kZWNzbW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfY29sbGVjdGlvbnNtb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9jc3YuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9kYXRldGltZW1vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX2Z1bmN0b29sc21vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX2hlYXBxbW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfaW9cX2lvbW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfanNvbi5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX2xvY2FsZW1vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX2xzcHJvZi5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX21hdGguYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9waWNrbGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9yYW5kb21tb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9zcmUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9zdHJ1Y3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQQ1xfc3VicHJvY2Vzcy5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX3RocmVhZG1vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX3RpbWUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25cX3dhcm5pbmdzLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfd2Vha3JlZi5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcYWJzdHJhY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXGFjY3UuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQYXJzZXJcYWNjZWxlci5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcemxpYlxhZGxlcjMyLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xhcnJheW1vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxhc2RsLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXGFzdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcYXRleGl0bW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xhdWRpb29wLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xiaW5hc2NpaS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFBhcnNlclxiaXRzZXQuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25cYmx0aW5tb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXGJvb2xvYmplY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9pb1xidWZmZXJlZGlvLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xieXRlYXJyYXlvYmplY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXGJ5dGVzX21ldGhvZHMuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9pb1xieXRlc2lvLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xieXRlc29iamVjdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcY2Fwc3VsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcY2VsbG9iamVjdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxjZXZhbC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcY2xhc3NvYmplY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXGNtYXRobW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXGNvZGVjcy5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcY29kZW9iamVjdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxjb21waWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xjb21wbGV4b2JqZWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1x6bGliXGNvbXByZXNzLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cY29uZmlnLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1x6bGliXGNyYzMyLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXGR5bmFtaWNfYW5ub3RhdGlvbnMuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHpsaWJcZGVmbGF0ZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcZGVzY3JvYmplY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXGRpY3RvYmplY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlxkbF9udC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxkdG9hLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXGR5bmxvYWRfd2luLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xlbnVtb2JqZWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xlcnJub21vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxlcnJvcnMuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXGV4Y2VwdGlvbnMuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9pb1xmaWxlaW8uYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXGZpbGVvYmplY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25cZmlsZXV0aWxzLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUGFyc2VyXGZpcnN0c2V0cy5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcZmxvYXRvYmplY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25cZm9ybWF0dGVyX3VuaWNvZGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXGZyYW1lb2JqZWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXGZyb3plbi5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcZnVuY29iamVjdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxmdXR1cmUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXGdjbW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xnZW5vYmplY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25cZ2V0YXJncy5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcZ2V0YnVpbGRpbmZvLmMNCi0jIEFERCBDUFAgL0QgQlVJTEQ9NDYNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXGdldGNvbXBpbGVyLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXGdldGNvcHlyaWdodC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxnZXRvcHQuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlxnZXRwYXRocC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxnZXRwbGF0Zm9ybS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxnZXR2ZXJzaW9uLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXGdyYW1pbml0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUGFyc2VyXGdyYW1tYXIuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQYXJzZXJcZ3JhbW1hcjEuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHpsaWJcZ3ppby5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxpbXBvcnQuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25caW1wb3J0ZGwuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHpsaWJcaW5mYmFjay5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcemxpYlxpbmZmYXN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1x6bGliXGluZmxhdGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHpsaWJcaW5mdHJlZXMuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9pb1xpb2Jhc2UuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXGl0ZXJvYmplY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXGl0ZXJ0b29sc21vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFBhcnNlclxsaXN0bm9kZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcbGlzdG9iamVjdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcbG9uZ29iamVjdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcbWFpbi5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxtYXJzaGFsLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xtYXRobW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xtZDVtb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXG1lbW9yeW9iamVjdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFBhcnNlclxtZXRhZ3JhbW1hci5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcbWV0aG9kb2JqZWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xtbWFwbW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXG1vZHN1cHBvcnQuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXG1vZHVsZW9iamVjdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXG1zdmNydG1vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcY2prY29kZWNzXG11bHRpYnl0ZWNvZGVjLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUGFyc2VyXG15cmVhZGxpbmUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25cbXlzbnByaW50Zi5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxteXN0cnRvdWwuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQYXJzZXJcbm9kZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcb2JqZWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xvYm1hbGxvYy5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcb3BlcmF0b3IuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQYXJzZXJccGFyc2VyLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xwYXJzZXJtb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQYXJzZXJccGFyc2V0b2suYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25ccGVlcGhvbGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHBvc2l4bW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXHB5YXJlbmEuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25ccHljdHlwZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxweWZwZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxweW1hdGguYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25ccHlzdGF0ZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxweXN0cmNtcC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxweXN0cnRvZC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPSIuLlwuLlxQeXRob25cUHl0aG9uLWFzdC5jIg0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlxweXRob25fbnQucmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXHB5dGhvbnJ1bi5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxweXRpbWUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25ccmFuZG9tLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xyYW5nZW9iamVjdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNccm90YXRpbmd0cmVlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xzZXRvYmplY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHNoYTFtb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHNoYTI1Nm1vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcc2hhNTEybW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xzaWduYWxtb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXHNsaWNlb2JqZWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfaW9cc3RyaW5naW8uYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25cc3RydWN0bWVtYmVyLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xzdHJ1Y3RzZXEuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25cc3ltdGFibGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHN5bXRhYmxlbW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXHN5c21vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX2lvXHRleHRpby5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblx0aHJlYWQuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHRpbWVtb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQYXJzZXJcdG9rZW5pemVyLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXHRyYWNlYmFjay5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcemxpYlx0cmVlcy5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcdHVwbGVvYmplY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXHR5cGVvYmplY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHpsaWJcdW5jb21wci5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcdW5pY29kZWN0eXBlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1x1bmljb2Rlb2JqZWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1x3ZWFrcmVmb2JqZWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cd2lucmVnLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1x4eHN1YnR5cGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHppcGltcG9ydC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcemxpYm1vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcemxpYlx6dXRpbC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEVuZCBUYXJnZXQNCi0jIEVuZCBQcm9qZWN0DQpkaWZmIC0tZ2l0IGEvUEMvVkM2L3B5dGhvbncuZHNwIGIvUEMvVkM2L3B5dGhvbncuZHNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOWMzMjVjLi4wMDAwMDAwCi0tLSBhL1BDL1ZDNi9weXRob253LmRzcAorKysgL2Rldi9udWxsCkBAIC0xLDEwMSArMCwwIEBACi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9InB5dGhvbnciIC0gUGFja2FnZSBPd25lcj08ND4NCi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQotIyAqKiBETyBOT1QgRURJVCAqKg0KLQ0KLSMgVEFSR1RZUEUgIldpbjMyICh4ODYpIEFwcGxpY2F0aW9uIiAweDAxMDENCi0NCi1DRkc9cHl0aG9udyAtIFdpbjMyIEFscGhhIFJlbGVhc2UNCi0hTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsDQotIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgInB5dGhvbncubWFrIi4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQ0KLSFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgInB5dGhvbncubWFrIiBDRkc9InB5dGhvbncgLSBXaW4zMiBBbHBoYSBSZWxlYXNlIg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFICJweXRob253IC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBBcHBsaWNhdGlvbiIpDQotIU1FU1NBR0UgInB5dGhvbncgLSBXaW4zMiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBBcHBsaWNhdGlvbiIpDQotIU1FU1NBR0UgDQotDQotIyBCZWdpbiBQcm9qZWN0DQotIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDANCi0jIFBST1AgU2NjX1Byb2pOYW1lICJweXRob253Ig0KLSMgUFJPUCBTY2NfTG9jYWxQYXRoICIuLlxwYyINCi1DUFA9Y2wuZXhlDQotTVRMPW1pZGwuZXhlDQotUlNDPXJjLmV4ZQ0KLQ0KLSFJRiAgIiQoQ0ZHKSIgPT0gInB5dGhvbncgLSBXaW4zMiBSZWxlYXNlIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtcmVsZWFzZVxweXRob253Ig0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9XMyAvR1ggL08yIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL1ppIC9PMiAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9tYWNoaW5lOkkzODYNCi0jIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvYmFzZToiMHgxZDAwMDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kZWJ1ZyAvbWFjaGluZTpJMzg2DQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gInB5dGhvbncgLSBXaW4zMiBEZWJ1ZyINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtZGVidWdccHl0aG9udyINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvVzMgL0dtIC9HWCAvWmkgL09kIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdA0KLSMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFkMDAwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9weXRob253X2QuZXhlIiAvcGRidHlwZTpzZXB0DQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVORElGIA0KLQ0KLSMgQmVnaW4gVGFyZ2V0DQotDQotIyBOYW1lICJweXRob253IC0gV2luMzIgUmVsZWFzZSINCi0jIE5hbWUgInB5dGhvbncgLSBXaW4zMiBEZWJ1ZyINCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXHB5dGhvbl9leGUucmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cV2luTWFpbi5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEVuZCBUYXJnZXQNCi0jIEVuZCBQcm9qZWN0DQpkaWZmIC0tZ2l0IGEvUEMvVkM2L3JlYWRtZS50eHQgYi9QQy9WQzYvcmVhZG1lLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjk3OGY4NS4uMDAwMDAwMAotLS0gYS9QQy9WQzYvcmVhZG1lLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDE5MiArMCwwIEBACi1CdWlsZGluZyBQeXRob24gdXNpbmcgVkMrKyA2LjAgb3IgNS4wCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UaGlzIGRpcmVjdG9yeSBpcyB1c2VkIHRvIGJ1aWxkIFB5dGhvbiBmb3IgV2luMzIgcGxhdGZvcm1zLCBlLmcuIFdpbmRvd3MKLTIwMDAgYW5kIFhQLiAgSXQgcmVxdWlyZXMgTWljcm9zb2Z0IFZpc3VhbCBDKysgNi54IG9yIDUueCBhbmQgUGxhdGZvcm0KLVNESyBGZWJydWFyeSAyMDAzIEVkaXRpb24gKENvcmUgU0RLKS4KLShGb3Igb3RoZXIgV2luZG93cyBwbGF0Zm9ybXMgYW5kIGNvbXBpbGVycywgc2VlIC4uL3JlYWRtZS50eHQuKQotCi1BbGwgeW91IG5lZWQgdG8gZG8gaXMgb3BlbiB0aGUgd29ya3NwYWNlICJwY2J1aWxkLmRzdyIgaW4gTVNWQysrLCBzZWxlY3QKLXRoZSBEZWJ1ZyBvciBSZWxlYXNlIHNldHRpbmcgKHVzaW5nIEJ1aWxkIC0+IFNldCBBY3RpdmUgQ29uZmlndXJhdGlvbi4uLiksCi1hbmQgYnVpbGQgdGhlIHByb2plY3RzLgotCi1UaGUgcHJvcGVyIG9yZGVyIHRvIGJ1aWxkIHN1YnByb2plY3RzOgotCi0xKSBweXRob25jb3JlICh0aGlzIGJ1aWxkcyB0aGUgbWFpbiBQeXRob24gRExMIGFuZCBsaWJyYXJ5IGZpbGVzLAotICAgICAgICAgICAgICAgcHl0aG9uMzMue2RsbCwgbGlifSBpbiBSZWxlYXNlIG1vZGUpCi0KLTIpIHB5dGhvbiAodGhpcyBidWlsZHMgdGhlIG1haW4gUHl0aG9uIGV4ZWN1dGFibGUsCi0gICAgICAgICAgIHB5dGhvbi5leGUgaW4gUmVsZWFzZSBtb2RlKQotCi0zKSB0aGUgb3RoZXIgc3VicHJvamVjdHMsIGFzIGRlc2lyZWQgb3IgbmVlZGVkIChub3RlOiAgeW91IHByb2JhYmx5IGRvbid0Ci0gICB3YW50IHRvIGJ1aWxkIG1vc3Qgb2YgdGhlIG90aGVyIHN1YnByb2plY3RzLCB1bmxlc3MgeW91J3JlIGJ1aWxkaW5nIGFuCi0gICBlbnRpcmUgUHl0aG9uIGRpc3RyaWJ1dGlvbiBmcm9tIHNjcmF0Y2gsIG9yIHNwZWNpZmljYWxseSBtYWtpbmcgY2hhbmdlcwotICAgdG8gdGhlIHN1YnN5c3RlbXMgdGhleSBpbXBsZW1lbnQ7IHNlZSBTVUJQUk9KRUNUUyBiZWxvdykKLQotV2hlbiB1c2luZyB0aGUgRGVidWcgc2V0dGluZywgdGhlIG91dHB1dCBmaWxlcyBoYXZlIGEgX2QgYWRkZWQgdG8KLXRoZWlyIG5hbWU6ICBweXRob24zM19kLmRsbCwgcHl0aG9uX2QuZXhlLCBweWV4cGF0X2QucHlkLCBhbmQgc28gb24uCi0KLVNVQlBST0pFQ1RTCi0tLS0tLS0tLS0tLQotVGhlc2Ugc3VicHJvamVjdHMgc2hvdWxkIGJ1aWxkIG91dCBvZiB0aGUgYm94LiAgU3VicHJvamVjdHMgb3RoZXIgdGhhbiB0aGUKLW1haW4gb25lcyAocHl0aG9uY29yZSwgcHl0aG9uLCBweXRob253KSBnZW5lcmFsbHkgYnVpbGQgYSBETEwgKHJlbmFtZWQgdG8KLS5weWQpIGZyb20gYSBzcGVjaWZpYyBtb2R1bGUgc28gdGhhdCB1c2VycyBkb24ndCBoYXZlIHRvIGxvYWQgdGhlIGNvZGUKLXN1cHBvcnRpbmcgdGhhdCBtb2R1bGUgdW5sZXNzIHRoZXkgaW1wb3J0IHRoZSBtb2R1bGUuCi0KLXB5dGhvbmNvcmUKLSAgICAuZGxsIGFuZCAubGliCi1weXRob24KLSAgICAuZXhlCi1weXRob253Ci0gICAgcHl0aG9udy5leGUsIGEgdmFyaWFudCBvZiBweXRob24uZXhlIHRoYXQgZG9lc24ndCBwb3AgdXAgYSBET1MgYm94Ci1fbXNpCi0gICAgX21zaS5jLiBZb3UgbmVlZCB0byBpbnN0YWxsIFdpbmRvd3MgSW5zdGFsbGVyIFNESyB0byBidWlsZCB0aGlzIG1vZHVsZS4KLV9zb2NrZXQKLSAgICBzb2NrZXRtb2R1bGUuYwotX3Rlc3RjYXBpCi0gICAgdGVzdHMgb2YgdGhlIFB5dGhvbiBDIEFQSSwgcnVuIHZpYSBMaWIvdGVzdC90ZXN0X2NhcGkucHksIGFuZAotICAgIGltcGxlbWVudGVkIGJ5IG1vZHVsZSBNb2R1bGVzL190ZXN0Y2FwaW1vZHVsZS5jCi1weWV4cGF0Ci0gICAgUHl0aG9uIHdyYXBwZXIgZm9yIGFjY2VsZXJhdGVkIFhNTCBwYXJzaW5nLCB3aGljaCBpbmNvcnBvcmF0ZXMgc3RhYmxlCi0gICAgY29kZSBmcm9tIHRoZSBFeHBhdCBwcm9qZWN0OiAgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9leHBhdC8KLXNlbGVjdAotICAgIHNlbGVjdG1vZHVsZS5jCi11bmljb2RlZGF0YQotICAgIGxhcmdlIHRhYmxlcyBvZiBVbmljb2RlIGRhdGEKLXdpbnNvdW5kCi0gICAgcGxheSBzb3VuZHMgKHR5cGljYWxseSAud2F2IGZpbGVzKSB1bmRlciBXaW5kb3dzCi0KLVRoZSBmb2xsb3dpbmcgc3VicHJvamVjdHMgd2lsbCBnZW5lcmFsbHkgTk9UIGJ1aWxkIG91dCBvZiB0aGUgYm94LiAgVGhleQotd3JhcCBjb2RlIFB5dGhvbiBkb2Vzbid0IGNvbnRyb2wsIGFuZCB5b3UnbGwgbmVlZCB0byBkb3dubG9hZCB0aGUgYmFzZQotcGFja2FnZXMgZmlyc3QgYW5kIHVucGFjayB0aGVtIGludG8gc2libGluZ3Mgb2YgUENidWlsZHMncyBwYXJlbnQKLWRpcmVjdG9yeTsgZm9yIGV4YW1wbGUsIGlmIHlvdXIgUENidWlsZCBpcyAgLi4uLi4uLlxkaXN0XHNyY1xQQ2J1aWxkXCwKLXVucGFjayBpbnRvIG5ldyBzdWJkaXJlY3RvcmllcyBvZiBkaXN0XC4KLQotX3RraW50ZXIKLSAgICBQeXRob24gd3JhcHBlciBmb3IgdGhlIFRrIHdpbmRvd2luZyBzeXN0ZW0uICBSZXF1aXJlcyBidWlsZGluZwotICAgIFRjbC9UayBmaXJzdC4gIEZvbGxvd2luZyBhcmUgaW5zdHJ1Y3Rpb25zIGZvciBUY2wvVGsgOC41LjIuCi0KLSAgICBHZXQgc291cmNlCi0gICAgLS0tLS0tLS0tLQotICAgIEluIHRoZSBkaXN0IGRpcmVjdG9yeSwgcnVuCi0gICAgc3ZuIGV4cG9ydCBodHRwOi8vc3ZuLnB5dGhvbi5vcmcvcHJvamVjdHMvZXh0ZXJuYWwvdGNsLTguNS4yLjEgdGNsOC41LjIKLSAgICBzdm4gZXhwb3J0IGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy9wcm9qZWN0cy9leHRlcm5hbC90ay04LjUuMi4wIHRrOC41LjIKLSAgICBzdm4gZXhwb3J0IGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy9wcm9qZWN0cy9leHRlcm5hbC90aXgtOC40LjMuMSB0aXg4LjQuMwotCi0gICAgRGVidWcgQnVpbGQKLSAgICAtLS0tLS0tLS0tLQotICAgIFRvIGJ1aWxkIGRlYnVnIHZlcnNpb24sIGFkZCBERUJVRz0xIHRvIGFsbCBubWFrZSBjYWxsIGJlbGxvdy4KLQotICAgIEJ1aWxkIFRjbCBmaXJzdCAoZG9uZSBoZXJlIHcvIE1TVkMgNiBvbiBXaW4ySykKLSAgICAtLS0tLS0tLS0tLS0tLS0KLSAgICBJZiB5b3VyIGVudmlyb25tZW50IGRvZXNuJ3QgaGF2ZSBzdHJ1Y3QgX3N0YXQ2NCwgeW91IG5lZWQgdG8gYXBwbHkKLSAgICB0Y2w4NTIucGF0Y2ggaW4gdGhpcyBkaXJlY3RvcnkgdG8gZGlzdFx0Y2w4LjUuMlxnZW5lcmljXHRjbC5oLgotCi0gICAgY2QgZGlzdFx0Y2w4LjUuMlx3aW4KLSAgICBydW4gdmN2YXJzMzIuYmF0Ci0gICAgbm1ha2UgLWYgbWFrZWZpbGUudmMKLSAgICBubWFrZSAtZiBtYWtlZmlsZS52YyBJTlNUQUxMRElSPS4uXC4uXHRjbHRrIGluc3RhbGwKLQotICAgIFhYWCBTaG91bGQgd2UgY29tcGlsZSB3aXRoIE9QVFM9dGhyZWFkcz8KLQotICAgIE9wdGlvbmFsOiAgcnVuIHRlc3RzLCB2aWEKLSAgICAgICAgbm1ha2UgLWYgbWFrZWZpbGUudmMgdGVzdAotCi0gICAgICAgIGFsbC50Y2w6ICAgICAgICBUb3RhbCAgIDI0MjQyICAgUGFzc2VkICAyMzM1OCAgIFNraXBwZWQgODc3ICAgICBGYWlsZWQgIDcKLSAgICAgICAgU291cmNlZCAxMzcgVGVzdCBGaWxlcy4KLSAgICAgICAgRmlsZXMgd2l0aCBmYWlsaW5nIHRlc3RzOiBleGVjLnRlc3QgaHR0cC50ZXN0IGlvLnRlc3QgbWFpbi50ZXN0IHN0cmluZy50ZXN0IHN0cmkKLSAgICAgICAgbmdPYmoudGVzdAotCi0gICAgQnVpbGQgVGsKLSAgICAtLS0tLS0tLQotICAgIGNkIGRpc3RcdGs4LjUuMlx3aW4KLSAgICBubWFrZSAtZiBtYWtlZmlsZS52YyBUQ0xESVI9Li5cLi5cdGNsOC41LjIKLSAgICBubWFrZSAtZiBtYWtlZmlsZS52YyBUQ0xESVI9Li5cLi5cdGNsOC41LjIgSU5TVEFMTERJUj0uLlwuLlx0Y2x0ayBpbnN0YWxsCi0KLSAgICBYWFggU2hvdWxkIHdlIGNvbXBpbGUgd2l0aCBPUFRTPXRocmVhZHM/Ci0KLSAgICBYWFggSSBoYXZlIG5vIGlkZWEgd2hldGhlciAibm1ha2UgLWYgbWFrZWZpbGUudmMgdGVzdCIgcGFzc2VkIG9yCi0gICAgWFhYIGZhaWxlZC4gIEl0IHBvcHBlZCB1cCB0b25zIG9mIGxpdHRsZSB3aW5kb3dzLCBhbmQgZGlkIGxvdHMgb2YKLSAgICBYWFggc3R1ZmYsIGFuZCBub3RoaW5nIGJsZXcgdXAuCi0KLSAgICBCdWlsZCBUaXgKLSAgICAtLS0tLS0tLS0KLSAgICBjZCBkaXN0XHRpeDguNC4zXHdpbgotICAgIG5tYWtlIC1mIHB5dGhvbi5tYWsgVENMX01BSk9SPTggVENMX01JTk9SPTUgVENMX1BBVENIPTIgTUFDSElORT1JWDg2IERFQlVHPTAKLSAgICBubWFrZSAtZiBweXRob24ubWFrIFRDTF9NQUpPUj04IFRDTF9NSU5PUj01IFRDTF9QQVRDSD0yIE1BQ0hJTkU9SVg4NiBERUJVRz0wIElOU1RBTExfRElSPS4uXC4uXHRjbHRrIGluc3RhbGwKLQotYnoyCi0gICAgUHl0aG9uIHdyYXBwZXIgZm9yIHRoZSBsaWJiejIgY29tcHJlc3Npb24gbGlicmFyeS4gIEhvbWVwYWdlCi0gICAgICAgIGh0dHA6Ly93d3cuYnppcC5vcmcvCi0gICAgRG93bmxvYWQgdGhlIHNvdXJjZSBmcm9tIHRoZSBweXRob24ub3JnIGNvcHkgaW50byB0aGUgZGlzdAotICAgIGRpcmVjdG9yeToKLQotICAgIHN2biBleHBvcnQgaHR0cDovL3N2bi5weXRob24ub3JnL3Byb2plY3RzL2V4dGVybmFsL2J6aXAyLTEuMC42Ci0KLSAgICBBbmQgcmVxdWlyZXMgYnVpbGRpbmcgYnoyIGZpcnN0LgotCi0gICAgY2QgZGlzdFxiemlwMi0xLjAuNgotICAgIG5tYWtlIC1mIG1ha2VmaWxlLm1zYwotCi0gICAgQWxsIG9mIHRoaXMgbWFuYWdlZCB0byBidWlsZCBiemlwMi0xLjAuNlxsaWJiejIubGliLCB3aGljaCB0aGUgUHl0aG9uCi0gICAgcHJvamVjdCBsaW5rcyBpbi4KLQotCi1fc3FsaXRlMwotICAgIFB5dGhvbiB3cmFwcGVyIGZvciBTUUxpdGUgbGlicmFyeS4KLSAgICAKLSAgICBHZXQgdGhlIHNvdXJjZSBjb2RlIHRocm91Z2gKLSAgICAKLSAgICBzdm4gZXhwb3J0IGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy9wcm9qZWN0cy9leHRlcm5hbC9zcWxpdGUtc291cmNlLTMuMy40Ci0gICAgCi0gICAgVG8gdXNlIHRoZSBleHRlbnNpb24gbW9kdWxlIGluIGEgUHl0aG9uIGJ1aWxkIHRyZWUsIGNvcHkgc3FsaXRlMy5kbGwgaW50bwotICAgIHRoZSBQQy9WQzYgZm9sZGVyLgotCi0KLV9zc2wKLSAgICBQeXRob24gd3JhcHBlciBmb3IgdGhlIHNlY3VyZSBzb2NrZXRzIGxpYnJhcnkuCi0KLSAgICBHZXQgdGhlIGxhdGVzdCBzb3VyY2UgY29kZSBmb3IgT3BlblNTTCBmcm9tCi0gICAgICAgIGh0dHA6Ly93d3cub3BlbnNzbC5vcmcKLQotICAgIFlvdSAocHJvYmFibHkpIGRvbid0IHdhbnQgdGhlICJlbmdpbmUiIGNvZGUuICBGb3IgZXhhbXBsZSwgZG9uJ3QgZ2V0Ci0gICAgICAgIG9wZW5zc2wtZW5naW5lLTAuOS42Zy50YXIuZ3oKLQotICAgIFVucGFjayBpbnRvIHRoZSAiZGlzdCIgZGlyZWN0b3J5LCByZXRhaW5pbmcgdGhlIGZvbGRlciBuYW1lIGZyb20KLSAgICB0aGUgYXJjaGl2ZSAtIGZvciBleGFtcGxlLCB0aGUgbGF0ZXN0IHN0YWJsZSBPcGVuU1NMIHdpbGwgaW5zdGFsbCBhcwotICAgICAgICBkaXN0L29wZW5zc2wtMS4wLjFlCi0KLSAgICBZb3UgbmVlZCB0byB1c2UgdmVyc2lvbiAxLjAuMWUgb2YgT3BlblNTTC4KLQotICAgIFlvdSBjYW4gaW5zdGFsbCB0aGUgTkFTTSBhc3NlbWJsZXIgZnJvbQotICAgICAgICBodHRwOi8vd3d3Lm5hc20udXMvCi0gICAgZm9yIHg4NiBidWlsZHMuICBQdXQgbmFzbXcuZXhlIGFueXdoZXJlIGluIHlvdXIgUEFUSC4KLSAgICBOb3RlOiByZWNlbnQgcmVsZWFzZXMgb2YgbmFzbSBvbmx5IGhhdmUgbmFzbS5leGUuIEp1c3QgcmVuYW1lIGl0IHRvIAotICAgIG5hc213LmV4ZS4KLQotICAgIFlvdSBjYW4gYWxzbyBpbnN0YWxsIEFjdGl2ZVBlcmwgZnJvbQotICAgICAgICBodHRwOi8vd3d3LmFjdGl2ZXN0YXRlLmNvbS9hY3RpdmVwZXJsLwotICAgIGlmIHlvdSBsaWtlIHRvIHVzZSB0aGUgb2ZmaWNpYWwgc291cmNlcyBpbnN0ZWFkIG9mIHRoZSBmaWxlcyBmcm9tIAotICAgIHB5dGhvbidzIHN1YnZlcnNpb24gcmVwb3NpdG9yeS4gVGhlIHN2biB2ZXJzaW9uIGNvbnRhaW5zIHByZS1idWlsZAotICAgIG1ha2VmaWxlcyBhbmQgYXNzZW1ibHkgZmlsZXMuCi0KLSAgICBUaGUgTVNWQyBwcm9qZWN0IHNpbXBseSBpbnZva2VzIFBDL1ZDNi9idWlsZF9zc2wucHkgdG8gcGVyZm9ybQotICAgIHRoZSBidWlsZC4gIFRoaXMgUHl0aG9uIHNjcmlwdCBsb2NhdGVzIGFuZCBidWlsZHMgeW91ciBPcGVuU1NMCi0gICAgaW5zdGFsbGF0aW9uLCB0aGVuIGludm9rZXMgYSBzaW1wbGUgbWFrZWZpbGUgdG8gYnVpbGQgdGhlIGZpbmFsIC5weWQuCi0KLSAgICBidWlsZF9zc2wucHkgYXR0ZW1wdHMgdG8gY2F0Y2ggdGhlIG1vc3QgY29tbW9uIGVycm9ycyAoc3VjaCBhcyBub3QKLSAgICBiZWluZyBhYmxlIHRvIGZpbmQgT3BlblNTTCBzb3VyY2VzLCBvciBub3QgYmVpbmcgYWJsZSB0byBmaW5kIGEgUGVybAotICAgIHRoYXQgd29ya3Mgd2l0aCBPcGVuU1NMKSBhbmQgZ2l2ZSBhIHJlYXNvbmFibGUgZXJyb3IgbWVzc2FnZS4KLSAgICBJZiB5b3UgaGF2ZSBhIHByb2JsZW0gdGhhdCBkb2Vzbid0IHNlZW0gdG8gYmUgaGFuZGxlZCBjb3JyZWN0bHkKLSAgICAoZWcsIHlvdSBrbm93IHlvdSBoYXZlIEFjdGl2ZVBlcmwgYnV0IHdlIGNhbid0IGZpbmQgaXQpLCBwbGVhc2UgdGFrZQotICAgIGEgcGVlayBhdCBidWlsZF9zc2wucHkgYW5kIHN1Z2dlc3QgcGF0Y2hlcy4gIE5vdGUgdGhhdCBidWlsZF9zc2wucHkKLSAgICBzaG91bGQgYmUgYWJsZSB0byBiZSBydW4gZGlyZWN0bHkgZnJvbSB0aGUgY29tbWFuZC1saW5lLgotCi0gICAgYnVpbGRfc3NsLnB5L01TVkMgaXNuJ3QgY2xldmVyIGVub3VnaCB0byBjbGVhbiBPcGVuU1NMIC0geW91IG11c3QgZG8KLSAgICB0aGlzIGJ5IGhhbmQuCi0KLQotWU9VUiBPV04gRVhURU5TSU9OIERMTHMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1JZiB5b3Ugd2FudCB0byBjcmVhdGUgeW91ciBvd24gZXh0ZW5zaW9uIG1vZHVsZSBETEwsIHRoZXJlJ3MgYW4gZXhhbXBsZQotd2l0aCBlYXN5LXRvLWZvbGxvdyBpbnN0cnVjdGlvbnMgaW4gLi4vUEMvZXhhbXBsZS87IHJlYWQgdGhlIGZpbGUKLXJlYWRtZS50eHQgdGhlcmUgZmlyc3QuCmRpZmYgLS1naXQgYS9QQy9WQzYvcm1weWMucHkgYi9QQy9WQzYvcm1weWMucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4ZDY4MjMuLjAwMDAwMDAKLS0tIGEvUEMvVkM2L3JtcHljLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotIyBSZW1vdmUgYWxsIHRoZSAucHljIGFuZCAucHlvIGZpbGVzIHVuZGVyIC4uL0xpYi4KLQotCi1kZWYgZGVsdHJlZShyb290KToKLSAgICBpbXBvcnQgb3MKLSAgICBmcm9tIG9zLnBhdGggaW1wb3J0IGpvaW4KLQotICAgIG5weWMgPSBucHlvID0gMAotICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKHJvb3QpOgotICAgICAgICBmb3IgbmFtZSBpbiBmaWxlczoKLSAgICAgICAgICAgIGRlbGV0ZSA9IEZhbHNlCi0gICAgICAgICAgICBpZiBuYW1lLmVuZHN3aXRoKCcucHljJyk6Ci0gICAgICAgICAgICAgICAgZGVsZXRlID0gVHJ1ZQotICAgICAgICAgICAgICAgIG5weWMgKz0gMQotICAgICAgICAgICAgZWxpZiBuYW1lLmVuZHN3aXRoKCcucHlvJyk6Ci0gICAgICAgICAgICAgICAgZGVsZXRlID0gVHJ1ZQotICAgICAgICAgICAgICAgIG5weW8gKz0gMQotCi0gICAgICAgICAgICBpZiBkZWxldGU6Ci0gICAgICAgICAgICAgICAgb3MucmVtb3ZlKGpvaW4ocm9vdCwgbmFtZSkpCi0KLSAgICByZXR1cm4gbnB5YywgbnB5bwotCi1ucHljLCBucHlvID0gZGVsdHJlZSgiLi4vLi4vTGliIikKLXByaW50IG5weWMsICIucHljIGRlbGV0ZWQsIiwgbnB5bywgIi5weW8gZGVsZXRlZCIKZGlmZiAtLWdpdCBhL1BDL1ZDNi9ydC5iYXQgYi9QQy9WQzYvcnQuYmF0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBhOWVhZGQ3Li4wMDAwMDAwCi0tLSBhL1BDL1ZDNi9ydC5iYXQKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi1AcmVtIFJ1biBUZXN0cy4gIFJ1biB0aGUgcmVncmVzc2lvbiB0ZXN0IHN1aXRlLgotQHJlbSBVc2FnZTogIHJ0IFstZF0gWy1PXSBbLXFdIHJlZ3J0ZXN0X2FyZ3MKLUByZW0gLWQgICBSdW4gRGVidWcgYnVpbGQgKHB5dGhvbl9kLmV4ZSkuICBFbHNlIHJlbGVhc2UgYnVpbGQuCi1AcmVtIC1PICAgUnVuIHB5dGhvbi5leGUgb3IgcHl0aG9uX2QuZXhlIChzZWUgLWQpIHdpdGggLU8uCi1AcmVtIC1xICAgInF1aWNrIiAtLSBub3JtYWxseSB0aGUgdGVzdHMgYXJlIHJ1biB0d2ljZSwgdGhlIGZpcnN0IHRpbWUKLUByZW0gICAgICBhZnRlciBkZWxldGluZyBhbGwgdGhlIC5weVtjb10gZmlsZXMgcmVhY2hhYmxlIGZyb20gTGliLy4KLUByZW0gICAgICAtcSBydW5zIHRoZSB0ZXN0cyBqdXN0IG9uY2UsIGFuZCB3aXRob3V0IGRlbGV0aW5nIC5weVtjb10gZmlsZXMuCi1AcmVtIEFsbCBsZWFkaW5nIGluc3RhbmNlcyBvZiB0aGVzZSBzd2l0Y2hlcyBhcmUgc2hpZnRlZCBvZmYsIGFuZAotQHJlbSB3aGF0ZXZlciByZW1haW5zIGlzIHBhc3NlZCB0byByZWdydGVzdC5weS4gIEZvciBleGFtcGxlLAotQHJlbSAgICAgcnQgLU8gLWQgLXggdGVzdF90aHJlYWQKLUByZW0gcnVucwotQHJlbSAgICAgcHl0aG9uX2QgLU8gLi4vLi4vbGliL3Rlc3QvcmVncnRlc3QucHkgLXggdGVzdF90aHJlYWQKLUByZW0gdHdpY2UsIGFuZAotQHJlbSAgICAgcnQgLXEgLWcgdGVzdF9iaW5hc2NpaQotQHJlbSBydW5zCi1AcmVtICAgICBweXRob25fZCAuLi8uLi9saWIvdGVzdC9yZWdydGVzdC5weSAtZyB0ZXN0X2JpbmFzY2lpCi1AcmVtIHRvIGdlbmVyYXRlIHRoZSBleHBlY3RlZC1vdXRwdXQgZmlsZSBmb3IgYmluYXNjaWkgcXVpY2tseS4KLUBzZXQgX2V4ZT1weXRob24KLUBzZXQgX3Ftb2RlPW5vCi1Ac2V0IF9kYXNoTz0KLUBnb3RvIENoZWNrT3B0cwotOkFnYWluCi1Ac2hpZnQKLTpDaGVja09wdHMKLUBpZiAiJTEiPT0iLU8iIHNldCBfZGFzaE89LU8KLUBpZiAiJTEiPT0iLU8iIGdvdG8gQWdhaW4KLUBpZiAiJTEiPT0iLXEiIHNldCBfcW1vZGU9eWVzCi1AaWYgIiUxIj09Ii1xIiBnb3RvIEFnYWluCi1AaWYgIiUxIj09Ii1kIiBzZXQgX2V4ZT1weXRob25fZAotQGlmICIlMSI9PSItZCIgZ290byBBZ2FpbgotQGlmICIlX3Ftb2RlJSI9PSJ5ZXMiIGdvdG8gUW1vZGUKLUBlY2hvIERlbGV0aW5nIC5weWMvLnB5byBmaWxlcyAuLi4KLUAlX2V4ZSUgcm1weWMucHkKLSVfZXhlJSAlX2Rhc2hPJSAtRSAuLi8uLi9saWIvdGVzdC9yZWdydGVzdC5weSAlMSAlMiAlMyAlNCAlNSAlNiAlNyAlOCAlOQotQGVjaG8gQWJvdXQgdG8gcnVuIGFnYWluIHdpdGhvdXQgZGVsZXRpbmcgLnB5Yy8ucHlvIGZpcnN0OgotQHBhdXNlCi06UW1vZGUKLSVfZXhlJSAlX2Rhc2hPJSAtRSAuLi8uLi9saWIvdGVzdC9yZWdydGVzdC5weSAlMSAlMiAlMyAlNCAlNSAlNiAlNyAlOCAlOQotQHNldCBfZXhlPQotQHNldCBfcW1vZGU9Ci1Ac2V0IF9kYXNoTz0KZGlmZiAtLWdpdCBhL1BDL1ZDNi9zZWxlY3QuZHNwIGIvUEMvVkM2L3NlbGVjdC5kc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwZTUyOGMuLjAwMDAwMDAKLS0tIGEvUEMvVkM2L3NlbGVjdC5kc3AKKysrIC9kZXYvbnVsbApAQCAtMSw5OSArMCwwIEBACi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9InNlbGVjdCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDANCi0jICoqIERPIE5PVCBFRElUICoqDQotDQotIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiIDB4MDEwMg0KLQ0KLUNGRz1zZWxlY3QgLSBXaW4zMiBEZWJ1Zw0KLSFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwNCi0hTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAic2VsZWN0Lm1hayIuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UNCi0hTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJzZWxlY3QubWFrIiBDRkc9InNlbGVjdCAtIFdpbjMyIERlYnVnIg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFICJzZWxlY3QgLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSAic2VsZWN0IC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFIA0KLQ0KLSMgQmVnaW4gUHJvamVjdA0KLSMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwDQotIyBQUk9QIFNjY19Qcm9qTmFtZSAic2VsZWN0Ig0KLSMgUFJPUCBTY2NfTG9jYWxQYXRoICIuLiINCi1DUFA9Y2wuZXhlDQotTVRMPW1pZGwuZXhlDQotUlNDPXJjLmV4ZQ0KLQ0KLSFJRiAgIiQoQ0ZHKSIgPT0gInNlbGVjdCAtIFdpbjMyIFJlbGVhc2UiDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1yZWxlYXNlXHNlbGVjdCINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UIC9XMyAvR1ggL08yIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTUQgL1czIC9HWCAvWmkgL08yIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIk5ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9tYWNoaW5lOkkzODYNCi0jIEFERCBMSU5LMzIgdXNlcjMyLmxpYiBrZXJuZWwzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgd3NvY2szMi5saWIgL25vbG9nbyAvYmFzZToiMHgxRDExMDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL25vZGVmYXVsdGxpYjoibGliYyIgL291dDoiLi9zZWxlY3QucHlkIg0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTFNFSUYgICIkKENGRykiID09ICJzZWxlY3QgLSBXaW4zMiBEZWJ1ZyINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtZGVidWdcc2VsZWN0Ig0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVRkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJfREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0DQotIyBBREQgTElOSzMyIHVzZXIzMi5saWIga2VybmVsMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIHdzb2NrMzIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MUQxMTAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9ub2RlZmF1bHRsaWI6ImxpYmMiIC9ub2RlZmF1bHRsaWI6Im1zdmNydCIgL291dDoiLi9zZWxlY3RfZC5weWQiIC9wZGJ0eXBlOnNlcHQNCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRU5ESUYgDQotDQotIyBCZWdpbiBUYXJnZXQNCi0NCi0jIE5hbWUgInNlbGVjdCAtIFdpbjMyIFJlbGVhc2UiDQotIyBOYW1lICJzZWxlY3QgLSBXaW4zMiBEZWJ1ZyINCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcc2VsZWN0bW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgRW5kIFRhcmdldA0KLSMgRW5kIFByb2plY3QNCmRpZmYgLS1naXQgYS9QQy9WQzYvdGNsODUyLnBhdGNoIGIvUEMvVkM2L3RjbDg1Mi5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWQ2NzgwYS4uMDAwMDAwMAotLS0gYS9QQy9WQzYvdGNsODUyLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotLS0tIHRjbDguNS4yXGdlbmVyaWNcdGNsLmgJRnJpIEp1biAxMyAwMzozNTozOSAyMDA4Ci0rKysgdGNsOC41LjJcZ2VuZXJpY1x0Y2wuaAlTdW4gSmFuICA0IDE2OjUyOjMwIDIwMDkKLUBAIC0zNjcsNyArMzY3LDcgQEAKLSB0eXBlZGVmIHN0cnVjdCBzdGF0aTY0IFRjbF9TdGF0QnVmOwotICMgICAgICAgICBkZWZpbmUgVENMX0xMX01PRElGSUVSCSJMIgotICMgICAgICBlbHNlIC8qIF9fQk9STEFORENfXyAqLwotLSMgICAgICAgICBpZiBfTVNDX1ZFUiA8IDE0MDAgJiYgIWRlZmluZWQoX01fSVg4NikKLSsjICAgICAgICAgaWYgX01TQ19WRVIgPCAxNDAwIC8qJiYgIWRlZmluZWQoX01fSVg4NikqLwotIHR5cGVkZWYgc3RydWN0IF9zdGF0aTY0CVRjbF9TdGF0QnVmOwotICMgICAgICAgICBlbHNlCi0gdHlwZWRlZiBzdHJ1Y3QgX3N0YXQ2NAlUY2xfU3RhdEJ1ZjsKZGlmZiAtLWdpdCBhL1BDL1ZDNi91bmljb2RlZGF0YS5kc3AgYi9QQy9WQzYvdW5pY29kZWRhdGEuZHNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMDRkYjY3Li4wMDAwMDAwCi0tLSBhL1BDL1ZDNi91bmljb2RlZGF0YS5kc3AKKysrIC9kZXYvbnVsbApAQCAtMSw5OSArMCwwIEBACi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9InVuaWNvZGVkYXRhIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMA0KLSMgKiogRE8gTk9UIEVESVQgKioNCi0NCi0jIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIgMHgwMTAyDQotDQotQ0ZHPXVuaWNvZGVkYXRhIC0gV2luMzIgRGVidWcNCi0hTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsDQotIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgInVuaWNvZGVkYXRhLm1hayIuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UNCi0hTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJ1bmljb2RlZGF0YS5tYWsiIENGRz0idW5pY29kZWRhdGEgLSBXaW4zMiBEZWJ1ZyINCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSAidW5pY29kZWRhdGEgLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSAidW5pY29kZWRhdGEgLSBXaW4zMiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQotIU1FU1NBR0UgDQotDQotIyBCZWdpbiBQcm9qZWN0DQotIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDANCi0jIFBST1AgU2NjX1Byb2pOYW1lICJ1bmljb2RlZGF0YSINCi0jIFBST1AgU2NjX0xvY2FsUGF0aCAiLi4iDQotQ1BQPWNsLmV4ZQ0KLU1UTD1taWRsLmV4ZQ0KLVJTQz1yYy5leGUNCi0NCi0hSUYgICIkKENGRykiID09ICJ1bmljb2RlZGF0YSAtIFdpbjMyIFJlbGVhc2UiDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1yZWxlYXNlXHVuaWNvZGVkYXRhIg0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVQgL1czIC9HWCAvTzIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL0QgIl9NQkNTIiAvRCAiX1VTUkRMTCIgL0QgIk1NQVBfRVhQT1JUUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9PMiAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvRCAiX01CQ1MiIC9EICJfVVNSRExMIiAvRCAiTU1BUF9FWFBPUlRTIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4YzA5IC9kICJOREVCVUciDQotIyBBREQgUlNDIC9sIDB4YzA5IC9kICJOREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvZGxsIC9tYWNoaW5lOkkzODYNCi0jIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvYmFzZToiMHgxRDEyMDAwMCIgL2RsbCAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vdW5pY29kZWRhdGEucHlkIg0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTFNFSUYgICIkKENGRykiID09ICJ1bmljb2RlZGF0YSAtIFdpbjMyIERlYnVnIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1kZWJ1Z1x1bmljb2RlZGF0YSINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UZCAvVzMgL0dtIC9HWCAvWkkgL09kIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9EICJfTUJDUyIgL0QgIl9VU1JETEwiIC9EICJNTUFQX0VYUE9SVFMiIC9ZWCAvRkQgL0daIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9EICJfTUJDUyIgL0QgIl9VU1JETEwiIC9EICJNTUFQX0VYUE9SVFMiIC9ZWCAvRkQgL0daIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4YzA5IC9kICJfREVCVUciDQotIyBBREQgUlNDIC9sIDB4YzA5IC9kICJfREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCi0jIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvYmFzZToiMHgxRDEyMDAwMCIgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL3VuaWNvZGVkYXRhX2QucHlkIiAvcGRidHlwZTpzZXB0DQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVORElGIA0KLQ0KLSMgQmVnaW4gVGFyZ2V0DQotDQotIyBOYW1lICJ1bmljb2RlZGF0YSAtIFdpbjMyIFJlbGVhc2UiDQotIyBOYW1lICJ1bmljb2RlZGF0YSAtIFdpbjMyIERlYnVnIg0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1x1bmljb2RlZGF0YS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEVuZCBUYXJnZXQNCi0jIEVuZCBQcm9qZWN0DQpkaWZmIC0tZ2l0IGEvUEMvVkM2L3c5eHBvcGVuLmRzcCBiL1BDL1ZDNi93OXhwb3Blbi5kc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhNjQwM2MuLjAwMDAwMDAKLS0tIGEvUEMvVkM2L3c5eHBvcGVuLmRzcAorKysgL2Rldi9udWxsCkBAIC0xLDk3ICswLDAgQEAKLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0idzl4cG9wZW4iIC0gUGFja2FnZSBPd25lcj08ND4NCi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQotIyAqKiBETyBOT1QgRURJVCAqKg0KLQ0KLSMgVEFSR1RZUEUgIldpbjMyICh4ODYpIEFwcGxpY2F0aW9uIiAweDAxMDENCi0NCi1DRkc9dzl4cG9wZW4gLSBXaW4zMiBEZWJ1Zw0KLSFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwNCi0hTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAidzl4cG9wZW4ubWFrIi4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQ0KLSFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgInc5eHBvcGVuLm1hayIgQ0ZHPSJ3OXhwb3BlbiAtIFdpbjMyIERlYnVnIg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFICJ3OXhwb3BlbiAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgQXBwbGljYXRpb24iKQ0KLSFNRVNTQUdFICJ3OXhwb3BlbiAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIEFwcGxpY2F0aW9uIikNCi0hTUVTU0FHRSANCi0NCi0jIEJlZ2luIFByb2plY3QNCi0jIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMA0KLSMgUFJPUCBTY2NfUHJvak5hbWUgIiINCi0jIFBST1AgU2NjX0xvY2FsUGF0aCAiIg0KLUNQUD1jbC5leGUNCi1NVEw9bWlkbC5leGUNCi1SU0M9cmMuZXhlDQotDQotIUlGICAiJChDRkcpIiA9PSAidzl4cG9wZW4gLSBXaW4zMiBSZWxlYXNlIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtcmVsZWFzZVx3OXhwb3BlbiINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvVzMgL0dYIC9PMiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvRCAiX01CQ1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTUQgL1czIC9HWCAvTzIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL0QgIl9NQkNTIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4YzA5IC9kICJOREVCVUciDQotIyBBREQgUlNDIC9sIDB4YzA5IC9kICJOREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL21hY2hpbmU6STM4Ng0KLSMgQUREIExJTkszMiB1c2VyMzIubGliIC9ub2xvZ28gL21hY2hpbmU6STM4Ng0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTFNFSUYgICIkKENGRykiID09ICJ3OXhwb3BlbiAtIFdpbjMyIERlYnVnIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1kZWJ1Z1x3OXhwb3BlbiINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvVzMgL0dtIC9HWCAvWkkgL09kIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9EICJfTUJDUyIgL1lYIC9GRCAvR1ogL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL0QgIl9NQkNTIiAvWVggL0ZEIC9HWiAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweGMwOSAvZCAiX0RFQlVHIg0KLSMgQUREIFJTQyAvbCAweGMwOSAvZCAiX0RFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCi0jIEFERCBMSU5LMzIgdXNlcjMyLmxpYiAvbm9sb2dvIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vdzl4cG9wZW5fZC5leGUiIC9wZGJ0eXBlOnNlcHQNCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRU5ESUYgDQotDQotIyBCZWdpbiBUYXJnZXQNCi0NCi0jIE5hbWUgInc5eHBvcGVuIC0gV2luMzIgUmVsZWFzZSINCi0jIE5hbWUgInc5eHBvcGVuIC0gV2luMzIgRGVidWciDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlx3OXhwb3Blbi5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEVuZCBUYXJnZXQNCi0jIEVuZCBQcm9qZWN0DQpkaWZmIC0tZ2l0IGEvUEMvVkM2L3dpbnNvdW5kLmRzcCBiL1BDL1ZDNi93aW5zb3VuZC5kc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlMDliOWIuLjAwMDAwMDAKLS0tIGEvUEMvVkM2L3dpbnNvdW5kLmRzcAorKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0id2luc291bmQiIC0gUGFja2FnZSBPd25lcj08ND4NCi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQotIyAqKiBETyBOT1QgRURJVCAqKg0KLQ0KLSMgVEFSR1RZUEUgIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IiAweDAxMDINCi0NCi1DRkc9d2luc291bmQgLSBXaW4zMiBEZWJ1Zw0KLSFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwNCi0hTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAid2luc291bmQubWFrIi4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQ0KLSFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgIndpbnNvdW5kLm1hayIgQ0ZHPSJ3aW5zb3VuZCAtIFdpbjMyIERlYnVnIg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFICJ3aW5zb3VuZCAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFICJ3aW5zb3VuZCAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSANCi0NCi0jIEJlZ2luIFByb2plY3QNCi0jIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMA0KLSMgUFJPUCBTY2NfUHJvak5hbWUgIndpbnNvdW5kIg0KLSMgUFJPUCBTY2NfTG9jYWxQYXRoICIuLlxwYyINCi1DUFA9Y2wuZXhlDQotTVRMPW1pZGwuZXhlDQotUlNDPXJjLmV4ZQ0KLQ0KLSFJRiAgIiQoQ0ZHKSIgPT0gIndpbnNvdW5kIC0gV2luMzIgUmVsZWFzZSINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLXJlbGVhc2Vcd2luc291bmQiDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVCAvVzMgL0dYIC9PMiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvRCAiX01CQ1MiIC9EICJfVVNSRExMIiAvRCAiV0lOU09VTkRfRVhQT1JUUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9PMiAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvRCAiX01CQ1MiIC9EICJfVVNSRExMIiAvRCAiV0lOU09VTkRfRVhQT1JUUyIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweGMwOSAvZCAiTkRFQlVHIg0KLSMgQUREIFJTQyAvbCAweGMwOSAvZCAiTkRFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL2RsbCAvbWFjaGluZTpJMzg2DQotIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB3aW5tbS5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFEMTYwMDAwIiAvZGxsIC9tYWNoaW5lOkkzODYgL291dDoiLi93aW5zb3VuZC5weWQiDQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gIndpbnNvdW5kIC0gV2luMzIgRGVidWciDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLWRlYnVnXHdpbnNvdW5kIg0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVRkIC9XMyAvR20gL0dYIC9aSSAvT2QgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL0QgIl9NQkNTIiAvRCAiX1VTUkRMTCIgL0QgIldJTlNPVU5EX0VYUE9SVFMiIC9ZWCAvRkQgL0daIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9EICJfTUJDUyIgL0QgIl9VU1JETEwiIC9EICJXSU5TT1VORF9FWFBPUlRTIiAvWVggL0ZEIC9HWiAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweGMwOSAvZCAiX0RFQlVHIg0KLSMgQUREIFJTQyAvbCAweGMwOSAvZCAiX0RFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0DQotIyBBREQgTElOSzMyIHVzZXIzMi5saWIga2VybmVsMzIubGliIHdpbm1tLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFEMTYwMDAwIiAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vd2luc291bmRfZC5weWQiIC9wZGJ0eXBlOnNlcHQNCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRU5ESUYgDQotDQotIyBCZWdpbiBUYXJnZXQNCi0NCi0jIE5hbWUgIndpbnNvdW5kIC0gV2luMzIgUmVsZWFzZSINCi0jIE5hbWUgIndpbnNvdW5kIC0gV2luMzIgRGVidWciDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlx3aW5zb3VuZC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEVuZCBUYXJnZXQNCi0jIEVuZCBQcm9qZWN0DQpkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvVW5pbnN0YWwud3NlIGIvUEMvVlM3LjEvVW5pbnN0YWwud3NlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTZkZDMwLi4wMDAwMDAwCi0tLSBhL1BDL1ZTNy4xL1VuaW5zdGFsLndzZQorKysgL2Rldi9udWxsCkBAIC0xLDUxNCArMCwwIEBACi1Eb2N1bWVudCBUeXBlOiBXU0UKLWl0ZW06IEdsb2JhbAotICBWZXJzaW9uPTguMTQKLSAgRmxhZ3M9MDAwMDAxMDAKLSAgU3BsaXQ9MTQyMAotICBMYW5ndWFnZXM9NjUgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAKLSAgQ29weSBEZWZhdWx0PTEKLSAgSmFwYW5lc2UgRm9udCBOYW1lPU1TIEdvdGhpYwotICBKYXBhbmVzZSBGb250IFNpemU9MTAKLSAgU3RhcnQgR3JhZGllbnQ9MCAwIDI1NQotICBFbmQgR3JhZGllbnQ9MCAwIDAKLSAgV2luZG93cyBGbGFncz0wMDAwMDAwMDAwMDAwMDAwMDAwMDEwMTAwMDAwMTAwMAotICBNZXNzYWdlIEZvbnQ9TVMgU2FucyBTZXJpZgotICBGb250IFNpemU9OAotICBEaXNrIExhYmVsPUdMQlMKLSAgRGlzayBGaWxlbmFtZT1JTlNUQUxMCi0gIFBhdGNoIEZsYWdzPTAwMDAwMDAwMDAwMDAwMDEKLSAgUGF0Y2ggVGhyZXNob2xkPTIwMAotICBQYXRjaCBNZW1vcnk9NDA5NgotICBQZXItVXNlciBWZXJzaW9uIElEPTEKLSAgQ3J5c3RhbCBGb3JtYXQ9MTAxMTExMDAxMDExMDAwMDAwMTAwMDEwMDEwMDEwMDEKLSAgU3RlcCBWaWV3PSZQcm9wZXJ0aWVzCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PU5vdGUgZnJvbSBUaW06ICBUaGlzIGlzIGEgdmVyYmF0aW0gY29weSBvZiBXaXNlJ3MgVW5pbnN0YWwud3NlLCBhbHRlcmVkIGF0IHRoZSBlbmQgdG8gd3JpdGUKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9dW5pbnN0YWxsIGluZm8gdW5kZXIgSEtDVSBpbnN0ZWFkIG9mIEhLTE0gaWYgb3VyIERPQURNSU4gdmFyIGlzIGZhbHNlLgotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9ICAgICBJbnN0YWxsIFN1cHBvcnQgZm9yIHVuaW5zdGFsbGluZyB0aGUgYXBwbGljYXRpb24uCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9VU5JTlNUQUxMX1BBVEgKLSAgVmFsdWU9JV9MT0dGSUxFX1BBVEhfJQotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9VU5JTlNUQUxMX1BBVEgKLSAgVmFsdWU9JVVOSU5TVEFMTF9QQVRIJVxVTldJU0UuRVhFCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIElmCi0gIFZhcmlhYmxlPV9FWEVfT1NfVFlQRV8KLSAgVmFsdWU9V0lOMzIKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0lX1dJU0VfJVxVTldJU0UzMi5FWEUKLSAgRGVzdGluYXRpb249JVVOSU5TVEFMTF9QQVRIJQotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIEVsc2UKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0lX1dJU0VfJVxVTldJU0UuRVhFCi0gIERlc3RpbmF0aW9uPSVVTklOU1RBTExfUEFUSCUKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBFbmQKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PSAgICAgSW5zdGFsbCBTdXBwb3J0IGZvciBtdWx0aXBsZSBsYW5ndWFnZXMKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1VTklOU1RBTExfTEFORwotICBWYWx1ZT0lVU5JTlNUQUxMX1BBVEglCi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1VTklOU1RBTExfTEFORwotICBWYWx1ZT0lVU5JTlNUQUxMX0xBTkclXFVOV0lTRS5JTkkKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgSWYKLSAgVmFyaWFibGU9X0xBTkdfTElTVF8KLSAgVmFsdWU9QwotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBJZgotICBWYWx1ZT0lX1dJU0VfJVxMQU5HVUFHRVxVTldJU0UuRlJBCi0gIEZsYWdzPTAwMDAwMDExCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1MQU5HCi0gIFZhbHVlPSVfTEFOR19DX05BTUVfJQotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPSVfV0lTRV8lXExBTkdVQUdFXFVOV0lTRS5GUkEKLSAgRGVzdGluYXRpb249JVVOSU5TVEFMTF9MQU5HJQotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBFbmQKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgRW5kCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIElmCi0gIFZhcmlhYmxlPV9MQU5HX0xJU1RfCi0gIFZhbHVlPUQKLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgSWYKLSAgVmFsdWU9JV9XSVNFXyVcTEFOR1VBR0VcVU5XSVNFLkZSQQotICBGbGFncz0wMDAwMDAxMQotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9TEFORwotICBWYWx1ZT0lX0xBTkdfRF9OQU1FXyUKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0lX1dJU0VfJVxMQU5HVUFHRVxVTldJU0UuRlJBCi0gIERlc3RpbmF0aW9uPSVVTklOU1RBTExfTEFORyUKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgRW5kCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIEVuZAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBJZgotICBWYXJpYWJsZT1fTEFOR19MSVNUXwotICBWYWx1ZT1FCi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIElmCi0gIFZhbHVlPSVfV0lTRV8lXExBTkdVQUdFXFVOV0lTRS5ERVUKLSAgRmxhZ3M9MDAwMDAwMTEKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPUxBTkcKLSAgVmFsdWU9JV9MQU5HX0VfTkFNRV8lCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9JV9XSVNFXyVcTEFOR1VBR0VcVU5XSVNFLkRFVQotICBEZXN0aW5hdGlvbj0lVU5JTlNUQUxMX0xBTkclCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIEVuZAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBFbmQKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgSWYKLSAgVmFyaWFibGU9X0xBTkdfTElTVF8KLSAgVmFsdWU9RgotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBJZgotICBWYWx1ZT0lX1dJU0VfJVxMQU5HVUFHRVxVTldJU0UuUFRHCi0gIEZsYWdzPTAwMDAwMDExCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1MQU5HCi0gIFZhbHVlPSVfTEFOR19GX05BTUVfJQotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPSVfV0lTRV8lXExBTkdVQUdFXFVOV0lTRS5QVEcKLSAgRGVzdGluYXRpb249JVVOSU5TVEFMTF9MQU5HJQotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBFbmQKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgRW5kCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIElmCi0gIFZhcmlhYmxlPV9MQU5HX0xJU1RfCi0gIFZhbHVlPUcKLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgSWYKLSAgVmFsdWU9JV9XSVNFXyVcTEFOR1VBR0VcVU5XSVNFLkVTUAotICBGbGFncz0wMDAwMDAxMQotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9TEFORwotICBWYWx1ZT0lX0xBTkdfR19OQU1FXyUKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0lX1dJU0VfJVxMQU5HVUFHRVxVTldJU0UuRVNQCi0gIERlc3RpbmF0aW9uPSVVTklOU1RBTExfTEFORyUKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgRW5kCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIEVuZAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBJZgotICBWYXJpYWJsZT1fTEFOR19MSVNUXwotICBWYWx1ZT1ICi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIElmCi0gIFZhbHVlPSVfV0lTRV8lXExBTkdVQUdFXFVOV0lTRS5FU1AKLSAgRmxhZ3M9MDAwMDAwMTEKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPUxBTkcKLSAgVmFsdWU9JV9MQU5HX0hfTkFNRV8lCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9JV9XSVNFXyVcTEFOR1VBR0VcVU5XSVNFLkVTUAotICBEZXN0aW5hdGlvbj0lVU5JTlNUQUxMX0xBTkclCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIEVuZAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBFbmQKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgSWYKLSAgVmFyaWFibGU9X0xBTkdfTElTVF8KLSAgVmFsdWU9SQotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBJZgotICBWYWx1ZT0lX1dJU0VfJVxMQU5HVUFHRVxVTldJU0UuSVRBCi0gIEZsYWdzPTAwMDAwMDExCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1MQU5HCi0gIFZhbHVlPSVfTEFOR19JX05BTUVfJQotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPSVfV0lTRV8lXExBTkdVQUdFXFVOV0lTRS5JVEEKLSAgRGVzdGluYXRpb249JVVOSU5TVEFMTF9MQU5HJQotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBFbmQKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgRW5kCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIElmCi0gIFZhcmlhYmxlPV9MQU5HX0xJU1RfCi0gIFZhbHVlPUoKLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgSWYKLSAgVmFsdWU9JV9XSVNFXyVcTEFOR1VBR0VcVU5XSVNFLkRBTgotICBGbGFncz0wMDAwMDAxMQotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9TEFORwotICBWYWx1ZT0lX0xBTkdfSl9OQU1FXyUKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0lX1dJU0VfJVxMQU5HVUFHRVxVTldJU0UuREFOCi0gIERlc3RpbmF0aW9uPSVVTklOU1RBTExfTEFORyUKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgRW5kCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIEVuZAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBJZgotICBWYXJpYWJsZT1fTEFOR19MSVNUXwotICBWYWx1ZT1LCi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIElmCi0gIFZhbHVlPSVfV0lTRV8lXExBTkdVQUdFXFVOV0lTRS5GSU4KLSAgRmxhZ3M9MDAwMDAwMTEKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPUxBTkcKLSAgVmFsdWU9JV9MQU5HX0tfTkFNRV8lCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9JV9XSVNFXyVcTEFOR1VBR0VcVU5XSVNFLkZJTgotICBEZXN0aW5hdGlvbj0lVU5JTlNUQUxMX0xBTkclCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIEVuZAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBFbmQKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgSWYKLSAgVmFyaWFibGU9X0xBTkdfTElTVF8KLSAgVmFsdWU9TAotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBJZgotICBWYWx1ZT0lX1dJU0VfJVxMQU5HVUFHRVxVTldJU0UuSVNMCi0gIEZsYWdzPTAwMDAwMDExCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1MQU5HCi0gIFZhbHVlPSVfTEFOR19MX05BTUVfJQotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPSVfV0lTRV8lXExBTkdVQUdFXFVOV0lTRS5JU0wKLSAgRGVzdGluYXRpb249JVVOSU5TVEFMTF9MQU5HJQotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBFbmQKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgRW5kCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIElmCi0gIFZhcmlhYmxlPV9MQU5HX0xJU1RfCi0gIFZhbHVlPU0KLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgSWYKLSAgVmFsdWU9JV9XSVNFXyVcTEFOR1VBR0VcVU5XSVNFLk5MRAotICBGbGFncz0wMDAwMDAxMQotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9TEFORwotICBWYWx1ZT0lX0xBTkdfTV9OQU1FXyUKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0lX1dJU0VfJVxMQU5HVUFHRVxVTldJU0UuTkxECi0gIERlc3RpbmF0aW9uPSVVTklOU1RBTExfTEFORyUKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgRW5kCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIEVuZAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBJZgotICBWYXJpYWJsZT1fTEFOR19MSVNUXwotICBWYWx1ZT1OCi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIElmCi0gIFZhbHVlPSVfV0lTRV8lXExBTkdVQUdFXFVOV0lTRS5OT1IKLSAgRmxhZ3M9MDAwMDAwMTEKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPUxBTkcKLSAgVmFsdWU9JV9MQU5HX05fTkFNRV8lCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9JV9XSVNFXyVcTEFOR1VBR0VcVU5XSVNFLk5PUgotICBEZXN0aW5hdGlvbj0lVU5JTlNUQUxMX0xBTkclCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIEVuZAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBFbmQKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgSWYKLSAgVmFyaWFibGU9X0xBTkdfTElTVF8KLSAgVmFsdWU9TwotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBJZgotICBWYWx1ZT0lX1dJU0VfJVxMQU5HVUFHRVxVTldJU0UuU1ZFCi0gIEZsYWdzPTAwMDAwMDExCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1MQU5HCi0gIFZhbHVlPSVfTEFOR19PX05BTUVfJQotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPSVfV0lTRV8lXExBTkdVQUdFXFVOV0lTRS5TVkUKLSAgRGVzdGluYXRpb249JVVOSU5TVEFMTF9MQU5HJQotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBFbmQKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgRW5kCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIElmCi0gIFZhcmlhYmxlPV9MQU5HX0xJU1RfCi0gIFZhbHVlPVAKLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgSWYKLSAgVmFsdWU9JV9XSVNFXyVcTEFOR1VBR0VcVU5XSVNFLkpQTgotICBGbGFncz0wMDAwMDAxMQotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9TEFORwotICBWYWx1ZT0lX0xBTkdfUF9OQU1FXyUKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0lX1dJU0VfJVxMQU5HVUFHRVxVTldJU0UuSlBOCi0gIERlc3RpbmF0aW9uPSVVTklOU1RBTExfTEFORyUKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgRW5kCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIEVuZAotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9ICAgICBJbnN0YWxsIHRoZSBhZGQvcmVtb3ZlIG9yIHVuaW5zdGFsbCBpY29uCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9VU5JTlNUQUxMX1BBVEgKLSAgVmFsdWU9JVVOSU5TVEFMTF9QQVRIJQotICBGbGFncz0wMDAxMDEwMAotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9SU5TVF9MT0dfUEFUSAotICBWYWx1ZT0lX0xPR0ZJTEVfUEFUSF8lCi0gIEZsYWdzPTAwMDEwMTAwCi1lbmQKLWl0ZW06IENoZWNrIENvbmZpZ3VyYXRpb24KLSAgRmxhZ3M9MTAxMTEwMTEKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPURPQURNSU4KLSAgVmFsdWU9MQotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1Xcml0ZSB1bmluc3RhbGwgaW5mbyB1bmRlciBIS0xNLiAgVGhpcyBpZi9lbHNlL2VuZCBibG9jayBhZGRlZCBieSBUaW0uCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxNaWNyb3NvZnRcV2luZG93c1xDdXJyZW50VmVyc2lvblxVbmluc3RhbGxcJUFQUFRJVExFJQotICBOZXcgVmFsdWU9JUFQUFRJVExFJQotICBWYWx1ZSBOYW1lPURpc3BsYXlOYW1lCi0gIFJvb3Q9MgotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcTWljcm9zb2Z0XFdpbmRvd3NcQ3VycmVudFZlcnNpb25cVW5pbnN0YWxsXCVBUFBUSVRMRSUKLSAgTmV3IFZhbHVlPSVVTklOU1RBTExfUEFUSCUgJUlOU1RfTE9HX1BBVEglCi0gIE5ldyBWYWx1ZT0KLSAgVmFsdWUgTmFtZT1Vbmluc3RhbGxTdHJpbmcKLSAgUm9vdD0yCi1lbmQKLWl0ZW06IEVsc2UgU3RhdGVtZW50Ci1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PVRoZSBzYW1lLCBidXQgd3JpdGUgdW5kZXIgSEtDVSBpbnN0ZWFkLgotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcTWljcm9zb2Z0XFdpbmRvd3NcQ3VycmVudFZlcnNpb25cVW5pbnN0YWxsXCVBUFBUSVRMRSUKLSAgTmV3IFZhbHVlPSVBUFBUSVRMRSUKLSAgVmFsdWUgTmFtZT1EaXNwbGF5TmFtZQotICBSb290PTEKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXE1pY3Jvc29mdFxXaW5kb3dzXEN1cnJlbnRWZXJzaW9uXFVuaW5zdGFsbFwlQVBQVElUTEUlCi0gIE5ldyBWYWx1ZT0lVU5JTlNUQUxMX1BBVEglICVJTlNUX0xPR19QQVRIJQotICBOZXcgVmFsdWU9Ci0gIFZhbHVlIE5hbWU9VW5pbnN0YWxsU3RyaW5nCi0gIFJvb3Q9MQotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogRWxzZSBTdGF0ZW1lbnQKLWVuZAotaXRlbTogQWRkIFByb2dNYW4gSWNvbgotICBHcm91cD0lR1JPVVAlCi0gIEljb24gTmFtZT1Vbmluc3RhbGwgJUFQUFRJVExFJQotICBDb21tYW5kIExpbmU9JVVOSU5TVEFMTF9QQVRIJSAlSU5TVF9MT0dfUEFUSCUKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IENoZWNrIENvbmZpZ3VyYXRpb24KLSAgRmxhZ3M9MTExMTAwMTAKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPURPQlJBTkQKLSAgVmFsdWU9MQotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MgotICBpdGVtOiBLZXkKLSAgICBLZXk9U29mdHdhcmVcTWljcm9zb2Z0XFdpbmRvd3NcQ3VycmVudFZlcnNpb25cVW5pbnN0YWxsXCVBUFBUSVRMRSUKLSAgICBOZXcgVmFsdWU9JUNPTVBBTlklCi0gICAgVmFsdWUgTmFtZT1SZWdDb21wYW55Ci0gICAgUm9vdD0yCi0gIGVuZAotICBpdGVtOiBLZXkKLSAgICBLZXk9U29mdHdhcmVcTWljcm9zb2Z0XFdpbmRvd3NcQ3VycmVudFZlcnNpb25cVW5pbnN0YWxsXCVBUFBUSVRMRSUKLSAgICBOZXcgVmFsdWU9JU5BTUUlCi0gICAgVmFsdWUgTmFtZT1SZWdPd25lcgotICAgIFJvb3Q9MgotICBlbmQKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCmRpZmYgLS1naXQgYS9QQy9WUzcuMS9fY3R5cGVzLnZjcHJvaiBiL1BDL1ZTNy4xL19jdHlwZXMudmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMzU5ZDg4Li4wMDAwMDAwCi0tLSBhL1BDL1ZTNy4xL19jdHlwZXMudmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsMzExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI3LjEwIg0KLQlOYW1lPSJfY3R5cGVzIg0KLQlQcm9qZWN0R1VJRD0ie0YyMkY0MEY0LUQzMTgtNDBEQy05NkIzLTg4REM4MUNFMDg5NH0iDQotCVJvb3ROYW1lc3BhY2U9Il9jdHlwZXMiDQotCUtleXdvcmQ9IldpbjMyUHJvaiI+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiIvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtZGVidWdcX2N0eXBlcyINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQywuLlwuLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtXSU4zMjtfREVCVUc7X1dJTkRPV1MiDQotCQkJCU1pbmltYWxSZWJ1aWxkPSJGQUxTRSINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMyINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJGQUxTRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIvRVhQT1JUOkRsbEdldENsYXNzT2JqZWN0LFBSSVZBVEUgL0VYUE9SVDpEbGxDYW5VbmxvYWROb3csUFJJVkFURSINCi0JCQkJT3V0cHV0RmlsZT0iLi9fY3R5cGVzX2QucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vX2N0eXBlc19kLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDFBMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL19jdHlwZXNfZC5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1yZWxlYXNlXF9jdHlwZXMiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQywuLlwuLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtXSU4zMjtOREVCVUc7X1dJTkRPV1MiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJGQUxTRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMCINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIvRVhQT1JUOkRsbEdldENsYXNzT2JqZWN0LFBSSVZBVEUgL0VYUE9SVDpEbGxDYW5VbmxvYWROb3csUFJJVkFURSINCi0JCQkJT3V0cHV0RmlsZT0iLi9fY3R5cGVzLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iRkFMU0UiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9fY3R5cGVzLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIwIg0KLQkJCQlPcHRpbWl6ZVJlZmVyZW5jZXM9IjAiDQotCQkJCUVuYWJsZUNPTURBVEZvbGRpbmc9IjAiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMUEwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vX2N0eXBlcy5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlQU1ENjR8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iYW1kNjQtdGVtcC1yZWxlYXNlXF9jdHlwZXMiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9VU0VDTDpNU19PUFRFUk9OIC9HUy0iDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDLC4uXC4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2YyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO1dJTjMyO05ERUJVRztfV0lORE9XUyINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iRkFMU0UiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9NQUNISU5FOkFNRDY0IC9VU0VMSU5LOk1TX1NESyAvRVhQT1JUOkRsbEdldENsYXNzT2JqZWN0LFBSSVZBVEUgL0VYUE9SVDpEbGxDYW5VbmxvYWROb3csUFJJVkFURSINCi0JCQkJT3V0cHV0RmlsZT0iLi9fY3R5cGVzLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iRkFMU0UiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9fY3R5cGVzLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIwIg0KLQkJCQlPcHRpbWl6ZVJlZmVyZW5jZXM9IjAiDQotCQkJCUVuYWJsZUNPTURBVEZvbGRpbmc9IjAiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMUEwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vX2N0eXBlcy5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlSXRhbml1bXxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJpYTY0LXRlbXAtcmVsZWFzZVxfY3R5cGVzIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUNoYXJhY3RlclNldD0iMiI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvVVNFQ0w6TVNfSVRBTklVTSINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMsLi5cLi5cTW9kdWxlc1xfY3R5cGVzXGxpYmZmaV9tc3ZjIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7V0lOMzI7TkRFQlVHO19XSU5ET1dTIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJGQUxTRSINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL01BQ0hJTkU6SUE2NCAvVVNFTElOSzpNU19TREsgL0VYUE9SVDpEbGxHZXRDbGFzc09iamVjdCxQUklWQVRFIC9FWFBPUlQ6RGxsQ2FuVW5sb2FkTm93LFBSSVZBVEUiDQotCQkJCU91dHB1dEZpbGU9Ii4vX2N0eXBlcy5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IkZBTFNFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vX2N0eXBlcy5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMCINCi0JCQkJT3B0aW1pemVSZWZlcmVuY2VzPSIwIg0KLQkJCQlFbmFibGVDT01EQVRGb2xkaW5nPSIwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDFBMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL19jdHlwZXMubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xfY3R5cGVzLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xjYWxsYmFja3MuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfY3R5cGVzXGNhbGxwcm9jLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xjZmllbGQuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfY3R5cGVzXGxpYmZmaV9tc3ZjXGZmaS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcbWFsbG9jX2Nsb3N1cmUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfY3R5cGVzXGxpYmZmaV9tc3ZjXHByZXBfY2lmLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xzdGdkaWN0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2Y1x3aW4zMi5jIj4NCi0JCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJTmFtZT0iUmVsZWFzZUFNRDY0fFdpbjMyIg0KLQkJCQlFeGNsdWRlZEZyb21CdWlsZD0iVFJVRSI+DQotCQkJCTxUb29sDQotCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIi8+DQotCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmNcd2luNjQuYXNtIj4NCi0JCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJUUlVFIj4NCi0JCQkJPFRvb2wNCi0JCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQkJRXhjbHVkZWRGcm9tQnVpbGQ9IlRSVUUiPg0KLQkJCQk8VG9vbA0KLQkJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQlOYW1lPSJSZWxlYXNlQU1ENjR8V2luMzIiPg0KLQkJCQk8VG9vbA0KLQkJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJCQlDb21tYW5kTGluZT0iYW1kNjRfbWw2NCAvbm9sb2dvIC9jIC9GbyAmcXVvdDskKEludERpcilcd2luNjQub2JqJnF1b3Q7ICZxdW90OyQoSW5wdXRQYXRoKSZxdW90Ow0KLSINCi0JCQkJCU91dHB1dHM9IiZxdW90OyQoSW50RGlyKVx3aW42NC5vYmomcXVvdDsiLz4NCi0JCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQlOYW1lPSJSZWxlYXNlSXRhbml1bXxXaW4zMiINCi0JCQkJRXhjbHVkZWRGcm9tQnVpbGQ9IlRSVUUiPg0KLQkJCQk8VG9vbA0KLQkJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJPC9GaWxlPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzcuMS9fY3R5cGVzX3Rlc3QudmNwcm9qIGIvUEMvVlM3LjEvX2N0eXBlc190ZXN0LnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZThlOGEyYy4uMDAwMDAwMAotLS0gYS9QQy9WUzcuMS9fY3R5cGVzX3Rlc3QudmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsMjQyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI3LjEwIg0KLQlOYW1lPSJfY3R5cGVzX3Rlc3QiDQotCVByb2plY3RHVUlEPSJ7OENGMzM0RDktNEY4Mi00MkVCLTk3QUYtODM1OTJDNUFGRDJGfSINCi0JS2V5d29yZD0iV2luMzJQcm9qIj4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIi8+DQotCTwvUGxhdGZvcm1zPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1kZWJ1Z1xfY3R5cGVzX3Rlc3QiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtXSU4zMjtfREVCVUc7X1dJTkRPV1MiDQotCQkJCU1pbmltYWxSZWJ1aWxkPSJGQUxTRSINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMyINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi9fY3R5cGVzX3Rlc3RfZC5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9fY3R5cGVzX3Rlc3RfZC5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL19jdHlwZXNfdGVzdF9kLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLXJlbGVhc2VcX2N0eXBlc190ZXN0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUNoYXJhY3RlclNldD0iMiI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtXSU4zMjtOREVCVUc7X1dJTkRPV1MiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIwIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi9fY3R5cGVzX3Rlc3QucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJGQUxTRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL19jdHlwZXNfdGVzdC5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMCINCi0JCQkJT3B0aW1pemVSZWZlcmVuY2VzPSIwIg0KLQkJCQlFbmFibGVDT01EQVRGb2xkaW5nPSIwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vX2N0eXBlc190ZXN0LmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2VJdGFuaXVtfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9ImlhNjQtdGVtcC1yZWxlYXNlXF9jdHlwZXNfdGVzdCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL1VTRUNMOk1TX0lUQU5JVU0iDQotCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO1dJTjMyO19ERUJVRztfV0lORE9XUyINCi0JCQkJTWluaW1hbFJlYnVpbGQ9IkZBTFNFIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIzIg0KLQkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJGQUxTRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvTUFDSElORTpJQTY0IC9VU0VMSU5LOk1TX1NESyINCi0JCQkJT3V0cHV0RmlsZT0iLi9fY3R5cGVzX3Rlc3RfZC5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9fY3R5cGVzX3Rlc3RfZC5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL19jdHlwZXNfdGVzdF9kLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2VBTUQ2NHxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJhbWQ2NC10ZW1wLXJlbGVhc2VcX2N0eXBlc190ZXN0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUNoYXJhY3RlclNldD0iMiI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvVVNFQ0w6TVNfT1BURVJPTiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtXSU4zMjtOREVCVUc7X1dJTkRPV1MiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9IkZBTFNFIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvTUFDSElORTpBTUQ2NCAvVVNFTElOSzpNU19TREsiDQotCQkJCU91dHB1dEZpbGU9Ii4vX2N0eXBlc190ZXN0LnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iRkFMU0UiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9fY3R5cGVzX3Rlc3QucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjAiDQotCQkJCU9wdGltaXplUmVmZXJlbmNlcz0iMCINCi0JCQkJRW5hYmxlQ09NREFURm9sZGluZz0iMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL19jdHlwZXNfdGVzdC5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfY3R5cGVzXF9jdHlwZXNfdGVzdC5jIj4NCi0JCTwvRmlsZT4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvX2VsZW1lbnR0cmVlLnZjcHJvaiBiL1BDL1ZTNy4xL19lbGVtZW50dHJlZS52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhMmI5ZDkuLjAwMDAwMDAKLS0tIGEvUEMvVlM3LjEvX2VsZW1lbnR0cmVlLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDI2NCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iNy4xMCINCi0JTmFtZT0iX2VsZW1lbnR0cmVlIg0KLQlQcm9qZWN0R1VJRD0iezE5NjZEREUyLTRBQjctNEU0RS1BQ0M5LUMxMjFFNEQzN0Y4RX0iDQotCVNjY1Byb2plY3ROYW1lPSJfZWxlbWVudHRyZWUiDQotCVNjY0xvY2FsUGF0aD0iLi4iPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLWRlYnVnXF9lbGVtZW50dHJlZSINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQywuLlwuLlxNb2R1bGVzXGV4cGF0Ig0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7X0RFQlVHO0hBVkVfRVhQQVRfSDtXSU4zMjtfV0lORE9XUztYTUxfTlM7WE1MX0RURDtCWVRFT1JERVI9MTIzNDtYTUxfQ09OVEVYVF9CWVRFUz0xMDI0O1VTRV9QWUVYUEFUX0NBUEk7WE1MX1NUQVRJQztIQVZFX01FTU1PVkUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIzIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJvZGJjY3AzMi5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4vX2VsZW1lbnR0cmVlX2QucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vX2VsZW1lbnR0cmVlX2QucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTAwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vX2VsZW1lbnR0cmVlX2QubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtcmVsZWFzZVxfZWxlbWVudHRyZWUiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDLC4uXC4uXE1vZHVsZXNcZXhwYXQiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtOREVCVUc7V0lOMzI7X1dJTkRPV1M7WE1MX05TO1hNTF9EVEQ7QllURU9SREVSPTEyMzQ7WE1MX0NPTlRFWFRfQllURVM9MTAyNDtVU0VfUFlFWFBBVF9DQVBJO1hNTF9TVEFUSUM7SEFWRV9NRU1NT1ZFIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Im9kYmNjcDMyLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi9fZWxlbWVudHRyZWUucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vX2VsZW1lbnR0cmVlLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDEwMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL19lbGVtZW50dHJlZS5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlSXRhbml1bXxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii4vLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5caWE2NC10ZW1wLXJlbGVhc2VcX2VsZW1lbnR0cmVlIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvVVNFQ0w6TVNfSVRBTklVTSAvR1MtIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDLC4uXC4uXE1vZHVsZXNcZXhwYXQiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtOREVCVUc7V0lOMzI7X1dJTkRPV1M7WE1MX05TO1hNTF9EVEQ7QllURU9SREVSPTEyMzQ7WE1MX0NPTlRFWFRfQllURVM9MTAyNDtVU0VfUFlFWFBBVF9DQVBJO1hNTF9TVEFUSUM7SEFWRV9NRU1NT1ZFIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJGQUxTRSINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvTUFDSElORTpJQTY0IC9VU0VMSU5LOk1TX1NESyINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0ib2RiY2NwMzIubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuL19lbGVtZW50dHJlZS5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9fZWxlbWVudHRyZWUucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTAwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vX2VsZW1lbnR0cmVlLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2VBTUQ2NHxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJhbWQ2NC10ZW1wLXJlbGVhc2VcX2VsZW1lbnR0cmVlIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvVVNFQ0w6TVNfT1BURVJPTiAvR1MtIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDLC4uXC4uXE1vZHVsZXNcZXhwYXQiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtOREVCVUc7V0lOMzI7X1dJTkRPV1M7WE1MX05TO1hNTF9EVEQ7QllURU9SREVSPTEyMzQ7WE1MX0NPTlRFWFRfQllURVM9MTAyNDtVU0VfUFlFWFBBVF9DQVBJO1hNTF9TVEFUSUM7SEFWRV9NRU1NT1ZFIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJGQUxTRSINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvTUFDSElORTpBTUQ2NCAvVVNFTElOSzpNU19TREsiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Im9kYmNjcDMyLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi9fZWxlbWVudHRyZWUucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vX2VsZW1lbnR0cmVlLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDEwMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL19lbGVtZW50dHJlZS5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfZWxlbWVudHRyZWUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xleHBhdFx4bWxwYXJzZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGV4cGF0XHhtbHJvbGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xleHBhdFx4bWx0b2suYyI+DQotCQk8L0ZpbGU+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTNy4xL19tc2kudmNwcm9qIGIvUEMvVlM3LjEvX21zaS52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0ZmQ0NDcuLjAwMDAwMDAKLS0tIGEvUEMvVlM3LjEvX21zaS52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSwyNTIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjcuMTAiDQotCU5hbWU9Il9tc2kiDQotCVByb2plY3RHVUlEPSJ7MkMwQkVGQjktNzBFMi00RjgwLUFDNUItNEFCOEVFMDIzNTc0fSINCi0JU2NjUHJvamVjdE5hbWU9Il9tc2kiDQotCVNjY0xvY2FsUGF0aD0iLi5cLi5ccGMiPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLWRlYnVnXF9tc2kiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIg0KLQkJCUNoYXJhY3RlclNldD0iMiI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7V0lOMzI7X0RFQlVHO19XSU5ET1dTO19VU1JETEwiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJUnVudGltZUxpYnJhcnk9IjMiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9ImZjaS5saWIgbXNpLmxpYiBycGNydDQubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuL19tc2lfZC5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9fbXNpX2QucGRiIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDE2MDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL19tc2lfZC5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1yZWxlYXNlXF9tc2kiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIg0KLQkJCUNoYXJhY3RlclNldD0iMiI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO1dJTjMyO05ERUJVRztfV0lORE9XUztfVVNSRExMIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9ImZjaS5saWIgbXNpLmxpYiBycGNydDQubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuL19tc2kucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL19tc2kucGRiIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDE2MDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL19tc2kubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZUl0YW5pdW18V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXGlhNjQtdGVtcC1yZWxlYXNlXF9tc2kiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIg0KLQkJCUNoYXJhY3RlclNldD0iMiI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvVVNFQ0w6TVNfSVRBTklVTSAvR1MtIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7V0lOMzI7TkRFQlVHO19XSU5ET1dTO19VU1JETEwiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9IkZBTFNFIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9NQUNISU5FOklBNjQgL1VTRUxJTks6TVNfU0RLIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJmY2kubGliIG1zaS5saWIgcnBjcnQ0LmxpYiBidWZmZXJvdmVyZmxvd1UubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuL19tc2kucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL19tc2kucGRiIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDE2MDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL19tc2kubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZUFNRDY0fFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9ImFtZDY0LXRlbXAtcmVsZWFzZVxfbXNpIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL1VTRUNMOk1TX09QVEVST04gL0dTLSINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO1dJTjMyO05ERUJVRztfV0lORE9XUztfVVNSRExMIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJGQUxTRSINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvTUFDSElORTpBTUQ2NCAvVVNFTElOSzpNU19TREsiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9ImZjaS5saWIgbXNpLmxpYiBycGNydDQubGliIGJ1ZmZlcm92ZXJmbG93VS5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4vX21zaS5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vX21zaS5wZGIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTYwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vX21zaS5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUENcX21zaS5jIj4NCi0JCTwvRmlsZT4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvX3NvY2tldC52Y3Byb2ogYi9QQy9WUzcuMS9fc29ja2V0LnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmZlZDhlNC4uMDAwMDAwMAotLS0gYS9QQy9WUzcuMS9fc29ja2V0LnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDI1NCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iNy4xMCINCi0JTmFtZT0iX3NvY2tldCINCi0JU2NjUHJvamVjdE5hbWU9Il9zb2NrZXQiDQotCVNjY0xvY2FsUGF0aD0iLi4iPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLWRlYnVnXF9zb2NrZXQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtfREVCVUc7V0lOMzI7X1dJTkRPV1MiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIzIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuL19zb2NrZXRfZC5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9fc29ja2V0X2QucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMUQwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vX3NvY2tldF9kLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLXJlbGVhc2VcX3NvY2tldCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtOREVCVUc7V0lOMzI7X1dJTkRPV1MiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi9fc29ja2V0LnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL19zb2NrZXQucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMUQwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vX3NvY2tldC5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlSXRhbml1bXxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii4vLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5caWE2NC10ZW1wLXJlbGVhc2VcX3NvY2tldCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL1VTRUNMOk1TX0lUQU5JVU0gL0dTLSINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO05ERUJVRztXSU4zMjtfV0lORE9XUyINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iRkFMU0UiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL01BQ0hJTkU6SUE2NCAvVVNFTElOSzpNU19TREsiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4vX3NvY2tldC5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9fc29ja2V0LnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTFEMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL19zb2NrZXQubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZUFNRDY0fFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9ImFtZDY0LXRlbXAtcmVsZWFzZVxfc29ja2V0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvVVNFQ0w6TVNfT1BURVJPTiAvR1MtIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7TkRFQlVHO1dJTjMyO19XSU5ET1dTIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJGQUxTRSINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvTUFDSElORTpBTUQ2NCAvVVNFTElOSzpNU19TREsiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4vX3NvY2tldC5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9fc29ja2V0LnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTFEMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL19zb2NrZXQubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcc29ja2V0bW9kdWxlLmMiPg0KLQkJPC9GaWxlPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzcuMS9fc3FsaXRlMy52Y3Byb2ogYi9QQy9WUzcuMS9fc3FsaXRlMy52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmN2Q5OTEuLjAwMDAwMDAKLS0tIGEvUEMvVlM3LjEvX3NxbGl0ZTMudmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsMjgzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI3LjEwIg0KLQlOYW1lPSJfc3FsaXRlMyINCi0JUHJvamVjdEdVSUQ9InsyRkYwQTMxMi0yMkY5LTRDMzQtQjA3MC04NDI5MTZERTI3QTl9Ig0KLQlTY2NQcm9qZWN0TmFtZT0iX3NxbGl0ZTMiDQotCVNjY0xvY2FsUGF0aD0iLi4iPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLWRlYnVnXF9zcWxpdGUzIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlOy4uXC4uXFBDOy4uXC4uXC4uXHNxbGl0ZS1zb3VyY2UtMy4zLjQiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtfREVCVUc7V0lOMzI7X1dJTkRPV1M7TU9EVUxFX05BTUU9XCZxdW90O3NxbGl0ZTNcJnF1b3Q7Ig0KLQkJCQlSdW50aW1lTGlicmFyeT0iMyINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iLi5cLi5cLi5cc3FsaXRlLXNvdXJjZS0zLjMuNFxzcWxpdGUzLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi9fc3FsaXRlM19kLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9IiINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vX3NxbGl0ZTNfZC5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxODAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9fc3FsaXRlM19kLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLXJlbGVhc2VcX3NxbGl0ZTMiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlOy4uXC4uXFBDOy4uXC4uXC4uXHNxbGl0ZS1zb3VyY2UtMy4zLjQiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtOREVCVUc7V0lOMzI7X1dJTkRPV1M7TU9EVUxFX05BTUU9XCZxdW90O3NxbGl0ZTNcJnF1b3Q7Ig0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Ii4uXC4uXC4uXHNxbGl0ZS1zb3VyY2UtMy4zLjRcc3FsaXRlMy5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4vX3NxbGl0ZTMucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0iIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9fc3FsaXRlMy5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxODAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9fc3FsaXRlMy5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlSXRhbml1bXxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii4vLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5caWE2NC10ZW1wLXJlbGVhc2VcX3NxbGl0ZTMiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9VU0VDTDpNU19JVEFOSVVNIC9HUy0iDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGU7Li5cLi5cUEM7Li5cLi5cLi5cc3FsaXRlLXNvdXJjZS0zLjMuNCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO05ERUJVRztXSU4zMjtfV0lORE9XUztNT0RVTEVfTkFNRT1cJnF1b3Q7c3FsaXRlM1wmcXVvdDsiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9IkZBTFNFIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9NQUNISU5FOklBNjQgL1VTRUxJTks6TVNfU0RLIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIuLlwuLlwuLlxzcWxpdGUtc291cmNlLTMuMy40XGlhNjRcc3FsaXRlMy5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4vX3NxbGl0ZTMucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0iIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9fc3FsaXRlMy5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxODAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9fc3FsaXRlMy5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlQU1ENjR8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iYW1kNjQtdGVtcC1yZWxlYXNlXF9zcWxpdGUzIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvVVNFQ0w6TVNfT1BURVJPTiAvR1MtIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlOy4uXC4uXFBDOy4uXC4uXC4uXHNxbGl0ZS1zb3VyY2UtMy4zLjQiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtOREVCVUc7V0lOMzI7X1dJTkRPV1M7TU9EVUxFX05BTUU9XCZxdW90O3NxbGl0ZTNcJnF1b3Q7Ig0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJGQUxTRSINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvTUFDSElORTpBTUQ2NCAvVVNFTElOSzpNU19TREsiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Ii4uXC4uXC4uXHNxbGl0ZS1zb3VyY2UtMy4zLjRcYW1kNjRcc3FsaXRlMy5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4vX3NxbGl0ZTMucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0iIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9fc3FsaXRlMy5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxODAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9fc3FsaXRlMy5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3FsaXRlXGNhY2hlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxjb25uZWN0aW9uLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxjdXJzb3IuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3FsaXRlXG1pY3JvcHJvdG9jb2xzLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxtb2R1bGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3FsaXRlXHByZXBhcmVfcHJvdG9jb2wuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3FsaXRlXHJvdy5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zcWxpdGVcc3RhdGVtZW50LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3NxbGl0ZVx1dGlsLmMiPg0KLQkJPC9GaWxlPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzcuMS9fc3NsLm1hayBiL1BDL1ZTNy4xL19zc2wubWFrCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NDc2YTYzLi4wMDAwMDAwCi0tLSBhL1BDL1ZTNy4xL19zc2wubWFrCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotRVhUUkFfTElCUz0KLQotIUlGREVGIERFQlVHCi1TVUZGSVg9X2QucHlkCi1URU1QPXg4Ni10ZW1wLWRlYnVnLwotQ0ZMQUdTPS9PZCAvWmkgL01EZCAvTERkIC9EREVCVUcgL0RfREVCVUcgL0RXSU4zMgotU1NMX0xJQl9ESVI9JChTU0xfRElSKS9vdXQzMi5kYmcKLSFFTFNFCi1TVUZGSVg9LnB5ZAotVEVNUD14ODYtdGVtcC1yZWxlYXNlLwotQ0ZMQUdTPS9PeCAvTUQgL0xEIC9EV0lOMzIKLVNTTF9MSUJfRElSPSQoU1NMX0RJUikvb3V0MzIKLSFFTkRJRgotCi1JTkNMVURFUz0tSSAuLi8uLi9JbmNsdWRlIC1JIC4uLy4uL1BDIC1JICQoU1NMX0RJUikvaW5jMzIKLQotU1NMX0xJQlM9Z2RpMzIubGliIHdzb2NrMzIubGliIHVzZXIzMi5saWIgYWR2YXBpMzIubGliIC9MSUJQQVRIOiQoU1NMX0xJQl9ESVIpIGxpYmVheTMyLmxpYiBzc2xlYXkzMi5saWIKLVNTTF9TT1VSQ0U9Li4vLi4vTW9kdWxlcy9fc3NsLmMgCi0KLUhBU0hfTElCUz1nZGkzMi5saWIgdXNlcjMyLmxpYiBhZHZhcGkzMi5saWIgL2xpYnBhdGg6JChTU0xfTElCX0RJUikgbGliZWF5MzIubGliCi1IQVNIX1NPVVJDRT0uLi8uLi9Nb2R1bGVzL19oYXNob3BlbnNzbC5jIAotCi1hbGw6IF9zc2wkKFNVRkZJWCkgX2hhc2hsaWIkKFNVRkZJWCkKLQotIyBTcGxpdCBjb21waWxlL2xpbmsgaW50byB0d28gc3RlcHMgdG8gYmV0dGVyIHN1cHBvcnQgVlNFeHRDb21wCi1fc3NsJChTVUZGSVgpOiAkKFNTTF9TT1VSQ0UpICQoU1NMX0xJQl9ESVIpL2xpYmVheTMyLmxpYiAkKFNTTF9MSUJfRElSKS9zc2xlYXkzMi5saWIgLi4vLi4vUEMvKi5oIC4uLy4uL0luY2x1ZGUvKi5oCi0JQGlmIG5vdCBleGlzdCAiJChURU1QKS9fc3NsLy4iIG1rZGlyICIkKFRFTVApL19zc2wiCi0JY2wgL25vbG9nbyAvYyAkKFNTTF9TT1VSQ0UpICQoQ0ZMQUdTKSAvRm8kKFRFTVApXF9zc2xcJCoub2JqICQoSU5DTFVERVMpCi0JbGluayAvbm9sb2dvIEA8PAotICAgICAgICAgICAgIC9kbGwgL291dDpfc3NsJChTVUZGSVgpICQoVEVNUClcX3NzbFwkKi5vYmogJChTU0xfTElCUykgJChFWFRSQV9MSUJTKQotPDwKLQotX2hhc2hsaWIkKFNVRkZJWCk6ICQoSEFTSF9TT1VSQ0UpICQoU1NMX0xJQl9ESVIpL2xpYmVheTMyLmxpYiAuLi8uLi9QQy8qLmggLi4vLi4vSW5jbHVkZS8qLmgKLSAgICBAaWYgbm90IGV4aXN0ICIkKFRFTVApL19oYXNobGliLy4iIG1rZGlyICIkKFRFTVApL19oYXNobGliIgotICAgIGNsIC9ub2xvZ28gL2MgJChIQVNIX1NPVVJDRSkgJChDRkxBR1MpICQoRVhUUkFfQ0ZMQUdTKSAvRm8kKFRFTVApXF9oYXNobGliXCQqLm9iaiAkKElOQ0xVREVTKSAKLSAgICBsaW5rIC9ub2xvZ28gQDw8Ci0JL2RsbCAvb3V0Ol9oYXNobGliJChTVUZGSVgpICQoSEFTSF9MSUJTKSAkKEVYVFJBX0xJQlMpICQoVEVNUClcX2hhc2hsaWJcJCoub2JqCi08PApkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvX3NzbC52Y3Byb2ogYi9QQy9WUzcuMS9fc3NsLnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTZkNjVmZS4uMDAwMDAwMAotLS0gYS9QQy9WUzcuMS9fc3NsLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDg0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI3LjEwIg0KLQlOYW1lPSJfc3NsIg0KLQlSb290TmFtZXNwYWNlPSJfc3NsIg0KLQlTY2NQcm9qZWN0TmFtZT0iIg0KLQlTY2NMb2NhbFBhdGg9IiINCi0JS2V5d29yZD0iTWFrZUZpbGVQcm9qIj4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIi8+DQotCTwvUGxhdGZvcm1zPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLXJlbGVhc2VcX3NzbCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMCINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTk1ha2VUb29sIg0KLQkJCQlCdWlsZENvbW1hbmRMaW5lPSJidWlsZF9zc2wuYmF0ICQoQ29uZmlndXJhdGlvbk5hbWUpIg0KLQkJCQlSZUJ1aWxkQ29tbWFuZExpbmU9ImJ1aWxkX3NzbC5iYXQgJChDb25maWd1cmF0aW9uTmFtZSkgLWEiDQotCQkJCUNsZWFuQ29tbWFuZExpbmU9ImVjaG8gTm90aGluZyB0byBkbyINCi0JCQkJT3V0cHV0PSJfc3NsLnB5ZCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtZGVidWdcX3NzbCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMCINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTk1ha2VUb29sIg0KLQkJCQlCdWlsZENvbW1hbmRMaW5lPSJidWlsZF9zc2wuYmF0ICQoQ29uZmlndXJhdGlvbk5hbWUpIg0KLQkJCQlSZUJ1aWxkQ29tbWFuZExpbmU9ImJ1aWxkX3NzbC5iYXQgJChDb25maWd1cmF0aW9uTmFtZSkgLWEiDQotCQkJCUNsZWFuQ29tbWFuZExpbmU9ImVjaG8gTm90aGluZyB0byBkbyINCi0JCQkJT3V0cHV0PSJfc3NsX2QucHlkIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2VJdGFuaXVtfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLi8uIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlxpYTY0LXRlbXAtcmVsZWFzZVxfc3NsIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIwIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNOTWFrZVRvb2wiDQotCQkJCUJ1aWxkQ29tbWFuZExpbmU9ImJ1aWxkX3NzbC5iYXQgJChDb25maWd1cmF0aW9uTmFtZSkiDQotCQkJCVJlQnVpbGRDb21tYW5kTGluZT0iYnVpbGRfc3NsLmJhdCAkKENvbmZpZ3VyYXRpb25OYW1lKSAtYSINCi0JCQkJQ2xlYW5Db21tYW5kTGluZT0iZWNobyBOb3RoaW5nIHRvIGRvIg0KLQkJCQlPdXRwdXQ9Il9zc2wucHlkIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2VBTUQ2NHxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJhbWQ2NC10ZW1wLXJlbGVhc2VcX3NzbCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMCINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTk1ha2VUb29sIg0KLQkJCQlCdWlsZENvbW1hbmRMaW5lPSJidWlsZF9zc2wuYmF0ICQoQ29uZmlndXJhdGlvbk5hbWUpIg0KLQkJCQlSZUJ1aWxkQ29tbWFuZExpbmU9ImJ1aWxkX3NzbC5iYXQgJChDb25maWd1cmF0aW9uTmFtZSkgLWEiDQotCQkJCUNsZWFuQ29tbWFuZExpbmU9ImVjaG8gTm90aGluZyB0byBkbyINCi0JCQkJT3V0cHV0PSJfc3NsLnB5ZCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3NsLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2hhc2hvcGVuc3NsLmMiPg0KLQkJPC9GaWxlPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzcuMS9fdGVzdGNhcGkudmNwcm9qIGIvUEMvVlM3LjEvX3Rlc3RjYXBpLnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDE5Nzg0Mi4uMDAwMDAwMAotLS0gYS9QQy9WUzcuMS9fdGVzdGNhcGkudmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsMjQ3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI3LjEwIg0KLQlOYW1lPSJfdGVzdGNhcGkiDQotCVNjY1Byb2plY3ROYW1lPSJfdGVzdGNhcGkiDQotCVNjY0xvY2FsUGF0aD0iLi4iPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtcmVsZWFzZVxfdGVzdGNhcGkiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIg0KLQkJCUNoYXJhY3RlclNldD0iMiI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO1dJTjMyO05ERUJVRztfV0lORE9XUztfVVNSRExMO01NQVBfRVhQT1JUUyINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuL190ZXN0Y2FwaS5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vX3Rlc3RjYXBpLnBkYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxRjAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9fdGVzdGNhcGkubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLWRlYnVnXF90ZXN0Y2FwaSINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtXSU4zMjtfREVCVUc7X1dJTkRPV1M7X1VTUkRMTDtNTUFQX0VYUE9SVFMiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJUnVudGltZUxpYnJhcnk9IjMiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4vX3Rlc3RjYXBpX2QucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vX3Rlc3RjYXBpX2QucGRiIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTFGMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL190ZXN0Y2FwaV9kLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2VJdGFuaXVtfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLi8uIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlxpYTY0LXRlbXAtcmVsZWFzZVxfdGVzdGNhcGkiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIg0KLQkJCUNoYXJhY3RlclNldD0iMiI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvVVNFQ0w6TVNfSVRBTklVTSAvR1MtIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7V0lOMzI7TkRFQlVHO19XSU5ET1dTO19VU1JETEw7TU1BUF9FWFBPUlRTIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJGQUxTRSINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvTUFDSElORTpJQTY0IC9VU0VMSU5LOk1TX1NESyINCi0JCQkJT3V0cHV0RmlsZT0iLi9fdGVzdGNhcGkucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL190ZXN0Y2FwaS5wZGIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMUYwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vX3Rlc3RjYXBpLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2VBTUQ2NHxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJhbWQ2NC10ZW1wLXJlbGVhc2VcX3Rlc3RjYXBpIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL1VTRUNMOk1TX09QVEVST04gL0dTLSINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO1dJTjMyO05ERUJVRztfV0lORE9XUztfVVNSRExMO01NQVBfRVhQT1JUUyINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iRkFMU0UiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL01BQ0hJTkU6QU1ENjQgL1VTRUxJTks6TVNfU0RLIg0KLQkJCQlPdXRwdXRGaWxlPSIuL190ZXN0Y2FwaS5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vX3Rlc3RjYXBpLnBkYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxRjAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9fdGVzdGNhcGkubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3Rlc3RjYXBpbW9kdWxlLmMiPg0KLQkJPC9GaWxlPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzcuMS9fdGtpbnRlci52Y3Byb2ogYi9QQy9WUzcuMS9fdGtpbnRlci52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmNzM0MTYuLjAwMDAwMDAKLS0tIGEvUEMvVlM3LjEvX3RraW50ZXIudmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsMjYxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI3LjEwIg0KLQlOYW1lPSJfdGtpbnRlciINCi0JU2NjUHJvamVjdE5hbWU9Il90a2ludGVyIg0KLQlTY2NMb2NhbFBhdGg9Ii4uXC4uXC4uXC4uIj4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIi8+DQotCTwvUGxhdGZvcm1zPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLXJlbGVhc2VcX3RraW50ZXIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlx0Y2x0a1xpbmNsdWRlLC4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtOREVCVUc7V0lOMzI7X1dJTkRPV1M7V0lUSF9BUFBJTklUIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Ii4uXC4uXC4uXHRjbHRrXGxpYlx0azg0LmxpYiAuLlwuLlwuLlx0Y2x0a1xsaWJcdGNsODQubGliIG9kYmNjcDMyLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi9fdGtpbnRlci5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPSIiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL190a2ludGVyLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTE5MDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL190a2ludGVyLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1kZWJ1Z1xfdGtpbnRlciINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5cdGNsdGtcaW5jbHVkZSwuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7X0RFQlVHO1dJTjMyO19XSU5ET1dTO1dJVEhfQVBQSU5JVCINCi0JCQkJUnVudGltZUxpYnJhcnk9IjMiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Ii4uXC4uXC4uXHRjbHRrXGxpYlx0azg0LmxpYiAuLlwuLlwuLlx0Y2x0a1xsaWJcdGNsODQubGliIG9kYmNjcDMyLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi9fdGtpbnRlcl9kLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM9IiINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vX3RraW50ZXJfZC5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxOTAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9fdGtpbnRlcl9kLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2VJdGFuaXVtfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLi8uIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlxpYTY0LXRlbXAtcmVsZWFzZVxfdGtpbnRlciINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL1VTRUNMOk1TX0lUQU5JVU0gL0dTLSINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5cdGNsdGtcaW5jbHVkZSwuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7TkRFQlVHO1dJTjMyO19XSU5ET1dTO1dJVEhfQVBQSU5JVCINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iRkFMU0UiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL01BQ0hJTkU6SUE2NCAvVVNFTElOSzpNU19TREsiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Ii4uXC4uXC4uXHRjbHRrXGxpYlx0azg0LmxpYiAuLlwuLlwuLlx0Y2x0a1xsaWJcdGNsODQubGliIG9kYmNjcDMyLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi9fdGtpbnRlci5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPSIiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL190a2ludGVyLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTE5MDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL190a2ludGVyLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2VBTUQ2NHxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJhbWQ2NC10ZW1wLXJlbGVhc2VcX3RraW50ZXIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9VU0VDTDpNU19PUFRFUk9OIC9HUy0iDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXHRjbHRrXGluY2x1ZGUsLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO05ERUJVRztXSU4zMjtfV0lORE9XUztXSVRIX0FQUElOSVQiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9IkZBTFNFIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9NQUNISU5FOkFNRDY0IC9VU0VMSU5LOk1TX1NESyINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iLi5cLi5cLi5cdGNsdGtcbGliXHRrODQubGliIC4uXC4uXC4uXHRjbHRrXGxpYlx0Y2w4NC5saWIgb2RiY2NwMzIubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuL190a2ludGVyLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM9IiINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vX3RraW50ZXIucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMTkwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vX3RraW50ZXIubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3RraW50ZXIuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x0a2FwcGluaXQuYyI+DQotCQk8L0ZpbGU+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTNy4xL2FtZDY0X21sNjQuYmF0IGIvUEMvVlM3LjEvYW1kNjRfbWw2NC5iYXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhOWFjZjEuLjAwMDAwMDAKLS0tIGEvUEMvVlM3LjEvYW1kNjRfbWw2NC5iYXQKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi1AZWNobyBvZmYKLXJlbSBUcnkgdG8gZmluZCB0aGUgQU1ENjQgYXNzZW1ibGVyIGFuZCBjYWxsIGl0IHdpdGggdGhlIHN1cHBsaWVkIGFyZ3VtZW50cy4KLQotc2V0IE1MRVhFPU1pY3Jvc29mdCBQbGF0Zm9ybSBTREtcQmluXFdpbjY0XHg4NlxBTUQ2NFxtbDY0LkVYRQotCi1yZW0gRm9yIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgc2VlIGFsc28KLXJlbSBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2xpYnJhcnkvZW4tdXMvd2luNjQvd2luNjQvd293NjRfaW1wbGVtZW50YXRpb25fZGV0YWlscy5hc3AKLQotaWYgZXhpc3QgIiVQcm9ncmFtRmlsZXMlXCVNTEVYRSUiICgKLSAgc2V0IE1MNjQ9IiVQcm9ncmFtRmlsZXMlXCVNTEVYRSUiCi0pIGVsc2UgaWYgZXhpc3QgIiVQcm9ncmFtVzY0MzIlXCVNTEVYRSUiICgKLSAgc2V0IE1MNjQ9IiVQcm9ncmFtVzY0MzIlXCVNTEVYRSUiCi0pIGVsc2UgKAotICBzZXQgTUw2ND1tbDY0LmV4ZQotKQotCi0lTUw2NCUgJSoKZGlmZiAtLWdpdCBhL1BDL1ZTNy4xL2J1aWxkX3NzbC5iYXQgYi9QQy9WUzcuMS9idWlsZF9zc2wuYmF0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNmJlM2MwLi4wMDAwMDAwCi0tLSBhL1BDL1ZTNy4xL2J1aWxkX3NzbC5iYXQKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi1pZiAiJTEiID09ICJSZWxlYXNlQU1ENjQiIGNhbGwgIiVNU1NkayVcU2V0RW52IiAvWFA2NCAvUkVUQUlMCi0KLUBlY2hvIG9mZgotaWYgbm90IGRlZmluZWQgSE9TVF9QWVRIT04gKAotICBpZiAlMSBFUVUgRGVidWcgKAotICAgIHNldCBIT1NUX1BZVEhPTj1weXRob25fZC5leGUKLSAgKSBFTFNFICgKLSAgICBzZXQgSE9TVF9QWVRIT049cHl0aG9uLmV4ZQotICApCi0pCi0lSE9TVF9QWVRIT04lIGJ1aWxkX3NzbC5weSAlMSAlMgotCmRpZmYgLS1naXQgYS9QQy9WUzcuMS9idWlsZF9zc2wucHkgYi9QQy9WUzcuMS9idWlsZF9zc2wucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlOWY0ZTMuLjAwMDAwMDAKLS0tIGEvUEMvVlM3LjEvYnVpbGRfc3NsLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTgxICswLDAgQEAKLSMgU2NyaXB0IGZvciBidWlsZGluZyB0aGUgX3NzbCBhbmQgX2hhc2hsaWIgbW9kdWxlcyBmb3IgV2luZG93cy4KLSMgVXNlcyBQZXJsIHRvIHNldHVwIHRoZSBPcGVuU1NMIGVudmlyb25tZW50IGNvcnJlY3RseQotIyBhbmQgYnVpbGQgT3BlblNTTCwgdGhlbiBpbnZva2VzIGEgc2ltcGxlIG5tYWtlIHNlc3Npb24KLSMgZm9yIHRoZSBhY3R1YWwgX3NzbC5weWQgYW5kIF9oYXNobGliLnB5ZCBETExzLgotCi0jIFRIRU9SRVRJQ0FMTFksIHlvdSBjYW46Ci0jICogVW5wYWNrIHRoZSBsYXRlc3QgU1NMIHJlbGVhc2Ugb25lIGxldmVsIGFib3ZlIHlvdXIgbWFpbiBQeXRob24gc291cmNlCi0jICAgZGlyZWN0b3J5LiAgSXQgaXMgbGlrZWx5IHlvdSB3aWxsIGFscmVhZHkgZmluZCB0aGUgemxpYiBsaWJyYXJ5IGFuZAotIyAgIGFueSBvdGhlciBleHRlcm5hbCBwYWNrYWdlcyB0aGVyZS4KLSMgKiBJbnN0YWxsIEFjdGl2ZVBlcmwgYW5kIGVuc3VyZSBpdCBpcyBzb21ld2hlcmUgb24geW91ciBwYXRoLgotIyAqIFJ1biB0aGlzIHNjcmlwdCBmcm9tIHRoZSBQQ0J1aWxkIGRpcmVjdG9yeS4KLSMKLSMgaXQgc2hvdWxkIGNvbmZpZ3VyZSBhbmQgYnVpbGQgU1NMLCB0aGVuIGJ1aWxkIHRoZSBfc3NsIGFuZCBfaGFzaGxpYgotIyBQeXRob24gZXh0ZW5zaW9ucyB3aXRob3V0IGludGVydmVudGlvbi4KLQotaW1wb3J0IG9zLCBzeXMsIHJlCi0KLSMgRmluZCBhbGwgImZvby5leGUiIGZpbGVzIG9uIHRoZSBQQVRILgotZGVmIGZpbmRfYWxsX29uX3BhdGgoZmlsZW5hbWUsIGV4dHJhcyA9IE5vbmUpOgotICAgIGVudHJpZXMgPSBvcy5lbnZpcm9uWyJQQVRIIl0uc3BsaXQob3MucGF0aHNlcCkKLSAgICByZXQgPSBbXQotICAgIGZvciBwIGluIGVudHJpZXM6Ci0gICAgICAgIGZuYW1lID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguam9pbihwLCBmaWxlbmFtZSkpCi0gICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGZuYW1lKSBhbmQgZm5hbWUgbm90IGluIHJldDoKLSAgICAgICAgICAgIHJldC5hcHBlbmQoZm5hbWUpCi0gICAgaWYgZXh0cmFzOgotICAgICAgICBmb3IgcCBpbiBleHRyYXM6Ci0gICAgICAgICAgICBmbmFtZSA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmpvaW4ocCwgZmlsZW5hbWUpKQotICAgICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoZm5hbWUpIGFuZCBmbmFtZSBub3QgaW4gcmV0OgotICAgICAgICAgICAgICAgIHJldC5hcHBlbmQoZm5hbWUpCi0gICAgcmV0dXJuIHJldAotCi0jIEZpbmQgYSBzdWl0YWJsZSBQZXJsIGluc3RhbGxhdGlvbiBmb3IgT3BlblNTTC4KLSMgY3lnd2luIHBlcmwgZG9lcyAqbm90KiB3b3JrLiAgQWN0aXZlUGVybCBkb2VzLgotIyBCZWluZyBhIFBlcmwgZHVtbXksIHRoZSBzaW1wbGVzdCB3YXkgSSBjYW4gY2hlY2sgaXMgaWYgdGhlICJXaW4zMiIgcGFja2FnZQotIyBpcyBhdmFpbGFibGUuCi1kZWYgZmluZF93b3JraW5nX3BlcmwocGVybHMpOgotICAgIGZvciBwZXJsIGluIHBlcmxzOgotICAgICAgICBmaCA9IG9zLnBvcGVuKHBlcmwgKyAnIC1lICJ1c2UgV2luMzI7IicpCi0gICAgICAgIGZoLnJlYWQoKQotICAgICAgICByYyA9IGZoLmNsb3NlKCkKLSAgICAgICAgaWYgcmM6Ci0gICAgICAgICAgICBjb250aW51ZQotICAgICAgICByZXR1cm4gcGVybAotICAgIHByaW50ICJDYW4gbm90IGZpbmQgYSBzdWl0YWJsZSBQRVJMOiIKLSAgICBpZiBwZXJsczoKLSAgICAgICAgcHJpbnQgIiB0aGUgZm9sbG93aW5nIHBlcmwgaW50ZXJwcmV0ZXJzIHdlcmUgZm91bmQ6IgotICAgICAgICBmb3IgcCBpbiBwZXJsczoKLSAgICAgICAgICAgIHByaW50ICIgIiwgcAotICAgICAgICBwcmludCAiIE5vbmUgb2YgdGhlc2UgdmVyc2lvbnMgYXBwZWFyIHN1aXRhYmxlIGZvciBidWlsZGluZyBPcGVuU1NMIgotICAgIGVsc2U6Ci0gICAgICAgIHByaW50ICIgTk8gcGVybCBpbnRlcnByZXRlcnMgd2VyZSBmb3VuZCBvbiB0aGlzIG1hY2hpbmUgYXQgYWxsISIKLSAgICBwcmludCAiIFBsZWFzZSBpbnN0YWxsIEFjdGl2ZVBlcmwgYW5kIGVuc3VyZSBpdCBhcHBlYXJzIG9uIHlvdXIgcGF0aCIKLSAgICBwcmludCAiVGhlIFB5dGhvbiBTU0wgbW9kdWxlIHdhcyBub3QgYnVpbHQiCi0gICAgcmV0dXJuIE5vbmUKLQotIyBMb2NhdGUgdGhlIGJlc3QgU1NMIGRpcmVjdG9yeSBnaXZlbiBhIGZldyByb290cyB0byBsb29rIGludG8uCi1kZWYgZmluZF9iZXN0X3NzbF9kaXIoc291cmNlcyk6Ci0gICAgY2FuZGlkYXRlcyA9IFtdCi0gICAgZm9yIHMgaW4gc291cmNlczoKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgIyBub3RlOiBkbyBub3QgYWJzcGF0aCBzOyB0aGUgYnVpbGQgd2lsbCBmYWlsIGlmIGFueQotICAgICAgICAgICAgIyBoaWdoZXIgdXAgZGlyZWN0b3J5IG5hbWUgaGFzIHNwYWNlcyBpbiBpdC4KLSAgICAgICAgICAgIGZuYW1lcyA9IG9zLmxpc3RkaXIocykKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yOgotICAgICAgICAgICAgZm5hbWVzID0gW10KLSAgICAgICAgZm9yIGZuYW1lIGluIGZuYW1lczoKLSAgICAgICAgICAgIGZxbiA9IG9zLnBhdGguam9pbihzLCBmbmFtZSkKLSAgICAgICAgICAgIGlmIG9zLnBhdGguaXNkaXIoZnFuKSBhbmQgZm5hbWUuc3RhcnRzd2l0aCgib3BlbnNzbC0iKToKLSAgICAgICAgICAgICAgICBjYW5kaWRhdGVzLmFwcGVuZChmcW4pCi0gICAgIyBOb3cgd2UgaGF2ZSBhbGwgdGhlIGNhbmRpZGF0ZXMsIGxvY2F0ZSB0aGUgYmVzdC4KLSAgICBiZXN0X3BhcnRzID0gW10KLSAgICBiZXN0X25hbWUgPSBOb25lCi0gICAgZm9yIGMgaW4gY2FuZGlkYXRlczoKLSAgICAgICAgcGFydHMgPSByZS5zcGxpdCgiWy4tXSIsIG9zLnBhdGguYmFzZW5hbWUoYykpWzE6XQotICAgICAgICAjIGVnIC0gb3BlbnNzbC0wLjkuNy1iZXRhMSAtIGlnbm9yZSBhbGwgImJldGEiIG9yIGFueSBvdGhlciBxdWFsaWZpZXJzCi0gICAgICAgIGlmIGxlbihwYXJ0cykgPj0gNDoKLSAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgIGlmIHBhcnRzID4gYmVzdF9wYXJ0czoKLSAgICAgICAgICAgIGJlc3RfcGFydHMgPSBwYXJ0cwotICAgICAgICAgICAgYmVzdF9uYW1lID0gYwotICAgIGlmIGJlc3RfbmFtZSBpcyBub3QgTm9uZToKLSAgICAgICAgcHJpbnQgIkZvdW5kIGFuIFNTTCBkaXJlY3RvcnkgYXQgJyVzJyIgJSAoYmVzdF9uYW1lLCkKLSAgICBlbHNlOgotICAgICAgICBwcmludCAiQ291bGQgbm90IGZpbmQgYW4gU1NMIGRpcmVjdG9yeSBpbiAnJXMnIiAlIChzb3VyY2VzLCkKLSAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKLSAgICByZXR1cm4gYmVzdF9uYW1lCi0KLWRlZiBydW5fY29uZmlndXJlKGNvbmZpZ3VyZSwgZG9fc2NyaXB0KToKLSAgICBvcy5zeXN0ZW0oInBlcmwgQ29uZmlndXJlICIrY29uZmlndXJlKQotICAgIG9zLnN5c3RlbShkb19zY3JpcHQpCi0KLWRlZiBtYWluKCk6Ci0gICAgYnVpbGRfYWxsID0gIi1hIiBpbiBzeXMuYXJndgotICAgIGlmIHN5cy5hcmd2WzFdID09ICJSZWxlYXNlIjoKLSAgICAgICAgYXJjaCA9ICJ4ODYiCi0gICAgICAgIGRlYnVnID0gRmFsc2UKLSAgICAgICAgY29uZmlndXJlID0gIlZDLVdJTjMyIgotICAgICAgICBkb19zY3JpcHQgPSAibXNcXGRvX21hc20iCi0gICAgICAgIG1ha2VmaWxlID0gIm1zXFxudC5tYWsiCi0gICAgZWxpZiBzeXMuYXJndlsxXSA9PSAiRGVidWciOgotICAgICAgICBhcmNoID0gIng4NiIKLSAgICAgICAgZGVidWcgPSBUcnVlCi0gICAgICAgIGNvbmZpZ3VyZSA9ICJWQy1XSU4zMiIKLSAgICAgICAgZG9fc2NyaXB0ID0gIm1zXFxkb19tYXNtIgotICAgICAgICBtYWtlZmlsZT0ibXNcXGQzMi5tYWsiCi0gICAgZWxpZiBzeXMuYXJndlsxXSA9PSAiUmVsZWFzZUl0YW5pdW0iOgotICAgICAgICBhcmNoID0gImlhNjQiCi0gICAgICAgIGRlYnVnID0gRmFsc2UKLSAgICAgICAgY29uZmlndXJlID0gIlZDLVdJTjY0SSIKLSAgICAgICAgZG9fc2NyaXB0ID0gIm1zXFxkb193aW42NGkiCi0gICAgICAgIG1ha2VmaWxlID0gIm1zXFxudC5tYWsiCi0gICAgICAgIG9zLmVudmlyb25bIlZTRVhUQ09NUF9VU0VDTCJdID0gIk1TX0lUQU5JVU0iCi0gICAgZWxpZiBzeXMuYXJndlsxXSA9PSAiUmVsZWFzZUFNRDY0IjoKLSAgICAgICAgYXJjaD0iYW1kNjQiCi0gICAgICAgIGRlYnVnPUZhbHNlCi0gICAgICAgIGNvbmZpZ3VyZSA9ICJWQy1XSU42NEEiCi0gICAgICAgIGRvX3NjcmlwdCA9ICJtc1xcZG9fd2luNjRhIgotICAgICAgICBtYWtlZmlsZSA9ICJtc1xcbnQubWFrIgotICAgICAgICBvcy5lbnZpcm9uWyJWU0VYVENPTVBfVVNFQ0wiXSA9ICJNU19PUFRFUk9OIgotICAgIG1ha2VfZmxhZ3MgPSAiIgotICAgIGlmIGJ1aWxkX2FsbDoKLSAgICAgICAgbWFrZV9mbGFncyA9ICItYSIKLSAgICAjIHBlcmwgc2hvdWxkIGJlIG9uIHRoZSBwYXRoLCBidXQgd2UgYWxzbyBsb29rIGluICJccGVybCIgYW5kICJjOlxccGVybCIKLSAgICAjIGFzICJ3ZWxsIGtub3duIiBsb2NhdGlvbnMKLSAgICBwZXJscyA9IGZpbmRfYWxsX29uX3BhdGgoInBlcmwuZXhlIiwgWyJcXHBlcmxcXGJpbiIsICJDOlxccGVybFxcYmluIl0pCi0gICAgcGVybCA9IGZpbmRfd29ya2luZ19wZXJsKHBlcmxzKQotICAgIGlmIHBlcmwgaXMgTm9uZToKLSAgICAgICAgc3lzLmV4aXQoMSkKLQotICAgIHByaW50ICJGb3VuZCBhIHdvcmtpbmcgcGVybCBhdCAnJXMnIiAlIChwZXJsLCkKLSAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKLSAgICAjIExvb2sgZm9yIFNTTCAyIGxldmVscyB1cCBmcm9tIHBjYnVpbGQgLSBpZSwgc2FtZSBwbGFjZSB6bGliIGV0YyBhbGwgbGl2ZS4KLSAgICBzc2xfZGlyID0gZmluZF9iZXN0X3NzbF9kaXIoKCIuLlxcLi5cXC4uIiwpKQotICAgIGlmIHNzbF9kaXIgaXMgTm9uZToKLSAgICAgICAgc3lzLmV4aXQoMSkKLQotICAgIG9sZF9jZCA9IG9zLmdldGN3ZCgpCi0gICAgdHJ5OgotICAgICAgICBvcy5jaGRpcihzc2xfZGlyKQotICAgICAgICAjIElmIHRoZSBzc2wgbWFrZWZpbGVzIGRvIG5vdCBleGlzdCwgd2UgaW52b2tlIFBlcmwgdG8gZ2VuZXJhdGUgdGhlbS4KLSAgICAgICAgIyBEdWUgdG8gYSBidWcgaW4gdGhpcyBzY3JpcHQsIHRoZSBtYWtlZmlsZSBzb21ldGltZXMgZW5kZWQgdXAgZW1wdHkKLSAgICAgICAgIyBGb3JjZSBhIHJlZ2VuZXJhdGlvbiBpZiBpdCBpcy4KLSAgICAgICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKG1ha2VmaWxlKSBvciBvcy5wYXRoLmdldHNpemUobWFrZWZpbGUpPT0wOgotICAgICAgICAgICAgcHJpbnQgIkNyZWF0aW5nIHRoZSBtYWtlZmlsZXMuLi4iCi0gICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKLSAgICAgICAgICAgICMgUHV0IG91ciB3b3JraW5nIFBlcmwgYXQgdGhlIGZyb250IG9mIG91ciBwYXRoCi0gICAgICAgICAgICBvcy5lbnZpcm9uWyJQQVRIIl0gPSBvcy5wYXRoLmRpcm5hbWUocGVybCkgKyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoc2VwICsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MuZW52aXJvblsiUEFUSCJdCi0gICAgICAgICAgICBydW5fY29uZmlndXJlKGNvbmZpZ3VyZSwgZG9fc2NyaXB0KQotICAgICAgICAgICAgaWYgYXJjaD09Ing4NiIgYW5kIGRlYnVnOgotICAgICAgICAgICAgICAgICMgdGhlIGRvX21hc20gc2NyaXB0IGluIG9wZW5zc2wgZG9lc24ndCBnZW5lcmF0ZSBhIGRlYnVnCi0gICAgICAgICAgICAgICAgIyBidWlsZCBtYWtlZmlsZSBzbyB3ZSBnZW5lcmF0ZSBpdCBoZXJlOgotICAgICAgICAgICAgICAgIG9zLnN5c3RlbSgicGVybCB1dGlsXG1rMW1mLnBsIGRlYnVnICIrY29uZmlndXJlKyIgPiIrbWFrZWZpbGUpCi0KLSAgICAgICAgIyBOb3cgcnVuIG1ha2UuCi0gICAgICAgIG1ha2VDb21tYW5kID0gIm5tYWtlIC9ub2xvZ28gUEVSTD1cIiVzXCIgLWYgXCIlc1wiIiAlKHBlcmwsIG1ha2VmaWxlKQotICAgICAgICBwcmludCAiRXhlY3V0aW5nIHNzbCBtYWtlZmlsZXM6IiwgbWFrZUNvbW1hbmQKLSAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCi0gICAgICAgIHJjID0gb3Muc3lzdGVtKG1ha2VDb21tYW5kKQotICAgICAgICBpZiByYzoKLSAgICAgICAgICAgIHByaW50ICJFeGVjdXRpbmcgIittYWtlZmlsZSsiIGZhaWxlZCIKLSAgICAgICAgICAgIHByaW50IHJjCi0gICAgICAgICAgICBzeXMuZXhpdChyYykKLSAgICBmaW5hbGx5OgotICAgICAgICBvcy5jaGRpcihvbGRfY2QpCi0gICAgIyBBbmQgZmluYWxseSwgd2UgY2FuIGJ1aWxkIHRoZSBfc3NsIG1vZHVsZSBpdHNlbGYgZm9yIFB5dGhvbi4KLSAgICBkZWZzID0gIlNTTF9ESVI9XCIlc1wiIiAlIChzc2xfZGlyLCkKLSAgICBpZiBkZWJ1ZzoKLSAgICAgICAgZGVmcyA9IGRlZnMgKyAiICIgKyAiREVCVUc9MSIKLSAgICBpZiBhcmNoIGluICgnYW1kNjQnLCAnaWE2NCcpOgotICAgICAgICBkZWZzID0gZGVmcyArICIgRVhUUkFfQ0ZMQUdTPS9HUy0gRVhUUkFfTElCUz1idWZmZXJvdmVyZmxvd1UubGliIgotICAgIG1ha2VDb21tYW5kID0gJ25tYWtlIC9ub2xvZ28gLWYgX3NzbC5tYWsgJyArIGRlZnMgKyAiICIgKyBtYWtlX2ZsYWdzCi0gICAgcHJpbnQgIkV4ZWN1dGluZzoiLCBtYWtlQ29tbWFuZAotICAgIHN5cy5zdGRvdXQuZmx1c2goKQotICAgIHJjID0gb3Muc3lzdGVtKG1ha2VDb21tYW5kKQotICAgIHN5cy5leGl0KHJjKQotCi1pZiBfX25hbWVfXz09J19fbWFpbl9fJzoKLSAgICBtYWluKCkKZGlmZiAtLWdpdCBhL1BDL1ZTNy4xL2J6Mi52Y3Byb2ogYi9QQy9WUzcuMS9iejIudmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYjAwNWExLi4wMDAwMDAwCi0tLSBhL1BDL1ZTNy4xL2J6Mi52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSwyNzEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjcuMTAiDQotCU5hbWU9ImJ6MiINCi0JUm9vdE5hbWVzcGFjZT0iYnoyIg0KLQlTY2NQcm9qZWN0TmFtZT0iYnoyIg0KLQlTY2NMb2NhbFBhdGg9Ii4uIj4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIi8+DQotCTwvUGxhdGZvcm1zPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1kZWJ1Z1xiejIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMsLi5cLi5cLi5cYnppcDItMS4wLjMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtfREVCVUc7V0lOMzI7X1dJTkRPV1MiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIzIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIuLlwuLlwuLlxiemlwMi0xLjAuM1xsaWJiejIubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuL2J6Ml9kLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9Im1zdmNydCxsaWJjIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9iejJfZC5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxNzAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9iejJfZC5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCQlDb21tYW5kTGluZT0iY2QgLi5cLi5cLi5cYnppcDItMS4wLjMNCi1ubWFrZSAvbm9sb2dvIC9mIG1ha2VmaWxlLm1zYw0KLSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtcmVsZWFzZVxiejIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDLC4uXC4uXC4uXGJ6aXAyLTEuMC4zIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7TkRFQlVHO1dJTjMyO19XSU5ET1dTIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Ii4uXC4uXC4uXGJ6aXAyLTEuMC4zXGxpYmJ6Mi5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4vYnoyLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL2J6Mi5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxNzAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9iejIubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkJQ29tbWFuZExpbmU9ImNkIC4uXC4uXC4uXGJ6aXAyLTEuMC4zDQotbm1ha2UgL25vbG9nbyAvZiBtYWtlZmlsZS5tc2MgbGliDQotIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlSXRhbml1bXxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii4vLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5caWE2NC10ZW1wLXJlbGVhc2VcYnoyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvVVNFQ0w6TVNfSVRBTklVTSAvR1MtIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDLC4uXC4uXC4uXGJ6aXAyLTEuMC4zIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7TkRFQlVHO1dJTjMyO19XSU5ET1dTIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJGQUxTRSINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvTUFDSElORTpJQTY0IC9VU0VMSU5LOk1TX1NESyINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iLi5cLi5cLi5cYnppcDItMS4wLjNcbGliYnoyLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi9iejIucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vYnoyLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDE3MDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL2J6Mi5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCQlDb21tYW5kTGluZT0iY2QgLi5cLi5cLi5cYnppcDItMS4wLjMNCi1ubWFrZSAvbm9sb2dvIC9mIG1ha2VmaWxlLm1zYyBsaWINCi0iLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2VBTUQ2NHxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJhbWQ2NC10ZW1wLXJlbGVhc2VcYnoyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvVVNFQ0w6TVNfT1BURVJPTiAvR1MtIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDLC4uXC4uXC4uXGJ6aXAyLTEuMC4zIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7TkRFQlVHO1dJTjMyO19XSU5ET1dTIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJGQUxTRSINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvTUFDSElORTpBTUQ2NCAvVVNFTElOSzpNU19TREsiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Ii4uXC4uXC4uXGJ6aXAyLTEuMC4zXGxpYmJ6Mi5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4vYnoyLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL2J6Mi5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxNzAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9iejIubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkJQ29tbWFuZExpbmU9ImNkIC4uXC4uXC4uXGJ6aXAyLTEuMC4zDQotbm1ha2UgL25vbG9nbyAvZiBtYWtlZmlsZS5tc2MgbGliDQotIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xiejJtb2R1bGUuYyI+DQotCQk8L0ZpbGU+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTNy4xL2RiLmJ1aWxkIGIvUEMvVlM3LjEvZGIuYnVpbGQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhODdmNzQuLjAwMDAwMDAKLS0tIGEvUEMvVlM3LjEvZGIuYnVpbGQKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLTxwcm9qZWN0PgotIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXNjcmlwdGlvbj0iQnVpbGQgYWxsIHRhcmdldHMuIj4KLSAgIDxzb2x1dGlvbiBjb25maWd1cmF0aW9uPSJyZWxlYXNlIj4KLSAgICAgPHByb2plY3RzPgotICAgICAgIDxpbmNsdWRlIG5hbWU9ImRiX3N0YXRpYy52Y3Byb2oiIC8+Ci0gICAgIDwvcHJvamVjdHM+Ci0gICA8L3NvbHV0aW9uPgotIDwvdGFyZ2V0PgotPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvZmllbGQzLnB5IGIvUEMvVlM3LjEvZmllbGQzLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0N2YyNGNhLi4wMDAwMDAwCi0tLSBhL1BDL1ZTNy4xL2ZpZWxkMy5weQorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLSMgQW4gYWJzdXJkIHdvcmthcm91bmQgZm9yIHRoZSBsYWNrIG9mIGFyaXRobWV0aWMgaW4gTVMncyByZXNvdXJjZSBjb21waWxlci4KLSMgQWZ0ZXIgYnVpbGRpbmcgUHl0aG9uLCBydW4gdGhpcywgdGhlbiBwYXN0ZSB0aGUgb3V0cHV0IGludG8gdGhlIGFwcHJvcHJpYXRlCi0jIHBhcnQgb2YgUENccHl0aG9uX250LnJjLgotIyBFeGFtcGxlIG91dHB1dDoKLSMKLSMgKiBGb3IgMi4zYTAsCi0jICogUFlfTUlDUk9fVkVSU0lPTiA9IDAKLSMgKiBQWV9SRUxFQVNFX0xFVkVMID0gJ2FscGhhJyA9IDB4QQotIyAqIFBZX1JFTEVBU0VfU0VSSUFMID0gMQotIyAqCi0jICogYW5kIDAqMTAwMCArIDEwKjEwICsgMSA9IDEwMS4KLSMgKi8KLSMgI2RlZmluZSBGSUVMRDMgMTAxCi0KLWltcG9ydCBzeXMKLQotbWFqb3IsIG1pbm9yLCBtaWNybywgbGV2ZWwsIHNlcmlhbCA9IHN5cy52ZXJzaW9uX2luZm8KLWxldmVsbnVtID0geydhbHBoYSc6IDB4QSwKLSAgICAgICAgICAgICdiZXRhJzogMHhCLAotICAgICAgICAgICAgJ2NhbmRpZGF0ZSc6IDB4QywKLSAgICAgICAgICAgICdmaW5hbCc6IDB4RiwKLSAgICAgICAgICAgfVtsZXZlbF0KLXN0cmluZyA9IHN5cy52ZXJzaW9uLnNwbGl0KClbMF0gIyBsaWtlICcyLjNhMCcKLQotcHJpbnQgIiAqIEZvciAlcywiICUgc3RyaW5nCi1wcmludCAiICogUFlfTUlDUk9fVkVSU0lPTiA9ICVkIiAlIG1pY3JvCi1wcmludCAiICogUFlfUkVMRUFTRV9MRVZFTCA9ICVyID0gJXMiICUgKGxldmVsLCBoZXgobGV2ZWxudW0pKQotcHJpbnQgIiAqIFBZX1JFTEVBU0VfU0VSSUFMID0gJWQiICUgc2VyaWFsCi1wcmludCAiICoiCi0KLWZpZWxkMyA9IG1pY3JvICogMTAwMCArIGxldmVsbnVtICogMTAgKyBzZXJpYWwKLQotcHJpbnQgIiAqIGFuZCAlZCoxMDAwICsgJWQqMTAgKyAlZCA9ICVkIiAlIChtaWNybywgbGV2ZWxudW0sIHNlcmlhbCwgZmllbGQzKQotcHJpbnQgIiAqLyIKLXByaW50ICIjZGVmaW5lIEZJRUxEMyIsIGZpZWxkMwpkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvaW5zdGFsbGVyLmJtcCBiL1BDL1ZTNy4xL2luc3RhbGxlci5ibXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4NzVlMTkuLjAwMDAwMDAKLS0tIGEvUEMvVlM3LjEvaW5zdGFsbGVyLmJtcAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1BDL1ZTNy4xL21ha2VfYnVpbGRpbmZvLmMgYi9QQy9WUzcuMS9tYWtlX2J1aWxkaW5mby5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYWEyYjY2Li4wMDAwMDAwCi0tLSBhL1BDL1ZTNy4xL21ha2VfYnVpbGRpbmZvLmMKKysrIC9kZXYvbnVsbApAQCAtMSw5MiArMCwwIEBACi0jaW5jbHVkZSA8d2luZG93cy5oPgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLQotLyogVGhpcyBmaWxlIGNyZWF0ZXMgdGhlIGdldGJ1aWxkaW5mby5vIG9iamVjdCwgYnkgZmlyc3QKLSAgIGludm9raW5nIHN1YndjcmV2LmV4ZSAoaWYgZm91bmQpLCBhbmQgdGhlbiBpbnZva2luZyBjbC5leGUuCi0gICBBcyBhIHNpZGUgZWZmZWN0LCBpdCBtaWdodCBnZW5lcmF0ZSBQQ1xWUzcuMVxnZXRidWlsZGluZm8yLmMKLSAgIGFsc28uIElmIHRoaXMgaXNuJ3QgYSBzdWJ2ZXJzaW9uIGNoZWNrb3V0LCBvciBzdWJ3Y3JldiBpc24ndAotICAgZm91bmQsIGl0IGNvbXBpbGVzIC4uXFwuLlxcTW9kdWxlc1xcZ2V0YnVpbGRpbmZvLmMgaW5zdGVhZC4KLQotICAgQ3VycmVudGx5LCBzdWJ3Y3Jldi5leGUgaXMgZm91bmQgZnJvbSB0aGUgcmVnaXN0cnkgZW50cmllcwotICAgb2YgVG9ydG9pc2VTVk4uCi0KLSAgIE5vIGF0dGVtcHQgaXMgbWFkZSB0byBwbGFjZSBnZXRidWlsZGluZm8ubyBpbnRvIHRoZSBwcm9wZXIKLSAgIGJpbmFyeSBkaXJlY3RvcnkuIFRoaXMgaXNuJ3QgbmVjZXNzYXJ5LCBhcyB0aGlzIHRvb2wgaXMKLSAgIGludm9rZWQgYXMgYSBwcmUtbGluayBzdGVwIGZvciBweXRob25jb3JlLCBzbyB0aGF0IG92ZXJ3cml0ZXMKLSAgIGFueSBwcmV2aW91cyBnZXRidWlsZGluZm8uby4KLQotKi8KLQotaW50IG1ha2VfYnVpbGRpbmZvMigpCi17Ci0gICAgc3RydWN0IF9zdGF0IHN0OwotICAgIEhLRVkgaFRvcnRvaXNlOwotICAgIGNoYXIgY29tbWFuZFs1MDBdOwotICAgIERXT1JEIHR5cGUsIHNpemU7Ci0gICAgaWYgKF9zdGF0KCIuc3ZuIiwgJnN0KSA8IDApCi0gICAgICAgIHJldHVybiAwOwotICAgIC8qIEFsbG93IHN1cHByZXNzaW9uIG9mIHN1YndjcmV2LmV4ZSBpbnZvY2F0aW9uIGlmIGEgbm9fc3Vid2NyZXYgZmlsZSBpcyBwcmVzZW50LiAqLwotICAgIGlmIChfc3RhdCgibm9fc3Vid2NyZXYiLCAmc3QpID09IDApCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmIChSZWdPcGVuS2V5KEhLRVlfTE9DQUxfTUFDSElORSwgIlNvZnR3YXJlXFxUb3J0b2lzZVNWTiIsICZoVG9ydG9pc2UpICE9IEVSUk9SX1NVQ0NFU1MgJiYKLSAgICAgICAgUmVnT3BlbktleShIS0VZX0NVUlJFTlRfVVNFUiwgIlNvZnR3YXJlXFxUb3J0b2lzZVNWTiIsICZoVG9ydG9pc2UpICE9IEVSUk9SX1NVQ0NFU1MpCi0gICAgICAgIC8qIFRvcnRvaXNlIG5vdCBpbnN0YWxsZWQgKi8KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgY29tbWFuZFswXSA9ICciJzsgIC8qIHF1b3RlIHRoZSBwYXRoIHRvIHRoZSBleGVjdXRhYmxlICovCi0gICAgc2l6ZSA9IHNpemVvZihjb21tYW5kKSAtIDE7Ci0gICAgaWYgKFJlZ1F1ZXJ5VmFsdWVFeChoVG9ydG9pc2UsICJEaXJlY3RvcnkiLCAwLCAmdHlwZSwgY29tbWFuZCsxLCAmc2l6ZSkgIT0gRVJST1JfU1VDQ0VTUyB8fAotICAgICAgICB0eXBlICE9IFJFR19TWikKLSAgICAgICAgLyogUmVnaXN0cnkgY29ycnVwdGVkICovCi0gICAgICAgIHJldHVybiAwOwotICAgIHN0cmNhdChjb21tYW5kLCAiYmluXFxzdWJ3Y3Jldi5leGUiKTsKLSAgICBpZiAoX3N0YXQoY29tbWFuZCsxLCAmc3QpIDwgMCkKLSAgICAgICAgLyogc3Vid2NyZXYuZXhlIG5vdCBwYXJ0IG9mIHRoZSByZWxlYXNlICovCi0gICAgICAgIHJldHVybiAwOwotICAgIHN0cmNhdChjb21tYW5kLCAiXCIgLi5cXC4uIC4uXFwuLlxcTW9kdWxlc1xcZ2V0YnVpbGRpbmZvLmMgZ2V0YnVpbGRpbmZvMi5jIik7Ci0gICAgcHV0cyhjb21tYW5kKTsgZmZsdXNoKHN0ZG91dCk7Ci0gICAgaWYgKHN5c3RlbShjb21tYW5kKSA8IDApCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiAxOwotfQotCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhciphcmd2W10pCi17Ci0gICAgY2hhciBjb21tYW5kWzUwMF0gPSAiY2wuZXhlIC1jIC1EX1dJTjMyIC1EVVNFX0RMX0VYUE9SVCAtRF9XSU5ET1dTIC1EV0lOMzIgLURfV0lORExMICI7Ci0gICAgaW50IGRvX3VubGluaywgcmVzdWx0OwotICAgIGlmIChhcmdjICE9IDIpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJtYWtlX2J1aWxkaW5mbyAkKENvbmZpZ3VyYXRpb25OYW1lKVxuIik7Ci0gICAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7Ci0gICAgfQotICAgIGlmIChzdHJjbXAoYXJndlsxXSwgIlJlbGVhc2UiKSA9PSAwKSB7Ci0gICAgICAgIHN0cmNhdChjb21tYW5kLCAiLU1EICIpOwotICAgIH0KLSAgICBlbHNlIGlmIChzdHJjbXAoYXJndlsxXSwgIkRlYnVnIikgPT0gMCkgewotICAgICAgICBzdHJjYXQoY29tbWFuZCwgIi1EX0RFQlVHIC1NRGQgIik7Ci0gICAgfQotICAgIGVsc2UgaWYgKHN0cmNtcChhcmd2WzFdLCAiUmVsZWFzZUl0YW5pdW0iKSA9PSAwKSB7Ci0gICAgICAgIHN0cmNhdChjb21tYW5kLCAiLU1EIC9VU0VDTDpNU19JVEFOSVVNICIpOwotICAgIH0KLSAgICBlbHNlIGlmIChzdHJjbXAoYXJndlsxXSwgIlJlbGVhc2VBTUQ2NCIpID09IDApIHsKLSAgICAgICAgc3RyY2F0KGNvbW1hbmQsICItTUQgIik7Ci0gICAgICAgIHN0cmNhdChjb21tYW5kLCAiLU1EIC9VU0VDTDpNU19PUFRFUk9OICIpOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJ1bnN1cHBvcnRlZCBjb25maWd1cmF0aW9uICVzXG4iLCBhcmd2WzFdKTsKLSAgICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKLSAgICB9Ci0KLSAgICBpZiAoKGRvX3VubGluayA9IG1ha2VfYnVpbGRpbmZvMigpKSkKLSAgICAgICAgc3RyY2F0KGNvbW1hbmQsICJnZXRidWlsZGluZm8yLmMgLURTVUJXQ1JFViAiKTsKLSAgICBlbHNlCi0gICAgICAgIHN0cmNhdChjb21tYW5kLCAiLi5cXC4uXFxNb2R1bGVzXFxnZXRidWlsZGluZm8uYyIpOwotICAgIHN0cmNhdChjb21tYW5kLCAiIC1Gb2dldGJ1aWxkaW5mby5vIC1JLi5cXC4uXFxJbmNsdWRlIC1JLi5cXC4uXFxQQyIpOwotICAgIHB1dHMoY29tbWFuZCk7IGZmbHVzaChzdGRvdXQpOwotICAgIHJlc3VsdCA9IHN5c3RlbShjb21tYW5kKTsKLSAgICBpZiAoZG9fdW5saW5rKQotICAgICAgICB1bmxpbmsoImdldGJ1aWxkaW5mbzIuYyIpOwotICAgIGlmIChyZXN1bHQgPCAwKQotICAgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOwotICAgIHJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvbWFrZV9idWlsZGluZm8udmNwcm9qIGIvUEMvVlM3LjEvbWFrZV9idWlsZGluZm8udmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMGM4YTVkLi4wMDAwMDAwCi0tLSBhL1BDL1ZTNy4xL21ha2VfYnVpbGRpbmZvLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDEyMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ3aW5kb3dzLTEyNTAiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iNy4xMCINCi0JTmFtZT0ibWFrZV9idWlsZGluZm8iDQotCVByb2plY3RHVUlEPSJ7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfSINCi0JS2V5d29yZD0iV2luMzJQcm9qIj4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIi8+DQotCTwvUGxhdGZvcm1zPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtcmVsZWFzZVxtYWtlX2J1aWxkaW5mbyINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19ERUJVRztfQ09OU09MRSINCi0JCQkJTWluaW1hbFJlYnVpbGQ9IlRSVUUiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJUnVudGltZUxpYnJhcnk9IjUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iNCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcikvbWFrZV9idWlsZGluZm8uZXhlIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjIiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iJChPdXREaXIpL21ha2VfYnVpbGRpbmZvLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIxIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLXJlbGVhc2VcbWFrZV9idWlsZGluZm8iDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7TkRFQlVHO19DT05TT0xFIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iNCINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKS9tYWtlX2J1aWxkaW5mby5leGUiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJCU9wdGltaXplUmVmZXJlbmNlcz0iMiINCi0JCQkJRW5hYmxlQ09NREFURm9sZGluZz0iMiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJTb3VyY2UgRmlsZXMiDQotCQkJRmlsdGVyPSJjcHA7YztjeHg7ZGVmO29kbDtpZGw7aHBqO2JhdDthc207YXNteCINCi0JCQlVbmlxdWVJZGVudGlmaWVyPSJ7NEZDNzM3RjEtQzdBNS00Mzc2LUEwNjYtMkEzMkQ3NTJBMkZGfSI+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuXG1ha2VfYnVpbGRpbmZvLmMiPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzcuMS9tYWtlX3ZlcnNpb25pbmZvLnZjcHJvaiBiL1BDL1ZTNy4xL21ha2VfdmVyc2lvbmluZm8udmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZmZhNGViLi4wMDAwMDAwCi0tLSBhL1BDL1ZTNy4xL21ha2VfdmVyc2lvbmluZm8udmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsMTQyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI3LjEwIg0KLQlOYW1lPSJtYWtlX3ZlcnNpb25pbmZvIg0KLQlSb290TmFtZXNwYWNlPSJtYWtlX3ZlcnNpb25pbmZvIg0KLQlTY2NQcm9qZWN0TmFtZT0ibWFrZV92ZXJzaW9uaW5mbyINCi0JU2NjTG9jYWxQYXRoPSIuLiI+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiIvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1yZWxlYXNlXG1ha2VfdmVyc2lvbmluZm8iDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIg0KLQkJCUNoYXJhY3RlclNldD0iMiI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO05ERUJVRztfQ09OU09MRSINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCQlDb21tYW5kTGluZT0iLlxtYWtlX3ZlcnNpb25pbmZvLmV4ZSAmZ3Q7Li5cLi5cUENccHl0aG9ubnRfcmMuaA0KLSINCi0JCQkJT3V0cHV0cz0iLi5cLi5cUENccHl0aG9ubnRfcmMuaCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0ib2RiY2NwMzIubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuXC4vbWFrZV92ZXJzaW9uaW5mby5leGUiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9tYWtlX3ZlcnNpb25pbmZvLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIxIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZDAwMDAwMCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkJQ29tbWFuZExpbmU9IiQoVGFyZ2V0RmlsZU5hbWUpICZndDsgLi5cLi5cUENccHl0aG9uX250LmgiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtZGVidWdcbWFrZV92ZXJzaW9uaW5mbyINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtfREVCVUc7X0NPTlNPTEUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIzIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJQnJvd3NlSW5mb3JtYXRpb249IjEiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkJQ29tbWFuZExpbmU9Ii5cbWFrZV92ZXJzaW9uaW5mb19kLmV4ZSAmZ3Q7Li5cLi5cUENccHl0aG9ubnRfcmNfZC5oDQotIg0KLQkJCQlPdXRwdXRzPSIuLlwuLlxQQ1xweXRob25udF9yY19kLmgiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Im9kYmNjcDMyLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi9tYWtlX3ZlcnNpb25pbmZvX2QuZXhlIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vbWFrZV92ZXJzaW9uaW5mb19kLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIxIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZDAwMDAwMCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkJQ29tbWFuZExpbmU9IiQoVGFyZ2V0RmlsZU5hbWUpICZndDsgLi5cLi5cUENccHl0aG9uX250X2QuaCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xtYWtlX3ZlcnNpb25pbmZvLmMiPg0KLQkJPC9GaWxlPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzcuMS9wY2J1aWxkLnNsbiBiL1BDL1ZTNy4xL3BjYnVpbGQuc2xuCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MjBmMTljLi4wMDAwMDAwCi0tLSBhL1BDL1ZTNy4xL3BjYnVpbGQuc2xuCisrKyAvZGV2L251bGwKQEAgLTEsMjc1ICswLDAgQEAKLU1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIFNvbHV0aW9uIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDguMDANCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIl9zb2NrZXQiLCAiX3NvY2tldC52Y3Byb2oiLCAiezMyNEY2NkMyLTQ0RDAtNEQ1MC1COTc5LUY5REFFN0ZEMzZEQn0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJfc3NsIiwgIl9zc2wudmNwcm9qIiwgIns4RTg1QkE1NC04QTQ3LTRDOEItQjcyRS04RTE3NTc5Q0M2RDd9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fSA9IHtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQotCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fSA9IHtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiX3Rlc3RjYXBpIiwgIl90ZXN0Y2FwaS52Y3Byb2oiLCAiezU5Q0JGNDc0LTlFMDYtNEM1MC05MTQyLUM0NEExMThCQjQ0N30iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJfdGtpbnRlciIsICJfdGtpbnRlci52Y3Byb2oiLCAiezVCNTFERkY3LTVEQzAtNDFGOC04NzkxLUE0QUI3MTE0QTE1MX0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJiejIiLCAiYnoyLnZjcHJvaiIsICJ7QUM1NTc3ODgtNjM1NC00M0Y3LUJFMDUtQzlDOEM1OUEzNDRBfSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIm1ha2VfdmVyc2lvbmluZm8iLCAibWFrZV92ZXJzaW9uaW5mby52Y3Byb2oiLCAie0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJweWV4cGF0IiwgInB5ZXhwYXQudmNwcm9qIiwgIns3RTU1MTM5My0zQzQzLTQ3RjgtOUYzRi01QkMzNjhBNkM0ODd9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAicHl0aG9uIiwgInB5dGhvbi52Y3Byb2oiLCAie0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJweXRob25jb3JlIiwgInB5dGhvbmNvcmUudmNwcm9qIiwgIntDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7RjBFMDU0MUUtRjE3RC00MzBCLTk3QzQtOTNBREYwREQyODRFfSA9IHtGMEUwNTQxRS1GMTdELTQzMEItOTdDNC05M0FERjBERDI4NEV9DQotCQl7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfSA9IHtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAicHl0aG9udyIsICJweXRob253LnZjcHJvaiIsICJ7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gInNlbGVjdCIsICJzZWxlY3QudmNwcm9qIiwgIns5NzIzOUE1Ni1EQkMwLTQxRDItQkMxNC1DODdEOUI5N0Q2M0J9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAidW5pY29kZWRhdGEiLCAidW5pY29kZWRhdGEudmNwcm9qIiwgIntGQTVGQzdFQi1DNzJGLTQxNUYtQUU0Mi05MURENjA1QUJEREF9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAidzl4cG9wZW4iLCAidzl4cG9wZW4udmNwcm9qIiwgIntFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAid2luc291bmQiLCAid2luc291bmQudmNwcm9qIiwgIns1MUYzNUZBRS1GQjkyLTRCMkMtOTE4Ny0xNTQyQzA2NUFENzd9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiX2VsZW1lbnR0cmVlIiwgIl9lbGVtZW50dHJlZS52Y3Byb2oiLCAiezE5NjZEREUyLTRBQjctNEU0RS1BQ0M5LUMxMjFFNEQzN0Y4RX0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJtYWtlX2J1aWxkaW5mbyIsICJtYWtlX2J1aWxkaW5mby52Y3Byb2oiLCAie0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJfbXNpIiwgIl9tc2kudmNwcm9qIiwgInsyQzBCRUZCOS03MEUyLTRGODAtQUM1Qi00QUI4RUUwMjM1NzR9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiX2N0eXBlcyIsICJfY3R5cGVzLnZjcHJvaiIsICJ7RjIyRjQwRjQtRDMxOC00MERDLTk2QjMtODhEQzgxQ0UwODk0fSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIl9jdHlwZXNfdGVzdCIsICJfY3R5cGVzX3Rlc3QudmNwcm9qIiwgIns4Q0YzMzREOS00RjgyLTQyRUItOTdBRi04MzU5MkM1QUZEMkZ9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7RjIyRjQwRjQtRDMxOC00MERDLTk2QjMtODhEQzgxQ0UwODk0fSA9IHtGMjJGNDBGNC1EMzE4LTQwREMtOTZCMy04OERDODFDRTA4OTR9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiX3NxbGl0ZTMiLCAiX3NxbGl0ZTMudmNwcm9qIiwgInsyRkYwQTMxMi0yMkY5LTRDMzQtQjA3MC04NDI5MTZERTI3QTl9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLUdsb2JhbA0KLQlHbG9iYWxTZWN0aW9uKFNvbHV0aW9uQ29uZmlndXJhdGlvbikgPSBwcmVTb2x1dGlvbg0KLQkJRGVidWcgPSBEZWJ1Zw0KLQkJUmVsZWFzZSA9IFJlbGVhc2UNCi0JCVJlbGVhc2VBTUQ2NCA9IFJlbGVhc2VBTUQ2NA0KLQkJUmVsZWFzZUl0YW5pdW0gPSBSZWxlYXNlSXRhbml1bQ0KLQlFbmRHbG9iYWxTZWN0aW9uDQotCUdsb2JhbFNlY3Rpb24oUHJvamVjdENvbmZpZ3VyYXRpb24pID0gcG9zdFNvbHV0aW9uDQotCQl7MzI0RjY2QzItNDREMC00RDUwLUI5NzktRjlEQUU3RkQzNkRCfS5EZWJ1Zy5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJezMyNEY2NkMyLTQ0RDAtNEQ1MC1COTc5LUY5REFFN0ZEMzZEQn0uRGVidWcuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7MzI0RjY2QzItNDREMC00RDUwLUI5NzktRjlEQUU3RkQzNkRCfS5SZWxlYXNlLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXszMjRGNjZDMi00NEQwLTRENTAtQjk3OS1GOURBRTdGRDM2REJ9LlJlbGVhc2UuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXszMjRGNjZDMi00NEQwLTRENTAtQjk3OS1GOURBRTdGRDM2REJ9LlJlbGVhc2VBTUQ2NC5BY3RpdmVDZmcgPSBSZWxlYXNlQU1ENjR8V2luMzINCi0JCXszMjRGNjZDMi00NEQwLTRENTAtQjk3OS1GOURBRTdGRDM2REJ9LlJlbGVhc2VBTUQ2NC5CdWlsZC4wID0gUmVsZWFzZUFNRDY0fFdpbjMyDQotCQl7MzI0RjY2QzItNDREMC00RDUwLUI5NzktRjlEQUU3RkQzNkRCfS5SZWxlYXNlSXRhbml1bS5BY3RpdmVDZmcgPSBSZWxlYXNlSXRhbml1bXxXaW4zMg0KLQkJezMyNEY2NkMyLTQ0RDAtNEQ1MC1COTc5LUY5REFFN0ZEMzZEQn0uUmVsZWFzZUl0YW5pdW0uQnVpbGQuMCA9IFJlbGVhc2VJdGFuaXVtfFdpbjMyDQotCQl7OEU4NUJBNTQtOEE0Ny00QzhCLUI3MkUtOEUxNzU3OUNDNkQ3fS5EZWJ1Zy5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJezhFODVCQTU0LThBNDctNEM4Qi1CNzJFLThFMTc1NzlDQzZEN30uRGVidWcuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7OEU4NUJBNTQtOEE0Ny00QzhCLUI3MkUtOEUxNzU3OUNDNkQ3fS5SZWxlYXNlLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXs4RTg1QkE1NC04QTQ3LTRDOEItQjcyRS04RTE3NTc5Q0M2RDd9LlJlbGVhc2UuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXs4RTg1QkE1NC04QTQ3LTRDOEItQjcyRS04RTE3NTc5Q0M2RDd9LlJlbGVhc2VBTUQ2NC5BY3RpdmVDZmcgPSBSZWxlYXNlQU1ENjR8V2luMzINCi0JCXs4RTg1QkE1NC04QTQ3LTRDOEItQjcyRS04RTE3NTc5Q0M2RDd9LlJlbGVhc2VBTUQ2NC5CdWlsZC4wID0gUmVsZWFzZUFNRDY0fFdpbjMyDQotCQl7OEU4NUJBNTQtOEE0Ny00QzhCLUI3MkUtOEUxNzU3OUNDNkQ3fS5SZWxlYXNlSXRhbml1bS5BY3RpdmVDZmcgPSBSZWxlYXNlSXRhbml1bXxXaW4zMg0KLQkJezhFODVCQTU0LThBNDctNEM4Qi1CNzJFLThFMTc1NzlDQzZEN30uUmVsZWFzZUl0YW5pdW0uQnVpbGQuMCA9IFJlbGVhc2VJdGFuaXVtfFdpbjMyDQotCQl7NTlDQkY0NzQtOUUwNi00QzUwLTkxNDItQzQ0QTExOEJCNDQ3fS5EZWJ1Zy5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJezU5Q0JGNDc0LTlFMDYtNEM1MC05MTQyLUM0NEExMThCQjQ0N30uRGVidWcuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7NTlDQkY0NzQtOUUwNi00QzUwLTkxNDItQzQ0QTExOEJCNDQ3fS5SZWxlYXNlLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXs1OUNCRjQ3NC05RTA2LTRDNTAtOTE0Mi1DNDRBMTE4QkI0NDd9LlJlbGVhc2UuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXs1OUNCRjQ3NC05RTA2LTRDNTAtOTE0Mi1DNDRBMTE4QkI0NDd9LlJlbGVhc2VBTUQ2NC5BY3RpdmVDZmcgPSBSZWxlYXNlQU1ENjR8V2luMzINCi0JCXs1OUNCRjQ3NC05RTA2LTRDNTAtOTE0Mi1DNDRBMTE4QkI0NDd9LlJlbGVhc2VBTUQ2NC5CdWlsZC4wID0gUmVsZWFzZUFNRDY0fFdpbjMyDQotCQl7NTlDQkY0NzQtOUUwNi00QzUwLTkxNDItQzQ0QTExOEJCNDQ3fS5SZWxlYXNlSXRhbml1bS5BY3RpdmVDZmcgPSBSZWxlYXNlSXRhbml1bXxXaW4zMg0KLQkJezU5Q0JGNDc0LTlFMDYtNEM1MC05MTQyLUM0NEExMThCQjQ0N30uUmVsZWFzZUl0YW5pdW0uQnVpbGQuMCA9IFJlbGVhc2VJdGFuaXVtfFdpbjMyDQotCQl7NUI1MURGRjctNURDMC00MUY4LTg3OTEtQTRBQjcxMTRBMTUxfS5EZWJ1Zy5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJezVCNTFERkY3LTVEQzAtNDFGOC04NzkxLUE0QUI3MTE0QTE1MX0uRGVidWcuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7NUI1MURGRjctNURDMC00MUY4LTg3OTEtQTRBQjcxMTRBMTUxfS5SZWxlYXNlLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXs1QjUxREZGNy01REMwLTQxRjgtODc5MS1BNEFCNzExNEExNTF9LlJlbGVhc2UuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXs1QjUxREZGNy01REMwLTQxRjgtODc5MS1BNEFCNzExNEExNTF9LlJlbGVhc2VBTUQ2NC5BY3RpdmVDZmcgPSBSZWxlYXNlQU1ENjR8V2luMzINCi0JCXs1QjUxREZGNy01REMwLTQxRjgtODc5MS1BNEFCNzExNEExNTF9LlJlbGVhc2VBTUQ2NC5CdWlsZC4wID0gUmVsZWFzZUFNRDY0fFdpbjMyDQotCQl7NUI1MURGRjctNURDMC00MUY4LTg3OTEtQTRBQjcxMTRBMTUxfS5SZWxlYXNlSXRhbml1bS5BY3RpdmVDZmcgPSBSZWxlYXNlSXRhbml1bXxXaW4zMg0KLQkJezVCNTFERkY3LTVEQzAtNDFGOC04NzkxLUE0QUI3MTE0QTE1MX0uUmVsZWFzZUl0YW5pdW0uQnVpbGQuMCA9IFJlbGVhc2VJdGFuaXVtfFdpbjMyDQotCQl7QUM1NTc3ODgtNjM1NC00M0Y3LUJFMDUtQzlDOEM1OUEzNDRBfS5EZWJ1Zy5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJe0FDNTU3Nzg4LTYzNTQtNDNGNy1CRTA1LUM5QzhDNTlBMzQ0QX0uRGVidWcuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7QUM1NTc3ODgtNjM1NC00M0Y3LUJFMDUtQzlDOEM1OUEzNDRBfS5SZWxlYXNlLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtBQzU1Nzc4OC02MzU0LTQzRjctQkUwNS1DOUM4QzU5QTM0NEF9LlJlbGVhc2UuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtBQzU1Nzc4OC02MzU0LTQzRjctQkUwNS1DOUM4QzU5QTM0NEF9LlJlbGVhc2VBTUQ2NC5BY3RpdmVDZmcgPSBSZWxlYXNlQU1ENjR8V2luMzINCi0JCXtBQzU1Nzc4OC02MzU0LTQzRjctQkUwNS1DOUM4QzU5QTM0NEF9LlJlbGVhc2VBTUQ2NC5CdWlsZC4wID0gUmVsZWFzZUFNRDY0fFdpbjMyDQotCQl7QUM1NTc3ODgtNjM1NC00M0Y3LUJFMDUtQzlDOEM1OUEzNDRBfS5SZWxlYXNlSXRhbml1bS5BY3RpdmVDZmcgPSBSZWxlYXNlSXRhbml1bXxXaW4zMg0KLQkJe0FDNTU3Nzg4LTYzNTQtNDNGNy1CRTA1LUM5QzhDNTlBMzQ0QX0uUmVsZWFzZUl0YW5pdW0uQnVpbGQuMCA9IFJlbGVhc2VJdGFuaXVtfFdpbjMyDQotCQl7RjBFMDU0MUUtRjE3RC00MzBCLTk3QzQtOTNBREYwREQyODRFfS5EZWJ1Zy5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJe0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0uRGVidWcuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7RjBFMDU0MUUtRjE3RC00MzBCLTk3QzQtOTNBREYwREQyODRFfS5SZWxlYXNlLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtGMEUwNTQxRS1GMTdELTQzMEItOTdDNC05M0FERjBERDI4NEV9LlJlbGVhc2UuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtGMEUwNTQxRS1GMTdELTQzMEItOTdDNC05M0FERjBERDI4NEV9LlJlbGVhc2VBTUQ2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7RjBFMDU0MUUtRjE3RC00MzBCLTk3QzQtOTNBREYwREQyODRFfS5SZWxlYXNlQU1ENjQuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtGMEUwNTQxRS1GMTdELTQzMEItOTdDNC05M0FERjBERDI4NEV9LlJlbGVhc2VJdGFuaXVtLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtGMEUwNTQxRS1GMTdELTQzMEItOTdDNC05M0FERjBERDI4NEV9LlJlbGVhc2VJdGFuaXVtLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7N0U1NTEzOTMtM0M0My00N0Y4LTlGM0YtNUJDMzY4QTZDNDg3fS5EZWJ1Zy5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJezdFNTUxMzkzLTNDNDMtNDdGOC05RjNGLTVCQzM2OEE2QzQ4N30uRGVidWcuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7N0U1NTEzOTMtM0M0My00N0Y4LTlGM0YtNUJDMzY4QTZDNDg3fS5SZWxlYXNlLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXs3RTU1MTM5My0zQzQzLTQ3RjgtOUYzRi01QkMzNjhBNkM0ODd9LlJlbGVhc2UuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXs3RTU1MTM5My0zQzQzLTQ3RjgtOUYzRi01QkMzNjhBNkM0ODd9LlJlbGVhc2VBTUQ2NC5BY3RpdmVDZmcgPSBSZWxlYXNlQU1ENjR8V2luMzINCi0JCXs3RTU1MTM5My0zQzQzLTQ3RjgtOUYzRi01QkMzNjhBNkM0ODd9LlJlbGVhc2VBTUQ2NC5CdWlsZC4wID0gUmVsZWFzZUFNRDY0fFdpbjMyDQotCQl7N0U1NTEzOTMtM0M0My00N0Y4LTlGM0YtNUJDMzY4QTZDNDg3fS5SZWxlYXNlSXRhbml1bS5BY3RpdmVDZmcgPSBSZWxlYXNlSXRhbml1bXxXaW4zMg0KLQkJezdFNTUxMzkzLTNDNDMtNDdGOC05RjNGLTVCQzM2OEE2QzQ4N30uUmVsZWFzZUl0YW5pdW0uQnVpbGQuMCA9IFJlbGVhc2VJdGFuaXVtfFdpbjMyDQotCQl7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fS5EZWJ1Zy5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJe0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0uRGVidWcuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fS5SZWxlYXNlLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9LlJlbGVhc2UuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9LlJlbGVhc2VBTUQ2NC5BY3RpdmVDZmcgPSBSZWxlYXNlQU1ENjR8V2luMzINCi0JCXtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9LlJlbGVhc2VBTUQ2NC5CdWlsZC4wID0gUmVsZWFzZUFNRDY0fFdpbjMyDQotCQl7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fS5SZWxlYXNlSXRhbml1bS5BY3RpdmVDZmcgPSBSZWxlYXNlSXRhbml1bXxXaW4zMg0KLQkJe0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0uUmVsZWFzZUl0YW5pdW0uQnVpbGQuMCA9IFJlbGVhc2VJdGFuaXVtfFdpbjMyDQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fS5EZWJ1Zy5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0uRGVidWcuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fS5SZWxlYXNlLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9LlJlbGVhc2UuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9LlJlbGVhc2VBTUQ2NC5BY3RpdmVDZmcgPSBSZWxlYXNlQU1ENjR8V2luMzINCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9LlJlbGVhc2VBTUQ2NC5CdWlsZC4wID0gUmVsZWFzZUFNRDY0fFdpbjMyDQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fS5SZWxlYXNlSXRhbml1bS5BY3RpdmVDZmcgPSBSZWxlYXNlSXRhbml1bXxXaW4zMg0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0uUmVsZWFzZUl0YW5pdW0uQnVpbGQuMCA9IFJlbGVhc2VJdGFuaXVtfFdpbjMyDQotCQl7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfS5EZWJ1Zy5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJe0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0uRGVidWcuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfS5SZWxlYXNlLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtGNDIyOUNDMy04NzNDLTQ5QUUtOTcyOS1ERDMwOEVENENENEF9LlJlbGVhc2UuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtGNDIyOUNDMy04NzNDLTQ5QUUtOTcyOS1ERDMwOEVENENENEF9LlJlbGVhc2VBTUQ2NC5BY3RpdmVDZmcgPSBSZWxlYXNlQU1ENjR8V2luMzINCi0JCXtGNDIyOUNDMy04NzNDLTQ5QUUtOTcyOS1ERDMwOEVENENENEF9LlJlbGVhc2VBTUQ2NC5CdWlsZC4wID0gUmVsZWFzZUFNRDY0fFdpbjMyDQotCQl7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfS5SZWxlYXNlSXRhbml1bS5BY3RpdmVDZmcgPSBSZWxlYXNlSXRhbml1bXxXaW4zMg0KLQkJe0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0uUmVsZWFzZUl0YW5pdW0uQnVpbGQuMCA9IFJlbGVhc2VJdGFuaXVtfFdpbjMyDQotCQl7OTcyMzlBNTYtREJDMC00MUQyLUJDMTQtQzg3RDlCOTdENjNCfS5EZWJ1Zy5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJezk3MjM5QTU2LURCQzAtNDFEMi1CQzE0LUM4N0Q5Qjk3RDYzQn0uRGVidWcuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7OTcyMzlBNTYtREJDMC00MUQyLUJDMTQtQzg3RDlCOTdENjNCfS5SZWxlYXNlLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXs5NzIzOUE1Ni1EQkMwLTQxRDItQkMxNC1DODdEOUI5N0Q2M0J9LlJlbGVhc2UuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXs5NzIzOUE1Ni1EQkMwLTQxRDItQkMxNC1DODdEOUI5N0Q2M0J9LlJlbGVhc2VBTUQ2NC5BY3RpdmVDZmcgPSBSZWxlYXNlQU1ENjR8V2luMzINCi0JCXs5NzIzOUE1Ni1EQkMwLTQxRDItQkMxNC1DODdEOUI5N0Q2M0J9LlJlbGVhc2VBTUQ2NC5CdWlsZC4wID0gUmVsZWFzZUFNRDY0fFdpbjMyDQotCQl7OTcyMzlBNTYtREJDMC00MUQyLUJDMTQtQzg3RDlCOTdENjNCfS5SZWxlYXNlSXRhbml1bS5BY3RpdmVDZmcgPSBSZWxlYXNlSXRhbml1bXxXaW4zMg0KLQkJezk3MjM5QTU2LURCQzAtNDFEMi1CQzE0LUM4N0Q5Qjk3RDYzQn0uUmVsZWFzZUl0YW5pdW0uQnVpbGQuMCA9IFJlbGVhc2VJdGFuaXVtfFdpbjMyDQotCQl7RkE1RkM3RUItQzcyRi00MTVGLUFFNDItOTFERDYwNUFCRERBfS5EZWJ1Zy5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJe0ZBNUZDN0VCLUM3MkYtNDE1Ri1BRTQyLTkxREQ2MDVBQkREQX0uRGVidWcuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7RkE1RkM3RUItQzcyRi00MTVGLUFFNDItOTFERDYwNUFCRERBfS5SZWxlYXNlLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtGQTVGQzdFQi1DNzJGLTQxNUYtQUU0Mi05MURENjA1QUJEREF9LlJlbGVhc2UuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtGQTVGQzdFQi1DNzJGLTQxNUYtQUU0Mi05MURENjA1QUJEREF9LlJlbGVhc2VBTUQ2NC5BY3RpdmVDZmcgPSBSZWxlYXNlQU1ENjR8V2luMzINCi0JCXtGQTVGQzdFQi1DNzJGLTQxNUYtQUU0Mi05MURENjA1QUJEREF9LlJlbGVhc2VBTUQ2NC5CdWlsZC4wID0gUmVsZWFzZUFNRDY0fFdpbjMyDQotCQl7RkE1RkM3RUItQzcyRi00MTVGLUFFNDItOTFERDYwNUFCRERBfS5SZWxlYXNlSXRhbml1bS5BY3RpdmVDZmcgPSBSZWxlYXNlSXRhbml1bXxXaW4zMg0KLQkJe0ZBNUZDN0VCLUM3MkYtNDE1Ri1BRTQyLTkxREQ2MDVBQkREQX0uUmVsZWFzZUl0YW5pdW0uQnVpbGQuMCA9IFJlbGVhc2VJdGFuaXVtfFdpbjMyDQotCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fS5EZWJ1Zy5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uRGVidWcuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fS5SZWxlYXNlLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlJlbGVhc2UuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlJlbGVhc2VBTUQ2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fS5SZWxlYXNlSXRhbml1bS5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7NTFGMzVGQUUtRkI5Mi00QjJDLTkxODctMTU0MkMwNjVBRDc3fS5EZWJ1Zy5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJezUxRjM1RkFFLUZCOTItNEIyQy05MTg3LTE1NDJDMDY1QUQ3N30uRGVidWcuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7NTFGMzVGQUUtRkI5Mi00QjJDLTkxODctMTU0MkMwNjVBRDc3fS5SZWxlYXNlLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXs1MUYzNUZBRS1GQjkyLTRCMkMtOTE4Ny0xNTQyQzA2NUFENzd9LlJlbGVhc2UuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXs1MUYzNUZBRS1GQjkyLTRCMkMtOTE4Ny0xNTQyQzA2NUFENzd9LlJlbGVhc2VBTUQ2NC5BY3RpdmVDZmcgPSBSZWxlYXNlQU1ENjR8V2luMzINCi0JCXs1MUYzNUZBRS1GQjkyLTRCMkMtOTE4Ny0xNTQyQzA2NUFENzd9LlJlbGVhc2VBTUQ2NC5CdWlsZC4wID0gUmVsZWFzZUFNRDY0fFdpbjMyDQotCQl7NTFGMzVGQUUtRkI5Mi00QjJDLTkxODctMTU0MkMwNjVBRDc3fS5SZWxlYXNlSXRhbml1bS5BY3RpdmVDZmcgPSBSZWxlYXNlSXRhbml1bXxXaW4zMg0KLQkJezUxRjM1RkFFLUZCOTItNEIyQy05MTg3LTE1NDJDMDY1QUQ3N30uUmVsZWFzZUl0YW5pdW0uQnVpbGQuMCA9IFJlbGVhc2VJdGFuaXVtfFdpbjMyDQotCQl7MTk2NkRERTItNEFCNy00RTRFLUFDQzktQzEyMUU0RDM3RjhFfS5EZWJ1Zy5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJezE5NjZEREUyLTRBQjctNEU0RS1BQ0M5LUMxMjFFNEQzN0Y4RX0uRGVidWcuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7MTk2NkRERTItNEFCNy00RTRFLUFDQzktQzEyMUU0RDM3RjhFfS5SZWxlYXNlLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXsxOTY2RERFMi00QUI3LTRFNEUtQUNDOS1DMTIxRTREMzdGOEV9LlJlbGVhc2UuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXsxOTY2RERFMi00QUI3LTRFNEUtQUNDOS1DMTIxRTREMzdGOEV9LlJlbGVhc2VBTUQ2NC5BY3RpdmVDZmcgPSBSZWxlYXNlQU1ENjR8V2luMzINCi0JCXsxOTY2RERFMi00QUI3LTRFNEUtQUNDOS1DMTIxRTREMzdGOEV9LlJlbGVhc2VBTUQ2NC5CdWlsZC4wID0gUmVsZWFzZUFNRDY0fFdpbjMyDQotCQl7MTk2NkRERTItNEFCNy00RTRFLUFDQzktQzEyMUU0RDM3RjhFfS5SZWxlYXNlSXRhbml1bS5BY3RpdmVDZmcgPSBSZWxlYXNlSXRhbml1bXxXaW4zMg0KLQkJezE5NjZEREUyLTRBQjctNEU0RS1BQ0M5LUMxMjFFNEQzN0Y4RX0uUmVsZWFzZUl0YW5pdW0uQnVpbGQuMCA9IFJlbGVhc2VJdGFuaXVtfFdpbjMyDQotCQl7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfS5EZWJ1Zy5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJe0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0uRGVidWcuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfS5SZWxlYXNlLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9LlJlbGVhc2UuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9LlJlbGVhc2VBTUQ2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfS5SZWxlYXNlQU1ENjQuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9LlJlbGVhc2VJdGFuaXVtLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9LlJlbGVhc2VJdGFuaXVtLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7MkMwQkVGQjktNzBFMi00RjgwLUFDNUItNEFCOEVFMDIzNTc0fS5EZWJ1Zy5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJezJDMEJFRkI5LTcwRTItNEY4MC1BQzVCLTRBQjhFRTAyMzU3NH0uRGVidWcuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7MkMwQkVGQjktNzBFMi00RjgwLUFDNUItNEFCOEVFMDIzNTc0fS5SZWxlYXNlLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXsyQzBCRUZCOS03MEUyLTRGODAtQUM1Qi00QUI4RUUwMjM1NzR9LlJlbGVhc2UuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXsyQzBCRUZCOS03MEUyLTRGODAtQUM1Qi00QUI4RUUwMjM1NzR9LlJlbGVhc2VBTUQ2NC5BY3RpdmVDZmcgPSBSZWxlYXNlQU1ENjR8V2luMzINCi0JCXsyQzBCRUZCOS03MEUyLTRGODAtQUM1Qi00QUI4RUUwMjM1NzR9LlJlbGVhc2VBTUQ2NC5CdWlsZC4wID0gUmVsZWFzZUFNRDY0fFdpbjMyDQotCQl7MkMwQkVGQjktNzBFMi00RjgwLUFDNUItNEFCOEVFMDIzNTc0fS5SZWxlYXNlSXRhbml1bS5BY3RpdmVDZmcgPSBSZWxlYXNlSXRhbml1bXxXaW4zMg0KLQkJezJDMEJFRkI5LTcwRTItNEY4MC1BQzVCLTRBQjhFRTAyMzU3NH0uUmVsZWFzZUl0YW5pdW0uQnVpbGQuMCA9IFJlbGVhc2VJdGFuaXVtfFdpbjMyDQotCQl7RjIyRjQwRjQtRDMxOC00MERDLTk2QjMtODhEQzgxQ0UwODk0fS5EZWJ1Zy5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJe0YyMkY0MEY0LUQzMTgtNDBEQy05NkIzLTg4REM4MUNFMDg5NH0uRGVidWcuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7RjIyRjQwRjQtRDMxOC00MERDLTk2QjMtODhEQzgxQ0UwODk0fS5SZWxlYXNlLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtGMjJGNDBGNC1EMzE4LTQwREMtOTZCMy04OERDODFDRTA4OTR9LlJlbGVhc2UuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtGMjJGNDBGNC1EMzE4LTQwREMtOTZCMy04OERDODFDRTA4OTR9LlJlbGVhc2VBTUQ2NC5BY3RpdmVDZmcgPSBSZWxlYXNlQU1ENjR8V2luMzINCi0JCXtGMjJGNDBGNC1EMzE4LTQwREMtOTZCMy04OERDODFDRTA4OTR9LlJlbGVhc2VBTUQ2NC5CdWlsZC4wID0gUmVsZWFzZUFNRDY0fFdpbjMyDQotCQl7RjIyRjQwRjQtRDMxOC00MERDLTk2QjMtODhEQzgxQ0UwODk0fS5SZWxlYXNlSXRhbml1bS5BY3RpdmVDZmcgPSBSZWxlYXNlSXRhbml1bXxXaW4zMg0KLQkJezhDRjMzNEQ5LTRGODItNDJFQi05N0FGLTgzNTkyQzVBRkQyRn0uRGVidWcuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXs4Q0YzMzREOS00RjgyLTQyRUItOTdBRi04MzU5MkM1QUZEMkZ9LkRlYnVnLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJezhDRjMzNEQ5LTRGODItNDJFQi05N0FGLTgzNTkyQzVBRkQyRn0uUmVsZWFzZS5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7OENGMzM0RDktNEY4Mi00MkVCLTk3QUYtODM1OTJDNUFGRDJGfS5SZWxlYXNlLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7OENGMzM0RDktNEY4Mi00MkVCLTk3QUYtODM1OTJDNUFGRDJGfS5SZWxlYXNlQU1ENjQuQWN0aXZlQ2ZnID0gUmVsZWFzZUFNRDY0fFdpbjMyDQotCQl7OENGMzM0RDktNEY4Mi00MkVCLTk3QUYtODM1OTJDNUFGRDJGfS5SZWxlYXNlQU1ENjQuQnVpbGQuMCA9IFJlbGVhc2VBTUQ2NHxXaW4zMg0KLQkJezhDRjMzNEQ5LTRGODItNDJFQi05N0FGLTgzNTkyQzVBRkQyRn0uUmVsZWFzZUl0YW5pdW0uQWN0aXZlQ2ZnID0gUmVsZWFzZUl0YW5pdW18V2luMzINCi0JCXsyRkYwQTMxMi0yMkY5LTRDMzQtQjA3MC04NDI5MTZERTI3QTl9LkRlYnVnLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7MkZGMEEzMTItMjJGOS00QzM0LUIwNzAtODQyOTE2REUyN0E5fS5EZWJ1Zy5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXsyRkYwQTMxMi0yMkY5LTRDMzQtQjA3MC04NDI5MTZERTI3QTl9LlJlbGVhc2UuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJezJGRjBBMzEyLTIyRjktNEMzNC1CMDcwLTg0MjkxNkRFMjdBOX0uUmVsZWFzZS5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJezJGRjBBMzEyLTIyRjktNEMzNC1CMDcwLTg0MjkxNkRFMjdBOX0uUmVsZWFzZUFNRDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2VBTUQ2NHxXaW4zMg0KLQkJezJGRjBBMzEyLTIyRjktNEMzNC1CMDcwLTg0MjkxNkRFMjdBOX0uUmVsZWFzZUFNRDY0LkJ1aWxkLjAgPSBSZWxlYXNlQU1ENjR8V2luMzINCi0JCXsyRkYwQTMxMi0yMkY5LTRDMzQtQjA3MC04NDI5MTZERTI3QTl9LlJlbGVhc2VJdGFuaXVtLkFjdGl2ZUNmZyA9IFJlbGVhc2VJdGFuaXVtfFdpbjMyDQotCQl7MkZGMEEzMTItMjJGOS00QzM0LUIwNzAtODQyOTE2REUyN0E5fS5SZWxlYXNlSXRhbml1bS5CdWlsZC4wID0gUmVsZWFzZUl0YW5pdW18V2luMzINCi0JRW5kR2xvYmFsU2VjdGlvbg0KLQlHbG9iYWxTZWN0aW9uKFNvbHV0aW9uSXRlbXMpID0gcG9zdFNvbHV0aW9uDQotCQkuLlxNb2R1bGVzXGdldGJ1aWxkaW5mby5jID0gLi5cTW9kdWxlc1xnZXRidWlsZGluZm8uYw0KLQkJcmVhZG1lLnR4dCA9IHJlYWRtZS50eHQNCi0JRW5kR2xvYmFsU2VjdGlvbg0KLQlHbG9iYWxTZWN0aW9uKEV4dGVuc2liaWxpdHlHbG9iYWxzKSA9IHBvc3RTb2x1dGlvbg0KLQlFbmRHbG9iYWxTZWN0aW9uDQotCUdsb2JhbFNlY3Rpb24oRXh0ZW5zaWJpbGl0eUFkZElucykgPSBwb3N0U29sdXRpb24NCi0JRW5kR2xvYmFsU2VjdGlvbg0KLUVuZEdsb2JhbA0KZGlmZiAtLWdpdCBhL1BDL1ZTNy4xL3B5ZXhwYXQudmNwcm9qIGIvUEMvVlM3LjEvcHlleHBhdC52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwNzM5ZmEuLjAwMDAwMDAKLS0tIGEvUEMvVlM3LjEvcHlleHBhdC52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSwyNjMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjcuMTAiDQotCU5hbWU9InB5ZXhwYXQiDQotCVNjY1Byb2plY3ROYW1lPSJweWV4cGF0Ig0KLQlTY2NMb2NhbFBhdGg9Ii4uIj4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIi8+DQotCTwvUGxhdGZvcm1zPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1kZWJ1Z1xweWV4cGF0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDLC4uXC4uXE1vZHVsZXNcZXhwYXQiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtfREVCVUc7SEFWRV9FWFBBVF9IO1dJTjMyO19XSU5ET1dTO1hNTF9OUztYTUxfRFREO0JZVEVPUkRFUj0xMjM0O1hNTF9DT05URVhUX0JZVEVTPTEwMjQ7WE1MX1NUQVRJQztIQVZFX01FTU1PVkUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIzIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJvZGJjY3AzMi5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4vcHlleHBhdF9kLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL3B5ZXhwYXRfZC5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMDAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9weWV4cGF0X2QubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtcmVsZWFzZVxweWV4cGF0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQywuLlwuLlxNb2R1bGVzXGV4cGF0Ig0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7TkRFQlVHO1dJTjMyO19XSU5ET1dTO1hNTF9OUztYTUxfRFREO0JZVEVPUkRFUj0xMjM0O1hNTF9DT05URVhUX0JZVEVTPTEwMjQ7WE1MX1NUQVRJQztIQVZFX01FTU1PVkUiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0ib2RiY2NwMzIubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuL3B5ZXhwYXQucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vcHlleHBhdC5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMDAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9weWV4cGF0LmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2VJdGFuaXVtfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLi8uIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlxpYTY0LXRlbXAtcmVsZWFzZVxweWV4cGF0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvVVNFQ0w6TVNfSVRBTklVTSAvR1MtIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDLC4uXC4uXE1vZHVsZXNcZXhwYXQiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtOREVCVUc7V0lOMzI7X1dJTkRPV1M7WE1MX05TO1hNTF9EVEQ7QllURU9SREVSPTEyMzQ7WE1MX0NPTlRFWFRfQllURVM9MTAyNDtYTUxfU1RBVElDO0hBVkVfTUVNTU9WRSINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iRkFMU0UiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL01BQ0hJTkU6SUE2NCAvVVNFTElOSzpNU19TREsiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Im9kYmNjcDMyLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi9weWV4cGF0LnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL3B5ZXhwYXQucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTAwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vcHlleHBhdC5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlQU1ENjR8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iYW1kNjQtdGVtcC1yZWxlYXNlXHB5ZXhwYXQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9VU0VDTDpNU19PUFRFUk9OICAvR1MtIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDLC4uXC4uXE1vZHVsZXNcZXhwYXQiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtOREVCVUc7V0lOMzI7X1dJTkRPV1M7WE1MX05TO1hNTF9EVEQ7QllURU9SREVSPTEyMzQ7WE1MX0NPTlRFWFRfQllURVM9MTAyNDtYTUxfU1RBVElDO0hBVkVfTUVNTU9WRSINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iRkFMU0UiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL01BQ0hJTkU6QU1ENjQgL1VTRUxJTks6TVNfU0RLIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJvZGJjY3AzMi5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4vcHlleHBhdC5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9weWV4cGF0LnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDEwMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL3B5ZXhwYXQubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNccHlleHBhdC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGV4cGF0XHhtbHBhcnNlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXhwYXRceG1scm9sZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGV4cGF0XHhtbHRvay5jIj4NCi0JCTwvRmlsZT4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvcHl0aG9uLmJ1aWxkIGIvUEMvVlM3LjEvcHl0aG9uLmJ1aWxkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNzExMDFkLi4wMDAwMDAwCi0tLSBhL1BDL1ZTNy4xL3B5dGhvbi5idWlsZAorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotPHByb2plY3Q+Ci0gPHRhcmdldCBuYW1lPSJhbGwiIGRlc2NyaXB0aW9uPSJCdWlsZCBhbGwgdGFyZ2V0cy4iPgotICAgPHNvbHV0aW9uIGNvbmZpZ3VyYXRpb249InJlbGVhc2UiPgotICAgICA8cHJvamVjdHM+Ci0gICAgICAgPGluY2x1ZGUgbmFtZT0ibWFrZV92ZXJzaW9uaW5mby52Y3Byb2oiIC8+Ci0gICAgIDwvcHJvamVjdHM+Ci0gICA8L3NvbHV0aW9uPgotICAgPGV4ZWMgcHJvZ3JhbT0ibWFrZV92ZXJzaW9uaW5mbyIgb3V0cHV0PSJweXRob25udF9yYy5oIiAvPgotCi0gICA8c29sdXRpb24gY29uZmlndXJhdGlvbj0icmVsZWFzZSIgc29sdXRpb25maWxlPSJwY2J1aWxkLnNsbiI+Ci0gICAgIDxleGNsdWRlcHJvamVjdHM+Ci0gICAgICAgPGluY2x1ZGUgbmFtZT0iX3RraW50ZXIudmNwcm9qIiAvPgotICAgICAgIDxpbmNsdWRlIG5hbWU9ImJ6Mi52Y3Byb2oiIC8+Ci0gICAgICAgPGluY2x1ZGUgbmFtZT0iX3NxbGl0ZTMudmNwcm9qIiAvPgotICAgICAgIDxpbmNsdWRlIG5hbWU9Il9zc2wudmNwcm9qIiAvPgotICAgICA8L2V4Y2x1ZGVwcm9qZWN0cz4KLSAgIDwvc29sdXRpb24+Ci0gPC90YXJnZXQ+Ci08L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9QQy9WUzcuMS9weXRob24uaXNzIGIvUEMvVlM3LjEvcHl0aG9uLmlzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2E2YTNjMC4uMDAwMDAwMAotLS0gYS9QQy9WUzcuMS9weXRob24uaXNzCisrKyAvZGV2L251bGwKQEAgLTEsMzQxICswLDAgQEAKLTsgU2NyaXB0IGdlbmVyYXRlZCBieSB0aGUgSW5ubyBTZXR1cCBTY3JpcHQgV2l6YXJkLgotOyBTRUUgVEhFIERPQ1VNRU5UQVRJT04gRk9SIERFVEFJTFMgT04gQ1JFQVRJTkcgSU5OTyBTRVRVUCBTQ1JJUFQgRklMRVMhCi0KLTsgVGhpcyBpcyB0aGUgd2hvbGUgYmFsbCBvZiB3YXggZm9yIGFuIElubm8gaW5zdGFsbGVyIGZvciBQeXRob24uCi07IFRvIHVzZSwgZG93bmxvYWQgSW5ubyBTZXR1cCBmcm9tIGh0dHA6Ly93d3cuanJzb2Z0d2FyZS5vcmcvaXNkbC5odG0vLAotOyBpbnN0YWxsIGl0LCBhbmQgZG91YmxlLWNsaWNrIG9uIHRoaXMgZmlsZS4gIFRoYXQgbGF1bmNoZXMgdGhlIElubm8KLTsgc2NyaXB0IGNvbXBpbGVyLiAgVGhlIEdVSSBpcyBleHRlbWVseSBzaW1wbGUsIGFuZCBoYXMgb25seSBvbmUgYnV0dG9uCi07IHlvdSBtYXkgbm90IHJlY29nbml6ZSBpbnN0YW50bHk6ICBjbGljayBpdC4gIFlvdSdyZSBkb25lLiAgSXQgYnVpbGRzCi07IHRoZSBpbnN0YWxsZXIgaW50byBQQ0J1aWxkL1B5dGhvbi0yLjJhMS5leGUuICBTaXplIGFuZCBzcGVlZCBvZiB0aGUKLTsgaW5zdGFsbGVyIGFyZSBjb21wZXRpdGl2ZSB3aXRoIHRoZSBXaXNlIGluc3RhbGxlcjsgSW5ubyB1bmluc3RhbGwKLTsgc2VlbXMgbXVjaCBxdWlja2VyIHRoYW4gV2lzZSAoYnV0IGFsc28gZmVlYmxlciwgYW5kIHRoZSB1bmluc3RhbGwKLTsgbG9nIGlzIGluIHNvbWUgdW4oaHVtYW4pcmVhZGFibGUgYmluYXJ5IGZvcm1hdCkuCi07Ci07IFdoYXQncyBEb25lCi07IC0tLS0tLS0tLS0tCi07IEFsbCB0aGUgdXN1YWwgV2luZG93cyBQeXRob24gZmlsZXMgYXJlIGluc3RhbGxlZCBieSB0aGlzIG5vdy4KLTsgQWxsIHRoZSB1c3VhbCBXaW5kb3dzIFB5dGhvbiBTdGFydCBtZW51IGVudHJpZXMgYXJlIGNyZWF0ZWQgYW5kCi07IHdvcmsgZmluZS4KLTsgLnB5LCAucHl3LCAucHljIGFuZCAucHlvIGV4dGVuc2lvbnMgYXJlIHJlZ2lzdGVyZWQuCi07ICAgICBQUk9CTEVNOiAgSW5ubyB1bmluc3RhbGwgZG9lcyBub3QgcmVzdG9yZSB0aGVpciBwcmV2aW91cyByZWdpc3RyeQotOyAgICAgICAgICAgICAgIGFzc29jaWF0aW9ucyAoaWYgYW55KS4gIFdpc2UgZGlkLiAgVGhpcyB3aWxsIG1ha2UgbGlmZQotOyAgICAgICAgICAgICAgIGRpZmZpY3VsdCBmb3IgYWxwaGEgKGV0YykgdGVzdGVycy4KLTsgVGhlIFB5dGhvbiBpbnN0YWxsIGlzIGZ1bGx5IGZ1bmN0aW9uYWwgZm9yICJ0eXBpY2FsIiB1c2VzLgotOwotOyBXaGF0J3MgTm90IERvbmUKLTsgLS0tLS0tLS0tLS0tLS0tCi07IE5vbmUgb2YgIk1hcmsgSGFtbW9uZCdzIiByZWdpc3RyeSBlbnRyaWVzIGFyZSB3cml0dGVuLgotOyBObyBpbnN0YWxsYXRpb24gb2YgZmlsZXMgaXMgZG9uZSBpbnRvIHRoZSBzeXN0ZW0gZGlyOgotOyAgICAgVGhlIE1TIERMTHMgYXJlbid0IGhhbmRsZWQgYXQgYWxsIGJ5IHRoaXMgeWV0LgotOyAgICAgUHl0aG9uMjIuZGxsIGlzIHVucGFja2VkIGludG8gdGhlIG1haW4gUHl0aG9uIGRpci4KLTsKLTsgSW5ubyBjYW4ndCBkbyBkaWZmZXJlbnQgdGhpbmdzIG9uIE5ULzIwMDAgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIHVzZXIKLTsgaGFzIEFkbWluIHByaXZpbGVnZXMsIHNvIEkgZG9uJ3Qga25vdyBob3cgdG8gInNvbHZlIiBlaXRoZXIgb2YgdGhvc2UsCi07IHNob3J0IG9mIGJ1aWxkaW5nIHR3byBpbnN0YWxsZXJzIChvbmUgKnJlcXVpcmluZyogQWRtaW4gcHJpdnMsIHRoZQotOyBvdGhlciBub3QgZG9pbmcgYW55dGhpbmcgdGhhdCBuZWVkcyBBZG1pbiBwcml2cykuCi07Ci07IElubm8gaGFzIG5vIGNvbmNlcHQgb2YgdmFyaWFibGVzLCBzbyBsb3RzIG9mIGxpbmVzIGluIHRoaXMgZmlsZSBuZWVkCi07IHRvIGJlIGZpZGRsZWQgYnkgaGFuZCBhY3Jvc3MgcmVsZWFzZXMuICBTaW1wbGVzdCB3YXkgb3V0OiAgc3RpY2sgdGhpcwotOyBmaWxlIGluIGEgZ2lhbnQgdHJpcGxlLXF1b3RlZCByLXN0cmluZyAobm90ZSB0aGF0IGJhY2tzbGFzaGVzIGFyZQotOyByZXF1aXJlZCBhbGwgb3ZlciB0aGUgcGxhY2UgaGVyZSAtLSBmb3J3YXJkIHNsYXNoZXMgRE9OJ1QgV09SSyBpbgotOyBJbm5vKSwgYW5kIHVzZSAlKHlhZGRhKXMgc3RyaW5nIGludGVycG9sYXRpb24gdG8gZG8gc3Vic3RpdHV0aW9uczsgaS5lLiwKLTsgd3JpdGUgYSB2ZXJ5IHNpbXBsZSBQeXRob24gcHJvZ3JhbSB0byAqcHJvZHVjZSogdGhpcyBzY3JpcHQuCi0KLVtTZXR1cF0KLUFwcE5hbWU9UHl0aG9uIGFuZCBjb21iaW5lZCBXaW4zMiBFeHRlbnNpb25zCi1BcHBWZXJOYW1lPVB5dGhvbiAyLjIuMiBhbmQgY29tYmluZWQgV2luMzIgRXh0ZW5zaW9ucyAxNTAKLUFwcElkPVB5dGhvbiAyLjIuMi4xNTAKLUFwcFZlcnNpb249Mi4yLjIuMTUwCi1BcHBDb3B5cmlnaHQ9UHl0aG9uIGlzIENvcHlyaWdodCCpIDIwMDEgUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24uIFdpbjMyIEV4dGVuc2lvbnMgYXJlIENvcHlyaWdodCCpIDE5OTYtMjAwMSBHcmVnIFN0ZWluIGFuZCBNYXJrIEhhbW1vbmQuCi0KLTsgRGVmYXVsdCBpbnN0YWxsIGRpcjsgdmFsdWUgb2Yge2FwcH0gbGF0ZXIgKHVubGVzcyB1c2VyIG92ZXJyaWRlcykuCi07IHtzZH0gPSBzeXN0ZW0gcm9vdCBkcml2ZSwgcHJvYmFibHkgIkM6Ii4KLURlZmF1bHREaXJOYW1lPXtzZH1cUHl0aG9uMjIKLTtEZWZhdWx0RGlyTmFtZT17cGZ9XFB5dGhvbgotCi07IFN0YXJ0IG1lbnUgZm9sZGVyIG5hbWU7IHZhbHVlIG9mIHtncm91cH0gbGF0ZXIgKHVubGVzcyB1c2VyIG92ZXJyaWRlcykuCi1EZWZhdWx0R3JvdXBOYW1lPVB5dGhvbiAyLjIKLQotOyBQb2ludCBTb3VyY2VEaXIgdG8gb25lIGFib3ZlIFBDQnVpbGQgPSBzcmMuCi07IG1lYW5zIHRoaXMgc2NyaXB0IGNhbiBydW4gdW5jaGFuZ2VkIGZyb20gYW55b25lJ3MgQ1ZTIHRyZWUsIG5vIG1hdHRlcgotOyB3aGF0IHRoZXkgY2FsbGVkIHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3JpZXMuCi1Tb3VyY2VEaXI9LgotT3V0cHV0RGlyPS4uCi1PdXRwdXRCYXNlRmlsZW5hbWU9UHl0aG9uLTIuMi4yLVdpbjMyLTE1MC1TZXR1cAotCi1BcHBQdWJsaXNoZXI9UHl0aG9uTGFicyBhdCBEaWdpdGFsIENyZWF0aW9ucwotQXBwUHVibGlzaGVyVVJMPWh0dHA6Ly93d3cucHl0aG9uLm9yZwotQXBwU3VwcG9ydFVSTD1odHRwOi8vd3d3LnB5dGhvbi5vcmcKLUFwcFVwZGF0ZXNVUkw9aHR0cDovL3d3dy5weXRob24ub3JnCi0KLUFsd2F5c0NyZWF0ZVVuaW5zdGFsbEljb249dHJ1ZQotQ2hhbmdlc0Fzc29jaWF0aW9ucz10cnVlCi1Vbmluc3RhbGxMb2dNb2RlPW5ldwotQWxsb3dOb0ljb25zPXRydWUKLUFkbWluUHJpdmlsZWdlc1JlcXVpcmVkPXRydWUKLVVuaW5zdGFsbERpc3BsYXlJY29uPXthcHB9XHB5Yy5pY28KLVdpemFyZERlYnVnPWZhbHNlCi0KLTsgVGhlIGZld2VyIHNjcmVlbnMgdGhlIGJldHRlcjsgbGVhdmUgdGhlc2UgY29tbWVudGVkLgotCi1Db21wcmVzc2lvbj1iemlwCi1JbmZvQmVmb3JlRmlsZT1MSUNFTlNFLnR4dAotO0luZm9CZWZvcmVGaWxlPU1pc2NcTkVXUwotCi07IHVuY29tbWVudCB0aGUgZm9sbG93aW5nIGxpbmUgaWYgeW91IHdhbnQgeW91ciBpbnN0YWxsYXRpb24gdG8gcnVuIG9uIE5UIDMuNTEgdG9vLgotOyBNaW5WZXJzaW9uPTQsMy41MQotCi1bVHlwZXNdCi1OYW1lOiBub3JtYWw7IERlc2NyaXB0aW9uOiBTZWxlY3QgZGVzaXJlZCBjb21wb25lbnRzOyBGbGFnczogaXNjdXN0b20KLQotW0NvbXBvbmVudHNdCi1OYW1lOiBtYWluOyBEZXNjcmlwdGlvbjogUHl0aG9uIGFuZCBXaW4zMiBFeHRlbnNpb25zOyBUeXBlczogbm9ybWFsCi1OYW1lOiBkb2NzOyBEZXNjcmlwdGlvbjogUHl0aG9uIGRvY3VtZW50YXRpb24gKEhUTUwpOyBUeXBlczogbm9ybWFsCi1OYW1lOiB0azsgRGVzY3JpcHRpb246IFRDTC9USywgdGtpbnRlciwgYW5kIElkbGU7IFR5cGVzOiBub3JtYWwKLU5hbWU6IHRvb2xzOyBEZXNjcmlwdGlvbjogUHl0aG9uIHV0aWxpdHkgc2NyaXB0cyAoVG9vbHNcKTsgVHlwZXM6IG5vcm1hbAotTmFtZTogdGVzdDsgRGVzY3JpcHRpb246IFB5dGhvbiB0ZXN0IHN1aXRlIChMaWJcdGVzdFwpOyBUeXBlczogbm9ybWFsCi0KLVtUYXNrc10KLU5hbWU6IGV4dGVuc2lvbnM7IERlc2NyaXB0aW9uOiBSZWdpc3RlciBmaWxlIGFzc29jaWF0aW9ucyAoLnB5LCAucHl3LCAucHljLCAucHlvKTsgQ29tcG9uZW50czogbWFpbjsgQ2hlY2s6IElzQWRtaW5Mb2dnZWRPbgotCi1bRmlsZXNdCi07IENhdXRpb246ICBVc2luZyBmb3J3YXJkIHNsYXNoZXMgaW5zdGVhZCBzY3Jld3MgdXAgaW4gYW1hemluZyB3YXlzLgotOyBVbmtub3duOiAgQnkgdGhlIHRpbWUgQ29tcG9uZW50cyAoYW5kIG90aGVyIGF0dHJzKSBhcmUgYWRkZWQgdG8gdGhlc2UgbGluZXMsIHRoZXkncmUKLTsgZ29pbmcgdG8gZ2V0IGF3ZnVsbHkgbG9uZy4gIEJ1dCBkb24ndCBzZWUgYSB3YXkgdG8gY29udGludWUgbG9naWNhbCBsaW5lcyBhY3Jvc3MKLTsgcGh5c2ljYWwgbGluZXMuCi0KLVNvdXJjZTogTElDRU5TRS50eHQ7IERlc3REaXI6IHthcHB9OyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlCi1Tb3VyY2U6IFJFQURNRS50eHQ7IERlc3REaXI6IHthcHB9OyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlCi1Tb3VyY2U6IE5ld3MudHh0OyBEZXN0RGlyOiB7YXBwfTsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZQotU291cmNlOiAqLmljbzsgRGVzdERpcjoge2FwcH07IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW4KLQotU291cmNlOiBweXRob24uZXhlOyBEZXN0RGlyOiB7YXBwfTsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbgotU291cmNlOiBweXRob253LmV4ZTsgRGVzdERpcjoge2FwcH07IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW4KLVNvdXJjZTogdzl4cG9wZW4uZXhlOyBEZXN0RGlyOiB7YXBwfTsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbgotCi0KLVNvdXJjZTogRExMc1x0Y2w4My5kbGw7IERlc3REaXI6IHthcHB9XERMTHM7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IHRrCi1Tb3VyY2U6IERMTHNcdGs4My5kbGw7IERlc3REaXI6IHthcHB9XERMTHM7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IHRrCi1Tb3VyY2U6IHRjbFwqLio7IERlc3REaXI6IHthcHB9XHRjbDsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogdGs7IEZsYWdzOiByZWN1cnNlc3ViZGlycwotCi1Tb3VyY2U6IHN5c2RpclxweXRob24yMi5kbGw7IERlc3REaXI6IHtzeXN9OyBDb3B5TW9kZTogYWx3YXlzc2tpcGlmc2FtZW9yb2xkZXI7IENvbXBvbmVudHM6IG1haW47IEZsYWdzOiBzaGFyZWRmaWxlIHJlc3RhcnRyZXBsYWNlCi1Tb3VyY2U6IHN5c2RpclxQeVdpblR5cGVzMjIuZGxsOyBEZXN0RGlyOiB7c3lzfTsgQ29weU1vZGU6IGFsd2F5c3NraXBpZnNhbWVvcm9sZGVyOyBDb21wb25lbnRzOiBtYWluOyBGbGFnczogcmVzdGFydHJlcGxhY2Ugc2hhcmVkZmlsZQotU291cmNlOiBzeXNkaXJccHl0aG9uY29tMjIuZGxsOyBEZXN0RGlyOiB7c3lzfTsgQ29weU1vZGU6IGFsd2F5c3NraXBpZnNhbWVvcm9sZGVyOyBDb21wb25lbnRzOiBtYWluOyBGbGFnczogcmVzdGFydHJlcGxhY2Ugc2hhcmVkZmlsZQotCi1Tb3VyY2U6IERMTHNcX3NvY2tldC5weWQ7IERlc3REaXI6IHthcHB9XERMTHM7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW4KLVNvdXJjZTogbGlic1xfc29ja2V0LmxpYjsgRGVzdERpcjoge2FwcH1cbGliczsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbgotCi1Tb3VyY2U6IERMTHNcX3NyZS5weWQ7IERlc3REaXI6IHthcHB9XERMTHM7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW4KLVNvdXJjZTogbGlic1xfc3JlLmxpYjsgRGVzdERpcjoge2FwcH1cbGliczsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbgotCi1Tb3VyY2U6IERMTHNcX3N5bXRhYmxlLnB5ZDsgRGVzdERpcjoge2FwcH1cRExMczsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbgotU291cmNlOiBsaWJzXF9zeW10YWJsZS5saWI7IERlc3REaXI6IHthcHB9XGxpYnM7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW4KLQotU291cmNlOiBETExzXF90ZXN0Y2FwaS5weWQ7IERlc3REaXI6IHthcHB9XERMTHM7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW4KLVNvdXJjZTogbGlic1xfdGVzdGNhcGkubGliOyBEZXN0RGlyOiB7YXBwfVxsaWJzOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluCi0KLVNvdXJjZTogRExMc1xfdGtpbnRlci5weWQ7IERlc3REaXI6IHthcHB9XERMTHM7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IHRrCi1Tb3VyY2U6IGxpYnNcX3RraW50ZXIubGliOyBEZXN0RGlyOiB7YXBwfVxsaWJzOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiB0awotCi1Tb3VyY2U6IERMTHNcbW1hcC5weWQ7IERlc3REaXI6IHthcHB9XERMTHM7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW4KLVNvdXJjZTogbGlic1xtbWFwLmxpYjsgRGVzdERpcjoge2FwcH1cbGliczsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbgotCi1Tb3VyY2U6IERMTHNccGFyc2VyLnB5ZDsgRGVzdERpcjoge2FwcH1cRExMczsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbgotU291cmNlOiBsaWJzXHBhcnNlci5saWI7IERlc3REaXI6IHthcHB9XGxpYnM7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW4KLQotU291cmNlOiBETExzXHB5ZXhwYXQucHlkOyBEZXN0RGlyOiB7YXBwfVxETExzOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluCi1Tb3VyY2U6IGxpYnNccHlleHBhdC5saWI7IERlc3REaXI6IHthcHB9XGxpYnM7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW4KLQotU291cmNlOiBETExzXHNlbGVjdC5weWQ7IERlc3REaXI6IHthcHB9XERMTHM7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW4KLVNvdXJjZTogbGlic1xzZWxlY3QubGliOyBEZXN0RGlyOiB7YXBwfVxsaWJzOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluCi0KLVNvdXJjZTogRExMc1x1bmljb2RlZGF0YS5weWQ7IERlc3REaXI6IHthcHB9XERMTHM7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW4KLVNvdXJjZTogbGlic1x1bmljb2RlZGF0YS5saWI7IERlc3REaXI6IHthcHB9XGxpYnM7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW4KLQotU291cmNlOiBETExzXHdpbnJlZy5weWQ7IERlc3REaXI6IHthcHB9XERMTHM7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW4KLVNvdXJjZTogbGlic1x3aW5yZWcubGliOyBEZXN0RGlyOiB7YXBwfVxsaWJzOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluCi0KLVNvdXJjZTogRExMc1x3aW5zb3VuZC5weWQ7IERlc3REaXI6IHthcHB9XERMTHM7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW4KLVNvdXJjZTogbGlic1x3aW5zb3VuZC5saWI7IERlc3REaXI6IHthcHB9XGxpYnM7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW4KLQotU291cmNlOiBETExzXHpsaWIucHlkOyBEZXN0RGlyOiB7YXBwfVxETExzOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluCi1Tb3VyY2U6IGxpYnNcemxpYi5saWI7IERlc3REaXI6IHthcHB9XGxpYnM7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW4KLQotU291cmNlOiBsaWJzXHB5dGhvbjIyLmxpYjsgRGVzdERpcjoge2FwcH1cbGliczsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbgotCi1Tb3VyY2U6IERMTHNcZXhwYXQuZGxsOyBEZXN0RGlyOiB7YXBwfVxETExzOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluCi0KLQotCi1Tb3VyY2U6IExpYlwqLnB5OyBEZXN0RGlyOiB7YXBwfVxMaWI7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW4KLVNvdXJjZTogTGliXGNvbXBpbGVyXCouKjsgRGVzdERpcjoge2FwcH1cTGliXGNvbXBpbGVyOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluOyBGbGFnczogcmVjdXJzZXN1YmRpcnMKLVNvdXJjZTogTGliXGRpc3R1dGlsc1wqLio7IERlc3REaXI6IHthcHB9XExpYlxkaXN0dXRpbHM7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW47IEZsYWdzOiByZWN1cnNlc3ViZGlycwotU291cmNlOiBMaWJcZW1haWxcKi4qOyBEZXN0RGlyOiB7YXBwfVxMaWJcZW1haWw7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW47IEZsYWdzOiByZWN1cnNlc3ViZGlycwotU291cmNlOiBMaWJcZW5jb2RpbmdzXCouKjsgRGVzdERpcjoge2FwcH1cTGliXGVuY29kaW5nczsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbjsgRmxhZ3M6IHJlY3Vyc2VzdWJkaXJzCi1Tb3VyY2U6IExpYlxob3RzaG90XCouKjsgRGVzdERpcjoge2FwcH1cTGliXGhvdHNob3Q7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW47IEZsYWdzOiByZWN1cnNlc3ViZGlycwotU291cmNlOiBMaWJcbGliLW9sZFwqLio7IERlc3REaXI6IHthcHB9XExpYlxsaWItb2xkOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluOyBGbGFnczogcmVjdXJzZXN1YmRpcnMKLVNvdXJjZTogTGliXHhtbFwqLio7IERlc3REaXI6IHthcHB9XExpYlx4bWw7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW47IEZsYWdzOiByZWN1cnNlc3ViZGlycwotU291cmNlOiBMaWJcaG90c2hvdFwqLio7IERlc3REaXI6IHthcHB9XExpYlxob3RzaG90OyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluOyBGbGFnczogcmVjdXJzZXN1YmRpcnMKLVNvdXJjZTogTGliXHRlc3RcKi4qOyBEZXN0RGlyOiB7YXBwfVxMaWJcdGVzdDsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogdGVzdDsgRmxhZ3M6IHJlY3Vyc2VzdWJkaXJzCi1Tb3VyY2U6IExpYlx0a2ludGVyXCoucHk7IERlc3REaXI6IHthcHB9XExpYlx0a2ludGVyOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiB0azsgRmxhZ3M6IHJlY3Vyc2VzdWJkaXJzCi0KLVNvdXJjZTogTGliXHNpdGUtcGFja2FnZXNcUkVBRE1FLnR4dDsgRGVzdERpcjoge2FwcH1cTGliXHNpdGUtcGFja2FnZXM7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW4KLQotU291cmNlOiBMaWJcc2l0ZS1wYWNrYWdlc1xQeVdpbjMyLmNobTsgRGVzdERpcjoge2FwcH1cTGliXHNpdGUtcGFja2FnZXM7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IGRvY3MKLVNvdXJjZTogTGliXHNpdGUtcGFja2FnZXNcd2luMzJcKi4qOyBEZXN0RGlyOiB7YXBwfVxMaWJcc2l0ZS1wYWNrYWdlc1x3aW4zMjsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbjsgRmxhZ3M6IHJlY3Vyc2VzdWJkaXJzCi1Tb3VyY2U6IExpYlxzaXRlLXBhY2thZ2VzXHdpbjMyY29tXCouKjsgRGVzdERpcjoge2FwcH1cTGliXHNpdGUtcGFja2FnZXNcd2luMzJjb207IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW47IEZsYWdzOiByZWN1cnNlc3ViZGlycwotU291cmNlOiBMaWJcc2l0ZS1wYWNrYWdlc1x3aW4zMmNvbWV4dFwqLio7IERlc3REaXI6IHthcHB9XExpYlxzaXRlLXBhY2thZ2VzXHdpbjMyY29tZXh0OyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluOyBGbGFnczogcmVjdXJzZXN1YmRpcnMKLQotU291cmNlOiBpbmNsdWRlXCouaDsgRGVzdERpcjoge2FwcH1caW5jbHVkZTsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbgotCi1Tb3VyY2U6IFRvb2xzXGlkbGVcKi4qOyBEZXN0RGlyOiB7YXBwfVxUb29sc1xpZGxlOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiB0azsgRmxhZ3M6IHJlY3Vyc2VzdWJkaXJzCi0KLVNvdXJjZTogVG9vbHNccHluY2hlXCouKjsgRGVzdERpcjoge2FwcH1cVG9vbHNccHluY2hlOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiB0b29sczsgRmxhZ3M6IHJlY3Vyc2VzdWJkaXJzCi1Tb3VyY2U6IFRvb2xzXHNjcmlwdHNcKi4qOyBEZXN0RGlyOiB7YXBwfVxUb29sc1xTY3JpcHRzOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiB0b29sczsgRmxhZ3M6IHJlY3Vyc2VzdWJkaXJzCi1Tb3VyY2U6IFRvb2xzXHdlYmNoZWNrZXJcKi4qOyBEZXN0RGlyOiB7YXBwfVxUb29sc1x3ZWJjaGVja2VyOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiB0b29sczsgRmxhZ3M6IHJlY3Vyc2VzdWJkaXJzCi1Tb3VyY2U6IFRvb2xzXHZlcnNpb25jaGVja1wqLio7IERlc3REaXI6IHthcHB9XFRvb2xzXHZlcnNpb25jaGVjazsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogdG9vbHM7IEZsYWdzOiByZWN1cnNlc3ViZGlycwotCi1Tb3VyY2U6IERvY1wqLio7IERlc3REaXI6IHthcHB9XERvYzsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgRmxhZ3M6IHJlY3Vyc2VzdWJkaXJzOyBDb21wb25lbnRzOiBkb2NzCi0KLQotW0ljb25zXQotTmFtZToge2dyb3VwfVxQeXRob24gKGNvbW1hbmQgbGluZSk7IEZpbGVuYW1lOiB7YXBwfVxweXRob24uZXhlOyBXb3JraW5nRGlyOiB7YXBwfTsgQ29tcG9uZW50czogbWFpbgotTmFtZToge2dyb3VwfVxQeXRob24gTWFudWFsczsgRmlsZW5hbWU6IHthcHB9XERvY1xpbmRleC5odG1sOyBXb3JraW5nRGlyOiB7YXBwfTsgQ29tcG9uZW50czogZG9jcwotTmFtZToge2dyb3VwfVxXaW4zMiBFeHRlbnNpb25zIEhlbHA7IEZpbGVuYW1lOiB7YXBwfVxMaWJcc2l0ZS1wYWNrYWdlc1xQeVdpbjMyLmNobTsgV29ya2luZ0Rpcjoge2FwcH1cTGliXHNpdGUtcGFja2FnZXM7IENvbXBvbmVudHM6IGRvY3MKLU5hbWU6IHtncm91cH1cTW9kdWxlIERvY3M7IEZpbGVuYW1lOiB7YXBwfVxweXRob253LmV4ZTsgV29ya2luZ0Rpcjoge2FwcH07IFBhcmFtZXRlcnM6ICIiInthcHB9XFRvb2xzXFNjcmlwdHNccHlkb2MucHl3IiIiOyBDb21wb25lbnRzOiB0b29scwotTmFtZToge2dyb3VwfVxJRExFIChQeXRob24gR1VJKTsgRmlsZW5hbWU6IHthcHB9XHB5dGhvbncuZXhlOyBXb3JraW5nRGlyOiB7YXBwfTsgUGFyYW1ldGVyczogIiIie2FwcH1cVG9vbHNcaWRsZVxpZGxlLnB5dyIiIjsgQ29tcG9uZW50czogdG9vbHMKLQotW1JlZ2lzdHJ5XQotOyBSZWdpc3RlciAucHkKLVRhc2tzOiBleHRlbnNpb25zOyBSb290OiBIS0NSOyBTdWJrZXk6IC5weTsgVmFsdWVUeXBlOiBzdHJpbmc7IFZhbHVlTmFtZTogOyBWYWx1ZURhdGE6IFB5dGhvbiBGaWxlOyBGbGFnczogdW5pbnNkZWxldGV2YWx1ZQotVGFza3M6IGV4dGVuc2lvbnM7IFJvb3Q6IEhLQ1I7IFN1YmtleTogLnB5OyBWYWx1ZVR5cGU6IHN0cmluZzsgVmFsdWVOYW1lOiBDb250ZW50IFR5cGU7IFZhbHVlRGF0YTogdGV4dC9wbGFpbjsgRmxhZ3M6IHVuaW5zZGVsZXRldmFsdWUKLVRhc2tzOiBleHRlbnNpb25zOyBSb290OiBIS0NSOyBTdWJrZXk6IFB5dGhvbiBGaWxlOyBWYWx1ZVR5cGU6IHN0cmluZzsgVmFsdWVOYW1lOiA7IFZhbHVlRGF0YTogUHl0aG9uIEZpbGU7IEZsYWdzOiB1bmluc2RlbGV0ZWtleQotVGFza3M6IGV4dGVuc2lvbnM7IFJvb3Q6IEhLQ1I7IFN1YmtleTogUHl0aG9uIEZpbGVcRGVmYXVsdEljb247IFZhbHVlVHlwZTogc3RyaW5nOyBWYWx1ZU5hbWU6IDsgVmFsdWVEYXRhOiB7YXBwfVxQeS5pY28KLVRhc2tzOiBleHRlbnNpb25zOyBSb290OiBIS0NSOyBTdWJrZXk6IFB5dGhvbiBGaWxlXHNoZWxsXG9wZW5cY29tbWFuZDsgVmFsdWVUeXBlOiBzdHJpbmc7IFZhbHVlTmFtZTogOyBWYWx1ZURhdGE6ICIiInthcHB9XHB5dGhvbi5leGUiIiAiIiUxIiIgJSoiCi0KLTsgUmVnaXN0ZXIgLnB5YwotVGFza3M6IGV4dGVuc2lvbnM7IFJvb3Q6IEhLQ1I7IFN1YmtleTogLnB5YzsgVmFsdWVUeXBlOiBzdHJpbmc7IFZhbHVlTmFtZTogOyBWYWx1ZURhdGE6IFB5dGhvbiBDb21waWxlZEZpbGU7IEZsYWdzOiB1bmluc2RlbGV0ZXZhbHVlCi1UYXNrczogZXh0ZW5zaW9uczsgUm9vdDogSEtDUjsgU3Via2V5OiBQeXRob24gQ29tcGlsZWRGaWxlOyBWYWx1ZVR5cGU6IHN0cmluZzsgVmFsdWVOYW1lOiA7IFZhbHVlRGF0YTogQ29tcGlsZWQgUHl0aG9uIEZpbGU7IEZsYWdzOiB1bmluc2RlbGV0ZWtleQotVGFza3M6IGV4dGVuc2lvbnM7IFJvb3Q6IEhLQ1I7IFN1YmtleTogUHl0aG9uIENvbXBpbGVkRmlsZVxEZWZhdWx0SWNvbjsgVmFsdWVUeXBlOiBzdHJpbmc7IFZhbHVlTmFtZTogOyBWYWx1ZURhdGE6IHthcHB9XHB5Yy5pY28KLVRhc2tzOiBleHRlbnNpb25zOyBSb290OiBIS0NSOyBTdWJrZXk6IFB5dGhvbiBDb21waWxlZEZpbGVcc2hlbGxcb3Blblxjb21tYW5kOyBWYWx1ZVR5cGU6IHN0cmluZzsgVmFsdWVOYW1lOiA7IFZhbHVlRGF0YTogIiIie2FwcH1ccHl0aG9uLmV4ZSIiICIiJTEiIiAlKiIKLQotOyBSZWdpc3RlciAucHlvCi1UYXNrczogZXh0ZW5zaW9uczsgUm9vdDogSEtDUjsgU3Via2V5OiAucHlvOyBWYWx1ZVR5cGU6IHN0cmluZzsgVmFsdWVOYW1lOiA7IFZhbHVlRGF0YTogUHl0aG9uIENvbXBpbGVkRmlsZTsgRmxhZ3M6IHVuaW5zZGVsZXRldmFsdWUKLQotOyBSZWdpc3RlciAucHl3Ci1UYXNrczogZXh0ZW5zaW9uczsgUm9vdDogSEtDUjsgU3Via2V5OiAucHl3OyBWYWx1ZVR5cGU6IHN0cmluZzsgVmFsdWVOYW1lOiA7IFZhbHVlRGF0YTogUHl0aG9uIE5vQ29uRmlsZTsgRmxhZ3M6IHVuaW5zZGVsZXRldmFsdWUKLVRhc2tzOiBleHRlbnNpb25zOyBSb290OiBIS0NSOyBTdWJrZXk6IC5weXc7IFZhbHVlVHlwZTogc3RyaW5nOyBWYWx1ZU5hbWU6IENvbnRlbnQgVHlwZTsgVmFsdWVEYXRhOiB0ZXh0L3BsYWluOyBGbGFnczogdW5pbnNkZWxldGV2YWx1ZQotVGFza3M6IGV4dGVuc2lvbnM7IFJvb3Q6IEhLQ1I7IFN1YmtleTogUHl0aG9uIE5vQ29uRmlsZTsgVmFsdWVUeXBlOiBzdHJpbmc7IFZhbHVlTmFtZTogOyBWYWx1ZURhdGE6IFB5dGhvbiBGaWxlIChubyBjb25zb2xlKTsgRmxhZ3M6IHVuaW5zZGVsZXRla2V5Ci1UYXNrczogZXh0ZW5zaW9uczsgUm9vdDogSEtDUjsgU3Via2V5OiBQeXRob24gTm9Db25GaWxlXERlZmF1bHRJY29uOyBWYWx1ZVR5cGU6IHN0cmluZzsgVmFsdWVOYW1lOiA7IFZhbHVlRGF0YToge2FwcH1cUHkuaWNvCi1UYXNrczogZXh0ZW5zaW9uczsgUm9vdDogSEtDUjsgU3Via2V5OiBQeXRob24gTm9Db25GaWxlXHNoZWxsXG9wZW5cY29tbWFuZDsgVmFsdWVUeXBlOiBzdHJpbmc7IFZhbHVlTmFtZTogOyBWYWx1ZURhdGE6ICIiInthcHB9XHB5dGhvbncuZXhlIiIgIiIlMSIiICUqIgotCi0KLTsgUHl0aG9uIFJlZ2lzdHJ5IEtleXMKLVJvb3Q6IEhLTE07IFN1YmtleTogU09GVFdBUkVcUHl0aG9uOyBGbGFnczogdW5pbnNkZWxldGVrZXlpZmVtcHR5OyBDaGVjazogSXNBZG1pbkxvZ2dlZE9uCi1Sb290OiBIS0xNOyBTdWJrZXk6IFNPRlRXQVJFXFB5dGhvblxQeXRob25Db3JlOyBGbGFnczogdW5pbnNkZWxldGVrZXlpZmVtcHR5Ci1Sb290OiBIS0xNOyBTdWJrZXk6IFNPRlRXQVJFXFB5dGhvblxQeXRob25Db3JlXDIuMjsgRmxhZ3M6IHVuaW5zZGVsZXRla2V5aWZlbXB0eQotUm9vdDogSEtMTTsgU3Via2V5OiBTT0ZUV0FSRVxQeXRob25cUHl0aG9uQ29yZVwyLjJcUHl0aG9uUGF0aDsgVmFsdWVEYXRhOiAie2FwcH1cTGliO3thcHB9XERMTHMiOyBGbGFnczogdW5pbnNkZWxldGVrZXlpZmVtcHR5Ci1Sb290OiBIS0xNOyBTdWJrZXk6IFNPRlRXQVJFXFB5dGhvblxQeXRob25Db3JlXDIuMlxQeXRob25QYXRoXHdpbjMyOyBWYWx1ZURhdGE6ICJ7YXBwfVxsaWJcc2l0ZS1wYWNrYWdlc1x3aW4zMjt7YXBwfVxsaWJcc2l0ZS1wYWNrYWdlc1x3aW4zMlxsaWIiOyBGbGFnczogdW5pbnNkZWxldGVrZXkKLVJvb3Q6IEhLTE07IFN1YmtleTogU09GVFdBUkVcUHl0aG9uXFB5dGhvbkNvcmVcMi4yXFB5dGhvblBhdGhcd2luMzJjb207IFZhbHVlRGF0YTogQzpcUHl0aG9uXGxpYlxzaXRlLXBhY2thZ2VzOyBGbGFnczogdW5pbnNkZWxldGVrZXkKLVJvb3Q6IEhLTE07IFN1YmtleTogU09GVFdBUkVcUHl0aG9uXFB5dGhvbkNvcmVcMi4yXE1vZHVsZXM7IEZsYWdzOiB1bmluc2RlbGV0ZWtleWlmZW1wdHkKLVJvb3Q6IEhLTE07IFN1YmtleTogU09GVFdBUkVcUHl0aG9uXFB5dGhvbkNvcmVcMi4yXE1vZHVsZXNccHl0aG9uY29tOyBWYWx1ZURhdGE6IHtzeXN9XHB5dGhvbmNvbTIyLmRsbDsgRmxhZ3M6IHVuaW5zZGVsZXRla2V5Ci1Sb290OiBIS0xNOyBTdWJrZXk6IFNPRlRXQVJFXFB5dGhvblxQeXRob25Db3JlXDIuMlxNb2R1bGVzXHB5d2ludHlwZXM7IFZhbHVlRGF0YToge3N5c31cUHlXaW5UeXBlczIyLmRsbDsgRmxhZ3M6IHVuaW5zZGVsZXRla2V5Ci1Sb290OiBIS0xNOyBTdWJrZXk6IFNPRlRXQVJFXFB5dGhvblxQeXRob25Db3JlXDIuMlxJbnN0YWxsUGF0aDsgVmFsdWVEYXRhOiB7YXBwfTsgRmxhZ3M6IHVuaW5zZGVsZXRla2V5aWZlbXB0eTsgVmFsdWVUeXBlOiBzdHJpbmcKLVJvb3Q6IEhLTE07IFN1YmtleTogU09GVFdBUkVcUHl0aG9uXFB5dGhvbkNvcmVcMi4yXEluc3RhbGxQYXRoXEluc3RhbGxHcm91cDsgVmFsdWVEYXRhOiB7Z3JvdXB9OyBGbGFnczogdW5pbnNkZWxldGVrZXkKLVJvb3Q6IEhLTE07IFN1YmtleTogU09GVFdBUkVcUHl0aG9uXFB5dGhvbkNvcmVcMi4yXEhlbHA7IEZsYWdzOiB1bmluc2RlbGV0ZWtleWlmZW1wdHkKLVJvb3Q6IEhLTE07IFN1YmtleTogU09GVFdBUkVcUHl0aG9uXFB5dGhvbkNvcmVcMi4yXEhlbHBcTWFpbiBQeXRob24gRG9jdW1lbnRhdGlvbjsgVmFsdWVUeXBlOiBzdHJpbmc7IFZhbHVlRGF0YToge2FwcH1cRG9jXGluZGV4Lmh0bWw7IEZsYWdzOiB1bmluc2RlbGV0ZWtleTsgQ29tcG9uZW50czogZG9jcwotUm9vdDogSEtMTTsgU3Via2V5OiBTT0ZUV0FSRVxQeXRob25cUHl0aG9uQ29yZVwyLjJcSGVscFxQeXRob24gV2luMzIgRG9jdW1lbnRhdGlvbjsgVmFsdWVUeXBlOiBzdHJpbmc7IFZhbHVlRGF0YToge2FwcH1cbGliXHNpdGUtcGFja2FnZXNcUHlXaW4zMi5jaG07IEZsYWdzOiB1bmluc2RlbGV0ZWtleTsgQ29tcG9uZW50czogZG9jcwotCi1bX0lTVG9vbF0KLUVuYWJsZUlTWD10cnVlCi0KLQotW0NvZGVdCi1Qcm9ncmFtIFNldHVwOwotCi1GdW5jdGlvbiBJc0FkbWluTm90TG9nZ2VkT24oKTogQm9vbGVhbjsKLWJlZ2luCi0gIFJlc3VsdCA6PSBOb3QgSXNBZG1pbkxvZ2dlZE9uKCk7Ci1lbmQ7Ci0KLWJlZ2luCi1lbmQuCi0KLQotCi0KLVtVbmluc3RhbGxEZWxldGVdCi1OYW1lOiB7YXBwfVxMaWJcY29tcGlsZXJcKi5weWM7IFR5cGU6IGZpbGVzCi1OYW1lOiB7YXBwfVxMaWJcY29tcGlsZXJcKi5weW87IFR5cGU6IGZpbGVzCi1OYW1lOiB7YXBwfVxMaWJcY29tcGlsZXI7IFR5cGU6IGRpcmlmZW1wdHkKLU5hbWU6IHthcHB9XExpYlxkaXN0dXRpbHNcY29tbWFuZFwqLnB5YzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XExpYlxkaXN0dXRpbHNcY29tbWFuZFwqLnB5bzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XExpYlxkaXN0dXRpbHNcY29tbWFuZDsgVHlwZTogZGlyaWZlbXB0eQotTmFtZToge2FwcH1cTGliXGRpc3R1dGlsc1wqLnB5YzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XExpYlxkaXN0dXRpbHNcKi5weW87IFR5cGU6IGZpbGVzCi1OYW1lOiB7YXBwfVxMaWJcZGlzdHV0aWxzOyBUeXBlOiBkaXJpZmVtcHR5Ci1OYW1lOiB7YXBwfVxMaWJcZW1haWxcdGVzdFwqLnB5YzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XExpYlxlbWFpbFx0ZXN0XCoucHlvOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cTGliXGVtYWlsXHRlc3Q7IFR5cGU6IGRpcmlmZW1wdHkKLU5hbWU6IHthcHB9XExpYlxlbWFpbFwqLnB5YzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XExpYlxlbWFpbFwqLnB5bzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XExpYlxlbWFpbDsgVHlwZTogZGlyaWZlbXB0eQotTmFtZToge2FwcH1cTGliXGVuY29kaW5nc1wqLnB5YzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XExpYlxlbmNvZGluZ3NcKi5weW87IFR5cGU6IGZpbGVzCi1OYW1lOiB7YXBwfVxMaWJcZW5jb2RpbmdzOyBUeXBlOiBkaXJpZmVtcHR5Ci1OYW1lOiB7YXBwfVxMaWJcaG90c2hvdFwqLnB5YzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XExpYlxob3RzaG90XCoucHlvOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cTGliXGhvdHNob3Q7IFR5cGU6IGRpcmlmZW1wdHkKLU5hbWU6IHthcHB9XExpYlxsaWItb2xkXCoucHljOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cTGliXGxpYi1vbGRcKi5weW87IFR5cGU6IGZpbGVzCi1OYW1lOiB7YXBwfVxMaWJcbGliLW9sZDsgVHlwZTogZGlyaWZlbXB0eQotTmFtZToge2FwcH1cTGliXHRraW50ZXJcKi5weWM7IFR5cGU6IGZpbGVzCi1OYW1lOiB7YXBwfVxMaWJcdGtpbnRlclwqLnB5bzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XExpYlx0a2ludGVyOyBUeXBlOiBkaXJpZmVtcHR5Ci1OYW1lOiB7YXBwfVxMaWJcdGVzdFwqLnB5YzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XExpYlx0ZXN0XCoucHlvOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cTGliXHRlc3Q7IFR5cGU6IGRpcmlmZW1wdHkKLU5hbWU6IHthcHB9XExpYlx4bWxcZG9tXCoucHljOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cTGliXHhtbFxkb21cKi5weW87IFR5cGU6IGZpbGVzCi1OYW1lOiB7YXBwfVxMaWJceG1sXGRvbTsgVHlwZTogZGlyaWZlbXB0eQotTmFtZToge2FwcH1cTGliXHhtbFxwYXJzZXJzXCoucHljOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cTGliXHhtbFxwYXJzZXJzXCoucHlvOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cTGliXHhtbFxwYXJzZXJzOyBUeXBlOiBkaXJpZmVtcHR5Ci1OYW1lOiB7YXBwfVxMaWJceG1sXHNheFwqLnB5YzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XExpYlx4bWxcc2F4XCoucHlvOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cTGliXHhtbFxzYXg7IFR5cGU6IGRpcmlmZW1wdHkKLU5hbWU6IHthcHB9XExpYlx4bWxcKi5weWM7IFR5cGU6IGZpbGVzCi1OYW1lOiB7YXBwfVxMaWJceG1sXCoucHlvOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cTGliXHhtbDsgVHlwZTogZGlyaWZlbXB0eQotCi1OYW1lOiB7YXBwfVxMaWJcc2l0ZS1wYWNrYWdlc1x3aW4zMjsgVHlwZTogZmlsZXNhbmRvcmRpcnMKLU5hbWU6IHthcHB9XExpYlxzaXRlLXBhY2thZ2VzXHdpbjMyY29tOyBUeXBlOiBmaWxlc2FuZG9yZGlycwotTmFtZToge2FwcH1cTGliXHNpdGUtcGFja2FnZXNcd2luMzJjb21leHQ7IFR5cGU6IGZpbGVzYW5kb3JkaXJzCi1OYW1lOiB7YXBwfVxMaWJcc2l0ZS1wYWNrYWdlc1xweXRob25jb20ucHkqOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cTGliXHNpdGUtcGFja2FnZXM7IFR5cGU6IGRpcmlmZW1wdHkKLQotTmFtZToge2FwcH1cTGliXCoucHljOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cTGliOyBUeXBlOiBkaXJpZmVtcHR5Ci0KLU5hbWU6IHthcHB9XFRvb2xzXHB5bmNoZVwqLnB5YzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XFRvb2xzXHB5bmNoZVwqLnB5bzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XFRvb2xzXHB5bmNoZTsgVHlwZTogZGlyaWZlbXB0eQotCi1OYW1lOiB7YXBwfVxUb29sc1xpZGxlXCoucHljOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cVG9vbHNcaWRsZVwqLnB5bzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XFRvb2xzXGlkbGU7IFR5cGU6IGRpcmlmZW1wdHkKLQotTmFtZToge2FwcH1cVG9vbHNcc2NyaXB0c1wqLnB5YzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XFRvb2xzXHNjcmlwdHNcKi5weW87IFR5cGU6IGZpbGVzCi1OYW1lOiB7YXBwfVxUb29sc1xzY3JpcHRzOyBUeXBlOiBkaXJpZmVtcHR5Ci0KLU5hbWU6IHthcHB9XFRvb2xzXHZlcnNpb25jaGVja1wqLnB5YzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XFRvb2xzXHZlcnNpb25jaGVja1wqLnB5bzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XFRvb2xzXHZlcnNpb25jaGVjazsgVHlwZTogZGlyaWZlbXB0eQotCi1OYW1lOiB7YXBwfVxUb29sc1x3ZWJjaGVja2VyXCoucHljOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cVG9vbHNcd2ViY2hlY2tlclwqLnB5bzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XFRvb2xzXHdlYmNoZWNrZXI7IFR5cGU6IGRpcmlmZW1wdHkKLQotTmFtZToge2FwcH1cVG9vbHM7IFR5cGU6IGRpcmlmZW1wdHkKLQpkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvcHl0aG9uLnZjcHJvaiBiL1BDL1ZTNy4xL3B5dGhvbi52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwYjQ0MDEuLjAwMDAwMDAKLS0tIGEvUEMvVlM3LjEvcHl0aG9uLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDI3NCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iNy4xMCINCi0JTmFtZT0icHl0aG9uIg0KLQlTY2NQcm9qZWN0TmFtZT0icHl0aG9uIg0KLQlTY2NMb2NhbFBhdGg9Ii4uIj4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIi8+DQotCTwvUGxhdGZvcm1zPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLXJlbGVhc2VccHl0aG9uIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtOREVCVUc7X0NPTlNPTEUiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0ib2RiY2NwMzIubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuXC4vcHl0aG9uLmV4ZSINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL3B5dGhvbi5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMSINCi0JCQkJU3RhY2tSZXNlcnZlU2l6ZT0iMjAwMDAwMCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWQwMDAwMDAiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtZGVidWdccHl0aG9uIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19ERUJVRztfQ09OU09MRSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjMiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlCcm93c2VJbmZvcm1hdGlvbj0iMSINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJvZGJjY3AzMi5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4vcHl0aG9uX2QuZXhlIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vcHl0aG9uX2QucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJCVN0YWNrUmVzZXJ2ZVNpemU9IjIwMDAwMDAiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFkMDAwMDAwIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUciDQotCQkJCUN1bHR1cmU9IjEwMzMiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZUl0YW5pdW18V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXGlhNjQtdGVtcC1yZWxlYXNlXHB5dGhvbiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9VU0VDTDpNU19JVEFOSVVNICAvR1MtIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7TkRFQlVHO19DT05TT0xFIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJGQUxTRSINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvTUFDSElORTpJQTY0IC9VU0VMSU5LOk1TX1NESyAvVlNFWFRDT01QX1ZFUkJPU0UiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Im9kYmNjcDMyLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLlwuL3B5dGhvbi5leGUiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9weXRob24ucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJCVN0YWNrUmVzZXJ2ZVNpemU9IjIwMDAwMDAiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFkMDAwMDAwIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQotCQkJCUN1bHR1cmU9IjEwMzMiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZUFNRDY0fFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9ImFtZDY0LXRlbXAtcmVsZWFzZVxweXRob24iDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIg0KLQkJCUNoYXJhY3RlclNldD0iMiI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvVVNFQ0w6TVNfT1BURVJPTiINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO05ERUJVRztfQ09OU09MRSINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iRkFMU0UiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL01BQ0hJTkU6QU1ENjQgL1VTRUxJTks6TVNfU0RLIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJvZGJjY3AzMi5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii5cLi9weXRob24uZXhlIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vcHl0aG9uLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIxIg0KLQkJCQlTdGFja1Jlc2VydmVTaXplPSIyMDAwMDAwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZDAwMDAwMCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KLQkJCQlDdWx0dXJlPSIxMDMzIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xweWNvbi5pY28iPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNccHl0aG9uLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBDXHB5dGhvbl9leGUucmMiPg0KLQkJPC9GaWxlPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzcuMS9weXRob24yMC53c2UgYi9QQy9WUzcuMS9weXRob24yMC53c2UKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlN2Y2YWQzLi4wMDAwMDAwCi0tLSBhL1BDL1ZTNy4xL3B5dGhvbjIwLndzZQorKysgL2Rldi9udWxsCkBAIC0xLDMxMTcgKzAsMCBAQAotRG9jdW1lbnQgVHlwZTogV1NFCi1pdGVtOiBHbG9iYWwKLSAgVmVyc2lvbj05LjAKLSAgVGl0bGU9UHl0aG9uIDIuNGExCi0gIEZsYWdzPTAwMDEwMTAwCi0gIExhbmd1YWdlcz02NSAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMAotICBKYXBhbmVzZSBGb250IE5hbWU9TVMgR290aGljCi0gIEphcGFuZXNlIEZvbnQgU2l6ZT0xMAotICBTdGFydCBHcmFkaWVudD0wIDI1NSAwCi0gIEVuZCBHcmFkaWVudD0wIDEyOCAwCi0gIFdpbmRvd3MgRmxhZ3M9MDAwMDAxMDAwMDAwMTEwMTAwMTAwMTAxMDAwMDEwMTAKLSAgTG9nIFBhdGhuYW1lPSVNQUlORElSJVxJTlNUQUxMLkxPRwotICBNZXNzYWdlIEZvbnQ9TVMgU2FucyBTZXJpZgotICBGb250IFNpemU9OAotICBQYWdlcyBNb2RpZmllZD0wMDAxMDAwMDAxMTEwMTAwMDAwMDAwMDEwMDAwMDExMQotICBFeHRyYSBQYWdlcz0wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDExMDAxMAotICBEaXNrIEZpbGVuYW1lPVNFVFVQCi0gIFBhdGNoIEZsYWdzPTAwMDAwMDAwMDAwMDEwMDEKLSAgUGF0Y2ggVGhyZXNob2xkPTg1Ci0gIFBhdGNoIE1lbW9yeT00MDAwCi0gIE1JRiBQREYgVmVyc2lvbj0xLjAKLSAgTUlGIFNNUyBWZXJzaW9uPTIuMAotICBFWEUgRmlsZW5hbWU9UHl0aG9uLTIuNGExLmV4ZQotICBEaWFsb2dzIFZlcnNpb249OAotICBWZXJzaW9uIEZpbGU9Mi40YTEKLSAgVmVyc2lvbiBEZXNjcmlwdGlvbj1QeXRob24gUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UKLSAgVmVyc2lvbiBDb3B5cmlnaHQ9qTIwMDEtMjAwNyBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbgotICBWZXJzaW9uIENvbXBhbnk9UHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24KLSAgQ3J5c3RhbCBGb3JtYXQ9MTAxMTExMDAxMDExMDAwMDAwMTAwMDEwMDEwMDEwMDEKLSAgU3RlcCBWaWV3PSZBbGwKLSAgVmFyaWFibGUgTmFtZTE9X1dJU0VfCi0gIFZhcmlhYmxlIERlc2NyaXB0aW9uMT1XSVNFIHJvb3QgZGlyZWN0b3J5Ci0gIFZhcmlhYmxlIERlZmF1bHQxPUM6XFByb2dyYW1tZVxXaXNlIEluc3RhbGxhdGlvbiBTeXN0ZW0KLSAgVmFyaWFibGUgRmxhZ3MxPTAwMDAxMDAwCi0gIFZhcmlhYmxlIE5hbWUyPV9UQ0xESVJfCi0gIFZhcmlhYmxlIERlc2NyaXB0aW9uMj1UaGUgZGlyZWN0b3J5IGluIHdoaWNoIHRoZSBUY2wvVGsgaW5zdGFsbGF0aW9uCi0gIFZhcmlhYmxlIERlc2NyaXB0aW9uMj1saXZlcy4gIFRoaXMgbXVzdCBiZSBhIHNpYmxpbmcgb2YgdGhlIFB5dGhvbgotICBWYXJpYWJsZSBEZXNjcmlwdGlvbjI9ZGlyZWN0b3J5LgotICBWYXJpYWJsZSBEZWZhdWx0Mj10Y2w4NAotICBWYXJpYWJsZSBGbGFnczI9MDAwMDEwMDAKLSAgVmFyaWFibGUgTmFtZTM9X0RPQ18KLSAgVmFyaWFibGUgRGVzY3JpcHRpb24zPVRoZSB1bnBhY2tlZCBIVE1MIGRvYyBkaXJlY3RvcnkuCi0gIFZhcmlhYmxlIERlZmF1bHQzPS4uXGh0bWwKLSAgVmFyaWFibGUgRmxhZ3MzPTAwMDAxMDAxCi0gIFZhcmlhYmxlIE5hbWU0PV9TWVNfCi0gIFZhcmlhYmxlIERlc2NyaXB0aW9uND1TeXN0ZW0gZGlyZWN0b3J5ICh3aGVyZSB0byBmaW5kIE1TVkNSVC5ETEwpCi0gIFZhcmlhYmxlIERlZmF1bHQ0PUM6XFdpbmRvd3NcU3lzdGVtCi0gIFZhcmlhYmxlIFZhbHVlczQ9QzpcV2luZG93c1xTeXN0ZW0KLSAgVmFyaWFibGUgVmFsdWVzND1DOlxXSU5OVFxTeXN0ZW0zMgotICBWYXJpYWJsZSBWYWx1ZXM0PUM6XENvZGVcTVNETExzCi0gIFZhcmlhYmxlIFZhbHVlczQ9QzpcV2luZG93c1xTeXN0ZW0zMgotICBWYXJpYWJsZSBGbGFnczQ9MDAwMDAwMTAKLSAgVmFyaWFibGUgTmFtZTU9X1BZTUFKT1JfCi0gIFZhcmlhYmxlIERlc2NyaXB0aW9uNT1QeXRob24gbWFqb3IgdmVyc2lvbiBudW1iZXI7IHRoZSAyIGluIDIuMy4KLSAgVmFyaWFibGUgRGVmYXVsdDU9MgotICBWYXJpYWJsZSBGbGFnczU9MDAwMDEwMDAKLSAgVmFyaWFibGUgTmFtZTY9X1BZTUlOT1JfCi0gIFZhcmlhYmxlIERlc2NyaXB0aW9uNj1QeXRob24gbWlub3IgdmVyc2lvbiBudW1iZXI7IHRoZSAzIGluIDIuMwotICBWYXJpYWJsZSBEZWZhdWx0Nj0zCi0gIFZhcmlhYmxlIEZsYWdzNj0wMDAwMTAwMAotICBWYXJpYWJsZSBOYW1lNz1fRE9BRE1JTl8KLSAgVmFyaWFibGUgRGVzY3JpcHRpb243PVRoZSBpbml0aWFsIHZhbHVlIGZvciAlRE9BRE1JTiUuCi0gIFZhcmlhYmxlIERlc2NyaXB0aW9uNz1XaGVuIDAsIHdlIG5ldmVyIHRyeSB0byB3cml0ZSB1bmRlciBIS0xNLAotICBWYXJpYWJsZSBEZXNjcmlwdGlvbjc9YW5kIGluc3RhbGwgdGhlIFB5dGhvbiArIE1TIHJ1bnRpbWUgRExMcyBpbgotICBWYXJpYWJsZSBEZXNjcmlwdGlvbjc9dGhlIFB5dGhvbiBkaXJlY3RvcnkgaW5zdGVhZCBvZiB0aGUgc3lzdGVtIGRpci4KLSAgVmFyaWFibGUgRGVmYXVsdDc9MQotICBWYXJpYWJsZSBWYWx1ZXM3PTEKLSAgVmFyaWFibGUgVmFsdWVzNz0wCi0gIFZhcmlhYmxlIEZsYWdzNz0wMDAwMTAxMAotICBWYXJpYWJsZSBOYW1lOD1fQUxJQVNOQU1FXwotICBWYXJpYWJsZSBGbGFnczg9MDAwMDEwMDAKLSAgVmFyaWFibGUgTmFtZTk9X0FMSUFTUEFUSF8KLSAgVmFyaWFibGUgRmxhZ3M5PTAwMDAxMDAwCi0gIFZhcmlhYmxlIE5hbWUxMD1fQUxJQVNUWVBFXwotICBWYXJpYWJsZSBGbGFnczEwPTAwMDAxMDAwCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1QWVZFUl9TVFJJTkcKLSAgVmFsdWU9Mi4zCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1XaGVuIHRoZSB2ZXJzaW9uIG51bWJlciBjaGFuZ2VzLCBzZXQgdGhlIGNvbXBpbGVyCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PXZyYmxzIF9QWU1BSk9SXyBhbmQgIF9QWU1JTk9SXy4KLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9Tm90aGluZyBpbiB0aGUgc2NyaXB0IGJlbG93IHNob3VsZCBuZWVkIGZpZGRsaW5nIHRoZW4uCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PU90aGVyIHRoaW5ncyB0aGF0IG5lZWQgZmlkZGxpbmc6Ci1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PSAgICBQWVZFUl9TVFJJTkcgYWJvdmUuCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PSAgICBUaGUgIlRpdGxlOiIgaW4gdGhlIHVwcGVyIGxlZnQgY29ybmVyIG9mIHRoZSBHVUkuCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PSAgICBCdWlsZCBTZXR0aW5ncyBhbmQgVmVyc2lvbiBSZXNvdXJjZSBvbiBzdGVwIDYgKEZpbmlzaCkgb2YgdGhlIEluc3RhbGxhdGlvbiBFeHBlcnQKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9ICAgICAgICBCZSBzdXJlIHRvIHNlbGVjdCBTdGVwcy0+QWxsIG9yIHlvdSBtYXkgbm90IHNlZSB0aGVzZSEKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PVdoZW4gdGhlIHZlcnNpb24gb2YgVGNsL1RrIGNoYW5nZXMsIHRoZSBjb21waWxlciB2cmJsCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PV9UQ0xESVJfIG1heSBhbHNvIG5lZWQgdG8gYmUgY2hhbmdlZC4KLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1BUFBUSVRMRQotICBWYWx1ZT1QeXRob24gJVBZVkVSX1NUUklORyUKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9UFlfVkVSU0lPTiBzaG91bGQgYmUgbWFqb3IubWlub3Igb25seTsgdXNlZCB0byBjcmVhdGUgdGhlIHJlZ2lzdHJ5IGtleTsgbXVzdCBtYXRjaCBNU19ETExfSUQgaW4gcHl0aG9uX250LnJjCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1QWV9WRVJTSU9OCi0gIFZhbHVlPSVfUFlNQUpPUl8lLiVfUFlNSU5PUl8lCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUdST1VQIGlzIHRoZSBTdGFydCBtZW51IGdyb3VwIG5hbWU7IHVzZXIgY2FuIG92ZXJyaWRlLgotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9R1JPVVAKLSAgVmFsdWU9UHl0aG9uICVQWV9WRVJTSU9OJQotICBGbGFncz0xMDAwMDAwMAotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1NQUlORElSIGlzIHRoZSBhcHAgZGlyZWN0b3J5OyB1c2VyIGNhbiBvdmVycmlkZS4KLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPU1BSU5ESVIKLSAgVmFsdWU9UHl0aG9uJV9QWU1BSk9SXyUlX1BZTUlOT1JfJQotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPURPQURNSU4KLSAgVmFsdWU9JV9ET0FETUlOXyUKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9R2l2ZSBub24tYWRtaW4gdXNlcnMgYSBjaGFuY2UgdG8gYWJvcnQuCi1lbmQKLWl0ZW06IENoZWNrIENvbmZpZ3VyYXRpb24KLSAgRmxhZ3M9MTAwMTExMTEKLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPURPQURNSU4KLSAgVmFsdWU9MAotZW5kCi1pdGVtOiBEaXNwbGF5IE1lc3NhZ2UKLSAgVGl0bGU9RG9pbmcgbm9uLWFkbWluIGluc3RhbGwKLSAgVGV4dD1UaGUgY3VycmVudCBsb2dpbiBkb2VzIG5vdCBoYXZlIEFkbWluaXN0cmF0b3IgUHJpdmlsZWdlcyBvbiB0aGlzIG1hY2hpbmUuICBQeXRob24gd2lsbCBpbnN0YWxsIGl0cyByZWdpc3RyeSBpbmZvcm1hdGlvbiBpbnRvIHRoZSBwZXItdXNlciBhcmVhIG9ubHkgZm9yIHRoZSBjdXJyZW50IGxvZ2luLCBpbnN0ZWFkIG9mIGludG8gdGhlIHBlci1tYWNoaW5lIGFyZWEgZm9yIGV2ZXJ5IGFjY291bnQgb24gdGhpcyBtYWNoaW5lLiAgU29tZSBhZHZhbmNlZCB1c2VzIG9mIFB5dGhvbiBtYXkgbm90IHdvcmsgYXMgYSByZXN1bHQgKGZvciBleGFtcGxlLCBydW5uaW5nIGEgUHl0aG9uIHNjcmlwdCBhcyBhIHNlcnZpY2UpLgotICBUZXh0PQotICBUZXh0PUlmIHRoaXMgaXMgbm90IHdoYXQgeW91IHdhbnQsIHBsZWFzZSBjbGljayBDYW5jZWwgdG8gYWJvcnQgdGhpcyBpbnN0YWxsYXRpb24sIGxvZyBvbiBhcyBhbiBBZG1pbmlzdHJhdG9yLCBhbmQgc3RhcnQgdGhlIGluc3RhbGxhdGlvbiBhZ2Fpbi4KLSAgRmxhZ3M9MDAwMDEwMDAKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1CRUdJTiBXSVpBUkQgU1RVRkYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9Tm90ZSBmcm9tIFRpbTogdGhlICJzdG9wIiBvbiB0aGUgbmV4dCBsaW5lIGlzIGFjdHVhbGx5ICJwYXVzZSIuCi1lbmQKLWl0ZW06IE9wZW4vQ2xvc2UgSU5TVEFMTC5MT0cKLSAgRmxhZ3M9MDAwMDAwMDEKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9SWYgdGhlIGRlc3RpbmF0aW9uIHN5c3RlbSBkb2VzIG5vdCBoYXZlIGEgd3JpdGFibGUgV2luZG93c1xTeXN0ZW0gZGlyZWN0b3J5LCBzeXN0ZW0gZmlsZXMgd2lsbCBiZSB3cml0dGVuIHRvIHRoZSBXaW5kb3dzXCBkaXJlY3RvcnkKLWVuZAotaXRlbTogQ2hlY2sgaWYgRmlsZS9EaXIgRXhpc3RzCi0gIFBhdGhuYW1lPSVTWVMlCi0gIEZsYWdzPTEwMDAwMTAwCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1TWVMKLSAgVmFsdWU9JVdJTiUKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IENoZWNrIENvbmZpZ3VyYXRpb24KLSAgRmxhZ3M9MTAxMTEwMTEKLWVuZAotaXRlbTogR2V0IFJlZ2lzdHJ5IEtleSBWYWx1ZQotICBWYXJpYWJsZT1DT01NT04KLSAgS2V5PVNPRlRXQVJFXE1pY3Jvc29mdFxXaW5kb3dzXEN1cnJlbnRWZXJzaW9uCi0gIERlZmF1bHQ9QzpcUHJvZ3JhbSBGaWxlc1xDb21tb24gRmlsZXMKLSAgVmFsdWUgTmFtZT1Db21tb25GaWxlc0RpcgotICBGbGFncz0wMDAwMDEwMAotZW5kCi1pdGVtOiBHZXQgUmVnaXN0cnkgS2V5IFZhbHVlCi0gIFZhcmlhYmxlPVBST0dSQU1fRklMRVMKLSAgS2V5PVNPRlRXQVJFXE1pY3Jvc29mdFxXaW5kb3dzXEN1cnJlbnRWZXJzaW9uCi0gIERlZmF1bHQ9QzpcUHJvZ3JhbSBGaWxlcwotICBWYWx1ZSBOYW1lPVByb2dyYW1GaWxlc0RpcgotICBGbGFncz0wMDAwMDEwMAotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9RVhQTE9SRVIKLSAgVmFsdWU9MQotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9Tm90ZSBmcm9tIFRpbTogIFRoZSBXaXphcmQgaGFyZGNvZCAiQzoiIGF0IHRoZSBzdGFydCBvZiB0aGUgcmVwbGFjZW1lbnQgdGV4dCBmb3IgTUFJTkRJUi4KLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9VGhhdCdzIG5vdCBhcHByb3ByaWF0ZSBpZiB0aGUgc3lzdGVtIGRyaXZlIGRvZXNuJ3QgaGFwcGVuIHRvIGJlIEM6LgotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1JIHJlbW92ZWQgdGhlICJDOiIsIGFuZCB0aGF0IGRpZCB0aGUgcmlnaHQgdGhpbmcgZm9yIHR3byBwZW9wbGUgd2hvIHRlc3RlZCBpdCBvbiBub24tQzogbWFjaGluZXMsCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PWJ1dCBpdCdzIHVuY2xlYXIgd2hldGhlciBpdCB3aWxsIGFsd2F5cyBkbyB0aGUgcmlnaHQgdGhpbmcuCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1NQUlORElSCi0gIFZhbHVlPVwlTUFJTkRJUiUKLSAgRmxhZ3M9MDAwMDExMDAKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9QkFDS1VQIGlzIHRoZSB2YXJpYWJsZSB0aGF0IGhvbGRzIHRoZSBwYXRoIHRoYXQgYWxsIGJhY2t1cCBmaWxlcyB3aWxsIGJlIGNvcGllZCB0byB3aGVuIG92ZXJ3cml0dGVuCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1CQUNLVVAKLSAgVmFsdWU9JU1BSU5ESVIlXEJBQ0tVUAotICBGbGFncz0xMDAwMDAwMAotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1ET0JBQ0tVUCBkZXRlcm1pbmVzIGlmIGEgYmFja3VwIHdpbGwgYmUgcGVyZm9ybWVkLiAgVGhlIHBvc3NpYmxlIHZhbHVlcyBhcmUgQSAoZG8gYmFja3VwKSBvciBCIChkbyBub3QgZG8gYmFja3VwKQotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9RE9CQUNLVVAKLSAgVmFsdWU9QQotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1CUkFORElORyBkZXRlcm1pbmVzIGlmIHRoZSBpbnN0YWxsYXRpb24gd2lsbCBiZSBicmFuZGVkIHdpdGggYSBuYW1lIGFuZCBjb21wYW55LiAgQnkgZGVmYXVsdCwgdGhpcyBpcyB3cml0dGVuIHRvIHRoZSBJTlNUIGRpcmVjdG9yeSAoaW5zdGFsbGF0aW9uIG1lZGlhKS4KLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPUJSQU5ESU5HCi0gIFZhbHVlPTAKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPUJSQU5ESU5HCi0gIFZhbHVlPTEKLWVuZAotaXRlbTogUmVhZCBJTkkgVmFsdWUKLSAgVmFyaWFibGU9TkFNRQotICBQYXRobmFtZT0lSU5TVCVcQ1VTVERBVEEuSU5JCi0gIFNlY3Rpb249UmVnaXN0cmF0aW9uCi0gIEl0ZW09TmFtZQotZW5kCi1pdGVtOiBSZWFkIElOSSBWYWx1ZQotICBWYXJpYWJsZT1DT01QQU5ZCi0gIFBhdGhuYW1lPSVJTlNUJVxDVVNUREFUQS5JTkkKLSAgU2VjdGlvbj1SZWdpc3RyYXRpb24KLSAgSXRlbT1Db21wYW55Ci1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1OQU1FCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1ET0JSQU5ECi0gIFZhbHVlPTEKLWVuZAotaXRlbTogR2V0IFN5c3RlbSBJbmZvcm1hdGlvbgotICBWYXJpYWJsZT1OQU1FCi0gIEZsYWdzPTAwMDAwMTEwCi1lbmQKLWl0ZW06IEdldCBTeXN0ZW0gSW5mb3JtYXRpb24KLSAgVmFyaWFibGU9Q09NUEFOWQotICBGbGFncz0wMDAwMDExMQotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUVORCBXSVpBUkQgU1RVRkYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PVNldCB2cmJscyBmb3IgdGhlICJBZHZhbmNlZCBPcHRpb25zIiBzdWJkaWFsb2cgb2YgQ29tcG9uZW50cy4KLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPVNFTEVDVF9BRE1JTgotICBWYWx1ZT1BCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1ET0FETUlOCi0gIFZhbHVlPTAKLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPVNFTEVDVF9BRE1JTgotICBWYWx1ZT1CCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9VEFTS1MgdmFsdWVzOgotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1BOiBSZWdpc3RlciBmaWxlIGV4dGVuc2lvbnMKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9QjogQ3JlYXRlIFN0YXJ0IE1lbnUgc2hvcnRjdXRzCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1UQVNLUwotICBWYWx1ZT1BQgotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9Q09NUE9ORU5UUyB2YWx1ZXM6Ci1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUE6IGludGVycHJldGVyIGFuZCBsaWJyYXJpZXMKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9QjogVGNsL1RrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUM6IGRvY3MKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9RDogdG9vbHMKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9RTogdGVzdCBzdWl0ZQotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9Q09NUE9ORU5UUwotICBWYWx1ZT1BQkNERQotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9TWFyY2ggdGhydSB0aGUgdXNlciBHVUkuCi1lbmQKLWl0ZW06IFdpemFyZCBCbG9jawotICBEaXJlY3Rpb24gVmFyaWFibGU9RElSRUNUSU9OCi0gIERpc3BsYXkgVmFyaWFibGU9RElTUExBWQotICBCaXRtYXAgUGF0aG5hbWU9LlxpbnN0YWxsZXIuYm1wCi0gIFggUG9zaXRpb249OQotICBZIFBvc2l0aW9uPTEwCi0gIEZpbGxlciBDb2xvcj0xMTE3Mzc1OQotICBEaWFsb2c9U2VsZWN0IERlc3RpbmF0aW9uIERpcmVjdG9yeQotICBEaWFsb2c9QmFja3VwIFJlcGxhY2VkIEZpbGVzCi0gIERpYWxvZz1TZWxlY3QgQ29tcG9uZW50cwotICBEaWFsb2c9U2VsZWN0IFByb2dyYW0gTWFuYWdlciBHcm91cAotICBWYXJpYWJsZT0KLSAgVmFyaWFibGU9Ci0gIFZhcmlhYmxlPQotICBWYXJpYWJsZT1UQVNLUwotICBWYWx1ZT0KLSAgVmFsdWU9Ci0gIFZhbHVlPQotICBWYWx1ZT1CCi0gIENvbXBhcmU9MAotICBDb21wYXJlPTAKLSAgQ29tcGFyZT0wCi0gIENvbXBhcmU9MwotICBGbGFncz0wMDAwMDAxMQotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9RElTUExBWQotICBWYWx1ZT1TdGFydCBJbnN0YWxsYXRpb24KLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPVNVTU1BUlkKLSAgVmFsdWU9SW5zdGFsbCBkaXJlY3Rvcnk6ICAlTUFJTkRJUiUlQ1JMRiUKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1TRUxFQ1RfQURNSU4KLSAgVmFsdWU9QQotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9U1VNTUFSWQotICBWYWx1ZT0lQ1JMRiVEb2luZyBhZG1pbiBpbnN0YWxsLiVDUkxGJQotICBGbGFncz0wMDAwMDAwMQotZW5kCi1pdGVtOiBFbHNlIFN0YXRlbWVudAotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9U1VNTUFSWQotICBWYWx1ZT0lQ1JMRiVEb2luZyBub24tYWRtaW4gaW5zdGFsbC4lQ1JMRiUKLSAgRmxhZ3M9MDAwMDAwMDEKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9RE9CQUNLVVAKLSAgVmFsdWU9QQotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9U1VNTUFSWQotICBWYWx1ZT0lQ1JMRiVNYWtlIGJhY2t1cHMsIGludG8gJUJBQ0tVUCUlQ1JMRiUKLSAgRmxhZ3M9MDAwMDAwMDEKLWVuZAotaXRlbTogRWxzZSBTdGF0ZW1lbnQKLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPVNVTU1BUlkKLSAgVmFsdWU9JUNSTEYlRG9uJ3QgbWFrZSBiYWNrdXBzLiVDUkxGJQotICBGbGFncz0wMDAwMDAwMQotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1TVU1NQVJZCi0gIFZhbHVlPSVDUkxGJUNvbXBvbmVudHM6JUNSTEYlCi0gIEZsYWdzPTAwMDAwMDAxCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1DT01QT05FTlRTCi0gIFZhbHVlPUEKLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPVNVTU1BUlkKLSAgVmFsdWU9ICAgIFB5dGhvbiBpbnRlcnByZXRlciBhbmQgbGlicmFyaWVzJUNSTEYlCi0gIEZsYWdzPTAwMDAwMDAxCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9Q09NUE9ORU5UUwotICBWYWx1ZT1CCi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1TVU1NQVJZCi0gIFZhbHVlPSAgICBUY2wvVGsgKFRraW50ZXIsIElETEUsIHB5ZG9jKSVDUkxGJQotICBGbGFncz0wMDAwMDAwMQotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPUNPTVBPTkVOVFMKLSAgVmFsdWU9QwotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9U1VNTUFSWQotICBWYWx1ZT0gICAgUHl0aG9uIGRvY3VtZW50YXRpb24lQ1JMRiUKLSAgRmxhZ3M9MDAwMDAwMDEKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1DT01QT05FTlRTCi0gIFZhbHVlPUQKLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPVNVTU1BUlkKLSAgVmFsdWU9ICAgIFRvb2wgYW5kIHV0aWxpdHkgc2NyaXB0cyVDUkxGJQotICBGbGFncz0wMDAwMDAwMQotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPUNPTVBPTkVOVFMKLSAgVmFsdWU9RQotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9U1VNTUFSWQotICBWYWx1ZT0gICAgUHl0aG9uIHRlc3Qgc3VpdGUlQ1JMRiUKLSAgRmxhZ3M9MDAwMDAwMDEKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9VEFTS1MKLSAgVmFsdWU9QQotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9U1VNTUFSWQotICBWYWx1ZT0lQ1JMRiVSZWdpc3RlciBmaWxlIGV4dGVuc2lvbnMuJUNSTEYlCi0gIEZsYWdzPTAwMDAwMDAxCi1lbmQKLWl0ZW06IEVsc2UgU3RhdGVtZW50Ci1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1TVU1NQVJZCi0gIFZhbHVlPSVDUkxGJURvbid0IHJlZ2lzdGVyIGZpbGUgZXh0ZW5zaW9ucy4lQ1JMRiUKLSAgRmxhZ3M9MDAwMDAwMDEKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9VEFTS1MKLSAgVmFsdWU9QgotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9U1VNTUFSWQotICBWYWx1ZT0lQ1JMRiVTdGFydCBNZW51IGdyb3VwOiAgJUdST1VQJSVDUkxGJQotICBGbGFncz0wMDAwMDAwMQotZW5kCi1pdGVtOiBFbHNlIFN0YXRlbWVudAotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9U1VNTUFSWQotICBWYWx1ZT0lQ1JMRiVObyBTdGFydCBNZW51IHNob3J0Y3V0cy4lQ1JMRiUKLSAgRmxhZ3M9MDAwMDAwMDEKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogQ3VzdG9tIERpYWxvZyBTZXQKLSAgTmFtZT1TZWxlY3QgRGVzdGluYXRpb24gRGlyZWN0b3J5Ci0gIERpc3BsYXkgVmFyaWFibGU9RElTUExBWQotICBpdGVtOiBEaWFsb2cKLSAgICBUaXRsZT0lQVBQVElUTEUlIEluc3RhbGxhdGlvbgotICAgIFRpdGxlIEZyZW5jaD1JbnN0YWxsYXRpb24gZGUgJUFQUFRJVExFJQotICAgIFRpdGxlIEdlcm1hbj1JbnN0YWxsYXRpb24gdm9uICVBUFBUSVRMRSUKLSAgICBUaXRsZSBTcGFuaXNoPUluc3RhbGFjafNuIGRlICVBUFBUSVRMRSUKLSAgICBUaXRsZSBJdGFsaWFuPUluc3RhbGxhemlvbmUgZGkgJUFQUFRJVExFJQotICAgIFdpZHRoPTMzOQotICAgIEhlaWdodD0yODAKLSAgICBGb250IE5hbWU9SGVsdgotICAgIEZvbnQgU2l6ZT04Ci0gICAgaXRlbTogUHVzaCBCdXR0b24KLSAgICAgIFJlY3RhbmdsZT0xODggMjM0IDI0NCAyNTMKLSAgICAgIFZhcmlhYmxlPURJUkVDVElPTgotICAgICAgVmFsdWU9TgotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAxCi0gICAgICBUZXh0PSZOZXh0ID4KLSAgICAgIFRleHQgRnJlbmNoPSZTdWl0ZSA+Ci0gICAgICBUZXh0IEdlcm1hbj0mV2VpdGVyID4KLSAgICAgIFRleHQgU3BhbmlzaD0mU2lndWllbnRlID4KLSAgICAgIFRleHQgSXRhbGlhbj0mQXZhbnRpID4KLSAgICBlbmQKLSAgICBpdGVtOiBQdXNoIEJ1dHRvbgotICAgICAgUmVjdGFuZ2xlPTI2NCAyMzQgMzIwIDI1MwotICAgICAgQWN0aW9uPTMKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMAotICAgICAgVGV4dD0mQ2FuY2VsCi0gICAgICBUZXh0IEZyZW5jaD0mQW5udWxlcgotICAgICAgVGV4dCBHZXJtYW49JkFiYnJlY2hlbgotICAgICAgVGV4dCBTcGFuaXNoPSZDYW5jZWxhcgotICAgICAgVGV4dCBJdGFsaWFuPSZBbm51bGxhCi0gICAgZW5kCi0gICAgaXRlbTogU3RhdGljCi0gICAgICBSZWN0YW5nbGU9MTAgMjI1IDMyMCAyMjYKLSAgICAgIEFjdGlvbj0zCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMTEKLSAgICBlbmQKLSAgICBpdGVtOiBTdGF0aWMKLSAgICAgIFJlY3RhbmdsZT0xMDggMTEgMzIzIDMzCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLSAgICAgIEZsYWdzPTAwMDAwMDAwMDAwMDAwMDEKLSAgICAgIE5hbWU9VGltZXMgTmV3IFJvbWFuCi0gICAgICBGb250IFN0eWxlPS0yNCAwIDAgMCA3MDAgMjU1IDAgMCAwIDMgMiAxIDE4Ci0gICAgICBUZXh0PVNlbGVjdCBEZXN0aW5hdGlvbiBEaXJlY3RvcnkKLSAgICAgIFRleHQgRnJlbmNoPVPpbGVjdGlvbm5lciBsZSBy6XBlcnRvaXJlIGRlIGRlc3RpbmF0aW9uCi0gICAgICBUZXh0IEdlcm1hbj1aaWVsdmVyemVpY2huaXMgd+RobGVuCi0gICAgICBUZXh0IFNwYW5pc2g9U2VsZWNjaW9uZSBlbCBkaXJlY3RvcmlvIGRlIGRlc3Rpbm8KLSAgICAgIFRleHQgSXRhbGlhbj1TZWxlemlvbmFyZSBEaXJlY3RvcnkgZGkgZGVzdGluYXppb25lCi0gICAgZW5kCi0gICAgaXRlbTogTGlzdGJveAotICAgICAgUmVjdGFuZ2xlPTEwOCA1OCAzMjEgMjE5Ci0gICAgICBWYXJpYWJsZT1NQUlORElSCi0gICAgICBFbmFibGVkIENvbG9yPTAwMDAwMDAwMDAwMDAwMDAxMTExMTExMTExMTExMTExCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAxMDAwMDAwMTAwMDAwMDAxMDEwMDAwMDEKLSAgICAgIEZsYWdzPTAwMDAxMTAwMDAwMDEwMTAKLSAgICAgIFRleHQ9JU1BSU5ESVIlCi0gICAgICBUZXh0PQotICAgIGVuZAotICAgIGl0ZW06IFN0YXRpYwotICAgICAgUmVjdGFuZ2xlPTEwOCA0MCAzMTMgNTgKLSAgICAgIEVuYWJsZWQgQ29sb3I9MDAwMDAwMDAwMDAwMDAwMDExMTExMTExMTExMTExMTEKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotICAgICAgVGV4dD1QbGVhc2Ugc2VsZWN0IGEgZGlyZWN0b3J5IGZvciB0aGUgJUFQUFRJVExFJSBmaWxlcy4KLSAgICBlbmQKLSAgZW5kCi0gIGl0ZW06IERpYWxvZwotICAgIFRpdGxlPVNlbGVjdCBEZXN0aW5hdGlvbiBEaXJlY3RvcnkKLSAgICBUaXRsZSBGcmVuY2g9U+lsZWN0aW9ubmVyIGxlIHLpcGVydG9pcmUgZGUgZGVzdGluYXRpb24KLSAgICBUaXRsZSBHZXJtYW49WmllbHZlcnplaWNobmlzIHfkaGxlbgotICAgIFRpdGxlIFNwYW5pc2g9U2VsZWNjaW9uZSBlbCBkaXJlY3RvcmlvIGRlIGRlc3Rpbm8KLSAgICBUaXRsZSBJdGFsaWFuPVNlbGV6aW9uYXJlIERpcmVjdG9yeSBkaSBkZXN0aW5hemlvbmUKLSAgICBXaWR0aD0yNzYKLSAgICBIZWlnaHQ9MjE2Ci0gICAgRm9udCBOYW1lPUhlbHYKLSAgICBGb250IFNpemU9OAotICAgIGl0ZW06IExpc3Rib3gKLSAgICAgIFJlY3RhbmdsZT02IDYgMjA0IDE4NgotICAgICAgVmFyaWFibGU9TUFJTkRJUgotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMTAwMDAwMDEwMDAwMDAwMTAxMDAwMDAwCi0gICAgICBGbGFncz0wMDAwMTEwMDAwMTAwMDEwCi0gICAgICBUZXh0PSVNQUlORElSJQotICAgICAgVGV4dCBGcmVuY2g9JU1BSU5ESVIlCi0gICAgICBUZXh0IEdlcm1hbj0lTUFJTkRJUiUKLSAgICAgIFRleHQgU3BhbmlzaD0lTUFJTkRJUiUKLSAgICAgIFRleHQgSXRhbGlhbj0lTUFJTkRJUiUKLSAgICBlbmQKLSAgICBpdGVtOiBQdXNoIEJ1dHRvbgotICAgICAgUmVjdGFuZ2xlPTIwOSA4IDI2NSAyNgotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAxCi0gICAgICBUZXh0PU9LCi0gICAgICBUZXh0IEZyZW5jaD1PSwotICAgICAgVGV4dCBHZXJtYW49T0sKLSAgICAgIFRleHQgU3BhbmlzaD1BY2VwdGFyCi0gICAgICBUZXh0IEl0YWxpYW49T0sKLSAgICBlbmQKLSAgICBpdGVtOiBQdXNoIEJ1dHRvbgotICAgICAgUmVjdGFuZ2xlPTIwOSAzMSAyNjUgNTAKLSAgICAgIFZhcmlhYmxlPU1BSU5ESVIKLSAgICAgIFZhbHVlPSVNQUlORElSX1NBVkUlCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAKLSAgICAgIEZsYWdzPTAwMDAwMDAwMDAwMDAwMDEKLSAgICAgIFRleHQ9Q2FuY2VsCi0gICAgICBUZXh0IEZyZW5jaD1Bbm51bGVyCi0gICAgICBUZXh0IEdlcm1hbj1BYmJyZWNoZW4KLSAgICAgIFRleHQgU3BhbmlzaD1DYW5jZWxhcgotICAgICAgVGV4dCBJdGFsaWFuPUFubnVsbGEKLSAgICBlbmQKLSAgZW5kCi1lbmQKLWl0ZW06IEN1c3RvbSBEaWFsb2cgU2V0Ci0gIE5hbWU9QmFja3VwIFJlcGxhY2VkIEZpbGVzCi0gIERpc3BsYXkgVmFyaWFibGU9RElTUExBWQotICBpdGVtOiBEaWFsb2cKLSAgICBUaXRsZT0lQVBQVElUTEUlIEluc3RhbGxhdGlvbgotICAgIFRpdGxlIEZyZW5jaD1GaWNoaWVycyBkZSBTYXV2ZWdhcmRlIFJlbXBsYWPpcwotICAgIFRpdGxlIEdlcm1hbj1TaWNoZXJ1bmdza29waWUgdm9uIGVyc2V0enRlbiBEYXRlaWVuIGVyc3RlbGxlbgotICAgIFRpdGxlIFBvcnR1Z3Vlc2U9RmljaGVpcm9zIHN1YnN0aXR17WRvcyBkZSBzZWd1cmFu52EKLSAgICBUaXRsZSBTcGFuaXNoPUNvcGlhcyBkZSBzZWd1cmlkYWQgZGUgbG9zIGFyY2hpdm9zIHJlZW1wbGF6YWRvcwotICAgIFRpdGxlIEl0YWxpYW49QmFja3VwIGZpbGUgc29zdGl0dWl0aQotICAgIFRpdGxlIERhbmlzaD1TaWtrZXJoZWRza29waWVyaW5nIGFmIGVyc3RhdHRlZGUgZmlsZXIKLSAgICBUaXRsZSBEdXRjaD1WZXJ2YW5nZW4gYmVzdGFuZGVuIGtvcGnrcmVuCi0gICAgVGl0bGUgTm9yd2VnaWFuPVNpa2tlcmhldHNrb3BpZXJlIGVyc3RhdHRlZGUgZmlsZXIKLSAgICBUaXRsZSBTd2VkaXNoPVPka2VyaGV0c2tvcGllcmEgdXRieXR0YSBmaWxlcgotICAgIFdpZHRoPTM1MAotICAgIEhlaWdodD0yODAKLSAgICBGb250IE5hbWU9SGVsdgotICAgIEZvbnQgU2l6ZT04Ci0gICAgaXRlbTogUHVzaCBCdXR0b24KLSAgICAgIFJlY3RhbmdsZT0xODggMjM0IDI0NCAyNTEKLSAgICAgIFZhcmlhYmxlPURJUkVDVElPTgotICAgICAgVmFsdWU9TgotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAxCi0gICAgICBUZXh0PSZOZXh0ID4KLSAgICAgIFRleHQgRnJlbmNoPSZTdWl2YW50PgotICAgICAgVGV4dCBHZXJtYW49JldlaXRlcj4KLSAgICAgIFRleHQgUG9ydHVndWVzZT0mUHLzeGltbz4KLSAgICAgIFRleHQgU3BhbmlzaD0mU2lndWllbnRlID4KLSAgICAgIFRleHQgSXRhbGlhbj0mQXZhbnRpID4KLSAgICAgIFRleHQgRGFuaXNoPSZO5nN0ZT4KLSAgICAgIFRleHQgRHV0Y2g9JlZvbGdlbmRlPgotICAgICAgVGV4dCBOb3J3ZWdpYW49Jk5lc3RlPgotICAgICAgVGV4dCBTd2VkaXNoPSZO5HN0YSA+Ci0gICAgZW5kCi0gICAgaXRlbTogUHVzaCBCdXR0b24KLSAgICAgIFJlY3RhbmdsZT0xMzEgMjM0IDE4OCAyNTEKLSAgICAgIFZhcmlhYmxlPURJUkVDVElPTgotICAgICAgVmFsdWU9QgotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwCi0gICAgICBUZXh0PTwgJkJhY2sKLSAgICAgIFRleHQgRnJlbmNoPTwmUmV0b3VyCi0gICAgICBUZXh0IEdlcm1hbj08Jlp1cvxjawotICAgICAgVGV4dCBQb3J0dWd1ZXNlPTwmUmV0b3JuYXIKLSAgICAgIFRleHQgU3BhbmlzaD08JlJldHJvY2VkZXIKLSAgICAgIFRleHQgSXRhbGlhbj08ICZJbmRpZXRybwotICAgICAgVGV4dCBEYW5pc2g9PCZUaWxiYWdlCi0gICAgICBUZXh0IER1dGNoPTwmVGVydWcKLSAgICAgIFRleHQgTm9yd2VnaWFuPTwmVGlsYmFrZQotICAgICAgVGV4dCBTd2VkaXNoPTwgJlRpbGxiYWthCi0gICAgZW5kCi0gICAgaXRlbTogUHVzaCBCdXR0b24KLSAgICAgIFJlY3RhbmdsZT0yNzggMjM0IDMzMCAyNTEKLSAgICAgIEFjdGlvbj0zCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAKLSAgICAgIFRleHQ9Q2FuY2VsCi0gICAgICBUZXh0IEZyZW5jaD1Bbm51bGVyCi0gICAgICBUZXh0IEdlcm1hbj1BYmJyZWNoZW4KLSAgICAgIFRleHQgUG9ydHVndWVzZT1DYW5jZWxhcgotICAgICAgVGV4dCBTcGFuaXNoPUNhbmNlbGFyCi0gICAgICBUZXh0IEl0YWxpYW49QW5udWxsYQotICAgICAgVGV4dCBEYW5pc2g9QW5udWxsZXIKLSAgICAgIFRleHQgRHV0Y2g9QW5udWxlcmVuCi0gICAgICBUZXh0IE5vcndlZ2lhbj1BdmJyeXQKLSAgICAgIFRleHQgU3dlZGlzaD1BdmJyeXQKLSAgICBlbmQKLSAgICBpdGVtOiBTdGF0aWMKLSAgICAgIFJlY3RhbmdsZT0xMSAyMjEgMzI5IDIyMwotICAgICAgQWN0aW9uPTMKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExMQotICAgIGVuZAotICAgIGl0ZW06IFN0YXRpYwotICAgICAgUmVjdGFuZ2xlPTEwOCA0NiAzMjAgOTgKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotICAgICAgVGV4dD1UaGlzIGluc3RhbGxhdGlvbiBwcm9ncmFtIGNhbiBjcmVhdGUgYmFja3VwIGNvcGllcyBvZiBhbGwgZmlsZXMgcmVwbGFjZWQgZHVyaW5nIHRoZSBpbnN0YWxsYXRpb24uIFRoZXNlIGZpbGVzIHdpbGwgYmUgdXNlZCB3aGVuIHRoZSBzb2Z0d2FyZSBpcyB1bmluc3RhbGxlZCBhbmQgYSByb2xsYmFjayBpcyByZXF1ZXN0ZWQuICBJZiBiYWNrdXAgY29waWVzIGFyZSBub3QgY3JlYXRlZCwgeW91IHdpbGwgb25seSBiZSBhYmxlIHRvIHVuaW5zdGFsbCB0aGUgc29mdHdhcmUgYW5kIG5vdCByb2xsIHRoZSBzeXN0ZW0gYmFjayB0byBhIHByZXZpb3VzIHN0YXRlLgotICAgICAgVGV4dD0KLSAgICAgIFRleHQ9RG8geW91IHdhbnQgdG8gY3JlYXRlIGJhY2t1cHMgb2YgcmVwbGFjZWQgZmlsZXM/Ci0gICAgICBUZXh0IEZyZW5jaD1MZSBwcm9ncmFtbWUgZCdpbnN0YWxsYXRpb24gcGV1dCBjcullciBkZXMgY29waWVzIGRlIHNhdXZlZ2FyZGUgZGUgdG91cyBsZXMgZmljaGllcnMgcmVtcGxhY+lzIHBlbmRhbnQgbCdpbnN0YWxsYXRpb24uIENlcyBmaWNoaWVycyBzb250IHV0aWxpc+lzIGF1IGNhcyBv+SBsZSBsb2dpY2llbCBlc3QgZOlzaW5zdGFsbOkgZXQgcXVlIGwnb24gcHJvY+hkZSDgIGxhIHJlcHJpc2UgZHUgc3lzdOhtZS4gU2kgbGVzIGNvcGllcyBkZSBzYXV2ZWdhcmRlIG5lIHNvbnQgcGFzIGNy6ellcywgb24gbmUgcG91cnJhIHF1ZSBk6XNpbnN0YWxsZXIgbGUgbG9naWNpZWwgc2FucyByZXByZW5kcmUgbGUgc3lzdOhtZSDgIHVuIOl0YXQgcHLpY+lkZW50LiBWb3VsZXotdm91cyBjcullciB1bmUgc2F1dmVnYXJkZSBkZXMgZmljaGllcnMgcmVtcGxhY+lzID8KLSAgICAgIFRleHQgR2VybWFuPURpZXNlcyBJbnN0YWxsYXRpb25zcHJvZ3JhbW0ga2FubiBTaWNoZXJ1bmdza29waWVuIHZvbiBhbGxlbiB35GhyZW5kIGRlciBJbnN0YWxsYXRpb24gZXJzZXR6dGVuIERhdGVpZW4gZXJzdGVsbGVuLiBEaWVzZSBEYXRlaWVuIHdlcmRlbiB6dXIgUvxja2fkbmdpZ21hY2h1bmcgZGVyIEluc3RhbGxhdGlvbiB1bmQgYmVpIEFuZm9yZGVydW5nIGVpbmVzIFJvbGxiYWNrcyB2ZXJ3ZW5kZXQuIE9obmUgU2ljaGVydW5nc2tvcGllbiBpc3QgbnVyIGVpbmUgUvxja2fkbmdpZ21hY2h1bmcgZGVyIEluc3RhbGxhdGlvbiBt9mdsaWNoLCBuaWNodCBhYmVyIGVpbiBSb2xsYmFjayBkZXMgU3lzdGVtcy4gU2ljaGVydW5nc2tvcGllbiBkZXIgZXJzZXR6dGVuIERhdGVpZW4gZXJzdGVsbGVuPwotICAgICAgVGV4dCBQb3J0dWd1ZXNlPUVzdGUgcHJvZ3JhbWEgZGUgaW5zdGFsYefjbyBwb2RlIGNyaWFyIGPzcGlhcyBkZSBzZWd1cmFu52EgZGUgdG9kb3Mgb3MgZmljaGVpcm9zIHN1YnN0aXR17WRvcyBkdXJhbnRlIGEgaW5zdGFsYefjby4gRXN0ZXMgZmljaGVpcm9zIHNlcuNvIHV0aWxpemFkb3MgcXVhbmRvIG8gcHJvZ3JhbWEgZm9yIGRlc2luc3RhbGFkbyAgZSBmb3IgcmVxdWlzaXRhZGEgdW1hIHJldG9tYWRhLiBTZSBhcyBj83BpYXMgZGUgc2VndXJhbudhIG7jbyBmb3JlbSBjcmlhZGFzLCBz8yBwb2RlcuEgZGVzaW5zdGFsYXIgbyBwcm9ncmFtYSBlIG7jbyBwb2RlIHJldG9tYXIgIHVtIGVzdGFkbyBhbnRlcmlvciBkbyBzaXN0ZW1hLiBEZXNlamEgY3JpYXIgY/NwaWFzIGRlIHNlZ3VyYW7nYSBkb3MgZmljaGVpcm9zIHN1YnN0aXR17WRvcz8KLSAgICAgIFRleHQgU3BhbmlzaD1Fc3RlIHByb2dyYW1hIGRlIGluc3RhbGFjafNuIHB1ZWRlIGNyZWFyIGNvcGlhcyBkZSBzZWd1cmlkYWQgZGUgdG9kb3MgbG9zIGFyY2hpdm9zIHJlZW1wbGF6YWRvcyBkdXJhbnRlIGxhIGluc3RhbGFjafNuLiBFc3RvcyBhcmNoaXZvcyBzZSB1dGlsaXphcuFuIGN1YW5kbyBzZSBkZXNpbnN0YWxlIGVsIHNvZnR3YXJlIHkgc2Ugc29saWNpdGUgdm9sdmVyIGFsIGVzdGFkbyBhbnRlcmlvci4gU2kgbm8gc2UgY3JlYW4gY29waWFzIGRlIHNlZ3VyaWRhZCwg+m5pY2FtZW50ZSBwb2Ry4SBkZXNpbnN0YWxhciBlbCBzb2Z0d2FyZSB5IG5vIHBvZHLhIGRldm9sdmVyIGVsIHNpc3RlbWEgYWwgZXN0YWRvIGFudGVyaW9yLiC/RGVzZWEgY3JlYXIgYXJjaGl2b3MgZGUgc2VndXJpZGFkIGRlIGxvcyBhcmNoaXZvcyByZWVtcGxhemFkb3M/Ci0gICAgICBUZXh0IEl0YWxpYW49UXVlc3RvIHByb2dyYW1tYSBkaSBpbnN0YWxsYXppb25lIHB18iBjcmVhcmUgY29waWUgZGkgYmFja3VwIGRpIHR1dHRpIGkgZmlsZSBzb3N0aXR1aXRpIGR1cmFudGUgbJJpbnN0YWxsYXppb25lLiBRdWVzdGkgZmlsZSBzYXJhbm5vIHVzYXRpIHF1YW5kbyBpbCBzb2Z0d2FyZSBzYXLgIGRpc2luc3RhbGxhdG8gZSBzYXLgIHJpY2hpZXN0byB1biByaXRvcm5vIGFsbG8gc3RhdG8gcHJlY2VkZW50ZS4gU2Ugbm9uIGNyZWkgbGUgY29waWUgZGkgYmFja3VwLCBwb3RyYWkgc29sbyBkaXNpbnN0YWxsYXJlIGlsIHNvZnR3YXJlLCBtYSBub24gcG90cmFpIHJpcG9ydGFyZSBpbCBzaXN0ZW1hIGFsbG8gc3RhdG8gcHJlY2VkZW50ZS4gVnVvaSBjcmVhcmUgaSBmaWxlIGRpIGJhY2t1cCBkZWkgZmlsZSBzb3N0aXR1aXRpPwotICAgICAgVGV4dCBEYW5pc2g9RGV0dGUgaW5zdGFsbGF0aW9uc3Byb2dyYW0ga2FuIG9wcmV0dGUgc2lra2VyaGVkc2tvcGllciBhZiBhbGxlIGZpbGVyLCBzb20gZXJzdGF0dGVzIHVuZGVyIGluc3RhbGxhdGlvbmVuLiBEaXNzZSBmaWxlciBiZW55dHRlcywgbuVyIHNvZnR3YXJlbiBmamVybmVzLCBvZyBkZW4gdGlkbGlnZXJlIHN5c3RlbWtvbmZpZ3VyYXRpb24gZ2VuZXRhYmxlcmVzLiBIdmlzIGRlciBpa2tlIG9wcmV0dGVzIHNpa2tlcmhlZHNrb3BpZXIsIGthbiBkdSBrdW4gZmplcm5lIGRlbiBpbnN0YWxsZXJlZGUgc29mdHdhcmUgb2cgaWtrZSBnZW5ldGFibGVyZSBkZW4gdGlkbGlnZXJlIHN5c3RlbWtvbmZpZ3VyYXRpb24uIFZpbCBkdSBvcHJldHRlIHNpa2tlcmhlZHNrb3BpZXIgYWYgZmlsZXIsIHNvbSBlcnN0YXR0ZXM/Ci0gICAgICBUZXh0IER1dGNoPURpdCBpbnN0YWxsYXRpZXByb2dyYW1tYSBrYW4ga29waWXrbiBtYWtlbiB2YW4gYWxsZSBiZXN0YW5kZW4gZGllIHRpamRlbnMgZGUgaW5zdGFsbGF0aWUgd29yZGVuIHZlcnZhbmdlbi4gRGV6ZSB3b3JkZW4gZGFuIGdlYnJ1aWt0IGFscyBkZSBzb2Z0d2FyZS1pbnN0YWxsYXRpZSBvbmdlZGFhbiB3b3JkdCBnZW1hYWt0IGVuIHUgaGV0IHN5c3RlZW0gd2lsdCBsYXRlbiB0ZXJ1Z2tlcmVuIG5hYXIgZGUgb29yc3Byb25rZWxpamtlIHN0YWF0LiBBbHMgZXIgZ2VlbiBiYWNrLXVwIGtvcGll624gd29yZGVuIGdlbWFha3QsIGt1bnQgdSBkZSBzb2Z0d2FyZSBlbmtlbCB2ZXJ3aWpkZXJlbiBtYWFyIGhldCBzeXN0ZWVtIG5pZXQgaW4gZGUgb29yc3Byb25rZWxpamtlIHN0YWF0IHRlcnVnYnJlbmdlbi4gV2lsdCB1IGVlbiBiYWNrLXVwIG1ha2VuIHZhbiBkZSB2ZXJ2YW5nZW4gYmVzdGFuZGVuPwotICAgICAgVGV4dCBOb3J3ZWdpYW49RGV0dGUgaW5zdGFsbGFzam9uc3Byb2dyYW1tZXQga2FuIGxhZ2Ugc2lra2VyaGV0c2tvcGllciBhdiBhbGxlIGZpbGVyIHNvbSBibGlyIGVyc3RhdHRldCB1bmRlciBpbnN0YWxsYXNqb25lbi4gRGlzc2UgZmlsZW5lIHZpbCB0YXMgaSBicnVrIG7lciBwcm9ncmFtdmFyZW4gZXIgYXZpbnN0YWxsZXJ0IG9nIGRldCBlciBiZWhvdiBmb3IgdGlsYmFrZXN0aWxsaW5nLiBIdmlzIGRldCBpa2tlIGVyIGxhZ2V0IHNpa2tlcmhldHNrb3BpZXIsIGthbiBkdSBrdW4gYXZpbnN0YWxsZXJlIHByb2dyYW12YXJlbiBvZyBpa2tlIHN0aWxsZSBzeXN0ZW1ldCB0aWxiYWtlIHRpbCB0aWRsaWdlcmUgc3RhdHVzLiDYbnNrZXIgZHUg5SBsYWdlIHNpa2tlcmhldHNrb3BpZXIgYXYgZGUgZmlsZW5lIHNvbSBibGlyIGVyc3RhdHRldCBu5T8KLSAgICAgIFRleHQgU3dlZGlzaD1JbnN0YWxsYXRpb25zcHJvZ3JhbW1ldCBrYW4gc2thcGEgc+RrZXJoZXRza29waW9yIGF2IGFsbGEgZmlsZXIgc29tIGJ5dHMgdXQgdW5kZXIgaW5zdGFsbGF0aW9uZW4uIERlc3NhIGZpbGVyIGthbiBzZWRhbiBhbnbkbmRhcyBu5HIgcHJvZ3JhbXZhcmFuIGF2aW5zdGFsbGVyYXMgb2NoIGR1IGJlZ+RyIHJvbGxiYWNrLiBPbSBkdSBk5SBpbnRlIGhhciBu5WdyYSBz5GtlcmhldHNrb3Bpb3Iga2FuIGR1IGJhcmEgYXZpbnN0YWxsZXJhIHByb2dyYW12YXJhbiwgaW50ZSDldGVyc2thcGEgc3lzdGVtZXQgaSBkZXNzIHRpZGlnYXJlIHNraWNrLiBWaWxsIGR1IGf2cmEgc+RrZXJoZXRza29waW9yIGF2IGRlIGVyc2F0dGEgZmlsZXJuYT8KLSAgICBlbmQKLSAgICBpdGVtOiBSYWRpbyBCdXR0b24KLSAgICAgIFJlY3RhbmdsZT0xNDEgMTA2IDI2NSAxMzYKLSAgICAgIFZhcmlhYmxlPURPQkFDS1VQCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDEwMDEKLSAgICAgIFRleHQ9JlllcywgbWFrZSBiYWNrdXBzCi0gICAgICBUZXh0PU4mbywgZG8gbm90IG1ha2UgYmFja3VwcwotICAgICAgVGV4dD0KLSAgICAgIFRleHQgRnJlbmNoPSZPdWkKLSAgICAgIFRleHQgRnJlbmNoPU4mb24KLSAgICAgIFRleHQgRnJlbmNoPQotICAgICAgVGV4dCBHZXJtYW49JkphCi0gICAgICBUZXh0IEdlcm1hbj1OJmVpbgotICAgICAgVGV4dCBHZXJtYW49Ci0gICAgICBUZXh0IFBvcnR1Z3Vlc2U9JlNpbQotICAgICAgVGV4dCBQb3J0dWd1ZXNlPU7jJm8KLSAgICAgIFRleHQgUG9ydHVndWVzZT0KLSAgICAgIFRleHQgU3BhbmlzaD0mU+0KLSAgICAgIFRleHQgU3BhbmlzaD1OJm8KLSAgICAgIFRleHQgU3BhbmlzaD0KLSAgICAgIFRleHQgSXRhbGlhbj0mU+wKLSAgICAgIFRleHQgSXRhbGlhbj1OJm8KLSAgICAgIFRleHQgSXRhbGlhbj0KLSAgICAgIFRleHQgRGFuaXNoPSZKYQotICAgICAgVGV4dCBEYW5pc2g9Jk5lagotICAgICAgVGV4dCBEYW5pc2g9Ci0gICAgICBUZXh0IER1dGNoPSZKYQotICAgICAgVGV4dCBEdXRjaD1OJmVlCi0gICAgICBUZXh0IER1dGNoPQotICAgICAgVGV4dCBOb3J3ZWdpYW49JkphCi0gICAgICBUZXh0IE5vcndlZ2lhbj0mTmVpCi0gICAgICBUZXh0IE5vcndlZ2lhbj0KLSAgICAgIFRleHQgU3dlZGlzaD0mSmEKLSAgICAgIFRleHQgU3dlZGlzaD1OJmVqCi0gICAgICBUZXh0IFN3ZWRpc2g9Ci0gICAgZW5kCi0gICAgaXRlbTogU3RhdGljCi0gICAgICBDb250cm9sIE5hbWU9QkFDSzIKLSAgICAgIFJlY3RhbmdsZT0xMDggMTczIDMyMCAyMDgKLSAgICAgIEFjdGlvbj0xCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMTEKLSAgICAgIFRleHQ9QmFja3VwIEZpbGUgRGVzdGluYXRpb24gRGlyZWN0b3J5Ci0gICAgICBUZXh0IEZyZW5jaD1S6XBlcnRvaXJlIGRlIGRlc3RpbmF0aW9uIGRlcyBmaWNoaWVycyBkZSBzYXV2ZWdhcmRlCi0gICAgICBUZXh0IEdlcm1hbj1aaWVsdmVyemVpY2huaXMgZvxyIGRpZSBTaWNoZXJ1bmdzZGF0ZWkKLSAgICAgIFRleHQgUG9ydHVndWVzZT1EaXJlY3TzcmlvIGRlIGRlc3Rpbm8gZGUgZmljaGVpcm8gZGUgc2VndXJhbudhCi0gICAgICBUZXh0IFNwYW5pc2g9RGlyZWN0b3JpbyBkZSBEZXN0aW5vIGRlIGxvcyBBcmNoaXZvcyBkZSBTZWd1cmlkYWQKLSAgICAgIFRleHQgSXRhbGlhbj1EaXJlY3RvcnkgZGkgZGVzdGluYXppb25lIGRlaSBmaWxlIGRpIGJhY2t1cAotICAgICAgVGV4dCBEYW5pc2g9RGVzdGluYXRpb25zYmlibGlvdGVrIHRpbCBzaWtrZXJoZWRza29waWVyCi0gICAgICBUZXh0IER1dGNoPURvZWxkaXJlY3RvcnkgYmFja3VwLWJlc3RhbmQKLSAgICAgIFRleHQgTm9yd2VnaWFuPU3lbGthdGFsb2cgZm9yIHNpa2tlcmhldHNrb3BpZXIKLSAgICAgIFRleHQgU3dlZGlzaD1LYXRhbG9nIGb2ciBz5GtlcmhldHNrb3BpZXJhZGUgZmlsZXIKLSAgICBlbmQKLSAgICBpdGVtOiBQdXNoIEJ1dHRvbgotICAgICAgQ29udHJvbCBOYW1lPUJBQ0szCi0gICAgICBSZWN0YW5nbGU9MjY1IDE4NSAzMTggMjAzCi0gICAgICBWYXJpYWJsZT1CQUNLVVBfU0FWRQotICAgICAgVmFsdWU9JUJBQ0tVUCUKLSAgICAgIERlc3RpbmF0aW9uIERpYWxvZz0xCi0gICAgICBBY3Rpb249MgotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwCi0gICAgICBUZXh0PUImcm93c2UuLi4KLSAgICAgIFRleHQgRnJlbmNoPVAmYXJjb3VyaXIKLSAgICAgIFRleHQgR2VybWFuPUImbOR0dGVybi4uLgotICAgICAgVGV4dCBQb3J0dWd1ZXNlPVAmcm9jdXJhcgotICAgICAgVGV4dCBTcGFuaXNoPVYmaXN1YWxpemFyLi4uCi0gICAgICBUZXh0IEl0YWxpYW49U2ZvZ2xpYS4uLgotICAgICAgVGV4dCBEYW5pc2g9Jkdlbm5lbXNlLi4uCi0gICAgICBUZXh0IER1dGNoPUImbGFkZXJlbi4uLgotICAgICAgVGV4dCBOb3J3ZWdpYW49QmxhIGlnamVubm9tCi0gICAgICBUZXh0IFN3ZWRpc2g9JkJs5GRkcmEKLSAgICBlbmQKLSAgICBpdGVtOiBTdGF0aWMKLSAgICAgIENvbnRyb2wgTmFtZT1CQUNLNAotICAgICAgUmVjdGFuZ2xlPTEyOSAxODggMjU0IDIwMAotICAgICAgRGVzdGluYXRpb24gRGlhbG9nPTIKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotICAgICAgVGV4dD0lQkFDS1VQJQotICAgICAgVGV4dCBGcmVuY2g9JUJBQ0tVUCUKLSAgICAgIFRleHQgR2VybWFuPSVCQUNLVVAlCi0gICAgICBUZXh0IFBvcnR1Z3Vlc2U9JUJBQ0tVUCUKLSAgICAgIFRleHQgU3BhbmlzaD0lQkFDS1VQJQotICAgICAgVGV4dCBJdGFsaWFuPSVCQUNLVVAlCi0gICAgICBUZXh0IERhbmlzaD0lQkFDS1VQJQotICAgICAgVGV4dCBEdXRjaD0lQkFDS1VQJQotICAgICAgVGV4dCBOb3J3ZWdpYW49JUJBQ0tVUCUKLSAgICAgIFRleHQgU3dlZGlzaD0lQkFDS1VQJQotICAgIGVuZAotICAgIGl0ZW06IFN0YXRpYwotICAgICAgUmVjdGFuZ2xlPTEwOCAxMSAzMjMgMzYKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotICAgICAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAwMQotICAgICAgTmFtZT1UaW1lcyBOZXcgUm9tYW4KLSAgICAgIEZvbnQgU3R5bGU9LTI0IDAgMCAwIDcwMCAyNTUgMCAwIDAgMyAyIDEgMTgKLSAgICAgIFRleHQ9QmFja3VwIFJlcGxhY2VkIEZpbGVzCi0gICAgICBUZXh0IEZyZW5jaD1T6WxlY3Rpb25uZXIgbGVzIGNvbXBvc2FudHMKLSAgICAgIFRleHQgR2VybWFuPUtvbXBvbmVudGVuIGF1c3fkaGxlbgotICAgICAgVGV4dCBTcGFuaXNoPVNlbGVjY2lvbmUgY29tcG9uZW50ZXMKLSAgICAgIFRleHQgSXRhbGlhbj1TZWxlemlvbmFyZSBpIGNvbXBvbmVudGkKLSAgICBlbmQKLSAgICBpdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgICAgIFZhcmlhYmxlPURPQkFDS1VQCi0gICAgICBWYWx1ZT1CCi0gICAgZW5kCi0gICAgaXRlbTogU2V0IENvbnRyb2wgQXR0cmlidXRlCi0gICAgICBDb250cm9sIE5hbWU9QkFDSzMKLSAgICAgIE9wZXJhdGlvbj0xCi0gICAgZW5kCi0gICAgaXRlbTogU2V0IENvbnRyb2wgQXR0cmlidXRlCi0gICAgICBDb250cm9sIE5hbWU9QkFDSzQKLSAgICAgIE9wZXJhdGlvbj0xCi0gICAgZW5kCi0gICAgaXRlbTogRWxzZSBTdGF0ZW1lbnQKLSAgICBlbmQKLSAgICBpdGVtOiBTZXQgQ29udHJvbCBBdHRyaWJ1dGUKLSAgICAgIENvbnRyb2wgTmFtZT1CQUNLMwotICAgIGVuZAotICAgIGl0ZW06IFNldCBDb250cm9sIEF0dHJpYnV0ZQotICAgICAgQ29udHJvbCBOYW1lPUJBQ0s0Ci0gICAgZW5kCi0gICAgaXRlbTogRW5kIEJsb2NrCi0gICAgZW5kCi0gIGVuZAotICBpdGVtOiBEaWFsb2cKLSAgICBUaXRsZT1TZWxlY3QgRGVzdGluYXRpb24gRGlyZWN0b3J5Ci0gICAgVGl0bGUgRnJlbmNoPUNob2lzaXNzZXogbGUgculwZXJ0b2lyZSBkZSBkZXN0aW5hdGlvbgotICAgIFRpdGxlIEdlcm1hbj1aaWVsdmVyemVpY2huaXMgd+RobGVuCi0gICAgVGl0bGUgUG9ydHVndWVzZT1TZWxlY2Npb25hciBEaXJlY3TzcmlvIGRlIERlc3Rpbm8KLSAgICBUaXRsZSBTcGFuaXNoPVNlbGVjY2lvbmUgZWwgRGlyZWN0b3JpbyBkZSBEZXN0aW5vCi0gICAgVGl0bGUgSXRhbGlhbj1TZWxlemlvbmEgRGlyZWN0b3J5IGRpIGRlc3RpbmF6aW9uZQotICAgIFRpdGxlIERhbmlzaD1W5mxnIERlc3RpbmF0aW9uc2JpYmxpb3RlawotICAgIFRpdGxlIER1dGNoPUtpZXMgRG9lbGRpcmVjdG9yeQotICAgIFRpdGxlIE5vcndlZ2lhbj1WZWxnIG3lbGthdGFsb2cKLSAgICBUaXRsZSBTd2VkaXNoPVbkbGogZGVzdGluYXRpb25za2FsYXRvZwotICAgIFdpZHRoPTI3NgotICAgIEhlaWdodD0yMTYKLSAgICBGb250IE5hbWU9SGVsdgotICAgIEZvbnQgU2l6ZT04Ci0gICAgaXRlbTogTGlzdGJveAotICAgICAgUmVjdGFuZ2xlPTYgMyAyMDAgMTg2Ci0gICAgICBWYXJpYWJsZT1CQUNLVVAKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDEwMDAwMDAxMDAwMDAwMDEwMTAwMDAwMAotICAgICAgRmxhZ3M9MDAwMDExMDAwMDEwMDAxMAotICAgICAgVGV4dD0lQkFDS1VQJQotICAgICAgVGV4dD0KLSAgICAgIFRleHQgRnJlbmNoPSVCQUNLVVAlCi0gICAgICBUZXh0IEZyZW5jaD0KLSAgICAgIFRleHQgR2VybWFuPSVCQUNLVVAlCi0gICAgICBUZXh0IEdlcm1hbj0KLSAgICAgIFRleHQgUG9ydHVndWVzZT0lQkFDS1VQJQotICAgICAgVGV4dCBQb3J0dWd1ZXNlPQotICAgICAgVGV4dCBTcGFuaXNoPSVCQUNLVVAlCi0gICAgICBUZXh0IFNwYW5pc2g9Ci0gICAgICBUZXh0IEl0YWxpYW49JUJBQ0tVUCUKLSAgICAgIFRleHQgSXRhbGlhbj0KLSAgICAgIFRleHQgRGFuaXNoPSVCQUNLVVAlCi0gICAgICBUZXh0IERhbmlzaD0KLSAgICAgIFRleHQgRHV0Y2g9JUJBQ0tVUCUKLSAgICAgIFRleHQgRHV0Y2g9Ci0gICAgICBUZXh0IE5vcndlZ2lhbj0lQkFDS1VQJQotICAgICAgVGV4dCBOb3J3ZWdpYW49Ci0gICAgICBUZXh0IFN3ZWRpc2g9JUJBQ0tVUCUKLSAgICAgIFRleHQgU3dlZGlzaD0KLSAgICBlbmQKLSAgICBpdGVtOiBQdXNoIEJ1dHRvbgotICAgICAgUmVjdGFuZ2xlPTIwOSA4IDI2NSAyNgotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAxCi0gICAgICBUZXh0PU9LCi0gICAgICBUZXh0IEZyZW5jaD1PSwotICAgICAgVGV4dCBHZXJtYW49T0sKLSAgICAgIFRleHQgUG9ydHVndWVzZT1PSwotICAgICAgVGV4dCBTcGFuaXNoPUFDRVBUQVIKLSAgICAgIFRleHQgSXRhbGlhbj1PSwotICAgICAgVGV4dCBEYW5pc2g9T0sKLSAgICAgIFRleHQgRHV0Y2g9T0sKLSAgICAgIFRleHQgTm9yd2VnaWFuPU9LCi0gICAgICBUZXh0IFN3ZWRpc2g9T0sKLSAgICBlbmQKLSAgICBpdGVtOiBQdXNoIEJ1dHRvbgotICAgICAgUmVjdGFuZ2xlPTIwOSAzMSAyNjUgNTAKLSAgICAgIFZhcmlhYmxlPUJBQ0tVUAotICAgICAgVmFsdWU9JUJBQ0tVUF9TQVZFJQotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwCi0gICAgICBGbGFncz0wMDAwMDAwMDAwMDAwMDAxCi0gICAgICBUZXh0PUNhbmNlbAotICAgICAgVGV4dCBGcmVuY2g9QW5udWxlcgotICAgICAgVGV4dCBHZXJtYW49QWJicmVjaGVuCi0gICAgICBUZXh0IFBvcnR1Z3Vlc2U9Q2FuY2VsYXIKLSAgICAgIFRleHQgU3BhbmlzaD1DYW5jZWxhcgotICAgICAgVGV4dCBJdGFsaWFuPUFubnVsbGEKLSAgICAgIFRleHQgRGFuaXNoPVNsZXQKLSAgICAgIFRleHQgRHV0Y2g9QW5udWxlcmVuCi0gICAgICBUZXh0IE5vcndlZ2lhbj1BdmJyeXQKLSAgICAgIFRleHQgU3dlZGlzaD1BdmJyeXQKLSAgICBlbmQKLSAgZW5kCi1lbmQKLWl0ZW06IEN1c3RvbSBEaWFsb2cgU2V0Ci0gIE5hbWU9U2VsZWN0IENvbXBvbmVudHMKLSAgRGlzcGxheSBWYXJpYWJsZT1ESVNQTEFZCi0gIGl0ZW06IERpYWxvZwotICAgIFRpdGxlPSVBUFBUSVRMRSUgSW5zdGFsbGF0aW9uCi0gICAgVGl0bGUgRnJlbmNoPUluc3RhbGxhdGlvbiBkZSAlQVBQVElUTEUlCi0gICAgVGl0bGUgR2VybWFuPUluc3RhbGxhdGlvbiB2b24gJUFQUFRJVExFJQotICAgIFRpdGxlIFNwYW5pc2g9SW5zdGFsYWNp824gZGUgJUFQUFRJVExFJQotICAgIFRpdGxlIEl0YWxpYW49SW5zdGFsbGF6aW9uZSBkaSAlQVBQVElUTEUlCi0gICAgV2lkdGg9MzM5Ci0gICAgSGVpZ2h0PTI4MAotICAgIEZvbnQgTmFtZT1IZWx2Ci0gICAgRm9udCBTaXplPTgKLSAgICBpdGVtOiBQdXNoIEJ1dHRvbgotICAgICAgUmVjdGFuZ2xlPTE4OCAyMzQgMjQ0IDI1MwotICAgICAgVmFyaWFibGU9RElSRUNUSU9OCi0gICAgICBWYWx1ZT1OCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDEKLSAgICAgIFRleHQ9Jk5leHQgPgotICAgICAgVGV4dCBGcmVuY2g9JlN1aXRlID4KLSAgICAgIFRleHQgR2VybWFuPSZXZWl0ZXIgPgotICAgICAgVGV4dCBTcGFuaXNoPSZTaWd1aWVudGUgPgotICAgICAgVGV4dCBJdGFsaWFuPSZBdmFudGkgPgotICAgIGVuZAotICAgIGl0ZW06IFB1c2ggQnV0dG9uCi0gICAgICBSZWN0YW5nbGU9MTMxIDIzNCAxODggMjUzCi0gICAgICBWYXJpYWJsZT1ESVJFQ1RJT04KLSAgICAgIFZhbHVlPUIKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMAotICAgICAgVGV4dD08ICZCYWNrCi0gICAgICBUZXh0IEZyZW5jaD08ICZSZXRvdXIKLSAgICAgIFRleHQgR2VybWFuPTwgJlp1cvxjawotICAgICAgVGV4dCBTcGFuaXNoPTwgJkF0cuFzCi0gICAgICBUZXh0IEl0YWxpYW49PCAmSW5kaWV0cm8KLSAgICBlbmQKLSAgICBpdGVtOiBQdXNoIEJ1dHRvbgotICAgICAgUmVjdGFuZ2xlPTI2NCAyMzQgMzIwIDI1MwotICAgICAgQWN0aW9uPTMKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMAotICAgICAgVGV4dD0mQ2FuY2VsCi0gICAgICBUZXh0IEZyZW5jaD0mQW5udWxlcgotICAgICAgVGV4dCBHZXJtYW49JkFiYnJlY2hlbgotICAgICAgVGV4dCBTcGFuaXNoPSZDYW5jZWxhcgotICAgICAgVGV4dCBJdGFsaWFuPSZBbm51bGxhCi0gICAgZW5kCi0gICAgaXRlbTogQ2hlY2tib3gKLSAgICAgIFJlY3RhbmdsZT0xMDggNjYgMzEzIDE1NgotICAgICAgVmFyaWFibGU9Q09NUE9ORU5UUwotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDExCi0gICAgICBGbGFncz0wMDAwMDAwMDAwMDAwMTEwCi0gICAgICBUZXh0PVB5dGhvbiBpbnRlcnByZXRlciBhbmQgbGlicmFyaWVzCi0gICAgICBUZXh0PVRjbC9UayAoVGtpbnRlciwgSURMRSwgcHlkb2MpCi0gICAgICBUZXh0PVB5dGhvbiBIVE1MIGRvY3MKLSAgICAgIFRleHQ9UHl0aG9uIHV0aWxpdHkgc2NyaXB0cyAoVG9vbHMvKQotICAgICAgVGV4dD1QeXRob24gdGVzdCBzdWl0ZSAoTGliL3Rlc3QvKQotICAgICAgVGV4dD0KLSAgICAgIFRleHQgRnJlbmNoPVB5dGhvbiBpbnRlcnByZXRlciwgbGlicmFyeSBhbmQgSURMRQotICAgICAgVGV4dCBGcmVuY2g9UHl0aG9uIEhUTUwgZG9jcwotICAgICAgVGV4dCBGcmVuY2g9UHl0aG9uIHV0aWxpdHkgc2NyaXB0cyAoVG9vbHMvKQotICAgICAgVGV4dCBGcmVuY2g9UHl0aG9uIHRlc3Qgc3VpdGUgKExpYi90ZXN0LykKLSAgICAgIFRleHQgRnJlbmNoPQotICAgICAgVGV4dCBHZXJtYW49UHl0aG9uIGludGVycHJldGVyLCBsaWJyYXJ5IGFuZCBJRExFCi0gICAgICBUZXh0IEdlcm1hbj1QeXRob24gSFRNTCBkb2NzCi0gICAgICBUZXh0IEdlcm1hbj1QeXRob24gdXRpbGl0eSBzY3JpcHRzIChUb29scy8pCi0gICAgICBUZXh0IEdlcm1hbj1QeXRob24gdGVzdCBzdWl0ZSAoTGliL3Rlc3QvKQotICAgICAgVGV4dCBHZXJtYW49Ci0gICAgICBUZXh0IFNwYW5pc2g9UHl0aG9uIGludGVycHJldGVyLCBsaWJyYXJ5IGFuZCBJRExFCi0gICAgICBUZXh0IFNwYW5pc2g9UHl0aG9uIEhUTUwgZG9jcwotICAgICAgVGV4dCBTcGFuaXNoPVB5dGhvbiB1dGlsaXR5IHNjcmlwdHMgKFRvb2xzLykKLSAgICAgIFRleHQgU3BhbmlzaD1QeXRob24gdGVzdCBzdWl0ZSAoTGliL3Rlc3QvKQotICAgICAgVGV4dCBTcGFuaXNoPQotICAgICAgVGV4dCBJdGFsaWFuPVB5dGhvbiBpbnRlcnByZXRlciwgbGlicmFyeSBhbmQgSURMRQotICAgICAgVGV4dCBJdGFsaWFuPVB5dGhvbiBIVE1MIGRvY3MKLSAgICAgIFRleHQgSXRhbGlhbj1QeXRob24gdXRpbGl0eSBzY3JpcHRzIChUb29scy8pCi0gICAgICBUZXh0IEl0YWxpYW49UHl0aG9uIHRlc3Qgc3VpdGUgKExpYi90ZXN0LykKLSAgICAgIFRleHQgSXRhbGlhbj0KLSAgICBlbmQKLSAgICBpdGVtOiBTdGF0aWMKLSAgICAgIFJlY3RhbmdsZT0xMDggNDUgMzIwIDYzCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLSAgICAgIFRleHQ9Q2hvb3NlIHdoaWNoIGNvbXBvbmVudHMgdG8gaW5zdGFsbCBieSBjaGVja2luZyB0aGUgYm94ZXMgYmVsb3cuCi0gICAgICBUZXh0IEZyZW5jaD1DaG9pc2lzc2V6IGxlcyBjb21wb3NhbnRzIHF1ZSB2b3VzIHZvdWxleiBpbnN0YWxsZXIgZW4gY29jaGFudCBsZXMgY2FzZXMgY2ktZGVzc291cy4KLSAgICAgIFRleHQgR2VybWFuPVfkaGxlbiBTaWUgZGllIHp1IGluc3RhbGxpZXJlbmRlbiBLb21wb25lbnRlbiwgaW5kZW0gU2llIGluIGRpZSBlbnRzcHJlY2hlbmRlbiBL5HN0Y2hlbiBrbGlja2VuLgotICAgICAgVGV4dCBTcGFuaXNoPUVsaWphIGxvcyBjb21wb25lbnRlcyBxdWUgZGVzZWUgaW5zdGFsYXIgbWFyY2FuZG8gbG9zIGN1YWRyb3MgZGUgYWJham8uCi0gICAgICBUZXh0IEl0YWxpYW49U2NlZ2xpZXJlIHF1YWxpIGNvbXBvbmVudGkgaW5zdGFsbGFyZSBzZWxlemlvbmFuZG8gbGUgY2FzZWxsZSBzb3R0b3N0YW50aS4KLSAgICBlbmQKLSAgICBpdGVtOiBQdXNoIEJ1dHRvbgotICAgICAgUmVjdGFuZ2xlPTE4OCAyMDMgMjY5IDIyMAotICAgICAgRGVzdGluYXRpb24gRGlhbG9nPTEKLSAgICAgIEFjdGlvbj0yCi0gICAgICBFbmFibGVkIENvbG9yPTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExMTExMTExCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAKLSAgICAgIFRleHQ9QWR2YW5jZWQgT3B0aW9ucyAuLi4KLSAgICBlbmQKLSAgICBpdGVtOiBTdGF0aWMKLSAgICAgIFJlY3RhbmdsZT0xMCAyMjUgMzIwIDIyNgotICAgICAgQWN0aW9uPTMKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExMQotICAgIGVuZAotICAgIGl0ZW06IFN0YXRpYwotICAgICAgUmVjdGFuZ2xlPTEwOCAxMCAzMjMgNDMKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotICAgICAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAwMQotICAgICAgTmFtZT1UaW1lcyBOZXcgUm9tYW4KLSAgICAgIEZvbnQgU3R5bGU9LTI0IDAgMCAwIDcwMCAyNTUgMCAwIDAgMyAyIDEgMTgKLSAgICAgIFRleHQ9U2VsZWN0IENvbXBvbmVudHMKLSAgICAgIFRleHQgRnJlbmNoPVPpbGVjdGlvbm5lciBsZXMgY29tcG9zYW50cwotICAgICAgVGV4dCBHZXJtYW49S29tcG9uZW50ZW4gYXVzd+RobGVuCi0gICAgICBUZXh0IFNwYW5pc2g9U2VsZWNjaW9uZSBjb21wb25lbnRlcwotICAgICAgVGV4dCBJdGFsaWFuPVNlbGV6aW9uYXJlIGkgY29tcG9uZW50aQotICAgIGVuZAotICAgIGl0ZW06IFN0YXRpYwotICAgICAgUmVjdGFuZ2xlPTI1MSAxODAgMzExIDE5MwotICAgICAgVmFyaWFibGU9Q09NUE9ORU5UUwotICAgICAgVmFsdWU9TUFJTkRJUgotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwCi0gICAgZW5kCi0gICAgaXRlbTogU3RhdGljCi0gICAgICBSZWN0YW5nbGU9MjUxIDE2OCAzMTEgMTc5Ci0gICAgICBWYXJpYWJsZT1DT01QT05FTlRTCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAKLSAgICBlbmQKLSAgICBpdGVtOiBTdGF0aWMKLSAgICAgIFJlY3RhbmdsZT0xMjMgMTY4IDIzNCAxODEKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotICAgICAgVGV4dD1EaXNrIFNwYWNlIFJlcXVpcmVkOgotICAgICAgVGV4dCBGcmVuY2g9RXNwYWNlIGRpc3F1ZSByZXF1aXMgOgotICAgICAgVGV4dCBHZXJtYW49Tm90d2VuZGlnZXIgU3BlaWNoZXJwbGF0ejoKLSAgICAgIFRleHQgU3BhbmlzaD1Fc3BhY2lvIHJlcXVlcmlkbyBlbiBlbCBkaXNjbzoKLSAgICAgIFRleHQgSXRhbGlhbj1TcGF6aW8gc3UgZGlzY28gbmVjZXNzYXJpbzoKLSAgICBlbmQKLSAgICBpdGVtOiBTdGF0aWMKLSAgICAgIFJlY3RhbmdsZT0xMjMgMTgwIDIzNCAxOTMKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotICAgICAgVGV4dD1EaXNrIFNwYWNlIFJlbWFpbmluZzoKLSAgICAgIFRleHQgRnJlbmNoPUVzcGFjZSBkaXNxdWUgZGlzcG9uaWJsZSA6Ci0gICAgICBUZXh0IEdlcm1hbj1WZXJibGVpYmVuZGVyIFNwZWljaGVycGxhdHo6Ci0gICAgICBUZXh0IFNwYW5pc2g9RXNwYWNpbyBlbiBkaXNjbyBkaXNwb25pYmxlOgotICAgICAgVGV4dCBJdGFsaWFuPVNwYXppbyBzdSBkaXNjbyBkaXNwb25pYmlsZToKLSAgICBlbmQKLSAgICBpdGVtOiBTdGF0aWMKLSAgICAgIFJlY3RhbmdsZT0xMDggMTU4IDMyMCAxOTYKLSAgICAgIEFjdGlvbj0xCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMTEKLSAgICBlbmQKLSAgICBpdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgICAgIFZhcmlhYmxlPURMR19FVkVOVF9UWVBFCi0gICAgICBWYWx1ZT1WRVJJRlkKLSAgICBlbmQKLSAgICBpdGVtOiBSZW1hcmsKLSAgICAgIFRleHQ9SWYgdGhleSdyZSBpbnN0YWxsaW5nIFRjbC9UaywgVG9vbHMsIG9yIHRoZSB0ZXN0IHN1aXRlLCBkb2Vzbid0IG1ha2UgbXVjaCBzZW5zZSB1bmxlc3MgdGhleSdyZSBpbnN0YWxsaW5nIFB5dGhvbiB0b28uCi0gICAgZW5kCi0gICAgaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gICAgICBWYXJpYWJsZT1DT01QT05FTlRTCi0gICAgICBWYWx1ZT1CREUKLSAgICAgIEZsYWdzPTAwMDAxMDEwCi0gICAgZW5kCi0gICAgaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gICAgICBWYXJpYWJsZT1DT01QT05FTlRTCi0gICAgICBWYWx1ZT1BCi0gICAgICBGbGFncz0wMDAwMDAxMQotICAgIGVuZAotICAgIGl0ZW06IERpc3BsYXkgTWVzc2FnZQotICAgICAgVGl0bGU9QXJlIHlvdSBzdXJlPwotICAgICAgVGV4dD1JbnN0YWxsaW5nIFRjbC9UaywgVG9vbHMgb3IgdGhlIHRlc3Qgc3VpdGUgZG9lc24ndCBtYWtlIG11Y2ggc2Vuc2UgdW5sZXNzIHlvdSBpbnN0YWxsIHRoZSBQeXRob24gaW50ZXJwcmV0ZXIgYW5kIGxpYnJhcmllcyB0b28uCi0gICAgICBUZXh0PQotICAgICAgVGV4dD1DbGljayBZZXMgaWYgdGhhdCdzIHJlYWxseSB3aGF0IHlvdSB3YW50LgotICAgICAgRmxhZ3M9MDAxMDExMDEKLSAgICBlbmQKLSAgICBpdGVtOiBSZW1hcmsKLSAgICAgIFRleHQ9Tm90aGluZyAtLSBqdXN0IHByb2NlZWQgdG8gdGhlIG5leHQgZGlhbG9nLgotICAgIGVuZAotICAgIGl0ZW06IEVsc2UgU3RhdGVtZW50Ci0gICAgZW5kCi0gICAgaXRlbTogUmVtYXJrCi0gICAgICBUZXh0PVJldHVybiB0byB0aGUgZGlhbG9nLgotICAgIGVuZAotICAgIGl0ZW06IFNldCBWYXJpYWJsZQotICAgICAgVmFyaWFibGU9RExHX0VWRU5UX1RZUEUKLSAgICBlbmQKLSAgICBpdGVtOiBFbmQgQmxvY2sKLSAgICBlbmQKLSAgICBpdGVtOiBFbmQgQmxvY2sKLSAgICBlbmQKLSAgICBpdGVtOiBFbmQgQmxvY2sKLSAgICBlbmQKLSAgICBpdGVtOiBFbmQgQmxvY2sKLSAgICBlbmQKLSAgZW5kCi0gIGl0ZW06IERpYWxvZwotICAgIFRpdGxlPUFkdmFuY2VkIE9wdGlvbnMKLSAgICBXaWR0aD0zMzkKLSAgICBIZWlnaHQ9MjEzCi0gICAgRm9udCBOYW1lPUhlbHYKLSAgICBGb250IFNpemU9OAotICAgIGl0ZW06IFJhZGlvIEJ1dHRvbgotICAgICAgQ29udHJvbCBOYW1lPUFETUlOMgotICAgICAgUmVjdGFuZ2xlPTExIDQ2IDkwIDc2Ci0gICAgICBWYXJpYWJsZT1TRUxFQ1RfQURNSU4KLSAgICAgIEVuYWJsZWQgQ29sb3I9MDAwMDAwMDAwMDAwMDAwMDExMTExMTExMTExMTExMTEKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMTAwMQotICAgICAgVGV4dD1BZG1pbiBpbnN0YWxsCi0gICAgICBUZXh0PU5vbi1BZG1pbiBpbnN0YWxsbAotICAgICAgVGV4dD0KLSAgICBlbmQKLSAgICBpdGVtOiBQdXNoIEJ1dHRvbgotICAgICAgUmVjdGFuZ2xlPTE4OCAxNzAgMjQ0IDE4OQotICAgICAgVmFyaWFibGU9RElSRUNUSU9OCi0gICAgICBWYWx1ZT1OCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDEKLSAgICAgIFRleHQ9T0sKLSAgICAgIFRleHQgRnJlbmNoPSZTdWl0ZSA+Ci0gICAgICBUZXh0IEdlcm1hbj0mV2VpdGVyID4KLSAgICAgIFRleHQgU3BhbmlzaD0mU2lndWllbnRlID4KLSAgICAgIFRleHQgSXRhbGlhbj0mQXZhbnRpID4KLSAgICBlbmQKLSAgICBpdGVtOiBTdGF0aWMKLSAgICAgIFJlY3RhbmdsZT01IDMgMzI2IDgzCi0gICAgICBBY3Rpb249MQotICAgICAgRW5hYmxlZCBDb2xvcj0wMDAwMDAwMDAwMDAwMDAwMTExMTExMTExMTExMTExMQotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTExCi0gICAgZW5kCi0gICAgaXRlbTogU3RhdGljCi0gICAgICBDb250cm9sIE5hbWU9QURNSU4xCi0gICAgICBSZWN0YW5nbGU9MTEgMTEgMzIxIDQ1Ci0gICAgICBFbmFibGVkIENvbG9yPTAwMDAwMDAwMDAwMDAwMDAxMTExMTExMTExMTExMTExCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLSAgICAgIFRleHQ9QnkgZGVmYXVsdCwgdGhlIGluc3RhbGwgcmVjb3JkcyBzZXR0aW5ncyBpbiB0aGUgcGVyLW1hY2hpbmUgYXJlYSBvZiB0aGUgcmVnaXN0cnkgKEhLTE0pLCBhbmQgaW5zdGFsbHMgdGhlIFB5dGhvbiBhbmQgQyBydW50aW1lIERMTHMgdG8gJVNZUzMyJS4gIENob29zZSAiTm9uLUFkbWluIGluc3RhbGwiIGlmIHlvdSB3b3VsZCBwcmVmZXIgc2V0dGluZ3MgbWFkZSBpbiB0aGUgcGVyLXVzZXIgcmVnaXN0cnkgKEhLQ1UpLCBhbmQgRExMcyBpbnN0YWxsZWQgaW4gJU1BSU5ESVIlLgotICAgIGVuZAotICAgIGl0ZW06IFN0YXRpYwotICAgICAgUmVjdGFuZ2xlPTUgOTAgMzI2IDE1NwotICAgICAgQWN0aW9uPTEKLSAgICAgIEVuYWJsZWQgQ29sb3I9MDAwMDAwMDAwMDAwMDAwMDExMTExMTExMTExMTExMTEKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExMQotICAgIGVuZAotICAgIGl0ZW06IENoZWNrYm94Ci0gICAgICBSZWN0YW5nbGU9MTEgMTIxIDI0MyAxNTEKLSAgICAgIFZhcmlhYmxlPVRBU0tTCi0gICAgICBFbmFibGVkIENvbG9yPTAwMDAwMDAwMDAwMDAwMDAxMTExMTExMTExMTExMTExCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMTEKLSAgICAgIFRleHQ9UmVnaXN0ZXIgZmlsZSBleHRlbnNpb25zICgucHksIC5weXcsIC5weWMsIC5weW8pCi0gICAgICBUZXh0PUNyZWF0ZSBTdGFydCBNZW51IHNob3J0Y3V0cwotICAgICAgVGV4dD0KLSAgICBlbmQKLSAgICBpdGVtOiBTdGF0aWMKLSAgICAgIFJlY3RhbmdsZT0xMSAxMDMgMzIwIDEyMQotICAgICAgRW5hYmxlZCBDb2xvcj0wMDAwMDAwMDAwMDAwMDAwMTExMTExMTExMTExMTExMQotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0gICAgICBUZXh0PUNob29zZSB0YXNrcyB0byBwZXJmb3JtIGJ5IGNoZWNraW5nIHRoZSBib3hlcyBiZWxvdy4KLSAgICBlbmQKLSAgICBpdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgICAgIFZhcmlhYmxlPURMR19FVkVOVF9UWVBFCi0gICAgICBWYWx1ZT1JTklUCi0gICAgZW5kCi0gICAgaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gICAgICBWYXJpYWJsZT1ET0FETUlOCi0gICAgICBWYWx1ZT0xCi0gICAgZW5kCi0gICAgaXRlbTogU2V0IENvbnRyb2wgQXR0cmlidXRlCi0gICAgICBDb250cm9sIE5hbWU9QURNSU4yCi0gICAgZW5kCi0gICAgaXRlbTogRWxzZSBTdGF0ZW1lbnQKLSAgICBlbmQKLSAgICBpdGVtOiBTZXQgQ29udHJvbCBUZXh0Ci0gICAgICBDb250cm9sIE5hbWU9QURNSU4xCi0gICAgICBDb250cm9sIFRleHQ9VGhpcyBzZWN0aW9uIGlzIGF2YWlsYWJsZSBvbmx5IGlmIGxvZ2dlZCBpbiB0byBhbiBhY2NvdW50IHdpdGggQWRtaW5pc3RyYXRvciBwcml2aWxlZ2VzLgotICAgIGVuZAotICAgIGl0ZW06IFNldCBDb250cm9sIEF0dHJpYnV0ZQotICAgICAgQ29udHJvbCBOYW1lPUFETUlOMgotICAgICAgT3BlcmF0aW9uPTEKLSAgICBlbmQKLSAgICBpdGVtOiBFbmQgQmxvY2sKLSAgICBlbmQKLSAgICBpdGVtOiBFbmQgQmxvY2sKLSAgICBlbmQKLSAgZW5kCi1lbmQKLWl0ZW06IEN1c3RvbSBEaWFsb2cgU2V0Ci0gIE5hbWU9U2VsZWN0IFByb2dyYW0gTWFuYWdlciBHcm91cAotICBEaXNwbGF5IFZhcmlhYmxlPURJU1BMQVkKLSAgaXRlbTogRGlhbG9nCi0gICAgVGl0bGU9JUFQUFRJVExFJSBJbnN0YWxsYXRpb24KLSAgICBUaXRsZSBGcmVuY2g9SW5zdGFsbGF0aW9uIGRlICVBUFBUSVRMRSUKLSAgICBUaXRsZSBHZXJtYW49SW5zdGFsbGF0aW9uIHZvbiAlQVBQVElUTEUlCi0gICAgVGl0bGUgU3BhbmlzaD1JbnN0YWxhY2nzbiBkZSAlQVBQVElUTEUlCi0gICAgVGl0bGUgSXRhbGlhbj1JbnN0YWxsYXppb25lIGRpICVBUFBUSVRMRSUKLSAgICBXaWR0aD0zMzkKLSAgICBIZWlnaHQ9MjgwCi0gICAgRm9udCBOYW1lPUhlbHYKLSAgICBGb250IFNpemU9OAotICAgIGl0ZW06IFB1c2ggQnV0dG9uCi0gICAgICBSZWN0YW5nbGU9MTg4IDIzNCAyNDQgMjUzCi0gICAgICBWYXJpYWJsZT1ESVJFQ1RJT04KLSAgICAgIFZhbHVlPU4KLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMQotICAgICAgVGV4dD0mTmV4dCA+Ci0gICAgICBUZXh0IEZyZW5jaD0mU3VpdGUgPgotICAgICAgVGV4dCBHZXJtYW49JldlaXRlciA+Ci0gICAgICBUZXh0IFNwYW5pc2g9JlNpZ3VpZW50ZSA+Ci0gICAgICBUZXh0IEl0YWxpYW49JkF2YW50aSA+Ci0gICAgZW5kCi0gICAgaXRlbTogUHVzaCBCdXR0b24KLSAgICAgIFJlY3RhbmdsZT0xMzEgMjM0IDE4OCAyNTMKLSAgICAgIFZhcmlhYmxlPURJUkVDVElPTgotICAgICAgVmFsdWU9QgotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwCi0gICAgICBGbGFncz0wMDAwMDAwMDAwMDAwMDAxCi0gICAgICBUZXh0PTwgJkJhY2sKLSAgICAgIFRleHQgRnJlbmNoPTwgJlJldG91cgotICAgICAgVGV4dCBHZXJtYW49PCAmWnVy/GNrCi0gICAgICBUZXh0IFNwYW5pc2g9PCAmQXRy4XMKLSAgICAgIFRleHQgSXRhbGlhbj08ICZJbmRpZXRybwotICAgIGVuZAotICAgIGl0ZW06IFB1c2ggQnV0dG9uCi0gICAgICBSZWN0YW5nbGU9MjY0IDIzNCAzMjAgMjUzCi0gICAgICBBY3Rpb249MwotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwCi0gICAgICBUZXh0PSZDYW5jZWwKLSAgICAgIFRleHQgRnJlbmNoPSZBbm51bGVyCi0gICAgICBUZXh0IEdlcm1hbj0mQWJicmVjaGVuCi0gICAgICBUZXh0IFNwYW5pc2g9JkNhbmNlbGFyCi0gICAgICBUZXh0IEl0YWxpYW49JkFubnVsbGEKLSAgICBlbmQKLSAgICBpdGVtOiBTdGF0aWMKLSAgICAgIFJlY3RhbmdsZT0xMCAyMjUgMzIwIDIyNgotICAgICAgQWN0aW9uPTMKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExMQotICAgIGVuZAotICAgIGl0ZW06IFN0YXRpYwotICAgICAgUmVjdGFuZ2xlPTEwOCAxMCAzMjMgNTMKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotICAgICAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAwMQotICAgICAgTmFtZT1UaW1lcyBOZXcgUm9tYW4KLSAgICAgIEZvbnQgU3R5bGU9LTI0IDAgMCAwIDcwMCAyNTUgMCAwIDAgMyAyIDEgMTgKLSAgICAgIFRleHQ9U2VsZWN0IFN0YXJ0IE1lbnUgR3JvdXAKLSAgICAgIFRleHQgRnJlbmNoPVPpbGVjdGlvbm5lciBsZSBncm91cGUgZHUgR2VzdGlvbm5haXJlIGRlIHByb2dyYW1tZQotICAgICAgVGV4dCBHZXJtYW49QmVzdGltbXVuZyBkZXIgUHJvZ3JhbW0tTWFuYWdlcmdydXBwZQotICAgICAgVGV4dCBTcGFuaXNoPVNlbGVjY2lvbmUgZ3J1cG8gZGVsIEFkbWluaXN0cmFkb3IgZGUgcHJvZ3JhbWFzCi0gICAgICBUZXh0IEl0YWxpYW49U2VsZXppb25hcmUgaWwgZ3J1cHBvIFByb2dNYW4KLSAgICBlbmQKLSAgICBpdGVtOiBTdGF0aWMKLSAgICAgIFJlY3RhbmdsZT0xMDggMzUgMzIwIDY1Ci0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLSAgICAgIFRleHQ9RW50ZXIgdGhlIG5hbWUgb2YgdGhlIFN0YXJ0IE1lbnUgcHJvZ3JhbSBncm91cCB0byB3aGljaCB0byBhZGQgdGhlICVBUFBUSVRMRSUgaWNvbnM6Ci0gICAgICBUZXh0IEZyZW5jaD1FbnRyZXogbGUgbm9tIGR1IGdyb3VwZSBkdSBHZXN0aW9ubmFpcmUgZGUgcHJvZ3JhbW1lIGRhbnMgbGVxdWVsIHZvdXMgc291aGFpdGV6IGFqb3V0ZXIgbGVzIGlj9G5lcyBkZSAlQVBQVElUTEUlIDoKLSAgICAgIFRleHQgR2VybWFuPUdlYmVuIFNpZSBkZW4gTmFtZW4gZGVyIFByb2dyYW1tZ3J1cHBlIGVpbiwgZGVyIGRhcyBTeW1ib2wgJUFQUFRJVExFJSBoaW56dWdlZvxndCB3ZXJkZW4gc29sbDoKLSAgICAgIFRleHQgU3BhbmlzaD1Fc2NyaWJhIGVsIG5vbWJyZSBkZWwgZ3J1cG8gZGVsIEFkbWluaXN0cmFkb3IgZGUgcHJvZ3JhbWFzIGVuIGVsIHF1ZSBkZXNlYSBhZ3JlZ2FyIGxvcyBpY29ub3MgZGUgJUFQUFRJVExFJToKLSAgICAgIFRleHQgSXRhbGlhbj1JbnNlcmlyZSBpbCBub21lIGRlbCBncnVwcG8gUHJvZ3JhbSBNYW5hZ2VyIHBlciBhZ2dpdW5nZXJlIGxlIGljb25lICVBUFBUSVRMRSUgYToKLSAgICBlbmQKLSAgICBpdGVtOiBDb21ib2JveAotICAgICAgUmVjdGFuZ2xlPTEwOCA1NiAzMjAgMjE5Ci0gICAgICBWYXJpYWJsZT1HUk9VUAotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAxMDAwMDEwMDAwMDAxMTAwMDAwMDAxCi0gICAgICBGbGFncz0wMDAwMDAwMDAwMDAwMDAxCi0gICAgICBUZXh0PSVHUk9VUCUKLSAgICAgIFRleHQ9Ci0gICAgICBUZXh0IEZyZW5jaD0lR1JPVVAlCi0gICAgICBUZXh0IEdlcm1hbj0lR1JPVVAlCi0gICAgICBUZXh0IFNwYW5pc2g9JUdST1VQJQotICAgICAgVGV4dCBJdGFsaWFuPSVHUk9VUCUKLSAgICBlbmQKLSAgZW5kCi1lbmQKLWl0ZW06IEN1c3RvbSBEaWFsb2cgU2V0Ci0gIE5hbWU9U3RhcnQgSW5zdGFsbGF0aW9uCi0gIERpc3BsYXkgVmFyaWFibGU9RElTUExBWQotICBpdGVtOiBEaWFsb2cKLSAgICBUaXRsZT0lQVBQVElUTEUlIEluc3RhbGxhdGlvbgotICAgIFRpdGxlIEZyZW5jaD1JbnN0YWxsYXRpb24gZGUgJUFQUFRJVExFJQotICAgIFRpdGxlIEdlcm1hbj1JbnN0YWxsYXRpb24gdm9uICVBUFBUSVRMRSUKLSAgICBUaXRsZSBTcGFuaXNoPUluc3RhbGFjafNuIGRlICVBUFBUSVRMRSUKLSAgICBUaXRsZSBJdGFsaWFuPUluc3RhbGxhemlvbmUgZGkgJUFQUFRJVExFJQotICAgIFdpZHRoPTMzOQotICAgIEhlaWdodD0yODAKLSAgICBGb250IE5hbWU9SGVsdgotICAgIEZvbnQgU2l6ZT04Ci0gICAgaXRlbTogUHVzaCBCdXR0b24KLSAgICAgIFJlY3RhbmdsZT0xODggMjM0IDI0NCAyNTMKLSAgICAgIFZhcmlhYmxlPURJUkVDVElPTgotICAgICAgVmFsdWU9TgotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAxCi0gICAgICBUZXh0PSZOZXh0ID4KLSAgICAgIFRleHQgRnJlbmNoPSZTdWl0ZSA+Ci0gICAgICBUZXh0IEdlcm1hbj0mV2VpdGVyID4KLSAgICAgIFRleHQgU3BhbmlzaD0mU2lndWllbnRlID4KLSAgICAgIFRleHQgSXRhbGlhbj0mQXZhbnRpID4KLSAgICBlbmQKLSAgICBpdGVtOiBQdXNoIEJ1dHRvbgotICAgICAgUmVjdGFuZ2xlPTEzMSAyMzQgMTg4IDI1MwotICAgICAgVmFyaWFibGU9RElSRUNUSU9OCi0gICAgICBWYWx1ZT1CCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAKLSAgICAgIFRleHQ9PCAmQmFjawotICAgICAgVGV4dCBGcmVuY2g9PCAmUmV0b3VyCi0gICAgICBUZXh0IEdlcm1hbj08ICZadXL8Y2sKLSAgICAgIFRleHQgU3BhbmlzaD08ICZBdHLhcwotICAgICAgVGV4dCBJdGFsaWFuPTwgJkluZGlldHJvCi0gICAgZW5kCi0gICAgaXRlbTogUHVzaCBCdXR0b24KLSAgICAgIFJlY3RhbmdsZT0yNjQgMjM0IDMyMCAyNTMKLSAgICAgIEFjdGlvbj0zCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAKLSAgICAgIFRleHQ9JkNhbmNlbAotICAgICAgVGV4dCBGcmVuY2g9JkFubnVsZXIKLSAgICAgIFRleHQgR2VybWFuPSZBYmJyZWNoZW4KLSAgICAgIFRleHQgU3BhbmlzaD0mQ2FuY2VsYXIKLSAgICAgIFRleHQgSXRhbGlhbj0mQW5udWxsYQotICAgIGVuZAotICAgIGl0ZW06IFN0YXRpYwotICAgICAgUmVjdGFuZ2xlPTEwIDIyNSAzMjAgMjI2Ci0gICAgICBBY3Rpb249MwotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTExCi0gICAgZW5kCi0gICAgaXRlbTogU3RhdGljCi0gICAgICBSZWN0YW5nbGU9MTA4IDEwIDMyMyA1MwotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0gICAgICBGbGFncz0wMDAwMDAwMDAwMDAwMDAxCi0gICAgICBOYW1lPVRpbWVzIE5ldyBSb21hbgotICAgICAgRm9udCBTdHlsZT0tMjQgMCAwIDAgNzAwIDI1NSAwIDAgMCAzIDIgMSAxOAotICAgICAgVGV4dD1SZWFkeSB0byBJbnN0YWxsIQotICAgICAgVGV4dCBGcmVuY2g9UHLqdCDgIGluc3RhbGxlciAhCi0gICAgICBUZXh0IEdlcm1hbj1JbnN0YWxsYXRpb25zYmVyZWl0IQotICAgICAgVGV4dCBTcGFuaXNoPaFQcmVwYXJhZG8gcGFyYSBsYSBpbnN0YWxhY2nzbiEKLSAgICAgIFRleHQgSXRhbGlhbj1Qcm9udG8gcGVyIGwnaW5zdGFsbGF6aW9uZSEKLSAgICBlbmQKLSAgICBpdGVtOiBTdGF0aWMKLSAgICAgIFJlY3RhbmdsZT0xMDggNDAgMzIwIDYyCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLSAgICAgIFRleHQ9Q2xpY2sgdGhlIE5leHQgYnV0dG9uIHRvIGluc3RhbGwgJUFQUFRJVExFJSwgb3IgdGhlIEJhY2sgYnV0dG9uIHRvIGNoYW5nZSBjaG9pY2VzOgotICAgICAgVGV4dCBGcmVuY2g9Vm91cyDqdGVzIG1haW50ZW5hbnQgcHLqdCDgIGluc3RhbGxlciBsZXMgZmljaGllcnMgJUFQUFRJVExFJS4KLSAgICAgIFRleHQgRnJlbmNoPQotICAgICAgVGV4dCBGcmVuY2g9Q2xpcXVleiBzdXIgbGUgYm91dG9uIFN1aXRlIHBvdXIgY29tbWVuY2VyIGwnaW5zdGFsbGF0aW9uIG91IHN1ciBsZSBib3V0b24gUmV0b3VyIHBvdXIgZW50cmVyIGxlcyBpbmZvcm1hdGlvbnMgZCdpbnN0YWxsYXRpb24g4CBub3V2ZWF1LgotICAgICAgVGV4dCBHZXJtYW49U2llIGv2bm5lbiAlQVBQVElUTEUlIG51biBpbnN0YWxsaWVyZW4uCi0gICAgICBUZXh0IEdlcm1hbj0KLSAgICAgIFRleHQgR2VybWFuPUtsaWNrZW4gU2llIGF1ZiAiV2VpdGVyIiwgdW0gbWl0IGRlciBJbnN0YWxsYXRpb24genUgYmVnaW5uZW4uIEtsaWNrZW4gU2llIGF1ZiAiWnVy/GNrIiwgdW0gZGllIEluc3RhbGxhdGlvbnNpbmZvcm1hdGlvbmVuIG5ldSBlaW56dWdlYmVuLgotICAgICAgVGV4dCBTcGFuaXNoPVlhIGVzdOEgbGlzdG8gcGFyYSBpbnN0YWxhciAlQVBQVElUTEUlLgotICAgICAgVGV4dCBTcGFuaXNoPQotICAgICAgVGV4dCBTcGFuaXNoPVByZXNpb25lIGVsIGJvdPNuIFNpZ3VpZW50ZSBwYXJhIGNvbWVuemFyIGxhIGluc3RhbGFjafNuIG8gcHJlc2lvbmUgQXRy4XMgcGFyYSB2b2x2ZXIgYSBpbmdyZXNhciBsYSBpbmZvcm1hY2nzbiBwYXJhIGxhIGluc3RhbGFjafNuLgotICAgICAgVGV4dCBJdGFsaWFuPU9yYSDoIHBvc3NpYmlsZSBpbnN0YWxsYXJlICVBUFBUSVRMRSUuCi0gICAgICBUZXh0IEl0YWxpYW49Ci0gICAgICBUZXh0IEl0YWxpYW49UHJlbWVyZSBpbCBwdWxzYW50ZSBBdmFudGkgcGVyIGF2dmlhcmUgbCdpbnN0YWxsYXppb25lIG8gaWwgcHVsc2FudGUgSW5kaWV0cm8gcGVyIHJlaW5zZXJpcmUgbGUgaW5mb3JtYXppb25pIGRpIGluc3RhbGxhemlvbmUuCi0gICAgZW5kCi0gICAgaXRlbTogRWRpdGJveAotICAgICAgUmVjdGFuZ2xlPTEwOCA2NiAzMjQgMjE5Ci0gICAgICBIZWxwIENvbnRleHQ9MTY3MTE2ODEKLSAgICAgIEVuYWJsZWQgQ29sb3I9MDAwMDAwMDAwMDAwMDAwMDExMTExMTExMTExMTExMTEKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDEwMDAwMDAwMDAwMTEwMDAxMTAwMDEwMAotICAgICAgVGV4dD0lU1VNTUFSWSUKLSAgICBlbmQKLSAgZW5kCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9RElTUExBWQotICBWYWx1ZT1TZWxlY3QgRGVzdGluYXRpb24gRGlyZWN0b3J5Ci1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PVVzZXIgbWF5IGhhdmUgY2hhbmdlZCBNQUlORElSLCBzbyByZXNldCBCQUNLVVAgdG8gbWF0Y2guCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1CQUNLVVAKLSAgVmFsdWU9JU1BSU5ESVIlXEJBQ0tVUAotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9QkVHSU4gV0laQVJEIFNUVUZGIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PVdoZW4gdGhlIEJBQ0tVUCBmZWF0dXJlIGlzIGVuYWJsZWQsIHRoZSBCQUNLVVBESVIgaXMgaW5pdGlhbGl6ZWQKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPURPQkFDS1VQCi0gIFZhbHVlPUEKLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPUJBQ0tVUERJUgotICBWYWx1ZT0lQkFDS1VQJQotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9VGhlIEJSQU5ESU5HIGluZm9ybWF0aW9uIGlzIHdyaXR0ZW4gdG8gdGhlIElOSSBmaWxlIG9uIHRoZSBpbnN0YWxsYXRpb24gbWVkaWEuCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1CUkFORElORwotICBWYWx1ZT0xCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1ET0JSQU5ECi0gIFZhbHVlPTEKLWVuZAotaXRlbTogRWRpdCBJTkkgRmlsZQotICBQYXRobmFtZT0lSU5TVCVcQ1VTVERBVEEuSU5JCi0gIFNldHRpbmdzPVtSZWdpc3RyYXRpb25dCi0gIFNldHRpbmdzPU5BTUU9JU5BTUUlCi0gIFNldHRpbmdzPUNPTVBBTlk9JUNPTVBBTlklCi0gIFNldHRpbmdzPQotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUJlZ2luIHdyaXRpbmcgdG8gdGhlIElOU1RBTEwuTE9HCi1lbmQKLWl0ZW06IE9wZW4vQ2xvc2UgSU5TVEFMTC5MT0cKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9Q2hlY2sgZnJlZSBkaXNrIHNwYWNlIGNhbGN1bGF0ZXMgZnJlZSBkaXNrIHNwYWNlIGFzIHdlbGwgYXMgY29tcG9uZW50IHNpemVzLgotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1JdCBzaG91bGQgYmUgbG9jYXRlZCBiZWZvcmUgYWxsIEluc3RhbGwgRmlsZSBhY3Rpb25zLgotZW5kCi1pdGVtOiBDaGVjayBEaXNrIFNwYWNlCi0gIENvbXBvbmVudD1DT01QT05FTlRTCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PVRoaXMgaW5jbHVkZSBzY3JpcHQgYWxsb3dzIHVuaW5zdGFsbCBzdXBwb3J0Ci1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PU5vdGUgZnJvbSBUaW06ICB0aGlzIGlzIG91ciBvd24gVW5pbnN0YWwud3NlLCBhIGNvcHkgb2YgV2lzZSdzIGV4Y2VwdAotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1pdCB3cml0ZXMgdG8gSEtDVSAoaW5zdGVhZCBvZiBIS0xNKSBpZiB0aGUgdXNlciBkb2Vzbid0IGhhdmUgYWRtaW4gcHJpdnMuCi1lbmQKLWl0ZW06IEluY2x1ZGUgU2NyaXB0Ci0gIFBhdGhuYW1lPS5cVW5pbnN0YWwud3NlCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PU5vdGUgZnJvbSBUaW06IHRoZXNlIHNlZW1pbmcgbm8tb3BzIGFjdHVhbGx5IGNvbnZlcnQgdG8gc2hvcnQgZmlsZW5hbWVzLgotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9Q09NTU9OCi0gIFZhbHVlPSVDT01NT04lCi0gIEZsYWdzPTAwMDEwMTAwCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1NQUlORElSCi0gIFZhbHVlPSVNQUlORElSJQotICBGbGFncz0wMDAxMDEwMAotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1UaGlzIElGL1RIRU4vRUxTRSByZWFkcyB0aGUgY29ycmVjdCByZWdpc3RyeSBlbnRyaWVzIGZvciBzaG9ydGN1dC9pY29uIHBsYWNlbWVudAotZW5kCi1pdGVtOiBDaGVjayBDb25maWd1cmF0aW9uCi0gIEZsYWdzPTEwMTExMDExCi1lbmQKLWl0ZW06IEdldCBSZWdpc3RyeSBLZXkgVmFsdWUKLSAgVmFyaWFibGU9U1RBUlRVUERJUgotICBLZXk9U29mdHdhcmVcTWljcm9zb2Z0XFdpbmRvd3NcQ3VycmVudFZlcnNpb25cRXhwbG9yZXJcU2hlbGwgRm9sZGVycwotICBEZWZhdWx0PSVXSU4lXFN0YXJ0IE1lbnVcUHJvZ3JhbXNcU3RhcnRVcAotICBWYWx1ZSBOYW1lPVN0YXJ0VXAKLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogR2V0IFJlZ2lzdHJ5IEtleSBWYWx1ZQotICBWYXJpYWJsZT1ERVNLVE9QRElSCi0gIEtleT1Tb2Z0d2FyZVxNaWNyb3NvZnRcV2luZG93c1xDdXJyZW50VmVyc2lvblxFeHBsb3JlclxTaGVsbCBGb2xkZXJzCi0gIERlZmF1bHQ9JVdJTiVcRGVza3RvcAotICBWYWx1ZSBOYW1lPURlc2t0b3AKLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogR2V0IFJlZ2lzdHJ5IEtleSBWYWx1ZQotICBWYXJpYWJsZT1TVEFSVE1FTlVESVIKLSAgS2V5PVNvZnR3YXJlXE1pY3Jvc29mdFxXaW5kb3dzXEN1cnJlbnRWZXJzaW9uXEV4cGxvcmVyXFNoZWxsIEZvbGRlcnMKLSAgRGVmYXVsdD0lV0lOJVxTdGFydCBNZW51Ci0gIFZhbHVlIE5hbWU9U3RhcnQgTWVudQotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBHZXQgUmVnaXN0cnkgS2V5IFZhbHVlCi0gIFZhcmlhYmxlPUdST1VQRElSCi0gIEtleT1Tb2Z0d2FyZVxNaWNyb3NvZnRcV2luZG93c1xDdXJyZW50VmVyc2lvblxFeHBsb3JlclxTaGVsbCBGb2xkZXJzCi0gIERlZmF1bHQ9JVdJTiVcU3RhcnQgTWVudVxQcm9ncmFtcwotICBWYWx1ZSBOYW1lPVByb2dyYW1zCi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IEdldCBSZWdpc3RyeSBLZXkgVmFsdWUKLSAgVmFyaWFibGU9Q1NUQVJUVVBESVIKLSAgS2V5PVNvZnR3YXJlXE1pY3Jvc29mdFxXaW5kb3dzXEN1cnJlbnRWZXJzaW9uXEV4cGxvcmVyXFNoZWxsIEZvbGRlcnMKLSAgRGVmYXVsdD0lU1RBUlRVUERJUiUKLSAgVmFsdWUgTmFtZT1Db21tb24gU3RhcnR1cAotICBGbGFncz0wMDAwMDEwMAotZW5kCi1pdGVtOiBHZXQgUmVnaXN0cnkgS2V5IFZhbHVlCi0gIFZhcmlhYmxlPUNERVNLVE9QRElSCi0gIEtleT1Tb2Z0d2FyZVxNaWNyb3NvZnRcV2luZG93c1xDdXJyZW50VmVyc2lvblxFeHBsb3JlclxTaGVsbCBGb2xkZXJzCi0gIERlZmF1bHQ9JURFU0tUT1BESVIlCi0gIFZhbHVlIE5hbWU9Q29tbW9uIERlc2t0b3AKLSAgRmxhZ3M9MDAwMDAxMDAKLWVuZAotaXRlbTogR2V0IFJlZ2lzdHJ5IEtleSBWYWx1ZQotICBWYXJpYWJsZT1DU1RBUlRNRU5VRElSCi0gIEtleT1Tb2Z0d2FyZVxNaWNyb3NvZnRcV2luZG93c1xDdXJyZW50VmVyc2lvblxFeHBsb3JlclxTaGVsbCBGb2xkZXJzCi0gIERlZmF1bHQ9JVNUQVJUTUVOVURJUiUKLSAgVmFsdWUgTmFtZT1Db21tb24gU3RhcnQgTWVudQotICBGbGFncz0wMDAwMDEwMAotZW5kCi1pdGVtOiBHZXQgUmVnaXN0cnkgS2V5IFZhbHVlCi0gIFZhcmlhYmxlPUNHUk9VUERJUgotICBLZXk9U29mdHdhcmVcTWljcm9zb2Z0XFdpbmRvd3NcQ3VycmVudFZlcnNpb25cRXhwbG9yZXJcU2hlbGwgRm9sZGVycwotICBEZWZhdWx0PSVHUk9VUERJUiUKLSAgVmFsdWUgTmFtZT1Db21tb24gUHJvZ3JhbXMKLSAgRmxhZ3M9MDAwMDAxMDAKLWVuZAotaXRlbTogRWxzZSBTdGF0ZW1lbnQKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9Tm90ZSBmcm9tIFRpbTogIHRoZSBXaXphcmQgbGVmdCB0aGlzIGJsb2NrIGVtcHR5IQotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1QZXJoYXBzIGl0J3Mgb25seSByZWxldmFudCBvbiBXaW5kb3dzIDMuMS4KLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUVORCBXSVpBUkQgU1RVRkYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1TRUxFQ1RfQURNSU4KLSAgVmFsdWU9QgotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1UaGUgdXNlciBjaG9zZSBhIG5vbi1hZG1pbiBpbnN0YWxsIGluICJBZHZhbmNlZCBPcHRpb25zIi4KLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9VGhpcyBzaG91bGQgY29tZSBhZnRlciB0aGUgaW5jbHVkZSBvZiBVbmluc3RhbC53c2UgYWJvdmUsIGJlY2F1c2UKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9d3JpdGluZyB1bmluc3RhbGwgaW5mbyB0byBIS0NVIGlzIGluZWZmZWN0aXZlIGV4Y2VwdCB1bmRlciBXaW4ySy4KLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPURPQURNSU4KLSAgVmFsdWU9MAotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1DR1JPVVBfU0FWRQotICBWYWx1ZT0lR1JPVVAlCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1UQVNLUwotICBWYWx1ZT1CCi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1ET0FETUlOCi0gIFZhbHVlPTEKLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPUdST1VQCi0gIFZhbHVlPSVDR1JPVVBESVIlXCVHUk9VUCUKLWVuZAotaXRlbTogRWxzZSBTdGF0ZW1lbnQKLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPUdST1VQCi0gIFZhbHVlPSVHUk9VUERJUiVcJUdST1VQJQotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1Mb25nIHNlY3Rpb24gdG8gaW5zdGFsbCBmaWxlcy4KLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1ET0FETUlOCi0gIFZhbHVlPTEKLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPURMTERFU1QKLSAgVmFsdWU9JVNZUzMyJQotZW5kCi1pdGVtOiBFbHNlIFN0YXRlbWVudAotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9RExMREVTVAotICBWYWx1ZT0lTUFJTkRJUiUKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1JbnN0YWxsIHRoZSBsaWNlbnNlIGV2ZW4gaWYgdGhleSBkZXNlbGVjdCBldmVyeXRoaW5nIDx3aW5rPi4KLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxsaWNlbnNlCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxMSUNFTlNFLnR4dAotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5ccmVhZG1lCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxSRUFETUUudHh0Ci0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxtaXNjXG5ld3MKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXE5FV1MudHh0Ci0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9SWNvbnMgLS0gYWx3YXlzIGluc3RhbGwgc28gdGhhdCB0aGUgdW5pbnN0YWxsZXIgY2FuIHVzZSB0aGVtIGZvciBpdHMgb3duIGRpc3BsYXkuCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5ccGNccHljb24uaWNvCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxweWNvbi5pY28KLSAgRmxhZ3M9MDAwMDAwMDAxMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXHBjXHB5Yy5pY28KLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXHB5Yy5pY28KLSAgRmxhZ3M9MDAwMDAwMDAxMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXHBjXHB5LmljbwotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVccHkuaWNvCi0gIEZsYWdzPTAwMDAwMDAwMTAwMDAwMTAKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PVRoZXNlIGFycmFuZ2UgdG8gKHJlY3Vyc2l2ZWx5ISkgZGVsZXRlIGFsbCAucHljIGFuZCAucHlvIGZpbGVzIGF0IHVuaW5zdGFsbCB0aW1lLgotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1UaGlzICJkb2VzIHRoZSByaWdodCB0aGluZyI6ICBhbnkgZGlyZWN0b3JpZXMgbGVmdCBlbXB0eSBhdCB0aGUgZW5kIGFyZSByZW1vdmVkLgotZW5kCi1pdGVtOiBBZGQgVGV4dCB0byBJTlNUQUxMLkxPRwotICBUZXh0PUZpbGUgVHJlZTogJU1BSU5ESVIlXCoucHljCi1lbmQKLWl0ZW06IEFkZCBUZXh0IHRvIElOU1RBTEwuTE9HCi0gIFRleHQ9RmlsZSBUcmVlOiAlTUFJTkRJUiVcKi5weW8KLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUE6IGludGVycHJldGVyIGFuZCBsaWJyYXJpZXMKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPUNPTVBPTkVOVFMKLSAgVmFsdWU9QQotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1FeGVjdXRhYmxlcwotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS5ccHl0aG9uLmV4ZQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVccHl0aG9uLmV4ZQotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9LlxweXRob253LmV4ZQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVccHl0aG9udy5leGUKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS5cdzl4cG9wZW4uZXhlCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVx3OXhwb3Blbi5leGUKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9RXh0ZW5zaW9uIG1vZHVsZSBETExzICgucHlkKTsga2VlcCBpbiBzeW5jaCB3aXRoIGxpYnMgZGlyZWN0b3J5IG5leHQKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uXHdpbnJlZy5weWQKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXERMTHNcd2lucmVnLnB5ZAotICBEZXNjcmlwdGlvbj1FeHRlbnNpb24gbW9kdWxlcwotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9LlxfY3N2LnB5ZAotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcRExMc1xfY3N2LnB5ZAotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Llxfc3JlLnB5ZAotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcRExMc1xfc3JlLnB5ZAotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Llxfc3NsLnB5ZAotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcRExMc1xfc3NsLnB5ZAotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Llxfc3ltdGFibGUucHlkCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxETExzXF9zeW10YWJsZS5weWQKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS5cX3Rlc3RjYXBpLnB5ZAotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcRExMc1xfdGVzdGNhcGkucHlkCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uXF90a2ludGVyLnB5ZAotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcRExMc1xfdGtpbnRlci5weWQKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS5cX3NvY2tldC5weWQKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXERMTHNcX3NvY2tldC5weWQKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS5cYnoyLnB5ZAotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcRExMc1xiejIucHlkCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uXGRhdGV0aW1lLnB5ZAotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcRExMc1xkYXRldGltZS5weWQKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS5cbW1hcC5weWQKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXERMTHNcbW1hcC5weWQKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS5ccGFyc2VyLnB5ZAotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcRExMc1xwYXJzZXIucHlkCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uXHB5ZXhwYXQucHlkCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxETExzXHB5ZXhwYXQucHlkCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uXHNlbGVjdC5weWQKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXERMTHNcc2VsZWN0LnB5ZAotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Llx1bmljb2RlZGF0YS5weWQKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXERMTHNcdW5pY29kZWRhdGEucHlkCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uXHdpbnNvdW5kLnB5ZAotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcRExMc1x3aW5zb3VuZC5weWQKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS5cemxpYi5weWQKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXERMTHNcemxpYi5weWQKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9TGluayBsaWJyYXJpZXMgKC5saWIpOyBrZWVwIGluIHN5bmNoIHdpdGggRExMcyBhYm92ZSwgZXhjZXB0IHRoYXQgdGhlIFB5dGhvbiBsaWIgbGl2ZXMgaGVyZS4KLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uXHdpbnJlZy5saWIKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXGxpYnNcd2lucmVnLmxpYgotICBEZXNjcmlwdGlvbj1MaW5rIGxpYnJhcnkgZmlsZXMKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS5cX2Nzdi5saWIKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXGxpYnNcX2Nzdi5saWIKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS5cX3NyZS5saWIKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXGxpYnNcX3NyZS5saWIKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS5cX3NzbC5saWIKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXGxpYnNcX3NzbC5saWIKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS5cX3N5bXRhYmxlLmxpYgotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcbGlic1xfc3ltdGFibGUubGliCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uXF90ZXN0Y2FwaS5saWIKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXGxpYnNcX3Rlc3RjYXBpLmxpYgotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9LlxfdGtpbnRlci5saWIKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXGxpYnNcX3RraW50ZXIubGliCi0gIERlc2NyaXB0aW9uPUV4dGVuc2lvbiBtb2R1bGVzCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uXF9zb2NrZXQubGliCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxsaWJzXF9zb2NrZXQubGliCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uXGJ6Mi5saWIKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXGxpYnNcYnoyLmxpYgotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9LlxkYXRldGltZS5saWIKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXGxpYnNcZGF0ZXRpbWUubGliCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uXG1tYXAubGliCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxsaWJzXG1tYXAubGliCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uXHBhcnNlci5saWIKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXGxpYnNccGFyc2VyLmxpYgotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9LlxweWV4cGF0LmxpYgotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcbGlic1xweWV4cGF0LmxpYgotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9LlxzZWxlY3QubGliCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxsaWJzXHNlbGVjdC5saWIKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS5cdW5pY29kZWRhdGEubGliCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxsaWJzXHVuaWNvZGVkYXRhLmxpYgotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Llx3aW5zb3VuZC5saWIKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXGxpYnNcd2luc291bmQubGliCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uXHpsaWIubGliCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxsaWJzXHpsaWIubGliCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9LlxweXRob24lX3B5bWFqb3JfJSVfcHltaW5vcl8lLmxpYgotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcbGlic1xweXRob24lX1BZTUFKT1JfJSVfUFlNSU5PUl8lLmxpYgotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1NYWluIFB5dGhvbiBETEwKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9VGVsbCBXaXNlIGl0J3MgT0sgdG8gZGVsZXRlIHRoZSBQeXRob24gRExMIGF0IHVuaW5zdGFsbCB0aW1lLAotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1kZXNwaXRlIHRoYXQgd2UgKG1heSkgd3JpdGUgaXQgaW50byBhIHN5c3RlbSBkaXJlY3RvcnkuCi1lbmQKLWl0ZW06IEFkZCBUZXh0IHRvIElOU1RBTEwuTE9HCi0gIFRleHQ9Tm9uLVN5c3RlbSBGaWxlOgotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS5ccHl0aG9uJV9weW1ham9yXyUlX3B5bWlub3JfJS5kbGwKLSAgRGVzdGluYXRpb249JURMTERFU1QlXHB5dGhvbiVfUFlNQUpPUl8lJV9QWU1JTk9SXyUuZGxsCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUxpYnJhcmllcyAoTGliLykKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxsaWJcKi5weQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTGliCi0gIERlc2NyaXB0aW9uPUxpYnJhcnkgTW9kdWxlcwotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXGxpYlxjb21waWxlclwqLnB5Ci0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxMaWJcY29tcGlsZXIKLSAgRGVzY3JpcHRpb249UHl0aG9uIGNvbXBpbGVyIHdyaXR0ZW4gaW4gUHl0aG9uCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cbGliXGRpc3R1dGlsc1wqLnB5Ci0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxMaWJcZGlzdHV0aWxzCi0gIERlc2NyaXB0aW9uPURpc3RyaWJ1dGlvbiB1dGlsaXR5IG1vZHVsZXMKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXGxpYlxkaXN0dXRpbHNccmVhZG1lCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxMaWJcZGlzdHV0aWxzXFJFQURNRS50eHQKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXGxpYlxkaXN0dXRpbHNcY29tbWFuZFwqLnB5Ci0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxMaWJcZGlzdHV0aWxzXGNvbW1hbmQKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXGxpYlxkaXN0dXRpbHNcY29tbWFuZFx3aW5pbnN0LmV4ZQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTGliXGRpc3R1dGlsc1xjb21tYW5kXHdpbmluc3QuZXhlCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxsaWJcZGlzdHV0aWxzXGNvbW1hbmRcY29tbWFuZF90ZW1wbGF0ZQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTGliXGRpc3R1dGlsc1xjb21tYW5kXGNvbW1hbmRfdGVtcGxhdGUKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxsaWJcZW1haWxcKi5weQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTGliXGVtYWlsCi0gIERlc2NyaXB0aW9uPUxpYnJhcnkgZW1haWwgcGFja2FnZQotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cbGliXGVtYWlsXHRlc3RcKi5weQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTGliXGVtYWlsXHRlc3QKLSAgRGVzY3JpcHRpb249ZW1haWwgdGVzdHMKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXGxpYlxlbWFpbFx0ZXN0XGRhdGFcKi50eHQKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXExpYlxlbWFpbFx0ZXN0XGRhdGEKLSAgRGVzY3JpcHRpb249ZW1haWwgdGVzdCBkYXRhCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxsaWJcZW1haWxcdGVzdFxkYXRhXCouZ2lmCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxMaWJcZW1haWxcdGVzdFxkYXRhCi0gIERlc2NyaXB0aW9uPWVtYWlsIHRlc3QgZGF0YQotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cbGliXGVtYWlsXHRlc3RcZGF0YVwqLmF1Ci0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxMaWJcZW1haWxcdGVzdFxkYXRhCi0gIERlc2NyaXB0aW9uPWVtYWlsIHRlc3QgZGF0YQotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXGxpYlxlbmNvZGluZ3NcKi5weQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTGliXGVuY29kaW5ncwotICBEZXNjcmlwdGlvbj1Vbmljb2RlIGVuY29kaW5nIHRhYmxlcwotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXGxpYlxob3RzaG90XCoucHkKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXExpYlxob3RzaG90Ci0gIERlc2NyaXB0aW9uPUZhc3QgUHl0aG9uIHByb2ZpbGVyCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cbGliXGxpYi1vbGRcKi5weQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTGliXGxpYi1vbGQKLSAgRGVzY3JpcHRpb249T2Jzb2xldGUgbW9kdWxlcwotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXGxpYlx0a2ludGVyXCoucHkKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXExpYlx0a2ludGVyCi0gIERlc2NyaXB0aW9uPVRraW50ZXIgcmVsYXRlZCBsaWJyYXJ5IG1vZHVsZXMKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxsaWJcbG9nZ2luZ1wqLnB5Ci0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxMaWJcbG9nZ2luZwotICBEZXNjcmlwdGlvbj1Mb2dnaW5nIHBhY2thZ2UKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxsaWJcc2l0ZS1wYWNrYWdlc1xyZWFkbWUKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXExpYlxzaXRlLXBhY2thZ2VzXFJFQURNRS50eHQKLSAgRGVzY3JpcHRpb249U2l0ZSBwYWNrYWdlcwotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXGxpYlx4bWxcKi5weQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTGliXHhtbAotICBEZXNjcmlwdGlvbj1YTUwgc3VwcG9ydCBwYWNrYWdlcwotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cbGliXHhtbFxkb21cKi5weQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTGliXHhtbFxkb20KLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXGxpYlx4bWxccGFyc2Vyc1wqLnB5Ci0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxMaWJceG1sXHBhcnNlcnMKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXGxpYlx4bWxcc2F4XCoucHkKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXExpYlx4bWxcc2F4Ci0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUMgSW5jbHVkZSBmaWxlcwotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXGluY2x1ZGVcKi5oCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxpbmNsdWRlCi0gIERlc2NyaXB0aW9uPUhlYWRlciBmaWxlcwotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5ccGNccHljb25maWcuaAotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcaW5jbHVkZVxweWNvbmZpZy5oCi0gIERlc2NyaXB0aW9uPUhlYWRlciBmaWxlcyAocHljb25maWcuaCkKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9TWljcm9zb2Z0IEMgcnVudGltZSBsaWJyYXJpZXMKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0lX1NZU18lXE1TVkNJUlQuRExMCi0gIERlc3RpbmF0aW9uPSVETExERVNUJVxNU1ZDSVJULkRMTAotICBEZXNjcmlwdGlvbj1WaXN1YWwgQysrIFJ1bnRpbWUgRExMcwotICBGbGFncz0wMDAwMDExMDAwMDEwMDExCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9JV9TWVNfJVxNU1ZDUlQuRExMCi0gIERlc3RpbmF0aW9uPSVETExERVNUJVxNU1ZDUlQuRExMCi0gIERlc2NyaXB0aW9uPVZpc3VhbCBDKysgUnVudGltZSBETExzCi0gIEZsYWdzPTAwMDAwMTEwMDAwMTAwMTEKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1COiBUY2wvVGsgKFRraW50ZXIsIElETEUsIHB5ZG9jKQotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9Q09NUE9ORU5UUwotICBWYWx1ZT1CCi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PVRjbC9UawotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXC4uXCVfdGNsZGlyXyVcYmluXCouZGxsCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxETExzCi0gIERlc2NyaXB0aW9uPVRjbC9UayBiaW5hcmllcyBhbmQgbGlicmFyaWVzCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlwuLlwlX3RjbGRpcl8lXGxpYlwqLioKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXHRjbAotICBEZXNjcmlwdGlvbj1UY2wvVGsgYmluYXJpZXMgYW5kIGxpYnJhcmllcwotICBGbGFncz0wMDAwMDAwMTAwMDAwMDEwCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1JRExFCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cTGliXGlkbGVsaWJcKi5weQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTGliXGlkbGVsaWIKLSAgRGVzY3JpcHRpb249SW50ZWdyYXRlZCBEZXZlTG9wbWVudCBFbnZpcm9ubWVudCBmb3IgUHl0aG9uCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxMaWJcaWRsZWxpYlwqLnR4dAotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTGliXGlkbGVsaWIKLSAgRGVzY3JpcHRpb249SW50ZWdyYXRlZCBEZXZlTG9wbWVudCBFbnZpcm9ubWVudCBmb3IgUHl0aG9uCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxMaWJcaWRsZWxpYlwqLmRlZgotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTGliXGlkbGVsaWIKLSAgRGVzY3JpcHRpb249SW50ZWdyYXRlZCBEZXZlTG9wbWVudCBFbnZpcm9ubWVudCBmb3IgUHl0aG9uCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxMaWJcaWRsZWxpYlxJY29uc1wqCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxMaWJcaWRsZWxpYlxJY29ucwotICBEZXNjcmlwdGlvbj1JbnRlZ3JhdGVkIERldmVMb3BtZW50IEVudmlyb25tZW50IGZvciBQeXRob24KLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXFRvb2xzXHNjcmlwdHNcaWRsZQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTGliXGlkbGVsaWJcaWRsZS5weXcKLSAgRGVzY3JpcHRpb249SURMRSBib290c3RyYXAgc2NyaXB0Ci0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PVdpbmRvd3MgcHlkb2MgZHJpdmVyCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cdG9vbHNcc2NyaXB0c1wqLnB5dwotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcVG9vbHNcU2NyaXB0cwotICBEZXNjcmlwdGlvbj1XaW5kb3dzIHB5ZG9jIGRyaXZlcgotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9QzogZG9jcwotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9Q09NUE9ORU5UUwotICBWYWx1ZT1DCi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9JV9ET0NfJVwqLioKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXERvYwotICBEZXNjcmlwdGlvbj1QeXRob24gRG9jdW1lbnRhdGlvbiAoSFRNTCkKLSAgRmxhZ3M9MDAwMDAwMDEwMDAwMDAxMAotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUQ6IHRvb2xzCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1DT01QT05FTlRTCi0gIFZhbHVlPUQKLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlx0b29sc1xzY3JpcHRzXCoucHkKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXFRvb2xzXFNjcmlwdHMKLSAgRGVzY3JpcHRpb249VXRpbGl0eSBTY3JpcHRzCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlx0b29sc1xzY3JpcHRzXCouZG9jCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxUb29sc1xTY3JpcHRzCi0gIERlc2NyaXB0aW9uPVV0aWxpdHkgU2NyaXB0cwotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cdG9vbHNcc2NyaXB0c1xyZWFkbWUKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXFRvb2xzXFNjcmlwdHNcUkVBRE1FLnR4dAotICBEZXNjcmlwdGlvbj1VdGlsaXR5IFNjcmlwdHMKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlx0b29sc1x3ZWJjaGVja2VyXCoucHkKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXFRvb2xzXHdlYmNoZWNrZXIKLSAgRGVzY3JpcHRpb249V2ViIGNoZWNrZXIgdG9vbAotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cdG9vbHNcd2ViY2hlY2tlclxyZWFkbWUKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXFRvb2xzXHdlYmNoZWNrZXJcUkVBRE1FLnR4dAotICBEZXNjcmlwdGlvbj1XZWIgY2hlY2tlciB0b29sCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cdG9vbHNcdmVyc2lvbmNoZWNrXCoucHkKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXFRvb2xzXHZlcnNpb25jaGVjawotICBEZXNjcmlwdGlvbj1WZXJzaW9uIGNoZWNrZXIgdG9vbAotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cdG9vbHNcdmVyc2lvbmNoZWNrXHJlYWRtZQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcVG9vbHNcdmVyc2lvbmNoZWNrXFJFQURNRS50eHQKLSAgRGVzY3JpcHRpb249VmVyc2lvbiBjaGVja2VyIHRvb2wKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlx0b29sc1xweW5jaGVcKi5weQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcVG9vbHNccHluY2hlCi0gIERlc2NyaXB0aW9uPXB5bmNoZSBjb2xvciBlZGl0b3IKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXHRvb2xzXHB5bmNoZVwqLnR4dAotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcVG9vbHNccHluY2hlCi0gIERlc2NyaXB0aW9uPXB5bmNoZSBjb2xvciBlZGl0b3IKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXHRvb2xzXHB5bmNoZVx4XCoudHh0Ci0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxUb29sc1xweW5jaGVcWAotICBEZXNjcmlwdGlvbj1weW5jaGUgY29sb3IgZWRpdG9yIC0gWCBmaWxlcwotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cdG9vbHNccHluY2hlXHJlYWRtZQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcVG9vbHNccHluY2hlXFJFQURNRS50eHQKLSAgRGVzY3JpcHRpb249cHluY2hlIGNvbG9yIGVkaXRvciAtIFJFQURNRQotICBGbGFncz0wMDAwMDAwMTAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cdG9vbHNccHluY2hlXHB5bmNoZQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcVG9vbHNccHluY2hlXHB5bmNoZS5weQotICBEZXNjcmlwdGlvbj1weW5jaGUgY29sb3IgZWRpdG9yIC0gbWFpbgotICBGbGFncz0wMDAwMDAwMTAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cdG9vbHNccHluY2hlXHB5bmNoZS5weXcKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXFRvb2xzXHB5bmNoZVxweW5jaGUucHl3Ci0gIERlc2NyaXB0aW9uPXB5bmNoZSBjb2xvciBlZGl0b3IgLSBub2NvbnNvbGUgbWFpbgotICBGbGFncz0wMDAwMDAwMTAwMDAwMDEwCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXHRvb2xzXGkxOG5cKi5weQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcVG9vbHNcaTE4bgotICBEZXNjcmlwdGlvbj1JbnRlcm5hdGlvbmFsaXphdGlvbiBoZWxwZXJzCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1FOiB0ZXN0IHN1aXRlCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1DT01QT05FTlRTCi0gIFZhbHVlPUUKLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxsaWJcdGVzdFxhdWRpb3Rlc3QuYXUKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXExpYlx0ZXN0XGF1ZGlvdGVzdC5hdQotICBEZXNjcmlwdGlvbj1QeXRob24gVGVzdCBmaWxlcwotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cbGliXHRlc3RcKi51dWUKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXExpYlx0ZXN0Ci0gIERlc2NyaXB0aW9uPVB5dGhvbiBUZXN0IGZpbGVzCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxsaWJcdGVzdFwqLnB5Ci0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxMaWJcdGVzdAotICBEZXNjcmlwdGlvbj1QeXRob24gVGVzdCBmaWxlcwotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cbGliXHRlc3RcKi54bWwKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXExpYlx0ZXN0Ci0gIERlc2NyaXB0aW9uPVB5dGhvbiBUZXN0IGZpbGVzCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxsaWJcdGVzdFwqLm91dAotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTGliXHRlc3QKLSAgRGVzY3JpcHRpb249UHl0aG9uIFRlc3QgZmlsZXMKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXGxpYlx0ZXN0XCouYnoyCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxMaWJcdGVzdAotICBEZXNjcmlwdGlvbj1QeXRob24gVGVzdCBmaWxlcwotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cbGliXHRlc3RcKi50YXIKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXExpYlx0ZXN0Ci0gIERlc2NyaXB0aW9uPVB5dGhvbiBUZXN0IGZpbGVzCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxsaWJcdGVzdFwqLmd6Ci0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxMaWJcdGVzdAotICBEZXNjcmlwdGlvbj1QeXRob24gVGVzdCBmaWxlcwotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cbGliXHRlc3RcKi50eHQKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXExpYlx0ZXN0Ci0gIERlc2NyaXB0aW9uPVB5dGhvbiBUZXN0IGZpbGVzCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cbGliXHRlc3Rcb3V0cHV0XCouKgotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTGliXHRlc3Rcb3V0cHV0Ci0gIERlc2NyaXB0aW9uPVB5dGhvbiBUZXN0IG91dHB1dCBmaWxlcwotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9RE9ORSB3aXRoIGZpbGUgY29weWluZy4KLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9VGhlIHJlc3QgaXMgcmVnaXN0cnkgYW5kIFN0YXJ0IE1lbnUgZmlkZGxpbmcuCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9Q09NUE9ORU5UUwotICBWYWx1ZT1BCi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1UQVNLUwotICBWYWx1ZT1BCi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PVJlZ2lzdGVyIGZpbGUgZXh0ZW5zaW9ucy4gIEFzIHVzdWFsLCBBZG1pbiBwcml2cyBnZXQgaW4gdGhlIHdheSwgYnV0IHdpdGggYSB0d2lzdDoKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9WW91IGRvbid0IG5lZWQgYWRtaW4gcHJpdnMgdG8gd3JpdGUgdG8gSEtFWV9DTEFTU0VTX1JPT1QgKmV4Y2VwdCogdW5kZXIgV2luMksuCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PU9uIFdpbjJLLCBhIHVzZXIgd2l0aG91dCBBZG1pbiBwcml2cyBoYXMgdG8gcmVnaXN0ZXIgZXh0ZW5zaW9ucyB1bmRlciBIS0NVXFNvZnR3YXJlXENMQVNTRVMgaW5zdGVhZC4KLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9QnV0IHdoaWxlIHlvdSBjYW4gKmRvKiB0aGF0IHVuZGVyIG90aGVyIGZsYXZvcnMgb2YgV2luZG93cyB0b28sIGl0IGhhcyBubyB1c2VmdWwgZWZmZWN0IGV4Y2VwdCBpbiBXaW4ySy4KLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPVVTRV9IS0NSCi0gIFZhbHVlPTEKLWVuZAotaXRlbTogQ2hlY2sgQ29uZmlndXJhdGlvbgotICBGbGFncz0xMTExMDAxMAotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9RE9BRE1JTgotICBWYWx1ZT0wCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1VU0VfSEtDUgotICBWYWx1ZT0wCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPVVTRV9IS0NSCi0gIFZhbHVlPTEKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9RmlsZSB0eXBlcy4KLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVB5dGhvbi5GaWxlCi0gIE5ldyBWYWx1ZT1QeXRob24gRmlsZQotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9UHl0aG9uLkZpbGVcc2hlbGxcb3Blblxjb21tYW5kCi0gIE5ldyBWYWx1ZT0lTUFJTkRJUiVccHl0aG9uLmV4ZSAiJSUxIiAlJSoKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVB5dGhvbi5GaWxlXERlZmF1bHRJY29uCi0gIE5ldyBWYWx1ZT0lTUFJTkRJUiVcUHkuaWNvCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9UHl0aG9uLk5vQ29uRmlsZQotICBOZXcgVmFsdWU9UHl0aG9uIEZpbGUgKG5vIGNvbnNvbGUpCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1QeXRob24uTm9Db25GaWxlXHNoZWxsXG9wZW5cY29tbWFuZAotICBOZXcgVmFsdWU9JU1BSU5ESVIlXHB5dGhvbncuZXhlICIlJTEiICUlKgotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9UHl0aG9uLk5vQ29uRmlsZVxEZWZhdWx0SWNvbgotICBOZXcgVmFsdWU9JU1BSU5ESVIlXFB5LmljbwotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVB5dGhvbi5Db21waWxlZEZpbGUKLSAgTmV3IFZhbHVlPUNvbXBpbGVkIFB5dGhvbiBGaWxlCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1QeXRob24uQ29tcGlsZWRGaWxlXHNoZWxsXG9wZW5cY29tbWFuZAotICBOZXcgVmFsdWU9JU1BSU5ESVIlXHB5dGhvbi5leGUgIiUlMSIgJSUqCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1QeXRob24uQ29tcGlsZWRGaWxlXERlZmF1bHRJY29uCi0gIE5ldyBWYWx1ZT0lTUFJTkRJUiVccHljLmljbwotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9RmlsZSBleHRlbnNpb25zLgotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9LnB5Ci0gIE5ldyBWYWx1ZT1QeXRob24uRmlsZQotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9LnB5Ci0gIE5ldyBWYWx1ZT10ZXh0L3BsYWluCi0gIFZhbHVlIE5hbWU9Q29udGVudCBUeXBlCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9LnB5dwotICBOZXcgVmFsdWU9UHl0aG9uLk5vQ29uRmlsZQotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9LnB5dwotICBOZXcgVmFsdWU9dGV4dC9wbGFpbgotICBWYWx1ZSBOYW1lPUNvbnRlbnQgVHlwZQotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PS5weWMKLSAgTmV3IFZhbHVlPVB5dGhvbi5Db21waWxlZEZpbGUKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PS5weW8KLSAgTmV3IFZhbHVlPVB5dGhvbi5Db21waWxlZEZpbGUKLWVuZAotaXRlbTogRWxzZSBTdGF0ZW1lbnQKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9RmlsZSB0eXBlcy4KLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXENMQVNTRVNcUHl0aG9uLkZpbGUKLSAgTmV3IFZhbHVlPVB5dGhvbiBGaWxlCi0gIFJvb3Q9MQotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcQ0xBU1NFU1xQeXRob24uRmlsZVxzaGVsbFxvcGVuXGNvbW1hbmQKLSAgTmV3IFZhbHVlPSVNQUlORElSJVxweXRob24uZXhlICIlJTEiICUlKgotICBSb290PTEKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXENMQVNTRVNcUHl0aG9uLkZpbGVcRGVmYXVsdEljb24KLSAgTmV3IFZhbHVlPSVNQUlORElSJVxQeS5pY28KLSAgUm9vdD0xCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcQ0xBU1NFU1xQeXRob24uTm9Db25GaWxlCi0gIE5ldyBWYWx1ZT1QeXRob24gRmlsZSAobm8gY29uc29sZSkKLSAgUm9vdD0xCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxDTEFTU0VTXFB5dGhvbi5Ob0NvbkZpbGVcc2hlbGxcb3Blblxjb21tYW5kCi0gIE5ldyBWYWx1ZT0lTUFJTkRJUiVccHl0aG9udy5leGUgIiUlMSIgJSUqCi0gIFJvb3Q9MQotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcQ0xBU1NFU1xQeXRob24uTm9Db25GaWxlXERlZmF1bHRJY29uCi0gIE5ldyBWYWx1ZT0lTUFJTkRJUiVcUHkuaWNvCi0gIFJvb3Q9MQotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXENMQVNTRVNcUHl0aG9uLkNvbXBpbGVkRmlsZQotICBOZXcgVmFsdWU9Q29tcGlsZWQgUHl0aG9uIEZpbGUKLSAgUm9vdD0xCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxDTEFTU0VTXFB5dGhvbi5Db21waWxlZEZpbGVcc2hlbGxcb3Blblxjb21tYW5kCi0gIE5ldyBWYWx1ZT0lTUFJTkRJUiVccHl0aG9uLmV4ZSAiJSUxIiAlJSoKLSAgUm9vdD0xCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxDTEFTU0VTXFB5dGhvbi5Db21waWxlZEZpbGVcRGVmYXVsdEljb24KLSAgTmV3IFZhbHVlPSVNQUlORElSJVxweWMuaWNvCi0gIFJvb3Q9MQotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9RmlsZSBleHRlbnNpb25zLgotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcQ0xBU1NFU1wucHkKLSAgTmV3IFZhbHVlPVB5dGhvbi5GaWxlCi0gIFJvb3Q9MQotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcQ0xBU1NFU1wucHkKLSAgTmV3IFZhbHVlPXRleHQvcGxhaW4KLSAgVmFsdWUgTmFtZT1Db250ZW50IFR5cGUKLSAgUm9vdD0xCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcQ0xBU1NFU1wucHl3Ci0gIE5ldyBWYWx1ZT1QeXRob24uTm9Db25GaWxlCi0gIFJvb3Q9MQotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcQ0xBU1NFU1wucHl3Ci0gIE5ldyBWYWx1ZT10ZXh0L3BsYWluCi0gIFZhbHVlIE5hbWU9Q29udGVudCBUeXBlCi0gIFJvb3Q9MQotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXENMQVNTRVNcLnB5YwotICBOZXcgVmFsdWU9UHl0aG9uLkNvbXBpbGVkRmlsZQotICBSb290PTEKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXENMQVNTRVNcLnB5bwotICBOZXcgVmFsdWU9UHl0aG9uLkNvbXBpbGVkRmlsZQotICBSb290PTEKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1JZiB3ZSdyZSBpbnN0YWxsaW5nIElETEUsIGFsc28gc2V0IGFuIEVkaXQgY29udGV4dCBtZW51IGFjdGlvbiB0byB1c2UgSURMRSwgZm9yIC5weSBhbmQgLnB5dyBmaWxlcy4KLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPUNPTVBPTkVOVFMKLSAgVmFsdWU9QgotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9VVNFX0hLQ1IKLSAgVmFsdWU9MQotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9UHl0aG9uLk5vQ29uRmlsZVxzaGVsbFxFZGl0IHdpdGggSURMRVxjb21tYW5kCi0gIE5ldyBWYWx1ZT0lTUFJTkRJUiVccHl0aG9udy5leGUgJU1BSU5ESVIlXExpYlxpZGxlbGliXGlkbGUucHl3IC1uIC1lICIlJTEiCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1QeXRob24uRmlsZVxzaGVsbFxFZGl0IHdpdGggSURMRVxjb21tYW5kCi0gIE5ldyBWYWx1ZT0lTUFJTkRJUiVccHl0aG9udy5leGUgJU1BSU5ESVIlXExpYlxpZGxlbGliXGlkbGUucHl3IC1uIC1lICIlJTEiCi1lbmQKLWl0ZW06IEVsc2UgU3RhdGVtZW50Ci1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxDTEFTU0VTXFB5dGhvbi5Ob0NvbkZpbGVcc2hlbGxcRWRpdCB3aXRoIElETEVcY29tbWFuZAotICBOZXcgVmFsdWU9JU1BSU5ESVIlXHB5dGhvbncuZXhlICVNQUlORElSJVxMaWJcaWRsZWxpYlxpZGxlLnB5dyAtbiAtZSAiJSUxIgotICBSb290PTEKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXENMQVNTRVNcUHl0aG9uLkZpbGVcc2hlbGxcRWRpdCB3aXRoIElETEVcY29tbWFuZAotICBOZXcgVmFsdWU9JU1BSU5ESVIlXHB5dGhvbncuZXhlICVNQUlORElSJVxMaWJcaWRsZWxpYlxpZGxlLnB5dyAtbiAtZSAiJSUxIgotICBSb290PTEKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PVJlZ2lzdGVyIFB5dGhvbiBwYXRocy4KLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9V3JpdGUgdG8gSEtMTSBmb3IgYWRtaW4sIGVsc2UgSEtDVS4gIEtlZXAgdGhlc2UgYmxvY2tzIG90aGVyd2lzZSBpZGVudGljYWwhCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1ET0FETUlOCi0gIFZhbHVlPTEKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXFB5dGhvblxQeXRob25Db3JlXEN1cnJlbnRWZXJzaW9uCi0gIFJvb3Q9MTMwCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxQeXRob25cUHl0aG9uQ29yZVwlUFlfVkVSU0lPTiVcSW5zdGFsbFBhdGgKLSAgTmV3IFZhbHVlPSVNQUlORElSJQotICBSb290PTIKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXFB5dGhvblxQeXRob25Db3JlXCVQWV9WRVJTSU9OJVxJbnN0YWxsUGF0aFxJbnN0YWxsR3JvdXAKLSAgTmV3IFZhbHVlPSVDR1JPVVBfU0FWRSUKLSAgTmV3IFZhbHVlPQotICBSb290PTIKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXFB5dGhvblxQeXRob25Db3JlXCVQWV9WRVJTSU9OJVxQeXRob25QYXRoCi0gIE5ldyBWYWx1ZT0lTUFJTkRJUiVcTGliOyVNQUlORElSJVxETExzCi0gIE5ldyBWYWx1ZT0KLSAgUm9vdD0yCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxQeXRob25cUHl0aG9uQ29yZVwlUFlfVkVSU0lPTiVcTW9kdWxlcwotICBSb290PTIKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXE1pY3Jvc29mdFxXaW5kb3dzXEN1cnJlbnRWZXJzaW9uXEFwcCBQYXRoc1xQeXRob24uZXhlCi0gIE5ldyBWYWx1ZT0lTUFJTkRJUiVcUHl0aG9uLmV4ZQotICBSb290PTIKLWVuZAotaXRlbTogRWxzZSBTdGF0ZW1lbnQKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXFB5dGhvblxQeXRob25Db3JlXEN1cnJlbnRWZXJzaW9uCi0gIFJvb3Q9MTI5Ci1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxQeXRob25cUHl0aG9uQ29yZVwlUFlfVkVSU0lPTiVcSW5zdGFsbFBhdGgKLSAgTmV3IFZhbHVlPSVNQUlORElSJQotICBSb290PTEKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXFB5dGhvblxQeXRob25Db3JlXCVQWV9WRVJTSU9OJVxJbnN0YWxsUGF0aFxJbnN0YWxsR3JvdXAKLSAgTmV3IFZhbHVlPSVDR1JPVVBfU0FWRSUKLSAgTmV3IFZhbHVlPQotICBSb290PTEKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXFB5dGhvblxQeXRob25Db3JlXCVQWV9WRVJTSU9OJVxQeXRob25QYXRoCi0gIE5ldyBWYWx1ZT0lTUFJTkRJUiVcTGliOyVNQUlORElSJVxETExzCi0gIE5ldyBWYWx1ZT0KLSAgUm9vdD0xCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxQeXRob25cUHl0aG9uQ29yZVwlUFlfVkVSU0lPTiVcTW9kdWxlcwotICBSb290PTEKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXE1pY3Jvc29mdFxXaW5kb3dzXEN1cnJlbnRWZXJzaW9uXEFwcCBQYXRoc1xQeXRob24uZXhlCi0gIE5ldyBWYWx1ZT0lTUFJTkRJUiVcUHl0aG9uLmV4ZQotICBSb290PTEKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9UmVnaXN0cnkgZmlkZGxpbmcgZm9yIGRvY3MuCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PVdyaXRlIHRvIEhLTE0gZm9yIGFkbWluLCBlbHNlIEhLQ1UuICBLZWVwIHRoZXNlIGJsb2NrcyBvdGhlcndpc2UgaWRlbnRpY2FsIQotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9Q09NUE9ORU5UUwotICBWYWx1ZT1DCi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1ET0FETUlOCi0gIFZhbHVlPTEKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXFB5dGhvblxQeXRob25Db3JlXCVQWV9WRVJTSU9OJVxIZWxwXE1haW4gUHl0aG9uIERvY3VtZW50YXRpb24KLSAgTmV3IFZhbHVlPSVNQUlORElSJVxEb2NcaW5kZXguaHRtbAotICBSb290PTIKLWVuZAotaXRlbTogRWxzZSBTdGF0ZW1lbnQKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXFB5dGhvblxQeXRob25Db3JlXCVQWV9WRVJTSU9OJVxIZWxwXE1haW4gUHl0aG9uIERvY3VtZW50YXRpb24KLSAgTmV3IFZhbHVlPSVNQUlORElSJVxEb2NcaW5kZXguaHRtbAotICBSb290PTEKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9U2V0IHRoZSBhcHAgcHVibGlzaGVyIGFuZCBVUkwgZW50cmllcyBmb3IgV2luMksgYWRkL3JlbW92ZS4KLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9SXQgZG9lc24ndCBodXJ0IG9uIG90aGVyIHN5c3RlbXMuCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUFzIHVzdWFsLCB3cml0ZSB0byBIS0xNIG9yIEhLQ1UgZGVwZW5kaW5nIG9uIEFkbWluIHByaXZzLgotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1DQVVUSU9OOiAgSWYgeW91IHNldCB0aGlzIGluZm8gb24gdGhlICJXaW5kb3dzIDIwMDAiIHBhZ2UgKHN0ZXAgNikgb2YgdGhlCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUluc3RhbGxhdGlvbiBFeHBlcnQsIGl0IG9ubHkgc2hvd3MgdXAgaW4gdGhlICJJZiIgYmxvY2sgYmVsb3cuICBLZWVwIGluIHN5bmNoIQotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9RE9BRE1JTgotICBWYWx1ZT0xCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxNaWNyb3NvZnRcV2luZG93c1xDdXJyZW50VmVyc2lvblxVbmluc3RhbGxcJUFQUFRJVExFJQotICBOZXcgVmFsdWU9aHR0cDovL3d3dy5weXRob24ub3JnLwotICBWYWx1ZSBOYW1lPUhlbHBMaW5rCi0gIFJvb3Q9MgotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcTWljcm9zb2Z0XFdpbmRvd3NcQ3VycmVudFZlcnNpb25cVW5pbnN0YWxsXCVBUFBUSVRMRSUKLSAgTmV3IFZhbHVlPVB5dGhvbkxhYnMgYXQgWm9wZSBDb3Jwb3JhdGlvbgotICBWYWx1ZSBOYW1lPVB1Ymxpc2hlcgotICBSb290PTIKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXE1pY3Jvc29mdFxXaW5kb3dzXEN1cnJlbnRWZXJzaW9uXFVuaW5zdGFsbFwlQVBQVElUTEUlCi0gIE5ldyBWYWx1ZT1odHRwOi8vd3d3LnB5dGhvbi5vcmcvCi0gIFZhbHVlIE5hbWU9VVJMSW5mb0Fib3V0Ci0gIFJvb3Q9MgotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcTWljcm9zb2Z0XFdpbmRvd3NcQ3VycmVudFZlcnNpb25cVW5pbnN0YWxsXCVBUFBUSVRMRSUKLSAgTmV3IFZhbHVlPSVQWVZFUl9TVFJJTkclCi0gIFZhbHVlIE5hbWU9RGlzcGxheVZlcnNpb24KLSAgUm9vdD0yCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxNaWNyb3NvZnRcV2luZG93c1xDdXJyZW50VmVyc2lvblxVbmluc3RhbGxcJUFQUFRJVExFJQotICBOZXcgVmFsdWU9JU1BSU5ESVIlXHB5LmljbywtMAotICBWYWx1ZSBOYW1lPURpc3BsYXlJY29uCi0gIFJvb3Q9MgotZW5kCi1pdGVtOiBFbHNlIFN0YXRlbWVudAotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcTWljcm9zb2Z0XFdpbmRvd3NcQ3VycmVudFZlcnNpb25cVW5pbnN0YWxsXCVBUFBUSVRMRSUKLSAgTmV3IFZhbHVlPWh0dHA6Ly93d3cucHl0aG9uLm9yZy8KLSAgVmFsdWUgTmFtZT1IZWxwTGluawotICBSb290PTEKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXE1pY3Jvc29mdFxXaW5kb3dzXEN1cnJlbnRWZXJzaW9uXFVuaW5zdGFsbFwlQVBQVElUTEUlCi0gIE5ldyBWYWx1ZT1QeXRob25MYWJzIGF0IFpvcGUgQ29ycG9yYXRpb24KLSAgVmFsdWUgTmFtZT1QdWJsaXNoZXIKLSAgUm9vdD0xCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxNaWNyb3NvZnRcV2luZG93c1xDdXJyZW50VmVyc2lvblxVbmluc3RhbGxcJUFQUFRJVExFJQotICBOZXcgVmFsdWU9aHR0cDovL3d3dy5weXRob24ub3JnLwotICBWYWx1ZSBOYW1lPVVSTEluZm9BYm91dAotICBSb290PTEKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXE1pY3Jvc29mdFxXaW5kb3dzXEN1cnJlbnRWZXJzaW9uXFVuaW5zdGFsbFwlQVBQVElUTEUlCi0gIE5ldyBWYWx1ZT0lUFlWRVJfU1RSSU5HJQotICBWYWx1ZSBOYW1lPURpc3BsYXlWZXJzaW9uCi0gIFJvb3Q9MQotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcTWljcm9zb2Z0XFdpbmRvd3NcQ3VycmVudFZlcnNpb25cVW5pbnN0YWxsXCVBUFBUSVRMRSUKLSAgTmV3IFZhbHVlPSVNQUlORElSJVxweS5pY28sLTAKLSAgVmFsdWUgTmFtZT1EaXNwbGF5SWNvbgotICBSb290PTEKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1Qb3B1bGF0ZSBTdGFydCBNZW51IGdyb3VwCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1UQVNLUwotICBWYWx1ZT1CCi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PVNob3J0Y3V0IHRvIGluc3RhbGxlciBubyBtYXR0ZXIgd2hhdC4KLWVuZAotaXRlbTogQ3JlYXRlIFNob3J0Y3V0Ci0gIFNvdXJjZT0lTUFJTkRJUiVcdW53aXNlLmV4ZQotICBEZXN0aW5hdGlvbj0lR1JPVVAlXFVuaW5zdGFsbCBQeXRob24ubG5rCi0gIFdvcmtpbmcgRGlyZWN0b3J5PSVNQUlORElSJQotICBLZXkgVHlwZT0xNTM2Ci0gIEZsYWdzPTAwMDAwMDAxCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9Q09NUE9ORU5UUwotICBWYWx1ZT1BCi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IENyZWF0ZSBTaG9ydGN1dAotICBTb3VyY2U9JU1BSU5ESVIlXHB5dGhvbi5leGUKLSAgRGVzdGluYXRpb249JUdST1VQJVxQeXRob24gKGNvbW1hbmQgbGluZSkubG5rCi0gIFdvcmtpbmcgRGlyZWN0b3J5PSVNQUlORElSJQotICBJY29uIFBhdGhuYW1lPSVNQUlORElSJVxweWNvbi5pY28KLSAgS2V5IFR5cGU9MTUzNgotICBGbGFncz0wMDAwMDAwMQotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1DT01QT05FTlRTCi0gIFZhbHVlPUIKLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogQ3JlYXRlIFNob3J0Y3V0Ci0gIFNvdXJjZT0lTUFJTkRJUiVccHl0aG9udy5leGUKLSAgRGVzdGluYXRpb249JUdST1VQJVxJRExFIChQeXRob24gR1VJKS5sbmsKLSAgQ29tbWFuZCBPcHRpb25zPSIlTUFJTkRJUiVcTGliXGlkbGVsaWJcaWRsZS5weXciCi0gIFdvcmtpbmcgRGlyZWN0b3J5PSVNQUlORElSJQotICBLZXkgVHlwZT0xNTM2Ci0gIEZsYWdzPTAwMDAwMDAxCi1lbmQKLWl0ZW06IENyZWF0ZSBTaG9ydGN1dAotICBTb3VyY2U9JU1BSU5ESVIlXHB5dGhvbncuZXhlCi0gIERlc3RpbmF0aW9uPSVHUk9VUCVcTW9kdWxlIERvY3MubG5rCi0gIENvbW1hbmQgT3B0aW9ucz0iJU1BSU5ESVIlXFRvb2xzXFNjcmlwdHNccHlkb2NndWkucHl3IgotICBXb3JraW5nIERpcmVjdG9yeT0lTUFJTkRJUiUKLSAgS2V5IFR5cGU9MTUzNgotICBGbGFncz0wMDAwMDAwMQotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1DT01QT05FTlRTCi0gIFZhbHVlPUMKLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogQ3JlYXRlIFNob3J0Y3V0Ci0gIFNvdXJjZT0lTUFJTkRJUiVcRG9jXGluZGV4Lmh0bWwKLSAgRGVzdGluYXRpb249JUdST1VQJVxQeXRob24gTWFudWFscy5sbmsKLSAgV29ya2luZyBEaXJlY3Rvcnk9JU1BSU5ESVIlCi0gIEtleSBUeXBlPTE1MzYKLSAgRmxhZ3M9MDAwMDAwMDEKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9SSBkb24ndCB0aGluayB3ZSBuZWVkIHRoaXMsIGJ1dCBoYXZlIGFsd2F5cyBkb25lIGl0LgotZW5kCi1pdGVtOiBTZWxmLVJlZ2lzdGVyIE9DWHMvRExMcwotICBEZXNjcmlwdGlvbj1VcGRhdGluZyBTeXN0ZW0gQ29uZmlndXJhdGlvbiwgUGxlYXNlIFdhaXQuLi4KLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLXJlbWFya2VkIGl0ZW06IFJlbWFyawotICBUZXh0PURvbid0IGVuYWJsZSAiRGVsZXRlIGluLXVzZSBmaWxlcyIuICBIZXJlJ3Mgd2hhdCBoYXBwZW5zOgotZW5kCi1yZW1hcmtlZCBpdGVtOiBSZW1hcmsKLSAgVGV4dD1JbnN0YWxsIFB5dGhvbjsgdW5pbnN0YWxsIFB5dGhvbjsgaW5zdGFsbCBQeXRob24gYWdhaW4uICBSZWJvb3QgdGhlIG1hY2hpbmUuCi1lbmQKLXJlbWFya2VkIGl0ZW06IFJlbWFyawotICBUZXh0PU5vdyBVTldJU0UuRVhFIGlzIG1pc3NpbmcuICBJIHRoaW5rIHRoaXMgaXMgYSBXaXNlIGJ1ZywgYnV0IHNvIGl0IGdvZXMuCi1lbmQKLXJlbWFya2VkIGl0ZW06IEFkZCBUZXh0IHRvIElOU1RBTEwuTE9HCi0gIFRleHQ9RGVsZXRlIGluLXVzZSBmaWxlczogT24KLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFdpemFyZCBCbG9jawotICBEaXJlY3Rpb24gVmFyaWFibGU9RElSRUNUSU9OCi0gIERpc3BsYXkgVmFyaWFibGU9RElTUExBWQotICBCaXRtYXAgUGF0aG5hbWU9LlxpbnN0YWxsZXIuYm1wCi0gIFggUG9zaXRpb249OQotICBZIFBvc2l0aW9uPTEwCi0gIEZpbGxlciBDb2xvcj0xMTE3Mzc1OQotICBGbGFncz0wMDAwMDAxMQotZW5kCi1pdGVtOiBDdXN0b20gRGlhbG9nIFNldAotICBOYW1lPUZpbmlzaGVkCi0gIERpc3BsYXkgVmFyaWFibGU9RElTUExBWQotICBpdGVtOiBEaWFsb2cKLSAgICBUaXRsZT0lQVBQVElUTEUlIEluc3RhbGxhdGlvbgotICAgIFRpdGxlIEZyZW5jaD1JbnN0YWxsYXRpb24gZGUgJUFQUFRJVExFJQotICAgIFRpdGxlIEdlcm1hbj1JbnN0YWxsYXRpb24gdm9uICVBUFBUSVRMRSUKLSAgICBUaXRsZSBTcGFuaXNoPUluc3RhbGFjafNuIGRlICVBUFBUSVRMRSUKLSAgICBUaXRsZSBJdGFsaWFuPUluc3RhbGxhemlvbmUgZGkgJUFQUFRJVExFJQotICAgIFdpZHRoPTMzOQotICAgIEhlaWdodD0yODAKLSAgICBGb250IE5hbWU9SGVsdgotICAgIEZvbnQgU2l6ZT04Ci0gICAgaXRlbTogUHVzaCBCdXR0b24KLSAgICAgIFJlY3RhbmdsZT0xODggMjM0IDI0NCAyNTMKLSAgICAgIFZhcmlhYmxlPURJUkVDVElPTgotICAgICAgVmFsdWU9TgotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAxCi0gICAgICBUZXh0PSZGaW5pc2gKLSAgICAgIFRleHQgRnJlbmNoPSZGaW4KLSAgICAgIFRleHQgR2VybWFuPSZXZWl0ZXIKLSAgICAgIFRleHQgU3BhbmlzaD0mVGVybWluYXIKLSAgICAgIFRleHQgSXRhbGlhbj0mRmluZQotICAgIGVuZAotICAgIGl0ZW06IFB1c2ggQnV0dG9uCi0gICAgICBSZWN0YW5nbGU9MjY0IDIzNCAzMjAgMjUzCi0gICAgICBWYXJpYWJsZT1ESVNBQkxFRAotICAgICAgVmFsdWU9IQotICAgICAgQWN0aW9uPTMKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMAotICAgICAgVGV4dD0mQ2FuY2VsCi0gICAgICBUZXh0IEZyZW5jaD0mQW5udWxlcgotICAgICAgVGV4dCBHZXJtYW49JkFiYnJlY2hlbgotICAgICAgVGV4dCBTcGFuaXNoPSZDYW5jZWxhcgotICAgICAgVGV4dCBJdGFsaWFuPSZBbm51bGxhCi0gICAgZW5kCi0gICAgaXRlbTogU3RhdGljCi0gICAgICBSZWN0YW5nbGU9MTA4IDEwIDMyMyA0OAotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0gICAgICBGbGFncz0wMDAwMDAwMDAwMDAwMDAxCi0gICAgICBOYW1lPVRpbWVzIE5ldyBSb21hbgotICAgICAgRm9udCBTdHlsZT0tMjQgMCAwIDAgNzAwIDI1NSAwIDAgMCAzIDIgMSAxOAotICAgICAgVGV4dD1JbnN0YWxsYXRpb24gQ29tcGxldGVkIQotICAgICAgVGV4dCBGcmVuY2g9SW5zdGFsbGF0aW9uIHRlcm1pbullICEKLSAgICAgIFRleHQgR2VybWFuPURpZSBJbnN0YWxsYXRpb24gaXN0IGFiZ2VzY2hsb3NzZW4hCi0gICAgICBUZXh0IFNwYW5pc2g9oUluc3RhbGFjafNuIHRlcm1pbmFkYSEKLSAgICAgIFRleHQgSXRhbGlhbj1JbnN0YWxsYXppb25lIGNvbXBsZXRhdGEhCi0gICAgZW5kCi0gICAgaXRlbTogU3RhdGljCi0gICAgICBSZWN0YW5nbGU9MTA4IDQ0IDMyMCA4MgotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0gICAgICBUZXh0PSVBUFBUSVRMRSUgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGluc3RhbGxlZC4KLSAgICAgIFRleHQ9Ci0gICAgICBUZXh0PVByZXNzIHRoZSBGaW5pc2ggYnV0dG9uIHRvIGV4aXQgdGhpcyBpbnN0YWxsYXRpb24uCi0gICAgICBUZXh0IEZyZW5jaD0lQVBQVElUTEUlIGVzdCBtYWludGVuYW50IGluc3RhbGzpLgotICAgICAgVGV4dCBGcmVuY2g9Ci0gICAgICBUZXh0IEZyZW5jaD1DbGlxdWV6IHN1ciBsZSBib3V0b24gRmluIHBvdXIgcXVpdHRlciBsJ2luc3RhbGxhdGlvbi4KLSAgICAgIFRleHQgR2VybWFuPSVBUFBUSVRMRSUgd3VyZGUgZXJmb2xncmVpY2ggaW5zdGFsbGllcnQuCi0gICAgICBUZXh0IEdlcm1hbj0KLSAgICAgIFRleHQgR2VybWFuPUtsaWNrZW4gU2llIGF1ZiAiV2VpdGVyIiwgdW0gZGllIEluc3RhbGxhdGlvbiB6dSBiZWVuZGVuLgotICAgICAgVGV4dCBTcGFuaXNoPSVBUFBUSVRMRSUgc2UgaGEgaW5zdGFsYWRvIGNvbiDpeGl0by4KLSAgICAgIFRleHQgU3BhbmlzaD0KLSAgICAgIFRleHQgU3BhbmlzaD1QcmVzaW9uZSBlbCBib3TzbiBUZXJtaW5hciBwYXJhIHNhbGlyIGRlIGVzdGEgaW5zdGFsYWNp824uCi0gICAgICBUZXh0IEl0YWxpYW49TCdpbnN0YWxsYXppb25lICVBUFBUSVRMRSUg6CBzdGF0YSBwb3J0YXRhIGEgdGVybWluZSBjb24gc3VjY2Vzc28uCi0gICAgICBUZXh0IEl0YWxpYW49Ci0gICAgICBUZXh0IEl0YWxpYW49UHJlbWVyZSBpbCBwdWxzYW50ZSBGaW5lIHBlciB1c2NpcmUgZGFsbCdpbnN0YWxsYXppb25lLgotICAgIGVuZAotICAgIGl0ZW06IFN0YXRpYwotICAgICAgUmVjdGFuZ2xlPTEwIDIyNSAzMjAgMjI2Ci0gICAgICBBY3Rpb249MwotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTExCi0gICAgZW5kCi0gICAgaXRlbTogU3RhdGljCi0gICAgICBSZWN0YW5nbGU9MTA2IDEwNSAzMTIgMjEwCi0gICAgICBFbmFibGVkIENvbG9yPTAwMDAwMDAwMDAwMDAwMDAxMTExMTExMTExMTExMTExCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLSAgICAgIFRleHQ9U3BlY2lhbCBXaW5kb3dzIHRoYW5rcyB0bzoKLSAgICAgIFRleHQ9Ci0gICAgICBUZXh0PVdpc2UgU29sdXRpb25zLCBmb3IgdGhlIHVzZSBvZiBJbnN0YWxsTWFzdGVyIDguMS4KLSAgICAgIFRleHQ9ICAgIGh0dHA6Ly93d3cud2lzZXNvbHV0aW9ucy5jb20vCi0gICAgICBUZXh0PQotICAgICAgVGV4dD0KLSAgICAgIFRleHQ9TGV0dEVycm9yLCBFcmlrIHZhbiBCbG9rbGFuZCwgZm9yIHRoZSBQeXRob24gZm9yIFdpbmRvd3MgZ3JhcGhpYy4KLSAgICAgIFRleHQ9ICAgIGh0dHA6Ly93d3cubGV0dGVycm9yLmNvbS8KLSAgICAgIFRleHQ9Ci0gICAgICBUZXh0PQotICAgICAgVGV4dD1NYXJrIEhhbW1vbmQsIHdpdGhvdXQgd2hvc2UgeWVhcnMgb2YgZnJlZWx5IHNoYXJlZCBXaW5kb3dzIGV4cGVydGlzZSwgUHl0aG9uIGZvciBXaW5kb3dzIHdvdWxkIHN0aWxsIGJlIFB5dGhvbiBmb3IgRE9TLgotICAgIGVuZAotICAgIGl0ZW06IFN0YXRpYwotICAgICAgUmVjdGFuZ2xlPTEwNiA5NSAzMTIgOTYKLSAgICAgIEFjdGlvbj0zCi0gICAgICBFbmFibGVkIENvbG9yPTAwMDAwMDAwMDAwMDAwMDAxMTExMTExMTExMTExMTExCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMDEKLSAgICBlbmQKLSAgZW5kCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBOZXcgRXZlbnQKLSAgTmFtZT1DYW5jZWwKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9VGhpcyBpbmNsdWRlIHNjcmlwdCBzdXBwb3J0cyBhIHJvbGxiYWNrIHRvIHByZWluc3RhbGxhdGlvbiBzdGF0ZSBpZiB0aGUgdXNlciBjaG9vc2VzIHRvIGNhbmNlbCBiZWZvcmUgdGhlIGluc3RhbGxhdGlvbiBpcyBjb21wbGV0ZS4KLWVuZAotaXRlbTogSW5jbHVkZSBTY3JpcHQKLSAgUGF0aG5hbWU9JV9XSVNFXyVcSU5DTFVERVxyb2xsYmFjay53c2UKLWVuZApkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvcHl0aG9uY29yZS52Y3Byb2ogYi9QQy9WUzcuMS9weXRob25jb3JlLnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDVjNDE4NC4uMDAwMDAwMAotLS0gYS9QQy9WUzcuMS9weXRob25jb3JlLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDgyNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iNy4xMCINCi0JTmFtZT0icHl0aG9uY29yZSINCi0JUHJvamVjdEdVSUQ9IntDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMzB9Ig0KLQlSb290TmFtZXNwYWNlPSJweXRob25jb3JlIg0KLQlTY2NQcm9qZWN0TmFtZT0icHl0aG9uY29yZSINCi0JU2NjTG9jYWxQYXRoPSIuLiI+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiIvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1yZWxlYXNlXHB5dGhvbmNvcmUiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iL1ptMjAwICINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO05ERUJVRztXSU4zMjtfV0lORE9XUztVU0VfRExfRVhQT1JUIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9ImdldGJ1aWxkaW5mby5vIg0KLQkJCQlPdXRwdXRGaWxlPSIuL3B5dGhvbjMzLmRsbCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL3B5dGhvbjMzLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTAwMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL3B5dGhvbjMzLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJCURlc2NyaXB0aW9uPSJnZW5lcmF0ZSBidWlsZGluZm8iDQotCQkJCUNvbW1hbmRMaW5lPSJtYWtlX2J1aWxkaW5mby5leGUgJChDb25maWd1cmF0aW9uTmFtZSkiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KLQkJCQlDdWx0dXJlPSIxMDMzIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1kZWJ1Z1xweXRob25jb3JlIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9Ii9abTIwMCAiDQotCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO19ERUJVRztVU0VfRExfRVhQT1JUO1dJTjMyO19XSU5ET1dTIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMyINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iZ2V0YnVpbGRpbmZvLm8iDQotCQkJCU91dHB1dEZpbGU9Ii4vcHl0aG9uMzNfZC5kbGwiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9weXRob24zM19kLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTAwMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL3B5dGhvbjMzX2QubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkJRGVzY3JpcHRpb249ImdlbmVyYXRlIGJ1aWxkaW5mbyINCi0JCQkJQ29tbWFuZExpbmU9Im1ha2VfYnVpbGRpbmZvLmV4ZSAkKENvbmZpZ3VyYXRpb25OYW1lKSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUciDQotCQkJCUN1bHR1cmU9IjEwMzMiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZUl0YW5pdW18V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuLy4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXGlhNjQtdGVtcC1yZWxlYXNlXHB5dGhvbmNvcmUiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9VU0VDTDpNU19JVEFOSVVNIC9HUy0iDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtOREVCVUc7V0lOMzI7X1dJTkRPV1M7VVNFX0RMX0VYUE9SVCINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iRkFMU0UiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL01BQ0hJTkU6SUE2NCAvVVNFTElOSzpNU19TREsiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9ImdldGJ1aWxkaW5mby5vIg0KLQkJCQlPdXRwdXRGaWxlPSIuL3B5dGhvbjMzLmRsbCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IkZBTFNFIg0KLQkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9weXRob24zMy5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUwMDAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9weXRob24zMy5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCQlEZXNjcmlwdGlvbj0iZ2VuZXJhdGUgYnVpbGRpbmZvIg0KLQkJCQlDb21tYW5kTGluZT0ibWFrZV9idWlsZGluZm8uZXhlICQoQ29uZmlndXJhdGlvbk5hbWUpIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlQU1ENjR8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuLy4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXGFtZDY0LXRlbXAtcmVsZWFzZVxweXRob25jb3JlIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9Ii9abTIwMCAgL1VTRUNMOk1TX09QVEVST04gL0dTLSINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO05ERUJVRztXSU4zMjtfV0lORE9XUztVU0VfRExfRVhQT1JUIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJGQUxTRSINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvTUFDSElORTpBTUQ2NCAvVVNFTElOSzpNU19TREsiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9ImdldGJ1aWxkaW5mby5vIg0KLQkJCQlPdXRwdXRGaWxlPSIuL3B5dGhvbjMzLmRsbCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL3B5dGhvbjMzLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTAwMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL3B5dGhvbjMzLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJCURlc2NyaXB0aW9uPSJnZW5lcmF0ZSBidWlsZGluZm8iDQotCQkJCUNvbW1hbmRMaW5lPSJtYWtlX2J1aWxkaW5mby5leGUgJChDb25maWd1cmF0aW9uTmFtZSkiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KLQkJCQlDdWx0dXJlPSIxMDMzIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJfaW8iDQotICAgICAgICAgICAgRmlsdGVyPSIiPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfaW9cZmlsZWlvLmMiPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2lvXGJ5dGVzaW8uYyI+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfaW9cc3RyaW5naW8uYyI+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJICAgIFJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfaW9cYnVmZmVyZWRpby5jIj4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9pb1xpb2Jhc2UuYyI+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfaW9cdGV4dGlvLmMiPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2lvXF9pb21vZHVsZS5jIj4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJ6bGliIg0KLQkJCUZpbHRlcj0iIj4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlxhZGxlcjMyLmMiPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlxjb21wcmVzcy5jIj4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcY3JjMzIuYyI+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXGRlZmxhdGUuYyI+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXGd6aW8uYyI+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXGluZmJhY2suYyI+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXGluZmZhc3QuYyI+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXGluZmxhdGUuYyI+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXGluZnRyZWVzLmMiPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlx0cmVlcy5jIj4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcdW5jb21wci5jIj4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJtb2R1bGUuYyI+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiI+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cTW9kdWxlc1x6bGliIi8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWd8V2luMzIiPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXE1vZHVsZXNcemxpYiIvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2VJdGFuaXVtfFdpbjMyIj4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxNb2R1bGVzXHpsaWIiLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlQU1ENjR8V2luMzIiPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXE1vZHVsZXNcemxpYiIvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlx6dXRpbC5jIj4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9iaXNlY3Rtb2R1bGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xjamtjb2RlY3NcX2NvZGVjc19jbi5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGNqa2NvZGVjc1xfY29kZWNzX2hrLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcY2prY29kZWNzXF9jb2RlY3NfaXNvMjAyMi5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGNqa2NvZGVjc1xfY29kZWNzX2pwLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcY2prY29kZWNzXF9jb2RlY3Nfa3IuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xjamtjb2RlY3NcX2NvZGVjc190dy5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jb2RlY3Ntb2R1bGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfY29sbGVjdGlvbnNtb2R1bGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfY3N2LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2RhdGV0aW1lbW9kdWxlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2Z1bmN0b29sc21vZHVsZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9oZWFwcW1vZHVsZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9qc29uLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2xvY2FsZW1vZHVsZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9sc3Byb2YuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfbWF0aC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9waWNrbGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfcmFuZG9tbW9kdWxlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3NyZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zdHJ1Y3QuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUGNcX3N1YnByb2Nlc3MuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfdGltZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cX3dhcm5pbmdzLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3dlYWtyZWYuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xhYnN0cmFjdC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGFjY3UuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUGFyc2VyXGFjY2VsZXIuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xhcnJheW1vZHVsZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cYXNkbC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cYXN0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcYXRleGl0bW9kdWxlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcYXVkaW9vcC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGJpbmFzY2lpLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBhcnNlclxiaXRzZXQuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGJsdGlubW9kdWxlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcYm9vbG9iamVjdC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGJ5dGVzX21ldGhvZHMuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xieXRlYXJyYXlvYmplY3QuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xieXRlc29iamVjdC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGNhcHN1bGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xjZWxsb2JqZWN0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxjZXZhbC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGNsYXNzb2JqZWN0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcY21hdGhtb2R1bGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGNvZGVjcy5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGNvZGVvYmplY3QuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGNvbXBpbGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xjb21wbGV4b2JqZWN0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBDXGNvbmZpZy5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cZHluYW1pY19hbm5vdGF0aW9ucy5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGRlc2Nyb2JqZWN0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcZGljdG9iamVjdC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xkbF9udC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cZHRvYS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cZHlubG9hZF93aW4uYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xlbnVtb2JqZWN0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXJybm9tb2R1bGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGVycm9ycy5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGV4Y2VwdGlvbnMuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xmaWxlb2JqZWN0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxmaWxldXRpbHMuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUGFyc2VyXGZpcnN0c2V0cy5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGZsb2F0b2JqZWN0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxmb3JtYXR0ZXJfdW5pY29kZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGZyYW1lb2JqZWN0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxmb3JtYXR0ZXJfdW5pY29kZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cZnJvemVuLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcZnVuY29iamVjdC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cZnV0dXJlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZ2Ntb2R1bGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xnZW5vYmplY3QuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGdldGFyZ3MuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGdldGNvbXBpbGVyLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxnZXRjb3B5cmlnaHQuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGdldG9wdC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xnZXRwYXRocC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cZ2V0cGxhdGZvcm0uYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGdldHZlcnNpb24uYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGdyYW1pbml0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBhcnNlclxncmFtbWFyLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBhcnNlclxncmFtbWFyMS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25caW1wb3J0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxpbXBvcnRkbC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGl0ZXJvYmplY3QuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xpdGVydG9vbHNtb2R1bGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUGFyc2VyXGxpc3Rub2RlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcbGlzdG9iamVjdC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGxvbmdvYmplY3QuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xtYWluLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxtYXJzaGFsLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcbWF0aG1vZHVsZS5jIj4NCi0JCTwvRmlsZT4NCi0gCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xtZDVtb2R1bGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUGFyc2VyXG1ldGFncmFtbWFyLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcbWVtb3J5b2JqZWN0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcbWV0aG9kb2JqZWN0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcbW1hcG1vZHVsZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cbW9kc3VwcG9ydC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXG1vZHVsZW9iamVjdC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xtc3ZjcnRtb2R1bGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xjamtjb2RlY3NcbXVsdGlieXRlY29kZWMuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUGFyc2VyXG15cmVhZGxpbmUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXG15c25wcmludGYuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXG15c3RydG91bC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQYXJzZXJcbm9kZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXG9iamVjdC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXG9ibWFsbG9jLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcb3BlcmF0b3IuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUGFyc2VyXHBhcnNlci5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHBhcnNlcm1vZHVsZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQYXJzZXJccGFyc2V0b2suYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXHBlZXBob2xlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNccG9zaXhtb2R1bGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXHB5YXJlbmEuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXHB5Y3R5cGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXHB5ZnBlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxweW1hdGguYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXHB5c3RhdGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXHB5c3RyY21wLmMiDQotCQkJPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxweXN0cnRvZC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25ccHl0aW1lLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxQeXRob24tYXN0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBDXHB5dGhvbl9udC5yYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXHB5dGhvbnJ1bi5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25ccmFuZG9tLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNccmFuZ2VvYmplY3QuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xyb3RhdGluZ3RyZWUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xzZXRvYmplY3QuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xzaGEyNTZtb2R1bGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xzaGE1MTJtb2R1bGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xzaGExbW9kdWxlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcc2lnbmFsbW9kdWxlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcc2xpY2VvYmplY3QuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXHN0cnVjdG1lbWJlci5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXHN0cnVjdHNlcS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cc3ltdGFibGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xzeW10YWJsZW1vZHVsZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cc3lzbW9kdWxlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblx0aHJlYWQuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfdGhyZWFkbW9kdWxlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcdGltZW1vZHVsZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQYXJzZXJcdG9rZW5pemVyLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblx0cmFjZWJhY2suYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1x0dXBsZW9iamVjdC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXHR5cGVvYmplY3QuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1x1bmljb2RlY3R5cGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1x1bmljb2Rlb2JqZWN0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBjXHdpbnJlZy5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXHdlYWtyZWZvYmplY3QuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x4eHN1YnR5cGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6aXBpbXBvcnQuYyI+DQotCQk8L0ZpbGU+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTNy4xL3B5dGhvbncudmNwcm9qIGIvUEMvVlM3LjEvcHl0aG9udy52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3ZDdmNTAuLjAwMDAwMDAKLS0tIGEvUEMvVlM3LjEvcHl0aG9udy52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSwyNjEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjcuMTAiDQotCU5hbWU9InB5dGhvbnciDQotCVNjY1Byb2plY3ROYW1lPSJweXRob253Ig0KLQlTY2NMb2NhbFBhdGg9Ii4uXC4uXHBjIj4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIi8+DQotCTwvUGxhdGZvcm1zPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1kZWJ1Z1xweXRob253Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7X0RFQlVHO19XSU5ET1dTIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMyINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi9weXRob253X2QuZXhlIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vcHl0aG9ud19kLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlTdGFja1Jlc2VydmVTaXplPSIyMDAwMDAwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZDAwMDAwMCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0RFQlVHIg0KLQkJCQlDdWx0dXJlPSIxMDMzIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLXJlbGVhc2VccHl0aG9udyINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtOREVCVUc7X1dJTkRPV1MiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLlwuL3B5dGhvbncuZXhlIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vcHl0aG9udy5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJU3RhY2tSZXNlcnZlU2l6ZT0iMjAwMDAwMCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWQwMDAwMDAiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlSXRhbml1bXxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5caWE2NC10ZW1wLXJlbGVhc2VccHl0aG9udyINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL1VTRUNMOk1TX0lUQU5JVU0gL0dTLSINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO05ERUJVRztfV0lORE9XUyINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iRkFMU0UiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL01BQ0hJTkU6SUE2NCAvVVNFTElOSzpNU19TREsiDQotCQkJCU91dHB1dEZpbGU9Ii5cLi9weXRob253LmV4ZSINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL3B5dGhvbncucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjIiDQotCQkJCVN0YWNrUmVzZXJ2ZVNpemU9IjIwMDAwMDAiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFkMDAwMDAwIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQotCQkJCUN1bHR1cmU9IjEwMzMiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZUFNRDY0fFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9ImFtZDY0LXRlbXAtcmVsZWFzZVxweXRob253Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvVVNFQ0w6TVNfT1BURVJPTiINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO05ERUJVRztfV0lORE9XUyINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iRkFMU0UiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL01BQ0hJTkU6QU1ENjQgL1VTRUxJTks6TVNfU0RLIg0KLQkJCQlPdXRwdXRGaWxlPSIuXC4vcHl0aG9udy5leGUiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9weXRob253LnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlTdGFja1Jlc2VydmVTaXplPSIyMDAwMDAwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZDAwMDAwMCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KLQkJCQlDdWx0dXJlPSIxMDMzIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xweXRob25fZXhlLnJjIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xXaW5NYWluLmMiPg0KLQkJPC9GaWxlPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzcuMS9yZWFkbWUudHh0IGIvUEMvVlM3LjEvcmVhZG1lLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmZkOGE3MC4uMDAwMDAwMAotLS0gYS9QQy9WUzcuMS9yZWFkbWUudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMzM3ICswLDAgQEAKLUJ1aWxkaW5nIFB5dGhvbiB1c2luZyBWQysrIDcuMQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotVGhpcyBkaXJlY3RvcnkgaXMgdXNlZCB0byBidWlsZCBQeXRob24gZm9yIFdpbjMyIHBsYXRmb3JtcywgZS5nLiBXaW5kb3dzCi05NSwgOTggYW5kIE5ULiAgSXQgcmVxdWlyZXMgTWljcm9zb2Z0IFZpc3VhbCBDKysgNy4xCi0oYS5rLmEuIFZpc3VhbCBTdHVkaW8gLk5FVCAyMDAzKS4KLShGb3Igb3RoZXIgV2luZG93cyBwbGF0Zm9ybXMgYW5kIGNvbXBpbGVycywgc2VlIC4uL1BDL3JlYWRtZS50eHQuKQotCi1BbGwgeW91IG5lZWQgdG8gZG8gaXMgb3BlbiB0aGUgd29ya3NwYWNlICJwY2J1aWxkLnNsbiIgaW4gTVNWQysrLCBzZWxlY3QKLXRoZSBEZWJ1ZyBvciBSZWxlYXNlIHNldHRpbmcgKHVzaW5nICJTb2x1dGlvbiBDb25maWd1cmF0aW9uIiBmcm9tCi10aGUgIlN0YW5kYXJkIiB0b29sYmFyIiksIGFuZCBidWlsZCB0aGUgcHJvamVjdHMuCi0KLVRoZSBwcm9wZXIgb3JkZXIgdG8gYnVpbGQgc3VicHJvamVjdHM6Ci0KLTEpIHB5dGhvbmNvcmUgKHRoaXMgYnVpbGRzIHRoZSBtYWluIFB5dGhvbiBETEwgYW5kIGxpYnJhcnkgZmlsZXMsCi0gICAgICAgICAgICAgICBweXRob24zMy57ZGxsLCBsaWJ9IGluIFJlbGVhc2UgbW9kZSkKLSAgICAgICAgICAgICAgTk9URTogIGluIHByZXZpb3VzIHJlbGVhc2VzLCB0aGlzIHN1YnByb2plY3Qgd2FzCi0gICAgICAgICAgICAgIG5hbWVkIGFmdGVyIHRoZSByZWxlYXNlIG51bWJlciwgZS5nLiBweXRob24yMC4KLQotMikgcHl0aG9uICh0aGlzIGJ1aWxkcyB0aGUgbWFpbiBQeXRob24gZXhlY3V0YWJsZSwKLSAgICAgICAgICAgcHl0aG9uLmV4ZSBpbiBSZWxlYXNlIG1vZGUpCi0KLTMpIHRoZSBvdGhlciBzdWJwcm9qZWN0cywgYXMgZGVzaXJlZCBvciBuZWVkZWQgKG5vdGU6ICB5b3UgcHJvYmFibHkgZG9uJ3QKLSAgIHdhbnQgdG8gYnVpbGQgbW9zdCBvZiB0aGUgb3RoZXIgc3VicHJvamVjdHMsIHVubGVzcyB5b3UncmUgYnVpbGRpbmcgYW4KLSAgIGVudGlyZSBQeXRob24gZGlzdHJpYnV0aW9uIGZyb20gc2NyYXRjaCwgb3Igc3BlY2lmaWNhbGx5IG1ha2luZyBjaGFuZ2VzCi0gICB0byB0aGUgc3Vic3lzdGVtcyB0aGV5IGltcGxlbWVudCwgb3IgYXJlIHJ1bm5pbmcgYSBQeXRob24gY29yZSBidWlsZGJvdAotICAgdGVzdCBzbGF2ZTsgc2VlIFNVQlBST0pFQ1RTIGJlbG93KQotCi1XaGVuIHVzaW5nIHRoZSBEZWJ1ZyBzZXR0aW5nLCB0aGUgb3V0cHV0IGZpbGVzIGhhdmUgYSBfZCBhZGRlZCB0bwotdGhlaXIgbmFtZTogIHB5dGhvbjMzX2QuZGxsLCBweXRob25fZC5leGUsIHBhcnNlcl9kLnB5ZCwgYW5kIHNvIG9uLgotCi1TVUJQUk9KRUNUUwotLS0tLS0tLS0tLS0KLVRoZXNlIHN1YnByb2plY3RzIHNob3VsZCBidWlsZCBvdXQgb2YgdGhlIGJveC4gIFN1YnByb2plY3RzIG90aGVyIHRoYW4gdGhlCi1tYWluIG9uZXMgKHB5dGhvbmNvcmUsIHB5dGhvbiwgcHl0aG9udykgZ2VuZXJhbGx5IGJ1aWxkIGEgRExMIChyZW5hbWVkIHRvCi0ucHlkKSBmcm9tIGEgc3BlY2lmaWMgbW9kdWxlIHNvIHRoYXQgdXNlcnMgZG9uJ3QgaGF2ZSB0byBsb2FkIHRoZSBjb2RlCi1zdXBwb3J0aW5nIHRoYXQgbW9kdWxlIHVubGVzcyB0aGV5IGltcG9ydCB0aGUgbW9kdWxlLgotCi1weXRob25jb3JlCi0gICAgLmRsbCBhbmQgLmxpYgotcHl0aG9uCi0gICAgLmV4ZQotcHl0aG9udwotICAgIHB5dGhvbncuZXhlLCBhIHZhcmlhbnQgb2YgcHl0aG9uLmV4ZSB0aGF0IGRvZXNuJ3QgcG9wIHVwIGEgRE9TIGJveAotX3NvY2tldAotICAgIHNvY2tldG1vZHVsZS5jCi1fdGVzdGNhcGkKLSAgICB0ZXN0cyBvZiB0aGUgUHl0aG9uIEMgQVBJLCBydW4gdmlhIExpYi90ZXN0L3Rlc3RfY2FwaS5weSwgYW5kCi0gICAgaW1wbGVtZW50ZWQgYnkgbW9kdWxlIE1vZHVsZXMvX3Rlc3RjYXBpbW9kdWxlLmMKLXB5ZXhwYXQKLSAgICBQeXRob24gd3JhcHBlciBmb3IgYWNjZWxlcmF0ZWQgWE1MIHBhcnNpbmcsIHdoaWNoIGluY29ycG9yYXRlcyBzdGFibGUKLSAgICBjb2RlIGZyb20gdGhlIEV4cGF0IHByb2plY3Q6ICBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2V4cGF0Lwotc2VsZWN0Ci0gICAgc2VsZWN0bW9kdWxlLmMKLXVuaWNvZGVkYXRhCi0gICAgbGFyZ2UgdGFibGVzIG9mIFVuaWNvZGUgZGF0YQotd2luc291bmQKLSAgICBwbGF5IHNvdW5kcyAodHlwaWNhbGx5IC53YXYgZmlsZXMpIHVuZGVyIFdpbmRvd3MKLQotVGhlIGZvbGxvd2luZyBzdWJwcm9qZWN0cyB3aWxsIGdlbmVyYWxseSBOT1QgYnVpbGQgb3V0IG9mIHRoZSBib3guICBUaGV5Ci13cmFwIGNvZGUgUHl0aG9uIGRvZXNuJ3QgY29udHJvbCwgYW5kIHlvdSdsbCBuZWVkIHRvIGRvd25sb2FkIHRoZSBiYXNlCi1wYWNrYWdlcyBmaXJzdCBhbmQgdW5wYWNrIHRoZW0gaW50byBzaWJsaW5ncyBvZiBQQydzIHBhcmVudAotZGlyZWN0b3J5OyBmb3IgZXhhbXBsZSwgaWYgdGhpcyBkaXJlY3RvcnkgaXMgLi4uLlxkaXN0XHRydW5rXFBDXFZTNy4xLAotdW5wYWNrIGludG8gbmV3IHN1YmRpcmVjdG9yaWVzIG9mIGRpc3RcLgotCi1fdGtpbnRlcgotICAgIFB5dGhvbiB3cmFwcGVyIGZvciB0aGUgVGsgd2luZG93aW5nIHN5c3RlbS4gIFJlcXVpcmVzIGJ1aWxkaW5nCi0gICAgVGNsL1RrIGZpcnN0LiAgRm9sbG93aW5nIGFyZSBpbnN0cnVjdGlvbnMgZm9yIFRjbC9UayA4LjQuMTIuCi0KLSAgICBHZXQgc291cmNlCi0gICAgLS0tLS0tLS0tLQotICAgIEluIHRoZSBkaXN0IGRpcmVjdG9yeSwgcnVuCi0gICAgc3ZuIGV4cG9ydCBodHRwOi8vc3ZuLnB5dGhvbi5vcmcvcHJvamVjdHMvZXh0ZXJuYWwvdGNsOC40LjEyCi0gICAgc3ZuIGV4cG9ydCBodHRwOi8vc3ZuLnB5dGhvbi5vcmcvcHJvamVjdHMvZXh0ZXJuYWwvdGs4LjQuMTIKLSAgICBzdm4gZXhwb3J0IGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy9wcm9qZWN0cy9leHRlcm5hbC90aXgtOC40LjAKLQotICAgIEJ1aWxkIFRjbCBmaXJzdCAoZG9uZSBoZXJlIHcvIE1TVkMgNy4xIG9uIFdpbmRvd3MgWFApCi0gICAgLS0tLS0tLS0tLS0tLS0tCi0gICAgVXNlICJTdGFydCAtPiBBbGwgUHJvZ3JhbXMgLT4gTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gLk5FVCAyMDAzCi0gICAgICAgICAtPiBWaXN1YWwgU3R1ZGlvIC5ORVQgVG9vbHMgLT4gVmlzdWFsIFN0dWRpbyAuTkVUIDIwMDMgQ29tbWFuZCBQcm9tcHQiCi0gICAgdG8gZ2V0IGEgc2hlbGwgd2luZG93IHdpdGggdGhlIGNvcnJlY3QgZW52aXJvbm1lbnQgc2V0dGluZ3MKLSAgICBjZCBkaXN0XHRjbDguNC4xMlx3aW4KLSAgICBubWFrZSAtZiBtYWtlZmlsZS52YwotICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIElOU1RBTExESVI9Li5cLi5cdGNsdGsgaW5zdGFsbAotCi0gICAgWFhYIFNob3VsZCB3ZSBjb21waWxlIHdpdGggT1BUUz10aHJlYWRzPwotCi0gICAgT3B0aW9uYWw6ICBydW4gdGVzdHMsIHZpYQotICAgICAgICBubWFrZSAtZiBtYWtlZmlsZS52YyB0ZXN0Ci0KLSAgICAgICAgT24gV2luWFAgUHJvLCB3aG9sbHkgdXAgdG8gZGF0ZSBhcyBvZiAzMC1BdWctMjAwNDoKLSAgICAgICAgYWxsLnRjbDogICAgICAgIFRvdGFsICAgMTA2NzggICBQYXNzZWQgIDk5NjkgICAgU2tpcHBlZCA3MDkgICAgIEZhaWxlZCAgMAotICAgICAgICBTb3VyY2VkIDEyOSBUZXN0IEZpbGVzLgotCi0gICAgQnVpbGQgVGsKLSAgICAtLS0tLS0tLQotICAgIGNkIGRpc3RcdGs4LjQuMTJcd2luCi0gICAgbm1ha2UgLWYgbWFrZWZpbGUudmMgVENMRElSPS4uXC4uXHRjbDguNC4xMgotICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIFRDTERJUj0uLlwuLlx0Y2w4LjQuMTIgSU5TVEFMTERJUj0uLlwuLlx0Y2x0ayBpbnN0YWxsCi0KLSAgICBYWFggU2hvdWxkIHdlIGNvbXBpbGUgd2l0aCBPUFRTPXRocmVhZHM/Ci0KLSAgICBYWFggT3VyIGluc3RhbGxlciBjb3BpZXMgYSBsb3Qgb2Ygc3R1ZmYgb3V0IG9mIHRoZSBUY2wvVGsgaW5zdGFsbAotICAgIFhYWCBkaXJlY3RvcnkuICBJcyBhbGwgb2YgdGhhdCByZWFsbHkgbmVlZGVkIGZvciBQeXRob24gdXNlIG9mIFRjbC9Uaz8KLQotICAgIE9wdGlvbmFsOiAgcnVuIHRlc3RzLCB2aWEKLSAgICAgICAgbm1ha2UgLWYgbWFrZWZpbGUudmMgVENMRElSPS4uXC4uXHRjbDguNC4xMiB0ZXN0Ci0KLSAgICAgICAgT24gV2luWFAgUHJvLCB3aG9sbHkgdXAgdG8gZGF0ZSBhcyBvZiAzMC1BdWctMjAwNDoKLSAgICAgICAgYWxsLnRjbDogICAgICAgIFRvdGFsICAgODQyMCAgICBQYXNzZWQgIDY4MjYgICAgU2tpcHBlZCAxNTgxICAgIEZhaWxlZCAgMTMKLSAgICAgICAgU291cmNlZCA5MSBUZXN0IEZpbGVzLgotICAgICAgICBGaWxlcyB3aXRoIGZhaWxpbmcgdGVzdHM6IGNhbnZJbWcudGVzdCBzY3JvbGxiYXIudGVzdCB0ZXh0V2luZC50ZXN0IHdpbldtLnRlc3QKLQotICAgQnVpbHQgVGl4Ci0gICAtLS0tLS0tLS0KLSAgIGNkIGRpc3RcdGl4LTguNC4wXHdpbgotICAgbm1ha2UgLWYgcHl0aG9uLm1hawotICAgbm1ha2UgLWYgcHl0aG9uLm1hayBpbnN0YWxsCi0KLWJ6MgotICAgIFB5dGhvbiB3cmFwcGVyIGZvciB0aGUgbGliYnoyIGNvbXByZXNzaW9uIGxpYnJhcnkuICBIb21lcGFnZQotICAgICAgICBodHRwOi8vc291cmNlcy5yZWRoYXQuY29tL2J6aXAyLwotICAgIERvd25sb2FkIHRoZSBzb3VyY2UgZnJvbSB0aGUgcHl0aG9uLm9yZyBjb3B5IGludG8gdGhlIGRpc3QKLSAgICBkaXJlY3Rvcnk6Ci0KLSAgICBzdm4gZXhwb3J0IGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy9wcm9qZWN0cy9leHRlcm5hbC9iemlwMi0xLjAuMwotCi0gICAgQSBjdXN0b20gcHJlLWxpbmsgc3RlcCBpbiB0aGUgYnoyIHByb2plY3Qgc2V0dGluZ3Mgc2hvdWxkIG1hbmFnZSB0bwotICAgIGJ1aWxkIGJ6aXAyLTEuMC4zXGxpYmJ6Mi5saWIgYnkgbWFnaWMgYmVmb3JlIGJ6Mi5weWQgKG9yIGJ6Ml9kLnB5ZCkgaXMKLSAgICBsaW5rZWQgaW4gVlM3LjFcLgotICAgIEhvd2V2ZXIsIHRoZSBiejIgcHJvamVjdCBpcyBub3Qgc21hcnQgZW5vdWdoIHRvIHJlbW92ZSBhbnl0aGluZyB1bmRlcgotICAgIGJ6aXAyLTEuMC4zXCB3aGVuIHlvdSBkbyBhIGNsZWFuLCBzbyBpZiB5b3Ugd2FudCB0byByZWJ1aWxkIGJ6aXAyLmxpYgotICAgIHlvdSBuZWVkIHRvIGNsZWFuIHVwIGJ6aXAyLTEuMC4zXCBieSBoYW5kLgotCi0gICAgVGhlIGJ1aWxkIHN0ZXAgc2hvdWxkbid0IHlpZWxkIGFueSB3YXJuaW5ncyBvciBlcnJvcnMsIGFuZCBzaG91bGQgZW5kCi0gICAgYnkgZGlzcGxheWluZyA2IGJsb2NrcyBlYWNoIHRlcm1pbmF0ZWQgd2l0aAotICAgICAgICBGQzogbm8gZGlmZmVyZW5jZXMgZW5jb3VudGVyZWQKLQotICAgIEFsbCBvZiB0aGlzIG1hbmFnZWQgdG8gYnVpbGQgYnppcDItMS4wLjNcbGliYnoyLmxpYiwgd2hpY2ggdGhlIFB5dGhvbgotICAgIHByb2plY3QgbGlua3MgaW4uCi0KLV9zcWxpdGUzCi0gICAgUHl0aG9uIHdyYXBwZXIgZm9yIFNRTGl0ZSBsaWJyYXJ5LgotICAgIAotICAgIEdldCB0aGUgc291cmNlIGNvZGUgdGhyb3VnaAotICAgIAotICAgIHN2biBleHBvcnQgaHR0cDovL3N2bi5weXRob24ub3JnL3Byb2plY3RzL2V4dGVybmFsL3NxbGl0ZS1zb3VyY2UtMy4zLjQKLSAgICAKLSAgICBUbyB1c2UgdGhlIGV4dGVuc2lvbiBtb2R1bGUgaW4gYSBQeXRob24gYnVpbGQgdHJlZSwgY29weSBzcWxpdGUzLmRsbCBpbnRvCi0gICAgdGhlIFZTNy4xIGZvbGRlci4KLQotX3NzbAotICAgIFB5dGhvbiB3cmFwcGVyIGZvciB0aGUgc2VjdXJlIHNvY2tldHMgbGlicmFyeS4KLQotICAgIEdldCB0aGUgc291cmNlIGNvZGUgdGhyb3VnaAotCi0gICAgc3ZuIGV4cG9ydCBodHRwOi8vc3ZuLnB5dGhvbi5vcmcvcHJvamVjdHMvZXh0ZXJuYWwvb3BlbnNzbC0wLjkuOGEKLQotICAgIEFsdGVybmF0aXZlbHksIGdldCB0aGUgbGF0ZXN0IHZlcnNpb24gZnJvbSBodHRwOi8vd3d3Lm9wZW5zc2wub3JnLgotICAgIFlvdSBjYW4gKHRoZW9yZXRpY2FsbHkpIHVzZSBhbnkgdmVyc2lvbiBvZiBPcGVuU1NMIHlvdSBsaWtlIC0gdGhlCi0gICAgYnVpbGQgcHJvY2VzcyB3aWxsIGF1dG9tYXRpY2FsbHkgc2VsZWN0IHRoZSBsYXRlc3QgdmVyc2lvbi4KLQotICAgIFlvdSBtdXN0IGFsc28gaW5zdGFsbCBBY3RpdmVQZXJsIGZyb20KLSAgICAgICAgaHR0cDovL3d3dy5hY3RpdmVzdGF0ZS5jb20vUHJvZHVjdHMvQWN0aXZlUGVybC8KLSAgICBhcyB0aGlzIGlzIHVzZWQgYnkgdGhlIE9wZW5TU0wgYnVpbGQgcHJvY2Vzcy4gIENvbXBsYWluIHRvIHRoZW0gPHdpbms+LgotCi0gICAgVGhlIE1TVkMgcHJvamVjdCBzaW1wbHkgaW52b2tlcyBidWlsZF9zc2wucHkgdG8gcGVyZm9ybQotICAgIHRoZSBidWlsZC4gIFRoaXMgUHl0aG9uIHNjcmlwdCBsb2NhdGVzIGFuZCBidWlsZHMgeW91ciBPcGVuU1NMCi0gICAgaW5zdGFsbGF0aW9uLCB0aGVuIGludm9rZXMgYSBzaW1wbGUgbWFrZWZpbGUgdG8gYnVpbGQgdGhlIGZpbmFsIC5weWQuCi0KLSAgICBidWlsZF9zc2wucHkgYXR0ZW1wdHMgdG8gY2F0Y2ggdGhlIG1vc3QgY29tbW9uIGVycm9ycyAoc3VjaCBhcyBub3QKLSAgICBiZWluZyBhYmxlIHRvIGZpbmQgT3BlblNTTCBzb3VyY2VzLCBvciBub3QgYmVpbmcgYWJsZSB0byBmaW5kIGEgUGVybAotICAgIHRoYXQgd29ya3Mgd2l0aCBPcGVuU1NMKSBhbmQgZ2l2ZSBhIHJlYXNvbmFibGUgZXJyb3IgbWVzc2FnZS4KLSAgICBJZiB5b3UgaGF2ZSBhIHByb2JsZW0gdGhhdCBkb2Vzbid0IHNlZW0gdG8gYmUgaGFuZGxlZCBjb3JyZWN0bHkKLSAgICAoZWcsIHlvdSBrbm93IHlvdSBoYXZlIEFjdGl2ZVBlcmwgYnV0IHdlIGNhbid0IGZpbmQgaXQpLCBwbGVhc2UgdGFrZQotICAgIGEgcGVlayBhdCBidWlsZF9zc2wucHkgYW5kIHN1Z2dlc3QgcGF0Y2hlcy4gIE5vdGUgdGhhdCBidWlsZF9zc2wucHkKLSAgICBzaG91bGQgYmUgYWJsZSB0byBiZSBydW4gZGlyZWN0bHkgZnJvbSB0aGUgY29tbWFuZC1saW5lLgotCi0gICAgYnVpbGRfc3NsLnB5L01TVkMgaXNuJ3QgY2xldmVyIGVub3VnaCB0byBjbGVhbiBPcGVuU1NMIC0geW91IG11c3QgZG8KLSAgICB0aGlzIGJ5IGhhbmQuCi0KLUJ1aWxkaW5nIGZvciBJdGFuaXVtCi0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1UaGUgcHJvamVjdCBmaWxlcyBzdXBwb3J0IGEgUmVsZWFzZUl0YW5pdW0gY29uZmlndXJhdGlvbiB3aGljaCBjcmVhdGVzCi1XaW42NC9JdGFuaXVtIGJpbmFyaWVzLiBGb3IgdGhpcyB0byB3b3JrLCB5b3UgbmVlZCB0byBpbnN0YWxsIHRoZSBQbGF0Zm9ybQotU0RLLCBpbiBwYXJ0aWN1bGFyIHRoZSA2NC1iaXQgc3VwcG9ydC4gVGhpcyBpbmNsdWRlcyBhbiBJdGFuaXVtIGNvbXBpbGVyCi0oZnV0dXJlIHJlbGVhc2VzIG9mIHRoZSBTREsgbGlrZWx5IGluY2x1ZGUgYW4gQU1ENjQgY29tcGlsZXIgYXMgd2VsbCkuCi1JbiBhZGRpdGlvbiwgeW91IG5lZWQgdGhlIFZpc3VhbCBTdHVkaW8gcGx1Z2luIGZvciBleHRlcm5hbCBDIGNvbXBpbGVycywKLWZyb20gaHR0cDovL3NmLm5ldC9wcm9qZWN0cy92c2V4dGNvbXAuIFRoZSBwbHVnaW4gd2lsbCB3cmFwIGNsLmV4ZSwgdG8KLWxvY2F0ZSB0aGUgcHJvcGVyIHRhcmdldCBjb21waWxlciwgYW5kIGNvbnZlcnQgY29tcGlsZXIgb3B0aW9ucwotYWNjb3JkaW5nbHkuIFRoZSBwcm9qZWN0IGZpbGVzIHJlcXVpcmUgYXRsZWFzdCB2ZXJzaW9uIDAuOS4KLQotQnVpbGRpbmcgZm9yIEFNRDY0Ci0tLS0tLS0tLS0tLS0tLS0tLS0KLQotVGhlIGJ1aWxkIHByb2Nlc3MgZm9yIHRoZSBSZWxlYXNlQU1ENjQgY29uZmlndXJhdGlvbiBpcyB2ZXJ5IHNpbWlsYXIKLXRvIHRoZSBJdGFuaXVtIGNvbmZpZ3VyYXRpb247IG1ha2Ugc3VyZSB5b3UgdXNlIHRoZSBsYXRlc3QgdmVyc2lvbiBvZgotdnNleHRjb21wLgotCi1CdWlsZGluZyBQeXRob24gVXNpbmcgdGhlIGZyZWUgTVMgVG9vbGtpdCBDb21waWxlcgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotVGhlIGJ1aWxkIHByb2Nlc3MgZm9yIFZpc3VhbCBDKysgY2FuIGJlIHVzZWQgYWxtb3N0IHVuY2hhbmdlZCB3aXRoIHRoZSBmcmVlIE1TCi1Ub29sa2l0IENvbXBpbGVyLiBUaGlzIHByb3ZpZGVzIGEgd2F5IG9mIGJ1aWxkaW5nIFB5dGhvbiB1c2luZyBmcmVlbHkKLWF2YWlsYWJsZSBzb2Z0d2FyZS4KLQotTm90ZSB0aGF0IE1pY3Jvc29mdCBoYXZlIHdpdGhkcmF3biB0aGUgZnJlZSBNUyBUb29sa2l0IENvbXBpbGVyLCBzbyB0aGlzIGNhbgotbm8gbG9uZ2VyIGJlIGNvbnNpZGVyZWQgYSBzdXBwb3J0ZWQgb3B0aW9uLiBUaGUgaW5zdHJ1Y3Rpb25zIGFyZSBzdGlsbAotY29ycmVjdCwgYnV0IHlvdSBuZWVkIHRvIGFscmVhZHkgaGF2ZSBhIGNvcHkgb2YgdGhlIGNvbXBpbGVyIGluIG9yZGVyIHRvIHVzZQotdGhlbS4gTWljcm9zb2Z0IG5vdyBzdXBwbHkgVmlzdWFsIEMrKyAyMDA4IEV4cHJlc3MgRWRpdGlvbiBmb3IgZnJlZSwgYnV0IHRoaXMKLWlzIE5PVCBjb21wYXRpYmxlIHdpdGggVmlzdWFsIEMrKyA3LjEgKGl0IHVzZXMgYSBkaWZmZXJlbnQgQyBydW50aW1lKSwgYW5kIHNvCi1jYW5ub3QgYmUgdXNlZCB0byBidWlsZCBhIHZlcnNpb24gb2YgUHl0aG9uIGNvbXBhdGlibGUgd2l0aCB0aGUgc3RhbmRhcmQKLXB5dGhvbi5vcmcgYnVpbGQuIElmIHlvdSBhcmUgaW50ZXJlc3RlZCBpbiB1c2luZyBWaXN1YWwgQysrIDIwMDggRXhwcmVzcwotRWRpdGlvbiwgaG93ZXZlciwgeW91IHNob3VsZCBsb29rIGF0IHRoZSBQQ0J1aWxkIGRpcmVjdG9yeS4KLQotUmVxdWlyZW1lbnRzCi0KLSAgICBUbyBidWlsZCBQeXRob24sIHRoZSBmb2xsb3dpbmcgdG9vbHMgYXJlIHJlcXVpcmVkOgotCi0gICAgKiBUaGUgVmlzdWFsIEMrKyBUb29sa2l0IENvbXBpbGVyCi0gICAgICAgIG5vIGxvbmdlciBhdmFpbGFibGUgZm9yIGRvd25sb2FkIC0gc2VlIGFib3ZlCi0gICAgKiBBIHJlY2VudCBQbGF0Zm9ybSBTREsKLSAgICAgICAgZnJvbSBodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vZG93bmxvYWRzL2RldGFpbHMuYXNweD9GYW1pbHlJRD00ODQyNjllMi0zYjg5LTQ3ZTMtOGViNy0xZjJiZTZkNzEyM2EKLSAgICAqIFRoZSAuTkVUIDEuMSBTREsKLSAgICAgICAgZnJvbSBodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vZG93bmxvYWRzL2RldGFpbHMuYXNweD9GYW1pbHlJRD05YjNhMmNhNi0zNjQ3LTQwNzAtOWY0MS1hMzMzYzZiOTE4MWQKLQotICAgIFtEb2VzIGFueW9uZSBoYXZlIGJldHRlciBVUkxzIGZvciB0aGUgbGFzdCAyIG9mIHRoZXNlP10KLQotICAgIFRoZSB0b29sa2l0IGNvbXBpbGVyIGlzIG5lZWRlZCBhcyBpdCBpcyBhbiBvcHRpbWlzaW5nIGNvbXBpbGVyICh0aGUKLSAgICBjb21waWxlciBzdXBwbGllZCB3aXRoIHRoZSAuTkVUIFNESyBpcyBhIG5vbi1vcHRpbWlzaW5nIHZlcnNpb24pLiBUaGUKLSAgICBwbGF0Zm9ybSBTREsgaXMgbmVlZGVkIHRvIHByb3ZpZGUgdGhlIFdpbmRvd3MgaGVhZGVyIGZpbGVzIGFuZCBsaWJyYXJpZXMKLSAgICAodGhlIFdpbmRvd3MgMjAwMyBTZXJ2ZXIgU1AxIGVkaXRpb24sIHR5cGljYWwgaW5zdGFsbCwgaXMga25vd24gdG8gd29yayAtCi0gICAgb3RoZXIgY29uZmlndXJhdGlvbnMgb3IgdmVyc2lvbnMgYXJlIHByb2JhYmx5IGZpbmUgYXMgd2VsbCkuIFRoZSAuTkVUIDEuMQotICAgIFNESyBpcyBuZWVkZWQgYmVjYXVzZSBpdCBjb250YWlucyBhIHZlcnNpb24gb2YgbXN2Y3J0LmRsbCB3aGljaCBsaW5rcyB0bwotICAgIHRoZSBtc3ZjcjcxLmRsbCBDUlQuIE5vdGUgdGhhdCB0aGUgLk5FVCAyLjAgU0RLIGlzIE5PVCBhY2NlcHRhYmxlLCBhcyBpdAotICAgIHJlZmVyZW5jZXMgbXN2Y3I4MC5kbGwuCi0KLSAgICBBbGwgb2YgdGhlIGFib3ZlIGl0ZW1zIHNob3VsZCBiZSBpbnN0YWxsZWQgYXMgbm9ybWFsLgotCi0gICAgSWYgeW91IGludGVuZCB0byBidWlsZCB0aGUgb3BlbnNzbCAobmVlZGVkIGZvciB0aGUgX3NzbCBleHRlbnNpb24pIHlvdQotICAgIHdpbGwgbmVlZCB0aGUgQyBydW50aW1lIHNvdXJjZXMgaW5zdGFsbGVkIGFzIHBhcnQgb2YgdGhlIHBsYXRmb3JtIFNESy4KLQotICAgIEluIGFkZGl0aW9uLCB5b3Ugd2lsbCBuZWVkIE5hbnQsIGF2YWlsYWJsZSBmcm9tCi0gICAgaHR0cDovL25hbnQuc291cmNlZm9yZ2UubmV0LiBUaGUgMC44NSByZWxlYXNlIGNhbmRpZGF0ZSAzIHZlcnNpb24gaXMga25vd24KLSAgICB0byB3b3JrLiBUaGlzIGlzIHRoZSBsYXRlc3QgcmVsZWFzZWQgdmVyc2lvbiBhdCB0aGUgdGltZSBvZiB3cml0aW5nLiBMYXRlcgotICAgICJuaWdodGx5IGJ1aWxkIiB2ZXJzaW9ucyBhcmUga25vd24gTk9UIHRvIHdvcmsgLSBpdCBpcyBub3QgY2xlYXIgYXQKLSAgICBwcmVzZW50IHdoZXRoZXIgZnV0dXJlIHJlbGVhc2VkIHZlcnNpb25zIHdpbGwgd29yay4KLQotU2V0dGluZyB1cCB0aGUgZW52aXJvbm1lbnQKLQotICAgIFN0YXJ0IGEgcGxhdGZvcm0gU0RLICJidWlsZCBlbnZpcm9ubWVudCB3aW5kb3ciIGZyb20gdGhlIHN0YXJ0IG1lbnUuIFRoZQotICAgICJXaW5kb3dzIFhQIDMyLWJpdCByZXRhaWwiIHZlcnNpb24gaXMga25vd24gdG8gd29yay4KLQotICAgIEFkZCB0aGUgZm9sbG93aW5nIGRpcmVjdG9yaWVzIHRvIHlvdXIgUEFUSDoKLSAgICAgICAgKiBUaGUgdG9vbGtpdCBjb21waWxlciBkaXJlY3RvcnkKLSAgICAgICAgKiBUaGUgU0RLICJXaW42NCIgYmluYXJpZXMgZGlyZWN0b3J5Ci0JKiBUaGUgTmFudCBkaXJlY3RvcnkKLSAgICBBZGQgdG8geW91ciBJTkNMVURFIGVudmlyb25tZW50IHZhcmlhYmxlOgotICAgICAgICAqIFRoZSB0b29sa2l0IGNvbXBpbGVyIElOQ0xVREUgZGlyZWN0b3J5Ci0gICAgQWRkIHRvIHlvdXIgTElCIGVudmlyb25tZW50IHZhcmlhYmxlOgotICAgICAgICAqIFRoZSB0b29sa2l0IGNvbXBpbGVyIExJQiBkaXJlY3RvcnkKLQkqIFRoZSAuTkVUIFNESyBWaXN1YWwgU3R1ZGlvIDIwMDMgVkM3XGxpYiBkaXJlY3RvcnkKLQotICAgIFRoZSBmb2xsb3dpbmcgY29tbWFuZHMgc2hvdWxkIHNldCB0aGluZ3MgdXAgYXMgeW91IG5lZWQgdGhlbToKLQotICAgICAgICByZW0gU2V0IHRoZXNlIHZhbHVlcyBhY2NvcmRpbmcgdG8gd2hlcmUgeW91IGluc3RhbGxlZCB0aGUgc29mdHdhcmUKLSAgICAgICAgc2V0IFRPT0xLSVQ9QzpcUHJvZ3JhbSBGaWxlc1xNaWNyb3NvZnQgVmlzdWFsIEMrKyBUb29sa2l0IDIwMDMKLSAgICAgICAgc2V0IFNESz1DOlxQcm9ncmFtIEZpbGVzXE1pY3Jvc29mdCBQbGF0Zm9ybSBTREsKLSAgICAgICAgc2V0IE5FVD1DOlxQcm9ncmFtIEZpbGVzXE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIC5ORVQgMjAwMwotICAgICAgICBzZXQgTkFOVD1DOlxVdGlsc1xOYW50Ci0KLSAgICAgICAgc2V0IFBBVEg9JVRPT0xLSVQlXGJpbjslUEFUSCU7JVNESyVcQmluXHdpbjY0OyVOQU5UJVxiaW4KLSAgICAgICAgc2V0IElOQ0xVREU9JVRPT0xLSVQlXGluY2x1ZGU7JUlOQ0xVREUlCi0gICAgICAgIHNldCBMSUI9JVRPT0xLSVQlXGxpYjslTkVUJVxWQzdcbGliOyVMSUIlCi0KLSAgICBUaGUgIndpbjY0IiBkaXJlY3RvcnkgZnJvbSB0aGUgU0RLIGlzIGFkZGVkIHRvIHN1cHBseSBleGVjdXRhYmxlcyBzdWNoIGFzCi0gICAgImN2dHJlcyIgYW5kICJsaWIiLCB3aGljaCBhcmUgbm90IGF2YWlsYWJsZSBlbHNld2hlcmUuIFRoZSB2ZXJzaW9ucyBpbiB0aGUKLSAgICAid2luNjQiIGRpcmVjdG9yeSBhcmUgMzItYml0IHByb2dyYW1zLCBzbyB0aGV5IGFyZSBmaW5lIHRvIHVzZSBoZXJlLgotCi0gICAgVGhhdCdzIGl0LiBUbyBidWlsZCBQeXRob24gKHRoZSBjb3JlIG9ubHksIG5vIGJpbmFyeSBleHRlbnNpb25zIHdoaWNoCi0gICAgZGVwZW5kIG9uIGV4dGVybmFsIGxpYnJhcmllcykgeW91IGp1c3QgbmVlZCB0byBpc3N1ZSB0aGUgY29tbWFuZAotCi0gICAgICAgIG5hbnQgLWJ1aWxkZmlsZTpweXRob24uYnVpbGQgYWxsCi0KLSAgICBmcm9tIHdpdGhpbiB0aGUgVlM3LjEgZGlyZWN0b3J5LgotCi1FeHRlbnNpb24gbW9kdWxlcwotCi0gICAgVG8gYnVpbGQgdGhvc2UgZXh0ZW5zaW9uIG1vZHVsZXMgd2hpY2ggcmVxdWlyZSBleHRlcm5hbCBsaWJyYXJpZXMKLSAgICAoX3RraW50ZXIsIGJ6MiwgX3NxbGl0ZTMsIF9zc2wpIHlvdSBjYW4gZm9sbG93IHRoZSBpbnN0cnVjdGlvbnMKLSAgICBmb3IgdGhlIFZpc3VhbCBTdHVkaW8gYnVpbGQgYWJvdmUsIHdpdGggYSBmZXcgbWlub3IgbW9kaWZpY2F0aW9ucy4gVGhlc2UKLSAgICBpbnN0cnVjdGlvbnMgaGF2ZSBvbmx5IGJlZW4gdGVzdGVkIHVzaW5nIHRoZSBzb3VyY2VzIGluIHRoZSBQeXRob24KLSAgICBzdWJ2ZXJzaW9uIHJlcG9zaXRvcnkgLSBidWlsZGluZyBmcm9tIG9yaWdpbmFsIHNvdXJjZXMgc2hvdWxkIHdvcmssIGJ1dAotICAgIGhhcyBub3QgYmVlbiB0ZXN0ZWQuCi0KLSAgICBGb3IgZWFjaCBleHRlbnNpb24gbW9kdWxlIHlvdSB3aXNoIHRvIGJ1aWxkLCB5b3Ugc2hvdWxkIHJlbW92ZSB0aGUKLSAgICBhc3NvY2lhdGVkIGluY2x1ZGUgbGluZSBmcm9tIHRoZSBleGNsdWRlcHJvamVjdHMgc2VjdGlvbiBvZiBwYy5idWlsZC4KLQotICAgIFRoZSBjaGFuZ2VzIHJlcXVpcmVkIGFyZToKLQotICAgIF90a2ludGVyCi0gICAgICAgIFRoZSB0aXggbWFrZWZpbGUgKHRpeC04LjQuMFx3aW5cbWFrZWZpbGUudmMpIG11c3QgYmUgbW9kaWZpZWQgdG8KLQlyZW1vdmUgcmVmZXJlbmNlcyB0byBUT09MUzMyLiBUaGUgcmVsZXZhbnQgbGluZXMgc2hvdWxkIGJlIGNoYW5nZWQgdG8KLQlyZWFkOgotICAgICAgICAgICAgY2MzMiA9IGNsLmV4ZQotICAgICAgICAgICAgbGluazMyID0gbGluay5leGUKLSAgICAgICAgICAgIGluY2x1ZGUzMiA9IAotCVRoZSByZW1haW5kZXIgb2YgdGhlIGJ1aWxkIGluc3RydWN0aW9ucyB3aWxsIHdvcmsgYXMgZ2l2ZW4uCi0KLSAgICBiejIKLSAgICAgICAgTm8gY2hhbmdlcyBhcmUgbmVlZGVkCi0KLSAgICBfc3FsaXRlMwotICAgICAgICBObyBjaGFuZ2VzIGFyZSBuZWVkZWQuIEhvd2V2ZXIsIGluIG9yZGVyIGZvciB0aGUgdGVzdHMgdG8gc3VjY2VlZCwgYQotCWNvcHkgb2Ygc3FsaXRlMy5kbGwgbXVzdCBiZSBkb3dubG9hZGVkLCBhbmQgcGxhY2VkIGFsb25nc2lkZQotCXB5dGhvbi5leGUuCi0KLSAgICBfc3NsCi0gICAgICAgIFRoZSBkb2N1bWVudGVkIGJ1aWxkIHByb2Nlc3Mgd29ya3MgYXMgd3JpdHRlbi4gSG93ZXZlciwgaXQgbmVlZHMgYQotCWNvcHkgb2YgdGhlIGZpbGUgc2V0YXJndi5vYmosIHdoaWNoIGlzIG5vdCBzdXBwbGllZCBpbiB0aGUgcGxhdGZvcm0KLQlTREsuIEhvd2V2ZXIsIHRoZSBzb3VyY2VzIGFyZSBhdmFpbGFibGUgKGluIHRoZSBjcnQgc291cmNlIGNvZGUpLiBUbwotCWJ1aWxkIHNldGFyZ3Yub2JqLCBwcm9jZWVkIGFzIGZvbGxvd3M6Ci0KLSAgICAgICAgQ29weSBzZXRhcmd2LmMsIGNydW50aW1lLmggYW5kIGludGVybmFsLmggZnJvbSAlU0RLJVxzcmNcY3J0IHRvIGEKLQl0ZW1wb3JhcnkgZGlyZWN0b3J5LgotCUNvbXBpbGUgdXNpbmcgImNsIC9jIC9JLiAvTUQgL0RfQ1JUQkxEIHNldGFyZ3YuYyIKLQlDb3B5IHRoZSByZXN1bHRpbmcgc2V0YXJndi5vYmogdG8gc29tZXdoZXJlIG9uIHlvdXIgTElCIGVudmlyb25tZW50Ci0JKCVTREslXGxpYiBpcyBhIHJlYXNvbmFibGUgcGxhY2UpLgotCi0JV2l0aCBzZXRhcmd2Lm9iaiBpbiBwbGFjZSwgdGhlIHN0YW5kYXJkIGJ1aWxkIHByb2Nlc3Mgc2hvdWxkIHdvcmsKLQlmaW5lLgotCi1ZT1VSIE9XTiBFWFRFTlNJT04gRExMcwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUlmIHlvdSB3YW50IHRvIGNyZWF0ZSB5b3VyIG93biBleHRlbnNpb24gbW9kdWxlIERMTCwgdGhlcmUncyBhbiBleGFtcGxlCi13aXRoIGVhc3ktdG8tZm9sbG93IGluc3RydWN0aW9ucyBpbiAuLi9QQy9leGFtcGxlLzsgcmVhZCB0aGUgZmlsZQotcmVhZG1lLnR4dCB0aGVyZSBmaXJzdC4KZGlmZiAtLWdpdCBhL1BDL1ZTNy4xL3JtcHljLnB5IGIvUEMvVlM3LjEvcm1weWMucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzYzg1NzYuLjAwMDAwMDAKLS0tIGEvUEMvVlM3LjEvcm1weWMucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi0jIFJlbW92ZSBhbGwgdGhlIC5weWMgYW5kIC5weW8gZmlsZXMgdW5kZXIgLi4vTGliLgotCi0KLWRlZiBkZWx0cmVlKHJvb3QpOgotICAgIGltcG9ydCBvcwotICAgIGZyb20gb3MucGF0aCBpbXBvcnQgam9pbgotCi0gICAgbnB5YyA9IG5weW8gPSAwCi0gICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsocm9vdCk6Ci0gICAgICAgIGZvciBuYW1lIGluIGZpbGVzOgotICAgICAgICAgICAgZGVsZXRlID0gRmFsc2UKLSAgICAgICAgICAgIGlmIG5hbWUuZW5kc3dpdGgoJy5weWMnKToKLSAgICAgICAgICAgICAgICBkZWxldGUgPSBUcnVlCi0gICAgICAgICAgICAgICAgbnB5YyArPSAxCi0gICAgICAgICAgICBlbGlmIG5hbWUuZW5kc3dpdGgoJy5weW8nKToKLSAgICAgICAgICAgICAgICBkZWxldGUgPSBUcnVlCi0gICAgICAgICAgICAgICAgbnB5byArPSAxCi0KLSAgICAgICAgICAgIGlmIGRlbGV0ZToKLSAgICAgICAgICAgICAgICBvcy5yZW1vdmUoam9pbihyb290LCBuYW1lKSkKLQotICAgIHJldHVybiBucHljLCBucHlvCi0KLW5weWMsIG5weW8gPSBkZWx0cmVlKCIuLi9MaWIiKQotcHJpbnQgbnB5YywgIi5weWMgZGVsZXRlZCwiLCBucHlvLCAiLnB5byBkZWxldGVkIgpkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvcnQuYmF0IGIvUEMvVlM3LjEvcnQuYmF0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBhOTEwYTc5Li4wMDAwMDAwCi0tLSBhL1BDL1ZTNy4xL3J0LmJhdAorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLUBlY2hvIG9mZgotcmVtIFJ1biBUZXN0cy4gIFJ1biB0aGUgcmVncmVzc2lvbiB0ZXN0IHN1aXRlLgotcmVtIFVzYWdlOiAgcnQgWy1kXSBbLU9dIFstcV0gcmVncnRlc3RfYXJncwotcmVtIC1kICAgUnVuIERlYnVnIGJ1aWxkIChweXRob25fZC5leGUpLiAgRWxzZSByZWxlYXNlIGJ1aWxkLgotcmVtIC1PICAgUnVuIHB5dGhvbi5leGUgb3IgcHl0aG9uX2QuZXhlIChzZWUgLWQpIHdpdGggLU8uCi1yZW0gLXEgICAicXVpY2siIC0tIG5vcm1hbGx5IHRoZSB0ZXN0cyBhcmUgcnVuIHR3aWNlLCB0aGUgZmlyc3QgdGltZQotcmVtICAgICAgYWZ0ZXIgZGVsZXRpbmcgYWxsIHRoZSAucHlbY29dIGZpbGVzIHJlYWNoYWJsZSBmcm9tIExpYi8uCi1yZW0gICAgICAtcSBydW5zIHRoZSB0ZXN0cyBqdXN0IG9uY2UsIGFuZCB3aXRob3V0IGRlbGV0aW5nIC5weVtjb10gZmlsZXMuCi1yZW0gQWxsIGxlYWRpbmcgaW5zdGFuY2VzIG9mIHRoZXNlIHN3aXRjaGVzIGFyZSBzaGlmdGVkIG9mZiwgYW5kCi1yZW0gd2hhdGV2ZXIgcmVtYWlucyBpcyBwYXNzZWQgdG8gcmVncnRlc3QucHkuICBGb3IgZXhhbXBsZSwKLXJlbSAgICAgcnQgLU8gLWQgLXggdGVzdF90aHJlYWQKLXJlbSBydW5zCi1yZW0gICAgIHB5dGhvbl9kIC1PIC4uLy4uL2xpYi90ZXN0L3JlZ3J0ZXN0LnB5IC14IHRlc3RfdGhyZWFkCi1yZW0gdHdpY2UsIGFuZAotcmVtICAgICBydCAtcSAtZyB0ZXN0X2JpbmFzY2lpCi1yZW0gcnVucwotcmVtICAgICBweXRob25fZCAuLi8uLi9saWIvdGVzdC9yZWdydGVzdC5weSAtZyB0ZXN0X2JpbmFzY2lpCi1yZW0gdG8gZ2VuZXJhdGUgdGhlIGV4cGVjdGVkLW91dHB1dCBmaWxlIGZvciBiaW5hc2NpaSBxdWlja2x5LgotcmVtCi1yZW0gQ29uZnVzaW5nOiAgaWYgeW91IHdhbnQgdG8gcGFzcyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0LCBsaWtlCi1yZW0gICAgIC11IG5ldHdvcmssbGFyZ2VmaWxlCi1yZW0gdGhlbiB5b3UgaGF2ZSB0byBxdW90ZSBpdCBvbiB0aGUgcnQgbGluZSwgbGlrZQotcmVtICAgICBydCAtdSAibmV0d29yayxsYXJnZWZpbGUiCi0KLXNldGxvY2FsCi0KLXNldCBleGU9cHl0aG9uCi1zZXQgcW1vZGU9Ci1zZXQgZGFzaE89Ci1QQVRIICVQQVRIJTslfmRwMC4uXC4uXC4uXHRjbHRrXGJpbgotCi06Q2hlY2tPcHRzCi1pZiAiJTEiPT0iLU8iIChzZXQgZGFzaE89LU8pICAgICAmIHNoaWZ0ICYgZ290byBDaGVja09wdHMKLWlmICIlMSI9PSItcSIgKHNldCBxbW9kZT15ZXMpICAgICYgc2hpZnQgJiBnb3RvIENoZWNrT3B0cwotaWYgIiUxIj09Ii1kIiAoc2V0IGV4ZT1weXRob25fZCkgJiBzaGlmdCAmIGdvdG8gQ2hlY2tPcHRzCi0KLXNldCBjbWQ9JWV4ZSUgJWRhc2hPJSAtRSAuLi8uLi9saWIvdGVzdC9yZWdydGVzdC5weSAlMSAlMiAlMyAlNCAlNSAlNiAlNyAlOCAlOQotaWYgZGVmaW5lZCBxbW9kZSBnb3RvIFFtb2RlCi0KLWVjaG8gRGVsZXRpbmcgLnB5Yy8ucHlvIGZpbGVzIC4uLgotJWV4ZSUgcm1weWMucHkKLQotZWNobyBvbgotJWNtZCUKLUBlY2hvIG9mZgotCi1lY2hvIEFib3V0IHRvIHJ1biBhZ2FpbiB3aXRob3V0IGRlbGV0aW5nIC5weWMvLnB5byBmaXJzdDoKLXBhdXNlCi0KLTpRbW9kZQotZWNobyBvbgotJWNtZCUKZGlmZiAtLWdpdCBhL1BDL1ZTNy4xL3NlbGVjdC52Y3Byb2ogYi9QQy9WUzcuMS9zZWxlY3QudmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MjUyZDQ1Li4wMDAwMDAwCi0tLSBhL1BDL1ZTNy4xL3NlbGVjdC52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSwyNTggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjcuMTAiDQotCU5hbWU9InNlbGVjdCINCi0JU2NjUHJvamVjdE5hbWU9InNlbGVjdCINCi0JU2NjTG9jYWxQYXRoPSIuLiI+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiIvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1yZWxlYXNlXHNlbGVjdCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtOREVCVUc7V0lOMzI7X1dJTkRPV1MiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi9zZWxlY3QucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vc2VsZWN0LnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDExMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL3NlbGVjdC5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtZGVidWdcc2VsZWN0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7X0RFQlVHO1dJTjMyO19XSU5ET1dTIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMyINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi9zZWxlY3RfZC5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjLG1zdmNydCINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vc2VsZWN0X2QucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTEwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vc2VsZWN0X2QubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZUl0YW5pdW18V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXGlhNjQtdGVtcC1yZWxlYXNlXHNlbGVjdCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL1VTRUNMOk1TX0lUQU5JVU0gL0dTLSINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO05ERUJVRztXSU4zMjtfV0lORE9XUyINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iRkFMU0UiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL01BQ0hJTkU6SUE2NCAvVVNFTElOSzpNU19TREsiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4vc2VsZWN0LnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL3NlbGVjdC5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMTAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9zZWxlY3QubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZUFNRDY0fFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9ImFtZDY0LXRlbXAtcmVsZWFzZVxzZWxlY3QiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9VU0VDTDpNU19PUFRFUk9OIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7TkRFQlVHO1dJTjMyO19XSU5ET1dTIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJGQUxTRSINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvTUFDSElORTpBTUQ2NCAvVVNFTElOSzpNU19TREsiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4vc2VsZWN0LnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL3NlbGVjdC5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMTAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9zZWxlY3QubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcc2VsZWN0bW9kdWxlLmMiPg0KLQkJPC9GaWxlPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzcuMS91bmljb2RlZGF0YS52Y3Byb2ogYi9QQy9WUzcuMS91bmljb2RlZGF0YS52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmNDdmOWIuLjAwMDAwMDAKLS0tIGEvUEMvVlM3LjEvdW5pY29kZWRhdGEudmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsMjQ3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI3LjEwIg0KLQlOYW1lPSJ1bmljb2RlZGF0YSINCi0JU2NjUHJvamVjdE5hbWU9InVuaWNvZGVkYXRhIg0KLQlTY2NMb2NhbFBhdGg9Ii4uIj4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIi8+DQotCTwvUGxhdGZvcm1zPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLXJlbGVhc2VcdW5pY29kZWRhdGEiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIg0KLQkJCUNoYXJhY3RlclNldD0iMiI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO1dJTjMyO05ERUJVRztfV0lORE9XUztfVVNSRExMO01NQVBfRVhQT1JUUyINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuL3VuaWNvZGVkYXRhLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi91bmljb2RlZGF0YS5wZGIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTIwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vdW5pY29kZWRhdGEubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLWRlYnVnXHVuaWNvZGVkYXRhIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO1dJTjMyO19ERUJVRztfV0lORE9XUztfVVNSRExMO01NQVBfRVhQT1JUUyINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMyINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi91bmljb2RlZGF0YV9kLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL3VuaWNvZGVkYXRhX2QucGRiIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDEyMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL3VuaWNvZGVkYXRhX2QubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZUl0YW5pdW18V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXGlhNjQtdGVtcC1yZWxlYXNlXHVuaWNvZGVkYXRhIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL1VTRUNMOk1TX0lUQU5JVU0gL0dTLSINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO1dJTjMyO05ERUJVRztfV0lORE9XUztfVVNSRExMO01NQVBfRVhQT1JUUyINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iRkFMU0UiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL01BQ0hJTkU6SUE2NCAvVVNFTElOSzpNU19TREsiDQotCQkJCU91dHB1dEZpbGU9Ii4vdW5pY29kZWRhdGEucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL3VuaWNvZGVkYXRhLnBkYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMjAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi91bmljb2RlZGF0YS5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlQU1ENjR8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iYW1kNjQtdGVtcC1yZWxlYXNlXHVuaWNvZGVkYXRhIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL1VTRUNMOk1TX09QVEVST04gL0dTLSINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO1dJTjMyO05ERUJVRztfV0lORE9XUztfVVNSRExMO01NQVBfRVhQT1JUUyINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iRkFMU0UiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL01BQ0hJTkU6QU1ENjQgL1VTRUxJTks6TVNfU0RLIg0KLQkJCQlPdXRwdXRGaWxlPSIuL3VuaWNvZGVkYXRhLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi91bmljb2RlZGF0YS5wZGIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTIwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vdW5pY29kZWRhdGEubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcdW5pY29kZWRhdGEuYyI+DQotCQk8L0ZpbGU+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTNy4xL3c5eHBvcGVuLnZjcHJvaiBiL1BDL1ZTNy4xL3c5eHBvcGVuLnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjlmM2I0ZS4uMDAwMDAwMAotLS0gYS9QQy9WUzcuMS93OXhwb3Blbi52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSwxMjEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjcuMTAiDQotCU5hbWU9Inc5eHBvcGVuIg0KLQlTY2NQcm9qZWN0TmFtZT0iIg0KLQlTY2NMb2NhbFBhdGg9IiI+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiIvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtZGVidWdcdzl4cG9wZW4iDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIg0KLQkJCUNoYXJhY3RlclNldD0iMiI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7V0lOMzI7X0RFQlVHO19XSU5ET1dTIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIzIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi93OXhwb3Blbl9kLmV4ZSINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL3c5eHBvcGVuX2QucGRiIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtcmVsZWFzZVx3OXhwb3BlbiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7V0lOMzI7TkRFQlVHO19XSU5ET1dTIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuXC4vdzl4cG9wZW4uZXhlIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL3c5eHBvcGVuLnBkYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1x3OXhwb3Blbi5jIj4NCi0JCTwvRmlsZT4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvd2luc291bmQudmNwcm9qIGIvUEMvVlM3LjEvd2luc291bmQudmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYzRjZjM5Li4wMDAwMDAwCi0tLSBhL1BDL1ZTNy4xL3dpbnNvdW5kLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDI1MSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iNy4xMCINCi0JTmFtZT0id2luc291bmQiDQotCVNjY1Byb2plY3ROYW1lPSJ3aW5zb3VuZCINCi0JU2NjTG9jYWxQYXRoPSIuLlwuLlxwYyI+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiIvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtZGVidWdcd2luc291bmQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIg0KLQkJCUNoYXJhY3RlclNldD0iMiI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7V0lOMzI7X0RFQlVHO19XSU5ET1dTO19VU1JETEw7V0lOU09VTkRfRVhQT1JUUyINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMyINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id2lubW0ubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuL3dpbnNvdW5kX2QucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vd2luc291bmRfZC5wZGIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTYwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vd2luc291bmRfZC5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1yZWxlYXNlXHdpbnNvdW5kIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtXSU4zMjtOREVCVUc7X1dJTkRPV1M7X1VTUkRMTDtXSU5TT1VORF9FWFBPUlRTIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Indpbm1tLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi93aW5zb3VuZC5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vd2luc291bmQucGRiIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDE2MDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL3dpbnNvdW5kLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2VJdGFuaXVtfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlxpYTY0LXRlbXAtcmVsZWFzZVx3aW5zb3VuZCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9VU0VDTDpNU19JVEFOSVVNIC9HUy0iDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtXSU4zMjtOREVCVUc7X1dJTkRPV1M7X1VTUkRMTDtXSU5TT1VORF9FWFBPUlRTIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJGQUxTRSINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvTUFDSElORTpJQTY0IC9VU0VMSU5LOk1TX1NESyINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id2lubW0ubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuL3dpbnNvdW5kLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi93aW5zb3VuZC5wZGIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTYwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vd2luc291bmQubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZUFNRDY0fFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9ImFtZDY0LXRlbXAtcmVsZWFzZVx3aW5zb3VuZCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9VU0VDTDpNU19PUFRFUk9OIC9HUy0iDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtXSU4zMjtOREVCVUc7X1dJTkRPV1M7X1VTUkRMTDtXSU5TT1VORF9FWFBPUlRTIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJGQUxTRSINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvTUFDSElORTpBTUQ2NCAvVVNFTElOSzpNU19TREsiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Indpbm1tLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi93aW5zb3VuZC5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vd2luc291bmQucGRiIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDE2MDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL3dpbnNvdW5kLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1x3aW5zb3VuZC5jIj4NCi0JCTwvRmlsZT4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvX2N0eXBlcy52Y3Byb2ogYi9QQy9WUzguMC9fY3R5cGVzLnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODk3MzIzMy4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9fY3R5cGVzLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDcwNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOC4wMCINCi0JTmFtZT0iX2N0eXBlcyINCi0JUHJvamVjdEdVSUQ9InswRTk3OTFEQi01OTNBLTQ2NUYtOThCQy02ODEwMTEzMTE2MTh9Ig0KLQlSb290TmFtZXNwYWNlPSJfY3R5cGVzIg0KLQlLZXl3b3JkPSJXaW4zMlByb2oiDQotCVRhcmdldEZyYW1ld29ya1ZlcnNpb249IjE5NjYxMyINCi0JPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiDQotCQkvPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0ieDY0Ig0KLQkJLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxUb29sRmlsZXM+DQotCTwvVG9vbEZpbGVzPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZF9kLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2YyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxQTAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZF9kLnZzcHJvcHM7Llx4NjQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2YyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxQTAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2YyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9Ii9FWFBPUlQ6RGxsR2V0Q2xhc3NPYmplY3QsUFJJVkFURSAvRVhQT1JUOkRsbENhblVubG9hZE5vdyxQUklWQVRFIg0KLQkJCQlTdWJTeXN0ZW09IjAiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMUEwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cTW9kdWxlc1xfY3R5cGVzXGxpYmZmaV9tc3ZjIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iL0VYUE9SVDpEbGxHZXRDbGFzc09iamVjdCxQUklWQVRFIC9FWFBPUlQ6RGxsQ2FuVW5sb2FkTm93LFBSSVZBVEUiDQotCQkJCVN1YlN5c3RlbT0iMCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxQTAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIvRVhQT1JUOkRsbEdldENsYXNzT2JqZWN0LFBSSVZBVEUgL0VYUE9SVDpEbGxDYW5VbmxvYWROb3csUFJJVkFURSINCi0JCQkJU3ViU3lzdGVtPSIwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDFBMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIvRVhQT1JUOkRsbEdldENsYXNzT2JqZWN0LFBSSVZBVEUgL0VYUE9SVDpEbGxDYW5VbmxvYWROb3csUFJJVkFURSINCi0JCQkJU3ViU3lzdGVtPSIwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDFBMDAwMCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cTW9kdWxlc1xfY3R5cGVzXGxpYmZmaV9tc3ZjIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iL0VYUE9SVDpEbGxHZXRDbGFzc09iamVjdCxQUklWQVRFIC9FWFBPUlQ6RGxsQ2FuVW5sb2FkTm93LFBSSVZBVEUiDQotCQkJCVN1YlN5c3RlbT0iMCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxQTAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2YyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9Ii9FWFBPUlQ6RGxsR2V0Q2xhc3NPYmplY3QsUFJJVkFURSAvRVhQT1JUOkRsbENhblVubG9hZE5vdyxQUklWQVRFIg0KLQkJCQlTdWJTeXN0ZW09IjAiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMUEwMDAwIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iSGVhZGVyIEZpbGVzIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xjdHlwZXMuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xjdHlwZXNfZGxmY24uaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2Y1xmZmkuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2Y1xmZmlfY29tbW9uLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmNcZmZpY29uZmlnLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmNcZmZpdGFyZ2V0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJTb3VyY2UgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfY3R5cGVzXF9jdHlwZXMuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xjYWxsYmFja3MuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xjYWxscHJvYy5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfY3R5cGVzXGNmaWVsZC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfY3R5cGVzXGxpYmZmaV9tc3ZjXGZmaS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfY3R5cGVzXG1hbGxvY19jbG9zdXJlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmNccHJlcF9jaWYuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xzdGdkaWN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmNcd2luMzIuYyINCi0JCQkJPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnfHg2NCINCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlfHg2NCINCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJQR0luc3RydW1lbnR8eDY0Ig0KLQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlBHVXBkYXRlfHg2NCINCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmNcd2luNjQuYXNtIg0KLQkJCQk+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnfHg2NCINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJCQkJQ29tbWFuZExpbmU9Im1sNjQgL25vbG9nbyAvYyAvWmkgL0ZvICZxdW90OyQoSW50RGlyKVx3aW42NC5vYmomcXVvdDsgJnF1b3Q7JChJbnB1dFBhdGgpJnF1b3Q7JiN4MEQ7JiN4MEE7Ig0KLQkJCQkJCU91dHB1dHM9IiQoSW50RGlyKVx3aW42NC5vYmoiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2V8eDY0Ig0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkJCQlDb21tYW5kTGluZT0ibWw2NCAvbm9sb2dvIC9jIC9GbyAmcXVvdDskKEludERpcilcd2luNjQub2JqJnF1b3Q7ICZxdW90OyQoSW5wdXRQYXRoKSZxdW90OyYjeDBEOyYjeDBBOyINCi0JCQkJCQlPdXRwdXRzPSIkKEludERpcilcd2luNjQub2JqIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJQR0luc3RydW1lbnR8V2luMzIiDQotCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlBHSW5zdHJ1bWVudHx4NjQiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCQkJCUNvbW1hbmRMaW5lPSJtbDY0IC9ub2xvZ28gL2MgL0ZvICZxdW90OyQoSW50RGlyKVx3aW42NC5vYmomcXVvdDsgJnF1b3Q7JChJbnB1dFBhdGgpJnF1b3Q7JiN4MEQ7JiN4MEE7Ig0KLQkJCQkJCU91dHB1dHM9IiQoSW50RGlyKVx3aW42NC5vYmoiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlBHVXBkYXRlfFdpbjMyIg0KLQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJQR1VwZGF0ZXx4NjQiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCQkJCUNvbW1hbmRMaW5lPSJtbDY0IC9ub2xvZ28gL2MgL0ZvICZxdW90OyQoSW50RGlyKVx3aW42NC5vYmomcXVvdDsgJnF1b3Q7JChJbnB1dFBhdGgpJnF1b3Q7JiN4MEQ7JiN4MEE7Ig0KLQkJCQkJCU91dHB1dHM9IiQoSW50RGlyKVx3aW42NC5vYmoiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzguMC9fY3R5cGVzX3Rlc3QudmNwcm9qIGIvUEMvVlM4LjAvX2N0eXBlc190ZXN0LnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDk3MjQxZS4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9fY3R5cGVzX3Rlc3QudmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsNTIxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJfY3R5cGVzX3Rlc3QiDQotCVByb2plY3RHVUlEPSJ7OUVDNzE5MEEtMjQ5Ri00MTgwLUE5MDAtNTQ4RkRDRjMwNTVGfSINCi0JUm9vdE5hbWVzcGFjZT0iX2N0eXBlc190ZXN0Ig0KLQlLZXl3b3JkPSJXaW4zMlByb2oiDQotCVRhcmdldEZyYW1ld29ya1ZlcnNpb249IjE5NjYxMyINCi0JPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiDQotCQkvPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0ieDY0Ig0KLQkJLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxUb29sRmlsZXM+DQotCTwvVG9vbEZpbGVzPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZF9kLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZF9kLnZzcHJvcHM7Llx4NjQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iSGVhZGVyIEZpbGVzIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xfY3R5cGVzX3Rlc3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcX2N0eXBlc190ZXN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvX2VsZW1lbnR0cmVlLnZjcHJvaiBiL1BDL1ZTOC4wL19lbGVtZW50dHJlZS52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1N2RhNzIuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvX2VsZW1lbnR0cmVlLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDYxMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOC4wMCINCi0JTmFtZT0iX2VsZW1lbnR0cmVlIg0KLQlQcm9qZWN0R1VJRD0iezE3RTFFMDQ5LUMzMDktNEQ3OS04NDNGLUFFNDgzQzI2NEFFQX0iDQotCVJvb3ROYW1lc3BhY2U9Il9lbGVtZW50dHJlZSINCi0JS2V5d29yZD0iV2luMzJQcm9qIg0KLQlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxOTY2MTMiDQotCT4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIg0KLQkJLz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9Ing2NCINCi0JCS8+DQotCTwvUGxhdGZvcm1zPg0KLQk8VG9vbEZpbGVzPg0KLQk8L1Rvb2xGaWxlcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxNb2R1bGVzXGV4cGF0Ig0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iWE1MX05TO1hNTF9EVEQ7QllURU9SREVSPTEyMzQ7WE1MX0NPTlRFWFRfQllURVM9MTAyNDtVU0VfUFlFWFBBVF9DQVBJO1hNTF9TVEFUSUM7SEFWRV9NRU1NT1ZFIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDEwMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3x4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkX2QudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cTW9kdWxlc1xleHBhdCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlhNTF9OUztYTUxfRFREO0JZVEVPUkRFUj0xMjM0O1hNTF9DT05URVhUX0JZVEVTPTEwMjQ7VVNFX1BZRVhQQVRfQ0FQSTtYTUxfU1RBVElDO0hBVkVfTUVNTU9WRSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMDAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXE1vZHVsZXNcZXhwYXQiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJYTUxfTlM7WE1MX0RURDtCWVRFT1JERVI9MTIzNDtYTUxfQ09OVEVYVF9CWVRFUz0xMDI0O1VTRV9QWUVYUEFUX0NBUEk7WE1MX1NUQVRJQztIQVZFX01FTU1PVkUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTAwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cTW9kdWxlc1xleHBhdCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlhNTF9OUztYTUxfRFREO0JZVEVPUkRFUj0xMjM0O1hNTF9DT05URVhUX0JZVEVTPTEwMjQ7VVNFX1BZRVhQQVRfQ0FQSTtYTUxfU1RBVElDO0hBVkVfTUVNTU9WRSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMDAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxNb2R1bGVzXGV4cGF0Ig0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iWE1MX05TO1hNTF9EVEQ7QllURU9SREVSPTEyMzQ7WE1MX0NPTlRFWFRfQllURVM9MTAyNDtVU0VfUFlFWFBBVF9DQVBJO1hNTF9TVEFUSUM7SEFWRV9NRU1NT1ZFIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDEwMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxNb2R1bGVzXGV4cGF0Ig0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iWE1MX05TO1hNTF9EVEQ7QllURU9SREVSPTEyMzQ7WE1MX0NPTlRFWFRfQllURVM9MTAyNDtVU0VfUFlFWFBBVF9DQVBJO1hNTF9TVEFUSUM7SEFWRV9NRU1NT1ZFIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDEwMDAwMCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cTW9kdWxlc1xleHBhdCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlhNTF9OUztYTUxfRFREO0JZVEVPUkRFUj0xMjM0O1hNTF9DT05URVhUX0JZVEVTPTEwMjQ7VVNFX1BZRVhQQVRfQ0FQSTtYTUxfU1RBVElDO0hBVkVfTUVNTU9WRSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMDAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXE1vZHVsZXNcZXhwYXQiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJYTUxfTlM7WE1MX0RURDtCWVRFT1JERVI9MTIzNDtYTUxfQ09OVEVYVF9CWVRFUz0xMDI0O1VTRV9QWUVYUEFUX0NBUEk7WE1MX1NUQVRJQztIQVZFX01FTU1PVkUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTAwMDAwIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iSGVhZGVyIEZpbGVzIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXhwYXRcYXNjaWkuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXhwYXRcYXNjaWl0YWIuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXhwYXRcZXhwYXQuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXhwYXRcZXhwYXRfY29uZmlnLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGV4cGF0XGV4cGF0X2V4dGVybmFsLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGV4cGF0XGlhc2NpaXRhYi5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xleHBhdFxpbnRlcm5hbC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xleHBhdFxsYXRpbjF0YWIuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXhwYXRcbWFjY29uZmlnLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGV4cGF0XG5hbWV0YWIuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXhwYXRccHlleHBhdG5zLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGV4cGF0XHV0Zjh0YWIuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXhwYXRcd2luY29uZmlnLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGV4cGF0XHhtbHJvbGUuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXhwYXRceG1sdG9rLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJTb3VyY2UgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfZWxlbWVudHRyZWUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXhwYXRceG1scGFyc2UuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXhwYXRceG1scm9sZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xleHBhdFx4bWx0b2suYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzguMC9faGFzaGxpYi52Y3Byb2ogYi9QQy9WUzguMC9faGFzaGxpYi52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwMzFlMmUuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvX2hhc2hsaWIudmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsNTM3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJfaGFzaGxpYiINCi0JUHJvamVjdEdVSUQ9Ins0NDdGMDVBOC1GNTgxLTRDQUMtQTQ2Ni01QUM3OTM2RTIwN0V9Ig0KLQlSb290TmFtZXNwYWNlPSJfaGFzaGxpYiINCi0JS2V5d29yZD0iV2luMzJQcm9qIg0KLQlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxOTY2MTMiDQotCT4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIg0KLQkJLz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9Ing2NCINCi0JCS8+DQotCTwvUGxhdGZvcm1zPg0KLQk8VG9vbEZpbGVzPg0KLQk8L1Rvb2xGaWxlcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKG9wZW5zc2xEaXIpXGluYzMyIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCQlDb21tYW5kTGluZT0iIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliICQob3BlbnNzbERpcilcb3V0MzJcbGliZWF5MzIubGliICQob3BlbnNzbERpcilcb3V0MzJcc3NsZWF5MzIubGliIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKG9wZW5zc2xEaXIpXGluYzY0Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCQlDb21tYW5kTGluZT0iIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliICQob3BlbnNzbERpcilcb3V0NjRcbGliZWF5MzIubGliICQob3BlbnNzbERpcilcb3V0NjRcc3NsZWF5MzIubGliIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKG9wZW5zc2xEaXIpXGluYzMyIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCQlDb21tYW5kTGluZT0iIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliICQob3BlbnNzbERpcilcb3V0MzJcbGliZWF5MzIubGliICQob3BlbnNzbERpcilcb3V0MzJcc3NsZWF5MzIubGliIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChvcGVuc3NsRGlyKVxpbmM2NCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkJQ29tbWFuZExpbmU9IiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XHNzbGVheTMyLmxpYiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQob3BlbnNzbERpcilcaW5jMzIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJCUNvbW1hbmRMaW5lPSIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIgJChvcGVuc3NsRGlyKVxvdXQzMlxsaWJlYXkzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQzMlxzc2xlYXkzMi5saWIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChvcGVuc3NsRGlyKVxpbmM2NCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkJQ29tbWFuZExpbmU9IiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XHNzbGVheTMyLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChvcGVuc3NsRGlyKVxpbmMzMiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkJQ29tbWFuZExpbmU9IiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDMyXGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDMyXHNzbGVheTMyLmxpYiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChvcGVuc3NsRGlyKVxpbmM2NCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkJQ29tbWFuZExpbmU9IiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XHNzbGVheTMyLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9oYXNob3BlbnNzbC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL19tc2kudmNwcm9qIGIvUEMvVlM4LjAvX21zaS52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk5OTcxYzYuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvX21zaS52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSw1MjkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9Il9tc2kiDQotCVByb2plY3RHVUlEPSJ7MzFGRkM0NzgtN0I0QS00M0U4LTk5NTQtOEQwM0UyMTg3RTlDfSINCi0JUm9vdE5hbWVzcGFjZT0iX21zaSINCi0JS2V5d29yZD0iV2luMzJQcm9qIg0KLQlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxOTY2MTMiDQotCT4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIg0KLQkJLz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9Ing2NCINCi0JCS8+DQotCTwvUGxhdGZvcm1zPg0KLQk8VG9vbEZpbGVzPg0KLQk8L1Rvb2xGaWxlcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJmY2kubGliIG1zaS5saWIgcnBjcnQ0LmxpYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxNjAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZF9kLnZzcHJvcHM7Llx4NjQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9ImZjaS5saWIgbXNpLmxpYiBycGNydDQubGliIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDE2MDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iZmNpLmxpYiBtc2kubGliIHJwY3J0NC5saWIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTYwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iZmNpLmxpYiBtc2kubGliIHJwY3J0NC5saWIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTYwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iZmNpLmxpYiBtc2kubGliIHJwY3J0NC5saWIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTYwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9ImZjaS5saWIgbXNpLmxpYiBycGNydDQubGliIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDE2MDAwMCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iZmNpLmxpYiBtc2kubGliIHJwY3J0NC5saWIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTYwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJmY2kubGliIG1zaS5saWIgcnBjcnQ0LmxpYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxNjAwMDAiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJTb3VyY2UgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUENcX21zaS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL19tdWx0aXByb2Nlc3NpbmcudmNwcm9qIGIvUEMvVlM4LjAvX211bHRpcHJvY2Vzc2luZy52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmMWNhZmMuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvX211bHRpcHJvY2Vzc2luZy52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSw1NDUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9Il9tdWx0aXByb2Nlc3NpbmciDQotCVByb2plY3RHVUlEPSJ7OUU0OEIzMDAtMzdEMS0xMURELThDNDEtMDA1MDU2QzAwMDA4fSINCi0JUm9vdE5hbWVzcGFjZT0iX211bHRpcHJvY2Vzc2luZyINCi0JS2V5d29yZD0iV2luMzJQcm9qIg0KLQlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxOTY2MTMiDQotCT4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIg0KLQkJLz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9Ing2NCINCi0JCS8+DQotCTwvUGxhdGZvcm1zPg0KLQk8VG9vbEZpbGVzPg0KLQk8L1Rvb2xGaWxlcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTFEMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3x4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkX2QudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxRDAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMUQwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxRDAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTFEMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTFEMDAwMCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxRDAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMUQwMDAwIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iSGVhZGVyIEZpbGVzIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX211bHRpcHJvY2Vzc2luZ1xtdWx0aXByb2Nlc3NpbmcuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9tdWx0aXByb2Nlc3NpbmdcbXVsdGlwcm9jZXNzaW5nLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9tdWx0aXByb2Nlc3Npbmdcc2VtYXBob3JlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9tdWx0aXByb2Nlc3Npbmdcd2luMzJfZnVuY3Rpb25zLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvX3NvY2tldC52Y3Byb2ogYi9QQy9WUzguMC9fc29ja2V0LnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGFiZDk4Mi4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9fc29ja2V0LnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDUzNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOC4wMCINCi0JTmFtZT0iX3NvY2tldCINCi0JUHJvamVjdEdVSUQ9Ins4NjkzN0Y1My1DMTg5LTQwRUYtOENFOC04NzU5RDhFN0Q0ODB9Ig0KLQlSb290TmFtZXNwYWNlPSJfc29ja2V0Ig0KLQlLZXl3b3JkPSJXaW4zMlByb2oiDQotCVRhcmdldEZyYW1ld29ya1ZlcnNpb249IjE5NjYxMyINCi0JPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiDQotCQkvPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0ieDY0Ig0KLQkJLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxUb29sRmlsZXM+DQotCTwvVG9vbEZpbGVzPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZF9kLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMUQwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTFEMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxRDAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTFEMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMUQwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMUQwMDAwIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTFEMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxRDAwMDAiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJIZWFkZXIgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xzb2NrZXRtb2R1bGUuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHNvY2tldG1vZHVsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL19zcWxpdGUzLnZjcHJvaiBiL1BDL1ZTOC4wL19zcWxpdGUzLnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjRmMTlmMS4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9fc3FsaXRlMy52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSw2MTMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9Il9zcWxpdGUzIg0KLQlQcm9qZWN0R1VJRD0iezEzQ0VDQjk3LTQxMTktNDMxNi05RDQyLTg1MzQwMTlBNUE0NH0iDQotCVJvb3ROYW1lc3BhY2U9Il9zcWxpdGUzIg0KLQlLZXl3b3JkPSJXaW4zMlByb2oiDQotCVRhcmdldEZyYW1ld29ya1ZlcnNpb249IjE5NjYxMyINCi0JPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiDQotCQkvPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0ieDY0Ig0KLQkJLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxUb29sRmlsZXM+DQotCTwvVG9vbEZpbGVzPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZF9kLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXHNxbGl0ZS0zLjYuMjEiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJNT0RVTEVfTkFNRT1cJnF1b3Q7c3FsaXRlM1wmcXVvdDsiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMTgwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxzcWxpdGUtMy42LjIxIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTU9EVUxFX05BTUU9XCZxdW90O3NxbGl0ZTNcJnF1b3Q7Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTE4MDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5cc3FsaXRlLTMuNi4yMSINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik1PRFVMRV9OQU1FPVwmcXVvdDtzcWxpdGUzXCZxdW90OyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxODAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxzcWxpdGUtMy42LjIxIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTU9EVUxFX05BTUU9XCZxdW90O3NxbGl0ZTNcJnF1b3Q7Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTE4MDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXHNxbGl0ZS0zLjYuMjEiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJNT0RVTEVfTkFNRT1cJnF1b3Q7c3FsaXRlM1wmcXVvdDsiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMTgwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXHNxbGl0ZS0zLjYuMjEiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJNT0RVTEVfTkFNRT1cJnF1b3Q7c3FsaXRlM1wmcXVvdDsiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMTgwMDAwIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxzcWxpdGUtMy42LjIxIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTU9EVUxFX05BTUU9XCZxdW90O3NxbGl0ZTNcJnF1b3Q7Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTE4MDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5cc3FsaXRlLTMuNi4yMSINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik1PRFVMRV9OQU1FPVwmcXVvdDtzcWxpdGUzXCZxdW90OyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxODAwMDAiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJIZWFkZXIgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3FsaXRlXGNhY2hlLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zcWxpdGVcY29ubmVjdGlvbi5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3FsaXRlXGN1cnNvci5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3FsaXRlXG1pY3JvcHJvdG9jb2xzLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zcWxpdGVcbW9kdWxlLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zcWxpdGVccHJlcGFyZV9wcm90b2NvbC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3FsaXRlXHJvdy5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3FsaXRlXHNxbGl0ZWNvbXBhdC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3FsaXRlXHN0YXRlbWVudC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3FsaXRlXHV0aWwuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zcWxpdGVcY2FjaGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxjb25uZWN0aW9uLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zcWxpdGVcY3Vyc29yLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zcWxpdGVcbWljcm9wcm90b2NvbHMuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxtb2R1bGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxwcmVwYXJlX3Byb3RvY29sLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zcWxpdGVccm93LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zcWxpdGVcc3RhdGVtZW50LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zcWxpdGVcdXRpbC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL19zc2wudmNwcm9qIGIvUEMvVlM4LjAvX3NzbC52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5MjY3YTQuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvX3NzbC52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSw1MzcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9Il9zc2wiDQotCVByb2plY3RHVUlEPSJ7QzZFMjBGODQtMzI0Ny00QUQ2LUIwNTEtQjA3MzI2OEY3M0JBfSINCi0JUm9vdE5hbWVzcGFjZT0iX3NzbCINCi0JS2V5d29yZD0iV2luMzJQcm9qIg0KLQlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxOTY2MTMiDQotCT4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIg0KLQkJLz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9Ing2NCINCi0JCS8+DQotCTwvUGxhdGZvcm1zPg0KLQk8VG9vbEZpbGVzPg0KLQk8L1Rvb2xGaWxlcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKG9wZW5zc2xEaXIpXGluYzMyIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCQlDb21tYW5kTGluZT0iIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliICQob3BlbnNzbERpcilcb3V0MzJcbGliZWF5MzIubGliICQob3BlbnNzbERpcilcb3V0MzJcc3NsZWF5MzIubGliIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKG9wZW5zc2xEaXIpXGluYzY0Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCQlDb21tYW5kTGluZT0iIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliICQob3BlbnNzbERpcilcb3V0NjRcbGliZWF5MzIubGliICQob3BlbnNzbERpcilcb3V0NjRcc3NsZWF5MzIubGliIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKG9wZW5zc2xEaXIpXGluYzMyIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCQlDb21tYW5kTGluZT0iIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliICQob3BlbnNzbERpcilcb3V0MzJcbGliZWF5MzIubGliICQob3BlbnNzbERpcilcb3V0MzJcc3NsZWF5MzIubGliIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChvcGVuc3NsRGlyKVxpbmM2NCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkJQ29tbWFuZExpbmU9IiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XHNzbGVheTMyLmxpYiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQob3BlbnNzbERpcilcaW5jMzIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJCUNvbW1hbmRMaW5lPSIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIgJChvcGVuc3NsRGlyKVxvdXQzMlxsaWJlYXkzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQzMlxzc2xlYXkzMi5saWIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChvcGVuc3NsRGlyKVxpbmM2NCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkJQ29tbWFuZExpbmU9IiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XHNzbGVheTMyLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChvcGVuc3NsRGlyKVxpbmMzMiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkJQ29tbWFuZExpbmU9IiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDMyXGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDMyXHNzbGVheTMyLmxpYiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChvcGVuc3NsRGlyKVxpbmM2NCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkJQ29tbWFuZExpbmU9IiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XHNzbGVheTMyLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zc2wuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzguMC9fdGtpbnRlci52Y3Byb2ogYi9QQy9WUzguMC9fdGtpbnRlci52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3MDBiZGUuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvX3RraW50ZXIudmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsNTQxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJfdGtpbnRlciINCi0JUHJvamVjdEdVSUQ9Ins0OTQ2RUNBQy0yRTY5LTRCRjgtQTkwQS1GNTEzNkY1MDk0REZ9Ig0KLQlSb290TmFtZXNwYWNlPSJfdGtpbnRlciINCi0JS2V5d29yZD0iV2luMzJQcm9qIg0KLQlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxOTY2MTMiDQotCT4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIg0KLQkJLz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9Ing2NCINCi0JCS8+DQotCTwvUGxhdGZvcm1zPg0KLQk8VG9vbEZpbGVzPg0KLQk8L1Rvb2xGaWxlcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKHRjbHRrRGlyKVxpbmNsdWRlIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lUSF9BUFBJTklUIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIkKHRjbHRrTGliRGVidWcpIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKHRjbHRrNjREaXIpXGluY2x1ZGUiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSVRIX0FQUElOSVQiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IiQodGNsdGs2NExpYkRlYnVnKSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJCh0Y2x0a0RpcilcaW5jbHVkZSINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJVEhfQVBQSU5JVCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iJCh0Y2x0a0xpYikiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKHRjbHRrNjREaXIpXGluY2x1ZGUiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSVRIX0FQUElOSVQiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IiQodGNsdGs2NExpYikiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKHRjbHRrRGlyKVxpbmNsdWRlIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lUSF9BUFBJTklUIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIkKHRjbHRrTGliKSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKHRjbHRrNjREaXIpXGluY2x1ZGUiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSVRIX0FQUElOSVQiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IiQodGNsdGs2NExpYikiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQodGNsdGtEaXIpXGluY2x1ZGUiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSVRIX0FQUElOSVQiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IiQodGNsdGtMaWIpIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKHRjbHRrNjREaXIpXGluY2x1ZGUiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSVRIX0FQUElOSVQiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IiQodGNsdGs2NExpYikiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJTb3VyY2UgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfdGtpbnRlci5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x0a2FwcGluaXQuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzguMC9iZGlzdF93aW5pbnN0LnZjcHJvaiBiL1BDL1ZTOC4wL2JkaXN0X3dpbmluc3QudmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMTFlZGYyLi4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL2JkaXN0X3dpbmluc3QudmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsMjcwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJiZGlzdF93aW5pbnN0Ig0KLQlQcm9qZWN0R1VJRD0ie0VCMUMxOUMxLTFGMTgtNDIxRS05NzM1LUNBRUU2OURDNkEzQ30iDQotCVJvb3ROYW1lc3BhY2U9Indpbmluc3QiDQotCVRhcmdldEZyYW1ld29ya1ZlcnNpb249IjEzMTA3MiINCi0JPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiDQotCQkvPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0ieDY0Ig0KLQkJLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxUb29sRmlsZXM+DQotCTwvVG9vbEZpbGVzPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuLlwuLlxsaWJcZGlzdHV0aWxzXGNvbW1hbmQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQotCQkJCU1rVHlwTGliQ29tcGF0aWJsZT0idHJ1ZSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMSINCi0JCQkJVHlwZUxpYnJhcnlOYW1lPSIuXC4uXC4uXGxpYlxkaXN0dXRpbHNcY29tbWFuZFx3aW5pbnN0LnRsYiINCi0JCQkJSGVhZGVyRmlsZU5hbWU9IiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMSINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXFBDXGJkaXN0X3dpbmluc3Q7Li5cLi5cSW5jbHVkZTsuLlwuLlxNb2R1bGVzXHpsaWIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURSINCi0JCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjAiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cUEM7Li5cLi5cUENcYmRpc3Rfd2luaW5zdDsuLlwuLlxJbmNsdWRlIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJjb21jdGwzMi5saWIgaW1hZ2VobHAubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuLlwuLlxsaWJcZGlzdHV0aWxzXGNvbW1hbmRcd2luaW5zdC04LjAuZXhlIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCi0JCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0iTElCQyINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLi5cLi5cbGliXGRpc3R1dGlsc1xjb21tYW5kXHdpbmluc3QtOC4wLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlSYW5kb21pemVkQmFzZUFkZHJlc3M9IjEiDQotCQkJCURhdGFFeGVjdXRpb25QcmV2ZW50aW9uPSIwIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8eDY0Ig0KLQkJCU91dHB1dERpcmVjdG9yeT0iJChQbGF0Zm9ybU5hbWUpXCQoQ29uZmlndXJhdGlvbk5hbWUpIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iJChQbGF0Zm9ybU5hbWUpXCQoQ29uZmlndXJhdGlvbk5hbWUpIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KLQkJCQlNa1R5cExpYkNvbXBhdGlibGU9InRydWUiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJCVR5cGVMaWJyYXJ5TmFtZT0iLlwuLlwuLlxsaWJcZGlzdHV0aWxzXGNvbW1hbmRcd2luaW5zdC50bGIiDQotCQkJCUhlYWRlckZpbGVOYW1lPSIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjEiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxQQ1xiZGlzdF93aW5pbnN0Oy4uXC4uXEluY2x1ZGU7Li5cLi5cTW9kdWxlc1x6bGliIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEUiDQotCQkJCVN0cmluZ1Bvb2xpbmc9InRydWUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIwIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQotCQkJCUN1bHR1cmU9IjAiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXFBDOy4uXC4uXFBDXGJkaXN0X3dpbmluc3Q7Li5cLi5cSW5jbHVkZSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iY29tY3RsMzIubGliIGltYWdlaGxwLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cbGliXGRpc3R1dGlsc1xjb21tYW5kXHdpbmluc3QtOC4wLWFtZDY0LmV4ZSINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9IkxJQkMiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii4uXC4uXGxpYlxkaXN0dXRpbHNcY29tbWFuZFx3aW5pbnN0LTguMC1hbWQ2NC5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJUmFuZG9taXplZEJhc2VBZGRyZXNzPSIxIg0KLQkJCQlEYXRhRXhlY3V0aW9uUHJldmVudGlvbj0iMCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCi0JCQlGaWx0ZXI9ImNwcDtjO2N4eDtyYztkZWY7cjtvZGw7aWRsO2hwajtiYXQiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUENcYmRpc3Rfd2luaW5zdFxleHRyYWN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xiZGlzdF93aW5pbnN0XGluc3RhbGwuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsdGVyDQotCQkJCU5hbWU9InpsaWIiDQotCQkJCT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXGFkbGVyMzIuYyINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcY3JjMzIuYyINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcaW5mZmFzdC5jIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlxpbmZsYXRlLmMiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXGluZnRyZWVzLmMiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXHp1dGlsLmMiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQk8L0ZpbHRlcj4NCi0JCTwvRmlsdGVyPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IkhlYWRlciBGaWxlcyINCi0JCQlGaWx0ZXI9Img7aHBwO2h4eDtobTtpbmwiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUENcYmRpc3Rfd2luaW5zdFxhcmNoaXZlLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJSZXNvdXJjZSBGaWxlcyINCi0JCQlGaWx0ZXI9ImljbztjdXI7Ym1wO2RsZztyYzI7cmN0O2JpbjtyZ3M7Z2lmO2pwZztqcGVnO2pwZSINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xiZGlzdF93aW5pbnN0XGluc3RhbGwucmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xiZGlzdF93aW5pbnN0XFB5dGhvblBvd2VyZWQuYm1wIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL2J1aWxkLmJhdCBiL1BDL1ZTOC4wL2J1aWxkLmJhdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJjODE4Ni4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9idWlsZC5iYXQKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi1AZWNobyBvZmYKLXJlbSBBIGJhdGNoIHByb2dyYW0gdG8gYnVpbGQgb3IgcmVidWlsZCBhIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbi4KLXJlbSBqdXN0IGZvciBjb252ZW5pZW5jZS4KLQotc2V0bG9jYWwKLXNldCBwbGF0Zj1XaW4zMgotc2V0IGNvbmY9UmVsZWFzZQotc2V0IGJ1aWxkPS9idWlsZAotCi06Q2hlY2tPcHRzCi1pZiAiJTEiPT0iLWMiIChzZXQgY29uZj0lMikgICAgICYgc2hpZnQgJiBzaGlmdCAmIGdvdG8gQ2hlY2tPcHRzCi1pZiAiJTEiPT0iLXAiIChzZXQgcGxhdGY9JTIpICYgc2hpZnQgJiBzaGlmdCAmIGdvdG8gQ2hlY2tPcHRzCi1pZiAiJTEiPT0iLXIiIChzZXQgYnVpbGQ9L3JlYnVpbGQpICAgICYgc2hpZnQgJiBnb3RvIENoZWNrT3B0cwotCi1zZXQgY21kPWRldmVudiBwY2J1aWxkLnNsbiAlYnVpbGQlICIlY29uZiV8JXBsYXRmJSIKLWVjaG8gJWNtZCUKLSVjbWQlCmRpZmYgLS1naXQgYS9QQy9WUzguMC9idWlsZF9lbnYuYmF0IGIvUEMvVlM4LjAvYnVpbGRfZW52LmJhdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGM2N2FlMy4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9idWlsZF9lbnYuYmF0CisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotQCVjb21zcGVjJSAvayBlbnYuYmF0ICUqCmRpZmYgLS1naXQgYS9QQy9WUzguMC9idWlsZF9wZ28uYmF0IGIvUEMvVlM4LjAvYnVpbGRfcGdvLmJhdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTM3YjViZi4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9idWlsZF9wZ28uYmF0CisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotQGVjaG8gb2ZmCi1yZW0gQSBiYXRjaCBwcm9ncmFtIHRvIGJ1aWxkIFBHTyAoUHJvZmlsZSBndWlkZWQgb3B0aW1pemF0aW9uKSBieSBmaXJzdAotcmVtIGJ1aWxkaW5nIGluc3RydW1lbnRlZCBiaW5hcmllcywgdGhlbiBydW5uaW5nIHRoZSB0ZXN0c3VpdGUsIGFuZAotcmVtIGZpbmFsbHkgYnVpbGRpbmcgdGhlIG9wdGltaXplZCBjb2RlLgotcmVtIE5vdGUsIGFmdGVyIHRoZSBmaXJzdCBpbnN0cnVtZW50ZWQgcnVuLCBvbmUgY2FuIGp1c3Qga2VlcCBvbgotcmVtIGJ1aWxkaW5nIHRoZSBQR1VwZGF0ZSBjb25maWd1cmF0aW9uIHdoaWxlIGRldmVsb3BpbmcuCi0KLXNldGxvY2FsCi1zZXQgcGxhdGY9V2luMzIKLQotcmVtIHVzZSB0aGUgcGVyZm9ybWFuY2UgdGVzdHN1aXRlLiAgVGhpcyBpcyBxdWljayBhbmQgc2ltcGxlCi1zZXQgam9iMT0uLlwuLlx0b29sc1xweWJlbmNoXHB5YmVuY2gucHkgLW4gMSAtQyAxIC0td2l0aC1nYwotc2V0IHBhdGgxPS4uXC4uXHRvb2xzXHB5YmVuY2gKLQotcmVtIG9yIHRoZSB3aG9sZSB0ZXN0c3VpdGUgZm9yIG1vcmUgdGhvcm91Z2ggdGVzdGluZwotc2V0IGpvYjI9Li5cLi5cbGliXHRlc3RccmVncnRlc3QucHkKLXNldCBwYXRoMj0uLlwuLlxsaWIKLQotc2V0IGpvYj0lam9iMSUKLXNldCBjbHJwYXRoPSVwYXRoMSUKLQotOkNoZWNrT3B0cwotaWYgIiUxIj09Ii1wIiAoc2V0IHBsYXRmPSUyKSAmIHNoaWZ0ICYgc2hpZnQgJiBnb3RvIENoZWNrT3B0cwotaWYgIiUxIj09Ii0yIiAoc2V0IGpvYj0lam9iMiUpICYgKHNldCBjbHJwYXRoPSVwYXRoMiUpICYgc2hpZnQgJiBnb3RvIENoZWNrT3B0cwotCi1zZXQgUEdJPSVwbGF0ZiUtcGdpCi1zZXQgUEdPPSVwbGF0ZiUtcGdvCi0KLUBlY2hvIG9uCi1yZW0gYnVpbGQgdGhlIGluc3RydW1lbnRlZCB2ZXJzaW9uCi1jYWxsIGJ1aWxkIC1wICVwbGF0ZiUgLWMgUEdJbnN0cnVtZW50Ci0KLXJlbSByZW1vdmUgLnB5YyBmaWxlcywgLnBnYyBmaWxlcyBhbmQgZXhlY3V0ZSB0aGUgam9iCi0lUEdJJVxweXRob24uZXhlIHJtcHljLnB5ICVjbHJwYXRoJQotZGVsICVQR0klXCoucGdjCi0lUEdJJVxweXRob24uZXhlICVqb2IlCi0KLXJlbSBmaW5hbGx5IGJ1aWxkIHRoZSBvcHRpbWl6ZWQgdmVyc2lvbgotaWYgZXhpc3QgJVBHTyUgZGVsIC9zIC9xICVQR08lCi1jYWxsIGJ1aWxkIC1wICVwbGF0ZiUgLWMgUEdVcGRhdGUKLQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvYnVpbGRfc3NsLmJhdCBiL1BDL1ZTOC4wL2J1aWxkX3NzbC5iYXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM1N2IwOGIuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvYnVpbGRfc3NsLmJhdAorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLUBlY2hvIG9mZgotaWYgbm90IGRlZmluZWQgSE9TVF9QWVRIT04gKAotICBpZiAlMSBFUVUgRGVidWcgKAotICAgIHNldCBIT1NUX1BZVEhPTj1weXRob25fZC5leGUKLSAgICBpZiBub3QgZXhpc3QgcHl0aG9uMzNfZC5kbGwgZXhpdCAxCi0gICkgRUxTRSAoCi0gICAgc2V0IEhPU1RfUFlUSE9OPXB5dGhvbi5leGUKLSAgICBpZiBub3QgZXhpc3QgcHl0aG9uMzMuZGxsIGV4aXQgMQotICApCi0pCi0lSE9TVF9QWVRIT04lIGJ1aWxkX3NzbC5weSAlMSAlMiAlMwotCmRpZmYgLS1naXQgYS9QQy9WUzguMC9idWlsZF9zc2wucHkgYi9QQy9WUzguMC9idWlsZF9zc2wucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjMTNlZjUuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvYnVpbGRfc3NsLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjc3ICswLDAgQEAKLSMgU2NyaXB0IGZvciBidWlsZGluZyB0aGUgX3NzbCBhbmQgX2hhc2hsaWIgbW9kdWxlcyBmb3IgV2luZG93cy4KLSMgVXNlcyBQZXJsIHRvIHNldHVwIHRoZSBPcGVuU1NMIGVudmlyb25tZW50IGNvcnJlY3RseQotIyBhbmQgYnVpbGQgT3BlblNTTCwgdGhlbiBpbnZva2VzIGEgc2ltcGxlIG5tYWtlIHNlc3Npb24KLSMgZm9yIHRoZSBhY3R1YWwgX3NzbC5weWQgYW5kIF9oYXNobGliLnB5ZCBETExzLgotCi0jIFRIRU9SRVRJQ0FMTFksIHlvdSBjYW46Ci0jICogVW5wYWNrIHRoZSBsYXRlc3QgU1NMIHJlbGVhc2Ugb25lIGxldmVsIGFib3ZlIHlvdXIgbWFpbiBQeXRob24gc291cmNlCi0jICAgZGlyZWN0b3J5LiAgSXQgaXMgbGlrZWx5IHlvdSB3aWxsIGFscmVhZHkgZmluZCB0aGUgemxpYiBsaWJyYXJ5IGFuZAotIyAgIGFueSBvdGhlciBleHRlcm5hbCBwYWNrYWdlcyB0aGVyZS4KLSMgKiBJbnN0YWxsIEFjdGl2ZVBlcmwgYW5kIGVuc3VyZSBpdCBpcyBzb21ld2hlcmUgb24geW91ciBwYXRoLgotIyAqIFJ1biB0aGlzIHNjcmlwdCBmcm9tIHRoZSBQQy9WUzguMCBkaXJlY3RvcnkuCi0jCi0jIGl0IHNob3VsZCBjb25maWd1cmUgYW5kIGJ1aWxkIFNTTCwgdGhlbiBidWlsZCB0aGUgX3NzbCBhbmQgX2hhc2hsaWIKLSMgUHl0aG9uIGV4dGVuc2lvbnMgd2l0aG91dCBpbnRlcnZlbnRpb24uCi0KLSMgTW9kaWZpZWQgYnkgQ2hyaXN0aWFuIEhlaW1lcwotIyBOb3cgdGhpcyBzY3JpcHQgc3VwcG9ydHMgcHJlLWdlbmVyYXRlZCBtYWtlZmlsZXMgYW5kIGFzc2VtYmx5IGZpbGVzLgotIyBEZXZlbG9wZXJzIGRvbid0IG5lZWQgYW4gaW5zdGFsbGF0aW9uIG9mIFBlcmwgYW55bW9yZSB0byBidWlsZCBQeXRob24uIEEgc3ZuCi0jIGNoZWNrb3V0IGZyb20gb3VyIHN2biByZXBvc2l0b3J5IGlzIGVub3VnaC4KLSMKLSMgSW4gT3JkZXIgdG8gY3JlYXRlIHRoZSBmaWxlcyBpbiB0aGUgY2FzZSBvZiBhbiB1cGRhdGUgeW91IHN0aWxsIG5lZWQgUGVybC4KLSMgUnVuIGJ1aWxkX3NzbCBpbiB0aGlzIG9yZGVyOgotIyBweXRob24uZXhlIGJ1aWxkX3NzbC5weSBSZWxlYXNlIHg2NAotIyBweXRob24uZXhlIGJ1aWxkX3NzbC5weSBSZWxlYXNlIFdpbjMyCi0KLWltcG9ydCBvcywgc3lzLCByZSwgc2h1dGlsCi0KLSMgRmluZCBhbGwgImZvby5leGUiIGZpbGVzIG9uIHRoZSBQQVRILgotZGVmIGZpbmRfYWxsX29uX3BhdGgoZmlsZW5hbWUsIGV4dHJhcyA9IE5vbmUpOgotICAgIGVudHJpZXMgPSBvcy5lbnZpcm9uWyJQQVRIIl0uc3BsaXQob3MucGF0aHNlcCkKLSAgICByZXQgPSBbXQotICAgIGZvciBwIGluIGVudHJpZXM6Ci0gICAgICAgIGZuYW1lID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguam9pbihwLCBmaWxlbmFtZSkpCi0gICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGZuYW1lKSBhbmQgZm5hbWUgbm90IGluIHJldDoKLSAgICAgICAgICAgIHJldC5hcHBlbmQoZm5hbWUpCi0gICAgaWYgZXh0cmFzOgotICAgICAgICBmb3IgcCBpbiBleHRyYXM6Ci0gICAgICAgICAgICBmbmFtZSA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmpvaW4ocCwgZmlsZW5hbWUpKQotICAgICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoZm5hbWUpIGFuZCBmbmFtZSBub3QgaW4gcmV0OgotICAgICAgICAgICAgICAgIHJldC5hcHBlbmQoZm5hbWUpCi0gICAgcmV0dXJuIHJldAotCi0jIEZpbmQgYSBzdWl0YWJsZSBQZXJsIGluc3RhbGxhdGlvbiBmb3IgT3BlblNTTC4KLSMgY3lnd2luIHBlcmwgZG9lcyAqbm90KiB3b3JrLiAgQWN0aXZlUGVybCBkb2VzLgotIyBCZWluZyBhIFBlcmwgZHVtbXksIHRoZSBzaW1wbGVzdCB3YXkgSSBjYW4gY2hlY2sgaXMgaWYgdGhlICJXaW4zMiIgcGFja2FnZQotIyBpcyBhdmFpbGFibGUuCi1kZWYgZmluZF93b3JraW5nX3BlcmwocGVybHMpOgotICAgIGZvciBwZXJsIGluIHBlcmxzOgotICAgICAgICBmaCA9IG9zLnBvcGVuKCciJXMiIC1lICJ1c2UgV2luMzI7IicgJSBwZXJsKQotICAgICAgICBmaC5yZWFkKCkKLSAgICAgICAgcmMgPSBmaC5jbG9zZSgpCi0gICAgICAgIGlmIHJjOgotICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgcmV0dXJuIHBlcmwKLSAgICBwcmludCgiQ2FuIG5vdCBmaW5kIGEgc3VpdGFibGUgUEVSTDoiKQotICAgIGlmIHBlcmxzOgotICAgICAgICBwcmludCgiIHRoZSBmb2xsb3dpbmcgcGVybCBpbnRlcnByZXRlcnMgd2VyZSBmb3VuZDoiKQotICAgICAgICBmb3IgcCBpbiBwZXJsczoKLSAgICAgICAgICAgIHByaW50KCIgIiwgcCkKLSAgICAgICAgcHJpbnQoIiBOb25lIG9mIHRoZXNlIHZlcnNpb25zIGFwcGVhciBzdWl0YWJsZSBmb3IgYnVpbGRpbmcgT3BlblNTTCIpCi0gICAgZWxzZToKLSAgICAgICAgcHJpbnQoIiBOTyBwZXJsIGludGVycHJldGVycyB3ZXJlIGZvdW5kIG9uIHRoaXMgbWFjaGluZSBhdCBhbGwhIikKLSAgICBwcmludCgiIFBsZWFzZSBpbnN0YWxsIEFjdGl2ZVBlcmwgYW5kIGVuc3VyZSBpdCBhcHBlYXJzIG9uIHlvdXIgcGF0aCIpCi0gICAgcmV0dXJuIE5vbmUKLQotIyBMb2NhdGUgdGhlIGJlc3QgU1NMIGRpcmVjdG9yeSBnaXZlbiBhIGZldyByb290cyB0byBsb29rIGludG8uCi1kZWYgZmluZF9iZXN0X3NzbF9kaXIoc291cmNlcyk6Ci0gICAgY2FuZGlkYXRlcyA9IFtdCi0gICAgZm9yIHMgaW4gc291cmNlczoKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgIyBub3RlOiBkbyBub3QgYWJzcGF0aCBzOyB0aGUgYnVpbGQgd2lsbCBmYWlsIGlmIGFueQotICAgICAgICAgICAgIyBoaWdoZXIgdXAgZGlyZWN0b3J5IG5hbWUgaGFzIHNwYWNlcyBpbiBpdC4KLSAgICAgICAgICAgIGZuYW1lcyA9IG9zLmxpc3RkaXIocykKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yOgotICAgICAgICAgICAgZm5hbWVzID0gW10KLSAgICAgICAgZm9yIGZuYW1lIGluIGZuYW1lczoKLSAgICAgICAgICAgIGZxbiA9IG9zLnBhdGguam9pbihzLCBmbmFtZSkKLSAgICAgICAgICAgIGlmIG9zLnBhdGguaXNkaXIoZnFuKSBhbmQgZm5hbWUuc3RhcnRzd2l0aCgib3BlbnNzbC0iKToKLSAgICAgICAgICAgICAgICBjYW5kaWRhdGVzLmFwcGVuZChmcW4pCi0gICAgIyBOb3cgd2UgaGF2ZSBhbGwgdGhlIGNhbmRpZGF0ZXMsIGxvY2F0ZSB0aGUgYmVzdC4KLSAgICBiZXN0X3BhcnRzID0gW10KLSAgICBiZXN0X25hbWUgPSBOb25lCi0gICAgZm9yIGMgaW4gY2FuZGlkYXRlczoKLSAgICAgICAgcGFydHMgPSByZS5zcGxpdCgiWy4tXSIsIG9zLnBhdGguYmFzZW5hbWUoYykpWzE6XQotICAgICAgICAjIGVnIC0gb3BlbnNzbC0wLjkuNy1iZXRhMSAtIGlnbm9yZSBhbGwgImJldGEiIG9yIGFueSBvdGhlciBxdWFsaWZpZXJzCi0gICAgICAgIGlmIGxlbihwYXJ0cykgPj0gNDoKLSAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgIGlmIHBhcnRzID4gYmVzdF9wYXJ0czoKLSAgICAgICAgICAgIGJlc3RfcGFydHMgPSBwYXJ0cwotICAgICAgICAgICAgYmVzdF9uYW1lID0gYwotICAgIGlmIGJlc3RfbmFtZSBpcyBub3QgTm9uZToKLSAgICAgICAgcHJpbnQoIkZvdW5kIGFuIFNTTCBkaXJlY3RvcnkgYXQgJyVzJyIgJSAoYmVzdF9uYW1lLCkpCi0gICAgZWxzZToKLSAgICAgICAgcHJpbnQoIkNvdWxkIG5vdCBmaW5kIGFuIFNTTCBkaXJlY3RvcnkgaW4gJyVzJyIgJSAoc291cmNlcywpKQotICAgIHN5cy5zdGRvdXQuZmx1c2goKQotICAgIHJldHVybiBiZXN0X25hbWUKLQotZGVmIGNyZWF0ZV9tYWtlZmlsZTY0KG1ha2VmaWxlLCBtMzIpOgotICAgICIiIkNyZWF0ZSBhbmQgZml4IG1ha2VmaWxlIGZvciA2NGJpdAotCi0gICAgUmVwbGFjZSAzMiB3aXRoIDY0Yml0IGRpcmVjdG9yaWVzCi0gICAgIiIiCi0gICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKG0zMik6Ci0gICAgICAgIHJldHVybgotICAgIHdpdGggb3BlbihtMzIpIGFzIGZpbjoKLSAgICAgICAgd2l0aCBvcGVuKG1ha2VmaWxlLCAndycpIGFzIGZvdXQ6Ci0gICAgICAgICAgICBmb3IgbGluZSBpbiBmaW46Ci0gICAgICAgICAgICAgICAgbGluZSA9IGxpbmUucmVwbGFjZSgiPXRtcDMyIiwgIj10bXA2NCIpCi0gICAgICAgICAgICAgICAgbGluZSA9IGxpbmUucmVwbGFjZSgiPW91dDMyIiwgIj1vdXQ2NCIpCi0gICAgICAgICAgICAgICAgbGluZSA9IGxpbmUucmVwbGFjZSgiPWluYzMyIiwgIj1pbmM2NCIpCi0gICAgICAgICAgICAgICAgIyBmb3JjZSA2NCBiaXQgbWFjaGluZQotICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnJlcGxhY2UoIk1LTElCPWxpYiIsICJNS0xJQj1saWIgL01BQ0hJTkU6WDY0IikKLSAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5yZXBsYWNlKCJMRkxBR1M9IiwgIkxGTEFHUz0vTUFDSElORTpYNjQgIikKLSAgICAgICAgICAgICAgICAjIGRvbid0IGxpbmsgYWdhaW5zdCB0aGUgbGliIG9uIDY0Yml0IHN5c3RlbXMKLSAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5yZXBsYWNlKCJidWZmZXJvdmVyZmxvd3UubGliIiwgIiIpCi0gICAgICAgICAgICAgICAgZm91dC53cml0ZShsaW5lKQotICAgIG9zLnVubGluayhtMzIpCi0KLWRlZiBmaXhfbWFrZWZpbGUobWFrZWZpbGUpOgotICAgICIiIkZpeCBzb21lIHN0dWZmIGluIGFsbCBtYWtlZmlsZXMKLSAgICAiIiIKLSAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUobWFrZWZpbGUpOgotICAgICAgICByZXR1cm4KLSAgICB3aXRoIG9wZW4obWFrZWZpbGUpIGFzIGZpbjoKLSAgICAgICAgbGluZXMgPSBmaW4ucmVhZGxpbmVzKCkKLSAgICB3aXRoIG9wZW4obWFrZWZpbGUsICd3JykgYXMgZm91dDoKLSAgICAgICAgZm9yIGxpbmUgaW4gbGluZXM6Ci0gICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoIlBFUkw9Iik6Ci0gICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgiQ1A9Iik6Ci0gICAgICAgICAgICAgICAgbGluZSA9ICJDUD1jb3B5XG4iCi0gICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoIk1LRElSPSIpOgotICAgICAgICAgICAgICAgIGxpbmUgPSAiTUtESVI9bWtkaXJcbiIKLSAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgiQ0ZMQUc9Iik6Ci0gICAgICAgICAgICAgICAgbGluZSA9IGxpbmUuc3RyaXAoKQotICAgICAgICAgICAgICAgIGZvciBhbGdvIGluICgiUkM1IiwgIk1EQzIiLCAiSURFQSIpOgotICAgICAgICAgICAgICAgICAgICBub2FsZ28gPSAiIC1ET1BFTlNTTF9OT18lcyIgJSBhbGdvCi0gICAgICAgICAgICAgICAgICAgIGlmIG5vYWxnbyBub3QgaW4gbGluZToKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lICsgbm9hbGdvCi0gICAgICAgICAgICAgICAgbGluZSA9IGxpbmUgKyAnXG4nCi0gICAgICAgICAgICBmb3V0LndyaXRlKGxpbmUpCi0KLWRlZiBydW5fY29uZmlndXJlKGNvbmZpZ3VyZSwgZG9fc2NyaXB0KToKLSAgICBwcmludCgicGVybCBDb25maWd1cmUgIitjb25maWd1cmUrIiBuby1pZGVhIG5vLW1kYzIiKQotICAgIG9zLnN5c3RlbSgicGVybCBDb25maWd1cmUgIitjb25maWd1cmUrIiBuby1pZGVhIG5vLW1kYzIiKQotICAgIHByaW50KGRvX3NjcmlwdCkKLSAgICBvcy5zeXN0ZW0oZG9fc2NyaXB0KQotCi1kZWYgY21wKGYxLCBmMik6Ci0gICAgYnVmc2l6ZSA9IDEwMjQgKiA4Ci0gICAgd2l0aCBvcGVuKGYxLCAncmInKSBhcyBmcDEsIG9wZW4oZjIsICdyYicpIGFzIGZwMjoKLSAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgIGIxID0gZnAxLnJlYWQoYnVmc2l6ZSkKLSAgICAgICAgICAgIGIyID0gZnAyLnJlYWQoYnVmc2l6ZSkKLSAgICAgICAgICAgIGlmIGIxICE9IGIyOgotICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICAgICAgaWYgbm90IGIxOgotICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCi0KLWRlZiBjb3B5KHNyYywgZHN0KToKLSAgICBpZiBvcy5wYXRoLmlzZmlsZShkc3QpIGFuZCBjbXAoc3JjLCBkc3QpOgotICAgICAgICByZXR1cm4KLSAgICBzaHV0aWwuY29weShzcmMsIGRzdCkKLQotZGVmIG1haW4oKToKLSAgICBidWlsZF9hbGwgPSAiLWEiIGluIHN5cy5hcmd2Ci0gICAgaWYgc3lzLmFyZ3ZbMV0gPT0gIlJlbGVhc2UiOgotICAgICAgICBkZWJ1ZyA9IEZhbHNlCi0gICAgZWxpZiBzeXMuYXJndlsxXSA9PSAiRGVidWciOgotICAgICAgICBkZWJ1ZyA9IFRydWUKLSAgICBlbHNlOgotICAgICAgICByYWlzZSBWYWx1ZUVycm9yKHN0cihzeXMuYXJndikpCi0KLSAgICBpZiBzeXMuYXJndlsyXSA9PSAiV2luMzIiOgotICAgICAgICBhcmNoID0gIng4NiIKLSAgICAgICAgY29uZmlndXJlID0gIlZDLVdJTjMyIgotICAgICAgICBkb19zY3JpcHQgPSAibXNcXGRvX25hc20iCi0gICAgICAgIG1ha2VmaWxlPSJtc1xcbnQubWFrIgotICAgICAgICBtMzIgPSBtYWtlZmlsZQotICAgICAgICBkaXJzdWZmaXggPSAiMzIiCi0gICAgZWxpZiBzeXMuYXJndlsyXSA9PSAieDY0IjoKLSAgICAgICAgYXJjaD0iYW1kNjQiCi0gICAgICAgIGNvbmZpZ3VyZSA9ICJWQy1XSU42NEEiCi0gICAgICAgIGRvX3NjcmlwdCA9ICJtc1xcZG9fd2luNjRhIgotICAgICAgICBtYWtlZmlsZSA9ICJtc1xcbnQ2NC5tYWsiCi0gICAgICAgIG0zMiA9IG1ha2VmaWxlLnJlcGxhY2UoJzY0JywgJycpCi0gICAgICAgIGRpcnN1ZmZpeCA9ICI2NCIKLSAgICAgICAgI29zLmVudmlyb25bIlZTRVhUQ09NUF9VU0VDTCJdID0gIk1TX09QVEVST04iCi0gICAgZWxzZToKLSAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihzdHIoc3lzLmFyZ3YpKQotCi0gICAgbWFrZV9mbGFncyA9ICIiCi0gICAgaWYgYnVpbGRfYWxsOgotICAgICAgICBtYWtlX2ZsYWdzID0gIi1hIgotICAgICMgcGVybCBzaG91bGQgYmUgb24gdGhlIHBhdGgsIGJ1dCB3ZSBhbHNvIGxvb2sgaW4gIlxwZXJsIiBhbmQgImM6XFxwZXJsIgotICAgICMgYXMgIndlbGwga25vd24iIGxvY2F0aW9ucwotICAgIHBlcmxzID0gZmluZF9hbGxfb25fcGF0aCgicGVybC5leGUiLCBbIlxccGVybFxcYmluIiwgIkM6XFxwZXJsXFxiaW4iXSkKLSAgICBwZXJsID0gZmluZF93b3JraW5nX3BlcmwocGVybHMpCi0gICAgaWYgcGVybDoKLSAgICAgICAgcHJpbnQoIkZvdW5kIGEgd29ya2luZyBwZXJsIGF0ICclcyciICUgKHBlcmwsKSkKLSAgICBlbHNlOgotICAgICAgICBwcmludCgiTm8gUGVybCBpbnN0YWxsYXRpb24gd2FzIGZvdW5kLiBFeGlzdGluZyBNYWtlZmlsZXMgYXJlIHVzZWQuIikKLSAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKLSAgICAjIExvb2sgZm9yIFNTTCAzIGxldmVscyB1cCBmcm9tIFBDL1ZTOC4wIC0gaWUsIHNhbWUgcGxhY2UgemxpYiBldGMgYWxsIGxpdmUuCi0gICAgc3NsX2RpciA9IGZpbmRfYmVzdF9zc2xfZGlyKCgiLi5cXC4uXFwuLiIsKSkKLSAgICBpZiBzc2xfZGlyIGlzIE5vbmU6Ci0gICAgICAgIHN5cy5leGl0KDEpCi0KLSAgICBvbGRfY2QgPSBvcy5nZXRjd2QoKQotICAgIHRyeToKLSAgICAgICAgb3MuY2hkaXIoc3NsX2RpcikKLSAgICAgICAgIyByZWJ1aWxkIG1ha2VmaWxlIHdoZW4gd2UgZG8gdGhlIHJvbGUgb3ZlciBmcm9tIDMyIHRvIDY0IGJ1aWxkCi0gICAgICAgIGlmIGFyY2ggPT0gImFtZDY0IiBhbmQgb3MucGF0aC5pc2ZpbGUobTMyKSBhbmQgbm90IG9zLnBhdGguaXNmaWxlKG1ha2VmaWxlKToKLSAgICAgICAgICAgIG9zLnVubGluayhtMzIpCi0KLSAgICAgICAgIyBJZiB0aGUgc3NsIG1ha2VmaWxlcyBkbyBub3QgZXhpc3QsIHdlIGludm9rZSBQZXJsIHRvIGdlbmVyYXRlIHRoZW0uCi0gICAgICAgICMgRHVlIHRvIGEgYnVnIGluIHRoaXMgc2NyaXB0LCB0aGUgbWFrZWZpbGUgc29tZXRpbWVzIGVuZGVkIHVwIGVtcHR5Ci0gICAgICAgICMgRm9yY2UgYSByZWdlbmVyYXRpb24gaWYgaXQgaXMuCi0gICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShtYWtlZmlsZSkgb3Igb3MucGF0aC5nZXRzaXplKG1ha2VmaWxlKT09MDoKLSAgICAgICAgICAgIGlmIHBlcmwgaXMgTm9uZToKLSAgICAgICAgICAgICAgICBwcmludCgiUGVybCBpcyByZXF1aXJlZCB0byBidWlsZCB0aGUgbWFrZWZpbGVzISIpCi0gICAgICAgICAgICAgICAgc3lzLmV4aXQoMSkKLQotICAgICAgICAgICAgcHJpbnQoIkNyZWF0aW5nIHRoZSBtYWtlZmlsZXMuLi4iKQotICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCi0gICAgICAgICAgICAjIFB1dCBvdXIgd29ya2luZyBQZXJsIGF0IHRoZSBmcm9udCBvZiBvdXIgcGF0aAotICAgICAgICAgICAgb3MuZW52aXJvblsiUEFUSCJdID0gb3MucGF0aC5kaXJuYW1lKHBlcmwpICsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aHNlcCArIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLmVudmlyb25bIlBBVEgiXQotICAgICAgICAgICAgcnVuX2NvbmZpZ3VyZShjb25maWd1cmUsIGRvX3NjcmlwdCkKLSAgICAgICAgICAgIGlmIGRlYnVnOgotICAgICAgICAgICAgICAgIHByaW50KCJPcGVuU1NMIGRlYnVnIGJ1aWxkcyBhcmVuJ3Qgc3VwcG9ydGVkLiIpCi0gICAgICAgICAgICAjaWYgYXJjaD09Ing4NiIgYW5kIGRlYnVnOgotICAgICAgICAgICAgIyAgICAjIHRoZSBkb19tYXNtIHNjcmlwdCBpbiBvcGVuc3NsIGRvZXNuJ3QgZ2VuZXJhdGUgYSBkZWJ1ZwotICAgICAgICAgICAgIyAgICAjIGJ1aWxkIG1ha2VmaWxlIHNvIHdlIGdlbmVyYXRlIGl0IGhlcmU6Ci0gICAgICAgICAgICAjICAgIG9zLnN5c3RlbSgicGVybCB1dGlsXG1rMW1mLnBsIGRlYnVnICIrY29uZmlndXJlKyIgPiIrbWFrZWZpbGUpCi0KLSAgICAgICAgICAgIGlmIGFyY2ggPT0gImFtZDY0IjoKLSAgICAgICAgICAgICAgICBjcmVhdGVfbWFrZWZpbGU2NChtYWtlZmlsZSwgbTMyKQotICAgICAgICAgICAgZml4X21ha2VmaWxlKG1ha2VmaWxlKQotICAgICAgICAgICAgY29weShyImNyeXB0b1xidWlsZGluZi5oIiwgciJjcnlwdG9cYnVpbGRpbmZfJXMuaCIgJSBhcmNoKQotICAgICAgICAgICAgY29weShyImNyeXB0b1xvcGVuc3NsY29uZi5oIiwgciJjcnlwdG9cb3BlbnNzbGNvbmZfJXMuaCIgJSBhcmNoKQotCi0gICAgICAgICMgSWYgdGhlIGFzc2VtYmxlciBmaWxlcyBkb24ndCBleGlzdCBpbiB0bXBYWCwgY29weSB0aGVtIHRoZXJlCi0gICAgICAgIGlmIHBlcmwgaXMgTm9uZSBhbmQgb3MucGF0aC5leGlzdHMoImFzbSIrZGlyc3VmZml4KToKLSAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cygidG1wIitkaXJzdWZmaXgpOgotICAgICAgICAgICAgICAgIG9zLm1rZGlyKCJ0bXAiK2RpcnN1ZmZpeCkKLSAgICAgICAgICAgIGZvciBmIGluIG9zLmxpc3RkaXIoImFzbSIrZGlyc3VmZml4KToKLSAgICAgICAgICAgICAgICBpZiBub3QgZi5lbmRzd2l0aCgiLmFzbSIpOiBjb250aW51ZQotICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKHIidG1wJXNcJXMiICUgKGRpcnN1ZmZpeCwgZikpOiBjb250aW51ZQotICAgICAgICAgICAgICAgIHNodXRpbC5jb3B5KHIiYXNtJXNcJXMiICUgKGRpcnN1ZmZpeCwgZiksICJ0bXAiK2RpcnN1ZmZpeCkKLQotICAgICAgICAjIE5vdyBydW4gbWFrZS4KLSAgICAgICAgaWYgYXJjaCA9PSAiYW1kNjQiOgotICAgICAgICAgICAgcmMgPSBvcy5zeXN0ZW0oIm1sNjQgLWMgLUZvbXNcXHVwdGFibGUub2JqIG1zXFx1cHRhYmxlLmFzbSIpCi0gICAgICAgICAgICBpZiByYzoKLSAgICAgICAgICAgICAgICBwcmludCgibWw2NCBhc3NlbWJsZXIgaGFzIGZhaWxlZC4iKQotICAgICAgICAgICAgICAgIHN5cy5leGl0KHJjKQotCi0gICAgICAgIGNvcHkociJjcnlwdG9cYnVpbGRpbmZfJXMuaCIgJSBhcmNoLCByImNyeXB0b1xidWlsZGluZi5oIikKLSAgICAgICAgY29weShyImNyeXB0b1xvcGVuc3NsY29uZl8lcy5oIiAlIGFyY2gsIHIiY3J5cHRvXG9wZW5zc2xjb25mLmgiKQotCi0gICAgICAgICNtYWtlQ29tbWFuZCA9ICJubWFrZSAvbm9sb2dvIFBFUkw9XCIlc1wiIC1mIFwiJXNcIiIgJShwZXJsLCBtYWtlZmlsZSkKLSAgICAgICAgbWFrZUNvbW1hbmQgPSAibm1ha2UgL25vbG9nbyAtZiBcIiVzXCIiICUgbWFrZWZpbGUKLSAgICAgICAgcHJpbnQoIkV4ZWN1dGluZyBzc2wgbWFrZWZpbGVzOiIsIG1ha2VDb21tYW5kKQotICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKLSAgICAgICAgcmMgPSBvcy5zeXN0ZW0obWFrZUNvbW1hbmQpCi0gICAgICAgIGlmIHJjOgotICAgICAgICAgICAgcHJpbnQoIkV4ZWN1dGluZyAiK21ha2VmaWxlKyIgZmFpbGVkIikKLSAgICAgICAgICAgIHByaW50KHJjKQotICAgICAgICAgICAgc3lzLmV4aXQocmMpCi0gICAgZmluYWxseToKLSAgICAgICAgb3MuY2hkaXIob2xkX2NkKQotICAgIHN5cy5leGl0KHJjKQotCi1pZiBfX25hbWVfXz09J19fbWFpbl9fJzoKLSAgICBtYWluKCkKZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL2J1aWxkX3RraW50ZXIucHkgYi9QQy9WUzguMC9idWlsZF90a2ludGVyLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYTU5MDM5Li4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL2J1aWxkX3RraW50ZXIucHkKKysrIC9kZXYvbnVsbApAQCAtMSw4NSArMCwwIEBACi0iIiJTY3JpcHQgdG8gY29tcGlsZSB0aGUgZGVwZW5kZW5jaWVzIG9mIF90a2ludGVyCi0KLUNvcHlyaWdodCAoYykgMjAwNyBieSBDaHJpc3RpYW4gSGVpbWVzIDxjaHJpc3RpYW5AY2hlaW1lcy5kZT4KLQotTGljZW5zZWQgdG8gUFNGIHVuZGVyIGEgQ29udHJpYnV0b3IgQWdyZWVtZW50LgotIiIiCi0KLWltcG9ydCBvcwotaW1wb3J0IHN5cwotCi1oZXJlID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykpCi1wYXIgPSBvcy5wYXRoLnBhcmRpcgotCi1pZiAxOgotICAgIFRDTCA9ICJ0Y2w4LjQuMTYiCi0gICAgVEsgPSAidGs4LjQuMTYiCi0gICAgVElYID0gInRpeC04LjQuMCIKLWVsc2U6Ci0gICAgVENMID0gInRjbDguNWIzIgotICAgIFRLID0gInRjbDguNWIzIgotICAgIFRJWCA9ICJUaXg4LjQuMiIKLQotUk9PVCA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmpvaW4oaGVyZSwgcGFyLCBwYXIsIHBhcikpCi0jIFdpbmRvd3MgMjAwMCBjb21wYXRpYmlsaXR5OiBXSU5WRVIgMHgwNTAwCi0jIGh0dHA6Ly9tc2RuMi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvYWEzODM3NDUuYXNweAotTk1BS0UgPSAibm1ha2UgL25vbG9nbyAvZiAlcyBDT01QSUxFUkZMQUdTPS1EV0lOVkVSPTB4MDUwMCAlcyAlcyIKLQotZGVmIG5tYWtlKG1ha2VmaWxlLCBjb21tYW5kPSIiLCAqKmt3KToKLSAgICBkZWZpbmVzID0gJyAnLmpvaW4oaysnPScrdiBmb3IgaywgdiBpbiBrdy5pdGVtcygpKQotICAgIGNtZCA9IE5NQUtFICUgKG1ha2VmaWxlLCBkZWZpbmVzLCBjb21tYW5kKQotICAgIHByaW50KCJcblxuIitjbWQrIlxuIikKLSAgICBpZiBvcy5zeXN0ZW0oY21kKSAhPSAwOgotICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoY21kKQotCi1kZWYgYnVpbGQocGxhdGZvcm0sIGNsZWFuKToKLSAgICBpZiBwbGF0Zm9ybSA9PSAiV2luMzIiOgotICAgICAgICBkZXN0ID0gb3MucGF0aC5qb2luKFJPT1QsICJ0Y2x0ayIpCi0gICAgICAgIG1hY2hpbmUgPSAiWDg2IgotICAgIGVsaWYgcGxhdGZvcm0gPT0gIng2NCI6Ci0gICAgICAgIGRlc3QgPSBvcy5wYXRoLmpvaW4oUk9PVCwgInRjbHRrNjQiKQotICAgICAgICBtYWNoaW5lID0gIlg2NCIKLSAgICBlbHNlOgotICAgICAgICByYWlzZSBWYWx1ZUVycm9yKHBsYXRmb3JtKQotCi0gICAgIyBUQ0wKLSAgICB0Y2xkaXIgPSBvcy5wYXRoLmpvaW4oUk9PVCwgVENMKQotICAgIGlmIDE6Ci0gICAgICAgIG9zLmNoZGlyKG9zLnBhdGguam9pbih0Y2xkaXIsICJ3aW4iKSkKLSAgICAgICAgaWYgY2xlYW46Ci0gICAgICAgICAgICBubWFrZSgibWFrZWZpbGUudmMiLCAiY2xlYW4iKQotICAgICAgICBubWFrZSgibWFrZWZpbGUudmMiKQotICAgICAgICBubWFrZSgibWFrZWZpbGUudmMiLCAiaW5zdGFsbCIsIElOU1RBTExESVI9ZGVzdCkKLQotICAgICMgVEsKLSAgICBpZiAxOgotICAgICAgICBvcy5jaGRpcihvcy5wYXRoLmpvaW4oUk9PVCwgVEssICJ3aW4iKSkKLSAgICAgICAgaWYgY2xlYW46Ci0gICAgICAgICAgICBubWFrZSgibWFrZWZpbGUudmMiLCAiY2xlYW4iLCBUQ0xESVI9dGNsZGlyKQotICAgICAgICBubWFrZSgibWFrZWZpbGUudmMiLCBUQ0xESVI9dGNsZGlyKQotICAgICAgICBubWFrZSgibWFrZWZpbGUudmMiLCAiaW5zdGFsbCIsIFRDTERJUj10Y2xkaXIsIElOU1RBTExESVI9ZGVzdCkKLQotICAgICMgVElYCi0gICAgaWYgMToKLSAgICAgICAgIyBweXRob245Lm1hayBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3N2bi5weXRob24ub3JnCi0gICAgICAgIG9zLmNoZGlyKG9zLnBhdGguam9pbihST09ULCBUSVgsICJ3aW4iKSkKLSAgICAgICAgaWYgY2xlYW46Ci0gICAgICAgICAgICBubWFrZSgicHl0aG9uOS5tYWsiLCAiY2xlYW4iKQotICAgICAgICBubWFrZSgicHl0aG9uOS5tYWsiLCBNQUNISU5FPW1hY2hpbmUpCi0gICAgICAgIG5tYWtlKCJweXRob245Lm1hayIsICJpbnN0YWxsIikKLQotZGVmIG1haW4oKToKLSAgICBpZiBsZW4oc3lzLmFyZ3YpIDwgMiBvciBzeXMuYXJndlsxXSBub3QgaW4gKCJXaW4zMiIsICJ4NjQiKToKLSAgICAgICAgcHJpbnQoIiVzIFdpbjMyfHg2NCIgJSBzeXMuYXJndlswXSkKLSAgICAgICAgc3lzLmV4aXQoMSkKLQotICAgIGlmICItYyIgaW4gc3lzLmFyZ3Y6Ci0gICAgICAgIGNsZWFuID0gVHJ1ZQotICAgIGVsc2U6Ci0gICAgICAgIGNsZWFuID0gRmFsc2UKLQotICAgIGJ1aWxkKHN5cy5hcmd2WzFdLCBjbGVhbikKLQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvYnoyLnZjcHJvaiBiL1BDL1ZTOC4wL2J6Mi52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmMTE5NzkuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvYnoyLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDU4MSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOC4wMCINCi0JTmFtZT0iYnoyIg0KLQlQcm9qZWN0R1VJRD0iezczRkNEMkJELUYxMzMtNDZCNy04RUMxLTE0NENEODJBNTlENX0iDQotCVJvb3ROYW1lc3BhY2U9ImJ6MiINCi0JS2V5d29yZD0iV2luMzJQcm9qIg0KLQlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxOTY2MTMiDQotCT4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIg0KLQkJLz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9Ing2NCINCi0JCS8+DQotCTwvUGxhdGZvcm1zPg0KLQk8VG9vbEZpbGVzPg0KLQk8L1Rvb2xGaWxlcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKGJ6MkRpcikiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtfRklMRV9PRkZTRVRfQklUUz02NDtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxNzAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZF9kLnZzcHJvcHM7Llx4NjQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQoYnoyRGlyKSINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19GSUxFX09GRlNFVF9CSVRTPTY0O19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDE3MDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChiejJEaXIpIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7X0ZJTEVfT0ZGU0VUX0JJVFM9NjQ7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTcwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChiejJEaXIpIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7X0ZJTEVfT0ZGU0VUX0JJVFM9NjQ7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTcwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChiejJEaXIpIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7X0ZJTEVfT0ZGU0VUX0JJVFM9NjQ7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTcwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQoYnoyRGlyKSINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19GSUxFX09GRlNFVF9CSVRTPTY0O19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDE3MDAwMCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChiejJEaXIpIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7X0ZJTEVfT0ZGU0VUX0JJVFM9NjQ7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTcwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKGJ6MkRpcikiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtfRklMRV9PRkZTRVRfQklUUz02NDtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxNzAwMDAiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJTb3VyY2UgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xiejJtb2R1bGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9ImJ6aXAyIDEuMC42IEhlYWRlciBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIkKGJ6MkRpcilcYnpsaWIuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9IiQoYnoyRGlyKVxiemxpYl9wcml2YXRlLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJiemlwMiAxLjAuNiBTb3VyY2UgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iJChiejJEaXIpXGJsb2Nrc29ydC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iJChiejJEaXIpXGJ6bGliLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIkKGJ6MkRpcilcY29tcHJlc3MuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9IiQoYnoyRGlyKVxjcmN0YWJsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iJChiejJEaXIpXGRlY29tcHJlc3MuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9IiQoYnoyRGlyKVxodWZmbWFuLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIkKGJ6MkRpcilccmFuZHRhYmxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvZGVidWcudnNwcm9wcyBiL1BDL1ZTOC4wL2RlYnVnLnZzcHJvcHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjNjQzY2IuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvZGVidWcudnNwcm9wcworKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9wZXJ0eVNoZWV0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJkZWJ1ZyINCi0JPg0KLQk8VG9vbA0KLQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUciDQotCS8+DQotCTxVc2VyTWFjcm8NCi0JCU5hbWU9IktpbGxQeXRob25FeGUiDQotCQlWYWx1ZT0iJChPdXREaXIpXGtpbGxfcHl0aG9uX2QuZXhlIg0KLQkvPg0KLTwvVmlzdWFsU3R1ZGlvUHJvcGVydHlTaGVldD4NCmRpZmYgLS1naXQgYS9QQy9WUzguMC9lbnYuYmF0IGIvUEMvVlM4LjAvZW52LmJhdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTQ5OTBhOC4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9lbnYuYmF0CisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1AZWNobyBvZmYKLXNldCBWUzg9JVByb2dyYW1GaWxlcyVcTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gOAotZWNobyBCdWlsZCBlbnZpcm9ubWVudHM6IHg4NiwgaWE2NCwgYW1kNjQsIHg4Nl9hbWQ2NCwgeDg2X2lhNjQKLWVjaG8uCi1jYWxsICIlVlM4JVxWQ1x2Y3ZhcnNhbGwuYmF0IiAlMQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvZmllbGQzLnB5IGIvUEMvVlM4LjAvZmllbGQzLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZGNiZTM2Li4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL2ZpZWxkMy5weQorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLSMgQW4gYWJzdXJkIHdvcmthcm91bmQgZm9yIHRoZSBsYWNrIG9mIGFyaXRobWV0aWMgaW4gTVMncyByZXNvdXJjZSBjb21waWxlci4KLSMgQWZ0ZXIgYnVpbGRpbmcgUHl0aG9uLCBydW4gdGhpcywgdGhlbiBwYXN0ZSB0aGUgb3V0cHV0IGludG8gdGhlIGFwcHJvcHJpYXRlCi0jIHBhcnQgb2YgUENccHl0aG9uX250LnJjLgotIyBFeGFtcGxlIG91dHB1dDoKLSMKLSMgKiBGb3IgMi4zYTAsCi0jICogUFlfTUlDUk9fVkVSU0lPTiA9IDAKLSMgKiBQWV9SRUxFQVNFX0xFVkVMID0gJ2FscGhhJyA9IDB4QQotIyAqIFBZX1JFTEVBU0VfU0VSSUFMID0gMQotIyAqCi0jICogYW5kIDAqMTAwMCArIDEwKjEwICsgMSA9IDEwMS4KLSMgKi8KLSMgI2RlZmluZSBGSUVMRDMgMTAxCi0KLWltcG9ydCBzeXMKLQotbWFqb3IsIG1pbm9yLCBtaWNybywgbGV2ZWwsIHNlcmlhbCA9IHN5cy52ZXJzaW9uX2luZm8KLWxldmVsbnVtID0geydhbHBoYSc6IDB4QSwKLSAgICAgICAgICAgICdiZXRhJzogMHhCLAotICAgICAgICAgICAgJ2NhbmRpZGF0ZSc6IDB4QywKLSAgICAgICAgICAgICdmaW5hbCc6IDB4RiwKLSAgICAgICAgICAgfVtsZXZlbF0KLXN0cmluZyA9IHN5cy52ZXJzaW9uLnNwbGl0KClbMF0gIyBsaWtlICcyLjNhMCcKLQotcHJpbnQoIiAqIEZvciAlcywiICUgc3RyaW5nKQotcHJpbnQoIiAqIFBZX01JQ1JPX1ZFUlNJT04gPSAlZCIgJSBtaWNybykKLXByaW50KCIgKiBQWV9SRUxFQVNFX0xFVkVMID0gJXIgPSAlcyIgJSAobGV2ZWwsIGhleChsZXZlbG51bSkpKQotcHJpbnQoIiAqIFBZX1JFTEVBU0VfU0VSSUFMID0gJWQiICUgc2VyaWFsKQotcHJpbnQoIiAqIikKLQotZmllbGQzID0gbWljcm8gKiAxMDAwICsgbGV2ZWxudW0gKiAxMCArIHNlcmlhbAotCi1wcmludCgiICogYW5kICVkKjEwMDAgKyAlZCoxMCArICVkID0gJWQiICUgKG1pY3JvLCBsZXZlbG51bSwgc2VyaWFsLCBmaWVsZDMpKQotcHJpbnQoIiAqLyIpCi1wcmludCgiI2RlZmluZSBGSUVMRDMiLCBmaWVsZDMpCmRpZmYgLS1naXQgYS9QQy9WUzguMC9pZGxlLmJhdCBiL1BDL1ZTOC4wL2lkbGUuYmF0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMjNlNzA0Li4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL2lkbGUuYmF0CisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotQGVjaG8gb2ZmCi1yZW0gc3RhcnQgaWRsZQotcmVtIFVzYWdlOiAgaWRsZSBbLWRdCi1yZW0gLWQgICBSdW4gRGVidWcgYnVpbGQgKHB5dGhvbl9kLmV4ZSkuICBFbHNlIHJlbGVhc2UgYnVpbGQuCi0KLXNldGxvY2FsCi1zZXQgZXhlPXB5dGhvbgotUEFUSCAlUEFUSCU7Li5cLi5cLi5cdGNsdGtcYmluCi0KLWlmICIlMSI9PSItZCIgKHNldCBleGU9cHl0aG9uX2QpICYgc2hpZnQKLQotc2V0IGNtZD0lZXhlJSAuLi8uLi9MaWIvaWRsZWxpYi9pZGxlLnB5ICUxICUyICUzICU0ICU1ICU2ICU3ICU4ICU5Ci0KLWVjaG8gb24KLSVjbWQlCmRpZmYgLS1naXQgYS9QQy9WUzguMC9raWxsX3B5dGhvbi5jIGIvUEMvVlM4LjAva2lsbF9weXRob24uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmIzMjNkMy4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9raWxsX3B5dGhvbi5jCisrKyAvZGV2L251bGwKQEAgLTEsMTc4ICswLDAgQEAKLS8qCi0gKiBIZWxwZXIgcHJvZ3JhbSBmb3Iga2lsbGluZyBsaW5nZXJpbmcgcHl0aG9uW19kXS5leGUgcHJvY2Vzc2VzIGJlZm9yZQotICogYnVpbGRpbmcsIHRodXMgYXR0ZW1wdGluZyB0byBhdm9pZCBidWlsZCBmYWlsdXJlcyBkdWUgdG8gZmlsZXMgYmVpbmcKLSAqIGxvY2tlZC4KLSAqLwotCi0jaW5jbHVkZSA8d2luZG93cy5oPgotI2luY2x1ZGUgPHdjaGFyLmg+Ci0jaW5jbHVkZSA8dGxoZWxwMzIuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotCi0jcHJhZ21hIGNvbW1lbnQobGliLCAicHNhcGkiKQotCi0jaWZkZWYgX0RFQlVHCi0jZGVmaW5lIFBZVEhPTl9FWEUgICAgICAgICAgKEwicHl0aG9uX2QuZXhlIikKLSNkZWZpbmUgUFlUSE9OX0VYRV9MRU4gICAgICAoMTIpCi0jZGVmaW5lIEtJTExfUFlUSE9OX0VYRSAgICAgKEwia2lsbF9weXRob25fZC5leGUiKQotI2RlZmluZSBLSUxMX1BZVEhPTl9FWEVfTEVOICgxNykKLSNlbHNlCi0jZGVmaW5lIFBZVEhPTl9FWEUgICAgICAgICAgKEwicHl0aG9uLmV4ZSIpCi0jZGVmaW5lIFBZVEhPTl9FWEVfTEVOICAgICAgKDEwKQotI2RlZmluZSBLSUxMX1BZVEhPTl9FWEUgICAgIChMImtpbGxfcHl0aG9uLmV4ZSIpCi0jZGVmaW5lIEtJTExfUFlUSE9OX0VYRV9MRU4gKDE1KQotI2VuZGlmCi0KLWludAotbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi17Ci0gICAgSEFORExFICAgaHAsIGhzcCwgaHNtOyAvKiBwcm9jZXNzLCBzbmFwc2hvdCBwcm9jZXNzZXMsIHNuYXBzaG90IG1vZHVsZXMgKi8KLSAgICBEV09SRCAgICBkYWMsIG91cl9waWQ7Ci0gICAgc2l6ZV90ICAgbGVuOwotICAgIHdjaGFyX3QgIHBhdGhbTUFYX1BBVEgrMV07Ci0KLSAgICBNT0RVTEVFTlRSWTMyVyAgbWU7Ci0gICAgUFJPQ0VTU0VOVFJZMzJXIHBlOwotCi0gICAgbWUuZHdTaXplID0gc2l6ZW9mKE1PRFVMRUVOVFJZMzJXKTsKLSAgICBwZS5kd1NpemUgPSBzaXplb2YoUFJPQ0VTU0VOVFJZMzJXKTsKLQotICAgIG1lbXNldChwYXRoLCAwLCBNQVhfUEFUSCsxKTsKLQotICAgIG91cl9waWQgPSBHZXRDdXJyZW50UHJvY2Vzc0lkKCk7Ci0KLSAgICBoc20gPSBDcmVhdGVUb29saGVscDMyU25hcHNob3QoVEgzMkNTX1NOQVBNT0RVTEUsIG91cl9waWQpOwotICAgIGlmIChoc20gPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpIHsKLSAgICAgICAgcHJpbnRmKCJDcmVhdGVUb29saGVscDMyU25hcHNob3RbMV0gZmFpbGVkOiAlZFxuIiwgR2V0TGFzdEVycm9yKCkpOwotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0KLSAgICBpZiAoIU1vZHVsZTMyRmlyc3RXKGhzbSwgJm1lKSkgewotICAgICAgICBwcmludGYoIk1vZHVsZTMyRmlyc3RXWzFdIGZhaWxlZDogJWRcbiIsIEdldExhc3RFcnJvcigpKTsKLSAgICAgICAgQ2xvc2VIYW5kbGUoaHNtKTsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBFbnVtZXJhdGUgb3ZlciB0aGUgbW9kdWxlcyBmb3IgdGhlIGN1cnJlbnQgcHJvY2VzcyBpbiBvcmRlciB0byBmaW5kCi0gICAgICoga2lsbF9wcm9jZXNzW19kXS5leGUsIHRoZW4gdGFrZSBhIG5vdGUgb2YgdGhlIGRpcmVjdG9yeSBpdCBsaXZlcyBpbi4KLSAgICAgKi8KLSAgICBkbyB7Ci0gICAgICAgIGlmIChfd2NzbmljbXAobWUuc3pNb2R1bGUsIEtJTExfUFlUSE9OX0VYRSwgS0lMTF9QWVRIT05fRVhFX0xFTikpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBsZW4gPSB3Y3NubGVuX3MobWUuc3pFeGVQYXRoLCBNQVhfUEFUSCkgLSBLSUxMX1BZVEhPTl9FWEVfTEVOOwotICAgICAgICB3Y3NuY3B5X3MocGF0aCwgTUFYX1BBVEgrMSwgbWUuc3pFeGVQYXRoLCBsZW4pOyAKLQotICAgICAgICBicmVhazsKLQotICAgIH0gd2hpbGUgKE1vZHVsZTMyTmV4dFcoaHNtLCAmbWUpKTsKLQotICAgIENsb3NlSGFuZGxlKGhzbSk7Ci0KLSAgICBpZiAocGF0aCA9PSBOVUxMKSB7Ci0gICAgICAgIHByaW50ZigiZmFpbGVkIHRvIGRpc2Nlcm4gZGlyZWN0b3J5IG9mIHJ1bm5pbmcgcHJvY2Vzc1xuIik7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLQotICAgIC8qCi0gICAgICogVGFrZSBhIHNuYXBzaG90IG9mIHN5c3RlbSBwcm9jZXNzZXMuICBFbnVtZXJhdGUgb3ZlciB0aGUgc25hcHNob3QsCi0gICAgICogbG9va2luZyBmb3IgcHl0aG9uIHByb2Nlc3Nlcy4gIFdoZW4gd2UgZmluZCBvbmUsIHZlcmlmeSBpdCBsaXZlcwotICAgICAqIGluIHRoZSBzYW1lIGRpcmVjdG9yeSB3ZSBsaXZlIGluLiAgSWYgaXQgZG9lcywga2lsbCBpdC4gIElmIHdlJ3JlCi0gICAgICogdW5hYmxlIHRvIGtpbGwgaXQsIHRyZWF0IHRoaXMgYXMgYSBmYXRhbCBlcnJvciBhbmQgcmV0dXJuIDEuCi0gICAgICogCi0gICAgICogVGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhpcyBpcyB0aGF0IHdlJ3JlIGNhbGxlZCBhdCB0aGUgc3RhcnQgb2YgdGhlIAotICAgICAqIGJ1aWxkIHByb2Nlc3Mgb24gdGhlIGJhc2lzIHRoYXQgd2UnbGwgdGFrZSBjYXJlIG9mIGtpbGxpbmcgYW55Ci0gICAgICogcnVubmluZyBpbnN0YW5jZXMsIHN1Y2ggdGhhdCB0aGUgYnVpbGQgd29uJ3QgZW5jb3VudGVyIHBlcm1pc3Npb24KLSAgICAgKiBkZW5pZWQgZXJyb3JzIGR1cmluZyBsaW5raW5nLiBJZiB3ZSBjYW4ndCBraWxsIG9uZSBvZiB0aGUgcHJvY2Vzc2VzLAotICAgICAqIHdlIGNhbid0IHByb3ZpZGUgdGhpcyBhc3N1cmFuY2UsIGFuZCB0aGUgYnVpbGQgc2hvdWxkbid0IHN0YXJ0LgotICAgICAqLwotCi0gICAgaHNwID0gQ3JlYXRlVG9vbGhlbHAzMlNuYXBzaG90KFRIMzJDU19TTkFQUFJPQ0VTUywgMCk7Ci0gICAgaWYgKGhzcCA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgewotICAgICAgICBwcmludGYoIkNyZWF0ZVRvb2xoZWxwMzJTbmFwc2hvdFsyXSBmYWlsZWQ6ICVkXG4iLCBHZXRMYXN0RXJyb3IoKSk7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLQotICAgIGlmICghUHJvY2VzczMyRmlyc3RXKGhzcCwgJnBlKSkgewotICAgICAgICBwcmludGYoIlByb2Nlc3MzMkZpcnN0VyBmYWlsZWQ6ICVkXG4iLCBHZXRMYXN0RXJyb3IoKSk7Ci0gICAgICAgIENsb3NlSGFuZGxlKGhzcCk7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLQotICAgIGRhYyA9IFBST0NFU1NfUVVFUllfSU5GT1JNQVRJT04gfCBQUk9DRVNTX1ZNX1JFQUQgfCBQUk9DRVNTX1RFUk1JTkFURTsKLSAgICBkbyB7Ci0KLSAgICAgICAgLyoKLSAgICAgICAgICogWFhYIFRPRE86IGlmIHdlIHJlYWxseSB3YW50ZWQgdG8gYmUgZmFuY3ksIHdlIGNvdWxkIGNoZWNrIHRoZSAKLSAgICAgICAgICogbW9kdWxlcyBmb3IgYWxsIHByb2Nlc3NlcyAobm90IGp1c3QgdGhlIHB5dGhvbltfZF0uZXhlIG9uZXMpCi0gICAgICAgICAqIGFuZCBzZWUgaWYgYW55IG9mIG91ciBETExzIGFyZSBsb2FkZWQgKGkuZS4gcHl0aG9uMzNbX2RdLmRsbCksCi0gICAgICAgICAqIGFzIHRoYXQgd291bGQgYWxzbyBpbmhpYml0IG91ciBhYmlsaXR5IHRvIHJlYnVpbGQgdGhlIHNvbHV0aW9uLgotICAgICAgICAgKiBOb3Qgd29ydGggbG9vc2luZyBzbGVlcCBvdmVyIHRob3VnaDsgZm9yIG5vdywgYSBzaW1wbGUgY2hlY2sgCi0gICAgICAgICAqIGZvciBqdXN0IHRoZSBweXRob24gZXhlY3V0YWJsZSBzaG91bGQgYmUgc3VmZmljaWVudC4KLSAgICAgICAgICovCi0KLSAgICAgICAgaWYgKF93Y3NuaWNtcChwZS5zekV4ZUZpbGUsIFBZVEhPTl9FWEUsIFBZVEhPTl9FWEVfTEVOKSkKLSAgICAgICAgICAgIC8qIFRoaXMgaXNuJ3QgYSBweXRob24gcHJvY2Vzcy4gKi8KLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIC8qIEl0J3MgYSBweXRob24gcHJvY2Vzcywgc28gZmlndXJlIG91dCB3aGljaCBkaXJlY3RvcnkgaXQncyBpbi4uLiAqLwotICAgICAgICBoc20gPSBDcmVhdGVUb29saGVscDMyU25hcHNob3QoVEgzMkNTX1NOQVBNT0RVTEUsIHBlLnRoMzJQcm9jZXNzSUQpOwotICAgICAgICBpZiAoaHNtID09IElOVkFMSURfSEFORExFX1ZBTFVFKQotICAgICAgICAgICAgLyogCi0gICAgICAgICAgICAgKiBJZiBvdXIgbW9kdWxlIHNuYXBzaG90IGZhaWxzICh3aGljaCB3aWxsIGhhcHBlbiBpZiB3ZSBkb24ndCBvd24KLSAgICAgICAgICAgICAqIHRoZSBwcm9jZXNzKSwganVzdCBpZ25vcmUgaXQgYW5kIGNvbnRpbnVlLiAgKEl0IHNlZW1zIGRpZmZlcmVudAotICAgICAgICAgICAgICogdmVyc2lvbnMgb2YgV2luZG93cyByZXR1cm4gZGlmZmVyZW50IHZhbHVlcyBmb3IgR2V0TGFzdEVycm9yKCkKLSAgICAgICAgICAgICAqIGluIHRoaXMgc2l0dWF0aW9uOyBpdCdzIGVhc2llciB0byBqdXN0IGlnbm9yZSBpdCBhbmQgbW92ZSBvbiB2cy4KLSAgICAgICAgICAgICAqIHN0b3BwaW5nIHRoZSBidWlsZCBmb3Igd2hhdCBjb3VsZCBiZSBhIGZhbHNlIHBvc2l0aXZlLikKLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGlmICghTW9kdWxlMzJGaXJzdFcoaHNtLCAmbWUpKSB7Ci0gICAgICAgICAgICBwcmludGYoIk1vZHVsZTMyRmlyc3RXWzJdIGZhaWxlZDogJWRcbiIsIEdldExhc3RFcnJvcigpKTsKLSAgICAgICAgICAgIENsb3NlSGFuZGxlKGhzcCk7Ci0gICAgICAgICAgICBDbG9zZUhhbmRsZShoc20pOwotICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgIH0KLQotICAgICAgICBkbyB7Ci0gICAgICAgICAgICBpZiAoX3djc25pY21wKG1lLnN6TW9kdWxlLCBQWVRIT05fRVhFLCBQWVRIT05fRVhFX0xFTikpCi0gICAgICAgICAgICAgICAgLyogV3JvbmcgbW9kdWxlLCB3ZSdyZSBsb29raW5nIGZvciBweXRob25bX2RdLmV4ZS4uLiAqLwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICBpZiAoX3djc25pY21wKHBhdGgsIG1lLnN6RXhlUGF0aCwgbGVuKSkKLSAgICAgICAgICAgICAgICAvKiBQcm9jZXNzIGRvZXNuJ3QgbGl2ZSBpbiBvdXIgZGlyZWN0b3J5LiAqLwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAvKiBQeXRob24gcHJvY2VzcyByZXNpZGluZyBpbiB0aGUgcmlnaHQgZGlyZWN0b3J5LCBraWxsIGl0ISAgKi8KLSAgICAgICAgICAgIGhwID0gT3BlblByb2Nlc3MoZGFjLCBGQUxTRSwgcGUudGgzMlByb2Nlc3NJRCk7Ci0gICAgICAgICAgICBpZiAoIWhwKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCJPcGVuUHJvY2VzcyBmYWlsZWQ6ICVkXG4iLCBHZXRMYXN0RXJyb3IoKSk7Ci0gICAgICAgICAgICAgICAgQ2xvc2VIYW5kbGUoaHNwKTsKLSAgICAgICAgICAgICAgICBDbG9zZUhhbmRsZShoc20pOwotICAgICAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIVRlcm1pbmF0ZVByb2Nlc3MoaHAsIDEpKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCJUZXJtaW5hdGVQcm9jZXNzIGZhaWxlZDogJWRcbiIsIEdldExhc3RFcnJvcigpKTsKLSAgICAgICAgICAgICAgICBDbG9zZUhhbmRsZShoc3ApOwotICAgICAgICAgICAgICAgIENsb3NlSGFuZGxlKGhzbSk7Ci0gICAgICAgICAgICAgICAgQ2xvc2VIYW5kbGUoaHApOwotICAgICAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBDbG9zZUhhbmRsZShocCk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICB9IHdoaWxlIChNb2R1bGUzMk5leHRXKGhzbSwgJm1lKSk7Ci0KLSAgICAgICAgQ2xvc2VIYW5kbGUoaHNtKTsKLQotICAgIH0gd2hpbGUgKFByb2Nlc3MzMk5leHRXKGhzcCwgJnBlKSk7Ci0KLSAgICBDbG9zZUhhbmRsZShoc3ApOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLS8qIHZpOiBzZXQgdHM9OCBzdz00IHN0cz00IGV4cGFuZHRhYiAqLwpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAva2lsbF9weXRob24udmNwcm9qIGIvUEMvVlM4LjAva2lsbF9weXRob24udmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOWJlMzMwLi4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL2tpbGxfcHl0aG9uLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDI3OSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOC4wMCINCi0JTmFtZT0ia2lsbF9weXRob24iDQotCVByb2plY3RHVUlEPSJ7NkRFMTA3NDQtRTM5Ni00MEE1LUI0RTItMUI2OUFBN0M4RDMxfSINCi0JUm9vdE5hbWVzcGFjZT0ia2lsbF9weXRob24iDQotCUtleXdvcmQ9IldpbjMyUHJvaiINCi0JVGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj0iMTk2NjEzIg0KLQk+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiINCi0JCS8+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJ4NjQiDQotCQkvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPFRvb2xGaWxlcz4NCi0JPC9Ub29sRmlsZXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxkZWJ1Zy52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilcJChQcm9qZWN0TmFtZSlfZC5leGUiDQotCQkJCVN1YlN5c3RlbT0iMSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3x4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxkZWJ1Zy52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilcJChQcm9qZWN0TmFtZSlfZC5leGUiDQotCQkJCVN1YlN5c3RlbT0iMSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJU3ViU3lzdGVtPSIxIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJU3ViU3lzdGVtPSIxIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJTb3VyY2UgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLlxraWxsX3B5dGhvbi5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL21ha2VfYnVpbGRpbmZvLmMgYi9QQy9WUzguMC9tYWtlX2J1aWxkaW5mby5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZWZhMDdhLi4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL21ha2VfYnVpbGRpbmZvLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMTYgKzAsMCBAQAotI2luY2x1ZGUgPHdpbmRvd3MuaD4KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KLSNkZWZpbmUgQ01EX1NJWkUgNTAwCi0KLS8qIFRoaXMgZmlsZSBjcmVhdGVzIHRoZSBnZXRidWlsZGluZm8ubyBvYmplY3QsIGJ5IGZpcnN0Ci0gICBpbnZva2luZyBzdWJ3Y3Jldi5leGUgKGlmIGZvdW5kKSwgYW5kIHRoZW4gaW52b2tpbmcgY2wuZXhlLgotICAgQXMgYSBzaWRlIGVmZmVjdCwgaXQgbWlnaHQgZ2VuZXJhdGUgUENCdWlsZFxnZXRidWlsZGluZm8yLmMKLSAgIGFsc28uIElmIHRoaXMgaXNuJ3QgYSBzdWJ2ZXJzaW9uIGNoZWNrb3V0LCBvciBzdWJ3Y3JldiBpc24ndAotICAgZm91bmQsIGl0IGNvbXBpbGVzIC4uXFwuLlxcTW9kdWxlc1xcZ2V0YnVpbGRpbmZvLmMgaW5zdGVhZC4KLQotICAgQ3VycmVudGx5LCBzdWJ3Y3Jldi5leGUgaXMgZm91bmQgZnJvbSB0aGUgcmVnaXN0cnkgZW50cmllcwotICAgb2YgVG9ydG9pc2VTVk4uCi0KLSAgIE5vIGF0dGVtcHQgaXMgbWFkZSB0byBwbGFjZSBnZXRidWlsZGluZm8ubyBpbnRvIHRoZSBwcm9wZXIKLSAgIGJpbmFyeSBkaXJlY3RvcnkuIFRoaXMgaXNuJ3QgbmVjZXNzYXJ5LCBhcyB0aGlzIHRvb2wgaXMKLSAgIGludm9rZWQgYXMgYSBwcmUtbGluayBzdGVwIGZvciBweXRob25jb3JlLCBzbyB0aGF0IG92ZXJ3cml0ZXMKLSAgIGFueSBwcmV2aW91cyBnZXRidWlsZGluZm8uby4KLQotICAgSG93ZXZlciwgaWYgYSBzZWNvbmQgYXJndW1lbnQgaXMgcHJvdmlkZWQsIHRoaXMgd2lsbCBiZSB1c2VkCi0gICBhcyBhIHRlbXBvcmFyeSBkaXJlY3Rvcnkgd2hlcmUgYW55IGdldGJ1aWxkaW5mbzIuYyBhbmQKLSAgIGdldGJ1aWxkaW5mby5vIGZpbGVzIGFyZSBwdXQuICBUaGlzIGlzIHVzZWZ1bCBpZiBtdWx0aXBsZQotICAgY29uZmlndXJhdGlvbnMgYXJlIGJlaW5nIGJ1aWx0IGluIHBhcmFsbGVsLCB0byBhdm9pZCB0aGVtCi0gICB0cmFtcGxpbmcgZWFjaCBvdGhlcidzIGZpbGVzLgotCi0qLwotCi1pbnQgbWFrZV9idWlsZGluZm8yKGNvbnN0IGNoYXIgKnRtcHBhdGgpCi17Ci0gICAgc3RydWN0IF9zdGF0IHN0OwotICAgIEhLRVkgaFRvcnRvaXNlOwotICAgIGNoYXIgY29tbWFuZFtDTURfU0laRSsxXTsKLSAgICBEV09SRCB0eXBlLCBzaXplOwotICAgIGlmIChfc3RhdCgiLnN2biIsICZzdCkgPCAwKQotICAgICAgICByZXR1cm4gMDsKLSAgICAvKiBBbGxvdyBzdXBwcmVzc2lvbiBvZiBzdWJ3Y3Jldi5leGUgaW52b2NhdGlvbiBpZiBhIG5vX3N1YndjcmV2IGZpbGUgaXMgcHJlc2VudC4gKi8KLSAgICBpZiAoX3N0YXQoIm5vX3N1YndjcmV2IiwgJnN0KSA9PSAwKQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoUmVnT3BlbktleShIS0VZX0xPQ0FMX01BQ0hJTkUsICJTb2Z0d2FyZVxcVG9ydG9pc2VTVk4iLCAmaFRvcnRvaXNlKSAhPSBFUlJPUl9TVUNDRVNTICYmCi0gICAgICAgIFJlZ09wZW5LZXkoSEtFWV9DVVJSRU5UX1VTRVIsICJTb2Z0d2FyZVxcVG9ydG9pc2VTVk4iLCAmaFRvcnRvaXNlKSAhPSBFUlJPUl9TVUNDRVNTKQotICAgICAgICAvKiBUb3J0b2lzZSBub3QgaW5zdGFsbGVkICovCi0gICAgICAgIHJldHVybiAwOwotICAgIGNvbW1hbmRbMF0gPSAnIic7ICAvKiBxdW90ZSB0aGUgcGF0aCB0byB0aGUgZXhlY3V0YWJsZSAqLwotICAgIHNpemUgPSBzaXplb2YoY29tbWFuZCkgLSAxOwotICAgIGlmIChSZWdRdWVyeVZhbHVlRXgoaFRvcnRvaXNlLCAiRGlyZWN0b3J5IiwgMCwgJnR5cGUsIGNvbW1hbmQrMSwgJnNpemUpICE9IEVSUk9SX1NVQ0NFU1MgfHwKLSAgICAgICAgdHlwZSAhPSBSRUdfU1opCi0gICAgICAgIC8qIFJlZ2lzdHJ5IGNvcnJ1cHRlZCAqLwotICAgICAgICByZXR1cm4gMDsKLSAgICBzdHJjYXRfcyhjb21tYW5kLCBDTURfU0laRSwgImJpblxcc3Vid2NyZXYuZXhlIik7Ci0gICAgaWYgKF9zdGF0KGNvbW1hbmQrMSwgJnN0KSA8IDApCi0gICAgICAgIC8qIHN1YndjcmV2LmV4ZSBub3QgcGFydCBvZiB0aGUgcmVsZWFzZSAqLwotICAgICAgICByZXR1cm4gMDsKLSAgICBzdHJjYXRfcyhjb21tYW5kLCBDTURfU0laRSwgIlwiIC4uXFwuLiAuLlxcLi5cXE1vZHVsZXNcXGdldGJ1aWxkaW5mby5jICIpOwotICAgIHN0cmNhdF9zKGNvbW1hbmQsIENNRF9TSVpFLCB0bXBwYXRoKTsKLSAgICBzdHJjYXRfcyhjb21tYW5kLCBDTURfU0laRSwgImdldGJ1aWxkaW5mbzIuYyIpOwotICAgIHB1dHMoY29tbWFuZCk7IGZmbHVzaChzdGRvdXQpOwotICAgIGlmIChzeXN0ZW0oY29tbWFuZCkgPCAwKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gMTsKLX0KLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqYXJndltdKQotewotICAgIGNoYXIgY29tbWFuZFtDTURfU0laRV0gPSAiY2wuZXhlIC1jIC1EX1dJTjMyIC1EVVNFX0RMX0VYUE9SVCAtRF9XSU5ET1dTIC1EV0lOMzIgLURfV0lORExMICI7Ci0gICAgY2hhciB0bXBwYXRoW0NNRF9TSVpFXSA9ICIiOwotICAgIGludCBkb191bmxpbmssIHJlc3VsdDsKLSAgICBjaGFyICp0bXBkaXIgPSBOVUxMOwotICAgIGlmIChhcmdjIDw9IDIgfHwgYXJnYyA+IDMpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJtYWtlX2J1aWxkaW5mbyAkKENvbmZpZ3VyYXRpb25OYW1lKSBbdG1wZGlyXVxuIik7Ci0gICAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7Ci0gICAgfQotICAgIGlmIChzdHJjbXAoYXJndlsxXSwgIlJlbGVhc2UiKSA9PSAwKSB7Ci0gICAgICAgIHN0cmNhdF9zKGNvbW1hbmQsIENNRF9TSVpFLCAiLU1EICIpOwotICAgIH0KLSAgICBlbHNlIGlmIChzdHJjbXAoYXJndlsxXSwgIkRlYnVnIikgPT0gMCkgewotICAgICAgICBzdHJjYXRfcyhjb21tYW5kLCBDTURfU0laRSwgIi1EX0RFQlVHIC1NRGQgIik7Ci0gICAgfQotICAgIGVsc2UgaWYgKHN0cmNtcChhcmd2WzFdLCAiUmVsZWFzZUl0YW5pdW0iKSA9PSAwKSB7Ci0gICAgICAgIHN0cmNhdF9zKGNvbW1hbmQsIENNRF9TSVpFLCAiLU1EIC9VU0VDTDpNU19JVEFOSVVNICIpOwotICAgIH0KLSAgICBlbHNlIGlmIChzdHJjbXAoYXJndlsxXSwgIlJlbGVhc2VBTUQ2NCIpID09IDApIHsKLSAgICAgICAgc3RyY2F0X3MoY29tbWFuZCwgQ01EX1NJWkUsICItTUQgIik7Ci0gICAgICAgIHN0cmNhdF9zKGNvbW1hbmQsIENNRF9TSVpFLCAiLU1EIC9VU0VDTDpNU19PUFRFUk9OICIpOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJ1bnN1cHBvcnRlZCBjb25maWd1cmF0aW9uICVzXG4iLCBhcmd2WzFdKTsKLSAgICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKLSAgICB9Ci0gICAgaWYgKGFyZ2MgPiAyKSB7Ci0gICAgICAgIHRtcGRpciA9IGFyZ3ZbMl07Ci0gICAgICAgIHN0cmNhdF9zKHRtcHBhdGgsIF9jb3VudG9mKHRtcHBhdGgpLCB0bXBkaXIpOwotICAgICAgICBzdHJjYXRfcyh0bXBwYXRoLCBfY291bnRvZih0bXBwYXRoKSwgIlxcIik7Ci0gICAgfQotCi0gICAgaWYgKChkb191bmxpbmsgPSBtYWtlX2J1aWxkaW5mbzIodG1wcGF0aCkpKSB7Ci0gICAgICAgIHN0cmNhdF9zKGNvbW1hbmQsIENNRF9TSVpFLCB0bXBwYXRoKTsKLSAgICAgICAgc3RyY2F0X3MoY29tbWFuZCwgQ01EX1NJWkUsICJnZXRidWlsZGluZm8yLmMgLURTVUJXQ1JFViAiKTsKLSAgICB9IGVsc2UKLSAgICAgICAgc3RyY2F0X3MoY29tbWFuZCwgQ01EX1NJWkUsICIuLlxcLi5cXE1vZHVsZXNcXGdldGJ1aWxkaW5mby5jIik7Ci0gICAgc3RyY2F0X3MoY29tbWFuZCwgQ01EX1NJWkUsICIgLUZvIik7Ci0gICAgc3RyY2F0X3MoY29tbWFuZCwgQ01EX1NJWkUsIHRtcHBhdGgpOwotICAgIHN0cmNhdF9zKGNvbW1hbmQsIENNRF9TSVpFLCAiZ2V0YnVpbGRpbmZvLm8gLUkuLlxcLi5cXEluY2x1ZGUgLUkuLlxcLi5cXFBDIik7Ci0gICAgcHV0cyhjb21tYW5kKTsgZmZsdXNoKHN0ZG91dCk7Ci0gICAgcmVzdWx0ID0gc3lzdGVtKGNvbW1hbmQpOwotICAgIGlmIChkb191bmxpbmspIHsKLSAgICAgICAgY29tbWFuZFswXSA9ICdcMCc7Ci0gICAgICAgIHN0cmNhdF9zKGNvbW1hbmQsIENNRF9TSVpFLCB0bXBwYXRoKTsKLSAgICAgICAgc3RyY2F0X3MoY29tbWFuZCwgQ01EX1NJWkUsICJnZXRidWlsZGluZm8yLmMiKTsKLSAgICAgICAgX3VubGluayhjb21tYW5kKTsKLSAgICB9Ci0gICAgaWYgKHJlc3VsdCA8IDApCi0gICAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7Ci0gICAgcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9QQy9WUzguMC9tYWtlX2J1aWxkaW5mby52Y3Byb2ogYi9QQy9WUzguMC9tYWtlX2J1aWxkaW5mby52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiNWNjY2QuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvbWFrZV9idWlsZGluZm8udmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsMTAxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IndpbmRvd3MtMTI1MCI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJtYWtlX2J1aWxkaW5mbyINCi0JUHJvamVjdEdVSUQ9IntDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9Ig0KLQlSb290TmFtZXNwYWNlPSJtYWtlX2J1aWxkaW5mbyINCi0JS2V5d29yZD0iV2luMzJQcm9qIg0KLQlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxMzEwNzIiDQotCT4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIg0KLQkJLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxUb29sRmlsZXM+DQotCTwvVG9vbEZpbGVzPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfQ09OU09MRSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKS9tYWtlX2J1aWxkaW5mby5leGUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9IiQoVGFyZ2V0RGlyKSQoVGFyZ2V0TmFtZSkucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCi0JCQlGaWx0ZXI9ImNwcDtjO2N4eDtkZWY7b2RsO2lkbDtocGo7YmF0O2FzbTthc214Ig0KLQkJCVVuaXF1ZUlkZW50aWZpZXI9Ins0RkM3MzdGMS1DN0E1LTQzNzYtQTA2Ni0yQTMyRDc1MkEyRkZ9Ig0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cbWFrZV9idWlsZGluZm8uYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzguMC9tYWtlX3ZlcnNpb25pbmZvLnZjcHJvaiBiL1BDL1ZTOC4wL21ha2VfdmVyc2lvbmluZm8udmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZGJmMTBkLi4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL21ha2VfdmVyc2lvbmluZm8udmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsMzI0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJtYWtlX3ZlcnNpb25pbmZvIg0KLQlQcm9qZWN0R1VJRD0ie0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0iDQotCVJvb3ROYW1lc3BhY2U9Im1ha2VfdmVyc2lvbmluZm8iDQotCVRhcmdldEZyYW1ld29ya1ZlcnNpb249IjEzMTA3MiINCi0JPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiDQotCQkvPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0ieDY0Ig0KLQkJLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxUb29sRmlsZXM+DQotCTwvVG9vbEZpbGVzPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCUNoYXJhY3RlclNldD0iMiINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCQlEZXNjcmlwdGlvbj0iQnVpbGQgUEMvcHl0aG9ubnRfcmMoX2QpLmgiDQotCQkJCUNvbW1hbmRMaW5lPSJjZCAkKFNvbHV0aW9uRGlyKSYjeDBEOyYjeDBBO21ha2VfdmVyc2lvbmluZm8uZXhlICZndDsgLi5cLi5cUENccHl0aG9ubnRfcmMuaCYjeDBEOyYjeDBBOyINCi0JCQkJT3V0cHV0cz0iJChTb2x1dGlvbkRpcikuLlwuLlxQQ1xweXRob25udF9yYy5oIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlFbmFibGVJbnRyaW5zaWNGdW5jdGlvbnM9InRydWUiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9DT05TT0xFIg0KLQkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQotCQkJCUNvbXBpbGVBcz0iMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iJChTb2x1dGlvbkRpciltYWtlX3ZlcnNpb25pbmZvLmV4ZSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iJChUYXJnZXREaXIpJChUYXJnZXROYW1lKS5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMSINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWQwMDAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJCUNvbW1hbmRMaW5lPSJjZCAkKFNvbHV0aW9uRGlyKSYjeDBEOyYjeDBBO21ha2VfdmVyc2lvbmluZm8uZXhlICZndDsgLi5cLi5cUENccHl0aG9uX250LmgmI3gwRDsmI3gwQTsiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wcyINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCQlEZXNjcmlwdGlvbj0iQnVpbGQgUEMvcHl0aG9ubnRfcmMoX2QpLmgiDQotCQkJCUNvbW1hbmRMaW5lPSJjZCAkKFNvbHV0aW9uRGlyKSYjeDBEOyYjeDBBO21ha2VfdmVyc2lvbmluZm8uZXhlICZndDsgLi5cLi5cUENccHl0aG9ubnRfcmMuaCYjeDBEOyYjeDBBOyINCi0JCQkJT3V0cHV0cz0iJChTb2x1dGlvbkRpcikuLlwuLlxQQ1xweXRob25udF9yYy5oIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlFbmFibGVJbnRyaW5zaWNGdW5jdGlvbnM9InRydWUiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfQ09OU09MRSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iJChTb2x1dGlvbkRpciltYWtlX3ZlcnNpb25pbmZvLmV4ZSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkJQ29tbWFuZExpbmU9ImNkICQoU29sdXRpb25EaXIpJiN4MEQ7JiN4MEE7bWFrZV92ZXJzaW9uaW5mby5leGUgJmd0OyAuLlwuLlxQQ1xweXRob25fbnQuaCYjeDBEOyYjeDBBOyINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXGRlYnVnLnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCQlEZXNjcmlwdGlvbj0iQnVpbGQgUEMvcHl0aG9ubnRfcmMoX2QpLmgiDQotCQkJCUNvbW1hbmRMaW5lPSJjZCAkKFNvbHV0aW9uRGlyKSYjeDBEOyYjeDBBO21ha2VfdmVyc2lvbmluZm9fZC5leGUgJmd0OyAuLlwuLlxQQ1xweXRob25udF9yY19kLmgmI3gwRDsmI3gwQTsiDQotCQkJCU91dHB1dHM9IiQoU29sdXRpb25EaXIpLi5cLi5cUENccHl0aG9ubnRfcmNfZC5oIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlFbmFibGVJbnRyaW5zaWNGdW5jdGlvbnM9ImZhbHNlIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfQ09OU09MRSINCi0JCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIg0KLQkJCQlDb21waWxlQXM9IjAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9IiQoU29sdXRpb25EaXIpbWFrZV92ZXJzaW9uaW5mb19kLmV4ZSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iJChUYXJnZXREaXIpJChUYXJnZXROYW1lKS5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMSINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWQwMDAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJCUNvbW1hbmRMaW5lPSJjZCAkKFNvbHV0aW9uRGlyKSYjeDBEOyYjeDBBO21ha2VfdmVyc2lvbmluZm9fZC5leGUgJmd0OyAuLlwuLlxQQ1xweXRob25fbnRfZC5oJiN4MEQ7JiN4MEE7Ig0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHg2NC52c3Byb3BzOy5cZGVidWcudnNwcm9wcyINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCQlEZXNjcmlwdGlvbj0iQnVpbGQgUEMvcHl0aG9ubnRfcmMoX2QpLmgiDQotCQkJCUNvbW1hbmRMaW5lPSJjZCAkKFNvbHV0aW9uRGlyKSYjeDBEOyYjeDBBO21ha2VfdmVyc2lvbmluZm9fZC5leGUgJmd0OyAuLlwuLlxQQ1xweXRob25udF9yY19kLmgmI3gwRDsmI3gwQTsiDQotCQkJCU91dHB1dHM9IiQoU29sdXRpb25EaXIpLi5cLi5cUENccHl0aG9ubnRfcmNfZC5oIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJRW5hYmxlSW50cmluc2ljRnVuY3Rpb25zPSJmYWxzZSINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9DT05TT0xFIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIkKFNvbHV0aW9uRGlyKW1ha2VfdmVyc2lvbmluZm9fZC5leGUiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCQlDb21tYW5kTGluZT0iY2QgJChTb2x1dGlvbkRpcikmI3gwRDsmI3gwQTttYWtlX3ZlcnNpb25pbmZvX2QuZXhlICZndDsgLi5cLi5cUENccHl0aG9uX250X2QuaCYjeDBEOyYjeDBBOyINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iU291cmNlIEZpbGVzIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBDXG1ha2VfdmVyc2lvbmluZm8uYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzguMC9wY2J1aWxkLnNsbiBiL1BDL1ZTOC4wL3BjYnVpbGQuc2xuCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YWNhNGFhLi4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL3BjYnVpbGQuc2xuCisrKyAvZGV2L251bGwKQEAgLTEsNTYwICswLDAgQEAKLU1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIFNvbHV0aW9uIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDkuMDANCi0jIFZpc3VhbCBTdHVkaW8gMjAwNQ0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAicHl0aG9uIiwgInB5dGhvbi52Y3Byb2oiLCAie0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9ID0ge0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJtYWtlX3ZlcnNpb25pbmZvIiwgIm1ha2VfdmVyc2lvbmluZm8udmNwcm9qIiwgIntGMEUwNTQxRS1GMTdELTQzMEItOTdDNC05M0FERjBERDI4NEV9Ig0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gInB5dGhvbmNvcmUiLCAicHl0aG9uY29yZS52Y3Byb2oiLCAie0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtGMEUwNTQxRS1GMTdELTQzMEItOTdDNC05M0FERjBERDI4NEV9ID0ge0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0NCi0JCXs2REUxMDc0NC1FMzk2LTQwQTUtQjRFMi0xQjY5QUE3QzhEMzF9ID0gezZERTEwNzQ0LUUzOTYtNDBBNS1CNEUyLTFCNjlBQTdDOEQzMX0NCi0JCXtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9ID0ge0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJweXRob253IiwgInB5dGhvbncudmNwcm9qIiwgIntGNDIyOUNDMy04NzNDLTQ5QUUtOTcyOS1ERDMwOEVENENENEF9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAidzl4cG9wZW4iLCAidzl4cG9wZW4udmNwcm9qIiwgIntFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7NkRFMTA3NDQtRTM5Ni00MEE1LUI0RTItMUI2OUFBN0M4RDMxfSA9IHs2REUxMDc0NC1FMzk2LTQwQTUtQjRFMi0xQjY5QUE3QzhEMzF9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAibWFrZV9idWlsZGluZm8iLCAibWFrZV9idWlsZGluZm8udmNwcm9qIiwgIntDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9Ig0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7MjE1MEUzMzMtOEZEQy00MkEzLTk0NzQtMUEzOTU2RDQ2REU4fSIpID0gIlNvbHV0aW9uIEl0ZW1zIiwgIlNvbHV0aW9uIEl0ZW1zIiwgIns1NTNFQzMzRS05ODE2LTQ5OTYtQTY2MC01RDYxODZBMEIwQjN9Ig0KLQlQcm9qZWN0U2VjdGlvbihTb2x1dGlvbkl0ZW1zKSA9IHByZVByb2plY3QNCi0JCS4uXC4uXE1vZHVsZXNcZ2V0YnVpbGRpbmZvLmMgPSAuLlwuLlxNb2R1bGVzXGdldGJ1aWxkaW5mby5jDQotCQlyZWFkbWUudHh0ID0gcmVhZG1lLnR4dA0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIndpbnNvdW5kIiwgIndpbnNvdW5kLnZjcHJvaiIsICJ7MjhCNUQ3NzctRERGMi00QjZCLUIzNEYtMzFEOTM4ODEzODU2fSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIl9jdHlwZXMiLCAiX2N0eXBlcy52Y3Byb2oiLCAiezBFOTc5MURCLTU5M0EtNDY1Ri05OEJDLTY4MTAxMTMxMTYxOH0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJfY3R5cGVzX3Rlc3QiLCAiX2N0eXBlc190ZXN0LnZjcHJvaiIsICJ7OUVDNzE5MEEtMjQ5Ri00MTgwLUE5MDAtNTQ4RkRDRjMwNTVGfSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIl9lbGVtZW50dHJlZSIsICJfZWxlbWVudHRyZWUudmNwcm9qIiwgInsxN0UxRTA0OS1DMzA5LTRENzktODQzRi1BRTQ4M0MyNjRBRUF9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiX21zaSIsICJfbXNpLnZjcHJvaiIsICJ7MzFGRkM0NzgtN0I0QS00M0U4LTk5NTQtOEQwM0UyMTg3RTlDfSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIl9zb2NrZXQiLCAiX3NvY2tldC52Y3Byb2oiLCAiezg2OTM3RjUzLUMxODktNDBFRi04Q0U4LTg3NTlEOEU3RDQ4MH0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJfc3FsaXRlMyIsICJfc3FsaXRlMy52Y3Byb2oiLCAiezEzQ0VDQjk3LTQxMTktNDMxNi05RDQyLTg1MzQwMTlBNUE0NH0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCi0JCXtBMUEyOTVFNS00NjNDLTQzN0YtODFDQS0xRjMyMzY3Njg1REF9ID0ge0ExQTI5NUU1LTQ2M0MtNDM3Ri04MUNBLTFGMzIzNjc2ODVEQX0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJfc3NsIiwgIl9zc2wudmNwcm9qIiwgIntDNkUyMEY4NC0zMjQ3LTRBRDYtQjA1MS1CMDczMjY4RjczQkF9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fSA9IHtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9DQotCQl7ODY5MzdGNTMtQzE4OS00MEVGLThDRTgtODc1OUQ4RTdENDgwfSA9IHs4NjkzN0Y1My1DMTg5LTQwRUYtOENFOC04NzU5RDhFN0Q0ODB9DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQotCQl7RTVCMDRDQzAtRUI0Qy00MkFCLUI0REMtMThFRjk1Rjg2NEIwfSA9IHtFNUIwNENDMC1FQjRDLTQyQUItQjREQy0xOEVGOTVGODY0QjB9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiX3Rlc3RjYXBpIiwgIl90ZXN0Y2FwaS52Y3Byb2oiLCAiezY5MDFEOTFDLTZFNDgtNEJCNy05RkVDLTcwMEM4MTMxREYxRH0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJfdGtpbnRlciIsICJfdGtpbnRlci52Y3Byb2oiLCAiezQ5NDZFQ0FDLTJFNjktNEJGOC1BOTBBLUY1MTM2RjUwOTRERn0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJiejIiLCAiYnoyLnZjcHJvaiIsICJ7NzNGQ0QyQkQtRjEzMy00NkI3LThFQzEtMTQ0Q0Q4MkE1OUQ1fSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gInNlbGVjdCIsICJzZWxlY3QudmNwcm9qIiwgInsxOENBRTI4Qy1CNDU0LTQ2QzEtODdBMC00OTNEOTFEOTdGMDN9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAidW5pY29kZWRhdGEiLCAidW5pY29kZWRhdGEudmNwcm9qIiwgIntFQ0M3Q0VBQy1BNUU1LTQ1OEUtQkI5RS0yNDEzQ0M4NDc4ODF9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAicHlleHBhdCIsICJweWV4cGF0LnZjcHJvaiIsICJ7RDA2QjY0MjYtNDc2Mi00NENDLThCQUQtRDc5MDUyNTA3RjJGfSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gImJkaXN0X3dpbmluc3QiLCAiYmRpc3Rfd2luaW5zdC52Y3Byb2oiLCAie0VCMUMxOUMxLTFGMTgtNDIxRS05NzM1LUNBRUU2OURDNkEzQ30iDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiX2hhc2hsaWIiLCAiX2hhc2hsaWIudmNwcm9qIiwgIns0NDdGMDVBOC1GNTgxLTRDQUMtQTQ2Ni01QUM3OTM2RTIwN0V9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fSA9IHtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQotCQl7RTVCMDRDQzAtRUI0Qy00MkFCLUI0REMtMThFRjk1Rjg2NEIwfSA9IHtFNUIwNENDMC1FQjRDLTQyQUItQjREQy0xOEVGOTVGODY0QjB9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAic3FsaXRlMyIsICJzcWxpdGUzLnZjcHJvaiIsICJ7QTFBMjk1RTUtNDYzQy00MzdGLTgxQ0EtMUYzMjM2NzY4NURBfSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJezZERTEwNzQ0LUUzOTYtNDBBNS1CNEUyLTFCNjlBQTdDOEQzMX0gPSB7NkRFMTA3NDQtRTM5Ni00MEE1LUI0RTItMUI2OUFBN0M4RDMxfQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIl9tdWx0aXByb2Nlc3NpbmciLCAiX211bHRpcHJvY2Vzc2luZy52Y3Byb2oiLCAiezlFNDhCMzAwLTM3RDEtMTFERC04QzQxLTAwNTA1NkMwMDAwOH0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJzc2wiLCAic3NsLnZjcHJvaiIsICJ7RTVCMDRDQzAtRUI0Qy00MkFCLUI0REMtMThFRjk1Rjg2NEIwfSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJe0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0gPSB7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gImtpbGxfcHl0aG9uIiwgImtpbGxfcHl0aG9uLnZjcHJvaiIsICJ7NkRFMTA3NDQtRTM5Ni00MEE1LUI0RTItMUI2OUFBN0M4RDMxfSINCi1FbmRQcm9qZWN0DQotR2xvYmFsDQotCUdsb2JhbFNlY3Rpb24oU29sdXRpb25Db25maWd1cmF0aW9uUGxhdGZvcm1zKSA9IHByZVNvbHV0aW9uDQotCQlEZWJ1Z3xXaW4zMiA9IERlYnVnfFdpbjMyDQotCQlEZWJ1Z3x4NjQgPSBEZWJ1Z3x4NjQNCi0JCVBHSW5zdHJ1bWVudHxXaW4zMiA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJUEdJbnN0cnVtZW50fHg2NCA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCVBHVXBkYXRlfFdpbjMyID0gUEdVcGRhdGV8V2luMzINCi0JCVBHVXBkYXRlfHg2NCA9IFBHVXBkYXRlfHg2NA0KLQkJUmVsZWFzZXxXaW4zMiA9IFJlbGVhc2V8V2luMzINCi0JCVJlbGVhc2V8eDY0ID0gUmVsZWFzZXx4NjQNCi0JRW5kR2xvYmFsU2VjdGlvbg0KLQlHbG9iYWxTZWN0aW9uKFByb2plY3RDb25maWd1cmF0aW9uUGxhdGZvcm1zKSA9IHBvc3RTb2x1dGlvbg0KLQkJe0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJe0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KLQkJe0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCi0JCXtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFBHVXBkYXRlfFdpbjMyDQotCQl7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUEdVcGRhdGV8V2luMzINCi0JCXtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBQR1VwZGF0ZXx4NjQNCi0JCXtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUEdVcGRhdGV8eDY0DQotCQl7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQotCQl7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCi0JCXtGMEUwNTQxRS1GMTdELTQzMEItOTdDNC05M0FERjBERDI4NEV9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7RjBFMDU0MUUtRjE3RC00MzBCLTk3QzQtOTNBREYwREQyODRFfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXtGMEUwNTQxRS1GMTdELTQzMEItOTdDNC05M0FERjBERDI4NEV9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJe0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJe0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtGMEUwNTQxRS1GMTdELTQzMEItOTdDNC05M0FERjBERDI4NEV9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7RjBFMDU0MUUtRjE3RC00MzBCLTk3QzQtOTNBREYwREQyODRFfS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7RjBFMDU0MUUtRjE3RC00MzBCLTk3QzQtOTNBREYwREQyODRFfS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7RjBFMDU0MUUtRjE3RC00MzBCLTk3QzQtOTNBREYwREQyODRFfS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtGMEUwNTQxRS1GMTdELTQzMEItOTdDNC05M0FERjBERDI4NEV9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7RjBFMDU0MUUtRjE3RC00MzBCLTk3QzQtOTNBREYwREQyODRFfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7RjBFMDU0MUUtRjE3RC00MzBCLTk3QzQtOTNBREYwREQyODRFfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7RjBFMDU0MUUtRjE3RC00MzBCLTk3QzQtOTNBREYwREQyODRFfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFBHVXBkYXRlfFdpbjMyDQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUEdVcGRhdGV8V2luMzINCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBQR1VwZGF0ZXx4NjQNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUEdVcGRhdGV8eDY0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCi0JCXtGNDIyOUNDMy04NzNDLTQ5QUUtOTcyOS1ERDMwOEVENENENEF9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXtGNDIyOUNDMy04NzNDLTQ5QUUtOTcyOS1ERDMwOEVENENENEF9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCi0JCXtGNDIyOUNDMy04NzNDLTQ5QUUtOTcyOS1ERDMwOEVENENENEF9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0DQotCQl7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfS5QR0luc3RydW1lbnR8V2luMzIuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJe0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJe0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0uUEdVcGRhdGV8V2luMzIuQnVpbGQuMCA9IFBHVXBkYXRlfFdpbjMyDQotCQl7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfS5QR1VwZGF0ZXx4NjQuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8eDY0DQotCQl7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfS5QR1VwZGF0ZXx4NjQuQnVpbGQuMCA9IFBHVXBkYXRlfHg2NA0KLQkJe0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KLQkJe0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQotCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQotCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8V2luMzINCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFBHVXBkYXRlfHg2NA0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBQR1VwZGF0ZXx4NjQNCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KLQkJe0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0uRGVidWd8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfS5QR0luc3RydW1lbnR8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0uUEdVcGRhdGV8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfS5QR1VwZGF0ZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXsyOEI1RDc3Ny1EREYyLTRCNkItQjM0Ri0zMUQ5Mzg4MTM4NTZ9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7MjhCNUQ3NzctRERGMi00QjZCLUIzNEYtMzFEOTM4ODEzODU2fS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXsyOEI1RDc3Ny1EREYyLTRCNkItQjM0Ri0zMUQ5Mzg4MTM4NTZ9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCi0JCXsyOEI1RDc3Ny1EREYyLTRCNkItQjM0Ri0zMUQ5Mzg4MTM4NTZ9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0DQotCQl7MjhCNUQ3NzctRERGMi00QjZCLUIzNEYtMzFEOTM4ODEzODU2fS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7MjhCNUQ3NzctRERGMi00QjZCLUIzNEYtMzFEOTM4ODEzODU2fS5QR0luc3RydW1lbnR8V2luMzIuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJezI4QjVENzc3LURERjItNEI2Qi1CMzRGLTMxRDkzODgxMzg1Nn0uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7MjhCNUQ3NzctRERGMi00QjZCLUIzNEYtMzFEOTM4ODEzODU2fS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7MjhCNUQ3NzctRERGMi00QjZCLUIzNEYtMzFEOTM4ODEzODU2fS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJezI4QjVENzc3LURERjItNEI2Qi1CMzRGLTMxRDkzODgxMzg1Nn0uUEdVcGRhdGV8V2luMzIuQnVpbGQuMCA9IFBHVXBkYXRlfFdpbjMyDQotCQl7MjhCNUQ3NzctRERGMi00QjZCLUIzNEYtMzFEOTM4ODEzODU2fS5QR1VwZGF0ZXx4NjQuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8eDY0DQotCQl7MjhCNUQ3NzctRERGMi00QjZCLUIzNEYtMzFEOTM4ODEzODU2fS5QR1VwZGF0ZXx4NjQuQnVpbGQuMCA9IFBHVXBkYXRlfHg2NA0KLQkJezI4QjVENzc3LURERjItNEI2Qi1CMzRGLTMxRDkzODgxMzg1Nn0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7MjhCNUQ3NzctRERGMi00QjZCLUIzNEYtMzFEOTM4ODEzODU2fS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7MjhCNUQ3NzctRERGMi00QjZCLUIzNEYtMzFEOTM4ODEzODU2fS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KLQkJezI4QjVENzc3LURERjItNEI2Qi1CMzRGLTMxRDkzODgxMzg1Nn0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQotCQl7MEU5NzkxREItNTkzQS00NjVGLTk4QkMtNjgxMDExMzExNjE4fS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJezBFOTc5MURCLTU5M0EtNDY1Ri05OEJDLTY4MTAxMTMxMTYxOH0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7MEU5NzkxREItNTkzQS00NjVGLTk4QkMtNjgxMDExMzExNjE4fS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQotCQl7MEU5NzkxREItNTkzQS00NjVGLTk4QkMtNjgxMDExMzExNjE4fS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KLQkJezBFOTc5MURCLTU5M0EtNDY1Ri05OEJDLTY4MTAxMTMxMTYxOH0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJezBFOTc5MURCLTU5M0EtNDY1Ri05OEJDLTY4MTAxMTMxMTYxOH0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXswRTk3OTFEQi01OTNBLTQ2NUYtOThCQy02ODEwMTEzMTE2MTh9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJezBFOTc5MURCLTU5M0EtNDY1Ri05OEJDLTY4MTAxMTMxMTYxOH0uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJezBFOTc5MURCLTU5M0EtNDY1Ri05OEJDLTY4MTAxMTMxMTYxOH0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8V2luMzINCi0JCXswRTk3OTFEQi01OTNBLTQ2NUYtOThCQy02ODEwMTEzMTE2MTh9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJezBFOTc5MURCLTU5M0EtNDY1Ri05OEJDLTY4MTAxMTMxMTYxOH0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFBHVXBkYXRlfHg2NA0KLQkJezBFOTc5MURCLTU5M0EtNDY1Ri05OEJDLTY4MTAxMTMxMTYxOH0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBQR1VwZGF0ZXx4NjQNCi0JCXswRTk3OTFEQi01OTNBLTQ2NUYtOThCQy02ODEwMTEzMTE2MTh9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJezBFOTc5MURCLTU5M0EtNDY1Ri05OEJDLTY4MTAxMTMxMTYxOH0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJezBFOTc5MURCLTU5M0EtNDY1Ri05OEJDLTY4MTAxMTMxMTYxOH0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCi0JCXswRTk3OTFEQi01OTNBLTQ2NUYtOThCQy02ODEwMTEzMTE2MTh9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KLQkJezlFQzcxOTBBLTI0OUYtNDE4MC1BOTAwLTU0OEZEQ0YzMDU1Rn0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXs5RUM3MTkwQS0yNDlGLTQxODAtQTkwMC01NDhGRENGMzA1NUZ9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJezlFQzcxOTBBLTI0OUYtNDE4MC1BOTAwLTU0OEZEQ0YzMDU1Rn0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KLQkJezlFQzcxOTBBLTI0OUYtNDE4MC1BOTAwLTU0OEZEQ0YzMDU1Rn0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCi0JCXs5RUM3MTkwQS0yNDlGLTQxODAtQTkwMC01NDhGRENGMzA1NUZ9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXs5RUM3MTkwQS0yNDlGLTQxODAtQTkwMC01NDhGRENGMzA1NUZ9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7OUVDNzE5MEEtMjQ5Ri00MTgwLUE5MDAtNTQ4RkRDRjMwNTVGfS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXs5RUM3MTkwQS0yNDlGLTQxODAtQTkwMC01NDhGRENGMzA1NUZ9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXs5RUM3MTkwQS0yNDlGLTQxODAtQTkwMC01NDhGRENGMzA1NUZ9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFBHVXBkYXRlfFdpbjMyDQotCQl7OUVDNzE5MEEtMjQ5Ri00MTgwLUE5MDAtNTQ4RkRDRjMwNTVGfS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUEdVcGRhdGV8V2luMzINCi0JCXs5RUM3MTkwQS0yNDlGLTQxODAtQTkwMC01NDhGRENGMzA1NUZ9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBQR1VwZGF0ZXx4NjQNCi0JCXs5RUM3MTkwQS0yNDlGLTQxODAtQTkwMC01NDhGRENGMzA1NUZ9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUEdVcGRhdGV8eDY0DQotCQl7OUVDNzE5MEEtMjQ5Ri00MTgwLUE5MDAtNTQ4RkRDRjMwNTVGfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXs5RUM3MTkwQS0yNDlGLTQxODAtQTkwMC01NDhGRENGMzA1NUZ9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXs5RUM3MTkwQS0yNDlGLTQxODAtQTkwMC01NDhGRENGMzA1NUZ9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQotCQl7OUVDNzE5MEEtMjQ5Ri00MTgwLUE5MDAtNTQ4RkRDRjMwNTVGfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCi0JCXsxN0UxRTA0OS1DMzA5LTRENzktODQzRi1BRTQ4M0MyNjRBRUF9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7MTdFMUUwNDktQzMwOS00RDc5LTg0M0YtQUU0ODNDMjY0QUVBfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXsxN0UxRTA0OS1DMzA5LTRENzktODQzRi1BRTQ4M0MyNjRBRUF9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCi0JCXsxN0UxRTA0OS1DMzA5LTRENzktODQzRi1BRTQ4M0MyNjRBRUF9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0DQotCQl7MTdFMUUwNDktQzMwOS00RDc5LTg0M0YtQUU0ODNDMjY0QUVBfS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7MTdFMUUwNDktQzMwOS00RDc5LTg0M0YtQUU0ODNDMjY0QUVBfS5QR0luc3RydW1lbnR8V2luMzIuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJezE3RTFFMDQ5LUMzMDktNEQ3OS04NDNGLUFFNDgzQzI2NEFFQX0uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7MTdFMUUwNDktQzMwOS00RDc5LTg0M0YtQUU0ODNDMjY0QUVBfS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7MTdFMUUwNDktQzMwOS00RDc5LTg0M0YtQUU0ODNDMjY0QUVBfS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJezE3RTFFMDQ5LUMzMDktNEQ3OS04NDNGLUFFNDgzQzI2NEFFQX0uUEdVcGRhdGV8V2luMzIuQnVpbGQuMCA9IFBHVXBkYXRlfFdpbjMyDQotCQl7MTdFMUUwNDktQzMwOS00RDc5LTg0M0YtQUU0ODNDMjY0QUVBfS5QR1VwZGF0ZXx4NjQuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8eDY0DQotCQl7MTdFMUUwNDktQzMwOS00RDc5LTg0M0YtQUU0ODNDMjY0QUVBfS5QR1VwZGF0ZXx4NjQuQnVpbGQuMCA9IFBHVXBkYXRlfHg2NA0KLQkJezE3RTFFMDQ5LUMzMDktNEQ3OS04NDNGLUFFNDgzQzI2NEFFQX0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7MTdFMUUwNDktQzMwOS00RDc5LTg0M0YtQUU0ODNDMjY0QUVBfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7MTdFMUUwNDktQzMwOS00RDc5LTg0M0YtQUU0ODNDMjY0QUVBfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KLQkJezE3RTFFMDQ5LUMzMDktNEQ3OS04NDNGLUFFNDgzQzI2NEFFQX0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQotCQl7MzFGRkM0NzgtN0I0QS00M0U4LTk5NTQtOEQwM0UyMTg3RTlDfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJezMxRkZDNDc4LTdCNEEtNDNFOC05OTU0LThEMDNFMjE4N0U5Q30uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7MzFGRkM0NzgtN0I0QS00M0U4LTk5NTQtOEQwM0UyMTg3RTlDfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQotCQl7MzFGRkM0NzgtN0I0QS00M0U4LTk5NTQtOEQwM0UyMTg3RTlDfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KLQkJezMxRkZDNDc4LTdCNEEtNDNFOC05OTU0LThEMDNFMjE4N0U5Q30uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJezMxRkZDNDc4LTdCNEEtNDNFOC05OTU0LThEMDNFMjE4N0U5Q30uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXszMUZGQzQ3OC03QjRBLTQzRTgtOTk1NC04RDAzRTIxODdFOUN9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJezMxRkZDNDc4LTdCNEEtNDNFOC05OTU0LThEMDNFMjE4N0U5Q30uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJezMxRkZDNDc4LTdCNEEtNDNFOC05OTU0LThEMDNFMjE4N0U5Q30uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8V2luMzINCi0JCXszMUZGQzQ3OC03QjRBLTQzRTgtOTk1NC04RDAzRTIxODdFOUN9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJezMxRkZDNDc4LTdCNEEtNDNFOC05OTU0LThEMDNFMjE4N0U5Q30uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFBHVXBkYXRlfHg2NA0KLQkJezMxRkZDNDc4LTdCNEEtNDNFOC05OTU0LThEMDNFMjE4N0U5Q30uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBQR1VwZGF0ZXx4NjQNCi0JCXszMUZGQzQ3OC03QjRBLTQzRTgtOTk1NC04RDAzRTIxODdFOUN9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJezMxRkZDNDc4LTdCNEEtNDNFOC05OTU0LThEMDNFMjE4N0U5Q30uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJezMxRkZDNDc4LTdCNEEtNDNFOC05OTU0LThEMDNFMjE4N0U5Q30uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCi0JCXszMUZGQzQ3OC03QjRBLTQzRTgtOTk1NC04RDAzRTIxODdFOUN9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KLQkJezg2OTM3RjUzLUMxODktNDBFRi04Q0U4LTg3NTlEOEU3RDQ4MH0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXs4NjkzN0Y1My1DMTg5LTQwRUYtOENFOC04NzU5RDhFN0Q0ODB9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJezg2OTM3RjUzLUMxODktNDBFRi04Q0U4LTg3NTlEOEU3RDQ4MH0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KLQkJezg2OTM3RjUzLUMxODktNDBFRi04Q0U4LTg3NTlEOEU3RDQ4MH0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCi0JCXs4NjkzN0Y1My1DMTg5LTQwRUYtOENFOC04NzU5RDhFN0Q0ODB9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXs4NjkzN0Y1My1DMTg5LTQwRUYtOENFOC04NzU5RDhFN0Q0ODB9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7ODY5MzdGNTMtQzE4OS00MEVGLThDRTgtODc1OUQ4RTdENDgwfS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXs4NjkzN0Y1My1DMTg5LTQwRUYtOENFOC04NzU5RDhFN0Q0ODB9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXs4NjkzN0Y1My1DMTg5LTQwRUYtOENFOC04NzU5RDhFN0Q0ODB9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFBHVXBkYXRlfFdpbjMyDQotCQl7ODY5MzdGNTMtQzE4OS00MEVGLThDRTgtODc1OUQ4RTdENDgwfS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUEdVcGRhdGV8V2luMzINCi0JCXs4NjkzN0Y1My1DMTg5LTQwRUYtOENFOC04NzU5RDhFN0Q0ODB9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBQR1VwZGF0ZXx4NjQNCi0JCXs4NjkzN0Y1My1DMTg5LTQwRUYtOENFOC04NzU5RDhFN0Q0ODB9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUEdVcGRhdGV8eDY0DQotCQl7ODY5MzdGNTMtQzE4OS00MEVGLThDRTgtODc1OUQ4RTdENDgwfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXs4NjkzN0Y1My1DMTg5LTQwRUYtOENFOC04NzU5RDhFN0Q0ODB9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXs4NjkzN0Y1My1DMTg5LTQwRUYtOENFOC04NzU5RDhFN0Q0ODB9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQotCQl7ODY5MzdGNTMtQzE4OS00MEVGLThDRTgtODc1OUQ4RTdENDgwfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCi0JCXsxM0NFQ0I5Ny00MTE5LTQzMTYtOUQ0Mi04NTM0MDE5QTVBNDR9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7MTNDRUNCOTctNDExOS00MzE2LTlENDItODUzNDAxOUE1QTQ0fS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXsxM0NFQ0I5Ny00MTE5LTQzMTYtOUQ0Mi04NTM0MDE5QTVBNDR9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCi0JCXsxM0NFQ0I5Ny00MTE5LTQzMTYtOUQ0Mi04NTM0MDE5QTVBNDR9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0DQotCQl7MTNDRUNCOTctNDExOS00MzE2LTlENDItODUzNDAxOUE1QTQ0fS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7MTNDRUNCOTctNDExOS00MzE2LTlENDItODUzNDAxOUE1QTQ0fS5QR0luc3RydW1lbnR8V2luMzIuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJezEzQ0VDQjk3LTQxMTktNDMxNi05RDQyLTg1MzQwMTlBNUE0NH0uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7MTNDRUNCOTctNDExOS00MzE2LTlENDItODUzNDAxOUE1QTQ0fS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7MTNDRUNCOTctNDExOS00MzE2LTlENDItODUzNDAxOUE1QTQ0fS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJezEzQ0VDQjk3LTQxMTktNDMxNi05RDQyLTg1MzQwMTlBNUE0NH0uUEdVcGRhdGV8V2luMzIuQnVpbGQuMCA9IFBHVXBkYXRlfFdpbjMyDQotCQl7MTNDRUNCOTctNDExOS00MzE2LTlENDItODUzNDAxOUE1QTQ0fS5QR1VwZGF0ZXx4NjQuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8eDY0DQotCQl7MTNDRUNCOTctNDExOS00MzE2LTlENDItODUzNDAxOUE1QTQ0fS5QR1VwZGF0ZXx4NjQuQnVpbGQuMCA9IFBHVXBkYXRlfHg2NA0KLQkJezEzQ0VDQjk3LTQxMTktNDMxNi05RDQyLTg1MzQwMTlBNUE0NH0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7MTNDRUNCOTctNDExOS00MzE2LTlENDItODUzNDAxOUE1QTQ0fS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7MTNDRUNCOTctNDExOS00MzE2LTlENDItODUzNDAxOUE1QTQ0fS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KLQkJezEzQ0VDQjk3LTQxMTktNDMxNi05RDQyLTg1MzQwMTlBNUE0NH0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQotCQl7QzZFMjBGODQtMzI0Ny00QUQ2LUIwNTEtQjA3MzI2OEY3M0JBfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJe0M2RTIwRjg0LTMyNDctNEFENi1CMDUxLUIwNzMyNjhGNzNCQX0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7QzZFMjBGODQtMzI0Ny00QUQ2LUIwNTEtQjA3MzI2OEY3M0JBfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQotCQl7QzZFMjBGODQtMzI0Ny00QUQ2LUIwNTEtQjA3MzI2OEY3M0JBfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KLQkJe0M2RTIwRjg0LTMyNDctNEFENi1CMDUxLUIwNzMyNjhGNzNCQX0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJe0M2RTIwRjg0LTMyNDctNEFENi1CMDUxLUIwNzMyNjhGNzNCQX0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXtDNkUyMEY4NC0zMjQ3LTRBRDYtQjA1MS1CMDczMjY4RjczQkF9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJe0M2RTIwRjg0LTMyNDctNEFENi1CMDUxLUIwNzMyNjhGNzNCQX0uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJe0M2RTIwRjg0LTMyNDctNEFENi1CMDUxLUIwNzMyNjhGNzNCQX0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8V2luMzINCi0JCXtDNkUyMEY4NC0zMjQ3LTRBRDYtQjA1MS1CMDczMjY4RjczQkF9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJe0M2RTIwRjg0LTMyNDctNEFENi1CMDUxLUIwNzMyNjhGNzNCQX0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFBHVXBkYXRlfHg2NA0KLQkJe0M2RTIwRjg0LTMyNDctNEFENi1CMDUxLUIwNzMyNjhGNzNCQX0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBQR1VwZGF0ZXx4NjQNCi0JCXtDNkUyMEY4NC0zMjQ3LTRBRDYtQjA1MS1CMDczMjY4RjczQkF9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0M2RTIwRjg0LTMyNDctNEFENi1CMDUxLUIwNzMyNjhGNzNCQX0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0M2RTIwRjg0LTMyNDctNEFENi1CMDUxLUIwNzMyNjhGNzNCQX0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCi0JCXtDNkUyMEY4NC0zMjQ3LTRBRDYtQjA1MS1CMDczMjY4RjczQkF9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KLQkJezY5MDFEOTFDLTZFNDgtNEJCNy05RkVDLTcwMEM4MTMxREYxRH0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXs2OTAxRDkxQy02RTQ4LTRCQjctOUZFQy03MDBDODEzMURGMUR9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJezY5MDFEOTFDLTZFNDgtNEJCNy05RkVDLTcwMEM4MTMxREYxRH0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KLQkJezY5MDFEOTFDLTZFNDgtNEJCNy05RkVDLTcwMEM4MTMxREYxRH0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCi0JCXs2OTAxRDkxQy02RTQ4LTRCQjctOUZFQy03MDBDODEzMURGMUR9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXs2OTAxRDkxQy02RTQ4LTRCQjctOUZFQy03MDBDODEzMURGMUR9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7NjkwMUQ5MUMtNkU0OC00QkI3LTlGRUMtNzAwQzgxMzFERjFEfS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXs2OTAxRDkxQy02RTQ4LTRCQjctOUZFQy03MDBDODEzMURGMUR9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXs2OTAxRDkxQy02RTQ4LTRCQjctOUZFQy03MDBDODEzMURGMUR9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFBHVXBkYXRlfFdpbjMyDQotCQl7NjkwMUQ5MUMtNkU0OC00QkI3LTlGRUMtNzAwQzgxMzFERjFEfS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUEdVcGRhdGV8V2luMzINCi0JCXs2OTAxRDkxQy02RTQ4LTRCQjctOUZFQy03MDBDODEzMURGMUR9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBQR1VwZGF0ZXx4NjQNCi0JCXs2OTAxRDkxQy02RTQ4LTRCQjctOUZFQy03MDBDODEzMURGMUR9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUEdVcGRhdGV8eDY0DQotCQl7NjkwMUQ5MUMtNkU0OC00QkI3LTlGRUMtNzAwQzgxMzFERjFEfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXs2OTAxRDkxQy02RTQ4LTRCQjctOUZFQy03MDBDODEzMURGMUR9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXs2OTAxRDkxQy02RTQ4LTRCQjctOUZFQy03MDBDODEzMURGMUR9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQotCQl7NjkwMUQ5MUMtNkU0OC00QkI3LTlGRUMtNzAwQzgxMzFERjFEfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCi0JCXs0OTQ2RUNBQy0yRTY5LTRCRjgtQTkwQS1GNTEzNkY1MDk0REZ9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7NDk0NkVDQUMtMkU2OS00QkY4LUE5MEEtRjUxMzZGNTA5NERGfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXs0OTQ2RUNBQy0yRTY5LTRCRjgtQTkwQS1GNTEzNkY1MDk0REZ9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCi0JCXs0OTQ2RUNBQy0yRTY5LTRCRjgtQTkwQS1GNTEzNkY1MDk0REZ9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0DQotCQl7NDk0NkVDQUMtMkU2OS00QkY4LUE5MEEtRjUxMzZGNTA5NERGfS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7NDk0NkVDQUMtMkU2OS00QkY4LUE5MEEtRjUxMzZGNTA5NERGfS5QR0luc3RydW1lbnR8V2luMzIuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJezQ5NDZFQ0FDLTJFNjktNEJGOC1BOTBBLUY1MTM2RjUwOTRERn0uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7NDk0NkVDQUMtMkU2OS00QkY4LUE5MEEtRjUxMzZGNTA5NERGfS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7NDk0NkVDQUMtMkU2OS00QkY4LUE5MEEtRjUxMzZGNTA5NERGfS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJezQ5NDZFQ0FDLTJFNjktNEJGOC1BOTBBLUY1MTM2RjUwOTRERn0uUEdVcGRhdGV8V2luMzIuQnVpbGQuMCA9IFBHVXBkYXRlfFdpbjMyDQotCQl7NDk0NkVDQUMtMkU2OS00QkY4LUE5MEEtRjUxMzZGNTA5NERGfS5QR1VwZGF0ZXx4NjQuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8eDY0DQotCQl7NDk0NkVDQUMtMkU2OS00QkY4LUE5MEEtRjUxMzZGNTA5NERGfS5QR1VwZGF0ZXx4NjQuQnVpbGQuMCA9IFBHVXBkYXRlfHg2NA0KLQkJezQ5NDZFQ0FDLTJFNjktNEJGOC1BOTBBLUY1MTM2RjUwOTRERn0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7NDk0NkVDQUMtMkU2OS00QkY4LUE5MEEtRjUxMzZGNTA5NERGfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7NDk0NkVDQUMtMkU2OS00QkY4LUE5MEEtRjUxMzZGNTA5NERGfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KLQkJezQ5NDZFQ0FDLTJFNjktNEJGOC1BOTBBLUY1MTM2RjUwOTRERn0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQotCQl7NzNGQ0QyQkQtRjEzMy00NkI3LThFQzEtMTQ0Q0Q4MkE1OUQ1fS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJezczRkNEMkJELUYxMzMtNDZCNy04RUMxLTE0NENEODJBNTlENX0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7NzNGQ0QyQkQtRjEzMy00NkI3LThFQzEtMTQ0Q0Q4MkE1OUQ1fS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQotCQl7NzNGQ0QyQkQtRjEzMy00NkI3LThFQzEtMTQ0Q0Q4MkE1OUQ1fS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KLQkJezczRkNEMkJELUYxMzMtNDZCNy04RUMxLTE0NENEODJBNTlENX0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJezczRkNEMkJELUYxMzMtNDZCNy04RUMxLTE0NENEODJBNTlENX0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXs3M0ZDRDJCRC1GMTMzLTQ2QjctOEVDMS0xNDRDRDgyQTU5RDV9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJezczRkNEMkJELUYxMzMtNDZCNy04RUMxLTE0NENEODJBNTlENX0uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJezczRkNEMkJELUYxMzMtNDZCNy04RUMxLTE0NENEODJBNTlENX0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8V2luMzINCi0JCXs3M0ZDRDJCRC1GMTMzLTQ2QjctOEVDMS0xNDRDRDgyQTU5RDV9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJezczRkNEMkJELUYxMzMtNDZCNy04RUMxLTE0NENEODJBNTlENX0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFBHVXBkYXRlfHg2NA0KLQkJezczRkNEMkJELUYxMzMtNDZCNy04RUMxLTE0NENEODJBNTlENX0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBQR1VwZGF0ZXx4NjQNCi0JCXs3M0ZDRDJCRC1GMTMzLTQ2QjctOEVDMS0xNDRDRDgyQTU5RDV9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJezczRkNEMkJELUYxMzMtNDZCNy04RUMxLTE0NENEODJBNTlENX0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJezczRkNEMkJELUYxMzMtNDZCNy04RUMxLTE0NENEODJBNTlENX0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCi0JCXs3M0ZDRDJCRC1GMTMzLTQ2QjctOEVDMS0xNDRDRDgyQTU5RDV9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KLQkJezE4Q0FFMjhDLUI0NTQtNDZDMS04N0EwLTQ5M0Q5MUQ5N0YwM30uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXsxOENBRTI4Qy1CNDU0LTQ2QzEtODdBMC00OTNEOTFEOTdGMDN9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJezE4Q0FFMjhDLUI0NTQtNDZDMS04N0EwLTQ5M0Q5MUQ5N0YwM30uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KLQkJezE4Q0FFMjhDLUI0NTQtNDZDMS04N0EwLTQ5M0Q5MUQ5N0YwM30uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCi0JCXsxOENBRTI4Qy1CNDU0LTQ2QzEtODdBMC00OTNEOTFEOTdGMDN9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXsxOENBRTI4Qy1CNDU0LTQ2QzEtODdBMC00OTNEOTFEOTdGMDN9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7MThDQUUyOEMtQjQ1NC00NkMxLTg3QTAtNDkzRDkxRDk3RjAzfS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXsxOENBRTI4Qy1CNDU0LTQ2QzEtODdBMC00OTNEOTFEOTdGMDN9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXsxOENBRTI4Qy1CNDU0LTQ2QzEtODdBMC00OTNEOTFEOTdGMDN9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFBHVXBkYXRlfFdpbjMyDQotCQl7MThDQUUyOEMtQjQ1NC00NkMxLTg3QTAtNDkzRDkxRDk3RjAzfS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUEdVcGRhdGV8V2luMzINCi0JCXsxOENBRTI4Qy1CNDU0LTQ2QzEtODdBMC00OTNEOTFEOTdGMDN9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBQR1VwZGF0ZXx4NjQNCi0JCXsxOENBRTI4Qy1CNDU0LTQ2QzEtODdBMC00OTNEOTFEOTdGMDN9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUEdVcGRhdGV8eDY0DQotCQl7MThDQUUyOEMtQjQ1NC00NkMxLTg3QTAtNDkzRDkxRDk3RjAzfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXsxOENBRTI4Qy1CNDU0LTQ2QzEtODdBMC00OTNEOTFEOTdGMDN9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXsxOENBRTI4Qy1CNDU0LTQ2QzEtODdBMC00OTNEOTFEOTdGMDN9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQotCQl7MThDQUUyOEMtQjQ1NC00NkMxLTg3QTAtNDkzRDkxRDk3RjAzfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCi0JCXtFQ0M3Q0VBQy1BNUU1LTQ1OEUtQkI5RS0yNDEzQ0M4NDc4ODF9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7RUNDN0NFQUMtQTVFNS00NThFLUJCOUUtMjQxM0NDODQ3ODgxfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXtFQ0M3Q0VBQy1BNUU1LTQ1OEUtQkI5RS0yNDEzQ0M4NDc4ODF9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCi0JCXtFQ0M3Q0VBQy1BNUU1LTQ1OEUtQkI5RS0yNDEzQ0M4NDc4ODF9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0DQotCQl7RUNDN0NFQUMtQTVFNS00NThFLUJCOUUtMjQxM0NDODQ3ODgxfS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7RUNDN0NFQUMtQTVFNS00NThFLUJCOUUtMjQxM0NDODQ3ODgxfS5QR0luc3RydW1lbnR8V2luMzIuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJe0VDQzdDRUFDLUE1RTUtNDU4RS1CQjlFLTI0MTNDQzg0Nzg4MX0uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7RUNDN0NFQUMtQTVFNS00NThFLUJCOUUtMjQxM0NDODQ3ODgxfS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7RUNDN0NFQUMtQTVFNS00NThFLUJCOUUtMjQxM0NDODQ3ODgxfS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJe0VDQzdDRUFDLUE1RTUtNDU4RS1CQjlFLTI0MTNDQzg0Nzg4MX0uUEdVcGRhdGV8V2luMzIuQnVpbGQuMCA9IFBHVXBkYXRlfFdpbjMyDQotCQl7RUNDN0NFQUMtQTVFNS00NThFLUJCOUUtMjQxM0NDODQ3ODgxfS5QR1VwZGF0ZXx4NjQuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8eDY0DQotCQl7RUNDN0NFQUMtQTVFNS00NThFLUJCOUUtMjQxM0NDODQ3ODgxfS5QR1VwZGF0ZXx4NjQuQnVpbGQuMCA9IFBHVXBkYXRlfHg2NA0KLQkJe0VDQzdDRUFDLUE1RTUtNDU4RS1CQjlFLTI0MTNDQzg0Nzg4MX0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7RUNDN0NFQUMtQTVFNS00NThFLUJCOUUtMjQxM0NDODQ3ODgxfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7RUNDN0NFQUMtQTVFNS00NThFLUJCOUUtMjQxM0NDODQ3ODgxfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KLQkJe0VDQzdDRUFDLUE1RTUtNDU4RS1CQjlFLTI0MTNDQzg0Nzg4MX0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQotCQl7RDA2QjY0MjYtNDc2Mi00NENDLThCQUQtRDc5MDUyNTA3RjJGfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJe0QwNkI2NDI2LTQ3NjItNDRDQy04QkFELUQ3OTA1MjUwN0YyRn0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7RDA2QjY0MjYtNDc2Mi00NENDLThCQUQtRDc5MDUyNTA3RjJGfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQotCQl7RDA2QjY0MjYtNDc2Mi00NENDLThCQUQtRDc5MDUyNTA3RjJGfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KLQkJe0QwNkI2NDI2LTQ3NjItNDRDQy04QkFELUQ3OTA1MjUwN0YyRn0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJe0QwNkI2NDI2LTQ3NjItNDRDQy04QkFELUQ3OTA1MjUwN0YyRn0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXtEMDZCNjQyNi00NzYyLTQ0Q0MtOEJBRC1ENzkwNTI1MDdGMkZ9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJe0QwNkI2NDI2LTQ3NjItNDRDQy04QkFELUQ3OTA1MjUwN0YyRn0uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJe0QwNkI2NDI2LTQ3NjItNDRDQy04QkFELUQ3OTA1MjUwN0YyRn0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8V2luMzINCi0JCXtEMDZCNjQyNi00NzYyLTQ0Q0MtOEJBRC1ENzkwNTI1MDdGMkZ9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJe0QwNkI2NDI2LTQ3NjItNDRDQy04QkFELUQ3OTA1MjUwN0YyRn0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFBHVXBkYXRlfHg2NA0KLQkJe0QwNkI2NDI2LTQ3NjItNDRDQy04QkFELUQ3OTA1MjUwN0YyRn0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBQR1VwZGF0ZXx4NjQNCi0JCXtEMDZCNjQyNi00NzYyLTQ0Q0MtOEJBRC1ENzkwNTI1MDdGMkZ9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0QwNkI2NDI2LTQ3NjItNDRDQy04QkFELUQ3OTA1MjUwN0YyRn0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0QwNkI2NDI2LTQ3NjItNDRDQy04QkFELUQ3OTA1MjUwN0YyRn0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCi0JCXtEMDZCNjQyNi00NzYyLTQ0Q0MtOEJBRC1ENzkwNTI1MDdGMkZ9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KLQkJe0VCMUMxOUMxLTFGMTgtNDIxRS05NzM1LUNBRUU2OURDNkEzQ30uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0VCMUMxOUMxLTFGMTgtNDIxRS05NzM1LUNBRUU2OURDNkEzQ30uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQotCQl7RUIxQzE5QzEtMUYxOC00MjFFLTk3MzUtQ0FFRTY5REM2QTNDfS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0VCMUMxOUMxLTFGMTgtNDIxRS05NzM1LUNBRUU2OURDNkEzQ30uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KLQkJe0VCMUMxOUMxLTFGMTgtNDIxRS05NzM1LUNBRUU2OURDNkEzQ30uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0VCMUMxOUMxLTFGMTgtNDIxRS05NzM1LUNBRUU2OURDNkEzQ30uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQotCQl7RUIxQzE5QzEtMUYxOC00MjFFLTk3MzUtQ0FFRTY5REM2QTNDfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtFQjFDMTlDMS0xRjE4LTQyMUUtOTczNS1DQUVFNjlEQzZBM0N9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQotCQl7NDQ3RjA1QTgtRjU4MS00Q0FDLUE0NjYtNUFDNzkzNkUyMDdFfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJezQ0N0YwNUE4LUY1ODEtNENBQy1BNDY2LTVBQzc5MzZFMjA3RX0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7NDQ3RjA1QTgtRjU4MS00Q0FDLUE0NjYtNUFDNzkzNkUyMDdFfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQotCQl7NDQ3RjA1QTgtRjU4MS00Q0FDLUE0NjYtNUFDNzkzNkUyMDdFfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KLQkJezQ0N0YwNUE4LUY1ODEtNENBQy1BNDY2LTVBQzc5MzZFMjA3RX0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJezQ0N0YwNUE4LUY1ODEtNENBQy1BNDY2LTVBQzc5MzZFMjA3RX0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXs0NDdGMDVBOC1GNTgxLTRDQUMtQTQ2Ni01QUM3OTM2RTIwN0V9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJezQ0N0YwNUE4LUY1ODEtNENBQy1BNDY2LTVBQzc5MzZFMjA3RX0uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJezQ0N0YwNUE4LUY1ODEtNENBQy1BNDY2LTVBQzc5MzZFMjA3RX0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8V2luMzINCi0JCXs0NDdGMDVBOC1GNTgxLTRDQUMtQTQ2Ni01QUM3OTM2RTIwN0V9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJezQ0N0YwNUE4LUY1ODEtNENBQy1BNDY2LTVBQzc5MzZFMjA3RX0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFBHVXBkYXRlfHg2NA0KLQkJezQ0N0YwNUE4LUY1ODEtNENBQy1BNDY2LTVBQzc5MzZFMjA3RX0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBQR1VwZGF0ZXx4NjQNCi0JCXs0NDdGMDVBOC1GNTgxLTRDQUMtQTQ2Ni01QUM3OTM2RTIwN0V9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJezQ0N0YwNUE4LUY1ODEtNENBQy1BNDY2LTVBQzc5MzZFMjA3RX0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJezQ0N0YwNUE4LUY1ODEtNENBQy1BNDY2LTVBQzc5MzZFMjA3RX0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCi0JCXs0NDdGMDVBOC1GNTgxLTRDQUMtQTQ2Ni01QUM3OTM2RTIwN0V9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KLQkJe0ExQTI5NUU1LTQ2M0MtNDM3Ri04MUNBLTFGMzIzNjc2ODVEQX0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXtBMUEyOTVFNS00NjNDLTQzN0YtODFDQS0xRjMyMzY3Njg1REF9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJe0ExQTI5NUU1LTQ2M0MtNDM3Ri04MUNBLTFGMzIzNjc2ODVEQX0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KLQkJe0ExQTI5NUU1LTQ2M0MtNDM3Ri04MUNBLTFGMzIzNjc2ODVEQX0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCi0JCXtBMUEyOTVFNS00NjNDLTQzN0YtODFDQS0xRjMyMzY3Njg1REF9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXtBMUEyOTVFNS00NjNDLTQzN0YtODFDQS0xRjMyMzY3Njg1REF9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7QTFBMjk1RTUtNDYzQy00MzdGLTgxQ0EtMUYzMjM2NzY4NURBfS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXtBMUEyOTVFNS00NjNDLTQzN0YtODFDQS0xRjMyMzY3Njg1REF9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXtBMUEyOTVFNS00NjNDLTQzN0YtODFDQS0xRjMyMzY3Njg1REF9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFBHVXBkYXRlfFdpbjMyDQotCQl7QTFBMjk1RTUtNDYzQy00MzdGLTgxQ0EtMUYzMjM2NzY4NURBfS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUEdVcGRhdGV8V2luMzINCi0JCXtBMUEyOTVFNS00NjNDLTQzN0YtODFDQS0xRjMyMzY3Njg1REF9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBQR1VwZGF0ZXx4NjQNCi0JCXtBMUEyOTVFNS00NjNDLTQzN0YtODFDQS0xRjMyMzY3Njg1REF9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUEdVcGRhdGV8eDY0DQotCQl7QTFBMjk1RTUtNDYzQy00MzdGLTgxQ0EtMUYzMjM2NzY4NURBfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtBMUEyOTVFNS00NjNDLTQzN0YtODFDQS0xRjMyMzY3Njg1REF9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtBMUEyOTVFNS00NjNDLTQzN0YtODFDQS0xRjMyMzY3Njg1REF9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQotCQl7QTFBMjk1RTUtNDYzQy00MzdGLTgxQ0EtMUYzMjM2NzY4NURBfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCi0JCXs5RTQ4QjMwMC0zN0QxLTExREQtOEM0MS0wMDUwNTZDMDAwMDh9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7OUU0OEIzMDAtMzdEMS0xMURELThDNDEtMDA1MDU2QzAwMDA4fS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXs5RTQ4QjMwMC0zN0QxLTExREQtOEM0MS0wMDUwNTZDMDAwMDh9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCi0JCXs5RTQ4QjMwMC0zN0QxLTExREQtOEM0MS0wMDUwNTZDMDAwMDh9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0DQotCQl7OUU0OEIzMDAtMzdEMS0xMURELThDNDEtMDA1MDU2QzAwMDA4fS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7OUU0OEIzMDAtMzdEMS0xMURELThDNDEtMDA1MDU2QzAwMDA4fS5QR0luc3RydW1lbnR8V2luMzIuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJezlFNDhCMzAwLTM3RDEtMTFERC04QzQxLTAwNTA1NkMwMDAwOH0uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7OUU0OEIzMDAtMzdEMS0xMURELThDNDEtMDA1MDU2QzAwMDA4fS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7OUU0OEIzMDAtMzdEMS0xMURELThDNDEtMDA1MDU2QzAwMDA4fS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJezlFNDhCMzAwLTM3RDEtMTFERC04QzQxLTAwNTA1NkMwMDAwOH0uUEdVcGRhdGV8V2luMzIuQnVpbGQuMCA9IFBHVXBkYXRlfFdpbjMyDQotCQl7OUU0OEIzMDAtMzdEMS0xMURELThDNDEtMDA1MDU2QzAwMDA4fS5QR1VwZGF0ZXx4NjQuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8eDY0DQotCQl7OUU0OEIzMDAtMzdEMS0xMURELThDNDEtMDA1MDU2QzAwMDA4fS5QR1VwZGF0ZXx4NjQuQnVpbGQuMCA9IFBHVXBkYXRlfHg2NA0KLQkJezlFNDhCMzAwLTM3RDEtMTFERC04QzQxLTAwNTA1NkMwMDAwOH0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7OUU0OEIzMDAtMzdEMS0xMURELThDNDEtMDA1MDU2QzAwMDA4fS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7OUU0OEIzMDAtMzdEMS0xMURELThDNDEtMDA1MDU2QzAwMDA4fS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KLQkJezlFNDhCMzAwLTM3RDEtMTFERC04QzQxLTAwNTA1NkMwMDAwOH0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQotCQl7RTVCMDRDQzAtRUI0Qy00MkFCLUI0REMtMThFRjk1Rjg2NEIwfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJe0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7RTVCMDRDQzAtRUI0Qy00MkFCLUI0REMtMThFRjk1Rjg2NEIwfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQotCQl7RTVCMDRDQzAtRUI0Qy00MkFCLUI0REMtMThFRjk1Rjg2NEIwfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KLQkJe0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJe0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXtFNUIwNENDMC1FQjRDLTQyQUItQjREQy0xOEVGOTVGODY0QjB9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJe0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJe0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8V2luMzINCi0JCXtFNUIwNENDMC1FQjRDLTQyQUItQjREQy0xOEVGOTVGODY0QjB9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJe0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFBHVXBkYXRlfHg2NA0KLQkJe0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBQR1VwZGF0ZXx4NjQNCi0JCXtFNUIwNENDMC1FQjRDLTQyQUItQjREQy0xOEVGOTVGODY0QjB9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCi0JCXtFNUIwNENDMC1FQjRDLTQyQUItQjREQy0xOEVGOTVGODY0QjB9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KLQkJezZERTEwNzQ0LUUzOTYtNDBBNS1CNEUyLTFCNjlBQTdDOEQzMX0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXs2REUxMDc0NC1FMzk2LTQwQTUtQjRFMi0xQjY5QUE3QzhEMzF9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJezZERTEwNzQ0LUUzOTYtNDBBNS1CNEUyLTFCNjlBQTdDOEQzMX0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KLQkJezZERTEwNzQ0LUUzOTYtNDBBNS1CNEUyLTFCNjlBQTdDOEQzMX0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCi0JCXs2REUxMDc0NC1FMzk2LTQwQTUtQjRFMi0xQjY5QUE3QzhEMzF9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7NkRFMTA3NDQtRTM5Ni00MEE1LUI0RTItMUI2OUFBN0M4RDMxfS5QR0luc3RydW1lbnR8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXs2REUxMDc0NC1FMzk2LTQwQTUtQjRFMi0xQjY5QUE3QzhEMzF9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCi0JCXs2REUxMDc0NC1FMzk2LTQwQTUtQjRFMi0xQjY5QUE3QzhEMzF9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQotCQl7NkRFMTA3NDQtRTM5Ni00MEE1LUI0RTItMUI2OUFBN0M4RDMxfS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7NkRFMTA3NDQtRTM5Ni00MEE1LUI0RTItMUI2OUFBN0M4RDMxfS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJezZERTEwNzQ0LUUzOTYtNDBBNS1CNEUyLTFCNjlBQTdDOEQzMX0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQotCQl7NkRFMTA3NDQtRTM5Ni00MEE1LUI0RTItMUI2OUFBN0M4RDMxfS5QR1VwZGF0ZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQotCQl7NkRFMTA3NDQtRTM5Ni00MEE1LUI0RTItMUI2OUFBN0M4RDMxfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXs2REUxMDc0NC1FMzk2LTQwQTUtQjRFMi0xQjY5QUE3QzhEMzF9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXs2REUxMDc0NC1FMzk2LTQwQTUtQjRFMi0xQjY5QUE3QzhEMzF9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQotCQl7NkRFMTA3NDQtRTM5Ni00MEE1LUI0RTItMUI2OUFBN0M4RDMxfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCi0JRW5kR2xvYmFsU2VjdGlvbg0KLQlHbG9iYWxTZWN0aW9uKFNvbHV0aW9uUHJvcGVydGllcykgPSBwcmVTb2x1dGlvbg0KLQkJSGlkZVNvbHV0aW9uTm9kZSA9IEZBTFNFDQotCUVuZEdsb2JhbFNlY3Rpb24NCi1FbmRHbG9iYWwNCmRpZmYgLS1naXQgYS9QQy9WUzguMC9wZ2luc3RydW1lbnQudnNwcm9wcyBiL1BDL1ZTOC4wL3BnaW5zdHJ1bWVudC52c3Byb3BzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOGM1ZjE4Li4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL3BnaW5zdHJ1bWVudC52c3Byb3BzCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb3BlcnR5U2hlZXQNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9InBnaW5zdHJ1bWVudCINCi0JT3V0cHV0RGlyZWN0b3J5PSIkKE91dERpclBHSSkiDQotCUludGVybWVkaWF0ZURpcmVjdG9yeT0iJChTb2x1dGlvbkRpcikkKFBsYXRmb3JtTmFtZSktdGVtcC1wZ2lcJChQcm9qZWN0TmFtZSlcIg0KLQk+DQotCTxUb29sDQotCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQlFbmFibGVJbnRyaW5zaWNGdW5jdGlvbnM9ImZhbHNlIg0KLQkJRmF2b3JTaXplT3JTcGVlZD0iMiINCi0JCU9taXRGcmFtZVBvaW50ZXJzPSJ0cnVlIg0KLQkJRW5hYmxlRmliZXJTYWZlT3B0aW1pemF0aW9ucz0iZmFsc2UiDQotCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249InRydWUiDQotCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KLQkJRXhjZXB0aW9uSGFuZGxpbmc9IjAiDQotCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJmYWxzZSINCi0JLz4NCi0JPFRvb2wNCi0JCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCU9wdGltaXplUmVmZXJlbmNlcz0iMiINCi0JCUVuYWJsZUNPTURBVEZvbGRpbmc9IjIiDQotCQlMaW5rVGltZUNvZGVHZW5lcmF0aW9uPSIyIg0KLQkJUHJvZmlsZUd1aWRlZERhdGFiYXNlPSIkKFNvbHV0aW9uRGlyKSQoUGxhdGZvcm1OYW1lKS1wZ2lcJChUYXJnZXROYW1lKS5wZ2QiDQotCQlJbXBvcnRMaWJyYXJ5PSIkKE91dERpclBHSSlcJChUYXJnZXROYW1lKS5saWIiDQotCS8+DQotCTxVc2VyTWFjcm8NCi0JCU5hbWU9Ik91dERpclBHSSINCi0JCVZhbHVlPSIkKFNvbHV0aW9uRGlyKSQoUGxhdGZvcm1OYW1lKS1wZ2lcIg0KLQkvPg0KLTwvVmlzdWFsU3R1ZGlvUHJvcGVydHlTaGVldD4NCmRpZmYgLS1naXQgYS9QQy9WUzguMC9wZ3VwZGF0ZS52c3Byb3BzIGIvUEMvVlM4LjAvcGd1cGRhdGUudnNwcm9wcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjZjZmMyZC4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9wZ3VwZGF0ZS52c3Byb3BzCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb3BlcnR5U2hlZXQNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9InBndXBkYXRlIg0KLQlPdXRwdXREaXJlY3Rvcnk9IiQoU29sdXRpb25EaXIpJChQbGF0Zm9ybU5hbWUpLXBnb1wiDQotCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFNvbHV0aW9uRGlyKVxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JPg0KLQk8VG9vbA0KLQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJQWRkaXRpb25hbE1hbmlmZXN0RGVwZW5kZW5jaWVzPSIiDQotCQlMaW5rVGltZUNvZGVHZW5lcmF0aW9uPSI0Ig0KLQkvPg0KLTwvVmlzdWFsU3R1ZGlvUHJvcGVydHlTaGVldD4NCmRpZmYgLS1naXQgYS9QQy9WUzguMC9weWQudnNwcm9wcyBiL1BDL1ZTOC4wL3B5ZC52c3Byb3BzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNGMyMWUxLi4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL3B5ZC52c3Byb3BzCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb3BlcnR5U2hlZXQNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9InB5ZCINCi0JSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHMiDQotCT4NCi0JPFRvb2wNCi0JCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEUiDQotCQlSdW50aW1lTGlicmFyeT0iMiINCi0JLz4NCi0JPFRvb2wNCi0JCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCU91dHB1dEZpbGU9IiQoT3V0RGlyKVwkKFByb2plY3ROYW1lKS5weWQiDQotCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIkKE91dERpcilcJChQcm9qZWN0TmFtZSkucGRiIg0KLQkJSW1wb3J0TGlicmFyeT0iJChPdXREaXIpXCQoVGFyZ2V0TmFtZSkubGliIg0KLQkJR2VuZXJhdGVNYW5pZmVzdD0iZmFsc2UiDQotCS8+DQotCTxUb29sDQotCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCUVtYmVkTWFuaWZlc3Q9ImZhbHNlIg0KLQkvPg0KLQk8VG9vbA0KLQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQlDb21tYW5kTGluZT0iIg0KLQkvPg0KLTwvVmlzdWFsU3R1ZGlvUHJvcGVydHlTaGVldD4NCmRpZmYgLS1naXQgYS9QQy9WUzguMC9weWRfZC52c3Byb3BzIGIvUEMvVlM4LjAvcHlkX2QudnNwcm9wcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzEzYTMwYi4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9weWRfZC52c3Byb3BzCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb3BlcnR5U2hlZXQNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9InB5ZF9kIg0KLQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXGRlYnVnLnZzcHJvcHMiDQotCT4NCi0JPFRvb2wNCi0JCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQlPcHRpbWl6YXRpb249IjAiDQotCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMCINCi0JCUVuYWJsZUludHJpbnNpY0Z1bmN0aW9ucz0iZmFsc2UiDQotCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEUiDQotCQlSdW50aW1lTGlicmFyeT0iMyINCi0JLz4NCi0JPFRvb2wNCi0JCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCU91dHB1dEZpbGU9IiQoT3V0RGlyKVwkKFByb2plY3ROYW1lKV9kLnB5ZCINCi0JCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCVByb2dyYW1EYXRhYmFzZUZpbGU9IiQoT3V0RGlyKVwkKFByb2plY3ROYW1lKV9kLnBkYiINCi0JCUltcG9ydExpYnJhcnk9IiQoT3V0RGlyKVwkKFRhcmdldE5hbWUpLmxpYiINCi0JCUdlbmVyYXRlTWFuaWZlc3Q9ImZhbHNlIg0KLQkvPg0KLQk8VG9vbA0KLQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQlFbWJlZE1hbmlmZXN0PSJmYWxzZSINCi0JLz4NCi0JPFRvb2wNCi0JCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJQ29tbWFuZExpbmU9IiINCi0JLz4NCi0JPFVzZXJNYWNybw0KLQkJTmFtZT0iUHl0aG9uRXhlIg0KLQkJVmFsdWU9IiQoU29sdXRpb25EaXIpcHl0aG9uX2QuZXhlIg0KLQkvPg0KLTwvVmlzdWFsU3R1ZGlvUHJvcGVydHlTaGVldD4NCmRpZmYgLS1naXQgYS9QQy9WUzguMC9weWV4cGF0LnZjcHJvaiBiL1BDL1ZTOC4wL3B5ZXhwYXQudmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNTllNGVjLi4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL3B5ZXhwYXQudmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsNTUzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJweWV4cGF0Ig0KLQlQcm9qZWN0R1VJRD0ie0QwNkI2NDI2LTQ3NjItNDRDQy04QkFELUQ3OTA1MjUwN0YyRn0iDQotCVJvb3ROYW1lc3BhY2U9InB5ZXhwYXQiDQotCUtleXdvcmQ9IldpbjMyUHJvaiINCi0JVGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj0iMTk2NjEzIg0KLQk+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiINCi0JCS8+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJ4NjQiDQotCQkvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPFRvb2xGaWxlcz4NCi0JPC9Ub29sRmlsZXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkX2QudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLlwuLlwuLlxNb2R1bGVzXGV4cGF0Ig0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUFlFWFBBVF9FWFBPUlRTO0hBVkVfRVhQQVRfSDtYTUxfTlM7WE1MX0RURDtCWVRFT1JERVI9MTIzNDtYTUxfQ09OVEVYVF9CWVRFUz0xMDI0O1hNTF9TVEFUSUM7SEFWRV9NRU1NT1ZFIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuXC4uXC4uXE1vZHVsZXNcZXhwYXQiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQWUVYUEFUX0VYUE9SVFM7SEFWRV9FWFBBVF9IO1hNTF9OUztYTUxfRFREO0JZVEVPUkRFUj0xMjM0O1hNTF9DT05URVhUX0JZVEVTPTEwMjQ7WE1MX1NUQVRJQztIQVZFX01FTU1PVkUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii5cLi5cLi5cTW9kdWxlc1xleHBhdCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlBZRVhQQVRfRVhQT1JUUztIQVZFX0VYUEFUX0g7WE1MX05TO1hNTF9EVEQ7QllURU9SREVSPTEyMzQ7WE1MX0NPTlRFWFRfQllURVM9MTAyNDtYTUxfU1RBVElDO0hBVkVfTUVNTU9WRSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii5cLi5cLi5cTW9kdWxlc1xleHBhdCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlBZRVhQQVRfRVhQT1JUUztIQVZFX0VYUEFUX0g7WE1MX05TO1hNTF9EVEQ7QllURU9SREVSPTEyMzQ7WE1MX0NPTlRFWFRfQllURVM9MTAyNDtYTUxfU1RBVElDO0hBVkVfTUVNTU9WRSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii5cLi5cLi5cTW9kdWxlc1xleHBhdCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlBZRVhQQVRfRVhQT1JUUztIQVZFX0VYUEFUX0g7WE1MX05TO1hNTF9EVEQ7QllURU9SREVSPTEyMzQ7WE1MX0NPTlRFWFRfQllURVM9MTAyNDtYTUxfU1RBVElDO0hBVkVfTUVNTU9WRSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuXC4uXC4uXE1vZHVsZXNcZXhwYXQiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQWUVYUEFUX0VYUE9SVFM7SEFWRV9FWFBBVF9IO1hNTF9OUztYTUxfRFREO0JZVEVPUkRFUj0xMjM0O1hNTF9DT05URVhUX0JZVEVTPTEwMjQ7WE1MX1NUQVRJQztIQVZFX01FTU1PVkUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii5cLi5cLi5cTW9kdWxlc1xleHBhdCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlBZRVhQQVRfRVhQT1JUUztIQVZFX0VYUEFUX0g7WE1MX05TO1hNTF9EVEQ7QllURU9SREVSPTEyMzQ7WE1MX0NPTlRFWFRfQllURVM9MTAyNDtYTUxfU1RBVElDO0hBVkVfTUVNTU9WRSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLlwuLlwuLlxNb2R1bGVzXGV4cGF0Ig0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUFlFWFBBVF9FWFBPUlRTO0hBVkVfRVhQQVRfSDtYTUxfTlM7WE1MX0RURDtCWVRFT1JERVI9MTIzNDtYTUxfQ09OVEVYVF9CWVRFUz0xMDI0O1hNTF9TVEFUSUM7SEFWRV9NRU1NT1ZFIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iSGVhZGVyIEZpbGVzIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXhwYXRceG1scm9sZS5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xleHBhdFx4bWx0b2suaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHB5ZXhwYXQuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXhwYXRceG1scGFyc2UuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXhwYXRceG1scm9sZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xleHBhdFx4bWx0b2suYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzguMC9weXByb2plY3QudnNwcm9wcyBiL1BDL1ZTOC4wL3B5cHJvamVjdC52c3Byb3BzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMzFiZDNmLi4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL3B5cHJvamVjdC52c3Byb3BzCisrKyAvZGV2L251bGwKQEAgLTEsODcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb3BlcnR5U2hlZXQNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9InB5cHJvamVjdCINCi0JT3V0cHV0RGlyZWN0b3J5PSIkKFNvbHV0aW9uRGlyKSINCi0JSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIkKFNvbHV0aW9uRGlyKSQoUGxhdGZvcm1OYW1lKS10ZW1wLSQoQ29uZmlndXJhdGlvbk5hbWUpXCQoUHJvamVjdE5hbWUpXCINCi0JPg0KLQk8VG9vbA0KLQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCU9wdGltaXphdGlvbj0iMiINCi0JCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJRW5hYmxlSW50cmluc2ljRnVuY3Rpb25zPSJ0cnVlIg0KLQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZTsgLi5cLi5cUEMiDQotCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX1dJTjMyIg0KLQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCi0JCUV4Y2VwdGlvbkhhbmRsaW5nPSIwIg0KLQkJUnVudGltZUxpYnJhcnk9IjAiDQotCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSINCi0JCVdhcm5pbmdMZXZlbD0iMyINCi0JCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQlDb21waWxlQXM9IjAiDQotCS8+DQotCTxUb29sDQotCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQlBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPSIkKE91dERpcikiDQotCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249InRydWUiDQotCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIkKE91dERpcikkKFRhcmdldE5hbWUpLnBkYiINCi0JCVN1YlN5c3RlbT0iMiINCi0JCVJhbmRvbWl6ZWRCYXNlQWRkcmVzcz0iMSINCi0JCURhdGFFeGVjdXRpb25QcmV2ZW50aW9uPSIwIg0KLQkJVGFyZ2V0TWFjaGluZT0iMSINCi0JLz4NCi0JPFRvb2wNCi0JCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxQQzsuLlwuLlxJbmNsdWRlIg0KLQkvPg0KLQk8VXNlck1hY3JvDQotCQlOYW1lPSJQeURsbE5hbWUiDQotCQlWYWx1ZT0icHl0aG9uMzMiDQotCS8+DQotCTxVc2VyTWFjcm8NCi0JCU5hbWU9IlB5dGhvbkV4ZSINCi0JCVZhbHVlPSIkKFNvbHV0aW9uRGlyKVxweXRob24uZXhlIg0KLQkvPg0KLQk8VXNlck1hY3JvDQotCQlOYW1lPSJleHRlcm5hbHNEaXIiDQotCQlWYWx1ZT0iLi5cLi5cLi4iDQotCS8+DQotCTxVc2VyTWFjcm8NCi0JCU5hbWU9InNxbGl0ZTNEaXIiDQotCQlWYWx1ZT0iJChleHRlcm5hbHNEaXIpXHNxbGl0ZS0zLjYuMjEiDQotCS8+DQotCTxVc2VyTWFjcm8NCi0JCU5hbWU9ImJ6MkRpciINCi0JCVZhbHVlPSIkKGV4dGVybmFsc0RpcilcYnppcDItMS4wLjYiDQotCS8+DQotCTxVc2VyTWFjcm8NCi0JCU5hbWU9Im9wZW5zc2xEaXIiDQotCQlWYWx1ZT0iJChleHRlcm5hbHNEaXIpXG9wZW5zc2wtMS4wLjFlIg0KLQkvPg0KLQk8VXNlck1hY3JvDQotCQlOYW1lPSJ0Y2x0a0RpciINCi0JCVZhbHVlPSIkKGV4dGVybmFsc0RpcilcdGNsdGsiDQotCS8+DQotCTxVc2VyTWFjcm8NCi0JCU5hbWU9InRjbHRrNjREaXIiDQotCQlWYWx1ZT0iJChleHRlcm5hbHNEaXIpXHRjbHRrNjQiDQotCS8+DQotCTxVc2VyTWFjcm8NCi0JCU5hbWU9InRjbHRrTGliIg0KLQkJVmFsdWU9IiQodGNsdGtEaXIpXGxpYlx0Y2w4NS5saWIgJCh0Y2x0a0RpcilcbGliXHRrODUubGliIg0KLQkvPg0KLQk8VXNlck1hY3JvDQotCQlOYW1lPSJ0Y2x0a0xpYkRlYnVnIg0KLQkJVmFsdWU9IiQodGNsdGtEaXIpXGxpYlx0Y2w4NWcubGliICQodGNsdGtEaXIpXGxpYlx0azg1Zy5saWIiDQotCS8+DQotCTxVc2VyTWFjcm8NCi0JCU5hbWU9InRjbHRrNjRMaWIiDQotCQlWYWx1ZT0iJCh0Y2x0azY0RGlyKVxsaWJcdGNsODUubGliICQodGNsdGs2NERpcilcbGliXHRrODUubGliIg0KLQkvPg0KLQk8VXNlck1hY3JvDQotCQlOYW1lPSJ0Y2x0azY0TGliRGVidWciDQotCQlWYWx1ZT0iJCh0Y2x0azY0RGlyKVxsaWJcdGNsODVnLmxpYiAkKHRjbHRrNjREaXIpXGxpYlx0azg1Zy5saWIiDQotCS8+DQotPC9WaXN1YWxTdHVkaW9Qcm9wZXJ0eVNoZWV0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL3B5dGhvbi52Y3Byb2ogYi9QQy9WUzguMC9weXRob24udmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZjQ3YzBlLi4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL3B5dGhvbi52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSw2MzcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9InB5dGhvbiINCi0JUHJvamVjdEdVSUQ9IntCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9Ig0KLQlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxMzEwNzIiDQotCT4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIg0KLQkJLz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9Ing2NCINCi0JCS8+DQotCTwvUGxhdGZvcm1zPg0KLQk8VG9vbEZpbGVzPg0KLQk8L1Rvb2xGaWxlcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NPTlNPTEUiDQotCQkJCVN0cmluZ1Bvb2xpbmc9InRydWUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSINCi0JCQkJQ29tcGlsZUFzPSIwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KLQkJCQlDdWx0dXJlPSIxMDMzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilccHl0aG9uLmV4ZSINCi0JCQkJU3ViU3lzdGVtPSIxIg0KLQkJCQlTdGFja1Jlc2VydmVTaXplPSIyMDAwMDAwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZDAwMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9DT05TT0xFIg0KLQkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQotCQkJCUNvbXBpbGVBcz0iMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXHB5dGhvbi5leGUiDQotCQkJCVN1YlN5c3RlbT0iMSINCi0JCQkJU3RhY2tSZXNlcnZlU2l6ZT0iMjAwMDAwMCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWQwMDAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxkZWJ1Zy52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQlFbmFibGVJbnRyaW5zaWNGdW5jdGlvbnM9ImZhbHNlIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfQ09OU09MRSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjMiDQotCQkJCUJyb3dzZUluZm9ybWF0aW9uPSIxIg0KLQkJCQlDb21waWxlQXM9IjAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUciDQotCQkJCUN1bHR1cmU9IjEwMzMiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVxweXRob25fZC5leGUiDQotCQkJCVN1YlN5c3RlbT0iMSINCi0JCQkJU3RhY2tSZXNlcnZlU2l6ZT0iMjAwMDAwMCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWQwMDAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxkZWJ1Zy52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJRW5hYmxlSW50cmluc2ljRnVuY3Rpb25zPSJmYWxzZSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NPTlNPTEUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIzIg0KLQkJCQlCcm93c2VJbmZvcm1hdGlvbj0iMSINCi0JCQkJQ29tcGlsZUFzPSIwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0RFQlVHIg0KLQkJCQlDdWx0dXJlPSIxMDMzIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilccHl0aG9uX2QuZXhlIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJCVN0YWNrUmVzZXJ2ZVNpemU9IjIxMDAwMDAiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFkMDAwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NPTlNPTEUiDQotCQkJCVN0cmluZ1Bvb2xpbmc9InRydWUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSINCi0JCQkJQ29tcGlsZUFzPSIwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KLQkJCQlDdWx0dXJlPSIxMDMzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilccHl0aG9uLmV4ZSINCi0JCQkJU3ViU3lzdGVtPSIxIg0KLQkJCQlTdGFja1Jlc2VydmVTaXplPSIyMDAwMDAwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZDAwMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9DT05TT0xFIg0KLQkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQotCQkJCUNvbXBpbGVBcz0iMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXHB5dGhvbi5leGUiDQotCQkJCVN1YlN5c3RlbT0iMSINCi0JCQkJU3RhY2tSZXNlcnZlU2l6ZT0iMjAwMDAwMCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWQwMDAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9IiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NPTlNPTEUiDQotCQkJCVN0cmluZ1Bvb2xpbmc9InRydWUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSINCi0JCQkJQ29tcGlsZUFzPSIwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KLQkJCQlDdWx0dXJlPSIxMDMzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilccHl0aG9uLmV4ZSINCi0JCQkJU3ViU3lzdGVtPSIxIg0KLQkJCQlTdGFja1Jlc2VydmVTaXplPSIyMDAwMDAwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZDAwMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfQ09OU09MRSINCi0JCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIg0KLQkJCQlDb21waWxlQXM9IjAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQotCQkJCUN1bHR1cmU9IjEwMzMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVxweXRob24uZXhlIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJCVN0YWNrUmVzZXJ2ZVNpemU9IjIwMDAwMDAiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFkMDAwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJSZXNvdXJjZSBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xweWNvbi5pY28iDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xweXRob25fZXhlLnJjIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iU291cmNlIEZpbGVzIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNccHl0aG9uLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvcHl0aG9uY29yZS52Y3Byb2ogYi9QQy9WUzguMC9weXRob25jb3JlLnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTc1YmI5ZC4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9weXRob25jb3JlLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDE5MjEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9InB5dGhvbmNvcmUiDQotCVByb2plY3RHVUlEPSJ7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSINCi0JUm9vdE5hbWVzcGFjZT0icHl0aG9uY29yZSINCi0JVGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj0iMTMxMDcyIg0KLQk+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiINCi0JCS8+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJ4NjQiDQotCQkvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPFRvb2xGaWxlcz4NCi0JPC9Ub29sRmlsZXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9Ii9abTIwMCAiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXFB5dGhvbjsuLlwuLlxNb2R1bGVzXHpsaWIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfVVNSRExMO1B5X0JVSUxEX0NPUkU7UHlfRU5BQkxFX1NIQVJFRDtXSU4zMiINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQotCQkJCUN1bHR1cmU9IjEwMzMiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJCURlc2NyaXB0aW9uPSJHZW5lcmF0ZSBidWlsZCBpbmZvcm1hdGlvbi4uLiINCi0JCQkJQ29tbWFuZExpbmU9IiZxdW90OyQoU29sdXRpb25EaXIpbWFrZV9idWlsZGluZm8uZXhlJnF1b3Q7IFJlbGVhc2UgJChJbnREaXIpIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIkKEludERpcilcZ2V0YnVpbGRpbmZvLm8iDQotCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVwkKFB5RGxsTmFtZSkuZGxsIg0KLQkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIkKE91dERpcikkKFB5RGxsTmFtZSkucGRiIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTAwMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iJChPdXREaXIpJChQeURsbE5hbWUpLmxpYiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9Ii9abTIwMCAiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXFB5dGhvbjsuLlwuLlxNb2R1bGVzXHpsaWIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfVVNSRExMO1B5X0JVSUxEX0NPUkU7UHlfRU5BQkxFX1NIQVJFRDtXSU4zMiINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQotCQkJCUN1bHR1cmU9IjEwMzMiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJCURlc2NyaXB0aW9uPSJHZW5lcmF0ZSBidWlsZCBpbmZvcm1hdGlvbi4uLiINCi0JCQkJQ29tbWFuZExpbmU9IiZxdW90OyQoU29sdXRpb25EaXIpbWFrZV9idWlsZGluZm8uZXhlJnF1b3Q7IFJlbGVhc2UgJChJbnREaXIpIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIkKEludERpcilcZ2V0YnVpbGRpbmZvLm8iDQotCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVwkKFB5RGxsTmFtZSkuZGxsIg0KLQkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIkKE91dERpcikkKFB5RGxsTmFtZSkucGRiIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTAwMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iJChPdXREaXIpJChQeURsbE5hbWUpLmxpYiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXGRlYnVnLnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iL1ptMjAwICINCi0JCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMCINCi0JCQkJRW5hYmxlSW50cmluc2ljRnVuY3Rpb25zPSJmYWxzZSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cUHl0aG9uOy4uXC4uXE1vZHVsZXNcemxpYiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9VU1JETEw7UHlfQlVJTERfQ09SRTtQeV9FTkFCTEVfU0hBUkVEO1dJTjMyIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkJRGVzY3JpcHRpb249IkdlbmVyYXRlIGJ1aWxkIGluZm9ybWF0aW9uLi4uIg0KLQkJCQlDb21tYW5kTGluZT0iJnF1b3Q7JChTb2x1dGlvbkRpciltYWtlX2J1aWxkaW5mby5leGUmcXVvdDsgRGVidWcgJChJbnREaXIpIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIkKEludERpcilcZ2V0YnVpbGRpbmZvLm8iDQotCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVwkKFB5RGxsTmFtZSlfZC5kbGwiDQotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9IiQoT3V0RGlyKSQoUHlEbGxOYW1lKV9kLnBkYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUwMDAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9IiQoT3V0RGlyKSQoUHlEbGxOYW1lKV9kLmxpYiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3x4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXGRlYnVnLnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iL1ptMjAwICINCi0JCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMCINCi0JCQkJRW5hYmxlSW50cmluc2ljRnVuY3Rpb25zPSJmYWxzZSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cUHl0aG9uOy4uXC4uXE1vZHVsZXNcemxpYiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9VU1JETEw7UHlfQlVJTERfQ09SRTtQeV9FTkFCTEVfU0hBUkVEO1dJTjMyIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkJRGVzY3JpcHRpb249IkdlbmVyYXRlIGJ1aWxkIGluZm9ybWF0aW9uLi4uIg0KLQkJCQlDb21tYW5kTGluZT0iJnF1b3Q7JChTb2x1dGlvbkRpciltYWtlX2J1aWxkaW5mby5leGUmcXVvdDsgRGVidWcgJChJbnREaXIpIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIkKEludERpcilcZ2V0YnVpbGRpbmZvLm8iDQotCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVwkKFB5RGxsTmFtZSlfZC5kbGwiDQotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9IiQoT3V0RGlyKSQoUHlEbGxOYW1lKV9kLnBkYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUwMDAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9IiQoT3V0RGlyKSQoUHlEbGxOYW1lKV9kLmxpYiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9Ii9abTIwMCAiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXFB5dGhvbjsuLlwuLlxNb2R1bGVzXHpsaWIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfVVNSRExMO1B5X0JVSUxEX0NPUkU7UHlfRU5BQkxFX1NIQVJFRDtXSU4zMiINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQotCQkJCUN1bHR1cmU9IjEwMzMiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJCURlc2NyaXB0aW9uPSJHZW5lcmF0ZSBidWlsZCBpbmZvcm1hdGlvbi4uLiINCi0JCQkJQ29tbWFuZExpbmU9IiZxdW90OyQoU29sdXRpb25EaXIpbWFrZV9idWlsZGluZm8uZXhlJnF1b3Q7IFJlbGVhc2UgJChJbnREaXIpIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIkKEludERpcilcZ2V0YnVpbGRpbmZvLm8iDQotCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVwkKFB5RGxsTmFtZSkuZGxsIg0KLQkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIkKE91dERpcikkKFB5RGxsTmFtZSkucGRiIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTAwMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iJChPdXREaXJQR0kpJChQeURsbE5hbWUpLmxpYiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIvWm0yMDAgIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxQeXRob247Li5cLi5cTW9kdWxlc1x6bGliIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX1VTUkRMTDtQeV9CVUlMRF9DT1JFO1B5X0VOQUJMRV9TSEFSRUQ7V0lOMzIiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KLQkJCQlDdWx0dXJlPSIxMDMzIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCQlEZXNjcmlwdGlvbj0iR2VuZXJhdGUgYnVpbGQgaW5mb3JtYXRpb24uLi4iDQotCQkJCUNvbW1hbmRMaW5lPSImcXVvdDskKFNvbHV0aW9uRGlyKW1ha2VfYnVpbGRpbmZvLmV4ZSZxdW90OyBSZWxlYXNlICQoSW50RGlyKSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iJChJbnREaXIpXGdldGJ1aWxkaW5mby5vIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilcJChQeURsbE5hbWUpLmRsbCINCi0JCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iJChPdXREaXIpJChQeURsbE5hbWUpLnBkYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUwMDAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9IiQoT3V0RGlyUEdJKSQoUHlEbGxOYW1lKS5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9Ii9abTIwMCAiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXFB5dGhvbjsuLlwuLlxNb2R1bGVzXHpsaWIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfVVNSRExMO1B5X0JVSUxEX0NPUkU7UHlfRU5BQkxFX1NIQVJFRDtXSU4zMiINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQotCQkJCUN1bHR1cmU9IjEwMzMiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJCURlc2NyaXB0aW9uPSJHZW5lcmF0ZSBidWlsZCBpbmZvcm1hdGlvbi4uLiINCi0JCQkJQ29tbWFuZExpbmU9IiZxdW90OyQoU29sdXRpb25EaXIpbWFrZV9idWlsZGluZm8uZXhlJnF1b3Q7IFJlbGVhc2UgKCRJbnREaXIpIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIkKEludERpcilcZ2V0YnVpbGRpbmZvLm8iDQotCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVwkKFB5RGxsTmFtZSkuZGxsIg0KLQkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIkKE91dERpcikkKFB5RGxsTmFtZSkucGRiIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTAwMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iJChPdXREaXJQR0kpJChQeURsbE5hbWUpLmxpYiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iL1ptMjAwICINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cUHl0aG9uOy4uXC4uXE1vZHVsZXNcemxpYiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9VU1JETEw7UHlfQlVJTERfQ09SRTtQeV9FTkFCTEVfU0hBUkVEO1dJTjMyIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkJRGVzY3JpcHRpb249IkdlbmVyYXRlIGJ1aWxkIGluZm9ybWF0aW9uLi4uIg0KLQkJCQlDb21tYW5kTGluZT0iJnF1b3Q7JChTb2x1dGlvbkRpciltYWtlX2J1aWxkaW5mby5leGUmcXVvdDsgUmVsZWFzZSAkKEludERpcikiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IiQoSW50RGlyKVxnZXRidWlsZGluZm8ubyINCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXCQoUHlEbGxOYW1lKS5kbGwiDQotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9IiQoT3V0RGlyKSQoUHlEbGxOYW1lKS5wZGIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMDAwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIkKE91dERpclBHSSkkKFB5RGxsTmFtZSkubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iSW5jbHVkZSINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGFic3RyYWN0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGFjY3UuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcYXNkbC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxhc3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcYml0c2V0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGJvb2xvYmplY3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcYnl0ZXNfbWV0aG9kcy5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxieXRlYXJyYXlvYmplY3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcYnl0ZXNvYmplY3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcY2VsbG9iamVjdC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxjZXZhbC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxjbGFzc29iamVjdC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxjb2RlLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGNvZGVjcy5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxjb21waWxlLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGNvbXBsZXhvYmplY3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcZGF0ZXRpbWUuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcZGVzY3JvYmplY3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcZGljdG9iamVjdC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxkeW5hbWljX2Fubm90YXRpb25zLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGVudW1vYmplY3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcZXJyY29kZS5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxldmFsLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGZpbGVvYmplY3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcZmlsZXV0aWxzLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGZsb2F0b2JqZWN0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGZvcm1hdHRlcl91bmljb2RlLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGZyYW1lb2JqZWN0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGZ1bmNvYmplY3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcZ2Vub2JqZWN0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGdyYW1pbml0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGdyYW1tYXIuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcaW1wb3J0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGludHJjaGVjay5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxpdGVyb2JqZWN0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGxpc3RvYmplY3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcbG9uZ2ludHJlcHIuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcbG9uZ29iamVjdC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxtYXJzaGFsLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXG1lbW9yeW9iamVjdC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxtZXRhZ3JhbW1hci5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxtZXRob2RvYmplY3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcbW9kc3VwcG9ydC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxtb2R1bGVvYmplY3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcbm9kZS5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxvYmplY3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcb2JqaW1wbC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxvcGNvZGUuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcb3NkZWZzLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHBhcnNldG9rLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHBhdGNobGV2ZWwuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVccGdlbi5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxwZ2VuaGVhZGVycy5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxweV9jdXJzZXMuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVccHlhcmVuYS5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxweWNhcHN1bGUuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVccHljdHlwZS5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxweWRlYnVnLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHB5ZXJyb3JzLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHB5ZXhwYXQuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVccHlmcGUuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVccHlnZXRvcHQuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVccHltYWN0b29sYm94LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHB5bWF0aC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxweXRpbWUuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVccHltZW0uaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVccHlwb3J0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHB5c3RhdGUuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVccHlzdHJjbXAuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVccHlzdHJ0b2QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcZHRvYS5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxQeXRob24tYXN0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXFB5dGhvbi5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxweXRob25ydW4uaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVccHl0aHJlYWQuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVccmFuZ2VvYmplY3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcc2V0b2JqZWN0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHNsaWNlb2JqZWN0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHN0cnVjdG1lbWJlci5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxzdHJ1Y3RzZXEuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcc3ltdGFibGUuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcc3lzbW9kdWxlLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHRpbWVmdW5jcy5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVx0b2tlbi5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVx0cmFjZWJhY2suaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcdHVwbGVvYmplY3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcdWNuaGFzaC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVx1bmljb2Rlb2JqZWN0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHdlYWtyZWZvYmplY3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9Ik1vZHVsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfYmlzZWN0bW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jb2RlY3Ntb2R1bGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2NvbGxlY3Rpb25zbW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jc3YuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2Z1bmN0b29sc21vZHVsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfaGVhcHFtb2R1bGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2pzb24uYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2xvY2FsZW1vZHVsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfbHNwcm9mLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9tYXRoLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9tYXRoLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9waWNrbGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3JhbmRvbW1vZHVsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3JlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zdHJ1Y3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3RpbWUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3RpbWUuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3dlYWtyZWYuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcYXJyYXltb2R1bGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcYXRleGl0bW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGF1ZGlvb3AuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcYmluYXNjaWkuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcY21hdGhtb2R1bGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2RhdGV0aW1lbW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGVycm5vbW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGdjbW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGl0ZXJ0b29sc21vZHVsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xtYWluLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXG1hdGhtb2R1bGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcbWQ1bW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXG1tYXBtb2R1bGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcb3BlcmF0b3IuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNccGFyc2VybW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHBvc2l4bW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHJvdGF0aW5ndHJlZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xyb3RhdGluZ3RyZWUuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcc2hhMW1vZHVsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xzaGEyNTZtb2R1bGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcc2hhNTEybW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHNpZ25hbG1vZHVsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xzeW10YWJsZW1vZHVsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfdGhyZWFkbW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHRpbWVtb2R1bGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNceHhzdWJ0eXBlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHppcGltcG9ydC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGlibW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbHRlcg0KLQkJCQlOYW1lPSJfaW8iDQotCQkJCT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfaW9cZmlsZWlvLmMiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfaW9cYnl0ZXNpby5jIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2lvXHN0cmluZ2lvLmMiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfaW9cYnVmZmVyZWRpby5jIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2lvXGlvYmFzZS5jIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2lvXHRleHRpby5jIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2lvXF9pb21vZHVsZS5jIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2lvXF9pb21vZHVsZS5oIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJPC9GaWx0ZXI+DQotCQkJPEZpbHRlcg0KLQkJCQlOYW1lPSJ6bGliIg0KLQkJCQk+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlxhZGxlcjMyLmMiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXGNvbXByZXNzLmMiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXGNyYzMyLmMiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXGNyYzMyLmgiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXGRlZmxhdGUuYyINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcZGVmbGF0ZS5oIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlxnemlvLmMiDQotCQkJCQk+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW42NCINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9DUlRfU0VDVVJFX05PX0RFUFJFQ0FURSINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWd8V2luNjQiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEUiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJQR0luc3RydW1lbnR8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEUiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJQR0luc3RydW1lbnR8V2luNjQiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEUiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJQR1VwZGF0ZXxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9DUlRfU0VDVVJFX05PX0RFUFJFQ0FURSINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlBHVXBkYXRlfFdpbjY0Ig0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlxpbmZiYWNrLmMiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXGluZmZhc3QuYyINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcaW5mZmFzdC5oIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlxpbmZmaXhlZC5oIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlxpbmZsYXRlLmMiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXGluZmxhdGUuaCINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcaW5mdHJlZXMuYyINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcaW5mdHJlZXMuaCINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcdHJlZXMuYyINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcdHJlZXMuaCINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcdW5jb21wci5jIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlx6Y29uZi5oIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlx6Y29uZi5pbi5oIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlx6bGliLmgiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXHp1dGlsLmMiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXHp1dGlsLmgiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQk8L0ZpbHRlcj4NCi0JCQk8RmlsdGVyDQotCQkJCU5hbWU9ImNqa2NvZGVjcyINCi0JCQkJPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGNqa2NvZGVjc1xfY29kZWNzX2NuLmMiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xjamtjb2RlY3NcX2NvZGVjc19oay5jIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcY2prY29kZWNzXF9jb2RlY3NfaXNvMjAyMi5jIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcY2prY29kZWNzXF9jb2RlY3NfanAuYyINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGNqa2NvZGVjc1xfY29kZWNzX2tyLmMiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xjamtjb2RlY3NcX2NvZGVjc190dy5jIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcY2prY29kZWNzXGFsZ19qaXN4MDIwMS5oIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcY2prY29kZWNzXGNqa2NvZGVjcy5oIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcY2prY29kZWNzXGVtdV9qaXN4MDIxM18yMDAwLmgiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xjamtjb2RlY3NcbWFwcGluZ3NfY24uaCINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGNqa2NvZGVjc1xtYXBwaW5nc19oay5oIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcY2prY29kZWNzXG1hcHBpbmdzX2ppc3gwMjEzX3BhaXIuaCINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGNqa2NvZGVjc1xtYXBwaW5nc19qcC5oIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcY2prY29kZWNzXG1hcHBpbmdzX2tyLmgiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xjamtjb2RlY3NcbWFwcGluZ3NfdHcuaCINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGNqa2NvZGVjc1xtdWx0aWJ5dGVjb2RlYy5jIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcY2prY29kZWNzXG11bHRpYnl0ZWNvZGVjLmgiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQk8L0ZpbHRlcj4NCi0JCTwvRmlsdGVyPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9Ik9iamVjdHMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xhYnN0cmFjdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xhY2N1LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGJvb2xvYmplY3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcYnl0ZXNfbWV0aG9kcy5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xieXRlYXJyYXlvYmplY3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcYnl0ZXNvYmplY3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcY2Fwc3VsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xjZWxsb2JqZWN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGNsYXNzb2JqZWN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGNvZGVvYmplY3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcY29tcGxleG9iamVjdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xzdHJpbmdsaWJcY291bnQuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcZGVzY3JvYmplY3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcZGljdG9iamVjdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xlbnVtb2JqZWN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGV4Y2VwdGlvbnMuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcc3RyaW5nbGliXGZhc3RzZWFyY2guaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcZmlsZW9iamVjdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xzdHJpbmdsaWJcZmluZC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xmbG9hdG9iamVjdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xmcmFtZW9iamVjdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xmdW5jb2JqZWN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGdlbm9iamVjdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xpdGVyb2JqZWN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGxpc3RvYmplY3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcbG9uZ29iamVjdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xtZW1vcnlvYmplY3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcbWV0aG9kb2JqZWN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXG1vZHVsZW9iamVjdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xvYmplY3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcb2JtYWxsb2MuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcc3RyaW5nbGliXHBhcnRpdGlvbi5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xyYW5nZW9iamVjdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xzZXRvYmplY3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcc2xpY2VvYmplY3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcc3RyaW5nbGliXHNwbGl0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXHN0cnVjdHNlcS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1x0dXBsZW9iamVjdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1x0eXBlb2JqZWN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXHVuaWNvZGVjdHlwZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1x1bmljb2Rlb2JqZWN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXHVuaWNvZGV0eXBlX2RiLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXHdlYWtyZWZvYmplY3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlBhcnNlciINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQYXJzZXJcYWNjZWxlci5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUGFyc2VyXGJpdHNldC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUGFyc2VyXGZpcnN0c2V0cy5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUGFyc2VyXGdyYW1tYXIuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBhcnNlclxncmFtbWFyMS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUGFyc2VyXGxpc3Rub2RlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQYXJzZXJcbWV0YWdyYW1tYXIuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBhcnNlclxteXJlYWRsaW5lLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQYXJzZXJcbm9kZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUGFyc2VyXHBhcnNlci5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUGFyc2VyXHBhcnNlci5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUGFyc2VyXHBhcnNldG9rLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQYXJzZXJcdG9rZW5pemVyLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQYXJzZXJcdG9rZW5pemVyLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJQQyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xfc3VicHJvY2Vzcy5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUENcd2lucmVnLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xjb25maWcuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBDXGRsX250LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xlcnJtYXAuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBDXGdldHBhdGhwLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xtc3ZjcnRtb2R1bGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBDXHB5Y29uZmlnLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJQeXRob24iDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXF93YXJuaW5ncy5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGFzZGwuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxhc3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxibHRpbm1vZHVsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGNldmFsLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cY29kZWNzLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cY29tcGlsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGR5bmFtaWNfYW5ub3RhdGlvbnMuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxkeW5sb2FkX3dpbi5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGVycm9ycy5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGZpbGV1dGlscy5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGZvcm1hdHRlcl91bmljb2RlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cZnJvemVuLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cZnV0dXJlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cZ2V0YXJncy5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGdldGNvbXBpbGVyLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cZ2V0Y29weXJpZ2h0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cZ2V0b3B0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cZ2V0cGxhdGZvcm0uYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxnZXR2ZXJzaW9uLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cZ3JhbWluaXQuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxpbXBvcnQuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxpbXBvcnRkbC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGltcG9ydGRsLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cbWFyc2hhbC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXG1vZHN1cHBvcnQuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxteXNucHJpbnRmLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cbXlzdHJ0b3VsLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25ccGVlcGhvbGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxweWFyZW5hLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25ccHljdHlwZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXHB5ZnBlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25ccHltYXRoLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25ccHl0aW1lLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25ccHlzdGF0ZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXHB5c3RyY21wLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25ccHlzdHJ0b2QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxkdG9hLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cUHl0aG9uLWFzdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXHB5dGhvbnJ1bi5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXHJhbmRvbS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXHN0cnVjdG1lbWJlci5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXHN5bXRhYmxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cc3lzbW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cdGhyZWFkLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cdGhyZWFkX250LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cdHJhY2ViYWNrLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJSZXNvdXJjZSBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xweXRob25fbnQucmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvcHl0aG9udy52Y3Byb2ogYi9QQy9WUzguMC9weXRob253LnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTAzN2I3OC4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9weXRob253LnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDYxOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOC4wMCINCi0JTmFtZT0icHl0aG9udyINCi0JUHJvamVjdEdVSUQ9IntGNDIyOUNDMy04NzNDLTQ5QUUtOTcyOS1ERDMwOEVENENENEF9Ig0KLQlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxMzEwNzIiDQotCT4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIg0KLQkJLz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9Ing2NCINCi0JCS8+DQotCTwvUGxhdGZvcm1zPg0KLQk8VG9vbEZpbGVzPg0KLQk8L1Rvb2xGaWxlcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXGRlYnVnLnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCUVuYWJsZUludHJpbnNpY0Z1bmN0aW9ucz0iZmFsc2UiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9XSU5ET1dTIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0RFQlVHIg0KLQkJCQlDdWx0dXJlPSIxMDMzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilccHl0aG9ud19kLmV4ZSINCi0JCQkJU3RhY2tSZXNlcnZlU2l6ZT0iMjAwMDAwMCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWQwMDAwMDAiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxkZWJ1Zy52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQlFbmFibGVJbnRyaW5zaWNGdW5jdGlvbnM9ImZhbHNlIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfV0lORE9XUyINCi0JCQkJUnVudGltZUxpYnJhcnk9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXHB5dGhvbndfZC5leGUiDQotCQkJCVN0YWNrUmVzZXJ2ZVNpemU9IjIwMDAwMDAiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFkMDAwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9XSU5ET1dTIg0KLQkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQotCQkJCUNvbXBpbGVBcz0iMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXHB5dGhvbncuZXhlIg0KLQkJCQlTdGFja1Jlc2VydmVTaXplPSIyMDAwMDAwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZDAwMDAwMCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX1dJTkRPV1MiDQotCQkJCVN0cmluZ1Bvb2xpbmc9InRydWUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSINCi0JCQkJQ29tcGlsZUFzPSIwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KLQkJCQlDdWx0dXJlPSIxMDMzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilccHl0aG9udy5leGUiDQotCQkJCVN0YWNrUmVzZXJ2ZVNpemU9IjIwMDAwMDAiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFkMDAwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfV0lORE9XUyINCi0JCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIg0KLQkJCQlDb21waWxlQXM9IjAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQotCQkJCUN1bHR1cmU9IjEwMzMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVxweXRob253LmV4ZSINCi0JCQkJU3RhY2tSZXNlcnZlU2l6ZT0iMjAwMDAwMCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWQwMDAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9IiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9XSU5ET1dTIg0KLQkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQotCQkJCUNvbXBpbGVBcz0iMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXHB5dGhvbncuZXhlIg0KLQkJCQlTdGFja1Jlc2VydmVTaXplPSIyMDAwMDAwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZDAwMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9XSU5ET1dTIg0KLQkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQotCQkJCUNvbXBpbGVBcz0iMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXHB5dGhvbncuZXhlIg0KLQkJCQlTdGFja1Jlc2VydmVTaXplPSIyMDAwMDAwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZDAwMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9XSU5ET1dTIg0KLQkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQotCQkJCUNvbXBpbGVBcz0iMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXHB5dGhvbncuZXhlIg0KLQkJCQlTdGFja1Jlc2VydmVTaXplPSIyMDAwMDAwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZDAwMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iUmVzb3VyY2UgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUENccHl0aG9uX2V4ZS5yYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xXaW5NYWluLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvcmVsZWFzZS52c3Byb3BzIGIvUEMvVlM4LjAvcmVsZWFzZS52c3Byb3BzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOGRlZjkwLi4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL3JlbGVhc2UudnNwcm9wcworKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9wZXJ0eVNoZWV0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJyZWxlYXNlIg0KLQk+DQotCTxUb29sDQotCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JLz4NCi0JPFVzZXJNYWNybw0KLQkJTmFtZT0iS2lsbFB5dGhvbkV4ZSINCi0JCVZhbHVlPSIkKE91dERpcilca2lsbF9weXRob24uZXhlIg0KLQkvPgkNCi08L1Zpc3VhbFN0dWRpb1Byb3BlcnR5U2hlZXQ+DQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvcm1weWMucHkgYi9QQy9WUzguMC9ybXB5Yy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMThlMTcwNS4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9ybXB5Yy5weQorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLSMgUmVtb3ZlIGFsbCB0aGUgLnB5YyBhbmQgLnB5byBmaWxlcyB1bmRlciAuLi9MaWIuCi0KLQotZGVmIGRlbHRyZWUocm9vdCk6Ci0gICAgaW1wb3J0IG9zCi0gICAgZnJvbSBvcy5wYXRoIGltcG9ydCBqb2luCi0KLSAgICBucHljID0gbnB5byA9IDAKLSAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2Fsayhyb290KToKLSAgICAgICAgZm9yIG5hbWUgaW4gZmlsZXM6Ci0gICAgICAgICAgICBkZWxldGUgPSBGYWxzZQotICAgICAgICAgICAgaWYgbmFtZS5lbmRzd2l0aCgnLnB5YycpOgotICAgICAgICAgICAgICAgIGRlbGV0ZSA9IFRydWUKLSAgICAgICAgICAgICAgICBucHljICs9IDEKLSAgICAgICAgICAgIGVsaWYgbmFtZS5lbmRzd2l0aCgnLnB5bycpOgotICAgICAgICAgICAgICAgIGRlbGV0ZSA9IFRydWUKLSAgICAgICAgICAgICAgICBucHlvICs9IDEKLQotICAgICAgICAgICAgaWYgZGVsZXRlOgotICAgICAgICAgICAgICAgIG9zLnJlbW92ZShqb2luKHJvb3QsIG5hbWUpKQotCi0gICAgcmV0dXJuIG5weWMsIG5weW8KLQotbnB5YywgbnB5byA9IGRlbHRyZWUoIi4uLy4uL0xpYiIpCi1wcmludChucHljLCAiLnB5YyBkZWxldGVkLCIsIG5weW8sICIucHlvIGRlbGV0ZWQiKQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvcnQuYmF0IGIvUEMvVlM4LjAvcnQuYmF0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNDI5ZTE5Li4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL3J0LmJhdAorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLUBlY2hvIG9mZgotcmVtIFJ1biBUZXN0cy4gIFJ1biB0aGUgcmVncmVzc2lvbiB0ZXN0IHN1aXRlLgotcmVtIFVzYWdlOiAgcnQgWy1kXSBbLU9dIFstcV0gcmVncnRlc3RfYXJncwotcmVtIC1kICAgUnVuIERlYnVnIGJ1aWxkIChweXRob25fZC5leGUpLiAgRWxzZSByZWxlYXNlIGJ1aWxkLgotcmVtIC1PICAgUnVuIHB5dGhvbi5leGUgb3IgcHl0aG9uX2QuZXhlIChzZWUgLWQpIHdpdGggLU8uCi1yZW0gLXEgICAicXVpY2siIC0tIG5vcm1hbGx5IHRoZSB0ZXN0cyBhcmUgcnVuIHR3aWNlLCB0aGUgZmlyc3QgdGltZQotcmVtICAgICAgYWZ0ZXIgZGVsZXRpbmcgYWxsIHRoZSAucHlbY29dIGZpbGVzIHJlYWNoYWJsZSBmcm9tIExpYi8uCi1yZW0gICAgICAtcSBydW5zIHRoZSB0ZXN0cyBqdXN0IG9uY2UsIGFuZCB3aXRob3V0IGRlbGV0aW5nIC5weVtjb10gZmlsZXMuCi1yZW0gQWxsIGxlYWRpbmcgaW5zdGFuY2VzIG9mIHRoZXNlIHN3aXRjaGVzIGFyZSBzaGlmdGVkIG9mZiwgYW5kCi1yZW0gd2hhdGV2ZXIgcmVtYWlucyBpcyBwYXNzZWQgdG8gcmVncnRlc3QucHkuICBGb3IgZXhhbXBsZSwKLXJlbSAgICAgcnQgLU8gLWQgLXggdGVzdF90aHJlYWQKLXJlbSBydW5zCi1yZW0gICAgIHB5dGhvbl9kIC1PIC4uL2xpYi90ZXN0L3JlZ3J0ZXN0LnB5IC14IHRlc3RfdGhyZWFkCi1yZW0gdHdpY2UsIGFuZAotcmVtICAgICBydCAtcSAtZyB0ZXN0X2JpbmFzY2lpCi1yZW0gcnVucwotcmVtICAgICBweXRob25fZCAuLi9saWIvdGVzdC9yZWdydGVzdC5weSAtZyB0ZXN0X2JpbmFzY2lpCi1yZW0gdG8gZ2VuZXJhdGUgdGhlIGV4cGVjdGVkLW91dHB1dCBmaWxlIGZvciBiaW5hc2NpaSBxdWlja2x5LgotcmVtCi1yZW0gQ29uZnVzaW5nOiAgaWYgeW91IHdhbnQgdG8gcGFzcyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0LCBsaWtlCi1yZW0gICAgIC11IG5ldHdvcmssbGFyZ2VmaWxlCi1yZW0gdGhlbiB5b3UgaGF2ZSB0byBxdW90ZSBpdCBvbiB0aGUgcnQgbGluZSwgbGlrZQotcmVtICAgICBydCAtdSAibmV0d29yayxsYXJnZWZpbGUiCi0KLXNldGxvY2FsCi0KLXNldCBleGU9cHl0aG9uCi1zZXQgcW1vZGU9Ci1zZXQgZGFzaE89Ci1QQVRIICVQQVRIJTslfmRwMC4uXC4uXC4uXHRjbHRrXGJpbgotCi06Q2hlY2tPcHRzCi1pZiAiJTEiPT0iLU8iIChzZXQgZGFzaE89LU8pICAgICAmIHNoaWZ0ICYgZ290byBDaGVja09wdHMKLWlmICIlMSI9PSItcSIgKHNldCBxbW9kZT15ZXMpICAgICYgc2hpZnQgJiBnb3RvIENoZWNrT3B0cwotaWYgIiUxIj09Ii1kIiAoc2V0IGV4ZT1weXRob25fZCkgJiBzaGlmdCAmIGdvdG8gQ2hlY2tPcHRzCi0KLXNldCBjbWQ9JWV4ZSUgJWRhc2hPJSAtRSAuLi8uLi9saWIvdGVzdC9yZWdydGVzdC5weSAlMSAlMiAlMyAlNCAlNSAlNiAlNyAlOCAlOQotaWYgZGVmaW5lZCBxbW9kZSBnb3RvIFFtb2RlCi0KLWVjaG8gRGVsZXRpbmcgLnB5Yy8ucHlvIGZpbGVzIC4uLgotJWV4ZSUgcm1weWMucHkKLQotZWNobyBvbgotJWNtZCUKLUBlY2hvIG9mZgotCi1lY2hvIEFib3V0IHRvIHJ1biBhZ2FpbiB3aXRob3V0IGRlbGV0aW5nIC5weWMvLnB5byBmaXJzdDoKLXBhdXNlCi0KLTpRbW9kZQotZWNobyBvbgotJWNtZCUKZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL3NlbGVjdC52Y3Byb2ogYi9QQy9WUzguMC9zZWxlY3QudmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NzFmYzE2Li4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL3NlbGVjdC52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSw1MzcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9InNlbGVjdCINCi0JUHJvamVjdEdVSUQ9InsxOENBRTI4Qy1CNDU0LTQ2QzEtODdBMC00OTNEOTFEOTdGMDN9Ig0KLQlSb290TmFtZXNwYWNlPSJzZWxlY3QiDQotCUtleXdvcmQ9IldpbjMyUHJvaiINCi0JVGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj0iMTk2NjEzIg0KLQk+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiINCi0JCS8+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJ4NjQiDQotCQkvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPFRvb2xGaWxlcz4NCi0JPC9Ub29sRmlsZXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkX2QudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiINCi0JCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMTAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZF9kLnZzcHJvcHM7Llx4NjQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiDQotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTEwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIg0KLQkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDExMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiDQotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTEwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiINCi0JCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMTAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiINCi0JCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMTAwMDAiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiDQotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTEwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIg0KLQkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDExMDAwMCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHNlbGVjdG1vZHVsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL3NxbGl0ZTMudmNwcm9qIGIvUEMvVlM4LjAvc3FsaXRlMy52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhZmJlNWQuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvc3FsaXRlMy52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSw1MzcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9InNxbGl0ZTMiDQotCVByb2plY3RHVUlEPSJ7QTFBMjk1RTUtNDYzQy00MzdGLTgxQ0EtMUYzMjM2NzY4NURBfSINCi0JUm9vdE5hbWVzcGFjZT0ic3FsaXRlMyINCi0JS2V5d29yZD0iV2luMzJQcm9qIg0KLQlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxOTY2MTMiDQotCT4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIg0KLQkJLz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9Ing2NCINCi0JCS8+DQotCTwvUGxhdGZvcm1zPg0KLQk8VG9vbEZpbGVzPg0KLQk8L1Rvb2xGaWxlcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxzcWxpdGUzLnZzcHJvcHM7LlxkZWJ1Zy52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVwkKFByb2plY3ROYW1lKV9kLmRsbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3x4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5cc3FsaXRlMy52c3Byb3BzOy5cZGVidWcudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilcJChQcm9qZWN0TmFtZSlfZC5kbGwiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxzcWxpdGUzLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVwkKFByb2plY3ROYW1lKS5kbGwiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5cc3FsaXRlMy52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilcJChQcm9qZWN0TmFtZSkuZGxsIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxzcWxpdGUzLnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiZxdW90Oy4uXC4uXC4uXHNxbGl0ZS0zLjYuMjEmcXVvdDsiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVwkKFByb2plY3ROYW1lKS5kbGwiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxzcWxpdGUzLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxzcWxpdGUzLnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilcJChQcm9qZWN0TmFtZSkuZGxsIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxzcWxpdGUzLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJIZWFkZXIgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3FsaXRlLTMuNi4yMVxzcWxpdGUzLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcWxpdGUtMy42LjIxXHNxbGl0ZTNleHQuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcWxpdGUtMy42LjIxXHNxbGl0ZTMuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzguMC9zcWxpdGUzLnZzcHJvcHMgYi9QQy9WUzguMC9zcWxpdGUzLnZzcHJvcHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzMDAzMjguLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvc3FsaXRlMy52c3Byb3BzCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb3BlcnR5U2hlZXQNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9InNxbGl0ZTMiDQotCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzIg0KLQk+DQotCTxUb29sDQotCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5cc3FsaXRlLTMuNi4yMSINCi0JCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJTUUxJVEVfQVBJPV9fZGVjbHNwZWMoZGxsZXhwb3J0KSINCi0JCVdhcm5pbmdMZXZlbD0iMSINCi0JLz4NCi08L1Zpc3VhbFN0dWRpb1Byb3BlcnR5U2hlZXQ+DQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvc3NsLnZjcHJvaiBiL1BDL1ZTOC4wL3NzbC52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwZDYzNWUuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvc3NsLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDE4OSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOC4wMCINCi0JTmFtZT0ic3NsIg0KLQlQcm9qZWN0R1VJRD0ie0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0iDQotCVJvb3ROYW1lc3BhY2U9InNzbCINCi0JS2V5d29yZD0iTWFrZUZpbGVQcm9qIg0KLQlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxOTY2MTMiDQotCT4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIg0KLQkJLz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9Ing2NCINCi0JCS8+DQotCTwvUGxhdGZvcm1zPg0KLQk8VG9vbEZpbGVzPg0KLQk8L1Rvb2xGaWxlcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMCINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNOTWFrZVRvb2wiDQotCQkJCUJ1aWxkQ29tbWFuZExpbmU9ImNkICZxdW90OyQoU29sdXRpb25EaXIpJnF1b3Q7JiN4MEQ7JiN4MEE7JnF1b3Q7JChQeXRob25FeGUpJnF1b3Q7IGJ1aWxkX3NzbC5weSBSZWxlYXNlICQoUGxhdGZvcm1OYW1lKSAtYSYjeDBEOyYjeDBBOyINCi0JCQkJUmVCdWlsZENvbW1hbmRMaW5lPSIiDQotCQkJCUNsZWFuQ29tbWFuZExpbmU9IiINCi0JCQkJT3V0cHV0PSIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCUluY2x1ZGVTZWFyY2hQYXRoPSIiDQotCQkJCUZvcmNlZEluY2x1ZGVzPSIiDQotCQkJCUFzc2VtYmx5U2VhcmNoUGF0aD0iIg0KLQkJCQlGb3JjZWRVc2luZ0Fzc2VtYmxpZXM9IiINCi0JCQkJQ29tcGlsZUFzTWFuYWdlZD0iIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMCINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ05NYWtlVG9vbCINCi0JCQkJQnVpbGRDb21tYW5kTGluZT0iY2QgJnF1b3Q7JChTb2x1dGlvbkRpcikmcXVvdDsmI3gwRDsmI3gwQTsmcXVvdDskKFB5dGhvbkV4ZSkmcXVvdDsgYnVpbGRfc3NsLnB5IFJlbGVhc2UgJChQbGF0Zm9ybU5hbWUpIC1hJiN4MEQ7JiN4MEE7Ig0KLQkJCQlSZUJ1aWxkQ29tbWFuZExpbmU9IiINCi0JCQkJQ2xlYW5Db21tYW5kTGluZT0iIg0KLQkJCQlPdXRwdXQ9IiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJSW5jbHVkZVNlYXJjaFBhdGg9IiINCi0JCQkJRm9yY2VkSW5jbHVkZXM9IiINCi0JCQkJQXNzZW1ibHlTZWFyY2hQYXRoPSIiDQotCQkJCUZvcmNlZFVzaW5nQXNzZW1ibGllcz0iIg0KLQkJCQlDb21waWxlQXNNYW5hZ2VkPSIiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMCINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTk1ha2VUb29sIg0KLQkJCQlCdWlsZENvbW1hbmRMaW5lPSJjZCAmcXVvdDskKFNvbHV0aW9uRGlyKSZxdW90OyYjeDBEOyYjeDBBOyZxdW90OyQoUHl0aG9uRXhlKSZxdW90OyBidWlsZF9zc2wucHkgUmVsZWFzZSAkKFBsYXRmb3JtTmFtZSkgLWEmI3gwRDsmI3gwQTsiDQotCQkJCVJlQnVpbGRDb21tYW5kTGluZT0iIg0KLQkJCQlDbGVhbkNvbW1hbmRMaW5lPSIiDQotCQkJCU91dHB1dD0iIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQlJbmNsdWRlU2VhcmNoUGF0aD0iIg0KLQkJCQlGb3JjZWRJbmNsdWRlcz0iIg0KLQkJCQlBc3NlbWJseVNlYXJjaFBhdGg9IiINCi0JCQkJRm9yY2VkVXNpbmdBc3NlbWJsaWVzPSIiDQotCQkJCUNvbXBpbGVBc01hbmFnZWQ9IiINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMCINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNOTWFrZVRvb2wiDQotCQkJCUJ1aWxkQ29tbWFuZExpbmU9ImNkICZxdW90OyQoU29sdXRpb25EaXIpJnF1b3Q7JiN4MEQ7JiN4MEE7JnF1b3Q7JChQeXRob25FeGUpJnF1b3Q7IGJ1aWxkX3NzbC5weSBSZWxlYXNlICQoUGxhdGZvcm1OYW1lKSAtYSYjeDBEOyYjeDBBOyINCi0JCQkJUmVCdWlsZENvbW1hbmRMaW5lPSIiDQotCQkJCUNsZWFuQ29tbWFuZExpbmU9IiINCi0JCQkJT3V0cHV0PSIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCUluY2x1ZGVTZWFyY2hQYXRoPSIiDQotCQkJCUZvcmNlZEluY2x1ZGVzPSIiDQotCQkJCUFzc2VtYmx5U2VhcmNoUGF0aD0iIg0KLQkJCQlGb3JjZWRVc2luZ0Fzc2VtYmxpZXM9IiINCi0JCQkJQ29tcGlsZUFzTWFuYWdlZD0iIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMCINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNOTWFrZVRvb2wiDQotCQkJCUJ1aWxkQ29tbWFuZExpbmU9ImNkICZxdW90OyQoU29sdXRpb25EaXIpJnF1b3Q7JiN4MEQ7JiN4MEE7JnF1b3Q7JChQeXRob25FeGUpJnF1b3Q7IGJ1aWxkX3NzbC5weSBSZWxlYXNlICQoUGxhdGZvcm1OYW1lKSAtYSYjeDBEOyYjeDBBOyINCi0JCQkJUmVCdWlsZENvbW1hbmRMaW5lPSIiDQotCQkJCUNsZWFuQ29tbWFuZExpbmU9IiINCi0JCQkJT3V0cHV0PSIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCUluY2x1ZGVTZWFyY2hQYXRoPSIiDQotCQkJCUZvcmNlZEluY2x1ZGVzPSIiDQotCQkJCUFzc2VtYmx5U2VhcmNoUGF0aD0iIg0KLQkJCQlGb3JjZWRVc2luZ0Fzc2VtYmxpZXM9IiINCi0JCQkJQ29tcGlsZUFzTWFuYWdlZD0iIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjAiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNOTWFrZVRvb2wiDQotCQkJCUJ1aWxkQ29tbWFuZExpbmU9ImNkICZxdW90OyQoU29sdXRpb25EaXIpJnF1b3Q7JiN4MEQ7JiN4MEE7JnF1b3Q7JChQeXRob25FeGUpJnF1b3Q7IGJ1aWxkX3NzbC5weSBSZWxlYXNlICQoUGxhdGZvcm1OYW1lKSAtYSYjeDBEOyYjeDBBOyINCi0JCQkJUmVCdWlsZENvbW1hbmRMaW5lPSIiDQotCQkJCUNsZWFuQ29tbWFuZExpbmU9IiINCi0JCQkJT3V0cHV0PSIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCUluY2x1ZGVTZWFyY2hQYXRoPSIiDQotCQkJCUZvcmNlZEluY2x1ZGVzPSIiDQotCQkJCUFzc2VtYmx5U2VhcmNoUGF0aD0iIg0KLQkJCQlGb3JjZWRVc2luZ0Fzc2VtYmxpZXM9IiINCi0JCQkJQ29tcGlsZUFzTWFuYWdlZD0iIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIwIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTk1ha2VUb29sIg0KLQkJCQlCdWlsZENvbW1hbmRMaW5lPSJjZCAmcXVvdDskKFNvbHV0aW9uRGlyKSZxdW90OyYjeDBEOyYjeDBBOyZxdW90OyQoUHl0aG9uRXhlKSZxdW90OyBidWlsZF9zc2wucHkgUmVsZWFzZSAkKFBsYXRmb3JtTmFtZSkgLWEmI3gwRDsmI3gwQTsiDQotCQkJCVJlQnVpbGRDb21tYW5kTGluZT0iIg0KLQkJCQlDbGVhbkNvbW1hbmRMaW5lPSIiDQotCQkJCU91dHB1dD0iIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQlJbmNsdWRlU2VhcmNoUGF0aD0iIg0KLQkJCQlGb3JjZWRJbmNsdWRlcz0iIg0KLQkJCQlBc3NlbWJseVNlYXJjaFBhdGg9IiINCi0JCQkJRm9yY2VkVXNpbmdBc3NlbWJsaWVzPSIiDQotCQkJCUNvbXBpbGVBc01hbmFnZWQ9IiINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjAiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ05NYWtlVG9vbCINCi0JCQkJQnVpbGRDb21tYW5kTGluZT0iY2QgJnF1b3Q7JChTb2x1dGlvbkRpcikmcXVvdDsmI3gwRDsmI3gwQTsmcXVvdDskKFB5dGhvbkV4ZSkmcXVvdDsgYnVpbGRfc3NsLnB5IFJlbGVhc2UgJChQbGF0Zm9ybU5hbWUpIC1hJiN4MEQ7JiN4MEE7Ig0KLQkJCQlSZUJ1aWxkQ29tbWFuZExpbmU9IiINCi0JCQkJQ2xlYW5Db21tYW5kTGluZT0iIg0KLQkJCQlPdXRwdXQ9IiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJSW5jbHVkZVNlYXJjaFBhdGg9IiINCi0JCQkJRm9yY2VkSW5jbHVkZXM9IiINCi0JCQkJQXNzZW1ibHlTZWFyY2hQYXRoPSIiDQotCQkJCUZvcmNlZFVzaW5nQXNzZW1ibGllcz0iIg0KLQkJCQlDb21waWxlQXNNYW5hZ2VkPSIiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzguMC91bmljb2RlZGF0YS52Y3Byb2ogYi9QQy9WUzguMC91bmljb2RlZGF0YS52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjZjdkMjMuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvdW5pY29kZWRhdGEudmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsNTMzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJ1bmljb2RlZGF0YSINCi0JUHJvamVjdEdVSUQ9IntFQ0M3Q0VBQy1BNUU1LTQ1OEUtQkI5RS0yNDEzQ0M4NDc4ODF9Ig0KLQlSb290TmFtZXNwYWNlPSJ1bmljb2RlZGF0YSINCi0JS2V5d29yZD0iV2luMzJQcm9qIg0KLQlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxOTY2MTMiDQotCT4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIg0KLQkJLz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9Ing2NCINCi0JCS8+DQotCTwvUGxhdGZvcm1zPg0KLQk8VG9vbEZpbGVzPg0KLQk8L1Rvb2xGaWxlcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDEyMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3x4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkX2QudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMjAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTIwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMjAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDEyMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDEyMDAwMCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMjAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTIwMDAwIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iSGVhZGVyIEZpbGVzIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcdW5pY29kZWRhdGFfZGIuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcdW5pY29kZW5hbWVfZGIuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHVuaWNvZGVkYXRhLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvdzl4cG9wZW4udmNwcm9qIGIvUEMvVlM4LjAvdzl4cG9wZW4udmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMTRkMjA2Li4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL3c5eHBvcGVuLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDU3NiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOC4wMCINCi0JTmFtZT0idzl4cG9wZW4iDQotCVByb2plY3RHVUlEPSJ7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fSINCi0JUm9vdE5hbWVzcGFjZT0idzl4cG9wZW4iDQotCVRhcmdldEZyYW1ld29ya1ZlcnNpb249IjEzMTA3MiINCi0JPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiDQotCQkvPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0ieDY0Ig0KLQkJLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxUb29sRmlsZXM+DQotCTwvVG9vbEZpbGVzPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5cZGVidWcudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJU3ViU3lzdGVtPSIxIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHg2NC52c3Byb3BzOy5cZGVidWcudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJUnVudGltZUxpYnJhcnk9IjEiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCVN1YlN5c3RlbT0iMSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjAiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249ImZhbHNlIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMCINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iZmFsc2UiDQotCQkJCVN1YlN5c3RlbT0iMSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCVN0cmluZ1Bvb2xpbmc9InRydWUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIwIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJmYWxzZSINCi0JCQkJU3ViU3lzdGVtPSIxIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCUNoYXJhY3RlclNldD0iMiINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjAiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249ImZhbHNlIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJCUltcG9ydExpYnJhcnk9IiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjAiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249ImZhbHNlIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJCUltcG9ydExpYnJhcnk9IiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCUNoYXJhY3RlclNldD0iMiINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjAiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249ImZhbHNlIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJCUltcG9ydExpYnJhcnk9IiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1x3OXhwb3Blbi5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL3dpbnNvdW5kLnZjcHJvaiBiL1BDL1ZTOC4wL3dpbnNvdW5kLnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDM3OTM1Ny4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC93aW5zb3VuZC52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSw1MjMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9IndpbnNvdW5kIg0KLQlQcm9qZWN0R1VJRD0iezI4QjVENzc3LURERjItNEI2Qi1CMzRGLTMxRDkzODgxMzg1Nn0iDQotCVJvb3ROYW1lc3BhY2U9IndpbnNvdW5kIg0KLQlLZXl3b3JkPSJXaW4zMlByb2oiDQotCVRhcmdldEZyYW1ld29ya1ZlcnNpb249IjE5NjYxMyINCi0JPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiDQotCQkvPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0ieDY0Ig0KLQkJLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxUb29sRmlsZXM+DQotCTwvVG9vbEZpbGVzPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZF9kLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Indpbm1tLmxpYiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3x4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkX2QudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id2lubW0ubGliIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3aW5tbS5saWIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3aW5tbS5saWIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3aW5tbS5saWIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id2lubW0ubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3aW5tbS5saWIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Indpbm1tLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCi0JCQlGaWx0ZXI9ImNwcDtjO2NjO2N4eDtkZWY7b2RsO2lkbDtocGo7YmF0O2FzbTthc214Ig0KLQkJCVVuaXF1ZUlkZW50aWZpZXI9Ins0RkM3MzdGMS1DN0E1LTQzNzYtQTA2Ni0yQTMyRDc1MkEyRkZ9Ig0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBDXHdpbnNvdW5kLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAveDY0LnZzcHJvcHMgYi9QQy9WUzguMC94NjQudnNwcm9wcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWY4OGQ0NC4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC94NjQudnNwcm9wcworKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9wZXJ0eVNoZWV0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJhbWQ2NCINCi0JT3V0cHV0RGlyZWN0b3J5PSIkKFNvbHV0aW9uRGlyKVxhbWQ2NFwiDQotCUludGVybWVkaWF0ZURpcmVjdG9yeT0iJChTb2x1dGlvbkRpcikkKFBsYXRmb3JtTmFtZSktdGVtcC0kKENvbmZpZ3VyYXRpb25OYW1lKVwkKFByb2plY3ROYW1lKVwiDQotCT4NCi0JPFRvb2wNCi0JCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQlBZGRpdGlvbmFsT3B0aW9ucz0iL1VTRUNMOk1TX09QVEVST04gL0dTLSINCi0JCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfV0lONjQ7X01fWDY0Ig0KLQkvPg0KLQk8VG9vbA0KLQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCS8+DQotCTxVc2VyTWFjcm8NCi0JCU5hbWU9IlB5dGhvbkV4ZSINCi0JCVZhbHVlPSIkKEhPU1RfUFlUSE9OKSINCi0JLz4NCi08L1Zpc3VhbFN0dWRpb1Byb3BlcnR5U2hlZXQ+DQpkaWZmIC0tZ2l0IGEvUEMvVlM5LjAvX3NxbGl0ZTMudmNwcm9qIGIvUEMvVlM5LjAvX3NxbGl0ZTMudmNwcm9qCmluZGV4IGY3MTAwZjEuLjgyYzU3YWUgMTAwNjQ0Ci0tLSBhL1BDL1ZTOS4wL19zcWxpdGUzLnZjcHJvagorKysgYi9QQy9WUzkuMC9fc3FsaXRlMy52Y3Byb2oKQEAgLTU1NSwxMCArNTU1LDYgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3FsaXRlXHNxbGl0ZWNvbXBhdC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3FsaXRlXHN0YXRlbWVudC5oIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KZGlmZiAtLWdpdCBhL1BDL1ZTOS4wL19zc2wudmNwcm9qIGIvUEMvVlM5LjAvX3NzbC52Y3Byb2oKaW5kZXggOTdhYTI5NC4uYjQ3ZGMyNyAxMDA2NDQKLS0tIGEvUEMvVlM5LjAvX3NzbC52Y3Byb2oKKysrIGIvUEMvVlM5LjAvX3NzbC52Y3Byb2oKQEAgLTEsNyArMSw3IEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCiA8VmlzdWFsU3R1ZGlvUHJvamVjdA0KIAlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOS4wMCINCisJVmVyc2lvbj0iOSwwMCINCiAJTmFtZT0iX3NzbCINCiAJUHJvamVjdEdVSUQ9IntDNkUyMEY4NC0zMjQ3LTRBRDYtQjA1MS1CMDczMjY4RjczQkF9Ig0KIAlSb290TmFtZXNwYWNlPSJfc3NsIg0KQEAgLTU2LDcgKzU2LDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliICQob3BlbnNzbERpcilcb3V0MzJcbGliZWF5MzIubGliICQob3BlbnNzbERpcilcb3V0MzJcc3NsZWF5MzIubGliIg0KKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIGNyeXB0MzIubGliICQob3BlbnNzbERpcilcb3V0MzJcbGliZWF5MzIubGliICQob3BlbnNzbERpcilcb3V0MzJcc3NsZWF5MzIubGliIg0KIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQpAQCAtMTE4LDcgKzExOCw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XHNzbGVheTMyLmxpYiINCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiBjcnlwdDMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XHNzbGVheTMyLmxpYiINCiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KQEAgLTE4MCw3ICsxODAsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIgJChvcGVuc3NsRGlyKVxvdXQzMlxsaWJlYXkzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQzMlxzc2xlYXkzMi5saWIiDQorCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIgY3J5cHQzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQzMlxsaWJlYXkzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQzMlxzc2xlYXkzMi5saWIiDQogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCkBAIC0yNDMsNyArMjQzLDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliICQob3BlbnNzbERpcilcb3V0NjRcbGliZWF5MzIubGliICQob3BlbnNzbERpcilcb3V0NjRcc3NsZWF5MzIubGliIg0KKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIGNyeXB0MzIubGliICQob3BlbnNzbERpcilcb3V0NjRcbGliZWF5MzIubGliICQob3BlbnNzbERpcilcb3V0NjRcc3NsZWF5MzIubGliIg0KIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQpAQCAtMzA1LDcgKzMwNSw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDMyXGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDMyXHNzbGVheTMyLmxpYiINCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiBjcnlwdDMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDMyXGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDMyXHNzbGVheTMyLmxpYiINCiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KQEAgLTM2OCw3ICszNjgsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIgJChvcGVuc3NsRGlyKVxvdXQ2NFxsaWJlYXkzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQ2NFxzc2xlYXkzMi5saWIiDQorCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIgY3J5cHQzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQ2NFxsaWJlYXkzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQ2NFxzc2xlYXkzMi5saWIiDQogCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC00MzEsNyArNDMxLDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliICQob3BlbnNzbERpcilcb3V0MzJcbGliZWF5MzIubGliICQob3BlbnNzbERpcilcb3V0MzJcc3NsZWF5MzIubGliIg0KKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIGNyeXB0MzIubGliICQob3BlbnNzbERpcilcb3V0MzJcbGliZWF5MzIubGliICQob3BlbnNzbERpcilcb3V0MzJcc3NsZWF5MzIubGliIg0KIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQpAQCAtNDk0LDcgKzQ5NCw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XHNzbGVheTMyLmxpYiINCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiBjcnlwdDMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XHNzbGVheTMyLmxpYiINCiAJCQkJVGFyZ2V0TWFjaGluZT0iMTciDQogCQkJLz4NCiAJCQk8VG9vbA0KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL190ZXN0Y2FwaS52Y3Byb2ogYi9QQy9WUzkuMC9fdGVzdGltcG9ydG11bHRpcGxlLnZjcHJvagpzaW1pbGFyaXR5IGluZGV4IDk3JQpyZW5hbWUgZnJvbSBQQy9WUzguMC9fdGVzdGNhcGkudmNwcm9qCnJlbmFtZSB0byBQQy9WUzkuMC9fdGVzdGltcG9ydG11bHRpcGxlLnZjcHJvagppbmRleCA3NmFkMmQ4Li4xNGQ5MTBkIDEwMDY0NAotLS0gYS9QQy9WUzguMC9fdGVzdGNhcGkudmNwcm9qCisrKyBiL1BDL1ZTOS4wL190ZXN0aW1wb3J0bXVsdGlwbGUudmNwcm9qCkBAIC0xLDEwICsxLDEwIEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCiA8VmlzdWFsU3R1ZGlvUHJvamVjdA0KIAlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOC4wMCINCi0JTmFtZT0iX3Rlc3RjYXBpIg0KLQlQcm9qZWN0R1VJRD0iezY5MDFEOTFDLTZFNDgtNEJCNy05RkVDLTcwMEM4MTMxREYxRH0iDQotCVJvb3ROYW1lc3BhY2U9Il90ZXN0Y2FwaSINCisJVmVyc2lvbj0iOS4wMCINCisJTmFtZT0iX3Rlc3RpbXBvcnRtdWx0aXBsZSINCisJUHJvamVjdEdVSUQ9InszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9Ig0KKwlSb290TmFtZXNwYWNlPSJfdGVzdGltcG9ydG11bHRpcGxlIg0KIAlLZXl3b3JkPSJXaW4zMlByb2oiDQogCVRhcmdldEZyYW1ld29ya1ZlcnNpb249IjE5NjYxMyINCiAJPg0KQEAgLTUxMSw3ICs1MTEsNyBAQAogCQkJTmFtZT0iU291cmNlIEZpbGVzIg0KIAkJCT4NCiAJCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3Rlc3RjYXBpbW9kdWxlLmMiDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfdGVzdGltcG9ydG11bHRpcGxlLmMiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQk8L0ZpbHRlcj4NCmRpZmYgLS1naXQgYS9QQy9WUzkuMC9raWxsX3B5dGhvbi5jIGIvUEMvVlM5LjAva2lsbF9weXRob24uYwppbmRleCBiYjMyM2QzLi42NjZlMWIwIDEwMDY0NAotLS0gYS9QQy9WUzkuMC9raWxsX3B5dGhvbi5jCisrKyBiL1BDL1ZTOS4wL2tpbGxfcHl0aG9uLmMKQEAgLTEwNiw5ICsxMDYsOSBAQAogICAgICAgICAvKgogICAgICAgICAgKiBYWFggVE9ETzogaWYgd2UgcmVhbGx5IHdhbnRlZCB0byBiZSBmYW5jeSwgd2UgY291bGQgY2hlY2sgdGhlIAogICAgICAgICAgKiBtb2R1bGVzIGZvciBhbGwgcHJvY2Vzc2VzIChub3QganVzdCB0aGUgcHl0aG9uW19kXS5leGUgb25lcykKLSAgICAgICAgICogYW5kIHNlZSBpZiBhbnkgb2Ygb3VyIERMTHMgYXJlIGxvYWRlZCAoaS5lLiBweXRob24zM1tfZF0uZGxsKSwKKyAgICAgICAgICogYW5kIHNlZSBpZiBhbnkgb2Ygb3VyIERMTHMgYXJlIGxvYWRlZCAoaS5lLiBweXRob24zNFtfZF0uZGxsKSwKICAgICAgICAgICogYXMgdGhhdCB3b3VsZCBhbHNvIGluaGliaXQgb3VyIGFiaWxpdHkgdG8gcmVidWlsZCB0aGUgc29sdXRpb24uCi0gICAgICAgICAqIE5vdCB3b3J0aCBsb29zaW5nIHNsZWVwIG92ZXIgdGhvdWdoOyBmb3Igbm93LCBhIHNpbXBsZSBjaGVjayAKKyAgICAgICAgICogTm90IHdvcnRoIGxvc2luZyBzbGVlcCBvdmVyIHRob3VnaDsgZm9yIG5vdywgYSBzaW1wbGUgY2hlY2sKICAgICAgICAgICogZm9yIGp1c3QgdGhlIHB5dGhvbiBleGVjdXRhYmxlIHNob3VsZCBiZSBzdWZmaWNpZW50LgogICAgICAgICAgKi8KIApkaWZmIC0tZ2l0IGEvUEMvVlM5LjAvcGNidWlsZC5zbG4gYi9QQy9WUzkuMC9wY2J1aWxkLnNsbgppbmRleCA4ZjhjYmI2Li5iYTdmNjljIDEwMDY0NAotLS0gYS9QQy9WUzkuMC9wY2J1aWxkLnNsbgorKysgYi9QQy9WUzkuMC9wY2J1aWxkLnNsbgpAQCAtMjAsMTEgKzIwLDYgQEAKIAkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KIAlFbmRQcm9qZWN0U2VjdGlvbg0KIEVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gInc5eHBvcGVuIiwgInc5eHBvcGVuLnZjcHJvaiIsICJ7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJezZERTEwNzQ0LUUzOTYtNDBBNS1CNEUyLTFCNjlBQTdDOEQzMX0gPSB7NkRFMTA3NDQtRTM5Ni00MEE1LUI0RTItMUI2OUFBN0M4RDMxfQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCiBQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIm1ha2VfYnVpbGRpbmZvIiwgIm1ha2VfYnVpbGRpbmZvLnZjcHJvaiIsICJ7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfSINCiBFbmRQcm9qZWN0DQogUHJvamVjdCgiezIxNTBFMzMzLThGREMtNDJBMy05NDc0LTFBMzk1NkQ0NkRFOH0iKSA9ICJTb2x1dGlvbiBJdGVtcyIsICJTb2x1dGlvbiBJdGVtcyIsICJ7NTUzRUMzM0UtOTgxNi00OTk2LUE2NjAtNUQ2MTg2QTBCMEIzfSINCkBAIC04Nyw2ICs4MiwxMSBAQAogCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQogCUVuZFByb2plY3RTZWN0aW9uDQogRW5kUHJvamVjdA0KK1Byb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiX3Rlc3RpbXBvcnRtdWx0aXBsZSIsICJfdGVzdGltcG9ydG11bHRpcGxlLnZjcHJvaiIsICJ7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfSINCisJUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KKwkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KKwlFbmRQcm9qZWN0U2VjdGlvbg0KK0VuZFByb2plY3QNCiBQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIl90a2ludGVyIiwgIl90a2ludGVyLnZjcHJvaiIsICJ7NDk0NkVDQUMtMkU2OS00QkY4LUE5MEEtRjUxMzZGNTA5NERGfSINCiAJUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KIAkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KQEAgLTQyMCw2ICs0MjAsMjIgQEAKIAkJezY5MDFEOTFDLTZFNDgtNEJCNy05RkVDLTcwMEM4MTMxREYxRH0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KIAkJezY5MDFEOTFDLTZFNDgtNEJCNy05RkVDLTcwMEM4MTMxREYxRH0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCiAJCXs2OTAxRDkxQy02RTQ4LTRCQjctOUZFQy03MDBDODEzMURGMUR9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KKwkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCisJCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KKwkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KKwkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCisJCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8V2luMzINCisJCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gUEdJbnN0cnVtZW50fFdpbjMyDQorCQl7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHx4NjQNCisJCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHx4NjQNCisJCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFBHVXBkYXRlfFdpbjMyDQorCQl7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUEdVcGRhdGV8V2luMzINCisJCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBQR1VwZGF0ZXx4NjQNCisJCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUEdVcGRhdGV8eDY0DQorCQl7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCisJCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCisJCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQorCQl7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCiAJCXs0OTQ2RUNBQy0yRTY5LTRCRjgtQTkwQS1GNTEzNkY1MDk0REZ9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQogCQl7NDk0NkVDQUMtMkU2OS00QkY4LUE5MEEtRjUxMzZGNTA5NERGfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCiAJCXs0OTQ2RUNBQy0yRTY5LTRCRjgtQTkwQS1GNTEzNkY1MDk0REZ9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCkBAIC02NTEsNiArNjY3LDIyIEBACiAJCXtBMjY5N0JEMy0yOEMxLTRBRUMtOTEwNi04Qjc0ODYzOUZEMTZ9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCiAJCXtBMjY5N0JEMy0yOEMxLTRBRUMtOTEwNi04Qjc0ODYzOUZEMTZ9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQogCQl7QTI2OTdCRDMtMjhDMS00QUVDLTkxMDYtOEI3NDg2MzlGRDE2fS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCisJCXswNEYzNzQwMC04ODNDLTQyRDctQUUyOC02Q0Y5OTUzQkY5NzV9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQorCQl7MDRGMzc0MDAtODgzQy00MkQ3LUFFMjgtNkNGOTk1M0JGOTc1fS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCisJCXswNEYzNzQwMC04ODNDLTQyRDctQUUyOC02Q0Y5OTUzQkY5NzV9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCisJCXswNEYzNzQwMC04ODNDLTQyRDctQUUyOC02Q0Y5OTUzQkY5NzV9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0DQorCQl7MDRGMzc0MDAtODgzQy00MkQ3LUFFMjgtNkNGOTk1M0JGOTc1fS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fFdpbjMyDQorCQl7MDRGMzc0MDAtODgzQy00MkQ3LUFFMjgtNkNGOTk1M0JGOTc1fS5QR0luc3RydW1lbnR8V2luMzIuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KKwkJezA0RjM3NDAwLTg4M0MtNDJENy1BRTI4LTZDRjk5NTNCRjk3NX0uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8eDY0DQorCQl7MDRGMzc0MDAtODgzQy00MkQ3LUFFMjgtNkNGOTk1M0JGOTc1fS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8eDY0DQorCQl7MDRGMzc0MDAtODgzQy00MkQ3LUFFMjgtNkNGOTk1M0JGOTc1fS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBQR1VwZGF0ZXxXaW4zMg0KKwkJezA0RjM3NDAwLTg4M0MtNDJENy1BRTI4LTZDRjk5NTNCRjk3NX0uUEdVcGRhdGV8V2luMzIuQnVpbGQuMCA9IFBHVXBkYXRlfFdpbjMyDQorCQl7MDRGMzc0MDAtODgzQy00MkQ3LUFFMjgtNkNGOTk1M0JGOTc1fS5QR1VwZGF0ZXx4NjQuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8eDY0DQorCQl7MDRGMzc0MDAtODgzQy00MkQ3LUFFMjgtNkNGOTk1M0JGOTc1fS5QR1VwZGF0ZXx4NjQuQnVpbGQuMCA9IFBHVXBkYXRlfHg2NA0KKwkJezA0RjM3NDAwLTg4M0MtNDJENy1BRTI4LTZDRjk5NTNCRjk3NX0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQorCQl7MDRGMzc0MDAtODgzQy00MkQ3LUFFMjgtNkNGOTk1M0JGOTc1fS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQorCQl7MDRGMzc0MDAtODgzQy00MkQ3LUFFMjgtNkNGOTk1M0JGOTc1fS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KKwkJezA0RjM3NDAwLTg4M0MtNDJENy1BRTI4LTZDRjk5NTNCRjk3NX0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQogCUVuZEdsb2JhbFNlY3Rpb24NCiAJR2xvYmFsU2VjdGlvbihTb2x1dGlvblByb3BlcnRpZXMpID0gcHJlU29sdXRpb24NCiAJCUhpZGVTb2x1dGlvbk5vZGUgPSBGQUxTRQ0KZGlmZiAtLWdpdCBhL1BDL1ZTOS4wL3B5cHJvamVjdC52c3Byb3BzIGIvUEMvVlM5LjAvcHlwcm9qZWN0LnZzcHJvcHMKaW5kZXggZmYzNzU5ZS4uYTkwOTg3NSAxMDA2NDQKLS0tIGEvUEMvVlM5LjAvcHlwcm9qZWN0LnZzcHJvcHMKKysrIGIvUEMvVlM5LjAvcHlwcm9qZWN0LnZzcHJvcHMKQEAgLTM4LDcgKzM4LDcgQEAKIAkvPg0KIAk8VXNlck1hY3JvDQogCQlOYW1lPSJQeURsbE5hbWUiDQotCQlWYWx1ZT0icHl0aG9uMzMiDQorCQlWYWx1ZT0icHl0aG9uMzQiDQogCS8+DQogCTxVc2VyTWFjcm8NCiAJCU5hbWU9IlB5dGhvbkV4ZSINCkBAIC01MCw3ICs1MCw3IEBACiAJLz4NCiAJPFVzZXJNYWNybw0KIAkJTmFtZT0ic3FsaXRlM0RpciINCi0JCVZhbHVlPSIkKGV4dGVybmFsc0Rpcilcc3FsaXRlLTMuNy4xMiINCisJCVZhbHVlPSIkKGV4dGVybmFsc0Rpcilcc3FsaXRlLTMuOC4zLjEiDQogCS8+DQogCTxVc2VyTWFjcm8NCiAJCU5hbWU9ImJ6MkRpciINCkBAIC01OCwxMSArNTgsMTEgQEAKIAkvPg0KIAk8VXNlck1hY3JvDQogCQlOYW1lPSJsem1hRGlyIg0KLQkJVmFsdWU9IiQoZXh0ZXJuYWxzRGlyKVx4ei01LjAuMyINCisJCVZhbHVlPSIkKGV4dGVybmFsc0RpcilceHotNS4wLjUiDQogCS8+DQogCTxVc2VyTWFjcm8NCiAJCU5hbWU9Im9wZW5zc2xEaXIiDQotCQlWYWx1ZT0iJChleHRlcm5hbHNEaXIpXG9wZW5zc2wtMS4wLjFlIg0KKwkJVmFsdWU9IiQoZXh0ZXJuYWxzRGlyKVxvcGVuc3NsLTEuMC4xZyINCiAJLz4NCiAJPFVzZXJNYWNybw0KIAkJTmFtZT0idGNsdGtEaXIiDQpkaWZmIC0tZ2l0IGEvUEMvVlM5LjAvcHl0aG9uY29yZS52Y3Byb2ogYi9QQy9WUzkuMC9weXRob25jb3JlLnZjcHJvagppbmRleCA5ZmI2M2ZmLi5jZjYwNDcwIDEwMDY0NAotLS0gYS9QQy9WUzkuMC9weXRob25jb3JlLnZjcHJvagorKysgYi9QQy9WUzkuMC9weXRob25jb3JlLnZjcHJvagpAQCAtMTExOSw3ICsxMTE5LDcgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xvcGVyYXRvci5jIg0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX29wZXJhdG9yLmMiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCkBAIC0xMTU1LDYgKzExNTUsMjIgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xzcmUuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcc3JlX2NvbnN0YW50cy5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xzcmVfbGliLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zdGF0LmMiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHN5bXRhYmxlbW9kdWxlLmMiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpAQCAtMTI0Miw3NCArMTI1OCw2IEBACiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0KIAkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcZ3ppby5jIg0KLQkJCQkJPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9DUlRfU0VDVVJFX05PX0RFUFJFQ0FURSINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2V8V2luNjQiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEUiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9DUlRfU0VDVVJFX05PX0RFUFJFQ0FURSINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnfFdpbjY0Ig0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUEdJbnN0cnVtZW50fFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUEdJbnN0cnVtZW50fFdpbjY0Ig0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUEdVcGRhdGV8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEUiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJQR1VwZGF0ZXxXaW42NCINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9DUlRfU0VDVVJFX05PX0RFUFJFQ0FURSINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcaW5mYmFjay5jIg0KIAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQpAQCAtMTU4Nyw2ICsxNTM1LDEwIEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcc3RyaW5nbGliXHJlcGxhY2UuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcc2V0b2JqZWN0LmMiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpkaWZmIC0tZ2l0IGEvUEMvVlM5LjAvdzl4cG9wZW4udmNwcm9qIGIvUEMvVlM5LjAvdzl4cG9wZW4udmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YTg1YjAwLi4wMDAwMDAwCi0tLSBhL1BDL1ZTOS4wL3c5eHBvcGVuLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDU3NiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOS4wMCINCi0JTmFtZT0idzl4cG9wZW4iDQotCVByb2plY3RHVUlEPSJ7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fSINCi0JUm9vdE5hbWVzcGFjZT0idzl4cG9wZW4iDQotCVRhcmdldEZyYW1ld29ya1ZlcnNpb249IjEzMTA3MiINCi0JPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiDQotCQkvPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0ieDY0Ig0KLQkJLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxUb29sRmlsZXM+DQotCTwvVG9vbEZpbGVzPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5cZGVidWcudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJU3ViU3lzdGVtPSIxIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHg2NC52c3Byb3BzOy5cZGVidWcudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJUnVudGltZUxpYnJhcnk9IjEiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCVN1YlN5c3RlbT0iMSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjAiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249ImZhbHNlIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMCINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iZmFsc2UiDQotCQkJCVN1YlN5c3RlbT0iMSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCVN0cmluZ1Bvb2xpbmc9InRydWUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIwIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJmYWxzZSINCi0JCQkJU3ViU3lzdGVtPSIxIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCUNoYXJhY3RlclNldD0iMiINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjAiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249ImZhbHNlIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJCUltcG9ydExpYnJhcnk9IiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjAiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249ImZhbHNlIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJCUltcG9ydExpYnJhcnk9IiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCUNoYXJhY3RlclNldD0iMiINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjAiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249ImZhbHNlIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJCUltcG9ydExpYnJhcnk9IiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1x3OXhwb3Blbi5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL19tc2kuYyBiL1BDL19tc2kuYwppbmRleCAwYjViOTRlLi44NmE1OTQzIDEwMDY0NAotLS0gYS9QQy9fbXNpLmMKKysrIGIvUEMvX21zaS5jCkBAIC01NSw3ICs1NSw3IEBACiAKIHN0YXRpYyBGTkZDSU9QRU4oY2Jfb3BlbikKIHsKLSAgICBpbnQgcmVzdWx0ID0gX29wZW4ocHN6RmlsZSwgb2ZsYWcsIHBtb2RlKTsKKyAgICBpbnQgcmVzdWx0ID0gX29wZW4ocHN6RmlsZSwgb2ZsYWcgfCBPX05PSU5IRVJJVCwgcG1vZGUpOwogICAgIGlmIChyZXN1bHQgPT0gLTEpCiAgICAgICAgICplcnIgPSBlcnJubzsKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtNjMsNyArNjMsNyBAQAogCiBzdGF0aWMgRk5GQ0lSRUFEKGNiX3JlYWQpCiB7Ci0gICAgVUlOVCByZXN1bHQgPSAoVUlOVClfcmVhZChoZiwgbWVtb3J5LCBjYik7CisgICAgVUlOVCByZXN1bHQgPSAoVUlOVClfcmVhZCgoaW50KWhmLCBtZW1vcnksIGNiKTsKICAgICBpZiAocmVzdWx0ICE9IGNiKQogICAgICAgICAqZXJyID0gZXJybm87CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTcxLDcgKzcxLDcgQEAKIAogc3RhdGljIEZORkNJV1JJVEUoY2Jfd3JpdGUpCiB7Ci0gICAgVUlOVCByZXN1bHQgPSAoVUlOVClfd3JpdGUoaGYsIG1lbW9yeSwgY2IpOworICAgIFVJTlQgcmVzdWx0ID0gKFVJTlQpX3dyaXRlKChpbnQpaGYsIG1lbW9yeSwgY2IpOwogICAgIGlmIChyZXN1bHQgIT0gY2IpCiAgICAgICAgICplcnIgPSBlcnJubzsKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtNzksNyArNzksNyBAQAogCiBzdGF0aWMgRk5GQ0lDTE9TRShjYl9jbG9zZSkKIHsKLSAgICBpbnQgcmVzdWx0ID0gX2Nsb3NlKGhmKTsKKyAgICBpbnQgcmVzdWx0ID0gX2Nsb3NlKChpbnQpaGYpOwogICAgIGlmIChyZXN1bHQgIT0gMCkKICAgICAgICAgKmVyciA9IGVycm5vOwogICAgIHJldHVybiByZXN1bHQ7CkBAIC04Nyw3ICs4Nyw3IEBACiAKIHN0YXRpYyBGTkZDSVNFRUsoY2Jfc2VlaykKIHsKLSAgICBsb25nIHJlc3VsdCA9IChsb25nKV9sc2VlayhoZiwgZGlzdCwgc2Vla3R5cGUpOworICAgIGxvbmcgcmVzdWx0ID0gKGxvbmcpX2xzZWVrKChpbnQpaGYsIGRpc3QsIHNlZWt0eXBlKTsKICAgICBpZiAocmVzdWx0ID09IC0xKQogICAgICAgICAqZXJyID0gZXJybm87CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTE3OSw3ICsxNzksNyBAQAogCiAgICAgQ2xvc2VIYW5kbGUoaGFuZGxlKTsKIAotICAgIHJldHVybiBfb3Blbihwc3pOYW1lLCBfT19SRE9OTFkgfCBfT19CSU5BUlkpOworICAgIHJldHVybiBfb3Blbihwc3pOYW1lLCBfT19SRE9OTFkgfCBfT19CSU5BUlkgfCBPX05PSU5IRVJJVCk7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCogZmNpY3JlYXRlKFB5T2JqZWN0KiBvYmosIFB5T2JqZWN0KiBhcmdzKQpAQCAtMjQzLDggKzI0MywxMyBAQAogICAgIGZvciAoaT0wOyBpIDwgUHlMaXN0X0dFVF9TSVpFKGZpbGVzKTsgaSsrKSB7CiAgICAgICAgIFB5T2JqZWN0ICppdGVtID0gUHlMaXN0X0dFVF9JVEVNKGZpbGVzLCBpKTsKICAgICAgICAgY2hhciAqZmlsZW5hbWUsICpjYWJuYW1lOwotICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoaXRlbSwgInNzIiwgJmZpbGVuYW1lLCAmY2FibmFtZSkpCi0gICAgICAgICAgICBnb3RvIGVycjsKKworICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoaXRlbSwgInNzIiwgJmZpbGVuYW1lLCAmY2FibmFtZSkpIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJGQ0lDcmVhdGUgZXhwZWN0cyBhIGxpc3Qgb2YgdHVwbGVzIGNvbnRhaW5pbmcgdHdvIHN0cmluZ3MiKTsKKyAgICAgICAgICAgIEZDSURlc3Ryb3koaGZjaSk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorCiAgICAgICAgIGlmICghRkNJQWRkRmlsZShoZmNpLCBmaWxlbmFtZSwgY2FibmFtZSwgRkFMU0UsCiAgICAgICAgICAgICBjYl9nZXRuZXh0Y2FiaW5ldCwgY2Jfc3RhdHVzLCBjYl9nZXRvcGVuaW5mbywKICAgICAgICAgICAgIHRjb21wVFlQRV9NU1pJUCkpCkBAIC0yNjAsNyArMjY1LDExIEBACiAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwogICAgIHJldHVybiBQeV9Ob25lOwogZXJyOgotICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLCAiRkNJIGVycm9yICVkIiwgZXJmLmVyZk9wZXIpOyAvKiBYWFggYmV0dGVyIGVycm9yIHR5cGUgKi8KKyAgICBpZihlcmYuZkVycm9yKQorICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwgIkZDSSBlcnJvciAlZCIsIGVyZi5lcmZPcGVyKTsgLyogWFhYIGJldHRlciBlcnJvciB0eXBlICovCisgICAgZWxzZQorICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIkZDSSBnZW5lcmFsIGVycm9yIik7CisKICAgICBGQ0lEZXN0cm95KGhmY2kpOwogICAgIHJldHVybiBOVUxMOwogfQpAQCAtMTAzMCw0MCArMTAzOSw0MCBAQAogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJNU0lEQk9QRU5fVFJBTlNBQ1QiLCAoaW50KU1TSURCT1BFTl9UUkFOU0FDVCk7CiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TSURCT1BFTl9QQVRDSEZJTEUiLCAoaW50KU1TSURCT1BFTl9QQVRDSEZJTEUpOwogCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TSUNPTElORk9fTkFNRVMiLCBNU0lDT0xJTkZPX05BTUVTKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTVNJQ09MSU5GT19UWVBFUyIsIE1TSUNPTElORk9fVFlQRVMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1TSUNPTElORk9fTkFNRVMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1TSUNPTElORk9fVFlQRVMpOwogCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TSU1PRElGWV9TRUVLIiwgTVNJTU9ESUZZX1NFRUspOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJNU0lNT0RJRllfUkVGUkVTSCIsIE1TSU1PRElGWV9SRUZSRVNIKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTVNJTU9ESUZZX0lOU0VSVCIsIE1TSU1PRElGWV9JTlNFUlQpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJNU0lNT0RJRllfVVBEQVRFIiwgTVNJTU9ESUZZX1VQREFURSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TSU1PRElGWV9BU1NJR04iLCBNU0lNT0RJRllfQVNTSUdOKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTVNJTU9ESUZZX1JFUExBQ0UiLCBNU0lNT0RJRllfUkVQTEFDRSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TSU1PRElGWV9NRVJHRSIsIE1TSU1PRElGWV9NRVJHRSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TSU1PRElGWV9ERUxFVEUiLCBNU0lNT0RJRllfREVMRVRFKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTVNJTU9ESUZZX0lOU0VSVF9URU1QT1JBUlkiLCBNU0lNT0RJRllfSU5TRVJUX1RFTVBPUkFSWSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TSU1PRElGWV9WQUxJREFURSIsIE1TSU1PRElGWV9WQUxJREFURSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TSU1PRElGWV9WQUxJREFURV9ORVciLCBNU0lNT0RJRllfVkFMSURBVEVfTkVXKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTVNJTU9ESUZZX1ZBTElEQVRFX0ZJRUxEIiwgTVNJTU9ESUZZX1ZBTElEQVRFX0ZJRUxEKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTVNJTU9ESUZZX1ZBTElEQVRFX0RFTEVURSIsIE1TSU1PRElGWV9WQUxJREFURV9ERUxFVEUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1TSU1PRElGWV9TRUVLKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBNU0lNT0RJRllfUkVGUkVTSCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNJTU9ESUZZX0lOU0VSVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNJTU9ESUZZX1VQREFURSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNJTU9ESUZZX0FTU0lHTik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNJTU9ESUZZX1JFUExBQ0UpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1TSU1PRElGWV9NRVJHRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNJTU9ESUZZX0RFTEVURSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNJTU9ESUZZX0lOU0VSVF9URU1QT1JBUlkpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1TSU1PRElGWV9WQUxJREFURSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNJTU9ESUZZX1ZBTElEQVRFX05FVyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNJTU9ESUZZX1ZBTElEQVRFX0ZJRUxEKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBNU0lNT0RJRllfVkFMSURBVEVfREVMRVRFKTsKIAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQSURfQ09ERVBBR0UiLCBQSURfQ09ERVBBR0UpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQSURfVElUTEUiLCBQSURfVElUTEUpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQSURfU1VCSkVDVCIsIFBJRF9TVUJKRUNUKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUElEX0FVVEhPUiIsIFBJRF9BVVRIT1IpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQSURfS0VZV09SRFMiLCBQSURfS0VZV09SRFMpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQSURfQ09NTUVOVFMiLCBQSURfQ09NTUVOVFMpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQSURfVEVNUExBVEUiLCBQSURfVEVNUExBVEUpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQSURfTEFTVEFVVEhPUiIsIFBJRF9MQVNUQVVUSE9SKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUElEX1JFVk5VTUJFUiIsIFBJRF9SRVZOVU1CRVIpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQSURfTEFTVFBSSU5URUQiLCBQSURfTEFTVFBSSU5URUQpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQSURfQ1JFQVRFX0RUTSIsIFBJRF9DUkVBVEVfRFRNKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUElEX0xBU1RTQVZFX0RUTSIsIFBJRF9MQVNUU0FWRV9EVE0pOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQSURfUEFHRUNPVU5UIiwgUElEX1BBR0VDT1VOVCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBJRF9XT1JEQ09VTlQiLCBQSURfV09SRENPVU5UKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUElEX0NIQVJDT1VOVCIsIFBJRF9DSEFSQ09VTlQpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQSURfQVBQTkFNRSIsIFBJRF9BUFBOQU1FKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUElEX1NFQ1VSSVRZIiwgUElEX1NFQ1VSSVRZKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQSURfQ09ERVBBR0UpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBJRF9USVRMRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUElEX1NVQkpFQ1QpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBJRF9BVVRIT1IpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBJRF9LRVlXT1JEUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUElEX0NPTU1FTlRTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQSURfVEVNUExBVEUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBJRF9MQVNUQVVUSE9SKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQSURfUkVWTlVNQkVSKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQSURfTEFTVFBSSU5URUQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBJRF9DUkVBVEVfRFRNKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQSURfTEFTVFNBVkVfRFRNKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQSURfUEFHRUNPVU5UKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQSURfV09SRENPVU5UKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQSURfQ0hBUkNPVU5UKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQSURfQVBQTkFNRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUElEX1NFQ1VSSVRZKTsKIAogICAgIE1TSUVycm9yID0gUHlFcnJfTmV3RXhjZXB0aW9uICgiX21zaS5NU0lFcnJvciIsIE5VTEwsIE5VTEwpOwogICAgIGlmICghTVNJRXJyb3IpCmRpZmYgLS1naXQgYS9QQy9iZGlzdF93aW5pbnN0L2luc3RhbGwuYyBiL1BDL2JkaXN0X3dpbmluc3QvaW5zdGFsbC5jCmluZGV4IGMxMWQ0NWQuLmY0Y2YzNDggMTAwNjQ0Ci0tLSBhL1BDL2JkaXN0X3dpbmluc3QvaW5zdGFsbC5jCisrKyBiL1BDL2JkaXN0X3dpbmluc3QvaW5zdGFsbC5jCkBAIC03NDMsNyArNzQzLDcgQEAKICAgICBpZiAocGF0aG5hbWUgPT0gTlVMTCB8fCBwYXRobmFtZVswXSA9PSAnXDAnKQogICAgICAgICByZXR1cm4gMjsKIAotICAgIGZoID0gb3BlbihwYXRobmFtZSwgX09fUkRPTkxZKTsKKyAgICBmaCA9IG9wZW4ocGF0aG5hbWUsIF9PX1JET05MWSB8IE9fTk9JTkhFUklUKTsKICAgICBpZiAoLTEgPT0gZmgpIHsKICAgICAgICAgZnByaW50ZihzdGRlcnIsICJDb3VsZCBub3Qgb3BlbiBwb3N0aW5zdGFsbC1zY3JpcHQgJXNcbiIsCiAgICAgICAgICAgICBwYXRobmFtZSk7CkBAIC0xNzc0LDYgKzE3NzQsMTYgQEAKIAogICAgIHNwcmludGYoYnVmZmVyLCAiJXNcXCVzLXdpbmluc3QubG9nIiwgZGlyLCBtZXRhX25hbWUpOwogICAgIGxvZ2ZpbGUgPSBmb3BlbihidWZmZXIsICJhIik7CisgICAgaWYgKCFsb2dmaWxlKSB7CisgICAgICAgIGNoYXIgZXJyb3JbMTAyNF07CisKKyAgICAgICAgc3ByaW50ZihlcnJvciwgIkNhbid0IGNyZWF0ZSBcIiVzXCIgKCVzKS5cblxuIgorICAgICAgICAgICAgICAgICJUcnkgdG8gZXhlY3V0ZSB0aGUgaW5zdGFsbGVyIGFzIGFkbWluaXN0cmF0b3IuIiwKKyAgICAgICAgICAgICAgICBidWZmZXIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIE1lc3NhZ2VCb3goR2V0Rm9jdXMoKSwgZXJyb3IsIE5VTEwsIE1CX09LIHwgTUJfSUNPTlNUT1ApOworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorCiAgICAgdGltZSgmbHRpbWUpOwogICAgIG5vdyA9IGxvY2FsdGltZSgmbHRpbWUpOwogICAgIHN0cmZ0aW1lKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksCkBAIC0xOTMxLDIxICsxOTQxLDIxIEBACiAvKgogICogVGhlIHNjaGVtZSB3ZSBoYXZlIHRvIHVzZSBkZXBlbmRzIG9uIHRoZSBQeXRob24gdmVyc2lvbi4uLgogIGlmIHN5cy52ZXJzaW9uIDwgIjIuMiI6Ci0gV0lORE9XU19TQ0hFTUUgPSB7Ci0gJ3B1cmVsaWInOiAnJGJhc2UnLAotICdwbGF0bGliJzogJyRiYXNlJywKLSAnaGVhZGVycyc6ICckYmFzZS9JbmNsdWRlLyRkaXN0X25hbWUnLAotICdzY3JpcHRzJzogJyRiYXNlL1NjcmlwdHMnLAotICdkYXRhJyAgIDogJyRiYXNlJywKLSB9CisgICAgV0lORE9XU19TQ0hFTUUgPSB7CisgICAgJ3B1cmVsaWInOiAnJGJhc2UnLAorICAgICdwbGF0bGliJzogJyRiYXNlJywKKyAgICAnaGVhZGVycyc6ICckYmFzZS9JbmNsdWRlLyRkaXN0X25hbWUnLAorICAgICdzY3JpcHRzJzogJyRiYXNlL1NjcmlwdHMnLAorICAgICdkYXRhJyAgIDogJyRiYXNlJywKKyAgICB9CiAgZWxzZToKLSBXSU5ET1dTX1NDSEVNRSA9IHsKLSAncHVyZWxpYic6ICckYmFzZS9MaWIvc2l0ZS1wYWNrYWdlcycsCi0gJ3BsYXRsaWInOiAnJGJhc2UvTGliL3NpdGUtcGFja2FnZXMnLAotICdoZWFkZXJzJzogJyRiYXNlL0luY2x1ZGUvJGRpc3RfbmFtZScsCi0gJ3NjcmlwdHMnOiAnJGJhc2UvU2NyaXB0cycsCi0gJ2RhdGEnICAgOiAnJGJhc2UnLAotIH0KKyAgICBXSU5ET1dTX1NDSEVNRSA9IHsKKyAgICAncHVyZWxpYic6ICckYmFzZS9MaWIvc2l0ZS1wYWNrYWdlcycsCisgICAgJ3BsYXRsaWInOiAnJGJhc2UvTGliL3NpdGUtcGFja2FnZXMnLAorICAgICdoZWFkZXJzJzogJyRiYXNlL0luY2x1ZGUvJGRpc3RfbmFtZScsCisgICAgJ3NjcmlwdHMnOiAnJGJhc2UvU2NyaXB0cycsCisgICAgJ2RhdGEnICAgOiAnJGJhc2UnLAorICAgIH0KICovCiAgICAgICAgICAgICBzY2hlbWUgPSBHZXRTY2hlbWUocHlfbWFqb3IsIHB5X21pbm9yKTsKICAgICAgICAgICAgIC8qIFJ1biB0aGUgcHJlLWluc3RhbGwgc2NyaXB0LiAqLwpkaWZmIC0tZ2l0IGEvUEMvY29uZmlnLmMgYi9QQy9jb25maWcuYwppbmRleCA1N2I1MDczLi43MmM5MzgxIDEwMDY0NAotLS0gYS9QQy9jb25maWcuYworKysgYi9QQy9jb25maWcuYwpAQCAtMTMsMTEgKzEzLDEyIEBACiBleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9jbWF0aCh2b2lkKTsKIGV4dGVybiBQeU9iamVjdCogUHlJbml0X2Vycm5vKHZvaWQpOwogZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfZmF1bHRoYW5kbGVyKHZvaWQpOworZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfX3RyYWNlbWFsbG9jKHZvaWQpOwogZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfZ2Modm9pZCk7CiBleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9tYXRoKHZvaWQpOwogZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfX21kNSh2b2lkKTsKIGV4dGVybiBQeU9iamVjdCogUHlJbml0X250KHZvaWQpOwotZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfb3BlcmF0b3Iodm9pZCk7CitleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9fb3BlcmF0b3Iodm9pZCk7CiBleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9zaWduYWwodm9pZCk7CiBleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9fc2hhMSh2b2lkKTsKIGV4dGVybiBQeU9iamVjdCogUHlJbml0X19zaGEyNTYodm9pZCk7CkBAIC02NCw2ICs2NSw4IEBACiBleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9hdGV4aXQodm9pZCk7CiBleHRlcm4gUHlPYmplY3QqIF9QeVdhcm5pbmdzX0luaXQodm9pZCk7CiBleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9fc3RyaW5nKHZvaWQpOworZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfX3N0YXQodm9pZCk7CitleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9fb3Bjb2RlKHZvaWQpOwogCiAvKiB0b29scy9mcmVlemUvbWFrZWNvbmZpZy5weSBtYXJrZXIgZm9yIGFkZGl0aW9uYWwgImV4dGVybiIgKi8KIC8qIC0tIEFERE1PRFVMRSBNQVJLRVIgMSAtLSAqLwpAQCAtODcsNyArOTAsNyBAQAogICAgIHsiZ2MiLCBQeUluaXRfZ2N9LAogICAgIHsibWF0aCIsIFB5SW5pdF9tYXRofSwKICAgICB7Im50IiwgUHlJbml0X250fSwgLyogVXNlIHRoZSBOVCBvcyBmdW5jdGlvbnMsIG5vdCBwb3NpeCAqLwotICAgIHsib3BlcmF0b3IiLCBQeUluaXRfb3BlcmF0b3J9LAorICAgIHsiX29wZXJhdG9yIiwgUHlJbml0X19vcGVyYXRvcn0sCiAgICAgeyJzaWduYWwiLCBQeUluaXRfc2lnbmFsfSwKICAgICB7Il9tZDUiLCBQeUluaXRfX21kNX0sCiAgICAgeyJfc2hhMSIsIFB5SW5pdF9fc2hhMX0sCkBAIC0xMDEsNiArMTA0LDcgQEAKICAgICB7Im1zdmNydCIsIFB5SW5pdF9tc3ZjcnR9LAogICAgIHsiX2xvY2FsZSIsIFB5SW5pdF9fbG9jYWxlfSwKICNlbmRpZgorICAgIHsiX3RyYWNlbWFsbG9jIiwgUHlJbml0X190cmFjZW1hbGxvY30sCiAgICAgLyogWFhYIFNob3VsZCBfd2luYXBpIGdvIGluIGEgV0lOMzIgYmxvY2s/ICBub3QgV0lONjQ/ICovCiAgICAgeyJfd2luYXBpIiwgUHlJbml0X193aW5hcGl9LAogCkBAIC0xNTQsNiArMTU4LDggQEAKICAgICB7Il9pbyIsIFB5SW5pdF9faW99LAogICAgIHsiX3BpY2tsZSIsIFB5SW5pdF9fcGlja2xlfSwKICAgICB7ImF0ZXhpdCIsIFB5SW5pdF9hdGV4aXR9LAorICAgIHsiX3N0YXQiLCBQeUluaXRfX3N0YXR9LAorICAgIHsiX29wY29kZSIsIFB5SW5pdF9fb3Bjb2RlfSwKIAogICAgIC8qIFNlbnRpbmVsICovCiAgICAgezAsIDB9CmRpZmYgLS1naXQgYS9QQy9leGFtcGxlX250L2V4YW1wbGUuYyBiL1BDL2V4YW1wbGVfbnQvZXhhbXBsZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NjlkMTFiLi4wMDAwMDAwCi0tLSBhL1BDL2V4YW1wbGVfbnQvZXhhbXBsZS5jCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotI2luY2x1ZGUgIlB5dGhvbi5oIgotCi1zdGF0aWMgUHlPYmplY3QgKgotZXhfZm9vKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKLXsKLSAgICBwcmludGYoIkhlbGxvLCB3b3JsZFxuIik7Ci0gICAgUHlfSU5DUkVGKFB5X05vbmUpOwotICAgIHJldHVybiBQeV9Ob25lOwotfQotCi1zdGF0aWMgUHlNZXRob2REZWYgZXhhbXBsZV9tZXRob2RzW10gPSB7Ci0gICAgeyJmb28iLCBleF9mb28sIE1FVEhfVkFSQVJHUywgImZvbygpIGRvYyBzdHJpbmcifSwKLSAgICB7TlVMTCwgTlVMTH0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgUHlNb2R1bGVEZWYgZXhhbXBsZW1vZHVsZSA9IHsKLSAgICBQeU1vZHVsZURlZl9IRUFEX0lOSVQsCi0gICAgImV4YW1wbGUiLAotICAgICJleGFtcGxlIG1vZHVsZSBkb2Mgc3RyaW5nIiwKLSAgICAtMSwKLSAgICBleGFtcGxlX21ldGhvZHMsCi0gICAgTlVMTCwKLSAgICBOVUxMLAotICAgIE5VTEwsCi0gICAgTlVMTAotfTsKLQotUHlNT0RJTklUX0ZVTkMKLVB5SW5pdF9leGFtcGxlKHZvaWQpCi17Ci0gICAgcmV0dXJuIFB5TW9kdWxlX0NyZWF0ZSgmZXhhbXBsZW1vZHVsZSk7Ci19CmRpZmYgLS1naXQgYS9QQy9leGFtcGxlX250L2V4YW1wbGUuc2xuIGIvUEMvZXhhbXBsZV9udC9leGFtcGxlLnNsbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDhhMzExOS4uMDAwMDAwMAotLS0gYS9QQy9leGFtcGxlX250L2V4YW1wbGUuc2xuCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gU29sdXRpb24gRmlsZSwgRm9ybWF0IFZlcnNpb24gOC4wMA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiZXhhbXBsZSIsICJleGFtcGxlLnZjcHJvaiIsICJ7QTA2MDhENkYtODRFRC00NEFFLUEyQTYtQTNDQzdGNEE0MDMwfSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1HbG9iYWwNCi0JR2xvYmFsU2VjdGlvbihTb2x1dGlvbkNvbmZpZ3VyYXRpb24pID0gcHJlU29sdXRpb24NCi0JCURlYnVnID0gRGVidWcNCi0JCVJlbGVhc2UgPSBSZWxlYXNlDQotCUVuZEdsb2JhbFNlY3Rpb24NCi0JR2xvYmFsU2VjdGlvbihQcm9qZWN0Q29uZmlndXJhdGlvbikgPSBwb3N0U29sdXRpb24NCi0JCXtBMDYwOEQ2Ri04NEVELTQ0QUUtQTJBNi1BM0NDN0Y0QTQwMzB9LkRlYnVnLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7QTA2MDhENkYtODRFRC00NEFFLUEyQTYtQTNDQzdGNEE0MDMwfS5EZWJ1Zy5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXtBMDYwOEQ2Ri04NEVELTQ0QUUtQTJBNi1BM0NDN0Y0QTQwMzB9LlJlbGVhc2UuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0EwNjA4RDZGLTg0RUQtNDRBRS1BMkE2LUEzQ0M3RjRBNDAzMH0uUmVsZWFzZS5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQlFbmRHbG9iYWxTZWN0aW9uDQotCUdsb2JhbFNlY3Rpb24oRXh0ZW5zaWJpbGl0eUdsb2JhbHMpID0gcG9zdFNvbHV0aW9uDQotCUVuZEdsb2JhbFNlY3Rpb24NCi0JR2xvYmFsU2VjdGlvbihFeHRlbnNpYmlsaXR5QWRkSW5zKSA9IHBvc3RTb2x1dGlvbg0KLQlFbmRHbG9iYWxTZWN0aW9uDQotRW5kR2xvYmFsDQpkaWZmIC0tZ2l0IGEvUEMvZXhhbXBsZV9udC9leGFtcGxlLnZjcHJvaiBiL1BDL2V4YW1wbGVfbnQvZXhhbXBsZS52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiYTAwYjYuLjAwMDAwMDAKLS0tIGEvUEMvZXhhbXBsZV9udC9leGFtcGxlLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDE4OSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ3aW5kb3dzLTEyNTAiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iNy4xMCINCi0JTmFtZT0iZXhhbXBsZSINCi0JU2NjUHJvamVjdE5hbWU9IiINCi0JU2NjTG9jYWxQYXRoPSIiPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cUmVsZWFzZSINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5cUmVsZWFzZSINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXEluY2x1ZGUsLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtOREVCVUc7X1dJTkRPV1MiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVByZWNvbXBpbGVkSGVhZGVyRmlsZT0iLlxSZWxlYXNlL2V4YW1wbGUucGNoIg0KLQkJCQlBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb249Ii5cUmVsZWFzZS8iDQotCQkJCU9iamVjdEZpbGU9Ii5cUmVsZWFzZS8iDQotCQkJCVByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPSIuXFJlbGVhc2UvIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIvZXhwb3J0OmluaXRleGFtcGxlIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJvZGJjMzIubGliIG9kYmNjcDMyLmxpYiBweXRob24zMy5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii5cUmVsZWFzZS9leGFtcGxlLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM9Ii4uXFBDYnVpbGQiDQotCQkJCU1vZHVsZURlZmluaXRpb25GaWxlPSIiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cUmVsZWFzZS9leGFtcGxlLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXFJlbGVhc2UvZXhhbXBsZS5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KLQkJCQlNa1R5cExpYkNvbXBhdGlibGU9IlRSVUUiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjEiDQotCQkJCVR5cGVMaWJyYXJ5TmFtZT0iLlxSZWxlYXNlL2V4YW1wbGUudGxiIg0KLQkJCQlIZWFkZXJGaWxlTmFtZT0iIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cRGVidWciDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXERlYnVnIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlxJbmNsdWRlLC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7X0RFQlVHO19XSU5ET1dTIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMyINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVByZWNvbXBpbGVkSGVhZGVyRmlsZT0iLlxEZWJ1Zy9leGFtcGxlLnBjaCINCi0JCQkJQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPSIuXERlYnVnLyINCi0JCQkJT2JqZWN0RmlsZT0iLlxEZWJ1Zy8iDQotCQkJCVByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPSIuXERlYnVnLyINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjQiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iL2V4cG9ydDppbml0ZXhhbXBsZSINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0ib2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgcHl0aG9uMzNfZC5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii5cRGVidWcvZXhhbXBsZV9kLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM9Ii4uXFBDYnVpbGQiDQotCQkJCU1vZHVsZURlZmluaXRpb25GaWxlPSIiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlxEZWJ1Zy9leGFtcGxlX2QucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjIiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cRGVidWcvZXhhbXBsZV9kLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUciDQotCQkJCU1rVHlwTGliQ29tcGF0aWJsZT0iVFJVRSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMSINCi0JCQkJVHlwZUxpYnJhcnlOYW1lPSIuXERlYnVnL2V4YW1wbGUudGxiIg0KLQkJCQlIZWFkZXJGaWxlTmFtZT0iIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iU291cmNlIEZpbGVzIg0KLQkJCUZpbHRlcj0iY3BwO2M7Y3h4O3JjO2RlZjtyO29kbDtocGo7YmF0O2ZvcjtmOTAiPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iZXhhbXBsZS5jIj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIj4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtOREVCVUc7X1dJTkRPV1M7JChOb0luaGVyaXQpIi8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWd8V2luMzIiPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19ERUJVRztfV0lORE9XUzskKE5vSW5oZXJpdCkiLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJIZWFkZXIgRmlsZXMiDQotCQkJRmlsdGVyPSJoO2hwcDtoeHg7aG07aW5sO2ZpO2ZkIj4NCi0JCTwvRmlsdGVyPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlJlc291cmNlIEZpbGVzIg0KLQkJCUZpbHRlcj0iaWNvO2N1cjtibXA7ZGxnO3JjMjtyY3Q7YmluO2NudDtydGY7Z2lmO2pwZztqcGVnO2pwZSI+DQotCQk8L0ZpbHRlcj4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSJyZWFkbWUudHh0Ij4NCi0JCTwvRmlsZT4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvZXhhbXBsZV9udC9yZWFkbWUudHh0IGIvUEMvZXhhbXBsZV9udC9yZWFkbWUudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiODM4ODhjLi4wMDAwMDAwCi0tLSBhL1BDL2V4YW1wbGVfbnQvcmVhZG1lLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDE4MyArMCwwIEBACi1FeGFtcGxlIFB5dGhvbiBleHRlbnNpb24gZm9yIFdpbmRvd3MgTlQKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1UaGlzIGRpcmVjdG9yeSBjb250YWlucyBldmVyeXRoaW5nIG5lZWRlZCAoZXhjZXB0IGZvciB0aGUgUHl0aG9uCi1kaXN0cmlidXRpb24hKSB0byBidWlsZCBhIFB5dGhvbiBleHRlbnNpb24gbW9kdWxlIHVzaW5nIE1pY3Jvc29mdCBWQysrLgotTm90aWNlIHRoYXQgeW91IG5lZWQgdG8gdXNlIHRoZSBzYW1lIGNvbXBpbGVyIHZlcnNpb24gdGhhdCB3YXMgdXNlZCB0byBidWlsZCAKLVB5dGhvbiBpdHNlbGYuCi0KLVRoZSBzaW1wbGVzdCB3YXkgdG8gYnVpbGQgdGhpcyBleGFtcGxlIGlzIHRvIHVzZSB0aGUgZGlzdHV0aWxzIHNjcmlwdAotJ3NldHVwLnB5Jy4gIFRvIGRvIHRoaXMsIHNpbXBseSBleGVjdXRlOgotCi0gICUgcHl0aG9uIHNldHVwLnB5IGluc3RhbGwKLQotYWZ0ZXIgZXZlcnl0aGluZyBidWlsZHMgYW5kIGluc3RhbGxzLCB5b3UgY2FuIHRlc3QgaXQ6Ci0KLSAgJSBweXRob24gLWMgImltcG9ydCBleGFtcGxlOyBleGFtcGxlLmZvbygpIgotICBIZWxsbywgd29ybGQKLQotU2VlIHNldHVwLnB5IGZvciBtb3JlIGRldGFpbHMuICBhbHRlcm5hdGl2ZWx5LCBzZWUgYmVsb3cgZm9yIGluc3RydWN0aW9ucyBvbiAKLWhvdyB0byBidWlsZCBpbnNpZGUgdGhlIFZpc3VhbCBTdHVkaW8gZW52aXJvbm1lbnQuCi0KLVZpc3VhbCBTdHVkaW8gQnVpbGQgSW5zdHJ1Y3Rpb25zCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1UaGVzZSBhcmUgaW5zdHJ1Y3Rpb25zIGhvdyB0byBidWlsZCBhbiBleHRlbnNpb24gdXNpbmcgVmlzdWFsIEMrKy4gIFRoZQotaW5zdHJ1Y3Rpb25zIGFuZCBwcm9qZWN0IGZpbGVzIGhhdmUgbm90IGJlZW4gdXBkYXRlZCB0byB0aGUgbGF0ZXN0IFZDCi12ZXJzaW9uLiAgSW4gZ2VuZXJhbCwgaXQgaXMgcmVjb21tZW5kZWQgeW91IHVzZSB0aGUgJ3NldHVwLnB5JyBpbnN0cnVjdGlvbnMKLWFib3ZlLgotCi1JdCBoYXMgYmVlbiB0ZXN0ZWQgd2l0aCBWQysrIDcuMSBvbiBQeXRob24gMi40LiAgWW91IGNhbiBhbHNvIHVzZSBlYXJsaWVyIAotdmVyc2lvbnMgb2YgVkMgdG8gYnVpbGQgUHl0aG9uIGV4dGVuc2lvbnMsIGJ1dCB0aGUgc2FtcGxlIFZDIHByb2plY3QgZmlsZSAKLShleGFtcGxlLmRzdyBpbiB0aGlzIGRpcmVjdG9yeSkgaXMgaW4gVkMgNy4xIGZvcm1hdC4KLQotQ09QWSBUSElTIERJUkVDVE9SWSEKLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UaGlzICJleGFtcGxlX250IiBkaXJlY3RvcnkgaXMgYSBzdWJkaXJlY3Rvcnkgb2YgdGhlIFBDIGRpcmVjdG9yeSwgaW4gb3JkZXIKLXRvIGtlZXAgYWxsIHRoZSBQQy1zcGVjaWZpYyBmaWxlcyB1bmRlciB0aGUgc2FtZSBkaXJlY3RvcnkuICBIb3dldmVyLCB0aGUKLWV4YW1wbGVfbnQgZGlyZWN0b3J5IGNhbid0IGFjdHVhbGx5IGJlIHVzZWQgZnJvbSB0aGlzIGxvY2F0aW9uLiAgWW91IGZpcnN0Ci1uZWVkIHRvIGNvcHkgb3IgbW92ZSBpdCB1cCBvbmUgbGV2ZWwsIHNvIHRoYXQgZXhhbXBsZV9udCBpcyBhIGRpcmVjdAotc2libGluZyBvZiB0aGUgUENcIGFuZCBJbmNsdWRlXCBkaXJlY3Rvcmllcy4gIERvIGFsbCB5b3VyIHdvcmsgZnJvbSB3aXRoaW4KLXRoaXMgbmV3IGxvY2F0aW9uIC0tIHNvcnJ5LCBidXQgeW91J2xsIGJlIHNvcnJ5IGlmIHlvdSBkb24ndC4KLQotT1BFTiBUSEUgUFJPSkVDVAotLS0tLS0tLS0tLS0tLS0tLQotRnJvbSBWQyA3LjEsIHVzZSB0aGUKLSAgICBGaWxlIC0+IE9wZW4gU29sdXRpb24uLi4KLWRpYWxvZyAoKm5vdCogdGhlICJGaWxlIC0+IE9wZW4uLi4iIGRpYWxvZyEpLiAgTmF2aWdhdGUgdG8gYW5kIHNlbGVjdCB0aGUKLWZpbGUgImV4YW1wbGUuc2xuIiwgaW4gdGhlICpjb3B5KiBvZiB0aGUgZXhhbXBsZV9udCBkaXJlY3RvcnkgeW91IG1hZGUKLWFib3ZlLgotQ2xpY2sgT3Blbi4KLQotQlVJTEQgVEhFIEVYQU1QTEUgRExMCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUluIG9yZGVyIHRvIGNoZWNrIHRoYXQgZXZlcnl0aGluZyBpcyBzZXQgdXAgcmlnaHQsIHRyeSBidWlsZGluZzoKLQotMS4gU2VsZWN0IGEgY29uZmlndXJhdGlvbi4gIFRoaXMgc3RlcCBpcyBvcHRpb25hbC4gIERvCi0gICAgICAgQnVpbGQgLT4gQ29uZmlndXJhdGlvbiBNYW5hZ2VyLi4uIC0+IEFjdGl2ZSBTb2x1dGlvbiBDb25maWd1cmF0aW9uCi0gICBhbmQgc2VsZWN0IGVpdGhlciAiUmVsZWFzZSIgb3IgIkRlYnVnIi4KLSAgIElmIHlvdSBza2lwIHRoaXMgc3RlcCwgeW91J2xsIHVzZSB0aGUgRGVidWcgY29uZmlndXJhdGlvbiBieSBkZWZhdWx0LgotCi0yLiBCdWlsZCB0aGUgRExMLiAgRG8KLSAgICAgICBCdWlsZCAtPiBCdWlsZCBTb2x1dGlvbgotICAgVGhpcyBjcmVhdGVzIGFsbCBpbnRlcm1lZGlhdGUgYW5kIHJlc3VsdCBmaWxlcyBpbiBhIHN1YmRpcmVjdG9yeSB3aGljaAotICAgaXMgY2FsbGVkIGVpdGhlciBEZWJ1ZyBvciBSZWxlYXNlLCBkZXBlbmRpbmcgb24gd2hpY2ggY29uZmlndXJhdGlvbiB5b3UKLSAgIHBpY2tlZCBpbiB0aGUgcHJlY2VkaW5nIHN0ZXAuCi0KLVRFU1RJTkcgVEhFIERFQlVHLU1PREUgRExMCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotT25jZSB0aGUgRGVidWcgYnVpbGQgaGFzIHN1Y2NlZWRlZCwgYnJpbmcgdXAgYSBET1MgYm94LCBhbmQgY2QgdG8KLWV4YW1wbGVfbnRcRGVidWcuICBZb3Ugc2hvdWxkIG5vdyBiZSBhYmxlIHRvIHJlcGVhdCB0aGUgZm9sbG93aW5nIHNlc3Npb24KLSgiQz4iIGlzIHRoZSBET1MgcHJvbXB0LCAiPj4+IiBpcyB0aGUgUHl0aG9uIHByb21wdCkgKG5vdGUgdGhhdCB2YXJpb3VzCi1kZWJ1ZyBvdXRwdXQgZnJvbSBQeXRob24gbWF5IG5vdCBtYXRjaCB0aGlzIHNjcmVlbiBkdW1wIGV4YWN0bHkpOgotCi0gICAgQz4uLlwuLlxQQ2J1aWxkXHB5dGhvbl9kCi0gICAgQWRkaW5nIHBhcnNlciBhY2NlbGVyYXRvcnMgLi4uCi0gICAgRG9uZS4KLSAgICBQeXRob24gMi4yYzErICgjMjgsIERlYyAxNCAyMDAxLCAxODowNjozOSkgW01TQyAzMiBiaXQgKEludGVsKV0gb24gd2luMzIKLSAgICBUeXBlICJoZWxwIiwgImNvcHlyaWdodCIsICJjcmVkaXRzIiBvciAibGljZW5zZSIgZm9yIG1vcmUgaW5mb3JtYXRpb24uCi0gICAgPj4+IGltcG9ydCBleGFtcGxlCi0gICAgWzcwNTIgcmVmc10KLSAgICA+Pj4gZXhhbXBsZS5mb28oKQotICAgIEhlbGxvLCB3b3JsZAotICAgIFs3MDUyIHJlZnNdCi0gICAgPj4+Ci0KLVRFU1RJTkcgVEhFIFJFTEVBU0UtTU9ERSBETEwKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLU9uY2UgdGhlIFJlbGVhc2UgYnVpbGQgaGFzIHN1Y2NlZWRlZCwgYnJpbmcgdXAgYSBET1MgYm94LCBhbmQgY2QgdG8KLWV4YW1wbGVfbnRcUmVsZWFzZS4gIFlvdSBzaG91bGQgbm93IGJlIGFibGUgdG8gcmVwZWF0IHRoZSBmb2xsb3dpbmcgc2Vzc2lvbgotKCJDPiIgaXMgdGhlIERPUyBwcm9tcHQsICI+Pj4iIGlzIHRoZSBQeXRob24gcHJvbXB0KToKLQotICAgIEM+Li5cLi5cUENidWlsZFxweXRob24KLSAgICBQeXRob24gMi4yYzErICgjMjgsIERlYyAxNCAyMDAxLCAxODowNjowNCkgW01TQyAzMiBiaXQgKEludGVsKV0gb24gd2luMzIKLSAgICBUeXBlICJoZWxwIiwgImNvcHlyaWdodCIsICJjcmVkaXRzIiBvciAibGljZW5zZSIgZm9yIG1vcmUgaW5mb3JtYXRpb24uCi0gICAgPj4+IGltcG9ydCBleGFtcGxlCi0gICAgPj4+IGV4YW1wbGUuZm9vKCkKLSAgICBIZWxsbywgd29ybGQKLSAgICA+Pj4KLQotQ29uZ3JhdHVsYXRpb25zISAgWW91J3ZlIHN1Y2Nlc3NmdWxseSBidWlsdCB5b3VyIGZpcnN0IFB5dGhvbiBleHRlbnNpb24KLW1vZHVsZS4KLQotQ1JFQVRJTkcgWU9VUiBPV04gUFJPSkVDVAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotQ2hvb3NlIGEgbmFtZSAoInNwYW0iIGlzIGFsd2F5cyBhIHdpbm5lciA6LSkgYW5kIGNyZWF0ZSBhIGRpcmVjdG9yeSBmb3IKLWl0LiAgQ29weSB5b3VyIEMgc291cmNlcyBpbnRvIGl0LiAgTm90ZSB0aGF0IHRoZSBtb2R1bGUgc291cmNlIGZpbGUgbmFtZQotZG9lcyBub3QgbmVjZXNzYXJpbHkgaGF2ZSB0byBtYXRjaCB0aGUgbW9kdWxlIG5hbWUsIGJ1dCB0aGUgImluaXQiIGZ1bmN0aW9uCi1uYW1lIHNob3VsZCBtYXRjaCB0aGUgbW9kdWxlIG5hbWUgLS0gaS5lLiB5b3UgY2FuIG9ubHkgaW1wb3J0IGEgbW9kdWxlCi0ic3BhbSIgaWYgaXRzIGluaXQgZnVuY3Rpb24gaXMgY2FsbGVkICJpbml0c3BhbSgpIiwgYW5kIGl0IHNob3VsZCBjYWxsCi1QeV9Jbml0TW9kdWxlIHdpdGggdGhlIHN0cmluZyAic3BhbSIgYXMgaXRzIGZpcnN0IGFyZ3VtZW50ICh1c2UgdGhlIG1pbmltYWwKLWV4YW1wbGUuYyBpbiB0aGlzIGRpcmVjdG9yeSBhcyBhIGd1aWRlKS4gIEJ5IGNvbnZlbnRpb24sIGl0IGxpdmVzIGluIGEgZmlsZQotY2FsbGVkICJzcGFtLmMiIG9yICJzcGFtbW9kdWxlLmMiLiAgVGhlIG91dHB1dCBmaWxlIHNob3VsZCBiZSBjYWxsZWQKLSJzcGFtLmRsbCIgb3IgInNwYW0ucHlkIiAodGhlIGxhdHRlciBpcyBzdXBwb3J0ZWQgdG8gYXZvaWQgY29uZnVzaW9uIHdpdGggYQotc3lzdGVtIGxpYnJhcnkgInNwYW0uZGxsIiB0byB3aGljaCB5b3VyIG1vZHVsZSBjb3VsZCBiZSBhIFB5dGhvbiBpbnRlcmZhY2UpCi1pbiBSZWxlYXNlIG1vZGUsIG9yIHNwYW1fZC5kbGwgb3Igc3BhbV9kLnB5ZCBpbiBEZWJ1ZyBtb2RlLgotCi1Ob3cgeW91ciBvcHRpb25zIGFyZToKLQotMSkgQ29weSBleGFtcGxlLnNsbiBhbmQgZXhhbXBsZS52Y3Byb2osIHJlbmFtZSB0aGVtIHRvIHNwYW0uKiwgYW5kIGVkaXQgdGhlbQotYnkgaGFuZC4KLQotb3IKLQotMikgQ3JlYXRlIGEgYnJhbmQgbmV3IHByb2plY3Q7IGluc3RydWN0aW9ucyBhcmUgYmVsb3cuCi0KLUluIGVpdGhlciBjYXNlLCBjb3B5IGV4YW1wbGVfbnRcZXhhbXBsZS5kZWYgdG8gc3BhbVxzcGFtLmRlZiwgYW5kIGVkaXQgdGhlCi1uZXcgc3BhbS5kZWYgc28gaXRzIHNlY29uZCBsaW5lIGNvbnRhaW5zIHRoZSBzdHJpbmcgImluaXRzcGFtIi4gIElmIHlvdQotY3JlYXRlZCBhIG5ldyBwcm9qZWN0IHlvdXJzZWxmLCBhZGQgdGhlIGZpbGUgc3BhbS5kZWYgdG8gdGhlIHByb2plY3Qgbm93LgotKFRoaXMgaXMgYW4gYW5ub3lpbmcgbGl0dGxlIGZpbGUgd2l0aCBvbmx5IHR3byBsaW5lcy4gIEFuIGFsdGVybmF0aXZlCi1hcHByb2FjaCBpcyB0byBmb3JnZXQgYWJvdXQgdGhlIC5kZWYgZmlsZSwgYW5kIGFkZCB0aGUgb3B0aW9uCi0iL2V4cG9ydDppbml0c3BhbSIgc29tZXdoZXJlIHRvIHRoZSBMaW5rIHNldHRpbmdzLCBieSBtYW51YWxseSBlZGl0aW5nIHRoZQotIlByb2plY3QgLT4gUHJvcGVydGllcyAtPiBMaW5rZXIgLT4gQ29tbWFuZCBMaW5lIC0+IEFkZGl0aW9uYWwgT3B0aW9ucyIgCi1ib3gpLgotCi1Zb3UgYXJlIG5vdyBhbGwgc2V0IHRvIGJ1aWxkIHlvdXIgZXh0ZW5zaW9uLCB1bmxlc3MgaXQgcmVxdWlyZXMgb3RoZXIKLWV4dGVybmFsIGxpYnJhcmllcywgaW5jbHVkZSBmaWxlcywgZXRjLiAgU2VlIFB5dGhvbidzIEV4dGVuZGluZyBhbmQKLUVtYmVkZGluZyBtYW51YWwgZm9yIGluc3RydWN0aW9ucyBvbiBob3cgdG8gd3JpdGUgYW4gZXh0ZW5zaW9uLgotCi0KLUNSRUFUSU5HIEEgQlJBTkQgTkVXIFBST0pFQ1QKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVVzZSB0aGUKLSAgICBGaWxlIC0+IE5ldyAtPiBQcm9qZWN0Li4uCi1kaWFsb2cgdG8gY3JlYXRlIGEgbmV3IFByb2plY3QgV29ya3NwYWNlLiAgU2VsZWN0ICJWaXN1YWwgQysrIFByb2plY3RzL1dpbjMyLwotV2luMzIgUHJvamVjdCIsIGVudGVyIHRoZSBuYW1lICgic3BhbSIpLCBhbmQgbWFrZSBzdXJlIHRoZSAiTG9jYXRpb24iIGlzIAotc2V0IHRvIHBhcmVudCBvZiB0aGUgc3BhbSBkaXJlY3RvcnkgeW91IGhhdmUgY3JlYXRlZCAod2hpY2ggc2hvdWxkIGJlIGEgZGlyZWN0IAotc3ViZGlyZWN0b3J5IG9mIHRoZSBQeXRob24gYnVpbGQgdHJlZSwgYSBzaWJsaW5nIG9mIEluY2x1ZGUgYW5kIFBDKS4gIAotSW4gIkFwcGxpY2F0aW9uIFNldHRpbmdzIiwgc2VsZWN0ICJETEwiLCBhbmQgIkVtcHR5IFByb2plY3QiLiAgQ2xpY2sgT0suCi0KLVlvdSBzaG91bGQgbm93IGNyZWF0ZSB0aGUgZmlsZSBzcGFtLmRlZiBhcyBpbnN0cnVjdGVkIGluIHRoZSBwcmV2aW91cwotc2VjdGlvbi4gQWRkIHRoZSBzb3VyY2UgZmlsZXMgKGluY2x1ZGluZyB0aGUgLmRlZiBmaWxlKSB0byB0aGUgcHJvamVjdCwgCi11c2luZyAiUHJvamVjdCIsICJBZGQgRXhpc3RpbmcgSXRlbSIuCi0KLU5vdyBvcGVuIHRoZQotICAgIFByb2plY3QgLT4gc3BhbSBwcm9wZXJ0aWVzLi4uCi1kaWFsb2cuICAoSW1wcmVzc2l2ZSwgaXNuJ3QgaXQ/IDotKSBZb3Ugb25seSBuZWVkIHRvIGNoYW5nZSBhIGZldwotc2V0dGluZ3MuICBNYWtlIHN1cmUgIkFsbCBDb25maWd1cmF0aW9ucyIgaXMgc2VsZWN0ZWQgZnJvbSB0aGUgIlNldHRpbmdzCi1mb3I6IiBkcm9wZG93biBsaXN0LiAgU2VsZWN0IHRoZSAiQy9DKysiIHRhYi4gIENob29zZSB0aGUgIkdlbmVyYWwiCi1jYXRlZ29yeSBpbiB0aGUgcG9wdXAgbWVudSBhdCB0aGUgdG9wLiAgVHlwZSB0aGUgZm9sbG93aW5nIHRleHQgaW4gdGhlCi1lbnRyeSBib3ggbGFiZWxlZCAiQWRkZGl0aW9uYWwgSW5jbHVkZSBEaXJlY3RvcmllczoiCi0KLSAgICAuLlxJbmNsdWRlLC4uXFBDCi0KLVRoZW4sIGNob29zZSB0aGUgIkdlbmVyYWwiIGNhdGVnb3J5IGluIHRoZSAiTGlua2VyIiB0YWIsIGFuZCBlbnRlcgotICAgIC4uXFBDYnVpbGQKLWluIHRoZSAiQWRkaXRpb25hbCBsaWJyYXJ5IERpcmVjdG9yaWVzIiBib3guCi0KLU5vdyB5b3UgbmVlZCB0byBhZGQgc29tZSBtb2RlLXNwZWNpZmljIHNldHRpbmdzIChzZWxlY3QgIkFjY2VwdCIKLXdoZW4gYXNrZWQgdG8gY29uZmlybSB5b3VyIGNoYW5nZXMpOgotCi1TZWxlY3QgIlJlbGVhc2UiIGluIHRoZSAiQ29uZmlndXJhdGlvbiIgZHJvcGRvd24gbGlzdC4gIENsaWNrIHRoZQotIkxpbmsiIHRhYiwgY2hvb3NlIHRoZSAiSW5wdXQiIENhdGVnb3J5LCBhbmQgYXBwZW5kICJweXRob24yNC5saWIiIHRvIHRoZQotbGlzdCBpbiB0aGUgIkFkZGl0aW9uYWwgRGVwZW5kZW5jaWVzIiBib3guCi0KLVNlbGVjdCAiRGVidWciIGluIHRoZSAiU2V0dGluZ3MgZm9yOiIgZHJvcGRvd24gbGlzdCwgYW5kIGFwcGVuZAotInB5dGhvbjI0X2QubGliIiB0byB0aGUgbGlzdCBpbiB0aGUgQWRkaXRpb25hbCBEZXBlbmRlbmNpZXMiIGJveC4gIFRoZW4KLWNsaWNrIG9uIHRoZSBDL0MrKyB0YWIsIHNlbGVjdCAiQ29kZSBHZW5lcmF0aW9uIiwgYW5kIHNlbGVjdCAKLSJNdWx0aS10aHJlYWRlZCBEZWJ1ZyBETEwiIGZyb20gdGhlICJSdW50aW1lIGxpYnJhcnkiIGRyb3Bkb3duIGxpc3QuCi0KLVNlbGVjdCAiUmVsZWFzZSIgYWdhaW4gZnJvbSB0aGUgIlNldHRpbmdzIGZvcjoiIGRyb3Bkb3duIGxpc3QuCi1TZWxlY3QgIk11bHRpLXRocmVhZGVkIERMTCIgZnJvbSB0aGUgIlVzZSBydW4tdGltZSBsaWJyYXJ5OiIgZHJvcGRvd24gbGlzdC4KLQotVGhhdCdzIGFsbCA8d2luaz4uCmRpZmYgLS1naXQgYS9QQy9leGFtcGxlX250L3NldHVwLnB5IGIvUEMvZXhhbXBsZV9udC9zZXR1cC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDQ0M2JjNy4uMDAwMDAwMAotLS0gYS9QQy9leGFtcGxlX250L3NldHVwLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotIyBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBkaXN0dXRpbHMgJ3NldHVwJyBzY3JpcHQgZm9yIHRoZSBleGFtcGxlX250Ci0jIHNhbXBsZS4gIFRoaXMgcHJvdmlkZXMgYSBzaW1wbGVyIHdheSBvZiBidWlsZGluZyB5b3VyIGV4dGVuc2lvbgotIyBhbmQgbWVhbnMgeW91IGNhbiBhdm9pZCBrZWVwaW5nIE1TVkMgc29sdXRpb24gZmlsZXMgZXRjIGluIHNvdXJjZS1jb250cm9sLgotIyBJdCBhbHNvIG1lYW5zIGl0IHNob3VsZCBtYWdpY2FsbHkgYnVpbGQgd2l0aCBhbGwgY29tcGlsZXJzIHN1cHBvcnRlZCBieQotIyBweXRob24uCi0KLSMgVVNBR0U6IHlvdSBwcm9iYWJseSB3YW50ICdzZXR1cC5weSBpbnN0YWxsJyAtIGJ1dCBleGVjdXRlICdzZXR1cC5weSAtLWhlbHAnCi0jIGZvciBhbGwgdGhlIGRldGFpbHMuCi0KLSMgTk9URTogVGhpcyBpcyAqbm90KiBhIHNhbXBsZSBmb3IgZGlzdHV0aWxzIC0gaXQgaXMganVzdCB0aGUgc21hbGxlc3QKLSMgc2NyaXB0IHRoYXQgY2FuIGJ1aWxkIHRoaXMuICBTZWUgZGlzdHV0aWxzIGRvY3MgZm9yIG1vcmUgaW5mby4KLQotZnJvbSBkaXN0dXRpbHMuY29yZSBpbXBvcnQgc2V0dXAsIEV4dGVuc2lvbgotCi1leGFtcGxlX21vZCA9IEV4dGVuc2lvbignZXhhbXBsZScsIHNvdXJjZXMgPSBbJ2V4YW1wbGUuYyddKQotCi0KLXNldHVwKG5hbWUgPSAiZXhhbXBsZSIsCi0gICAgdmVyc2lvbiA9ICIxLjAiLAotICAgIGRlc2NyaXB0aW9uID0gIkEgc2FtcGxlIGV4dGVuc2lvbiBtb2R1bGUiLAotICAgIGV4dF9tb2R1bGVzID0gW2V4YW1wbGVfbW9kXSwKLSkKZGlmZiAtLWdpdCBhL1BDL2dldHBhdGhwLmMgYi9QQy9nZXRwYXRocC5jCmluZGV4IGI1YmYzMjUuLmRlYjQwZTcgMTAwNjQ0Ci0tLSBhL1BDL2dldHBhdGhwLmMKKysrIGIvUEMvZ2V0cGF0aHAuYwpAQCAtMSw2ICsxLDYgQEAKIAogLyogUmV0dXJuIHRoZSBpbml0aWFsIG1vZHVsZSBzZWFyY2ggcGF0aC4gKi8KLS8qIFVzZWQgYnkgRE9TLCBPUy8yLCBXaW5kb3dzIDMuMSwgV2luZG93cyA5NS85OCwgV2luZG93cyBOVC4gKi8KKy8qIFVzZWQgYnkgRE9TLCBXaW5kb3dzIDMuMSwgV2luZG93cyA5NS85OCwgV2luZG93cyBOVC4gKi8KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgUEFUSCBSVUxFUyBGT1IgV0lORE9XUzoKQEAgLTI0NSw5ICsyNDUsOSBAQAogICAgIC8qIFRyaWVkIHRvIHVzZSBzeXNnZXQoIndpbnZlciIpIGJ1dCBoZXJlIGlzIHRvbyBlYXJseSA6LSggKi8KICAgICB2ZXJzaW9uTGVuID0gc3RybGVuKFB5V2luX0RMTFZlcnNpb25TdHJpbmcpOwogICAgIC8qIFNwYWNlIGZvciBhbGwgdGhlIGNoYXJzLCBwbHVzIG9uZSBcMCAqLwotICAgIGtleUJ1ZiA9IGtleUJ1ZlB0ciA9IG1hbGxvYyhzaXplb2Yoa2V5UHJlZml4KSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihXQ0hBUikqKHZlcnNpb25MZW4tMSkgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoa2V5U3VmZml4KSk7CisgICAga2V5QnVmID0ga2V5QnVmUHRyID0gUHlNZW1fUmF3TWFsbG9jKHNpemVvZihrZXlQcmVmaXgpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKFdDSEFSKSoodmVyc2lvbkxlbi0xKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihrZXlTdWZmaXgpKTsKICAgICBpZiAoa2V5QnVmPT1OVUxMKSBnb3RvIGRvbmU7CiAKICAgICBtZW1jcHkoa2V5QnVmUHRyLCBrZXlQcmVmaXgsIHNpemVvZihrZXlQcmVmaXgpLXNpemVvZihXQ0hBUikpOwpAQCAtMjcxLDcgKzI3MSw3IEBACiAgICAgLyogQWxsb2NhdGUgYSB0ZW1wIGFycmF5IG9mIGNoYXIgYnVmZmVycywgc28gd2Ugb25seSBuZWVkIHRvIGxvb3AKICAgICAgICByZWFkaW5nIHRoZSByZWdpc3RyeSBvbmNlCiAgICAgKi8KLSAgICBwcFBhdGhzID0gbWFsbG9jKCBzaXplb2YoV0NIQVIgKikgKiBudW1LZXlzICk7CisgICAgcHBQYXRocyA9IFB5TWVtX1Jhd01hbGxvYyggc2l6ZW9mKFdDSEFSICopICogbnVtS2V5cyApOwogICAgIGlmIChwcFBhdGhzPT1OVUxMKSBnb3RvIGRvbmU7CiAgICAgbWVtc2V0KHBwUGF0aHMsIDAsIHNpemVvZihXQ0hBUiAqKSAqIG51bUtleXMpOwogICAgIC8qIExvb3Agb3ZlciBhbGwgc3Via2V5cywgYWxsb2NhdGluZyBhIHRlbXAgc3ViLWJ1ZmZlci4gKi8KQEAgLTI5Myw3ICsyOTMsNyBAQAogICAgICAgICAvKiBGaW5kIHRoZSB2YWx1ZSBvZiB0aGUgYnVmZmVyIHNpemUsIG1hbGxvYywgdGhlbiByZWFkIGl0ICovCiAgICAgICAgIFJlZ1F1ZXJ5VmFsdWVFeFcoc3ViS2V5LCBOVUxMLCAwLCBOVUxMLCBOVUxMLCAmcmVxZFNpemUpOwogICAgICAgICBpZiAocmVxZFNpemUpIHsKLSAgICAgICAgICAgIHBwUGF0aHNbaW5kZXhdID0gbWFsbG9jKHJlcWRTaXplKTsKKyAgICAgICAgICAgIHBwUGF0aHNbaW5kZXhdID0gUHlNZW1fUmF3TWFsbG9jKHJlcWRTaXplKTsKICAgICAgICAgICAgIGlmIChwcFBhdGhzW2luZGV4XSkgewogICAgICAgICAgICAgICAgIFJlZ1F1ZXJ5VmFsdWVFeFcoc3ViS2V5LCBOVUxMLCAwLCBOVUxMLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoTFBCWVRFKXBwUGF0aHNbaW5kZXhdLApAQCAtMzA4LDcgKzMwOCw3IEBACiAgICAgaWYgKGRhdGFTaXplID09IDApIGdvdG8gZG9uZTsKIAogICAgIC8qIG9yaWdpbmFsIGRhdGFzaXplIGZyb20gUmVnUXVlcnlJbmZvIGRvZXNuJ3QgaW5jbHVkZSB0aGUgXDAgKi8KLSAgICBkYXRhQnVmID0gbWFsbG9jKChkYXRhU2l6ZSsxKSAqIHNpemVvZihXQ0hBUikpOworICAgIGRhdGFCdWYgPSBQeU1lbV9SYXdNYWxsb2MoKGRhdGFTaXplKzEpICogc2l6ZW9mKFdDSEFSKSk7CiAgICAgaWYgKGRhdGFCdWYpIHsKICAgICAgICAgV0NIQVIgKnN6Q3VyID0gZGF0YUJ1ZjsKICAgICAgICAgRFdPUkQgcmVxZFNpemUgPSBkYXRhU2l6ZTsKQEAgLTM0NiwxNCArMzQ2LDEzIEBACiBkb25lOgogICAgIC8qIExvb3AgZnJlZWluZyBteSB0ZW1wIGJ1ZmZlcnMgKi8KICAgICBpZiAocHBQYXRocykgewotICAgICAgICBmb3IoaW5kZXg9MDtpbmRleDxudW1LZXlzO2luZGV4KyspCi0gICAgICAgICAgICBpZiAocHBQYXRoc1tpbmRleF0pIGZyZWUocHBQYXRoc1tpbmRleF0pOwotICAgICAgICBmcmVlKHBwUGF0aHMpOworICAgICAgICBmb3IoaW5kZXg9MDsgaW5kZXg8bnVtS2V5czsgaW5kZXgrKykKKyAgICAgICAgICAgIFB5TWVtX1Jhd0ZyZWUocHBQYXRoc1tpbmRleF0pOworICAgICAgICBQeU1lbV9SYXdGcmVlKHBwUGF0aHMpOwogICAgIH0KICAgICBpZiAobmV3S2V5KQogICAgICAgICBSZWdDbG9zZUtleShuZXdLZXkpOwotICAgIGlmIChrZXlCdWYpCi0gICAgICAgIGZyZWUoa2V5QnVmKTsKKyAgICBQeU1lbV9SYXdGcmVlKGtleUJ1Zik7CiAgICAgcmV0dXJuIHJldHZhbDsKIH0KICNlbmRpZiAvKiBQeV9FTkFCTEVfU0hBUkVEICovCkBAIC00MzQsNyArNDMzLDcgQEAKICAgICAgICAgY2hhciAqIHAgPSBmZ2V0cyhidWZmZXIsIE1BWFBBVEhMRU4qMiwgZW52X2ZpbGUpOwogICAgICAgICB3Y2hhcl90IHRtcGJ1ZmZlcltNQVhQQVRITEVOKjIrMV07CiAgICAgICAgIFB5T2JqZWN0ICogZGVjb2RlZDsKLSAgICAgICAgaW50IG47CisgICAgICAgIHNpemVfdCBuOwogCiAgICAgICAgIGlmIChwID09IE5VTEwpCiAgICAgICAgICAgICBicmVhazsKQEAgLTYxNiw3ICs2MTUsNyBAQAogICAgIGlmIChlbnZwYXRoICE9IE5VTEwpCiAgICAgICAgIGJ1ZnN6ICs9IHdjc2xlbihlbnZwYXRoKSArIDE7CiAKLSAgICBtb2R1bGVfc2VhcmNoX3BhdGggPSBidWYgPSBtYWxsb2MoYnVmc3oqc2l6ZW9mKHdjaGFyX3QpKTsKKyAgICBtb2R1bGVfc2VhcmNoX3BhdGggPSBidWYgPSBQeU1lbV9SYXdNYWxsb2MoYnVmc3oqc2l6ZW9mKHdjaGFyX3QpKTsKICAgICBpZiAoYnVmID09IE5VTEwpIHsKICAgICAgICAgLyogV2UgY2FuJ3QgZXhpdCwgc28gcHJpbnQgYSB3YXJuaW5nIGFuZCBsaW1wIGFsb25nICovCiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ2FuJ3QgbWFsbG9jIGR5bmFtaWMgUFlUSE9OUEFUSC5cbiIpOwpAQCAtNjI5LDEwICs2MjgsOCBAQAogICAgICAgICAgICAgbW9kdWxlX3NlYXJjaF9wYXRoID0gUFlUSE9OUEFUSDsKICAgICAgICAgfQogI2lmZGVmIE1TX1dJTkRPV1MKLSAgICAgICAgaWYgKG1hY2hpbmVwYXRoKQotICAgICAgICAgICAgZnJlZShtYWNoaW5lcGF0aCk7Ci0gICAgICAgIGlmICh1c2VycGF0aCkKLSAgICAgICAgICAgIGZyZWUodXNlcnBhdGgpOworICAgICAgICBQeU1lbV9SYXdGcmVlKG1hY2hpbmVwYXRoKTsKKyAgICAgICAgUHlNZW1fUmF3RnJlZSh1c2VycGF0aCk7CiAjZW5kaWYgLyogTVNfV0lORE9XUyAqLwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNjUyLDEzICs2NDksMTMgQEAKICAgICAgICAgd2NzY3B5KGJ1ZiwgdXNlcnBhdGgpOwogICAgICAgICBidWYgPSB3Y3NjaHIoYnVmLCBMJ1wwJyk7CiAgICAgICAgICpidWYrKyA9IERFTElNOwotICAgICAgICBmcmVlKHVzZXJwYXRoKTsKKyAgICAgICAgUHlNZW1fUmF3RnJlZSh1c2VycGF0aCk7CiAgICAgfQogICAgIGlmIChtYWNoaW5lcGF0aCkgewogICAgICAgICB3Y3NjcHkoYnVmLCBtYWNoaW5lcGF0aCk7CiAgICAgICAgIGJ1ZiA9IHdjc2NocihidWYsIEwnXDAnKTsKICAgICAgICAgKmJ1ZisrID0gREVMSU07Ci0gICAgICAgIGZyZWUobWFjaGluZXBhdGgpOworICAgICAgICBQeU1lbV9SYXdGcmVlKG1hY2hpbmVwYXRoKTsKICAgICB9CiAgICAgaWYgKHB5dGhvbmhvbWUgPT0gTlVMTCkgewogICAgICAgICBpZiAoIXNraXBkZWZhdWx0KSB7CkBAIC03NDUsNyArNzQyLDcgQEAKIFB5X1NldFBhdGgoY29uc3Qgd2NoYXJfdCAqcGF0aCkKIHsKICAgICBpZiAobW9kdWxlX3NlYXJjaF9wYXRoICE9IE5VTEwpIHsKLSAgICAgICAgZnJlZShtb2R1bGVfc2VhcmNoX3BhdGgpOworICAgICAgICBQeU1lbV9SYXdGcmVlKG1vZHVsZV9zZWFyY2hfcGF0aCk7CiAgICAgICAgIG1vZHVsZV9zZWFyY2hfcGF0aCA9IE5VTEw7CiAgICAgfQogICAgIGlmIChwYXRoICE9IE5VTEwpIHsKQEAgLTc1MywxMCArNzUwLDEwIEBACiAgICAgICAgIHdjaGFyX3QgKnByb2cgPSBQeV9HZXRQcm9ncmFtTmFtZSgpOwogICAgICAgICB3Y3NuY3B5KHByb2dwYXRoLCBwcm9nLCBNQVhQQVRITEVOKTsKICAgICAgICAgcHJlZml4WzBdID0gTCdcMCc7Ci0gICAgICAgIG1vZHVsZV9zZWFyY2hfcGF0aCA9IG1hbGxvYygod2NzbGVuKHBhdGgpICsgMSkgKiBzaXplb2Yod2NoYXJfdCkpOworICAgICAgICBtb2R1bGVfc2VhcmNoX3BhdGggPSBQeU1lbV9SYXdNYWxsb2MoKHdjc2xlbihwYXRoKSArIDEpICogc2l6ZW9mKHdjaGFyX3QpKTsKICAgICAgICAgaWYgKG1vZHVsZV9zZWFyY2hfcGF0aCAhPSBOVUxMKQogICAgICAgICAgICAgd2NzY3B5KG1vZHVsZV9zZWFyY2hfcGF0aCwgcGF0aCk7Ci0JfQorICAgIH0KIH0KIAogd2NoYXJfdCAqCmRpZmYgLS1naXQgYS9QQy9sYXVuY2hlci5jIGIvUEMvbGF1bmNoZXIuYwppbmRleCAyMTZhNTYyLi5iYmIyOGRhIDEwMDY0NAotLS0gYS9QQy9sYXVuY2hlci5jCisrKyBiL1BDL2xhdW5jaGVyLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTIgVmluYXkgU2FqaXAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMyBWaW5heSBTYWppcC4KICAqIExpY2Vuc2VkIHRvIFBTRiB1bmRlciBhIGNvbnRyaWJ1dG9yIGFncmVlbWVudC4KICAqCiAgKiBCYXNlZCBvbiB0aGUgd29yayBvZjoKQEAgLTE4LDcgKzE4LDI4IEBACiAKIC8qIEJ1aWxkIG9wdGlvbnMuICovCiAjZGVmaW5lIFNLSVBfUFJFRklYCi0vKiAjZGVmaW5lIFNFQVJDSF9QQVRIICovCisjZGVmaW5lIFNFQVJDSF9QQVRICisKKy8qIEVycm9yIGNvZGVzICovCisKKyNkZWZpbmUgUkNfTk9fU1REX0hBTkRMRVMgICAxMDAKKyNkZWZpbmUgUkNfQ1JFQVRFX1BST0NFU1MgICAxMDEKKyNkZWZpbmUgUkNfQkFEX1ZJUlRVQUxfUEFUSCAxMDIKKyNkZWZpbmUgUkNfTk9fUFlUSE9OICAgICAgICAxMDMKKyNkZWZpbmUgUkNfTk9fTUVNT1JZICAgICAgICAxMDQKKy8qCisgKiBTQ1JJUFRfV1JBUFBFUiBpcyB1c2VkIHRvIGNob29zZSBiZXR3ZWVuIHR3byB2YXJpYW50cyBvZiBhbiBleGVjdXRhYmxlIGJ1aWx0CisgKiBmcm9tIHRoaXMgc291cmNlIGZpbGUuIElmIG5vdCBkZWZpbmVkLCB0aGUgUEVQIDM5NyBQeXRob24gbGF1bmNoZXIgaXMgYnVpbHQ7CisgKiBpZiBkZWZpbmVkLCBhIHNjcmlwdCBsYXVuY2hlciBvZiB0aGUgdHlwZSB1c2VkIGJ5IHNldHVwdG9vbHMgaXMgYnVpbHQsIHdoaWNoCisgKiBsb29rcyBmb3IgYSBzY3JpcHQgbmFtZSByZWxhdGVkIHRvIHRoZSBleGVjdXRhYmxlIG5hbWUgYW5kIHJ1bnMgdGhhdCBzY3JpcHQKKyAqIHdpdGggdGhlIGFwcHJvcHJpYXRlIFB5dGhvbiBpbnRlcnByZXRlci4KKyAqCisgKiBTQ1JJUFRfV1JBUFBFUiBzaG91bGQgYmUgdW5kZWZpbmVkIGluIHRoZSBzb3VyY2UsIGFuZCBkZWZpbmVkIGluIGEgVlMgcHJvamVjdAorICogd2hpY2ggYnVpbGRzIHRoZSBzZXR1cHRvb2xzLXN0eWxlIGxhdW5jaGVyLgorICovCisjaWYgZGVmaW5lZChTQ1JJUFRfV1JBUFBFUikKKyNkZWZpbmUgUkNfTk9fU0NSSVBUICAgICAgICAxMDUKKyNlbmRpZgogCiAvKiBKdXN0IGZvciBub3cgLSBzdGF0aWMgZGVmaW5pdGlvbiAqLwogCkBAIC0zMiwzMiArNTMsNiBAQAogICAgIHJldHVybiBwOwogfQogCi0vKgotICogVGhpcyBmdW5jdGlvbiBpcyBoZXJlIHRvIHNpbXBsaWZ5IG1lbW9yeSBtYW5hZ2VtZW50Ci0gKiBhbmQgdG8gdHJlYXQgYmxhbmsgdmFsdWVzIGFzIGlmIHRoZXkgYXJlIGFic2VudC4KLSAqLwotc3RhdGljIHdjaGFyX3QgKiBnZXRfZW52KHdjaGFyX3QgKiBrZXkpCi17Ci0gICAgLyogVGhpcyBpcyBub3QgdGhyZWFkLXNhZmUsIGp1c3QgbGlrZSBnZXRlbnYgKi8KLSAgICBzdGF0aWMgd2NoYXJfdCBidWZbMjU2XTsKLSAgICBEV09SRCByZXN1bHQgPSBHZXRFbnZpcm9ubWVudFZhcmlhYmxlVyhrZXksIGJ1ZiwgMjU2KTsKLQotICAgIGlmIChyZXN1bHQgPiAyNTUpIHsKLSAgICAgICAgLyogTGFyZ2UgZW52aXJvbm1lbnQgdmFyaWFibGUuIEFjY2VwdCBzb21lIGxlYWthZ2UgKi8KLSAgICAgICAgd2NoYXJfdCAqYnVmMiA9ICh3Y2hhcl90KiltYWxsb2Moc2l6ZW9mKHdjaGFyX3QpICogKHJlc3VsdCsxKSk7Ci0gICAgICAgIEdldEVudmlyb25tZW50VmFyaWFibGVXKGtleSwgYnVmMiwgcmVzdWx0KTsKLSAgICAgICAgcmV0dXJuIGJ1ZjI7Ci0gICAgfQotCi0gICAgaWYgKHJlc3VsdCA9PSAwKQotICAgICAgICAvKiBFaXRoZXIgc29tZSBlcnJvciwgZS5nLiBFUlJPUl9FTlZWQVJfTk9UX0ZPVU5ELAotICAgICAgICAgICBvciBhbiBlbXB0eSBlbnZpcm9ubWVudCB2YXJpYWJsZS4gKi8KLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICByZXR1cm4gYnVmOwotfQotCi0KIHN0YXRpYyB2b2lkCiBkZWJ1Zyh3Y2hhcl90ICogZm9ybWF0LCAuLi4pCiB7CkBAIC0xMDAsMTEgKzk1LDQwIEBACiAjaWYgIWRlZmluZWQoX1dJTkRPV1MpCiAgICAgZndwcmludGYoc3RkZXJyLCBMIiVzXG4iLCBtZXNzYWdlKTsKICNlbHNlCi0gICAgTWVzc2FnZUJveChOVUxMLCBtZXNzYWdlLCBURVhUKCJQeXRob24gTGF1bmNoZXIgaXMgc29ycnkgdG8gc2F5IC4uLiIpLCBNQl9PSyk7IAorICAgIE1lc3NhZ2VCb3goTlVMTCwgbWVzc2FnZSwgVEVYVCgiUHl0aG9uIExhdW5jaGVyIGlzIHNvcnJ5IHRvIHNheSAuLi4iKSwKKyAgICAgICAgICAgICAgIE1CX09LKTsgCiAjZW5kaWYKICAgICBFeGl0UHJvY2VzcyhyYyk7CiB9CiAKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGhlcmUgdG8gc2ltcGxpZnkgbWVtb3J5IG1hbmFnZW1lbnQKKyAqIGFuZCB0byB0cmVhdCBibGFuayB2YWx1ZXMgYXMgaWYgdGhleSBhcmUgYWJzZW50LgorICovCitzdGF0aWMgd2NoYXJfdCAqIGdldF9lbnYod2NoYXJfdCAqIGtleSkKK3sKKyAgICAvKiBUaGlzIGlzIG5vdCB0aHJlYWQtc2FmZSwganVzdCBsaWtlIGdldGVudiAqLworICAgIHN0YXRpYyB3Y2hhcl90IGJ1ZltCVUZTSVpFXTsKKyAgICBEV09SRCByZXN1bHQgPSBHZXRFbnZpcm9ubWVudFZhcmlhYmxlVyhrZXksIGJ1ZiwgQlVGU0laRSk7CisKKyAgICBpZiAocmVzdWx0ID49IEJVRlNJWkUpIHsKKyAgICAgICAgLyogTGFyZ2UgZW52aXJvbm1lbnQgdmFyaWFibGUuIEFjY2VwdCBzb21lIGxlYWthZ2UgKi8KKyAgICAgICAgd2NoYXJfdCAqYnVmMiA9ICh3Y2hhcl90KiltYWxsb2Moc2l6ZW9mKHdjaGFyX3QpICogKHJlc3VsdCsxKSk7CisgICAgICAgIGlmIChidWYyID09IE5VTEwpIHsKKyAgICAgICAgICAgIGVycm9yKFJDX05PX01FTU9SWSwgTCJDb3VsZCBub3QgYWxsb2NhdGUgZW52aXJvbm1lbnQgYnVmZmVyIik7CisgICAgICAgIH0KKyAgICAgICAgR2V0RW52aXJvbm1lbnRWYXJpYWJsZVcoa2V5LCBidWYyLCByZXN1bHQpOworICAgICAgICByZXR1cm4gYnVmMjsKKyAgICB9CisKKyAgICBpZiAocmVzdWx0ID09IDApCisgICAgICAgIC8qIEVpdGhlciBzb21lIGVycm9yLCBlLmcuIEVSUk9SX0VOVlZBUl9OT1RfRk9VTkQsCisgICAgICAgICAgIG9yIGFuIGVtcHR5IGVudmlyb25tZW50IHZhcmlhYmxlLiAqLworICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHJldHVybiBidWY7Cit9CisKICNpZiBkZWZpbmVkKF9XSU5ET1dTKQogCiAjZGVmaW5lIFBZVEhPTl9FWEVDVVRBQkxFIEwicHl0aG9udy5leGUiCkBAIC0xMTUsMTEgKzEzOSw2IEBACiAKICNlbmRpZgogCi0jZGVmaW5lIFJDX05PX1NURF9IQU5ETEVTICAgMTAwCi0jZGVmaW5lIFJDX0NSRUFURV9QUk9DRVNTICAgMTAxCi0jZGVmaW5lIFJDX0JBRF9WSVJUVUFMX1BBVEggMTAyCi0jZGVmaW5lIFJDX05PX1BZVEhPTiAgICAgICAgMTAzCi0KICNkZWZpbmUgTUFYX1ZFUlNJT05fU0laRSAgICA0CiAKIHR5cGVkZWYgc3RydWN0IHsKQEAgLTI0MSw3ICsyNjAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZmluZF9leGlzdGluZ19weXRob24oaXAtPmV4ZWN1dGFibGUpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoTCJsb2NhdGVfcHl0aG9uc19mb3Jfa2V5OiAlczogYWxyZWFkeSBcCi1mb3VuZDogJXNcbiIsIGlwLT5leGVjdXRhYmxlKTsKK2ZvdW5kXG4iLCBpcC0+ZXhlY3V0YWJsZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjaGVjayB0aGUgZXhlY3V0YWJsZSB0eXBlLiAqLwpAQCAtNDU3LDYgKzQ3Niw1MSBAQAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKKyNpZiBkZWZpbmVkKFNDUklQVF9XUkFQUEVSKQorLyoKKyAqIENoZWNrIGZvciBhIHNjcmlwdCBsb2NhdGVkIGFsb25nc2lkZSB0aGUgZXhlY3V0YWJsZQorICovCisKKyNpZiBkZWZpbmVkKF9XSU5ET1dTKQorI2RlZmluZSBTQ1JJUFRfU1VGRklYIEwiLXNjcmlwdC5weXciCisjZWxzZQorI2RlZmluZSBTQ1JJUFRfU1VGRklYIEwiLXNjcmlwdC5weSIKKyNlbmRpZgorCitzdGF0aWMgd2NoYXJfdCB3cmFwcGVkX3NjcmlwdF9wYXRoW01BWF9QQVRIXTsKKworLyogTG9jYXRlIHRoZSBzY3JpcHQgYmVpbmcgd3JhcHBlZC4KKyAqCisgKiBUaGlzIGNvZGUgc2hvdWxkIHN0b3JlIHRoZSBuYW1lIG9mIHRoZSB3cmFwcGVkIHNjcmlwdCBpbgorICogd3JhcHBlZF9zY3JpcHRfcGF0aCwgb3IgdGVybWluYXRlIHRoZSBwcm9ncmFtIHdpdGggYW4gZXJyb3IgaWYgdGhlcmUgaXMgbm8KKyAqIHZhbGlkIHdyYXBwZWQgc2NyaXB0IGZpbGUuCisgKi8KK3N0YXRpYyB2b2lkCitsb2NhdGVfd3JhcHBlZF9zY3JpcHQoKQoreworICAgIHdjaGFyX3QgKiBwOworICAgIHNpemVfdCBwbGVuOworICAgIERXT1JEIGF0dHJzOworCisgICAgcGxlbiA9IEdldE1vZHVsZUZpbGVOYW1lVyhOVUxMLCB3cmFwcGVkX3NjcmlwdF9wYXRoLCBNQVhfUEFUSCk7CisgICAgcCA9IHdjc3JjaHIod3JhcHBlZF9zY3JpcHRfcGF0aCwgTCcuJyk7CisgICAgaWYgKHAgPT0gTlVMTCkgeworICAgICAgICBkZWJ1ZyhMIkdldE1vZHVsZUZpbGVOYW1lVyByZXR1cm5lZCB2YWx1ZSBoYXMgbm8gZXh0ZW5zaW9uOiAlc1xuIiwKKyAgICAgICAgICAgICAgd3JhcHBlZF9zY3JpcHRfcGF0aCk7CisgICAgICAgIGVycm9yKFJDX05PX1NDUklQVCwgTCJXcmFwcGVyIG5hbWUgJyVzJyBpcyBub3QgdmFsaWQuIiwgd3JhcHBlZF9zY3JpcHRfcGF0aCk7CisgICAgfQorCisgICAgd2NzbmNweV9zKHAsIE1BWF9QQVRIIC0gKHAgLSB3cmFwcGVkX3NjcmlwdF9wYXRoKSArIDEsIFNDUklQVF9TVUZGSVgsIF9UUlVOQ0FURSk7CisgICAgYXR0cnMgPSBHZXRGaWxlQXR0cmlidXRlc1cod3JhcHBlZF9zY3JpcHRfcGF0aCk7CisgICAgaWYgKGF0dHJzID09IElOVkFMSURfRklMRV9BVFRSSUJVVEVTKSB7CisgICAgICAgIGRlYnVnKEwiRmlsZSAnJXMnIG5vbi1leGlzdGVudFxuIiwgd3JhcHBlZF9zY3JpcHRfcGF0aCk7CisgICAgICAgIGVycm9yKFJDX05PX1NDUklQVCwgTCJTY3JpcHQgZmlsZSAnJXMnIGlzIG5vdCBwcmVzZW50LiIsIHdyYXBwZWRfc2NyaXB0X3BhdGgpOworICAgIH0KKworICAgIGRlYnVnKEwiVXNpbmcgd3JhcHBlZCBzY3JpcHQgZmlsZSAnJXMnXG4iLCB3cmFwcGVkX3NjcmlwdF9wYXRoKTsKK30KKyNlbmRpZgorCiAvKgogICogUHJvY2VzcyBjcmVhdGlvbiBjb2RlCiAgKi8KQEAgLTU1MCw3ICs2MTQsNyBAQAogICAgICAgICBlcnJvcihSQ19DUkVBVEVfUFJPQ0VTUywgTCJVbmFibGUgdG8gY3JlYXRlIHByb2Nlc3MgdXNpbmcgJyVzJyIsIGNtZGxpbmUpOwogICAgIEFzc2lnblByb2Nlc3NUb0pvYk9iamVjdChqb2IsIHBpLmhQcm9jZXNzKTsKICAgICBDbG9zZUhhbmRsZShwaS5oVGhyZWFkKTsKLSAgICBXYWl0Rm9yU2luZ2xlT2JqZWN0KHBpLmhQcm9jZXNzLCBJTkZJTklURSk7CisgICAgV2FpdEZvclNpbmdsZU9iamVjdEV4KHBpLmhQcm9jZXNzLCBJTkZJTklURSwgRkFMU0UpOwogICAgIG9rID0gR2V0RXhpdENvZGVQcm9jZXNzKHBpLmhQcm9jZXNzLCAmcmMpOwogICAgIGlmICghb2spCiAgICAgICAgIGVycm9yKFJDX0NSRUFURV9QUk9DRVNTLCBMIkZhaWxlZCB0byBnZXQgZXhpdCBjb2RlIG9mIHByb2Nlc3MiKTsKQEAgLTU5NSwxMiArNjU5LDE3IEBACiAgICAgfQogfQogCi1zdGF0aWMgd2NoYXJfdCAqIGJ1aWx0aW5fdmlydHVhbF9wYXRocyBbXSA9IHsKLSAgICBMIi91c3IvYmluL2VudiBweXRob24iLAotICAgIEwiL3Vzci9iaW4vcHl0aG9uIiwKLSAgICBMIi91c3IvbG9jYWwvYmluL3B5dGhvbiIsCi0gICAgTCJweXRob24iLAotICAgIE5VTEwKK3R5cGVkZWYgc3RydWN0IHsKKyAgICB3Y2hhcl90ICpzaGViYW5nOworICAgIEJPT0wgc2VhcmNoOworfSBTSEVCQU5HOworCitzdGF0aWMgU0hFQkFORyBidWlsdGluX3ZpcnR1YWxfcGF0aHMgW10gPSB7CisgICAgeyBMIi91c3IvYmluL2VudiBweXRob24iLCBUUlVFIH0sCisgICAgeyBMIi91c3IvYmluL3B5dGhvbiIsIEZBTFNFIH0sCisgICAgeyBMIi91c3IvbG9jYWwvYmluL3B5dGhvbiIsIEZBTFNFIH0sCisgICAgeyBMInB5dGhvbiIsIEZBTFNFIH0sCisgICAgeyBOVUxMLCBGQUxTRSB9LAogfTsKIAogLyogRm9yIG5vdywgYSBzdGF0aWMgYXJyYXkgb2YgY29tbWFuZHMuICovCkBAIC03NzYsMTAgKzg0NSwxMCBAQAogCiBzdGF0aWMgQk9PTAogcGFyc2Vfc2hlYmFuZyh3Y2hhcl90ICogc2hlYmFuZ19saW5lLCBpbnQgbmNoYXJzLCB3Y2hhcl90ICoqIGNvbW1hbmQsCi0gICAgICAgICAgICAgIHdjaGFyX3QgKiogc3VmZml4KQorICAgICAgICAgICAgICB3Y2hhcl90ICoqIHN1ZmZpeCwgQk9PTCAqc2VhcmNoKQogewogICAgIEJPT0wgcmMgPSBGQUxTRTsKLSAgICB3Y2hhcl90ICoqIHZwcDsKKyAgICBTSEVCQU5HICogdnBwOwogICAgIHNpemVfdCBwbGVuOwogICAgIHdjaGFyX3QgKiBwOwogICAgIHdjaGFyX3QgemFwcGVkOwpAQCAtNzg5LDE1ICs4NTgsMTcgQEAKIAogICAgICpjb21tYW5kID0gTlVMTDsgICAgLyogZmFpbHVyZSByZXR1cm4gKi8KICAgICAqc3VmZml4ID0gTlVMTDsKKyAgICAqc2VhcmNoID0gRkFMU0U7CiAKICAgICBpZiAoKCpzaGViYW5nX2xpbmUrKyA9PSBMJyMnKSAmJiAoKnNoZWJhbmdfbGluZSsrID09IEwnIScpKSB7CiAgICAgICAgIHNoZWJhbmdfbGluZSA9IHNraXBfd2hpdGVzcGFjZShzaGViYW5nX2xpbmUpOwogICAgICAgICBpZiAoKnNoZWJhbmdfbGluZSkgewogICAgICAgICAgICAgKmNvbW1hbmQgPSBzaGViYW5nX2xpbmU7Ci0gICAgICAgICAgICBmb3IgKHZwcCA9IGJ1aWx0aW5fdmlydHVhbF9wYXRoczsgKnZwcDsgKyt2cHApIHsKLSAgICAgICAgICAgICAgICBwbGVuID0gd2NzbGVuKCp2cHApOwotICAgICAgICAgICAgICAgIGlmICh3Y3NuY21wKHNoZWJhbmdfbGluZSwgKnZwcCwgcGxlbikgPT0gMCkgeworICAgICAgICAgICAgZm9yICh2cHAgPSBidWlsdGluX3ZpcnR1YWxfcGF0aHM7IHZwcC0+c2hlYmFuZzsgKyt2cHApIHsKKyAgICAgICAgICAgICAgICBwbGVuID0gd2NzbGVuKHZwcC0+c2hlYmFuZyk7CisgICAgICAgICAgICAgICAgaWYgKHdjc25jbXAoc2hlYmFuZ19saW5lLCB2cHAtPnNoZWJhbmcsIHBsZW4pID09IDApIHsKICAgICAgICAgICAgICAgICAgICAgcmMgPSBUUlVFOworICAgICAgICAgICAgICAgICAgICAqc2VhcmNoID0gdnBwLT5zZWFyY2g7CiAgICAgICAgICAgICAgICAgICAgIC8qIFdlIGNhbiBkbyB0aGlzIGJlY2F1c2UgYWxsIGJ1aWx0aW4gY29tbWFuZHMgY29udGFpbgogICAgICAgICAgICAgICAgICAgICAgKiAicHl0aG9uIi4KICAgICAgICAgICAgICAgICAgICAgICovCkBAIC04MDUsNyArODc2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCp2cHAgPT0gTlVMTCkgeworICAgICAgICAgICAgaWYgKHZwcC0+c2hlYmFuZyA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAgICAgKiBOb3QgZm91bmQgaW4gYnVpbHRpbnMgLSBsb29rIGluIGN1c3RvbWl6ZWQgY29tbWFuZHMuCiAgICAgICAgICAgICAgICAgICoKQEAgLTg1Niw3ICs5MjcsNyBAQAogfSBCT007CiAKIC8qCi0gKiBTdHJpY3RseSwgd2UgZG9uJ3QgbmVlZCB0byBoYW5kbGUgVVRGLTE2IGFuZiBVVEYtMzIsIHNpbmNlIFB5dGhvbiBpdHNlbGYKKyAqIFN0cmljdGx5LCB3ZSBkb24ndCBuZWVkIHRvIGhhbmRsZSBVVEYtMTYgYW5kIFVURi0zMiwgc2luY2UgUHl0aG9uIGl0c2VsZgogICogZG9lc24ndC4gTmV2ZXIgbWluZCwgb25lIGRheSBpdCBtaWdodCAtIHRoZXJlJ3Mgbm8gaGFybSBsZWF2aW5nIGl0IGluLgogICovCiBzdGF0aWMgQk9NIEJPTXNbXSA9IHsKQEAgLTEwMTIsOCArMTA4MywxMCBAQAogICAgIGludCBpLCBqLCBuY2hhcnMgPSAwOwogICAgIGludCBoZWFkZXJfbGVuOwogICAgIEJPT0wgaXNfdmlydDsKKyAgICBCT09MIHNlYXJjaDsKICAgICB3Y2hhcl90ICogY29tbWFuZDsKICAgICB3Y2hhcl90ICogc3VmZml4OworICAgIENPTU1BTkQgKmNtZCA9IE5VTEw7CiAgICAgSU5TVEFMTEVEX1BZVEhPTiAqIGlwOwogCiAgICAgaWYgKHJjID09IDApIHsKQEAgLTExMjUsNyArMTE5OCw3IEBACiAgICAgICAgICAgICBpZiAobmNoYXJzID4gMCkgewogICAgICAgICAgICAgICAgIHNoZWJhbmdfbGluZVstLW5jaGFyc10gPSBMJ1wwJzsKICAgICAgICAgICAgICAgICBpc192aXJ0ID0gcGFyc2Vfc2hlYmFuZyhzaGViYW5nX2xpbmUsIG5jaGFycywgJmNvbW1hbmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN1ZmZpeCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN1ZmZpeCwgJnNlYXJjaCk7CiAgICAgICAgICAgICAgICAgaWYgKGNvbW1hbmQgIT0gTlVMTCkgewogICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhMInBhcnNlX3NoZWJhbmc6IGZvdW5kIGNvbW1hbmQ6ICVzXG4iLCBjb21tYW5kKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc192aXJ0KSB7CkBAIC0xMTQxLDYgKzEyMTQsMjMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcihSQ19CQURfVklSVFVBTF9QQVRILCBMIlVua25vd24gdmlydHVhbCBcCiBwYXRoICclcyciLCBjb21tYW5kKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgKz0gNjsgICAvKiBza2lwIHBhc3QgInB5dGhvbiIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWFyY2ggJiYgKCgqY29tbWFuZCA9PSBMJ1wwJykgfHwgaXNzcGFjZSgqY29tbWFuZCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ29tbWFuZCBpcyBlbGlnaWJsZSBmb3IgcGF0aCBzZWFyY2gsIGFuZCB0aGVyZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGlzIG5vIHZlcnNpb24gc3BlY2lmaWNhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhMInNlYXJjaGluZyBQQVRIIGZvciBweXRob24gZXhlY3V0YWJsZVxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kID0gZmluZF9vbl9wYXRoKFBZVEhPTl9FWEVDVVRBQkxFKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhMIlB5dGhvbiBvbiBwYXRoOiAlc1xuIiwgY21kID8gY21kLT52YWx1ZSA6IEwiPG5vdCBmb3VuZD4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY21kKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKEwibG9jYXRlZCBweXRob24gb24gUEFUSDogJXNcbiIsIGNtZC0+dmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnZva2VfY2hpbGQoY21kLT52YWx1ZSwgc3VmZml4LCBjbWRsaW5lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRXhpdCBoZXJlLCBhcyB3ZSBoYXZlIGZvdW5kIHRoZSBjb21tYW5kICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRkFMTCBUSFJPVUdIOiBObyBweXRob24gZm91bmQgb24gUEFUSCwgc28gZmFsbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGJhY2sgdG8gbG9jYXRpbmcgdGhlIGNvcnJlY3QgaW5zdGFsbGVkIHB5dGhvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgqY29tbWFuZCAmJiAhdmFsaWRhdGVfdmVyc2lvbihjb21tYW5kKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcihSQ19CQURfVklSVFVBTF9QQVRILCBMIkludmFsaWQgdmVyc2lvbiBcCiBzcGVjaWZpY2F0aW9uOiAnJXMnLlxuSW4gdGhlIGZpcnN0IGxpbmUgb2YgdGhlIHNjcmlwdCwgJ3B5dGhvbicgbmVlZHMgdG8gYmUgXApAQCAtMTIyMyw2ICsxMzEzLDEyIEBACiAgICAgdm9pZCAqIHZlcnNpb25fZGF0YTsKICAgICBWU19GSVhFREZJTEVJTkZPICogZmlsZV9pbmZvOwogICAgIFVJTlQgYmxvY2tfc2l6ZTsKKyAgICBpbnQgaW5kZXg7CisjaWYgZGVmaW5lZChTQ1JJUFRfV1JBUFBFUikKKyAgICBpbnQgbmV3bGVuOworICAgIHdjaGFyX3QgKiBuZXdjb21tYW5kOworICAgIHdjaGFyX3QgKiBhdlsyXTsKKyNlbmRpZgogCiAgICAgd3AgPSBnZXRfZW52KEwiUFlMQVVOQ0hfREVCVUciKTsKICAgICBpZiAoKHdwICE9IE5VTEwpICYmICgqd3AgIT0gTCdcMCcpKQpAQCAtMTI3MSw4ICsxMzY3LDggQEAKICAgICAgICAgICAgIGlmICghdmFsaWQpCiAgICAgICAgICAgICAgICAgZGVidWcoTCJHZXRGaWxlVmVyc2lvbkluZm8gZmFpbGVkOiAlWFxuIiwgR2V0TGFzdEVycm9yKCkpOwogICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgdmFsaWQgPSBWZXJRdWVyeVZhbHVlVyh2ZXJzaW9uX2RhdGEsIEwiXFwiLCAmZmlsZV9pbmZvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJsb2NrX3NpemUpOworICAgICAgICAgICAgICAgIHZhbGlkID0gVmVyUXVlcnlWYWx1ZVcodmVyc2lvbl9kYXRhLCBMIlxcIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChMUFZPSUQgKikgJmZpbGVfaW5mbywgJmJsb2NrX3NpemUpOwogICAgICAgICAgICAgICAgIGlmICghdmFsaWQpCiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKEwiVmVyUXVlcnlWYWx1ZSBmYWlsZWQ6ICVYXG4iLCBHZXRMYXN0RXJyb3IoKSk7CiAgICAgICAgICAgICAgICAgZWxzZSB7CkBAIC0xMzAyLDcgKzEzOTgsNDAgQEAKICAgICB9CiAKICAgICBjb21tYW5kID0gc2tpcF9tZShHZXRDb21tYW5kTGluZVcoKSk7Ci0gICAgZGVidWcoTCJDYWxsZWQgd2l0aCBjb21tYW5kIGxpbmU6ICVzIiwgY29tbWFuZCk7CisgICAgZGVidWcoTCJDYWxsZWQgd2l0aCBjb21tYW5kIGxpbmU6ICVzXG4iLCBjb21tYW5kKTsKKworI2lmIGRlZmluZWQoU0NSSVBUX1dSQVBQRVIpCisgICAgLyogVGhlIGxhdW5jaGVyIGlzIGJlaW5nIHVzZWQgaW4gInNjcmlwdCB3cmFwcGVyIiBtb2RlLgorICAgICAqIFRoZXJlIHNob3VsZCB0aGVyZWZvcmUgYmUgYSBQeXRob24gc2NyaXB0IG5hbWVkIDxleGVuYW1lPi1zY3JpcHQucHkgaW4KKyAgICAgKiB0aGUgc2FtZSBkaXJlY3RvcnkgYXMgdGhlIGxhdW5jaGVyIGV4ZWN1dGFibGUuCisgICAgICogUHV0IHRoZSBzY3JpcHQgbmFtZSBpbnRvIGFyZ3YgYXMgdGhlIGZpcnN0IChzY3JpcHQgbmFtZSkgYXJndW1lbnQuCisgICAgICovCisKKyAgICAvKiBHZXQgdGhlIHdyYXBwZWQgc2NyaXB0IG5hbWUgLSBpZiB0aGUgc2NyaXB0IGlzIG5vdCBwcmVzZW50LCB0aGlzIHdpbGwKKyAgICAgKiB0ZXJtaW5hdGUgdGhlIHByb2dyYW0gd2l0aCBhbiBlcnJvci4KKyAgICAgKi8KKyAgICBsb2NhdGVfd3JhcHBlZF9zY3JpcHQoKTsKKworICAgIC8qIEFkZCB0aGUgd3JhcHBlZCBzY3JpcHQgdG8gdGhlIHN0YXJ0IG9mIGNvbW1hbmQgKi8KKyAgICBuZXdsZW4gPSB3Y3NsZW4od3JhcHBlZF9zY3JpcHRfcGF0aCkgKyB3Y3NsZW4oY29tbWFuZCkgKyAyOyAvKiAnICcgKyBOVUwgKi8KKyAgICBuZXdjb21tYW5kID0gbWFsbG9jKHNpemVvZih3Y2hhcl90KSAqIG5ld2xlbik7CisgICAgaWYgKCFuZXdjb21tYW5kKSB7CisgICAgICAgIGVycm9yKFJDX05PX01FTU9SWSwgTCJDb3VsZCBub3QgYWxsb2NhdGUgbmV3IGNvbW1hbmQgbGluZSIpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgd2NzY3B5X3MobmV3Y29tbWFuZCwgbmV3bGVuLCB3cmFwcGVkX3NjcmlwdF9wYXRoKTsKKyAgICAgICAgd2NzY2F0X3MobmV3Y29tbWFuZCwgbmV3bGVuLCBMIiAiKTsKKyAgICAgICAgd2NzY2F0X3MobmV3Y29tbWFuZCwgbmV3bGVuLCBjb21tYW5kKTsKKyAgICAgICAgZGVidWcoTCJSdW5uaW5nIHdyYXBwZWQgc2NyaXB0IHdpdGggY29tbWFuZCBsaW5lICclcydcbiIsIG5ld2NvbW1hbmQpOworICAgICAgICByZWFkX2NvbW1hbmRzKCk7CisgICAgICAgIGF2WzBdID0gd3JhcHBlZF9zY3JpcHRfcGF0aDsKKyAgICAgICAgYXZbMV0gPSBOVUxMOworICAgICAgICBtYXliZV9oYW5kbGVfc2hlYmFuZyhhdiwgbmV3Y29tbWFuZCk7CisgICAgICAgIC8qIFJldHVybnMgaWYgbm8gc2hlYmFuZyBsaW5lIC0gcGFzcyB0byBkZWZhdWx0IHByb2Nlc3NpbmcgKi8KKyAgICAgICAgY29tbWFuZCA9IG5ld2NvbW1hbmQ7CisgICAgICAgIHZhbGlkID0gRkFMU0U7CisgICAgfQorI2Vsc2UKICAgICBpZiAoYXJnYyA8PSAxKSB7CiAgICAgICAgIHZhbGlkID0gRkFMU0U7CiAgICAgICAgIHAgPSBOVUxMOwpAQCAtMTMxMCwxMyArMTQzOSw2IEBACiAgICAgZWxzZSB7CiAgICAgICAgIHAgPSBhcmd2WzFdOwogICAgICAgICBwbGVuID0gd2NzbGVuKHApOwotICAgICAgICBpZiAocFswXSAhPSBMJy0nKSB7Ci0gICAgICAgICAgICByZWFkX2NvbW1hbmRzKCk7Ci0gICAgICAgICAgICBtYXliZV9oYW5kbGVfc2hlYmFuZygmYXJndlsxXSwgY29tbWFuZCk7Ci0gICAgICAgIH0KLSAgICAgICAgLyogTm8gZmlsZSB3aXRoIHNoZWJhbmcsIG9yIGFuIHVucmVjb2duaXNlZCBzaGViYW5nLgotICAgICAgICAgKiBJcyB0aGUgZmlyc3QgYXJnIGEgc3BlY2lhbCB2ZXJzaW9uIHF1YWxpZmllcj8KLSAgICAgICAgICovCiAgICAgICAgIHZhbGlkID0gKCpwID09IEwnLScpICYmIHZhbGlkYXRlX3ZlcnNpb24oJnBbMV0pOwogICAgICAgICBpZiAodmFsaWQpIHsKICAgICAgICAgICAgIGlwID0gbG9jYXRlX3B5dGhvbigmcFsxXSk7CkBAIC0xMzI2LDcgKzE0NDgsMTkgQEAKICAgICAgICAgICAgIGNvbW1hbmQgKz0gd2NzbGVuKHApOwogICAgICAgICAgICAgY29tbWFuZCA9IHNraXBfd2hpdGVzcGFjZShjb21tYW5kKTsKICAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGZvciAoaW5kZXggPSAxOyBpbmRleCA8IGFyZ2M7ICsraW5kZXgpIHsKKyAgICAgICAgICAgICAgICBpZiAoKmFyZ3ZbaW5kZXhdICE9IEwnLScpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGluZGV4IDwgYXJnYykgeworICAgICAgICAgICAgICAgIHJlYWRfY29tbWFuZHMoKTsKKyAgICAgICAgICAgICAgICBtYXliZV9oYW5kbGVfc2hlYmFuZygmYXJndltpbmRleF0sIGNvbW1hbmQpOworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQorI2VuZGlmCisKICAgICBpZiAoIXZhbGlkKSB7CiAgICAgICAgIGlwID0gbG9jYXRlX3B5dGhvbihMIiIpOwogICAgICAgICBpZiAoaXAgPT0gTlVMTCkKQEAgLTEzNDQsNyArMTQ3OCw3IEBACiAgICAgICAgICAgICBmd3ByaW50ZihzdGRvdXQsIEwiXAogUHl0aG9uIExhdW5jaGVyIGZvciBXaW5kb3dzIFZlcnNpb24gJXNcblxuIiwgdmVyc2lvbl90ZXh0KTsKICAgICAgICAgICAgIGZ3cHJpbnRmKHN0ZG91dCwgTCJcCi11c2FnZTogJXMgWyBsYXVuY2hlci1hcmd1bWVudHMgXSBzY3JpcHQgWyBzY3JpcHQtYXJndW1lbnRzIF1cblxuIiwgYXJndlswXSk7Cit1c2FnZTogJXMgWyBsYXVuY2hlci1hcmd1bWVudHMgXSBbIHB5dGhvbi1hcmd1bWVudHMgXSBzY3JpcHQgWyBzY3JpcHQtYXJndW1lbnRzIF1cblxuIiwgYXJndlswXSk7CiAgICAgICAgICAgICBmcHV0d3MoTCJcCiBMYXVuY2hlciBhcmd1bWVudHM6XG5cblwKIC0yICAgICA6IExhdW5jaCB0aGUgbGF0ZXN0IFB5dGhvbiAyLnggdmVyc2lvblxuXApkaWZmIC0tZ2l0IGEvUEMvbXN2Y3J0bW9kdWxlLmMgYi9QQy9tc3ZjcnRtb2R1bGUuYwppbmRleCAwNGQyMDg4Li4xOGRlYzZkIDEwMDY0NAotLS0gYS9QQy9tc3ZjcnRtb2R1bGUuYworKysgYi9QQy9tc3ZjcnRtb2R1bGUuYwpAQCAtMTEzLDExICsxMTMsMTIgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBtc3ZjcnRfb3Blbl9vc2ZoYW5kbGUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIGxvbmcgaGFuZGxlOworICAgIFB5X2ludHB0cl90IGhhbmRsZTsKICAgICBpbnQgZmxhZ3M7CiAgICAgaW50IGZkOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJsaTpvcGVuX29zZmhhbmRsZSIsICZoYW5kbGUsICZmbGFncykpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIF9QeV9QQVJTRV9JTlRQVFIgImk6b3Blbl9vc2ZoYW5kbGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAmaGFuZGxlLCAmZmxhZ3MpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGZkID0gX29wZW5fb3NmaGFuZGxlKGhhbmRsZSwgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvUEMvb3MyZW14L01ha2VmaWxlIGIvUEMvb3MyZW14L01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MDA2MTBlLi4wMDAwMDAwCi0tLSBhL1BDL29zMmVteC9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDY3MiArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyM9PT09PT09PT09PT09PT09PT0tLS0tLS0tLS0tLS0tLS0tCi0jCi0jIFRvcC1MZXZlbCBNYWtlZmlsZSBmb3IgQnVpbGRpbmcgUHl0aG9uIDIuNiBmb3IgT1MvMiB1c2luZyBHQ0MvRU1YCi0jIE9yaWdpbmFsbHkgd3JpdHRlbiBieSBBbmRyZXcgWmFib2xvdG55LCA8Yml0QGVsdGVjaC5ydT4gZm9yIFB5dGhvbiAxLjUuMgotIyBNb2RpZmllZCBieSBBbmRyZXcgTWFjSW50eXJlLCA8YW5keW1hY0BwY3VnLm9yZy5hdT4gZm9yIFB5dGhvbiAyLjYKLSMKLSMgVGhpcyBtYWtlZmlsZSB3YXMgZGV2ZWxvcGVkIGZvciB1c2Ugd2l0aCBbUF1HQ0MvRU1YIGNvbXBpbGVyIGFueQotIyB2ZXJzaW9uIGFuZCBHTlUgTWFrZS4KLSMKLSMgVGhlIG91dHB1dCBvZiB0aGUgYnVpbGQgaXMgYSBsYXJnaXNoIFB5dGhvbjI2LkRMTCBjb250YWluaW5nIHRoZQotIyBlc3NlbnRpYWwgbW9kdWxlcyBvZiBQeXRob24gYW5kIGEgc21hbGwgUHl0aG9uLmV4ZSBwcm9ncmFtIHRvIHN0YXJ0Ci0jIHRoZSBpbnRlcnByZXRlci4gV2hlbiBlbWJlZGRpbmcgUHl0aG9uIHdpdGhpbiBhbm90aGVyIHByb2dyYW0sIG9ubHkKLSMgUHl0aG9uMjYuRExMIGlzIG5lZWRlZC4gV2UgYWxzbyBidWlsZCBweXRob25fcy5hIHN0YXRpYyBsaWJyYXJ5ICh3aGljaAotIyBjYW4gYmUgY29udmVydGVkIGludG8gT01GICgubGliKSBmb3JtYXQgdXNpbmcgZW14b21mIHRvb2wpIGFuZCBib3RoCi0jIHB5dGhvbi5hIGFuZCBweXRob24ubGliIGltcG9ydCBsaWJyYXJpZXMuICBUaGVuIHRoZSBvcHRpb25hbCAKLSMgZXh0ZW5zaW9uIG1vZHVsZXMsIHdoaWNoIGFyZSBPUy8yIERMTHMgcmVuYW1lZCB3aXRoIGEgUFlEIGZpbGUgZXh0ZW5zaW9uLgotIwotIyBSZWNvbW1lbmRlZCBidWlsZCBvcmRlcjoKLSMgICBtYWtlIGRlcGVuZAkJKGlmIHlvdSBoYXZlIG1ha2VkZXApCi0jICAgbWFrZSBhbGwKLSMgICBtYWtlIGx4CQkoaWYgeW91IGhhdmUgbHhsaXRlKQotIyAgIG1ha2UgdGVzdAkJKG9wdGlvbmFsKQotIwotIyMjIyMjIyMjIyMjIyMjIyMjIyMjPT09PT09PT09PT09PT09PT09LS0tLS0tLS0tLS0tLS0tLQotCi0jID09PSBDb21waWxhdGlvbiBtb2RlOiBkZWJ1ZyBvciByZWxlYXNlID09PQotTU9ERT0JCW9wdGltaXplCi0jTU9ERT0JCWRlYnVnCi0jID09PSBBc3NlcnQoKSBlbmFibGVkID09PQotQVNTRVJUSU9OUz1ubwotI0FTU0VSVElPTlM9eWVzCi0jID09PSBIYXJkLXdpcmUgaW5zdGFsbGF0aW9uIGxvY2F0aW9uID09PQotRklYRURfUFlIT01FPW5vCi0jRklYRURfUFlIT01FPXllcwotCi0jID09PSBPcHRpb25hbCBtb2R1bGVzID09PQotIyBEbyB5b3UgaGF2ZSB0aGUgSW5mb1ppcCBjb21wcmVzc2lvbiBsaWJyYXJ5IGluc3RhbGxlZD8KLUhBVkVfWkxJQj0Jbm8KLSMgRG8geW91IGhhdmUgdGhlIFVsdHJhIEZhc3QgQ3J5cHQgKFVGQykgbGlicmFyeSBpbnN0YWxsZWQ/Ci1IQVZFX1VGQz0Jbm8KLSMgRG8geW91IGhhdmUgdGhlIFRjbC9UayBsaWJyYXJ5IGluc3RhbGxlZD8KLUhBVkVfVENMVEs9CW5vCi0jIERvIHlvdSBoYXZlIHRoZSBHTlUgcmVhZGxpbmUgbGlicmFyeSBpbnN0YWxsZWQ/Ci0jIE5PVEU6IEknbSB1c2luZyBhIG1vZGlmaWVkIHZlcnNpb24gb2YgS2FpIFV3ZSBSb21tZWwncyBwb3J0IHRoYXQgCi0jICAgICAgIC0gaXMgY29tcGlsZWQgd2l0aCBtdWx0aXRocmVhZGluZyBlbmFibGVkCi0jICAgICAgIC0gaXMgbGlua2VkIHN0YXRpY2FsbHkKLSMgICAgICAgSSBoYXZlIGhhZCBubyBzdWNjZXNzIHRyeWluZyB0byB1c2UgYSBETEwgdmVyc2lvbiwgZXZlbiB3aGVuCi0jICAgICAgIGNvbXBpbGVkIHdpdGggbXVsdGl0aHJlYWRpbmcgZW5hYmxlZC4KLUhBVkVfR1JFQURMSU5FPQlubwotIyBEbyB5b3UgaGF2ZSB0aGUgQlNEIERCIGxpYnJhcnkgKHYxLjg1KSBhcyBpbmNsdWRlZCBpbiB0aGUgRU1YQlNEIHBhY2thZ2U/Ci0jIE5PVEU6IHRoaXMgbGlicmFyeSBuZWVkcyB0byBiZSByZWNvbXBpbGVkIHdpdGggYSBzdHJ1Y3R1cmUgbWVtYmVyCi0jICAgICAgIHJlbmFtZWQgdG8gYXZvaWQgcHJvYmxlbXMgd2l0aCB0aGUgbXVsdGl0aHJlYWRlZCBlcnJubyBzdXBwb3J0Ci0jICAgICAgICh0aGVyZSBpcyBhIHN0cnVjdHVyZSBtZW1iZXIgY2FsbGVkIGVycm5vLCB1c2VkIGZvciBzaGFkb3dpbmcgdGhlCi0jICAgICAgIHJlYWwgZXJybm8sIHdoaWNoIGNvbmZsaWN0cyB3aXRoIHRoZSBlcnJubyByZWRlZmluaXRpb24gb2YgLVptdCkKLUhBVkVfQlNEREI9CW5vCi0jIERvIHlvdSBoYXZlIHRoZSBuY3Vyc2VzIGxpYnJhcnkgaW5zdGFsbGVkPyBFTVgncyBCU0QgY3Vyc2VzIGFyZW4ndCBlbm91Z2ghIAotSEFWRV9OQ1VSU0VTPQlubwotIyBEbyB5b3UgaGF2ZSB0aGUgR0RCTSBsaWJyYXJ5IGluc3RhbGxlZD8KLUhBVkVfR0RCTT0Jbm8KLSMgRG8geW91IGhhdmUgdGhlIEJaMiBjb21wcmVzc2lvbiBsaWJyYXJ5IGluc3RhbGxlZD8KLUhBVkVfQloyPQlubwotIyBEbyB5b3UgaGF2ZSB0aGUgT3BlblNTTCBsaWJyYXJpZXMgaW5zdGFsbGVkCi1IQVZFX09QRU5TU0w9CW5vCi0KLSMgPT09IGluc3RhbGwgbG9jYXRpb25zID09PQotIyBkZWZhdWx0IHZhbHVlIG9mIFBZVEhPTkhPTUUKLUxJQl9ESVI9QzovUHl0aG9uMjYKLSMgZGVmYXVsdCBpcyB0byBoYXZlIGV2ZXJ5dGhpbmcgaW4gb3IgdW5kZXIgUFlUSE9OSE9NRQotRVhFX0RJUj0kKExJQl9ESVIpCi1ETExfRElSPSQoRVhFX0RJUikKLQotCi0jID09PSBUaGUgVG9vbHMgPT09Ci1DQz0JCWdjYwotQ0ZMQUdTPQkJLVptdCAtV2FsbCAkKElOQ0xVREUpCi1DRkxBR1MuTElCPQkkKENGTEFHUykKLUxEPQkJZ2NjCi1MREZMQUdTPQktWm10IC1aY3J0ZGxsIC1MLiAtbGdjYwotTERGTEFHUy5FWEU9CSQoTERGTEFHUykKLUxERkxBR1MuRExMPQkkKExERkxBR1MpIC1aZGxsCi1MREZMQUdTLkE9CSQoTERGTEFHUykgJChMSUJTKQotQVJGTEFHUz0JY3JzCi1JTVBMSUI9CQllbXhpbXAKLUVYUExJQj0JCWVteGV4cAotRVhFT1BUPQkJZW14YmluZAotUFlfREVGPQkJLURQeV9CVUlMRF9DT1JFCi0KLQotIyBhZGp1c3QgQyBjb21waWxlciBzZXR0aW5ncyBiYXNlZCBvbiBidWlsZCBvcHRpb25zCi1pZmVxICgkKE1PREUpLGRlYnVnKQotICBDRkxBR1MrPQktZyAtTwotICBMREZMQUdTKz0JLWcKLWVsc2UKLSAgQ0ZMQUdTKz0JLXMgLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1tcHJvYmUKLSAgTERGTEFHUys9CS1zCi1lbmRpZgotQ0ZMQUdTKz0JJChQWV9ERUYpCi1pZmVxICgkKEFTU0VSVElPTlMpLG5vKQotICBDRkxBR1MrPQktRE5ERUJVRwotZW5kaWYKLWlmZXEgKCQoRklYRURfUFlIT01FKSx5ZXMpCi0gIENGTEFHUys9CS1EUFJFRklYPSQoRFFVT1RFKSQoTElCX0RJUikkKERRVU9URSkKLWVuZGlmCi0KLSMgV2UncmUgdXNpbmcgdGhlIE9NRiBmb3JtYXQgc2luY2UgRU1YJ3MgbGQgaGFzIGEgb2JzY3VyZSBidWcKLSMgYmVjYXVzZSBvZiB3aGljaCBpdCBzb21ldGltZXMgZmFpbHMgdG8gYnVpbGQgcmVsb2NhdGlvbnMKLSMgaW4gLmRhdGEgc2VnbWVudCB0aGF0IHBvaW50IHRvIGFub3RoZXIgLmRhdGEgbG9jYXRpb25zCi0jIChleGNlcHQgZm9yIHRoZSBmaW5hbCBsaW5raW5nIGlmIHRoZSAuRVhFcykKLU9NRj0JCXllcwotCi0jIGlmIGZvcmsoKSBzdXBwb3J0IGlzIHJlcXVpcmVkLCB0aGUgbWFpbiBleGVjdXRhYmxlIG11c3QgYmUgbGlua2VkIHdpdGggbGQKLUVYRU9NRj0JCW5vCi0KLSMgRmlsZSBleHRlbnNpb25zCi1NT0RVTEUuRVhUPQkucHlkCi1NT0RMSUIuRVhUPQkuZGxsCi1pZmVxICgkKE9NRikseWVzKQotICBPPQkJLm9iagotICBBPQkJLmxpYgotICBBUj0JCWVteG9tZmFyCi0gIENGTEFHUys9CS1ab21mCi0gIExERkxBR1MrPQktWm9tZgotICBpZmVxICgkKE1PREUpLGRlYnVnKQotICAgIEFSRkxBR1M9CS1wNjQgY3JzCi0gIGVsc2UKLSAgICBBUkZMQUdTPQktcDMyIGNycwotICBlbmRpZgotZWxzZQotICBPPQkJLm8KLSAgQT0JCS5hCi0gIEFSPQkJYXIKLWVuZGlmCi0KLQotIyA9PT0gQnVpbGQgdGltZSByZXNvdXJjZSBzZXR0aW5ncyA9PT0KLQotIyBFTVgncyBkZWZhdWx0IG51bWJlciBvZiBmaWxlIGhhbmRsZXMgaXMgNDAsIHdoaWNoIGlzIHNvbWV0aW1lcyBpbnN1ZmZpY2llbnQKLSMgKHRoZSB0ZW1wZmlsZSByZWdyZXNzaW9uIHRlc3QgdHJpZXMgdG8gY3JlYXRlIDEwMCB0ZW1wb3JhcnkgZmlsZXMpCi1ORklMRVM9MjUwCi0KLSMgVGhlIGRlZmF1bHQgc3RhY2sgc2l6ZSBmb3IgY2hpbGQgdGhyZWFkcyBpcyA2NGsgYnl0ZXMsIHdoaWNoIGlzCi0jIGluc3VmZmljaWVudCBmb3Igc29tZSBhcHBsaWNhdGlvbnMgd2hpY2ggZG8gYSBsb3Qgb2Ygd29yayBpbiB0aHJlYWRzCi0jIChzdWNoIGFzIFpvcGUsIGVzcGVjaWFsbHkgaW4gY29uanVuY3Rpb24gd2l0aCBQbG9uZSkuCi0jIE5vdGUgdGhhdCB0aGlzIHNldHRpbmcgaXMgZGlzdGluY3QgZnJvbSB0aGUgc3RhY2sgc2l6ZSBmb3IgdGhlIG1haW4KLSMgdGhyZWFkLCB3aGljaCBpcyBzZXQgdmlhIHRoZSAlLmRlZiBydWxlIGJlbG93LgotIyBFTVggZG9jdW1lbnRzIHRoYXQgdGhlIHRocmVhZCBzdGFjayBzaXplIHNob3VsZCBiZSBhdCBsZWFzdCAzMjc2OCBieXRlczsKLSMgZm9yIFpvcGUvUGxvbmUgYXQgbGVhc3QgMTI4ayBieXRlcyBpcyByZWNvbW1lbmRlZC4KLSMgVW5jb21tZW50ICYgYWRqdXN0IHRoZSBuZXh0IGxpbmUgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgc3RhY2sgc2l6ZToKLSNDRkxBR1MrPQktRFRIUkVBRF9TVEFDS19TSVpFPTB4MjAwMDAKLQotCi0jID09PSBUaGUgZW52aXJvbm1lbnQgPT09Ci0KLSMgU291cmNlIGZpbGUgcGF0aHMKLVNSQ1BBVEg9LjsuLi8uLi9QeXRob247Li4vLi4vUGFyc2VyOy4uLy4uL09iamVjdHM7Li4vLi4vSW5jbHVkZTsuLi8uLi9Nb2R1bGVzCi0jIFB5dGhvbiBjb250YWlucyB0aGUgY2VudHJhbCBjb3JlLCBjb250YWluaW5nIHRoZSBidWlsdGlucyBhbmQgaW50ZXJwcmV0ZXIuCi0jIFBhcnNlciBjb250YWlucyBQeXRob24ncyBJbnRlcm5hbCBQYXJzZXIgYW5kCi0jICAgU3RhbmRhbG9uZSBQYXJzZXIgR2VuZXJhdG9yIFByb2dyYW0gKFNoYXJlcyBTb21lIG9mIFB5dGhvbidzIE1vZHVsZXMpCi0jIE9iamVjdHMgY29udGFpbnMgUHl0aG9uIE9iamVjdCBUeXBlcwotIyBNb2R1bGVzIGNvbnRhaW5zIGV4dGVuc2lvbiBNb2R1bGVzIChCdWlsdC1JbiBvciBhcyBTZXBhcmF0ZSBETExzKQotCi0jIFVuaXggc2hlbGxzIHRlbmQgdG8gdXNlICIkIiBhcyBkZWxpbWl0ZXIgZm9yIHZhcmlhYmxlIG5hbWVzLgotIyBUZXN0IGZvciB0aGlzIGJlaGF2aW91ciBhbmQgc2V0ICQoQlVDSykgdmFyaWFibGUgY29ycmVzcG9uZGlnbHkgLi4uCi1fX1RNUF9fOj0kKHNoZWxsIGVjaG8gJCQkJCkKLWlmZXEgKCQoX19UTVBfXyksJCQkJCkKLSAgQlVDSz0JCSQkCi0gIEJSTz0JCSgKLSAgQlJDPQkJKQotZWxzZQotICBCVUNLPQkJXCQkCi0gIEJSTz0JCVwoCi0gIEJSQz0JCVwpCi1lbmRpZgotIyBDb21wdXRlIHRoZSAiZG91YmxlIHF1b3RlIiB2YXJpYWJsZQotX19UTVBfXzo9JChzaGVsbCBlY2hvICIiKQotaWZlcSAoJChfX1RNUF9fKSwiIikKLSAgRFFVT1RFPQkiCi1lbHNlCi0gIERRVU9URT0JXCIKLWVuZGlmCi0KLSMgSW5jbHVkZSBwYXRocwotI0lOQ0xVREU9CS1JJChzdWJzdCA7LCAtSSwgJChTUkNQQVRIKSkKLUlOQ0xVREU9CS1JLiAtSS4uLy4uL0luY2x1ZGUKLQotIyBQYXRoIHRvIHNlYXJjaCBmb3IgLmMgZmlsZXMKLXZwYXRoICUuYyAuOy4uOyQoU1JDUEFUSCkKLQotIyBUb3Agb2YgdGhlIHBhY2thZ2UgdHJlZQotVE9QPQkJLi4vLi4vCi0KLSMgRGlyZWN0b3J5IGZvciBvdXRwdXQgZmlsZXMKLU9VVEJBU0U9CW91dC8KLU9VVD0JCSQoT1VUQkFTRSkkKE1PREUpLwotCi0jIEFkZGl0aW9uYWwgbGlicmFyaWVzCi1MSUJTPQkJLWxzb2NrZXQKLQotIyBVdGlsaXR5IG1hY3JvOiByZXBsYWNlbWVudCBmb3IgJF4KLV5ePQkJJChmaWx0ZXItb3V0ICUkQSwkXikKLSMgVXNlICQoTF4pIHRvIGxpbmsgd2l0aCBhbGwgbGlicmFyaWVzIHNwZWNpZmllZCBhcyBkZXBlbmRlbmNpZXMKLUxePQkJJChhZGRwcmVmaXggLWwsJChiYXNlbmFtZSAkKG5vdGRpciAkKGZpbHRlciAlJEEsJCspKSkpCi0KLSMgQnVpbGQgcnVsZXMKLSQoT1VUKSUkTzogJS5jCi0JJChDQykgJChDRkxBR1MuTElCKSAtYyAkPCAtbyAkQAotCi0lLmE6Ci0JJChMRCkgJChMREZMQUdTLkEpIC1vICRAICQoXl4pICQoTF4pCi0KLSUuZGxsOgotCSQoTEQpICQoTERGTEFHUy5ETEwpIC1vICRAICQoXl4pICQoTF4pICQoTElCUykKLQotJS5weWQ6ICQoT1VUKSVtb2R1bGUkTyAkKE9VVCklX20uZGVmCi0JJChMRCkgJChMREZMQUdTLkRMTCkgLW8gJEAgJCheXikgJChQWVRIT04uSU1QTElCKSAkKExJQlMpCi0KLSUuZXhlOgotCSQoTEQpICQoTERGTEFHUy5FWEUpIC1vICRAICQoXl4pICQoTF4pCi0KLSVfbS5kZWY6Ci0JQGVjaG8gQ3JlYXRpbmcgLkRFRiBmaWxlOiAkQAotCUBlY2hvIExJQlJBUlkgJChub3RkaXIgJCopIElOSVRJTlNUQU5DRSBURVJNSU5TVEFOQ0UgPiRACi0gICAgICAgIGlmZXEgKCQoREVTQ1JJUFRJT04uJChub3RkaXIgJCopJChNT0RVTEUuRVhUKSksKQotCSAgQGVjaG8gREVTQ1JJUFRJT04gJChEUVVPVEUpUHl0aG9uIHN0YW5kYXJkIG1vZHVsZSAkKG5vdGRpciAkKikkKERRVU9URSkgPj4kQAotICAgICAgICBlbHNlCi0JICBAZWNobyBERVNDUklQVElPTiAkKERRVU9URSkkKERFU0NSSVBUSU9OLiQobm90ZGlyICQqKSQoTU9EVUxFLkVYVCkpJChEUVVPVEUpID4+JEAKLSAgICAgICAgZW5kaWYKLQlAZWNobyBEQVRBIE1VTFRJUExFIE5PTlNIQVJFRCA+PiRACi0JQGVjaG8gRVhQT1JUUyA+PiRACi0JQGVjaG8gCWluaXQkKG5vdGRpciAkKikgPj4kQAotCi0lLmRlZjoKLQlAZWNobyBDcmVhdGluZyAuREVGIGZpbGU6ICRACi0JQGVjaG8gTkFNRSAkKG5vdGRpciAkKikgJChFWEVUWVBFLiQobm90ZGlyICQqKS5leGUpID4kQAotCUBlY2hvIERFU0NSSVBUSU9OICQoRFFVT1RFKSQoREVTQ1JJUFRJT04uJChub3RkaXIgJCopLmV4ZSkkKERRVU9URSkgPj4kQAotCUBlY2hvIFNUQUNLU0laRSAyMDk3MTUyID4+JEAKLQotIyBPdXRwdXQgZmlsZSBuYW1lcwotUFlUSE9OX1ZFUj0JMi42Ci1QWVRIT05fTElCPQlweXRob24zMwotUFlUSE9OLkxJQj0JJChQWVRIT05fTElCKV9zJEEKLVBZVEhPTi5JTVBMSUI9CSQoUFlUSE9OX0xJQikkQQotaWZlcSAoJChFWEVPTUYpLHllcykKLSAgUFlUSE9OLkVYRUlNUD0JJChQWVRIT04uSU1QTElCKQotICBMRE1PREUuRVhFPQkJLVpvbWYKLWVsc2UKLSAgUFlUSE9OLkVYRUlNUD0JJChQWVRIT05fTElCKS5hCi0gIExETU9ERS5FWEUgPSAKLWVuZGlmCi1QWVRIT04uRExMPQkkKFBZVEhPTl9MSUIpLmRsbAotUFlUSE9OLkRFRj0JJChQWVRIT05fTElCKS5kZWYKLVBZVEhPTi5FWEU9CXB5dGhvbi5leGUKLVBZVEhPTlBNLkVYRT0JcHl0aG9ucG0uZXhlCi1QR0VOLkVYRT0JcGdlbi5leGUKLUxJQlJBUlk9CSQoUFlUSE9OLkxJQikKLUxEX0xJQlJBUlk9CSQoUFlUSE9OLklNUExJQikKLQotIyBBZGRpdGlvbmFsIGV4ZWN1dGFibGUgcGFyYW1ldGVycwotRVhFVFlQRS4kKFBZVEhPTi5FWEUpPQkJV0lORE9XQ09NUEFUCi1FWEVUWVBFLiQoUFlUSE9OUE0uRVhFKT0JV0lORE9XQVBJCi1FWEVUWVBFLiQoUEdFTi5FWEUpPQkJV0lORE9XQ09NUEFUCi1ERVNDUklQVElPTi4kKFBZVEhPTi5FWEUpPQlQeXRob24gb2JqZWN0LW9yaWVudGVkIHByb2dyYW1taW5nIGxhbmd1YWdlIGludGVycHJldGVyIGZvciBPUy8yCi1ERVNDUklQVElPTi4kKFBZVEhPTlBNLkVYRSk9CSQoREVTQ1JJUFRJT04uJChQWVRIT04uRVhFKSkKLURFU0NSSVBUSU9OLiQoUEdFTi5FWEUpPQlQeXRob24gb2JqZWN0LW9yaWVudGVkIHByb2dyYW1taW5nIGxhbmd1YWdlIHBhcnNlciBnZW5lcmF0b3IgZm9yIE9TLzIKLQotIyBNb2R1bGUgZGVzY3JpcHRpb25zCi1ERVNDUklQVElPTi56bGliJChNT0RVTEUuRVhUKT0JCVB5dGhvbiBFeHRlbnNpb24gRExMIGZvciBhY2Nlc3NpbmcgdGhlIEluZm9aaXAgY29tcHJlc3Npb24gbGlicmFyeQotREVTQ1JJUFRJT04uY3J5cHQkKE1PRFVMRS5FWFQpPQkJUHl0aG9uIEV4dGVuc2lvbiBETEwgaW1wbGVtZW50aW5nIHRoZSBjcnlwdCQoQlJPKSQoQlJDKSBmdW5jdGlvbgotREVTQ1JJUFRJT04uX3RraW50ZXIkKE1PRFVMRS5FWFQpPQlQeXRob24gRXh0ZW5zaW9uIERMTCBmb3IgYWNjZXNzIHRvIFRjbC9UayBFbnZpcm9ubWVudAotREVTQ1JJUFRJT04ucmVhZGxpbmUkKE1PRFVMRS5FWFQpPQlQeXRob24gRXh0ZW5zaW9uIERMTCBmb3IgYWNjZXNzIHRvIEdOVSBSZWFkTGluZSBsaWJyYXJ5Ci1ERVNDUklQVElPTi5fY3Vyc2VzJChNT0RMSUIuRVhUKT0JUHl0aG9uIEV4dGVuc2lvbiBETEwgZm9yIGFjY2VzcyB0byBuY3Vyc2VzIGxpYnJhcnkKLURFU0NSSVBUSU9OLnB5ZXhwYXQkKE1PRFVMRS5FWFQpPQlQeXRob24gRXh0ZW5zaW9uIERMTCBmb3IgYWNjZXNzIHRvIGV4cGF0IGxpYnJhcnkKLURFU0NSSVBUSU9OLmJ6MiQoTU9EVUxFLkVYVCk9CQlQeXRob24gRXh0ZW5zaW9uIERMTCBmb3IgYWNjZXNzaW5nIHRoZSBiejIgY29tcHJlc3Npb24gbGlicmFyeQotCi0jIFNvdXJjZSBmaWxlcwotU1JDLk9TMkVNWD0JY29uZmlnLmMgZGxmY24uYyBnZXRwYXRocC5jCi1TUkMuTUFJTj0JJChhZGRwcmVmaXggJChUT1ApLCBcCi0JCU1vZHVsZXMvZ2V0YnVpbGRpbmZvLmMgXAotCQlNb2R1bGVzL21haW4uYykKLVNSQy5NT0RVTEVTPQkkKGFkZHByZWZpeCAkKFRPUCksIFwKLQkJTW9kdWxlcy9nY21vZHVsZS5jIFwKLQkJTW9kdWxlcy9zaWduYWxtb2R1bGUuYyBcCi0JCU1vZHVsZXMvcG9zaXhtb2R1bGUuYyBcCi0JCU1vZHVsZXMvX3RocmVhZG1vZHVsZS5jIFwKLQkJTW9kdWxlcy9hcnJheW1vZHVsZS5jIFwKLQkJTW9kdWxlcy9iaW5hc2NpaS5jIFwKLQkJTW9kdWxlcy9jbWF0aG1vZHVsZS5jIFwKLQkJTW9kdWxlcy9fY29kZWNzbW9kdWxlLmMgXAotCQlNb2R1bGVzL2NvbGxlY3Rpb25zbW9kdWxlLmMgXAotCQlNb2R1bGVzL19jc3YuYyBcCi0JCU1vZHVsZXMvZGF0ZXRpbWVtb2R1bGUuYyBcCi0JCU1vZHVsZXMvZXJybm9tb2R1bGUuYyBcCi0JCU1vZHVsZXMvZmNudGxtb2R1bGUuYyBcCi0JCU1vZHVsZXMvX2Z1bmN0b29sc21vZHVsZS5jIFwKLQkJTW9kdWxlcy9faGVhcHFtb2R1bGUuYyBcCi0JCU1vZHVsZXMvaW1hZ2VvcC5jIFwKLQkJTW9kdWxlcy9pdGVydG9vbHNtb2R1bGUuYyBcCi0JCU1vZHVsZXMvX2xvY2FsZW1vZHVsZS5jIFwKLQkJTW9kdWxlcy9tYXRobW9kdWxlLmMgXAotCQlNb2R1bGVzL29wZXJhdG9yLmMgXAotCQlNb2R1bGVzL19yYW5kb21tb2R1bGUuYyBcCi0JCU1vZHVsZXMvc2hhMjU2bW9kdWxlLmMgXAotCQlNb2R1bGVzL3NoYTUxMm1vZHVsZS5jIFwKLQkJTW9kdWxlcy9fc3JlLmMgXAotCQlNb2R1bGVzL19zdHJ1Y3QuYyBcCi0JCU1vZHVsZXMvc3ltdGFibGVtb2R1bGUuYyBcCi0JCU1vZHVsZXMvdGVybWlvcy5jIFwKLQkJTW9kdWxlcy90aW1lbW9kdWxlLmMgXAotCQlNb2R1bGVzL193ZWFrcmVmLmMgXAotCQlNb2R1bGVzL3h4c3VidHlwZS5jIFwKLQkJTW9kdWxlcy96aXBpbXBvcnQuYykKLVNSQy5QQVJTRTE9CSQoYWRkcHJlZml4ICQoVE9QKSwgXAotCQlQYXJzZXIvYWNjZWxlci5jIFwKLQkJUGFyc2VyL2dyYW1tYXIxLmMgXAotCQlQYXJzZXIvbGlzdG5vZGUuYyBcCi0JCVBhcnNlci9ub2RlLmMgXAotCQlQYXJzZXIvcGFyc2VyLmMgXAotCQlQYXJzZXIvcGFyc2V0b2suYyBcCi0JCVBhcnNlci9iaXRzZXQuYyBcCi0JCVBhcnNlci9tZXRhZ3JhbW1hci5jKQotU1JDLlBBUlNFMj0JJChhZGRwcmVmaXggJChUT1ApLCBcCi0JCVBhcnNlci90b2tlbml6ZXIuYyBcCi0JCVBhcnNlci9teXJlYWRsaW5lLmMpCi1TUkMuUEFSU0VSPQkkKFNSQy5QQVJTRTEpIFwKLQkJJChTUkMuUEFSU0UyKQotU1JDLlBZVEhPTj0JJChhZGRwcmVmaXggJChUT1ApLCBcCi0JCVB5dGhvbi9QeXRob24tYXN0LmMgXAotCQlQeXRob24vYXNkbC5jIFwKLQkJUHl0aG9uL2FzdC5jIFwKLQkJUHl0aG9uL2JsdGlubW9kdWxlLmMgXAotCQlQeXRob24vZXhjZXB0aW9ucy5jIFwKLQkJUHl0aG9uL2NldmFsLmMgXAotCQlQeXRob24vY29tcGlsZS5jIFwKLQkJUHl0aG9uL2NvZGVjcy5jIFwKLQkJUHl0aG9uL2R5bmFtaWNfYW5ub3RhdGlvbnMuYyBcCi0JCVB5dGhvbi9lcnJvcnMuYyBcCi0JCVB5dGhvbi9mcm96ZW4uYyBcCi0JCVB5dGhvbi9mcm96ZW5tYWluLmMgXAotCQlQeXRob24vZnV0dXJlLmMgXAotCQlQeXRob24vZ2V0YXJncy5jIFwKLQkJUHl0aG9uL2dldGNvbXBpbGVyLmMgXAotCQlQeXRob24vZ2V0Y29weXJpZ2h0LmMgXAotCQlQeXRob24vZ2V0cGxhdGZvcm0uYyBcCi0JCVB5dGhvbi9nZXR2ZXJzaW9uLmMgXAotCQlQeXRob24vZ3JhbWluaXQuYyBcCi0JCVB5dGhvbi9pbXBvcnQuYyBcCi0JCVB5dGhvbi9pbXBvcnRkbC5jIFwKLQkJUHl0aG9uL21hcnNoYWwuYyBcCi0JCVB5dGhvbi9tb2RzdXBwb3J0LmMgXAotCQlQeXRob24vbXlzbnByaW50Zi5jIFwKLQkJUHl0aG9uL215c3RydG91bC5jIFwKLQkJUHl0aG9uL3B5YXJlbmEuYyBcCi0JCVB5dGhvbi9weWN0eXBlLmMgXAotCQlQeXRob24vcHlmcGUuYyBcCi0JCVB5dGhvbi9weXN0YXRlLmMgXAotCQlQeXRob24vcHlzdHJ0b2QuYyBcCi0JCVB5dGhvbi9weXRob25ydW4uYyBcCi0JCVB5dGhvbi9zdHJ1Y3RtZW1iZXIuYyBcCi0JCVB5dGhvbi9zeW10YWJsZS5jIFwKLQkJUHl0aG9uL3N5c21vZHVsZS5jIFwKLQkJUHl0aG9uL3RyYWNlYmFjay5jIFwKLQkJUHl0aG9uL2dldG9wdC5jIFwKLQkJUHl0aG9uL2R5bmxvYWRfc2hsaWIuYyBcCi0JCVB5dGhvbi90aHJlYWQuYykKLVNSQy5PQkpFQ1Q9CSQoYWRkcHJlZml4ICQoVE9QKSwgXAotCQlPYmplY3RzL2Fic3RyYWN0LmMgXAotCQlPYmplY3RzL2Jvb2xvYmplY3QuYyBcCi0JCU9iamVjdHMvY2VsbG9iamVjdC5jIFwKLQkJT2JqZWN0cy9jbGFzc29iamVjdC5jIFwKLQkJT2JqZWN0cy9jb2JqZWN0LmMgXAotCQlPYmplY3RzL2NvZGVvYmplY3QuYyBcCi0JCU9iamVjdHMvY29tcGxleG9iamVjdC5jIFwKLQkJT2JqZWN0cy9kZXNjcm9iamVjdC5jIFwKLQkJT2JqZWN0cy9kaWN0b2JqZWN0LmMgXAotCQlPYmplY3RzL2VudW1vYmplY3QuYyBcCi0JCU9iamVjdHMvZmlsZW9iamVjdC5jIFwKLQkJT2JqZWN0cy9mbG9hdG9iamVjdC5jIFwKLQkJT2JqZWN0cy9mcmFtZW9iamVjdC5jIFwKLQkJT2JqZWN0cy9mdW5jb2JqZWN0LmMgXAotCQlPYmplY3RzL2dlbm9iamVjdC5jIFwKLQkJT2JqZWN0cy9pdGVyb2JqZWN0LmMgXAotCQlPYmplY3RzL2xpc3RvYmplY3QuYyBcCi0JCU9iamVjdHMvbG9uZ29iamVjdC5jIFwKLQkJT2JqZWN0cy9tZXRob2RvYmplY3QuYyBcCi0JCU9iamVjdHMvbW9kdWxlb2JqZWN0LmMgXAotCQlPYmplY3RzL29iamVjdC5jIFwKLQkJT2JqZWN0cy9vYm1hbGxvYy5jIFwKLQkJT2JqZWN0cy9yYW5nZW9iamVjdC5jIFwKLQkJT2JqZWN0cy9zZXRvYmplY3QuYyBcCi0JCU9iamVjdHMvc2xpY2VvYmplY3QuYyBcCi0JCU9iamVjdHMvc3RyaW5nb2JqZWN0LmMgXAotCQlPYmplY3RzL3N0cnVjdHNlcS5jIFwKLQkJT2JqZWN0cy90dXBsZW9iamVjdC5jIFwKLQkJT2JqZWN0cy90eXBlb2JqZWN0LmMgXAotCQlPYmplY3RzL3VuaWNvZGVvYmplY3QuYyBcCi0JCU9iamVjdHMvdW5pY29kZWN0eXBlLmMgXAotCQlPYmplY3RzL3dlYWtyZWZvYmplY3QuYykKLQotU1JDLkxJQj0JJChTUkMuT1MyRU1YKSBcCi0JCSQoU1JDLk1BSU4pIFwKLQkJJChTUkMuUEFSU0VSKSBcCi0JCSQoU1JDLk9CSkVDVCkgXAotCQkkKFNSQy5QWVRIT04pIFwKLQkJJChTUkMuTU9EVUxFUykKLU9CSi5MSUI9CSQoYWRkcHJlZml4ICQoT1VUKSwkKG5vdGRpciAkKFNSQy5MSUI6LmM9JE8pKSkKLQotU1JDLlBHRU49CSQoU1JDLlBBUlNFMSkgXAotCQkkKGFkZHByZWZpeCAkKFRPUCksIFwKLQkJT2JqZWN0cy9vYm1hbGxvYy5jKSBcCi0JCSQoYWRkcHJlZml4ICQoVE9QKSwgXAotCQlQeXRob24vbXlzbnByaW50Zi5jKSBcCi0JCSQoYWRkcHJlZml4ICQoVE9QKSwgXAotCQlQYXJzZXIvdG9rZW5pemVyX3BnZW4uYyBcCi0JCVBhcnNlci9wZ2VubWFpbi5jIFwKLQkJUGFyc2VyL3BnZW4uYyBcCi0JCVBhcnNlci9wcmludGdyYW1tYXIuYyBcCi0JCVBhcnNlci9ncmFtbWFyLmMgXAotCQlQYXJzZXIvZmlyc3RzZXRzLmMpIFwKLQotT0JKLlBHRU49CSQoYWRkcHJlZml4ICQoT1VUKSwkKG5vdGRpciAkKFNSQy5QR0VOOi5jPSRPKSkpCi0KLVNSQy5FWEU9CSQoVE9QKU1vZHVsZXMvcHl0aG9uLmMKLVNSQy5QTUVYRT0JcHl0aG9ucG0uYwotCi0jIFB5dGhvbiBtb2R1bGVzIHRvIGJlIGR5bmFtaWNhbGx5IGxvYWRlZCB0aGF0OgotIyAgIDEpIGhhdmUgb25seSBzaW5nbGUgc291cmNlIGZpbGUgYW5kIHJlcXVpcmUgbm8gZXh0cmEgbGlicwotIyAgIDIpIHVzZSB0aGUgc3RhbmRhcmQgbW9kdWxlIG5hbWluZyBjb252ZW50aW9uCi0jICAgICAgKHRoZSAnbW9kdWxlJyBpbiA/Pz8/P21vZHVsZS5jIGlzIGFzc3VtZWQpCi0jIC0gdGhlc2UgY2FuIGJlIGJ1aWx0IHdpdGggaW1wbGljaXQgcnVsZXMKLUVBU1lFWFRNT0RVTEVTPQlmcGVjdGwgXAotCQlmcGV0ZXN0IFwKLQkJcGFyc2VyIFwKLQkJcHdkIFwKLQkJc2VsZWN0IAotCi0jIFB5dGhvbiBtb2R1bGVzIHRvIGJlIGR5bmFtaWNhbGx5IGxvYWRlZCB0aGF0IG5lZWQgZXhwbGljaXQgYnVpbGQgcnVsZXMKLSMgIChlaXRoZXIgbXVsdGlwbGUgc291cmNlIGZpbGVzIGFuZC9vciBub24tc3RhbmRhcmQgbW9kdWxlIG5hbWluZykKLSMgIChOT1RFOiB1c2Ugc2hvcnRlbmVkIG5hbWVzIGZvciBtb2R1bGVzIGFmZmVjdGVkIGJ5IDggY2hhciBuYW1lIGxpbWl0KQotSEFSREVYVE1PRFVMRVM9CV9zb2NrZXQgXAotCQlfdGVzdGNhcCBcCi0JCXVuaWNvZGVkCi0KLSMgUHl0aG9uIG1vZHVsZXMgdGhhdCBhcmUgdXNlZCBhcyBsaWJyYXJpZXMgYW5kIHRoZXJlZm9yZSBtdXN0IHVzZQotIyBhIC5ETEwgZXh0ZW5zaW9uCi1MSUJFWFRNT0RVTEVTPQotCi0jIFB5dGhvbiBleHRlcm5hbCAoJChNT0RVTEUuRVhUKSkgbW9kdWxlcyAtIGNhbiBiZSBFQVNZIG9yIEhBUkQKLWlmZXEgKCQoSEFWRV9aTElCKSx5ZXMpCi0gIEhBUkRFWFRNT0RVTEVTKz0JemxpYgotZW5kaWYKLWlmZXEgKCQoSEFWRV9VRkMpLHllcykKLSAgSEFSREVYVE1PRFVMRVMrPQljcnlwdAotZW5kaWYKLWlmZXEgKCQoSEFWRV9UQ0xUSykseWVzKQotICBIQVJERVhUTU9EVUxFUys9CV90a2ludGVyCi0gIENGTEFHUys9CQktREhBU19ESVJFTlQgLUkvVGNsVGs4MC9pbmNsdWRlCi0gIFRLX0xJQlMrPQkJLUwvVGNsVGs4MC9saWIgLWx0Y2w4MCAtbHRrODAKLWVuZGlmCi1pZmVxICgkKEhBVkVfR1JFQURMSU5FKSx5ZXMpCi0gIEhBUkRFWFRNT0RVTEVTKz0JcmVhZGxpbmUKLWVuZGlmCi1pZmVxICgkKEhBVkVfTkNVUlNFUykseWVzKQotICBMSUJFWFRNT0RVTEVTKz0JX2N1cnNlcwotICBIQVJERVhUTU9EVUxFUys9CV9jdXJzZXNfCi1lbmRpZgotaWZlcSAoJChIQVZFX0dEQk0pLHllcykKLSAgSEFSREVYVE1PRFVMRVMrPQlfZ2RibSBfZGJtCi1lbmRpZgotaWZlcSAoJChIQVZFX0JaMikseWVzKQotICBIQVJERVhUTU9EVUxFUys9CWJ6MgotZW5kaWYKLWlmZXEgKCQoSEFWRV9PUEVOU1NMKSx5ZXMpCi0gIEhBUkRFWFRNT0RVTEVTKz0JX3NzbAotZW5kaWYKLQotIyBFeHBhdCBpcyBub3cgZGlzdHJpYnV0ZWQgd2l0aCB0aGUgUHl0aG9uIHNvdXJjZQotSEFSREVYVE1PRFVMRVMrPQlweWV4cGF0Ci1FWFBBVC5JTkM9CS1JLi4vLi4vTW9kdWxlcy9leHBhdAotRVhQQVQuREVGPQktREhBVkVfRVhQQVRfSCAtRFhNTF9OUz0xIC1EWE1MX0RURD0xIC1EWE1MX0JZVEVfT1JERVI9MTIgXAotCQktRFhNTF9DT05URU5UX0JZVEVTPTEwMjQgLURIQVZFX01FTU1PVkU9MSAtREhBVkVfQkNPUFk9MQotRVhQQVQuU1JDPQkkKGFkZHByZWZpeCAuLi8uLi9Nb2R1bGVzL2V4cGF0LywgXAotCQl4bWxwYXJzZS5jIFwKLQkJeG1scm9sZS5jIFwKLQkJeG1sdG9rLmMpCi0KLSMgYWxsIHRoZSBleHRlcm5hbCBtb2R1bGVzCi1FWFRFUk5ETExTPQkkKGFkZHN1ZmZpeCAkKE1PRFVMRS5FWFQpLCQocGF0c3Vic3QgJW1vZHVsZSwlLCQoRUFTWUVYVE1PRFVMRVMpKSkKLUVYVEVSTkRMTFMrPQkkKGFkZHN1ZmZpeCAkKE1PRFVMRS5FWFQpLCQocGF0c3Vic3QgJW1vZHVsZSwlLCQoSEFSREVYVE1PRFVMRVMpKSkKLUVYVEVSTkRMTFMrPQkkKGFkZHN1ZmZpeCAkKE1PRExJQi5FWFQpLCQocGF0c3Vic3QgJW1vZHVsZSwlLCQoTElCRVhUTU9EVUxFUykpKQotCi0jIFRhcmdldHMKLWFsbDogICQoT1VUKSAkKFBZVEhPTi5MSUIpICQoUFlUSE9OLkRFRikgJChQWVRIT04uSU1QTElCKSAkKFBZVEhPTi5ETEwpIFwKLQlweXRob25fbm9uY29yZQotCi1weXRob25fbm9uY29yZToKLQltYWtlIFBZX0RFRj0gJChQWVRIT04uRVhFKSAkKFBZVEhPTlBNLkVYRSkgJChQR0VOLkVYRSkgJChFWFRFUk5ETExTKQotCi1jbGVhbjoKLQlybSAtZiAkKE9VVCkqCi0Jcm0gLWYgJChQWVRIT04uTElCKSAkKFBZVEhPTi5JTVBMSUIpICQoUFlUSE9OLkVYRUlNUCkgJChQWVRIT04uRExMKSBcCi0JICAkKFBZVEhPTi5FWEUpICQoUFlUSE9OUE0uRVhFKSAkKFBHRU4uRVhFKSAqJChNT0RVTEUuRVhUKSAqLmRsbAotCWZpbmQgLi4vLi4vTGliIC1uYW1lICIqLnB5W2NvXSIgLWV4ZWMgcm0ge30gIjsiCi0KLWx4OgotCUBlY2hvIFBhY2tpbmcgZXZlcnl0aGluZyB3aXRoIGx4TGl0ZS4uLgotCWx4bGl0ZSAkKFBZVEhPTi5ETEwpICQoUFlUSE9OLkVYRSkgJChQWVRIT05QTS5FWEUpICQoUEdFTi5FWEUpCi0KLWRlcGVuZDogJChPVVRCQVNFKQotCW1ha2VkZXAgLWYgJChPVVRCQVNFKXB5dGhvbi5kZXAgLW8gJChCVUNLKU8gLXAgJChCVUNLKVwoT1VUXCkgXAotCSAgLXIgLWMgJChJTkNMVURFKSAkKFNSQy5MSUIpICQoU1JDLlBHRU4pCi0KLSQoT1VUKTogJChPVVRCQVNFKQotCi0kKE9VVCkgJChPVVRCQVNFKToKLQlta2Rpci5leGUgJEAKLQotJChQWVRIT04uTElCKTogJChPQkouTElCKQotCXJtLmV4ZSAtZiAkQAotCSQoQVIpICQoQVJGTEFHUykgJEAgJF4KLQotIyB0aGUgUHl0aG9uIGNvcmUgRExMIC5kZWYgZmlsZSBuZWVkcyB0byBoYXZlIGEgbnVtYmVyIG9mIG5vbi1zdGF0aWMKLSMgc3ltYm9scyB0aGF0IGFyZW4ndCBwYXJ0IG9mIHRoZSBQeXRob24gQyBBUEkgcmVtb3ZlZCAoY29tbWVudGVkIG91dCkKLSMgZnJvbSB0aGUgRExMIGV4cG9ydCBsaXN0LgotJChQWVRIT04uREVGKTogJChQWVRIT04uTElCKQotCUBlY2hvIENyZWF0aW5nIC5ERUYgZmlsZTogJEAKLQlAZWNobyBMSUJSQVJZICQoUFlUSE9OX0xJQikgSU5JVElOU1RBTkNFIFRFUk1JTlNUQU5DRSA+JEAKLQlAZWNobyBERVNDUklQVElPTiAkKERRVU9URSlQeXRob24gJChQWVRIT05fVkVSKSBDb3JlIERMTCQoRFFVT1RFKSA+PiRACi0JQGVjaG8gUFJPVE1PREUgPj4kQAotCUBlY2hvIERBVEEgTVVMVElQTEUgTk9OU0hBUkVEID4+JEAKLQlAZWNobyBFWFBPUlRTID4+JEAKLQkkKEVYUExJQikgLXUgJChQWVRIT04uTElCKSB8XAotCSBzZWQgLWUgIi9eICAuaW5pdC4qL3MvXiAvOyAvIiBcCi0JCS1lICIvXiAgLnBjcmVfLiovcy9eIC87IC8iIFwKLQkJLWUgIi9eICAuYXJyYXlfbWV0aG9kcy9zL14gLzsgLyIgXAotCQktZSAiL14gIC5mYXN0X3NhdmVfbGVhdmUvcy9eIC87IC8iIFwKLQkJLWUgIi9eICAuZGxvcGVuL3MvXiAvOyAvIiBcCi0JCS1lICIvXiAgLmRsc3ltL3MvXiAvOyAvIiBcCi0JCS1lICIvXiAgLmRsY2xvc2Uvcy9eIC87IC8iIFwKLQkJLWUgIi9eICAuZGxlcnJvci9zL14gLzsgLyIgXAotCQktZSAiL14gIC5fUHlfcmVfLiovcy9eIC87IC8iIFwKLQkJLWUgIi9eICAuX1B5X01ENS4qL3MvXiAvOyAvIiA+PiRACi0KLSQoUFlUSE9OLklNUExJQik6ICQoUFlUSE9OLkRFRikKLQkkKElNUExJQikgLW8gJEAgJF4KLQotJChQWVRIT04uRVhFSU1QKTogJChQWVRIT04uREVGKQotCSQoSU1QTElCKSAtbyAkQCAkXgotCi0kKFBZVEhPTi5ETEwpOiAkKE9VVClkbGxlbnRyeSRPICQoUFlUSE9OLkxJQikgJChQWVRIT04uREVGKQotCi0jIEV4cGxpY2l0IG1ha2UgdGFyZ2V0cyBmb3IgdGhlIC5FWEVzIHRvIGJlIGFibGUgdG8gdXNlIExEIHRvIGxpbmsKLSMgKHNvIHRoYXQgZm9yaygpIHdpbGwgd29yayBpZiByZXF1aXJlZCkKLQotJChQWVRIT04uRVhFKTogJChTUkMuRVhFKSAkKFBZVEhPTi5FWEVJTVApICQoT1VUKXB5dGhvbi5kZWYKLQkkKENDKSAtWm10ICQoTERNT0RFLkVYRSkgLVpjcnRkbGwgLVdhbGwgJChJTkNMVURFKSAtTC4gLWxnY2MgLW8gJEAgJChTUkMuRVhFKSAkKFBZVEhPTi5FWEVJTVApICQoTElCUykgJChPVVQpcHl0aG9uLmRlZgotCSQoRVhFT1BUKSAtYXEgJChQWVRIT04uRVhFKSAtaCQoTkZJTEVTKQotCi0kKFBZVEhPTlBNLkVYRSk6ICQoU1JDLlBNRVhFKSAkKFBZVEhPTi5FWEVJTVApICQoT1VUKXB5dGhvbnBtLmRlZgotCSQoQ0MpIC1abXQgJChMRE1PREUuRVhFKSAtWmNydGRsbCAtV2FsbCAkKElOQ0xVREUpIC1MLiAtbGdjYyAtbyAkQCAkKFNSQy5QTUVYRSkgJChQWVRIT04uRVhFSU1QKSAkKExJQlMpICQoT1VUKXB5dGhvbnBtLmRlZgotCSQoRVhFT1BUKSAtYXEgJChQWVRIT05QTS5FWEUpIC1oJChORklMRVMpCi0KLSQoUEdFTi5FWEUpOiAkKE9CSi5QR0VOKSAkKE9VVClwZ2VuLmRlZgotCi0jIEV4cGxpY2l0IGJ1aWxkaW5nIGluc3RydWN0aW9ucyBmb3IgdGhvc2UgZXh0ZXJuYWwgbW9kdWxlcyB0aGF0IHJlcXVpcmUgCi0jIGF3a3dhcmQgaGFuZGxpbmcgKGR1ZSBlLmcuIHRvIG5vbi1zdGQgbmFtaW5nLCBvciBtdWx0aXBsZSBzb3VyY2UgZmlsZXMpCi0jIC0gc3RhbmRhcmQgbW9kdWxlcwotCi1fc29ja2V0JChNT0RVTEUuRVhUKTogJChPVVQpc29ja2V0bW9kdWxlJE8gJChPVVQpX3NvY2tldF9tLmRlZiAkKFBZVEhPTi5JTVBMSUIpCi0JJChMRCkgJChMREZMQUdTLkRMTCkgLW8gJEAgJCheXikgJChMXikgJChMSUJTKQotCi0jIF90ZXN0Y2FwaSBuZWVkcyB0byBiZSByZW5hbWVkIHRvIGJlIHVzZWZ1bAotX3Rlc3RjYXBpJChNT0RVTEUuRVhUKTogJChPVVQpX3Rlc3RjYXBpbW9kdWxlJE8gJChPVVQpX3Rlc3RjYXBpX20uZGVmICQoUFlUSE9OLklNUExJQikKLQkkKExEKSAkKExERkxBR1MuRExMKSAtbyAkQCAkKF5eKSAkKExeKSAkKExJQlMpCi0KLV90ZXN0Y2FwJChNT0RVTEUuRVhUKTogX3Rlc3RjYXBpJChNT0RVTEUuRVhUKQotCWNwICReICRACi0KLSMgdW5pY29kZWRhdGEgbmVlZHMgdG8gYmUgcmVuYW1lZCB0byBiZSB1c2VmdWwKLXVuaWNvZGVkYXRhJChNT0RVTEUuRVhUKTogJChPVVQpdW5pY29kZWRhdGEkTyAkKE9VVCl1bmljb2RlZGF0YV9tLmRlZiAkKFBZVEhPTi5JTVBMSUIpCi0JJChMRCkgJChMREZMQUdTLkRMTCkgLW8gJEAgJCheXikgJChMXikgJChMSUJTKSAkKE1PRFVMRV9MSUJTKQotCi11bmljb2RlZCQoTU9EVUxFLkVYVCk6IHVuaWNvZGVkYXRhJChNT0RVTEUuRVhUKQotCWNwICReICRACi0KLWNyeXB0JChNT0RVTEUuRVhUKTogJChPVVQpY3J5cHRtb2R1bGUkTyAkKE9VVCljcnlwdF9tLmRlZiAkKFBZVEhPTi5JTVBMSUIpCi0JJChMRCkgJChMREZMQUdTLkRMTCkgLW8gJEAgJCheXikgJChMXikgLWx1ZmMgJChMSUJTKQotCi0jIFRoZSBfY3Vyc2VzX3BhbmVsIG1vZHVsZSByZXF1aXJlcyBhIGNvdXBsZSBvZiBuY3Vyc2VzIGxpYnJhcnkgZW50cnkKLSMgcG9pbnRzLCB3aGljaCBhcmUgYmVzdCBleHBvc2VkIGFzIGV4cG9ydHMgZnJvbSB0aGUgX2N1cnNlcyBtb2R1bGUgRExMCi0kKE9VVClfY3Vyc2VzX20uZGVmOgotCUBlY2hvIENyZWF0aW5nIC5ERUYgZmlsZTogJEAKLQlAZWNobyBMSUJSQVJZICQobm90ZGlyICQqKSBJTklUSU5TVEFOQ0UgVEVSTUlOU1RBTkNFID4kQAotCUBlY2hvIERFU0NSSVBUSU9OICQoRFFVT1RFKSQoREVTQ1JJUFRJT04uJChub3RkaXIgJCopJChNT0RMSUIuRVhUKSkkKERRVU9URSkgPj4kQAotCUBlY2hvIERBVEEgTVVMVElQTEUgTk9OU0hBUkVEID4+JEAKLQlAZWNobyBFWFBPUlRTID4+JEAKLQlAZWNobyAJaW5pdF9jdXJzZXMgPj4kQAotCUBlY2hvIAl3bm91dHJlZnJlc2ggPj4kQAotCUBlY2hvIAlfbmNfcGFuZWxob29rID4+JEAKLQlAZWNobyAJaXNfbGluZXRvdWNoZWQgPj4kQAotCUBlY2hvIAltdndpbiA+PiRACi0JQGVjaG8gCXN0ZHNjciA+PiRACi0JQGVjaG8gCXd0b3VjaGxuID4+JEAKLQotJChPVVQpX2N1cnNlc19wYW5lbF9tLmRlZjoKLQlAZWNobyBDcmVhdGluZyAuREVGIGZpbGU6ICRACi0JQGVjaG8gTElCUkFSWSAkKG5vdGRpciAkKikgSU5JVElOU1RBTkNFIFRFUk1JTlNUQU5DRSA+JEAKLQlAZWNobyBERVNDUklQVElPTiAkKERRVU9URSlQeXRob24gc3RhbmRhcmQgbW9kdWxlICQobm90ZGlyICQqKSQoRFFVT1RFKSA+PiRACi0JQGVjaG8gREFUQSBNVUxUSVBMRSBOT05TSEFSRUQgPj4kQAotCUBlY2hvIElNUE9SVFMgPj4kQAotCUBlY2hvIAlfY3Vyc2VzLndub3V0cmVmcmVzaCA+PiRACi0JQGVjaG8gCV9jdXJzZXMuX25jX3BhbmVsaG9vayA+PiRACi0JQGVjaG8gCV9jdXJzZXMuaXNfbGluZXRvdWNoZWQgPj4kQAotCUBlY2hvIAlfY3Vyc2VzLm12d2luID4+JEAKLQlAZWNobyAJX2N1cnNlcy5zdGRzY3IgPj4kQAotCUBlY2hvIAlfY3Vyc2VzLnd0b3VjaGxuID4+JEAKLQlAZWNobyBFWFBPUlRTID4+JEAKLQlAZWNobyAJaW5pdF9jdXJzZXNfcGFuZWwgPj4kQAotCi1fY3Vyc2VzJChNT0RMSUIuRVhUKTogJChPVVQpX2N1cnNlc21vZHVsZSRPICQoT1VUKV9jdXJzZXNfbS5kZWYgJChQWVRIT04uSU1QTElCKQotCSQoTEQpICQoTERGTEFHUy5ETEwpIC1vICRAICQoXl4pICQoTF4pICQoTElCUykgLWxuY3Vyc2VzCi0KLSMgY3Vyc2VzX3BhbmVsIG5lZWRzIHRvIGJlIHJlbmFtZWQgdG8gYmUgdXNlZnVsCi1fY3Vyc2VzX3BhbmVsJChNT0RVTEUuRVhUKTogJChPVVQpX2N1cnNlc19wYW5lbCRPICQoT1VUKV9jdXJzZXNfcGFuZWxfbS5kZWYgJChQWVRIT04uSU1QTElCKQotCSQoTEQpICQoTERGTEFHUy5ETEwpIC1vICRAICQoXl4pICQoTF4pICQoTElCUykgLWxwYW5lbAotCi1fY3Vyc2VzXyQoTU9EVUxFLkVYVCk6IF9jdXJzZXNfcGFuZWwkKE1PRFVMRS5FWFQpCi0JY3AgJF4gJEAKLQotX2RibSQoTU9EVUxFLkVYVCk6ICQoT1VUKV9kYm1tb2R1bGUkTyAkKE9VVClkYm1fbS5kZWYgJChQWVRIT04uSU1QTElCKQotCSQoTEQpICQoTERGTEFHUy5ETEwpIC1vICRAICQoXl4pICQoTF4pICQoTElCUykgLWxnZGJtCi0KLV9nZGJtJChNT0RVTEUuRVhUKTogJChPVVQpX2dkYm1tb2R1bGUkTyAkKE9VVClnZGJtX20uZGVmICQoUFlUSE9OLklNUExJQikKLQkkKExEKSAkKExERkxBR1MuRExMKSAtbyAkQCAkKF5eKSAkKExeKSAkKExJQlMpIC1sZ2RibQotCi0KLSMgRXhwYXQgaXMgbm93IGRpc3RyaWJ1dGVkIHdpdGggUHl0aG9uLCBzbyB1c2UgdGhlIGluY2x1ZGVkIHZlcnNpb24KLSQoT1VUKXB5ZXhwYXQkTzoJLi4vLi4vTW9kdWxlcy9weWV4cGF0LmMKLQkkKENDKSAkKENGTEFHUykgJChFWFBBVC5JTkMpIC1jIC1vICRAICReCi0kKE9VVCl4bWxwYXJzZSRPOgkuLi8uLi9Nb2R1bGVzL2V4cGF0L3htbHBhcnNlLmMKLQkkKENDKSAkKENGTEFHUykgJChFWFBBVC5JTkMpICQoRVhQQVQuREVGKSAtYyAtbyAkQCAkXgotJChPVVQpeG1scm9sZSRPOgkuLi8uLi9Nb2R1bGVzL2V4cGF0L3htbHJvbGUuYwotCSQoQ0MpICQoQ0ZMQUdTKSAkKEVYUEFULklOQykgJChFWFBBVC5ERUYpIC1jIC1vICRAICReCi0kKE9VVCl4bWx0b2skTzoJLi4vLi4vTW9kdWxlcy9leHBhdC94bWx0b2suYwotCSQoQ0MpICQoQ0ZMQUdTKSAkKEVYUEFULklOQykgJChFWFBBVC5ERUYpIC1jIC1vICRAICReCi1weWV4cGF0JChNT0RVTEUuRVhUKTogJChPVVQpcHlleHBhdCRPICQoT1VUKXhtbHBhcnNlJE8gJChPVVQpeG1scm9sZSRPIFwKLQkJJChPVVQpeG1sdG9rJE8gJChPVVQpcHlleHBhdF9tLmRlZiAkKFBZVEhPTi5JTVBMSUIpCi0JJChMRCkgJChMREZMQUdTLkRMTCkgLW8gJEAgJCheXikgJChMXikgJChMSUJTKQotCi1yZWFkbGluZSQoTU9EVUxFLkVYVCk6ICQoT1VUKXJlYWRsaW5lJE8gJChPVVQpcmVhZGxpbmVfbS5kZWYgJChQWVRIT04uSU1QTElCKQotCSQoTEQpICQoTERGTEFHUy5ETEwpIC1vICRAICQoXl4pICQoTF4pICQoTElCUykgLWxyZWFkbGluZSAtbG5jdXJzZXMKLQotI190a2ludGVyJChNT0RVTEUuRVhUKTogJChPVVQpX3RraW50ZXIkTyAkKE9VVCl0Y2xOb3RpZnkkTyAkKE9VVCl0a2FwcGluaXQkTwotX3RraW50ZXIkKE1PRFVMRS5FWFQpOiAkKE9VVClfdGtpbnRlciRPICQoT1VUKXRjbE5vdGlmeSRPIFwKLQkJJChPVVQpX3RraW50ZXJfbS5kZWYgJChQWVRIT04uSU1QTElCKQotCSQoTEQpICQoTERGTEFHUy5ETEwpIC1vICRAICQoXl4pICQoTF4pICQoTElCUykgJChUS19MSUJTKQotCi16bGliJChNT0RVTEUuRVhUKTogJChPVVQpemxpYm1vZHVsZSRPICQoT1VUKXpsaWJfbS5kZWYgJChQWVRIT04uSU1QTElCKQotCSQoTEQpICQoTERGTEFHUy5ETEwpIC1vICRAICQoXl4pICQoTF4pICQoTElCUykgLWx6Ci0KLWJ6MiQoTU9EVUxFLkVYVCk6ICQoT1VUKWJ6Mm1vZHVsZSRPICQoT1VUKWJ6Ml9tLmRlZiAkKFBZVEhPTi5JTVBMSUIpCi0JJChMRCkgJChMREZMQUdTLkRMTCkgLW8gJEAgJCheXikgJChMXikgJChMSUJTKSAtbGJ6MgotCi1fc3NsJChNT0RVTEUuRVhUKTogJChPVVQpX3NzbCRPICQoT1VUKV9zc2xfbS5kZWYgJChQWVRIT04uSU1QTElCKQotCSQoTEQpICQoTERGTEFHUy5ETEwpIC1vICRAICQoXl4pICQoTF4pICQoTElCUykgLWxzc2wgLWxjcnlwdG8KLQotIyB0aGUgdGVzdCB0YXJnZXQKLXRlc3Q6Ci0JLWZpbmQgLi4vLi4vTGliIC1uYW1lICIqLnB5W2NvXSIgLWV4ZWMgcm0ge30gIjsiCi0JLS4vcHl0aG9uIC1FIC4uLy4uL2xpYi90ZXN0L3JlZ3J0ZXN0LnB5IC1sIC11ICJuZXR3b3JrIgotCS4vcHl0aG9uIC1FIC4uLy4uL2xpYi90ZXN0L3JlZ3J0ZXN0LnB5IC1sIC11ICJuZXR3b3JrIgotCi0taW5jbHVkZSAkKE9VVEJBU0UpcHl0aG9uLmRlcApkaWZmIC0tZ2l0IGEvUEMvb3MyZW14L1JFQURNRS5vczJlbXggYi9QQy9vczJlbXgvUkVBRE1FLm9zMmVteApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjFjZjZkZi4uMDAwMDAwMAotLS0gYS9QQy9vczJlbXgvUkVBRE1FLm9zMmVteAorKysgL2Rldi9udWxsCkBAIC0xLDY2MyArMCwwIEBACi1UaGlzIGlzIGEgcG9ydCBvZiBQeXRob24gMi42IHRvIE9TLzIgdXNpbmcgdGhlIEVNWCBkZXZlbG9wbWVudCB0b29scwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1XaGF0J3MgbmV3IHNpbmNlIHRoZSBwcmV2aW91cyByZWxlYXNlCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUFub3RoZXIgZGF5LCBhbm90aGVyIHZlcnNpb24uLi4KLQotCi1MaWNlbnNlcyBhbmQgaW5mbyBhYm91dCBQeXRob24gYW5kIEVNWAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotUGxlYXNlIHJlYWQgdGhlIGZpbGUgUkVBRE1FLlB5dGhvbi0yLjYgaW5jbHVkZWQgaW4gdGhpcyBwYWNrYWdlIGZvciAKLWluZm9ybWF0aW9uIGFib3V0IFB5dGhvbiAyLjYuICBUaGlzIGZpbGUgaXMgdGhlIFJFQURNRSBmaWxlIGZyb20gdGhlIAotUHl0aG9uIDIuNiBzb3VyY2UgZGlzdHJpYnV0aW9uIGF2YWlsYWJsZSB2aWEgaHR0cDovL3d3dy5weXRob24ub3JnLyAKLWFuZCBpdHMgbWlycm9ycy4gIFRoZSBmaWxlIExJQ0VOQ0UuUHl0aG9uLTIuNiBpcyB0aGUgdGV4dCBvZiB0aGUgTGljZW5jZSAKLWZyb20gdGhlIFB5dGhvbiAyLjYgc291cmNlIGRpc3RyaWJ1dGlvbi4KLQotTm90ZSB0aGF0IHRoZSBFTVggcGFja2FnZSB0aGF0IHRoaXMgcGFja2FnZSBkZXBlbmRzIG9uIGlzIHJlbGVhc2VkIHVuZGVyIAotdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbmNlLiAgUGxlYXNlIHJlZmVyIHRvIHRoZSBkb2N1bWVudGF0aW9uIAotYWNjb21wYW55aW5nIHRoZSBFTVggUnVudGltZSBsaWJyYXJpZXMgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIAotaW1wbGljYXRpb25zIG9mIHRoaXMuICBBIGNvcHkgb2YgdmVyc2lvbiAyIG9mIHRoZSBHUEwgaXMgaW5jbHVkZWQgYXMgdGhlIAotZmlsZSBDT1BZSU5HLmdwbDIuCi0KLVJlYWRsaW5lIGFuZCBHREJNIGFyZSBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5jZS4gIEkgdGhpbmsgCi1FYmVyaGFyZCBNYXR0ZXMnIHBvcnRpbmcgY2hhbmdlcyB0byBCU0QgREIgdjEuODUgYXJlIGFsc28gR1BMJ2VkIChCU0QgREIgCi1pdHNlbGYgaXMgQlNEIExpY2VuY2VkKS4gIG5jdXJzZXMgYW5kIGV4cGF0IGFwcGVhciB0byBiZSBjb3ZlcmVkIGJ5IE1JVCAKLXN0eWxlIGxpY2VuY2VzIC0gcGxlYXNlIHJlZmVyIHRvIHRoZSBzb3VyY2UgZGlzdHJpYnV0aW9ucyBmb3IgbW9yZSBkZXRhaWwuICAKLXpsaWIgaXMgZGlzdHJpYnV0YWJsZSB1bmRlciBhIHZlcnkgZnJlZSBsaWNlbnNlLiAgR05VIFVGQyBpcyB1bmRlciB0aGUgCi1HTlUgTEdQTCAoc2VlIGZpbGUgQ09QWUlORy5saWIpLgotCi1NeSBwYXRjaGVzIHRvIHRoZSBQeXRob24tMi54IHNvdXJjZSBkaXN0cmlidXRpb25zLCBhbmQgYW55IG90aGVyIHBhY2thZ2VzIAotdXNlZCBpbiB0aGlzIHBvcnQsIGFyZSBwbGFjZWQgaW4gdGhlIHB1YmxpYyBkb21haW4uCi0KLVRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgJ2FzLWlzJywgd2l0aG91dCBhbnkgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgotSW4gbm8gZXZlbnQgd2lsbCB0aGUgYXV0aG9yIGJlIGhlbGQgbGlhYmxlIGZvciBhbnkgZGFtYWdlcyBhcmlzaW5nIGZyb20gdGhlIAotdXNlIG9mIHRoZSBzb2Z0d2FyZS4KLQotSSBkbyBob3BlIGhvd2V2ZXIgdGhhdCBpdCBwcm92ZXMgdXNlZnVsIHRvIHNvbWVvbmUuCi0KLQotT3RoZXIgcG9ydHMKLS0tLS0tLS0tLS0tCi0KLVRoZXJlIGhhdmUgYmVlbiBwb3J0cyBvZiBwcmV2aW91cyB2ZXJzaW9ucyBvZiBQeXRob24gdG8gT1MvMi4KLQotVGhlIGJlc3Qga25vd24gd291bGQgYmUgdGhhdCBieSBKZWZmIFJ1c2gsIG1vc3QgcmVjZW50bHkgb2YgdmVyc2lvbiAKLTEuNS4yLiAgSmVmZiB1c2VkIElCTSdzIFZpc3VhbCBBZ2UgQysrICh2MykgZm9yIGhpcyBwb3J0cywgYW5kIGhpcyAKLXBhdGNoZXMgaGF2ZSBiZWVuIGluY2x1ZGVkIGluIHRoZSBQeXRob24gMi42IHNvdXJjZSBkaXN0cmlidXRpb24uCi0KLUFuZHkgWmFib2xvdG55IGltcGxlbWVudGVkIGEgcG9ydCBvZiBQeXRob24gdjEuNS4yIHVzaW5nIHRoZSBFTVggCi1kZXZlbG9wbWVudCB0b29scy4gIEhpcyBwYXRjaGVzIGFnYWluc3QgdGhlIFB5dGhvbiB2MS41LjIgc291cmNlIAotZGlzdHJpYnV0aW9uIGhhdmUgYmVjb21lIHRoZSBjb3JlIG9mIHRoaXMgcG9ydCwgYW5kIHdpdGhvdXQgaGlzIGVmZm9ydHMgCi10aGlzIHBvcnQgd291bGRuJ3QgZXhpc3QuICBBbmR5J3MgcG9ydCBhbHNvIGFwcGVhcnMgdG8gaGF2ZSBiZWVuIAotY29tcGlsZWQgd2l0aCBoaXMgcG9ydCBvZiBnY2MgMi45NS4yIHRvIEVNWCwgd2hpY2ggSSBoYXZlIGJ1dCBoYXZlIAotY2hvc2VuIG5vdCB0byB1c2UgZm9yIHRoZSBiaW5hcnkgZGlzdHJpYnV0aW9uIG9mIHRoaXMgcG9ydCAoc2VlIGl0ZW0gMTYgCi1vZiB0aGUgIllPVSBIQVZFIEJFRU4gV0FSTkVEIiBzZWN0aW9uIGJlbG93KS4KLQotSXQgaXMgcG9zc2libGUgdG8gaGF2ZSB0aGVzZSBlYXJsaWVyIHBvcnRzIHN0aWxsIHVzYWJsZSBhZnRlciBpbnN0YWxsaW5nIAotdGhpcyBwb3J0IC0gc2VlIHRoZSBSRUFETUUub3MyZW14Lm11bHRpcGxlX3ZlcnNpb25zIGZpbGUsIGNvbnRyaWJ1dGVkIGJ5Ci1EciBEYXZpZCBNZXJ0eiwgZm9yIGEgc3VnZ2VzdGVkIGFwcHJvYWNoIHRvIGFjaGlldmluZyB0aGlzLgotCi0KLVNvZnR3YXJlIHJlcXVpcmVtZW50cwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVRoaXMgcGFja2FnZSByZXF1aXJlcyB0aGUgRU1YIFJ1bnRpbWUgcGFja2FnZSwgYXZhaWxhYmxlIGZyb20gdGhlIAotSG9iYmVzIChodHRwOi8vaG9iYmVzLm5tc3UuZWR1LykgYW5kIExFTyAoaHR0cDovL2FyY2hpdi5sZW8ub3JnLykgCi1hcmNoaXZlcyBvZiBPUy8yIHNvZnR3YXJlLiAgSSBoYXZlIHVzZWQgRU1YIHZlcnNpb24gMC45ZCBmaXgwNCBpbiAKLWRldmVsb3BpbmcgdGhpcyBwb3J0LgotCi1NeSBkZXZlbG9wbWVudCBzeXN0ZW0gaXMgcnVubmluZyBPUy8yIHY0IHdpdGggZml4cGFjayAxMi4KLQotM3JkIHBhcnR5IHNvZnR3YXJlIHdoaWNoIGhhcyBiZWVuIGxpbmtlZCBpbnRvIGR5bmFtaWNhbGx5IGxvYWRlZCBtb2R1bGVzOgotLSBuY3Vyc2VzICAgICAgKHNlZSBodHRwOi8vZGlja2V5Lmhpcy5jb20vIGZvciBtb3JlIGluZm8sIHY1LjIpCi0tIEdOVSBSZWFkbGluZSAoS2FpIFV3ZSBSb21tZWwncyBwb3J0IGF2YWlsYWJsZSBmcm9tIEhvYmJlcyBvciBMRU8sIHYyLjEpCi0tIEdOVSBHREJNICAgICAoS2FpIFV3ZSBSb21tZWwncyBwb3J0IGF2YWlsYWJsZSBmcm9tIEhvYmJlcyBvciBMRU8sIHYxLjcuMykKLS0gemxpYiAgICAgICAgIChkZXJpdmVkIGZyb20gSHVuZy1DaGkgQ2h1J3MgcG9ydCBvZiB2MS4xLjMsIHYxLjEuNCkKLS0gZXhwYXQgICAgICAgIChkaXN0cmlidXRlZCB3aXRoIFB5dGhvbiwgdjEuOTUuNikKLS0gR05VIFVGQyAgICAgIChLYWkgVXdlIFJvbW1lbCdzIHBvcnQgYXZhaWxhYmxlIGZyb20gTEVPLCB2Mi4wLjQpCi0KLQotQWJvdXQgdGhpcyBwb3J0Ci0tLS0tLS0tLS0tLS0tLS0KLQotSSBoYXZlIGF0dGVtcHRlZCB0byBtYWtlIHRoaXMgcG9ydCBhcyBjb21wbGV0ZSBhbmQgZnVuY3Rpb25hbCBhcyBJIGNhbiwgCi1ub3R3aXRoc3RhbmRpbmcgdGhlIGlzc3VlcyBpbiB0aGUgIllPVSBIQVZFIEJFRU4gV0FSTkVEIiBzZWN0aW9uIGJlbG93LgotCi1Db3JlIGNvbXBvbmVudHM6Ci0KLVB5dGhvbi5leGUgaXMgbGlua2VkIGFzIGFuIGEub3V0IGV4ZWN1dGFibGUsIGllIHVzaW5nIEVNWCBtZXRob2QgRTEgCi10byBjb21waWxlICYgbGluayB0aGUgZXhlY3V0YWJsZS4gIFRoaXMgaXMgc28gdGhhdCBmb3JrKCkgd29ya3MgKHNlZSAKLSJZT1UgSEFWRSBCRUVOIFdBUk5FRCIgaXRlbSAxKS4KLQotUHl0aG9uMjYuZGxsIGlzIGNyZWF0ZWQgYXMgYSBub3JtYWwgT01GIERMTCwgd2l0aCBhbiBPTUYgaW1wb3J0IAotbGlicmFyeSBhbmQgbW9kdWxlIGRlZmluaXRpb24gZmlsZS4gIFRoZXJlIGlzIGFsc28gYW4gYS5vdXQgKC5hKSBpbXBvcnQgCi1saWJyYXJ5IHRvIHN1cHBvcnQgbGlua2luZyB0aGUgRExMIHRvIGEub3V0IGV4ZWN1dGFibGVzLiAgVGhlIERMTCAKLXJlcXVpcmVzIHRoZSBFTVggcnVudGltZSBETExzLgotCi1UaGlzIHBvcnQgaGFzIGJlZW4gYnVpbHQgd2l0aCBjb21wbGV0ZSBzdXBwb3J0IGZvciBtdWx0aXRocmVhZGluZy4KLQotTW9kdWxlczoKLQotV2l0aCB0aGUgZXhjZXB0aW9uIG9mIG1vZHVsZXMgdGhhdCBoYXZlIGEgc2lnbmlmaWNhbnQgY29kZSBzaXplLCBvciBhcmUgCi1ub3QgcmVjb21tZW5kZWQgb3IgZGVzaXJlZCBmb3Igbm9ybWFsIHVzZSwgdGhlIHN0YW5kYXJkIG1vZHVsZXMgYXJlIG5vdyAKLWJ1aWx0IGludG8gdGhlIGNvcmUgRExMIHJhdGhlciB0aGFuIGNvbmZpZ3VyZWQgYXMgZHluYW1pY2FsbHkgbG9hZGFibGUgCi1tb2R1bGVzLiAgVGhpcyBpcyBmb3IgYm90aCByZWFzb25zIG9mIHBlcmZvcm1hbmNlIChzdGFydHVwIHRpbWUpIGFuZCAKLW1lbW9yeSB1c2UgKGxvdHMgb2Ygc21hbGwgRExMcyBmcmFnbWVudCB0aGUgYWRkcmVzcyBzcGFjZSkuCi0KLUkgaGF2ZW4ndCB5ZXQgY2hhbmdlZCB0aGUgYnVpbGRpbmcgb2YgUHl0aG9uJ3MgZHluYW1pY2FsbHkgbG9hZGFibGUgCi1tb2R1bGVzIG92ZXIgdG8gdXNpbmcgdGhlIERpc3RVdGlscy4KLQotU2VlICJZT1UgSEFWRSBCRUVOIFdBUk5FRCIgaXRlbSAzIGZvciBub3RlcyBhYm91dCB0aGUgZmNudGwgbW9kdWxlLCBhbmQgCi0iWU9VIEhBVkUgQkVFTiBXQVJORUQiIGl0ZW0gMTAgZm9yIG5vdGVzIGFib3V0IHRoZSBwd2QgYW5kIGdycCBtb2R1bGVzLgotCi1UaGlzIHBvcnQgc3VwcG9ydHMgY2FzZSBzZW5zaXRpdmUgbW9kdWxlIGltcG9ydCBzZW1hbnRpY3MsIG1hdGNoaW5nIAotdGhlIFdpbmRvd3MgcmVsZWFzZS4gIFRoaXMgY2FuIGJlIGRlYWN0aXZhdGVkIGJ5IHNldHRpbmcgdGhlIFBZVEhPTkNBU0VPSyAKLWVudmlyb25tZW50IHZhcmlhYmxlICh0aGUgdmFsdWUgZG9lc24ndCBtYXR0ZXIpIC0gc2VlICJZT1UgSEFWRSBCRUVOIFdBUk5FRCIgCi1pdGVtIDEyLgotCi1PcHRpb25hbCBtb2R1bGVzOgotCi1XaGVyZSBJJ3ZlIGJlZW4gYWJsZSB0byBsb2NhdGUgdGhlIHJlcXVpcmVkIDNyZCBwYXJ0eSBwYWNrYWdlcyBhbHJlYWR5IAotcG9ydGVkIHRvIE9TLzIsIEkndmUgYnVpbHQgYW5kIGluY2x1ZGVkIHRoZW0uCi0KLVRoZXNlIGluY2x1ZGUgbmN1cnNlcyAoX2N1cnNlcywgX2N1cnNlc19wYW5lbCksCi1HTlUgR0RCTSAoZ2RibSwgZGJtKSwgemxpYiAoemxpYiksIEdOVSBSZWFkbGluZSAocmVhZGxpbmUpLCBhbmQgR05VIFVGQyAKLShjcnlwdCkuCi0KLUV4cGF0IGlzIG5vdyBpbmNsdWRlZCBpbiB0aGUgUHl0aG9uIHJlbGVhc2Ugc291cmNlYmFsbCwgYW5kIHRoZSBweWV4cGF0IAotbW9kdWxlIGlzIGFsd2F5cyBidWlsdC4KLQotSSBoYXZlIGJ1aWx0IHRoZXNlIG1vZHVsZXMgc3RhdGljYWxseSBsaW5rZWQgYWdhaW5zdCB0aGUgM3JkIHBhcnR5IAotbGlicmFyaWVzLiAgVW5mb3J0dW5hdGVseSBteSBhdHRlbXB0cyB0byB1c2UgdGhlIGRsbCB2ZXJzaW9uIG9mIEdOVSAKLXJlYWRsaW5lIGhhdmUgYmVlbiBhIGRpc21hbCBmYWlsdXJlLCBpbiB0aGF0IHdoZW4gdGhlIGR5bmFtaWNhbGx5IAotbGlua2VkIHJlYWRsaW5lIG1vZHVsZSBpcyBhY3RpdmUgb3RoZXIgbW9kdWxlcyBpbW1lZGlhdGVseSBwcm92b2tlIGEgCi1jb3JlIGR1bXAgd2hlbiBpbXBvcnRlZC4KLQotT25seSB0aGUgQlNEIERCIHBhY2thZ2UgKHBhcnQgb2YgdGhlIEJTRCBwYWNrYWdlIGRpc3RyaWJ1dGVkIHdpdGggRU1YKSAKLW5lZWRzIHNvdXJjZSBtb2RpZmljYXRpb25zIHRvIGJlIHVzZWQgZm9yIHRoaXMgcG9ydCwgcGVydGFpbmluZyB0byB1c2UgCi1vZiBlcnJubyB3aXRoIG11bHRpdGhyZWFkaW5nLgotCi1UaGUgb3RoZXIgcGFja2FnZXMsIGV4Y2VwdCBmb3IgbmN1cnNlcyBhbmQgemxpYiwgbmVlZGVkIE1ha2VmaWxlIGNoYW5nZXMgCi1mb3IgbXVsdGl0aHJlYWRpbmcgc3VwcG9ydCBidXQgbm8gc291cmNlIGNoYW5nZXMuCi0KLVRoZSBfY3Vyc2VzX3BhbmVsIG1vZHVsZSBpcyBhIHBvdGVudGlhbCBwcm9ibGVtIC0gc2VlICJZT1UgSEFWRSBCRUVOIAotV0FSTkVEIiBpdGVtIDEzLgotCi1VcHN0cmVhbSBzb3VyY2UgcGF0Y2hlczoKLQotTm8gdXBkYXRlcyB0byB0aGUgUHl0aG9uIDIuNiByZWxlYXNlIGhhdmUgYmVjb21lIGF2YWlsYWJsZS4KLQotTGlicmFyeSBhbmQgb3RoZXIgZGlzdHJpYnV0ZWQgUHl0aG9uIGNvZGU6Ci0KLVRoZSBQeXRob24gc3RhbmRhcmQgbGlicmFyeSBsaXZlcyBpbiB0aGUgTGliIGRpcmVjdG9yeS4gIEFsbCB0aGUgc3RhbmRhcmQgCi1saWJyYXJ5IGNvZGUgaW5jbHVkZWQgd2l0aCB0aGUgUHl0aG9uIDIuNiBzb3VyY2UgZGlzdHJpYnV0aW9uIGlzIGluY2x1ZGVkIAotaW4gdGhlIGJpbmFyeSBhcmNoaXZlLCB3aXRoIHRoZSBleGNlcHRpb24gb2YgdGhlIGRvcy04eDMgYW5kIHRraW50ZXIgCi1zdWJkaXJlY3RvcmllcyB3aGljaCBoYXZlIGJlZW4gb21pdHRlZCB0byByZWR1Y2UgdGhlIHNpemUgb2YgdGhlIGJpbmFyeSAKLWFyY2hpdmUgLSB0aGUgZG9zLTh4MyBjb21wb25lbnRzIGFyZSB1bm5lY2Vzc2FyeSBkdXBsaWNhdGVzIGFuZCBUa2ludGVyIAotaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIHBvcnQgKHlldCkuICBBbGwgdGhlIHBsYXQtKiBzdWJkaXJlY3RvcmllcyBpbiB0aGUgCi1zb3VyY2UgZGlzdHJpYnV0aW9uIGhhdmUgYWxzbyBiZWVuIG9taXR0ZWQsIGV4Y2VwdCBmb3IgdGhlIHBsYXQtb3MyZW14IAotc3ViZGlyZWN0b3J5LgotCi1UaGUgVG9vbHMgYW5kIERlbW8gZGlyZWN0b3JpZXMgY29udGFpbiBhIGNvbGxlY3Rpb24gb2YgUHl0aG9uIHNjcmlwdHMuICAKLVRvIHJlZHVjZSB0aGUgc2l6ZSBvZiB0aGUgYmluYXJ5IGFyY2hpdmUsIHRoZSBEZW1vL3NnaSwgRGVtby9UaXgsIAotRGVtby90a2ludGVyLCBUb29scy9hdWRpb3B5IGFuZCBUb29scy9JRExFIHN1YmRpcmVjdG9yaWVzIGhhdmUgYmVlbiAKLW9taXR0ZWQgYXMgbm90IGJlaW5nIHN1cHBvcnRlZCBieSB0aGlzIHBvcnQuICBUaGUgTWlzYyBkaXJlY3RvcnkgaGFzIAotYWxzbyBiZWVuIG9taXR0ZWQuCi0KLUFsbCBzdWJkaXJlY3RvcmllcyBvbWl0dGVkIGZyb20gdGhlIGJpbmFyeSBhcmNoaXZlIGNhbiBiZSByZWNvbnN0aXR1dGVkIAotZnJvbSB0aGUgUHl0aG9uIDIuNiBzb3VyY2UgZGlzdHJpYnV0aW9uLCBpZiBkZXNpcmVkLgotCi1TdXBwb3J0IGZvciBidWlsZGluZyBQeXRob24gZXh0ZW5zaW9uczoKLQotVGhlIENvbmZpZyBzdWJkaXJlY3RvcnkgY29udGFpbnMgdGhlIGZpbGVzIGRlc2NyaWJpbmcgdGhlIGNvbmZpZ3VyYXRpb24gCi1vZiB0aGUgaW50ZXJwcmV0ZXIgYW5kIHRoZSBNYWtlZmlsZSwgaW1wb3J0IGxpYnJhcmllcyBmb3IgdGhlIFB5dGhvbiBETEwsIAotYW5kIHRoZSBtb2R1bGUgZGVmaW5pdGlvbiBmaWxlIHVzZWQgdG8gY3JlYXRlIHRoZSBQeXRob24gRExMLiAgVGhlIAotSW5jbHVkZSBzdWJkaXJlY3RvcnkgY29udGFpbnMgYWxsIHRoZSBzdGFuZGFyZCBQeXRob24gaGVhZGVyIGZpbGVzIAotbmVlZGVkIGZvciBidWlsZGluZyBleHRlbnNpb25zLgotCi1BcyBJIGRvbid0IGhhdmUgdGhlIFZpc3VhbCBBZ2UgQysrIGNvbXBpbGVyLCBJJ3ZlIG1hZGUgbm8gYXR0ZW1wdCB0byAKLWhhdmUgdGhpcyBwb3J0IHN1cHBvcnQgZXh0ZW5zaW9ucyBidWlsdCB3aXRoIHRoYXQgY29tcGlsZXIuCi0KLQotUGFja2FnaW5nCi0tLS0tLS0tLS0KLQotVGhpcyBwb3J0IGlzIHBhY2thZ2VkIGFzIGZvbGxvd3M6Ci0tIHB5dGhvbi0yLjYtb3MyZW14LWJpbi0wMz8/Pz8uemlwICAoYmluYXJpZXMsIGxpYnJhcnkgbW9kdWxlcykKLS0gcHl0aG9uLTIuNi1vczJlbXgtc3JjLTAzPz8/PyAgICAgIChwYXRjaGVzK21ha2VmaWxlcyBmb3Igbm9uLVB5dGhvbiBjb2RlKQotCi1BcyBhbGwgdGhlIFB5dGhvbiBzcGVjaWZpYyBwYXRjaGVzIGZvciB0aGUgcG9ydCBhcmUgbm93IHBhcnQgb2YgdGhlIAotUHl0aG9uIHJlbGVhc2UgdGFyYmFsbCwgb25seSB0aGUgcGF0Y2hlcyBhbmQgbWFrZWZpbGVzIGludm9sdmVkIGluIAotYnVpbGRpbmcgZXh0ZXJuYWwgbGlicmFyaWVzIGZvciBvcHRpb25hbCBleHRlbnNpb25zIGFyZSBpbmNsdWRlZCBpbiAKLXRoZSBzb3VyY2UgYXJjaGl2ZS4KLQotRG9jdW1lbnRhdGlvbiBmb3IgdGhlIFB5dGhvbiBsYW5ndWFnZSwgYXMgd2VsbCBhcyB0aGUgUHl0aG9uIDIuNiAKLXNvdXJjZSBkaXN0aWJ1dGlvbiwgY2FuIGJlIG9idGFpbmVkIGZyb20gdGhlIFB5dGhvbiB3ZWJzaXRlIAotKGh0dHA6Ly93d3cucHl0aG9uLm9yZy8pIG9yIHRoZSBQeXRob24gcHJvamVjdCBwYWdlcyBhdCBTb3VyY2Vmb3JnZSAKLShodHRwOi8vc2YubmV0L3Byb2plY3RzL3B5dGhvbi8pLgotCi0KLUluc3RhbGxhdGlvbgotLS0tLS0tLS0tLS0tCi0KLU9idGFpbiBhbmQgaW5zdGFsbCwgYXMgcGVyIHRoZSBpbmNsdWRlZCBpbnN0cnVjdGlvbnMsIHRoZSBFTVggcnVudGltZSAKLXBhY2thZ2UuCi0KLVVucGFjayB0aGlzIGFyY2hpdmUsIHByZXNlcnZpbmcgdGhlIHN1YmRpcmVjdG9yaWVzLCBpbiB0aGUgcm9vdCBkaXJlY3RvcnkgCi1vZiB0aGUgZHJpdmUgd2hlcmUgeW91IHdhbnQgUHl0aG9uIHRvIGxpdmUuCi0KLUFkZCB0aGUgUHl0aG9uIGRpcmVjdG9yeSAoZWcgQzpcUHl0aG9uMjYpIHRvIHRoZSBQQVRIIGFuZCBMSUJQQVRIIAotdmFyaWFibGVzIGluIENPTkZJRy5TWVMuCi0KLVlvdSBzaG91bGQgdGhlbiBzZXQgdGhlIFBZVEhPTkhPTUUgYW5kIFBZVEhPTlBBVEggZW52aXJvbm1lbnQgdmFyaWFibGVzIAotaW4gQ09ORklHLlNZUy4KLQotUFlUSE9OSE9NRSBzaG91bGQgYmUgc2V0IHRvIFB5dGhvbidzIHRvcCBsZXZlbCBkaXJlY3RvcnkuICBQWVRIT05QQVRIIAotc2hvdWxkIGJlIHNldCB0byB0aGUgc2VtaWNvbG9uIHNlcGFyYXRlZCBsaXN0IG9mIHByaW5jaXBhbCBQeXRob24gbGlicmFyeSAKLWRpcmVjdG9yaWVzLgotSSB1c2U6Ci0gIFNFVCBQWVRIT05IT01FPUY6L1B5dGhvbjI2Ci0gIFNFVCBQWVRIT05QQVRIPUY6L1B5dGhvbjI2L0xpYjtGOi9QeXRob24yNi9MaWIvcGxhdC1vczJlbXg7Ci0gICAgICAgICAgICAgICAgIEY6L1B5dGhvbjI2L0xpYi9saWItZHlubG9hZDtGOi9QeXRob24yNi9MaWIvc2l0ZS1wYWNrYWdlcwotCi1OT1RFITogIHRoZSBQWVRIT05QQVRIIHNldHRpbmcgYWJvdmUgaXMgbGluZXdyYXBwZWQgZm9yIHRoaXMgZG9jdW1lbnQgLSBpdCAKLXNob3VsZCBhbGwgYmUgb24gb25lIGxpbmUgaW4gQ09ORklHLlNZUyEKLQotSWYgeW91IHdpc2ggdG8gdXNlIHRoZSBjdXJzZXMgbW9kdWxlLCB5b3Ugc2hvdWxkIHNldCB0aGUgVEVSTSBhbmQgVEVSTUlORk8gCi1lbnZpcm9ubWVudCB2YXJpYWJsZXMgYXBwcm9wcmlhdGVseS4KLQotSWYgeW91IGRvbid0IGFscmVhZHkgaGF2ZSBuY3Vyc2VzIGluc3RhbGxlZCwgSSBoYXZlIGluY2x1ZGVkIGEgY29weSBvZiB0aGUgCi1FTVggc3Vic2V0IG9mIHRoZSBUZXJtaW5mbyBkYXRhYmFzZSBpbmNsdWRlZCB3aXRoIHRoZSBuY3Vyc2VzLTUuMiBzb3VyY2UgCi1kaXN0cmlidXRpb24uICBUaGlzIGNhbiBiZSB1c2VkIGJ5IHNldHRpbmcgdGhlIFRFUk1JTkZPIGVudmlyb25tZW50IHZhcmlhYmxlIAotdG8gdGhlIHBhdGggb2YgdGhlIFRlcm1pbmZvIHN1YmRpcmVjdG9yeSBiZWxvdyB0aGUgUHl0aG9uIGhvbWUgZGlyZWN0b3J5LgotT24gbXkgc3lzdGVtIHRoaXMgbG9va3MgbGlrZToKLSAgU0VUIFRFUk1JTkZPPUY6L1B5dGhvbjI2L1Rlcm1pbmZvCi0KLUZvciB0aGUgVEVSTSBlbnZpcm9ubWVudCB2YXJpYWJsZSwgSSB3b3VsZCB0cnkgb25lIG9mIHRoZSBmb2xsb3dpbmc6Ci0gIFNFVCBURVJNPWFuc2kKLSAgU0VUIFRFUk09b3MyCi0gIFNFVCBURVJNPXdpbmRvdwotCi1Zb3Ugd2lsbCBoYXZlIHRvIHJlYm9vdCB5b3VyIHN5c3RlbSBmb3IgdGhlc2UgY2hhbmdlcyB0byBDT05GSUcuU1lTIHRvIHRha2UgCi1lZmZlY3QuCi0KLUlmIHlvdSB3aXNoIHRvIGNvbXBpbGUgYWxsIHRoZSBpbmNsdWRlZCBQeXRob24gbGlicmFyeSBtb2R1bGVzIHRvIGJ5dGVjb2RlLCAKLXlvdSBjYW4gY2hhbmdlIGludG8gdGhlIFB5dGhvbiBob21lIGRpcmVjdG9yeSBhbmQgcnVuIHRoZSBDT01QSUxFQUxMLkNNRCAKLWJhdGNoIGZpbGUuCi0KLVlvdSBjYW4gZXhlY3V0ZSB0aGUgcmVncmVzc2lvbiB0ZXN0cyBpbmNsdWRlZCB3aXRoIHRoZSBQeXRob24gMi42IHNvdXJjZSAKLWRpc3RyaWJ1dGlvbiBieSBjaGFuZ2luZyB0byB0aGUgUHl0aG9uIDIuNiBob21lIGRpcmVjdG9yeSBhbmQgZXhlY3V0aW5nIHRoZSAKLVJFR1JURVNULkNNRCBiYXRjaCBmaWxlLiAgVGhlIGZvbGxvd2luZyB0ZXN0cyBhcmUga25vd24gdG8gZmFpbCBhdCB0aGlzIAotdGltZToKLS0gdGVzdF9taGxpYiAoSSBkb24ndCBrbm93IG9mIGFueSBwb3J0IG9mIE1IIHRvIE9TLzIpOwotLSB0ZXN0X3N0cnB0aW1lIChzZWUgIllPVSBIQVZFIEJFRU4gV0FSTkVEIiBpdGVtIDIyKTsKLS0gdGVzdF90aW1lIChzZWUgIllPVSBIQVZFIEJFRU4gV0FSTkVEIiBpdGVtIDIyKTsKLS0gdGVzdF9wb3NpeHBhdGggKHNlZSAiWU9VIEhBVkUgQkVFTiBXQVJORUQiIGl0ZW0gMjMpLgotCi1Ob3RlIHRoYXQgc29tZSBvZiB0aGUgbmV0d29yayByZWxhdGVkIHRlc3RzIGV4cGVjdCB0aGUgbG9vcGJhY2sgaW50ZXJmYWNlCi0oaW50ZXJmYWNlICJsbyIsIHdpdGggSVAgYWRkcmVzcyAxMjcuMC4wLjEpIHRvIGJlIGVuYWJsZWQsIHdoaWNoIGZyb20gbXkKLWV4cGVyaWVuY2UgaXMgbm90IHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24uICBBZGRpdGlvbmFsbHksIHRlc3RfcG9wZW4yCi1leHBlY3RzIHRoZSAiY2F0IiB1dGlsaXR5IChzdWNoIGFzIGZvdW5kIGluIHBvcnRzIG9mIHRoZSBHTlUgdG9vbHMpIHRvCi1iZSBpbnN0YWxsZWQuCi0KLQotQnVpbGRpbmcgZnJvbSBzb3VyY2UKLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVdpdGggdGhlIEVNWCBwb3J0IG5vdyBjaGVja2VkIGludG8gUHl0aG9uJ3MgQ1ZTIHJlcG9zaXRvcnksIHRoZSBidWlsZCAKLWluZnJhc3RydWN0dXJlIGlzIHBhcnQgb2YgdGhlIFB5dGhvbiByZWxlYXNlIHNvdXJjZWJhbGwuCi0KLVByZXJlcXVpc2l0ZXMKLQotRmlyc3QgYW5kIGZvcmVtb3N0LCB5b3UgbmVlZCBhbiBvcGVyYXRpb25hbCBFTVggZGV2ZWxvcG1lbnQgaW5zdGFsbGF0aW9uIC0gCi1FTVggdjAuOWQgd2l0aCBmaXgwNCAodGhlIGxhdGVzdCBhdCB0aW1lIG9mIHdyaXRpbmcpICYgdGhlIGdjYyAyLjguMSAKLWNvbXBpbGVyIHJlbGVhc2VkIGJ5IEViZXJoYXJkIE1hdHRlcyBpcyB0aGUgcmVjb21tZW5kZWQgc2V0dXAuCi0KLUlmIHlvdSBoYXZlIGEgZGlmZmVyZW50IHZlcnNpb24gb2YgZ2NjIGluc3RhbGxlZCwgc2VlICJZT1UgSEFWRSBCRUVOIAotV0FSTkVEIiBpdGVtIDE2LgotCi1PdGhlciBpdGVtcyBvZiBzb2Z0d2FyZSByZXF1aXJlZDotCi0KLS0gR05VIG1ha2UgKEknbSB1c2luZyB2My43Ni4xKQotLSBybSwgY3AsIG1rZGlyIGZyb20gdGhlIEdOVSBmaWxlIHV0aWxpdGllcyBwYWNrYWdlCi0tIEdOVSBmaW5kCi0tIEdOVSBzZWQKLQotUHJvY2VkdXJlCi0KLTAuIGFsbCBjaGFuZ2VzIG1lbnRpb25lZCBhcHBseSB0byBmaWxlcyBpbiB0aGUgUEMvb3MyZW14IHN1YmRpcmVjdG9yeSAKLSAgIG9mIHRoZSBQeXRob24gcmVsZWFzZSBzb3VyY2UgdHJlZS4gIG1ha2UgaXMgYWxzbyBleGVjdXRlZCBmcm9tIHRoaXMgCi0gICBkaXJlY3RvcnksIHNvIGNoYW5nZSBpbnRvIHRoaXMgZGlyZWN0b3J5IGJlZm9yZSBwcm9jZWVkaW5nLgotCi0xLiBkZWNpZGUgaWYgeW91IG5lZWQgdG8gY2hhbmdlIHRoZSBsb2NhdGlvbiBvZiB0aGUgUHl0aG9uIGluc3RhbGxhdGlvbi4KLSAgIElmIHlvdSB3aXNoIHRvIGRvIHRoaXMsIHNldCB0aGUgdmFsdWUgb2YgdGhlIE1ha2VmaWxlIHZhcmlhYmxlIExJQl9ESVIgCi0gICB0byB0aGUgZGlyZWN0b3J5IHlvdSB3aXNoIHRvIHVzZSBmb3IgUFlUSE9OSE9NRSAKLSAgIChlZyAvdXNyL2xvY2FsL2xpYi9weXRob24yLjYpLgotCi0gICBJZiB5b3Ugd2FudCBQeXRob24gdG8gZmluZCBpdHMgbGlicmFyeSB3aXRob3V0IHRoZSBQWVRIT05IT01FIAotICAgZW52aXJvbm1lbnQgdmFyaWFibGUgc2V0LCBzZXQgdGhlIHZhbHVlIG9mIHRoZSBNYWtlZmlsZSB2YXJpYWJsZSAKLSAgIEZJWEVEX1BZSE9NRSB0byAieWVzIiAodW5jb21tZW50IHRoZSBhcHByb3ByaWF0ZSBsaW5lKS4KLQotMi4gSWYgeW91IHdpc2ggdGhlIFB5dGhvbiBleGVjdXRhYmxlcyAocHl0aG9uLmV4ZSwgcHl0aG9ucG0uZXhlICYgcGdlbi5leGUpIAotICAgdG8gYmUgaW5zdGFsbGVkIGluIGEgZGlyZWN0b3J5IG90aGVyIHRoYW4gdGhlIFBZVEhPTkhPTUUgZGlyZWN0b3J5LCBzZXQgCi0gICB0aGUgdmFsdWUgb2YgdGhlIE1ha2VmaWxlIHZhcmlhYmxlIEVYRV9ESVIgdG8gdGhlIGFwcHJvcHJpYXRlIGRpcmVjdG9yeS4KLQotMy4gSWYgeW91IHdpc2ggdGhlIFB5dGhvbiBjb3JlIERMTCAocHl0aG9uMzMuZGxsKSB0byBiZSBpbnN0YWxsZWQgaW4gYSAKLSAgIGRpcmVjdG9yeSBvdGhlciB0aGFuIHRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggdGhlIFB5dGhvbiBleGVjdXRhYmxlcyBhcmUgCi0gICBpbnN0YWxsZWQgKGJ5IGRlZmF1bHQsIHRoZSBQWVRIT05IT01FIGRpcmVjdG9yeSksIHNldCB0aGUgdmFsdWUgb2YgdGhlIAotICAgTWFrZWZpbGUgdmFyaWFibGUgRExMX0RJUiB0byB0aGUgYXBwcm9wcmlhdGUgZGlyZWN0b3J5LiAgVGhpcyBETEwgbXVzdCAKLSAgIGJlIHBsYWNlZCBpbiBhIGRpcmVjdG9yeSBvbiB0aGUgc3lzdGVtJ3MgTElCUEFUSCwgb3IgdGhhdCBnZXRzIHNldCAKLSAgIHdpdGggQkVHSU5MSUJQQVRIIG9yIEVORExJQlBBVEguCi0KLTQuIElmIHlvdSBoYXZlIGluc3RhbGxlZCBhbnkgb2YgdGhlIGxpYnJhcmllcyB0aGF0IGNhbiBiZSB1c2VkIHRvIGJ1aWxkIAotICAgb3B0aW9uYWwgUHl0aG9uIG1vZHVsZXMsIHNldCB0aGUgdmFsdWUgb2YgdGhlIHJlbGV2YW50IEhBVkVfPHBhY2thZ2U+IAotICAgTWFrZWZpbGUgdmFyaWFibGUgdG8gInllcyIuICBUaGUgTWFrZWZpbGUgY3VycmVudGx5IHN1cHBvcnRzOgotCi0gICBsaWJyYXJ5ICAgICAgICAgICAgICAgTWFrZWZpbGUgdmFyaWFibGUKLSAgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KLSAgIHpsaWIgKDEuMS40KSAgICAgICAgICBIQVZFX1pMSUIKLSAgIEdOVSBVbHRyYUZhc3QgQ3J5cHQgICBIQVZFX1VGQwotICAgVGNsL1RrICAgICAgICAgICAgICAgIEhBVkVfVENMVEsgKG5vdCBrbm93biB0byB3b3JrKQotICAgR05VIFJlYWRsaW5lICAgICAgICAgIEhBVkVfR1JFQURMSU5FCi0gICBuY3Vyc2VzICAgICAgICAgICAgICAgSEFWRV9OQ1VSU0VTCi0gICBHTlUgZ2RibSAgICAgICAgICAgICAgSEFWRV9HREJNCi0gICBsaWJiejIgICAgICAgICAgICAgICAgSEFWRV9CWjIKLSAgIE9wZW5TU0wgICAgICAgICAgICAgICBIQVZFX09QRU5TU0wKLQotICAgUGxlYXNlIG5vdGUgdGhhdCB5b3UgbmVlZCB0byBjaGVjayB0aGF0IHdoYXQgeW91IGhhdmUgaW5zdGFsbGVkIAotICAgaXMgY29tcGF0aWJsZSB3aXRoIFB5dGhvbidzIGJ1aWxkIG9wdGlvbnMuICBJbiBwYXJ0aWN1bGFyLCB0aGUgCi0gICBCU0QgREIgdjEuODUgbGlicmFyeSBuZWVkcyB0byBiZSByZWJ1aWx0IHdpdGggYSBzb3VyY2UgcGF0Y2ggZm9yIAotICAgbXVsdGl0aHJlYWQgc3VwcG9ydCAoZG9lc24ndCBjaGFuZ2UgdGhlIGxpYnJhcnkncyByZWVudHJhbnQgc3RhdHVzIAotICAgYnV0IGFsbG93cyBpdCB0byBiZSBsaW5rZWQgdG8gUHl0aG9uIHdoaWNoIGlzIG11bHRpdGhyZWFkZWQpLiAgCi0gICBXaWRlbHkgYXZhaWxhYmxlIGJpbmFyeSBwYWNrYWdlcyBvZiBvdGhlciBsaWJyYXJ5cyAmIERMTHMgYXJlIAotICAgbm90IGJ1aWx0L2xpbmtlZCB3aXRoIG11bHRpdGhyZWFkIHN1cHBvcnQuICBCZXdhcmUhCi0KLSAgIEFsc28gbm90ZSB0aGF0IHRoZSBNYWtlZmlsZSBjdXJyZW50bHkgZXhwZWN0cyBhbnkgbGlicmFyaWVzIHRvIGJlIAotICAgZm91bmQgd2l0aCB0aGUgZGVmYXVsdCBsaWJyYXJ5IHNlYXJjaCBwYXRoLiAgWW91IG1heSBuZWVkIHRvIGFkZCAKLSAgIC1MIHN3aXRjaGVzIHRvIHRoZSBMREZMQUdTIE1ha2VmaWxlIHZhcmlhYmxlIGlmIHlvdSBoYXZlIGluc3RhbGxlZCAKLSAgIGxpYnJhcmllcyBpbiBkaXJlY3RvcmllcyBub3QgaW4gdGhlIGRlZmF1bHQgc2VhcmNoIHBhdGggKHdoaWNoIGNhbiAKLSAgIGJlIGNvbnRyb2xsZWQgYnkgdGhlIExJQlJBUllfUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZSB1c2VkIGJ5IEVNWCkuCi0KLTUuIG1ha2UKLQotICAgSXQgaXMgdXN1YWxseSBhIGdvb2QgaWRlYSB0byByZWRpcmVjdCB0aGUgc3Rkb3V0IGFuZCBzdGRlcnIgc3RyZWFtcyAKLSAgIG9mIHRoZSBtYWtlIHByb2Nlc3MgdG8gbG9nIGZpbGVzLCBzbyB0aGF0IHlvdSBjYW4gcmV2aWV3IGFueSBtZXNzYWdlcy4gCi0KLTYuIG1ha2UgdGVzdAotCi0gICBUaGlzIHJ1bnMgdGhlIFB5dGhvbiByZWdyZXNzaW9uIHRlc3RzLCBhbmQgY29tcGxldGlvbiBpcyBhIHNpZ24gb2YgCi0gICBhIHVzYWJsZSBidWlsZC4gIFlvdSBzaG91bGQgY2hlY2sgdGhlIGxpc3Qgb2Ygc2tpcHBlZCBtb2R1bGVzIHRvIAotICAgZW5zdXJlIHRoYXQgYW55IG9wdGlvbmFsIG1vZHVsZXMgeW91IHNlbGVjdGVkIGhhdmUgYmVlbiBidWlsdDsgCi0gICBjaGVja2luZyB0aGUgbGlzdCBvZiBmYWlsdXJlcyBhZ2FpbnN0IHRoZSBsaXN0IG9mIGtub3duIGZhaWx1cmVzIAotICAgZWxzZXdoZXJlIGluIHRoaXMgZG9jdW1lbnQgaXMgYWxzbyBwcnVkZW50LgotCi03LiBtYWtlIGluc3RhbGwKLSAgID4+Pj4+PiBOT1QgWUVUIENPTVBMRVRFIDw8PDw8PCAKLQotOC4gY2hhbmdlIHRvIGEgZGlyZWN0b3J5IG91dHNpZGUgdGhlIFB5dGhvbiBzb3VyY2UgdHJlZSBhbmQgc3RhcnQgUHl0aG9uLiAKLSAgIENoZWNrIHRoZSB2ZXJzaW9uIGFuZCBidWlsZCBkYXRlIHRvIGNvbmZpcm0gc2F0aXNmYWN0b3J5IGluc3RhbGxhdGlvbi4KLQotCi1ZT1UgSEFWRSBCRUVOIFdBUk5FRCEhCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUkga25vdyBhYm91dCBhIG51bWJlciBvZiBuYXN0aWVzIGluIHRoaXMgcG9ydC4KLQotMS4gIEViZXJoYXJkIE1hdHRlcywgYXV0aG9yIG9mIEVNWCwgd3JpdGVzIGluIGhpcyBkb2N1bWVudGF0aW9uIHRoYXQgZm9yaygpIAotaXMgdmVyeSBpbmVmZmljaWVudCBpbiB0aGUgT1MvMiBlbnZpcm9ubWVudC4gIEl0IGFsc28gcmVxdWlyZXMgdGhhdCB0aGUgCi1leGVjdXRhYmxlIGJlIGxpbmtlZCBpbiBhLm91dCBmb3JtYXQgcmF0aGVyIHRoYW4gT01GLiAgVXNlIHRoZSBvcy5leGVjIAotYW5kL29yIHRoZSBvcy5zcGF3biBmYW1pbHkgb2YgZnVuY3Rpb25zIHdoZXJlIHBvc3NpYmxlLgotCi0yLiAgSW4gdGhlIGFic2VuY2Ugb2YgR05VIFJlYWRsaW5lLCB0ZXJtaW5hdGluZyB0aGUgaW50ZXJwcmV0ZXIgcmVxdWlyZXMgYSAKLWNvbnRyb2wtWiAoXlopIGZvbGxvd2VkIGJ5IGEgY2FycmlhZ2UgcmV0dXJuLiAgSmVmZiBSdXNoIGRvY3VtZW50ZWQgdGhpcyAKLXByb2JsZW0gaW4gaGlzIFB5dGhvbiAxLjUuMiBwb3J0LiAgV2l0aCBSZWFkbGluZSwgYSBjb250cm9sLUQgKF5EKSB3b3JrcyAKLWFzIHBlciB0aGUgc3RhbmRhcmQgVW5peCBlbnZpcm9ubWVudC4KLQotMy4gIEVNWCBvbmx5IGhhcyBhIHBhcnRpYWwgaW1wbGVtZW50YXRpb24gb2YgZmNudGwoKS4gIFRoZSBmY250bCBtb2R1bGUgCi1pbiB0aGlzIHBvcnQgc3VwcG9ydHMgd2hhdCBFTVggc3VwcG9ydHMuICBJZiBmY250bCBpcyBpbXBvcnRhbnQgdG8geW91LCAKLXBsZWFzZSByZXZpZXcgdGhlIEVNWCBDIExpYnJhcnkgUmVmZXJlbmNlIChpbmNsdWRlZCBpbiAuSU5GIGZvcm1hdCBpbiB0aGUgCi1FTVhWSUVXLlpJUCBhcmNoaXZlIGFzIHBhcnQgb2YgdGhlIGNvbXBsZXRlIEVNWCBkZXZlbG9wbWVudCB0b29scyBzdWl0ZSkuCi1CZWNhdXNlIG9mIG90aGVyIHNpZGUtZWZmZWN0cyBJIGhhdmUgbW9kaWZpZWQgdGhlIHRlc3RfZmNudGwucHkgdGVzdCAKLXNjcmlwdCB0byBkZWFjdGl2YXRlIHRoZSBleGVyY2lzaW5nIG9mIHRoZSBtaXNzaW5nIGZ1bmN0aW9uYWxpdHkuCi0KLTQuICBUaGUgcmVhZGxpbmUgbW9kdWxlIGhhcyBiZWVuIGxpbmtlZCBhZ2FpbnN0IG5jdXJzZXMgcmF0aGVyIHRoYW4gdGhlIAotdGVybWNhcCBsaWJyYXJ5IHN1cHBsaWVkIHdpdGggRU1YLgotCi01LiAgSSBoYXZlIGNvbmZpZ3VyZWQgdGhpcyBwb3J0IHRvIHVzZSAiLyIgYXMgdGhlIHByZWZlcnJlZCBwYXRoIHNlcGFyYXRvciAKLWNoYXJhY3RlciwgcmF0aGVyIHRoYW4gIlwiICgnXFwnKSwgaW4gbGluZSB3aXRoIHRoZSBjb252ZW50aW9uIHN1cHBvcnRlZCAKLWJ5IEVNWC4gIEJhY2tzbGFzaGVzIGFyZSBzdGlsbCBzdXBwb3J0ZWQgb2YgY291cnNlLCBhbmQgc3RpbGwgYXBwZWFyIGluIAotdW5leHBlY3RlZCBwbGFjZXMgZHVlIHRvIG91dHNpZGUgc291cmNlcyB0aGF0IGRvbid0IGdldCBub3JtYWxpc2VkLgotCi02LiAgV2hpbGUgdGhlIERpc3RVdGlscyBjb21wb25lbnRzIGFyZSBub3cgZnVuY3Rpb25hbCwgb3RoZXIgCi1wYWNrYWdpbmcvYmluYXJ5IGhhbmRsaW5nIHRvb2xzIGFuZCB1dGlsaXRpZXMgc3VjaCBhcyB0aG9zZSBpbmNsdWRlZCBpbgotdGhlIERlbW8gYW5kIFRvb2xzIGRpcmVjdG9yaWVzIC0gZnJlZXplIGluIHBhcnRpY3VsYXIgLSBhcmUgdW5saWtlbHkgdG8gCi13b3JrLiAgSWYgeW91IGRvIGdldCB0aGVtIGdvaW5nLCBJJ2QgbGlrZSB0byBrbm93IGFib3V0IHlvdXIgc3VjY2Vzcy4KLQotNy4gIEkgaGF2ZW4ndCBzZXQgb3V0IHRvIHN1cHBvcnQgdGhlIFtCRUdJTnxFTkRdTElCUEFUSCBmdW5jdGlvbmFsaXR5IAotc3VwcG9ydGVkIGJ5IG9uZSBvZiB0aGUgZWFybGllciBwb3J0cyAoUnVzaCdzPz8pLiAgSWYgaXQgd29ya3MgbGV0IG1lIGtub3cuCi0KLTguIEFzIGEgcmVzdWx0IG9mIHRoZSBsaW1pdGF0aW9ucyBpbXBvc2VkIGJ5IEVNWCdzIGxpYnJhcnkgcm91dGluZXMsIHRoZSAKLXN0YW5kYXJkIGV4dGVuc2lvbiBtb2R1bGUgcHdkIG9ubHkgc3ludGhlc2lzZXMgYSBzaW1wbGUgcGFzc3dkIGRhdGFiYXNlLCAKLWFuZCB0aGUgZ3JwIG1vZHVsZSBjYW5ub3QgYmUgc3VwcG9ydGVkIGF0IGFsbC4KLQotSSBoYXZlIHdyaXR0ZW4gcHVyZSBQeXRob24gc3Vic3RpdHV0ZXMgZm9yIHB3ZCBhbmQgZ3JwLCB3aGljaCBjYW4gcHJvY2VzcyAKLXJlYWwgcGFzc3dkIGFuZCBncm91cCBmaWxlcyBmb3IgdGhvc2UgYXBwbGljYXRpb25zIChzdWNoIGFzIE1haWxNYW4pIHRoYXQgCi1yZXF1aXJlIG1vcmUgdGhhbiBFTVggZW11bGF0ZXMuICBJIGhhdmUgcGxhY2VkIHB3ZC5weSBhbmQgZ3JwLnB5IGluIAotTGliL3BsYXQtb3MyZW14LCB3aGljaCBpcyB1c3VhbGx5IGJlZm9yZSBMaWIvbGliLWR5bmxvYWQgKHdoaWNoIGNvbnRhaW5zIAotcHdkLnB5ZCkgaW4gdGhlIFBZVEhPTlBBVEguICBJZiB5b3UgaGF2ZSBiZWNvbWUgYXR0YWNoZWQgdG8gd2hhdCBwd2QucHlkIAotc3VwcG9ydHMsIHlvdSBjYW4gcHV0IExpYi9saWItZHlubG9hZCBiZWZvcmUgTGliL3BsYXQtb3MyZW14IGluIFBZVEhPTlBBVEggCi1vciBkZWxldGUvcmVuYW1lIHB3ZC5weSAmIGdycC5weS4KLQotcHdkLnB5ICYgZ3JwLnB5IHN1cHBvcnQgbG9jYXRpbmcgdGhlaXIgZGF0YSBmaWxlcyBieSBsb29raW5nIGluIHRoZSAKLWVudmlyb25tZW50IGZvciB0aGVtIGluIHRoZSBmb2xsb3dpbmcgc2VxdWVuY2U6Ci1wd2QucHk6ICAkRVRDX1BBU1NXRCAgICAgICAgICAgICAoJUVUQ19QQVNTV0QlKQotICAgICAgICAgJEVUQy9wYXNzd2QgICAgICAgICAgICAgKCVFVEMlL3Bhc3N3ZCkKLSAgICAgICAgICRQWVRIT05IT01FL0V0Yy9wYXNzd2QgICglUFlUSE9OSE9NRSUvRXRjL3Bhc3N3ZCkKLWdycC5weTogICRFVENfR1JPVVAgICAgICAgICAgICAgICglRVRDX0dST1VQJSkKLSAgICAgICAgICRFVEMvZ3JvdXAgICAgICAgICAgICAgICglRVRDJS9ncm91cCkKLSAgICAgICAgICRQWVRIT05IT01FL0V0Yy9ncm91cCAgICglUFlUSE9OSE9NRSUvRXRjL2dyb3VwKQotCi1UaGUgRVRDX1BBU1NXRCBhbmQgRVRDX0dST1VQIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgaW50ZW5kZWQgdG8gYWxsb3cgCi1zdXBwb3J0IGZvciBtdWx0aXBsZSBwYXNzd2QvZ3JwIGZpbGVzLCB3aGVyZSBvdGhlciBhcHBsaWNhdGlvbnMgbWF5IG5vdCAKLXN1cHBvcnQgYXMgd2lkZSBhIHZhcmlldHkgb2YgaW5wdXQgdmFyaWF0aW9ucyAoZHJpdmUgcmVtYXBwaW5ncywgCi1zZXBhcmF0b3JzIGV0YykuCi0KLUJvdGggbW9kdWxlcyBzdXBwb3J0IHVzaW5nIGVpdGhlciB0aGUgIjoiIGNoYXJhY3RlciAoVW5peCBzdGFuZGFyZCkgb3IgCi0iOyIgKE9TLzIsIERPUywgV2luZG93cyBzdGFuZGFyZCkgZmllbGQgc2VwYXJhdG9yIGNoYXJhY3RlciwgYW5kIHB3ZC5weSAKLWltcGxlbWVudHMgdGhlIGZvbGxvd2luZyBkcml2ZSBsZXR0ZXIgY29udmVyc2lvbnMgZm9yIHRoZSBob21lX2RpcmVjdG9yeSBhbmQgCi1zaGVsbCBmaWVsZHMgKGZvciB0aGUgIjoiIHNlcGFyYXRvciBvbmx5KToKLSAgICAgICAgICR4ICAtPiAgeDoKLSAgICAgICAgIHg7ICAtPiAgeDoKLQotRXhhbXBsZSB2ZXJzaW9ucyBvZiBwYXNzd2QgYW5kIGdyb3VwIGFyZSBpbiB0aGUgRXRjIHN1YmRpcmVjdG9yeS4gIFRoZSAKLXJlZ3Jlc3Npb24gdGVzdHMgKHRlc3RfcHdkIGFuZCB0ZXN0X2dycCkgd2lsbCBmYWlsIGlmIHZhbGlkIHBhc3N3b3JkIGFuZCAKLWdyb3VwIGZpbGVzIGNhbm5vdCBiZSBmb3VuZCwgYnV0IHNob3VsZCBwYXNzIG90aGVyd2lzZS4KLQotQmUgYXdhcmUgdGhhdCBQeXRob24ncyBwd2QgJiBncm91cCBtb2R1bGVzIGFyZSBmb3IgcmVhZGluZyBwYXNzd29yZCBhbmQgCi1ncm91cCBpbmZvcm1hdGlvbiBvbmx5LgotCi0xMS4gRU1YJ3MgdGVybWlvcyByb3V0aW5lcyBkb24ndCBzdXBwb3J0IGFsbCBvZiB0aGUgZnVuY3Rpb25hbGl0eSBub3cgCi1leHBvc2VkIGJ5IHRoZSB0ZXJtaW9zIG1vZHVsZSAtIHJlZmVyIHRvIHRoZSBFTVggZG9jdW1lbnRhdGlvbiB0byBmaW5kIAotb3V0IHdoYXQgaXMgc3VwcG9ydGVkLgotCi0xMi4gVGhlIGNhc2Ugc2Vuc2l0aXZlIGltcG9ydCBzZW1hbnRpY3MgaW50cm9kdWNlZCBpbiBQeXRob24gMi4xIGZvciBvdGhlciAKLWNhc2UgaW5zZW5zaXRpdmUgYnV0IGNhc2UgcHJlc2VydmluZyBmaWxlL29wZXJhdGluZyBzeXN0ZW1zIChXaW5kb3dzIGV0YyksIAotaGF2ZSBiZWVuIGluY29ycG9yYXRlZCBpbnRvIHRoaXMgcG9ydCwgYW5kIGFyZSBhY3RpdmUgYnkgZGVmYXVsdC4gIFNldHRpbmcgCi10aGUgUFlUSE9OQ0FTRU9LIGVudmlyb25tZW50IHZhcmlhYmxlICh0byBhbnkgdmFsdWUpIHJldmVydHMgdG8gdGhlIAotcHJldmlvdXMgKGNhc2UgaW5zZW5zaXRpdmUpIHNlbWFudGljcy4gIFRoaXMgY2FuIGJlIGFuIGlzc3VlIHdpdGggc29tZSAKLWZpbGUgbWFuYWdlbWVudCB1dGlsaXRpZXMgdGhhdCBkbyBub3QgcHJlc2VydmUgdGhlIGNhc2Ugb2YgZmlsZSBhbmQKLWRpcmVjdG9yeSBuYW1lcy4KLQotMTMuIEJlY2F1c2UgSSBhbSBzdGF0aWNhbGx5IGxpbmtpbmcgbmN1cnNlcywgdGhlIF9jdXJzZXNfcGFuZWwgCi1tb2R1bGUgaGFzIHBvdGVudGlhbCBwcm9ibGVtcyBhcmlzaW5nIGZyb20gc2VwYXJhdGUgbGlicmFyeSBkYXRhIGFyZWFzLgotVG8gYXZvaWQgdGhpcywgSSBoYXZlIGNvbmZpZ3VyZWQgdGhlIF9jdXJzZXNfLnB5ZCAoaW1wb3J0ZWQgYXMgCi0iX2N1cnNlc19wYW5lbCIpIHRvIGltcG9ydCB0aGUgbmN1cnNlcyBzeW1ib2xzIGl0IG5lZWRzIGZyb20gX2N1cnNlcy5kbGwgCi0od2hpY2ggaXMgdGhlIGN1cnNlcyBtb2R1bGUsIGJ1dCB3aXRoIGEgLmRsbCBleHRlbnNpb24gcmF0aGVyIHRoYW4gLnB5ZCAKLXNvIHRoYXQgdGhlIGR5bmFtaWMgbG9hZGVyIGNhbiBhY3R1YWxseSBpbXBvcnQgdGhlIHN5bWJvbHMgZnJvbSBpdCBhcyBhIAotRExMKS4KLQotVGhlIHNpdGUgbW9kdWxlIChMaWIvc2l0ZS5weSkgaGFzIGNvZGUgYWRkZWQgdG8gdHdlYWsgQkVHSU5MSUJQQVRIIHNvCi10aGF0IF9jdXJzZXMuZGxsIGlzIGZvdW5kIHdoZW4gX2N1cnNlc19wYW5lbCBpcyBpbXBvcnRlZC4gIElmIHlvdSBoYXZlCi1wcm9ibGVtcyBhdHRlbXB0aW5nIHRvIHVzZSB0aGUgX2N1cnNlc19wYW5lbCBzdXBwb3J0IHBsZWFzZSBsZXQgbWUga25vdywKLWFuZCBJJ2xsIGhhdmUgYW5vdGhlciBsb29rIGF0IHRoaXMuCi0KLTE0LiBzeXMucGxhdGZvcm0gcmVwb3J0cyAib3MyZW14IiBpbnN0ZWFkIG9mICJvczIiLiAgb3MubmFtZSBzdGlsbCAKLXJlcG9ydHMgIm9zMiIuICBUaGlzIGNoYW5nZSB3YXMgdG8gbWFrZSBpdCBlYXNpZXIgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiAKLXRoZSBWQUMrKyBidWlsZCAoZm9ybWVybHkgbWFpbnRhaW5lZCBieSBNaWNoYWVsIE11bGxlcikgYW5kIHRoZSBFTVggYnVpbGQgCi0odGhpcyBwb3J0KSwgcHJpbmNpcGFsbHkgZm9yIERpc3RVdGlscy4KLQotMTUuIGl0IGFwcGVhcnMgdGhhdCB0aGUgJVcgc3Vic3RpdHV0aW9uIGluIHRoZSBFTVggc3RyZnRpbWUoKSByb3V0aW5lIGhhcyAKLWFuIG9mZi1ieS1vbmUgYnVnLiAgc3RyZnRpbWUgd2FzIGxpc3RlZCBhcyBwYXNzaW5nIHRoZSByZWdyZXNzaW9uIHRlc3RzIAotaW4gcHJldmlvdXMgcmVsZWFzZXMsIGJ1dCB0aGlzIGZhY3QgYXBwZWFycyB0byBoYXZlIGJlZW4gYW4gb3ZlcnNpZ2h0IGluIAotdGhlIHJlZ3Jlc3Npb24gdGVzdCBzdWl0ZS4gIFRvIGZpeCB0aGlzIHJlYWxseSByZXF1aXJlcyBhIHBvcnRhYmxlIAotc3RyZnRpbWUgcm91dGluZSAtIEknbSBsb29raW5nIGludG8gdXNpbmcgb25lIGZyb20gRnJlZUJTRCwgYnV0IGl0cyBub3QgCi1yZWFkeSB5ZXQuCi0KLTE2LiBJIGhhdmUgc3VjY2Vzc2Z1bGx5IGJ1aWx0IHRoaXMgcG9ydCB3aXRoIEFuZHkgWmFib2xvdG55J3MgcG9ydHMgb2YgCi1wZ2NjIDIuOTUgYW5kIGdjYyAzLjIuMSwgaW4gYWRkaXRpb24gdG8gRU0ncyBnY2MgMi44LjEuCi0KLUkgaGF2ZSBub3QgYXR0ZW1wdGVkIHRvIGNvbXBpbGUgUHl0aG9uIHdpdGggYW55IHZlcnNpb24gb2YgZ2NjIHByaW9yIHRvIAotdjIuOC4xLgotCi1UaGlzIHJlbGVhc2Ugc2VlcyB0aGUgZGVmYXVsdCBvcHRpbWlzYXRpb24gY2hhbmdlIHRvIAotIi1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtbXByb2JlIi4gIFRoaXMgd29ya3MgZmluZSB0b28gZm9yIHBnY2MgMi45NSAKLWJ1dCBub3QgZm9yIGdjYyAzLjIuMS4KLQotV2l0aCBnY2MgMy4yLjEsIC1PMyBjYXVzZXMgMiB1bmV4cGVjdGVkIHRlc3QgZmFpbHVyZXM6IHRlc3RfZm9ybWF0IGFuZCAKLXRlc3RfdW5pY29kZS4gIEJvdGggdGhlc2UgdGVzdHMgcGFzcyBpZiAtTzIgaXMgaW5zdGVhZCBvZiAtTzMgd2l0aCB0aGlzIAotY29tcGlsZXIsIGFuZCB0aGUgcGVyZm9ybWFuY2UgZGlmZmVyZW5jZSBpcyBuZWdsaWdpYmxlIChpbiBjb250cmFzdCB0byAKLWdjYyAyLjguMSBhbmQgcGdjYyAyLjk1LCB3aGVyZSB0aGUgcGVyZm9ybWFuY2UgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSAKLTIgb3B0aW1pc2F0aW9uIHNldHRpbmdzIGFwcHJvYWNoZXMgMTAlKS4KLQotMTcuICBvcy5zcGF3bnYoKSBhbmQgb3Muc3Bhd252ZSgpIGV4cG9zZSBFTVgncyBsaWJyYXJ5IHJvdXRpbmVzIHJhdGhlciAKLXRoYW4gdXNlIHRoZSBlbXVsYXRpb24gaW4gb3MucHkuCi0KLUluIG9yZGVyIHRvIG1ha2UgdXNlIG9mIHNvbWUgb2YgdGhlIGZlYXR1cmVzIHRoaXMgbWFrZXMgYXZhaWxhYmxlIGluIAotdGhlIE9TLzIgZW52aXJvbm1lbnQsIHlvdSBzaG91bGQgcGVydXNlIHRoZSByZWxldmFudCBFTVggZG9jdW1lbnRhdGlvbiAKLShFTVhMSUIuSU5GIGluIHRoZSBFTVhWSUVXLlpJUCBhcmNoaXZlIGFjY29tcGFueWluZyB0aGUgRU1YIGFyY2hpdmVzIAotb24gSG9iYmVzIG9yIExFTykuICBCZSBhd2FyZSB0aGF0IEkgaGF2ZSBleHBvc2VkIGFsbCB0aGUgIm1vZGUiIG9wdGlvbnMgCi1zdXBwb3J0ZWQgYnkgRU1YLCBidXQgdGhlcmUgYXJlIGNvbWJpbmF0aW9ucyB0aGF0IGVpdGhlciBjYW5ub3QgYmUgCi1wcmFjdGljYWxseSB1c2VkIGJ5L2luIFB5dGhvbiBvciBoYXZlIHRoZSBwb3RlbnRpYWwgdG8gY29tcHJvbWlzZSB5b3VyIAotc3lzdGVtJ3Mgc3RhYmlsaXR5LgotCi0xOC4gIHB5dGhvbnBtLmV4ZSB1c2VkIHRvIGJlIGp1c3QgcHl0aG9uLmV4ZSB3aXRoIHRoZSBXSU5ET1dBUEkgbGlua2VyIAotb3B0aW9uIHNldCBpbiB0aGUgcHl0aG9ucG0uZGVmIGZpbGUuICBJbiBwcmFjdGljZSwgdGhpcyB0dXJucyBvdXQgdG8gZG8gCi1ub3RoaW5nIHVzZWZ1bC4KLQotSSBoYXZlIHdyaXR0ZW4gYSByZXBsYWNlbWVudCB3aGljaCB3cmFwcyB0aGUgUHl0aG9uIERMTCBpbiBhIGdlbnVpbmUgCi1QcmVzZW50YXRpb24gTWFuYWdlciBhcHBsaWNhdGlvbi4gIFRoaXMgdmVyc2lvbiBhY3R1YWxseSBydW5zIHRoZSAKLVB5dGhvbiBpbnRlcnByZXRlciBpbiBhIHNlcGFyYXRlIHRocmVhZCBmcm9tIHRoZSBQTSBzaGVsbCwgaW4gb3JkZXIgCi10aGF0IFB5dGhvblBNIGhhcyBhIGZ1bmN0aW9uaW5nIG1lc3NhZ2UgcXVldWUgYXMgZ29vZCBQTSBhcHBzIHNob3VsZC4KLUluIGl0cyBjdXJyZW50IHN0YXRlLCBQeXRob25QTSdzIHdpbmRvdyBpcyBoaWRkZW4uICBJdCBjYW4gYmUgZGlzcGxheWVkLCAKLWFsdGhvdWdoIGl0IHdpbGwgaGF2ZSBubyBjb250ZW50IGFzIG5vdGhpbmcgaXMgZXZlciB3cml0dGVuIHRvIHRoZSAKLXdpbmRvdy4gIE9ubHkgdGhlICJoaWRlIiBidXR0b24gaXMgYXZhaWxhYmxlLiAgQWx0aG91Z2ggdGhlIGNvZGUgCi1oYXMgc3VwcG9ydCBmb3Igc2h1dHRpbmcgUHl0aG9uUE0gZG93biB3aGVuIHRoZSBQeXRob24gaW50ZXJwcmV0ZXIgaXMgCi1zdGlsbCBidXN5ICh2aWEgdGhlICJjb250cm9sIiBtZW51KSwgdGhpcyBpcyBub3Qgd2VsbCB0ZXN0ZWQgYW5kIGdpdmVuIAotY29tbWVudHMgSSd2ZSBjb21lIGFjcm9zcyBpbiBFTVggZG9jdW1lbnRhdGlvbiBzdWdnZXN0aW5nIHRoYXQgdGhlIAotdGhyZWFkIGtpbGxpbmcgb3BlcmF0aW9uIGhhcyBwcm9ibGVtcyBJIHdvdWxkIHN1Z2dlc3QgY2F1dGlvbiBpbiAKLXJlbHlpbmcgb24gdGhpcyBjYXBhYmlsaXR5LgotCi1QeXRob25QTSBwcm9jZXNzZXMgY29tbWFuZGxpbmUgcGFyYW1ldGVycyBub3JtYWxseS4gIFRoZSBzdGFuZGFyZCBpbnB1dCwgCi1vdXRwdXQgYW5kIGVycm9yIHN0cmVhbXMgYXJlIG9ubHkgdXNlZnVsIGlmIHJlZGlyZWN0ZWQsIGFzIFB5dGhvblBNJ3MgCi13aW5kb3cgaXMgbm90IGEgY29uc29sZSBpbiBhbnkgZm9ybSBhbmQgc28gY2Fubm90IGFjY2VwdCBvciBkaXNwbGF5IAotYW55dGhpbmcuICBUaGlzIG1lYW5zIHRoYXQgdGhlIC1pIG9wdGlvbiBpcyBpbmVmZmVjdGl2ZS4KLQotQmVjYXVzZSB0aGUgUHl0aG9uIHRocmVhZCBkb2Vzbid0IGNyZWF0ZSBpdHMgb3duIG1lc3NhZ2UgcXVldWUsIGNyZWF0aW5nIAotUE0gV2luZG93cyBhbmQgcGVyZm9ybWluZyBtb3N0IFBNIG9wZXJhdGlvbnMgaXMgbm90IHBvc3NpYmxlIGZyb20gd2l0aGluIAotdGhpcyB0aHJlYWQuICBIb3cgdGhpcyB3aWxsIGFmZmVjdCBzdXBwb3J0aW5nIFBNIGV4dGVuc2lvbnMgKHN1Y2ggYXMgCi1Ua2ludGVyIHVzaW5nIGEgUE0gcG9ydCBvZiBUY2wvVGssIG9yIHd4UHl0aG9uIHVzaW5nIHRoZSBQTSBwb3J0IG9mIAotV3hXaW5kb3dzKSBpcyBzdGlsbCBiZWluZyByZXNlYXJjaGVkLgotCi1Ob3RlIHRoYXQgb3MuZm9yaygpIF9ET0VTX05PVF9XT1JLXyBpbiBQeXRob25QTSAtIFNZUzMxNzVzIGFyZSB0aGUgcmVzdWx0IAotb2YgdHJ5aW5nLiAgb3Muc3Bhd252KCkgX2RvZXNfIHdvcmsuICBQeXRob25QTSBwYXNzZXMgYWxsIHJlZ3Jlc3Npb24gdGVzdHMgCi10aGF0IHRoZSBzdGFuZGFyZCBQeXRob24gaW50ZXJwcmV0ZXIgKHB5dGhvbi5leGUpIHBhc3Nlcywgd2l0aCB0aGUgZXhjZXB0aW9uIAotb2YgdGVzdF9mb3JrMSBhbmQgdGVzdF9zb2NrZXQgd2hpY2ggYm90aCBhdHRlbXB0IHRvIHVzZSBvcy5mb3JrKCkuCi0KLUkgdmVyeSBtdWNoIHdhbnQgZmVlZGJhY2sgb24gdGhlIHBlcmZvcm1hbmNlLCBiZWhhdmlvdXIgYW5kIHV0aWxpdHkgb2YgCi1QeXRob25QTS4gIEkgd291bGQgbGlrZSB0byBhZGQgYSBQTSBjb25zb2xlIGNhcGFiaWxpdHkgdG8gaXQsIGJ1dCB0aGF0IAotd2lsbCBiZSBhIG5vbi10cml2aWFsIGVmZm9ydC4gIEkgbWF5IGJlIGFibGUgdG8gbGV2ZXJhZ2UgdGhlIGNvZGUgaW4gCi1JbGx5YSBWYWVzJyBUY2wvVGsgcG9ydCwgd2hpY2ggd291bGQgbWFrZSBpdCBlYXNpZXIuCi0KLTE5LiAgb3MuY2hkaXIoKSB1c2VzIEVNWCdzIF9jaGRpcjIoKSwgd2hpY2ggc3VwcG9ydHMgY2hhbmdpbmcgYm90aCBkcml2ZSAKLWFuZCBkaXJlY3RvcnkgYXQgb25jZS4gIFNpbWlsYXJseSwgb3MuZ2V0Y3dkKCkgdXNlcyBFTVgncyBfZ2V0Y3dkKCkgCi13aGljaCByZXR1cm5zIGRyaXZlIGFzIHdlbGwgYXMgcGF0aC4KLQotMjAuICBweWNvbmZpZy5oIGlzIGluc3RhbGxlZCBpbiB0aGUgSW5jbHVkZSBzdWJkaXJlY3Rvcnkgd2l0aCBhbGwgCi1vdGhlciBpbmNsdWRlIGZpbGVzLgotCi0yMS4gIHRoZSBkZWZhdWx0IGJ1aWxkIGV4cGxpY2l0bHkgc2V0cyB0aGUgbnVtYmVyIG9mIGZpbGUgaGFuZGxlcyAKLWF2YWlsYWJsZSB0byBhIFB5dGhvbiBwcm9jZXNzIHRvIDI1MC4gIEVNWCBkZWZhdWx0IGlzIDQwLCB3aGljaCBpcyAKLWluc3VmZmljaWVudCBmb3IgdGhlIHRlbXBmaWxlIHJlZ3Jlc3Npb24gdGVzdCAodGVzdF90ZW1wZmlsZSkgd2hpY2ggCi10cmllcyB0byBjcmVhdGUgMTAwIHRlbXBvcmFyeSBmaWxlcy4KLQotVGhpcyBzZXR0aW5nIGNhbiBiZSBvdmVycmlkZGVuIHZpYSB0aGUgRU1YT1BUIGVudmlyb25tZW50IHZhcmlhYmxlOgotICBzZXQgRU1YT1BUPS1oMjUwCi1pcyBlcXVpdmFsZW50IHRvIHRoZSBzZXR0aW5nIGN1cnJlbnRseSB1c2VkLiAgVGhlIGVteGJpbmQgdXRpbGl0eSAoaWYgeW91IAotaGF2ZSBpdCBpbnN0YWxsZWQpIGNhbiBhbHNvIGJlIHVzZWQgdG8gcGVybWFuZW50bHkgY2hhbmdlIHRoZSBzZXR0aW5nIGluIAotcHl0aG9uLmV4ZSAtIHBsZWFzZSByZWZlciB0byB0aGUgRU1YIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCi0KLTIyLiAgYSBwdXJlIHB5dGhvbiBzdHJwdGltZSBtb2R1bGUgaXMgbm93IHBhcnQgb2YgdGhlIFB5dGhvbiBzdGFuZGFyZAotbGlicmFyeSwgc3VwZXJjZWRpbmcgYSBwbGF0Zm9ybSBzcGVjaWZpYyBleHRlbnNpb24gbW9kdWxlLiBUaGlzIG1vZHVsZQotbGV2ZXJhZ2VzIHRoZSBzdHJmdGltZSBtb2R1bGUsIGFuZCBhcyBhIHJlc3VsdCB0ZXN0X3N0cnB0aW1lIGZhaWxzCi1kdWUgdG8gdGhlIEVNWCBzdHJmdGltZSBidWcgaW4gaXRlbSAyMCBhYm92ZS4KLQotMjMuICB0ZXN0X3Bvc2l4cGF0aCBhdHRlbXB0cyB0byBleGVyY2lzZSB2YXJpb3VzIFBvc2l4IHBhdGggcmVsYXRlZAotZnVuY3Rpb25hbGl0eS4gIE1vc3Qgb2YgdGhlIHN1Yi10ZXN0cyBwYXNzLCBidXQgdGhlICJpc21vdW50IiBhbmQKLSJzYW1lc3RhdCIgc3VidGVzdHMgZmFpbDoKLS0gRU1YIHByb3ZpZGVzIG5vdCBzYXRpc2ZhY3RvcnkgbW91bnQgcG9pbnQgZW11bGF0aW9uLCBzbyAiaXNtb3VudCIKLSAgY2Fubm90IHN1Y2NlZWQ7Ci0tIEVNWCBkb2N1bWVudHMgdGhhdCBzdWNjZXNzaXZlIHN0YXQoKSBjYWxscyB3aWxsIHByb2R1Y2UgZGlmZmVyZW50Ci0gIHJlc3VsdHMsIHNvICJzYW1lc3RhdCIgY2Fubm90IHN1Y2NlZWQuCi0KLXRlc3RfcG9zaXhwYXRoIHNob3VsZCBza2lwIHRoZXNlIHRlc3RzIG9uIEVNWC4KLQotMjQuICBJIGhhdmUgcmVwb3J0cyBvZiBCaXRUb3JyZW50IG5vdCB3b3JraW5nLiAgSXQgYXBwZWFycyB0aGF0IHRoZQotRU1YIHNlbGVjdCgpIGVtdWxhdGlvbiwgcG9zc2libHkgaW4gY29uY2VydCB3aXRoIGJ1Z3MgaW4gdGhlIFRDUC9JUAotc3RhY2ssIHJ1bnMgaW50byBwcm9ibGVtcyB1bmRlciB0aGUgc3RyZXNzIGltcG9zZWQgYnkgdGhpcyBhcHBsaWNhdGlvbi4KLUkgdGhpbmsgaXQgc3VmZmljZXMgdG8gc2F5IHRoYXQgQml0VG9ycmVudCBpcyBhIGZhaXIgc3RyZXNzIHRlc3Qgb2YgYQotc3lzdGVtJ3MgbmV0d29ya2luZyBjYXBhYmlsaXR5LgotCi0yNS4gIEluIHRoZSBhYnNlbmNlIG9mIGFuIEVNWCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbGluaygpIGZ1bmN0aW9uLCBJJ3ZlIAotaW1wbGVtZW50ZWQgYSBjcnVkZSBQeXRob24gZW11bGF0aW9uLCBpbiB0aGUgZmlsZSAKLUxpYi9wbGF0LW9zMmVteC9fZW14X2xpbmsucHkuICBUaGlzIGlzIGltcG9ydGVkIGludG8gdGhlIG9zIG1vZHVsZSwgYW5kIAotYmVjb21lcyBhdmFpbGFibGUgYXMgb3MubGluaygpIGluIHRoZSBub3JtYWwgd2F5LgotCi1UaGUgZW11bGF0aW9uIGNvcGllcyB0aGUgc291cmNlIGZpbGUgaW4gYmluYXJ5IG1vZGUsIGFuZCB3aWxsIGZhaWwgaWYgCi1kaXNrIHNwYWNlIGlzIGV4aGF1c3RlZC4gVGhlIGNhbGwgZmFpbHMgaWYgdGhlIHRhcmdldCBhbHJlYWR5IGV4aXN0cy4gCi1UaGVyZSBhcmUgbm8gZ3VhcmFudGVlcyB0byB0aHJlYWQgc2FmZXR5IHdpdGggdGhpcyBlbXVsYXRpb24gLSBiZXdhcmUhCi0KLVRoZSBlbXVsYXRpb24gd2FzIHdyaXR0ZW4gdG8gc3VwcG9ydCBhIGxpbmsoKSBiYXNlZCBmaWxlIGxvY2tpbmcgc3lzdGVtIAotdXNlZCBpbiBHTlUgTWFpbG1hbi4KLQotMjYuICBBRl9VTklYIHNvY2tldHMsIG90aGVyd2lzZSBrbm93biBhcyBVbml4IGRvbWFpbiBzb2NrZXRzLCBhcmUgbm93Ci1zdXBwb3J0ZWQuICBVbmZvcnR1bmF0ZWx5LCB0aGVyZSBhcmUgc29tZSB0cmFwcyBhcmlzaW5nIGZyb20gdGhlCi1pbXBsZW1lbnRhdGlvbiBpbiBJQk0ncyBUQ1AvSVAgc3RhY2s6LQotLSB0aGUgcGF0aCBuYW1lIG11c3Qgc3RhcnQgd2l0aCAnXFxzb2NrZXRcXCcgKCcvc29ja2V0Lycgd29uJ3Qgd29yayEpLAotICB3aXRoIHRoZSBsZW5ndGggb2YgdGhlIGZ1bGwgcGF0aCBuYW1lIGxlc3MgdGhhbiAxMDggY2hhcmFjdGVyczsKLS0gdW5saWtlIFVuaXgsIHRoZSBzb2NrZXQgZW5kcG9pbnRzIGRvbid0IGV4aXN0IGluIHRoZSBmaWxlc3lzdGVtOwotLSBieSBkZWZhdWx0LCBzb2NrZXRzIGFyZSBpbiBiaW5hcnkgbW9kZS4KLQotMjcuICBBcyBvZiBQeXRob24gMi40LCB0aGUgbXB6LCByb3RvciBhbmQgeHJlYWRsaW5lcyBtb2R1bGVzIGhhdmUgYmVlbiAKLWRyb3BwZWQgZnJvbSB0aGUgUHl0aG9uIHNvdXJjZSB0cmVlLgotCi0yOC4gIFRoZSBzdWJwcm9jZXNzIG1vZHVsZSB3YXMgYWRkZWQgdG8gdGhlIHN0YW5kYXJkIGxpYnJhcnkgcmVsYXRpdmVseQotbGF0ZSBpbiB0aGUgMi40IGRldmVsb3BtZW50IGN5Y2xlLiAgVW5mb3J0dW5hdGVseSBJIGhhdmVuJ3QgaGFkIHRoZQotcm91bmQgdHVpdHMgdG8gYWRhcHQgdGhlIG1vZHVsZSB0byB0aGUgRU1YIGVudmlyb25tZW50IHlldCwgYW5kCi10ZXN0X3N1YnByb2Nlc3MgaGFzIGEgbnVtYmVyIG9mIGZhaWx1cmVzIGFzIGEgcmVzdWx0LgotCi0yOS4gIFRoZSBkZWZhdWx0IHN0YWNrIHNpemUgZm9yIHRocmVhZHMgaGFzIGJlZW4gNjRrLiAgVGhpcyBpcyBwcm92aW5nCi1pbnN1ZmZpY2llbnQgZm9yIHNvbWUgY29kZWJhc2VzLCBzdWNoIGFzIFpvcGUuICBUaGUgdGhyZWFkIHN0YWNrIHNpemUKLXN0aWxsIGRlZmF1bHRzIHRvIDY0aywgYnV0IHRoaXMgY2FuIG5vdyBiZSBpbmNyZWFzZWQgdmlhIHRoZSBzdGFja19zaXplKCkKLWZ1bmN0aW9uIGV4cG9zZWQgYnkgdGhlIHRocmVhZGluZyAmIHRocmVhZCBtb2R1bGVzIGFzIHdlbGwgYXMgYnkgZGVmaW5pbmcKLVRIUkVBRF9TVEFDS19TSVpFIHRvIGFuIGFwcHJvcHJpYXRlIHZhbHVlIGluIHRoZSBNYWtlZmlsZSAod2hpY2ggY29udGFpbnMKLWEgY29tbWVudGVkIG91dCBkZWZpbml0aW9uIGZvciAxMjhrQiB0aHJlYWQgc3RhY2tzKS4gIEkgaGF2ZSBzZWVuCi1yZWZlcmVuY2VzIHRvIGhlYXZ5IFpvcGUvUGxvbmUgdXNhZ2UgcmVxdWlyaW5nIDFNQiB0aHJlYWQgc3RhY2tzIG9uCi1GcmVlQlNEIGFuZCBMaW51eCwgYnV0IGRvdWJ0IHRoYXQgZm9yIG1vc3QgbGlrZWx5IHVzYWdlIG9uIE9TLzIgdGhhdAotbW9yZSB0aGFuIDI1NmtCIGlzIG5lY2Vzc2FyeS4gIFRoZSBzaXplIG9mIHRoZSByZXF1aXJlZCBzdGFja3MgKG1haW4gCi1hbmQgdGhyZWFkKSBjYW4gdmFyeSBzaWduaWZpY2FudGx5IGRlcGVuZGluZyBvbiB3aGljaCB2ZXJzaW9uIG9mIGdjYwotaXMgdXNlZCBhbG9uZyB3aXRoIHRoZSBjb21waWxlciBvcHRpbWlzYXRpb25zIHNlbGVjdGVkLiAgTm90ZSB0aGF0IHRoZQotbWFpbiB0aHJlYWQgc3RhY2sgc2l6ZSBpcyBzZXQgZHVyaW5nIGxpbmtpbmcgYW5kIGlzIGN1cnJlbnRseSAyTUIuCi0KLS4uLiBwcm9iYWJseSBvdGhlciBpc3N1ZXMgdGhhdCBJJ3ZlIG5vdCBlbmNvdW50ZXJlZCwgb3IgZG9uJ3QgcmVtZW1iZXIgOi0oCi0KLUlmIHlvdSBlbmNvdW50ZXIgb3RoZXIgZGlmZmljdWx0aWVzIHdpdGggdGhpcyBwb3J0LCB3aGljaCBjYW4gYmUgCi1jaGFyYWN0ZXJpc2VkIGFzIHBlY3VsaWFyIHRvIHRoaXMgcG9ydCByYXRoZXIgdGhhbiB0byB0aGUgUHl0aG9uIHJlbGVhc2UsCi1JIHdvdWxkIGxpa2UgdG8gaGVhciBhYm91dCB0aGVtLiAgSG93ZXZlciBJIGNhbm5vdCBwcm9taXNlIHRvIGJlIGFibGUgdG8gZG8gCi1hbnl0aGluZyB0byByZXNvbHZlIHN1Y2ggcHJvYmxlbXMuICBTZWUgdGhlIENvbnRhY3Qgc2VjdGlvbiBiZWxvdy4uLgotCi0KLVRvIGRvLi4uCi0tLS0tLS0tLQotCi1JbiBubyBwYXJ0aWN1bGFyIG9yZGVyIG9mIGFwcGFyZW50IGltcG9ydGFuY2Ugb3IgbGlrZWxpaG9vZC4uLgotCi0tIHN1cHBvcnQgVGtpbnRlciBhbmQvb3IgYWx0ZXJuYXRpdmUgR1VJICh3eFdpbmRvd3M/PykKLQotCi1DcmVkaXRzCi0tLS0tLS0tCi0KLUluIGFkZGl0aW9uIHRvIHBlb3BsZSBpZGVudGlmaWVkIGFib3ZlLCBJJ2QgbGlrZSB0byB0aGFuazoKLS0gdGhlIEJERkwsIEd1aWRvIHZhbiBSb3NzdW0sIGFuZCBjcmV3IGZvciBQeXRob247Ci0tIERyIERhdmlkIE1lcnR6LCBmb3IgdHJ5aW5nIG91dCBhIHByZS1yZWxlYXNlIG9mIHRoaXMgcG9ydDsKLS0gdGhlIFB5dGhvbi1saXN0L2NvbXAubGFuZy5weXRob24gY29tbXVuaXR5OwotLSBKb2huIFBvbHRvcmFrLCBmb3IgaW5wdXQgYWJvdXQgcHdkL2dycC4KLQotQ29udGFjdAotLS0tLS0tLQotCi1Db25zdHJ1Y3RpdmUgZmVlZGJhY2ssIG5lZ2F0aXZlIG9yIHBvc2l0aXZlLCBhYm91dCB0aGlzIHBvcnQgaXMgd2VsY29tZSAKLWFuZCBzaG91bGQgYmUgYWRkcmVzc2VkIHRvIG1lIGF0IHRoZSBlLW1haWwgYWRkcmVzc2VzIGJlbG93LgotCi1JIGhhdmUgYSBwcml2YXRlIG1haWxpbmcgbGlzdCBmb3IgYW5ub3VuY2VtZW50cyBvZiBmaXhlcyAmIHVwZGF0ZXMgdG8gCi10aGlzIHBvcnQuICBJZiB5b3Ugd2lzaCB0byByZWNlaXZlIHN1Y2ggZS1tYWlsIGFubm91bmNtZW50cywgcGxlYXNlIHNlbmQgCi1tZSBhbiBlLW1haWwgcmVxdWVzdGluZyB0aGF0IHlvdSBiZSBhZGRlZCB0byB0aGlzIGxpc3QuCi0KLUFuZHJldyBNYWNJbnR5cmUKLUUtbWFpbDogYW5keW1hY0BidWxsc2V5ZS5hcGFuYS5vcmcuYXUsIG9yIGFuZHltYWNAcGN1Zy5vcmcuYXUKLVdlYjogICAgaHR0cDovL3d3dy5hbmR5bWFjLm9yZy8KLQotMjggSmFudWFyeSwgMjAwOC4KZGlmZiAtLWdpdCBhL1BDL29zMmVteC9jb25maWcuYyBiL1BDL29zMmVteC9jb25maWcuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTg3OTExMC4uMDAwMDAwMAotLS0gYS9QQy9vczJlbXgvY29uZmlnLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNjQgKzAsMCBAQAotLyogLSotIEMgLSotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi1Db3B5cmlnaHQgMTk5MS0xOTk1IGJ5IFN0aWNodGluZyBNYXRoZW1hdGlzY2ggQ2VudHJ1bSwgQW1zdGVyZGFtLAotVGhlIE5ldGhlcmxhbmRzLgotCi0gICAgICAgICAgICAgICAgICAgICAgICBBbGwgUmlnaHRzIFJlc2VydmVkCi0KLVBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kIGl0cwotZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLAotcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdAotYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluCi1zdXBwb3J0aW5nIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lcyBvZiBTdGljaHRpbmcgTWF0aGVtYXRpc2NoCi1DZW50cnVtIG9yIENXSSBvciBDb3Jwb3JhdGlvbiBmb3IgTmF0aW9uYWwgUmVzZWFyY2ggSW5pdGlhdGl2ZXMgb3IKLUNOUkkgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8KLWRpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvcgotcGVybWlzc2lvbi4KLQotV2hpbGUgQ1dJIGlzIHRoZSBpbml0aWFsIHNvdXJjZSBmb3IgdGhpcyBzb2Z0d2FyZSwgYSBtb2RpZmllZCB2ZXJzaW9uCi1pcyBtYWRlIGF2YWlsYWJsZSBieSB0aGUgQ29ycG9yYXRpb24gZm9yIE5hdGlvbmFsIFJlc2VhcmNoIEluaXRpYXRpdmVzCi0oQ05SSSkgYXQgdGhlIEludGVybmV0IGFkZHJlc3MgZnRwOi8vZnRwLnB5dGhvbi5vcmcuCi0KLVNUSUNIVElORyBNQVRIRU1BVElTQ0ggQ0VOVFJVTSBBTkQgQ05SSSBESVNDTEFJTSBBTEwgV0FSUkFOVElFUyBXSVRICi1SRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSwgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLU1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUywgSU4gTk8gRVZFTlQgU0hBTEwgU1RJQ0hUSU5HIE1BVEhFTUFUSVNDSAotQ0VOVFJVTSBPUiBDTlJJIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwKLURBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUgotUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIKLVRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IKLVBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCi0KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogTW9kdWxlIGNvbmZpZ3VyYXRpb24gKi8KLQotLyogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSB0YWJsZSBvZiBidWlsdC1pbiBtb2R1bGVzLgotICAgU2VlIGluaXRfYnVpbHRpbigpIGluIGltcG9ydC5jLiAqLwotCi0jaW5jbHVkZSAiUHl0aG9uLmgiCi0KLWV4dGVybiB2b2lkIGluaXRvczIoKTsKLWV4dGVybiB2b2lkIGluaXRzaWduYWwoKTsKLSNpZmRlZiBXSVRIX1RIUkVBRAotZXh0ZXJuIHZvaWQgaW5pdF90aHJlYWQoKTsKLSNlbmRpZgotZXh0ZXJuIHZvaWQgaW5pdF9jb2RlY3MoKTsKLWV4dGVybiB2b2lkIGluaXRfY3N2KCk7Ci1leHRlcm4gdm9pZCBpbml0X2xvY2FsZSgpOwotZXh0ZXJuIHZvaWQgaW5pdF9yYW5kb20oKTsKLWV4dGVybiB2b2lkIGluaXRfc3JlKCk7Ci1leHRlcm4gdm9pZCBpbml0X3N5bXRhYmxlKCk7Ci1leHRlcm4gdm9pZCBpbml0X3dlYWtyZWYoKTsKLWV4dGVybiB2b2lkIGluaXRhcnJheSgpOwotZXh0ZXJuIHZvaWQgaW5pdGJpbmFzY2lpKCk7Ci1leHRlcm4gdm9pZCBpbml0Y29sbGVjdGlvbnMoKTsKLWV4dGVybiB2b2lkIGluaXRjbWF0aCgpOwotZXh0ZXJuIHZvaWQgaW5pdGRhdGV0aW1lKCk7Ci1leHRlcm4gdm9pZCBpbml0ZGwoKTsKLWV4dGVybiB2b2lkIGluaXRlcnJubygpOwotZXh0ZXJuIHZvaWQgaW5pdGZjbnRsKCk7Ci1leHRlcm4gdm9pZCBpbml0X2Z1bmN0b29scygpOwotZXh0ZXJuIHZvaWQgaW5pdF9oZWFwcSgpOwotZXh0ZXJuIHZvaWQgaW5pdGltYWdlb3AoKTsKLWV4dGVybiB2b2lkIGluaXRpdGVydG9vbHMoKTsKLWV4dGVybiB2b2lkIGluaXRtYXRoKCk7Ci1leHRlcm4gdm9pZCBpbml0X21kNSgpOwotZXh0ZXJuIHZvaWQgaW5pdG9wZXJhdG9yKCk7Ci1leHRlcm4gdm9pZCBpbml0X3NoYSgpOwotZXh0ZXJuIHZvaWQgaW5pdF9zaGEyNTYoKTsKLWV4dGVybiB2b2lkIGluaXRfc2hhNTEyKCk7Ci1leHRlcm4gdm9pZCBpbml0X3N0cnVjdCgpOwotZXh0ZXJuIHZvaWQgaW5pdHRlcm1pb3MoKTsKLWV4dGVybiB2b2lkIGluaXR0aW1lKCk7Ci1leHRlcm4gdm9pZCBpbml0eHhzdWJ0eXBlKCk7Ci1leHRlcm4gdm9pZCBpbml0emlwaW1wb3J0KCk7Ci0jaWYgIUhBVkVfRFlOQU1JQ19MT0FESU5HCi1leHRlcm4gdm9pZCBpbml0X2N1cnNlcygpOwotZXh0ZXJuIHZvaWQgaW5pdF9jdXJzZXNfcGFuZWwoKTsKLWV4dGVybiB2b2lkIGluaXRfdGVzdGNhcGkoKTsKLWV4dGVybiB2b2lkIGluaXRiejIoKTsKLWV4dGVybiB2b2lkIGluaXRmcGVjdGwoKTsKLWV4dGVybiB2b2lkIGluaXRmcGV0ZXN0KCk7Ci1leHRlcm4gdm9pZCBpbml0cGFyc2VyKCk7Ci1leHRlcm4gdm9pZCBpbml0cHdkKCk7Ci1leHRlcm4gdm9pZCBpbml0dW5pY29kZWRhdGEoKTsKLWV4dGVybiB2b2lkIGluaXR6bGliKCk7Ci0jaWZkZWYgVVNFX1NPQ0tFVAotZXh0ZXJuIHZvaWQgaW5pdF9zb2NrZXQoKTsKLWV4dGVybiB2b2lkIGluaXRzZWxlY3QoKTsKLSNlbmRpZgotI2VuZGlmCi0vKiAtLSBBRERNT0RVTEUgTUFSS0VSIDEgLS0gKi8KLQotZXh0ZXJuIHZvaWQgUHlNYXJzaGFsX0luaXQoKTsKLWV4dGVybiB2b2lkIGluaXRpbXAoKTsKLWV4dGVybiB2b2lkIGluaXRnYygpOwotCi1zdHJ1Y3QgX2luaXR0YWIgX1B5SW1wb3J0X0luaXR0YWJbXSA9IHsKLQotICAgIHsib3MyIiwgaW5pdG9zMn0sCi0gICAgeyJzaWduYWwiLCBpbml0c2lnbmFsfSwKLSNpZmRlZiBXSVRIX1RIUkVBRAotICAgIHsiX3RocmVhZCIsIGluaXRfdGhyZWFkfSwKLSNlbmRpZgotICAgIHsiX2NvZGVjcyIsIGluaXRfY29kZWNzfSwKLSAgICB7Il9jc3YiLCBpbml0X2Nzdn0sCi0gICAgeyJfbG9jYWxlIiwgaW5pdF9sb2NhbGV9LAotICAgIHsiX3JhbmRvbSIsIGluaXRfcmFuZG9tfSwKLSAgICB7Il9zcmUiLCBpbml0X3NyZX0sCi0gICAgeyJfc3ltdGFibGUiLCBpbml0X3N5bXRhYmxlfSwKLSAgICB7Il93ZWFrcmVmIiwgaW5pdF93ZWFrcmVmfSwKLSAgICB7ImFycmF5IiwgaW5pdGFycmF5fSwKLSAgICB7ImJpbmFzY2lpIiwgaW5pdGJpbmFzY2lpfSwKLSAgICB7ImNvbGxlY3Rpb25zIiwgaW5pdGNvbGxlY3Rpb25zfSwKLSAgICB7ImNtYXRoIiwgaW5pdGNtYXRofSwKLSAgICB7ImRhdGV0aW1lIiwgaW5pdGRhdGV0aW1lfSwKLSAgICB7ImRsIiwgaW5pdGRsfSwKLSAgICB7ImVycm5vIiwgaW5pdGVycm5vfSwKLSAgICB7ImZjbnRsIiwgaW5pdGZjbnRsfSwKLSAgICB7Il9mdW5jdG9vbHMiLCBpbml0X2Z1bmN0b29sc30sCi0gICAgeyJfaGVhcHEiLCBpbml0X2hlYXBxfSwKLSAgICB7ImltYWdlb3AiLCBpbml0aW1hZ2VvcH0sCi0gICAgeyJpdGVydG9vbHMiLCBpbml0aXRlcnRvb2xzfSwKLSAgICB7Im1hdGgiLCBpbml0bWF0aH0sCi0gICAgeyJvcGVyYXRvciIsIGluaXRvcGVyYXRvcn0sCi0gICAgeyJfc2hhMjU2IiwgaW5pdF9zaGEyNTZ9LAotICAgIHsiX3NoYTUxMiIsIGluaXRfc2hhNTEyfSwKLSAgICB7Il9zdHJ1Y3QiLCBpbml0X3N0cnVjdH0sCi0gICAgeyJ0ZXJtaW9zIiwgaW5pdHRlcm1pb3N9LAotICAgIHsidGltZSIsIGluaXR0aW1lfSwKLSAgICB7Inh4c3VidHlwZSIsIGluaXR4eHN1YnR5cGV9LAotICAgIHsiemlwaW1wb3J0IiwgaW5pdHppcGltcG9ydH0sCi0jaWYgIUhBVkVfRFlOQU1JQ19MT0FESU5HCi0gICAgeyJfY3Vyc2VzIiwgaW5pdF9jdXJzZXN9LAotICAgIHsiX2N1cnNlc19wYW5lbCIsIGluaXRfY3Vyc2VzX3BhbmVsfSwKLSAgICB7Il90ZXN0Y2FwaSIsIGluaXRfdGVzdGNhcGl9LAotICAgIHsiYnoyIiwgaW5pdGJ6Mn0sCi0gICAgeyJmcGVjdGwiLCBpbml0ZnBlY3RsfSwKLSAgICB7ImZwZXRlc3QiLCBpbml0ZnBldGVzdH0sCi0gICAgeyJwYXJzZXIiLCBpbml0cGFyc2VyfSwKLSAgICB7InB3ZCIsIGluaXRwd2R9LAotICAgIHsidW5pY29kZWRhdGEiLCBpbml0dW5pY29kZWRhdGF9LAotICAgIHsiemxpYiIsIGluaXR6bGlifSwKLSNpZmRlZiBVU0VfU09DS0VUCi0gICAgeyJfc29ja2V0IiwgaW5pdF9zb2NrZXR9LAotICAgIHsic2VsZWN0IiwgaW5pdHNlbGVjdH0sCi0jZW5kaWYKLSNlbmRpZgotLyogLS0gQURETU9EVUxFIE1BUktFUiAyIC0tICovCi0KLSAgICAvKiBUaGlzIG1vZHVsZSAibGl2ZXMgaW4iIHdpdGggbWFyc2hhbC5jICovCi0gICAgeyJtYXJzaGFsIiwgUHlNYXJzaGFsX0luaXR9LAotCi0gICAgLyogVGhpcyBsaXZlcyBpdCB3aXRoIGltcG9ydC5jICovCi0gICAgeyJfaW1wIiwgaW5pdGltcH0sCi0KLSAgICAvKiBUaGVzZSBlbnRyaWVzIGFyZSBoZXJlIGZvciBzeXMuYnVpbHRpbl9tb2R1bGVfbmFtZXMgKi8KLSAgICB7ImJ1aWx0aW5zIiwgTlVMTH0sCi0gICAgeyJzeXMiLCBOVUxMfSwKLQotICAgIC8qIFRoaXMgbGl2ZXMgaW4gZ2Ntb2R1bGUuYyAqLwotICAgIHsiZ2MiLCBpbml0Z2N9LAotCi0gICAgLyogU2VudGluZWwgKi8KLSAgICB7MCwgMH0KLX07CmRpZmYgLS1naXQgYS9QQy9vczJlbXgvZGxmY24uYyBiL1BDL29zMmVteC9kbGZjbi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYmRhOWNkLi4wMDAwMDAwCi0tLSBhL1BDL29zMmVteC9kbGZjbi5jCisrKyAvZGV2L251bGwKQEAgLTEsMjIzICswLDAgQEAKLS8qIC0qLSBDIC0qLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotQ29weXJpZ2h0IDE5OTEtMTk5NSBieSBTdGljaHRpbmcgTWF0aGVtYXRpc2NoIENlbnRydW0sIEFtc3RlcmRhbSwKLVRoZSBOZXRoZXJsYW5kcy4KLQotICAgICAgICAgICAgICAgICAgICAgICAgQWxsIFJpZ2h0cyBSZXNlcnZlZAotCi1QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMKLWRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwKLXByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQKLWJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbgotc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZXMgb2YgU3RpY2h0aW5nIE1hdGhlbWF0aXNjaAotQ2VudHJ1bSBvciBDV0kgb3IgQ29ycG9yYXRpb24gZm9yIE5hdGlvbmFsIFJlc2VhcmNoIEluaXRpYXRpdmVzIG9yCi1DTlJJIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvCi1kaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IKLXBlcm1pc3Npb24uCi0KLVdoaWxlIENXSSBpcyB0aGUgaW5pdGlhbCBzb3VyY2UgZm9yIHRoaXMgc29mdHdhcmUsIGEgbW9kaWZpZWQgdmVyc2lvbgotaXMgbWFkZSBhdmFpbGFibGUgYnkgdGhlIENvcnBvcmF0aW9uIGZvciBOYXRpb25hbCBSZXNlYXJjaCBJbml0aWF0aXZlcwotKENOUkkpIGF0IHRoZSBJbnRlcm5ldCBhZGRyZXNzIGZ0cDovL2Z0cC5weXRob24ub3JnLgotCi1TVElDSFRJTkcgTUFUSEVNQVRJU0NIIENFTlRSVU0gQU5EIENOUkkgRElTQ0xBSU0gQUxMIFdBUlJBTlRJRVMgV0lUSAotUkVHQVJEIFRPIFRISVMgU09GVFdBUkUsIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCi1NRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MsIElOIE5PIEVWRU5UIFNIQUxMIFNUSUNIVElORyBNQVRIRU1BVElTQ0gKLUNFTlRSVU0gT1IgQ05SSSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMCi1EQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IKLVBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSCi1UT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SCi1QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgotCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIFRoaXMgbGlicmFyeSBpbXBsZW1lbnRzIGRsb3BlbigpIC0gVW5peC1saWtlIGR5bmFtaWMgbGlua2luZwotICogZW11bGF0aW9uIGZ1bmN0aW9ucyBmb3IgT1MvMiB1c2luZyBEb3NMb2FkTW9kdWxlKCkgYW5kIGNvbXBhbnkuCi0gKi8KLQotI2RlZmluZSBJTkNMX0RPUwotI2RlZmluZSBJTkNMX0RPU0VSUk9SUwotI2RlZmluZSBJTkNMX0RPU1NFU01HUgotI2RlZmluZSBJTkNMX1dJTlBST0dSQU1MSVNUCi0jZGVmaW5lIElOQ0xfV0lORlJBTUVNR1IKLSNpbmNsdWRlIDxvczIuaD4KLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8bWFsbG9jLmg+Ci0KLXR5cGVkZWYgc3RydWN0IF90cmFja19yZWMgewotICAgIGNoYXIgKm5hbWU7Ci0gICAgSE1PRFVMRSBoYW5kbGU7Ci0gICAgdm9pZCAqaWQ7Ci0gICAgc3RydWN0IF90cmFja19yZWMgKm5leHQ7Ci19IHRETExjaGFpbiwgKkRMTGNoYWluOwotCi1zdGF0aWMgRExMY2hhaW4gZGxsb2FkID0gTlVMTDsgIC8qIEEgc2ltcGxlIGNoYWluZWQgbGlzdCBvZiBETEwgbmFtZXMgKi8KLXN0YXRpYyBjaGFyIGRsZXJyIFsyNTZdOyAgICAgICAgLyogbGFzdCBlcnJvciB0ZXh0IHN0cmluZyAqLwotc3RhdGljIHZvaWQgKmxhc3RfaWQ7Ci0KLXN0YXRpYyBETExjaGFpbiBmaW5kX2lkKHZvaWQgKmlkKQotewotICAgIERMTGNoYWluIHRtcDsKLQotICAgIGZvciAodG1wID0gZGxsb2FkOyB0bXA7IHRtcCA9IHRtcC0+bmV4dCkKLSAgICAgICAgaWYgKGlkID09IHRtcC0+aWQpCi0gICAgICAgICAgICByZXR1cm4gdG1wOwotCi0gICAgcmV0dXJuIE5VTEw7Ci19Ci0KLS8qIGxvYWQgYSBkeW5hbWljLWxpbmsgbGlicmFyeSBhbmQgcmV0dXJuIGhhbmRsZSAqLwotdm9pZCAqZGxvcGVuKGNoYXIgKmZpbGVuYW1lLCBpbnQgZmxhZ3MpCi17Ci0gICAgSE1PRFVMRSBobTsKLSAgICBETExjaGFpbiB0bXA7Ci0gICAgY2hhciBlcnJbMjU2XTsKLSAgICBjaGFyICplcnJ0eHQ7Ci0gICAgaW50IHJjID0gMCwgc2V0X2NoYWluID0gMDsKLQotICAgIGZvciAodG1wID0gZGxsb2FkOyB0bXA7IHRtcCA9IHRtcC0+bmV4dCkKLSAgICAgICAgaWYgKHN0cm5pY21wKHRtcC0+bmFtZSwgZmlsZW5hbWUsIDk5OSkgPT0gMCkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgaWYgKCF0bXApCi0gICAgewotICAgICAgICB0bXAgPSAoRExMY2hhaW4pIG1hbGxvYyhzaXplb2YodERMTGNoYWluKSk7Ci0gICAgICAgIGlmICghdG1wKQotICAgICAgICAgICAgZ290byBub21lbTsKLSAgICAgICAgdG1wLT5uYW1lID0gc3RyZHVwKGZpbGVuYW1lKTsKLSAgICAgICAgdG1wLT5uZXh0ID0gZGxsb2FkOwotICAgICAgICBzZXRfY2hhaW4gPSAxOwotICAgIH0KLQotICAgIHN3aXRjaCAocmMgPSBEb3NMb2FkTW9kdWxlKChQU1opJmVyciwgc2l6ZW9mKGVyciksIGZpbGVuYW1lLCAmaG0pKQotICAgIHsKLSAgICAgICAgY2FzZSBOT19FUlJPUjoKLSAgICAgICAgICAgIHRtcC0+aGFuZGxlID0gaG07Ci0gICAgICAgICAgICBpZiAoc2V0X2NoYWluKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGRvCi0gICAgICAgICAgICAgICAgICAgIGxhc3RfaWQrKzsKLSAgICAgICAgICAgICAgICB3aGlsZSAoKGxhc3RfaWQgPT0gMCkgfHwgKGZpbmRfaWQobGFzdF9pZCkpKTsKLSAgICAgICAgICAgICAgICB0bXAtPmlkID0gbGFzdF9pZDsKLSAgICAgICAgICAgICAgICBkbGxvYWQgPSB0bXA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gdG1wLT5pZDsKLSAgICAgICAgY2FzZSBFUlJPUl9GSUxFX05PVF9GT1VORDoKLSAgICAgICAgY2FzZSBFUlJPUl9QQVRIX05PVF9GT1VORDoKLSAgICAgICAgICAgIGVycnR4dCA9ICJtb2R1bGUgYCVzJyBub3QgZm91bmQiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRVJST1JfVE9PX01BTllfT1BFTl9GSUxFUzoKLSAgICAgICAgY2FzZSBFUlJPUl9OT1RfRU5PVUdIX01FTU9SWToKLSAgICAgICAgY2FzZSBFUlJPUl9TSEFSSU5HX0JVRkZFUl9FWENFRURFRDoKLW5vbWVtOgotICAgICAgICAgICAgZXJydHh0ID0gIm91dCBvZiBzeXN0ZW0gcmVzb3VyY2VzIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVSUk9SX0FDQ0VTU19ERU5JRUQ6Ci0gICAgICAgICAgICBlcnJ0eHQgPSAiYWNjZXNzIGRlbmllZCI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFUlJPUl9CQURfRk9STUFUOgotICAgICAgICBjYXNlIEVSUk9SX0lOVkFMSURfU0VHTUVOVF9OVU1CRVI6Ci0gICAgICAgIGNhc2UgRVJST1JfSU5WQUxJRF9PUkRJTkFMOgotICAgICAgICBjYXNlIEVSUk9SX0lOVkFMSURfTU9EVUxFVFlQRToKLSAgICAgICAgY2FzZSBFUlJPUl9JTlZBTElEX0VYRV9TSUdOQVRVUkU6Ci0gICAgICAgIGNhc2UgRVJST1JfRVhFX01BUktFRF9JTlZBTElEOgotICAgICAgICBjYXNlIEVSUk9SX0lURVJBVEVEX0RBVEFfRVhDRUVEU182NEs6Ci0gICAgICAgIGNhc2UgRVJST1JfSU5WQUxJRF9NSU5BTExPQ1NJWkU6Ci0gICAgICAgIGNhc2UgRVJST1JfSU5WQUxJRF9TRUdEUEw6Ci0gICAgICAgIGNhc2UgRVJST1JfQVVUT0RBVEFTRUdfRVhDRUVEU182NEs6Ci0gICAgICAgIGNhc2UgRVJST1JfUkVMT0NTUkNfQ0hBSU5fRVhDRUVEU19TRUdMSU1JVDoKLSAgICAgICAgICAgIGVycnR4dCA9ICJpbnZhbGlkIG1vZHVsZSBmb3JtYXQiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRVJST1JfSU5WQUxJRF9OQU1FOgotICAgICAgICAgICAgZXJydHh0ID0gImZpbGVuYW1lIGRvZXNuJ3QgbWF0Y2ggbW9kdWxlIG5hbWUiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRVJST1JfU0hBUklOR19WSU9MQVRJT046Ci0gICAgICAgIGNhc2UgRVJST1JfTE9DS19WSU9MQVRJT046Ci0gICAgICAgICAgICBlcnJ0eHQgPSAic2hhcmluZyB2aW9sYXRpb24iOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRVJST1JfSU5JVF9ST1VUSU5FX0ZBSUxFRDoKLSAgICAgICAgICAgIGVycnR4dCA9ICJtb2R1bGUgaW5pdGlhbGl6YXRpb24gZmFpbGVkIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgZXJydHh0ID0gImNhdXNlIGAlcycsIGVycm9yIGNvZGUgPSAlZCI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgc25wcmludGYoZGxlcnIsIHNpemVvZihkbGVyciksIGVycnR4dCwgJmVyciwgcmMpOwotICAgIGlmICh0bXApCi0gICAgewotICAgICAgICBpZiAodG1wLT5uYW1lKQotICAgICAgICAgICAgZnJlZSh0bXAtPm5hbWUpOwotICAgICAgICBmcmVlKHRtcCk7Ci0gICAgfQotICAgIHJldHVybiAwOwotfQotCi0vKiByZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBgc3ltYm9sJyBpbiBETEwgKi8KLXZvaWQgKmRsc3ltKHZvaWQgKmhhbmRsZSwgY2hhciAqc3ltYm9sKQotewotICAgIGludCByYyA9IDA7Ci0gICAgUEZOIGFkZHI7Ci0gICAgY2hhciAqZXJydHh0OwotICAgIGludCBzeW1vcmQgPSAwOwotICAgIERMTGNoYWluIHRtcCA9IGZpbmRfaWQoaGFuZGxlKTsKLQotICAgIGlmICghdG1wKQotICAgICAgICBnb3RvIGludl9oYW5kbGU7Ci0KLSAgICBpZiAoKnN5bWJvbCA9PSAnIycpCi0gICAgICAgIHN5bW9yZCA9IGF0b2koc3ltYm9sICsgMSk7Ci0KLSAgICBzd2l0Y2ggKHJjID0gRG9zUXVlcnlQcm9jQWRkcih0bXAtPmhhbmRsZSwgc3ltb3JkLCBzeW1ib2wsICZhZGRyKSkKLSAgICB7Ci0gICAgICAgIGNhc2UgTk9fRVJST1I6Ci0gICAgICAgICAgICByZXR1cm4gKHZvaWQgKilhZGRyOwotICAgICAgICBjYXNlIEVSUk9SX0lOVkFMSURfSEFORExFOgotaW52X2hhbmRsZToKLSAgICAgICAgICAgIGVycnR4dCA9ICJpbnZhbGlkIG1vZHVsZSBoYW5kbGUiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRVJST1JfUFJPQ19OT1RfRk9VTkQ6Ci0gICAgICAgIGNhc2UgRVJST1JfSU5WQUxJRF9OQU1FOgotICAgICAgICAgICAgZXJydHh0ID0gIm5vIHN5bWJvbCBgJXMnIGluIG1vZHVsZSI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGVycnR4dCA9ICJzeW1ib2wgYCVzJywgZXJyb3IgY29kZSA9ICVkIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBzbnByaW50ZihkbGVyciwgc2l6ZW9mKGRsZXJyKSwgZXJydHh0LCBzeW1ib2wsIHJjKTsKLSAgICByZXR1cm4gTlVMTDsKLX0KLQotLyogZnJlZSBkeW5hbWljYWxseS1saW5rZWQgbGlicmFyeSAqLwotaW50IGRsY2xvc2Uodm9pZCAqaGFuZGxlKQotewotICAgIGludCByYzsKLSAgICBETExjaGFpbiB0bXAgPSBmaW5kX2lkKGhhbmRsZSk7Ci0KLSAgICBpZiAoIXRtcCkKLSAgICAgICAgZ290byBpbnZfaGFuZGxlOwotCi0gICAgc3dpdGNoIChyYyA9IERvc0ZyZWVNb2R1bGUodG1wLT5oYW5kbGUpKQotICAgIHsKLSAgICAgICAgY2FzZSBOT19FUlJPUjoKLSAgICAgICAgICAgIGZyZWUodG1wLT5uYW1lKTsKLSAgICAgICAgICAgIGRsbG9hZCA9IHRtcC0+bmV4dDsKLSAgICAgICAgICAgIGZyZWUodG1wKTsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBjYXNlIEVSUk9SX0lOVkFMSURfSEFORExFOgotaW52X2hhbmRsZToKLSAgICAgICAgICAgIHN0cmNweShkbGVyciwgImludmFsaWQgbW9kdWxlIGhhbmRsZSIpOwotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBjYXNlIEVSUk9SX0lOVkFMSURfQUNDRVNTOgotICAgICAgICAgICAgc3RyY3B5KGRsZXJyLCAiYWNjZXNzIGRlbmllZCIpOwotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLX0KLQotLyogcmV0dXJuIGEgc3RyaW5nIGRlc2NyaWJpbmcgbGFzdCBvY2N1cnJlZCBkbCBlcnJvciAqLwotY2hhciAqZGxlcnJvcigpCi17Ci0gICAgcmV0dXJuIGRsZXJyOwotfQpkaWZmIC0tZ2l0IGEvUEMvb3MyZW14L2RsZmNuLmggYi9QQy9vczJlbXgvZGxmY24uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjczYWU2OS4uMDAwMDAwMAotLS0gYS9QQy9vczJlbXgvZGxmY24uaAorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLS8qIC0qLSBDIC0qLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotQ29weXJpZ2h0IDE5OTEtMTk5NSBieSBTdGljaHRpbmcgTWF0aGVtYXRpc2NoIENlbnRydW0sIEFtc3RlcmRhbSwKLVRoZSBOZXRoZXJsYW5kcy4KLQotICAgICAgICAgICAgICAgICAgICAgICAgQWxsIFJpZ2h0cyBSZXNlcnZlZAotCi1QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMKLWRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwKLXByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQKLWJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbgotc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZXMgb2YgU3RpY2h0aW5nIE1hdGhlbWF0aXNjaAotQ2VudHJ1bSBvciBDV0kgb3IgQ29ycG9yYXRpb24gZm9yIE5hdGlvbmFsIFJlc2VhcmNoIEluaXRpYXRpdmVzIG9yCi1DTlJJIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvCi1kaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IKLXBlcm1pc3Npb24uCi0KLVdoaWxlIENXSSBpcyB0aGUgaW5pdGlhbCBzb3VyY2UgZm9yIHRoaXMgc29mdHdhcmUsIGEgbW9kaWZpZWQgdmVyc2lvbgotaXMgbWFkZSBhdmFpbGFibGUgYnkgdGhlIENvcnBvcmF0aW9uIGZvciBOYXRpb25hbCBSZXNlYXJjaCBJbml0aWF0aXZlcwotKENOUkkpIGF0IHRoZSBJbnRlcm5ldCBhZGRyZXNzIGZ0cDovL2Z0cC5weXRob24ub3JnLgotCi1TVElDSFRJTkcgTUFUSEVNQVRJU0NIIENFTlRSVU0gQU5EIENOUkkgRElTQ0xBSU0gQUxMIFdBUlJBTlRJRVMgV0lUSAotUkVHQVJEIFRPIFRISVMgU09GVFdBUkUsIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCi1NRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MsIElOIE5PIEVWRU5UIFNIQUxMIFNUSUNIVElORyBNQVRIRU1BVElTQ0gKLUNFTlRSVU0gT1IgQ05SSSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMCi1EQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IKLVBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSCi1UT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SCi1QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgotCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIFRoaXMgbGlicmFyeSBpbXBsZW1lbnRzIGRsb3BlbigpIC0gVW5peC1saWtlIGR5bmFtaWMgbGlua2luZwotICogZW11bGF0aW9uIGZ1bmN0aW9ucyBmb3IgT1MvMiB1c2luZyBEb3NMb2FkTW9kdWxlKCkgYW5kIGNvbXBhbnkuCi0gKi8KLQotI2lmbmRlZiBfRExGQ05fSAotI2RlZmluZSBfRExGQ05fSAotCi0vKiBsb2FkIGEgZHluYW1pYy1saW5rIGxpYnJhcnkgYW5kIHJldHVybiBoYW5kbGUgKi8KLXZvaWQgKmRsb3BlbihjaGFyICpmaWxlbmFtZSwgaW50IGZsYWdzKTsKLQotLyogcmV0dXJuIGEgcG9pbnRlciB0byB0aGUgYHN5bWJvbCcgaW4gRExMICovCi12b2lkICpkbHN5bSh2b2lkICpoYW5kbGUsIGNoYXIgKnN5bWJvbCk7Ci0KLS8qIGZyZWUgZHluYW1pY2FsbHktbGlua2VkIGxpYnJhcnkgKi8KLWludCBkbGNsb3NlKHZvaWQgKmhhbmRsZSk7Ci0KLS8qIHJldHVybiBhIHN0cmluZyBkZXNjcmliaW5nIGxhc3Qgb2NjdXJyZWQgZGwgZXJyb3IgKi8KLWNoYXIgKmRsZXJyb3Iodm9pZCk7Ci0KLSNlbmRpZiAvKiAhX0RMRkNOX0ggKi8KZGlmZiAtLWdpdCBhL1BDL29zMmVteC9kbGxlbnRyeS5jIGIvUEMvb3MyZW14L2RsbGVudHJ5LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljY2NhMWMuLjAwMDAwMDAKLS0tIGEvUEMvb3MyZW14L2RsbGVudHJ5LmMKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0vKgotICogVGhpcyBpcyB0aGUgZW50cnkgcG9pbnQgZm9yIHRoZSBQeXRob24gMi4zIGNvcmUgRExMLgotICovCi0KLSNkZWZpbmUgTlVMTCAwCi0KLSNkZWZpbmUgUkVGKHMpICBleHRlcm4gdm9pZCBzKCk7IHZvaWQgKl9fX19yZWZfIyNzID0gJnM7Ci0KLS8qIE1ha2UgcmVmZXJlbmNlcyB0byBpbXBvcnRlZCBzeW1ib2xzIHRvIHB1bGwgdGhlbSBmcm9tIHN0YXRpYyBsaWJyYXJ5ICovCi1SRUYoUHlfTWFpbik7Ci0KLSNpbmNsdWRlIDxzaWduYWwuaD4KLQotZXh0ZXJuIGludCBfQ1JUX2luaXQodm9pZCk7Ci1leHRlcm4gdm9pZCBfQ1JUX3Rlcm0odm9pZCk7Ci1leHRlcm4gdm9pZCBfX2N0b3JkdG9ySW5pdCh2b2lkKTsKLWV4dGVybiB2b2lkIF9fY3RvcmR0b3JUZXJtKHZvaWQpOwotCi11bnNpZ25lZCBsb25nIF9ETExfSW5pdFRlcm0odW5zaWduZWQgbG9uZyBtb2RfaGFuZGxlLCB1bnNpZ25lZCBsb25nIGZsYWcpCi17Ci0gICAgc3dpdGNoIChmbGFnKQotICAgIHsKLSAgICAgICAgY2FzZSAwOgotICAgICAgICAgICAgaWYgKF9DUlRfaW5pdCgpKQotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgX19jdG9yZHRvckluaXQoKTsKLQotICAgICAgICAgICAgLyogSWdub3JlIGZhdGFsIHNpZ25hbHMgKi8KLSAgICAgICAgICAgIHNpZ25hbChTSUdTRUdWLCBTSUdfSUdOKTsKLSAgICAgICAgICAgIHNpZ25hbChTSUdGUEUsIFNJR19JR04pOwotCi0gICAgICAgICAgICByZXR1cm4gMTsKLQotICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICBfX2N0b3JkdG9yVGVybSgpOwotICAgICAgICAgICAgX0NSVF90ZXJtKCk7Ci0gICAgICAgICAgICByZXR1cm4gMTsKLQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvUEMvb3MyZW14L2dldHBhdGhwLmMgYi9QQy9vczJlbXgvZ2V0cGF0aHAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGQ3Mzc3NC4uMDAwMDAwMAotLS0gYS9QQy9vczJlbXgvZ2V0cGF0aHAuYworKysgL2Rldi9udWxsCkBAIC0xLDQxOCArMCwwIEBACi0KLS8qIFJldHVybiB0aGUgaW5pdGlhbCBtb2R1bGUgc2VhcmNoIHBhdGguICovCi0vKiBUaGlzIHZlcnNpb24gdXNlZCBieSBPUy8yK0VNWCAqLwotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICBQQVRIIFJVTEVTIEZPUiBPUy8yK0VNWDoKLSAgIFRoaXMgZGVzY3JpYmVzIGhvdyBzeXMucGF0aCBpcyBmb3JtZWQgb24gT1MvMitFTVguICBJdCBkZXNjcmliZXMgdGhlCi0gICBmdW5jdGlvbmFsaXR5LCBub3QgdGhlIGltcGxlbWVudGF0aW9uIChpZSwgdGhlIG9yZGVyIGluIHdoaWNoIHRoZXNlCi0gICBhcmUgYWN0dWFsbHkgZmV0Y2hlZCBpcyBkaWZmZXJlbnQpCi0KLSAgICogUHl0aG9uIGFsd2F5cyBhZGRzIGFuIGVtcHR5IGVudHJ5IGF0IHRoZSBzdGFydCwgd2hpY2ggY29ycmVzcG9uZHMKLSAgICAgdG8gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgotCi0gICAqIElmIHRoZSBQWVRIT05QQVRIIGVudi4gdmFyLiBleGlzdHMsIGl0cyBlbnRyaWVzIGFyZSBhZGRlZCBuZXh0LgotCi0gICAqIFdlIGF0dGVtcHQgdG8gbG9jYXRlIHRoZSAiUHl0aG9uIEhvbWUiIC0gaWYgdGhlIFBZVEhPTkhPTUUgZW52IHZhcgotICAgICBpcyBzZXQsIHdlIGJlbGlldmUgaXQuICBPdGhlcndpc2UsIHdlIHVzZSB0aGUgcGF0aCBvZiBvdXIgaG9zdCAuRVhFJ3MKLSAgICAgdG8gdHJ5IGFuZCBsb2NhdGUgb3VyICJsYW5kbWFyayIgKGxpYlxcb3MucHkpIGFuZCBkZWR1Y2Ugb3VyIGhvbWUuCi0gICAgIC0gSWYgd2UgRE8gaGF2ZSBhIFB5dGhvbiBIb21lOiBUaGUgcmVsZXZhbnQgc3ViLWRpcmVjdG9yaWVzIChMaWIsCi0gICAgICAgcGxhdC13aW4sIGV0YykgYXJlIGJhc2VkIG9uIHRoZSBQeXRob24gSG9tZQotICAgICAtIElmIHdlIERPIE5PVCBoYXZlIGEgUHl0aG9uIEhvbWUsIHRoZSBjb3JlIFB5dGhvbiBQYXRoIGlzCi0gICAgICAgbG9hZGVkIGZyb20gdGhlIHJlZ2lzdHJ5LiAgVGhpcyBpcyB0aGUgbWFpbiBQeXRob25QYXRoIGtleSwKLSAgICAgICBhbmQgYm90aCBIS0xNIGFuZCBIS0NVIGFyZSBjb21iaW5lZCB0byBmb3JtIHRoZSBwYXRoKQotCi0gICAqIElmZiAtIHdlIGNhbiBub3QgbG9jYXRlIHRoZSBQeXRob24gSG9tZSwgYW5kIGhhdmUgbm90IGhhZCBhIFBZVEhPTlBBVEgKLSAgICAgc3BlY2lmaWVkIChpZSwgd2UgaGF2ZSBfbm90aGluZ18gd2UgY2FuIGFzc3VtZSBpcyBhIGdvb2QgcGF0aCksIGEKLSAgICAgZGVmYXVsdCBwYXRoIHdpdGggcmVsYXRpdmUgZW50cmllcyBpcyB1c2VkIChlZy4gLlxMaWI7LlxwbGF0LXdpbiwgZXRjKQotCi0KLSAgVGhlIGVuZCByZXN1bHQgb2YgYWxsIHRoaXMgaXM6Ci0gICogV2hlbiBydW5uaW5nIHB5dGhvbi5leGUsIG9yIGFueSBvdGhlciAuZXhlIGluIHRoZSBtYWluIFB5dGhvbiBkaXJlY3RvcnkKLSAgICAoZWl0aGVyIGFuIGluc3RhbGxlZCB2ZXJzaW9uLCBvciBkaXJlY3RseSBmcm9tIHRoZSBQQ2J1aWxkIGRpcmVjdG9yeSksCi0gICAgdGhlIGNvcmUgcGF0aCBpcyBkZWR1Y2VkLgotCi0gICogV2hlbiBQeXRob24gaXMgaG9zdGVkIGluIGFub3RoZXIgZXhlIChkaWZmZXJlbnQgZGlyZWN0b3J5LCBlbWJlZGRlZCB2aWEKLSAgICBDT00sIGV0YyksIHRoZSBQeXRob24gSG9tZSB3aWxsIG5vdCBiZSBkZWR1Y2VkLCBzbyB0aGUgY29yZSBwYXRoIGZyb20KLSAgICB0aGUgcmVnaXN0cnkgaXMgdXNlZC4gIE90aGVyICJhcHBsaWNhdGlvbiBwYXRocyAiaW4gdGhlIHJlZ2lzdHJ5IGFyZQotICAgIGFsd2F5cyByZWFkLgotCi0gICogSWYgUHl0aG9uIGNhbid0IGZpbmQgaXRzIGhvbWUgYW5kIHRoZXJlIGlzIG5vIHJlZ2lzdHJ5IChlZywgZnJvemVuCi0gICAgZXhlLCBzb21lIHZlcnkgc3RyYW5nZSBpbnN0YWxsYXRpb24gc2V0dXApIHlvdSBnZXQgYSBwYXRoIHdpdGgKLSAgICBzb21lIGRlZmF1bHQsIGJ1dCByZWxhdGl2ZSwgcGF0aHMuCi0KLSAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotCi0jaW5jbHVkZSAiUHl0aG9uLmgiCi0jaW5jbHVkZSAib3NkZWZzLmgiCi0KLSNpZm5kZWYgUFlPU19PUzIKLSNlcnJvciBUaGlzIGZpbGUgb25seSBjb21waWxhYmxlIG9uIE9TLzIKLSNlbmRpZgotCi0jZGVmaW5lIElOQ0xfRE9TCi0jaW5jbHVkZSA8b3MyLmg+Ci0KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaWYgSEFWRV9VTklTVERfSAotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2VuZGlmIC8qIEhBVkVfVU5JU1REX0ggKi8KLQotLyogU2VhcmNoIGluIHNvbWUgY29tbW9uIGxvY2F0aW9ucyBmb3IgdGhlIGFzc29jaWF0ZWQgUHl0aG9uIGxpYnJhcmllcy4KLSAqCi0gKiBQeV9HZXRQYXRoKCkgdHJpZXMgdG8gcmV0dXJuIGEgc2Vuc2libGUgUHl0aG9uIG1vZHVsZSBzZWFyY2ggcGF0aC4KLSAqCi0gKiBUaGUgYXBwcm9hY2ggaXMgYW4gYWRhcHRhdGlvbiBmb3IgV2luZG93cyBvZiB0aGUgc3RyYXRlZ3kgdXNlZCBpbgotICogLi4vTW9kdWxlcy9nZXRwYXRoLmM7IGl0IHVzZXMgdGhlIFdpbmRvd3MgUmVnaXN0cnkgYXMgb25lIG9mIGl0cwotICogaW5mb3JtYXRpb24gc291cmNlcy4KLSAqLwotCi0jaWZuZGVmIExBTkRNQVJLCi0jaWYgZGVmaW5lZChQWUNDX0dDQykKLSNkZWZpbmUgTEFORE1BUksgImxpYi9vcy5weSIKLSNlbHNlCi0jZGVmaW5lIExBTkRNQVJLICJsaWJcXG9zLnB5IgotI2VuZGlmCi0jZW5kaWYKLQotc3RhdGljIGNoYXIgcHJlZml4W01BWFBBVEhMRU4rMV07Ci1zdGF0aWMgY2hhciBwcm9ncGF0aFtNQVhQQVRITEVOKzFdOwotc3RhdGljIGNoYXIgKm1vZHVsZV9zZWFyY2hfcGF0aCA9IE5VTEw7Ci0KLQotc3RhdGljIGludAotaXNfc2VwKGNoYXIgY2gpIC8qIGRldGVybWluZSBpZiAiY2giIGlzIGEgc2VwYXJhdG9yIGNoYXJhY3RlciAqLwotewotI2lmZGVmIEFMVFNFUAotICAgIHJldHVybiBjaCA9PSBTRVAgfHwgY2ggPT0gQUxUU0VQOwotI2Vsc2UKLSAgICByZXR1cm4gY2ggPT0gU0VQOwotI2VuZGlmCi19Ci0KLS8qIGFzc3VtZXMgJ2RpcicgbnVsbCB0ZXJtaW5hdGVkIGluIGJvdW5kcy4KLSAqIE5ldmVyIHdyaXRlcyBiZXlvbmQgZXhpc3RpbmcgdGVybWluYXRvci4KLSAqLwotc3RhdGljIHZvaWQKLXJlZHVjZShjaGFyICpkaXIpCi17Ci0gICAgc2l6ZV90IGkgPSBzdHJsZW4oZGlyKTsKLSAgICB3aGlsZSAoaSA+IDAgJiYgIWlzX3NlcChkaXJbaV0pKQotICAgICAgICAtLWk7Ci0gICAgZGlyW2ldID0gJ1wwJzsKLX0KLQotc3RhdGljIGludAotZXhpc3RzKGNoYXIgKmZpbGVuYW1lKQotewotICAgIHN0cnVjdCBzdGF0IGJ1ZjsKLSAgICByZXR1cm4gc3RhdChmaWxlbmFtZSwgJmJ1ZikgPT0gMDsKLX0KLQotLyogSXMgbW9kdWxlICAoY2hlY2sgZm9yIC5weWMvLnB5byB0b28pCi0gKiBBc3N1bWVzICdmaWxlbmFtZScgTUFYUEFUSExFTisxIGJ5dGVzIGxvbmcgLQotICogbWF5IGV4dGVuZCAnZmlsZW5hbWUnIGJ5IG9uZSBjaGFyYWN0ZXIuCi0gKi8KLXN0YXRpYyBpbnQKLWlzbW9kdWxlKGNoYXIgKmZpbGVuYW1lKQotewotICAgIGlmIChleGlzdHMoZmlsZW5hbWUpKQotICAgICAgICByZXR1cm4gMTsKLQotICAgIC8qIENoZWNrIGZvciB0aGUgY29tcGlsZWQgdmVyc2lvbiBvZiBwcmVmaXguICovCi0gICAgaWYgKHN0cmxlbihmaWxlbmFtZSkgPCBNQVhQQVRITEVOKSB7Ci0gICAgICAgIHN0cmNhdChmaWxlbmFtZSwgUHlfT3B0aW1pemVGbGFnID8gIm8iIDogImMiKTsKLSAgICAgICAgaWYgKGV4aXN0cyhmaWxlbmFtZSkpCi0gICAgICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLS8qIEFkZCBhIHBhdGggY29tcG9uZW50LCBieSBhcHBlbmRpbmcgc3R1ZmYgdG8gYnVmZmVyLgotICAgYnVmZmVyIG11c3QgaGF2ZSBhdCBsZWFzdCBNQVhQQVRITEVOICsgMSBieXRlcyBhbGxvY2F0ZWQsIGFuZCBjb250YWluIGEKLSAgIE5VTC10ZXJtaW5hdGVkIHN0cmluZyB3aXRoIG5vIG1vcmUgdGhhbiBNQVhQQVRITEVOIGNoYXJhY3RlcnMgKG5vdCBjb3VudGluZwotICAgdGhlIHRyYWlsaW5nIE5VTCkuICBJdCdzIGEgZmF0YWwgZXJyb3IgaWYgaXQgY29udGFpbnMgYSBzdHJpbmcgbG9uZ2VyIHRoYW4KLSAgIHRoYXQgKGNhbGxlcnMgbXVzdCBiZSBjYXJlZnVsISkuICBJZiB0aGVzZSByZXF1aXJlbWVudHMgYXJlIG1ldCwgaXQncwotICAgZ3VhcmFudGVlZCB0aGF0IGJ1ZmZlciB3aWxsIHN0aWxsIGJlIGEgTlVMLXRlcm1pbmF0ZWQgc3RyaW5nIHdpdGggbm8gbW9yZQotICAgdGhhbiBNQVhQQVRITEVOIGNoYXJhY3RlcnMgYXQgZXhpdC4gIElmIHN0dWZmIGlzIHRvbyBsb25nLCBvbmx5IGFzIG11Y2ggb2YKLSAgIHN0dWZmIGFzIGZpdHMgd2lsbCBiZSBhcHBlbmRlZC4KLSovCi0KLXN0YXRpYyB2b2lkCi1qb2luKGNoYXIgKmJ1ZmZlciwgY2hhciAqc3R1ZmYpCi17Ci0gICAgc2l6ZV90IG4sIGs7Ci0gICAgaWYgKGlzX3NlcChzdHVmZlswXSkpCi0gICAgICAgIG4gPSAwOwotICAgIGVsc2UgewotICAgICAgICBuID0gc3RybGVuKGJ1ZmZlcik7Ci0gICAgICAgIGlmIChuID4gMCAmJiAhaXNfc2VwKGJ1ZmZlcltuLTFdKSAmJiBuIDwgTUFYUEFUSExFTikKLSAgICAgICAgICAgIGJ1ZmZlcltuKytdID0gU0VQOwotICAgIH0KLSAgICBpZiAobiA+IE1BWFBBVEhMRU4pCi0gICAgICAgIFB5X0ZhdGFsRXJyb3IoImJ1ZmZlciBvdmVyZmxvdyBpbiBnZXRwYXRocC5jJ3Mgam9pbnBhdGgoKSIpOwotICAgIGsgPSBzdHJsZW4oc3R1ZmYpOwotICAgIGlmIChuICsgayA+IE1BWFBBVEhMRU4pCi0gICAgICAgIGsgPSBNQVhQQVRITEVOIC0gbjsKLSAgICBzdHJuY3B5KGJ1ZmZlcituLCBzdHVmZiwgayk7Ci0gICAgYnVmZmVyW24ra10gPSAnXDAnOwotfQotCi0vKiBnb3RsYW5kbWFyayBvbmx5IGNhbGxlZCBieSBzZWFyY2hfZm9yX3ByZWZpeCwgd2hpY2ggZW5zdXJlcwotICogJ3ByZWZpeCcgaXMgbnVsbCB0ZXJtaW5hdGVkIGluIGJvdW5kcy4gIGpvaW4oKSBlbnN1cmVzCi0gKiAnbGFuZG1hcmsnIGNhbiBub3Qgb3ZlcmZsb3cgcHJlZml4IGlmIHRvbyBsb25nLgotICovCi1zdGF0aWMgaW50Ci1nb3RsYW5kbWFyayhjaGFyICpsYW5kbWFyaykKLXsKLSAgICBpbnQgbiwgb2s7Ci0KLSAgICBuID0gc3RybGVuKHByZWZpeCk7Ci0gICAgam9pbihwcmVmaXgsIGxhbmRtYXJrKTsKLSAgICBvayA9IGlzbW9kdWxlKHByZWZpeCk7Ci0gICAgcHJlZml4W25dID0gJ1wwJzsKLSAgICByZXR1cm4gb2s7Ci19Ci0KLS8qIGFzc3VtZXMgYXJndjBfcGF0aCBpcyBNQVhQQVRITEVOKzEgYnl0ZXMgbG9uZywgYWxyZWFkeSBcMCB0ZXJtJ2QuCi0gKiBhc3N1bXB0aW9uIHByb3ZpZGVkIGJ5IG9ubHkgY2FsbGVyLCBjYWxjdWxhdGVfcGF0aCgpCi0gKi8KLXN0YXRpYyBpbnQKLXNlYXJjaF9mb3JfcHJlZml4KGNoYXIgKmFyZ3YwX3BhdGgsIGNoYXIgKmxhbmRtYXJrKQotewotICAgIC8qIFNlYXJjaCBmcm9tIGFyZ3YwX3BhdGgsIHVudGlsIGxhbmRtYXJrIGlzIGZvdW5kICovCi0gICAgc3RyY3B5KHByZWZpeCwgYXJndjBfcGF0aCk7Ci0gICAgZG8gewotICAgICAgICBpZiAoZ290bGFuZG1hcmsobGFuZG1hcmspKQotICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgIHJlZHVjZShwcmVmaXgpOwotICAgIH0gd2hpbGUgKHByZWZpeFswXSk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLQotc3RhdGljIHZvaWQKLWdldF9wcm9ncGF0aCh2b2lkKQotewotICAgIGV4dGVybiBjaGFyICpQeV9HZXRQcm9ncmFtTmFtZSh2b2lkKTsKLSAgICBjaGFyICpwYXRoID0gZ2V0ZW52KCJQQVRIIik7Ci0gICAgY2hhciAqcHJvZyA9IFB5X0dldFByb2dyYW1OYW1lKCk7Ci0KLSAgICBQUElCIHBpYjsKLSAgICBpZiAoKERvc0dldEluZm9CbG9ja3MoTlVMTCwgJnBpYikgPT0gMCkgJiYKLSAgICAgICAgKERvc1F1ZXJ5TW9kdWxlTmFtZShwaWItPnBpYl9obXRlLCBzaXplb2YocHJvZ3BhdGgpLCBwcm9ncGF0aCkgPT0gMCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChwcm9nID09IE5VTEwgfHwgKnByb2cgPT0gJ1wwJykKLSAgICAgICAgcHJvZyA9ICJweXRob24iOwotCi0gICAgLyogSWYgdGhlcmUgaXMgbm8gc2xhc2ggaW4gdGhlIGFyZ3YwIHBhdGgsIHRoZW4gd2UgaGF2ZSB0bwotICAgICAqIGFzc3VtZSBweXRob24gaXMgb24gdGhlIHVzZXIncyAkUEFUSCwgc2luY2UgdGhlcmUncyBubwotICAgICAqIG90aGVyIHdheSB0byBmaW5kIGEgZGlyZWN0b3J5IHRvIHN0YXJ0IHRoZSBzZWFyY2ggZnJvbS4gIElmCi0gICAgICogJFBBVEggaXNuJ3QgZXhwb3J0ZWQsIHlvdSBsb3NlLgotICAgICAqLwotI2lmZGVmIEFMVFNFUAotICAgIGlmIChzdHJjaHIocHJvZywgU0VQKSB8fCBzdHJjaHIocHJvZywgQUxUU0VQKSkKLSNlbHNlCi0gICAgaWYgKHN0cmNocihwcm9nLCBTRVApKQotI2VuZGlmCi0gICAgICAgIHN0cm5jcHkocHJvZ3BhdGgsIHByb2csIE1BWFBBVEhMRU4pOwotICAgIGVsc2UgaWYgKHBhdGgpIHsKLSAgICAgICAgd2hpbGUgKDEpIHsKLSAgICAgICAgICAgIGNoYXIgKmRlbGltID0gc3RyY2hyKHBhdGgsIERFTElNKTsKLQotICAgICAgICAgICAgaWYgKGRlbGltKSB7Ci0gICAgICAgICAgICAgICAgc2l6ZV90IGxlbiA9IGRlbGltIC0gcGF0aDsKLSAgICAgICAgICAgICAgICAvKiBlbnN1cmUgd2UgY2FuJ3Qgb3ZlcndyaXRlIGJ1ZmZlciAqLwotI2lmICFkZWZpbmVkKFBZQ0NfR0NDKQotICAgICAgICAgICAgICAgIGxlbiA9IG1pbihNQVhQQVRITEVOLGxlbik7Ci0jZWxzZQotICAgICAgICAgICAgICAgIGxlbiA9IE1BWFBBVEhMRU4gPCBsZW4gPyBNQVhQQVRITEVOIDogbGVuOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgc3RybmNweShwcm9ncGF0aCwgcGF0aCwgbGVuKTsKLSAgICAgICAgICAgICAgICAqKHByb2dwYXRoICsgbGVuKSA9ICdcMCc7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc3RybmNweShwcm9ncGF0aCwgcGF0aCwgTUFYUEFUSExFTik7Ci0KLSAgICAgICAgICAgIC8qIGpvaW4oKSBpcyBzYWZlIGZvciBNQVhQQVRITEVOKzEgc2l6ZSBidWZmZXIgKi8KLSAgICAgICAgICAgIGpvaW4ocHJvZ3BhdGgsIHByb2cpOwotICAgICAgICAgICAgaWYgKGV4aXN0cyhwcm9ncGF0aCkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGlmICghZGVsaW0pIHsKLSAgICAgICAgICAgICAgICBwcm9ncGF0aFswXSA9ICdcMCc7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwYXRoID0gZGVsaW0gKyAxOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICAgICAgcHJvZ3BhdGhbMF0gPSAnXDAnOwotfQotCi1zdGF0aWMgdm9pZAotY2FsY3VsYXRlX3BhdGgodm9pZCkKLXsKLSAgICBjaGFyIGFyZ3YwX3BhdGhbTUFYUEFUSExFTisxXTsKLSAgICBjaGFyICpidWY7Ci0gICAgc2l6ZV90IGJ1ZnN6OwotICAgIGNoYXIgKnB5dGhvbmhvbWUgPSBQeV9HZXRQeXRob25Ib21lKCk7Ci0gICAgY2hhciAqZW52cGF0aCA9IGdldGVudigiUFlUSE9OUEFUSCIpOwotICAgIGNoYXIgemlwX3BhdGhbTUFYUEFUSExFTisxXTsKLSAgICBzaXplX3QgbGVuOwotCi0gICAgZ2V0X3Byb2dwYXRoKCk7Ci0gICAgLyogcHJvZ3BhdGggZ3VhcmFudGVlZCBcMCB0ZXJtaW5hdGVkIGluIE1BWFBBVEgrMSBieXRlcy4gKi8KLSAgICBzdHJjcHkoYXJndjBfcGF0aCwgcHJvZ3BhdGgpOwotICAgIHJlZHVjZShhcmd2MF9wYXRoKTsKLSAgICBpZiAocHl0aG9uaG9tZSA9PSBOVUxMIHx8ICpweXRob25ob21lID09ICdcMCcpIHsKLSAgICAgICAgaWYgKHNlYXJjaF9mb3JfcHJlZml4KGFyZ3YwX3BhdGgsIExBTkRNQVJLKSkKLSAgICAgICAgICAgIHB5dGhvbmhvbWUgPSBwcmVmaXg7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHB5dGhvbmhvbWUgPSBOVUxMOwotICAgIH0KLSAgICBlbHNlCi0gICAgICAgIHN0cm5jcHkocHJlZml4LCBweXRob25ob21lLCBNQVhQQVRITEVOKTsKLQotICAgIGlmIChlbnZwYXRoICYmICplbnZwYXRoID09ICdcMCcpCi0gICAgICAgIGVudnBhdGggPSBOVUxMOwotCi0gICAgLyogQ2FsY3VsYXRlIHppcCBhcmNoaXZlIHBhdGggKi8KLSAgICBzdHJuY3B5KHppcF9wYXRoLCBwcm9ncGF0aCwgTUFYUEFUSExFTik7Ci0gICAgemlwX3BhdGhbTUFYUEFUSExFTl0gPSAnXDAnOwotICAgIGxlbiA9IHN0cmxlbih6aXBfcGF0aCk7Ci0gICAgaWYgKGxlbiA+IDQpIHsKLSAgICAgICAgemlwX3BhdGhbbGVuLTNdID0gJ3onOyAgLyogY2hhbmdlIGVuZGluZyB0byAiemlwIiAqLwotICAgICAgICB6aXBfcGF0aFtsZW4tMl0gPSAnaSc7Ci0gICAgICAgIHppcF9wYXRoW2xlbi0xXSA9ICdwJzsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIHppcF9wYXRoWzBdID0gMDsKLSAgICB9Ci0KLSAgICAvKiBXZSBuZWVkIHRvIGNvbnN0cnVjdCBhIHBhdGggZnJvbSB0aGUgZm9sbG93aW5nIHBhcnRzLgotICAgICAqICgxKSB0aGUgUFlUSE9OUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZSwgaWYgc2V0OwotICAgICAqICgyKSB0aGUgemlwIGFyY2hpdmUgZmlsZSBwYXRoOwotICAgICAqICgzKSB0aGUgUFlUSE9OUEFUSCBjb25maWcgbWFjcm8sIHdpdGggdGhlIGxlYWRpbmcgIi4iCi0gICAgICogICAgIG9mIGVhY2ggY29tcG9uZW50IHJlcGxhY2VkIHdpdGggcHl0aG9uaG9tZSwgaWYgc2V0OwotICAgICAqICg0KSB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIGV4ZWN1dGFibGUgKGFyZ3YwX3BhdGgpLgotICAgICAqIFRoZSBsZW5ndGggY2FsY3VsYXRpb24gY2FsY3VsYXRlcyAjMyBmaXJzdC4KLSAgICAgKi8KLQotICAgIC8qIENhbGN1bGF0ZSBzaXplIG9mIHJldHVybiBidWZmZXIgKi8KLSAgICBpZiAocHl0aG9uaG9tZSAhPSBOVUxMKSB7Ci0gICAgICAgIGNoYXIgKnA7Ci0gICAgICAgIGJ1ZnN6ID0gMTsKLSAgICAgICAgZm9yIChwID0gUFlUSE9OUEFUSDsgKnA7IHArKykgewotICAgICAgICAgICAgaWYgKCpwID09IERFTElNKQotICAgICAgICAgICAgICAgIGJ1ZnN6Kys7IC8qIG51bWJlciBvZiBERUxJTSBwbHVzIG9uZSAqLwotICAgICAgICB9Ci0gICAgICAgIGJ1ZnN6ICo9IHN0cmxlbihweXRob25ob21lKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgICBidWZzeiA9IDA7Ci0gICAgYnVmc3ogKz0gc3RybGVuKFBZVEhPTlBBVEgpICsgMTsKLSAgICBidWZzeiArPSBzdHJsZW4oYXJndjBfcGF0aCkgKyAxOwotICAgIGJ1ZnN6ICs9IHN0cmxlbih6aXBfcGF0aCkgKyAxOwotICAgIGlmIChlbnZwYXRoICE9IE5VTEwpCi0gICAgICAgIGJ1ZnN6ICs9IHN0cmxlbihlbnZwYXRoKSArIDE7Ci0KLSAgICBtb2R1bGVfc2VhcmNoX3BhdGggPSBidWYgPSBtYWxsb2MoYnVmc3opOwotICAgIGlmIChidWYgPT0gTlVMTCkgewotICAgICAgICAvKiBXZSBjYW4ndCBleGl0LCBzbyBwcmludCBhIHdhcm5pbmcgYW5kIGxpbXAgYWxvbmcgKi8KLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJDYW4ndCBtYWxsb2MgZHluYW1pYyBQWVRIT05QQVRILlxuIik7Ci0gICAgICAgIGlmIChlbnZwYXRoKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlVzaW5nIGVudmlyb25tZW50ICRQWVRIT05QQVRILlxuIik7Ci0gICAgICAgICAgICBtb2R1bGVfc2VhcmNoX3BhdGggPSBlbnZwYXRoOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJVc2luZyBkZWZhdWx0IHN0YXRpYyBwYXRoLlxuIik7Ci0gICAgICAgICAgICBtb2R1bGVfc2VhcmNoX3BhdGggPSBQWVRIT05QQVRIOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoZW52cGF0aCkgewotICAgICAgICBzdHJjcHkoYnVmLCBlbnZwYXRoKTsKLSAgICAgICAgYnVmID0gc3RyY2hyKGJ1ZiwgJ1wwJyk7Ci0gICAgICAgICpidWYrKyA9IERFTElNOwotICAgIH0KLSAgICBpZiAoemlwX3BhdGhbMF0pIHsKLSAgICAgICAgc3RyY3B5KGJ1ZiwgemlwX3BhdGgpOwotICAgICAgICBidWYgPSBzdHJjaHIoYnVmLCAnXDAnKTsKLSAgICAgICAgKmJ1ZisrID0gREVMSU07Ci0gICAgfQotCi0gICAgaWYgKHB5dGhvbmhvbWUgPT0gTlVMTCkgewotICAgICAgICBzdHJjcHkoYnVmLCBQWVRIT05QQVRIKTsKLSAgICAgICAgYnVmID0gc3RyY2hyKGJ1ZiwgJ1wwJyk7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICBjaGFyICpwID0gUFlUSE9OUEFUSDsKLSAgICAgICAgY2hhciAqcTsKLSAgICAgICAgc2l6ZV90IG47Ci0gICAgICAgIGZvciAoOzspIHsKLSAgICAgICAgICAgIHEgPSBzdHJjaHIocCwgREVMSU0pOwotICAgICAgICAgICAgaWYgKHEgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICBuID0gc3RybGVuKHApOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG4gPSBxLXA7Ci0gICAgICAgICAgICBpZiAocFswXSA9PSAnLicgJiYgaXNfc2VwKHBbMV0pKSB7Ci0gICAgICAgICAgICAgICAgc3RyY3B5KGJ1ZiwgcHl0aG9uaG9tZSk7Ci0gICAgICAgICAgICAgICAgYnVmID0gc3RyY2hyKGJ1ZiwgJ1wwJyk7Ci0gICAgICAgICAgICAgICAgcCsrOwotICAgICAgICAgICAgICAgIG4tLTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHN0cm5jcHkoYnVmLCBwLCBuKTsKLSAgICAgICAgICAgIGJ1ZiArPSBuOwotICAgICAgICAgICAgaWYgKHEgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICpidWYrKyA9IERFTElNOwotICAgICAgICAgICAgcCA9IHErMTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoYXJndjBfcGF0aCkgewotICAgICAgICAqYnVmKysgPSBERUxJTTsKLSAgICAgICAgc3RyY3B5KGJ1ZiwgYXJndjBfcGF0aCk7Ci0gICAgICAgIGJ1ZiA9IHN0cmNocihidWYsICdcMCcpOwotICAgIH0KLSAgICAqYnVmID0gJ1wwJzsKLX0KLQotCi0vKiBFeHRlcm5hbCBpbnRlcmZhY2UgKi8KLQotY2hhciAqCi1QeV9HZXRQYXRoKHZvaWQpCi17Ci0gICAgaWYgKCFtb2R1bGVfc2VhcmNoX3BhdGgpCi0gICAgICAgIGNhbGN1bGF0ZV9wYXRoKCk7Ci0gICAgcmV0dXJuIG1vZHVsZV9zZWFyY2hfcGF0aDsKLX0KLQotY2hhciAqCi1QeV9HZXRQcmVmaXgodm9pZCkKLXsKLSAgICBpZiAoIW1vZHVsZV9zZWFyY2hfcGF0aCkKLSAgICAgICAgY2FsY3VsYXRlX3BhdGgoKTsKLSAgICByZXR1cm4gcHJlZml4OwotfQotCi1jaGFyICoKLVB5X0dldEV4ZWNQcmVmaXgodm9pZCkKLXsKLSAgICByZXR1cm4gUHlfR2V0UHJlZml4KCk7Ci19Ci0KLWNoYXIgKgotUHlfR2V0UHJvZ3JhbUZ1bGxQYXRoKHZvaWQpCi17Ci0gICAgaWYgKCFtb2R1bGVfc2VhcmNoX3BhdGgpCi0gICAgICAgIGNhbGN1bGF0ZV9wYXRoKCk7Ci0gICAgcmV0dXJuIHByb2dwYXRoOwotfQpkaWZmIC0tZ2l0IGEvUEMvb3MyZW14L3B5Y29uZmlnLmggYi9QQy9vczJlbXgvcHljb25maWcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTU2MTA1YS4uMDAwMDAwMAotLS0gYS9QQy9vczJlbXgvcHljb25maWcuaAorKysgL2Rldi9udWxsCkBAIC0xLDMzMiArMCwwIEBACi0jaWZuZGVmIFB5X0NPTkZJR19ICi0jZGVmaW5lIFB5X0NPTkZJR19ICi0KLSNlcnJvciAiUEVQIDExOiBPUy8yIGlzIG5vdyB1bnN1cHBvcnRlZCwgY29kZSB3aWxsIGJlIHJlbW92ZWQgaW4gUHl0aG9uIDMuNCIKLQotLyogY29uZmlnLmguCi0gKiBBdCBzb21lIHRpbWUgaW4gdGhlIHBhc3QsIGdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5L2Zyb20gY29uZmlndXJlLgotICogbm93IG1haW50YWluZWQgbWFudWFsbHkuCi0gKi8KLQotLyogYnVpbGQgZW52aXJvbm1lbnQgKi8KLSNkZWZpbmUgUExBVEZPUk0JIm9zMmVteCIKLSNkZWZpbmUgQ09NUElMRVIJIltFTVggR0NDICIgX19WRVJTSU9OX18gIl0iCi0jZGVmaW5lIFBZT1NfT1MyCTEKLSNkZWZpbmUgUFlDQ19HQ0MJMQotCi0vKiBkZWZhdWx0IGxvY2F0aW9uKHMpICovCi0jaWZuZGVmIFBSRUZJWAotI2RlZmluZSBQUkVGSVgJCSIiCi0jZW5kaWYKLSNpZm5kZWYgUFlUSE9OUEFUSAotI2RlZmluZSBQWVRIT05QQVRICSIuL0xpYjsuL0xpYi9wbGF0LSIgUExBVEZPUk0gXAotCQkJIjsuL0xpYi9saWItZHlubG9hZDsuL0xpYi9zaXRlLXBhY2thZ2VzIgotI2VuZGlmCi0KLS8qIERlYnVnZ2luZyAqLwotI2lmbmRlZiBQeV9ERUJVRwotLyojZGVmaW5lIFB5X0RFQlVHIDEqLwotI2VuZGlmCi0KLS8qIGlmIGJ1aWxkaW5nIGFuIGV4dGVuc2lvbiBvciB3cmFwcGVyIGV4ZWN1dGFibGUsCi0gKiBtYXJrIFB5dGhvbiBBUEkgc3ltYm9scyAiZXh0ZXJuIiBzbyB0aGF0IHN5bWJvbHMKLSAqIGltcG9ydGVkIGZyb20gdGhlIFB5dGhvbiBjb3JlIERMTCBhcmVuJ3QgZHVwbGljYXRlZC4KLSAqLwotI2lmZGVmIFB5X0JVSUxEX0NPUkUKLSMgIGRlZmluZSBQeUFQSV9GVU5DKFJUWVBFKQlSVFlQRQotI2Vsc2UKLSMgIGRlZmluZSBQeUFQSV9GVU5DKFJUWVBFKQlleHRlcm4gUlRZUEUKLSNlbmRpZgotI2RlZmluZSBQeUFQSV9EQVRBKFJUWVBFKQlleHRlcm4gUlRZUEUKLSNkZWZpbmUgUHlNT0RJTklUX0ZVTkMJdm9pZAotCi0vKiBVc2UgT1MvMiBmbGF2b3VyIG9mIHRocmVhZHMgKi8KLSNkZWZpbmUgV0lUSF9USFJFQUQJMQotI2RlZmluZSBPUzJfVEhSRUFEUwkxCi0KLS8qIFdlIHdhbnQgc29ja2V0cyAqLwotI2RlZmluZSBUQ1BJUFY0CQkxCi0jZGVmaW5lIFVTRV9TT0NLRVQJMQotI2RlZmluZSBzb2NrbGVuX3QJaW50Ci0jZGVmaW5lIEZEX1NFVFNJWkUJMTAyNAotCi0vKiBlbmFibGUgdGhlIFB5dGhvbiBvYmplY3QgYWxsb2NhdG9yICovCi0jZGVmaW5lCVdJVEhfUFlNQUxMT0MJMQotCi0vKiBlbmFibGUgdGhlIEdDIG1vZHVsZSAqLwotI2RlZmluZSBXSVRIX0NZQ0xFX0dDCTEKLQotLyogRGVmaW5lIGlmIHlvdSB3YW50IGRvY3VtZW50YXRpb24gc3RyaW5ncyBpbiBleHRlbnNpb24gbW9kdWxlcyAqLwotI2RlZmluZSBXSVRIX0RPQ19TVFJJTkdTIDEKLQotLyogVW5pY29kZSByZWxhdGVkICovCi0jZGVmaW5lIFBZX1VOSUNPREVfVFlQRQl3Y2hhcl90Ci0jZGVmaW5lIFB5X1VOSUNPREVfU0laRSBTSVpFT0ZfU0hPUlQKLQotLyogRU1YIGRlZmluZXMgc3NpemVfdCAqLwotI2RlZmluZSBIQVZFX1NTSVpFX1QJMQotCi0vKiBzeXN0ZW0gY2FwYWJpbGl0aWVzICovCi0jZGVmaW5lIEhBVkVfVFRZTkFNRQkxCi0jZGVmaW5lIEhBVkVfV0FJVAkxCi0jZGVmaW5lIEhBVkVfR0VURUdJRCAgICAxCi0jZGVmaW5lIEhBVkVfR0VURVVJRCAgICAxCi0jZGVmaW5lIEhBVkVfR0VUR0lEICAgICAxCi0jZGVmaW5lIEhBVkVfR0VUUFBJRCAgICAxCi0jZGVmaW5lIEhBVkVfR0VUVUlEICAgICAxCi0jZGVmaW5lIEhBVkVfT1BFTkRJUiAgICAxCi0jZGVmaW5lIEhBVkVfUElQRSAgICAgICAxCi0jZGVmaW5lIEhBVkVfUE9QRU4gICAgICAxCi0jZGVmaW5lIEhBVkVfU1lTVEVNCTEKLSNkZWZpbmUgSEFWRV9UVFlOQU1FCTEKLSNkZWZpbmUgSEFWRV9EWU5BTUlDX0xPQURJTkcJMQotCi0vKiBpZiBwb3J0IG9mIEdEQk0gaW5zdGFsbGVkLCBpdCBpbmNsdWRlcyBOREJNIGVtdWxhdGlvbiAqLwotI2RlZmluZSBIQVZFX05EQk1fSCAxCi0KLS8qIG5lZWQgdGhpcyBmb3Igc3Bhd252IGNvZGUgaW4gcG9zaXhtb2R1bGUgKGNsb25lZCBmcm9tIFdJTjMyIGRlZiduKSAqLwotdHlwZWRlZiBsb25nIGludHB0cl90OwotCi0vKiB3ZSBkb24ndCBoYXZlIHRtX3pvbmUgYnV0IGRvIGhhdmUgdGhlIGV4dGVybmFsIGFycmF5IHR6bmFtZSAqLwotI2RlZmluZSBIQVZFX1RaTkFNRSAxCi0KLS8qIERlZmluZSBhcyB0aGUgcmV0dXJuIHR5cGUgb2Ygc2lnbmFsIGhhbmRsZXJzIChpbnQgb3Igdm9pZCkuICovCi0jZGVmaW5lIFJFVFNJR1RZUEUgdm9pZAotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIEFOU0kgQyBoZWFkZXIgZmlsZXMuICovCi0jZGVmaW5lIFNURENfSEVBREVSUyAxCi0KLS8qIERlZmluZSBpZiB5b3UgY2FuIHNhZmVseSBpbmNsdWRlIGJvdGggPHN5cy90aW1lLmg+IGFuZCA8dGltZS5oPi4gKi8KLSNkZWZpbmUgVElNRV9XSVRIX1NZU19USU1FIDEKLQotLyogRGVmaW5lIHRoaXMgaWYgeW91IGhhdmUgdGhlIHR5cGUgbG9uZyBsb25nLiAqLwotI2RlZmluZSBIQVZFX0xPTkdfTE9ORyAxCi0KLS8qIERlZmluZSBpZiB5b3VyIGNvbXBpbGVyIHN1cHBvcnRzIGZ1bmN0aW9uIHByb3RvdHlwZXMuICovCi0jZGVmaW5lIEhBVkVfUFJPVE9UWVBFUyAxCi0KLS8qIERlZmluZSBpZiB5b3VyIGNvbXBpbGVyIHN1cHBvcnRzIHZhcmlhYmxlIGxlbmd0aCBmdW5jdGlvbiBwcm90b3R5cGVzCi0gKiAoZS5nLiB2b2lkIGZwcmludGYoRklMRSAqLCBjaGFyICosIC4uLik7KSAqYW5kKiA8c3RkYXJnLmg+LgotICovCi0jZGVmaW5lIEhBVkVfU1REQVJHX1BST1RPVFlQRVMgMQotCi0vKiBEZWZpbmUgaWYgbWFsbG9jKDApIHJldHVybnMgYSBOVUxMIHBvaW50ZXIuICovCi0jZGVmaW5lIE1BTExPQ19aRVJPX1JFVFVSTlNfTlVMTCAxCi0KLS8qIERlZmluZSB0byBmb3JjZSB1c2Ugb2YgdGhyZWFkLXNhZmUgZXJybm8sIGhfZXJybm8sIGFuZCBvdGhlciBmdW5jdGlvbnMuICovCi0jZGVmaW5lIF9SRUVOVFJBTlQgMQotCi0vKiBEZWZpbmUgaWYgeW91IGNhbiBzYWZlbHkgaW5jbHVkZSBib3RoIDxzeXMvc2VsZWN0Lmg+IGFuZCA8c3lzL3RpbWUuaD4KLSAqICh3aGljaCB5b3UgY2FuJ3Qgb24gU0NPIE9EVCAzLjApLgotICovCi0jZGVmaW5lIFNZU19TRUxFQ1RfV0lUSF9TWVNfVElNRSAxCi0KLS8qIFRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gYW4gb2ZmX3QuICovCi0jZGVmaW5lIFNJWkVPRl9PRkZfVCA0Ci0KLS8qIFRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gYW4gdGltZV90LiAqLwotI2RlZmluZSBTSVpFT0ZfVElNRV9UIDQKLQotLyogVGhlIG51bWJlciBvZiBieXRlcyBpbiBhIHNob3J0LiAqLwotI2RlZmluZSBTSVpFT0ZfU0hPUlQgMgotCi0vKiBUaGUgbnVtYmVyIG9mIGJ5dGVzIGluIGEgaW50LiAqLwotI2RlZmluZSBTSVpFT0ZfSU5UIDQKLQotLyogVGhlIG51bWJlciBvZiBieXRlcyBpbiBhIGxvbmcuICovCi0jZGVmaW5lIFNJWkVPRl9MT05HIDQKLQotLyogVGhlIG51bWJlciBvZiBieXRlcyBpbiBhIGxvbmcgbG9uZy4gKi8KLSNkZWZpbmUgU0laRU9GX0xPTkdfTE9ORyA4Ci0KLS8qIFRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gYSB2b2lkICouICovCi0jZGVmaW5lIFNJWkVPRl9WT0lEX1AgNAotCi0vKiBUaGUgbnVtYmVyIG9mIGJ5dGVzIGluIGEgc2l6ZV90LiAqLwotI2RlZmluZSBTSVpFT0ZfU0laRV9UIDQKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBhbGFybSBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9BTEFSTSAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgY2xvY2sgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfQ0xPQ0sgMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGR1cDIgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfRFVQMiAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgZXhlY3YgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfRVhFQ1YgMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHNwYXdudiBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9TUEFXTlYgMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGZsb2NrIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX0ZMT0NLIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBmb3JrIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX0ZPUksgMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGZzeW5jIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX0ZTWU5DIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBmdGltZSBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9GVElNRSAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgZnRydW5jYXRlIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX0ZUUlVOQ0FURSAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgZ2V0Y3dkIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX0dFVENXRCAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgZ2V0cGVlcm5hbWUgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfR0VUUEVFUk5BTUUgMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGdldHBncnAgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfR0VUUEdSUCAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgZ2V0cGlkIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX0dFVFBJRCAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgZ2V0cHdlbnQgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfR0VUUFdFTlQgMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGdldHRpbWVvZmRheSBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9HRVRUSU1FT0ZEQVkgMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGdldHdkIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX0dFVFdEIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBoeXBvdCBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9IWVBPVCAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUga2lsbCBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9LSUxMIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBtZW1tb3ZlIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX01FTU1PVkUgMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIG1rdGltZSBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9NS1RJTUUgMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHBhdXNlIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX1BBVVNFIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBwdXRlbnYgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfUFVURU5WIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBzZWxlY3QgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfU0VMRUNUIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBzZXRnaWQgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfU0VUR0lEIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBzZXRsb2NhbGUgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfU0VUTE9DQUxFIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBzZXRwZ2lkIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX1NFVFBHSUQgMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHNldHVpZCBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9TRVRVSUQgMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHNldHZidWYgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfU0VUVkJVRiAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgc2lnYWN0aW9uIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX1NJR0FDVElPTiAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgc3RyZXJyb3IgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfU1RSRVJST1IgMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHN0cmZ0aW1lIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX1NUUkZUSU1FIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSB0Y2dldHBncnAgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfVENHRVRQR1JQIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSB0Y3NldHBncnAgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfVENTRVRQR1JQIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSB0bXBmaWxlIGZ1bmN0aW9uLiAgKi8KLSNkZWZpbmUgSEFWRV9UTVBGSUxFIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSB0aW1lcyBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9USU1FUyAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgdHJ1bmNhdGUgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfVFJVTkNBVEUgMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHVuYW1lIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX1VOQU1FIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSB3YWl0cGlkIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX1dBSVRQSUQgMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxjb25pby5oPiBoZWFkZXIgZmlsZS4gKi8KLSN1bmRlZiBIQVZFX0NPTklPX0gKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8ZGlyZWN0Lmg+IGhlYWRlciBmaWxlLiAqLwotI3VuZGVmIEhBVkVfRElSRUNUX0gKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8ZGlyZW50Lmg+IGhlYWRlciBmaWxlLiAqLwotI2RlZmluZSBIQVZFX0RJUkVOVF9IIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8ZXJybm8uaD4gaGVhZGVyIGZpbGUuICovCi0jZGVmaW5lIEhBVkVfRVJSTk9fSCAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPGZjbnRsLmg+IGhlYWRlciBmaWxlLiAqLwotI2RlZmluZSBIQVZFX0ZDTlRMX0ggMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxpby5oPiBoZWFkZXIgZmlsZS4gKi8KLSN1bmRlZiBIQVZFX0lPX0gKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8bmN1cnNlcy5oPiBoZWFkZXIgZmlsZS4gKi8KLSNkZWZpbmUgSEFWRV9OQ1VSU0VTX0ggMQotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHByb2Nlc3MuaD4gaGVhZGVyIGZpbGUuICovCi0jZGVmaW5lIEhBVkVfUFJPQ0VTU19IIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c2lnbmFsLmg+IGhlYWRlciBmaWxlLiAqLwotI2RlZmluZSBIQVZFX1NJR05BTF9IIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c3lzL2ZpbGUuaD4gaGVhZGVyIGZpbGUuICovCi0jZGVmaW5lIEhBVkVfU1lTX0ZJTEVfSCAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9wYXJhbS5oPiBoZWFkZXIgZmlsZS4gKi8KLSNkZWZpbmUgSEFWRV9TWVNfUEFSQU1fSCAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9zZWxlY3QuaD4gaGVhZGVyIGZpbGUuICovCi0jZGVmaW5lIEhBVkVfU1lTX1NFTEVDVF9IIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3N0YXQuaD4gaGVhZGVyIGZpbGUuICovCi0jZGVmaW5lIEhBVkVfU1lTX1NUQVRfSCAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy90aW1lLmg+IGhlYWRlciBmaWxlLiAqLwotI2RlZmluZSBIQVZFX1NZU19USU1FX0ggMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxzeXMvdGltZXMuaD4gaGVhZGVyIGZpbGUuICovCi0jZGVmaW5lIEhBVkVfU1lTX1RJTUVTX0ggMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxzeXMvdHlwZXMuaD4gaGVhZGVyIGZpbGUuICovCi0jZGVmaW5lIEhBVkVfU1lTX1RZUEVTX0ggMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxzeXMvdW4uaD4gaGVhZGVyIGZpbGUuICovCi0jZGVmaW5lIEhBVkVfU1lTX1VOX0ggMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxzeXMvdXRzbmFtZS5oPiBoZWFkZXIgZmlsZS4gKi8KLSNkZWZpbmUgSEFWRV9TWVNfVVRTTkFNRV9IIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3dhaXQuaD4gaGVhZGVyIGZpbGUuICovCi0jZGVmaW5lIEhBVkVfU1lTX1dBSVRfSCAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHVuaXN0ZC5oPiBoZWFkZXIgZmlsZS4gKi8KLSNkZWZpbmUgSEFWRV9VTklTVERfSCAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHV0aW1lLmg+IGhlYWRlciBmaWxlLiAqLwotI2RlZmluZSBIQVZFX1VUSU1FX0ggMQotCi0vKiBFTVggaGFzIGFuIHNucHJpbnRmKCkuICovCi0jZGVmaW5lIEhBVkVfU05QUklOVEYgMQotCi0jZW5kaWYgLyogIVB5X0NPTkZJR19IICovCi0KZGlmZiAtLWdpdCBhL1BDL29zMmVteC9weXRob24zMy5kZWYgYi9QQy9vczJlbXgvcHl0aG9uMzMuZGVmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNTY3MjZiLi4wMDAwMDAwCi0tLSBhL1BDL29zMmVteC9weXRob24zMy5kZWYKKysrIC9kZXYvbnVsbApAQCAtMSwxMzE0ICswLDAgQEAKLUxJQlJBUlkgcHl0aG9uMzMgSU5JVElOU1RBTkNFIFRFUk1JTlNUQU5DRSAKLURFU0NSSVBUSU9OICJQeXRob24gMi42IENvcmUgRExMIiAKLVBST1RNT0RFIAotREFUQSBNVUxUSVBMRSBOT05TSEFSRUQgCi1FWFBPUlRTIAotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoY29uZmlnKQotICAiX1B5SW1wb3J0X0luaXR0YWIiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihkbGZjbikKLTsgICJkbG9wZW4iCi07ICAiZGxzeW0iCi07ICAiZGxjbG9zZSIKLTsgICJkbGVycm9yIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoZ2V0cGF0aHApCi0gICJQeV9HZXRQcm9ncmFtRnVsbFBhdGgiCi0gICJQeV9HZXRQcmVmaXgiCi0gICJQeV9HZXRFeGVjUHJlZml4IgotICAiUHlfR2V0UGF0aCIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGdldGJ1aWxkaW5mbykKLSAgIlB5X0dldEJ1aWxkSW5mbyIKLSAgIl9QeV9zdm52ZXJzaW9uIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIobWFpbikKLSAgIlB5X01haW4iCi0gICJQeV9HZXRBcmdjQXJndiIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGFjY2VsZXIpCi0gICJQeUdyYW1tYXJfQWRkQWNjZWxlcmF0b3JzIgotICAiUHlHcmFtbWFyX1JlbW92ZUFjY2VsZXJhdG9ycyIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGdyYW1tYXIxKQotICAiUHlHcmFtbWFyX0ZpbmRERkEiCi0gICJQeUdyYW1tYXJfTGFiZWxSZXByIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIobGlzdG5vZGUpCi0gICJQeU5vZGVfTGlzdFRyZWUiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihub2RlKQotICAiUHlOb2RlX05ldyIKLSAgIlB5Tm9kZV9BZGRDaGlsZCIKLSAgIlB5Tm9kZV9GcmVlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIocGFyc2VyKQotICAiUHlQYXJzZXJfQWRkVG9rZW4iCi0gICJQeVBhcnNlcl9OZXciCi0gICJQeVBhcnNlcl9EZWxldGUiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihwYXJzZXRvaykKLSAgIlB5UGFyc2VyX1BhcnNlU3RyaW5nIgotICAiUHlQYXJzZXJfUGFyc2VTdHJpbmdGbGFnc0ZpbGVuYW1lIgotICAiUHlQYXJzZXJfUGFyc2VGaWxlIgotICAiUHlQYXJzZXJfUGFyc2VGaWxlRmxhZ3MiCi0gICJQeVBhcnNlcl9QYXJzZVN0cmluZ0ZsYWdzIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoYml0c2V0KQotICAiX1B5X25ld2JpdHNldCIKLSAgIl9QeV9kZWxiaXRzZXQiCi0gICJfUHlfYWRkYml0IgotICAiX1B5X3NhbWViaXRzZXQiCi0gICJfUHlfbWVyZ2ViaXRzZXQiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihtZXRhZ3JhbW1hcikKLSAgIl9QeV9tZXRhX2dyYW1tYXIiCi0gICJQeV9tZXRhX2dyYW1tYXIiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYih0b2tlbml6ZXIpCi0gICJQeVRva2VuX09uZUNoYXIiCi0gICJQeVRva2VuX1R3b0NoYXJzIgotICAiUHlUb2tlbl9UaHJlZUNoYXJzIgotICAiUHlUb2tlbml6ZXJfRnJvbVN0cmluZyIKLSAgIlB5VG9rZW5pemVyX0ZyZWUiCi0gICJQeVRva2VuaXplcl9Gcm9tRmlsZSIKLSAgIlB5VG9rZW5pemVyX0dldCIKLSAgIl9QeVBhcnNlcl9Ub2tlbk5hbWVzIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIobXlyZWFkbGluZSkKLSAgIl9QeU9TX1JlYWRsaW5lVFN0YXRlIgotICAiUHlPU19SZWFkbGluZUZ1bmN0aW9uUG9pbnRlciIKLSAgIlB5T1NfU3RkaW9SZWFkbGluZSIKLSAgIlB5T1NfUmVhZGxpbmUiCi0gICJQeU9TX0lucHV0SG9vayIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGFic3RyYWN0KQotICAiX1B5T2JqZWN0X0xlbmd0aEhpbnQiCi0gICJQeU1hcHBpbmdfU2l6ZSIKLSAgIlB5T2JqZWN0X0NhbGxNZXRob2QiCi0gICJQeU9iamVjdF9HZXRJdGVtIgotICAiUHlTZXF1ZW5jZV9HZXRJdGVtIgotICAiUHlPYmplY3RfU2V0SXRlbSIKLSAgIlB5U2VxdWVuY2VfU2V0SXRlbSIKLSAgIlB5T2JqZWN0X0RlbEl0ZW0iCi0gICJQeVNlcXVlbmNlX0RlbEl0ZW0iCi0gICJQeU51bWJlcl9NdWx0aXBseSIKLSAgIlB5TnVtYmVyX0luUGxhY2VBZGQiCi0gICJQeU51bWJlcl9JblBsYWNlTXVsdGlwbHkiCi0gICJQeU51bWJlcl9JbnQiCi0gICJQeU51bWJlcl9Mb25nIgotICAiUHlOdW1iZXJfRmxvYXQiCi0gICJQeVNlcXVlbmNlX0NvbmNhdCIKLSAgIlB5U2VxdWVuY2VfUmVwZWF0IgotICAiUHlTZXF1ZW5jZV9JblBsYWNlQ29uY2F0IgotICAiUHlTZXF1ZW5jZV9JblBsYWNlUmVwZWF0IgotICAiUHlTZXF1ZW5jZV9HZXRTbGljZSIKLSAgIlB5U2VxdWVuY2VfU2V0U2xpY2UiCi0gICJQeVNlcXVlbmNlX1R1cGxlIgotICAiUHlPYmplY3RfR2V0SXRlciIKLSAgIlB5SXRlcl9OZXh0IgotICAiUHlTZXF1ZW5jZV9GYXN0IgotICAiX1B5U2VxdWVuY2VfSXRlclNlYXJjaCIKLSAgIlB5T2JqZWN0X0NhbGxGdW5jdGlvbiIKLSAgIl9QeU9iamVjdF9DYWxsRnVuY3Rpb25fU2l6ZVQiCi0gICJfUHlPYmplY3RfQ2FsbE1ldGhvZF9TaXplVCIKLSAgIlB5T2JqZWN0X0NhbGxNZXRob2RPYmpBcmdzIgotICAiUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyIKLSAgIlB5T2JqZWN0X0NtcCIKLSAgIlB5T2JqZWN0X0NhbGwiCi0gICJQeU9iamVjdF9DYWxsT2JqZWN0IgotICAiUHlPYmplY3RfVHlwZSIKLSAgIlB5T2JqZWN0X1NpemUiCi0gICJQeU9iamVjdF9MZW5ndGgiCi0gICJQeU9iamVjdF9EZWxJdGVtU3RyaW5nIgotICAiUHlPYmplY3RfQXNDaGFyQnVmZmVyIgotICAiUHlPYmplY3RfQ2hlY2tSZWFkQnVmZmVyIgotICAiUHlPYmplY3RfQXNSZWFkQnVmZmVyIgotICAiUHlPYmplY3RfQXNXcml0ZUJ1ZmZlciIKLSAgIlB5TnVtYmVyX0NoZWNrIgotICAiUHlOdW1iZXJfQWRkIgotICAiUHlOdW1iZXJfU3VidHJhY3QiCi0gICJQeU51bWJlcl9EaXZpZGUiCi0gICJQeU51bWJlcl9GbG9vckRpdmlkZSIKLSAgIlB5TnVtYmVyX1RydWVEaXZpZGUiCi0gICJQeU51bWJlcl9SZW1haW5kZXIiCi0gICJQeU51bWJlcl9EaXZtb2QiCi0gICJQeU51bWJlcl9Qb3dlciIKLSAgIlB5TnVtYmVyX05lZ2F0aXZlIgotICAiUHlOdW1iZXJfUG9zaXRpdmUiCi0gICJQeU51bWJlcl9BYnNvbHV0ZSIKLSAgIlB5TnVtYmVyX0ludmVydCIKLSAgIlB5TnVtYmVyX0xzaGlmdCIKLSAgIlB5TnVtYmVyX1JzaGlmdCIKLSAgIlB5TnVtYmVyX0FuZCIKLSAgIlB5TnVtYmVyX1hvciIKLSAgIlB5TnVtYmVyX09yIgotICAiUHlOdW1iZXJfSW5kZXgiCi0gICJQeU51bWJlcl9JblBsYWNlU3VidHJhY3QiCi0gICJQeU51bWJlcl9JblBsYWNlRGl2aWRlIgotICAiUHlOdW1iZXJfSW5QbGFjZUZsb29yRGl2aWRlIgotICAiUHlOdW1iZXJfSW5QbGFjZVRydWVEaXZpZGUiCi0gICJQeU51bWJlcl9JblBsYWNlUmVtYWluZGVyIgotICAiUHlOdW1iZXJfSW5QbGFjZVBvd2VyIgotICAiUHlOdW1iZXJfSW5QbGFjZUxzaGlmdCIKLSAgIlB5TnVtYmVyX0luUGxhY2VSc2hpZnQiCi0gICJQeU51bWJlcl9JblBsYWNlQW5kIgotICAiUHlOdW1iZXJfSW5QbGFjZVhvciIKLSAgIlB5TnVtYmVyX0luUGxhY2VPciIKLSAgIlB5U2VxdWVuY2VfQ2hlY2siCi0gICJQeVNlcXVlbmNlX1NpemUiCi0gICJQeVNlcXVlbmNlX0xlbmd0aCIKLSAgIlB5U2VxdWVuY2VfRGVsU2xpY2UiCi0gICJQeVNlcXVlbmNlX0xpc3QiCi0gICJQeVNlcXVlbmNlX0NvdW50IgotICAiUHlTZXF1ZW5jZV9Db250YWlucyIKLSAgIlB5U2VxdWVuY2VfSW4iCi0gICJQeVNlcXVlbmNlX0luZGV4IgotICAiUHlNYXBwaW5nX0NoZWNrIgotICAiUHlNYXBwaW5nX0xlbmd0aCIKLSAgIlB5TWFwcGluZ19IYXNLZXlTdHJpbmciCi0gICJQeU1hcHBpbmdfSGFzS2V5IgotICAiUHlNYXBwaW5nX0dldEl0ZW1TdHJpbmciCi0gICJQeU1hcHBpbmdfU2V0SXRlbVN0cmluZyIKLSAgIlB5T2JqZWN0X0lzSW5zdGFuY2UiCi0gICJQeU9iamVjdF9Jc1N1YmNsYXNzIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoYm9vbG9iamVjdCkKLSAgIlB5Qm9vbF9Gcm9tTG9uZyIKLSAgIlB5Qm9vbF9UeXBlIgotICAiX1B5X1plcm9TdHJ1Y3QiCi0gICJfUHlfVHJ1ZVN0cnVjdCIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGJ1ZmZlcm9iamVjdCkKLSAgIlB5QnVmZmVyX0Zyb21PYmplY3QiCi0gICJQeUJ1ZmZlcl9Gcm9tUmVhZFdyaXRlT2JqZWN0IgotICAiUHlCdWZmZXJfRnJvbU1lbW9yeSIKLSAgIlB5QnVmZmVyX0Zyb21SZWFkV3JpdGVNZW1vcnkiCi0gICJQeUJ1ZmZlcl9OZXciCi0gICJQeUJ1ZmZlcl9UeXBlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoY2VsbG9iamVjdCkKLSAgIlB5Q2VsbF9OZXciCi0gICJQeUNlbGxfR2V0IgotICAiUHlDZWxsX1NldCIKLSAgIlB5Q2VsbF9UeXBlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoY2xhc3NvYmplY3QpCi0gICJQeUNsYXNzX05ldyIKLSAgIlB5Q2xhc3NfSXNTdWJjbGFzcyIKLSAgIlB5SW5zdGFuY2VfTmV3IgotICAiUHlJbnN0YW5jZV9OZXdSYXciCi0gICJQeU1ldGhvZF9OZXciCi0gICJQeU1ldGhvZF9GdW5jdGlvbiIKLSAgIlB5TWV0aG9kX1NlbGYiCi0gICJQeU1ldGhvZF9DbGFzcyIKLSAgIl9QeUluc3RhbmNlX0xvb2t1cCIKLSAgIlB5TWV0aG9kX0ZpbmkiCi0gICJQeUNsYXNzX1R5cGUiCi0gICJQeUluc3RhbmNlX1R5cGUiCi0gICJQeU1ldGhvZF9UeXBlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoY2Fwc3VsZSkKLSAgIlB5Q2Fwc3VsZV9HZXRDb250ZXh0IgotICAiUHlDYXBzdWxlX0dldERlc3RydWN0b3IiCi0gICJQeUNhcHN1bGVfR2V0TmFtZSIKLSAgIlB5Q2Fwc3VsZV9HZXRQb2ludGVyIgotICAiUHlDYXBzdWxlX0ltcG9ydCIKLSAgIlB5Q2Fwc3VsZV9Jc1ZhbGlkIgotICAiUHlDYXBzdWxlX05ldyIKLSAgIlB5Q2Fwc3VsZV9TZXRDb250ZXh0IgotICAiUHlDYXBzdWxlX1NldERlc3RydWN0b3IiCi0gICJQeUNhcHN1bGVfU2V0TmFtZSIKLSAgIlB5Q2Fwc3VsZV9TZXRQb2ludGVyIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoY29iamVjdCkKLSAgIlB5Q09iamVjdF9Gcm9tVm9pZFB0ciIKLSAgIlB5Q09iamVjdF9Gcm9tVm9pZFB0ckFuZERlc2MiCi0gICJQeUNPYmplY3RfQXNWb2lkUHRyIgotICAiUHlDT2JqZWN0X0dldERlc2MiCi0gICJQeUNPYmplY3RfSW1wb3J0IgotICAiUHlDT2JqZWN0X1NldFZvaWRQdHIiCi0gICJQeUNPYmplY3RfVHlwZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGNvZGVvYmplY3QpCi0gICJQeUNvZGVfTmV3IgotICAiUHlDb2RlX0FkZHIyTGluZSIKLSAgIlB5Q29kZV9DaGVja0xpbmVOdW1iZXIiCi0gICJQeUNvZGVfVHlwZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGNvbXBsZXhvYmplY3QpCi0gICJfUHlfY19wb3ciCi0gICJfUHlfY19zdW0iCi0gICJfUHlfY19kaWZmIgotICAiX1B5X2NfbmVnIgotICAiX1B5X2NfcHJvZCIKLSAgIl9QeV9jX3F1b3QiCi0gICJQeUNvbXBsZXhfRnJvbUNDb21wbGV4IgotICAiUHlDb21wbGV4X0Zyb21Eb3VibGVzIgotICAiUHlDb21wbGV4X1JlYWxBc0RvdWJsZSIKLSAgIlB5Q29tcGxleF9JbWFnQXNEb3VibGUiCi0gICJQeUNvbXBsZXhfQXNDQ29tcGxleCIKLSAgIlB5Q29tcGxleF9UeXBlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoZGVzY3JvYmplY3QpCi0gICJQeVdyYXBwZXJfTmV3IgotICAiUHlEZXNjcl9OZXdNZXRob2QiCi0gICJQeURlc2NyX05ld0NsYXNzTWV0aG9kIgotICAiUHlEZXNjcl9OZXdNZW1iZXIiCi0gICJQeURlc2NyX05ld0dldFNldCIKLSAgIlB5RGVzY3JfTmV3V3JhcHBlciIKLSAgIlB5RGljdFByb3h5X05ldyIKLSAgIlB5V3JhcHBlckRlc2NyX1R5cGUiCi0gICJQeVByb3BlcnR5X1R5cGUiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihkaWN0b2JqZWN0KQotICAiUHlEaWN0X05ldyIKLSAgIlB5RGljdF9HZXRJdGVtIgotICAiUHlEaWN0X1NldEl0ZW0iCi0gICJQeURpY3RfRGVsSXRlbSIKLSAgIlB5RGljdF9DbGVhciIKLSAgIlB5RGljdF9NZXJnZUZyb21TZXEyIgotICAiUHlEaWN0X01lcmdlIgotICAiUHlEaWN0X0tleXMiCi0gICJQeURpY3RfVmFsdWVzIgotICAiUHlEaWN0X0NvbnRhaW5zIgotICAiUHlEaWN0X05leHQiCi0gICJQeURpY3RfSXRlbXMiCi0gICJQeURpY3RfU2l6ZSIKLSAgIlB5RGljdF9Db3B5IgotICAiUHlEaWN0X1VwZGF0ZSIKLSAgIlB5RGljdF9HZXRJdGVtU3RyaW5nIgotICAiUHlEaWN0X1NldEl0ZW1TdHJpbmciCi0gICJQeURpY3RfRGVsSXRlbVN0cmluZyIKLSAgIlB5RGljdF9UeXBlIgotICAiUHlEaWN0SXRlcktleV9UeXBlIgotICAiUHlEaWN0SXRlclZhbHVlX1R5cGUiCi0gICJQeURpY3RJdGVySXRlbV9UeXBlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoZW51bW9iamVjdCkKLSAgIlB5RW51bV9UeXBlIgotICAiUHlSZXZlcnNlZF9UeXBlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoZmlsZW9iamVjdCkKLSAgIlB5RmlsZV9Gcm9tU3RyaW5nIgotICAiUHlfVW5pdmVyc2FsTmV3bGluZUZyZWFkIgotICAiUHlGaWxlX0dldExpbmUiCi0gICJQeUZpbGVfU29mdFNwYWNlIgotICAiUHlGaWxlX1dyaXRlT2JqZWN0IgotICAiUHlGaWxlX1dyaXRlU3RyaW5nIgotICAiUHlPYmplY3RfQXNGaWxlRGVzY3JpcHRvciIKLSAgIlB5X1VuaXZlcnNhbE5ld2xpbmVGZ2V0cyIKLSAgIlB5RmlsZV9TZXRCdWZTaXplIgotICAiUHlGaWxlX1NldEVuY29kaW5nIgotICAiUHlGaWxlX0Zyb21GaWxlIgotICAiUHlGaWxlX0FzRmlsZSIKLSAgIlB5RmlsZV9OYW1lIgotICAiUHlGaWxlX1R5cGUiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihmbG9hdG9iamVjdCkKLSAgIlB5RmxvYXRfRnJvbVN0cmluZyIKLSAgIlB5RmxvYXRfQXNEb3VibGUiCi0gICJQeUZsb2F0X0ZpbmkiCi0gICJfUHlGbG9hdF9QYWNrNCIKLSAgIl9QeUZsb2F0X1BhY2s4IgotICAiX1B5RmxvYXRfVW5wYWNrNCIKLSAgIl9QeUZsb2F0X1VucGFjazgiCi0gICJQeUZsb2F0X0Zyb21Eb3VibGUiCi0gICJQeUZsb2F0X0FzUmVwclN0cmluZyIKLSAgIlB5RmxvYXRfQXNTdHJpbmciCi0gICJfUHlGbG9hdF9Jbml0IgotICAiUHlGbG9hdF9Bc1N0cmluZ0V4IgotICAiUHlGbG9hdF9UeXBlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoZnJhbWVvYmplY3QpCi0gICJQeUZyYW1lX05ldyIKLSAgIlB5RnJhbWVfRmFzdFRvTG9jYWxzIgotICAiUHlGcmFtZV9Mb2NhbHNUb0Zhc3QiCi0gICJfUHlGcmFtZV9Jbml0IgotICAiUHlGcmFtZV9GaW5pIgotICAiUHlGcmFtZV9CbG9ja1NldHVwIgotICAiUHlGcmFtZV9CbG9ja1BvcCIKLSAgIlB5RnJhbWVfVHlwZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGZ1bmNvYmplY3QpCi0gICJQeUZ1bmN0aW9uX05ldyIKLSAgIlB5RnVuY3Rpb25fR2V0Q29kZSIKLSAgIlB5RnVuY3Rpb25fR2V0R2xvYmFscyIKLSAgIlB5RnVuY3Rpb25fR2V0TW9kdWxlIgotICAiUHlGdW5jdGlvbl9HZXREZWZhdWx0cyIKLSAgIlB5RnVuY3Rpb25fU2V0RGVmYXVsdHMiCi0gICJQeUZ1bmN0aW9uX0dldENsb3N1cmUiCi0gICJQeUZ1bmN0aW9uX1NldENsb3N1cmUiCi0gICJQeUNsYXNzTWV0aG9kX05ldyIKLSAgIlB5U3RhdGljTWV0aG9kX05ldyIKLSAgIlB5RnVuY3Rpb25fVHlwZSIKLSAgIlB5Q2xhc3NNZXRob2RfVHlwZSIKLSAgIlB5U3RhdGljTWV0aG9kX1R5cGUiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihnZW5vYmplY3QpCi0gICJQeUdlbl9OZXciCi0gICJQeUdlbl9OZWVkc0ZpbmFsaXppbmciCi0gICJQeUdlbl9UeXBlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoaW50b2JqZWN0KQotICAiUHlJbnRfQXNMb25nIgotICAiUHlJbnRfQXNVbnNpZ25lZExvbmdNYXNrIgotICAiUHlJbnRfQXNVbnNpZ25lZExvbmdMb25nTWFzayIKLSAgIlB5SW50X0Zyb21TdHJpbmciCi0gICJQeUludF9Bc1NzaXplX3QiCi0gICJQeUludF9GaW5pIgotICAiUHlJbnRfRnJvbVVuaWNvZGUiCi0gICJQeUludF9Gcm9tTG9uZyIKLSAgIlB5SW50X0Zyb21TaXplX3QiCi0gICJQeUludF9Gcm9tU3NpemVfdCIKLSAgIlB5SW50X0dldE1heCIKLSAgIl9QeUludF9Jbml0IgotICAiUHlJbnRfVHlwZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGl0ZXJvYmplY3QpCi0gICJQeVNlcUl0ZXJfTmV3IgotICAiUHlDYWxsSXRlcl9OZXciCi0gICJQeVNlcUl0ZXJfVHlwZSIKLSAgIlB5Q2FsbEl0ZXJfVHlwZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGxpc3RvYmplY3QpCi0gICJQeUxpc3RfTmV3IgotICAiUHlMaXN0X0FwcGVuZCIKLSAgIlB5TGlzdF9TaXplIgotICAiUHlMaXN0X0dldEl0ZW0iCi0gICJQeUxpc3RfU2V0SXRlbSIKLSAgIlB5TGlzdF9JbnNlcnQiCi0gICJQeUxpc3RfR2V0U2xpY2UiCi0gICJQeUxpc3RfU2V0U2xpY2UiCi0gICJQeUxpc3RfU29ydCIKLSAgIlB5TGlzdF9SZXZlcnNlIgotICAiUHlMaXN0X0FzVHVwbGUiCi0gICJfUHlMaXN0X0V4dGVuZCIKLSAgIlB5TGlzdF9GaW5pIgotICAiUHlMaXN0X1R5cGUiCi0gICJQeUxpc3RJdGVyX1R5cGUiCi0gICJQeUxpc3RSZXZJdGVyX1R5cGUiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihsb25nb2JqZWN0KQotICAiUHlMb25nX0Zyb21Eb3VibGUiCi0gICJQeUxvbmdfQXNMb25nIgotICAiX1B5TG9uZ19Bc1NzaXplX3QiCi0gICJQeUxvbmdfQXNVbnNpZ25lZExvbmciCi0gICJfUHlMb25nX0Zyb21CeXRlQXJyYXkiCi0gICJfUHlMb25nX0FzQnl0ZUFycmF5IgotICAiUHlMb25nX0FzRG91YmxlIgotICAiUHlMb25nX0Zyb21Mb25nTG9uZyIKLSAgIlB5TG9uZ19Bc0xvbmdMb25nIgotICAiUHlMb25nX0Zyb21TdHJpbmciCi0gICJQeUxvbmdfRnJvbUxvbmciCi0gICJQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZyIKLSAgIlB5TG9uZ19Bc1Vuc2lnbmVkTG9uZ01hc2siCi0gICJfUHlMb25nX0Zyb21TaXplX3QiCi0gICJfUHlMb25nX0Zyb21Tc2l6ZV90IgotICAiX1B5TG9uZ19Bc1NjYWxlZERvdWJsZSIKLSAgIlB5TG9uZ19Gcm9tVm9pZFB0ciIKLSAgIlB5TG9uZ19Bc1ZvaWRQdHIiCi0gICJQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZ0xvbmciCi0gICJQeUxvbmdfQXNVbnNpZ25lZExvbmdMb25nIgotICAiUHlMb25nX0FzVW5zaWduZWRMb25nTG9uZ01hc2siCi0gICJQeUxvbmdfRnJvbVVuaWNvZGUiCi0gICJfUHlMb25nX1NpZ24iCi0gICJfUHlMb25nX051bUJpdHMiCi0gICJfUHlMb25nX05ldyIKLSAgIl9QeUxvbmdfQ29weSIKLSAgIlB5TG9uZ19UeXBlIgotICAiX1B5TG9uZ19EaWdpdFZhbHVlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIobWV0aG9kb2JqZWN0KQotICAiUHlDRnVuY3Rpb25fQ2FsbCIKLSAgIlB5X0ZpbmRNZXRob2RJbkNoYWluIgotICAiUHlDRnVuY3Rpb25fR2V0RnVuY3Rpb24iCi0gICJQeUNGdW5jdGlvbl9HZXRTZWxmIgotICAiUHlDRnVuY3Rpb25fR2V0RmxhZ3MiCi0gICJQeV9GaW5kTWV0aG9kIgotICAiUHlDRnVuY3Rpb25fTmV3RXgiCi0gICJQeUNGdW5jdGlvbl9GaW5pIgotICAiUHlDRnVuY3Rpb25fTmV3IgotICAiUHlDRnVuY3Rpb25fVHlwZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKG1vZHVsZW9iamVjdCkKLSAgIlB5TW9kdWxlX05ldyIKLSAgIl9QeU1vZHVsZV9DbGVhciIKLSAgIlB5TW9kdWxlX0dldERpY3QiCi0gICJQeU1vZHVsZV9HZXROYW1lIgotICAiUHlNb2R1bGVfR2V0RmlsZW5hbWUiCi0gICJQeU1vZHVsZV9UeXBlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIob2JqZWN0KQotICAiUHlfRGl2aXNpb25XYXJuaW5nRmxhZyIKLSAgIlB5T2JqZWN0X1N0ciIKLSAgIlB5T2JqZWN0X1JlcHIiCi0gICJfUHlPYmplY3RfU3RyIgotICAiUHlPYmplY3RfVW5pY29kZSIKLSAgIlB5T2JqZWN0X0dldEF0dHIiCi0gICJQeU9iamVjdF9Jc1RydWUiCi0gICJQeU51bWJlcl9Db2VyY2VFeCIKLSAgIlB5T2JqZWN0X0NvbXBhcmUiCi0gICJQeU9iamVjdF9SaWNoQ29tcGFyZSIKLSAgIl9QeV9IYXNoRG91YmxlIgotICAiUHlPYmplY3RfSGFzaCIKLSAgIlB5T2JqZWN0X1NldEF0dHIiCi0gICJQeU9iamVjdF9HZW5lcmljR2V0QXR0ciIKLSAgIlB5T2JqZWN0X0dlbmVyaWNTZXRBdHRyIgotICAiUHlDYWxsYWJsZV9DaGVjayIKLSAgIlB5T2JqZWN0X0RpciIKLSAgIlB5TWVtX01hbGxvYyIKLSAgIlB5TWVtX1JlYWxsb2MiCi0gICJQeU1lbV9GcmVlIgotICAiUHlPYmplY3RfUHJpbnQiCi0gICJfUHlPYmplY3RfRHVtcCIKLSAgIlB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbCIKLSAgIlB5T2JqZWN0X0dldEF0dHJTdHJpbmciCi0gICJQeU9iamVjdF9TZXRBdHRyU3RyaW5nIgotICAiUHlPYmplY3RfSGFzQXR0clN0cmluZyIKLSAgIlB5T2JqZWN0X0hhc0F0dHIiCi0gICJfUHlPYmplY3RfR2V0RGljdFB0ciIKLSAgIlB5T2JqZWN0X1NlbGZJdGVyIgotICAiUHlPYmplY3RfTm90IgotICAiUHlOdW1iZXJfQ29lcmNlIgotICAiUHlfUmVwckVudGVyIgotICAiUHlfUmVwckxlYXZlIgotICAiX1B5X0hhc2hQb2ludGVyIgotICAiUHlfSW5jUmVmIgotICAiUHlfRGVjUmVmIgotICAiX1B5VHJhc2hfZGVwb3NpdF9vYmplY3QiCi0gICJfUHlUcmFzaF9kZXN0cm95X2NoYWluIgotICAiUHlPYmplY3RfSW5pdCIKLSAgIlB5T2JqZWN0X0luaXRWYXIiCi0gICJfUHlPYmplY3RfTmV3IgotICAiX1B5T2JqZWN0X05ld1ZhciIKLSAgIl9QeU9iamVjdF9EZWwiCi0gICJfUHlfUmVhZHlUeXBlcyIKLSAgIl9QeV9Td2FwcGVkT3AiCi0gICJfUHlfTm90SW1wbGVtZW50ZWRTdHJ1Y3QiCi0gICJfUHlfTm9uZVN0cnVjdCIKLSAgIl9QeV9jb2JqZWN0X2hhY2siCi0gICJfUHlfYWJzdHJhY3RfaGFjayIKLSAgIl9QeVRyYXNoX2RlbGV0ZV9uZXN0aW5nIgotICAiX1B5VHJhc2hfZGVsZXRlX2xhdGVyIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIob2JtYWxsb2MpCi0gICJQeU9iamVjdF9NYWxsb2MiCi0gICJQeU9iamVjdF9GcmVlIgotICAiUHlPYmplY3RfUmVhbGxvYyIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKHJhbmdlb2JqZWN0KQotICAiUHlSYW5nZV9UeXBlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoc2V0b2JqZWN0KQotICAiUHlTZXRfUG9wIgotICAiUHlTZXRfTmV3IgotICAiUHlGcm96ZW5TZXRfTmV3IgotICAiUHlTZXRfU2l6ZSIKLSAgIlB5U2V0X0NsZWFyIgotICAiUHlTZXRfQ29udGFpbnMiCi0gICJQeVNldF9EaXNjYXJkIgotICAiUHlTZXRfQWRkIgotICAiX1B5U2V0X05leHQiCi0gICJfUHlTZXRfVXBkYXRlIgotICAiUHlTZXRfRmluaSIKLSAgIlB5U2V0X1R5cGUiCi0gICJQeUZyb3plblNldF9UeXBlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoc2xpY2VvYmplY3QpCi0gICJfUHlTbGljZV9Gcm9tSW5kaWNlcyIKLSAgIlB5U2xpY2VfR2V0SW5kaWNlcyIKLSAgIlB5U2xpY2VfR2V0SW5kaWNlc0V4IgotICAiUHlTbGljZV9OZXciCi0gICJfUHlfRWxsaXBzaXNPYmplY3QiCi0gICJQeVNsaWNlX1R5cGUiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihzdHJpbmdvYmplY3QpCi0gICJQeVN0cmluZ19Gcm9tU3RyaW5nQW5kU2l6ZSIKLSAgIlB5U3RyaW5nX0ludGVybkluUGxhY2UiCi0gICJQeVN0cmluZ19Gcm9tU3RyaW5nIgotICAiUHlTdHJpbmdfRnJvbUZvcm1hdFYiCi0gICJQeVN0cmluZ19Bc1N0cmluZyIKLSAgIl9QeVN0cmluZ19SZXNpemUiCi0gICJQeVN0cmluZ19Gcm9tRm9ybWF0IgotICAiUHlTdHJpbmdfQXNEZWNvZGVkU3RyaW5nIgotICAiUHlTdHJpbmdfQXNFbmNvZGVkU3RyaW5nIgotICAiUHlTdHJpbmdfRGVjb2RlRXNjYXBlIgotICAiUHlTdHJpbmdfUmVwciIKLSAgIlB5U3RyaW5nX0FzU3RyaW5nQW5kU2l6ZSIKLSAgIl9QeVN0cmluZ19Gb3JtYXRMb25nIgotICAiUHlTdHJpbmdfRm9ybWF0IgotICAiX1B5X1JlbGVhc2VJbnRlcm5lZFN0cmluZ3MiCi0gICJQeVN0cmluZ19TaXplIgotICAiUHlTdHJpbmdfQ29uY2F0IgotICAiUHlTdHJpbmdfQ29uY2F0QW5kRGVsIgotICAiX1B5U3RyaW5nX0VxIgotICAiUHlTdHJpbmdfSW50ZXJuSW1tb3J0YWwiCi0gICJQeVN0cmluZ19JbnRlcm5Gcm9tU3RyaW5nIgotICAiX1B5U3RyaW5nX0pvaW4iCi0gICJQeVN0cmluZ19EZWNvZGUiCi0gICJQeVN0cmluZ19FbmNvZGUiCi0gICJQeVN0cmluZ19Bc0VuY29kZWRPYmplY3QiCi0gICJQeVN0cmluZ19Bc0RlY29kZWRPYmplY3QiCi0gICJQeVN0cmluZ19GaW5pIgotICAiUHlTdHJpbmdfVHlwZSIKLSAgIlB5QmFzZVN0cmluZ19UeXBlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoc3RydWN0c2VxKQotICAiUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZSIKLSAgIlB5U3RydWN0U2VxdWVuY2VfTmV3IgotICAiUHlTdHJ1Y3RTZXF1ZW5jZV9Vbm5hbWVkRmllbGQiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYih0dXBsZW9iamVjdCkKLSAgIlB5VHVwbGVfTmV3IgotICAiUHlUdXBsZV9QYWNrIgotICAiX1B5VHVwbGVfUmVzaXplIgotICAiUHlUdXBsZV9TaXplIgotICAiUHlUdXBsZV9HZXRJdGVtIgotICAiUHlUdXBsZV9TZXRJdGVtIgotICAiUHlUdXBsZV9HZXRTbGljZSIKLSAgIlB5VHVwbGVfRmluaSIKLSAgIlB5VHVwbGVfVHlwZSIKLSAgIlB5VHVwbGVJdGVyX1R5cGUiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYih0eXBlb2JqZWN0KQotICAiUHlUeXBlX0lzU3VidHlwZSIKLSAgIl9QeVR5cGVfTG9va3VwIgotICAiUHlUeXBlX1JlYWR5IgotICAiUHlUeXBlX0dlbmVyaWNBbGxvYyIKLSAgIl9QeU9iamVjdF9TbG90Q29tcGFyZSIKLSAgIlB5VHlwZV9HZW5lcmljTmV3IgotICAiUHlUeXBlX1R5cGUiCi0gICJQeUJhc2VPYmplY3RfVHlwZSIKLSAgIlB5U3VwZXJfVHlwZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKHVuaWNvZGVvYmplY3QpCi0gICJQeVVuaWNvZGVVQ1MyX1Jlc2l6ZSIKLSAgIlB5VW5pY29kZVVDUzJfRnJvbU9yZGluYWwiCi0gICJQeVVuaWNvZGVVQ1MyX0Zyb21PYmplY3QiCi0gICJQeVVuaWNvZGVVQ1MyX0Zyb21FbmNvZGVkT2JqZWN0IgotICAiUHlVbmljb2RlVUNTMl9EZWNvZGUiCi0gICJQeVVuaWNvZGVVQ1MyX0dldERlZmF1bHRFbmNvZGluZyIKLSAgIlB5VW5pY29kZVVDUzJfRGVjb2RlVVRGOCIKLSAgIlB5VW5pY29kZVVDUzJfRGVjb2RlTGF0aW4xIgotICAiUHlVbmljb2RlVUNTMl9EZWNvZGVBU0NJSSIKLSAgIlB5VW5pY29kZVVDUzJfQXNFbmNvZGVkU3RyaW5nIgotICAiUHlVbmljb2RlVUNTMl9Bc1VURjhTdHJpbmciCi0gICJQeVVuaWNvZGVVQ1MyX0FzTGF0aW4xU3RyaW5nIgotICAiUHlVbmljb2RlVUNTMl9Bc0FTQ0lJU3RyaW5nIgotICAiUHlVbmljb2RlX0RlY29kZVVURjciCi0gICJQeVVuaWNvZGVfRW5jb2RlVVRGNyIKLSAgIlB5VW5pY29kZVVDUzJfRGVjb2RlVVRGOFN0YXRlZnVsIgotICAiUHlVbmljb2RlVUNTMl9FbmNvZGVVVEY4IgotICAiUHlVbmljb2RlVUNTMl9EZWNvZGVVVEYxNlN0YXRlZnVsIgotICAiUHlVbmljb2RlVUNTMl9Bc1VURjE2U3RyaW5nIgotICAiUHlVbmljb2RlVUNTMl9EZWNvZGVVbmljb2RlRXNjYXBlIgotICAiUHlVbmljb2RlVUNTMl9EZWNvZGVSYXdVbmljb2RlRXNjYXBlIgotICAiUHlVbmljb2RlVUNTMl9FbmNvZGVSYXdVbmljb2RlRXNjYXBlIgotICAiX1B5VW5pY29kZV9EZWNvZGVVbmljb2RlSW50ZXJuYWwiCi0gICJQeVVuaWNvZGVVQ1MyX0RlY29kZUNoYXJtYXAiCi0gICJQeVVuaWNvZGVfQnVpbGRFbmNvZGluZ01hcCIKLSAgIlB5VW5pY29kZVVDUzJfRW5jb2RlQ2hhcm1hcCIKLSAgIlB5VW5pY29kZVVDUzJfVHJhbnNsYXRlQ2hhcm1hcCIKLSAgIlB5VW5pY29kZVVDUzJfRW5jb2RlRGVjaW1hbCIKLSAgIlB5VW5pY29kZVVDUzJfQ291bnQiCi0gICJQeVVuaWNvZGVVQ1MyX0ZpbmQiCi0gICJQeVVuaWNvZGVVQ1MyX0pvaW4iCi0gICJQeVVuaWNvZGVVQ1MyX1NwbGl0bGluZXMiCi0gICJQeVVuaWNvZGVVQ1MyX0NvbXBhcmUiCi0gICJQeVVuaWNvZGVVQ1MyX0NvbnRhaW5zIgotICAiUHlVbmljb2RlVUNTMl9Db25jYXQiCi0gICJfUHlVbmljb2RlX1hTdHJpcCIKLSAgIlB5VW5pY29kZVVDUzJfUmVwbGFjZSIKLSAgIlB5VW5pY29kZVVDUzJfU3BsaXQiCi0gICJQeVVuaWNvZGVVQ1MyX1JTcGxpdCIKLSAgIlB5VW5pY29kZVVDUzJfRm9ybWF0IgotICAiX1B5VW5pY29kZVVDUzJfSW5pdCIKLSAgIl9QeVVuaWNvZGVVQ1MyX0ZpbmkiCi0gICJQeVVuaWNvZGVVQ1MyX0Zyb21Vbmljb2RlIgotICAiUHlVbmljb2RlVUNTMl9Bc1VuaWNvZGUiCi0gICJQeVVuaWNvZGVVQ1MyX0dldFNpemUiCi0gICJQeVVuaWNvZGVVQ1MyX0dldE1heCIKLSAgIl9QeVVuaWNvZGVVQ1MyX0FzRGVmYXVsdEVuY29kZWRTdHJpbmciCi0gICJQeVVuaWNvZGVVQ1MyX1NldERlZmF1bHRFbmNvZGluZyIKLSAgIlB5VW5pY29kZVVDUzJfRW5jb2RlIgotICAiUHlVbmljb2RlVUNTMl9Bc0VuY29kZWRPYmplY3QiCi0gICJQeVVuaWNvZGVVQ1MyX0RlY29kZVVURjE2IgotICAiUHlVbmljb2RlVUNTMl9FbmNvZGVVVEYxNiIKLSAgIlB5VW5pY29kZVVDUzJfQXNVbmljb2RlRXNjYXBlU3RyaW5nIgotICAiUHlVbmljb2RlVUNTMl9FbmNvZGVVbmljb2RlRXNjYXBlIgotICAiUHlVbmljb2RlVUNTMl9Bc1Jhd1VuaWNvZGVFc2NhcGVTdHJpbmciCi0gICJQeVVuaWNvZGVVQ1MyX0VuY29kZUxhdGluMSIKLSAgIlB5VW5pY29kZVVDUzJfRW5jb2RlQVNDSUkiCi0gICJQeVVuaWNvZGVVQ1MyX0FzQ2hhcm1hcFN0cmluZyIKLSAgIlB5VW5pY29kZVVDUzJfUGFydGl0aW9uIgotICAiUHlVbmljb2RlVUNTMl9SUGFydGl0aW9uIgotICAiUHlVbmljb2RlVUNTMl9UcmFuc2xhdGUiCi0gICJQeVVuaWNvZGVVQ1MyX1RhaWxtYXRjaCIKLSAgIlB5VW5pY29kZV9Bc0RlY29kZWRPYmplY3QiCi0gICJQeVVuaWNvZGVfVHlwZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKHVuaWNvZGVjdHlwZSkKLSAgIl9QeVVuaWNvZGVfVHlwZVJlY29yZHMiCi0gICJfUHlVbmljb2RlVUNTMl9Ub051bWVyaWMiCi0gICJfUHlVbmljb2RlVUNTMl9Jc0xvd2VyY2FzZSIKLSAgIl9QeVVuaWNvZGVVQ1MyX0lzVXBwZXJjYXNlIgotICAiX1B5VW5pY29kZVVDUzJfSXNUaXRsZWNhc2UiCi0gICJfUHlVbmljb2RlVUNTMl9Jc1doaXRlc3BhY2UiCi0gICJfUHlVbmljb2RlVUNTMl9Jc0xpbmVicmVhayIKLSAgIl9QeVVuaWNvZGVVQ1MyX1RvTG93ZXJjYXNlIgotICAiX1B5VW5pY29kZVVDUzJfVG9VcHBlcmNhc2UiCi0gICJfUHlVbmljb2RlVUNTMl9Ub1RpdGxlY2FzZSIKLSAgIl9QeVVuaWNvZGVVQ1MyX1RvRGVjaW1hbERpZ2l0IgotICAiX1B5VW5pY29kZVVDUzJfVG9EaWdpdCIKLSAgIl9QeVVuaWNvZGVVQ1MyX0lzRGVjaW1hbERpZ2l0IgotICAiX1B5VW5pY29kZVVDUzJfSXNEaWdpdCIKLSAgIl9QeVVuaWNvZGVVQ1MyX0lzTnVtZXJpYyIKLSAgIl9QeVVuaWNvZGVVQ1MyX0lzQWxwaGEiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYih3ZWFrcmVmb2JqZWN0KQotICAiUHlXZWFrcmVmX05ld1JlZiIKLSAgIlB5V2Vha3JlZl9OZXdQcm94eSIKLSAgIlB5T2JqZWN0X0NsZWFyV2Vha1JlZnMiCi0gICJQeVdlYWtyZWZfR2V0T2JqZWN0IgotICAiX1B5V2Vha3JlZl9HZXRXZWFrcmVmQ291bnQiCi0gICJfUHlXZWFrcmVmX0NsZWFyUmVmIgotICAiX1B5V2Vha3JlZl9SZWZUeXBlIgotICAiX1B5V2Vha3JlZl9Qcm94eVR5cGUiCi0gICJfUHlXZWFrcmVmX0NhbGxhYmxlUHJveHlUeXBlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoUHl0aG9uLWFzdCkKLTsgICJpbml0X2FzdCIKLSAgIk1vZHVsZSIKLSAgIkludGVyYWN0aXZlIgotICAiRXhwcmVzc2lvbiIKLSAgIlN1aXRlIgotICAiRnVuY3Rpb25EZWYiCi0gICJDbGFzc0RlZiIKLSAgIlJldHVybiIKLSAgIkRlbGV0ZSIKLSAgIkFzc2lnbiIKLSAgIkF1Z0Fzc2lnbiIKLSAgIlByaW50IgotICAiRm9yIgotICAiV2hpbGUiCi0gICJJZiIKLSAgIldpdGgiCi0gICJSYWlzZSIKLSAgIlRyeUV4Y2VwdCIKLSAgIlRyeUZpbmFsbHkiCi0gICJBc3NlcnQiCi0gICJJbXBvcnQiCi0gICJJbXBvcnRGcm9tIgotICAiRXhlYyIKLSAgIkdsb2JhbCIKLSAgIkV4cHIiCi0gICJQYXNzIgotICAiQnJlYWsiCi0gICJDb250aW51ZSIKLSAgIkJvb2xPcCIKLSAgIkJpbk9wIgotICAiVW5hcnlPcCIKLSAgIkxhbWJkYSIKLSAgIklmRXhwIgotICAiRGljdCIKLSAgIkxpc3RDb21wIgotICAiR2VuZXJhdG9yRXhwIgotICAiWWllbGQiCi0gICJDb21wYXJlIgotICAiQ2FsbCIKLSAgIlJlcHIiCi0gICJOdW0iCi0gICJTdHIiCi0gICJBdHRyaWJ1dGUiCi0gICJTdWJzY3JpcHQiCi0gICJOYW1lIgotICAiTGlzdCIKLSAgIlR1cGxlIgotICAiRWxsaXBzaXMiCi0gICJTbGljZSIKLSAgIkV4dFNsaWNlIgotICAiSW5kZXgiCi0gICJjb21wcmVoZW5zaW9uIgotICAiZXhjZXB0aGFuZGxlciIKLSAgImFyZ3VtZW50cyIKLSAgImtleXdvcmQiCi0gICJhbGlhcyIKLSAgIlB5QVNUX21vZDJvYmoiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihhc2RsKQotICAiYXNkbF9zZXFfbmV3IgotICAiYXNkbF9pbnRfc2VxX25ldyIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGFzdCkKLSAgIlB5QVNUX0Zyb21Ob2RlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoYmx0aW5tb2R1bGUpCi0gICJfUHlCdWlsdGluX0luaXQiCi0gICJQeV9GaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoZXhjZXB0aW9ucykKLSAgIlB5VW5pY29kZUVuY29kZUVycm9yX0dldFN0YXJ0IgotICAiUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0U3RhcnQiCi0gICJQeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRFbmQiCi0gICJQeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRFbmQiCi0gICJfUHlFeGNfSW5pdCIKLSAgIlB5VW5pY29kZURlY29kZUVycm9yX0NyZWF0ZSIKLSAgIlB5VW5pY29kZUVuY29kZUVycm9yX0NyZWF0ZSIKLSAgIlB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX0NyZWF0ZSIKLSAgIlB5VW5pY29kZUVuY29kZUVycm9yX0dldEVuY29kaW5nIgotICAiUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0RW5jb2RpbmciCi0gICJQeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRPYmplY3QiCi0gICJQeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRPYmplY3QiCi0gICJQeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9HZXRPYmplY3QiCi0gICJQeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9HZXRTdGFydCIKLSAgIlB5VW5pY29kZUVuY29kZUVycm9yX1NldFN0YXJ0IgotICAiUHlVbmljb2RlRGVjb2RlRXJyb3JfU2V0U3RhcnQiCi0gICJQeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9TZXRTdGFydCIKLSAgIlB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX0dldEVuZCIKLSAgIlB5VW5pY29kZUVuY29kZUVycm9yX1NldEVuZCIKLSAgIlB5VW5pY29kZURlY29kZUVycm9yX1NldEVuZCIKLSAgIlB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX1NldEVuZCIKLSAgIlB5VW5pY29kZUVuY29kZUVycm9yX0dldFJlYXNvbiIKLSAgIlB5VW5pY29kZURlY29kZUVycm9yX0dldFJlYXNvbiIKLSAgIlB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX0dldFJlYXNvbiIKLSAgIlB5VW5pY29kZUVuY29kZUVycm9yX1NldFJlYXNvbiIKLSAgIlB5VW5pY29kZURlY29kZUVycm9yX1NldFJlYXNvbiIKLSAgIlB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX1NldFJlYXNvbiIKLSAgIl9QeUV4Y19GaW5pIgotICAiUHlFeGNfQmFzZUV4Y2VwdGlvbiIKLSAgIlB5RXhjX0V4Y2VwdGlvbiIKLSAgIlB5RXhjX1N0YW5kYXJkRXJyb3IiCi0gICJQeUV4Y19UeXBlRXJyb3IiCi0gICJQeUV4Y19TdG9wSXRlcmF0aW9uIgotICAiUHlFeGNfR2VuZXJhdG9yRXhpdCIKLSAgIlB5RXhjX1N5c3RlbUV4aXQiCi0gICJQeUV4Y19LZXlib2FyZEludGVycnVwdCIKLSAgIlB5RXhjX0ltcG9ydEVycm9yIgotICAiUHlFeGNfRW52aXJvbm1lbnRFcnJvciIKLSAgIlB5RXhjX0lPRXJyb3IiCi0gICJQeUV4Y19PU0Vycm9yIgotICAiUHlFeGNfRU9GRXJyb3IiCi0gICJQeUV4Y19SdW50aW1lRXJyb3IiCi0gICJQeUV4Y19Ob3RJbXBsZW1lbnRlZEVycm9yIgotICAiUHlFeGNfTmFtZUVycm9yIgotICAiUHlFeGNfVW5ib3VuZExvY2FsRXJyb3IiCi0gICJQeUV4Y19BdHRyaWJ1dGVFcnJvciIKLSAgIlB5RXhjX0luZGV4RXJyb3IiCi0gICJQeUV4Y19TeW50YXhFcnJvciIKLSAgIlB5RXhjX0luZGVudGF0aW9uRXJyb3IiCi0gICJQeUV4Y19UYWJFcnJvciIKLSAgIlB5RXhjX0xvb2t1cEVycm9yIgotICAiUHlFeGNfS2V5RXJyb3IiCi0gICJQeUV4Y19WYWx1ZUVycm9yIgotICAiUHlFeGNfVW5pY29kZUVycm9yIgotICAiUHlFeGNfVW5pY29kZUVuY29kZUVycm9yIgotICAiUHlFeGNfVW5pY29kZURlY29kZUVycm9yIgotICAiUHlFeGNfVW5pY29kZVRyYW5zbGF0ZUVycm9yIgotICAiUHlFeGNfQXNzZXJ0aW9uRXJyb3IiCi0gICJQeUV4Y19Bcml0aG1ldGljRXJyb3IiCi0gICJQeUV4Y19GbG9hdGluZ1BvaW50RXJyb3IiCi0gICJQeUV4Y19PdmVyZmxvd0Vycm9yIgotICAiUHlFeGNfWmVyb0RpdmlzaW9uRXJyb3IiCi0gICJQeUV4Y19TeXN0ZW1FcnJvciIKLSAgIlB5RXhjX1JlZmVyZW5jZUVycm9yIgotICAiUHlFeGNfTWVtb3J5RXJyb3IiCi0gICJQeUV4Y19XYXJuaW5nIgotICAiUHlFeGNfVXNlcldhcm5pbmciCi0gICJQeUV4Y19EZXByZWNhdGlvbldhcm5pbmciCi0gICJQeUV4Y19QZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nIgotICAiUHlFeGNfU3ludGF4V2FybmluZyIKLSAgIlB5RXhjX1J1bnRpbWVXYXJuaW5nIgotICAiUHlFeGNfRnV0dXJlV2FybmluZyIKLSAgIlB5RXhjX0ltcG9ydFdhcm5pbmciCi0gICJQeUV4Y19NZW1vcnlFcnJvckluc3QiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihjZXZhbCkKLSAgIlB5RXZhbF9FdmFsRnJhbWVFeCIKLSAgIlB5RXZhbF9DYWxsT2JqZWN0V2l0aEtleXdvcmRzIgotICAiUHlFdmFsX0V2YWxDb2RlRXgiCi0gICJQeUV2YWxfR2V0RnJhbWUiCi0gICJQeUV2YWxfQ2FsbE9iamVjdCIKLSAgIlB5RXZhbF9TZXRQcm9maWxlIgotICAiUHlFdmFsX1NldFRyYWNlIgotICAiUHlFdmFsX0dldEJ1aWx0aW5zIgotICAiUHlFdmFsX0dldEdsb2JhbHMiCi0gICJQeUV2YWxfR2V0TG9jYWxzIgotICAiUHlFdmFsX0dldFJlc3RyaWN0ZWQiCi0gICJQeUV2YWxfTWVyZ2VDb21waWxlckZsYWdzIgotICAiUHlfRmx1c2hMaW5lIgotICAiUHlfQWRkUGVuZGluZ0NhbGwiCi0gICJQeV9NYWtlUGVuZGluZ0NhbGxzIgotICAiUHlfU2V0UmVjdXJzaW9uTGltaXQiCi0gICJQeV9HZXRSZWN1cnNpb25MaW1pdCIKLSAgIl9QeV9DaGVja1JlY3Vyc2l2ZUNhbGwiCi0gICJQeUV2YWxfR2V0RnVuY05hbWUiCi0gICJQeUV2YWxfR2V0RnVuY0Rlc2MiCi0gICJQeUV2YWxfR2V0Q2FsbFN0YXRzIgotICAiUHlFdmFsX0V2YWxGcmFtZSIKLSAgIlB5RXZhbF9TYXZlVGhyZWFkIgotICAiUHlFdmFsX1Jlc3RvcmVUaHJlYWQiCi0gICJQeUV2YWxfVGhyZWFkc0luaXRpYWxpemVkIgotICAiUHlFdmFsX0luaXRUaHJlYWRzIgotICAiUHlFdmFsX0FjcXVpcmVMb2NrIgotICAiUHlFdmFsX1JlbGVhc2VMb2NrIgotICAiUHlFdmFsX0FjcXVpcmVUaHJlYWQiCi0gICJQeUV2YWxfUmVsZWFzZVRocmVhZCIKLSAgIlB5RXZhbF9SZUluaXRUaHJlYWRzIgotICAiX1B5RXZhbF9TbGljZUluZGV4IgotICAiUHlFdmFsX0V2YWxDb2RlIgotICAiX1B5RXZhbF9DYWxsVHJhY2luZyIKLSAgIl9QeV9DaGVja1JlY3Vyc2lvbkxpbWl0IgotICAiX1B5X0NoZWNrSW50ZXJ2YWwiCi0gICJfUHlfVGlja2VyIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoY29tcGlsZSkKLSAgIl9QeV9NYW5nbGUiCi0gICJQeUFTVF9Db21waWxlIgotICAiUHlOb2RlX0NvbXBpbGUiCi0gICJQeV9PcHRpbWl6ZUZsYWciCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihjb2RlY3MpCi0gICJfUHlDb2RlY19Mb29rdXAiCi0gICJQeUNvZGVjX0VuY29kZSIKLSAgIlB5Q29kZWNfRGVjb2RlIgotICAiUHlDb2RlY19JZ25vcmVFcnJvcnMiCi0gICJQeUNvZGVjX1JlcGxhY2VFcnJvcnMiCi0gICJQeUNvZGVjX1hNTENoYXJSZWZSZXBsYWNlRXJyb3JzIgotICAiUHlDb2RlY19CYWNrc2xhc2hSZXBsYWNlRXJyb3JzIgotICAiUHlDb2RlY19SZWdpc3RlciIKLSAgIlB5Q29kZWNfRW5jb2RlciIKLSAgIlB5Q29kZWNfRGVjb2RlciIKLSAgIlB5Q29kZWNfSW5jcmVtZW50YWxFbmNvZGVyIgotICAiUHlDb2RlY19JbmNyZW1lbnRhbERlY29kZXIiCi0gICJQeUNvZGVjX1N0cmVhbVJlYWRlciIKLSAgIlB5Q29kZWNfU3RyZWFtV3JpdGVyIgotICAiUHlDb2RlY19SZWdpc3RlckVycm9yIgotICAiUHlDb2RlY19Mb29rdXBFcnJvciIKLSAgIlB5Q29kZWNfU3RyaWN0RXJyb3JzIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoZXJyb3JzKQotICAiUHlFcnJfU2V0Tm9uZSIKLSAgIlB5RXJyX1NldFN0cmluZyIKLSAgIlB5RXJyX0dpdmVuRXhjZXB0aW9uTWF0Y2hlcyIKLSAgIlB5RXJyX05vcm1hbGl6ZUV4Y2VwdGlvbiIKLSAgIlB5RXJyX0ZldGNoIgotICAiUHlFcnJfQ2xlYXIiCi0gICJQeUVycl9Ob01lbW9yeSIKLSAgIlB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZU9iamVjdCIKLSAgIlB5RXJyX0Zvcm1hdCIKLSAgIlB5RXJyX05ld0V4Y2VwdGlvbiIKLSAgIlB5RXJyX1dyaXRlVW5yYWlzYWJsZSIKLSAgIlB5RXJyX1N5bnRheExvY2F0aW9uIgotICAiUHlFcnJfUHJvZ3JhbVRleHQiCi0gICJQeUVycl9TZXRPYmplY3QiCi0gICJQeUVycl9PY2N1cnJlZCIKLSAgIlB5RXJyX1Jlc3RvcmUiCi0gICJQeUVycl9FeGNlcHRpb25NYXRjaGVzIgotICAiUHlFcnJfQmFkQXJndW1lbnQiCi0gICJQeUVycl9TZXRGcm9tRXJybm8iCi0gICJQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWUiCi0gICJQeUVycl9CYWRJbnRlcm5hbENhbGwiCi0gICJfUHlFcnJfQmFkSW50ZXJuYWxDYWxsIgotICAiUHlFcnJfV2FybiIKLSAgIlB5RXJyX1dhcm5FeHBsaWNpdCIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGZyb3plbikKLSAgIlB5SW1wb3J0X0Zyb3plbk1vZHVsZXMiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihmcm96ZW5tYWluKQotICAiUHlfRnJvemVuTWFpbiIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGZ1dHVyZSkKLSAgIlB5RnV0dXJlX0Zyb21BU1QiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihnZXRhcmdzKQotICAiUHlBcmdfUGFyc2UiCi0gICJfUHlBcmdfUGFyc2VfU2l6ZVQiCi0gICJQeUFyZ19QYXJzZVR1cGxlIgotICAiX1B5QXJnX1BhcnNlVHVwbGVfU2l6ZVQiCi0gICJQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMiCi0gICJfUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzX1NpemVUIgotICAiUHlBcmdfVW5wYWNrVHVwbGUiCi0gICJfUHlBcmdfTm9LZXl3b3JkcyIKLSAgIlB5QXJnX1ZhUGFyc2UiCi0gICJQeUFyZ19WYVBhcnNlVHVwbGVBbmRLZXl3b3JkcyIKLSAgIl9QeUFyZ19WYVBhcnNlX1NpemVUIgotICAiX1B5QXJnX1ZhUGFyc2VUdXBsZUFuZEtleXdvcmRzX1NpemVUIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoZ2V0Y29tcGlsZXIpCi0gICJQeV9HZXRDb21waWxlciIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGdldGNvcHlyaWdodCkKLSAgIlB5X0dldENvcHlyaWdodCIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGdldHBsYXRmb3JtKQotICAiUHlfR2V0UGxhdGZvcm0iCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihnZXR2ZXJzaW9uKQotICAiUHlfR2V0VmVyc2lvbiIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGdyYW1pbml0KQotICAiX1B5UGFyc2VyX0dyYW1tYXIiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihpbXBvcnQpCi0gICJfUHlJbXBvcnRfSW5pdCIKLSAgIl9QeUltcG9ydEhvb2tzX0luaXQiCi0gICJQeUltcG9ydF9JbXBvcnRNb2R1bGUiCi0gICJQeUltcG9ydF9DbGVhbnVwIgotICAiX1B5SW1wb3J0X0ZpeHVwRXh0ZW5zaW9uIgotICAiUHlJbXBvcnRfQWRkTW9kdWxlIgotICAiUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVFeCIKLSAgIlB5SW1wb3J0X0ltcG9ydEZyb3plbk1vZHVsZSIKLSAgIlB5SW1wb3J0X0ltcG9ydE1vZHVsZUV4IgotICAiUHlJbXBvcnRfSW1wb3J0TW9kdWxlTGV2ZWwiCi0gICJQeUltcG9ydF9SZWxvYWRNb2R1bGUiCi0gICJQeUltcG9ydF9JbXBvcnQiCi07ICAiaW5pdGltcCIKLSAgIl9QeUltcG9ydF9GaW5pIgotICAiUHlJbXBvcnRfR2V0TWFnaWNOdW1iZXIiCi0gICJQeUltcG9ydF9FeGVjQ29kZU1vZHVsZSIKLSAgIlB5SW1wb3J0X0dldE1vZHVsZURpY3QiCi0gICJfUHlJbXBvcnRfRmluZE1vZHVsZSIKLSAgIl9QeUltcG9ydF9Jc1NjcmlwdCIKLSAgIl9QeUltcG9ydF9SZUluaXRMb2NrIgotICAiX1B5SW1wb3J0X0ZpbmRFeHRlbnNpb24iCi0gICJQeUltcG9ydF9BcHBlbmRJbml0dGFiIgotICAiUHlJbXBvcnRfRXh0ZW5kSW5pdHRhYiIKLSAgIlB5SW1wb3J0X0luaXR0YWIiCi0gICJfUHlJbXBvcnRfRmlsZXRhYiIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGltcG9ydGRsKQotICAiX1B5SW1wb3J0X0xvYWREeW5hbWljTW9kdWxlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIobWFyc2hhbCkKLSAgIlB5TWFyc2hhbF9SZWFkTG9uZ0Zyb21GaWxlIgotICAiUHlNYXJzaGFsX1dyaXRlT2JqZWN0VG9TdHJpbmciCi0gICJQeU1hcnNoYWxfV3JpdGVMb25nVG9GaWxlIgotICAiUHlNYXJzaGFsX1dyaXRlT2JqZWN0VG9GaWxlIgotICAiUHlNYXJzaGFsX1JlYWRTaG9ydEZyb21GaWxlIgotICAiUHlNYXJzaGFsX1JlYWRPYmplY3RGcm9tRmlsZSIKLSAgIlB5TWFyc2hhbF9SZWFkTGFzdE9iamVjdEZyb21GaWxlIgotICAiUHlNYXJzaGFsX1JlYWRPYmplY3RGcm9tU3RyaW5nIgotICAiUHlNYXJzaGFsX0luaXQiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihtb2RzdXBwb3J0KQotICAiUHlfSW5pdE1vZHVsZTQiCi0gICJQeV9CdWlsZFZhbHVlIgotICAiX1B5X0J1aWxkVmFsdWVfU2l6ZVQiCi0gICJQeUV2YWxfQ2FsbEZ1bmN0aW9uIgotICAiUHlFdmFsX0NhbGxNZXRob2QiCi0gICJfUHlfVmFCdWlsZFZhbHVlX1NpemVUIgotICAiUHlfVmFCdWlsZFZhbHVlIgotICAiUHlNb2R1bGVfQWRkT2JqZWN0IgotICAiUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQiCi0gICJQeU1vZHVsZV9BZGRTdHJpbmdDb25zdGFudCIKLSAgIl9QeV9QYWNrYWdlQ29udGV4dCIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKG15c25wcmludGYpCi0gICJQeU9TX3NucHJpbnRmIgotICAiUHlPU192c25wcmludGYiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihteXN0cnRvdWwpCi0gICJQeU9TX3N0cnRvdWwiCi0gICJQeU9TX3N0cnRvbCIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKHB5YXJlbmEpCi0gICJQeUFyZW5hX05ldyIKLSAgIlB5QXJlbmFfRnJlZSIKLSAgIlB5QXJlbmFfTWFsbG9jIgotICAiUHlBcmVuYV9BZGRQeU9iamVjdCIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKHB5ZnBlKQotICAiUHlGUEVfZHVtbXkiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihweXN0YXRlKQotICAiUHlJbnRlcnByZXRlclN0YXRlX0NsZWFyIgotICAiUHlUaHJlYWRTdGF0ZV9DbGVhciIKLSAgIl9QeVRocmVhZF9DdXJyZW50RnJhbWVzIgotICAiUHlHSUxTdGF0ZV9FbnN1cmUiCi0gICJQeUdJTFN0YXRlX1JlbGVhc2UiCi0gICJQeUludGVycHJldGVyU3RhdGVfTmV3IgotICAiUHlJbnRlcnByZXRlclN0YXRlX0RlbGV0ZSIKLSAgIlB5VGhyZWFkU3RhdGVfRGVsZXRlIgotICAiUHlUaHJlYWRTdGF0ZV9OZXciCi0gICJQeVRocmVhZFN0YXRlX0RlbGV0ZUN1cnJlbnQiCi0gICJQeVRocmVhZFN0YXRlX0dldCIKLSAgIlB5VGhyZWFkU3RhdGVfU3dhcCIKLSAgIlB5VGhyZWFkU3RhdGVfR2V0RGljdCIKLSAgIlB5VGhyZWFkU3RhdGVfU2V0QXN5bmNFeGMiCi0gICJQeUdJTFN0YXRlX0dldFRoaXNUaHJlYWRTdGF0ZSIKLSAgIlB5SW50ZXJwcmV0ZXJTdGF0ZV9IZWFkIgotICAiUHlJbnRlcnByZXRlclN0YXRlX05leHQiCi0gICJQeUludGVycHJldGVyU3RhdGVfVGhyZWFkSGVhZCIKLSAgIlB5VGhyZWFkU3RhdGVfTmV4dCIKLSAgIl9QeUdJTFN0YXRlX0luaXQiCi0gICJfUHlHSUxTdGF0ZV9GaW5pIgotICAiX1B5VGhyZWFkU3RhdGVfQ3VycmVudCIKLSAgIl9QeVRocmVhZFN0YXRlX0dldEZyYW1lIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIocHl0aG9ucnVuKQotICAiUHlfSWdub3JlRW52aXJvbm1lbnRGbGFnIgotICAiUHlfRGVidWdGbGFnIgotICAiUHlfVmVyYm9zZUZsYWciCi0gICJQeV9Ob1NpdGVGbGFnIgotICAiUHlfSW50ZXJhY3RpdmVGbGFnIgotICAiUHlfRnJvemVuRmxhZyIKLSAgIlB5X0luaXRpYWxpemVFeCIKLSAgIlB5X0ZhdGFsRXJyb3IiCi0gICJQeV9OZXdJbnRlcnByZXRlciIKLSAgIlB5RXJyX1ByaW50IgotICAiUHlSdW5fSW50ZXJhY3RpdmVPbmVGbGFncyIKLSAgIlB5UGFyc2VyX0FTVEZyb21GaWxlIgotICAiUHlSdW5fU2ltcGxlRmlsZUV4RmxhZ3MiCi0gICJQeVJ1bl9GaWxlRXhGbGFncyIKLSAgIlB5X0V4aXQiCi0gICJQeUVycl9QcmludEV4IgotICAiUHlFcnJfRGlzcGxheSIKLSAgIlB5X1NldFByb2dyYW1OYW1lIgotICAiUHlfR2V0UHJvZ3JhbU5hbWUiCi0gICJQeV9TZXRQeXRob25Ib21lIgotICAiUHlfR2V0UHl0aG9uSG9tZSIKLSAgIlB5X0luaXRpYWxpemUiCi0gICJQeV9GaW5hbGl6ZSIKLSAgIlB5X0lzSW5pdGlhbGl6ZWQiCi0gICJQeV9FbmRJbnRlcnByZXRlciIKLSAgIlB5UnVuX0FueUZpbGVGbGFncyIKLSAgIlB5X0ZkSXNJbnRlcmFjdGl2ZSIKLSAgIlB5UnVuX0ludGVyYWN0aXZlTG9vcEZsYWdzIgotICAiUHlSdW5fQW55RmlsZUV4RmxhZ3MiCi0gICJQeVJ1bl9TaW1wbGVTdHJpbmdGbGFncyIKLSAgIlB5UnVuX1N0cmluZ0ZsYWdzIgotICAiUHlQYXJzZXJfQVNURnJvbVN0cmluZyIKLSAgIlB5UGFyc2VyX1NpbXBsZVBhcnNlU3RyaW5nRmxhZ3MiCi0gICJQeVBhcnNlcl9TaW1wbGVQYXJzZUZpbGVGbGFncyIKLSAgIlB5X0NvbXBpbGVTdHJpbmdGbGFncyIKLSAgIlB5X1N5bXRhYmxlU3RyaW5nIgotICAiUHlfQXRFeGl0IgotICAiUHlPU19nZXRzaWciCi0gICJQeU9TX3NldHNpZyIKLSAgIlB5UGFyc2VyX1NldEVycm9yIgotICAiUHlNb2R1bGVfR2V0V2FybmluZ3NNb2R1bGUiCi0gICJQeVBhcnNlcl9TaW1wbGVQYXJzZVN0cmluZ0ZsYWdzRmlsZW5hbWUiCi0gICJQeVBhcnNlcl9TaW1wbGVQYXJzZVN0cmluZ0ZpbGVuYW1lIgotICAiUHlQYXJzZXJfU2ltcGxlUGFyc2VGaWxlIgotICAiUHlQYXJzZXJfU2ltcGxlUGFyc2VTdHJpbmciCi0gICJQeVJ1bl9BbnlGaWxlIgotICAiUHlSdW5fQW55RmlsZUV4IgotICAiUHlSdW5fRmlsZSIKLSAgIlB5UnVuX0ZpbGVFeCIKLSAgIlB5UnVuX0ZpbGVGbGFncyIKLSAgIlB5UnVuX1NpbXBsZUZpbGUiCi0gICJQeVJ1bl9TaW1wbGVGaWxlRXgiCi0gICJQeVJ1bl9TdHJpbmciCi0gICJQeVJ1bl9TaW1wbGVTdHJpbmciCi0gICJQeV9Db21waWxlU3RyaW5nIgotICAiUHlSdW5fSW50ZXJhY3RpdmVPbmUiCi0gICJQeVJ1bl9JbnRlcmFjdGl2ZUxvb3AiCi0gICJQeV9Vc2VDbGFzc0V4Y2VwdGlvbnNGbGFnIgotICAiUHlfVW5pY29kZUZsYWciCi0gICJfUHlfUW5ld0ZsYWciCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihzdHJ1Y3RtZW1iZXIpCi0gICJQeU1lbWJlcl9HZXQiCi0gICJQeU1lbWJlcl9HZXRPbmUiCi0gICJQeU1lbWJlcl9TZXRPbmUiCi0gICJQeU1lbWJlcl9TZXQiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihzeW10YWJsZSkKLSAgIlB5U3ltdGFibGVfQnVpbGQiCi0gICJQeVN5bXRhYmxlX0ZyZWUiCi0gICJQeVNUX0dldFNjb3BlIgotICAiUHlTeW10YWJsZV9Mb29rdXAiCi0gICJQeVNURW50cnlfVHlwZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKHN5c21vZHVsZSkKLSAgIl9QeVN5c19Jbml0IgotICAiUHlTeXNfV3JpdGVTdGRlcnIiCi0gICJQeVN5c19TZXRQYXRoIgotICAiUHlTeXNfU2V0QXJndiIKLSAgIlB5U3lzX1dyaXRlU3Rkb3V0IgotICAiUHlfU3VidmVyc2lvblJldmlzaW9uIgotICAiUHlfU3VidmVyc2lvblNob3J0QnJhbmNoIgotICAiUHlTeXNfR2V0T2JqZWN0IgotICAiUHlTeXNfU2V0T2JqZWN0IgotICAiUHlTeXNfR2V0RmlsZSIKLSAgIlB5U3lzX1Jlc2V0V2Fybk9wdGlvbnMiCi0gICJQeVN5c19BZGRXYXJuT3B0aW9uIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIodHJhY2ViYWNrKQotICAiUHlUcmFjZUJhY2tfSGVyZSIKLSAgIlB5VHJhY2VCYWNrX1ByaW50IgotICAiUHlUcmFjZUJhY2tfVHlwZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGdldG9wdCkKLSAgIl9QeU9TX0dldE9wdCIKLSAgIl9QeU9TX29wdGVyciIKLSAgIl9QeU9TX29wdGluZCIKLSAgIl9QeU9TX29wdGFyZyIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGR5bmxvYWRfc2hsaWIpCi0gICJfUHlJbXBvcnRfRHluTG9hZEZpbGV0YWIiCi0gICJfUHlJbXBvcnRfR2V0RHluTG9hZEZ1bmMiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYih0aHJlYWQpCi0gICJQeVRocmVhZF9kZWxldGVfa2V5X3ZhbHVlIgotICAiUHlUaHJlYWRfaW5pdF90aHJlYWQiCi0gICJQeVRocmVhZF9zdGFydF9uZXdfdGhyZWFkIgotICAiUHlUaHJlYWRfZXhpdF90aHJlYWQiCi0gICJQeVRocmVhZF9nZXRfdGhyZWFkX2lkZW50IgotICAiUHlUaHJlYWRfYWxsb2NhdGVfbG9jayIKLSAgIlB5VGhyZWFkX2ZyZWVfbG9jayIKLSAgIlB5VGhyZWFkX2FjcXVpcmVfbG9jayIKLSAgIlB5VGhyZWFkX3JlbGVhc2VfbG9jayIKLSAgIlB5VGhyZWFkX2dldF9zdGFja3NpemUiCi0gICJQeVRocmVhZF9zZXRfc3RhY2tzaXplIgotICAiUHlUaHJlYWRfY3JlYXRlX2tleSIKLSAgIlB5VGhyZWFkX2RlbGV0ZV9rZXkiCi0gICJQeVRocmVhZF9zZXRfa2V5X3ZhbHVlIgotICAiUHlUaHJlYWRfZ2V0X2tleV92YWx1ZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGdjbW9kdWxlKQotOyAgImluaXRnYyIKLSAgIl9QeU9iamVjdF9HQ19OZXciCi0gICJfUHlPYmplY3RfR0NfTmV3VmFyIgotICAiUHlHQ19Db2xsZWN0IgotICAiX1B5T2JqZWN0X0dDX1Jlc2l6ZSIKLSAgIl9QeU9iamVjdF9HQ19NYWxsb2MiCi0gICJQeU9iamVjdF9HQ19UcmFjayIKLSAgIlB5T2JqZWN0X0dDX1VuVHJhY2siCi0gICJQeU9iamVjdF9HQ19EZWwiCi0gICJfUHlHQ19EdW1wIgotICAiX1B5T2JqZWN0X0dDX1RyYWNrIgotICAiX1B5T2JqZWN0X0dDX1VuVHJhY2siCi0gICJfUHlPYmplY3RfR0NfRGVsIgotICAiX1B5R0NfZ2VuZXJhdGlvbjAiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihzaWduYWxtb2R1bGUpCi07ICAiaW5pdHNpZ25hbCIKLSAgIlB5RXJyX0NoZWNrU2lnbmFscyIKLSAgIlB5RXJyX1NldEludGVycnVwdCIKLSAgIlB5T1NfRmluaUludGVycnVwdHMiCi0gICJQeU9TX0ludGVycnVwdE9jY3VycmVkIgotICAiUHlPU19Jbml0SW50ZXJydXB0cyIKLSAgIlB5T1NfQWZ0ZXJGb3JrIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIocG9zaXhtb2R1bGUpCi07ICAiaW5pdG9zMiIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKF90aHJlYWRtb2R1bGUpCi07ICAiaW5pdF90aHJlYWQiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihhcnJheW1vZHVsZSkKLTsgICJpbml0YXJyYXkiCi07ICAiYXJyYXlfbWV0aG9kcyIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGJpbmFzY2lpKQotOyAgImluaXRiaW5hc2NpaSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGNtYXRobW9kdWxlKQotOyAgImluaXRjbWF0aCIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKF9jb2RlY3Ntb2R1bGUpCi07ICAiaW5pdF9jb2RlY3MiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihjb2xsZWN0aW9uc21vZHVsZSkKLTsgICJpbml0Y29sbGVjdGlvbnMiCi0gICJkZXF1ZWl0ZXJfdHlwZSIKLSAgImRlcXVlcmV2aXRlcl90eXBlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoY1BpY2tsZSkKLTsgICJpbml0Y1BpY2tsZSIKLTsgICJmYXN0X3NhdmVfbGVhdmUiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihfY3N2KQotOyAgImluaXRfY3N2IgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoZGF0ZXRpbWVtb2R1bGUpCi07ICAiaW5pdGRhdGV0aW1lIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoZGxtb2R1bGUpCi07ICAiaW5pdGRsIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoZXJybm9tb2R1bGUpCi07ICAiaW5pdGVycm5vIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoZmNudGxtb2R1bGUpCi07ICAiaW5pdGZjbnRsIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoX2Z1bmN0b29sc21vZHVsZSkKLTsgICJpbml0X2Z1bmN0b29scyIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKF9oZWFwcW1vZHVsZSkKLTsgICJpbml0X2hlYXBxIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoaW1hZ2VvcCkKLTsgICJpbml0aW1hZ2VvcCIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGl0ZXJ0b29sc21vZHVsZSkKLTsgICJpbml0aXRlcnRvb2xzIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoX2xvY2FsZW1vZHVsZSkKLTsgICJpbml0X2xvY2FsZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKG1hdGhtb2R1bGUpCi07ICAiaW5pdG1hdGgiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihtZDUpCi0gICJtZDVfZmluaXNoIgotICAibWQ1X2luaXQiCi0gICJtZDVfYXBwZW5kIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIobWQ1bW9kdWxlKQotOyAgImluaXRfbWQ1IgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIob3BlcmF0b3IpCi07ICAiaW5pdG9wZXJhdG9yIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoX3JhbmRvbW1vZHVsZSkKLTsgICJpbml0X3JhbmRvbSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKHJnYmltZ21vZHVsZSkKLTsgICJpbml0cmdiaW1nIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoc2hhbW9kdWxlKQotOyAgImluaXRfc2hhIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoc2hhMjU2bW9kdWxlKQotOyAgImluaXRfc2hhMjU2IgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoc2hhNTEybW9kdWxlKQotOyAgImluaXRfc2hhNTEyIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoX3NyZSkKLTsgICJpbml0X3NyZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKHN0cm9wbW9kdWxlKQotOyAgImluaXRzdHJvcCIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKF9zdHJ1Y3QpCi07ICAiaW5pdF9zdHJ1Y3QiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihzeW10YWJsZW1vZHVsZSkKLTsgICJpbml0X3N5bXRhYmxlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIodGVybWlvcykKLTsgICJpbml0dGVybWlvcyIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKHRpbWVtb2R1bGUpCi07ICAiaW5pdHRpbWUiCi0gICJfUHlUaW1lX0RvdWJsZVRvVGltZXQiCi07ICAiaW5pdHRpbWV6b25lIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIodGltaW5nbW9kdWxlKQotOyAgImluaXR0aW1pbmciCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihfd2Vha3JlZikKLTsgICJpbml0X3dlYWtyZWYiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYih4eHN1YnR5cGUpCi07ICAiaW5pdHh4c3VidHlwZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKHppcGltcG9ydCkKLTsgICJpbml0emlwaW1wb3J0IgpkaWZmIC0tZ2l0IGEvUEMvb3MyZW14L3B5dGhvbnBtLmMgYi9QQy9vczJlbXgvcHl0aG9ucG0uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmE0N2Y0Yi4uMDAwMDAwMAotLS0gYS9QQy9vczJlbXgvcHl0aG9ucG0uYworKysgL2Rldi9udWxsCkBAIC0xLDEyNCArMCwwIEBACi0vKiBPUy8yIFBNIG1haW4gcHJvZ3JhbSAtIGNyZWF0ZXMgYSBoaWRkZW4gd2luZG93LCBhbmQgc3RhcnRzIFB5dGhvbgotICogaW50ZXJwcmV0ZXIgaW4gYSBzZXBhcmF0ZSB0aHJlYWQsIHNvIHRoYXQgUHl0aG9uIHNjcmlwdHMgY2FuIGJlCi0gKiBydW4gaW4gUE0gcHJvY2VzcyBzcGFjZSB3aXRob3V0IGEgY29uc29sZSBXaW5kb3cuICBUaGUgaW50ZXJwcmV0ZXIKLSAqIGlzIGluY29ycG9yYXRlZCBieSBsaW5raW5nIGluIHRoZSBQeXRob24gRExMLgotICoKLSAqIEFzIGl0IHN0YW5kcywgSSBkb24ndCB0aGluayB0aGlzIGlzIGFkZXF1YXRlIGZvciBzdXBwb3J0aW5nIFB5dGhvbgotICogR1VJIG1vZHVsZXMsIGFzIHRoZSBQeXRob24gdGhyZWFkIGRvZXNuJ3QgaGF2ZSBpdHMgb3duIG1lc3NhZ2UKLSAqIHF1ZXVlIC0gd2hpY2ggaXMgcmVxdWlyZWQgb2YgdGhyZWFkcyB0aGF0IHdhbnQgdG8gY3JlYXRlL3VzZQotICogUE0gd2luZG93cy4KLSAqCi0gKiBUaGlzIGNvZGUgb3dlcyBhIGxvdCB0byAiT1MvMiBQcmVzZW50YXRpb24gTWFuYWdlciBQcm9ncmFtbWluZyIsIGJ5Ci0gKiBDaGFybGVzIFBldHpvbGQuCi0gKgotICogQW5kcmV3IE1hY0ludHlyZSA8YW5keW1hY0BidWxsc2V5ZS5hcGFuYS5vcmcuYXU+LCBBdWd1c3QgMjAwMS4KLSAqIFJlbGVhc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgUHl0aG9uIDIuMS4xIGxpY2VuY2UgLSBzZWUgdGhlIExJQ0VOQ0UKLSAqIGZpbGUgaW4gdGhlIFB5dGhvbiB2Mi4xLjEgKG9yIGxhdGVyKSBzb3VyY2UgZGlzdHJpYnV0aW9uLgotICogQ29weXJpZ2h0IGFzc2lnbmVkIHRvIHRoZSBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiwgMjAwMS4KLSAqLwotCi0jZGVmaW5lIElOQ0xfRE9TCi0jZGVmaW5lIElOQ0xfV0lOCi0jaW5jbHVkZSA8b3MyLmg+Ci0jaW5jbHVkZSA8cHJvY2Vzcy5oPgotCi0jaW5jbHVkZSAiUHl0aG9uLmgiCi0KLS8qIHVzZSBzdHJ1Y3R1cmUgdG8gcGFzcyBjb21tYW5kIGxpbmUgdG8gUHl0aG9uIHRocmVhZCAqLwotdHlwZWRlZiBzdHJ1Y3QKLXsKLSAgICBpbnQgYXJnYzsKLSAgICBjaGFyICoqYXJndjsKLSAgICBIV05EIEZyYW1lOwotICAgIGludCBydW5uaW5nOwotfSBhcmdsaXN0OwotCi0vKiBtYWtlIHRoaXMgYSBnbG9iYWwgdG8gc2ltcGxpZnkgYWNjZXNzLgotICogaXQgc2hvdWxkIG9ubHkgYmUgc2V0IGZyb20gdGhlIFB5dGhvbiB0aHJlYWQsIG9yIGJ5IHRoZSBjb2RlIHRoYXQKLSAqIGluaXRpYXRlcyB0aGUgUHl0aG9uIHRocmVhZCB3aGVuIHRoZSB0aHJlYWQgY2Fubm90IGJlIGNyZWF0ZWQuCi0gKi8KLWludCBQeXRob25SQzsKLQotZXh0ZXJuIERMX0VYUE9SVChpbnQpIFB5X01haW4oaW50LCBjaGFyICoqKTsKLXZvaWQgUHl0aG9uVGhyZWFkKHZvaWQgKik7Ci0KLWludAotbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi17Ci0gICAgVUxPTkcgRnJhbWVGbGFncyA9IEZDRl9USVRMRUJBUiB8Ci0gICAgICAgICAgICAgICAgICAgICAgIEZDRl9TWVNNRU5VIHwKLSAgICAgICAgICAgICAgICAgICAgICAgRkNGX1NJWkVCT1JERVIgfAotICAgICAgICAgICAgICAgICAgICAgICBGQ0ZfSElERUJVVFRPTiB8Ci0gICAgICAgICAgICAgICAgICAgICAgIEZDRl9TSEVMTFBPU0lUSU9OIHwKLSAgICAgICAgICAgICAgICAgICAgICAgRkNGX1RBU0tMSVNUOwotICAgIEhBQiBoYWI7Ci0gICAgSE1RIGhtcTsKLSAgICBIV05EIENsaWVudDsKLSAgICBRTVNHIHFtc2c7Ci0gICAgYXJnbGlzdCBhcmdzOwotICAgIGludCBweXRob25fdGlkOwotCi0gICAgLyogaW5pdCBQTSBhbmQgY3JlYXRlIG1lc3NhZ2UgcXVldWUgKi8KLSAgICBoYWIgPSBXaW5Jbml0aWFsaXplKDApOwotICAgIGhtcSA9IFdpbkNyZWF0ZU1zZ1F1ZXVlKGhhYiwgMCk7Ci0KLSAgICAvKiBjcmVhdGUgYSAoaGlkZGVuKSBXaW5kb3cgdG8gaG91c2UgdGhlIHdpbmRvdyBwcm9jZWR1cmUgKi8KLSAgICBhcmdzLkZyYW1lID0gV2luQ3JlYXRlU3RkV2luZG93KEhXTkRfREVTS1RPUCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmRnJhbWVGbGFncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUHl0aG9uUE0iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZDbGllbnQpOwotCi0gICAgLyogcnVuIFB5dGhvbiBpbnRlcnByZXRlciBpbiBhIHRocmVhZCAqLwotICAgIGFyZ3MuYXJnYyA9IGFyZ2M7Ci0gICAgYXJncy5hcmd2ID0gYXJndjsKLSAgICBhcmdzLnJ1bm5pbmcgPSAwOwotICAgIGlmICgtMSA9PSAocHl0aG9uX3RpZCA9IF9iZWdpbnRocmVhZChQeXRob25UaHJlYWQsIE5VTEwsIDEwMjQgKiAxMDI0LCAmYXJncykpKQotICAgIHsKLSAgICAgICAgLyogY291bGRuJ3Qgc3RhcnQgdGhyZWFkICovCi0gICAgICAgIFdpbkFsYXJtKEhXTkRfREVTS1RPUCwgV0FfRVJST1IpOwotICAgICAgICBQeXRob25SQyA9IDE7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIC8qIHByb2Nlc3MgUE0gbWVzc2FnZXMsIHVudGlsIFB5dGhvbiBleGl0cyAqLwotICAgICAgICB3aGlsZSAoV2luR2V0TXNnKGhhYiwgJnFtc2csIE5VTExIQU5ETEUsIDAsIDApKQotICAgICAgICAgICAgV2luRGlzcGF0Y2hNc2coaGFiLCAmcW1zZyk7Ci0gICAgICAgIGlmIChhcmdzLnJ1bm5pbmcgPiAwKQotICAgICAgICAgICAgRG9zS2lsbFRocmVhZChweXRob25fdGlkKTsKLSAgICB9Ci0KLSAgICAvKiBkZXN0cm95IHdpbmRvdywgc2h1dGRvd24gbWVzc2FnZSBxdWV1ZSBhbmQgUE0gKi8KLSAgICBXaW5EZXN0cm95V2luZG93KGFyZ3MuRnJhbWUpOwotICAgIFdpbkRlc3Ryb3lNc2dRdWV1ZShobXEpOwotICAgIFdpblRlcm1pbmF0ZShoYWIpOwotCi0gICAgcmV0dXJuIFB5dGhvblJDOwotfQotCi12b2lkIFB5dGhvblRocmVhZCh2b2lkICphcmdsKQotewotICAgIEhBQiBoYWI7Ci0gICAgYXJnbGlzdCAqYXJnczsKLQotICAgIC8qIFBNIGluaXRpYWxpc2F0aW9uICovCi0gICAgaGFiID0gV2luSW5pdGlhbGl6ZSgwKTsKLQotICAgIC8qIHN0YXJ0IFB5dGhvbiAqLwotICAgIGFyZ3MgPSAoYXJnbGlzdCAqKWFyZ2w7Ci0gICAgYXJncy0+cnVubmluZyA9IDE7Ci0gICAgUHl0aG9uUkMgPSBQeV9NYWluKGFyZ3MtPmFyZ2MsIGFyZ3MtPmFyZ3YpOwotCi0gICAgLyogZW50ZXIgYSBjcml0aWNhbCBzZWN0aW9uIGFuZCBzZW5kIHRoZSB0ZXJtaW5hdGlvbiBtZXNzYWdlICovCi0gICAgRG9zRW50ZXJDcml0U2VjKCk7Ci0gICAgYXJncy0+cnVubmluZyA9IDA7Ci0gICAgV2luUG9zdE1zZyhhcmdzLT5GcmFtZSwgV01fUVVJVCwgTlVMTCwgTlVMTCk7Ci0KLSAgICAvKiBzaHV0ZG93biBQTSBhbmQgdGVybWluYXRlIHRocmVhZCAqLwotICAgIFdpblRlcm1pbmF0ZShoYWIpOwotICAgIF9lbmR0aHJlYWQoKTsKLX0KZGlmZiAtLWdpdCBhL1BDL29zMnZhY3BwL190a2ludGVyLmRlZiBiL1BDL29zMnZhY3BwL190a2ludGVyLmRlZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDlkYWI4ZC4uMDAwMDAwMAotLS0gYS9QQy9vczJ2YWNwcC9fdGtpbnRlci5kZWYKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLUxJQlJBUlkgICAgICAgIF9US0lOVEVSIElOSVRJTlNUQU5DRSBURVJNSU5TVEFOQ0UKLURFU0NSSVBUSU9OICAgICdQeXRob24gRXh0ZW5zaW9uIERMTCB2MS4wIGZvciBBY2Nlc3MgdG8gVGNsL1RrIEVudmlyb25tZW50JwotUFJPVE1PREUKLURBVEEgICAgICAgICAgIE1VTFRJUExFIE5PTlNIQVJFRAotCi1FWFBPUlRTCi0gICAgICAgICAgICAgICBpbml0X3RraW50ZXIKLQpkaWZmIC0tZ2l0IGEvUEMvb3MydmFjcHAvY29uZmlnLmMgYi9QQy9vczJ2YWNwcC9jb25maWcuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjI2YjUyMS4uMDAwMDAwMAotLS0gYS9QQy9vczJ2YWNwcC9jb25maWcuYworKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLS8qIC0qLSBDIC0qLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotQ29weXJpZ2h0IChjKSAyMDAwLCBCZU9wZW4uY29tLgotQ29weXJpZ2h0IChjKSAxOTk1LTIwMDAsIENvcnBvcmF0aW9uIGZvciBOYXRpb25hbCBSZXNlYXJjaCBJbml0aWF0aXZlcy4KLUNvcHlyaWdodCAoYykgMTk5MC0xOTk1LCBTdGljaHRpbmcgTWF0aGVtYXRpc2NoIENlbnRydW0uCi1BbGwgcmlnaHRzIHJlc2VydmVkLgotCi1TZWUgdGhlIGZpbGUgIk1pc2MvQ09QWVJJR0hUIiBmb3IgaW5mb3JtYXRpb24gb24gdXNhZ2UgYW5kCi1yZWRpc3RyaWJ1dGlvbiBvZiB0aGlzIGZpbGUsIGFuZCBmb3IgYSBESVNDTEFJTUVSIE9GIEFMTCBXQVJSQU5USUVTLgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBNb2R1bGUgY29uZmlndXJhdGlvbiAqLwotCi0vKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIHRhYmxlIG9mIGJ1aWx0LWluIG1vZHVsZXMuCi0gICBTZWUgaW5pdF9idWlsdGluKCkgaW4gaW1wb3J0LmMuICovCi0KLSNpbmNsdWRlICJQeXRob24uaCIKLQotZXh0ZXJuIHZvaWQgaW5pdGFycmF5KHZvaWQpOwotZXh0ZXJuIHZvaWQgaW5pdGF1ZGlvb3Aodm9pZCk7Ci1leHRlcm4gdm9pZCBpbml0YmluYXNjaWkodm9pZCk7Ci1leHRlcm4gdm9pZCBpbml0Y21hdGgodm9pZCk7Ci1leHRlcm4gdm9pZCBpbml0ZXJybm8odm9pZCk7Ci1leHRlcm4gdm9pZCBpbml0aW1hZ2VvcCh2b2lkKTsKLWV4dGVybiB2b2lkIGluaXRtYXRoKHZvaWQpOwotZXh0ZXJuIHZvaWQgaW5pdG1kNSh2b2lkKTsKLWV4dGVybiB2b2lkIGluaXRudCh2b2lkKTsKLWV4dGVybiB2b2lkIGluaXRvczIodm9pZCk7Ci1leHRlcm4gdm9pZCBpbml0b3BlcmF0b3Iodm9pZCk7Ci1leHRlcm4gdm9pZCBpbml0cG9zaXgodm9pZCk7Ci1leHRlcm4gdm9pZCBpbml0cmdiaW1nKHZvaWQpOwotZXh0ZXJuIHZvaWQgaW5pdHNpZ25hbCh2b2lkKTsKLWV4dGVybiB2b2lkIGluaXRzZWxlY3Qodm9pZCk7Ci1leHRlcm4gdm9pZCBpbml0X3NvY2tldCh2b2lkKTsKLWV4dGVybiB2b2lkIGluaXRzdHJ1Y3Qodm9pZCk7Ci1leHRlcm4gdm9pZCBpbml0dGltZSh2b2lkKTsKLWV4dGVybiB2b2lkIGluaXRfdGhyZWFkKHZvaWQpOwotZXh0ZXJuIHZvaWQgaW5pdHBjcmUodm9pZCk7Ci0jaWZkZWYgV0lOMzIKLWV4dGVybiB2b2lkIGluaXRtc3ZjcnQodm9pZCk7Ci0jZW5kaWYKLQotLyogLS0gQURETU9EVUxFIE1BUktFUiAxIC0tICovCi0KLWV4dGVybiB2b2lkIFB5TWFyc2hhbF9Jbml0KHZvaWQpOwotZXh0ZXJuIHZvaWQgaW5pdGltcCh2b2lkKTsKLQotc3RydWN0IF9pbml0dGFiIF9QeUltcG9ydF9Jbml0dGFiW10gPSB7Ci0KLSAgICAgICAgeyJhcnJheSIsIGluaXRhcnJheX0sCi0jaWZkZWYgTV9JMzg2Ci0gICAgICAgIHsiYXVkaW9vcCIsIGluaXRhdWRpb29wfSwKLSNlbmRpZgotICAgICAgICB7ImJpbmFzY2lpIiwgaW5pdGJpbmFzY2lpfSwKLSAgICAgICAgeyJjbWF0aCIsIGluaXRjbWF0aH0sCi0gICAgICAgIHsiZXJybm8iLCBpbml0ZXJybm99LAotLy8gICAgICAgIHsiaW1hZ2VvcCIsIGluaXRpbWFnZW9wfSwKLSAgICAgICAgeyJtYXRoIiwgaW5pdG1hdGh9LAotICAgICAgICB7Im1kNSIsIGluaXRtZDV9LAotI2lmIGRlZmluZWQoTVNfV0lORE9XUykgfHwgZGVmaW5lZChfX0JPUkxBTkRDX18pIHx8IGRlZmluZWQoX19XQVRDT01DX18pCi0gICAgICAgIHsibnQiLCBpbml0bnR9LCAvKiBVc2UgdGhlIE5UIG9zIGZ1bmN0aW9ucywgbm90IHBvc2l4ICovCi0jZWxzZQotI2lmIGRlZmluZWQoUFlPU19PUzIpCi0gICAgICAgIHsib3MyIiwgaW5pdG9zMn0sCi0jZWxzZQotICAgICAgICB7InBvc2l4IiwgaW5pdHBvc2l4fSwKLSNlbmRpZgotI2VuZGlmCi0gICAgICAgIHsib3BlcmF0b3IiLCBpbml0b3BlcmF0b3J9LAotLy8gICAgICAgIHsicmdiaW1nIiwgaW5pdHJnYmltZ30sCi0gICAgICAgIHsic2lnbmFsIiwgaW5pdHNpZ25hbH0sCi0jaWZkZWYgVVNFX1NPQ0tFVAotICAgICAgICB7Il9zb2NrZXQiLCBpbml0X3NvY2tldH0sCi0gICAgICAgIHsic2VsZWN0IiwgaW5pdHNlbGVjdH0sCi0jZW5kaWYKLSAgICAgICAgeyJzdHJ1Y3QiLCBpbml0c3RydWN0fSwKLSAgICAgICAgeyJ0aW1lIiwgaW5pdHRpbWV9LAotI2lmZGVmIFdJVEhfVEhSRUFECi0gICAgICAgIHsiX3RocmVhZCIsIGluaXRfdGhyZWFkfSwKLSNlbmRpZgotICAgICAgICB7InBjcmUiLCBpbml0cGNyZX0sCi0jaWZkZWYgV0lOMzIKLSAgICAgICAgeyJtc3ZjcnQiLCBpbml0bXN2Y3J0fSwKLSNlbmRpZgotCi0vKiAtLSBBRERNT0RVTEUgTUFSS0VSIDIgLS0gKi8KLQotICAgICAgICAvKiBUaGlzIG1vZHVsZSAibGl2ZXMgaW4iIHdpdGggbWFyc2hhbC5jICovCi0gICAgICAgIHsibWFyc2hhbCIsIFB5TWFyc2hhbF9Jbml0fSwKLQotICAgICAgICAvKiBUaGlzIGxpdmVzIGl0IHdpdGggaW1wb3J0LmMgKi8KLSAgICAgICAgeyJfaW1wIiwgaW5pdGltcH0sCi0KLSAgICAgICAgLyogVGhlc2UgZW50cmllcyBhcmUgaGVyZSBmb3Igc3lzLmJ1aWx0aW5fbW9kdWxlX25hbWVzICovCi0gICAgICAgIHsiYnVpbHRpbnMiLCBOVUxMfSwKLSAgICAgICAgeyJzeXMiLCBOVUxMfSwKLQotICAgICAgICAvKiBTZW50aW5lbCAqLwotICAgICAgICB7MCwgMH0KLX07CmRpZmYgLS1naXQgYS9QQy9vczJ2YWNwcC9nZXRwYXRocC5jIGIvUEMvb3MydmFjcHAvZ2V0cGF0aHAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWJjMjgyNy4uMDAwMDAwMAotLS0gYS9QQy9vczJ2YWNwcC9nZXRwYXRocC5jCisrKyAvZGV2L251bGwKQEAgLTEsNDgyICswLDAgQEAKLQotLyogUmV0dXJuIHRoZSBpbml0aWFsIG1vZHVsZSBzZWFyY2ggcGF0aC4gKi8KLS8qIFVzZWQgYnkgRE9TLCBPUy8yLCBXaW5kb3dzIDMuMS4gIFdvcmtzIG9uIE5UIHRvby4gKi8KLQotI2luY2x1ZGUgIlB5dGhvbi5oIgotI2luY2x1ZGUgIm9zZGVmcy5oIgotCi0jaWZkZWYgTVNfV0lOMzIKLSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci1leHRlcm4gQk9PTCBQeVdpbl9Jc1dpbjMycyh2b2lkKTsKLSNlbmRpZgotCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2lmIEhBVkVfVU5JU1REX0gKLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNlbmRpZiAvKiBIQVZFX1VOSVNURF9IICovCi0KLS8qIFNlYXJjaCBpbiBzb21lIGNvbW1vbiBsb2NhdGlvbnMgZm9yIHRoZSBhc3NvY2lhdGVkIFB5dGhvbiBsaWJyYXJpZXMuCi0gKgotICogVHdvIGRpcmVjdG9yaWVzIG11c3QgYmUgZm91bmQsIHRoZSBwbGF0Zm9ybSBpbmRlcGVuZGVudCBkaXJlY3RvcnkKLSAqIChwcmVmaXgpLCBjb250YWluaW5nIHRoZSBjb21tb24gLnB5IGFuZCAucHljIGZpbGVzLCBhbmQgdGhlIHBsYXRmb3JtCi0gKiBkZXBlbmRlbnQgZGlyZWN0b3J5IChleGVjX3ByZWZpeCksIGNvbnRhaW5pbmcgdGhlIHNoYXJlZCBsaWJyYXJ5Ci0gKiBtb2R1bGVzLiAgTm90ZSB0aGF0IHByZWZpeCBhbmQgZXhlY19wcmVmaXggY2FuIGJlIHRoZSBzYW1lIGRpcmVjdG9yeSwKLSAqIGJ1dCBmb3Igc29tZSBpbnN0YWxsYXRpb25zLCB0aGV5IGFyZSBkaWZmZXJlbnQuCi0gKgotICogUHlfR2V0UGF0aCgpIHRyaWVzIHRvIHJldHVybiBhIHNlbnNpYmxlIFB5dGhvbiBtb2R1bGUgc2VhcmNoIHBhdGguCi0gKgotICogRmlyc3QsIHdlIGxvb2sgdG8gc2VlIGlmIHRoZSBleGVjdXRhYmxlIGlzIGluIGEgc3ViZGlyZWN0b3J5IG9mCi0gKiB0aGUgUHl0aG9uIGJ1aWxkIGRpcmVjdG9yeS4gIFdlIGNhbGN1bGF0ZSB0aGUgZnVsbCBwYXRoIG9mIHRoZQotICogZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIGV4ZWN1dGFibGUgYXMgcHJvZ3BhdGguICBXZSB3b3JrIGJhY2t3YXJkcwotICogYWxvbmcgcHJvZ3BhdGggYW5kIGxvb2sgZm9yICRkaXIvTW9kdWxlcy9TZXR1cC5pbiwgYSBkaXN0aW5jdGl2ZQotICogbGFuZG1hcmsuICBJZiBmb3VuZCwgd2UgdXNlICRkaXIvTGliIGFzICRyb290LiAgVGhlIHJldHVybmVkCi0gKiBQeXRob24gcGF0aCBpcyB0aGUgY29tcGlsZWQgI2RlZmluZSBQWVRIT05QQVRIIHdpdGggYWxsIHRoZSBpbml0aWFsCi0gKiAiLi9saWIiIHJlcGxhY2VkIGJ5ICRyb290LgotICoKLSAqIE90aGVyd2lzZSwgaWYgdGhlcmUgaXMgYSBQWVRIT05QQVRIIGVudmlyb25tZW50IHZhcmlhYmxlLCB3ZSByZXR1cm4gdGhhdC4KLSAqCi0gKiBPdGhlcndpc2Ugd2UgdHJ5IHRvIGZpbmQgJHByb2dwYXRoL2xpYi9vcy5weSwgYW5kIGlmIGZvdW5kLCB0aGVuCi0gKiByb290IGlzICRwcm9ncGF0aC9saWIsIGFuZCB3ZSByZXR1cm4gUHl0aG9uIHBhdGggYXMgY29tcGlsZWQgUFlUSE9OUEFUSAotICogd2l0aCBhbGwgIi4vbGliIiByZXBsYWNlZCBieSAkcm9vdCAoYXMgYWJvdmUpLgotICoKLSAqLwotCi0jaWZuZGVmIExBTkRNQVJLCi0jZGVmaW5lIExBTkRNQVJLICJsaWJcXG9zLnB5IgotI2VuZGlmCi0KLXN0YXRpYyBjaGFyIHByZWZpeFtNQVhQQVRITEVOKzFdOwotc3RhdGljIGNoYXIgZXhlY19wcmVmaXhbTUFYUEFUSExFTisxXTsKLXN0YXRpYyBjaGFyIHByb2dwYXRoW01BWFBBVEhMRU4rMV07Ci1zdGF0aWMgY2hhciAqbW9kdWxlX3NlYXJjaF9wYXRoID0gTlVMTDsKLQotCi1zdGF0aWMgaW50Ci1pc19zZXAoY2hhciBjaCkgLyogZGV0ZXJtaW5lIGlmICJjaCIgaXMgYSBzZXBhcmF0b3IgY2hhcmFjdGVyICovCi17Ci0jaWZkZWYgQUxUU0VQCi0gICAgcmV0dXJuIGNoID09IFNFUCB8fCBjaCA9PSBBTFRTRVA7Ci0jZWxzZQotICAgIHJldHVybiBjaCA9PSBTRVA7Ci0jZW5kaWYKLX0KLQotCi1zdGF0aWMgdm9pZAotcmVkdWNlKGNoYXIgKmRpcikKLXsKLSAgICBpbnQgaSA9IHN0cmxlbihkaXIpOwotICAgIHdoaWxlIChpID4gMCAmJiAhaXNfc2VwKGRpcltpXSkpCi0gICAgICAgIC0taTsKLSAgICBkaXJbaV0gPSAnXDAnOwotfQotCi0KLXN0YXRpYyBpbnQKLWV4aXN0cyhjaGFyICpmaWxlbmFtZSkKLXsKLSAgICBzdHJ1Y3Qgc3RhdCBidWY7Ci0gICAgcmV0dXJuIHN0YXQoZmlsZW5hbWUsICZidWYpID09IDA7Ci19Ci0KLQotLyogQWRkIGEgcGF0aCBjb21wb25lbnQsIGJ5IGFwcGVuZGluZyBzdHVmZiB0byBidWZmZXIuCi0gICBidWZmZXIgbXVzdCBoYXZlIGF0IGxlYXN0IE1BWFBBVEhMRU4gKyAxIGJ5dGVzIGFsbG9jYXRlZCwgYW5kIGNvbnRhaW4gYQotICAgTlVMLXRlcm1pbmF0ZWQgc3RyaW5nIHdpdGggbm8gbW9yZSB0aGFuIE1BWFBBVEhMRU4gY2hhcmFjdGVycyAobm90IGNvdW50aW5nCi0gICB0aGUgdHJhaWxpbmcgTlVMKS4gIEl0J3MgYSBmYXRhbCBlcnJvciBpZiBpdCBjb250YWlucyBhIHN0cmluZyBsb25nZXIgdGhhbgotICAgdGhhdCAoY2FsbGVycyBtdXN0IGJlIGNhcmVmdWwhKS4gIElmIHRoZXNlIHJlcXVpcmVtZW50cyBhcmUgbWV0LCBpdCdzCi0gICBndWFyYW50ZWVkIHRoYXQgYnVmZmVyIHdpbGwgc3RpbGwgYmUgYSBOVUwtdGVybWluYXRlZCBzdHJpbmcgd2l0aCBubyBtb3JlCi0gICB0aGFuIE1BWFBBVEhMRU4gY2hhcmFjdGVycyBhdCBleGl0LiAgSWYgc3R1ZmYgaXMgdG9vIGxvbmcsIG9ubHkgYXMgbXVjaCBvZgotICAgc3R1ZmYgYXMgZml0cyB3aWxsIGJlIGFwcGVuZGVkLgotKi8KLXN0YXRpYyB2b2lkCi1qb2luKGNoYXIgKmJ1ZmZlciwgY2hhciAqc3R1ZmYpCi17Ci0gICAgaW50IG4sIGs7Ci0gICAgaWYgKGlzX3NlcChzdHVmZlswXSkpCi0gICAgICAgIG4gPSAwOwotICAgIGVsc2UgewotICAgICAgICBuID0gc3RybGVuKGJ1ZmZlcik7Ci0gICAgICAgIGlmIChuID4gMCAmJiAhaXNfc2VwKGJ1ZmZlcltuLTFdKSAmJiBuIDwgTUFYUEFUSExFTikKLSAgICAgICAgICAgIGJ1ZmZlcltuKytdID0gU0VQOwotICAgIH0KLSAgICBpZiAobiA+IE1BWFBBVEhMRU4pCi0gICAgICAgIFB5X0ZhdGFsRXJyb3IoImJ1ZmZlciBvdmVyZmxvdyBpbiBnZXRwYXRocC5jJ3Mgam9pbnBhdGgoKSIpOwotICAgIGsgPSBzdHJsZW4oc3R1ZmYpOwotICAgIGlmIChuICsgayA+IE1BWFBBVEhMRU4pCi0gICAgICAgIGsgPSBNQVhQQVRITEVOIC0gbjsKLSAgICBzdHJuY3B5KGJ1ZmZlcituLCBzdHVmZiwgayk7Ci0gICAgYnVmZmVyW24ra10gPSAnXDAnOwotfQotCi0KLXN0YXRpYyBpbnQKLXNlYXJjaF9mb3JfcHJlZml4KGNoYXIgKmFyZ3YwX3BhdGgsIGNoYXIgKmxhbmRtYXJrKQotewotICAgIGludCBuOwotCi0gICAgLyogU2VhcmNoIGZyb20gYXJndjBfcGF0aCwgdW50aWwgcm9vdCBpcyBmb3VuZCAqLwotICAgIHN0cmNweShwcmVmaXgsIGFyZ3YwX3BhdGgpOwotICAgIGRvIHsKLSAgICAgICAgbiA9IHN0cmxlbihwcmVmaXgpOwotICAgICAgICBqb2luKHByZWZpeCwgbGFuZG1hcmspOwotICAgICAgICBpZiAoZXhpc3RzKHByZWZpeCkpIHsKLSAgICAgICAgICAgIHByZWZpeFtuXSA9ICdcMCc7Ci0gICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgfQotICAgICAgICBwcmVmaXhbbl0gPSAnXDAnOwotICAgICAgICByZWR1Y2UocHJlZml4KTsKLSAgICB9IHdoaWxlIChwcmVmaXhbMF0pOwotICAgIHJldHVybiAwOwotfQotCi0jaWZkZWYgTVNfV0lOMzIKLSNpbmNsdWRlICJtYWxsb2MuaCIgLy8gZm9yIGFsbG9jYSAtIHNlZSBjb21tZW50cyBiZWxvdyEKLWV4dGVybiBjb25zdCBjaGFyICpQeVdpbl9ETExWZXJzaW9uU3RyaW5nOyAvLyBhIHN0cmluZyBsb2FkZWQgZnJvbSB0aGUgRExMIGF0IHN0YXJ0dXAuCi0KLQotLyogTG9hZCBhIFBZVEhPTlBBVEggdmFsdWUgZnJvbSB0aGUgcmVnaXN0cnkuCi0gICBMb2FkIGZyb20gZWl0aGVyIEhLRVlfTE9DQUxfTUFDSElORSBvciBIS0VZX0NVUlJFTlRfVVNFUi4KLQotICAgUmV0dXJucyBOVUxMLCBvciBhIHBvaW50ZXIgdGhhdCBzaG91bGQgYmUgZnJlZWQuCi0qLwotCi1zdGF0aWMgY2hhciAqCi1nZXRweXRob25yZWdwYXRoKEhLRVkga2V5QmFzZSwgQk9PTCBiV2luMzJzKQotewotICAgIEhLRVkgbmV3S2V5ID0gMDsKLSAgICBEV09SRCBuYW1lU2l6ZSA9IDA7Ci0gICAgRFdPUkQgZGF0YVNpemUgPSAwOwotICAgIERXT1JEIG51bUVudHJpZXMgPSAwOwotICAgIExPTkcgcmM7Ci0gICAgY2hhciAqcmV0dmFsID0gTlVMTDsKLSAgICBjaGFyICpkYXRhQnVmOwotICAgIGNvbnN0IGNoYXIga2V5UHJlZml4W10gPSAiU29mdHdhcmVcXFB5dGhvblxcUHl0aG9uQ29yZVxcIjsKLSAgICBjb25zdCBjaGFyIGtleVN1ZmZpeFtdID0gIlxcUHl0aG9uUGF0aCI7Ci0gICAgaW50IHZlcnNpb25MZW47Ci0gICAgY2hhciAqa2V5QnVmOwotCi0gICAgLy8gVHJpZWQgdG8gdXNlIHN5c2dldCgid2ludmVyIikgYnV0IGhlcmUgaXMgdG9vIGVhcmx5IDotKAotICAgIHZlcnNpb25MZW4gPSBzdHJsZW4oUHlXaW5fRExMVmVyc2lvblN0cmluZyk7Ci0gICAgLy8gYWxsb2NhID09IG5vIGZyZWUgcmVxdWlyZWQsIGJ1dCBtZW1vcnkgb25seSBsb2NhbCB0byBmbi4KLSAgICAvLyBhbHNvIG5vIGhlYXAgZnJhZ21lbnRhdGlvbiEgIEFtIEkgYmVpbmcgc2lsbHk/Ci0gICAga2V5QnVmID0gYWxsb2NhKHNpemVvZihrZXlQcmVmaXgpLTEgKyB2ZXJzaW9uTGVuICsgc2l6ZW9mKGtleVN1ZmZpeCkpOyAvLyBjaGFycyBvbmx5LCBwbHVzIDEgTlVMTC4KLSAgICAvLyBsb3RzIG9mIGNvbnN0YW50cyBoZXJlIGZvciB0aGUgY29tcGlsZXIgdG8gb3B0aW1pemUgYXdheSA6LSkKLSAgICBtZW1jcHkoa2V5QnVmLCBrZXlQcmVmaXgsIHNpemVvZihrZXlQcmVmaXgpLTEpOwotICAgIG1lbWNweShrZXlCdWYrc2l6ZW9mKGtleVByZWZpeCktMSwgUHlXaW5fRExMVmVyc2lvblN0cmluZywgdmVyc2lvbkxlbik7Ci0gICAgbWVtY3B5KGtleUJ1ZitzaXplb2Yoa2V5UHJlZml4KS0xK3ZlcnNpb25MZW4sIGtleVN1ZmZpeCwgc2l6ZW9mKGtleVN1ZmZpeCkpOyAvLyBOVUxMIGNvbWVzIHdpdGggdGhpcyBvbmUhCi0KLSAgICByYz1SZWdPcGVuS2V5KGtleUJhc2UsCi0gICAgICAgICAgICAgICAgICBrZXlCdWYsCi0gICAgICAgICAgICAgICAgICAmbmV3S2V5KTsKLSAgICBpZiAocmM9PUVSUk9SX1NVQ0NFU1MpIHsKLSAgICAgICAgUmVnUXVlcnlJbmZvS2V5KG5ld0tleSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICZudW1FbnRyaWVzLCAmbmFtZVNpemUsICZkYXRhU2l6ZSwgTlVMTCwgTlVMTCk7Ci0gICAgfQotICAgIGlmIChiV2luMzJzICYmIG51bUVudHJpZXM9PTAgJiYgZGF0YVNpemU9PTApIHsKLSAgICAgICAgLyogbXVzdCBoYXJkY29kZSBmb3IgV2luMzJzICovCi0gICAgICAgIG51bUVudHJpZXMgPSAxOwotICAgICAgICBkYXRhU2l6ZSA9IDUxMTsKLSAgICB9Ci0gICAgaWYgKG51bUVudHJpZXMpIHsKLSAgICAgICAgLyogTG9vcCBvdmVyIGFsbCBzdWJrZXlzLiAqLwotICAgICAgICAvKiBXaW4zMnMgZG9lc250IGtub3cgaG93IG1hbnkgc3Via2V5cywgc28gd2UgZG8KLSAgICAgICAgICAgaXQgdHdpY2UgKi8KLSAgICAgICAgY2hhciBrZXlCdWZbTUFYX1BBVEgrMV07Ci0gICAgICAgIGludCBpbmRleCA9IDA7Ci0gICAgICAgIGludCBvZmYgPSAwOwotICAgICAgICBmb3IoaW5kZXg9MDs7aW5kZXgrKykgewotICAgICAgICAgICAgbG9uZyByZXFkU2l6ZSA9IDA7Ci0gICAgICAgICAgICBEV09SRCByYyA9IFJlZ0VudW1LZXkobmV3S2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4LCBrZXlCdWYsIE1BWF9QQVRIKzEpOwotICAgICAgICAgICAgaWYgKHJjKSBicmVhazsKLSAgICAgICAgICAgIHJjID0gUmVnUXVlcnlWYWx1ZShuZXdLZXksIGtleUJ1ZiwgTlVMTCwgJnJlcWRTaXplKTsKLSAgICAgICAgICAgIGlmIChyYykgYnJlYWs7Ci0gICAgICAgICAgICBpZiAoYldpbjMycyAmJiByZXFkU2l6ZT09MCkgcmVxZFNpemUgPSA1MTI7Ci0gICAgICAgICAgICBkYXRhU2l6ZSArPSByZXFkU2l6ZSArIDE7IC8qIDEgZm9yIHRoZSAiOyIgKi8KLSAgICAgICAgfQotICAgICAgICBkYXRhQnVmID0gbWFsbG9jKGRhdGFTaXplKzEpOwotICAgICAgICBpZiAoZGF0YUJ1Zj09TlVMTCkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOyAvKiBwcmV0dHkgc2VyaW91cz8gIFJhaXNlIGVycm9yPyAqLwotICAgICAgICAvKiBOb3cgbG9vcCBvdmVyLCBncmFiYmluZyB0aGUgcGF0aHMuCi0gICAgICAgICAgIFN1YmtleXMgYmVmb3JlIG1haW4gbGlicmFyeSAqLwotICAgICAgICBmb3IoaW5kZXg9MDs7aW5kZXgrKykgewotICAgICAgICAgICAgaW50IGFkanVzdDsKLSAgICAgICAgICAgIGxvbmcgcmVxZFNpemUgPSBkYXRhU2l6ZTsKLSAgICAgICAgICAgIERXT1JEIHJjID0gUmVnRW51bUtleShuZXdLZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXgsIGtleUJ1ZixNQVhfUEFUSCsxKTsKLSAgICAgICAgICAgIGlmIChyYykgYnJlYWs7Ci0gICAgICAgICAgICByYyA9IFJlZ1F1ZXJ5VmFsdWUobmV3S2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleUJ1ZiwgZGF0YUJ1ZitvZmYsICZyZXFkU2l6ZSk7Ci0gICAgICAgICAgICBpZiAocmMpIGJyZWFrOwotICAgICAgICAgICAgaWYgKHJlcWRTaXplPjEpIHsKLSAgICAgICAgICAgICAgICAvKiBJZiBOb3RoaW5nLCBvciBvbmx5ICdcMCcgY29waWVkLiAqLwotICAgICAgICAgICAgICAgIGFkanVzdCA9IHN0cmxlbihkYXRhQnVmK29mZik7Ci0gICAgICAgICAgICAgICAgZGF0YVNpemUgLT0gYWRqdXN0OwotICAgICAgICAgICAgICAgIG9mZiArPSBhZGp1c3Q7Ci0gICAgICAgICAgICAgICAgZGF0YUJ1ZltvZmYrK10gPSAnOyc7Ci0gICAgICAgICAgICAgICAgZGF0YUJ1ZltvZmZdID0gJ1wwJzsKLSAgICAgICAgICAgICAgICBkYXRhU2l6ZS0tOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIC8qIEFkZGl0aW9uYWxseSwgd2luMzJzIGRvZXNudCB3b3JrIGFzIGV4cGVjdGVkLCBzbwotICAgICAgICAgICB0aGUgc3BlY2lmaWMgc3RybGVuKCkgaXMgcmVxdWlyZWQgZm9yIDMuMS4gKi8KLSAgICAgICAgcmMgPSBSZWdRdWVyeVZhbHVlKG5ld0tleSwgIiIsIGRhdGFCdWYrb2ZmLCAmZGF0YVNpemUpOwotICAgICAgICBpZiAocmM9PUVSUk9SX1NVQ0NFU1MpIHsKLSAgICAgICAgICAgIGlmIChzdHJsZW4oZGF0YUJ1Zik9PTApCi0gICAgICAgICAgICAgICAgZnJlZShkYXRhQnVmKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZXR2YWwgPSBkYXRhQnVmOyAvKiBjYWxsZXIgd2lsbCBmcmVlICovCi0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZnJlZShkYXRhQnVmKTsKLSAgICB9Ci0KLSAgICBpZiAobmV3S2V5KQotICAgICAgICBSZWdDbG9zZUtleShuZXdLZXkpOwotICAgIHJldHVybiByZXR2YWw7Ci19Ci0jZW5kaWYgLyogTVNfV0lOMzIgKi8KLQotc3RhdGljIHZvaWQKLWdldF9wcm9ncGF0aCh2b2lkKQotewotICAgIGV4dGVybiBjaGFyICpQeV9HZXRQcm9ncmFtTmFtZSh2b2lkKTsKLSAgICBjaGFyICpwYXRoID0gZ2V0ZW52KCJQQVRIIik7Ci0gICAgY2hhciAqcHJvZyA9IFB5X0dldFByb2dyYW1OYW1lKCk7Ci0KLSNpZmRlZiBNU19XSU4zMgotICAgIGlmIChHZXRNb2R1bGVGaWxlTmFtZShOVUxMLCBwcm9ncGF0aCwgTUFYUEFUSExFTikpCi0gICAgICAgIHJldHVybjsKLSNlbmRpZgotICAgIGlmIChwcm9nID09IE5VTEwgfHwgKnByb2cgPT0gJ1wwJykKLSAgICAgICAgcHJvZyA9ICJweXRob24iOwotCi0gICAgLyogSWYgdGhlcmUgaXMgbm8gc2xhc2ggaW4gdGhlIGFyZ3YwIHBhdGgsIHRoZW4gd2UgaGF2ZSB0bwotICAgICAqIGFzc3VtZSBweXRob24gaXMgb24gdGhlIHVzZXIncyAkUEFUSCwgc2luY2UgdGhlcmUncyBubwotICAgICAqIG90aGVyIHdheSB0byBmaW5kIGEgZGlyZWN0b3J5IHRvIHN0YXJ0IHRoZSBzZWFyY2ggZnJvbS4gIElmCi0gICAgICogJFBBVEggaXNuJ3QgZXhwb3J0ZWQsIHlvdSBsb3NlLgotICAgICAqLwotI2lmZGVmIEFMVFNFUAotICAgIGlmIChzdHJjaHIocHJvZywgU0VQKSB8fCBzdHJjaHIocHJvZywgQUxUU0VQKSkKLSNlbHNlCi0gICAgaWYgKHN0cmNocihwcm9nLCBTRVApKQotI2VuZGlmCi0gICAgICAgIHN0cmNweShwcm9ncGF0aCwgcHJvZyk7Ci0gICAgZWxzZSBpZiAocGF0aCkgewotICAgICAgICB3aGlsZSAoMSkgewotICAgICAgICAgICAgY2hhciAqZGVsaW0gPSBzdHJjaHIocGF0aCwgREVMSU0pOwotCi0gICAgICAgICAgICBpZiAoZGVsaW0pIHsKLSAgICAgICAgICAgICAgICBpbnQgbGVuID0gZGVsaW0gLSBwYXRoOwotICAgICAgICAgICAgICAgIHN0cm5jcHkocHJvZ3BhdGgsIHBhdGgsIGxlbik7Ci0gICAgICAgICAgICAgICAgKihwcm9ncGF0aCArIGxlbikgPSAnXDAnOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHN0cmNweShwcm9ncGF0aCwgcGF0aCk7Ci0KLSAgICAgICAgICAgIGpvaW4ocHJvZ3BhdGgsIHByb2cpOwotICAgICAgICAgICAgaWYgKGV4aXN0cyhwcm9ncGF0aCkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGlmICghZGVsaW0pIHsKLSAgICAgICAgICAgICAgICBwcm9ncGF0aFswXSA9ICdcMCc7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwYXRoID0gZGVsaW0gKyAxOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICAgICAgcHJvZ3BhdGhbMF0gPSAnXDAnOwotfQotCi1zdGF0aWMgdm9pZAotY2FsY3VsYXRlX3BhdGgodm9pZCkKLXsKLSAgICBjaGFyIGFyZ3YwX3BhdGhbTUFYUEFUSExFTisxXTsKLSAgICBjaGFyICpidWY7Ci0gICAgaW50IGJ1ZnN6OwotICAgIGNoYXIgKnB5dGhvbmhvbWUgPSBQeV9HZXRQeXRob25Ib21lKCk7Ci0gICAgY2hhciAqZW52cGF0aCA9IFB5X0dFVEVOVigiUFlUSE9OUEFUSCIpOwotI2lmZGVmIE1TX1dJTjMyCi0gICAgY2hhciAqbWFjaGluZXBhdGgsICp1c2VycGF0aDsKLQotICAgIC8qIEFyZSB3ZSBydW5uaW5nIHVuZGVyIFdpbmRvd3MgMy4xKDEpIFdpbjMycz8gKi8KLSAgICBpZiAoUHlXaW5fSXNXaW4zMnMoKSkgewotICAgICAgICAvKiBPbmx5IENMQVNTRVNfUk9PVCBpcyBzdXBwb3J0ZWQgKi8KLSAgICAgICAgbWFjaGluZXBhdGggPSBnZXRweXRob25yZWdwYXRoKEhLRVlfQ0xBU1NFU19ST09ULCBUUlVFKTsKLSAgICAgICAgdXNlcnBhdGggPSBOVUxMOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1hY2hpbmVwYXRoID0gZ2V0cHl0aG9ucmVncGF0aChIS0VZX0xPQ0FMX01BQ0hJTkUsIEZBTFNFKTsKLSAgICAgICAgdXNlcnBhdGggPSBnZXRweXRob25yZWdwYXRoKEhLRVlfQ1VSUkVOVF9VU0VSLCBGQUxTRSk7Ci0gICAgfQotI2VuZGlmCi0KLSAgICBnZXRfcHJvZ3BhdGgoKTsKLSAgICBzdHJjcHkoYXJndjBfcGF0aCwgcHJvZ3BhdGgpOwotICAgIHJlZHVjZShhcmd2MF9wYXRoKTsKLSAgICBpZiAocHl0aG9uaG9tZSA9PSBOVUxMIHx8ICpweXRob25ob21lID09ICdcMCcpIHsKLSAgICAgICAgaWYgKHNlYXJjaF9mb3JfcHJlZml4KGFyZ3YwX3BhdGgsIExBTkRNQVJLKSkKLSAgICAgICAgICAgIHB5dGhvbmhvbWUgPSBwcmVmaXg7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHB5dGhvbmhvbWUgPSBOVUxMOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICBjaGFyICpkZWxpbTsKLQotICAgICAgICBzdHJjcHkocHJlZml4LCBweXRob25ob21lKTsKLQotICAgIC8qIEV4dHJhY3QgQW55IE9wdGlvbmFsIFRyYWlsaW5nIEVYRUNfUFJFRklYICovCi0gICAgLyogZS5nLiBQWVRIT05IT01FPTxwcmVmaXg+OjxleGVjX3ByZWZpeD4gICAqLwotICAgIGRlbGltID0gc3RyY2hyKHByZWZpeCwgREVMSU0pOwotICAgIGlmIChkZWxpbSkgewotICAgICAgICAqZGVsaW0gPSAnXDAnOwotICAgICAgICBzdHJjcHkoZXhlY19wcmVmaXgsIGRlbGltKzEpOwotICAgIH0gZWxzZQotICAgICAgICBzdHJjcHkoZXhlY19wcmVmaXgsIEVYRUNfUFJFRklYKTsKLSAgICB9Ci0KLSAgICBpZiAoZW52cGF0aCAmJiAqZW52cGF0aCA9PSAnXDAnKQotICAgICAgICBlbnZwYXRoID0gTlVMTDsKLQotICAgIC8qIFdlIG5lZWQgdG8gY29uc3RydWN0IGEgcGF0aCBmcm9tIHRoZSBmb2xsb3dpbmcgcGFydHM6Ci0gICAgICAgKDEpIHRoZSBQWVRIT05QQVRIIGVudmlyb25tZW50IHZhcmlhYmxlLCBpZiBzZXQ7Ci0gICAgICAgKDIpIGZvciBXaW4zMiwgdGhlIG1hY2hpbmVwYXRoIGFuZCB1c2VycGF0aCwgaWYgc2V0OwotICAgICAgICgzKSB0aGUgUFlUSE9OUEFUSCBjb25maWcgbWFjcm8sIHdpdGggdGhlIGxlYWRpbmcgIi4iCi0gICAgICAgICAgIG9mIGVhY2ggY29tcG9uZW50IHJlcGxhY2VkIHdpdGggcHl0aG9uaG9tZSwgaWYgc2V0OwotICAgICAgICg0KSB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIGV4ZWN1dGFibGUgKGFyZ3YwX3BhdGgpLgotICAgICAgIFRoZSBsZW5ndGggY2FsY3VsYXRpb24gY2FsY3VsYXRlcyAjMyBmaXJzdC4KLSAgICAqLwotCi0gICAgLyogQ2FsY3VsYXRlIHNpemUgb2YgcmV0dXJuIGJ1ZmZlciAqLwotICAgIGlmIChweXRob25ob21lICE9IE5VTEwpIHsKLSAgICAgICAgY2hhciAqcDsKLSAgICAgICAgYnVmc3ogPSAxOwotICAgICAgICBmb3IgKHAgPSBQWVRIT05QQVRIOyAqcDsgcCsrKSB7Ci0gICAgICAgICAgICBpZiAoKnAgPT0gREVMSU0pCi0gICAgICAgICAgICAgICAgYnVmc3orKzsgLyogbnVtYmVyIG9mIERFTElNIHBsdXMgb25lICovCi0gICAgICAgIH0KLSAgICAgICAgYnVmc3ogKj0gc3RybGVuKHB5dGhvbmhvbWUpOwotICAgIH0KLSAgICBlbHNlCi0gICAgICAgIGJ1ZnN6ID0gMDsKLSAgICBidWZzeiArPSBzdHJsZW4oUFlUSE9OUEFUSCkgKyAxOwotICAgIGlmIChlbnZwYXRoICE9IE5VTEwpCi0gICAgICAgIGJ1ZnN6ICs9IHN0cmxlbihlbnZwYXRoKSArIDE7Ci0gICAgYnVmc3ogKz0gc3RybGVuKGFyZ3YwX3BhdGgpICsgMTsKLSNpZmRlZiBNU19XSU4zMgotICAgIGlmIChtYWNoaW5lcGF0aCkKLSAgICAgICAgYnVmc3ogKz0gc3RybGVuKG1hY2hpbmVwYXRoKSArIDE7Ci0gICAgaWYgKHVzZXJwYXRoKQotICAgICAgICBidWZzeiArPSBzdHJsZW4odXNlcnBhdGgpICsgMTsKLSNlbmRpZgotCi0gICAgbW9kdWxlX3NlYXJjaF9wYXRoID0gYnVmID0gbWFsbG9jKGJ1ZnN6KTsKLSAgICBpZiAoYnVmID09IE5VTEwpIHsKLSAgICAgICAgLyogV2UgY2FuJ3QgZXhpdCwgc28gcHJpbnQgYSB3YXJuaW5nIGFuZCBsaW1wIGFsb25nICovCi0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ2FuJ3QgbWFsbG9jIGR5bmFtaWMgUFlUSE9OUEFUSC5cbiIpOwotICAgICAgICBpZiAoZW52cGF0aCkgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJVc2luZyBkZWZhdWx0IHN0YXRpYyAkUFlUSE9OUEFUSC5cbiIpOwotICAgICAgICAgICAgbW9kdWxlX3NlYXJjaF9wYXRoID0gZW52cGF0aDsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiVXNpbmcgZW52aXJvbm1lbnQgJFBZVEhPTlBBVEguXG4iKTsKLSAgICAgICAgICAgIG1vZHVsZV9zZWFyY2hfcGF0aCA9IFBZVEhPTlBBVEg7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChlbnZwYXRoKSB7Ci0gICAgICAgIHN0cmNweShidWYsIGVudnBhdGgpOwotICAgICAgICBidWYgPSBzdHJjaHIoYnVmLCAnXDAnKTsKLSAgICAgICAgKmJ1ZisrID0gREVMSU07Ci0gICAgfQotI2lmZGVmIE1TX1dJTjMyCi0gICAgaWYgKG1hY2hpbmVwYXRoKSB7Ci0gICAgICAgIHN0cmNweShidWYsIG1hY2hpbmVwYXRoKTsKLSAgICAgICAgYnVmID0gc3RyY2hyKGJ1ZiwgJ1wwJyk7Ci0gICAgICAgICpidWYrKyA9IERFTElNOwotICAgIH0KLSAgICBpZiAodXNlcnBhdGgpIHsKLSAgICAgICAgc3RyY3B5KGJ1ZiwgdXNlcnBhdGgpOwotICAgICAgICBidWYgPSBzdHJjaHIoYnVmLCAnXDAnKTsKLSAgICAgICAgKmJ1ZisrID0gREVMSU07Ci0gICAgfQotI2VuZGlmCi0gICAgaWYgKHB5dGhvbmhvbWUgPT0gTlVMTCkgewotICAgICAgICBzdHJjcHkoYnVmLCBQWVRIT05QQVRIKTsKLSAgICAgICAgYnVmID0gc3RyY2hyKGJ1ZiwgJ1wwJyk7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICBjaGFyICpwID0gUFlUSE9OUEFUSDsKLSAgICAgICAgY2hhciAqcTsKLSAgICAgICAgaW50IG47Ci0gICAgICAgIGZvciAoOzspIHsKLSAgICAgICAgICAgIHEgPSBzdHJjaHIocCwgREVMSU0pOwotICAgICAgICAgICAgaWYgKHEgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICBuID0gc3RybGVuKHApOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG4gPSBxLXA7Ci0gICAgICAgICAgICBpZiAocFswXSA9PSAnLicgJiYgaXNfc2VwKHBbMV0pKSB7Ci0gICAgICAgICAgICAgICAgc3RyY3B5KGJ1ZiwgcHl0aG9uaG9tZSk7Ci0gICAgICAgICAgICAgICAgYnVmID0gc3RyY2hyKGJ1ZiwgJ1wwJyk7Ci0gICAgICAgICAgICAgICAgcCsrOwotICAgICAgICAgICAgICAgIG4tLTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHN0cm5jcHkoYnVmLCBwLCBuKTsKLSAgICAgICAgICAgIGJ1ZiArPSBuOwotICAgICAgICAgICAgaWYgKHEgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICpidWYrKyA9IERFTElNOwotICAgICAgICAgICAgcCA9IHErMTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoYXJndjBfcGF0aCkgewotICAgICAgICAqYnVmKysgPSBERUxJTTsKLSAgICAgICAgc3RyY3B5KGJ1ZiwgYXJndjBfcGF0aCk7Ci0gICAgICAgIGJ1ZiA9IHN0cmNocihidWYsICdcMCcpOwotICAgIH0KLSAgICAqYnVmID0gJ1wwJzsKLX0KLQotCi0vKiBFeHRlcm5hbCBpbnRlcmZhY2UgKi8KLQotY2hhciAqCi1QeV9HZXRQYXRoKHZvaWQpCi17Ci0gICAgaWYgKCFtb2R1bGVfc2VhcmNoX3BhdGgpCi0gICAgICAgIGNhbGN1bGF0ZV9wYXRoKCk7Ci0KLSAgICByZXR1cm4gbW9kdWxlX3NlYXJjaF9wYXRoOwotfQotCi1jaGFyICoKLVB5X0dldFByZWZpeCh2b2lkKQotewotICAgIGlmICghbW9kdWxlX3NlYXJjaF9wYXRoKQotICAgICAgICBjYWxjdWxhdGVfcGF0aCgpOwotCi0gICAgcmV0dXJuIHByZWZpeDsKLX0KLQotY2hhciAqCi1QeV9HZXRFeGVjUHJlZml4KHZvaWQpCi17Ci0gICAgaWYgKCFtb2R1bGVfc2VhcmNoX3BhdGgpCi0gICAgICAgIGNhbGN1bGF0ZV9wYXRoKCk7Ci0KLSAgICByZXR1cm4gZXhlY19wcmVmaXg7Ci19Ci0KLWNoYXIgKgotUHlfR2V0UHJvZ3JhbUZ1bGxQYXRoKHZvaWQpCi17Ci0gICAgaWYgKCFtb2R1bGVfc2VhcmNoX3BhdGgpCi0gICAgICAgIGNhbGN1bGF0ZV9wYXRoKCk7Ci0KLSAgICByZXR1cm4gcHJvZ3BhdGg7Ci19CmRpZmYgLS1naXQgYS9QQy9vczJ2YWNwcC9tYWtlZmlsZSBiL1BDL29zMnZhY3BwL21ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMmYwYWRjLi4wMDAwMDAwCi0tLSBhL1BDL29zMnZhY3BwL21ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsMTU0OSArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jCi0jICAgICAgICAgIFRvcC1MZXZlbCBNYWtlZmlsZSBmb3IgQnVpbGRpbmcgUHl0aG9uIGZvciBPUy8yCi0jCi0jIFRoaXMgbWFrZWZpbGUgd2FzIGRldmVsb3BlZCBmb3IgdXNlIHdpdGggSUJNJ3MgVmlzdWFsQWdlIEMvQysrCi0jIGZvciBPUy8yIGNvbXBpbGVyLCB2ZXJzaW9uIDMuMCwgd2l0aCBGaXhwYWNrIDggYXBwbGllZC4gIEl0IHVzZXMKLSMgdmVyc2lvbiA0LjAgb2YgdGhlIE5NQUtFIHRvb2wgdGhhdCBjb21lcyB3aXRoIHRoYXQgcGFja2FnZS4KLSMKLSMgVGhlIG91dHB1dCBvZiB0aGUgYnVpbGQgaXMgYSBsYXJnaXNoIFB5dGhvbjIzLkRMTCBjb250YWluaW5nIHRoZQotIyBlc3NlbnRpYWwgbW9kdWxlcyBvZiBQeXRob24gYW5kIGEgc21hbGwgUHl0aG9uLmV4ZSBwcm9ncmFtIHRvIHN0YXJ0Ci0jIHRoZSBpbnRlcnByZXRlci4gIFdoZW4gZW1iZWRkaW5nIFB5dGhvbiB3aXRoaW4gYW5vdGhlciBwcm9ncmFtLCBvbmx5Ci0jIFB5dGhvbjIzLkRMTCBpcyBuZWVkZWQuCi0jCi0jIFRoZXNlIHR3byBiaW5hcmllcyBjYW4gYmUgc3RhdGljYWxseSBsaW5rZWQgd2l0aCB0aGUgVmlzdWFsQWdlIEMvQysrCi0jIHJ1bnRpbWUgbGlicmFyeSAocHJvZHVjaW5nIGxhcmdlciBiaW5hcmllcyksIG9yIGR5bmFtaWNhbGx5IGxpbmtlZAotIyB0byBtYWtlIHNtYWxsZXIgb25lcyB0aGF0IHJlcXVpcmUgdGhlIGNvbXBpbGVyIHRvIGJlIGluc3RhbGxlZCBvbgotIyBhbnkgc3lzdGVtIFB5dGhvbiBpcyB1c2VkIG9uLiAgUmV2aWV3IHRoZSAvR2QrIGNvbXBpbGVyIG9wdGlvbiBmb3IKLSMgaG93IHRvIGRvIHRoaXMuCi0jCi0jIE5PVEU6IElCTSdzIE5NQUtFIDQuMCBpcyByYXRoZXIgZHVtYiwgcmVxdWlyaW5nIHRoaXMgbWFrZWZpbGUgdG8KLSMgICAgICAgYmUgbXVjaCBtb3JlIGNvbXBsaWNhdGVkIHRoYW4gbmVjZXNzYXJ5LiAgSSB1c2UgT3B1c01BS0UKLSMgICAgICAgbXlzZWxmIGZvciBhIG11Y2ggbW9yZSBwb3dlcmZ1bCBNQUtFIHRvb2wgYnV0IG5vdCBldmVyeW9uZQotIyAgICAgICB3aXNoZXMgdG8gYnV5IGl0LiAgSG93ZXZlciwgYXMgYSByZXN1bHQgSSBkaWRuJ3QgaG9vayBpbgotIyAgICAgICB0aGUgZGVwZW5kZW5jaWVzIG9uIHRoZSBpbmNsdWRlIGZpbGVzIGFzIE5NQUtFIGhhcyBubyBlYXN5Ci0jICAgICAgIHdheSB0byBkbyB0aGlzIHdpdGhvdXQgZXhwbGljaXRseSBzcGVsbGluZyBpdCBhbGwgb3V0LgotIwotIyBIaXN0b3J5IChNb3N0IFJlY2VudCBGaXJzdCkKLSMKLSMgMjYtU2VwLTk4IGpyciBSZXRlc3RlZCBhbmQgYWRqdXN0ZWQgZm9yIGJ1aWxkaW5nIHcvUHl0aG9uIDEuNS4yYTEKLSMgMjAtTm92LTk3IGpyciBDbGVhbmVkIFVwIGZvciBBcHBseWluZyB0byBEaXN0cmlidXRpb24KLSMgMjktT2N0LTk3IGpyciBNb2RpZmllZCBmb3IgVXNlIHdpdGggUHl0aG9uIDEuNSBBbHBoYSA0Ci0jIDAzLUF1Zy05NiBqcnIgT3JpZ2luYWwgZm9yIFVzZSB3aXRoIFB5dGhvbiAxLjQgUmVsZWFzZQotIwotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jIyMjIyMjIyMjIyMjIyMjIyMjCi0jIFBsYWNlcyBhbmQgVGhpbmdzCi0jIyMjIyMjIyMjIyMjIyMjIyMjCi1QWV9NT0RVTEVTICAgICAgPSAuLlwuLlxNb2R1bGVzCi1QWV9PQkpFQ1RTICAgICAgPSAuLlwuLlxPYmplY3RzCi1QWV9QQVJTRVIgICAgICAgPSAuLlwuLlxQYXJzZXIKLVBZX1BZVEhPTiAgICAgICA9IC4uXC4uXFB5dGhvbgotUFlfSU5DTFVERSAgICAgID0gLi5cLi5cSW5jbHVkZQotUFlfSU5DTFVERVMgICAgID0gLjskKFBZX0lOQ0xVREUpOyQoUFlfTU9EVUxFUyk7JChQWV9PQkpFQ1RTKTskKFBZX1BBUlNFUik7JChQWV9QWVRIT04pCi0KLSMgRmlsZSB0byBDb2xsZWN0IFdvcmR5IENvbXBpbGVyIE91dHB1dCByZSBFcnJvcnMKLUVSUlMJCT0gbWFrZS5vdXQKLQotIyBXaGVyZSB0byBGaW5kIHRoZSBJQk0gVENQL0lQIFNvY2tldCBJbmNsdWRlcyBhbmQgTGlicmFyaWVzCi1PUzJUQ1BJUCAgICAgICAgPSBDOlxNUFROCi0KLSMgV2hlcmUgdG8gRmluZCB0aGUgVGNsL1RrIEJhc2UgRGlyZWN0b3J5IGZvciBMaWJzL0luY2x1ZGVzCi1UQ0xUSwkJPSBEOlxUY2xUawotVENMQkFTRQkJPSBEOlxUY2w3LjZcT1MyCi1US0JBU0UJCT0gRDpcVGs0LjJcT1MyCi0KLSMgV2hlcmUgdG8gUHV0IHRoZSAuT0JKIEZpbGVzLCBUbyBLZWVwIFRoZW0gT3V0IG9mIHRoZSBXYXkKLVBBVEhPQkoJCT0gb2JqCi0KLSMgU2VhcmNoIFBhdGggZm9yIEluY2x1ZGUgRmlsZXMKLVBST0pJTkNMVURFCT0gLjskKFRDTEJBU0UpOyQoVEtCQVNFKTskKE9TMlRDUElQKVxJbmNsdWRlOyQoUFlfSU5DTFVERVMpCi0KLSMgUGxhY2UgdG8gU2VhcmNoIGZvciBTb3VyY2VzIHJlIE9wdXNNQUtFIERlcGVuZGVuY3kgR2VuZXJhdG9yIChDb21tZXJjaWFsKQotTUtNRl9TUkNTCT0gJChQWV9NT0RVTEVTKVwqLmMgJChQWV9PQkpFQ1RTKVwqLmMgJChQWV9QQVJTRVIpXCouYyAkKFBZX1BZVEhPTilcKi5jCi0KLSMuSERSUEFUSC5jCTo9ICQoUFJPSklOQ0xVREUsOz0gKSAkKC5IRFJQQVRILmMpCi0jLlBBVEguYyAgICAgICAgID0gLjskKFBZX01PRFVMRVMpOyQoUFlfT0JKRUNUUyk7JChQWV9QQVJTRVIpOyQoUFlfUFlUSE9OKQotT1RIRVJMSUJTCT0gc28zMmRsbC5saWIgdGNwMzJkbGwubGliICMgVGNsNzYubGliIFRrNDIubGliCi0KLSMjIyMjIyMjIyMjIyMjIyMjCi0jIEluZmVyZW5jZSBSdWxlcwotIyMjIyMjIyMjIyMjIyMjIyMKLXskKFBZX01PRFVMRVMpXH0uY3skKFBBVEhPQkopXH0ub2JqOgkjIENvbXBpbGUgQyBDb2RlIGludG8gYSAuT0JKIEZpbGUKLQlAIEVjaG8gQ29tcGlsaW5nICQ8Ci0JQCAkKENDKSAtYyAkKENGTEFHUykgLUZvJEAgJDwgPj4kKEVSUlMpCi0KLXskKFBZX09CSkVDVFMpXH0uY3skKFBBVEhPQkopXH0ub2JqOgkjIENvbXBpbGUgQyBDb2RlIGludG8gYSAuT0JKIEZpbGUKLQlAIEVjaG8gQ29tcGlsaW5nICQ8Ci0JQCAkKENDKSAtYyAkKENGTEFHUykgLUZvJEAgJDwgPj4kKEVSUlMpCi0KLXskKFBZX1BBUlNFUilcfS5jeyQoUEFUSE9CSilcfS5vYmo6CSMgQ29tcGlsZSBDIENvZGUgaW50byBhIC5PQkogRmlsZQotCUAgRWNobyBDb21waWxpbmcgJDwKLQlAICQoQ0MpIC1jICQoQ0ZMQUdTKSAtRm8kQCAkPCA+PiQoRVJSUykKLQoteyQoUFlfUFlUSE9OKVx9LmN7JChQQVRIT0JKKVx9Lm9iajoJIyBDb21waWxlIEMgQ29kZSBpbnRvIGEgLk9CSiBGaWxlCi0JQCBFY2hvIENvbXBpbGluZyAkPAotCUAgJChDQykgLWMgJChDRkxBR1MpIC1GbyRAICQ8ID4+JChFUlJTKQotCi0uY3skKFBBVEhPQkopXH0ub2JqOgkJCSMgQ29tcGlsZSBDIENvZGUgaW50byBhIC5PQkogRmlsZQotCUAgRWNobyBDb21waWxpbmcgJDwKLQlAICQoQ0MpIC1jICQoQ0ZMQUdTKSAtRm8kQCAkPCA+PiQoRVJSUykKLQotIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBQeXRob24gU3Vic3lzdGVtcwotIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jIFBZVEhPTiBpcyB0aGUgY2VudHJhbCBjb3JlLCBjb250YWluaW5nIHRoZSBidWlsdGlucyBhbmQgaW50ZXJwcmV0ZXIuCi1QWVRIT04JCT0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxCbHRpbk1vZHVsZS5vYmogICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxDRXZhbC5vYmogICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxDb21waWxlLm9iaiAgICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxFcnJvcnMub2JqICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxGcm96ZW4ub2JqICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxHZXRhcmdzLm9iaiAgICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxHZXRDb21waWxlci5vYmogICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxHZXRDb3B5cmlnaHQub2JqICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxHZXRNVGltZS5vYmogICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxHZXRPcHQub2JqICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxHZXRQbGF0Zm9ybS5vYmogICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxHZXRWZXJzaW9uLm9iaiAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxHcmFtSW5pdC5vYmogICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxJbXBvcnQub2JqICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxJbXBvcnRETC5vYmogICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxNYXJzaGFsLm9iaiAgICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxNb2RTdXBwb3J0Lm9iaiAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxNeVN0cnRvdWwub2JqICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxQeVN0YXRlLm9iaiAgICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxQeXRob25SdW4ub2JqICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxTdHJ1Y3RNZW1iZXIub2JqICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxTeXNNb2R1bGUub2JqICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxUaHJlYWQub2JqICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxUcmFjZUJhY2sub2JqICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxGcm96ZW5NYWluLm9iaiAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxleGNlcHRpb25zLm9iaiAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxzeW10YWJsZS5vYmogICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxjb2RlY3Mub2JqICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxmdXR1cmUub2JqICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxkeW5sb2FkX29zMi5vYmogICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxteXNucHJpbnRmLm9iaiAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxpdGVyb2JqZWN0Lm9iagotCi0jIFB5dGhvbidzIEludGVybmFsIFBhcnNlcgotUEFSU0VSCQk9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxBY2NlbGVyLm9iaiAgICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXEdyYW1tYXIxLm9iaiAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcTGlzdE5vZGUub2JqICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxOb2RlLm9iaiAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXFBhcnNlci5vYmogICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcUGFyc2VUb2sub2JqICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxCaXRTZXQub2JqICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXE1ldGFHcmFtbWFyLm9iaiAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcVG9rZW5pemVyLm9iaiAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxNeVJlYWRsaW5lLm9iagotCi0jIFB5dGhvbiBPYmplY3QgVHlwZXMKLU9CSkVDVFMJCT0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXEFic3RyYWN0Lm9iaiAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcQm9vbE9iamVjdC5vYmogICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxCdWZmZXJPYmplY3Qub2JqICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXENlbGxPYmplY3Qub2JqICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcQ2xhc3NPYmplY3Qub2JqICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxDT2JqZWN0Lm9iaiAgICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXENvbXBsZXhPYmplY3Qub2JqIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcRGVzY3JPYmplY3Qub2JqICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxEaWN0T2JqZWN0Lm9iaiAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXEVudW1PYmplY3Qub2JqICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcRmlsZU9iamVjdC5vYmogICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxGbG9hdE9iamVjdC5vYmogICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXEZyYW1lT2JqZWN0Lm9iaiAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcRnVuY09iamVjdC5vYmogICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxJdGVyT2JqZWN0Lm9iaiAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXExpc3RPYmplY3Qub2JqICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcTG9uZ09iamVjdC5vYmogICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxNZXRob2RPYmplY3Qub2JqICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXE1vZHVsZU9iamVjdC5vYmogIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcT2JqZWN0Lm9iaiAgICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxPYk1hbGxvYy5vYmogICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXFJhbmdlT2JqZWN0Lm9iaiAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcU2xpY2VPYmplY3Qub2JqICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxTdHJpbmdPYmplY3Qub2JqICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXFN0cnVjdFNlcS5vYmogICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcVHVwbGVPYmplY3Qub2JqICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxUeXBlT2JqZWN0Lm9iaiAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXFVuaWNvZGVPYmplY3Qub2JqIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcVW5pY29kZUNUeXBlLm9iaiAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxXZWFrcmVmT2JqZWN0Lm9iagotCi0jIEV4dGVuc2lvbiBNb2R1bGVzIChCdWlsdC1JbiBvciBhcyBTZXBhcmF0ZSBETExzKQotTU9EVUxFUwkJPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcQXJyYXlNb2R1bGUub2JqICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxCaW5Bc2NpaS5vYmogICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXENNYXRoTW9kdWxlLm9iaiAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcRXJybm9Nb2R1bGUub2JqICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxHQ01vZHVsZS5vYmogICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXEdldEJ1aWxkSW5mby5vYmogIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcR2V0UGF0aFAub2JqICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxNYWluLm9iaiAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXE1hdGhNb2R1bGUub2JqICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcTUQ1Yy5vYmogICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxNRDVNb2R1bGUub2JqICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXE9wZXJhdG9yLm9iaiAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcUENSRU1vZHVsZS5vYmogICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxQeVBDUkUub2JqICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXFBvc2l4TW9kdWxlLm9iaiAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcUmVnZXhNb2R1bGUub2JqICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxSZWdFeHByLm9iaiAgICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXFNlbGVjdE1vZHVsZS5vYmogIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcU2lnbmFsTW9kdWxlLm9iaiAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxTb2NrZXRNb2R1bGUub2JqICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXFN0cm9wTW9kdWxlLm9iaiAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcU3RydWN0TW9kdWxlLm9iaiAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxUaW1lTW9kdWxlLm9iaiAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXFRocmVhZE1vZHVsZS5vYmoKLQotIyBTdGFuZGFsb25lIFBhcnNlciBHZW5lcmF0b3IgUHJvZ3JhbSAoU2hhcmVzIFNvbWUgb2YgUHl0aG9uJ3MgTW9kdWxlcykKLVBHRU4gICAgICAgICAgICA9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxQR2VuLm9iaiAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXFBHZW5NYWluLm9iaiAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcTXlTTlByaW50Zi5vYmogICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxUb2tlbml6ZXJfUGdlbi5vYmogXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxQcmludEdyYW1tYXIub2JqICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXEdyYW1tYXIub2JqICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcRmlyc3RTZXRzLm9iagotCi0jIyMjIyMjIyMjIyMjIyMjIyMKLSMgTWFjcm9zIGFuZCBGbGFncwotIyMjIyMjIyMjIyMjIyMjIyMjCi1fQkFTRQkJPSAvUSAvVzIgL0kkKFBST0pJTkNMVURFKQotCQkjIC9RICAgPSBPbWl0IElCTSBDb3B5cmlnaHQKLQkJIyAvVzIgID0gU2hvdyBXYXJuaW5ncy9FcnJvcnMgT25seQotCi1fR0VOCQk9IC9HNCAvR20gL0dkLQotCQkjIC9HNCAgPSBHZW5lcmF0ZSBDb2RlIGZvciA0ODYgKFVzZSAzODYgZm9yIERlYnVnZ2VyKQotCQkjIC9HbSAgPSBVc2UgTXVsdGl0aHJlYWQgUnVudGltZQotCQkjIC9HZCAgPSBEeW5hbWljYWxseSBMb2FkIFJ1bnRpbWUKLQkJIyAvTXMgID0gVXNlIF9TeXN0ZW0gQ2FsbGluZyBDb252ZW50aW9uICh2cyBfT3B0bGluaykKLQkJIyAgICAgICAgKHRvIGFsbG93IG5vbi1WQUMrKyBjb2RlIHRvIGNhbGwgaW50byBQeXRob24yMy5kbGwpCi0KLV9PUFQJCT0gL08gL0dsCi0JCSMgL08gICA9IEVuYWJsZSBTcGVlZC1PcHRpbWl6YXRpb25zCi0JCSMgL09sICA9IFBhc3MgQ29kZSBUaHJ1IEludGVybWVkaWF0ZSBMaW5rZXIKLQkJIyAvR3UgID0gQWR2aXNlIExpbmtlciBBbGwgRXh0IERhdGEgaXMgSUQnZAotCQkjIC9HbCAgPSBIYXZlIExpbmtlciBSZW1vdmUgVW51c2VkIEZucwotCi1fREJHCQk9IC9XcHJvLSAvVGktIC9ESEFWRV9DT05GSUdfSCAvRFVTRV9TT0NLRVQKLSAgICAgICAgICAgICAgICAjIC9XcHJvPSBHZW5lcmF0ZSBDb21waWxlciBXYXJuaW5ncyByZSBNaXNzaW5nIFByb3RvdHlwZXMKLQkJIyAvVGkgID0gRW1iZWQgRGVidWdnZXIvQW5hbHl6ZXIgUmVjcwotCQkjIC9UbSAgPSBFbmFibGUgRGVidWcgTWVtb3J5IEZucwotCQkjIC9UeCAgPSBSZXF1ZXN0IEZ1bGwgRHVtcCBVcG9uIEV4Y2VwdGlvbgotCQkjIC9ESEFWRV9DT05GSUdfSCA9IENhdXNlcyBVc2Ugb2YgQ09ORklHLkggU2V0dGluZ3MKLSAgICAgICAgICAgICAgICAjIC9EVVNFX1NPQ0tFVCA9IEVuYWJsZXMgQnVpbGRpbmcgSW4gb2YgU29ja2V0IEFQSQotCi1fT1VUCQk9IAotCQkjIC9GYiAgPSBFbWJlZCBCcm93c2VyIFJlY3MKLQkJIyAvR2ggID0gR2VuZXJhdGUgQ29kZSBmb3IgUHJvZmlsZXIgSG9va3MKLQkJIyAvRmwgID0gT3V0cHV0IEMvQysrIExpc3RpbmcgRmlsZXMKLSAgICAgICAgICAgICAgICAjIC9MZiAgPSBQcm92aWRlIEZ1bGwgKERldGFpbGVkKSBMaXN0aW5nIEZpbGVzCi0JCSMgL0ZtLiA9IE91dHB1dCBMaW5rZXIgTWFwIEZpbGUKLQkJIyAvRnQuID0gT3V0cHV0IEMrKyBUZW1wbGF0ZSBSZXNvbHV0aW9uIEZpbGVzCi0KLV9NQVAJCT0gL0ZtTm9pc2VcJChAUikubWFwCi0KLV9ETEwJCT0gL0dlLQotX0VYRQkJPSAvR2UKLQkJIyAvR2UgPSBDcmVhdGUgYW4gRVhFLCBub3QgRExMCi0KLUNGTEFHUwkJPSAkKF9CQVNFKSAkKF9HRU4pICQoX09QVCkgJChfREJHKSAkKF9PVVQpICQoX0VYRSkgL1NzCi0KLSMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgUHJpbWFyeSBUYXJnZXQocykKLSMjIyMjIyMjIyMjIyMjIyMjIyMKLUFsbDogIG9iaiBub2lzZSBQeUNvcmUubGliIFB5dGhvbjIzLmxpYiBQR2VuLmV4ZSBcCi0gICAgICBQeXRob24uZXhlIFB5dGhvblBNLmV4ZSBQeXRob24yMy5kbGwgIyBfdGtpbnRlci5kbGwKLQotTW9kdWxlczogJChNT0RVTEVTKQotT2JqZWN0czogJChPQkpFQ1RTKQotUGFyc2VyOiAgJChQQVJTRVIpCi1QeXRob246ICAkKFBZVEhPTikKLQotIyBEaXJlY3RvcnkgdG8gS2VlcCAuT0JKIEZpbGVzIE91dCBvZiB0aGUgV2F5Ci1vYmo6Ci0JQC1ta2RpciBvYmogPj5OVUwKLQotIyBEaXJlY3RvcnkgdG8gS2VlcCAuTUFQIGFuZCBTdWNoIFRleHQgRmlsZXMgT3V0IG9mIHRoZSBXYXkKLW5vaXNlOgotCUAtbWtkaXIgbm9pc2UgPj5OVUwKLQotIyMjIyMjIyMjIyMjIyMKLSMKLSMjIyMjIyMjIyMjIyMjCi0KLSMgUHl0aG9uIEV4dGVuc2lvbiBETEw6IFRjbC9UayBJbnRlcmZhY2UKLSNfdGtpbnRlci5kbGw6ICQoUEFUSE9CSilcX3RraW50ZXIub2JqIFB5dGhvbjIzLmxpYiBfdGtpbnRlci5kZWYKLSMJQCBFY2hvIExpbmtpbmcgJEAgQXMgRExMCi0jCUAgJChDQykgJChDRkxBR1MpIC9CIi9OT0UiICQoX0RMTCkgL0ZlJEAgJChfTUFQKSAkKiogJChPVEhFUkxJQlMpID4+JChFUlJTKQotCi0jJChQQVRIT0JKKVxfdGtpbnRlci5vYmo6ICQoUFlfTU9EVUxFUylcX3RraW50ZXIuYwotIwlAIEVjaG8gQ29tcGlsaW5nICQqKgotIwlAICQoQ0MpIC1jICQoQ0ZMQUdTKSAkKF9ETEwpIC1GbyRAICQqKiA+PiQoRVJSUykKLQotIyBPYmplY3QgTGlicmFyeSBvZiBBbGwgRXNzZW50aWFsIFB5dGhvbiBSb3V0aW5lcwotUHlDb3JlLmxpYjogJChNT0RVTEVTKSAkKE9CSkVDVFMpICQoUEFSU0VSKSAkKFBZVEhPTikgJChQQVRIT0JKKVxDb25maWcub2JqCi0JQCBFY2hvIEFkZGluZyBVcGRhdGVkIE9iamVjdCBGaWxlcyB0byBMaW5rIExpYnJhcnkgJEAKLQlAICEgSUxJQiAkQCAvTk9MT0dPIC9OT0JBQ0tVUCAtKyQ/IDsgPj4kKEVSUlMpCi0KLVB5dGhvbjIzLmRsbDogJChQQVRIT0JKKVxDb21waWxlLm9iaiBQeUNvcmUubGliIFB5dGhvbi5kZWYKLQlAIEVjaG8gTGlua2luZyAkQCBBcyBETEwKLQlAICQoQ0MpICQoQ0ZMQUdTKSAvQiIvTk9FIiAkKF9ETEwpIC9GZSRAICQoX01BUCkgJCoqICQoT1RIRVJMSUJTKSA+PiQoRVJSUykKLSMJQCBFY2hvIENvbXByZXNzaW5nICRAIHdpdGggTHhMaXRlCi0jCUAgbHhsaXRlICRACi0KLSMgSUJNIExpbmtlciBSZXF1aXJlcyBPbmUgRXhwbGljaXQgLk9CSiBUbyBCdWlsZCBhIC5ETEwgZnJvbSBhIC5MSUIKLSQoUEFUSE9CSilcQ29tcGlsZS5vYmo6ICQoUFlfUFlUSE9OKVxDb21waWxlLmMKLQlAIEVjaG8gQ29tcGlsaW5nICQqKgotCUAgJChDQykgLWMgJChDRkxBR1MpICQoX0RMTCkgLUZvJEAgJCoqID4+JChFUlJTKQotCi0jIEltcG9ydCBMaWJyYXJ5IGZvciBVc2luZyB0aGUgUHl0aG9uMjMuZGxsCi1QeXRob24yMy5saWI6IFB5dGhvbi5kZWYKLQlAIEVjaG8gTWFraW5nICRACi0JQCBJTVBMSUIgL05PTE9HTyAvTk9JR05PUkUgJEAgJCoqID4+JChFUlJTKQotCUAgSUxJQiAvTk9MT0dPIC9DT05WRk9STUFUIC9OT0VYVERJQ1RJT05BUlkgL05PQlJPV1NFIC9OT0JBQ0tVUCAkQDsgPj4kKEVSUlMpCi0KLSMgU21hbGwgQ29tbWFuZC1MaW5lIFByb2dyYW0gdG8gU3RhcnQgSW50ZXJwcmV0ZXIgaW4gUHl0aG9uMjMuZGxsCi1QeXRob24uZXhlOiAkKFBBVEhPQkopXFB5dGhvbi5vYmogUHl0aG9uMjMubGliCi0JQCBFY2hvIExpbmtpbmcgJEAgQXMgRVhFCi0JQCAkKENDKSAkKENGTEFHUykgJChfRVhFKSAvQiIvUE06VklPIC9TVEFDSzozNjAwMDAiIC9GZSRAICQoX01BUCkgJCoqICQoT1RIRVJMSUJTKSA+PiQoRVJSUykKLQotIyBTbWFsbCBQTS1HVUkgUHJvZ3JhbSB0byBTdGFydCBJbnRlcnByZXRlciBpbiBQeXRob24yMy5kbGwKLVB5dGhvblBNLmV4ZTogJChQQVRIT0JKKVxQeXRob24ub2JqIFB5dGhvbjIzLmxpYgotCUAgRWNobyBMaW5raW5nICRAIEFzIEVYRQotCUAgJChDQykgJChDRkxBR1MpICQoX0VYRSkgL0IiL1BNOlBNIC9TVEFDSzozNjAwMDAiIC9GZSRAICQoX01BUCkgJCoqICQoT1RIRVJMSUJTKSA+PiQoRVJSUykKLQotUEdlbi5leGU6ICQoUEdFTikgUHlDb3JlLmxpYgotCUAgRWNobyBMaW5raW5nICRAIEFzIEVYRQotCUAgJChDQykgJChDRkxBR1MpICQoX0VYRSkgL0IiL1NUQUNLOjM2MDAwMCIgL0ZlJEAgJChfTUFQKSAkKiogJChPVEhFUkxJQlMpID4+JChFUlJTKQotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBNaXNjZWxsYW5lb3VzIFRhcmdldHMKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMgUmVtb3ZlIEludGVybWVkaWF0ZSBUYXJnZXRzIGJ1dCBMZWF2ZSBFeGVjdXRhYmxlIEJpbmFyaWVzCi1jbGVhbjoKLQktLSBEZWwgL1EgJChQQVRIT0JKKVwqLm9iagkJPk5VTCAyPiYxCi0JLS0gRGVsIC9RIC9ZIE5vaXNlCQkJPk5VTCAyPiYxCi0JLS0gRGVsIC9RICQoRVJSUykJCQk+TlVMIDI+JjEKLQotIyBSZW1vdmUgQWxsIFRhcmdldHMsIEluY2x1ZGluZyBGaW5hbCBCaW5hcmllcwotZGlzdGNsZWFuOiBjbGVhbgotICAgICAgICAtLSBEZWwgL1EgUHlDb3JlLmxpYiBQeXRob24yMy5saWIgICAgICAgPk5VTCAyPiYxCi0gICAgICAgIC0tIERlbCAvUSBQeXRob24yMy5kbGwgUHl0aG9uLmV4ZSBQR2VuLmV4ZSA+TlVMIDI+JjEKLQotcmVsZWFzZTogUHl0aG9uLmV4ZSBQeXRob24yMy5kbGwgUHl0aG9uMjMubGliCi0JLS0gQEVjaG8gWSB8IGNvcHkgL1UgUHl0aG9uLmV4ZSAgIEQ6XEVYRXMKLQktLSBARWNobyBZIHwgY29weSAvVSBQeXRob24yMy5kbGwgRDpcRExMcwotCS0tIEBFY2hvIFkgfCBjb3B5IC9VIFB5dGhvbjIzLmxpYiBFOlxUYXVcTGliCi0JLS0gQEVjaG8gWSB8IGNvcHkgL1UgX3RraW50ZXIuZGxsIEQ6XFB5dGhvbgotCi10ZXN0OgotICAgICAgICBweXRob24gLi5cLi5cbGliXHRlc3RccmVncnRlc3QucHkKLQotIyBVcGRhdGUgRGVwZW5kZW5jaWVzIG9uIFRhcmdldHMgKFVzZXMgT3B1c01BS0UgQ29tbWVyY2lhbCBQcm9kdWN0KQotZGVwZW5kOgotCUQ6XE9wdXNNYWtlXG9zMm1rbWYgLWMgLXMKLQotIyMjIE9QVVMgTUtNRjogIERvIG5vdCByZW1vdmUgdGhpcyBsaW5lISAgR2VuZXJhdGVkIGRlcGVuZGVuY2llcyBmb2xsb3cuCi0KLV90a2ludGVyLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1hcnJheW1vZHVsZS5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCBcCi0JICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1hdWRpb29wLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15bWF0aC5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggXAotCSAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotYmluYXNjaWkub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggXAotCSAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCBcCi0JICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLWNtYXRobW9kdWxlLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCBcCi0JICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCBcCi0JICQoUFlfSU5DTFVERSlcbXltYXRoLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCBcCi0JICQoUFlfSU5DTFVERSlccHlmcGUuaCAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob25ydW4uaCAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotY3BpY2tsZS5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15bWF0aC5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLWNyeXB0bW9kdWxlLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCBcCi0JICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCBcCi0JICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oIFwKLQkgJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLWN1cnNlc21vZHVsZS5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCBcCi0JICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1fZGJtbW9kdWxlLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1lcnJuby5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotZXJybm9tb2R1bGUub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oIFwKLQkgJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggXAotCSAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotZmNudGxtb2R1bGUub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChPUzJUQ1BJUClcSW5jbHVkZVxzeXNcaW9jdGwuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCBcCi0JICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1mcGVjdGxtb2R1bGUub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oIFwKLQkgJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggXAotCSAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotZnBldGVzdG1vZHVsZS5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCBcCi0JICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1fZ2RibW1vZHVsZS5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotZ2V0YnVpbGRpbmZvLm9iajogcHljb25maWcuaAotCi1nZXRwYXRoLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxvc2RlZnMuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggXAotCSAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotZ3JwbW9kdWxlLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChPUzJUQ1BJUClcSW5jbHVkZVxncnAuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggXAotCSAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotaW1hZ2VvcC5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotbWFpbi5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotbWF0aG1vZHVsZS5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteW1hdGguaCBcCi0JICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oIFwKLQkgJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLW1wem1vZHVsZS5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdpbnRyZXByLmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotbmlzbW9kdWxlLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoT1MyVENQSVApXEluY2x1ZGVcc3lzXHRpbWUuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCBcCi0JICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1vcGVyYXRvci5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotcGFyc2VybW9kdWxlLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCBcCi0JICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBpbGUuaCBcCi0JICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGdyYW1pbml0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcbm9kZS5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oIFwKLQkgJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRva2VuLmggXAotCSAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1wb3NpeC5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG15dGltZS5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oIFwKLQkgJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLXBvc2l4bW9kdWxlLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCBcCi0JICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCBcCi0JICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcbXl0aW1lLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCBcCi0JICQoUFlfSU5DTFVERSlccHlmcGUuaCAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob25ydW4uaCAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotcHdkbW9kdWxlLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChPUzJUQ1BJUClcSW5jbHVkZVxwd2QuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggXAotCSAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotcmVhZGxpbmUub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggXAotCSAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCBcCi0JICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLXJlc291cmNlLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoT1MyVENQSVApXEluY2x1ZGVcc3lzXHRpbWUuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCBcCi0JICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1zZWxlY3Rtb2R1bGUub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oIFwKLQkgJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxteXNlbGVjdC5oICQoUFlfSU5DTFVERSlcbXl0aW1lLmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotc2lnbmFsbW9kdWxlLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCBcCi0JICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCBcCi0JICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oIFwKLQkgJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLXNvY2tldG1vZHVsZS5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKE9TMlRDUElQKVxJbmNsdWRlXG5ldGluZXRcaW4uaCBcCi0JICQoT1MyVENQSVApXEluY2x1ZGVcc3lzXHNvY2tldC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcbXl0aW1lLmggJChPUzJUQ1BJUClcSW5jbHVkZVxuZXRkYi5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLXN0cnVjdG1vZHVsZS5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15bWF0aC5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLXN5c2xvZ21vZHVsZS5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCBcCi0JICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoT1MyVENQSVApXEluY2x1ZGVcc3lzbG9nLmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCBcCi0JICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLXRlcm1pb3Mub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggXAotCSAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCBcCi0JICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLV90aHJlYWRtb2R1bGUub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oIFwKLQkgJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggXAotCSAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdGhyZWFkLmggXAotCSAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi10aW1lbW9kdWxlLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcbXl0aW1lLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggXAotCSAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQoteHhtb2R1bGUub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggXAotCSAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCBcCi0JICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLXpsaWJtb2R1bGUub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggXAotCSAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCBcCi0JICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLWFic3RyYWN0Lm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1jbGFzc29iamVjdC5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCBcCi0JICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3RydWN0bWVtYmVyLmggXAotCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLWNvYmplY3Qub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggXAotCSAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCBcCi0JICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLWNvbXBsZXhvYmplY3Qub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oIFwKLQkgJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteW1hdGguaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1kaWN0b2JqZWN0Lm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1maWxlb2JqZWN0Lm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJ1Y3RtZW1iZXIuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotZmxvYXRvYmplY3Qub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oIFwKLQkgJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteW1hdGguaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1mcmFtZW9iamVjdC5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21waWxlLmggXAotCSAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmcmFtZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxvcGNvZGUuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzdHJ1Y3RtZW1iZXIuaCBcCi0JICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotZnVuY29iamVjdC5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21waWxlLmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCBcCi0JICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3RydWN0bWVtYmVyLmggXAotCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLWxpc3RvYmplY3Qub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggXAotCSAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCBcCi0JICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLWxvbmdvYmplY3Qub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oIFwKLQkgJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25naW50cmVwci5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXltYXRoLmggXAotCSAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCBcCi0JICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1tZXRob2RvYmplY3Qub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oIFwKLQkgJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggXAotCSAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdG9rZW4uaCBcCi0JICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLW1vZHVsZW9iamVjdC5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCBcCi0JICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1vYmplY3Qub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggXAotCSAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCBcCi0JICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLXJhbmdlb2JqZWN0Lm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCBcCi0JICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCBcCi0JICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oIFwKLQkgJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLXNsaWNlb2JqZWN0Lm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCBcCi0JICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCBcCi0JICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oIFwKLQkgJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLXN0cmluZ29iamVjdC5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15bWF0aC5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLXR1cGxlb2JqZWN0Lm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCBcCi0JICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCBcCi0JICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oIFwKLQkgJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLXR5cGVvYmplY3Qub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggXAotCSAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCBcCi0JICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLXh4b2JqZWN0Lm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1hY2NlbGVyLm9iajogJChQWV9JTkNMVURFKVxiaXRzZXQuaCBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZ3JhbW1hci5oIFwKLQkgJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcbm9kZS5oIFwKLQkgJChQWV9QQVJTRVIpXHBhcnNlci5oICQoUFlfSU5DTFVERSlccGdlbmhlYWRlcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCBcCi0JICQoUFlfSU5DTFVERSlcdG9rZW4uaAotCi1iaXRzZXQub2JqOiAkKFBZX0lOQ0xVREUpXGJpdHNldC5oIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxwZ2VuaGVhZGVycy5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oCi0KLWZpcnN0c2V0cy5vYmo6ICQoUFlfSU5DTFVERSlcYml0c2V0LmggcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGdyYW1tYXIuaCBcCi0JICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXHBnZW5oZWFkZXJzLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHRva2VuLmgKLQotZ3JhbW1hci5vYmo6ICQoUFlfSU5DTFVERSlcYml0c2V0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZ3JhbW1hci5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlccGdlbmhlYWRlcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHRva2VuLmgKLQotZ3JhbW1hcjEub2JqOiAkKFBZX0lOQ0xVREUpXGJpdHNldC5oIHB5Y29uZmlnLmggXAotCSAkKFBZX0lOQ0xVREUpXGdyYW1tYXIuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXHBnZW5oZWFkZXJzLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVx0b2tlbi5oCi0KLWludHJjaGVjay5vYmo6IHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaAotCi1saXN0bm9kZS5vYmo6IHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxub2RlLmggJChQWV9JTkNMVURFKVxwZ2VuaGVhZGVycy5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oIFwKLQkgJChQWV9JTkNMVURFKVx0b2tlbi5oCi0KLW1ldGFncmFtbWFyLm9iajogJChQWV9JTkNMVURFKVxiaXRzZXQuaCBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZ3JhbW1hci5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRhZ3JhbW1hci5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfUEFSU0VSKVxwZ2VuLmggJChQWV9JTkNMVURFKVxwZ2VuaGVhZGVycy5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oCi0KLW15cmVhZGxpbmUub2JqOiBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmgKLQotbm9kZS5vYmo6IHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcbm9kZS5oIFwKLQkgJChQWV9JTkNMVURFKVxwZ2VuaGVhZGVycy5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oCi0KLXBhcnNlci5vYmo6ICQoUFlfSU5DTFVERSlcYml0c2V0LmggcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGVycmNvZGUuaCBcCi0JICQoUFlfSU5DTFVERSlcZ3JhbW1hci5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcbm9kZS5oICQoUFlfUEFSU0VSKVxwYXJzZXIuaCAkKFBZX0lOQ0xVREUpXHBnZW5oZWFkZXJzLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHRva2VuLmgKLQotcGFyc2V0b2sub2JqOiAkKFBZX0lOQ0xVREUpXGJpdHNldC5oIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxlcnJjb2RlLmggXAotCSAkKFBZX0lOQ0xVREUpXGdyYW1tYXIuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG5vZGUuaCAkKFBZX1BBUlNFUilccGFyc2VyLmggJChQWV9JTkNMVURFKVxwYXJzZXRvay5oIFwKLQkgJChQWV9JTkNMVURFKVxwZ2VuaGVhZGVycy5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlcdG9rZW4uaCBcCi0JICQoUFlfUEFSU0VSKVx0b2tlbml6ZXIuaAotCi1wZ2VuLm9iajogJChQWV9JTkNMVURFKVxiaXRzZXQuaCBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZ3JhbW1hci5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRhZ3JhbW1hci5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcbm9kZS5oICQoUFlfUEFSU0VSKVxwZ2VuLmggJChQWV9JTkNMVURFKVxwZ2VuaGVhZGVycy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVx0b2tlbi5oCi0KLXBnZW5tYWluLm9iajogJChQWV9JTkNMVURFKVxiaXRzZXQuaCBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZ3JhbW1hci5oIFwKLQkgJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcbm9kZS5oIFwKLQkgJChQWV9JTkNMVURFKVxwYXJzZXRvay5oICQoUFlfUEFSU0VSKVxwZ2VuLmggJChQWV9JTkNMVURFKVxwZ2VuaGVhZGVycy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmgKLQotcHJpbnRncmFtbWFyLm9iajogJChQWV9JTkNMVURFKVxiaXRzZXQuaCBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZ3JhbW1hci5oIFwKLQkgJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlccGdlbmhlYWRlcnMuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oCi0KLXRva2VuaXplci5vYmo6IHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxlcnJjb2RlLmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxwZ2VuaGVhZGVycy5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oIFwKLQkgJChQWV9JTkNMVURFKVx0b2tlbi5oICQoUFlfUEFSU0VSKVx0b2tlbml6ZXIuaAotCi1hdG9mLm9iajogcHljb25maWcuaAotCi1ibHRpbm1vZHVsZS5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21waWxlLmggXAotCSAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxldmFsLmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15bWF0aC5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxub2RlLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCBcCi0JICQoUFlfSU5DTFVERSlccHlmcGUuaCAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob25ydW4uaCAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotY2V2YWwub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGlsZS5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGV2YWwuaCBcCi0JICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnJhbWVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCBcCi0JICQoUFlfSU5DTFVERSlcb3Bjb2RlLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1jb21waWxlLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBpbGUuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxncmFtaW5pdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcbm9kZS5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggXAotCSAkKFBZX0lOQ0xVREUpXG9wY29kZS5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCBcCi0JICQoUFlfSU5DTFVERSlccHlmcGUuaCAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob25ydW4uaCAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN0cnVjdG1lbWJlci5oIFwKLQkgJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRva2VuLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1lcnJvcnMub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggXAotCSAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCBcCi0JICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLWZtb2Qub2JqOiBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcbXltYXRoLmgKLQotZnJvemVuLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1mcm96ZW5tYWluLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1nZXRhcmdzLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1nZXRjb21waWxlci5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCBcCi0JICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1nZXRjb3B5cmlnaHQub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oIFwKLQkgJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggXAotCSAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotZ2V0cGxhdGZvcm0ub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oIFwKLQkgJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggXAotCSAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotZ2V0dmVyc2lvbi5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlccGF0Y2hsZXZlbC5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCBcCi0JICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1ncmFtaW5pdC5vYmo6ICQoUFlfSU5DTFVERSlcYml0c2V0LmggcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGdyYW1tYXIuaCBcCi0JICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXHBnZW5oZWFkZXJzLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaAotCi1oeXBvdC5vYmo6IHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxteW1hdGguaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaAotCi1pbXBvcnQub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGlsZS5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGVycmNvZGUuaCAkKFBZX0lOQ0xVREUpXGV2YWwuaCBcCi0JICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9QWVRIT04pXGltcG9ydGRsLmggJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1hcnNoYWwuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG5vZGUuaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxvc2RlZnMuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRva2VuLmggXAotCSAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1pbXBvcnRkbC5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9QWVRIT04pXGltcG9ydGRsLmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxvc2RlZnMuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLW1hcnNoYWwub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGlsZS5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25naW50cmVwci5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oICQoUFlfSU5DTFVERSlcbWFyc2hhbC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCBcCi0JICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLW1vZHN1cHBvcnQub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggXAotCSAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCBcCi0JICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLW15c3RydG91bC5vYmo6IHB5Y29uZmlnLmgKLQotcHlmcGUub2JqOiBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlccHlmcGUuaAotCi1weXN0YXRlLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1weXRob25ydW4ub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxiaXRzZXQuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21waWxlLmggXAotCSAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxlcnJjb2RlLmggJChQWV9JTkNMVURFKVxldmFsLmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxncmFtbWFyLmggXAotCSAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCBcCi0JICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oICQoUFlfSU5DTFVERSlcbWFyc2hhbC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxub2RlLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCBcCi0JICQoUFlfSU5DTFVERSlccGFyc2V0b2suaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLXNpZ2NoZWNrLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1zdHJkdXAub2JqOiBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaAotCi1zdHJ0b2Qub2JqOiBweWNvbmZpZy5oCi0KLXN0cnVjdG1lbWJlci5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCBcCi0JICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3RydWN0bWVtYmVyLmggXAotCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLXN5c21vZHVsZS5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlcb3NkZWZzLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oIFwKLQkgJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLXRocmVhZC5vYmo6IHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVx0aHJlYWQuaAotCi10cmFjZWJhY2sub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGlsZS5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZyYW1lb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXG9zZGVmcy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCBcCi0JICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3RydWN0bWVtYmVyLmggXAotCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCmRpZmYgLS1naXQgYS9QQy9vczJ2YWNwcC9tYWtlZmlsZS5vbWsgYi9QQy9vczJ2YWNwcC9tYWtlZmlsZS5vbWsKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMTJjOTYuLjAwMDAwMDAKLS0tIGEvUEMvb3MydmFjcHAvbWFrZWZpbGUub21rCisrKyAvZGV2L251bGwKQEAgLTEsMTA0NyArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jCi0jICAgICAgICAgIFRvcC1MZXZlbCBNYWtlZmlsZSBmb3IgQnVpbGRpbmcgUHl0aG9uIGZvciBPUy8yCi0jCi0jIFRoaXMgbWFrZWZpbGUgd2FzIGRldmVsb3BlZCBmb3IgdXNlIHdpdGggSUJNJ3MgVmlzdWFsQWdlIEMvQysrCi0jIGZvciBPUy8yIGNvbXBpbGVyLCB2ZXJzaW9uIDMuMCwgd2l0aCBGaXhwYWNrIDggYXBwbGllZC4gIEl0IHVzZXMKLSMgdGhlIGNvbW1lcmNpYWwgT3B1c01BS0UgdG9vbC4KLSMKLSMgVGhlIG91dHB1dCBvZiB0aGUgYnVpbGQgaXMgYSBsYXJnaXNoIFB5dGhvbjE1LkRMTCBjb250YWluaW5nIHRoZQotIyBlc3NlbnRpYWwgbW9kdWxlcyBvZiBQeXRob24gYW5kIGEgc21hbGwgUHl0aG9uLmV4ZSBwcm9ncmFtIHRvIHN0YXJ0Ci0jIHRoZSBpbnRlcnByZXRlci4gIFdoZW4gZW1iZWRkaW5nIFB5dGhvbiB3aXRoaW4gYW5vdGhlciBwcm9ncmFtLCBvbmx5Ci0jIFB5dGhvbjE1LkRMTCBpcyBuZWVkZWQuCi0jCi0jIFRoZXNlIHR3byBiaW5hcmllcyBjYW4gYmUgc3RhdGljYWxseSBsaW5rZWQgd2l0aCB0aGUgVmlzdWFsQWdlIEMvQysrCi0jIHJ1bnRpbWUgbGlicmFyeSAocHJvZHVjaW5nIGxhcmdlciBiaW5hcmllcyksIG9yIGR5bmFtaWNhbGx5IGxpbmtlZAotIyB0byBtYWtlIHNtYWxsZXIgb25lcyB0aGF0IHJlcXVpcmUgdGhlIGNvbXBpbGVyIHRvIGJlIGluc3RhbGxlZCBvbgotIyBhbnkgc3lzdGVtIFB5dGhvbiBpcyB1c2VkIG9uLgotIwotIyBIaXN0b3J5IChNb3N0IFJlY2VudCBGaXJzdCkKLSMKLSMgMjAtTm92LTk3IGpyciBDbGVhbmVkIFVwIGZvciBBcHBseWluZyB0byBEaXN0cmlidXRpb24KLSMgMjktT2N0LTk3IGpyciBNb2RpZmllZCBmb3IgVXNlIHdpdGggUHl0aG9uIDEuNSBBbHBoYSA0Ci0jIDAzLUF1Zy05NiBqcnIgT3JpZ2luYWwgZm9yIFVzZSB3aXRoIFB5dGhvbiAxLjQgUmVsZWFzZQotIwotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jIyMjIyMjIyMjIyMjIyMjIyMjCi0jIFBsYWNlcyBhbmQgVGhpbmdzCi0jIyMjIyMjIyMjIyMjIyMjIyMjCi1QWV9NT0RVTEVTICAgICAgPSAuLlwuLlxNb2R1bGVzCi1QWV9PQkpFQ1RTICAgICAgPSAuLlwuLlxPYmplY3RzCi1QWV9QQVJTRVIgICAgICAgPSAuLlwuLlxQYXJzZXIKLVBZX1BZVEhPTiAgICAgICA9IC4uXC4uXFB5dGhvbgotUFlfSU5DTFVERSAgICAgID0gLi5cLi5cSW5jbHVkZQotUFlfSU5DTFVERVMgICAgID0gLjskKFBZX0lOQ0xVREUpOyQoUFlfTU9EVUxFUyk7JChQWV9PQkpFQ1RTKTskKFBZX1BBUlNFUik7JChQWV9QWVRIT04pCi0KLSMgV2hlcmUgdG8gRmluZCB0aGUgSUJNIFRDUC9JUCBTb2NrZXQgSW5jbHVkZXMgYW5kIExpYnJhcmllcwotT1MyVENQSVAgICAgICAgID0gQzpcTVBUTgotCi0jIFdoZXJlIHRvIFB1dCB0aGUgLk9CSiBGaWxlcywgVG8gS2VlcCBUaGVtIE91dCBvZiB0aGUgV2F5Ci0uUEFUSC5vYmoJPSBvYmoKLQotIyBTZWFyY2ggUGF0aCBmb3IgSW5jbHVkZSBGaWxlcwotUFJPSklOQ0xVREUJPSAuOyQoT1MyVENQSVApXEluY2x1ZGU7JChQWV9JTkNMVURFUykKLQotIyBQbGFjZSB0byBTZWFyY2ggZm9yIFNvdXJjZXMgcmUgT3B1c01BS0UgRGVwZW5kZW5jeSBHZW5lcmF0b3IgKENvbW1lcmNpYWwpCi1NS01GX1NSQ1MJPSAkKFBZX01PRFVMRVMpXCouYyAkKFBZX09CSkVDVFMpXCouYyAkKFBZX1BBUlNFUilcKi5jICQoUFlfUFlUSE9OKVwqLmMKLQotLkhEUlBBVEguYwk6PSAkKFBST0pJTkNMVURFLDs9ICkgJCguSERSUEFUSC5jKQotLlBBVEguYyAgICAgICAgID0gLjskKFBZX01PRFVMRVMpOyQoUFlfT0JKRUNUUyk7JChQWV9QQVJTRVIpOyQoUFlfUFlUSE9OKQotT1RIRVJMSUJTCT0gJChPUzJUQ1BJUClcbGliXHNvMzJkbGwubGliICQoT1MyVENQSVApXGxpYlx0Y3AzMmRsbC5saWIKLQotIyMjIyMjIyMjIyMjIyMjIyMKLSMgSW5mZXJlbmNlIFJ1bGVzCi0jIyMjIyMjIyMjIyMjIyMjIwotCi0KLSMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgUHl0aG9uIFN1YnN5c3RlbXMKLSMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIyBQWVRIT04gaXMgdGhlIGNlbnRyYWwgY29yZSwgY29udGFpbmluZyB0aGUgYnVpbHRpbnMgYW5kIGludGVycHJldGVyLgotUFlUSE9OCQk9ICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICBCbHRpbk1vZHVsZS5vYmogICAgXAotICAgICAgICAgICAgICAgICAgQ0V2YWwub2JqICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIENvbXBpbGUub2JqICAgICAgICBcCi0gICAgICAgICAgICAgICAgICBFcnJvcnMub2JqICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgRnJvemVuLm9iaiAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIEdldGFyZ3Mub2JqICAgICAgICBcCi0gICAgICAgICAgICAgICAgICBHZXRDb21waWxlci5vYmogICAgXAotICAgICAgICAgICAgICAgICAgR2V0Q29weXJpZ2h0Lm9iaiAgIFwKLSAgICAgICAgICAgICAgICAgIEdldE1UaW1lLm9iaiAgICAgICBcCi0gICAgICAgICAgICAgICAgICBHZXRPcHQub2JqICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgR2V0UGxhdGZvcm0ub2JqICAgIFwKLSAgICAgICAgICAgICAgICAgIEdldFZlcnNpb24ub2JqICAgICBcCi0gICAgICAgICAgICAgICAgICBHcmFtSW5pdC5vYmogICAgICAgXAotICAgICAgICAgICAgICAgICAgSW1wb3J0Lm9iaiAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIEltcG9ydERMLm9iaiAgICAgICBcCi0gICAgICAgICAgICAgICAgICBNYXJzaGFsLm9iaiAgICAgICAgXAotICAgICAgICAgICAgICAgICAgTW9kU3VwcG9ydC5vYmogICAgIFwKLSAgICAgICAgICAgICAgICAgIE15U3RydG91bC5vYmogICAgICBcCi0gICAgICAgICAgICAgICAgICBQeVN0YXRlLm9iaiAgICAgICAgXAotICAgICAgICAgICAgICAgICAgUHl0aG9uUnVuLm9iaiAgICAgIFwKLSAgICAgICAgICAgICAgICAgIFN0cnVjdE1lbWJlci5vYmogICBcCi0gICAgICAgICAgICAgICAgICBTeXNNb2R1bGUub2JqICAgICAgXAotICAgICAgICAgICAgICAgICAgVGhyZWFkLm9iaiAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIFRyYWNlQmFjay5vYmogICAgICBcCi0gICAgICAgICAgICAgICAgICBGcm96ZW5NYWluLm9iagotCi0jIE9taXR0ZWQgUHl0aG9uIEVsZW1lbnRzIChhbmQgUmVhc29uKToKLSAgIyBhdG9mLmMgICAgICAgICAgLS0gSW1wbGVtZW50YXRpb24gZm9yIFBsYXRmb3JtcyB3L28gVGhpcyBGdW5jdGlvbgotICAjIGR1cDIuYyAgICAgICAgICAtLSBJbXBsZW1lbnRhdGlvbiBmb3IgUGxhdGZvcm1zIHcvbyBUaGlzIEZ1bmN0aW9uCi0gICMgZm1vZC5jICAgICAgICAgIC0tIEltcGxlbWVudGF0aW9uIGZvciBQbGF0Zm9ybXMgdy9vIFRoaXMgRnVuY3Rpb24KLSAgIyBnZXRjd2QuYyAgICAgICAgLS0gSW1wbGVtZW50YXRpb24gZm9yIFBsYXRmb3JtcyB3L28gVGhpcyBGdW5jdGlvbgotICAjIGh5cG90LmMgICAgICAgICAtLSBJbXBsZW1lbnRhdGlvbiBmb3IgUGxhdGZvcm1zIHcvbyBUaGlzIEZ1bmN0aW9uCi0gICMgbWVtbW92ZS5jICAgICAgIC0tIEltcGxlbWVudGF0aW9uIGZvciBQbGF0Zm9ybXMgdy9vIFRoaXMgRnVuY3Rpb24KLSAgIyBzdHJkdXAuYyAgICAgICAgLS0gSW1wbGVtZW50YXRpb24gZm9yIFBsYXRmb3JtcyB3L28gVGhpcyBGdW5jdGlvbgotICAjIHN0cmVycm9yLmMgICAgICAtLSBJbXBsZW1lbnRhdGlvbiBmb3IgUGxhdGZvcm1zIHcvbyBUaGlzIEZ1bmN0aW9uCi0gICMgc3RydG9kLmMgICAgICAgIC0tIEltcGxlbWVudGF0aW9uIGZvciBQbGF0Zm9ybXMgdy9vIFRoaXMgRnVuY3Rpb24KLQotICAjIHNpZ2NoZWNrLmMgICAgICAtLSBQcmltaXRpdmUgU2lnbmFsIENhdGNoZXIgKFNpZ25hbE1vZHVsZS5jIFVzZWQgSW5zdGVhZCkKLSAgIyBweWZwZS5jICAgICAgICAgLS0gUHJpbWl0aXZlIEZQRSBDYXRjaGVyIChOb3QgUmVmZXJlbmNlZCBieSBBbnlvbmUpCi0gICMgZnJvemVubWFpbi5jCi0KLSMgUHl0aG9uJ3MgSW50ZXJuYWwgUGFyc2VyCi1QQVJTRVIJCT0gICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgQWNjZWxlci5vYmogICAgICAgXAotICAgICAgICAgICAgICAgICAgR3JhbW1hcjEub2JqICAgICAgXAotICAgICAgICAgICAgICAgICAgTXlSZWFkbGluZS5vYmogICAgXAotICAgICAgICAgICAgICAgICAgTm9kZS5vYmogICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgUGFyc2VyLm9iaiAgICAgICAgXAotICAgICAgICAgICAgICAgICAgUGFyc2VUb2sub2JqICAgICAgXAotICAgICAgICAgICAgICAgICAgVG9rZW5pemVyLm9iagotCi0jIFB5dGhvbiBPYmplY3QgVHlwZXMKLU9CSkVDVFMJCT0gICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgQWJzdHJhY3Qub2JqICAgICAgXAotICAgICAgICAgICAgICAgICAgQ2xhc3NPYmplY3Qub2JqICAgXAotICAgICAgICAgICAgICAgICAgQ09iamVjdC5vYmogICAgICAgXAotICAgICAgICAgICAgICAgICAgQ29tcGxleE9iamVjdC5vYmogXAotICAgICAgICAgICAgICAgICAgRGljdE9iamVjdC5vYmogICAgXAotICAgICAgICAgICAgICAgICAgRmlsZU9iamVjdC5vYmogICAgXAotICAgICAgICAgICAgICAgICAgRmxvYXRPYmplY3Qub2JqICAgXAotICAgICAgICAgICAgICAgICAgRnJhbWVPYmplY3Qub2JqICAgXAotICAgICAgICAgICAgICAgICAgRnVuY09iamVjdC5vYmogICAgXAotICAgICAgICAgICAgICAgICAgTGlzdE9iamVjdC5vYmogICAgXAotICAgICAgICAgICAgICAgICAgTG9uZ09iamVjdC5vYmogICAgXAotICAgICAgICAgICAgICAgICAgTWV0aG9kT2JqZWN0Lm9iaiAgXAotICAgICAgICAgICAgICAgICAgTW9kdWxlT2JqZWN0Lm9iaiAgXAotICAgICAgICAgICAgICAgICAgT2JqZWN0Lm9iaiAgICAgICAgXAotICAgICAgICAgICAgICAgICAgUmFuZ2VPYmplY3Qub2JqICAgXAotICAgICAgICAgICAgICAgICAgU2xpY2VPYmplY3Qub2JqICAgXAotICAgICAgICAgICAgICAgICAgU3RyaW5nT2JqZWN0Lm9iaiAgXAotICAgICAgICAgICAgICAgICAgVHVwbGVPYmplY3Qub2JqICAgXAotICAgICAgICAgICAgICAgICAgVHlwZU9iamVjdC5vYmoKLQotIyBPbWl0dGVkIE9iamVjdHMgKGFuZCBSZWFzb24pOgotICAjIHh4b2JqZWN0LmMgICAgICAtLSBUZW1wbGF0ZSB0byBDcmVhdGUgWW91ciBPd24gT2JqZWN0IFR5cGVzCi0KLSMgRXh0ZW5zaW9uIE1vZHVsZXMgKEJ1aWx0LUluIG9yIGFzIFNlcGFyYXRlIERMTHMpCi1NT0RVTEVTCQk9ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIEFycmF5TW9kdWxlLm9iaiAgIFwKLSAgICAgICAgICAgICAgICAgIEJpbkFzY2lpLm9iaiAgICAgIFwKLSAgICAgICAgICAgICAgICAgIENNYXRoTW9kdWxlLm9iaiAgIFwKLSAgICAgICAgICAgICAgICAgIEVycm5vTW9kdWxlLm9iaiAgIFwKLSAgICAgICAgICAgICAgICAgIEdldEJ1aWxkSW5mby5vYmogIFwKLSAgICAgICAgICAgICAgICAgIEdldFBhdGhQLm9iaiAgICAgIFwKLSAgICAgICAgICAgICAgICAgIE1haW4ub2JqICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIE1hdGhNb2R1bGUub2JqICAgIFwKLSAgICAgICAgICAgICAgICAgIE1ENWMub2JqICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIE1ENU1vZHVsZS5vYmogICAgIFwKLSAgICAgICAgICAgICAgICAgIE9wZXJhdG9yLm9iaiAgICAgIFwKLSAgICAgICAgICAgICAgICAgIFBvc2l4TW9kdWxlLm9iaiAgIFwKLSAgICAgICAgICAgICAgICAgIFJlZ2V4TW9kdWxlLm9iaiAgIFwKLSAgICAgICAgICAgICAgICAgIFJlZ0V4cHIub2JqICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIFJlb3BNb2R1bGUub2JqICAgIFwKLSAgICAgICAgICAgICAgICAgIFNlbGVjdE1vZHVsZS5vYmogIFwKLSAgICAgICAgICAgICAgICAgIFNpZ25hbE1vZHVsZS5vYmogIFwKLSAgICAgICAgICAgICAgICAgIFNvY2tldE1vZHVsZS5vYmogIFwKLSAgICAgICAgICAgICAgICAgIFNvdW5kRXgub2JqICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIFN0cm9wTW9kdWxlLm9iaiAgIFwKLSAgICAgICAgICAgICAgICAgIFN0cnVjdE1vZHVsZS5vYmogIFwKLSAgICAgICAgICAgICAgICAgIFRpbWVNb2R1bGUub2JqICAgIFwKLSAgICAgICAgICAgICAgICAgIFRocmVhZE1vZHVsZS5vYmoKLQotIyBPbWl0dGVkIE1vZHVsZXMgKGFuZCBEZXNjcmlwdGlvbi9SZWFzb24pOgotICAjCi0gICMgTXVsdGltZWRpYToKLSAgIyBhdWRpb29wLmMgICAgICAgLS0gVmFyaW91cyBDb21wdXRlIE9wZXJhdGlvbnMgb24gQXVkaW8gU2FtcGxlcwotCi0gICMgRGF0YWJhc2U6Ci0gICMgX2RibW1vZHVsZS5jICAgIC0tIFdyYXBwZXIgb2YgREJNIERhdGFiYXNlIEFQSSAoR2VuZXJpYyBGbGF2b3IpCi0gICMgX2dkYm1tb2R1bGUuYyAgIC0tIFdyYXBwZXIgb2YgREJNIERhdGFiYXNlIEFQSSAoR05VIEZsYXZvcikKLQotICAjIENyeXB0b2dyYXBoeToKLSAgIyBjcnlwdG1vZHVsZS5jICAgLS0gU2ltcGxlIFdyYXBwZXIgZm9yIGNyeXB0KCkgRnVuY3Rpb24KLQotIyAgICAgICAgICAgICAgICAgIGZjbnRsbW9kdWxlLm9iaiAgIFwKLSMgICAgICAgICAgICAgICAgICBmcGVjdGxtb2R1bGUub2JqICBcCi0jICAgICAgICAgICAgICAgICAgZnBldGVzdG1vZHVsZS5vYmogXAotIyBVbml4LVNwZWNpZmljICAgIGdldHBhdGgub2JqICAgICAgIFwKLSMgICAgICAgICAgICAgICAgICBncnBtb2R1bGUub2JqICAgICBcCi0jICAgICAgICAgICAgICAgICAgbXB6bW9kdWxlLm9iaiAgICAgXAotIyAgICAgICAgICAgICAgICAgIG5pc21vZHVsZS5vYmogICAgIFwKLSMgICAgICAgICAgICAgICAgICBwYXJzZXJtb2R1bGUub2JqICBcCi0jICAgICAgICAgICAgICAgICAgcHdkbW9kdWxlLm9iaiAgICAgXAotIyAgICAgICAgICAgICAgICAgIHJlYWRsaW5lLm9iaiAgICAgIFwKLSMgICAgICAgICAgICAgICAgICByZXNvdXJjZS5vYmogICAgICBcCi0jICAgICAgICAgICAgICAgICAgc3lzbG9nbW9kdWxlLm9iaiAgXAotIyAgICAgICAgICAgICAgICAgIHRlcm1pb3Mub2JqICAgICAgIFwKLQotICAjIFVzZXIgSW50ZXJmYWNlOgotIyAgICAgICAgICAgICAgICAgIF90a2ludGVyLm9iaiAgICAgIFwgICAgIAotIyAgICAgICAgICAgICAgICAgIHN0ZHdpbm1vZHVsZS5vYmogIFwKLSMgICAgICAgICAgICAgICAgICBjdXJzZXNtb2R1bGUub2JqICBcCi0jICAgICAgICAgICAgICAgICAgdGNsTm90aWZ5Lm9iaiAgICAgXAotIyAgICAgICAgICAgICAgICAgIHRrYXBwaW5pdC5vYmogICAgIFwKLSAgIyBmbG1vZHVsZS5jICAgICAgLS0gV3JhcHBlciBvZiBGT1JNUyBMaWJyYXJ5IChTY3JlZW4gRm9ybXMpCi0KLSAgIyB6bGlibW9kdWxlLmMgICAgLS0gV3JhcHBlciBvZiBaTGliIENvbXByZXNzaW9uIEFQSSAoR1ppcCBGb3JtYXQpCi0gICMgcHVyZW1vZHVsZS5jICAgIC0tIFdyYXBwZXIgb2YgUHVyaWZ5IERlYnVnZ2luZyBBUEkgKFByb2JhYmx5IE5vbi1PUy8yKQotICAjIHh4bW9kdWxlLmMgICAgICAtLSBUZW1wbGF0ZSB0byBDcmVhdGUgWW91ciBPd24gTW9kdWxlCi0KLSMKLSMgU3RhbmRhbG9uZSBQYXJzZXIgR2VuZXJhdG9yIFByb2dyYW0gKFNoYXJlcyBTb21lIG9mIFB5dGhvbidzIE1vZHVsZXMpCi1QR0VOICAgICAgICAgICAgPSAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICBQR2VuTWFpbi5vYmogICAgICBcCi0gICAgICAgICAgICAgICAgICBQR2VuLm9iaiAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICBQcmludEdyYW1tYXIub2JqICBcCi0gICAgICAgICAgICAgICAgICBMaXN0Tm9kZS5vYmogICAgICBcCi0gICAgICAgICAgICAgICAgICBHcmFtbWFyLm9iaiAgICAgICBcCi0gICAgICAgICAgICAgICAgICBCaXRTZXQub2JqICAgICAgICBcCi0gICAgICAgICAgICAgICAgICBGaXJzdFNldHMub2JqICAgICBcCi0gICAgICAgICAgICAgICAgICBNZXRhR3JhbW1hci5vYmoKLQotIyBPbWl0dGVkIFBhcnNlciBFbGVtZW50cyAoYW5kIFJlYXNvbik6Ci0gICMgaW50cmNoZWNrLmMgICAgIC0tIE5vdCBSZWZlcmVuY2VkIGJ5IEFueW9uZSAoPykKLQotIyMjIyMjIyMjIyMjIyMjIyMjCi0jIE1hY3JvcyBhbmQgRmxhZ3MKLSMjIyMjIyMjIyMjIyMjIyMjIwotX0JBU0UJCT0gL1EgL1cyIC9JJChQUk9KSU5DTFVERSkKLQkJIyAvUSAgID0gT21pdCBJQk0gQ29weXJpZ2h0Ci0JCSMgL1cyICA9IFNob3cgV2FybmluZ3MvRXJyb3JzIE9ubHkKLQkJIyAvRmkgID0gQ3JlYXRlIFByZWNvbXBpbGVkIEhlYWRlcnMKLQkJIyAvU2kgID0gVXRpbGl6ZSBQcmVjb21waWxlZCBIZWFkZXJzCi0KLV9HRU4JCT0gL0c0IC9HbSAvR2QgL0IiL1NUQUNLOjM2MDAwMCIKLQkJIyAvRzQgID0gR2VuZXJhdGUgQ29kZSBmb3IgNDg2IChVc2UgMzg2IGZvciBEZWJ1Z2dlcikKLQkJIyAvR20gID0gVXNlIE11bHRpdGhyZWFkIFJ1bnRpbWUKLQkJIyAvR2QgID0gRHluYW1pY2FsbHkgTG9hZCBSdW50aW1lCi0JCSMgL0dzICA9IFJlbW92ZSBDb2RlIGZvciBTdGFjayBQcm9iZXMKLQkJIyAvR3ggID0gUmVtb3ZlIEMrKyBFeGNlcHRpb24tSGFuZGxpbmcgSW5mbwotCQkjIC9UZHAgPSBHZW5lcmF0ZSBDb2RlIGZvciBDKysgVGVtcGxhdGVzCi0JCSMgL1JuICA9IEdlbmVyYXRlIENvZGUgd2l0aG91dCBhIFJ1bnRpbWUKLQkJIyAvQiIvU1RBQ0s6biIgPSBTZXQgU3RhY2sgU2l6ZQotCi1fT1BUCQk9IC9PIC9HbAotCQkjIC9PICAgPSBFbmFibGUgU3BlZWQtT3B0aW1pemF0aW9ucwotCQkjIC9PbCAgPSBQYXNzIENvZGUgVGhydSBJbnRlcm1lZGlhdGUgTGlua2VyCi0JCSMgL0d1ICA9IEFkdmlzZSBMaW5rZXIgQWxsIEV4dCBEYXRhIGlzIElEJ2QKLQkJIyAvR2wgID0gSGF2ZSBMaW5rZXIgUmVtb3ZlIFVudXNlZCBGbnMKLQotX0RCRwkJPSAvREhBVkVfQ09ORklHX0ggL0RVU0VfU09DS0VUCi0JCSMgL1RpICA9IEVtYmVkIERlYnVnZ2VyL0FuYWx5emVyIFJlY3MKLQkJIyAvVG0gID0gRW5hYmxlIERlYnVnIE1lbW9yeSBGbnMKLQkJIyAvVHggID0gUmVxdWVzdCBGdWxsIER1bXAgVXBvbiBFeGNlcHRpb24KLQkJIyAvRERFQlVHID0gRW5hYmxlIEFwcC1JbnRlcm5hbCBEZWJ1Z2dpbmcgQ29kZQotICAgICAgICAgICAgICAgICMgL0RVU0VfU09DS0VUID0gCi0gICAgICAgICAgICAgICAgIyAvRFVTRV9ETF9FWFBPUlQgPSAKLQotX09VVAkJPSAKLQkJIyAvRmIgID0gRW1iZWQgQnJvd3NlciBSZWNzCi0JCSMgL0doICA9IEdlbmVyYXRlIENvZGUgZm9yIFByb2ZpbGVyIEhvb2tzCi0JCSMgL0ZsICA9IE91dHB1dCBDL0MrKyBMaXN0aW5nIEZpbGVzCi0gICAgICAgICAgICAgICAgIyAvTGYgID0gUHJvdmlkZSBGdWxsIChEZXRhaWxlZCkgTGlzdGluZyBGaWxlcwotCQkjIC9GbS4gPSBPdXRwdXQgTGlua2VyIE1hcCBGaWxlCi0JCSMgL0Z0LiA9IE91dHB1dCBDKysgVGVtcGxhdGUgUmVzb2x1dGlvbiBGaWxlcwotCi1fTUFQCQk9IC9GbU5vaXNlXCQoLlRBUkdFVCxCLD4ubWFwKQotCi1fRExMCQk9IC9HZS0KLV9FWEUJCT0gL0dlCi0JCSMgL0dlID0gQ3JlYXRlIGFuIEVYRSwgbm90IERMTAotCi1DRkxBR1MJCT0gJChfQkFTRSkgJChfR0VOKSAkKF9PUFQpICQoX0RCRykgJChfT1VUKSAkKF9FWEUpIC9TcwotQ1BQRkxBR1MJPSAkKF9CQVNFKSAkKF9HRU4pICQoX09QVCkgJChfREJHKSAkKF9PVVQpICQoX0VYRSkKLQotIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBQcmltYXJ5IFRhcmdldChzKQotIyMjIyMjIyMjIyMjIyMjIyMjIwotQWxsOiAgb2JqIG5vaXNlIFB5Q29yZS5saWIgUHl0aG9uMTUubGliIFB5dGhvbjE1LmRsbCBQeXRob24uZXhlIFBHZW4uZXhlCi0KLSMjIyMjIyMjIyMjIyMjCi0jCi0jIyMjIyMjIyMjIyMjIwotCi0jIE9iamVjdCBMaWJyYXJ5IG9mIEFsbCBFc3NlbnRpYWwgUHl0aG9uIFJvdXRpbmVzCi1QeUNvcmUubGliOiAkKE1PRFVMRVMpICQoT0JKRUNUUykgJChQQVJTRVIpICQoUFlUSE9OKSBDb25maWcub2JqCi0gICAgICAgICVkbyAiJS5saWIiCi0KLVB5dGhvbjE1LmRsbDogQ29tcGlsZS5vYmogUHlDb3JlLmxpYiBQeXRob24uZGVmCi0gICAgICAgICVkbyAiJS5kbGwiIENQUEZMQUdTKz0vQiIvTk9FIiBDUFBGTEFHUys9JChfTUFQKQotCi1Db21waWxlLm9iajogQ29tcGlsZS5jCi0gICAgICAgICVkbyAiLmMub2JqIiBDRkxBR1MrPSQoX0RMTCkKLQotIyBJbXBvcnQgTGlicmFyeSBmb3IgVXNpbmcgdGhlIFB5dGhvbjE1LmRsbAotUHl0aG9uMTUubGliOiBQeXRob24uZGVmCi0gICAgICAgICVkbyAiLmRlZi5saWIiCi0KLSMgU21hbGwgUHJvZ3JhbSB0byBTdGFydCBJbnRlcnByZXRlciBpbiBQeXRob24xNS5kbGwKLVB5dGhvbi5leGU6IFB5dGhvbi5vYmogUHl0aG9uMTUubGliCi0gICAgICAgICVkbyAiJS5leGUiIENQUEZMQUdTKz0kKF9NQVApCi0KLSNQeXRob24ub2JqOiBQeXRob24uYwotIyAgICAgICAgJWRvICIuYy5vYmoiIENGTEFHUys9JChfRVhFKQotCi1QR2VuLmV4ZTogJChQR0VOKSBQeUNvcmUubGliCi0gICAgICAgICVkbyAiJS5leGUiIENQUEZMQUdTKz0kKF9NQVApCi0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIE1pc2NlbGxhbmVvdXMgVGFyZ2V0cwotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIyBSZW1vdmUgSW50ZXJtZWRpYXRlIFRhcmdldHMgYnV0IExlYXZlIEV4ZWN1dGFibGUgQmluYXJpZXMKLWNsZWFuOgotCS0tIERlbCAvUSAkKC5QQVRILm9iailcKi5vYmoJCT5OVUwgMj4mMQotCS0tIERlbCAvUSAvWSBOb2lzZQkJCT5OVUwgMj4mMQotCS0tIERlbCAvUSAkKEVSUlMpCQkJPk5VTCAyPiYxCi0KLSMgUmVtb3ZlIEFsbCBUYXJnZXRzLCBJbmNsdWRpbmcgRmluYWwgQmluYXJpZXMKLWRpc3RjbGVhbjogY2xlYW4KLSAgICAgICAgLS0gRGVsIC9RIFB5Q29yZS5saWIgUHl0aG9uMTUubGliICAgICAgID5OVUwgMj4mMQotICAgICAgICAtLSBEZWwgL1EgUHl0aG9uMTUuZGxsIFB5dGhvbi5leGUgICAgICAgPk5VTCAyPiYxCi0KLXJlbGVhc2U6IFB5dGhvbi5leGUgUHl0aG9uMTUuZGxsIFB5dGhvbjE1LmxpYgotCS0tIEBFY2hvIFkgfCBjb3B5IC9VICQoLlNPVVJDRVMsTSIqLmV4ZSIpIEQ6XEVYRXMKLQktLSBARWNobyBZIHwgY29weSAvVSAkKC5TT1VSQ0VTLE0iKi5kbGwiKSBEOlxETExzCi0JLS0gQEVjaG8gWSB8IGNvcHkgL1UgJCguU09VUkNFUyxNIioubGliIikgRTpcVGF1XExpYgotCi10ZXN0OgotICAgICAgICBweXRob24gLi5cLi5cbGliXHRlc3RccmVncnRlc3QucHkKLQotIyBVcGRhdGUgRGVwZW5kZW5jaWVzIG9uIFRhcmdldHMgKFVzZXMgT3B1c01BS0UgQ29tbWVyY2lhbCBQcm9kdWN0KQotZGVwZW5kOgotCUQ6XE9wdXNNYWtlXG9zMm1rbWYgLWMgLXMKLQotIyMjIE9QVVMgTUtNRjogIERvIG5vdCByZW1vdmUgdGhpcyBsaW5lISAgR2VuZXJhdGVkIGRlcGVuZGVuY2llcyBmb2xsb3cuCi0KLV90a2ludGVyLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggXAotCSB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLWFycmF5bW9kdWxlLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggXAotCSB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLWF1ZGlvb3Aub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15bWF0aC5oIFwKLQkgbXlwcm90by5oIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIFwKLQkgcHlzdGF0ZS5oIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBcCi0JIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotYmluYXNjaWkub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBcCi0JIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCBcCi0JIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotY21hdGhtb2R1bGUub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15bWF0aC5oIFwKLQkgbXlwcm90by5oIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIFwKLQkgcHlzdGF0ZS5oIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBcCi0JIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotY3BpY2tsZS5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBcCi0JIGZ1bmNvYmplY3QuaCBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggXAotCSBsb25nb2JqZWN0LmggbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggXAotCSBteW1hdGguaCBteXByb3RvLmggb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggXAotCSBweXN0YXRlLmggcHl0aG9uLmggcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIFwKLQkgc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1jcnlwdG1vZHVsZS5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIFwKLQkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIFwKLQkgdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1jdXJzZXNtb2R1bGUub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggXAotCSBjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggXAotCSBmdW5jb2JqZWN0LmggaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIFwKLQkgbG9uZ29iamVjdC5oIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIFwKLQkgbXlwcm90by5oIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIFwKLQkgcHlzdGF0ZS5oIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBcCi0JIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotX2RibW1vZHVsZS5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIFwKLQkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIFwKLQkgdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1lcnJuby5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIFwKLQkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIFwKLQkgdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1lcnJub21vZHVsZS5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIFwKLQkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIFwKLQkgdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1mY250bG1vZHVsZS5vYmo6IGFic3RyYWN0LmggYzpcbXB0blxpbmNsdWRlXHN5c1xpb2N0bC5oIGNldmFsLmggXAotCSBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBkaWN0b2JqZWN0LmggXAotCSBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggaW1wb3J0LmggaW50b2JqZWN0LmggXAotCSBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBcCi0JIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggXAotCSBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0LmggXAotCSBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotZnBlY3RsbW9kdWxlLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIFwKLQkgY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIFwKLQkgZnVuY29iamVjdC5oIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBcCi0JIGxvbmdvYmplY3QuaCBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBcCi0JIG15cHJvdG8uaCBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBcCi0JIHB5c3RhdGUuaCBweXRob24uaCBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0LmggXAotCSBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLWZwZXRlc3Rtb2R1bGUub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggXAotCSBjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggXAotCSBmdW5jb2JqZWN0LmggaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIFwKLQkgbG9uZ29iamVjdC5oIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIFwKLQkgbXlwcm90by5oIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIFwKLQkgcHlzdGF0ZS5oIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBcCi0JIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotX2dkYm1tb2R1bGUub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBcCi0JIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCBcCi0JIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotZ2V0YnVpbGRpbmZvLm9iajogcHljb25maWcuaAotCi1nZXRwYXRoLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggb3NkZWZzLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggXAotCSBweXRob24uaCBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0LmggXAotCSBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLWdycG1vZHVsZS5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBncnAuaCBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIFwKLQkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIFwKLQkgdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1pbWFnZW9wLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggXAotCSB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLW1haW4ub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBcCi0JIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCBcCi0JIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotbWF0aG1vZHVsZS5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXltYXRoLmggXAotCSBteXByb3RvLmggb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggXAotCSBweXN0YXRlLmggcHl0aG9uLmggcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIFwKLQkgc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1tcHptb2R1bGUub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggXAotCSBjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggXAotCSBmdW5jb2JqZWN0LmggaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIFwKLQkgbG9uZ2ludHJlcHIuaCBsb25nb2JqZWN0LmggbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIFwKLQkgbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBcCi0JIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBcCi0JIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1uaXNtb2R1bGUub2JqOiBhYnN0cmFjdC5oIGM6XG1wdG5caW5jbHVkZVxzeXNcdGltZS5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBcCi0JIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIFwKLQkgZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggXAotCSBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBcCi0JIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggXAotCSBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0LmggXAotCSBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotb3BlcmF0b3Iub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBcCi0JIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCBcCi0JIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotcGFyc2VybW9kdWxlLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBpbGUuaCBcCi0JIGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBcCi0JIGZ1bmNvYmplY3QuaCBncmFtaW5pdC5oIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIFwKLQkgbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggXAotCSBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBub2RlLmggb2JqZWN0Lmggb2JqaW1wbC5oIFwKLQkgcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggcHl0aG9ucnVuLmggXAotCSByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggdG9rZW4uaCBcCi0JIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotcG9zaXgub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG15dGltZS5oIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBcCi0JIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBcCi0JIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotcG9zaXhtb2R1bGUub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG15dGltZS5oIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBcCi0JIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBcCi0JIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotcHdkbW9kdWxlLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcHdkLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggXAotCSBweXRob24uaCBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0LmggXAotCSBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLXJlYWRsaW5lLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggXAotCSB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLXJlc291cmNlLm9iajogYWJzdHJhY3QuaCBjOlxtcHRuXGluY2x1ZGVcc3lzXHRpbWUuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggXAotCSBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBcCi0JIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIFwKLQkgbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggXAotCSBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIFwKLQkgcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIFwKLQkgc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLXNlbGVjdG1vZHVsZS5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBcCi0JIGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBcCi0JIGZ1bmNvYmplY3QuaCBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggXAotCSBsb25nb2JqZWN0LmggbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggXAotCSBteXByb3RvLmggbXlzZWxlY3QuaCBteXRpbWUuaCBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIFwKLQkgcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIFwKLQkgc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLXNpZ25hbG1vZHVsZS5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBcCi0JIGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBcCi0JIGZ1bmNvYmplY3QuaCBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggXAotCSBsb25nb2JqZWN0LmggbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggXAotCSBteXByb3RvLmggb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggXAotCSBweXN0YXRlLmggcHl0aG9uLmggcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIFwKLQkgc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1zb2NrZXRtb2R1bGUub2JqOiBhYnN0cmFjdC5oIGM6XG1wdG5caW5jbHVkZVxuZXRpbmV0XGluLmggXAotCSBjOlxtcHRuXGluY2x1ZGVcc3lzXHNvY2tldC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggXAotCSBjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggXAotCSBmdW5jb2JqZWN0LmggaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIFwKLQkgbG9uZ29iamVjdC5oIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIFwKLQkgbXlwcm90by5oIG15dGltZS5oIG5ldGRiLmggb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIFwKLQkgcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIFwKLQkgc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1zdHJ1Y3Rtb2R1bGUub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggXAotCSBjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggXAotCSBmdW5jb2JqZWN0LmggaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIFwKLQkgbG9uZ29iamVjdC5oIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIFwKLQkgbXltYXRoLmggbXlwcm90by5oIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIFwKLQkgcHlzdGF0ZS5oIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBcCi0JIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotc3lzbG9nbW9kdWxlLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIFwKLQkgY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIFwKLQkgZnVuY29iamVjdC5oIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBcCi0JIGxvbmdvYmplY3QuaCBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBcCi0JIG15cHJvdG8uaCBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBcCi0JIHB5c3RhdGUuaCBweXRob24uaCBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0LmggXAotCSBzdHJpbmdvYmplY3QuaCBzeXNsb2cuaCBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLXRlcm1pb3Mub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBcCi0JIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCBcCi0JIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotX3RocmVhZG1vZHVsZS5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBcCi0JIGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBcCi0JIGZ1bmNvYmplY3QuaCBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggXAotCSBsb25nb2JqZWN0LmggbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggXAotCSBteXByb3RvLmggb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggXAotCSBweXN0YXRlLmggcHl0aG9uLmggcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIFwKLQkgc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggdGhyZWFkLmggdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi10aW1lbW9kdWxlLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBteXRpbWUuaCBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggXAotCSBweXRob24uaCBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0LmggXAotCSBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLXh4bW9kdWxlLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggXAotCSB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLXpsaWJtb2R1bGUub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBcCi0JIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCBcCi0JIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotYWJzdHJhY3Qub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBcCi0JIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCBcCi0JIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotY2xhc3NvYmplY3Qub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBcCi0JIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBcCi0JIHN0cnVjdG1lbWJlci5oIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotY29iamVjdC5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIFwKLQkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIFwKLQkgdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1jb21wbGV4b2JqZWN0Lm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIFwKLQkgY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIFwKLQkgZnVuY29iamVjdC5oIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBcCi0JIGxvbmdvYmplY3QuaCBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBcCi0JIG15bWF0aC5oIG15cHJvdG8uaCBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBcCi0JIHB5c3RhdGUuaCBweXRob24uaCBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0LmggXAotCSBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLWRpY3RvYmplY3Qub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBcCi0JIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCBcCi0JIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotZmlsZW9iamVjdC5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIFwKLQkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIFwKLQkgc3RydWN0bWVtYmVyLmggc3lzbW9kdWxlLmggdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1mbG9hdG9iamVjdC5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXltYXRoLmggXAotCSBteXByb3RvLmggb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggXAotCSBweXN0YXRlLmggcHl0aG9uLmggcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIFwKLQkgc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1mcmFtZW9iamVjdC5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21waWxlLmggXAotCSBjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggXAotCSBmcmFtZW9iamVjdC5oIGZ1bmNvYmplY3QuaCBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBcCi0JIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIFwKLQkgbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggb2JqZWN0Lmggb2JqaW1wbC5oIG9wY29kZS5oIFwKLQkgcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggcHl0aG9ucnVuLmggXAotCSByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3RydWN0bWVtYmVyLmggXAotCSBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLWZ1bmNvYmplY3Qub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGlsZS5oIFwKLQkgY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIFwKLQkgZnVuY29iamVjdC5oIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBcCi0JIGxvbmdvYmplY3QuaCBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBcCi0JIG15cHJvdG8uaCBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBcCi0JIHB5c3RhdGUuaCBweXRob24uaCBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0LmggXAotCSBzdHJpbmdvYmplY3QuaCBzdHJ1Y3RtZW1iZXIuaCBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCBcCi0JIHR1cGxlb2JqZWN0LmgKLQotbGlzdG9iamVjdC5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIFwKLQkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIFwKLQkgdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1sb25nb2JqZWN0Lm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIFwKLQkgY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIFwKLQkgZnVuY29iamVjdC5oIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBcCi0JIGxvbmdpbnRyZXByLmggbG9uZ29iamVjdC5oIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBcCi0JIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXltYXRoLmggbXlwcm90by5oIG9iamVjdC5oIG9iamltcGwuaCBcCi0JIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIFwKLQkgcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIFwKLQkgdHVwbGVvYmplY3QuaAotCi1tZXRob2RvYmplY3Qub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggXAotCSBjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggXAotCSBmdW5jb2JqZWN0LmggaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIFwKLQkgbG9uZ29iamVjdC5oIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIFwKLQkgbXlwcm90by5oIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIFwKLQkgcHlzdGF0ZS5oIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBcCi0JIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIHRva2VuLmggdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1tb2R1bGVvYmplY3Qub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggXAotCSBjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggXAotCSBmdW5jb2JqZWN0LmggaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIFwKLQkgbG9uZ29iamVjdC5oIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIFwKLQkgbXlwcm90by5oIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIFwKLQkgcHlzdGF0ZS5oIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBcCi0JIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotb2JqZWN0Lm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggXAotCSB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLXJhbmdlb2JqZWN0Lm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggXAotCSB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLXNsaWNlb2JqZWN0Lm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggXAotCSB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLXN0cmluZ29iamVjdC5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBcCi0JIGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBcCi0JIGZ1bmNvYmplY3QuaCBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggXAotCSBsb25nb2JqZWN0LmggbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggXAotCSBteW1hdGguaCBteXByb3RvLmggb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggXAotCSBweXN0YXRlLmggcHl0aG9uLmggcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIFwKLQkgc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi10dXBsZW9iamVjdC5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIFwKLQkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIFwKLQkgdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi10eXBlb2JqZWN0Lm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggXAotCSB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLXh4b2JqZWN0Lm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggXAotCSB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLWFjY2VsZXIub2JqOiBiaXRzZXQuaCBweWNvbmZpZy5oIGdyYW1tYXIuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBub2RlLmggXAotCSBwYXJzZXIuaCBwZ2VuaGVhZGVycy5oIHB5ZGVidWcuaCB0b2tlbi5oCi0KLWJpdHNldC5vYmo6IGJpdHNldC5oIHB5Y29uZmlnLmggbXltYWxsb2MuaCBteXByb3RvLmggcGdlbmhlYWRlcnMuaCBweWRlYnVnLmgKLQotZmlyc3RzZXRzLm9iajogYml0c2V0LmggcHljb25maWcuaCBncmFtbWFyLmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBwZ2VuaGVhZGVycy5oIHB5ZGVidWcuaCB0b2tlbi5oCi0KLWdyYW1tYXIub2JqOiBiaXRzZXQuaCBweWNvbmZpZy5oIGdyYW1tYXIuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIHBnZW5oZWFkZXJzLmggcHlkZWJ1Zy5oIHRva2VuLmgKLQotZ3JhbW1hcjEub2JqOiBiaXRzZXQuaCBweWNvbmZpZy5oIGdyYW1tYXIuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIHBnZW5oZWFkZXJzLmggcHlkZWJ1Zy5oIHRva2VuLmgKLQotaW50cmNoZWNrLm9iajogcHljb25maWcuaCBpbnRyY2hlY2suaCBteW1hbGxvYy5oIG15cHJvdG8uaAotCi1saXN0bm9kZS5vYmo6IHB5Y29uZmlnLmggbXltYWxsb2MuaCBteXByb3RvLmggbm9kZS5oIHBnZW5oZWFkZXJzLmggcHlkZWJ1Zy5oIFwKLQkgdG9rZW4uaAotCi1tZXRhZ3JhbW1hci5vYmo6IGJpdHNldC5oIHB5Y29uZmlnLmggZ3JhbW1hci5oIG1ldGFncmFtbWFyLmggbXltYWxsb2MuaCBcCi0JIG15cHJvdG8uaCBwZ2VuLmggcGdlbmhlYWRlcnMuaCBweWRlYnVnLmgKLQotbXlyZWFkbGluZS5vYmo6IHB5Y29uZmlnLmggaW50cmNoZWNrLmggbXltYWxsb2MuaCBteXByb3RvLmgKLQotbm9kZS5vYmo6IHB5Y29uZmlnLmggbXltYWxsb2MuaCBteXByb3RvLmggbm9kZS5oIHBnZW5oZWFkZXJzLmggcHlkZWJ1Zy5oCi0KLXBhcnNlci5vYmo6IGJpdHNldC5oIHB5Y29uZmlnLmggZXJyY29kZS5oIGdyYW1tYXIuaCBteW1hbGxvYy5oIFwKLQkgbXlwcm90by5oIG5vZGUuaCBwYXJzZXIuaCBwZ2VuaGVhZGVycy5oIHB5ZGVidWcuaCB0b2tlbi5oCi0KLXBhcnNldG9rLm9iajogYml0c2V0LmggcHljb25maWcuaCBlcnJjb2RlLmggZ3JhbW1hci5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgbm9kZS5oIHBhcnNlci5oIHBhcnNldG9rLmggcGdlbmhlYWRlcnMuaCBweWRlYnVnLmggdG9rZW4uaCBcCi0JIHRva2VuaXplci5oCi0KLXBnZW4ub2JqOiBiaXRzZXQuaCBweWNvbmZpZy5oIGdyYW1tYXIuaCBtZXRhZ3JhbW1hci5oIG15bWFsbG9jLmggXAotCSBteXByb3RvLmggbm9kZS5oIHBnZW4uaCBwZ2VuaGVhZGVycy5oIHB5ZGVidWcuaCB0b2tlbi5oCi0KLXBnZW5tYWluLm9iajogYml0c2V0LmggcHljb25maWcuaCBncmFtbWFyLmggbXltYWxsb2MuaCBteXByb3RvLmggbm9kZS5oIFwKLQkgcGFyc2V0b2suaCBwZ2VuLmggcGdlbmhlYWRlcnMuaCBweWRlYnVnLmgKLQotcHJpbnRncmFtbWFyLm9iajogYml0c2V0LmggcHljb25maWcuaCBncmFtbWFyLmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBwZ2VuaGVhZGVycy5oIHB5ZGVidWcuaAotCi10b2tlbml6ZXIub2JqOiBweWNvbmZpZy5oIGVycmNvZGUuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBwZ2VuaGVhZGVycy5oIFwKLQkgcHlkZWJ1Zy5oIHRva2VuLmggdG9rZW5pemVyLmgKLQotYXRvZi5vYmo6IHB5Y29uZmlnLmgKLQotYmx0aW5tb2R1bGUub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGlsZS5oIFwKLQkgY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGV2YWwuaCBmaWxlb2JqZWN0LmggXAotCSBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBcCi0JIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIFwKLQkgbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteW1hdGguaCBteXByb3RvLmggbm9kZS5oIG9iamVjdC5oIFwKLQkgb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIFwKLQkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIFwKLQkgdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1jZXZhbC5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21waWxlLmggXAotCSBjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBkaWN0b2JqZWN0LmggZXZhbC5oIGZpbGVvYmplY3QuaCBcCi0JIGZsb2F0b2JqZWN0LmggZnJhbWVvYmplY3QuaCBmdW5jb2JqZWN0LmggaW1wb3J0LmggaW50b2JqZWN0LmggXAotCSBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBcCi0JIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIG9iamVjdC5oIG9iamltcGwuaCBvcGNvZGUuaCBcCi0JIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIFwKLQkgcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIFwKLQkgdHVwbGVvYmplY3QuaAotCi1jb21waWxlLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBpbGUuaCBcCi0JIGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBcCi0JIGZ1bmNvYmplY3QuaCBncmFtaW5pdC5oIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIFwKLQkgbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggXAotCSBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBub2RlLmggb2JqZWN0Lmggb2JqaW1wbC5oIFwKLQkgb3Bjb2RlLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0LmggXAotCSBzdHJ1Y3RtZW1iZXIuaCBzeXNtb2R1bGUuaCB0b2tlbi5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotZXJyb3JzLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggXAotCSB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLWZtb2Qub2JqOiBweWNvbmZpZy5oIG15bWF0aC5oCi0KLWZyb3plbi5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIFwKLQkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIFwKLQkgdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1mcm96ZW5tYWluLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggXAotCSB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLWdldGFyZ3Mub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBcCi0JIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCBcCi0JIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotZ2V0Y29tcGlsZXIub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBcCi0JIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCBcCi0JIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotZ2V0Y29weXJpZ2h0Lm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIFwKLQkgY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIFwKLQkgZnVuY29iamVjdC5oIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBcCi0JIGxvbmdvYmplY3QuaCBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBcCi0JIG15cHJvdG8uaCBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBcCi0JIHB5c3RhdGUuaCBweXRob24uaCBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0LmggXAotCSBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLWdldHBsYXRmb3JtLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggXAotCSB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLWdldHZlcnNpb24ub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG9iamVjdC5oIG9iamltcGwuaCBwYXRjaGxldmVsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBcCi0JIHB5c3RhdGUuaCBweXRob24uaCBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0LmggXAotCSBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLWdyYW1pbml0Lm9iajogYml0c2V0LmggcHljb25maWcuaCBncmFtbWFyLmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBwZ2VuaGVhZGVycy5oIHB5ZGVidWcuaAotCi1oeXBvdC5vYmo6IHB5Y29uZmlnLmggbXltYXRoLmggbXlwcm90by5oCi0KLWltcG9ydC5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21waWxlLmggXAotCSBjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBkaWN0b2JqZWN0LmggZXJyY29kZS5oIGV2YWwuaCBcCi0JIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBpbXBvcnQuaCBpbXBvcnRkbC5oIFwKLQkgaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBtYXJzaGFsLmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBub2RlLmggb2JqZWN0Lmggb2JqaW1wbC5oIG9zZGVmcy5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggXAotCSBweXN0YXRlLmggcHl0aG9uLmggcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIFwKLQkgc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggdG9rZW4uaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLWltcG9ydGRsLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGltcG9ydGRsLmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIFwKLQkgbG9uZ29iamVjdC5oIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIFwKLQkgbXlwcm90by5oIG9iamVjdC5oIG9iamltcGwuaCBvc2RlZnMuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIFwKLQkgcHlzdGF0ZS5oIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBcCi0JIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotbWFyc2hhbC5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21waWxlLmggXAotCSBjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggXAotCSBmdW5jb2JqZWN0LmggaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIFwKLQkgbG9uZ2ludHJlcHIuaCBsb25nb2JqZWN0LmggbWFyc2hhbC5oIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBcCi0JIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggXAotCSBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0LmggXAotCSBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotbW9kc3VwcG9ydC5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIFwKLQkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIFwKLQkgdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1teXN0cnRvdWwub2JqOiBweWNvbmZpZy5oCi0KLXB5ZnBlLm9iajogcHljb25maWcuaCBweWZwZS5oCi0KLXB5c3RhdGUub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBcCi0JIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCBcCi0JIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotcHl0aG9ucnVuLm9iajogYWJzdHJhY3QuaCBiaXRzZXQuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIFwKLQkgY29tcGlsZS5oIGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBlcnJjb2RlLmggZXZhbC5oIFwKLQkgZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIGdyYW1tYXIuaCBpbXBvcnQuaCBcCi0JIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggbWFyc2hhbC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgbm9kZS5oIG9iamVjdC5oIG9iamltcGwuaCBwYXJzZXRvay5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggXAotCSBweXN0YXRlLmggcHl0aG9uLmggcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIFwKLQkgc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1zaWdjaGVjay5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIFwKLQkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIFwKLQkgdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1zdHJkdXAub2JqOiBweWNvbmZpZy5oIG15bWFsbG9jLmggbXlwcm90by5oCi0KLXN0cnRvZC5vYmo6IHB5Y29uZmlnLmgKLQotc3RydWN0bWVtYmVyLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIFwKLQkgY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIFwKLQkgZnVuY29iamVjdC5oIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBcCi0JIGxvbmdvYmplY3QuaCBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBcCi0JIG15cHJvdG8uaCBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBcCi0JIHB5c3RhdGUuaCBweXRob24uaCBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0LmggXAotCSBzdHJpbmdvYmplY3QuaCBzdHJ1Y3RtZW1iZXIuaCBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCBcCi0JIHR1cGxlb2JqZWN0LmgKLQotc3lzbW9kdWxlLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggb3NkZWZzLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggXAotCSBweXRob24uaCBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0LmggXAotCSBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLXRocmVhZC5vYmo6IHB5Y29uZmlnLmggdGhyZWFkLmgKLQotdHJhY2ViYWNrLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBpbGUuaCBcCi0JIGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBcCi0JIGZyYW1lb2JqZWN0LmggZnVuY29iamVjdC5oIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIFwKLQkgbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggXAotCSBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBvYmplY3QuaCBvYmppbXBsLmggb3NkZWZzLmggXAotCSBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBweXRob25ydW4uaCBcCi0JIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzdHJ1Y3RtZW1iZXIuaCBcCi0JIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKZGlmZiAtLWdpdCBhL1BDL29zMnZhY3BwL3B5Y29uZmlnLmggYi9QQy9vczJ2YWNwcC9weWNvbmZpZy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNzY1YjQ0Li4wMDAwMDAwCi0tLSBhL1BDL29zMnZhY3BwL3B5Y29uZmlnLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMTIgKzAsMCBAQAotI2lmbmRlZiBQeV9DT05GSUdfSAotI2RlZmluZSBQeV9DT05GSUdfSAotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogcHljb25maWcuaC4gIE5PVCBHZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBjb25maWd1cmUuCi0gKgotICogVGhpcyBpcyBhIG1hbnVhbGx5IG1haW50YWluZWQgdmVyc2lvbiB1c2VkIGZvciB0aGUgSUJNIFZpc3VhbEFnZQotICogQy9DKysgY29tcGlsZXIgb24gdGhlIE9TLzIgcGxhdGZvcm0uICBJdCBpcyBhIHN0YW5kYXJkIHBhcnQgb2YKLSAqIHRoZSBQeXRob24gZGlzdHJpYnV0aW9uLgotICoKLSAqIEZJTEVTWVNURU0gREVGSU5FUzoKLSAqIFRoZSBjb2RlIHNwZWNpZmljIHRvIGEgcGFydGljdWxhciB3YXkgb2YgbmFtaW5nIGZpbGVzIGFuZAotICogZGlyZWN0b3J5IHBhdGhzIHNob3VsZCBiZSB3cmFwcGVkIGFyb3VuZCBvbmUgb2YgdGhlIGZvbGxvd2luZwotICogI2RlZmluZXM6Ci0gKgotICogICAgIERPU0ZJTEVTWVMgICBQQ0RPUy1TdHlsZSAoZm9yIFBDRE9TLCBXaW5kb3dzIGFuZCBPUy8yKQotICogICAgIE1BQ0ZJTEVTWVMgICBNYWNpbnRvc2gtU3R5bGUKLSAqICAgICBVTklYRklMRVNZUyAgVW5peC1TdHlsZQotICogICAgIEFNSUdBRklMRVNZUyBBbWlnYURPUy1TdHlsZQotICogCi0gKiBCZWNhdXNlIG9mIHRoZSBkaWZmZXJlbnQgY29tcGlsZXJzIGFuZCBvcGVyYXRpbmcgc3lzdGVtcyBpbgotICogdXNlIG9uIHRoZSBJbnRlbCBwbGF0Zm9ybSwgbmVpdGhlciB0aGUgY29tcGlsZXIgbmFtZSBub3IKLSAqIHRoZSBvcGVyYXRpbmcgc3lzdGVtIG5hbWUgaXMgc3VmZmljaWVudC4KLSAqCi0gKiBPUy8yIERFRklORVM6Ci0gKiBUaGUgY29kZSBzcGVjaWZpYyB0byBPUy8yJ3MgUHJvZ3JhbSBBUEkgc2hvdWxkIGJlIHdyYXBwZWQgYXJvdW5kCi0gKgotICogX19UT1NfT1MyX18gICBUYXJnZXQgT3BlcmF0aW5nIFN5c3RlbSwgT1MvMgotICoKLSAqIEFueSBjb2RlIHNwZWNpZmljIHRvIHRoZSBjb21waWxlciBpdHNlbGYgc2hvdWxkIGJlIHdyYXBwZWQgd2l0aAotICoKLSAqIF9fSUJNQ19fICAgICAgSUJNIEMgQ29tcGlsZXIKLSAqIF9fSUJNQ1BQX18gICAgSUJNIEMrKyBDb21waWxlcgotICoKLSAqIE5vdGUgdGhhdCBzaW5jZSB0aGUgVmlzdWFsQWdlIEMvQysrIGNvbXBpbGVyIGlzIGFsc28gYXZhaWxhYmxlCi0gKiBmb3IgdGhlIFdpbmRvd3MgcGxhdGZvcm0sIGl0IG1heSBiZSBuZWNlc3NhcnkgdG8gdXNlIGJvdGggYQotICogX19UT1NfT1MyX18gYW5kIGEgX19JQk1DX18gdG8gc2VsZWN0IGEgdmVyeSBzcGVjaWZpYyBlbnZpcm9ubWVudC4KLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoKLSAqIFNvbWUgc3lzdGVtcyByZXF1aXJlIHNwZWNpYWwgZGVjbGFyYXRpb25zIGZvciBkYXRhIGl0ZW1zIGltcG9ydGVkCi0gKiBvciBleHBvcnRlZCBmcm9tIGR5bmFtaWMgbGluayBsaWJyYXJpZXMuICBOb3RlIHRoYXQgdGhlIGRlZmluaXRpb24KLSAqIG9mIERMX0lNUE9SVCBjb3ZlcnMgYm90aCBjYXNlcy4gIERlZmluZSBVU0VfRExfSU1QT1JUIGZvciB0aGUgY2xpZW50Ci0gKiBvZiBhIERMTC4gIERlZmluZSBVU0VfRExfRVhQT1JUIHdoZW4gbWFraW5nIGEgRExMLgotICovCi0KLSNpbmNsdWRlIDxpby5oPgotCi0vKiBDb25maWd1cmF0aW9uIE9wdGlvbnMgZm9yIEZpbmRpbmcgTW9kdWxlcyAqLwotI2RlZmluZSBQUkVGSVggICAgICAgICAgICAgICAgICIiCi0jZGVmaW5lIEVYRUNfUFJFRklYICAgICAgICAgICAgIiIKLQotLyogUHJvdmlkZSBhIGRlZmF1bHQgbGlicmFyeSBzbyB3cml0ZXJzIG9mIGV4dGVuc2lvbiBtb2R1bGVzCi0gKiB3b24ndCBoYXZlIHRvIGV4cGxpY2l0bHkgc3BlY2lmeSBpdCBhbnltb3JlCi0gKi8KLSNwcmFnbWEgbGlicmFyeSgiUHl0aG9uMjQubGliIikKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgIDMyLUJpdCBJQk0gVmlzdWFsQWdlIEMvQysrIHYzLjAgZm9yIE9TLzIgICAgICovCi0vKiAgKENvbnZlcnQgQ29tcGlsZXIgRmxhZ3MgaW50byBVc2VmdWwgU3dpdGNoZXMpICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNkZWZpbmUgUExBVEZPUk0gICAgIm9zMiIKLSNkZWZpbmUgQ09NUElMRVIgICAgIltWaXN1YWxBZ2UgQy9DKytdIgotI2RlZmluZSBQWU9TX09TMiAgICAvKiBEZWZpbmUgSW5kaWNhdG9yIG9mIE9wZXJhdGluZyBTeXN0ZW0gKi8KLSNkZWZpbmUgUFlDQ19WQUNQUCAgLyogRGVmaW5lIEluZGljYXRvciBvZiBDIENvbXBpbGVyICovCi0KLSAgLyogUGxhdGZvcm0gRmlsZXN5c3RlbSAqLwotI2RlZmluZSBQWVRIT05QQVRIICAiLjsuXFxsaWI7LlxcbGliXFxwbGF0LXdpbiIKLSNkZWZpbmUgRE9TRklMRVNZUyAgLyogT1MvMiBVc2VzIHRoZSBET1MgRmlsZSBOYW1pbmcgQ29udmVudGlvbnMgKi8KLS8qICNkZWZpbmUgSU1QT1JUXzh4M19OQU1FUyAobGV0J3MgbW92ZSB1cCB0byBsb25nIGZpbGVuYW1lcykgKi8KLQotICAvKiBQbGF0Zm9ybSBDUFUtTW9kZSBEZXBlbmRlbmNpZXMgKi8KLSNkZWZpbmUgV09SRF9CSVQgICAgICAgICAgICAgICAgMzIgLyogT1MvMiBpcyBhIDMyLUJpdCBPcGVyYXRpbmcgU3lzdGVtICovCi0jZGVmaW5lIExPTkdfQklUICAgICAgICAgICAgICAgIDMyCi0jZGVmaW5lIFNJWkVPRl9JTlQgICAgICAgICAgICAgICA0IC8qIENvdW50IG9mIEJ5dGVzIGluIGFuIChpbnQpICAgICAgICAgICAgKi8KLSNkZWZpbmUgU0laRU9GX0xPTkcgICAgICAgICAgICAgIDQgLyogQ291bnQgb2YgQnl0ZXMgaW4gYSAobG9uZykgICAgICAgICAgICAqLwotI2RlZmluZSBTSVpFT0ZfVk9JRF9QICAgICAgICAgICAgNCAvKiBDb3VudCBvZiBCeXRlcyBpbiBhICh2b2lkICopICAgICAgICAgICovCi0vKiAjZGVmaW5lIEhBVkVfTE9OR19MT05HICAgICAxICovIC8qIFZBQysrIGRvZXMgbm90IHN1cHBvcnQgKGxvbmcgbG9uZykgICAgKi8KLS8qICNkZWZpbmUgU0laRU9GX0xPTkdfTE9ORyAgIDggKi8gLyogQ291bnQgb2YgQnl0ZXMgaW4gYSAobG9uZyBsb25nKSAgICAgICAqLwotCi0vKiB1bmljb2RlIGRlZmluaW5lcyAqLwotI2RlZmluZSBQWV9VTklDT0RFX1RZUEUgICAgd2NoYXJfdAotI2RlZmluZSBQeV9VTklDT0RFX1NJWkUgU0laRU9GX1NIT1JUCi0KLS8qIGR5bmFtaWMgbG9hZGluZyAqLwotI2RlZmluZSBIQVZFX0RZTkFNSUNfTE9BRElORyAxCi0KLS8qIERlZmluZSBpZiB0eXBlIGNoYXIgaXMgdW5zaWduZWQgYW5kIHlvdSBhcmUgbm90IHVzaW5nIGdjYy4gICovCi0jaWZuZGVmIF9fQ0hBUl9VTlNJR05FRF9fCi0vKiAjdW5kZWYgX19DSEFSX1VOU0lHTkVEX18gKi8KLSNlbmRpZgotCi10eXBlZGVmIGludCBtb2RlX3Q7Ci10eXBlZGVmIGludCB1aWRfdDsKLXR5cGVkZWYgaW50IGdpZF90OwotdHlwZWRlZiBpbnQgcGlkX3Q7Ci0KLSNpZiBkZWZpbmVkKF9fTVVMVElfXykgICAgIC8qIElmIENvbXBpbGVyIC9HdCsgTXVsdGl0aHJlYWQgT3B0aW9uIEVuYWJsZWQsICAqLwotICAjZGVmaW5lIFdJVEhfVEhSRUFEICAgICAgICAgICAgMSAvKiBFbmFibGUgVGhyZWFkaW5nIFRocm91Z2hvdXQgUHl0aG9uICAgICovCi0gICNkZWZpbmUgT1MyX1RIUkVBRFMgICAgICAgICAgICAxIC8qIEFuZCBVc2UgdGhlIE9TLzIgRmxhdm9yIG9mIFRocmVhZHMgICAgKi8KLS8qICNkZWZpbmUgX1JFRU5UUkFOVCAxICovIC8qIFVzZSB0aHJlYWQtc2FmZSBlcnJubywgaF9lcnJubywgYW5kIG90aGVyIGZucyAqLwotI2VuZGlmCi0KLSAgLyogQ29tcGlsZXIgUnVudGltZSBMaWJyYXJ5IENhcGFiaWxpdGllcyAqLwotI2luY2x1ZGUgPGN0eXBlLmg+Ci0jaW5jbHVkZSA8ZGlyZWN0Lmg+Ci0vKiAjdW5kZWYgQkFEX1NUQVRJQ19GT1JXQVJEICovIC8qIGlmIGNvbXBpbGVyIGJvdGNoZXMgc3RhdGljIGZ3ZCBkZWNscyAqLwotCi0jZGVmaW5lIFNURENfSEVBREVSUyAgICAgICAgICAgICAxIC8qIFZBQysrIGlzIGFuIEFOU0kgQyBDb21waWxlciAgICAgICAgICAgKi8KLSNkZWZpbmUgSEFWRV9IWVBPVCAgICAgICAgICAgICAgIDEgLyogaHlwb3QoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBIQVZFX1BVVEVOViAgICAgICAgICAgICAgMSAvKiBwdXRlbnYoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAjZGVmaW5lIFZBX0xJU1RfSVNfQVJSQVkgICAxICovIC8qIGlmIHZhX2xpc3QgaXMgYW4gYXJyYXkgb2Ygc29tZSBraW5kICAgKi8KLS8qICNkZWZpbmUgSEFWRV9DT05JT19IICAgICAgIDEgKi8gLyogI2luY2x1ZGUgPGNvbmlvLmg+ICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBIQVZFX0VSUk5PX0ggICAgICAgICAgICAgMSAvKiAjaW5jbHVkZSA8ZXJybm8uaD4gICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEhBVkVfU1lTX1NUQVRfSCAgICAgICAgICAxIC8qICNpbmNsdWRlIDxzeXMvc3RhdC5oPiAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgSEFWRV9TWVNfVFlQRVNfSCAgICAgICAgIDEgLyogI2luY2x1ZGUgPHN5cy90eXBlcy5oPiAgICAgICAgICAgICAgICAqLwotCi0gIC8qIFZhcmlhYmxlLUFyZ3VtZW50cy9Qcm90b3R5cGVzICovCi0jZGVmaW5lIEhBVkVfUFJPVE9UWVBFUyAgICAgICAgICAxIC8qIFZBQysrIHN1cHBvcnRzIEMgRnVuY3Rpb24gUHJvdG90eXBlcyAgKi8KLSNkZWZpbmUgSEFWRV9TVERBUkdfUFJPVE9UWVBFUyAgIDEgLyogT3VyIDxzdGRhcmcuaD4gaGFzIHByb3RvdHlwZXMgICAgICAgICAqLwotCi0gIC8qIFN0cmluZy9NZW1vcnkvTG9jYWxlIE9wZXJhdGlvbnMgKi8KLSNkZWZpbmUgSEFWRV9NRU1NT1ZFICAgICAgICAgICAgIDEgLyogbWVtbW92ZSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBIQVZFX1NUUkVSUk9SICAgICAgICAgICAgMSAvKiBzdHJlcnJvcigpICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEhBVkVfU0VUTE9DQUxFICAgICAgICAgICAxIC8qIHNldGxvY2FsZSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgTUFMTE9DX1pFUk9fUkVUVVJOU19OVUxMIDEgLyogT3VyIG1hbGxvYygwKSByZXR1cm5zIGEgTlVMTCBwdHIgICAgICAqLwotCi0gIC8qIFNpZ25hbCBIYW5kbGluZyAqLwotI2RlZmluZSBIQVZFX1NJR05BTF9IICAgICAgICAgICAgMSAvKiBzaWduYWwuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIFJFVFNJR1RZUEUgICAgICAgICAgICB2b2lkIC8qIFJldHVybiB0eXBlIG9mIGhhbmRsZXJzIChpbnQgb3Igdm9pZCkgKi8KLS8qICN1bmRlZiBXQU5UX1NJR0ZQRV9IQU5ETEVSICAgKi8gLyogSGFuZGxlIFNJR0ZQRSAoc2VlIEluY2x1ZGUvcHlmcGUuaCkgICAqLwotLyogI2RlZmluZSBIQVZFX0FMQVJNICAgICAgICAgMSAqLyAvKiBhbGFybSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAjZGVmaW5lIEhBVkVfU0lHSU5URVJSVVBUICAxICovIC8qIHNpZ2ludGVycnVwdCgpICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICNkZWZpbmUgSEFWRV9TSUdSRUxTRSAgICAgIDEgKi8gLyogc2lncmVsc2UoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBET05UX0hBVkVfU0lHX0FMQVJNICAgICAgMQotI2RlZmluZSBET05UX0hBVkVfU0lHX1BBVVNFICAgICAgMQotCi0gIC8qIENsb2NrL1RpbWUgU3VwcG9ydCAqLwotI2RlZmluZSBIQVZFX0ZUSU1FICAgICAgICAgICAgICAgMSAvKiBXZSBoYXZlIGZ0aW1lKCkgaW4gPHN5cy90aW1lYi5oPiAgICAgICovCi0jZGVmaW5lIEhBVkVfQ0xPQ0sgICAgICAgICAgICAgICAxIC8qIGNsb2NrKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgSEFWRV9TVFJGVElNRSAgICAgICAgICAgIDEgLyogc3RyZnRpbWUoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBIQVZFX01LVElNRSAgICAgICAgICAgICAgMSAvKiBta3RpbWUoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEhBVkVfVFpOQU1FICAgICAgICAgICAgICAxIC8qIE5vIHRtX3pvbmUgYnV0IGRvIGhhdmUgdHpuYW1lW10gICAgICAgKi8KLSNkZWZpbmUgSEFWRV9USU1FUyAgICAgICAgICAgICAgIDEgLyogI2luY2x1ZGUgPHN5cy90aW1lcy5oPiAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBIQVZFX1NZU19VVElNRV9IICAgICAgICAgMSAvKiAjaW5jbHVkZSA8c3lzL3V0aW1lLmg+ICAgICAgICAgICAgICAgICovCi0vKiAjZGVmaW5lIEhBVkVfVVRJTUVfSCAgICAgICAxICovIC8qICNpbmNsdWRlIDx1dGltZS5oPiAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgSEFWRV9TWVNfVElNRV9IICAgICAgICAgIDEgLyogI2luY2x1ZGUgPHN5cy90aW1lLmg+ICAgICAgICAgICAgICAgICAqLwotLyogI2RlZmluZSBUTV9JTl9TWVNfVElNRSAgICAgMSAqLyAvKiA8c3lzL3RpbWUuaD4gZGVjbGFyZXMgc3RydWN0IHRtICAgICAgICovCi0jZGVmaW5lIEhBVkVfR0VUVElNRU9GREFZICAgICAgICAxIC8qIGdldHRpbWVvZmRheSgpICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICNkZWZpbmUgR0VUVElNRU9GREFZX05PX1RaIDEgKi8gLyogZ2V0dGltZW9mZGF5KCkgZG9lcyBub3QgaGF2ZSAybmQgYXJnICAqLwotLyogI2RlZmluZSBIQVZFX1RJTUVHTSAgICAgICAgMSAqLyAvKiB0aW1lZ20oKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIFRJTUVfV0lUSF9TWVNfVElNRSAgICAgICAxIC8qIE1peCA8c3lzL3RpbWUuaD4gYW5kIDx0aW1lLmg+ICAgICAgICAgKi8KLSNkZWZpbmUgU1lTX1NFTEVDVF9XSVRIX1NZU19USU1FIDEgLyogTWl4IDxzeXMvc2VsZWN0Lmg+IGFuZCA8c3lzL3RpbWUuaD4gICAqLwotLyogI2RlZmluZSBIQVZFX0FMVFpPTkUgICAgICAgMSAqLyAvKiBpZiA8dGltZS5oPiBkZWZpbmVzIGFsdHpvbmUgICAgICAgICAgICovCi0KLSAgLyogTmV0d29yay9Tb2NrZXRzIFN1cHBvcnQgKi8KLSNkZWZpbmUgSEFWRV9TWVNfU0VMRUNUX0ggICAgICAgMSAvKiAjaW5jbHVkZSA8c3lzL3NlbGVjdC5oPiAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBCU0RfU0VMRUNUICAgICAgICAgICAgICAxIC8qIFVzZSBCU0QgdmVyc3VzIE9TLzIgZm9ybSBvZiBzZWxlY3QoKSAgICovCi0jZGVmaW5lIEhBVkVfU0VMRUNUICAgICAgICAgICAgIDEgLyogc2VsZWN0KCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgSEFWRV9HRVRQRUVSTkFNRSAgICAgICAgMSAvKiBnZXRwZWVybmFtZSgpICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogI3VuZGVmIEhBVkVfR0VUSE9TVE5BTUVfUiAxICovIC8qIGdldGhvc3RuYW1lX3IoKSAgICAgICAgICAgICAgICAgICAgICAgICovCi0KLSAgLyogRmlsZSBJL08gKi8KLSNkZWZpbmUgSEFWRV9EVVAyICAgICAgICAgICAgICAgIDEgLyogZHVwMigpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBIQVZFX0VYRUNWICAgICAgICAgICAgICAgMSAvKiBleGVjdigpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEhBVkVfU0VUVkJVRiAgICAgICAgICAgICAxIC8qIHNldHZidWYoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgSEFWRV9HRVRDV0QgICAgICAgICAgICAgIDEgLyogZ2V0Y3dkKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBIQVZFX1BJUEUgICAgICAgICAgICAgICAgMSAvKiBwaXBlKCkgICAgIFtPUy8yLXNwZWNpZmljIGNvZGUgYWRkZWRdICovCi0jZGVmaW5lIEhBVkVfSU9fSCAgICAgICAgICAgICAgICAxIC8qICNpbmNsdWRlIDxpby5oPiAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgSEFWRV9GQ05UTF9IICAgICAgICAgICAgIDEgLyogI2luY2x1ZGUgPGZjbnRsLmg+ICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBIQVZFX0RJUkVDVF9IICAgICAgICAgICAgMSAvKiAjaW5jbHVkZSA8ZGlyZWN0Lmg+ICAgICAgICAgICAgICAgICAgICovCi0vKiAjZGVmaW5lIEhBVkVfRkxPQ0sgICAgICAgICAxICovIC8qIGZsb2NrKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICNkZWZpbmUgSEFWRV9UUlVOQ0FURSAgICAgIDEgKi8gLyogdHJ1bmNhdGUoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogI2RlZmluZSBIQVZFX0ZUUlVOQ0FURSAgICAgMSAqLyAvKiBmdHJ1bmNhdGUoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAjZGVmaW5lIEhBVkVfTFNUQVQgICAgICAgICAxICovIC8qIGxzdGF0KCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICNkZWZpbmUgSEFWRV9ESVJFTlRfSCAgICAgIDEgKi8gLyogI2luY2x1ZGUgPGRpcmVudC5oPiAgICAgICAgICAgICAgICAgICAqLwotLyogI2RlZmluZSBIQVZFX09QRU5ESVIgICAgICAgMSAqLyAvKiBvcGVuZGlyKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0KLSAgLyogUHJvY2VzcyBPcGVyYXRpb25zICovCi0jZGVmaW5lIEhBVkVfUFJPQ0VTU19IICAgICAgICAgICAxIC8qICNpbmNsdWRlIDxwcm9jZXNzLmg+ICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgSEFWRV9HRVRQSUQgICAgICAgICAgICAgIDEgLyogZ2V0cGlkKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBIQVZFX1NZU1RFTSAgICAgICAgICAgICAgMSAvKiBzeXN0ZW0oKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEhBVkVfV0FJVCAgICAgICAgICAgICAgICAxIC8qIHdhaXQoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgSEFWRV9LSUxMICAgICAgICAgICAgICAgIDEgLyoga2lsbCgpICAgICBbT1MvMi1zcGVjaWZpYyBjb2RlIGFkZGVkXSAqLwotI2RlZmluZSBIQVZFX1BPUEVOICAgICAgICAgICAgICAgMSAvKiBwb3BlbigpICAgIFtPUy8yLXNwZWNpZmljIGNvZGUgYWRkZWRdICovCi0vKiAjZGVmaW5lIEhBVkVfR0VUUFBJRCAgICAgICAxICovIC8qIGdldHBwaWQoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICNkZWZpbmUgSEFWRV9XQUlUUElEICAgICAgIDEgKi8gLyogd2FpdHBpZCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogI2RlZmluZSBIQVZFX0ZPUksgICAgICAgICAgMSAqLyAvKiBmb3JrKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0KLSAgLyogVXNlci9Hcm91cCBJRCBRdWVyaWVzICovCi0vKiAjZGVmaW5lIEhBVkVfR0VURUdJRCAgICAgICAxICovCi0vKiAjZGVmaW5lIEhBVkVfR0VURVVJRCAgICAgICAxICovCi0vKiAjZGVmaW5lIEhBVkVfR0VUR0lEICAgICAgICAxICovCi0vKiAjZGVmaW5lIEhBVkVfR0VUVUlEICAgICAgICAxICovCi0KLSAgLyogVW5peC1TcGVjaWZpYyAqLwotLyogI2RlZmluZSBIQVZFX1NZU19VTl9IICAgICAgICAgICAgMSAvKiAjaW5jbHVkZSA8c3lzL3VuLmg+ICAgICAgICAgICAgICAgICAgICovCi0vKiAjZGVmaW5lIEhBVkVfU1lTX1VUU05BTUVfSCAxICovIC8qICNpbmNsdWRlIDxzeXMvdXRzbmFtZS5oPiAgICAgICAgICAgICAgKi8KLS8qICNkZWZpbmUgSEFWRV9TWVNfV0FJVF9IICAgIDEgKi8gLyogI2luY2x1ZGUgPHN5cy93YWl0Lmg+ICAgICAgICAgICAgICAgICAqLwotLyogI2RlZmluZSBIQVZFX1VOSVNURF9IICAgICAgMSAqLyAvKiAjaW5jbHVkZSA8dW5pc3RkLmg+ICAgICAgICAgICAgICAgICAgICovCi0vKiAjZGVmaW5lIEhBVkVfVU5BTUUgICAgICAgICAxICovIC8qIHVuYW1lICgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQotLyogRGVmaW5lIGlmIHlvdSB3YW50IGRvY3VtZW50YXRpb24gc3RyaW5ncyBpbiBleHRlbnNpb24gbW9kdWxlcyAqLwotI2RlZmluZSBXSVRIX0RPQ19TVFJJTkdTIDEKLQotI2lmZGVmIFVTRV9ETF9FWFBPUlQKLSAgI2RlZmluZSBETF9JTVBPUlQoUlRZUEUpIFJUWVBFIF9TeXN0ZW0KLSNlbmRpZgotCi0jZW5kaWYgLyogIVB5X0NPTkZJR19IICovCi0KZGlmZiAtLWdpdCBhL1BDL29zMnZhY3BwL3B5dGhvbi5kZWYgYi9QQy9vczJ2YWNwcC9weXRob24uZGVmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNTI1YzJhLi4wMDAwMDAwCi0tLSBhL1BDL29zMnZhY3BwL3B5dGhvbi5kZWYKKysrIC9kZXYvbnVsbApAQCAtMSw0NzkgKzAsMCBAQAotTElCUkFSWSAgICAgICAgUFlUSE9OMjQgSU5JVElOU1RBTkNFIFRFUk1JTlNUQU5DRQotREVTQ1JJUFRJT04gICAgJ1B5dGhvbiAyLjQgQ29yZSBETEwnCi1QUk9UTU9ERQotREFUQSAgICAgICAgICAgTVVMVElQTEUgTk9OU0hBUkVECi0KLUVYUE9SVFMKLSAgICAgICAgICAgICAgIDsgRGF0YQotICAgICAgICAgICAgICAgUHlDRnVuY3Rpb25fVHlwZQotICAgICAgICAgICAgICAgUHlDYXBzdWxlX1R5cGUKLSAgICAgICAgICAgICAgIFB5Q09iamVjdF9UeXBlCi0gICAgICAgICAgICAgICBQeUNsYXNzX1R5cGUKLSAgICAgICAgICAgICAgIFB5Q29kZV9UeXBlCi0gICAgICAgICAgICAgICBQeUNvbXBsZXhfVHlwZQotICAgICAgICAgICAgICAgUHlEaWN0X1R5cGUKLSAgICAgICAgICAgICAgIFB5RXhjX0FyaXRobWV0aWNFcnJvcgotICAgICAgICAgICAgICAgUHlFeGNfQXNzZXJ0aW9uRXJyb3IKLSAgICAgICAgICAgICAgIFB5RXhjX0F0dHJpYnV0ZUVycm9yCi0gICAgICAgICAgICAgICBQeUV4Y19FT0ZFcnJvcgotICAgICAgICAgICAgICAgUHlFeGNfRW52aXJvbm1lbnRFcnJvcgotICAgICAgICAgICAgICAgUHlFeGNfRXhjZXB0aW9uCi0gICAgICAgICAgICAgICBQeUV4Y19GbG9hdGluZ1BvaW50RXJyb3IKLSAgICAgICAgICAgICAgIFB5RXhjX0lPRXJyb3IKLSAgICAgICAgICAgICAgIFB5RXhjX0ltcG9ydEVycm9yCi0gICAgICAgICAgICAgICBQeUV4Y19JbmRleEVycm9yCi0gICAgICAgICAgICAgICBQeUV4Y19LZXlFcnJvcgotICAgICAgICAgICAgICAgUHlFeGNfS2V5Ym9hcmRJbnRlcnJ1cHQKLSAgICAgICAgICAgICAgIFB5RXhjX0xvb2t1cEVycm9yCi0gICAgICAgICAgICAgICBQeUV4Y19NZW1vcnlFcnJvcgotICAgICAgICAgICAgICAgUHlFeGNfTWVtb3J5RXJyb3JJbnN0Ci0gICAgICAgICAgICAgICBQeUV4Y19OYW1lRXJyb3IKLSAgICAgICAgICAgICAgIFB5RXhjX09TRXJyb3IKLSAgICAgICAgICAgICAgIFB5RXhjX092ZXJmbG93RXJyb3IKLSAgICAgICAgICAgICAgIFB5RXhjX1J1bnRpbWVFcnJvcgotICAgICAgICAgICAgICAgUHlFeGNfU3ludGF4RXJyb3IKLSAgICAgICAgICAgICAgIFB5RXhjX1N5c3RlbUVycm9yCi0gICAgICAgICAgICAgICBQeUV4Y19TeXN0ZW1FeGl0Ci0gICAgICAgICAgICAgICBQeUV4Y19UeXBlRXJyb3IKLSAgICAgICAgICAgICAgIFB5RXhjX1ZhbHVlRXJyb3IKLSAgICAgICAgICAgICAgIFB5RXhjX1plcm9EaXZpc2lvbkVycm9yCi0gICAgICAgICAgICAgICBQeUZpbGVfVHlwZQotICAgICAgICAgICAgICAgUHlGbG9hdF9UeXBlCi0gICAgICAgICAgICAgICBQeUZyYW1lX1R5cGUKLSAgICAgICAgICAgICAgIFB5RnVuY3Rpb25fVHlwZQotICAgICAgICAgICAgICAgUHlJbXBvcnRfRnJvemVuTW9kdWxlcwotICAgICAgICAgICAgICAgUHlJbXBvcnRfSW5pdHRhYgotICAgICAgICAgICAgICAgUHlJbnN0YW5jZV9UeXBlCi0gICAgICAgICAgICAgICBQeUludF9UeXBlCi0gICAgICAgICAgICAgICBQeUxpc3RfVHlwZQotICAgICAgICAgICAgICAgUHlMb25nX1R5cGUKLSAgICAgICAgICAgICAgIFB5TWV0aG9kX1R5cGUKLSAgICAgICAgICAgICAgIFB5TW9kdWxlX1R5cGUKLSAgICAgICAgICAgICAgIFB5T1NfSW5wdXRIb29rCi0gICAgICAgICAgICAgICBQeU9TX1JlYWRsaW5lRnVuY3Rpb25Qb2ludGVyCi0gICAgICAgICAgICAgICBQeVJhbmdlX1R5cGUKLSAgICAgICAgICAgICAgIFB5U2xpY2VfVHlwZQotICAgICAgICAgICAgICAgUHlTdHJpbmdfVHlwZQotICAgICAgICAgICAgICAgUHlUcmFjZUJhY2tfVHlwZQotICAgICAgICAgICAgICAgUHlUdXBsZV9UeXBlCi0gICAgICAgICAgICAgICBQeVR5cGVfVHlwZQotICAgICAgICAgICAgICAgUHlfRGVidWdGbGFnCi0gICAgICAgICAgICAgICBQeV9Gcm96ZW5GbGFnCi0gICAgICAgICAgICAgICBQeV9JbnRlcmFjdGl2ZUZsYWcKLSAgICAgICAgICAgICAgIFB5X05vU2l0ZUZsYWcKLSAgICAgICAgICAgICAgIFB5X09wdGltaXplRmxhZwotICAgICAgICAgICAgICAgUHlfVXNlQ2xhc3NFeGNlcHRpb25zRmxhZwotICAgICAgICAgICAgICAgUHlfVmVyYm9zZUZsYWcKLSAgICAgICAgICAgICAgIF9QeUltcG9ydF9GaWxldGFiCi0gICAgICAgICAgICAgICBfUHlJbXBvcnRfSW5pdHRhYgotICAgICAgICAgICAgICAgX1B5UGFyc2VyX0dyYW1tYXIKLSAgICAgICAgICAgICAgIF9QeVBhcnNlcl9Ub2tlbk5hbWVzCi0gICAgICAgICAgICAgICBfUHlfRWxsaXBzaXNPYmplY3QKLSAgICAgICAgICAgICAgIF9QeV9Ob25lU3RydWN0Ci0gICAgICAgICAgICAgICBfUHlfUGFja2FnZUNvbnRleHQKLSAgICAgICAgICAgICAgIF9QeV9UcnVlU3RydWN0Ci0gICAgICAgICAgICAgICBfUHlfWmVyb1N0cnVjdAotICAgICAgICAgICAgICAgX1B5X2Fic3RyYWN0X2hhY2sKLSAgICAgICAgICAgICAgIF9QeV9jYXBzdWxlX2hhY2sKLSAgICAgICAgICAgICAgIF9QeV9yZV9zeW50YXgKLSAgICAgICAgICAgICAgIF9QeV9yZV9zeW50YXhfdGFibGUKLQotICAgICAgICAgICAgICAgOyBDb2RlCi0gICAgICAgICAgICAgICBQeUFyZ19QYXJzZQotICAgICAgICAgICAgICAgUHlBcmdfUGFyc2VUdXBsZQotICAgICAgICAgICAgICAgUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzCi0gICAgICAgICAgICAgICBQeUFyZ19WYVBhcnNlCi0gICAgICAgICAgICAgICBQeUNGdW5jdGlvbl9GaW5pCi0gICAgICAgICAgICAgICBQeUNGdW5jdGlvbl9HZXRGbGFncwotICAgICAgICAgICAgICAgUHlDRnVuY3Rpb25fR2V0RnVuY3Rpb24KLSAgICAgICAgICAgICAgIFB5Q0Z1bmN0aW9uX0dldFNlbGYKLSAgICAgICAgICAgICAgIFB5Q0Z1bmN0aW9uX05ldwotICAgICAgICAgICAgICAgUHlDYXBzdWxlX0dldENvbnRleHQKLSAgICAgICAgICAgICAgIFB5Q2Fwc3VsZV9HZXREZXN0cnVjdG9yCi0gICAgICAgICAgICAgICBQeUNhcHN1bGVfR2V0TmFtZQotICAgICAgICAgICAgICAgUHlDYXBzdWxlX0dldFBvaW50ZXIKLSAgICAgICAgICAgICAgIFB5Q2Fwc3VsZV9JbXBvcnQKLSAgICAgICAgICAgICAgIFB5Q2Fwc3VsZV9Jc1ZhbGlkCi0gICAgICAgICAgICAgICBQeUNhcHN1bGVfTmV3Ci0gICAgICAgICAgICAgICBQeUNhcHN1bGVfU2V0Q29udGV4dAotICAgICAgICAgICAgICAgUHlDYXBzdWxlX1NldERlc3RydWN0b3IKLSAgICAgICAgICAgICAgIFB5Q2Fwc3VsZV9TZXROYW1lCi0gICAgICAgICAgICAgICBQeUNhcHN1bGVfU2V0UG9pbnRlcgotICAgICAgICAgICAgICAgUHlDT2JqZWN0X0FzVm9pZFB0cgotICAgICAgICAgICAgICAgUHlDT2JqZWN0X0Zyb21Wb2lkUHRyQW5kRGVzYwotICAgICAgICAgICAgICAgUHlDT2JqZWN0X0Zyb21Wb2lkUHRyCi0gICAgICAgICAgICAgICBQeUNPYmplY3RfR2V0RGVzYwotICAgICAgICAgICAgICAgUHlDT2JqZWN0X0ltcG9ydAotICAgICAgICAgICAgICAgUHlDYWxsYWJsZV9DaGVjawotICAgICAgICAgICAgICAgUHlDbGFzc19Jc1N1YmNsYXNzCi0gICAgICAgICAgICAgICBQeUNsYXNzX05ldwotICAgICAgICAgICAgICAgUHlDb2RlX0FkZHIyTGluZQotICAgICAgICAgICAgICAgUHlDb2RlX05ldwotICAgICAgICAgICAgICAgUHlDb21wbGV4X0FzQ0NvbXBsZXgKLSAgICAgICAgICAgICAgIFB5Q29tcGxleF9Gcm9tQ0NvbXBsZXgKLSAgICAgICAgICAgICAgIFB5Q29tcGxleF9Gcm9tRG91YmxlcwotICAgICAgICAgICAgICAgUHlDb21wbGV4X0ltYWdBc0RvdWJsZQotICAgICAgICAgICAgICAgUHlDb21wbGV4X1JlYWxBc0RvdWJsZQotICAgICAgICAgICAgICAgUHlEaWN0X0NsZWFyCi0gICAgICAgICAgICAgICBQeURpY3RfRGVsSXRlbQotICAgICAgICAgICAgICAgUHlEaWN0X0RlbEl0ZW1TdHJpbmcKLSAgICAgICAgICAgICAgIFB5RGljdF9HZXRJdGVtCi0gICAgICAgICAgICAgICBQeURpY3RfR2V0SXRlbVN0cmluZwotICAgICAgICAgICAgICAgUHlEaWN0X0l0ZW1zCi0gICAgICAgICAgICAgICBQeURpY3RfS2V5cwotICAgICAgICAgICAgICAgUHlEaWN0X05ldwotICAgICAgICAgICAgICAgUHlEaWN0X05leHQKLSAgICAgICAgICAgICAgIFB5RGljdF9TZXRJdGVtCi0gICAgICAgICAgICAgICBQeURpY3RfU2V0SXRlbVN0cmluZwotICAgICAgICAgICAgICAgUHlEaWN0X1NpemUKLSAgICAgICAgICAgICAgIFB5RGljdF9WYWx1ZXMKLSAgICAgICAgICAgICAgIFB5RXJyX0JhZEFyZ3VtZW50Ci0gICAgICAgICAgICAgICBQeUVycl9CYWRJbnRlcm5hbENhbGwKLSAgICAgICAgICAgICAgIFB5RXJyX0NoZWNrU2lnbmFscwotICAgICAgICAgICAgICAgUHlFcnJfQ2xlYXIKLSAgICAgICAgICAgICAgIFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMKLSAgICAgICAgICAgICAgIFB5RXJyX0ZldGNoCi0gICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQKLSAgICAgICAgICAgICAgIFB5RXJyX0dpdmVuRXhjZXB0aW9uTWF0Y2hlcwotICAgICAgICAgICAgICAgUHlFcnJfTmV3RXhjZXB0aW9uCi0gICAgICAgICAgICAgICBQeUVycl9Ob01lbW9yeQotICAgICAgICAgICAgICAgUHlFcnJfTm9ybWFsaXplRXhjZXB0aW9uCi0gICAgICAgICAgICAgICBQeUVycl9PY2N1cnJlZAotICAgICAgICAgICAgICAgUHlFcnJfUHJpbnQKLSAgICAgICAgICAgICAgIFB5RXJyX1ByaW50RXgKLSAgICAgICAgICAgICAgIFB5RXJyX1Jlc3RvcmUKLSAgICAgICAgICAgICAgIFB5RXJyX1NldEZyb21FcnJubwotICAgICAgICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lCi0gICAgICAgICAgICAgICBQeUVycl9TZXRJbnRlcnJ1cHQKLSAgICAgICAgICAgICAgIFB5RXJyX1NldE5vbmUKLSAgICAgICAgICAgICAgIFB5RXJyX1NldE9iamVjdAotICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nCi0gICAgICAgICAgICAgICBQeUV2YWxfQWNxdWlyZUxvY2sKLSAgICAgICAgICAgICAgIFB5RXZhbF9BY3F1aXJlVGhyZWFkCi0gICAgICAgICAgICAgICBQeUV2YWxfQ2FsbEZ1bmN0aW9uCi0gICAgICAgICAgICAgICBQeUV2YWxfQ2FsbE1ldGhvZAotICAgICAgICAgICAgICAgUHlFdmFsX0NhbGxPYmplY3QKLSAgICAgICAgICAgICAgIFB5RXZhbF9DYWxsT2JqZWN0V2l0aEtleXdvcmRzCi0gICAgICAgICAgICAgICBQeUV2YWxfRXZhbENvZGUKLSAgICAgICAgICAgICAgIFB5RXZhbF9HZXRCdWlsdGlucwotICAgICAgICAgICAgICAgUHlFdmFsX0dldEZyYW1lCi0gICAgICAgICAgICAgICBQeUV2YWxfR2V0R2xvYmFscwotICAgICAgICAgICAgICAgUHlFdmFsX0dldExvY2FscwotICAgICAgICAgICAgICAgUHlFdmFsX0dldFJlc3RyaWN0ZWQKLSAgICAgICAgICAgICAgIFB5RXZhbF9Jbml0VGhyZWFkcwotICAgICAgICAgICAgICAgUHlFdmFsX1JlbGVhc2VMb2NrCi0gICAgICAgICAgICAgICBQeUV2YWxfUmVsZWFzZVRocmVhZAotICAgICAgICAgICAgICAgUHlFdmFsX1Jlc3RvcmVUaHJlYWQKLSAgICAgICAgICAgICAgIFB5RXZhbF9TYXZlVGhyZWFkCi0gICAgICAgICAgICAgICBQeUZpbGVfQXNGaWxlCi0gICAgICAgICAgICAgICBQeUZpbGVfRnJvbUZpbGUKLSAgICAgICAgICAgICAgIFB5RmlsZV9Gcm9tU3RyaW5nCi0gICAgICAgICAgICAgICBQeUZpbGVfR2V0TGluZQotICAgICAgICAgICAgICAgUHlGaWxlX05hbWUKLSAgICAgICAgICAgICAgIFB5RmlsZV9TZXRCdWZTaXplCi0gICAgICAgICAgICAgICBQeUZpbGVfU29mdFNwYWNlCi0gICAgICAgICAgICAgICBQeUZpbGVfV3JpdGVPYmplY3QKLSAgICAgICAgICAgICAgIFB5RmlsZV9Xcml0ZVN0cmluZwotICAgICAgICAgICAgICAgUHlGbG9hdF9Bc0RvdWJsZQotICAgICAgICAgICAgICAgUHlGbG9hdF9Bc1N0cmluZwotICAgICAgICAgICAgICAgUHlGbG9hdF9GaW5pCi0gICAgICAgICAgICAgICBQeUZsb2F0X0Zyb21Eb3VibGUKLSAgICAgICAgICAgICAgIFB5RnJhbWVfQmxvY2tQb3AKLSAgICAgICAgICAgICAgIFB5RnJhbWVfQmxvY2tTZXR1cAotICAgICAgICAgICAgICAgUHlGcmFtZV9GYXN0VG9Mb2NhbHMKLSAgICAgICAgICAgICAgIFB5RnJhbWVfRmluaQotICAgICAgICAgICAgICAgUHlGcmFtZV9Mb2NhbHNUb0Zhc3QKLSAgICAgICAgICAgICAgIFB5RnJhbWVfTmV3Ci0gICAgICAgICAgICAgICBQeUZ1bmN0aW9uX0dldENvZGUKLSAgICAgICAgICAgICAgIFB5RnVuY3Rpb25fR2V0RGVmYXVsdHMKLSAgICAgICAgICAgICAgIFB5RnVuY3Rpb25fR2V0R2xvYmFscwotICAgICAgICAgICAgICAgUHlGdW5jdGlvbl9OZXcKLSAgICAgICAgICAgICAgIFB5RnVuY3Rpb25fU2V0RGVmYXVsdHMKLSAgICAgICAgICAgICAgIFB5R3JhbW1hcl9BZGRBY2NlbGVyYXRvcnMKLSAgICAgICAgICAgICAgIFB5R3JhbW1hcl9GaW5kREZBCi0gICAgICAgICAgICAgICBQeUdyYW1tYXJfTGFiZWxSZXByCi0gICAgICAgICAgICAgICBQeUdyYW1tYXJfUmVtb3ZlQWNjZWxlcmF0b3JzCi0gICAgICAgICAgICAgICBQeUltcG9ydF9BZGRNb2R1bGUKLSAgICAgICAgICAgICAgIFB5SW1wb3J0X0FwcGVuZEluaXR0YWIKLSAgICAgICAgICAgICAgIFB5SW1wb3J0X0NsZWFudXAKLSAgICAgICAgICAgICAgIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlCi0gICAgICAgICAgICAgICBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZUV4Ci0gICAgICAgICAgICAgICBQeUltcG9ydF9FeHRlbmRJbml0dGFiCi0gICAgICAgICAgICAgICBQeUltcG9ydF9HZXRNYWdpY051bWJlcgotICAgICAgICAgICAgICAgUHlJbXBvcnRfR2V0TW9kdWxlRGljdAotICAgICAgICAgICAgICAgUHlJbXBvcnRfSW1wb3J0Ci0gICAgICAgICAgICAgICBQeUltcG9ydF9JbXBvcnRGcm96ZW5Nb2R1bGUKLSAgICAgICAgICAgICAgIFB5SW1wb3J0X0ltcG9ydE1vZHVsZQotICAgICAgICAgICAgICAgUHlJbXBvcnRfSW1wb3J0TW9kdWxlRXgKLSAgICAgICAgICAgICAgIFB5SW1wb3J0X1JlbG9hZE1vZHVsZQotICAgICAgICAgICAgICAgUHlJbnN0YW5jZV9Eb0Jpbk9wCi0gICAgICAgICAgICAgICBQeUluc3RhbmNlX05ldwotICAgICAgICAgICAgICAgUHlJbnRfQXNMb25nCi0gICAgICAgICAgICAgICBQeUludF9GaW5pCi0gICAgICAgICAgICAgICBQeUludF9Gcm9tTG9uZwotICAgICAgICAgICAgICAgUHlJbnRfR2V0TWF4Ci0gICAgICAgICAgICAgICBQeUludGVycHJldGVyU3RhdGVfQ2xlYXIKLSAgICAgICAgICAgICAgIFB5SW50ZXJwcmV0ZXJTdGF0ZV9EZWxldGUKLSAgICAgICAgICAgICAgIFB5SW50ZXJwcmV0ZXJTdGF0ZV9OZXcKLSAgICAgICAgICAgICAgIFB5TGlzdF9BcHBlbmQKLSAgICAgICAgICAgICAgIFB5TGlzdF9Bc1R1cGxlCi0gICAgICAgICAgICAgICBQeUxpc3RfR2V0SXRlbQotICAgICAgICAgICAgICAgUHlMaXN0X0dldFNsaWNlCi0gICAgICAgICAgICAgICBQeUxpc3RfSW5zZXJ0Ci0gICAgICAgICAgICAgICBQeUxpc3RfTmV3Ci0gICAgICAgICAgICAgICBQeUxpc3RfUmV2ZXJzZQotICAgICAgICAgICAgICAgUHlMaXN0X1NldEl0ZW0KLSAgICAgICAgICAgICAgIFB5TGlzdF9TZXRTbGljZQotICAgICAgICAgICAgICAgUHlMaXN0X1NpemUKLSAgICAgICAgICAgICAgIFB5TGlzdF9Tb3J0Ci0gICAgICAgICAgICAgICBQeUxvbmdfQXNEb3VibGUKLSAgICAgICAgICAgICAgIFB5TG9uZ19Bc0xvbmcKLTsgICAgICAgICAgICAgICBQeUxvbmdfQXNMb25nTG9uZwotICAgICAgICAgICAgICAgUHlMb25nX0FzVW5zaWduZWRMb25nCi07ICAgICAgICAgICAgICAgUHlMb25nX0FzVW5zaWduZWRMb25nTG9uZwotICAgICAgICAgICAgICAgUHlMb25nX0FzVm9pZFB0cgotICAgICAgICAgICAgICAgUHlMb25nX0Zyb21Eb3VibGUKLSAgICAgICAgICAgICAgIFB5TG9uZ19Gcm9tTG9uZwotOyAgICAgICAgICAgICAgIFB5TG9uZ19Gcm9tTG9uZ0xvbmcKLSAgICAgICAgICAgICAgIFB5TG9uZ19Gcm9tU3RyaW5nCi0gICAgICAgICAgICAgICBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZwotOyAgICAgICAgICAgICAgIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nTG9uZwotICAgICAgICAgICAgICAgUHlMb25nX0Zyb21Wb2lkUHRyCi0gICAgICAgICAgICAgICBQeU1hcHBpbmdfQ2hlY2sKLSAgICAgICAgICAgICAgIFB5TWFwcGluZ19HZXRJdGVtU3RyaW5nCi0gICAgICAgICAgICAgICBQeU1hcHBpbmdfSGFzS2V5Ci0gICAgICAgICAgICAgICBQeU1hcHBpbmdfSGFzS2V5U3RyaW5nCi0gICAgICAgICAgICAgICBQeU1hcHBpbmdfTGVuZ3RoCi0gICAgICAgICAgICAgICBQeU1hcHBpbmdfU2V0SXRlbVN0cmluZwotICAgICAgICAgICAgICAgUHlNYXJzaGFsX0luaXQKLSAgICAgICAgICAgICAgIFB5TWFyc2hhbF9SZWFkTG9uZ0Zyb21GaWxlCi0gICAgICAgICAgICAgICBQeU1hcnNoYWxfUmVhZE9iamVjdEZyb21GaWxlCi0gICAgICAgICAgICAgICBQeU1hcnNoYWxfUmVhZE9iamVjdEZyb21TdHJpbmcKLSAgICAgICAgICAgICAgIFB5TWFyc2hhbF9Xcml0ZUxvbmdUb0ZpbGUKLSAgICAgICAgICAgICAgIFB5TWFyc2hhbF9Xcml0ZU9iamVjdFRvRmlsZQotICAgICAgICAgICAgICAgUHlNYXJzaGFsX1dyaXRlT2JqZWN0VG9TdHJpbmcKLSAgICAgICAgICAgICAgIFB5TWVtX0ZyZWUKLSAgICAgICAgICAgICAgIFB5TWVtX01hbGxvYwotICAgICAgICAgICAgICAgUHlNZW1fUmVhbGxvYwotICAgICAgICAgICAgICAgUHlNZXRob2RfQ2xhc3MKLSAgICAgICAgICAgICAgIFB5TWV0aG9kX0ZpbmkKLSAgICAgICAgICAgICAgIFB5TWV0aG9kX0Z1bmN0aW9uCi0gICAgICAgICAgICAgICBQeU1ldGhvZF9OZXcKLSAgICAgICAgICAgICAgIFB5TWV0aG9kX1NlbGYKLSAgICAgICAgICAgICAgIFB5TW9kdWxlX0dldERpY3QKLSAgICAgICAgICAgICAgIFB5TW9kdWxlX0dldE5hbWUKLSAgICAgICAgICAgICAgIFB5TW9kdWxlX05ldwotICAgICAgICAgICAgICAgUHlOb2RlX0FkZENoaWxkCi0gICAgICAgICAgICAgICBQeU5vZGVfQ29tcGlsZQotICAgICAgICAgICAgICAgUHlOb2RlX0ZyZWUKLTsgICAgICAgICAgICAgICBQeU5vZGVfTGlzdFRyZWUKLSAgICAgICAgICAgICAgIFB5Tm9kZV9OZXcKLSAgICAgICAgICAgICAgIFB5TnVtYmVyX0Fic29sdXRlCi0gICAgICAgICAgICAgICBQeU51bWJlcl9BZGQKLSAgICAgICAgICAgICAgIFB5TnVtYmVyX0FuZAotICAgICAgICAgICAgICAgUHlOdW1iZXJfQ2hlY2sKLSAgICAgICAgICAgICAgIFB5TnVtYmVyX0NvZXJjZQotICAgICAgICAgICAgICAgUHlOdW1iZXJfQ29lcmNlRXgKLSAgICAgICAgICAgICAgIFB5TnVtYmVyX0RpdmlkZQotICAgICAgICAgICAgICAgUHlOdW1iZXJfRGl2bW9kCi0gICAgICAgICAgICAgICBQeU51bWJlcl9GbG9hdAotICAgICAgICAgICAgICAgUHlOdW1iZXJfSW50Ci0gICAgICAgICAgICAgICBQeU51bWJlcl9JbnZlcnQKLSAgICAgICAgICAgICAgIFB5TnVtYmVyX0xvbmcKLSAgICAgICAgICAgICAgIFB5TnVtYmVyX0xzaGlmdAotICAgICAgICAgICAgICAgUHlOdW1iZXJfTXVsdGlwbHkKLSAgICAgICAgICAgICAgIFB5TnVtYmVyX05lZ2F0aXZlCi0gICAgICAgICAgICAgICBQeU51bWJlcl9PcgotICAgICAgICAgICAgICAgUHlOdW1iZXJfUG9zaXRpdmUKLSAgICAgICAgICAgICAgIFB5TnVtYmVyX1Bvd2VyCi0gICAgICAgICAgICAgICBQeU51bWJlcl9SZW1haW5kZXIKLSAgICAgICAgICAgICAgIFB5TnVtYmVyX1JzaGlmdAotICAgICAgICAgICAgICAgUHlOdW1iZXJfU3VidHJhY3QKLSAgICAgICAgICAgICAgIFB5TnVtYmVyX1hvcgotICAgICAgICAgICAgICAgUHlPU19BZnRlckZvcmsKLSAgICAgICAgICAgICAgIFB5T1NfRmluaUludGVycnVwdHMKLSAgICAgICAgICAgICAgIFB5T1NfSW5pdEludGVycnVwdHMKLSAgICAgICAgICAgICAgIFB5T1NfSW50ZXJydXB0T2NjdXJyZWQKLSAgICAgICAgICAgICAgIFB5T1NfUmVhZGxpbmUKLSAgICAgICAgICAgICAgIFB5T1NfU3RkaW9SZWFkbGluZQotICAgICAgICAgICAgICAgUHlPU19zdHJ0b2wKLSAgICAgICAgICAgICAgIFB5T1Nfc3RydG91bAotICAgICAgICAgICAgICAgUHlPYmplY3RfQ2FsbEZ1bmN0aW9uCi0gICAgICAgICAgICAgICBQeU9iamVjdF9DYWxsTWV0aG9kCi0gICAgICAgICAgICAgICBQeU9iamVjdF9DYWxsT2JqZWN0Ci0gICAgICAgICAgICAgICBQeU9iamVjdF9DbXAKLSAgICAgICAgICAgICAgIFB5T2JqZWN0X0NvbXBhcmUKLSAgICAgICAgICAgICAgIFB5T2JqZWN0X0RlbEl0ZW0KLSAgICAgICAgICAgICAgIFB5T2JqZWN0X0dldEF0dHIKLSAgICAgICAgICAgICAgIFB5T2JqZWN0X0dldEF0dHJTdHJpbmcKLSAgICAgICAgICAgICAgIFB5T2JqZWN0X0dldEl0ZW0KLSAgICAgICAgICAgICAgIFB5T2JqZWN0X0hhc0F0dHIKLSAgICAgICAgICAgICAgIFB5T2JqZWN0X0hhc0F0dHJTdHJpbmcKLSAgICAgICAgICAgICAgIFB5T2JqZWN0X0hhc2gKLSAgICAgICAgICAgICAgIFB5T2JqZWN0X0lzVHJ1ZQotICAgICAgICAgICAgICAgUHlPYmplY3RfTGVuZ3RoCi0gICAgICAgICAgICAgICBQeU9iamVjdF9Ob3QKLSAgICAgICAgICAgICAgIFB5T2JqZWN0X1ByaW50Ci0gICAgICAgICAgICAgICBQeU9iamVjdF9SZXByCi0gICAgICAgICAgICAgICBQeU9iamVjdF9TZXRBdHRyCi0gICAgICAgICAgICAgICBQeU9iamVjdF9TZXRBdHRyU3RyaW5nCi0gICAgICAgICAgICAgICBQeU9iamVjdF9TZXRJdGVtCi0gICAgICAgICAgICAgICBQeU9iamVjdF9TdHIKLSAgICAgICAgICAgICAgIFB5T2JqZWN0X1R5cGUKLSAgICAgICAgICAgICAgIFB5UGFyc2VyX0FkZFRva2VuCi0gICAgICAgICAgICAgICBQeVBhcnNlcl9EZWxldGUKLSAgICAgICAgICAgICAgIFB5UGFyc2VyX05ldwotICAgICAgICAgICAgICAgUHlQYXJzZXJfUGFyc2VGaWxlCi0gICAgICAgICAgICAgICBQeVBhcnNlcl9QYXJzZVN0cmluZwotICAgICAgICAgICAgICAgUHlQYXJzZXJfU2ltcGxlUGFyc2VGaWxlCi0gICAgICAgICAgICAgICBQeVBhcnNlcl9TaW1wbGVQYXJzZVN0cmluZwotICAgICAgICAgICAgICAgUHlSYW5nZV9OZXcKLSAgICAgICAgICAgICAgIFB5UnVuX0FueUZpbGUKLSAgICAgICAgICAgICAgIFB5UnVuX0ZpbGUKLSAgICAgICAgICAgICAgIFB5UnVuX0ludGVyYWN0aXZlTG9vcAotICAgICAgICAgICAgICAgUHlSdW5fSW50ZXJhY3RpdmVPbmUKLSAgICAgICAgICAgICAgIFB5UnVuX1NpbXBsZUZpbGUKLSAgICAgICAgICAgICAgIFB5UnVuX1NpbXBsZVN0cmluZwotICAgICAgICAgICAgICAgUHlSdW5fU3RyaW5nCi0gICAgICAgICAgICAgICBQeVNlcXVlbmNlX0NoZWNrCi0gICAgICAgICAgICAgICBQeVNlcXVlbmNlX0NvbmNhdAotICAgICAgICAgICAgICAgUHlTZXF1ZW5jZV9Db250YWlucwotICAgICAgICAgICAgICAgUHlTZXF1ZW5jZV9Db3VudAotICAgICAgICAgICAgICAgUHlTZXF1ZW5jZV9EZWxJdGVtCi0gICAgICAgICAgICAgICBQeVNlcXVlbmNlX0RlbFNsaWNlCi0gICAgICAgICAgICAgICBQeVNlcXVlbmNlX0dldEl0ZW0KLSAgICAgICAgICAgICAgIFB5U2VxdWVuY2VfR2V0U2xpY2UKLSAgICAgICAgICAgICAgIFB5U2VxdWVuY2VfSW4KLSAgICAgICAgICAgICAgIFB5U2VxdWVuY2VfSW5kZXgKLSAgICAgICAgICAgICAgIFB5U2VxdWVuY2VfTGVuZ3RoCi0gICAgICAgICAgICAgICBQeVNlcXVlbmNlX0xpc3QKLSAgICAgICAgICAgICAgIFB5U2VxdWVuY2VfUmVwZWF0Ci0gICAgICAgICAgICAgICBQeVNlcXVlbmNlX1NldEl0ZW0KLSAgICAgICAgICAgICAgIFB5U2VxdWVuY2VfU2V0U2xpY2UKLSAgICAgICAgICAgICAgIFB5U2VxdWVuY2VfVHVwbGUKLSAgICAgICAgICAgICAgIFB5U2xpY2VfR2V0SW5kaWNlcwotICAgICAgICAgICAgICAgUHlTbGljZV9OZXcKLSAgICAgICAgICAgICAgIFB5U3RyaW5nX0FzU3RyaW5nCi0gICAgICAgICAgICAgICBQeVN0cmluZ19Db25jYXQKLSAgICAgICAgICAgICAgIFB5U3RyaW5nX0NvbmNhdEFuZERlbAotICAgICAgICAgICAgICAgUHlTdHJpbmdfRmluaQotICAgICAgICAgICAgICAgUHlTdHJpbmdfRm9ybWF0Ci0gICAgICAgICAgICAgICBQeVN0cmluZ19Gcm9tU3RyaW5nCi0gICAgICAgICAgICAgICBQeVN0cmluZ19Gcm9tU3RyaW5nQW5kU2l6ZQotICAgICAgICAgICAgICAgUHlTdHJpbmdfSW50ZXJuRnJvbVN0cmluZwotICAgICAgICAgICAgICAgUHlTdHJpbmdfSW50ZXJuSW5QbGFjZQotICAgICAgICAgICAgICAgUHlTdHJpbmdfU2l6ZQotICAgICAgICAgICAgICAgUHlTeXNfR2V0RmlsZQotICAgICAgICAgICAgICAgUHlTeXNfR2V0T2JqZWN0Ci0gICAgICAgICAgICAgICBQeVN5c19TZXRBcmd2Ci0gICAgICAgICAgICAgICBQeVN5c19TZXRPYmplY3QKLSAgICAgICAgICAgICAgIFB5U3lzX1NldFBhdGgKLSAgICAgICAgICAgICAgIFB5U3lzX1dyaXRlU3RkZXJyCi0gICAgICAgICAgICAgICBQeVN5c19Xcml0ZVN0ZG91dAotICAgICAgICAgICAgICAgUHlUaHJlYWRTdGF0ZV9DbGVhcgotICAgICAgICAgICAgICAgUHlUaHJlYWRTdGF0ZV9EZWxldGUKLSAgICAgICAgICAgICAgIFB5VGhyZWFkU3RhdGVfR2V0Ci0gICAgICAgICAgICAgICBQeVRocmVhZFN0YXRlX0dldERpY3QKLSAgICAgICAgICAgICAgIFB5VGhyZWFkU3RhdGVfTmV3Ci0gICAgICAgICAgICAgICBQeVRocmVhZFN0YXRlX1N3YXAKLSAgICAgICAgICAgICAgIFB5VGhyZWFkX2FjcXVpcmVfbG9jawotICAgICAgICAgICAgICAgUHlUaHJlYWRfYWxsb2NhdGVfbG9jawotICAgICAgICAgICAgICAgUHlUaHJlYWRfYWxsb2NhdGVfc2VtYQotICAgICAgICAgICAgICAgUHlUaHJlYWRfZG93bl9zZW1hCi0gICAgICAgICAgICAgICBQeVRocmVhZF9leGl0X3RocmVhZAotICAgICAgICAgICAgICAgUHlUaHJlYWRfZnJlZV9sb2NrCi0gICAgICAgICAgICAgICBQeVRocmVhZF9mcmVlX3NlbWEKLSAgICAgICAgICAgICAgIFB5VGhyZWFkX2dldF90aHJlYWRfaWRlbnQKLSAgICAgICAgICAgICAgIFB5VGhyZWFkX2luaXRfdGhyZWFkCi0gICAgICAgICAgICAgICBQeVRocmVhZF9yZWxlYXNlX2xvY2sKLSAgICAgICAgICAgICAgIFB5VGhyZWFkX3N0YXJ0X25ld190aHJlYWQKLSAgICAgICAgICAgICAgIFB5VGhyZWFkX3VwX3NlbWEKLSAgICAgICAgICAgICAgIFB5VG9rZW5fT25lQ2hhcgotICAgICAgICAgICAgICAgUHlUb2tlbl9Ud29DaGFycwotICAgICAgICAgICAgICAgUHlUb2tlbml6ZXJfRnJlZQotICAgICAgICAgICAgICAgUHlUb2tlbml6ZXJfRnJvbUZpbGUKLSAgICAgICAgICAgICAgIFB5VG9rZW5pemVyX0Zyb21TdHJpbmcKLSAgICAgICAgICAgICAgIFB5VG9rZW5pemVyX0dldAotICAgICAgICAgICAgICAgUHlUcmFjZUJhY2tfSGVyZQotICAgICAgICAgICAgICAgUHlUcmFjZUJhY2tfUHJpbnQKLSAgICAgICAgICAgICAgIFB5VHVwbGVfRmluaQotICAgICAgICAgICAgICAgUHlUdXBsZV9HZXRJdGVtCi0gICAgICAgICAgICAgICBQeVR1cGxlX0dldFNsaWNlCi0gICAgICAgICAgICAgICBQeVR1cGxlX05ldwotICAgICAgICAgICAgICAgUHlUdXBsZV9TZXRJdGVtCi0gICAgICAgICAgICAgICBQeVR1cGxlX1NpemUKLSAgICAgICAgICAgICAgIFB5X0FkZFBlbmRpbmdDYWxsCi0gICAgICAgICAgICAgICBQeV9BdEV4aXQKLSAgICAgICAgICAgICAgIFB5X0J1aWxkVmFsdWUKLSAgICAgICAgICAgICAgIFB5X0NvbXBpbGVTdHJpbmcKLSAgICAgICAgICAgICAgIFB5X0VuZEludGVycHJldGVyCi0gICAgICAgICAgICAgICBQeV9FeGl0Ci0gICAgICAgICAgICAgICBQeV9GYXRhbEVycm9yCi0gICAgICAgICAgICAgICBQeV9GZElzSW50ZXJhY3RpdmUKLSAgICAgICAgICAgICAgIFB5X0ZpbmFsaXplCi0gICAgICAgICAgICAgICBQeV9GaW5kTWV0aG9kCi0gICAgICAgICAgICAgICBQeV9GaW5kTWV0aG9kSW5DaGFpbgotICAgICAgICAgICAgICAgUHlfRmx1c2hMaW5lCi0gICAgICAgICAgICAgICBQeV9GcmVlCi0gICAgICAgICAgICAgICBQeV9HZXRBcmdjQXJndgotICAgICAgICAgICAgICAgUHlfR2V0QnVpbGRJbmZvCi0gICAgICAgICAgICAgICBQeV9HZXRDb21waWxlcgotICAgICAgICAgICAgICAgUHlfR2V0Q29weXJpZ2h0Ci0gICAgICAgICAgICAgICBQeV9HZXRFeGVjUHJlZml4Ci0gICAgICAgICAgICAgICBQeV9HZXRQYXRoCi0gICAgICAgICAgICAgICBQeV9HZXRQbGF0Zm9ybQotICAgICAgICAgICAgICAgUHlfR2V0UHJlZml4Ci0gICAgICAgICAgICAgICBQeV9HZXRQcm9ncmFtRnVsbFBhdGgKLSAgICAgICAgICAgICAgIFB5X0dldFByb2dyYW1OYW1lCi0gICAgICAgICAgICAgICBQeV9HZXRQeXRob25Ib21lCi0gICAgICAgICAgICAgICBQeV9HZXRWZXJzaW9uCi0gICAgICAgICAgICAgICBQeV9Jbml0TW9kdWxlNAotICAgICAgICAgICAgICAgUHlfSW5pdGlhbGl6ZQotICAgICAgICAgICAgICAgUHlfSXNJbml0aWFsaXplZAotICAgICAgICAgICAgICAgUHlfTWFpbgotICAgICAgICAgICAgICAgUHlfTWFrZVBlbmRpbmdDYWxscwotICAgICAgICAgICAgICAgUHlfTWFsbG9jCi0gICAgICAgICAgICAgICBQeV9OZXdJbnRlcnByZXRlcgotICAgICAgICAgICAgICAgUHlfUmVhbGxvYwotICAgICAgICAgICAgICAgUHlfUmVwckVudGVyCi0gICAgICAgICAgICAgICBQeV9SZXByTGVhdmUKLSAgICAgICAgICAgICAgIFB5X1NldFByb2dyYW1OYW1lCi0gICAgICAgICAgICAgICBQeV9TZXRQeXRob25Ib21lCi0gICAgICAgICAgICAgICBQeV9WYUJ1aWxkVmFsdWUKLSAgICAgICAgICAgICAgIF9QeUJ1aWx0aW5fRmluaV8xCi0gICAgICAgICAgICAgICBfUHlCdWlsdGluX0ZpbmlfMgotICAgICAgICAgICAgICAgX1B5QnVpbHRpbl9Jbml0XzEKLSAgICAgICAgICAgICAgIF9QeUJ1aWx0aW5fSW5pdF8yCi0gICAgICAgICAgICAgICBfUHlJbXBvcnRfRmluZEV4dGVuc2lvbgotICAgICAgICAgICAgICAgX1B5SW1wb3J0X0ZpbmkKLSAgICAgICAgICAgICAgIF9QeUltcG9ydF9GaXh1cEV4dGVuc2lvbgotICAgICAgICAgICAgICAgX1B5SW1wb3J0X0luaXQKLSAgICAgICAgICAgICAgIF9QeUltcG9ydF9Mb2FkRHluYW1pY01vZHVsZQotICAgICAgICAgICAgICAgX1B5TG9uZ19OZXcKLSAgICAgICAgICAgICAgIF9QeU1vZHVsZV9DbGVhcgotICAgICAgICAgICAgICAgX1B5T2JqZWN0X05ldwotICAgICAgICAgICAgICAgX1B5T2JqZWN0X05ld1ZhcgotICAgICAgICAgICAgICAgX1B5U3RyaW5nX1Jlc2l6ZQotICAgICAgICAgICAgICAgX1B5U3lzX0luaXQKLSAgICAgICAgICAgICAgIF9QeVR1cGxlX1Jlc2l6ZQotICAgICAgICAgICAgICAgX1B5X01ENUZpbmFsCi0gICAgICAgICAgICAgICBfUHlfTUQ1SW5pdAotICAgICAgICAgICAgICAgX1B5X01ENVVwZGF0ZQotOyAgICAgICAgICAgICAgIF9QeV9hZGRiaXQKLSAgICAgICAgICAgICAgIF9QeV9jX2RpZmYKLSAgICAgICAgICAgICAgIF9QeV9jX25lZwotICAgICAgICAgICAgICAgX1B5X2NfcG93Ci0gICAgICAgICAgICAgICBfUHlfY19wcm9kCi0gICAgICAgICAgICAgICBfUHlfY19xdW90Ci0gICAgICAgICAgICAgICBfUHlfY19zdW0KLTsgICAgICAgICAgICAgICBfUHlfZGVsYml0c2V0Ci07ICAgICAgICAgICAgICAgX1B5X21lcmdlYml0c2V0Ci07ICAgICAgICAgICAgICAgX1B5X21ldGFfZ3JhbW1hcgotOyAgICAgICAgICAgICAgIF9QeV9uZXdiaXRzZXQKLTsgICAgICAgICAgICAgICBfUHlfc2FtZWJpdHNldAotICAgICAgICAgICAgICAgUHlCdWZmZXJfVHlwZQotICAgICAgICAgICAgICAgUHlCdWZmZXJfRnJvbU9iamVjdAotICAgICAgICAgICAgICAgUHlCdWZmZXJfRnJvbU1lbW9yeQotICAgICAgICAgICAgICAgUHlCdWZmZXJfRnJvbVJlYWRXcml0ZU1lbW9yeQotICAgICAgICAgICAgICAgUHlCdWZmZXJfTmV3Ci0KZGlmZiAtLWdpdCBhL1BDL29zMnZhY3BwL3JlYWRtZS50eHQgYi9QQy9vczJ2YWNwcC9yZWFkbWUudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzU4NjA0Li4wMDAwMDAwCi0tLSBhL1BDL29zMnZhY3BwL3JlYWRtZS50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxMTkgKzAsMCBAQAotSUJNIFZpc3VhbEFnZSBDL0MrKyBmb3IgT1MvMgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1UbyBidWlsZCBQeXRob24gZm9yIE9TLzIsIGNoYW5nZSBpbnRvIC4vb3MydmFjcHAgYW5kIGlzc3VlIGFuICdOTUFLRScKLWNvbW1hbmQuICBUaGlzIHdpbGwgYnVpbGQgYSBQWVRIT04xNS5ETEwgY29udGFpbmluZyB0aGUgc2V0IG9mIFB5dGhvbgotbW9kdWxlcyBsaXN0ZWQgaW4gY29uZmlnLmMgYW5kIGEgc21hbGwgUFlUSE9OLkVYRSB0byBzdGFydCB0aGUKLWludGVycHJldGVyLgotCi1CeSBjaGFuZ2luZyB0aGUgQyBjb21waWxlciBmbGFnIC9HZC0gaW4gdGhlIG1ha2VmaWxlIHRvIC9HZCssIHlvdSBjYW4KLXJlZHVjZSB0aGUgc2l6ZSBvZiB0aGVzZSBieSBjYXVzaW5nIFB5dGhvbiB0byBkeW5hbWljYWxseSBsaW5rIHRvIHRoZQotQyBydW50aW1lIERMTHMgaW5zdGVhZCBvZiBpbmNsdWRpbmcgdGhlaXIgYnVsayBpbiB5b3VyIGJpbmFyaWVzLiAKLUhvd2V2ZXIsIHRoaXMgbWVhbnMgdGhhdCBhbnkgc3lzdGVtIG9uIHdoaWNoIHlvdSBydW4gUHl0aG9uIG11c3QgaGF2ZQotdGhlIFZBQysrIGNvbXBpbGVyIGluc3RhbGxlZCBpbiBvcmRlciB0byBoYXZlIHRob3NlIERMTHMgYXZhaWxhYmxlLgotCi1EdXJpbmcgdGhlIGJ1aWxkIHByb2Nlc3MgeW91IG1heSBzZWUgYSBjb3VwbGUgb2YgaGFybWxlc3Mgd2FybmluZ3M6Ci0KLSAgRnJvbSB0aGUgQyBDb21waWxlciwgIk5vIGZ1bmN0aW9uIHByb3RvdHlwZSBnaXZlbiBmb3IgWFhYIiwgd2hpY2gKLSAgY29tZXMgZnJvbSB0aGUgdXNlIG9mIEsmUiBwYXJhbWV0ZXJzIHdpdGhpbiBQeXRob24gZm9yIHBvcnRhYmlsaXR5LgotCi0gIEZyb20gdGhlIElMSUIgbGlicmFyaWFuLCAiTW9kdWxlIE5vdCBGb3VuZCAoWFhYKSIsIHdoaWNoIGNvbWVzCi0gIGZyb20gaXRzIGF0dGVtcHQgdG8gcGVyZm9ybSB0aGUgKC0rKSBvcGVyYXRpb24sIHdoaWNoIHJlbW92ZXMgYW5kCi0gIHRoZW4gYWRkcyBhIC5PQkogdG8gdGhlIGxpYnJhcnkuICBUaGUgZmlyc3QgdGltZSBhIGJ1aWxkIGlzIGRvbmUsCi0gIGl0IG9idmlvdXNseSBjYW5ub3QgcmVtb3ZlIHdoYXQgaXMgbm90IHlldCBidWlsdC4KLQotVGhpcyBidWlsZCBpbmNsdWRlcyBzdXBwb3J0IGZvciBtb3N0IFB5dGhvbiBmdW5jdGlvbmFsaXR5IGFzIHdlbGwgYXMKLVRDUC9JUCBzb2NrZXRzLiAgSXQgb21pdHMgdGhlIFBvc2l4IGFiaWxpdHkgdG8gJ2ZvcmsnIGEgcHJvY2VzcyBidXQKLXN1cHBvcnRzIHRocmVhZHMgdXNpbmcgT1MvMiBuYXRpdmUgY2FwYWJpbGl0aWVzLiAgSSBoYXZlIHRyaWVkIHRvCi1zdXBwb3J0IGV2ZXJ5dGhpbmcgcG9zc2libGUgYnV0IGhlcmUgYXJlIGEgZmV3IHVzYWdlIG5vdGVzLgotCi0KLS0tIG9zLnBvcGVuKCkgVXNhZ2UgV2FybmluZ3MKLQotV2l0aCByZXNwZWN0IHRvIG15IGltcGxlbWVudGF0aW9uIG9mIHBvcGVuKCkgdW5kZXIgT1MvMjoKLQotICAgIGltcG9ydCBvcwotCi0gICAgZmQgPSBvcy5wb3BlbigicGt6aXAuZXhlIC1AIGp1bmsuemlwIiwgJ3diJykKLSAgICBmZC53cml0ZSgiZmlsZTEudHh0XG4iKQotICAgIGZkLndyaXRlKCJmaWxlMi50eHRcbiIpCi0gICAgZmQud3JpdGUoImZpbGUzLnR4dFxuIikKLSAgICBmZC53cml0ZSgiXHgxYSIpICAjIFNob3VsZCBOb3QgQmUgTmVjZXNzYXJ5IEJ1dCBJcwotICAgIGZkLmNsb3NlKCkKLQotVGhlcmUgaXMgYSBidWcsIGVpdGhlciBpbiB0aGUgVkFDKysgY29tcGlsZXIgb3IgT1MvMiBpdHNlbGYsIHdoZXJlIHRoZQotc2ltcGxlIGNsb3N1cmUgb2YgdGhlIHdyaXRlLXNpZGUgb2YgYSBwaXBlIC10by0gYSBwcm9jZXNzIGRvZXMgbm90Ci1zZW5kIGFuIEVPRiB0byB0aGF0IHByb2Nlc3MuICBJIGZpbmQgSSBtdXN0IGV4cGxpY2l0bHkgd3JpdGUgYQotY29udHJvbC1aIChFT0YpIGJlZm9yZSBjbG9zaW5nIHRoZSBwaXBlLiAgVGhpcyBpcyBub3QgYSBwcm9ibGVtIHdoZW4KLXVzaW5nIHBvcGVuKCkgaW4gcmVhZCBtb2RlLgotCi1PbmUgb3RoZXIgc2xpZ2h0IGRpZmZlcmVuY2Ugd2l0aCBteSBwb3BlbigpIGlzIHRoYXQgSSByZXR1cm4gTm9uZQotZnJvbSB0aGUgY2xvc2UoKSwgaW5zdGVhZCBvZiB0aGUgVW5peCBjb252ZW50aW9uIG9mIHRoZSByZXR1cm4gY29kZQotb2YgdGhlIHNwYXduZWQgcHJvZ3JhbS4gIEkgY291bGQgZmluZCBubyBlYXN5IHdheSB0byBkbyB0aGlzIHVuZGVyCi1PUy8yLgotCi0KLS0tIEJFR0lOTElCUEFUSC9FTkRMSUJQQVRICi0KLVdpdGggcmVzcGVjdCB0byBlbnZpcm9ubWVudCB2YXJpYWJsZXMsIHRoaXMgT1MvMiBwb3J0IHN1cHBvcnRzIHRoZQotc3BlY2lhbC10by1PUy8yIG1hZ2ljIG5hbWVzIG9mICdCRUdJTkxJQlBBVEgnIGFuZCAnRU5ETElCUEFUSCcgdG8KLWNvbnRyb2wgd2hlcmUgdG8gbG9hZCBjb252ZW50aW9uYWwgRExMcyBmcm9tLiAgVGhvc2UgbmFtZXMgYXJlCi1pbnRlcmNlcHRlZCBhbmQgY29udmVydGVkIHRvIGNhbGxzIG9uIHRoZSBPUy8yIGtlcm5lbCBBUElzIGFuZAotYXJlIGluaGVyaXRlZCBieSBjaGlsZCBwcm9jZXNzZXMsIHdoZXRoZXIgUHl0aG9uLWJhc2VkIG9yIG5vdC4KLQotQSBmZXcgbmV3IGF0dHJpYnV0ZXMgaGF2ZSBiZWVuIGFkZGVkIHRvIHRoZSBvcyBtb2R1bGU6Ci0KLSAgICBvcy5tZW1pbnN0YWxsZWQgICMgQ291bnQgb2YgQnl0ZXMgb2YgUkFNIEluc3RhbGxlZCBvbiBNYWNoaW5lCi0gICAgb3MubWVta2VybmVsICAgICAjIENvdW50IG9mIEJ5dGVzIG9mIFJBTSBSZXNlcnZlZCAoTm9uLVN3YXBwYWJsZSkKLSAgICBvcy5tZW12aXJ0dWFsICAgICMgQ291bnQgb2YgQnl0ZXMgb2YgVmlydHVhbCBSQU0gUG9zc2libGUKLSAgICBvcy50aW1lc2xpY2UgICAgICMgRHVyYXRpb24gb2YgU2NoZWR1bGVyIFRpbWVzbGljZSwgaW4gTWlsbGlzZWNvbmRzCi0gICAgb3MubWF4cGF0aGxlbiAgICAjIE1heGltdW0gTGVuZ3RoIG9mIGEgUGF0aCBTcGVjaWZpY2F0aW9uLCBpbiBjaGFycwotICAgIG9zLm1heG5hbWVsZW4gICAgIyBNYXhpbXVtIExlbmd0aCBvZiBhIFNpbmdsZSBEaXIvRmlsZSBOYW1lLCBpbiBjaGFycwotICAgIG9zLnZlcnNpb24gICAgICAgIyBWZXJzaW9uIG9mIE9TLzIgQmVpbmcgUnVuIGUuZy4gIjQuMDAiCi0gICAgb3MucmV2aXNpb24gICAgICAjIFJldmlzaW9uIG9mIE9TLzIgQmVpbmcgUnVuICh1c3VhbGx5IHplcm8pCi0gICAgb3MuYm9vdGRyaXZlICAgICAjIERyaXZlIHRoYXQgU3lzdGVtIEJvb3RlZCBGcm9tIGUuZy4gIkM6IgotICAgICAgICAgICAgICAgICAgICAgIyAodXNlZnVsIHRvIGZpbmQgdGhlIENPTkZJRy5TWVMgdXNlZCB0byBib290IHdpdGgpCi0KLQotLS0gVXNpbmcgUHl0aG9uIGFzIHRoZSBEZWZhdWx0IE9TLzIgQmF0Y2ggTGFuZ3VhZ2UKLQotTm90ZSB0aGF0IE9TLzIgc3VwcG9ydHMgdGhlIFVuaXggdGVjaG5pcXVlIG9mIHB1dHRpbmcgdGhlIHNwZWNpYWwKLWNvbW1lbnQgbGluZSBhdCB0aGUgdGltZSBvZiBzY3JpcHRzIGUuZy4gIiMhL3Vzci9iaW4vcHl0aG9uIiBpbgotYSBkaWZmZXJlbnQgc3ludGFjdGljIGZvcm0uICBUbyBkbyB0aGlzLCBwdXQgeW91ciBzY3JpcHQgaW50byBhIGZpbGUKLXdpdGggYSAuQ01EIGV4dGVuc2lvbiBhbmQgYWRkZWQgJ2V4dHByb2MnIHRvIHRoZSB0b3AgYXMgZm9sbG93czoKLQotICAgIGV4dHByb2MgQzpcUHl0aG9uXFB5dGhvbi5leGUgLXgKLSAgICBpbXBvcnQgb3MKLSAgICBwcmludCAiSGVsbG8gZnJvbSBQeXRob24iCi0KLVRoZSAnLXgnIG9wdGlvbiB0ZWxscyBQeXRob24gdG8gc2tpcCB0aGUgZmlyc3QgbGluZSBvZiB0aGUgZmlsZQotd2hpbGUgcHJvY2Vzc2luZyB0aGUgcmVzdCBhcyBub3JtYWwgUHl0aG9uIHNvdXJjZS4KLQotCi0tLSBTdWdnZXN0ZWQgRW52aXJvbm1lbnQgVmFyaWFibGUgU2V0dXAKLQotV2l0aCByZXNwZWN0IHRvIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZm9yIFB5dGhvbiwgSSB1c2UgdGhlCi1mb2xsb3dpbmcgc2V0dXA6Ci0KLSAgICBTZXQgUFlUSE9OSE9NRT1FOlxUYXVcUHJvamVjdHNcUHl0aG9uO0Q6XERMTHMKLSAgICBTZXQgUFlUSE9OUEFUSD0uO0U6XFRhdVxQcm9qZWN0c1xQeXRob25cTGliOyBcCi0gICAgICAgICAgICAgICAgICAgICBFOlxUYXVcUHJvamVjdHNcUHl0aG9uXExpYlxwbGF0LXdpbgotCi1UaGUgRVhFQ19QUkVGSVggKG9wdGlvbmFsIHNlY29uZCBwYXRoc3BlYyBvbiBQWVRIT05IT01FKSBpcyB3aGVyZQoteW91IHB1dCBhbnkgUHl0aG9uIGV4dGVuc2lvbiBETExzIHlvdSBtYXkgY3JlYXRlL29idGFpbi4gIFRoZXJlCi1hcmUgbm9uZSBwcm92aWRlZCB3aXRoIHRoaXMgcmVsZWFzZS4KLQotCi0tLSBDb250YWN0IEluZm8KLQotSmVmZiBSdXNoIGlzIG5vIGxvbmdlciBzdXBwb3J0aW5nIHRoZSBWQUNQUCBwb3J0IDotKAotCi1JIGRvbid0IGhhdmUgdGhlIFZBQ1BQIGNvbXBpbGVyLCBzbyBjYW4ndCByZWxpYWJseSBtYWludGFpbiB0aGlzIHBvcnQuIAotCi1BbnlvbmUgd2l0aCBWQUNQUCB3aG8gY2FuIGNvbnRyaWJ1dGUgcGF0Y2hlcyB0byBrZWVwIHRoaXMgcG9ydCBidWlsZGFibGUKLXNob3VsZCB1cGxvYWQgdGhlbSB0byB0aGUgUHl0aG9uIFBhdGNoIE1hbmFnZXIgYXQgU291cmNlZm9yZ2UgYW5kIAotYXNzaWduIHRoZW0gdG8gbWUgZm9yIHJldmlldy9jaGVja2luLgotCi1BbmRyZXcgTWFjSW50eXJlCi1haW1hY2ludHlyZSBhdCB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQKLUF1Z3VzdCAxOCwgMjAwMi4KZGlmZiAtLWdpdCBhL1BDL3B5Y29uZmlnLmggYi9QQy9weWNvbmZpZy5oCmluZGV4IDBiOTY1MzkuLmUxYzE5ODggMTAwNjQ0Ci0tLSBhL1BDL3B5Y29uZmlnLmgKKysrIGIvUEMvcHljb25maWcuaApAQCAtNzQsOCArNzQsNiBAQAogI2RlZmluZSBET05UX0hBVkVfU0lHX1BBVVNFCiAjZGVmaW5lIExPTkdfQklUCTMyCiAjZGVmaW5lIFdPUkRfQklUIDMyCi0jZGVmaW5lIFBSRUZJWCAiIgotI2RlZmluZSBFWEVDX1BSRUZJWCAiIgogCiAjZGVmaW5lIE1TX1dJTjMyIC8qIG9ubHkgc3VwcG9ydCB3aW4zMiBhbmQgZ3JlYXRlci4gKi8KICNkZWZpbmUgTVNfV0lORE9XUwpAQCAtMTU2LDE1ICsxNTQsOSBAQAogI2VuZGlmIC8qIE1TX1dJTjY0ICovCiAKIC8qIHNldCB0aGUgdmVyc2lvbiBtYWNyb3MgZm9yIHRoZSB3aW5kb3dzIGhlYWRlcnMgKi8KLSNpZmRlZiBNU19XSU5YNjQKLS8qIDY0IGJpdCBvbmx5IHJ1bnMgb24gWFAgb3IgZ3JlYXRlciAqLworLyogUHl0aG9uIDMuNCsgcmVxdWlyZXMgV2luZG93cyBYUCBvciBncmVhdGVyICovCiAjZGVmaW5lIFB5X1dJTlZFUiAweDA1MDEgLyogX1dJTjMyX1dJTk5UX1dJTlhQICovCiAjZGVmaW5lIFB5X05URERJIE5URERJX1dJTlhQCi0jZWxzZQotLyogUHl0aG9uIDIuNisgcmVxdWlyZXMgV2luZG93cyAyMDAwIG9yIGdyZWF0ZXIgKi8KLSNkZWZpbmUgUHlfV0lOVkVSIDB4MDUwMCAvKiBfV0lOMzJfV0lOTlRfV0lOMksgKi8KLSNkZWZpbmUgUHlfTlREREkgTlRERElfV0lOMktTUDQKLSNlbmRpZgogCiAvKiBXZSBvbmx5IHNldCB0aGVzZSB2YWx1ZXMgd2hlbiBidWlsZGluZyBQeXRob24gLSB3ZSBkb24ndCB3YW50IHRvIGZvcmNlCiAgICB0aGVzZSB2YWx1ZXMgb24gZXh0ZW5zaW9ucywgYXMgdGhhdCB3aWxsIGFmZmVjdCB0aGUgcHJvdG90eXBlcyBhbmQKQEAgLTE5OSw4ICsxOTEsMTAgQEAKICNkZWZpbmUgSEFWRV9TU0laRV9UIDEKIAogI2lmIGRlZmluZWQoTVNfV0lOMzIpICYmICFkZWZpbmVkKE1TX1dJTjY0KQotI2lmZGVmIF9NX0lYODYKKyNpZiBkZWZpbmVkKF9NX0lYODYpCiAjZGVmaW5lIENPTVBJTEVSIF9QeV9QQVNURV9WRVJTSU9OKCIzMiBiaXQgKEludGVsKSIpCisjZWxpZiBkZWZpbmVkKF9NX0FSTSkKKyNkZWZpbmUgQ09NUElMRVIgX1B5X1BBU1RFX1ZFUlNJT04oIjMyIGJpdCAoQVJNKSIpCiAjZWxzZQogI2RlZmluZSBDT01QSUxFUiBfUHlfUEFTVEVfVkVSU0lPTigiMzIgYml0IChVbmtub3duKSIpCiAjZW5kaWYKQEAgLTMyOCwxMSArMzIyLDExIEBACiAJCQl0aGVpciBNYWtlZmlsZSAob3RoZXIgY29tcGlsZXJzIGFyZSBnZW5lcmFsbHkKIAkJCXRha2VuIGNhcmUgb2YgYnkgZGlzdHV0aWxzLikgKi8KICMJCQlpZiBkZWZpbmVkKF9ERUJVRykKLSMJCQkJcHJhZ21hIGNvbW1lbnQobGliLCJweXRob24zM19kLmxpYiIpCisjCQkJCXByYWdtYSBjb21tZW50KGxpYiwicHl0aG9uMzRfZC5saWIiKQogIwkJCWVsaWYgZGVmaW5lZChQeV9MSU1JVEVEX0FQSSkKICMJCQkJcHJhZ21hIGNvbW1lbnQobGliLCJweXRob24zLmxpYiIpCiAjCQkJZWxzZQotIwkJCQlwcmFnbWEgY29tbWVudChsaWIsInB5dGhvbjMzLmxpYiIpCisjCQkJCXByYWdtYSBjb21tZW50KGxpYiwicHl0aG9uMzQubGliIikKICMJCQllbmRpZiAvKiBfREVCVUcgKi8KICMJCWVuZGlmIC8qIF9NU0NfVkVSICovCiAjCWVuZGlmIC8qIFB5X0JVSUxEX0NPUkUgKi8KQEAgLTM5Niw3ICszOTAsNyBAQAogI2Vsc2UKIC8qIFZDNiwgVlMgMjAwMiBhbmQgZVZDNCBkb24ndCBzdXBwb3J0IHRoZSBDOTkgTEwgc3VmZml4IGZvciA2NC1iaXQgaW50ZWdlciBsaXRlcmFscyAqLwogI2RlZmluZSBQeV9MTCh4KSB4IyNJNjQKLSNlbmRpZiAgLyogX01TQ19WRVIgPiAxMjAwICAqLworI2VuZGlmICAvKiBfTVNDX1ZFUiA+IDEzMDAgICovCiAjZW5kaWYgIC8qIF9NU0NfVkVSICovCiAKICNlbmRpZgpAQCAtNDQyLDYgKzQzNiwxMSBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBjb3B5c2lnbicgZnVuY3Rpb24uICovCiAjZGVmaW5lIEhBVkVfQ09QWVNJR04gMQogCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHJvdW5kJyBmdW5jdGlvbi4gKi8KKyNpZiBfTVNDX1ZFUiA+PSAxODAwCisjZGVmaW5lIEhBVkVfUk9VTkQgMQorI2VuZGlmCisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgaXNpbmYnIG1hY3JvLiAqLwogI2RlZmluZSBIQVZFX0RFQ0xfSVNJTkYgMQogCkBAIC03MzEsNiArNzMwLDkgQEAKIC8qIFRoZSBzaXplIG9mIGB3Y2hhcl90JywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLwogI2RlZmluZSBTSVpFT0ZfV0NIQVJfVCAyCiAKKy8qIFRoZSBzaXplIG9mIGBwaWRfdCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKyNkZWZpbmUgU0laRU9GX1BJRF9UIFNJWkVPRl9JTlQKKwogLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBkbCBsaWJyYXJ5ICgtbGRsKS4gICovCiAvKiAjdW5kZWYgSEFWRV9MSUJETCAqLwogCmRpZmYgLS1naXQgYS9QQy9weXRob24ubWsgYi9QQy9weXRob24ubWsKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3NjUxMDYuLjAwMDAwMDAKLS0tIGEvUEMvcHl0aG9uLm1rCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1wcm9qZWN0IDogbjpccHl0aG9uXHB5dGhvbi0xLjUuMVxwY1x3YXRfb3MyXHB5dGhfb3MyLmV4ZSBuOlxweXRob25ccHl0aG9uLTEuJg0KLTUuMVxwY1x3YXRfZG9zXHB5dGhfZG9zLmV4ZSAuU1lNQk9MSUMNCi0NCi0haW5jbHVkZSBuOlxweXRob25ccHl0aG9uLTEuNS4xXHBjXHdhdF9vczJccHl0aF9vczIubWsxDQotIWluY2x1ZGUgbjpccHl0aG9uXHB5dGhvbi0xLjUuMVxwY1x3YXRfZG9zXHB5dGhfZG9zLm1rMQ0KZGlmZiAtLWdpdCBhL1BDL3B5dGhvbjMuZGVmIGIvUEMvcHl0aG9uMy5kZWYKaW5kZXggOTY2ZTZjOS4uMzdlNDU0YiAxMDA2NDQKLS0tIGEvUEMvcHl0aG9uMy5kZWYKKysrIGIvUEMvcHl0aG9uMy5kZWYKQEAgLTEsNjk5ICsxLDcwMSBAQAotOyBXaGVuIGNoYW5naW5nIHRoaXMgZmlsZSwgcnVuIHB5dGhvbjMzZ2VuLnB5Cis7IFdoZW4gY2hhbmdpbmcgdGhpcyBmaWxlLCBydW4gcHl0aG9uMzRnZW4ucHkKIExJQlJBUlkJInB5dGhvbjMiCiBFWFBPUlRTCi0gIFB5QXJnX1BhcnNlPXB5dGhvbjMzLlB5QXJnX1BhcnNlCi0gIFB5QXJnX1BhcnNlVHVwbGU9cHl0aG9uMzMuUHlBcmdfUGFyc2VUdXBsZQotICBQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHM9cHl0aG9uMzMuUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzCi0gIFB5QXJnX1VucGFja1R1cGxlPXB5dGhvbjMzLlB5QXJnX1VucGFja1R1cGxlCi0gIFB5QXJnX1ZhUGFyc2U9cHl0aG9uMzMuUHlBcmdfVmFQYXJzZQotICBQeUFyZ19WYVBhcnNlVHVwbGVBbmRLZXl3b3Jkcz1weXRob24zMy5QeUFyZ19WYVBhcnNlVHVwbGVBbmRLZXl3b3JkcwotICBQeUFyZ19WYWxpZGF0ZUtleXdvcmRBcmd1bWVudHM9cHl0aG9uMzMuUHlBcmdfVmFsaWRhdGVLZXl3b3JkQXJndW1lbnRzCi0gIFB5QmFzZU9iamVjdF9UeXBlPXB5dGhvbjMzLlB5QmFzZU9iamVjdF9UeXBlIERBVEEKLSAgUHlCb29sX0Zyb21Mb25nPXB5dGhvbjMzLlB5Qm9vbF9Gcm9tTG9uZwotICBQeUJvb2xfVHlwZT1weXRob24zMy5QeUJvb2xfVHlwZSBEQVRBCi0gIFB5Qnl0ZUFycmF5SXRlcl9UeXBlPXB5dGhvbjMzLlB5Qnl0ZUFycmF5SXRlcl9UeXBlIERBVEEKLSAgUHlCeXRlQXJyYXlfQXNTdHJpbmc9cHl0aG9uMzMuUHlCeXRlQXJyYXlfQXNTdHJpbmcKLSAgUHlCeXRlQXJyYXlfQ29uY2F0PXB5dGhvbjMzLlB5Qnl0ZUFycmF5X0NvbmNhdAotICBQeUJ5dGVBcnJheV9Gcm9tT2JqZWN0PXB5dGhvbjMzLlB5Qnl0ZUFycmF5X0Zyb21PYmplY3QKLSAgUHlCeXRlQXJyYXlfRnJvbVN0cmluZ0FuZFNpemU9cHl0aG9uMzMuUHlCeXRlQXJyYXlfRnJvbVN0cmluZ0FuZFNpemUKLSAgUHlCeXRlQXJyYXlfUmVzaXplPXB5dGhvbjMzLlB5Qnl0ZUFycmF5X1Jlc2l6ZQotICBQeUJ5dGVBcnJheV9TaXplPXB5dGhvbjMzLlB5Qnl0ZUFycmF5X1NpemUKLSAgUHlCeXRlQXJyYXlfVHlwZT1weXRob24zMy5QeUJ5dGVBcnJheV9UeXBlIERBVEEKLSAgUHlCeXRlc0l0ZXJfVHlwZT1weXRob24zMy5QeUJ5dGVzSXRlcl9UeXBlIERBVEEKLSAgUHlCeXRlc19Bc1N0cmluZz1weXRob24zMy5QeUJ5dGVzX0FzU3RyaW5nCi0gIFB5Qnl0ZXNfQXNTdHJpbmdBbmRTaXplPXB5dGhvbjMzLlB5Qnl0ZXNfQXNTdHJpbmdBbmRTaXplCi0gIFB5Qnl0ZXNfQ29uY2F0PXB5dGhvbjMzLlB5Qnl0ZXNfQ29uY2F0Ci0gIFB5Qnl0ZXNfQ29uY2F0QW5kRGVsPXB5dGhvbjMzLlB5Qnl0ZXNfQ29uY2F0QW5kRGVsCi0gIFB5Qnl0ZXNfRGVjb2RlRXNjYXBlPXB5dGhvbjMzLlB5Qnl0ZXNfRGVjb2RlRXNjYXBlCi0gIFB5Qnl0ZXNfRnJvbUZvcm1hdD1weXRob24zMy5QeUJ5dGVzX0Zyb21Gb3JtYXQKLSAgUHlCeXRlc19Gcm9tRm9ybWF0Vj1weXRob24zMy5QeUJ5dGVzX0Zyb21Gb3JtYXRWCi0gIFB5Qnl0ZXNfRnJvbU9iamVjdD1weXRob24zMy5QeUJ5dGVzX0Zyb21PYmplY3QKLSAgUHlCeXRlc19Gcm9tU3RyaW5nPXB5dGhvbjMzLlB5Qnl0ZXNfRnJvbVN0cmluZwotICBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplPXB5dGhvbjMzLlB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUKLSAgUHlCeXRlc19SZXByPXB5dGhvbjMzLlB5Qnl0ZXNfUmVwcgotICBQeUJ5dGVzX1NpemU9cHl0aG9uMzMuUHlCeXRlc19TaXplCi0gIFB5Qnl0ZXNfVHlwZT1weXRob24zMy5QeUJ5dGVzX1R5cGUgREFUQQotICBQeUNGdW5jdGlvbl9DYWxsPXB5dGhvbjMzLlB5Q0Z1bmN0aW9uX0NhbGwKLSAgUHlDRnVuY3Rpb25fQ2xlYXJGcmVlTGlzdD1weXRob24zMy5QeUNGdW5jdGlvbl9DbGVhckZyZWVMaXN0Ci0gIFB5Q0Z1bmN0aW9uX0dldEZsYWdzPXB5dGhvbjMzLlB5Q0Z1bmN0aW9uX0dldEZsYWdzCi0gIFB5Q0Z1bmN0aW9uX0dldEZ1bmN0aW9uPXB5dGhvbjMzLlB5Q0Z1bmN0aW9uX0dldEZ1bmN0aW9uCi0gIFB5Q0Z1bmN0aW9uX0dldFNlbGY9cHl0aG9uMzMuUHlDRnVuY3Rpb25fR2V0U2VsZgotICBQeUNGdW5jdGlvbl9OZXdFeD1weXRob24zMy5QeUNGdW5jdGlvbl9OZXdFeAotICBQeUNGdW5jdGlvbl9UeXBlPXB5dGhvbjMzLlB5Q0Z1bmN0aW9uX1R5cGUgREFUQQotICBQeUNhbGxJdGVyX05ldz1weXRob24zMy5QeUNhbGxJdGVyX05ldwotICBQeUNhbGxJdGVyX1R5cGU9cHl0aG9uMzMuUHlDYWxsSXRlcl9UeXBlIERBVEEKLSAgUHlDYWxsYWJsZV9DaGVjaz1weXRob24zMy5QeUNhbGxhYmxlX0NoZWNrCi0gIFB5Q2Fwc3VsZV9HZXRDb250ZXh0PXB5dGhvbjMzLlB5Q2Fwc3VsZV9HZXRDb250ZXh0Ci0gIFB5Q2Fwc3VsZV9HZXREZXN0cnVjdG9yPXB5dGhvbjMzLlB5Q2Fwc3VsZV9HZXREZXN0cnVjdG9yCi0gIFB5Q2Fwc3VsZV9HZXROYW1lPXB5dGhvbjMzLlB5Q2Fwc3VsZV9HZXROYW1lCi0gIFB5Q2Fwc3VsZV9HZXRQb2ludGVyPXB5dGhvbjMzLlB5Q2Fwc3VsZV9HZXRQb2ludGVyCi0gIFB5Q2Fwc3VsZV9JbXBvcnQ9cHl0aG9uMzMuUHlDYXBzdWxlX0ltcG9ydAotICBQeUNhcHN1bGVfSXNWYWxpZD1weXRob24zMy5QeUNhcHN1bGVfSXNWYWxpZAotICBQeUNhcHN1bGVfTmV3PXB5dGhvbjMzLlB5Q2Fwc3VsZV9OZXcKLSAgUHlDYXBzdWxlX1NldENvbnRleHQ9cHl0aG9uMzMuUHlDYXBzdWxlX1NldENvbnRleHQKLSAgUHlDYXBzdWxlX1NldERlc3RydWN0b3I9cHl0aG9uMzMuUHlDYXBzdWxlX1NldERlc3RydWN0b3IKLSAgUHlDYXBzdWxlX1NldE5hbWU9cHl0aG9uMzMuUHlDYXBzdWxlX1NldE5hbWUKLSAgUHlDYXBzdWxlX1NldFBvaW50ZXI9cHl0aG9uMzMuUHlDYXBzdWxlX1NldFBvaW50ZXIKLSAgUHlDYXBzdWxlX1R5cGU9cHl0aG9uMzMuUHlDYXBzdWxlX1R5cGUgREFUQQotICBQeUNsYXNzTWV0aG9kRGVzY3JfVHlwZT1weXRob24zMy5QeUNsYXNzTWV0aG9kRGVzY3JfVHlwZSBEQVRBCi0gIFB5Q29kZWNfQmFja3NsYXNoUmVwbGFjZUVycm9ycz1weXRob24zMy5QeUNvZGVjX0JhY2tzbGFzaFJlcGxhY2VFcnJvcnMKLSAgUHlDb2RlY19EZWNvZGU9cHl0aG9uMzMuUHlDb2RlY19EZWNvZGUKLSAgUHlDb2RlY19EZWNvZGVyPXB5dGhvbjMzLlB5Q29kZWNfRGVjb2RlcgotICBQeUNvZGVjX0VuY29kZT1weXRob24zMy5QeUNvZGVjX0VuY29kZQotICBQeUNvZGVjX0VuY29kZXI9cHl0aG9uMzMuUHlDb2RlY19FbmNvZGVyCi0gIFB5Q29kZWNfSWdub3JlRXJyb3JzPXB5dGhvbjMzLlB5Q29kZWNfSWdub3JlRXJyb3JzCi0gIFB5Q29kZWNfSW5jcmVtZW50YWxEZWNvZGVyPXB5dGhvbjMzLlB5Q29kZWNfSW5jcmVtZW50YWxEZWNvZGVyCi0gIFB5Q29kZWNfSW5jcmVtZW50YWxFbmNvZGVyPXB5dGhvbjMzLlB5Q29kZWNfSW5jcmVtZW50YWxFbmNvZGVyCi0gIFB5Q29kZWNfS25vd25FbmNvZGluZz1weXRob24zMy5QeUNvZGVjX0tub3duRW5jb2RpbmcKLSAgUHlDb2RlY19Mb29rdXBFcnJvcj1weXRob24zMy5QeUNvZGVjX0xvb2t1cEVycm9yCi0gIFB5Q29kZWNfUmVnaXN0ZXI9cHl0aG9uMzMuUHlDb2RlY19SZWdpc3RlcgotICBQeUNvZGVjX1JlZ2lzdGVyRXJyb3I9cHl0aG9uMzMuUHlDb2RlY19SZWdpc3RlckVycm9yCi0gIFB5Q29kZWNfUmVwbGFjZUVycm9ycz1weXRob24zMy5QeUNvZGVjX1JlcGxhY2VFcnJvcnMKLSAgUHlDb2RlY19TdHJlYW1SZWFkZXI9cHl0aG9uMzMuUHlDb2RlY19TdHJlYW1SZWFkZXIKLSAgUHlDb2RlY19TdHJlYW1Xcml0ZXI9cHl0aG9uMzMuUHlDb2RlY19TdHJlYW1Xcml0ZXIKLSAgUHlDb2RlY19TdHJpY3RFcnJvcnM9cHl0aG9uMzMuUHlDb2RlY19TdHJpY3RFcnJvcnMKLSAgUHlDb2RlY19YTUxDaGFyUmVmUmVwbGFjZUVycm9ycz1weXRob24zMy5QeUNvZGVjX1hNTENoYXJSZWZSZXBsYWNlRXJyb3JzCi0gIFB5Q29tcGxleF9Gcm9tRG91Ymxlcz1weXRob24zMy5QeUNvbXBsZXhfRnJvbURvdWJsZXMKLSAgUHlDb21wbGV4X0ltYWdBc0RvdWJsZT1weXRob24zMy5QeUNvbXBsZXhfSW1hZ0FzRG91YmxlCi0gIFB5Q29tcGxleF9SZWFsQXNEb3VibGU9cHl0aG9uMzMuUHlDb21wbGV4X1JlYWxBc0RvdWJsZQotICBQeUNvbXBsZXhfVHlwZT1weXRob24zMy5QeUNvbXBsZXhfVHlwZSBEQVRBCi0gIFB5RGVzY3JfTmV3Q2xhc3NNZXRob2Q9cHl0aG9uMzMuUHlEZXNjcl9OZXdDbGFzc01ldGhvZAotICBQeURlc2NyX05ld0dldFNldD1weXRob24zMy5QeURlc2NyX05ld0dldFNldAotICBQeURlc2NyX05ld01lbWJlcj1weXRob24zMy5QeURlc2NyX05ld01lbWJlcgotICBQeURlc2NyX05ld01ldGhvZD1weXRob24zMy5QeURlc2NyX05ld01ldGhvZAotICBQeURpY3RJdGVtc19UeXBlPXB5dGhvbjMzLlB5RGljdEl0ZW1zX1R5cGUgREFUQQotICBQeURpY3RJdGVySXRlbV9UeXBlPXB5dGhvbjMzLlB5RGljdEl0ZXJJdGVtX1R5cGUgREFUQQotICBQeURpY3RJdGVyS2V5X1R5cGU9cHl0aG9uMzMuUHlEaWN0SXRlcktleV9UeXBlIERBVEEKLSAgUHlEaWN0SXRlclZhbHVlX1R5cGU9cHl0aG9uMzMuUHlEaWN0SXRlclZhbHVlX1R5cGUgREFUQQotICBQeURpY3RLZXlzX1R5cGU9cHl0aG9uMzMuUHlEaWN0S2V5c19UeXBlIERBVEEKLSAgUHlEaWN0UHJveHlfTmV3PXB5dGhvbjMzLlB5RGljdFByb3h5X05ldwotICBQeURpY3RQcm94eV9UeXBlPXB5dGhvbjMzLlB5RGljdFByb3h5X1R5cGUgREFUQQotICBQeURpY3RWYWx1ZXNfVHlwZT1weXRob24zMy5QeURpY3RWYWx1ZXNfVHlwZSBEQVRBCi0gIFB5RGljdF9DbGVhcj1weXRob24zMy5QeURpY3RfQ2xlYXIKLSAgUHlEaWN0X0NvbnRhaW5zPXB5dGhvbjMzLlB5RGljdF9Db250YWlucwotICBQeURpY3RfQ29weT1weXRob24zMy5QeURpY3RfQ29weQotICBQeURpY3RfRGVsSXRlbT1weXRob24zMy5QeURpY3RfRGVsSXRlbQotICBQeURpY3RfRGVsSXRlbVN0cmluZz1weXRob24zMy5QeURpY3RfRGVsSXRlbVN0cmluZwotICBQeURpY3RfR2V0SXRlbT1weXRob24zMy5QeURpY3RfR2V0SXRlbQotICBQeURpY3RfR2V0SXRlbVN0cmluZz1weXRob24zMy5QeURpY3RfR2V0SXRlbVN0cmluZwotICBQeURpY3RfR2V0SXRlbVdpdGhFcnJvcj1weXRob24zMy5QeURpY3RfR2V0SXRlbVdpdGhFcnJvcgotICBQeURpY3RfSXRlbXM9cHl0aG9uMzMuUHlEaWN0X0l0ZW1zCi0gIFB5RGljdF9LZXlzPXB5dGhvbjMzLlB5RGljdF9LZXlzCi0gIFB5RGljdF9NZXJnZT1weXRob24zMy5QeURpY3RfTWVyZ2UKLSAgUHlEaWN0X01lcmdlRnJvbVNlcTI9cHl0aG9uMzMuUHlEaWN0X01lcmdlRnJvbVNlcTIKLSAgUHlEaWN0X05ldz1weXRob24zMy5QeURpY3RfTmV3Ci0gIFB5RGljdF9OZXh0PXB5dGhvbjMzLlB5RGljdF9OZXh0Ci0gIFB5RGljdF9TZXRJdGVtPXB5dGhvbjMzLlB5RGljdF9TZXRJdGVtCi0gIFB5RGljdF9TZXRJdGVtU3RyaW5nPXB5dGhvbjMzLlB5RGljdF9TZXRJdGVtU3RyaW5nCi0gIFB5RGljdF9TaXplPXB5dGhvbjMzLlB5RGljdF9TaXplCi0gIFB5RGljdF9UeXBlPXB5dGhvbjMzLlB5RGljdF9UeXBlIERBVEEKLSAgUHlEaWN0X1VwZGF0ZT1weXRob24zMy5QeURpY3RfVXBkYXRlCi0gIFB5RGljdF9WYWx1ZXM9cHl0aG9uMzMuUHlEaWN0X1ZhbHVlcwotICBQeUVsbGlwc2lzX1R5cGU9cHl0aG9uMzMuUHlFbGxpcHNpc19UeXBlIERBVEEKLSAgUHlFbnVtX1R5cGU9cHl0aG9uMzMuUHlFbnVtX1R5cGUgREFUQQotICBQeUVycl9CYWRBcmd1bWVudD1weXRob24zMy5QeUVycl9CYWRBcmd1bWVudAotICBQeUVycl9CYWRJbnRlcm5hbENhbGw9cHl0aG9uMzMuUHlFcnJfQmFkSW50ZXJuYWxDYWxsCi0gIFB5RXJyX0NoZWNrU2lnbmFscz1weXRob24zMy5QeUVycl9DaGVja1NpZ25hbHMKLSAgUHlFcnJfQ2xlYXI9cHl0aG9uMzMuUHlFcnJfQ2xlYXIKLSAgUHlFcnJfRGlzcGxheT1weXRob24zMy5QeUVycl9EaXNwbGF5Ci0gIFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXM9cHl0aG9uMzMuUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcwotICBQeUVycl9GZXRjaD1weXRob24zMy5QeUVycl9GZXRjaAotICBQeUVycl9Gb3JtYXQ9cHl0aG9uMzMuUHlFcnJfRm9ybWF0Ci0gIFB5RXJyX0dpdmVuRXhjZXB0aW9uTWF0Y2hlcz1weXRob24zMy5QeUVycl9HaXZlbkV4Y2VwdGlvbk1hdGNoZXMKLSAgUHlFcnJfTmV3RXhjZXB0aW9uPXB5dGhvbjMzLlB5RXJyX05ld0V4Y2VwdGlvbgotICBQeUVycl9OZXdFeGNlcHRpb25XaXRoRG9jPXB5dGhvbjMzLlB5RXJyX05ld0V4Y2VwdGlvbldpdGhEb2MKLSAgUHlFcnJfTm9NZW1vcnk9cHl0aG9uMzMuUHlFcnJfTm9NZW1vcnkKLSAgUHlFcnJfTm9ybWFsaXplRXhjZXB0aW9uPXB5dGhvbjMzLlB5RXJyX05vcm1hbGl6ZUV4Y2VwdGlvbgotICBQeUVycl9PY2N1cnJlZD1weXRob24zMy5QeUVycl9PY2N1cnJlZAotICBQeUVycl9QcmludD1weXRob24zMy5QeUVycl9QcmludAotICBQeUVycl9QcmludEV4PXB5dGhvbjMzLlB5RXJyX1ByaW50RXgKLSAgUHlFcnJfUHJvZ3JhbVRleHQ9cHl0aG9uMzMuUHlFcnJfUHJvZ3JhbVRleHQKLSAgUHlFcnJfUmVzdG9yZT1weXRob24zMy5QeUVycl9SZXN0b3JlCi0gIFB5RXJyX1NldEZyb21FcnJubz1weXRob24zMy5QeUVycl9TZXRGcm9tRXJybm8KLSAgUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lPXB5dGhvbjMzLlB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZQotICBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWVPYmplY3Q9cHl0aG9uMzMuUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lT2JqZWN0Ci0gIFB5RXJyX1NldEludGVycnVwdD1weXRob24zMy5QeUVycl9TZXRJbnRlcnJ1cHQKLSAgUHlFcnJfU2V0Tm9uZT1weXRob24zMy5QeUVycl9TZXROb25lCi0gIFB5RXJyX1NldE9iamVjdD1weXRob24zMy5QeUVycl9TZXRPYmplY3QKLSAgUHlFcnJfU2V0U3RyaW5nPXB5dGhvbjMzLlB5RXJyX1NldFN0cmluZwotICBQeUVycl9TeW50YXhMb2NhdGlvbj1weXRob24zMy5QeUVycl9TeW50YXhMb2NhdGlvbgotICBQeUVycl9XYXJuRXg9cHl0aG9uMzMuUHlFcnJfV2FybkV4Ci0gIFB5RXJyX1dhcm5FeHBsaWNpdD1weXRob24zMy5QeUVycl9XYXJuRXhwbGljaXQKLSAgUHlFcnJfV2FybkZvcm1hdD1weXRob24zMy5QeUVycl9XYXJuRm9ybWF0Ci0gIFB5RXJyX1dyaXRlVW5yYWlzYWJsZT1weXRob24zMy5QeUVycl9Xcml0ZVVucmFpc2FibGUKLSAgUHlFdmFsX0FjcXVpcmVMb2NrPXB5dGhvbjMzLlB5RXZhbF9BY3F1aXJlTG9jawotICBQeUV2YWxfQWNxdWlyZVRocmVhZD1weXRob24zMy5QeUV2YWxfQWNxdWlyZVRocmVhZAotICBQeUV2YWxfQ2FsbEZ1bmN0aW9uPXB5dGhvbjMzLlB5RXZhbF9DYWxsRnVuY3Rpb24KLSAgUHlFdmFsX0NhbGxNZXRob2Q9cHl0aG9uMzMuUHlFdmFsX0NhbGxNZXRob2QKLSAgUHlFdmFsX0NhbGxPYmplY3RXaXRoS2V5d29yZHM9cHl0aG9uMzMuUHlFdmFsX0NhbGxPYmplY3RXaXRoS2V5d29yZHMKLSAgUHlFdmFsX0V2YWxDb2RlPXB5dGhvbjMzLlB5RXZhbF9FdmFsQ29kZQotICBQeUV2YWxfRXZhbENvZGVFeD1weXRob24zMy5QeUV2YWxfRXZhbENvZGVFeAotICBQeUV2YWxfRXZhbEZyYW1lPXB5dGhvbjMzLlB5RXZhbF9FdmFsRnJhbWUKLSAgUHlFdmFsX0V2YWxGcmFtZUV4PXB5dGhvbjMzLlB5RXZhbF9FdmFsRnJhbWVFeAotICBQeUV2YWxfR2V0QnVpbHRpbnM9cHl0aG9uMzMuUHlFdmFsX0dldEJ1aWx0aW5zCi0gIFB5RXZhbF9HZXRDYWxsU3RhdHM9cHl0aG9uMzMuUHlFdmFsX0dldENhbGxTdGF0cwotICBQeUV2YWxfR2V0RnJhbWU9cHl0aG9uMzMuUHlFdmFsX0dldEZyYW1lCi0gIFB5RXZhbF9HZXRGdW5jRGVzYz1weXRob24zMy5QeUV2YWxfR2V0RnVuY0Rlc2MKLSAgUHlFdmFsX0dldEZ1bmNOYW1lPXB5dGhvbjMzLlB5RXZhbF9HZXRGdW5jTmFtZQotICBQeUV2YWxfR2V0R2xvYmFscz1weXRob24zMy5QeUV2YWxfR2V0R2xvYmFscwotICBQeUV2YWxfR2V0TG9jYWxzPXB5dGhvbjMzLlB5RXZhbF9HZXRMb2NhbHMKLSAgUHlFdmFsX0luaXRUaHJlYWRzPXB5dGhvbjMzLlB5RXZhbF9Jbml0VGhyZWFkcwotICBQeUV2YWxfUmVJbml0VGhyZWFkcz1weXRob24zMy5QeUV2YWxfUmVJbml0VGhyZWFkcwotICBQeUV2YWxfUmVsZWFzZUxvY2s9cHl0aG9uMzMuUHlFdmFsX1JlbGVhc2VMb2NrCi0gIFB5RXZhbF9SZWxlYXNlVGhyZWFkPXB5dGhvbjMzLlB5RXZhbF9SZWxlYXNlVGhyZWFkCi0gIFB5RXZhbF9SZXN0b3JlVGhyZWFkPXB5dGhvbjMzLlB5RXZhbF9SZXN0b3JlVGhyZWFkCi0gIFB5RXZhbF9TYXZlVGhyZWFkPXB5dGhvbjMzLlB5RXZhbF9TYXZlVGhyZWFkCi0gIFB5RXZhbF9UaHJlYWRzSW5pdGlhbGl6ZWQ9cHl0aG9uMzMuUHlFdmFsX1RocmVhZHNJbml0aWFsaXplZAotICBQeUV4Y19Bcml0aG1ldGljRXJyb3I9cHl0aG9uMzMuUHlFeGNfQXJpdGhtZXRpY0Vycm9yIERBVEEKLSAgUHlFeGNfQXNzZXJ0aW9uRXJyb3I9cHl0aG9uMzMuUHlFeGNfQXNzZXJ0aW9uRXJyb3IgREFUQQotICBQeUV4Y19BdHRyaWJ1dGVFcnJvcj1weXRob24zMy5QeUV4Y19BdHRyaWJ1dGVFcnJvciBEQVRBCi0gIFB5RXhjX0Jhc2VFeGNlcHRpb249cHl0aG9uMzMuUHlFeGNfQmFzZUV4Y2VwdGlvbiBEQVRBCi0gIFB5RXhjX0J1ZmZlckVycm9yPXB5dGhvbjMzLlB5RXhjX0J1ZmZlckVycm9yIERBVEEKLSAgUHlFeGNfQnl0ZXNXYXJuaW5nPXB5dGhvbjMzLlB5RXhjX0J5dGVzV2FybmluZyBEQVRBCi0gIFB5RXhjX0RlcHJlY2F0aW9uV2FybmluZz1weXRob24zMy5QeUV4Y19EZXByZWNhdGlvbldhcm5pbmcgREFUQQotICBQeUV4Y19FT0ZFcnJvcj1weXRob24zMy5QeUV4Y19FT0ZFcnJvciBEQVRBCi0gIFB5RXhjX0Vudmlyb25tZW50RXJyb3I9cHl0aG9uMzMuUHlFeGNfRW52aXJvbm1lbnRFcnJvciBEQVRBCi0gIFB5RXhjX0V4Y2VwdGlvbj1weXRob24zMy5QeUV4Y19FeGNlcHRpb24gREFUQQotICBQeUV4Y19GbG9hdGluZ1BvaW50RXJyb3I9cHl0aG9uMzMuUHlFeGNfRmxvYXRpbmdQb2ludEVycm9yIERBVEEKLSAgUHlFeGNfRnV0dXJlV2FybmluZz1weXRob24zMy5QeUV4Y19GdXR1cmVXYXJuaW5nIERBVEEKLSAgUHlFeGNfR2VuZXJhdG9yRXhpdD1weXRob24zMy5QeUV4Y19HZW5lcmF0b3JFeGl0IERBVEEKLSAgUHlFeGNfSU9FcnJvcj1weXRob24zMy5QeUV4Y19JT0Vycm9yIERBVEEKLSAgUHlFeGNfSW1wb3J0RXJyb3I9cHl0aG9uMzMuUHlFeGNfSW1wb3J0RXJyb3IgREFUQQotICBQeUV4Y19JbXBvcnRXYXJuaW5nPXB5dGhvbjMzLlB5RXhjX0ltcG9ydFdhcm5pbmcgREFUQQotICBQeUV4Y19JbmRlbnRhdGlvbkVycm9yPXB5dGhvbjMzLlB5RXhjX0luZGVudGF0aW9uRXJyb3IgREFUQQotICBQeUV4Y19JbmRleEVycm9yPXB5dGhvbjMzLlB5RXhjX0luZGV4RXJyb3IgREFUQQotICBQeUV4Y19LZXlFcnJvcj1weXRob24zMy5QeUV4Y19LZXlFcnJvciBEQVRBCi0gIFB5RXhjX0tleWJvYXJkSW50ZXJydXB0PXB5dGhvbjMzLlB5RXhjX0tleWJvYXJkSW50ZXJydXB0IERBVEEKLSAgUHlFeGNfTG9va3VwRXJyb3I9cHl0aG9uMzMuUHlFeGNfTG9va3VwRXJyb3IgREFUQQotICBQeUV4Y19NZW1vcnlFcnJvcj1weXRob24zMy5QeUV4Y19NZW1vcnlFcnJvciBEQVRBCi0gIFB5RXhjX01lbW9yeUVycm9ySW5zdD1weXRob24zMy5QeUV4Y19NZW1vcnlFcnJvckluc3QgREFUQQotICBQeUV4Y19OYW1lRXJyb3I9cHl0aG9uMzMuUHlFeGNfTmFtZUVycm9yIERBVEEKLSAgUHlFeGNfTm90SW1wbGVtZW50ZWRFcnJvcj1weXRob24zMy5QeUV4Y19Ob3RJbXBsZW1lbnRlZEVycm9yIERBVEEKLSAgUHlFeGNfT1NFcnJvcj1weXRob24zMy5QeUV4Y19PU0Vycm9yIERBVEEKLSAgUHlFeGNfT3ZlcmZsb3dFcnJvcj1weXRob24zMy5QeUV4Y19PdmVyZmxvd0Vycm9yIERBVEEKLSAgUHlFeGNfUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZz1weXRob24zMy5QeUV4Y19QZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nIERBVEEKLSAgUHlFeGNfUmVjdXJzaW9uRXJyb3JJbnN0PXB5dGhvbjMzLlB5RXhjX1JlY3Vyc2lvbkVycm9ySW5zdCBEQVRBCi0gIFB5RXhjX1JlZmVyZW5jZUVycm9yPXB5dGhvbjMzLlB5RXhjX1JlZmVyZW5jZUVycm9yIERBVEEKLSAgUHlFeGNfUnVudGltZUVycm9yPXB5dGhvbjMzLlB5RXhjX1J1bnRpbWVFcnJvciBEQVRBCi0gIFB5RXhjX1J1bnRpbWVXYXJuaW5nPXB5dGhvbjMzLlB5RXhjX1J1bnRpbWVXYXJuaW5nIERBVEEKLSAgUHlFeGNfU3RvcEl0ZXJhdGlvbj1weXRob24zMy5QeUV4Y19TdG9wSXRlcmF0aW9uIERBVEEKLSAgUHlFeGNfU3ludGF4RXJyb3I9cHl0aG9uMzMuUHlFeGNfU3ludGF4RXJyb3IgREFUQQotICBQeUV4Y19TeW50YXhXYXJuaW5nPXB5dGhvbjMzLlB5RXhjX1N5bnRheFdhcm5pbmcgREFUQQotICBQeUV4Y19TeXN0ZW1FcnJvcj1weXRob24zMy5QeUV4Y19TeXN0ZW1FcnJvciBEQVRBCi0gIFB5RXhjX1N5c3RlbUV4aXQ9cHl0aG9uMzMuUHlFeGNfU3lzdGVtRXhpdCBEQVRBCi0gIFB5RXhjX1RhYkVycm9yPXB5dGhvbjMzLlB5RXhjX1RhYkVycm9yIERBVEEKLSAgUHlFeGNfVHlwZUVycm9yPXB5dGhvbjMzLlB5RXhjX1R5cGVFcnJvciBEQVRBCi0gIFB5RXhjX1VuYm91bmRMb2NhbEVycm9yPXB5dGhvbjMzLlB5RXhjX1VuYm91bmRMb2NhbEVycm9yIERBVEEKLSAgUHlFeGNfVW5pY29kZURlY29kZUVycm9yPXB5dGhvbjMzLlB5RXhjX1VuaWNvZGVEZWNvZGVFcnJvciBEQVRBCi0gIFB5RXhjX1VuaWNvZGVFbmNvZGVFcnJvcj1weXRob24zMy5QeUV4Y19Vbmljb2RlRW5jb2RlRXJyb3IgREFUQQotICBQeUV4Y19Vbmljb2RlRXJyb3I9cHl0aG9uMzMuUHlFeGNfVW5pY29kZUVycm9yIERBVEEKLSAgUHlFeGNfVW5pY29kZVRyYW5zbGF0ZUVycm9yPXB5dGhvbjMzLlB5RXhjX1VuaWNvZGVUcmFuc2xhdGVFcnJvciBEQVRBCi0gIFB5RXhjX1VuaWNvZGVXYXJuaW5nPXB5dGhvbjMzLlB5RXhjX1VuaWNvZGVXYXJuaW5nIERBVEEKLSAgUHlFeGNfVXNlcldhcm5pbmc9cHl0aG9uMzMuUHlFeGNfVXNlcldhcm5pbmcgREFUQQotICBQeUV4Y19WYWx1ZUVycm9yPXB5dGhvbjMzLlB5RXhjX1ZhbHVlRXJyb3IgREFUQQotICBQeUV4Y19XYXJuaW5nPXB5dGhvbjMzLlB5RXhjX1dhcm5pbmcgREFUQQotICBQeUV4Y19aZXJvRGl2aXNpb25FcnJvcj1weXRob24zMy5QeUV4Y19aZXJvRGl2aXNpb25FcnJvciBEQVRBCi0gIFB5RXhjZXB0aW9uX0dldENhdXNlPXB5dGhvbjMzLlB5RXhjZXB0aW9uX0dldENhdXNlCi0gIFB5RXhjZXB0aW9uX0dldENvbnRleHQ9cHl0aG9uMzMuUHlFeGNlcHRpb25fR2V0Q29udGV4dAotICBQeUV4Y2VwdGlvbl9HZXRUcmFjZWJhY2s9cHl0aG9uMzMuUHlFeGNlcHRpb25fR2V0VHJhY2ViYWNrCi0gIFB5RXhjZXB0aW9uX1NldENhdXNlPXB5dGhvbjMzLlB5RXhjZXB0aW9uX1NldENhdXNlCi0gIFB5RXhjZXB0aW9uX1NldENvbnRleHQ9cHl0aG9uMzMuUHlFeGNlcHRpb25fU2V0Q29udGV4dAotICBQeUV4Y2VwdGlvbl9TZXRUcmFjZWJhY2s9cHl0aG9uMzMuUHlFeGNlcHRpb25fU2V0VHJhY2ViYWNrCi0gIFB5RmlsZV9Gcm9tRmQ9cHl0aG9uMzMuUHlGaWxlX0Zyb21GZAotICBQeUZpbGVfR2V0TGluZT1weXRob24zMy5QeUZpbGVfR2V0TGluZQotICBQeUZpbGVfV3JpdGVPYmplY3Q9cHl0aG9uMzMuUHlGaWxlX1dyaXRlT2JqZWN0Ci0gIFB5RmlsZV9Xcml0ZVN0cmluZz1weXRob24zMy5QeUZpbGVfV3JpdGVTdHJpbmcKLSAgUHlGaWx0ZXJfVHlwZT1weXRob24zMy5QeUZpbHRlcl9UeXBlIERBVEEKLSAgUHlGbG9hdF9Bc0RvdWJsZT1weXRob24zMy5QeUZsb2F0X0FzRG91YmxlCi0gIFB5RmxvYXRfRnJvbURvdWJsZT1weXRob24zMy5QeUZsb2F0X0Zyb21Eb3VibGUKLSAgUHlGbG9hdF9Gcm9tU3RyaW5nPXB5dGhvbjMzLlB5RmxvYXRfRnJvbVN0cmluZwotICBQeUZsb2F0X0dldEluZm89cHl0aG9uMzMuUHlGbG9hdF9HZXRJbmZvCi0gIFB5RmxvYXRfR2V0TWF4PXB5dGhvbjMzLlB5RmxvYXRfR2V0TWF4Ci0gIFB5RmxvYXRfR2V0TWluPXB5dGhvbjMzLlB5RmxvYXRfR2V0TWluCi0gIFB5RmxvYXRfVHlwZT1weXRob24zMy5QeUZsb2F0X1R5cGUgREFUQQotICBQeUZyb3plblNldF9OZXc9cHl0aG9uMzMuUHlGcm96ZW5TZXRfTmV3Ci0gIFB5RnJvemVuU2V0X1R5cGU9cHl0aG9uMzMuUHlGcm96ZW5TZXRfVHlwZSBEQVRBCi0gIFB5R0NfQ29sbGVjdD1weXRob24zMy5QeUdDX0NvbGxlY3QKLSAgUHlHSUxTdGF0ZV9FbnN1cmU9cHl0aG9uMzMuUHlHSUxTdGF0ZV9FbnN1cmUKLSAgUHlHSUxTdGF0ZV9HZXRUaGlzVGhyZWFkU3RhdGU9cHl0aG9uMzMuUHlHSUxTdGF0ZV9HZXRUaGlzVGhyZWFkU3RhdGUKLSAgUHlHSUxTdGF0ZV9SZWxlYXNlPXB5dGhvbjMzLlB5R0lMU3RhdGVfUmVsZWFzZQotICBQeUdldFNldERlc2NyX1R5cGU9cHl0aG9uMzMuUHlHZXRTZXREZXNjcl9UeXBlIERBVEEKLSAgUHlJbXBvcnRfQWRkTW9kdWxlPXB5dGhvbjMzLlB5SW1wb3J0X0FkZE1vZHVsZQotICBQeUltcG9ydF9BcHBlbmRJbml0dGFiPXB5dGhvbjMzLlB5SW1wb3J0X0FwcGVuZEluaXR0YWIKLSAgUHlJbXBvcnRfQ2xlYW51cD1weXRob24zMy5QeUltcG9ydF9DbGVhbnVwCi0gIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlPXB5dGhvbjMzLlB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlCi0gIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlRXg9cHl0aG9uMzMuUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVFeAotICBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZVdpdGhQYXRobmFtZXM9cHl0aG9uMzMuUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVXaXRoUGF0aG5hbWVzCi0gIFB5SW1wb3J0X0dldEltcG9ydGVyPXB5dGhvbjMzLlB5SW1wb3J0X0dldEltcG9ydGVyCi0gIFB5SW1wb3J0X0dldE1hZ2ljTnVtYmVyPXB5dGhvbjMzLlB5SW1wb3J0X0dldE1hZ2ljTnVtYmVyCi0gIFB5SW1wb3J0X0dldE1hZ2ljVGFnPXB5dGhvbjMzLlB5SW1wb3J0X0dldE1hZ2ljVGFnCi0gIFB5SW1wb3J0X0dldE1vZHVsZURpY3Q9cHl0aG9uMzMuUHlJbXBvcnRfR2V0TW9kdWxlRGljdAotICBQeUltcG9ydF9JbXBvcnQ9cHl0aG9uMzMuUHlJbXBvcnRfSW1wb3J0Ci0gIFB5SW1wb3J0X0ltcG9ydEZyb3plbk1vZHVsZT1weXRob24zMy5QeUltcG9ydF9JbXBvcnRGcm96ZW5Nb2R1bGUKLSAgUHlJbXBvcnRfSW1wb3J0TW9kdWxlPXB5dGhvbjMzLlB5SW1wb3J0X0ltcG9ydE1vZHVsZQotICBQeUltcG9ydF9JbXBvcnRNb2R1bGVMZXZlbD1weXRob24zMy5QeUltcG9ydF9JbXBvcnRNb2R1bGVMZXZlbAotICBQeUltcG9ydF9JbXBvcnRNb2R1bGVOb0Jsb2NrPXB5dGhvbjMzLlB5SW1wb3J0X0ltcG9ydE1vZHVsZU5vQmxvY2sKLSAgUHlJbXBvcnRfUmVsb2FkTW9kdWxlPXB5dGhvbjMzLlB5SW1wb3J0X1JlbG9hZE1vZHVsZQotICBQeUludGVycHJldGVyU3RhdGVfQ2xlYXI9cHl0aG9uMzMuUHlJbnRlcnByZXRlclN0YXRlX0NsZWFyCi0gIFB5SW50ZXJwcmV0ZXJTdGF0ZV9EZWxldGU9cHl0aG9uMzMuUHlJbnRlcnByZXRlclN0YXRlX0RlbGV0ZQotICBQeUludGVycHJldGVyU3RhdGVfTmV3PXB5dGhvbjMzLlB5SW50ZXJwcmV0ZXJTdGF0ZV9OZXcKLSAgUHlJdGVyX05leHQ9cHl0aG9uMzMuUHlJdGVyX05leHQKLSAgUHlMaXN0SXRlcl9UeXBlPXB5dGhvbjMzLlB5TGlzdEl0ZXJfVHlwZSBEQVRBCi0gIFB5TGlzdFJldkl0ZXJfVHlwZT1weXRob24zMy5QeUxpc3RSZXZJdGVyX1R5cGUgREFUQQotICBQeUxpc3RfQXBwZW5kPXB5dGhvbjMzLlB5TGlzdF9BcHBlbmQKLSAgUHlMaXN0X0FzVHVwbGU9cHl0aG9uMzMuUHlMaXN0X0FzVHVwbGUKLSAgUHlMaXN0X0dldEl0ZW09cHl0aG9uMzMuUHlMaXN0X0dldEl0ZW0KLSAgUHlMaXN0X0dldFNsaWNlPXB5dGhvbjMzLlB5TGlzdF9HZXRTbGljZQotICBQeUxpc3RfSW5zZXJ0PXB5dGhvbjMzLlB5TGlzdF9JbnNlcnQKLSAgUHlMaXN0X05ldz1weXRob24zMy5QeUxpc3RfTmV3Ci0gIFB5TGlzdF9SZXZlcnNlPXB5dGhvbjMzLlB5TGlzdF9SZXZlcnNlCi0gIFB5TGlzdF9TZXRJdGVtPXB5dGhvbjMzLlB5TGlzdF9TZXRJdGVtCi0gIFB5TGlzdF9TZXRTbGljZT1weXRob24zMy5QeUxpc3RfU2V0U2xpY2UKLSAgUHlMaXN0X1NpemU9cHl0aG9uMzMuUHlMaXN0X1NpemUKLSAgUHlMaXN0X1NvcnQ9cHl0aG9uMzMuUHlMaXN0X1NvcnQKLSAgUHlMaXN0X1R5cGU9cHl0aG9uMzMuUHlMaXN0X1R5cGUgREFUQQotICBQeUxvbmdSYW5nZUl0ZXJfVHlwZT1weXRob24zMy5QeUxvbmdSYW5nZUl0ZXJfVHlwZSBEQVRBCi0gIFB5TG9uZ19Bc0RvdWJsZT1weXRob24zMy5QeUxvbmdfQXNEb3VibGUKLSAgUHlMb25nX0FzTG9uZz1weXRob24zMy5QeUxvbmdfQXNMb25nCi0gIFB5TG9uZ19Bc0xvbmdBbmRPdmVyZmxvdz1weXRob24zMy5QeUxvbmdfQXNMb25nQW5kT3ZlcmZsb3cKLSAgUHlMb25nX0FzTG9uZ0xvbmc9cHl0aG9uMzMuUHlMb25nX0FzTG9uZ0xvbmcKLSAgUHlMb25nX0FzTG9uZ0xvbmdBbmRPdmVyZmxvdz1weXRob24zMy5QeUxvbmdfQXNMb25nTG9uZ0FuZE92ZXJmbG93Ci0gIFB5TG9uZ19Bc1NpemVfdD1weXRob24zMy5QeUxvbmdfQXNTaXplX3QKLSAgUHlMb25nX0FzU3NpemVfdD1weXRob24zMy5QeUxvbmdfQXNTc2l6ZV90Ci0gIFB5TG9uZ19Bc1Vuc2lnbmVkTG9uZz1weXRob24zMy5QeUxvbmdfQXNVbnNpZ25lZExvbmcKLSAgUHlMb25nX0FzVW5zaWduZWRMb25nTG9uZz1weXRob24zMy5QeUxvbmdfQXNVbnNpZ25lZExvbmdMb25nCi0gIFB5TG9uZ19Bc1Vuc2lnbmVkTG9uZ0xvbmdNYXNrPXB5dGhvbjMzLlB5TG9uZ19Bc1Vuc2lnbmVkTG9uZ0xvbmdNYXNrCi0gIFB5TG9uZ19Bc1Vuc2lnbmVkTG9uZ01hc2s9cHl0aG9uMzMuUHlMb25nX0FzVW5zaWduZWRMb25nTWFzawotICBQeUxvbmdfQXNWb2lkUHRyPXB5dGhvbjMzLlB5TG9uZ19Bc1ZvaWRQdHIKLSAgUHlMb25nX0Zyb21Eb3VibGU9cHl0aG9uMzMuUHlMb25nX0Zyb21Eb3VibGUKLSAgUHlMb25nX0Zyb21Mb25nPXB5dGhvbjMzLlB5TG9uZ19Gcm9tTG9uZwotICBQeUxvbmdfRnJvbUxvbmdMb25nPXB5dGhvbjMzLlB5TG9uZ19Gcm9tTG9uZ0xvbmcKLSAgUHlMb25nX0Zyb21TaXplX3Q9cHl0aG9uMzMuUHlMb25nX0Zyb21TaXplX3QKLSAgUHlMb25nX0Zyb21Tc2l6ZV90PXB5dGhvbjMzLlB5TG9uZ19Gcm9tU3NpemVfdAotICBQeUxvbmdfRnJvbVN0cmluZz1weXRob24zMy5QeUxvbmdfRnJvbVN0cmluZwotICBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZz1weXRob24zMy5QeUxvbmdfRnJvbVVuc2lnbmVkTG9uZwotICBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZ0xvbmc9cHl0aG9uMzMuUHlMb25nX0Zyb21VbnNpZ25lZExvbmdMb25nCi0gIFB5TG9uZ19Gcm9tVm9pZFB0cj1weXRob24zMy5QeUxvbmdfRnJvbVZvaWRQdHIKLSAgUHlMb25nX0dldEluZm89cHl0aG9uMzMuUHlMb25nX0dldEluZm8KLSAgUHlMb25nX1R5cGU9cHl0aG9uMzMuUHlMb25nX1R5cGUgREFUQQotICBQeU1hcF9UeXBlPXB5dGhvbjMzLlB5TWFwX1R5cGUgREFUQQotICBQeU1hcHBpbmdfQ2hlY2s9cHl0aG9uMzMuUHlNYXBwaW5nX0NoZWNrCi0gIFB5TWFwcGluZ19HZXRJdGVtU3RyaW5nPXB5dGhvbjMzLlB5TWFwcGluZ19HZXRJdGVtU3RyaW5nCi0gIFB5TWFwcGluZ19IYXNLZXk9cHl0aG9uMzMuUHlNYXBwaW5nX0hhc0tleQotICBQeU1hcHBpbmdfSGFzS2V5U3RyaW5nPXB5dGhvbjMzLlB5TWFwcGluZ19IYXNLZXlTdHJpbmcKLSAgUHlNYXBwaW5nX0l0ZW1zPXB5dGhvbjMzLlB5TWFwcGluZ19JdGVtcwotICBQeU1hcHBpbmdfS2V5cz1weXRob24zMy5QeU1hcHBpbmdfS2V5cwotICBQeU1hcHBpbmdfTGVuZ3RoPXB5dGhvbjMzLlB5TWFwcGluZ19MZW5ndGgKLSAgUHlNYXBwaW5nX1NldEl0ZW1TdHJpbmc9cHl0aG9uMzMuUHlNYXBwaW5nX1NldEl0ZW1TdHJpbmcKLSAgUHlNYXBwaW5nX1NpemU9cHl0aG9uMzMuUHlNYXBwaW5nX1NpemUKLSAgUHlNYXBwaW5nX1ZhbHVlcz1weXRob24zMy5QeU1hcHBpbmdfVmFsdWVzCi0gIFB5TWVtX0ZyZWU9cHl0aG9uMzMuUHlNZW1fRnJlZQotICBQeU1lbV9NYWxsb2M9cHl0aG9uMzMuUHlNZW1fTWFsbG9jCi0gIFB5TWVtX1JlYWxsb2M9cHl0aG9uMzMuUHlNZW1fUmVhbGxvYwotICBQeU1lbWJlckRlc2NyX1R5cGU9cHl0aG9uMzMuUHlNZW1iZXJEZXNjcl9UeXBlIERBVEEKLSAgUHlNZW1vcnlWaWV3X0Zyb21PYmplY3Q9cHl0aG9uMzMuUHlNZW1vcnlWaWV3X0Zyb21PYmplY3QKLSAgUHlNZW1vcnlWaWV3X0dldENvbnRpZ3VvdXM9cHl0aG9uMzMuUHlNZW1vcnlWaWV3X0dldENvbnRpZ3VvdXMKLSAgUHlNZW1vcnlWaWV3X1R5cGU9cHl0aG9uMzMuUHlNZW1vcnlWaWV3X1R5cGUgREFUQQotICBQeU1ldGhvZERlc2NyX1R5cGU9cHl0aG9uMzMuUHlNZXRob2REZXNjcl9UeXBlIERBVEEKLSAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQ9cHl0aG9uMzMuUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQKLSAgUHlNb2R1bGVfQWRkT2JqZWN0PXB5dGhvbjMzLlB5TW9kdWxlX0FkZE9iamVjdAotICBQeU1vZHVsZV9BZGRTdHJpbmdDb25zdGFudD1weXRob24zMy5QeU1vZHVsZV9BZGRTdHJpbmdDb25zdGFudAotICBQeU1vZHVsZV9DcmVhdGUyPXB5dGhvbjMzLlB5TW9kdWxlX0NyZWF0ZTIKLSAgUHlNb2R1bGVfR2V0RGVmPXB5dGhvbjMzLlB5TW9kdWxlX0dldERlZgotICBQeU1vZHVsZV9HZXREaWN0PXB5dGhvbjMzLlB5TW9kdWxlX0dldERpY3QKLSAgUHlNb2R1bGVfR2V0RmlsZW5hbWU9cHl0aG9uMzMuUHlNb2R1bGVfR2V0RmlsZW5hbWUKLSAgUHlNb2R1bGVfR2V0RmlsZW5hbWVPYmplY3Q9cHl0aG9uMzMuUHlNb2R1bGVfR2V0RmlsZW5hbWVPYmplY3QKLSAgUHlNb2R1bGVfR2V0TmFtZT1weXRob24zMy5QeU1vZHVsZV9HZXROYW1lCi0gIFB5TW9kdWxlX0dldFN0YXRlPXB5dGhvbjMzLlB5TW9kdWxlX0dldFN0YXRlCi0gIFB5TW9kdWxlX05ldz1weXRob24zMy5QeU1vZHVsZV9OZXcKLSAgUHlNb2R1bGVfVHlwZT1weXRob24zMy5QeU1vZHVsZV9UeXBlIERBVEEKLSAgUHlOdWxsSW1wb3J0ZXJfVHlwZT1weXRob24zMy5QeU51bGxJbXBvcnRlcl9UeXBlIERBVEEKLSAgUHlOdW1iZXJfQWJzb2x1dGU9cHl0aG9uMzMuUHlOdW1iZXJfQWJzb2x1dGUKLSAgUHlOdW1iZXJfQWRkPXB5dGhvbjMzLlB5TnVtYmVyX0FkZAotICBQeU51bWJlcl9BbmQ9cHl0aG9uMzMuUHlOdW1iZXJfQW5kCi0gIFB5TnVtYmVyX0FzU3NpemVfdD1weXRob24zMy5QeU51bWJlcl9Bc1NzaXplX3QKLSAgUHlOdW1iZXJfQ2hlY2s9cHl0aG9uMzMuUHlOdW1iZXJfQ2hlY2sKLSAgUHlOdW1iZXJfRGl2bW9kPXB5dGhvbjMzLlB5TnVtYmVyX0Rpdm1vZAotICBQeU51bWJlcl9GbG9hdD1weXRob24zMy5QeU51bWJlcl9GbG9hdAotICBQeU51bWJlcl9GbG9vckRpdmlkZT1weXRob24zMy5QeU51bWJlcl9GbG9vckRpdmlkZQotICBQeU51bWJlcl9JblBsYWNlQWRkPXB5dGhvbjMzLlB5TnVtYmVyX0luUGxhY2VBZGQKLSAgUHlOdW1iZXJfSW5QbGFjZUFuZD1weXRob24zMy5QeU51bWJlcl9JblBsYWNlQW5kCi0gIFB5TnVtYmVyX0luUGxhY2VGbG9vckRpdmlkZT1weXRob24zMy5QeU51bWJlcl9JblBsYWNlRmxvb3JEaXZpZGUKLSAgUHlOdW1iZXJfSW5QbGFjZUxzaGlmdD1weXRob24zMy5QeU51bWJlcl9JblBsYWNlTHNoaWZ0Ci0gIFB5TnVtYmVyX0luUGxhY2VNdWx0aXBseT1weXRob24zMy5QeU51bWJlcl9JblBsYWNlTXVsdGlwbHkKLSAgUHlOdW1iZXJfSW5QbGFjZU9yPXB5dGhvbjMzLlB5TnVtYmVyX0luUGxhY2VPcgotICBQeU51bWJlcl9JblBsYWNlUG93ZXI9cHl0aG9uMzMuUHlOdW1iZXJfSW5QbGFjZVBvd2VyCi0gIFB5TnVtYmVyX0luUGxhY2VSZW1haW5kZXI9cHl0aG9uMzMuUHlOdW1iZXJfSW5QbGFjZVJlbWFpbmRlcgotICBQeU51bWJlcl9JblBsYWNlUnNoaWZ0PXB5dGhvbjMzLlB5TnVtYmVyX0luUGxhY2VSc2hpZnQKLSAgUHlOdW1iZXJfSW5QbGFjZVN1YnRyYWN0PXB5dGhvbjMzLlB5TnVtYmVyX0luUGxhY2VTdWJ0cmFjdAotICBQeU51bWJlcl9JblBsYWNlVHJ1ZURpdmlkZT1weXRob24zMy5QeU51bWJlcl9JblBsYWNlVHJ1ZURpdmlkZQotICBQeU51bWJlcl9JblBsYWNlWG9yPXB5dGhvbjMzLlB5TnVtYmVyX0luUGxhY2VYb3IKLSAgUHlOdW1iZXJfSW5kZXg9cHl0aG9uMzMuUHlOdW1iZXJfSW5kZXgKLSAgUHlOdW1iZXJfSW52ZXJ0PXB5dGhvbjMzLlB5TnVtYmVyX0ludmVydAotICBQeU51bWJlcl9Mb25nPXB5dGhvbjMzLlB5TnVtYmVyX0xvbmcKLSAgUHlOdW1iZXJfTHNoaWZ0PXB5dGhvbjMzLlB5TnVtYmVyX0xzaGlmdAotICBQeU51bWJlcl9NdWx0aXBseT1weXRob24zMy5QeU51bWJlcl9NdWx0aXBseQotICBQeU51bWJlcl9OZWdhdGl2ZT1weXRob24zMy5QeU51bWJlcl9OZWdhdGl2ZQotICBQeU51bWJlcl9Pcj1weXRob24zMy5QeU51bWJlcl9PcgotICBQeU51bWJlcl9Qb3NpdGl2ZT1weXRob24zMy5QeU51bWJlcl9Qb3NpdGl2ZQotICBQeU51bWJlcl9Qb3dlcj1weXRob24zMy5QeU51bWJlcl9Qb3dlcgotICBQeU51bWJlcl9SZW1haW5kZXI9cHl0aG9uMzMuUHlOdW1iZXJfUmVtYWluZGVyCi0gIFB5TnVtYmVyX1JzaGlmdD1weXRob24zMy5QeU51bWJlcl9Sc2hpZnQKLSAgUHlOdW1iZXJfU3VidHJhY3Q9cHl0aG9uMzMuUHlOdW1iZXJfU3VidHJhY3QKLSAgUHlOdW1iZXJfVG9CYXNlPXB5dGhvbjMzLlB5TnVtYmVyX1RvQmFzZQotICBQeU51bWJlcl9UcnVlRGl2aWRlPXB5dGhvbjMzLlB5TnVtYmVyX1RydWVEaXZpZGUKLSAgUHlOdW1iZXJfWG9yPXB5dGhvbjMzLlB5TnVtYmVyX1hvcgotICBQeU9TX0FmdGVyRm9yaz1weXRob24zMy5QeU9TX0FmdGVyRm9yawotICBQeU9TX0luaXRJbnRlcnJ1cHRzPXB5dGhvbjMzLlB5T1NfSW5pdEludGVycnVwdHMKLSAgUHlPU19JbnB1dEhvb2s9cHl0aG9uMzMuUHlPU19JbnB1dEhvb2sgREFUQQotICBQeU9TX0ludGVycnVwdE9jY3VycmVkPXB5dGhvbjMzLlB5T1NfSW50ZXJydXB0T2NjdXJyZWQKLSAgUHlPU19SZWFkbGluZUZ1bmN0aW9uUG9pbnRlcj1weXRob24zMy5QeU9TX1JlYWRsaW5lRnVuY3Rpb25Qb2ludGVyIERBVEEKLSAgUHlPU19kb3VibGVfdG9fc3RyaW5nPXB5dGhvbjMzLlB5T1NfZG91YmxlX3RvX3N0cmluZwotICBQeU9TX2dldHNpZz1weXRob24zMy5QeU9TX2dldHNpZwotICBQeU9TX215c3RyaWNtcD1weXRob24zMy5QeU9TX215c3RyaWNtcAotICBQeU9TX215c3RybmljbXA9cHl0aG9uMzMuUHlPU19teXN0cm5pY21wCi0gIFB5T1Nfc2V0c2lnPXB5dGhvbjMzLlB5T1Nfc2V0c2lnCi0gIFB5T1Nfc25wcmludGY9cHl0aG9uMzMuUHlPU19zbnByaW50ZgotICBQeU9TX3N0cmluZ190b19kb3VibGU9cHl0aG9uMzMuUHlPU19zdHJpbmdfdG9fZG91YmxlCi0gIFB5T1Nfc3RydG9sPXB5dGhvbjMzLlB5T1Nfc3RydG9sCi0gIFB5T1Nfc3RydG91bD1weXRob24zMy5QeU9TX3N0cnRvdWwKLSAgUHlPU192c25wcmludGY9cHl0aG9uMzMuUHlPU192c25wcmludGYKLSAgUHlPYmplY3RfQVNDSUk9cHl0aG9uMzMuUHlPYmplY3RfQVNDSUkKLSAgUHlPYmplY3RfQXNDaGFyQnVmZmVyPXB5dGhvbjMzLlB5T2JqZWN0X0FzQ2hhckJ1ZmZlcgotICBQeU9iamVjdF9Bc0ZpbGVEZXNjcmlwdG9yPXB5dGhvbjMzLlB5T2JqZWN0X0FzRmlsZURlc2NyaXB0b3IKLSAgUHlPYmplY3RfQXNSZWFkQnVmZmVyPXB5dGhvbjMzLlB5T2JqZWN0X0FzUmVhZEJ1ZmZlcgotICBQeU9iamVjdF9Bc1dyaXRlQnVmZmVyPXB5dGhvbjMzLlB5T2JqZWN0X0FzV3JpdGVCdWZmZXIKLSAgUHlPYmplY3RfQnl0ZXM9cHl0aG9uMzMuUHlPYmplY3RfQnl0ZXMKLSAgUHlPYmplY3RfQ2FsbD1weXRob24zMy5QeU9iamVjdF9DYWxsCi0gIFB5T2JqZWN0X0NhbGxGdW5jdGlvbj1weXRob24zMy5QeU9iamVjdF9DYWxsRnVuY3Rpb24KLSAgUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncz1weXRob24zMy5QeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzCi0gIFB5T2JqZWN0X0NhbGxNZXRob2Q9cHl0aG9uMzMuUHlPYmplY3RfQ2FsbE1ldGhvZAotICBQeU9iamVjdF9DYWxsTWV0aG9kT2JqQXJncz1weXRob24zMy5QeU9iamVjdF9DYWxsTWV0aG9kT2JqQXJncwotICBQeU9iamVjdF9DYWxsT2JqZWN0PXB5dGhvbjMzLlB5T2JqZWN0X0NhbGxPYmplY3QKLSAgUHlPYmplY3RfQ2hlY2tSZWFkQnVmZmVyPXB5dGhvbjMzLlB5T2JqZWN0X0NoZWNrUmVhZEJ1ZmZlcgotICBQeU9iamVjdF9DbGVhcldlYWtSZWZzPXB5dGhvbjMzLlB5T2JqZWN0X0NsZWFyV2Vha1JlZnMKLSAgUHlPYmplY3RfRGVsSXRlbT1weXRob24zMy5QeU9iamVjdF9EZWxJdGVtCi0gIFB5T2JqZWN0X0RlbEl0ZW1TdHJpbmc9cHl0aG9uMzMuUHlPYmplY3RfRGVsSXRlbVN0cmluZwotICBQeU9iamVjdF9EaXI9cHl0aG9uMzMuUHlPYmplY3RfRGlyCi0gIFB5T2JqZWN0X0Zvcm1hdD1weXRob24zMy5QeU9iamVjdF9Gb3JtYXQKLSAgUHlPYmplY3RfRnJlZT1weXRob24zMy5QeU9iamVjdF9GcmVlCi0gIFB5T2JqZWN0X0dDX0RlbD1weXRob24zMy5QeU9iamVjdF9HQ19EZWwKLSAgUHlPYmplY3RfR0NfVHJhY2s9cHl0aG9uMzMuUHlPYmplY3RfR0NfVHJhY2sKLSAgUHlPYmplY3RfR0NfVW5UcmFjaz1weXRob24zMy5QeU9iamVjdF9HQ19VblRyYWNrCi0gIFB5T2JqZWN0X0dlbmVyaWNHZXRBdHRyPXB5dGhvbjMzLlB5T2JqZWN0X0dlbmVyaWNHZXRBdHRyCi0gIFB5T2JqZWN0X0dlbmVyaWNTZXRBdHRyPXB5dGhvbjMzLlB5T2JqZWN0X0dlbmVyaWNTZXRBdHRyCi0gIFB5T2JqZWN0X0dldEF0dHI9cHl0aG9uMzMuUHlPYmplY3RfR2V0QXR0cgotICBQeU9iamVjdF9HZXRBdHRyU3RyaW5nPXB5dGhvbjMzLlB5T2JqZWN0X0dldEF0dHJTdHJpbmcKLSAgUHlPYmplY3RfR2V0SXRlbT1weXRob24zMy5QeU9iamVjdF9HZXRJdGVtCi0gIFB5T2JqZWN0X0dldEl0ZXI9cHl0aG9uMzMuUHlPYmplY3RfR2V0SXRlcgotICBQeU9iamVjdF9IYXNBdHRyPXB5dGhvbjMzLlB5T2JqZWN0X0hhc0F0dHIKLSAgUHlPYmplY3RfSGFzQXR0clN0cmluZz1weXRob24zMy5QeU9iamVjdF9IYXNBdHRyU3RyaW5nCi0gIFB5T2JqZWN0X0hhc2g9cHl0aG9uMzMuUHlPYmplY3RfSGFzaAotICBQeU9iamVjdF9IYXNoTm90SW1wbGVtZW50ZWQ9cHl0aG9uMzMuUHlPYmplY3RfSGFzaE5vdEltcGxlbWVudGVkCi0gIFB5T2JqZWN0X0luaXQ9cHl0aG9uMzMuUHlPYmplY3RfSW5pdAotICBQeU9iamVjdF9Jbml0VmFyPXB5dGhvbjMzLlB5T2JqZWN0X0luaXRWYXIKLSAgUHlPYmplY3RfSXNJbnN0YW5jZT1weXRob24zMy5QeU9iamVjdF9Jc0luc3RhbmNlCi0gIFB5T2JqZWN0X0lzU3ViY2xhc3M9cHl0aG9uMzMuUHlPYmplY3RfSXNTdWJjbGFzcwotICBQeU9iamVjdF9Jc1RydWU9cHl0aG9uMzMuUHlPYmplY3RfSXNUcnVlCi0gIFB5T2JqZWN0X0xlbmd0aD1weXRob24zMy5QeU9iamVjdF9MZW5ndGgKLSAgUHlPYmplY3RfTWFsbG9jPXB5dGhvbjMzLlB5T2JqZWN0X01hbGxvYwotICBQeU9iamVjdF9Ob3Q9cHl0aG9uMzMuUHlPYmplY3RfTm90Ci0gIFB5T2JqZWN0X1JlYWxsb2M9cHl0aG9uMzMuUHlPYmplY3RfUmVhbGxvYwotICBQeU9iamVjdF9SZXByPXB5dGhvbjMzLlB5T2JqZWN0X1JlcHIKLSAgUHlPYmplY3RfUmljaENvbXBhcmU9cHl0aG9uMzMuUHlPYmplY3RfUmljaENvbXBhcmUKLSAgUHlPYmplY3RfUmljaENvbXBhcmVCb29sPXB5dGhvbjMzLlB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbAotICBQeU9iamVjdF9TZWxmSXRlcj1weXRob24zMy5QeU9iamVjdF9TZWxmSXRlcgotICBQeU9iamVjdF9TZXRBdHRyPXB5dGhvbjMzLlB5T2JqZWN0X1NldEF0dHIKLSAgUHlPYmplY3RfU2V0QXR0clN0cmluZz1weXRob24zMy5QeU9iamVjdF9TZXRBdHRyU3RyaW5nCi0gIFB5T2JqZWN0X1NldEl0ZW09cHl0aG9uMzMuUHlPYmplY3RfU2V0SXRlbQotICBQeU9iamVjdF9TaXplPXB5dGhvbjMzLlB5T2JqZWN0X1NpemUKLSAgUHlPYmplY3RfU3RyPXB5dGhvbjMzLlB5T2JqZWN0X1N0cgotICBQeU9iamVjdF9UeXBlPXB5dGhvbjMzLlB5T2JqZWN0X1R5cGUgREFUQQotICBQeVBhcnNlcl9TaW1wbGVQYXJzZUZpbGVGbGFncz1weXRob24zMy5QeVBhcnNlcl9TaW1wbGVQYXJzZUZpbGVGbGFncwotICBQeVBhcnNlcl9TaW1wbGVQYXJzZVN0cmluZ0ZsYWdzPXB5dGhvbjMzLlB5UGFyc2VyX1NpbXBsZVBhcnNlU3RyaW5nRmxhZ3MKLSAgUHlQcm9wZXJ0eV9UeXBlPXB5dGhvbjMzLlB5UHJvcGVydHlfVHlwZSBEQVRBCi0gIFB5UmFuZ2VJdGVyX1R5cGU9cHl0aG9uMzMuUHlSYW5nZUl0ZXJfVHlwZSBEQVRBCi0gIFB5UmFuZ2VfVHlwZT1weXRob24zMy5QeVJhbmdlX1R5cGUgREFUQQotICBQeVJldmVyc2VkX1R5cGU9cHl0aG9uMzMuUHlSZXZlcnNlZF9UeXBlIERBVEEKLSAgUHlTZXFJdGVyX05ldz1weXRob24zMy5QeVNlcUl0ZXJfTmV3Ci0gIFB5U2VxSXRlcl9UeXBlPXB5dGhvbjMzLlB5U2VxSXRlcl9UeXBlIERBVEEKLSAgUHlTZXF1ZW5jZV9DaGVjaz1weXRob24zMy5QeVNlcXVlbmNlX0NoZWNrCi0gIFB5U2VxdWVuY2VfQ29uY2F0PXB5dGhvbjMzLlB5U2VxdWVuY2VfQ29uY2F0Ci0gIFB5U2VxdWVuY2VfQ29udGFpbnM9cHl0aG9uMzMuUHlTZXF1ZW5jZV9Db250YWlucwotICBQeVNlcXVlbmNlX0NvdW50PXB5dGhvbjMzLlB5U2VxdWVuY2VfQ291bnQKLSAgUHlTZXF1ZW5jZV9EZWxJdGVtPXB5dGhvbjMzLlB5U2VxdWVuY2VfRGVsSXRlbQotICBQeVNlcXVlbmNlX0RlbFNsaWNlPXB5dGhvbjMzLlB5U2VxdWVuY2VfRGVsU2xpY2UKLSAgUHlTZXF1ZW5jZV9GYXN0PXB5dGhvbjMzLlB5U2VxdWVuY2VfRmFzdAotICBQeVNlcXVlbmNlX0dldEl0ZW09cHl0aG9uMzMuUHlTZXF1ZW5jZV9HZXRJdGVtCi0gIFB5U2VxdWVuY2VfR2V0U2xpY2U9cHl0aG9uMzMuUHlTZXF1ZW5jZV9HZXRTbGljZQotICBQeVNlcXVlbmNlX0luPXB5dGhvbjMzLlB5U2VxdWVuY2VfSW4KLSAgUHlTZXF1ZW5jZV9JblBsYWNlQ29uY2F0PXB5dGhvbjMzLlB5U2VxdWVuY2VfSW5QbGFjZUNvbmNhdAotICBQeVNlcXVlbmNlX0luUGxhY2VSZXBlYXQ9cHl0aG9uMzMuUHlTZXF1ZW5jZV9JblBsYWNlUmVwZWF0Ci0gIFB5U2VxdWVuY2VfSW5kZXg9cHl0aG9uMzMuUHlTZXF1ZW5jZV9JbmRleAotICBQeVNlcXVlbmNlX0xlbmd0aD1weXRob24zMy5QeVNlcXVlbmNlX0xlbmd0aAotICBQeVNlcXVlbmNlX0xpc3Q9cHl0aG9uMzMuUHlTZXF1ZW5jZV9MaXN0Ci0gIFB5U2VxdWVuY2VfUmVwZWF0PXB5dGhvbjMzLlB5U2VxdWVuY2VfUmVwZWF0Ci0gIFB5U2VxdWVuY2VfU2V0SXRlbT1weXRob24zMy5QeVNlcXVlbmNlX1NldEl0ZW0KLSAgUHlTZXF1ZW5jZV9TZXRTbGljZT1weXRob24zMy5QeVNlcXVlbmNlX1NldFNsaWNlCi0gIFB5U2VxdWVuY2VfU2l6ZT1weXRob24zMy5QeVNlcXVlbmNlX1NpemUKLSAgUHlTZXF1ZW5jZV9UdXBsZT1weXRob24zMy5QeVNlcXVlbmNlX1R1cGxlCi0gIFB5U2V0SXRlcl9UeXBlPXB5dGhvbjMzLlB5U2V0SXRlcl9UeXBlIERBVEEKLSAgUHlTZXRfQWRkPXB5dGhvbjMzLlB5U2V0X0FkZAotICBQeVNldF9DbGVhcj1weXRob24zMy5QeVNldF9DbGVhcgotICBQeVNldF9Db250YWlucz1weXRob24zMy5QeVNldF9Db250YWlucwotICBQeVNldF9EaXNjYXJkPXB5dGhvbjMzLlB5U2V0X0Rpc2NhcmQKLSAgUHlTZXRfTmV3PXB5dGhvbjMzLlB5U2V0X05ldwotICBQeVNldF9Qb3A9cHl0aG9uMzMuUHlTZXRfUG9wCi0gIFB5U2V0X1NpemU9cHl0aG9uMzMuUHlTZXRfU2l6ZQotICBQeVNldF9UeXBlPXB5dGhvbjMzLlB5U2V0X1R5cGUgREFUQQotICBQeVNsaWNlX0dldEluZGljZXM9cHl0aG9uMzMuUHlTbGljZV9HZXRJbmRpY2VzCi0gIFB5U2xpY2VfR2V0SW5kaWNlc0V4PXB5dGhvbjMzLlB5U2xpY2VfR2V0SW5kaWNlc0V4Ci0gIFB5U2xpY2VfTmV3PXB5dGhvbjMzLlB5U2xpY2VfTmV3Ci0gIFB5U2xpY2VfVHlwZT1weXRob24zMy5QeVNsaWNlX1R5cGUgREFUQQotICBQeVNvcnRXcmFwcGVyX1R5cGU9cHl0aG9uMzMuUHlTb3J0V3JhcHBlcl9UeXBlIERBVEEKLSAgUHlTdGF0ZV9GaW5kTW9kdWxlPXB5dGhvbjMzLlB5U3RhdGVfRmluZE1vZHVsZQotICBQeVN0YXRlX0FkZE1vZHVsZT1weXRob24zMy5QeVN0YXRlX0FkZE1vZHVsZQotICBQeVN0YXRlX1JlbW92ZU1vZHVsZT1weXRob24zMy5QeVN0YXRlX1JlbW92ZU1vZHVsZQotICBQeVN0cnVjdFNlcXVlbmNlX0dldEl0ZW09cHl0aG9uMzMuUHlTdHJ1Y3RTZXF1ZW5jZV9HZXRJdGVtCi0gIFB5U3RydWN0U2VxdWVuY2VfTmV3PXB5dGhvbjMzLlB5U3RydWN0U2VxdWVuY2VfTmV3Ci0gIFB5U3RydWN0U2VxdWVuY2VfTmV3VHlwZT1weXRob24zMy5QeVN0cnVjdFNlcXVlbmNlX05ld1R5cGUKLSAgUHlTdHJ1Y3RTZXF1ZW5jZV9TZXRJdGVtPXB5dGhvbjMzLlB5U3RydWN0U2VxdWVuY2VfU2V0SXRlbQotICBQeVN1cGVyX1R5cGU9cHl0aG9uMzMuUHlTdXBlcl9UeXBlIERBVEEKLSAgUHlTeXNfQWRkV2Fybk9wdGlvbj1weXRob24zMy5QeVN5c19BZGRXYXJuT3B0aW9uCi0gIFB5U3lzX0FkZFdhcm5PcHRpb25Vbmljb2RlPXB5dGhvbjMzLlB5U3lzX0FkZFdhcm5PcHRpb25Vbmljb2RlCi0gIFB5U3lzX0Zvcm1hdFN0ZGVycj1weXRob24zMy5QeVN5c19Gb3JtYXRTdGRlcnIKLSAgUHlTeXNfRm9ybWF0U3Rkb3V0PXB5dGhvbjMzLlB5U3lzX0Zvcm1hdFN0ZG91dAotICBQeVN5c19HZXRPYmplY3Q9cHl0aG9uMzMuUHlTeXNfR2V0T2JqZWN0Ci0gIFB5U3lzX0hhc1dhcm5PcHRpb25zPXB5dGhvbjMzLlB5U3lzX0hhc1dhcm5PcHRpb25zCi0gIFB5U3lzX1Jlc2V0V2Fybk9wdGlvbnM9cHl0aG9uMzMuUHlTeXNfUmVzZXRXYXJuT3B0aW9ucwotICBQeVN5c19TZXRBcmd2PXB5dGhvbjMzLlB5U3lzX1NldEFyZ3YKLSAgUHlTeXNfU2V0QXJndkV4PXB5dGhvbjMzLlB5U3lzX1NldEFyZ3ZFeAotICBQeVN5c19TZXRPYmplY3Q9cHl0aG9uMzMuUHlTeXNfU2V0T2JqZWN0Ci0gIFB5U3lzX1NldFBhdGg9cHl0aG9uMzMuUHlTeXNfU2V0UGF0aAotICBQeVN5c19Xcml0ZVN0ZGVycj1weXRob24zMy5QeVN5c19Xcml0ZVN0ZGVycgotICBQeVN5c19Xcml0ZVN0ZG91dD1weXRob24zMy5QeVN5c19Xcml0ZVN0ZG91dAotICBQeVRocmVhZFN0YXRlX0NsZWFyPXB5dGhvbjMzLlB5VGhyZWFkU3RhdGVfQ2xlYXIKLSAgUHlUaHJlYWRTdGF0ZV9EZWxldGU9cHl0aG9uMzMuUHlUaHJlYWRTdGF0ZV9EZWxldGUKLSAgUHlUaHJlYWRTdGF0ZV9EZWxldGVDdXJyZW50PXB5dGhvbjMzLlB5VGhyZWFkU3RhdGVfRGVsZXRlQ3VycmVudAotICBQeVRocmVhZFN0YXRlX0dldD1weXRob24zMy5QeVRocmVhZFN0YXRlX0dldAotICBQeVRocmVhZFN0YXRlX0dldERpY3Q9cHl0aG9uMzMuUHlUaHJlYWRTdGF0ZV9HZXREaWN0Ci0gIFB5VGhyZWFkU3RhdGVfTmV3PXB5dGhvbjMzLlB5VGhyZWFkU3RhdGVfTmV3Ci0gIFB5VGhyZWFkU3RhdGVfU2V0QXN5bmNFeGM9cHl0aG9uMzMuUHlUaHJlYWRTdGF0ZV9TZXRBc3luY0V4YwotICBQeVRocmVhZFN0YXRlX1N3YXA9cHl0aG9uMzMuUHlUaHJlYWRTdGF0ZV9Td2FwCi0gIFB5VHJhY2VCYWNrX0hlcmU9cHl0aG9uMzMuUHlUcmFjZUJhY2tfSGVyZQotICBQeVRyYWNlQmFja19QcmludD1weXRob24zMy5QeVRyYWNlQmFja19QcmludAotICBQeVRyYWNlQmFja19UeXBlPXB5dGhvbjMzLlB5VHJhY2VCYWNrX1R5cGUgREFUQQotICBQeVR1cGxlSXRlcl9UeXBlPXB5dGhvbjMzLlB5VHVwbGVJdGVyX1R5cGUgREFUQQotICBQeVR1cGxlX0NsZWFyRnJlZUxpc3Q9cHl0aG9uMzMuUHlUdXBsZV9DbGVhckZyZWVMaXN0Ci0gIFB5VHVwbGVfR2V0SXRlbT1weXRob24zMy5QeVR1cGxlX0dldEl0ZW0KLSAgUHlUdXBsZV9HZXRTbGljZT1weXRob24zMy5QeVR1cGxlX0dldFNsaWNlCi0gIFB5VHVwbGVfTmV3PXB5dGhvbjMzLlB5VHVwbGVfTmV3Ci0gIFB5VHVwbGVfUGFjaz1weXRob24zMy5QeVR1cGxlX1BhY2sKLSAgUHlUdXBsZV9TZXRJdGVtPXB5dGhvbjMzLlB5VHVwbGVfU2V0SXRlbQotICBQeVR1cGxlX1NpemU9cHl0aG9uMzMuUHlUdXBsZV9TaXplCi0gIFB5VHVwbGVfVHlwZT1weXRob24zMy5QeVR1cGxlX1R5cGUgREFUQQotICBQeVR5cGVfQ2xlYXJDYWNoZT1weXRob24zMy5QeVR5cGVfQ2xlYXJDYWNoZQotICBQeVR5cGVfRnJvbVNwZWM9cHl0aG9uMzMuUHlUeXBlX0Zyb21TcGVjCi0gIFB5VHlwZV9Gcm9tU3BlY1dpdGhCYXNlcz1weXRob24zMy5QeVR5cGVfRnJvbVNwZWNXaXRoQmFzZXMKLSAgUHlUeXBlX0dlbmVyaWNBbGxvYz1weXRob24zMy5QeVR5cGVfR2VuZXJpY0FsbG9jCi0gIFB5VHlwZV9HZW5lcmljTmV3PXB5dGhvbjMzLlB5VHlwZV9HZW5lcmljTmV3Ci0gIFB5VHlwZV9HZXRGbGFncz1weXRob24zMy5QeVR5cGVfR2V0RmxhZ3MKLSAgUHlUeXBlX0lzU3VidHlwZT1weXRob24zMy5QeVR5cGVfSXNTdWJ0eXBlCi0gIFB5VHlwZV9Nb2RpZmllZD1weXRob24zMy5QeVR5cGVfTW9kaWZpZWQKLSAgUHlUeXBlX1JlYWR5PXB5dGhvbjMzLlB5VHlwZV9SZWFkeQotICBQeVR5cGVfVHlwZT1weXRob24zMy5QeVR5cGVfVHlwZSBEQVRBCi0gIFB5VW5pY29kZURlY29kZUVycm9yX0NyZWF0ZT1weXRob24zMy5QeVVuaWNvZGVEZWNvZGVFcnJvcl9DcmVhdGUKLSAgUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0RW5jb2Rpbmc9cHl0aG9uMzMuUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0RW5jb2RpbmcKLSAgUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0RW5kPXB5dGhvbjMzLlB5VW5pY29kZURlY29kZUVycm9yX0dldEVuZAotICBQeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRPYmplY3Q9cHl0aG9uMzMuUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0T2JqZWN0Ci0gIFB5VW5pY29kZURlY29kZUVycm9yX0dldFJlYXNvbj1weXRob24zMy5QeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRSZWFzb24KLSAgUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0U3RhcnQ9cHl0aG9uMzMuUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0U3RhcnQKLSAgUHlVbmljb2RlRGVjb2RlRXJyb3JfU2V0RW5kPXB5dGhvbjMzLlB5VW5pY29kZURlY29kZUVycm9yX1NldEVuZAotICBQeVVuaWNvZGVEZWNvZGVFcnJvcl9TZXRSZWFzb249cHl0aG9uMzMuUHlVbmljb2RlRGVjb2RlRXJyb3JfU2V0UmVhc29uCi0gIFB5VW5pY29kZURlY29kZUVycm9yX1NldFN0YXJ0PXB5dGhvbjMzLlB5VW5pY29kZURlY29kZUVycm9yX1NldFN0YXJ0Ci0gIFB5VW5pY29kZUVuY29kZUVycm9yX0dldEVuY29kaW5nPXB5dGhvbjMzLlB5VW5pY29kZUVuY29kZUVycm9yX0dldEVuY29kaW5nCi0gIFB5VW5pY29kZUVuY29kZUVycm9yX0dldEVuZD1weXRob24zMy5QeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRFbmQKLSAgUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0T2JqZWN0PXB5dGhvbjMzLlB5VW5pY29kZUVuY29kZUVycm9yX0dldE9iamVjdAotICBQeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRSZWFzb249cHl0aG9uMzMuUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0UmVhc29uCi0gIFB5VW5pY29kZUVuY29kZUVycm9yX0dldFN0YXJ0PXB5dGhvbjMzLlB5VW5pY29kZUVuY29kZUVycm9yX0dldFN0YXJ0Ci0gIFB5VW5pY29kZUVuY29kZUVycm9yX1NldEVuZD1weXRob24zMy5QeVVuaWNvZGVFbmNvZGVFcnJvcl9TZXRFbmQKLSAgUHlVbmljb2RlRW5jb2RlRXJyb3JfU2V0UmVhc29uPXB5dGhvbjMzLlB5VW5pY29kZUVuY29kZUVycm9yX1NldFJlYXNvbgotICBQeVVuaWNvZGVFbmNvZGVFcnJvcl9TZXRTdGFydD1weXRob24zMy5QeVVuaWNvZGVFbmNvZGVFcnJvcl9TZXRTdGFydAotICBQeVVuaWNvZGVJdGVyX1R5cGU9cHl0aG9uMzMuUHlVbmljb2RlSXRlcl9UeXBlIERBVEEKLSAgUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfR2V0RW5kPXB5dGhvbjMzLlB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX0dldEVuZAotICBQeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9HZXRPYmplY3Q9cHl0aG9uMzMuUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfR2V0T2JqZWN0Ci0gIFB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX0dldFJlYXNvbj1weXRob24zMy5QeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9HZXRSZWFzb24KLSAgUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfR2V0U3RhcnQ9cHl0aG9uMzMuUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfR2V0U3RhcnQKLSAgUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfU2V0RW5kPXB5dGhvbjMzLlB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX1NldEVuZAotICBQeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9TZXRSZWFzb249cHl0aG9uMzMuUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfU2V0UmVhc29uCi0gIFB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX1NldFN0YXJ0PXB5dGhvbjMzLlB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX1NldFN0YXJ0Ci0gIFB5VW5pY29kZV9BcHBlbmQ9cHl0aG9uMzMuUHlVbmljb2RlX0FwcGVuZAotICBQeVVuaWNvZGVfQXBwZW5kQW5kRGVsPXB5dGhvbjMzLlB5VW5pY29kZV9BcHBlbmRBbmREZWwKLSAgUHlVbmljb2RlX0FzQVNDSUlTdHJpbmc9cHl0aG9uMzMuUHlVbmljb2RlX0FzQVNDSUlTdHJpbmcKLSAgUHlVbmljb2RlX0FzQ2hhcm1hcFN0cmluZz1weXRob24zMy5QeVVuaWNvZGVfQXNDaGFybWFwU3RyaW5nCi0gIFB5VW5pY29kZV9Bc0RlY29kZWRPYmplY3Q9cHl0aG9uMzMuUHlVbmljb2RlX0FzRGVjb2RlZE9iamVjdAotICBQeVVuaWNvZGVfQXNEZWNvZGVkVW5pY29kZT1weXRob24zMy5QeVVuaWNvZGVfQXNEZWNvZGVkVW5pY29kZQotICBQeVVuaWNvZGVfQXNFbmNvZGVkT2JqZWN0PXB5dGhvbjMzLlB5VW5pY29kZV9Bc0VuY29kZWRPYmplY3QKLSAgUHlVbmljb2RlX0FzRW5jb2RlZFN0cmluZz1weXRob24zMy5QeVVuaWNvZGVfQXNFbmNvZGVkU3RyaW5nCi0gIFB5VW5pY29kZV9Bc0VuY29kZWRVbmljb2RlPXB5dGhvbjMzLlB5VW5pY29kZV9Bc0VuY29kZWRVbmljb2RlCi0gIFB5VW5pY29kZV9Bc0xhdGluMVN0cmluZz1weXRob24zMy5QeVVuaWNvZGVfQXNMYXRpbjFTdHJpbmcKLSAgUHlVbmljb2RlX0FzUmF3VW5pY29kZUVzY2FwZVN0cmluZz1weXRob24zMy5QeVVuaWNvZGVfQXNSYXdVbmljb2RlRXNjYXBlU3RyaW5nCi0gIFB5VW5pY29kZV9Bc1VURjE2U3RyaW5nPXB5dGhvbjMzLlB5VW5pY29kZV9Bc1VURjE2U3RyaW5nCi0gIFB5VW5pY29kZV9Bc1VURjMyU3RyaW5nPXB5dGhvbjMzLlB5VW5pY29kZV9Bc1VURjMyU3RyaW5nCi0gIFB5VW5pY29kZV9Bc1VURjhTdHJpbmc9cHl0aG9uMzMuUHlVbmljb2RlX0FzVVRGOFN0cmluZwotICBQeVVuaWNvZGVfQXNVbmljb2RlRXNjYXBlU3RyaW5nPXB5dGhvbjMzLlB5VW5pY29kZV9Bc1VuaWNvZGVFc2NhcGVTdHJpbmcKLSAgUHlVbmljb2RlX0FzV2lkZUNoYXI9cHl0aG9uMzMuUHlVbmljb2RlX0FzV2lkZUNoYXIKLSAgUHlVbmljb2RlX0NsZWFyRnJlZWxpc3Q9cHl0aG9uMzMuUHlVbmljb2RlX0NsZWFyRnJlZWxpc3QKLSAgUHlVbmljb2RlX0NvbXBhcmU9cHl0aG9uMzMuUHlVbmljb2RlX0NvbXBhcmUKLSAgUHlVbmljb2RlX0NvbmNhdD1weXRob24zMy5QeVVuaWNvZGVfQ29uY2F0Ci0gIFB5VW5pY29kZV9Db250YWlucz1weXRob24zMy5QeVVuaWNvZGVfQ29udGFpbnMKLSAgUHlVbmljb2RlX0NvdW50PXB5dGhvbjMzLlB5VW5pY29kZV9Db3VudAotICBQeVVuaWNvZGVfRGVjb2RlPXB5dGhvbjMzLlB5VW5pY29kZV9EZWNvZGUKLSAgUHlVbmljb2RlX0RlY29kZUFTQ0lJPXB5dGhvbjMzLlB5VW5pY29kZV9EZWNvZGVBU0NJSQotICBQeVVuaWNvZGVfRGVjb2RlQ2hhcm1hcD1weXRob24zMy5QeVVuaWNvZGVfRGVjb2RlQ2hhcm1hcAotICBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0PXB5dGhvbjMzLlB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQKLSAgUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdEFuZFNpemU9cHl0aG9uMzMuUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdEFuZFNpemUKLSAgUHlVbmljb2RlX0RlY29kZUxhdGluMT1weXRob24zMy5QeVVuaWNvZGVfRGVjb2RlTGF0aW4xCi0gIFB5VW5pY29kZV9EZWNvZGVSYXdVbmljb2RlRXNjYXBlPXB5dGhvbjMzLlB5VW5pY29kZV9EZWNvZGVSYXdVbmljb2RlRXNjYXBlCi0gIFB5VW5pY29kZV9EZWNvZGVVVEYxNj1weXRob24zMy5QeVVuaWNvZGVfRGVjb2RlVVRGMTYKLSAgUHlVbmljb2RlX0RlY29kZVVURjE2U3RhdGVmdWw9cHl0aG9uMzMuUHlVbmljb2RlX0RlY29kZVVURjE2U3RhdGVmdWwKLSAgUHlVbmljb2RlX0RlY29kZVVURjMyPXB5dGhvbjMzLlB5VW5pY29kZV9EZWNvZGVVVEYzMgotICBQeVVuaWNvZGVfRGVjb2RlVVRGMzJTdGF0ZWZ1bD1weXRob24zMy5QeVVuaWNvZGVfRGVjb2RlVVRGMzJTdGF0ZWZ1bAotICBQeVVuaWNvZGVfRGVjb2RlVVRGOD1weXRob24zMy5QeVVuaWNvZGVfRGVjb2RlVVRGOAotICBQeVVuaWNvZGVfRGVjb2RlVVRGOFN0YXRlZnVsPXB5dGhvbjMzLlB5VW5pY29kZV9EZWNvZGVVVEY4U3RhdGVmdWwKLSAgUHlVbmljb2RlX0RlY29kZVVuaWNvZGVFc2NhcGU9cHl0aG9uMzMuUHlVbmljb2RlX0RlY29kZVVuaWNvZGVFc2NhcGUKLSAgUHlVbmljb2RlX0ZTQ29udmVydGVyPXB5dGhvbjMzLlB5VW5pY29kZV9GU0NvbnZlcnRlcgotICBQeVVuaWNvZGVfRlNEZWNvZGVyPXB5dGhvbjMzLlB5VW5pY29kZV9GU0RlY29kZXIKLSAgUHlVbmljb2RlX0ZpbmQ9cHl0aG9uMzMuUHlVbmljb2RlX0ZpbmQKLSAgUHlVbmljb2RlX0Zvcm1hdD1weXRob24zMy5QeVVuaWNvZGVfRm9ybWF0Ci0gIFB5VW5pY29kZV9Gcm9tRW5jb2RlZE9iamVjdD1weXRob24zMy5QeVVuaWNvZGVfRnJvbUVuY29kZWRPYmplY3QKLSAgUHlVbmljb2RlX0Zyb21Gb3JtYXQ9cHl0aG9uMzMuUHlVbmljb2RlX0Zyb21Gb3JtYXQKLSAgUHlVbmljb2RlX0Zyb21Gb3JtYXRWPXB5dGhvbjMzLlB5VW5pY29kZV9Gcm9tRm9ybWF0VgotICBQeVVuaWNvZGVfRnJvbU9iamVjdD1weXRob24zMy5QeVVuaWNvZGVfRnJvbU9iamVjdAotICBQeVVuaWNvZGVfRnJvbU9yZGluYWw9cHl0aG9uMzMuUHlVbmljb2RlX0Zyb21PcmRpbmFsCi0gIFB5VW5pY29kZV9Gcm9tU3RyaW5nPXB5dGhvbjMzLlB5VW5pY29kZV9Gcm9tU3RyaW5nCi0gIFB5VW5pY29kZV9Gcm9tU3RyaW5nQW5kU2l6ZT1weXRob24zMy5QeVVuaWNvZGVfRnJvbVN0cmluZ0FuZFNpemUKLSAgUHlVbmljb2RlX0Zyb21XaWRlQ2hhcj1weXRob24zMy5QeVVuaWNvZGVfRnJvbVdpZGVDaGFyCi0gIFB5VW5pY29kZV9HZXREZWZhdWx0RW5jb2Rpbmc9cHl0aG9uMzMuUHlVbmljb2RlX0dldERlZmF1bHRFbmNvZGluZwotICBQeVVuaWNvZGVfR2V0U2l6ZT1weXRob24zMy5QeVVuaWNvZGVfR2V0U2l6ZQotICBQeVVuaWNvZGVfSXNJZGVudGlmaWVyPXB5dGhvbjMzLlB5VW5pY29kZV9Jc0lkZW50aWZpZXIKLSAgUHlVbmljb2RlX0pvaW49cHl0aG9uMzMuUHlVbmljb2RlX0pvaW4KLSAgUHlVbmljb2RlX1BhcnRpdGlvbj1weXRob24zMy5QeVVuaWNvZGVfUGFydGl0aW9uCi0gIFB5VW5pY29kZV9SUGFydGl0aW9uPXB5dGhvbjMzLlB5VW5pY29kZV9SUGFydGl0aW9uCi0gIFB5VW5pY29kZV9SU3BsaXQ9cHl0aG9uMzMuUHlVbmljb2RlX1JTcGxpdAotICBQeVVuaWNvZGVfUmVwbGFjZT1weXRob24zMy5QeVVuaWNvZGVfUmVwbGFjZQotICBQeVVuaWNvZGVfUmVzaXplPXB5dGhvbjMzLlB5VW5pY29kZV9SZXNpemUKLSAgUHlVbmljb2RlX1JpY2hDb21wYXJlPXB5dGhvbjMzLlB5VW5pY29kZV9SaWNoQ29tcGFyZQotICBQeVVuaWNvZGVfU2V0RGVmYXVsdEVuY29kaW5nPXB5dGhvbjMzLlB5VW5pY29kZV9TZXREZWZhdWx0RW5jb2RpbmcKLSAgUHlVbmljb2RlX1NwbGl0PXB5dGhvbjMzLlB5VW5pY29kZV9TcGxpdAotICBQeVVuaWNvZGVfU3BsaXRsaW5lcz1weXRob24zMy5QeVVuaWNvZGVfU3BsaXRsaW5lcwotICBQeVVuaWNvZGVfVGFpbG1hdGNoPXB5dGhvbjMzLlB5VW5pY29kZV9UYWlsbWF0Y2gKLSAgUHlVbmljb2RlX1RyYW5zbGF0ZT1weXRob24zMy5QeVVuaWNvZGVfVHJhbnNsYXRlCi0gIFB5VW5pY29kZV9CdWlsZEVuY29kaW5nTWFwPXB5dGhvbjMzLlB5VW5pY29kZV9CdWlsZEVuY29kaW5nTWFwCi0gIFB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nPXB5dGhvbjMzLlB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nCi0gIFB5VW5pY29kZV9EZWNvZGVVVEY3PXB5dGhvbjMzLlB5VW5pY29kZV9EZWNvZGVVVEY3Ci0gIFB5VW5pY29kZV9EZWNvZGVVVEY3U3RhdGVmdWw9cHl0aG9uMzMuUHlVbmljb2RlX0RlY29kZVVURjdTdGF0ZWZ1bAotICBQeVVuaWNvZGVfRW5jb2RlRlNEZWZhdWx0PXB5dGhvbjMzLlB5VW5pY29kZV9FbmNvZGVGU0RlZmF1bHQKLSAgUHlVbmljb2RlX0ludGVybkZyb21TdHJpbmc9cHl0aG9uMzMuUHlVbmljb2RlX0ludGVybkZyb21TdHJpbmcKLSAgUHlVbmljb2RlX0ludGVybkltbW9ydGFsPXB5dGhvbjMzLlB5VW5pY29kZV9JbnRlcm5JbW1vcnRhbAotICBQeVVuaWNvZGVfSW50ZXJuSW5QbGFjZT1weXRob24zMy5QeVVuaWNvZGVfSW50ZXJuSW5QbGFjZQotICBQeVVuaWNvZGVfVHlwZT1weXRob24zMy5QeVVuaWNvZGVfVHlwZSBEQVRBCi0gIFB5V2Vha3JlZl9HZXRPYmplY3Q9cHl0aG9uMzMuUHlXZWFrcmVmX0dldE9iamVjdCBEQVRBCi0gIFB5V2Vha3JlZl9OZXdQcm94eT1weXRob24zMy5QeVdlYWtyZWZfTmV3UHJveHkKLSAgUHlXZWFrcmVmX05ld1JlZj1weXRob24zMy5QeVdlYWtyZWZfTmV3UmVmCi0gIFB5V3JhcHBlckRlc2NyX1R5cGU9cHl0aG9uMzMuUHlXcmFwcGVyRGVzY3JfVHlwZSBEQVRBCi0gIFB5V3JhcHBlcl9OZXc9cHl0aG9uMzMuUHlXcmFwcGVyX05ldwotICBQeVppcF9UeXBlPXB5dGhvbjMzLlB5WmlwX1R5cGUgREFUQQotICBQeV9BZGRQZW5kaW5nQ2FsbD1weXRob24zMy5QeV9BZGRQZW5kaW5nQ2FsbAotICBQeV9BdEV4aXQ9cHl0aG9uMzMuUHlfQXRFeGl0Ci0gIFB5X0J1aWxkVmFsdWU9cHl0aG9uMzMuUHlfQnVpbGRWYWx1ZQotICBQeV9Db21waWxlU3RyaW5nPXB5dGhvbjMzLlB5X0NvbXBpbGVTdHJpbmcKLSAgUHlfRGVjUmVmPXB5dGhvbjMzLlB5X0RlY1JlZgotICBQeV9FbmRJbnRlcnByZXRlcj1weXRob24zMy5QeV9FbmRJbnRlcnByZXRlcgotICBQeV9FeGl0PXB5dGhvbjMzLlB5X0V4aXQKLSAgUHlfRmF0YWxFcnJvcj1weXRob24zMy5QeV9GYXRhbEVycm9yCi0gIFB5X0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2Rpbmc9cHl0aG9uMzMuUHlfRmlsZVN5c3RlbURlZmF1bHRFbmNvZGluZyBEQVRBCi0gIFB5X0ZpbmFsaXplPXB5dGhvbjMzLlB5X0ZpbmFsaXplCi0gIFB5X0dldEJ1aWxkSW5mbz1weXRob24zMy5QeV9HZXRCdWlsZEluZm8KLSAgUHlfR2V0Q29tcGlsZXI9cHl0aG9uMzMuUHlfR2V0Q29tcGlsZXIKLSAgUHlfR2V0Q29weXJpZ2h0PXB5dGhvbjMzLlB5X0dldENvcHlyaWdodAotICBQeV9HZXRFeGVjUHJlZml4PXB5dGhvbjMzLlB5X0dldEV4ZWNQcmVmaXgKLSAgUHlfR2V0UGF0aD1weXRob24zMy5QeV9HZXRQYXRoCi0gIFB5X0dldFBsYXRmb3JtPXB5dGhvbjMzLlB5X0dldFBsYXRmb3JtCi0gIFB5X0dldFByZWZpeD1weXRob24zMy5QeV9HZXRQcmVmaXgKLSAgUHlfR2V0UHJvZ3JhbUZ1bGxQYXRoPXB5dGhvbjMzLlB5X0dldFByb2dyYW1GdWxsUGF0aAotICBQeV9HZXRQcm9ncmFtTmFtZT1weXRob24zMy5QeV9HZXRQcm9ncmFtTmFtZQotICBQeV9HZXRQeXRob25Ib21lPXB5dGhvbjMzLlB5X0dldFB5dGhvbkhvbWUKLSAgUHlfR2V0UmVjdXJzaW9uTGltaXQ9cHl0aG9uMzMuUHlfR2V0UmVjdXJzaW9uTGltaXQKLSAgUHlfR2V0VmVyc2lvbj1weXRob24zMy5QeV9HZXRWZXJzaW9uCi0gIFB5X0hhc0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2Rpbmc9cHl0aG9uMzMuUHlfSGFzRmlsZVN5c3RlbURlZmF1bHRFbmNvZGluZyBEQVRBCi0gIFB5X0luY1JlZj1weXRob24zMy5QeV9JbmNSZWYKLSAgUHlfSW5pdGlhbGl6ZT1weXRob24zMy5QeV9Jbml0aWFsaXplCi0gIFB5X0luaXRpYWxpemVFeD1weXRob24zMy5QeV9Jbml0aWFsaXplRXgKLSAgUHlfSXNJbml0aWFsaXplZD1weXRob24zMy5QeV9Jc0luaXRpYWxpemVkCi0gIFB5X01haW49cHl0aG9uMzMuUHlfTWFpbgotICBQeV9NYWtlUGVuZGluZ0NhbGxzPXB5dGhvbjMzLlB5X01ha2VQZW5kaW5nQ2FsbHMKLSAgUHlfTmV3SW50ZXJwcmV0ZXI9cHl0aG9uMzMuUHlfTmV3SW50ZXJwcmV0ZXIKLSAgUHlfUmVwckVudGVyPXB5dGhvbjMzLlB5X1JlcHJFbnRlcgotICBQeV9SZXByTGVhdmU9cHl0aG9uMzMuUHlfUmVwckxlYXZlCi0gIFB5X1NldFByb2dyYW1OYW1lPXB5dGhvbjMzLlB5X1NldFByb2dyYW1OYW1lCi0gIFB5X1NldFB5dGhvbkhvbWU9cHl0aG9uMzMuUHlfU2V0UHl0aG9uSG9tZQotICBQeV9TZXRSZWN1cnNpb25MaW1pdD1weXRob24zMy5QeV9TZXRSZWN1cnNpb25MaW1pdAotICBQeV9TeW10YWJsZVN0cmluZz1weXRob24zMy5QeV9TeW10YWJsZVN0cmluZwotICBQeV9WYUJ1aWxkVmFsdWU9cHl0aG9uMzMuUHlfVmFCdWlsZFZhbHVlCi0gIF9QeUVycl9CYWRJbnRlcm5hbENhbGw9cHl0aG9uMzMuX1B5RXJyX0JhZEludGVybmFsQ2FsbAotICBfUHlPYmplY3RfQ2FsbEZ1bmN0aW9uX1NpemVUPXB5dGhvbjMzLl9QeU9iamVjdF9DYWxsRnVuY3Rpb25fU2l6ZVQKLSAgX1B5T2JqZWN0X0NhbGxNZXRob2RfU2l6ZVQ9cHl0aG9uMzMuX1B5T2JqZWN0X0NhbGxNZXRob2RfU2l6ZVQKLSAgX1B5T2JqZWN0X0dDX01hbGxvYz1weXRob24zMy5fUHlPYmplY3RfR0NfTWFsbG9jCi0gIF9QeU9iamVjdF9HQ19OZXc9cHl0aG9uMzMuX1B5T2JqZWN0X0dDX05ldwotICBfUHlPYmplY3RfR0NfTmV3VmFyPXB5dGhvbjMzLl9QeU9iamVjdF9HQ19OZXdWYXIKLSAgX1B5T2JqZWN0X0dDX1Jlc2l6ZT1weXRob24zMy5fUHlPYmplY3RfR0NfUmVzaXplCi0gIF9QeU9iamVjdF9OZXc9cHl0aG9uMzMuX1B5T2JqZWN0X05ldwotICBfUHlPYmplY3RfTmV3VmFyPXB5dGhvbjMzLl9QeU9iamVjdF9OZXdWYXIKLSAgX1B5U3RhdGVfQWRkTW9kdWxlPXB5dGhvbjMzLl9QeVN0YXRlX0FkZE1vZHVsZQotICBfUHlUaHJlYWRTdGF0ZV9Jbml0PXB5dGhvbjMzLl9QeVRocmVhZFN0YXRlX0luaXQKLSAgX1B5VGhyZWFkU3RhdGVfUHJlYWxsb2M9cHl0aG9uMzMuX1B5VGhyZWFkU3RhdGVfUHJlYWxsb2MKLSAgX1B5VHJhc2hfZGVsZXRlX2xhdGVyPXB5dGhvbjMzLl9QeVRyYXNoX2RlbGV0ZV9sYXRlciBEQVRBCi0gIF9QeVRyYXNoX2RlbGV0ZV9uZXN0aW5nPXB5dGhvbjMzLl9QeVRyYXNoX2RlbGV0ZV9uZXN0aW5nIERBVEEKLSAgX1B5VHJhc2hfZGVwb3NpdF9vYmplY3Q9cHl0aG9uMzMuX1B5VHJhc2hfZGVwb3NpdF9vYmplY3QKLSAgX1B5VHJhc2hfZGVzdHJveV9jaGFpbj1weXRob24zMy5fUHlUcmFzaF9kZXN0cm95X2NoYWluCi0gIF9QeVdlYWtyZWZfQ2FsbGFibGVQcm94eVR5cGU9cHl0aG9uMzMuX1B5V2Vha3JlZl9DYWxsYWJsZVByb3h5VHlwZSBEQVRBCi0gIF9QeVdlYWtyZWZfUHJveHlUeXBlPXB5dGhvbjMzLl9QeVdlYWtyZWZfUHJveHlUeXBlIERBVEEKLSAgX1B5V2Vha3JlZl9SZWZUeXBlPXB5dGhvbjMzLl9QeVdlYWtyZWZfUmVmVHlwZSBEQVRBCi0gIF9QeV9CdWlsZFZhbHVlX1NpemVUPXB5dGhvbjMzLl9QeV9CdWlsZFZhbHVlX1NpemVUCi0gIF9QeV9DaGVja1JlY3Vyc2lvbkxpbWl0PXB5dGhvbjMzLl9QeV9DaGVja1JlY3Vyc2lvbkxpbWl0IERBVEEKLSAgX1B5X0NoZWNrUmVjdXJzaXZlQ2FsbD1weXRob24zMy5fUHlfQ2hlY2tSZWN1cnNpdmVDYWxsCi0gIF9QeV9EZWFsbG9jPXB5dGhvbjMzLl9QeV9EZWFsbG9jCi0gIF9QeV9FbGxpcHNpc09iamVjdD1weXRob24zMy5fUHlfRWxsaXBzaXNPYmplY3QgREFUQQotICBfUHlfRmFsc2VTdHJ1Y3Q9cHl0aG9uMzMuX1B5X0ZhbHNlU3RydWN0IERBVEEKLSAgX1B5X05vbmVTdHJ1Y3Q9cHl0aG9uMzMuX1B5X05vbmVTdHJ1Y3QgREFUQQotICBfUHlfTm90SW1wbGVtZW50ZWRTdHJ1Y3Q9cHl0aG9uMzMuX1B5X05vdEltcGxlbWVudGVkU3RydWN0IERBVEEKLSAgX1B5X1N3YXBwZWRPcD1weXRob24zMy5fUHlfU3dhcHBlZE9wIERBVEEKLSAgX1B5X1RydWVTdHJ1Y3Q9cHl0aG9uMzMuX1B5X1RydWVTdHJ1Y3QgREFUQQotICBfUHlfVmFCdWlsZFZhbHVlX1NpemVUPXB5dGhvbjMzLl9QeV9WYUJ1aWxkVmFsdWVfU2l6ZVQKLSAgX1B5QXJnX1BhcnNlX1NpemVUPXB5dGhvbjMzLl9QeUFyZ19QYXJzZV9TaXplVAotICBfUHlBcmdfUGFyc2VUdXBsZV9TaXplVD1weXRob24zMy5fUHlBcmdfUGFyc2VUdXBsZV9TaXplVAotICBfUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzX1NpemVUPXB5dGhvbjMzLl9QeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHNfU2l6ZVQKLSAgX1B5QXJnX1ZhUGFyc2VfU2l6ZVQ9cHl0aG9uMzMuX1B5QXJnX1ZhUGFyc2VfU2l6ZVQKLSAgX1B5QXJnX1ZhUGFyc2VUdXBsZUFuZEtleXdvcmRzX1NpemVUPXB5dGhvbjMzLl9QeUFyZ19WYVBhcnNlVHVwbGVBbmRLZXl3b3Jkc19TaXplVAotICBfUHlfQnVpbGRWYWx1ZV9TaXplVD1weXRob24zMy5fUHlfQnVpbGRWYWx1ZV9TaXplVAorICBQeUFyZ19QYXJzZT1weXRob24zNC5QeUFyZ19QYXJzZQorICBQeUFyZ19QYXJzZVR1cGxlPXB5dGhvbjM0LlB5QXJnX1BhcnNlVHVwbGUKKyAgUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzPXB5dGhvbjM0LlB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcworICBQeUFyZ19VbnBhY2tUdXBsZT1weXRob24zNC5QeUFyZ19VbnBhY2tUdXBsZQorICBQeUFyZ19WYVBhcnNlPXB5dGhvbjM0LlB5QXJnX1ZhUGFyc2UKKyAgUHlBcmdfVmFQYXJzZVR1cGxlQW5kS2V5d29yZHM9cHl0aG9uMzQuUHlBcmdfVmFQYXJzZVR1cGxlQW5kS2V5d29yZHMKKyAgUHlBcmdfVmFsaWRhdGVLZXl3b3JkQXJndW1lbnRzPXB5dGhvbjM0LlB5QXJnX1ZhbGlkYXRlS2V5d29yZEFyZ3VtZW50cworICBQeUJhc2VPYmplY3RfVHlwZT1weXRob24zNC5QeUJhc2VPYmplY3RfVHlwZSBEQVRBCisgIFB5Qm9vbF9Gcm9tTG9uZz1weXRob24zNC5QeUJvb2xfRnJvbUxvbmcKKyAgUHlCb29sX1R5cGU9cHl0aG9uMzQuUHlCb29sX1R5cGUgREFUQQorICBQeUJ5dGVBcnJheUl0ZXJfVHlwZT1weXRob24zNC5QeUJ5dGVBcnJheUl0ZXJfVHlwZSBEQVRBCisgIFB5Qnl0ZUFycmF5X0FzU3RyaW5nPXB5dGhvbjM0LlB5Qnl0ZUFycmF5X0FzU3RyaW5nCisgIFB5Qnl0ZUFycmF5X0NvbmNhdD1weXRob24zNC5QeUJ5dGVBcnJheV9Db25jYXQKKyAgUHlCeXRlQXJyYXlfRnJvbU9iamVjdD1weXRob24zNC5QeUJ5dGVBcnJheV9Gcm9tT2JqZWN0CisgIFB5Qnl0ZUFycmF5X0Zyb21TdHJpbmdBbmRTaXplPXB5dGhvbjM0LlB5Qnl0ZUFycmF5X0Zyb21TdHJpbmdBbmRTaXplCisgIFB5Qnl0ZUFycmF5X1Jlc2l6ZT1weXRob24zNC5QeUJ5dGVBcnJheV9SZXNpemUKKyAgUHlCeXRlQXJyYXlfU2l6ZT1weXRob24zNC5QeUJ5dGVBcnJheV9TaXplCisgIFB5Qnl0ZUFycmF5X1R5cGU9cHl0aG9uMzQuUHlCeXRlQXJyYXlfVHlwZSBEQVRBCisgIFB5Qnl0ZXNJdGVyX1R5cGU9cHl0aG9uMzQuUHlCeXRlc0l0ZXJfVHlwZSBEQVRBCisgIFB5Qnl0ZXNfQXNTdHJpbmc9cHl0aG9uMzQuUHlCeXRlc19Bc1N0cmluZworICBQeUJ5dGVzX0FzU3RyaW5nQW5kU2l6ZT1weXRob24zNC5QeUJ5dGVzX0FzU3RyaW5nQW5kU2l6ZQorICBQeUJ5dGVzX0NvbmNhdD1weXRob24zNC5QeUJ5dGVzX0NvbmNhdAorICBQeUJ5dGVzX0NvbmNhdEFuZERlbD1weXRob24zNC5QeUJ5dGVzX0NvbmNhdEFuZERlbAorICBQeUJ5dGVzX0RlY29kZUVzY2FwZT1weXRob24zNC5QeUJ5dGVzX0RlY29kZUVzY2FwZQorICBQeUJ5dGVzX0Zyb21Gb3JtYXQ9cHl0aG9uMzQuUHlCeXRlc19Gcm9tRm9ybWF0CisgIFB5Qnl0ZXNfRnJvbUZvcm1hdFY9cHl0aG9uMzQuUHlCeXRlc19Gcm9tRm9ybWF0VgorICBQeUJ5dGVzX0Zyb21PYmplY3Q9cHl0aG9uMzQuUHlCeXRlc19Gcm9tT2JqZWN0CisgIFB5Qnl0ZXNfRnJvbVN0cmluZz1weXRob24zNC5QeUJ5dGVzX0Zyb21TdHJpbmcKKyAgUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZT1weXRob24zNC5QeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplCisgIFB5Qnl0ZXNfUmVwcj1weXRob24zNC5QeUJ5dGVzX1JlcHIKKyAgUHlCeXRlc19TaXplPXB5dGhvbjM0LlB5Qnl0ZXNfU2l6ZQorICBQeUJ5dGVzX1R5cGU9cHl0aG9uMzQuUHlCeXRlc19UeXBlIERBVEEKKyAgUHlDRnVuY3Rpb25fQ2FsbD1weXRob24zNC5QeUNGdW5jdGlvbl9DYWxsCisgIFB5Q0Z1bmN0aW9uX0NsZWFyRnJlZUxpc3Q9cHl0aG9uMzQuUHlDRnVuY3Rpb25fQ2xlYXJGcmVlTGlzdAorICBQeUNGdW5jdGlvbl9HZXRGbGFncz1weXRob24zNC5QeUNGdW5jdGlvbl9HZXRGbGFncworICBQeUNGdW5jdGlvbl9HZXRGdW5jdGlvbj1weXRob24zNC5QeUNGdW5jdGlvbl9HZXRGdW5jdGlvbgorICBQeUNGdW5jdGlvbl9HZXRTZWxmPXB5dGhvbjM0LlB5Q0Z1bmN0aW9uX0dldFNlbGYKKyAgUHlDRnVuY3Rpb25fTmV3PXB5dGhvbjM0LlB5Q0Z1bmN0aW9uX05ldworICBQeUNGdW5jdGlvbl9OZXdFeD1weXRob24zNC5QeUNGdW5jdGlvbl9OZXdFeAorICBQeUNGdW5jdGlvbl9UeXBlPXB5dGhvbjM0LlB5Q0Z1bmN0aW9uX1R5cGUgREFUQQorICBQeUNhbGxJdGVyX05ldz1weXRob24zNC5QeUNhbGxJdGVyX05ldworICBQeUNhbGxJdGVyX1R5cGU9cHl0aG9uMzQuUHlDYWxsSXRlcl9UeXBlIERBVEEKKyAgUHlDYWxsYWJsZV9DaGVjaz1weXRob24zNC5QeUNhbGxhYmxlX0NoZWNrCisgIFB5Q2Fwc3VsZV9HZXRDb250ZXh0PXB5dGhvbjM0LlB5Q2Fwc3VsZV9HZXRDb250ZXh0CisgIFB5Q2Fwc3VsZV9HZXREZXN0cnVjdG9yPXB5dGhvbjM0LlB5Q2Fwc3VsZV9HZXREZXN0cnVjdG9yCisgIFB5Q2Fwc3VsZV9HZXROYW1lPXB5dGhvbjM0LlB5Q2Fwc3VsZV9HZXROYW1lCisgIFB5Q2Fwc3VsZV9HZXRQb2ludGVyPXB5dGhvbjM0LlB5Q2Fwc3VsZV9HZXRQb2ludGVyCisgIFB5Q2Fwc3VsZV9JbXBvcnQ9cHl0aG9uMzQuUHlDYXBzdWxlX0ltcG9ydAorICBQeUNhcHN1bGVfSXNWYWxpZD1weXRob24zNC5QeUNhcHN1bGVfSXNWYWxpZAorICBQeUNhcHN1bGVfTmV3PXB5dGhvbjM0LlB5Q2Fwc3VsZV9OZXcKKyAgUHlDYXBzdWxlX1NldENvbnRleHQ9cHl0aG9uMzQuUHlDYXBzdWxlX1NldENvbnRleHQKKyAgUHlDYXBzdWxlX1NldERlc3RydWN0b3I9cHl0aG9uMzQuUHlDYXBzdWxlX1NldERlc3RydWN0b3IKKyAgUHlDYXBzdWxlX1NldE5hbWU9cHl0aG9uMzQuUHlDYXBzdWxlX1NldE5hbWUKKyAgUHlDYXBzdWxlX1NldFBvaW50ZXI9cHl0aG9uMzQuUHlDYXBzdWxlX1NldFBvaW50ZXIKKyAgUHlDYXBzdWxlX1R5cGU9cHl0aG9uMzQuUHlDYXBzdWxlX1R5cGUgREFUQQorICBQeUNsYXNzTWV0aG9kRGVzY3JfVHlwZT1weXRob24zNC5QeUNsYXNzTWV0aG9kRGVzY3JfVHlwZSBEQVRBCisgIFB5Q29kZWNfQmFja3NsYXNoUmVwbGFjZUVycm9ycz1weXRob24zNC5QeUNvZGVjX0JhY2tzbGFzaFJlcGxhY2VFcnJvcnMKKyAgUHlDb2RlY19EZWNvZGU9cHl0aG9uMzQuUHlDb2RlY19EZWNvZGUKKyAgUHlDb2RlY19EZWNvZGVyPXB5dGhvbjM0LlB5Q29kZWNfRGVjb2RlcgorICBQeUNvZGVjX0VuY29kZT1weXRob24zNC5QeUNvZGVjX0VuY29kZQorICBQeUNvZGVjX0VuY29kZXI9cHl0aG9uMzQuUHlDb2RlY19FbmNvZGVyCisgIFB5Q29kZWNfSWdub3JlRXJyb3JzPXB5dGhvbjM0LlB5Q29kZWNfSWdub3JlRXJyb3JzCisgIFB5Q29kZWNfSW5jcmVtZW50YWxEZWNvZGVyPXB5dGhvbjM0LlB5Q29kZWNfSW5jcmVtZW50YWxEZWNvZGVyCisgIFB5Q29kZWNfSW5jcmVtZW50YWxFbmNvZGVyPXB5dGhvbjM0LlB5Q29kZWNfSW5jcmVtZW50YWxFbmNvZGVyCisgIFB5Q29kZWNfS25vd25FbmNvZGluZz1weXRob24zNC5QeUNvZGVjX0tub3duRW5jb2RpbmcKKyAgUHlDb2RlY19Mb29rdXBFcnJvcj1weXRob24zNC5QeUNvZGVjX0xvb2t1cEVycm9yCisgIFB5Q29kZWNfUmVnaXN0ZXI9cHl0aG9uMzQuUHlDb2RlY19SZWdpc3RlcgorICBQeUNvZGVjX1JlZ2lzdGVyRXJyb3I9cHl0aG9uMzQuUHlDb2RlY19SZWdpc3RlckVycm9yCisgIFB5Q29kZWNfUmVwbGFjZUVycm9ycz1weXRob24zNC5QeUNvZGVjX1JlcGxhY2VFcnJvcnMKKyAgUHlDb2RlY19TdHJlYW1SZWFkZXI9cHl0aG9uMzQuUHlDb2RlY19TdHJlYW1SZWFkZXIKKyAgUHlDb2RlY19TdHJlYW1Xcml0ZXI9cHl0aG9uMzQuUHlDb2RlY19TdHJlYW1Xcml0ZXIKKyAgUHlDb2RlY19TdHJpY3RFcnJvcnM9cHl0aG9uMzQuUHlDb2RlY19TdHJpY3RFcnJvcnMKKyAgUHlDb2RlY19YTUxDaGFyUmVmUmVwbGFjZUVycm9ycz1weXRob24zNC5QeUNvZGVjX1hNTENoYXJSZWZSZXBsYWNlRXJyb3JzCisgIFB5Q29tcGxleF9Gcm9tRG91Ymxlcz1weXRob24zNC5QeUNvbXBsZXhfRnJvbURvdWJsZXMKKyAgUHlDb21wbGV4X0ltYWdBc0RvdWJsZT1weXRob24zNC5QeUNvbXBsZXhfSW1hZ0FzRG91YmxlCisgIFB5Q29tcGxleF9SZWFsQXNEb3VibGU9cHl0aG9uMzQuUHlDb21wbGV4X1JlYWxBc0RvdWJsZQorICBQeUNvbXBsZXhfVHlwZT1weXRob24zNC5QeUNvbXBsZXhfVHlwZSBEQVRBCisgIFB5RGVzY3JfTmV3Q2xhc3NNZXRob2Q9cHl0aG9uMzQuUHlEZXNjcl9OZXdDbGFzc01ldGhvZAorICBQeURlc2NyX05ld0dldFNldD1weXRob24zNC5QeURlc2NyX05ld0dldFNldAorICBQeURlc2NyX05ld01lbWJlcj1weXRob24zNC5QeURlc2NyX05ld01lbWJlcgorICBQeURlc2NyX05ld01ldGhvZD1weXRob24zNC5QeURlc2NyX05ld01ldGhvZAorICBQeURpY3RJdGVtc19UeXBlPXB5dGhvbjM0LlB5RGljdEl0ZW1zX1R5cGUgREFUQQorICBQeURpY3RJdGVySXRlbV9UeXBlPXB5dGhvbjM0LlB5RGljdEl0ZXJJdGVtX1R5cGUgREFUQQorICBQeURpY3RJdGVyS2V5X1R5cGU9cHl0aG9uMzQuUHlEaWN0SXRlcktleV9UeXBlIERBVEEKKyAgUHlEaWN0SXRlclZhbHVlX1R5cGU9cHl0aG9uMzQuUHlEaWN0SXRlclZhbHVlX1R5cGUgREFUQQorICBQeURpY3RLZXlzX1R5cGU9cHl0aG9uMzQuUHlEaWN0S2V5c19UeXBlIERBVEEKKyAgUHlEaWN0UHJveHlfTmV3PXB5dGhvbjM0LlB5RGljdFByb3h5X05ldworICBQeURpY3RQcm94eV9UeXBlPXB5dGhvbjM0LlB5RGljdFByb3h5X1R5cGUgREFUQQorICBQeURpY3RWYWx1ZXNfVHlwZT1weXRob24zNC5QeURpY3RWYWx1ZXNfVHlwZSBEQVRBCisgIFB5RGljdF9DbGVhcj1weXRob24zNC5QeURpY3RfQ2xlYXIKKyAgUHlEaWN0X0NvbnRhaW5zPXB5dGhvbjM0LlB5RGljdF9Db250YWlucworICBQeURpY3RfQ29weT1weXRob24zNC5QeURpY3RfQ29weQorICBQeURpY3RfRGVsSXRlbT1weXRob24zNC5QeURpY3RfRGVsSXRlbQorICBQeURpY3RfRGVsSXRlbVN0cmluZz1weXRob24zNC5QeURpY3RfRGVsSXRlbVN0cmluZworICBQeURpY3RfR2V0SXRlbT1weXRob24zNC5QeURpY3RfR2V0SXRlbQorICBQeURpY3RfR2V0SXRlbVN0cmluZz1weXRob24zNC5QeURpY3RfR2V0SXRlbVN0cmluZworICBQeURpY3RfR2V0SXRlbVdpdGhFcnJvcj1weXRob24zNC5QeURpY3RfR2V0SXRlbVdpdGhFcnJvcgorICBQeURpY3RfSXRlbXM9cHl0aG9uMzQuUHlEaWN0X0l0ZW1zCisgIFB5RGljdF9LZXlzPXB5dGhvbjM0LlB5RGljdF9LZXlzCisgIFB5RGljdF9NZXJnZT1weXRob24zNC5QeURpY3RfTWVyZ2UKKyAgUHlEaWN0X01lcmdlRnJvbVNlcTI9cHl0aG9uMzQuUHlEaWN0X01lcmdlRnJvbVNlcTIKKyAgUHlEaWN0X05ldz1weXRob24zNC5QeURpY3RfTmV3CisgIFB5RGljdF9OZXh0PXB5dGhvbjM0LlB5RGljdF9OZXh0CisgIFB5RGljdF9TZXRJdGVtPXB5dGhvbjM0LlB5RGljdF9TZXRJdGVtCisgIFB5RGljdF9TZXRJdGVtU3RyaW5nPXB5dGhvbjM0LlB5RGljdF9TZXRJdGVtU3RyaW5nCisgIFB5RGljdF9TaXplPXB5dGhvbjM0LlB5RGljdF9TaXplCisgIFB5RGljdF9UeXBlPXB5dGhvbjM0LlB5RGljdF9UeXBlIERBVEEKKyAgUHlEaWN0X1VwZGF0ZT1weXRob24zNC5QeURpY3RfVXBkYXRlCisgIFB5RGljdF9WYWx1ZXM9cHl0aG9uMzQuUHlEaWN0X1ZhbHVlcworICBQeUVsbGlwc2lzX1R5cGU9cHl0aG9uMzQuUHlFbGxpcHNpc19UeXBlIERBVEEKKyAgUHlFbnVtX1R5cGU9cHl0aG9uMzQuUHlFbnVtX1R5cGUgREFUQQorICBQeUVycl9CYWRBcmd1bWVudD1weXRob24zNC5QeUVycl9CYWRBcmd1bWVudAorICBQeUVycl9CYWRJbnRlcm5hbENhbGw9cHl0aG9uMzQuUHlFcnJfQmFkSW50ZXJuYWxDYWxsCisgIFB5RXJyX0NoZWNrU2lnbmFscz1weXRob24zNC5QeUVycl9DaGVja1NpZ25hbHMKKyAgUHlFcnJfQ2xlYXI9cHl0aG9uMzQuUHlFcnJfQ2xlYXIKKyAgUHlFcnJfRGlzcGxheT1weXRob24zNC5QeUVycl9EaXNwbGF5CisgIFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXM9cHl0aG9uMzQuUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcworICBQeUVycl9GZXRjaD1weXRob24zNC5QeUVycl9GZXRjaAorICBQeUVycl9Gb3JtYXQ9cHl0aG9uMzQuUHlFcnJfRm9ybWF0CisgIFB5RXJyX0dpdmVuRXhjZXB0aW9uTWF0Y2hlcz1weXRob24zNC5QeUVycl9HaXZlbkV4Y2VwdGlvbk1hdGNoZXMKKyAgUHlFcnJfTmV3RXhjZXB0aW9uPXB5dGhvbjM0LlB5RXJyX05ld0V4Y2VwdGlvbgorICBQeUVycl9OZXdFeGNlcHRpb25XaXRoRG9jPXB5dGhvbjM0LlB5RXJyX05ld0V4Y2VwdGlvbldpdGhEb2MKKyAgUHlFcnJfTm9NZW1vcnk9cHl0aG9uMzQuUHlFcnJfTm9NZW1vcnkKKyAgUHlFcnJfTm9ybWFsaXplRXhjZXB0aW9uPXB5dGhvbjM0LlB5RXJyX05vcm1hbGl6ZUV4Y2VwdGlvbgorICBQeUVycl9PY2N1cnJlZD1weXRob24zNC5QeUVycl9PY2N1cnJlZAorICBQeUVycl9QcmludD1weXRob24zNC5QeUVycl9QcmludAorICBQeUVycl9QcmludEV4PXB5dGhvbjM0LlB5RXJyX1ByaW50RXgKKyAgUHlFcnJfUHJvZ3JhbVRleHQ9cHl0aG9uMzQuUHlFcnJfUHJvZ3JhbVRleHQKKyAgUHlFcnJfUmVzdG9yZT1weXRob24zNC5QeUVycl9SZXN0b3JlCisgIFB5RXJyX1NldEZyb21FcnJubz1weXRob24zNC5QeUVycl9TZXRGcm9tRXJybm8KKyAgUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lPXB5dGhvbjM0LlB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZQorICBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWVPYmplY3Q9cHl0aG9uMzQuUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lT2JqZWN0CisgIFB5RXJyX1NldEludGVycnVwdD1weXRob24zNC5QeUVycl9TZXRJbnRlcnJ1cHQKKyAgUHlFcnJfU2V0Tm9uZT1weXRob24zNC5QeUVycl9TZXROb25lCisgIFB5RXJyX1NldE9iamVjdD1weXRob24zNC5QeUVycl9TZXRPYmplY3QKKyAgUHlFcnJfU2V0U3RyaW5nPXB5dGhvbjM0LlB5RXJyX1NldFN0cmluZworICBQeUVycl9TeW50YXhMb2NhdGlvbj1weXRob24zNC5QeUVycl9TeW50YXhMb2NhdGlvbgorICBQeUVycl9XYXJuRXg9cHl0aG9uMzQuUHlFcnJfV2FybkV4CisgIFB5RXJyX1dhcm5FeHBsaWNpdD1weXRob24zNC5QeUVycl9XYXJuRXhwbGljaXQKKyAgUHlFcnJfV2FybkZvcm1hdD1weXRob24zNC5QeUVycl9XYXJuRm9ybWF0CisgIFB5RXJyX1dyaXRlVW5yYWlzYWJsZT1weXRob24zNC5QeUVycl9Xcml0ZVVucmFpc2FibGUKKyAgUHlFdmFsX0FjcXVpcmVMb2NrPXB5dGhvbjM0LlB5RXZhbF9BY3F1aXJlTG9jaworICBQeUV2YWxfQWNxdWlyZVRocmVhZD1weXRob24zNC5QeUV2YWxfQWNxdWlyZVRocmVhZAorICBQeUV2YWxfQ2FsbEZ1bmN0aW9uPXB5dGhvbjM0LlB5RXZhbF9DYWxsRnVuY3Rpb24KKyAgUHlFdmFsX0NhbGxNZXRob2Q9cHl0aG9uMzQuUHlFdmFsX0NhbGxNZXRob2QKKyAgUHlFdmFsX0NhbGxPYmplY3RXaXRoS2V5d29yZHM9cHl0aG9uMzQuUHlFdmFsX0NhbGxPYmplY3RXaXRoS2V5d29yZHMKKyAgUHlFdmFsX0V2YWxDb2RlPXB5dGhvbjM0LlB5RXZhbF9FdmFsQ29kZQorICBQeUV2YWxfRXZhbENvZGVFeD1weXRob24zNC5QeUV2YWxfRXZhbENvZGVFeAorICBQeUV2YWxfRXZhbEZyYW1lPXB5dGhvbjM0LlB5RXZhbF9FdmFsRnJhbWUKKyAgUHlFdmFsX0V2YWxGcmFtZUV4PXB5dGhvbjM0LlB5RXZhbF9FdmFsRnJhbWVFeAorICBQeUV2YWxfR2V0QnVpbHRpbnM9cHl0aG9uMzQuUHlFdmFsX0dldEJ1aWx0aW5zCisgIFB5RXZhbF9HZXRDYWxsU3RhdHM9cHl0aG9uMzQuUHlFdmFsX0dldENhbGxTdGF0cworICBQeUV2YWxfR2V0RnJhbWU9cHl0aG9uMzQuUHlFdmFsX0dldEZyYW1lCisgIFB5RXZhbF9HZXRGdW5jRGVzYz1weXRob24zNC5QeUV2YWxfR2V0RnVuY0Rlc2MKKyAgUHlFdmFsX0dldEZ1bmNOYW1lPXB5dGhvbjM0LlB5RXZhbF9HZXRGdW5jTmFtZQorICBQeUV2YWxfR2V0R2xvYmFscz1weXRob24zNC5QeUV2YWxfR2V0R2xvYmFscworICBQeUV2YWxfR2V0TG9jYWxzPXB5dGhvbjM0LlB5RXZhbF9HZXRMb2NhbHMKKyAgUHlFdmFsX0luaXRUaHJlYWRzPXB5dGhvbjM0LlB5RXZhbF9Jbml0VGhyZWFkcworICBQeUV2YWxfUmVJbml0VGhyZWFkcz1weXRob24zNC5QeUV2YWxfUmVJbml0VGhyZWFkcworICBQeUV2YWxfUmVsZWFzZUxvY2s9cHl0aG9uMzQuUHlFdmFsX1JlbGVhc2VMb2NrCisgIFB5RXZhbF9SZWxlYXNlVGhyZWFkPXB5dGhvbjM0LlB5RXZhbF9SZWxlYXNlVGhyZWFkCisgIFB5RXZhbF9SZXN0b3JlVGhyZWFkPXB5dGhvbjM0LlB5RXZhbF9SZXN0b3JlVGhyZWFkCisgIFB5RXZhbF9TYXZlVGhyZWFkPXB5dGhvbjM0LlB5RXZhbF9TYXZlVGhyZWFkCisgIFB5RXZhbF9UaHJlYWRzSW5pdGlhbGl6ZWQ9cHl0aG9uMzQuUHlFdmFsX1RocmVhZHNJbml0aWFsaXplZAorICBQeUV4Y19Bcml0aG1ldGljRXJyb3I9cHl0aG9uMzQuUHlFeGNfQXJpdGhtZXRpY0Vycm9yIERBVEEKKyAgUHlFeGNfQXNzZXJ0aW9uRXJyb3I9cHl0aG9uMzQuUHlFeGNfQXNzZXJ0aW9uRXJyb3IgREFUQQorICBQeUV4Y19BdHRyaWJ1dGVFcnJvcj1weXRob24zNC5QeUV4Y19BdHRyaWJ1dGVFcnJvciBEQVRBCisgIFB5RXhjX0Jhc2VFeGNlcHRpb249cHl0aG9uMzQuUHlFeGNfQmFzZUV4Y2VwdGlvbiBEQVRBCisgIFB5RXhjX0J1ZmZlckVycm9yPXB5dGhvbjM0LlB5RXhjX0J1ZmZlckVycm9yIERBVEEKKyAgUHlFeGNfQnl0ZXNXYXJuaW5nPXB5dGhvbjM0LlB5RXhjX0J5dGVzV2FybmluZyBEQVRBCisgIFB5RXhjX0RlcHJlY2F0aW9uV2FybmluZz1weXRob24zNC5QeUV4Y19EZXByZWNhdGlvbldhcm5pbmcgREFUQQorICBQeUV4Y19FT0ZFcnJvcj1weXRob24zNC5QeUV4Y19FT0ZFcnJvciBEQVRBCisgIFB5RXhjX0Vudmlyb25tZW50RXJyb3I9cHl0aG9uMzQuUHlFeGNfRW52aXJvbm1lbnRFcnJvciBEQVRBCisgIFB5RXhjX0V4Y2VwdGlvbj1weXRob24zNC5QeUV4Y19FeGNlcHRpb24gREFUQQorICBQeUV4Y19GbG9hdGluZ1BvaW50RXJyb3I9cHl0aG9uMzQuUHlFeGNfRmxvYXRpbmdQb2ludEVycm9yIERBVEEKKyAgUHlFeGNfRnV0dXJlV2FybmluZz1weXRob24zNC5QeUV4Y19GdXR1cmVXYXJuaW5nIERBVEEKKyAgUHlFeGNfR2VuZXJhdG9yRXhpdD1weXRob24zNC5QeUV4Y19HZW5lcmF0b3JFeGl0IERBVEEKKyAgUHlFeGNfSU9FcnJvcj1weXRob24zNC5QeUV4Y19JT0Vycm9yIERBVEEKKyAgUHlFeGNfSW1wb3J0RXJyb3I9cHl0aG9uMzQuUHlFeGNfSW1wb3J0RXJyb3IgREFUQQorICBQeUV4Y19JbXBvcnRXYXJuaW5nPXB5dGhvbjM0LlB5RXhjX0ltcG9ydFdhcm5pbmcgREFUQQorICBQeUV4Y19JbmRlbnRhdGlvbkVycm9yPXB5dGhvbjM0LlB5RXhjX0luZGVudGF0aW9uRXJyb3IgREFUQQorICBQeUV4Y19JbmRleEVycm9yPXB5dGhvbjM0LlB5RXhjX0luZGV4RXJyb3IgREFUQQorICBQeUV4Y19LZXlFcnJvcj1weXRob24zNC5QeUV4Y19LZXlFcnJvciBEQVRBCisgIFB5RXhjX0tleWJvYXJkSW50ZXJydXB0PXB5dGhvbjM0LlB5RXhjX0tleWJvYXJkSW50ZXJydXB0IERBVEEKKyAgUHlFeGNfTG9va3VwRXJyb3I9cHl0aG9uMzQuUHlFeGNfTG9va3VwRXJyb3IgREFUQQorICBQeUV4Y19NZW1vcnlFcnJvcj1weXRob24zNC5QeUV4Y19NZW1vcnlFcnJvciBEQVRBCisgIFB5RXhjX01lbW9yeUVycm9ySW5zdD1weXRob24zNC5QeUV4Y19NZW1vcnlFcnJvckluc3QgREFUQQorICBQeUV4Y19OYW1lRXJyb3I9cHl0aG9uMzQuUHlFeGNfTmFtZUVycm9yIERBVEEKKyAgUHlFeGNfTm90SW1wbGVtZW50ZWRFcnJvcj1weXRob24zNC5QeUV4Y19Ob3RJbXBsZW1lbnRlZEVycm9yIERBVEEKKyAgUHlFeGNfT1NFcnJvcj1weXRob24zNC5QeUV4Y19PU0Vycm9yIERBVEEKKyAgUHlFeGNfT3ZlcmZsb3dFcnJvcj1weXRob24zNC5QeUV4Y19PdmVyZmxvd0Vycm9yIERBVEEKKyAgUHlFeGNfUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZz1weXRob24zNC5QeUV4Y19QZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nIERBVEEKKyAgUHlFeGNfUmVjdXJzaW9uRXJyb3JJbnN0PXB5dGhvbjM0LlB5RXhjX1JlY3Vyc2lvbkVycm9ySW5zdCBEQVRBCisgIFB5RXhjX1JlZmVyZW5jZUVycm9yPXB5dGhvbjM0LlB5RXhjX1JlZmVyZW5jZUVycm9yIERBVEEKKyAgUHlFeGNfUnVudGltZUVycm9yPXB5dGhvbjM0LlB5RXhjX1J1bnRpbWVFcnJvciBEQVRBCisgIFB5RXhjX1J1bnRpbWVXYXJuaW5nPXB5dGhvbjM0LlB5RXhjX1J1bnRpbWVXYXJuaW5nIERBVEEKKyAgUHlFeGNfU3RvcEl0ZXJhdGlvbj1weXRob24zNC5QeUV4Y19TdG9wSXRlcmF0aW9uIERBVEEKKyAgUHlFeGNfU3ludGF4RXJyb3I9cHl0aG9uMzQuUHlFeGNfU3ludGF4RXJyb3IgREFUQQorICBQeUV4Y19TeW50YXhXYXJuaW5nPXB5dGhvbjM0LlB5RXhjX1N5bnRheFdhcm5pbmcgREFUQQorICBQeUV4Y19TeXN0ZW1FcnJvcj1weXRob24zNC5QeUV4Y19TeXN0ZW1FcnJvciBEQVRBCisgIFB5RXhjX1N5c3RlbUV4aXQ9cHl0aG9uMzQuUHlFeGNfU3lzdGVtRXhpdCBEQVRBCisgIFB5RXhjX1RhYkVycm9yPXB5dGhvbjM0LlB5RXhjX1RhYkVycm9yIERBVEEKKyAgUHlFeGNfVHlwZUVycm9yPXB5dGhvbjM0LlB5RXhjX1R5cGVFcnJvciBEQVRBCisgIFB5RXhjX1VuYm91bmRMb2NhbEVycm9yPXB5dGhvbjM0LlB5RXhjX1VuYm91bmRMb2NhbEVycm9yIERBVEEKKyAgUHlFeGNfVW5pY29kZURlY29kZUVycm9yPXB5dGhvbjM0LlB5RXhjX1VuaWNvZGVEZWNvZGVFcnJvciBEQVRBCisgIFB5RXhjX1VuaWNvZGVFbmNvZGVFcnJvcj1weXRob24zNC5QeUV4Y19Vbmljb2RlRW5jb2RlRXJyb3IgREFUQQorICBQeUV4Y19Vbmljb2RlRXJyb3I9cHl0aG9uMzQuUHlFeGNfVW5pY29kZUVycm9yIERBVEEKKyAgUHlFeGNfVW5pY29kZVRyYW5zbGF0ZUVycm9yPXB5dGhvbjM0LlB5RXhjX1VuaWNvZGVUcmFuc2xhdGVFcnJvciBEQVRBCisgIFB5RXhjX1VuaWNvZGVXYXJuaW5nPXB5dGhvbjM0LlB5RXhjX1VuaWNvZGVXYXJuaW5nIERBVEEKKyAgUHlFeGNfVXNlcldhcm5pbmc9cHl0aG9uMzQuUHlFeGNfVXNlcldhcm5pbmcgREFUQQorICBQeUV4Y19WYWx1ZUVycm9yPXB5dGhvbjM0LlB5RXhjX1ZhbHVlRXJyb3IgREFUQQorICBQeUV4Y19XYXJuaW5nPXB5dGhvbjM0LlB5RXhjX1dhcm5pbmcgREFUQQorICBQeUV4Y19aZXJvRGl2aXNpb25FcnJvcj1weXRob24zNC5QeUV4Y19aZXJvRGl2aXNpb25FcnJvciBEQVRBCisgIFB5RXhjZXB0aW9uX0dldENhdXNlPXB5dGhvbjM0LlB5RXhjZXB0aW9uX0dldENhdXNlCisgIFB5RXhjZXB0aW9uX0dldENvbnRleHQ9cHl0aG9uMzQuUHlFeGNlcHRpb25fR2V0Q29udGV4dAorICBQeUV4Y2VwdGlvbl9HZXRUcmFjZWJhY2s9cHl0aG9uMzQuUHlFeGNlcHRpb25fR2V0VHJhY2ViYWNrCisgIFB5RXhjZXB0aW9uX1NldENhdXNlPXB5dGhvbjM0LlB5RXhjZXB0aW9uX1NldENhdXNlCisgIFB5RXhjZXB0aW9uX1NldENvbnRleHQ9cHl0aG9uMzQuUHlFeGNlcHRpb25fU2V0Q29udGV4dAorICBQeUV4Y2VwdGlvbl9TZXRUcmFjZWJhY2s9cHl0aG9uMzQuUHlFeGNlcHRpb25fU2V0VHJhY2ViYWNrCisgIFB5RmlsZV9Gcm9tRmQ9cHl0aG9uMzQuUHlGaWxlX0Zyb21GZAorICBQeUZpbGVfR2V0TGluZT1weXRob24zNC5QeUZpbGVfR2V0TGluZQorICBQeUZpbGVfV3JpdGVPYmplY3Q9cHl0aG9uMzQuUHlGaWxlX1dyaXRlT2JqZWN0CisgIFB5RmlsZV9Xcml0ZVN0cmluZz1weXRob24zNC5QeUZpbGVfV3JpdGVTdHJpbmcKKyAgUHlGaWx0ZXJfVHlwZT1weXRob24zNC5QeUZpbHRlcl9UeXBlIERBVEEKKyAgUHlGbG9hdF9Bc0RvdWJsZT1weXRob24zNC5QeUZsb2F0X0FzRG91YmxlCisgIFB5RmxvYXRfRnJvbURvdWJsZT1weXRob24zNC5QeUZsb2F0X0Zyb21Eb3VibGUKKyAgUHlGbG9hdF9Gcm9tU3RyaW5nPXB5dGhvbjM0LlB5RmxvYXRfRnJvbVN0cmluZworICBQeUZsb2F0X0dldEluZm89cHl0aG9uMzQuUHlGbG9hdF9HZXRJbmZvCisgIFB5RmxvYXRfR2V0TWF4PXB5dGhvbjM0LlB5RmxvYXRfR2V0TWF4CisgIFB5RmxvYXRfR2V0TWluPXB5dGhvbjM0LlB5RmxvYXRfR2V0TWluCisgIFB5RmxvYXRfVHlwZT1weXRob24zNC5QeUZsb2F0X1R5cGUgREFUQQorICBQeUZyb3plblNldF9OZXc9cHl0aG9uMzQuUHlGcm96ZW5TZXRfTmV3CisgIFB5RnJvemVuU2V0X1R5cGU9cHl0aG9uMzQuUHlGcm96ZW5TZXRfVHlwZSBEQVRBCisgIFB5R0NfQ29sbGVjdD1weXRob24zNC5QeUdDX0NvbGxlY3QKKyAgUHlHSUxTdGF0ZV9FbnN1cmU9cHl0aG9uMzQuUHlHSUxTdGF0ZV9FbnN1cmUKKyAgUHlHSUxTdGF0ZV9HZXRUaGlzVGhyZWFkU3RhdGU9cHl0aG9uMzQuUHlHSUxTdGF0ZV9HZXRUaGlzVGhyZWFkU3RhdGUKKyAgUHlHSUxTdGF0ZV9SZWxlYXNlPXB5dGhvbjM0LlB5R0lMU3RhdGVfUmVsZWFzZQorICBQeUdldFNldERlc2NyX1R5cGU9cHl0aG9uMzQuUHlHZXRTZXREZXNjcl9UeXBlIERBVEEKKyAgUHlJbXBvcnRfQWRkTW9kdWxlPXB5dGhvbjM0LlB5SW1wb3J0X0FkZE1vZHVsZQorICBQeUltcG9ydF9BcHBlbmRJbml0dGFiPXB5dGhvbjM0LlB5SW1wb3J0X0FwcGVuZEluaXR0YWIKKyAgUHlJbXBvcnRfQ2xlYW51cD1weXRob24zNC5QeUltcG9ydF9DbGVhbnVwCisgIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlPXB5dGhvbjM0LlB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlCisgIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlRXg9cHl0aG9uMzQuUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVFeAorICBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZVdpdGhQYXRobmFtZXM9cHl0aG9uMzQuUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVXaXRoUGF0aG5hbWVzCisgIFB5SW1wb3J0X0dldEltcG9ydGVyPXB5dGhvbjM0LlB5SW1wb3J0X0dldEltcG9ydGVyCisgIFB5SW1wb3J0X0dldE1hZ2ljTnVtYmVyPXB5dGhvbjM0LlB5SW1wb3J0X0dldE1hZ2ljTnVtYmVyCisgIFB5SW1wb3J0X0dldE1hZ2ljVGFnPXB5dGhvbjM0LlB5SW1wb3J0X0dldE1hZ2ljVGFnCisgIFB5SW1wb3J0X0dldE1vZHVsZURpY3Q9cHl0aG9uMzQuUHlJbXBvcnRfR2V0TW9kdWxlRGljdAorICBQeUltcG9ydF9JbXBvcnQ9cHl0aG9uMzQuUHlJbXBvcnRfSW1wb3J0CisgIFB5SW1wb3J0X0ltcG9ydEZyb3plbk1vZHVsZT1weXRob24zNC5QeUltcG9ydF9JbXBvcnRGcm96ZW5Nb2R1bGUKKyAgUHlJbXBvcnRfSW1wb3J0TW9kdWxlPXB5dGhvbjM0LlB5SW1wb3J0X0ltcG9ydE1vZHVsZQorICBQeUltcG9ydF9JbXBvcnRNb2R1bGVMZXZlbD1weXRob24zNC5QeUltcG9ydF9JbXBvcnRNb2R1bGVMZXZlbAorICBQeUltcG9ydF9JbXBvcnRNb2R1bGVOb0Jsb2NrPXB5dGhvbjM0LlB5SW1wb3J0X0ltcG9ydE1vZHVsZU5vQmxvY2sKKyAgUHlJbXBvcnRfUmVsb2FkTW9kdWxlPXB5dGhvbjM0LlB5SW1wb3J0X1JlbG9hZE1vZHVsZQorICBQeUludGVycHJldGVyU3RhdGVfQ2xlYXI9cHl0aG9uMzQuUHlJbnRlcnByZXRlclN0YXRlX0NsZWFyCisgIFB5SW50ZXJwcmV0ZXJTdGF0ZV9EZWxldGU9cHl0aG9uMzQuUHlJbnRlcnByZXRlclN0YXRlX0RlbGV0ZQorICBQeUludGVycHJldGVyU3RhdGVfTmV3PXB5dGhvbjM0LlB5SW50ZXJwcmV0ZXJTdGF0ZV9OZXcKKyAgUHlJdGVyX05leHQ9cHl0aG9uMzQuUHlJdGVyX05leHQKKyAgUHlMaXN0SXRlcl9UeXBlPXB5dGhvbjM0LlB5TGlzdEl0ZXJfVHlwZSBEQVRBCisgIFB5TGlzdFJldkl0ZXJfVHlwZT1weXRob24zNC5QeUxpc3RSZXZJdGVyX1R5cGUgREFUQQorICBQeUxpc3RfQXBwZW5kPXB5dGhvbjM0LlB5TGlzdF9BcHBlbmQKKyAgUHlMaXN0X0FzVHVwbGU9cHl0aG9uMzQuUHlMaXN0X0FzVHVwbGUKKyAgUHlMaXN0X0dldEl0ZW09cHl0aG9uMzQuUHlMaXN0X0dldEl0ZW0KKyAgUHlMaXN0X0dldFNsaWNlPXB5dGhvbjM0LlB5TGlzdF9HZXRTbGljZQorICBQeUxpc3RfSW5zZXJ0PXB5dGhvbjM0LlB5TGlzdF9JbnNlcnQKKyAgUHlMaXN0X05ldz1weXRob24zNC5QeUxpc3RfTmV3CisgIFB5TGlzdF9SZXZlcnNlPXB5dGhvbjM0LlB5TGlzdF9SZXZlcnNlCisgIFB5TGlzdF9TZXRJdGVtPXB5dGhvbjM0LlB5TGlzdF9TZXRJdGVtCisgIFB5TGlzdF9TZXRTbGljZT1weXRob24zNC5QeUxpc3RfU2V0U2xpY2UKKyAgUHlMaXN0X1NpemU9cHl0aG9uMzQuUHlMaXN0X1NpemUKKyAgUHlMaXN0X1NvcnQ9cHl0aG9uMzQuUHlMaXN0X1NvcnQKKyAgUHlMaXN0X1R5cGU9cHl0aG9uMzQuUHlMaXN0X1R5cGUgREFUQQorICBQeUxvbmdSYW5nZUl0ZXJfVHlwZT1weXRob24zNC5QeUxvbmdSYW5nZUl0ZXJfVHlwZSBEQVRBCisgIFB5TG9uZ19Bc0RvdWJsZT1weXRob24zNC5QeUxvbmdfQXNEb3VibGUKKyAgUHlMb25nX0FzTG9uZz1weXRob24zNC5QeUxvbmdfQXNMb25nCisgIFB5TG9uZ19Bc0xvbmdBbmRPdmVyZmxvdz1weXRob24zNC5QeUxvbmdfQXNMb25nQW5kT3ZlcmZsb3cKKyAgUHlMb25nX0FzTG9uZ0xvbmc9cHl0aG9uMzQuUHlMb25nX0FzTG9uZ0xvbmcKKyAgUHlMb25nX0FzTG9uZ0xvbmdBbmRPdmVyZmxvdz1weXRob24zNC5QeUxvbmdfQXNMb25nTG9uZ0FuZE92ZXJmbG93CisgIFB5TG9uZ19Bc1NpemVfdD1weXRob24zNC5QeUxvbmdfQXNTaXplX3QKKyAgUHlMb25nX0FzU3NpemVfdD1weXRob24zNC5QeUxvbmdfQXNTc2l6ZV90CisgIFB5TG9uZ19Bc1Vuc2lnbmVkTG9uZz1weXRob24zNC5QeUxvbmdfQXNVbnNpZ25lZExvbmcKKyAgUHlMb25nX0FzVW5zaWduZWRMb25nTG9uZz1weXRob24zNC5QeUxvbmdfQXNVbnNpZ25lZExvbmdMb25nCisgIFB5TG9uZ19Bc1Vuc2lnbmVkTG9uZ0xvbmdNYXNrPXB5dGhvbjM0LlB5TG9uZ19Bc1Vuc2lnbmVkTG9uZ0xvbmdNYXNrCisgIFB5TG9uZ19Bc1Vuc2lnbmVkTG9uZ01hc2s9cHl0aG9uMzQuUHlMb25nX0FzVW5zaWduZWRMb25nTWFzaworICBQeUxvbmdfQXNWb2lkUHRyPXB5dGhvbjM0LlB5TG9uZ19Bc1ZvaWRQdHIKKyAgUHlMb25nX0Zyb21Eb3VibGU9cHl0aG9uMzQuUHlMb25nX0Zyb21Eb3VibGUKKyAgUHlMb25nX0Zyb21Mb25nPXB5dGhvbjM0LlB5TG9uZ19Gcm9tTG9uZworICBQeUxvbmdfRnJvbUxvbmdMb25nPXB5dGhvbjM0LlB5TG9uZ19Gcm9tTG9uZ0xvbmcKKyAgUHlMb25nX0Zyb21TaXplX3Q9cHl0aG9uMzQuUHlMb25nX0Zyb21TaXplX3QKKyAgUHlMb25nX0Zyb21Tc2l6ZV90PXB5dGhvbjM0LlB5TG9uZ19Gcm9tU3NpemVfdAorICBQeUxvbmdfRnJvbVN0cmluZz1weXRob24zNC5QeUxvbmdfRnJvbVN0cmluZworICBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZz1weXRob24zNC5QeUxvbmdfRnJvbVVuc2lnbmVkTG9uZworICBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZ0xvbmc9cHl0aG9uMzQuUHlMb25nX0Zyb21VbnNpZ25lZExvbmdMb25nCisgIFB5TG9uZ19Gcm9tVm9pZFB0cj1weXRob24zNC5QeUxvbmdfRnJvbVZvaWRQdHIKKyAgUHlMb25nX0dldEluZm89cHl0aG9uMzQuUHlMb25nX0dldEluZm8KKyAgUHlMb25nX1R5cGU9cHl0aG9uMzQuUHlMb25nX1R5cGUgREFUQQorICBQeU1hcF9UeXBlPXB5dGhvbjM0LlB5TWFwX1R5cGUgREFUQQorICBQeU1hcHBpbmdfQ2hlY2s9cHl0aG9uMzQuUHlNYXBwaW5nX0NoZWNrCisgIFB5TWFwcGluZ19HZXRJdGVtU3RyaW5nPXB5dGhvbjM0LlB5TWFwcGluZ19HZXRJdGVtU3RyaW5nCisgIFB5TWFwcGluZ19IYXNLZXk9cHl0aG9uMzQuUHlNYXBwaW5nX0hhc0tleQorICBQeU1hcHBpbmdfSGFzS2V5U3RyaW5nPXB5dGhvbjM0LlB5TWFwcGluZ19IYXNLZXlTdHJpbmcKKyAgUHlNYXBwaW5nX0l0ZW1zPXB5dGhvbjM0LlB5TWFwcGluZ19JdGVtcworICBQeU1hcHBpbmdfS2V5cz1weXRob24zNC5QeU1hcHBpbmdfS2V5cworICBQeU1hcHBpbmdfTGVuZ3RoPXB5dGhvbjM0LlB5TWFwcGluZ19MZW5ndGgKKyAgUHlNYXBwaW5nX1NldEl0ZW1TdHJpbmc9cHl0aG9uMzQuUHlNYXBwaW5nX1NldEl0ZW1TdHJpbmcKKyAgUHlNYXBwaW5nX1NpemU9cHl0aG9uMzQuUHlNYXBwaW5nX1NpemUKKyAgUHlNYXBwaW5nX1ZhbHVlcz1weXRob24zNC5QeU1hcHBpbmdfVmFsdWVzCisgIFB5TWVtX0ZyZWU9cHl0aG9uMzQuUHlNZW1fRnJlZQorICBQeU1lbV9NYWxsb2M9cHl0aG9uMzQuUHlNZW1fTWFsbG9jCisgIFB5TWVtX1JlYWxsb2M9cHl0aG9uMzQuUHlNZW1fUmVhbGxvYworICBQeU1lbWJlckRlc2NyX1R5cGU9cHl0aG9uMzQuUHlNZW1iZXJEZXNjcl9UeXBlIERBVEEKKyAgUHlNZW1vcnlWaWV3X0Zyb21PYmplY3Q9cHl0aG9uMzQuUHlNZW1vcnlWaWV3X0Zyb21PYmplY3QKKyAgUHlNZW1vcnlWaWV3X0dldENvbnRpZ3VvdXM9cHl0aG9uMzQuUHlNZW1vcnlWaWV3X0dldENvbnRpZ3VvdXMKKyAgUHlNZW1vcnlWaWV3X1R5cGU9cHl0aG9uMzQuUHlNZW1vcnlWaWV3X1R5cGUgREFUQQorICBQeU1ldGhvZERlc2NyX1R5cGU9cHl0aG9uMzQuUHlNZXRob2REZXNjcl9UeXBlIERBVEEKKyAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQ9cHl0aG9uMzQuUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQKKyAgUHlNb2R1bGVfQWRkT2JqZWN0PXB5dGhvbjM0LlB5TW9kdWxlX0FkZE9iamVjdAorICBQeU1vZHVsZV9BZGRTdHJpbmdDb25zdGFudD1weXRob24zNC5QeU1vZHVsZV9BZGRTdHJpbmdDb25zdGFudAorICBQeU1vZHVsZV9DcmVhdGUyPXB5dGhvbjM0LlB5TW9kdWxlX0NyZWF0ZTIKKyAgUHlNb2R1bGVfR2V0RGVmPXB5dGhvbjM0LlB5TW9kdWxlX0dldERlZgorICBQeU1vZHVsZV9HZXREaWN0PXB5dGhvbjM0LlB5TW9kdWxlX0dldERpY3QKKyAgUHlNb2R1bGVfR2V0RmlsZW5hbWU9cHl0aG9uMzQuUHlNb2R1bGVfR2V0RmlsZW5hbWUKKyAgUHlNb2R1bGVfR2V0RmlsZW5hbWVPYmplY3Q9cHl0aG9uMzQuUHlNb2R1bGVfR2V0RmlsZW5hbWVPYmplY3QKKyAgUHlNb2R1bGVfR2V0TmFtZT1weXRob24zNC5QeU1vZHVsZV9HZXROYW1lCisgIFB5TW9kdWxlX0dldFN0YXRlPXB5dGhvbjM0LlB5TW9kdWxlX0dldFN0YXRlCisgIFB5TW9kdWxlX05ldz1weXRob24zNC5QeU1vZHVsZV9OZXcKKyAgUHlNb2R1bGVfVHlwZT1weXRob24zNC5QeU1vZHVsZV9UeXBlIERBVEEKKyAgUHlOdWxsSW1wb3J0ZXJfVHlwZT1weXRob24zNC5QeU51bGxJbXBvcnRlcl9UeXBlIERBVEEKKyAgUHlOdW1iZXJfQWJzb2x1dGU9cHl0aG9uMzQuUHlOdW1iZXJfQWJzb2x1dGUKKyAgUHlOdW1iZXJfQWRkPXB5dGhvbjM0LlB5TnVtYmVyX0FkZAorICBQeU51bWJlcl9BbmQ9cHl0aG9uMzQuUHlOdW1iZXJfQW5kCisgIFB5TnVtYmVyX0FzU3NpemVfdD1weXRob24zNC5QeU51bWJlcl9Bc1NzaXplX3QKKyAgUHlOdW1iZXJfQ2hlY2s9cHl0aG9uMzQuUHlOdW1iZXJfQ2hlY2sKKyAgUHlOdW1iZXJfRGl2bW9kPXB5dGhvbjM0LlB5TnVtYmVyX0Rpdm1vZAorICBQeU51bWJlcl9GbG9hdD1weXRob24zNC5QeU51bWJlcl9GbG9hdAorICBQeU51bWJlcl9GbG9vckRpdmlkZT1weXRob24zNC5QeU51bWJlcl9GbG9vckRpdmlkZQorICBQeU51bWJlcl9JblBsYWNlQWRkPXB5dGhvbjM0LlB5TnVtYmVyX0luUGxhY2VBZGQKKyAgUHlOdW1iZXJfSW5QbGFjZUFuZD1weXRob24zNC5QeU51bWJlcl9JblBsYWNlQW5kCisgIFB5TnVtYmVyX0luUGxhY2VGbG9vckRpdmlkZT1weXRob24zNC5QeU51bWJlcl9JblBsYWNlRmxvb3JEaXZpZGUKKyAgUHlOdW1iZXJfSW5QbGFjZUxzaGlmdD1weXRob24zNC5QeU51bWJlcl9JblBsYWNlTHNoaWZ0CisgIFB5TnVtYmVyX0luUGxhY2VNdWx0aXBseT1weXRob24zNC5QeU51bWJlcl9JblBsYWNlTXVsdGlwbHkKKyAgUHlOdW1iZXJfSW5QbGFjZU9yPXB5dGhvbjM0LlB5TnVtYmVyX0luUGxhY2VPcgorICBQeU51bWJlcl9JblBsYWNlUG93ZXI9cHl0aG9uMzQuUHlOdW1iZXJfSW5QbGFjZVBvd2VyCisgIFB5TnVtYmVyX0luUGxhY2VSZW1haW5kZXI9cHl0aG9uMzQuUHlOdW1iZXJfSW5QbGFjZVJlbWFpbmRlcgorICBQeU51bWJlcl9JblBsYWNlUnNoaWZ0PXB5dGhvbjM0LlB5TnVtYmVyX0luUGxhY2VSc2hpZnQKKyAgUHlOdW1iZXJfSW5QbGFjZVN1YnRyYWN0PXB5dGhvbjM0LlB5TnVtYmVyX0luUGxhY2VTdWJ0cmFjdAorICBQeU51bWJlcl9JblBsYWNlVHJ1ZURpdmlkZT1weXRob24zNC5QeU51bWJlcl9JblBsYWNlVHJ1ZURpdmlkZQorICBQeU51bWJlcl9JblBsYWNlWG9yPXB5dGhvbjM0LlB5TnVtYmVyX0luUGxhY2VYb3IKKyAgUHlOdW1iZXJfSW5kZXg9cHl0aG9uMzQuUHlOdW1iZXJfSW5kZXgKKyAgUHlOdW1iZXJfSW52ZXJ0PXB5dGhvbjM0LlB5TnVtYmVyX0ludmVydAorICBQeU51bWJlcl9Mb25nPXB5dGhvbjM0LlB5TnVtYmVyX0xvbmcKKyAgUHlOdW1iZXJfTHNoaWZ0PXB5dGhvbjM0LlB5TnVtYmVyX0xzaGlmdAorICBQeU51bWJlcl9NdWx0aXBseT1weXRob24zNC5QeU51bWJlcl9NdWx0aXBseQorICBQeU51bWJlcl9OZWdhdGl2ZT1weXRob24zNC5QeU51bWJlcl9OZWdhdGl2ZQorICBQeU51bWJlcl9Pcj1weXRob24zNC5QeU51bWJlcl9PcgorICBQeU51bWJlcl9Qb3NpdGl2ZT1weXRob24zNC5QeU51bWJlcl9Qb3NpdGl2ZQorICBQeU51bWJlcl9Qb3dlcj1weXRob24zNC5QeU51bWJlcl9Qb3dlcgorICBQeU51bWJlcl9SZW1haW5kZXI9cHl0aG9uMzQuUHlOdW1iZXJfUmVtYWluZGVyCisgIFB5TnVtYmVyX1JzaGlmdD1weXRob24zNC5QeU51bWJlcl9Sc2hpZnQKKyAgUHlOdW1iZXJfU3VidHJhY3Q9cHl0aG9uMzQuUHlOdW1iZXJfU3VidHJhY3QKKyAgUHlOdW1iZXJfVG9CYXNlPXB5dGhvbjM0LlB5TnVtYmVyX1RvQmFzZQorICBQeU51bWJlcl9UcnVlRGl2aWRlPXB5dGhvbjM0LlB5TnVtYmVyX1RydWVEaXZpZGUKKyAgUHlOdW1iZXJfWG9yPXB5dGhvbjM0LlB5TnVtYmVyX1hvcgorICBQeU9TX0FmdGVyRm9yaz1weXRob24zNC5QeU9TX0FmdGVyRm9yaworICBQeU9TX0luaXRJbnRlcnJ1cHRzPXB5dGhvbjM0LlB5T1NfSW5pdEludGVycnVwdHMKKyAgUHlPU19JbnB1dEhvb2s9cHl0aG9uMzQuUHlPU19JbnB1dEhvb2sgREFUQQorICBQeU9TX0ludGVycnVwdE9jY3VycmVkPXB5dGhvbjM0LlB5T1NfSW50ZXJydXB0T2NjdXJyZWQKKyAgUHlPU19SZWFkbGluZUZ1bmN0aW9uUG9pbnRlcj1weXRob24zNC5QeU9TX1JlYWRsaW5lRnVuY3Rpb25Qb2ludGVyIERBVEEKKyAgUHlPU19kb3VibGVfdG9fc3RyaW5nPXB5dGhvbjM0LlB5T1NfZG91YmxlX3RvX3N0cmluZworICBQeU9TX2dldHNpZz1weXRob24zNC5QeU9TX2dldHNpZworICBQeU9TX215c3RyaWNtcD1weXRob24zNC5QeU9TX215c3RyaWNtcAorICBQeU9TX215c3RybmljbXA9cHl0aG9uMzQuUHlPU19teXN0cm5pY21wCisgIFB5T1Nfc2V0c2lnPXB5dGhvbjM0LlB5T1Nfc2V0c2lnCisgIFB5T1Nfc25wcmludGY9cHl0aG9uMzQuUHlPU19zbnByaW50ZgorICBQeU9TX3N0cmluZ190b19kb3VibGU9cHl0aG9uMzQuUHlPU19zdHJpbmdfdG9fZG91YmxlCisgIFB5T1Nfc3RydG9sPXB5dGhvbjM0LlB5T1Nfc3RydG9sCisgIFB5T1Nfc3RydG91bD1weXRob24zNC5QeU9TX3N0cnRvdWwKKyAgUHlPU192c25wcmludGY9cHl0aG9uMzQuUHlPU192c25wcmludGYKKyAgUHlPYmplY3RfQVNDSUk9cHl0aG9uMzQuUHlPYmplY3RfQVNDSUkKKyAgUHlPYmplY3RfQXNDaGFyQnVmZmVyPXB5dGhvbjM0LlB5T2JqZWN0X0FzQ2hhckJ1ZmZlcgorICBQeU9iamVjdF9Bc0ZpbGVEZXNjcmlwdG9yPXB5dGhvbjM0LlB5T2JqZWN0X0FzRmlsZURlc2NyaXB0b3IKKyAgUHlPYmplY3RfQXNSZWFkQnVmZmVyPXB5dGhvbjM0LlB5T2JqZWN0X0FzUmVhZEJ1ZmZlcgorICBQeU9iamVjdF9Bc1dyaXRlQnVmZmVyPXB5dGhvbjM0LlB5T2JqZWN0X0FzV3JpdGVCdWZmZXIKKyAgUHlPYmplY3RfQnl0ZXM9cHl0aG9uMzQuUHlPYmplY3RfQnl0ZXMKKyAgUHlPYmplY3RfQ2FsbD1weXRob24zNC5QeU9iamVjdF9DYWxsCisgIFB5T2JqZWN0X0NhbGxGdW5jdGlvbj1weXRob24zNC5QeU9iamVjdF9DYWxsRnVuY3Rpb24KKyAgUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncz1weXRob24zNC5QeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzCisgIFB5T2JqZWN0X0NhbGxNZXRob2Q9cHl0aG9uMzQuUHlPYmplY3RfQ2FsbE1ldGhvZAorICBQeU9iamVjdF9DYWxsTWV0aG9kT2JqQXJncz1weXRob24zNC5QeU9iamVjdF9DYWxsTWV0aG9kT2JqQXJncworICBQeU9iamVjdF9DYWxsT2JqZWN0PXB5dGhvbjM0LlB5T2JqZWN0X0NhbGxPYmplY3QKKyAgUHlPYmplY3RfQ2hlY2tSZWFkQnVmZmVyPXB5dGhvbjM0LlB5T2JqZWN0X0NoZWNrUmVhZEJ1ZmZlcgorICBQeU9iamVjdF9DbGVhcldlYWtSZWZzPXB5dGhvbjM0LlB5T2JqZWN0X0NsZWFyV2Vha1JlZnMKKyAgUHlPYmplY3RfRGVsSXRlbT1weXRob24zNC5QeU9iamVjdF9EZWxJdGVtCisgIFB5T2JqZWN0X0RlbEl0ZW1TdHJpbmc9cHl0aG9uMzQuUHlPYmplY3RfRGVsSXRlbVN0cmluZworICBQeU9iamVjdF9EaXI9cHl0aG9uMzQuUHlPYmplY3RfRGlyCisgIFB5T2JqZWN0X0Zvcm1hdD1weXRob24zNC5QeU9iamVjdF9Gb3JtYXQKKyAgUHlPYmplY3RfRnJlZT1weXRob24zNC5QeU9iamVjdF9GcmVlCisgIFB5T2JqZWN0X0dDX0RlbD1weXRob24zNC5QeU9iamVjdF9HQ19EZWwKKyAgUHlPYmplY3RfR0NfVHJhY2s9cHl0aG9uMzQuUHlPYmplY3RfR0NfVHJhY2sKKyAgUHlPYmplY3RfR0NfVW5UcmFjaz1weXRob24zNC5QeU9iamVjdF9HQ19VblRyYWNrCisgIFB5T2JqZWN0X0dlbmVyaWNHZXRBdHRyPXB5dGhvbjM0LlB5T2JqZWN0X0dlbmVyaWNHZXRBdHRyCisgIFB5T2JqZWN0X0dlbmVyaWNTZXRBdHRyPXB5dGhvbjM0LlB5T2JqZWN0X0dlbmVyaWNTZXRBdHRyCisgIFB5T2JqZWN0X0dldEF0dHI9cHl0aG9uMzQuUHlPYmplY3RfR2V0QXR0cgorICBQeU9iamVjdF9HZXRBdHRyU3RyaW5nPXB5dGhvbjM0LlB5T2JqZWN0X0dldEF0dHJTdHJpbmcKKyAgUHlPYmplY3RfR2V0SXRlbT1weXRob24zNC5QeU9iamVjdF9HZXRJdGVtCisgIFB5T2JqZWN0X0dldEl0ZXI9cHl0aG9uMzQuUHlPYmplY3RfR2V0SXRlcgorICBQeU9iamVjdF9IYXNBdHRyPXB5dGhvbjM0LlB5T2JqZWN0X0hhc0F0dHIKKyAgUHlPYmplY3RfSGFzQXR0clN0cmluZz1weXRob24zNC5QeU9iamVjdF9IYXNBdHRyU3RyaW5nCisgIFB5T2JqZWN0X0hhc2g9cHl0aG9uMzQuUHlPYmplY3RfSGFzaAorICBQeU9iamVjdF9IYXNoTm90SW1wbGVtZW50ZWQ9cHl0aG9uMzQuUHlPYmplY3RfSGFzaE5vdEltcGxlbWVudGVkCisgIFB5T2JqZWN0X0luaXQ9cHl0aG9uMzQuUHlPYmplY3RfSW5pdAorICBQeU9iamVjdF9Jbml0VmFyPXB5dGhvbjM0LlB5T2JqZWN0X0luaXRWYXIKKyAgUHlPYmplY3RfSXNJbnN0YW5jZT1weXRob24zNC5QeU9iamVjdF9Jc0luc3RhbmNlCisgIFB5T2JqZWN0X0lzU3ViY2xhc3M9cHl0aG9uMzQuUHlPYmplY3RfSXNTdWJjbGFzcworICBQeU9iamVjdF9Jc1RydWU9cHl0aG9uMzQuUHlPYmplY3RfSXNUcnVlCisgIFB5T2JqZWN0X0xlbmd0aD1weXRob24zNC5QeU9iamVjdF9MZW5ndGgKKyAgUHlPYmplY3RfTWFsbG9jPXB5dGhvbjM0LlB5T2JqZWN0X01hbGxvYworICBQeU9iamVjdF9Ob3Q9cHl0aG9uMzQuUHlPYmplY3RfTm90CisgIFB5T2JqZWN0X1JlYWxsb2M9cHl0aG9uMzQuUHlPYmplY3RfUmVhbGxvYworICBQeU9iamVjdF9SZXByPXB5dGhvbjM0LlB5T2JqZWN0X1JlcHIKKyAgUHlPYmplY3RfUmljaENvbXBhcmU9cHl0aG9uMzQuUHlPYmplY3RfUmljaENvbXBhcmUKKyAgUHlPYmplY3RfUmljaENvbXBhcmVCb29sPXB5dGhvbjM0LlB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbAorICBQeU9iamVjdF9TZWxmSXRlcj1weXRob24zNC5QeU9iamVjdF9TZWxmSXRlcgorICBQeU9iamVjdF9TZXRBdHRyPXB5dGhvbjM0LlB5T2JqZWN0X1NldEF0dHIKKyAgUHlPYmplY3RfU2V0QXR0clN0cmluZz1weXRob24zNC5QeU9iamVjdF9TZXRBdHRyU3RyaW5nCisgIFB5T2JqZWN0X1NldEl0ZW09cHl0aG9uMzQuUHlPYmplY3RfU2V0SXRlbQorICBQeU9iamVjdF9TaXplPXB5dGhvbjM0LlB5T2JqZWN0X1NpemUKKyAgUHlPYmplY3RfU3RyPXB5dGhvbjM0LlB5T2JqZWN0X1N0cgorICBQeU9iamVjdF9UeXBlPXB5dGhvbjM0LlB5T2JqZWN0X1R5cGUgREFUQQorICBQeVBhcnNlcl9TaW1wbGVQYXJzZUZpbGVGbGFncz1weXRob24zNC5QeVBhcnNlcl9TaW1wbGVQYXJzZUZpbGVGbGFncworICBQeVBhcnNlcl9TaW1wbGVQYXJzZVN0cmluZ0ZsYWdzPXB5dGhvbjM0LlB5UGFyc2VyX1NpbXBsZVBhcnNlU3RyaW5nRmxhZ3MKKyAgUHlQcm9wZXJ0eV9UeXBlPXB5dGhvbjM0LlB5UHJvcGVydHlfVHlwZSBEQVRBCisgIFB5UmFuZ2VJdGVyX1R5cGU9cHl0aG9uMzQuUHlSYW5nZUl0ZXJfVHlwZSBEQVRBCisgIFB5UmFuZ2VfVHlwZT1weXRob24zNC5QeVJhbmdlX1R5cGUgREFUQQorICBQeVJldmVyc2VkX1R5cGU9cHl0aG9uMzQuUHlSZXZlcnNlZF9UeXBlIERBVEEKKyAgUHlTZXFJdGVyX05ldz1weXRob24zNC5QeVNlcUl0ZXJfTmV3CisgIFB5U2VxSXRlcl9UeXBlPXB5dGhvbjM0LlB5U2VxSXRlcl9UeXBlIERBVEEKKyAgUHlTZXF1ZW5jZV9DaGVjaz1weXRob24zNC5QeVNlcXVlbmNlX0NoZWNrCisgIFB5U2VxdWVuY2VfQ29uY2F0PXB5dGhvbjM0LlB5U2VxdWVuY2VfQ29uY2F0CisgIFB5U2VxdWVuY2VfQ29udGFpbnM9cHl0aG9uMzQuUHlTZXF1ZW5jZV9Db250YWlucworICBQeVNlcXVlbmNlX0NvdW50PXB5dGhvbjM0LlB5U2VxdWVuY2VfQ291bnQKKyAgUHlTZXF1ZW5jZV9EZWxJdGVtPXB5dGhvbjM0LlB5U2VxdWVuY2VfRGVsSXRlbQorICBQeVNlcXVlbmNlX0RlbFNsaWNlPXB5dGhvbjM0LlB5U2VxdWVuY2VfRGVsU2xpY2UKKyAgUHlTZXF1ZW5jZV9GYXN0PXB5dGhvbjM0LlB5U2VxdWVuY2VfRmFzdAorICBQeVNlcXVlbmNlX0dldEl0ZW09cHl0aG9uMzQuUHlTZXF1ZW5jZV9HZXRJdGVtCisgIFB5U2VxdWVuY2VfR2V0U2xpY2U9cHl0aG9uMzQuUHlTZXF1ZW5jZV9HZXRTbGljZQorICBQeVNlcXVlbmNlX0luPXB5dGhvbjM0LlB5U2VxdWVuY2VfSW4KKyAgUHlTZXF1ZW5jZV9JblBsYWNlQ29uY2F0PXB5dGhvbjM0LlB5U2VxdWVuY2VfSW5QbGFjZUNvbmNhdAorICBQeVNlcXVlbmNlX0luUGxhY2VSZXBlYXQ9cHl0aG9uMzQuUHlTZXF1ZW5jZV9JblBsYWNlUmVwZWF0CisgIFB5U2VxdWVuY2VfSW5kZXg9cHl0aG9uMzQuUHlTZXF1ZW5jZV9JbmRleAorICBQeVNlcXVlbmNlX0xlbmd0aD1weXRob24zNC5QeVNlcXVlbmNlX0xlbmd0aAorICBQeVNlcXVlbmNlX0xpc3Q9cHl0aG9uMzQuUHlTZXF1ZW5jZV9MaXN0CisgIFB5U2VxdWVuY2VfUmVwZWF0PXB5dGhvbjM0LlB5U2VxdWVuY2VfUmVwZWF0CisgIFB5U2VxdWVuY2VfU2V0SXRlbT1weXRob24zNC5QeVNlcXVlbmNlX1NldEl0ZW0KKyAgUHlTZXF1ZW5jZV9TZXRTbGljZT1weXRob24zNC5QeVNlcXVlbmNlX1NldFNsaWNlCisgIFB5U2VxdWVuY2VfU2l6ZT1weXRob24zNC5QeVNlcXVlbmNlX1NpemUKKyAgUHlTZXF1ZW5jZV9UdXBsZT1weXRob24zNC5QeVNlcXVlbmNlX1R1cGxlCisgIFB5U2V0SXRlcl9UeXBlPXB5dGhvbjM0LlB5U2V0SXRlcl9UeXBlIERBVEEKKyAgUHlTZXRfQWRkPXB5dGhvbjM0LlB5U2V0X0FkZAorICBQeVNldF9DbGVhcj1weXRob24zNC5QeVNldF9DbGVhcgorICBQeVNldF9Db250YWlucz1weXRob24zNC5QeVNldF9Db250YWlucworICBQeVNldF9EaXNjYXJkPXB5dGhvbjM0LlB5U2V0X0Rpc2NhcmQKKyAgUHlTZXRfTmV3PXB5dGhvbjM0LlB5U2V0X05ldworICBQeVNldF9Qb3A9cHl0aG9uMzQuUHlTZXRfUG9wCisgIFB5U2V0X1NpemU9cHl0aG9uMzQuUHlTZXRfU2l6ZQorICBQeVNldF9UeXBlPXB5dGhvbjM0LlB5U2V0X1R5cGUgREFUQQorICBQeVNsaWNlX0dldEluZGljZXM9cHl0aG9uMzQuUHlTbGljZV9HZXRJbmRpY2VzCisgIFB5U2xpY2VfR2V0SW5kaWNlc0V4PXB5dGhvbjM0LlB5U2xpY2VfR2V0SW5kaWNlc0V4CisgIFB5U2xpY2VfTmV3PXB5dGhvbjM0LlB5U2xpY2VfTmV3CisgIFB5U2xpY2VfVHlwZT1weXRob24zNC5QeVNsaWNlX1R5cGUgREFUQQorICBQeVNvcnRXcmFwcGVyX1R5cGU9cHl0aG9uMzQuUHlTb3J0V3JhcHBlcl9UeXBlIERBVEEKKyAgUHlTdGF0ZV9GaW5kTW9kdWxlPXB5dGhvbjM0LlB5U3RhdGVfRmluZE1vZHVsZQorICBQeVN0YXRlX0FkZE1vZHVsZT1weXRob24zNC5QeVN0YXRlX0FkZE1vZHVsZQorICBQeVN0YXRlX1JlbW92ZU1vZHVsZT1weXRob24zNC5QeVN0YXRlX1JlbW92ZU1vZHVsZQorICBQeVN0cnVjdFNlcXVlbmNlX0dldEl0ZW09cHl0aG9uMzQuUHlTdHJ1Y3RTZXF1ZW5jZV9HZXRJdGVtCisgIFB5U3RydWN0U2VxdWVuY2VfTmV3PXB5dGhvbjM0LlB5U3RydWN0U2VxdWVuY2VfTmV3CisgIFB5U3RydWN0U2VxdWVuY2VfTmV3VHlwZT1weXRob24zNC5QeVN0cnVjdFNlcXVlbmNlX05ld1R5cGUKKyAgUHlTdHJ1Y3RTZXF1ZW5jZV9TZXRJdGVtPXB5dGhvbjM0LlB5U3RydWN0U2VxdWVuY2VfU2V0SXRlbQorICBQeVN1cGVyX1R5cGU9cHl0aG9uMzQuUHlTdXBlcl9UeXBlIERBVEEKKyAgUHlTeXNfQWRkV2Fybk9wdGlvbj1weXRob24zNC5QeVN5c19BZGRXYXJuT3B0aW9uCisgIFB5U3lzX0FkZFdhcm5PcHRpb25Vbmljb2RlPXB5dGhvbjM0LlB5U3lzX0FkZFdhcm5PcHRpb25Vbmljb2RlCisgIFB5U3lzX0Zvcm1hdFN0ZGVycj1weXRob24zNC5QeVN5c19Gb3JtYXRTdGRlcnIKKyAgUHlTeXNfRm9ybWF0U3Rkb3V0PXB5dGhvbjM0LlB5U3lzX0Zvcm1hdFN0ZG91dAorICBQeVN5c19HZXRPYmplY3Q9cHl0aG9uMzQuUHlTeXNfR2V0T2JqZWN0CisgIFB5U3lzX0hhc1dhcm5PcHRpb25zPXB5dGhvbjM0LlB5U3lzX0hhc1dhcm5PcHRpb25zCisgIFB5U3lzX1Jlc2V0V2Fybk9wdGlvbnM9cHl0aG9uMzQuUHlTeXNfUmVzZXRXYXJuT3B0aW9ucworICBQeVN5c19TZXRBcmd2PXB5dGhvbjM0LlB5U3lzX1NldEFyZ3YKKyAgUHlTeXNfU2V0QXJndkV4PXB5dGhvbjM0LlB5U3lzX1NldEFyZ3ZFeAorICBQeVN5c19TZXRPYmplY3Q9cHl0aG9uMzQuUHlTeXNfU2V0T2JqZWN0CisgIFB5U3lzX1NldFBhdGg9cHl0aG9uMzQuUHlTeXNfU2V0UGF0aAorICBQeVN5c19Xcml0ZVN0ZGVycj1weXRob24zNC5QeVN5c19Xcml0ZVN0ZGVycgorICBQeVN5c19Xcml0ZVN0ZG91dD1weXRob24zNC5QeVN5c19Xcml0ZVN0ZG91dAorICBQeVRocmVhZFN0YXRlX0NsZWFyPXB5dGhvbjM0LlB5VGhyZWFkU3RhdGVfQ2xlYXIKKyAgUHlUaHJlYWRTdGF0ZV9EZWxldGU9cHl0aG9uMzQuUHlUaHJlYWRTdGF0ZV9EZWxldGUKKyAgUHlUaHJlYWRTdGF0ZV9EZWxldGVDdXJyZW50PXB5dGhvbjM0LlB5VGhyZWFkU3RhdGVfRGVsZXRlQ3VycmVudAorICBQeVRocmVhZFN0YXRlX0dldD1weXRob24zNC5QeVRocmVhZFN0YXRlX0dldAorICBQeVRocmVhZFN0YXRlX0dldERpY3Q9cHl0aG9uMzQuUHlUaHJlYWRTdGF0ZV9HZXREaWN0CisgIFB5VGhyZWFkU3RhdGVfTmV3PXB5dGhvbjM0LlB5VGhyZWFkU3RhdGVfTmV3CisgIFB5VGhyZWFkU3RhdGVfU2V0QXN5bmNFeGM9cHl0aG9uMzQuUHlUaHJlYWRTdGF0ZV9TZXRBc3luY0V4YworICBQeVRocmVhZFN0YXRlX1N3YXA9cHl0aG9uMzQuUHlUaHJlYWRTdGF0ZV9Td2FwCisgIFB5VHJhY2VCYWNrX0hlcmU9cHl0aG9uMzQuUHlUcmFjZUJhY2tfSGVyZQorICBQeVRyYWNlQmFja19QcmludD1weXRob24zNC5QeVRyYWNlQmFja19QcmludAorICBQeVRyYWNlQmFja19UeXBlPXB5dGhvbjM0LlB5VHJhY2VCYWNrX1R5cGUgREFUQQorICBQeVR1cGxlSXRlcl9UeXBlPXB5dGhvbjM0LlB5VHVwbGVJdGVyX1R5cGUgREFUQQorICBQeVR1cGxlX0NsZWFyRnJlZUxpc3Q9cHl0aG9uMzQuUHlUdXBsZV9DbGVhckZyZWVMaXN0CisgIFB5VHVwbGVfR2V0SXRlbT1weXRob24zNC5QeVR1cGxlX0dldEl0ZW0KKyAgUHlUdXBsZV9HZXRTbGljZT1weXRob24zNC5QeVR1cGxlX0dldFNsaWNlCisgIFB5VHVwbGVfTmV3PXB5dGhvbjM0LlB5VHVwbGVfTmV3CisgIFB5VHVwbGVfUGFjaz1weXRob24zNC5QeVR1cGxlX1BhY2sKKyAgUHlUdXBsZV9TZXRJdGVtPXB5dGhvbjM0LlB5VHVwbGVfU2V0SXRlbQorICBQeVR1cGxlX1NpemU9cHl0aG9uMzQuUHlUdXBsZV9TaXplCisgIFB5VHVwbGVfVHlwZT1weXRob24zNC5QeVR1cGxlX1R5cGUgREFUQQorICBQeVR5cGVfQ2xlYXJDYWNoZT1weXRob24zNC5QeVR5cGVfQ2xlYXJDYWNoZQorICBQeVR5cGVfRnJvbVNwZWM9cHl0aG9uMzQuUHlUeXBlX0Zyb21TcGVjCisgIFB5VHlwZV9Gcm9tU3BlY1dpdGhCYXNlcz1weXRob24zNC5QeVR5cGVfRnJvbVNwZWNXaXRoQmFzZXMKKyAgUHlUeXBlX0dlbmVyaWNBbGxvYz1weXRob24zNC5QeVR5cGVfR2VuZXJpY0FsbG9jCisgIFB5VHlwZV9HZW5lcmljTmV3PXB5dGhvbjM0LlB5VHlwZV9HZW5lcmljTmV3CisgIFB5VHlwZV9HZXRGbGFncz1weXRob24zNC5QeVR5cGVfR2V0RmxhZ3MKKyAgUHlUeXBlX0dldFNsb3Q9cHl0aG9uMzQuUHlUeXBlX0dldFNsb3QKKyAgUHlUeXBlX0lzU3VidHlwZT1weXRob24zNC5QeVR5cGVfSXNTdWJ0eXBlCisgIFB5VHlwZV9Nb2RpZmllZD1weXRob24zNC5QeVR5cGVfTW9kaWZpZWQKKyAgUHlUeXBlX1JlYWR5PXB5dGhvbjM0LlB5VHlwZV9SZWFkeQorICBQeVR5cGVfVHlwZT1weXRob24zNC5QeVR5cGVfVHlwZSBEQVRBCisgIFB5VW5pY29kZURlY29kZUVycm9yX0NyZWF0ZT1weXRob24zNC5QeVVuaWNvZGVEZWNvZGVFcnJvcl9DcmVhdGUKKyAgUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0RW5jb2Rpbmc9cHl0aG9uMzQuUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0RW5jb2RpbmcKKyAgUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0RW5kPXB5dGhvbjM0LlB5VW5pY29kZURlY29kZUVycm9yX0dldEVuZAorICBQeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRPYmplY3Q9cHl0aG9uMzQuUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0T2JqZWN0CisgIFB5VW5pY29kZURlY29kZUVycm9yX0dldFJlYXNvbj1weXRob24zNC5QeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRSZWFzb24KKyAgUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0U3RhcnQ9cHl0aG9uMzQuUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0U3RhcnQKKyAgUHlVbmljb2RlRGVjb2RlRXJyb3JfU2V0RW5kPXB5dGhvbjM0LlB5VW5pY29kZURlY29kZUVycm9yX1NldEVuZAorICBQeVVuaWNvZGVEZWNvZGVFcnJvcl9TZXRSZWFzb249cHl0aG9uMzQuUHlVbmljb2RlRGVjb2RlRXJyb3JfU2V0UmVhc29uCisgIFB5VW5pY29kZURlY29kZUVycm9yX1NldFN0YXJ0PXB5dGhvbjM0LlB5VW5pY29kZURlY29kZUVycm9yX1NldFN0YXJ0CisgIFB5VW5pY29kZUVuY29kZUVycm9yX0dldEVuY29kaW5nPXB5dGhvbjM0LlB5VW5pY29kZUVuY29kZUVycm9yX0dldEVuY29kaW5nCisgIFB5VW5pY29kZUVuY29kZUVycm9yX0dldEVuZD1weXRob24zNC5QeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRFbmQKKyAgUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0T2JqZWN0PXB5dGhvbjM0LlB5VW5pY29kZUVuY29kZUVycm9yX0dldE9iamVjdAorICBQeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRSZWFzb249cHl0aG9uMzQuUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0UmVhc29uCisgIFB5VW5pY29kZUVuY29kZUVycm9yX0dldFN0YXJ0PXB5dGhvbjM0LlB5VW5pY29kZUVuY29kZUVycm9yX0dldFN0YXJ0CisgIFB5VW5pY29kZUVuY29kZUVycm9yX1NldEVuZD1weXRob24zNC5QeVVuaWNvZGVFbmNvZGVFcnJvcl9TZXRFbmQKKyAgUHlVbmljb2RlRW5jb2RlRXJyb3JfU2V0UmVhc29uPXB5dGhvbjM0LlB5VW5pY29kZUVuY29kZUVycm9yX1NldFJlYXNvbgorICBQeVVuaWNvZGVFbmNvZGVFcnJvcl9TZXRTdGFydD1weXRob24zNC5QeVVuaWNvZGVFbmNvZGVFcnJvcl9TZXRTdGFydAorICBQeVVuaWNvZGVJdGVyX1R5cGU9cHl0aG9uMzQuUHlVbmljb2RlSXRlcl9UeXBlIERBVEEKKyAgUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfR2V0RW5kPXB5dGhvbjM0LlB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX0dldEVuZAorICBQeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9HZXRPYmplY3Q9cHl0aG9uMzQuUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfR2V0T2JqZWN0CisgIFB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX0dldFJlYXNvbj1weXRob24zNC5QeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9HZXRSZWFzb24KKyAgUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfR2V0U3RhcnQ9cHl0aG9uMzQuUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfR2V0U3RhcnQKKyAgUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfU2V0RW5kPXB5dGhvbjM0LlB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX1NldEVuZAorICBQeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9TZXRSZWFzb249cHl0aG9uMzQuUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfU2V0UmVhc29uCisgIFB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX1NldFN0YXJ0PXB5dGhvbjM0LlB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX1NldFN0YXJ0CisgIFB5VW5pY29kZV9BcHBlbmQ9cHl0aG9uMzQuUHlVbmljb2RlX0FwcGVuZAorICBQeVVuaWNvZGVfQXBwZW5kQW5kRGVsPXB5dGhvbjM0LlB5VW5pY29kZV9BcHBlbmRBbmREZWwKKyAgUHlVbmljb2RlX0FzQVNDSUlTdHJpbmc9cHl0aG9uMzQuUHlVbmljb2RlX0FzQVNDSUlTdHJpbmcKKyAgUHlVbmljb2RlX0FzQ2hhcm1hcFN0cmluZz1weXRob24zNC5QeVVuaWNvZGVfQXNDaGFybWFwU3RyaW5nCisgIFB5VW5pY29kZV9Bc0RlY29kZWRPYmplY3Q9cHl0aG9uMzQuUHlVbmljb2RlX0FzRGVjb2RlZE9iamVjdAorICBQeVVuaWNvZGVfQXNEZWNvZGVkVW5pY29kZT1weXRob24zNC5QeVVuaWNvZGVfQXNEZWNvZGVkVW5pY29kZQorICBQeVVuaWNvZGVfQXNFbmNvZGVkT2JqZWN0PXB5dGhvbjM0LlB5VW5pY29kZV9Bc0VuY29kZWRPYmplY3QKKyAgUHlVbmljb2RlX0FzRW5jb2RlZFN0cmluZz1weXRob24zNC5QeVVuaWNvZGVfQXNFbmNvZGVkU3RyaW5nCisgIFB5VW5pY29kZV9Bc0VuY29kZWRVbmljb2RlPXB5dGhvbjM0LlB5VW5pY29kZV9Bc0VuY29kZWRVbmljb2RlCisgIFB5VW5pY29kZV9Bc0xhdGluMVN0cmluZz1weXRob24zNC5QeVVuaWNvZGVfQXNMYXRpbjFTdHJpbmcKKyAgUHlVbmljb2RlX0FzUmF3VW5pY29kZUVzY2FwZVN0cmluZz1weXRob24zNC5QeVVuaWNvZGVfQXNSYXdVbmljb2RlRXNjYXBlU3RyaW5nCisgIFB5VW5pY29kZV9Bc1VURjE2U3RyaW5nPXB5dGhvbjM0LlB5VW5pY29kZV9Bc1VURjE2U3RyaW5nCisgIFB5VW5pY29kZV9Bc1VURjMyU3RyaW5nPXB5dGhvbjM0LlB5VW5pY29kZV9Bc1VURjMyU3RyaW5nCisgIFB5VW5pY29kZV9Bc1VURjhTdHJpbmc9cHl0aG9uMzQuUHlVbmljb2RlX0FzVVRGOFN0cmluZworICBQeVVuaWNvZGVfQXNVbmljb2RlRXNjYXBlU3RyaW5nPXB5dGhvbjM0LlB5VW5pY29kZV9Bc1VuaWNvZGVFc2NhcGVTdHJpbmcKKyAgUHlVbmljb2RlX0FzV2lkZUNoYXI9cHl0aG9uMzQuUHlVbmljb2RlX0FzV2lkZUNoYXIKKyAgUHlVbmljb2RlX0NsZWFyRnJlZWxpc3Q9cHl0aG9uMzQuUHlVbmljb2RlX0NsZWFyRnJlZWxpc3QKKyAgUHlVbmljb2RlX0NvbXBhcmU9cHl0aG9uMzQuUHlVbmljb2RlX0NvbXBhcmUKKyAgUHlVbmljb2RlX0NvbmNhdD1weXRob24zNC5QeVVuaWNvZGVfQ29uY2F0CisgIFB5VW5pY29kZV9Db250YWlucz1weXRob24zNC5QeVVuaWNvZGVfQ29udGFpbnMKKyAgUHlVbmljb2RlX0NvdW50PXB5dGhvbjM0LlB5VW5pY29kZV9Db3VudAorICBQeVVuaWNvZGVfRGVjb2RlPXB5dGhvbjM0LlB5VW5pY29kZV9EZWNvZGUKKyAgUHlVbmljb2RlX0RlY29kZUFTQ0lJPXB5dGhvbjM0LlB5VW5pY29kZV9EZWNvZGVBU0NJSQorICBQeVVuaWNvZGVfRGVjb2RlQ2hhcm1hcD1weXRob24zNC5QeVVuaWNvZGVfRGVjb2RlQ2hhcm1hcAorICBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0PXB5dGhvbjM0LlB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQKKyAgUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdEFuZFNpemU9cHl0aG9uMzQuUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdEFuZFNpemUKKyAgUHlVbmljb2RlX0RlY29kZUxhdGluMT1weXRob24zNC5QeVVuaWNvZGVfRGVjb2RlTGF0aW4xCisgIFB5VW5pY29kZV9EZWNvZGVSYXdVbmljb2RlRXNjYXBlPXB5dGhvbjM0LlB5VW5pY29kZV9EZWNvZGVSYXdVbmljb2RlRXNjYXBlCisgIFB5VW5pY29kZV9EZWNvZGVVVEYxNj1weXRob24zNC5QeVVuaWNvZGVfRGVjb2RlVVRGMTYKKyAgUHlVbmljb2RlX0RlY29kZVVURjE2U3RhdGVmdWw9cHl0aG9uMzQuUHlVbmljb2RlX0RlY29kZVVURjE2U3RhdGVmdWwKKyAgUHlVbmljb2RlX0RlY29kZVVURjMyPXB5dGhvbjM0LlB5VW5pY29kZV9EZWNvZGVVVEYzMgorICBQeVVuaWNvZGVfRGVjb2RlVVRGMzJTdGF0ZWZ1bD1weXRob24zNC5QeVVuaWNvZGVfRGVjb2RlVVRGMzJTdGF0ZWZ1bAorICBQeVVuaWNvZGVfRGVjb2RlVVRGOD1weXRob24zNC5QeVVuaWNvZGVfRGVjb2RlVVRGOAorICBQeVVuaWNvZGVfRGVjb2RlVVRGOFN0YXRlZnVsPXB5dGhvbjM0LlB5VW5pY29kZV9EZWNvZGVVVEY4U3RhdGVmdWwKKyAgUHlVbmljb2RlX0RlY29kZVVuaWNvZGVFc2NhcGU9cHl0aG9uMzQuUHlVbmljb2RlX0RlY29kZVVuaWNvZGVFc2NhcGUKKyAgUHlVbmljb2RlX0ZTQ29udmVydGVyPXB5dGhvbjM0LlB5VW5pY29kZV9GU0NvbnZlcnRlcgorICBQeVVuaWNvZGVfRlNEZWNvZGVyPXB5dGhvbjM0LlB5VW5pY29kZV9GU0RlY29kZXIKKyAgUHlVbmljb2RlX0ZpbmQ9cHl0aG9uMzQuUHlVbmljb2RlX0ZpbmQKKyAgUHlVbmljb2RlX0Zvcm1hdD1weXRob24zNC5QeVVuaWNvZGVfRm9ybWF0CisgIFB5VW5pY29kZV9Gcm9tRW5jb2RlZE9iamVjdD1weXRob24zNC5QeVVuaWNvZGVfRnJvbUVuY29kZWRPYmplY3QKKyAgUHlVbmljb2RlX0Zyb21Gb3JtYXQ9cHl0aG9uMzQuUHlVbmljb2RlX0Zyb21Gb3JtYXQKKyAgUHlVbmljb2RlX0Zyb21Gb3JtYXRWPXB5dGhvbjM0LlB5VW5pY29kZV9Gcm9tRm9ybWF0VgorICBQeVVuaWNvZGVfRnJvbU9iamVjdD1weXRob24zNC5QeVVuaWNvZGVfRnJvbU9iamVjdAorICBQeVVuaWNvZGVfRnJvbU9yZGluYWw9cHl0aG9uMzQuUHlVbmljb2RlX0Zyb21PcmRpbmFsCisgIFB5VW5pY29kZV9Gcm9tU3RyaW5nPXB5dGhvbjM0LlB5VW5pY29kZV9Gcm9tU3RyaW5nCisgIFB5VW5pY29kZV9Gcm9tU3RyaW5nQW5kU2l6ZT1weXRob24zNC5QeVVuaWNvZGVfRnJvbVN0cmluZ0FuZFNpemUKKyAgUHlVbmljb2RlX0Zyb21XaWRlQ2hhcj1weXRob24zNC5QeVVuaWNvZGVfRnJvbVdpZGVDaGFyCisgIFB5VW5pY29kZV9HZXREZWZhdWx0RW5jb2Rpbmc9cHl0aG9uMzQuUHlVbmljb2RlX0dldERlZmF1bHRFbmNvZGluZworICBQeVVuaWNvZGVfR2V0U2l6ZT1weXRob24zNC5QeVVuaWNvZGVfR2V0U2l6ZQorICBQeVVuaWNvZGVfSXNJZGVudGlmaWVyPXB5dGhvbjM0LlB5VW5pY29kZV9Jc0lkZW50aWZpZXIKKyAgUHlVbmljb2RlX0pvaW49cHl0aG9uMzQuUHlVbmljb2RlX0pvaW4KKyAgUHlVbmljb2RlX1BhcnRpdGlvbj1weXRob24zNC5QeVVuaWNvZGVfUGFydGl0aW9uCisgIFB5VW5pY29kZV9SUGFydGl0aW9uPXB5dGhvbjM0LlB5VW5pY29kZV9SUGFydGl0aW9uCisgIFB5VW5pY29kZV9SU3BsaXQ9cHl0aG9uMzQuUHlVbmljb2RlX1JTcGxpdAorICBQeVVuaWNvZGVfUmVwbGFjZT1weXRob24zNC5QeVVuaWNvZGVfUmVwbGFjZQorICBQeVVuaWNvZGVfUmVzaXplPXB5dGhvbjM0LlB5VW5pY29kZV9SZXNpemUKKyAgUHlVbmljb2RlX1JpY2hDb21wYXJlPXB5dGhvbjM0LlB5VW5pY29kZV9SaWNoQ29tcGFyZQorICBQeVVuaWNvZGVfU2V0RGVmYXVsdEVuY29kaW5nPXB5dGhvbjM0LlB5VW5pY29kZV9TZXREZWZhdWx0RW5jb2RpbmcKKyAgUHlVbmljb2RlX1NwbGl0PXB5dGhvbjM0LlB5VW5pY29kZV9TcGxpdAorICBQeVVuaWNvZGVfU3BsaXRsaW5lcz1weXRob24zNC5QeVVuaWNvZGVfU3BsaXRsaW5lcworICBQeVVuaWNvZGVfVGFpbG1hdGNoPXB5dGhvbjM0LlB5VW5pY29kZV9UYWlsbWF0Y2gKKyAgUHlVbmljb2RlX1RyYW5zbGF0ZT1weXRob24zNC5QeVVuaWNvZGVfVHJhbnNsYXRlCisgIFB5VW5pY29kZV9CdWlsZEVuY29kaW5nTWFwPXB5dGhvbjM0LlB5VW5pY29kZV9CdWlsZEVuY29kaW5nTWFwCisgIFB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nPXB5dGhvbjM0LlB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nCisgIFB5VW5pY29kZV9EZWNvZGVVVEY3PXB5dGhvbjM0LlB5VW5pY29kZV9EZWNvZGVVVEY3CisgIFB5VW5pY29kZV9EZWNvZGVVVEY3U3RhdGVmdWw9cHl0aG9uMzQuUHlVbmljb2RlX0RlY29kZVVURjdTdGF0ZWZ1bAorICBQeVVuaWNvZGVfRW5jb2RlRlNEZWZhdWx0PXB5dGhvbjM0LlB5VW5pY29kZV9FbmNvZGVGU0RlZmF1bHQKKyAgUHlVbmljb2RlX0ludGVybkZyb21TdHJpbmc9cHl0aG9uMzQuUHlVbmljb2RlX0ludGVybkZyb21TdHJpbmcKKyAgUHlVbmljb2RlX0ludGVybkltbW9ydGFsPXB5dGhvbjM0LlB5VW5pY29kZV9JbnRlcm5JbW1vcnRhbAorICBQeVVuaWNvZGVfSW50ZXJuSW5QbGFjZT1weXRob24zNC5QeVVuaWNvZGVfSW50ZXJuSW5QbGFjZQorICBQeVVuaWNvZGVfVHlwZT1weXRob24zNC5QeVVuaWNvZGVfVHlwZSBEQVRBCisgIFB5V2Vha3JlZl9HZXRPYmplY3Q9cHl0aG9uMzQuUHlXZWFrcmVmX0dldE9iamVjdCBEQVRBCisgIFB5V2Vha3JlZl9OZXdQcm94eT1weXRob24zNC5QeVdlYWtyZWZfTmV3UHJveHkKKyAgUHlXZWFrcmVmX05ld1JlZj1weXRob24zNC5QeVdlYWtyZWZfTmV3UmVmCisgIFB5V3JhcHBlckRlc2NyX1R5cGU9cHl0aG9uMzQuUHlXcmFwcGVyRGVzY3JfVHlwZSBEQVRBCisgIFB5V3JhcHBlcl9OZXc9cHl0aG9uMzQuUHlXcmFwcGVyX05ldworICBQeVppcF9UeXBlPXB5dGhvbjM0LlB5WmlwX1R5cGUgREFUQQorICBQeV9BZGRQZW5kaW5nQ2FsbD1weXRob24zNC5QeV9BZGRQZW5kaW5nQ2FsbAorICBQeV9BdEV4aXQ9cHl0aG9uMzQuUHlfQXRFeGl0CisgIFB5X0J1aWxkVmFsdWU9cHl0aG9uMzQuUHlfQnVpbGRWYWx1ZQorICBQeV9Db21waWxlU3RyaW5nPXB5dGhvbjM0LlB5X0NvbXBpbGVTdHJpbmcKKyAgUHlfRGVjUmVmPXB5dGhvbjM0LlB5X0RlY1JlZgorICBQeV9FbmRJbnRlcnByZXRlcj1weXRob24zNC5QeV9FbmRJbnRlcnByZXRlcgorICBQeV9FeGl0PXB5dGhvbjM0LlB5X0V4aXQKKyAgUHlfRmF0YWxFcnJvcj1weXRob24zNC5QeV9GYXRhbEVycm9yCisgIFB5X0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2Rpbmc9cHl0aG9uMzQuUHlfRmlsZVN5c3RlbURlZmF1bHRFbmNvZGluZyBEQVRBCisgIFB5X0ZpbmFsaXplPXB5dGhvbjM0LlB5X0ZpbmFsaXplCisgIFB5X0dldEJ1aWxkSW5mbz1weXRob24zNC5QeV9HZXRCdWlsZEluZm8KKyAgUHlfR2V0Q29tcGlsZXI9cHl0aG9uMzQuUHlfR2V0Q29tcGlsZXIKKyAgUHlfR2V0Q29weXJpZ2h0PXB5dGhvbjM0LlB5X0dldENvcHlyaWdodAorICBQeV9HZXRFeGVjUHJlZml4PXB5dGhvbjM0LlB5X0dldEV4ZWNQcmVmaXgKKyAgUHlfR2V0UGF0aD1weXRob24zNC5QeV9HZXRQYXRoCisgIFB5X0dldFBsYXRmb3JtPXB5dGhvbjM0LlB5X0dldFBsYXRmb3JtCisgIFB5X0dldFByZWZpeD1weXRob24zNC5QeV9HZXRQcmVmaXgKKyAgUHlfR2V0UHJvZ3JhbUZ1bGxQYXRoPXB5dGhvbjM0LlB5X0dldFByb2dyYW1GdWxsUGF0aAorICBQeV9HZXRQcm9ncmFtTmFtZT1weXRob24zNC5QeV9HZXRQcm9ncmFtTmFtZQorICBQeV9HZXRQeXRob25Ib21lPXB5dGhvbjM0LlB5X0dldFB5dGhvbkhvbWUKKyAgUHlfR2V0UmVjdXJzaW9uTGltaXQ9cHl0aG9uMzQuUHlfR2V0UmVjdXJzaW9uTGltaXQKKyAgUHlfR2V0VmVyc2lvbj1weXRob24zNC5QeV9HZXRWZXJzaW9uCisgIFB5X0hhc0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2Rpbmc9cHl0aG9uMzQuUHlfSGFzRmlsZVN5c3RlbURlZmF1bHRFbmNvZGluZyBEQVRBCisgIFB5X0luY1JlZj1weXRob24zNC5QeV9JbmNSZWYKKyAgUHlfSW5pdGlhbGl6ZT1weXRob24zNC5QeV9Jbml0aWFsaXplCisgIFB5X0luaXRpYWxpemVFeD1weXRob24zNC5QeV9Jbml0aWFsaXplRXgKKyAgUHlfSXNJbml0aWFsaXplZD1weXRob24zNC5QeV9Jc0luaXRpYWxpemVkCisgIFB5X01haW49cHl0aG9uMzQuUHlfTWFpbgorICBQeV9NYWtlUGVuZGluZ0NhbGxzPXB5dGhvbjM0LlB5X01ha2VQZW5kaW5nQ2FsbHMKKyAgUHlfTmV3SW50ZXJwcmV0ZXI9cHl0aG9uMzQuUHlfTmV3SW50ZXJwcmV0ZXIKKyAgUHlfUmVwckVudGVyPXB5dGhvbjM0LlB5X1JlcHJFbnRlcgorICBQeV9SZXByTGVhdmU9cHl0aG9uMzQuUHlfUmVwckxlYXZlCisgIFB5X1NldFByb2dyYW1OYW1lPXB5dGhvbjM0LlB5X1NldFByb2dyYW1OYW1lCisgIFB5X1NldFB5dGhvbkhvbWU9cHl0aG9uMzQuUHlfU2V0UHl0aG9uSG9tZQorICBQeV9TZXRSZWN1cnNpb25MaW1pdD1weXRob24zNC5QeV9TZXRSZWN1cnNpb25MaW1pdAorICBQeV9TeW10YWJsZVN0cmluZz1weXRob24zNC5QeV9TeW10YWJsZVN0cmluZworICBQeV9WYUJ1aWxkVmFsdWU9cHl0aG9uMzQuUHlfVmFCdWlsZFZhbHVlCisgIF9QeUVycl9CYWRJbnRlcm5hbENhbGw9cHl0aG9uMzQuX1B5RXJyX0JhZEludGVybmFsQ2FsbAorICBfUHlPYmplY3RfQ2FsbEZ1bmN0aW9uX1NpemVUPXB5dGhvbjM0Ll9QeU9iamVjdF9DYWxsRnVuY3Rpb25fU2l6ZVQKKyAgX1B5T2JqZWN0X0NhbGxNZXRob2RfU2l6ZVQ9cHl0aG9uMzQuX1B5T2JqZWN0X0NhbGxNZXRob2RfU2l6ZVQKKyAgX1B5T2JqZWN0X0dDX01hbGxvYz1weXRob24zNC5fUHlPYmplY3RfR0NfTWFsbG9jCisgIF9QeU9iamVjdF9HQ19OZXc9cHl0aG9uMzQuX1B5T2JqZWN0X0dDX05ldworICBfUHlPYmplY3RfR0NfTmV3VmFyPXB5dGhvbjM0Ll9QeU9iamVjdF9HQ19OZXdWYXIKKyAgX1B5T2JqZWN0X0dDX1Jlc2l6ZT1weXRob24zNC5fUHlPYmplY3RfR0NfUmVzaXplCisgIF9QeU9iamVjdF9OZXc9cHl0aG9uMzQuX1B5T2JqZWN0X05ldworICBfUHlPYmplY3RfTmV3VmFyPXB5dGhvbjM0Ll9QeU9iamVjdF9OZXdWYXIKKyAgX1B5U3RhdGVfQWRkTW9kdWxlPXB5dGhvbjM0Ll9QeVN0YXRlX0FkZE1vZHVsZQorICBfUHlUaHJlYWRTdGF0ZV9Jbml0PXB5dGhvbjM0Ll9QeVRocmVhZFN0YXRlX0luaXQKKyAgX1B5VGhyZWFkU3RhdGVfUHJlYWxsb2M9cHl0aG9uMzQuX1B5VGhyZWFkU3RhdGVfUHJlYWxsb2MKKyAgX1B5VHJhc2hfZGVsZXRlX2xhdGVyPXB5dGhvbjM0Ll9QeVRyYXNoX2RlbGV0ZV9sYXRlciBEQVRBCisgIF9QeVRyYXNoX2RlbGV0ZV9uZXN0aW5nPXB5dGhvbjM0Ll9QeVRyYXNoX2RlbGV0ZV9uZXN0aW5nIERBVEEKKyAgX1B5VHJhc2hfZGVwb3NpdF9vYmplY3Q9cHl0aG9uMzQuX1B5VHJhc2hfZGVwb3NpdF9vYmplY3QKKyAgX1B5VHJhc2hfZGVzdHJveV9jaGFpbj1weXRob24zNC5fUHlUcmFzaF9kZXN0cm95X2NoYWluCisgIF9QeVdlYWtyZWZfQ2FsbGFibGVQcm94eVR5cGU9cHl0aG9uMzQuX1B5V2Vha3JlZl9DYWxsYWJsZVByb3h5VHlwZSBEQVRBCisgIF9QeVdlYWtyZWZfUHJveHlUeXBlPXB5dGhvbjM0Ll9QeVdlYWtyZWZfUHJveHlUeXBlIERBVEEKKyAgX1B5V2Vha3JlZl9SZWZUeXBlPXB5dGhvbjM0Ll9QeVdlYWtyZWZfUmVmVHlwZSBEQVRBCisgIF9QeV9CdWlsZFZhbHVlX1NpemVUPXB5dGhvbjM0Ll9QeV9CdWlsZFZhbHVlX1NpemVUCisgIF9QeV9DaGVja1JlY3Vyc2lvbkxpbWl0PXB5dGhvbjM0Ll9QeV9DaGVja1JlY3Vyc2lvbkxpbWl0IERBVEEKKyAgX1B5X0NoZWNrUmVjdXJzaXZlQ2FsbD1weXRob24zNC5fUHlfQ2hlY2tSZWN1cnNpdmVDYWxsCisgIF9QeV9EZWFsbG9jPXB5dGhvbjM0Ll9QeV9EZWFsbG9jCisgIF9QeV9FbGxpcHNpc09iamVjdD1weXRob24zNC5fUHlfRWxsaXBzaXNPYmplY3QgREFUQQorICBfUHlfRmFsc2VTdHJ1Y3Q9cHl0aG9uMzQuX1B5X0ZhbHNlU3RydWN0IERBVEEKKyAgX1B5X05vbmVTdHJ1Y3Q9cHl0aG9uMzQuX1B5X05vbmVTdHJ1Y3QgREFUQQorICBfUHlfTm90SW1wbGVtZW50ZWRTdHJ1Y3Q9cHl0aG9uMzQuX1B5X05vdEltcGxlbWVudGVkU3RydWN0IERBVEEKKyAgX1B5X1N3YXBwZWRPcD1weXRob24zNC5fUHlfU3dhcHBlZE9wIERBVEEKKyAgX1B5X1RydWVTdHJ1Y3Q9cHl0aG9uMzQuX1B5X1RydWVTdHJ1Y3QgREFUQQorICBfUHlfVmFCdWlsZFZhbHVlX1NpemVUPXB5dGhvbjM0Ll9QeV9WYUJ1aWxkVmFsdWVfU2l6ZVQKKyAgX1B5QXJnX1BhcnNlX1NpemVUPXB5dGhvbjM0Ll9QeUFyZ19QYXJzZV9TaXplVAorICBfUHlBcmdfUGFyc2VUdXBsZV9TaXplVD1weXRob24zNC5fUHlBcmdfUGFyc2VUdXBsZV9TaXplVAorICBfUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzX1NpemVUPXB5dGhvbjM0Ll9QeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHNfU2l6ZVQKKyAgX1B5QXJnX1ZhUGFyc2VfU2l6ZVQ9cHl0aG9uMzQuX1B5QXJnX1ZhUGFyc2VfU2l6ZVQKKyAgX1B5QXJnX1ZhUGFyc2VUdXBsZUFuZEtleXdvcmRzX1NpemVUPXB5dGhvbjM0Ll9QeUFyZ19WYVBhcnNlVHVwbGVBbmRLZXl3b3Jkc19TaXplVAorICBfUHlfQnVpbGRWYWx1ZV9TaXplVD1weXRob24zNC5fUHlfQnVpbGRWYWx1ZV9TaXplVApkaWZmIC0tZ2l0IGEvUEMvcHl0aG9uMy5tYWsgYi9QQy9weXRob24zLm1hawppbmRleCA5Y2YxODA3Li5mYjhlN2FhIDEwMDY0NAotLS0gYS9QQy9weXRob24zLm1haworKysgYi9QQy9weXRob24zLm1hawpAQCAtMSwxNCArMSwxNCBAQAotJChPdXREaXIpcHl0aG9uMy5kbGw6CXB5dGhvbjMuZGVmICQoT3V0RGlyKXB5dGhvbjMzc3R1Yi5saWIKLQljbCAvTEQgL0ZlJChPdXREaXIpcHl0aG9uMy5kbGwgcHl0aG9uM2RsbC5jIHB5dGhvbjMuZGVmICQoT3V0RGlyKXB5dGhvbjMzc3R1Yi5saWIKKyQoT3V0RGlyKXB5dGhvbjMuZGxsOglweXRob24zLmRlZiAkKE91dERpcilweXRob24zNHN0dWIubGliCisJY2wgL0xEIC9GZSQoT3V0RGlyKXB5dGhvbjMuZGxsIHB5dGhvbjNkbGwuYyBweXRob24zLmRlZiAkKE91dERpcilweXRob24zNHN0dWIubGliCiAKLSQoT3V0RGlyKXB5dGhvbjMzc3R1Yi5saWI6CXB5dGhvbjMzc3R1Yi5kZWYKLQlsaWIgL2RlZjpweXRob24zM3N0dWIuZGVmIC9vdXQ6JChPdXREaXIpcHl0aG9uMzNzdHViLmxpYiAvTUFDSElORTokKE1BQ0hJTkUpCiskKE91dERpcilweXRob24zNHN0dWIubGliOglweXRob24zNHN0dWIuZGVmCisJbGliIC9kZWY6cHl0aG9uMzRzdHViLmRlZiAvb3V0OiQoT3V0RGlyKXB5dGhvbjM0c3R1Yi5saWIgL01BQ0hJTkU6JChNQUNISU5FKQogCiBjbGVhbjoKIAlJRiBFWElTVCAkKE91dERpcilweXRob24zLmRsbCBkZWwgJChPdXREaXIpcHl0aG9uMy5kbGwKIAlJRiBFWElTVCAkKE91dERpcilweXRob24zLmxpYiBkZWwgJChPdXREaXIpcHl0aG9uMy5saWIKLQlJRiBFWElTVCAkKE91dERpcilweXRob24zM3N0dWIubGliIGRlbCAkKE91dERpcilweXRob24zM3N0dWIubGliCisJSUYgRVhJU1QgJChPdXREaXIpcHl0aG9uMzRzdHViLmxpYiBkZWwgJChPdXREaXIpcHl0aG9uMzRzdHViLmxpYgogCUlGIEVYSVNUICQoT3V0RGlyKXB5dGhvbjMuZXhwIGRlbCAkKE91dERpcilweXRob24zLmV4cAotCUlGIEVYSVNUICQoT3V0RGlyKXB5dGhvbjMzc3R1Yi5leHAgZGVsICQoT3V0RGlyKXB5dGhvbjMzc3R1Yi5leHAKKwlJRiBFWElTVCAkKE91dERpcilweXRob24zNHN0dWIuZXhwIGRlbCAkKE91dERpcilweXRob24zNHN0dWIuZXhwCiAKIHJlYnVpbGQ6IGNsZWFuICQoT3V0RGlyKXB5dGhvbjMuZGxsCmRpZmYgLS1naXQgYS9QQy9weXRob24zM2dlbi5weSBiL1BDL3B5dGhvbjM0Z2VuLnB5CnNpbWlsYXJpdHkgaW5kZXggNzclCnJlbmFtZSBmcm9tIFBDL3B5dGhvbjMzZ2VuLnB5CnJlbmFtZSB0byBQQy9weXRob24zNGdlbi5weQppbmRleCAyMWI5ZjU2Li4xODBjZTExIDEwMDY0NAotLS0gYS9QQy9weXRob24zM2dlbi5weQorKysgYi9QQy9weXRob24zNGdlbi5weQpAQCAtMSw5ICsxLDkgQEAKLSMgR2VuZXJhdGUgcHl0aG9uMzNzdHViLmRlZiBvdXQgb2YgcHl0aG9uMy5kZWYKKyMgR2VuZXJhdGUgcHl0aG9uMzRzdHViLmRlZiBvdXQgb2YgcHl0aG9uMy5kZWYKICMgVGhlIHJlZ3VsYXIgaW1wb3J0IGxpYnJhcnkgY2Fubm90IGJlIHVzZWQsCiAjIHNpbmNlIGl0IGRvZXNuJ3QgcHJvdmlkZSB0aGUgcmlnaHQgc3ltYm9scyBmb3IKICMgZGF0YSBmb3J3YXJkaW5nCi1vdXQgPSBvcGVuKCJweXRob24zM3N0dWIuZGVmIiwgInciKQotb3V0LndyaXRlKCdMSUJSQVJZICJweXRob24zMyJcbicpCitvdXQgPSBvcGVuKCJweXRob24zNHN0dWIuZGVmIiwgInciKQorb3V0LndyaXRlKCdMSUJSQVJZICJweXRob24zNCJcbicpCiBvdXQud3JpdGUoJ0VYUE9SVFNcbicpCiAKIGlucCA9IG9wZW4oInB5dGhvbjMuZGVmIikKQEAgLTE0LDcgKzE0LDcgQEAKIGFzc2VydCBsaW5lLnN0cmlwKCk9PSdFWFBPUlRTJwogCiBmb3IgbGluZSBpbiBpbnA6Ci0gICAgIyBTWU0xPXB5dGhvbjMzLlNZTTJbIERBVEFdCisgICAgIyBTWU0xPXB5dGhvbjM0LlNZTTJbIERBVEFdCiAgICAgaGVhZCwgdGFpbCA9IGxpbmUuc3BsaXQoJy4nKQogICAgIGlmICdEQVRBJyBpbiB0YWlsOgogICAgICAgICBzeW1ib2wsIHRhaWwgPSB0YWlsLnNwbGl0KCcgJykKZGlmZiAtLWdpdCBhL1BDL3B5dGhvbjMzc3R1Yi5kZWYgYi9QQy9weXRob24zNHN0dWIuZGVmCnNpbWlsYXJpdHkgaW5kZXggOTklCnJlbmFtZSBmcm9tIFBDL3B5dGhvbjMzc3R1Yi5kZWYKcmVuYW1lIHRvIFBDL3B5dGhvbjM0c3R1Yi5kZWYKaW5kZXggZGIxYTU0Ni4uMzA3NGNmMyAxMDA2NDQKLS0tIGEvUEMvcHl0aG9uMzNzdHViLmRlZgorKysgYi9QQy9weXRob24zNHN0dWIuZGVmCkBAIC0xLDQgKzEsNCBAQAotTElCUkFSWSAicHl0aG9uMzMiCitMSUJSQVJZICJweXRob24zNCIKIEVYUE9SVFMKIFB5QXJnX1BhcnNlCiBQeUFyZ19QYXJzZVR1cGxlCkBAIC0zNyw2ICszNyw3IEBACiBQeUNGdW5jdGlvbl9HZXRGbGFncwogUHlDRnVuY3Rpb25fR2V0RnVuY3Rpb24KIFB5Q0Z1bmN0aW9uX0dldFNlbGYKK1B5Q0Z1bmN0aW9uX05ldwogUHlDRnVuY3Rpb25fTmV3RXgKIFB5Q0Z1bmN0aW9uX1R5cGUKIFB5Q2FsbEl0ZXJfTmV3CkBAIC01MTcsNiArNTE4LDcgQEAKIFB5VHlwZV9HZW5lcmljQWxsb2MKIFB5VHlwZV9HZW5lcmljTmV3CiBQeVR5cGVfR2V0RmxhZ3MKK1B5VHlwZV9HZXRTbG90CiBQeVR5cGVfSXNTdWJ0eXBlCiBQeVR5cGVfTW9kaWZpZWQKIFB5VHlwZV9SZWFkeQpkaWZmIC0tZ2l0IGEvUEMvcmVhZG1lLnR4dCBiL1BDL3JlYWRtZS50eHQKaW5kZXggZmRjMDlhYi4uOTkwMDZiZiAxMDA2NDQKLS0tIGEvUEMvcmVhZG1lLnR4dAorKysgYi9QQy9yZWFkbWUudHh0CkBAIC03MSwyNyArNzEsMTIgQEAKIGRsbGJhc2VfbnQudHh0IEEgKG1hbnVhbGx5IG1haW50YWluZWQpIGxpc3Qgb2YgYmFzZSBhZGRyZXNzZXMgZm9yCiAgICAgICAgICAgICAgICB2YXJpb3VzIERMTHMsIHRvIGF2b2lkIHJ1bi10aW1lIHJlbG9jYXRpb24uCiAKLWV4YW1wbGVfbnQgICAgIEEgc3ViZGlyZWN0b3J5IHNob3dpbmcgaG93IHRvIGJ1aWxkIGFuIGV4dGVuc2lvbiBhcyBhCi0gICAgICAgICAgICAgICBETEwuCiAKIExlZ2FjeSBzdXBwb3J0IGZvciBvbGRlciB2ZXJzaW9ucyBvZiBWaXN1YWwgU3R1ZGlvCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogVGhlIHN1YmRpcmVjdG9yaWVzIFZDNiwgVlM3LjEgYW5kIFZTOC4wIGNvbnRhaW4gbGVnYWN5IHN1cHBvcnQgb2xkZXIKIHZlcnNpb25zIG9mIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvLiBTZWUgUENidWlsZC9yZWFkbWUudHh0LgogCi1FTVggZGV2ZWxvcG1lbnQgdG9vbHMgZm9yIE9TLzIKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1TZWUgb3MyZW14L3JlYWRtZS50eHQuIFRoaXMgcGxhdGZvcm0gaXMgbWFpbnRhaW5lZCBieSBBbmRyZXcgTWFjSW50eXJlLgotCi1JQk0gVmlzdWFsQWdlIEMvQysrIGZvciBPUy8yCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLVNlZSBvczJ2YWNwcC9yZWFkbWUudHh0LiAgVGhpcyBwbGF0Zm9ybSBpcyBzdXBwb3J0ZWQgYnkgSmVmZiBSdXNoLgotCi1OT1RFOiBTdXBwb3J0IGZvciBvczJ2YWNwcCBtYXkgYmUgZHJvcHBlZCBpbiB0aGUgbmVhciBmdXR1cmUuIFBsZWFzZSBtb3ZlCi0gICAgICB0byBFTVguCi0KIE5vdGUgZm9yIFdpbmRvd3MgMy54IGFuZCBET1MgdXNlcnMKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIApkaWZmIC0tZ2l0IGEvUEMvdzl4cG9wZW4uYyBiL1BDL3c5eHBvcGVuLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzOTc4ZGQuLjAwMDAwMDAKLS0tIGEvUEMvdzl4cG9wZW4uYworKysgL2Rldi9udWxsCkBAIC0xLDExMiArMCwwIEBACi0vKgotICogdzl4cG9wZW4uYwotICoKLSAqIFNlcnZlcyBhcyBhbiBpbnRlcm1lZGlhdGUgc3R1YiBXaW4zMiBjb25zb2xlIGFwcGxpY2F0aW9uIHRvCi0gKiBhdm9pZCBhIGhhbmdpbmcgcGlwZSB3aGVuIHJlZGlyZWN0aW5nIDE2LWJpdCBjb25zb2xlIGJhc2VkCi0gKiBwcm9ncmFtcyAoaW5jbHVkaW5nIE1TLURPUyBjb25zb2xlIGJhc2VkIHByb2dyYW1zIGFuZCBiYXRjaAotICogZmlsZXMpIG9uIFdpbmRvdyA5NSBhbmQgV2luZG93cyA5OC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgdG8gYmUgbGF1bmNoZWQgd2l0aCByZWRpcmVjdGVkIHN0YW5kYXJkCi0gKiBoYW5kbGVzLiBJdCB3aWxsIGxhdW5jaCB0aGUgY29tbWFuZCBsaW5lIHNwZWNpZmllZCAxNi1iaXQKLSAqIGNvbnNvbGUgYmFzZWQgYXBwbGljYXRpb24gaW4gdGhlIHNhbWUgY29uc29sZSwgZm9yd2FyZGluZwotICogaXRzIG93biByZWRpcmVjdGVkIHN0YW5kYXJkIGhhbmRsZXMgdG8gdGhlIDE2LWJpdCBjaGlsZC4KLQotICogQUtBIHNvbHV0aW9uIHRvIHRoZSBwcm9ibGVtIGRlc2NyaWJlZCBpbiBLQjogUTE1MDk1Ni4KLSAqLyAgICAKLQotI2RlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCi0jaW5jbHVkZSA8d2luZG93cy5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+ICAvKiBmb3IgbWFsbG9jIGFuZCBpdHMgZnJpZW5kcyAqLwotCi1jb25zdCBjaGFyICp1c2FnZSA9Ci0iVGhpcyBwcm9ncmFtIGlzIHVzZWQgYnkgUHl0aG9uJ3Mgb3MucG9wZW4gZnVuY3Rpb25cbiIKLSJ0byB3b3JrIGFyb3VuZCBhIGxpbWl0YXRpb24gaW4gV2luZG93cyA5NS85OC4gIEl0IGlzXG4iCi0ibm90IGRlc2lnbmVkIHRvIGJlIHVzZWQgYXMgYSBzdGFuZC1hbG9uZSBwcm9ncmFtLiI7Ci0KLWludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCi17Ci0gICAgQk9PTCBiUmV0OwotICAgIFNUQVJUVVBJTkZPIHNpOwotICAgIFBST0NFU1NfSU5GT1JNQVRJT04gcGk7Ci0gICAgRFdPUkQgZXhpdF9jb2RlPTA7Ci0gICAgc2l6ZV90IGNtZGxlbiA9IDA7Ci0gICAgaW50IGk7Ci0gICAgY2hhciAqY21kbGluZSwgKmNtZGxpbmVmaWxsOwotCi0gICAgaWYgKGFyZ2MgPCAyKSB7Ci0gICAgICAgIGlmIChHZXRGaWxlVHlwZShHZXRTdGRIYW5kbGUoU1REX0lOUFVUX0hBTkRMRSkpPT1GSUxFX1RZUEVfQ0hBUikKLSAgICAgICAgICAgIC8qIEF0dGFjaGVkIHRvIGEgY29uc29sZSwgYW5kIHRoZXJlZm9yZSBub3QgZXhlY3V0ZWQgYnkgUHl0aG9uCi0gICAgICAgICAgICAgICBEaXNwbGF5IGEgbWVzc2FnZSBib3ggZm9yIHRoZSBpbnF1aXNpdGl2ZSB1c2VyCi0gICAgICAgICAgICAqLwotICAgICAgICAgICAgTWVzc2FnZUJveChOVUxMLCB1c2FnZSwgYXJndlswXSwgTUJfT0spOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8qIEVlZWsgLSBleGVjdXRlZCBieSBQeXRob24sIGJ1dCBhcmdzIGFyZSBzY3Jld2VkIQotICAgICAgICAgICAgICAgV3JpdGUgYW4gZXJyb3IgbWVzc2FnZSB0byBzdGRvdXQgc28gdGhlcmUgaXMgYXQKLSAgICAgICAgICAgICAgIGxlYXN0IHNvbWUgY2x1ZSBmb3IgdGhlIGVuZCB1c2VyIHdoZW4gaXQgYXBwZWFycwotICAgICAgICAgICAgICAgaW4gdGhlaXIgb3V0cHV0LgotICAgICAgICAgICAgICAgQSBtZXNzYWdlIGJveCB3b3VsZCBiZSBoaWRkZW4gYW5kIGJsb2NrcyB0aGUgYXBwLgotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBmcHJpbnRmKHN0ZG91dCwgIkludGVybmFsIHBvcGVuIGVycm9yIC0gbm8gYXJncyBzcGVjaWZpZWRcbiVzXG4iLCB1c2FnZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotICAgIC8qIEJ1aWxkIHVwIHRoZSBjb21tYW5kLWxpbmUgZnJvbSB0aGUgYXJncy4KLSAgICAgICBBcmdzIHdpdGggYSBzcGFjZSBhcmUgcXVvdGVkLCBleGlzdGluZyBxdW90ZXMgYXJlIGVzY2FwZWQuCi0gICAgICAgVG8ga2VlcCB0aGluZ3Mgc2ltcGxlIGNhbGN1bGF0aW5nIHRoZSBidWZmZXIgc2l6ZSwgd2UgYXNzdW1lCi0gICAgICAgZXZlcnkgY2hhcmFjdGVyIGlzIGEgcXVvdGUgLSBpZSwgd2UgYWxsb2NhdGUgZG91YmxlIHdoYXQgd2UgbmVlZAotICAgICAgIGluIHRoZSB3b3JzdCBjYXNlLiAgQXMgdGhpcyBpcyBvbmx5IGRvdWJsZSB0aGUgY29tbWFuZCBsaW5lIHBhc3NlZAotICAgICAgIHRvIHVzLCB0aGVyZSBpcyBhIGdvb2QgY2hhbmNlIHRoaXMgaXMgcmVhc29uYWJseSBzbWFsbCwgc28gdGhlIHRvdGFsIAotICAgICAgIGFsbG9jYXRpb24gd2lsbCBhbG1vc3QgYWx3YXlzIGJlIDwgNTEyIGJ5dGVzLgotICAgICovCi0gICAgZm9yIChpPTE7aTxhcmdjO2krKykKLSAgICAgICAgY21kbGVuICs9IHN0cmxlbihhcmd2W2ldKSoyICsgMzsgLyogb25lIHNwYWNlLCBtYXliZSAyIHF1b3RlcyAqLwotICAgIGNtZGxpbmUgPSBjbWRsaW5lZmlsbCA9IChjaGFyICopbWFsbG9jKGNtZGxlbisxKTsKLSAgICBpZiAoY21kbGluZSA9PSBOVUxMKQotICAgICAgICByZXR1cm4gLTE7Ci0gICAgZm9yIChpPTE7aTxhcmdjO2krKykgewotICAgICAgICBjb25zdCBjaGFyICphcmdsb29rOwotICAgICAgICBpbnQgYlF1b3RlID0gc3RyY2hyKGFyZ3ZbaV0sICcgJykgIT0gTlVMTDsKLSAgICAgICAgaWYgKGJRdW90ZSkKLSAgICAgICAgICAgICpjbWRsaW5lZmlsbCsrID0gJyInOwotICAgICAgICAvKiBlc2NhcGUgcXVvdGVzICovCi0gICAgICAgIGZvciAoYXJnbG9vaz1hcmd2W2ldOyphcmdsb29rO2FyZ2xvb2srKykgewotICAgICAgICAgICAgaWYgKCphcmdsb29rPT0nIicpCi0gICAgICAgICAgICAgICAgKmNtZGxpbmVmaWxsKysgPSAnXFwnOwotICAgICAgICAgICAgKmNtZGxpbmVmaWxsKysgPSAqYXJnbG9vazsKLSAgICAgICAgfQotICAgICAgICBpZiAoYlF1b3RlKQotICAgICAgICAgICAgKmNtZGxpbmVmaWxsKysgPSAnIic7Ci0gICAgICAgICpjbWRsaW5lZmlsbCsrID0gJyAnOwotICAgIH0KLSAgICAqY21kbGluZWZpbGwgPSAnXDAnOwotCi0gICAgLyogTWFrZSBjaGlsZCBwcm9jZXNzIHVzZSB0aGlzIGFwcCdzIHN0YW5kYXJkIGZpbGVzLiAqLwotICAgIFplcm9NZW1vcnkoJnNpLCBzaXplb2Ygc2kpOwotICAgIHNpLmNiID0gc2l6ZW9mIHNpOwotICAgIHNpLmR3RmxhZ3MgPSBTVEFSVEZfVVNFU1RESEFORExFUzsKLSAgICBzaS5oU3RkSW5wdXQgPSBHZXRTdGRIYW5kbGUoU1REX0lOUFVUX0hBTkRMRSk7Ci0gICAgc2kuaFN0ZE91dHB1dCA9IEdldFN0ZEhhbmRsZShTVERfT1VUUFVUX0hBTkRMRSk7Ci0gICAgc2kuaFN0ZEVycm9yID0gR2V0U3RkSGFuZGxlKFNURF9FUlJPUl9IQU5ETEUpOwotCi0gICAgYlJldCA9IENyZWF0ZVByb2Nlc3MoCi0gICAgICAgIE5VTEwsIGNtZGxpbmUsCi0gICAgICAgIE5VTEwsIE5VTEwsCi0gICAgICAgIFRSVUUsIDAsCi0gICAgICAgIE5VTEwsIE5VTEwsCi0gICAgICAgICZzaSwgJnBpCi0gICAgICAgICk7Ci0KLSAgICBmcmVlKGNtZGxpbmUpOwotCi0gICAgaWYgKGJSZXQpIHsKLSAgICAgICAgaWYgKFdhaXRGb3JTaW5nbGVPYmplY3QocGkuaFByb2Nlc3MsIElORklOSVRFKSAhPSBXQUlUX0ZBSUxFRCkgewotCSAgICBHZXRFeGl0Q29kZVByb2Nlc3MocGkuaFByb2Nlc3MsICZleGl0X2NvZGUpOwotCX0KLSAgICAgICAgQ2xvc2VIYW5kbGUocGkuaFByb2Nlc3MpOwotICAgICAgICBDbG9zZUhhbmRsZShwaS5oVGhyZWFkKTsKLSAgICAgICAgcmV0dXJuIGV4aXRfY29kZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gMTsKLX0KZGlmZiAtLWdpdCBhL1BDL3dpbnJlZy5jIGIvUEMvd2lucmVnLmMKaW5kZXggMzM0N2ViNy4uMTlkNWE3MCAxMDA2NDQKLS0tIGEvUEMvd2lucmVnLmMKKysrIGIvUEMvd2lucmVnLmMKQEAgLTg3MSw4ICs4NzEsMTAgQEAKICAgICAgICAgLyogQUxTTyBoYW5kbGUgQUxMIHVua25vd24gZGF0YSB0eXBlcyBoZXJlLiAgRXZlbiBpZiB3ZSBjYW4ndAogICAgICAgICAgICBzdXBwb3J0IGl0IG5hdGl2ZWx5LCB3ZSBzaG91bGQgaGFuZGxlIHRoZSBiaXRzLiAqLwogICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgaWYgKHZhbHVlID09IFB5X05vbmUpCisgICAgICAgICAgICBpZiAodmFsdWUgPT0gUHlfTm9uZSkgewogICAgICAgICAgICAgICAgICpyZXREYXRhU2l6ZSA9IDA7CisgICAgICAgICAgICAgICAgKnJldERhdGFCdWYgPSBOVUxMOworICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgUHlfYnVmZmVyIHZpZXc7CiAKQEAgLTkzNywxNCArOTM5LDE0IEBACiAgICAgICAgICAgICAgICAgd2NoYXJfdCAqZGF0YSA9ICh3Y2hhcl90ICopcmV0RGF0YUJ1ZjsKICAgICAgICAgICAgICAgICBpbnQgbGVuID0gcmV0RGF0YVNpemUgLyAyOwogICAgICAgICAgICAgICAgIGludCBzID0gY291bnRTdHJpbmdzKGRhdGEsIGxlbik7Ci0gICAgICAgICAgICAgICAgd2NoYXJfdCAqKnN0ciA9ICh3Y2hhcl90ICoqKW1hbGxvYyhzaXplb2Yod2NoYXJfdCAqKSpzKTsKKyAgICAgICAgICAgICAgICB3Y2hhcl90ICoqc3RyID0gUHlNZW1fTmV3KHdjaGFyX3QgKiwgcyk7CiAgICAgICAgICAgICAgICAgaWYgKHN0ciA9PSBOVUxMKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKIAogICAgICAgICAgICAgICAgIGZpeHVwTXVsdGlTWihzdHIsIGRhdGEsIGxlbik7CiAgICAgICAgICAgICAgICAgb2JEYXRhID0gUHlMaXN0X05ldyhzKTsKICAgICAgICAgICAgICAgICBpZiAob2JEYXRhID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgZnJlZShzdHIpOworICAgICAgICAgICAgICAgICAgICBQeU1lbV9GcmVlKHN0cik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBzOyBpbmRleCsrKQpAQCAtOTU0LDE0ICs5NTYsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWdpc3RyeSBzdHJpbmcgaXMgdG9vIGxvbmcgZm9yIGEgUHl0aG9uIHN0cmluZyIpOwogICAgICAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKG9iRGF0YSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmcmVlKHN0cik7CisgICAgICAgICAgICAgICAgICAgICAgICBQeU1lbV9GcmVlKHN0cik7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBQeUxpc3RfU2V0SXRlbShvYkRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfRnJvbVdpZGVDaGFyKHN0cltpbmRleF0sIGxlbikpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBmcmVlKHN0cik7CisgICAgICAgICAgICAgICAgUHlNZW1fRnJlZShzdHIpOwogCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC0xMjA0LDcgKzEyMDYsNyBAQAogICAgICsrcmV0RGF0YVNpemU7CiAgICAgYnVmRGF0YVNpemUgPSByZXREYXRhU2l6ZTsKICAgICBidWZWYWx1ZVNpemUgPSByZXRWYWx1ZVNpemU7Ci0gICAgcmV0VmFsdWVCdWYgPSAod2NoYXJfdCAqKVB5TWVtX01hbGxvYyhzaXplb2Yod2NoYXJfdCkgKiByZXRWYWx1ZVNpemUpOworICAgIHJldFZhbHVlQnVmID0gUHlNZW1fTmV3KHdjaGFyX3QsIHJldFZhbHVlU2l6ZSk7CiAgICAgaWYgKHJldFZhbHVlQnVmID09IE5VTEwpCiAgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOwogICAgIHJldERhdGFCdWYgPSAoQllURSAqKVB5TWVtX01hbGxvYyhyZXREYXRhU2l6ZSk7CkBAIC0xMjc1LDcgKzEyNzcsNyBAQAogICAgICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnJXaXRoRnVuY3Rpb24ocmV0VmFsdWVTaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFeHBhbmRFbnZpcm9ubWVudFN0cmluZ3MiKTsKICAgICB9Ci0gICAgcmV0VmFsdWUgPSAod2NoYXJfdCAqKVB5TWVtX01hbGxvYyhyZXRWYWx1ZVNpemUgKiBzaXplb2Yod2NoYXJfdCkpOworICAgIHJldFZhbHVlID0gUHlNZW1fTmV3KHdjaGFyX3QsIHJldFZhbHVlU2l6ZSk7CiAgICAgaWYgKHJldFZhbHVlID09IE5VTEwpIHsKICAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgfQpAQCAtMTc5Niw5ICsxNzk4LDkgQEAKICAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgIkhLRVlUeXBlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFB5T2JqZWN0ICopJlB5SEtFWV9UeXBlKSAhPSAwKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBQeV9JTkNSRUYoUHlFeGNfV2luZG93c0Vycm9yKTsKKyAgICBQeV9JTkNSRUYoUHlFeGNfT1NFcnJvcik7CiAgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJlcnJvciIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5RXhjX1dpbmRvd3NFcnJvcikgIT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlFeGNfT1NFcnJvcikgIT0gMCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICAvKiBBZGQgdGhlIHJlbGV2YW50IGNvbnN0YW50cyAqLwpkaWZmIC0tZ2l0IGEvUENidWlsZC93OXhwb3Blbi52Y3hwcm9qIGIvUENidWlsZC9fb3ZlcmxhcHBlZC52Y3hwcm9qCnNpbWlsYXJpdHkgaW5kZXggNjUlCnJlbmFtZSBmcm9tIFBDYnVpbGQvdzl4cG9wZW4udmN4cHJvagpyZW5hbWUgdG8gUENidWlsZC9fb3ZlcmxhcHBlZC52Y3hwcm9qCmluZGV4IGQxYWZlMjIuLmQwZWU3MmYgMTAwNjQ0Ci0tLSBhL1BDYnVpbGQvdzl4cG9wZW4udmN4cHJvagorKysgYi9QQ2J1aWxkL19vdmVybGFwcGVkLnZjeHByb2oKQEAgLTEsNCArMSw0IEBACi3vu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KIDxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgogICA8SXRlbUdyb3VwIExhYmVsPSJQcm9qZWN0Q29uZmlndXJhdGlvbnMiPgogICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3xXaW4zMiI+CkBAIC0zNSwxMDQgKzM1LDk1IEBACiAgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KICAgPC9JdGVtR3JvdXA+CiAgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJHbG9iYWxzIj4KLSAgICA8UHJvamVjdEd1aWQ+e0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH08L1Byb2plY3RHdWlkPgotICAgIDxSb290TmFtZXNwYWNlPnc5eHBvcGVuPC9Sb290TmFtZXNwYWNlPgorICAgIDxQcm9qZWN0R3VpZD57RUI2RTY5REQtMDRCRi00NTQzLTlCOTItNDlGQUFCQ0VBQzJFfTwvUHJvamVjdEd1aWQ+CisgICAgPFJvb3ROYW1lc3BhY2U+X292ZXJsYXBwZWQ8L1Jvb3ROYW1lc3BhY2U+CisgICAgPEtleXdvcmQ+V2luMzJQcm9qPC9LZXl3b3JkPgogICA8L1Byb3BlcnR5R3JvdXA+CiAgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+CiAgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8VXNlT2ZNZmM+ZmFsc2U8L1VzZU9mTWZjPgotICAgIDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgogICA8L1Byb3BlcnR5R3JvdXA+CiAgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPFVzZU9mTWZjPmZhbHNlPC9Vc2VPZk1mYz4KLSAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KICAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8VXNlT2ZNZmM+ZmFsc2U8L1VzZU9mTWZjPgotICAgIDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgogICA8L1Byb3BlcnR5R3JvdXA+CiAgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8VXNlT2ZNZmM+ZmFsc2U8L1VzZU9mTWZjPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CiAgICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KICAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxVc2VPZk1mYz5mYWxzZTwvVXNlT2ZNZmM+Ci0gICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CiAgIDwvUHJvcGVydHlHcm91cD4KICAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPFVzZU9mTWZjPmZhbHNlPC9Vc2VPZk1mYz4KLSAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KICAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPFVzZU9mTWZjPmZhbHNlPC9Vc2VPZk1mYz4KLSAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KICAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxVc2VPZk1mYz5mYWxzZTwvVXNlT2ZNZmM+Ci0gICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+CiAgIDwvUHJvcGVydHlHcm91cD4KICAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+CiAgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiPgogICA8L0ltcG9ydEdyb3VwPgogICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CiAgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlwcm9qZWN0LnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icmVsZWFzZS5wcm9wcyIgLz4KKyAgICA8SW1wb3J0IFByb2plY3Q9InB5ZC5wcm9wcyIgLz4KICAgICA8SW1wb3J0IFByb2plY3Q9InBndXBkYXRlLnByb3BzIiAvPgogICA8L0ltcG9ydEdyb3VwPgogICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgogICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InJlbGVhc2UucHJvcHMiIC8+CisgICAgPEltcG9ydCBQcm9qZWN0PSJweWQucHJvcHMiIC8+CiAgICAgPEltcG9ydCBQcm9qZWN0PSJwZ2luc3RydW1lbnQucHJvcHMiIC8+CiAgIDwvSW1wb3J0R3JvdXA+CiAgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgogICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InJlbGVhc2UucHJvcHMiIC8+CisgICAgPEltcG9ydCBQcm9qZWN0PSJweWQucHJvcHMiIC8+CiAgIDwvSW1wb3J0R3JvdXA+CiAgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KICAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweXByb2plY3QucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJkZWJ1Zy5wcm9wcyIgLz4KKyAgICA8SW1wb3J0IFByb2plY3Q9InB5ZF9kLnByb3BzIiAvPgogICA8L0ltcG9ydEdyb3VwPgogICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgogICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KKyAgICA8SW1wb3J0IFByb2plY3Q9InB5ZC5wcm9wcyIgLz4KICAgICA8SW1wb3J0IFByb2plY3Q9Ing2NC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InJlbGVhc2UucHJvcHMiIC8+CiAgICAgPEltcG9ydCBQcm9qZWN0PSJwZ3VwZGF0ZS5wcm9wcyIgLz4KICAgPC9JbXBvcnRHcm91cD4KICAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CiAgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlwcm9qZWN0LnByb3BzIiAvPgorICAgIDxJbXBvcnQgUHJvamVjdD0icHlkLnByb3BzIiAvPgogICAgIDxJbXBvcnQgUHJvamVjdD0ieDY0LnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icmVsZWFzZS5wcm9wcyIgLz4KICAgICA8SW1wb3J0IFByb2plY3Q9InBnaW5zdHJ1bWVudC5wcm9wcyIgLz4KICAgPC9JbXBvcnRHcm91cD4KICAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgogICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KKyAgICA8SW1wb3J0IFByb2plY3Q9InB5ZC5wcm9wcyIgLz4KICAgICA8SW1wb3J0IFByb2plY3Q9Ing2NC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InJlbGVhc2UucHJvcHMiIC8+CiAgIDwvSW1wb3J0R3JvdXA+CiAgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CiAgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlwcm9qZWN0LnByb3BzIiAvPgorICAgIDxJbXBvcnQgUHJvamVjdD0icHlkX2QucHJvcHMiIC8+CiAgICAgPEltcG9ydCBQcm9qZWN0PSJ4NjQucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJkZWJ1Zy5wcm9wcyIgLz4KICAgPC9JbXBvcnRHcm91cD4KICAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+CiAgIDxQcm9wZXJ0eUdyb3VwPgotICAgIDxfUHJvamVjdEZpbGVWZXJzaW9uPjEwLjAuNDAyMTkuMTwvX1Byb2plY3RGaWxlVmVyc2lvbj4KKyAgICA8X1Byb2plY3RGaWxlVmVyc2lvbj4xMC4wLjMwMzE5LjE8L19Qcm9qZWN0RmlsZVZlcnNpb24+CiAgICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+CiAgICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiAvPgogICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgLz4KQEAgLTE1OSwxMjcgKzE1MCw4MyBAQAogICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgLz4KICAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KLSAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3M+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPgotICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWREZWJ1ZzwvUnVudGltZUxpYnJhcnk+Ci0gICAgPC9DbENvbXBpbGU+CiAgICAgPExpbms+Ci0gICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPndzMl8zMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxJZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXM+bGliYzslKElnbm9yZVNwZWNpZmljRGVmYXVsdExpYnJhcmllcyk8L0lnbm9yZVNwZWNpZmljRGVmYXVsdExpYnJhcmllcz4KKyAgICAgIDxCYXNlQWRkcmVzcz4weDFEMTEwMDAwPC9CYXNlQWRkcmVzcz4KICAgICA8L0xpbms+CiAgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KICAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KICAgICA8TWlkbD4KICAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5YNjQ8L1RhcmdldEVudmlyb25tZW50PgogICAgIDwvTWlkbD4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgotICAgICAgPEJhc2ljUnVudGltZUNoZWNrcz5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+Ci0gICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZERlYnVnPC9SdW50aW1lTGlicmFyeT4KLSAgICA8L0NsQ29tcGlsZT4KICAgICA8TGluaz4KLSAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+d3MyXzMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPElnbm9yZVNwZWNpZmljRGVmYXVsdExpYnJhcmllcz5saWJjOyUoSWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzKTwvSWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzPgorICAgICAgPEJhc2VBZGRyZXNzPjB4MUQxMTAwMDA8L0Jhc2VBZGRyZXNzPgogICAgIDwvTGluaz4KICAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgogICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgotICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPk9ubHlFeHBsaWNpdElubGluZTwvSW5saW5lRnVuY3Rpb25FeHBhbnNpb24+Ci0gICAgICA8U3RyaW5nUG9vbGluZz50cnVlPC9TdHJpbmdQb29saW5nPgotICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWQ8L1J1bnRpbWVMaWJyYXJ5PgotICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgotICAgIDwvQ2xDb21waWxlPgogICAgIDxMaW5rPgotICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj5mYWxzZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgotICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz53czJfMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8SWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzPmxpYmM7JShJZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXMpPC9JZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXM+CisgICAgICA8QmFzZUFkZHJlc3M+MHgxRDExMDAwMDwvQmFzZUFkZHJlc3M+CiAgICAgPC9MaW5rPgogICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CiAgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KICAgICA8TWlkbD4KICAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5YNjQ8L1RhcmdldEVudmlyb25tZW50PgogICAgIDwvTWlkbD4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgotICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPk9ubHlFeHBsaWNpdElubGluZTwvSW5saW5lRnVuY3Rpb25FeHBhbnNpb24+Ci0gICAgICA8U3RyaW5nUG9vbGluZz50cnVlPC9TdHJpbmdQb29saW5nPgotICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWQ8L1J1bnRpbWVMaWJyYXJ5PgotICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgotICAgIDwvQ2xDb21waWxlPgogICAgIDxMaW5rPgotICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj5mYWxzZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgotICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz53czJfMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8SWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzPmxpYmM7JShJZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXMpPC9JZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXM+CisgICAgICA8QmFzZUFkZHJlc3M+MHgxRDExMDAwMDwvQmFzZUFkZHJlc3M+CiAgICAgPC9MaW5rPgogICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CiAgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fFdpbjMyJyI+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KLSAgICAgIDxJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj5Pbmx5RXhwbGljaXRJbmxpbmU8L0lubGluZUZ1bmN0aW9uRXhwYW5zaW9uPgotICAgICAgPFN0cmluZ1Bvb2xpbmc+dHJ1ZTwvU3RyaW5nUG9vbGluZz4KLSAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkPC9SdW50aW1lTGlicmFyeT4KLSAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KLSAgICA8L0NsQ29tcGlsZT4KICAgICA8TGluaz4KLSAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+ZmFsc2U8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KLSAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgotICAgICAgPEltcG9ydExpYnJhcnk+Ci0gICAgICA8L0ltcG9ydExpYnJhcnk+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz53czJfMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8SWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzPmxpYmM7JShJZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXMpPC9JZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXM+CisgICAgICA8QmFzZUFkZHJlc3M+MHgxRDExMDAwMDwvQmFzZUFkZHJlc3M+CiAgICAgPC9MaW5rPgogICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CiAgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fHg2NCciPgogICAgIDxNaWRsPgogICAgICAgPFRhcmdldEVudmlyb25tZW50Plg2NDwvVGFyZ2V0RW52aXJvbm1lbnQ+CiAgICAgPC9NaWRsPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+Ci0gICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+T25seUV4cGxpY2l0SW5saW5lPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4KLSAgICAgIDxTdHJpbmdQb29saW5nPnRydWU8L1N0cmluZ1Bvb2xpbmc+Ci0gICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZDwvUnVudGltZUxpYnJhcnk+Ci0gICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+Ci0gICAgPC9DbENvbXBpbGU+CiAgICAgPExpbms+Ci0gICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPmZhbHNlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+Ci0gICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KLSAgICAgIDxJbXBvcnRMaWJyYXJ5PgotICAgICAgPC9JbXBvcnRMaWJyYXJ5PgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+d3MyXzMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPElnbm9yZVNwZWNpZmljRGVmYXVsdExpYnJhcmllcz5saWJjOyUoSWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzKTwvSWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzPgorICAgICAgPEJhc2VBZGRyZXNzPjB4MUQxMTAwMDA8L0Jhc2VBZGRyZXNzPgogICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZVg2NDwvVGFyZ2V0TWFjaGluZT4KICAgICA8L0xpbms+CiAgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KICAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+Ci0gICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+T25seUV4cGxpY2l0SW5saW5lPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4KLSAgICAgIDxTdHJpbmdQb29saW5nPnRydWU8L1N0cmluZ1Bvb2xpbmc+Ci0gICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZDwvUnVudGltZUxpYnJhcnk+Ci0gICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+Ci0gICAgPC9DbENvbXBpbGU+CiAgICAgPExpbms+Ci0gICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPmZhbHNlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+Ci0gICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KLSAgICAgIDxJbXBvcnRMaWJyYXJ5PgotICAgICAgPC9JbXBvcnRMaWJyYXJ5PgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+d3MyXzMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPElnbm9yZVNwZWNpZmljRGVmYXVsdExpYnJhcmllcz5saWJjOyUoSWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzKTwvSWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzPgorICAgICAgPEJhc2VBZGRyZXNzPjB4MUQxMTAwMDA8L0Jhc2VBZGRyZXNzPgogICAgIDwvTGluaz4KICAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgogICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciPgogICAgIDxNaWRsPgogICAgICAgPFRhcmdldEVudmlyb25tZW50Plg2NDwvVGFyZ2V0RW52aXJvbm1lbnQ+CiAgICAgPC9NaWRsPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+Ci0gICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+T25seUV4cGxpY2l0SW5saW5lPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4KLSAgICAgIDxTdHJpbmdQb29saW5nPnRydWU8L1N0cmluZ1Bvb2xpbmc+Ci0gICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZDwvUnVudGltZUxpYnJhcnk+Ci0gICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+Ci0gICAgPC9DbENvbXBpbGU+CiAgICAgPExpbms+Ci0gICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPmZhbHNlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+Ci0gICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KLSAgICAgIDxJbXBvcnRMaWJyYXJ5PgotICAgICAgPC9JbXBvcnRMaWJyYXJ5PgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+d3MyXzMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPElnbm9yZVNwZWNpZmljRGVmYXVsdExpYnJhcmllcz5saWJjOyUoSWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzKTwvSWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzPgorICAgICAgPEJhc2VBZGRyZXNzPjB4MUQxMTAwMDA8L0Jhc2VBZGRyZXNzPgogICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZVg2NDwvVGFyZ2V0TWFjaGluZT4KICAgICA8L0xpbms+CiAgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KICAgPEl0ZW1Hcm91cD4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXFBDXHc5eHBvcGVuLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXG92ZXJsYXBwZWQuYyIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0icHl0aG9uY29yZS52Y3hwcm9qIj4KKyAgICAgIDxQcm9qZWN0PntjZjdhYzNkMS1lMmRmLTQxZDItYmVhNi0xZTI1NTZjZGVhMjZ9PC9Qcm9qZWN0PgorICAgICAgPFJlZmVyZW5jZU91dHB1dEFzc2VtYmx5PmZhbHNlPC9SZWZlcmVuY2VPdXRwdXRBc3NlbWJseT4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CiAgIDwvSXRlbUdyb3VwPgogICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPgogICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPgpkaWZmIC0tZ2l0IGEvUENidWlsZC93OXhwb3Blbi52Y3hwcm9qLmZpbHRlcnMgYi9QQ2J1aWxkL19vdmVybGFwcGVkLnZjeHByb2ouZmlsdGVycwpzaW1pbGFyaXR5IGluZGV4IDczJQpyZW5hbWUgZnJvbSBQQ2J1aWxkL3c5eHBvcGVuLnZjeHByb2ouZmlsdGVycwpyZW5hbWUgdG8gUENidWlsZC9fb3ZlcmxhcHBlZC52Y3hwcm9qLmZpbHRlcnMKaW5kZXggZGVjNjdhZC4uNzhkZTg5NSAxMDA2NDQKLS0tIGEvUENidWlsZC93OXhwb3Blbi52Y3hwcm9qLmZpbHRlcnMKKysrIGIvUENidWlsZC9fb3ZlcmxhcHBlZC52Y3hwcm9qLmZpbHRlcnMKQEAgLTIsMTEgKzIsMTEgQEAKIDxQcm9qZWN0IFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KICAgPEl0ZW1Hcm91cD4KICAgICA8RmlsdGVyIEluY2x1ZGU9IlNvdXJjZSBGaWxlcyI+Ci0gICAgICA8VW5pcXVlSWRlbnRpZmllcj57YWJjMmRmZmQtM2YyYS00N2JkLWI4OWItMDMxNGM5OWVmMjFlfTwvVW5pcXVlSWRlbnRpZmllcj4KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPns2ZjY3YzhkYi03ZGU3LTQ3MTQtYTk2Ny0yYjBkNGJjNzFmMmV9PC9VbmlxdWVJZGVudGlmaWVyPgogICAgIDwvRmlsdGVyPgogICA8L0l0ZW1Hcm91cD4KICAgPEl0ZW1Hcm91cD4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXFBDXHc5eHBvcGVuLmMiPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xvdmVybGFwcGVkLmMiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KICAgPC9JdGVtR3JvdXA+CmRpZmYgLS1naXQgYS9QQ2J1aWxkL19zcWxpdGUzLnZjeHByb2ogYi9QQ2J1aWxkL19zcWxpdGUzLnZjeHByb2oKaW5kZXggMzkyZGFkMS4uZWQzNWQ1YiAxMDA2NDQKLS0tIGEvUENidWlsZC9fc3FsaXRlMy52Y3hwcm9qCisrKyBiL1BDYnVpbGQvX3NxbGl0ZTMudmN4cHJvagpAQCAtMjQzLDcgKzI0Myw2IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXF9zcWxpdGVcbW9kdWxlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXF9zcWxpdGVccHJlcGFyZV9wcm90b2NvbC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xfc3FsaXRlXHJvdy5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xfc3FsaXRlXHNxbGl0ZWNvbXBhdC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xfc3FsaXRlXHN0YXRlbWVudC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xfc3FsaXRlXHV0aWwuaCIgLz4KICAgPC9JdGVtR3JvdXA+CmRpZmYgLS1naXQgYS9QQ2J1aWxkL19zcWxpdGUzLnZjeHByb2ouZmlsdGVycyBiL1BDYnVpbGQvX3NxbGl0ZTMudmN4cHJvai5maWx0ZXJzCmluZGV4IDg4ZTVmZGIuLmRjZTc3YzkgMTAwNjQ0Ci0tLSBhL1BDYnVpbGQvX3NxbGl0ZTMudmN4cHJvai5maWx0ZXJzCisrKyBiL1BDYnVpbGQvX3NxbGl0ZTMudmN4cHJvai5maWx0ZXJzCkBAIC0zMCw5ICszMCw2IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXF9zcWxpdGVccm93LmgiPgogICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcX3NxbGl0ZVxzcWxpdGVjb21wYXQuaCI+Ci0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xfc3FsaXRlXHN0YXRlbWVudC5oIj4KICAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CmRpZmYgLS1naXQgYS9QQ2J1aWxkL19zc2wudmN4cHJvaiBiL1BDYnVpbGQvX3NzbC52Y3hwcm9qCmluZGV4IGFlNzFkMTkuLjczNzg3OTQgMTAwNjQ0Ci0tLSBhL1BDYnVpbGQvX3NzbC52Y3hwcm9qCisrKyBiL1BDYnVpbGQvX3NzbC52Y3hwcm9qCkBAIC0xNTgsNyArMTU4LDcgQEAKICAgICAgIDwvQ29tbWFuZD4KICAgICA8L1ByZUxpbmtFdmVudD4KICAgICA8TGluaz4KLSAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPndzMl8zMi5saWI7JChvcGVuc3NsRGlyKVxvdXQzMlxsaWJlYXkzMi5saWI7JChvcGVuc3NsRGlyKVxvdXQzMlxzc2xlYXkzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPndzMl8zMi5saWI7Y3J5cHQzMi5saWI7JChvcGVuc3NsRGlyKVxvdXQzMlxsaWJlYXkzMi5saWI7JChvcGVuc3NsRGlyKVxvdXQzMlxzc2xlYXkzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KICAgICA8L0xpbms+CiAgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KICAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KQEAgLTE3Myw3ICsxNzMsNyBAQAogICAgICAgPC9Db21tYW5kPgogICAgIDwvUHJlTGlua0V2ZW50PgogICAgIDxMaW5rPgotICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+d3MyXzMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDY0XGxpYmVheTMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDY0XHNzbGVheTMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+d3MyXzMyLmxpYjtjcnlwdDMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDY0XGxpYmVheTMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDY0XHNzbGVheTMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgogICAgIDwvTGluaz4KICAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgogICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KQEAgLTE4NSw3ICsxODUsNyBAQAogICAgICAgPC9Db21tYW5kPgogICAgIDwvUHJlTGlua0V2ZW50PgogICAgIDxMaW5rPgotICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+d3MyXzMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDMyXGxpYmVheTMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDMyXHNzbGVheTMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+d3MyXzMyLmxpYjtjcnlwdDMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDMyXGxpYmVheTMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDMyXHNzbGVheTMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgogICAgIDwvTGluaz4KICAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgogICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+CkBAIC0yMDAsNyArMjAwLDcgQEAKICAgICAgIDwvQ29tbWFuZD4KICAgICA8L1ByZUxpbmtFdmVudD4KICAgICA8TGluaz4KLSAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPndzMl8zMi5saWI7JChvcGVuc3NsRGlyKVxvdXQ2NFxsaWJlYXkzMi5saWI7JChvcGVuc3NsRGlyKVxvdXQ2NFxzc2xlYXkzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPndzMl8zMi5saWI7Y3J5cHQzMi5saWI7JChvcGVuc3NsRGlyKVxvdXQ2NFxsaWJlYXkzMi5saWI7JChvcGVuc3NsRGlyKVxvdXQ2NFxzc2xlYXkzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KICAgICA8L0xpbms+CiAgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KICAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIj4KQEAgLTIxMiw3ICsyMTIsNyBAQAogICAgICAgPC9Db21tYW5kPgogICAgIDwvUHJlTGlua0V2ZW50PgogICAgIDxMaW5rPgotICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+d3MyXzMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDMyXGxpYmVheTMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDMyXHNzbGVheTMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+d3MyXzMyLmxpYjtjcnlwdDMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDMyXGxpYmVheTMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDMyXHNzbGVheTMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgogICAgIDwvTGluaz4KICAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgogICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHx4NjQnIj4KQEAgLTIyNyw3ICsyMjcsNyBAQAogICAgICAgPC9Db21tYW5kPgogICAgIDwvUHJlTGlua0V2ZW50PgogICAgIDxMaW5rPgotICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+d3MyXzMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDY0XGxpYmVheTMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDY0XHNzbGVheTMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+d3MyXzMyLmxpYjtjcnlwdDMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDY0XGxpYmVheTMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDY0XHNzbGVheTMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgogICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZVg2NDwvVGFyZ2V0TWFjaGluZT4KICAgICA8L0xpbms+CiAgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KQEAgLTI0MCw3ICsyNDAsNyBAQAogICAgICAgPC9Db21tYW5kPgogICAgIDwvUHJlTGlua0V2ZW50PgogICAgIDxMaW5rPgotICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+d3MyXzMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDMyXGxpYmVheTMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDMyXHNzbGVheTMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+d3MyXzMyLmxpYjtjcnlwdDMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDMyXGxpYmVheTMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDMyXHNzbGVheTMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgogICAgIDwvTGluaz4KICAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgogICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciPgpAQCAtMjU1LDcgKzI1NSw3IEBACiAgICAgICA8L0NvbW1hbmQ+CiAgICAgPC9QcmVMaW5rRXZlbnQ+CiAgICAgPExpbms+Ci0gICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz53czJfMzIubGliOyQob3BlbnNzbERpcilcb3V0NjRcbGliZWF5MzIubGliOyQob3BlbnNzbERpcilcb3V0NjRcc3NsZWF5MzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz53czJfMzIubGliO2NyeXB0MzIubGliOyQob3BlbnNzbERpcilcb3V0NjRcbGliZWF5MzIubGliOyQob3BlbnNzbERpcilcb3V0NjRcc3NsZWF5MzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CiAgICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lWDY0PC9UYXJnZXRNYWNoaW5lPgogICAgIDwvTGluaz4KICAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgpkaWZmIC0tZ2l0IGEvUENidWlsZC9fdGVzdGVtYmVkLnZjeHByb2ogYi9QQ2J1aWxkL190ZXN0ZW1iZWQudmN4cHJvagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2M3YWQyCi0tLSAvZGV2L251bGwKKysrIGIvUENidWlsZC9fdGVzdGVtYmVkLnZjeHByb2oKQEAgLTAsMCArMSwxNjEgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgPEl0ZW1Hcm91cCBMYWJlbD0iUHJvamVjdENvbmZpZ3VyYXRpb25zIj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXx4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgIDwvSXRlbUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iR2xvYmFscyI+CisgICAgPFByb2plY3RHdWlkPns2REFDNjZEOS1FNzAzLTQ2MjQtQkUwMy00OTExMkFCNUFBNjJ9PC9Qcm9qZWN0R3VpZD4KKyAgICA8S2V5d29yZD5XaW4zMlByb2o8L0tleXdvcmQ+CisgICAgPFJvb3ROYW1lc3BhY2U+X3Rlc3RlbWJlZDwvUm9vdE5hbWVzcGFjZT4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnByb3BzIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICAgIDxJbXBvcnQgUHJvamVjdD0icHlwcm9qZWN0LnByb3BzIiAvPgorICAgIDxJbXBvcnQgUHJvamVjdD0iZGVidWcucHJvcHMiIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICAgIDxJbXBvcnQgUHJvamVjdD0icHlwcm9qZWN0LnByb3BzIiAvPgorICAgIDxJbXBvcnQgUHJvamVjdD0iZGVidWcucHJvcHMiIC8+CisgICAgPEltcG9ydCBQcm9qZWN0PSJ4NjQucHJvcHMiIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KKyAgICA8SW1wb3J0IFByb2plY3Q9Ing2NC5wcm9wcyIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8TGlua0luY3JlbWVudGFsPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KKyAgICA8TGlua0luY3JlbWVudGFsPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KKyAgICA8TGlua0luY3JlbWVudGFsPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0RFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxJbnRyaW5zaWNGdW5jdGlvbnM+dHJ1ZTwvSW50cmluc2ljRnVuY3Rpb25zPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO05ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4KKyAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7TkRFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXF90ZXN0ZW1iZWQuYyIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0icHl0aG9uY29yZS52Y3hwcm9qIj4KKyAgICAgIDxQcm9qZWN0PntjZjdhYzNkMS1lMmRmLTQxZDItYmVhNi0xZTI1NTZjZGVhMjZ9PC9Qcm9qZWN0PgorICAgICAgPFByaXZhdGU+dHJ1ZTwvUHJpdmF0ZT4KKyAgICAgIDxSZWZlcmVuY2VPdXRwdXRBc3NlbWJseT50cnVlPC9SZWZlcmVuY2VPdXRwdXRBc3NlbWJseT4KKyAgICAgIDxDb3B5TG9jYWxTYXRlbGxpdGVBc3NlbWJsaWVzPmZhbHNlPC9Db3B5TG9jYWxTYXRlbGxpdGVBc3NlbWJsaWVzPgorICAgICAgPExpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPnRydWU8L0xpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPgorICAgICAgPFVzZUxpYnJhcnlEZXBlbmRlbmN5SW5wdXRzPmZhbHNlPC9Vc2VMaWJyYXJ5RGVwZW5kZW5jeUlucHV0cz4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPgorICA8L0ltcG9ydEdyb3VwPgorPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1BDYnVpbGQvX3Rlc3RlbWJlZC52Y3hwcm9qLmZpbHRlcnMgYi9QQ2J1aWxkL190ZXN0ZW1iZWQudmN4cHJvai5maWx0ZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlYTU0ZDQKLS0tIC9kZXYvbnVsbAorKysgYi9QQ2J1aWxkL190ZXN0ZW1iZWQudmN4cHJvai5maWx0ZXJzCkBAIC0wLDAgKzEsMjIgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBUb29sc1ZlcnNpb249IjQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CisgIDxJdGVtR3JvdXA+CisgICAgPEZpbHRlciBJbmNsdWRlPSJTb3VyY2UgRmlsZXMiPgorICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezRGQzczN0YxLUM3QTUtNDM3Ni1BMDY2LTJBMzJENzUyQTJGRn08L1VuaXF1ZUlkZW50aWZpZXI+CisgICAgICA8RXh0ZW5zaW9ucz5jcHA7YztjYztjeHg7ZGVmO29kbDtpZGw7aHBqO2JhdDthc207YXNteDwvRXh0ZW5zaW9ucz4KKyAgICA8L0ZpbHRlcj4KKyAgICA8RmlsdGVyIEluY2x1ZGU9IkhlYWRlciBGaWxlcyI+CisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57OTM5OTUzODAtODlCRC00YjA0LTg4RUItNjI1RkJFNTJFQkZCfTwvVW5pcXVlSWRlbnRpZmllcj4KKyAgICAgIDxFeHRlbnNpb25zPmg7aHBwO2h4eDtobTtpbmw7aW5jO3hzZDwvRXh0ZW5zaW9ucz4KKyAgICA8L0ZpbHRlcj4KKyAgICA8RmlsdGVyIEluY2x1ZGU9IlJlc291cmNlIEZpbGVzIj4KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPns2N0RBNkFCNi1GODAwLTRjMDgtOEI3QS04M0JCMTIxQUFEMDF9PC9VbmlxdWVJZGVudGlmaWVyPgorICAgICAgPEV4dGVuc2lvbnM+cmM7aWNvO2N1cjtibXA7ZGxnO3JjMjtyY3Q7YmluO3JncztnaWY7anBnO2pwZWc7anBlO3Jlc3g7dGlmZjt0aWY7cG5nO3dhdjttZmNyaWJib24tbXM8L0V4dGVuc2lvbnM+CisgICAgPC9GaWx0ZXI+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xfdGVzdGVtYmVkLmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgPC9JdGVtR3JvdXA+Cis8L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvUENidWlsZC93OXhwb3Blbi52Y3hwcm9qIGIvUENidWlsZC9fdGVzdGltcG9ydG11bHRpcGxlLnZjeHByb2oKc2ltaWxhcml0eSBpbmRleCA2NSUKY29weSBmcm9tIFBDYnVpbGQvdzl4cG9wZW4udmN4cHJvagpjb3B5IHRvIFBDYnVpbGQvX3Rlc3RpbXBvcnRtdWx0aXBsZS52Y3hwcm9qCmluZGV4IGQxYWZlMjIuLjg0OTg0ZmYgMTAwNjQ0Ci0tLSBhL1BDYnVpbGQvdzl4cG9wZW4udmN4cHJvagorKysgYi9QQ2J1aWxkL190ZXN0aW1wb3J0bXVsdGlwbGUudmN4cHJvagpAQCAtMzUsMTA0ICszNSw5NSBAQAogICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CiAgIDwvSXRlbUdyb3VwPgogICA8UHJvcGVydHlHcm91cCBMYWJlbD0iR2xvYmFscyI+Ci0gICAgPFByb2plY3RHdWlkPntFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9PC9Qcm9qZWN0R3VpZD4KLSAgICA8Um9vdE5hbWVzcGFjZT53OXhwb3BlbjwvUm9vdE5hbWVzcGFjZT4KKyAgICA8UHJvamVjdEd1aWQ+ezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX08L1Byb2plY3RHdWlkPgorICAgIDxSb290TmFtZXNwYWNlPl90ZXN0aW1wb3J0bXVsdGlwbGU8L1Jvb3ROYW1lc3BhY2U+CisgICAgPEtleXdvcmQ+V2luMzJQcm9qPC9LZXl3b3JkPgogICA8L1Byb3BlcnR5R3JvdXA+CiAgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+CiAgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8VXNlT2ZNZmM+ZmFsc2U8L1VzZU9mTWZjPgotICAgIDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgogICA8L1Byb3BlcnR5R3JvdXA+CiAgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPFVzZU9mTWZjPmZhbHNlPC9Vc2VPZk1mYz4KLSAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KICAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8VXNlT2ZNZmM+ZmFsc2U8L1VzZU9mTWZjPgotICAgIDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgogICA8L1Byb3BlcnR5R3JvdXA+CiAgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8VXNlT2ZNZmM+ZmFsc2U8L1VzZU9mTWZjPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CiAgICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KICAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxVc2VPZk1mYz5mYWxzZTwvVXNlT2ZNZmM+Ci0gICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CiAgIDwvUHJvcGVydHlHcm91cD4KICAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPFVzZU9mTWZjPmZhbHNlPC9Vc2VPZk1mYz4KLSAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KICAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPFVzZU9mTWZjPmZhbHNlPC9Vc2VPZk1mYz4KLSAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KICAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxVc2VPZk1mYz5mYWxzZTwvVXNlT2ZNZmM+Ci0gICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+CiAgIDwvUHJvcGVydHlHcm91cD4KICAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+CiAgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiPgogICA8L0ltcG9ydEdyb3VwPgogICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CiAgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlwcm9qZWN0LnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icmVsZWFzZS5wcm9wcyIgLz4KKyAgICA8SW1wb3J0IFByb2plY3Q9InB5ZC5wcm9wcyIgLz4KICAgICA8SW1wb3J0IFByb2plY3Q9InBndXBkYXRlLnByb3BzIiAvPgogICA8L0ltcG9ydEdyb3VwPgogICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgogICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InJlbGVhc2UucHJvcHMiIC8+CisgICAgPEltcG9ydCBQcm9qZWN0PSJweWQucHJvcHMiIC8+CiAgICAgPEltcG9ydCBQcm9qZWN0PSJwZ2luc3RydW1lbnQucHJvcHMiIC8+CiAgIDwvSW1wb3J0R3JvdXA+CiAgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgogICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InJlbGVhc2UucHJvcHMiIC8+CisgICAgPEltcG9ydCBQcm9qZWN0PSJweWQucHJvcHMiIC8+CiAgIDwvSW1wb3J0R3JvdXA+CiAgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KICAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweXByb2plY3QucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJkZWJ1Zy5wcm9wcyIgLz4KKyAgICA8SW1wb3J0IFByb2plY3Q9InB5ZF9kLnByb3BzIiAvPgogICA8L0ltcG9ydEdyb3VwPgogICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgogICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KKyAgICA8SW1wb3J0IFByb2plY3Q9InB5ZC5wcm9wcyIgLz4KICAgICA8SW1wb3J0IFByb2plY3Q9Ing2NC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InJlbGVhc2UucHJvcHMiIC8+CiAgICAgPEltcG9ydCBQcm9qZWN0PSJwZ3VwZGF0ZS5wcm9wcyIgLz4KICAgPC9JbXBvcnRHcm91cD4KICAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CiAgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlwcm9qZWN0LnByb3BzIiAvPgorICAgIDxJbXBvcnQgUHJvamVjdD0icHlkLnByb3BzIiAvPgogICAgIDxJbXBvcnQgUHJvamVjdD0ieDY0LnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icmVsZWFzZS5wcm9wcyIgLz4KICAgICA8SW1wb3J0IFByb2plY3Q9InBnaW5zdHJ1bWVudC5wcm9wcyIgLz4KICAgPC9JbXBvcnRHcm91cD4KICAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgogICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KKyAgICA8SW1wb3J0IFByb2plY3Q9InB5ZC5wcm9wcyIgLz4KICAgICA8SW1wb3J0IFByb2plY3Q9Ing2NC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InJlbGVhc2UucHJvcHMiIC8+CiAgIDwvSW1wb3J0R3JvdXA+CiAgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CiAgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlwcm9qZWN0LnByb3BzIiAvPgorICAgIDxJbXBvcnQgUHJvamVjdD0icHlkX2QucHJvcHMiIC8+CiAgICAgPEltcG9ydCBQcm9qZWN0PSJ4NjQucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJkZWJ1Zy5wcm9wcyIgLz4KICAgPC9JbXBvcnRHcm91cD4KICAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+CiAgIDxQcm9wZXJ0eUdyb3VwPgotICAgIDxfUHJvamVjdEZpbGVWZXJzaW9uPjEwLjAuNDAyMTkuMTwvX1Byb2plY3RGaWxlVmVyc2lvbj4KKyAgICA8X1Byb2plY3RGaWxlVmVyc2lvbj4xMC4wLjMwMzE5LjE8L19Qcm9qZWN0RmlsZVZlcnNpb24+CiAgICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+CiAgICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiAvPgogICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgLz4KQEAgLTE1OSwxMjkgKzE1MCw2OSBAQAogICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgLz4KICAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KLSAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3M+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPgotICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWREZWJ1ZzwvUnVudGltZUxpYnJhcnk+Ci0gICAgPC9DbENvbXBpbGU+CiAgICAgPExpbms+Ci0gICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxCYXNlQWRkcmVzcz4weDFlMUYwMDAwPC9CYXNlQWRkcmVzcz4KICAgICA8L0xpbms+CiAgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KICAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KICAgICA8TWlkbD4KICAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5YNjQ8L1RhcmdldEVudmlyb25tZW50PgogICAgIDwvTWlkbD4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgotICAgICAgPEJhc2ljUnVudGltZUNoZWNrcz5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+Ci0gICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZERlYnVnPC9SdW50aW1lTGlicmFyeT4KLSAgICA8L0NsQ29tcGlsZT4KICAgICA8TGluaz4KLSAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEJhc2VBZGRyZXNzPjB4MWUxRjAwMDA8L0Jhc2VBZGRyZXNzPgogICAgIDwvTGluaz4KICAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgogICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgotICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPk9ubHlFeHBsaWNpdElubGluZTwvSW5saW5lRnVuY3Rpb25FeHBhbnNpb24+Ci0gICAgICA8U3RyaW5nUG9vbGluZz50cnVlPC9TdHJpbmdQb29saW5nPgotICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWQ8L1J1bnRpbWVMaWJyYXJ5PgotICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgotICAgIDwvQ2xDb21waWxlPgogICAgIDxMaW5rPgotICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj5mYWxzZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgotICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8QmFzZUFkZHJlc3M+MHgxZTFGMDAwMDwvQmFzZUFkZHJlc3M+CiAgICAgPC9MaW5rPgogICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CiAgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KICAgICA8TWlkbD4KICAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5YNjQ8L1RhcmdldEVudmlyb25tZW50PgogICAgIDwvTWlkbD4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgotICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPk9ubHlFeHBsaWNpdElubGluZTwvSW5saW5lRnVuY3Rpb25FeHBhbnNpb24+Ci0gICAgICA8U3RyaW5nUG9vbGluZz50cnVlPC9TdHJpbmdQb29saW5nPgotICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWQ8L1J1bnRpbWVMaWJyYXJ5PgotICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgotICAgIDwvQ2xDb21waWxlPgogICAgIDxMaW5rPgotICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj5mYWxzZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgotICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8QmFzZUFkZHJlc3M+MHgxZTFGMDAwMDwvQmFzZUFkZHJlc3M+CiAgICAgPC9MaW5rPgogICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CiAgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fFdpbjMyJyI+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KLSAgICAgIDxJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj5Pbmx5RXhwbGljaXRJbmxpbmU8L0lubGluZUZ1bmN0aW9uRXhwYW5zaW9uPgotICAgICAgPFN0cmluZ1Bvb2xpbmc+dHJ1ZTwvU3RyaW5nUG9vbGluZz4KLSAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkPC9SdW50aW1lTGlicmFyeT4KLSAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KLSAgICA8L0NsQ29tcGlsZT4KICAgICA8TGluaz4KLSAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+ZmFsc2U8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KLSAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgotICAgICAgPEltcG9ydExpYnJhcnk+Ci0gICAgICA8L0ltcG9ydExpYnJhcnk+CisgICAgICA8QmFzZUFkZHJlc3M+MHgxZTFGMDAwMDwvQmFzZUFkZHJlc3M+CiAgICAgPC9MaW5rPgogICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CiAgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fHg2NCciPgogICAgIDxNaWRsPgogICAgICAgPFRhcmdldEVudmlyb25tZW50Plg2NDwvVGFyZ2V0RW52aXJvbm1lbnQ+CiAgICAgPC9NaWRsPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+Ci0gICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+T25seUV4cGxpY2l0SW5saW5lPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4KLSAgICAgIDxTdHJpbmdQb29saW5nPnRydWU8L1N0cmluZ1Bvb2xpbmc+Ci0gICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZDwvUnVudGltZUxpYnJhcnk+Ci0gICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+Ci0gICAgPC9DbENvbXBpbGU+CiAgICAgPExpbms+Ci0gICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPmZhbHNlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+Ci0gICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KLSAgICAgIDxJbXBvcnRMaWJyYXJ5PgotICAgICAgPC9JbXBvcnRMaWJyYXJ5PgorICAgICAgPEJhc2VBZGRyZXNzPjB4MWUxRjAwMDA8L0Jhc2VBZGRyZXNzPgogICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZVg2NDwvVGFyZ2V0TWFjaGluZT4KICAgICA8L0xpbms+CiAgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KICAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+Ci0gICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+T25seUV4cGxpY2l0SW5saW5lPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4KLSAgICAgIDxTdHJpbmdQb29saW5nPnRydWU8L1N0cmluZ1Bvb2xpbmc+Ci0gICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZDwvUnVudGltZUxpYnJhcnk+Ci0gICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+Ci0gICAgPC9DbENvbXBpbGU+CiAgICAgPExpbms+Ci0gICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPmZhbHNlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+Ci0gICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KLSAgICAgIDxJbXBvcnRMaWJyYXJ5PgotICAgICAgPC9JbXBvcnRMaWJyYXJ5PgorICAgICAgPEJhc2VBZGRyZXNzPjB4MWUxRjAwMDA8L0Jhc2VBZGRyZXNzPgogICAgIDwvTGluaz4KICAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgogICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciPgogICAgIDxNaWRsPgogICAgICAgPFRhcmdldEVudmlyb25tZW50Plg2NDwvVGFyZ2V0RW52aXJvbm1lbnQ+CiAgICAgPC9NaWRsPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+Ci0gICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+T25seUV4cGxpY2l0SW5saW5lPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4KLSAgICAgIDxTdHJpbmdQb29saW5nPnRydWU8L1N0cmluZ1Bvb2xpbmc+Ci0gICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZDwvUnVudGltZUxpYnJhcnk+Ci0gICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+Ci0gICAgPC9DbENvbXBpbGU+CiAgICAgPExpbms+Ci0gICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPmZhbHNlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+Ci0gICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KLSAgICAgIDxJbXBvcnRMaWJyYXJ5PgotICAgICAgPC9JbXBvcnRMaWJyYXJ5PgorICAgICAgPEJhc2VBZGRyZXNzPjB4MWUxRjAwMDA8L0Jhc2VBZGRyZXNzPgogICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZVg2NDwvVGFyZ2V0TWFjaGluZT4KICAgICA8L0xpbms+CiAgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KICAgPEl0ZW1Hcm91cD4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXFBDXHc5eHBvcGVuLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXF90ZXN0aW1wb3J0bXVsdGlwbGUuYyIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0icHl0aG9uY29yZS52Y3hwcm9qIj4KKyAgICAgIDxQcm9qZWN0PntjZjdhYzNkMS1lMmRmLTQxZDItYmVhNi0xZTI1NTZjZGVhMjZ9PC9Qcm9qZWN0PgorICAgICAgPFJlZmVyZW5jZU91dHB1dEFzc2VtYmx5PmZhbHNlPC9SZWZlcmVuY2VPdXRwdXRBc3NlbWJseT4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CiAgIDwvSXRlbUdyb3VwPgogICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPgogICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPgogICA8L0ltcG9ydEdyb3VwPgotPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKzwvUHJvamVjdD4KZGlmZiAtLWdpdCBhL1BDYnVpbGQvdzl4cG9wZW4udmN4cHJvai5maWx0ZXJzIGIvUENidWlsZC9fdGVzdGltcG9ydG11bHRpcGxlLnZjeHByb2ouZmlsdGVycwpzaW1pbGFyaXR5IGluZGV4IDcyJQpjb3B5IGZyb20gUENidWlsZC93OXhwb3Blbi52Y3hwcm9qLmZpbHRlcnMKY29weSB0byBQQ2J1aWxkL190ZXN0aW1wb3J0bXVsdGlwbGUudmN4cHJvai5maWx0ZXJzCmluZGV4IGRlYzY3YWQuLmRiMGQwYTYgMTAwNjQ0Ci0tLSBhL1BDYnVpbGQvdzl4cG9wZW4udmN4cHJvai5maWx0ZXJzCisrKyBiL1BDYnVpbGQvX3Rlc3RpbXBvcnRtdWx0aXBsZS52Y3hwcm9qLmZpbHRlcnMKQEAgLTIsMTIgKzIsMTIgQEAKIDxQcm9qZWN0IFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KICAgPEl0ZW1Hcm91cD4KICAgICA8RmlsdGVyIEluY2x1ZGU9IlNvdXJjZSBGaWxlcyI+Ci0gICAgICA8VW5pcXVlSWRlbnRpZmllcj57YWJjMmRmZmQtM2YyYS00N2JkLWI4OWItMDMxNGM5OWVmMjFlfTwvVW5pcXVlSWRlbnRpZmllcj4KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPnsxZWMzOGFkOS0xYWJmLTRiODAtODYyOC1hYzQzY2NiYTMyNGJ9PC9VbmlxdWVJZGVudGlmaWVyPgogICAgIDwvRmlsdGVyPgogICA8L0l0ZW1Hcm91cD4KICAgPEl0ZW1Hcm91cD4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXFBDXHc5eHBvcGVuLmMiPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xfdGVzdGltcG9ydG11bHRpcGxlLmMiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KICAgPC9JdGVtR3JvdXA+Ci08L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorPC9Qcm9qZWN0PgpkaWZmIC0tZ2l0IGEvUENidWlsZC9idWlsZC5iYXQgYi9QQ2J1aWxkL2J1aWxkLmJhdAppbmRleCBmYTBkOTViLi4wYzQ4MmY1IDEwMDY0NAotLS0gYS9QQ2J1aWxkL2J1aWxkLmJhdAorKysgYi9QQ2J1aWxkL2J1aWxkLmJhdApAQCAtMSwxOSArMSwxMTMgQEAKLUBlY2hvIG9mZgotcmVtIEEgYmF0Y2ggcHJvZ3JhbSB0byBidWlsZCBvciByZWJ1aWxkIGEgcGFydGljdWxhciBjb25maWd1cmF0aW9uLgotcmVtIGp1c3QgZm9yIGNvbnZlbmllbmNlLgotCi1zZXRsb2NhbAotc2V0IHBsYXRmPVdpbjMyCi1zZXQgY29uZj1SZWxlYXNlCi1zZXQgdGFyZ2V0PWJ1aWxkCi1zZXQgZGlyPSV+ZHAwCi0KLTpDaGVja09wdHMKLWlmICIlMSI9PSItYyIgKHNldCBjb25mPSUyKSAmIHNoaWZ0ICYgc2hpZnQgJiBnb3RvIENoZWNrT3B0cwotaWYgIiUxIj09Ii1wIiAoc2V0IHBsYXRmPSUyKSAmIHNoaWZ0ICYgc2hpZnQgJiBnb3RvIENoZWNrT3B0cwotaWYgIiUxIj09Ii1yIiAoc2V0IHRhcmdldD1yZWJ1aWxkKSAmIHNoaWZ0ICYgZ290byBDaGVja09wdHMKLWlmICIlMSI9PSItZCIgKHNldCBjb25mPURlYnVnKSAmIHNoaWZ0ICYgZ290byBDaGVja09wdHMKLQotc2V0IGNtZD1tc2J1aWxkIC9wOnVzZWVudj10cnVlICVkaXIlcGNidWlsZC5zbG4gL3Q6JXRhcmdldCUgL3A6Q29uZmlndXJhdGlvbj0lY29uZiUgL3A6UGxhdGZvcm09JXBsYXRmJQotZWNobyAlY21kJQotJWNtZCUKK0BlY2hvIG9mZg0KK3JlbSBBIGJhdGNoIHByb2dyYW0gdG8gYnVpbGQgb3IgcmVidWlsZCBhIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiwNCityZW0ganVzdCBmb3IgY29udmVuaWVuY2UuDQorDQorcmVtIEFyZ3VtZW50czoNCityZW0gIC1jICBTZXQgdGhlIGNvbmZpZ3VyYXRpb24gKGRlZmF1bHQ6IFJlbGVhc2UpDQorcmVtICAtcCAgU2V0IHRoZSBwbGF0Zm9ybSAoeDY0IG9yIFdpbjMyLCBkZWZhdWx0OiBXaW4zMikNCityZW0gIC1yICBUYXJnZXQgUmVidWlsZCBpbnN0ZWFkIG9mIEJ1aWxkDQorcmVtICAtdCAgU2V0IHRoZSB0YXJnZXQgbWFudWFsbHkgKEJ1aWxkLCBSZWJ1aWxkLCBvciBDbGVhbikNCityZW0gIC1kICBTZXQgdGhlIGNvbmZpZ3VyYXRpb24gdG8gRGVidWcNCityZW0gIC1lICBQdWxsIGluIGV4dGVybmFsIGxpYnJhcmllcyB1c2luZyBnZXRfZXh0ZXJuYWxzLmJhdA0KK3JlbSAgLW0gIEVuYWJsZSBwYXJhbGxlbCBidWlsZA0KK3JlbSAgLU0gIERpc2FibGUgcGFyYWxsZWwgYnVpbGQgKGRpc2FibGVkIGJ5IGRlZmF1bHQpDQorcmVtICAtdiAgSW5jcmVhc2VkIG91dHB1dCBtZXNzYWdlcw0KK3JlbSAgLWsgIEF0dGVtcHQgdG8ga2lsbCBhbnkgcnVubmluZyBQeXRob25zIGJlZm9yZSBidWlsZGluZw0KKw0KK3NldGxvY2FsDQorc2V0IHBsYXRmPVdpbjMyDQorc2V0IHZzX3BsYXRmPXg4Ng0KK3NldCBjb25mPVJlbGVhc2UNCitzZXQgdGFyZ2V0PUJ1aWxkDQorc2V0IGRpcj0lfmRwMA0KK3NldCBwYXJhbGxlbD0NCitzZXQgdmVyYm9zZT0vbm9sb2dvIC92Om0NCitzZXQga2lsbD0NCitzZXQgYnVpbGRfdGtpbnRlcj0NCisNCis6Q2hlY2tPcHRzDQoraWYgJyUxJz09Jy1jJyAoc2V0IGNvbmY9JTIpICYgc2hpZnQgJiBzaGlmdCAmIGdvdG8gQ2hlY2tPcHRzDQoraWYgJyUxJz09Jy1wJyAoc2V0IHBsYXRmPSUyKSAmIHNoaWZ0ICYgc2hpZnQgJiBnb3RvIENoZWNrT3B0cw0KK2lmICclMSc9PSctcicgKHNldCB0YXJnZXQ9UmVidWlsZCkgJiBzaGlmdCAmIGdvdG8gQ2hlY2tPcHRzDQoraWYgJyUxJz09Jy10JyAoc2V0IHRhcmdldD0lMikgJiBzaGlmdCAmIHNoaWZ0ICYgZ290byBDaGVja09wdHMNCitpZiAnJTEnPT0nLWQnIChzZXQgY29uZj1EZWJ1ZykgJiBzaGlmdCAmIGdvdG8gQ2hlY2tPcHRzDQoraWYgJyUxJz09Jy1lJyBjYWxsICIlZGlyJWdldF9leHRlcm5hbHMuYmF0IiAmIChzZXQgYnVpbGRfdGtpbnRlcj10cnVlKSAmIHNoaWZ0ICYgZ290byBDaGVja09wdHMNCitpZiAnJTEnPT0nLW0nIChzZXQgcGFyYWxsZWw9L20pICYgc2hpZnQgJiBnb3RvIENoZWNrT3B0cw0KK2lmICclMSc9PSctTScgKHNldCBwYXJhbGxlbD0pICYgc2hpZnQgJiBnb3RvIENoZWNrT3B0cw0KK2lmICclMSc9PSctdicgKHNldCB2ZXJib3NlPS92Om4pICYgc2hpZnQgJiBnb3RvIENoZWNrT3B0cw0KK2lmICclMSc9PSctaycgKHNldCBraWxsPXRydWUpICYgc2hpZnQgJiBnb3RvIENoZWNrT3B0cw0KKw0KK2lmICclY29uZiUnPT0nRGVidWcnIChzZXQgZGJnX2V4dD1fZCkgZWxzZSAoc2V0IGRiZ19leHQ9KQ0KK2lmICclcGxhdGYlJz09J3g2NCcgKA0KKyAgICBzZXQgdnNfcGxhdGY9eDg2X2FtZDY0DQorICAgIHNldCBidWlsZGRpcj0lZGlyJWFtZDY0XA0KKykgZWxzZSAoDQorICAgIHNldCBidWlsZGRpcj0lZGlyJQ0KKykNCisNCityZW0gU2V0dXAgdGhlIGVudmlyb25tZW50DQorY2FsbCAiJWRpciVlbnYuYmF0IiAldnNfcGxhdGYlDQorDQoraWYgJyVraWxsJSc9PSd0cnVlJyAoDQorICAgIG1zYnVpbGQgIiVkaXIla2lsbF9weXRob24udmN4cHJvaiIgJXZlcmJvc2UlIC9wOkNvbmZpZ3VyYXRpb249JWNvbmYlIC9wOlBsYXRmb3JtPSVwbGF0ZiUgJiYgIiVidWlsZGRpciVraWxsX3B5dGhvbiVkYmdfZXh0JS5leGUiDQorKQ0KKw0KK3NldCBleHRlcm5hbHNfZGlyPSVkaXIlLi5cZXh0ZXJuYWxzDQoraWYgJyVidWlsZF90a2ludGVyJSc9PSd0cnVlJyAoDQorICAgIGlmICclcGxhdGYlJz09J3g2NCcgKA0KKyAgICAgICAgc2V0IHRjbHRrZGlyPSVleHRlcm5hbHNfZGlyJVx0Y2x0azY0DQorICAgICAgICBzZXQgbWFjaGluZT1BTUQ2NA0KKyAgICApIGVsc2UgKA0KKyAgICAgICAgc2V0IHRjbHRrZGlyPSVleHRlcm5hbHNfZGlyJVx0Y2x0aw0KKyAgICAgICAgc2V0IG1hY2hpbmU9SVg4Ng0KKyAgICApDQorICAgIGlmICclY29uZiUnPT0nRGVidWcnICgNCisgICAgICAgIHNldCB0Y2xfZGJnX2V4dD1nDQorICAgICAgICBzZXQgZGVidWdfZmxhZz0xDQorICAgICAgICBzZXQgb3B0aW9ucz1zeW1ib2xzDQorICAgICkgZWxzZSAoDQorICAgICAgICBzZXQgdGNsX2RiZ19leHQ9DQorICAgICAgICBzZXQgZGVidWdfZmxhZz0wDQorICAgICAgICBzZXQgb3B0aW9ucz0NCisgICAgKQ0KKyAgICBzZXQgdGNsZGlyPSVleHRlcm5hbHNfZGlyJVx0Y2wtOC42LjEuMA0KKyAgICBzZXQgdGtkaXI9JWV4dGVybmFsc19kaXIlXHRrLTguNi4xLjANCisgICAgc2V0IHRpeGRpcj0lZXh0ZXJuYWxzX2RpciVcdGl4LTguNC4zLjQNCispDQoraWYgJyVidWlsZF90a2ludGVyJSc9PSd0cnVlJyAoDQorICAgIGlmIG5vdCBleGlzdCAiJXRjbHRrZGlyJVxiaW5cdGNsODZ0JXRjbF9kYmdfZXh0JS5kbGwiICgNCisgICAgICAgIEByZW0gYWxsIGFuZCBpbnN0YWxsIG5lZWQgdG8gYmUgc2VwYXJhdGUgaW52b2NhdGlvbnMsIG90aGVyd2lzZSBubWFrZWhscCBpcyBub3QgZm91bmQgb24gaW5zdGFsbA0KKyAgICAgICAgcHVzaGQgIiV0Y2xkaXIlXHdpbiINCisgICAgICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIE1BQ0hJTkU9JW1hY2hpbmUlIE9QVFM9JW9wdGlvbnMlIElOU1RBTExESVI9IiV0Y2x0a2RpciUiIGNsZWFuIGFsbA0KKyAgICAgICAgbm1ha2UgLWYgbWFrZWZpbGUudmMgTUFDSElORT0lbWFjaGluZSUgT1BUUz0lb3B0aW9ucyUgSU5TVEFMTERJUj0iJXRjbHRrZGlyJSIgaW5zdGFsbC1iaW5hcmllcyBpbnN0YWxsLWxpYnJhcmllcw0KKyAgICAgICAgcG9wZA0KKyAgICApDQorICAgIGlmIG5vdCBleGlzdCAiJWJ1aWxkZGlyJXRjbDg2dCV0Y2xfZGJnX2V4dCUuZGxsIiAoDQorICAgICAgICB4Y29weSAiJXRjbHRrZGlyJVxiaW5cdGNsODZ0JXRjbF9kYmdfZXh0JS5kbGwiICIlYnVpbGRkaXIlIg0KKyAgICApDQorDQorICAgIGlmIG5vdCBleGlzdCAiJXRjbHRrZGlyJVxiaW5cdGs4NnQldGNsX2RiZ19leHQlLmRsbCIgKA0KKyAgICAgICAgcHVzaGQgIiV0a2RpciVcd2luIg0KKyAgICAgICAgbm1ha2UgLWYgbWFrZWZpbGUudmMgTUFDSElORT0lbWFjaGluZSUgT1BUUz0lb3B0aW9ucyUgSU5TVEFMTERJUj0iJXRjbHRrZGlyJSIgVENMRElSPSIldGNsZGlyJSIgY2xlYW4NCisgICAgICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIE1BQ0hJTkU9JW1hY2hpbmUlIE9QVFM9JW9wdGlvbnMlIElOU1RBTExESVI9IiV0Y2x0a2RpciUiIFRDTERJUj0iJXRjbGRpciUiIGFsbA0KKyAgICAgICAgbm1ha2UgLWYgbWFrZWZpbGUudmMgTUFDSElORT0lbWFjaGluZSUgT1BUUz0lb3B0aW9ucyUgSU5TVEFMTERJUj0iJXRjbHRrZGlyJSIgVENMRElSPSIldGNsZGlyJSIgaW5zdGFsbC1iaW5hcmllcyBpbnN0YWxsLWxpYnJhcmllcw0KKyAgICAgICAgcG9wZA0KKyAgICApDQorICAgIGlmIG5vdCBleGlzdCAiJWJ1aWxkZGlyJXRrODZ0JXRjbF9kYmdfZXh0JS5kbGwiICgNCisgICAgICAgIHhjb3B5ICIldGNsdGtkaXIlXGJpblx0azg2dCV0Y2xfZGJnX2V4dCUuZGxsIiAiJWJ1aWxkZGlyJSINCisgICAgKQ0KKw0KKyAgICBpZiBub3QgZXhpc3QgIiV0Y2x0a2RpciVcbGliXHRpeDguNC4zXHRpeDg0JXRjbF9kYmdfZXh0JS5kbGwiICgNCisgICAgICAgIHB1c2hkICIldGl4ZGlyJVx3aW4iDQorICAgICAgICBubWFrZSAtZiBweXRob24ubWFrIERFQlVHPSVkZWJ1Z19mbGFnJSBNQUNISU5FPSVtYWNoaW5lJSBUQ0xfRElSPSIldGNsZGlyJSIgVEtfRElSPSIldGtkaXIlIiBJTlNUQUxMX0RJUj0iJXRjbHRrZGlyJSIgY2xlYW4NCisgICAgICAgIG5tYWtlIC1mIHB5dGhvbi5tYWsgREVCVUc9JWRlYnVnX2ZsYWclIE1BQ0hJTkU9JW1hY2hpbmUlIFRDTF9ESVI9IiV0Y2xkaXIlIiBUS19ESVI9IiV0a2RpciUiIElOU1RBTExfRElSPSIldGNsdGtkaXIlIiBhbGwNCisgICAgICAgIG5tYWtlIC1mIHB5dGhvbi5tYWsgREVCVUc9JWRlYnVnX2ZsYWclIE1BQ0hJTkU9JW1hY2hpbmUlIFRDTF9ESVI9IiV0Y2xkaXIlIiBUS19ESVI9IiV0a2RpciUiIElOU1RBTExfRElSPSIldGNsdGtkaXIlIiBpbnN0YWxsDQorICAgICAgICBwb3BkDQorICAgICkNCispDQorDQorcmVtIENhbGwgb24gTVNCdWlsZCB0byBkbyB0aGUgd29yaywgZWNobyB0aGUgY29tbWFuZC4NCityZW0gUGFzc2luZyAlMS05IGlzIG5vdCB0aGUgcHJlZmVycmVkIG9wdGlvbiwgYnV0IGFyZ3VtZW50IHBhcnNpbmcgaW4NCityZW0gYmF0Y2ggaXMsIHNoYWxsIHdlIHNheSwgImxhY2tsdXN0ZXIiDQorZWNobyBvbg0KK21zYnVpbGQgIiVkaXIlcGNidWlsZC5zbG4iIC90OiV0YXJnZXQlICVwYXJhbGxlbCUgJXZlcmJvc2UlIC9wOkNvbmZpZ3VyYXRpb249JWNvbmYlIC9wOlBsYXRmb3JtPSVwbGF0ZiUgJTEgJTIgJTMgJTQgJTUgJTYgJTcgJTggJTkNCmRpZmYgLS1naXQgYS9QQ2J1aWxkL2J1aWxkX2Vudi5iYXQgYi9QQ2J1aWxkL2J1aWxkX2Vudi5iYXQKaW5kZXggNGM2N2FlMy4uMDEwMjRjZiAxMDA2NDQKLS0tIGEvUENidWlsZC9idWlsZF9lbnYuYmF0CisrKyBiL1BDYnVpbGQvYnVpbGRfZW52LmJhdApAQCAtMSArMSBAQAotQCVjb21zcGVjJSAvayBlbnYuYmF0ICUqCitAJWNvbXNwZWMlIC9rIGVudi5iYXQgJSoNCmRpZmYgLS1naXQgYS9QQ2J1aWxkL2J1aWxkX3Bnby5iYXQgYi9QQ2J1aWxkL2J1aWxkX3Bnby5iYXQKaW5kZXggMGMwYTQ3My4uZDdlNGU4YiAxMDA2NDQKLS0tIGEvUENidWlsZC9idWlsZF9wZ28uYmF0CisrKyBiL1BDYnVpbGQvYnVpbGRfcGdvLmJhdApAQCAtMSw0MSArMSw0MSBAQAotQGVjaG8gb2ZmCi1yZW0gQSBiYXRjaCBwcm9ncmFtIHRvIGJ1aWxkIFBHTyAoUHJvZmlsZSBndWlkZWQgb3B0aW1pemF0aW9uKSBieSBmaXJzdAotcmVtIGJ1aWxkaW5nIGluc3RydW1lbnRlZCBiaW5hcmllcywgdGhlbiBydW5uaW5nIHRoZSB0ZXN0c3VpdGUsIGFuZAotcmVtIGZpbmFsbHkgYnVpbGRpbmcgdGhlIG9wdGltaXplZCBjb2RlLgotcmVtIE5vdGUsIGFmdGVyIHRoZSBmaXJzdCBpbnN0cnVtZW50ZWQgcnVuLCBvbmUgY2FuIGp1c3Qga2VlcCBvbgotcmVtIGJ1aWxkaW5nIHRoZSBQR1VwZGF0ZSBjb25maWd1cmF0aW9uIHdoaWxlIGRldmVsb3BpbmcuCi0KLXNldGxvY2FsCi1zZXQgcGxhdGY9V2luMzIKLQotcmVtIHVzZSB0aGUgcGVyZm9ybWFuY2UgdGVzdHN1aXRlLiAgVGhpcyBpcyBxdWljayBhbmQgc2ltcGxlCi1zZXQgam9iMT0uLlx0b29sc1xweWJlbmNoXHB5YmVuY2gucHkgLW4gMSAtQyAxIC0td2l0aC1nYwotc2V0IHBhdGgxPS4uXHRvb2xzXHB5YmVuY2gKLQotcmVtIG9yIHRoZSB3aG9sZSB0ZXN0c3VpdGUgZm9yIG1vcmUgdGhvcm91Z2ggdGVzdGluZwotc2V0IGpvYjI9Li5cbGliXHRlc3RccmVncnRlc3QucHkKLXNldCBwYXRoMj0uLlxsaWIKLQotc2V0IGpvYj0lam9iMSUKLXNldCBjbHJwYXRoPSVwYXRoMSUKLQotOkNoZWNrT3B0cwotaWYgIiUxIj09Ii1wIiAoc2V0IHBsYXRmPSUyKSAmIHNoaWZ0ICYgc2hpZnQgJiBnb3RvIENoZWNrT3B0cwotaWYgIiUxIj09Ii0yIiAoc2V0IGpvYj0lam9iMiUpICYgKHNldCBjbHJwYXRoPSVwYXRoMiUpICYgc2hpZnQgJiBnb3RvIENoZWNrT3B0cwotCi1zZXQgUEdJPSVwbGF0ZiUtcGdpCi1zZXQgUEdPPSVwbGF0ZiUtcGdvCi0KLUBlY2hvIG9uCi1yZW0gYnVpbGQgdGhlIGluc3RydW1lbnRlZCB2ZXJzaW9uCi1jYWxsIGJ1aWxkIC1wICVwbGF0ZiUgLWMgUEdJbnN0cnVtZW50Ci0KLXJlbSByZW1vdmUgLnB5YyBmaWxlcywgLnBnYyBmaWxlcyBhbmQgZXhlY3V0ZSB0aGUgam9iCi0lUEdJJVxweXRob24uZXhlIHJtcHljLnB5ICVjbHJwYXRoJQotZGVsICVQR0klXCoucGdjCi0lUEdJJVxweXRob24uZXhlICVqb2IlCi0KLXJlbSBmaW5hbGx5IGJ1aWxkIHRoZSBvcHRpbWl6ZWQgdmVyc2lvbgotaWYgZXhpc3QgJVBHTyUgZGVsIC9zIC9xICVQR08lCi1jYWxsIGJ1aWxkIC1wICVwbGF0ZiUgLWMgUEdVcGRhdGUKLQorQGVjaG8gb2ZmDQorcmVtIEEgYmF0Y2ggcHJvZ3JhbSB0byBidWlsZCBQR08gKFByb2ZpbGUgZ3VpZGVkIG9wdGltaXphdGlvbikgYnkgZmlyc3QNCityZW0gYnVpbGRpbmcgaW5zdHJ1bWVudGVkIGJpbmFyaWVzLCB0aGVuIHJ1bm5pbmcgdGhlIHRlc3RzdWl0ZSwgYW5kDQorcmVtIGZpbmFsbHkgYnVpbGRpbmcgdGhlIG9wdGltaXplZCBjb2RlLg0KK3JlbSBOb3RlLCBhZnRlciB0aGUgZmlyc3QgaW5zdHJ1bWVudGVkIHJ1biwgb25lIGNhbiBqdXN0IGtlZXAgb24NCityZW0gYnVpbGRpbmcgdGhlIFBHVXBkYXRlIGNvbmZpZ3VyYXRpb24gd2hpbGUgZGV2ZWxvcGluZy4NCisNCitzZXRsb2NhbA0KK3NldCBwbGF0Zj1XaW4zMg0KKw0KK3JlbSB1c2UgdGhlIHBlcmZvcm1hbmNlIHRlc3RzdWl0ZS4gIFRoaXMgaXMgcXVpY2sgYW5kIHNpbXBsZQ0KK3NldCBqb2IxPS4uXHRvb2xzXHB5YmVuY2hccHliZW5jaC5weSAtbiAxIC1DIDEgLS13aXRoLWdjDQorc2V0IHBhdGgxPS4uXHRvb2xzXHB5YmVuY2gNCisNCityZW0gb3IgdGhlIHdob2xlIHRlc3RzdWl0ZSBmb3IgbW9yZSB0aG9yb3VnaCB0ZXN0aW5nDQorc2V0IGpvYjI9Li5cbGliXHRlc3RccmVncnRlc3QucHkNCitzZXQgcGF0aDI9Li5cbGliDQorDQorc2V0IGpvYj0lam9iMSUNCitzZXQgY2xycGF0aD0lcGF0aDElDQorDQorOkNoZWNrT3B0cw0KK2lmICIlMSI9PSItcCIgKHNldCBwbGF0Zj0lMikgJiBzaGlmdCAmIHNoaWZ0ICYgZ290byBDaGVja09wdHMNCitpZiAiJTEiPT0iLTIiIChzZXQgam9iPSVqb2IyJSkgJiAoc2V0IGNscnBhdGg9JXBhdGgyJSkgJiBzaGlmdCAmIGdvdG8gQ2hlY2tPcHRzDQorDQorc2V0IFBHST0lcGxhdGYlLXBnaQ0KK3NldCBQR089JXBsYXRmJS1wZ28NCisNCitAZWNobyBvbg0KK3JlbSBidWlsZCB0aGUgaW5zdHJ1bWVudGVkIHZlcnNpb24NCitjYWxsIGJ1aWxkIC1wICVwbGF0ZiUgLWMgUEdJbnN0cnVtZW50DQorDQorcmVtIHJlbW92ZSAucHljIGZpbGVzLCAucGdjIGZpbGVzIGFuZCBleGVjdXRlIHRoZSBqb2INCislUEdJJVxweXRob24uZXhlIHJtcHljLnB5ICVjbHJwYXRoJQ0KK2RlbCAlUEdJJVwqLnBnYw0KKyVQR0klXHB5dGhvbi5leGUgJWpvYiUNCisNCityZW0gZmluYWxseSBidWlsZCB0aGUgb3B0aW1pemVkIHZlcnNpb24NCitpZiBleGlzdCAlUEdPJSBkZWwgL3MgL3EgJVBHTyUNCitjYWxsIGJ1aWxkIC1wICVwbGF0ZiUgLWMgUEdVcGRhdGUNCisNCmRpZmYgLS1naXQgYS9QQ2J1aWxkL2J1aWxkX3NzbC5iYXQgYi9QQ2J1aWxkL2J1aWxkX3NzbC5iYXQKaW5kZXggMzU3YjA4Yi4uMjk3NWI4ZCAxMDA2NDQKLS0tIGEvUENidWlsZC9idWlsZF9zc2wuYmF0CisrKyBiL1BDYnVpbGQvYnVpbGRfc3NsLmJhdApAQCAtMSwxMiArMSwxMiBAQAotQGVjaG8gb2ZmCi1pZiBub3QgZGVmaW5lZCBIT1NUX1BZVEhPTiAoCi0gIGlmICUxIEVRVSBEZWJ1ZyAoCi0gICAgc2V0IEhPU1RfUFlUSE9OPXB5dGhvbl9kLmV4ZQotICAgIGlmIG5vdCBleGlzdCBweXRob24zM19kLmRsbCBleGl0IDEKLSAgKSBFTFNFICgKLSAgICBzZXQgSE9TVF9QWVRIT049cHl0aG9uLmV4ZQotICAgIGlmIG5vdCBleGlzdCBweXRob24zMy5kbGwgZXhpdCAxCi0gICkKLSkKLSVIT1NUX1BZVEhPTiUgYnVpbGRfc3NsLnB5ICUxICUyICUzCi0KK0BlY2hvIG9mZg0KK2lmIG5vdCBkZWZpbmVkIEhPU1RfUFlUSE9OICgNCisgIGlmICUxIEVRVSBEZWJ1ZyAoDQorICAgIHNldCBIT1NUX1BZVEhPTj1weXRob25fZC5leGUNCisgICAgaWYgbm90IGV4aXN0IHB5dGhvbjM0X2QuZGxsIGV4aXQgMQ0KKyAgKSBFTFNFICgNCisgICAgc2V0IEhPU1RfUFlUSE9OPXB5dGhvbi5leGUNCisgICAgaWYgbm90IGV4aXN0IHB5dGhvbjM0LmRsbCBleGl0IDENCisgICkNCispDQorJUhPU1RfUFlUSE9OJSBidWlsZF9zc2wucHkgJTEgJTIgJTMNCisNCmRpZmYgLS1naXQgYS9QQ2J1aWxkL2J1aWxkX3NzbC5weSBiL1BDYnVpbGQvYnVpbGRfc3NsLnB5CmluZGV4IDVhN2E4OWUuLjdhZWU3MTUgMTAwNjQ0Ci0tLSBhL1BDYnVpbGQvYnVpbGRfc3NsLnB5CisrKyBiL1BDYnVpbGQvYnVpbGRfc3NsLnB5CkBAIC0yNCw2ICsyNCw3IEBACiAjIHB5dGhvbi5leGUgYnVpbGRfc3NsLnB5IFJlbGVhc2UgV2luMzIKIAogaW1wb3J0IG9zLCBzeXMsIHJlLCBzaHV0aWwKK2ltcG9ydCBzdWJwcm9jZXNzCiAKICMgRmluZCBhbGwgImZvby5leGUiIGZpbGVzIG9uIHRoZSBQQVRILgogZGVmIGZpbmRfYWxsX29uX3BhdGgoZmlsZW5hbWUsIGV4dHJhcyA9IE5vbmUpOgpAQCAtNDYsMjkgKzQ3LDI4IEBACiAjIGlzIGF2YWlsYWJsZS4KIGRlZiBmaW5kX3dvcmtpbmdfcGVybChwZXJscyk6CiAgICAgZm9yIHBlcmwgaW4gcGVybHM6Ci0gICAgICAgIGZoID0gb3MucG9wZW4oJyIlcyIgLWUgInVzZSBXaW4zMjsiJyAlIHBlcmwpCi0gICAgICAgIGZoLnJlYWQoKQotICAgICAgICByYyA9IGZoLmNsb3NlKCkKLSAgICAgICAgaWYgcmM6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KFtwZXJsLCAiLWUiLCAidXNlIFdpbjMyOyJdKQorICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3I6CiAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICByZXR1cm4gcGVybAotICAgIHByaW50KCJDYW4gbm90IGZpbmQgYSBzdWl0YWJsZSBQRVJMOiIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gcGVybAorCiAgICAgaWYgcGVybHM6Ci0gICAgICAgIHByaW50KCIgdGhlIGZvbGxvd2luZyBwZXJsIGludGVycHJldGVycyB3ZXJlIGZvdW5kOiIpCisgICAgICAgIHByaW50KCJUaGUgZm9sbG93aW5nIHBlcmwgaW50ZXJwcmV0ZXJzIHdlcmUgZm91bmQ6IikKICAgICAgICAgZm9yIHAgaW4gcGVybHM6CiAgICAgICAgICAgICBwcmludCgiICIsIHApCiAgICAgICAgIHByaW50KCIgTm9uZSBvZiB0aGVzZSB2ZXJzaW9ucyBhcHBlYXIgc3VpdGFibGUgZm9yIGJ1aWxkaW5nIE9wZW5TU0wiKQogICAgIGVsc2U6Ci0gICAgICAgIHByaW50KCIgTk8gcGVybCBpbnRlcnByZXRlcnMgd2VyZSBmb3VuZCBvbiB0aGlzIG1hY2hpbmUgYXQgYWxsISIpCisgICAgICAgIHByaW50KCJOTyBwZXJsIGludGVycHJldGVycyB3ZXJlIGZvdW5kIG9uIHRoaXMgbWFjaGluZSBhdCBhbGwhIikKICAgICBwcmludCgiIFBsZWFzZSBpbnN0YWxsIEFjdGl2ZVBlcmwgYW5kIGVuc3VyZSBpdCBhcHBlYXJzIG9uIHlvdXIgcGF0aCIpCi0gICAgcmV0dXJuIE5vbmUKIAogIyBGZXRjaCBTU0wgZGlyZWN0b3J5IGZyb20gVkMgcHJvcGVydGllcwogZGVmIGdldF9zc2xfZGlyKCk6CiAgICAgcHJvcGZpbGUgPSAob3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICdweXByb2plY3QucHJvcHMnKSkKLSAgICB3aXRoIG9wZW4ocHJvcGZpbGUpIGFzIGY6CisgICAgd2l0aCBvcGVuKHByb3BmaWxlLCBlbmNvZGluZz0ndXRmLTgtc2lnJykgYXMgZjoKICAgICAgICAgbSA9IHJlLnNlYXJjaCgnb3BlbnNzbC0oW148XSspPCcsIGYucmVhZCgpKQotICAgICAgICByZXR1cm4gIi4uXC4uXG9wZW5zc2wtIittLmdyb3VwKDEpCisgICAgICAgIHJldHVybiAiLi5cZXh0ZXJuYWxzXG9wZW5zc2wtIittLmdyb3VwKDEpCiAKIAogZGVmIGNyZWF0ZV9tYWtlZmlsZTY0KG1ha2VmaWxlLCBtMzIpOgpAQCAtMTcwLDcgKzE3MCwxMSBAQAogICAgICAgICBtYWtlX2ZsYWdzID0gIi1hIgogICAgICMgcGVybCBzaG91bGQgYmUgb24gdGhlIHBhdGgsIGJ1dCB3ZSBhbHNvIGxvb2sgaW4gIlxwZXJsIiBhbmQgImM6XFxwZXJsIgogICAgICMgYXMgIndlbGwga25vd24iIGxvY2F0aW9ucwotICAgIHBlcmxzID0gZmluZF9hbGxfb25fcGF0aCgicGVybC5leGUiLCBbIlxccGVybFxcYmluIiwgIkM6XFxwZXJsXFxiaW4iXSkKKyAgICBwZXJscyA9IGZpbmRfYWxsX29uX3BhdGgoInBlcmwuZXhlIiwgW3IiXHBlcmxcYmluIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIiQzpccGVybFxiaW4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciJccGVybDY0XGJpbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByIkM6XHBlcmw2NFxiaW4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKQogICAgIHBlcmwgPSBmaW5kX3dvcmtpbmdfcGVybChwZXJscykKICAgICBpZiBwZXJsOgogICAgICAgICBwcmludCgiRm91bmQgYSB3b3JraW5nIHBlcmwgYXQgJyVzJyIgJSAocGVybCwpKQpAQCAtMTgyLDYgKzE4NiwxOCBAQAogICAgIGlmIHNzbF9kaXIgaXMgTm9uZToKICAgICAgICAgc3lzLmV4aXQoMSkKIAorICAgICMgYWRkIG91ciBjb3B5IG9mIE5BU00gdG8gUEFUSC4gIEl0IHdpbGwgYmUgb24gdGhlIHNhbWUgbGV2ZWwgYXMgb3BlbnNzbAorICAgIGZvciBkaXIgaW4gb3MubGlzdGRpcihvcy5wYXRoLmpvaW4oc3NsX2Rpciwgb3MucGFyZGlyKSk6CisgICAgICAgIGlmIGRpci5zdGFydHN3aXRoKCduYXNtJyk6CisgICAgICAgICAgICBuYXNtX2RpciA9IG9zLnBhdGguam9pbihzc2xfZGlyLCBvcy5wYXJkaXIsIGRpcikKKyAgICAgICAgICAgIG5hc21fZGlyID0gb3MucGF0aC5hYnNwYXRoKG5hc21fZGlyKQorICAgICAgICAgICAgb2xkX3BhdGggPSBvcy5lbnZpcm9uWydQQVRIJ10KKyAgICAgICAgICAgIG9zLmVudmlyb25bJ1BBVEgnXSA9IG9zLnBhdGhzZXAuam9pbihbbmFzbV9kaXIsIG9sZF9wYXRoXSkKKyAgICAgICAgICAgIGJyZWFrCisgICAgZWxzZToKKyAgICAgICAgcHJpbnQoJ05BU00gd2FzIG5vdCBmb3VuZCwgbWFrZSBzdXJlIGl0IGlzIG9uIFBBVEgnKQorCisKICAgICBvbGRfY2QgPSBvcy5nZXRjd2QoKQogICAgIHRyeToKICAgICAgICAgb3MuY2hkaXIoc3NsX2RpcikKZGlmZiAtLWdpdCBhL1BDYnVpbGQvYnVpbGRfdGtpbnRlci5weSBiL1BDYnVpbGQvYnVpbGRfdGtpbnRlci5weQppbmRleCA0MTk2Y2YzLi5jODA3ZTdiIDEwMDY0NAotLS0gYS9QQ2J1aWxkL2J1aWxkX3RraW50ZXIucHkKKysrIGIvUENidWlsZC9idWlsZF90a2ludGVyLnB5CkBAIC0xMSwxNiArMTEsMTIgQEAKIGhlcmUgPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSkKIHBhciA9IG9zLnBhdGgucGFyZGlyCiAKLVRDTCA9ICJ0Y2w4LjUuMTEiCi1USyA9ICJ0azguNS4xMSIKLVRJWCA9ICJ0aXgtOC40LjMueCIKK1RDTCA9ICJ0Y2w4LjYuMSIKK1RLID0gInRrOC42LjEiCitUSVggPSAidGl4LTguNC4zLjMiCiAKIFJPT1QgPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKGhlcmUsIHBhciwgcGFyKSkKLSMgV2luZG93cyAyMDAwIGNvbXBhdGliaWxpdHk6IFdJTlZFUiAweDA1MDAKLSMgaHR0cDovL21zZG4yLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9hYTM4Mzc0NS5hc3B4Ci1OTUFLRSA9ICgnbm1ha2UgL25vbG9nbyAvZiAlcyAnCi0gICAgJ0NPTVBJTEVSRkxBR1M9XCItRFdJTlZFUj0weDA1MDAgLURfV0lOMzJfV0lOTlQ9MHgwNTAwIC1ETlRERElfVkVSU0lPTj1OVERESV9XSU4yS1NQNFwiICcKLSAgICAnJXMgJXMnKQorTk1BS0UgPSAoJ25tYWtlIC9ub2xvZ28gL2YgJXMgJXMgJXMnKQogCiBkZWYgbm1ha2UobWFrZWZpbGUsIGNvbW1hbmQ9IiIsICoqa3cpOgogICAgIGRlZmluZXMgPSAnICcuam9pbihrKyc9JytzdHIodikgZm9yIGssIHYgaW4ga3cuaXRlbXMoKSkKZGlmZiAtLWdpdCBhL1BDYnVpbGQvZW52LmJhdCBiL1BDYnVpbGQvZW52LmJhdAppbmRleCAwOGRjOGVmLi4wMTcwYmNlIDEwMDY0NAotLS0gYS9QQ2J1aWxkL2Vudi5iYXQKKysrIGIvUENidWlsZC9lbnYuYmF0CkBAIC0xLDkgKzEsNCBAQAotQGVjaG8gb2ZmCi1zZXQgVlMxMD0lUHJvZ3JhbUZpbGVzKHg4NiklXE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIDEwLjAKLUlGIEVYSVNUICIlVlMxMCUiIEdPVE8gb2sKLXNldCBWUzEwPSVQcm9ncmFtRmlsZXMlXE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIDEwLjAKLTpvawotCi1lY2hvIEJ1aWxkIGVudmlyb25tZW50czogeDg2LCBpYTY0LCBhbWQ2NCwgeDg2X2FtZDY0LCB4ODZfaWE2NAotZWNoby4KLWNhbGwgIiVWUzEwJVxWQ1x2Y3ZhcnNhbGwuYmF0IiAlMQorQGVjaG8gb2ZmDQorZWNobyBCdWlsZCBlbnZpcm9ubWVudHM6IHg4NiwgaWE2NCwgYW1kNjQsIHg4Nl9hbWQ2NCwgeDg2X2lhNjQNCitlY2hvLg0KK2NhbGwgIiVWUzEwMENPTU5UT09MUyUuLlwuLlxWQ1x2Y3ZhcnNhbGwuYmF0IiAlKg0KZGlmZiAtLWdpdCBhL1BDYnVpbGQvZ2V0X2V4dGVybmFscy5iYXQgYi9QQ2J1aWxkL2dldF9leHRlcm5hbHMuYmF0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiOGYwYjgKLS0tIC9kZXYvbnVsbAorKysgYi9QQ2J1aWxkL2dldF9leHRlcm5hbHMuYmF0CkBAIC0wLDAgKzEsMTAzIEBACitAZWNobyBvZmYNCitzZXRsb2NhbA0KK3JlbSBTaW1wbGUgc2NyaXB0IHRvIGZldGNoIHNvdXJjZSBmb3IgZXh0ZXJuYWwgbGlicmFyaWVzDQorDQoraWYgbm90IGV4aXN0ICIlfmRwMC4uXGV4dGVybmFscyIgbWtkaXIgIiV+ZHAwLi5cZXh0ZXJuYWxzIg0KK3B1c2hkICIlfmRwMC4uXGV4dGVybmFscyINCisNCitpZiAiJVNWTlJPT1QlIj09IiIgc2V0IFNWTlJPT1Q9aHR0cDovL3N2bi5weXRob24ub3JnL3Byb2plY3RzL2V4dGVybmFsLw0KKw0KK3JlbSBPcHRpb25hbGx5IGNsZWFuIHVwIGZpcnN0LiAgQmUgd2FybmVkIHRoYXQgdGhpcyBjYW4gYmUgdmVyeSBkZXN0cnVjdGl2ZSENCitpZiBub3QgIiUxIj09IiIgKA0KKyAgICBmb3IgJSVjIGluICgtYyAtLWNsZWFuIC0tY2xlYW4tb25seSkgZG8gKA0KKyAgICAgICAgaWYgIiUxIj09IiUlYyIgZ290byBjbGVhbg0KKyAgICApDQorICAgIGdvdG8gdXNhZ2UNCispDQorZ290byBmZXRjaA0KKw0KKzpjbGVhbg0KK2VjaG8uQ2xlYW5pbmcgdXAgZXh0ZXJuYWwgbGlicmFyaWVzLg0KK2ZvciAvRCAlJWQgaW4gKA0KKyAgICAgICAgICAgICAgIGJ6aXAyLSoNCisgICAgICAgICAgICAgICBkYi0qDQorICAgICAgICAgICAgICAgbmFzbS0qDQorICAgICAgICAgICAgICAgb3BlbnNzbC0qDQorICAgICAgICAgICAgICAgdGNsLSoNCisgICAgICAgICAgICAgICB0Y2x0ayoNCisgICAgICAgICAgICAgICB0ay0qDQorICAgICAgICAgICAgICAgdGl4LSoNCisgICAgICAgICAgICAgICBzcWxpdGUtKg0KKyAgICAgICAgICAgICAgIHh6LSoNCisgICAgICAgICAgICAgICApIGRvICgNCisgICAgZWNoby5SZW1vdmluZyAlJWQNCisgICAgcm1kaXIgL3MgL3EgJSVkDQorKQ0KK2lmICIlMSI9PSItLWNsZWFuLW9ubHkiICgNCisgICAgZ290byBlbmQNCispDQorDQorOmZldGNoDQorcmVtIEZldGNoIGN1cnJlbnQgdmVyc2lvbnMNCisNCitzdm4gLS12ZXJzaW9uID4gbnVsIDI+JjENCitpZiBFUlJPUkxFVkVMIDkwMDkgKA0KKyAgICBlY2hvLnN2bi5leGUgbXVzdCBiZSBvbiB5b3VyIFBBVEguDQorICAgIGVjaG8uVHJ5IFRvcnRvaXNlU1ZOIChodHRwOi8vdG9ydG9pc2Vzdm4ubmV0L14pIGFuZCBiZSBzdXJlIHRvIGNoZWNrIHRoZQ0KKyAgICBlY2hvLmNvbW1hbmQgbGluZSB0b29scyBvcHRpb24uDQorICAgIHBvcGQNCisgICAgZXhpdCAvYiAxDQorKQ0KKw0KK2VjaG8uRmV0Y2hpbmcgZXh0ZXJuYWwgbGlicmFyaWVzLi4uDQorDQorZm9yICUlZSBpbiAoDQorICAgICAgICAgICAgYnppcDItMS4wLjYNCisgICAgICAgICAgICBuYXNtLTIuMTEuMDYNCisgICAgICAgICAgICBvcGVuc3NsLTEuMC4yZA0KKyAgICAgICAgICAgIHRjbC04LjYuMS4wDQorICAgICAgICAgICAgdGstOC42LjEuMA0KKyAgICAgICAgICAgIHRpeC04LjQuMy40DQorICAgICAgICAgICAgc3FsaXRlLTMuOC4xMS4wDQorICAgICAgICAgICAgeHotNS4wLjUNCisgICAgICAgICAgICApIGRvICgNCisgICAgaWYgZXhpc3QgJSVlICgNCisgICAgICAgIGVjaG8uJSVlIGFscmVhZHkgZXhpc3RzLCBza2lwcGluZy4NCisgICAgKSBlbHNlICgNCisgICAgICAgIGVjaG8uRmV0Y2hpbmcgJSVlLi4uDQorICAgICAgICBzdm4gZXhwb3J0ICVTVk5ST09UJSUlZQ0KKyAgICApDQorKQ0KKw0KK2dvdG8gZW5kDQorDQorOnVzYWdlDQorZWNoby5pbnZhbGlkIGFyZ3VtZW50OiAlMQ0KK2VjaG8udXNhZ2U6ICV+bjAgW1sgLWMgXnwgLS1jbGVhbiBdIF58IC0tY2xlYW4tb25seSBdDQorZWNoby4NCitlY2hvLlB1bGwgYWxsIHNvdXJjZXMgbmVjZXNzYXJ5IGZvciBjb21waWxpbmcgb3B0aW9uYWwgZXh0ZW5zaW9uIG1vZHVsZXMNCitlY2hvLnRoYXQgcmVseSBvbiBleHRlcm5hbCBsaWJyYXJpZXMuICBSZXF1aXJlcyBzdm4uZXhlIHRvIGJlIG9uIHlvdXIgUEFUSA0KK2VjaG8uYW5kIHB1bGxzIHNvdXJjZXMgZnJvbSAlU1ZOUk9PVCUuDQorZWNoby4NCitlY2hvLlVzZSB0aGUgLWMgb3IgLS1jbGVhbiBvcHRpb24gdG8gY2xlYW4gdXAgYWxsIGV4dGVybmFsIGxpYnJhcnkgc291cmNlcw0KK2VjaG8uYmVmb3JlIHB1bGxpbmcgaW4gdGhlIGN1cnJlbnQgdmVyc2lvbnMuDQorZWNoby4NCitlY2hvLlVzZSB0aGUgLS1jbGVhbi1vbmx5IG9wdGlvbiB0byBkbyB0aGUgc2FtZSBjbGVhbmluZywgd2l0aG91dCBwdWxsaW5nIGluDQorZWNoby5hbnl0aGluZyBuZXcuDQorZWNoby4NCitlY2hvLk9ubHkgdGhlIGZpcnN0IGFyZ3VtZW50IGlzIGNoZWNrZWQsIGFsbCBvdGhlcnMgYXJlIGlnbm9yZWQuDQorZWNoby4NCitlY2hvLioqV0FSTklORyoqOiB0aGUgY2xlYW5pbmcgb3B0aW9ucyB1bmNvbmRpdGlvbmFsbHkgcmVtb3ZlIGFueSBkaXJlY3RvcnkNCitlY2hvLnRoYXQgaXMgYSBjaGlsZCBvZg0KK2VjaG8uICAgJUNEJQ0KK2VjaG8uYW5kIG1hdGNoZXMgd2lsZGNhcmQgcGF0dGVybnMgYmVnaW5uaW5nIHdpdGggYnppcDItLCBkYi0sIG5hc20tLCBvcGVuc3NsLSwNCitlY2hvLnRjbC0sIHRjbHRrLCB0ay0sIHRpeC0sIHNxbGl0ZS0sIG9yIHh6LSwgYW5kIGFzIHN1Y2ggaGFzIHRoZSBwb3RlbnRpYWwNCitlY2hvLnRvIGJlIHZlcnkgZGVzdHJ1Y3RpdmUgaWYgeW91IGFyZSBub3QgYXdhcmUgb2Ygd2hhdCBpdCBpcyBkb2luZy4gIFVzZSB3aXRoDQorZWNoby5jYXV0aW9uIQ0KK3BvcGQNCitleGl0IC9iIC0xDQorDQorDQorOmVuZA0KK2VjaG8gRmluaXNoZWQuDQorcG9wZA0KZGlmZiAtLWdpdCBhL1BDYnVpbGQvaWRsZS5iYXQgYi9QQ2J1aWxkL2lkbGUuYmF0CmluZGV4IGRjYjA0ODUuLjVhYjE1ZjUgMTAwNjQ0Ci0tLSBhL1BDYnVpbGQvaWRsZS5iYXQKKysrIGIvUENidWlsZC9pZGxlLmJhdApAQCAtMSwxNSArMSwxNSBAQAotQGVjaG8gb2ZmCi1yZW0gc3RhcnQgaWRsZQotcmVtIFVzYWdlOiAgaWRsZSBbLWRdCi1yZW0gLWQgICBSdW4gRGVidWcgYnVpbGQgKHB5dGhvbl9kLmV4ZSkuICBFbHNlIHJlbGVhc2UgYnVpbGQuCi0KLXNldGxvY2FsCi1zZXQgZXhlPXB5dGhvbgotUEFUSCAlUEFUSCU7Li5cLi5cdGNsdGtcYmluCi0KLWlmICIlMSI9PSItZCIgKHNldCBleGU9cHl0aG9uX2QpICYgc2hpZnQKLQotc2V0IGNtZD0lZXhlJSAuLi9MaWIvaWRsZWxpYi9pZGxlLnB5ICUxICUyICUzICU0ICU1ICU2ICU3ICU4ICU5Ci0KLWVjaG8gb24KLSVjbWQlCitAZWNobyBvZmYNCityZW0gc3RhcnQgaWRsZQ0KK3JlbSBVc2FnZTogIGlkbGUgWy1kXQ0KK3JlbSAtZCAgIFJ1biBEZWJ1ZyBidWlsZCAocHl0aG9uX2QuZXhlKS4gIEVsc2UgcmVsZWFzZSBidWlsZC4NCisNCitzZXRsb2NhbA0KK3NldCBleGU9cHl0aG9uDQorUEFUSCAlUEFUSCU7Li5cLi5cdGNsdGtcYmluDQorDQoraWYgIiUxIj09Ii1kIiAoc2V0IGV4ZT1weXRob25fZCkgJiBzaGlmdA0KKw0KK3NldCBjbWQ9JWV4ZSUgLi4vTGliL2lkbGVsaWIvaWRsZS5weSAlMSAlMiAlMyAlNCAlNSAlNiAlNyAlOCAlOQ0KKw0KK2VjaG8gb24NCislY21kJQ0KZGlmZiAtLWdpdCBhL1BDYnVpbGQva2lsbF9weXRob24uYyBiL1BDYnVpbGQva2lsbF9weXRob24uYwppbmRleCBiYjMyM2QzLi42NjZlMWIwIDEwMDY0NAotLS0gYS9QQ2J1aWxkL2tpbGxfcHl0aG9uLmMKKysrIGIvUENidWlsZC9raWxsX3B5dGhvbi5jCkBAIC0xMDYsOSArMTA2LDkgQEAKICAgICAgICAgLyoKICAgICAgICAgICogWFhYIFRPRE86IGlmIHdlIHJlYWxseSB3YW50ZWQgdG8gYmUgZmFuY3ksIHdlIGNvdWxkIGNoZWNrIHRoZSAKICAgICAgICAgICogbW9kdWxlcyBmb3IgYWxsIHByb2Nlc3NlcyAobm90IGp1c3QgdGhlIHB5dGhvbltfZF0uZXhlIG9uZXMpCi0gICAgICAgICAqIGFuZCBzZWUgaWYgYW55IG9mIG91ciBETExzIGFyZSBsb2FkZWQgKGkuZS4gcHl0aG9uMzNbX2RdLmRsbCksCisgICAgICAgICAqIGFuZCBzZWUgaWYgYW55IG9mIG91ciBETExzIGFyZSBsb2FkZWQgKGkuZS4gcHl0aG9uMzRbX2RdLmRsbCksCiAgICAgICAgICAqIGFzIHRoYXQgd291bGQgYWxzbyBpbmhpYml0IG91ciBhYmlsaXR5IHRvIHJlYnVpbGQgdGhlIHNvbHV0aW9uLgotICAgICAgICAgKiBOb3Qgd29ydGggbG9vc2luZyBzbGVlcCBvdmVyIHRob3VnaDsgZm9yIG5vdywgYSBzaW1wbGUgY2hlY2sgCisgICAgICAgICAqIE5vdCB3b3J0aCBsb3Npbmcgc2xlZXAgb3ZlciB0aG91Z2g7IGZvciBub3csIGEgc2ltcGxlIGNoZWNrCiAgICAgICAgICAqIGZvciBqdXN0IHRoZSBweXRob24gZXhlY3V0YWJsZSBzaG91bGQgYmUgc3VmZmljaWVudC4KICAgICAgICAgICovCiAKZGlmZiAtLWdpdCBhL1BDYnVpbGQvcGNidWlsZC5zbG4gYi9QQ2J1aWxkL3BjYnVpbGQuc2xuCmluZGV4IGQ2YTAyMmYuLmEzNDZlMTAgMTAwNjQ0Ci0tLSBhL1BDYnVpbGQvcGNidWlsZC5zbG4KKysrIGIvUENidWlsZC9wY2J1aWxkLnNsbgpAQCAtMTQsOCArMTQsNiBAQAogRW5kUHJvamVjdA0KIFByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAicHl0aG9udyIsICJweXRob253LnZjeHByb2oiLCAie0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0iDQogRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAidzl4cG9wZW4iLCAidzl4cG9wZW4udmN4cHJvaiIsICJ7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fSINCi1FbmRQcm9qZWN0DQogUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJtYWtlX2J1aWxkaW5mbyIsICJtYWtlX2J1aWxkaW5mby52Y3hwcm9qIiwgIntDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9Ig0KIEVuZFByb2plY3QNCiBQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIndpbnNvdW5kIiwgIndpbnNvdW5kLnZjeHByb2oiLCAiezI4QjVENzc3LURERjItNEI2Qi1CMzRGLTMxRDkzODgxMzg1Nn0iDQpAQCAtMzgsNiArMzYsOCBAQAogRW5kUHJvamVjdA0KIFByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiX3Rlc3RjYXBpIiwgIl90ZXN0Y2FwaS52Y3hwcm9qIiwgIns2OTAxRDkxQy02RTQ4LTRCQjctOUZFQy03MDBDODEzMURGMUR9Ig0KIEVuZFByb2plY3QNCitQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIl90ZXN0aW1wb3J0bXVsdGlwbGUiLCAiX3Rlc3RpbXBvcnRtdWx0aXBsZS52Y3hwcm9qIiwgInszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9Ig0KK0VuZFByb2plY3QNCiBQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIl90a2ludGVyIiwgIl90a2ludGVyLnZjeHByb2oiLCAiezQ5NDZFQ0FDLTJFNjktNEJGOC1BOTBBLUY1MTM2RjUwOTRERn0iDQogRW5kUHJvamVjdA0KIFByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiX2J6MiIsICJfYnoyLnZjeHByb2oiLCAiezczRkNEMkJELUYxMzMtNDZCNy04RUMxLTE0NENEODJBNTlENX0iDQpAQCAtNzQsNiArNzQsMTAgQEAKIEVuZFByb2plY3QNCiBQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIl9mcmVlemVfaW1wb3J0bGliIiwgIl9mcmVlemVfaW1wb3J0bGliLnZjeHByb2oiLCAiezE5QzBDMTNGLTQ3Q0EtNDQzMi1BRkYzLTc5OUEyOTZBNEREQ30iDQogRW5kUHJvamVjdA0KK1Byb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiX292ZXJsYXBwZWQiLCAiX292ZXJsYXBwZWQudmN4cHJvaiIsICJ7RUI2RTY5REQtMDRCRi00NTQzLTlCOTItNDlGQUFCQ0VBQzJFfSINCitFbmRQcm9qZWN0DQorUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJfdGVzdGVtYmVkIiwgIl90ZXN0ZW1iZWQudmN4cHJvaiIsICJ7NkRBQzY2RDktRTcwMy00NjI0LUJFMDMtNDkxMTJBQjVBQTYyfSINCitFbmRQcm9qZWN0DQogR2xvYmFsDQogCUdsb2JhbFNlY3Rpb24oU29sdXRpb25Db25maWd1cmF0aW9uUGxhdGZvcm1zKSA9IHByZVNvbHV0aW9uDQogCQlEZWJ1Z3xXaW4zMiA9IERlYnVnfFdpbjMyDQpAQCAtMTUwLDIyICsxNTQsNiBAQAogCQl7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQogCQl7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KIAkJe0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQotCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQotCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8V2luMzINCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFBHVXBkYXRlfHg2NA0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBQR1VwZGF0ZXx4NjQNCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KIAkJe0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KIAkJe0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0uRGVidWd8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCiAJCXtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQpAQCAtMzQyLDYgKzMzMCwyMiBAQAogCQl7NjkwMUQ5MUMtNkU0OC00QkI3LTlGRUMtNzAwQzgxMzFERjFEfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQogCQl7NjkwMUQ5MUMtNkU0OC00QkI3LTlGRUMtNzAwQzgxMzFERjFEfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KIAkJezY5MDFEOTFDLTZFNDgtNEJCNy05RkVDLTcwMEM4MTMxREYxRH0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQorCQl7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KKwkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQorCQl7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQorCQl7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KKwkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KKwkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8V2luMzINCisJCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fHg2NA0KKwkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUEdJbnN0cnVtZW50fHg2NA0KKwkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8V2luMzINCisJCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBQR1VwZGF0ZXxXaW4zMg0KKwkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFBHVXBkYXRlfHg2NA0KKwkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBQR1VwZGF0ZXx4NjQNCisJCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KKwkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KKwkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCisJCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KIAkJezQ5NDZFQ0FDLTJFNjktNEJGOC1BOTBBLUY1MTM2RjUwOTRERn0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCiAJCXs0OTQ2RUNBQy0yRTY5LTRCRjgtQTkwQS1GNTEzNkY1MDk0REZ9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KIAkJezQ5NDZFQ0FDLTJFNjktNEJGOC1BOTBBLUY1MTM2RjUwOTRERn0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KQEAgLTYxMSw2ICs2MTUsMzYgQEAKIAkJezE5QzBDMTNGLTQ3Q0EtNDQzMi1BRkYzLTc5OUEyOTZBNEREQ30uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCiAJCXsxOUMwQzEzRi00N0NBLTQ0MzItQUZGMy03OTlBMjk2QTREREN9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KIAkJezE5QzBDMTNGLTQ3Q0EtNDQzMi1BRkYzLTc5OUEyOTZBNEREQ30uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCisJCXtFQjZFNjlERC0wNEJGLTQ1NDMtOUI5Mi00OUZBQUJDRUFDMkV9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQorCQl7RUI2RTY5REQtMDRCRi00NTQzLTlCOTItNDlGQUFCQ0VBQzJFfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCisJCXtFQjZFNjlERC0wNEJGLTQ1NDMtOUI5Mi00OUZBQUJDRUFDMkV9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCisJCXtFQjZFNjlERC0wNEJGLTQ1NDMtOUI5Mi00OUZBQUJDRUFDMkV9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0DQorCQl7RUI2RTY5REQtMDRCRi00NTQzLTlCOTItNDlGQUFCQ0VBQzJFfS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fFdpbjMyDQorCQl7RUI2RTY5REQtMDRCRi00NTQzLTlCOTItNDlGQUFCQ0VBQzJFfS5QR0luc3RydW1lbnR8V2luMzIuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KKwkJe0VCNkU2OURELTA0QkYtNDU0My05QjkyLTQ5RkFBQkNFQUMyRX0uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8eDY0DQorCQl7RUI2RTY5REQtMDRCRi00NTQzLTlCOTItNDlGQUFCQ0VBQzJFfS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8eDY0DQorCQl7RUI2RTY5REQtMDRCRi00NTQzLTlCOTItNDlGQUFCQ0VBQzJFfS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBQR1VwZGF0ZXxXaW4zMg0KKwkJe0VCNkU2OURELTA0QkYtNDU0My05QjkyLTQ5RkFBQkNFQUMyRX0uUEdVcGRhdGV8V2luMzIuQnVpbGQuMCA9IFBHVXBkYXRlfFdpbjMyDQorCQl7RUI2RTY5REQtMDRCRi00NTQzLTlCOTItNDlGQUFCQ0VBQzJFfS5QR1VwZGF0ZXx4NjQuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8eDY0DQorCQl7RUI2RTY5REQtMDRCRi00NTQzLTlCOTItNDlGQUFCQ0VBQzJFfS5QR1VwZGF0ZXx4NjQuQnVpbGQuMCA9IFBHVXBkYXRlfHg2NA0KKwkJe0VCNkU2OURELTA0QkYtNDU0My05QjkyLTQ5RkFBQkNFQUMyRX0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQorCQl7RUI2RTY5REQtMDRCRi00NTQzLTlCOTItNDlGQUFCQ0VBQzJFfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQorCQl7RUI2RTY5REQtMDRCRi00NTQzLTlCOTItNDlGQUFCQ0VBQzJFfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KKwkJe0VCNkU2OURELTA0QkYtNDU0My05QjkyLTQ5RkFBQkNFQUMyRX0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQorCQl7NkRBQzY2RDktRTcwMy00NjI0LUJFMDMtNDkxMTJBQjVBQTYyfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KKwkJezZEQUM2NkQ5LUU3MDMtNDYyNC1CRTAzLTQ5MTEyQUI1QUE2Mn0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQorCQl7NkRBQzY2RDktRTcwMy00NjI0LUJFMDMtNDkxMTJBQjVBQTYyfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQorCQl7NkRBQzY2RDktRTcwMy00NjI0LUJFMDMtNDkxMTJBQjVBQTYyfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KKwkJezZEQUM2NkQ5LUU3MDMtNDYyNC1CRTAzLTQ5MTEyQUI1QUE2Mn0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCisJCXs2REFDNjZEOS1FNzAzLTQ2MjQtQkUwMy00OTExMkFCNUFBNjJ9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCisJCXs2REFDNjZEOS1FNzAzLTQ2MjQtQkUwMy00OTExMkFCNUFBNjJ9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCisJCXs2REFDNjZEOS1FNzAzLTQ2MjQtQkUwMy00OTExMkFCNUFBNjJ9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQorCQl7NkRBQzY2RDktRTcwMy00NjI0LUJFMDMtNDkxMTJBQjVBQTYyfS5QR1VwZGF0ZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCisJCXs2REFDNjZEOS1FNzAzLTQ2MjQtQkUwMy00OTExMkFCNUFBNjJ9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCisJCXs2REFDNjZEOS1FNzAzLTQ2MjQtQkUwMy00OTExMkFCNUFBNjJ9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KKwkJezZEQUM2NkQ5LUU3MDMtNDYyNC1CRTAzLTQ5MTEyQUI1QUE2Mn0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KKwkJezZEQUM2NkQ5LUU3MDMtNDYyNC1CRTAzLTQ5MTEyQUI1QUE2Mn0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCisJCXs2REFDNjZEOS1FNzAzLTQ2MjQtQkUwMy00OTExMkFCNUFBNjJ9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KIAlFbmRHbG9iYWxTZWN0aW9uDQogCUdsb2JhbFNlY3Rpb24oU29sdXRpb25Qcm9wZXJ0aWVzKSA9IHByZVNvbHV0aW9uDQogCQlIaWRlU29sdXRpb25Ob2RlID0gRkFMU0UNCmRpZmYgLS1naXQgYS9QQ2J1aWxkL3B5cHJvamVjdC5wcm9wcyBiL1BDYnVpbGQvcHlwcm9qZWN0LnByb3BzCmluZGV4IDgxNTUyMzEuLjAzNDEzNjggMTAwNjQ0Ci0tLSBhL1BDYnVpbGQvcHlwcm9qZWN0LnByb3BzCisrKyBiL1BDYnVpbGQvcHlwcm9qZWN0LnByb3BzCkBAIC0xMywyMCArMTMsMjAgQEAKICAgICA8SW50RGlyPiQoU29sdXRpb25EaXIpJChQbGF0Zm9ybU5hbWUpLXRlbXAtJChDb25maWd1cmF0aW9uKVwkKFByb2plY3ROYW1lKVw8L0ludERpcj4KICAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8UHJvcGVydHlHcm91cCBMYWJlbD0iVXNlck1hY3JvcyI+Ci0gICAgPFB5RGxsTmFtZT5weXRob24zMyQoUHlEZWJ1Z0V4dCk8L1B5RGxsTmFtZT4KKyAgICA8UHlEbGxOYW1lPnB5dGhvbjM0JChQeURlYnVnRXh0KTwvUHlEbGxOYW1lPgogICAgIDxQeXRob25FeGU+JChPdXREaXIpcHl0aG9uJChQeURlYnVnRXh0KS5leGU8L1B5dGhvbkV4ZT4KICAgICA8S2lsbFB5dGhvbkV4ZT4kKE91dERpcilraWxsX3B5dGhvbiQoUHlEZWJ1Z0V4dCkuZXhlPC9LaWxsUHl0aG9uRXhlPgotICAgIDxleHRlcm5hbHNEaXI+Li5cLi48L2V4dGVybmFsc0Rpcj4KLSAgICA8c3FsaXRlM0Rpcj4kKGV4dGVybmFsc0Rpcilcc3FsaXRlLTMuNy4xMjwvc3FsaXRlM0Rpcj4KKyAgICA8ZXh0ZXJuYWxzRGlyPi4uXGV4dGVybmFsczwvZXh0ZXJuYWxzRGlyPgorICAgIDxzcWxpdGUzRGlyPiQoZXh0ZXJuYWxzRGlyKVxzcWxpdGUtMy44LjExLjA8L3NxbGl0ZTNEaXI+CiAgICAgPGJ6MkRpcj4kKGV4dGVybmFsc0RpcilcYnppcDItMS4wLjY8L2J6MkRpcj4KLSAgICA8bHptYURpcj4kKGV4dGVybmFsc0RpcilceHotNS4wLjM8L2x6bWFEaXI+Ci0gICAgPG9wZW5zc2xEaXI+JChleHRlcm5hbHNEaXIpXG9wZW5zc2wtMS4wLjFlPC9vcGVuc3NsRGlyPgorICAgIDxsem1hRGlyPiQoZXh0ZXJuYWxzRGlyKVx4ei01LjAuNTwvbHptYURpcj4KKyAgICA8b3BlbnNzbERpcj4kKGV4dGVybmFsc0Rpcilcb3BlbnNzbC0xLjAuMmQ8L29wZW5zc2xEaXI+CiAgICAgPHRjbHRrRGlyPiQoZXh0ZXJuYWxzRGlyKVx0Y2x0azwvdGNsdGtEaXI+CiAgICAgPHRjbHRrNjREaXI+JChleHRlcm5hbHNEaXIpXHRjbHRrNjQ8L3RjbHRrNjREaXI+Ci0gICAgPHRjbHRrTGliPiQodGNsdGtEaXIpXGxpYlx0Y2w4NS5saWI7JCh0Y2x0a0RpcilcbGliXHRrODUubGliPC90Y2x0a0xpYj4KLSAgICA8dGNsdGtMaWJEZWJ1Zz4kKHRjbHRrRGlyKVxsaWJcdGNsODVnLmxpYjskKHRjbHRrRGlyKVxsaWJcdGs4NWcubGliPC90Y2x0a0xpYkRlYnVnPgotICAgIDx0Y2x0azY0TGliPiQodGNsdGs2NERpcilcbGliXHRjbDg1LmxpYjskKHRjbHRrNjREaXIpXGxpYlx0azg1LmxpYjwvdGNsdGs2NExpYj4KLSAgICA8dGNsdGs2NExpYkRlYnVnPiQodGNsdGs2NERpcilcbGliXHRjbDg1Zy5saWI7JCh0Y2x0azY0RGlyKVxsaWJcdGs4NWcubGliPC90Y2x0azY0TGliRGVidWc+CisgICAgPHRjbHRrTGliPiQodGNsdGtEaXIpXGxpYlx0Y2w4NnQubGliOyQodGNsdGtEaXIpXGxpYlx0azg2dC5saWI8L3RjbHRrTGliPgorICAgIDx0Y2x0a0xpYkRlYnVnPiQodGNsdGtEaXIpXGxpYlx0Y2w4NnRnLmxpYjskKHRjbHRrRGlyKVxsaWJcdGs4NnRnLmxpYjwvdGNsdGtMaWJEZWJ1Zz4KKyAgICA8dGNsdGs2NExpYj4kKHRjbHRrNjREaXIpXGxpYlx0Y2w4NnQubGliOyQodGNsdGs2NERpcilcbGliXHRrODZ0LmxpYjwvdGNsdGs2NExpYj4KKyAgICA8dGNsdGs2NExpYkRlYnVnPiQodGNsdGs2NERpcilcbGliXHRjbDg2dGcubGliOyQodGNsdGs2NERpcilcbGliXHRrODZ0Zy5saWI8L3RjbHRrNjRMaWJEZWJ1Zz4KICAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8SXRlbURlZmluaXRpb25Hcm91cD4KICAgICA8Q2xDb21waWxlPgpAQCAtNDksOSArNDksOCBAQAogICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CiAgICAgICA8UHJvZ3JhbURhdGFiYXNlRmlsZT4kKE91dERpcikkKFRhcmdldE5hbWUpLnBkYjwvUHJvZ3JhbURhdGFiYXNlRmlsZT4KICAgICAgIDxTdWJTeXN0ZW0+V2luZG93czwvU3ViU3lzdGVtPgotICAgICAgPFJhbmRvbWl6ZWRCYXNlQWRkcmVzcz5mYWxzZTwvUmFuZG9taXplZEJhc2VBZGRyZXNzPgotICAgICAgPERhdGFFeGVjdXRpb25QcmV2ZW50aW9uPgotICAgICAgPC9EYXRhRXhlY3V0aW9uUHJldmVudGlvbj4KKyAgICAgIDxSYW5kb21pemVkQmFzZUFkZHJlc3M+dHJ1ZTwvUmFuZG9taXplZEJhc2VBZGRyZXNzPgorICAgICAgPERhdGFFeGVjdXRpb25QcmV2ZW50aW9uPnRydWU8L0RhdGFFeGVjdXRpb25QcmV2ZW50aW9uPgogICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZVg4NjwvVGFyZ2V0TWFjaGluZT4KICAgICA8L0xpbms+CiAgICAgPFJlc291cmNlQ29tcGlsZT4KZGlmZiAtLWdpdCBhL1BDYnVpbGQvcHl0aG9uLnZjeHByb2ogYi9QQ2J1aWxkL3B5dGhvbi52Y3hwcm9qCmluZGV4IGQwYTlkZTAuLmJkMTI2MjQgMTAwNjQ0Ci0tLSBhL1BDYnVpbGQvcHl0aG9uLnZjeHByb2oKKysrIGIvUENidWlsZC9weXRob24udmN4cHJvagpAQCAtMjQzLDcgKzI0Myw3IEBACiAgICAgPExpbms+CiAgICAgICA8T3V0cHV0RmlsZT4kKE91dERpcilweXRob25fZC5leGU8L091dHB1dEZpbGU+CiAgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KLSAgICAgIDxTdGFja1Jlc2VydmVTaXplPjIxMDAwMDA8L1N0YWNrUmVzZXJ2ZVNpemU+CisgICAgICA8U3RhY2tSZXNlcnZlU2l6ZT40MTk0MzA0PC9TdGFja1Jlc2VydmVTaXplPgogICAgICAgPEJhc2VBZGRyZXNzPjB4MWQwMDAwMDA8L0Jhc2VBZGRyZXNzPgogICAgIDwvTGluaz4KICAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgpAQCAtMzU3LDEyICszNTcsOCBAQAogICAgICAgPFByb2plY3Q+e2NmN2FjM2QxLWUyZGYtNDFkMi1iZWE2LTFlMjU1NmNkZWEyNn08L1Byb2plY3Q+CiAgICAgICA8UmVmZXJlbmNlT3V0cHV0QXNzZW1ibHk+ZmFsc2U8L1JlZmVyZW5jZU91dHB1dEFzc2VtYmx5PgogICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KLSAgICA8UHJvamVjdFJlZmVyZW5jZSBJbmNsdWRlPSJ3OXhwb3Blbi52Y3hwcm9qIj4KLSAgICAgIDxQcm9qZWN0PntlOWUwYTFmNi0wMDA5LTRlOGMtYjhmOC0xYjhmNWQ0OWEwNTh9PC9Qcm9qZWN0PgotICAgICAgPFJlZmVyZW5jZU91dHB1dEFzc2VtYmx5PmZhbHNlPC9SZWZlcmVuY2VPdXRwdXRBc3NlbWJseT4KLSAgICA8L1Byb2plY3RSZWZlcmVuY2U+CiAgIDwvSXRlbUdyb3VwPgogICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPgogICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPgogICA8L0ltcG9ydEdyb3VwPgotPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKzwvUHJvamVjdD4KZGlmZiAtLWdpdCBhL1BDYnVpbGQvcHl0aG9uY29yZS52Y3hwcm9qIGIvUENidWlsZC9weXRob25jb3JlLnZjeHByb2oKaW5kZXggOGI1YzQyZi4uNjAyMWNkNyAxMDA2NDQKLS0tIGEvUENidWlsZC9weXRob25jb3JlLnZjeHByb2oKKysrIGIvUENidWlsZC9weXRob25jb3JlLnZjeHByb2oKQEAgLTE3Myw3ICsxNzMsNyBAQAogICAgIDwvUmVzb3VyY2VDb21waWxlPgogICAgIDxQcmVMaW5rRXZlbnQ+CiAgICAgICA8TWVzc2FnZT5HZW5lcmF0ZSBidWlsZCBpbmZvcm1hdGlvbi4uLjwvTWVzc2FnZT4KLSAgICAgIDxDb21tYW5kPiIkKFNvbHV0aW9uRGlyKW1ha2VfYnVpbGRpbmZvLmV4ZSIgUmVsZWFzZSAiJChJbnREaXIpIjwvQ29tbWFuZD4KKyAgICAgIDxDb21tYW5kPiIkKFNvbHV0aW9uRGlyKW1ha2VfYnVpbGRpbmZvLmV4ZSIgUmVsZWFzZSAiJChJbnREaXIpXCI8L0NvbW1hbmQ+CiAgICAgPC9QcmVMaW5rRXZlbnQ+CiAgICAgPExpbms+CiAgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz4kKEludERpcilnZXRidWlsZGluZm8ubzslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgpAQCAtMTg0LDcgKzE4NCw3IEBACiAgICAgPFByZUJ1aWxkRXZlbnQ+CiAgICAgICA8Q29tbWFuZD4kKEtpbGxQeXRob25FeGUpCiBJRiAlRVJST1JMRVZFTCUgTkVRIDAgKAotICAgIGVjaG8ga2lsbF9weXRob246IHdhcm5pbmc6IGNvdWxkIG5vdCBraWxsIHJ1bm5pbmcgUHl0aG9ucywgZXhpdCBjb2RlICVFUlJPUkxFVkVMJQorICAgIGVjaG8ga2lsbF9weXRob246IHdhcl5uaW5nOiBjb3VsZCBub3Qga2lsbCBydW5uaW5nIFB5dGhvbnMsIGV4aXQgY29kZSAlRVJST1JMRVZFTCUKICAgICBleGl0IC9iIDAKICk8L0NvbW1hbmQ+CiAgICAgPC9QcmVCdWlsZEV2ZW50PgpAQCAtMjA5LDcgKzIwOSw3IEBACiAgICAgPC9SZXNvdXJjZUNvbXBpbGU+CiAgICAgPFByZUxpbmtFdmVudD4KICAgICAgIDxNZXNzYWdlPkdlbmVyYXRlIGJ1aWxkIGluZm9ybWF0aW9uLi4uPC9NZXNzYWdlPgotICAgICAgPENvbW1hbmQ+IiQoU29sdXRpb25EaXIpbWFrZV9idWlsZGluZm8uZXhlIiBSZWxlYXNlICIkKEludERpcikiPC9Db21tYW5kPgorICAgICAgPENvbW1hbmQ+IiQoU29sdXRpb25EaXIpbWFrZV9idWlsZGluZm8uZXhlIiBSZWxlYXNlICIkKEludERpcilcIjwvQ29tbWFuZD4KICAgICA8L1ByZUxpbmtFdmVudD4KICAgICA8TGluaz4KICAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPiQoSW50RGlyKWdldGJ1aWxkaW5mby5vOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CkBAIC0yMTksNyArMjE5LDcgQEAKICAgICA8UHJlQnVpbGRFdmVudD4KICAgICAgIDxDb21tYW5kPiQoS2lsbFB5dGhvbkV4ZSkKIElGICVFUlJPUkxFVkVMJSBORVEgMCAoCi0gICAgZWNobyBraWxsX3B5dGhvbjogd2FybmluZzogY291bGQgbm90IGtpbGwgcnVubmluZyBQeXRob25zLCBleGl0IGNvZGUgJUVSUk9STEVWRUwlCisgICAgZWNobyBraWxsX3B5dGhvbjogd2FyXm5pbmc6IGNvdWxkIG5vdCBraWxsIHJ1bm5pbmcgUHl0aG9ucywgZXhpdCBjb2RlICVFUlJPUkxFVkVMJQogICAgIGV4aXQgL2IgMAogKTwvQ29tbWFuZD4KICAgICA8L1ByZUJ1aWxkRXZlbnQ+CkBAIC0yNTQsNyArMjU0LDcgQEAKICAgICA8UHJlQnVpbGRFdmVudD4KICAgICAgIDxDb21tYW5kPiQoS2lsbFB5dGhvbkV4ZSkKIElGICVFUlJPUkxFVkVMJSBORVEgMCAoCi0gICAgZWNobyBraWxsX3B5dGhvbjogd2FybmluZzogY291bGQgbm90IGtpbGwgcnVubmluZyBQeXRob25zLCBleGl0IGNvZGUgJUVSUk9STEVWRUwlCisgICAgZWNobyBraWxsX3B5dGhvbjogd2FyXm5pbmc6IGNvdWxkIG5vdCBraWxsIHJ1bm5pbmcgUHl0aG9ucywgZXhpdCBjb2RlICVFUlJPUkxFVkVMJQogICAgIGV4aXQgL2IgMAogKTwvQ29tbWFuZD4KICAgICA8L1ByZUJ1aWxkRXZlbnQ+CkBAIC0yOTIsNyArMjkyLDcgQEAKICAgICA8UHJlQnVpbGRFdmVudD4KICAgICAgIDxDb21tYW5kPiQoS2lsbFB5dGhvbkV4ZSkKIElGICVFUlJPUkxFVkVMJSBORVEgMCAoCi0gICAgZWNobyBraWxsX3B5dGhvbjogd2FybmluZzogY291bGQgbm90IGtpbGwgcnVubmluZyBQeXRob25zLCBleGl0IGNvZGUgJUVSUk9STEVWRUwlCisgICAgZWNobyBraWxsX3B5dGhvbjogd2FyXm5pbmc6IGNvdWxkIG5vdCBraWxsIHJ1bm5pbmcgUHl0aG9ucywgZXhpdCBjb2RlICVFUlJPUkxFVkVMJQogICAgIGV4aXQgL2IgMAogKTwvQ29tbWFuZD4KICAgICA8L1ByZUJ1aWxkRXZlbnQ+CkBAIC0zMTQsNyArMzE0LDcgQEAKICAgICA8L1Jlc291cmNlQ29tcGlsZT4KICAgICA8UHJlTGlua0V2ZW50PgogICAgICAgPE1lc3NhZ2U+R2VuZXJhdGUgYnVpbGQgaW5mb3JtYXRpb24uLi48L01lc3NhZ2U+Ci0gICAgICA8Q29tbWFuZD4iJChTb2x1dGlvbkRpciltYWtlX2J1aWxkaW5mby5leGUiIFJlbGVhc2UgIiQoSW50RGlyKSI8L0NvbW1hbmQ+CisgICAgICA8Q29tbWFuZD4iJChTb2x1dGlvbkRpciltYWtlX2J1aWxkaW5mby5leGUiIFJlbGVhc2UgIiQoSW50RGlyKVwiPC9Db21tYW5kPgogICAgIDwvUHJlTGlua0V2ZW50PgogICAgIDxMaW5rPgogICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+JChJbnREaXIpZ2V0YnVpbGRpbmZvLm87JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KQEAgLTMyNSw3ICszMjUsNyBAQAogICAgIDxQcmVCdWlsZEV2ZW50PgogICAgICAgPENvbW1hbmQ+JChLaWxsUHl0aG9uRXhlKQogSUYgJUVSUk9STEVWRUwlIE5FUSAwICgKLSAgICBlY2hvIGtpbGxfcHl0aG9uOiB3YXJuaW5nOiBjb3VsZCBub3Qga2lsbCBydW5uaW5nIFB5dGhvbnMsIGV4aXQgY29kZSAlRVJST1JMRVZFTCUKKyAgICBlY2hvIGtpbGxfcHl0aG9uOiB3YXJebmluZzogY291bGQgbm90IGtpbGwgcnVubmluZyBQeXRob25zLCBleGl0IGNvZGUgJUVSUk9STEVWRUwlCiAgICAgZXhpdCAvYiAwCiApPC9Db21tYW5kPgogICAgIDwvUHJlQnVpbGRFdmVudD4KQEAgLTM1MCw3ICszNTAsNyBAQAogICAgIDwvUmVzb3VyY2VDb21waWxlPgogICAgIDxQcmVMaW5rRXZlbnQ+CiAgICAgICA8TWVzc2FnZT5HZW5lcmF0ZSBidWlsZCBpbmZvcm1hdGlvbi4uLjwvTWVzc2FnZT4KLSAgICAgIDxDb21tYW5kPiIkKFNvbHV0aW9uRGlyKW1ha2VfYnVpbGRpbmZvLmV4ZSIgUmVsZWFzZSAiJChJbnREaXIpIjwvQ29tbWFuZD4KKyAgICAgIDxDb21tYW5kPiIkKFNvbHV0aW9uRGlyKW1ha2VfYnVpbGRpbmZvLmV4ZSIgUmVsZWFzZSAiJChJbnREaXIpXCI8L0NvbW1hbmQ+CiAgICAgPC9QcmVMaW5rRXZlbnQ+CiAgICAgPExpbms+CiAgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz4kKEludERpcilnZXRidWlsZGluZm8ubzslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgpAQCAtMzYxLDcgKzM2MSw3IEBACiAgICAgPFByZUJ1aWxkRXZlbnQ+CiAgICAgICA8Q29tbWFuZD4kKEtpbGxQeXRob25FeGUpCiBJRiAlRVJST1JMRVZFTCUgTkVRIDAgKAotICAgIGVjaG8ga2lsbF9weXRob246IHdhcm5pbmc6IGNvdWxkIG5vdCBraWxsIHJ1bm5pbmcgUHl0aG9ucywgZXhpdCBjb2RlICVFUlJPUkxFVkVMJQorICAgIGVjaG8ga2lsbF9weXRob246IHdhcl5uaW5nOiBjb3VsZCBub3Qga2lsbCBydW5uaW5nIFB5dGhvbnMsIGV4aXQgY29kZSAlRVJST1JMRVZFTCUKICAgICBleGl0IC9iIDAKICk8L0NvbW1hbmQ+CiAgICAgPC9QcmVCdWlsZEV2ZW50PgpAQCAtMzgzLDcgKzM4Myw3IEBACiAgICAgPC9SZXNvdXJjZUNvbXBpbGU+CiAgICAgPFByZUxpbmtFdmVudD4KICAgICAgIDxNZXNzYWdlPkdlbmVyYXRlIGJ1aWxkIGluZm9ybWF0aW9uLi4uPC9NZXNzYWdlPgotICAgICAgPENvbW1hbmQ+IiQoU29sdXRpb25EaXIpbWFrZV9idWlsZGluZm8uZXhlIiBSZWxlYXNlICIkKEludERpcikiPC9Db21tYW5kPgorICAgICAgPENvbW1hbmQ+IiQoU29sdXRpb25EaXIpbWFrZV9idWlsZGluZm8uZXhlIiBSZWxlYXNlICIkKEludERpcilcIjwvQ29tbWFuZD4KICAgICA8L1ByZUxpbmtFdmVudD4KICAgICA8TGluaz4KICAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPiQoSW50RGlyKWdldGJ1aWxkaW5mby5vOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CkBAIC0zOTQsNyArMzk0LDcgQEAKICAgICA8UHJlQnVpbGRFdmVudD4KICAgICAgIDxDb21tYW5kPiQoS2lsbFB5dGhvbkV4ZSkKIElGICVFUlJPUkxFVkVMJSBORVEgMCAoCi0gICAgZWNobyBraWxsX3B5dGhvbjogd2FybmluZzogY291bGQgbm90IGtpbGwgcnVubmluZyBQeXRob25zLCBleGl0IGNvZGUgJUVSUk9STEVWRUwlCisgICAgZWNobyBraWxsX3B5dGhvbjogd2FyXm5pbmc6IGNvdWxkIG5vdCBraWxsIHJ1bm5pbmcgUHl0aG9ucywgZXhpdCBjb2RlICVFUlJPUkxFVkVMJQogICAgIGV4aXQgL2IgMAogKTwvQ29tbWFuZD4KICAgICA8L1ByZUJ1aWxkRXZlbnQ+CkBAIC00MTksNyArNDE5LDcgQEAKICAgICA8L1Jlc291cmNlQ29tcGlsZT4KICAgICA8UHJlTGlua0V2ZW50PgogICAgICAgPE1lc3NhZ2U+R2VuZXJhdGUgYnVpbGQgaW5mb3JtYXRpb24uLi48L01lc3NhZ2U+Ci0gICAgICA8Q29tbWFuZD4iJChTb2x1dGlvbkRpciltYWtlX2J1aWxkaW5mby5leGUiIFJlbGVhc2UgIiQoSW50RGlyKSI8L0NvbW1hbmQ+CisgICAgICA8Q29tbWFuZD4iJChTb2x1dGlvbkRpciltYWtlX2J1aWxkaW5mby5leGUiIFJlbGVhc2UgIiQoSW50RGlyKVwiPC9Db21tYW5kPgogICAgIDwvUHJlTGlua0V2ZW50PgogICAgIDxMaW5rPgogICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+JChJbnREaXIpZ2V0YnVpbGRpbmZvLm87JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KQEAgLTQzMCw3ICs0MzAsNyBAQAogICAgIDxQcmVCdWlsZEV2ZW50PgogICAgICAgPENvbW1hbmQ+JChLaWxsUHl0aG9uRXhlKQogSUYgJUVSUk9STEVWRUwlIE5FUSAwICgKLSAgICBlY2hvIGtpbGxfcHl0aG9uOiB3YXJuaW5nOiBjb3VsZCBub3Qga2lsbCBydW5uaW5nIFB5dGhvbnMsIGV4aXQgY29kZSAlRVJST1JMRVZFTCUKKyAgICBlY2hvIGtpbGxfcHl0aG9uOiB3YXJebmluZzogY291bGQgbm90IGtpbGwgcnVubmluZyBQeXRob25zLCBleGl0IGNvZGUgJUVSUk9STEVWRUwlCiAgICAgZXhpdCAvYiAwCiApPC9Db21tYW5kPgogICAgIDwvUHJlQnVpbGRFdmVudD4KQEAgLTQ5Miw2ICs0OTIsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cSW5jbHVkZVxwYXRjaGxldmVsLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxJbmNsdWRlXHBnZW4uaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXEluY2x1ZGVccGdlbmhlYWRlcnMuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXEluY2x1ZGVccHloYXNoLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxJbmNsdWRlXHB5X2N1cnNlcy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cSW5jbHVkZVxweWFyZW5hLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxJbmNsdWRlXHB5Y2Fwc3VsZS5oIiAvPgpAQCAtNTI4LDcgKzUyOSwxMSBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cSW5jbHVkZVx1bmljb2Rlb2JqZWN0LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxJbmNsdWRlXHdlYWtyZWZvYmplY3QuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcX21hdGguaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcaGFzaHRhYmxlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHJvdGF0aW5ndHJlZS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xzcmUuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcc3JlX2NvbnN0YW50cy5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xzcmVfbGliLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXF9pb1xfaW9tb2R1bGUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcemxpYlxjcmMzMi5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1x6bGliXGRlZmxhdGUuaCIgLz4KQEAgLTU1NSw2ICs1NjAsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cT2JqZWN0c1xzdHJpbmdsaWJcZmFzdHNlYXJjaC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cT2JqZWN0c1xzdHJpbmdsaWJcZmluZC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cT2JqZWN0c1xzdHJpbmdsaWJccGFydGl0aW9uLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxPYmplY3RzXHN0cmluZ2xpYlxyZXBsYWNlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxPYmplY3RzXHN0cmluZ2xpYlxzcGxpdC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cT2JqZWN0c1x1bmljb2RldHlwZV9kYi5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cUGFyc2VyXHBhcnNlci5oIiAvPgpAQCAtNTgwLDYgKzU4Niw3IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXF9waWNrbGUuYyIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcX3JhbmRvbW1vZHVsZS5jIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xfc3JlLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXF9zdGF0LmMiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXF9zdHJ1Y3QuYyIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcX3dlYWtyZWYuYyIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcYXJyYXltb2R1bGUuYyIgLz4KQEAgLTU5MSwxMiArNTk4LDE0IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXGVycm5vbW9kdWxlLmMiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXGZhdWx0aGFuZGxlci5jIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xnY21vZHVsZS5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xoYXNodGFibGUuYyIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcaXRlcnRvb2xzbW9kdWxlLmMiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXG1haW4uYyIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcbWF0aG1vZHVsZS5jIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xtZDVtb2R1bGUuYyIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcbW1hcG1vZHVsZS5jIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xvcGVyYXRvci5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xfb3Bjb2RlLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXF9vcGVyYXRvci5jIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xwYXJzZXJtb2R1bGUuYyIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNccG9zaXhtb2R1bGUuYyIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNccm90YXRpbmd0cmVlLmMiIC8+CkBAIC02MDYsNiArNjE1LDcgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcc2lnbmFsbW9kdWxlLmMiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHN5bXRhYmxlbW9kdWxlLmMiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXF90aHJlYWRtb2R1bGUuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcX3RyYWNlbWFsbG9jLmMiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHRpbWVtb2R1bGUuYyIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNceHhzdWJ0eXBlLmMiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHppcGltcG9ydC5jIiAvPgpAQCAtNjkxLDYgKzcwMSw3IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxQQ1xkbF9udC5jIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cUENcZ2V0cGF0aHAuYyIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXFBDXG1zdmNydG1vZHVsZS5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cUHl0aG9uXHB5aGFzaC5jIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cUHl0aG9uXHJhbmRvbS5jIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cUHl0aG9uXF93YXJuaW5ncy5jIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cUHl0aG9uXGFzZGwuYyIgLz4KQEAgLTc1Nyw0ICs3NjgsNCBAQAogICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPgogICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPgogICA8L0ltcG9ydEdyb3VwPgotPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKzwvUHJvamVjdD4KZGlmZiAtLWdpdCBhL1BDYnVpbGQvcHl0aG9uY29yZS52Y3hwcm9qLmZpbHRlcnMgYi9QQ2J1aWxkL3B5dGhvbmNvcmUudmN4cHJvai5maWx0ZXJzCmluZGV4IDU2NDdmZWIuLjhjNjUyNDcgMTAwNjQ0Ci0tLSBhL1BDYnVpbGQvcHl0aG9uY29yZS52Y3hwcm9qLmZpbHRlcnMKKysrIGIvUENidWlsZC9weXRob25jb3JlLnZjeHByb2ouZmlsdGVycwpAQCAtMzAwLDYgKzMwMCwxNSBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xyb3RhdGluZ3RyZWUuaCI+CiAgICAgICA8RmlsdGVyPk1vZHVsZXM8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcc3JlLmgiPgorICAgICAgPEZpbHRlcj5Nb2R1bGVzPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHNyZV9jb25zdGFudHMuaCI+CisgICAgICA8RmlsdGVyPk1vZHVsZXM8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcc3JlX2xpYi5oIj4KKyAgICAgIDxGaWx0ZXI+TW9kdWxlczwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xfaW9cX2lvbW9kdWxlLmgiPgogICAgICAgPEZpbHRlcj5Nb2R1bGVzXF9pbzwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgpAQCAtMzc4LDYgKzM4Nyw5IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxPYmplY3RzXHN0cmluZ2xpYlxwYXJ0aXRpb24uaCI+CiAgICAgICA8RmlsdGVyPk9iamVjdHM8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE9iamVjdHNcc3RyaW5nbGliXHJlcGxhY2UuaCI+CisgICAgICA8RmlsdGVyPk9iamVjdHM8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE9iamVjdHNcc3RyaW5nbGliXHNwbGl0LmgiPgogICAgICAgPEZpbHRlcj5PYmplY3RzPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CkBAIC00MDgsOSArNDIwLDE1IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxQeXRob25cY2V2YWxfZ2lsLmgiPgogICAgICAgPEZpbHRlcj5QeXRob248L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXEluY2x1ZGVccHloYXNoLmgiPgorICAgICAgPEZpbHRlcj5JbmNsdWRlPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxJbmNsdWRlXG5hbWVzcGFjZW9iamVjdC5oIj4KICAgICAgIDxGaWx0ZXI+SW5jbHVkZTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xoYXNodGFibGUuaCI+CisgICAgICA8RmlsdGVyPk1vZHVsZXM8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KICAgPC9JdGVtR3JvdXA+CiAgIDxJdGVtR3JvdXA+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXF9iaXNlY3Rtb2R1bGUuYyI+CkBAIC01MDAsNyArNTE4LDcgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcbW1hcG1vZHVsZS5jIj4KICAgICAgIDxGaWx0ZXI+TW9kdWxlczwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xvcGVyYXRvci5jIj4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcX29wZXJhdG9yLmMiPgogICAgICAgPEZpbHRlcj5Nb2R1bGVzPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHBhcnNlcm1vZHVsZS5jIj4KQEAgLTkxNyw5ICs5MzUsMjQgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcX3dpbmFwaS5jIj4KICAgICAgIDxGaWx0ZXI+UEM8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcX3N0YXQuYyI+CisgICAgICA8RmlsdGVyPk1vZHVsZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXFB5dGhvblxweWhhc2guYyI+CisgICAgICA8RmlsdGVyPlB5dGhvbjwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cT2JqZWN0c1xuYW1lc3BhY2VvYmplY3QuYyI+CiAgICAgICA8RmlsdGVyPk9iamVjdHM8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcX29wY29kZS5jIj4KKyAgICAgIDxGaWx0ZXI+TW9kdWxlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xfdHJhY2VtYWxsb2MuYyI+CisgICAgICA8RmlsdGVyPk1vZHVsZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcaGFzaHRhYmxlLmMiPgorICAgICAgPEZpbHRlcj5Nb2R1bGVzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CiAgIDwvSXRlbUdyb3VwPgogICA8SXRlbUdyb3VwPgogICAgIDxSZXNvdXJjZUNvbXBpbGUgSW5jbHVkZT0iLi5cUENccHl0aG9uX250LnJjIj4KZGlmZiAtLWdpdCBhL1BDYnVpbGQvcmVhZG1lLnR4dCBiL1BDYnVpbGQvcmVhZG1lLnR4dAppbmRleCA2ZjA3Njg5Li5lMGM2Njg1IDEwMDY0NAotLS0gYS9QQ2J1aWxkL3JlYWRtZS50eHQKKysrIGIvUENidWlsZC9yZWFkbWUudHh0CkBAIC0xLDMxOSArMSwzMjAgQEAKLUJ1aWxkaW5nIFB5dGhvbiB1c2luZyBWQysrIDEwLjAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotVGhpcyBkaXJlY3RvcnkgaXMgdXNlZCB0byBidWlsZCBQeXRob24gZm9yIFdpbjMyIGFuZCB4NjQgcGxhdGZvcm1zLCBlLmcuCi1XaW5kb3dzIFhQLCBWaXN0YSBhbmQgV2luZG93cyBTZXJ2ZXIgMjAwOC4gIEluIG9yZGVyIHRvIGJ1aWxkIDMyLWJpdAotZGVidWcgYW5kIHJlbGVhc2UgZXhlY3V0YWJsZXMsIE1pY3Jvc29mdCBWaXN1YWwgQysrIDIwMTAgRXhwcmVzcyBFZGl0aW9uIGlzCi1yZXF1aXJlZCBhdCB0aGUgdmVyeSBsZWFzdC4gIEluIG9yZGVyIHRvIGJ1aWxkIDY0LWJpdCBkZWJ1ZyBhbmQgcmVsZWFzZQotZXhlY3V0YWJsZXMsIFZpc3VhbCBTdHVkaW8gMjAxMCBTdGFuZGFyZCBFZGl0aW9uIGlzIHJlcXVpcmVkIGF0IHRoZSB2ZXJ5Ci1sZWFzdC4gIEluIG9yZGVyIHRvIGJ1aWxkIGFsbCBvZiB0aGUgYWJvdmUsIGFzIHdlbGwgYXMgZ2VuZXJhdGUgcmVsZWFzZSBidWlsZHMKLXRoYXQgbWFrZSB1c2Ugb2YgUHJvZmlsZSBHdWlkZWQgT3B0aW1pc2F0aW9uIChQRzApLCBWaXN1YWwgU3R1ZGlvIDIwMTAKLVByb2Zlc3Npb25hbCBFZGl0aW9uIGlzIHJlcXVpcmVkIGF0IHRoZSB2ZXJ5IGxlYXN0LiAgVGhlIG9mZmljaWFsIFB5dGhvbgotcmVsZWFzZXMgYXJlIGJ1aWx0IHdpdGggdGhpcyB2ZXJzaW9uIG9mIFZpc3VhbCBTdHVkaW8uCi0KLUZvciBvdGhlciBXaW5kb3dzIHBsYXRmb3JtcyBhbmQgY29tcGlsZXJzLCBzZWUgLi4vUEMvcmVhZG1lLnR4dC4KLQotQWxsIHlvdSBuZWVkIHRvIGRvIGlzIG9wZW4gdGhlIHdvcmtzcGFjZSAicGNidWlsZC5zbG4iIGluIFZpc3VhbCBTdHVkaW8sCi1zZWxlY3QgdGhlIGRlc2lyZWQgY29tYmluYXRpb24gb2YgY29uZmlndXJhdGlvbiBhbmQgcGxhdGZvcm0gYW5kIGV2ZW50dWFsbHkKLWJ1aWxkIHRoZSBzb2x1dGlvbi4gVW5sZXNzIHlvdSBhcmUgZ29pbmcgdG8gZGVidWcgYSBwcm9ibGVtIGluIHRoZSBjb3JlIG9yCi15b3UgYXJlIGdvaW5nIHRvIGNyZWF0ZSBhbiBvcHRpbWl6ZWQgYnVpbGQgeW91IHdhbnQgdG8gc2VsZWN0ICJSZWxlYXNlIiBhcwotY29uZmlndXJhdGlvbi4KLQotVGhlIFBDYnVpbGQgZGlyZWN0b3J5IGlzIGNvbXBhdGlibGUgd2l0aCBhbGwgdmVyc2lvbnMgb2YgVmlzdWFsIFN0dWRpbyBmcm9tCi1WUyBDKysgRXhwcmVzcyBFZGl0aW9uIG92ZXIgdGhlIHN0YW5kYXJkIGVkaXRpb24gdXAgdG8gdGhlIHByb2Zlc3Npb25hbAotZWRpdGlvbi4gSG93ZXZlciB0aGUgZXhwcmVzcyBlZGl0aW9uIGRvZXMgbm90IHN1cHBvcnQgZmVhdHVyZXMgbGlrZSBzb2x1dGlvbgotZm9sZGVycyBvciBwcm9maWxlIGd1aWRlZCBvcHRpbWl6YXRpb24gKFBHTykuIFRoZSBtaXNzaW5nIGJpdHMgYW5kIHBpZWNlcwotd29uJ3Qgc3RvcCB5b3UgZnJvbSBidWlsZGluZyBQeXRob24uCi0KLVRoZSBzb2x1dGlvbiBpcyBjb25maWd1cmVkIHRvIGJ1aWxkIHRoZSBwcm9qZWN0cyBpbiB0aGUgY29ycmVjdCBvcmRlci4gIkJ1aWxkCi1Tb2x1dGlvbiIgb3IgRjcgdGFrZXMgY2FyZSBvZiBkZXBlbmRlbmNpZXMgZXhjZXB0IGZvciB4NjQgYnVpbGRzLiBUbyBtYWtlCi1jcm9zcyBjb21waWxpbmcgeDY0IGJ1aWxkcyBvbiBhIDMyYml0IE9TIHBvc3NpYmxlIHRoZSB4NjQgYnVpbGRzIHJlcXVpcmUgYQotMzJiaXQgdmVyc2lvbiBvZiBQeXRob24uCi0KLU5PVEU6Ci0gICBZb3UgcHJvYmFibHkgZG9uJ3Qgd2FudCB0byBidWlsZCBtb3N0IG9mIHRoZSBvdGhlciBzdWJwcm9qZWN0cywgdW5sZXNzCi0gICB5b3UncmUgYnVpbGRpbmcgYW4gZW50aXJlIFB5dGhvbiBkaXN0cmlidXRpb24gZnJvbSBzY3JhdGNoLCBvcgotICAgc3BlY2lmaWNhbGx5IG1ha2luZyBjaGFuZ2VzIHRvIHRoZSBzdWJzeXN0ZW1zIHRoZXkgaW1wbGVtZW50LCBvciBhcmUKLSAgIHJ1bm5pbmcgYSBQeXRob24gY29yZSBidWlsZGJvdCB0ZXN0IHNsYXZlOyBzZWUgU1VCUFJPSkVDVFMgYmVsb3cpCi0KLVdoZW4gdXNpbmcgdGhlIERlYnVnIHNldHRpbmcsIHRoZSBvdXRwdXQgZmlsZXMgaGF2ZSBhIF9kIGFkZGVkIHRvCi10aGVpciBuYW1lOiAgcHl0aG9uMzNfZC5kbGwsIHB5dGhvbl9kLmV4ZSwgcGFyc2VyX2QucHlkLCBhbmQgc28gb24uIEJvdGgKLXRoZSBidWlsZCBhbmQgcnQgYmF0Y2ggZmlsZXMgYWNjZXB0IGEgLWQgb3B0aW9uIGZvciBkZWJ1ZyBidWlsZHMuCi0KLVRoZSAzMmJpdCBidWlsZHMgZW5kIHVwIGluIHRoZSBzb2x1dGlvbiBmb2xkZXIgUENidWlsZCB3aGlsZSB0aGUgeDY0IGJ1aWxkcwotbGFuZCBpbiB0aGUgYW1kNjQgc3ViZm9sZGVyLiBUaGUgUEdJIGFuZCBQR08gYnVpbGRzIGZvciBwcm9maWxlIGd1aWRlZAotb3B0aW1pemF0aW9uIGVuZCB1cCBpbiB0aGVpciBvd24gZm9sZGVycywgdG9vLgotCi1MZWdhY3kgc3VwcG9ydAotLS0tLS0tLS0tLS0tLS0KLQotWW91IGNhbiBmaW5kIGJ1aWxkIGRpcmVjdG9yaWVzIGZvciBvbGRlciB2ZXJzaW9ucyBvZiBWaXN1YWwgU3R1ZGlvIGFuZAotVmlzdWFsIEMrKyBpbiB0aGUgUEMgZGlyZWN0b3J5LiBUaGUgbGVnYWN5IGJ1aWxkIGRpcmVjdG9yaWVzIGFyZSBubyBsb25nZXIKLWFjdGl2ZWx5IG1haW50YWluZWQgYW5kIG1heSBub3Qgd29yayBvdXQgb2YgdGhlIGJveC4KLQotUEMvVkM2LwotICAgIFZpc3VhbCBDKysgNi4wCi1QQy9WUzcuMS8KLSAgICBWaXN1YWwgU3R1ZGlvIDIwMDMgKDcuMSkKLVBDL1ZTOC4wLwotICAgIFZpc3VhbCBTdHVkaW8gMjAwNSAoOC4wKQotUEMvVlM5LjAvCi0gICAgVmlzdWFsIFN0dWRpbyAyMDA4ICg5LjApCi0KLQotQyBSVU5USU1FCi0tLS0tLS0tLS0KLQotVmlzdWFsIFN0dWRpbyAyMDEwIHVzZXMgdmVyc2lvbiAxMCBvZiB0aGUgQyBydW50aW1lIChNU1ZDUlQxMCkuICBUaGUgZXhlY3V0YWJsZXMKLW5vIGxvbmdlciB1c2UgdGhlICJTaWRlIGJ5IFNpZGUiIGFzc2VtYmxpZXMgdXNlZCBpbiBwcmV2aW91cyB2ZXJzaW9ucyBvZiB0aGUKLWNvbXBpbGVyLiAgVGhpcyBzaW1wbGlmaWVzIGRpc3RyaWJ1dGlvbiBvZiBhcHBsaWNhdGlvbnMuCi1UaGUgcnVuIHRpbWUgbGlicmFyaWVzIGFyZSBhdmFpbGFibGUgdW5kZXIgdGhlIFZDL1JlZGlzdCBmb2xkZXIgb2YgeW91ciB2aXN1YWwgc3R1ZGlvCi1kaXN0cmlidXRpb24uIEZvciBtb3JlIGluZm8sIHNlZSB0aGUgUmVhZG1lIGluIHRoZSBWQy9SZWRpc3QgZm9sZGVyLgotCi1TVUJQUk9KRUNUUwotLS0tLS0tLS0tLS0KLVRoZXNlIHN1YnByb2plY3RzIHNob3VsZCBidWlsZCBvdXQgb2YgdGhlIGJveC4gIFN1YnByb2plY3RzIG90aGVyIHRoYW4gdGhlCi1tYWluIG9uZXMgKHB5dGhvbmNvcmUsIHB5dGhvbiwgcHl0aG9udykgZ2VuZXJhbGx5IGJ1aWxkIGEgRExMIChyZW5hbWVkIHRvCi0ucHlkKSBmcm9tIGEgc3BlY2lmaWMgbW9kdWxlIHNvIHRoYXQgdXNlcnMgZG9uJ3QgaGF2ZSB0byBsb2FkIHRoZSBjb2RlCi1zdXBwb3J0aW5nIHRoYXQgbW9kdWxlIHVubGVzcyB0aGV5IGltcG9ydCB0aGUgbW9kdWxlLgotCi1weXRob25jb3JlCi0gICAgLmRsbCBhbmQgLmxpYgotcHl0aG9uCi0gICAgLmV4ZQotcHl0aG9udwotICAgIHB5dGhvbncuZXhlLCBhIHZhcmlhbnQgb2YgcHl0aG9uLmV4ZSB0aGF0IGRvZXNuJ3QgcG9wIHVwIGEgRE9TIGJveAotX3NvY2tldAotICAgIHNvY2tldG1vZHVsZS5jCi1fdGVzdGNhcGkKLSAgICB0ZXN0cyBvZiB0aGUgUHl0aG9uIEMgQVBJLCBydW4gdmlhIExpYi90ZXN0L3Rlc3RfY2FwaS5weSwgYW5kCi0gICAgaW1wbGVtZW50ZWQgYnkgbW9kdWxlIE1vZHVsZXMvX3Rlc3RjYXBpbW9kdWxlLmMKLV90ZXN0YnVmZmVyCi0gICAgYnVmZmVyIHByb3RvY29sIHRlc3RzLCBydW4gdmlhIExpYi90ZXN0L3Rlc3RfYnVmZmVyLnB5LCBhbmQKLSAgICBpbXBsZW1lbnRlZCBieSBtb2R1bGUgTW9kdWxlcy9fdGVzdGJ1ZmZlci5jCi1weWV4cGF0Ci0gICAgUHl0aG9uIHdyYXBwZXIgZm9yIGFjY2VsZXJhdGVkIFhNTCBwYXJzaW5nLCB3aGljaCBpbmNvcnBvcmF0ZXMgc3RhYmxlCi0gICAgY29kZSBmcm9tIHRoZSBFeHBhdCBwcm9qZWN0OiAgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9leHBhdC8KLXNlbGVjdAotICAgIHNlbGVjdG1vZHVsZS5jCi11bmljb2RlZGF0YQotICAgIGxhcmdlIHRhYmxlcyBvZiBVbmljb2RlIGRhdGEKLXdpbnNvdW5kCi0gICAgcGxheSBzb3VuZHMgKHR5cGljYWxseSAud2F2IGZpbGVzKSB1bmRlciBXaW5kb3dzCi0KLVB5dGhvbi1jb250cm9sbGVkIHN1YnByb2plY3RzIHRoYXQgd3JhcCBleHRlcm5hbCBwcm9qZWN0czoKLV9zcWxpdGUzCi0gICAgV3JhcHMgU1FMaXRlIDMuNy4xMiwgd2hpY2ggaXMgY3VycmVudGx5IGJ1aWx0IGJ5IHNxbGl0ZTMudmN4cHJvai4KLV90a2ludGVyCi0gICAgV3JhcHMgdGhlIFRrIHdpbmRvd2luZyBzeXN0ZW0uICBVbmxpa2UgX3NxbGl0ZTMsIHRoZXJlJ3Mgbm8KLSAgICBjb3JyZXNwb25kaW5nIHRjbHRrLnZjeHByb2otdHlwZSBwcm9qZWN0IHRoYXQgYnVpbGRzIFRjbC9UayBmcm9tIHZjeHByb2oncwotICAgIHdpdGhpbiBvdXIgcGNidWlsZC5zbG4sIHdoaWNoIG1lYW5zIHRoaXMgbW9kdWxlIGV4cGVjdHMgdG8gZmluZCBhCi0gICAgcHJlLWJ1aWx0IFRjbC9UayBpbiBlaXRoZXIgLi5cLi5cdGNsdGsgZm9yIDMyLWJpdCBvciAuLlwuLlx0Y2x0azY0IGZvcgotICAgIDY0LWJpdCAocmVsYXRpdmUgdG8gdGhpcyBkaXJlY3RvcnkpLiAgU2VlIGJlbG93IGZvciBpbnN0cnVjdGlvbnMgdG8gYnVpbGQKLSAgICBUY2wvVGsuCi1fYnoyCi0gICAgUHl0aG9uIHdyYXBwZXIgZm9yIHRoZSBsaWJiemlwMiBjb21wcmVzc2lvbiBsaWJyYXJ5LiAgSG9tZXBhZ2UKLSAgICAgICAgaHR0cDovL3d3dy5iemlwLm9yZy8KLSAgICBEb3dubG9hZCB0aGUgc291cmNlIGZyb20gdGhlIHB5dGhvbi5vcmcgY29weSBpbnRvIHRoZSBkaXN0Ci0gICAgZGlyZWN0b3J5OgotCi0gICAgc3ZuIGV4cG9ydCBodHRwOi8vc3ZuLnB5dGhvbi5vcmcvcHJvamVjdHMvZXh0ZXJuYWwvYnppcDItMS4wLjYKLQotICAgICoqIE5PVEU6IGlmIHlvdSB1c2UgdGhlIFRvb2xzXGJ1aWxkYm90XGV4dGVybmFsKC1hbWQ2NCkuYmF0IGFwcHJvYWNoIGZvcgotICAgIG9idGFpbmluZyBleHRlcm5hbCBzb3VyY2VzIHRoZW4geW91IGRvbid0IG5lZWQgdG8gbWFudWFsbHkgZ2V0IHRoZSBzb3VyY2UKLSAgICBhYm92ZSB2aWEgc3VidmVyc2lvbi4gKioKLV9sem1hCi0gICAgUHl0aG9uIHdyYXBwZXIgZm9yIHRoZSBsaWJsem1hIGNvbXByZXNzaW9uIGxpYnJhcnkuCi0KLSAgICBEb3dubG9hZCB0aGUgcHJlLWJ1aWx0IFdpbmRvd3MgYmluYXJpZXMgZnJvbSBodHRwOi8vdHVrYWFuaS5vcmcveHovLCBhbmQKLSAgICBleHRyYWN0IHRvIC4uXHh6LTUuMC4zLiBJZiB5b3UgYXJlIHVzaW5nIGEgbW9yZSByZWNlbnQgdmVyc2lvbiBvZiBsaWJsem1hLAotICAgIGl0IHdpbGwgYmUgbmVjZXNzYXJ5IHRvIHJlbmFtZSB0aGUgZGlyZWN0b3J5IGZyb20geHotPFZFUlNJT04+IHRvIHh6LTUuMC4zLgotCi1fc3NsCi0gICAgUHl0aG9uIHdyYXBwZXIgZm9yIHRoZSBzZWN1cmUgc29ja2V0cyBsaWJyYXJ5LgotCi0gICAgR2V0IHRoZSBzb3VyY2UgY29kZSB0aHJvdWdoCi0KLSAgICBzdm4gZXhwb3J0IGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy9wcm9qZWN0cy9leHRlcm5hbC9vcGVuc3NsLTEuMC4xZQotCi0gICAgKiogTk9URTogaWYgeW91IHVzZSB0aGUgVG9vbHNcYnVpbGRib3RcZXh0ZXJuYWwoLWFtZDY0KS5iYXQgYXBwcm9hY2ggZm9yCi0gICAgb2J0YWluaW5nIGV4dGVybmFsIHNvdXJjZXMgdGhlbiB5b3UgZG9uJ3QgbmVlZCB0byBtYW51YWxseSBnZXQgdGhlIHNvdXJjZQotICAgIGFib3ZlIHZpYSBzdWJ2ZXJzaW9uLiAqKgotCi0gICAgQWx0ZXJuYXRpdmVseSwgZ2V0IHRoZSBsYXRlc3QgdmVyc2lvbiBmcm9tIGh0dHA6Ly93d3cub3BlbnNzbC5vcmcuCi0gICAgWW91IGNhbiAodGhlb3JldGljYWxseSkgdXNlIGFueSB2ZXJzaW9uIG9mIE9wZW5TU0wgeW91IGxpa2UgLSB0aGUKLSAgICBidWlsZCBwcm9jZXNzIHdpbGwgYXV0b21hdGljYWxseSBzZWxlY3QgdGhlIGxhdGVzdCB2ZXJzaW9uLgotCi0gICAgWW91IG11c3QgaW5zdGFsbCB0aGUgTkFTTSBhc3NlbWJsZXIgMi4xMCBvciBuZXdlciBmcm9tCi0gICAgICAgIGh0dHA6Ly9uYXNtLnNmLm5ldAotICAgIGZvciB4ODYgYnVpbGRzLiAgUHV0IG5hc20uZXhlIGFueXdoZXJlIGluIHlvdXIgUEFUSC4gTW9yZSByZWNlbnQKLSAgICB2ZXJzaW9ucyBvZiBPcGVuU1NMIG1heSBuZWVkIGEgbGF0ZXIgdmVyc2lvbiBvZiBOQVNNLiBJZiBPcGVuU1NMJ3Mgc2VsZgotICAgIHRlc3RzIGRvbid0IHBhc3MsIHlvdSBzaG91bGQgZmlyc3QgdHJ5IHRvIHVwZGF0ZSBOQVNNIGFuZCBkbyBhIGZ1bGwKLSAgICByZWJ1aWxkIG9mIE9wZW5TU0wuCi0KLSAgICBZb3UgY2FuIGFsc28gaW5zdGFsbCBBY3RpdmVQZXJsIGZyb20KLSAgICAgICAgaHR0cDovL3d3dy5hY3RpdmVzdGF0ZS5jb20vYWN0aXZlcGVybC8KLSAgICBpZiB5b3UgbGlrZSB0byB1c2UgdGhlIG9mZmljaWFsIHNvdXJjZXMgaW5zdGVhZCBvZiB0aGUgZmlsZXMgZnJvbQotICAgIHB5dGhvbidzIHN1YnZlcnNpb24gcmVwb3NpdG9yeS4gVGhlIHN2biB2ZXJzaW9uIGNvbnRhaW5zIHByZS1idWlsZAotICAgIG1ha2VmaWxlcyBhbmQgYXNzZW1ibHkgZmlsZXMuCi0KLSAgICBUaGUgYnVpbGQgcHJvY2VzcyBtYWtlcyBzdXJlIHRoYXQgbm8gcGF0ZW50ZWQgYWxnb3JpdGhtcyBhcmUgaW5jbHVkZWQuCi0gICAgRm9yIG5vdyBSQzUsIE1EQzIgYW5kIElERUEgYXJlIGV4Y2x1ZGVkIGZyb20gdGhlIGJ1aWxkLiBZb3UgbWF5IGhhdmUKLSAgICB0byBtYW51YWxseSByZW1vdmUgJChPQkpfRClcaV8qLm9iaiBmcm9tIG1zXG50Lm1hayBpZiB0aGUgYnVpbGQgcHJvY2VzcwotICAgIGNvbXBsYWlucyBhYm91dCBtaXNzaW5nIGZpbGVzIG9yIGZvcmJpZGRlbiBJREVBLiBBZ2FpbiB0aGUgZmlsZXMgcHJvdmlkZWQKLSAgICBpbiB0aGUgc3VidmVyc2lvbiByZXBvc2l0b3J5IGFyZSBhbHJlYWR5IGZpeGVkLgotCi0gICAgVGhlIE1TVkMgcHJvamVjdCBzaW1wbHkgaW52b2tlcyBQQ0J1aWxkL2J1aWxkX3NzbC5weSB0byBwZXJmb3JtCi0gICAgdGhlIGJ1aWxkLiAgVGhpcyBQeXRob24gc2NyaXB0IGxvY2F0ZXMgYW5kIGJ1aWxkcyB5b3VyIE9wZW5TU0wKLSAgICBpbnN0YWxsYXRpb24sIHRoZW4gaW52b2tlcyBhIHNpbXBsZSBtYWtlZmlsZSB0byBidWlsZCB0aGUgZmluYWwgLnB5ZC4KLQotICAgIGJ1aWxkX3NzbC5weSBhdHRlbXB0cyB0byBjYXRjaCB0aGUgbW9zdCBjb21tb24gZXJyb3JzIChzdWNoIGFzIG5vdAotICAgIGJlaW5nIGFibGUgdG8gZmluZCBPcGVuU1NMIHNvdXJjZXMsIG9yIG5vdCBiZWluZyBhYmxlIHRvIGZpbmQgYSBQZXJsCi0gICAgdGhhdCB3b3JrcyB3aXRoIE9wZW5TU0wpIGFuZCBnaXZlIGEgcmVhc29uYWJsZSBlcnJvciBtZXNzYWdlLgotICAgIElmIHlvdSBoYXZlIGEgcHJvYmxlbSB0aGF0IGRvZXNuJ3Qgc2VlbSB0byBiZSBoYW5kbGVkIGNvcnJlY3RseQotICAgIChlZywgeW91IGtub3cgeW91IGhhdmUgQWN0aXZlUGVybCBidXQgd2UgY2FuJ3QgZmluZCBpdCksIHBsZWFzZSB0YWtlCi0gICAgYSBwZWVrIGF0IGJ1aWxkX3NzbC5weSBhbmQgc3VnZ2VzdCBwYXRjaGVzLiAgTm90ZSB0aGF0IGJ1aWxkX3NzbC5weQotICAgIHNob3VsZCBiZSBhYmxlIHRvIGJlIHJ1biBkaXJlY3RseSBmcm9tIHRoZSBjb21tYW5kLWxpbmUuCi0KLSAgICBidWlsZF9zc2wucHkvTVNWQyBpc24ndCBjbGV2ZXIgZW5vdWdoIHRvIGNsZWFuIE9wZW5TU0wgLSB5b3UgbXVzdCBkbwotICAgIHRoaXMgYnkgaGFuZC4KLQotVGhlIHN1YnByb2plY3RzIGFib3ZlIHdyYXAgZXh0ZXJuYWwgcHJvamVjdHMgUHl0aG9uIGRvZXNuJ3QgY29udHJvbCwgYW5kIGFzCi1zdWNoLCBhIGxpdHRsZSBtb3JlIHdvcmsgaXMgcmVxdWlyZWQgaW4gb3JkZXIgdG8gZG93bmxvYWQgdGhlIHJlbGV2YW50IHNvdXJjZQotZmlsZXMgZm9yIGVhY2ggcHJvamVjdCBiZWZvcmUgdGhleSBjYW4gYmUgYnVpbHQuICBUaGUgYnVpbGRib3RzIGRvIHRoaXMgZWFjaAotdGltZSB0aGV5J3JlIGJ1aWx0LCBzbyB0aGUgZWFzaWVzdCBhcHByb2FjaCBpcyB0byBydW4gZWl0aGVyIGV4dGVybmFsLmJhdCBvcgotZXh0ZXJuYWwtYW1kNjQuYmF0IGluIHRoZSAuLlxUb29sc1xidWlsZGJvdCBkaXJlY3RvcnkgZnJvbSAuLlwsIGkuZS46Ci0KLSAgICBDOlwuLlxzdm4ucHl0aG9uLm9yZ1xwcm9qZWN0c1xweXRob25cdHJ1bmtcUENidWlsZD5jZCAuLgotICAgIEM6XC4uXHN2bi5weXRob24ub3JnXHByb2plY3RzXHB5dGhvblx0cnVuaz5Ub29sc1xidWlsZGJvdFxleHRlcm5hbC5iYXQKLQotVGhpcyBleHRyYWN0cyBhbGwgdGhlIGV4dGVybmFsIHN1YnByb2plY3RzIGZyb20gaHR0cDovL3N2bi5weXRob24ub3JnL2V4dGVybmFsCi12aWEgU3VidmVyc2lvbiAoc28geW91J2xsIG5lZWQgYW4gc3ZuLmV4ZSBvbiB5b3VyIFBBVEgpIGFuZCBwbGFjZXMgdGhlbSBpbgotLi5cLi4gKHJlbGF0aXZlIHRvIHRoaXMgZGlyZWN0b3J5KS4gIFRoZSBleHRlcm5hbCgtYW1kNjQpLmJhdCBzY3JpcHRzIHdpbGwKLWFsc28gYnVpbGQgYSBkZWJ1ZyBidWlsZCBvZiBUY2wvVGs7IHRoZXJlIGFyZW4ndCBhbnkgZXF1aXZhbGVudCBiYXRjaCBmaWxlcwotZm9yIGJ1aWxkaW5nIHJlbGVhc2UgdmVyc2lvbnMgb2YgVGNsL1RrIGx5aW5nIGFyb3VuZCBpbiB0aGUgVG9vbHNcYnVpbGRib3QKLWRpcmVjdG9yeS4gIElmIHlvdSBuZWVkIHRvIGJ1aWxkIGEgcmVsZWFzZSB2ZXJzaW9uIG9mIFRjbC9UayBpdCBpc24ndCBoYXJkCi10aG91Z2gsIHRha2UgYSBsb29rIGF0IHRoZSByZWxldmFudCBleHRlcm5hbCgtYW1kNjQpLmJhdCBmaWxlIGFuZCBmaW5kIHRoZQotdHdvIG5tYWtlIGxpbmVzLCB0aGVuIGNhbGwgZWFjaCBvbmUgd2l0aG91dCB0aGUgJ0RFQlVHPTEnIHBhcmFtZXRlciwgaS5lLjoKLQotVGhlIGV4dGVybmFsLWFtZDY0LmJhdCBmaWxlIGNvbnRhaW5zIHRoaXMgZm9yIHRjbDoKLSAgICBubWFrZSAtZiBtYWtlZmlsZS52YyBERUJVRz0xIE1BQ0hJTkU9QU1ENjQgSU5TVEFMTERJUj0uLlwuLlx0Y2x0azY0IGNsZWFuIGFsbCBpbnN0YWxsCi0KLVNvIGZvciBhIHJlbGVhc2UgYnVpbGQsIHlvdSdkIGNhbGwgaXQgYXM6Ci0gICAgbm1ha2UgLWYgbWFrZWZpbGUudmMgTUFDSElORT1BTUQ2NCBJTlNUQUxMRElSPS4uXC4uXHRjbHRrNjQgY2xlYW4gYWxsIGluc3RhbGwKLQotICAgIFhYWCBTaG91bGQgd2UgY29tcGlsZSB3aXRoIE9QVFM9dGhyZWFkcz8KLSAgICBYWFggT3VyIGluc3RhbGxlciBjb3BpZXMgYSBsb3Qgb2Ygc3R1ZmYgb3V0IG9mIHRoZSBUY2wvVGsgaW5zdGFsbAotICAgIFhYWCBkaXJlY3RvcnkuICBJcyBhbGwgb2YgdGhhdCByZWFsbHkgbmVlZGVkIGZvciBQeXRob24gdXNlIG9mIFRjbC9Uaz8KLQotVGhpcyB3aWxsIGJlIGNsZWFuZWQgdXAgaW4gdGhlIGZ1dHVyZTsgaWRlYWxseSBUY2wvVGsgd2lsbCBiZSBicm91Z2h0IGludG8gb3VyCi1wY2J1aWxkLnNsbiBhcyBjdXN0b20gLnZjeHByb2ogZmlsZXMsIGp1c3QgYXMgd2UndmUgcmVjZW50bHkgZG9uZSB3aXRoIHRoZQotc3FsaXRlMy52Y3hwcm9qIGZpbGUsIHdoaWNoIHdpbGwgcmVtb3ZlIHRoZSBuZWVkIGZvciBUY2wvVGsgdG8gYmUgYnVpbHQKLXNlcGFyYXRlbHkgdmlhIGEgYmF0Y2ggZmlsZS4KLQotWFhYIHRyZW50Lm5lbHNvbiAwMi1BcHItMDg6Ci0gICAgSGF2aW5nIHRoZSBleHRlcm5hbCBzdWJwcm9qZWN0cyBpbiAuLlwuLiByZWxhdGl2ZSB0byB0aGlzIGRpcmVjdG9yeSBpcyBhCi0gICAgYml0IG9mIGEgbnVpc2FuY2Ugd2hlbiB5b3UncmUgd29ya2luZyBvbiBweTNrIGFuZCB0cnVuayBpbiBwYXJhbGxlbCBhbmQKLSAgICB5b3VyIGRpcmVjdG9yeSBsYXlvdXQgbWltaWNzIHRoYXQgb2YgUHl0aG9uJ3Mgc3VidmVyc2lvbiBsYXlvdXQsIGUuZy46Ci0KLSAgICAgICAgQzpcLi5cc3ZuLnB5dGhvbi5vcmdccHJvamVjdHNccHl0aG9uXHRydW5rCi0gICAgICAgIEM6XC4uXHN2bi5weXRob24ub3JnXHByb2plY3RzXHB5dGhvblxicmFuY2hlc1xweTNrCi0gICAgICAgIEM6XC4uXHN2bi5weXRob24ub3JnXHByb2plY3RzXHB5dGhvblxicmFuY2hlc1xyZWxlYXNlMjUtbWFpbnQKLQotICAgIEknZCBsaWtlIHRvIGNoYW5nZSB0aGluZ3Mgc28gdGhhdCBleHRlcm5hbCBzdWJwcm9qZWN0cyBhcmUgZmV0Y2hlZCBmcm9tCi0gICAgLi5cZXh0ZXJuYWwgaW5zdGVhZCBvZiAuLlwuLiwgdGhlbiBwcm92aWRlIHNvbWUgaGVscGVyIHNjcmlwdHMgb3IgYmF0Y2gKLSAgICBmaWxlcyB0aGF0IHdvdWxkIHNldCB1cCBhIG5ldyAuLlxleHRlcm5hbCBkaXJlY3Rvcnkgd2l0aCBzdm4gY2hlY2tvdXRzIG9mCi0gICAgdGhlIHJlbGV2YW50IGJyYW5jaGVzIGluIGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy9wcm9qZWN0cy9leHRlcm5hbC8sIG9yCi0gICAgYWx0ZXJuYXRpdmVseSwgdXNlIGp1bmN0aW9ucyB0byBsaW5rIC4uXGV4dGVybmFsIHdpdGggYSBwcmUtZXhpc3RpbmcKLSAgICBleHRlcm5hbHMgZGlyZWN0b3J5IGJlaW5nIHVzZWQgYnkgYW5vdGhlciBicmFuY2guICBpLmUuIGlmIEknbSB1c3VhbGx5Ci0gICAgd29ya2luZyBvbiB0cnVuayAoYW5kIGhhdmUgcHJldmlvdXNseSBjcmVhdGVkIHRydW5rXGV4dGVybmFsIHZpYSB0aGUKLSAgICBwcm92aWRlZCBiYXRjaCBmaWxlKSwgYW5kIHdhbnQgdG8gZG8gc29tZSB3b3JrIG9uIHB5M2ssIEknZCBzZXQgdXAgYQotICAgIGp1bmN0aW9uIGFzIGZvbGxvd3MgKHVzaW5nIHRoZSBkaXJlY3Rvcnkgc3RydWN0dXJlIGFib3ZlIGFzIGFuIGV4YW1wbGUpOgotCi0gICAgICAgIEM6XC4uXHB5dGhvblx0cnVua1xleHRlcm5hbCA8LSBhbHJlYWR5IGV4aXN0cyBhbmQgaGFzIGJ1aWx0IHZlcnNpb25zCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgZXh0ZXJuYWwgc3VicHJvamVjdHMKLQotICAgICAgICBDOlwuLlxweXRob25cYnJhbmNoZXNccHkzaz5saW5rZC5leGUgZXh0ZXJuYWwgLi5cLi5cdHJ1bmtcZXh0ZXJuYWwKLSAgICAgICAgTGluayBjcmVhdGVkIGF0OiBleHRlcm5hbAotCi0gICAgT25seSBhIHNsaWdodCB0d2VhayB3b3VsZCBiZSBuZWVkZWQgdG8gdGhlIGJ1aWxkYm90cyBzdWNoIHRoYXQgYm90cwotICAgIGJ1aWxkaW5nIHRydW5rIGFuZCBweTNrIGNvdWxkIG1ha2UgdXNlIG9mIHRoZSBzYW1lIGZhY2lsaXR5LiAgKDIuNS54Ci0gICAgYnVpbGRzIG5lZWQgdG8gYmUga2VwdCBzZXBhcmF0ZSBhcyB0aGV5J3JlIHVzaW5nIFZpc3VhbCBTdHVkaW8gNy4xLikKLS9YWFggdHJlbnQubmVsc29uIDAyLUFwci0wOAotCi1CdWlsZGluZyBmb3IgSXRhbml1bQotLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotT2ZmaWNpYWwgc3VwcG9ydCBmb3IgSXRhbml1bSBidWlsZHMgaGF2ZSBiZWVuIGRyb3BwZWQgZnJvbSB0aGUgYnVpbGQuIFBsZWFzZQotY29udGFjdCB1cyBhbmQgcHJvdmlkZSBwYXRjaGVzIGlmIHlvdSBhcmUgaW50ZXJlc3RlZCBpbiBJdGFuaXVtIGJ1aWxkcy4KLQotQnVpbGRpbmcgZm9yIEFNRDY0Ci0tLS0tLS0tLS0tLS0tLS0tLS0KLQotVGhlIGJ1aWxkIHByb2Nlc3MgZm9yIEFNRDY0IC8geDY0IGlzIHZlcnkgc2ltaWxhciB0byBzdGFuZGFyZCBidWlsZHMuIFlvdSBqdXN0Ci1oYXZlIHRvIHNldCB4NjQgYXMgcGxhdGZvcm0uIEluIGFkZGl0aW9uLCB0aGUgSE9TVF9QWVRIT04gZW52aXJvbm1lbnQgdmFyaWFibGUKLW11c3QgcG9pbnQgdG8gYSBQeXRob24gaW50ZXJwcmV0ZXIgKGF0IGxlYXN0IDIuNCksIHRvIHN1cHBvcnQgY3Jvc3MtY29tcGlsYXRpb24uCi0KLUJ1aWxkaW5nIFB5dGhvbiBVc2luZyB0aGUgZnJlZSBNUyBUb29sa2l0IENvbXBpbGVyCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1NaWNyb3NvZnQgaGFzIHdpdGhkcmF3biB0aGUgZnJlZSBNUyBUb29sa2l0IENvbXBpbGVyLCBzbyB0aGlzIGNhbiBubyBsb25nZXIKLWJlIGNvbnNpZGVyZWQgYSBzdXBwb3J0ZWQgb3B0aW9uLiBJbnN0ZWFkIHlvdSBjYW4gdXNlIHRoZSBmcmVlIFZTIEMrKyBFeHByZXNzCi1FZGl0aW9uLgotCi1Qcm9maWxlIEd1aWRlZCBPcHRpbWl6YXRpb24KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1UaGUgc29sdXRpb24gaGFzIHR3byBjb25maWd1cmF0aW9ucyBmb3IgUEdPLiBUaGUgUEdJbnN0cnVtZW50Ci1jb25maWd1cmF0aW9uIG11c3QgYmUgYnVpbGQgZmlyc3QuIFRoZSBQR0luc3RydW1lbnQgYmluYXJpZXMgYXJlCi1saW5rZWQgYWdhaW5zdCBhIHByb2ZpbGluZyBsaWJyYXJ5IGFuZCBjb250YWluIGV4dHJhIGRlYnVnCi1pbmZvcm1hdGlvbi4gVGhlIFBHVXBkYXRlIGNvbmZpZ3VyYXRpb24gdGFrZXMgdGhlIHByb2ZpbGluZyBkYXRhIGFuZAotZ2VuZXJhdGVzIG9wdGltaXplZCBiaW5hcmllcy4KLQotVGhlIGJ1aWxkX3Bnby5iYXQgc2NyaXB0IGF1dG9tYXRlcyB0aGUgY3JlYXRpb24gb2Ygb3B0aW1pemVkIGJpbmFyaWVzLiBJdAotY3JlYXRlcyB0aGUgUEdJIGZpbGVzLCBydW5zIHRoZSB1bml0IHRlc3Qgc3VpdGUgb3IgUHlCZW5jaCB3aXRoIHRoZSBQR0kKLXB5dGhvbiBhbmQgZmluYWxseSBjcmVhdGVzIHRoZSBvcHRpbWl6ZWQgZmlsZXMuCi0KLWh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9lN2szMmY0ayhWUy4xMDApLmFzcHgKLQotU3RhdGljIGxpYnJhcnkKLS0tLS0tLS0tLS0tLS0tCi0KLVRoZSBzb2x1dGlvbiBoYXMgbm8gY29uZmlndXJhdGlvbiBmb3Igc3RhdGljIGxpYnJhcmllcy4gSG93ZXZlciBpdCBpcyBlYXN5Ci1pdCBidWlsZCBhIHN0YXRpYyBsaWJyYXJ5IGluc3RlYWQgb2YgYSBETEwuIFlvdSBzaW1wbHkgaGF2ZSB0byBzZXQgdGhlCi0iQ29uZmlndXJhdGlvbiBUeXBlIiB0byAiU3RhdGljIExpYnJhcnkgKC5saWIpIiBhbmQgYWx0ZXIgdGhlIHByZXByb2Nlc3NvcgotbWFjcm8gIlB5X0VOQUJMRV9TSEFSRUQiIHRvICJQeV9OT19FTkFCTEVfU0hBUkVEIi4gWW91IG1heSBhbHNvIGhhdmUgdG8KLWNoYW5nZSB0aGUgIlJ1bnRpbWUgTGlicmFyeSIgZnJvbSAiTXVsdGktdGhyZWFkZWQgRExMICgvTUQpIiB0bwotIk11bHRpLXRocmVhZGVkICgvTVQpIi4KLQotVmlzdWFsIFN0dWRpbyBwcm9wZXJ0aWVzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotVGhlIFBDYnVpbGQgc29sdXRpb24gbWFrZXMgaGVhdnkgdXNlIG9mIFZpc3VhbCBTdHVkaW8gcHJvcGVydHkgZmlsZXMKLSgqLnByb3BzKS4gVGhlIHByb3BlcnRpZXMgY2FuIGJlIHZpZXdlZCBhbmQgYWx0ZXJlZCBpbiB0aGUgUHJvcGVydHkKLU1hbmFnZXIgKFZpZXcgLT4gT3RoZXIgV2luZG93cyAtPiBQcm9wZXJ0eSBNYW5hZ2VyKS4KLQotICogZGVidWcgKGRlYnVnIG1hY3JvOiBfREVCVUcpCi0gKiBwZ2luc3RydW1lbnQgKFBHTykKLSAqIHBndXBkYXRlIChQR08pCi0gICAgKy0tIHBnaW5zdHJ1bWVudAotICogcHlkIChweXRob24gZXh0ZW5zaW9uLCByZWxlYXNlIGJ1aWxkKQotICAgICstLSByZWxlYXNlCi0gICAgKy0tIHB5cHJvamVjdAotICogcHlkX2QgKHB5dGhvbiBleHRlbnNpb24sIGRlYnVnIGJ1aWxkKQotICAgICstLSBkZWJ1ZwotICAgICstLSBweXByb2plY3QKLSAqIHB5cHJvamVjdCAoYmFzZSBzZXR0aW5ncyBmb3IgYWxsIHByb2plY3RzLCB1c2VyIG1hY3JvcyBsaWtlIFB5RGxsTmFtZSkKLSAqIHJlbGVhc2UgKHJlbGVhc2UgbWFjcm86IE5ERUJVRykKLSAqIHg2NCAoQU1ENjQgLyB4NjQgcGxhdGZvcm0gc3BlY2lmaWMgc2V0dGluZ3MpCi0KLVRoZSBweXByb2plY3QgcHJvcGVydHlmaWxlIGRlZmluZXMgX1dJTjMyIGFuZCB4NjQgZGVmaW5lcyBfV0lONjQgYW5kIF9NX1g2NAotYWx0aG91Z2ggdGhlIG1hY3JvcyBhcmUgc2V0IGJ5IHRoZSBjb21waWxlciwgdG9vLiBUaGUgR1VJIGRvZXNuJ3QgYWx3YXlzIGtub3cKLWFib3V0IHRoZSBtYWNyb3MgYW5kIGNvbmZ1c2UgdGhlIHVzZXIgd2l0aCBmYWxzZSBpbmZvcm1hdGlvbi4KLQotWU9VUiBPV04gRVhURU5TSU9OIERMTHMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUlmIHlvdSB3YW50IHRvIGNyZWF0ZSB5b3VyIG93biBleHRlbnNpb24gbW9kdWxlIERMTCwgdGhlcmUncyBhbiBleGFtcGxlCi13aXRoIGVhc3ktdG8tZm9sbG93IGluc3RydWN0aW9ucyBpbiAuLi9QQy9leGFtcGxlLzsgcmVhZCB0aGUgZmlsZQotcmVhZG1lLnR4dCB0aGVyZSBmaXJzdC4KK0J1aWxkaW5nIFB5dGhvbiB1c2luZyBNaWNyb3NvZnQgVmlzdWFsIEMrKw0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKw0KK1RoaXMgZGlyZWN0b3J5IGlzIHVzZWQgdG8gYnVpbGQgQ1B5dGhvbiBmb3IgTWljcm9zb2Z0IFdpbmRvd3MgTlQgdmVyc2lvbg0KKzUuMSBvciBoaWdoZXIgKFdpbmRvd3MgWFAsIFdpbmRvd3MgU2VydmVyIDIwMDMsIG9yIGxhdGVyKSBvbiAzMiBhbmQgNjQNCitiaXQgcGxhdGZvcm1zLiAgVXNpbmcgdGhpcyBkaXJlY3RvcnkgcmVxdWlyZXMgYW4gaW5zdGFsbGF0aW9uIG9mDQorTWljcm9zb2Z0IFZpc3VhbCBDKysgMjAxMCAoTVNWQyAxMC4wKSBvZiBhbnkgZWRpdGlvbi4gIFRoZSBzcGVjaWZpYw0KK3JlcXVpcmVtZW50cyBhcmUgYXMgZm9sbG93czoNCisNCitWaXN1YWwgQysrIDIwMTAgRXhwcmVzcyBFZGl0aW9uDQorICAgIFJlcXVpcmVkIGZvciBidWlsZGluZyAzMi1iaXQgRGVidWcgYW5kIFJlbGVhc2UgY29uZmlndXJhdGlvbiBidWlsZHMuDQorICAgIFRoZSBQeXRob24gYnVpbGQgc29sdXRpb24gcGNidWlsZC5zbG4gbWFrZXMgdXNlIG9mIFNvbHV0aW9uIEZvbGRlcnMsDQorICAgIHdoaWNoIHRoaXMgZWRpdGlvbiBkb2VzIG5vdCBzdXBwb3J0LiAgQW55IHRpbWUgcGNidWlsZC5zbG4gaXMgb3BlbmVkDQorICAgIG9yIHJlbG9hZGVkIGJ5IFZpc3VhbCBDKyssIGEgd2FybmluZyBhYm91dCBTb2x1dGlvbiBGb2xkZXJzIHdpbGwgYmUNCisgICAgZGlzcGxheWVkIHdoaWNoIGNhbiBiZSBzYWZlbHkgZGlzbWlzc2VkIHdpdGggbm8gaW1wYWN0IG9uIHlvdXINCisgICAgYWJpbGl0eSB0byBidWlsZCBQeXRob24uDQorVmlzdWFsIFN0dWRpbyAyMDEwIFByb2Zlc3Npb25hbCBFZGl0aW9uDQorICAgIFJlcXVpcmVkIGZvciBidWlsZGluZyA2NC1iaXQgRGVidWcgYW5kIFJlbGVhc2UgY29uZmlndXJhdGlvbiBidWlsZHMNCitWaXN1YWwgU3R1ZGlvIDIwMTAgUHJlbWl1bSBFZGl0aW9uDQorICAgIFJlcXVpcmVkIGZvciBidWlsZGluZyBSZWxlYXNlIGNvbmZpZ3VyYXRpb24gYnVpbGRzIHRoYXQgbWFrZSB1c2Ugb2YNCisgICAgUHJvZmlsZSBHdWlkZWQgT3B0aW1pemF0aW9uIChQR08pLCBvbiBlaXRoZXIgcGxhdGZvcm0uDQorDQorSW5zdGFsbGluZyBTZXJ2aWNlIFBhY2sgMSBmb3IgVmlzdWFsIFN0dWRpbyAyMDEwIGlzIGhpZ2hseSByZWNvbW1lbmRlZA0KK3RvIGF2b2lkIExOSzExMjMgZXJyb3JzLg0KKw0KK0FsbCB5b3UgbmVlZCB0byBkbyB0byBidWlsZCBpcyBvcGVuIHRoZSBzb2x1dGlvbiAicGNidWlsZC5zbG4iIGluIFZpc3VhbA0KK1N0dWRpbywgc2VsZWN0IHRoZSBkZXNpcmVkIGNvbWJpbmF0aW9uIG9mIGNvbmZpZ3VyYXRpb24gYW5kIHBsYXRmb3JtLA0KK3RoZW4gYnVpbGQgd2l0aCAiQnVpbGQgU29sdXRpb24iIG9yIHRoZSBGNyBrZXlib2FyZCBzaG9ydGN1dC4gIFlvdSBjYW4NCithbHNvIGJ1aWxkIGZyb20gdGhlIGNvbW1hbmQgbGluZSB1c2luZyB0aGUgImJ1aWxkLmJhdCIgc2NyaXB0IGluIHRoaXMNCitkaXJlY3RvcnkuICBUaGUgc29sdXRpb24gaXMgY29uZmlndXJlZCB0byBidWlsZCB0aGUgcHJvamVjdHMgaW4gdGhlDQorY29ycmVjdCBvcmRlci4NCisNCitUaGUgc29sdXRpb24gY3VycmVudGx5IHN1cHBvcnRzIHR3byBwbGF0Zm9ybXMuICBUaGUgV2luMzIgcGxhdGZvcm0gaXMNCit1c2VkIHRvIGJ1aWxkIHN0YW5kYXJkIHg4Ni1jb21wYXRpYmxlIDMyLWJpdCBiaW5hcmllcywgb3V0cHV0IGludG8gdGhpcw0KK2RpcmVjdG9yeS4gIFRoZSB4NjQgcGxhdGZvcm0gaXMgdXNlZCBmb3IgYnVpbGRpbmcgNjQtYml0IEFNRDY0IChha2ENCit4ODZfNjQgb3IgRU02NFQpIGJpbmFyaWVzLCBvdXRwdXQgaW50byB0aGUgYW1kNjQgc3ViLWRpcmVjdG9yeSB3aGljaA0KK3dpbGwgYmUgY3JlYXRlZCBpZiBpdCBkb2Vzbid0IGFscmVhZHkgZXhpc3QuICBUaGUgSXRhbml1bSAoSUEtNjQpDQorcGxhdGZvcm0gaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4gIFNlZSB0aGUgIkJ1aWxkaW5nIGZvciBBTUQ2NCIgc2VjdGlvbg0KK2JlbG93IGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IDY0LWJpdCBidWlsZHMuDQorDQorRm91ciBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHN1cHBvcnRlZCBieSB0aGUgc29sdXRpb246DQorRGVidWcNCisgICAgVXNlZCB0byBidWlsZCBQeXRob24gd2l0aCBleHRyYSBkZWJ1Z2dpbmcgY2FwYWJpbGl0aWVzLCBlcXVpdmFsZW50DQorICAgIHRvIHVzaW5nIC4vY29uZmlndXJlIC0td2l0aC1weWRlYnVnIG9uIFVOSVguICBBbGwgYmluYXJpZXMgYnVpbHQNCisgICAgdXNpbmcgdGhpcyBjb25maWd1cmF0aW9uIGhhdmUgIl9kIiBhZGRlZCB0byB0aGVpciBuYW1lOg0KKyAgICBweXRob24zNF9kLmRsbCwgcHl0aG9uX2QuZXhlLCBwYXJzZXJfZC5weWQsIGFuZCBzbyBvbi4gIEJvdGggdGhlDQorICAgIGJ1aWxkIGFuZCBydCAocnVuIHRlc3QpIGJhdGNoIGZpbGVzIGluIHRoaXMgZGlyZWN0b3J5IGFjY2VwdCBhIC1kDQorICAgIG9wdGlvbiBmb3IgZGVidWcgYnVpbGRzLiAgSWYgeW91IGFyZSBidWlsZGluZyBQeXRob24gdG8gaGVscCB3aXRoDQorICAgIGRldmVsb3BtZW50IG9mIENQeXRob24sIHlvdSB3aWxsIG1vc3QgbGlrZWx5IHVzZSB0aGlzIGNvbmZpZ3VyYXRpb24uDQorUEdJbnN0cnVtZW50LCBQR1VwZGF0ZQ0KKyAgICBVc2VkIHRvIGJ1aWxkIFB5dGhvbiBpbiBSZWxlYXNlIGNvbmZpZ3VyYXRpb24gdXNpbmcgUEdPLCB3aGljaA0KKyAgICByZXF1aXJlcyBQcmVtaXVtIEVkaXRpb24gb2YgVmlzdWFsIFN0dWRpby4gIFNlZSB0aGUgIlByb2ZpbGUNCisgICAgR3VpZGVkIE9wdGltaXphdGlvbiIgc2VjdGlvbiBiZWxvdyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4gIEJ1aWxkDQorICAgIG91dHB1dCBmcm9tIGVhY2ggb2YgdGhlc2UgY29uZmlndXJhdGlvbnMgbGFuZHMgaW4gaXRzIG93bg0KKyAgICBzdWItZGlyZWN0b3J5IG9mIHRoaXMgZGlyZWN0b3J5LiAgVGhlIG9mZmljaWFsIFB5dGhvbiByZWxlYXNlcyBhcmUNCisgICAgYnVpbHQgdXNpbmcgdGhlc2UgY29uZmlndXJhdGlvbnMuDQorUmVsZWFzZQ0KKyAgICBVc2VkIHRvIGJ1aWxkIFB5dGhvbiBhcyBpdCBpcyBtZWFudCB0byBiZSB1c2VkIGluIHByb2R1Y3Rpb24NCisgICAgc2V0dGluZ3MsIHRob3VnaCB3aXRob3V0IFBHTy4NCisNCisNCitMZWdhY3kgc3VwcG9ydA0KKy0tLS0tLS0tLS0tLS0tDQorDQorWW91IGNhbiBmaW5kIGJ1aWxkIGRpcmVjdG9yaWVzIGZvciBvbGRlciB2ZXJzaW9ucyBvZiBWaXN1YWwgU3R1ZGlvIGFuZA0KK1Zpc3VhbCBDKysgaW4gdGhlIFBDIGRpcmVjdG9yeS4gVGhlIGxlZ2FjeSBidWlsZCBkaXJlY3RvcmllcyBhcmUgbm8NCitsb25nZXIgYWN0aXZlbHkgbWFpbnRhaW5lZCBhbmQgbWF5IG5vdCB3b3JrIG91dCBvZiB0aGUgYm94Lg0KKw0KK0N1cnJlbnRseSwgdGhlIG9ubHkgbGVnYWN5IGJ1aWxkIGRpcmVjdG9yeSBpcyBQQ1xWUzkuMCwgZm9yIFZpc3VhbA0KK1N0dWRpbyAyMDA4ICg5LjApLg0KKw0KKw0KK0MgUnVudGltZQ0KKy0tLS0tLS0tLQ0KKw0KK1Zpc3VhbCBTdHVkaW8gMjAxMCB1c2VzIHZlcnNpb24gMTAgb2YgdGhlIEMgcnVudGltZSAoTVNWQ1JUMTApLiAgVGhlDQorZXhlY3V0YWJsZXMgbm8gbG9uZ2VyIHVzZSB0aGUgIlNpZGUgYnkgU2lkZSIgYXNzZW1ibGllcyB1c2VkIGluIHByZXZpb3VzDQordmVyc2lvbnMgb2YgdGhlIGNvbXBpbGVyLiAgVGhpcyBzaW1wbGlmaWVzIGRpc3RyaWJ1dGlvbiBvZiBhcHBsaWNhdGlvbnMuDQorDQorVGhlIHJ1biB0aW1lIGxpYnJhcmllcyBhcmUgYXZhaWxhYmxlIHVuZGVyIHRoZSBWQy9SZWRpc3QgZm9sZGVyIG9mIHlvdXINCitWaXN1YWwgU3R1ZGlvIGRpc3RyaWJ1dGlvbi4gRm9yIG1vcmUgaW5mbywgc2VlIHRoZSBSZWFkbWUgaW4gdGhlDQorVkMvUmVkaXN0IGZvbGRlci4NCisNCisNCitTdWItUHJvamVjdHMNCistLS0tLS0tLS0tLS0NCisNCitUaGUgQ1B5dGhvbiBwcm9qZWN0IGlzIHNwbGl0IHVwIGludG8gc2V2ZXJhbCBzbWFsbGVyIHN1Yi1wcm9qZWN0cyB3aGljaA0KK2FyZSBtYW5hZ2VkIGJ5IHRoZSBwY2J1aWxkLnNsbiBzb2x1dGlvbiBmaWxlLiAgRWFjaCBzdWItcHJvamVjdCBpcw0KK3JlcHJlc2VudGVkIGJ5IGEgLnZjeHByb2ogYW5kIGEgLnZjeHByb2ouZmlsdGVycyBmaWxlIHN0YXJ0aW5nIHdpdGggdGhlDQorbmFtZSBvZiB0aGUgc3ViLXByb2plY3QuICBUaGVzZSBzdWItcHJvamVjdHMgZmFsbCBpbnRvIGEgZmV3IGdlbmVyYWwNCitjYXRlZ29yaWVzOg0KKw0KK1RoZSBmb2xsb3dpbmcgc3ViLXByb2plY3RzIHJlcHJlc2VudCB0aGUgYmFyZSBtaW5pbXVtIHJlcXVpcmVkIHRvIGJ1aWxkDQorYSBmdW5jdGlvbmluZyBDUHl0aG9uIGludGVycHJldGVyLiAgSWYgbm90aGluZyBlbHNlIGJ1aWxkcyBidXQgdGhlc2UsDQoreW91J2xsIGhhdmUgYSB2ZXJ5IGxpbWl0ZWQgYnV0IHVzYWJsZSBweXRob24uZXhlOg0KK3B5dGhvbmNvcmUNCisgICAgLmRsbCBhbmQgLmxpYg0KK3B5dGhvbg0KKyAgICAuZXhlDQora2lsbF9weXRob24NCisgICAga2lsbF9weXRob24uZXhlLCBhIHNtYWxsIHByb2dyYW0gZGVzaWduZWQgdG8ga2lsbCBhbnkgaW5zdGFuY2VzIG9mDQorICAgIHB5dGhvbihfZCkuZXhlIHRoYXQgYXJlIHJ1bm5pbmcgYW5kIGxpdmUgaW4gdGhlIGJ1aWxkIG91dHB1dA0KKyAgICBkaXJlY3Rvcnk7IHRoaXMgaXMgbWVhbnQgdG8gYXZvaWQgYnVpbGQgaXNzdWVzIGR1ZSB0byBsb2NrZWQgZmlsZXMNCittYWtlX2J1aWxkaW5mbywgbWFrZV92ZXJzaW9uaW5mbw0KKyAgICBoZWxwZXJzIHRvIHByb3ZpZGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIHRvIHRoZSBidWlsZCBwcm9jZXNzDQorDQorVGhlc2Ugc3ViLXByb2plY3RzIHByb3ZpZGUgZXh0cmEgZXhlY3V0YWJsZXMgdGhhdCBhcmUgdXNlZnVsIGZvciBydW5uaW5nDQorQ1B5dGhvbiBpbiBkaWZmZXJlbnQgd2F5czoNCitweXRob253DQorICAgIHB5dGhvbncuZXhlLCBhIHZhcmlhbnQgb2YgcHl0aG9uLmV4ZSB0aGF0IGRvZXNuJ3Qgb3BlbiBhIENvbW1hbmQNCisgICAgUHJvbXB0IHdpbmRvdw0KK3B5bGF1bmNoZXINCisgICAgcHkuZXhlLCB0aGUgUHl0aG9uIExhdW5jaGVyIGZvciBXaW5kb3dzLCBzZWUNCisgICAgICAgIGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvMy91c2luZy93aW5kb3dzLmh0bWwjbGF1bmNoZXINCitweXdsYXVuY2hlcg0KKyAgICBweXcuZXhlLCBhIHZhcmlhbnQgb2YgcHkuZXhlIHRoYXQgZG9lc24ndCBvcGVuIGEgQ29tbWFuZCBQcm9tcHQNCisgICAgd2luZG93DQorX3Rlc3RlbWJlZA0KKyAgICBfdGVzdGVtYmVkLmV4ZSwgYSBzbWFsbCBwcm9ncmFtIHRoYXQgZW1iZWRzIFB5dGhvbiBmb3IgdGVzdGluZw0KKyAgICBwdXJwb3NlcywgdXNlZCBieSB0ZXN0X2NhcGkucHkNCisNCitUaGVzZSBhcmUgbWlzY2VsbGFuZW91cyBzdWItcHJvamVjdHMgdGhhdCBkb24ndCByZWFsbHkgZml0IHRoZSBvdGhlcg0KK2NhdGVnb3JpZXMuICBCeSBkZWZhdWx0LCB0aGVzZSBwcm9qZWN0cyBkbyBub3QgYnVpbGQgaW4gRGVidWcNCitjb25maWd1cmF0aW9uOg0KK19mcmVlemVfaW1wb3J0bGliDQorICAgIF9mcmVlemVfaW1wb3J0bGliLmV4ZSwgdXNlZCB0byByZWdlbmVyYXRlIFB5dGhvblxpbXBvcnRsaWIuaCBhZnRlcg0KKyAgICBjaGFuZ2VzIGhhdmUgYmVlbiBtYWRlIHRvIExpYlxpbXBvcnRsaWJcX2Jvb3RzdHJhcC5weQ0KK2JkaXN0X3dpbmluc3QNCisgICAgLi5cTGliXGRpc3R1dGlsc1xjb21tYW5kXHdpbmluc3QtMTAuMFstYW1kNjRdLmV4ZSwgdGhlIGJhc2UNCisgICAgZXhlY3V0YWJsZSB1c2VkIGJ5IHRoZSBkaXN0dXRpbHMgYmRpc3Rfd2luaW5zdCBjb21tYW5kDQorcHl0aG9uM2RsbA0KKyAgICBweXRob24zLmRsbCwgdGhlIFBFUCAzODQgU3RhYmxlIEFCSSBkbGwNCit4eGxpbWl0ZWQNCisgICAgYnVpbGRzIGFuIGV4YW1wbGUgbW9kdWxlIHRoYXQgbWFrZXMgdXNlIG9mIHRoZSBQRVAgMzg0IFN0YWJsZSBBQkksDQorICAgIHNlZSBNb2R1bGVzXHh4bGltaXRlZC5jDQorDQorVGhlIGZvbGxvd2luZyBzdWItcHJvamVjdHMgYXJlIGZvciBpbmRpdmlkdWFsIG1vZHVsZXMgb2YgdGhlIHN0YW5kYXJkDQorbGlicmFyeSB3aGljaCBhcmUgaW1wbGVtZW50ZWQgaW4gQzsgZWFjaCBvbmUgYnVpbGRzIGEgRExMIChyZW5hbWVkIHRvDQorLnB5ZCkgb2YgdGhlIHNhbWUgbmFtZSBhcyB0aGUgcHJvamVjdDoNCitfY3R5cGVzDQorX2N0eXBlc190ZXN0DQorX2RlY2ltYWwNCitfZWxlbWVudHRyZWUNCitfaGFzaGxpYg0KK19tc2kNCitfbXVsdGlwcm9jZXNzaW5nDQorX292ZXJsYXBwZWQNCitfc29ja2V0DQorX3Rlc3RjYXBpDQorX3Rlc3RidWZmZXINCitfdGVzdGltcG9ydG11bHRpcGxlDQorcHlleHBhdA0KK3NlbGVjdA0KK3VuaWNvZGVkYXRhDQord2luc291bmQNCisNCitUaGUgZm9sbG93aW5nIFB5dGhvbi1jb250cm9sbGVkIHN1Yi1wcm9qZWN0cyB3cmFwIGV4dGVybmFsIHByb2plY3RzLg0KK05vdGUgdGhhdCB0aGVzZSBleHRlcm5hbCBsaWJyYXJpZXMgYXJlIG5vdCBuZWNlc3NhcnkgZm9yIGEgd29ya2luZw0KK2ludGVycHJldGVyLCBidXQgdGhleSBkbyBpbXBsZW1lbnQgc2V2ZXJhbCBtYWpvciBmZWF0dXJlcy4gIFNlZSB0aGUNCisiR2V0dGluZyBFeHRlcm5hbCBTb3VyY2VzIiBzZWN0aW9uIGJlbG93IGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorYWJvdXQgZ2V0dGluZyB0aGUgc291cmNlIGZvciBidWlsZGluZyB0aGVzZSBsaWJyYXJpZXMuICBUaGUgc3ViLXByb2plY3RzDQorYXJlOg0KK19iejINCisgICAgUHl0aG9uIHdyYXBwZXIgZm9yIHZlcnNpb24gMS4wLjYgb2YgdGhlIGxpYmJ6aXAyIGNvbXByZXNzaW9uIGxpYnJhcnkNCisgICAgSG9tZXBhZ2U6DQorICAgICAgICBodHRwOi8vd3d3LmJ6aXAub3JnLw0KK19sem1hDQorICAgIFB5dGhvbiB3cmFwcGVyIGZvciB0aGUgbGlibHptYSBjb21wcmVzc2lvbiBsaWJyYXJ5LCB1c2luZyBwcmUtYnVpbHQNCisgICAgYmluYXJpZXMgb2YgWFogVXRpbHMgdmVyc2lvbiA1LjAuNQ0KKyAgICBIb21lcGFnZToNCisgICAgICAgIGh0dHA6Ly90dWthYW5pLm9yZy94ei8NCitfc3NsDQorICAgIFB5dGhvbiB3cmFwcGVyIGZvciB2ZXJzaW9uIDEuMC4yZCBvZiB0aGUgT3BlblNTTCBzZWN1cmUgc29ja2V0cw0KKyAgICBsaWJyYXJ5LCB3aGljaCBpcyBidWlsdCBieSBzc2wudmN4cHJvag0KKyAgICBIb21lcGFnZToNCisgICAgICAgIGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvDQorDQorICAgIEJ1aWxkaW5nIE9wZW5TU0wgcmVxdWlyZXMgbmFzbS5leGUgKHRoZSBOZXR3aWRlIEFzc2VtYmxlciksIHZlcnNpb24NCisgICAgMi4xMCBvciBuZXdlciBmcm9tDQorICAgICAgICBodHRwOi8vd3d3Lm5hc20udXMvDQorICAgIHRvIGJlIHNvbWV3aGVyZSBvbiB5b3VyIFBBVEguICBNb3JlIHJlY2VudCB2ZXJzaW9ucyBvZiBPcGVuU1NMIG1heQ0KKyAgICBuZWVkIGEgbGF0ZXIgdmVyc2lvbiBvZiBOQVNNLiBJZiBPcGVuU1NMJ3Mgc2VsZiB0ZXN0cyBkb24ndCBwYXNzLA0KKyAgICB5b3Ugc2hvdWxkIGZpcnN0IHRyeSB0byB1cGRhdGUgTkFTTSBhbmQgZG8gYSBmdWxsIHJlYnVpbGQgb2YNCisgICAgT3BlblNTTC4gIElmIHlvdSB1c2UgdGhlIFBDYnVpbGRcZ2V0X2V4dGVybmFscy5iYXQgbWV0aG9kDQorICAgIGZvciBnZXR0aW5nIHNvdXJjZXMsIGl0IGFsc28gZG93bmxvYWRzIGEgdmVyc2lvbiBvZiBOQVNNIHdoaWNoIHRoZQ0KKyAgICBzc2wgYnVpbGQgc2NyaXB0IHdpbGwgYWRkIHRvIFBBVEguDQorDQorICAgIElmIHlvdSBsaWtlIHRvIHVzZSB0aGUgb2ZmaWNpYWwgc291cmNlcyBpbnN0ZWFkIG9mIHRoZSBmaWxlcyBmcm9tDQorICAgIHB5dGhvbi5vcmcncyBzdWJ2ZXJzaW9uIHJlcG9zaXRvcnksIFBlcmwgaXMgcmVxdWlyZWQgdG8gYnVpbGQgdGhlDQorICAgIG5lY2Vzc2FyeSBtYWtlZmlsZXMgYW5kIGFzc2VtYmx5IGZpbGVzLiAgQWN0aXZlUGVybCBpcyBhdmFpbGFibGUNCisgICAgZnJvbQ0KKyAgICAgICAgaHR0cDovL3d3dy5hY3RpdmVzdGF0ZS5jb20vYWN0aXZlcGVybC8NCisgICAgVGhlIHN2bi5weXRob24ub3JnIHZlcnNpb24gY29udGFpbnMgcHJlLWJ1aWx0IG1ha2VmaWxlcyBhbmQgYXNzZW1ibHkNCisgICAgZmlsZXMuDQorDQorICAgIFRoZSBidWlsZCBwcm9jZXNzIG1ha2VzIHN1cmUgdGhhdCBubyBwYXRlbnRlZCBhbGdvcml0aG1zIGFyZQ0KKyAgICBpbmNsdWRlZC4gIEZvciBub3cgUkM1LCBNREMyIGFuZCBJREVBIGFyZSBleGNsdWRlZCBmcm9tIHRoZSBidWlsZC4NCisgICAgWW91IG1heSBoYXZlIHRvIG1hbnVhbGx5IHJlbW92ZSAkKE9CSl9EKVxpXyoub2JqIGZyb20gbXNcbnQubWFrIGlmDQorICAgIHVzaW5nIG9mZmljaWFsIHNvdXJjZXM7IHRoZSBzdm4ucHl0aG9uLm9yZy1ob3N0ZWQgdmVyc2lvbiBpcyBhbHJlYWR5DQorICAgIGZpeGVkLg0KKw0KKyAgICBUaGUgc3NsLnZjeHByb2ogc3ViLXByb2plY3Qgc2ltcGx5IGludm9rZXMgUENidWlsZC9idWlsZF9zc2wucHksDQorICAgIHdoaWNoIGxvY2F0ZXMgYW5kIGJ1aWxkcyBPcGVuU1NMLg0KKw0KKyAgICBidWlsZF9zc2wucHkgYXR0ZW1wdHMgdG8gY2F0Y2ggdGhlIG1vc3QgY29tbW9uIGVycm9ycyAoc3VjaCBhcyBub3QNCisgICAgYmVpbmcgYWJsZSB0byBmaW5kIE9wZW5TU0wgc291cmNlcywgb3Igbm90IGJlaW5nIGFibGUgdG8gZmluZCBhIFBlcmwNCisgICAgdGhhdCB3b3JrcyB3aXRoIE9wZW5TU0wpIGFuZCBnaXZlIGEgcmVhc29uYWJsZSBlcnJvciBtZXNzYWdlLiAgSWYNCisgICAgeW91IGhhdmUgYSBwcm9ibGVtIHRoYXQgZG9lc24ndCBzZWVtIHRvIGJlIGhhbmRsZWQgY29ycmVjdGx5IChlLmcuLA0KKyAgICB5b3Uga25vdyB5b3UgaGF2ZSBBY3RpdmVQZXJsIGJ1dCB3ZSBjYW4ndCBmaW5kIGl0KSwgcGxlYXNlIHRha2UgYQ0KKyAgICBwZWVrIGF0IGJ1aWxkX3NzbC5weSBhbmQgc3VnZ2VzdCBwYXRjaGVzLiAgTm90ZSB0aGF0IGJ1aWxkX3NzbC5weQ0KKyAgICBzaG91bGQgYmUgYWJsZSB0byBiZSBydW4gZGlyZWN0bHkgZnJvbSB0aGUgY29tbWFuZC1saW5lLg0KKw0KKyAgICBUaGUgc3NsIHN1Yi1wcm9qZWN0IGRvZXMgbm90IGhhdmUgdGhlIGFiaWxpdHkgdG8gY2xlYW4gdGhlIE9wZW5TU0wNCisgICAgYnVpbGQ7IGlmIHlvdSBuZWVkIHRvIHJlYnVpbGQsIHlvdSdsbCBoYXZlIHRvIGNsZWFuIGl0IGJ5IGhhbmQuDQorX3NxbGl0ZTMNCisgICAgV3JhcHMgU1FMaXRlIDMuOC4xMS4wLCB3aGljaCBpcyBpdHNlbGYgYnVpbHQgYnkgc3FsaXRlMy52Y3hwcm9qDQorICAgIEhvbWVwYWdlOg0KKyAgICAgICAgaHR0cDovL3d3dy5zcWxpdGUub3JnLw0KK190a2ludGVyDQorICAgIFdyYXBzIHZlcnNpb24gOC42LjEgb2YgdGhlIFRrIHdpbmRvd2luZyBzeXN0ZW0uDQorICAgIEhvbWVwYWdlOg0KKyAgICAgICAgaHR0cDovL3d3dy50Y2wudGsvDQorDQorICAgIFVubGlrZSB0aGUgb3RoZXIgZXh0ZXJuYWwgbGlicmFyaWVzIGxpc3RlZCBhYm92ZSwgVGsgbXVzdCBiZSBidWlsdA0KKyAgICBzZXBhcmF0ZWx5IGJlZm9yZSB0aGUgX3RraW50ZXIgbW9kdWxlIGNhbiBiZSBidWlsdC4gVGhpcyBtZWFucyB0aGF0DQorICAgIGEgcHJlLWJ1aWx0IFRjbC9UayBpbnN0YWxsYXRpb24gaXMgZXhwZWN0ZWQgaW4gLi5cZXh0ZXJuYWxzXHRjbHRrDQorICAgICh0Y2x0azY0IGZvciA2NC1iaXQpIHJlbGF0aXZlIHRvIHRoaXMgZGlyZWN0b3J5OyB0aGUgZWFzaWVzdCB3YXkgdG8NCisgICAgZG8gc28gaXMgdG8gYnVpbGQgUHl0aG9uIHVzaW5nIGBidWlsZC5iYXQgLWVgLCB3aGljaCB3aWxsIGJ1aWxkDQorICAgIFRjbCwgVGssIGFuZCBUaXggYW5kIGluc3RhbGwgdGhlbSBhcyBleHBlY3RlZC4gIE5vdGUgdGhhdCB0bw0KKyAgICBpbXBvcnQgYW5kIHVzZSB0a2ludGVyLCB0aGUgVGNsIGFuZCBUayBETExzIG11c3QgYmUgc29tZXdoZXJlIHRoYXQNCisgICAgcHl0aG9uLmV4ZSBjYW4gZmluZCB0aGVtLCB3aGljaCBtZWFucyB0aGF0IGVpdGhlcg0KKyAgICAuLlxleHRlcm5hbHNcdGNsdGtbNjRdXGJpbiBtdXN0IGJlIGFkZGVkIHRvIFBBVEgsIG9yIHRoZSBETExzIG11c3QNCisgICAgYmUgY29waWVkIGZyb20gdGhhdCBmb2xkZXIgdG8gYmUgYWxvbmdzaWRlIHB5dGhvbi5leGUuICBgYnVpbGQuYmF0YA0KKyAgICB0YWtlcyBjYXJlIG9mIGl0IGZvciB5b3UgYnkgY29weWluZyB0aGUgRExMcyBpbnRvIHRoZSBidWlsZA0KKyAgICBkaXJlY3RvcnkuDQorDQorDQorR2V0dGluZyBFeHRlcm5hbCBTb3VyY2VzDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorDQorVGhlIGxhc3QgY2F0ZWdvcnkgb2Ygc3ViLXByb2plY3RzIGxpc3RlZCBhYm92ZSB3cmFwIGV4dGVybmFsIHByb2plY3RzDQorUHl0aG9uIGRvZXNuJ3QgY29udHJvbCwgYW5kIGFzIHN1Y2ggYSBsaXR0bGUgbW9yZSB3b3JrIGlzIHJlcXVpcmVkIGluDQorb3JkZXIgdG8gZG93bmxvYWQgdGhlIHJlbGV2YW50IHNvdXJjZSBmaWxlcyBmb3IgZWFjaCBwcm9qZWN0IGJlZm9yZSB0aGV5DQorY2FuIGJlIGJ1aWx0LiAgVGhlIGVhc2llc3Qgd2F5IHRvIGRvIHRoaXMgaXMgdG8gdXNlIHRoZSBgYnVpbGQuYmF0YA0KK3NjcmlwdCBpbiB0aGlzIGRpcmVjdG9yeSB0byBidWlsZCBQeXRob24sIGFuZCBwYXNzIHRoZSAnLWUnIHN3aXRjaCB0bw0KK3RlbGwgaXQgdG8gdXNlIGdldF9leHRlcm5hbHMuYmF0IHRvIGZldGNoIGV4dGVybmFsIHNvdXJjZXMgYW5kIGJ1aWxkDQorVGNsL1RrIGFuZCBUaXguICBUbyB1c2UgZ2V0X2V4dGVybmFscy5iYXQsIHlvdSdsbCBuZWVkIHRvIGhhdmUNCitTdWJ2ZXJzaW9uIGluc3RhbGxlZCBhbmQgc3ZuLmV4ZSBvbiB5b3VyIFBBVEguICBUaGUgc2NyaXB0IHdpbGwgZmV0Y2gNCitleHRlcm5hbCBsaWJyYXJ5IHNvdXJjZXMgZnJvbSBodHRwOi8vc3ZuLnB5dGhvbi5vcmcvZXh0ZXJuYWwgYW5kIHBsYWNlDQordGhlbSBpbiAuLlxleHRlcm5hbHMgKHJlbGF0aXZlIHRvIHRoaXMgZGlyZWN0b3J5KS4NCisNCisNCitCdWlsZGluZyBmb3IgQU1ENjQNCistLS0tLS0tLS0tLS0tLS0tLS0NCisNCitUaGUgYnVpbGQgcHJvY2VzcyBmb3IgQU1ENjQgLyB4NjQgaXMgdmVyeSBzaW1pbGFyIHRvIHN0YW5kYXJkIGJ1aWxkcywNCit5b3UganVzdCBoYXZlIHRvIHNldCB4NjQgYXMgcGxhdGZvcm0uIEluIGFkZGl0aW9uLCB0aGUgSE9TVF9QWVRIT04NCitlbnZpcm9ubWVudCB2YXJpYWJsZSBtdXN0IHBvaW50IHRvIGEgUHl0aG9uIGludGVycHJldGVyIChhdCBsZWFzdCAyLjQpLA0KK3RvIHN1cHBvcnQgY3Jvc3MtY29tcGlsYXRpb24gZnJvbSBXaW4zMi4gIE5vdGUgdGhhdCBWaXN1YWwgU3R1ZGlvDQorcmVxdWlyZXMgUHJvZmVzc2lvbmFsIEVkaXRpb24gb3IgYmV0dGVyIGluIG9yZGVyIHRvIGJ1aWxkIDY0LWJpdA0KK2JpbmFyaWVzLg0KKw0KKw0KK1Byb2ZpbGUgR3VpZGVkIE9wdGltaXphdGlvbg0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKw0KK1RoZSBzb2x1dGlvbiBoYXMgdHdvIGNvbmZpZ3VyYXRpb25zIGZvciBQR08uIFRoZSBQR0luc3RydW1lbnQNCitjb25maWd1cmF0aW9uIG11c3QgYmUgYnVpbHQgZmlyc3QuIFRoZSBQR0luc3RydW1lbnQgYmluYXJpZXMgYXJlIGxpbmtlZA0KK2FnYWluc3QgYSBwcm9maWxpbmcgbGlicmFyeSBhbmQgY29udGFpbiBleHRyYSBkZWJ1ZyBpbmZvcm1hdGlvbi4gVGhlDQorUEdVcGRhdGUgY29uZmlndXJhdGlvbiB0YWtlcyB0aGUgcHJvZmlsaW5nIGRhdGEgYW5kIGdlbmVyYXRlcyBvcHRpbWl6ZWQNCitiaW5hcmllcy4NCisNCitUaGUgYnVpbGRfcGdvLmJhdCBzY3JpcHQgYXV0b21hdGVzIHRoZSBjcmVhdGlvbiBvZiBvcHRpbWl6ZWQgYmluYXJpZXMuDQorSXQgY3JlYXRlcyB0aGUgUEdJIGZpbGVzLCBydW5zIHRoZSB1bml0IHRlc3Qgc3VpdGUgb3IgUHlCZW5jaCB3aXRoIHRoZQ0KK1BHSSBweXRob24sIGFuZCBmaW5hbGx5IGNyZWF0ZXMgdGhlIG9wdGltaXplZCBmaWxlcy4NCisNCitTZWUNCisgICAgaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2U3azMyZjRrKFZTLjEwMCkuYXNweA0KK2ZvciBtb3JlIG9uIHRoaXMgdG9waWMuDQorDQorDQorU3RhdGljIGxpYnJhcnkNCistLS0tLS0tLS0tLS0tLQ0KKw0KK1RoZSBzb2x1dGlvbiBoYXMgbm8gY29uZmlndXJhdGlvbiBmb3Igc3RhdGljIGxpYnJhcmllcy4gSG93ZXZlciBpdCBpcw0KK2Vhc3kgdG8gYnVpbGQgYSBzdGF0aWMgbGlicmFyeSBpbnN0ZWFkIG9mIGEgRExMLiBZb3Ugc2ltcGx5IGhhdmUgdG8gc2V0DQordGhlICJDb25maWd1cmF0aW9uIFR5cGUiIHRvICJTdGF0aWMgTGlicmFyeSAoLmxpYikiIGFuZCBhbHRlciB0aGUNCitwcmVwcm9jZXNzb3IgbWFjcm8gIlB5X0VOQUJMRV9TSEFSRUQiIHRvICJQeV9OT19FTkFCTEVfU0hBUkVEIi4gWW91IG1heQ0KK2Fsc28gaGF2ZSB0byBjaGFuZ2UgdGhlICJSdW50aW1lIExpYnJhcnkiIGZyb20gIk11bHRpLXRocmVhZGVkIERMTA0KKygvTUQpIiB0byAiTXVsdGktdGhyZWFkZWQgKC9NVCkiLg0KKw0KKw0KK1Zpc3VhbCBTdHVkaW8gcHJvcGVydGllcw0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKw0KK1RoZSBQQ2J1aWxkIHNvbHV0aW9uIG1ha2VzIGhlYXZ5IHVzZSBvZiBWaXN1YWwgU3R1ZGlvIHByb3BlcnR5IGZpbGVzDQorKCoucHJvcHMpLiBUaGUgcHJvcGVydGllcyBjYW4gYmUgdmlld2VkIGFuZCBhbHRlcmVkIGluIHRoZSBQcm9wZXJ0eQ0KK01hbmFnZXIgKFZpZXcgLT4gT3RoZXIgV2luZG93cyAtPiBQcm9wZXJ0eSBNYW5hZ2VyKS4NCisNCitUaGUgcHJvcGVydHkgZmlsZXMgdXNlZCBhcmUgKCstLSA9ICJhbHNvIGltcG9ydHMiKToNCisgKiBkZWJ1ZyAoZGVidWcgbWFjcm86IF9ERUJVRykNCisgKiBwZ2luc3RydW1lbnQgKFBHTykNCisgKiBwZ3VwZGF0ZSAoUEdPKQ0KKyAgICArLS0gcGdpbnN0cnVtZW50DQorICogcHlkIChweXRob24gZXh0ZW5zaW9uLCByZWxlYXNlIGJ1aWxkKQ0KKyAgICArLS0gcmVsZWFzZQ0KKyAgICArLS0gcHlwcm9qZWN0DQorICogcHlkX2QgKHB5dGhvbiBleHRlbnNpb24sIGRlYnVnIGJ1aWxkKQ0KKyAgICArLS0gZGVidWcNCisgICAgKy0tIHB5cHJvamVjdA0KKyAqIHB5cHJvamVjdCAoYmFzZSBzZXR0aW5ncyBmb3IgYWxsIHByb2plY3RzLCB1c2VyIG1hY3JvcyBsaWtlIFB5RGxsTmFtZSkNCisgKiByZWxlYXNlIChyZWxlYXNlIG1hY3JvOiBOREVCVUcpDQorICogc3FsaXRlMyAodXNlZCBvbmx5IGJ5IHNxbGl0ZTMudmN4cHJvaikNCisgKiB4NjQgKEFNRDY0IC8geDY0IHBsYXRmb3JtIHNwZWNpZmljIHNldHRpbmdzKQ0KKw0KK1RoZSBweXByb2plY3QgcHJvcGVydHkgZmlsZSBkZWZpbmVzIF9XSU4zMiBhbmQgeDY0IGRlZmluZXMgX1dJTjY0IGFuZA0KK19NX1g2NCBhbHRob3VnaCB0aGUgbWFjcm9zIGFyZSBzZXQgYnkgdGhlIGNvbXBpbGVyLCB0b28uIFRoZSBHVUkgZG9lc24ndA0KK2Fsd2F5cyBrbm93IGFib3V0IHRoZSBtYWNyb3MgYW5kIGNvbmZ1c2UgdGhlIHVzZXIgd2l0aCBmYWxzZQ0KK2luZm9ybWF0aW9uLg0KZGlmZiAtLWdpdCBhL1BDYnVpbGQvcnQuYmF0IGIvUENidWlsZC9ydC5iYXQKaW5kZXggNzEyOWUyMC4uMTNjOWQ2MiAxMDA2NDQKLS0tIGEvUENidWlsZC9ydC5iYXQKKysrIGIvUENidWlsZC9ydC5iYXQKQEAgLTEsNTggKzEsNjAgQEAKLUBlY2hvIG9mZgotcmVtIFJ1biBUZXN0cy4gIFJ1biB0aGUgcmVncmVzc2lvbiB0ZXN0IHN1aXRlLgotcmVtIFVzYWdlOiAgcnQgWy1kXSBbLU9dIFstcV0gWy14NjRdIHJlZ3J0ZXN0X2FyZ3MKLXJlbSAtZCAgIFJ1biBEZWJ1ZyBidWlsZCAocHl0aG9uX2QuZXhlKS4gIEVsc2UgcmVsZWFzZSBidWlsZC4KLXJlbSAtTyAgIFJ1biBweXRob24uZXhlIG9yIHB5dGhvbl9kLmV4ZSAoc2VlIC1kKSB3aXRoIC1PLgotcmVtIC1xICAgInF1aWNrIiAtLSBub3JtYWxseSB0aGUgdGVzdHMgYXJlIHJ1biB0d2ljZSwgdGhlIGZpcnN0IHRpbWUKLXJlbSAgICAgIGFmdGVyIGRlbGV0aW5nIGFsbCB0aGUgLnB5W2NvXSBmaWxlcyByZWFjaGFibGUgZnJvbSBMaWIvLgotcmVtICAgICAgLXEgcnVucyB0aGUgdGVzdHMganVzdCBvbmNlLCBhbmQgd2l0aG91dCBkZWxldGluZyAucHlbY29dIGZpbGVzLgotcmVtIC14NjQgUnVuIHRoZSA2NC1iaXQgYnVpbGQgb2YgcHl0aG9uIChvciBweXRob25fZCBpZiAtZCB3YXMgc3BlY2lmaWVkKQotcmVtICAgICAgZnJvbSB0aGUgJ2FtZDY0JyBkaXIgaW5zdGVhZCBvZiB0aGUgMzItYml0IGJ1aWxkIGluIHRoaXMgZGlyLgotcmVtIEFsbCBsZWFkaW5nIGluc3RhbmNlcyBvZiB0aGVzZSBzd2l0Y2hlcyBhcmUgc2hpZnRlZCBvZmYsIGFuZAotcmVtIHdoYXRldmVyIHJlbWFpbnMgaXMgcGFzc2VkIHRvIHJlZ3J0ZXN0LnB5LiAgRm9yIGV4YW1wbGUsCi1yZW0gICAgIHJ0IC1PIC1kIC14IHRlc3RfdGhyZWFkCi1yZW0gcnVucwotcmVtICAgICBweXRob25fZCAtTyAuLi9saWIvdGVzdC9yZWdydGVzdC5weSAteCB0ZXN0X3RocmVhZAotcmVtIHR3aWNlLCBhbmQKLXJlbSAgICAgcnQgLXEgLWcgdGVzdF9iaW5hc2NpaQotcmVtIHJ1bnMKLXJlbSAgICAgcHl0aG9uX2QgLi4vbGliL3Rlc3QvcmVncnRlc3QucHkgLWcgdGVzdF9iaW5hc2NpaQotcmVtIHRvIGdlbmVyYXRlIHRoZSBleHBlY3RlZC1vdXRwdXQgZmlsZSBmb3IgYmluYXNjaWkgcXVpY2tseS4KLXJlbQotcmVtIENvbmZ1c2luZzogIGlmIHlvdSB3YW50IHRvIHBhc3MgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCwgbGlrZQotcmVtICAgICAtdSBuZXR3b3JrLGxhcmdlZmlsZQotcmVtIHRoZW4geW91IGhhdmUgdG8gcXVvdGUgaXQgb24gdGhlIHJ0IGxpbmUsIGxpa2UKLXJlbSAgICAgcnQgLXUgIm5ldHdvcmssbGFyZ2VmaWxlIgotCi1zZXRsb2NhbAotCi1zZXQgcHJlZml4PS5cCi1zZXQgc3VmZml4PQotc2V0IHFtb2RlPQotc2V0IGRhc2hPPQotc2V0IHRjbHRrPXRjbHRrCi0KLTpDaGVja09wdHMKLWlmICIlMSI9PSItTyIgKHNldCBkYXNoTz0tTykgICAgICYgc2hpZnQgJiBnb3RvIENoZWNrT3B0cwotaWYgIiUxIj09Ii1xIiAoc2V0IHFtb2RlPXllcykgICAgJiBzaGlmdCAmIGdvdG8gQ2hlY2tPcHRzCi1pZiAiJTEiPT0iLWQiIChzZXQgc3VmZml4PV9kKSAgICAmIHNoaWZ0ICYgZ290byBDaGVja09wdHMKLWlmICIlMSI9PSIteDY0IiAoc2V0IHByZWZpeD1hbWQ2NCkgJiAoc2V0IHRjbHRrPXRjbHRrNjQpICYgc2hpZnQgJiBnb3RvIENoZWNrT3B0cwotCi1QQVRIICVQQVRIJTslfmRwMC4uXC4uXCV0Y2x0ayVcYmluCi1zZXQgZXhlPSVwcmVmaXglXHB5dGhvbiVzdWZmaXglCi1zZXQgY21kPSVleGUlICVkYXNoTyUgLVdkIC1FIC1iYiAuLi9saWIvdGVzdC9yZWdydGVzdC5weSAlMSAlMiAlMyAlNCAlNSAlNiAlNyAlOCAlOQotaWYgZGVmaW5lZCBxbW9kZSBnb3RvIFFtb2RlCi0KLWVjaG8gRGVsZXRpbmcgLnB5Yy8ucHlvIGZpbGVzIC4uLgotJWV4ZSUgcm1weWMucHkKLQotZWNobyBvbgotJWNtZCUKLUBlY2hvIG9mZgotCi1lY2hvIEFib3V0IHRvIHJ1biBhZ2FpbiB3aXRob3V0IGRlbGV0aW5nIC5weWMvLnB5byBmaXJzdDoKLXBhdXNlCi0KLTpRbW9kZQotZWNobyBvbgotJWNtZCUKK0BlY2hvIG9mZg0KK3JlbSBSdW4gVGVzdHMuICBSdW4gdGhlIHJlZ3Jlc3Npb24gdGVzdCBzdWl0ZS4NCityZW0gVXNhZ2U6ICBydCBbLWRdIFstT10gWy1xXSBbLXg2NF0gcmVncnRlc3RfYXJncw0KK3JlbSAtZCAgIFJ1biBEZWJ1ZyBidWlsZCAocHl0aG9uX2QuZXhlKS4gIEVsc2UgcmVsZWFzZSBidWlsZC4NCityZW0gLU8gICBSdW4gcHl0aG9uLmV4ZSBvciBweXRob25fZC5leGUgKHNlZSAtZCkgd2l0aCAtTy4NCityZW0gLXEgICAicXVpY2siIC0tIG5vcm1hbGx5IHRoZSB0ZXN0cyBhcmUgcnVuIHR3aWNlLCB0aGUgZmlyc3QgdGltZQ0KK3JlbSAgICAgIGFmdGVyIGRlbGV0aW5nIGFsbCB0aGUgLnB5W2NvXSBmaWxlcyByZWFjaGFibGUgZnJvbSBMaWIvLg0KK3JlbSAgICAgIC1xIHJ1bnMgdGhlIHRlc3RzIGp1c3Qgb25jZSwgYW5kIHdpdGhvdXQgZGVsZXRpbmcgLnB5W2NvXSBmaWxlcy4NCityZW0gLXg2NCBSdW4gdGhlIDY0LWJpdCBidWlsZCBvZiBweXRob24gKG9yIHB5dGhvbl9kIGlmIC1kIHdhcyBzcGVjaWZpZWQpDQorcmVtICAgICAgZnJvbSB0aGUgJ2FtZDY0JyBkaXIgaW5zdGVhZCBvZiB0aGUgMzItYml0IGJ1aWxkIGluIHRoaXMgZGlyLg0KK3JlbSBBbGwgbGVhZGluZyBpbnN0YW5jZXMgb2YgdGhlc2Ugc3dpdGNoZXMgYXJlIHNoaWZ0ZWQgb2ZmLCBhbmQNCityZW0gd2hhdGV2ZXIgcmVtYWlucyAodXAgdG8gOSBhcmd1bWVudHMpIGlzIHBhc3NlZCB0byByZWdydGVzdC5weS4NCityZW0gRm9yIGV4YW1wbGUsDQorcmVtICAgICBydCAtTyAtZCAteCB0ZXN0X3RocmVhZA0KK3JlbSBydW5zDQorcmVtICAgICBweXRob25fZCAtTyAuLi9saWIvdGVzdC9yZWdydGVzdC5weSAteCB0ZXN0X3RocmVhZA0KK3JlbSB0d2ljZSwgYW5kDQorcmVtICAgICBydCAtcSAtZyB0ZXN0X2JpbmFzY2lpDQorcmVtIHJ1bnMNCityZW0gICAgIHB5dGhvbl9kIC4uL2xpYi90ZXN0L3JlZ3J0ZXN0LnB5IC1nIHRlc3RfYmluYXNjaWkNCityZW0gdG8gZ2VuZXJhdGUgdGhlIGV4cGVjdGVkLW91dHB1dCBmaWxlIGZvciBiaW5hc2NpaSBxdWlja2x5Lg0KK3JlbQ0KK3JlbSBDb25mdXNpbmc6ICBpZiB5b3Ugd2FudCB0byBwYXNzIGEgY29tbWEtc2VwYXJhdGVkIGxpc3QsIGxpa2UNCityZW0gICAgIC11IG5ldHdvcmssbGFyZ2VmaWxlDQorcmVtIHRoZW4geW91IGhhdmUgdG8gcXVvdGUgaXQgb24gdGhlIHJ0IGxpbmUsIGxpa2UNCityZW0gICAgIHJ0IC11ICJuZXR3b3JrLGxhcmdlZmlsZSINCisNCitzZXRsb2NhbA0KKw0KK3NldCBwY2J1aWxkPSV+ZHAwDQorc2V0IHByZWZpeD0lcGNidWlsZCUNCitzZXQgc3VmZml4PQ0KK3NldCBxbW9kZT0NCitzZXQgZGFzaE89DQorc2V0IHRjbHRrPXRjbHRrDQorDQorOkNoZWNrT3B0cw0KK2lmICIlMSI9PSItTyIgKHNldCBkYXNoTz0tTykgICAgICYgc2hpZnQgJiBnb3RvIENoZWNrT3B0cw0KK2lmICIlMSI9PSItcSIgKHNldCBxbW9kZT15ZXMpICAgICYgc2hpZnQgJiBnb3RvIENoZWNrT3B0cw0KK2lmICIlMSI9PSItZCIgKHNldCBzdWZmaXg9X2QpICAgICYgc2hpZnQgJiBnb3RvIENoZWNrT3B0cw0KK2lmICIlMSI9PSIteDY0IiAoc2V0IHByZWZpeD0lcHJlZml4JWFtZDY0KSAmIChzZXQgdGNsdGs9dGNsdGs2NCkgJiBzaGlmdCAmIGdvdG8gQ2hlY2tPcHRzDQorDQorUEFUSCAlUEFUSCU7JXBjYnVpbGQlLi5cZXh0ZXJuYWxzXCV0Y2x0ayVcYmluDQorc2V0IGV4ZT0iJXByZWZpeCVccHl0aG9uJXN1ZmZpeCUiDQorc2V0IGNtZD0lZXhlJSAlZGFzaE8lIC1XZCAtRSAtYmIgIiVwY2J1aWxkJS4uXGxpYlx0ZXN0XHJlZ3J0ZXN0LnB5IiAlMSAlMiAlMyAlNCAlNSAlNiAlNyAlOCAlOQ0KK2lmIGRlZmluZWQgcW1vZGUgZ290byBRbW9kZQ0KKw0KK2VjaG8gRGVsZXRpbmcgLnB5Yy8ucHlvIGZpbGVzIC4uLg0KKyVleGUlICIlcGNidWlsZCVccm1weWMucHkiDQorDQorZWNobyBvbg0KKyVjbWQlDQorQGVjaG8gb2ZmDQorDQorZWNobyBBYm91dCB0byBydW4gYWdhaW4gd2l0aG91dCBkZWxldGluZyAucHljLy5weW8gZmlyc3Q6DQorcGF1c2UNCisNCis6UW1vZGUNCitlY2hvIG9uDQorJWNtZCUNCmRpZmYgLS1naXQgYS9QQ2J1aWxkL3h4bGltaXRlZC52Y3hwcm9qIGIvUENidWlsZC94eGxpbWl0ZWQudmN4cHJvagppbmRleCAyNmJjMjBkLi5hYmY0MWY5IDEwMDY0NAotLS0gYS9QQ2J1aWxkL3h4bGltaXRlZC52Y3hwcm9qCisrKyBiL1BDYnVpbGQveHhsaW1pdGVkLnZjeHByb2oKQEAgLTEyMCw3ICsxMjAsNyBAQAogICA8L1Byb3BlcnR5R3JvdXA+CiAgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgogICAgIDxDbENvbXBpbGU+Ci0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+TkRFQlVHO19XSU4zMjtfV0lORExMO1B5X0xJTUlURURfQVBJPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5OREVCVUc7X1dJTjMyO19XSU5ETEw7UHlfTElNSVRFRF9BUEk9MHgwMzA0MDAwMDwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CiAgICAgPC9DbENvbXBpbGU+CiAgICAgPExpbms+CiAgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz53c29jazMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgpAQCAtMTQwLDcgKzE0MCw3IEBACiAgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KICAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIj4KICAgICA8Q2xDb21waWxlPgotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPlB5X0xJTUlURURfQVBJOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5QeV9MSU1JVEVEX0FQST0weDAzMDQwMDAwOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KICAgICA8L0NsQ29tcGlsZT4KICAgICA8TGluaz4KICAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPndzb2NrMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CkBAIC0xNjEsNyArMTYxLDcgQEAKICAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgogICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfFdpbjMyJyI+CiAgICAgPENsQ29tcGlsZT4KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5QeV9MSU1JVEVEX0FQSTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+UHlfTElNSVRFRF9BUEk9MHgwMzA0MDAwMDslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CiAgICAgPC9DbENvbXBpbGU+CiAgICAgPExpbms+CiAgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz53c29jazMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgpAQCAtMTgzLDExICsxODMsNiBAQAogICA8SXRlbUdyb3VwPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1x4eGxpbWl0ZWQuYyIgLz4KICAgPC9JdGVtR3JvdXA+Ci0gIDxJdGVtR3JvdXA+Ci0gICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0icHl0aG9uY29yZS52Y3hwcm9qIj4KLSAgICAgIDxQcm9qZWN0PntjZjdhYzNkMS1lMmRmLTQxZDItYmVhNi0xZTI1NTZjZGVhMjZ9PC9Qcm9qZWN0PgotICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KLSAgPC9JdGVtR3JvdXA+CiAgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CiAgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+CiAgIDwvSW1wb3J0R3JvdXA+CmRpZmYgLS1naXQgYS9QYXJzZXIvUHl0aG9uLmFzZGwgYi9QYXJzZXIvUHl0aG9uLmFzZGwKaW5kZXggYzI0ZDg0MC4uZGViZDg5ZSAxMDA2NDQKLS0tIGEvUGFyc2VyL1B5dGhvbi5hc2RsCisrKyBiL1BhcnNlci9QeXRob24uYXNkbApAQCAtMSw0ICsxLDQgQEAKLS0tIEFTREwncyBmaXZlIGJ1aWx0aW4gdHlwZXMgYXJlIGlkZW50aWZpZXIsIGludCwgc3RyaW5nLCBieXRlcywgb2JqZWN0CistLSBBU0RMJ3Mgc2l4IGJ1aWx0aW4gdHlwZXMgYXJlIGlkZW50aWZpZXIsIGludCwgc3RyaW5nLCBieXRlcywgb2JqZWN0LCBzaW5nbGV0b24KIAogbW9kdWxlIFB5dGhvbgogewpAQCAtNjksOCArNjksOCBAQAogICAgICAgICAgfCBOdW0ob2JqZWN0IG4pIC0tIGEgbnVtYmVyIGFzIGEgUHlPYmplY3QuCiAgICAgICAgICB8IFN0cihzdHJpbmcgcykgLS0gbmVlZCB0byBzcGVjaWZ5IHJhdywgdW5pY29kZSwgZXRjPwogICAgICAgICAgfCBCeXRlcyhieXRlcyBzKQorICAgICAgICAgfCBOYW1lQ29uc3RhbnQoc2luZ2xldG9uIHZhbHVlKQogICAgICAgICAgfCBFbGxpcHNpcwotICAgICAgICAgLS0gb3RoZXIgbGl0ZXJhbHM/IGJvb2xzPwogCiAgICAgICAgICAtLSB0aGUgZm9sbG93aW5nIGV4cHJlc3Npb24gY2FuIGFwcGVhciBpbiBhc3NpZ25tZW50IGNvbnRleHQKICAgICAgICAgIHwgQXR0cmlidXRlKGV4cHIgdmFsdWUsIGlkZW50aWZpZXIgYXR0ciwgZXhwcl9jb250ZXh0IGN0eCkKQEAgLTEwMywxMSArMTAzLDExIEBACiAgICAgZXhjZXB0aGFuZGxlciA9IEV4Y2VwdEhhbmRsZXIoZXhwcj8gdHlwZSwgaWRlbnRpZmllcj8gbmFtZSwgc3RtdCogYm9keSkKICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcyAoaW50IGxpbmVubywgaW50IGNvbF9vZmZzZXQpCiAKLSAgICBhcmd1bWVudHMgPSAoYXJnKiBhcmdzLCBpZGVudGlmaWVyPyB2YXJhcmcsIGV4cHI/IHZhcmFyZ2Fubm90YXRpb24sCi0gICAgICAgICAgICAgICAgICAgICBhcmcqIGt3b25seWFyZ3MsIGlkZW50aWZpZXI/IGt3YXJnLAotICAgICAgICAgICAgICAgICAgICAgZXhwcj8ga3dhcmdhbm5vdGF0aW9uLCBleHByKiBkZWZhdWx0cywKLSAgICAgICAgICAgICAgICAgICAgIGV4cHIqIGt3X2RlZmF1bHRzKQorICAgIGFyZ3VtZW50cyA9IChhcmcqIGFyZ3MsIGFyZz8gdmFyYXJnLCBhcmcqIGt3b25seWFyZ3MsIGV4cHIqIGt3X2RlZmF1bHRzLAorICAgICAgICAgICAgICAgICBhcmc/IGt3YXJnLCBleHByKiBkZWZhdWx0cykKKwogICAgIGFyZyA9IChpZGVudGlmaWVyIGFyZywgZXhwcj8gYW5ub3RhdGlvbikKKyAgICAgICAgICAgYXR0cmlidXRlcyAoaW50IGxpbmVubywgaW50IGNvbF9vZmZzZXQpCiAKICAgICAtLSBrZXl3b3JkIGFyZ3VtZW50cyBzdXBwbGllZCB0byBjYWxsCiAgICAga2V5d29yZCA9IChpZGVudGlmaWVyIGFyZywgZXhwciB2YWx1ZSkKZGlmZiAtLWdpdCBhL1BhcnNlci9hc2RsLnB5IGIvUGFyc2VyL2FzZGwucHkKaW5kZXggMDhhYTA1Yi4uZmMxYjE2YyAxMDA2NDQKLS0tIGEvUGFyc2VyL2FzZGwucHkKKysrIGIvUGFyc2VyL2FzZGwucHkKQEAgLTE2LDggKzE2LDkgQEAKIAogaW1wb3J0IHNwYXJrCiAKLWRlZiBvdXRwdXQoc3RyaW5nKToKLSAgICBzeXMuc3Rkb3V0LndyaXRlKHN0cmluZyArICJcbiIpCitkZWYgb3V0cHV0KCpzdHJpbmdzKToKKyAgICBmb3IgcyBpbiBzdHJpbmdzOgorICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKHN0cihzKSArICJcbiIpCiAKIAogY2xhc3MgVG9rZW4ob2JqZWN0KToKQEAgLTE1OCwxMSArMTU5LDE5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnPSJleHBlY3RlZCBhdHRyaWJ1dGVzLCBmb3VuZCAlcyIgJSBpZCkKICAgICAgICAgcmV0dXJuIFN1bShzdW0sIGF0dHJpYnV0ZXMpCiAKLSAgICBkZWYgcF9wcm9kdWN0KHNlbGYsIGluZm8pOgorICAgIGRlZiBwX3Byb2R1Y3RfMChzZWxmLCBpbmZvKToKICAgICAgICAgIiBwcm9kdWN0IDo6PSAoIGZpZWxkcyApICIKICAgICAgICAgXzAsIGZpZWxkcywgXzEgPSBpbmZvCiAgICAgICAgIHJldHVybiBQcm9kdWN0KGZpZWxkcykKIAorICAgIGRlZiBwX3Byb2R1Y3RfMShzZWxmLCBpbmZvKToKKyAgICAgICAgIiBwcm9kdWN0IDo6PSAoIGZpZWxkcyApIElkICggZmllbGRzICkgIgorICAgICAgICBfMCwgZmllbGRzLCBfMSwgaWQsIF8yLCBhdHRyaWJ1dGVzLCBfMyA9IGluZm8KKyAgICAgICAgaWYgaWQudmFsdWUgIT0gImF0dHJpYnV0ZXMiOgorICAgICAgICAgICAgcmFpc2UgQVNETFN5bnRheEVycm9yKGlkLmxpbmVubywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2c9ImV4cGVjdGVkIGF0dHJpYnV0ZXMsIGZvdW5kICVzIiAlIGlkKQorICAgICAgICByZXR1cm4gUHJvZHVjdChmaWVsZHMsIGF0dHJpYnV0ZXMpCisKICAgICBkZWYgcF9zdW1fMChzZWxmLCBjb25zdHJ1Y3Rvcik6CiAgICAgICAgICIgc3VtIDo6PSBjb25zdHJ1Y3RvciAiCiAgICAgICAgIHJldHVybiBbY29uc3RydWN0b3JbMF1dCkBAIC0yMjIsNyArMjMxLDcgQEAKICAgICAgICAgIiBmaWVsZCA6Oj0gSWQgPyAiCiAgICAgICAgIHJldHVybiBGaWVsZCh0eXBlWzBdLCBvcHQ9VHJ1ZSkKIAotYnVpbHRpbl90eXBlcyA9ICgiaWRlbnRpZmllciIsICJzdHJpbmciLCAiYnl0ZXMiLCAiaW50IiwgIm9iamVjdCIpCitidWlsdGluX3R5cGVzID0gKCJpZGVudGlmaWVyIiwgInN0cmluZyIsICJieXRlcyIsICJpbnQiLCAib2JqZWN0IiwgInNpbmdsZXRvbiIpCiAKICMgYmVsb3cgaXMgYSBjb2xsZWN0aW9uIG9mIGNsYXNzZXMgdG8gY2FwdHVyZSB0aGUgQVNUIG9mIGFuIEFTVCA6LSkKICMgbm90IHN1cmUgaWYgYW55IG9mIHRoZSBtZXRob2RzIGFyZSB1c2VmdWwgeWV0LCBidXQgSSdtIGFkZGluZyB0aGVtCkBAIC0yODksMTEgKzI5OCwxNSBAQAogICAgICAgICAgICAgcmV0dXJuICJTdW0oJXMsICVzKSIgJSAoc2VsZi50eXBlcywgc2VsZi5hdHRyaWJ1dGVzKQogCiBjbGFzcyBQcm9kdWN0KEFTVCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpZWxkcyk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpZWxkcywgYXR0cmlidXRlcz1Ob25lKToKICAgICAgICAgc2VsZi5maWVsZHMgPSBmaWVsZHMKKyAgICAgICAgc2VsZi5hdHRyaWJ1dGVzID0gYXR0cmlidXRlcyBvciBbXQogCiAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgICAgICByZXR1cm4gIlByb2R1Y3QoJXMpIiAlIHNlbGYuZmllbGRzCisgICAgICAgIGlmIHNlbGYuYXR0cmlidXRlcyBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuICJQcm9kdWN0KCVzKSIgJSBzZWxmLmZpZWxkcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuICJQcm9kdWN0KCVzLCAlcykiICUgKHNlbGYuZmllbGRzLCBzZWxmLmF0dHJpYnV0ZXMpCiAKIGNsYXNzIFZpc2l0b3JCYXNlKG9iamVjdCk6CiAKQEAgLTM4NSw3ICszOTgsMTEgQEAKICAgICBzY2FubmVyID0gQVNETFNjYW5uZXIoKQogICAgIHBhcnNlciA9IEFTRExQYXJzZXIoKQogCi0gICAgYnVmID0gb3BlbihmaWxlKS5yZWFkKCkKKyAgICBmID0gb3BlbihmaWxlKQorICAgIHRyeToKKyAgICAgICAgYnVmID0gZi5yZWFkKCkKKyAgICBmaW5hbGx5OgorICAgICAgICBmLmNsb3NlKCkKICAgICB0b2tlbnMgPSBzY2FubmVyLnRva2VuaXplKGJ1ZikKICAgICB0cnk6CiAgICAgICAgIHJldHVybiBwYXJzZXIucGFyc2UodG9rZW5zKQpAQCAtNDE2LDQgKzQzMyw0IEBACiAgICAgICAgICAgICBvdXRwdXQoIkNoZWNrIGZhaWxlZCIpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBmb3IgZGZuIGluIG1vZC5kZm5zOgotICAgICAgICAgICAgICAgIG91dHB1dChkZm4udHlwZSkKKyAgICAgICAgICAgICAgICBvdXRwdXQoZGZuLm5hbWUsIGRmbi52YWx1ZSkKZGlmZiAtLWdpdCBhL1BhcnNlci9hc2RsX2MucHkgYi9QYXJzZXIvYXNkbF9jLnB5CmluZGV4IDRiODRlMGYuLmQ2MDg2ZTYgMTAwNzU1Ci0tLSBhL1BhcnNlci9hc2RsX2MucHkKKysrIGIvUGFyc2VyL2FzZGxfYy5weQpAQCAtMjA5LDYgKzIwOSwxMSBAQAogICAgICAgICBzZWxmLmVtaXQoInN0cnVjdCBfJShuYW1lKXMgeyIgJSBsb2NhbHMoKSwgZGVwdGgpCiAgICAgICAgIGZvciBmIGluIHByb2R1Y3QuZmllbGRzOgogICAgICAgICAgICAgc2VsZi52aXNpdChmLCBkZXB0aCArIDEpCisgICAgICAgIGZvciBmaWVsZCBpbiBwcm9kdWN0LmF0dHJpYnV0ZXM6CisgICAgICAgICAgICAjIHJ1ZGltZW50YXJ5IGF0dHJpYnV0ZSBoYW5kbGluZworICAgICAgICAgICAgdHlwZSA9IHN0cihmaWVsZC50eXBlKQorICAgICAgICAgICAgYXNzZXJ0IHR5cGUgaW4gYXNkbC5idWlsdGluX3R5cGVzLCB0eXBlCisgICAgICAgICAgICBzZWxmLmVtaXQoIiVzICVzOyIgJSAodHlwZSwgZmllbGQubmFtZSksIGRlcHRoICsgMSk7CiAgICAgICAgIHNlbGYuZW1pdCgifTsiLCBkZXB0aCkKICAgICAgICAgc2VsZi5lbWl0KCIiLCBkZXB0aCkKIApAQCAtNDkzLDcgKzQ5OCwxMSBAQAogCiAgICAgZGVmIHZpc2l0RmllbGQoc2VsZiwgZmllbGQsIG5hbWUsIHN1bT1Ob25lLCBwcm9kPU5vbmUsIGRlcHRoPTApOgogICAgICAgICBjdHlwZSA9IGdldF9jX3R5cGUoZmllbGQudHlwZSkKLSAgICAgICAgc2VsZi5lbWl0KCJpZiAoX1B5T2JqZWN0X0hhc0F0dHJJZChvYmosICZQeUlkXyVzKSkgeyIgJSBmaWVsZC5uYW1lLCBkZXB0aCkKKyAgICAgICAgaWYgZmllbGQub3B0OgorICAgICAgICAgICAgY2hlY2sgPSAiZXhpc3RzX25vdF9ub25lKG9iaiwgJlB5SWRfJXMpIiAlIChmaWVsZC5uYW1lLCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNoZWNrID0gIl9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF8lcykiICUgKGZpZWxkLm5hbWUsKQorICAgICAgICBzZWxmLmVtaXQoImlmICglcykgeyIgJSAoY2hlY2ssKSwgZGVwdGgsIHJlZmxvdz1GYWxzZSkKICAgICAgICAgc2VsZi5lbWl0KCJpbnQgcmVzOyIsIGRlcHRoKzEpCiAgICAgICAgIGlmIGZpZWxkLnNlcToKICAgICAgICAgICAgIHNlbGYuZW1pdCgiUHlfc3NpemVfdCBsZW47IiwgZGVwdGgrMSkKQEAgLTUxMCw5ICs1MTksOSBAQAogICAgICAgICAgICAgc2VsZi5lbWl0KCJ9IiwgZGVwdGgrMSkKICAgICAgICAgICAgIHNlbGYuZW1pdCgibGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7IiwgZGVwdGgrMSkKICAgICAgICAgICAgIGlmIHNlbGYuaXNTaW1wbGVUeXBlKGZpZWxkKToKLSAgICAgICAgICAgICAgICBzZWxmLmVtaXQoIiVzID0gYXNkbF9pbnRfc2VxX25ldyhsZW4sIGFyZW5hKTsiICUgZmllbGQubmFtZSwgZGVwdGgrMSkKKyAgICAgICAgICAgICAgICBzZWxmLmVtaXQoIiVzID0gX1B5X2FzZGxfaW50X3NlcV9uZXcobGVuLCBhcmVuYSk7IiAlIGZpZWxkLm5hbWUsIGRlcHRoKzEpCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuZW1pdCgiJXMgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7IiAlIGZpZWxkLm5hbWUsIGRlcHRoKzEpCisgICAgICAgICAgICAgICAgc2VsZi5lbWl0KCIlcyA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7IiAlIGZpZWxkLm5hbWUsIGRlcHRoKzEpCiAgICAgICAgICAgICBzZWxmLmVtaXQoImlmICglcyA9PSBOVUxMKSBnb3RvIGZhaWxlZDsiICUgZmllbGQubmFtZSwgZGVwdGgrMSkKICAgICAgICAgICAgIHNlbGYuZW1pdCgiZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7IiwgZGVwdGgrMSkKICAgICAgICAgICAgIHNlbGYuZW1pdCgiJXMgdmFsdWU7IiAlIGN0eXBlLCBkZXB0aCsyKQpAQCAtNTU4LDYgKzU2NywxMyBAQAogICAgIGRlZiB2aXNpdFByb2R1Y3Qoc2VsZiwgcHJvZCwgbmFtZSk6CiAgICAgICAgIHNlbGYuZW1pdCgic3RhdGljIFB5VHlwZU9iamVjdCAqJXNfdHlwZTsiICUgbmFtZSwgMCkKICAgICAgICAgc2VsZi5lbWl0KCJzdGF0aWMgUHlPYmplY3QqIGFzdDJvYmpfJXModm9pZCopOyIgJSBuYW1lLCAwKQorICAgICAgICBpZiBwcm9kLmF0dHJpYnV0ZXM6CisgICAgICAgICAgICBmb3IgYSBpbiBwcm9kLmF0dHJpYnV0ZXM6CisgICAgICAgICAgICAgICAgc2VsZi5lbWl0X2lkZW50aWZpZXIoYS5uYW1lKQorICAgICAgICAgICAgc2VsZi5lbWl0KCJzdGF0aWMgY2hhciAqJXNfYXR0cmlidXRlc1tdID0geyIgJSBuYW1lLCAwKQorICAgICAgICAgICAgZm9yIGEgaW4gcHJvZC5hdHRyaWJ1dGVzOgorICAgICAgICAgICAgICAgIHNlbGYuZW1pdCgnIiVzIiwnICUgYS5uYW1lLCAxKQorICAgICAgICAgICAgc2VsZi5lbWl0KCJ9OyIsIDApCiAgICAgICAgIGlmIHByb2QuZmllbGRzOgogICAgICAgICAgICAgZm9yIGYgaW4gcHJvZC5maWVsZHM6CiAgICAgICAgICAgICAgICAgc2VsZi5lbWl0X2lkZW50aWZpZXIoZi5uYW1lKQpAQCAtODE5LDYgKzgzNSw3IEBACiAgICAgUHlfSU5DUkVGKChQeU9iamVjdCopbyk7CiAgICAgcmV0dXJuIChQeU9iamVjdCopbzsKIH0KKyNkZWZpbmUgYXN0Mm9ial9zaW5nbGV0b24gYXN0Mm9ial9vYmplY3QKICNkZWZpbmUgYXN0Mm9ial9pZGVudGlmaWVyIGFzdDJvYmpfb2JqZWN0CiAjZGVmaW5lIGFzdDJvYmpfc3RyaW5nIGFzdDJvYmpfb2JqZWN0CiAjZGVmaW5lIGFzdDJvYmpfYnl0ZXMgYXN0Mm9ial9vYmplY3QKQEAgLTgzMCw2ICs4NDcsMTcgQEAKIAogLyogQ29udmVyc2lvbiBQeXRob24gLT4gQVNUICovCiAKK3N0YXRpYyBpbnQgb2JqMmFzdF9zaW5nbGV0b24oUHlPYmplY3QgKm9iaiwgUHlPYmplY3QqKiBvdXQsIFB5QXJlbmEqIGFyZW5hKQoreworICAgIGlmIChvYmogIT0gUHlfTm9uZSAmJiBvYmogIT0gUHlfVHJ1ZSAmJiBvYmogIT0gUHlfRmFsc2UpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiQVNUIHNpbmdsZXRvbiBtdXN0IGJlIFRydWUsIEZhbHNlLCBvciBOb25lIik7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKyAgICAqb3V0ID0gb2JqOworICAgIHJldHVybiAwOworfQorCiBzdGF0aWMgaW50IG9iajJhc3Rfb2JqZWN0KFB5T2JqZWN0KiBvYmosIFB5T2JqZWN0Kiogb3V0LCBQeUFyZW5hKiBhcmVuYSkKIHsKICAgICBpZiAob2JqID09IFB5X05vbmUpCkBAIC05MDQsNiArOTMyLDE5IEBACiAgICAgcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgZXhpc3RzX25vdF9ub25lKFB5T2JqZWN0ICpvYmosIF9QeV9JZGVudGlmaWVyICppZCkKK3sKKyAgICBpbnQgaXNub25lOworICAgIFB5T2JqZWN0ICphdHRyID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosIGlkKTsKKyAgICBpZiAoIWF0dHIpIHsKKyAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGlzbm9uZSA9IGF0dHIgPT0gUHlfTm9uZTsKKyAgICBQeV9ERUNSRUYoYXR0cik7CisgICAgcmV0dXJuICFpc25vbmU7Cit9CisKICIiIiwgMCwgcmVmbG93PUZhbHNlKQogCiAgICAgICAgIHNlbGYuZW1pdCgic3RhdGljIGludCBpbml0X3R5cGVzKHZvaWQpIiwwKQpAQCAtOTI1LDYgKzk2NiwxMSBAQAogICAgICAgICBzZWxmLmVtaXQoJyVzX3R5cGUgPSBtYWtlX3R5cGUoIiVzIiwgJkFTVF90eXBlLCAlcywgJWQpOycgJQogICAgICAgICAgICAgICAgICAgICAgICAgKG5hbWUsIG5hbWUsIGZpZWxkcywgbGVuKHByb2QuZmllbGRzKSksIDEpCiAgICAgICAgIHNlbGYuZW1pdCgiaWYgKCElc190eXBlKSByZXR1cm4gMDsiICUgbmFtZSwgMSkKKyAgICAgICAgaWYgcHJvZC5hdHRyaWJ1dGVzOgorICAgICAgICAgICAgc2VsZi5lbWl0KCJpZiAoIWFkZF9hdHRyaWJ1dGVzKCVzX3R5cGUsICVzX2F0dHJpYnV0ZXMsICVkKSkgcmV0dXJuIDA7IiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5hbWUsIG5hbWUsIGxlbihwcm9kLmF0dHJpYnV0ZXMpKSwgMSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZW1pdCgiaWYgKCFhZGRfYXR0cmlidXRlcyglc190eXBlLCBOVUxMLCAwKSkgcmV0dXJuIDA7IiAlIG5hbWUsIDEpCiAKICAgICBkZWYgdmlzaXRTdW0oc2VsZiwgc3VtLCBuYW1lKToKICAgICAgICAgc2VsZi5lbWl0KCclc190eXBlID0gbWFrZV90eXBlKCIlcyIsICZBU1RfdHlwZSwgTlVMTCwgMCk7JyAlCkBAIC05NjgsNyArMTAxNCw3IEBACiAgICAgICAgIHNlbGYuZW1pdCgiaWYgKCFtKSByZXR1cm4gTlVMTDsiLCAxKQogICAgICAgICBzZWxmLmVtaXQoImQgPSBQeU1vZHVsZV9HZXREaWN0KG0pOyIsIDEpCiAgICAgICAgIHNlbGYuZW1pdCgnaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJBU1QiLCAoUHlPYmplY3QqKSZBU1RfdHlwZSkgPCAwKSByZXR1cm4gTlVMTDsnLCAxKQotICAgICAgICBzZWxmLmVtaXQoJ2lmIChQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUHlDRl9PTkxZX0FTVCIsIFB5Q0ZfT05MWV9BU1QpIDwgMCknLCAxKQorICAgICAgICBzZWxmLmVtaXQoJ2lmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQeUNGX09OTFlfQVNUKSA8IDApJywgMSkKICAgICAgICAgc2VsZi5lbWl0KCJyZXR1cm4gTlVMTDsiLCAyKQogICAgICAgICBmb3IgZGZuIGluIG1vZC5kZm5zOgogICAgICAgICAgICAgc2VsZi52aXNpdChkZm4pCkBAIC0xMDgwLDYgKzExMjYsMTIgQEAKICAgICAgICAgc2VsZi5lbWl0KCJpZiAoIXJlc3VsdCkgcmV0dXJuIE5VTEw7IiwgMSkKICAgICAgICAgZm9yIGZpZWxkIGluIHByb2QuZmllbGRzOgogICAgICAgICAgICAgc2VsZi52aXNpdEZpZWxkKGZpZWxkLCBuYW1lLCAxLCBUcnVlKQorICAgICAgICBmb3IgYSBpbiBwcm9kLmF0dHJpYnV0ZXM6CisgICAgICAgICAgICBzZWxmLmVtaXQoInZhbHVlID0gYXN0Mm9ial8lcyhvLT4lcyk7IiAlIChhLnR5cGUsIGEubmFtZSksIDEpCisgICAgICAgICAgICBzZWxmLmVtaXQoImlmICghdmFsdWUpIGdvdG8gZmFpbGVkOyIsIDEpCisgICAgICAgICAgICBzZWxmLmVtaXQoJ2lmIChfUHlPYmplY3RfU2V0QXR0cklkKHJlc3VsdCwgJlB5SWRfJXMsIHZhbHVlKSA8IDApJyAlIGEubmFtZSwgMSkKKyAgICAgICAgICAgIHNlbGYuZW1pdCgnZ290byBmYWlsZWQ7JywgMikKKyAgICAgICAgICAgIHNlbGYuZW1pdCgnUHlfREVDUkVGKHZhbHVlKTsnLCAxKQogICAgICAgICBzZWxmLmZ1bmNfZW5kKCkKIAogICAgIGRlZiB2aXNpdENvbnN0cnVjdG9yKHNlbGYsIGNvbnMsIGVudW0sIG5hbWUpOgpAQCAtMTE0Miw3ICsxMTk0LDggQEAKICAgICBDT0RFID0gIiIiCiBQeU9iamVjdCogUHlBU1RfbW9kMm9iaihtb2RfdHkgdCkKIHsKLSAgICBpbml0X3R5cGVzKCk7CisgICAgaWYgKCFpbml0X3R5cGVzKCkpCisgICAgICAgIHJldHVybiBOVUxMOwogICAgIHJldHVybiBhc3Qyb2JqX21vZCh0KTsKIH0KIApAQCAtMTE2MCw3ICsxMjEzLDggQEAKIAogICAgIGFzc2VydCgwIDw9IG1vZGUgJiYgbW9kZSA8PSAyKTsKIAotICAgIGluaXRfdHlwZXMoKTsKKyAgICBpZiAoIWluaXRfdHlwZXMoKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBpc2luc3RhbmNlID0gUHlPYmplY3RfSXNJbnN0YW5jZShhc3QsIHJlcV90eXBlW21vZGVdKTsKICAgICBpZiAoaXNpbnN0YW5jZSA9PSAtMSkKQEAgLTExNzgsNyArMTIzMiw4IEBACiAKIGludCBQeUFTVF9DaGVjayhQeU9iamVjdCogb2JqKQogewotICAgIGluaXRfdHlwZXMoKTsKKyAgICBpZiAoIWluaXRfdHlwZXMoKSkKKyAgICAgICAgcmV0dXJuIC0xOwogICAgIHJldHVybiBQeU9iamVjdF9Jc0luc3RhbmNlKG9iaiwgKFB5T2JqZWN0KikmQVNUX3R5cGUpOwogfQogIiIiCmRpZmYgLS1naXQgYS9QYXJzZXIvZ3JhbW1hci5jIGIvUGFyc2VyL2dyYW1tYXIuYwppbmRleCBmMmEyNWNhLi5iNTk4Mjk0IDEwMDY0NAotLS0gYS9QYXJzZXIvZ3JhbW1hci5jCisrKyBiL1BhcnNlci9ncmFtbWFyLmMKQEAgLTI5LDcgKzI5LDcgQEAKIH0KIAogZGZhICoKLWFkZGRmYShncmFtbWFyICpnLCBpbnQgdHlwZSwgY2hhciAqbmFtZSkKK2FkZGRmYShncmFtbWFyICpnLCBpbnQgdHlwZSwgY29uc3QgY2hhciAqbmFtZSkKIHsKICAgICBkZmEgKmQ7CiAKQEAgLTYzLDcgKzYzLDcgQEAKICAgICBzLT5zX3VwcGVyID0gMDsKICAgICBzLT5zX2FjY2VsID0gTlVMTDsKICAgICBzLT5zX2FjY2VwdCA9IDA7Ci0gICAgcmV0dXJuIHMgLSBkLT5kX3N0YXRlOworICAgIHJldHVybiBQeV9TQUZFX0RPV05DQVNUKHMgLSBkLT5kX3N0YXRlLCBQeV9pbnRwdHJfdCwgaW50KTsKIH0KIAogdm9pZApAQCAtODUsNyArODUsNyBAQAogfQogCiBpbnQKLWFkZGxhYmVsKGxhYmVsbGlzdCAqbGwsIGludCB0eXBlLCBjaGFyICpzdHIpCithZGRsYWJlbChsYWJlbGxpc3QgKmxsLCBpbnQgdHlwZSwgY29uc3QgY2hhciAqc3RyKQogewogICAgIGludCBpOwogICAgIGxhYmVsICpsYjsKQEAgLTEwNSwxMyArMTA1LDEzIEBACiAgICAgaWYgKFB5X0RlYnVnRmxhZykKICAgICAgICAgcHJpbnRmKCJMYWJlbCBAICU4cCwgJWQ6ICVzXG4iLCBsbCwgbGwtPmxsX25sYWJlbHMsCiAgICAgICAgICAgICAgICBQeUdyYW1tYXJfTGFiZWxSZXByKGxiKSk7Ci0gICAgcmV0dXJuIGxiIC0gbGwtPmxsX2xhYmVsOworICAgIHJldHVybiBQeV9TQUZFX0RPV05DQVNUKGxiIC0gbGwtPmxsX2xhYmVsLCBQeV9pbnRwdHJfdCwgaW50KTsKIH0KIAogLyogU2FtZSwgYnV0IHJhdGhlciBkaWVzIHRoYW4gYWRkcyAqLwogCiBpbnQKLWZpbmRsYWJlbChsYWJlbGxpc3QgKmxsLCBpbnQgdHlwZSwgY2hhciAqc3RyKQorZmluZGxhYmVsKGxhYmVsbGlzdCAqbGwsIGludCB0eXBlLCBjb25zdCBjaGFyICpzdHIpCiB7CiAgICAgaW50IGk7CiAKZGlmZiAtLWdpdCBhL1BhcnNlci9ncmFtbWFyMS5jIGIvUGFyc2VyL2dyYW1tYXIxLmMKaW5kZXggNDQwYmE0NC4uMzBhNmYwNyAxMDA2NDQKLS0tIGEvUGFyc2VyL2dyYW1tYXIxLmMKKysrIGIvUGFyc2VyL2dyYW1tYXIxLmMKQEAgLTksOSArOSw5IEBACiAvKiBSZXR1cm4gdGhlIERGQSBmb3IgdGhlIGdpdmVuIHR5cGUgKi8KIAogZGZhICoKLVB5R3JhbW1hcl9GaW5kREZBKGdyYW1tYXIgKmcsIHJlZ2lzdGVyIGludCB0eXBlKQorUHlHcmFtbWFyX0ZpbmRERkEoZ3JhbW1hciAqZywgaW50IHR5cGUpCiB7Ci0gICAgcmVnaXN0ZXIgZGZhICpkOworICAgIGRmYSAqZDsKICNpZiAxCiAgICAgLyogTWFzc2l2ZSBzcGVlZC11cCAqLwogICAgIGQgPSAmZy0+Z19kZmFbdHlwZSAtIE5UX09GRlNFVF07CkBAIC0xOSw3ICsxOSw3IEBACiAgICAgcmV0dXJuIGQ7CiAjZWxzZQogICAgIC8qIE9sZCwgc2xvdyB2ZXJzaW9uICovCi0gICAgcmVnaXN0ZXIgaW50IGk7CisgICAgaW50IGk7CiAKICAgICBmb3IgKGkgPSBnLT5nX25kZmFzLCBkID0gZy0+Z19kZmE7IC0taSA+PSAwOyBkKyspIHsKICAgICAgICAgaWYgKGQtPmRfdHlwZSA9PSB0eXBlKQpAQCAtMzAsNyArMzAsNyBAQAogI2VuZGlmCiB9CiAKLWNoYXIgKgorY29uc3QgY2hhciAqCiBQeUdyYW1tYXJfTGFiZWxSZXByKGxhYmVsICpsYikKIHsKICAgICBzdGF0aWMgY2hhciBidWZbMTAwXTsKZGlmZiAtLWdpdCBhL1BhcnNlci9teXJlYWRsaW5lLmMgYi9QYXJzZXIvbXlyZWFkbGluZS5jCmluZGV4IDlmMWZjMWUuLjI4YzdiNmQgMTAwNjQ0Ci0tLSBhL1BhcnNlci9teXJlYWRsaW5lLmMKKysrIGIvUGFyc2VyL215cmVhZGxpbmUuYwpAQCAtMTUsMTAgKzE1LDYgQEAKICNpbmNsdWRlICJ3aW5kb3dzLmgiCiAjZW5kaWYgLyogTVNfV0lORE9XUyAqLwogCi0jaWZkZWYgX19WTVMKLWV4dGVybiBjaGFyKiB2bXNfX1N0ZGlvUmVhZGxpbmUoRklMRSAqc3lzX3N0ZGluLCBGSUxFICpzeXNfc3Rkb3V0LCBjaGFyICpwcm9tcHQpOwotI2VuZGlmCi0KIAogUHlUaHJlYWRTdGF0ZSogX1B5T1NfUmVhZGxpbmVUU3RhdGU7CiAKQEAgLTY4LDcgKzY0LDcgQEAKICAgICAgICAgKi8KICAgICAgICAgaWYgKEdldExhc3RFcnJvcigpPT1FUlJPUl9PUEVSQVRJT05fQUJPUlRFRCkgewogICAgICAgICAgICAgaEludGVycnVwdEV2ZW50ID0gX1B5T1NfU2lnaW50RXZlbnQoKTsKLSAgICAgICAgICAgIHN3aXRjaCAoV2FpdEZvclNpbmdsZU9iamVjdChoSW50ZXJydXB0RXZlbnQsIDEwKSkgeworICAgICAgICAgICAgc3dpdGNoIChXYWl0Rm9yU2luZ2xlT2JqZWN0RXgoaEludGVycnVwdEV2ZW50LCAxMCwgRkFMU0UpKSB7CiAgICAgICAgICAgICBjYXNlIFdBSVRfT0JKRUNUXzA6CiAgICAgICAgICAgICAgICAgUmVzZXRFdmVudChoSW50ZXJydXB0RXZlbnQpOwogICAgICAgICAgICAgICAgIHJldHVybiAxOyAvKiBJbnRlcnJ1cHQgKi8KQEAgLTEwOSwyMiArMTA1LDI2IEBACiAvKiBSZWFkbGluZSBpbXBsZW1lbnRhdGlvbiB1c2luZyBmZ2V0cygpICovCiAKIGNoYXIgKgotUHlPU19TdGRpb1JlYWRsaW5lKEZJTEUgKnN5c19zdGRpbiwgRklMRSAqc3lzX3N0ZG91dCwgY2hhciAqcHJvbXB0KQorUHlPU19TdGRpb1JlYWRsaW5lKEZJTEUgKnN5c19zdGRpbiwgRklMRSAqc3lzX3N0ZG91dCwgY29uc3QgY2hhciAqcHJvbXB0KQogewogICAgIHNpemVfdCBuOwogICAgIGNoYXIgKnAsICpwcjsKKwogICAgIG4gPSAxMDA7Ci0gICAgaWYgKChwID0gKGNoYXIgKilQeU1lbV9NQUxMT0MobikpID09IE5VTEwpCisgICAgcCA9IChjaGFyICopUHlNZW1fUmF3TWFsbG9jKG4pOworICAgIGlmIChwID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOworCiAgICAgZmZsdXNoKHN5c19zdGRvdXQpOwogICAgIGlmIChwcm9tcHQpCiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXMiLCBwcm9tcHQpOwogICAgIGZmbHVzaChzdGRlcnIpOworCiAgICAgc3dpdGNoIChteV9mZ2V0cyhwLCAoaW50KW4sIHN5c19zdGRpbikpIHsKICAgICBjYXNlIDA6IC8qIE5vcm1hbCBjYXNlICovCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgMTogLyogSW50ZXJydXB0ICovCi0gICAgICAgIFB5TWVtX0ZSRUUocCk7CisgICAgICAgIFB5TWVtX1Jhd0ZyZWUocCk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGNhc2UgLTE6IC8qIEVPRiAqLwogICAgIGNhc2UgLTI6IC8qIEVycm9yICovCkBAIC0xMzYsMTMgKzEzNiwxMyBAQAogICAgIHdoaWxlIChuID4gMCAmJiBwW24tMV0gIT0gJ1xuJykgewogICAgICAgICBzaXplX3QgaW5jciA9IG4rMjsKICAgICAgICAgaWYgKGluY3IgPiBJTlRfTUFYKSB7Ci0gICAgICAgICAgICBQeU1lbV9GUkVFKHApOworICAgICAgICAgICAgUHlNZW1fUmF3RnJlZShwKTsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLCAiaW5wdXQgbGluZSB0b28gbG9uZyIpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KLSAgICAgICAgcHIgPSAoY2hhciAqKVB5TWVtX1JFQUxMT0MocCwgbiArIGluY3IpOworICAgICAgICBwciA9IChjaGFyICopUHlNZW1fUmF3UmVhbGxvYyhwLCBuICsgaW5jcik7CiAgICAgICAgIGlmIChwciA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBQeU1lbV9GUkVFKHApOworICAgICAgICAgICAgUHlNZW1fUmF3RnJlZShwKTsKICAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQpAQCAtMTUxLDkgKzE1MSw5IEBACiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgbiArPSBzdHJsZW4ocCtuKTsKICAgICB9Ci0gICAgcHIgPSAoY2hhciAqKVB5TWVtX1JFQUxMT0MocCwgbisxKTsKKyAgICBwciA9IChjaGFyICopUHlNZW1fUmF3UmVhbGxvYyhwLCBuKzEpOwogICAgIGlmIChwciA9PSBOVUxMKSB7Ci0gICAgICAgIFB5TWVtX0ZSRUUocCk7CisgICAgICAgIFB5TWVtX1Jhd0ZyZWUocCk7CiAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KQEAgLTE2NiwxNSArMTY2LDE2IEBACiAKICAgIE5vdGU6IFB5dGhvbiBleHBlY3RzIGluIHJldHVybiBhIGJ1ZmZlciBhbGxvY2F0ZWQgd2l0aCBQeU1lbV9NYWxsb2MuICovCiAKLWNoYXIgKigqUHlPU19SZWFkbGluZUZ1bmN0aW9uUG9pbnRlcikoRklMRSAqLCBGSUxFICosIGNoYXIgKik7CitjaGFyICooKlB5T1NfUmVhZGxpbmVGdW5jdGlvblBvaW50ZXIpKEZJTEUgKiwgRklMRSAqLCBjb25zdCBjaGFyICopOwogCiAKIC8qIEludGVyZmFjZSB1c2VkIGJ5IHRva2VuaXplci5jIGFuZCBibHRpbm1vZHVsZS5jICovCiAKIGNoYXIgKgotUHlPU19SZWFkbGluZShGSUxFICpzeXNfc3RkaW4sIEZJTEUgKnN5c19zdGRvdXQsIGNoYXIgKnByb21wdCkKK1B5T1NfUmVhZGxpbmUoRklMRSAqc3lzX3N0ZGluLCBGSUxFICpzeXNfc3Rkb3V0LCBjb25zdCBjaGFyICpwcm9tcHQpCiB7Ci0gICAgY2hhciAqcnY7CisgICAgY2hhciAqcnYsICpyZXM7CisgICAgc2l6ZV90IGxlbjsKIAogICAgIGlmIChfUHlPU19SZWFkbGluZVRTdGF0ZSA9PSBQeVRocmVhZFN0YXRlX0dFVCgpKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsCkBAIC0xODQsMTEgKzE4NSw3IEBACiAKIAogICAgIGlmIChQeU9TX1JlYWRsaW5lRnVuY3Rpb25Qb2ludGVyID09IE5VTEwpIHsKLSNpZmRlZiBfX1ZNUwotICAgICAgICBQeU9TX1JlYWRsaW5lRnVuY3Rpb25Qb2ludGVyID0gdm1zX19TdGRpb1JlYWRsaW5lOwotI2Vsc2UKICAgICAgICAgUHlPU19SZWFkbGluZUZ1bmN0aW9uUG9pbnRlciA9IFB5T1NfU3RkaW9SZWFkbGluZTsKLSNlbmRpZgogICAgIH0KIAogI2lmZGVmIFdJVEhfVEhSRUFECkBAIC0yMjEsNSArMjE4LDE0IEBACiAKICAgICBfUHlPU19SZWFkbGluZVRTdGF0ZSA9IE5VTEw7CiAKLSAgICByZXR1cm4gcnY7CisgICAgaWYgKHJ2ID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgbGVuID0gc3RybGVuKHJ2KSArIDE7CisgICAgcmVzID0gUHlNZW1fTWFsbG9jKGxlbik7CisgICAgaWYgKHJlcyAhPSBOVUxMKQorICAgICAgICBtZW1jcHkocmVzLCBydiwgbGVuKTsKKyAgICBQeU1lbV9SYXdGcmVlKHJ2KTsKKworICAgIHJldHVybiByZXM7CiB9CmRpZmYgLS1naXQgYS9QYXJzZXIvbm9kZS5jIGIvUGFyc2VyL25vZGUuYwppbmRleCAxZTRmMGRhLi41NjRiZDkxIDEwMDY0NAotLS0gYS9QYXJzZXIvbm9kZS5jCisrKyBiL1BhcnNlci9ub2RlLmMKQEAgLTc2LDcgKzc2LDcgQEAKIAogCiBpbnQKLVB5Tm9kZV9BZGRDaGlsZChyZWdpc3RlciBub2RlICpuMSwgaW50IHR5cGUsIGNoYXIgKnN0ciwgaW50IGxpbmVubywgaW50IGNvbF9vZmZzZXQpCitQeU5vZGVfQWRkQ2hpbGQobm9kZSAqbjEsIGludCB0eXBlLCBjaGFyICpzdHIsIGludCBsaW5lbm8sIGludCBjb2xfb2Zmc2V0KQogewogICAgIGNvbnN0IGludCBuY2ggPSBuMS0+bl9uY2hpbGRyZW47CiAgICAgaW50IGN1cnJlbnRfY2FwYWNpdHk7CkBAIC05MSw3ICs5MSw3IEBACiAgICAgaWYgKGN1cnJlbnRfY2FwYWNpdHkgPCAwIHx8IHJlcXVpcmVkX2NhcGFjaXR5IDwgMCkKICAgICAgICAgcmV0dXJuIEVfT1ZFUkZMT1c7CiAgICAgaWYgKGN1cnJlbnRfY2FwYWNpdHkgPCByZXF1aXJlZF9jYXBhY2l0eSkgewotICAgICAgICBpZiAocmVxdWlyZWRfY2FwYWNpdHkgPiBQWV9TSVpFX01BWCAvIHNpemVvZihub2RlKSkgeworICAgICAgICBpZiAoKHNpemVfdClyZXF1aXJlZF9jYXBhY2l0eSA+IFBZX1NJWkVfTUFYIC8gc2l6ZW9mKG5vZGUpKSB7CiAgICAgICAgICAgICByZXR1cm4gRV9OT01FTTsKICAgICAgICAgfQogICAgICAgICBuID0gbjEtPm5fY2hpbGQ7CmRpZmYgLS1naXQgYS9QYXJzZXIvcGFyc2VyLmMgYi9QYXJzZXIvcGFyc2VyLmMKaW5kZXggYjUwNWZlMC4uNTZlYzUxNCAxMDA2NDQKLS0tIGEvUGFyc2VyL3BhcnNlci5jCisrKyBiL1BhcnNlci9wYXJzZXIuYwpAQCAtMzUsOSArMzUsOSBAQAogI2RlZmluZSBzX2VtcHR5KHMpICgocyktPnNfdG9wID09ICYocyktPnNfYmFzZVtNQVhTVEFDS10pCiAKIHN0YXRpYyBpbnQKLXNfcHVzaChyZWdpc3RlciBzdGFjayAqcywgZGZhICpkLCBub2RlICpwYXJlbnQpCitzX3B1c2goc3RhY2sgKnMsIGRmYSAqZCwgbm9kZSAqcGFyZW50KQogewotICAgIHJlZ2lzdGVyIHN0YWNrZW50cnkgKnRvcDsKKyAgICBzdGFja2VudHJ5ICp0b3A7CiAgICAgaWYgKHMtPnNfdG9wID09IHMtPnNfYmFzZSkgewogICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInNfcHVzaDogcGFyc2VyIHN0YWNrIG92ZXJmbG93XG4iKTsKICAgICAgICAgcmV0dXJuIEVfTk9NRU07CkBAIC01Miw3ICs1Miw3IEBACiAjaWZkZWYgUHlfREVCVUcKIAogc3RhdGljIHZvaWQKLXNfcG9wKHJlZ2lzdGVyIHN0YWNrICpzKQorc19wb3Aoc3RhY2sgKnMpCiB7CiAgICAgaWYgKHNfZW1wdHkocykpCiAgICAgICAgIFB5X0ZhdGFsRXJyb3IoInNfcG9wOiBwYXJzZXIgc3RhY2sgdW5kZXJmbG93IC0tIEZBVEFMIik7CkBAIC0xMDUsNyArMTA1LDcgQEAKIC8qIFBBUlNFUiBTVEFDSyBPUEVSQVRJT05TICovCiAKIHN0YXRpYyBpbnQKLXNoaWZ0KHJlZ2lzdGVyIHN0YWNrICpzLCBpbnQgdHlwZSwgY2hhciAqc3RyLCBpbnQgbmV3c3RhdGUsIGludCBsaW5lbm8sIGludCBjb2xfb2Zmc2V0KQorc2hpZnQoc3RhY2sgKnMsIGludCB0eXBlLCBjaGFyICpzdHIsIGludCBuZXdzdGF0ZSwgaW50IGxpbmVubywgaW50IGNvbF9vZmZzZXQpCiB7CiAgICAgaW50IGVycjsKICAgICBhc3NlcnQoIXNfZW1wdHkocykpOwpAQCAtMTE3LDEwICsxMTcsMTAgQEAKIH0KIAogc3RhdGljIGludAotcHVzaChyZWdpc3RlciBzdGFjayAqcywgaW50IHR5cGUsIGRmYSAqZCwgaW50IG5ld3N0YXRlLCBpbnQgbGluZW5vLCBpbnQgY29sX29mZnNldCkKK3B1c2goc3RhY2sgKnMsIGludCB0eXBlLCBkZmEgKmQsIGludCBuZXdzdGF0ZSwgaW50IGxpbmVubywgaW50IGNvbF9vZmZzZXQpCiB7CiAgICAgaW50IGVycjsKLSAgICByZWdpc3RlciBub2RlICpuOworICAgIG5vZGUgKm47CiAgICAgbiA9IHMtPnNfdG9wLT5zX3BhcmVudDsKICAgICBhc3NlcnQoIXNfZW1wdHkocykpOwogICAgIGVyciA9IFB5Tm9kZV9BZGRDaGlsZChuLCB0eXBlLCAoY2hhciAqKU5VTEwsIGxpbmVubywgY29sX29mZnNldCk7CkBAIC0xMzQsMTUgKzEzNCwxNSBAQAogLyogUEFSU0VSIFBST1BFUiAqLwogCiBzdGF0aWMgaW50Ci1jbGFzc2lmeShwYXJzZXJfc3RhdGUgKnBzLCBpbnQgdHlwZSwgY2hhciAqc3RyKQorY2xhc3NpZnkocGFyc2VyX3N0YXRlICpwcywgaW50IHR5cGUsIGNvbnN0IGNoYXIgKnN0cikKIHsKICAgICBncmFtbWFyICpnID0gcHMtPnBfZ3JhbW1hcjsKLSAgICByZWdpc3RlciBpbnQgbiA9IGctPmdfbGwubGxfbmxhYmVsczsKKyAgICBpbnQgbiA9IGctPmdfbGwubGxfbmxhYmVsczsKIAogICAgIGlmICh0eXBlID09IE5BTUUpIHsKLSAgICAgICAgcmVnaXN0ZXIgY2hhciAqcyA9IHN0cjsKLSAgICAgICAgcmVnaXN0ZXIgbGFiZWwgKmwgPSBnLT5nX2xsLmxsX2xhYmVsOwotICAgICAgICByZWdpc3RlciBpbnQgaTsKKyAgICAgICAgY29uc3QgY2hhciAqcyA9IHN0cjsKKyAgICAgICAgbGFiZWwgKmwgPSBnLT5nX2xsLmxsX2xhYmVsOworICAgICAgICBpbnQgaTsKICAgICAgICAgZm9yIChpID0gbjsgaSA+IDA7IGktLSwgbCsrKSB7CiAgICAgICAgICAgICBpZiAobC0+bGJfdHlwZSAhPSBOQU1FIHx8IGwtPmxiX3N0ciA9PSBOVUxMIHx8CiAgICAgICAgICAgICAgICAgbC0+bGJfc3RyWzBdICE9IHNbMF0gfHwKQEAgLTE2NSw4ICsxNjUsOCBAQAogICAgIH0KIAogICAgIHsKLSAgICAgICAgcmVnaXN0ZXIgbGFiZWwgKmwgPSBnLT5nX2xsLmxsX2xhYmVsOwotICAgICAgICByZWdpc3RlciBpbnQgaTsKKyAgICAgICAgbGFiZWwgKmwgPSBnLT5nX2xsLmxsX2xhYmVsOworICAgICAgICBpbnQgaTsKICAgICAgICAgZm9yIChpID0gbjsgaSA+IDA7IGktLSwgbCsrKSB7CiAgICAgICAgICAgICBpZiAobC0+bGJfdHlwZSA9PSB0eXBlICYmIGwtPmxiX3N0ciA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgRChwcmludGYoIkl0J3MgYSB0b2tlbiB3ZSBrbm93XG4iKSk7CkBAIC0yMjUsMTAgKzIyNSwxMCBAQAogI2VuZGlmIC8qIGZ1dHVyZSBrZXl3b3JkICovCiAKIGludAotUHlQYXJzZXJfQWRkVG9rZW4ocmVnaXN0ZXIgcGFyc2VyX3N0YXRlICpwcywgcmVnaXN0ZXIgaW50IHR5cGUsIGNoYXIgKnN0ciwKK1B5UGFyc2VyX0FkZFRva2VuKHBhcnNlcl9zdGF0ZSAqcHMsIGludCB0eXBlLCBjaGFyICpzdHIsCiAgICAgICAgICAgICAgICAgICBpbnQgbGluZW5vLCBpbnQgY29sX29mZnNldCwgaW50ICpleHBlY3RlZF9yZXQpCiB7Ci0gICAgcmVnaXN0ZXIgaW50IGlsYWJlbDsKKyAgICBpbnQgaWxhYmVsOwogICAgIGludCBlcnI7CiAKICAgICBEKHByaW50ZigiVG9rZW4gJXMvJyVzJyAuLi4gIiwgX1B5UGFyc2VyX1Rva2VuTmFtZXNbdHlwZV0sIHN0cikpOwpAQCAtMjQxLDE1ICsyNDEsMTUgQEAKICAgICAvKiBMb29wIHVudGlsIHRoZSB0b2tlbiBpcyBzaGlmdGVkIG9yIGFuIGVycm9yIG9jY3VycmVkICovCiAgICAgZm9yICg7OykgewogICAgICAgICAvKiBGZXRjaCB0aGUgY3VycmVudCBkZmEgYW5kIHN0YXRlICovCi0gICAgICAgIHJlZ2lzdGVyIGRmYSAqZCA9IHBzLT5wX3N0YWNrLnNfdG9wLT5zX2RmYTsKLSAgICAgICAgcmVnaXN0ZXIgc3RhdGUgKnMgPSAmZC0+ZF9zdGF0ZVtwcy0+cF9zdGFjay5zX3RvcC0+c19zdGF0ZV07CisgICAgICAgIGRmYSAqZCA9IHBzLT5wX3N0YWNrLnNfdG9wLT5zX2RmYTsKKyAgICAgICAgc3RhdGUgKnMgPSAmZC0+ZF9zdGF0ZVtwcy0+cF9zdGFjay5zX3RvcC0+c19zdGF0ZV07CiAKICAgICAgICAgRChwcmludGYoIiBERkEgJyVzJywgc3RhdGUgJWQ6IiwKICAgICAgICAgICAgIGQtPmRfbmFtZSwgcHMtPnBfc3RhY2suc190b3AtPnNfc3RhdGUpKTsKIAogICAgICAgICAvKiBDaGVjayBhY2NlbGVyYXRvciAqLwogICAgICAgICBpZiAocy0+c19sb3dlciA8PSBpbGFiZWwgJiYgaWxhYmVsIDwgcy0+c191cHBlcikgewotICAgICAgICAgICAgcmVnaXN0ZXIgaW50IHggPSBzLT5zX2FjY2VsW2lsYWJlbCAtIHMtPnNfbG93ZXJdOworICAgICAgICAgICAgaW50IHggPSBzLT5zX2FjY2VsW2lsYWJlbCAtIHMtPnNfbG93ZXJdOwogICAgICAgICAgICAgaWYgKHggIT0gLTEpIHsKICAgICAgICAgICAgICAgICBpZiAoeCAmICgxPDw3KSkgewogICAgICAgICAgICAgICAgICAgICAvKiBQdXNoIG5vbi10ZXJtaW5hbCAqLwpkaWZmIC0tZ2l0IGEvUGFyc2VyL3BhcnNldG9rLmMgYi9QYXJzZXIvcGFyc2V0b2suYwppbmRleCA3YmViNzM1Li42MjlkZWU1IDEwMDY0NAotLS0gYS9QYXJzZXIvcGFyc2V0b2suYworKysgYi9QYXJzZXIvcGFyc2V0b2suYwpAQCAtMTMsNyArMTMsNyBAQAogCiAvKiBGb3J3YXJkICovCiBzdGF0aWMgbm9kZSAqcGFyc2V0b2soc3RydWN0IHRva19zdGF0ZSAqLCBncmFtbWFyICosIGludCwgcGVycmRldGFpbCAqLCBpbnQgKik7Ci1zdGF0aWMgaW50IGluaXRlcnIocGVycmRldGFpbCAqZXJyX3JldCwgY29uc3QgY2hhciogZmlsZW5hbWUpOworc3RhdGljIGludCBpbml0ZXJyKHBlcnJkZXRhaWwgKmVycl9yZXQsIFB5T2JqZWN0ICogZmlsZW5hbWUpOwogCiAvKiBQYXJzZSBpbnB1dCBjb21pbmcgZnJvbSBhIHN0cmluZy4gIFJldHVybiBlcnJvciBjb2RlLCBwcmludCBzb21lIGVycm9ycy4gKi8KIG5vZGUgKgpAQCAtNDEsOSArNDEsOSBAQAogfQogCiBub2RlICoKLVB5UGFyc2VyX1BhcnNlU3RyaW5nRmxhZ3NGaWxlbmFtZUV4KGNvbnN0IGNoYXIgKnMsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICBncmFtbWFyICpnLCBpbnQgc3RhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHBlcnJkZXRhaWwgKmVycl9yZXQsIGludCAqZmxhZ3MpCitQeVBhcnNlcl9QYXJzZVN0cmluZ09iamVjdChjb25zdCBjaGFyICpzLCBQeU9iamVjdCAqZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBncmFtbWFyICpnLCBpbnQgc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJyZGV0YWlsICplcnJfcmV0LCBpbnQgKmZsYWdzKQogewogICAgIHN0cnVjdCB0b2tfc3RhdGUgKnRvazsKICAgICBpbnQgZXhlY19pbnB1dCA9IHN0YXJ0ID09IGZpbGVfaW5wdXQ7CkBAIC02NywxMSArNjcsMzUgQEAKICAgICByZXR1cm4gcGFyc2V0b2sodG9rLCBnLCBzdGFydCwgZXJyX3JldCwgZmxhZ3MpOwogfQogCitub2RlICoKK1B5UGFyc2VyX1BhcnNlU3RyaW5nRmxhZ3NGaWxlbmFtZUV4KGNvbnN0IGNoYXIgKnMsIGNvbnN0IGNoYXIgKmZpbGVuYW1lX3N0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JhbW1hciAqZywgaW50IHN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJyZGV0YWlsICplcnJfcmV0LCBpbnQgKmZsYWdzKQoreworICAgIG5vZGUgKm47CisgICAgUHlPYmplY3QgKmZpbGVuYW1lID0gTlVMTDsKKyNpZm5kZWYgUEdFTgorICAgIGlmIChmaWxlbmFtZV9zdHIgIT0gTlVMTCkgeworICAgICAgICBmaWxlbmFtZSA9IFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQoZmlsZW5hbWVfc3RyKTsKKyAgICAgICAgaWYgKGZpbGVuYW1lID09IE5VTEwpIHsKKyAgICAgICAgICAgIGVycl9yZXQtPmVycm9yID0gRV9FUlJPUjsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgfQorI2VuZGlmCisgICAgbiA9IFB5UGFyc2VyX1BhcnNlU3RyaW5nT2JqZWN0KHMsIGZpbGVuYW1lLCBnLCBzdGFydCwgZXJyX3JldCwgZmxhZ3MpOworI2lmbmRlZiBQR0VOCisgICAgUHlfWERFQ1JFRihmaWxlbmFtZSk7CisjZW5kaWYKKyAgICByZXR1cm4gbjsKK30KKwogLyogUGFyc2UgaW5wdXQgY29taW5nIGZyb20gYSBmaWxlLiAgUmV0dXJuIGVycm9yIGNvZGUsIHByaW50IHNvbWUgZXJyb3JzLiAqLwogCiBub2RlICoKIFB5UGFyc2VyX1BhcnNlRmlsZShGSUxFICpmcCwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGdyYW1tYXIgKmcsIGludCBzdGFydCwKLSAgICAgICAgICAgICAgICAgICBjaGFyICpwczEsIGNoYXIgKnBzMiwgcGVycmRldGFpbCAqZXJyX3JldCkKKyAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwczEsIGNvbnN0IGNoYXIgKnBzMiwKKyAgICAgICAgICAgICAgICAgICBwZXJyZGV0YWlsICplcnJfcmV0KQogewogICAgIHJldHVybiBQeVBhcnNlcl9QYXJzZUZpbGVGbGFncyhmcCwgZmlsZW5hbWUsIE5VTEwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGcsIHN0YXJ0LCBwczEsIHBzMiwgZXJyX3JldCwgMCk7CkBAIC04MCw3ICsxMDQsOCBAQAogbm9kZSAqCiBQeVBhcnNlcl9QYXJzZUZpbGVGbGFncyhGSUxFICpmcCwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKmVuYywKICAgICAgICAgICAgICAgICAgICAgICAgIGdyYW1tYXIgKmcsIGludCBzdGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnBzMSwgY2hhciAqcHMyLCBwZXJyZGV0YWlsICplcnJfcmV0LCBpbnQgZmxhZ3MpCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwczEsIGNvbnN0IGNoYXIgKnBzMiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBlcnJkZXRhaWwgKmVycl9yZXQsIGludCBmbGFncykKIHsKICAgICBpbnQgaWZsYWdzID0gZmxhZ3M7CiAgICAgcmV0dXJuIFB5UGFyc2VyX1BhcnNlRmlsZUZsYWdzRXgoZnAsIGZpbGVuYW1lLCBlbmMsIGcsIHN0YXJ0LCBwczEsCkBAIC04OCwxNiArMTEzLDE3IEBACiB9CiAKIG5vZGUgKgotUHlQYXJzZXJfUGFyc2VGaWxlRmxhZ3NFeChGSUxFICpmcCwgY29uc3QgY2hhciAqZmlsZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVuYywgZ3JhbW1hciAqZywgaW50IHN0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpwczEsIGNoYXIgKnBzMiwgcGVycmRldGFpbCAqZXJyX3JldCwgaW50ICpmbGFncykKK1B5UGFyc2VyX1BhcnNlRmlsZU9iamVjdChGSUxFICpmcCwgUHlPYmplY3QgKmZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVuYywgZ3JhbW1hciAqZywgaW50IHN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBzMSwgY29uc3QgY2hhciAqcHMyLAorICAgICAgICAgICAgICAgICAgICAgICAgIHBlcnJkZXRhaWwgKmVycl9yZXQsIGludCAqZmxhZ3MpCiB7CiAgICAgc3RydWN0IHRva19zdGF0ZSAqdG9rOwogCiAgICAgaWYgKGluaXRlcnIoZXJyX3JldCwgZmlsZW5hbWUpIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBpZiAoKHRvayA9IFB5VG9rZW5pemVyX0Zyb21GaWxlKGZwLCAoY2hhciAqKWVuYywgcHMxLCBwczIpKSA9PSBOVUxMKSB7CisgICAgaWYgKCh0b2sgPSBQeVRva2VuaXplcl9Gcm9tRmlsZShmcCwgZW5jLCBwczEsIHBzMikpID09IE5VTEwpIHsKICAgICAgICAgZXJyX3JldC0+ZXJyb3IgPSBFX05PTUVNOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CkBAIC0xMDgsNiArMTM0LDMxIEBACiAgICAgcmV0dXJuIHBhcnNldG9rKHRvaywgZywgc3RhcnQsIGVycl9yZXQsIGZsYWdzKTsKIH0KIAorbm9kZSAqCitQeVBhcnNlcl9QYXJzZUZpbGVGbGFnc0V4KEZJTEUgKmZwLCBjb25zdCBjaGFyICpmaWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZW5jLCBncmFtbWFyICpnLCBpbnQgc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBzMSwgY29uc3QgY2hhciAqcHMyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJyZGV0YWlsICplcnJfcmV0LCBpbnQgKmZsYWdzKQoreworICAgIG5vZGUgKm47CisgICAgUHlPYmplY3QgKmZpbGVvYmogPSBOVUxMOworI2lmbmRlZiBQR0VOCisgICAgaWYgKGZpbGVuYW1lICE9IE5VTEwpIHsKKyAgICAgICAgZmlsZW9iaiA9IFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQoZmlsZW5hbWUpOworICAgICAgICBpZiAoZmlsZW9iaiA9PSBOVUxMKSB7CisgICAgICAgICAgICBlcnJfcmV0LT5lcnJvciA9IEVfRVJST1I7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorICAgIG4gPSBQeVBhcnNlcl9QYXJzZUZpbGVPYmplY3QoZnAsIGZpbGVvYmosIGVuYywgZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0LCBwczEsIHBzMiwgZXJyX3JldCwgZmxhZ3MpOworI2lmbmRlZiBQR0VOCisgICAgUHlfWERFQ1JFRihmaWxlb2JqKTsKKyNlbmRpZgorICAgIHJldHVybiBuOworfQorCiAjaWZkZWYgUFlfUEFSU0VSX1JFUVVJUkVTX0ZVVFVSRV9LRVlXT1JECiAjaWYgMAogc3RhdGljIGNoYXIgd2l0aF9tc2dbXSA9CkBAIC0xMzgsNyArMTg5LDYgQEAKICAgICBpbnQgc3RhcnRlZCA9IDA7CiAKICAgICBpZiAoKHBzID0gUHlQYXJzZXJfTmV3KGcsIHN0YXJ0KSkgPT0gTlVMTCkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIm5vIG1lbSBmb3IgbmV3IHBhcnNlclxuIik7CiAgICAgICAgIGVycl9yZXQtPmVycm9yID0gRV9OT01FTTsKICAgICAgICAgUHlUb2tlbml6ZXJfRnJlZSh0b2spOwogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTE3OCw3ICsyMjgsNiBAQAogICAgICAgICBsZW4gPSBiIC0gYTsgLyogWFhYIHRoaXMgbWF5IGNvbXB1dGUgTlVMTCAtIE5VTEwgKi8KICAgICAgICAgc3RyID0gKGNoYXIgKikgUHlPYmplY3RfTUFMTE9DKGxlbiArIDEpOwogICAgICAgICBpZiAoc3RyID09IE5VTEwpIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAibm8gbWVtIGZvciBuZXh0IHRva2VuXG4iKTsKICAgICAgICAgICAgIGVycl9yZXQtPmVycm9yID0gRV9OT01FTTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0yMDUsNyArMjU0LDggQEAKICAgICAgICAgfQogI2VuZGlmCiAgICAgICAgIGlmIChhID49IHRvay0+bGluZV9zdGFydCkKLSAgICAgICAgICAgIGNvbF9vZmZzZXQgPSBhIC0gdG9rLT5saW5lX3N0YXJ0OworICAgICAgICAgICAgY29sX29mZnNldCA9IFB5X1NBRkVfRE9XTkNBU1QoYSAtIHRvay0+bGluZV9zdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X2ludHB0cl90LCBpbnQpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBjb2xfb2Zmc2V0ID0gLTE7CiAKQEAgLTMwOCw3ICszNTgsNyBAQAogfQogCiBzdGF0aWMgaW50Ci1pbml0ZXJyKHBlcnJkZXRhaWwgKmVycl9yZXQsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQoraW5pdGVycihwZXJyZGV0YWlsICplcnJfcmV0LCBQeU9iamVjdCAqZmlsZW5hbWUpCiB7CiAgICAgZXJyX3JldC0+ZXJyb3IgPSBFX09LOwogICAgIGVycl9yZXQtPmxpbmVubyA9IDA7CkBAIC0zMTcsMTMgKzM2NywxNiBAQAogICAgIGVycl9yZXQtPnRva2VuID0gLTE7CiAgICAgZXJyX3JldC0+ZXhwZWN0ZWQgPSAtMTsKICNpZm5kZWYgUEdFTgotICAgIGlmIChmaWxlbmFtZSkKLSAgICAgICAgZXJyX3JldC0+ZmlsZW5hbWUgPSBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0KGZpbGVuYW1lKTsKLSAgICBlbHNlCisgICAgaWYgKGZpbGVuYW1lKSB7CisgICAgICAgIFB5X0lOQ1JFRihmaWxlbmFtZSk7CisgICAgICAgIGVycl9yZXQtPmZpbGVuYW1lID0gZmlsZW5hbWU7CisgICAgfQorICAgIGVsc2UgewogICAgICAgICBlcnJfcmV0LT5maWxlbmFtZSA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCI8c3RyaW5nPiIpOwotICAgIGlmIChlcnJfcmV0LT5maWxlbmFtZSA9PSBOVUxMKSB7Ci0gICAgICAgIGVycl9yZXQtPmVycm9yID0gRV9FUlJPUjsKLSAgICAgICAgcmV0dXJuIC0xOworICAgICAgICBpZiAoZXJyX3JldC0+ZmlsZW5hbWUgPT0gTlVMTCkgeworICAgICAgICAgICAgZXJyX3JldC0+ZXJyb3IgPSBFX0VSUk9SOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CiAgICAgfQogI2VuZGlmCiAgICAgcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9QYXJzZXIvcGdlbm1haW4uYyBiL1BhcnNlci9wZ2VubWFpbi5jCmluZGV4IDUyYjgzODAuLjAxN2E0ZjkgMTAwNjQ0Ci0tLSBhL1BhcnNlci9wZ2VubWFpbi5jCisrKyBiL1BhcnNlci9wZ2VubWFpbi5jCkBAIC0xMTMsNiArMTEzLDcgQEAKICAgICAgICAgUHlfRXhpdCgxKTsKICAgICB9CiAgICAgZyA9IHBnZW4obik7CisgICAgUHlOb2RlX0ZyZWUobik7CiAgICAgaWYgKGcgPT0gTlVMTCkgewogICAgICAgICBwcmludGYoIkJhZCBncmFtbWFyLlxuIik7CiAgICAgICAgIFB5X0V4aXQoMSk7CkBAIC0xMzcsNyArMTM4LDcgQEAKIC8qIE5vLW5vbnNlbnNlIG15X3JlYWRsaW5lKCkgZm9yIHRva2VuaXplci5jICovCiAKIGNoYXIgKgotUHlPU19SZWFkbGluZShGSUxFICpzeXNfc3RkaW4sIEZJTEUgKnN5c19zdGRvdXQsIGNoYXIgKnByb21wdCkKK1B5T1NfUmVhZGxpbmUoRklMRSAqc3lzX3N0ZGluLCBGSUxFICpzeXNfc3Rkb3V0LCBjb25zdCBjaGFyICpwcm9tcHQpCiB7CiAgICAgc2l6ZV90IG4gPSAxMDAwOwogICAgIGNoYXIgKnAgPSAoY2hhciAqKVB5TWVtX01BTExPQyhuKTsKZGlmZiAtLWdpdCBhL1BhcnNlci90b2tlbml6ZXIuYyBiL1BhcnNlci90b2tlbml6ZXIuYwppbmRleCA2NjBjMGYwLi4xNTQwZDI2IDEwMDY0NAotLS0gYS9QYXJzZXIvdG9rZW5pemVyLmMKKysrIGIvUGFyc2VyL3Rva2VuaXplci5jCkBAIC0zMSw3ICszMSw3IEBACiAgICAgICAgICAgICAgICB8fCBjID09ICdfJ1wKICAgICAgICAgICAgICAgIHx8IChjID49IDEyOCkpCiAKLWV4dGVybiBjaGFyICpQeU9TX1JlYWRsaW5lKEZJTEUgKiwgRklMRSAqLCBjaGFyICopOworZXh0ZXJuIGNoYXIgKlB5T1NfUmVhZGxpbmUoRklMRSAqLCBGSUxFICosIGNvbnN0IGNoYXIgKik7CiAvKiBSZXR1cm4gbWFsbG9jJ2VkIHN0cmluZyBpbmNsdWRpbmcgdHJhaWxpbmcgXG47CiAgICBlbXB0eSBtYWxsb2MnZWQgc3RyaW5nIGZvciBFT0Y7CiAgICBOVUxMIGlmIGludGVycnVwdGVkICovCkBAIC00Nyw3ICs0Nyw3IEBACiAKIC8qIFRva2VuIG5hbWVzICovCiAKLWNoYXIgKl9QeVBhcnNlcl9Ub2tlbk5hbWVzW10gPSB7Citjb25zdCBjaGFyICpfUHlQYXJzZXJfVG9rZW5OYW1lc1tdID0gewogICAgICJFTkRNQVJLRVIiLAogICAgICJOQU1FIiwKICAgICAiTlVNQkVSIiwKQEAgLTE4Nyw3ICsxODcsOCBAQAogICAgIHRvay0+ZGVjb2RpbmdfZXJyZWQgPSAxOwogICAgIGlmICh0b2stPmZwICE9IE5VTEwgJiYgdG9rLT5idWYgIT0gTlVMTCkgLyogc2VlIFB5VG9rZW5pemVyX0ZyZWUgKi8KICAgICAgICAgUHlNZW1fRlJFRSh0b2stPmJ1Zik7Ci0gICAgdG9rLT5idWYgPSBOVUxMOworICAgIHRvay0+YnVmID0gdG9rLT5jdXIgPSB0b2stPmVuZCA9IHRvay0+aW5wID0gdG9rLT5zdGFydCA9IE5VTEw7CisgICAgdG9rLT5kb25lID0gRV9ERUNPREU7CiAgICAgcmV0dXJuIE5VTEw7ICAgICAgICAgICAgICAgIC8qIGFzIGlmIGl0IHdlcmUgRU9GICovCiB9CiAKQEAgLTY5MSw3ICs2OTIsOCBAQAogCiBzdGF0aWMgY2hhciAqCiB0cmFuc2xhdGVfbmV3bGluZXMoY29uc3QgY2hhciAqcywgaW50IGV4ZWNfaW5wdXQsIHN0cnVjdCB0b2tfc3RhdGUgKnRvaykgewotICAgIGludCBza2lwX25leHRfbGYgPSAwLCBuZWVkZWRfbGVuZ3RoID0gc3RybGVuKHMpICsgMiwgZmluYWxfbGVuZ3RoOworICAgIGludCBza2lwX25leHRfbGYgPSAwOworICAgIHNpemVfdCBuZWVkZWRfbGVuZ3RoID0gc3RybGVuKHMpICsgMiwgZmluYWxfbGVuZ3RoOwogICAgIGNoYXIgKmJ1ZiwgKmN1cnJlbnQ7CiAgICAgY2hhciBjID0gJ1wwJzsKICAgICBidWYgPSBQeU1lbV9NQUxMT0MobmVlZGVkX2xlbmd0aCk7CkBAIC03OTksNyArODAxLDcgQEAKICAgICBzdHJ1Y3QgdG9rX3N0YXRlICp0b2sgPSB0b2tfbmV3KCk7CiAgICAgaWYgKHRvayA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBzdHIgPSAoY2hhciAqKWRlY29kZV9zdHIoc3RyLCBleGVjX2lucHV0LCB0b2spOworICAgIHN0ciA9IGRlY29kZV9zdHIoc3RyLCBleGVjX2lucHV0LCB0b2spOwogICAgIGlmIChzdHIgPT0gTlVMTCkgewogICAgICAgICBQeVRva2VuaXplcl9GcmVlKHRvayk7CiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtODQyLDcgKzg0NCw4IEBACiAvKiBTZXQgdXAgdG9rZW5pemVyIGZvciBmaWxlICovCiAKIHN0cnVjdCB0b2tfc3RhdGUgKgotUHlUb2tlbml6ZXJfRnJvbUZpbGUoRklMRSAqZnAsIGNoYXIqIGVuYywgY2hhciAqcHMxLCBjaGFyICpwczIpCitQeVRva2VuaXplcl9Gcm9tRmlsZShGSUxFICpmcCwgY29uc3QgY2hhciogZW5jLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcHMxLCBjb25zdCBjaGFyICpwczIpCiB7CiAgICAgc3RydWN0IHRva19zdGF0ZSAqdG9rID0gdG9rX25ldygpOwogICAgIGlmICh0b2sgPT0gTlVMTCkKQEAgLTg5Myw3ICs4OTYsNyBAQAogLyogR2V0IG5leHQgY2hhciwgdXBkYXRpbmcgc3RhdGU7IGVycm9yIGNvZGUgZ29lcyBpbnRvIHRvay0+ZG9uZSAqLwogCiBzdGF0aWMgaW50Ci10b2tfbmV4dGMocmVnaXN0ZXIgc3RydWN0IHRva19zdGF0ZSAqdG9rKQordG9rX25leHRjKHN0cnVjdCB0b2tfc3RhdGUgKnRvaykKIHsKICAgICBmb3IgKDs7KSB7CiAgICAgICAgIGlmICh0b2stPmN1ciAhPSB0b2stPmlucCkgewpAQCAtOTQxLDExICs5NDQsNiBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBidWZsZW4gPSBQeUJ5dGVzX0dFVF9TSVpFKHUpOwogICAgICAgICAgICAgICAgIGJ1ZiA9IFB5Qnl0ZXNfQVNfU1RSSU5HKHUpOwotICAgICAgICAgICAgICAgIGlmICghYnVmKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih1KTsKLSAgICAgICAgICAgICAgICAgICAgdG9rLT5kb25lID0gRV9ERUNPREU7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBFT0Y7Ci0gICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIG5ld3RvayA9IFB5TWVtX01BTExPQyhidWZsZW4rMSk7CiAgICAgICAgICAgICAgICAgc3RyY3B5KG5ld3RvaywgYnVmKTsKICAgICAgICAgICAgICAgICBQeV9ERUNSRUYodSk7CkBAIC05ODcsNyArOTg1LDYgQEAKICAgICAgICAgICAgICAgICBpZiAodG9rLT5idWYgIT0gTlVMTCkKICAgICAgICAgICAgICAgICAgICAgUHlNZW1fRlJFRSh0b2stPmJ1Zik7CiAgICAgICAgICAgICAgICAgdG9rLT5idWYgPSBuZXd0b2s7Ci0gICAgICAgICAgICAgICAgdG9rLT5saW5lX3N0YXJ0ID0gdG9rLT5idWY7CiAgICAgICAgICAgICAgICAgdG9rLT5jdXIgPSB0b2stPmJ1ZjsKICAgICAgICAgICAgICAgICB0b2stPmxpbmVfc3RhcnQgPSB0b2stPmJ1ZjsKICAgICAgICAgICAgICAgICB0b2stPmlucCA9IHN0cmNocih0b2stPmJ1ZiwgJ1wwJyk7CkBAIC0xMDEwLDcgKzEwMDcsOCBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAoZGVjb2RpbmdfZmdldHModG9rLT5idWYsIChpbnQpKHRvay0+ZW5kIC0gdG9rLT5idWYpLAogICAgICAgICAgICAgICAgICAgICAgICAgICB0b2spID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgdG9rLT5kb25lID0gRV9FT0Y7CisgICAgICAgICAgICAgICAgICAgIGlmICghdG9rLT5kZWNvZGluZ19lcnJlZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvay0+ZG9uZSA9IEVfRU9GOwogICAgICAgICAgICAgICAgICAgICBkb25lID0gMTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZWxzZSB7CkBAIC0xMDQ0LDYgKzEwNDIsOCBAQAogICAgICAgICAgICAgICAgICAgICByZXR1cm4gRU9GOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB0b2stPmJ1ZiA9IG5ld2J1ZjsKKyAgICAgICAgICAgICAgICB0b2stPmN1ciA9IHRvay0+YnVmICsgY3VyOworICAgICAgICAgICAgICAgIHRvay0+bGluZV9zdGFydCA9IHRvay0+Y3VyOwogICAgICAgICAgICAgICAgIHRvay0+aW5wID0gdG9rLT5idWYgKyBjdXJ2YWxpZDsKICAgICAgICAgICAgICAgICB0b2stPmVuZCA9IHRvay0+YnVmICsgbmV3c2l6ZTsKICAgICAgICAgICAgICAgICB0b2stPnN0YXJ0ID0gY3Vyc3RhcnQgPCAwID8gTlVMTCA6CkBAIC0xMDkwLDcgKzEwOTAsNyBAQAogLyogQmFjay11cCBvbmUgY2hhcmFjdGVyICovCiAKIHN0YXRpYyB2b2lkCi10b2tfYmFja3VwKHJlZ2lzdGVyIHN0cnVjdCB0b2tfc3RhdGUgKnRvaywgcmVnaXN0ZXIgaW50IGMpCit0b2tfYmFja3VwKHN0cnVjdCB0b2tfc3RhdGUgKnRvaywgaW50IGMpCiB7CiAgICAgaWYgKGMgIT0gRU9GKSB7CiAgICAgICAgIGlmICgtLXRvay0+Y3VyIDwgdG9rLT5idWYpCkBAIC0xMjk5LDYgKzEyOTksOCBAQAogewogICAgIFB5T2JqZWN0ICpzOwogICAgIGludCByZXN1bHQ7CisgICAgaWYgKHRvay0+ZGVjb2RpbmdfZXJyZWQpCisgICAgICAgIHJldHVybiAwOwogICAgIHMgPSBQeVVuaWNvZGVfRGVjb2RlVVRGOCh0b2stPnN0YXJ0LCB0b2stPmN1ciAtIHRvay0+c3RhcnQsIE5VTEwpOwogICAgIGlmIChzID09IE5VTEwgfHwgUHlVbmljb2RlX1JFQURZKHMpID09IC0xKSB7CiAgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX1VuaWNvZGVEZWNvZGVFcnJvcikpIHsKQEAgLTEzMjAsOSArMTMyMiw5IEBACiAvKiBHZXQgbmV4dCB0b2tlbiwgYWZ0ZXIgc3BhY2Ugc3RyaXBwaW5nIGV0Yy4gKi8KIAogc3RhdGljIGludAotdG9rX2dldChyZWdpc3RlciBzdHJ1Y3QgdG9rX3N0YXRlICp0b2ssIGNoYXIgKipwX3N0YXJ0LCBjaGFyICoqcF9lbmQpCit0b2tfZ2V0KHN0cnVjdCB0b2tfc3RhdGUgKnRvaywgY2hhciAqKnBfc3RhcnQsIGNoYXIgKipwX2VuZCkKIHsKLSAgICByZWdpc3RlciBpbnQgYzsKKyAgICBpbnQgYzsKICAgICBpbnQgYmxhbmtsaW5lLCBub25hc2NpaTsKIAogICAgICpwX3N0YXJ0ID0gKnBfZW5kID0gTlVMTDsKQEAgLTEzMzIsOCArMTMzNCw4IEBACiAKICAgICAvKiBHZXQgaW5kZW50YXRpb24gbGV2ZWwgKi8KICAgICBpZiAodG9rLT5hdGJvbCkgewotICAgICAgICByZWdpc3RlciBpbnQgY29sID0gMDsKLSAgICAgICAgcmVnaXN0ZXIgaW50IGFsdGNvbCA9IDA7CisgICAgICAgIGludCBjb2wgPSAwOworICAgICAgICBpbnQgYWx0Y29sID0gMDsKICAgICAgICAgdG9rLT5hdGJvbCA9IDA7CiAgICAgICAgIGZvciAoOzspIHsKICAgICAgICAgICAgIGMgPSB0b2tfbmV4dGModG9rKTsKQEAgLTE0NjcsMTEgKzE0NjksOCBAQAogICAgICAgICAgICAgYyA9IHRva19uZXh0Yyh0b2spOwogICAgICAgICB9CiAgICAgICAgIHRva19iYWNrdXAodG9rLCBjKTsKLSAgICAgICAgaWYgKG5vbmFzY2lpICYmCi0gICAgICAgICAgICAhdmVyaWZ5X2lkZW50aWZpZXIodG9rKSkgewotICAgICAgICAgICAgdG9rLT5kb25lID0gRV9JREVOVElGSUVSOworICAgICAgICBpZiAobm9uYXNjaWkgJiYgIXZlcmlmeV9pZGVudGlmaWVyKHRvaykpCiAgICAgICAgICAgICByZXR1cm4gRVJST1JUT0tFTjsKLSAgICAgICAgfQogICAgICAgICAqcF9zdGFydCA9IHRvay0+c3RhcnQ7CiAgICAgICAgICpwX2VuZCA9IHRvay0+Y3VyOwogICAgICAgICByZXR1cm4gTkFNRTsKQEAgLTE1OTUsMTUgKzE1OTQsMjQgQEAKICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoaXNkaWdpdChjKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmIChjID09ICdlJyB8fCBjID09ICdFJykgewotICAgICAgICBleHBvbmVudDoKKyAgICAgICAgICAgICAgICAgICAgaW50IGU7CisgICAgICAgICAgICAgICAgICBleHBvbmVudDoKKyAgICAgICAgICAgICAgICAgICAgZSA9IGM7CiAgICAgICAgICAgICAgICAgICAgIC8qIEV4cG9uZW50IHBhcnQgKi8KICAgICAgICAgICAgICAgICAgICAgYyA9IHRva19uZXh0Yyh0b2spOwotICAgICAgICAgICAgICAgICAgICBpZiAoYyA9PSAnKycgfHwgYyA9PSAnLScpCisgICAgICAgICAgICAgICAgICAgIGlmIChjID09ICcrJyB8fCBjID09ICctJykgewogICAgICAgICAgICAgICAgICAgICAgICAgYyA9IHRva19uZXh0Yyh0b2spOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWlzZGlnaXQoYykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRvay0+ZG9uZSA9IEVfVE9LRU47CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzZGlnaXQoYykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2stPmRvbmUgPSBFX1RPS0VOOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva19iYWNrdXAodG9rLCBjKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRVJST1JUT0tFTjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghaXNkaWdpdChjKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgdG9rX2JhY2t1cCh0b2ssIGMpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEVSUk9SVE9LRU47CisgICAgICAgICAgICAgICAgICAgICAgICB0b2tfYmFja3VwKHRvaywgZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAqcF9zdGFydCA9IHRvay0+c3RhcnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAqcF9lbmQgPSB0b2stPmN1cjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVU1CRVI7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgZG8gewogICAgICAgICAgICAgICAgICAgICAgICAgYyA9IHRva19uZXh0Yyh0b2spOwpAQCAtMTc0OSwxMCArMTc1NywxNSBAQAogICAgIEZJTEUgKmZwOwogICAgIGNoYXIgKnBfc3RhcnQgPU5VTEwgLCAqcF9lbmQgPU5VTEwgLCAqZW5jb2RpbmcgPSBOVUxMOwogCisjaWZuZGVmIFBHRU4KKyAgICBmZCA9IF9QeV9kdXAoZmQpOworI2Vsc2UKICAgICBmZCA9IGR1cChmZCk7CisjZW5kaWYKICAgICBpZiAoZmQgPCAwKSB7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KKwogICAgIGZwID0gZmRvcGVuKGZkLCAiciIpOwogICAgIGlmIChmcCA9PSBOVUxMKSB7CiAgICAgICAgIHJldHVybiBOVUxMOwpkaWZmIC0tZ2l0IGEvUGFyc2VyL3Rva2VuaXplci5oIGIvUGFyc2VyL3Rva2VuaXplci5oCmluZGV4IGVkMWYzYWEuLjFjZTZlZWIgMTAwNjQ0Ci0tLSBhL1BhcnNlci90b2tlbml6ZXIuaAorKysgYi9QYXJzZXIvdG9rZW5pemVyLmgKQEAgLTM1LDcgKzM1LDcgQEAKICAgICBpbnQgaW5kc3RhY2tbTUFYSU5ERU5UXTsgICAgICAgICAgICAvKiBTdGFjayBvZiBpbmRlbnRzICovCiAgICAgaW50IGF0Ym9sOyAgICAgICAgICAvKiBOb256ZXJvIGlmIGF0IGJlZ2luIG9mIG5ldyBsaW5lICovCiAgICAgaW50IHBlbmRpbjsgICAgICAgICAvKiBQZW5kaW5nIGluZGVudHMgKGlmID4gMCkgb3IgZGVkZW50cyAoaWYgPCAwKSAqLwotICAgIGNoYXIgKnByb21wdCwgKm5leHRwcm9tcHQ7ICAgICAgICAgIC8qIEZvciBpbnRlcmFjdGl2ZSBwcm9tcHRpbmcgKi8KKyAgICBjb25zdCBjaGFyICpwcm9tcHQsICpuZXh0cHJvbXB0OyAgICAgICAgICAvKiBGb3IgaW50ZXJhY3RpdmUgcHJvbXB0aW5nICovCiAgICAgaW50IGxpbmVubzsgICAgICAgICAvKiBDdXJyZW50IGxpbmUgbnVtYmVyICovCiAgICAgaW50IGxldmVsOyAgICAgICAgICAvKiAoKSBbXSB7fSBQYXJlbnRoZXNlcyBuZXN0aW5nIGxldmVsICovCiAgICAgICAgICAgICAvKiBVc2VkIHRvIGFsbG93IGZyZWUgY29udGludWF0aW9ucyBpbnNpZGUgdGhlbSAqLwpAQCAtNjksOCArNjksOCBAQAogCiBleHRlcm4gc3RydWN0IHRva19zdGF0ZSAqUHlUb2tlbml6ZXJfRnJvbVN0cmluZyhjb25zdCBjaGFyICosIGludCk7CiBleHRlcm4gc3RydWN0IHRva19zdGF0ZSAqUHlUb2tlbml6ZXJfRnJvbVVURjgoY29uc3QgY2hhciAqLCBpbnQpOwotZXh0ZXJuIHN0cnVjdCB0b2tfc3RhdGUgKlB5VG9rZW5pemVyX0Zyb21GaWxlKEZJTEUgKiwgY2hhciosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqLCBjaGFyICopOworZXh0ZXJuIHN0cnVjdCB0b2tfc3RhdGUgKlB5VG9rZW5pemVyX0Zyb21GaWxlKEZJTEUgKiwgY29uc3QgY2hhciosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwogZXh0ZXJuIHZvaWQgUHlUb2tlbml6ZXJfRnJlZShzdHJ1Y3QgdG9rX3N0YXRlICopOwogZXh0ZXJuIGludCBQeVRva2VuaXplcl9HZXQoc3RydWN0IHRva19zdGF0ZSAqLCBjaGFyICoqLCBjaGFyICoqKTsKIGV4dGVybiBjaGFyICogUHlUb2tlbml6ZXJfUmVzdG9yZUVuY29kaW5nKHN0cnVjdCB0b2tfc3RhdGUqIHRvaywKZGlmZiAtLWdpdCBhL1B5dGhvbi9QeXRob24tYXN0LmMgYi9QeXRob24vUHl0aG9uLWFzdC5jCmluZGV4IDg1NDNiNjYuLjQ0ZmRhZmMgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9QeXRob24tYXN0LmMKKysrIGIvUHl0aG9uL1B5dGhvbi1hc3QuYwpAQCAtMjcxLDYgKzI3MSwxMCBAQAogc3RhdGljIGNoYXIgKkJ5dGVzX2ZpZWxkc1tdPXsKICAgICAicyIsCiB9Oworc3RhdGljIFB5VHlwZU9iamVjdCAqTmFtZUNvbnN0YW50X3R5cGU7CitzdGF0aWMgY2hhciAqTmFtZUNvbnN0YW50X2ZpZWxkc1tdPXsKKyAgICAidmFsdWUiLAorfTsKIHN0YXRpYyBQeVR5cGVPYmplY3QgKkVsbGlwc2lzX3R5cGU7CiBzdGF0aWMgUHlUeXBlT2JqZWN0ICpBdHRyaWJ1dGVfdHlwZTsKIF9QeV9JREVOVElGSUVSKGF0dHIpOwpAQCAtNDA4LDI0ICs0MTIsMjQgQEAKIHN0YXRpYyBQeVR5cGVPYmplY3QgKmFyZ3VtZW50c190eXBlOwogc3RhdGljIFB5T2JqZWN0KiBhc3Qyb2JqX2FyZ3VtZW50cyh2b2lkKik7CiBfUHlfSURFTlRJRklFUih2YXJhcmcpOwotX1B5X0lERU5USUZJRVIodmFyYXJnYW5ub3RhdGlvbik7CiBfUHlfSURFTlRJRklFUihrd29ubHlhcmdzKTsKLV9QeV9JREVOVElGSUVSKGt3YXJnKTsKLV9QeV9JREVOVElGSUVSKGt3YXJnYW5ub3RhdGlvbik7Ci1fUHlfSURFTlRJRklFUihkZWZhdWx0cyk7CiBfUHlfSURFTlRJRklFUihrd19kZWZhdWx0cyk7CitfUHlfSURFTlRJRklFUihrd2FyZyk7CitfUHlfSURFTlRJRklFUihkZWZhdWx0cyk7CiBzdGF0aWMgY2hhciAqYXJndW1lbnRzX2ZpZWxkc1tdPXsKICAgICAiYXJncyIsCiAgICAgInZhcmFyZyIsCi0gICAgInZhcmFyZ2Fubm90YXRpb24iLAogICAgICJrd29ubHlhcmdzIiwKLSAgICAia3dhcmciLAotICAgICJrd2FyZ2Fubm90YXRpb24iLAotICAgICJkZWZhdWx0cyIsCiAgICAgImt3X2RlZmF1bHRzIiwKKyAgICAia3dhcmciLAorICAgICJkZWZhdWx0cyIsCiB9Owogc3RhdGljIFB5VHlwZU9iamVjdCAqYXJnX3R5cGU7CiBzdGF0aWMgUHlPYmplY3QqIGFzdDJvYmpfYXJnKHZvaWQqKTsKK3N0YXRpYyBjaGFyICphcmdfYXR0cmlidXRlc1tdID0geworICAgICJsaW5lbm8iLAorICAgICJjb2xfb2Zmc2V0IiwKK307CiBfUHlfSURFTlRJRklFUihhcmcpOwogX1B5X0lERU5USUZJRVIoYW5ub3RhdGlvbik7CiBzdGF0aWMgY2hhciAqYXJnX2ZpZWxkc1tdPXsKQEAgLTY3Myw2ICs2NzcsNyBAQAogICAgIFB5X0lOQ1JFRigoUHlPYmplY3QqKW8pOwogICAgIHJldHVybiAoUHlPYmplY3QqKW87CiB9CisjZGVmaW5lIGFzdDJvYmpfc2luZ2xldG9uIGFzdDJvYmpfb2JqZWN0CiAjZGVmaW5lIGFzdDJvYmpfaWRlbnRpZmllciBhc3Qyb2JqX29iamVjdAogI2RlZmluZSBhc3Qyb2JqX3N0cmluZyBhc3Qyb2JqX29iamVjdAogI2RlZmluZSBhc3Qyb2JqX2J5dGVzIGFzdDJvYmpfb2JqZWN0CkBAIC02ODQsNiArNjg5LDE3IEBACiAKIC8qIENvbnZlcnNpb24gUHl0aG9uIC0+IEFTVCAqLwogCitzdGF0aWMgaW50IG9iajJhc3Rfc2luZ2xldG9uKFB5T2JqZWN0ICpvYmosIFB5T2JqZWN0Kiogb3V0LCBQeUFyZW5hKiBhcmVuYSkKK3sKKyAgICBpZiAob2JqICE9IFB5X05vbmUgJiYgb2JqICE9IFB5X1RydWUgJiYgb2JqICE9IFB5X0ZhbHNlKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgIkFTVCBzaW5nbGV0b24gbXVzdCBiZSBUcnVlLCBGYWxzZSwgb3IgTm9uZSIpOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisgICAgKm91dCA9IG9iajsKKyAgICByZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBvYmoyYXN0X29iamVjdChQeU9iamVjdCogb2JqLCBQeU9iamVjdCoqIG91dCwgUHlBcmVuYSogYXJlbmEpCiB7CiAgICAgaWYgKG9iaiA9PSBQeV9Ob25lKQpAQCAtNzU4LDYgKzc3NCwxOSBAQAogICAgIHJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGV4aXN0c19ub3Rfbm9uZShQeU9iamVjdCAqb2JqLCBfUHlfSWRlbnRpZmllciAqaWQpCit7CisgICAgaW50IGlzbm9uZTsKKyAgICBQeU9iamVjdCAqYXR0ciA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCBpZCk7CisgICAgaWYgKCFhdHRyKSB7CisgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBpc25vbmUgPSBhdHRyID09IFB5X05vbmU7CisgICAgUHlfREVDUkVGKGF0dHIpOworICAgIHJldHVybiAhaXNub25lOworfQorCiAKIHN0YXRpYyBpbnQgaW5pdF90eXBlcyh2b2lkKQogewpAQCAtODYyLDYgKzg5MSw5IEBACiAgICAgaWYgKCFTdHJfdHlwZSkgcmV0dXJuIDA7CiAgICAgQnl0ZXNfdHlwZSA9IG1ha2VfdHlwZSgiQnl0ZXMiLCBleHByX3R5cGUsIEJ5dGVzX2ZpZWxkcywgMSk7CiAgICAgaWYgKCFCeXRlc190eXBlKSByZXR1cm4gMDsKKyAgICBOYW1lQ29uc3RhbnRfdHlwZSA9IG1ha2VfdHlwZSgiTmFtZUNvbnN0YW50IiwgZXhwcl90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWVDb25zdGFudF9maWVsZHMsIDEpOworICAgIGlmICghTmFtZUNvbnN0YW50X3R5cGUpIHJldHVybiAwOwogICAgIEVsbGlwc2lzX3R5cGUgPSBtYWtlX3R5cGUoIkVsbGlwc2lzIiwgZXhwcl90eXBlLCBOVUxMLCAwKTsKICAgICBpZiAoIUVsbGlwc2lzX3R5cGUpIHJldHVybiAwOwogICAgIEF0dHJpYnV0ZV90eXBlID0gbWFrZV90eXBlKCJBdHRyaWJ1dGUiLCBleHByX3R5cGUsIEF0dHJpYnV0ZV9maWVsZHMsIDMpOwpAQCAtMTAzOSw2ICsxMDcxLDcgQEAKICAgICBjb21wcmVoZW5zaW9uX3R5cGUgPSBtYWtlX3R5cGUoImNvbXByZWhlbnNpb24iLCAmQVNUX3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXByZWhlbnNpb25fZmllbGRzLCAzKTsKICAgICBpZiAoIWNvbXByZWhlbnNpb25fdHlwZSkgcmV0dXJuIDA7CisgICAgaWYgKCFhZGRfYXR0cmlidXRlcyhjb21wcmVoZW5zaW9uX3R5cGUsIE5VTEwsIDApKSByZXR1cm4gMDsKICAgICBleGNlcHRoYW5kbGVyX3R5cGUgPSBtYWtlX3R5cGUoImV4Y2VwdGhhbmRsZXIiLCAmQVNUX3R5cGUsIE5VTEwsIDApOwogICAgIGlmICghZXhjZXB0aGFuZGxlcl90eXBlKSByZXR1cm4gMDsKICAgICBpZiAoIWFkZF9hdHRyaWJ1dGVzKGV4Y2VwdGhhbmRsZXJfdHlwZSwgZXhjZXB0aGFuZGxlcl9hdHRyaWJ1dGVzLCAyKSkKQEAgLTEwNDYsMTYgKzEwNzksMjEgQEAKICAgICBFeGNlcHRIYW5kbGVyX3R5cGUgPSBtYWtlX3R5cGUoIkV4Y2VwdEhhbmRsZXIiLCBleGNlcHRoYW5kbGVyX3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4Y2VwdEhhbmRsZXJfZmllbGRzLCAzKTsKICAgICBpZiAoIUV4Y2VwdEhhbmRsZXJfdHlwZSkgcmV0dXJuIDA7Ci0gICAgYXJndW1lbnRzX3R5cGUgPSBtYWtlX3R5cGUoImFyZ3VtZW50cyIsICZBU1RfdHlwZSwgYXJndW1lbnRzX2ZpZWxkcywgOCk7CisgICAgYXJndW1lbnRzX3R5cGUgPSBtYWtlX3R5cGUoImFyZ3VtZW50cyIsICZBU1RfdHlwZSwgYXJndW1lbnRzX2ZpZWxkcywgNik7CiAgICAgaWYgKCFhcmd1bWVudHNfdHlwZSkgcmV0dXJuIDA7CisgICAgaWYgKCFhZGRfYXR0cmlidXRlcyhhcmd1bWVudHNfdHlwZSwgTlVMTCwgMCkpIHJldHVybiAwOwogICAgIGFyZ190eXBlID0gbWFrZV90eXBlKCJhcmciLCAmQVNUX3R5cGUsIGFyZ19maWVsZHMsIDIpOwogICAgIGlmICghYXJnX3R5cGUpIHJldHVybiAwOworICAgIGlmICghYWRkX2F0dHJpYnV0ZXMoYXJnX3R5cGUsIGFyZ19hdHRyaWJ1dGVzLCAyKSkgcmV0dXJuIDA7CiAgICAga2V5d29yZF90eXBlID0gbWFrZV90eXBlKCJrZXl3b3JkIiwgJkFTVF90eXBlLCBrZXl3b3JkX2ZpZWxkcywgMik7CiAgICAgaWYgKCFrZXl3b3JkX3R5cGUpIHJldHVybiAwOworICAgIGlmICghYWRkX2F0dHJpYnV0ZXMoa2V5d29yZF90eXBlLCBOVUxMLCAwKSkgcmV0dXJuIDA7CiAgICAgYWxpYXNfdHlwZSA9IG1ha2VfdHlwZSgiYWxpYXMiLCAmQVNUX3R5cGUsIGFsaWFzX2ZpZWxkcywgMik7CiAgICAgaWYgKCFhbGlhc190eXBlKSByZXR1cm4gMDsKKyAgICBpZiAoIWFkZF9hdHRyaWJ1dGVzKGFsaWFzX3R5cGUsIE5VTEwsIDApKSByZXR1cm4gMDsKICAgICB3aXRoaXRlbV90eXBlID0gbWFrZV90eXBlKCJ3aXRoaXRlbSIsICZBU1RfdHlwZSwgd2l0aGl0ZW1fZmllbGRzLCAyKTsKICAgICBpZiAoIXdpdGhpdGVtX3R5cGUpIHJldHVybiAwOworICAgIGlmICghYWRkX2F0dHJpYnV0ZXMod2l0aGl0ZW1fdHlwZSwgTlVMTCwgMCkpIHJldHVybiAwOwogICAgIGluaXRpYWxpemVkID0gMTsKICAgICByZXR1cm4gMTsKIH0KQEAgLTE5MjMsNiArMTk2MSwyNSBAQAogfQogCiBleHByX3R5CitOYW1lQ29uc3RhbnQoc2luZ2xldG9uIHZhbHVlLCBpbnQgbGluZW5vLCBpbnQgY29sX29mZnNldCwgUHlBcmVuYSAqYXJlbmEpCit7CisgICAgZXhwcl90eSBwOworICAgIGlmICghdmFsdWUpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiZmllbGQgdmFsdWUgaXMgcmVxdWlyZWQgZm9yIE5hbWVDb25zdGFudCIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcCA9IChleHByX3R5KVB5QXJlbmFfTWFsbG9jKGFyZW5hLCBzaXplb2YoKnApKTsKKyAgICBpZiAoIXApCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHAtPmtpbmQgPSBOYW1lQ29uc3RhbnRfa2luZDsKKyAgICBwLT52Lk5hbWVDb25zdGFudC52YWx1ZSA9IHZhbHVlOworICAgIHAtPmxpbmVubyA9IGxpbmVubzsKKyAgICBwLT5jb2xfb2Zmc2V0ID0gY29sX29mZnNldDsKKyAgICByZXR1cm4gcDsKK30KKworZXhwcl90eQogRWxsaXBzaXMoaW50IGxpbmVubywgaW50IGNvbF9vZmZzZXQsIFB5QXJlbmEgKmFyZW5hKQogewogICAgIGV4cHJfdHkgcDsKQEAgLTIxNzcsOSArMjIzNCw4IEBACiB9CiAKIGFyZ3VtZW50c190eQotYXJndW1lbnRzKGFzZGxfc2VxICogYXJncywgaWRlbnRpZmllciB2YXJhcmcsIGV4cHJfdHkgdmFyYXJnYW5ub3RhdGlvbiwKLSAgICAgICAgICBhc2RsX3NlcSAqIGt3b25seWFyZ3MsIGlkZW50aWZpZXIga3dhcmcsIGV4cHJfdHkga3dhcmdhbm5vdGF0aW9uLAotICAgICAgICAgIGFzZGxfc2VxICogZGVmYXVsdHMsIGFzZGxfc2VxICoga3dfZGVmYXVsdHMsIFB5QXJlbmEgKmFyZW5hKQorYXJndW1lbnRzKGFzZGxfc2VxICogYXJncywgYXJnX3R5IHZhcmFyZywgYXNkbF9zZXEgKiBrd29ubHlhcmdzLCBhc2RsX3NlcSAqCisgICAgICAgICAga3dfZGVmYXVsdHMsIGFyZ190eSBrd2FyZywgYXNkbF9zZXEgKiBkZWZhdWx0cywgUHlBcmVuYSAqYXJlbmEpCiB7CiAgICAgYXJndW1lbnRzX3R5IHA7CiAgICAgcCA9IChhcmd1bWVudHNfdHkpUHlBcmVuYV9NYWxsb2MoYXJlbmEsIHNpemVvZigqcCkpOwpAQCAtMjE4NywxMiArMjI0MywxMCBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBwLT5hcmdzID0gYXJnczsKICAgICBwLT52YXJhcmcgPSB2YXJhcmc7Ci0gICAgcC0+dmFyYXJnYW5ub3RhdGlvbiA9IHZhcmFyZ2Fubm90YXRpb247CiAgICAgcC0+a3dvbmx5YXJncyA9IGt3b25seWFyZ3M7Ci0gICAgcC0+a3dhcmcgPSBrd2FyZzsKLSAgICBwLT5rd2FyZ2Fubm90YXRpb24gPSBrd2FyZ2Fubm90YXRpb247Ci0gICAgcC0+ZGVmYXVsdHMgPSBkZWZhdWx0czsKICAgICBwLT5rd19kZWZhdWx0cyA9IGt3X2RlZmF1bHRzOworICAgIHAtPmt3YXJnID0ga3dhcmc7CisgICAgcC0+ZGVmYXVsdHMgPSBkZWZhdWx0czsKICAgICByZXR1cm4gcDsKIH0KIApAQCAtMjk0Myw2ICsyOTk3LDE1IEBACiAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgUHlfREVDUkVGKHZhbHVlKTsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBOYW1lQ29uc3RhbnRfa2luZDoKKyAgICAgICAgcmVzdWx0ID0gUHlUeXBlX0dlbmVyaWNOZXcoTmFtZUNvbnN0YW50X3R5cGUsIE5VTEwsIE5VTEwpOworICAgICAgICBpZiAoIXJlc3VsdCkgZ290byBmYWlsZWQ7CisgICAgICAgIHZhbHVlID0gYXN0Mm9ial9zaW5nbGV0b24oby0+di5OYW1lQ29uc3RhbnQudmFsdWUpOworICAgICAgICBpZiAoIXZhbHVlKSBnb3RvIGZhaWxlZDsKKyAgICAgICAgaWYgKF9QeU9iamVjdF9TZXRBdHRySWQocmVzdWx0LCAmUHlJZF92YWx1ZSwgdmFsdWUpID09IC0xKQorICAgICAgICAgICAgZ290byBmYWlsZWQ7CisgICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7CisgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRWxsaXBzaXNfa2luZDoKICAgICAgICAgcmVzdWx0ID0gUHlUeXBlX0dlbmVyaWNOZXcoRWxsaXBzaXNfdHlwZSwgTlVMTCwgTlVMTCk7CiAgICAgICAgIGlmICghcmVzdWx0KSBnb3RvIGZhaWxlZDsKQEAgLTMzNjEsMjkgKzM0MjQsMjQgQEAKICAgICBpZiAoX1B5T2JqZWN0X1NldEF0dHJJZChyZXN1bHQsICZQeUlkX2FyZ3MsIHZhbHVlKSA9PSAtMSkKICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgUHlfREVDUkVGKHZhbHVlKTsKLSAgICB2YWx1ZSA9IGFzdDJvYmpfaWRlbnRpZmllcihvLT52YXJhcmcpOworICAgIHZhbHVlID0gYXN0Mm9ial9hcmcoby0+dmFyYXJnKTsKICAgICBpZiAoIXZhbHVlKSBnb3RvIGZhaWxlZDsKICAgICBpZiAoX1B5T2JqZWN0X1NldEF0dHJJZChyZXN1bHQsICZQeUlkX3ZhcmFyZywgdmFsdWUpID09IC0xKQogICAgICAgICBnb3RvIGZhaWxlZDsKICAgICBQeV9ERUNSRUYodmFsdWUpOwotICAgIHZhbHVlID0gYXN0Mm9ial9leHByKG8tPnZhcmFyZ2Fubm90YXRpb24pOwotICAgIGlmICghdmFsdWUpIGdvdG8gZmFpbGVkOwotICAgIGlmIChfUHlPYmplY3RfU2V0QXR0cklkKHJlc3VsdCwgJlB5SWRfdmFyYXJnYW5ub3RhdGlvbiwgdmFsdWUpID09IC0xKQotICAgICAgICBnb3RvIGZhaWxlZDsKLSAgICBQeV9ERUNSRUYodmFsdWUpOwogICAgIHZhbHVlID0gYXN0Mm9ial9saXN0KG8tPmt3b25seWFyZ3MsIGFzdDJvYmpfYXJnKTsKICAgICBpZiAoIXZhbHVlKSBnb3RvIGZhaWxlZDsKICAgICBpZiAoX1B5T2JqZWN0X1NldEF0dHJJZChyZXN1bHQsICZQeUlkX2t3b25seWFyZ3MsIHZhbHVlKSA9PSAtMSkKICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgUHlfREVDUkVGKHZhbHVlKTsKLSAgICB2YWx1ZSA9IGFzdDJvYmpfaWRlbnRpZmllcihvLT5rd2FyZyk7CisgICAgdmFsdWUgPSBhc3Qyb2JqX2xpc3Qoby0+a3dfZGVmYXVsdHMsIGFzdDJvYmpfZXhwcik7CiAgICAgaWYgKCF2YWx1ZSkgZ290byBmYWlsZWQ7Ci0gICAgaWYgKF9QeU9iamVjdF9TZXRBdHRySWQocmVzdWx0LCAmUHlJZF9rd2FyZywgdmFsdWUpID09IC0xKQorICAgIGlmIChfUHlPYmplY3RfU2V0QXR0cklkKHJlc3VsdCwgJlB5SWRfa3dfZGVmYXVsdHMsIHZhbHVlKSA9PSAtMSkKICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgUHlfREVDUkVGKHZhbHVlKTsKLSAgICB2YWx1ZSA9IGFzdDJvYmpfZXhwcihvLT5rd2FyZ2Fubm90YXRpb24pOworICAgIHZhbHVlID0gYXN0Mm9ial9hcmcoby0+a3dhcmcpOwogICAgIGlmICghdmFsdWUpIGdvdG8gZmFpbGVkOwotICAgIGlmIChfUHlPYmplY3RfU2V0QXR0cklkKHJlc3VsdCwgJlB5SWRfa3dhcmdhbm5vdGF0aW9uLCB2YWx1ZSkgPT0gLTEpCisgICAgaWYgKF9QeU9iamVjdF9TZXRBdHRySWQocmVzdWx0LCAmUHlJZF9rd2FyZywgdmFsdWUpID09IC0xKQogICAgICAgICBnb3RvIGZhaWxlZDsKICAgICBQeV9ERUNSRUYodmFsdWUpOwogICAgIHZhbHVlID0gYXN0Mm9ial9saXN0KG8tPmRlZmF1bHRzLCBhc3Qyb2JqX2V4cHIpOwpAQCAtMzM5MSwxMSArMzQ0OSw2IEBACiAgICAgaWYgKF9QeU9iamVjdF9TZXRBdHRySWQocmVzdWx0LCAmUHlJZF9kZWZhdWx0cywgdmFsdWUpID09IC0xKQogICAgICAgICBnb3RvIGZhaWxlZDsKICAgICBQeV9ERUNSRUYodmFsdWUpOwotICAgIHZhbHVlID0gYXN0Mm9ial9saXN0KG8tPmt3X2RlZmF1bHRzLCBhc3Qyb2JqX2V4cHIpOwotICAgIGlmICghdmFsdWUpIGdvdG8gZmFpbGVkOwotICAgIGlmIChfUHlPYmplY3RfU2V0QXR0cklkKHJlc3VsdCwgJlB5SWRfa3dfZGVmYXVsdHMsIHZhbHVlKSA9PSAtMSkKLSAgICAgICAgZ290byBmYWlsZWQ7Ci0gICAgUHlfREVDUkVGKHZhbHVlKTsKICAgICByZXR1cm4gcmVzdWx0OwogZmFpbGVkOgogICAgIFB5X1hERUNSRUYodmFsdWUpOwpAQCAtMzQyNSw2ICszNDc4LDE2IEBACiAgICAgaWYgKF9QeU9iamVjdF9TZXRBdHRySWQocmVzdWx0LCAmUHlJZF9hbm5vdGF0aW9uLCB2YWx1ZSkgPT0gLTEpCiAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgIFB5X0RFQ1JFRih2YWx1ZSk7CisgICAgdmFsdWUgPSBhc3Qyb2JqX2ludChvLT5saW5lbm8pOworICAgIGlmICghdmFsdWUpIGdvdG8gZmFpbGVkOworICAgIGlmIChfUHlPYmplY3RfU2V0QXR0cklkKHJlc3VsdCwgJlB5SWRfbGluZW5vLCB2YWx1ZSkgPCAwKQorICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICBQeV9ERUNSRUYodmFsdWUpOworICAgIHZhbHVlID0gYXN0Mm9ial9pbnQoby0+Y29sX29mZnNldCk7CisgICAgaWYgKCF2YWx1ZSkgZ290byBmYWlsZWQ7CisgICAgaWYgKF9QeU9iamVjdF9TZXRBdHRySWQocmVzdWx0LCAmUHlJZF9jb2xfb2Zmc2V0LCB2YWx1ZSkgPCAwKQorICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICBQeV9ERUNSRUYodmFsdWUpOwogICAgIHJldHVybiByZXN1bHQ7CiBmYWlsZWQ6CiAgICAgUHlfWERFQ1JFRih2YWx1ZSk7CkBAIC0zNTQ5LDcgKzM2MTIsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBib2R5ID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgYm9keSA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAoYm9keSA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIHN0bXRfdHkgdmFsdWU7CkBAIC0zNTg0LDcgKzM2NDcsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBib2R5ID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgYm9keSA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAoYm9keSA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIHN0bXRfdHkgdmFsdWU7CkBAIC0zNjQxLDcgKzM3MDQsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBib2R5ID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgYm9keSA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAoYm9keSA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIHN0bXRfdHkgdmFsdWU7CkBAIC0zNzQ0LDcgKzM4MDcsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBib2R5ID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgYm9keSA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAoYm9keSA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIHN0bXRfdHkgdmFsdWU7CkBAIC0zNzY4LDcgKzM4MzEsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBkZWNvcmF0b3JfbGlzdCA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIGRlY29yYXRvcl9saXN0ID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChkZWNvcmF0b3JfbGlzdCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIGV4cHJfdHkgdmFsdWU7CkBAIC0zNzgxLDcgKzM4NDQsNyBAQAogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgInJlcXVpcmVkIGZpZWxkIFwiZGVjb3JhdG9yX2xpc3RcIiBtaXNzaW5nIGZyb20gRnVuY3Rpb25EZWYiKTsKICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICB9Ci0gICAgICAgIGlmIChfUHlPYmplY3RfSGFzQXR0cklkKG9iaiwgJlB5SWRfcmV0dXJucykpIHsKKyAgICAgICAgaWYgKGV4aXN0c19ub3Rfbm9uZShvYmosICZQeUlkX3JldHVybnMpKSB7CiAgICAgICAgICAgICBpbnQgcmVzOwogICAgICAgICAgICAgdG1wID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX3JldHVybnMpOwogICAgICAgICAgICAgaWYgKHRtcCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKQEAgLTM4MzEsNyArMzg5NCw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIGJhc2VzID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgYmFzZXMgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKGJhc2VzID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgZXhwcl90eSB2YWx1ZTsKQEAgLTM4NTUsNyArMzkxOCw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIGtleXdvcmRzID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAga2V5d29yZHMgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKGtleXdvcmRzID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAga2V5d29yZF90eSB2YWx1ZTsKQEAgLTM4NjgsNyArMzkzMSw3IEBACiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAicmVxdWlyZWQgZmllbGQgXCJrZXl3b3Jkc1wiIG1pc3NpbmcgZnJvbSBDbGFzc0RlZiIpOwogICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF9zdGFyYXJncykpIHsKKyAgICAgICAgaWYgKGV4aXN0c19ub3Rfbm9uZShvYmosICZQeUlkX3N0YXJhcmdzKSkgewogICAgICAgICAgICAgaW50IHJlczsKICAgICAgICAgICAgIHRtcCA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF9zdGFyYXJncyk7CiAgICAgICAgICAgICBpZiAodG1wID09IE5VTEwpIGdvdG8gZmFpbGVkOwpAQCAtMzg3OCw3ICszOTQxLDcgQEAKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHN0YXJhcmdzID0gTlVMTDsKICAgICAgICAgfQotICAgICAgICBpZiAoX1B5T2JqZWN0X0hhc0F0dHJJZChvYmosICZQeUlkX2t3YXJncykpIHsKKyAgICAgICAgaWYgKGV4aXN0c19ub3Rfbm9uZShvYmosICZQeUlkX2t3YXJncykpIHsKICAgICAgICAgICAgIGludCByZXM7CiAgICAgICAgICAgICB0bXAgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgJlB5SWRfa3dhcmdzKTsKICAgICAgICAgICAgIGlmICh0bXAgPT0gTlVMTCkgZ290byBmYWlsZWQ7CkBAIC0zODk5LDcgKzM5NjIsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBib2R5ID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgYm9keSA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAoYm9keSA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIHN0bXRfdHkgdmFsdWU7CkBAIC0zOTIzLDcgKzM5ODYsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBkZWNvcmF0b3JfbGlzdCA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIGRlY29yYXRvcl9saXN0ID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChkZWNvcmF0b3JfbGlzdCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIGV4cHJfdHkgdmFsdWU7CkBAIC0zOTQ4LDcgKzQwMTEsNyBAQAogICAgIGlmIChpc2luc3RhbmNlKSB7CiAgICAgICAgIGV4cHJfdHkgdmFsdWU7CiAKLSAgICAgICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF92YWx1ZSkpIHsKKyAgICAgICAgaWYgKGV4aXN0c19ub3Rfbm9uZShvYmosICZQeUlkX3ZhbHVlKSkgewogICAgICAgICAgICAgaW50IHJlczsKICAgICAgICAgICAgIHRtcCA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF92YWx1ZSk7CiAgICAgICAgICAgICBpZiAodG1wID09IE5VTEwpIGdvdG8gZmFpbGVkOwpAQCAtMzk4MCw3ICs0MDQzLDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgdGFyZ2V0cyA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIHRhcmdldHMgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKHRhcmdldHMgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBleHByX3R5IHZhbHVlOwpAQCAtNDAxNiw3ICs0MDc5LDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgdGFyZ2V0cyA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIHRhcmdldHMgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKHRhcmdldHMgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBleHByX3R5IHZhbHVlOwpAQCAtNDEzMyw3ICs0MTk2LDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgYm9keSA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIGJvZHkgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKGJvZHkgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBzdG10X3R5IHZhbHVlOwpAQCAtNDE1Nyw3ICs0MjIwLDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgb3JlbHNlID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgb3JlbHNlID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChvcmVsc2UgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBzdG10X3R5IHZhbHVlOwpAQCAtNDIwNSw3ICs0MjY4LDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgYm9keSA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIGJvZHkgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKGJvZHkgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBzdG10X3R5IHZhbHVlOwpAQCAtNDIyOSw3ICs0MjkyLDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgb3JlbHNlID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgb3JlbHNlID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChvcmVsc2UgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBzdG10X3R5IHZhbHVlOwpAQCAtNDI3Nyw3ICs0MzQwLDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgYm9keSA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIGJvZHkgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKGJvZHkgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBzdG10X3R5IHZhbHVlOwpAQCAtNDMwMSw3ICs0MzY0LDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgb3JlbHNlID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgb3JlbHNlID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChvcmVsc2UgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBzdG10X3R5IHZhbHVlOwpAQCAtNDMzNyw3ICs0NDAwLDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgaXRlbXMgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBpdGVtcyA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAoaXRlbXMgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICB3aXRoaXRlbV90eSB2YWx1ZTsKQEAgLTQzNjEsNyArNDQyNCw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIGJvZHkgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBib2R5ID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChib2R5ID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgc3RtdF90eSB2YWx1ZTsKQEAgLTQzODYsNyArNDQ0OSw3IEBACiAgICAgICAgIGV4cHJfdHkgZXhjOwogICAgICAgICBleHByX3R5IGNhdXNlOwogCi0gICAgICAgIGlmIChfUHlPYmplY3RfSGFzQXR0cklkKG9iaiwgJlB5SWRfZXhjKSkgeworICAgICAgICBpZiAoZXhpc3RzX25vdF9ub25lKG9iaiwgJlB5SWRfZXhjKSkgewogICAgICAgICAgICAgaW50IHJlczsKICAgICAgICAgICAgIHRtcCA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF9leGMpOwogICAgICAgICAgICAgaWYgKHRtcCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKQEAgLTQzOTYsNyArNDQ1OSw3IEBACiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBleGMgPSBOVUxMOwogICAgICAgICB9Ci0gICAgICAgIGlmIChfUHlPYmplY3RfSGFzQXR0cklkKG9iaiwgJlB5SWRfY2F1c2UpKSB7CisgICAgICAgIGlmIChleGlzdHNfbm90X25vbmUob2JqLCAmUHlJZF9jYXVzZSkpIHsKICAgICAgICAgICAgIGludCByZXM7CiAgICAgICAgICAgICB0bXAgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgJlB5SWRfY2F1c2UpOwogICAgICAgICAgICAgaWYgKHRtcCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKQEAgLTQ0MzEsNyArNDQ5NCw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIGJvZHkgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBib2R5ID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChib2R5ID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgc3RtdF90eSB2YWx1ZTsKQEAgLTQ0NTUsNyArNDUxOCw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIGhhbmRsZXJzID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgaGFuZGxlcnMgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKGhhbmRsZXJzID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgZXhjZXB0aGFuZGxlcl90eSB2YWx1ZTsKQEAgLTQ0NzksNyArNDU0Miw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIG9yZWxzZSA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIG9yZWxzZSA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAob3JlbHNlID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgc3RtdF90eSB2YWx1ZTsKQEAgLTQ1MDMsNyArNDU2Niw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIGZpbmFsYm9keSA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIGZpbmFsYm9keSA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAoZmluYWxib2R5ID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgc3RtdF90eSB2YWx1ZTsKQEAgLTQ1NDAsNyArNDYwMyw3IEBACiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAicmVxdWlyZWQgZmllbGQgXCJ0ZXN0XCIgbWlzc2luZyBmcm9tIEFzc2VydCIpOwogICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF9tc2cpKSB7CisgICAgICAgIGlmIChleGlzdHNfbm90X25vbmUob2JqLCAmUHlJZF9tc2cpKSB7CiAgICAgICAgICAgICBpbnQgcmVzOwogICAgICAgICAgICAgdG1wID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX21zZyk7CiAgICAgICAgICAgICBpZiAodG1wID09IE5VTEwpIGdvdG8gZmFpbGVkOwpAQCAtNDU3Miw3ICs0NjM1LDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgbmFtZXMgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBuYW1lcyA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAobmFtZXMgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBhbGlhc190eSB2YWx1ZTsKQEAgLTQ1OTgsNyArNDY2MSw3IEBACiAgICAgICAgIGFzZGxfc2VxKiBuYW1lczsKICAgICAgICAgaW50IGxldmVsOwogCi0gICAgICAgIGlmIChfUHlPYmplY3RfSGFzQXR0cklkKG9iaiwgJlB5SWRfbW9kdWxlKSkgeworICAgICAgICBpZiAoZXhpc3RzX25vdF9ub25lKG9iaiwgJlB5SWRfbW9kdWxlKSkgewogICAgICAgICAgICAgaW50IHJlczsKICAgICAgICAgICAgIHRtcCA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF9tb2R1bGUpOwogICAgICAgICAgICAgaWYgKHRtcCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKQEAgLTQ2MTksNyArNDY4Miw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIG5hbWVzID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgbmFtZXMgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKG5hbWVzID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgYWxpYXNfdHkgdmFsdWU7CkBAIC00NjMyLDcgKzQ2OTUsNyBAQAogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgInJlcXVpcmVkIGZpZWxkIFwibmFtZXNcIiBtaXNzaW5nIGZyb20gSW1wb3J0RnJvbSIpOwogICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF9sZXZlbCkpIHsKKyAgICAgICAgaWYgKGV4aXN0c19ub3Rfbm9uZShvYmosICZQeUlkX2xldmVsKSkgewogICAgICAgICAgICAgaW50IHJlczsKICAgICAgICAgICAgIHRtcCA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF9sZXZlbCk7CiAgICAgICAgICAgICBpZiAodG1wID09IE5VTEwpIGdvdG8gZmFpbGVkOwpAQCAtNDY2NCw3ICs0NzI3LDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgbmFtZXMgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBuYW1lcyA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAobmFtZXMgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBpZGVudGlmaWVyIHZhbHVlOwpAQCAtNDY5OSw3ICs0NzYyLDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgbmFtZXMgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBuYW1lcyA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAobmFtZXMgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBpZGVudGlmaWVyIHZhbHVlOwpAQCAtNDg0MCw3ICs0OTAzLDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgdmFsdWVzID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgdmFsdWVzID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmICh2YWx1ZXMgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBleHByX3R5IHZhbHVlOwpAQCAtNTAzNiw3ICs1MDk5LDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAga2V5cyA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIGtleXMgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKGtleXMgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBleHByX3R5IHZhbHVlOwpAQCAtNTA2MCw3ICs1MTIzLDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgdmFsdWVzID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgdmFsdWVzID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmICh2YWx1ZXMgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBleHByX3R5IHZhbHVlOwpAQCAtNTA5NSw3ICs1MTU4LDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgZWx0cyA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIGVsdHMgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKGVsdHMgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBleHByX3R5IHZhbHVlOwpAQCAtNTE0Miw3ICs1MjA1LDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgZ2VuZXJhdG9ycyA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIGdlbmVyYXRvcnMgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKGdlbmVyYXRvcnMgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBjb21wcmVoZW5zaW9uX3R5IHZhbHVlOwpAQCAtNTE4OSw3ICs1MjUyLDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgZ2VuZXJhdG9ycyA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIGdlbmVyYXRvcnMgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKGdlbmVyYXRvcnMgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBjb21wcmVoZW5zaW9uX3R5IHZhbHVlOwpAQCAtNTI0OCw3ICs1MzExLDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgZ2VuZXJhdG9ycyA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIGdlbmVyYXRvcnMgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKGdlbmVyYXRvcnMgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBjb21wcmVoZW5zaW9uX3R5IHZhbHVlOwpAQCAtNTI5NSw3ICs1MzU4LDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgZ2VuZXJhdG9ycyA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIGdlbmVyYXRvcnMgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKGdlbmVyYXRvcnMgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBjb21wcmVoZW5zaW9uX3R5IHZhbHVlOwpAQCAtNTMxOSw3ICs1MzgyLDcgQEAKICAgICBpZiAoaXNpbnN0YW5jZSkgewogICAgICAgICBleHByX3R5IHZhbHVlOwogCi0gICAgICAgIGlmIChfUHlPYmplY3RfSGFzQXR0cklkKG9iaiwgJlB5SWRfdmFsdWUpKSB7CisgICAgICAgIGlmIChleGlzdHNfbm90X25vbmUob2JqLCAmUHlJZF92YWx1ZSkpIHsKICAgICAgICAgICAgIGludCByZXM7CiAgICAgICAgICAgICB0bXAgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgJlB5SWRfdmFsdWUpOwogICAgICAgICAgICAgaWYgKHRtcCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKQEAgLTUzODYsNyArNTQ0OSw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIG9wcyA9IGFzZGxfaW50X3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBvcHMgPSBfUHlfYXNkbF9pbnRfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChvcHMgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBjbXBvcF90eSB2YWx1ZTsKQEAgLTU0MTAsNyArNTQ3Myw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIGNvbXBhcmF0b3JzID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgY29tcGFyYXRvcnMgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKGNvbXBhcmF0b3JzID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgZXhwcl90eSB2YWx1ZTsKQEAgLTU0NjAsNyArNTUyMyw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIGFyZ3MgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBhcmdzID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChhcmdzID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgZXhwcl90eSB2YWx1ZTsKQEAgLTU0ODQsNyArNTU0Nyw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIGtleXdvcmRzID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAga2V5d29yZHMgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKGtleXdvcmRzID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAga2V5d29yZF90eSB2YWx1ZTsKQEAgLTU0OTcsNyArNTU2MCw3IEBACiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAicmVxdWlyZWQgZmllbGQgXCJrZXl3b3Jkc1wiIG1pc3NpbmcgZnJvbSBDYWxsIik7CiAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgfQotICAgICAgICBpZiAoX1B5T2JqZWN0X0hhc0F0dHJJZChvYmosICZQeUlkX3N0YXJhcmdzKSkgeworICAgICAgICBpZiAoZXhpc3RzX25vdF9ub25lKG9iaiwgJlB5SWRfc3RhcmFyZ3MpKSB7CiAgICAgICAgICAgICBpbnQgcmVzOwogICAgICAgICAgICAgdG1wID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX3N0YXJhcmdzKTsKICAgICAgICAgICAgIGlmICh0bXAgPT0gTlVMTCkgZ290byBmYWlsZWQ7CkBAIC01NTA3LDcgKzU1NzAsNyBAQAogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgc3RhcmFyZ3MgPSBOVUxMOwogICAgICAgICB9Ci0gICAgICAgIGlmIChfUHlPYmplY3RfSGFzQXR0cklkKG9iaiwgJlB5SWRfa3dhcmdzKSkgeworICAgICAgICBpZiAoZXhpc3RzX25vdF9ub25lKG9iaiwgJlB5SWRfa3dhcmdzKSkgewogICAgICAgICAgICAgaW50IHJlczsKICAgICAgICAgICAgIHRtcCA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF9rd2FyZ3MpOwogICAgICAgICAgICAgaWYgKHRtcCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKQEAgLTU1ODgsNiArNTY1MSwyOCBAQAogICAgICAgICBpZiAoKm91dCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQorICAgIGlzaW5zdGFuY2UgPSBQeU9iamVjdF9Jc0luc3RhbmNlKG9iaiwgKFB5T2JqZWN0KilOYW1lQ29uc3RhbnRfdHlwZSk7CisgICAgaWYgKGlzaW5zdGFuY2UgPT0gLTEpIHsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgIGlmIChpc2luc3RhbmNlKSB7CisgICAgICAgIHNpbmdsZXRvbiB2YWx1ZTsKKworICAgICAgICBpZiAoX1B5T2JqZWN0X0hhc0F0dHJJZChvYmosICZQeUlkX3ZhbHVlKSkgeworICAgICAgICAgICAgaW50IHJlczsKKyAgICAgICAgICAgIHRtcCA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF92YWx1ZSk7CisgICAgICAgICAgICBpZiAodG1wID09IE5VTEwpIGdvdG8gZmFpbGVkOworICAgICAgICAgICAgcmVzID0gb2JqMmFzdF9zaW5nbGV0b24odG1wLCAmdmFsdWUsIGFyZW5hKTsKKyAgICAgICAgICAgIGlmIChyZXMgIT0gMCkgZ290byBmYWlsZWQ7CisgICAgICAgICAgICBQeV9DTEVBUih0bXApOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgInJlcXVpcmVkIGZpZWxkIFwidmFsdWVcIiBtaXNzaW5nIGZyb20gTmFtZUNvbnN0YW50Iik7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorICAgICAgICAqb3V0ID0gTmFtZUNvbnN0YW50KHZhbHVlLCBsaW5lbm8sIGNvbF9vZmZzZXQsIGFyZW5hKTsKKyAgICAgICAgaWYgKCpvdXQgPT0gTlVMTCkgZ290byBmYWlsZWQ7CisgICAgICAgIHJldHVybiAwOworICAgIH0KICAgICBpc2luc3RhbmNlID0gUHlPYmplY3RfSXNJbnN0YW5jZShvYmosIChQeU9iamVjdCopRWxsaXBzaXNfdHlwZSk7CiAgICAgaWYgKGlzaW5zdGFuY2UgPT0gLTEpIHsKICAgICAgICAgcmV0dXJuIDE7CkBAIC01Nzc3LDcgKzU4NjIsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBlbHRzID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgZWx0cyA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAoZWx0cyA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIGV4cHJfdHkgdmFsdWU7CkBAIC01ODI0LDcgKzU5MDksNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBlbHRzID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgZWx0cyA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAoZWx0cyA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIGV4cHJfdHkgdmFsdWU7CkBAIC01OTM3LDcgKzYwMjIsNyBAQAogICAgICAgICBleHByX3R5IHVwcGVyOwogICAgICAgICBleHByX3R5IHN0ZXA7CiAKLSAgICAgICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF9sb3dlcikpIHsKKyAgICAgICAgaWYgKGV4aXN0c19ub3Rfbm9uZShvYmosICZQeUlkX2xvd2VyKSkgewogICAgICAgICAgICAgaW50IHJlczsKICAgICAgICAgICAgIHRtcCA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF9sb3dlcik7CiAgICAgICAgICAgICBpZiAodG1wID09IE5VTEwpIGdvdG8gZmFpbGVkOwpAQCAtNTk0Nyw3ICs2MDMyLDcgQEAKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGxvd2VyID0gTlVMTDsKICAgICAgICAgfQotICAgICAgICBpZiAoX1B5T2JqZWN0X0hhc0F0dHJJZChvYmosICZQeUlkX3VwcGVyKSkgeworICAgICAgICBpZiAoZXhpc3RzX25vdF9ub25lKG9iaiwgJlB5SWRfdXBwZXIpKSB7CiAgICAgICAgICAgICBpbnQgcmVzOwogICAgICAgICAgICAgdG1wID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX3VwcGVyKTsKICAgICAgICAgICAgIGlmICh0bXAgPT0gTlVMTCkgZ290byBmYWlsZWQ7CkBAIC01OTU3LDcgKzYwNDIsNyBAQAogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgdXBwZXIgPSBOVUxMOwogICAgICAgICB9Ci0gICAgICAgIGlmIChfUHlPYmplY3RfSGFzQXR0cklkKG9iaiwgJlB5SWRfc3RlcCkpIHsKKyAgICAgICAgaWYgKGV4aXN0c19ub3Rfbm9uZShvYmosICZQeUlkX3N0ZXApKSB7CiAgICAgICAgICAgICBpbnQgcmVzOwogICAgICAgICAgICAgdG1wID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX3N0ZXApOwogICAgICAgICAgICAgaWYgKHRtcCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKQEAgLTU5ODksNyArNjA3NCw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIGRpbXMgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBkaW1zID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChkaW1zID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgc2xpY2VfdHkgdmFsdWU7CkBAIC02MzQwLDcgKzY0MjUsNyBAQAogICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgIH0KICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgIGlmcyA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgaWZzID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgaWYgKGlmcyA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICBleHByX3R5IHZhbHVlOwpAQCAtNjQwNCw3ICs2NDg5LDcgQEAKICAgICAgICAgaWRlbnRpZmllciBuYW1lOwogICAgICAgICBhc2RsX3NlcSogYm9keTsKIAotICAgICAgICBpZiAoX1B5T2JqZWN0X0hhc0F0dHJJZChvYmosICZQeUlkX3R5cGUpKSB7CisgICAgICAgIGlmIChleGlzdHNfbm90X25vbmUob2JqLCAmUHlJZF90eXBlKSkgewogICAgICAgICAgICAgaW50IHJlczsKICAgICAgICAgICAgIHRtcCA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF90eXBlKTsKICAgICAgICAgICAgIGlmICh0bXAgPT0gTlVMTCkgZ290byBmYWlsZWQ7CkBAIC02NDE0LDcgKzY0OTksNyBAQAogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgdHlwZSA9IE5VTEw7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF9uYW1lKSkgeworICAgICAgICBpZiAoZXhpc3RzX25vdF9ub25lKG9iaiwgJlB5SWRfbmFtZSkpIHsKICAgICAgICAgICAgIGludCByZXM7CiAgICAgICAgICAgICB0bXAgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgJlB5SWRfbmFtZSk7CiAgICAgICAgICAgICBpZiAodG1wID09IE5VTEwpIGdvdG8gZmFpbGVkOwpAQCAtNjQzNSw3ICs2NTIwLDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgYm9keSA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIGJvZHkgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKGJvZHkgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBzdG10X3R5IHZhbHVlOwpAQCAtNjQ2NCwxMyArNjU0OSwxMSBAQAogewogICAgIFB5T2JqZWN0KiB0bXAgPSBOVUxMOwogICAgIGFzZGxfc2VxKiBhcmdzOwotICAgIGlkZW50aWZpZXIgdmFyYXJnOwotICAgIGV4cHJfdHkgdmFyYXJnYW5ub3RhdGlvbjsKKyAgICBhcmdfdHkgdmFyYXJnOwogICAgIGFzZGxfc2VxKiBrd29ubHlhcmdzOwotICAgIGlkZW50aWZpZXIga3dhcmc7Ci0gICAgZXhwcl90eSBrd2FyZ2Fubm90YXRpb247Ci0gICAgYXNkbF9zZXEqIGRlZmF1bHRzOwogICAgIGFzZGxfc2VxKiBrd19kZWZhdWx0czsKKyAgICBhcmdfdHkga3dhcmc7CisgICAgYXNkbF9zZXEqIGRlZmF1bHRzOwogCiAgICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF9hcmdzKSkgewogICAgICAgICBpbnQgcmVzOwpAQCAtNjQ4Myw3ICs2NTY2LDcgQEAKICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICB9CiAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICBhcmdzID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICBhcmdzID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgaWYgKGFyZ3MgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgYXJnX3R5IHZhbHVlOwpAQCAtNjQ5NiwyNiArNjU3OSwxNiBAQAogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAicmVxdWlyZWQgZmllbGQgXCJhcmdzXCIgbWlzc2luZyBmcm9tIGFyZ3VtZW50cyIpOwogICAgICAgICByZXR1cm4gMTsKICAgICB9Ci0gICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF92YXJhcmcpKSB7CisgICAgaWYgKGV4aXN0c19ub3Rfbm9uZShvYmosICZQeUlkX3ZhcmFyZykpIHsKICAgICAgICAgaW50IHJlczsKICAgICAgICAgdG1wID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX3ZhcmFyZyk7CiAgICAgICAgIGlmICh0bXAgPT0gTlVMTCkgZ290byBmYWlsZWQ7Ci0gICAgICAgIHJlcyA9IG9iajJhc3RfaWRlbnRpZmllcih0bXAsICZ2YXJhcmcsIGFyZW5hKTsKKyAgICAgICAgcmVzID0gb2JqMmFzdF9hcmcodG1wLCAmdmFyYXJnLCBhcmVuYSk7CiAgICAgICAgIGlmIChyZXMgIT0gMCkgZ290byBmYWlsZWQ7CiAgICAgICAgIFB5X0NMRUFSKHRtcCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgdmFyYXJnID0gTlVMTDsKICAgICB9Ci0gICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF92YXJhcmdhbm5vdGF0aW9uKSkgewotICAgICAgICBpbnQgcmVzOwotICAgICAgICB0bXAgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgJlB5SWRfdmFyYXJnYW5ub3RhdGlvbik7Ci0gICAgICAgIGlmICh0bXAgPT0gTlVMTCkgZ290byBmYWlsZWQ7Ci0gICAgICAgIHJlcyA9IG9iajJhc3RfZXhwcih0bXAsICZ2YXJhcmdhbm5vdGF0aW9uLCBhcmVuYSk7Ci0gICAgICAgIGlmIChyZXMgIT0gMCkgZ290byBmYWlsZWQ7Ci0gICAgICAgIFB5X0NMRUFSKHRtcCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgdmFyYXJnYW5ub3RhdGlvbiA9IE5VTEw7Ci0gICAgfQogICAgIGlmIChfUHlPYmplY3RfSGFzQXR0cklkKG9iaiwgJlB5SWRfa3dvbmx5YXJncykpIHsKICAgICAgICAgaW50IHJlczsKICAgICAgICAgUHlfc3NpemVfdCBsZW47CkBAIC02NTI3LDcgKzY2MDAsNyBAQAogICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgIH0KICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgIGt3b25seWFyZ3MgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgIGt3b25seWFyZ3MgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICBpZiAoa3dvbmx5YXJncyA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICBhcmdfdHkgdmFsdWU7CkBAIC02NTQwLDUwICs2NjEzLDYgQEAKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgInJlcXVpcmVkIGZpZWxkIFwia3dvbmx5YXJnc1wiIG1pc3NpbmcgZnJvbSBhcmd1bWVudHMiKTsKICAgICAgICAgcmV0dXJuIDE7CiAgICAgfQotICAgIGlmIChfUHlPYmplY3RfSGFzQXR0cklkKG9iaiwgJlB5SWRfa3dhcmcpKSB7Ci0gICAgICAgIGludCByZXM7Ci0gICAgICAgIHRtcCA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF9rd2FyZyk7Ci0gICAgICAgIGlmICh0bXAgPT0gTlVMTCkgZ290byBmYWlsZWQ7Ci0gICAgICAgIHJlcyA9IG9iajJhc3RfaWRlbnRpZmllcih0bXAsICZrd2FyZywgYXJlbmEpOwotICAgICAgICBpZiAocmVzICE9IDApIGdvdG8gZmFpbGVkOwotICAgICAgICBQeV9DTEVBUih0bXApOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGt3YXJnID0gTlVMTDsKLSAgICB9Ci0gICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF9rd2FyZ2Fubm90YXRpb24pKSB7Ci0gICAgICAgIGludCByZXM7Ci0gICAgICAgIHRtcCA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF9rd2FyZ2Fubm90YXRpb24pOwotICAgICAgICBpZiAodG1wID09IE5VTEwpIGdvdG8gZmFpbGVkOwotICAgICAgICByZXMgPSBvYmoyYXN0X2V4cHIodG1wLCAma3dhcmdhbm5vdGF0aW9uLCBhcmVuYSk7Ci0gICAgICAgIGlmIChyZXMgIT0gMCkgZ290byBmYWlsZWQ7Ci0gICAgICAgIFB5X0NMRUFSKHRtcCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAga3dhcmdhbm5vdGF0aW9uID0gTlVMTDsKLSAgICB9Ci0gICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF9kZWZhdWx0cykpIHsKLSAgICAgICAgaW50IHJlczsKLSAgICAgICAgUHlfc3NpemVfdCBsZW47Ci0gICAgICAgIFB5X3NzaXplX3QgaTsKLSAgICAgICAgdG1wID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX2RlZmF1bHRzKTsKLSAgICAgICAgaWYgKHRtcCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKLSAgICAgICAgaWYgKCFQeUxpc3RfQ2hlY2sodG1wKSkgewotICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwgImFyZ3VtZW50cyBmaWVsZCBcImRlZmF1bHRzXCIgbXVzdCBiZSBhIGxpc3QsIG5vdCBhICUuMjAwcyIsIHRtcC0+b2JfdHlwZS0+dHBfbmFtZSk7Ci0gICAgICAgICAgICBnb3RvIGZhaWxlZDsKLSAgICAgICAgfQotICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgZGVmYXVsdHMgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7Ci0gICAgICAgIGlmIChkZWZhdWx0cyA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKLSAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0gICAgICAgICAgICBleHByX3R5IHZhbHVlOwotICAgICAgICAgICAgcmVzID0gb2JqMmFzdF9leHByKFB5TGlzdF9HRVRfSVRFTSh0bXAsIGkpLCAmdmFsdWUsIGFyZW5hKTsKLSAgICAgICAgICAgIGlmIChyZXMgIT0gMCkgZ290byBmYWlsZWQ7Ci0gICAgICAgICAgICBhc2RsX3NlcV9TRVQoZGVmYXVsdHMsIGksIHZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICBQeV9DTEVBUih0bXApOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJyZXF1aXJlZCBmaWVsZCBcImRlZmF1bHRzXCIgbWlzc2luZyBmcm9tIGFyZ3VtZW50cyIpOwotICAgICAgICByZXR1cm4gMTsKLSAgICB9CiAgICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF9rd19kZWZhdWx0cykpIHsKICAgICAgICAgaW50IHJlczsKICAgICAgICAgUHlfc3NpemVfdCBsZW47CkBAIC02NTk1LDcgKzY2MjQsNyBAQAogICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgIH0KICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgIGt3X2RlZmF1bHRzID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICBrd19kZWZhdWx0cyA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgIGlmIChrd19kZWZhdWx0cyA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICBleHByX3R5IHZhbHVlOwpAQCAtNjYwOCw4ICs2NjM3LDQyIEBACiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJyZXF1aXJlZCBmaWVsZCBcImt3X2RlZmF1bHRzXCIgbWlzc2luZyBmcm9tIGFyZ3VtZW50cyIpOwogICAgICAgICByZXR1cm4gMTsKICAgICB9Ci0gICAgKm91dCA9IGFyZ3VtZW50cyhhcmdzLCB2YXJhcmcsIHZhcmFyZ2Fubm90YXRpb24sIGt3b25seWFyZ3MsIGt3YXJnLAotICAgICAgICAgICAgICAgICAgICAga3dhcmdhbm5vdGF0aW9uLCBkZWZhdWx0cywga3dfZGVmYXVsdHMsIGFyZW5hKTsKKyAgICBpZiAoZXhpc3RzX25vdF9ub25lKG9iaiwgJlB5SWRfa3dhcmcpKSB7CisgICAgICAgIGludCByZXM7CisgICAgICAgIHRtcCA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF9rd2FyZyk7CisgICAgICAgIGlmICh0bXAgPT0gTlVMTCkgZ290byBmYWlsZWQ7CisgICAgICAgIHJlcyA9IG9iajJhc3RfYXJnKHRtcCwgJmt3YXJnLCBhcmVuYSk7CisgICAgICAgIGlmIChyZXMgIT0gMCkgZ290byBmYWlsZWQ7CisgICAgICAgIFB5X0NMRUFSKHRtcCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAga3dhcmcgPSBOVUxMOworICAgIH0KKyAgICBpZiAoX1B5T2JqZWN0X0hhc0F0dHJJZChvYmosICZQeUlkX2RlZmF1bHRzKSkgeworICAgICAgICBpbnQgcmVzOworICAgICAgICBQeV9zc2l6ZV90IGxlbjsKKyAgICAgICAgUHlfc3NpemVfdCBpOworICAgICAgICB0bXAgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgJlB5SWRfZGVmYXVsdHMpOworICAgICAgICBpZiAodG1wID09IE5VTEwpIGdvdG8gZmFpbGVkOworICAgICAgICBpZiAoIVB5TGlzdF9DaGVjayh0bXApKSB7CisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLCAiYXJndW1lbnRzIGZpZWxkIFwiZGVmYXVsdHNcIiBtdXN0IGJlIGEgbGlzdCwgbm90IGEgJS4yMDBzIiwgdG1wLT5vYl90eXBlLT50cF9uYW1lKTsKKyAgICAgICAgICAgIGdvdG8gZmFpbGVkOworICAgICAgICB9CisgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOworICAgICAgICBkZWZhdWx0cyA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgIGlmIChkZWZhdWx0cyA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisgICAgICAgICAgICBleHByX3R5IHZhbHVlOworICAgICAgICAgICAgcmVzID0gb2JqMmFzdF9leHByKFB5TGlzdF9HRVRfSVRFTSh0bXAsIGkpLCAmdmFsdWUsIGFyZW5hKTsKKyAgICAgICAgICAgIGlmIChyZXMgIT0gMCkgZ290byBmYWlsZWQ7CisgICAgICAgICAgICBhc2RsX3NlcV9TRVQoZGVmYXVsdHMsIGksIHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICBQeV9DTEVBUih0bXApOworICAgIH0gZWxzZSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJyZXF1aXJlZCBmaWVsZCBcImRlZmF1bHRzXCIgbWlzc2luZyBmcm9tIGFyZ3VtZW50cyIpOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisgICAgKm91dCA9IGFyZ3VtZW50cyhhcmdzLCB2YXJhcmcsIGt3b25seWFyZ3MsIGt3X2RlZmF1bHRzLCBrd2FyZywgZGVmYXVsdHMsCisgICAgICAgICAgICAgICAgICAgICBhcmVuYSk7CiAgICAgcmV0dXJuIDA7CiBmYWlsZWQ6CiAgICAgUHlfWERFQ1JFRih0bXApOwpAQCAtNjYzNCw3ICs2Njk3LDcgQEAKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgInJlcXVpcmVkIGZpZWxkIFwiYXJnXCIgbWlzc2luZyBmcm9tIGFyZyIpOwogICAgICAgICByZXR1cm4gMTsKICAgICB9Ci0gICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF9hbm5vdGF0aW9uKSkgeworICAgIGlmIChleGlzdHNfbm90X25vbmUob2JqLCAmUHlJZF9hbm5vdGF0aW9uKSkgewogICAgICAgICBpbnQgcmVzOwogICAgICAgICB0bXAgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgJlB5SWRfYW5ub3RhdGlvbik7CiAgICAgICAgIGlmICh0bXAgPT0gTlVMTCkgZ290byBmYWlsZWQ7CkBAIC02NzA1LDcgKzY3NjgsNyBAQAogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAicmVxdWlyZWQgZmllbGQgXCJuYW1lXCIgbWlzc2luZyBmcm9tIGFsaWFzIik7CiAgICAgICAgIHJldHVybiAxOwogICAgIH0KLSAgICBpZiAoX1B5T2JqZWN0X0hhc0F0dHJJZChvYmosICZQeUlkX2FzbmFtZSkpIHsKKyAgICBpZiAoZXhpc3RzX25vdF9ub25lKG9iaiwgJlB5SWRfYXNuYW1lKSkgewogICAgICAgICBpbnQgcmVzOwogICAgICAgICB0bXAgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgJlB5SWRfYXNuYW1lKTsKICAgICAgICAgaWYgKHRtcCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKQEAgLTY3NDAsNyArNjgwMyw3IEBACiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJyZXF1aXJlZCBmaWVsZCBcImNvbnRleHRfZXhwclwiIG1pc3NpbmcgZnJvbSB3aXRoaXRlbSIpOwogICAgICAgICByZXR1cm4gMTsKICAgICB9Ci0gICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF9vcHRpb25hbF92YXJzKSkgeworICAgIGlmIChleGlzdHNfbm90X25vbmUob2JqLCAmUHlJZF9vcHRpb25hbF92YXJzKSkgewogICAgICAgICBpbnQgcmVzOwogICAgICAgICB0bXAgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgJlB5SWRfb3B0aW9uYWxfdmFycyk7CiAgICAgICAgIGlmICh0bXAgPT0gTlVMTCkgZ290byBmYWlsZWQ7CkBAIC02NzcwLDcgKzY4MzMsNyBAQAogICAgIGlmICghbSkgcmV0dXJuIE5VTEw7CiAgICAgZCA9IFB5TW9kdWxlX0dldERpY3QobSk7CiAgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJBU1QiLCAoUHlPYmplY3QqKSZBU1RfdHlwZSkgPCAwKSByZXR1cm4gTlVMTDsKLSAgICBpZiAoUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlB5Q0ZfT05MWV9BU1QiLCBQeUNGX09OTFlfQVNUKSA8IDApCisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFB5Q0ZfT05MWV9BU1QpIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJtb2QiLCAoUHlPYmplY3QqKW1vZF90eXBlKSA8IDApIHJldHVybiBOVUxMOwogICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAiTW9kdWxlIiwgKFB5T2JqZWN0KilNb2R1bGVfdHlwZSkgPCAwKSByZXR1cm4KQEAgLTY4NTAsNiArNjkxMyw4IEBACiAgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJTdHIiLCAoUHlPYmplY3QqKVN0cl90eXBlKSA8IDApIHJldHVybiBOVUxMOwogICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAiQnl0ZXMiLCAoUHlPYmplY3QqKUJ5dGVzX3R5cGUpIDwgMCkgcmV0dXJuCiAgICAgICAgIE5VTEw7CisgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJOYW1lQ29uc3RhbnQiLCAoUHlPYmplY3QqKU5hbWVDb25zdGFudF90eXBlKSA8CisgICAgICAgIDApIHJldHVybiBOVUxMOwogICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAiRWxsaXBzaXMiLCAoUHlPYmplY3QqKUVsbGlwc2lzX3R5cGUpIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJBdHRyaWJ1dGUiLCAoUHlPYmplY3QqKUF0dHJpYnV0ZV90eXBlKSA8IDApCkBAIC02OTQ5LDcgKzcwMTQsOCBAQAogCiBQeU9iamVjdCogUHlBU1RfbW9kMm9iaihtb2RfdHkgdCkKIHsKLSAgICBpbml0X3R5cGVzKCk7CisgICAgaWYgKCFpbml0X3R5cGVzKCkpCisgICAgICAgIHJldHVybiBOVUxMOwogICAgIHJldHVybiBhc3Qyb2JqX21vZCh0KTsKIH0KIApAQCAtNjk2Nyw3ICs3MDMzLDggQEAKIAogICAgIGFzc2VydCgwIDw9IG1vZGUgJiYgbW9kZSA8PSAyKTsKIAotICAgIGluaXRfdHlwZXMoKTsKKyAgICBpZiAoIWluaXRfdHlwZXMoKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBpc2luc3RhbmNlID0gUHlPYmplY3RfSXNJbnN0YW5jZShhc3QsIHJlcV90eXBlW21vZGVdKTsKICAgICBpZiAoaXNpbnN0YW5jZSA9PSAtMSkKQEAgLTY5ODUsNyArNzA1Miw4IEBACiAKIGludCBQeUFTVF9DaGVjayhQeU9iamVjdCogb2JqKQogewotICAgIGluaXRfdHlwZXMoKTsKKyAgICBpZiAoIWluaXRfdHlwZXMoKSkKKyAgICAgICAgcmV0dXJuIC0xOwogICAgIHJldHVybiBQeU9iamVjdF9Jc0luc3RhbmNlKG9iaiwgKFB5T2JqZWN0KikmQVNUX3R5cGUpOwogfQogCmRpZmYgLS1naXQgYS9QeXRob24vX3dhcm5pbmdzLmMgYi9QeXRob24vX3dhcm5pbmdzLmMKaW5kZXggZDI3NDc4OS4uNmRmZjBhMiAxMDA2NDQKLS0tIGEvUHl0aG9uL193YXJuaW5ncy5jCisrKyBiL1B5dGhvbi9fd2FybmluZ3MuYwpAQCAtMTIsNyArMTIsMTAgQEAKIHN0YXRpYyBQeU9iamVjdCAqX2ZpbHRlcnM7ICAvKiBMaXN0ICovCiBzdGF0aWMgUHlPYmplY3QgKl9vbmNlX3JlZ2lzdHJ5OyAgLyogRGljdCAqLwogc3RhdGljIFB5T2JqZWN0ICpfZGVmYXVsdF9hY3Rpb247IC8qIFN0cmluZyAqLworc3RhdGljIGxvbmcgX2ZpbHRlcnNfdmVyc2lvbjsKIAorX1B5X0lERU5USUZJRVIoYXJndik7CitfUHlfSURFTlRJRklFUihzdGRlcnIpOwogCiBzdGF0aWMgaW50CiBjaGVja19tYXRjaGVkKFB5T2JqZWN0ICpvYmosIFB5T2JqZWN0ICphcmcpCkBAIC05OSw3ICsxMDIsNyBAQAogCiAKIC8qIFRoZSBpdGVtIGlzIGEgbmV3IHJlZmVyZW5jZS4gKi8KLXN0YXRpYyBjb25zdCBjaGFyICoKK3N0YXRpYyBQeU9iamVjdCoKIGdldF9maWx0ZXIoUHlPYmplY3QgKmNhdGVnb3J5LCBQeU9iamVjdCAqdGV4dCwgUHlfc3NpemVfdCBsaW5lbm8sCiAgICAgICAgICAgIFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICoqaXRlbSkKIHsKQEAgLTE0NSwxOCArMTQ4LDMyIEBACiAgICAgICAgIGxuX29iaiA9IFB5VHVwbGVfR0VUX0lURU0odG1wX2l0ZW0sIDQpOwogCiAgICAgICAgIGdvb2RfbXNnID0gY2hlY2tfbWF0Y2hlZChtc2csIHRleHQpOworICAgICAgICBpZiAoZ29vZF9tc2cgPT0gLTEpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRih0bXBfaXRlbSk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorCiAgICAgICAgIGdvb2RfbW9kID0gY2hlY2tfbWF0Y2hlZChtb2QsIG1vZHVsZSk7CisgICAgICAgIGlmIChnb29kX21vZCA9PSAtMSkgeworICAgICAgICAgICAgUHlfREVDUkVGKHRtcF9pdGVtKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisKICAgICAgICAgaXNfc3ViY2xhc3MgPSBQeU9iamVjdF9Jc1N1YmNsYXNzKGNhdGVnb3J5LCBjYXQpOworICAgICAgICBpZiAoaXNfc3ViY2xhc3MgPT0gLTEpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRih0bXBfaXRlbSk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorCiAgICAgICAgIGxuID0gUHlMb25nX0FzU3NpemVfdChsbl9vYmopOwotICAgICAgICBpZiAoZ29vZF9tc2cgPT0gLTEgfHwgZ29vZF9tb2QgPT0gLTEgfHwgaXNfc3ViY2xhc3MgPT0gLTEgfHwKLSAgICAgICAgICAgIChsbiA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgeworICAgICAgICBpZiAobG4gPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkgewogICAgICAgICAgICAgUHlfREVDUkVGKHRtcF9pdGVtKTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGdvb2RfbXNnICYmIGlzX3N1YmNsYXNzICYmIGdvb2RfbW9kICYmIChsbiA9PSAwIHx8IGxpbmVubyA9PSBsbikpIHsKICAgICAgICAgICAgICppdGVtID0gdG1wX2l0ZW07Ci0gICAgICAgICAgICByZXR1cm4gX1B5VW5pY29kZV9Bc1N0cmluZyhhY3Rpb24pOworICAgICAgICAgICAgcmV0dXJuIGFjdGlvbjsKICAgICAgICAgfQogCiAgICAgICAgIFB5X0RFQ1JFRih0bXBfaXRlbSk7CkBAIC0xNjYsNyArMTgzLDcgQEAKICAgICBpZiAoYWN0aW9uICE9IE5VTEwpIHsKICAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwogICAgICAgICAqaXRlbSA9IFB5X05vbmU7Ci0gICAgICAgIHJldHVybiBfUHlVbmljb2RlX0FzU3RyaW5nKGFjdGlvbik7CisgICAgICAgIHJldHVybiBhY3Rpb247CiAgICAgfQogCiAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCkBAIC0xNzgsMTYgKzE5NSwzMyBAQAogc3RhdGljIGludAogYWxyZWFkeV93YXJuZWQoUHlPYmplY3QgKnJlZ2lzdHJ5LCBQeU9iamVjdCAqa2V5LCBpbnQgc2hvdWxkX3NldCkKIHsKLSAgICBQeU9iamVjdCAqYWxyZWFkeV93YXJuZWQ7CisgICAgUHlPYmplY3QgKnZlcnNpb25fb2JqLCAqYWxyZWFkeV93YXJuZWQ7CisgICAgX1B5X0lERU5USUZJRVIodmVyc2lvbik7CiAKICAgICBpZiAoa2V5ID09IE5VTEwpCiAgICAgICAgIHJldHVybiAtMTsKIAotICAgIGFscmVhZHlfd2FybmVkID0gUHlEaWN0X0dldEl0ZW0ocmVnaXN0cnksIGtleSk7Ci0gICAgaWYgKGFscmVhZHlfd2FybmVkICE9IE5VTEwpIHsKLSAgICAgICAgaW50IHJjID0gUHlPYmplY3RfSXNUcnVlKGFscmVhZHlfd2FybmVkKTsKLSAgICAgICAgaWYgKHJjICE9IDApCi0gICAgICAgICAgICByZXR1cm4gcmM7CisgICAgdmVyc2lvbl9vYmogPSBfUHlEaWN0X0dldEl0ZW1JZChyZWdpc3RyeSwgJlB5SWRfdmVyc2lvbik7CisgICAgaWYgKHZlcnNpb25fb2JqID09IE5VTEwKKyAgICAgICAgfHwgIVB5TG9uZ19DaGVja0V4YWN0KHZlcnNpb25fb2JqKQorICAgICAgICB8fCBQeUxvbmdfQXNMb25nKHZlcnNpb25fb2JqKSAhPSBfZmlsdGVyc192ZXJzaW9uKSB7CisgICAgICAgIFB5RGljdF9DbGVhcihyZWdpc3RyeSk7CisgICAgICAgIHZlcnNpb25fb2JqID0gUHlMb25nX0Zyb21Mb25nKF9maWx0ZXJzX3ZlcnNpb24pOworICAgICAgICBpZiAodmVyc2lvbl9vYmogPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgaWYgKF9QeURpY3RfU2V0SXRlbUlkKHJlZ2lzdHJ5LCAmUHlJZF92ZXJzaW9uLCB2ZXJzaW9uX29iaikgPCAwKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYodmVyc2lvbl9vYmopOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIFB5X0RFQ1JFRih2ZXJzaW9uX29iaik7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBhbHJlYWR5X3dhcm5lZCA9IFB5RGljdF9HZXRJdGVtKHJlZ2lzdHJ5LCBrZXkpOworICAgICAgICBpZiAoYWxyZWFkeV93YXJuZWQgIT0gTlVMTCkgeworICAgICAgICAgICAgaW50IHJjID0gUHlPYmplY3RfSXNUcnVlKGFscmVhZHlfd2FybmVkKTsKKyAgICAgICAgICAgIGlmIChyYyAhPSAwKQorICAgICAgICAgICAgICAgIHJldHVybiByYzsKKyAgICAgICAgfQogICAgIH0KIAogICAgIC8qIFRoaXMgd2FybmluZyB3YXNuJ3QgZm91bmQgaW4gdGhlIHJlZ2lzdHJ5LCBzZXQgaXQuICovCkBAIC0yMDEsMjMgKzIzNSwyNiBAQAogbm9ybWFsaXplX21vZHVsZShQeU9iamVjdCAqZmlsZW5hbWUpCiB7CiAgICAgUHlPYmplY3QgKm1vZHVsZTsKLSAgICBjb25zdCBjaGFyICptb2Rfc3RyOworICAgIGludCBraW5kOworICAgIHZvaWQgKmRhdGE7CiAgICAgUHlfc3NpemVfdCBsZW47CiAKLSAgICBpbnQgcmMgPSBQeU9iamVjdF9Jc1RydWUoZmlsZW5hbWUpOwotICAgIGlmIChyYyA9PSAtMSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgZWxzZSBpZiAocmMgPT0gMCkKLSAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nKCI8dW5rbm93bj4iKTsKLQotICAgIG1vZF9zdHIgPSBfUHlVbmljb2RlX0FzU3RyaW5nKGZpbGVuYW1lKTsKLSAgICBpZiAobW9kX3N0ciA9PSBOVUxMKQotICAgICAgICByZXR1cm4gTlVMTDsKICAgICBsZW4gPSBQeVVuaWNvZGVfR2V0TGVuZ3RoKGZpbGVuYW1lKTsKICAgICBpZiAobGVuIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAobGVuID09IDApCisgICAgICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZygiPHVua25vd24+Iik7CisKKyAgICBraW5kID0gUHlVbmljb2RlX0tJTkQoZmlsZW5hbWUpOworICAgIGRhdGEgPSBQeVVuaWNvZGVfREFUQShmaWxlbmFtZSk7CisKKyAgICAvKiBpZiBmaWxlbmFtZS5lbmRzd2l0aCgiLnB5Iik6ICovCiAgICAgaWYgKGxlbiA+PSAzICYmCi0gICAgICAgIHN0cm5jbXAobW9kX3N0ciArIChsZW4gLSAzKSwgIi5weSIsIDMpID09IDApIHsKKyAgICAgICAgUHlVbmljb2RlX1JFQUQoa2luZCwgZGF0YSwgbGVuLTMpID09ICcuJyAmJgorICAgICAgICBQeVVuaWNvZGVfUkVBRChraW5kLCBkYXRhLCBsZW4tMikgPT0gJ3AnICYmCisgICAgICAgIFB5VW5pY29kZV9SRUFEKGtpbmQsIGRhdGEsIGxlbi0xKSA9PSAneScpCisgICAgewogICAgICAgICBtb2R1bGUgPSBQeVVuaWNvZGVfU3Vic3RyaW5nKGZpbGVuYW1lLCAwLCBsZW4tMyk7CiAgICAgfQogICAgIGVsc2UgewpAQCAtMjYyLDM5ICsyOTksNjMgQEAKIAogICAgIG5hbWUgPSBfUHlPYmplY3RfR2V0QXR0cklkKGNhdGVnb3J5LCAmUHlJZF9fX25hbWVfXyk7CiAgICAgaWYgKG5hbWUgPT0gTlVMTCkgIC8qIFhYWCBDYW4gYW4gb2JqZWN0IGxhY2sgYSAnX19uYW1lX18nIGF0dHJpYnV0ZT8gKi8KLSAgICAgICAgcmV0dXJuOworICAgICAgICBnb3RvIGVycm9yOwogCi0gICAgZl9zdGRlcnIgPSBQeVN5c19HZXRPYmplY3QoInN0ZGVyciIpOworICAgIGZfc3RkZXJyID0gX1B5U3lzX0dldE9iamVjdElkKCZQeUlkX3N0ZGVycik7CiAgICAgaWYgKGZfc3RkZXJyID09IE5VTEwpIHsKICAgICAgICAgZnByaW50ZihzdGRlcnIsICJsb3N0IHN5cy5zdGRlcnJcbiIpOwotICAgICAgICBQeV9ERUNSRUYobmFtZSk7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgZ290byBlcnJvcjsKICAgICB9CiAKICAgICAvKiBQcmludCAiZmlsZW5hbWU6bGluZW5vOiBjYXRlZ29yeTogdGV4dFxuIiAqLwotICAgIFB5RmlsZV9Xcml0ZU9iamVjdChmaWxlbmFtZSwgZl9zdGRlcnIsIFB5X1BSSU5UX1JBVyk7Ci0gICAgUHlGaWxlX1dyaXRlU3RyaW5nKGxpbmVub19zdHIsIGZfc3RkZXJyKTsKLSAgICBQeUZpbGVfV3JpdGVPYmplY3QobmFtZSwgZl9zdGRlcnIsIFB5X1BSSU5UX1JBVyk7Ci0gICAgUHlGaWxlX1dyaXRlU3RyaW5nKCI6ICIsIGZfc3RkZXJyKTsKLSAgICBQeUZpbGVfV3JpdGVPYmplY3QodGV4dCwgZl9zdGRlcnIsIFB5X1BSSU5UX1JBVyk7Ci0gICAgUHlGaWxlX1dyaXRlU3RyaW5nKCJcbiIsIGZfc3RkZXJyKTsKLSAgICBQeV9YREVDUkVGKG5hbWUpOworICAgIGlmIChQeUZpbGVfV3JpdGVPYmplY3QoZmlsZW5hbWUsIGZfc3RkZXJyLCBQeV9QUklOVF9SQVcpIDwgMCkKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICBpZiAoUHlGaWxlX1dyaXRlU3RyaW5nKGxpbmVub19zdHIsIGZfc3RkZXJyKSA8IDApCisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgaWYgKFB5RmlsZV9Xcml0ZU9iamVjdChuYW1lLCBmX3N0ZGVyciwgUHlfUFJJTlRfUkFXKSA8IDApCisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgaWYgKFB5RmlsZV9Xcml0ZVN0cmluZygiOiAiLCBmX3N0ZGVycikgPCAwKQorICAgICAgICBnb3RvIGVycm9yOworICAgIGlmIChQeUZpbGVfV3JpdGVPYmplY3QodGV4dCwgZl9zdGRlcnIsIFB5X1BSSU5UX1JBVykgPCAwKQorICAgICAgICBnb3RvIGVycm9yOworICAgIGlmIChQeUZpbGVfV3JpdGVTdHJpbmcoIlxuIiwgZl9zdGRlcnIpIDwgMCkKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICBQeV9DTEVBUihuYW1lKTsKIAogICAgIC8qIFByaW50ICIgIHNvdXJjZV9saW5lXG4iICovCiAgICAgaWYgKHNvdXJjZWxpbmUpIHsKLSAgICAgICAgY2hhciAqc291cmNlX2xpbmVfc3RyID0gX1B5VW5pY29kZV9Bc1N0cmluZyhzb3VyY2VsaW5lKTsKLSAgICAgICAgaWYgKHNvdXJjZV9saW5lX3N0ciA9PSBOVUxMKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgd2hpbGUgKCpzb3VyY2VfbGluZV9zdHIgPT0gJyAnIHx8ICpzb3VyY2VfbGluZV9zdHIgPT0gJ1x0JyB8fAotICAgICAgICAgICAgICAgICpzb3VyY2VfbGluZV9zdHIgPT0gJ1wwMTQnKQotICAgICAgICAgICAgc291cmNlX2xpbmVfc3RyKys7CisgICAgICAgIGludCBraW5kOworICAgICAgICB2b2lkICpkYXRhOworICAgICAgICBQeV9zc2l6ZV90IGksIGxlbjsKKyAgICAgICAgUHlfVUNTNCBjaDsKKyAgICAgICAgUHlPYmplY3QgKnRydW5jYXRlZDsKIAotICAgICAgICBQeUZpbGVfV3JpdGVTdHJpbmcoc291cmNlX2xpbmVfc3RyLCBmX3N0ZGVycik7CisgICAgICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoc291cmNlbGluZSkgPCAxKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKworICAgICAgICBraW5kID0gUHlVbmljb2RlX0tJTkQoc291cmNlbGluZSk7CisgICAgICAgIGRhdGEgPSBQeVVuaWNvZGVfREFUQShzb3VyY2VsaW5lKTsKKyAgICAgICAgbGVuID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoc291cmNlbGluZSk7CisgICAgICAgIGZvciAoaT0wOyBpPGxlbjsgaSsrKSB7CisgICAgICAgICAgICBjaCA9IFB5VW5pY29kZV9SRUFEKGtpbmQsIGRhdGEsIGkpOworICAgICAgICAgICAgaWYgKGNoICE9ICcgJyAmJiBjaCAhPSAnXHQnICYmIGNoICE9ICdcMDE0JykKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHRydW5jYXRlZCA9IFB5VW5pY29kZV9TdWJzdHJpbmcoc291cmNlbGluZSwgaSwgbGVuKTsKKyAgICAgICAgaWYgKHRydW5jYXRlZCA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKworICAgICAgICBQeUZpbGVfV3JpdGVPYmplY3Qoc291cmNlbGluZSwgZl9zdGRlcnIsIFB5X1BSSU5UX1JBVyk7CisgICAgICAgIFB5X0RFQ1JFRih0cnVuY2F0ZWQpOwogICAgICAgICBQeUZpbGVfV3JpdGVTdHJpbmcoIlxuIiwgZl9zdGRlcnIpOwogICAgIH0KLSAgICBlbHNlCi0gICAgICAgIGlmIChfUHlfRGlzcGxheVNvdXJjZUxpbmUoZl9zdGRlcnIsIGZpbGVuYW1lLCBsaW5lbm8sIDIpIDwgMCkKLSAgICAgICAgICAgICAgICByZXR1cm47CisgICAgZWxzZSB7CisgICAgICAgIF9QeV9EaXNwbGF5U291cmNlTGluZShmX3N0ZGVyciwgZmlsZW5hbWUsIGxpbmVubywgMik7CisgICAgfQorCitlcnJvcjoKKyAgICBQeV9YREVDUkVGKG5hbWUpOwogICAgIFB5RXJyX0NsZWFyKCk7CiB9CiAKQEAgLTMwNSw5ICszNjYsMTYgQEAKIHsKICAgICBQeU9iamVjdCAqa2V5ID0gTlVMTCwgKnRleHQgPSBOVUxMLCAqcmVzdWx0ID0gTlVMTCwgKmxpbmVub19vYmogPSBOVUxMOwogICAgIFB5T2JqZWN0ICppdGVtID0gTlVMTDsKLSAgICBjb25zdCBjaGFyICphY3Rpb247CisgICAgUHlPYmplY3QgKmFjdGlvbjsKICAgICBpbnQgcmM7CiAKKyAgICAvKiBtb2R1bGUgY2FuIGJlIE5vbmUgaWYgYSB3YXJuaW5nIGlzIGVtaXR0ZWQgbGF0ZSBkdXJpbmcgUHl0aG9uIHNodXRkb3duLgorICAgICAgIEluIHRoaXMgY2FzZSwgdGhlIFB5dGhvbiB3YXJuaW5ncyBtb2R1bGUgd2FzIHByb2JhYmx5IHVubG9hZGVkLCBmaWx0ZXJzCisgICAgICAgYXJlIG5vIG1vcmUgYXZhaWxhYmxlIHRvIGNob29zZSBhcyBhY3Rpb24uIEl0IGlzIHNhZmVyIHRvIGlnbm9yZSB0aGUKKyAgICAgICB3YXJuaW5nIGFuZCBkbyBub3RoaW5nLiAqLworICAgIGlmIChtb2R1bGUgPT0gUHlfTm9uZSkKKyAgICAgICAgUHlfUkVUVVJOX05PTkU7CisKICAgICBpZiAocmVnaXN0cnkgJiYgIVB5RGljdF9DaGVjayhyZWdpc3RyeSkgJiYgKHJlZ2lzdHJ5ICE9IFB5X05vbmUpKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICIncmVnaXN0cnknIG11c3QgYmUgYSBkaWN0Iik7CiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMzYzLDcgKzQzMSw3IEBACiAgICAgaWYgKGFjdGlvbiA9PSBOVUxMKQogICAgICAgICBnb3RvIGNsZWFudXA7CiAKLSAgICBpZiAoc3RyY21wKGFjdGlvbiwgImVycm9yIikgPT0gMCkgeworICAgIGlmIChQeVVuaWNvZGVfQ29tcGFyZVdpdGhBU0NJSVN0cmluZyhhY3Rpb24sICJlcnJvciIpID09IDApIHsKICAgICAgICAgUHlFcnJfU2V0T2JqZWN0KGNhdGVnb3J5LCBtZXNzYWdlKTsKICAgICAgICAgZ290byBjbGVhbnVwOwogICAgIH0KQEAgLTM3MSwxMyArNDM5LDEzIEBACiAgICAgLyogU3RvcmUgaW4gdGhlIHJlZ2lzdHJ5IHRoYXQgd2UndmUgYmVlbiBoZXJlLCAqZXhjZXB0KiB3aGVuIHRoZSBhY3Rpb24KICAgICAgICBpcyAiYWx3YXlzIi4gKi8KICAgICByYyA9IDA7Ci0gICAgaWYgKHN0cmNtcChhY3Rpb24sICJhbHdheXMiKSAhPSAwKSB7CisgICAgaWYgKFB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKGFjdGlvbiwgImFsd2F5cyIpICE9IDApIHsKICAgICAgICAgaWYgKHJlZ2lzdHJ5ICE9IE5VTEwgJiYgcmVnaXN0cnkgIT0gUHlfTm9uZSAmJgogICAgICAgICAgICAgICAgIFB5RGljdF9TZXRJdGVtKHJlZ2lzdHJ5LCBrZXksIFB5X1RydWUpIDwgMCkKICAgICAgICAgICAgIGdvdG8gY2xlYW51cDsKLSAgICAgICAgZWxzZSBpZiAoc3RyY21wKGFjdGlvbiwgImlnbm9yZSIpID09IDApCisgICAgICAgIGVsc2UgaWYgKFB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKGFjdGlvbiwgImlnbm9yZSIpID09IDApCiAgICAgICAgICAgICBnb3RvIHJldHVybl9ub25lOwotICAgICAgICBlbHNlIGlmIChzdHJjbXAoYWN0aW9uLCAib25jZSIpID09IDApIHsKKyAgICAgICAgZWxzZSBpZiAoUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcoYWN0aW9uLCAib25jZSIpID09IDApIHsKICAgICAgICAgICAgIGlmIChyZWdpc3RyeSA9PSBOVUxMIHx8IHJlZ2lzdHJ5ID09IFB5X05vbmUpIHsKICAgICAgICAgICAgICAgICByZWdpc3RyeSA9IGdldF9vbmNlX3JlZ2lzdHJ5KCk7CiAgICAgICAgICAgICAgICAgaWYgKHJlZ2lzdHJ5ID09IE5VTEwpCkBAIC0zODYsMjQgKzQ1NCwxNSBAQAogICAgICAgICAgICAgLyogX29uY2VfcmVnaXN0cnlbKHRleHQsIGNhdGVnb3J5KV0gPSAxICovCiAgICAgICAgICAgICByYyA9IHVwZGF0ZV9yZWdpc3RyeShyZWdpc3RyeSwgdGV4dCwgY2F0ZWdvcnksIDApOwogICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHN0cmNtcChhY3Rpb24sICJtb2R1bGUiKSA9PSAwKSB7CisgICAgICAgIGVsc2UgaWYgKFB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKGFjdGlvbiwgIm1vZHVsZSIpID09IDApIHsKICAgICAgICAgICAgIC8qIHJlZ2lzdHJ5Wyh0ZXh0LCBjYXRlZ29yeSwgMCldID0gMSAqLwogICAgICAgICAgICAgaWYgKHJlZ2lzdHJ5ICE9IE5VTEwgJiYgcmVnaXN0cnkgIT0gUHlfTm9uZSkKICAgICAgICAgICAgICAgICByYyA9IHVwZGF0ZV9yZWdpc3RyeShyZWdpc3RyeSwgdGV4dCwgY2F0ZWdvcnksIDApOwogICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHN0cmNtcChhY3Rpb24sICJkZWZhdWx0IikgIT0gMCkgewotICAgICAgICAgICAgUHlPYmplY3QgKnRvX3N0ciA9IFB5T2JqZWN0X1N0cihpdGVtKTsKLSAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVycl9zdHIgPSAiPz8/IjsKLQotICAgICAgICAgICAgaWYgKHRvX3N0ciAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgZXJyX3N0ciA9IF9QeVVuaWNvZGVfQXNTdHJpbmcodG9fc3RyKTsKLSAgICAgICAgICAgICAgICBpZiAoZXJyX3N0ciA9PSBOVUxMKQotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBjbGVhbnVwOwotICAgICAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChQeVVuaWNvZGVfQ29tcGFyZVdpdGhBU0NJSVN0cmluZyhhY3Rpb24sICJkZWZhdWx0IikgIT0gMCkgewogICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1J1bnRpbWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJVbnJlY29nbml6ZWQgYWN0aW9uICglcykgaW4gd2FybmluZ3MuZmlsdGVyczpcbiAlcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24sIGVycl9zdHIpOwotICAgICAgICAgICAgUHlfWERFQ1JFRih0b19zdHIpOworICAgICAgICAgICAgICAgICAgICAgICAgIlVucmVjb2duaXplZCBhY3Rpb24gKCVSKSBpbiB3YXJuaW5ncy5maWx0ZXJzOlxuICVSIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbiwgaXRlbSk7CiAgICAgICAgICAgICBnb3RvIGNsZWFudXA7CiAgICAgICAgIH0KICAgICB9CkBAIC01MzgsMTMgKzU5NywxMiBAQAogICAgICAgICAgICAgUHlfSU5DUkVGKCpmaWxlbmFtZSk7CiAgICAgfQogICAgIGVsc2UgewotICAgICAgICBjb25zdCBjaGFyICptb2R1bGVfc3RyID0gX1B5VW5pY29kZV9Bc1N0cmluZygqbW9kdWxlKTsKICAgICAgICAgKmZpbGVuYW1lID0gTlVMTDsKLSAgICAgICAgaWYgKG1vZHVsZV9zdHIgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICBnb3RvIGhhbmRsZV9lcnJvcjsKLSAgICAgICAgaWYgKHN0cmNtcChtb2R1bGVfc3RyLCAiX19tYWluX18iKSA9PSAwKSB7Ci0gICAgICAgICAgICBQeU9iamVjdCAqYXJndiA9IFB5U3lzX0dldE9iamVjdCgiYXJndiIpOwotICAgICAgICAgICAgaWYgKGFyZ3YgIT0gTlVMTCAmJiBQeUxpc3RfU2l6ZShhcmd2KSA+IDApIHsKKyAgICAgICAgaWYgKCptb2R1bGUgIT0gUHlfTm9uZSAmJiBQeVVuaWNvZGVfQ29tcGFyZVdpdGhBU0NJSVN0cmluZygqbW9kdWxlLCAiX19tYWluX18iKSA9PSAwKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqYXJndiA9IF9QeVN5c19HZXRPYmplY3RJZCgmUHlJZF9hcmd2KTsKKyAgICAgICAgICAgIC8qIFB5TGlzdF9DaGVjaygpIGlzIG5lZWRlZCBiZWNhdXNlIHN5cy5hcmd2IGlzIHNldCB0byBOb25lIGR1cmluZworICAgICAgICAgICAgICAgUHl0aG9uIGZpbmFsaXphdGlvbiAqLworICAgICAgICAgICAgaWYgKGFyZ3YgIT0gTlVMTCAmJiBQeUxpc3RfQ2hlY2soYXJndikgJiYgUHlMaXN0X1NpemUoYXJndikgPiAwKSB7CiAgICAgICAgICAgICAgICAgaW50IGlzX3RydWU7CiAgICAgICAgICAgICAgICAgKmZpbGVuYW1lID0gUHlMaXN0X0dldEl0ZW0oYXJndiwgMCk7CiAgICAgICAgICAgICAgICAgUHlfSU5DUkVGKCpmaWxlbmFtZSk7CkBAIC01NjQsOCArNjIyLDggQEAKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIC8qIGVtYmVkZGVkIGludGVycHJldGVycyBkb24ndCBoYXZlIHN5cy5hcmd2LCBzZWUgYnVnICM4MzkxNTEgKi8KICAgICAgICAgICAgICAgICAqZmlsZW5hbWUgPSBQeVVuaWNvZGVfRnJvbVN0cmluZygiX19tYWluX18iKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCpmaWxlbmFtZSA9PSBOVUxMKQotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBoYW5kbGVfZXJyb3I7CisgICAgICAgICAgICAgICAgaWYgKCpmaWxlbmFtZSA9PSBOVUxMKQorICAgICAgICAgICAgICAgICAgICBnb3RvIGhhbmRsZV9lcnJvcjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBpZiAoKmZpbGVuYW1lID09IE5VTEwpIHsKQEAgLTY1OSw3ICs3MTcsNyBAQAogICAgIFB5T2JqZWN0ICpyZWdpc3RyeSA9IE5VTEw7CiAgICAgUHlPYmplY3QgKm1vZHVsZV9nbG9iYWxzID0gTlVMTDsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJPT09pfE9PTzp3YXJuX2V4cGxpY2l0IiwKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiT09VaXxPT086d2Fybl9leHBsaWNpdCIsCiAgICAgICAgICAgICAgICAga3dkX2xpc3QsICZtZXNzYWdlLCAmY2F0ZWdvcnksICZmaWxlbmFtZSwgJmxpbmVubywgJm1vZHVsZSwKICAgICAgICAgICAgICAgICAmcmVnaXN0cnksICZtb2R1bGVfZ2xvYmFscykpCiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtNzE3LDE0ICs3NzUsMjEgQEAKIAogICAgICAgICAvKiBIYW5kbGUgdGhlIHdhcm5pbmcuICovCiAgICAgICAgIHJldHVybmVkID0gd2Fybl9leHBsaWNpdChjYXRlZ29yeSwgbWVzc2FnZSwgZmlsZW5hbWUsIGxpbmVubywgbW9kdWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdHJ5LCBzb3VyY2VfbGluZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RyeSwgc291cmNlX2xpbmUpOwogICAgICAgICBQeV9ERUNSRUYoc291cmNlX2xpc3QpOwogICAgICAgICByZXR1cm4gcmV0dXJuZWQ7CiAgICAgfQogCiAgc3RhbmRhcmRfY2FsbDoKICAgICByZXR1cm4gd2Fybl9leHBsaWNpdChjYXRlZ29yeSwgbWVzc2FnZSwgZmlsZW5hbWUsIGxpbmVubywgbW9kdWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RyeSwgTlVMTCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0cnksIE5VTEwpOworfQorCitzdGF0aWMgUHlPYmplY3QgKgord2FybmluZ3NfZmlsdGVyc19tdXRhdGVkKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBfZmlsdGVyc192ZXJzaW9uKys7CisgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKIApAQCAtNzk2LDExICs4NjEsMjYgQEAKIAogLyogV2FybmluZyB3aXRoIGV4cGxpY2l0IG9yaWdpbiAqLwogaW50CitQeUVycl9XYXJuRXhwbGljaXRPYmplY3QoUHlPYmplY3QgKmNhdGVnb3J5LCBQeU9iamVjdCAqbWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqZmlsZW5hbWUsIGludCBsaW5lbm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKnJlZ2lzdHJ5KQoreworICAgIFB5T2JqZWN0ICpyZXM7CisgICAgaWYgKGNhdGVnb3J5ID09IE5VTEwpCisgICAgICAgIGNhdGVnb3J5ID0gUHlFeGNfUnVudGltZVdhcm5pbmc7CisgICAgcmVzID0gd2Fybl9leHBsaWNpdChjYXRlZ29yeSwgbWVzc2FnZSwgZmlsZW5hbWUsIGxpbmVubywKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZSwgcmVnaXN0cnksIE5VTEwpOworICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIFB5X0RFQ1JFRihyZXMpOworICAgIHJldHVybiAwOworfQorCitpbnQKIFB5RXJyX1dhcm5FeHBsaWNpdChQeU9iamVjdCAqY2F0ZWdvcnksIGNvbnN0IGNoYXIgKnRleHQsCiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZmlsZW5hbWVfc3RyLCBpbnQgbGluZW5vLAogICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm1vZHVsZV9zdHIsIFB5T2JqZWN0ICpyZWdpc3RyeSkKIHsKLSAgICBQeU9iamVjdCAqcmVzOwogICAgIFB5T2JqZWN0ICptZXNzYWdlID0gUHlVbmljb2RlX0Zyb21TdHJpbmcodGV4dCk7CiAgICAgUHlPYmplY3QgKmZpbGVuYW1lID0gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdChmaWxlbmFtZV9zdHIpOwogICAgIFB5T2JqZWN0ICptb2R1bGUgPSBOVUxMOwpAQCAtODEwLDE4ICs4OTAsMTIgQEAKICAgICAgICAgZ290byBleGl0OwogICAgIGlmIChtb2R1bGVfc3RyICE9IE5VTEwpIHsKICAgICAgICAgbW9kdWxlID0gUHlVbmljb2RlX0Zyb21TdHJpbmcobW9kdWxlX3N0cik7Ci0gICAgICAgICAgICBpZiAobW9kdWxlID09IE5VTEwpCi0gICAgICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICBpZiAobW9kdWxlID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogCi0gICAgaWYgKGNhdGVnb3J5ID09IE5VTEwpCi0gICAgICAgIGNhdGVnb3J5ID0gUHlFeGNfUnVudGltZVdhcm5pbmc7Ci0gICAgcmVzID0gd2Fybl9leHBsaWNpdChjYXRlZ29yeSwgbWVzc2FnZSwgZmlsZW5hbWUsIGxpbmVubywgbW9kdWxlLCByZWdpc3RyeSwKLSAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwotICAgIGlmIChyZXMgPT0gTlVMTCkKLSAgICAgICAgZ290byBleGl0OwotICAgIFB5X0RFQ1JFRihyZXMpOwotICAgIHJldCA9IDA7CisgICAgcmV0ID0gUHlFcnJfV2FybkV4cGxpY2l0T2JqZWN0KGNhdGVnb3J5LCBtZXNzYWdlLCBmaWxlbmFtZSwgbGluZW5vLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUsIHJlZ2lzdHJ5KTsKIAogIGV4aXQ6CiAgICAgUHlfWERFQ1JFRihtZXNzYWdlKTsKQEAgLTgzMCw2ICs5MDQsNDkgQEAKICAgICByZXR1cm4gcmV0OwogfQogCitpbnQKK1B5RXJyX1dhcm5FeHBsaWNpdEZvcm1hdChQeU9iamVjdCAqY2F0ZWdvcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZmlsZW5hbWVfc3RyLCBpbnQgbGluZW5vLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm1vZHVsZV9zdHIsIFB5T2JqZWN0ICpyZWdpc3RyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKyAgICBQeU9iamVjdCAqbWVzc2FnZTsKKyAgICBQeU9iamVjdCAqbW9kdWxlID0gTlVMTDsKKyAgICBQeU9iamVjdCAqZmlsZW5hbWUgPSBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0KGZpbGVuYW1lX3N0cik7CisgICAgaW50IHJldCA9IC0xOworICAgIHZhX2xpc3QgdmFyZ3M7CisKKyAgICBpZiAoZmlsZW5hbWUgPT0gTlVMTCkKKyAgICAgICAgZ290byBleGl0OworICAgIGlmIChtb2R1bGVfc3RyICE9IE5VTEwpIHsKKyAgICAgICAgbW9kdWxlID0gUHlVbmljb2RlX0Zyb21TdHJpbmcobW9kdWxlX3N0cik7CisgICAgICAgIGlmIChtb2R1bGUgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyNpZmRlZiBIQVZFX1NUREFSR19QUk9UT1RZUEVTCisgICAgdmFfc3RhcnQodmFyZ3MsIGZvcm1hdCk7CisjZWxzZQorICAgIHZhX3N0YXJ0KHZhcmdzKTsKKyNlbmRpZgorICAgIG1lc3NhZ2UgPSBQeVVuaWNvZGVfRnJvbUZvcm1hdFYoZm9ybWF0LCB2YXJncyk7CisgICAgaWYgKG1lc3NhZ2UgIT0gTlVMTCkgeworICAgICAgICBQeU9iamVjdCAqcmVzOworICAgICAgICByZXMgPSB3YXJuX2V4cGxpY2l0KGNhdGVnb3J5LCBtZXNzYWdlLCBmaWxlbmFtZSwgbGluZW5vLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZSwgcmVnaXN0cnksIE5VTEwpOworICAgICAgICBQeV9ERUNSRUYobWVzc2FnZSk7CisgICAgICAgIGlmIChyZXMgIT0gTlVMTCkgeworICAgICAgICAgICAgUHlfREVDUkVGKHJlcyk7CisgICAgICAgICAgICByZXQgPSAwOworICAgICAgICB9CisgICAgfQorICAgIHZhX2VuZCh2YXJncyk7CitleGl0OgorICAgIFB5X1hERUNSRUYobW9kdWxlKTsKKyAgICBQeV9YREVDUkVGKGZpbGVuYW1lKTsKKyAgICByZXR1cm4gcmV0OworfQorCiAKIFB5RG9jX1NUUlZBUih3YXJuX2RvYywKICJJc3N1ZSBhIHdhcm5pbmcsIG9yIG1heWJlIGlnbm9yZSBpdCBvciByYWlzZSBhbiBleGNlcHRpb24uIik7CkBAIC04NDIsNiArOTU5LDggQEAKICAgICAgICAgd2Fybl9kb2N9LAogICAgIHsid2Fybl9leHBsaWNpdCIsIChQeUNGdW5jdGlvbil3YXJuaW5nc193YXJuX2V4cGxpY2l0LAogICAgICAgICBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLCB3YXJuX2V4cGxpY2l0X2RvY30sCisgICAgeyJfZmlsdGVyc19tdXRhdGVkIiwgKFB5Q0Z1bmN0aW9uKXdhcm5pbmdzX2ZpbHRlcnNfbXV0YXRlZCwgTUVUSF9OT0FSR1MsCisgICAgICAgIE5VTEx9LAogICAgIC8qIFhYWChicmV0dC5jYW5ub24pOiBhZGQgc2hvd3dhcm5pbmc/ICovCiAgICAgLyogWFhYKGJyZXR0LmNhbm5vbik6IFJlYXNvbmFibGUgdG8gYWRkIGZvcm1hdHdhcm5pbmc/ICovCiAgICAge05VTEwsIE5VTEx9ICAgICAgICAgICAgICAgIC8qIHNlbnRpbmVsICovCkBAIC05OTQsNSArMTExMyw3IEBACiAgICAgUHlfSU5DUkVGKF9kZWZhdWx0X2FjdGlvbik7CiAgICAgaWYgKFB5TW9kdWxlX0FkZE9iamVjdChtLCAiX2RlZmF1bHRhY3Rpb24iLCBfZGVmYXVsdF9hY3Rpb24pIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBfZmlsdGVyc192ZXJzaW9uID0gMDsKICAgICByZXR1cm4gbTsKIH0KZGlmZiAtLWdpdCBhL1B5dGhvbi9hc2RsLmMgYi9QeXRob24vYXNkbC5jCmluZGV4IGU3ZTMyODAuLjc0ZmE5NDEgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9hc2RsLmMKKysrIGIvUHl0aG9uL2FzZGwuYwpAQCAtMiw3ICsyLDcgQEAKICNpbmNsdWRlICJhc2RsLmgiCiAKIGFzZGxfc2VxICoKLWFzZGxfc2VxX25ldyhQeV9zc2l6ZV90IHNpemUsIFB5QXJlbmEgKmFyZW5hKQorX1B5X2FzZGxfc2VxX25ldyhQeV9zc2l6ZV90IHNpemUsIFB5QXJlbmEgKmFyZW5hKQogewogICAgIGFzZGxfc2VxICpzZXEgPSBOVUxMOwogICAgIHNpemVfdCBuID0gKHNpemUgPyAoc2l6ZW9mKHZvaWQgKikgKiAoc2l6ZSAtIDEpKSA6IDApOwpAQCAtMzMsNyArMzMsNyBAQAogfQogCiBhc2RsX2ludF9zZXEgKgotYXNkbF9pbnRfc2VxX25ldyhQeV9zc2l6ZV90IHNpemUsIFB5QXJlbmEgKmFyZW5hKQorX1B5X2FzZGxfaW50X3NlcV9uZXcoUHlfc3NpemVfdCBzaXplLCBQeUFyZW5hICphcmVuYSkKIHsKICAgICBhc2RsX2ludF9zZXEgKnNlcSA9IE5VTEw7CiAgICAgc2l6ZV90IG4gPSAoc2l6ZSA/IChzaXplb2Yodm9pZCAqKSAqIChzaXplIC0gMSkpIDogMCk7CmRpZmYgLS1naXQgYS9QeXRob24vYXN0LmMgYi9QeXRob24vYXN0LmMKaW5kZXggOWEwYjA2NC4uZDUwY2I4MCAxMDA2NDQKLS0tIGEvUHl0aG9uL2FzdC5jCisrKyBiL1B5dGhvbi9hc3QuYwpAQCAtMTA5LDIyICsxMDksMTQgQEAKIHsKICAgICBpZiAoIXZhbGlkYXRlX2FyZ3MoYXJncy0+YXJncykpCiAgICAgICAgIHJldHVybiAwOwotICAgIGlmIChhcmdzLT52YXJhcmdhbm5vdGF0aW9uKSB7Ci0gICAgICAgIGlmICghYXJncy0+dmFyYXJnKSB7Ci0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgInZhcmFyZ2Fubm90YXRpb24gYnV0IG5vIHZhcmFyZyBvbiBhcmd1bWVudHMiKTsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0gICAgICAgIGlmICghdmFsaWRhdGVfZXhwcihhcmdzLT52YXJhcmdhbm5vdGF0aW9uLCBMb2FkKSkKKyAgICBpZiAoYXJncy0+dmFyYXJnICYmIGFyZ3MtPnZhcmFyZy0+YW5ub3RhdGlvbgorICAgICAgICAmJiAhdmFsaWRhdGVfZXhwcihhcmdzLT52YXJhcmctPmFubm90YXRpb24sIExvYWQpKSB7CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgaWYgKCF2YWxpZGF0ZV9hcmdzKGFyZ3MtPmt3b25seWFyZ3MpKQogICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoYXJncy0+a3dhcmdhbm5vdGF0aW9uKSB7Ci0gICAgICAgIGlmICghYXJncy0+a3dhcmcpIHsKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAia3dhcmdhbm5vdGF0aW9uIGJ1dCBubyBrd2FyZyBvbiBhcmd1bWVudHMiKTsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0gICAgICAgIGlmICghdmFsaWRhdGVfZXhwcihhcmdzLT5rd2FyZ2Fubm90YXRpb24sIExvYWQpKQorICAgIGlmIChhcmdzLT5rd2FyZyAmJiBhcmdzLT5rd2FyZy0+YW5ub3RhdGlvbiAKKyAgICAgICAgJiYgIXZhbGlkYXRlX2V4cHIoYXJncy0+a3dhcmctPmFubm90YXRpb24sIExvYWQpKSB7CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgaWYgKGFzZGxfc2VxX0xFTihhcmdzLT5kZWZhdWx0cykgPiBhc2RsX3NlcV9MRU4oYXJncy0+YXJncykpIHsKQEAgLTI4Miw2ICsyNzQsNyBAQAogICAgICAgICByZXR1cm4gdmFsaWRhdGVfZXhwcnMoZXhwLT52LlR1cGxlLmVsdHMsIGN0eCwgMCk7CiAgICAgLyogVGhlc2UgbGFzdCBjYXNlcyBkb24ndCBoYXZlIGFueSBjaGVja2luZy4gKi8KICAgICBjYXNlIE5hbWVfa2luZDoKKyAgICBjYXNlIE5hbWVDb25zdGFudF9raW5kOgogICAgIGNhc2UgRWxsaXBzaXNfa2luZDoKICAgICAgICAgcmV0dXJuIDE7CiAgICAgZGVmYXVsdDoKQEAgLTQ5OCw3ICs0OTEsNyBAQAogc3RydWN0IGNvbXBpbGluZyB7CiAgICAgY2hhciAqY19lbmNvZGluZzsgLyogc291cmNlIGVuY29kaW5nICovCiAgICAgUHlBcmVuYSAqY19hcmVuYTsgLyogYXJlbmEgZm9yIGFsbG9jYXRpbmcgbWVtZW9yeSAqLwotICAgIGNvbnN0IGNoYXIgKmNfZmlsZW5hbWU7IC8qIGZpbGVuYW1lICovCisgICAgUHlPYmplY3QgKmNfZmlsZW5hbWU7IC8qIGZpbGVuYW1lICovCiAgICAgUHlPYmplY3QgKmNfbm9ybWFsaXplOyAvKiBOb3JtYWxpemF0aW9uIGZ1bmN0aW9uIGZyb20gdW5pY29kZWRhdGEuICovCiAgICAgUHlPYmplY3QgKmNfbm9ybWFsaXplX2FyZ3M7IC8qIE5vcm1hbGl6YXRpb24gYXJndW1lbnQgdHVwbGUuICovCiB9OwpAQCAtNTY3LDcgKzU2MCwxMCBAQAogICAgICAgICBpZCA9IGlkMjsKICAgICB9CiAgICAgUHlVbmljb2RlX0ludGVybkluUGxhY2UoJmlkKTsKLSAgICBQeUFyZW5hX0FkZFB5T2JqZWN0KGMtPmNfYXJlbmEsIGlkKTsKKyAgICBpZiAoUHlBcmVuYV9BZGRQeU9iamVjdChjLT5jX2FyZW5hLCBpZCkgPCAwKSB7CisgICAgICAgIFB5X0RFQ1JFRihpZCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KICAgICByZXR1cm4gaWQ7CiB9CiAKQEAgLTU3NywyNCArNTczLDEzIEBACiBhc3RfZXJyb3Ioc3RydWN0IGNvbXBpbGluZyAqYywgY29uc3Qgbm9kZSAqbiwgY29uc3QgY2hhciAqZXJybXNnKQogewogICAgIFB5T2JqZWN0ICp2YWx1ZSwgKmVycnN0ciwgKmxvYywgKnRtcDsKLSAgICBQeU9iamVjdCAqZmlsZW5hbWVfb2JqOwogCi0gICAgbG9jID0gUHlFcnJfUHJvZ3JhbVRleHQoYy0+Y19maWxlbmFtZSwgTElORU5PKG4pKTsKKyAgICBsb2MgPSBQeUVycl9Qcm9ncmFtVGV4dE9iamVjdChjLT5jX2ZpbGVuYW1lLCBMSU5FTk8obikpOwogICAgIGlmICghbG9jKSB7CiAgICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKICAgICAgICAgbG9jID0gUHlfTm9uZTsKICAgICB9Ci0gICAgaWYgKGMtPmNfZmlsZW5hbWUpIHsKLSAgICAgICAgZmlsZW5hbWVfb2JqID0gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdChjLT5jX2ZpbGVuYW1lKTsKLSAgICAgICAgaWYgKCFmaWxlbmFtZV9vYmopIHsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihsb2MpOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgICAgIGZpbGVuYW1lX29iaiA9IFB5X05vbmU7Ci0gICAgfQotICAgIHRtcCA9IFB5X0J1aWxkVmFsdWUoIihOaWlOKSIsIGZpbGVuYW1lX29iaiwgTElORU5PKG4pLCBuLT5uX2NvbF9vZmZzZXQsIGxvYyk7CisgICAgdG1wID0gUHlfQnVpbGRWYWx1ZSgiKE9paU4pIiwgYy0+Y19maWxlbmFtZSwgTElORU5PKG4pLCBuLT5uX2NvbF9vZmZzZXQsIGxvYyk7CiAgICAgaWYgKCF0bXApCiAgICAgICAgIHJldHVybiAwOwogICAgIGVycnN0ciA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKGVycm1zZyk7CkBAIC02NzcsOCArNjYyLDggQEAKICovCiAKIG1vZF90eQotUHlBU1RfRnJvbU5vZGUoY29uc3Qgbm9kZSAqbiwgUHlDb21waWxlckZsYWdzICpmbGFncywgY29uc3QgY2hhciAqZmlsZW5hbWUsCi0gICAgICAgICAgICAgICBQeUFyZW5hICphcmVuYSkKK1B5QVNUX0Zyb21Ob2RlT2JqZWN0KGNvbnN0IG5vZGUgKm4sIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqZmlsZW5hbWUsIFB5QXJlbmEgKmFyZW5hKQogewogICAgIGludCBpLCBqLCBrLCBudW07CiAgICAgYXNkbF9zZXEgKnN0bXRzID0gTlVMTDsKQEAgLTY4OCw2ICs2NzMsNyBAQAogICAgIG1vZF90eSByZXMgPSBOVUxMOwogCiAgICAgYy5jX2FyZW5hID0gYXJlbmE7CisgICAgLyogYm9ycm93ZWQgcmVmZXJlbmNlICovCiAgICAgYy5jX2ZpbGVuYW1lID0gZmlsZW5hbWU7CiAgICAgYy5jX25vcm1hbGl6ZSA9IGMuY19ub3JtYWxpemVfYXJncyA9IE5VTEw7CiAgICAgaWYgKGZsYWdzICYmIGZsYWdzLT5jZl9mbGFncyAmIFB5Q0ZfU09VUkNFX0lTX1VURjgpIHsKQEAgLTcxMCw3ICs2OTYsNyBAQAogICAgIGsgPSAwOwogICAgIHN3aXRjaCAoVFlQRShuKSkgewogICAgICAgICBjYXNlIGZpbGVfaW5wdXQ6Ci0gICAgICAgICAgICBzdG10cyA9IGFzZGxfc2VxX25ldyhudW1fc3RtdHMobiksIGFyZW5hKTsKKyAgICAgICAgICAgIHN0bXRzID0gX1B5X2FzZGxfc2VxX25ldyhudW1fc3RtdHMobiksIGFyZW5hKTsKICAgICAgICAgICAgIGlmICghc3RtdHMpCiAgICAgICAgICAgICAgICAgZ290byBvdXQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgTkNIKG4pIC0gMTsgaSsrKSB7CkBAIC03NTAsNyArNzM2LDcgQEAKICAgICAgICAgfQogICAgICAgICBjYXNlIHNpbmdsZV9pbnB1dDoKICAgICAgICAgICAgIGlmIChUWVBFKENISUxEKG4sIDApKSA9PSBORVdMSU5FKSB7Ci0gICAgICAgICAgICAgICAgc3RtdHMgPSBhc2RsX3NlcV9uZXcoMSwgYXJlbmEpOworICAgICAgICAgICAgICAgIHN0bXRzID0gX1B5X2FzZGxfc2VxX25ldygxLCBhcmVuYSk7CiAgICAgICAgICAgICAgICAgaWYgKCFzdG10cykKICAgICAgICAgICAgICAgICAgICAgZ290byBvdXQ7CiAgICAgICAgICAgICAgICAgYXNkbF9zZXFfU0VUKHN0bXRzLCAwLCBQYXNzKG4tPm5fbGluZW5vLCBuLT5uX2NvbF9vZmZzZXQsCkBAIC03NjIsNyArNzQ4LDcgQEAKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIG4gPSBDSElMRChuLCAwKTsKICAgICAgICAgICAgICAgICBudW0gPSBudW1fc3RtdHMobik7Ci0gICAgICAgICAgICAgICAgc3RtdHMgPSBhc2RsX3NlcV9uZXcobnVtLCBhcmVuYSk7CisgICAgICAgICAgICAgICAgc3RtdHMgPSBfUHlfYXNkbF9zZXFfbmV3KG51bSwgYXJlbmEpOwogICAgICAgICAgICAgICAgIGlmICghc3RtdHMpCiAgICAgICAgICAgICAgICAgICAgIGdvdG8gb3V0OwogICAgICAgICAgICAgICAgIGlmIChudW0gPT0gMSkgewpAQCAtODAxLDYgKzc4NywyMSBAQAogICAgIHJldHVybiByZXM7CiB9CiAKK21vZF90eQorUHlBU1RfRnJvbU5vZGUoY29uc3Qgbm9kZSAqbiwgUHlDb21waWxlckZsYWdzICpmbGFncywgY29uc3QgY2hhciAqZmlsZW5hbWVfc3RyLAorICAgICAgICAgICAgICAgUHlBcmVuYSAqYXJlbmEpCit7CisgICAgbW9kX3R5IG1vZDsKKyAgICBQeU9iamVjdCAqZmlsZW5hbWU7CisgICAgZmlsZW5hbWUgPSBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0KGZpbGVuYW1lX3N0cik7CisgICAgaWYgKGZpbGVuYW1lID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIG1vZCA9IFB5QVNUX0Zyb21Ob2RlT2JqZWN0KG4sIGZsYWdzLCBmaWxlbmFtZSwgYXJlbmEpOworICAgIFB5X0RFQ1JFRihmaWxlbmFtZSk7CisgICAgcmV0dXJuIG1vZDsKKworfQorCiAvKiBSZXR1cm4gdGhlIEFTVCByZXByLiBvZiB0aGUgb3BlcmF0b3IgcmVwcmVzZW50ZWQgYXMgc3ludGF4ICh8LCBeLCBldGMuKQogKi8KIApAQCAtOTAzLDcgKzkwNCw3IEBACiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBOYW1lX2tpbmQ6CiAgICAgICAgICAgICBpZiAoY3R4ID09IFN0b3JlKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGZvcmJpZGRlbl9uYW1lKGMsIGUtPnYuTmFtZS5pZCwgbiwgMSkpCisgICAgICAgICAgICAgICAgaWYgKGZvcmJpZGRlbl9uYW1lKGMsIGUtPnYuTmFtZS5pZCwgbiwgMCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOyAvKiBmb3JiaWRkZW5fbmFtZSgpIGNhbGxzIGFzdF9lcnJvcigpICovCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlLT52Lk5hbWUuY3R4ID0gY3R4OwpAQCAtOTU1LDYgKzk1Niw5IEBACiAgICAgICAgIGNhc2UgQnl0ZXNfa2luZDoKICAgICAgICAgICAgIGV4cHJfbmFtZSA9ICJsaXRlcmFsIjsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE5hbWVDb25zdGFudF9raW5kOgorICAgICAgICAgICAgZXhwcl9uYW1lID0gImtleXdvcmQiOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRWxsaXBzaXNfa2luZDoKICAgICAgICAgICAgIGV4cHJfbmFtZSA9ICJFbGxpcHNpcyI7CiAgICAgICAgICAgICBicmVhazsKQEAgLTEwOTUsNyArMTA5OSw3IEBACiAgICAgaW50IGk7CiAgICAgYXNzZXJ0KFRZUEUobikgPT0gdGVzdGxpc3QgfHwgVFlQRShuKSA9PSB0ZXN0bGlzdF9zdGFyX2V4cHIgfHwgVFlQRShuKSA9PSB0ZXN0bGlzdF9jb21wKTsKIAotICAgIHNlcSA9IGFzZGxfc2VxX25ldygoTkNIKG4pICsgMSkgLyAyLCBjLT5jX2FyZW5hKTsKKyAgICBzZXEgPSBfUHlfYXNkbF9zZXFfbmV3KChOQ0gobikgKyAxKSAvIDIsIGMtPmNfYXJlbmEpOwogICAgIGlmICghc2VxKQogICAgICAgICByZXR1cm4gTlVMTDsKIApAQCAtMTExOSw2ICsxMTIzLDcgQEAKICAgICBpZGVudGlmaWVyIG5hbWU7CiAgICAgZXhwcl90eSBhbm5vdGF0aW9uID0gTlVMTDsKICAgICBub2RlICpjaDsKKyAgICBhcmdfdHkgcmV0OwogCiAgICAgYXNzZXJ0KFRZUEUobikgPT0gdGZwZGVmIHx8IFRZUEUobikgPT0gdmZwZGVmKTsKICAgICBjaCA9IENISUxEKG4sIDApOwpAQCAtMTEzNCw3ICsxMTM5LDEyIEBACiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICByZXR1cm4gYXJnKG5hbWUsIGFubm90YXRpb24sIGMtPmNfYXJlbmEpOworICAgIHJldCA9IGFyZyhuYW1lLCBhbm5vdGF0aW9uLCBjLT5jX2FyZW5hKTsKKyAgICBpZiAoIXJldCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmV0LT5saW5lbm8gPSBMSU5FTk8obik7CisgICAgcmV0LT5jb2xfb2Zmc2V0ID0gbi0+bl9jb2xfb2Zmc2V0OworICAgIHJldHVybiByZXQ7CiB9CiAKIC8qIHJldHVybnMgLTEgaWYgZmFpbGVkIHRvIGhhbmRsZSBrZXl3b3JkIG9ubHkgYXJndW1lbnRzCkBAIC0xMTkyLDYgKzEyMDIsOCBAQAogICAgICAgICAgICAgICAgIGFyZyA9IGFyZyhhcmduYW1lLCBhbm5vdGF0aW9uLCBjLT5jX2FyZW5hKTsKICAgICAgICAgICAgICAgICBpZiAoIWFyZykKICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICAgICBhcmctPmxpbmVubyA9IExJTkVOTyhjaCk7CisgICAgICAgICAgICAgICAgYXJnLT5jb2xfb2Zmc2V0ID0gY2gtPm5fY29sX29mZnNldDsKICAgICAgICAgICAgICAgICBhc2RsX3NlcV9TRVQoa3dvbmx5YXJncywgaisrLCBhcmcpOwogICAgICAgICAgICAgICAgIGkgKz0gMjsgLyogdGhlIG5hbWUgYW5kIHRoZSBjb21tYSAqLwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTIzMCwxNSArMTI0MiwxMyBAQAogICAgIGludCBpLCBqLCBrLCBucG9zYXJncyA9IDAsIG5rd29ubHlhcmdzID0gMDsKICAgICBpbnQgbnBvc2RlZmF1bHRzID0gMCwgZm91bmRfZGVmYXVsdCA9IDA7CiAgICAgYXNkbF9zZXEgKnBvc2FyZ3MsICpwb3NkZWZhdWx0cywgKmt3b25seWFyZ3MsICprd2RlZmF1bHRzOwotICAgIGlkZW50aWZpZXIgdmFyYXJnID0gTlVMTCwga3dhcmcgPSBOVUxMOworICAgIGFyZ190eSB2YXJhcmcgPSBOVUxMLCBrd2FyZyA9IE5VTEw7CiAgICAgYXJnX3R5IGFyZzsKLSAgICBleHByX3R5IHZhcmFyZ2Fubm90YXRpb24gPSBOVUxMLCBrd2FyZ2Fubm90YXRpb24gPSBOVUxMOwogICAgIG5vZGUgKmNoOwogCiAgICAgaWYgKFRZUEUobikgPT0gcGFyYW1ldGVycykgewogICAgICAgICBpZiAoTkNIKG4pID09IDIpIC8qICgpIGFzIGFyZ3VtZW50IGxpc3QgKi8KLSAgICAgICAgICAgIHJldHVybiBhcmd1bWVudHMoTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgYy0+Y19hcmVuYSk7CisgICAgICAgICAgICByZXR1cm4gYXJndW1lbnRzKE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIGMtPmNfYXJlbmEpOwogICAgICAgICBuID0gQ0hJTEQobiwgMSk7CiAgICAgfQogICAgIGFzc2VydChUWVBFKG4pID09IHR5cGVkYXJnc2xpc3QgfHwgVFlQRShuKSA9PSB2YXJhcmdzbGlzdCk7CkBAIC0xMjcwLDIyICsxMjgwLDIyIEBACiAgICAgICAgIGlmIChUWVBFKGNoKSA9PSBET1VCTEVTVEFSKSBicmVhazsKICAgICAgICAgaWYgKFRZUEUoY2gpID09IHRmcGRlZiB8fCBUWVBFKGNoKSA9PSB2ZnBkZWYpIG5rd29ubHlhcmdzKys7CiAgICAgfQotICAgIHBvc2FyZ3MgPSAobnBvc2FyZ3MgPyBhc2RsX3NlcV9uZXcobnBvc2FyZ3MsIGMtPmNfYXJlbmEpIDogTlVMTCk7CisgICAgcG9zYXJncyA9IChucG9zYXJncyA/IF9QeV9hc2RsX3NlcV9uZXcobnBvc2FyZ3MsIGMtPmNfYXJlbmEpIDogTlVMTCk7CiAgICAgaWYgKCFwb3NhcmdzICYmIG5wb3NhcmdzKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBrd29ubHlhcmdzID0gKG5rd29ubHlhcmdzID8KLSAgICAgICAgICAgICAgICAgICBhc2RsX3NlcV9uZXcobmt3b25seWFyZ3MsIGMtPmNfYXJlbmEpIDogTlVMTCk7CisgICAgICAgICAgICAgICAgICAgX1B5X2FzZGxfc2VxX25ldyhua3dvbmx5YXJncywgYy0+Y19hcmVuYSkgOiBOVUxMKTsKICAgICBpZiAoIWt3b25seWFyZ3MgJiYgbmt3b25seWFyZ3MpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIHBvc2RlZmF1bHRzID0gKG5wb3NkZWZhdWx0cyA/Ci0gICAgICAgICAgICAgICAgICAgIGFzZGxfc2VxX25ldyhucG9zZGVmYXVsdHMsIGMtPmNfYXJlbmEpIDogTlVMTCk7CisgICAgICAgICAgICAgICAgICAgIF9QeV9hc2RsX3NlcV9uZXcobnBvc2RlZmF1bHRzLCBjLT5jX2FyZW5hKSA6IE5VTEwpOwogICAgIGlmICghcG9zZGVmYXVsdHMgJiYgbnBvc2RlZmF1bHRzKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICAvKiBUaGUgbGVuZ3RoIG9mIGt3b25seWFyZ3MgYW5kIGt3ZGVmYXVsdHMgYXJlIHNhbWUKICAgICAgICBzaW5jZSB3ZSBzZXQgTlVMTCBhcyBkZWZhdWx0IGZvciBrZXl3b3JkIG9ubHkgYXJndW1lbnQgdy9vIGRlZmF1bHQKICAgICAgICAtIHdlIGhhdmUgc2VxdWVuY2UgZGF0YSBzdHJ1Y3R1cmUsIGJ1dCBubyBkaWN0aW9uYXJ5ICovCiAgICAga3dkZWZhdWx0cyA9IChua3dvbmx5YXJncyA/Ci0gICAgICAgICAgICAgICAgICAgYXNkbF9zZXFfbmV3KG5rd29ubHlhcmdzLCBjLT5jX2FyZW5hKSA6IE5VTEwpOworICAgICAgICAgICAgICAgICAgIF9QeV9hc2RsX3NlcV9uZXcobmt3b25seWFyZ3MsIGMtPmNfYXJlbmEpIDogTlVMTCk7CiAgICAgaWYgKCFrd2RlZmF1bHRzICYmIG5rd29ubHlhcmdzKQogICAgICAgICByZXR1cm4gTlVMTDsKIApAQCAtMTM0NCwxNyArMTM1NCwxMCBAQAogICAgICAgICAgICAgICAgICAgICBpID0gcmVzOyAvKiByZXMgaGFzIG5ldyBwb3NpdGlvbiB0byBwcm9jZXNzICovCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICB2YXJhcmcgPSBORVdfSURFTlRJRklFUihDSElMRChjaCwgMCkpOworICAgICAgICAgICAgICAgICAgICB2YXJhcmcgPSBhc3RfZm9yX2FyZyhjLCBjaCk7CiAgICAgICAgICAgICAgICAgICAgIGlmICghdmFyYXJnKQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChmb3JiaWRkZW5fbmFtZShjLCB2YXJhcmcsIENISUxEKGNoLCAwKSwgMCkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKE5DSChjaCkgPiAxKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvKiB0aGVyZSBpcyBhbiBhbm5vdGF0aW9uIG9uIHRoZSB2YXJhcmcgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIHZhcmFyZ2Fubm90YXRpb24gPSBhc3RfZm9yX2V4cHIoYywgQ0hJTEQoY2gsIDIpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdmFyYXJnYW5ub3RhdGlvbikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAgICAgICAgIGkgKz0gMzsKICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPCBOQ0gobikgJiYgKFRZUEUoQ0hJTEQobiwgaSkpID09IHRmcGRlZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgVFlQRShDSElMRChuLCBpKSkgPT0gdmZwZGVmKSkgewpAQCAtMTM2OSwxNyArMTM3Miw5IEBACiAgICAgICAgICAgICBjYXNlIERPVUJMRVNUQVI6CiAgICAgICAgICAgICAgICAgY2ggPSBDSElMRChuLCBpKzEpOyAgLyogdGZwZGVmICovCiAgICAgICAgICAgICAgICAgYXNzZXJ0KFRZUEUoY2gpID09IHRmcGRlZiB8fCBUWVBFKGNoKSA9PSB2ZnBkZWYpOwotICAgICAgICAgICAgICAgIGt3YXJnID0gTkVXX0lERU5USUZJRVIoQ0hJTEQoY2gsIDApKTsKKyAgICAgICAgICAgICAgICBrd2FyZyA9IGFzdF9mb3JfYXJnKGMsIGNoKTsKICAgICAgICAgICAgICAgICBpZiAoIWt3YXJnKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgICAgICBpZiAoTkNIKGNoKSA+IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgLyogdGhlcmUgaXMgYW4gYW5ub3RhdGlvbiBvbiB0aGUga3dhcmcgKi8KLSAgICAgICAgICAgICAgICAgICAga3dhcmdhbm5vdGF0aW9uID0gYXN0X2Zvcl9leHByKGMsIENISUxEKGNoLCAyKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgha3dhcmdhbm5vdGF0aW9uKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChmb3JiaWRkZW5fbmFtZShjLCBrd2FyZywgQ0hJTEQoY2gsIDApLCAwKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICAgICAgaSArPSAzOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVmYXVsdDoKQEAgLTEzODksOCArMTM4NCw3IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KICAgICB9Ci0gICAgcmV0dXJuIGFyZ3VtZW50cyhwb3NhcmdzLCB2YXJhcmcsIHZhcmFyZ2Fubm90YXRpb24sIGt3b25seWFyZ3MsIGt3YXJnLAotICAgICAgICAgICAgICAgICAgICBrd2FyZ2Fubm90YXRpb24sIHBvc2RlZmF1bHRzLCBrd2RlZmF1bHRzLCBjLT5jX2FyZW5hKTsKKyAgICByZXR1cm4gYXJndW1lbnRzKHBvc2FyZ3MsIHZhcmFyZywga3dvbmx5YXJncywga3dkZWZhdWx0cywga3dhcmcsIHBvc2RlZmF1bHRzLCBjLT5jX2FyZW5hKTsKIH0KIAogc3RhdGljIGV4cHJfdHkKQEAgLTE0NjksNyArMTQ2Myw3IEBACiAgICAgaW50IGk7CiAKICAgICBSRVEobiwgZGVjb3JhdG9ycyk7Ci0gICAgZGVjb3JhdG9yX3NlcSA9IGFzZGxfc2VxX25ldyhOQ0gobiksIGMtPmNfYXJlbmEpOworICAgIGRlY29yYXRvcl9zZXEgPSBfUHlfYXNkbF9zZXFfbmV3KE5DSChuKSwgYy0+Y19hcmVuYSk7CiAgICAgaWYgKCFkZWNvcmF0b3Jfc2VxKQogICAgICAgICByZXR1cm4gTlVMTDsKIApAQCAtMTU1NSw4ICsxNTQ5LDcgQEAKICAgICBleHByX3R5IGV4cHJlc3Npb247CiAKICAgICBpZiAoTkNIKG4pID09IDMpIHsKLSAgICAgICAgYXJncyA9IGFyZ3VtZW50cyhOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIGMtPmNfYXJlbmEpOworICAgICAgICBhcmdzID0gYXJndW1lbnRzKE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIGMtPmNfYXJlbmEpOwogICAgICAgICBpZiAoIWFyZ3MpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgZXhwcmVzc2lvbiA9IGFzdF9mb3JfZXhwcihjLCBDSElMRChuLCAyKSk7CkBAIC0xNjY2LDcgKzE2NTksNyBAQAogICAgIGlmIChuX2ZvcnMgPT0gLTEpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgY29tcHMgPSBhc2RsX3NlcV9uZXcobl9mb3JzLCBjLT5jX2FyZW5hKTsKKyAgICBjb21wcyA9IF9QeV9hc2RsX3NlcV9uZXcobl9mb3JzLCBjLT5jX2FyZW5hKTsKICAgICBpZiAoIWNvbXBzKQogICAgICAgICByZXR1cm4gTlVMTDsKIApAQCAtMTcwNyw3ICsxNzAwLDcgQEAKICAgICAgICAgICAgIGlmIChuX2lmcyA9PSAtMSkKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgICAgICAgICAgaWZzID0gYXNkbF9zZXFfbmV3KG5faWZzLCBjLT5jX2FyZW5hKTsKKyAgICAgICAgICAgIGlmcyA9IF9QeV9hc2RsX3NlcV9uZXcobl9pZnMsIGMtPmNfYXJlbmEpOwogICAgICAgICAgICAgaWYgKCFpZnMpCiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTE4MTksMTEgKzE4MTIsMjEgQEAKIAogICAgIHN3aXRjaCAoVFlQRShjaCkpIHsKICAgICBjYXNlIE5BTUU6IHsKLSAgICAgICAgLyogQWxsIG5hbWVzIHN0YXJ0IGluIExvYWQgY29udGV4dCwgYnV0IG1heSBsYXRlciBiZQotICAgICAgICAgICBjaGFuZ2VkLiAqLwotICAgICAgICBQeU9iamVjdCAqbmFtZSA9IE5FV19JREVOVElGSUVSKGNoKTsKKyAgICAgICAgUHlPYmplY3QgKm5hbWU7CisgICAgICAgIGNvbnN0IGNoYXIgKnMgPSBTVFIoY2gpOworICAgICAgICBzaXplX3QgbGVuID0gc3RybGVuKHMpOworICAgICAgICBpZiAobGVuID49IDQgJiYgbGVuIDw9IDUpIHsKKyAgICAgICAgICAgIGlmICghc3RyY21wKHMsICJOb25lIikpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5hbWVDb25zdGFudChQeV9Ob25lLCBMSU5FTk8obiksIG4tPm5fY29sX29mZnNldCwgYy0+Y19hcmVuYSk7CisgICAgICAgICAgICBpZiAoIXN0cmNtcChzLCAiVHJ1ZSIpKQorICAgICAgICAgICAgICAgIHJldHVybiBOYW1lQ29uc3RhbnQoUHlfVHJ1ZSwgTElORU5PKG4pLCBuLT5uX2NvbF9vZmZzZXQsIGMtPmNfYXJlbmEpOworICAgICAgICAgICAgaWYgKCFzdHJjbXAocywgIkZhbHNlIikpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5hbWVDb25zdGFudChQeV9GYWxzZSwgTElORU5PKG4pLCBuLT5uX2NvbF9vZmZzZXQsIGMtPmNfYXJlbmEpOworICAgICAgICB9CisgICAgICAgIG5hbWUgPSBuZXdfaWRlbnRpZmllcihzLCBjKTsKICAgICAgICAgaWYgKCFuYW1lKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIC8qIEFsbCBuYW1lcyBzdGFydCBpbiBMb2FkIGNvbnRleHQsIGJ1dCBtYXkgbGF0ZXIgYmUgY2hhbmdlZC4gKi8KICAgICAgICAgcmV0dXJuIE5hbWUobmFtZSwgTG9hZCwgTElORU5PKG4pLCBuLT5uX2NvbF9vZmZzZXQsIGMtPmNfYXJlbmEpOwogICAgIH0KICAgICBjYXNlIFNUUklORzogewpAQCAtMTg0OCwxMiArMTg1MSwxNSBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBhc3RfZXJyb3IoYywgbiwgYnVmKTsKICAgICAgICAgICAgICAgICBQeV9ERUNSRUYodHlwZSk7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKHZhbHVlKTsKKyAgICAgICAgICAgICAgICBQeV9YREVDUkVGKHZhbHVlKTsKICAgICAgICAgICAgICAgICBQeV9YREVDUkVGKHRiYWNrKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9Ci0gICAgICAgIFB5QXJlbmFfQWRkUHlPYmplY3QoYy0+Y19hcmVuYSwgc3RyKTsKKyAgICAgICAgaWYgKFB5QXJlbmFfQWRkUHlPYmplY3QoYy0+Y19hcmVuYSwgc3RyKSA8IDApIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihzdHIpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KICAgICAgICAgaWYgKGJ5dGVzbW9kZSkKICAgICAgICAgICAgIHJldHVybiBCeXRlcyhzdHIsIExJTkVOTyhuKSwgbi0+bl9jb2xfb2Zmc2V0LCBjLT5jX2FyZW5hKTsKICAgICAgICAgZWxzZQpAQCAtMTg2NCw3ICsxODcwLDEwIEBACiAgICAgICAgIGlmICghcHludW0pCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgICAgICBQeUFyZW5hX0FkZFB5T2JqZWN0KGMtPmNfYXJlbmEsIHB5bnVtKTsKKyAgICAgICAgaWYgKFB5QXJlbmFfQWRkUHlPYmplY3QoYy0+Y19hcmVuYSwgcHludW0pIDwgMCkgeworICAgICAgICAgICAgUHlfREVDUkVGKHB5bnVtKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CiAgICAgICAgIHJldHVybiBOdW0ocHludW0sIExJTkVOTyhuKSwgbi0+bl9jb2xfb2Zmc2V0LCBjLT5jX2FyZW5hKTsKICAgICB9CiAgICAgY2FzZSBFTExJUFNJUzogLyogRWxsaXBzaXMgKi8KQEAgLTE5MTMsNyArMTkyMiw3IEBACiAgICAgICAgICAgICAvKiBpdCdzIGEgc2ltcGxlIHNldCAqLwogICAgICAgICAgICAgYXNkbF9zZXEgKmVsdHM7CiAgICAgICAgICAgICBzaXplID0gKE5DSChjaCkgKyAxKSAvIDI7IC8qICsxIGluIGNhc2Ugbm8gdHJhaWxpbmcgY29tbWEgKi8KLSAgICAgICAgICAgIGVsdHMgPSBhc2RsX3NlcV9uZXcoc2l6ZSwgYy0+Y19hcmVuYSk7CisgICAgICAgICAgICBlbHRzID0gX1B5X2FzZGxfc2VxX25ldyhzaXplLCBjLT5jX2FyZW5hKTsKICAgICAgICAgICAgIGlmICghZWx0cykKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBOQ0goY2gpOyBpICs9IDIpIHsKQEAgLTE5MzIsMTEgKzE5NDEsMTEgQEAKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8qIGl0J3MgYSBkaWN0ICovCiAgICAgICAgICAgICBzaXplID0gKE5DSChjaCkgKyAxKSAvIDQ7IC8qICsxIGluIGNhc2Ugbm8gdHJhaWxpbmcgY29tbWEgKi8KLSAgICAgICAgICAgIGtleXMgPSBhc2RsX3NlcV9uZXcoc2l6ZSwgYy0+Y19hcmVuYSk7CisgICAgICAgICAgICBrZXlzID0gX1B5X2FzZGxfc2VxX25ldyhzaXplLCBjLT5jX2FyZW5hKTsKICAgICAgICAgICAgIGlmICgha2V5cykKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgICAgICAgICAgdmFsdWVzID0gYXNkbF9zZXFfbmV3KHNpemUsIGMtPmNfYXJlbmEpOworICAgICAgICAgICAgdmFsdWVzID0gX1B5X2FzZGxfc2VxX25ldyhzaXplLCBjLT5jX2FyZW5hKTsKICAgICAgICAgICAgIGlmICghdmFsdWVzKQogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogCkBAIC0yMDk2LDcgKzIxMDUsNyBAQAogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXR1cm4gYXN0X2Zvcl9jYWxsKGMsIENISUxEKG4sIDEpLCBsZWZ0X2V4cHIpOwogICAgIH0KLSAgICBlbHNlIGlmIChUWVBFKENISUxEKG4sIDApKSA9PSBET1QgKSB7CisgICAgZWxzZSBpZiAoVFlQRShDSElMRChuLCAwKSkgPT0gRE9UKSB7CiAgICAgICAgIFB5T2JqZWN0ICphdHRyX2lkID0gTkVXX0lERU5USUZJRVIoQ0hJTEQobiwgMSkpOwogICAgICAgICBpZiAoIWF0dHJfaWQpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTIxMjQsNyArMjEzMyw3IEBACiAgICAgICAgICAgICBleHByX3R5IGU7CiAgICAgICAgICAgICBpbnQgc2ltcGxlID0gMTsKICAgICAgICAgICAgIGFzZGxfc2VxICpzbGljZXMsICplbHRzOwotICAgICAgICAgICAgc2xpY2VzID0gYXNkbF9zZXFfbmV3KChOQ0gobikgKyAxKSAvIDIsIGMtPmNfYXJlbmEpOworICAgICAgICAgICAgc2xpY2VzID0gX1B5X2FzZGxfc2VxX25ldygoTkNIKG4pICsgMSkgLyAyLCBjLT5jX2FyZW5hKTsKICAgICAgICAgICAgIGlmICghc2xpY2VzKQogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IE5DSChuKTsgaiArPSAyKSB7CkBAIC0yMTQwLDcgKzIxNDksNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9hZCwgTElORU5PKG4pLCBuLT5uX2NvbF9vZmZzZXQsIGMtPmNfYXJlbmEpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgLyogZXh0cmFjdCBJbmRleCB2YWx1ZXMgYW5kIHB1dCB0aGVtIGluIGEgVHVwbGUgKi8KLSAgICAgICAgICAgIGVsdHMgPSBhc2RsX3NlcV9uZXcoYXNkbF9zZXFfTEVOKHNsaWNlcyksIGMtPmNfYXJlbmEpOworICAgICAgICAgICAgZWx0cyA9IF9QeV9hc2RsX3NlcV9uZXcoYXNkbF9zZXFfTEVOKHNsaWNlcyksIGMtPmNfYXJlbmEpOwogICAgICAgICAgICAgaWYgKCFlbHRzKQogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGFzZGxfc2VxX0xFTihzbGljZXMpOyArK2opIHsKQEAgLTIyMTAsMTAgKzIyMTksNyBAQAogICAgICAgICBleHByX3R5IGYgPSBhc3RfZm9yX2V4cHIoYywgQ0hJTEQobiwgTkNIKG4pIC0gMSkpOwogICAgICAgICBpZiAoIWYpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgdG1wID0gQmluT3AoZSwgUG93LCBmLCBMSU5FTk8obiksIG4tPm5fY29sX29mZnNldCwgYy0+Y19hcmVuYSk7Ci0gICAgICAgIGlmICghdG1wKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIGUgPSB0bXA7CisgICAgICAgIGUgPSBCaW5PcChlLCBQb3csIGYsIExJTkVOTyhuKSwgbi0+bl9jb2xfb2Zmc2V0LCBjLT5jX2FyZW5hKTsKICAgICB9CiAgICAgcmV0dXJuIGU7CiB9CkBAIC0yMjc1LDcgKzIyODEsNyBAQAogICAgICAgICAgICAgICAgIG4gPSBDSElMRChuLCAwKTsKICAgICAgICAgICAgICAgICBnb3RvIGxvb3A7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBzZXEgPSBhc2RsX3NlcV9uZXcoKE5DSChuKSArIDEpIC8gMiwgYy0+Y19hcmVuYSk7CisgICAgICAgICAgICBzZXEgPSBfUHlfYXNkbF9zZXFfbmV3KChOQ0gobikgKyAxKSAvIDIsIGMtPmNfYXJlbmEpOwogICAgICAgICAgICAgaWYgKCFzZXEpCiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgTkNIKG4pOyBpICs9IDIpIHsKQEAgLTIzMTEsMTAgKzIzMTcsMTAgQEAKICAgICAgICAgICAgICAgICBleHByX3R5IGV4cHJlc3Npb247CiAgICAgICAgICAgICAgICAgYXNkbF9pbnRfc2VxICpvcHM7CiAgICAgICAgICAgICAgICAgYXNkbF9zZXEgKmNtcHM7Ci0gICAgICAgICAgICAgICAgb3BzID0gYXNkbF9pbnRfc2VxX25ldyhOQ0gobikgLyAyLCBjLT5jX2FyZW5hKTsKKyAgICAgICAgICAgICAgICBvcHMgPSBfUHlfYXNkbF9pbnRfc2VxX25ldyhOQ0gobikgLyAyLCBjLT5jX2FyZW5hKTsKICAgICAgICAgICAgICAgICBpZiAoIW9wcykKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICAgICAgY21wcyA9IGFzZGxfc2VxX25ldyhOQ0gobikgLyAyLCBjLT5jX2FyZW5hKTsKKyAgICAgICAgICAgICAgICBjbXBzID0gX1B5X2FzZGxfc2VxX25ldyhOQ0gobikgLyAyLCBjLT5jX2FyZW5hKTsKICAgICAgICAgICAgICAgICBpZiAoIWNtcHMpIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICAgICAgfQpAQCAtMjQ0MCwxMCArMjQ0NiwxMCBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBhcmdzID0gYXNkbF9zZXFfbmV3KG5hcmdzICsgbmdlbnMsIGMtPmNfYXJlbmEpOworICAgIGFyZ3MgPSBfUHlfYXNkbF9zZXFfbmV3KG5hcmdzICsgbmdlbnMsIGMtPmNfYXJlbmEpOwogICAgIGlmICghYXJncykKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAga2V5d29yZHMgPSBhc2RsX3NlcV9uZXcobmtleXdvcmRzLCBjLT5jX2FyZW5hKTsKKyAgICBrZXl3b3JkcyA9IF9QeV9hc2RsX3NlcV9uZXcobmtleXdvcmRzLCBjLT5jX2FyZW5hKTsKICAgICBpZiAoIWtleXdvcmRzKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBuYXJncyA9IDA7CkBAIC0yNjIwLDcgKzI2MjYsNyBAQAogCiAgICAgICAgIC8qIGEgbm9ybWFsIGFzc2lnbm1lbnQgKi8KICAgICAgICAgUkVRKENISUxEKG4sIDEpLCBFUVVBTCk7Ci0gICAgICAgIHRhcmdldHMgPSBhc2RsX3NlcV9uZXcoTkNIKG4pIC8gMiwgYy0+Y19hcmVuYSk7CisgICAgICAgIHRhcmdldHMgPSBfUHlfYXNkbF9zZXFfbmV3KE5DSChuKSAvIDIsIGMtPmNfYXJlbmEpOwogICAgICAgICBpZiAoIXRhcmdldHMpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgZm9yIChpID0gMDsgaSA8IE5DSChuKSAtIDI7IGkgKz0gMikgewpAQCAtMjY2MSw3ICsyNjY3LDcgQEAKIAogICAgIFJFUShuLCBleHBybGlzdCk7CiAKLSAgICBzZXEgPSBhc2RsX3NlcV9uZXcoKE5DSChuKSArIDEpIC8gMiwgYy0+Y19hcmVuYSk7CisgICAgc2VxID0gX1B5X2FzZGxfc2VxX25ldygoTkNIKG4pICsgMSkgLyAyLCBjLT5jX2FyZW5hKTsKICAgICBpZiAoIXNlcSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgZm9yIChpID0gMDsgaSA8IE5DSChuKTsgaSArPSAyKSB7CkBAIC0yODQ2LDEzICsyODUyLDE5IEBACiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgICAgIHN0ciA9IHVuaTsKICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfSW50ZXJuSW5QbGFjZSgmc3RyKTsKLSAgICAgICAgICAgICAgICBQeUFyZW5hX0FkZFB5T2JqZWN0KGMtPmNfYXJlbmEsIHN0cik7CisgICAgICAgICAgICAgICAgaWYgKFB5QXJlbmFfQWRkUHlPYmplY3QoYy0+Y19hcmVuYSwgc3RyKSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHN0cik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICByZXR1cm4gYWxpYXMoc3RyLCBOVUxMLCBjLT5jX2FyZW5hKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFNUQVI6CiAgICAgICAgICAgICBzdHIgPSBQeVVuaWNvZGVfSW50ZXJuRnJvbVN0cmluZygiKiIpOwotICAgICAgICAgICAgUHlBcmVuYV9BZGRQeU9iamVjdChjLT5jX2FyZW5hLCBzdHIpOworICAgICAgICAgICAgaWYgKFB5QXJlbmFfQWRkUHlPYmplY3QoYy0+Y19hcmVuYSwgc3RyKSA8IDApIHsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoc3RyKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBhbGlhcyhzdHIsIE5VTEwsIGMtPmNfYXJlbmEpOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1N5c3RlbUVycm9yLApAQCAtMjg4NSw3ICsyODk3LDcgQEAKICAgICBpZiAoVFlQRShuKSA9PSBpbXBvcnRfbmFtZSkgewogICAgICAgICBuID0gQ0hJTEQobiwgMSk7CiAgICAgICAgIFJFUShuLCBkb3R0ZWRfYXNfbmFtZXMpOwotICAgICAgICBhbGlhc2VzID0gYXNkbF9zZXFfbmV3KChOQ0gobikgKyAxKSAvIDIsIGMtPmNfYXJlbmEpOworICAgICAgICBhbGlhc2VzID0gX1B5X2FzZGxfc2VxX25ldygoTkNIKG4pICsgMSkgLyAyLCBjLT5jX2FyZW5hKTsKICAgICAgICAgaWYgKCFhbGlhc2VzKQogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgTkNIKG4pOyBpICs9IDIpIHsKQEAgLTI5NDcsNyArMjk1OSw3IEBACiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQogCi0gICAgICAgIGFsaWFzZXMgPSBhc2RsX3NlcV9uZXcoKG5fY2hpbGRyZW4gKyAxKSAvIDIsIGMtPmNfYXJlbmEpOworICAgICAgICBhbGlhc2VzID0gX1B5X2FzZGxfc2VxX25ldygobl9jaGlsZHJlbiArIDEpIC8gMiwgYy0+Y19hcmVuYSk7CiAgICAgICAgIGlmICghYWxpYXNlcykKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogCkBAIC0yOTg2LDcgKzI5OTgsNyBAQAogICAgIGludCBpOwogCiAgICAgUkVRKG4sIGdsb2JhbF9zdG10KTsKLSAgICBzID0gYXNkbF9zZXFfbmV3KE5DSChuKSAvIDIsIGMtPmNfYXJlbmEpOworICAgIHMgPSBfUHlfYXNkbF9zZXFfbmV3KE5DSChuKSAvIDIsIGMtPmNfYXJlbmEpOwogICAgIGlmICghcykKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgZm9yIChpID0gMTsgaSA8IE5DSChuKTsgaSArPSAyKSB7CkBAIC0zMDA3LDcgKzMwMTksNyBAQAogICAgIGludCBpOwogCiAgICAgUkVRKG4sIG5vbmxvY2FsX3N0bXQpOwotICAgIHMgPSBhc2RsX3NlcV9uZXcoTkNIKG4pIC8gMiwgYy0+Y19hcmVuYSk7CisgICAgcyA9IF9QeV9hc2RsX3NlcV9uZXcoTkNIKG4pIC8gMiwgYy0+Y19hcmVuYSk7CiAgICAgaWYgKCFzKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBmb3IgKGkgPSAxOyBpIDwgTkNIKG4pOyBpICs9IDIpIHsKQEAgLTMwNjAsNyArMzA3Miw3IEBACiAgICAgUkVRKG4sIHN1aXRlKTsKIAogICAgIHRvdGFsID0gbnVtX3N0bXRzKG4pOwotICAgIHNlcSA9IGFzZGxfc2VxX25ldyh0b3RhbCwgYy0+Y19hcmVuYSk7CisgICAgc2VxID0gX1B5X2FzZGxfc2VxX25ldyh0b3RhbCwgYy0+Y19hcmVuYSk7CiAgICAgaWYgKCFzZXEpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmIChUWVBFKENISUxEKG4sIDApKSA9PSBzaW1wbGVfc3RtdCkgewpAQCAtMzE3OSw3ICszMTkxLDcgQEAKICAgICAgICAgaWYgKGhhc19lbHNlKSB7CiAgICAgICAgICAgICBhc2RsX3NlcSAqc3VpdGVfc2VxMjsKIAotICAgICAgICAgICAgb3JlbHNlID0gYXNkbF9zZXFfbmV3KDEsIGMtPmNfYXJlbmEpOworICAgICAgICAgICAgb3JlbHNlID0gX1B5X2FzZGxfc2VxX25ldygxLCBjLT5jX2FyZW5hKTsKICAgICAgICAgICAgIGlmICghb3JlbHNlKQogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgZXhwcmVzc2lvbiA9IGFzdF9mb3JfZXhwcihjLCBDSElMRChuLCBOQ0gobikgLSA2KSk7CkBAIC0zMjAzLDcgKzMyMTUsNyBAQAogCiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuX2VsaWY7IGkrKykgewogICAgICAgICAgICAgaW50IG9mZiA9IDUgKyAobl9lbGlmIC0gaSAtIDEpICogNDsKLSAgICAgICAgICAgIGFzZGxfc2VxICpuZXdvYmogPSBhc2RsX3NlcV9uZXcoMSwgYy0+Y19hcmVuYSk7CisgICAgICAgICAgICBhc2RsX3NlcSAqbmV3b2JqID0gX1B5X2FzZGxfc2VxX25ldygxLCBjLT5jX2FyZW5hKTsKICAgICAgICAgICAgIGlmICghbmV3b2JqKQogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgZXhwcmVzc2lvbiA9IGFzdF9mb3JfZXhwcihjLCBDSElMRChuLCBvZmYpKTsKQEAgLTM0MTUsNyArMzQyNyw3IEBACiAgICAgaWYgKG5fZXhjZXB0ID4gMCkgewogICAgICAgICBpbnQgaTsKICAgICAgICAgLyogcHJvY2VzcyBleGNlcHQgc3RhdGVtZW50cyB0byBjcmVhdGUgYSB0cnkgLi4uIGV4Y2VwdCAqLwotICAgICAgICBoYW5kbGVycyA9IGFzZGxfc2VxX25ldyhuX2V4Y2VwdCwgYy0+Y19hcmVuYSk7CisgICAgICAgIGhhbmRsZXJzID0gX1B5X2FzZGxfc2VxX25ldyhuX2V4Y2VwdCwgYy0+Y19hcmVuYSk7CiAgICAgICAgIGlmIChoYW5kbGVycyA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTM0NjYsNyArMzQ3OCw3IEBACiAgICAgUkVRKG4sIHdpdGhfc3RtdCk7CiAKICAgICBuX2l0ZW1zID0gKE5DSChuKSAtIDIpIC8gMjsKLSAgICBpdGVtcyA9IGFzZGxfc2VxX25ldyhuX2l0ZW1zLCBjLT5jX2FyZW5hKTsKKyAgICBpdGVtcyA9IF9QeV9hc2RsX3NlcV9uZXcobl9pdGVtcywgYy0+Y19hcmVuYSk7CiAgICAgaWYgKCFpdGVtcykKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgZm9yIChpID0gMTsgaSA8IE5DSChuKSAtIDI7IGkgKz0gMikgewpAQCAtMzYzMiwxOCArMzY0NCwxNiBAQAogICAgIGVuZCA9IHMgKyBzdHJsZW4ocykgLSAxOwogICAgIGltZmxhZyA9ICplbmQgPT0gJ2onIHx8ICplbmQgPT0gJ0onOwogICAgIGlmIChzWzBdID09ICcwJykgewotICAgICAgICB4ID0gKGxvbmcpIFB5T1Nfc3RydG91bCgoY2hhciAqKXMsIChjaGFyICoqKSZlbmQsIDApOworICAgICAgICB4ID0gKGxvbmcpIFB5T1Nfc3RydG91bChzLCAoY2hhciAqKikmZW5kLCAwKTsKICAgICAgICAgaWYgKHggPCAwICYmIGVycm5vID09IDApIHsKLSAgICAgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbVN0cmluZygoY2hhciAqKXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKiopMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKTsKKyAgICAgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbVN0cmluZyhzLCAoY2hhciAqKikwLCAwKTsKICAgICAgICAgfQogICAgIH0KICAgICBlbHNlCi0gICAgICAgIHggPSBQeU9TX3N0cnRvbCgoY2hhciAqKXMsIChjaGFyICoqKSZlbmQsIDApOworICAgICAgICB4ID0gUHlPU19zdHJ0b2wocywgKGNoYXIgKiopJmVuZCwgMCk7CiAgICAgaWYgKCplbmQgPT0gJ1wwJykgewogICAgICAgICBpZiAoZXJybm8gIT0gMCkKLSAgICAgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbVN0cmluZygoY2hhciAqKXMsIChjaGFyICoqKTAsIDApOworICAgICAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tU3RyaW5nKHMsIChjaGFyICoqKTAsIDApOwogICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKHgpOwogICAgIH0KICAgICAvKiBYWFggSHVnZSBmbG9hdHMgbWF5IHNpbGVudGx5IGZhaWwgKi8KQEAgLTM2NjYsOCArMzY3Niw4IEBACiBzdGF0aWMgUHlPYmplY3QgKgogZGVjb2RlX3V0Zjgoc3RydWN0IGNvbXBpbGluZyAqYywgY29uc3QgY2hhciAqKnNQdHIsIGNvbnN0IGNoYXIgKmVuZCkKIHsKLSAgICBjaGFyICpzLCAqdDsKLSAgICB0ID0gcyA9IChjaGFyICopKnNQdHI7CisgICAgY29uc3QgY2hhciAqcywgKnQ7CisgICAgdCA9IHMgPSAqc1B0cjsKICAgICAvKiB3aGlsZSAocyA8IGVuZCAmJiAqcyAhPSAnXFwnKSBzKys7ICovIC8qIGluZWZmaWNpZW50IGZvciB1Ii4uIiAqLwogICAgIHdoaWxlIChzIDwgZW5kICYmICgqcyAmIDB4ODApKSBzKys7CiAgICAgKnNQdHIgPSBzOwpkaWZmIC0tZ2l0IGEvUHl0aG9uL2JsdGlubW9kdWxlLmMgYi9QeXRob24vYmx0aW5tb2R1bGUuYwppbmRleCBjOTRkYWVhLi41MzAwOWUzIDEwMDY0NAotLS0gYS9QeXRob24vYmx0aW5tb2R1bGUuYworKysgYi9QeXRob24vYmx0aW5tb2R1bGUuYwpAQCAtMzIsOCArMzIsMTkgQEAKIGludCBQeV9IYXNGaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nID0gMDsKICNlbmRpZgogCitfUHlfSURFTlRJRklFUihfX2J1aWx0aW5zX18pOworX1B5X0lERU5USUZJRVIoX19kaWN0X18pOworX1B5X0lERU5USUZJRVIoX19wcmVwYXJlX18pOworX1B5X0lERU5USUZJRVIoX19yb3VuZF9fKTsKK19QeV9JREVOVElGSUVSKGVuY29kaW5nKTsKK19QeV9JREVOVElGSUVSKGVycm9ycyk7CiBfUHlfSURFTlRJRklFUihmaWxlbm8pOwogX1B5X0lERU5USUZJRVIoZmx1c2gpOworX1B5X0lERU5USUZJRVIobWV0YWNsYXNzKTsKK19QeV9JREVOVElGSUVSKHNvcnQpOworX1B5X0lERU5USUZJRVIoc3RkaW4pOworX1B5X0lERU5USUZJRVIoc3Rkb3V0KTsKK19QeV9JREVOVElGSUVSKHN0ZGVycik7CiAKIHN0YXRpYyBQeU9iamVjdCAqCiBidWlsdGluX19fYnVpbGRfY2xhc3NfXyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQpAQCAtNDIsNyArNTMsNiBAQAogICAgIFB5T2JqZWN0ICpjbHMgPSBOVUxMOwogICAgIFB5X3NzaXplX3QgbmFyZ3M7CiAgICAgaW50IGlzY2xhc3M7Ci0gICAgX1B5X0lERU5USUZJRVIoX19wcmVwYXJlX18pOwogCiAgICAgYXNzZXJ0KGFyZ3MgIT0gTlVMTCk7CiAgICAgaWYgKCFQeVR1cGxlX0NoZWNrKGFyZ3MpKSB7CkBAIC01Nyw2ICs2NywxMSBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgZnVuYyA9IFB5VHVwbGVfR0VUX0lURU0oYXJncywgMCk7IC8qIEJldHRlciBiZSBjYWxsYWJsZSAqLworICAgIGlmICghUHlGdW5jdGlvbl9DaGVjayhmdW5jKSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgIl9fYnVpbGRfY2xhc3NfXzogZnVuYyBtdXN0IGJlIGEgZnVuY3Rpb24iKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogICAgIG5hbWUgPSBQeVR1cGxlX0dFVF9JVEVNKGFyZ3MsIDEpOwogICAgIGlmICghUHlVbmljb2RlX0NoZWNrKG5hbWUpKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCkBAIC03NywxMCArOTIsMTAgQEAKICAgICAgICAgICAgIFB5X0RFQ1JFRihiYXNlcyk7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQotICAgICAgICBtZXRhID0gUHlEaWN0X0dldEl0ZW1TdHJpbmcobWt3LCAibWV0YWNsYXNzIik7CisgICAgICAgIG1ldGEgPSBfUHlEaWN0X0dldEl0ZW1JZChta3csICZQeUlkX21ldGFjbGFzcyk7CiAgICAgICAgIGlmIChtZXRhICE9IE5VTEwpIHsKICAgICAgICAgICAgIFB5X0lOQ1JFRihtZXRhKTsKLSAgICAgICAgICAgIGlmIChQeURpY3RfRGVsSXRlbVN0cmluZyhta3csICJtZXRhY2xhc3MiKSA8IDApIHsKKyAgICAgICAgICAgIGlmIChfUHlEaWN0X0RlbEl0ZW1JZChta3csICZQeUlkX21ldGFjbGFzcykgPCAwKSB7CiAgICAgICAgICAgICAgICAgUHlfREVDUkVGKG1ldGEpOwogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihta3cpOwogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihiYXNlcyk7CkBAIC0xNTUsNyArMTcwLDkgQEAKICAgICAgICAgUHlfREVDUkVGKGJhc2VzKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIGNlbGwgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKGZ1bmMsIG5zLCBOVUxMKTsKKyAgICBjZWxsID0gUHlFdmFsX0V2YWxDb2RlRXgoUHlGdW5jdGlvbl9HRVRfQ09ERShmdW5jKSwgUHlGdW5jdGlvbl9HRVRfR0xPQkFMUyhmdW5jKSwgbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDAsIE5VTEwsIDAsIE5VTEwsIDAsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5RnVuY3Rpb25fR0VUX0NMT1NVUkUoZnVuYykpOwogICAgIGlmIChjZWxsICE9IE5VTEwpIHsKICAgICAgICAgUHlPYmplY3QgKm1hcmdzOwogICAgICAgICBtYXJncyA9IFB5VHVwbGVfUGFjaygzLCBuYW1lLCBiYXNlcywgbnMpOwpAQCAtMzMzLDcgKzM1MCwxMSBAQAogUHlEb2NfU1RSVkFSKGJpbl9kb2MsCiAiYmluKG51bWJlcikgLT4gc3RyaW5nXG5cCiBcblwKLVJldHVybiB0aGUgYmluYXJ5IHJlcHJlc2VudGF0aW9uIG9mIGFuIGludGVnZXIuIik7CitSZXR1cm4gdGhlIGJpbmFyeSByZXByZXNlbnRhdGlvbiBvZiBhbiBpbnRlZ2VyLlxuXAorXG5cCisgICA+Pj4gYmluKDI3OTYyMDIpXG5cCisgICAnMGIxMDEwMTAxMDEwMTAxMDEwMTAxMDEwJ1xuXAorIik7CiAKIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTUzOCwzMSArNTU5LDUwIEBACiBSZXR1cm4gYSBVbmljb2RlIHN0cmluZyBvZiBvbmUgY2hhcmFjdGVyIHdpdGggb3JkaW5hbCBpOyAwIDw9IGkgPD0gMHgxMGZmZmYuIik7CiAKIAotc3RhdGljIGNoYXIgKgotc291cmNlX2FzX3N0cmluZyhQeU9iamVjdCAqY21kLCBjaGFyICpmdW5jbmFtZSwgY2hhciAqd2hhdCwgUHlDb21waWxlckZsYWdzICpjZikKK3N0YXRpYyBjb25zdCBjaGFyICoKK3NvdXJjZV9hc19zdHJpbmcoUHlPYmplY3QgKmNtZCwgY29uc3QgY2hhciAqZnVuY25hbWUsIGNvbnN0IGNoYXIgKndoYXQsIFB5Q29tcGlsZXJGbGFncyAqY2YsIFB5T2JqZWN0ICoqY21kX2NvcHkpCiB7Ci0gICAgY2hhciAqc3RyOworICAgIGNvbnN0IGNoYXIgKnN0cjsKICAgICBQeV9zc2l6ZV90IHNpemU7CisgICAgUHlfYnVmZmVyIHZpZXc7CiAKKyAgICAqY21kX2NvcHkgPSBOVUxMOwogICAgIGlmIChQeVVuaWNvZGVfQ2hlY2soY21kKSkgewogICAgICAgICBjZi0+Y2ZfZmxhZ3MgfD0gUHlDRl9JR05PUkVfQ09PS0lFOwogICAgICAgICBzdHIgPSBQeVVuaWNvZGVfQXNVVEY4QW5kU2l6ZShjbWQsICZzaXplKTsKICAgICAgICAgaWYgKHN0ciA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIGVsc2UgaWYgKCFQeU9iamVjdF9DaGVja1JlYWRCdWZmZXIoY21kKSkgeworICAgIGVsc2UgaWYgKFB5Qnl0ZXNfQ2hlY2soY21kKSkgeworICAgICAgICBzdHIgPSBQeUJ5dGVzX0FTX1NUUklORyhjbWQpOworICAgICAgICBzaXplID0gUHlCeXRlc19HRVRfU0laRShjbWQpOworICAgIH0KKyAgICBlbHNlIGlmIChQeUJ5dGVBcnJheV9DaGVjayhjbWQpKSB7CisgICAgICAgIHN0ciA9IFB5Qnl0ZUFycmF5X0FTX1NUUklORyhjbWQpOworICAgICAgICBzaXplID0gUHlCeXRlQXJyYXlfR0VUX1NJWkUoY21kKTsKKyAgICB9CisgICAgZWxzZSBpZiAoUHlPYmplY3RfR2V0QnVmZmVyKGNtZCwgJnZpZXcsIFB5QlVGX1NJTVBMRSkgPT0gMCkgeworICAgICAgICAvKiBDb3B5IHRvIE5VTC10ZXJtaW5hdGVkIGJ1ZmZlci4gKi8KKyAgICAgICAgKmNtZF9jb3B5ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZSgKKyAgICAgICAgICAgIChjb25zdCBjaGFyICopdmlldy5idWYsIHZpZXcubGVuKTsKKyAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmlldyk7CisgICAgICAgIGlmICgqY21kX2NvcHkgPT0gTlVMTCkgeworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgc3RyID0gUHlCeXRlc19BU19TVFJJTkcoKmNtZF9jb3B5KTsKKyAgICAgICAgc2l6ZSA9IFB5Qnl0ZXNfR0VUX1NJWkUoKmNtZF9jb3B5KTsKKyAgICB9CisgICAgZWxzZSB7CiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCiAgICAgICAgICAgIiVzKCkgYXJnIDEgbXVzdCBiZSBhICVzIG9iamVjdCIsCiAgICAgICAgICAgZnVuY25hbWUsIHdoYXQpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgZWxzZSBpZiAoUHlPYmplY3RfQXNSZWFkQnVmZmVyKGNtZCwgKGNvbnN0IHZvaWQgKiopJnN0ciwgJnNpemUpIDwgMCkgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9CiAKICAgICBpZiAoc3RybGVuKHN0cikgIT0gc2l6ZSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSBjb2RlIHN0cmluZyBjYW5ub3QgY29udGFpbiBudWxsIGJ5dGVzIik7CisgICAgICAgIFB5X0NMRUFSKCpjbWRfY29weSk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICByZXR1cm4gc3RyOwpAQCAtNTcxLDkgKzYxMSw5IEBACiBzdGF0aWMgUHlPYmplY3QgKgogYnVpbHRpbl9jb21waWxlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCiB7Ci0gICAgY2hhciAqc3RyOwotICAgIFB5T2JqZWN0ICpmaWxlbmFtZV9vYmo7Ci0gICAgY2hhciAqZmlsZW5hbWU7CisgICAgUHlPYmplY3QgKmNtZF9jb3B5OworICAgIGNvbnN0IGNoYXIgKnN0cjsKKyAgICBQeU9iamVjdCAqZmlsZW5hbWU7CiAgICAgY2hhciAqc3RhcnRzdHI7CiAgICAgaW50IG1vZGUgPSAtMTsKICAgICBpbnQgZG9udF9pbmhlcml0ID0gMDsKQEAgLTU4OSwxMiArNjI5LDExIEBACiAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiT08mc3xpaWk6Y29tcGlsZSIsICBrd2xpc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNtZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfRlNDb252ZXJ0ZXIsICZmaWxlbmFtZV9vYmosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0ZTRGVjb2RlciwgJmZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdGFydHN0ciwgJnN1cHBsaWVkX2ZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkb250X2luaGVyaXQsICZvcHRpbWl6ZSkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgZmlsZW5hbWUgPSBQeUJ5dGVzX0FTX1NUUklORyhmaWxlbmFtZV9vYmopOwogICAgIGNmLmNmX2ZsYWdzID0gc3VwcGxpZWRfZmxhZ3MgfCBQeUNGX1NPVVJDRV9JU19VVEY4OwogCiAgICAgaWYgKHN1cHBsaWVkX2ZsYWdzICYKQEAgLTY1MiwyNCArNjkxLDI1IEBACiAgICAgICAgICAgICAgICAgUHlBcmVuYV9GcmVlKGFyZW5hKTsKICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgcmVzdWx0ID0gKFB5T2JqZWN0KilQeUFTVF9Db21waWxlRXgobW9kLCBmaWxlbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjZiwgb3B0aW1pemUsIGFyZW5hKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IChQeU9iamVjdCopUHlBU1RfQ29tcGlsZU9iamVjdChtb2QsIGZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjZiwgb3B0aW1pemUsIGFyZW5hKTsKICAgICAgICAgICAgIFB5QXJlbmFfRnJlZShhcmVuYSk7CiAgICAgICAgIH0KICAgICAgICAgZ290byBmaW5hbGx5OwogICAgIH0KIAotICAgIHN0ciA9IHNvdXJjZV9hc19zdHJpbmcoY21kLCAiY29tcGlsZSIsICJzdHJpbmcsIGJ5dGVzLCBBU1Qgb3IgY29kZSIsICZjZik7CisgICAgc3RyID0gc291cmNlX2FzX3N0cmluZyhjbWQsICJjb21waWxlIiwgInN0cmluZywgYnl0ZXMgb3IgQVNUIiwgJmNmLCAmY21kX2NvcHkpOwogICAgIGlmIChzdHIgPT0gTlVMTCkKICAgICAgICAgZ290byBlcnJvcjsKIAotICAgIHJlc3VsdCA9IFB5X0NvbXBpbGVTdHJpbmdFeEZsYWdzKHN0ciwgZmlsZW5hbWUsIHN0YXJ0W21vZGVdLCAmY2YsIG9wdGltaXplKTsKKyAgICByZXN1bHQgPSBQeV9Db21waWxlU3RyaW5nT2JqZWN0KHN0ciwgZmlsZW5hbWUsIHN0YXJ0W21vZGVdLCAmY2YsIG9wdGltaXplKTsKKyAgICBQeV9YREVDUkVGKGNtZF9jb3B5KTsKICAgICBnb3RvIGZpbmFsbHk7CiAKIGVycm9yOgogICAgIHJlc3VsdCA9IE5VTEw7CiBmaW5hbGx5OgotICAgIFB5X0RFQ1JFRihmaWxlbmFtZV9vYmopOworICAgIFB5X0RFQ1JFRihmaWxlbmFtZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtNzMxLDkgKzc3MSw5IEBACiBzdGF0aWMgUHlPYmplY3QgKgogYnVpbHRpbl9ldmFsKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICBQeU9iamVjdCAqY21kLCAqcmVzdWx0LCAqdG1wID0gTlVMTDsKKyAgICBQeU9iamVjdCAqY21kLCAqcmVzdWx0LCAqY21kX2NvcHk7CiAgICAgUHlPYmplY3QgKmdsb2JhbHMgPSBQeV9Ob25lLCAqbG9jYWxzID0gUHlfTm9uZTsKLSAgICBjaGFyICpzdHI7CisgICAgY29uc3QgY2hhciAqc3RyOwogICAgIFB5Q29tcGlsZXJGbGFncyBjZjsKIAogICAgIGlmICghUHlBcmdfVW5wYWNrVHVwbGUoYXJncywgImV2YWwiLCAxLCAzLCAmY21kLCAmZ2xvYmFscywgJmxvY2FscykpCkBAIC03NTAsOCArNzkwLDExIEBACiAgICAgfQogICAgIGlmIChnbG9iYWxzID09IFB5X05vbmUpIHsKICAgICAgICAgZ2xvYmFscyA9IFB5RXZhbF9HZXRHbG9iYWxzKCk7Ci0gICAgICAgIGlmIChsb2NhbHMgPT0gUHlfTm9uZSkKKyAgICAgICAgaWYgKGxvY2FscyA9PSBQeV9Ob25lKSB7CiAgICAgICAgICAgICBsb2NhbHMgPSBQeUV2YWxfR2V0TG9jYWxzKCk7CisgICAgICAgICAgICBpZiAobG9jYWxzID09IE5VTEwpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KICAgICB9CiAgICAgZWxzZSBpZiAobG9jYWxzID09IFB5X05vbmUpCiAgICAgICAgIGxvY2FscyA9IGdsb2JhbHM7CkBAIC03NjMsOSArODA2LDkgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgaWYgKFB5RGljdF9HZXRJdGVtU3RyaW5nKGdsb2JhbHMsICJfX2J1aWx0aW5zX18iKSA9PSBOVUxMKSB7Ci0gICAgICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhnbG9iYWxzLCAiX19idWlsdGluc19fIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5RXZhbF9HZXRCdWlsdGlucygpKSAhPSAwKQorICAgIGlmIChfUHlEaWN0X0dldEl0ZW1JZChnbG9iYWxzLCAmUHlJZF9fX2J1aWx0aW5zX18pID09IE5VTEwpIHsKKyAgICAgICAgaWYgKF9QeURpY3RfU2V0SXRlbUlkKGdsb2JhbHMsICZQeUlkX19fYnVpbHRpbnNfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5RXZhbF9HZXRCdWlsdGlucygpKSAhPSAwKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCkBAIC03NzksNyArODIyLDcgQEAKICAgICB9CiAKICAgICBjZi5jZl9mbGFncyA9IFB5Q0ZfU09VUkNFX0lTX1VURjg7Ci0gICAgc3RyID0gc291cmNlX2FzX3N0cmluZyhjbWQsICJldmFsIiwgInN0cmluZywgYnl0ZXMgb3IgY29kZSIsICZjZik7CisgICAgc3RyID0gc291cmNlX2FzX3N0cmluZyhjbWQsICJldmFsIiwgInN0cmluZywgYnl0ZXMgb3IgY29kZSIsICZjZiwgJmNtZF9jb3B5KTsKICAgICBpZiAoc3RyID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCkBAIC03ODgsNyArODMxLDcgQEAKIAogICAgICh2b2lkKVB5RXZhbF9NZXJnZUNvbXBpbGVyRmxhZ3MoJmNmKTsKICAgICByZXN1bHQgPSBQeVJ1bl9TdHJpbmdGbGFncyhzdHIsIFB5X2V2YWxfaW5wdXQsIGdsb2JhbHMsIGxvY2FscywgJmNmKTsKLSAgICBQeV9YREVDUkVGKHRtcCk7CisgICAgUHlfWERFQ1JFRihjbWRfY29weSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtODE1LDYgKzg1OCw4IEBACiAgICAgICAgIGdsb2JhbHMgPSBQeUV2YWxfR2V0R2xvYmFscygpOwogICAgICAgICBpZiAobG9jYWxzID09IFB5X05vbmUpIHsKICAgICAgICAgICAgIGxvY2FscyA9IFB5RXZhbF9HZXRMb2NhbHMoKTsKKyAgICAgICAgICAgIGlmIChsb2NhbHMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQogICAgICAgICBpZiAoIWdsb2JhbHMgfHwgIWxvY2FscykgewogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1N5c3RlbUVycm9yLApAQCAtODM2LDkgKzg4MSw5IEBACiAgICAgICAgICAgICBsb2NhbHMtPm9iX3R5cGUtPnRwX25hbWUpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgaWYgKFB5RGljdF9HZXRJdGVtU3RyaW5nKGdsb2JhbHMsICJfX2J1aWx0aW5zX18iKSA9PSBOVUxMKSB7Ci0gICAgICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhnbG9iYWxzLCAiX19idWlsdGluc19fIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5RXZhbF9HZXRCdWlsdGlucygpKSAhPSAwKQorICAgIGlmIChfUHlEaWN0X0dldEl0ZW1JZChnbG9iYWxzLCAmUHlJZF9fX2J1aWx0aW5zX18pID09IE5VTEwpIHsKKyAgICAgICAgaWYgKF9QeURpY3RfU2V0SXRlbUlkKGdsb2JhbHMsICZQeUlkX19fYnVpbHRpbnNfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5RXZhbF9HZXRCdWlsdGlucygpKSAhPSAwKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCkBAIC04NTIsMTEgKzg5NywxMyBAQAogICAgICAgICB2ID0gUHlFdmFsX0V2YWxDb2RlKHByb2csIGdsb2JhbHMsIGxvY2Fscyk7CiAgICAgfQogICAgIGVsc2UgewotICAgICAgICBjaGFyICpzdHI7CisgICAgICAgIFB5T2JqZWN0ICpwcm9nX2NvcHk7CisgICAgICAgIGNvbnN0IGNoYXIgKnN0cjsKICAgICAgICAgUHlDb21waWxlckZsYWdzIGNmOwogICAgICAgICBjZi5jZl9mbGFncyA9IFB5Q0ZfU09VUkNFX0lTX1VURjg7CiAgICAgICAgIHN0ciA9IHNvdXJjZV9hc19zdHJpbmcocHJvZywgImV4ZWMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdHJpbmcsIGJ5dGVzIG9yIGNvZGUiLCAmY2YpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdHJpbmcsIGJ5dGVzIG9yIGNvZGUiLCAmY2YsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByb2dfY29weSk7CiAgICAgICAgIGlmIChzdHIgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICBpZiAoUHlFdmFsX01lcmdlQ29tcGlsZXJGbGFncygmY2YpKQpAQCAtODY0LDYgKzkxMSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxzLCAmY2YpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICB2ID0gUHlSdW5fU3RyaW5nKHN0ciwgUHlfZmlsZV9pbnB1dCwgZ2xvYmFscywgbG9jYWxzKTsKKyAgICAgICAgUHlfWERFQ1JFRihwcm9nX2NvcHkpOwogICAgIH0KICAgICBpZiAodiA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTEyNTYsNyArMTMwNCwxMSBAQAogUHlEb2NfU1RSVkFSKGhleF9kb2MsCiAiaGV4KG51bWJlcikgLT4gc3RyaW5nXG5cCiBcblwKLVJldHVybiB0aGUgaGV4YWRlY2ltYWwgcmVwcmVzZW50YXRpb24gb2YgYW4gaW50ZWdlci4iKTsKK1JldHVybiB0aGUgaGV4YWRlY2ltYWwgcmVwcmVzZW50YXRpb24gb2YgYW4gaW50ZWdlci5cblwKK1xuXAorICAgPj4+IGhleCgzNzM1OTI4NTU5KVxuXAorICAgJzB4ZGVhZGJlZWYnXG5cCisiKTsKIAogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtMTI5Nyw5ICsxMzQ5LDkgQEAKIH0KIAogUHlEb2NfU1RSVkFSKGxlbl9kb2MsCi0ibGVuKG9iamVjdCkgLT4gaW50ZWdlclxuXAorImxlbihvYmplY3QpXG5cCiBcblwKLVJldHVybiB0aGUgbnVtYmVyIG9mIGl0ZW1zIG9mIGEgc2VxdWVuY2Ugb3IgbWFwcGluZy4iKTsKK1JldHVybiB0aGUgbnVtYmVyIG9mIGl0ZW1zIG9mIGEgc2VxdWVuY2Ugb3IgY29sbGVjdGlvbi4iKTsKIAogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtMTMyMiwyNiArMTM3NCwzNSBAQAogbWluX21heChQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMsIGludCBvcCkKIHsKICAgICBQeU9iamVjdCAqdiwgKml0LCAqaXRlbSwgKnZhbCwgKm1heGl0ZW0sICptYXh2YWwsICprZXlmdW5jPU5VTEw7CisgICAgUHlPYmplY3QgKmVtcHR5dHVwbGUsICpkZWZhdWx0dmFsID0gTlVMTDsKKyAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7ImtleSIsICJkZWZhdWx0IiwgTlVMTH07CiAgICAgY29uc3QgY2hhciAqbmFtZSA9IG9wID09IFB5X0xUID8gIm1pbiIgOiAibWF4IjsKKyAgICBjb25zdCBpbnQgcG9zaXRpb25hbCA9IFB5VHVwbGVfU2l6ZShhcmdzKSA+IDE7CisgICAgaW50IHJldDsKIAotICAgIGlmIChQeVR1cGxlX1NpemUoYXJncykgPiAxKQorICAgIGlmIChwb3NpdGlvbmFsKQogICAgICAgICB2ID0gYXJnczsKLSAgICBlbHNlIGlmICghUHlBcmdfVW5wYWNrVHVwbGUoYXJncywgKGNoYXIgKiluYW1lLCAxLCAxLCAmdikpCisgICAgZWxzZSBpZiAoIVB5QXJnX1VucGFja1R1cGxlKGFyZ3MsIG5hbWUsIDEsIDEsICZ2KSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBpZiAoa3dkcyAhPSBOVUxMICYmIFB5RGljdF9DaGVjayhrd2RzKSAmJiBQeURpY3RfU2l6ZShrd2RzKSkgewotICAgICAgICBrZXlmdW5jID0gUHlEaWN0X0dldEl0ZW1TdHJpbmcoa3dkcywgImtleSIpOwotICAgICAgICBpZiAoUHlEaWN0X1NpemUoa3dkcykhPTEgIHx8ICBrZXlmdW5jID09IE5VTEwpIHsKLSAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgIiVzKCkgZ290IGFuIHVuZXhwZWN0ZWQga2V5d29yZCBhcmd1bWVudCIsIG5hbWUpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICAgICAgUHlfSU5DUkVGKGtleWZ1bmMpOworICAgIGVtcHR5dHVwbGUgPSBQeVR1cGxlX05ldygwKTsKKyAgICBpZiAoZW1wdHl0dXBsZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICByZXQgPSBQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoZW1wdHl0dXBsZSwga3dkcywgInwkT08iLCBrd2xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZrZXlmdW5jLCAmZGVmYXVsdHZhbCk7CisgICAgUHlfREVDUkVGKGVtcHR5dHVwbGUpOworICAgIGlmICghcmV0KQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChwb3NpdGlvbmFsICYmIGRlZmF1bHR2YWwgIT0gTlVMTCkgeworICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgIkNhbm5vdCBzcGVjaWZ5IGEgZGVmYXVsdCBmb3IgJXMoKSB3aXRoIG11bHRpcGxlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICJwb3NpdGlvbmFsIGFyZ3VtZW50cyIsIG5hbWUpOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKICAgICBpdCA9IFB5T2JqZWN0X0dldEl0ZXIodik7CiAgICAgaWYgKGl0ID09IE5VTEwpIHsKLSAgICAgICAgUHlfWERFQ1JFRihrZXlmdW5jKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCkBAIC0xMzg1LDE0ICsxNDQ2LDE4IEBACiAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgIGdvdG8gRmFpbF9pdDsKICAgICBpZiAobWF4dmFsID09IE5VTEwpIHsKLSAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAiJXMoKSBhcmcgaXMgYW4gZW1wdHkgc2VxdWVuY2UiLCBuYW1lKTsKICAgICAgICAgYXNzZXJ0KG1heGl0ZW0gPT0gTlVMTCk7CisgICAgICAgIGlmIChkZWZhdWx0dmFsICE9IE5VTEwpIHsKKyAgICAgICAgICAgIFB5X0lOQ1JFRihkZWZhdWx0dmFsKTsKKyAgICAgICAgICAgIG1heGl0ZW0gPSBkZWZhdWx0dmFsOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIiVzKCkgYXJnIGlzIGFuIGVtcHR5IHNlcXVlbmNlIiwgbmFtZSk7CisgICAgICAgIH0KICAgICB9CiAgICAgZWxzZQogICAgICAgICBQeV9ERUNSRUYobWF4dmFsKTsKICAgICBQeV9ERUNSRUYoaXQpOwotICAgIFB5X1hERUNSRUYoa2V5ZnVuYyk7CiAgICAgcmV0dXJuIG1heGl0ZW07CiAKIEZhaWxfaXRfaXRlbV9hbmRfdmFsOgpAQCAtMTQwMyw3ICsxNDY4LDYgQEAKICAgICBQeV9YREVDUkVGKG1heHZhbCk7CiAgICAgUHlfWERFQ1JFRihtYXhpdGVtKTsKICAgICBQeV9ERUNSRUYoaXQpOwotICAgIFB5X1hERUNSRUYoa2V5ZnVuYyk7CiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTE0MTQsMTAgKzE0NzgsMTIgQEAKIH0KIAogUHlEb2NfU1RSVkFSKG1pbl9kb2MsCi0ibWluKGl0ZXJhYmxlWywga2V5PWZ1bmNdKSAtPiB2YWx1ZVxuXAotbWluKGEsIGIsIGMsIC4uLlssIGtleT1mdW5jXSkgLT4gdmFsdWVcblwKKyJtaW4oaXRlcmFibGUsICpbLCBkZWZhdWx0PW9iaiwga2V5PWZ1bmNdKSAtPiB2YWx1ZVxuXAorbWluKGFyZzEsIGFyZzIsICphcmdzLCAqWywga2V5PWZ1bmNdKSAtPiB2YWx1ZVxuXAogXG5cCi1XaXRoIGEgc2luZ2xlIGl0ZXJhYmxlIGFyZ3VtZW50LCByZXR1cm4gaXRzIHNtYWxsZXN0IGl0ZW0uXG5cCitXaXRoIGEgc2luZ2xlIGl0ZXJhYmxlIGFyZ3VtZW50LCByZXR1cm4gaXRzIHNtYWxsZXN0IGl0ZW0uIFRoZVxuXAorZGVmYXVsdCBrZXl3b3JkLW9ubHkgYXJndW1lbnQgc3BlY2lmaWVzIGFuIG9iamVjdCB0byByZXR1cm4gaWZcblwKK3RoZSBwcm92aWRlZCBpdGVyYWJsZSBpcyBlbXB0eS5cblwKIFdpdGggdHdvIG9yIG1vcmUgYXJndW1lbnRzLCByZXR1cm4gdGhlIHNtYWxsZXN0IGFyZ3VtZW50LiIpOwogCiAKQEAgLTE0MjgsMTAgKzE0OTQsMTIgQEAKIH0KIAogUHlEb2NfU1RSVkFSKG1heF9kb2MsCi0ibWF4KGl0ZXJhYmxlWywga2V5PWZ1bmNdKSAtPiB2YWx1ZVxuXAotbWF4KGEsIGIsIGMsIC4uLlssIGtleT1mdW5jXSkgLT4gdmFsdWVcblwKKyJtYXgoaXRlcmFibGUsICpbLCBkZWZhdWx0PW9iaiwga2V5PWZ1bmNdKSAtPiB2YWx1ZVxuXAorbWF4KGFyZzEsIGFyZzIsICphcmdzLCAqWywga2V5PWZ1bmNdKSAtPiB2YWx1ZVxuXAogXG5cCi1XaXRoIGEgc2luZ2xlIGl0ZXJhYmxlIGFyZ3VtZW50LCByZXR1cm4gaXRzIGxhcmdlc3QgaXRlbS5cblwKK1dpdGggYSBzaW5nbGUgaXRlcmFibGUgYXJndW1lbnQsIHJldHVybiBpdHMgYmlnZ2VzdCBpdGVtLiBUaGVcblwKK2RlZmF1bHQga2V5d29yZC1vbmx5IGFyZ3VtZW50IHNwZWNpZmllcyBhbiBvYmplY3QgdG8gcmV0dXJuIGlmXG5cCit0aGUgcHJvdmlkZWQgaXRlcmFibGUgaXMgZW1wdHkuXG5cCiBXaXRoIHR3byBvciBtb3JlIGFyZ3VtZW50cywgcmV0dXJuIHRoZSBsYXJnZXN0IGFyZ3VtZW50LiIpOwogCiAKQEAgLTE0NDQsNyArMTUxMiwxMSBAQAogUHlEb2NfU1RSVkFSKG9jdF9kb2MsCiAib2N0KG51bWJlcikgLT4gc3RyaW5nXG5cCiBcblwKLVJldHVybiB0aGUgb2N0YWwgcmVwcmVzZW50YXRpb24gb2YgYW4gaW50ZWdlci4iKTsKK1JldHVybiB0aGUgb2N0YWwgcmVwcmVzZW50YXRpb24gb2YgYW4gaW50ZWdlci5cblwKK1xuXAorICAgPj4+IG9jdCgzNDIzOTEpXG5cCisgICAnMG8xMjM0NTY3J1xuXAorIik7CiAKIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTE1MzAsNyArMTYwMiwxMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt3bGlzdCwgJnNlcCwgJmVuZCwgJmZpbGUsICZmbHVzaCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmIChmaWxlID09IE5VTEwgfHwgZmlsZSA9PSBQeV9Ob25lKSB7Ci0gICAgICAgIGZpbGUgPSBQeVN5c19HZXRPYmplY3QoInN0ZG91dCIpOworICAgICAgICBmaWxlID0gX1B5U3lzX0dldE9iamVjdElkKCZQeUlkX3N0ZG91dCk7CisgICAgICAgIGlmIChmaWxlID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsICJsb3N0IHN5cy5zdGRvdXQiKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisKICAgICAgICAgLyogc3lzLnN0ZG91dCBtYXkgYmUgTm9uZSB3aGVuIEZJTEUqIHN0ZG91dCBpc24ndCBjb25uZWN0ZWQgKi8KICAgICAgICAgaWYgKGZpbGUgPT0gUHlfTm9uZSkKICAgICAgICAgICAgIFB5X1JFVFVSTl9OT05FOwpAQCAtMTU4NCw3ICsxNjYxLDcgQEAKICAgICAgICAgaWYgKGRvX2ZsdXNoID09IC0xKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIGVsc2UgaWYgKGRvX2ZsdXNoKSB7Ci0gICAgICAgICAgICB0bXAgPSBQeU9iamVjdF9DYWxsTWV0aG9kKGZpbGUsICJmbHVzaCIsICIiKTsKKyAgICAgICAgICAgIHRtcCA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoZmlsZSwgJlB5SWRfZmx1c2gsICIiKTsKICAgICAgICAgICAgIGlmICh0bXAgPT0gTlVMTCkKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIGVsc2UKQEAgLTE2MTAsOSArMTY4Nyw5IEBACiBidWlsdGluX2lucHV0KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBQeU9iamVjdCAqcHJvbXB0YXJnID0gTlVMTDsKLSAgICBQeU9iamVjdCAqZmluID0gUHlTeXNfR2V0T2JqZWN0KCJzdGRpbiIpOwotICAgIFB5T2JqZWN0ICpmb3V0ID0gUHlTeXNfR2V0T2JqZWN0KCJzdGRvdXQiKTsKLSAgICBQeU9iamVjdCAqZmVyciA9IFB5U3lzX0dldE9iamVjdCgic3RkZXJyIik7CisgICAgUHlPYmplY3QgKmZpbiA9IF9QeVN5c19HZXRPYmplY3RJZCgmUHlJZF9zdGRpbik7CisgICAgUHlPYmplY3QgKmZvdXQgPSBfUHlTeXNfR2V0T2JqZWN0SWQoJlB5SWRfc3Rkb3V0KTsKKyAgICBQeU9iamVjdCAqZmVyciA9IF9QeVN5c19HZXRPYmplY3RJZCgmUHlJZF9zdGRlcnIpOwogICAgIFB5T2JqZWN0ICp0bXA7CiAgICAgbG9uZyBmZDsKICAgICBpbnQgdHR5OwpAQCAtMTY2Miw4ICsxNzM5LDEwIEBACiAgICAgfQogICAgIGlmICh0dHkpIHsKICAgICAgICAgdG1wID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZChmb3V0LCAmUHlJZF9maWxlbm8sICIiKTsKLSAgICAgICAgaWYgKHRtcCA9PSBOVUxMKQorICAgICAgICBpZiAodG1wID09IE5VTEwpIHsKICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgICAgICAgICB0dHkgPSAwOworICAgICAgICB9CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgZmQgPSBQeUxvbmdfQXNMb25nKHRtcCk7CiAgICAgICAgICAgICBQeV9ERUNSRUYodG1wKTsKQEAgLTE2ODMsOCArMTc2Miw2IEBACiAgICAgICAgIGNoYXIgKnN0ZGluX2VuY29kaW5nX3N0ciwgKnN0ZGluX2Vycm9yc19zdHI7CiAgICAgICAgIFB5T2JqZWN0ICpyZXN1bHQ7CiAgICAgICAgIHNpemVfdCBsZW47Ci0gICAgICAgIF9QeV9JREVOVElGSUVSKGVuY29kaW5nKTsKLSAgICAgICAgX1B5X0lERU5USUZJRVIoZXJyb3JzKTsKIAogICAgICAgICBzdGRpbl9lbmNvZGluZyA9IF9QeU9iamVjdF9HZXRBdHRySWQoZmluLCAmUHlJZF9lbmNvZGluZyk7CiAgICAgICAgIHN0ZGluX2Vycm9ycyA9IF9QeU9iamVjdF9HZXRBdHRySWQoZmluLCAmUHlJZF9lcnJvcnMpOwpAQCAtMTgxMCwxMCArMTg4Nyw5IEBACiBzdGF0aWMgUHlPYmplY3QgKgogYnVpbHRpbl9yb3VuZChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQogewotICAgIHN0YXRpYyBQeU9iamVjdCAqcm91bmRfc3RyID0gTlVMTDsKICAgICBQeU9iamVjdCAqbmRpZ2l0cyA9IE5VTEw7CiAgICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJudW1iZXIiLCAibmRpZ2l0cyIsIDB9OwotICAgIFB5T2JqZWN0ICpudW1iZXIsICpyb3VuZDsKKyAgICBQeU9iamVjdCAqbnVtYmVyLCAqcm91bmQsICpyZXN1bHQ7CiAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiT3xPOnJvdW5kIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrd2xpc3QsICZudW1iZXIsICZuZGlnaXRzKSkKQEAgLTE4MjQsMjQgKzE5MDAsMjEgQEAKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIGlmIChyb3VuZF9zdHIgPT0gTlVMTCkgewotICAgICAgICByb3VuZF9zdHIgPSBQeVVuaWNvZGVfSW50ZXJuRnJvbVN0cmluZygiX19yb3VuZF9fIik7Ci0gICAgICAgIGlmIChyb3VuZF9zdHIgPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIHJvdW5kID0gX1B5VHlwZV9Mb29rdXAoUHlfVFlQRShudW1iZXIpLCByb3VuZF9zdHIpOworICAgIHJvdW5kID0gX1B5T2JqZWN0X0xvb2t1cFNwZWNpYWwobnVtYmVyLCAmUHlJZF9fX3JvdW5kX18pOwogICAgIGlmIChyb3VuZCA9PSBOVUxMKSB7Ci0gICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAidHlwZSAlLjEwMHMgZG9lc24ndCBkZWZpbmUgX19yb3VuZF9fIG1ldGhvZCIsCi0gICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKG51bWJlciktPnRwX25hbWUpOworICAgICAgICBpZiAoIVB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlICUuMTAwcyBkb2Vzbid0IGRlZmluZSBfX3JvdW5kX18gbWV0aG9kIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKG51bWJlciktPnRwX25hbWUpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKICAgICBpZiAobmRpZ2l0cyA9PSBOVUxMKQotICAgICAgICByZXR1cm4gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKHJvdW5kLCAiTyIsIG51bWJlcik7CisgICAgICAgIHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3Mocm91bmQsIE5VTEwpOwogICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIFB5T2JqZWN0X0NhbGxGdW5jdGlvbihyb3VuZCwgIk9PIiwgbnVtYmVyLCBuZGlnaXRzKTsKKyAgICAgICAgcmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyhyb3VuZCwgbmRpZ2l0cywgTlVMTCk7CisgICAgUHlfREVDUkVGKHJvdW5kKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBQeURvY19TVFJWQVIocm91bmRfZG9jLApAQCAtMTg1OSw3ICsxOTMyLDYgQEAKICAgICBQeU9iamVjdCAqY2FsbGFibGU7CiAgICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJpdGVyYWJsZSIsICJrZXkiLCAicmV2ZXJzZSIsIDB9OwogICAgIGludCByZXZlcnNlOwotICAgIF9QeV9JREVOVElGSUVSKHNvcnQpOwogCiAgICAgLyogYXJncyAxLTMgc2hvdWxkIG1hdGNoIGxpc3Rzb3J0IGluIE9iamVjdHMvbGlzdG9iamVjdC5jICovCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgIk98T2k6c29ydGVkIiwKQEAgLTE5MDcsMTYgKzE5NzksMTEgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgaWYgKHYgPT0gTlVMTCkgewogICAgICAgICBkID0gUHlFdmFsX0dldExvY2FscygpOwotICAgICAgICBpZiAoZCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBpZiAoIVB5RXJyX09jY3VycmVkKCkpCi0gICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1N5c3RlbUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFycygpOiBubyBsb2NhbHMhPyIpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIFB5X0lOQ1JFRihkKTsKKyAgICAgICAgaWYgKGQgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBQeV9JTkNSRUYoZCk7CiAgICAgfQogICAgIGVsc2UgewotICAgICAgICBfUHlfSURFTlRJRklFUihfX2RpY3RfXyk7CiAgICAgICAgIGQgPSBfUHlPYmplY3RfR2V0QXR0cklkKHYsICZQeUlkX19fZGljdF9fKTsKICAgICAgICAgaWYgKGQgPT0gTlVMTCkgewogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKQEAgLTI0MTMsNiArMjQ4MCwxMiBAQAogX1B5QnVpbHRpbl9Jbml0KHZvaWQpCiB7CiAgICAgUHlPYmplY3QgKm1vZCwgKmRpY3QsICpkZWJ1ZzsKKworICAgIGlmIChQeVR5cGVfUmVhZHkoJlB5RmlsdGVyX1R5cGUpIDwgMCB8fAorICAgICAgICBQeVR5cGVfUmVhZHkoJlB5TWFwX1R5cGUpIDwgMCB8fAorICAgICAgICBQeVR5cGVfUmVhZHkoJlB5WmlwX1R5cGUpIDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKICAgICBtb2QgPSBQeU1vZHVsZV9DcmVhdGUoJmJ1aWx0aW5zbW9kdWxlKTsKICAgICBpZiAobW9kID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwpkaWZmIC0tZ2l0IGEvUHl0aG9uL2NldmFsLmMgYi9QeXRob24vY2V2YWwuYwppbmRleCAyYjE2MTkxLi43YTBjYjdmIDEwMDY0NAotLS0gYS9QeXRob24vY2V2YWwuYworKysgYi9QeXRob24vY2V2YWwuYwpAQCAtMzcsNyArMzcsNyBAQAogc3RhdGljIHZvaWQKIHBwY19nZXRjb3VudGVyKHVpbnQ2NCAqdikKIHsKLSAgICByZWdpc3RlciB1bnNpZ25lZCBsb25nIHRidSwgdGIsIHRidTI7CisgICAgdW5zaWduZWQgbG9uZyB0YnUsIHRiLCB0YnUyOwogCiAgIGxvb3A6CiAgICAgYXNtIHZvbGF0aWxlICgibWZ0YnUgJTAiIDogIj1yIiAodGJ1KSApOwpAQCAtNjUsOSArNjUsMTEgQEAKICAgIGV2ZW4gaW4gNjQtYml0IG1vZGUsIHdlIG5lZWQgdG8gdXNlICJhIiBhbmQgImQiIGZvciB0aGUgbG93ZXIgYW5kIHVwcGVyCiAgICAzMi1iaXQgcGllY2VzIG9mIHRoZSByZXN1bHQuICovCiAKLSNkZWZpbmUgUkVBRF9USU1FU1RBTVAodmFsKSBcCi0gICAgX19hc21fXyBfX3ZvbGF0aWxlX18oInJkdHNjIiA6IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiPWEiICgoKGludCopJih2YWwpKVswXSksICI9ZCIgKCgoaW50KikmKHZhbCkpWzFdKSk7CisjZGVmaW5lIFJFQURfVElNRVNUQU1QKHZhbCkgZG8geyAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB1bnNpZ25lZCBpbnQgaCwgbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCJyZHRzYyIgOiAiPWEiIChsKSwgIj1kIiAoaCkpOyBcCisgICAgKHZhbCkgPSAoKHVpbnQ2NClsKSB8ICgoKHVpbnQ2NCloKSA8PCAzMik7ICAgICAgICAgIFwKKyAgICB9IHdoaWxlKDApCiAKIAogI2Vsc2UKQEAgLTEyMywxMyArMTI1LDE2IEBACiBzdGF0aWMgaW50IGxsdHJhY2U7CiBzdGF0aWMgaW50IHBydHJhY2UoUHlPYmplY3QgKiwgY2hhciAqKTsKICNlbmRpZgotc3RhdGljIGludCBjYWxsX3RyYWNlKFB5X3RyYWNlZnVuYywgUHlPYmplY3QgKiwgUHlGcmFtZU9iamVjdCAqLAorc3RhdGljIGludCBjYWxsX3RyYWNlKFB5X3RyYWNlZnVuYywgUHlPYmplY3QgKiwKKyAgICAgICAgICAgICAgICAgICAgICBQeVRocmVhZFN0YXRlICosIFB5RnJhbWVPYmplY3QgKiwKICAgICAgICAgICAgICAgICAgICAgICBpbnQsIFB5T2JqZWN0ICopOwogc3RhdGljIGludCBjYWxsX3RyYWNlX3Byb3RlY3RlZChQeV90cmFjZWZ1bmMsIFB5T2JqZWN0ICosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5RnJhbWVPYmplY3QgKiwgaW50LCBQeU9iamVjdCAqKTsKLXN0YXRpYyB2b2lkIGNhbGxfZXhjX3RyYWNlKFB5X3RyYWNlZnVuYywgUHlPYmplY3QgKiwgUHlGcmFtZU9iamVjdCAqKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlUaHJlYWRTdGF0ZSAqLCBQeUZyYW1lT2JqZWN0ICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCwgUHlPYmplY3QgKik7CitzdGF0aWMgdm9pZCBjYWxsX2V4Y190cmFjZShQeV90cmFjZWZ1bmMsIFB5T2JqZWN0ICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVRocmVhZFN0YXRlICosIFB5RnJhbWVPYmplY3QgKik7CiBzdGF0aWMgaW50IG1heWJlX2NhbGxfbGluZV90cmFjZShQeV90cmFjZWZ1bmMsIFB5T2JqZWN0ICosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUZyYW1lT2JqZWN0ICosIGludCAqLCBpbnQgKiwgaW50ICopOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlUaHJlYWRTdGF0ZSAqLCBQeUZyYW1lT2JqZWN0ICosIGludCAqLCBpbnQgKiwgaW50ICopOwogCiBzdGF0aWMgUHlPYmplY3QgKiBjbXBfb3V0Y29tZShpbnQsIFB5T2JqZWN0ICosIFB5T2JqZWN0ICopOwogc3RhdGljIFB5T2JqZWN0ICogaW1wb3J0X2Zyb20oUHlPYmplY3QgKiwgUHlPYmplY3QgKik7CkBAIC0xNDIsOCArMTQ3LDYgQEAKIAogI2RlZmluZSBOQU1FX0VSUk9SX01TRyBcCiAgICAgIm5hbWUgJyUuMjAwcycgaXMgbm90IGRlZmluZWQiCi0jZGVmaW5lIEdMT0JBTF9OQU1FX0VSUk9SX01TRyBcCi0gICAgImdsb2JhbCBuYW1lICclLjIwMHMnIGlzIG5vdCBkZWZpbmVkIgogI2RlZmluZSBVTkJPVU5ETE9DQUxfRVJST1JfTVNHIFwKICAgICAibG9jYWwgdmFyaWFibGUgJyUuMjAwcycgcmVmZXJlbmNlZCBiZWZvcmUgYXNzaWdubWVudCIKICNkZWZpbmUgVU5CT1VOREZSRUVfRVJST1JfTVNHIFwKQEAgLTM2NCwyOSArMzY3LDI4IEBACiAgICAgZHJvcF9naWwodHN0YXRlKTsKIH0KIAotLyogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBQeU9TX0FmdGVyRm9yayB0byBlbnN1cmUgdGhhdCBuZXdseQotICAgY3JlYXRlZCBjaGlsZCBwcm9jZXNzZXMgZG9uJ3QgaG9sZCBsb2NrcyByZWZlcnJpbmcgdG8gdGhyZWFkcyB3aGljaAotICAgYXJlIG5vdCBydW5uaW5nIGluIHRoZSBjaGlsZCBwcm9jZXNzLiAgKFRoaXMgY291bGQgYWxzbyBiZSBkb25lIHVzaW5nCi0gICBwdGhyZWFkX2F0Zm9yayBtZWNoYW5pc20sIGF0IGxlYXN0IGZvciB0aGUgcHRocmVhZHMgaW1wbGVtZW50YXRpb24uKSAqLworLyogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBQeU9TX0FmdGVyRm9yayB0byBkZXN0cm95IGFsbCB0aHJlYWRzIHdoaWNoIGFyZQorICogbm90IHJ1bm5pbmcgaW4gdGhlIGNoaWxkIHByb2Nlc3MsIGFuZCBjbGVhciBpbnRlcm5hbCBsb2NrcyB3aGljaCBtaWdodCBiZQorICogaGVsZCBieSB0aG9zZSB0aHJlYWRzLiAoVGhpcyBjb3VsZCBhbHNvIGJlIGRvbmUgdXNpbmcgcHRocmVhZF9hdGZvcmsKKyAqIG1lY2hhbmlzbSwgYXQgbGVhc3QgZm9yIHRoZSBwdGhyZWFkcyBpbXBsZW1lbnRhdGlvbi4pICovCiAKIHZvaWQKIFB5RXZhbF9SZUluaXRUaHJlYWRzKHZvaWQpCiB7CiAgICAgX1B5X0lERU5USUZJRVIoX2FmdGVyX2ZvcmspOwogICAgIFB5T2JqZWN0ICp0aHJlYWRpbmcsICpyZXN1bHQ7Ci0gICAgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlID0gUHlUaHJlYWRTdGF0ZV9HRVQoKTsKKyAgICBQeVRocmVhZFN0YXRlICpjdXJyZW50X3RzdGF0ZSA9IFB5VGhyZWFkU3RhdGVfR0VUKCk7CiAKICAgICBpZiAoIWdpbF9jcmVhdGVkKCkpCiAgICAgICAgIHJldHVybjsKICAgICByZWNyZWF0ZV9naWwoKTsKICAgICBwZW5kaW5nX2xvY2sgPSBQeVRocmVhZF9hbGxvY2F0ZV9sb2NrKCk7Ci0gICAgdGFrZV9naWwodHN0YXRlKTsKKyAgICB0YWtlX2dpbChjdXJyZW50X3RzdGF0ZSk7CiAgICAgbWFpbl90aHJlYWQgPSBQeVRocmVhZF9nZXRfdGhyZWFkX2lkZW50KCk7CiAKICAgICAvKiBVcGRhdGUgdGhlIHRocmVhZGluZyBtb2R1bGUgd2l0aCB0aGUgbmV3IHN0YXRlLgogICAgICAqLwotICAgIHRzdGF0ZSA9IFB5VGhyZWFkU3RhdGVfR0VUKCk7Ci0gICAgdGhyZWFkaW5nID0gUHlNYXBwaW5nX0dldEl0ZW1TdHJpbmcodHN0YXRlLT5pbnRlcnAtPm1vZHVsZXMsCisgICAgdGhyZWFkaW5nID0gUHlNYXBwaW5nX0dldEl0ZW1TdHJpbmcoY3VycmVudF90c3RhdGUtPmludGVycC0+bW9kdWxlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGhyZWFkaW5nIik7CiAgICAgaWYgKHRocmVhZGluZyA9PSBOVUxMKSB7CiAgICAgICAgIC8qIHRocmVhZGluZyBub3QgaW1wb3J0ZWQgKi8KQEAgLTM5OSw2ICs0MDEsOSBAQAogICAgIGVsc2UKICAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CiAgICAgUHlfREVDUkVGKHRocmVhZGluZyk7CisKKyAgICAvKiBEZXN0cm95IGFsbCB0aHJlYWRzIGV4Y2VwdCB0aGUgY3VycmVudCBvbmUgKi8KKyAgICBfUHlUaHJlYWRTdGF0ZV9EZWxldGVFeGNlcHQoY3VycmVudF90c3RhdGUpOwogfQogCiAjZWxzZQpAQCAtNzA1LDcgKzcxMCw3IEBACiAgICB0byBndWFyYW50ZWUgdGhhdCBfUHlfQ2hlY2tSZWN1cnNpdmVDYWxsKCkgaXMgcmVndWxhcmx5IGNhbGxlZC4KICAgIFdpdGhvdXQgVVNFX1NUQUNLQ0hFQ0ssIHRoZXJlIGlzIG5vIG5lZWQgZm9yIHRoaXMuICovCiBpbnQKLV9QeV9DaGVja1JlY3Vyc2l2ZUNhbGwoY2hhciAqd2hlcmUpCitfUHlfQ2hlY2tSZWN1cnNpdmVDYWxsKGNvbnN0IGNoYXIgKndoZXJlKQogewogICAgIFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSA9IFB5VGhyZWFkU3RhdGVfR0VUKCk7CiAKQEAgLTc0Miw3ICs3NDcsNiBAQAogZW51bSB3aHlfY29kZSB7CiAgICAgICAgIFdIWV9OT1QgPSAgICAgICAweDAwMDEsIC8qIE5vIGVycm9yICovCiAgICAgICAgIFdIWV9FWENFUFRJT04gPSAweDAwMDIsIC8qIEV4Y2VwdGlvbiBvY2N1cnJlZCAqLwotICAgICAgICBXSFlfUkVSQUlTRSA9ICAgMHgwMDA0LCAvKiBFeGNlcHRpb24gcmUtcmFpc2VkIGJ5ICdmaW5hbGx5JyAqLwogICAgICAgICBXSFlfUkVUVVJOID0gICAgMHgwMDA4LCAvKiAncmV0dXJuJyBzdGF0ZW1lbnQgKi8KICAgICAgICAgV0hZX0JSRUFLID0gICAgIDB4MDAxMCwgLyogJ2JyZWFrJyBzdGF0ZW1lbnQgKi8KICAgICAgICAgV0hZX0NPTlRJTlVFID0gIDB4MDAyMCwgLyogJ2NvbnRpbnVlJyBzdGF0ZW1lbnQgKi8KQEAgLTc1Myw3ICs3NTcsNyBAQAogc3RhdGljIHZvaWQgc2F2ZV9leGNfc3RhdGUoUHlUaHJlYWRTdGF0ZSAqLCBQeUZyYW1lT2JqZWN0ICopOwogc3RhdGljIHZvaWQgc3dhcF9leGNfc3RhdGUoUHlUaHJlYWRTdGF0ZSAqLCBQeUZyYW1lT2JqZWN0ICopOwogc3RhdGljIHZvaWQgcmVzdG9yZV9hbmRfY2xlYXJfZXhjX3N0YXRlKFB5VGhyZWFkU3RhdGUgKiwgUHlGcmFtZU9iamVjdCAqKTsKLXN0YXRpYyBlbnVtIHdoeV9jb2RlIGRvX3JhaXNlKFB5T2JqZWN0ICosIFB5T2JqZWN0ICopOworc3RhdGljIGludCBkb19yYWlzZShQeU9iamVjdCAqLCBQeU9iamVjdCAqKTsKIHN0YXRpYyBpbnQgdW5wYWNrX2l0ZXJhYmxlKFB5T2JqZWN0ICosIGludCwgaW50LCBQeU9iamVjdCAqKik7CiAKIC8qIFJlY29yZHMgd2hldGhlciB0cmFjaW5nIGlzIG9uIGZvciBhbnkgdGhyZWFkLiAgQ291bnRzIHRoZSBudW1iZXIgb2YKQEAgLTc5MywxOCArNzk3LDEyIEBACiAjaWZkZWYgRFhQQUlSUwogICAgIGludCBsYXN0b3Bjb2RlID0gMDsKICNlbmRpZgotICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICoqc3RhY2tfcG9pbnRlcjsgIC8qIE5leHQgZnJlZSBzbG90IGluIHZhbHVlIHN0YWNrICovCi0gICAgcmVnaXN0ZXIgdW5zaWduZWQgY2hhciAqbmV4dF9pbnN0cjsKLSAgICByZWdpc3RlciBpbnQgb3Bjb2RlOyAgICAgICAgLyogQ3VycmVudCBvcGNvZGUgKi8KLSAgICByZWdpc3RlciBpbnQgb3Bhcmc7ICAgICAgICAgLyogQ3VycmVudCBvcGNvZGUgYXJndW1lbnQsIGlmIGFueSAqLwotICAgIHJlZ2lzdGVyIGVudW0gd2h5X2NvZGUgd2h5OyAvKiBSZWFzb24gZm9yIGJsb2NrIHN0YWNrIHVud2luZCAqLwotICAgIHJlZ2lzdGVyIGludCBlcnI7ICAgICAgICAgICAvKiBFcnJvciBzdGF0dXMgLS0gbm9uemVybyBpZiBlcnJvciAqLwotICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICp4OyAgICAgICAvKiBSZXN1bHQgb2JqZWN0IC0tIE5VTEwgaWYgZXJyb3IgKi8KLSAgICByZWdpc3RlciBQeU9iamVjdCAqdjsgICAgICAgLyogVGVtcG9yYXJ5IG9iamVjdHMgcG9wcGVkIG9mZiBzdGFjayAqLwotICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICp3OwotICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICp1OwotICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICp0OwotICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICoqZmFzdGxvY2FscywgKipmcmVldmFyczsKKyAgICBQeU9iamVjdCAqKnN0YWNrX3BvaW50ZXI7ICAvKiBOZXh0IGZyZWUgc2xvdCBpbiB2YWx1ZSBzdGFjayAqLworICAgIHVuc2lnbmVkIGNoYXIgKm5leHRfaW5zdHI7CisgICAgaW50IG9wY29kZTsgICAgICAgIC8qIEN1cnJlbnQgb3Bjb2RlICovCisgICAgaW50IG9wYXJnOyAgICAgICAgIC8qIEN1cnJlbnQgb3Bjb2RlIGFyZ3VtZW50LCBpZiBhbnkgKi8KKyAgICBlbnVtIHdoeV9jb2RlIHdoeTsgLyogUmVhc29uIGZvciBibG9jayBzdGFjayB1bndpbmQgKi8KKyAgICBQeU9iamVjdCAqKmZhc3Rsb2NhbHMsICoqZnJlZXZhcnM7CiAgICAgUHlPYmplY3QgKnJldHZhbCA9IE5VTEw7ICAgICAgICAgICAgLyogUmV0dXJuIHZhbHVlICovCiAgICAgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlID0gUHlUaHJlYWRTdGF0ZV9HRVQoKTsKICAgICBQeUNvZGVPYmplY3QgKmNvOwpAQCAtMTE0Myw3ICsxMTQxLDcgQEAKICAgICAgICAgICAgICAgIHdoZW5ldmVyIGFuIGV4Y2VwdGlvbiBpcyBkZXRlY3RlZC4gKi8KICAgICAgICAgICAgIGlmIChjYWxsX3RyYWNlX3Byb3RlY3RlZCh0c3RhdGUtPmNfdHJhY2VmdW5jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzdGF0ZS0+Y190cmFjZW9iaiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmLCBQeVRyYWNlX0NBTEwsIFB5X05vbmUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHN0YXRlLCBmLCBQeVRyYWNlX0NBTEwsIFB5X05vbmUpKSB7CiAgICAgICAgICAgICAgICAgLyogVHJhY2UgZnVuY3Rpb24gcmFpc2VkIGFuIGVycm9yICovCiAgICAgICAgICAgICAgICAgZ290byBleGl0X2V2YWxfZnJhbWU7CiAgICAgICAgICAgICB9CkBAIC0xMTUzLDcgKzExNTEsNyBAQAogICAgICAgICAgICAgICAgcmV0dXJuIGl0c2VsZiBhbmQgaXNuJ3QgY2FsbGVkIGZvciAibGluZSIgZXZlbnRzICovCiAgICAgICAgICAgICBpZiAoY2FsbF90cmFjZV9wcm90ZWN0ZWQodHN0YXRlLT5jX3Byb2ZpbGVmdW5jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzdGF0ZS0+Y19wcm9maWxlb2JqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYsIFB5VHJhY2VfQ0FMTCwgUHlfTm9uZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0c3RhdGUsIGYsIFB5VHJhY2VfQ0FMTCwgUHlfTm9uZSkpIHsKICAgICAgICAgICAgICAgICAvKiBQcm9maWxlIGZ1bmN0aW9uIHJhaXNlZCBhbiBlcnJvciAqLwogICAgICAgICAgICAgICAgIGdvdG8gZXhpdF9ldmFsX2ZyYW1lOwogICAgICAgICAgICAgfQpAQCAtMTE4OSw5ICsxMTg3LDEwIEBACiAgICAgc3RhY2tfcG9pbnRlciA9IGYtPmZfc3RhY2t0b3A7CiAgICAgYXNzZXJ0KHN0YWNrX3BvaW50ZXIgIT0gTlVMTCk7CiAgICAgZi0+Zl9zdGFja3RvcCA9IE5VTEw7ICAgICAgIC8qIHJlbWFpbnMgTlVMTCB1bmxlc3MgeWllbGQgc3VzcGVuZHMgZnJhbWUgKi8KKyAgICBmLT5mX2V4ZWN1dGluZyA9IDE7CiAKLSAgICBpZiAoY28tPmNvX2ZsYWdzICYgQ09fR0VORVJBVE9SICYmICF0aHJvd2ZsYWcpIHsKLSAgICAgICAgaWYgKGYtPmZfZXhjX3R5cGUgIT0gTlVMTCAmJiBmLT5mX2V4Y190eXBlICE9IFB5X05vbmUpIHsKKyAgICBpZiAoY28tPmNvX2ZsYWdzICYgQ09fR0VORVJBVE9SKSB7CisgICAgICAgIGlmICghdGhyb3dmbGFnICYmIGYtPmZfZXhjX3R5cGUgIT0gTlVMTCAmJiBmLT5mX2V4Y190eXBlICE9IFB5X05vbmUpIHsKICAgICAgICAgICAgIC8qIFdlIHdlcmUgaW4gYW4gZXhjZXB0IGhhbmRsZXIgd2hlbiB3ZSBsZWZ0LAogICAgICAgICAgICAgICAgcmVzdG9yZSB0aGUgZXhjZXB0aW9uIHN0YXRlIHdoaWNoIHdhcyBwdXQgYXNpZGUKICAgICAgICAgICAgICAgIChzZWUgWUlFTERfVkFMVUUpLiAqLwpAQCAtMTIwNiwxNCArMTIwNSwxNiBAQAogI2VuZGlmCiAKICAgICB3aHkgPSBXSFlfTk9UOwotICAgIGVyciA9IDA7Ci0gICAgeCA9IFB5X05vbmU7ICAgICAgICAvKiBOb3QgYSByZWZlcmVuY2UsIGp1c3QgYW55dGhpbmcgbm9uLU5VTEwgKi8KLSAgICB3ID0gTlVMTDsKIAotICAgIGlmICh0aHJvd2ZsYWcpIHsgLyogc3VwcG9ydCBmb3IgZ2VuZXJhdG9yLnRocm93KCkgKi8KLSAgICAgICAgd2h5ID0gV0hZX0VYQ0VQVElPTjsKLSAgICAgICAgZ290byBvbl9lcnJvcjsKLSAgICB9CisgICAgaWYgKHRocm93ZmxhZykgLyogc3VwcG9ydCBmb3IgZ2VuZXJhdG9yLnRocm93KCkgKi8KKyAgICAgICAgZ290byBlcnJvcjsKKworI2lmZGVmIFB5X0RFQlVHCisgICAgLyogUHlFdmFsX0V2YWxGcmFtZUV4KCkgbXVzdCBub3QgYmUgY2FsbGVkIHdpdGggYW4gZXhjZXB0aW9uIHNldCwKKyAgICAgICBiZWNhdXNlIGl0IG1heSBjbGVhciBpdCAoZGlyZWN0bHkgb3IgaW5kaXJlY3RseSkgYW5kIHNvIHRoZQorICAgICAgIGNhbGxlciBsb3NlcyBpdHMgZXhjZXB0aW9uICovCisgICAgYXNzZXJ0KCFQeUVycl9PY2N1cnJlZCgpKTsKKyNlbmRpZgogCiAgICAgZm9yICg7OykgewogI2lmZGVmIFdJVEhfVFNDCkBAIC0xMjM1LDYgKzEyMzYsNyBAQAogI2VuZGlmCiAgICAgICAgIGFzc2VydChzdGFja19wb2ludGVyID49IGYtPmZfdmFsdWVzdGFjayk7IC8qIGVsc2UgdW5kZXJmbG93ICovCiAgICAgICAgIGFzc2VydChTVEFDS19MRVZFTCgpIDw9IGNvLT5jb19zdGFja3NpemUpOyAgLyogZWxzZSBvdmVyZmxvdyAqLworICAgICAgICBhc3NlcnQoIVB5RXJyX09jY3VycmVkKCkpOwogCiAgICAgICAgIC8qIERvIHBlcmlvZGljIHRoaW5ncy4gIERvaW5nIHRoaXMgZXZlcnkgdGltZSB0aHJvdWdoCiAgICAgICAgICAgIHRoZSBsb29wIHdvdWxkIGFkZCB0b28gbXVjaCBvdmVyaGVhZCwgc28gd2UgZG8gaXQKQEAgLTEyNTAsMTUgKzEyNTIsMTIgQEAKICAgICAgICAgICAgICAgICAgICBhIHRyeTogZmluYWxseTogYmxvY2sgdW5pbnRlcnJ1cHRpYmxlLiAqLwogICAgICAgICAgICAgICAgIGdvdG8gZmFzdF9uZXh0X29wY29kZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRzdGF0ZS0+dGlja19jb3VudGVyKys7CiAjaWZkZWYgV0lUSF9UU0MKICAgICAgICAgICAgIHRpY2tlZCA9IDE7CiAjZW5kaWYKICAgICAgICAgICAgIGlmIChfUHlfYXRvbWljX2xvYWRfcmVsYXhlZCgmcGVuZGluZ2NhbGxzX3RvX2RvKSkgewotICAgICAgICAgICAgICAgIGlmIChQeV9NYWtlUGVuZGluZ0NhbGxzKCkgPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHdoeSA9IFdIWV9FWENFUFRJT047Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gb25fZXJyb3I7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChQeV9NYWtlUGVuZGluZ0NhbGxzKCkgPCAwKQorICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgfQogI2lmZGVmIFdJVEhfVEhSRUFECiAgICAgICAgICAgICBpZiAoX1B5X2F0b21pY19sb2FkX3JlbGF4ZWQoJmdpbF9kcm9wX3JlcXVlc3QpKSB7CkBAIC0xMjcwLDE5ICsxMjY5LDI1IEBACiAgICAgICAgICAgICAgICAgLyogT3RoZXIgdGhyZWFkcyBtYXkgcnVuIG5vdyAqLwogCiAgICAgICAgICAgICAgICAgdGFrZV9naWwodHN0YXRlKTsKKworICAgICAgICAgICAgICAgIC8qIENoZWNrIGlmIHdlIHNob3VsZCBtYWtlIGEgcXVpY2sgZXhpdC4gKi8KKyAgICAgICAgICAgICAgICBpZiAoX1B5X0ZpbmFsaXppbmcgJiYgX1B5X0ZpbmFsaXppbmcgIT0gdHN0YXRlKSB7CisgICAgICAgICAgICAgICAgICAgIGRyb3BfZ2lsKHRzdGF0ZSk7CisgICAgICAgICAgICAgICAgICAgIFB5VGhyZWFkX2V4aXRfdGhyZWFkKCk7CisgICAgICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAgICAgaWYgKFB5VGhyZWFkU3RhdGVfU3dhcCh0c3RhdGUpICE9IE5VTEwpCiAgICAgICAgICAgICAgICAgICAgIFB5X0ZhdGFsRXJyb3IoImNldmFsOiBvcnBoYW4gdHN0YXRlIik7CiAgICAgICAgICAgICB9CiAjZW5kaWYKICAgICAgICAgICAgIC8qIENoZWNrIGZvciBhc3luY2hyb25vdXMgZXhjZXB0aW9ucy4gKi8KICAgICAgICAgICAgIGlmICh0c3RhdGUtPmFzeW5jX2V4YyAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgeCA9IHRzdGF0ZS0+YXN5bmNfZXhjOworICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpleGMgPSB0c3RhdGUtPmFzeW5jX2V4YzsKICAgICAgICAgICAgICAgICB0c3RhdGUtPmFzeW5jX2V4YyA9IE5VTEw7CiAgICAgICAgICAgICAgICAgVU5TSUdOQUxfQVNZTkNfRVhDKCk7Ci0gICAgICAgICAgICAgICAgUHlFcnJfU2V0Tm9uZSh4KTsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYoeCk7Ci0gICAgICAgICAgICAgICAgd2h5ID0gV0hZX0VYQ0VQVElPTjsKLSAgICAgICAgICAgICAgICBnb3RvIG9uX2Vycm9yOworICAgICAgICAgICAgICAgIFB5RXJyX1NldE5vbmUoZXhjKTsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZXhjKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKQEAgLTEyOTMsMjQgKzEyOTgsMjQgQEAKIAogICAgICAgICBpZiAoX1B5X1RyYWNpbmdQb3NzaWJsZSAmJgogICAgICAgICAgICAgdHN0YXRlLT5jX3RyYWNlZnVuYyAhPSBOVUxMICYmICF0c3RhdGUtPnRyYWNpbmcpIHsKKyAgICAgICAgICAgIGludCBlcnI7CiAgICAgICAgICAgICAvKiBzZWUgbWF5YmVfY2FsbF9saW5lX3RyYWNlCiAgICAgICAgICAgICAgICBmb3IgZXhwb3NpdG9yeSBjb21tZW50cyAqLwogICAgICAgICAgICAgZi0+Zl9zdGFja3RvcCA9IHN0YWNrX3BvaW50ZXI7CiAKICAgICAgICAgICAgIGVyciA9IG1heWJlX2NhbGxfbGluZV90cmFjZSh0c3RhdGUtPmNfdHJhY2VmdW5jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzdGF0ZS0+Y190cmFjZW9iaiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmLCAmaW5zdHJfbGIsICZpbnN0cl91YiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaW5zdHJfcHJldik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHN0YXRlLCBmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpbnN0cl9sYiwgJmluc3RyX3ViLCAmaW5zdHJfcHJldik7CiAgICAgICAgICAgICAvKiBSZWxvYWQgcG9zc2libHkgY2hhbmdlZCBmcmFtZSBmaWVsZHMgKi8KICAgICAgICAgICAgIEpVTVBUTyhmLT5mX2xhc3RpKTsKICAgICAgICAgICAgIGlmIChmLT5mX3N0YWNrdG9wICE9IE5VTEwpIHsKICAgICAgICAgICAgICAgICBzdGFja19wb2ludGVyID0gZi0+Zl9zdGFja3RvcDsKICAgICAgICAgICAgICAgICBmLT5mX3N0YWNrdG9wID0gTlVMTDsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChlcnIpIHsKKyAgICAgICAgICAgIGlmIChlcnIpCiAgICAgICAgICAgICAgICAgLyogdHJhY2UgZnVuY3Rpb24gcmFpc2VkIGFuIGV4Y2VwdGlvbiAqLwotICAgICAgICAgICAgICAgIGdvdG8gb25fZXJyb3I7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgfQogCiAgICAgICAgIC8qIEV4dHJhY3Qgb3Bjb2RlIGFuZCBhcmd1bWVudCAqLwpAQCAtMTM1Nyw4NyArMTM2Miw5OSBAQAogICAgICAgICBUQVJHRVQoTk9QKQogICAgICAgICAgICAgRkFTVF9ESVNQQVRDSCgpOwogCi0gICAgICAgIFRBUkdFVChMT0FEX0ZBU1QpCi0gICAgICAgICAgICB4ID0gR0VUTE9DQUwob3BhcmcpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIFB5X0lOQ1JFRih4KTsKLSAgICAgICAgICAgICAgICBQVVNIKHgpOwotICAgICAgICAgICAgICAgIEZBU1RfRElTUEFUQ0goKTsKKyAgICAgICAgVEFSR0VUKExPQURfRkFTVCkgeworICAgICAgICAgICAgUHlPYmplY3QgKnZhbHVlID0gR0VUTE9DQUwob3BhcmcpOworICAgICAgICAgICAgaWYgKHZhbHVlID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBmb3JtYXRfZXhjX2NoZWNrX2FyZyhQeUV4Y19VbmJvdW5kTG9jYWxFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVTkJPVU5ETE9DQUxfRVJST1JfTVNHLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VHVwbGVfR2V0SXRlbShjby0+Y29fdmFybmFtZXMsIG9wYXJnKSk7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZvcm1hdF9leGNfY2hlY2tfYXJnKFB5RXhjX1VuYm91bmRMb2NhbEVycm9yLAotICAgICAgICAgICAgICAgIFVOQk9VTkRMT0NBTF9FUlJPUl9NU0csCi0gICAgICAgICAgICAgICAgUHlUdXBsZV9HZXRJdGVtKGNvLT5jb192YXJuYW1lcywgb3BhcmcpKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIFRBUkdFVChMT0FEX0NPTlNUKQotICAgICAgICAgICAgeCA9IEdFVElURU0oY29uc3RzLCBvcGFyZyk7Ci0gICAgICAgICAgICBQeV9JTkNSRUYoeCk7Ci0gICAgICAgICAgICBQVVNIKHgpOworICAgICAgICAgICAgUHlfSU5DUkVGKHZhbHVlKTsKKyAgICAgICAgICAgIFBVU0godmFsdWUpOwogICAgICAgICAgICAgRkFTVF9ESVNQQVRDSCgpOworICAgICAgICB9CisKKyAgICAgICAgVEFSR0VUKExPQURfQ09OU1QpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp2YWx1ZSA9IEdFVElURU0oY29uc3RzLCBvcGFyZyk7CisgICAgICAgICAgICBQeV9JTkNSRUYodmFsdWUpOworICAgICAgICAgICAgUFVTSCh2YWx1ZSk7CisgICAgICAgICAgICBGQVNUX0RJU1BBVENIKCk7CisgICAgICAgIH0KIAogICAgICAgICBQUkVESUNURURfV0lUSF9BUkcoU1RPUkVfRkFTVCk7Ci0gICAgICAgIFRBUkdFVChTVE9SRV9GQVNUKQotICAgICAgICAgICAgdiA9IFBPUCgpOwotICAgICAgICAgICAgU0VUTE9DQUwob3BhcmcsIHYpOworICAgICAgICBUQVJHRVQoU1RPUkVfRkFTVCkgeworICAgICAgICAgICAgUHlPYmplY3QgKnZhbHVlID0gUE9QKCk7CisgICAgICAgICAgICBTRVRMT0NBTChvcGFyZywgdmFsdWUpOwogICAgICAgICAgICAgRkFTVF9ESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKFBPUF9UT1ApCi0gICAgICAgICAgICB2ID0gUE9QKCk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7CisgICAgICAgIFRBUkdFVChQT1BfVE9QKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqdmFsdWUgPSBQT1AoKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7CiAgICAgICAgICAgICBGQVNUX0RJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoUk9UX1RXTykKLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIHcgPSBTRUNPTkQoKTsKLSAgICAgICAgICAgIFNFVF9UT1Aodyk7Ci0gICAgICAgICAgICBTRVRfU0VDT05EKHYpOworICAgICAgICBUQVJHRVQoUk9UX1RXTykgeworICAgICAgICAgICAgUHlPYmplY3QgKnRvcCA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnNlY29uZCA9IFNFQ09ORCgpOworICAgICAgICAgICAgU0VUX1RPUChzZWNvbmQpOworICAgICAgICAgICAgU0VUX1NFQ09ORCh0b3ApOwogICAgICAgICAgICAgRkFTVF9ESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKFJPVF9USFJFRSkKLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIHcgPSBTRUNPTkQoKTsKLSAgICAgICAgICAgIHggPSBUSElSRCgpOwotICAgICAgICAgICAgU0VUX1RPUCh3KTsKLSAgICAgICAgICAgIFNFVF9TRUNPTkQoeCk7Ci0gICAgICAgICAgICBTRVRfVEhJUkQodik7CisgICAgICAgIFRBUkdFVChST1RfVEhSRUUpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp0b3AgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpzZWNvbmQgPSBTRUNPTkQoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp0aGlyZCA9IFRISVJEKCk7CisgICAgICAgICAgICBTRVRfVE9QKHNlY29uZCk7CisgICAgICAgICAgICBTRVRfU0VDT05EKHRoaXJkKTsKKyAgICAgICAgICAgIFNFVF9USElSRCh0b3ApOwogICAgICAgICAgICAgRkFTVF9ESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKERVUF9UT1ApCi0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICBQeV9JTkNSRUYodik7Ci0gICAgICAgICAgICBQVVNIKHYpOworICAgICAgICBUQVJHRVQoRFVQX1RPUCkgeworICAgICAgICAgICAgUHlPYmplY3QgKnRvcCA9IFRPUCgpOworICAgICAgICAgICAgUHlfSU5DUkVGKHRvcCk7CisgICAgICAgICAgICBQVVNIKHRvcCk7CiAgICAgICAgICAgICBGQVNUX0RJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoRFVQX1RPUF9UV08pCi0gICAgICAgICAgICB4ID0gVE9QKCk7Ci0gICAgICAgICAgICBQeV9JTkNSRUYoeCk7Ci0gICAgICAgICAgICB3ID0gU0VDT05EKCk7Ci0gICAgICAgICAgICBQeV9JTkNSRUYodyk7CisgICAgICAgIFRBUkdFVChEVVBfVE9QX1RXTykgeworICAgICAgICAgICAgUHlPYmplY3QgKnRvcCA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnNlY29uZCA9IFNFQ09ORCgpOworICAgICAgICAgICAgUHlfSU5DUkVGKHRvcCk7CisgICAgICAgICAgICBQeV9JTkNSRUYoc2Vjb25kKTsKICAgICAgICAgICAgIFNUQUNLQURKKDIpOwotICAgICAgICAgICAgU0VUX1RPUCh4KTsKLSAgICAgICAgICAgIFNFVF9TRUNPTkQodyk7CisgICAgICAgICAgICBTRVRfVE9QKHRvcCk7CisgICAgICAgICAgICBTRVRfU0VDT05EKHNlY29uZCk7CiAgICAgICAgICAgICBGQVNUX0RJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoVU5BUllfUE9TSVRJVkUpCi0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICB4ID0gUHlOdW1iZXJfUG9zaXRpdmUodik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICBUQVJHRVQoVU5BUllfUE9TSVRJVkUpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp2YWx1ZSA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnJlcyA9IFB5TnVtYmVyX1Bvc2l0aXZlKHZhbHVlKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7CisgICAgICAgICAgICBTRVRfVE9QKHJlcyk7CisgICAgICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoVU5BUllfTkVHQVRJVkUpCi0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICB4ID0gUHlOdW1iZXJfTmVnYXRpdmUodik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICBUQVJHRVQoVU5BUllfTkVHQVRJVkUpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp2YWx1ZSA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnJlcyA9IFB5TnVtYmVyX05lZ2F0aXZlKHZhbHVlKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7CisgICAgICAgICAgICBTRVRfVE9QKHJlcyk7CisgICAgICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoVU5BUllfTk9UKQotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgZXJyID0gUHlPYmplY3RfSXNUcnVlKHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOworICAgICAgICBUQVJHRVQoVU5BUllfTk9UKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqdmFsdWUgPSBUT1AoKTsKKyAgICAgICAgICAgIGludCBlcnIgPSBQeU9iamVjdF9Jc1RydWUodmFsdWUpOworICAgICAgICAgICAgUHlfREVDUkVGKHZhbHVlKTsKICAgICAgICAgICAgIGlmIChlcnIgPT0gMCkgewogICAgICAgICAgICAgICAgIFB5X0lOQ1JFRihQeV9UcnVlKTsKICAgICAgICAgICAgICAgICBTRVRfVE9QKFB5X1RydWUpOwpAQCAtMTQ1MCw0MTYgKzE0NjcsNDY0IEBACiAgICAgICAgICAgICAgICAgRElTUEFUQ0goKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIFNUQUNLQURKKC0xKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChVTkFSWV9JTlZFUlQpCi0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICB4ID0gUHlOdW1iZXJfSW52ZXJ0KHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgU0VUX1RPUCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgVEFSR0VUKFVOQVJZX0lOVkVSVCkgeworICAgICAgICAgICAgUHlPYmplY3QgKnZhbHVlID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqcmVzID0gUHlOdW1iZXJfSW52ZXJ0KHZhbHVlKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7CisgICAgICAgICAgICBTRVRfVE9QKHJlcyk7CisgICAgICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoQklOQVJZX1BPV0VSKQotICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgeCA9IFB5TnVtYmVyX1Bvd2VyKHYsIHcsIFB5X05vbmUpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgU0VUX1RPUCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgVEFSR0VUKEJJTkFSWV9QT1dFUikgeworICAgICAgICAgICAgUHlPYmplY3QgKmV4cCA9IFBPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmJhc2UgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyZXMgPSBQeU51bWJlcl9Qb3dlcihiYXNlLCBleHAsIFB5X05vbmUpOworICAgICAgICAgICAgUHlfREVDUkVGKGJhc2UpOworICAgICAgICAgICAgUHlfREVDUkVGKGV4cCk7CisgICAgICAgICAgICBTRVRfVE9QKHJlcyk7CisgICAgICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoQklOQVJZX01VTFRJUExZKQotICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgeCA9IFB5TnVtYmVyX011bHRpcGx5KHYsIHcpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgU0VUX1RPUCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgVEFSR0VUKEJJTkFSWV9NVUxUSVBMWSkgeworICAgICAgICAgICAgUHlPYmplY3QgKnJpZ2h0ID0gUE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqbGVmdCA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnJlcyA9IFB5TnVtYmVyX011bHRpcGx5KGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihsZWZ0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihyaWdodCk7CisgICAgICAgICAgICBTRVRfVE9QKHJlcyk7CisgICAgICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoQklOQVJZX1RSVUVfRElWSURFKQotICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgeCA9IFB5TnVtYmVyX1RydWVEaXZpZGUodiwgdyk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICBUQVJHRVQoQklOQVJZX1RSVUVfRElWSURFKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqZGl2aXNvciA9IFBPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmRpdmlkZW5kID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqcXVvdGllbnQgPSBQeU51bWJlcl9UcnVlRGl2aWRlKGRpdmlkZW5kLCBkaXZpc29yKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihkaXZpZGVuZCk7CisgICAgICAgICAgICBQeV9ERUNSRUYoZGl2aXNvcik7CisgICAgICAgICAgICBTRVRfVE9QKHF1b3RpZW50KTsKKyAgICAgICAgICAgIGlmIChxdW90aWVudCA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKEJJTkFSWV9GTE9PUl9ESVZJREUpCi0gICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICB4ID0gUHlOdW1iZXJfRmxvb3JEaXZpZGUodiwgdyk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICBUQVJHRVQoQklOQVJZX0ZMT09SX0RJVklERSkgeworICAgICAgICAgICAgUHlPYmplY3QgKmRpdmlzb3IgPSBQT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpkaXZpZGVuZCA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnF1b3RpZW50ID0gUHlOdW1iZXJfRmxvb3JEaXZpZGUoZGl2aWRlbmQsIGRpdmlzb3IpOworICAgICAgICAgICAgUHlfREVDUkVGKGRpdmlkZW5kKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihkaXZpc29yKTsKKyAgICAgICAgICAgIFNFVF9UT1AocXVvdGllbnQpOworICAgICAgICAgICAgaWYgKHF1b3RpZW50ID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoQklOQVJZX01PRFVMTykKLSAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfQ2hlY2tFeGFjdCh2KSkKLSAgICAgICAgICAgICAgICB4ID0gUHlVbmljb2RlX0Zvcm1hdCh2LCB3KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB4ID0gUHlOdW1iZXJfUmVtYWluZGVyKHYsIHcpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgU0VUX1RPUCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgVEFSR0VUKEJJTkFSWV9NT0RVTE8pIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpkaXZpc29yID0gUE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqZGl2aWRlbmQgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyZXMgPSBQeVVuaWNvZGVfQ2hlY2tFeGFjdChkaXZpZGVuZCkgPworICAgICAgICAgICAgICAgIFB5VW5pY29kZV9Gb3JtYXQoZGl2aWRlbmQsIGRpdmlzb3IpIDoKKyAgICAgICAgICAgICAgICBQeU51bWJlcl9SZW1haW5kZXIoZGl2aWRlbmQsIGRpdmlzb3IpOworICAgICAgICAgICAgUHlfREVDUkVGKGRpdmlzb3IpOworICAgICAgICAgICAgUHlfREVDUkVGKGRpdmlkZW5kKTsKKyAgICAgICAgICAgIFNFVF9UT1AocmVzKTsKKyAgICAgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChCSU5BUllfQUREKQotICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9DaGVja0V4YWN0KHYpICYmCi0gICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfQ2hlY2tFeGFjdCh3KSkgewotICAgICAgICAgICAgICAgIHggPSB1bmljb2RlX2NvbmNhdGVuYXRlKHYsIHcsIGYsIG5leHRfaW5zdHIpOworICAgICAgICBUQVJHRVQoQklOQVJZX0FERCkgeworICAgICAgICAgICAgUHlPYmplY3QgKnJpZ2h0ID0gUE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqbGVmdCA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnN1bTsKKyAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfQ2hlY2tFeGFjdChsZWZ0KSAmJgorICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0NoZWNrRXhhY3QocmlnaHQpKSB7CisgICAgICAgICAgICAgICAgc3VtID0gdW5pY29kZV9jb25jYXRlbmF0ZShsZWZ0LCByaWdodCwgZiwgbmV4dF9pbnN0cik7CiAgICAgICAgICAgICAgICAgLyogdW5pY29kZV9jb25jYXRlbmF0ZSBjb25zdW1lZCB0aGUgcmVmIHRvIHYgKi8KLSAgICAgICAgICAgICAgICBnb3RvIHNraXBfZGVjcmVmX3Z4OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgeCA9IFB5TnVtYmVyX0FkZCh2LCB3KTsKKyAgICAgICAgICAgICAgICBzdW0gPSBQeU51bWJlcl9BZGQobGVmdCwgcmlnaHQpOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihsZWZ0KTsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFB5X0RFQ1JFRihyaWdodCk7CisgICAgICAgICAgICBTRVRfVE9QKHN1bSk7CisgICAgICAgICAgICBpZiAoc3VtID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KKworICAgICAgICBUQVJHRVQoQklOQVJZX1NVQlRSQUNUKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqcmlnaHQgPSBQT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpsZWZ0ID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqZGlmZiA9IFB5TnVtYmVyX1N1YnRyYWN0KGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihyaWdodCk7CisgICAgICAgICAgICBQeV9ERUNSRUYobGVmdCk7CisgICAgICAgICAgICBTRVRfVE9QKGRpZmYpOworICAgICAgICAgICAgaWYgKGRpZmYgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQorCisgICAgICAgIFRBUkdFVChCSU5BUllfU1VCU0NSKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqc3ViID0gUE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqY29udGFpbmVyID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqcmVzID0gUHlPYmplY3RfR2V0SXRlbShjb250YWluZXIsIHN1Yik7CisgICAgICAgICAgICBQeV9ERUNSRUYoY29udGFpbmVyKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihzdWIpOworICAgICAgICAgICAgU0VUX1RPUChyZXMpOworICAgICAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CisKKyAgICAgICAgVEFSR0VUKEJJTkFSWV9MU0hJRlQpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyaWdodCA9IFBPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmxlZnQgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyZXMgPSBQeU51bWJlcl9Mc2hpZnQobGVmdCwgcmlnaHQpOworICAgICAgICAgICAgUHlfREVDUkVGKGxlZnQpOworICAgICAgICAgICAgUHlfREVDUkVGKHJpZ2h0KTsKKyAgICAgICAgICAgIFNFVF9UT1AocmVzKTsKKyAgICAgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQorCisgICAgICAgIFRBUkdFVChCSU5BUllfUlNISUZUKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqcmlnaHQgPSBQT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpsZWZ0ID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqcmVzID0gUHlOdW1iZXJfUnNoaWZ0KGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihsZWZ0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihyaWdodCk7CisgICAgICAgICAgICBTRVRfVE9QKHJlcyk7CisgICAgICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KKworICAgICAgICBUQVJHRVQoQklOQVJZX0FORCkgeworICAgICAgICAgICAgUHlPYmplY3QgKnJpZ2h0ID0gUE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqbGVmdCA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnJlcyA9IFB5TnVtYmVyX0FuZChsZWZ0LCByaWdodCk7CisgICAgICAgICAgICBQeV9ERUNSRUYobGVmdCk7CisgICAgICAgICAgICBQeV9ERUNSRUYocmlnaHQpOworICAgICAgICAgICAgU0VUX1RPUChyZXMpOworICAgICAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CisKKyAgICAgICAgVEFSR0VUKEJJTkFSWV9YT1IpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyaWdodCA9IFBPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmxlZnQgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyZXMgPSBQeU51bWJlcl9Yb3IobGVmdCwgcmlnaHQpOworICAgICAgICAgICAgUHlfREVDUkVGKGxlZnQpOworICAgICAgICAgICAgUHlfREVDUkVGKHJpZ2h0KTsKKyAgICAgICAgICAgIFNFVF9UT1AocmVzKTsKKyAgICAgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQorCisgICAgICAgIFRBUkdFVChCSU5BUllfT1IpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyaWdodCA9IFBPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmxlZnQgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyZXMgPSBQeU51bWJlcl9PcihsZWZ0LCByaWdodCk7CisgICAgICAgICAgICBQeV9ERUNSRUYobGVmdCk7CisgICAgICAgICAgICBQeV9ERUNSRUYocmlnaHQpOworICAgICAgICAgICAgU0VUX1RPUChyZXMpOworICAgICAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CisKKyAgICAgICAgVEFSR0VUKExJU1RfQVBQRU5EKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqdiA9IFBPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmxpc3QgPSBQRUVLKG9wYXJnKTsKKyAgICAgICAgICAgIGludCBlcnI7CisgICAgICAgICAgICBlcnIgPSBQeUxpc3RfQXBwZW5kKGxpc3QsIHYpOwogICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgIHNraXBfZGVjcmVmX3Z4OgotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgU0VUX1RPUCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChlcnIgIT0gMCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgUFJFRElDVChKVU1QX0FCU09MVVRFKTsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoQklOQVJZX1NVQlRSQUNUKQotICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgeCA9IFB5TnVtYmVyX1N1YnRyYWN0KHYsIHcpOworICAgICAgICBUQVJHRVQoU0VUX0FERCkgeworICAgICAgICAgICAgUHlPYmplY3QgKnYgPSBQT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpzZXQgPSBzdGFja19wb2ludGVyWy1vcGFyZ107CisgICAgICAgICAgICBpbnQgZXJyOworICAgICAgICAgICAgZXJyID0gUHlTZXRfQWRkKHNldCwgdik7CiAgICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKGVyciAhPSAwKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBQUkVESUNUKEpVTVBfQUJTT0xVVEUpOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChCSU5BUllfU1VCU0NSKQotICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgeCA9IFB5T2JqZWN0X0dldEl0ZW0odiwgdyk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICBUQVJHRVQoSU5QTEFDRV9QT1dFUikgeworICAgICAgICAgICAgUHlPYmplY3QgKmV4cCA9IFBPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmJhc2UgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyZXMgPSBQeU51bWJlcl9JblBsYWNlUG93ZXIoYmFzZSwgZXhwLCBQeV9Ob25lKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihiYXNlKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihleHApOworICAgICAgICAgICAgU0VUX1RPUChyZXMpOworICAgICAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKEJJTkFSWV9MU0hJRlQpCi0gICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICB4ID0gUHlOdW1iZXJfTHNoaWZ0KHYsIHcpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgU0VUX1RPUCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgVEFSR0VUKElOUExBQ0VfTVVMVElQTFkpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyaWdodCA9IFBPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmxlZnQgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyZXMgPSBQeU51bWJlcl9JblBsYWNlTXVsdGlwbHkobGVmdCwgcmlnaHQpOworICAgICAgICAgICAgUHlfREVDUkVGKGxlZnQpOworICAgICAgICAgICAgUHlfREVDUkVGKHJpZ2h0KTsKKyAgICAgICAgICAgIFNFVF9UT1AocmVzKTsKKyAgICAgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChCSU5BUllfUlNISUZUKQotICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgeCA9IFB5TnVtYmVyX1JzaGlmdCh2LCB3KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIFRBUkdFVChJTlBMQUNFX1RSVUVfRElWSURFKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqZGl2aXNvciA9IFBPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmRpdmlkZW5kID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqcXVvdGllbnQgPSBQeU51bWJlcl9JblBsYWNlVHJ1ZURpdmlkZShkaXZpZGVuZCwgZGl2aXNvcik7CisgICAgICAgICAgICBQeV9ERUNSRUYoZGl2aWRlbmQpOworICAgICAgICAgICAgUHlfREVDUkVGKGRpdmlzb3IpOworICAgICAgICAgICAgU0VUX1RPUChxdW90aWVudCk7CisgICAgICAgICAgICBpZiAocXVvdGllbnQgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChCSU5BUllfQU5EKQotICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgeCA9IFB5TnVtYmVyX0FuZCh2LCB3KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIFRBUkdFVChJTlBMQUNFX0ZMT09SX0RJVklERSkgeworICAgICAgICAgICAgUHlPYmplY3QgKmRpdmlzb3IgPSBQT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpkaXZpZGVuZCA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnF1b3RpZW50ID0gUHlOdW1iZXJfSW5QbGFjZUZsb29yRGl2aWRlKGRpdmlkZW5kLCBkaXZpc29yKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihkaXZpZGVuZCk7CisgICAgICAgICAgICBQeV9ERUNSRUYoZGl2aXNvcik7CisgICAgICAgICAgICBTRVRfVE9QKHF1b3RpZW50KTsKKyAgICAgICAgICAgIGlmIChxdW90aWVudCA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKEJJTkFSWV9YT1IpCi0gICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICB4ID0gUHlOdW1iZXJfWG9yKHYsIHcpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgU0VUX1RPUCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgVEFSR0VUKElOUExBQ0VfTU9EVUxPKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqcmlnaHQgPSBQT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpsZWZ0ID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqbW9kID0gUHlOdW1iZXJfSW5QbGFjZVJlbWFpbmRlcihsZWZ0LCByaWdodCk7CisgICAgICAgICAgICBQeV9ERUNSRUYobGVmdCk7CisgICAgICAgICAgICBQeV9ERUNSRUYocmlnaHQpOworICAgICAgICAgICAgU0VUX1RPUChtb2QpOworICAgICAgICAgICAgaWYgKG1vZCA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKEJJTkFSWV9PUikKLSAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIHggPSBQeU51bWJlcl9Pcih2LCB3KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgVEFSR0VUKExJU1RfQVBQRU5EKQotICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgdiA9IFBFRUsob3BhcmcpOwotICAgICAgICAgICAgZXJyID0gUHlMaXN0X0FwcGVuZCh2LCB3KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIGlmIChlcnIgPT0gMCkgewotICAgICAgICAgICAgICAgIFBSRURJQ1QoSlVNUF9BQlNPTFVURSk7Ci0gICAgICAgICAgICAgICAgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIFRBUkdFVChTRVRfQUREKQotICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgdiA9IHN0YWNrX3BvaW50ZXJbLW9wYXJnXTsKLSAgICAgICAgICAgIGVyciA9IFB5U2V0X0FkZCh2LCB3KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIGlmIChlcnIgPT0gMCkgewotICAgICAgICAgICAgICAgIFBSRURJQ1QoSlVNUF9BQlNPTFVURSk7Ci0gICAgICAgICAgICAgICAgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIFRBUkdFVChJTlBMQUNFX1BPV0VSKQotICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgeCA9IFB5TnVtYmVyX0luUGxhY2VQb3dlcih2LCB3LCBQeV9Ob25lKTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgVEFSR0VUKElOUExBQ0VfTVVMVElQTFkpCi0gICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICB4ID0gUHlOdW1iZXJfSW5QbGFjZU11bHRpcGx5KHYsIHcpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgU0VUX1RPUCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBUQVJHRVQoSU5QTEFDRV9UUlVFX0RJVklERSkKLSAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIHggPSBQeU51bWJlcl9JblBsYWNlVHJ1ZURpdmlkZSh2LCB3KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgVEFSR0VUKElOUExBQ0VfRkxPT1JfRElWSURFKQotICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgeCA9IFB5TnVtYmVyX0luUGxhY2VGbG9vckRpdmlkZSh2LCB3KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgVEFSR0VUKElOUExBQ0VfTU9EVUxPKQotICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgeCA9IFB5TnVtYmVyX0luUGxhY2VSZW1haW5kZXIodiwgdyk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIFRBUkdFVChJTlBMQUNFX0FERCkKLSAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfQ2hlY2tFeGFjdCh2KSAmJgotICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0NoZWNrRXhhY3QodykpIHsKLSAgICAgICAgICAgICAgICB4ID0gdW5pY29kZV9jb25jYXRlbmF0ZSh2LCB3LCBmLCBuZXh0X2luc3RyKTsKKyAgICAgICAgVEFSR0VUKElOUExBQ0VfQUREKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqcmlnaHQgPSBQT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpsZWZ0ID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqc3VtOworICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9DaGVja0V4YWN0KGxlZnQpICYmIFB5VW5pY29kZV9DaGVja0V4YWN0KHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHN1bSA9IHVuaWNvZGVfY29uY2F0ZW5hdGUobGVmdCwgcmlnaHQsIGYsIG5leHRfaW5zdHIpOwogICAgICAgICAgICAgICAgIC8qIHVuaWNvZGVfY29uY2F0ZW5hdGUgY29uc3VtZWQgdGhlIHJlZiB0byB2ICovCi0gICAgICAgICAgICAgICAgZ290byBza2lwX2RlY3JlZl92OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgeCA9IFB5TnVtYmVyX0luUGxhY2VBZGQodiwgdyk7CisgICAgICAgICAgICAgICAgc3VtID0gUHlOdW1iZXJfSW5QbGFjZUFkZChsZWZ0LCByaWdodCk7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGxlZnQpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgIHNraXBfZGVjcmVmX3Y6Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgUHlfREVDUkVGKHJpZ2h0KTsKKyAgICAgICAgICAgIFNFVF9UT1Aoc3VtKTsKKyAgICAgICAgICAgIGlmIChzdW0gPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChJTlBMQUNFX1NVQlRSQUNUKQotICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgeCA9IFB5TnVtYmVyX0luUGxhY2VTdWJ0cmFjdCh2LCB3KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIFRBUkdFVChJTlBMQUNFX1NVQlRSQUNUKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqcmlnaHQgPSBQT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpsZWZ0ID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqZGlmZiA9IFB5TnVtYmVyX0luUGxhY2VTdWJ0cmFjdChsZWZ0LCByaWdodCk7CisgICAgICAgICAgICBQeV9ERUNSRUYobGVmdCk7CisgICAgICAgICAgICBQeV9ERUNSRUYocmlnaHQpOworICAgICAgICAgICAgU0VUX1RPUChkaWZmKTsKKyAgICAgICAgICAgIGlmIChkaWZmID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoSU5QTEFDRV9MU0hJRlQpCi0gICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICB4ID0gUHlOdW1iZXJfSW5QbGFjZUxzaGlmdCh2LCB3KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIFRBUkdFVChJTlBMQUNFX0xTSElGVCkgeworICAgICAgICAgICAgUHlPYmplY3QgKnJpZ2h0ID0gUE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqbGVmdCA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnJlcyA9IFB5TnVtYmVyX0luUGxhY2VMc2hpZnQobGVmdCwgcmlnaHQpOworICAgICAgICAgICAgUHlfREVDUkVGKGxlZnQpOworICAgICAgICAgICAgUHlfREVDUkVGKHJpZ2h0KTsKKyAgICAgICAgICAgIFNFVF9UT1AocmVzKTsKKyAgICAgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChJTlBMQUNFX1JTSElGVCkKLSAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIHggPSBQeU51bWJlcl9JblBsYWNlUnNoaWZ0KHYsIHcpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgU0VUX1RPUCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgVEFSR0VUKElOUExBQ0VfUlNISUZUKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqcmlnaHQgPSBQT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpsZWZ0ID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqcmVzID0gUHlOdW1iZXJfSW5QbGFjZVJzaGlmdChsZWZ0LCByaWdodCk7CisgICAgICAgICAgICBQeV9ERUNSRUYobGVmdCk7CisgICAgICAgICAgICBQeV9ERUNSRUYocmlnaHQpOworICAgICAgICAgICAgU0VUX1RPUChyZXMpOworICAgICAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKElOUExBQ0VfQU5EKQotICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgeCA9IFB5TnVtYmVyX0luUGxhY2VBbmQodiwgdyk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICBUQVJHRVQoSU5QTEFDRV9BTkQpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyaWdodCA9IFBPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmxlZnQgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyZXMgPSBQeU51bWJlcl9JblBsYWNlQW5kKGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihsZWZ0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihyaWdodCk7CisgICAgICAgICAgICBTRVRfVE9QKHJlcyk7CisgICAgICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoSU5QTEFDRV9YT1IpCi0gICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICB4ID0gUHlOdW1iZXJfSW5QbGFjZVhvcih2LCB3KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIFRBUkdFVChJTlBMQUNFX1hPUikgeworICAgICAgICAgICAgUHlPYmplY3QgKnJpZ2h0ID0gUE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqbGVmdCA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnJlcyA9IFB5TnVtYmVyX0luUGxhY2VYb3IobGVmdCwgcmlnaHQpOworICAgICAgICAgICAgUHlfREVDUkVGKGxlZnQpOworICAgICAgICAgICAgUHlfREVDUkVGKHJpZ2h0KTsKKyAgICAgICAgICAgIFNFVF9UT1AocmVzKTsKKyAgICAgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChJTlBMQUNFX09SKQotICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgeCA9IFB5TnVtYmVyX0luUGxhY2VPcih2LCB3KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIFRBUkdFVChJTlBMQUNFX09SKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqcmlnaHQgPSBQT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpsZWZ0ID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqcmVzID0gUHlOdW1iZXJfSW5QbGFjZU9yKGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihsZWZ0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihyaWdodCk7CisgICAgICAgICAgICBTRVRfVE9QKHJlcyk7CisgICAgICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoU1RPUkVfU1VCU0NSKQotICAgICAgICAgICAgdyA9IFRPUCgpOwotICAgICAgICAgICAgdiA9IFNFQ09ORCgpOwotICAgICAgICAgICAgdSA9IFRISVJEKCk7CisgICAgICAgIFRBUkdFVChTVE9SRV9TVUJTQ1IpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpzdWIgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpjb250YWluZXIgPSBTRUNPTkQoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp2ID0gVEhJUkQoKTsKKyAgICAgICAgICAgIGludCBlcnI7CiAgICAgICAgICAgICBTVEFDS0FESigtMyk7CiAgICAgICAgICAgICAvKiB2W3ddID0gdSAqLwotICAgICAgICAgICAgZXJyID0gUHlPYmplY3RfU2V0SXRlbSh2LCB3LCB1KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih1KTsKKyAgICAgICAgICAgIGVyciA9IFB5T2JqZWN0X1NldEl0ZW0oY29udGFpbmVyLCBzdWIsIHYpOwogICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgaWYgKGVyciA9PSAwKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBQeV9ERUNSRUYoY29udGFpbmVyKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihzdWIpOworICAgICAgICAgICAgaWYgKGVyciAhPSAwKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKERFTEVURV9TVUJTQ1IpCi0gICAgICAgICAgICB3ID0gVE9QKCk7Ci0gICAgICAgICAgICB2ID0gU0VDT05EKCk7CisgICAgICAgIFRBUkdFVChERUxFVEVfU1VCU0NSKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqc3ViID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqY29udGFpbmVyID0gU0VDT05EKCk7CisgICAgICAgICAgICBpbnQgZXJyOwogICAgICAgICAgICAgU1RBQ0tBREooLTIpOwogICAgICAgICAgICAgLyogZGVsIHZbd10gKi8KLSAgICAgICAgICAgIGVyciA9IFB5T2JqZWN0X0RlbEl0ZW0odiwgdyk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBpZiAoZXJyID09IDApIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGVyciA9IFB5T2JqZWN0X0RlbEl0ZW0oY29udGFpbmVyLCBzdWIpOworICAgICAgICAgICAgUHlfREVDUkVGKGNvbnRhaW5lcik7CisgICAgICAgICAgICBQeV9ERUNSRUYoc3ViKTsKKyAgICAgICAgICAgIGlmIChlcnIgIT0gMCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChQUklOVF9FWFBSKQotICAgICAgICAgICAgdiA9IFBPUCgpOwotICAgICAgICAgICAgdyA9IFB5U3lzX0dldE9iamVjdCgiZGlzcGxheWhvb2siKTsKLSAgICAgICAgICAgIGlmICh3ID09IE5VTEwpIHsKKyAgICAgICAgVEFSR0VUKFBSSU5UX0VYUFIpIHsKKyAgICAgICAgICAgIF9QeV9JREVOVElGSUVSKGRpc3BsYXlob29rKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp2YWx1ZSA9IFBPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmhvb2sgPSBfUHlTeXNfR2V0T2JqZWN0SWQoJlB5SWRfZGlzcGxheWhvb2spOworICAgICAgICAgICAgUHlPYmplY3QgKnJlczsKKyAgICAgICAgICAgIGlmIChob29rID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibG9zdCBzeXMuZGlzcGxheWhvb2siKTsKLSAgICAgICAgICAgICAgICBlcnIgPSAtMTsKLSAgICAgICAgICAgICAgICB4ID0gTlVMTDsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYodmFsdWUpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoZXJyID09IDApIHsKLSAgICAgICAgICAgICAgICB4ID0gUHlUdXBsZV9QYWNrKDEsIHYpOwotICAgICAgICAgICAgICAgIGlmICh4ID09IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgIGVyciA9IC0xOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGVyciA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgdyA9IFB5RXZhbF9DYWxsT2JqZWN0KHcsIHgpOwotICAgICAgICAgICAgICAgIFB5X1hERUNSRUYodyk7Ci0gICAgICAgICAgICAgICAgaWYgKHcgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICAgICAgZXJyID0gLTE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBQeV9YREVDUkVGKHgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICByZXMgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKGhvb2ssIHZhbHVlLCBOVUxMKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7CisgICAgICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihyZXMpOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCiAjaWZkZWYgQ0FTRV9UT09fQklHCiAgICAgICAgIGRlZmF1bHQ6IHN3aXRjaCAob3Bjb2RlKSB7CiAjZW5kaWYKLSAgICAgICAgVEFSR0VUKFJBSVNFX1ZBUkFSR1MpCi0gICAgICAgICAgICB2ID0gdyA9IE5VTEw7CisgICAgICAgIFRBUkdFVChSQUlTRV9WQVJBUkdTKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqY2F1c2UgPSBOVUxMLCAqZXhjID0gTlVMTDsKICAgICAgICAgICAgIHN3aXRjaCAob3BhcmcpIHsKICAgICAgICAgICAgIGNhc2UgMjoKLSAgICAgICAgICAgICAgICB2ID0gUE9QKCk7IC8qIGNhdXNlICovCisgICAgICAgICAgICAgICAgY2F1c2UgPSBQT1AoKTsgLyogY2F1c2UgKi8KICAgICAgICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgICAgICB3ID0gUE9QKCk7IC8qIGV4YyAqLworICAgICAgICAgICAgICAgIGV4YyA9IFBPUCgpOyAvKiBleGMgKi8KICAgICAgICAgICAgIGNhc2UgMDogLyogRmFsbHRocm91Z2ggKi8KLSAgICAgICAgICAgICAgICB3aHkgPSBkb19yYWlzZSh3LCB2KTsKKyAgICAgICAgICAgICAgICBpZiAoZG9fcmFpc2UoZXhjLCBjYXVzZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgd2h5ID0gV0hZX0VYQ0VQVElPTjsKKyAgICAgICAgICAgICAgICAgICAgZ290byBmYXN0X2Jsb2NrX2VuZDsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19TeXN0ZW1FcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiYWQgUkFJU0VfVkFSQVJHUyBvcGFyZyIpOwotICAgICAgICAgICAgICAgIHdoeSA9IFdIWV9FWENFUFRJT047CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoU1RPUkVfTE9DQUxTKQotICAgICAgICAgICAgeCA9IFBPUCgpOwotICAgICAgICAgICAgdiA9IGYtPmZfbG9jYWxzOwotICAgICAgICAgICAgUHlfWERFQ1JFRih2KTsKLSAgICAgICAgICAgIGYtPmZfbG9jYWxzID0geDsKLSAgICAgICAgICAgIERJU1BBVENIKCk7Ci0KLSAgICAgICAgVEFSR0VUKFJFVFVSTl9WQUxVRSkKKyAgICAgICAgVEFSR0VUKFJFVFVSTl9WQUxVRSkgewogICAgICAgICAgICAgcmV0dmFsID0gUE9QKCk7CiAgICAgICAgICAgICB3aHkgPSBXSFlfUkVUVVJOOwogICAgICAgICAgICAgZ290byBmYXN0X2Jsb2NrX2VuZDsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChZSUVMRF9GUk9NKQotICAgICAgICAgICAgdSA9IFBPUCgpOwotICAgICAgICAgICAgeCA9IFRPUCgpOwotICAgICAgICAgICAgLyogc2VuZCB1IHRvIHggKi8KLSAgICAgICAgICAgIGlmIChQeUdlbl9DaGVja0V4YWN0KHgpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dmFsID0gX1B5R2VuX1NlbmQoKFB5R2VuT2JqZWN0ICopeCwgdSk7CisgICAgICAgIFRBUkdFVChZSUVMRF9GUk9NKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqdiA9IFBPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnJlY2lldmVyID0gVE9QKCk7CisgICAgICAgICAgICBpbnQgZXJyOworICAgICAgICAgICAgaWYgKFB5R2VuX0NoZWNrRXhhY3QocmVjaWV2ZXIpKSB7CisgICAgICAgICAgICAgICAgcmV0dmFsID0gX1B5R2VuX1NlbmQoKFB5R2VuT2JqZWN0ICopcmVjaWV2ZXIsIHYpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBfUHlfSURFTlRJRklFUihzZW5kKTsKLSAgICAgICAgICAgICAgICBpZiAodSA9PSBQeV9Ob25lKQotICAgICAgICAgICAgICAgICAgICByZXR2YWwgPSBQeV9UWVBFKHgpLT50cF9pdGVybmV4dCh4KTsKKyAgICAgICAgICAgICAgICBpZiAodiA9PSBQeV9Ob25lKQorICAgICAgICAgICAgICAgICAgICByZXR2YWwgPSBQeV9UWVBFKHJlY2lldmVyKS0+dHBfaXRlcm5leHQocmVjaWV2ZXIpOwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcmV0dmFsID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZCh4LCAmUHlJZF9zZW5kLCAiTyIsIHUpOworICAgICAgICAgICAgICAgICAgICByZXR2YWwgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkT2JqQXJncyhyZWNpZXZlciwgJlB5SWRfc2VuZCwgdiwgTlVMTCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBQeV9ERUNSRUYodSk7Ci0gICAgICAgICAgICBpZiAoIXJldHZhbCkgeworICAgICAgICAgICAgUHlfREVDUkVGKHYpOworICAgICAgICAgICAgaWYgKHJldHZhbCA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgUHlPYmplY3QgKnZhbDsKLSAgICAgICAgICAgICAgICB4ID0gUE9QKCk7IC8qIFJlbW92ZSBpdGVyIGZyb20gc3RhY2sgKi8KLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYoeCk7CisgICAgICAgICAgICAgICAgaWYgKHRzdGF0ZS0+Y190cmFjZWZ1bmMgIT0gTlVMTAorICAgICAgICAgICAgICAgICAgICAgICAgJiYgUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19TdG9wSXRlcmF0aW9uKSkKKyAgICAgICAgICAgICAgICAgICAgY2FsbF9leGNfdHJhY2UodHN0YXRlLT5jX3RyYWNlZnVuYywgdHN0YXRlLT5jX3RyYWNlb2JqLCB0c3RhdGUsIGYpOwogICAgICAgICAgICAgICAgIGVyciA9IF9QeUdlbl9GZXRjaFN0b3BJdGVyYXRpb25WYWx1ZSgmdmFsKTsKLSAgICAgICAgICAgICAgICBpZiAoZXJyIDwgMCkgewotICAgICAgICAgICAgICAgICAgICB4ID0gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHggPSB2YWw7Ci0gICAgICAgICAgICAgICAgUFVTSCh4KTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBpZiAoZXJyIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYocmVjaWV2ZXIpOworICAgICAgICAgICAgICAgIFNFVF9UT1AodmFsKTsKKyAgICAgICAgICAgICAgICBESVNQQVRDSCgpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgLyogeCByZW1haW5zIG9uIHN0YWNrLCByZXR2YWwgaXMgdmFsdWUgdG8gYmUgeWllbGRlZCAqLwogICAgICAgICAgICAgZi0+Zl9zdGFja3RvcCA9IHN0YWNrX3BvaW50ZXI7CkBAIC0xODY3LDM5ICsxOTMyLDM4IEBACiAgICAgICAgICAgICAvKiBhbmQgcmVwZWF0Li4uICovCiAgICAgICAgICAgICBmLT5mX2xhc3RpLS07CiAgICAgICAgICAgICBnb3RvIGZhc3RfeWllbGQ7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoWUlFTERfVkFMVUUpCisgICAgICAgIFRBUkdFVChZSUVMRF9WQUxVRSkgewogICAgICAgICAgICAgcmV0dmFsID0gUE9QKCk7CiAgICAgICAgICAgICBmLT5mX3N0YWNrdG9wID0gc3RhY2tfcG9pbnRlcjsKICAgICAgICAgICAgIHdoeSA9IFdIWV9ZSUVMRDsKICAgICAgICAgICAgIGdvdG8gZmFzdF95aWVsZDsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChQT1BfRVhDRVBUKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFB5VHJ5QmxvY2sgKmIgPSBQeUZyYW1lX0Jsb2NrUG9wKGYpOwotICAgICAgICAgICAgICAgIGlmIChiLT5iX3R5cGUgIT0gRVhDRVBUX0hBTkRMRVIpIHsKLSAgICAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1N5c3RlbUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgInBvcHBlZCBibG9jayBpcyBub3QgYW4gZXhjZXB0IGhhbmRsZXIiKTsKLSAgICAgICAgICAgICAgICAgICAgd2h5ID0gV0hZX0VYQ0VQVElPTjsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIFVOV0lORF9FWENFUFRfSEFORExFUihiKTsKKyAgICAgICAgVEFSR0VUKFBPUF9FWENFUFQpIHsKKyAgICAgICAgICAgIFB5VHJ5QmxvY2sgKmIgPSBQeUZyYW1lX0Jsb2NrUG9wKGYpOworICAgICAgICAgICAgaWYgKGItPmJfdHlwZSAhPSBFWENFUFRfSEFORExFUikgeworICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19TeXN0ZW1FcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvcHBlZCBibG9jayBpcyBub3QgYW4gZXhjZXB0IGhhbmRsZXIiKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgVU5XSU5EX0VYQ0VQVF9IQU5ETEVSKGIpOwogICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChQT1BfQkxPQ0spCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgUHlUcnlCbG9jayAqYiA9IFB5RnJhbWVfQmxvY2tQb3AoZik7Ci0gICAgICAgICAgICAgICAgVU5XSU5EX0JMT0NLKGIpOwotICAgICAgICAgICAgfQorICAgICAgICBUQVJHRVQoUE9QX0JMT0NLKSB7CisgICAgICAgICAgICBQeVRyeUJsb2NrICpiID0gUHlGcmFtZV9CbG9ja1BvcChmKTsKKyAgICAgICAgICAgIFVOV0lORF9CTE9DSyhiKTsKICAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAogICAgICAgICBQUkVESUNURUQoRU5EX0ZJTkFMTFkpOwotICAgICAgICBUQVJHRVQoRU5EX0ZJTkFMTFkpCi0gICAgICAgICAgICB2ID0gUE9QKCk7Ci0gICAgICAgICAgICBpZiAoUHlMb25nX0NoZWNrKHYpKSB7Ci0gICAgICAgICAgICAgICAgd2h5ID0gKGVudW0gd2h5X2NvZGUpIFB5TG9uZ19BU19MT05HKHYpOwotICAgICAgICAgICAgICAgIGFzc2VydCh3aHkgIT0gV0hZX1lJRUxEKTsKKyAgICAgICAgVEFSR0VUKEVORF9GSU5BTExZKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqc3RhdHVzID0gUE9QKCk7CisgICAgICAgICAgICBpZiAoUHlMb25nX0NoZWNrKHN0YXR1cykpIHsKKyAgICAgICAgICAgICAgICB3aHkgPSAoZW51bSB3aHlfY29kZSkgUHlMb25nX0FTX0xPTkcoc3RhdHVzKTsKKyAgICAgICAgICAgICAgICBhc3NlcnQod2h5ICE9IFdIWV9ZSUVMRCAmJiB3aHkgIT0gV0hZX0VYQ0VQVElPTik7CiAgICAgICAgICAgICAgICAgaWYgKHdoeSA9PSBXSFlfUkVUVVJOIHx8CiAgICAgICAgICAgICAgICAgICAgIHdoeSA9PSBXSFlfQ09OVElOVUUpCiAgICAgICAgICAgICAgICAgICAgIHJldHZhbCA9IFBPUCgpOwpAQCAtMTkxMiwyNDggKzE5NzYsMjgwIEBACiAgICAgICAgICAgICAgICAgICAgIGFzc2VydChiLT5iX3R5cGUgPT0gRVhDRVBUX0hBTkRMRVIpOwogICAgICAgICAgICAgICAgICAgICBVTldJTkRfRVhDRVBUX0hBTkRMRVIoYik7CiAgICAgICAgICAgICAgICAgICAgIHdoeSA9IFdIWV9OT1Q7CisgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihzdGF0dXMpOworICAgICAgICAgICAgICAgICAgICBESVNQQVRDSCgpOwogICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoc3RhdHVzKTsKKyAgICAgICAgICAgICAgICBnb3RvIGZhc3RfYmxvY2tfZW5kOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoUHlFeGNlcHRpb25DbGFzc19DaGVjayh2KSkgewotICAgICAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgICAgICB1ID0gUE9QKCk7Ci0gICAgICAgICAgICAgICAgUHlFcnJfUmVzdG9yZSh2LCB3LCB1KTsKLSAgICAgICAgICAgICAgICB3aHkgPSBXSFlfUkVSQUlTRTsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGVsc2UgaWYgKFB5RXhjZXB0aW9uQ2xhc3NfQ2hlY2soc3RhdHVzKSkgeworICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpleGMgPSBQT1AoKTsKKyAgICAgICAgICAgICAgICBQeU9iamVjdCAqdGIgPSBQT1AoKTsKKyAgICAgICAgICAgICAgICBQeUVycl9SZXN0b3JlKHN0YXR1cywgZXhjLCB0Yik7CisgICAgICAgICAgICAgICAgd2h5ID0gV0hZX0VYQ0VQVElPTjsKKyAgICAgICAgICAgICAgICBnb3RvIGZhc3RfYmxvY2tfZW5kOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAodiAhPSBQeV9Ob25lKSB7CisgICAgICAgICAgICBlbHNlIGlmIChzdGF0dXMgIT0gUHlfTm9uZSkgewogICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19TeXN0ZW1FcnJvciwKICAgICAgICAgICAgICAgICAgICAgIidmaW5hbGx5JyBwb3BzIGJhZCBleGNlcHRpb24iKTsKLSAgICAgICAgICAgICAgICB3aHkgPSBXSFlfRVhDRVBUSU9OOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihzdGF0dXMpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihzdGF0dXMpOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChMT0FEX0JVSUxEX0NMQVNTKQotICAgICAgICB7CisgICAgICAgIFRBUkdFVChMT0FEX0JVSUxEX0NMQVNTKSB7CiAgICAgICAgICAgICBfUHlfSURFTlRJRklFUihfX2J1aWxkX2NsYXNzX18pOwogCisgICAgICAgICAgICBQeU9iamVjdCAqYmM7CiAgICAgICAgICAgICBpZiAoUHlEaWN0X0NoZWNrRXhhY3QoZi0+Zl9idWlsdGlucykpIHsKLSAgICAgICAgICAgICAgICB4ID0gX1B5RGljdF9HZXRJdGVtSWQoZi0+Zl9idWlsdGlucywgJlB5SWRfX19idWlsZF9jbGFzc19fKTsKLSAgICAgICAgICAgICAgICBpZiAoeCA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgYmMgPSBfUHlEaWN0X0dldEl0ZW1JZChmLT5mX2J1aWx0aW5zLCAmUHlJZF9fX2J1aWxkX2NsYXNzX18pOworICAgICAgICAgICAgICAgIGlmIChiYyA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19OYW1lRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiX19idWlsZF9jbGFzc19fIG5vdCBmb3VuZCIpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgUHlfSU5DUkVGKHgpOworICAgICAgICAgICAgICAgIFB5X0lOQ1JFRihiYyk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBQeU9iamVjdCAqYnVpbGRfY2xhc3Nfc3RyID0gX1B5VW5pY29kZV9Gcm9tSWQoJlB5SWRfX19idWlsZF9jbGFzc19fKTsKICAgICAgICAgICAgICAgICBpZiAoYnVpbGRfY2xhc3Nfc3RyID09IE5VTEwpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIHggPSBQeU9iamVjdF9HZXRJdGVtKGYtPmZfYnVpbHRpbnMsIGJ1aWxkX2NsYXNzX3N0cik7Ci0gICAgICAgICAgICAgICAgaWYgKHggPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIGJjID0gUHlPYmplY3RfR2V0SXRlbShmLT5mX2J1aWx0aW5zLCBidWlsZF9jbGFzc19zdHIpOworICAgICAgICAgICAgICAgIGlmIChiYyA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0tleUVycm9yKSkKICAgICAgICAgICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19OYW1lRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl9fYnVpbGRfY2xhc3NfXyBub3QgZm91bmQiKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgUFVTSCh4KTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgUFVTSChiYyk7CisgICAgICAgICAgICBESVNQQVRDSCgpOwogICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKFNUT1JFX05BTUUpCi0gICAgICAgICAgICB3ID0gR0VUSVRFTShuYW1lcywgb3BhcmcpOwotICAgICAgICAgICAgdiA9IFBPUCgpOwotICAgICAgICAgICAgaWYgKCh4ID0gZi0+Zl9sb2NhbHMpICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBpZiAoUHlEaWN0X0NoZWNrRXhhY3QoeCkpCi0gICAgICAgICAgICAgICAgICAgIGVyciA9IFB5RGljdF9TZXRJdGVtKHgsIHcsIHYpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZXJyID0gUHlPYmplY3RfU2V0SXRlbSh4LCB3LCB2KTsKKyAgICAgICAgVEFSR0VUKFNUT1JFX05BTUUpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpuYW1lID0gR0VUSVRFTShuYW1lcywgb3BhcmcpOworICAgICAgICAgICAgUHlPYmplY3QgKnYgPSBQT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpucyA9IGYtPmZfbG9jYWxzOworICAgICAgICAgICAgaW50IGVycjsKKyAgICAgICAgICAgIGlmIChucyA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1N5c3RlbUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibm8gbG9jYWxzIGZvdW5kIHdoZW4gc3RvcmluZyAlUiIsIG5hbWUpOwogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgICAgICBpZiAoZXJyID09IDApIERJU1BBVENIKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19TeXN0ZW1FcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAibm8gbG9jYWxzIGZvdW5kIHdoZW4gc3RvcmluZyAlUiIsIHcpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoUHlEaWN0X0NoZWNrRXhhY3QobnMpKQorICAgICAgICAgICAgICAgIGVyciA9IFB5RGljdF9TZXRJdGVtKG5zLCBuYW1lLCB2KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBlcnIgPSBQeU9iamVjdF9TZXRJdGVtKG5zLCBuYW1lLCB2KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKKyAgICAgICAgICAgIGlmIChlcnIgIT0gMCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChERUxFVEVfTkFNRSkKLSAgICAgICAgICAgIHcgPSBHRVRJVEVNKG5hbWVzLCBvcGFyZyk7Ci0gICAgICAgICAgICBpZiAoKHggPSBmLT5mX2xvY2FscykgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIGlmICgoZXJyID0gUHlPYmplY3RfRGVsSXRlbSh4LCB3KSkgIT0gMCkKLSAgICAgICAgICAgICAgICAgICAgZm9ybWF0X2V4Y19jaGVja19hcmcoUHlFeGNfTmFtZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOQU1FX0VSUk9SX01TRywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdyk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIFRBUkdFVChERUxFVEVfTkFNRSkgeworICAgICAgICAgICAgUHlPYmplY3QgKm5hbWUgPSBHRVRJVEVNKG5hbWVzLCBvcGFyZyk7CisgICAgICAgICAgICBQeU9iamVjdCAqbnMgPSBmLT5mX2xvY2FsczsKKyAgICAgICAgICAgIGludCBlcnI7CisgICAgICAgICAgICBpZiAobnMgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19TeXN0ZW1FcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vIGxvY2FscyB3aGVuIGRlbGV0aW5nICVSIiwgbmFtZSk7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19TeXN0ZW1FcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAibm8gbG9jYWxzIHdoZW4gZGVsZXRpbmcgJVIiLCB3KTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZXJyID0gUHlPYmplY3RfRGVsSXRlbShucywgbmFtZSk7CisgICAgICAgICAgICBpZiAoZXJyICE9IDApIHsKKyAgICAgICAgICAgICAgICBmb3JtYXRfZXhjX2NoZWNrX2FyZyhQeUV4Y19OYW1lRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkFNRV9FUlJPUl9NU0csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSk7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAogICAgICAgICBQUkVESUNURURfV0lUSF9BUkcoVU5QQUNLX1NFUVVFTkNFKTsKLSAgICAgICAgVEFSR0VUKFVOUEFDS19TRVFVRU5DRSkKLSAgICAgICAgICAgIHYgPSBQT1AoKTsKLSAgICAgICAgICAgIGlmIChQeVR1cGxlX0NoZWNrRXhhY3QodikgJiYKLSAgICAgICAgICAgICAgICBQeVR1cGxlX0dFVF9TSVpFKHYpID09IG9wYXJnKSB7Ci0gICAgICAgICAgICAgICAgUHlPYmplY3QgKippdGVtcyA9IFwKLSAgICAgICAgICAgICAgICAgICAgKChQeVR1cGxlT2JqZWN0ICopdiktPm9iX2l0ZW07CisgICAgICAgIFRBUkdFVChVTlBBQ0tfU0VRVUVOQ0UpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpzZXEgPSBQT1AoKSwgKml0ZW0sICoqaXRlbXM7CisgICAgICAgICAgICBpZiAoUHlUdXBsZV9DaGVja0V4YWN0KHNlcSkgJiYKKyAgICAgICAgICAgICAgICBQeVR1cGxlX0dFVF9TSVpFKHNlcSkgPT0gb3BhcmcpIHsKKyAgICAgICAgICAgICAgICBpdGVtcyA9ICgoUHlUdXBsZU9iamVjdCAqKXNlcSktPm9iX2l0ZW07CiAgICAgICAgICAgICAgICAgd2hpbGUgKG9wYXJnLS0pIHsKLSAgICAgICAgICAgICAgICAgICAgdyA9IGl0ZW1zW29wYXJnXTsKLSAgICAgICAgICAgICAgICAgICAgUHlfSU5DUkVGKHcpOwotICAgICAgICAgICAgICAgICAgICBQVVNIKHcpOworICAgICAgICAgICAgICAgICAgICBpdGVtID0gaXRlbXNbb3BhcmddOworICAgICAgICAgICAgICAgICAgICBQeV9JTkNSRUYoaXRlbSk7CisgICAgICAgICAgICAgICAgICAgIFBVU0goaXRlbSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgICAgICBESVNQQVRDSCgpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChQeUxpc3RfQ2hlY2tFeGFjdCh2KSAmJgotICAgICAgICAgICAgICAgICAgICAgICBQeUxpc3RfR0VUX1NJWkUodikgPT0gb3BhcmcpIHsKLSAgICAgICAgICAgICAgICBQeU9iamVjdCAqKml0ZW1zID0gXAotICAgICAgICAgICAgICAgICAgICAoKFB5TGlzdE9iamVjdCAqKXYpLT5vYl9pdGVtOworICAgICAgICAgICAgfSBlbHNlIGlmIChQeUxpc3RfQ2hlY2tFeGFjdChzZXEpICYmCisgICAgICAgICAgICAgICAgICAgICAgIFB5TGlzdF9HRVRfU0laRShzZXEpID09IG9wYXJnKSB7CisgICAgICAgICAgICAgICAgaXRlbXMgPSAoKFB5TGlzdE9iamVjdCAqKXNlcSktPm9iX2l0ZW07CiAgICAgICAgICAgICAgICAgd2hpbGUgKG9wYXJnLS0pIHsKLSAgICAgICAgICAgICAgICAgICAgdyA9IGl0ZW1zW29wYXJnXTsKLSAgICAgICAgICAgICAgICAgICAgUHlfSU5DUkVGKHcpOwotICAgICAgICAgICAgICAgICAgICBQVVNIKHcpOworICAgICAgICAgICAgICAgICAgICBpdGVtID0gaXRlbXNbb3BhcmddOworICAgICAgICAgICAgICAgICAgICBQeV9JTkNSRUYoaXRlbSk7CisgICAgICAgICAgICAgICAgICAgIFBVU0goaXRlbSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIGlmICh1bnBhY2tfaXRlcmFibGUodiwgb3BhcmcsIC0xLAorICAgICAgICAgICAgfSBlbHNlIGlmICh1bnBhY2tfaXRlcmFibGUoc2VxLCBvcGFyZywgLTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFja19wb2ludGVyICsgb3BhcmcpKSB7CiAgICAgICAgICAgICAgICAgU1RBQ0tBREoob3BhcmcpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAvKiB1bnBhY2tfaXRlcmFibGUoKSByYWlzZWQgYW4gZXhjZXB0aW9uICovCi0gICAgICAgICAgICAgICAgd2h5ID0gV0hZX0VYQ0VQVElPTjsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoc2VxKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBQeV9ERUNSRUYoc2VxKTsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoVU5QQUNLX0VYKQotICAgICAgICB7CisgICAgICAgIFRBUkdFVChVTlBBQ0tfRVgpIHsKICAgICAgICAgICAgIGludCB0b3RhbGFyZ3MgPSAxICsgKG9wYXJnICYgMHhGRikgKyAob3BhcmcgPj4gOCk7Ci0gICAgICAgICAgICB2ID0gUE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqc2VxID0gUE9QKCk7CiAKLSAgICAgICAgICAgIGlmICh1bnBhY2tfaXRlcmFibGUodiwgb3BhcmcgJiAweEZGLCBvcGFyZyA+PiA4LAorICAgICAgICAgICAgaWYgKHVucGFja19pdGVyYWJsZShzZXEsIG9wYXJnICYgMHhGRiwgb3BhcmcgPj4gOCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tfcG9pbnRlciArIHRvdGFsYXJncykpIHsKICAgICAgICAgICAgICAgICBzdGFja19wb2ludGVyICs9IHRvdGFsYXJnczsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgd2h5ID0gV0hZX0VYQ0VQVElPTjsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoc2VxKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBQeV9ERUNSRUYoc2VxKTsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CiAgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoU1RPUkVfQVRUUikKLSAgICAgICAgICAgIHcgPSBHRVRJVEVNKG5hbWVzLCBvcGFyZyk7Ci0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICB1ID0gU0VDT05EKCk7CisgICAgICAgIFRBUkdFVChTVE9SRV9BVFRSKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqbmFtZSA9IEdFVElURU0obmFtZXMsIG9wYXJnKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpvd25lciA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnYgPSBTRUNPTkQoKTsKKyAgICAgICAgICAgIGludCBlcnI7CiAgICAgICAgICAgICBTVEFDS0FESigtMik7Ci0gICAgICAgICAgICBlcnIgPSBQeU9iamVjdF9TZXRBdHRyKHYsIHcsIHUpOyAvKiB2LncgPSB1ICovCisgICAgICAgICAgICBlcnIgPSBQeU9iamVjdF9TZXRBdHRyKG93bmVyLCBuYW1lLCB2KTsKICAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih1KTsKLSAgICAgICAgICAgIGlmIChlcnIgPT0gMCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgUHlfREVDUkVGKG93bmVyKTsKKyAgICAgICAgICAgIGlmIChlcnIgIT0gMCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChERUxFVEVfQVRUUikKLSAgICAgICAgICAgIHcgPSBHRVRJVEVNKG5hbWVzLCBvcGFyZyk7Ci0gICAgICAgICAgICB2ID0gUE9QKCk7Ci0gICAgICAgICAgICBlcnIgPSBQeU9iamVjdF9TZXRBdHRyKHYsIHcsIChQeU9iamVjdCAqKU5VTEwpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkZWwgdi53ICovCisgICAgICAgIFRBUkdFVChERUxFVEVfQVRUUikgeworICAgICAgICAgICAgUHlPYmplY3QgKm5hbWUgPSBHRVRJVEVNKG5hbWVzLCBvcGFyZyk7CisgICAgICAgICAgICBQeU9iamVjdCAqb3duZXIgPSBQT1AoKTsKKyAgICAgICAgICAgIGludCBlcnI7CisgICAgICAgICAgICBlcnIgPSBQeU9iamVjdF9TZXRBdHRyKG93bmVyLCBuYW1lLCAoUHlPYmplY3QgKilOVUxMKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihvd25lcik7CisgICAgICAgICAgICBpZiAoZXJyICE9IDApCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KKworICAgICAgICBUQVJHRVQoU1RPUkVfR0xPQkFMKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqbmFtZSA9IEdFVElURU0obmFtZXMsIG9wYXJnKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp2ID0gUE9QKCk7CisgICAgICAgICAgICBpbnQgZXJyOworICAgICAgICAgICAgZXJyID0gUHlEaWN0X1NldEl0ZW0oZi0+Zl9nbG9iYWxzLCBuYW1lLCB2KTsKICAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKGVyciAhPSAwKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKFNUT1JFX0dMT0JBTCkKLSAgICAgICAgICAgIHcgPSBHRVRJVEVNKG5hbWVzLCBvcGFyZyk7Ci0gICAgICAgICAgICB2ID0gUE9QKCk7Ci0gICAgICAgICAgICBlcnIgPSBQeURpY3RfU2V0SXRlbShmLT5mX2dsb2JhbHMsIHcsIHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgaWYgKGVyciA9PSAwKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgVEFSR0VUKERFTEVURV9HTE9CQUwpCi0gICAgICAgICAgICB3ID0gR0VUSVRFTShuYW1lcywgb3BhcmcpOwotICAgICAgICAgICAgaWYgKChlcnIgPSBQeURpY3RfRGVsSXRlbShmLT5mX2dsb2JhbHMsIHcpKSAhPSAwKQorICAgICAgICBUQVJHRVQoREVMRVRFX0dMT0JBTCkgeworICAgICAgICAgICAgUHlPYmplY3QgKm5hbWUgPSBHRVRJVEVNKG5hbWVzLCBvcGFyZyk7CisgICAgICAgICAgICBpbnQgZXJyOworICAgICAgICAgICAgZXJyID0gUHlEaWN0X0RlbEl0ZW0oZi0+Zl9nbG9iYWxzLCBuYW1lKTsKKyAgICAgICAgICAgIGlmIChlcnIgIT0gMCkgewogICAgICAgICAgICAgICAgIGZvcm1hdF9leGNfY2hlY2tfYXJnKAotICAgICAgICAgICAgICAgICAgICBQeUV4Y19OYW1lRXJyb3IsIEdMT0JBTF9OQU1FX0VSUk9SX01TRywgdyk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBUQVJHRVQoTE9BRF9OQU1FKQotICAgICAgICAgICAgdyA9IEdFVElURU0obmFtZXMsIG9wYXJnKTsKLSAgICAgICAgICAgIGlmICgodiA9IGYtPmZfbG9jYWxzKSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1N5c3RlbUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibm8gbG9jYWxzIHdoZW4gbG9hZGluZyAlUiIsIHcpOwotICAgICAgICAgICAgICAgIHdoeSA9IFdIWV9FWENFUFRJT047Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIFB5RXhjX05hbWVFcnJvciwgTkFNRV9FUlJPUl9NU0csIG5hbWUpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoUHlEaWN0X0NoZWNrRXhhY3QodikpIHsKLSAgICAgICAgICAgICAgICB4ID0gUHlEaWN0X0dldEl0ZW0odiwgdyk7Ci0gICAgICAgICAgICAgICAgUHlfWElOQ1JFRih4KTsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KKworICAgICAgICBUQVJHRVQoTE9BRF9OQU1FKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqbmFtZSA9IEdFVElURU0obmFtZXMsIG9wYXJnKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpsb2NhbHMgPSBmLT5mX2xvY2FsczsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp2OworICAgICAgICAgICAgaWYgKGxvY2FscyA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1N5c3RlbUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibm8gbG9jYWxzIHdoZW4gbG9hZGluZyAlUiIsIG5hbWUpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoUHlEaWN0X0NoZWNrRXhhY3QobG9jYWxzKSkgeworICAgICAgICAgICAgICAgIHYgPSBQeURpY3RfR2V0SXRlbShsb2NhbHMsIG5hbWUpOworICAgICAgICAgICAgICAgIFB5X1hJTkNSRUYodik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICB4ID0gUHlPYmplY3RfR2V0SXRlbSh2LCB3KTsKLSAgICAgICAgICAgICAgICBpZiAoeCA9PSBOVUxMICYmIF9QeUVycl9PQ0NVUlJFRCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5RXhjX0tleUVycm9yKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIHYgPSBQeU9iamVjdF9HZXRJdGVtKGxvY2FscywgbmFtZSk7CisgICAgICAgICAgICAgICAgaWYgKHYgPT0gTlVMTCAmJiBfUHlFcnJfT0NDVVJSRUQoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIVB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfS2V5RXJyb3IpKQorICAgICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoeCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgeCA9IFB5RGljdF9HZXRJdGVtKGYtPmZfZ2xvYmFscywgdyk7Ci0gICAgICAgICAgICAgICAgUHlfWElOQ1JFRih4KTsKLSAgICAgICAgICAgICAgICBpZiAoeCA9PSBOVUxMKSB7CisgICAgICAgICAgICBpZiAodiA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgdiA9IFB5RGljdF9HZXRJdGVtKGYtPmZfZ2xvYmFscywgbmFtZSk7CisgICAgICAgICAgICAgICAgUHlfWElOQ1JFRih2KTsKKyAgICAgICAgICAgICAgICBpZiAodiA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChQeURpY3RfQ2hlY2tFeGFjdChmLT5mX2J1aWx0aW5zKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgeCA9IFB5RGljdF9HZXRJdGVtKGYtPmZfYnVpbHRpbnMsIHcpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHggPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICAgICAgdiA9IFB5RGljdF9HZXRJdGVtKGYtPmZfYnVpbHRpbnMsIG5hbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHYgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdF9leGNfY2hlY2tfYXJnKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5RXhjX05hbWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOQU1FX0VSUk9SX01TRywgdyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkFNRV9FUlJPUl9NU0csIG5hbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBQeV9JTkNSRUYoeCk7CisgICAgICAgICAgICAgICAgICAgICAgICBQeV9JTkNSRUYodik7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB4ID0gUHlPYmplY3RfR2V0SXRlbShmLT5mX2J1aWx0aW5zLCB3KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4ID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHYgPSBQeU9iamVjdF9HZXRJdGVtKGYtPmZfYnVpbHRpbnMsIG5hbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHYgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0tleUVycm9yKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0X2V4Y19jaGVja19hcmcoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5RXhjX05hbWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkFNRV9FUlJPUl9NU0csIHcpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOQU1FX0VSUk9SX01TRywgbmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFBVU0goeCk7CisgICAgICAgICAgICBQVVNIKHYpOwogICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChMT0FEX0dMT0JBTCkKLSAgICAgICAgICAgIHcgPSBHRVRJVEVNKG5hbWVzLCBvcGFyZyk7CisgICAgICAgIFRBUkdFVChMT0FEX0dMT0JBTCkgeworICAgICAgICAgICAgUHlPYmplY3QgKm5hbWUgPSBHRVRJVEVNKG5hbWVzLCBvcGFyZyk7CisgICAgICAgICAgICBQeU9iamVjdCAqdjsKICAgICAgICAgICAgIGlmIChQeURpY3RfQ2hlY2tFeGFjdChmLT5mX2dsb2JhbHMpCiAgICAgICAgICAgICAgICAgJiYgUHlEaWN0X0NoZWNrRXhhY3QoZi0+Zl9idWlsdGlucykpIHsKLSAgICAgICAgICAgICAgICB4ID0gX1B5RGljdF9Mb2FkR2xvYmFsKChQeURpY3RPYmplY3QgKilmLT5mX2dsb2JhbHMsCisgICAgICAgICAgICAgICAgdiA9IF9QeURpY3RfTG9hZEdsb2JhbCgoUHlEaWN0T2JqZWN0ICopZi0+Zl9nbG9iYWxzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFB5RGljdE9iamVjdCAqKWYtPmZfYnVpbHRpbnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3KTsKLSAgICAgICAgICAgICAgICBpZiAoeCA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lKTsKKyAgICAgICAgICAgICAgICBpZiAodiA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICghX1B5RXJyX09DQ1VSUkVEKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXRfZXhjX2NoZWNrX2FyZyhQeUV4Y19OYW1lRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTE9CQUxfTkFNRV9FUlJPUl9NU0csIHcpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BTUVfRVJST1JfTVNHLCBuYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgUHlfSU5DUkVGKHgpOworICAgICAgICAgICAgICAgIFB5X0lOQ1JFRih2KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIC8qIFNsb3ctcGF0aCBpZiBnbG9iYWxzIG9yIGJ1aWx0aW5zIGlzIG5vdCBhIGRpY3QgKi8KLSAgICAgICAgICAgICAgICB4ID0gUHlPYmplY3RfR2V0SXRlbShmLT5mX2dsb2JhbHMsIHcpOwotICAgICAgICAgICAgICAgIGlmICh4ID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgeCA9IFB5T2JqZWN0X0dldEl0ZW0oZi0+Zl9idWlsdGlucywgdyk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh4ID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICB2ID0gUHlPYmplY3RfR2V0SXRlbShmLT5mX2dsb2JhbHMsIG5hbWUpOworICAgICAgICAgICAgICAgIGlmICh2ID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgdiA9IFB5T2JqZWN0X0dldEl0ZW0oZi0+Zl9idWlsdGlucywgbmFtZSk7CisgICAgICAgICAgICAgICAgICAgIGlmICh2ID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0tleUVycm9yKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXRfZXhjX2NoZWNrX2FyZygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUV4Y19OYW1lRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xPQkFMX05BTUVfRVJST1JfTVNHLCB3KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BTUVfRVJST1JfTVNHLCBuYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBQVVNIKHgpOworICAgICAgICAgICAgUFVTSCh2KTsKICAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoREVMRVRFX0ZBU1QpCi0gICAgICAgICAgICB4ID0gR0VUTE9DQUwob3BhcmcpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgeworICAgICAgICBUQVJHRVQoREVMRVRFX0ZBU1QpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp2ID0gR0VUTE9DQUwob3BhcmcpOworICAgICAgICAgICAgaWYgKHYgIT0gTlVMTCkgewogICAgICAgICAgICAgICAgIFNFVExPQ0FMKG9wYXJnLCBOVUxMKTsKICAgICAgICAgICAgICAgICBESVNQQVRDSCgpOwogICAgICAgICAgICAgfQpAQCAtMjE2MiwyNTIgKzIyNTgsMzEyIEBACiAgICAgICAgICAgICAgICAgVU5CT1VORExPQ0FMX0VSUk9SX01TRywKICAgICAgICAgICAgICAgICBQeVR1cGxlX0dldEl0ZW0oY28tPmNvX3Zhcm5hbWVzLCBvcGFyZykKICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKERFTEVURV9ERVJFRikKLSAgICAgICAgICAgIHggPSBmcmVldmFyc1tvcGFyZ107Ci0gICAgICAgICAgICBpZiAoUHlDZWxsX0dFVCh4KSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgUHlDZWxsX1NldCh4LCBOVUxMKTsKKyAgICAgICAgVEFSR0VUKERFTEVURV9ERVJFRikgeworICAgICAgICAgICAgUHlPYmplY3QgKmNlbGwgPSBmcmVldmFyc1tvcGFyZ107CisgICAgICAgICAgICBpZiAoUHlDZWxsX0dFVChjZWxsKSAhPSBOVUxMKSB7CisgICAgICAgICAgICAgICAgUHlDZWxsX1NldChjZWxsLCBOVUxMKTsKICAgICAgICAgICAgICAgICBESVNQQVRDSCgpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZXJyID0gLTE7CiAgICAgICAgICAgICBmb3JtYXRfZXhjX3VuYm91bmQoY28sIG9wYXJnKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChMT0FEX0NMT1NVUkUpCi0gICAgICAgICAgICB4ID0gZnJlZXZhcnNbb3BhcmddOwotICAgICAgICAgICAgUHlfSU5DUkVGKHgpOwotICAgICAgICAgICAgUFVTSCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBUQVJHRVQoTE9BRF9ERVJFRikKLSAgICAgICAgICAgIHggPSBmcmVldmFyc1tvcGFyZ107Ci0gICAgICAgICAgICB3ID0gUHlDZWxsX0dldCh4KTsKLSAgICAgICAgICAgIGlmICh3ICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBQVVNIKHcpOwotICAgICAgICAgICAgICAgIERJU1BBVENIKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlcnIgPSAtMTsKLSAgICAgICAgICAgIGZvcm1hdF9leGNfdW5ib3VuZChjbywgb3BhcmcpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgVEFSR0VUKFNUT1JFX0RFUkVGKQotICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgeCA9IGZyZWV2YXJzW29wYXJnXTsKLSAgICAgICAgICAgIFB5Q2VsbF9TZXQoeCwgdyk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7CisgICAgICAgIFRBUkdFVChMT0FEX0NMT1NVUkUpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpjZWxsID0gZnJlZXZhcnNbb3BhcmddOworICAgICAgICAgICAgUHlfSU5DUkVGKGNlbGwpOworICAgICAgICAgICAgUFVTSChjZWxsKTsKICAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoQlVJTERfVFVQTEUpCi0gICAgICAgICAgICB4ID0gUHlUdXBsZV9OZXcob3BhcmcpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIGZvciAoOyAtLW9wYXJnID49IDA7KSB7Ci0gICAgICAgICAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgICAgICAgICAgUHlUdXBsZV9TRVRfSVRFTSh4LCBvcGFyZywgdyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIFBVU0goeCk7Ci0gICAgICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgVEFSR0VUKExPQURfQ0xBU1NERVJFRikgeworICAgICAgICAgICAgUHlPYmplY3QgKm5hbWUsICp2YWx1ZSwgKmxvY2FscyA9IGYtPmZfbG9jYWxzOworICAgICAgICAgICAgUHlfc3NpemVfdCBpZHg7CisgICAgICAgICAgICBhc3NlcnQobG9jYWxzKTsKKyAgICAgICAgICAgIGFzc2VydChvcGFyZyA+PSBQeVR1cGxlX0dFVF9TSVpFKGNvLT5jb19jZWxsdmFycykpOworICAgICAgICAgICAgaWR4ID0gb3BhcmcgLSBQeVR1cGxlX0dFVF9TSVpFKGNvLT5jb19jZWxsdmFycyk7CisgICAgICAgICAgICBhc3NlcnQoaWR4ID49IDAgJiYgaWR4IDwgUHlUdXBsZV9HRVRfU0laRShjby0+Y29fZnJlZXZhcnMpKTsKKyAgICAgICAgICAgIG5hbWUgPSBQeVR1cGxlX0dFVF9JVEVNKGNvLT5jb19mcmVldmFycywgaWR4KTsKKyAgICAgICAgICAgIGlmIChQeURpY3RfQ2hlY2tFeGFjdChsb2NhbHMpKSB7CisgICAgICAgICAgICAgICAgdmFsdWUgPSBQeURpY3RfR2V0SXRlbShsb2NhbHMsIG5hbWUpOworICAgICAgICAgICAgICAgIFB5X1hJTkNSRUYodmFsdWUpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgVEFSR0VUKEJVSUxEX0xJU1QpCi0gICAgICAgICAgICB4ID0gIFB5TGlzdF9OZXcob3BhcmcpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIGZvciAoOyAtLW9wYXJnID49IDA7KSB7Ci0gICAgICAgICAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgICAgICAgICAgUHlMaXN0X1NFVF9JVEVNKHgsIG9wYXJnLCB3KTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHZhbHVlID0gUHlPYmplY3RfR2V0SXRlbShsb2NhbHMsIG5hbWUpOworICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBOVUxMICYmIFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0tleUVycm9yKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIFBVU0goeCk7Ci0gICAgICAgICAgICAgICAgRElTUEFUQ0goKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIFRBUkdFVChCVUlMRF9TRVQpCi0gICAgICAgICAgICB4ID0gUHlTZXRfTmV3KE5VTEwpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIGZvciAoOyAtLW9wYXJnID49IDA7KSB7Ci0gICAgICAgICAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGVyciA9PSAwKQotICAgICAgICAgICAgICAgICAgICAgICAgZXJyID0gUHlTZXRfQWRkKHgsIHcpOwotICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYodyk7CisgICAgICAgICAgICBpZiAoIXZhbHVlKSB7CisgICAgICAgICAgICAgICAgUHlPYmplY3QgKmNlbGwgPSBmcmVldmFyc1tvcGFyZ107CisgICAgICAgICAgICAgICAgdmFsdWUgPSBQeUNlbGxfR0VUKGNlbGwpOworICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgIGZvcm1hdF9leGNfdW5ib3VuZChjbywgb3BhcmcpOworICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoZXJyICE9IDApIHsKLSAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHgpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgUFVTSCh4KTsKLSAgICAgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICAgICAgICAgIFB5X0lOQ1JFRih2YWx1ZSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIFBVU0godmFsdWUpOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChCVUlMRF9NQVApCi0gICAgICAgICAgICB4ID0gX1B5RGljdF9OZXdQcmVzaXplZCgoUHlfc3NpemVfdClvcGFyZyk7Ci0gICAgICAgICAgICBQVVNIKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIFRBUkdFVChTVE9SRV9NQVApCi0gICAgICAgICAgICB3ID0gVE9QKCk7ICAgICAvKiBrZXkgKi8KLSAgICAgICAgICAgIHUgPSBTRUNPTkQoKTsgIC8qIHZhbHVlICovCi0gICAgICAgICAgICB2ID0gVEhJUkQoKTsgICAvKiBkaWN0ICovCi0gICAgICAgICAgICBTVEFDS0FESigtMik7Ci0gICAgICAgICAgICBhc3NlcnQgKFB5RGljdF9DaGVja0V4YWN0KHYpKTsKLSAgICAgICAgICAgIGVyciA9IFB5RGljdF9TZXRJdGVtKHYsIHcsIHUpOyAgLyogdlt3XSA9IHUgKi8KLSAgICAgICAgICAgIFB5X0RFQ1JFRih1KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIGlmIChlcnIgPT0gMCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIFRBUkdFVChNQVBfQUREKQotICAgICAgICAgICAgdyA9IFRPUCgpOyAgICAgLyoga2V5ICovCi0gICAgICAgICAgICB1ID0gU0VDT05EKCk7ICAvKiB2YWx1ZSAqLwotICAgICAgICAgICAgU1RBQ0tBREooLTIpOwotICAgICAgICAgICAgdiA9IHN0YWNrX3BvaW50ZXJbLW9wYXJnXTsgIC8qIGRpY3QgKi8KLSAgICAgICAgICAgIGFzc2VydCAoUHlEaWN0X0NoZWNrRXhhY3QodikpOwotICAgICAgICAgICAgZXJyID0gUHlEaWN0X1NldEl0ZW0odiwgdywgdSk7ICAvKiB2W3ddID0gdSAqLwotICAgICAgICAgICAgUHlfREVDUkVGKHUpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgaWYgKGVyciA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgUFJFRElDVChKVU1QX0FCU09MVVRFKTsKLSAgICAgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICBUQVJHRVQoTE9BRF9ERVJFRikgeworICAgICAgICAgICAgUHlPYmplY3QgKmNlbGwgPSBmcmVldmFyc1tvcGFyZ107CisgICAgICAgICAgICBQeU9iamVjdCAqdmFsdWUgPSBQeUNlbGxfR0VUKGNlbGwpOworICAgICAgICAgICAgaWYgKHZhbHVlID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBmb3JtYXRfZXhjX3VuYm91bmQoY28sIG9wYXJnKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBQeV9JTkNSRUYodmFsdWUpOworICAgICAgICAgICAgUFVTSCh2YWx1ZSk7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKExPQURfQVRUUikKLSAgICAgICAgICAgIHcgPSBHRVRJVEVNKG5hbWVzLCBvcGFyZyk7Ci0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICB4ID0gUHlPYmplY3RfR2V0QXR0cih2LCB3KTsKKyAgICAgICAgVEFSR0VUKFNUT1JFX0RFUkVGKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqdiA9IFBPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmNlbGwgPSBmcmVldmFyc1tvcGFyZ107CisgICAgICAgICAgICBQeUNlbGxfU2V0KGNlbGwsIHYpOwogICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgU0VUX1RPUCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoQ09NUEFSRV9PUCkKLSAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIHggPSBjbXBfb3V0Y29tZShvcGFyZywgdiwgdyk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgaWYgKHggPT0gTlVMTCkgYnJlYWs7CisgICAgICAgIFRBUkdFVChCVUlMRF9UVVBMRSkgeworICAgICAgICAgICAgUHlPYmplY3QgKnR1cCA9IFB5VHVwbGVfTmV3KG9wYXJnKTsKKyAgICAgICAgICAgIGlmICh0dXAgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgd2hpbGUgKC0tb3BhcmcgPj0gMCkgeworICAgICAgICAgICAgICAgIFB5T2JqZWN0ICppdGVtID0gUE9QKCk7CisgICAgICAgICAgICAgICAgUHlUdXBsZV9TRVRfSVRFTSh0dXAsIG9wYXJnLCBpdGVtKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFBVU0godHVwKTsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KKworICAgICAgICBUQVJHRVQoQlVJTERfTElTVCkgeworICAgICAgICAgICAgUHlPYmplY3QgKmxpc3QgPSAgUHlMaXN0X05ldyhvcGFyZyk7CisgICAgICAgICAgICBpZiAobGlzdCA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB3aGlsZSAoLS1vcGFyZyA+PSAwKSB7CisgICAgICAgICAgICAgICAgUHlPYmplY3QgKml0ZW0gPSBQT1AoKTsKKyAgICAgICAgICAgICAgICBQeUxpc3RfU0VUX0lURU0obGlzdCwgb3BhcmcsIGl0ZW0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgUFVTSChsaXN0KTsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KKworICAgICAgICBUQVJHRVQoQlVJTERfU0VUKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqc2V0ID0gUHlTZXRfTmV3KE5VTEwpOworICAgICAgICAgICAgaW50IGVyciA9IDA7CisgICAgICAgICAgICBpZiAoc2V0ID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIHdoaWxlICgtLW9wYXJnID49IDApIHsKKyAgICAgICAgICAgICAgICBQeU9iamVjdCAqaXRlbSA9IFBPUCgpOworICAgICAgICAgICAgICAgIGlmIChlcnIgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgZXJyID0gUHlTZXRfQWRkKHNldCwgaXRlbSk7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGl0ZW0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGVyciAhPSAwKSB7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKHNldCk7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFBVU0goc2V0KTsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KKworICAgICAgICBUQVJHRVQoQlVJTERfTUFQKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqbWFwID0gX1B5RGljdF9OZXdQcmVzaXplZCgoUHlfc3NpemVfdClvcGFyZyk7CisgICAgICAgICAgICBpZiAobWFwID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIFBVU0gobWFwKTsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KKworICAgICAgICBUQVJHRVQoU1RPUkVfTUFQKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqa2V5ID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqdmFsdWUgPSBTRUNPTkQoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICptYXAgPSBUSElSRCgpOworICAgICAgICAgICAgaW50IGVycjsKKyAgICAgICAgICAgIFNUQUNLQURKKC0yKTsKKyAgICAgICAgICAgIGFzc2VydChQeURpY3RfQ2hlY2tFeGFjdChtYXApKTsKKyAgICAgICAgICAgIGVyciA9IFB5RGljdF9TZXRJdGVtKG1hcCwga2V5LCB2YWx1ZSk7CisgICAgICAgICAgICBQeV9ERUNSRUYodmFsdWUpOworICAgICAgICAgICAgUHlfREVDUkVGKGtleSk7CisgICAgICAgICAgICBpZiAoZXJyICE9IDApCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KKworICAgICAgICBUQVJHRVQoTUFQX0FERCkgeworICAgICAgICAgICAgUHlPYmplY3QgKmtleSA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnZhbHVlID0gU0VDT05EKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqbWFwOworICAgICAgICAgICAgaW50IGVycjsKKyAgICAgICAgICAgIFNUQUNLQURKKC0yKTsKKyAgICAgICAgICAgIG1hcCA9IHN0YWNrX3BvaW50ZXJbLW9wYXJnXTsgIC8qIGRpY3QgKi8KKyAgICAgICAgICAgIGFzc2VydChQeURpY3RfQ2hlY2tFeGFjdChtYXApKTsKKyAgICAgICAgICAgIGVyciA9IFB5RGljdF9TZXRJdGVtKG1hcCwga2V5LCB2YWx1ZSk7ICAvKiB2W3ddID0gdSAqLworICAgICAgICAgICAgUHlfREVDUkVGKHZhbHVlKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihrZXkpOworICAgICAgICAgICAgaWYgKGVyciAhPSAwKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBQUkVESUNUKEpVTVBfQUJTT0xVVEUpOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQorCisgICAgICAgIFRBUkdFVChMT0FEX0FUVFIpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpuYW1lID0gR0VUSVRFTShuYW1lcywgb3BhcmcpOworICAgICAgICAgICAgUHlPYmplY3QgKm93bmVyID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqcmVzID0gUHlPYmplY3RfR2V0QXR0cihvd25lciwgbmFtZSk7CisgICAgICAgICAgICBQeV9ERUNSRUYob3duZXIpOworICAgICAgICAgICAgU0VUX1RPUChyZXMpOworICAgICAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CisKKyAgICAgICAgVEFSR0VUKENPTVBBUkVfT1ApIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyaWdodCA9IFBPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmxlZnQgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyZXMgPSBjbXBfb3V0Y29tZShvcGFyZywgbGVmdCwgcmlnaHQpOworICAgICAgICAgICAgUHlfREVDUkVGKGxlZnQpOworICAgICAgICAgICAgUHlfREVDUkVGKHJpZ2h0KTsKKyAgICAgICAgICAgIFNFVF9UT1AocmVzKTsKKyAgICAgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgUFJFRElDVChQT1BfSlVNUF9JRl9GQUxTRSk7CiAgICAgICAgICAgICBQUkVESUNUKFBPUF9KVU1QX0lGX1RSVUUpOwogICAgICAgICAgICAgRElTUEFUQ0goKTsKLQotICAgICAgICBUQVJHRVQoSU1QT1JUX05BTUUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIF9QeV9JREVOVElGSUVSKF9faW1wb3J0X18pOwotICAgICAgICAgICAgdyA9IEdFVElURU0obmFtZXMsIG9wYXJnKTsKLSAgICAgICAgICAgIHggPSBfUHlEaWN0X0dldEl0ZW1JZChmLT5mX2J1aWx0aW5zLCAmUHlJZF9fX2ltcG9ydF9fKTsKLSAgICAgICAgICAgIGlmICh4ID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfSW1wb3J0RXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJfX2ltcG9ydF9fIG5vdCBmb3VuZCIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgUHlfSU5DUkVGKHgpOwotICAgICAgICAgICAgdiA9IFBPUCgpOwotICAgICAgICAgICAgdSA9IFRPUCgpOwotICAgICAgICAgICAgaWYgKFB5TG9uZ19Bc0xvbmcodSkgIT0gLTEgfHwgUHlFcnJfT2NjdXJyZWQoKSkKLSAgICAgICAgICAgICAgICB3ID0gUHlUdXBsZV9QYWNrKDUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmLT5mX2dsb2JhbHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZi0+Zl9sb2NhbHMgPT0gTlVMTCA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfTm9uZSA6IGYtPmZfbG9jYWxzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgdyA9IFB5VHVwbGVfUGFjayg0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZi0+Zl9nbG9iYWxzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYtPmZfbG9jYWxzID09IE5VTEwgPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X05vbmUgOiBmLT5mX2xvY2FscywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih1KTsKLSAgICAgICAgICAgIGlmICh3ID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICB1ID0gUE9QKCk7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKHgpOwotICAgICAgICAgICAgICAgIHggPSBOVUxMOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgUkVBRF9USU1FU1RBTVAoaW50cjApOwotICAgICAgICAgICAgdiA9IHg7Ci0gICAgICAgICAgICB4ID0gUHlFdmFsX0NhbGxPYmplY3Qodiwgdyk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBSRUFEX1RJTUVTVEFNUChpbnRyMSk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKElNUE9SVF9TVEFSKQotICAgICAgICAgICAgdiA9IFBPUCgpOwotICAgICAgICAgICAgUHlGcmFtZV9GYXN0VG9Mb2NhbHMoZik7Ci0gICAgICAgICAgICBpZiAoKHggPSBmLT5mX2xvY2FscykgPT0gTlVMTCkgeworICAgICAgICBUQVJHRVQoSU1QT1JUX05BTUUpIHsKKyAgICAgICAgICAgIF9QeV9JREVOVElGSUVSKF9faW1wb3J0X18pOworICAgICAgICAgICAgUHlPYmplY3QgKm5hbWUgPSBHRVRJVEVNKG5hbWVzLCBvcGFyZyk7CisgICAgICAgICAgICBQeU9iamVjdCAqZnVuYyA9IF9QeURpY3RfR2V0SXRlbUlkKGYtPmZfYnVpbHRpbnMsICZQeUlkX19faW1wb3J0X18pOworICAgICAgICAgICAgUHlPYmplY3QgKmZyb20sICpsZXZlbCwgKmFyZ3MsICpyZXM7CisgICAgICAgICAgICBpZiAoZnVuYyA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0ltcG9ydEVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiX19pbXBvcnRfXyBub3QgZm91bmQiKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQorICAgICAgICAgICAgUHlfSU5DUkVGKGZ1bmMpOworICAgICAgICAgICAgZnJvbSA9IFBPUCgpOworICAgICAgICAgICAgbGV2ZWwgPSBUT1AoKTsKKyAgICAgICAgICAgIGlmIChQeUxvbmdfQXNMb25nKGxldmVsKSAhPSAtMSB8fCBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICAgICAgIGFyZ3MgPSBQeVR1cGxlX1BhY2soNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYtPmZfZ2xvYmFscywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmLT5mX2xvY2FscyA9PSBOVUxMID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9Ob25lIDogZi0+Zl9sb2NhbHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYXJncyA9IFB5VHVwbGVfUGFjayg0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZi0+Zl9nbG9iYWxzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYtPmZfbG9jYWxzID09IE5VTEwgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X05vbmUgOiBmLT5mX2xvY2FscywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihsZXZlbCk7CisgICAgICAgICAgICBQeV9ERUNSRUYoZnJvbSk7CisgICAgICAgICAgICBpZiAoYXJncyA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGZ1bmMpOworICAgICAgICAgICAgICAgIFNUQUNLQURKKC0xKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQorICAgICAgICAgICAgUkVBRF9USU1FU1RBTVAoaW50cjApOworICAgICAgICAgICAgcmVzID0gUHlFdmFsX0NhbGxPYmplY3QoZnVuYywgYXJncyk7CisgICAgICAgICAgICBSRUFEX1RJTUVTVEFNUChpbnRyMSk7CisgICAgICAgICAgICBQeV9ERUNSRUYoYXJncyk7CisgICAgICAgICAgICBQeV9ERUNSRUYoZnVuYyk7CisgICAgICAgICAgICBTRVRfVE9QKHJlcyk7CisgICAgICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KKworICAgICAgICBUQVJHRVQoSU1QT1JUX1NUQVIpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpmcm9tID0gUE9QKCksICpsb2NhbHM7CisgICAgICAgICAgICBpbnQgZXJyOworICAgICAgICAgICAgaWYgKFB5RnJhbWVfRmFzdFRvTG9jYWxzV2l0aEVycm9yKGYpIDwgMCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworCisgICAgICAgICAgICBsb2NhbHMgPSBmLT5mX2xvY2FsczsKKyAgICAgICAgICAgIGlmIChsb2NhbHMgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19TeXN0ZW1FcnJvciwKICAgICAgICAgICAgICAgICAgICAgIm5vIGxvY2FscyBmb3VuZCBkdXJpbmcgJ2ltcG9ydCAqJyIpOwotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBSRUFEX1RJTUVTVEFNUChpbnRyMCk7Ci0gICAgICAgICAgICBlcnIgPSBpbXBvcnRfYWxsX2Zyb20oeCwgdik7CisgICAgICAgICAgICBlcnIgPSBpbXBvcnRfYWxsX2Zyb20obG9jYWxzLCBmcm9tKTsKICAgICAgICAgICAgIFJFQURfVElNRVNUQU1QKGludHIxKTsKICAgICAgICAgICAgIFB5RnJhbWVfTG9jYWxzVG9GYXN0KGYsIDApOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgaWYgKGVyciA9PSAwKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBQeV9ERUNSRUYoZnJvbSk7CisgICAgICAgICAgICBpZiAoZXJyICE9IDApCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoSU1QT1JUX0ZST00pCi0gICAgICAgICAgICB3ID0gR0VUSVRFTShuYW1lcywgb3BhcmcpOwotICAgICAgICAgICAgdiA9IFRPUCgpOworICAgICAgICBUQVJHRVQoSU1QT1JUX0ZST00pIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpuYW1lID0gR0VUSVRFTShuYW1lcywgb3BhcmcpOworICAgICAgICAgICAgUHlPYmplY3QgKmZyb20gPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyZXM7CiAgICAgICAgICAgICBSRUFEX1RJTUVTVEFNUChpbnRyMCk7Ci0gICAgICAgICAgICB4ID0gaW1wb3J0X2Zyb20odiwgdyk7CisgICAgICAgICAgICByZXMgPSBpbXBvcnRfZnJvbShmcm9tLCBuYW1lKTsKICAgICAgICAgICAgIFJFQURfVElNRVNUQU1QKGludHIxKTsKLSAgICAgICAgICAgIFBVU0goeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBQVVNIKHJlcyk7CisgICAgICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoSlVNUF9GT1JXQVJEKQorICAgICAgICBUQVJHRVQoSlVNUF9GT1JXQVJEKSB7CiAgICAgICAgICAgICBKVU1QQlkob3BhcmcpOwogICAgICAgICAgICAgRkFTVF9ESVNQQVRDSCgpOworICAgICAgICB9CiAKICAgICAgICAgUFJFRElDVEVEX1dJVEhfQVJHKFBPUF9KVU1QX0lGX0ZBTFNFKTsKLSAgICAgICAgVEFSR0VUKFBPUF9KVU1QX0lGX0ZBTFNFKQotICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgaWYgKHcgPT0gUHlfVHJ1ZSkgewotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKKyAgICAgICAgVEFSR0VUKFBPUF9KVU1QX0lGX0ZBTFNFKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqY29uZCA9IFBPUCgpOworICAgICAgICAgICAgaW50IGVycjsKKyAgICAgICAgICAgIGlmIChjb25kID09IFB5X1RydWUpIHsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoY29uZCk7CiAgICAgICAgICAgICAgICAgRkFTVF9ESVNQQVRDSCgpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHcgPT0gUHlfRmFsc2UpIHsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYodyk7CisgICAgICAgICAgICBpZiAoY29uZCA9PSBQeV9GYWxzZSkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihjb25kKTsKICAgICAgICAgICAgICAgICBKVU1QVE8ob3BhcmcpOwogICAgICAgICAgICAgICAgIEZBU1RfRElTUEFUQ0goKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVyciA9IFB5T2JqZWN0X0lzVHJ1ZSh3KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKKyAgICAgICAgICAgIGVyciA9IFB5T2JqZWN0X0lzVHJ1ZShjb25kKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihjb25kKTsKICAgICAgICAgICAgIGlmIChlcnIgPiAwKQogICAgICAgICAgICAgICAgIGVyciA9IDA7CiAgICAgICAgICAgICBlbHNlIGlmIChlcnIgPT0gMCkKICAgICAgICAgICAgICAgICBKVU1QVE8ob3BhcmcpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKICAgICAgICAgUFJFRElDVEVEX1dJVEhfQVJHKFBPUF9KVU1QX0lGX1RSVUUpOwotICAgICAgICBUQVJHRVQoUE9QX0pVTVBfSUZfVFJVRSkKLSAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgIGlmICh3ID09IFB5X0ZhbHNlKSB7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKHcpOworICAgICAgICBUQVJHRVQoUE9QX0pVTVBfSUZfVFJVRSkgeworICAgICAgICAgICAgUHlPYmplY3QgKmNvbmQgPSBQT1AoKTsKKyAgICAgICAgICAgIGludCBlcnI7CisgICAgICAgICAgICBpZiAoY29uZCA9PSBQeV9GYWxzZSkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihjb25kKTsKICAgICAgICAgICAgICAgICBGQVNUX0RJU1BBVENIKCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAodyA9PSBQeV9UcnVlKSB7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKHcpOworICAgICAgICAgICAgaWYgKGNvbmQgPT0gUHlfVHJ1ZSkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihjb25kKTsKICAgICAgICAgICAgICAgICBKVU1QVE8ob3BhcmcpOwogICAgICAgICAgICAgICAgIEZBU1RfRElTUEFUQ0goKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVyciA9IFB5T2JqZWN0X0lzVHJ1ZSh3KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKKyAgICAgICAgICAgIGVyciA9IFB5T2JqZWN0X0lzVHJ1ZShjb25kKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihjb25kKTsKICAgICAgICAgICAgIGlmIChlcnIgPiAwKSB7CiAgICAgICAgICAgICAgICAgZXJyID0gMDsKICAgICAgICAgICAgICAgICBKVU1QVE8ob3BhcmcpOwpAQCAtMjQxNSw1OCArMjU3MSw2MyBAQAogICAgICAgICAgICAgZWxzZSBpZiAoZXJyID09IDApCiAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKEpVTVBfSUZfRkFMU0VfT1JfUE9QKQotICAgICAgICAgICAgdyA9IFRPUCgpOwotICAgICAgICAgICAgaWYgKHcgPT0gUHlfVHJ1ZSkgeworICAgICAgICBUQVJHRVQoSlVNUF9JRl9GQUxTRV9PUl9QT1ApIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpjb25kID0gVE9QKCk7CisgICAgICAgICAgICBpbnQgZXJyOworICAgICAgICAgICAgaWYgKGNvbmQgPT0gUHlfVHJ1ZSkgewogICAgICAgICAgICAgICAgIFNUQUNLQURKKC0xKTsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYodyk7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGNvbmQpOwogICAgICAgICAgICAgICAgIEZBU1RfRElTUEFUQ0goKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh3ID09IFB5X0ZhbHNlKSB7CisgICAgICAgICAgICBpZiAoY29uZCA9PSBQeV9GYWxzZSkgewogICAgICAgICAgICAgICAgIEpVTVBUTyhvcGFyZyk7CiAgICAgICAgICAgICAgICAgRkFTVF9ESVNQQVRDSCgpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZXJyID0gUHlPYmplY3RfSXNUcnVlKHcpOworICAgICAgICAgICAgZXJyID0gUHlPYmplY3RfSXNUcnVlKGNvbmQpOwogICAgICAgICAgICAgaWYgKGVyciA+IDApIHsKICAgICAgICAgICAgICAgICBTVEFDS0FESigtMSk7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKHcpOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihjb25kKTsKICAgICAgICAgICAgICAgICBlcnIgPSAwOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSBpZiAoZXJyID09IDApCiAgICAgICAgICAgICAgICAgSlVNUFRPKG9wYXJnKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChKVU1QX0lGX1RSVUVfT1JfUE9QKQotICAgICAgICAgICAgdyA9IFRPUCgpOwotICAgICAgICAgICAgaWYgKHcgPT0gUHlfRmFsc2UpIHsKKyAgICAgICAgVEFSR0VUKEpVTVBfSUZfVFJVRV9PUl9QT1ApIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpjb25kID0gVE9QKCk7CisgICAgICAgICAgICBpbnQgZXJyOworICAgICAgICAgICAgaWYgKGNvbmQgPT0gUHlfRmFsc2UpIHsKICAgICAgICAgICAgICAgICBTVEFDS0FESigtMSk7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKHcpOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihjb25kKTsKICAgICAgICAgICAgICAgICBGQVNUX0RJU1BBVENIKCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAodyA9PSBQeV9UcnVlKSB7CisgICAgICAgICAgICBpZiAoY29uZCA9PSBQeV9UcnVlKSB7CiAgICAgICAgICAgICAgICAgSlVNUFRPKG9wYXJnKTsKICAgICAgICAgICAgICAgICBGQVNUX0RJU1BBVENIKCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlcnIgPSBQeU9iamVjdF9Jc1RydWUodyk7CisgICAgICAgICAgICBlcnIgPSBQeU9iamVjdF9Jc1RydWUoY29uZCk7CiAgICAgICAgICAgICBpZiAoZXJyID4gMCkgewogICAgICAgICAgICAgICAgIGVyciA9IDA7CiAgICAgICAgICAgICAgICAgSlVNUFRPKG9wYXJnKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgaWYgKGVyciA9PSAwKSB7CiAgICAgICAgICAgICAgICAgU1RBQ0tBREooLTEpOwotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoY29uZCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAogICAgICAgICBQUkVESUNURURfV0lUSF9BUkcoSlVNUF9BQlNPTFVURSk7Ci0gICAgICAgIFRBUkdFVChKVU1QX0FCU09MVVRFKQorICAgICAgICBUQVJHRVQoSlVNUF9BQlNPTFVURSkgewogICAgICAgICAgICAgSlVNUFRPKG9wYXJnKTsKICNpZiBGQVNUX0xPT1BTCiAgICAgICAgICAgICAvKiBFbmFibGluZyB0aGlzIHBhdGggc3BlZWRzLXVwIGFsbCB3aGlsZSBhbmQgZm9yLWxvb3BzIGJ5IGJ5cGFzc2luZwpAQCAtMjQ4MCw2MCArMjY0MSw2MiBAQAogI2Vsc2UKICAgICAgICAgICAgIERJU1BBVENIKCk7CiAjZW5kaWYKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChHRVRfSVRFUikKKyAgICAgICAgVEFSR0VUKEdFVF9JVEVSKSB7CiAgICAgICAgICAgICAvKiBiZWZvcmU6IFtvYmpdOyBhZnRlciBbZ2V0aXRlcihvYmopXSAqLwotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgeCA9IFB5T2JqZWN0X0dldEl0ZXIodik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgU0VUX1RPUCh4KTsKLSAgICAgICAgICAgICAgICBQUkVESUNUKEZPUl9JVEVSKTsKLSAgICAgICAgICAgICAgICBESVNQQVRDSCgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgU1RBQ0tBREooLTEpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBQeU9iamVjdCAqaXRlcmFibGUgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICppdGVyID0gUHlPYmplY3RfR2V0SXRlcihpdGVyYWJsZSk7CisgICAgICAgICAgICBQeV9ERUNSRUYoaXRlcmFibGUpOworICAgICAgICAgICAgU0VUX1RPUChpdGVyKTsKKyAgICAgICAgICAgIGlmIChpdGVyID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIFBSRURJQ1QoRk9SX0lURVIpOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCiAgICAgICAgIFBSRURJQ1RFRF9XSVRIX0FSRyhGT1JfSVRFUik7Ci0gICAgICAgIFRBUkdFVChGT1JfSVRFUikKKyAgICAgICAgVEFSR0VUKEZPUl9JVEVSKSB7CiAgICAgICAgICAgICAvKiBiZWZvcmU6IFtpdGVyXTsgYWZ0ZXI6IFtpdGVyLCBpdGVyKCldICpvciogW10gKi8KLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIHggPSAoKnYtPm9iX3R5cGUtPnRwX2l0ZXJuZXh0KSh2KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBQVVNIKHgpOworICAgICAgICAgICAgUHlPYmplY3QgKml0ZXIgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpuZXh0ID0gKCppdGVyLT5vYl90eXBlLT50cF9pdGVybmV4dCkoaXRlcik7CisgICAgICAgICAgICBpZiAobmV4dCAhPSBOVUxMKSB7CisgICAgICAgICAgICAgICAgUFVTSChuZXh0KTsKICAgICAgICAgICAgICAgICBQUkVESUNUKFNUT1JFX0ZBU1QpOwogICAgICAgICAgICAgICAgIFBSRURJQ1QoVU5QQUNLX1NFUVVFTkNFKTsKICAgICAgICAgICAgICAgICBESVNQQVRDSCgpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoIVB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5RXhjX1N0b3BJdGVyYXRpb24pKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBpZiAoIVB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfU3RvcEl0ZXJhdGlvbikpCisgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAodHN0YXRlLT5jX3RyYWNlZnVuYyAhPSBOVUxMKQorICAgICAgICAgICAgICAgICAgICBjYWxsX2V4Y190cmFjZSh0c3RhdGUtPmNfdHJhY2VmdW5jLCB0c3RhdGUtPmNfdHJhY2VvYmosIHRzdGF0ZSwgZik7CiAgICAgICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8qIGl0ZXJhdG9yIGVuZGVkIG5vcm1hbGx5ICovCi0gICAgICAgICAgICB4ID0gdiA9IFBPUCgpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOworICAgICAgICAgICAgU1RBQ0tBREooLTEpOworICAgICAgICAgICAgUHlfREVDUkVGKGl0ZXIpOwogICAgICAgICAgICAgSlVNUEJZKG9wYXJnKTsKICAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoQlJFQUtfTE9PUCkKKyAgICAgICAgVEFSR0VUKEJSRUFLX0xPT1ApIHsKICAgICAgICAgICAgIHdoeSA9IFdIWV9CUkVBSzsKICAgICAgICAgICAgIGdvdG8gZmFzdF9ibG9ja19lbmQ7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoQ09OVElOVUVfTE9PUCkKKyAgICAgICAgVEFSR0VUKENPTlRJTlVFX0xPT1ApIHsKICAgICAgICAgICAgIHJldHZhbCA9IFB5TG9uZ19Gcm9tTG9uZyhvcGFyZyk7Ci0gICAgICAgICAgICBpZiAoIXJldHZhbCkgewotICAgICAgICAgICAgICAgIHggPSBOVUxMOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHJldHZhbCA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICB3aHkgPSBXSFlfQ09OVElOVUU7CiAgICAgICAgICAgICBnb3RvIGZhc3RfYmxvY2tfZW5kOworICAgICAgICB9CiAKICAgICAgICAgVEFSR0VUX1dJVEhfSU1QTChTRVRVUF9MT09QLCBfc2V0dXBfZmluYWxseSkKICAgICAgICAgVEFSR0VUX1dJVEhfSU1QTChTRVRVUF9FWENFUFQsIF9zZXR1cF9maW5hbGx5KQogICAgICAgICBUQVJHRVQoU0VUVVBfRklOQUxMWSkKLSAgICAgICAgX3NldHVwX2ZpbmFsbHk6CisgICAgICAgIF9zZXR1cF9maW5hbGx5OiB7CiAgICAgICAgICAgICAvKiBOT1RFOiBJZiB5b3UgYWRkIGFueSBuZXcgYmxvY2stc2V0dXAgb3Bjb2RlcyB0aGF0CiAgICAgICAgICAgICAgICBhcmUgbm90IHRyeS9leGNlcHQvZmluYWxseSBoYW5kbGVycywgeW91IG1heSBuZWVkCiAgICAgICAgICAgICAgICB0byB1cGRhdGUgdGhlIFB5R2VuX05lZWRzRmluYWxpemluZygpIGZ1bmN0aW9uLgpAQCAtMjU0MiwzNyArMjcwNSwzNSBAQAogICAgICAgICAgICAgUHlGcmFtZV9CbG9ja1NldHVwKGYsIG9wY29kZSwgSU5TVFJfT0ZGU0VUKCkgKyBvcGFyZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVEFDS19MRVZFTCgpKTsKICAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoU0VUVVBfV0lUSCkKLSAgICAgICAgeworICAgICAgICBUQVJHRVQoU0VUVVBfV0lUSCkgewogICAgICAgICAgICAgX1B5X0lERU5USUZJRVIoX19leGl0X18pOwogICAgICAgICAgICAgX1B5X0lERU5USUZJRVIoX19lbnRlcl9fKTsKLSAgICAgICAgICAgIHcgPSBUT1AoKTsKLSAgICAgICAgICAgIHggPSBzcGVjaWFsX2xvb2t1cCh3LCAmUHlJZF9fX2V4aXRfXyk7Ci0gICAgICAgICAgICBpZiAoIXgpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgdSA9IHNwZWNpYWxfbG9va3VwKHcsICZQeUlkX19fZW50ZXJfXyk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBpZiAoIXUpIHsKLSAgICAgICAgICAgICAgICB4ID0gTlVMTDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHggPSBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKHUsIE5VTEwpOwotICAgICAgICAgICAgUHlfREVDUkVGKHUpOwotICAgICAgICAgICAgaWYgKCF4KQotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgUHlPYmplY3QgKm1nciA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmV4aXQgPSBzcGVjaWFsX2xvb2t1cChtZ3IsICZQeUlkX19fZXhpdF9fKSwgKmVudGVyOworICAgICAgICAgICAgUHlPYmplY3QgKnJlczsKKyAgICAgICAgICAgIGlmIChleGl0ID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIFNFVF9UT1AoZXhpdCk7CisgICAgICAgICAgICBlbnRlciA9IHNwZWNpYWxfbG9va3VwKG1nciwgJlB5SWRfX19lbnRlcl9fKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihtZ3IpOworICAgICAgICAgICAgaWYgKGVudGVyID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIHJlcyA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3MoZW50ZXIsIE5VTEwpOworICAgICAgICAgICAgUHlfREVDUkVGKGVudGVyKTsKKyAgICAgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgLyogU2V0dXAgdGhlIGZpbmFsbHkgYmxvY2sgYmVmb3JlIHB1c2hpbmcgdGhlIHJlc3VsdAogICAgICAgICAgICAgICAgb2YgX19lbnRlcl9fIG9uIHRoZSBzdGFjay4gKi8KICAgICAgICAgICAgIFB5RnJhbWVfQmxvY2tTZXR1cChmLCBTRVRVUF9GSU5BTExZLCBJTlNUUl9PRkZTRVQoKSArIG9wYXJnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNUQUNLX0xFVkVMKCkpOwogCi0gICAgICAgICAgICBQVVNIKHgpOworICAgICAgICAgICAgUFVTSChyZXMpOwogICAgICAgICAgICAgRElTUEFUQ0goKTsKICAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChXSVRIX0NMRUFOVVApCi0gICAgICAgIHsKKyAgICAgICAgVEFSR0VUKFdJVEhfQ0xFQU5VUCkgewogICAgICAgICAgICAgLyogQXQgdGhlIHRvcCBvZiB0aGUgc3RhY2sgYXJlIDEtNiB2YWx1ZXMgaW5kaWNhdGluZwogICAgICAgICAgICAgICAgaG93L3doeSB3ZSBlbnRlcmVkIHRoZSBmaW5hbGx5IGNsYXVzZToKICAgICAgICAgICAgICAgIC0gVE9QID0gTm9uZQpAQCAtMjU5OSw0MiArMjc2MCw0MiBAQAogICAgICAgICAgICAgKi8KIAogICAgICAgICAgICAgUHlPYmplY3QgKmV4aXRfZnVuYzsKLSAgICAgICAgICAgIHUgPSBUT1AoKTsKLSAgICAgICAgICAgIGlmICh1ID09IFB5X05vbmUpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpleGMgPSBUT1AoKSwgKnZhbCA9IFB5X05vbmUsICp0YiA9IFB5X05vbmUsICpyZXM7CisgICAgICAgICAgICBpbnQgZXJyOworICAgICAgICAgICAgaWYgKGV4YyA9PSBQeV9Ob25lKSB7CiAgICAgICAgICAgICAgICAgKHZvaWQpUE9QKCk7CiAgICAgICAgICAgICAgICAgZXhpdF9mdW5jID0gVE9QKCk7Ci0gICAgICAgICAgICAgICAgU0VUX1RPUCh1KTsKLSAgICAgICAgICAgICAgICB2ID0gdyA9IFB5X05vbmU7CisgICAgICAgICAgICAgICAgU0VUX1RPUChleGMpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoUHlMb25nX0NoZWNrKHUpKSB7Ci0gICAgICAgICAgICAgICAgKHZvaWQpUE9QKCk7Ci0gICAgICAgICAgICAgICAgc3dpdGNoKFB5TG9uZ19Bc0xvbmcodSkpIHsKKyAgICAgICAgICAgIGVsc2UgaWYgKFB5TG9uZ19DaGVjayhleGMpKSB7CisgICAgICAgICAgICAgICAgU1RBQ0tBREooLTEpOworICAgICAgICAgICAgICAgIHN3aXRjaCAoUHlMb25nX0FzTG9uZyhleGMpKSB7CiAgICAgICAgICAgICAgICAgY2FzZSBXSFlfUkVUVVJOOgogICAgICAgICAgICAgICAgIGNhc2UgV0hZX0NPTlRJTlVFOgogICAgICAgICAgICAgICAgICAgICAvKiBSZXR2YWwgaW4gVE9QLiAqLwogICAgICAgICAgICAgICAgICAgICBleGl0X2Z1bmMgPSBTRUNPTkQoKTsKICAgICAgICAgICAgICAgICAgICAgU0VUX1NFQ09ORChUT1AoKSk7Ci0gICAgICAgICAgICAgICAgICAgIFNFVF9UT1AodSk7CisgICAgICAgICAgICAgICAgICAgIFNFVF9UT1AoZXhjKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgZXhpdF9mdW5jID0gVE9QKCk7Ci0gICAgICAgICAgICAgICAgICAgIFNFVF9UT1AodSk7CisgICAgICAgICAgICAgICAgICAgIFNFVF9UT1AoZXhjKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHUgPSB2ID0gdyA9IFB5X05vbmU7CisgICAgICAgICAgICAgICAgZXhjID0gUHlfTm9uZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIFB5T2JqZWN0ICp0cCwgKmV4YywgKnRiOworICAgICAgICAgICAgICAgIFB5T2JqZWN0ICp0cDIsICpleGMyLCAqdGIyOwogICAgICAgICAgICAgICAgIFB5VHJ5QmxvY2sgKmJsb2NrOwotICAgICAgICAgICAgICAgIHYgPSBTRUNPTkQoKTsKLSAgICAgICAgICAgICAgICB3ID0gVEhJUkQoKTsKLSAgICAgICAgICAgICAgICB0cCA9IEZPVVJUSCgpOwotICAgICAgICAgICAgICAgIGV4YyA9IFBFRUsoNSk7Ci0gICAgICAgICAgICAgICAgdGIgPSBQRUVLKDYpOworICAgICAgICAgICAgICAgIHZhbCA9IFNFQ09ORCgpOworICAgICAgICAgICAgICAgIHRiID0gVEhJUkQoKTsKKyAgICAgICAgICAgICAgICB0cDIgPSBGT1VSVEgoKTsKKyAgICAgICAgICAgICAgICBleGMyID0gUEVFSyg1KTsKKyAgICAgICAgICAgICAgICB0YjIgPSBQRUVLKDYpOwogICAgICAgICAgICAgICAgIGV4aXRfZnVuYyA9IFBFRUsoNyk7Ci0gICAgICAgICAgICAgICAgU0VUX1ZBTFVFKDcsIHRiKTsKLSAgICAgICAgICAgICAgICBTRVRfVkFMVUUoNiwgZXhjKTsKLSAgICAgICAgICAgICAgICBTRVRfVkFMVUUoNSwgdHApOworICAgICAgICAgICAgICAgIFNFVF9WQUxVRSg3LCB0YjIpOworICAgICAgICAgICAgICAgIFNFVF9WQUxVRSg2LCBleGMyKTsKKyAgICAgICAgICAgICAgICBTRVRfVkFMVUUoNSwgdHAyKTsKICAgICAgICAgICAgICAgICAvKiBVTldJTkRfRVhDRVBUX0hBTkRMRVIgd2lsbCBwb3AgdGhpcyBvZmYuICovCiAgICAgICAgICAgICAgICAgU0VUX0ZPVVJUSChOVUxMKTsKICAgICAgICAgICAgICAgICAvKiBXZSBqdXN0IHNoaWZ0ZWQgdGhlIHN0YWNrIGRvd24sIHNvIHdlIGhhdmUKQEAgLTI2NDUsNTYgKzI4MDYsNTMgQEAKICAgICAgICAgICAgICAgICBibG9jay0+Yl9sZXZlbC0tOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgLyogWFhYIE5vdCB0aGUgZmFzdGVzdCB3YXkgdG8gY2FsbCBpdC4uLiAqLwotICAgICAgICAgICAgeCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3MoZXhpdF9mdW5jLCB1LCB2LCB3LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisgICAgICAgICAgICByZXMgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKGV4aXRfZnVuYywgZXhjLCB2YWwsIHRiLCBOVUxMKTsKICAgICAgICAgICAgIFB5X0RFQ1JFRihleGl0X2Z1bmMpOwotICAgICAgICAgICAgaWYgKHggPT0gTlVMTCkKLSAgICAgICAgICAgICAgICBicmVhazsgLyogR28gdG8gZXJyb3IgZXhpdCAqLworICAgICAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAKLSAgICAgICAgICAgIGlmICh1ICE9IFB5X05vbmUpCi0gICAgICAgICAgICAgICAgZXJyID0gUHlPYmplY3RfSXNUcnVlKHgpOworICAgICAgICAgICAgaWYgKGV4YyAhPSBQeV9Ob25lKQorICAgICAgICAgICAgICAgIGVyciA9IFB5T2JqZWN0X0lzVHJ1ZShyZXMpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGVyciA9IDA7Ci0gICAgICAgICAgICBQeV9ERUNSRUYoeCk7CisgICAgICAgICAgICBQeV9ERUNSRUYocmVzKTsKIAogICAgICAgICAgICAgaWYgKGVyciA8IDApCi0gICAgICAgICAgICAgICAgYnJlYWs7IC8qIEdvIHRvIGVycm9yIGV4aXQgKi8KKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgZWxzZSBpZiAoZXJyID4gMCkgewogICAgICAgICAgICAgICAgIGVyciA9IDA7CiAgICAgICAgICAgICAgICAgLyogVGhlcmUgd2FzIGFuIGV4Y2VwdGlvbiBhbmQgYSBUcnVlIHJldHVybiAqLwogICAgICAgICAgICAgICAgIFBVU0goUHlMb25nX0Zyb21Mb25nKChsb25nKSBXSFlfU0lMRU5DRUQpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIFBSRURJQ1QoRU5EX0ZJTkFMTFkpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBESVNQQVRDSCgpOwogICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKENBTExfRlVOQ1RJT04pCi0gICAgICAgIHsKLSAgICAgICAgICAgIFB5T2JqZWN0ICoqc3A7CisgICAgICAgIFRBUkdFVChDQUxMX0ZVTkNUSU9OKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqKnNwLCAqcmVzOwogICAgICAgICAgICAgUENBTEwoUENBTExfQUxMKTsKICAgICAgICAgICAgIHNwID0gc3RhY2tfcG9pbnRlcjsKICNpZmRlZiBXSVRIX1RTQwotICAgICAgICAgICAgeCA9IGNhbGxfZnVuY3Rpb24oJnNwLCBvcGFyZywgJmludHIwLCAmaW50cjEpOworICAgICAgICAgICAgcmVzID0gY2FsbF9mdW5jdGlvbigmc3AsIG9wYXJnLCAmaW50cjAsICZpbnRyMSk7CiAjZWxzZQotICAgICAgICAgICAgeCA9IGNhbGxfZnVuY3Rpb24oJnNwLCBvcGFyZyk7CisgICAgICAgICAgICByZXMgPSBjYWxsX2Z1bmN0aW9uKCZzcCwgb3BhcmcpOwogI2VuZGlmCiAgICAgICAgICAgICBzdGFja19wb2ludGVyID0gc3A7Ci0gICAgICAgICAgICBQVVNIKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkKLSAgICAgICAgICAgICAgICBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBQVVNIKHJlcyk7CisgICAgICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CiAgICAgICAgIH0KIAogICAgICAgICBUQVJHRVRfV0lUSF9JTVBMKENBTExfRlVOQ1RJT05fVkFSLCBfY2FsbF9mdW5jdGlvbl92YXJfa3cpCiAgICAgICAgIFRBUkdFVF9XSVRIX0lNUEwoQ0FMTF9GVU5DVElPTl9LVywgX2NhbGxfZnVuY3Rpb25fdmFyX2t3KQogICAgICAgICBUQVJHRVQoQ0FMTF9GVU5DVElPTl9WQVJfS1cpCi0gICAgICAgIF9jYWxsX2Z1bmN0aW9uX3Zhcl9rdzoKLSAgICAgICAgeworICAgICAgICBfY2FsbF9mdW5jdGlvbl92YXJfa3c6IHsKICAgICAgICAgICAgIGludCBuYSA9IG9wYXJnICYgMHhmZjsKICAgICAgICAgICAgIGludCBuayA9IChvcGFyZz4+OCkgJiAweGZmOwogICAgICAgICAgICAgaW50IGZsYWdzID0gKG9wY29kZSAtIENBTExfRlVOQ1RJT04pICYgMzsKICAgICAgICAgICAgIGludCBuID0gbmEgKyAyICogbms7Ci0gICAgICAgICAgICBQeU9iamVjdCAqKnBmdW5jLCAqZnVuYywgKipzcDsKKyAgICAgICAgICAgIFB5T2JqZWN0ICoqcGZ1bmMsICpmdW5jLCAqKnNwLCAqcmVzOwogICAgICAgICAgICAgUENBTEwoUENBTExfQUxMKTsKICAgICAgICAgICAgIGlmIChmbGFncyAmIENBTExfRkxBR19WQVIpCiAgICAgICAgICAgICAgICAgbisrOwpAQCAtMjcxNywxMzcgKzI4NzUsMTU2IEBACiAgICAgICAgICAgICAgICAgUHlfSU5DUkVGKGZ1bmMpOwogICAgICAgICAgICAgc3AgPSBzdGFja19wb2ludGVyOwogICAgICAgICAgICAgUkVBRF9USU1FU1RBTVAoaW50cjApOwotICAgICAgICAgICAgeCA9IGV4dF9kb19jYWxsKGZ1bmMsICZzcCwgZmxhZ3MsIG5hLCBuayk7CisgICAgICAgICAgICByZXMgPSBleHRfZG9fY2FsbChmdW5jLCAmc3AsIGZsYWdzLCBuYSwgbmspOwogICAgICAgICAgICAgUkVBRF9USU1FU1RBTVAoaW50cjEpOwogICAgICAgICAgICAgc3RhY2tfcG9pbnRlciA9IHNwOwogICAgICAgICAgICAgUHlfREVDUkVGKGZ1bmMpOwogCiAgICAgICAgICAgICB3aGlsZSAoc3RhY2tfcG9pbnRlciA+IHBmdW5jKSB7Ci0gICAgICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKKyAgICAgICAgICAgICAgICBQeU9iamVjdCAqbyA9IFBPUCgpOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihvKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFBVU0goeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKQotICAgICAgICAgICAgICAgIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIFBVU0gocmVzKTsKKyAgICAgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKICAgICAgICAgfQogCiAgICAgICAgIFRBUkdFVF9XSVRIX0lNUEwoTUFLRV9DTE9TVVJFLCBfbWFrZV9mdW5jdGlvbikKICAgICAgICAgVEFSR0VUKE1BS0VfRlVOQ1RJT04pCi0gICAgICAgIF9tYWtlX2Z1bmN0aW9uOgotICAgICAgICB7CisgICAgICAgIF9tYWtlX2Z1bmN0aW9uOiB7CiAgICAgICAgICAgICBpbnQgcG9zZGVmYXVsdHMgPSBvcGFyZyAmIDB4ZmY7CiAgICAgICAgICAgICBpbnQga3dkZWZhdWx0cyA9IChvcGFyZz4+OCkgJiAweGZmOwogICAgICAgICAgICAgaW50IG51bV9hbm5vdGF0aW9ucyA9IChvcGFyZyA+PiAxNikgJiAweDdmZmY7CiAKLSAgICAgICAgICAgIHcgPSBQT1AoKTsgLyogcXVhbG5hbWUgKi8KLSAgICAgICAgICAgIHYgPSBQT1AoKTsgLyogY29kZSBvYmplY3QgKi8KLSAgICAgICAgICAgIHggPSBQeUZ1bmN0aW9uX05ld1dpdGhRdWFsTmFtZSh2LCBmLT5mX2dsb2JhbHMsIHcpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOworICAgICAgICAgICAgUHlPYmplY3QgKnF1YWxuYW1lID0gUE9QKCk7IC8qIHF1YWxuYW1lICovCisgICAgICAgICAgICBQeU9iamVjdCAqY29kZSA9IFBPUCgpOyAvKiBjb2RlIG9iamVjdCAqLworICAgICAgICAgICAgUHlPYmplY3QgKmZ1bmMgPSBQeUZ1bmN0aW9uX05ld1dpdGhRdWFsTmFtZShjb2RlLCBmLT5mX2dsb2JhbHMsIHF1YWxuYW1lKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihjb2RlKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihxdWFsbmFtZSk7CiAKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwgJiYgb3Bjb2RlID09IE1BS0VfQ0xPU1VSRSkgewotICAgICAgICAgICAgICAgIHYgPSBQT1AoKTsKLSAgICAgICAgICAgICAgICBpZiAoUHlGdW5jdGlvbl9TZXRDbG9zdXJlKHgsIHYpICE9IDApIHsKKyAgICAgICAgICAgIGlmIChmdW5jID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKworICAgICAgICAgICAgaWYgKG9wY29kZSA9PSBNQUtFX0NMT1NVUkUpIHsKKyAgICAgICAgICAgICAgICBQeU9iamVjdCAqY2xvc3VyZSA9IFBPUCgpOworICAgICAgICAgICAgICAgIGlmIChQeUZ1bmN0aW9uX1NldENsb3N1cmUoZnVuYywgY2xvc3VyZSkgIT0gMCkgewogICAgICAgICAgICAgICAgICAgICAvKiBDYW4ndCBoYXBwZW4gdW5sZXNzIGJ5dGVjb2RlIGlzIGNvcnJ1cHQuICovCi0gICAgICAgICAgICAgICAgICAgIHdoeSA9IFdIWV9FWENFUFRJT047CisgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihmdW5jKTsKKyAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGNsb3N1cmUpOworICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYodik7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGNsb3N1cmUpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMICYmIG51bV9hbm5vdGF0aW9ucyA+IDApIHsKKyAgICAgICAgICAgIGlmIChudW1fYW5ub3RhdGlvbnMgPiAwKSB7CiAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBuYW1lX2l4OwotICAgICAgICAgICAgICAgIHUgPSBQT1AoKTsgLyogbmFtZXMgb2YgYXJncyB3aXRoIGFubm90YXRpb25zICovCi0gICAgICAgICAgICAgICAgdiA9IFB5RGljdF9OZXcoKTsKLSAgICAgICAgICAgICAgICBpZiAodiA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih4KTsKLSAgICAgICAgICAgICAgICAgICAgeCA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpuYW1lcyA9IFBPUCgpOyAvKiBuYW1lcyBvZiBhcmdzIHdpdGggYW5ub3RhdGlvbnMgKi8KKyAgICAgICAgICAgICAgICBQeU9iamVjdCAqYW5ucyA9IFB5RGljdF9OZXcoKTsKKyAgICAgICAgICAgICAgICBpZiAoYW5ucyA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihmdW5jKTsKKyAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbmFtZV9peCA9IFB5VHVwbGVfU2l6ZSh1KTsKKyAgICAgICAgICAgICAgICBuYW1lX2l4ID0gUHlUdXBsZV9TaXplKG5hbWVzKTsKICAgICAgICAgICAgICAgICBhc3NlcnQobnVtX2Fubm90YXRpb25zID09IG5hbWVfaXgrMSk7CiAgICAgICAgICAgICAgICAgd2hpbGUgKG5hbWVfaXggPiAwKSB7CisgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpuYW1lLCAqdmFsdWU7CisgICAgICAgICAgICAgICAgICAgIGludCBlcnI7CiAgICAgICAgICAgICAgICAgICAgIC0tbmFtZV9peDsKLSAgICAgICAgICAgICAgICAgICAgdCA9IFB5VHVwbGVfR0VUX0lURU0odSwgbmFtZV9peCk7Ci0gICAgICAgICAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgICAgICAgICAgLyogWFhYKG5ub3J3aXR6KTogY2hlY2sgZm9yIGVycm9ycyAqLwotICAgICAgICAgICAgICAgICAgICBQeURpY3RfU2V0SXRlbSh2LCB0LCB3KTsKLSAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHcpOworICAgICAgICAgICAgICAgICAgICBuYW1lID0gUHlUdXBsZV9HRVRfSVRFTShuYW1lcywgbmFtZV9peCk7CisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gUE9QKCk7CisgICAgICAgICAgICAgICAgICAgIGVyciA9IFB5RGljdF9TZXRJdGVtKGFubnMsIG5hbWUsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGVyciAhPSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoYW5ucyk7CisgICAgICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZnVuYyk7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgaWYgKFB5RnVuY3Rpb25fU2V0QW5ub3RhdGlvbnMoeCwgdikgIT0gMCkgeworICAgICAgICAgICAgICAgIGlmIChQeUZ1bmN0aW9uX1NldEFubm90YXRpb25zKGZ1bmMsIGFubnMpICE9IDApIHsKICAgICAgICAgICAgICAgICAgICAgLyogQ2FuJ3QgaGFwcGVuIHVubGVzcwogICAgICAgICAgICAgICAgICAgICAgICBQeUZ1bmN0aW9uX1NldEFubm90YXRpb25zIGNoYW5nZXMuICovCi0gICAgICAgICAgICAgICAgICAgIHdoeSA9IFdIWV9FWENFUFRJT047CisgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihhbm5zKTsKKyAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGZ1bmMpOworICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKHUpOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihhbm5zKTsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYobmFtZXMpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvKiBYWFggTWF5YmUgdGhpcyBzaG91bGQgYmUgYSBzZXBhcmF0ZSBvcGNvZGU/ICovCi0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMICYmIHBvc2RlZmF1bHRzID4gMCkgewotICAgICAgICAgICAgICAgIHYgPSBQeVR1cGxlX05ldyhwb3NkZWZhdWx0cyk7Ci0gICAgICAgICAgICAgICAgaWYgKHYgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoeCk7Ci0gICAgICAgICAgICAgICAgICAgIHggPSBOVUxMOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgd2hpbGUgKC0tcG9zZGVmYXVsdHMgPj0gMCkgewotICAgICAgICAgICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICAgICAgICAgIFB5VHVwbGVfU0VUX0lURU0odiwgcG9zZGVmYXVsdHMsIHcpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoUHlGdW5jdGlvbl9TZXREZWZhdWx0cyh4LCB2KSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8qIENhbid0IGhhcHBlbiB1bmxlc3MKLSAgICAgICAgICAgICAgICAgICAgICAgUHlGdW5jdGlvbl9TZXREZWZhdWx0cyBjaGFuZ2VzLiAqLwotICAgICAgICAgICAgICAgICAgICB3aHkgPSBXSFlfRVhDRVBUSU9OOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMICYmIGt3ZGVmYXVsdHMgPiAwKSB7Ci0gICAgICAgICAgICAgICAgdiA9IFB5RGljdF9OZXcoKTsKLSAgICAgICAgICAgICAgICBpZiAodiA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih4KTsKLSAgICAgICAgICAgICAgICAgICAgeCA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKGt3ZGVmYXVsdHMgPiAwKSB7CisgICAgICAgICAgICAgICAgUHlPYmplY3QgKmRlZnMgPSBQeURpY3RfTmV3KCk7CisgICAgICAgICAgICAgICAgaWYgKGRlZnMgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZnVuYyk7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHdoaWxlICgtLWt3ZGVmYXVsdHMgPj0gMCkgewotICAgICAgICAgICAgICAgICAgICB3ID0gUE9QKCk7IC8qIGRlZmF1bHQgdmFsdWUgKi8KLSAgICAgICAgICAgICAgICAgICAgdSA9IFBPUCgpOyAvKiBrdyBvbmx5IGFyZyBuYW1lICovCi0gICAgICAgICAgICAgICAgICAgIC8qIFhYWChubm9yd2l0eik6IGNoZWNrIGZvciBlcnJvcnMgKi8KLSAgICAgICAgICAgICAgICAgICAgUHlEaWN0X1NldEl0ZW0odiwgdSwgdyk7Ci0gICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHUpOworICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqdiA9IFBPUCgpOyAvKiBkZWZhdWx0IHZhbHVlICovCisgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICprZXkgPSBQT1AoKTsgLyoga3cgb25seSBhcmcgbmFtZSAqLworICAgICAgICAgICAgICAgICAgICBpbnQgZXJyID0gUHlEaWN0X1NldEl0ZW0oZGVmcywga2V5LCB2KTsKKyAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHYpOworICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoa2V5KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGVyciAhPSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZGVmcyk7CisgICAgICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZnVuYyk7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChQeUZ1bmN0aW9uX1NldEt3RGVmYXVsdHMoeCwgdikgIT0gMCkgeworICAgICAgICAgICAgICAgIGlmIChQeUZ1bmN0aW9uX1NldEt3RGVmYXVsdHMoZnVuYywgZGVmcykgIT0gMCkgewogICAgICAgICAgICAgICAgICAgICAvKiBDYW4ndCBoYXBwZW4gdW5sZXNzCiAgICAgICAgICAgICAgICAgICAgICAgIFB5RnVuY3Rpb25fU2V0S3dEZWZhdWx0cyBjaGFuZ2VzLiAqLwotICAgICAgICAgICAgICAgICAgICB3aHkgPSBXSFlfRVhDRVBUSU9OOworICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZnVuYyk7CisgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihkZWZzKTsKKyAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKHYpOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihkZWZzKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFBVU0goeCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChwb3NkZWZhdWx0cyA+IDApIHsKKyAgICAgICAgICAgICAgICBQeU9iamVjdCAqZGVmcyA9IFB5VHVwbGVfTmV3KHBvc2RlZmF1bHRzKTsKKyAgICAgICAgICAgICAgICBpZiAoZGVmcyA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihmdW5jKTsKKyAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgd2hpbGUgKC0tcG9zZGVmYXVsdHMgPj0gMCkKKyAgICAgICAgICAgICAgICAgICAgUHlUdXBsZV9TRVRfSVRFTShkZWZzLCBwb3NkZWZhdWx0cywgUE9QKCkpOworICAgICAgICAgICAgICAgIGlmIChQeUZ1bmN0aW9uX1NldERlZmF1bHRzKGZ1bmMsIGRlZnMpICE9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgLyogQ2FuJ3QgaGFwcGVuIHVubGVzcworICAgICAgICAgICAgICAgICAgICAgICBQeUZ1bmN0aW9uX1NldERlZmF1bHRzIGNoYW5nZXMuICovCisgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihkZWZzKTsKKyAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGZ1bmMpOworICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZGVmcyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBQVVNIKGZ1bmMpOworICAgICAgICAgICAgRElTUEFUQ0goKTsKICAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChCVUlMRF9TTElDRSkKKyAgICAgICAgVEFSR0VUKEJVSUxEX1NMSUNFKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqc3RhcnQsICpzdG9wLCAqc3RlcCwgKnNsaWNlOwogICAgICAgICAgICAgaWYgKG9wYXJnID09IDMpCi0gICAgICAgICAgICAgICAgdyA9IFBPUCgpOworICAgICAgICAgICAgICAgIHN0ZXAgPSBQT1AoKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB3ID0gTlVMTDsKLSAgICAgICAgICAgIHYgPSBQT1AoKTsKLSAgICAgICAgICAgIHUgPSBUT1AoKTsKLSAgICAgICAgICAgIHggPSBQeVNsaWNlX05ldyh1LCB2LCB3KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih1KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFB5X1hERUNSRUYodyk7Ci0gICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIHN0ZXAgPSBOVUxMOworICAgICAgICAgICAgc3RvcCA9IFBPUCgpOworICAgICAgICAgICAgc3RhcnQgPSBUT1AoKTsKKyAgICAgICAgICAgIHNsaWNlID0gUHlTbGljZV9OZXcoc3RhcnQsIHN0b3AsIHN0ZXApOworICAgICAgICAgICAgUHlfREVDUkVGKHN0YXJ0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihzdG9wKTsKKyAgICAgICAgICAgIFB5X1hERUNSRUYoc3RlcCk7CisgICAgICAgICAgICBTRVRfVE9QKHNsaWNlKTsKKyAgICAgICAgICAgIGlmIChzbGljZSA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKEVYVEVOREVEX0FSRykKKyAgICAgICAgVEFSR0VUKEVYVEVOREVEX0FSRykgewogICAgICAgICAgICAgb3Bjb2RlID0gTkVYVE9QKCk7CiAgICAgICAgICAgICBvcGFyZyA9IG9wYXJnPDwxNiB8IE5FWFRBUkcoKTsKICAgICAgICAgICAgIGdvdG8gZGlzcGF0Y2hfb3Bjb2RlOworICAgICAgICB9CiAKICNpZiBVU0VfQ09NUFVURURfR09UT1MKICAgICAgICAgX3Vua25vd25fb3Bjb2RlOgpAQCAtMjg1OCw4ICszMDM1LDcgQEAKICAgICAgICAgICAgICAgICBQeUZyYW1lX0dldExpbmVOdW1iZXIoZiksCiAgICAgICAgICAgICAgICAgb3Bjb2RlKTsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19TeXN0ZW1FcnJvciwgInVua25vd24gb3Bjb2RlIik7Ci0gICAgICAgICAgICB3aHkgPSBXSFlfRVhDRVBUSU9OOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBnb3RvIGVycm9yOwogCiAjaWZkZWYgQ0FTRV9UT09fQklHCiAgICAgICAgIH0KQEAgLTI4NjcsNzEgKzMwNDMsMzYgQEAKIAogICAgICAgICB9IC8qIHN3aXRjaCAqLwogCi0gICAgICAgIG9uX2Vycm9yOgorICAgICAgICAvKiBUaGlzIHNob3VsZCBuZXZlciBiZSByZWFjaGVkLiBFdmVyeSBvcGNvZGUgc2hvdWxkIGVuZCB3aXRoIERJU1BBVENIKCkKKyAgICAgICAgICAgb3IgZ290byBlcnJvci4gKi8KKyAgICAgICAgYXNzZXJ0KDApOwogCitlcnJvcjoKICAgICAgICAgUkVBRF9USU1FU1RBTVAoaW5zdDEpOwogCi0gICAgICAgIC8qIFF1aWNrbHkgY29udGludWUgaWYgbm8gZXJyb3Igb2NjdXJyZWQgKi8KKyAgICAgICAgYXNzZXJ0KHdoeSA9PSBXSFlfTk9UKTsKKyAgICAgICAgd2h5ID0gV0hZX0VYQ0VQVElPTjsKIAotICAgICAgICBpZiAod2h5ID09IFdIWV9OT1QpIHsKLSAgICAgICAgICAgIGlmIChlcnIgPT0gMCAmJiB4ICE9IE5VTEwpIHsKLSNpZmRlZiBDSEVDS0VYQwotICAgICAgICAgICAgICAgIC8qIFRoaXMgY2hlY2sgaXMgZXhwZW5zaXZlISAqLwotICAgICAgICAgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQotICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJYWFggdW5kZXRlY3RlZCBlcnJvclxuIik7Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICAgICAgUkVBRF9USU1FU1RBTVAobG9vcDEpOwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsgLyogTm9ybWFsLCBmYXN0IHBhdGggKi8KLSNpZmRlZiBDSEVDS0VYQwotICAgICAgICAgICAgICAgIH0KLSNlbmRpZgotICAgICAgICAgICAgfQotICAgICAgICAgICAgd2h5ID0gV0hZX0VYQ0VQVElPTjsKLSAgICAgICAgICAgIHggPSBQeV9Ob25lOwotICAgICAgICAgICAgZXJyID0gMDsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIERvdWJsZS1jaGVjayBleGNlcHRpb24gc3RhdHVzICovCi0KLSAgICAgICAgaWYgKHdoeSA9PSBXSFlfRVhDRVBUSU9OIHx8IHdoeSA9PSBXSFlfUkVSQUlTRSkgewotICAgICAgICAgICAgaWYgKCFQeUVycl9PY2N1cnJlZCgpKSB7Ci0gICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1N5c3RlbUVycm9yLAotICAgICAgICAgICAgICAgICAgICAiZXJyb3IgcmV0dXJuIHdpdGhvdXQgZXhjZXB0aW9uIHNldCIpOwotICAgICAgICAgICAgICAgIHdoeSA9IFdIWV9FWENFUFRJT047Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSNpZmRlZiBDSEVDS0VYQwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8qIFRoaXMgY2hlY2sgaXMgZXhwZW5zaXZlISAqLwotICAgICAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKLSAgICAgICAgICAgICAgICBjaGFyIGJ1ZlsxMjhdOwotICAgICAgICAgICAgICAgIHNwcmludGYoYnVmLCAiU3RhY2sgdW53aW5kIHdpdGggZXhjZXB0aW9uICIKLSAgICAgICAgICAgICAgICAgICAgInNldCBhbmQgd2h5PSVkIiwgd2h5KTsKLSAgICAgICAgICAgICAgICBQeV9GYXRhbEVycm9yKGJ1Zik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAgLyogRG91YmxlLWNoZWNrIGV4Y2VwdGlvbiBzdGF0dXMuICovCisjaWZkZWYgTkRFQlVHCisgICAgICAgIGlmICghUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19TeXN0ZW1FcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXJyb3IgcmV0dXJuIHdpdGhvdXQgZXhjZXB0aW9uIHNldCIpOworI2Vsc2UKKyAgICAgICAgYXNzZXJ0KFB5RXJyX09jY3VycmVkKCkpOwogI2VuZGlmCiAKLSAgICAgICAgLyogTG9nIHRyYWNlYmFjayBpbmZvIGlmIHRoaXMgaXMgYSByZWFsIGV4Y2VwdGlvbiAqLworICAgICAgICAvKiBMb2cgdHJhY2ViYWNrIGluZm8uICovCisgICAgICAgIFB5VHJhY2VCYWNrX0hlcmUoZik7CiAKLSAgICAgICAgaWYgKHdoeSA9PSBXSFlfRVhDRVBUSU9OKSB7Ci0gICAgICAgICAgICBQeVRyYWNlQmFja19IZXJlKGYpOwotCi0gICAgICAgICAgICBpZiAodHN0YXRlLT5jX3RyYWNlZnVuYyAhPSBOVUxMKQotICAgICAgICAgICAgICAgIGNhbGxfZXhjX3RyYWNlKHRzdGF0ZS0+Y190cmFjZWZ1bmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHN0YXRlLT5jX3RyYWNlb2JqLCBmKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIEZvciB0aGUgcmVzdCwgdHJlYXQgV0hZX1JFUkFJU0UgYXMgV0hZX0VYQ0VQVElPTiAqLwotCi0gICAgICAgIGlmICh3aHkgPT0gV0hZX1JFUkFJU0UpCi0gICAgICAgICAgICB3aHkgPSBXSFlfRVhDRVBUSU9OOwotCi0gICAgICAgIC8qIFVud2luZCBzdGFja3MgaWYgYSAocHNldWRvKSBleGNlcHRpb24gb2NjdXJyZWQgKi8KKyAgICAgICAgaWYgKHRzdGF0ZS0+Y190cmFjZWZ1bmMgIT0gTlVMTCkKKyAgICAgICAgICAgIGNhbGxfZXhjX3RyYWNlKHRzdGF0ZS0+Y190cmFjZWZ1bmMsIHRzdGF0ZS0+Y190cmFjZW9iaiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzdGF0ZSwgZik7CiAKIGZhc3RfYmxvY2tfZW5kOgorICAgICAgICBhc3NlcnQod2h5ICE9IFdIWV9OT1QpOworCisgICAgICAgIC8qIFVud2luZCBzdGFja3MgaWYgYSAocHNldWRvKSBleGNlcHRpb24gb2NjdXJyZWQgKi8KICAgICAgICAgd2hpbGUgKHdoeSAhPSBXSFlfTk9UICYmIGYtPmZfaWJsb2NrID4gMCkgewogICAgICAgICAgICAgLyogUGVlayBhdCB0aGUgY3VycmVudCBibG9jay4gKi8KICAgICAgICAgICAgIFB5VHJ5QmxvY2sgKmIgPSAmZi0+Zl9ibG9ja3N0YWNrW2YtPmZfaWJsb2NrIC0gMV07CkBAIC0yOTc4LDcgKzMxMTksMTAgQEAKICAgICAgICAgICAgICAgICAgICBQeXRob24gbWFpbiBsb29wLiAqLwogICAgICAgICAgICAgICAgIFB5RXJyX05vcm1hbGl6ZUV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICAgICAgJmV4YywgJnZhbCwgJnRiKTsKLSAgICAgICAgICAgICAgICBQeUV4Y2VwdGlvbl9TZXRUcmFjZWJhY2sodmFsLCB0Yik7CisgICAgICAgICAgICAgICAgaWYgKHRiICE9IE5VTEwpCisgICAgICAgICAgICAgICAgICAgIFB5RXhjZXB0aW9uX1NldFRyYWNlYmFjayh2YWwsIHRiKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIFB5RXhjZXB0aW9uX1NldFRyYWNlYmFjayh2YWwsIFB5X05vbmUpOwogICAgICAgICAgICAgICAgIFB5X0lOQ1JFRihleGMpOwogICAgICAgICAgICAgICAgIHRzdGF0ZS0+ZXhjX3R5cGUgPSBleGM7CiAgICAgICAgICAgICAgICAgUHlfSU5DUkVGKHZhbCk7CkBAIC0zMDEwLDIwICszMTU0LDI2IEBACiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgUkVBRF9USU1FU1RBTVAobG9vcDEpOwogCisgICAgICAgIGFzc2VydCghUHlFcnJfT2NjdXJyZWQoKSk7CisKICAgICB9IC8qIG1haW4gbG9vcCAqLwogCiAgICAgYXNzZXJ0KHdoeSAhPSBXSFlfWUlFTEQpOwogICAgIC8qIFBvcCByZW1haW5pbmcgc3RhY2sgZW50cmllcy4gKi8KICAgICB3aGlsZSAoIUVNUFRZKCkpIHsKLSAgICAgICAgdiA9IFBPUCgpOwotICAgICAgICBQeV9YREVDUkVGKHYpOworICAgICAgICBQeU9iamVjdCAqbyA9IFBPUCgpOworICAgICAgICBQeV9YREVDUkVGKG8pOwogICAgIH0KIAogICAgIGlmICh3aHkgIT0gV0hZX1JFVFVSTikKICAgICAgICAgcmV0dmFsID0gTlVMTDsKIAorICAgIGFzc2VydCgocmV0dmFsICE9IE5VTEwgJiYgIVB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgICB8fCAocmV0dmFsID09IE5VTEwgJiYgUHlFcnJfT2NjdXJyZWQoKSkpOworCiBmYXN0X3lpZWxkOgotICAgIGlmIChjby0+Y29fZmxhZ3MgJiBDT19HRU5FUkFUT1IgJiYgKHdoeSA9PSBXSFlfWUlFTEQgfHwgd2h5ID09IFdIWV9SRVRVUk4pKSB7CisgICAgaWYgKGNvLT5jb19mbGFncyAmIENPX0dFTkVSQVRPUikgeworCiAgICAgICAgIC8qIFRoZSBwdXJwb3NlIG9mIHRoaXMgYmxvY2sgaXMgdG8gcHV0IGFzaWRlIHRoZSBnZW5lcmF0b3IncyBleGNlcHRpb24KICAgICAgICAgICAgc3RhdGUgYW5kIHJlc3RvcmUgdGhhdCBvZiB0aGUgY2FsbGluZyBmcmFtZS4gSWYgdGhlIGN1cnJlbnQKICAgICAgICAgICAgZXhjZXB0aW9uIHN0YXRlIGlzIGZyb20gdGhlIGNhbGxlciwgd2UgY2xlYXIgdGhlIGV4Y2VwdGlvbiB2YWx1ZXMKQEAgLTMwNDYsMjYgKzMxOTYsMjcgQEAKICAgICBpZiAodHN0YXRlLT51c2VfdHJhY2luZykgewogICAgICAgICBpZiAodHN0YXRlLT5jX3RyYWNlZnVuYykgewogICAgICAgICAgICAgaWYgKHdoeSA9PSBXSFlfUkVUVVJOIHx8IHdoeSA9PSBXSFlfWUlFTEQpIHsKLSAgICAgICAgICAgICAgICBpZiAoY2FsbF90cmFjZSh0c3RhdGUtPmNfdHJhY2VmdW5jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzdGF0ZS0+Y190cmFjZW9iaiwgZiwKKyAgICAgICAgICAgICAgICBpZiAoY2FsbF90cmFjZSh0c3RhdGUtPmNfdHJhY2VmdW5jLCB0c3RhdGUtPmNfdHJhY2VvYmosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHN0YXRlLCBmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VHJhY2VfUkVUVVJOLCByZXR2YWwpKSB7CiAgICAgICAgICAgICAgICAgICAgIFB5X0NMRUFSKHJldHZhbCk7CiAgICAgICAgICAgICAgICAgICAgIHdoeSA9IFdIWV9FWENFUFRJT047CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSBpZiAod2h5ID09IFdIWV9FWENFUFRJT04pIHsKLSAgICAgICAgICAgICAgICBjYWxsX3RyYWNlX3Byb3RlY3RlZCh0c3RhdGUtPmNfdHJhY2VmdW5jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzdGF0ZS0+Y190cmFjZW9iaiwgZiwKKyAgICAgICAgICAgICAgICBjYWxsX3RyYWNlX3Byb3RlY3RlZCh0c3RhdGUtPmNfdHJhY2VmdW5jLCB0c3RhdGUtPmNfdHJhY2VvYmosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHN0YXRlLCBmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VHJhY2VfUkVUVVJOLCBOVUxMKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBpZiAodHN0YXRlLT5jX3Byb2ZpbGVmdW5jKSB7CiAgICAgICAgICAgICBpZiAod2h5ID09IFdIWV9FWENFUFRJT04pCiAgICAgICAgICAgICAgICAgY2FsbF90cmFjZV9wcm90ZWN0ZWQodHN0YXRlLT5jX3Byb2ZpbGVmdW5jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzdGF0ZS0+Y19wcm9maWxlb2JqLCBmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzdGF0ZS0+Y19wcm9maWxlb2JqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzdGF0ZSwgZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVRyYWNlX1JFVFVSTiwgTlVMTCk7Ci0gICAgICAgICAgICBlbHNlIGlmIChjYWxsX3RyYWNlKHRzdGF0ZS0+Y19wcm9maWxlZnVuYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHN0YXRlLT5jX3Byb2ZpbGVvYmosIGYsCisgICAgICAgICAgICBlbHNlIGlmIChjYWxsX3RyYWNlKHRzdGF0ZS0+Y19wcm9maWxlZnVuYywgdHN0YXRlLT5jX3Byb2ZpbGVvYmosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzdGF0ZSwgZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlUcmFjZV9SRVRVUk4sIHJldHZhbCkpIHsKICAgICAgICAgICAgICAgICBQeV9DTEVBUihyZXR2YWwpOwogICAgICAgICAgICAgICAgIC8qIHdoeSA9IFdIWV9FWENFUFRJT047ICovCkBAIC0zMDc2LDYgKzMyMjcsNyBAQAogICAgIC8qIHBvcCBmcmFtZSAqLwogZXhpdF9ldmFsX2ZyYW1lOgogICAgIFB5X0xlYXZlUmVjdXJzaXZlQ2FsbCgpOworICAgIGYtPmZfZXhlY3V0aW5nID0gMDsKICAgICB0c3RhdGUtPmZyYW1lID0gZi0+Zl9iYWNrOwogCiAgICAgcmV0dXJuIHJldHZhbDsKQEAgLTMyNDEsOSArMzM5Myw5IEBACiAgICAgICAgICAgIFB5T2JqZWN0ICoqZGVmcywgaW50IGRlZmNvdW50LCBQeU9iamVjdCAqa3dkZWZzLCBQeU9iamVjdCAqY2xvc3VyZSkKIHsKICAgICBQeUNvZGVPYmplY3QqIGNvID0gKFB5Q29kZU9iamVjdCopX2NvOwotICAgIHJlZ2lzdGVyIFB5RnJhbWVPYmplY3QgKmY7Ci0gICAgcmVnaXN0ZXIgUHlPYmplY3QgKnJldHZhbCA9IE5VTEw7Ci0gICAgcmVnaXN0ZXIgUHlPYmplY3QgKipmYXN0bG9jYWxzLCAqKmZyZWV2YXJzOworICAgIFB5RnJhbWVPYmplY3QgKmY7CisgICAgUHlPYmplY3QgKnJldHZhbCA9IE5VTEw7CisgICAgUHlPYmplY3QgKipmYXN0bG9jYWxzLCAqKmZyZWV2YXJzOwogICAgIFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSA9IFB5VGhyZWFkU3RhdGVfR0VUKCk7CiAgICAgUHlPYmplY3QgKngsICp1OwogICAgIGludCB0b3RhbF9hcmdzID0gY28tPmNvX2FyZ2NvdW50ICsgY28tPmNvX2t3b25seWFyZ2NvdW50OwpAQCAtMzUxOSw3ICszNjcxLDcgQEAKIAogLyogTG9naWMgZm9yIHRoZSByYWlzZSBzdGF0ZW1lbnQgKHRvbyBjb21wbGljYXRlZCBmb3IgaW5saW5pbmcpLgogICAgVGhpcyAqY29uc3VtZXMqIGEgcmVmZXJlbmNlIGNvdW50IHRvIGVhY2ggb2YgaXRzIGFyZ3VtZW50cy4gKi8KLXN0YXRpYyBlbnVtIHdoeV9jb2RlCitzdGF0aWMgaW50CiBkb19yYWlzZShQeU9iamVjdCAqZXhjLCBQeU9iamVjdCAqY2F1c2UpCiB7CiAgICAgUHlPYmplY3QgKnR5cGUgPSBOVUxMLCAqdmFsdWUgPSBOVUxMOwpAQCAtMzUzNCwxMyArMzY4NiwxMyBAQAogICAgICAgICBpZiAodHlwZSA9PSBQeV9Ob25lKSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJObyBhY3RpdmUgZXhjZXB0aW9uIHRvIHJlcmFpc2UiKTsKLSAgICAgICAgICAgIHJldHVybiBXSFlfRVhDRVBUSU9OOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KICAgICAgICAgUHlfWElOQ1JFRih0eXBlKTsKICAgICAgICAgUHlfWElOQ1JFRih2YWx1ZSk7CiAgICAgICAgIFB5X1hJTkNSRUYodGIpOwogICAgICAgICBQeUVycl9SZXN0b3JlKHR5cGUsIHZhbHVlLCB0Yik7Ci0gICAgICAgIHJldHVybiBXSFlfUkVSQUlTRTsKKyAgICAgICAgcmV0dXJuIDE7CiAgICAgfQogCiAgICAgLyogV2Ugc3VwcG9ydCB0aGUgZm9sbG93aW5nIGZvcm1zIG9mIHJhaXNlOgpAQCAtMzYwMywxMyArMzc1NSwxMyBAQAogICAgIC8qIFB5RXJyX1NldE9iamVjdCBpbmNyZWYncyBpdHMgYXJndW1lbnRzICovCiAgICAgUHlfWERFQ1JFRih2YWx1ZSk7CiAgICAgUHlfWERFQ1JFRih0eXBlKTsKLSAgICByZXR1cm4gV0hZX0VYQ0VQVElPTjsKKyAgICByZXR1cm4gMDsKIAogcmFpc2VfZXJyb3I6CiAgICAgUHlfWERFQ1JFRih2YWx1ZSk7CiAgICAgUHlfWERFQ1JFRih0eXBlKTsKICAgICBQeV9YREVDUkVGKGNhdXNlKTsKLSAgICByZXR1cm4gV0hZX0VYQ0VQVElPTjsKKyAgICByZXR1cm4gMDsKIH0KIAogLyogSXRlcmF0ZSB2IGFyZ2NudCB0aW1lcyBhbmQgc3RvcmUgdGhlIHJlc3VsdHMgb24gdGhlIHN0YWNrICh2aWEgZGVjcmVhc2luZwpAQCAtMzcwNiw0MCArMzg1OCw0MyBAQAogI2VuZGlmCiAKIHN0YXRpYyB2b2lkCi1jYWxsX2V4Y190cmFjZShQeV90cmFjZWZ1bmMgZnVuYywgUHlPYmplY3QgKnNlbGYsIFB5RnJhbWVPYmplY3QgKmYpCitjYWxsX2V4Y190cmFjZShQeV90cmFjZWZ1bmMgZnVuYywgUHlPYmplY3QgKnNlbGYsCisgICAgICAgICAgICAgICBQeVRocmVhZFN0YXRlICp0c3RhdGUsIFB5RnJhbWVPYmplY3QgKmYpCiB7Ci0gICAgUHlPYmplY3QgKnR5cGUsICp2YWx1ZSwgKnRyYWNlYmFjaywgKmFyZzsKKyAgICBQeU9iamVjdCAqdHlwZSwgKnZhbHVlLCAqdHJhY2ViYWNrLCAqb3JpZ190cmFjZWJhY2ssICphcmc7CiAgICAgaW50IGVycjsKLSAgICBQeUVycl9GZXRjaCgmdHlwZSwgJnZhbHVlLCAmdHJhY2ViYWNrKTsKKyAgICBQeUVycl9GZXRjaCgmdHlwZSwgJnZhbHVlLCAmb3JpZ190cmFjZWJhY2spOwogICAgIGlmICh2YWx1ZSA9PSBOVUxMKSB7CiAgICAgICAgIHZhbHVlID0gUHlfTm9uZTsKICAgICAgICAgUHlfSU5DUkVGKHZhbHVlKTsKICAgICB9Ci0gICAgUHlFcnJfTm9ybWFsaXplRXhjZXB0aW9uKCZ0eXBlLCAmdmFsdWUsICZ0cmFjZWJhY2spOworICAgIFB5RXJyX05vcm1hbGl6ZUV4Y2VwdGlvbigmdHlwZSwgJnZhbHVlLCAmb3JpZ190cmFjZWJhY2spOworICAgIHRyYWNlYmFjayA9IChvcmlnX3RyYWNlYmFjayAhPSBOVUxMKSA/IG9yaWdfdHJhY2ViYWNrIDogUHlfTm9uZTsKICAgICBhcmcgPSBQeVR1cGxlX1BhY2soMywgdHlwZSwgdmFsdWUsIHRyYWNlYmFjayk7CiAgICAgaWYgKGFyZyA9PSBOVUxMKSB7Ci0gICAgICAgIFB5RXJyX1Jlc3RvcmUodHlwZSwgdmFsdWUsIHRyYWNlYmFjayk7CisgICAgICAgIFB5RXJyX1Jlc3RvcmUodHlwZSwgdmFsdWUsIG9yaWdfdHJhY2ViYWNrKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBlcnIgPSBjYWxsX3RyYWNlKGZ1bmMsIHNlbGYsIGYsIFB5VHJhY2VfRVhDRVBUSU9OLCBhcmcpOworICAgIGVyciA9IGNhbGxfdHJhY2UoZnVuYywgc2VsZiwgdHN0YXRlLCBmLCBQeVRyYWNlX0VYQ0VQVElPTiwgYXJnKTsKICAgICBQeV9ERUNSRUYoYXJnKTsKICAgICBpZiAoZXJyID09IDApCi0gICAgICAgIFB5RXJyX1Jlc3RvcmUodHlwZSwgdmFsdWUsIHRyYWNlYmFjayk7CisgICAgICAgIFB5RXJyX1Jlc3RvcmUodHlwZSwgdmFsdWUsIG9yaWdfdHJhY2ViYWNrKTsKICAgICBlbHNlIHsKICAgICAgICAgUHlfWERFQ1JFRih0eXBlKTsKICAgICAgICAgUHlfWERFQ1JFRih2YWx1ZSk7Ci0gICAgICAgIFB5X1hERUNSRUYodHJhY2ViYWNrKTsKKyAgICAgICAgUHlfWERFQ1JFRihvcmlnX3RyYWNlYmFjayk7CiAgICAgfQogfQogCiBzdGF0aWMgaW50Ci1jYWxsX3RyYWNlX3Byb3RlY3RlZChQeV90cmFjZWZ1bmMgZnVuYywgUHlPYmplY3QgKm9iaiwgUHlGcmFtZU9iamVjdCAqZnJhbWUsCitjYWxsX3RyYWNlX3Byb3RlY3RlZChQeV90cmFjZWZ1bmMgZnVuYywgUHlPYmplY3QgKm9iaiwKKyAgICAgICAgICAgICAgICAgICAgIFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSwgUHlGcmFtZU9iamVjdCAqZnJhbWUsCiAgICAgICAgICAgICAgICAgICAgICBpbnQgd2hhdCwgUHlPYmplY3QgKmFyZykKIHsKICAgICBQeU9iamVjdCAqdHlwZSwgKnZhbHVlLCAqdHJhY2ViYWNrOwogICAgIGludCBlcnI7CiAgICAgUHlFcnJfRmV0Y2goJnR5cGUsICZ2YWx1ZSwgJnRyYWNlYmFjayk7Ci0gICAgZXJyID0gY2FsbF90cmFjZShmdW5jLCBvYmosIGZyYW1lLCB3aGF0LCBhcmcpOworICAgIGVyciA9IGNhbGxfdHJhY2UoZnVuYywgb2JqLCB0c3RhdGUsIGZyYW1lLCB3aGF0LCBhcmcpOwogICAgIGlmIChlcnIgPT0gMCkKICAgICB7CiAgICAgICAgIFB5RXJyX1Jlc3RvcmUodHlwZSwgdmFsdWUsIHRyYWNlYmFjayk7CkBAIC0zNzU0LDEwICszOTA5LDEwIEBACiB9CiAKIHN0YXRpYyBpbnQKLWNhbGxfdHJhY2UoUHlfdHJhY2VmdW5jIGZ1bmMsIFB5T2JqZWN0ICpvYmosIFB5RnJhbWVPYmplY3QgKmZyYW1lLAorY2FsbF90cmFjZShQeV90cmFjZWZ1bmMgZnVuYywgUHlPYmplY3QgKm9iaiwKKyAgICAgICAgICAgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlLCBQeUZyYW1lT2JqZWN0ICpmcmFtZSwKICAgICAgICAgICAgaW50IHdoYXQsIFB5T2JqZWN0ICphcmcpCiB7Ci0gICAgcmVnaXN0ZXIgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlID0gZnJhbWUtPmZfdHN0YXRlOwogICAgIGludCByZXN1bHQ7CiAgICAgaWYgKHRzdGF0ZS0+dHJhY2luZykKICAgICAgICAgcmV0dXJuIDA7CkBAIC0zNzczLDggKzM5MjgsNyBAQAogUHlPYmplY3QgKgogX1B5RXZhbF9DYWxsVHJhY2luZyhQeU9iamVjdCAqZnVuYywgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgUHlGcmFtZU9iamVjdCAqZnJhbWUgPSBQeUV2YWxfR2V0RnJhbWUoKTsKLSAgICBQeVRocmVhZFN0YXRlICp0c3RhdGUgPSBmcmFtZS0+Zl90c3RhdGU7CisgICAgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlID0gUHlUaHJlYWRTdGF0ZV9HRVQoKTsKICAgICBpbnQgc2F2ZV90cmFjaW5nID0gdHN0YXRlLT50cmFjaW5nOwogICAgIGludCBzYXZlX3VzZV90cmFjaW5nID0gdHN0YXRlLT51c2VfdHJhY2luZzsKICAgICBQeU9iamVjdCAqcmVzdWx0OwpAQCAtMzc5MSw4ICszOTQ1LDggQEAKIC8qIFNlZSBPYmplY3RzL2xub3RhYl9ub3Rlcy50eHQgZm9yIGEgZGVzY3JpcHRpb24gb2YgaG93IHRyYWNpbmcgd29ya3MuICovCiBzdGF0aWMgaW50CiBtYXliZV9jYWxsX2xpbmVfdHJhY2UoUHlfdHJhY2VmdW5jIGZ1bmMsIFB5T2JqZWN0ICpvYmosCi0gICAgICAgICAgICAgICAgICAgICAgUHlGcmFtZU9iamVjdCAqZnJhbWUsIGludCAqaW5zdHJfbGIsIGludCAqaW5zdHJfdWIsCi0gICAgICAgICAgICAgICAgICAgICAgaW50ICppbnN0cl9wcmV2KQorICAgICAgICAgICAgICAgICAgICAgIFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSwgUHlGcmFtZU9iamVjdCAqZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgaW50ICppbnN0cl9sYiwgaW50ICppbnN0cl91YiwgaW50ICppbnN0cl9wcmV2KQogewogICAgIGludCByZXN1bHQgPSAwOwogICAgIGludCBsaW5lID0gZnJhbWUtPmZfbGluZW5vOwpAQCAtMzgxMiw3ICszOTY2LDcgQEAKICAgICAgICBudW1iZXIgYW5kIGNhbGwgdGhlIHRyYWNlIGZ1bmN0aW9uLiAqLwogICAgIGlmIChmcmFtZS0+Zl9sYXN0aSA9PSAqaW5zdHJfbGIgfHwgZnJhbWUtPmZfbGFzdGkgPCAqaW5zdHJfcHJldikgewogICAgICAgICBmcmFtZS0+Zl9saW5lbm8gPSBsaW5lOwotICAgICAgICByZXN1bHQgPSBjYWxsX3RyYWNlKGZ1bmMsIG9iaiwgZnJhbWUsIFB5VHJhY2VfTElORSwgUHlfTm9uZSk7CisgICAgICAgIHJlc3VsdCA9IGNhbGxfdHJhY2UoZnVuYywgb2JqLCB0c3RhdGUsIGZyYW1lLCBQeVRyYWNlX0xJTkUsIFB5X05vbmUpOwogICAgIH0KICAgICAqaW5zdHJfcHJldiA9IGZyYW1lLT5mX2xhc3RpOwogICAgIHJldHVybiByZXN1bHQ7CkBAIC0zODY4LDkgKzQwMjIsMTUgQEAKIFB5RXZhbF9HZXRMb2NhbHModm9pZCkKIHsKICAgICBQeUZyYW1lT2JqZWN0ICpjdXJyZW50X2ZyYW1lID0gUHlFdmFsX0dldEZyYW1lKCk7Ci0gICAgaWYgKGN1cnJlbnRfZnJhbWUgPT0gTlVMTCkKKyAgICBpZiAoY3VycmVudF9mcmFtZSA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19TeXN0ZW1FcnJvciwgImZyYW1lIGRvZXMgbm90IGV4aXN0Iik7CiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIFB5RnJhbWVfRmFzdFRvTG9jYWxzKGN1cnJlbnRfZnJhbWUpOworICAgIH0KKworICAgIGlmIChQeUZyYW1lX0Zhc3RUb0xvY2Fsc1dpdGhFcnJvcihjdXJyZW50X2ZyYW1lKSA8IDApCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgYXNzZXJ0KGN1cnJlbnRfZnJhbWUtPmZfbG9jYWxzICE9IE5VTEwpOwogICAgIHJldHVybiBjdXJyZW50X2ZyYW1lLT5mX2xvY2FsczsKIH0KIApAQCAtMzg4MCw4ICs0MDQwLDkgQEAKICAgICBQeUZyYW1lT2JqZWN0ICpjdXJyZW50X2ZyYW1lID0gUHlFdmFsX0dldEZyYW1lKCk7CiAgICAgaWYgKGN1cnJlbnRfZnJhbWUgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gY3VycmVudF9mcmFtZS0+Zl9nbG9iYWxzOworCisgICAgYXNzZXJ0KGN1cnJlbnRfZnJhbWUtPmZfZ2xvYmFscyAhPSBOVUxMKTsKKyAgICByZXR1cm4gY3VycmVudF9mcmFtZS0+Zl9nbG9iYWxzOwogfQogCiBQeUZyYW1lT2JqZWN0ICoKQEAgLTM5MjMsNiArNDA4NCwxMyBAQAogewogICAgIFB5T2JqZWN0ICpyZXN1bHQ7CiAKKyNpZmRlZiBQeV9ERUJVRworICAgIC8qIFB5RXZhbF9DYWxsT2JqZWN0V2l0aEtleXdvcmRzKCkgbXVzdCBub3QgYmUgY2FsbGVkIHdpdGggYW4gZXhjZXB0aW9uCisgICAgICAgc2V0LCBiZWNhdXNlIGl0IG1heSBjbGVhciBpdCAoZGlyZWN0bHkgb3IgaW5kaXJlY3RseSkKKyAgICAgICBhbmQgc28gdGhlIGNhbGxlciBsb3NlcyBpdHMgZXhjZXB0aW9uICovCisgICAgYXNzZXJ0KCFQeUVycl9PY2N1cnJlZCgpKTsKKyNlbmRpZgorCiAgICAgaWYgKGFyZyA9PSBOVUxMKSB7CiAgICAgICAgIGFyZyA9IFB5VHVwbGVfTmV3KDApOwogICAgICAgICBpZiAoYXJnID09IE5VTEwpCkBAIC0zOTQ1LDYgKzQxMTMsOSBAQAogCiAgICAgcmVzdWx0ID0gUHlPYmplY3RfQ2FsbChmdW5jLCBhcmcsIGt3KTsKICAgICBQeV9ERUNSRUYoYXJnKTsKKworICAgIGFzc2VydCgocmVzdWx0ICE9IE5VTEwgJiYgIVB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgIHx8IChyZXN1bHQgPT0gTlVMTCAmJiBQeUVycl9PY2N1cnJlZCgpKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMzk5MSwxMCArNDE2Miw5IEBACiAKICNkZWZpbmUgQ19UUkFDRSh4LCBjYWxsKSBcCiBpZiAodHN0YXRlLT51c2VfdHJhY2luZyAmJiB0c3RhdGUtPmNfcHJvZmlsZWZ1bmMpIHsgXAotICAgIGlmIChjYWxsX3RyYWNlKHRzdGF0ZS0+Y19wcm9maWxlZnVuYywgXAotICAgICAgICB0c3RhdGUtPmNfcHJvZmlsZW9iaiwgXAotICAgICAgICB0c3RhdGUtPmZyYW1lLCBQeVRyYWNlX0NfQ0FMTCwgXAotICAgICAgICBmdW5jKSkgeyBcCisgICAgaWYgKGNhbGxfdHJhY2UodHN0YXRlLT5jX3Byb2ZpbGVmdW5jLCB0c3RhdGUtPmNfcHJvZmlsZW9iaiwgXAorICAgICAgICB0c3RhdGUsIHRzdGF0ZS0+ZnJhbWUsIFwKKyAgICAgICAgUHlUcmFjZV9DX0NBTEwsIGZ1bmMpKSB7IFwKICAgICAgICAgeCA9IE5VTEw7IFwKICAgICB9IFwKICAgICBlbHNlIHsgXApAQCAtNDAwMywxNCArNDE3MywxNCBAQAogICAgICAgICAgICAgaWYgKHggPT0gTlVMTCkgeyBcCiAgICAgICAgICAgICAgICAgY2FsbF90cmFjZV9wcm90ZWN0ZWQodHN0YXRlLT5jX3Byb2ZpbGVmdW5jLCBcCiAgICAgICAgICAgICAgICAgICAgIHRzdGF0ZS0+Y19wcm9maWxlb2JqLCBcCi0gICAgICAgICAgICAgICAgICAgIHRzdGF0ZS0+ZnJhbWUsIFB5VHJhY2VfQ19FWENFUFRJT04sIFwKLSAgICAgICAgICAgICAgICAgICAgZnVuYyk7IFwKKyAgICAgICAgICAgICAgICAgICAgdHN0YXRlLCB0c3RhdGUtPmZyYW1lLCBcCisgICAgICAgICAgICAgICAgICAgIFB5VHJhY2VfQ19FWENFUFRJT04sIGZ1bmMpOyBcCiAgICAgICAgICAgICAgICAgLyogWFhYIHNob3VsZCBwYXNzICh0eXBlLCB2YWx1ZSwgdGIpICovIFwKICAgICAgICAgICAgIH0gZWxzZSB7IFwKICAgICAgICAgICAgICAgICBpZiAoY2FsbF90cmFjZSh0c3RhdGUtPmNfcHJvZmlsZWZ1bmMsIFwKICAgICAgICAgICAgICAgICAgICAgdHN0YXRlLT5jX3Byb2ZpbGVvYmosIFwKLSAgICAgICAgICAgICAgICAgICAgdHN0YXRlLT5mcmFtZSwgUHlUcmFjZV9DX1JFVFVSTiwgXAotICAgICAgICAgICAgICAgICAgICBmdW5jKSkgeyBcCisgICAgICAgICAgICAgICAgICAgIHRzdGF0ZSwgdHN0YXRlLT5mcmFtZSwgXAorICAgICAgICAgICAgICAgICAgICBQeVRyYWNlX0NfUkVUVVJOLCBmdW5jKSkgeyBcCiAgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih4KTsgXAogICAgICAgICAgICAgICAgICAgICB4ID0gTlVMTDsgXAogICAgICAgICAgICAgICAgIH0gXApAQCAtNDA2MiwxMCArNDIzMiwxNSBAQAogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIFB5T2JqZWN0ICpjYWxsYXJnczsKICAgICAgICAgICAgIGNhbGxhcmdzID0gbG9hZF9hcmdzKHBwX3N0YWNrLCBuYSk7Ci0gICAgICAgICAgICBSRUFEX1RJTUVTVEFNUCgqcGludHIwKTsKLSAgICAgICAgICAgIENfVFJBQ0UoeCwgUHlDRnVuY3Rpb25fQ2FsbChmdW5jLGNhbGxhcmdzLE5VTEwpKTsKLSAgICAgICAgICAgIFJFQURfVElNRVNUQU1QKCpwaW50cjEpOwotICAgICAgICAgICAgUHlfWERFQ1JFRihjYWxsYXJncyk7CisgICAgICAgICAgICBpZiAoY2FsbGFyZ3MgIT0gTlVMTCkgeworICAgICAgICAgICAgICAgIFJFQURfVElNRVNUQU1QKCpwaW50cjApOworICAgICAgICAgICAgICAgIENfVFJBQ0UoeCwgUHlDRnVuY3Rpb25fQ2FsbChmdW5jLGNhbGxhcmdzLE5VTEwpKTsKKyAgICAgICAgICAgICAgICBSRUFEX1RJTUVTVEFNUCgqcGludHIxKTsKKyAgICAgICAgICAgICAgICBQeV9YREVDUkVGKGNhbGxhcmdzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHggPSBOVUxMOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKFB5TWV0aG9kX0NoZWNrKGZ1bmMpICYmIFB5TWV0aG9kX0dFVF9TRUxGKGZ1bmMpICE9IE5VTEwpIHsKQEAgLTQwOTAsNiArNDI2NSw4IEBACiAgICAgICAgIFJFQURfVElNRVNUQU1QKCpwaW50cjEpOwogICAgICAgICBQeV9ERUNSRUYoZnVuYyk7CiAgICAgfQorICAgIGFzc2VydCgoeCAhPSBOVUxMICYmICFQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICB8fCAoeCA9PSBOVUxMICYmIFB5RXJyX09jY3VycmVkKCkpKTsKIAogICAgIC8qIENsZWFyIHRoZSBzdGFjayBvZiB0aGUgZnVuY3Rpb24gb2JqZWN0LiAgQWxzbyByZW1vdmVzCiAgICAgICAgdGhlIGFyZ3VtZW50cyBpbiBjYXNlIHRoZXkgd2VyZW4ndCBjb25zdW1lZCBhbHJlYWR5CkBAIC00MTAwLDYgKzQyNzcsOSBAQAogICAgICAgICBQeV9ERUNSRUYodyk7CiAgICAgICAgIFBDQUxMKFBDQUxMX1BPUCk7CiAgICAgfQorCisgICAgYXNzZXJ0KCh4ICE9IE5VTEwgJiYgIVB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgIHx8ICh4ID09IE5VTEwgJiYgUHlFcnJfT2NjdXJyZWQoKSkpOwogICAgIHJldHVybiB4OwogfQogCkBAIC00MzgzLDYgKzQ1NjMsOCBAQAogICAgIFB5X1hERUNSRUYoY2FsbGFyZ3MpOwogICAgIFB5X1hERUNSRUYoa3dkaWN0KTsKICAgICBQeV9YREVDUkVGKHN0YXJhcmcpOworICAgIGFzc2VydCgocmVzdWx0ICE9IE5VTEwgJiYgIVB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgIHx8IChyZXN1bHQgPT0gTlVMTCAmJiBQeUVycl9PY2N1cnJlZCgpKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtNDQyMSw3ICs0NjAzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAiQmFzZUV4Y2VwdGlvbiBpcyBub3QgYWxsb3dlZCIKIAogc3RhdGljIFB5T2JqZWN0ICoKLWNtcF9vdXRjb21lKGludCBvcCwgcmVnaXN0ZXIgUHlPYmplY3QgKnYsIHJlZ2lzdGVyIFB5T2JqZWN0ICp3KQorY21wX291dGNvbWUoaW50IG9wLCBQeU9iamVjdCAqdiwgUHlPYmplY3QgKncpCiB7CiAgICAgaW50IHJlcyA9IDA7CiAgICAgc3dpdGNoIChvcCkgewpAQCAtNDQ3OSw3ICs0NjYxLDcgQEAKIAogICAgIHggPSBQeU9iamVjdF9HZXRBdHRyKHYsIG5hbWUpOwogICAgIGlmICh4ID09IE5VTEwgJiYgUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19BdHRyaWJ1dGVFcnJvcikpIHsKLSAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX0ltcG9ydEVycm9yLCAiY2Fubm90IGltcG9ydCBuYW1lICVTIiwgbmFtZSk7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19JbXBvcnRFcnJvciwgImNhbm5vdCBpbXBvcnQgbmFtZSAlUiIsIG5hbWUpOwogICAgIH0KICAgICByZXR1cm4geDsKIH0KZGlmZiAtLWdpdCBhL1B5dGhvbi9jb2RlY3MuYyBiL1B5dGhvbi9jb2RlY3MuYwppbmRleCBlYTMzYzQ5Li4yN2YyYWViIDEwMDY0NAotLS0gYS9QeXRob24vY29kZWNzLmMKKysrIGIvUHl0aG9uL2NvZGVjcy5jCkBAIC01Myw3ICs1Myw3IEBACiBzdGF0aWMKIFB5T2JqZWN0ICpub3JtYWxpemVzdHJpbmcoY29uc3QgY2hhciAqc3RyaW5nKQogewotICAgIHJlZ2lzdGVyIHNpemVfdCBpOworICAgIHNpemVfdCBpOwogICAgIHNpemVfdCBsZW4gPSBzdHJsZW4oc3RyaW5nKTsKICAgICBjaGFyICpwOwogICAgIFB5T2JqZWN0ICp2OwpAQCAtNjUsOSArNjUsOSBAQAogCiAgICAgcCA9IFB5TWVtX01hbGxvYyhsZW4gKyAxKTsKICAgICBpZiAocCA9PSBOVUxMKQotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0gICAgICAgIHJlZ2lzdGVyIGNoYXIgY2ggPSBzdHJpbmdbaV07CisgICAgICAgIGNoYXIgY2ggPSBzdHJpbmdbaV07CiAgICAgICAgIGlmIChjaCA9PSAnICcpCiAgICAgICAgICAgICBjaCA9ICctJzsKICAgICAgICAgZWxzZQpAQCAtMTg1LDYgKzE4NSwzMiBAQAogICAgIHJldHVybiBOVUxMOwogfQogCitpbnQgX1B5Q29kZWNfRm9yZ2V0KGNvbnN0IGNoYXIgKmVuY29kaW5nKQoreworICAgIFB5SW50ZXJwcmV0ZXJTdGF0ZSAqaW50ZXJwOworICAgIFB5T2JqZWN0ICp2OworICAgIGludCByZXN1bHQ7CisKKyAgICBpbnRlcnAgPSBQeVRocmVhZFN0YXRlX0dFVCgpLT5pbnRlcnA7CisgICAgaWYgKGludGVycC0+Y29kZWNfc2VhcmNoX3BhdGggPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgLyogQ29udmVydCB0aGUgZW5jb2RpbmcgdG8gYSBub3JtYWxpemVkIFB5dGhvbiBzdHJpbmc6IGFsbAorICAgICAgIGNoYXJhY3RlcnMgYXJlIGNvbnZlcnRlZCB0byBsb3dlciBjYXNlLCBzcGFjZXMgYW5kIGh5cGhlbnMgYXJlCisgICAgICAgcmVwbGFjZWQgd2l0aCB1bmRlcnNjb3Jlcy4gKi8KKyAgICB2ID0gbm9ybWFsaXplc3RyaW5nKGVuY29kaW5nKTsKKyAgICBpZiAodiA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAvKiBEcm9wIHRoZSBuYW1lZCBjb2RlYyBmcm9tIHRoZSBpbnRlcm5hbCBjYWNoZSAqLworICAgIHJlc3VsdCA9IFB5RGljdF9EZWxJdGVtKGludGVycC0+Y29kZWNfc2VhcmNoX2NhY2hlLCB2KTsKKyAgICBQeV9ERUNSRUYodik7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiAvKiBDb2RlYyByZWdpc3RyeSBlbmNvZGluZyBjaGVjayBBUEkuICovCiAKIGludCBQeUNvZGVjX0tub3duRW5jb2RpbmcoY29uc3QgY2hhciAqZW5jb2RpbmcpCkBAIC0zNjAsNiArMzg2LDIyIEBACiAgICAgcmV0dXJuIGNvZGVjX2dldHN0cmVhbWNvZGVjKGVuY29kaW5nLCBzdHJlYW0sIGVycm9ycywgMyk7CiB9CiAKKy8qIEhlbHBlciB0aGF0IHRyaWVzIHRvIGVuc3VyZSB0aGUgcmVwb3J0ZWQgZXhjZXB0aW9uIGNoYWluIGluZGljYXRlcyB0aGUKKyAqIGNvZGVjIHRoYXQgd2FzIGludm9rZWQgdG8gdHJpZ2dlciB0aGUgZmFpbHVyZSB3aXRob3V0IGNoYW5naW5nIHRoZSB0eXBlCisgKiBvZiB0aGUgZXhjZXB0aW9uIHJhaXNlZC4KKyAqLworc3RhdGljIHZvaWQKK3dyYXBfY29kZWNfZXJyb3IoY29uc3QgY2hhciAqb3BlcmF0aW9uLAorICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplbmNvZGluZykKK3sKKyAgICAvKiBUcnlTZXRGcm9tQ2F1c2Ugd2lsbCByZXBsYWNlIHRoZSBhY3RpdmUgZXhjZXB0aW9uIHdpdGggYSBzdWl0YWJseQorICAgICAqIHVwZGF0ZWQgY2xvbmUgaWYgaXQgY2FuLCBvdGhlcndpc2UgaXQgd2lsbCBsZWF2ZSB0aGUgb3JpZ2luYWwKKyAgICAgKiBleGNlcHRpb24gYWxvbmUuCisgICAgICovCisgICAgX1B5RXJyX1RyeVNldEZyb21DYXVzZSgiJXMgd2l0aCAnJXMnIGNvZGVjIGZhaWxlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24sIGVuY29kaW5nKTsKK30KKwogLyogRW5jb2RlIGFuIG9iamVjdCAoZS5nLiBhbiBVbmljb2RlIG9iamVjdCkgdXNpbmcgdGhlIGdpdmVuIGVuY29kaW5nCiAgICBhbmQgcmV0dXJuIHRoZSByZXN1bHRpbmcgZW5jb2RlZCBvYmplY3QgKHVzdWFsbHkgYSBQeXRob24gc3RyaW5nKS4KIApAQCAtMzc5LDggKzQyMSwxMCBAQAogICAgICAgICBnb3RvIG9uRXJyb3I7CiAKICAgICByZXN1bHQgPSBQeUV2YWxfQ2FsbE9iamVjdChlbmNvZGVyLCBhcmdzKTsKLSAgICBpZiAocmVzdWx0ID09IE5VTEwpCisgICAgaWYgKHJlc3VsdCA9PSBOVUxMKSB7CisgICAgICAgIHdyYXBfY29kZWNfZXJyb3IoImVuY29kaW5nIiwgZW5jb2RpbmcpOwogICAgICAgICBnb3RvIG9uRXJyb3I7CisgICAgfQogCiAgICAgaWYgKCFQeVR1cGxlX0NoZWNrKHJlc3VsdCkgfHwKICAgICAgICAgUHlUdXBsZV9HRVRfU0laRShyZXN1bHQpICE9IDIpIHsKQEAgLTQyMyw4ICs0NjcsMTAgQEAKICAgICAgICAgZ290byBvbkVycm9yOwogCiAgICAgcmVzdWx0ID0gUHlFdmFsX0NhbGxPYmplY3QoZGVjb2RlcixhcmdzKTsKLSAgICBpZiAocmVzdWx0ID09IE5VTEwpCisgICAgaWYgKHJlc3VsdCA9PSBOVUxMKSB7CisgICAgICAgIHdyYXBfY29kZWNfZXJyb3IoImRlY29kaW5nIiwgZW5jb2RpbmcpOwogICAgICAgICBnb3RvIG9uRXJyb3I7CisgICAgfQogICAgIGlmICghUHlUdXBsZV9DaGVjayhyZXN1bHQpIHx8CiAgICAgICAgIFB5VHVwbGVfR0VUX1NJWkUocmVzdWx0KSAhPSAyKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCkBAIC01MDMsMTIgKzU0OSwxMyBAQAogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaXNfdGV4dF9jb2RlYyA9IFB5T2JqZWN0X0lzVHJ1ZShhdHRyKTsKICAgICAgICAgICAgIFB5X0RFQ1JFRihhdHRyKTsKLSAgICAgICAgICAgIGlmICghaXNfdGV4dF9jb2RlYykgeworICAgICAgICAgICAgaWYgKGlzX3RleHRfY29kZWMgPD0gMCkgewogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihjb2RlYyk7Ci0gICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX0xvb2t1cEVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJyUuNDAwcycgaXMgbm90IGEgdGV4dCBlbmNvZGluZzsgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidXNlICVzIHRvIGhhbmRsZSBhcmJpdHJhcnkgY29kZWNzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2RpbmcsIGFsdGVybmF0ZV9jb21tYW5kKTsKKyAgICAgICAgICAgICAgICBpZiAoIWlzX3RleHRfY29kZWMpCisgICAgICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19Mb29rdXBFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICInJS40MDBzJyBpcyBub3QgYSB0ZXh0IGVuY29kaW5nOyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidXNlICVzIHRvIGhhbmRsZSBhcmJpdHJhcnkgY29kZWNzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nLCBhbHRlcm5hdGVfY29tbWFuZCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTU4OSw3ICs2MzYsNyBAQAogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogICAgIHJldHVybiBQeURpY3RfU2V0SXRlbVN0cmluZyhpbnRlcnAtPmNvZGVjX2Vycm9yX3JlZ2lzdHJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKW5hbWUsIGVycm9yKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSwgZXJyb3IpOwogfQogCiAvKiBMb29rdXAgdGhlIGVycm9yIGhhbmRsaW5nIGNhbGxiYWNrIGZ1bmN0aW9uIHJlZ2lzdGVyZWQgdW5kZXIgdGhlCkBAIC02MDUsNyArNjUyLDcgQEAKIAogICAgIGlmIChuYW1lPT1OVUxMKQogICAgICAgICBuYW1lID0gInN0cmljdCI7Ci0gICAgaGFuZGxlciA9IFB5RGljdF9HZXRJdGVtU3RyaW5nKGludGVycC0+Y29kZWNfZXJyb3JfcmVnaXN0cnksIChjaGFyICopbmFtZSk7CisgICAgaGFuZGxlciA9IFB5RGljdF9HZXRJdGVtU3RyaW5nKGludGVycC0+Y29kZWNfZXJyb3JfcmVnaXN0cnksIG5hbWUpOwogICAgIGlmICghaGFuZGxlcikKICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX0xvb2t1cEVycm9yLCAidW5rbm93biBlcnJvciBoYW5kbGVyIG5hbWUgJyUuNDAwcyciLCBuYW1lKTsKICAgICBlbHNlCkBAIC02MTUsMTggKzY2Miw5IEBACiAKIHN0YXRpYyB2b2lkIHdyb25nX2V4Y2VwdGlvbl90eXBlKFB5T2JqZWN0ICpleGMpCiB7Ci0gICAgX1B5X0lERU5USUZJRVIoX19jbGFzc19fKTsKLSAgICBfUHlfSURFTlRJRklFUihfX25hbWVfXyk7Ci0gICAgUHlPYmplY3QgKnR5cGUgPSBfUHlPYmplY3RfR2V0QXR0cklkKGV4YywgJlB5SWRfX19jbGFzc19fKTsKLSAgICBpZiAodHlwZSAhPSBOVUxMKSB7Ci0gICAgICAgIFB5T2JqZWN0ICpuYW1lID0gX1B5T2JqZWN0X0dldEF0dHJJZCh0eXBlLCAmUHlJZF9fX25hbWVfXyk7Ci0gICAgICAgIFB5X0RFQ1JFRih0eXBlKTsKLSAgICAgICAgaWYgKG5hbWUgIT0gTlVMTCkgewotICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiZG9uJ3Qga25vdyBob3cgdG8gaGFuZGxlICVTIGluIGVycm9yIGNhbGxiYWNrIiwgbmFtZSk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYobmFtZSk7Ci0gICAgICAgIH0KLSAgICB9CisgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgImRvbid0IGtub3cgaG93IHRvIGhhbmRsZSAlLjIwMHMgaW4gZXJyb3IgY2FsbGJhY2siLAorICAgICAgICAgICAgICAgICBleGMtPm9iX3R5cGUtPnRwX25hbWUpOwogfQogCiBQeU9iamVjdCAqUHlDb2RlY19TdHJpY3RFcnJvcnMoUHlPYmplY3QgKmV4YykKQEAgLTY0MiwxNSArNjgwLDE2IEBACiBQeU9iamVjdCAqUHlDb2RlY19JZ25vcmVFcnJvcnMoUHlPYmplY3QgKmV4YykKIHsKICAgICBQeV9zc2l6ZV90IGVuZDsKLSAgICBpZiAoUHlPYmplY3RfSXNJbnN0YW5jZShleGMsIFB5RXhjX1VuaWNvZGVFbmNvZGVFcnJvcikpIHsKKworICAgIGlmIChQeU9iamVjdF9UeXBlQ2hlY2soZXhjLCAoUHlUeXBlT2JqZWN0ICopUHlFeGNfVW5pY29kZUVuY29kZUVycm9yKSkgewogICAgICAgICBpZiAoUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0RW5kKGV4YywgJmVuZCkpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgZWxzZSBpZiAoUHlPYmplY3RfSXNJbnN0YW5jZShleGMsIFB5RXhjX1VuaWNvZGVEZWNvZGVFcnJvcikpIHsKKyAgICBlbHNlIGlmIChQeU9iamVjdF9UeXBlQ2hlY2soZXhjLCAoUHlUeXBlT2JqZWN0ICopUHlFeGNfVW5pY29kZURlY29kZUVycm9yKSkgewogICAgICAgICBpZiAoUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0RW5kKGV4YywgJmVuZCkpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgZWxzZSBpZiAoUHlPYmplY3RfSXNJbnN0YW5jZShleGMsIFB5RXhjX1VuaWNvZGVUcmFuc2xhdGVFcnJvcikpIHsKKyAgICBlbHNlIGlmIChQeU9iamVjdF9UeXBlQ2hlY2soZXhjLCAoUHlUeXBlT2JqZWN0ICopUHlFeGNfVW5pY29kZVRyYW5zbGF0ZUVycm9yKSkgewogICAgICAgICBpZiAoUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfR2V0RW5kKGV4YywgJmVuZCkpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CkBAIC02NjYsNyArNzA1LDcgQEAKIHsKICAgICBQeV9zc2l6ZV90IHN0YXJ0LCBlbmQsIGksIGxlbjsKIAotICAgIGlmIChQeU9iamVjdF9Jc0luc3RhbmNlKGV4YywgUHlFeGNfVW5pY29kZUVuY29kZUVycm9yKSkgeworICAgIGlmIChQeU9iamVjdF9UeXBlQ2hlY2soZXhjLCAoUHlUeXBlT2JqZWN0ICopUHlFeGNfVW5pY29kZUVuY29kZUVycm9yKSkgewogICAgICAgICBQeU9iamVjdCAqcmVzOwogICAgICAgICBpbnQga2luZDsKICAgICAgICAgdm9pZCAqZGF0YTsKQEAgLTY4NSwxNCArNzI0LDE0IEBACiAgICAgICAgIGFzc2VydChfUHlVbmljb2RlX0NoZWNrQ29uc2lzdGVuY3kocmVzLCAxKSk7CiAgICAgICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCIoTm4pIiwgcmVzLCBlbmQpOwogICAgIH0KLSAgICBlbHNlIGlmIChQeU9iamVjdF9Jc0luc3RhbmNlKGV4YywgUHlFeGNfVW5pY29kZURlY29kZUVycm9yKSkgeworICAgIGVsc2UgaWYgKFB5T2JqZWN0X1R5cGVDaGVjayhleGMsIChQeVR5cGVPYmplY3QgKilQeUV4Y19Vbmljb2RlRGVjb2RlRXJyb3IpKSB7CiAgICAgICAgIGlmIChQeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRFbmQoZXhjLCAmZW5kKSkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiKENuKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpUHlfVU5JQ09ERV9SRVBMQUNFTUVOVF9DSEFSQUNURVIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZCk7CiAgICAgfQotICAgIGVsc2UgaWYgKFB5T2JqZWN0X0lzSW5zdGFuY2UoZXhjLCBQeUV4Y19Vbmljb2RlVHJhbnNsYXRlRXJyb3IpKSB7CisgICAgZWxzZSBpZiAoUHlPYmplY3RfVHlwZUNoZWNrKGV4YywgKFB5VHlwZU9iamVjdCAqKVB5RXhjX1VuaWNvZGVUcmFuc2xhdGVFcnJvcikpIHsKICAgICAgICAgUHlPYmplY3QgKnJlczsKICAgICAgICAgaW50IGtpbmQ7CiAgICAgICAgIHZvaWQgKmRhdGE7CkBAIC03MTksNyArNzU4LDcgQEAKIAogUHlPYmplY3QgKlB5Q29kZWNfWE1MQ2hhclJlZlJlcGxhY2VFcnJvcnMoUHlPYmplY3QgKmV4YykKIHsKLSAgICBpZiAoUHlPYmplY3RfSXNJbnN0YW5jZShleGMsIFB5RXhjX1VuaWNvZGVFbmNvZGVFcnJvcikpIHsKKyAgICBpZiAoUHlPYmplY3RfVHlwZUNoZWNrKGV4YywgKFB5VHlwZU9iamVjdCAqKVB5RXhjX1VuaWNvZGVFbmNvZGVFcnJvcikpIHsKICAgICAgICAgUHlPYmplY3QgKnJlc3R1cGxlOwogICAgICAgICBQeU9iamVjdCAqb2JqZWN0OwogICAgICAgICBQeV9zc2l6ZV90IGk7CkBAIC04MTcsNyArODU2LDcgQEAKIAogUHlPYmplY3QgKlB5Q29kZWNfQmFja3NsYXNoUmVwbGFjZUVycm9ycyhQeU9iamVjdCAqZXhjKQogewotICAgIGlmIChQeU9iamVjdF9Jc0luc3RhbmNlKGV4YywgUHlFeGNfVW5pY29kZUVuY29kZUVycm9yKSkgeworICAgIGlmIChQeU9iamVjdF9UeXBlQ2hlY2soZXhjLCAoUHlUeXBlT2JqZWN0ICopUHlFeGNfVW5pY29kZUVuY29kZUVycm9yKSkgewogICAgICAgICBQeU9iamVjdCAqcmVzdHVwbGU7CiAgICAgICAgIFB5T2JqZWN0ICpvYmplY3Q7CiAgICAgICAgIFB5X3NzaXplX3QgaTsKQEAgLTg0OCw4ICs4ODcsMTAgQEAKICAgICAgICAgICAgICAgICByZXNzaXplICs9IDErMSsyOwogICAgICAgICB9CiAgICAgICAgIHJlcyA9IFB5VW5pY29kZV9OZXcocmVzc2l6ZSwgMTI3KTsKLSAgICAgICAgaWYgKHJlcz09TlVMTCkKKyAgICAgICAgaWYgKHJlcyA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYob2JqZWN0KTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CiAgICAgICAgIGZvciAoaSA9IHN0YXJ0LCBvdXRwID0gUHlVbmljb2RlXzFCWVRFX0RBVEEocmVzKTsKICAgICAgICAgICAgIGkgPCBlbmQ7ICsraSkgewogICAgICAgICAgICAgYyA9IFB5VW5pY29kZV9SRUFEX0NIQVIob2JqZWN0LCBpKTsKQEAgLTg4NSw2ICs5MjYsNjUgQEAKICAgICB9CiB9CiAKKyNkZWZpbmUgRU5DX1VURjggICAgICAgIDAKKyNkZWZpbmUgRU5DX1VURjE2QkUgICAgIDEKKyNkZWZpbmUgRU5DX1VURjE2TEUgICAgIDIKKyNkZWZpbmUgRU5DX1VURjMyQkUgICAgIDMKKyNkZWZpbmUgRU5DX1VURjMyTEUgICAgIDQKKworc3RhdGljIGludAorZ2V0X3N0YW5kYXJkX2VuY29kaW5nKGNvbnN0IGNoYXIgKmVuY29kaW5nLCBpbnQgKmJ5dGVsZW5ndGgpCit7CisgICAgaWYgKFB5X1RPTE9XRVIoZW5jb2RpbmdbMF0pID09ICd1JyAmJgorICAgICAgICBQeV9UT0xPV0VSKGVuY29kaW5nWzFdKSA9PSAndCcgJiYKKyAgICAgICAgUHlfVE9MT1dFUihlbmNvZGluZ1syXSkgPT0gJ2YnKSB7CisgICAgICAgIGVuY29kaW5nICs9IDM7CisgICAgICAgIGlmICgqZW5jb2RpbmcgPT0gJy0nIHx8ICplbmNvZGluZyA9PSAnXycgKQorICAgICAgICAgICAgZW5jb2RpbmcrKzsKKyAgICAgICAgaWYgKGVuY29kaW5nWzBdID09ICcxJyAmJiBlbmNvZGluZ1sxXSA9PSAnNicpIHsKKyAgICAgICAgICAgIGVuY29kaW5nICs9IDI7CisgICAgICAgICAgICAqYnl0ZWxlbmd0aCA9IDI7CisgICAgICAgICAgICBpZiAoKmVuY29kaW5nID09ICdcMCcpIHsKKyNpZmRlZiBXT1JEU19CSUdFTkRJQU4KKyAgICAgICAgICAgICAgICByZXR1cm4gRU5DX1VURjE2QkU7CisjZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiBFTkNfVVRGMTZMRTsKKyNlbmRpZgorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCplbmNvZGluZyA9PSAnLScgfHwgKmVuY29kaW5nID09ICdfJyApCisgICAgICAgICAgICAgICAgZW5jb2RpbmcrKzsKKyAgICAgICAgICAgIGlmIChQeV9UT0xPV0VSKGVuY29kaW5nWzFdKSA9PSAnZScgJiYgZW5jb2RpbmdbMl0gPT0gJ1wwJykgeworICAgICAgICAgICAgICAgIGlmIChQeV9UT0xPV0VSKGVuY29kaW5nWzBdKSA9PSAnYicpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBFTkNfVVRGMTZCRTsKKyAgICAgICAgICAgICAgICBpZiAoUHlfVE9MT1dFUihlbmNvZGluZ1swXSkgPT0gJ2wnKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gRU5DX1VURjE2TEU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoZW5jb2RpbmdbMF0gPT0gJzMnICYmIGVuY29kaW5nWzFdID09ICcyJykgeworICAgICAgICAgICAgZW5jb2RpbmcgKz0gMjsKKyAgICAgICAgICAgICpieXRlbGVuZ3RoID0gNDsKKyAgICAgICAgICAgIGlmICgqZW5jb2RpbmcgPT0gJ1wwJykgeworI2lmZGVmIFdPUkRTX0JJR0VORElBTgorICAgICAgICAgICAgICAgIHJldHVybiBFTkNfVVRGMzJCRTsKKyNlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIEVOQ19VVEYzMkxFOworI2VuZGlmCisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoKmVuY29kaW5nID09ICctJyB8fCAqZW5jb2RpbmcgPT0gJ18nICkKKyAgICAgICAgICAgICAgICBlbmNvZGluZysrOworICAgICAgICAgICAgaWYgKFB5X1RPTE9XRVIoZW5jb2RpbmdbMV0pID09ICdlJyAmJiBlbmNvZGluZ1syXSA9PSAnXDAnKSB7CisgICAgICAgICAgICAgICAgaWYgKFB5X1RPTE9XRVIoZW5jb2RpbmdbMF0pID09ICdiJykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEVOQ19VVEYzMkJFOworICAgICAgICAgICAgICAgIGlmIChQeV9UT0xPV0VSKGVuY29kaW5nWzBdKSA9PSAnbCcpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBFTkNfVVRGMzJMRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAvKiB1dGYtOCAqLworICAgICpieXRlbGVuZ3RoID0gMzsKKyAgICByZXR1cm4gRU5DX1VURjg7Cit9CisKIC8qIFRoaXMgaGFuZGxlciBpcyBkZWNsYXJlZCBzdGF0aWMgdW50aWwgc29tZW9uZSBkZW1vbnN0cmF0ZXMKICAgIGEgbmVlZCB0byBjYWxsIGl0IGRpcmVjdGx5LiAqLwogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTg5Miw3NiArOTkyLDE0OSBAQAogewogICAgIFB5T2JqZWN0ICpyZXN0dXBsZTsKICAgICBQeU9iamVjdCAqb2JqZWN0OworICAgIFB5T2JqZWN0ICplbmNvZGU7CisgICAgY2hhciAqZW5jb2Rpbmc7CisgICAgaW50IGNvZGU7CisgICAgaW50IGJ5dGVsZW5ndGg7CiAgICAgUHlfc3NpemVfdCBpOwogICAgIFB5X3NzaXplX3Qgc3RhcnQ7CiAgICAgUHlfc3NpemVfdCBlbmQ7CiAgICAgUHlPYmplY3QgKnJlczsKLSAgICBpZiAoUHlPYmplY3RfSXNJbnN0YW5jZShleGMsIFB5RXhjX1VuaWNvZGVFbmNvZGVFcnJvcikpIHsKLSAgICAgICAgY2hhciAqb3V0cDsKKworICAgIGlmIChQeU9iamVjdF9UeXBlQ2hlY2soZXhjLCAoUHlUeXBlT2JqZWN0ICopUHlFeGNfVW5pY29kZUVuY29kZUVycm9yKSkgeworICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXRwOwogICAgICAgICBpZiAoUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0U3RhcnQoZXhjLCAmc3RhcnQpKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIGlmIChQeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRFbmQoZXhjLCAmZW5kKSkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICBpZiAoIShvYmplY3QgPSBQeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRPYmplY3QoZXhjKSkpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgcmVzID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCAzKihlbmQtc3RhcnQpKTsKKyAgICAgICAgaWYgKCEoZW5jb2RlID0gUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0RW5jb2RpbmcoZXhjKSkpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihvYmplY3QpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCEoZW5jb2RpbmcgPSBQeVVuaWNvZGVfQXNVVEY4KGVuY29kZSkpKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYob2JqZWN0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihlbmNvZGUpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgY29kZSA9IGdldF9zdGFuZGFyZF9lbmNvZGluZyhlbmNvZGluZywgJmJ5dGVsZW5ndGgpOworICAgICAgICBQeV9ERUNSRUYoZW5jb2RlKTsKKworICAgICAgICBpZiAoZW5kIC0gc3RhcnQgPiBQWV9TU0laRV9UX01BWCAvIGJ5dGVsZW5ndGgpCisgICAgICAgICAgICBlbmQgPSBzdGFydCArIFBZX1NTSVpFX1RfTUFYIC8gYnl0ZWxlbmd0aDsKKyAgICAgICAgcmVzID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBieXRlbGVuZ3RoKihlbmQtc3RhcnQpKTsKICAgICAgICAgaWYgKCFyZXMpIHsKICAgICAgICAgICAgIFB5X0RFQ1JFRihvYmplY3QpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KLSAgICAgICAgb3V0cCA9IFB5Qnl0ZXNfQXNTdHJpbmcocmVzKTsKKyAgICAgICAgb3V0cCA9ICh1bnNpZ25lZCBjaGFyKilQeUJ5dGVzX0FzU3RyaW5nKHJlcyk7CiAgICAgICAgIGZvciAoaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHsKICAgICAgICAgICAgIC8qIG9iamVjdCBpcyBndWFyYW50ZWVkIHRvIGJlICJyZWFkeSIgKi8KICAgICAgICAgICAgIFB5X1VDUzQgY2ggPSBQeVVuaWNvZGVfUkVBRF9DSEFSKG9iamVjdCwgaSk7Ci0gICAgICAgICAgICBpZiAoY2ggPCAweGQ4MDAgfHwgY2ggPiAweGRmZmYpIHsKKyAgICAgICAgICAgIGlmICghUHlfVU5JQ09ERV9JU19TVVJST0dBVEUoY2gpKSB7CiAgICAgICAgICAgICAgICAgLyogTm90IGEgc3Vycm9nYXRlLCBmYWlsIHdpdGggb3JpZ2luYWwgZXhjZXB0aW9uICovCiAgICAgICAgICAgICAgICAgUHlFcnJfU2V0T2JqZWN0KFB5RXhjZXB0aW9uSW5zdGFuY2VfQ2xhc3MoZXhjKSwgZXhjKTsKICAgICAgICAgICAgICAgICBQeV9ERUNSRUYocmVzKTsKICAgICAgICAgICAgICAgICBQeV9ERUNSRUYob2JqZWN0KTsKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICpvdXRwKysgPSAoY2hhcikoMHhlMCB8IChjaCA+PiAxMikpOwotICAgICAgICAgICAgKm91dHArKyA9IChjaGFyKSgweDgwIHwgKChjaCA+PiA2KSAmIDB4M2YpKTsKLSAgICAgICAgICAgICpvdXRwKysgPSAoY2hhcikoMHg4MCB8IChjaCAmIDB4M2YpKTsKKyAgICAgICAgICAgIHN3aXRjaCAoY29kZSkgeworICAgICAgICAgICAgY2FzZSBFTkNfVVRGODoKKyAgICAgICAgICAgICAgICAqb3V0cCsrID0gKHVuc2lnbmVkIGNoYXIpKDB4ZTAgfCAoY2ggPj4gMTIpKTsKKyAgICAgICAgICAgICAgICAqb3V0cCsrID0gKHVuc2lnbmVkIGNoYXIpKDB4ODAgfCAoKGNoID4+IDYpICYgMHgzZikpOworICAgICAgICAgICAgICAgICpvdXRwKysgPSAodW5zaWduZWQgY2hhcikoMHg4MCB8IChjaCAmIDB4M2YpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRU5DX1VURjE2TEU6CisgICAgICAgICAgICAgICAgKm91dHArKyA9ICh1bnNpZ25lZCBjaGFyKSBjaDsKKyAgICAgICAgICAgICAgICAqb3V0cCsrID0gKHVuc2lnbmVkIGNoYXIpKGNoID4+IDgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFTkNfVVRGMTZCRToKKyAgICAgICAgICAgICAgICAqb3V0cCsrID0gKHVuc2lnbmVkIGNoYXIpKGNoID4+IDgpOworICAgICAgICAgICAgICAgICpvdXRwKysgPSAodW5zaWduZWQgY2hhcikgY2g7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEVOQ19VVEYzMkxFOgorICAgICAgICAgICAgICAgICpvdXRwKysgPSAodW5zaWduZWQgY2hhcikgY2g7CisgICAgICAgICAgICAgICAgKm91dHArKyA9ICh1bnNpZ25lZCBjaGFyKShjaCA+PiA4KTsKKyAgICAgICAgICAgICAgICAqb3V0cCsrID0gKHVuc2lnbmVkIGNoYXIpKGNoID4+IDE2KTsKKyAgICAgICAgICAgICAgICAqb3V0cCsrID0gKHVuc2lnbmVkIGNoYXIpKGNoID4+IDI0KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRU5DX1VURjMyQkU6CisgICAgICAgICAgICAgICAgKm91dHArKyA9ICh1bnNpZ25lZCBjaGFyKShjaCA+PiAyNCk7CisgICAgICAgICAgICAgICAgKm91dHArKyA9ICh1bnNpZ25lZCBjaGFyKShjaCA+PiAxNik7CisgICAgICAgICAgICAgICAgKm91dHArKyA9ICh1bnNpZ25lZCBjaGFyKShjaCA+PiA4KTsKKyAgICAgICAgICAgICAgICAqb3V0cCsrID0gKHVuc2lnbmVkIGNoYXIpIGNoOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHJlc3R1cGxlID0gUHlfQnVpbGRWYWx1ZSgiKE9uKSIsIHJlcywgZW5kKTsKICAgICAgICAgUHlfREVDUkVGKHJlcyk7CiAgICAgICAgIFB5X0RFQ1JFRihvYmplY3QpOwogICAgICAgICByZXR1cm4gcmVzdHVwbGU7CiAgICAgfQotICAgIGVsc2UgaWYgKFB5T2JqZWN0X0lzSW5zdGFuY2UoZXhjLCBQeUV4Y19Vbmljb2RlRGVjb2RlRXJyb3IpKSB7CisgICAgZWxzZSBpZiAoUHlPYmplY3RfVHlwZUNoZWNrKGV4YywgKFB5VHlwZU9iamVjdCAqKVB5RXhjX1VuaWNvZGVEZWNvZGVFcnJvcikpIHsKICAgICAgICAgdW5zaWduZWQgY2hhciAqcDsKICAgICAgICAgUHlfVUNTNCBjaCA9IDA7CiAgICAgICAgIGlmIChQeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRTdGFydChleGMsICZzdGFydCkpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgaWYgKFB5VW5pY29kZURlY29kZUVycm9yX0dldEVuZChleGMsICZlbmQpKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIGlmICghKG9iamVjdCA9IFB5VW5pY29kZURlY29kZUVycm9yX0dldE9iamVjdChleGMpKSkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICBpZiAoIShwID0gKHVuc2lnbmVkIGNoYXIqKVB5Qnl0ZXNfQXNTdHJpbmcob2JqZWN0KSkpIHsKICAgICAgICAgICAgIFB5X0RFQ1JFRihvYmplY3QpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KKyAgICAgICAgaWYgKCEoZW5jb2RlID0gUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0RW5jb2RpbmcoZXhjKSkpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihvYmplY3QpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCEoZW5jb2RpbmcgPSBQeVVuaWNvZGVfQXNVVEY4KGVuY29kZSkpKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYob2JqZWN0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihlbmNvZGUpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgY29kZSA9IGdldF9zdGFuZGFyZF9lbmNvZGluZyhlbmNvZGluZywgJmJ5dGVsZW5ndGgpOworICAgICAgICBQeV9ERUNSRUYoZW5jb2RlKTsKKwogICAgICAgICAvKiBUcnkgZGVjb2RpbmcgYSBzaW5nbGUgc3Vycm9nYXRlIGNoYXJhY3Rlci4gSWYKICAgICAgICAgICAgdGhlcmUgYXJlIG1vcmUsIGxldCB0aGUgY29kZWMgY2FsbCB1cyBhZ2Fpbi4gKi8KICAgICAgICAgcCArPSBzdGFydDsKLSAgICAgICAgaWYgKFB5Qnl0ZXNfR0VUX1NJWkUob2JqZWN0KSAtIHN0YXJ0ID49IDMgJiYKLSAgICAgICAgICAgIChwWzBdICYgMHhmMCkgPT0gMHhlMCAmJgotICAgICAgICAgICAgKHBbMV0gJiAweGMwKSA9PSAweDgwICYmCi0gICAgICAgICAgICAocFsyXSAmIDB4YzApID09IDB4ODApIHsKLSAgICAgICAgICAgIC8qIGl0J3MgYSB0aHJlZS1ieXRlIGNvZGUgKi8KLSAgICAgICAgICAgIGNoID0gKChwWzBdICYgMHgwZikgPDwgMTIpICsgKChwWzFdICYgMHgzZikgPDwgNikgKyAocFsyXSAmIDB4M2YpOwotICAgICAgICAgICAgaWYgKGNoIDwgMHhkODAwIHx8IGNoID4gMHhkZmZmKQotICAgICAgICAgICAgICAgIC8qIGl0J3Mgbm90IGEgc3Vycm9nYXRlIC0gZmFpbCAqLwotICAgICAgICAgICAgICAgIGNoID0gMDsKKyAgICAgICAgaWYgKFB5Qnl0ZXNfR0VUX1NJWkUob2JqZWN0KSAtIHN0YXJ0ID49IGJ5dGVsZW5ndGgpIHsKKyAgICAgICAgICAgIHN3aXRjaCAoY29kZSkgeworICAgICAgICAgICAgY2FzZSBFTkNfVVRGODoKKyAgICAgICAgICAgICAgICBpZiAoKHBbMF0gJiAweGYwKSA9PSAweGUwICYmCisgICAgICAgICAgICAgICAgICAgIChwWzFdICYgMHhjMCkgPT0gMHg4MCAmJgorICAgICAgICAgICAgICAgICAgICAocFsyXSAmIDB4YzApID09IDB4ODApIHsKKyAgICAgICAgICAgICAgICAgICAgLyogaXQncyBhIHRocmVlLWJ5dGUgY29kZSAqLworICAgICAgICAgICAgICAgICAgICBjaCA9ICgocFswXSAmIDB4MGYpIDw8IDEyKSArICgocFsxXSAmIDB4M2YpIDw8IDYpICsgKHBbMl0gJiAweDNmKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEVOQ19VVEYxNkxFOgorICAgICAgICAgICAgICAgIGNoID0gcFsxXSA8PCA4IHwgcFswXTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRU5DX1VURjE2QkU6CisgICAgICAgICAgICAgICAgY2ggPSBwWzBdIDw8IDggfCBwWzFdOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFTkNfVVRGMzJMRToKKyAgICAgICAgICAgICAgICBjaCA9IChwWzNdIDw8IDI0KSB8IChwWzJdIDw8IDE2KSB8IChwWzFdIDw8IDgpIHwgcFswXTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRU5DX1VURjMyQkU6CisgICAgICAgICAgICAgICAgY2ggPSAocFswXSA8PCAyNCkgfCAocFsxXSA8PCAxNikgfCAocFsyXSA8PCA4KSB8IHBbM107CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KKwogICAgICAgICBQeV9ERUNSRUYob2JqZWN0KTsKLSAgICAgICAgaWYgKGNoID09IDApIHsKKyAgICAgICAgaWYgKCFQeV9VTklDT0RFX0lTX1NVUlJPR0FURShjaCkpIHsKKyAgICAgICAgICAgIC8qIGl0J3Mgbm90IGEgc3Vycm9nYXRlIC0gZmFpbCAqLwogICAgICAgICAgICAgUHlFcnJfU2V0T2JqZWN0KFB5RXhjZXB0aW9uSW5zdGFuY2VfQ2xhc3MoZXhjKSwgZXhjKTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAgICAgICAgIHJlcyA9IFB5VW5pY29kZV9Gcm9tT3JkaW5hbChjaCk7CiAgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiKE5uKSIsIHJlcywgc3RhcnQrMyk7CisgICAgICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCIoTm4pIiwgcmVzLCBzdGFydCArIGJ5dGVsZW5ndGgpOwogICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgd3JvbmdfZXhjZXB0aW9uX3R5cGUoZXhjKTsKQEAgLTk3OCw3ICsxMTUxLDggQEAKICAgICBQeV9zc2l6ZV90IHN0YXJ0OwogICAgIFB5X3NzaXplX3QgZW5kOwogICAgIFB5T2JqZWN0ICpyZXM7Ci0gICAgaWYgKFB5T2JqZWN0X0lzSW5zdGFuY2UoZXhjLCBQeUV4Y19Vbmljb2RlRW5jb2RlRXJyb3IpKSB7CisKKyAgICBpZiAoUHlPYmplY3RfVHlwZUNoZWNrKGV4YywgKFB5VHlwZU9iamVjdCAqKVB5RXhjX1VuaWNvZGVFbmNvZGVFcnJvcikpIHsKICAgICAgICAgY2hhciAqb3V0cDsKICAgICAgICAgaWYgKFB5VW5pY29kZUVuY29kZUVycm9yX0dldFN0YXJ0KGV4YywgJnN0YXJ0KSkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMTAwOSw3ICsxMTgzLDcgQEAKICAgICAgICAgUHlfREVDUkVGKG9iamVjdCk7CiAgICAgICAgIHJldHVybiByZXN0dXBsZTsKICAgICB9Ci0gICAgZWxzZSBpZiAoUHlPYmplY3RfSXNJbnN0YW5jZShleGMsIFB5RXhjX1VuaWNvZGVEZWNvZGVFcnJvcikpIHsKKyAgICBlbHNlIGlmIChQeU9iamVjdF9UeXBlQ2hlY2soZXhjLCAoUHlUeXBlT2JqZWN0ICopUHlFeGNfVW5pY29kZURlY29kZUVycm9yKSkgewogICAgICAgICBQeU9iamVjdCAqc3RyOwogICAgICAgICB1bnNpZ25lZCBjaGFyICpwOwogICAgICAgICBQeV9VQ1MyIGNoWzRdOyAvKiBkZWNvZGUgdXAgdG8gNCBiYWQgYnl0ZXMuICovCkBAIC0xMTc4LDcgKzEzNTIsNyBAQAogCiAgICAgaWYgKGludGVycC0+Y29kZWNfZXJyb3JfcmVnaXN0cnkpIHsKICAgICAgICAgZm9yIChpID0gMDsgaSA8IFB5X0FSUkFZX0xFTkdUSChtZXRob2RzKTsgKytpKSB7Ci0gICAgICAgICAgICBQeU9iamVjdCAqZnVuYyA9IFB5Q0Z1bmN0aW9uX05ldygmbWV0aG9kc1tpXS5kZWYsIE5VTEwpOworICAgICAgICAgICAgUHlPYmplY3QgKmZ1bmMgPSBQeUNGdW5jdGlvbl9OZXdFeCgmbWV0aG9kc1tpXS5kZWYsIE5VTEwsIE5VTEwpOwogICAgICAgICAgICAgaW50IHJlczsKICAgICAgICAgICAgIGlmICghZnVuYykKICAgICAgICAgICAgICAgICBQeV9GYXRhbEVycm9yKCJjYW4ndCBpbml0aWFsaXplIGNvZGVjIGVycm9yIHJlZ2lzdHJ5Iik7CmRpZmYgLS1naXQgYS9QeXRob24vY29tcGlsZS5jIGIvUHl0aG9uL2NvbXBpbGUuYwppbmRleCA2ZDY2MjU1Li5mZjYyNDg3IDEwMDY0NAotLS0gYS9QeXRob24vY29tcGlsZS5jCisrKyBiL1B5dGhvbi9jb21waWxlLmMKQEAgLTk0LDYgKzk0LDcgQEAKICAgICBDT01QSUxFUl9TQ09QRV9NT0RVTEUsCiAgICAgQ09NUElMRVJfU0NPUEVfQ0xBU1MsCiAgICAgQ09NUElMRVJfU0NPUEVfRlVOQ1RJT04sCisgICAgQ09NUElMRVJfU0NPUEVfTEFNQkRBLAogICAgIENPTVBJTEVSX1NDT1BFX0NPTVBSRUhFTlNJT04sCiB9OwogCkBAIC0xMTksOCArMTIwLDggQEAKIAogICAgIFB5T2JqZWN0ICp1X3ByaXZhdGU7ICAgICAgICAvKiBmb3IgcHJpdmF0ZSBuYW1lIG1hbmdsaW5nICovCiAKLSAgICBpbnQgdV9hcmdjb3VudDsgICAgICAgIC8qIG51bWJlciBvZiBhcmd1bWVudHMgZm9yIGJsb2NrICovCi0gICAgaW50IHVfa3dvbmx5YXJnY291bnQ7IC8qIG51bWJlciBvZiBrZXl3b3JkIG9ubHkgYXJndW1lbnRzIGZvciBibG9jayAqLworICAgIFB5X3NzaXplX3QgdV9hcmdjb3VudDsgICAgICAgIC8qIG51bWJlciBvZiBhcmd1bWVudHMgZm9yIGJsb2NrICovCisgICAgUHlfc3NpemVfdCB1X2t3b25seWFyZ2NvdW50OyAvKiBudW1iZXIgb2Yga2V5d29yZCBvbmx5IGFyZ3VtZW50cyBmb3IgYmxvY2sgKi8KICAgICAvKiBQb2ludGVyIHRvIHRoZSBtb3N0IHJlY2VudGx5IGFsbG9jYXRlZCBibG9jay4gIEJ5IGZvbGxvd2luZyBiX2xpc3QKICAgICAgICBtZW1iZXJzLCB5b3UgY2FuIHJlYWNoIGFsbCBlYXJseSBhbGxvY2F0ZWQgYmxvY2tzLiAqLwogICAgIGJhc2ljYmxvY2sgKnVfYmxvY2tzOwpAQCAtMTQ5LDggKzE1MCw3IEBACiAqLwogCiBzdHJ1Y3QgY29tcGlsZXIgewotICAgIGNvbnN0IGNoYXIgKmNfZmlsZW5hbWU7Ci0gICAgUHlPYmplY3QgKmNfZmlsZW5hbWVfb2JqOworICAgIFB5T2JqZWN0ICpjX2ZpbGVuYW1lOwogICAgIHN0cnVjdCBzeW10YWJsZSAqY19zdDsKICAgICBQeUZ1dHVyZUZlYXR1cmVzICpjX2Z1dHVyZTsgLyogcG9pbnRlciB0byBtb2R1bGUncyBfX2Z1dHVyZV9fICovCiAgICAgUHlDb21waWxlckZsYWdzICpjX2ZsYWdzOwpAQCAtMTcwLDcgKzE3MCw3IEBACiBzdGF0aWMgaW50IGNvbXBpbGVyX25leHRfaW5zdHIoc3RydWN0IGNvbXBpbGVyICosIGJhc2ljYmxvY2sgKik7CiBzdGF0aWMgaW50IGNvbXBpbGVyX2FkZG9wKHN0cnVjdCBjb21waWxlciAqLCBpbnQpOwogc3RhdGljIGludCBjb21waWxlcl9hZGRvcF9vKHN0cnVjdCBjb21waWxlciAqLCBpbnQsIFB5T2JqZWN0ICosIFB5T2JqZWN0ICopOwotc3RhdGljIGludCBjb21waWxlcl9hZGRvcF9pKHN0cnVjdCBjb21waWxlciAqLCBpbnQsIGludCk7CitzdGF0aWMgaW50IGNvbXBpbGVyX2FkZG9wX2koc3RydWN0IGNvbXBpbGVyICosIGludCwgUHlfc3NpemVfdCk7CiBzdGF0aWMgaW50IGNvbXBpbGVyX2FkZG9wX2ooc3RydWN0IGNvbXBpbGVyICosIGludCwgYmFzaWNibG9jayAqLCBpbnQpOwogc3RhdGljIGJhc2ljYmxvY2sgKmNvbXBpbGVyX3VzZV9uZXdfYmxvY2soc3RydWN0IGNvbXBpbGVyICopOwogc3RhdGljIGludCBjb21waWxlcl9lcnJvcihzdHJ1Y3QgY29tcGlsZXIgKiwgY29uc3QgY2hhciAqKTsKQEAgLTE5NSwxNyArMTk1LDE4IEBACiBzdGF0aWMgaW50IGV4cHJfY29uc3RhbnQoc3RydWN0IGNvbXBpbGVyICosIGV4cHJfdHkpOwogCiBzdGF0aWMgaW50IGNvbXBpbGVyX3dpdGgoc3RydWN0IGNvbXBpbGVyICosIHN0bXRfdHksIGludCk7Ci1zdGF0aWMgaW50IGNvbXBpbGVyX2NhbGxfaGVscGVyKHN0cnVjdCBjb21waWxlciAqYywgaW50IG4sCitzdGF0aWMgaW50IGNvbXBpbGVyX2NhbGxfaGVscGVyKHN0cnVjdCBjb21waWxlciAqYywgUHlfc3NpemVfdCBuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc2RsX3NlcSAqYXJncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNkbF9zZXEgKmtleXdvcmRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByX3R5IHN0YXJhcmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByX3R5IGt3YXJncyk7CiBzdGF0aWMgaW50IGNvbXBpbGVyX3RyeV9leGNlcHQoc3RydWN0IGNvbXBpbGVyICosIHN0bXRfdHkpOworc3RhdGljIGludCBjb21waWxlcl9zZXRfcXVhbG5hbWUoc3RydWN0IGNvbXBpbGVyICopOwogCiBzdGF0aWMgUHlDb2RlT2JqZWN0ICphc3NlbWJsZShzdHJ1Y3QgY29tcGlsZXIgKiwgaW50IGFkZE5vbmUpOwogc3RhdGljIFB5T2JqZWN0ICpfX2RvY19fOwogCi0jZGVmaW5lIENPTVBJTEVSX0NBUFNVTEVfTkFNRV9DT01QSUxFUl9VTklUICJjb21waWxlLmMgY29tcGlsZXIgdW5pdCIKKyNkZWZpbmUgQ0FQU1VMRV9OQU1FICJjb21waWxlLmMgY29tcGlsZXIgdW5pdCIKIAogUHlPYmplY3QgKgogX1B5X01hbmdsZShQeU9iamVjdCAqcHJpdmF0ZW9iaiwgUHlPYmplY3QgKmlkZW50KQpAQCAtMjg4LDggKzI4OSw4IEBACiB9CiAKIFB5Q29kZU9iamVjdCAqCi1QeUFTVF9Db21waWxlRXgobW9kX3R5IG1vZCwgY29uc3QgY2hhciAqZmlsZW5hbWUsIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MsCi0gICAgICAgICAgICAgICAgaW50IG9wdGltaXplLCBQeUFyZW5hICphcmVuYSkKK1B5QVNUX0NvbXBpbGVPYmplY3QobW9kX3R5IG1vZCwgUHlPYmplY3QgKmZpbGVuYW1lLCBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzLAorICAgICAgICAgICAgICAgICAgIGludCBvcHRpbWl6ZSwgUHlBcmVuYSAqYXJlbmEpCiB7CiAgICAgc3RydWN0IGNvbXBpbGVyIGM7CiAgICAgUHlDb2RlT2JqZWN0ICpjbyA9IE5VTEw7CkBAIC0zMDQsMTIgKzMwNSwxMCBAQAogCiAgICAgaWYgKCFjb21waWxlcl9pbml0KCZjKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgUHlfSU5DUkVGKGZpbGVuYW1lKTsKICAgICBjLmNfZmlsZW5hbWUgPSBmaWxlbmFtZTsKLSAgICBjLmNfZmlsZW5hbWVfb2JqID0gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdChmaWxlbmFtZSk7Ci0gICAgaWYgKCFjLmNfZmlsZW5hbWVfb2JqKQotICAgICAgICBnb3RvIGZpbmFsbHk7CiAgICAgYy5jX2FyZW5hID0gYXJlbmE7Ci0gICAgYy5jX2Z1dHVyZSA9IFB5RnV0dXJlX0Zyb21BU1QobW9kLCBmaWxlbmFtZSk7CisgICAgYy5jX2Z1dHVyZSA9IFB5RnV0dXJlX0Zyb21BU1RPYmplY3QobW9kLCBmaWxlbmFtZSk7CiAgICAgaWYgKGMuY19mdXR1cmUgPT0gTlVMTCkKICAgICAgICAgZ290byBmaW5hbGx5OwogICAgIGlmICghZmxhZ3MpIHsKQEAgLTMyMyw3ICszMjIsNyBAQAogICAgIGMuY19vcHRpbWl6ZSA9IChvcHRpbWl6ZSA9PSAtMSkgPyBQeV9PcHRpbWl6ZUZsYWcgOiBvcHRpbWl6ZTsKICAgICBjLmNfbmVzdGxldmVsID0gMDsKIAotICAgIGMuY19zdCA9IFB5U3ltdGFibGVfQnVpbGQobW9kLCBmaWxlbmFtZSwgYy5jX2Z1dHVyZSk7CisgICAgYy5jX3N0ID0gUHlTeW10YWJsZV9CdWlsZE9iamVjdChtb2QsIGZpbGVuYW1lLCBjLmNfZnV0dXJlKTsKICAgICBpZiAoYy5jX3N0ID09IE5VTEwpIHsKICAgICAgICAgaWYgKCFQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1N5c3RlbUVycm9yLCAibm8gc3ltdGFibGUiKTsKQEAgLTMzOSw2ICszMzgsMjEgQEAKIH0KIAogUHlDb2RlT2JqZWN0ICoKK1B5QVNUX0NvbXBpbGVFeChtb2RfdHkgbW9kLCBjb25zdCBjaGFyICpmaWxlbmFtZV9zdHIsIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MsCisgICAgICAgICAgICAgICAgaW50IG9wdGltaXplLCBQeUFyZW5hICphcmVuYSkKK3sKKyAgICBQeU9iamVjdCAqZmlsZW5hbWU7CisgICAgUHlDb2RlT2JqZWN0ICpjbzsKKyAgICBmaWxlbmFtZSA9IFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQoZmlsZW5hbWVfc3RyKTsKKyAgICBpZiAoZmlsZW5hbWUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgY28gPSBQeUFTVF9Db21waWxlT2JqZWN0KG1vZCwgZmlsZW5hbWUsIGZsYWdzLCBvcHRpbWl6ZSwgYXJlbmEpOworICAgIFB5X0RFQ1JFRihmaWxlbmFtZSk7CisgICAgcmV0dXJuIGNvOworCit9CisKK1B5Q29kZU9iamVjdCAqCiBQeU5vZGVfQ29tcGlsZShzdHJ1Y3QgX25vZGUgKm4sIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQogewogICAgIFB5Q29kZU9iamVjdCAqY28gPSBOVUxMOwpAQCAtMzYwLDggKzM3NCw3IEBACiAgICAgICAgIFB5U3ltdGFibGVfRnJlZShjLT5jX3N0KTsKICAgICBpZiAoYy0+Y19mdXR1cmUpCiAgICAgICAgIFB5T2JqZWN0X0ZyZWUoYy0+Y19mdXR1cmUpOwotICAgIGlmIChjLT5jX2ZpbGVuYW1lX29iaikKLSAgICAgICAgUHlfREVDUkVGKGMtPmNfZmlsZW5hbWVfb2JqKTsKKyAgICBQeV9YREVDUkVGKGMtPmNfZmlsZW5hbWUpOwogICAgIFB5X0RFQ1JFRihjLT5jX3N0YWNrKTsKIH0KIApAQCAtMzc1LDcgKzM4OCw3IEBACiAKICAgICBuID0gUHlMaXN0X1NpemUobGlzdCk7CiAgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotICAgICAgICB2ID0gUHlMb25nX0Zyb21Mb25nKGkpOworICAgICAgICB2ID0gUHlMb25nX0Zyb21Tc2l6ZV90KGkpOwogICAgICAgICBpZiAoIXYpIHsKICAgICAgICAgICAgIFB5X0RFQ1JFRihkaWN0KTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtNDAzLDcgKzQxNiw3IEBACiAqLwogCiBzdGF0aWMgUHlPYmplY3QgKgotZGljdGJ5dHlwZShQeU9iamVjdCAqc3JjLCBpbnQgc2NvcGVfdHlwZSwgaW50IGZsYWcsIGludCBvZmZzZXQpCitkaWN0Ynl0eXBlKFB5T2JqZWN0ICpzcmMsIGludCBzY29wZV90eXBlLCBpbnQgZmxhZywgUHlfc3NpemVfdCBvZmZzZXQpCiB7CiAgICAgUHlfc3NpemVfdCBpID0gb2Zmc2V0LCBzY29wZSwgbnVtX2tleXMsIGtleV9pOwogICAgIFB5T2JqZWN0ICprLCAqdiwgKmRlc3QgPSBQeURpY3RfTmV3KCk7CkBAIC00MzcsNyArNDUwLDcgQEAKICAgICAgICAgc2NvcGUgPSAodmkgPj4gU0NPUEVfT0ZGU0VUKSAmIFNDT1BFX01BU0s7CiAKICAgICAgICAgaWYgKHNjb3BlID09IHNjb3BlX3R5cGUgfHwgdmkgJiBmbGFnKSB7Ci0gICAgICAgICAgICBQeU9iamVjdCAqdHVwbGUsICppdGVtID0gUHlMb25nX0Zyb21Mb25nKGkpOworICAgICAgICAgICAgUHlPYmplY3QgKnR1cGxlLCAqaXRlbSA9IFB5TG9uZ19Gcm9tU3NpemVfdChpKTsKICAgICAgICAgICAgIGlmIChpdGVtID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoc29ydGVkX2tleXMpOwogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihkZXN0KTsKQEAgLTUzNSw2ICs1NDgsMzcgQEAKICAgICAgICAgY29tcGlsZXJfdW5pdF9mcmVlKHUpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CisgICAgaWYgKHUtPnVfc3RlLT5zdGVfbmVlZHNfY2xhc3NfY2xvc3VyZSkgeworICAgICAgICAvKiBDb29rIHVwIGFuIGltcGxpY2l0IF9fY2xhc3NfXyBjZWxsLiAqLworICAgICAgICBfUHlfSURFTlRJRklFUihfX2NsYXNzX18pOworICAgICAgICBQeU9iamVjdCAqdHVwbGUsICpuYW1lLCAqemVybzsKKyAgICAgICAgaW50IHJlczsKKyAgICAgICAgYXNzZXJ0KHUtPnVfc2NvcGVfdHlwZSA9PSBDT01QSUxFUl9TQ09QRV9DTEFTUyk7CisgICAgICAgIGFzc2VydChQeURpY3RfU2l6ZSh1LT51X2NlbGx2YXJzKSA9PSAwKTsKKyAgICAgICAgbmFtZSA9IF9QeVVuaWNvZGVfRnJvbUlkKCZQeUlkX19fY2xhc3NfXyk7CisgICAgICAgIGlmICghbmFtZSkgeworICAgICAgICAgICAgY29tcGlsZXJfdW5pdF9mcmVlKHUpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgdHVwbGUgPSBQeVR1cGxlX1BhY2soMiwgbmFtZSwgUHlfVFlQRShuYW1lKSk7CisgICAgICAgIGlmICghdHVwbGUpIHsKKyAgICAgICAgICAgIGNvbXBpbGVyX3VuaXRfZnJlZSh1KTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIHplcm8gPSBQeUxvbmdfRnJvbUxvbmcoMCk7CisgICAgICAgIGlmICghemVybykgeworICAgICAgICAgICAgUHlfREVDUkVGKHR1cGxlKTsKKyAgICAgICAgICAgIGNvbXBpbGVyX3VuaXRfZnJlZSh1KTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIHJlcyA9IFB5RGljdF9TZXRJdGVtKHUtPnVfY2VsbHZhcnMsIHR1cGxlLCB6ZXJvKTsKKyAgICAgICAgUHlfREVDUkVGKHR1cGxlKTsKKyAgICAgICAgUHlfREVDUkVGKHplcm8pOworICAgICAgICBpZiAocmVzIDwgMCkgeworICAgICAgICAgICAgY29tcGlsZXJfdW5pdF9mcmVlKHUpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICB9CiAKICAgICB1LT51X2ZyZWV2YXJzID0gZGljdGJ5dHlwZSh1LT51X3N0ZS0+c3RlX3N5bWJvbHMsIEZSRUUsIERFRl9GUkVFX0NMQVNTLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5RGljdF9TaXplKHUtPnVfY2VsbHZhcnMpKTsKQEAgLTU2NCw3ICs2MDgsNyBAQAogCiAgICAgLyogUHVzaCB0aGUgb2xkIGNvbXBpbGVyX3VuaXQgb24gdGhlIHN0YWNrLiAqLwogICAgIGlmIChjLT51KSB7Ci0gICAgICAgIFB5T2JqZWN0ICpjYXBzdWxlID0gUHlDYXBzdWxlX05ldyhjLT51LCBDT01QSUxFUl9DQVBTVUxFX05BTUVfQ09NUElMRVJfVU5JVCwgTlVMTCk7CisgICAgICAgIFB5T2JqZWN0ICpjYXBzdWxlID0gUHlDYXBzdWxlX05ldyhjLT51LCBDQVBTVUxFX05BTUUsIE5VTEwpOwogICAgICAgICBpZiAoIWNhcHN1bGUgfHwgUHlMaXN0X0FwcGVuZChjLT5jX3N0YWNrLCBjYXBzdWxlKSA8IDApIHsKICAgICAgICAgICAgIFB5X1hERUNSRUYoY2Fwc3VsZSk7CiAgICAgICAgICAgICBjb21waWxlcl91bml0X2ZyZWUodSk7CkBAIC01ODAsMTMgKzYyNCwxOCBAQAogICAgIGlmIChjb21waWxlcl91c2VfbmV3X2Jsb2NrKGMpID09IE5VTEwpCiAgICAgICAgIHJldHVybiAwOwogCisgICAgaWYgKHUtPnVfc2NvcGVfdHlwZSAhPSBDT01QSUxFUl9TQ09QRV9NT0RVTEUpIHsKKyAgICAgICAgaWYgKCFjb21waWxlcl9zZXRfcXVhbG5hbWUoYykpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKICAgICByZXR1cm4gMTsKIH0KIAogc3RhdGljIHZvaWQKIGNvbXBpbGVyX2V4aXRfc2NvcGUoc3RydWN0IGNvbXBpbGVyICpjKQogewotICAgIGludCBuOworICAgIFB5X3NzaXplX3QgbjsKICAgICBQeU9iamVjdCAqY2Fwc3VsZTsKIAogICAgIGMtPmNfbmVzdGxldmVsLS07CkBAIC01OTUsNyArNjQ0LDcgQEAKICAgICBuID0gUHlMaXN0X0dFVF9TSVpFKGMtPmNfc3RhY2spIC0gMTsKICAgICBpZiAobiA+PSAwKSB7CiAgICAgICAgIGNhcHN1bGUgPSBQeUxpc3RfR0VUX0lURU0oYy0+Y19zdGFjaywgbik7Ci0gICAgICAgIGMtPnUgPSAoc3RydWN0IGNvbXBpbGVyX3VuaXQgKilQeUNhcHN1bGVfR2V0UG9pbnRlcihjYXBzdWxlLCBDT01QSUxFUl9DQVBTVUxFX05BTUVfQ09NUElMRVJfVU5JVCk7CisgICAgICAgIGMtPnUgPSAoc3RydWN0IGNvbXBpbGVyX3VuaXQgKilQeUNhcHN1bGVfR2V0UG9pbnRlcihjYXBzdWxlLCBDQVBTVUxFX05BTUUpOwogICAgICAgICBhc3NlcnQoYy0+dSk7CiAgICAgICAgIC8qIHdlIGFyZSBkZWxldGluZyBmcm9tIGEgbGlzdCBzbyB0aGlzIHJlYWxseSBzaG91bGRuJ3QgZmFpbCAqLwogICAgICAgICBpZiAoUHlTZXF1ZW5jZV9EZWxJdGVtKGMtPmNfc3RhY2ssIG4pIDwgMCkKQEAgLTYwNyw1NyArNjU2LDc3IEBACiAKIH0KIAotc3RhdGljIFB5T2JqZWN0ICoKLWNvbXBpbGVyX3Njb3BlX3F1YWxuYW1lKHN0cnVjdCBjb21waWxlciAqYykKK3N0YXRpYyBpbnQKK2NvbXBpbGVyX3NldF9xdWFsbmFtZShzdHJ1Y3QgY29tcGlsZXIgKmMpCiB7Ci0gICAgUHlfc3NpemVfdCBzdGFja19zaXplLCBpOwogICAgIF9QeV9zdGF0aWNfc3RyaW5nKGRvdCwgIi4iKTsKLSAgICBfUHlfc3RhdGljX3N0cmluZyhsb2NhbHMsICI8bG9jYWxzPiIpOwotICAgIHN0cnVjdCBjb21waWxlcl91bml0ICp1OwotICAgIFB5T2JqZWN0ICpjYXBzdWxlLCAqbmFtZSwgKnNlcSwgKmRvdF9zdHIsICpsb2NhbHNfc3RyOworICAgIF9QeV9zdGF0aWNfc3RyaW5nKGRvdF9sb2NhbHMsICIuPGxvY2Fscz4iKTsKKyAgICBQeV9zc2l6ZV90IHN0YWNrX3NpemU7CisgICAgc3RydWN0IGNvbXBpbGVyX3VuaXQgKnUgPSBjLT51OworICAgIFB5T2JqZWN0ICpuYW1lLCAqYmFzZSwgKmRvdF9zdHIsICpkb3RfbG9jYWxzX3N0cjsKIAotICAgIHUgPSBjLT51OwotICAgIGlmICh1LT51X3F1YWxuYW1lICE9IE5VTEwpIHsKLSAgICAgICAgUHlfSU5DUkVGKHUtPnVfcXVhbG5hbWUpOwotICAgICAgICByZXR1cm4gdS0+dV9xdWFsbmFtZTsKLSAgICB9Ci0KLSAgICBzZXEgPSBQeUxpc3RfTmV3KDApOwotICAgIGlmIChzZXEgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KKyAgICBiYXNlID0gTlVMTDsKICAgICBzdGFja19zaXplID0gUHlMaXN0X0dFVF9TSVpFKGMtPmNfc3RhY2spOwotICAgIGZvciAoaSA9IDA7IGkgPCBzdGFja19zaXplOyBpKyspIHsKLSAgICAgICAgY2Fwc3VsZSA9IFB5TGlzdF9HRVRfSVRFTShjLT5jX3N0YWNrLCBpKTsKLSAgICAgICAgdSA9IChzdHJ1Y3QgY29tcGlsZXJfdW5pdCAqKVB5Q2Fwc3VsZV9HZXRQb2ludGVyKGNhcHN1bGUsIENPTVBJTEVSX0NBUFNVTEVfTkFNRV9DT01QSUxFUl9VTklUKTsKLSAgICAgICAgYXNzZXJ0KHUpOwotICAgICAgICBpZiAodS0+dV9zY29wZV90eXBlID09IENPTVBJTEVSX1NDT1BFX01PRFVMRSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoUHlMaXN0X0FwcGVuZChzZXEsIHUtPnVfbmFtZSkpCi0gICAgICAgICAgICBnb3RvIF9lcnJvcjsKLSAgICAgICAgaWYgKHUtPnVfc2NvcGVfdHlwZSA9PSBDT01QSUxFUl9TQ09QRV9GVU5DVElPTikgewotICAgICAgICAgICAgbG9jYWxzX3N0ciA9IF9QeVVuaWNvZGVfRnJvbUlkKCZsb2NhbHMpOwotICAgICAgICAgICAgaWYgKGxvY2Fsc19zdHIgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICBnb3RvIF9lcnJvcjsKLSAgICAgICAgICAgIGlmIChQeUxpc3RfQXBwZW5kKHNlcSwgbG9jYWxzX3N0cikpCi0gICAgICAgICAgICAgICAgZ290byBfZXJyb3I7CisgICAgYXNzZXJ0KHN0YWNrX3NpemUgPj0gMSk7CisgICAgaWYgKHN0YWNrX3NpemUgPiAxKSB7CisgICAgICAgIGludCBzY29wZSwgZm9yY2VfZ2xvYmFsID0gMDsKKyAgICAgICAgc3RydWN0IGNvbXBpbGVyX3VuaXQgKnBhcmVudDsKKyAgICAgICAgUHlPYmplY3QgKm1hbmdsZWQsICpjYXBzdWxlOworCisgICAgICAgIGNhcHN1bGUgPSBQeUxpc3RfR0VUX0lURU0oYy0+Y19zdGFjaywgc3RhY2tfc2l6ZSAtIDEpOworICAgICAgICBwYXJlbnQgPSAoc3RydWN0IGNvbXBpbGVyX3VuaXQgKilQeUNhcHN1bGVfR2V0UG9pbnRlcihjYXBzdWxlLCBDQVBTVUxFX05BTUUpOworICAgICAgICBhc3NlcnQocGFyZW50KTsKKworICAgICAgICBpZiAodS0+dV9zY29wZV90eXBlID09IENPTVBJTEVSX1NDT1BFX0ZVTkNUSU9OIHx8IHUtPnVfc2NvcGVfdHlwZSA9PSBDT01QSUxFUl9TQ09QRV9DTEFTUykgeworICAgICAgICAgICAgYXNzZXJ0KHUtPnVfbmFtZSk7CisgICAgICAgICAgICBtYW5nbGVkID0gX1B5X01hbmdsZShwYXJlbnQtPnVfcHJpdmF0ZSwgdS0+dV9uYW1lKTsKKyAgICAgICAgICAgIGlmICghbWFuZ2xlZCkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHNjb3BlID0gUHlTVF9HZXRTY29wZShwYXJlbnQtPnVfc3RlLCBtYW5nbGVkKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihtYW5nbGVkKTsKKyAgICAgICAgICAgIGFzc2VydChzY29wZSAhPSBHTE9CQUxfSU1QTElDSVQpOworICAgICAgICAgICAgaWYgKHNjb3BlID09IEdMT0JBTF9FWFBMSUNJVCkKKyAgICAgICAgICAgICAgICBmb3JjZV9nbG9iYWwgPSAxOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFmb3JjZV9nbG9iYWwpIHsKKyAgICAgICAgICAgIGlmIChwYXJlbnQtPnVfc2NvcGVfdHlwZSA9PSBDT01QSUxFUl9TQ09QRV9GVU5DVElPTgorICAgICAgICAgICAgICAgIHx8IHBhcmVudC0+dV9zY29wZV90eXBlID09IENPTVBJTEVSX1NDT1BFX0xBTUJEQSkgeworICAgICAgICAgICAgICAgIGRvdF9sb2NhbHNfc3RyID0gX1B5VW5pY29kZV9Gcm9tSWQoJmRvdF9sb2NhbHMpOworICAgICAgICAgICAgICAgIGlmIChkb3RfbG9jYWxzX3N0ciA9PSBOVUxMKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICBiYXNlID0gUHlVbmljb2RlX0NvbmNhdChwYXJlbnQtPnVfcXVhbG5hbWUsIGRvdF9sb2NhbHNfc3RyKTsKKyAgICAgICAgICAgICAgICBpZiAoYmFzZSA9PSBOVUxMKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIFB5X0lOQ1JFRihwYXJlbnQtPnVfcXVhbG5hbWUpOworICAgICAgICAgICAgICAgIGJhc2UgPSBwYXJlbnQtPnVfcXVhbG5hbWU7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgdSA9IGMtPnU7Ci0gICAgaWYgKFB5TGlzdF9BcHBlbmQoc2VxLCB1LT51X25hbWUpKQotICAgICAgICBnb3RvIF9lcnJvcjsKLSAgICBkb3Rfc3RyID0gX1B5VW5pY29kZV9Gcm9tSWQoJmRvdCk7Ci0gICAgaWYgKGRvdF9zdHIgPT0gTlVMTCkKLSAgICAgICAgZ290byBfZXJyb3I7Ci0gICAgbmFtZSA9IFB5VW5pY29kZV9Kb2luKGRvdF9zdHIsIHNlcSk7Ci0gICAgUHlfREVDUkVGKHNlcSk7Ci0gICAgdS0+dV9xdWFsbmFtZSA9IG5hbWU7Ci0gICAgUHlfWElOQ1JFRihuYW1lKTsKLSAgICByZXR1cm4gbmFtZTsKIAotX2Vycm9yOgotICAgIFB5X1hERUNSRUYoc2VxKTsKLSAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoYmFzZSAhPSBOVUxMKSB7CisgICAgICAgIGRvdF9zdHIgPSBfUHlVbmljb2RlX0Zyb21JZCgmZG90KTsKKyAgICAgICAgaWYgKGRvdF9zdHIgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlfREVDUkVGKGJhc2UpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgbmFtZSA9IFB5VW5pY29kZV9Db25jYXQoYmFzZSwgZG90X3N0cik7CisgICAgICAgIFB5X0RFQ1JFRihiYXNlKTsKKyAgICAgICAgaWYgKG5hbWUgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBQeVVuaWNvZGVfQXBwZW5kKCZuYW1lLCB1LT51X25hbWUpOworICAgICAgICBpZiAobmFtZSA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBQeV9JTkNSRUYodS0+dV9uYW1lKTsKKyAgICAgICAgbmFtZSA9IHUtPnVfbmFtZTsKKyAgICB9CisgICAgdS0+dV9xdWFsbmFtZSA9IG5hbWU7CisKKyAgICByZXR1cm4gMTsKIH0KIAogLyogQWxsb2NhdGUgYSBuZXcgYmxvY2sgYW5kIHJldHVybiBhIHBvaW50ZXIgdG8gaXQuCkBAIC03ODQsOCArODUzLDggQEAKICAgICBiLT5iX2luc3RyW29mZl0uaV9saW5lbm8gPSBjLT51LT51X2xpbmVubzsKIH0KIAotc3RhdGljIGludAotb3Bjb2RlX3N0YWNrX2VmZmVjdChpbnQgb3Bjb2RlLCBpbnQgb3BhcmcpCitpbnQKK1B5Q29tcGlsZV9PcGNvZGVTdGFja0VmZmVjdChpbnQgb3Bjb2RlLCBpbnQgb3BhcmcpCiB7CiAgICAgc3dpdGNoIChvcGNvZGUpIHsKICAgICAgICAgY2FzZSBQT1BfVE9QOgpAQCAtODYyLDggKzkzMSw2IEBACiAgICAgICAgICAgICByZXR1cm4gNzsKICAgICAgICAgY2FzZSBXSVRIX0NMRUFOVVA6CiAgICAgICAgICAgICByZXR1cm4gLTE7IC8qIFhYWCBTb21ldGltZXMgbW9yZSAqLwotICAgICAgICBjYXNlIFNUT1JFX0xPQ0FMUzoKLSAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgY2FzZSBSRVRVUk5fVkFMVUU6CiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIGNhc2UgSU1QT1JUX1NUQVI6CkBAIC05NzAsMTcgKzEwMzcsMTYgQEAKICAgICAgICAgY2FzZSBMT0FEX0NMT1NVUkU6CiAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgY2FzZSBMT0FEX0RFUkVGOgorICAgICAgICBjYXNlIExPQURfQ0xBU1NERVJFRjoKICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICBjYXNlIFNUT1JFX0RFUkVGOgogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICBjYXNlIERFTEVURV9ERVJFRjoKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJvcGNvZGUgPSAlZFxuIiwgb3Bjb2RlKTsKLSAgICAgICAgICAgIFB5X0ZhdGFsRXJyb3IoIm9wY29kZV9zdGFja19lZmZlY3QoKSIpOwotCisgICAgICAgICAgICByZXR1cm4gUFlfSU5WQUxJRF9TVEFDS19FRkZFQ1Q7CiAgICAgfQotICAgIHJldHVybiAwOyAvKiBub3QgcmVhY2hhYmxlICovCisgICAgcmV0dXJuIFBZX0lOVkFMSURfU1RBQ0tfRUZGRUNUOyAvKiBub3QgcmVhY2hhYmxlICovCiB9CiAKIC8qIEFkZCBhbiBvcGNvZGUgd2l0aCBubyBhcmd1bWVudC4KQEAgLTEwMDYsNyArMTA3Miw3IEBACiAgICAgcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBpbnQKK3N0YXRpYyBQeV9zc2l6ZV90CiBjb21waWxlcl9hZGRfbyhzdHJ1Y3QgY29tcGlsZXIgKmMsIFB5T2JqZWN0ICpkaWN0LCBQeU9iamVjdCAqbykKIHsKICAgICBQeU9iamVjdCAqdCwgKnY7CkBAIC0xMDYwLDcgKzExMjYsNyBAQAogICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgYXJnID0gUHlEaWN0X1NpemUoZGljdCk7Ci0gICAgICAgIHYgPSBQeUxvbmdfRnJvbUxvbmcoYXJnKTsKKyAgICAgICAgdiA9IFB5TG9uZ19Gcm9tU3NpemVfdChhcmcpOwogICAgICAgICBpZiAoIXYpIHsKICAgICAgICAgICAgIFB5X0RFQ1JFRih0KTsKICAgICAgICAgICAgIHJldHVybiAtMTsKQEAgLTEwODIsNyArMTE0OCw3IEBACiBjb21waWxlcl9hZGRvcF9vKHN0cnVjdCBjb21waWxlciAqYywgaW50IG9wY29kZSwgUHlPYmplY3QgKmRpY3QsCiAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqbykKIHsKLSAgICBpbnQgYXJnID0gY29tcGlsZXJfYWRkX28oYywgZGljdCwgbyk7CisgICAgUHlfc3NpemVfdCBhcmcgPSBjb21waWxlcl9hZGRfbyhjLCBkaWN0LCBvKTsKICAgICBpZiAoYXJnIDwgMCkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIGNvbXBpbGVyX2FkZG9wX2koYywgb3Bjb2RlLCBhcmcpOwpAQCAtMTA5Miw3ICsxMTU4LDcgQEAKIGNvbXBpbGVyX2FkZG9wX25hbWUoc3RydWN0IGNvbXBpbGVyICpjLCBpbnQgb3Bjb2RlLCBQeU9iamVjdCAqZGljdCwKICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKm8pCiB7Ci0gICAgaW50IGFyZzsKKyAgICBQeV9zc2l6ZV90IGFyZzsKICAgICBQeU9iamVjdCAqbWFuZ2xlZCA9IF9QeV9NYW5nbGUoYy0+dS0+dV9wcml2YXRlLCBvKTsKICAgICBpZiAoIW1hbmdsZWQpCiAgICAgICAgIHJldHVybiAwOwpAQCAtMTEwOCwxNiArMTE3NCwyMiBAQAogKi8KIAogc3RhdGljIGludAotY29tcGlsZXJfYWRkb3BfaShzdHJ1Y3QgY29tcGlsZXIgKmMsIGludCBvcGNvZGUsIGludCBvcGFyZykKK2NvbXBpbGVyX2FkZG9wX2koc3RydWN0IGNvbXBpbGVyICpjLCBpbnQgb3Bjb2RlLCBQeV9zc2l6ZV90IG9wYXJnKQogewogICAgIHN0cnVjdCBpbnN0ciAqaTsKICAgICBpbnQgb2ZmOworCisgICAgLyogSW50ZWdlciBhcmd1bWVudHMgYXJlIGxpbWl0IHRvIDE2LWJpdC4gVGhlcmUgaXMgYW4gZXh0ZW5zaW9uIGZvciAzMi1iaXQKKyAgICAgICBpbnRlZ2VyIGFyZ3VtZW50cy4gKi8KKyAgICBhc3NlcnQoKC0yMTQ3NDgzNjQ3LTEpIDw9IG9wYXJnKTsKKyAgICBhc3NlcnQob3BhcmcgPD0gMjE0NzQ4MzY0Nyk7CisKICAgICBvZmYgPSBjb21waWxlcl9uZXh0X2luc3RyKGMsIGMtPnUtPnVfY3VyYmxvY2spOwogICAgIGlmIChvZmYgPCAwKQogICAgICAgICByZXR1cm4gMDsKICAgICBpID0gJmMtPnUtPnVfY3VyYmxvY2stPmJfaW5zdHJbb2ZmXTsKICAgICBpLT5pX29wY29kZSA9IG9wY29kZTsKLSAgICBpLT5pX29wYXJnID0gb3Bhcmc7CisgICAgaS0+aV9vcGFyZyA9IFB5X1NBRkVfRE9XTkNBU1Qob3BhcmcsIFB5X3NzaXplX3QsIGludCk7CiAgICAgaS0+aV9oYXNhcmcgPSAxOwogICAgIGNvbXBpbGVyX3NldF9saW5lbm8oYywgb2ZmKTsKICAgICByZXR1cm4gMTsKQEAgLTEzMzAsMTkgKzE0MDIsMjIgQEAKIHN0YXRpYyBpbnQKIGdldF9yZWZfdHlwZShzdHJ1Y3QgY29tcGlsZXIgKmMsIFB5T2JqZWN0ICpuYW1lKQogewotICAgIGludCBzY29wZSA9IFB5U1RfR2V0U2NvcGUoYy0+dS0+dV9zdGUsIG5hbWUpOworICAgIGludCBzY29wZTsKKyAgICBpZiAoYy0+dS0+dV9zY29wZV90eXBlID09IENPTVBJTEVSX1NDT1BFX0NMQVNTICYmCisgICAgICAgICFQeVVuaWNvZGVfQ29tcGFyZVdpdGhBU0NJSVN0cmluZyhuYW1lLCAiX19jbGFzc19fIikpCisgICAgICAgIHJldHVybiBDRUxMOworICAgIHNjb3BlID0gUHlTVF9HZXRTY29wZShjLT51LT51X3N0ZSwgbmFtZSk7CiAgICAgaWYgKHNjb3BlID09IDApIHsKICAgICAgICAgY2hhciBidWZbMzUwXTsKICAgICAgICAgUHlPU19zbnByaW50ZihidWYsIHNpemVvZihidWYpLAotICAgICAgICAgICAgICAgICAgICAgICJ1bmtub3duIHNjb3BlIGZvciAlLjEwMHMgaW4gJS4xMDBzKCVzKSBpbiAlc1xuIgorICAgICAgICAgICAgICAgICAgICAgICJ1bmtub3duIHNjb3BlIGZvciAlLjEwMHMgaW4gJS4xMDBzKCVzKVxuIgogICAgICAgICAgICAgICAgICAgICAgICJzeW1ib2xzOiAlc1xubG9jYWxzOiAlc1xuZ2xvYmFsczogJXMiLAotICAgICAgICAgICAgICAgICAgICAgIFB5Qnl0ZXNfQVNfU1RSSU5HKG5hbWUpLAotICAgICAgICAgICAgICAgICAgICAgIFB5Qnl0ZXNfQVNfU1RSSU5HKGMtPnUtPnVfbmFtZSksCi0gICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3RfUkVQUihjLT51LT51X3N0ZS0+c3RlX2lkKSwKLSAgICAgICAgICAgICAgICAgICAgICBjLT5jX2ZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0X1JFUFIoYy0+dS0+dV9zdGUtPnN0ZV9zeW1ib2xzKSwKLSAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdF9SRVBSKGMtPnUtPnVfdmFybmFtZXMpLAotICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0X1JFUFIoYy0+dS0+dV9uYW1lcykKKyAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfQXNVVEY4KG5hbWUpLAorICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9Bc1VURjgoYy0+dS0+dV9uYW1lKSwKKyAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfQXNVVEY4KFB5T2JqZWN0X1JlcHIoYy0+dS0+dV9zdGUtPnN0ZV9pZCkpLAorICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9Bc1VURjgoUHlPYmplY3RfUmVwcihjLT51LT51X3N0ZS0+c3RlX3N5bWJvbHMpKSwKKyAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfQXNVVEY4KFB5T2JqZWN0X1JlcHIoYy0+dS0+dV92YXJuYW1lcykpLAorICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9Bc1VURjgoUHlPYmplY3RfUmVwcihjLT51LT51X25hbWVzKSkKICAgICAgICAgKTsKICAgICAgICAgUHlfRmF0YWxFcnJvcihidWYpOwogICAgIH0KQEAgLTEzNjUsOSArMTQ0MCw5IEBACiB9CiAKIHN0YXRpYyBpbnQKLWNvbXBpbGVyX21ha2VfY2xvc3VyZShzdHJ1Y3QgY29tcGlsZXIgKmMsIFB5Q29kZU9iamVjdCAqY28sIGludCBhcmdzLCBQeU9iamVjdCAqcXVhbG5hbWUpCitjb21waWxlcl9tYWtlX2Nsb3N1cmUoc3RydWN0IGNvbXBpbGVyICpjLCBQeUNvZGVPYmplY3QgKmNvLCBQeV9zc2l6ZV90IGFyZ3MsIFB5T2JqZWN0ICpxdWFsbmFtZSkKIHsKLSAgICBpbnQgaSwgZnJlZSA9IFB5Q29kZV9HZXROdW1GcmVlKGNvKTsKKyAgICBQeV9zc2l6ZV90IGksIGZyZWUgPSBQeUNvZGVfR2V0TnVtRnJlZShjbyk7CiAgICAgaWYgKHF1YWxuYW1lID09IE5VTEwpCiAgICAgICAgIHF1YWxuYW1lID0gY28tPmNvX25hbWU7CiAKQEAgLTEzOTksMTEgKzE0NzQsMTEgQEAKICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLAogICAgICAgICAgICAgICAgICJsb29rdXAgJXMgaW4gJXMgJWQgJWRcbiIKICAgICAgICAgICAgICAgICAiZnJlZXZhcnMgb2YgJXM6ICVzXG4iLAotICAgICAgICAgICAgICAgIFB5T2JqZWN0X1JFUFIobmFtZSksCi0gICAgICAgICAgICAgICAgUHlCeXRlc19BU19TVFJJTkcoYy0+dS0+dV9uYW1lKSwKKyAgICAgICAgICAgICAgICBQeVVuaWNvZGVfQXNVVEY4KFB5T2JqZWN0X1JlcHIobmFtZSkpLAorICAgICAgICAgICAgICAgIFB5VW5pY29kZV9Bc1VURjgoYy0+dS0+dV9uYW1lKSwKICAgICAgICAgICAgICAgICByZWZ0eXBlLCBhcmcsCi0gICAgICAgICAgICAgICAgX1B5VW5pY29kZV9Bc1N0cmluZyhjby0+Y29fbmFtZSksCi0gICAgICAgICAgICAgICAgUHlPYmplY3RfUkVQUihjby0+Y29fZnJlZXZhcnMpKTsKKyAgICAgICAgICAgICAgICBQeVVuaWNvZGVfQXNVVEY4KGNvLT5jb19uYW1lKSwKKyAgICAgICAgICAgICAgICBQeVVuaWNvZGVfQXNVVEY4KFB5T2JqZWN0X1JlcHIoY28tPmNvX2ZyZWV2YXJzKSkpOwogICAgICAgICAgICAgUHlfRmF0YWxFcnJvcigiY29tcGlsZXJfbWFrZV9jbG9zdXJlKCkiKTsKICAgICAgICAgfQogICAgICAgICBBRERPUF9JKGMsIExPQURfQ0xPU1VSRSwgYXJnKTsKQEAgLTE0NTcsOSArMTUzMiwxNiBAQAogICAgIGV4cHJfdHkgYW5ub3RhdGlvbiwgUHlPYmplY3QgKm5hbWVzKQogewogICAgIGlmIChhbm5vdGF0aW9uKSB7CisgICAgICAgIFB5T2JqZWN0ICptYW5nbGVkOwogICAgICAgICBWSVNJVChjLCBleHByLCBhbm5vdGF0aW9uKTsKLSAgICAgICAgaWYgKFB5TGlzdF9BcHBlbmQobmFtZXMsIGlkKSkKKyAgICAgICAgbWFuZ2xlZCA9IF9QeV9NYW5nbGUoYy0+dS0+dV9wcml2YXRlLCBpZCk7CisgICAgICAgIGlmICghbWFuZ2xlZCkKICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgaWYgKFB5TGlzdF9BcHBlbmQobmFtZXMsIG1hbmdsZWQpIDwgMCkgeworICAgICAgICAgICAgUHlfREVDUkVGKG1hbmdsZWQpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIFB5X0RFQ1JFRihtYW5nbGVkKTsKICAgICB9CiAgICAgcmV0dXJuIDA7CiB9CkBAIC0xNDk0LDIyICsxNTc2LDIyIEBACiAgICAgICAgKi8KICAgICBzdGF0aWMgaWRlbnRpZmllciByZXR1cm5fc3RyOwogICAgIFB5T2JqZWN0ICpuYW1lczsKLSAgICBpbnQgbGVuOworICAgIFB5X3NzaXplX3QgbGVuOwogICAgIG5hbWVzID0gUHlMaXN0X05ldygwKTsKICAgICBpZiAoIW5hbWVzKQogICAgICAgICByZXR1cm4gLTE7CiAKICAgICBpZiAoY29tcGlsZXJfdmlzaXRfYXJnYW5ub3RhdGlvbnMoYywgYXJncy0+YXJncywgbmFtZXMpKQogICAgICAgICBnb3RvIGVycm9yOwotICAgIGlmIChhcmdzLT52YXJhcmdhbm5vdGF0aW9uICYmCi0gICAgICAgIGNvbXBpbGVyX3Zpc2l0X2FyZ2Fubm90YXRpb24oYywgYXJncy0+dmFyYXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MtPnZhcmFyZ2Fubm90YXRpb24sIG5hbWVzKSkKKyAgICBpZiAoYXJncy0+dmFyYXJnICYmIGFyZ3MtPnZhcmFyZy0+YW5ub3RhdGlvbiAmJgorICAgICAgICBjb21waWxlcl92aXNpdF9hcmdhbm5vdGF0aW9uKGMsIGFyZ3MtPnZhcmFyZy0+YXJnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MtPnZhcmFyZy0+YW5ub3RhdGlvbiwgbmFtZXMpKQogICAgICAgICBnb3RvIGVycm9yOwogICAgIGlmIChjb21waWxlcl92aXNpdF9hcmdhbm5vdGF0aW9ucyhjLCBhcmdzLT5rd29ubHlhcmdzLCBuYW1lcykpCiAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgaWYgKGFyZ3MtPmt3YXJnYW5ub3RhdGlvbiAmJgotICAgICAgICBjb21waWxlcl92aXNpdF9hcmdhbm5vdGF0aW9uKGMsIGFyZ3MtPmt3YXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MtPmt3YXJnYW5ub3RhdGlvbiwgbmFtZXMpKQorICAgIGlmIChhcmdzLT5rd2FyZyAmJiBhcmdzLT5rd2FyZy0+YW5ub3RhdGlvbiAmJgorICAgICAgICBjb21waWxlcl92aXNpdF9hcmdhbm5vdGF0aW9uKGMsIGFyZ3MtPmt3YXJnLT5hcmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncy0+a3dhcmctPmFubm90YXRpb24sIG5hbWVzKSkKICAgICAgICAgZ290byBlcnJvcjsKIAogICAgIGlmICghcmV0dXJuX3N0cikgewpAQCAtMTUzMSw3ICsxNjEzLDcgQEAKICAgICBpZiAobGVuKSB7CiAgICAgICAgIC8qIGNvbnZlcnQgbmFtZXMgdG8gYSB0dXBsZSBhbmQgcGxhY2Ugb24gc3RhY2sgKi8KICAgICAgICAgUHlPYmplY3QgKmVsdDsKLSAgICAgICAgaW50IGk7CisgICAgICAgIFB5X3NzaXplX3QgaTsKICAgICAgICAgUHlPYmplY3QgKnMgPSBQeVR1cGxlX05ldyhsZW4pOwogICAgICAgICBpZiAoIXMpCiAgICAgICAgICAgICBnb3RvIGVycm9yOwpAQCAtMTU0NSw3ICsxNjI3LDkgQEAKICAgICAgICAgbGVuKys7IC8qIGluY2x1ZGUgdGhlIGp1c3QtcHVzaGVkIHR1cGxlICovCiAgICAgfQogICAgIFB5X0RFQ1JFRihuYW1lcyk7Ci0gICAgcmV0dXJuIGxlbjsKKworICAgIC8qIFdlIGp1c3QgY2hlY2tlZCB0aGF0IGxlbiA8PSA2NTUzNSwgc2VlIGFib3ZlICovCisgICAgcmV0dXJuIFB5X1NBRkVfRE9XTkNBU1QobGVuLCBQeV9zc2l6ZV90LCBpbnQpOwogCiBlcnJvcjoKICAgICBQeV9ERUNSRUYobmFtZXMpOwpAQCAtMTU2MSwxMyArMTY0NSwxNiBAQAogICAgIGV4cHJfdHkgcmV0dXJucyA9IHMtPnYuRnVuY3Rpb25EZWYucmV0dXJuczsKICAgICBhc2RsX3NlcSogZGVjb3MgPSBzLT52LkZ1bmN0aW9uRGVmLmRlY29yYXRvcl9saXN0OwogICAgIHN0bXRfdHkgc3Q7Ci0gICAgaW50IGksIG4sIGRvY3N0cmluZywga3dfZGVmYXVsdF9jb3VudCA9IDAsIGFyZ2xlbmd0aDsKKyAgICBQeV9zc2l6ZV90IGksIG4sIGFyZ2xlbmd0aDsKKyAgICBpbnQgZG9jc3RyaW5nLCBrd19kZWZhdWx0X2NvdW50ID0gMDsKICAgICBpbnQgbnVtX2Fubm90YXRpb25zOwogCiAgICAgYXNzZXJ0KHMtPmtpbmQgPT0gRnVuY3Rpb25EZWZfa2luZCk7CiAKICAgICBpZiAoIWNvbXBpbGVyX2RlY29yYXRvcnMoYywgZGVjb3MpKQogICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAoYXJncy0+ZGVmYXVsdHMpCisgICAgICAgIFZJU0lUX1NFUShjLCBleHByLCBhcmdzLT5kZWZhdWx0cyk7CiAgICAgaWYgKGFyZ3MtPmt3b25seWFyZ3MpIHsKICAgICAgICAgaW50IHJlcyA9IGNvbXBpbGVyX3Zpc2l0X2t3b25seWRlZmF1bHRzKGMsIGFyZ3MtPmt3b25seWFyZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLT5rd19kZWZhdWx0cyk7CkBAIC0xNTc1LDggKzE2NjIsNiBAQAogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIGt3X2RlZmF1bHRfY291bnQgPSByZXM7CiAgICAgfQotICAgIGlmIChhcmdzLT5kZWZhdWx0cykKLSAgICAgICAgVklTSVRfU0VRKGMsIGV4cHIsIGFyZ3MtPmRlZmF1bHRzKTsKICAgICBudW1fYW5ub3RhdGlvbnMgPSBjb21waWxlcl92aXNpdF9hbm5vdGF0aW9ucyhjLCBhcmdzLCByZXR1cm5zKTsKICAgICBpZiAobnVtX2Fubm90YXRpb25zIDwgMCkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xNjA1LDkgKzE2OTAsMTAgQEAKICAgICAgICAgVklTSVRfSU5fU0NPUEUoYywgc3RtdCwgc3QpOwogICAgIH0KICAgICBjbyA9IGFzc2VtYmxlKGMsIDEpOwotICAgIHF1YWxuYW1lID0gY29tcGlsZXJfc2NvcGVfcXVhbG5hbWUoYyk7CisgICAgcXVhbG5hbWUgPSBjLT51LT51X3F1YWxuYW1lOworICAgIFB5X0lOQ1JFRihxdWFsbmFtZSk7CiAgICAgY29tcGlsZXJfZXhpdF9zY29wZShjKTsKLSAgICBpZiAocXVhbG5hbWUgPT0gTlVMTCB8fCBjbyA9PSBOVUxMKSB7CisgICAgaWYgKGNvID09IE5VTEwpIHsKICAgICAgICAgUHlfWERFQ1JFRihxdWFsbmFtZSk7CiAgICAgICAgIFB5X1hERUNSRUYoY28pOwogICAgICAgICByZXR1cm4gMDsKQEAgLTE2NjEsMTIgKzE3NDcsNiBAQAogICAgICAgICBQeV9JTkNSRUYocy0+di5DbGFzc0RlZi5uYW1lKTsKICAgICAgICAgUHlfWERFQ1JFRihjLT51LT51X3ByaXZhdGUpOwogICAgICAgICBjLT51LT51X3ByaXZhdGUgPSBzLT52LkNsYXNzRGVmLm5hbWU7Ci0gICAgICAgIC8qIGZvcmNlIGl0IHRvIGhhdmUgb25lIG1hbmRhdG9yeSBhcmd1bWVudCAqLwotICAgICAgICBjLT51LT51X2FyZ2NvdW50ID0gMTsKLSAgICAgICAgLyogbG9hZCB0aGUgZmlyc3QgYXJndW1lbnQgKF9fbG9jYWxzX18pIC4uLiAqLwotICAgICAgICBBRERPUF9JKGMsIExPQURfRkFTVCwgMCk7Ci0gICAgICAgIC8qIC4uLiBhbmQgc3RvcmUgaXQgaW50byBmX2xvY2FscyAqLwotICAgICAgICBBRERPUF9JTl9TQ09QRShjLCBTVE9SRV9MT0NBTFMpOwogICAgICAgICAvKiBsb2FkIChnbG9iYWwpIF9fbmFtZV9fIC4uLiAqLwogICAgICAgICBzdHIgPSBQeVVuaWNvZGVfSW50ZXJuRnJvbVN0cmluZygiX19uYW1lX18iKTsKICAgICAgICAgaWYgKCFzdHIgfHwgIWNvbXBpbGVyX25hbWVvcChjLCBzdHIsIExvYWQpKSB7CkBAIC0xNjgzLDE0ICsxNzYzLDggQEAKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAgICAgICAgIFB5X0RFQ1JFRihzdHIpOwotICAgICAgICAvKiBzdG9yZSB0aGUgX19xdWFsbmFtZV9fICovCi0gICAgICAgIHN0ciA9IGNvbXBpbGVyX3Njb3BlX3F1YWxuYW1lKGMpOwotICAgICAgICBpZiAoIXN0cikgewotICAgICAgICAgICAgY29tcGlsZXJfZXhpdF9zY29wZShjKTsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0gICAgICAgIEFERE9QX08oYywgTE9BRF9DT05TVCwgc3RyLCBjb25zdHMpOwotICAgICAgICBQeV9ERUNSRUYoc3RyKTsKKyAgICAgICAgYXNzZXJ0KGMtPnUtPnVfcXVhbG5hbWUpOworICAgICAgICBBRERPUF9PKGMsIExPQURfQ09OU1QsIGMtPnUtPnVfcXVhbG5hbWUsIGNvbnN0cyk7CiAgICAgICAgIHN0ciA9IFB5VW5pY29kZV9JbnRlcm5Gcm9tU3RyaW5nKCJfX3F1YWxuYW1lX18iKTsKICAgICAgICAgaWYgKCFzdHIgfHwgIWNvbXBpbGVyX25hbWVvcChjLCBzdHIsIFN0b3JlKSkgewogICAgICAgICAgICAgUHlfWERFQ1JFRihzdHIpOwpAQCAtMTcwMywyNCArMTc3NywyOCBAQAogICAgICAgICAgICAgY29tcGlsZXJfZXhpdF9zY29wZShjKTsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9Ci0gICAgICAgIC8qIHJldHVybiB0aGUgKGVtcHR5KSBfX2NsYXNzX18gY2VsbCAqLwotICAgICAgICBzdHIgPSBQeVVuaWNvZGVfSW50ZXJuRnJvbVN0cmluZygiX19jbGFzc19fIik7Ci0gICAgICAgIGlmIChzdHIgPT0gTlVMTCkgewotICAgICAgICAgICAgY29tcGlsZXJfZXhpdF9zY29wZShjKTsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0gICAgICAgIGkgPSBjb21waWxlcl9sb29rdXBfYXJnKGMtPnUtPnVfY2VsbHZhcnMsIHN0cik7Ci0gICAgICAgIFB5X0RFQ1JFRihzdHIpOwotICAgICAgICBpZiAoaSA9PSAtMSkgewotICAgICAgICAgICAgLyogVGhpcyBoYXBwZW5zIHdoZW4gbm9ib2R5IHJlZmVyZW5jZXMgdGhlIGNlbGwgKi8KLSAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgICAgICAgICAvKiBSZXR1cm4gTm9uZSAqLwotICAgICAgICAgICAgQURET1BfTyhjLCBMT0FEX0NPTlNULCBQeV9Ob25lLCBjb25zdHMpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgeworICAgICAgICBpZiAoYy0+dS0+dV9zdGUtPnN0ZV9uZWVkc19jbGFzc19jbG9zdXJlKSB7CisgICAgICAgICAgICAvKiByZXR1cm4gdGhlIChlbXB0eSkgX19jbGFzc19fIGNlbGwgKi8KKyAgICAgICAgICAgIHN0ciA9IFB5VW5pY29kZV9JbnRlcm5Gcm9tU3RyaW5nKCJfX2NsYXNzX18iKTsKKyAgICAgICAgICAgIGlmIChzdHIgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIGNvbXBpbGVyX2V4aXRfc2NvcGUoYyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpID0gY29tcGlsZXJfbG9va3VwX2FyZyhjLT51LT51X2NlbGx2YXJzLCBzdHIpOworICAgICAgICAgICAgUHlfREVDUkVGKHN0cik7CisgICAgICAgICAgICBpZiAoaSA8IDApIHsKKyAgICAgICAgICAgICAgICBjb21waWxlcl9leGl0X3Njb3BlKGMpOworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYXNzZXJ0KGkgPT0gMCk7CiAgICAgICAgICAgICAvKiBSZXR1cm4gdGhlIGNlbGwgd2hlcmUgdG8gc3RvcmUgX19jbGFzc19fICovCiAgICAgICAgICAgICBBRERPUF9JKGMsIExPQURfQ0xPU1VSRSwgaSk7CiAgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBhc3NlcnQoUHlEaWN0X1NpemUoYy0+dS0+dV9jZWxsdmFycykgPT0gMCk7CisgICAgICAgICAgICAvKiBUaGlzIGhhcHBlbnMgd2hlbiBub2JvZHkgcmVmZXJlbmNlcyB0aGUgY2VsbC4gUmV0dXJuIE5vbmUuICovCisgICAgICAgICAgICBBRERPUF9PKGMsIExPQURfQ09OU1QsIFB5X05vbmUsIGNvbnN0cyk7CisgICAgICAgIH0KICAgICAgICAgQURET1BfSU5fU0NPUEUoYywgUkVUVVJOX1ZBTFVFKTsKICAgICAgICAgLyogY3JlYXRlIHRoZSBjb2RlIG9iamVjdCAqLwogICAgICAgICBjbyA9IGFzc2VtYmxlKGMsIDEpOwpAQCAtMTc4Nyw3ICsxODY1LDggQEAKICAgICBQeUNvZGVPYmplY3QgKmNvOwogICAgIFB5T2JqZWN0ICpxdWFsbmFtZTsKICAgICBzdGF0aWMgaWRlbnRpZmllciBuYW1lOwotICAgIGludCBrd19kZWZhdWx0X2NvdW50ID0gMCwgYXJnbGVuZ3RoOworICAgIGludCBrd19kZWZhdWx0X2NvdW50ID0gMDsKKyAgICBQeV9zc2l6ZV90IGFyZ2xlbmd0aDsKICAgICBhcmd1bWVudHNfdHkgYXJncyA9IGUtPnYuTGFtYmRhLmFyZ3M7CiAgICAgYXNzZXJ0KGUtPmtpbmQgPT0gTGFtYmRhX2tpbmQpOwogCkBAIC0xNzk3LDE1ICsxODc2LDE1IEBACiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKKyAgICBpZiAoYXJncy0+ZGVmYXVsdHMpCisgICAgICAgIFZJU0lUX1NFUShjLCBleHByLCBhcmdzLT5kZWZhdWx0cyk7CiAgICAgaWYgKGFyZ3MtPmt3b25seWFyZ3MpIHsKICAgICAgICAgaW50IHJlcyA9IGNvbXBpbGVyX3Zpc2l0X2t3b25seWRlZmF1bHRzKGMsIGFyZ3MtPmt3b25seWFyZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLT5rd19kZWZhdWx0cyk7CiAgICAgICAgIGlmIChyZXMgPCAwKSByZXR1cm4gMDsKICAgICAgICAga3dfZGVmYXVsdF9jb3VudCA9IHJlczsKICAgICB9Ci0gICAgaWYgKGFyZ3MtPmRlZmF1bHRzKQotICAgICAgICBWSVNJVF9TRVEoYywgZXhwciwgYXJncy0+ZGVmYXVsdHMpOwotICAgIGlmICghY29tcGlsZXJfZW50ZXJfc2NvcGUoYywgbmFtZSwgQ09NUElMRVJfU0NPUEVfRlVOQ1RJT04sCisgICAgaWYgKCFjb21waWxlcl9lbnRlcl9zY29wZShjLCBuYW1lLCBDT01QSUxFUl9TQ09QRV9MQU1CREEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKWUsIGUtPmxpbmVubykpCiAgICAgICAgIHJldHVybiAwOwogCkBAIC0xODE4LDE1ICsxODk3LDE2IEBACiAgICAgYy0+dS0+dV9rd29ubHlhcmdjb3VudCA9IGFzZGxfc2VxX0xFTihhcmdzLT5rd29ubHlhcmdzKTsKICAgICBWSVNJVF9JTl9TQ09QRShjLCBleHByLCBlLT52LkxhbWJkYS5ib2R5KTsKICAgICBpZiAoYy0+dS0+dV9zdGUtPnN0ZV9nZW5lcmF0b3IpIHsKLSAgICAgICAgQURET1BfSU5fU0NPUEUoYywgUE9QX1RPUCk7CisgICAgICAgIGNvID0gYXNzZW1ibGUoYywgMCk7CiAgICAgfQogICAgIGVsc2UgewogICAgICAgICBBRERPUF9JTl9TQ09QRShjLCBSRVRVUk5fVkFMVUUpOworICAgICAgICBjbyA9IGFzc2VtYmxlKGMsIDEpOwogICAgIH0KLSAgICBjbyA9IGFzc2VtYmxlKGMsIDEpOwotICAgIHF1YWxuYW1lID0gY29tcGlsZXJfc2NvcGVfcXVhbG5hbWUoYyk7CisgICAgcXVhbG5hbWUgPSBjLT51LT51X3F1YWxuYW1lOworICAgIFB5X0lOQ1JFRihxdWFsbmFtZSk7CiAgICAgY29tcGlsZXJfZXhpdF9zY29wZShjKTsKLSAgICBpZiAocXVhbG5hbWUgPT0gTlVMTCB8fCBjbyA9PSBOVUxMKQorICAgIGlmIChjbyA9PSBOVUxMKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIGFyZ2xlbmd0aCA9IGFzZGxfc2VxX0xFTihhcmdzLT5kZWZhdWx0cyk7CkBAIC0xOTQ5LDEwICsyMDI5LDkgQEAKICAgICAgICBpZiB0aGVyZSBpcyBubyBlbHNlIGNsYXVzZSA/CiAgICAgKi8KIAotICAgIGlmIChjb25zdGFudCA9PSAtMSkgeworICAgIGlmIChjb25zdGFudCA9PSAtMSkKICAgICAgICAgY29tcGlsZXJfdXNlX25leHRfYmxvY2soYywgYW5jaG9yKTsKLSAgICAgICAgQURET1AoYywgUE9QX0JMT0NLKTsKLSAgICB9CisgICAgQURET1AoYywgUE9QX0JMT0NLKTsKICAgICBjb21waWxlcl9wb3BfZmJsb2NrKGMsIExPT1AsIGxvb3ApOwogICAgIGlmIChvcmVsc2UgIT0gTlVMTCkgLyogd2hhdCBpZiBvcmVsc2UgaXMganVzdCBwYXNzPyAqLwogICAgICAgICBWSVNJVF9TRVEoYywgc3RtdCwgcy0+di5XaGlsZS5vcmVsc2UpOwpAQCAtMjA5Nyw3ICsyMTc2LDcgQEAKIGNvbXBpbGVyX3RyeV9leGNlcHQoc3RydWN0IGNvbXBpbGVyICpjLCBzdG10X3R5IHMpCiB7CiAgICAgYmFzaWNibG9jayAqYm9keSwgKm9yZWxzZSwgKmV4Y2VwdCwgKmVuZDsKLSAgICBpbnQgaSwgbjsKKyAgICBQeV9zc2l6ZV90IGksIG47CiAKICAgICBib2R5ID0gY29tcGlsZXJfbmV3X2Jsb2NrKGMpOwogICAgIGV4Y2VwdCA9IGNvbXBpbGVyX25ld19ibG9jayhjKTsKQEAgLTIyNjMsNyArMjM0Miw3IEBACiAgICAgICAgbW9kdWxlIG5hbWVzLgogICAgICAgIFhYWCBQZXJoYXBzIGNoYW5nZSB0aGUgcmVwcmVzZW50YXRpb24gdG8gbWFrZSB0aGlzIGNhc2Ugc2ltcGxlcj8KICAgICAgKi8KLSAgICBpbnQgaSwgbiA9IGFzZGxfc2VxX0xFTihzLT52LkltcG9ydC5uYW1lcyk7CisgICAgUHlfc3NpemVfdCBpLCBuID0gYXNkbF9zZXFfTEVOKHMtPnYuSW1wb3J0Lm5hbWVzKTsKIAogICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKICAgICAgICAgYWxpYXNfdHkgYWxpYXMgPSAoYWxpYXNfdHkpYXNkbF9zZXFfR0VUKHMtPnYuSW1wb3J0Lm5hbWVzLCBpKTsKQEAgLTIyODgsOCArMjM2NywxMSBAQAogICAgICAgICAgICAgaWRlbnRpZmllciB0bXAgPSBhbGlhcy0+bmFtZTsKICAgICAgICAgICAgIFB5X3NzaXplX3QgZG90ID0gUHlVbmljb2RlX0ZpbmRDaGFyKAogICAgICAgICAgICAgICAgIGFsaWFzLT5uYW1lLCAnLicsIDAsIFB5VW5pY29kZV9HRVRfTEVOR1RIKGFsaWFzLT5uYW1lKSwgMSk7Ci0gICAgICAgICAgICBpZiAoZG90ICE9IC0xKQorICAgICAgICAgICAgaWYgKGRvdCAhPSAtMSkgewogICAgICAgICAgICAgICAgIHRtcCA9IFB5VW5pY29kZV9TdWJzdHJpbmcoYWxpYXMtPm5hbWUsIDAsIGRvdCk7CisgICAgICAgICAgICAgICAgaWYgKHRtcCA9PSBOVUxMKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIHIgPSBjb21waWxlcl9uYW1lb3AoYywgdG1wLCBTdG9yZSk7CiAgICAgICAgICAgICBpZiAoZG90ICE9IC0xKSB7CiAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHRtcCk7CkBAIC0yMzA0LDcgKzIzODYsNyBAQAogc3RhdGljIGludAogY29tcGlsZXJfZnJvbV9pbXBvcnQoc3RydWN0IGNvbXBpbGVyICpjLCBzdG10X3R5IHMpCiB7Ci0gICAgaW50IGksIG4gPSBhc2RsX3NlcV9MRU4ocy0+di5JbXBvcnRGcm9tLm5hbWVzKTsKKyAgICBQeV9zc2l6ZV90IGksIG4gPSBhc2RsX3NlcV9MRU4ocy0+di5JbXBvcnRGcm9tLm5hbWVzKTsKIAogICAgIFB5T2JqZWN0ICpuYW1lcyA9IFB5VHVwbGVfTmV3KG4pOwogICAgIFB5T2JqZWN0ICpsZXZlbDsKQEAgLTIzODAsNiArMjQ2Miw3IEBACiB7CiAgICAgc3RhdGljIFB5T2JqZWN0ICphc3NlcnRpb25fZXJyb3IgPSBOVUxMOwogICAgIGJhc2ljYmxvY2sgKmVuZDsKKyAgICBQeU9iamVjdCogbXNnOwogCiAgICAgaWYgKGMtPmNfb3B0aW1pemUpCiAgICAgICAgIHJldHVybiAxOwpAQCAtMjM5MCwxMSArMjQ3MywxNyBAQAogICAgIH0KICAgICBpZiAocy0+di5Bc3NlcnQudGVzdC0+a2luZCA9PSBUdXBsZV9raW5kICYmCiAgICAgICAgIGFzZGxfc2VxX0xFTihzLT52LkFzc2VydC50ZXN0LT52LlR1cGxlLmVsdHMpID4gMCkgewotICAgICAgICBjb25zdCBjaGFyKiBtc2cgPQotICAgICAgICAgICAgImFzc2VydGlvbiBpcyBhbHdheXMgdHJ1ZSwgcGVyaGFwcyByZW1vdmUgcGFyZW50aGVzZXM/IjsKLSAgICAgICAgaWYgKFB5RXJyX1dhcm5FeHBsaWNpdChQeUV4Y19TeW50YXhXYXJuaW5nLCBtc2csIGMtPmNfZmlsZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy0+dS0+dV9saW5lbm8sIE5VTEwsIE5VTEwpID09IC0xKQorICAgICAgICBtc2cgPSBQeVVuaWNvZGVfRnJvbVN0cmluZygiYXNzZXJ0aW9uIGlzIGFsd2F5cyB0cnVlLCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwZXJoYXBzIHJlbW92ZSBwYXJlbnRoZXNlcz8iKTsKKyAgICAgICAgaWYgKG1zZyA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGlmIChQeUVycl9XYXJuRXhwbGljaXRPYmplY3QoUHlFeGNfU3ludGF4V2FybmluZywgbXNnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMtPmNfZmlsZW5hbWUsIGMtPnUtPnVfbGluZW5vLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwpID09IC0xKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYobXNnKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIFB5X0RFQ1JFRihtc2cpOwogICAgIH0KICAgICBWSVNJVChjLCBleHByLCBzLT52LkFzc2VydC50ZXN0KTsKICAgICBlbmQgPSBjb21waWxlcl9uZXdfYmxvY2soYyk7CkBAIC0yNDE0LDcgKzI1MDMsNyBAQAogc3RhdGljIGludAogY29tcGlsZXJfdmlzaXRfc3RtdChzdHJ1Y3QgY29tcGlsZXIgKmMsIHN0bXRfdHkgcykKIHsKLSAgICBpbnQgaSwgbjsKKyAgICBQeV9zc2l6ZV90IGksIG47CiAKICAgICAvKiBBbHdheXMgYXNzaWduIGEgbGluZW5vIHRvIHRoZSBuZXh0IGluc3RydWN0aW9uIGZvciBhIHN0bXQuICovCiAgICAgYy0+dS0+dV9saW5lbm8gPSBzLT5saW5lbm87CkBAIC0yNDYyLDEyICsyNTUxLDEyIEBACiAgICAgICAgIGlmIChzLT52LlJhaXNlLmV4YykgewogICAgICAgICAgICAgVklTSVQoYywgZXhwciwgcy0+di5SYWlzZS5leGMpOwogICAgICAgICAgICAgbisrOwotICAgICAgICBpZiAocy0+di5SYWlzZS5jYXVzZSkgewotICAgICAgICBWSVNJVChjLCBleHByLCBzLT52LlJhaXNlLmNhdXNlKTsKLSAgICAgICAgbisrOworICAgICAgICAgICAgaWYgKHMtPnYuUmFpc2UuY2F1c2UpIHsKKyAgICAgICAgICAgICAgICBWSVNJVChjLCBleHByLCBzLT52LlJhaXNlLmNhdXNlKTsKKyAgICAgICAgICAgICAgICBuKys7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBBRERPUF9JKGMsIFJBSVNFX1ZBUkFSR1MsIG4pOworICAgICAgICBBRERPUF9JKGMsIFJBSVNFX1ZBUkFSR1MsIChpbnQpbik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgVHJ5X2tpbmQ6CiAgICAgICAgIHJldHVybiBjb21waWxlcl90cnkoYywgcyk7CkBAIC0yNjI3LDcgKzI3MTYsOCBAQAogc3RhdGljIGludAogY29tcGlsZXJfbmFtZW9wKHN0cnVjdCBjb21waWxlciAqYywgaWRlbnRpZmllciBuYW1lLCBleHByX2NvbnRleHRfdHkgY3R4KQogewotICAgIGludCBvcCwgc2NvcGUsIGFyZzsKKyAgICBpbnQgb3AsIHNjb3BlOworICAgIFB5X3NzaXplX3QgYXJnOwogICAgIGVudW0geyBPUF9GQVNULCBPUF9HTE9CQUwsIE9QX0RFUkVGLCBPUF9OQU1FIH0gb3B0eXBlOwogCiAgICAgUHlPYmplY3QgKmRpY3QgPSBjLT51LT51X25hbWVzOwpAQCAtMjYzOCw2ICsyNzI4LDEwIEBACiAgICAgaWYgKCFtYW5nbGVkKQogICAgICAgICByZXR1cm4gMDsKIAorICAgIGFzc2VydChQeVVuaWNvZGVfQ29tcGFyZVdpdGhBU0NJSVN0cmluZyhuYW1lLCAiTm9uZSIpICYmCisgICAgICAgICAgIFB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKG5hbWUsICJUcnVlIikgJiYKKyAgICAgICAgICAgUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcobmFtZSwgIkZhbHNlIikpOworCiAgICAgb3AgPSAwOwogICAgIG9wdHlwZSA9IE9QX05BTUU7CiAgICAgc2NvcGUgPSBQeVNUX0dldFNjb3BlKGMtPnUtPnVfc3RlLCBtYW5nbGVkKTsKQEAgLTI2NzMsNyArMjc2Nyw5IEBACiAgICAgc3dpdGNoIChvcHR5cGUpIHsKICAgICBjYXNlIE9QX0RFUkVGOgogICAgICAgICBzd2l0Y2ggKGN0eCkgewotICAgICAgICBjYXNlIExvYWQ6IG9wID0gTE9BRF9ERVJFRjsgYnJlYWs7CisgICAgICAgIGNhc2UgTG9hZDoKKyAgICAgICAgICAgIG9wID0gKGMtPnUtPnVfc3RlLT5zdGVfdHlwZSA9PSBDbGFzc0Jsb2NrKSA/IExPQURfQ0xBU1NERVJFRiA6IExPQURfREVSRUY7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBTdG9yZTogb3AgPSBTVE9SRV9ERVJFRjsgYnJlYWs7CiAgICAgICAgIGNhc2UgQXVnTG9hZDoKICAgICAgICAgY2FzZSBBdWdTdG9yZToKQEAgLTI3NDcsNyArMjg0Myw4IEBACiBjb21waWxlcl9ib29sb3Aoc3RydWN0IGNvbXBpbGVyICpjLCBleHByX3R5IGUpCiB7CiAgICAgYmFzaWNibG9jayAqZW5kOwotICAgIGludCBqdW1waSwgaSwgbjsKKyAgICBpbnQganVtcGk7CisgICAgUHlfc3NpemVfdCBpLCBuOwogICAgIGFzZGxfc2VxICpzOwogCiAgICAgYXNzZXJ0KGUtPmtpbmQgPT0gQm9vbE9wX2tpbmQpOwpAQCAtMjc3Myw3ICsyODcwLDcgQEAKIHN0YXRpYyBpbnQKIGNvbXBpbGVyX2xpc3Qoc3RydWN0IGNvbXBpbGVyICpjLCBleHByX3R5IGUpCiB7Ci0gICAgaW50IG4gPSBhc2RsX3NlcV9MRU4oZS0+di5MaXN0LmVsdHMpOworICAgIFB5X3NzaXplX3QgbiA9IGFzZGxfc2VxX0xFTihlLT52Lkxpc3QuZWx0cyk7CiAgICAgaWYgKGUtPnYuTGlzdC5jdHggPT0gU3RvcmUpIHsKICAgICAgICAgaW50IGksIHNlZW5fc3RhciA9IDA7CiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKQEAgLTI4MDYsNyArMjkwMyw3IEBACiBzdGF0aWMgaW50CiBjb21waWxlcl90dXBsZShzdHJ1Y3QgY29tcGlsZXIgKmMsIGV4cHJfdHkgZSkKIHsKLSAgICBpbnQgbiA9IGFzZGxfc2VxX0xFTihlLT52LlR1cGxlLmVsdHMpOworICAgIFB5X3NzaXplX3QgbiA9IGFzZGxfc2VxX0xFTihlLT52LlR1cGxlLmVsdHMpOwogICAgIGlmIChlLT52LlR1cGxlLmN0eCA9PSBTdG9yZSkgewogICAgICAgICBpbnQgaSwgc2Vlbl9zdGFyID0gMDsKICAgICAgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewpAQCAtMjgzOSw3ICsyOTM2LDcgQEAKIHN0YXRpYyBpbnQKIGNvbXBpbGVyX2NvbXBhcmUoc3RydWN0IGNvbXBpbGVyICpjLCBleHByX3R5IGUpCiB7Ci0gICAgaW50IGksIG47CisgICAgUHlfc3NpemVfdCBpLCBuOwogICAgIGJhc2ljYmxvY2sgKmNsZWFudXAgPSBOVUxMOwogCiAgICAgLyogWFhYIHRoZSBsb2dpYyBjYW4gYmUgY2xlYW5lZCB1cCBmb3IgMSBvciBtdWx0aXBsZSBjb21wYXJpc29ucyAqLwpAQCAtMjg5NSwxMSArMjk5MiwxMSBAQAogLyogc2hhcmVkIGNvZGUgYmV0d2VlbiBjb21waWxlcl9jYWxsIGFuZCBjb21waWxlcl9jbGFzcyAqLwogc3RhdGljIGludAogY29tcGlsZXJfY2FsbF9oZWxwZXIoc3RydWN0IGNvbXBpbGVyICpjLAotICAgICAgICAgICAgICAgICAgICAgaW50IG4sIC8qIEFyZ3MgYWxyZWFkeSBwdXNoZWQgKi8KLSAgICAgICAgICAgICBhc2RsX3NlcSAqYXJncywKLSAgICAgICAgICAgICBhc2RsX3NlcSAqa2V5d29yZHMsCi0gICAgICAgICAgICAgZXhwcl90eSBzdGFyYXJncywKLSAgICAgICAgICAgICBleHByX3R5IGt3YXJncykKKyAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgbiwgLyogQXJncyBhbHJlYWR5IHB1c2hlZCAqLworICAgICAgICAgICAgICAgICAgICAgYXNkbF9zZXEgKmFyZ3MsCisgICAgICAgICAgICAgICAgICAgICBhc2RsX3NlcSAqa2V5d29yZHMsCisgICAgICAgICAgICAgICAgICAgICBleHByX3R5IHN0YXJhcmdzLAorICAgICAgICAgICAgICAgICAgICAgZXhwcl90eSBrd2FyZ3MpCiB7CiAgICAgaW50IGNvZGUgPSAwOwogCkBAIC0yOTYwLDcgKzMwNTcsNyBAQAogCiAgICAgY29tcHJlaGVuc2lvbl90eSBnZW47CiAgICAgYmFzaWNibG9jayAqc3RhcnQsICphbmNob3IsICpza2lwLCAqaWZfY2xlYW51cDsKLSAgICBpbnQgaSwgbjsKKyAgICBQeV9zc2l6ZV90IGksIG47CiAKICAgICBzdGFydCA9IGNvbXBpbGVyX25ld19ibG9jayhjKTsKICAgICBza2lwID0gY29tcGlsZXJfbmV3X2Jsb2NrKGMpOwpAQCAtMzA4NSw5ICszMTgyLDEwIEBACiAgICAgfQogCiAgICAgY28gPSBhc3NlbWJsZShjLCAxKTsKLSAgICBxdWFsbmFtZSA9IGNvbXBpbGVyX3Njb3BlX3F1YWxuYW1lKGMpOworICAgIHF1YWxuYW1lID0gYy0+dS0+dV9xdWFsbmFtZTsKKyAgICBQeV9JTkNSRUYocXVhbG5hbWUpOwogICAgIGNvbXBpbGVyX2V4aXRfc2NvcGUoYyk7Ci0gICAgaWYgKHF1YWxuYW1lID09IE5VTEwgfHwgY28gPT0gTlVMTCkKKyAgICBpZiAoY28gPT0gTlVMTCkKICAgICAgICAgZ290byBlcnJvcjsKIAogICAgIGlmICghY29tcGlsZXJfbWFrZV9jbG9zdXJlKGMsIGNvLCAwLCBxdWFsbmFtZSkpCkBAIC0zMTk3LDEyICszMjk1LDE4IEBACiAgICAgY2FzZSBOYW1lX2tpbmQ6CiAgICAgICAgIC8qIG9wdGltaXplIGF3YXkgbmFtZXMgdGhhdCBjYW4ndCBiZSByZWFzc2lnbmVkICovCiAgICAgICAgIGlkID0gUHlVbmljb2RlX0FzVVRGOChlLT52Lk5hbWUuaWQpOwotICAgICAgICBpZiAoc3RyY21wKGlkLCAiVHJ1ZSIpID09IDApIHJldHVybiAxOwotICAgICAgICBpZiAoc3RyY21wKGlkLCAiRmFsc2UiKSA9PSAwKSByZXR1cm4gMDsKLSAgICAgICAgaWYgKHN0cmNtcChpZCwgIk5vbmUiKSA9PSAwKSByZXR1cm4gMDsKLSAgICAgICAgaWYgKHN0cmNtcChpZCwgIl9fZGVidWdfXyIpID09IDApCi0gICAgICAgICAgICByZXR1cm4gISBjLT5jX29wdGltaXplOwotICAgICAgICAvKiBmYWxsIHRocm91Z2ggKi8KKyAgICAgICAgaWYgKGlkICYmIHN0cmNtcChpZCwgIl9fZGVidWdfXyIpID09IDApCisgICAgICAgICAgICByZXR1cm4gIWMtPmNfb3B0aW1pemU7CisgICAgICAgIHJldHVybiAtMTsKKyAgICBjYXNlIE5hbWVDb25zdGFudF9raW5kOiB7CisgICAgICAgIFB5T2JqZWN0ICpvID0gZS0+di5OYW1lQ29uc3RhbnQudmFsdWU7CisgICAgICAgIGlmIChvID09IFB5X05vbmUpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgZWxzZSBpZiAobyA9PSBQeV9UcnVlKQorICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIGVsc2UgaWYgKG8gPT0gUHlfRmFsc2UpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9CiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KQEAgLTMyMjYsOSArMzMzMCw5IEBACiAgICAgICAgQkxPQ0sKICAgIGZpbmFsbHk6CiAgICAgICAgaWYgYW4gZXhjZXB0aW9uIHdhcyByYWlzZWQ6Ci0gICAgICAgZXhjID0gY29weSBvZiAoZXhjZXB0aW9uLCBpbnN0YW5jZSwgdHJhY2ViYWNrKQorICAgICAgICAgICBleGMgPSBjb3B5IG9mIChleGNlcHRpb24sIGluc3RhbmNlLCB0cmFjZWJhY2spCiAgICAgICAgZWxzZToKLSAgICAgICBleGMgPSAoTm9uZSwgTm9uZSwgTm9uZSkKKyAgICAgICAgICAgZXhjID0gKE5vbmUsIE5vbmUsIE5vbmUpCiAgICAgICAgZXhpdCgqZXhjKQogICovCiBzdGF0aWMgaW50CkBAIC0zMjkyLDcgKzMzOTYsNyBAQAogc3RhdGljIGludAogY29tcGlsZXJfdmlzaXRfZXhwcihzdHJ1Y3QgY29tcGlsZXIgKmMsIGV4cHJfdHkgZSkKIHsKLSAgICBpbnQgaSwgbjsKKyAgICBQeV9zc2l6ZV90IGksIG47CiAKICAgICAvKiBJZiBleHByIGUgaGFzIGEgZGlmZmVyZW50IGxpbmUgbnVtYmVyIHRoYW4gdGhlIGxhc3QgZXhwci9zdG10LAogICAgICAgIHNldCBhIG5ldyBsaW5lIG51bWJlciBmb3IgdGhlIG5leHQgaW5zdHJ1Y3Rpb24uCkBAIC0zMzIxLDYgKzM0MjUsOCBAQAogICAgICAgICByZXR1cm4gY29tcGlsZXJfaWZleHAoYywgZSk7CiAgICAgY2FzZSBEaWN0X2tpbmQ6CiAgICAgICAgIG4gPSBhc2RsX3NlcV9MRU4oZS0+di5EaWN0LnZhbHVlcyk7CisgICAgICAgIC8qIEJVSUxEX01BUCBwYXJhbWV0ZXIgaXMgb25seSB1c2VkIHRvIHByZWFsbG9jYXRlIHRoZSBkaWN0aW9uYXJ5LAorICAgICAgICAgICBpdCBkb2Vzbid0IG5lZWQgdG8gYmUgZXhhY3QgKi8KICAgICAgICAgQURET1BfSShjLCBCVUlMRF9NQVAsIChuPjB4RkZGRiA/IDB4RkZGRiA6IG4pKTsKICAgICAgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewogICAgICAgICAgICAgVklTSVQoYywgZXhwciwKQEAgLTMzNzgsNiArMzQ4NCw5IEBACiAgICAgY2FzZSBFbGxpcHNpc19raW5kOgogICAgICAgICBBRERPUF9PKGMsIExPQURfQ09OU1QsIFB5X0VsbGlwc2lzLCBjb25zdHMpOwogICAgICAgICBicmVhazsKKyAgICBjYXNlIE5hbWVDb25zdGFudF9raW5kOgorICAgICAgICBBRERPUF9PKGMsIExPQURfQ09OU1QsIGUtPnYuTmFtZUNvbnN0YW50LnZhbHVlLCBjb25zdHMpOworICAgICAgICBicmVhazsKICAgICAvKiBUaGUgZm9sbG93aW5nIGV4cHJzIGNhbiBiZSBhc3NpZ25tZW50IHRhcmdldHMuICovCiAgICAgY2FzZSBBdHRyaWJ1dGVfa2luZDoKICAgICAgICAgaWYgKGUtPnYuQXR0cmlidXRlLmN0eCAhPSBBdWdTdG9yZSkKQEAgLTM1NDcsMTIgKzM2NTYsMTIgQEAKICAgICBQeU9iamVjdCAqbG9jOwogICAgIFB5T2JqZWN0ICp1ID0gTlVMTCwgKnYgPSBOVUxMOwogCi0gICAgbG9jID0gUHlFcnJfUHJvZ3JhbVRleHQoYy0+Y19maWxlbmFtZSwgYy0+dS0+dV9saW5lbm8pOworICAgIGxvYyA9IFB5RXJyX1Byb2dyYW1UZXh0T2JqZWN0KGMtPmNfZmlsZW5hbWUsIGMtPnUtPnVfbGluZW5vKTsKICAgICBpZiAoIWxvYykgewogICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CiAgICAgICAgIGxvYyA9IFB5X05vbmU7CiAgICAgfQotICAgIHUgPSBQeV9CdWlsZFZhbHVlKCIoT2lpTykiLCBjLT5jX2ZpbGVuYW1lX29iaiwgYy0+dS0+dV9saW5lbm8sCisgICAgdSA9IFB5X0J1aWxkVmFsdWUoIihPaWlPKSIsIGMtPmNfZmlsZW5hbWUsIGMtPnUtPnVfbGluZW5vLAogICAgICAgICAgICAgICAgICAgICAgIGMtPnUtPnVfY29sX29mZnNldCwgbG9jKTsKICAgICBpZiAoIXUpCiAgICAgICAgIGdvdG8gZXhpdDsKQEAgLTM2NjUsNyArMzc3NCw3IEBACiAgICAgY2FzZSBFeHRTbGljZV9raW5kOgogICAgICAgICBraW5kbmFtZSA9ICJleHRlbmRlZCBzbGljZSI7CiAgICAgICAgIGlmIChjdHggIT0gQXVnU3RvcmUpIHsKLSAgICAgICAgICAgIGludCBpLCBuID0gYXNkbF9zZXFfTEVOKHMtPnYuRXh0U2xpY2UuZGltcyk7CisgICAgICAgICAgICBQeV9zc2l6ZV90IGksIG4gPSBhc2RsX3NlcV9MRU4ocy0+di5FeHRTbGljZS5kaW1zKTsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKICAgICAgICAgICAgICAgICBzbGljZV90eSBzdWIgPSAoc2xpY2VfdHkpYXNkbF9zZXFfR0VUKAogICAgICAgICAgICAgICAgICAgICBzLT52LkV4dFNsaWNlLmRpbXMsIGkpOwpAQCAtMzcyNCw3ICszODMzLDcgQEAKIHN0YXRpYyBpbnQKIHN0YWNrZGVwdGhfd2FsayhzdHJ1Y3QgY29tcGlsZXIgKmMsIGJhc2ljYmxvY2sgKmIsIGludCBkZXB0aCwgaW50IG1heGRlcHRoKQogewotICAgIGludCBpLCB0YXJnZXRfZGVwdGg7CisgICAgaW50IGksIHRhcmdldF9kZXB0aCwgZWZmZWN0OwogICAgIHN0cnVjdCBpbnN0ciAqaW5zdHI7CiAgICAgaWYgKGItPmJfc2VlbiB8fCBiLT5iX3N0YXJ0ZGVwdGggPj0gZGVwdGgpCiAgICAgICAgIHJldHVybiBtYXhkZXB0aDsKQEAgLTM3MzIsNyArMzg0MSwxMyBAQAogICAgIGItPmJfc3RhcnRkZXB0aCA9IGRlcHRoOwogICAgIGZvciAoaSA9IDA7IGkgPCBiLT5iX2l1c2VkOyBpKyspIHsKICAgICAgICAgaW5zdHIgPSAmYi0+Yl9pbnN0cltpXTsKLSAgICAgICAgZGVwdGggKz0gb3Bjb2RlX3N0YWNrX2VmZmVjdChpbnN0ci0+aV9vcGNvZGUsIGluc3RyLT5pX29wYXJnKTsKKyAgICAgICAgZWZmZWN0ID0gUHlDb21waWxlX09wY29kZVN0YWNrRWZmZWN0KGluc3RyLT5pX29wY29kZSwgaW5zdHItPmlfb3BhcmcpOworICAgICAgICBpZiAoZWZmZWN0ID09IFBZX0lOVkFMSURfU1RBQ0tfRUZGRUNUKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIm9wY29kZSA9ICVkXG4iLCBpbnN0ci0+aV9vcGNvZGUpOworICAgICAgICAgICAgUHlfRmF0YWxFcnJvcigiUHlDb21waWxlX09wY29kZVN0YWNrRWZmZWN0KCkiKTsKKyAgICAgICAgfQorICAgICAgICBkZXB0aCArPSBlZmZlY3Q7CisKICAgICAgICAgaWYgKGRlcHRoID4gbWF4ZGVwdGgpCiAgICAgICAgICAgICBtYXhkZXB0aCA9IGRlcHRoOwogICAgICAgICBhc3NlcnQoZGVwdGggPj0gMCk7IC8qIGludmFsaWQgY29kZSBvciBidWcgaW4gc3RhY2tkZXB0aCgpICovCkBAIC0zNzQwLDEyICszODU1LDE2IEBACiAgICAgICAgICAgICB0YXJnZXRfZGVwdGggPSBkZXB0aDsKICAgICAgICAgICAgIGlmIChpbnN0ci0+aV9vcGNvZGUgPT0gRk9SX0lURVIpIHsKICAgICAgICAgICAgICAgICB0YXJnZXRfZGVwdGggPSBkZXB0aC0yOwotICAgICAgICAgICAgfSBlbHNlIGlmIChpbnN0ci0+aV9vcGNvZGUgPT0gU0VUVVBfRklOQUxMWSB8fAotICAgICAgICAgICAgICAgICAgICAgICBpbnN0ci0+aV9vcGNvZGUgPT0gU0VUVVBfRVhDRVBUKSB7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChpbnN0ci0+aV9vcGNvZGUgPT0gU0VUVVBfRklOQUxMWSB8fAorICAgICAgICAgICAgICAgICAgICAgaW5zdHItPmlfb3Bjb2RlID09IFNFVFVQX0VYQ0VQVCkgewogICAgICAgICAgICAgICAgIHRhcmdldF9kZXB0aCA9IGRlcHRoKzM7CiAgICAgICAgICAgICAgICAgaWYgKHRhcmdldF9kZXB0aCA+IG1heGRlcHRoKQogICAgICAgICAgICAgICAgICAgICBtYXhkZXB0aCA9IHRhcmdldF9kZXB0aDsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGluc3RyLT5pX29wY29kZSA9PSBKVU1QX0lGX1RSVUVfT1JfUE9QIHx8CisgICAgICAgICAgICAgICAgICAgICBpbnN0ci0+aV9vcGNvZGUgPT0gSlVNUF9JRl9GQUxTRV9PUl9QT1ApCisgICAgICAgICAgICAgICAgZGVwdGggPSBkZXB0aCAtIDE7CiAgICAgICAgICAgICBtYXhkZXB0aCA9IHN0YWNrZGVwdGhfd2FsayhjLCBpbnN0ci0+aV90YXJnZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRfZGVwdGgsIG1heGRlcHRoKTsKICAgICAgICAgICAgIGlmIChpbnN0ci0+aV9vcGNvZGUgPT0gSlVNUF9BQlNPTFVURSB8fApAQCAtMzc5MCw3ICszOTA5LDcgQEAKICAgICBhLT5hX2xub3RhYiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgREVGQVVMVF9MTk9UQUJfU0laRSk7CiAgICAgaWYgKCFhLT5hX2xub3RhYikKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKG5ibG9ja3MgPiBQWV9TSVpFX01BWCAvIHNpemVvZihiYXNpY2Jsb2NrICopKSB7CisgICAgaWYgKChzaXplX3QpbmJsb2NrcyA+IFBZX1NJWkVfTUFYIC8gc2l6ZW9mKGJhc2ljYmxvY2sgKikpIHsKICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQpAQCAtMzg0Myw3ICszOTYyLDcgQEAKIGFzc2VtYmxlX2xub3RhYihzdHJ1Y3QgYXNzZW1ibGVyICphLCBzdHJ1Y3QgaW5zdHIgKmkpCiB7CiAgICAgaW50IGRfYnl0ZWNvZGUsIGRfbGluZW5vOwotICAgIGludCBsZW47CisgICAgUHlfc3NpemVfdCBsZW47CiAgICAgdW5zaWduZWQgY2hhciAqbG5vdGFiOwogCiAgICAgZF9ieXRlY29kZSA9IGEtPmFfb2Zmc2V0IC0gYS0+YV9saW5lbm9fb2ZmOwpAQCAtNDAzNCw3ICs0MTUzLDcgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKLWRpY3Rfa2V5c19pbm9yZGVyKFB5T2JqZWN0ICpkaWN0LCBpbnQgb2Zmc2V0KQorZGljdF9rZXlzX2lub3JkZXIoUHlPYmplY3QgKmRpY3QsIFB5X3NzaXplX3Qgb2Zmc2V0KQogewogICAgIFB5T2JqZWN0ICp0dXBsZSwgKmssICp2OwogICAgIFB5X3NzaXplX3QgaSwgcG9zID0gMCwgc2l6ZSA9IFB5RGljdF9TaXplKGRpY3QpOwpAQCAtNDA1OSwxMCArNDE3OCwxMCBAQAogY29tcHV0ZV9jb2RlX2ZsYWdzKHN0cnVjdCBjb21waWxlciAqYykKIHsKICAgICBQeVNURW50cnlPYmplY3QgKnN0ZSA9IGMtPnUtPnVfc3RlOwotICAgIGludCBmbGFncyA9IDAsIG47Ci0gICAgaWYgKHN0ZS0+c3RlX3R5cGUgIT0gTW9kdWxlQmxvY2spCi0gICAgICAgIGZsYWdzIHw9IENPX05FV0xPQ0FMUzsKKyAgICBpbnQgZmxhZ3MgPSAwOworICAgIFB5X3NzaXplX3QgbjsKICAgICBpZiAoc3RlLT5zdGVfdHlwZSA9PSBGdW5jdGlvbkJsb2NrKSB7CisgICAgICAgIGZsYWdzIHw9IENPX05FV0xPQ0FMUzsKICAgICAgICAgaWYgKCFzdGUtPnN0ZV91bm9wdGltaXplZCkKICAgICAgICAgICAgIGZsYWdzIHw9IENPX09QVElNSVpFRDsKICAgICAgICAgaWYgKHN0ZS0+c3RlX25lc3RlZCkKQEAgLTQwODQsOSArNDIwMyw5IEBACiAgICAgaWYgKG4gPT0gMCkgewogICAgICAgICBuID0gUHlEaWN0X1NpemUoYy0+dS0+dV9jZWxsdmFycyk7CiAgICAgICAgIGlmIChuIDwgMCkKLSAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICBpZiAobiA9PSAwKSB7Ci0gICAgICAgIGZsYWdzIHw9IENPX05PRlJFRTsKKyAgICAgICAgICAgIGZsYWdzIHw9IENPX05PRlJFRTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNDEwNSw3ICs0MjI0LDEwIEBACiAgICAgUHlPYmplY3QgKmZyZWV2YXJzID0gTlVMTDsKICAgICBQeU9iamVjdCAqY2VsbHZhcnMgPSBOVUxMOwogICAgIFB5T2JqZWN0ICpieXRlY29kZSA9IE5VTEw7Ci0gICAgaW50IG5sb2NhbHMsIGZsYWdzOworICAgIFB5X3NzaXplX3QgbmxvY2FsczsKKyAgICBpbnQgbmxvY2Fsc19pbnQ7CisgICAgaW50IGZsYWdzOworICAgIGludCBhcmdjb3VudCwga3dvbmx5YXJnY291bnQ7CiAKICAgICB0bXAgPSBkaWN0X2tleXNfaW5vcmRlcihjLT51LT51X2NvbnN0cywgMCk7CiAgICAgaWYgKCF0bXApCkBAIC00MTI0LDcgKzQyNDYsMTEgQEAKICAgICBmcmVldmFycyA9IGRpY3Rfa2V5c19pbm9yZGVyKGMtPnUtPnVfZnJlZXZhcnMsIFB5VHVwbGVfU2l6ZShjZWxsdmFycykpOwogICAgIGlmICghZnJlZXZhcnMpCiAgICAgICAgIGdvdG8gZXJyb3I7CisKICAgICBubG9jYWxzID0gUHlEaWN0X1NpemUoYy0+dS0+dV92YXJuYW1lcyk7CisgICAgYXNzZXJ0KG5sb2NhbHMgPCBJTlRfTUFYKTsKKyAgICBubG9jYWxzX2ludCA9IFB5X1NBRkVfRE9XTkNBU1QobmxvY2FscywgUHlfc3NpemVfdCwgaW50KTsKKwogICAgIGZsYWdzID0gY29tcHV0ZV9jb2RlX2ZsYWdzKGMpOwogICAgIGlmIChmbGFncyA8IDApCiAgICAgICAgIGdvdG8gZXJyb3I7CkBAIC00MTM5LDExICs0MjY1LDEzIEBACiAgICAgUHlfREVDUkVGKGNvbnN0cyk7CiAgICAgY29uc3RzID0gdG1wOwogCi0gICAgY28gPSBQeUNvZGVfTmV3KGMtPnUtPnVfYXJnY291bnQsIGMtPnUtPnVfa3dvbmx5YXJnY291bnQsCi0gICAgICAgICAgICAgICAgICAgIG5sb2NhbHMsIHN0YWNrZGVwdGgoYyksIGZsYWdzLAorICAgIGFyZ2NvdW50ID0gUHlfU0FGRV9ET1dOQ0FTVChjLT51LT51X2FyZ2NvdW50LCBQeV9zc2l6ZV90LCBpbnQpOworICAgIGt3b25seWFyZ2NvdW50ID0gUHlfU0FGRV9ET1dOQ0FTVChjLT51LT51X2t3b25seWFyZ2NvdW50LCBQeV9zc2l6ZV90LCBpbnQpOworICAgIGNvID0gUHlDb2RlX05ldyhhcmdjb3VudCwga3dvbmx5YXJnY291bnQsCisgICAgICAgICAgICAgICAgICAgIG5sb2NhbHNfaW50LCBzdGFja2RlcHRoKGMpLCBmbGFncywKICAgICAgICAgICAgICAgICAgICAgYnl0ZWNvZGUsIGNvbnN0cywgbmFtZXMsIHZhcm5hbWVzLAogICAgICAgICAgICAgICAgICAgICBmcmVldmFycywgY2VsbHZhcnMsCi0gICAgICAgICAgICAgICAgICAgIGMtPmNfZmlsZW5hbWVfb2JqLCBjLT51LT51X25hbWUsCisgICAgICAgICAgICAgICAgICAgIGMtPmNfZmlsZW5hbWUsIGMtPnUtPnVfbmFtZSwKICAgICAgICAgICAgICAgICAgICAgYy0+dS0+dV9maXJzdGxpbmVubywKICAgICAgICAgICAgICAgICAgICAgYS0+YV9sbm90YWIpOwogIGVycm9yOgpAQCAtNDI1OSw0ICs0Mzg3LDMgQEAKICAgICByZXR1cm4gUHlBU1RfQ29tcGlsZUV4KG1vZCwgZmlsZW5hbWUsIGZsYWdzLCAtMSwgYXJlbmEpOwogfQogCi0KZGlmZiAtLWdpdCBhL1B5dGhvbi9jb25kdmFyLmggYi9QeXRob24vY29uZHZhci5oCmluZGV4IDE5NDc0ZWYuLmVmODE4YzQgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9jb25kdmFyLmgKKysrIGIvUHl0aG9uL2NvbmR2YXIuaApAQCAtMjQxLDcgKzI0MSw3IEBACiAgICAgICogYnV0IHdlIGFyZSBzYWZlIGJlY2F1c2Ugd2UgYXJlIHVzaW5nIGEgc2VtYXBob3JlIHdpY2ggaGFzIGFuIGludGVybmFsCiAgICAgICogY291bnQuCiAgICAgICovCi0gICAgd2FpdCA9IFdhaXRGb3JTaW5nbGVPYmplY3QoY3YtPnNlbSwgbXMpOworICAgIHdhaXQgPSBXYWl0Rm9yU2luZ2xlT2JqZWN0RXgoY3YtPnNlbSwgbXMsIEZBTFNFKTsKICAgICBQeU1VVEVYX0xPQ0soY3MpOwogICAgIGlmICh3YWl0ICE9IFdBSVRfT0JKRUNUXzApCiAgICAgICAgIC0tY3YtPndhaXRpbmc7CmRpZmYgLS1naXQgYS9QeXRob24vZHlubG9hZF9haXguYyBiL1B5dGhvbi9keW5sb2FkX2FpeC5jCmluZGV4IGY0MGEwYmUuLjVhYzMwZWQgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9keW5sb2FkX2FpeC5jCisrKyBiL1B5dGhvbi9keW5sb2FkX2FpeC5jCkBAIC0zMCwxMSArMzAsMTEgQEAKIHN0YXRpYyBpbnQKIGFpeF9nZXRvbGRtb2R1bGVzKHZvaWQgKiptb2RsaXN0cHRyKQogewotICAgIHJlZ2lzdGVyIE1vZHVsZVB0ciAgICAgICBtb2RwdHIsIHByZXZtb2RwdHI7Ci0gICAgcmVnaXN0ZXIgc3RydWN0IGxkX2luZm8gICpsZGlwdHI7Ci0gICAgcmVnaXN0ZXIgY2hhciAgICAgICAgICAgICpsZGlidWY7Ci0gICAgcmVnaXN0ZXIgaW50ICAgICAgICAgICAgIGVycmZsYWcsIGJ1ZnNpemUgPSAxMDI0OwotICAgIHJlZ2lzdGVyIHVuc2lnbmVkIGludCAgICBvZmZzZXQ7CisgICAgTW9kdWxlUHRyICAgICAgIG1vZHB0ciwgcHJldm1vZHB0cjsKKyAgICBzdHJ1Y3QgbGRfaW5mbyAgKmxkaXB0cjsKKyAgICBjaGFyICAgICAgICAgICAgKmxkaWJ1ZjsKKyAgICBpbnQgICAgICAgICAgICAgZXJyZmxhZywgYnVmc2l6ZSA9IDEwMjQ7CisgICAgdW5zaWduZWQgaW50ICAgIG9mZnNldDsKICAgICBjaGFyICpwcm9nbmFtZSA9IFB5X0dldFByb2dyYW1OYW1lKCk7CiAKICAgICAvKgpAQCAtMTA2LDcgKzEwNiw3IEBACiAgICAgY2hhciAqbWVzc2FnZVsxMDI0XSwgZXJyYnVmWzEwMjRdOwogICAgIFB5T2JqZWN0ICpwYXRobmFtZV9vYiA9IE5VTEw7CiAgICAgUHlPYmplY3QgKmVycmJ1Zl9vYiA9IE5VTEw7Ci0gICAgcmVnaXN0ZXIgaW50IGksajsKKyAgICBpbnQgaSxqOwogCiAgICAgc3RydWN0IGVycnRhYiB7CiAgICAgICAgIGludCBlcnJObzsKZGlmZiAtLWdpdCBhL1B5dGhvbi9keW5sb2FkX29zMi5jIGIvUHl0aG9uL2R5bmxvYWRfb3MyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlMWI5MDcuLjAwMDAwMDAKLS0tIGEvUHl0aG9uL2R5bmxvYWRfb3MyLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0KLS8qIFN1cHBvcnQgZm9yIGR5bmFtaWMgbG9hZGluZyBvZiBleHRlbnNpb24gbW9kdWxlcyAqLwotCi0jZGVmaW5lICBJTkNMX0RPU0VSUk9SUwotI2RlZmluZSAgSU5DTF9ET1NNT0RVTEVNR1IKLSNpbmNsdWRlIDxvczIuaD4KLQotI2luY2x1ZGUgIlB5dGhvbi5oIgotI2luY2x1ZGUgImltcG9ydGRsLmgiCi0KLQotY29uc3QgY2hhciAqX1B5SW1wb3J0X0R5bkxvYWRGaWxldGFiW10gPSB7Ii5weWQiLCAiLmRsbCIsIE5VTEx9OwotCi1kbF9mdW5jcHRyIF9QeUltcG9ydF9HZXREeW5Mb2FkRnVuYyhjb25zdCBjaGFyICpzaG9ydG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwYXRobmFtZSwgRklMRSAqZnApCi17Ci0gICAgZGxfZnVuY3B0ciBwOwotICAgIEFQSVJFVCAgcmM7Ci0gICAgSE1PRFVMRSBoRExMOwotICAgIGNoYXIgZmFpbHJlYXNvblsyNTZdOwotICAgIGNoYXIgZnVuY25hbWVbMjU4XTsKLQotICAgIHJjID0gRG9zTG9hZE1vZHVsZShmYWlscmVhc29uLAotICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoZmFpbHJlYXNvbiksCi0gICAgICAgICAgICAgICAgICAgICAgIHBhdGhuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAmaERMTCk7Ci0KLSAgICBpZiAocmMgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgY2hhciBlcnJCdWZbMjU2XTsKLSAgICAgICAgUHlPU19zbnByaW50ZihlcnJCdWYsIHNpemVvZihlcnJCdWYpLAotICAgICAgICAgICAgICAgICAgICAgICJETEwgbG9hZCBmYWlsZWQsIHJjID0gJWQ6ICUuMjAwcyIsCi0gICAgICAgICAgICAgICAgICAgICAgcmMsIGZhaWxyZWFzb24pOwotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfSW1wb3J0RXJyb3IsIGVyckJ1Zik7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIFB5T1Nfc25wcmludGYoZnVuY25hbWUsIHNpemVvZihmdW5jbmFtZSksICJQeUluaXRfJS4yMDBzIiwgc2hvcnRuYW1lKTsKLSAgICByYyA9IERvc1F1ZXJ5UHJvY0FkZHIoaERMTCwgMEwsIGZ1bmNuYW1lLCAmcCk7Ci0gICAgaWYgKHJjICE9IE5PX0VSUk9SKQotICAgICAgICBwID0gTlVMTDsgLyogU2lnbmlmeSBGYWlsdXJlIHRvIEFjcXVpcmUgRW50cnlwb2ludCAqLwotICAgIHJldHVybiBwOwotfQpkaWZmIC0tZ2l0IGEvUHl0aG9uL2R5bmxvYWRfc2hsaWIuYyBiL1B5dGhvbi9keW5sb2FkX3NobGliLmMKaW5kZXggNzU1NDRlZC4uNWNkMWVmZCAxMDA2NDQKLS0tIGEvUHl0aG9uL2R5bmxvYWRfc2hsaWIuYworKysgYi9QeXRob24vZHlubG9hZF9zaGxpYi5jCkBAIC0xOCwxMCArMTgsNiBAQAogCiAjaWZkZWYgSEFWRV9ETEZDTl9ICiAjaW5jbHVkZSA8ZGxmY24uaD4KLSNlbHNlCi0jaWYgZGVmaW5lZChQWU9TX09TMikgJiYgZGVmaW5lZChQWUNDX0dDQykKLSNpbmNsdWRlICJkbGZjbi5oIgotI2VuZGlmCiAjZW5kaWYKIAogI2lmIChkZWZpbmVkKF9fT3BlbkJTRF9fKSB8fCBkZWZpbmVkKF9fTmV0QlNEX18pKSAmJiAhZGVmaW5lZChfX0VMRl9fKQpAQCAtNDAsMzAgKzM2LDE2IEBACiAjaWZkZWYgX19DWUdXSU5fXwogICAgICIuZGxsIiwKICNlbHNlICAvKiAhX19DWUdXSU5fXyAqLwotI2lmIGRlZmluZWQoUFlPU19PUzIpICYmIGRlZmluZWQoUFlDQ19HQ0MpCi0gICAgIi5weWQiLAotICAgICIuZGxsIiwKLSNlbHNlICAvKiAhKGRlZmluZWQoUFlPU19PUzIpICYmIGRlZmluZWQoUFlDQ19HQ0MpKSAqLwotI2lmZGVmIF9fVk1TCi0gICAgIi5leGUiLAotICAgICIuRVhFIiwKLSNlbHNlICAvKiAhX19WTVMgKi8KICAgICAiLiIgU09BQkkgIi5zbyIsCiAgICAgIi5hYmkiIFBZVEhPTl9BQklfU1RSSU5HICIuc28iLAogICAgICIuc28iLAotI2VuZGlmICAvKiBfX1ZNUyAqLwotI2VuZGlmICAvKiBkZWZpbmVkKFBZT1NfT1MyKSAmJiBkZWZpbmVkKFBZQ0NfR0NDKSAqLwogI2VuZGlmICAvKiBfX0NZR1dJTl9fICovCiAgICAgTlVMTCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgewogICAgIGRldl90IGRldjsKLSNpZmRlZiBfX1ZNUwotICAgIGlub190IGlub1szXTsKLSNlbHNlCiAgICAgaW5vX3QgaW5vOwotI2VuZGlmCiAgICAgdm9pZCAqaGFuZGxlOwogfSBoYW5kbGVzWzEyOF07CiBzdGF0aWMgaW50IG5oYW5kbGVzID0gMDsKQEAgLTEwNCw0NyArODYsMzkgQEAKICAgICAgICAgfQogICAgICAgICBpZiAobmhhbmRsZXMgPCAxMjgpIHsKICAgICAgICAgICAgIGhhbmRsZXNbbmhhbmRsZXNdLmRldiA9IHN0YXRiLnN0X2RldjsKLSNpZmRlZiBfX1ZNUwotICAgICAgICAgICAgaGFuZGxlc1tuaGFuZGxlc10uaW5vWzBdID0gc3RhdGIuc3RfaW5vWzBdOwotICAgICAgICAgICAgaGFuZGxlc1tuaGFuZGxlc10uaW5vWzFdID0gc3RhdGIuc3RfaW5vWzFdOwotICAgICAgICAgICAgaGFuZGxlc1tuaGFuZGxlc10uaW5vWzJdID0gc3RhdGIuc3RfaW5vWzJdOwotI2Vsc2UKICAgICAgICAgICAgIGhhbmRsZXNbbmhhbmRsZXNdLmlubyA9IHN0YXRiLnN0X2lubzsKLSNlbmRpZgogICAgICAgICB9CiAgICAgfQogCi0jaWYgIShkZWZpbmVkKFBZT1NfT1MyKSAmJiBkZWZpbmVkKFBZQ0NfR0NDKSkKICAgICBkbG9wZW5mbGFncyA9IFB5VGhyZWFkU3RhdGVfR0VUKCktPmludGVycC0+ZGxvcGVuZmxhZ3M7Ci0jZW5kaWYKLQotI2lmZGVmIF9fVk1TCi0gICAgLyogVk1TIGN1cnJlbnRseSBkb24ndCBhbGxvdyBhIHBhdGhuYW1lLCB1c2UgYSBsb2dpY2FsIG5hbWUgaW5zdGVhZCAqLwotICAgIC8qIENvbmNhdGVuYXRlICdweXRob25fbW9kdWxlXycgYW5kIHNob3J0bmFtZSAqLwotICAgIC8qIHNvICJpbXBvcnQgdm1zLmJhciIgd2lsbCB1c2UgdGhlIGxvZ2ljYWwgcHl0aG9uX21vZHVsZV9iYXIgKi8KLSAgICAvKiBBcyBDIG1vZHVsZSB1c2Ugb25seSBvbmUgbmFtZSBzcGFjZSB0aGlzIGlzIHByb2JhYmx5IG5vdCBhICovCi0gICAgLyogaW1wb3J0YW50IGxpbWl0YXRpb24gKi8KLSAgICBQeU9TX3NucHJpbnRmKHBhdGhidWYsIHNpemVvZihwYXRoYnVmKSwgInB5dGhvbl9tb2R1bGVfJS0uMjAwcyIsCi0gICAgICAgICAgICAgICAgICBzaG9ydG5hbWUpOwotICAgIHBhdGhuYW1lID0gcGF0aGJ1ZjsKLSNlbmRpZgogCiAgICAgaGFuZGxlID0gZGxvcGVuKHBhdGhuYW1lLCBkbG9wZW5mbGFncyk7CiAKICAgICBpZiAoaGFuZGxlID09IE5VTEwpIHsKLSAgICAgICAgUHlPYmplY3QgKm1vZF9uYW1lID0gTlVMTDsKLSAgICAgICAgUHlPYmplY3QgKnBhdGggPSBOVUxMOwotICAgICAgICBQeU9iamVjdCAqZXJyb3Jfb2IgPSBOVUxMOworICAgICAgICBQeU9iamVjdCAqbW9kX25hbWU7CisgICAgICAgIFB5T2JqZWN0ICpwYXRoOworICAgICAgICBQeU9iamVjdCAqZXJyb3Jfb2I7CiAgICAgICAgIGNvbnN0IGNoYXIgKmVycm9yID0gZGxlcnJvcigpOwogICAgICAgICBpZiAoZXJyb3IgPT0gTlVMTCkKICAgICAgICAgICAgIGVycm9yID0gInVua25vd24gZGxvcGVuKCkgZXJyb3IiOwogICAgICAgICBlcnJvcl9vYiA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKGVycm9yKTsKLSAgICAgICAgcGF0aCA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKHBhdGhuYW1lKTsKKyAgICAgICAgaWYgKGVycm9yX29iID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgbW9kX25hbWUgPSBQeVVuaWNvZGVfRnJvbVN0cmluZyhzaG9ydG5hbWUpOworICAgICAgICBpZiAobW9kX25hbWUgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlfREVDUkVGKGVycm9yX29iKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIHBhdGggPSBQeVVuaWNvZGVfRnJvbVN0cmluZyhwYXRobmFtZSk7CisgICAgICAgIGlmIChwYXRoID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihlcnJvcl9vYik7CisgICAgICAgICAgICBQeV9ERUNSRUYobW9kX25hbWUpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KICAgICAgICAgUHlFcnJfU2V0SW1wb3J0RXJyb3IoZXJyb3Jfb2IsIG1vZF9uYW1lLCBwYXRoKTsKLSAgICAgICAgUHlfWERFQ1JFRihlcnJvcl9vYik7Ci0gICAgICAgIFB5X1hERUNSRUYocGF0aCk7Ci0gICAgICAgIFB5X1hERUNSRUYobW9kX25hbWUpOworICAgICAgICBQeV9ERUNSRUYoZXJyb3Jfb2IpOworICAgICAgICBQeV9ERUNSRUYobW9kX25hbWUpOworICAgICAgICBQeV9ERUNSRUYocGF0aCk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBpZiAoZnAgIT0gTlVMTCAmJiBuaGFuZGxlcyA8IDEyOCkKZGlmZiAtLWdpdCBhL1B5dGhvbi9lcnJvcnMuYyBiL1B5dGhvbi9lcnJvcnMuYwppbmRleCA2MjZiMTZlLi5iMGFkOWFhIDEwMDY0NAotLS0gYS9QeXRob24vZXJyb3JzLmMKKysrIGIvUHl0aG9uL2Vycm9ycy5jCkBAIC0yMCw2ICsyMCw5IEBACiBleHRlcm4gIkMiIHsKICNlbmRpZgogCitfUHlfSURFTlRJRklFUihidWlsdGlucyk7CitfUHlfSURFTlRJRklFUihzdGRlcnIpOworCiAKIHZvaWQKIFB5RXJyX1Jlc3RvcmUoUHlPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICp2YWx1ZSwgUHlPYmplY3QgKnRyYWNlYmFjaykKQEAgLTcxLDYgKzc0LDExIEBACiAgICAgICAgIGlmICh2YWx1ZSA9PSBOVUxMIHx8ICFQeUV4Y2VwdGlvbkluc3RhbmNlX0NoZWNrKHZhbHVlKSkgewogICAgICAgICAgICAgLyogV2UgbXVzdCBub3JtYWxpemUgdGhlIHZhbHVlIHJpZ2h0IG5vdyAqLwogICAgICAgICAgICAgUHlPYmplY3QgKmFyZ3MsICpmaXhlZF92YWx1ZTsKKyNpZmRlZiBQeV9ERUJVRworICAgICAgICAgICAgLyogaW4gZGVidWcgbW9kZSwgUHlFdmFsX0V2YWxGcmFtZUV4KCkgZmFpbHMgd2l0aCBhbiBhc3NlcnRpb24KKyAgICAgICAgICAgICAgIGVycm9yIGlmIGFuIGV4Y2VwdGlvbiBpcyBzZXQgd2hlbiBpdCBpcyBjYWxsZWQgKi8KKyAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CisjZW5kaWYKICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBOVUxMIHx8IHZhbHVlID09IFB5X05vbmUpCiAgICAgICAgICAgICAgICAgYXJncyA9IFB5VHVwbGVfTmV3KDApOwogICAgICAgICAgICAgZWxzZSBpZiAoUHlUdXBsZV9DaGVjayh2YWx1ZSkpIHsKQEAgLTExMiw2ICsxMjAsMjAgQEAKICAgICBQeUVycl9SZXN0b3JlKGV4Y2VwdGlvbiwgdmFsdWUsIHRiKTsKIH0KIAorLyogU2V0IGEga2V5IGVycm9yIHdpdGggdGhlIHNwZWNpZmllZCBhcmd1bWVudCwgd3JhcHBpbmcgaXQgaW4gYQorICogdHVwbGUgYXV0b21hdGljYWxseSBzbyB0aGF0IHR1cGxlIGtleXMgYXJlIG5vdCB1bnBhY2tlZCBhcyB0aGUKKyAqIGV4Y2VwdGlvbiBhcmd1bWVudHMuICovCit2b2lkCitfUHlFcnJfU2V0S2V5RXJyb3IoUHlPYmplY3QgKmFyZykKK3sKKyAgICBQeU9iamVjdCAqdHVwOworICAgIHR1cCA9IFB5VHVwbGVfUGFjaygxLCBhcmcpOworICAgIGlmICghdHVwKQorICAgICAgICByZXR1cm47IC8qIGNhbGxlciB3aWxsIGV4cGVjdCBlcnJvciB0byBiZSBzZXQgYW55d2F5ICovCisgICAgUHlFcnJfU2V0T2JqZWN0KFB5RXhjX0tleUVycm9yLCB0dXApOworICAgIFB5X0RFQ1JFRih0dXApOworfQorCiB2b2lkCiBQeUVycl9TZXROb25lKFB5T2JqZWN0ICpleGNlcHRpb24pCiB7CkBAIC0yMjcsMTIgKzI0OSwyMSBAQAogICAgICAgIHZhbHVlIHdpbGwgYmUgYW4gaW5zdGFuY2UuCiAgICAgKi8KICAgICBpZiAoUHlFeGNlcHRpb25DbGFzc19DaGVjayh0eXBlKSkgeworICAgICAgICBpbnQgaXNfc3ViY2xhc3M7CisgICAgICAgIGlmIChpbmNsYXNzKSB7CisgICAgICAgICAgICBpc19zdWJjbGFzcyA9IFB5T2JqZWN0X0lzU3ViY2xhc3MoaW5jbGFzcywgdHlwZSk7CisgICAgICAgICAgICBpZiAoaXNfc3ViY2xhc3MgPCAwKQorICAgICAgICAgICAgICAgIGdvdG8gZmluYWxseTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgICBpc19zdWJjbGFzcyA9IDA7CisKICAgICAgICAgLyogaWYgdGhlIHZhbHVlIHdhcyBub3QgYW4gaW5zdGFuY2UsIG9yIGlzIG5vdCBhbiBpbnN0YW5jZQogICAgICAgICAgICB3aG9zZSBjbGFzcyBpcyAob3IgaXMgZGVyaXZlZCBmcm9tKSB0eXBlLCB0aGVuIHVzZSB0aGUKICAgICAgICAgICAgdmFsdWUgYXMgYW4gYXJndW1lbnQgdG8gaW5zdGFudGlhdGlvbiBvZiB0aGUgdHlwZQogICAgICAgICAgICBjbGFzcy4KICAgICAgICAgKi8KLSAgICAgICAgaWYgKCFpbmNsYXNzIHx8ICFQeU9iamVjdF9Jc1N1YmNsYXNzKGluY2xhc3MsIHR5cGUpKSB7CisgICAgICAgIGlmICghaW5jbGFzcyB8fCAhaXNfc3ViY2xhc3MpIHsKICAgICAgICAgICAgIFB5T2JqZWN0ICphcmdzLCAqcmVzOwogCiAgICAgICAgICAgICBpZiAodmFsdWUgPT0gUHlfTm9uZSkKQEAgLTM1Myw2ICszODQsMzAgQEAKICAgICBQeV9YREVDUkVGKG9sZHRyYWNlYmFjayk7CiB9CiAKKy8qIExpa2UgUHlFcnJfUmVzdG9yZSgpLCBidXQgaWYgYW4gZXhjZXB0aW9uIGlzIGFscmVhZHkgc2V0LAorICAgc2V0IHRoZSBjb250ZXh0IGFzc29jaWF0ZWQgd2l0aCBpdC4KKyAqLwordm9pZAorX1B5RXJyX0NoYWluRXhjZXB0aW9ucyhQeU9iamVjdCAqZXhjLCBQeU9iamVjdCAqdmFsLCBQeU9iamVjdCAqdGIpCit7CisgICAgaWYgKGV4YyA9PSBOVUxMKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICBQeU9iamVjdCAqZXhjMiwgKnZhbDIsICp0YjI7CisgICAgICAgIFB5RXJyX0ZldGNoKCZleGMyLCAmdmFsMiwgJnRiMik7CisgICAgICAgIFB5RXJyX05vcm1hbGl6ZUV4Y2VwdGlvbigmZXhjLCAmdmFsLCAmdGIpOworICAgICAgICBQeV9ERUNSRUYoZXhjKTsKKyAgICAgICAgUHlfWERFQ1JFRih0Yik7CisgICAgICAgIFB5RXJyX05vcm1hbGl6ZUV4Y2VwdGlvbigmZXhjMiwgJnZhbDIsICZ0YjIpOworICAgICAgICBQeUV4Y2VwdGlvbl9TZXRDb250ZXh0KHZhbDIsIHZhbCk7CisgICAgICAgIFB5RXJyX1Jlc3RvcmUoZXhjMiwgdmFsMiwgdGIyKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIFB5RXJyX1Jlc3RvcmUoZXhjLCB2YWwsIHRiKTsKKyAgICB9Cit9CisKIC8qIENvbnZlbmllbmNlIGZ1bmN0aW9ucyB0byBzZXQgYSB0eXBlIGVycm9yIGV4Y2VwdGlvbiBhbmQgcmV0dXJuIDAgKi8KIAogaW50CkBAIC0zNjYsNiArNDIxLDEyIEBACiBQeU9iamVjdCAqCiBQeUVycl9Ob01lbW9yeSh2b2lkKQogeworICAgIGlmIChQeV9UWVBFKFB5RXhjX01lbW9yeUVycm9yKSA9PSBOVUxMKSB7CisgICAgICAgIC8qIFB5RXJyX05vTWVtb3J5KCkgaGFzIGJlZW4gY2FsbGVkIGJlZm9yZSBQeUV4Y19NZW1vcnlFcnJvciBoYXMgYmVlbgorICAgICAgICAgICBpbml0aWFsaXplZCBieSBfUHlFeGNfSW5pdCgpICovCisgICAgICAgIFB5X0ZhdGFsRXJyb3IoIk91dCBvZiBtZW1vcnkgYW5kIFB5RXhjX01lbW9yeUVycm9yIGlzIG5vdCAiCisgICAgICAgICAgICAgICAgICAgICAgImluaXRpYWxpemVkIHlldCIpOworICAgIH0KICAgICBQeUVycl9TZXROb25lKFB5RXhjX01lbW9yeUVycm9yKTsKICAgICByZXR1cm4gTlVMTDsKIH0KQEAgLTM3Myw2ICs0MzQsMTIgQEAKIFB5T2JqZWN0ICoKIFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZU9iamVjdChQeU9iamVjdCAqZXhjLCBQeU9iamVjdCAqZmlsZW5hbWVPYmplY3QpCiB7CisgICAgcmV0dXJuIFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZU9iamVjdHMoZXhjLCBmaWxlbmFtZU9iamVjdCwgTlVMTCk7Cit9CisKK1B5T2JqZWN0ICoKK1B5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZU9iamVjdHMoUHlPYmplY3QgKmV4YywgUHlPYmplY3QgKmZpbGVuYW1lT2JqZWN0LCBQeU9iamVjdCAqZmlsZW5hbWVPYmplY3QyKQorewogICAgIFB5T2JqZWN0ICptZXNzYWdlOwogICAgIFB5T2JqZWN0ICp2LCAqYXJnczsKICAgICBpbnQgaSA9IGVycm5vOwpAQCAtNDI0LDcgKzQ5MSw3IEBACiAgICAgICAgICAgICAgICAgLyogT25seSBldmVyIHNlZW4gdGhpcyBpbiBvdXQtb2YtbWVtCiAgICAgICAgICAgICAgICAgICAgc2l0dWF0aW9ucyAqLwogICAgICAgICAgICAgICAgIHNfYnVmID0gTlVMTDsKLSAgICAgICAgICAgICAgICBtZXNzYWdlID0gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIldpbmRvd3MgRXJyb3IgMHglWCIsIGkpOworICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiV2luZG93cyBFcnJvciAweCV4IiwgaSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIC8qIHJlbW92ZSB0cmFpbGluZyBjci9sZiBhbmQgZG90cyAqLwogICAgICAgICAgICAgICAgIHdoaWxlIChsZW4gPiAwICYmIChzX2J1ZltsZW4tMV0gPD0gTCcgJyB8fCBzX2J1ZltsZW4tMV0gPT0gTCcuJykpCkBAIC00NDMsMTAgKzUxMCwxNSBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBpZiAoZmlsZW5hbWVPYmplY3QgIT0gTlVMTCkKLSAgICAgICAgYXJncyA9IFB5X0J1aWxkVmFsdWUoIihpT08pIiwgaSwgbWVzc2FnZSwgZmlsZW5hbWVPYmplY3QpOwotICAgIGVsc2UKKyAgICBpZiAoZmlsZW5hbWVPYmplY3QgIT0gTlVMTCkgeworICAgICAgICBpZiAoZmlsZW5hbWVPYmplY3QyICE9IE5VTEwpCisgICAgICAgICAgICBhcmdzID0gUHlfQnVpbGRWYWx1ZSgiKGlPT2lPKSIsIGksIG1lc3NhZ2UsIGZpbGVuYW1lT2JqZWN0LCAwLCBmaWxlbmFtZU9iamVjdDIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBhcmdzID0gUHlfQnVpbGRWYWx1ZSgiKGlPTykiLCBpLCBtZXNzYWdlLCBmaWxlbmFtZU9iamVjdCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYXNzZXJ0KGZpbGVuYW1lT2JqZWN0MiA9PSBOVUxMKTsKICAgICAgICAgYXJncyA9IFB5X0J1aWxkVmFsdWUoIihpTykiLCBpLCBtZXNzYWdlKTsKKyAgICB9CiAgICAgUHlfREVDUkVGKG1lc3NhZ2UpOwogCiAgICAgaWYgKGFyZ3MgIT0gTlVMTCkgewpAQCAtNDYzLDEyICs1MzUsMTEgQEAKICAgICByZXR1cm4gTlVMTDsKIH0KIAotCiBQeU9iamVjdCAqCiBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWUoUHlPYmplY3QgKmV4YywgY29uc3QgY2hhciAqZmlsZW5hbWUpCiB7CiAgICAgUHlPYmplY3QgKm5hbWUgPSBmaWxlbmFtZSA/IFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQoZmlsZW5hbWUpIDogTlVMTDsKLSAgICBQeU9iamVjdCAqcmVzdWx0ID0gUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lT2JqZWN0KGV4YywgbmFtZSk7CisgICAgUHlPYmplY3QgKnJlc3VsdCA9IFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZU9iamVjdHMoZXhjLCBuYW1lLCBOVUxMKTsKICAgICBQeV9YREVDUkVGKG5hbWUpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC00ODAsNyArNTUxLDcgQEAKICAgICBQeU9iamVjdCAqbmFtZSA9IGZpbGVuYW1lID8KICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9Gcm9tVW5pY29kZShmaWxlbmFtZSwgd2NzbGVuKGZpbGVuYW1lKSkgOgogICAgICAgICAgICAgIE5VTEw7Ci0gICAgUHlPYmplY3QgKnJlc3VsdCA9IFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZU9iamVjdChleGMsIG5hbWUpOworICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWVPYmplY3RzKGV4YywgbmFtZSwgTlVMTCk7CiAgICAgUHlfWERFQ1JFRihuYW1lKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtNDg5LDcgKzU2MCw3IEBACiBQeU9iamVjdCAqCiBQeUVycl9TZXRGcm9tRXJybm8oUHlPYmplY3QgKmV4YykKIHsKLSAgICByZXR1cm4gUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lT2JqZWN0KGV4YywgTlVMTCk7CisgICAgcmV0dXJuIFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZU9iamVjdHMoZXhjLCBOVUxMLCBOVUxMKTsKIH0KIAogI2lmZGVmIE1TX1dJTkRPV1MKQEAgLTQ5OSw2ICs1NzAsMTYgQEAKICAgICBpbnQgaWVyciwKICAgICBQeU9iamVjdCAqZmlsZW5hbWVPYmplY3QpCiB7CisgICAgcmV0dXJuIFB5RXJyX1NldEV4Y0Zyb21XaW5kb3dzRXJyV2l0aEZpbGVuYW1lT2JqZWN0cyhleGMsIGllcnIsCisgICAgICAgIGZpbGVuYW1lT2JqZWN0LCBOVUxMKTsKK30KKworUHlPYmplY3QgKlB5RXJyX1NldEV4Y0Zyb21XaW5kb3dzRXJyV2l0aEZpbGVuYW1lT2JqZWN0cygKKyAgICBQeU9iamVjdCAqZXhjLAorICAgIGludCBpZXJyLAorICAgIFB5T2JqZWN0ICpmaWxlbmFtZU9iamVjdCwKKyAgICBQeU9iamVjdCAqZmlsZW5hbWVPYmplY3QyKQorewogICAgIGludCBsZW47CiAgICAgV0NIQVIgKnNfYnVmID0gTlVMTDsgLyogRnJlZSB2aWEgTG9jYWxGcmVlICovCiAgICAgUHlPYmplY3QgKm1lc3NhZ2U7CkBAIC01MTksNyArNjAwLDcgQEAKICAgICAgICAgTlVMTCk7ICAgICAgICAgIC8qIG5vIGFyZ3MgKi8KICAgICBpZiAobGVuPT0wKSB7CiAgICAgICAgIC8qIE9ubHkgc2VlbiB0aGlzIGluIG91dCBvZiBtZW0gc2l0dWF0aW9ucyAqLwotICAgICAgICBtZXNzYWdlID0gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIldpbmRvd3MgRXJyb3IgMHglWCIsIGVycik7CisgICAgICAgIG1lc3NhZ2UgPSBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiV2luZG93cyBFcnJvciAweCV4IiwgZXJyKTsKICAgICAgICAgc19idWYgPSBOVUxMOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8qIHJlbW92ZSB0cmFpbGluZyBjci9sZiBhbmQgZG90cyAqLwpAQCAtNTM0LDExICs2MTUsMTUgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgaWYgKGZpbGVuYW1lT2JqZWN0ID09IE5VTEwpCi0gICAgICAgIGZpbGVuYW1lT2JqZWN0ID0gUHlfTm9uZTsKLSAgICAvKiBUaGlzIGlzIHRoZSBjb25zdHJ1Y3RvciBzaWduYXR1cmUgZm9yIHBhc3NpbmcgYSBXaW5kb3dzIGVycm9yIGNvZGUuCisgICAgaWYgKGZpbGVuYW1lT2JqZWN0ID09IE5VTEwpIHsKKyAgICAgICAgYXNzZXJ0KGZpbGVuYW1lT2JqZWN0MiA9PSBOVUxMKTsKKyAgICAgICAgZmlsZW5hbWVPYmplY3QgPSBmaWxlbmFtZU9iamVjdDIgPSBQeV9Ob25lOworICAgIH0KKyAgICBlbHNlIGlmIChmaWxlbmFtZU9iamVjdDIgPT0gTlVMTCkKKyAgICAgICAgZmlsZW5hbWVPYmplY3QyID0gUHlfTm9uZTsKKyAgICAvKiBUaGlzIGlzIHRoZSBjb25zdHJ1Y3RvciBzaWduYXR1cmUgZm9yIE9TRXJyb3IuCiAgICAgICAgVGhlIFBPU0lYIHRyYW5zbGF0aW9uIHdpbGwgYmUgZmlndXJlZCBvdXQgYnkgdGhlIGNvbnN0cnVjdG9yLiAqLwotICAgIGFyZ3MgPSBQeV9CdWlsZFZhbHVlKCIoaU9PaSkiLCAwLCBtZXNzYWdlLCBmaWxlbmFtZU9iamVjdCwgZXJyKTsKKyAgICBhcmdzID0gUHlfQnVpbGRWYWx1ZSgiKGlPT2lPKSIsIDAsIG1lc3NhZ2UsIGZpbGVuYW1lT2JqZWN0LCBlcnIsIGZpbGVuYW1lT2JqZWN0Mik7CiAgICAgUHlfREVDUkVGKG1lc3NhZ2UpOwogCiAgICAgaWYgKGFyZ3MgIT0gTlVMTCkgewpAQCAtNTU5LDkgKzY0NCwxMCBAQAogICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQogewogICAgIFB5T2JqZWN0ICpuYW1lID0gZmlsZW5hbWUgPyBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0KGZpbGVuYW1lKSA6IE5VTEw7Ci0gICAgUHlPYmplY3QgKnJldCA9IFB5RXJyX1NldEV4Y0Zyb21XaW5kb3dzRXJyV2l0aEZpbGVuYW1lT2JqZWN0KGV4YywKKyAgICBQeU9iamVjdCAqcmV0ID0gUHlFcnJfU2V0RXhjRnJvbVdpbmRvd3NFcnJXaXRoRmlsZW5hbWVPYmplY3RzKGV4YywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWVyciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwogICAgIFB5X1hERUNSRUYobmFtZSk7CiAgICAgcmV0dXJuIHJldDsKIH0KQEAgLTU3NCw5ICs2NjAsMTAgQEAKICAgICBQeU9iamVjdCAqbmFtZSA9IGZpbGVuYW1lID8KICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9Gcm9tVW5pY29kZShmaWxlbmFtZSwgd2NzbGVuKGZpbGVuYW1lKSkgOgogICAgICAgICAgICAgIE5VTEw7Ci0gICAgUHlPYmplY3QgKnJldCA9IFB5RXJyX1NldEV4Y0Zyb21XaW5kb3dzRXJyV2l0aEZpbGVuYW1lT2JqZWN0KGV4YywKKyAgICBQeU9iamVjdCAqcmV0ID0gUHlFcnJfU2V0RXhjRnJvbVdpbmRvd3NFcnJXaXRoRmlsZW5hbWVPYmplY3RzKGV4YywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWVyciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwogICAgIFB5X1hERUNSRUYobmFtZSk7CiAgICAgcmV0dXJuIHJldDsKIH0KQEAgLTU4OCwxNyArNjc1LDE4IEBACiAKIFB5T2JqZWN0ICpQeUVycl9TZXRGcm9tV2luZG93c0VycihpbnQgaWVycikKIHsKLSAgICByZXR1cm4gUHlFcnJfU2V0RXhjRnJvbVdpbmRvd3NFcnJXaXRoRmlsZW5hbWUoUHlFeGNfV2luZG93c0Vycm9yLAorICAgIHJldHVybiBQeUVycl9TZXRFeGNGcm9tV2luZG93c0VycldpdGhGaWxlbmFtZShQeUV4Y19PU0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZXJyLCBOVUxMKTsKIH0KKwogUHlPYmplY3QgKlB5RXJyX1NldEZyb21XaW5kb3dzRXJyV2l0aEZpbGVuYW1lKAogICAgIGludCBpZXJyLAogICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQogewogICAgIFB5T2JqZWN0ICpuYW1lID0gZmlsZW5hbWUgPyBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0KGZpbGVuYW1lKSA6IE5VTEw7Ci0gICAgUHlPYmplY3QgKnJlc3VsdCA9IFB5RXJyX1NldEV4Y0Zyb21XaW5kb3dzRXJyV2l0aEZpbGVuYW1lT2JqZWN0KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUV4Y19XaW5kb3dzRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGllcnIsIG5hbWUpOworICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBQeUVycl9TZXRFeGNGcm9tV2luZG93c0VycldpdGhGaWxlbmFtZU9iamVjdHMoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5RXhjX09TRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGllcnIsIG5hbWUsIE5VTEwpOwogICAgIFB5X1hERUNSRUYobmFtZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTYxMCw5ICs2OTgsOSBAQAogICAgIFB5T2JqZWN0ICpuYW1lID0gZmlsZW5hbWUgPwogICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0Zyb21Vbmljb2RlKGZpbGVuYW1lLCB3Y3NsZW4oZmlsZW5hbWUpKSA6CiAgICAgICAgICAgICAgTlVMTDsKLSAgICBQeU9iamVjdCAqcmVzdWx0ID0gUHlFcnJfU2V0RXhjRnJvbVdpbmRvd3NFcnJXaXRoRmlsZW5hbWVPYmplY3QoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5RXhjX1dpbmRvd3NFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWVyciwgbmFtZSk7CisgICAgUHlPYmplY3QgKnJlc3VsdCA9IFB5RXJyX1NldEV4Y0Zyb21XaW5kb3dzRXJyV2l0aEZpbGVuYW1lT2JqZWN0cygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlFeGNfT1NFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWVyciwgbmFtZSwgTlVMTCk7CiAgICAgUHlfWERFQ1JFRihuYW1lKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtNjQ2LDggKzczNCwxMSBAQAogCiAgICAgUHlfSU5DUkVGKG1zZyk7CiAgICAgUHlUdXBsZV9TRVRfSVRFTShhcmdzLCAwLCBtc2cpOwotICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKGt3YXJncywgIm5hbWUiLCBuYW1lKTsKLSAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhrd2FyZ3MsICJwYXRoIiwgcGF0aCk7CisKKyAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoa3dhcmdzLCAibmFtZSIsIG5hbWUpIDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGt3YXJncywgInBhdGgiLCBwYXRoKSA8IDApCisgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgZXJyb3IgPSBQeU9iamVjdF9DYWxsKFB5RXhjX0ltcG9ydEVycm9yLCBhcmdzLCBrd2FyZ3MpOwogICAgIGlmIChlcnJvciAhPSBOVUxMKSB7CkBAIC02NzUsNiArNzY2LDcgQEAKIHZvaWQKIFB5RXJyX0JhZEludGVybmFsQ2FsbCh2b2lkKQogeworICAgIGFzc2VydCgwICYmICJiYWQgYXJndW1lbnQgdG8gaW50ZXJuYWwgZnVuY3Rpb24iKTsKICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfU3lzdGVtRXJyb3IsCiAgICAgICAgICAgICAgICAgICJiYWQgYXJndW1lbnQgdG8gaW50ZXJuYWwgZnVuY3Rpb24iKTsKIH0KQEAgLTY5NCw2ICs3ODYsMTIgQEAKICAgICB2YV9zdGFydCh2YXJncyk7CiAjZW5kaWYKIAorI2lmZGVmIFB5X0RFQlVHCisgICAgLyogaW4gZGVidWcgbW9kZSwgUHlFdmFsX0V2YWxGcmFtZUV4KCkgZmFpbHMgd2l0aCBhbiBhc3NlcnRpb24gZXJyb3IKKyAgICAgICBpZiBhbiBleGNlcHRpb24gaXMgc2V0IHdoZW4gaXQgaXMgY2FsbGVkICovCisgICAgUHlFcnJfQ2xlYXIoKTsKKyNlbmRpZgorCiAgICAgc3RyaW5nID0gUHlVbmljb2RlX0Zyb21Gb3JtYXRWKGZvcm1hdCwgdmFyZ3MpOwogICAgIFB5RXJyX1NldE9iamVjdChleGNlcHRpb24sIHN0cmluZyk7CiAgICAgUHlfWERFQ1JFRihzdHJpbmcpOwpAQCAtNzk1LDYwICs4OTMsODQgQEAKIHsKICAgICBfUHlfSURFTlRJRklFUihfX21vZHVsZV9fKTsKICAgICBQeU9iamVjdCAqZiwgKnQsICp2LCAqdGI7Ci0gICAgUHlFcnJfRmV0Y2goJnQsICZ2LCAmdGIpOwotICAgIGYgPSBQeVN5c19HZXRPYmplY3QoInN0ZGVyciIpOwotICAgIGlmIChmICE9IE5VTEwgJiYgZiAhPSBQeV9Ob25lKSB7Ci0gICAgICAgIFB5RmlsZV9Xcml0ZVN0cmluZygiRXhjZXB0aW9uICIsIGYpOwotICAgICAgICBpZiAodCkgewotICAgICAgICAgICAgUHlPYmplY3QqIG1vZHVsZU5hbWU7Ci0gICAgICAgICAgICBjaGFyKiBjbGFzc05hbWU7Ci0gICAgICAgICAgICBhc3NlcnQoUHlFeGNlcHRpb25DbGFzc19DaGVjayh0KSk7Ci0gICAgICAgICAgICBjbGFzc05hbWUgPSBQeUV4Y2VwdGlvbkNsYXNzX05hbWUodCk7Ci0gICAgICAgICAgICBpZiAoY2xhc3NOYW1lICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBjaGFyICpkb3QgPSBzdHJyY2hyKGNsYXNzTmFtZSwgJy4nKTsKLSAgICAgICAgICAgICAgICBpZiAoZG90ICE9IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZSA9IGRvdCsxOwotICAgICAgICAgICAgfQorICAgIFB5T2JqZWN0ICptb2R1bGVOYW1lID0gTlVMTDsKKyAgICBjaGFyKiBjbGFzc05hbWU7CiAKLSAgICAgICAgICAgIG1vZHVsZU5hbWUgPSBfUHlPYmplY3RfR2V0QXR0cklkKHQsICZQeUlkX19fbW9kdWxlX18pOwotICAgICAgICAgICAgaWYgKG1vZHVsZU5hbWUgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICBQeUZpbGVfV3JpdGVTdHJpbmcoIjx1bmtub3duPiIsIGYpOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgY2hhciogbW9kc3RyID0gX1B5VW5pY29kZV9Bc1N0cmluZyhtb2R1bGVOYW1lKTsKLSAgICAgICAgICAgICAgICBpZiAobW9kc3RyICYmCi0gICAgICAgICAgICAgICAgICAgIHN0cmNtcChtb2RzdHIsICJidWlsdGlucyIpICE9IDApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBQeUZpbGVfV3JpdGVTdHJpbmcobW9kc3RyLCBmKTsKLSAgICAgICAgICAgICAgICAgICAgUHlGaWxlX1dyaXRlU3RyaW5nKCIuIiwgZik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGNsYXNzTmFtZSA9PSBOVUxMKQotICAgICAgICAgICAgICAgIFB5RmlsZV9Xcml0ZVN0cmluZygiPHVua25vd24+IiwgZik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgUHlGaWxlX1dyaXRlU3RyaW5nKGNsYXNzTmFtZSwgZik7Ci0gICAgICAgICAgICBpZiAodiAmJiB2ICE9IFB5X05vbmUpIHsKLSAgICAgICAgICAgICAgICBQeUZpbGVfV3JpdGVTdHJpbmcoIjogIiwgZik7Ci0gICAgICAgICAgICAgICAgUHlGaWxlX1dyaXRlT2JqZWN0KHYsIGYsIDApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgUHlfWERFQ1JFRihtb2R1bGVOYW1lKTsKLSAgICAgICAgfQotICAgICAgICBpZiAob2JqKSB7Ci0gICAgICAgICAgICBQeUZpbGVfV3JpdGVTdHJpbmcoIiBpbiAiLCBmKTsKLSAgICAgICAgICAgIFB5RmlsZV9Xcml0ZU9iamVjdChvYmosIGYsIDApOwotICAgICAgICB9Ci0gICAgICAgIFB5RmlsZV9Xcml0ZVN0cmluZygiIGlnbm9yZWRcbiIsIGYpOwotICAgICAgICBQeUVycl9DbGVhcigpOyAvKiBKdXN0IGluIGNhc2UgKi8KKyAgICBQeUVycl9GZXRjaCgmdCwgJnYsICZ0Yik7CisKKyAgICBmID0gX1B5U3lzX0dldE9iamVjdElkKCZQeUlkX3N0ZGVycik7CisgICAgaWYgKGYgPT0gTlVMTCB8fCBmID09IFB5X05vbmUpCisgICAgICAgIGdvdG8gZG9uZTsKKworICAgIGlmIChvYmopIHsKKyAgICAgICAgaWYgKFB5RmlsZV9Xcml0ZVN0cmluZygiRXhjZXB0aW9uIGlnbm9yZWQgaW46ICIsIGYpIDwgMCkKKyAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAgaWYgKFB5RmlsZV9Xcml0ZU9iamVjdChvYmosIGYsIDApIDwgMCkKKyAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAgaWYgKFB5RmlsZV9Xcml0ZVN0cmluZygiXG4iLCBmKSA8IDApCisgICAgICAgICAgICBnb3RvIGRvbmU7CiAgICAgfQorCisgICAgaWYgKFB5VHJhY2VCYWNrX1ByaW50KHRiLCBmKSA8IDApCisgICAgICAgIGdvdG8gZG9uZTsKKworICAgIGlmICghdCkKKyAgICAgICAgZ290byBkb25lOworCisgICAgYXNzZXJ0KFB5RXhjZXB0aW9uQ2xhc3NfQ2hlY2sodCkpOworICAgIGNsYXNzTmFtZSA9IFB5RXhjZXB0aW9uQ2xhc3NfTmFtZSh0KTsKKyAgICBpZiAoY2xhc3NOYW1lICE9IE5VTEwpIHsKKyAgICAgICAgY2hhciAqZG90ID0gc3RycmNocihjbGFzc05hbWUsICcuJyk7CisgICAgICAgIGlmIChkb3QgIT0gTlVMTCkKKyAgICAgICAgICAgIGNsYXNzTmFtZSA9IGRvdCsxOworICAgIH0KKworICAgIG1vZHVsZU5hbWUgPSBfUHlPYmplY3RfR2V0QXR0cklkKHQsICZQeUlkX19fbW9kdWxlX18pOworICAgIGlmIChtb2R1bGVOYW1lID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgaWYgKFB5RmlsZV9Xcml0ZVN0cmluZygiPHVua25vd24+IiwgZikgPCAwKQorICAgICAgICAgICAgZ290byBkb25lOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKF9QeVVuaWNvZGVfQ29tcGFyZVdpdGhJZChtb2R1bGVOYW1lLCAmUHlJZF9idWlsdGlucykgIT0gMCkgeworICAgICAgICAgICAgaWYgKFB5RmlsZV9Xcml0ZU9iamVjdChtb2R1bGVOYW1lLCBmLCBQeV9QUklOVF9SQVcpIDwgMCkKKyAgICAgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgICAgICBpZiAoUHlGaWxlX1dyaXRlU3RyaW5nKCIuIiwgZikgPCAwKQorICAgICAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoY2xhc3NOYW1lID09IE5VTEwpIHsKKyAgICAgICAgaWYgKFB5RmlsZV9Xcml0ZVN0cmluZygiPHVua25vd24+IiwgZikgPCAwKQorICAgICAgICAgICAgZ290byBkb25lOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKFB5RmlsZV9Xcml0ZVN0cmluZyhjbGFzc05hbWUsIGYpIDwgMCkKKyAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICB9CisKKyAgICBpZiAodiAmJiB2ICE9IFB5X05vbmUpIHsKKyAgICAgICAgaWYgKFB5RmlsZV9Xcml0ZVN0cmluZygiOiAiLCBmKSA8IDApCisgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgIGlmIChQeUZpbGVfV3JpdGVPYmplY3QodiwgZiwgUHlfUFJJTlRfUkFXKSA8IDApCisgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgfQorICAgIGlmIChQeUZpbGVfV3JpdGVTdHJpbmcoIlxuIiwgZikgPCAwKQorICAgICAgICBnb3RvIGRvbmU7CisKK2RvbmU6CisgICAgUHlfWERFQ1JFRihtb2R1bGVOYW1lKTsKICAgICBQeV9YREVDUkVGKHQpOwogICAgIFB5X1hERUNSRUYodik7CiAgICAgUHlfWERFQ1JFRih0Yik7CisgICAgUHlFcnJfQ2xlYXIoKTsgLyogSnVzdCBpbiBjYXNlICovCiB9CiAKIGV4dGVybiBQeU9iamVjdCAqUHlNb2R1bGVfR2V0V2FybmluZ3NNb2R1bGUodm9pZCk7CiAKIAogdm9pZAotUHlFcnJfU3ludGF4TG9jYXRpb24oY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBsaW5lbm8pIHsKK1B5RXJyX1N5bnRheExvY2F0aW9uKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgbGluZW5vKQorewogICAgIFB5RXJyX1N5bnRheExvY2F0aW9uRXgoZmlsZW5hbWUsIGxpbmVubywgLTEpOwogfQogCkBAIC04NTgsNyArOTgwLDcgQEAKICAgIHRvIG1ha2UgcHJpbnRpbmcgb2YgZXhjZXB0aW9ucyBiZWxpZXZlIGl0IGlzIGEgc3ludGF4IGVycm9yLiAqLwogCiB2b2lkCi1QeUVycl9TeW50YXhMb2NhdGlvbkV4KGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgbGluZW5vLCBpbnQgY29sX29mZnNldCkKK1B5RXJyX1N5bnRheExvY2F0aW9uT2JqZWN0KFB5T2JqZWN0ICpmaWxlbmFtZSwgaW50IGxpbmVubywgaW50IGNvbF9vZmZzZXQpCiB7CiAgICAgUHlPYmplY3QgKmV4YywgKnYsICp0YiwgKnRtcDsKICAgICBfUHlfSURFTlRJRklFUihmaWxlbmFtZSk7CkBAIC04OTIsMTYgKzEwMTQsMTAgQEAKICAgICAgICAgfQogICAgIH0KICAgICBpZiAoZmlsZW5hbWUgIT0gTlVMTCkgewotICAgICAgICB0bXAgPSBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0KGZpbGVuYW1lKTsKLSAgICAgICAgaWYgKHRtcCA9PSBOVUxMKQorICAgICAgICBpZiAoX1B5T2JqZWN0X1NldEF0dHJJZCh2LCAmUHlJZF9maWxlbmFtZSwgZmlsZW5hbWUpKQogICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBpZiAoX1B5T2JqZWN0X1NldEF0dHJJZCh2LCAmUHlJZF9maWxlbmFtZSwgdG1wKSkKLSAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwotICAgICAgICAgICAgUHlfREVDUkVGKHRtcCk7Ci0gICAgICAgIH0KIAotICAgICAgICB0bXAgPSBQeUVycl9Qcm9ncmFtVGV4dChmaWxlbmFtZSwgbGluZW5vKTsKKyAgICAgICAgdG1wID0gUHlFcnJfUHJvZ3JhbVRleHRPYmplY3QoZmlsZW5hbWUsIGxpbmVubyk7CiAgICAgICAgIGlmICh0bXApIHsKICAgICAgICAgICAgIGlmIChfUHlPYmplY3RfU2V0QXR0cklkKHYsICZQeUlkX3RleHQsIHRtcCkpCiAgICAgICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKQEAgLTkzMSwyMiArMTA0NywzMyBAQAogICAgIFB5RXJyX1Jlc3RvcmUoZXhjLCB2LCB0Yik7CiB9CiAKK3ZvaWQKK1B5RXJyX1N5bnRheExvY2F0aW9uRXgoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBsaW5lbm8sIGludCBjb2xfb2Zmc2V0KQoreworICAgIFB5T2JqZWN0ICpmaWxlb2JqOworICAgIGlmIChmaWxlbmFtZSAhPSBOVUxMKSB7CisgICAgICAgIGZpbGVvYmogPSBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0KGZpbGVuYW1lKTsKKyAgICAgICAgaWYgKGZpbGVvYmogPT0gTlVMTCkKKyAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgZmlsZW9iaiA9IE5VTEw7CisgICAgUHlFcnJfU3ludGF4TG9jYXRpb25PYmplY3QoZmlsZW9iaiwgbGluZW5vLCBjb2xfb2Zmc2V0KTsKKyAgICBQeV9YREVDUkVGKGZpbGVvYmopOworfQorCiAvKiBBdHRlbXB0IHRvIGxvYWQgdGhlIGxpbmUgb2YgdGV4dCB0aGF0IHRoZSBleGNlcHRpb24gcmVmZXJzIHRvLiAgSWYgaXQKICAgIGZhaWxzLCBpdCB3aWxsIHJldHVybiBOVUxMIGJ1dCB3aWxsIG5vdCBzZXQgYW4gZXhjZXB0aW9uLgogCiAgICBYWFggVGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhpcyBmdW5jdGlvbiBpcyBxdWl0ZSBzaW1pbGFyIHRvIHRoZQogICAgZnVuY3Rpb25hbGl0eSBpbiB0Yl9kaXNwbGF5bGluZSgpIGluIHRyYWNlYmFjay5jLiAqLwogCi1QeU9iamVjdCAqCi1QeUVycl9Qcm9ncmFtVGV4dChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGxpbmVubykKK3N0YXRpYyBQeU9iamVjdCAqCitlcnJfcHJvZ3JhbXRleHQoRklMRSAqZnAsIGludCBsaW5lbm8pCiB7Ci0gICAgRklMRSAqZnA7CiAgICAgaW50IGk7CiAgICAgY2hhciBsaW5lYnVmWzEwMDBdOwogCi0gICAgaWYgKGZpbGVuYW1lID09IE5VTEwgfHwgKmZpbGVuYW1lID09ICdcMCcgfHwgbGluZW5vIDw9IDApCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGZwID0gZm9wZW4oZmlsZW5hbWUsICJyIiBQWV9TVERJT1RFWFRNT0RFKTsKICAgICBpZiAoZnAgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgZm9yIChpID0gMDsgaSA8IGxpbmVubzsgaSsrKSB7CkBAIC05NzcsNiArMTEwNCwyNiBAQAogICAgIHJldHVybiBOVUxMOwogfQogCitQeU9iamVjdCAqCitQeUVycl9Qcm9ncmFtVGV4dChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGxpbmVubykKK3sKKyAgICBGSUxFICpmcDsKKyAgICBpZiAoZmlsZW5hbWUgPT0gTlVMTCB8fCAqZmlsZW5hbWUgPT0gJ1wwJyB8fCBsaW5lbm8gPD0gMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgZnAgPSBfUHlfZm9wZW4oZmlsZW5hbWUsICJyIiBQWV9TVERJT1RFWFRNT0RFKTsKKyAgICByZXR1cm4gZXJyX3Byb2dyYW10ZXh0KGZwLCBsaW5lbm8pOworfQorCitQeU9iamVjdCAqCitQeUVycl9Qcm9ncmFtVGV4dE9iamVjdChQeU9iamVjdCAqZmlsZW5hbWUsIGludCBsaW5lbm8pCit7CisgICAgRklMRSAqZnA7CisgICAgaWYgKGZpbGVuYW1lID09IE5VTEwgfHwgbGluZW5vIDw9IDApCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGZwID0gX1B5X2ZvcGVuX29iaihmaWxlbmFtZSwgInIiIFBZX1NURElPVEVYVE1PREUpOworICAgIHJldHVybiBlcnJfcHJvZ3JhbXRleHQoZnAsIGxpbmVubyk7Cit9CisKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9QeXRob24vZmlsZXV0aWxzLmMgYi9QeXRob24vZmlsZXV0aWxzLmMKaW5kZXggNWM2NmVjZi4uMzE2ODljMCAxMDA2NDQKLS0tIGEvUHl0aG9uL2ZpbGV1dGlscy5jCisrKyBiL1B5dGhvbi9maWxldXRpbHMuYwpAQCAtMTAsMjAgKzEwLDM5IEBACiAjaW5jbHVkZSA8bGFuZ2luZm8uaD4KICNlbmRpZgogCisjaWZkZWYgSEFWRV9TWVNfSU9DVExfSAorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2VuZGlmCisKKyNpZmRlZiBIQVZFX0ZDTlRMX0gKKyNpbmNsdWRlIDxmY250bC5oPgorI2VuZGlmIC8qIEhBVkVfRkNOVExfSCAqLworCiAjaWZkZWYgX19BUFBMRV9fCiBleHRlcm4gd2NoYXJfdCogX1B5X0RlY29kZVVURjhfc3Vycm9nYXRlZXNjYXBlKGNvbnN0IGNoYXIgKnMsIFB5X3NzaXplX3Qgc2l6ZSk7CiAjZW5kaWYKIAorI2lmZGVmIE9fQ0xPRVhFQworLyogRG9lcyBvcGVuKCkgc3VwcG9ydCB0aGUgT19DTE9FWEVDIGZsYWc/IFBvc3NpYmxlIHZhbHVlczoKKworICAgLTE6IHVua25vd24KKyAgICAwOiBvcGVuKCkgaWdub3JlcyBPX0NMT0VYRUMgZmxhZywgZXg6IExpbnV4IGtlcm5lbCBvbGRlciB0aGFuIDIuNi4yMworICAgIDE6IG9wZW4oKSBzdXBwb3J0cyBPX0NMT0VYRUMgZmxhZywgY2xvc2Utb24tZXhlYyBpcyBzZXQKKworICAgVGhlIGZsYWcgaXMgdXNlZCBieSBfUHlfb3BlbigpLCBpby5GaWxlSU8gYW5kIG9zLm9wZW4oKSAqLworaW50IF9QeV9vcGVuX2Nsb2V4ZWNfd29ya3MgPSAtMTsKKyNlbmRpZgorCiBQeU9iamVjdCAqCiBfUHlfZGV2aWNlX2VuY29kaW5nKGludCBmZCkKIHsKLSNpZiBkZWZpbmVkKE1TX1dJTkRPV1MpIHx8IGRlZmluZWQoTVNfV0lONjQpCisjaWYgZGVmaW5lZChNU19XSU5ET1dTKQogICAgIFVJTlQgY3A7CiAjZW5kaWYKICAgICBpZiAoIV9QeVZlcmlmeV9mZChmZCkgfHwgIWlzYXR0eShmZCkpIHsKICAgICAgICAgUHlfUkVUVVJOX05PTkU7CiAgICAgfQotI2lmIGRlZmluZWQoTVNfV0lORE9XUykgfHwgZGVmaW5lZChNU19XSU42NCkKKyNpZiBkZWZpbmVkKE1TX1dJTkRPV1MpCiAgICAgaWYgKGZkID09IDApCiAgICAgICAgIGNwID0gR2V0Q29uc29sZUNQKCk7CiAgICAgZWxzZSBpZiAoZmQgPT0gMSB8fCBmZCA9PSAyKQpAQCAtNjEsNyArODAsNyBAQAogICAgd29ya2Fyb3VuZCBpcyBhbHNvIGVuYWJsZWQgb24gZXJyb3IsIGZvciBleGFtcGxlIGlmIGdldHRpbmcgdGhlIGxvY2FsZQogICAgZmFpbGVkLgogCi0gICBWYWx1ZXMgb2YgbG9jYWxlX2lzX2FzY2lpOgorICAgVmFsdWVzIG9mIGZvcmNlX2FzY2lpOgogCiAgICAgICAgMTogdGhlIHdvcmthcm91bmQgaXMgdXNlZDogX1B5X3djaGFyMmNoYXIoKSB1c2VzCiAgICAgICAgICAgZW5jb2RlX2FzY2lpX3N1cnJvZ2F0ZWVzY2FwZSgpIGFuZCBfUHlfY2hhcjJ3Y2hhcigpIHVzZXMKQEAgLTIwNSw3ICsyMjQsNyBAQAogCiAgICAgaWYgKGFyZ3NpemUgPiBQWV9TU0laRV9UX01BWC9zaXplb2Yod2NoYXJfdCkpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIHJlcyA9IFB5TWVtX01hbGxvYyhhcmdzaXplKnNpemVvZih3Y2hhcl90KSk7CisgICAgcmVzID0gUHlNZW1fUmF3TWFsbG9jKGFyZ3NpemUqc2l6ZW9mKHdjaGFyX3QpKTsKICAgICBpZiAoIXJlcykKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTIzMyw3ICsyNTIsNyBAQAogICAgVXNlIF9QeV93Y2hhcjJjaGFyKCkgdG8gZW5jb2RlIHRoZSBjaGFyYWN0ZXIgc3RyaW5nIGJhY2sgdG8gYSBieXRlIHN0cmluZy4KIAogICAgUmV0dXJuIGEgcG9pbnRlciB0byBhIG5ld2x5IGFsbG9jYXRlZCB3aWRlIGNoYXJhY3RlciBzdHJpbmcgKHVzZQotICAgUHlNZW1fRnJlZSgpIHRvIGZyZWUgdGhlIG1lbW9yeSkgYW5kIHdyaXRlIHRoZSBudW1iZXIgb2Ygd3JpdHRlbiB3aWRlCisgICBQeU1lbV9SYXdGcmVlKCkgdG8gZnJlZSB0aGUgbWVtb3J5KSBhbmQgd3JpdGUgdGhlIG51bWJlciBvZiB3cml0dGVuIHdpZGUKICAgIGNoYXJhY3RlcnMgZXhjbHVkaW5nIHRoZSBudWxsIGNoYXJhY3RlciBpbnRvICpzaXplIGlmIHNpemUgaXMgbm90IE5VTEwsIG9yCiAgICBOVUxMIG9uIGVycm9yIChkZWNvZGluZyBvciBtZW1vcnkgYWxsb2NhdGlvbiBlcnJvcikuIElmIHNpemUgaXMgbm90IE5VTEwsCiAgICAqc2l6ZSBpcyBzZXQgdG8gKHNpemVfdCktMSBvbiBtZW1vcnkgZXJyb3IgYW5kIChzaXplX3QpLTIgb24gZGVjb2RpbmcKQEAgLTI1OCw5ICsyNzcsOSBAQAogICAgIHdjaGFyX3QgKnJlczsKICAgICBzaXplX3QgYXJnc2l6ZTsKICAgICBzaXplX3QgY291bnQ7CisjaWZkZWYgSEFWRV9NQlJUT1dDCiAgICAgdW5zaWduZWQgY2hhciAqaW47CiAgICAgd2NoYXJfdCAqb3V0OwotI2lmZGVmIEhBVkVfTUJSVE9XQwogICAgIG1ic3RhdGVfdCBtYnM7CiAjZW5kaWYKIApAQCAtMjkyLDcgKzMxMSw3IEBACiAgICAgICAgIGFyZ3NpemUgKz0gMTsKICAgICAgICAgaWYgKGFyZ3NpemUgPiBQWV9TU0laRV9UX01BWC9zaXplb2Yod2NoYXJfdCkpCiAgICAgICAgICAgICBnb3RvIG9vbTsKLSAgICAgICAgcmVzID0gKHdjaGFyX3QgKilQeU1lbV9NYWxsb2MoYXJnc2l6ZSpzaXplb2Yod2NoYXJfdCkpOworICAgICAgICByZXMgPSAod2NoYXJfdCAqKVB5TWVtX1Jhd01hbGxvYyhhcmdzaXplKnNpemVvZih3Y2hhcl90KSk7CiAgICAgICAgIGlmICghcmVzKQogICAgICAgICAgICAgZ290byBvb207CiAgICAgICAgIGNvdW50ID0gbWJzdG93Y3MocmVzLCBhcmcsIGFyZ3NpemUpOwpAQCAtMzAxLDcgKzMyMCw3IEBACiAgICAgICAgICAgICAvKiBPbmx5IHVzZSB0aGUgcmVzdWx0IGlmIGl0IGNvbnRhaW5zIG5vCiAgICAgICAgICAgICAgICBzdXJyb2dhdGUgY2hhcmFjdGVycy4gKi8KICAgICAgICAgICAgIGZvciAodG1wID0gcmVzOyAqdG1wICE9IDAgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAoKnRtcCA8IDB4ZDgwMCB8fCAqdG1wID4gMHhkZmZmKTsgdG1wKyspCisgICAgICAgICAgICAgICAgICAgICAgICAgIVB5X1VOSUNPREVfSVNfU1VSUk9HQVRFKCp0bXApOyB0bXArKykKICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICBpZiAoKnRtcCA9PSAwKSB7CiAgICAgICAgICAgICAgICAgaWYgKHNpemUgIT0gTlVMTCkKQEAgLTMwOSw3ICszMjgsNyBAQAogICAgICAgICAgICAgICAgIHJldHVybiByZXM7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgUHlNZW1fRnJlZShyZXMpOworICAgICAgICBQeU1lbV9SYXdGcmVlKHJlcyk7CiAgICAgfQogICAgIC8qIENvbnZlcnNpb24gZmFpbGVkLiBGYWxsIGJhY2sgdG8gZXNjYXBpbmcgd2l0aCBzdXJyb2dhdGVlc2NhcGUuICovCiAjaWZkZWYgSEFWRV9NQlJUT1dDCkBAIC0zMjAsNyArMzM5LDcgQEAKICAgICBhcmdzaXplID0gc3RybGVuKGFyZykgKyAxOwogICAgIGlmIChhcmdzaXplID4gUFlfU1NJWkVfVF9NQVgvc2l6ZW9mKHdjaGFyX3QpKQogICAgICAgICBnb3RvIG9vbTsKLSAgICByZXMgPSAod2NoYXJfdCopUHlNZW1fTWFsbG9jKGFyZ3NpemUqc2l6ZW9mKHdjaGFyX3QpKTsKKyAgICByZXMgPSAod2NoYXJfdCopUHlNZW1fUmF3TWFsbG9jKGFyZ3NpemUqc2l6ZW9mKHdjaGFyX3QpKTsKICAgICBpZiAoIXJlcykKICAgICAgICAgZ290byBvb207CiAgICAgaW4gPSAodW5zaWduZWQgY2hhciopYXJnOwpAQCAtMzM2LDcgKzM1NSw3IEBACiAgICAgICAgICAgICAgICBzaW5jZSB3ZSBwcm92aWRlIGV2ZXJ5dGhpbmcgdGhhdCB3ZSBoYXZlIC0KICAgICAgICAgICAgICAgIHVubGVzcyB0aGVyZSBpcyBhIGJ1ZyBpbiB0aGUgQyBsaWJyYXJ5LCBvciBJCiAgICAgICAgICAgICAgICBtaXN1bmRlcnN0b29kIGhvdyBtYnJ0b3djIHdvcmtzLiAqLwotICAgICAgICAgICAgUHlNZW1fRnJlZShyZXMpOworICAgICAgICAgICAgUHlNZW1fUmF3RnJlZShyZXMpOwogICAgICAgICAgICAgaWYgKHNpemUgIT0gTlVMTCkKICAgICAgICAgICAgICAgICAqc2l6ZSA9IChzaXplX3QpLTI7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTM0OSw3ICszNjgsNyBAQAogICAgICAgICAgICAgbWVtc2V0KCZtYnMsIDAsIHNpemVvZiBtYnMpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKCpvdXQgPj0gMHhkODAwICYmICpvdXQgPD0gMHhkZmZmKSB7CisgICAgICAgIGlmIChQeV9VTklDT0RFX0lTX1NVUlJPR0FURSgqb3V0KSkgewogICAgICAgICAgICAgLyogU3Vycm9nYXRlIGNoYXJhY3Rlci4gIEVzY2FwZSB0aGUgb3JpZ2luYWwKICAgICAgICAgICAgICAgIGJ5dGUgc2VxdWVuY2Ugd2l0aCBzdXJyb2dhdGVlc2NhcGUuICovCiAgICAgICAgICAgICBhcmdzaXplIC09IGNvbnZlcnRlZDsKQEAgLTU1OCwxNCArNTc3LDIzNSBAQAogCiAjZW5kaWYKIAotLyogT3BlbiBhIGZpbGUuIFVzZSBfd2ZvcGVuKCkgb24gV2luZG93cywgZW5jb2RlIHRoZSBwYXRoIHRvIHRoZSBsb2NhbGUKLSAgIGVuY29kaW5nIGFuZCB1c2UgZm9wZW4oKSBvdGhlcndpc2UuICovCitzdGF0aWMgaW50CitnZXRfaW5oZXJpdGFibGUoaW50IGZkLCBpbnQgcmFpc2UpCit7CisjaWZkZWYgTVNfV0lORE9XUworICAgIEhBTkRMRSBoYW5kbGU7CisgICAgRFdPUkQgZmxhZ3M7CiAKKyAgICBpZiAoIV9QeVZlcmlmeV9mZChmZCkpIHsKKyAgICAgICAgaWYgKHJhaXNlKQorICAgICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaGFuZGxlID0gKEhBTkRMRSlfZ2V0X29zZmhhbmRsZShmZCk7CisgICAgaWYgKGhhbmRsZSA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgeworICAgICAgICBpZiAocmFpc2UpCisgICAgICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBpZiAoIUdldEhhbmRsZUluZm9ybWF0aW9uKGhhbmRsZSwgJmZsYWdzKSkgeworICAgICAgICBpZiAocmFpc2UpCisgICAgICAgICAgICBQeUVycl9TZXRGcm9tV2luZG93c0VycigwKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIHJldHVybiAoZmxhZ3MgJiBIQU5ETEVfRkxBR19JTkhFUklUKTsKKyNlbHNlCisgICAgaW50IGZsYWdzOworCisgICAgZmxhZ3MgPSBmY250bChmZCwgRl9HRVRGRCwgMCk7CisgICAgaWYgKGZsYWdzID09IC0xKSB7CisgICAgICAgIGlmIChyYWlzZSkKKyAgICAgICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19PU0Vycm9yKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICByZXR1cm4gIShmbGFncyAmIEZEX0NMT0VYRUMpOworI2VuZGlmCit9CisKKy8qIEdldCB0aGUgaW5oZXJpdGFibGUgZmxhZyBvZiB0aGUgc3BlY2lmaWVkIGZpbGUgZGVzY3JpcHRvci4KKyAgIFJldHVybiAxIGlmIHRoZSBmaWxlIGRlc2NyaXB0b3IgY2FuIGJlIGluaGVyaXRlZCwgMCBpZiBpdCBjYW5ub3QsCisgICByYWlzZSBhbiBleGNlcHRpb24gYW5kIHJldHVybiAtMSBvbiBlcnJvci4gKi8KK2ludAorX1B5X2dldF9pbmhlcml0YWJsZShpbnQgZmQpCit7CisgICAgcmV0dXJuIGdldF9pbmhlcml0YWJsZShmZCwgMSk7Cit9CisKK3N0YXRpYyBpbnQKK3NldF9pbmhlcml0YWJsZShpbnQgZmQsIGludCBpbmhlcml0YWJsZSwgaW50IHJhaXNlLCBpbnQgKmF0b21pY19mbGFnX3dvcmtzKQoreworI2lmZGVmIE1TX1dJTkRPV1MKKyAgICBIQU5ETEUgaGFuZGxlOworICAgIERXT1JEIGZsYWdzOworI2Vsc2UKKyNpZiBkZWZpbmVkKEhBVkVfU1lTX0lPQ1RMX0gpICYmIGRlZmluZWQoRklPQ0xFWCkgJiYgZGVmaW5lZChGSU9OQ0xFWCkKKyAgICBzdGF0aWMgaW50IGlvY3RsX3dvcmtzID0gLTE7CisgICAgaW50IHJlcXVlc3Q7CisgICAgaW50IGVycjsKKyNlbmRpZgorICAgIGludCBmbGFnczsKKyAgICBpbnQgcmVzOworI2VuZGlmCisKKyAgICAvKiBhdG9taWNfZmxhZ193b3JrcyBjYW4gb25seSBiZSB1c2VkIHRvIG1ha2UgdGhlIGZpbGUgZGVzY3JpcHRvcgorICAgICAgIG5vbi1pbmhlcml0YWJsZSAqLworICAgIGFzc2VydCghKGF0b21pY19mbGFnX3dvcmtzICE9IE5VTEwgJiYgaW5oZXJpdGFibGUpKTsKKworICAgIGlmIChhdG9taWNfZmxhZ193b3JrcyAhPSBOVUxMICYmICFpbmhlcml0YWJsZSkgeworICAgICAgICBpZiAoKmF0b21pY19mbGFnX3dvcmtzID09IC0xKSB7CisgICAgICAgICAgICBpbnQgaXNJbmhlcml0YWJsZSA9IGdldF9pbmhlcml0YWJsZShmZCwgcmFpc2UpOworICAgICAgICAgICAgaWYgKGlzSW5oZXJpdGFibGUgPT0gLTEpCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgKmF0b21pY19mbGFnX3dvcmtzID0gIWlzSW5oZXJpdGFibGU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoKmF0b21pY19mbGFnX3dvcmtzKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisjaWZkZWYgTVNfV0lORE9XUworICAgIGlmICghX1B5VmVyaWZ5X2ZkKGZkKSkgeworICAgICAgICBpZiAocmFpc2UpCisgICAgICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBoYW5kbGUgPSAoSEFORExFKV9nZXRfb3NmaGFuZGxlKGZkKTsKKyAgICBpZiAoaGFuZGxlID09IElOVkFMSURfSEFORExFX1ZBTFVFKSB7CisgICAgICAgIGlmIChyYWlzZSkKKyAgICAgICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19PU0Vycm9yKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGlmIChpbmhlcml0YWJsZSkKKyAgICAgICAgZmxhZ3MgPSBIQU5ETEVfRkxBR19JTkhFUklUOworICAgIGVsc2UKKyAgICAgICAgZmxhZ3MgPSAwOworICAgIGlmICghU2V0SGFuZGxlSW5mb3JtYXRpb24oaGFuZGxlLCBIQU5ETEVfRkxBR19JTkhFUklULCBmbGFncykpIHsKKyAgICAgICAgaWYgKHJhaXNlKQorICAgICAgICAgICAgUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoMCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgcmV0dXJuIDA7CisKKyNlbHNlCisKKyNpZiBkZWZpbmVkKEhBVkVfU1lTX0lPQ1RMX0gpICYmIGRlZmluZWQoRklPQ0xFWCkgJiYgZGVmaW5lZChGSU9OQ0xFWCkKKyAgICBpZiAoaW9jdGxfd29ya3MgIT0gMCkgeworICAgICAgICAvKiBmYXN0LXBhdGg6IGlvY3RsKCkgb25seSByZXF1aXJlcyBvbmUgc3lzY2FsbCAqLworICAgICAgICBpZiAoaW5oZXJpdGFibGUpCisgICAgICAgICAgICByZXF1ZXN0ID0gRklPTkNMRVg7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJlcXVlc3QgPSBGSU9DTEVYOworICAgICAgICBlcnIgPSBpb2N0bChmZCwgcmVxdWVzdCwgTlVMTCk7CisgICAgICAgIGlmICghZXJyKSB7CisgICAgICAgICAgICBpb2N0bF93b3JrcyA9IDE7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChlcnJubyAhPSBFTk9UVFkpIHsKKyAgICAgICAgICAgIGlmIChyYWlzZSkKKyAgICAgICAgICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvKiBJc3N1ZSAjMjIyNTg6IEhlcmUsIEVOT1RUWSBtZWFucyAiSW5hcHByb3ByaWF0ZSBpb2N0bCBmb3IKKyAgICAgICAgICAgICAgIGRldmljZSIuIFRoZSBpb2N0bCBpcyBkZWNsYXJlZCBidXQgbm90IHN1cHBvcnRlZCBieSB0aGUga2VybmVsLgorICAgICAgICAgICAgICAgUmVtZW1iZXIgdGhhdCBpb2N0bCgpIGRvZXNuJ3Qgd29yay4gSXQgaXMgdGhlIGNhc2Ugb24KKyAgICAgICAgICAgICAgIElsbHVtb3MtYmFzZWQgT1MgZm9yIGV4YW1wbGUuICovCisgICAgICAgICAgICBpb2N0bF93b3JrcyA9IDA7CisgICAgICAgIH0KKyAgICAgICAgLyogZmFsbGJhY2sgdG8gZmNudGwoKSBpZiBpb2N0bCgpIGRvZXMgbm90IHdvcmsgKi8KKyAgICB9CisjZW5kaWYKKworICAgIC8qIHNsb3ctcGF0aDogZmNudGwoKSByZXF1aXJlcyB0d28gc3lzY2FsbHMgKi8KKyAgICBmbGFncyA9IGZjbnRsKGZkLCBGX0dFVEZEKTsKKyAgICBpZiAoZmxhZ3MgPCAwKSB7CisgICAgICAgIGlmIChyYWlzZSkKKyAgICAgICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19PU0Vycm9yKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGlmIChpbmhlcml0YWJsZSkKKyAgICAgICAgZmxhZ3MgJj0gfkZEX0NMT0VYRUM7CisgICAgZWxzZQorICAgICAgICBmbGFncyB8PSBGRF9DTE9FWEVDOworICAgIHJlcyA9IGZjbnRsKGZkLCBGX1NFVEZELCBmbGFncyk7CisgICAgaWYgKHJlcyA8IDApIHsKKyAgICAgICAgaWYgKHJhaXNlKQorICAgICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIHJldHVybiAwOworI2VuZGlmCit9CisKKy8qIE1ha2UgdGhlIGZpbGUgZGVzY3JpcHRvciBub24taW5oZXJpdGFibGUuCisgICBSZXR1cm4gMCBvbiBzdWNjZXNzLCBzZXQgZXJybm8gYW5kIHJldHVybiAtMSBvbiBlcnJvci4gKi8KK3N0YXRpYyBpbnQKK21ha2Vfbm9uX2luaGVyaXRhYmxlKGludCBmZCkKK3sKKyAgICByZXR1cm4gc2V0X2luaGVyaXRhYmxlKGZkLCAwLCAwLCBOVUxMKTsKK30KKworLyogU2V0IHRoZSBpbmhlcml0YWJsZSBmbGFnIG9mIHRoZSBzcGVjaWZpZWQgZmlsZSBkZXNjcmlwdG9yLgorICAgT24gc3VjY2VzczogcmV0dXJuIDAsIG9uIGVycm9yOiByYWlzZSBhbiBleGNlcHRpb24gaWYgcmFpc2UgaXMgbm9uemVybworICAgYW5kIHJldHVybiAtMS4KKworICAgSWYgYXRvbWljX2ZsYWdfd29ya3MgaXMgbm90IE5VTEw6CisKKyAgICAqIGlmICphdG9taWNfZmxhZ193b3Jrcz09LTEsIGNoZWNrIGlmIHRoZSBpbmhlcml0YWJsZSBpcyBzZXQgb24gdGhlIGZpbGUKKyAgICAgIGRlc2NyaXB0b3I6IGlmIHllcywgc2V0ICphdG9taWNfZmxhZ193b3JrcyB0byAxLCBvdGhlcndpc2Ugc2V0IHRvIDAgYW5kCisgICAgICBzZXQgdGhlIGluaGVyaXRhYmxlIGZsYWcKKyAgICAqIGlmICphdG9taWNfZmxhZ193b3Jrcz09MTogZG8gbm90aGluZworICAgICogaWYgKmF0b21pY19mbGFnX3dvcmtzPT0wOiBzZXQgaW5oZXJpdGFibGUgZmxhZyB0byBGYWxzZQorCisgICBTZXQgYXRvbWljX2ZsYWdfd29ya3MgdG8gTlVMTCBpZiBubyBhdG9taWMgZmxhZyB3YXMgdXNlZCB0byBjcmVhdGUgdGhlCisgICBmaWxlIGRlc2NyaXB0b3IuCisKKyAgIGF0b21pY19mbGFnX3dvcmtzIGNhbiBvbmx5IGJlIHVzZWQgdG8gbWFrZSBhIGZpbGUgZGVzY3JpcHRvcgorICAgbm9uLWluaGVyaXRhYmxlOiBhdG9taWNfZmxhZ193b3JrcyBtdXN0IGJlIE5VTEwgaWYgaW5oZXJpdGFibGU9MS4gKi8KK2ludAorX1B5X3NldF9pbmhlcml0YWJsZShpbnQgZmQsIGludCBpbmhlcml0YWJsZSwgaW50ICphdG9taWNfZmxhZ193b3JrcykKK3sKKyAgICByZXR1cm4gc2V0X2luaGVyaXRhYmxlKGZkLCBpbmhlcml0YWJsZSwgMSwgYXRvbWljX2ZsYWdfd29ya3MpOworfQorCisvKiBPcGVuIGEgZmlsZSB3aXRoIHRoZSBzcGVjaWZpZWQgZmxhZ3MgKHdyYXBwZXIgdG8gb3BlbigpIGZ1bmN0aW9uKS4KKyAgIFRoZSBmaWxlIGRlc2NyaXB0b3IgaXMgY3JlYXRlZCBub24taW5oZXJpdGFibGUuICovCitpbnQKK19QeV9vcGVuKGNvbnN0IGNoYXIgKnBhdGhuYW1lLCBpbnQgZmxhZ3MpCit7CisgICAgaW50IGZkOworI2lmZGVmIE1TX1dJTkRPV1MKKyAgICBmZCA9IG9wZW4ocGF0aG5hbWUsIGZsYWdzIHwgT19OT0lOSEVSSVQpOworICAgIGlmIChmZCA8IDApCisgICAgICAgIHJldHVybiBmZDsKKyNlbHNlCisKKyAgICBpbnQgKmF0b21pY19mbGFnX3dvcmtzOworI2lmZGVmIE9fQ0xPRVhFQworICAgIGF0b21pY19mbGFnX3dvcmtzID0gJl9QeV9vcGVuX2Nsb2V4ZWNfd29ya3M7CisgICAgZmxhZ3MgfD0gT19DTE9FWEVDOworI2Vsc2UKKyAgICBhdG9taWNfZmxhZ193b3JrcyA9IE5VTEw7CisjZW5kaWYKKyAgICBmZCA9IG9wZW4ocGF0aG5hbWUsIGZsYWdzKTsKKyAgICBpZiAoZmQgPCAwKQorICAgICAgICByZXR1cm4gZmQ7CisKKyAgICBpZiAoc2V0X2luaGVyaXRhYmxlKGZkLCAwLCAwLCBhdG9taWNfZmxhZ193b3JrcykgPCAwKSB7CisgICAgICAgIGNsb3NlKGZkKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyNlbmRpZiAgIC8qICFNU19XSU5ET1dTICovCisgICAgcmV0dXJuIGZkOworfQorCisvKiBPcGVuIGEgZmlsZS4gVXNlIF93Zm9wZW4oKSBvbiBXaW5kb3dzLCBlbmNvZGUgdGhlIHBhdGggdG8gdGhlIGxvY2FsZQorICAgZW5jb2RpbmcgYW5kIHVzZSBmb3BlbigpIG90aGVyd2lzZS4gVGhlIGZpbGUgZGVzY3JpcHRvciBpcyBjcmVhdGVkCisgICBub24taW5oZXJpdGFibGUuICovCiBGSUxFICoKIF9QeV93Zm9wZW4oY29uc3Qgd2NoYXJfdCAqcGF0aCwgY29uc3Qgd2NoYXJfdCAqbW9kZSkKIHsKLSNpZm5kZWYgTVNfV0lORE9XUwogICAgIEZJTEUgKmY7CisjaWZuZGVmIE1TX1dJTkRPV1MKICAgICBjaGFyICpjcGF0aDsKICAgICBjaGFyIGNtb2RlWzEwXTsKICAgICBzaXplX3QgcjsKQEAgLTU3OSwyMSArODE5LDQyIEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGYgPSBmb3BlbihjcGF0aCwgY21vZGUpOwogICAgIFB5TWVtX0ZyZWUoY3BhdGgpOwotICAgIHJldHVybiBmOwogI2Vsc2UKLSAgICByZXR1cm4gX3dmb3BlbihwYXRoLCBtb2RlKTsKKyAgICBmID0gX3dmb3BlbihwYXRoLCBtb2RlKTsKICNlbmRpZgorICAgIGlmIChmID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmIChtYWtlX25vbl9pbmhlcml0YWJsZShmaWxlbm8oZikpIDwgMCkgeworICAgICAgICBmY2xvc2UoZik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXR1cm4gZjsKIH0KIAotLyogQ2FsbCBfd2ZvcGVuKCkgb24gV2luZG93cywgb3IgZW5jb2RlIHRoZSBwYXRoIHRvIHRoZSBmaWxlc3lzdGVtIGVuY29kaW5nIGFuZAotICAgY2FsbCBmb3BlbigpIG90aGVyd2lzZS4KKy8qIFdyYXBwZXIgdG8gZm9wZW4oKS4gVGhlIGZpbGUgZGVzY3JpcHRvciBpcyBjcmVhdGVkIG5vbi1pbmhlcml0YWJsZS4gKi8KK0ZJTEUqCitfUHlfZm9wZW4oY29uc3QgY2hhciAqcGF0aG5hbWUsIGNvbnN0IGNoYXIgKm1vZGUpCit7CisgICAgRklMRSAqZiA9IGZvcGVuKHBhdGhuYW1lLCBtb2RlKTsKKyAgICBpZiAoZiA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAobWFrZV9ub25faW5oZXJpdGFibGUoZmlsZW5vKGYpKSA8IDApIHsKKyAgICAgICAgZmNsb3NlKGYpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcmV0dXJuIGY7Cit9CisKKy8qIE9wZW4gYSBmaWxlLiBDYWxsIF93Zm9wZW4oKSBvbiBXaW5kb3dzLCBvciBlbmNvZGUgdGhlIHBhdGggdG8gdGhlIGZpbGVzeXN0ZW0KKyAgIGVuY29kaW5nIGFuZCBjYWxsIGZvcGVuKCkgb3RoZXJ3aXNlLiBUaGUgZmlsZSBkZXNjcmlwdG9yIGlzIGNyZWF0ZWQKKyAgIG5vbi1pbmhlcml0YWJsZS4KIAogICAgUmV0dXJuIHRoZSBuZXcgZmlsZSBvYmplY3Qgb24gc3VjY2Vzcywgb3IgTlVMTCBpZiB0aGUgZmlsZSBjYW5ub3QgYmUgb3BlbiBvcgotICAgKGlmIFB5RXJyX09jY3VycmVkKCkpIG9uIHVuaWNvZGUgZXJyb3IgKi8KLQorICAgKGlmIFB5RXJyX09jY3VycmVkKCkpIG9uIHVuaWNvZGUgZXJyb3IuICovCiBGSUxFKgotX1B5X2ZvcGVuKFB5T2JqZWN0ICpwYXRoLCBjb25zdCBjaGFyICptb2RlKQorX1B5X2ZvcGVuX29iaihQeU9iamVjdCAqcGF0aCwgY29uc3QgY2hhciAqbW9kZSkKIHsKKyAgICBGSUxFICpmOwogI2lmZGVmIE1TX1dJTkRPV1MKICAgICB3Y2hhcl90ICp3cGF0aDsKICAgICB3Y2hhcl90IHdtb2RlWzEwXTsKQEAgLTYxMywxNiArODc0LDIxIEBACiAgICAgaWYgKHVzaXplID09IDApCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgcmV0dXJuIF93Zm9wZW4od3BhdGgsIHdtb2RlKTsKKyAgICBmID0gX3dmb3Blbih3cGF0aCwgd21vZGUpOwogI2Vsc2UKLSAgICBGSUxFICpmOwogICAgIFB5T2JqZWN0ICpieXRlczsKICAgICBpZiAoIVB5VW5pY29kZV9GU0NvbnZlcnRlcihwYXRoLCAmYnl0ZXMpKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBmID0gZm9wZW4oUHlCeXRlc19BU19TVFJJTkcoYnl0ZXMpLCBtb2RlKTsKICAgICBQeV9ERUNSRUYoYnl0ZXMpOwotICAgIHJldHVybiBmOwogI2VuZGlmCisgICAgaWYgKGYgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKG1ha2Vfbm9uX2luaGVyaXRhYmxlKGZpbGVubyhmKSkgPCAwKSB7CisgICAgICAgIGZjbG9zZShmKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJldHVybiBmOwogfQogCiAjaWZkZWYgSEFWRV9SRUFETElOSwpAQCAtNjU5LDEyICs5MjUsMTIgQEAKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KICAgICBpZiAoYnVmc2l6IDw9IHIxKSB7Ci0gICAgICAgIFB5TWVtX0ZyZWUod2J1Zik7CisgICAgICAgIFB5TWVtX1Jhd0ZyZWUod2J1Zik7CiAgICAgICAgIGVycm5vID0gRUlOVkFMOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogICAgIHdjc25jcHkoYnVmLCB3YnVmLCBidWZzaXopOwotICAgIFB5TWVtX0ZyZWUod2J1Zik7CisgICAgUHlNZW1fUmF3RnJlZSh3YnVmKTsKICAgICByZXR1cm4gKGludClyMTsKIH0KICNlbmRpZgpAQCAtNzAwLDEyICs5NjYsMTIgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIGlmIChyZXNvbHZlZF9wYXRoX3NpemUgPD0gcikgewotICAgICAgICBQeU1lbV9GcmVlKHdyZXNvbHZlZF9wYXRoKTsKKyAgICAgICAgUHlNZW1fUmF3RnJlZSh3cmVzb2x2ZWRfcGF0aCk7CiAgICAgICAgIGVycm5vID0gRUlOVkFMOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgd2NzbmNweShyZXNvbHZlZF9wYXRoLCB3cmVzb2x2ZWRfcGF0aCwgcmVzb2x2ZWRfcGF0aF9zaXplKTsKLSAgICBQeU1lbV9GcmVlKHdyZXNvbHZlZF9wYXRoKTsKKyAgICBQeU1lbV9SYXdGcmVlKHdyZXNvbHZlZF9wYXRoKTsKICAgICByZXR1cm4gcmVzb2x2ZWRfcGF0aDsKIH0KICNlbmRpZgpAQCAtNzE4LDcgKzk4NCw4IEBACiBfUHlfd2dldGN3ZCh3Y2hhcl90ICpidWYsIHNpemVfdCBzaXplKQogewogI2lmZGVmIE1TX1dJTkRPV1MKLSAgICByZXR1cm4gX3dnZXRjd2QoYnVmLCBzaXplKTsKKyAgICBpbnQgaXNpemUgPSAoaW50KVB5X01JTihzaXplLCBJTlRfTUFYKTsKKyAgICByZXR1cm4gX3dnZXRjd2QoYnVmLCBpc2l6ZSk7CiAjZWxzZQogICAgIGNoYXIgZm5hbWVbTUFYUEFUSExFTl07CiAgICAgd2NoYXJfdCAqd25hbWU7CkBAIC03MzAsMTIgKzk5Nyw4MSBAQAogICAgIGlmICh3bmFtZSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpZiAoc2l6ZSA8PSBsZW4pIHsKLSAgICAgICAgUHlNZW1fRnJlZSh3bmFtZSk7CisgICAgICAgIFB5TWVtX1Jhd0ZyZWUod25hbWUpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgd2NzbmNweShidWYsIHduYW1lLCBzaXplKTsKLSAgICBQeU1lbV9GcmVlKHduYW1lKTsKKyAgICBQeU1lbV9SYXdGcmVlKHduYW1lKTsKICAgICByZXR1cm4gYnVmOwogI2VuZGlmCiB9CiAKKy8qIER1cGxpY2F0ZSBhIGZpbGUgZGVzY3JpcHRvci4gVGhlIG5ldyBmaWxlIGRlc2NyaXB0b3IgaXMgY3JlYXRlZCBhcworICAgbm9uLWluaGVyaXRhYmxlLiBSZXR1cm4gYSBuZXcgZmlsZSBkZXNjcmlwdG9yIG9uIHN1Y2Nlc3MsIHJhaXNlIGFuIE9TRXJyb3IKKyAgIGV4Y2VwdGlvbiBhbmQgcmV0dXJuIC0xIG9uIGVycm9yLgorCisgICBUaGUgR0lMIGlzIHJlbGVhc2VkIHRvIGNhbGwgZHVwKCkuIFRoZSBjYWxsZXIgbXVzdCBob2xkIHRoZSBHSUwuICovCitpbnQKK19QeV9kdXAoaW50IGZkKQoreworI2lmZGVmIE1TX1dJTkRPV1MKKyAgICBIQU5ETEUgaGFuZGxlOworICAgIERXT1JEIGZ0eXBlOworI2VuZGlmCisKKyAgICBpZiAoIV9QeVZlcmlmeV9mZChmZCkpIHsKKyAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisjaWZkZWYgTVNfV0lORE9XUworICAgIGhhbmRsZSA9IChIQU5ETEUpX2dldF9vc2ZoYW5kbGUoZmQpOworICAgIGlmIChoYW5kbGUgPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpIHsKKyAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgLyogZ2V0IHRoZSBmaWxlIHR5cGUsIGlnbm9yZSB0aGUgZXJyb3IgaWYgaXQgZmFpbGVkICovCisgICAgZnR5cGUgPSBHZXRGaWxlVHlwZShoYW5kbGUpOworCisgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgIGZkID0gZHVwKGZkKTsKKyAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworICAgIGlmIChmZCA8IDApIHsKKyAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgLyogQ2hhcmFjdGVyIGZpbGVzIGxpa2UgY29uc29sZSBjYW5ub3QgYmUgbWFrZSBub24taW5oZXJpdGFibGUgKi8KKyAgICBpZiAoZnR5cGUgIT0gRklMRV9UWVBFX0NIQVIpIHsKKyAgICAgICAgaWYgKF9QeV9zZXRfaW5oZXJpdGFibGUoZmQsIDAsIE5VTEwpIDwgMCkgeworICAgICAgICAgICAgY2xvc2UoZmQpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgfQorI2VsaWYgZGVmaW5lZChIQVZFX0ZDTlRMX0gpICYmIGRlZmluZWQoRl9EVVBGRF9DTE9FWEVDKQorICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICBmZCA9IGZjbnRsKGZkLCBGX0RVUEZEX0NMT0VYRUMsIDApOworICAgIFB5X0VORF9BTExPV19USFJFQURTCisgICAgaWYgKGZkIDwgMCkgeworICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyNlbHNlCisgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgIGZkID0gZHVwKGZkKTsKKyAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworICAgIGlmIChmZCA8IDApIHsKKyAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKF9QeV9zZXRfaW5oZXJpdGFibGUoZmQsIDAsIE5VTEwpIDwgMCkgeworICAgICAgICBjbG9zZShmZCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisjZW5kaWYKKyAgICByZXR1cm4gZmQ7Cit9CisKZGlmZiAtLWdpdCBhL1B5dGhvbi9mb3JtYXR0ZXJfdW5pY29kZS5jIGIvUHl0aG9uL2Zvcm1hdHRlcl91bmljb2RlLmMKaW5kZXggYTY1MTZkYy4uZTNhODE0OSAxMDA2NDQKLS0tIGEvUHl0aG9uL2Zvcm1hdHRlcl91bmljb2RlLmMKKysrIGIvUHl0aG9uL2Zvcm1hdHRlcl91bmljb2RlLmMKQEAgLTE1Niw4ICsxNTYsOSBAQAogCiAgICAgUHlfc3NpemVfdCBjb25zdW1lZDsKICAgICBpbnQgYWxpZ25fc3BlY2lmaWVkID0gMDsKKyAgICBpbnQgZmlsbF9jaGFyX3NwZWNpZmllZCA9IDA7CiAKLSAgICBmb3JtYXQtPmZpbGxfY2hhciA9ICdcMCc7CisgICAgZm9ybWF0LT5maWxsX2NoYXIgPSAnICc7CiAgICAgZm9ybWF0LT5hbGlnbiA9IGRlZmF1bHRfYWxpZ247CiAgICAgZm9ybWF0LT5hbHRlcm5hdGUgPSAwOwogICAgIGZvcm1hdC0+c2lnbiA9ICdcMCc7CkBAIC0xNzEsNiArMTcyLDcgQEAKICAgICBpZiAoZW5kLXBvcyA+PSAyICYmIGlzX2FsaWdubWVudF90b2tlbihSRUFEX3NwZWMocG9zKzEpKSkgewogICAgICAgICBmb3JtYXQtPmFsaWduID0gUkVBRF9zcGVjKHBvcysxKTsKICAgICAgICAgZm9ybWF0LT5maWxsX2NoYXIgPSBSRUFEX3NwZWMocG9zKTsKKyAgICAgICAgZmlsbF9jaGFyX3NwZWNpZmllZCA9IDE7CiAgICAgICAgIGFsaWduX3NwZWNpZmllZCA9IDE7CiAgICAgICAgIHBvcyArPSAyOwogICAgIH0KQEAgLTE5NCw3ICsxOTYsNyBAQAogICAgIH0KIAogICAgIC8qIFRoZSBzcGVjaWFsIGNhc2UgZm9yIDAtcGFkZGluZyAoYmFja3dhcmRzIGNvbXBhdCkgKi8KLSAgICBpZiAoZm9ybWF0LT5maWxsX2NoYXIgPT0gJ1wwJyAmJiBlbmQtcG9zID49IDEgJiYgUkVBRF9zcGVjKHBvcykgPT0gJzAnKSB7CisgICAgaWYgKCFmaWxsX2NoYXJfc3BlY2lmaWVkICYmIGVuZC1wb3MgPj0gMSAmJiBSRUFEX3NwZWMocG9zKSA9PSAnMCcpIHsKICAgICAgICAgZm9ybWF0LT5maWxsX2NoYXIgPSAnMCc7CiAgICAgICAgIGlmICghYWxpZ25fc3BlY2lmaWVkKSB7CiAgICAgICAgICAgICBmb3JtYXQtPmFsaWduID0gJz0nOwpAQCAtMzE1LDcgKzMxNyw3IEBACiAKIC8qIERvIHRoZSBwYWRkaW5nLCBhbmQgcmV0dXJuIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgY2FsbGVyLXN1cHBsaWVkCiAgICBjb250ZW50IGdvZXMuICovCi1zdGF0aWMgUHlfc3NpemVfdAorc3RhdGljIGludAogZmlsbF9wYWRkaW5nKF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlciwKICAgICAgICAgICAgICBQeV9zc2l6ZV90IG5jaGFycywKICAgICAgICAgICAgICBQeV9VQ1M0IGZpbGxfY2hhciwgUHlfc3NpemVfdCBuX2xwYWRkaW5nLApAQCAtNTU2LDcgKzU1OCw3IEBACiB7CiAgICAgLyogVXNlZCB0byBrZWVwIHRyYWNrIG9mIGRpZ2l0cywgZGVjaW1hbCwgYW5kIHJlbWFpbmRlci4gKi8KICAgICBQeV9zc2l6ZV90IGRfcG9zID0gZF9zdGFydDsKLSAgICBjb25zdCBlbnVtIFB5VW5pY29kZV9LaW5kIGtpbmQgPSB3cml0ZXItPmtpbmQ7CisgICAgY29uc3QgdW5zaWduZWQgaW50IGtpbmQgPSB3cml0ZXItPmtpbmQ7CiAgICAgY29uc3Qgdm9pZCAqZGF0YSA9IHdyaXRlci0+ZGF0YTsKICAgICBQeV9zc2l6ZV90IHI7CiAKQEAgLTc1Nyw3ICs3NTksOCBAQAogICAgICAgICBnb3RvIGRvbmU7CiAgICAgfQogCi0gICAgaWYgKGZvcm1hdC0+d2lkdGggPT0gLTEgJiYgZm9ybWF0LT5wcmVjaXNpb24gPT0gLTEpIHsKKyAgICBpZiAoKGZvcm1hdC0+d2lkdGggPT0gLTEgfHwgZm9ybWF0LT53aWR0aCA8PSBsZW4pCisgICAgICAgICYmIChmb3JtYXQtPnByZWNpc2lvbiA9PSAtMSB8fCBmb3JtYXQtPnByZWNpc2lvbiA+PSBsZW4pKSB7CiAgICAgICAgIC8qIEZhc3QgcGF0aCAqLwogICAgICAgICByZXR1cm4gX1B5VW5pY29kZVdyaXRlcl9Xcml0ZVN0cih3cml0ZXIsIHZhbHVlKTsKICAgICB9CkBAIC03NzAsMTggKzc3MywyMCBAQAogCiAgICAgY2FsY19wYWRkaW5nKGxlbiwgZm9ybWF0LT53aWR0aCwgZm9ybWF0LT5hbGlnbiwgJmxwYWQsICZycGFkLCAmdG90YWwpOwogCi0gICAgbWF4Y2hhciA9IF9QeVVuaWNvZGVfRmluZE1heENoYXIodmFsdWUsIDAsIGxlbik7CisgICAgbWF4Y2hhciA9IHdyaXRlci0+bWF4Y2hhcjsKICAgICBpZiAobHBhZCAhPSAwIHx8IHJwYWQgIT0gMCkKICAgICAgICAgbWF4Y2hhciA9IFB5X01BWChtYXhjaGFyLCBmb3JtYXQtPmZpbGxfY2hhcik7CisgICAgaWYgKFB5VW5pY29kZV9NQVhfQ0hBUl9WQUxVRSh2YWx1ZSkgPiBtYXhjaGFyKSB7CisgICAgICAgIFB5X1VDUzQgdmFsbWF4Y2hhciA9IF9QeVVuaWNvZGVfRmluZE1heENoYXIodmFsdWUsIDAsIGxlbik7CisgICAgICAgIG1heGNoYXIgPSBQeV9NQVgobWF4Y2hhciwgdmFsbWF4Y2hhcik7CisgICAgfQogCiAgICAgLyogYWxsb2NhdGUgdGhlIHJlc3VsdGluZyBzdHJpbmcgKi8KICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9QcmVwYXJlKHdyaXRlciwgdG90YWwsIG1heGNoYXIpID09IC0xKQogICAgICAgICBnb3RvIGRvbmU7CiAKICAgICAvKiBXcml0ZSBpbnRvIHRoYXQgc3BhY2UuIEZpcnN0IHRoZSBwYWRkaW5nLiAqLwotICAgIHJlc3VsdCA9IGZpbGxfcGFkZGluZyh3cml0ZXIsIGxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0LT5maWxsX2NoYXI9PSdcMCc/JyAnOmZvcm1hdC0+ZmlsbF9jaGFyLAotICAgICAgICAgICAgICAgICAgICAgICAgICBscGFkLCBycGFkKTsKKyAgICByZXN1bHQgPSBmaWxsX3BhZGRpbmcod3JpdGVyLCBsZW4sIGZvcm1hdC0+ZmlsbF9jaGFyLCBscGFkLCBycGFkKTsKICAgICBpZiAocmVzdWx0ID09IC0xKQogICAgICAgICBnb3RvIGRvbmU7CiAKQEAgLTk1MSw4ICs5NTYsNyBAQAogICAgIC8qIFBvcHVsYXRlIHRoZSBtZW1vcnkuICovCiAgICAgcmVzdWx0ID0gZmlsbF9udW1iZXIod3JpdGVyLCAmc3BlYywKICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAsIGludW1lcmljX2NoYXJzLCBpbnVtZXJpY19jaGFycyArIG5fZGlnaXRzLAotICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCwgcHJlZml4LAotICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdC0+ZmlsbF9jaGFyID09ICdcMCcgPyAnICcgOiBmb3JtYXQtPmZpbGxfY2hhciwKKyAgICAgICAgICAgICAgICAgICAgICAgICB0bXAsIHByZWZpeCwgZm9ybWF0LT5maWxsX2NoYXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgJmxvY2FsZSwgZm9ybWF0LT50eXBlID09ICdYJyk7CiAKIGRvbmU6CkBAIC05NzcsOCArOTgxLDcgQEAKICAgICBQeV9zc2l6ZV90IG5fdG90YWw7CiAgICAgaW50IGhhc19kZWNpbWFsOwogICAgIGRvdWJsZSB2YWw7Ci0gICAgUHlfc3NpemVfdCBwcmVjaXNpb247Ci0gICAgUHlfc3NpemVfdCBkZWZhdWx0X3ByZWNpc2lvbiA9IDY7CisgICAgaW50IHByZWNpc2lvbiwgZGVmYXVsdF9wcmVjaXNpb24gPSA2OwogICAgIFB5X1VDUzQgdHlwZSA9IGZvcm1hdC0+dHlwZTsKICAgICBpbnQgYWRkX3BjdCA9IDA7CiAgICAgUHlfc3NpemVfdCBpbmRleDsKQEAgLTEwNDksMjQgKzEwNTIsMjQgQEAKICAgICAgICAgbl9kaWdpdHMgKz0gMTsKICAgICB9CiAKLSAgICAvKiBTaW5jZSB0aGVyZSBpcyBubyB1bmljb2RlIHZlcnNpb24gb2YgUHlPU19kb3VibGVfdG9fc3RyaW5nLAotICAgICAgIGp1c3QgdXNlIHRoZSA4IGJpdCB2ZXJzaW9uIGFuZCB0aGVuIGNvbnZlcnQgdG8gdW5pY29kZS4gKi8KLSAgICB1bmljb2RlX3RtcCA9IF9QeVVuaWNvZGVfRnJvbUFTQ0lJKGJ1Ziwgbl9kaWdpdHMpOwotICAgIFB5TWVtX0ZyZWUoYnVmKTsKLSAgICBpZiAodW5pY29kZV90bXAgPT0gTlVMTCkKLSAgICAgICAgZ290byBkb25lOwotCiAgICAgaWYgKGZvcm1hdC0+c2lnbiAhPSAnKycgJiYgZm9ybWF0LT5zaWduICE9ICcgJwogICAgICAgICAmJiBmb3JtYXQtPndpZHRoID09IC0xCiAgICAgICAgICYmIGZvcm1hdC0+dHlwZSAhPSAnbicKICAgICAgICAgJiYgIWZvcm1hdC0+dGhvdXNhbmRzX3NlcGFyYXRvcnMpCiAgICAgewogICAgICAgICAvKiBGYXN0IHBhdGggKi8KLSAgICAgICAgcmVzdWx0ID0gX1B5VW5pY29kZVdyaXRlcl9Xcml0ZVN0cih3cml0ZXIsIHVuaWNvZGVfdG1wKTsKLSAgICAgICAgUHlfREVDUkVGKHVuaWNvZGVfdG1wKTsKKyAgICAgICAgcmVzdWx0ID0gX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUFTQ0lJU3RyaW5nKHdyaXRlciwgYnVmLCBuX2RpZ2l0cyk7CisgICAgICAgIFB5TWVtX0ZyZWUoYnVmKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKKyAgICAvKiBTaW5jZSB0aGVyZSBpcyBubyB1bmljb2RlIHZlcnNpb24gb2YgUHlPU19kb3VibGVfdG9fc3RyaW5nLAorICAgICAgIGp1c3QgdXNlIHRoZSA4IGJpdCB2ZXJzaW9uIGFuZCB0aGVuIGNvbnZlcnQgdG8gdW5pY29kZS4gKi8KKyAgICB1bmljb2RlX3RtcCA9IF9QeVVuaWNvZGVfRnJvbUFTQ0lJKGJ1Ziwgbl9kaWdpdHMpOworICAgIFB5TWVtX0ZyZWUoYnVmKTsKKyAgICBpZiAodW5pY29kZV90bXAgPT0gTlVMTCkKKyAgICAgICAgZ290byBkb25lOworCiAgICAgLyogSXMgYSBzaWduIGNoYXJhY3RlciBwcmVzZW50IGluIHRoZSBvdXRwdXQ/ICBJZiBzbywgcmVtZW1iZXIgaXQKICAgICAgICBhbmQgc2tpcCBpdCAqLwogICAgIGluZGV4ID0gMDsKQEAgLTExMDAsOCArMTEwMyw3IEBACiAgICAgLyogUG9wdWxhdGUgdGhlIG1lbW9yeS4gKi8KICAgICByZXN1bHQgPSBmaWxsX251bWJlcih3cml0ZXIsICZzcGVjLAogICAgICAgICAgICAgICAgICAgICAgICAgIHVuaWNvZGVfdG1wLCBpbmRleCwgaW5kZXggKyBuX2RpZ2l0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdC0+ZmlsbF9jaGFyID09ICdcMCcgPyAnICcgOiBmb3JtYXQtPmZpbGxfY2hhciwKKyAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwLCBmb3JtYXQtPmZpbGxfY2hhciwKICAgICAgICAgICAgICAgICAgICAgICAgICAmbG9jYWxlLCAwKTsKIAogZG9uZToKQEAgLTExMzMsOCArMTEzNSw3IEBACiAgICAgUHlfc3NpemVfdCBuX2ltX3RvdGFsOwogICAgIGludCByZV9oYXNfZGVjaW1hbDsKICAgICBpbnQgaW1faGFzX2RlY2ltYWw7Ci0gICAgaW50IHByZWNpc2lvbjsKLSAgICBQeV9zc2l6ZV90IGRlZmF1bHRfcHJlY2lzaW9uID0gNjsKKyAgICBpbnQgcHJlY2lzaW9uLCBkZWZhdWx0X3ByZWNpc2lvbiA9IDY7CiAgICAgUHlfVUNTNCB0eXBlID0gZm9ybWF0LT50eXBlOwogICAgIFB5X3NzaXplX3QgaV9yZTsKICAgICBQeV9zc2l6ZV90IGlfaW07CkBAIC0xMzA4LDggKzEzMDksNyBAQAogICAgIC8qIFBvcHVsYXRlIHRoZSBtZW1vcnkuIEZpcnN0LCB0aGUgcGFkZGluZy4gKi8KICAgICByZXN1bHQgPSBmaWxsX3BhZGRpbmcod3JpdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICBuX3JlX3RvdGFsICsgbl9pbV90b3RhbCArIDEgKyBhZGRfcGFyZW5zICogMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0LT5maWxsX2NoYXI9PSdcMCcgPyAnICcgOiBmb3JtYXQtPmZpbGxfY2hhciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgbHBhZCwgcnBhZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdC0+ZmlsbF9jaGFyLCBscGFkLCBycGFkKTsKICAgICBpZiAocmVzdWx0ID09IC0xKQogICAgICAgICBnb3RvIGRvbmU7CiAKZGlmZiAtLWdpdCBhL1B5dGhvbi9mcm96ZW4uYyBiL1B5dGhvbi9mcm96ZW4uYwppbmRleCAyNWZkYzE3Li45YmM2NjJiIDEwMDY0NAotLS0gYS9QeXRob24vZnJvemVuLmMKKysrIGIvUHl0aG9uL2Zyb3plbi5jCkBAIC0yOCw3ICsyOCw3IEBACiAKICNkZWZpbmUgU0laRSAoaW50KXNpemVvZihNX19faGVsbG9fXykKIAotc3RhdGljIHN0cnVjdCBfZnJvemVuIF9QeUltcG9ydF9Gcm96ZW5Nb2R1bGVzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IF9mcm96ZW4gX1B5SW1wb3J0X0Zyb3plbk1vZHVsZXNbXSA9IHsKICAgICAvKiBpbXBvcnRsaWIgKi8KICAgICB7Il9mcm96ZW5faW1wb3J0bGliIiwgX1B5X01fX2ltcG9ydGxpYiwgKGludClzaXplb2YoX1B5X01fX2ltcG9ydGxpYil9LAogICAgIC8qIFRlc3QgbW9kdWxlICovCkBAIC00Miw0ICs0Miw0IEBACiAvKiBFbWJlZGRpbmcgYXBwcyBtYXkgY2hhbmdlIHRoaXMgcG9pbnRlciB0byBwb2ludCB0byB0aGVpciBmYXZvcml0ZQogICAgY29sbGVjdGlvbiBvZiBmcm96ZW4gbW9kdWxlczogKi8KIAotc3RydWN0IF9mcm96ZW4gKlB5SW1wb3J0X0Zyb3plbk1vZHVsZXMgPSBfUHlJbXBvcnRfRnJvemVuTW9kdWxlczsKK2NvbnN0IHN0cnVjdCBfZnJvemVuICpQeUltcG9ydF9Gcm96ZW5Nb2R1bGVzID0gX1B5SW1wb3J0X0Zyb3plbk1vZHVsZXM7CmRpZmYgLS1naXQgYS9QeXRob24vZnJvemVubWFpbi5jIGIvUHl0aG9uL2Zyb3plbm1haW4uYwppbmRleCA4YjFmMmQ0Li5iMDVjOTRhIDEwMDY0NAotLS0gYS9QeXRob24vZnJvemVubWFpbi5jCisrKyBiL1B5dGhvbi9mcm96ZW5tYWluLmMKQEAgLTE2LDE5ICsxNiwyMSBAQAogUHlfRnJvemVuTWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiB7CiAgICAgY2hhciAqcDsKLSAgICBpbnQgaSwgbiwgc3RzOworICAgIGludCBpLCBuLCBzdHMgPSAxOwogICAgIGludCBpbnNwZWN0ID0gMDsKICAgICBpbnQgdW5idWZmZXJlZCA9IDA7Ci0gICAgY2hhciAqb2xkbG9jOwotICAgIHdjaGFyX3QgKiphcmd2X2NvcHk7CisgICAgY2hhciAqb2xkbG9jID0gTlVMTDsKKyAgICB3Y2hhcl90ICoqYXJndl9jb3B5ID0gTlVMTDsKICAgICAvKiBXZSBuZWVkIGEgc2Vjb25kIGNvcGllcywgYXMgUHl0aG9uIG1pZ2h0IG1vZGlmeSB0aGUgZmlyc3Qgb25lLiAqLwotICAgIHdjaGFyX3QgKiphcmd2X2NvcHkyOworICAgIHdjaGFyX3QgKiphcmd2X2NvcHkyID0gTlVMTDsKIAotICAgIGFyZ3ZfY29weSA9IFB5TWVtX01hbGxvYyhzaXplb2Yod2NoYXJfdCopKmFyZ2MpOwotICAgIGFyZ3ZfY29weTIgPSBQeU1lbV9NYWxsb2Moc2l6ZW9mKHdjaGFyX3QqKSphcmdjKTsKLSAgICBpZiAoIWFyZ3ZfY29weSB8fCAhYXJndl9jb3B5MikgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIm91dCBvZiBtZW1vcnlcbiIpOwotICAgICAgICByZXR1cm4gMTsKKyAgICBpZiAoYXJnYyA+IDApIHsKKyAgICAgICAgYXJndl9jb3B5ID0gUHlNZW1fUmF3TWFsbG9jKHNpemVvZih3Y2hhcl90KikgKiBhcmdjKTsKKyAgICAgICAgYXJndl9jb3B5MiA9IFB5TWVtX1Jhd01hbGxvYyhzaXplb2Yod2NoYXJfdCopICogYXJnYyk7CisgICAgICAgIGlmICghYXJndl9jb3B5IHx8ICFhcmd2X2NvcHkyKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIm91dCBvZiBtZW1vcnlcbiIpOworICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQogICAgIH0KIAogICAgIFB5X0Zyb3plbkZsYWcgPSAxOyAvKiBTdXBwcmVzcyBlcnJvcnMgZnJvbSBnZXRwYXRoLmMgKi8KQEAgLTQ0LDM3ICs0NiwzMiBAQAogICAgICAgICBzZXRidWYoc3RkZXJyLCAoY2hhciAqKU5VTEwpOwogICAgIH0KIAotICAgIG9sZGxvYyA9IHNldGxvY2FsZShMQ19BTEwsIE5VTEwpOworICAgIG9sZGxvYyA9IF9QeU1lbV9SYXdTdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOworICAgIGlmICghb2xkbG9jKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAib3V0IG9mIG1lbW9yeVxuIik7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorCiAgICAgc2V0bG9jYWxlKExDX0FMTCwgIiIpOwogICAgIGZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyspIHsKLSNpZmRlZiBIQVZFX0JST0tFTl9NQlNUT1dDUwotICAgICAgICBzaXplX3QgYXJnc2l6ZSA9IHN0cmxlbihhcmd2W2ldKTsKLSNlbHNlCi0gICAgICAgIHNpemVfdCBhcmdzaXplID0gbWJzdG93Y3MoTlVMTCwgYXJndltpXSwgMCk7Ci0jZW5kaWYKLSAgICAgICAgc2l6ZV90IGNvdW50OwotICAgICAgICBpZiAoYXJnc2l6ZSA9PSAoc2l6ZV90KS0xKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkIG5vdCBjb252ZXJ0IGFyZ3VtZW50ICVkIHRvIHN0cmluZ1xuIiwgaSk7Ci0gICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgfQotICAgICAgICBhcmd2X2NvcHlbaV0gPSBQeU1lbV9NYWxsb2MoKGFyZ3NpemUrMSkqc2l6ZW9mKHdjaGFyX3QpKTsKKyAgICAgICAgYXJndl9jb3B5W2ldID0gX1B5X2NoYXIyd2NoYXIoYXJndltpXSwgTlVMTCk7CiAgICAgICAgIGFyZ3ZfY29weTJbaV0gPSBhcmd2X2NvcHlbaV07CiAgICAgICAgIGlmICghYXJndl9jb3B5W2ldKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIm91dCBvZiBtZW1vcnlcbiIpOwotICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgIH0KLSAgICAgICAgY291bnQgPSBtYnN0b3djcyhhcmd2X2NvcHlbaV0sIGFyZ3ZbaV0sIGFyZ3NpemUrMSk7Ci0gICAgICAgIGlmIChjb3VudCA9PSAoc2l6ZV90KS0xKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkIG5vdCBjb252ZXJ0IGFyZ3VtZW50ICVkIHRvIHN0cmluZ1xuIiwgaSk7Ci0gICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiVW5hYmxlIHRvIGRlY29kZSB0aGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50ICMlaVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpICsgMSk7CisgICAgICAgICAgICBhcmdjID0gaTsKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgIH0KICAgICB9CiAgICAgc2V0bG9jYWxlKExDX0FMTCwgb2xkbG9jKTsKKyAgICBQeU1lbV9SYXdGcmVlKG9sZGxvYyk7CisgICAgb2xkbG9jID0gTlVMTDsKIAogI2lmZGVmIE1TX1dJTkRPV1MKICAgICBQeUluaXRGcm96ZW5FeHRlbnNpb25zKCk7CiAjZW5kaWYgLyogTVNfV0lORE9XUyAqLwotICAgIFB5X1NldFByb2dyYW1OYW1lKGFyZ3ZfY29weVswXSk7CisgICAgaWYgKGFyZ2MgPj0gMSkKKyAgICAgICAgUHlfU2V0UHJvZ3JhbU5hbWUoYXJndl9jb3B5WzBdKTsKICAgICBQeV9Jbml0aWFsaXplKCk7CiAjaWZkZWYgTVNfV0lORE9XUwogICAgIFB5V2luRnJlZXplX0V4ZUluaXQoKTsKQEAgLTEwMywxMCArMTAwLDE0IEBACiAgICAgUHlXaW5GcmVlemVfRXhlVGVybSgpOwogI2VuZGlmCiAgICAgUHlfRmluYWxpemUoKTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgYXJnYzsgaSsrKSB7Ci0gICAgICAgIFB5TWVtX0ZyZWUoYXJndl9jb3B5MltpXSk7CisKK2Vycm9yOgorICAgIFB5TWVtX1Jhd0ZyZWUoYXJndl9jb3B5KTsKKyAgICBpZiAoYXJndl9jb3B5MikgeworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYXJnYzsgaSsrKQorICAgICAgICAgICAgUHlNZW1fUmF3RnJlZShhcmd2X2NvcHkyW2ldKTsKKyAgICAgICAgUHlNZW1fUmF3RnJlZShhcmd2X2NvcHkyKTsKICAgICB9Ci0gICAgUHlNZW1fRnJlZShhcmd2X2NvcHkpOwotICAgIFB5TWVtX0ZyZWUoYXJndl9jb3B5Mik7CisgICAgUHlNZW1fUmF3RnJlZShvbGRsb2MpOwogICAgIHJldHVybiBzdHM7CiB9CmRpZmYgLS1naXQgYS9QeXRob24vZnV0dXJlLmMgYi9QeXRob24vZnV0dXJlLmMKaW5kZXggZDI0YWU0MS4uODFlYWI1NCAxMDA2NDQKLS0tIGEvUHl0aG9uL2Z1dHVyZS5jCisrKyBiL1B5dGhvbi9mdXR1cmUuYwpAQCAtMTEsNyArMTEsNyBAQAogImZyb20gX19mdXR1cmVfXyBpbXBvcnRzIG11c3Qgb2NjdXIgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZSIKIAogc3RhdGljIGludAotZnV0dXJlX2NoZWNrX2ZlYXR1cmVzKFB5RnV0dXJlRmVhdHVyZXMgKmZmLCBzdG10X3R5IHMsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQorZnV0dXJlX2NoZWNrX2ZlYXR1cmVzKFB5RnV0dXJlRmVhdHVyZXMgKmZmLCBzdG10X3R5IHMsIFB5T2JqZWN0ICpmaWxlbmFtZSkKIHsKICAgICBpbnQgaTsKICAgICBhc2RsX3NlcSAqbmFtZXM7CkBAIC00MywxMiArNDMsMTIgQEAKICAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAoZmVhdHVyZSwgImJyYWNlcyIpID09IDApIHsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19TeW50YXhFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibm90IGEgY2hhbmNlIik7Ci0gICAgICAgICAgICBQeUVycl9TeW50YXhMb2NhdGlvbkV4KGZpbGVuYW1lLCBzLT5saW5lbm8sIHMtPmNvbF9vZmZzZXQpOworICAgICAgICAgICAgUHlFcnJfU3ludGF4TG9jYXRpb25PYmplY3QoZmlsZW5hbWUsIHMtPmxpbmVubywgcy0+Y29sX29mZnNldCk7CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19TeW50YXhFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICBVTkRFRklORURfRlVUVVJFX0ZFQVRVUkUsIGZlYXR1cmUpOwotICAgICAgICAgICAgUHlFcnJfU3ludGF4TG9jYXRpb25FeChmaWxlbmFtZSwgcy0+bGluZW5vLCBzLT5jb2xfb2Zmc2V0KTsKKyAgICAgICAgICAgIFB5RXJyX1N5bnRheExvY2F0aW9uT2JqZWN0KGZpbGVuYW1lLCBzLT5saW5lbm8sIHMtPmNvbF9vZmZzZXQpOwogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KICAgICB9CkBAIC01NiwxMyArNTYsMTcgQEAKIH0KIAogc3RhdGljIGludAotZnV0dXJlX3BhcnNlKFB5RnV0dXJlRmVhdHVyZXMgKmZmLCBtb2RfdHkgbW9kLCBjb25zdCBjaGFyICpmaWxlbmFtZSkKK2Z1dHVyZV9wYXJzZShQeUZ1dHVyZUZlYXR1cmVzICpmZiwgbW9kX3R5IG1vZCwgUHlPYmplY3QgKmZpbGVuYW1lKQogewotICAgIGludCBpLCBmb3VuZF9kb2NzdHJpbmcgPSAwLCBkb25lID0gMCwgcHJldl9saW5lID0gMDsKKyAgICBpbnQgaSwgZG9uZSA9IDAsIHByZXZfbGluZSA9IDA7CisgICAgc3RtdF90eSBmaXJzdDsKIAogICAgIGlmICghKG1vZC0+a2luZCA9PSBNb2R1bGVfa2luZCB8fCBtb2QtPmtpbmQgPT0gSW50ZXJhY3RpdmVfa2luZCkpCiAgICAgICAgIHJldHVybiAxOwogCisgICAgaWYgKGFzZGxfc2VxX0xFTihtb2QtPnYuTW9kdWxlLmJvZHkpID09IDApCisgICAgICAgIHJldHVybiAxOworCiAgICAgLyogQSBzdWJzZXF1ZW50IHBhc3Mgd2lsbCBkZXRlY3QgZnV0dXJlIGltcG9ydHMgdGhhdCBkb24ndAogICAgICAgIGFwcGVhciBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlLiAgVGhlcmUncyBvbmUgY2FzZSwKICAgICAgICBob3dldmVyLCB0aGF0IGlzIGVhc2llciB0byBoYW5kbGUgaGVyZTogQSBzZXJpZXMgb2YgaW1wb3J0cwpAQCAtNzEsOCArNzUsMTMgQEAKICAgICAgICBidXQgaXMgcHJlY2VkZWQgYnkgYSByZWd1bGFyIGltcG9ydC4KICAgICAqLwogCisgICAgaSA9IDA7CisgICAgZmlyc3QgPSAoc3RtdF90eSlhc2RsX3NlcV9HRVQobW9kLT52Lk1vZHVsZS5ib2R5LCBpKTsKKyAgICBpZiAoZmlyc3QtPmtpbmQgPT0gRXhwcl9raW5kICYmIGZpcnN0LT52LkV4cHIudmFsdWUtPmtpbmQgPT0gU3RyX2tpbmQpCisgICAgICAgIGkrKzsKIAotICAgIGZvciAoaSA9IDA7IGkgPCBhc2RsX3NlcV9MRU4obW9kLT52Lk1vZHVsZS5ib2R5KTsgaSsrKSB7CisKKyAgICBmb3IgKDsgaSA8IGFzZGxfc2VxX0xFTihtb2QtPnYuTW9kdWxlLmJvZHkpOyBpKyspIHsKICAgICAgICAgc3RtdF90eSBzID0gKHN0bXRfdHkpYXNkbF9zZXFfR0VUKG1vZC0+di5Nb2R1bGUuYm9keSwgaSk7CiAKICAgICAgICAgaWYgKGRvbmUgJiYgcy0+bGluZW5vID4gcHJldl9saW5lKQpAQCAtOTIsMzIgKzEwMSwyNyBAQAogICAgICAgICAgICAgICAgIGlmIChkb25lKSB7CiAgICAgICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19TeW50YXhFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVSUl9MQVRFX0ZVVFVSRSk7Ci0gICAgICAgICAgICAgICAgICAgIFB5RXJyX1N5bnRheExvY2F0aW9uRXgoZmlsZW5hbWUsIHMtPmxpbmVubywgcy0+Y29sX29mZnNldCk7CisgICAgICAgICAgICAgICAgICAgIFB5RXJyX1N5bnRheExvY2F0aW9uT2JqZWN0KGZpbGVuYW1lLCBzLT5saW5lbm8sIHMtPmNvbF9vZmZzZXQpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKCFmdXR1cmVfY2hlY2tfZmVhdHVyZXMoZmYsIHMsIGZpbGVuYW1lKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICAgZmYtPmZmX2xpbmVubyA9IHMtPmxpbmVubzsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIGRvbmUgPSAxOworICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHMtPmtpbmQgPT0gRXhwcl9raW5kICYmICFmb3VuZF9kb2NzdHJpbmcpIHsKLSAgICAgICAgICAgIGV4cHJfdHkgZSA9IHMtPnYuRXhwci52YWx1ZTsKLSAgICAgICAgICAgIGlmIChlLT5raW5kICE9IFN0cl9raW5kKQotICAgICAgICAgICAgICAgIGRvbmUgPSAxOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGZvdW5kX2RvY3N0cmluZyA9IDE7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQorICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIGRvbmUgPSAxOworICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiAxOwogfQogCiAKIFB5RnV0dXJlRmVhdHVyZXMgKgotUHlGdXR1cmVfRnJvbUFTVChtb2RfdHkgbW9kLCBjb25zdCBjaGFyICpmaWxlbmFtZSkKK1B5RnV0dXJlX0Zyb21BU1RPYmplY3QobW9kX3R5IG1vZCwgUHlPYmplY3QgKmZpbGVuYW1lKQogewogICAgIFB5RnV0dXJlRmVhdHVyZXMgKmZmOwogCkBAIC0xMzUsMyArMTM5LDE4IEBACiAgICAgfQogICAgIHJldHVybiBmZjsKIH0KKworCitQeUZ1dHVyZUZlYXR1cmVzICoKK1B5RnV0dXJlX0Zyb21BU1QobW9kX3R5IG1vZCwgY29uc3QgY2hhciAqZmlsZW5hbWVfc3RyKQoreworICAgIFB5RnV0dXJlRmVhdHVyZXMgKmZmOworICAgIFB5T2JqZWN0ICpmaWxlbmFtZTsKKworICAgIGZpbGVuYW1lID0gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdChmaWxlbmFtZV9zdHIpOworICAgIGlmIChmaWxlbmFtZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBmZiA9IFB5RnV0dXJlX0Zyb21BU1RPYmplY3QobW9kLCBmaWxlbmFtZSk7CisgICAgUHlfREVDUkVGKGZpbGVuYW1lKTsKKyAgICByZXR1cm4gZmY7Cit9CmRpZmYgLS1naXQgYS9QeXRob24vZ2V0YXJncy5jIGIvUHl0aG9uL2dldGFyZ3MuYwppbmRleCBhZTkzMWI5Li42OTAyZDEzIDEwMDY0NAotLS0gYS9QeXRob24vZ2V0YXJncy5jCisrKyBiL1B5dGhvbi9nZXRhcmdzLmMKQEAgLTQ2LDE0ICs0NiwxNiBAQAogfSBmcmVlbGlzdGVudHJ5X3Q7CiAKIHR5cGVkZWYgc3RydWN0IHsKLSAgaW50IGZpcnN0X2F2YWlsYWJsZTsKICAgZnJlZWxpc3RlbnRyeV90ICplbnRyaWVzOworICBpbnQgZmlyc3RfYXZhaWxhYmxlOworICBpbnQgZW50cmllc19tYWxsb2NlZDsKIH0gZnJlZWxpc3RfdDsKIAorI2RlZmluZSBTVEFUSUNfRlJFRUxJU1RfRU5UUklFUyA4CiAKIC8qIEZvcndhcmQgKi8KIHN0YXRpYyBpbnQgdmdldGFyZ3MxKFB5T2JqZWN0ICosIGNvbnN0IGNoYXIgKiwgdmFfbGlzdCAqLCBpbnQpOwotc3RhdGljIHZvaWQgc2V0ZXJyb3IoaW50LCBjb25zdCBjaGFyICosIGludCAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CitzdGF0aWMgdm9pZCBzZXRlcnJvcihQeV9zc2l6ZV90LCBjb25zdCBjaGFyICosIGludCAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CiBzdGF0aWMgY2hhciAqY29udmVydGl0ZW0oUHlPYmplY3QgKiwgY29uc3QgY2hhciAqKiwgdmFfbGlzdCAqLCBpbnQsIGludCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiwgc2l6ZV90LCBmcmVlbGlzdF90ICopOwogc3RhdGljIGNoYXIgKmNvbnZlcnR0dXBsZShQeU9iamVjdCAqLCBjb25zdCBjaGFyICoqLCB2YV9saXN0ICosIGludCwKQEAgLTE4Nyw3ICsxODksOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyZWVsaXN0LT5lbnRyaWVzW2luZGV4XS5pdGVtKTsKICAgICAgIH0KICAgICB9Ci0gICAgUHlNZW1fRlJFRShmcmVlbGlzdC0+ZW50cmllcyk7CisgICAgaWYgKGZyZWVsaXN0LT5lbnRyaWVzX21hbGxvY2VkKQorICAgICAgICBQeU1lbV9GUkVFKGZyZWVsaXN0LT5lbnRyaWVzKTsKICAgICByZXR1cm4gcmV0dmFsOwogfQogCkBAIC0yMDYsOCArMjA5LDEzIEBACiAgICAgY29uc3QgY2hhciAqZm9ybWF0c2F2ZSA9IGZvcm1hdDsKICAgICBQeV9zc2l6ZV90IGksIGxlbjsKICAgICBjaGFyICptc2c7Ci0gICAgZnJlZWxpc3RfdCBmcmVlbGlzdCA9IHswLCBOVUxMfTsKICAgICBpbnQgY29tcGF0ID0gZmxhZ3MgJiBGTEFHX0NPTVBBVDsKKyAgICBmcmVlbGlzdGVudHJ5X3Qgc3RhdGljX2VudHJpZXNbU1RBVElDX0ZSRUVMSVNUX0VOVFJJRVNdOworICAgIGZyZWVsaXN0X3QgZnJlZWxpc3Q7CisKKyAgICBmcmVlbGlzdC5lbnRyaWVzID0gc3RhdGljX2VudHJpZXM7CisgICAgZnJlZWxpc3QuZmlyc3RfYXZhaWxhYmxlID0gMDsKKyAgICBmcmVlbGlzdC5lbnRyaWVzX21hbGxvY2VkID0gMDsKIAogICAgIGFzc2VydChjb21wYXQgfHwgKGFyZ3MgIT0gKFB5T2JqZWN0KilOVUxMKSk7CiAgICAgZmxhZ3MgPSBmbGFncyAmIH5GTEFHX0NPTVBBVDsKQEAgLTI0MCwxNSArMjQ4LDE1IEBACiAgICAgICAgICAgICBtZXNzYWdlID0gZm9ybWF0OwogICAgICAgICAgICAgZW5kZm10ID0gMTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICd8JzoKKyAgICAgICAgICAgIGlmIChsZXZlbCA9PSAwKQorICAgICAgICAgICAgICAgIG1pbiA9IG1heDsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgaWYgKGxldmVsID09IDApIHsKLSAgICAgICAgICAgICAgICBpZiAoYyA9PSAnTycpCi0gICAgICAgICAgICAgICAgICAgIG1heCsrOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKFB5X0lTQUxQSEEoUHlfQ0hBUk1BU0soYykpKSB7CisgICAgICAgICAgICAgICAgaWYgKFB5X0lTQUxQSEEoUHlfQ0hBUk1BU0soYykpKQogICAgICAgICAgICAgICAgICAgICBpZiAoYyAhPSAnZScpIC8qIHNraXAgZW5jb2RlZCAqLwogICAgICAgICAgICAgICAgICAgICAgICAgbWF4Kys7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjID09ICd8JykKLSAgICAgICAgICAgICAgICAgICAgbWluID0gbWF4OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTI2MiwxMCArMjcwLDEzIEBACiAKICAgICBmb3JtYXQgPSBmb3JtYXRzYXZlOwogCi0gICAgZnJlZWxpc3QuZW50cmllcyA9IFB5TWVtX05FVyhmcmVlbGlzdGVudHJ5X3QsIG1heCk7Ci0gICAgaWYgKGZyZWVsaXN0LmVudHJpZXMgPT0gTlVMTCkgewotICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwotICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAobWF4ID4gU1RBVElDX0ZSRUVMSVNUX0VOVFJJRVMpIHsKKyAgICAgICAgZnJlZWxpc3QuZW50cmllcyA9IFB5TWVtX05FVyhmcmVlbGlzdGVudHJ5X3QsIG1heCk7CisgICAgICAgIGlmIChmcmVlbGlzdC5lbnRyaWVzID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICBmcmVlbGlzdC5lbnRyaWVzX21hbGxvY2VkID0gMTsKICAgICB9CiAKICAgICBpZiAoY29tcGF0KSB7CkBAIC0zNTAsNyArMzYxLDcgQEAKIAogCiBzdGF0aWMgdm9pZAotc2V0ZXJyb3IoaW50IGlhcmcsIGNvbnN0IGNoYXIgKm1zZywgaW50ICpsZXZlbHMsIGNvbnN0IGNoYXIgKmZuYW1lLAorc2V0ZXJyb3IoUHlfc3NpemVfdCBpYXJnLCBjb25zdCBjaGFyICptc2csIGludCAqbGV2ZWxzLCBjb25zdCBjaGFyICpmbmFtZSwKICAgICAgICAgIGNvbnN0IGNoYXIgKm1lc3NhZ2UpCiB7CiAgICAgY2hhciBidWZbNTEyXTsKQEAgLTM2NiwxMCArMzc3LDEwIEBACiAgICAgICAgIH0KICAgICAgICAgaWYgKGlhcmcgIT0gMCkgewogICAgICAgICAgICAgUHlPU19zbnByaW50ZihwLCBzaXplb2YoYnVmKSAtIChwIC0gYnVmKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgImFyZ3VtZW50ICVkIiwgaWFyZyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICJhcmd1bWVudCAlIiBQWV9GT1JNQVRfU0laRV9UICJkIiwgaWFyZyk7CiAgICAgICAgICAgICBpID0gMDsKICAgICAgICAgICAgIHAgKz0gc3RybGVuKHApOwotICAgICAgICAgICAgd2hpbGUgKGxldmVsc1tpXSA+IDAgJiYgaSA8IDMyICYmIChpbnQpKHAtYnVmKSA8IDIyMCkgeworICAgICAgICAgICAgd2hpbGUgKGkgPCAzMiAmJiBsZXZlbHNbaV0gPiAwICYmIChpbnQpKHAtYnVmKSA8IDIyMCkgewogICAgICAgICAgICAgICAgIFB5T1Nfc25wcmludGYocCwgc2l6ZW9mKGJ1ZikgLSAocCAtIGJ1ZiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLCBpdGVtICVkIiwgbGV2ZWxzW2ldLTEpOwogICAgICAgICAgICAgICAgIHAgKz0gc3RybGVuKHApOwpAQCAtNDE0LDYgKzQyNSw3IEBACiAgICAgaW50IG4gPSAwOwogICAgIGNvbnN0IGNoYXIgKmZvcm1hdCA9ICpwX2Zvcm1hdDsKICAgICBpbnQgaTsKKyAgICBQeV9zc2l6ZV90IGxlbjsKIAogICAgIGZvciAoOzspIHsKICAgICAgICAgaW50IGMgPSAqZm9ybWF0Kys7CkBAIC00NDMsMTIgKzQ1NSwyMCBAQAogICAgICAgICByZXR1cm4gbXNnYnVmOwogICAgIH0KIAotICAgIGlmICgoaSA9IFB5U2VxdWVuY2VfU2l6ZShhcmcpKSAhPSBuKSB7CisgICAgbGVuID0gUHlTZXF1ZW5jZV9TaXplKGFyZyk7CisgICAgaWYgKGxlbiAhPSBuKSB7CiAgICAgICAgIGxldmVsc1swXSA9IDA7Ci0gICAgICAgIFB5T1Nfc25wcmludGYobXNnYnVmLCBidWZzaXplLAotICAgICAgICAgICAgICAgICAgICAgIHRvcGxldmVsID8gImV4cGVjdGVkICVkIGFyZ3VtZW50cywgbm90ICVkIiA6Ci0gICAgICAgICAgICAgICAgICAgICAibXVzdCBiZSBzZXF1ZW5jZSBvZiBsZW5ndGggJWQsIG5vdCAlZCIsCi0gICAgICAgICAgICAgICAgICBuLCBpKTsKKyAgICAgICAgaWYgKHRvcGxldmVsKSB7CisgICAgICAgICAgICBQeU9TX3NucHJpbnRmKG1zZ2J1ZiwgYnVmc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkICVkIGFyZ3VtZW50cywgbm90ICUiIFBZX0ZPUk1BVF9TSVpFX1QgImQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBuLCBsZW4pOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgUHlPU19zbnByaW50Zihtc2didWYsIGJ1ZnNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJtdXN0IGJlIHNlcXVlbmNlIG9mIGxlbmd0aCAlZCwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAibm90ICUiIFBZX0ZPUk1BVF9TSVpFX1QgImQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBuLCBsZW4pOworICAgICAgICB9CiAgICAgICAgIHJldHVybiBtc2didWY7CiAgICAgfQogCkBAIC01NjMsNyArNTgzLDcgQEAKICAgICAgICAgICAgICAgICAic2l6ZSBkb2VzIG5vdCBmaXQgaW4gYW4gaW50Iik7IFwKICAgICAgICAgICAgIHJldHVybiBjb252ZXJ0ZXJyKCIiLCBhcmcsIG1zZ2J1ZiwgYnVmc2l6ZSk7IFwKICAgICAgICAgfSBcCi0gICAgICAgICpxPXM7IFwKKyAgICAgICAgKnEgPSAoaW50KXM7IFwKICAgICB9CiAjZGVmaW5lIEJVRkZFUl9MRU4gICAgICAoKGZsYWdzICYgRkxBR19TSVpFX1QpID8gKnEyOipxKQogI2RlZmluZSBSRVRVUk5fRVJSX09DQ1VSUkVEIHJldHVybiBtc2didWYKQEAgLTgyOSw3ICs4NDksNyBAQAogICAgIC8qIFhYWCBXQUFBQUghICAncycsICd5JywgJ3onLCAndScsICdaJywgJ2UnLCAndycgY29kZXMgYWxsCiAgICAgICAgbmVlZCB0byBiZSBjbGVhbmVkIHVwISAqLwogCi0gICAgY2FzZSAneSc6IHsvKiBhbnkgYnVmZmVyLWxpa2Ugb2JqZWN0LCBidXQgbm90IFB5VW5pY29kZSAqLworICAgIGNhc2UgJ3knOiB7LyogYW55IGJ5dGVzLWxpa2Ugb2JqZWN0ICovCiAgICAgICAgIHZvaWQgKipwID0gKHZvaWQgKiopdmFfYXJnKCpwX3ZhLCBjaGFyICoqKTsKICAgICAgICAgY2hhciAqYnVmOwogICAgICAgICBQeV9zc2l6ZV90IGNvdW50OwpAQCAtODYwLDggKzg4MCw4IEBACiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIGNhc2UgJ3MnOiAvKiB0ZXh0IHN0cmluZyAqLwotICAgIGNhc2UgJ3onOiAvKiB0ZXh0IHN0cmluZyBvciBOb25lICovCisgICAgY2FzZSAncyc6IC8qIHRleHQgc3RyaW5nIG9yIGJ5dGVzLWxpa2Ugb2JqZWN0ICovCisgICAgY2FzZSAneic6IC8qIHRleHQgc3RyaW5nLCBieXRlcy1saWtlIG9iamVjdCBvciBOb25lICovCiAgICAgewogICAgICAgICBpZiAoKmZvcm1hdCA9PSAnKicpIHsKICAgICAgICAgICAgIC8qICJzKiIgb3IgInoqIiAqLwpAQCAtODc3LDcgKzg5Nyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZywgbXNnYnVmLCBidWZzaXplKTsKICAgICAgICAgICAgICAgICBQeUJ1ZmZlcl9GaWxsSW5mbyhwLCBhcmcsIHNhcmcsIGxlbiwgMSwgMCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsgLyogYW55IGJ1ZmZlci1saWtlIG9iamVjdCAqLworICAgICAgICAgICAgZWxzZSB7IC8qIGFueSBieXRlcy1saWtlIG9iamVjdCAqLwogICAgICAgICAgICAgICAgIGNoYXIgKmJ1ZjsKICAgICAgICAgICAgICAgICBpZiAoZ2V0YnVmZmVyKGFyZywgcCwgJmJ1ZikgPCAwKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udmVydGVycihidWYsIGFyZywgbXNnYnVmLCBidWZzaXplKTsKQEAgLTg4OCw3ICs5MDgsNyBAQAogICAgICAgICAgICAgICAgICAgICBhcmcsIG1zZ2J1ZiwgYnVmc2l6ZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBmb3JtYXQrKzsKLSAgICAgICAgfSBlbHNlIGlmICgqZm9ybWF0ID09ICcjJykgeyAvKiBhbnkgYnVmZmVyLWxpa2Ugb2JqZWN0ICovCisgICAgICAgIH0gZWxzZSBpZiAoKmZvcm1hdCA9PSAnIycpIHsgLyogYSBzdHJpbmcgb3IgcmVhZC1vbmx5IGJ5dGVzLWxpa2Ugb2JqZWN0ICovCiAgICAgICAgICAgICAvKiAicyMiIG9yICJ6IyIgKi8KICAgICAgICAgICAgIHZvaWQgKipwID0gKHZvaWQgKiopdmFfYXJnKCpwX3ZhLCBjaGFyICoqKTsKICAgICAgICAgICAgIEZFVENIX1NJWkU7CkBAIC05MDYsNyArOTI2LDcgQEAKICAgICAgICAgICAgICAgICAqcCA9IHNhcmc7CiAgICAgICAgICAgICAgICAgU1RPUkVfU0laRShsZW4pOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7IC8qIGFueSBidWZmZXItbGlrZSBvYmplY3QgKi8KKyAgICAgICAgICAgIGVsc2UgeyAvKiByZWFkLW9ubHkgYnl0ZXMtbGlrZSBvYmplY3QgKi8KICAgICAgICAgICAgICAgICAvKiBYWFggUmVhbGx5PyAqLwogICAgICAgICAgICAgICAgIGNoYXIgKmJ1ZjsKICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IGNvdW50ID0gY29udmVydGJ1ZmZlcihhcmcsIHAsICZidWYpOwpAQCAtOTQ3LDggKzk2Nyw4IEBACiAgICAgewogICAgICAgICBQeV9VTklDT0RFICoqcCA9IHZhX2FyZygqcF92YSwgUHlfVU5JQ09ERSAqKik7CiAKLSAgICAgICAgaWYgKCpmb3JtYXQgPT0gJyMnKSB7IC8qIGFueSBidWZmZXItbGlrZSBvYmplY3QgKi8KLSAgICAgICAgICAgIC8qICJzIyIgb3IgIlojIiAqLworICAgICAgICBpZiAoKmZvcm1hdCA9PSAnIycpIHsKKyAgICAgICAgICAgIC8qICJ1IyIgb3IgIlojIiAqLwogICAgICAgICAgICAgRkVUQ0hfU0laRTsKIAogICAgICAgICAgICAgaWYgKGMgPT0gJ1onICYmIGFyZyA9PSBQeV9Ob25lKSB7CkBAIC05NjMsMTAgKzk4MywxMSBAQAogICAgICAgICAgICAgICAgIFNUT1JFX1NJWkUobGVuKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZXR1cm4gY29udmVydGVycigic3RyIG9yIE5vbmUiLCBhcmcsIG1zZ2J1ZiwgYnVmc2l6ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRlcnIoYyA9PSAnWicgPyAic3RyIG9yIE5vbmUiIDogInN0ciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnLCBtc2didWYsIGJ1ZnNpemUpOwogICAgICAgICAgICAgZm9ybWF0Kys7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvKiAicyIgb3IgIloiICovCisgICAgICAgICAgICAvKiAidSIgb3IgIloiICovCiAgICAgICAgICAgICBpZiAoYyA9PSAnWicgJiYgYXJnID09IFB5X05vbmUpCiAgICAgICAgICAgICAgICAgKnAgPSBOVUxMOwogICAgICAgICAgICAgZWxzZSBpZiAoUHlVbmljb2RlX0NoZWNrKGFyZykpIHsKQEAgLTE0MTksOSArMTQ0MCwxNSBAQAogICAgIGNvbnN0IGNoYXIgKmZuYW1lLCAqbXNnLCAqY3VzdG9tX21zZywgKmtleXdvcmQ7CiAgICAgaW50IG1pbiA9IElOVF9NQVg7CiAgICAgaW50IG1heCA9IElOVF9NQVg7Ci0gICAgaW50IGksIGxlbiwgbmFyZ3MsIG5rZXl3b3JkczsKKyAgICBpbnQgaSwgbGVuOworICAgIFB5X3NzaXplX3QgbmFyZ3MsIG5rZXl3b3JkczsKICAgICBQeU9iamVjdCAqY3VycmVudF9hcmc7Ci0gICAgZnJlZWxpc3RfdCBmcmVlbGlzdCA9IHswLCBOVUxMfTsKKyAgICBmcmVlbGlzdGVudHJ5X3Qgc3RhdGljX2VudHJpZXNbU1RBVElDX0ZSRUVMSVNUX0VOVFJJRVNdOworICAgIGZyZWVsaXN0X3QgZnJlZWxpc3Q7CisKKyAgICBmcmVlbGlzdC5lbnRyaWVzID0gc3RhdGljX2VudHJpZXM7CisgICAgZnJlZWxpc3QuZmlyc3RfYXZhaWxhYmxlID0gMDsKKyAgICBmcmVlbGlzdC5lbnRyaWVzX21hbGxvY2VkID0gMDsKIAogICAgIGFzc2VydChhcmdzICE9IE5VTEwgJiYgUHlUdXBsZV9DaGVjayhhcmdzKSk7CiAgICAgYXNzZXJ0KGtleXdvcmRzID09IE5VTEwgfHwgUHlEaWN0X0NoZWNrKGtleXdvcmRzKSk7CkBAIC0xNDQ1LDE3ICsxNDcyLDIwIEBACiAgICAgZm9yIChsZW49MDsga3dsaXN0W2xlbl07IGxlbisrKQogICAgICAgICBjb250aW51ZTsKIAotICAgIGZyZWVsaXN0LmVudHJpZXMgPSBQeU1lbV9ORVcoZnJlZWxpc3RlbnRyeV90LCBsZW4pOwotICAgIGlmIChmcmVlbGlzdC5lbnRyaWVzID09IE5VTEwpIHsKLSAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKLSAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKGxlbiA+IFNUQVRJQ19GUkVFTElTVF9FTlRSSUVTKSB7CisgICAgICAgIGZyZWVsaXN0LmVudHJpZXMgPSBQeU1lbV9ORVcoZnJlZWxpc3RlbnRyeV90LCBsZW4pOworICAgICAgICBpZiAoZnJlZWxpc3QuZW50cmllcyA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgZnJlZWxpc3QuZW50cmllc19tYWxsb2NlZCA9IDE7CiAgICAgfQogCiAgICAgbmFyZ3MgPSBQeVR1cGxlX0dFVF9TSVpFKGFyZ3MpOwogICAgIG5rZXl3b3JkcyA9IChrZXl3b3JkcyA9PSBOVUxMKSA/IDAgOiBQeURpY3RfU2l6ZShrZXl3b3Jkcyk7CiAgICAgaWYgKG5hcmdzICsgbmtleXdvcmRzID4gbGVuKSB7CiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAiJXMlcyB0YWtlcyBhdCBtb3N0ICVkIGFyZ3VtZW50JXMgKCVkIGdpdmVuKSIsCisgICAgICAgICAgICAgICAgICAgICAiJXMlcyB0YWtlcyBhdCBtb3N0ICVkIGFyZ3VtZW50JXMgKCV6ZCBnaXZlbikiLAogICAgICAgICAgICAgICAgICAgICAgKGZuYW1lID09IE5VTEwpID8gImZ1bmN0aW9uIiA6IGZuYW1lLAogICAgICAgICAgICAgICAgICAgICAgKGZuYW1lID09IE5VTEwpID8gIiIgOiAiKCkiLAogICAgICAgICAgICAgICAgICAgICAgbGVuLApAQCAtMTU3NCwyMCArMTYwNCwxNSBAQAogICAgICAgICBQeV9zc2l6ZV90IHBvcyA9IDA7CiAgICAgICAgIHdoaWxlIChQeURpY3RfTmV4dChrZXl3b3JkcywgJnBvcywgJmtleSwgJnZhbHVlKSkgewogICAgICAgICAgICAgaW50IG1hdGNoID0gMDsKLSAgICAgICAgICAgIGNoYXIgKmtzOwogICAgICAgICAgICAgaWYgKCFQeVVuaWNvZGVfQ2hlY2soa2V5KSkgewogICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJrZXl3b3JkcyBtdXN0IGJlIHN0cmluZ3MiKTsKICAgICAgICAgICAgICAgICByZXR1cm4gY2xlYW5yZXR1cm4oMCwgJmZyZWVsaXN0KTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8qIGNoZWNrIHRoYXQgX1B5VW5pY29kZV9Bc1N0cmluZygpIHJlc3VsdCBpcyBub3QgTlVMTCAqLwotICAgICAgICAgICAga3MgPSBfUHlVbmljb2RlX0FzU3RyaW5nKGtleSk7Ci0gICAgICAgICAgICBpZiAoa3MgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewotICAgICAgICAgICAgICAgICAgICBpZiAoIXN0cmNtcChrcywga3dsaXN0W2ldKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2ggPSAxOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgeworICAgICAgICAgICAgICAgIGlmICghUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcoa2V5LCBrd2xpc3RbaV0pKSB7CisgICAgICAgICAgICAgICAgICAgIG1hdGNoID0gMTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKCFtYXRjaCkgewpAQCAtMTc4OSw3ICsxODE0LDcgQEAKIAogLyogRm9yIHR5cGUgY29uc3RydWN0b3JzIHRoYXQgZG9uJ3QgdGFrZSBrZXl3b3JkIGFyZ3MKICAqCi0gKiBTZXRzIGEgVHlwZUVycm9yIGFuZCByZXR1cm5zIDAgaWYgdGhlIGt3ZHMgZGljdCBpcworICogU2V0cyBhIFR5cGVFcnJvciBhbmQgcmV0dXJucyAwIGlmIHRoZSBhcmdzL2t3YXJncyBpcwogICogbm90IGVtcHR5LCByZXR1cm5zIDEgb3RoZXJ3aXNlCiAgKi8KIGludApAQCAtMTgwOCw2ICsxODMzLDI1IEBACiAgICAgICAgICAgICAgICAgICAgIGZ1bmNuYW1lKTsKICAgICByZXR1cm4gMDsKIH0KKworCitpbnQKK19QeUFyZ19Ob1Bvc2l0aW9uYWwoY29uc3QgY2hhciAqZnVuY25hbWUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIGlmIChhcmdzID09IE5VTEwpCisgICAgICAgIHJldHVybiAxOworICAgIGlmICghUHlUdXBsZV9DaGVja0V4YWN0KGFyZ3MpKSB7CisgICAgICAgIFB5RXJyX0JhZEludGVybmFsQ2FsbCgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgaWYgKFB5VHVwbGVfR0VUX1NJWkUoYXJncykgPT0gMCkKKyAgICAgICAgcmV0dXJuIDE7CisKKyAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLCAiJXMgZG9lcyBub3QgdGFrZSBwb3NpdGlvbmFsIGFyZ3VtZW50cyIsCisgICAgICAgICAgICAgICAgICAgIGZ1bmNuYW1lKTsKKyAgICByZXR1cm4gMDsKK30KKwogI2lmZGVmIF9fY3BsdXNwbHVzCiB9OwogI2VuZGlmCmRpZmYgLS1naXQgYS9QeXRob24vZ2V0Y3dkLmMgYi9QeXRob24vZ2V0Y3dkLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiZWRiZDEuLjAwMDAwMDAKLS0tIGEvUHl0aG9uL2dldGN3ZC5jCisrKyAvZGV2L251bGwKQEAgLTEsODMgKzAsMCBAQAotCi0vKiBUd28gUEQgZ2V0Y3dkKCkgaW1wbGVtZW50YXRpb25zLgotICAgQXV0aG9yOiBHdWlkbyB2YW4gUm9zc3VtLCBDV0kgQW1zdGVyZGFtLCBKYW4gMTk5MSwgPGd1aWRvQGN3aS5ubD4uICovCi0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0KLSNpZmRlZiBIQVZFX0dFVFdECi0KLS8qIFZlcnNpb24gZm9yIEJTRCBzeXN0ZW1zIC0tIHVzZSBnZXR3ZCgpICovCi0KLSNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICi0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jZW5kaWYKLQotI2lmbmRlZiBNQVhQQVRITEVOCi0jaWYgZGVmaW5lZChQQVRIX01BWCkgJiYgUEFUSF9NQVggPiAxMDI0Ci0jZGVmaW5lIE1BWFBBVEhMRU4gUEFUSF9NQVgKLSNlbHNlCi0jZGVmaW5lIE1BWFBBVEhMRU4gMTAyNAotI2VuZGlmCi0jZW5kaWYKLQotZXh0ZXJuIGNoYXIgKmdldHdkKGNoYXIgKik7Ci0KLWNoYXIgKgotZ2V0Y3dkKGNoYXIgKmJ1ZiwgaW50IHNpemUpCi17Ci0gICAgY2hhciBsb2NhbGJ1ZltNQVhQQVRITEVOKzFdOwotICAgIGNoYXIgKnJldDsKLQotICAgIGlmIChzaXplIDw9IDApIHsKLSAgICAgICAgZXJybm8gPSBFSU5WQUw7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICByZXQgPSBnZXR3ZChsb2NhbGJ1Zik7Ci0gICAgaWYgKHJldCAhPSBOVUxMICYmIHN0cmxlbihsb2NhbGJ1ZikgPj0gKHNpemVfdClzaXplKSB7Ci0gICAgICAgIGVycm5vID0gRVJBTkdFOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgaWYgKHJldCA9PSBOVUxMKSB7Ci0gICAgICAgIGVycm5vID0gRUFDQ0VTOyAvKiBNb3N0IGxpa2VseSBlcnJvciAqLwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgc3RybmNweShidWYsIGxvY2FsYnVmLCBzaXplKTsKLSAgICByZXR1cm4gYnVmOwotfQotCi0jZWxzZSAvKiAhSEFWRV9HRVRXRCAqLwotCi0vKiBWZXJzaW9uIGZvciByZWFsbHkgb2xkIFVOSVggc3lzdGVtcyAtLSB1c2UgcGlwZSBmcm9tIHB3ZCAqLwotCi0jaWZuZGVmIFBXRF9DTUQKLSNkZWZpbmUgUFdEX0NNRCAiL2Jpbi9wd2QiCi0jZW5kaWYKLQotY2hhciAqCi1nZXRjd2QoY2hhciAqYnVmLCBpbnQgc2l6ZSkKLXsKLSAgICBGSUxFICpmcDsKLSAgICBjaGFyICpwOwotICAgIGludCBzdHM7Ci0gICAgaWYgKHNpemUgPD0gMCkgewotICAgICAgICBlcnJubyA9IEVJTlZBTDsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIGlmICgoZnAgPSBwb3BlbihQV0RfQ01ELCAiciIpKSA9PSBOVUxMKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAoZmdldHMoYnVmLCBzaXplLCBmcCkgPT0gTlVMTCB8fCAoc3RzID0gcGNsb3NlKGZwKSkgIT0gMCkgewotICAgICAgICBlcnJubyA9IEVBQ0NFUzsgLyogTW9zdCBsaWtlbHkgZXJyb3IgKi8KLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIGZvciAocCA9IGJ1ZjsgKnAgIT0gJ1xuJzsgcCsrKSB7Ci0gICAgICAgIGlmICgqcCA9PSAnXDAnKSB7Ci0gICAgICAgICAgICBlcnJubyA9IEVSQU5HRTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgfQotICAgICpwID0gJ1wwJzsKLSAgICByZXR1cm4gYnVmOwotfQotCi0jZW5kaWYgLyogIUhBVkVfR0VUV0QgKi8KZGlmZiAtLWdpdCBhL1B5dGhvbi9pbXBvcnQuYyBiL1B5dGhvbi9pbXBvcnQuYwppbmRleCBiMGIyNDA1Li40ZjA3NjVhIDEwMDY0NAotLS0gYS9QeXRob24vaW1wb3J0LmMKKysrIGIvUHl0aG9uL2ltcG9ydC5jCkBAIC0xOSwyMiArMTksMTEgQEAKIGV4dGVybiAiQyIgewogI2VuZGlmCiAKLSNpZmRlZiBNU19XSU5ET1dTCi0vKiBmb3Igc3RhdC5zdF9tb2RlICovCi10eXBlZGVmIHVuc2lnbmVkIHNob3J0IG1vZGVfdDsKLS8qIGZvciBfbWtkaXIgKi8KLSNpbmNsdWRlIDxkaXJlY3QuaD4KLSNlbmRpZgotCi0KICNkZWZpbmUgQ0FDSEVESVIgIl9fcHljYWNoZV9fIgogCiAvKiBTZWUgX1B5SW1wb3J0X0ZpeHVwRXh0ZW5zaW9uT2JqZWN0KCkgYmVsb3cgKi8KIHN0YXRpYyBQeU9iamVjdCAqZXh0ZW5zaW9ucyA9IE5VTEw7CiAKLS8qIEZ1bmN0aW9uIGZyb20gUGFyc2VyL3Rva2VuaXplci5jICovCi1leHRlcm4gY2hhciAqIFB5VG9rZW5pemVyX0ZpbmRFbmNvZGluZ0ZpbGVuYW1lKGludCwgUHlPYmplY3QgKik7Ci0KIC8qIFRoaXMgdGFibGUgaXMgZGVmaW5lZCBpbiBjb25maWcuYzogKi8KIGV4dGVybiBzdHJ1Y3QgX2luaXR0YWIgX1B5SW1wb3J0X0luaXR0YWJbXTsKIApAQCAtNDIsMTQgKzMxLDMxIEBACiAKIHN0YXRpYyBQeU9iamVjdCAqaW5pdHN0ciA9IE5VTEw7CiAKKy8qW2NsaW5pYyBpbnB1dF0KK21vZHVsZSBfaW1wCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZGEzOWEzZWU1ZTZiNGIwZCBpbnB1dD05YzMzMjQ3NWQ4Njg2Mjg0XSovCisKKy8qW3B5dGhvbiBpbnB1dF0KK2NsYXNzIGZzX3VuaWNvZGVfY29udmVydGVyKENDb252ZXJ0ZXIpOgorICAgIHR5cGUgPSAnUHlPYmplY3QgKicKKyAgICBjb252ZXJ0ZXIgPSAnUHlVbmljb2RlX0ZTRGVjb2RlcicKKworW3B5dGhvbiBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworLypbcHl0aG9uIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWRhMzlhM2VlNWU2YjRiMGQgaW5wdXQ9OWQ2Nzg2MjMwMTY2MDA2ZV0qLworCiAvKiBJbml0aWFsaXplIHRoaW5ncyAqLwogCiB2b2lkCiBfUHlJbXBvcnRfSW5pdCh2b2lkKQogeworICAgIFB5SW50ZXJwcmV0ZXJTdGF0ZSAqaW50ZXJwID0gUHlUaHJlYWRTdGF0ZV9HZXQoKS0+aW50ZXJwOwogICAgIGluaXRzdHIgPSBQeVVuaWNvZGVfSW50ZXJuRnJvbVN0cmluZygiX19pbml0X18iKTsKICAgICBpZiAoaW5pdHN0ciA9PSBOVUxMKQogICAgICAgICBQeV9GYXRhbEVycm9yKCJDYW4ndCBpbml0aWFsaXplIGltcG9ydCB2YXJpYWJsZXMiKTsKKyAgICBpbnRlcnAtPmJ1aWx0aW5zX2NvcHkgPSBQeURpY3RfQ29weShpbnRlcnAtPmJ1aWx0aW5zKTsKKyAgICBpZiAoaW50ZXJwLT5idWlsdGluc19jb3B5ID09IE5VTEwpCisgICAgICAgIFB5X0ZhdGFsRXJyb3IoIkNhbid0IGJhY2t1cCBidWlsdGlucyBkaWN0Iik7CiB9CiAKIHZvaWQKQEAgLTkzLDggKzk5LDEwIEBACiAgICAgaW50IGVyciA9IDA7CiAKICAgICBwYXRoX2hvb2tzID0gUHlTeXNfR2V0T2JqZWN0KCJwYXRoX2hvb2tzIik7Ci0gICAgaWYgKHBhdGhfaG9va3MgPT0gTlVMTCkKKyAgICBpZiAocGF0aF9ob29rcyA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsICJ1bmFibGUgdG8gZ2V0IHN5cy5wYXRoX2hvb2tzIik7CiAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQogCiAgICAgaWYgKFB5X1ZlcmJvc2VGbGFnKQogICAgICAgICBQeVN5c19Xcml0ZVN0ZGVycigiIyBpbnN0YWxsaW5nIHppcGltcG9ydCBob29rXG4iKTsKQEAgLTIwOCw4ICsyMTYsMTEgQEAKICAgICBpZiAoaW1wb3J0X2xvY2tfbGV2ZWwgPiAxKSB7CiAgICAgICAgIC8qIEZvcmtlZCBhcyBhIHNpZGUgZWZmZWN0IG9mIGltcG9ydCAqLwogICAgICAgICBsb25nIG1lID0gUHlUaHJlYWRfZ2V0X3RocmVhZF9pZGVudCgpOwotICAgICAgICBQeVRocmVhZF9hY3F1aXJlX2xvY2soaW1wb3J0X2xvY2ssIDApOwotICAgICAgICAvKiBYWFg6IGNhbiB0aGUgcHJldmlvdXMgbGluZSBmYWlsPyAqLworICAgICAgICAvKiBUaGUgZm9sbG93aW5nIGNvdWxkIGZhaWwgaWYgdGhlIGxvY2sgaXMgYWxyZWFkeSBoZWxkLCBidXQgZm9ya2luZyBhcworICAgICAgICAgICBhIHNpZGUtZWZmZWN0IG9mIGFuIGltcG9ydCBpcyBhKSByYXJlLCBiKSBudXRzLCBhbmQgYykgZGlmZmljdWx0IHRvCisgICAgICAgICAgIGRvIHRoYW5rcyB0byB0aGUgbG9jayBvbmx5IGJlaW5nIGhlbGQgd2hlbiBkb2luZyBpbmRpdmlkdWFsIG1vZHVsZQorICAgICAgICAgICBsb2NrcyBwZXIgaW1wb3J0LiAqLworICAgICAgICBQeVRocmVhZF9hY3F1aXJlX2xvY2soaW1wb3J0X2xvY2ssIE5PV0FJVF9MT0NLKTsKICAgICAgICAgaW1wb3J0X2xvY2tfdGhyZWFkID0gbWU7CiAgICAgICAgIGltcG9ydF9sb2NrX2xldmVsLS07CiAgICAgfSBlbHNlIHsKQEAgLTIyMCw4ICsyMzEsMzcgQEAKIAogI2VuZGlmCiAKKy8qW2NsaW5pYyBpbnB1dF0KK19pbXAubG9ja19oZWxkCisKK1JldHVybiBUcnVlIGlmIHRoZSBpbXBvcnQgbG9jayBpcyBjdXJyZW50bHkgaGVsZCwgZWxzZSBGYWxzZS4KKworT24gcGxhdGZvcm1zIHdpdGhvdXQgdGhyZWFkcywgcmV0dXJuIEZhbHNlLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitQeURvY19TVFJWQVIoX2ltcF9sb2NrX2hlbGRfX2RvY19fLAorImxvY2tfaGVsZCgkbW9kdWxlLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIFRydWUgaWYgdGhlIGltcG9ydCBsb2NrIGlzIGN1cnJlbnRseSBoZWxkLCBlbHNlIEZhbHNlLlxuIgorIlxuIgorIk9uIHBsYXRmb3JtcyB3aXRob3V0IHRocmVhZHMsIHJldHVybiBGYWxzZS4iKTsKKworI2RlZmluZSBfSU1QX0xPQ0tfSEVMRF9NRVRIT0RERUYgICAgXAorICAgIHsibG9ja19oZWxkIiwgKFB5Q0Z1bmN0aW9uKV9pbXBfbG9ja19oZWxkLCBNRVRIX05PQVJHUywgX2ltcF9sb2NrX2hlbGRfX2RvY19ffSwKKwogc3RhdGljIFB5T2JqZWN0ICoKLWltcF9sb2NrX2hlbGQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpub2FyZ3MpCitfaW1wX2xvY2tfaGVsZF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2ltcF9sb2NrX2hlbGQoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKK3sKKyAgICByZXR1cm4gX2ltcF9sb2NrX2hlbGRfaW1wbChtb2R1bGUpOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorX2ltcF9sb2NrX2hlbGRfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWRhZTY1Njc0OTY2YmFhNjUgaW5wdXQ9OWIwODhmOWIyMTdkOWJkZl0qLwogewogI2lmZGVmIFdJVEhfVEhSRUFECiAgICAgcmV0dXJuIFB5Qm9vbF9Gcm9tTG9uZyhpbXBvcnRfbG9ja190aHJlYWQgIT0gLTEpOwpAQCAtMjMwLDggKzI3MCwzOSBAQAogI2VuZGlmCiB9CiAKKy8qW2NsaW5pYyBpbnB1dF0KK19pbXAuYWNxdWlyZV9sb2NrCisKK0FjcXVpcmVzIHRoZSBpbnRlcnByZXRlcidzIGltcG9ydCBsb2NrIGZvciB0aGUgY3VycmVudCB0aHJlYWQuCisKK1RoaXMgbG9jayBzaG91bGQgYmUgdXNlZCBieSBpbXBvcnQgaG9va3MgdG8gZW5zdXJlIHRocmVhZC1zYWZldHkgd2hlbiBpbXBvcnRpbmcKK21vZHVsZXMuIE9uIHBsYXRmb3JtcyB3aXRob3V0IHRocmVhZHMsIHRoaXMgZnVuY3Rpb24gZG9lcyBub3RoaW5nLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitQeURvY19TVFJWQVIoX2ltcF9hY3F1aXJlX2xvY2tfX2RvY19fLAorImFjcXVpcmVfbG9jaygkbW9kdWxlLCAvKVxuIgorIi0tXG4iCisiXG4iCisiQWNxdWlyZXMgdGhlIGludGVycHJldGVyXCdzIGltcG9ydCBsb2NrIGZvciB0aGUgY3VycmVudCB0aHJlYWQuXG4iCisiXG4iCisiVGhpcyBsb2NrIHNob3VsZCBiZSB1c2VkIGJ5IGltcG9ydCBob29rcyB0byBlbnN1cmUgdGhyZWFkLXNhZmV0eSB3aGVuIGltcG9ydGluZ1xuIgorIm1vZHVsZXMuIE9uIHBsYXRmb3JtcyB3aXRob3V0IHRocmVhZHMsIHRoaXMgZnVuY3Rpb24gZG9lcyBub3RoaW5nLiIpOworCisjZGVmaW5lIF9JTVBfQUNRVUlSRV9MT0NLX01FVEhPRERFRiAgICBcCisgICAgeyJhY3F1aXJlX2xvY2siLCAoUHlDRnVuY3Rpb24pX2ltcF9hY3F1aXJlX2xvY2ssIE1FVEhfTk9BUkdTLCBfaW1wX2FjcXVpcmVfbG9ja19fZG9jX199LAorCiBzdGF0aWMgUHlPYmplY3QgKgotaW1wX2FjcXVpcmVfbG9jayhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm5vYXJncykKK19pbXBfYWNxdWlyZV9sb2NrX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfaW1wX2FjcXVpcmVfbG9jayhQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQoreworICAgIHJldHVybiBfaW1wX2FjcXVpcmVfbG9ja19pbXBsKG1vZHVsZSk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitfaW1wX2FjcXVpcmVfbG9ja19pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NDc4ZjFmYTA4OWZkYjlhNCBpbnB1dD00YTJkNDM4MTg2NmQ1ZmRjXSovCiB7CiAjaWZkZWYgV0lUSF9USFJFQUQKICAgICBfUHlJbXBvcnRfQWNxdWlyZUxvY2soKTsKQEAgLTI0MCw4ICszMTEsMzcgQEAKICAgICByZXR1cm4gUHlfTm9uZTsKIH0KIAorLypbY2xpbmljIGlucHV0XQorX2ltcC5yZWxlYXNlX2xvY2sKKworUmVsZWFzZSB0aGUgaW50ZXJwcmV0ZXIncyBpbXBvcnQgbG9jay4KKworT24gcGxhdGZvcm1zIHdpdGhvdXQgdGhyZWFkcywgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdGhpbmcuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK1B5RG9jX1NUUlZBUihfaW1wX3JlbGVhc2VfbG9ja19fZG9jX18sCisicmVsZWFzZV9sb2NrKCRtb2R1bGUsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZWxlYXNlIHRoZSBpbnRlcnByZXRlclwncyBpbXBvcnQgbG9jay5cbiIKKyJcbiIKKyJPbiBwbGF0Zm9ybXMgd2l0aG91dCB0aHJlYWRzLCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90aGluZy4iKTsKKworI2RlZmluZSBfSU1QX1JFTEVBU0VfTE9DS19NRVRIT0RERUYgICAgXAorICAgIHsicmVsZWFzZV9sb2NrIiwgKFB5Q0Z1bmN0aW9uKV9pbXBfcmVsZWFzZV9sb2NrLCBNRVRIX05PQVJHUywgX2ltcF9yZWxlYXNlX2xvY2tfX2RvY19ffSwKKwogc3RhdGljIFB5T2JqZWN0ICoKLWltcF9yZWxlYXNlX2xvY2soUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpub2FyZ3MpCitfaW1wX3JlbGVhc2VfbG9ja19pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2ltcF9yZWxlYXNlX2xvY2soUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKK3sKKyAgICByZXR1cm4gX2ltcF9yZWxlYXNlX2xvY2tfaW1wbChtb2R1bGUpOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorX2ltcF9yZWxlYXNlX2xvY2tfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTM2Yzc3YTY4MzJmZGFmZDQgaW5wdXQ9OTM0ZmIxMTUxNmRkNzc4Yl0qLwogewogI2lmZGVmIFdJVEhfVEhSRUFECiAgICAgaWYgKF9QeUltcG9ydF9SZWxlYXNlTG9jaygpIDwgMCkgewpAQCAtMjgzLDYgKzM4Myw3IEBACiAgICAgInBhdGgiLCAiYXJndiIsICJwczEiLCAicHMyIiwKICAgICAibGFzdF90eXBlIiwgImxhc3RfdmFsdWUiLCAibGFzdF90cmFjZWJhY2siLAogICAgICJwYXRoX2hvb2tzIiwgInBhdGhfaW1wb3J0ZXJfY2FjaGUiLCAibWV0YV9wYXRoIiwKKyAgICAiX19pbnRlcmFjdGl2ZWhvb2tfXyIsCiAgICAgLyogbWlzYyBzdHVmZiAqLwogICAgICJmbGFncyIsICJmbG9hdF9pbmZvIiwKICAgICBOVUxMCkBAIC0yOTUsMTYgKzM5NiwxNyBAQAogICAgIE5VTEwKIH07CiAKLQogLyogVW4taW5pdGlhbGl6ZSB0aGluZ3MsIGFzIGdvb2QgYXMgd2UgY2FuICovCiAKIHZvaWQKIFB5SW1wb3J0X0NsZWFudXAodm9pZCkKIHsKLSAgICBQeV9zc2l6ZV90IHBvcywgbmRvbmU7CisgICAgUHlfc3NpemVfdCBwb3M7CiAgICAgUHlPYmplY3QgKmtleSwgKnZhbHVlLCAqZGljdDsKICAgICBQeUludGVycHJldGVyU3RhdGUgKmludGVycCA9IFB5VGhyZWFkU3RhdGVfR0VUKCktPmludGVycDsKICAgICBQeU9iamVjdCAqbW9kdWxlcyA9IGludGVycC0+bW9kdWxlczsKKyAgICBQeU9iamVjdCAqd2Vha2xpc3QgPSBOVUxMOworICAgIGNoYXIgKipwOwogCiAgICAgaWYgKG1vZHVsZXMgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuOyAvKiBBbHJlYWR5IGRvbmUgKi8KQEAgLTMxNSwxMTQgKzQxNywxMjkgQEAKICAgICAgICBkZWxldGVkICpsYXN0KiBvZiBhbGwsIHRoZXkgd291bGQgY29tZSB0b28gbGF0ZSBpbiB0aGUgbm9ybWFsCiAgICAgICAgZGVzdHJ1Y3Rpb24gb3JkZXIuICBTaWdoLiAqLwogCi0gICAgdmFsdWUgPSBQeURpY3RfR2V0SXRlbVN0cmluZyhtb2R1bGVzLCAiYnVpbHRpbnMiKTsKLSAgICBpZiAodmFsdWUgIT0gTlVMTCAmJiBQeU1vZHVsZV9DaGVjayh2YWx1ZSkpIHsKLSAgICAgICAgZGljdCA9IFB5TW9kdWxlX0dldERpY3QodmFsdWUpOworICAgIC8qIFhYWCBQZXJoYXBzIHRoZXNlIHByZWNhdXRpb25zIGFyZSBvYnNvbGV0ZS4gV2hvIGtub3dzPyAqLworCisgICAgaWYgKFB5X1ZlcmJvc2VGbGFnKQorICAgICAgICBQeVN5c19Xcml0ZVN0ZGVycigiIyBjbGVhciBidWlsdGlucy5fXG4iKTsKKyAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhpbnRlcnAtPmJ1aWx0aW5zLCAiXyIsIFB5X05vbmUpOworCisgICAgZm9yIChwID0gc3lzX2RlbGV0ZXM7ICpwICE9IE5VTEw7IHArKykgewogICAgICAgICBpZiAoUHlfVmVyYm9zZUZsYWcpCi0gICAgICAgICAgICBQeVN5c19Xcml0ZVN0ZGVycigiIyBjbGVhciBidWlsdGlucy5fXG4iKTsKLSAgICAgICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoZGljdCwgIl8iLCBQeV9Ob25lKTsKKyAgICAgICAgICAgIFB5U3lzX1dyaXRlU3RkZXJyKCIjIGNsZWFyIHN5cy4lc1xuIiwgKnApOworICAgICAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhpbnRlcnAtPnN5c2RpY3QsICpwLCBQeV9Ob25lKTsKICAgICB9Ci0gICAgdmFsdWUgPSBQeURpY3RfR2V0SXRlbVN0cmluZyhtb2R1bGVzLCAic3lzIik7Ci0gICAgaWYgKHZhbHVlICE9IE5VTEwgJiYgUHlNb2R1bGVfQ2hlY2sodmFsdWUpKSB7Ci0gICAgICAgIGNoYXIgKipwOwotICAgICAgICBQeU9iamVjdCAqdjsKLSAgICAgICAgZGljdCA9IFB5TW9kdWxlX0dldERpY3QodmFsdWUpOwotICAgICAgICBmb3IgKHAgPSBzeXNfZGVsZXRlczsgKnAgIT0gTlVMTDsgcCsrKSB7Ci0gICAgICAgICAgICBpZiAoUHlfVmVyYm9zZUZsYWcpCi0gICAgICAgICAgICAgICAgUHlTeXNfV3JpdGVTdGRlcnIoIiMgY2xlYXIgc3lzLiVzXG4iLCAqcCk7Ci0gICAgICAgICAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhkaWN0LCAqcCwgUHlfTm9uZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZm9yIChwID0gc3lzX2ZpbGVzOyAqcCAhPSBOVUxMOyBwKz0yKSB7Ci0gICAgICAgICAgICBpZiAoUHlfVmVyYm9zZUZsYWcpCi0gICAgICAgICAgICAgICAgUHlTeXNfV3JpdGVTdGRlcnIoIiMgcmVzdG9yZSBzeXMuJXNcbiIsICpwKTsKLSAgICAgICAgICAgIHYgPSBQeURpY3RfR2V0SXRlbVN0cmluZyhkaWN0LCAqKHArMSkpOwotICAgICAgICAgICAgaWYgKHYgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICB2ID0gUHlfTm9uZTsKLSAgICAgICAgICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKGRpY3QsICpwLCB2KTsKKyAgICBmb3IgKHAgPSBzeXNfZmlsZXM7ICpwICE9IE5VTEw7IHArPTIpIHsKKyAgICAgICAgaWYgKFB5X1ZlcmJvc2VGbGFnKQorICAgICAgICAgICAgUHlTeXNfV3JpdGVTdGRlcnIoIiMgcmVzdG9yZSBzeXMuJXNcbiIsICpwKTsKKyAgICAgICAgdmFsdWUgPSBQeURpY3RfR2V0SXRlbVN0cmluZyhpbnRlcnAtPnN5c2RpY3QsICoocCsxKSk7CisgICAgICAgIGlmICh2YWx1ZSA9PSBOVUxMKQorICAgICAgICAgICAgdmFsdWUgPSBQeV9Ob25lOworICAgICAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhpbnRlcnAtPnN5c2RpY3QsICpwLCB2YWx1ZSk7CisgICAgfQorCisgICAgLyogV2UgcHJlcGFyZSBhIGxpc3Qgd2hpY2ggd2lsbCByZWNlaXZlIChuYW1lLCB3ZWFrcmVmKSB0dXBsZXMgb2YKKyAgICAgICBtb2R1bGVzIHdoZW4gdGhleSBhcmUgcmVtb3ZlZCBmcm9tIHN5cy5tb2R1bGVzLiAgVGhlIG5hbWUgaXMgdXNlZAorICAgICAgIGZvciBkaWFnbm9zaXMgbWVzc2FnZXMgKGluIHZlcmJvc2UgbW9kZSksIHdoaWxlIHRoZSB3ZWFrcmVmIGhlbHBzCisgICAgICAgZGV0ZWN0IHRob3NlIG1vZHVsZXMgd2hpY2ggaGF2ZSBiZWVuIGhlbGQgYWxpdmUuICovCisgICAgd2Vha2xpc3QgPSBQeUxpc3RfTmV3KDApOworICAgIGlmICh3ZWFrbGlzdCA9PSBOVUxMKQorICAgICAgICBQeUVycl9DbGVhcigpOworCisjZGVmaW5lIFNUT1JFX01PRFVMRV9XRUFLUkVGKG5hbWUsIG1vZCkgXAorICAgIGlmICh3ZWFrbGlzdCAhPSBOVUxMKSB7IFwKKyAgICAgICAgUHlPYmplY3QgKndyID0gUHlXZWFrcmVmX05ld1JlZihtb2QsIE5VTEwpOyBcCisgICAgICAgIGlmIChuYW1lICYmIHdyKSB7IFwKKyAgICAgICAgICAgIFB5T2JqZWN0ICp0dXAgPSBQeVR1cGxlX1BhY2soMiwgbmFtZSwgd3IpOyBcCisgICAgICAgICAgICBQeUxpc3RfQXBwZW5kKHdlYWtsaXN0LCB0dXApOyBcCisgICAgICAgICAgICBQeV9YREVDUkVGKHR1cCk7IFwKKyAgICAgICAgfSBcCisgICAgICAgIFB5X1hERUNSRUYod3IpOyBcCisgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSBcCisgICAgICAgICAgICBQeUVycl9DbGVhcigpOyBcCisgICAgfQorCisgICAgLyogUmVtb3ZlIGFsbCBtb2R1bGVzIGZyb20gc3lzLm1vZHVsZXMsIGhvcGluZyB0aGF0IGdhcmJhZ2UgY29sbGVjdGlvbgorICAgICAgIGNhbiByZWNsYWltIG1vc3Qgb2YgdGhlbS4gKi8KKyAgICBwb3MgPSAwOworICAgIHdoaWxlIChQeURpY3RfTmV4dChtb2R1bGVzLCAmcG9zLCAma2V5LCAmdmFsdWUpKSB7CisgICAgICAgIGlmIChQeU1vZHVsZV9DaGVjayh2YWx1ZSkpIHsKKyAgICAgICAgICAgIGlmIChQeV9WZXJib3NlRmxhZyAmJiBQeVVuaWNvZGVfQ2hlY2soa2V5KSkKKyAgICAgICAgICAgICAgICBQeVN5c19Gb3JtYXRTdGRlcnIoIiMgY2xlYW51cFsyXSByZW1vdmluZyAlVVxuIiwga2V5KTsKKyAgICAgICAgICAgIFNUT1JFX01PRFVMRV9XRUFLUkVGKGtleSwgdmFsdWUpOworICAgICAgICAgICAgUHlEaWN0X1NldEl0ZW0obW9kdWxlcywga2V5LCBQeV9Ob25lKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIC8qIEZpcnN0LCBkZWxldGUgX19tYWluX18gKi8KLSAgICB2YWx1ZSA9IFB5RGljdF9HZXRJdGVtU3RyaW5nKG1vZHVsZXMsICJfX21haW5fXyIpOwotICAgIGlmICh2YWx1ZSAhPSBOVUxMICYmIFB5TW9kdWxlX0NoZWNrKHZhbHVlKSkgewotICAgICAgICBpZiAoUHlfVmVyYm9zZUZsYWcpCi0gICAgICAgICAgICBQeVN5c19Xcml0ZVN0ZGVycigiIyBjbGVhbnVwIF9fbWFpbl9fXG4iKTsKLSAgICAgICAgX1B5TW9kdWxlX0NsZWFyKHZhbHVlKTsKLSAgICAgICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcobW9kdWxlcywgIl9fbWFpbl9fIiwgUHlfTm9uZSk7Ci0gICAgfQorICAgIC8qIENsZWFyIHRoZSBtb2R1bGVzIGRpY3QuICovCisgICAgUHlEaWN0X0NsZWFyKG1vZHVsZXMpOworICAgIC8qIFJlc3RvcmUgdGhlIG9yaWdpbmFsIGJ1aWx0aW5zIGRpY3QsIHRvIGVuc3VyZSB0aGF0IGFueQorICAgICAgIHVzZXIgZGF0YSBnZXRzIGNsZWFyZWQuICovCisgICAgZGljdCA9IFB5RGljdF9Db3B5KGludGVycC0+YnVpbHRpbnMpOworICAgIGlmIChkaWN0ID09IE5VTEwpCisgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgUHlEaWN0X0NsZWFyKGludGVycC0+YnVpbHRpbnMpOworICAgIGlmIChQeURpY3RfVXBkYXRlKGludGVycC0+YnVpbHRpbnMsIGludGVycC0+YnVpbHRpbnNfY29weSkpCisgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgUHlfWERFQ1JFRihkaWN0KTsKKyAgICAvKiBDbGVhciBtb2R1bGUgZGljdCBjb3BpZXMgc3RvcmVkIGluIHRoZSBpbnRlcnByZXRlciBzdGF0ZSAqLworICAgIF9QeVN0YXRlX0NsZWFyTW9kdWxlcygpOworICAgIC8qIENvbGxlY3QgcmVmZXJlbmNlcyAqLworICAgIF9QeUdDX0NvbGxlY3ROb0ZhaWwoKTsKKyAgICAvKiBEdW1wIEdDIHN0YXRzIGJlZm9yZSBpdCdzIHRvbyBsYXRlLCBzaW5jZSBpdCB1c2VzIHRoZSB3YXJuaW5ncworICAgICAgIG1hY2hpbmVyeS4gKi8KKyAgICBfUHlHQ19EdW1wU2h1dGRvd25TdGF0cygpOwogCi0gICAgLyogVGhlIHNwZWNpYWwgdHJlYXRtZW50IG9mICJidWlsdGlucyIgaGVyZSBpcyBiZWNhdXNlIGV2ZW4KKyAgICAvKiBOb3csIGlmIHRoZXJlIGFyZSBhbnkgbW9kdWxlcyBsZWZ0IGFsaXZlLCBjbGVhciB0aGVpciBnbG9iYWxzIHRvCisgICAgICAgbWluaW1pemUgcG90ZW50aWFsIGxlYWtzLiAgQWxsIEMgZXh0ZW5zaW9uIG1vZHVsZXMgYWN0dWFsbHkgZW5kCisgICAgICAgdXAgaGVyZSwgc2luY2UgdGhleSBhcmUga2VwdCBhbGl2ZSBpbiB0aGUgaW50ZXJwcmV0ZXIgc3RhdGUuCisKKyAgICAgICBUaGUgc3BlY2lhbCB0cmVhdG1lbnQgb2YgImJ1aWx0aW5zIiBoZXJlIGlzIGJlY2F1c2UgZXZlbgogICAgICAgIHdoZW4gaXQncyBub3QgcmVmZXJlbmNlZCBhcyBhIG1vZHVsZSwgaXRzIGRpY3Rpb25hcnkgaXMKICAgICAgICByZWZlcmVuY2VkIGJ5IGFsbW9zdCBldmVyeSBtb2R1bGUncyBfX2J1aWx0aW5zX18uICBTaW5jZQogICAgICAgIGRlbGV0aW5nIGEgbW9kdWxlIGNsZWFycyBpdHMgZGljdGlvbmFyeSAoZXZlbiBpZiB0aGVyZSBhcmUKICAgICAgICByZWZlcmVuY2VzIGxlZnQgdG8gaXQpLCB3ZSBuZWVkIHRvIGRlbGV0ZSB0aGUgImJ1aWx0aW5zIgogICAgICAgIG1vZHVsZSBsYXN0LiAgTGlrZXdpc2UsIHdlIGRvbid0IGRlbGV0ZSBzeXMgdW50aWwgdGhlIHZlcnkKLSAgICAgICBlbmQgYmVjYXVzZSBpdCBpcyBpbXBsaWNpdGx5IHJlZmVyZW5jZWQgKGUuZy4gYnkgcHJpbnQpLgotCi0gICAgICAgQWxzbyBub3RlIHRoYXQgd2UgJ2RlbGV0ZScgbW9kdWxlcyBieSByZXBsYWNpbmcgdGhlaXIgZW50cnkKLSAgICAgICBpbiB0aGUgbW9kdWxlcyBkaWN0IHdpdGggTm9uZSwgcmF0aGVyIHRoYW4gcmVhbGx5IGRlbGV0aW5nCi0gICAgICAgdGhlbTsgdGhpcyBhdm9pZHMgYSByZWhhc2ggb2YgdGhlIG1vZHVsZXMgZGljdGlvbmFyeSBhbmQKLSAgICAgICBhbHNvIG1hcmtzIHRoZW0gYXMgIm5vbiBleGlzdGVudCIgc28gdGhleSB3b24ndCBiZQotICAgICAgIHJlLWltcG9ydGVkLiAqLwotCi0gICAgLyogTmV4dCwgcmVwZWF0ZWRseSBkZWxldGUgbW9kdWxlcyB3aXRoIGEgcmVmZXJlbmNlIGNvdW50IG9mCi0gICAgICAgb25lIChza2lwcGluZyBidWlsdGlucyBhbmQgc3lzKSBhbmQgZGVsZXRlIHRoZW0gKi8KLSAgICBkbyB7Ci0gICAgICAgIG5kb25lID0gMDsKLSAgICAgICAgcG9zID0gMDsKLSAgICAgICAgd2hpbGUgKFB5RGljdF9OZXh0KG1vZHVsZXMsICZwb3MsICZrZXksICZ2YWx1ZSkpIHsKLSAgICAgICAgICAgIGlmICh2YWx1ZS0+b2JfcmVmY250ICE9IDEpCisgICAgICAgZW5kIGJlY2F1c2UgaXQgaXMgaW1wbGljaXRseSByZWZlcmVuY2VkIChlLmcuIGJ5IHByaW50KS4gKi8KKyAgICBpZiAod2Vha2xpc3QgIT0gTlVMTCkgeworICAgICAgICBQeV9zc2l6ZV90IGksIG47CisgICAgICAgIG4gPSBQeUxpc3RfR0VUX1NJWkUod2Vha2xpc3QpOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqdHVwID0gUHlMaXN0X0dFVF9JVEVNKHdlYWtsaXN0LCBpKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpuYW1lID0gUHlUdXBsZV9HRVRfSVRFTSh0dXAsIDApOworICAgICAgICAgICAgUHlPYmplY3QgKm1vZCA9IFB5V2Vha3JlZl9HRVRfT0JKRUNUKFB5VHVwbGVfR0VUX0lURU0odHVwLCAxKSk7CisgICAgICAgICAgICBpZiAobW9kID09IFB5X05vbmUpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAoUHlVbmljb2RlX0NoZWNrKGtleSkgJiYgUHlNb2R1bGVfQ2hlY2sodmFsdWUpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKGtleSwgImJ1aWx0aW5zIikgPT0gMCkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKGtleSwgInN5cyIpID09IDApCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIGlmIChQeV9WZXJib3NlRmxhZykKLSAgICAgICAgICAgICAgICAgICAgUHlTeXNfRm9ybWF0U3RkZXJyKAotICAgICAgICAgICAgICAgICAgICAgICAgIiMgY2xlYW51cFsxXSAlVVxuIiwga2V5KTsKLSAgICAgICAgICAgICAgICBfUHlNb2R1bGVfQ2xlYXIodmFsdWUpOwotICAgICAgICAgICAgICAgIFB5RGljdF9TZXRJdGVtKG1vZHVsZXMsIGtleSwgUHlfTm9uZSk7Ci0gICAgICAgICAgICAgICAgbmRvbmUrKzsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGFzc2VydChQeU1vZHVsZV9DaGVjayhtb2QpKTsKKyAgICAgICAgICAgIGRpY3QgPSBQeU1vZHVsZV9HZXREaWN0KG1vZCk7CisgICAgICAgICAgICBpZiAoZGljdCA9PSBpbnRlcnAtPmJ1aWx0aW5zIHx8IGRpY3QgPT0gaW50ZXJwLT5zeXNkaWN0KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgUHlfSU5DUkVGKG1vZCk7CisgICAgICAgICAgICBpZiAoUHlfVmVyYm9zZUZsYWcgJiYgUHlVbmljb2RlX0NoZWNrKG5hbWUpKQorICAgICAgICAgICAgICAgIFB5U3lzX0Zvcm1hdFN0ZGVycigiIyBjbGVhbnVwWzNdIHdpcGluZyAlVVxuIiwgbmFtZSk7CisgICAgICAgICAgICBfUHlNb2R1bGVfQ2xlYXIobW9kKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihtb2QpOwogICAgICAgICB9Ci0gICAgfSB3aGlsZSAobmRvbmUgPiAwKTsKLQotICAgIC8qIE5leHQsIGRlbGV0ZSBhbGwgbW9kdWxlcyAoc3RpbGwgc2tpcHBpbmcgYnVpbHRpbnMgYW5kIHN5cykgKi8KLSAgICBwb3MgPSAwOwotICAgIHdoaWxlIChQeURpY3RfTmV4dChtb2R1bGVzLCAmcG9zLCAma2V5LCAmdmFsdWUpKSB7Ci0gICAgICAgIGlmIChQeVVuaWNvZGVfQ2hlY2soa2V5KSAmJiBQeU1vZHVsZV9DaGVjayh2YWx1ZSkpIHsKLSAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfQ29tcGFyZVdpdGhBU0NJSVN0cmluZyhrZXksICJidWlsdGlucyIpID09IDApCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAoUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcoa2V5LCAic3lzIikgPT0gMCkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmIChQeV9WZXJib3NlRmxhZykKLSAgICAgICAgICAgICAgICBQeVN5c19Gb3JtYXRTdGRlcnIoIiMgY2xlYW51cFsyXSAlVVxuIiwga2V5KTsKLSAgICAgICAgICAgIF9QeU1vZHVsZV9DbGVhcih2YWx1ZSk7Ci0gICAgICAgICAgICBQeURpY3RfU2V0SXRlbShtb2R1bGVzLCBrZXksIFB5X05vbmUpOwotICAgICAgICB9CisgICAgICAgIFB5X0RFQ1JFRih3ZWFrbGlzdCk7CiAgICAgfQogCiAgICAgLyogTmV4dCwgZGVsZXRlIHN5cyBhbmQgYnVpbHRpbnMgKGluIHRoYXQgb3JkZXIpICovCi0gICAgdmFsdWUgPSBQeURpY3RfR2V0SXRlbVN0cmluZyhtb2R1bGVzLCAic3lzIik7Ci0gICAgaWYgKHZhbHVlICE9IE5VTEwgJiYgUHlNb2R1bGVfQ2hlY2sodmFsdWUpKSB7Ci0gICAgICAgIGlmIChQeV9WZXJib3NlRmxhZykKLSAgICAgICAgICAgIFB5U3lzX1dyaXRlU3RkZXJyKCIjIGNsZWFudXAgc3lzXG4iKTsKLSAgICAgICAgX1B5TW9kdWxlX0NsZWFyKHZhbHVlKTsKLSAgICAgICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcobW9kdWxlcywgInN5cyIsIFB5X05vbmUpOwotICAgIH0KLSAgICB2YWx1ZSA9IFB5RGljdF9HZXRJdGVtU3RyaW5nKG1vZHVsZXMsICJidWlsdGlucyIpOwotICAgIGlmICh2YWx1ZSAhPSBOVUxMICYmIFB5TW9kdWxlX0NoZWNrKHZhbHVlKSkgewotICAgICAgICBpZiAoUHlfVmVyYm9zZUZsYWcpCi0gICAgICAgICAgICBQeVN5c19Xcml0ZVN0ZGVycigiIyBjbGVhbnVwIGJ1aWx0aW5zXG4iKTsKLSAgICAgICAgX1B5TW9kdWxlX0NsZWFyKHZhbHVlKTsKLSAgICAgICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcobW9kdWxlcywgImJ1aWx0aW5zIiwgUHlfTm9uZSk7Ci0gICAgfQorICAgIGlmIChQeV9WZXJib3NlRmxhZykKKyAgICAgICAgUHlTeXNfRm9ybWF0U3RkZXJyKCIjIGNsZWFudXBbM10gd2lwaW5nIHN5c1xuIik7CisgICAgX1B5TW9kdWxlX0NsZWFyRGljdChpbnRlcnAtPnN5c2RpY3QpOworICAgIGlmIChQeV9WZXJib3NlRmxhZykKKyAgICAgICAgUHlTeXNfRm9ybWF0U3RkZXJyKCIjIGNsZWFudXBbM10gd2lwaW5nIGJ1aWx0aW5zXG4iKTsKKyAgICBfUHlNb2R1bGVfQ2xlYXJEaWN0KGludGVycC0+YnVpbHRpbnMpOwogCi0gICAgLyogRmluYWxseSwgY2xlYXIgYW5kIGRlbGV0ZSB0aGUgbW9kdWxlcyBkaXJlY3RvcnkgKi8KLSAgICBQeURpY3RfQ2xlYXIobW9kdWxlcyk7CisgICAgLyogQ2xlYXIgYW5kIGRlbGV0ZSB0aGUgbW9kdWxlcyBkaXJlY3RvcnkuICBBY3R1YWwgbW9kdWxlcyB3aWxsCisgICAgICAgc3RpbGwgYmUgdGhlcmUgb25seSBpZiBpbXBvcnRlZCBkdXJpbmcgdGhlIGV4ZWN1dGlvbiBvZiBzb21lCisgICAgICAgZGVzdHJ1Y3Rvci4gKi8KICAgICBpbnRlcnAtPm1vZHVsZXMgPSBOVUxMOwogICAgIFB5X0RFQ1JFRihtb2R1bGVzKTsKKworICAgIC8qIE9uY2UgbW9yZSAqLworICAgIF9QeUdDX0NvbGxlY3ROb0ZhaWwoKTsKKworI3VuZGVmIFNUT1JFX01PRFVMRV9XRUFLUkVGCiB9CiAKIApAQCAtNDU0LDEyICs1NzEsMTIgQEAKIAogLyogTWFnaWMgZm9yIGV4dGVuc2lvbiBtb2R1bGVzIChidWlsdC1pbiBhcyB3ZWxsIGFzIGR5bmFtaWNhbGx5CiAgICBsb2FkZWQpLiAgVG8gcHJldmVudCBpbml0aWFsaXppbmcgYW4gZXh0ZW5zaW9uIG1vZHVsZSBtb3JlIHRoYW4KLSAgIG9uY2UsIHdlIGtlZXAgYSBzdGF0aWMgZGljdGlvbmFyeSAnZXh0ZW5zaW9ucycga2V5ZWQgYnkgbW9kdWxlIG5hbWUKLSAgIChmb3IgYnVpbHQtaW4gbW9kdWxlcykgb3IgYnkgZmlsZW5hbWUgKGZvciBkeW5hbWljYWxseSBsb2FkZWQKLSAgIG1vZHVsZXMpLCBjb250YWluaW5nIHRoZXNlIG1vZHVsZXMuICBBIGNvcHkgb2YgdGhlIG1vZHVsZSdzCi0gICBkaWN0aW9uYXJ5IGlzIHN0b3JlZCBieSBjYWxsaW5nIF9QeUltcG9ydF9GaXh1cEV4dGVuc2lvbk9iamVjdCgpCi0gICBpbW1lZGlhdGVseSBhZnRlciB0aGUgbW9kdWxlIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIHN1Y2NlZWRzLiAgQQotICAgY29weSBjYW4gYmUgcmV0cmlldmVkIGZyb20gdGhlcmUgYnkgY2FsbGluZworICAgb25jZSwgd2Uga2VlcCBhIHN0YXRpYyBkaWN0aW9uYXJ5ICdleHRlbnNpb25zJyBrZXllZCBieSB0aGUgdHVwbGUKKyAgIChtb2R1bGUgbmFtZSwgbW9kdWxlIG5hbWUpICAoZm9yIGJ1aWx0LWluIG1vZHVsZXMpIG9yIGJ5CisgICAoZmlsZW5hbWUsIG1vZHVsZSBuYW1lKSAoZm9yIGR5bmFtaWNhbGx5IGxvYWRlZCBtb2R1bGVzKSwgY29udGFpbmluZyB0aGVzZQorICAgbW9kdWxlcy4gIEEgY29weSBvZiB0aGUgbW9kdWxlJ3MgZGljdGlvbmFyeSBpcyBzdG9yZWQgYnkgY2FsbGluZworICAgX1B5SW1wb3J0X0ZpeHVwRXh0ZW5zaW9uT2JqZWN0KCkgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIG1vZHVsZSBpbml0aWFsaXphdGlvbgorICAgZnVuY3Rpb24gc3VjY2VlZHMuICBBIGNvcHkgY2FuIGJlIHJldHJpZXZlZCBmcm9tIHRoZXJlIGJ5IGNhbGxpbmcKICAgIF9QeUltcG9ydF9GaW5kRXh0ZW5zaW9uT2JqZWN0KCkuCiAKICAgIE1vZHVsZXMgd2hpY2ggZG8gc3VwcG9ydCBtdWx0aXBsZSBpbml0aWFsaXphdGlvbiBzZXQgdGhlaXIgbV9zaXplCkBAIC00NzIsOCArNTg5LDkgQEAKIF9QeUltcG9ydF9GaXh1cEV4dGVuc2lvbk9iamVjdChQeU9iamVjdCAqbW9kLCBQeU9iamVjdCAqbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqZmlsZW5hbWUpCiB7Ci0gICAgUHlPYmplY3QgKm1vZHVsZXMsICpkaWN0OworICAgIFB5T2JqZWN0ICptb2R1bGVzLCAqZGljdCwgKmtleTsKICAgICBzdHJ1Y3QgUHlNb2R1bGVEZWYgKmRlZjsKKyAgICBpbnQgcmVzOwogICAgIGlmIChleHRlbnNpb25zID09IE5VTEwpIHsKICAgICAgICAgZXh0ZW5zaW9ucyA9IFB5RGljdF9OZXcoKTsKICAgICAgICAgaWYgKGV4dGVuc2lvbnMgPT0gTlVMTCkKQEAgLTUwOSwxMiArNjI3LDE4IEBACiAgICAgICAgIGlmIChkZWYtPm1fYmFzZS5tX2NvcHkgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICB9Ci0gICAgUHlEaWN0X1NldEl0ZW0oZXh0ZW5zaW9ucywgZmlsZW5hbWUsIChQeU9iamVjdCopZGVmKTsKKyAgICBrZXkgPSBQeVR1cGxlX1BhY2soMiwgZmlsZW5hbWUsIG5hbWUpOworICAgIGlmIChrZXkgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIHJlcyA9IFB5RGljdF9TZXRJdGVtKGV4dGVuc2lvbnMsIGtleSwgKFB5T2JqZWN0ICopZGVmKTsKKyAgICBQeV9ERUNSRUYoa2V5KTsKKyAgICBpZiAocmVzIDwgMCkKKyAgICAgICAgcmV0dXJuIC0xOwogICAgIHJldHVybiAwOwogfQogCiBpbnQKLV9QeUltcG9ydF9GaXh1cEJ1aWx0aW4oUHlPYmplY3QgKm1vZCwgY2hhciAqbmFtZSkKK19QeUltcG9ydF9GaXh1cEJ1aWx0aW4oUHlPYmplY3QgKm1vZCwgY29uc3QgY2hhciAqbmFtZSkKIHsKICAgICBpbnQgcmVzOwogICAgIFB5T2JqZWN0ICpuYW1lb2JqOwpAQCAtNTI5LDExICs2NTMsMTUgQEAKIFB5T2JqZWN0ICoKIF9QeUltcG9ydF9GaW5kRXh0ZW5zaW9uT2JqZWN0KFB5T2JqZWN0ICpuYW1lLCBQeU9iamVjdCAqZmlsZW5hbWUpCiB7Ci0gICAgUHlPYmplY3QgKm1vZCwgKm1kaWN0OworICAgIFB5T2JqZWN0ICptb2QsICptZGljdCwgKmtleTsKICAgICBQeU1vZHVsZURlZiogZGVmOwogICAgIGlmIChleHRlbnNpb25zID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGRlZiA9IChQeU1vZHVsZURlZiopUHlEaWN0X0dldEl0ZW0oZXh0ZW5zaW9ucywgZmlsZW5hbWUpOworICAgIGtleSA9IFB5VHVwbGVfUGFjaygyLCBmaWxlbmFtZSwgbmFtZSk7CisgICAgaWYgKGtleSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBkZWYgPSAoUHlNb2R1bGVEZWYgKilQeURpY3RfR2V0SXRlbShleHRlbnNpb25zLCBrZXkpOworICAgIFB5X0RFQ1JFRihrZXkpOwogICAgIGlmIChkZWYgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgaWYgKGRlZi0+bV9zaXplID09IC0xKSB7CkBAIC02NDksMjIgKzc3NywyMyBAQAogICogaW50ZXJmYWNlLiAgVGhlIG90aGVyIHR3byBleGlzdCBwcmltYXJpbHkgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCiAgKi8KIFB5T2JqZWN0ICoKLVB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlKGNoYXIgKm5hbWUsIFB5T2JqZWN0ICpjbykKK1B5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlKGNvbnN0IGNoYXIgKm5hbWUsIFB5T2JqZWN0ICpjbykKIHsKICAgICByZXR1cm4gUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVXaXRoUGF0aG5hbWVzKAogICAgICAgICBuYW1lLCBjbywgKGNoYXIgKilOVUxMLCAoY2hhciAqKU5VTEwpOwogfQogCiBQeU9iamVjdCAqCi1QeUltcG9ydF9FeGVjQ29kZU1vZHVsZUV4KGNoYXIgKm5hbWUsIFB5T2JqZWN0ICpjbywgY2hhciAqcGF0aG5hbWUpCitQeUltcG9ydF9FeGVjQ29kZU1vZHVsZUV4KGNvbnN0IGNoYXIgKm5hbWUsIFB5T2JqZWN0ICpjbywgY29uc3QgY2hhciAqcGF0aG5hbWUpCiB7CiAgICAgcmV0dXJuIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlV2l0aFBhdGhuYW1lcygKICAgICAgICAgbmFtZSwgY28sIHBhdGhuYW1lLCAoY2hhciAqKU5VTEwpOwogfQogCiBQeU9iamVjdCAqCi1QeUltcG9ydF9FeGVjQ29kZU1vZHVsZVdpdGhQYXRobmFtZXMoY2hhciAqbmFtZSwgUHlPYmplY3QgKmNvLCBjaGFyICpwYXRobmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpjcGF0aG5hbWUpCitQeUltcG9ydF9FeGVjQ29kZU1vZHVsZVdpdGhQYXRobmFtZXMoY29uc3QgY2hhciAqbmFtZSwgUHlPYmplY3QgKmNvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBhdGhuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmNwYXRobmFtZSkKIHsKICAgICBQeU9iamVjdCAqbSA9IE5VTEw7CiAgICAgUHlPYmplY3QgKm5hbWVvYmosICpwYXRob2JqID0gTlVMTCwgKmNwYXRob2JqID0gTlVMTDsKQEAgLTY5NSw3ICs4MjQsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAibm8gaW50ZXJwcmV0ZXIhIik7CiAgICAgICAgIH0KIAotICAgICAgICBwYXRob2JqID0gX1B5T2JqZWN0X0NhbGxNZXRob2RPYmpJZEFyZ3MoaW50ZXJwLT5pbXBvcnRsaWIsCisgICAgICAgIHBhdGhvYmogPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkT2JqQXJncyhpbnRlcnAtPmltcG9ydGxpYiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZQeUlkX19nZXRfc291cmNlZmlsZSwgY3BhdGhvYmosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKICAgICAgICAgaWYgKHBhdGhvYmogPT0gTlVMTCkKQEAgLTcxMiwxMiArODQxLDEwIEBACiAgICAgcmV0dXJuIG07CiB9CiAKLVB5T2JqZWN0KgotUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVPYmplY3QoUHlPYmplY3QgKm5hbWUsIFB5T2JqZWN0ICpjbywgUHlPYmplY3QgKnBhdGhuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmNwYXRobmFtZSkKK3N0YXRpYyBQeU9iamVjdCAqCittb2R1bGVfZGljdF9mb3JfZXhlYyhQeU9iamVjdCAqbmFtZSkKIHsKLSAgICBQeU9iamVjdCAqbW9kdWxlcyA9IFB5SW1wb3J0X0dldE1vZHVsZURpY3QoKTsKLSAgICBQeU9iamVjdCAqbSwgKmQsICp2OworICAgIFB5T2JqZWN0ICptLCAqZCA9IE5VTEw7CiAKICAgICBtID0gUHlJbXBvcnRfQWRkTW9kdWxlT2JqZWN0KG5hbWUpOwogICAgIGlmIChtID09IE5VTEwpCkBAIC03MjcsMzEgKzg1NCwyNiBAQAogICAgIGQgPSBQeU1vZHVsZV9HZXREaWN0KG0pOwogICAgIGlmIChQeURpY3RfR2V0SXRlbVN0cmluZyhkLCAiX19idWlsdGluc19fIikgPT0gTlVMTCkgewogICAgICAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgIl9fYnVpbHRpbnNfXyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUV2YWxfR2V0QnVpbHRpbnMoKSkgIT0gMCkKLSAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUV2YWxfR2V0QnVpbHRpbnMoKSkgIT0gMCkgeworICAgICAgICAgICAgcmVtb3ZlX21vZHVsZShuYW1lKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CiAgICAgfQotICAgIGlmIChwYXRobmFtZSAhPSBOVUxMKSB7Ci0gICAgICAgIHYgPSBwYXRobmFtZTsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIHYgPSAoKFB5Q29kZU9iamVjdCAqKWNvKS0+Y29fZmlsZW5hbWU7Ci0gICAgfQotICAgIFB5X0lOQ1JFRih2KTsKLSAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgIl9fZmlsZV9fIiwgdikgIT0gMCkKLSAgICAgICAgUHlFcnJfQ2xlYXIoKTsgLyogTm90IGltcG9ydGFudCBlbm91Z2ggdG8gcmVwb3J0ICovCi0gICAgUHlfREVDUkVGKHYpOwogCi0gICAgLyogUmVtZW1iZXIgdGhlIHB5YyBwYXRoIG5hbWUgYXMgdGhlIF9fY2FjaGVkX18gYXR0cmlidXRlLiAqLwotICAgIGlmIChjcGF0aG5hbWUgIT0gTlVMTCkKLSAgICAgICAgdiA9IGNwYXRobmFtZTsKLSAgICBlbHNlCi0gICAgICAgIHYgPSBQeV9Ob25lOwotICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAiX19jYWNoZWRfXyIsIHYpICE9IDApCi0gICAgICAgIFB5RXJyX0NsZWFyKCk7IC8qIE5vdCBpbXBvcnRhbnQgZW5vdWdoIHRvIHJlcG9ydCAqLworICAgIHJldHVybiBkOyAgLyogUmV0dXJuIGEgYm9ycm93ZWQgcmVmZXJlbmNlLiAqLworfQogCi0gICAgdiA9IFB5RXZhbF9FdmFsQ29kZShjbywgZCwgZCk7Ci0gICAgaWYgKHYgPT0gTlVMTCkKLSAgICAgICAgZ290byBlcnJvcjsKK3N0YXRpYyBQeU9iamVjdCAqCitleGVjX2NvZGVfaW5fbW9kdWxlKFB5T2JqZWN0ICpuYW1lLCBQeU9iamVjdCAqbW9kdWxlX2RpY3QsIFB5T2JqZWN0ICpjb2RlX29iamVjdCkKK3sKKyAgICBQeU9iamVjdCAqbW9kdWxlcyA9IFB5SW1wb3J0X0dldE1vZHVsZURpY3QoKTsKKyAgICBQeU9iamVjdCAqdiwgKm07CisKKyAgICB2ID0gUHlFdmFsX0V2YWxDb2RlKGNvZGVfb2JqZWN0LCBtb2R1bGVfZGljdCwgbW9kdWxlX2RpY3QpOworICAgIGlmICh2ID09IE5VTEwpIHsKKyAgICAgICAgcmVtb3ZlX21vZHVsZShuYW1lKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogICAgIFB5X0RFQ1JFRih2KTsKIAogICAgIGlmICgobSA9IFB5RGljdF9HZXRJdGVtKG1vZHVsZXMsIG5hbWUpKSA9PSBOVUxMKSB7CkBAIC03NjQsMTAgKzg4NiwzMiBAQAogICAgIFB5X0lOQ1JFRihtKTsKIAogICAgIHJldHVybiBtOworfQogCi0gIGVycm9yOgotICAgIHJlbW92ZV9tb2R1bGUobmFtZSk7Ci0gICAgcmV0dXJuIE5VTEw7CitQeU9iamVjdCoKK1B5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlT2JqZWN0KFB5T2JqZWN0ICpuYW1lLCBQeU9iamVjdCAqY28sIFB5T2JqZWN0ICpwYXRobmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpjcGF0aG5hbWUpCit7CisgICAgUHlPYmplY3QgKmQsICpyZXM7CisgICAgUHlJbnRlcnByZXRlclN0YXRlICppbnRlcnAgPSBQeVRocmVhZFN0YXRlX0dFVCgpLT5pbnRlcnA7CisgICAgX1B5X0lERU5USUZJRVIoX2ZpeF91cF9tb2R1bGUpOworCisgICAgZCA9IG1vZHVsZV9kaWN0X2Zvcl9leGVjKG5hbWUpOworICAgIGlmIChkID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgaWYgKHBhdGhuYW1lID09IE5VTEwpIHsKKyAgICAgICAgcGF0aG5hbWUgPSAoKFB5Q29kZU9iamVjdCAqKWNvKS0+Y29fZmlsZW5hbWU7CisgICAgfQorICAgIHJlcyA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWRPYmpBcmdzKGludGVycC0+aW1wb3J0bGliLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZQeUlkX19maXhfdXBfbW9kdWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQsIG5hbWUsIHBhdGhuYW1lLCBjcGF0aG5hbWUsIE5VTEwpOworICAgIGlmIChyZXMgIT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYocmVzKTsKKyAgICAgICAgcmVzID0gZXhlY19jb2RlX2luX21vZHVsZShuYW1lLCBkLCBjbyk7CisgICAgfQorICAgIHJldHVybiByZXM7CiB9CiAKIApAQCAtODA5LDM1ICs5NTMsNjYgQEAKICAgICBQeV9ERUNSRUYob2xkbmFtZSk7CiB9CiAKKy8qW2NsaW5pYyBpbnB1dF0KK19pbXAuX2ZpeF9jb19maWxlbmFtZQorCisgICAgY29kZTogb2JqZWN0KHR5cGU9IlB5Q29kZU9iamVjdCAqIiwgc3ViY2xhc3Nfb2Y9IiZQeUNvZGVfVHlwZSIpCisgICAgICAgIENvZGUgb2JqZWN0IHRvIGNoYW5nZS4KKworICAgIHBhdGg6IHVuaWNvZGUKKyAgICAgICAgRmlsZSBwYXRoIHRvIHVzZS4KKyAgICAvCisKK0NoYW5nZXMgY29kZS5jb19maWxlbmFtZSB0byBzcGVjaWZ5IHRoZSBwYXNzZWQtaW4gZmlsZSBwYXRoLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitQeURvY19TVFJWQVIoX2ltcF9fZml4X2NvX2ZpbGVuYW1lX19kb2NfXywKKyJfZml4X2NvX2ZpbGVuYW1lKCRtb2R1bGUsIGNvZGUsIHBhdGgsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJDaGFuZ2VzIGNvZGUuY29fZmlsZW5hbWUgdG8gc3BlY2lmeSB0aGUgcGFzc2VkLWluIGZpbGUgcGF0aC5cbiIKKyJcbiIKKyIgIGNvZGVcbiIKKyIgICAgQ29kZSBvYmplY3QgdG8gY2hhbmdlLlxuIgorIiAgcGF0aFxuIgorIiAgICBGaWxlIHBhdGggdG8gdXNlLiIpOworCisjZGVmaW5lIF9JTVBfX0ZJWF9DT19GSUxFTkFNRV9NRVRIT0RERUYgICAgXAorICAgIHsiX2ZpeF9jb19maWxlbmFtZSIsIChQeUNGdW5jdGlvbilfaW1wX19maXhfY29fZmlsZW5hbWUsIE1FVEhfVkFSQVJHUywgX2ltcF9fZml4X2NvX2ZpbGVuYW1lX19kb2NfX30sCisKIHN0YXRpYyBQeU9iamVjdCAqCi1pbXBfZml4X2NvX2ZpbGVuYW1lKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK19pbXBfX2ZpeF9jb19maWxlbmFtZV9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5Q29kZU9iamVjdCAqY29kZSwgUHlPYmplY3QgKnBhdGgpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2ltcF9fZml4X2NvX2ZpbGVuYW1lKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQogewotICAgIFB5T2JqZWN0ICpjbzsKLSAgICBQeU9iamVjdCAqZmlsZV9wYXRoOworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5Q29kZU9iamVjdCAqY29kZTsKKyAgICBQeU9iamVjdCAqcGF0aDsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiT086X2ZpeF9jb19maWxlbmFtZSIsICZjbywgJmZpbGVfcGF0aCkpCi0gICAgICAgIHJldHVybiBOVUxMOworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAiTyFVOl9maXhfY29fZmlsZW5hbWUiLAorICAgICAgICAmUHlDb2RlX1R5cGUsICZjb2RlLCAmcGF0aCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfaW1wX19maXhfY29fZmlsZW5hbWVfaW1wbChtb2R1bGUsIGNvZGUsIHBhdGgpOwogCi0gICAgaWYgKCFQeUNvZGVfQ2hlY2soY28pKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAiZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIGNvZGUgb2JqZWN0Iik7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KIAotICAgIGlmICghUHlVbmljb2RlX0NoZWNrKGZpbGVfcGF0aCkpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJzZWNvbmQgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZyIpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9CitzdGF0aWMgUHlPYmplY3QgKgorX2ltcF9fZml4X2NvX2ZpbGVuYW1lX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlDb2RlT2JqZWN0ICpjb2RlLCBQeU9iamVjdCAqcGF0aCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD02YjRiMWVkZWIwZDU1YzVkIGlucHV0PTg5NWJhNTBlNzhiODJmMDVdKi8KIAotICAgIHVwZGF0ZV9jb21waWxlZF9tb2R1bGUoKFB5Q29kZU9iamVjdCopY28sIGZpbGVfcGF0aCk7Cit7CisgICAgdXBkYXRlX2NvbXBpbGVkX21vZHVsZShjb2RlLCBwYXRoKTsKIAogICAgIFB5X1JFVFVSTl9OT05FOwogfQogCiAKIC8qIEZvcndhcmQgKi8KLXN0YXRpYyBzdHJ1Y3QgX2Zyb3plbiAqIGZpbmRfZnJvemVuKFB5T2JqZWN0ICopOworc3RhdGljIGNvbnN0IHN0cnVjdCBfZnJvemVuICogZmluZF9mcm96ZW4oUHlPYmplY3QgKik7CiAKIAogLyogSGVscGVyIHRvIHRlc3QgZm9yIGJ1aWx0LWluIG1vZHVsZSAqLwpAQCAtOTE5LDExICsxMDk0LDExIEBACiBQeUltcG9ydF9HZXRJbXBvcnRlcihQeU9iamVjdCAqcGF0aCkgewogICAgIFB5T2JqZWN0ICppbXBvcnRlcj1OVUxMLCAqcGF0aF9pbXBvcnRlcl9jYWNoZT1OVUxMLCAqcGF0aF9ob29rcz1OVUxMOwogCi0gICAgaWYgKChwYXRoX2ltcG9ydGVyX2NhY2hlID0gUHlTeXNfR2V0T2JqZWN0KCJwYXRoX2ltcG9ydGVyX2NhY2hlIikpKSB7Ci0gICAgICAgIGlmICgocGF0aF9ob29rcyA9IFB5U3lzX0dldE9iamVjdCgicGF0aF9ob29rcyIpKSkgewotICAgICAgICAgICAgaW1wb3J0ZXIgPSBnZXRfcGF0aF9pbXBvcnRlcihwYXRoX2ltcG9ydGVyX2NhY2hlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoX2hvb2tzLCBwYXRoKTsKLSAgICAgICAgfQorICAgIHBhdGhfaW1wb3J0ZXJfY2FjaGUgPSBQeVN5c19HZXRPYmplY3QoInBhdGhfaW1wb3J0ZXJfY2FjaGUiKTsKKyAgICBwYXRoX2hvb2tzID0gUHlTeXNfR2V0T2JqZWN0KCJwYXRoX2hvb2tzIik7CisgICAgaWYgKHBhdGhfaW1wb3J0ZXJfY2FjaGUgIT0gTlVMTCAmJiBwYXRoX2hvb2tzICE9IE5VTEwpIHsKKyAgICAgICAgaW1wb3J0ZXIgPSBnZXRfcGF0aF9pbXBvcnRlcihwYXRoX2ltcG9ydGVyX2NhY2hlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhfaG9va3MsIHBhdGgpOwogICAgIH0KICAgICBQeV9YSU5DUkVGKGltcG9ydGVyKTsgLyogZ2V0X3BhdGhfaW1wb3J0ZXIgcmV0dXJucyBhIGJvcnJvd2VkIHJlZmVyZW5jZSAqLwogICAgIHJldHVybiBpbXBvcnRlcjsKQEAgLTk0MCw4ICsxMTE1LDEyIEBACiBpbml0X2J1aWx0aW4oUHlPYmplY3QgKm5hbWUpCiB7CiAgICAgc3RydWN0IF9pbml0dGFiICpwOworICAgIFB5T2JqZWN0ICptb2Q7CiAKLSAgICBpZiAoX1B5SW1wb3J0X0ZpbmRFeHRlbnNpb25PYmplY3QobmFtZSwgbmFtZSkgIT0gTlVMTCkKKyAgICBtb2QgPSBfUHlJbXBvcnRfRmluZEV4dGVuc2lvbk9iamVjdChuYW1lLCBuYW1lKTsKKyAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIGlmIChtb2QgIT0gTlVMTCkKICAgICAgICAgcmV0dXJuIDE7CiAKICAgICBmb3IgKHAgPSBQeUltcG9ydF9Jbml0dGFiOyBwLT5uYW1lICE9IE5VTEw7IHArKykgewpAQCAtOTc0LDEwICsxMTUzLDEwIEBACiAKIC8qIEZyb3plbiBtb2R1bGVzICovCiAKLXN0YXRpYyBzdHJ1Y3QgX2Zyb3plbiAqCitzdGF0aWMgY29uc3Qgc3RydWN0IF9mcm96ZW4gKgogZmluZF9mcm96ZW4oUHlPYmplY3QgKm5hbWUpCiB7Ci0gICAgc3RydWN0IF9mcm96ZW4gKnA7CisgICAgY29uc3Qgc3RydWN0IF9mcm96ZW4gKnA7CiAKICAgICBpZiAobmFtZSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTk5NCw3ICsxMTczLDcgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBnZXRfZnJvemVuX29iamVjdChQeU9iamVjdCAqbmFtZSkKIHsKLSAgICBzdHJ1Y3QgX2Zyb3plbiAqcCA9IGZpbmRfZnJvemVuKG5hbWUpOworICAgIGNvbnN0IHN0cnVjdCBfZnJvemVuICpwID0gZmluZF9mcm96ZW4obmFtZSk7CiAgICAgaW50IHNpemU7CiAKICAgICBpZiAocCA9PSBOVUxMKSB7CkBAIC0xMDEyLDEzICsxMTkxLDEzIEBACiAgICAgc2l6ZSA9IHAtPnNpemU7CiAgICAgaWYgKHNpemUgPCAwKQogICAgICAgICBzaXplID0gLXNpemU7Ci0gICAgcmV0dXJuIFB5TWFyc2hhbF9SZWFkT2JqZWN0RnJvbVN0cmluZygoY2hhciAqKXAtPmNvZGUsIHNpemUpOworICAgIHJldHVybiBQeU1hcnNoYWxfUmVhZE9iamVjdEZyb21TdHJpbmcoKGNvbnN0IGNoYXIgKilwLT5jb2RlLCBzaXplKTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKIGlzX2Zyb3plbl9wYWNrYWdlKFB5T2JqZWN0ICpuYW1lKQogewotICAgIHN0cnVjdCBfZnJvemVuICpwID0gZmluZF9mcm96ZW4obmFtZSk7CisgICAgY29uc3Qgc3RydWN0IF9mcm96ZW4gKnAgPSBmaW5kX2Zyb3plbihuYW1lKTsKICAgICBpbnQgc2l6ZTsKIAogICAgIGlmIChwID09IE5VTEwpIHsKQEAgLTEwNDUsOCArMTIyNCw4IEBACiBpbnQKIFB5SW1wb3J0X0ltcG9ydEZyb3plbk1vZHVsZU9iamVjdChQeU9iamVjdCAqbmFtZSkKIHsKLSAgICBzdHJ1Y3QgX2Zyb3plbiAqcDsKLSAgICBQeU9iamVjdCAqY28sICptLCAqcGF0aDsKKyAgICBjb25zdCBzdHJ1Y3QgX2Zyb3plbiAqcDsKKyAgICBQeU9iamVjdCAqY28sICptLCAqZDsKICAgICBpbnQgaXNwYWNrYWdlOwogICAgIGludCBzaXplOwogCkBAIC0xMDY0LDcgKzEyNDMsNyBAQAogICAgIGlzcGFja2FnZSA9IChzaXplIDwgMCk7CiAgICAgaWYgKGlzcGFja2FnZSkKICAgICAgICAgc2l6ZSA9IC1zaXplOwotICAgIGNvID0gUHlNYXJzaGFsX1JlYWRPYmplY3RGcm9tU3RyaW5nKChjaGFyICopcC0+Y29kZSwgc2l6ZSk7CisgICAgY28gPSBQeU1hcnNoYWxfUmVhZE9iamVjdEZyb21TdHJpbmcoKGNvbnN0IGNoYXIgKilwLT5jb2RlLCBzaXplKTsKICAgICBpZiAoY28gPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIC0xOwogICAgIGlmICghUHlDb2RlX0NoZWNrKGNvKSkgewpAQCAtMTA3NCwyOSArMTI1MywyNyBAQAogICAgICAgICBnb3RvIGVycl9yZXR1cm47CiAgICAgfQogICAgIGlmIChpc3BhY2thZ2UpIHsKLSAgICAgICAgLyogU2V0IF9fcGF0aF9fIHRvIHRoZSBwYWNrYWdlIG5hbWUgKi8KLSAgICAgICAgUHlPYmplY3QgKmQsICpsOworICAgICAgICAvKiBTZXQgX19wYXRoX18gdG8gdGhlIGVtcHR5IGxpc3QgKi8KKyAgICAgICAgUHlPYmplY3QgKmw7CiAgICAgICAgIGludCBlcnI7CiAgICAgICAgIG0gPSBQeUltcG9ydF9BZGRNb2R1bGVPYmplY3QobmFtZSk7CiAgICAgICAgIGlmIChtID09IE5VTEwpCiAgICAgICAgICAgICBnb3RvIGVycl9yZXR1cm47CiAgICAgICAgIGQgPSBQeU1vZHVsZV9HZXREaWN0KG0pOwotICAgICAgICBsID0gUHlMaXN0X05ldygxKTsKKyAgICAgICAgbCA9IFB5TGlzdF9OZXcoMCk7CiAgICAgICAgIGlmIChsID09IE5VTEwpIHsKICAgICAgICAgICAgIGdvdG8gZXJyX3JldHVybjsKICAgICAgICAgfQotICAgICAgICBQeV9JTkNSRUYobmFtZSk7Ci0gICAgICAgIFB5TGlzdF9TRVRfSVRFTShsLCAwLCBuYW1lKTsKICAgICAgICAgZXJyID0gUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgIl9fcGF0aF9fIiwgbCk7CiAgICAgICAgIFB5X0RFQ1JFRihsKTsKICAgICAgICAgaWYgKGVyciAhPSAwKQogICAgICAgICAgICAgZ290byBlcnJfcmV0dXJuOwogICAgIH0KLSAgICBwYXRoID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoIjxmcm96ZW4+Iik7Ci0gICAgaWYgKHBhdGggPT0gTlVMTCkKKyAgICBkID0gbW9kdWxlX2RpY3RfZm9yX2V4ZWMobmFtZSk7CisgICAgaWYgKGQgPT0gTlVMTCkgewogICAgICAgICBnb3RvIGVycl9yZXR1cm47Ci0gICAgbSA9IFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlT2JqZWN0KG5hbWUsIGNvLCBwYXRoLCBOVUxMKTsKLSAgICBQeV9ERUNSRUYocGF0aCk7CisgICAgfQorICAgIG0gPSBleGVjX2NvZGVfaW5fbW9kdWxlKG5hbWUsIGQsIGNvKTsKICAgICBpZiAobSA9PSBOVUxMKQogICAgICAgICBnb3RvIGVycl9yZXR1cm47CiAgICAgUHlfREVDUkVGKGNvKTsKQEAgLTExMDgsNyArMTI4NSw3IEBACiB9CiAKIGludAotUHlJbXBvcnRfSW1wb3J0RnJvemVuTW9kdWxlKGNoYXIgKm5hbWUpCitQeUltcG9ydF9JbXBvcnRGcm96ZW5Nb2R1bGUoY29uc3QgY2hhciAqbmFtZSkKIHsKICAgICBQeU9iamVjdCAqbmFtZW9iajsKICAgICBpbnQgcmV0OwpAQCAtMTIyMiw3ICsxMzk5LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsZXZlbCkKIHsKICAgICBfUHlfSURFTlRJRklFUihfX2ltcG9ydF9fKTsKLSAgICBfUHlfSURFTlRJRklFUihfX2luaXRpYWxpemluZ19fKTsKKyAgICBfUHlfSURFTlRJRklFUihfX3NwZWNfXyk7CisgICAgX1B5X0lERU5USUZJRVIoX2luaXRpYWxpemluZyk7CiAgICAgX1B5X0lERU5USUZJRVIoX19wYWNrYWdlX18pOwogICAgIF9QeV9JREVOVElGSUVSKF9fcGF0aF9fKTsKICAgICBfUHlfSURFTlRJRklFUihfX25hbWVfXyk7CkBAIC0xMjM4LDYgKzE0MTYsNyBAQAogICAgIFB5T2JqZWN0ICpnbG9iYWxzID0gTlVMTDsKICAgICBQeU9iamVjdCAqZnJvbWxpc3QgPSBOVUxMOwogICAgIFB5SW50ZXJwcmV0ZXJTdGF0ZSAqaW50ZXJwID0gUHlUaHJlYWRTdGF0ZV9HRVQoKS0+aW50ZXJwOworICAgIGludCBoYXNfZnJvbTsKIAogICAgIC8qIE1ha2Ugc3VyZSB0byB1c2UgZGVmYXVsdCB2YWx1ZXMgc28gYXMgdG8gbm90IGhhdmUKICAgICAgICBQeU9iamVjdF9DYWxsTWV0aG9kT2JqQXJncygpIHRydW5jYXRlIHRoZSBwYXJhbWV0ZXIgbGlzdCBiZWNhdXNlIG9mIGEKQEAgLTEzNTgsNyArMTUzNywxMSBAQAogICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KKwogICAgICAgICBiYXNlID0gUHlVbmljb2RlX1N1YnN0cmluZyhwYWNrYWdlLCAwLCBsYXN0X2RvdCk7CisgICAgICAgIGlmIChiYXNlID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGVycm9yOworCiAgICAgICAgIGlmIChQeVVuaWNvZGVfR0VUX0xFTkdUSChuYW1lKSA+IDApIHsKICAgICAgICAgICAgIFB5T2JqZWN0ICpib3Jyb3dlZF9kb3QsICpzZXEgPSBOVUxMOwogCkBAIC0xNDEyLDE2ICsxNTk1LDIxIEBACiAgICAgICAgIGdvdG8gZXJyb3Jfd2l0aF91bmxvY2s7CiAgICAgfQogICAgIGVsc2UgaWYgKG1vZCAhPSBOVUxMKSB7Ci0gICAgICAgIFB5T2JqZWN0ICp2YWx1ZTsKKyAgICAgICAgUHlPYmplY3QgKnZhbHVlID0gTlVMTDsKKyAgICAgICAgUHlPYmplY3QgKnNwZWM7CiAgICAgICAgIGludCBpbml0aWFsaXppbmcgPSAwOwogCiAgICAgICAgIFB5X0lOQ1JFRihtb2QpOwogICAgICAgICAvKiBPcHRpbWl6YXRpb246IG9ubHkgY2FsbCBfYm9vdHN0cmFwLl9sb2NrX3VubG9ja19tb2R1bGUoKSBpZgotICAgICAgICAgICBfX2luaXRpYWxpemluZ19fIGlzIHRydWUuCi0gICAgICAgICAgIE5PVEU6IGJlY2F1c2Ugb2YgdGhpcywgX19pbml0aWFsaXppbmdfXyBtdXN0IGJlIHNldCAqYmVmb3JlKgorICAgICAgICAgICBfX3NwZWNfXy5faW5pdGlhbGl6aW5nIGlzIHRydWUuCisgICAgICAgICAgIE5PVEU6IGJlY2F1c2Ugb2YgdGhpcywgaW5pdGlhbGl6aW5nIG11c3QgYmUgc2V0ICpiZWZvcmUqCiAgICAgICAgICAgIHN0dWZmaW5nIHRoZSBuZXcgbW9kdWxlIGluIHN5cy5tb2R1bGVzLgogICAgICAgICAgKi8KLSAgICAgICAgdmFsdWUgPSBfUHlPYmplY3RfR2V0QXR0cklkKG1vZCwgJlB5SWRfX19pbml0aWFsaXppbmdfXyk7CisgICAgICAgIHNwZWMgPSBfUHlPYmplY3RfR2V0QXR0cklkKG1vZCwgJlB5SWRfX19zcGVjX18pOworICAgICAgICBpZiAoc3BlYyAhPSBOVUxMKSB7CisgICAgICAgICAgICB2YWx1ZSA9IF9QeU9iamVjdF9HZXRBdHRySWQoc3BlYywgJlB5SWRfX2luaXRpYWxpemluZyk7CisgICAgICAgICAgICBQeV9ERUNSRUYoc3BlYyk7CisgICAgICAgIH0KICAgICAgICAgaWYgKHZhbHVlID09IE5VTEwpCiAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwogICAgICAgICBlbHNlIHsKQEAgLTE0MzIsNyArMTYyMCw3IEBACiAgICAgICAgIH0KICAgICAgICAgaWYgKGluaXRpYWxpemluZyA+IDApIHsKICAgICAgICAgICAgIC8qIF9ib290c3RyYXAuX2xvY2tfdW5sb2NrX21vZHVsZSgpIHJlbGVhc2VzIHRoZSBpbXBvcnQgbG9jayAqLwotICAgICAgICAgICAgdmFsdWUgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZE9iaklkQXJncyhpbnRlcnAtPmltcG9ydGxpYiwKKyAgICAgICAgICAgIHZhbHVlID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZE9iakFyZ3MoaW50ZXJwLT5pbXBvcnRsaWIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZQeUlkX19sb2NrX3VubG9ja19tb2R1bGUsIGFic19uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBOVUxMKQpAQCAtMTQ1MCw3ICsxNjM4LDcgQEAKICAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIC8qIF9ib290c3RyYXAuX2ZpbmRfYW5kX2xvYWQoKSByZWxlYXNlcyB0aGUgaW1wb3J0IGxvY2sgKi8KLSAgICAgICAgbW9kID0gX1B5T2JqZWN0X0NhbGxNZXRob2RPYmpJZEFyZ3MoaW50ZXJwLT5pbXBvcnRsaWIsCisgICAgICAgIG1vZCA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWRPYmpBcmdzKGludGVycC0+aW1wb3J0bGliLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUHlJZF9fZmluZF9hbmRfbG9hZCwgYWJzX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWx0aW5zX2ltcG9ydCwgTlVMTCk7CiAgICAgICAgIGlmIChtb2QgPT0gTlVMTCkgewpAQCAtMTQ1OSw3ICsxNjQ3LDEwIEBACiAgICAgfQogICAgIC8qIEZyb20gbm93IG9uIHdlIGRvbid0IGhvbGQgdGhlIGltcG9ydCBsb2NrIGFueW1vcmUuICovCiAKLSAgICBpZiAoUHlPYmplY3RfTm90KGZyb21saXN0KSkgeworICAgIGhhc19mcm9tID0gUHlPYmplY3RfSXNUcnVlKGZyb21saXN0KTsKKyAgICBpZiAoaGFzX2Zyb20gPCAwKQorICAgICAgICBnb3RvIGVycm9yOworICAgIGlmICghaGFzX2Zyb20pIHsKICAgICAgICAgaWYgKGxldmVsID09IDAgfHwgUHlVbmljb2RlX0dFVF9MRU5HVEgobmFtZSkgPiAwKSB7CiAgICAgICAgICAgICBQeU9iamVjdCAqZnJvbnQgPSBOVUxMOwogICAgICAgICAgICAgUHlPYmplY3QgKnBhcnRpdGlvbiA9IE5VTEw7CkBAIC0xNTE5LDcgKzE3MTAsNyBAQAogICAgICAgICB9CiAgICAgfQogICAgIGVsc2UgewotICAgICAgICBmaW5hbF9tb2QgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZE9iaklkQXJncyhpbnRlcnAtPmltcG9ydGxpYiwKKyAgICAgICAgZmluYWxfbW9kID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZE9iakFyZ3MoaW50ZXJwLT5pbXBvcnRsaWIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZQeUlkX19oYW5kbGVfZnJvbWxpc3QsIG1vZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbWxpc3QsIGJ1aWx0aW5zX2ltcG9ydCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CkBAIC0xNjcxLDggKzE4NjIsMzMgQEAKICAgICByZXR1cm4gcjsKIH0KIAorLypbY2xpbmljIGlucHV0XQorX2ltcC5leHRlbnNpb25fc3VmZml4ZXMKKworUmV0dXJucyB0aGUgbGlzdCBvZiBmaWxlIHN1ZmZpeGVzIHVzZWQgdG8gaWRlbnRpZnkgZXh0ZW5zaW9uIG1vZHVsZXMuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK1B5RG9jX1NUUlZBUihfaW1wX2V4dGVuc2lvbl9zdWZmaXhlc19fZG9jX18sCisiZXh0ZW5zaW9uX3N1ZmZpeGVzKCRtb2R1bGUsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm5zIHRoZSBsaXN0IG9mIGZpbGUgc3VmZml4ZXMgdXNlZCB0byBpZGVudGlmeSBleHRlbnNpb24gbW9kdWxlcy4iKTsKKworI2RlZmluZSBfSU1QX0VYVEVOU0lPTl9TVUZGSVhFU19NRVRIT0RERUYgICAgXAorICAgIHsiZXh0ZW5zaW9uX3N1ZmZpeGVzIiwgKFB5Q0Z1bmN0aW9uKV9pbXBfZXh0ZW5zaW9uX3N1ZmZpeGVzLCBNRVRIX05PQVJHUywgX2ltcF9leHRlbnNpb25fc3VmZml4ZXNfX2RvY19ffSwKKwogc3RhdGljIFB5T2JqZWN0ICoKLWltcF9leHRlbnNpb25fc3VmZml4ZXMoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpub2FyZ3MpCitfaW1wX2V4dGVuc2lvbl9zdWZmaXhlc19pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2ltcF9leHRlbnNpb25fc3VmZml4ZXMoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKK3sKKyAgICByZXR1cm4gX2ltcF9leHRlbnNpb25fc3VmZml4ZXNfaW1wbChtb2R1bGUpOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorX2ltcF9leHRlbnNpb25fc3VmZml4ZXNfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWJiMzBhMjQzODE2Nzc5OGMgaW5wdXQ9ZWNkZWVlY2ZjYjZmODM5ZV0qLwogewogICAgIFB5T2JqZWN0ICpsaXN0OwogICAgIGNvbnN0IGNoYXIgKnN1ZmZpeDsKQEAgLTE3MDAsMTQgKzE5MTYsNTAgQEAKICAgICByZXR1cm4gbGlzdDsKIH0KIAorLypbY2xpbmljIGlucHV0XQorX2ltcC5pbml0X2J1aWx0aW4KKworICAgIG5hbWU6IHVuaWNvZGUKKyAgICAvCisKK0luaXRpYWxpemVzIGEgYnVpbHQtaW4gbW9kdWxlLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitQeURvY19TVFJWQVIoX2ltcF9pbml0X2J1aWx0aW5fX2RvY19fLAorImluaXRfYnVpbHRpbigkbW9kdWxlLCBuYW1lLCAvKVxuIgorIi0tXG4iCisiXG4iCisiSW5pdGlhbGl6ZXMgYSBidWlsdC1pbiBtb2R1bGUuIik7CisKKyNkZWZpbmUgX0lNUF9JTklUX0JVSUxUSU5fTUVUSE9EREVGICAgIFwKKyAgICB7ImluaXRfYnVpbHRpbiIsIChQeUNGdW5jdGlvbilfaW1wX2luaXRfYnVpbHRpbiwgTUVUSF9WQVJBUkdTLCBfaW1wX2luaXRfYnVpbHRpbl9fZG9jX199LAorCiBzdGF0aWMgUHlPYmplY3QgKgotaW1wX2luaXRfYnVpbHRpbihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitfaW1wX2luaXRfYnVpbHRpbl9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICpuYW1lKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19pbXBfaW5pdF9idWlsdGluKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQogeworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOwogICAgIFB5T2JqZWN0ICpuYW1lOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJVOmluaXRfYnVpbHRpbiIsCisgICAgICAgICZuYW1lKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9pbXBfaW5pdF9idWlsdGluX2ltcGwobW9kdWxlLCBuYW1lKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorX2ltcF9pbml0X2J1aWx0aW5faW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqbmFtZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1hMDI0NDk0OGE0M2Y4ZTI2IGlucHV0PWY5MzRkMjIzMWVjNTJhMmVdKi8KK3sKICAgICBpbnQgcmV0OwogICAgIFB5T2JqZWN0ICptOwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiVTppbml0X2J1aWx0aW4iLCAmbmFtZSkpCi0gICAgICAgIHJldHVybiBOVUxMOworCiAgICAgcmV0ID0gaW5pdF9idWlsdGluKG5hbWUpOwogICAgIGlmIChyZXQgPCAwKQogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTE3MjAsMTQgKzE5NzIsNTAgQEAKICAgICByZXR1cm4gbTsKIH0KIAorLypbY2xpbmljIGlucHV0XQorX2ltcC5pbml0X2Zyb3plbgorCisgICAgbmFtZTogdW5pY29kZQorICAgIC8KKworSW5pdGlhbGl6ZXMgYSBmcm96ZW4gbW9kdWxlLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitQeURvY19TVFJWQVIoX2ltcF9pbml0X2Zyb3plbl9fZG9jX18sCisiaW5pdF9mcm96ZW4oJG1vZHVsZSwgbmFtZSwgLylcbiIKKyItLVxuIgorIlxuIgorIkluaXRpYWxpemVzIGEgZnJvemVuIG1vZHVsZS4iKTsKKworI2RlZmluZSBfSU1QX0lOSVRfRlJPWkVOX01FVEhPRERFRiAgICBcCisgICAgeyJpbml0X2Zyb3plbiIsIChQeUNGdW5jdGlvbilfaW1wX2luaXRfZnJvemVuLCBNRVRIX1ZBUkFSR1MsIF9pbXBfaW5pdF9mcm96ZW5fX2RvY19ffSwKKwogc3RhdGljIFB5T2JqZWN0ICoKLWltcF9pbml0X2Zyb3plbihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitfaW1wX2luaXRfZnJvemVuX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKm5hbWUpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2ltcF9pbml0X2Zyb3plbihQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKIHsKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKICAgICBQeU9iamVjdCAqbmFtZTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAiVTppbml0X2Zyb3plbiIsCisgICAgICAgICZuYW1lKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9pbXBfaW5pdF9mcm96ZW5faW1wbChtb2R1bGUsIG5hbWUpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitfaW1wX2luaXRfZnJvemVuX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKm5hbWUpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZTRiYzJiZmYyOTZmOGYyMiBpbnB1dD0xMzAxOWFkZmMwNGYzZmIzXSovCit7CiAgICAgaW50IHJldDsKICAgICBQeU9iamVjdCAqbTsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIlU6aW5pdF9mcm96ZW4iLCAmbmFtZSkpCi0gICAgICAgIHJldHVybiBOVUxMOworCiAgICAgcmV0ID0gUHlJbXBvcnRfSW1wb3J0RnJvemVuTW9kdWxlT2JqZWN0KG5hbWUpOwogICAgIGlmIChyZXQgPCAwKQogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTE3NDAsNjEgKzIwMjgsMjM5IEBACiAgICAgcmV0dXJuIG07CiB9CiAKKy8qW2NsaW5pYyBpbnB1dF0KK19pbXAuZ2V0X2Zyb3plbl9vYmplY3QKKworICAgIG5hbWU6IHVuaWNvZGUKKyAgICAvCisKK0NyZWF0ZSBhIGNvZGUgb2JqZWN0IGZvciBhIGZyb3plbiBtb2R1bGUuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK1B5RG9jX1NUUlZBUihfaW1wX2dldF9mcm96ZW5fb2JqZWN0X19kb2NfXywKKyJnZXRfZnJvemVuX29iamVjdCgkbW9kdWxlLCBuYW1lLCAvKVxuIgorIi0tXG4iCisiXG4iCisiQ3JlYXRlIGEgY29kZSBvYmplY3QgZm9yIGEgZnJvemVuIG1vZHVsZS4iKTsKKworI2RlZmluZSBfSU1QX0dFVF9GUk9aRU5fT0JKRUNUX01FVEhPRERFRiAgICBcCisgICAgeyJnZXRfZnJvemVuX29iamVjdCIsIChQeUNGdW5jdGlvbilfaW1wX2dldF9mcm96ZW5fb2JqZWN0LCBNRVRIX1ZBUkFSR1MsIF9pbXBfZ2V0X2Zyb3plbl9vYmplY3RfX2RvY19ffSwKKwogc3RhdGljIFB5T2JqZWN0ICoKLWltcF9nZXRfZnJvemVuX29iamVjdChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitfaW1wX2dldF9mcm96ZW5fb2JqZWN0X2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKm5hbWUpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2ltcF9nZXRfZnJvemVuX29iamVjdChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKIHsKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKICAgICBQeU9iamVjdCAqbmFtZTsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiVTpnZXRfZnJvemVuX29iamVjdCIsICZuYW1lKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJVOmdldF9mcm96ZW5fb2JqZWN0IiwKKyAgICAgICAgJm5hbWUpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX2ltcF9nZXRfZnJvemVuX29iamVjdF9pbXBsKG1vZHVsZSwgbmFtZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK19pbXBfZ2V0X2Zyb3plbl9vYmplY3RfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqbmFtZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD00MDg5ZWM3MDJhOWQ3MGM1IGlucHV0PWVkNjg5YmMwNTM1OGZkYmRdKi8KK3sKICAgICByZXR1cm4gZ2V0X2Zyb3plbl9vYmplY3QobmFtZSk7CiB9CiAKKy8qW2NsaW5pYyBpbnB1dF0KK19pbXAuaXNfZnJvemVuX3BhY2thZ2UKKworICAgIG5hbWU6IHVuaWNvZGUKKyAgICAvCisKK1JldHVybnMgVHJ1ZSBpZiB0aGUgbW9kdWxlIG5hbWUgaXMgb2YgYSBmcm96ZW4gcGFja2FnZS4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworUHlEb2NfU1RSVkFSKF9pbXBfaXNfZnJvemVuX3BhY2thZ2VfX2RvY19fLAorImlzX2Zyb3plbl9wYWNrYWdlKCRtb2R1bGUsIG5hbWUsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm5zIFRydWUgaWYgdGhlIG1vZHVsZSBuYW1lIGlzIG9mIGEgZnJvemVuIHBhY2thZ2UuIik7CisKKyNkZWZpbmUgX0lNUF9JU19GUk9aRU5fUEFDS0FHRV9NRVRIT0RERUYgICAgXAorICAgIHsiaXNfZnJvemVuX3BhY2thZ2UiLCAoUHlDRnVuY3Rpb24pX2ltcF9pc19mcm96ZW5fcGFja2FnZSwgTUVUSF9WQVJBUkdTLCBfaW1wX2lzX2Zyb3plbl9wYWNrYWdlX19kb2NfX30sCisKIHN0YXRpYyBQeU9iamVjdCAqCi1pbXBfaXNfZnJvemVuX3BhY2thZ2UoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorX2ltcF9pc19mcm96ZW5fcGFja2FnZV9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICpuYW1lKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19pbXBfaXNfZnJvemVuX3BhY2thZ2UoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCiB7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CiAgICAgUHlPYmplY3QgKm5hbWU7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIlU6aXNfZnJvemVuX3BhY2thZ2UiLCAmbmFtZSkpCi0gICAgICAgIHJldHVybiBOVUxMOworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAiVTppc19mcm96ZW5fcGFja2FnZSIsCisgICAgICAgICZuYW1lKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9pbXBfaXNfZnJvemVuX3BhY2thZ2VfaW1wbChtb2R1bGUsIG5hbWUpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitfaW1wX2lzX2Zyb3plbl9wYWNrYWdlX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKm5hbWUpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ODZhYWIxNGRjZDRiOTU5YiBpbnB1dD04MWI2Y2RlY2QwODBmYmI4XSovCit7CiAgICAgcmV0dXJuIGlzX2Zyb3plbl9wYWNrYWdlKG5hbWUpOwogfQogCisvKltjbGluaWMgaW5wdXRdCitfaW1wLmlzX2J1aWx0aW4KKworICAgIG5hbWU6IHVuaWNvZGUKKyAgICAvCisKK1JldHVybnMgVHJ1ZSBpZiB0aGUgbW9kdWxlIG5hbWUgY29ycmVzcG9uZHMgdG8gYSBidWlsdC1pbiBtb2R1bGUuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK1B5RG9jX1NUUlZBUihfaW1wX2lzX2J1aWx0aW5fX2RvY19fLAorImlzX2J1aWx0aW4oJG1vZHVsZSwgbmFtZSwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybnMgVHJ1ZSBpZiB0aGUgbW9kdWxlIG5hbWUgY29ycmVzcG9uZHMgdG8gYSBidWlsdC1pbiBtb2R1bGUuIik7CisKKyNkZWZpbmUgX0lNUF9JU19CVUlMVElOX01FVEhPRERFRiAgICBcCisgICAgeyJpc19idWlsdGluIiwgKFB5Q0Z1bmN0aW9uKV9pbXBfaXNfYnVpbHRpbiwgTUVUSF9WQVJBUkdTLCBfaW1wX2lzX2J1aWx0aW5fX2RvY19ffSwKKwogc3RhdGljIFB5T2JqZWN0ICoKLWltcF9pc19idWlsdGluKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK19pbXBfaXNfYnVpbHRpbl9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICpuYW1lKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19pbXBfaXNfYnVpbHRpbihQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKIHsKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKICAgICBQeU9iamVjdCAqbmFtZTsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIlU6aXNfYnVpbHRpbiIsICZuYW1lKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZyhpc19idWlsdGluKG5hbWUpKTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAiVTppc19idWlsdGluIiwKKyAgICAgICAgJm5hbWUpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX2ltcF9pc19idWlsdGluX2ltcGwobW9kdWxlLCBuYW1lKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotaW1wX2lzX2Zyb3plbihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitfaW1wX2lzX2J1aWx0aW5faW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqbmFtZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kNTg0N2Y4Y2FjNTA5NDZlIGlucHV0PTg2YmVmZGFjMDIxZGQxYzddKi8KIHsKKyAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKGlzX2J1aWx0aW4obmFtZSkpOworfQorCisvKltjbGluaWMgaW5wdXRdCitfaW1wLmlzX2Zyb3plbgorCisgICAgbmFtZTogdW5pY29kZQorICAgIC8KKworUmV0dXJucyBUcnVlIGlmIHRoZSBtb2R1bGUgbmFtZSBjb3JyZXNwb25kcyB0byBhIGZyb3plbiBtb2R1bGUuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK1B5RG9jX1NUUlZBUihfaW1wX2lzX2Zyb3plbl9fZG9jX18sCisiaXNfZnJvemVuKCRtb2R1bGUsIG5hbWUsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm5zIFRydWUgaWYgdGhlIG1vZHVsZSBuYW1lIGNvcnJlc3BvbmRzIHRvIGEgZnJvemVuIG1vZHVsZS4iKTsKKworI2RlZmluZSBfSU1QX0lTX0ZST1pFTl9NRVRIT0RERUYgICAgXAorICAgIHsiaXNfZnJvemVuIiwgKFB5Q0Z1bmN0aW9uKV9pbXBfaXNfZnJvemVuLCBNRVRIX1ZBUkFSR1MsIF9pbXBfaXNfZnJvemVuX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfaW1wX2lzX2Zyb3plbl9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICpuYW1lKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19pbXBfaXNfZnJvemVuKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOwogICAgIFB5T2JqZWN0ICpuYW1lOwotICAgIHN0cnVjdCBfZnJvemVuICpwOwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiVTppc19mcm96ZW4iLCAmbmFtZSkpCi0gICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJVOmlzX2Zyb3plbiIsCisgICAgICAgICZuYW1lKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9pbXBfaXNfZnJvemVuX2ltcGwobW9kdWxlLCBuYW1lKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorX2ltcF9pc19mcm96ZW5faW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqbmFtZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD02NjkxYWY4ODRiYTQ5ODdkIGlucHV0PTczMDFkYmNhMTg5N2Q2NmJdKi8KK3sKKyAgICBjb25zdCBzdHJ1Y3QgX2Zyb3plbiAqcDsKKwogICAgIHAgPSBmaW5kX2Zyb3plbihuYW1lKTsKICAgICByZXR1cm4gUHlCb29sX0Zyb21Mb25nKChsb25nKSAocCA9PSBOVUxMID8gMCA6IHAtPnNpemUpKTsKIH0KIAogI2lmZGVmIEhBVkVfRFlOQU1JQ19MT0FESU5HCiAKKy8qW2NsaW5pYyBpbnB1dF0KK19pbXAubG9hZF9keW5hbWljCisKKyAgICBuYW1lOiB1bmljb2RlCisgICAgcGF0aDogZnNfdW5pY29kZQorICAgIGZpbGU6IG9iamVjdCA9IE5VTEwKKyAgICAvCisKK0xvYWRzIGFuIGV4dGVuc2lvbiBtb2R1bGUuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK1B5RG9jX1NUUlZBUihfaW1wX2xvYWRfZHluYW1pY19fZG9jX18sCisibG9hZF9keW5hbWljKCRtb2R1bGUsIG5hbWUsIHBhdGgsIGZpbGU9Tm9uZSwgLylcbiIKKyItLVxuIgorIlxuIgorIkxvYWRzIGFuIGV4dGVuc2lvbiBtb2R1bGUuIik7CisKKyNkZWZpbmUgX0lNUF9MT0FEX0RZTkFNSUNfTUVUSE9EREVGICAgIFwKKyAgICB7ImxvYWRfZHluYW1pYyIsIChQeUNGdW5jdGlvbilfaW1wX2xvYWRfZHluYW1pYywgTUVUSF9WQVJBUkdTLCBfaW1wX2xvYWRfZHluYW1pY19fZG9jX199LAorCiBzdGF0aWMgUHlPYmplY3QgKgotaW1wX2xvYWRfZHluYW1pYyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitfaW1wX2xvYWRfZHluYW1pY19pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICpuYW1lLCBQeU9iamVjdCAqcGF0aCwgUHlPYmplY3QgKmZpbGUpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2ltcF9sb2FkX2R5bmFtaWMoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgUHlPYmplY3QgKm5hbWUsICpwYXRobmFtZSwgKmZvYiA9IE5VTEwsICptb2Q7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlPYmplY3QgKm5hbWU7CisgICAgUHlPYmplY3QgKnBhdGg7CisgICAgUHlPYmplY3QgKmZpbGUgPSBOVUxMOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJVTyZ8Tzpsb2FkX2R5bmFtaWMiLAorICAgICAgICAmbmFtZSwgUHlVbmljb2RlX0ZTRGVjb2RlciwgJnBhdGgsICZmaWxlKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9pbXBfbG9hZF9keW5hbWljX2ltcGwobW9kdWxlLCBuYW1lLCBwYXRoLCBmaWxlKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorX2ltcF9sb2FkX2R5bmFtaWNfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqbmFtZSwgUHlPYmplY3QgKnBhdGgsIFB5T2JqZWN0ICpmaWxlKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTgxZDExYTFmYmQxZWEwYTggaW5wdXQ9YWY2NGYwNmU0YmFkMzUyNl0qLworeworICAgIFB5T2JqZWN0ICptb2Q7CiAgICAgRklMRSAqZnA7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIlVPJnxPOmxvYWRfZHluYW1pYyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZuYW1lLCBQeVVuaWNvZGVfRlNEZWNvZGVyLCAmcGF0aG5hbWUsICZmb2IpKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAoZm9iICE9IE5VTEwpIHsKLSAgICAgICAgZnAgPSBfUHlfZm9wZW4ocGF0aG5hbWUsICJyIik7CisgICAgaWYgKGZpbGUgIT0gTlVMTCkgeworICAgICAgICBmcCA9IF9QeV9mb3Blbl9vYmoocGF0aCwgInIiKTsKICAgICAgICAgaWYgKGZwID09IE5VTEwpIHsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihwYXRobmFtZSk7CisgICAgICAgICAgICBQeV9ERUNSRUYocGF0aCk7CiAgICAgICAgICAgICBpZiAoIVB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX0lPRXJyb3IpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0xODAyLDggKzIyNjgsOCBAQAogICAgIH0KICAgICBlbHNlCiAgICAgICAgIGZwID0gTlVMTDsKLSAgICBtb2QgPSBfUHlJbXBvcnRfTG9hZER5bmFtaWNNb2R1bGUobmFtZSwgcGF0aG5hbWUsIGZwKTsKLSAgICBQeV9ERUNSRUYocGF0aG5hbWUpOworICAgIG1vZCA9IF9QeUltcG9ydF9Mb2FkRHluYW1pY01vZHVsZShuYW1lLCBwYXRoLCBmcCk7CisgICAgUHlfREVDUkVGKHBhdGgpOwogICAgIGlmIChmcCkKICAgICAgICAgZmNsb3NlKGZwKTsKICAgICByZXR1cm4gbW9kOwpAQCAtMTgxMSw1MCArMjI3NywzMyBAQAogCiAjZW5kaWYgLyogSEFWRV9EWU5BTUlDX0xPQURJTkcgKi8KIAorLypbY2xpbmljIGlucHV0XQorZHVtcCBidWZmZXIKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAotLyogRG9jIHN0cmluZ3MgKi8KKyNpZm5kZWYgX0lNUF9MT0FEX0RZTkFNSUNfTUVUSE9EREVGCisgICAgI2RlZmluZSBfSU1QX0xPQURfRFlOQU1JQ19NRVRIT0RERUYKKyNlbmRpZiAvKiAhZGVmaW5lZChfSU1QX0xPQURfRFlOQU1JQ19NRVRIT0RERUYpICovCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZDA3YzFkNGEzNDNhOTU3OSBpbnB1dD01MjRjZTJlMDIxZTRlYmE2XSovCisKIAogUHlEb2NfU1RSVkFSKGRvY19pbXAsCiAiKEV4dHJlbWVseSkgbG93LWxldmVsIGltcG9ydCBtYWNoaW5lcnkgYml0cyBhcyB1c2VkIGJ5IGltcG9ydGxpYiBhbmQgaW1wLiIpOwogCi1QeURvY19TVFJWQVIoZG9jX2V4dGVuc2lvbl9zdWZmaXhlcywKLSJleHRlbnNpb25fc3VmZml4ZXMoKSAtPiBsaXN0IG9mIHN0cmluZ3NcblwKLVJldHVybnMgdGhlIGxpc3Qgb2YgZmlsZSBzdWZmaXhlcyB1c2VkIHRvIGlkZW50aWZ5IGV4dGVuc2lvbiBtb2R1bGVzLiIpOwotCi1QeURvY19TVFJWQVIoZG9jX2xvY2tfaGVsZCwKLSJsb2NrX2hlbGQoKSAtPiBib29sZWFuXG5cCi1SZXR1cm4gVHJ1ZSBpZiB0aGUgaW1wb3J0IGxvY2sgaXMgY3VycmVudGx5IGhlbGQsIGVsc2UgRmFsc2UuXG5cCi1PbiBwbGF0Zm9ybXMgd2l0aG91dCB0aHJlYWRzLCByZXR1cm4gRmFsc2UuIik7Ci0KLVB5RG9jX1NUUlZBUihkb2NfYWNxdWlyZV9sb2NrLAotImFjcXVpcmVfbG9jaygpIC0+IE5vbmVcblwKLUFjcXVpcmVzIHRoZSBpbnRlcnByZXRlcidzIGltcG9ydCBsb2NrIGZvciB0aGUgY3VycmVudCB0aHJlYWQuXG5cCi1UaGlzIGxvY2sgc2hvdWxkIGJlIHVzZWQgYnkgaW1wb3J0IGhvb2tzIHRvIGVuc3VyZSB0aHJlYWQtc2FmZXR5XG5cCi13aGVuIGltcG9ydGluZyBtb2R1bGVzLlxuXAotT24gcGxhdGZvcm1zIHdpdGhvdXQgdGhyZWFkcywgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdGhpbmcuIik7Ci0KLVB5RG9jX1NUUlZBUihkb2NfcmVsZWFzZV9sb2NrLAotInJlbGVhc2VfbG9jaygpIC0+IE5vbmVcblwKLVJlbGVhc2UgdGhlIGludGVycHJldGVyJ3MgaW1wb3J0IGxvY2suXG5cCi1PbiBwbGF0Zm9ybXMgd2l0aG91dCB0aHJlYWRzLCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90aGluZy4iKTsKLQogc3RhdGljIFB5TWV0aG9kRGVmIGltcF9tZXRob2RzW10gPSB7Ci0gICAgeyJleHRlbnNpb25fc3VmZml4ZXMiLCBpbXBfZXh0ZW5zaW9uX3N1ZmZpeGVzLCBNRVRIX05PQVJHUywKLSAgICAgICAgZG9jX2V4dGVuc2lvbl9zdWZmaXhlc30sCi0gICAgeyJsb2NrX2hlbGQiLCAgICAgICAgaW1wX2xvY2tfaGVsZCwgICAgTUVUSF9OT0FSR1MsICBkb2NfbG9ja19oZWxkfSwKLSAgICB7ImFjcXVpcmVfbG9jayIsIGltcF9hY3F1aXJlX2xvY2ssIE1FVEhfTk9BUkdTLCAgZG9jX2FjcXVpcmVfbG9ja30sCi0gICAgeyJyZWxlYXNlX2xvY2siLCBpbXBfcmVsZWFzZV9sb2NrLCBNRVRIX05PQVJHUywgIGRvY19yZWxlYXNlX2xvY2t9LAotICAgIHsiZ2V0X2Zyb3plbl9vYmplY3QiLCAgICAgICBpbXBfZ2V0X2Zyb3plbl9vYmplY3QsICBNRVRIX1ZBUkFSR1N9LAotICAgIHsiaXNfZnJvemVuX3BhY2thZ2UiLCAgIGltcF9pc19mcm96ZW5fcGFja2FnZSwgIE1FVEhfVkFSQVJHU30sCi0gICAgeyJpbml0X2J1aWx0aW4iLCAgICAgICAgICAgIGltcF9pbml0X2J1aWx0aW4sICAgICAgIE1FVEhfVkFSQVJHU30sCi0gICAgeyJpbml0X2Zyb3plbiIsICAgICAgICAgICAgIGltcF9pbml0X2Zyb3plbiwgICAgICAgIE1FVEhfVkFSQVJHU30sCi0gICAgeyJpc19idWlsdGluIiwgICAgICAgICAgICAgIGltcF9pc19idWlsdGluLCAgICAgICAgIE1FVEhfVkFSQVJHU30sCi0gICAgeyJpc19mcm96ZW4iLCAgICAgICAgICAgICAgIGltcF9pc19mcm96ZW4sICAgICAgICAgIE1FVEhfVkFSQVJHU30sCi0jaWZkZWYgSEFWRV9EWU5BTUlDX0xPQURJTkcKLSAgICB7ImxvYWRfZHluYW1pYyIsICAgICAgICAgICAgaW1wX2xvYWRfZHluYW1pYywgICAgICAgTUVUSF9WQVJBUkdTfSwKLSNlbmRpZgotICAgIHsiX2ZpeF9jb19maWxlbmFtZSIsICAgICAgICBpbXBfZml4X2NvX2ZpbGVuYW1lLCAgICBNRVRIX1ZBUkFSR1N9LAotICAgIHtOVUxMLCAgICAgICAgICAgICAgICAgICAgICBOVUxMfSAgICAgICAgICAgLyogc2VudGluZWwgKi8KKyAgICBfSU1QX0VYVEVOU0lPTl9TVUZGSVhFU19NRVRIT0RERUYKKyAgICBfSU1QX0xPQ0tfSEVMRF9NRVRIT0RERUYKKyAgICBfSU1QX0FDUVVJUkVfTE9DS19NRVRIT0RERUYKKyAgICBfSU1QX1JFTEVBU0VfTE9DS19NRVRIT0RERUYKKyAgICBfSU1QX0dFVF9GUk9aRU5fT0JKRUNUX01FVEhPRERFRgorICAgIF9JTVBfSVNfRlJPWkVOX1BBQ0tBR0VfTUVUSE9EREVGCisgICAgX0lNUF9JTklUX0JVSUxUSU5fTUVUSE9EREVGCisgICAgX0lNUF9JTklUX0ZST1pFTl9NRVRIT0RERUYKKyAgICBfSU1QX0lTX0JVSUxUSU5fTUVUSE9EREVGCisgICAgX0lNUF9JU19GUk9aRU5fTUVUSE9EREVGCisgICAgX0lNUF9MT0FEX0RZTkFNSUNfTUVUSE9EREVGCisgICAgX0lNUF9fRklYX0NPX0ZJTEVOQU1FX01FVEhPRERFRgorICAgIHtOVUxMLCBOVUxMfSAgLyogc2VudGluZWwgKi8KIH07CiAKIApAQCAtMTk0NCwzICsyMzkzLDQgQEAKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCisKZGlmZiAtLWdpdCBhL1B5dGhvbi9pbXBvcnRkbC5jIGIvUHl0aG9uL2ltcG9ydGRsLmMKaW5kZXggMGVhOTU0Yy4uYjYwZjFjNyAxMDA2NDQKLS0tIGEvUHl0aG9uL2ltcG9ydGRsLmMKKysrIGIvUHl0aG9uL2ltcG9ydGRsLmMKQEAgLTc3LDYgKzc3LDggQEAKICAgICAgICAgUHlPYmplY3QgKm1zZyA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0KCJkeW5hbWljIG1vZHVsZSBkb2VzIG5vdCBkZWZpbmUgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImluaXQgZnVuY3Rpb24gKFB5SW5pdF8lcykiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnRuYW1lKTsKKyAgICAgICAgaWYgKG1zZyA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgUHlFcnJfU2V0SW1wb3J0RXJyb3IobXNnLCBuYW1lLCBwYXRoKTsKICAgICAgICAgUHlfREVDUkVGKG1zZyk7CiAgICAgICAgIGdvdG8gZXJyb3I7CmRpZmYgLS1naXQgYS9QeXRob24vaW1wb3J0ZGwuaCBiL1B5dGhvbi9pbXBvcnRkbC5oCmluZGV4IDZiOWNmNzUuLjZhNTFhOTEgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9pbXBvcnRkbC5oCisrKyBiL1B5dGhvbi9pbXBvcnRkbC5oCkBAIC0xOCwxMyArMTgsOCBAQAogI2luY2x1ZGUgPHdpbmRvd3MuaD4KIHR5cGVkZWYgRkFSUFJPQyBkbF9mdW5jcHRyOwogI2Vsc2UKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKSAmJiAhZGVmaW5lZChQWUNDX0dDQykKLSNpbmNsdWRlIDxvczJkZWYuaD4KLXR5cGVkZWYgaW50ICgqIEFQSUVOVFJZIGRsX2Z1bmNwdHIpKCk7Ci0jZWxzZQogdHlwZWRlZiB2b2lkICgqZGxfZnVuY3B0cikodm9pZCk7CiAjZW5kaWYKLSNlbmRpZgogCiAKICNpZmRlZiBfX2NwbHVzcGx1cwpkaWZmIC0tZ2l0IGEvUHl0aG9uL2ltcG9ydGxpYi5oIGIvUHl0aG9uL2ltcG9ydGxpYi5oCmluZGV4IGNiNmFmYzUuLjc1YmZjYTQgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9pbXBvcnRsaWIuaAorKysgYi9QeXRob24vaW1wb3J0bGliLmgKQEAgLTEsMTIwMiArMSw5MTUgQEAKIC8qIEF1dG8tZ2VuZXJhdGVkIGJ5IE1vZHVsZXMvX2ZyZWV6ZV9pbXBvcnRsaWIuYyAqLwotdW5zaWduZWQgY2hhciBfUHlfTV9faW1wb3J0bGliW10gPSB7Ci0gICAgOTksMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNiwwLDAsCi0gICAgMCw2NCwwLDAsMCwxMTUsMjA2LDMsMCwwLDEwMCwwLDAsOTAsMCwwLAotICAgIDEwMCwxMzEsMCw5MCwxLDAsMTAwLDQsMCwxMDAsNSwwLDEzMiwwLDAsOTAsCitjb25zdCB1bnNpZ25lZCBjaGFyIF9QeV9NX19pbXBvcnRsaWJbXSA9IHsKKyAgICA5OSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw3LDAsMCwKKyAgICAwLDY0LDAsMCwwLDExNSwyMjgsNCwwLDAsMTAwLDAsMCw5MCwwLDAsCisgICAgMTAwLDE2MywwLDkwLDEsMCwxMDAsNCwwLDEwMCw1LDAsMTMyLDAsMCw5MCwKICAgICAyLDAsMTAwLDYsMCwxMDAsNywwLDEzMiwwLDAsOTAsMywwLDEwMCw4LAogICAgIDAsMTAwLDksMCwxMzIsMCwwLDkwLDQsMCwxMDAsMTAsMCwxMDAsMTEsMCwKICAgICAxMzIsMCwwLDkwLDUsMCwxMDAsMTIsMCwxMDAsMTMsMCwxMzIsMCwwLDkwLAogICAgIDYsMCwxMDAsMTQsMCwxMDAsMTUsMCwxMzIsMCwwLDkwLDcsMCwxMDAsMTYsCiAgICAgMCwxMDAsMTcsMCwxMzIsMCwwLDkwLDgsMCwxMDAsMTgsMCwxMDAsMTksMCwKLSAgICAxMzIsMCwwLDkwLDksMCwxMDAsMjAsMCwxMDAsMjEsMCwxMDAsMjIsMCwxMzIsCi0gICAgMSwwLDkwLDEwLDAsMTAwLDIzLDAsMTAwLDI0LDAsMTMyLDAsMCw5MCwxMSwKLSAgICAwLDEwMSwxMiwwLDEwMSwxMSwwLDEwNiwxMywwLDEzMSwxLDAsOTAsMTQsMCwKLSAgICAxMDAsMjUsMCwxMDAsMjYsMCwxMzIsMCwwLDkwLDE1LDAsMTA1LDAsMCw5MCwKLSAgICAxNiwwLDEwNSwwLDAsOTAsMTcsMCw3MSwxMDAsMjcsMCwxMDAsMjgsMCwxMzIsCi0gICAgMCwwLDEwMCwyOCwwLDEwMSwxOCwwLDEzMSwzLDAsOTAsMTksMCw3MSwxMDAsCi0gICAgMjksMCwxMDAsMzAsMCwxMzIsMCwwLDEwMCwzMCwwLDEzMSwyLDAsOTAsMjAsCi0gICAgMCw3MSwxMDAsMzEsMCwxMDAsMzIsMCwxMzIsMCwwLDEwMCwzMiwwLDEzMSwyLAotICAgIDAsOTAsMjEsMCwxMDAsMzMsMCwxMDAsMzQsMCwxMzIsMCwwLDkwLDIyLDAsCi0gICAgMTAwLDM1LDAsMTAwLDM2LDAsMTMyLDAsMCw5MCwyMywwLDEwMCwzNywwLDEwMCwKLSAgICAzOCwwLDEzMiwwLDAsOTAsMjQsMCwxMDAsMzksMCwxMDEsMjUsMCwxMDAsNDAsCi0gICAgMCwxMzEsMSwwLDEwMCw0MSwwLDYyLDY2LDEwMSwyNSwwLDEwMCw0MiwwLDEzMSwKLSAgICAxLDAsMTAwLDQzLDAsNjIsNjYsOTAsMjYsMCwxMDEsMjcsMCwxMDAsNDQsMCwKLSAgICAxMDAsNDUsMCwxMzIsMCwwLDEwMSwyOCwwLDEwMCw0NiwwLDEwMCw0NywwLDEwMCwKLSAgICA0OCwwLDEzMSwzLDAsNjgsMTMxLDEsMCwxMzEsMSwwLDkwLDI5LDAsMTAwLAotICAgIDQ5LDAsOTAsMzAsMCwxMDAsNTAsMCwxMDMsMSwwLDkwLDMxLDAsMTAwLDUxLAotICAgIDAsMTAzLDEsMCw5MCwzMiwwLDEwMCw1MiwwLDEwMywxLDAsOTAsMzMsMCwKLSAgICAxMDAsMTMwLDAsMTAwLDUzLDAsMTAwLDU0LDAsMTMyLDEsMCw5MCwzNSwwLDEwMCwKLSAgICA1NSwwLDEwMCw1NiwwLDEzMiwwLDAsOTAsMzYsMCwxMDAsNTcsMCwxMDAsNTgsCi0gICAgMCwxMzIsMCwwLDkwLDM3LDAsMTAwLDU5LDAsMTAwLDYwLDAsMTAwLDYxLDAsCi0gICAgMTAwLDYyLDAsMTMyLDAsMSw5MCwzOCwwLDEwMCw2MywwLDEwMCw2NCwwLDEzMiwKLSAgICAwLDAsOTAsMzksMCwxMDAsNjUsMCwxMDAsNjYsMCwxMzIsMCwwLDkwLDQwLAotICAgIDAsMTAwLDY3LDAsMTAwLDY4LDAsMTMyLDAsMCw5MCw0MSwwLDEwMCw2OSwwLAotICAgIDEwMCw3MCwwLDEzMiwwLDAsOTAsNDIsMCwxMDAsNzEsMCwxMDAsNzIsMCwxMzIsCi0gICAgMCwwLDkwLDQzLDAsMTAwLDczLDAsMTAwLDc0LDAsMTMyLDAsMCw5MCw0NCwKLSAgICAwLDEwMCw3NSwwLDEwMCw3NiwwLDEzMiwwLDAsOTAsNDUsMCw3MSwxMDAsNzcsCi0gICAgMCwxMDAsNzgsMCwxMzIsMCwwLDEwMCw3OCwwLDEzMSwyLDAsOTAsNDYsMCwKLSAgICA3MSwxMDAsNzksMCwxMDAsODAsMCwxMzIsMCwwLDEwMCw4MCwwLDEzMSwyLDAsCi0gICAgOTAsNDcsMCw3MSwxMDAsODEsMCwxMDAsODIsMCwxMzIsMCwwLDEwMCw4MiwwLAotICAgIDEzMSwyLDAsOTAsNDgsMCw3MSwxMDAsODMsMCwxMDAsODQsMCwxMzIsMCwwLAotICAgIDEwMCw4NCwwLDEzMSwyLDAsOTAsNDksMCw3MSwxMDAsODUsMCwxMDAsODYsMCwKLSAgICAxMzIsMCwwLDEwMCw4NiwwLDEwMSw0OSwwLDEzMSwzLDAsOTAsNTAsMCw3MSwKLSAgICAxMDAsODcsMCwxMDAsODgsMCwxMzIsMCwwLDEwMCw4OCwwLDEzMSwyLDAsOTAsCi0gICAgNTEsMCw3MSwxMDAsODksMCwxMDAsOTAsMCwxMzIsMCwwLDEwMCw5MCwwLDEwMSwKLSAgICA1MSwwLDEwMSw1MCwwLDEzMSw0LDAsOTAsNTIsMCw3MSwxMDAsOTEsMCwxMDAsCi0gICAgOTIsMCwxMzIsMCwwLDEwMCw5MiwwLDEwMSw1MSwwLDEwMSw0OSwwLDEzMSw0LAotICAgIDAsOTAsNTMsMCwxMDMsMCwwLDkwLDU0LDAsNzEsMTAwLDkzLDAsMTAwLDk0LAotICAgIDAsMTMyLDAsMCwxMDAsOTQsMCwxMzEsMiwwLDkwLDU1LDAsNzEsMTAwLDk1LAotICAgIDAsMTAwLDk2LDAsMTMyLDAsMCwxMDAsOTYsMCwxMzEsMiwwLDkwLDU2LDAsCi0gICAgNzEsMTAwLDk3LDAsMTAwLDk4LDAsMTMyLDAsMCwxMDAsOTgsMCwxMzEsMiwwLAotICAgIDkwLDU3LDAsNzEsMTAwLDk5LDAsMTAwLDEwMCwwLDEzMiwwLDAsMTAwLDEwMCwwLAotICAgIDEzMSwyLDAsOTAsNTgsMCw3MSwxMDAsMTAxLDAsMTAwLDEwMiwwLDEzMiwwLDAsCi0gICAgMTAwLDEwMiwwLDEzMSwyLDAsOTAsNTksMCw3MSwxMDAsMTAzLDAsMTAwLDEwNCwwLAotICAgIDEzMiwwLDAsMTAwLDEwNCwwLDEzMSwyLDAsOTAsNjAsMCwxMDAsMTA1LDAsMTAwLAotICAgIDEwNiwwLDEzMiwwLDAsOTAsNjEsMCwxMDAsMTA3LDAsMTAwLDEwOCwwLDEzMiwwLAotICAgIDAsOTAsNjIsMCwxMDAsMTA5LDAsMTAwLDExMCwwLDEzMiwwLDAsOTAsNjMsMCwKLSAgICAxMDAsMTExLDAsOTAsNjQsMCwxMDAsMTEyLDAsMTAwLDExMywwLDEzMiwwLDAsOTAsCi0gICAgNjUsMCwxMDAsMTE0LDAsMTAwLDExNSwwLDEzMiwwLDAsOTAsNjYsMCwxMDAsMTMwLAotICAgIDAsMTAwLDQ2LDAsMTAwLDExNiwwLDEwMCwxMTcsMCwxMzIsMiwwLDkwLDY3LDAsCi0gICAgMTAwLDExOCwwLDEwMCwxMTksMCwxMzIsMCwwLDkwLDY4LDAsMTAwLDEyMCwwLDEwMCwKLSAgICAxMjEsMCwxMzIsMCwwLDkwLDY5LDAsMTAwLDEyMiwwLDEwMCwxMjMsMCwxMzIsMCwKLSAgICAwLDkwLDcwLDAsMTAwLDEzMCwwLDEwMCwxMzAsMCwxMDIsMCwwLDEwMCw0NiwwLAotICAgIDEwMCwxMjQsMCwxMDAsMTI1LDAsMTMyLDQsMCw5MCw3MSwwLDEwMCwxMjYsMCwxMDAsCi0gICAgMTI3LDAsMTMyLDAsMCw5MCw3MiwwLDEwMCwxMjgsMCwxMDAsMTI5LDAsMTMyLDAsCi0gICAgMCw5MCw3MywwLDEwMCwxMzAsMCw4Myw0MCwxMzIsMCwwLDAsMTE3LDgzLDEsCi0gICAgMCwwLDY3LDExMSwxMTQsMTAxLDMyLDEwNSwxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LAotICAgIDk3LDExNiwxMDUsMTExLDExMCwzMiwxMTEsMTAyLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDQ2LAotICAgIDEwLDEwLDg0LDEwNCwxMDUsMTE1LDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEwNSwxMTUsCi0gICAgMzIsNzgsNzksODQsMzIsMTA5LDEwMSw5NywxMTAsMTE2LDMyLDExNiwxMTEsMzIsOTgsMTAxLAotICAgIDMyLDEwMCwxMDUsMTE0LDEwMSw5OSwxMTYsMTA4LDEyMSwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwKLSAgICAxMDEsMTAwLDMzLDMyLDczLDExNiwzMiwxMDQsOTcsMTE1LDMyLDk4LDEwMSwxMDEsMTEwLDMyLAotICAgIDEwMCwxMDEsMTE1LDEwNSwxMDMsMTEwLDEwMSwxMDAsMzIsMTE1LDExNyw5OSwxMDQsMTAsMTE2LDEwNCwKLSAgICA5NywxMTYsMzIsMTA1LDExNiwzMiw5OSw5NywxMTAsMzIsOTgsMTAxLDMyLDk4LDExMSwxMTEsCi0gICAgMTE2LDExNSwxMTYsMTE0LDk3LDExMiwxMTIsMTAxLDEwMCwzMiwxMDUsMTEwLDExNiwxMTEsMzIsODAsCi0gICAgMTIxLDExNiwxMDQsMTExLDExMCwzMiw5NywxMTUsMzIsMTE2LDEwNCwxMDEsMzIsMTA1LDEwOSwxMTIsCi0gICAgMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsOTcsMTE2LDEwNSwxMTEsMTEwLDMyLDExMSwxMDIsMzIsMTA1LAotICAgIDEwOSwxMTIsMTExLDExNCwxMTYsNDYsMzIsNjUsMTE1LDEwLDExNSwxMTcsOTksMTA0LDMyLDEwNSwKLSAgICAxMTYsMzIsMTE0LDEwMSwxMTMsMTE3LDEwNSwxMTQsMTAxLDExNSwzMiwxMTYsMTA0LDEwMSwzMiwxMDUsCi0gICAgMTEwLDEwNiwxMDEsOTksMTE2LDEwNSwxMTEsMTEwLDMyLDExMSwxMDIsMzIsMTE1LDExMiwxMDEsOTksCi0gICAgMTA1LDEwMiwxMDUsOTksMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDMyLDk3LDExMCwxMDAsCi0gICAgMzIsOTcsMTE2LDExNiwxMTQsMTA1LDk4LDExNywxMTYsMTAxLDExNSwzMiwxMDUsMTEwLDMyLDExMSwKLSAgICAxMTQsMTAwLDEwMSwxMTQsMzIsMTE2LDExMSwxMCwxMTksMTExLDExNCwxMDcsNDYsMzIsNzksMTEwLAotICAgIDEwMSwzMiwxMTUsMTA0LDExMSwxMTcsMTA4LDEwMCwzMiwxMTcsMTE1LDEwMSwzMiwxMDUsMTA5LDExMiwKLSAgICAxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDMyLDk3LDExNSwzMiwxMTYsMTA0LDEwMSwzMiwxMTIsMTE3LAotICAgIDk4LDEwOCwxMDUsOTksNDUsMTAyLDk3LDk5LDEwNSwxMTAsMTAzLDMyLDExOCwxMDEsMTE0LDExNSwKLSAgICAxMDUsMTExLDExMCwzMiwxMTEsMTAyLDMyLDExNiwxMDQsMTA1LDExNSwzMiwxMDksMTExLDEwMCwxMTcsCi0gICAgMTA4LDEwMSw0NiwxMCwxMCwxMTcsMywwLDAsMCwxMTksMTA1LDExMCwxMTcsNiwwLAotICAgIDAsMCw5OSwxMjEsMTAzLDExOSwxMDUsMTEwLDExNyw2LDAsMCwwLDEwMCw5NywxMTQsCi0gICAgMTE5LDEwNSwxMTAsOTksMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsCi0gICAgMiwwLDAsMCw2NywwLDAsMCwxMTUsNDksMCwwLDAsMTE2LDAsMCwKLSAgICAxMDYsMSwwLDEwNiwyLDAsMTE2LDMsMCwxMzEsMSwwLDExNCwzMywwLDEwMCwKLSAgICAxLDAsMTAwLDIsMCwxMzIsMCwwLDEyNSwwLDAsMTEwLDEyLDAsMTAwLDMsCi0gICAgMCwxMDAsMiwwLDEzMiwwLDAsMTI1LDAsMCwxMjQsMCwwLDgzLDQwLDQsCi0gICAgMCwwLDAsNzgsOTksMCwwLDAsMCwwLDAsMCwwLDAsMCwwLAotICAgIDAsMiwwLDAsMCw4MywwLDAsMCwxMTUsMTMsMCwwLDAsMTAwLDEsCi0gICAgMCwxMTYsMCwwLDEwNiwxLDAsMTA3LDYsMCw4Myw0MCwyLDAsMCwwLAotICAgIDExNyw1MywwLDAsMCw4NCwxMTQsMTE3LDEwMSwzMiwxMDUsMTAyLDMyLDEwMiwxMDUsMTA4LAotICAgIDEwMSwxMTAsOTcsMTA5LDEwMSwxMTUsMzIsMTA5LDExNywxMTUsMTE2LDMyLDk4LDEwMSwzMiw5OSwKLSAgICAxMDQsMTAxLDk5LDEwNywxMDEsMTAwLDMyLDk5LDk3LDExNSwxMDEsNDUsMTA1LDExMCwxMTUsMTAxLAotICAgIDExMCwxMTUsMTA1LDExNiwxMDUsMTE4LDEwMSwxMDgsMTIxLDQ2LDExNSwxMiwwLDAsMCw4MCwKLSAgICA4OSw4NCw3Miw3OSw3OCw2Nyw2NSw4Myw2OSw3OSw3NSw0MCwyLDAsMCwwLAotICAgIDExNywzLDAsMCwwLDk1LDExMSwxMTUsMTE3LDcsMCwwLDAsMTAxLDExMCwxMTgsCi0gICAgMTA1LDExNCwxMTEsMTEwLDQwLDAsMCwwLDAsNDAsMCwwLDAsMCw0MCwwLAotICAgIDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwKLSAgICAxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwKLSAgICAxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTEsMCwwLDAsOTUsMTE0LDEwMSwxMDgsOTcsMTIwLAotICAgIDk1LDk5LDk3LDExNSwxMDEsMzQsMCwwLDAsMTE1LDIsMCwwLDAsMCwyLAotICAgIDExNywzNywwLDAsMCw5NSwxMDksOTcsMTA3LDEwMSw5NSwxMTQsMTAxLDEwOCw5NywxMjAsCi0gICAgOTUsOTksOTcsMTE1LDEwMSw0Niw2MCwxMDgsMTExLDk5LDk3LDEwOCwxMTUsNjIsNDYsOTUsCi0gICAgMTE0LDEwMSwxMDgsOTcsMTIwLDk1LDk5LDk3LDExNSwxMDEsOTksMCwwLDAsMCwwLAotICAgIDAsMCwwLDAsMCwwLDAsMSwwLDAsMCw4MywwLDAsMCwxMTUsCi0gICAgNCwwLDAsMCwxMDAsMSwwLDgzLDQwLDIsMCwwLDAsMTE3LDUzLDAsCi0gICAgMCwwLDg0LDExNCwxMTcsMTAxLDMyLDEwNSwxMDIsMzIsMTAyLDEwNSwxMDgsMTAxLDExMCw5NywKLSAgICAxMDksMTAxLDExNSwzMiwxMDksMTE3LDExNSwxMTYsMzIsOTgsMTAxLDMyLDk5LDEwNCwxMDEsOTksCi0gICAgMTA3LDEwMSwxMDAsMzIsOTksOTcsMTE1LDEwMSw0NSwxMDUsMTEwLDExNSwxMDEsMTEwLDExNSwxMDUsCi0gICAgMTE2LDEwNSwxMTgsMTAxLDEwOCwxMjEsNDYsNzAsNDAsMSwwLDAsMCwxMTcsNSwwLAotICAgIDAsMCw3MCw5NywxMDgsMTE1LDEwMSw0MCwwLDAsMCwwLDQwLDAsMCwwLAotICAgIDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLAotICAgIDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsCi0gICAgMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDExLDAsMCwwLDk1LDExNCwxMDEsCi0gICAgMTA4LDk3LDEyMCw5NSw5OSw5NywxMTUsMTAxLDM4LDAsMCwwLDExNSwyLDAsMCwKLSAgICAwLDAsMiw0MCw0LDAsMCwwLDExNywzLDAsMCwwLDExNSwxMjEsMTE1LAotICAgIDExNyw4LDAsMCwwLDExMiwxMDgsOTcsMTE2LDEwMiwxMTEsMTE0LDEwOSwxMTcsMTAsMCwKLSAgICAwLDAsMTE1LDExNiw5NywxMTQsMTE2LDExNSwxMTksMTA1LDExNiwxMDQsMTE3LDI3LDAsMCwKLSAgICAwLDk1LDY3LDY1LDgzLDY5LDk1LDczLDc4LDgzLDY5LDc4LDgzLDczLDg0LDczLAotICAgIDg2LDY5LDk1LDgwLDc2LDY1LDg0LDcwLDc5LDgyLDc3LDgzLDQwLDEsMCwwLAotICAgIDAsMTE3LDExLDAsMCwwLDk1LDExNCwxMDEsMTA4LDk3LDEyMCw5NSw5OSw5NywxMTUsCi0gICAgMTAxLDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsCi0gICAgNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSwKLSAgICA5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDE2LDAsCi0gICAgMCwwLDk1LDEwOSw5NywxMDcsMTAxLDk1LDExNCwxMDEsMTA4LDk3LDEyMCw5NSw5OSw5NywKLSAgICAxMTUsMTAxLDMyLDAsMCwwLDExNSw4LDAsMCwwLDAsMSwxOCwxLDE1LAotICAgIDQsMTIsMywxMTcsMTYsMCwwLDAsOTUsMTA5LDk3LDEwNywxMDEsOTUsMTE0LDEwMSwKLSAgICAxMDgsOTcsMTIwLDk1LDk5LDk3LDExNSwxMDEsOTksMSwwLDAsMCwwLDAsMCwKLSAgICAwLDIsMCwwLDAsMywwLDAsMCw2NywwLDAsMCwxMTUsMTA4LDAsCi0gICAgMCwwLDExNiwwLDAsMTI0LDAsMCwxMzEsMSwwLDEyNSwwLDAsMTAzLDAsCi0gICAgMCwxMjUsMSwwLDEyNCwxLDAsMTA2LDEsMCwxMjQsMCwwLDEwMCwxLDAsCi0gICAgNjQsMTMxLDEsMCwxLDEyNCwxLDAsMTA2LDEsMCwxMjQsMCwwLDEwMCwyLAotICAgIDAsNjMsMTAwLDEsMCw2NCwxMzEsMSwwLDEsMTI0LDEsMCwxMDYsMSwwLAotICAgIDEyNCwwLDAsMTAwLDMsMCw2MywxMDAsMSwwLDY0LDEzMSwxLDAsMSwxMjQsCi0gICAgMSwwLDEwNiwxLDAsMTI0LDAsMCwxMDAsNCwwLDYzLDEwMCwxLDAsNjQsCi0gICAgMTMxLDEsMCwxLDExNiwyLDAsMTI0LDEsMCwxMzEsMSwwLDgzLDQwLDUsCi0gICAgMCwwLDAsMTE3LDExMSwwLDAsMCw2NywxMTEsMTEwLDExOCwxMDEsMTE0LDExNiwzMiwKLSAgICA5NywzMiw1MSw1MCw0NSw5OCwxMDUsMTE2LDMyLDEwNSwxMTAsMTE2LDEwMSwxMDMsMTAxLDExNCwKLSAgICAzMiwxMTYsMTExLDMyLDEwOCwxMDUsMTE2LDExNiwxMDgsMTAxLDQ1LDEwMSwxMTAsMTAwLDEwNSw5NywKLSAgICAxMTAsNDYsMTAsMTAsMzIsMzIsMzIsMzIsODgsODgsODgsMzIsODQsMTAxLDEwOSwxMTIsCi0gICAgMTExLDExNCw5NywxMTQsMTIxLDMyLDExNywxMTAsMTE2LDEwNSwxMDgsMzIsMTA5LDk3LDExNCwxMTUsCi0gICAgMTA0LDk3LDEwOCwzOSwxMTUsMzIsMTA4LDExMSwxMTAsMTAzLDMyLDEwMiwxMTcsMTEwLDk5LDExNiwKLSAgICAxMDUsMTExLDExMCwxMTUsMzIsOTcsMTE0LDEwMSwzMiwxMDEsMTIwLDExMiwxMTEsMTE1LDEwMSwxMDAsCi0gICAgNDYsMTAsMTAsMzIsMzIsMzIsMzIsMTA1LDI1NSwwLDAsMCwxMDUsOCwwLDAsCi0gICAgMCwxMDUsMTYsMCwwLDAsMTA1LDI0LDAsMCwwLDQwLDMsMCwwLDAsCi0gICAgMTE3LDMsMCwwLDAsMTA1LDExMCwxMTYsMTE3LDYsMCwwLDAsOTcsMTEyLDExMiwKLSAgICAxMDEsMTEwLDEwMCwxMTcsOSwwLDAsMCw5OCwxMjEsMTE2LDEwMSw5NywxMTQsMTE0LDk3LAotICAgIDEyMSw0MCwyLDAsMCwwLDExNywxLDAsMCwwLDEyMCwxMTcsOSwwLDAsCi0gICAgMCwxMDUsMTEwLDExNiw5NSw5OCwxMjEsMTE2LDEwMSwxMTUsNDAsMCwwLDAsMCw0MCwKLSAgICAwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwKLSAgICAzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LAotICAgIDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsNywwLDAsMCw5NSwxMTksOTUsMTA4LDExMSwKLSAgICAxMTAsMTAzLDQ1LDAsMCwwLDExNSwxNCwwLDAsMCwwLDYsMTIsMSw2LAotICAgIDEsMTcsMSwyMSwxLDIxLDEsMjEsMSwxMTcsNywwLDAsMCw5NSwxMTksCi0gICAgOTUsMTA4LDExMSwxMTAsMTAzLDk5LDEsMCwwLDAsMCwwLDAsMCwyLDAsCi0gICAgMCwwLDMsMCwwLDAsNjcsMCwwLDAsMTE1LDY4LDAsMCwwLDEyNCwKLSAgICAwLDAsMTAwLDEsMCwyNSwxMjUsMSwwLDEyNCwxLDAsMTI0LDAsMCwxMDAsCi0gICAgMiwwLDI1LDEwMCwzLDAsNjIsNzksMTI1LDEsMCwxMjQsMSwwLDEyNCwwLAotICAgIDAsMTAwLDQsMCwyNSwxMDAsNSwwLDYyLDc5LDEyNSwxLDAsMTI0LDEsMCwKLSAgICAxMjQsMCwwLDEwMCw2LDAsMjUsMTAwLDcsMCw2Miw3OSwxMjUsMSwwLDEyNCwKLSAgICAxLDAsODMsNDAsOCwwLDAsMCwxMTcsMTE1LDAsMCwwLDY3LDExMSwxMTAsCi0gICAgMTE4LDEwMSwxMTQsMTE2LDMyLDUyLDMyLDk4LDEyMSwxMTYsMTAxLDExNSwzMiwxMDUsMTEwLDMyLAotICAgIDEwOCwxMDUsMTE2LDExNiwxMDgsMTAxLDQ1LDEwMSwxMTAsMTAwLDEwNSw5NywxMTAsMzIsMTE2LDExMSwKLSAgICAzMiw5NywxMTAsMzIsMTA1LDExMCwxMTYsMTAxLDEwMywxMDEsMTE0LDQ2LDEwLDEwLDMyLDMyLAotICAgIDMyLDMyLDg4LDg4LDg4LDMyLDg0LDEwMSwxMDksMTEyLDExMSwxMTQsOTcsMTE0LDEyMSwzMiwKLSAgICAxMTcsMTEwLDExNiwxMDUsMTA4LDMyLDEwOSw5NywxMTQsMTE1LDEwNCw5NywxMDgsMzksMTE1LDMyLAotICAgIDEwOCwxMTEsMTEwLDEwMywzMiwxMDIsMTE3LDExMCw5OSwxMTYsMTA1LDExMSwxMTAsMzIsOTcsMTE0LAotICAgIDEwMSwzMiwxMDEsMTIwLDExMiwxMTEsMTE1LDEwMSwxMDAsNDYsMTAsMTAsMzIsMzIsMzIsMzIsCi0gICAgMTA1LDAsMCwwLDAsMTA1LDEsMCwwLDAsMTA1LDgsMCwwLDAsMTA1LAotICAgIDIsMCwwLDAsMTA1LDE2LDAsMCwwLDEwNSwzLDAsMCwwLDEwNSwyNCwKLSAgICAwLDAsMCw0MCwwLDAsMCwwLDQwLDIsMCwwLDAsMTE3LDksMCwKLSAgICAwLDAsMTA1LDExMCwxMTYsOTUsOTgsMTIxLDExNiwxMDEsMTE1LDExNywxLDAsMCwwLAotICAgIDEyMCw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLAotICAgIDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsCi0gICAgOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNyw3LDAsCi0gICAgMCwwLDk1LDExNCw5NSwxMDgsMTExLDExMCwxMDMsNjEsMCwwLDAsMTE1LDEwLDAsCi0gICAgMCwwLDAsNiwxMCwxLDE4LDEsMTgsMSwxOCwxLDExNyw3LDAsMCwKLSAgICAwLDk1LDExNCw5NSwxMDgsMTExLDExMCwxMDMsOTksMCwwLDAsMCwwLDAsMCwKLSAgICAwLDMsMCwwLDAsNCwwLDAsMCw3MSwwLDAsMCwxMTUsMTAzLDAsCi0gICAgMCwwLDEwMywwLDAsMTI1LDEsMCwxMjAsNzEsMCwxMjQsMCwwLDY4LDkzLAotICAgIDYzLDAsMTI1LDIsMCwxMjQsMiwwLDExNSwzMSwwLDExMywxMywwLDExMCwwLAotICAgIDAsMTI0LDEsMCwxMDYsMCwwLDEyNCwyLDAsMTMxLDEsMCwxLDEyNCwyLAotICAgIDAsMTAwLDQsMCwyNSwxMTYsMSwwLDEwNyw3LDAsMTE0LDEzLDAsMTI0LDEsCi0gICAgMCwxMDYsMCwwLDExNiwyLDAsMTMxLDEsMCwxLDExMywxMywwLDExMywxMywKLSAgICAwLDg3LDEwMCwyLDAsMTA2LDMsMCwxMjQsMSwwLDEwMCwzLDAsMTAwLDUsCi0gICAgMCwxMzMsMiwwLDI1LDEzMSwxLDAsODMsNDAsNiwwLDAsMCwxMTcsMzEsCi0gICAgMCwwLDAsODIsMTAxLDExMiwxMDgsOTcsOTksMTAxLDEwOSwxMDEsMTEwLDExNiwzMiwxMDIsCi0gICAgMTExLDExNCwzMiwxMTEsMTE1LDQ2LDExMiw5NywxMTYsMTA0LDQ2LDEwNiwxMTEsMTA1LDExMCw0MCwKLSAgICA0MSw0NiwxMDUsMSwwLDAsMCwxMTcsMCwwLDAsMCw3OCwxMDUsMjU1LDI1NSwKLSAgICAyNTUsMjU1LDEwNSwyNTUsMjU1LDI1NSwyNTUsNDAsNCwwLDAsMCwxMTcsNiwwLDAsCi0gICAgMCw5NywxMTIsMTEyLDEwMSwxMTAsMTAwLDExNywxNSwwLDAsMCwxMTIsOTcsMTE2LDEwNCwKLSAgICA5NSwxMTUsMTAxLDExMiw5NywxMTQsOTcsMTE2LDExMSwxMTQsMTE1LDExNyw4LDAsMCwwLAotICAgIDExMiw5NywxMTYsMTA0LDk1LDExNSwxMDEsMTEyLDExNyw0LDAsMCwwLDEwNiwxMTEsMTA1LAotICAgIDExMCw0MCwzLDAsMCwwLDExNywxMCwwLDAsMCwxMTIsOTcsMTE2LDEwNCw5NSwKLSAgICAxMTIsOTcsMTE0LDExNiwxMTUsMTE3LDksMCwwLDAsMTEwLDEwMSwxMTksOTUsMTEyLDk3LAotICAgIDExNCwxMTYsMTE1LDExNyw0LDAsMCwwLDExMiw5NywxMTQsMTE2LDQwLDAsMCwwLAotICAgIDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLAotICAgIDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsCi0gICAgMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDEwLDAsMCwwLDk1LDExMiw5NywKLSAgICAxMTYsMTA0LDk1LDEwNiwxMTEsMTA1LDExMCw3NCwwLDAsMCwxMTUsMTYsMCwwLDAsCi0gICAgMCwyLDYsMSwxMywxLDYsMSw2LDEsMTMsMSwxNiwxLDIwLDEsCi0gICAgMTE3LDEwLDAsMCwwLDk1LDExMiw5NywxMTYsMTA0LDk1LDEwNiwxMTEsMTA1LDExMCw5OSwKLSAgICAxLDAsMCwwLDAsMCwwLDAsNiwwLDAsMCwzLDAsMCwwLAotICAgIDY3LDAsMCwwLDExNSw4NSwwLDAsMCwxMjAsNDgsMCwxMTYsMCwwLDEyNCwKLSAgICAwLDAsMTMxLDEsMCw2OCw5MywyOCwwLDEyNSwxLDAsMTI0LDEsMCwxMTYsCi0gICAgMSwwLDEwNyw2LDAsMTE0LDEzLDAsMTI0LDEsMCwxMjUsMiwwLDgwLDExMywKLSAgICAxMywwLDExMywxMywwLDg3LDExNiwyLDAsMTI1LDIsMCwxMjQsMCwwLDEwNiwKLSAgICAzLDAsMTI0LDIsMCwxMzEsMSwwLDkyLDMsMCwxMjUsMywwLDEyNSw0LAotICAgIDAsMTI1LDUsMCwxMjQsMywwLDEyNCw1LDAsMTAyLDIsMCw4Myw0MCwxLAotICAgIDAsMCwwLDExNywzMiwwLDAsMCw4MiwxMDEsMTEyLDEwOCw5Nyw5OSwxMDEsMTA5LAotICAgIDEwMSwxMTAsMTE2LDMyLDEwMiwxMTEsMTE0LDMyLDExMSwxMTUsNDYsMTEyLDk3LDExNiwxMDQsNDYsCi0gICAgMTE1LDExMiwxMDgsMTA1LDExNiw0MCw0MSw0Niw0MCw0LDAsMCwwLDExNyw4LDAsCi0gICAgMCwwLDExNCwxMDEsMTE4LDEwMSwxMTQsMTE1LDEwMSwxMDAsMTE3LDE1LDAsMCwwLDExMiwKLSAgICA5NywxMTYsMTA0LDk1LDExNSwxMDEsMTEyLDk3LDExNCw5NywxMTYsMTExLDExNCwxMTUsMTE3LDgsCi0gICAgMCwwLDAsMTEyLDk3LDExNiwxMDQsOTUsMTE1LDEwMSwxMTIsMTE3LDEwLDAsMCwwLAotICAgIDExNCwxMTIsOTcsMTE0LDExNiwxMDUsMTE2LDEwNSwxMTEsMTEwLDQwLDYsMCwwLDAsMTE3LAotICAgIDQsMCwwLDAsMTEyLDk3LDExNiwxMDQsMTE3LDEsMCwwLDAsMTIwLDExNywzLAotICAgIDAsMCwwLDExNSwxMDEsMTEyLDExNyw1LDAsMCwwLDEwMiwxMTQsMTExLDExMCwxMTYsCi0gICAgMTE3LDEsMCwwLDAsOTUsMTE3LDQsMCwwLDAsMTE2LDk3LDEwNSwxMDgsNDAsCi0gICAgMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsCi0gICAgMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LAotICAgIDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTEsMCwwLDAsCi0gICAgOTUsMTEyLDk3LDExNiwxMDQsOTUsMTE1LDExMiwxMDgsMTA1LDExNiw4NiwwLDAsMCwxMTUsCi0gICAgMTQsMCwwLDAsMCwyLDE5LDEsMTIsMSw2LDEsOCwyLDYsMSwKLSAgICAyNCwxLDExNywxMSwwLDAsMCw5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMTUsMTEyLDEwOCwKLSAgICAxMDUsMTE2LDk5LDIsMCwwLDAsMCwwLDAsMCwzLDAsMCwwLDExLAotICAgIDAsMCwwLDY3LDAsMCwwLDExNSw2MSwwLDAsMCwxMjEsMTksMCwxMTYsCi0gICAgMCwwLDEwNiwxLDAsMTI0LDAsMCwxMzEsMSwwLDEyNSwyLDAsODcsMTEwLAotICAgIDIyLDAsNCwxMTYsMiwwLDEwNywxMCwwLDExNCw0MywwLDEsMSwxLDEwMCwKLSAgICAyLDAsODMsODksMTEwLDEsMCw4OCwxMjQsMiwwLDEwNiw0LDAsMTAwLDEsCi0gICAgMCw2NCwxMjQsMSwwLDEwNywyLDAsODMsNDAsMywwLDAsMCwxMTcsNDksCi0gICAgMCwwLDAsODQsMTAxLDExNSwxMTYsMzIsMTE5LDEwNCwxMDEsMTE2LDEwNCwxMDEsMTE0LDMyLAotICAgIDExNiwxMDQsMTAxLDMyLDExMiw5NywxMTYsMTA0LDMyLDEwNSwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsCi0gICAgMTE1LDExMiwxMDEsOTksMTA1LDEwMiwxMDUsMTAxLDEwMCwzMiwxMDksMTExLDEwMCwxMDEsMzIsMTE2LAotICAgIDEyMSwxMTIsMTAxLDQ2LDEwNSwwLDI0MCwwLDAsNzAsNDAsNSwwLDAsMCwxMTcsCi0gICAgMywwLDAsMCw5NSwxMTEsMTE1LDExNyw0LDAsMCwwLDExNSwxMTYsOTcsMTE2LAotICAgIDExNyw3LDAsMCwwLDc5LDgzLDY5LDExNCwxMTQsMTExLDExNCwxMTcsNSwwLDAsCi0gICAgMCw3MCw5NywxMDgsMTE1LDEwMSwxMTcsNywwLDAsMCwxMTUsMTE2LDk1LDEwOSwxMTEsCi0gICAgMTAwLDEwMSw0MCwzLDAsMCwwLDExNyw0LDAsMCwwLDExMiw5NywxMTYsMTA0LAotICAgIDExNyw0LDAsMCwwLDEwOSwxMTEsMTAwLDEwMSwxMTcsOSwwLDAsMCwxMTUsMTE2LAotICAgIDk3LDExNiw5NSwxMDUsMTEwLDEwMiwxMTEsNDAsMCwwLDAsMCw0MCwwLDAsMCwKLSAgICAwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LAotICAgIDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LAotICAgIDk3LDExMiw2MiwxMTcsMTgsMCwwLDAsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTA1LDExNSwKLSAgICA5NSwxMDksMTExLDEwMCwxMDEsOTUsMTE2LDEyMSwxMTIsMTAxLDk4LDAsMCwwLDExNSwxMCwKLSAgICAwLDAsMCwwLDIsMywxLDE5LDEsMTMsMSw5LDEsMTE3LDE4LDAsCi0gICAgMCwwLDk1LDExMiw5NywxMTYsMTA0LDk1LDEwNSwxMTUsOTUsMTA5LDExMSwxMDAsMTAxLDk1LAotICAgIDExNiwxMjEsMTEyLDEwMSw5OSwxLDAsMCwwLDAsMCwwLDAsMSwwLDAsCisgICAgMTMyLDAsMCw5MCw5LDAsMTAwLDIwLDAsMTAwLDIxLDAsMTMyLDAsMCw5MCwKKyAgICAxMCwwLDEwMCwyMiwwLDEwMCwyMywwLDEwMCwyNCwwLDEzMiwxLDAsOTAsMTEsCisgICAgMCwxMDAsMjUsMCwxMDAsMjYsMCwxMzIsMCwwLDkwLDEyLDAsMTAwLDI3LDAsCisgICAgMTAwLDI4LDAsMTMyLDAsMCw5MCwxMywwLDEwMSwxNCwwLDEwMSwxMiwwLDEwNiwKKyAgICAxNSwwLDEzMSwxLDAsOTAsMTYsMCw3MSwxMDAsMjksMCwxMDAsMzAsMCwxMzIsCisgICAgMCwwLDEwMCwzMCwwLDEzMSwyLDAsOTAsMTcsMCwxMDUsMCwwLDkwLDE4LAorICAgIDAsMTA1LDAsMCw5MCwxOSwwLDcxLDEwMCwzMSwwLDEwMCwzMiwwLDEzMiwwLAorICAgIDAsMTAwLDMyLDAsMTAxLDIwLDAsMTMxLDMsMCw5MCwyMSwwLDcxLDEwMCwzMywKKyAgICAwLDEwMCwzNCwwLDEzMiwwLDAsMTAwLDM0LDAsMTMxLDIsMCw5MCwyMiwwLAorICAgIDcxLDEwMCwzNSwwLDEwMCwzNiwwLDEzMiwwLDAsMTAwLDM2LDAsMTMxLDIsMCwKKyAgICA5MCwyMywwLDcxLDEwMCwzNywwLDEwMCwzOCwwLDEzMiwwLDAsMTAwLDM4LDAsCisgICAgMTMxLDIsMCw5MCwyNCwwLDEwMCwzOSwwLDEwMCw0MCwwLDEzMiwwLDAsOTAsCisgICAgMjUsMCwxMDAsNDEsMCwxMDAsNDIsMCwxMzIsMCwwLDkwLDI2LDAsMTAwLDQzLAorICAgIDAsMTAwLDQ0LDAsMTMyLDAsMCw5MCwyNywwLDEwMCw0NSwwLDEwNiwyOCwwLAorICAgIDEwMCw0NiwwLDEwMCw0NywwLDEzMSwyLDAsMTAwLDQ4LDAsMjMsOTAsMjksMCwKKyAgICAxMDEsMzAsMCwxMDYsMzEsMCwxMDEsMjksMCwxMDAsNDcsMCwxMzEsMiwwLDkwLAorICAgIDMyLDAsMTAwLDQ5LDAsOTAsMzMsMCwxMDAsNTAsMCwxMDMsMSwwLDkwLDM0LAorICAgIDAsMTAwLDUxLDAsMTAzLDEsMCw5MCwzNSwwLDEwMCw1MiwwLDEwMywxLDAsCisgICAgOTAsMzYsMCwxMDAsNTMsMCwxMDAsNTQsMCwxMDAsNTUsMCwxMzIsMSwwLDkwLAorICAgIDM3LDAsMTAwLDU2LDAsMTAwLDU3LDAsMTMyLDAsMCw5MCwzOCwwLDEwMCw1OCwKKyAgICAwLDEwMCw1OSwwLDEzMiwwLDAsOTAsMzksMCwxMDAsNjAsMCwxMDAsNjEsMCwKKyAgICAxMzIsMCwwLDkwLDQwLDAsMTAwLDYyLDAsMTAwLDYzLDAsMTAwLDY0LDAsMTAwLAorICAgIDY1LDAsMTMyLDAsMSw5MCw0MSwwLDEwMCw2NiwwLDEwMCw2NywwLDEzMiwwLAorICAgIDAsOTAsNDIsMCwxMDAsNjgsMCwxMDAsNjksMCwxMzIsMCwwLDkwLDQzLDAsCisgICAgMTAwLDcwLDAsMTAwLDcxLDAsMTMyLDAsMCw5MCw0NCwwLDEwMCw3MiwwLDEwMCwKKyAgICA3MywwLDEzMiwwLDAsOTAsNDUsMCwxMDAsNzQsMCwxMDAsNzUsMCwxMzIsMCwKKyAgICAwLDkwLDQ2LDAsMTAwLDUzLDAsMTAwLDUzLDAsMTAwLDUzLDAsMTAwLDc2LDAsCisgICAgMTAwLDc3LDAsMTMyLDMsMCw5MCw0NywwLDEwMCw1MywwLDEwMCw1MywwLDEwMCwKKyAgICA1MywwLDEwMCw3OCwwLDEwMCw3OSwwLDEzMiwzLDAsOTAsNDgsMCwxMDAsODAsCisgICAgMCwxMDAsODAsMCwxMDAsODEsMCwxMDAsODIsMCwxMzIsMiwwLDkwLDQ5LDAsCisgICAgMTAwLDgzLDAsMTAwLDg0LDAsMTMyLDAsMCw5MCw1MCwwLDEwMCw4NSwwLDEwMCwKKyAgICA4NiwwLDEzMiwwLDAsOTAsNTEsMCw3MSwxMDAsODcsMCwxMDAsODgsMCwxMzIsCisgICAgMCwwLDEwMCw4OCwwLDEzMSwyLDAsOTAsNTIsMCw3MSwxMDAsODksMCwxMDAsCisgICAgOTAsMCwxMzIsMCwwLDEwMCw5MCwwLDEzMSwyLDAsOTAsNTMsMCwxMDAsOTEsCisgICAgMCwxMDAsNTMsMCwxMDAsOTIsMCwxMDAsNTMsMCwxMDAsOTMsMCwxMDAsOTQsMCwKKyAgICAxMzIsMCwyLDkwLDU0LDAsMTAxLDU1LDAsMTMxLDAsMCw5MCw1NiwwLDEwMCwKKyAgICA1MywwLDEwMCw5NSwwLDEwMCw1MywwLDEwMCw5NiwwLDEwMSw1NiwwLDEwMCw5NywKKyAgICAwLDEwMCw5OCwwLDEzMiwxLDIsOTAsNTcsMCwxMDAsNTMsMCwxMDAsNTMsMCwKKyAgICAxMDAsOTksMCwxMDAsMTAwLDAsMTMyLDIsMCw5MCw1OCwwLDcxLDEwMCwxMDEsMCwKKyAgICAxMDAsMTAyLDAsMTMyLDAsMCwxMDAsMTAyLDAsMTMxLDIsMCw5MCw1OSwwLDEwMCwKKyAgICA1MywwLDEwMCwxMDMsMCwxMDAsMTA0LDAsMTMyLDEsMCw5MCw2MCwwLDcxLDEwMCwKKyAgICAxMDUsMCwxMDAsMTA2LDAsMTMyLDAsMCwxMDAsMTA2LDAsMTMxLDIsMCw5MCw2MSwKKyAgICAwLDcxLDEwMCwxMDcsMCwxMDAsMTA4LDAsMTMyLDAsMCwxMDAsMTA4LDAsMTMxLDIsCisgICAgMCw5MCw2MiwwLDcxLDEwMCwxMDksMCwxMDAsMTEwLDAsMTMyLDAsMCwxMDAsMTEwLAorICAgIDAsMTMxLDIsMCw5MCw2MywwLDcxLDEwMCwxMTEsMCwxMDAsMTEyLDAsMTMyLDAsCisgICAgMCwxMDAsMTEyLDAsMTMxLDIsMCw5MCw2NCwwLDcxLDEwMCwxMTMsMCwxMDAsMTE0LAorICAgIDAsMTMyLDAsMCwxMDAsMTE0LDAsMTAxLDY0LDAsMTMxLDMsMCw5MCw2NSwwLAorICAgIDcxLDEwMCwxMTUsMCwxMDAsMTE2LDAsMTMyLDAsMCwxMDAsMTE2LDAsMTMxLDIsMCwKKyAgICA5MCw2NiwwLDcxLDEwMCwxMTcsMCwxMDAsMTE4LDAsMTMyLDAsMCwxMDAsMTE4LDAsCisgICAgMTAxLDY2LDAsMTAxLDY1LDAsMTMxLDQsMCw5MCw2NywwLDcxLDEwMCwxMTksMCwKKyAgICAxMDAsMTIwLDAsMTMyLDAsMCwxMDAsMTIwLDAsMTAxLDY2LDAsMTAxLDY0LDAsMTMxLAorICAgIDQsMCw5MCw2OCwwLDEwMywwLDAsOTAsNjksMCw3MSwxMDAsMTIxLDAsMTAwLAorICAgIDEyMiwwLDEzMiwwLDAsMTAwLDEyMiwwLDEzMSwyLDAsOTAsNzAsMCw3MSwxMDAsCisgICAgMTIzLDAsMTAwLDEyNCwwLDEzMiwwLDAsMTAwLDEyNCwwLDEzMSwyLDAsOTAsNzEsCisgICAgMCw3MSwxMDAsMTI1LDAsMTAwLDEyNiwwLDEzMiwwLDAsMTAwLDEyNiwwLDEzMSwyLAorICAgIDAsOTAsNzIsMCw3MSwxMDAsMTI3LDAsMTAwLDEyOCwwLDEzMiwwLDAsMTAwLDEyOCwKKyAgICAwLDEzMSwyLDAsOTAsNzMsMCw3MSwxMDAsMTI5LDAsMTAwLDEzMCwwLDEzMiwwLAorICAgIDAsMTAwLDEzMCwwLDEzMSwyLDAsOTAsNzQsMCw3MSwxMDAsMTMxLDAsMTAwLDEzMiwKKyAgICAwLDEzMiwwLDAsMTAwLDEzMiwwLDEzMSwyLDAsOTAsNzUsMCwxMDAsMTMzLDAsCisgICAgMTAwLDEzNCwwLDEzMiwwLDAsOTAsNzYsMCwxMDAsMTM1LDAsMTAwLDEzNiwwLDEzMiwKKyAgICAwLDAsOTAsNzcsMCwxMDAsNTMsMCwxMDAsMTM3LDAsMTAwLDEzOCwwLDEzMiwxLAorICAgIDAsOTAsNzgsMCwxMDAsMTM5LDAsMTAwLDE0MCwwLDEzMiwwLDAsOTAsNzksMCwKKyAgICAxMDAsMTQxLDAsOTAsODAsMCwxMDEsODAsMCwxMDAsMTQyLDAsMjMsOTAsODEsMCwKKyAgICAxMDAsMTQzLDAsMTAwLDE0NCwwLDEzMiwwLDAsOTAsODIsMCwxMDAsMTQ1LDAsMTAwLAorICAgIDE0NiwwLDEzMiwwLDAsOTAsODMsMCwxMDAsNTMsMCwxMDAsODAsMCwxMDAsMTQ3LAorICAgIDAsMTAwLDE0OCwwLDEzMiwyLDAsOTAsODQsMCwxMDAsMTQ5LDAsMTAwLDE1MCwwLAorICAgIDEzMiwwLDAsOTAsODUsMCwxMDAsMTUxLDAsMTAwLDE1MiwwLDEzMiwwLDAsOTAsCisgICAgODYsMCwxMDAsMTUzLDAsMTAwLDE1NCwwLDEzMiwwLDAsOTAsODcsMCwxMDAsNTMsCisgICAgMCwxMDAsNTMsMCwxMDIsMCwwLDEwMCw4MCwwLDEwMCwxNTUsMCwxMDAsMTU2LDAsCisgICAgMTMyLDQsMCw5MCw4OCwwLDEwMCwxNTcsMCwxMDAsMTU4LDAsMTMyLDAsMCw5MCwKKyAgICA4OSwwLDEwMCwxNTksMCwxMDAsMTYwLDAsMTMyLDAsMCw5MCw5MCwwLDEwMCwxNjEsCisgICAgMCwxMDAsMTYyLDAsMTMyLDAsMCw5MCw5MSwwLDEwMCw1MywwLDgzLDQxLDE2NCwKKyAgICA5Nyw4MywxLDAsMCw2NywxMTEsMTE0LDEwMSwzMiwxMDUsMTA5LDExMiwxMDgsMTAxLDEwOSwKKyAgICAxMDEsMTEwLDExNiw5NywxMTYsMTA1LDExMSwxMTAsMzIsMTExLDEwMiwzMiwxMDUsMTA5LDExMiwxMTEsCisgICAgMTE0LDExNiw0NiwxMCwxMCw4NCwxMDQsMTA1LDExNSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwKKyAgICAzMiwxMDUsMTE1LDMyLDc4LDc5LDg0LDMyLDEwOSwxMDEsOTcsMTEwLDExNiwzMiwxMTYsMTExLAorICAgIDMyLDk4LDEwMSwzMiwxMDAsMTA1LDExNCwxMDEsOTksMTE2LDEwOCwxMjEsMzIsMTA1LDEwOSwxMTIsCisgICAgMTExLDExNCwxMTYsMTAxLDEwMCwzMywzMiw3MywxMTYsMzIsMTA0LDk3LDExNSwzMiw5OCwxMDEsCisgICAgMTAxLDExMCwzMiwxMDAsMTAxLDExNSwxMDUsMTAzLDExMCwxMDEsMTAwLDMyLDExNSwxMTcsOTksMTA0LAorICAgIDEwLDExNiwxMDQsOTcsMTE2LDMyLDEwNSwxMTYsMzIsOTksOTcsMTEwLDMyLDk4LDEwMSwzMiwKKyAgICA5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsMTEyLDEwMSwxMDAsMzIsMTA1LDExMCwxMTYsCisgICAgMTExLDMyLDgwLDEyMSwxMTYsMTA0LDExMSwxMTAsMzIsOTcsMTE1LDMyLDExNiwxMDQsMTAxLDMyLAorICAgIDEwNSwxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LDk3LDExNiwxMDUsMTExLDExMCwzMiwxMTEsCisgICAgMTAyLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDQ2LDMyLDY1LDExNSwxMCwxMTUsMTE3LDk5LAorICAgIDEwNCwzMiwxMDUsMTE2LDMyLDExNCwxMDEsMTEzLDExNywxMDUsMTE0LDEwMSwxMTUsMzIsMTE2LDEwNCwKKyAgICAxMDEsMzIsMTA1LDExMCwxMDYsMTAxLDk5LDExNiwxMDUsMTExLDExMCwzMiwxMTEsMTAyLDMyLDExNSwKKyAgICAxMTIsMTAxLDk5LDEwNSwxMDIsMTA1LDk5LDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNSwzMiwKKyAgICA5NywxMTAsMTAwLDMyLDk3LDExNiwxMTYsMTE0LDEwNSw5OCwxMTcsMTE2LDEwMSwxMTUsMzIsMTA1LAorICAgIDExMCwzMiwxMTEsMTE0LDEwMCwxMDEsMTE0LDMyLDExNiwxMTEsMTAsMTE5LDExMSwxMTQsMTA3LDQ2LAorICAgIDMyLDc5LDExMCwxMDEsMzIsMTE1LDEwNCwxMTEsMTE3LDEwOCwxMDAsMzIsMTE3LDExNSwxMDEsMzIsCisgICAgMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCwzMiw5NywxMTUsMzIsMTE2LDEwNCwxMDEsCisgICAgMzIsMTEyLDExNyw5OCwxMDgsMTA1LDk5LDQ1LDEwMiw5Nyw5OSwxMDUsMTEwLDEwMywzMiwxMTgsCisgICAgMTAxLDExNCwxMTUsMTA1LDExMSwxMTAsMzIsMTExLDEwMiwzMiwxMTYsMTA0LDEwNSwxMTUsMzIsMTA5LAorICAgIDExMSwxMDAsMTE3LDEwOCwxMDEsNDYsMTAsMTAsMjE4LDMsMTE5LDEwNSwxMTAsMjE4LDYsOTksCisgICAgMTIxLDEwMywxMTksMTA1LDExMCwyMTgsNiwxMDAsOTcsMTE0LDExOSwxMDUsMTEwLDk5LDAsMCwKKyAgICAwLDAsMCwwLDAsMCwxLDAsMCwwLDIsMCwwLDAsNjcsMCwKKyAgICAwLDAsMTE1LDQ5LDAsMCwwLDExNiwwLDAsMTA2LDEsMCwxMDYsMiwwLAorICAgIDExNiwzLDAsMTMxLDEsMCwxMTQsMzMsMCwxMDAsMSwwLDEwMCwyLDAsMTMyLAorICAgIDAsMCwxMjUsMCwwLDExMCwxMiwwLDEwMCwzLDAsMTAwLDIsMCwxMzIsMCwKKyAgICAwLDEyNSwwLDAsMTI0LDAsMCw4Myw0MSw0LDc4LDk5LDAsMCwwLDAsCisgICAgMCwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsODMsMCwwLDAsCisgICAgMTE1LDEzLDAsMCwwLDEwMCwxLDAsMTE2LDAsMCwxMDYsMSwwLDEwNyw2LAorICAgIDAsODMsNDEsMiwxMjIsNTMsODQsMTE0LDExNywxMDEsMzIsMTA1LDEwMiwzMiwxMDIsMTA1LAorICAgIDEwOCwxMDEsMTEwLDk3LDEwOSwxMDEsMTE1LDMyLDEwOSwxMTcsMTE1LDExNiwzMiw5OCwxMDEsMzIsCisgICAgOTksMTA0LDEwMSw5OSwxMDcsMTAxLDEwMCwzMiw5OSw5NywxMTUsMTAxLDQ1LDEwNSwxMTAsMTE1LAorICAgIDEwMSwxMTAsMTE1LDEwNSwxMTYsMTA1LDExOCwxMDEsMTA4LDEyMSw0NiwxMTUsMTIsMCwwLDAsCisgICAgODAsODksODQsNzIsNzksNzgsNjcsNjUsODMsNjksNzksNzUsNDEsMiwyMTgsMywKKyAgICA5NSwxMTEsMTE1LDkwLDcsMTAxLDExMCwxMTgsMTA1LDExNCwxMTEsMTEwLDE2OSwwLDExNCw0LAorICAgIDAsMCwwLDExNCw0LDAsMCwwLDI1MCwyOSw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLAorICAgIDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsCisgICAgMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwyMTgsMTEsOTUsMTE0LDEwMSwxMDgsOTcsMTIwLDk1LAorICAgIDk5LDk3LDExNSwxMDEsMzAsMCwwLDAsMTE1LDIsMCwwLDAsMCwyLDEyMiwKKyAgICAzNyw5NSwxMDksOTcsMTA3LDEwMSw5NSwxMTQsMTAxLDEwOCw5NywxMjAsOTUsOTksOTcsMTE1LAorICAgIDEwMSw0Niw2MCwxMDgsMTExLDk5LDk3LDEwOCwxMTUsNjIsNDYsOTUsMTE0LDEwMSwxMDgsOTcsCisgICAgMTIwLDk1LDk5LDk3LDExNSwxMDEsOTksMCwwLDAsMCwwLDAsMCwwLDAsCisgICAgMCwwLDAsMSwwLDAsMCw4MywwLDAsMCwxMTUsNCwwLDAsMCwKKyAgICAxMDAsMSwwLDgzLDQxLDIsMTIyLDUzLDg0LDExNCwxMTcsMTAxLDMyLDEwNSwxMDIsMzIsCisgICAgMTAyLDEwNSwxMDgsMTAxLDExMCw5NywxMDksMTAxLDExNSwzMiwxMDksMTE3LDExNSwxMTYsMzIsOTgsCisgICAgMTAxLDMyLDk5LDEwNCwxMDEsOTksMTA3LDEwMSwxMDAsMzIsOTksOTcsMTE1LDEwMSw0NSwxMDUsCisgICAgMTEwLDExNSwxMDEsMTEwLDExNSwxMDUsMTE2LDEwNSwxMTgsMTAxLDEwOCwxMjEsNDYsNzAsMTE0LDQsCisgICAgMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwKKyAgICAwLDAsMTE0LDUsMCwwLDAsMTE0LDYsMCwwLDAsMzQsMCwwLDAsCisgICAgMTE1LDIsMCwwLDAsMCwyLDQxLDQsMjE4LDMsMTE1LDEyMSwxMTUsMjE4LDgsCisgICAgMTEyLDEwOCw5NywxMTYsMTAyLDExMSwxMTQsMTA5LDIxOCwxMCwxMTUsMTE2LDk3LDExNCwxMTYsMTE1LAorICAgIDExOSwxMDUsMTE2LDEwNCwyMTgsMjcsOTUsNjcsNjUsODMsNjksOTUsNzMsNzgsODMsNjksCisgICAgNzgsODMsNzMsODQsNzMsODYsNjksOTUsODAsNzYsNjUsODQsNzAsNzksODIsNzcsCisgICAgODMsNDEsMSwxMTQsNiwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLAorICAgIDAsMCwxMTQsNSwwLDAsMCwyMTgsMTYsOTUsMTA5LDk3LDEwNywxMDEsOTUsMTE0LAorICAgIDEwMSwxMDgsOTcsMTIwLDk1LDk5LDk3LDExNSwxMDEsMjgsMCwwLDAsMTE1LDgsMCwKKyAgICAwLDAsMCwxLDE4LDEsMTUsNCwxMiwzLDExNCwxMSwwLDAsMCw5OSwKKyAgICAxLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwzLDAsMCwwLAorICAgIDY3LDAsMCwwLDExNSwyNiwwLDAsMCwxMTYsMCwwLDEyNCwwLDAsMTMxLAorICAgIDEsMCwxMDAsMSwwLDY0LDEwNiwxLDAsMTAwLDIsMCwxMDAsMywwLDEzMSwKKyAgICAyLDAsODMsNDEsNCwxMjIsNDIsNjcsMTExLDExMCwxMTgsMTAxLDExNCwxMTYsMzIsOTcsCisgICAgMzIsNTEsNTAsNDUsOTgsMTA1LDExNiwzMiwxMDUsMTEwLDExNiwxMDEsMTAzLDEwMSwxMTQsMzIsCisgICAgMTE2LDExMSwzMiwxMDgsMTA1LDExNiwxMTYsMTA4LDEwMSw0NSwxMDEsMTEwLDEwMCwxMDUsOTcsMTEwLAorICAgIDQ2LDEwOCwzLDAsMCwwLDI1NSwxMjcsMjU1LDEyNywzLDAsMjMzLDQsMCwwLAorICAgIDAsMjE4LDYsMTA4LDEwNSwxMTYsMTE2LDEwOCwxMDEsNDEsMiwyMTgsMywxMDUsMTEwLDExNiwKKyAgICAyMTgsOCwxMTYsMTExLDk1LDk4LDEyMSwxMTYsMTAxLDExNSw0MSwxLDIxOCwxLDEyMCwxMTQsCisgICAgNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsNywKKyAgICA5NSwxMTksOTUsMTA4LDExMSwxMTAsMTAzLDQwLDAsMCwwLDExNSwyLDAsMCwwLAorICAgIDAsMiwxMTQsMTcsMCwwLDAsOTksMSwwLDAsMCwwLDAsMCwwLAorICAgIDEsMCwwLDAsMywwLDAsMCw2NywwLDAsMCwxMTUsMTYsMCwwLAorICAgIDAsMTE2LDAsMCwxMDYsMSwwLDEyNCwwLDAsMTAwLDEsMCwxMzEsMiwwLAorICAgIDgzLDQxLDIsMTIyLDQ3LDY3LDExMSwxMTAsMTE4LDEwMSwxMTQsMTE2LDMyLDUyLDMyLDk4LAorICAgIDEyMSwxMTYsMTAxLDExNSwzMiwxMDUsMTEwLDMyLDEwOCwxMDUsMTE2LDExNiwxMDgsMTAxLDQ1LDEwMSwKKyAgICAxMTAsMTAwLDEwNSw5NywxMTAsMzIsMTE2LDExMSwzMiw5NywxMTAsMzIsMTA1LDExMCwxMTYsMTAxLAorICAgIDEwMywxMDEsMTE0LDQ2LDExNCwxMywwLDAsMCw0MSwyLDExNCwxNCwwLDAsMCwKKyAgICAyMTgsMTAsMTAyLDExNCwxMTEsMTA5LDk1LDk4LDEyMSwxMTYsMTAxLDExNSw0MSwxLDkwLDksCisgICAgMTA1LDExMCwxMTYsOTUsOTgsMTIxLDExNiwxMDEsMTE1LDExNCw0LDAsMCwwLDExNCw0LAorICAgIDAsMCwwLDExNCw1LDAsMCwwLDIxOCw3LDk1LDExNCw5NSwxMDgsMTExLDExMCwKKyAgICAxMDMsNDUsMCwwLDAsMTE1LDIsMCwwLDAsMCwyLDExNCwxOSwwLDAsCisgICAgMCw5OSwwLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwzLDAsCisgICAgMCwwLDcxLDAsMCwwLDExNSwyNiwwLDAsMCwxMTYsMCwwLDEwNiwxLAorICAgIDAsMTAwLDEsMCwxMDAsMiwwLDEzMiwwLDAsMTI0LDAsMCw2OCwxMzEsMSwKKyAgICAwLDEzMSwxLDAsODMsNDEsMywxMjIsMzEsODIsMTAxLDExMiwxMDgsOTcsOTksMTAxLAorICAgIDEwOSwxMDEsMTEwLDExNiwzMiwxMDIsMTExLDExNCwzMiwxMTEsMTE1LDQ2LDExMiw5NywxMTYsMTA0LAorICAgIDQ2LDEwNiwxMTEsMTA1LDExMCw0MCw0MSw0Niw5OSwxLDAsMCwwLDAsMCwwLAorICAgIDAsMiwwLDAsMCw0LDAsMCwwLDgzLDAsMCwwLDExNSwzNywwLAorICAgIDAsMCwxMDMsMCwwLDEyNCwwLDAsOTMsMjcsMCwxMjUsMSwwLDEyNCwxLAorICAgIDAsMTE0LDYsMCwxMjQsMSwwLDEwNiwwLDAsMTE2LDEsMCwxMzEsMSwwLAorICAgIDE0NSwyLDAsMTEzLDYsMCw4MywxMTQsNCwwLDAsMCw0MSwyLDIxOCw2LAorICAgIDExNCwxMTUsMTE2LDExNCwxMDUsMTEyLDIxOCwxNSwxMTIsOTcsMTE2LDEwNCw5NSwxMTUsMTAxLDExMiwKKyAgICA5NywxMTQsOTcsMTE2LDExMSwxMTQsMTE1LDQxLDIsMjE4LDIsNDYsNDgsMjE4LDQsMTEyLAorICAgIDk3LDExNCwxMTYsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwKKyAgICAwLDAsMjUwLDEwLDYwLDEwOCwxMDUsMTE1LDExNiw5OSwxMTEsMTA5LDExMiw2Miw1MiwwLAorICAgIDAsMCwxMTUsMiwwLDAsMCw5LDEsMTIyLDMwLDk1LDExMiw5NywxMTYsMTA0LAorICAgIDk1LDEwNiwxMTEsMTA1LDExMCw0Niw2MCwxMDgsMTExLDk5LDk3LDEwOCwxMTUsNjIsNDYsNjAsCisgICAgMTA4LDEwNSwxMTUsMTE2LDk5LDExMSwxMDksMTEyLDYyLDQxLDIsMjE4LDgsMTEyLDk3LDExNiwKKyAgICAxMDQsOTUsMTE1LDEwMSwxMTIsMjE4LDQsMTA2LDExMSwxMDUsMTEwLDQxLDEsMjE4LDEwLDExMiwKKyAgICA5NywxMTYsMTA0LDk1LDExMiw5NywxMTQsMTE2LDExNSwxMTQsNCwwLDAsMCwxMTQsNCwKKyAgICAwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMTAsOTUsMTEyLDk3LDExNiwxMDQsOTUsCisgICAgMTA2LDExMSwxMDUsMTEwLDUwLDAsMCwwLDExNSw0LDAsMCwwLDAsMiwxNSwKKyAgICAxLDExNCwyOCwwLDAsMCw5OSwxLDAsMCwwLDAsMCwwLDAsNSwKKyAgICAwLDAsMCw1LDAsMCwwLDY3LDAsMCwwLDExNSwxMzQsMCwwLDAsCisgICAgMTE2LDAsMCwxMTYsMSwwLDEzMSwxLDAsMTAwLDEsMCwxMDcsMiwwLDExNCwKKyAgICA1MiwwLDEyNCwwLDAsMTA2LDIsMCwxMTYsMywwLDEzMSwxLDAsOTIsMywKKyAgICAwLDEyNSwxLDAsMTI1LDIsMCwxMjUsMywwLDEyNCwxLDAsMTI0LDMsMCwKKyAgICAxMDIsMiwwLDgzLDEyMCw2OSwwLDExNiw0LDAsMTI0LDAsMCwxMzEsMSwwLAorICAgIDY4LDkzLDU1LDAsMTI1LDQsMCwxMjQsNCwwLDExNiwxLDAsMTA3LDYsMCwKKyAgICAxMTQsNjUsMCwxMjQsMCwwLDEwNiw1LDAsMTI0LDQsMCwxMDAsMiwwLDEwMCwKKyAgICAxLDAsMTMxLDEsMSw5MiwyLDAsMTI1LDEsMCwxMjUsMywwLDEyNCwxLAorICAgIDAsMTI0LDMsMCwxMDIsMiwwLDgzLDExMyw2NSwwLDg3LDEwMCwzLDAsMTI0LAorICAgIDAsMCwxMDIsMiwwLDgzLDQxLDQsMTIyLDMyLDgyLDEwMSwxMTIsMTA4LDk3LDk5LAorICAgIDEwMSwxMDksMTAxLDExMCwxMTYsMzIsMTAyLDExMSwxMTQsMzIsMTExLDExNSw0NiwxMTIsOTcsMTE2LAorICAgIDEwNCw0NiwxMTUsMTEyLDEwOCwxMDUsMTE2LDQwLDQxLDQ2LDIzMywxLDAsMCwwLDkwLAorICAgIDgsMTA5LDk3LDEyMCwxMTUsMTEyLDEwOCwxMDUsMTE2LDIxOCwwLDQxLDYsMjE4LDMsMTA4LAorICAgIDEwMSwxMTAsMTE0LDIxLDAsMCwwLDIxOCwxMCwxMTQsMTEyLDk3LDExNCwxMTYsMTA1LDExNiwKKyAgICAxMDUsMTExLDExMCwxMTQsMjUsMCwwLDAsMjE4LDgsMTE0LDEwMSwxMTgsMTAxLDExNCwxMTUsCisgICAgMTAxLDEwMCwyMTgsNiwxMTQsMTE1LDExMiwxMDgsMTA1LDExNiw0MSw1LDIxOCw0LDExMiw5NywKKyAgICAxMTYsMTA0LDkwLDUsMTAyLDExNCwxMTEsMTEwLDExNiwyMTgsMSw5NSwyMTgsNCwxMTYsOTcsCisgICAgMTA1LDEwOCwxMTQsMTYsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLAorICAgIDAsMTE0LDUsMCwwLDAsMjE4LDExLDk1LDExMiw5NywxMTYsMTA0LDk1LDExNSwxMTIsCisgICAgMTA4LDEwNSwxMTYsNTYsMCwwLDAsMTE1LDE2LDAsMCwwLDAsMiwxOCwxLAorICAgIDI0LDEsMTAsMSwxOSwxLDEyLDEsMjcsMSwxNCwxLDExNCwzOCwwLDAsCisgICAgMCw5OSwxLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwyLDAsCisgICAgMCwwLDY3LDAsMCwwLDExNSwxMywwLDAsMCwxMTYsMCwwLDEwNiwxLAorICAgIDAsMTI0LDAsMCwxMzEsMSwwLDgzLDQxLDEsMTIyLDEyNiw4MywxMTYsOTcsMTE2LAorICAgIDMyLDExNiwxMDQsMTAxLDMyLDExMiw5NywxMTYsMTA0LDQ2LDEwLDEwLDMyLDMyLDMyLDMyLAorICAgIDc3LDk3LDEwMCwxMDEsMzIsOTcsMzIsMTE1LDEwMSwxMTIsOTcsMTE0LDk3LDExNiwxMDEsMzIsCisgICAgMTAyLDExNywxMTAsOTksMTE2LDEwNSwxMTEsMTEwLDMyLDExNiwxMTEsMzIsMTA5LDk3LDEwNywxMDEsCisgICAgMzIsMTA1LDExNiwzMiwxMDEsOTcsMTE1LDEwNSwxMDEsMTE0LDMyLDExNiwxMTEsMzIsMTExLDExOCwKKyAgICAxMDEsMTE0LDExNCwxMDUsMTAwLDEwMSwzMiwxMDUsMTEwLDMyLDEwMSwxMjAsMTEyLDEwMSwxMTQsMTA1LAorICAgIDEwOSwxMDEsMTEwLDExNiwxMTUsMTAsMzIsMzIsMzIsMzIsNDAsMTAxLDQ2LDEwMyw0NiwzMiwKKyAgICA5OSw5Nyw5OSwxMDQsMTAxLDMyLDExNSwxMTYsOTcsMTE2LDMyLDExNCwxMDEsMTE1LDExNywxMDgsCisgICAgMTE2LDExNSw0MSw0NiwxMCwxMCwzMiwzMiwzMiwzMiw0MSwyLDExNCwzLDAsMCwKKyAgICAwLDkwLDQsMTE1LDExNiw5NywxMTYsNDEsMSwxMTQsMzUsMCwwLDAsMTE0LDQsCisgICAgMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDEwLDk1LAorICAgIDExMiw5NywxMTYsMTA0LDk1LDExNSwxMTYsOTcsMTE2LDY4LDAsMCwwLDExNSwyLDAsCisgICAgMCwwLDAsNywxMTQsMzksMCwwLDAsOTksMiwwLDAsMCwwLDAsCisgICAgMCwwLDMsMCwwLDAsMTEsMCwwLDAsNjcsMCwwLDAsMTE1LDU4LAorICAgIDAsMCwwLDEyMSwxNiwwLDExNiwwLDAsMTI0LDAsMCwxMzEsMSwwLDEyNSwKKyAgICAyLDAsODcsMTEwLDIyLDAsNCwxMTYsMSwwLDEwNywxMCwwLDExNCw0MCwwLAorICAgIDEsMSwxLDEwMCwxLDAsODMsODksMTEwLDEsMCw4OCwxMjQsMiwwLDEwNiwKKyAgICAyLDAsMTAwLDIsMCw2NCwxMjQsMSwwLDEwNywyLDAsODMsNDEsMywxMjIsCisgICAgNDksODQsMTAxLDExNSwxMTYsMzIsMTE5LDEwNCwxMDEsMTE2LDEwNCwxMDEsMTE0LDMyLDExNiwxMDQsCisgICAgMTAxLDMyLDExMiw5NywxMTYsMTA0LDMyLDEwNSwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsMTE1LDExMiwKKyAgICAxMDEsOTksMTA1LDEwMiwxMDUsMTAxLDEwMCwzMiwxMDksMTExLDEwMCwxMDEsMzIsMTE2LDEyMSwxMTIsCisgICAgMTAxLDQ2LDcwLDEwNSwwLDI0MCwwLDAsNDEsMywxMTQsMzksMCwwLDAsMjE4LAorICAgIDcsNzksODMsNjksMTE0LDExNCwxMTEsMTE0LDIxOCw3LDExNSwxMTYsOTUsMTA5LDExMSwxMDAsCisgICAgMTAxLDQxLDMsMTE0LDM1LDAsMCwwLDIxOCw0LDEwOSwxMTEsMTAwLDEwMSw5MCw5LAorICAgIDExNSwxMTYsOTcsMTE2LDk1LDEwNSwxMTAsMTAyLDExMSwxMTQsNCwwLDAsMCwxMTQsNCwKKyAgICAwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMTgsOTUsMTEyLDk3LDExNiwxMDQsOTUsCisgICAgMTA1LDExNSw5NSwxMDksMTExLDEwMCwxMDEsOTUsMTE2LDEyMSwxMTIsMTAxLDc4LDAsMCwwLAorICAgIDExNSwxMCwwLDAsMCwwLDIsMywxLDE2LDEsMTMsMSw5LDEsMTE0LAorICAgIDQzLDAsMCwwLDk5LDEsMCwwLDAsMCwwLDAsMCwxLDAsMCwKICAgICAwLDMsMCwwLDAsNjcsMCwwLDAsMTE1LDEzLDAsMCwwLDExNiwwLAotICAgIDAsMTI0LDAsMCwxMDAsMSwwLDEzMSwyLDAsODMsNDAsMiwwLDAsMCwKLSAgICAxMTcsMzEsMCwwLDAsODIsMTAxLDExMiwxMDgsOTcsOTksMTAxLDEwOSwxMDEsMTEwLDExNiwKLSAgICAzMiwxMDIsMTExLDExNCwzMiwxMTEsMTE1LDQ2LDExMiw5NywxMTYsMTA0LDQ2LDEwNSwxMTUsMTAyLAotICAgIDEwNSwxMDgsMTAxLDQ2LDEwNSwwLDEyOCwwLDAsNDAsMSwwLDAsMCwxMTcsMTgsCi0gICAgMCwwLDAsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTA1LDExNSw5NSwxMDksMTExLDEwMCwxMDEsCi0gICAgOTUsMTE2LDEyMSwxMTIsMTAxLDQwLDEsMCwwLDAsMTE3LDQsMCwwLDAsMTEyLAotICAgIDk3LDExNiwxMDQsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLAotICAgIDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwKLSAgICAxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsCi0gICAgMTIsMCwwLDAsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTA1LDExNSwxMDIsMTA1LDEwOCwxMDEsCi0gICAgMTA4LDAsMCwwLDExNSwyLDAsMCwwLDAsMiwxMTcsMTIsMCwwLDAsCi0gICAgOTUsMTEyLDk3LDExNiwxMDQsOTUsMTA1LDExNSwxMDIsMTA1LDEwOCwxMDEsOTksMSwwLDAsCi0gICAgMCwwLDAsMCwwLDEsMCwwLDAsMywwLDAsMCw2NywwLDAsCi0gICAgMCwxMTUsMzQsMCwwLDAsMTI0LDAsMCwxMTUsMjEsMCwxMTYsMCwwLDEwNiwKLSAgICAxLDAsMTMxLDAsMCwxMjUsMCwwLDExMCwwLDAsMTE2LDIsMCwxMjQsMCwKLSAgICAwLDEwMCwxLDAsMTMxLDIsMCw4Myw0MCwyLDAsMCwwLDExNywzMCwwLAotICAgIDAsMCw4MiwxMDEsMTEyLDEwOCw5Nyw5OSwxMDEsMTA5LDEwMSwxMTAsMTE2LDMyLDEwMiwxMTEsCi0gICAgMTE0LDMyLDExMSwxMTUsNDYsMTEyLDk3LDExNiwxMDQsNDYsMTA1LDExNSwxMDAsMTA1LDExNCw0NiwKLSAgICAxMDUsMCw2NCwwLDAsNDAsMywwLDAsMCwxMTcsMywwLDAsMCw5NSwKLSAgICAxMTEsMTE1LDExNyw2LDAsMCwwLDEwMywxMDEsMTE2LDk5LDExOSwxMDAsMTE3LDE4LDAsCi0gICAgMCwwLDk1LDExMiw5NywxMTYsMTA0LDk1LDEwNSwxMTUsOTUsMTA5LDExMSwxMDAsMTAxLDk1LAotICAgIDExNiwxMjEsMTEyLDEwMSw0MCwxLDAsMCwwLDExNyw0LDAsMCwwLDExMiw5NywKLSAgICAxMTYsMTA0LDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLAotICAgIDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LAotICAgIDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDExLAotICAgIDAsMCwwLDk1LDExMiw5NywxMTYsMTA0LDk1LDEwNSwxMTUsMTAwLDEwNSwxMTQsMTE0LDAsCi0gICAgMCwwLDExNSw2LDAsMCwwLDAsMiw2LDEsMTUsMSwxMTcsMTEsMCwKLSAgICAwLDAsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTA1LDExNSwxMDAsMTA1LDExNCwxMDUsMTgyLDEsCi0gICAgMCwwLDk5LDMsMCwwLDAsMCwwLDAsMCw2LDAsMCwwLDE3LAotICAgIDAsMCwwLDY3LDAsMCwwLDExNSwxOTIsMCwwLDAsMTAwLDEsMCwxMDYsCi0gICAgMCwwLDEyNCwwLDAsMTE2LDEsMCwxMjQsMCwwLDEzMSwxLDAsMTMxLDIsCi0gICAgMCwxMjUsMywwLDExNiwyLDAsMTA2LDMsMCwxMjQsMywwLDExNiwyLDAsCi0gICAgMTA2LDQsMCwxMTYsMiwwLDEwNiw1LDAsNjYsMTE2LDIsMCwxMDYsNiwwLAotICAgIDY2LDEyNCwyLDAsMTAwLDIsMCw2NCwxMzEsMywwLDEyNSw0LDAsMTIxLDYwLAotICAgIDAsMTE2LDcsMCwxMDYsOCwwLDEyNCw0LDAsMTAwLDMsMCwxMzEsMiwwLAotICAgIDE0MywyMCwwLDEyNSw1LDAsMTI0LDUsMCwxMDYsOSwwLDEyNCwxLDAsMTMxLAotICAgIDEsMCwxLDg3LDEwMCw0LDAsODEsODgsMTE2LDIsMCwxMDYsMTAsMCwxMjQsCi0gICAgMywwLDEyNCwwLDAsMTMxLDIsMCwxLDg3LDExMCw1OSwwLDQsMTE2LDExLAotICAgIDAsMTA3LDEwLDAsMTE0LDE4NywwLDEsMSwxLDEyMSwxNywwLDExNiwyLDAsCi0gICAgMTA2LDEyLDAsMTI0LDMsMCwxMzEsMSwwLDEsODcsMTEwLDE4LDAsNCwxMTYsCi0gICAgMTEsMCwxMDcsMTAsMCwxMTQsMTc5LDAsMSwxLDEsODksMTEwLDEsMCw4OCwKLSAgICAxMzAsMCwwLDg5LDExMCwxLDAsODgsMTAwLDQsMCw4Myw0MCw1LDAsMCwKLSAgICAwLDExNywxNjIsMCwwLDAsNjYsMTAxLDExNSwxMTYsNDUsMTAxLDEwMiwxMDIsMTExLDExNCwKLSAgICAxMTYsMzIsMTAyLDExNywxMTAsOTksMTE2LDEwNSwxMTEsMTEwLDMyLDExNiwxMTEsMzIsMTE5LDExNCwKLSAgICAxMDUsMTE2LDEwMSwzMiwxMDAsOTcsMTE2LDk3LDMyLDExNiwxMTEsMzIsOTcsMzIsMTEyLDk3LAotICAgIDExNiwxMDQsMzIsOTcsMTE2LDExMSwxMDksMTA1LDk5LDk3LDEwOCwxMDgsMTIxLDQ2LDEwLDMyLAotICAgIDMyLDMyLDMyLDY2LDEwMSwzMiwxMTIsMTE0LDEwMSwxMTIsOTcsMTE0LDEwMSwxMDAsMzIsMTE2LAotICAgIDExMSwzMiwxMDQsOTcsMTEwLDEwMCwxMDgsMTAxLDMyLDk3LDMyLDcwLDEwNSwxMDgsMTAxLDY5LAotICAgIDEyMCwxMDUsMTE1LDExNiwxMTUsNjksMTE0LDExNCwxMTEsMTE0LDMyLDEwNSwxMDIsMzIsOTksMTExLAotICAgIDExMCw5OSwxMTcsMTE0LDExNCwxMDEsMTEwLDExNiwzMiwxMTksMTE0LDEwNSwxMTYsMTA1LDExMCwxMDMsCi0gICAgMzIsMTExLDEwMiwzMiwxMTYsMTA0LDEwMSwxMCwzMiwzMiwzMiwzMiwxMTYsMTAxLDEwOSwxMTIsCi0gICAgMTExLDExNCw5NywxMTQsMTIxLDMyLDEwMiwxMDUsMTA4LDEwMSwzMiwxMDUsMTE1LDMyLDk3LDExNiwKLSAgICAxMTYsMTAxLDEwOSwxMTIsMTE2LDEwMSwxMDAsNDYsMTE3LDUsMCwwLDAsMTIzLDEyNSw0NiwKLSAgICAxMjMsMTI1LDEwNSwxODIsMSwwLDAsMTE3LDIsMCwwLDAsMTE5LDk4LDc4LDQwLAotICAgIDEzLDAsMCwwLDExNyw2LDAsMCwwLDEwMiwxMTEsMTE0LDEwOSw5NywxMTYsMTE3LAotICAgIDIsMCwwLDAsMTA1LDEwMCwxMTcsMywwLDAsMCw5NSwxMTEsMTE1LDExNyw0LAotICAgIDAsMCwwLDExMSwxMTIsMTAxLDExMCwxMTcsNiwwLDAsMCw3OSw5NSw2OSw4OCwKLSAgICA2Nyw3NiwxMTcsNywwLDAsMCw3OSw5NSw2Nyw4Miw2OSw2NSw4NCwxMTcsOCwKLSAgICAwLDAsMCw3OSw5NSw4Nyw4Miw3OSw3OCw3Niw4OSwxMTcsMywwLDAsMCwKLSAgICA5NSwxMDUsMTExLDExNyw2LDAsMCwwLDcwLDEwNSwxMDgsMTAxLDczLDc5LDExNyw1LAotICAgIDAsMCwwLDExOSwxMTQsMTA1LDExNiwxMDEsMTE3LDcsMCwwLDAsMTE0LDEwMSwxMTIsCi0gICAgMTA4LDk3LDk5LDEwMSwxMTcsNywwLDAsMCw3OSw4Myw2OSwxMTQsMTE0LDExMSwxMTQsCi0gICAgMTE3LDYsMCwwLDAsMTE3LDExMCwxMDgsMTA1LDExMCwxMDcsNDAsNiwwLDAsMCwKLSAgICAxMTcsNCwwLDAsMCwxMTIsOTcsMTE2LDEwNCwxMTcsNCwwLDAsMCwxMDAsOTcsCi0gICAgMTE2LDk3LDExNyw0LDAsMCwwLDEwOSwxMTEsMTAwLDEwMSwxMTcsOCwwLDAsMCwKLSAgICAxMTIsOTcsMTE2LDEwNCw5NSwxMTYsMTA5LDExMiwxMTcsMiwwLDAsMCwxMDIsMTAwLDExNywKLSAgICA0LDAsMCwwLDEwMiwxMDUsMTA4LDEwMSw0MCwwLDAsMCwwLDQwLDAsMCwKLSAgICAwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwKLSAgICAxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwKLSAgICAxMTQsOTcsMTEyLDYyLDExNywxMywwLDAsMCw5NSwxMTksMTE0LDEwNSwxMTYsMTAxLDk1LAotICAgIDk3LDExNiwxMTEsMTA5LDEwNSw5OSwxMjEsMCwwLDAsMTE1LDI2LDAsMCwwLDAsCi0gICAgNSwyNCwxLDksMSwzMywxLDMsMywyMSwxLDE5LDEsMjAsMSwxMywKLSAgICAxLDMsMSwxNywxLDEzLDEsNSwxLDExNywxMywwLDAsMCw5NSwxMTksCi0gICAgMTE0LDEwNSwxMTYsMTAxLDk1LDk3LDExNiwxMTEsMTA5LDEwNSw5OSw5OSwyLDAsMCwwLAotICAgIDAsMCwwLDAsMywwLDAsMCw3LDAsMCwwLDY3LDAsMCwwLAotICAgIDExNSw5NSwwLDAsMCwxMjAsNjksMCwxMDAsMSwwLDEwMCwyLDAsMTAwLDMsCi0gICAgMCwxMDAsNCwwLDEwMyw0LDAsNjgsOTMsNDksMCwxMjUsMiwwLDExNiwwLAotICAgIDAsMTI0LDEsMCwxMjQsMiwwLDEzMSwyLDAsMTE0LDE5LDAsMTE2LDEsMCwKLSAgICAxMjQsMCwwLDEyNCwyLDAsMTE2LDIsMCwxMjQsMSwwLDEyNCwyLDAsMTMxLAotICAgIDIsMCwxMzEsMywwLDEsMTEzLDE5LDAsMTEzLDE5LDAsODcsMTI0LDAsMCwKLSAgICAxMDYsMywwLDEwNiw0LDAsMTI0LDEsMCwxMDYsMywwLDEzMSwxLDAsMSwKLSAgICAxMDAsNSwwLDgzLDQwLDYsMCwwLDAsMTE3LDQ3LDAsMCwwLDgzLDEwNSwKLSAgICAxMDksMTEyLDEwOCwxMDEsMzIsMTE1LDExNyw5OCwxMTUsMTE2LDEwNSwxMTYsMTE3LDExNiwxMDEsMzIsCi0gICAgMTAyLDExMSwxMTQsMzIsMTAyLDExNywxMTAsOTksMTE2LDExMSwxMTEsMTA4LDExNSw0NiwxMTcsMTEyLAotICAgIDEwMCw5NywxMTYsMTAxLDk1LDExOSwxMTQsOTcsMTEyLDExMiwxMDEsMTE0LDQ2LDExNywxMCwwLAotICAgIDAsMCw5NSw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSw5NSwxMTcsOCwwLDAsCi0gICAgMCw5NSw5NSwxMTAsOTcsMTA5LDEwMSw5NSw5NSwxMTcsMTIsMCwwLDAsOTUsOTUsCi0gICAgMTEzLDExNyw5NywxMDgsMTEwLDk3LDEwOSwxMDEsOTUsOTUsMTE3LDcsMCwwLDAsOTUsCi0gICAgOTUsMTAwLDExMSw5OSw5NSw5NSw3OCw0MCw1LDAsMCwwLDExNyw3LDAsMCwKLSAgICAwLDEwNCw5NywxMTUsOTcsMTE2LDExNiwxMTQsMTE3LDcsMCwwLDAsMTE1LDEwMSwxMTYsCi0gICAgOTcsMTE2LDExNiwxMTQsMTE3LDcsMCwwLDAsMTAzLDEwMSwxMTYsOTcsMTE2LDExNiwxMTQsCi0gICAgMTE3LDgsMCwwLDAsOTUsOTUsMTAwLDEwNSw5OSwxMTYsOTUsOTUsMTE3LDYsMCwKLSAgICAwLDAsMTE3LDExMiwxMDAsOTcsMTE2LDEwMSw0MCwzLDAsMCwwLDExNywzLDAsCi0gICAgMCwwLDExMCwxMDEsMTE5LDExNywzLDAsMCwwLDExMSwxMDgsMTAwLDExNyw3LDAsCi0gICAgMCwwLDExNCwxMDEsMTEyLDEwOCw5Nyw5OSwxMDEsNDAsMCwwLDAsMCw0MCwwLAotICAgIDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwKLSAgICAxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwKLSAgICAxMTYsMTE0LDk3LDExMiw2MiwxMTcsNSwwLDAsMCw5NSwxMTksMTE0LDk3LDExMiwxNDMsCi0gICAgMCwwLDAsMTE1LDgsMCwwLDAsMCwyLDI1LDEsMTUsMSwzMiwxLAotICAgIDExNyw1LDAsMCwwLDk1LDExOSwxMTQsOTcsMTEyLDk5LDEsMCwwLDAsMCwKLSAgICAwLDAsMCwxLDAsMCwwLDIsMCwwLDAsNjcsMCwwLDAsMTE1LAotICAgIDE2LDAsMCwwLDExNiwwLDAsMTE2LDEsMCwxMzEsMSwwLDEyNCwwLDAsCi0gICAgMTMxLDEsMCw4Myw0MCwxLDAsMCwwLDExNyw3NSwwLDAsMCw2NywxMTQsCi0gICAgMTAxLDk3LDExNiwxMDEsMzIsOTcsMzIsMTEwLDEwMSwxMTksMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwKLSAgICAxMDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsODQsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsCi0gICAgMTA4LDEwMSwzMiwxMDUsMTE1LDMyLDExMCwxMTEsMTE2LDMyLDEwMSwxMTAsMTE2LDEwMSwxMTQsMTAxLAotICAgIDEwMCwzMiwxMDUsMTEwLDExNiwxMTEsMzIsMTE1LDEyMSwxMTUsNDYsMTA5LDExMSwxMDAsMTE3LDEwOCwKLSAgICAxMDEsMTE1LDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDQwLDIsMCwwLDAsMTE3LDQsCi0gICAgMCwwLDAsMTE2LDEyMSwxMTIsMTAxLDExNywzLDAsMCwwLDk1LDEwNSwxMTEsNDAsCi0gICAgMSwwLDAsMCwxMTcsNCwwLDAsMCwxMTAsOTcsMTA5LDEwMSw0MCwwLDAsCi0gICAgMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLAotICAgIDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsCi0gICAgMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxMCwwLDAsMCwxMTAsMTAxLAotICAgIDExOSw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxNTQsMCwwLDAsMTE1LDIsMCwwLAotICAgIDAsMCw2LDExNywxMCwwLDAsMCwxMTAsMTAxLDExOSw5NSwxMDksMTExLDEwMCwxMTcsCi0gICAgMTA4LDEwMSw5OSwxLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwxLAotICAgIDAsMCwwLDY2LDAsMCwwLDExNSwyMCwwLDAsMCwxMjQsMCwwLDY5LAotICAgIDEwMSwwLDAsOTAsMSwwLDEwMCwwLDAsOTAsMiwwLDEwMCwxLDAsODMsCi0gICAgNDAsMiwwLDAsMCwxMTcsMTQsMCwwLDAsOTUsNjgsMTAxLDk3LDEwMCwxMDgsCi0gICAgMTExLDk5LDEwNyw2OSwxMTQsMTE0LDExMSwxMTQsNzgsNDAsMywwLDAsMCwxMTcsOCwKLSAgICAwLDAsMCw5NSw5NSwxMTAsOTcsMTA5LDEwMSw5NSw5NSwxMTcsMTAsMCwwLDAsCi0gICAgOTUsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsOTUsMTE3LDEyLDAsMCwwLDk1LAotICAgIDk1LDExMywxMTcsOTcsMTA4LDExMCw5NywxMDksMTAxLDk1LDk1LDQwLDEsMCwwLDAsCi0gICAgMTE3LDEwLDAsMCwwLDk1LDk1LDEwOCwxMTEsOTksOTcsMTA4LDExNSw5NSw5NSw0MCwKLSAgICAwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwKLSAgICAxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsCi0gICAgOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxNCwwLDAsMCwKLSAgICA5NSw2OCwxMDEsOTcsMTAwLDEwOCwxMTEsOTksMTA3LDY5LDExNCwxMTQsMTExLDExNCwxNzEsMCwKLSAgICAwLDAsMTE1LDIsMCwwLDAsMTYsMSwxMTcsMTQsMCwwLDAsOTUsNjgsCi0gICAgMTAxLDk3LDEwMCwxMDgsMTExLDk5LDEwNyw2OSwxMTQsMTE0LDExMSwxMTQsOTksMSwwLDAsCi0gICAgMCwwLDAsMCwwLDEsMCwwLDAsMiwwLDAsMCw2NiwwLDAsCi0gICAgMCwxMTUsODYsMCwwLDAsMTI0LDAsMCw2OSwxMDEsMCwwLDkwLDEsMCwKKyAgICAwLDEyNCwwLDAsMTAwLDEsMCwxMzEsMiwwLDgzLDQxLDIsMTIyLDMxLDgyLAorICAgIDEwMSwxMTIsMTA4LDk3LDk5LDEwMSwxMDksMTAxLDExMCwxMTYsMzIsMTAyLDExMSwxMTQsMzIsMTExLAorICAgIDExNSw0NiwxMTIsOTcsMTE2LDEwNCw0NiwxMDUsMTE1LDEwMiwxMDUsMTA4LDEwMSw0NiwxMDUsMCwKKyAgICAxMjgsMCwwLDQxLDEsMTE0LDQzLDAsMCwwLDQxLDEsMTE0LDM1LDAsMCwKKyAgICAwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLAorICAgIDIxOCwxMiw5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMDUsMTE1LDEwMiwxMDUsMTA4LDEwMSw4NywwLAorICAgIDAsMCwxMTUsMiwwLDAsMCwwLDIsMTE0LDQ0LDAsMCwwLDk5LDEsCisgICAgMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDMsMCwwLDAsNjcsCisgICAgMCwwLDAsMTE1LDM0LDAsMCwwLDEyNCwwLDAsMTE1LDIxLDAsMTE2LDAsCisgICAgMCwxMDYsMSwwLDEzMSwwLDAsMTI1LDAsMCwxMTAsMCwwLDExNiwyLDAsCisgICAgMTI0LDAsMCwxMDAsMSwwLDEzMSwyLDAsODMsNDEsMiwxMjIsMzAsODIsMTAxLAorICAgIDExMiwxMDgsOTcsOTksMTAxLDEwOSwxMDEsMTEwLDExNiwzMiwxMDIsMTExLDExNCwzMiwxMTEsMTE1LAorICAgIDQ2LDExMiw5NywxMTYsMTA0LDQ2LDEwNSwxMTUsMTAwLDEwNSwxMTQsNDYsMTA1LDAsNjQsMCwKKyAgICAwLDQxLDMsMTE0LDMsMCwwLDAsMjE4LDYsMTAzLDEwMSwxMTYsOTksMTE5LDEwMCwKKyAgICAxMTQsNDMsMCwwLDAsNDEsMSwxMTQsMzUsMCwwLDAsMTE0LDQsMCwwLAorICAgIDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDExLDk1LDExMiw5NywKKyAgICAxMTYsMTA0LDk1LDEwNSwxMTUsMTAwLDEwNSwxMTQsOTIsMCwwLDAsMTE1LDYsMCwwLAorICAgIDAsMCwyLDYsMSwxNSwxLDExNCw0NiwwLDAsMCwxMDUsMTgyLDEsMCwKKyAgICAwLDk5LDMsMCwwLDAsMCwwLDAsMCw2LDAsMCwwLDE3LDAsCisgICAgMCwwLDY3LDAsMCwwLDExNSwxOTIsMCwwLDAsMTAwLDEsMCwxMDYsMCwKKyAgICAwLDEyNCwwLDAsMTE2LDEsMCwxMjQsMCwwLDEzMSwxLDAsMTMxLDIsMCwKKyAgICAxMjUsMywwLDExNiwyLDAsMTA2LDMsMCwxMjQsMywwLDExNiwyLDAsMTA2LAorICAgIDQsMCwxMTYsMiwwLDEwNiw1LDAsNjYsMTE2LDIsMCwxMDYsNiwwLDY2LAorICAgIDEyNCwyLDAsMTAwLDIsMCw2NCwxMzEsMywwLDEyNSw0LDAsMTIxLDYwLDAsCisgICAgMTE2LDcsMCwxMDYsOCwwLDEyNCw0LDAsMTAwLDMsMCwxMzEsMiwwLDE0MywKKyAgICAyMCwwLDEyNSw1LDAsMTI0LDUsMCwxMDYsOSwwLDEyNCwxLDAsMTMxLDEsCisgICAgMCwxLDg3LDEwMCw0LDAsODEsODgsMTE2LDIsMCwxMDYsMTAsMCwxMjQsMywKKyAgICAwLDEyNCwwLDAsMTMxLDIsMCwxLDg3LDExMCw1OSwwLDQsMTE2LDExLDAsCisgICAgMTA3LDEwLDAsMTE0LDE4NywwLDEsMSwxLDEyMSwxNywwLDExNiwyLDAsMTA2LAorICAgIDEyLDAsMTI0LDMsMCwxMzEsMSwwLDEsODcsMTEwLDE4LDAsNCwxMTYsMTEsCisgICAgMCwxMDcsMTAsMCwxMTQsMTc5LDAsMSwxLDEsODksMTEwLDEsMCw4OCwxMzAsCisgICAgMCwwLDg5LDExMCwxLDAsODgsMTAwLDQsMCw4Myw0MSw1LDEyMiwxNjIsNjYsCisgICAgMTAxLDExNSwxMTYsNDUsMTAxLDEwMiwxMDIsMTExLDExNCwxMTYsMzIsMTAyLDExNywxMTAsOTksMTE2LAorICAgIDEwNSwxMTEsMTEwLDMyLDExNiwxMTEsMzIsMTE5LDExNCwxMDUsMTE2LDEwMSwzMiwxMDAsOTcsMTE2LAorICAgIDk3LDMyLDExNiwxMTEsMzIsOTcsMzIsMTEyLDk3LDExNiwxMDQsMzIsOTcsMTE2LDExMSwxMDksCisgICAgMTA1LDk5LDk3LDEwOCwxMDgsMTIxLDQ2LDEwLDMyLDMyLDMyLDMyLDY2LDEwMSwzMiwxMTIsCisgICAgMTE0LDEwMSwxMTIsOTcsMTE0LDEwMSwxMDAsMzIsMTE2LDExMSwzMiwxMDQsOTcsMTEwLDEwMCwxMDgsCisgICAgMTAxLDMyLDk3LDMyLDcwLDEwNSwxMDgsMTAxLDY5LDEyMCwxMDUsMTE1LDExNiwxMTUsNjksMTE0LAorICAgIDExNCwxMTEsMTE0LDMyLDEwNSwxMDIsMzIsOTksMTExLDExMCw5OSwxMTcsMTE0LDExNCwxMDEsMTEwLAorICAgIDExNiwzMiwxMTksMTE0LDEwNSwxMTYsMTA1LDExMCwxMDMsMzIsMTExLDEwMiwzMiwxMTYsMTA0LDEwMSwKKyAgICAxMCwzMiwzMiwzMiwzMiwxMTYsMTAxLDEwOSwxMTIsMTExLDExNCw5NywxMTQsMTIxLDMyLDEwMiwKKyAgICAxMDUsMTA4LDEwMSwzMiwxMDUsMTE1LDMyLDk3LDExNiwxMTYsMTAxLDEwOSwxMTIsMTE2LDEwMSwxMDAsCisgICAgNDYsMTIyLDUsMTIzLDEyNSw0NiwxMjMsMTI1LDEwNSwxODIsMSwwLDAsOTAsMiwxMTksCisgICAgOTgsNzgsNDEsMTMsMjE4LDYsMTAyLDExMSwxMTQsMTA5LDk3LDExNiwyMTgsMiwxMDUsMTAwLAorICAgIDExNCwzLDAsMCwwLDkwLDQsMTExLDExMiwxMDEsMTEwLDkwLDYsNzksOTUsNjksCisgICAgODgsNjcsNzYsOTAsNyw3OSw5NSw2Nyw4Miw2OSw2NSw4NCw5MCw4LDc5LDk1LAorICAgIDg3LDgyLDc5LDc4LDc2LDg5LDIxOCwzLDk1LDEwNSwxMTEsMjE4LDYsNzAsMTA1LDEwOCwKKyAgICAxMDEsNzMsNzksMjE4LDUsMTE5LDExNCwxMDUsMTE2LDEwMSwyMTgsNywxMTQsMTAxLDExMiwxMDgsCisgICAgOTcsOTksMTAxLDExNCw0MCwwLDAsMCw5MCw2LDExNywxMTAsMTA4LDEwNSwxMTAsMTA3LAorICAgIDQxLDYsMTE0LDM1LDAsMCwwLDIxOCw0LDEwMCw5NywxMTYsOTcsMTE0LDQyLDAsCisgICAgMCwwLDkwLDgsMTEyLDk3LDExNiwxMDQsOTUsMTE2LDEwOSwxMTIsOTAsMiwxMDIsMTAwLAorICAgIDIxOCw0LDEwMiwxMDUsMTA4LDEwMSwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwKKyAgICAxMTQsNSwwLDAsMCwyMTgsMTMsOTUsMTE5LDExNCwxMDUsMTE2LDEwMSw5NSw5NywxMTYsCisgICAgMTExLDEwOSwxMDUsOTksOTksMCwwLDAsMTE1LDI2LDAsMCwwLDAsNSwyNCwKKyAgICAxLDksMSwzMywxLDMsMywyMSwxLDE5LDEsMjAsMSwxMywxLDMsCisgICAgMSwxNywxLDEzLDEsNSwxLDExNCw1NSwwLDAsMCw5OSwyLDAsMCwKKyAgICAwLDAsMCwwLDAsMywwLDAsMCw3LDAsMCwwLDY3LDAsMCwKKyAgICAwLDExNSw5NSwwLDAsMCwxMjAsNjksMCwxMDAsMSwwLDEwMCwyLDAsMTAwLAorICAgIDMsMCwxMDAsNCwwLDEwMyw0LDAsNjgsOTMsNDksMCwxMjUsMiwwLDExNiwKKyAgICAwLDAsMTI0LDEsMCwxMjQsMiwwLDEzMSwyLDAsMTE0LDE5LDAsMTE2LDEsCisgICAgMCwxMjQsMCwwLDEyNCwyLDAsMTE2LDIsMCwxMjQsMSwwLDEyNCwyLDAsCisgICAgMTMxLDIsMCwxMzEsMywwLDEsMTEzLDE5LDAsMTEzLDE5LDAsODcsMTI0LDAsCisgICAgMCwxMDYsMywwLDEwNiw0LDAsMTI0LDEsMCwxMDYsMywwLDEzMSwxLDAsCisgICAgMSwxMDAsNSwwLDgzLDQxLDYsMTIyLDQ3LDgzLDEwNSwxMDksMTEyLDEwOCwxMDEsMzIsCisgICAgMTE1LDExNyw5OCwxMTUsMTE2LDEwNSwxMTYsMTE3LDExNiwxMDEsMzIsMTAyLDExMSwxMTQsMzIsMTAyLAorICAgIDExNywxMTAsOTksMTE2LDExMSwxMTEsMTA4LDExNSw0NiwxMTcsMTEyLDEwMCw5NywxMTYsMTAxLDk1LAorICAgIDExOSwxMTQsOTcsMTEyLDExMiwxMDEsMTE0LDQ2LDIxOCwxMCw5NSw5NSwxMDksMTExLDEwMCwxMTcsCisgICAgMTA4LDEwMSw5NSw5NSwyMTgsOCw5NSw5NSwxMTAsOTcsMTA5LDEwMSw5NSw5NSwyMTgsMTIsCisgICAgOTUsOTUsMTEzLDExNyw5NywxMDgsMTEwLDk3LDEwOSwxMDEsOTUsOTUsMjE4LDcsOTUsOTUsCisgICAgMTAwLDExMSw5OSw5NSw5NSw3OCw0MSw1LDIxOCw3LDEwNCw5NywxMTUsOTcsMTE2LDExNiwKKyAgICAxMTQsMjE4LDcsMTE1LDEwMSwxMTYsOTcsMTE2LDExNiwxMTQsMjE4LDcsMTAzLDEwMSwxMTYsOTcsCisgICAgMTE2LDExNiwxMTQsMjE4LDgsOTUsOTUsMTAwLDEwNSw5OSwxMTYsOTUsOTUsMjE4LDYsMTE3LAorICAgIDExMiwxMDAsOTcsMTE2LDEwMSw0MSwzLDkwLDMsMTEwLDEwMSwxMTksOTAsMywxMTEsMTA4LAorICAgIDEwMCwxMTQsNTIsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsCisgICAgMTE0LDUsMCwwLDAsMjE4LDUsOTUsMTE5LDExNCw5NywxMTIsMTIxLDAsMCwwLAorICAgIDExNSw4LDAsMCwwLDAsMiwyNSwxLDE1LDEsMzIsMSwxMTQsNjUsMCwKKyAgICAwLDAsOTksMSwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMiwKKyAgICAwLDAsMCw2NywwLDAsMCwxMTUsMTYsMCwwLDAsMTE2LDAsMCwxMTYsCisgICAgMSwwLDEzMSwxLDAsMTI0LDAsMCwxMzEsMSwwLDgzLDQxLDEsNzgsNDEsCisgICAgMiwyMTgsNCwxMTYsMTIxLDExMiwxMDEsMTE0LDcsMCwwLDAsNDEsMSwyMTgsNCwKKyAgICAxMTAsOTcsMTA5LDEwMSwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwKKyAgICAwLDAsMCwyMTgsMTEsOTUsMTEwLDEwMSwxMTksOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsCisgICAgMTI5LDAsMCwwLDExNSwyLDAsMCwwLDAsMSwxMTQsNjgsMCwwLDAsCisgICAgOTksMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMiwwLDAsCisgICAgMCw2NCwwLDAsMCwxMTUsNTgsMCwwLDAsMTAxLDAsMCw5MCwxLDAsCiAgICAgMTAwLDAsMCw5MCwyLDAsMTAwLDEsMCw5MCwzLDAsMTAwLDIsMCwxMDAsCiAgICAgMywwLDEzMiwwLDAsOTAsNCwwLDEwMCw0LDAsMTAwLDUsMCwxMzIsMCwKICAgICAwLDkwLDUsMCwxMDAsNiwwLDEwMCw3LDAsMTMyLDAsMCw5MCw2LDAsCi0gICAgMTAwLDgsMCwxMDAsOSwwLDEzMiwwLDAsOTAsNywwLDEwMCwxMCwwLDEwMCwKLSAgICAxMSwwLDEzMiwwLDAsOTAsOCwwLDEwMCwxMiwwLDgzLDQwLDEzLDAsMCwKLSAgICAwLDExNywxMSwwLDAsMCw5NSw3NywxMTEsMTAwLDExNywxMDgsMTAxLDc2LDExMSw5OSwKLSAgICAxMDcsMTE3LDE2OSwwLDAsMCw2NSwzMiwxMTQsMTAxLDk5LDExNywxMTQsMTE1LDEwNSwxMTgsCi0gICAgMTAxLDMyLDEwOCwxMTEsOTksMTA3LDMyLDEwNSwxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LAotICAgIDk3LDExNiwxMDUsMTExLDExMCwzMiwxMTksMTA0LDEwNSw5OSwxMDQsMzIsMTA1LDExNSwzMiw5NywKLSAgICA5OCwxMDgsMTAxLDMyLDExNiwxMTEsMzIsMTAwLDEwMSwxMTYsMTAxLDk5LDExNiwzMiwxMDAsMTAxLAotICAgIDk3LDEwMCwxMDgsMTExLDk5LDEwNywxMTUsMTAsMzIsMzIsMzIsMzIsNDAsMTAxLDQ2LDEwMywKLSAgICA0NiwzMiwxMTYsMTA0LDExNCwxMDEsOTcsMTAwLDMyLDQ5LDMyLDExNiwxMTQsMTIxLDEwNSwxMTAsCi0gICAgMTAzLDMyLDExNiwxMTEsMzIsMTE2LDk3LDEwNywxMDEsMzIsMTA4LDExMSw5OSwxMDcsMTE1LDMyLAotICAgIDY1LDMyLDExNiwxMDQsMTAxLDExMCwzMiw2Niw0NCwzMiw5NywxMTAsMTAwLDMyLDExNiwxMDQsCi0gICAgMTE0LDEwMSw5NywxMDAsMzIsNTAsMzIsMTE2LDExNCwxMjEsMTA1LDExMCwxMDMsMzIsMTE2LDExMSwKLSAgICAxMCwzMiwzMiwzMiwzMiwxMTYsOTcsMTA3LDEwMSwzMiwxMDgsMTExLDk5LDEwNywxMTUsMzIsCi0gICAgNjYsMzIsMTE2LDEwNCwxMDEsMTEwLDMyLDY1LDQxLDQ2LDEwLDMyLDMyLDMyLDMyLDk5LAotICAgIDIsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDIsMCwwLDAsCi0gICAgNjcsMCwwLDAsMTE1LDcwLDAsMCwwLDExNiwwLDAsMTA2LDEsMCwxMzEsCi0gICAgMCwwLDEyNCwwLDAsOTUsMiwwLDExNiwwLDAsMTA2LDEsMCwxMzEsMCwKLSAgICAwLDEyNCwwLDAsOTUsMywwLDEyNCwxLDAsMTI0LDAsMCw5NSw0LDAsCi0gICAgMTAwLDAsMCwxMjQsMCwwLDk1LDYsMCwxMDAsMSwwLDEyNCwwLDAsOTUsCi0gICAgNywwLDEwMCwxLDAsMTI0LDAsMCw5NSw4LDAsMTAwLDAsMCw4Myw0MCwKLSAgICAyLDAsMCwwLDc4LDEwNSwwLDAsMCwwLDQwLDksMCwwLDAsMTE3LAotICAgIDcsMCwwLDAsOTUsMTE2LDEwNCwxMTQsMTAxLDk3LDEwMCwxMTcsMTMsMCwwLDAsCi0gICAgOTcsMTA4LDEwOCwxMTEsOTksOTcsMTE2LDEwMSw5NSwxMDgsMTExLDk5LDEwNywxMTcsNCwwLAotICAgIDAsMCwxMDgsMTExLDk5LDEwNywxMTcsNiwwLDAsMCwxMTksOTcsMTA3LDEwMSwxMTcsCi0gICAgMTEyLDExNyw0LDAsMCwwLDExMCw5NywxMDksMTAxLDExNyw0LDAsMCwwLDc4LAotICAgIDExMSwxMTAsMTAxLDExNyw1LDAsMCwwLDExMSwxMTksMTEwLDEwMSwxMTQsMTE3LDUsMCwKLSAgICAwLDAsOTksMTExLDExNywxMTAsMTE2LDExNyw3LDAsMCwwLDExOSw5NywxMDUsMTE2LAotICAgIDEwMSwxMTQsMTE1LDQwLDIsMCwwLDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsCi0gICAgMTAyLDExNyw0LDAsMCwwLDExMCw5NywxMDksMTAxLDQwLDAsMCwwLDAsNDAsCi0gICAgMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsCi0gICAgMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwKLSAgICAxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDgsMCwwLDAsOTUsOTUsMTA1LDExMCwxMDUsCi0gICAgMTE2LDk1LDk1LDE4MSwwLDAsMCwxMTUsMTIsMCwwLDAsMCwxLDE1LDEsCi0gICAgMTUsMSw5LDEsOSwxLDksMSwxMTcsMjAsMCwwLDAsOTUsNzcsMTExLAotICAgIDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsOTksMTA3LDQ2LDk1LDk1LDEwNSwxMTAsMTA1LDExNiw5NSwKLSAgICA5NSw5OSwxLDAsMCwwLDAsMCwwLDAsNCwwLDAsMCwyLDAsCi0gICAgMCwwLDY3LDAsMCwwLDExNSw4NywwLDAsMCwxMTYsMCwwLDEwNiwxLAotICAgIDAsMTMxLDAsMCwxMjUsMSwwLDEyNCwwLDAsMTA2LDIsMCwxMjUsMiwwLAotICAgIDEyMCw1OSwwLDExNiwzLDAsMTA2LDQsMCwxMjQsMiwwLDEzMSwxLDAsMTI1LAotICAgIDMsMCwxMjQsMywwLDEwMCwwLDAsMTA3LDgsMCwxMTQsNTUsMCwxMDAsMSwKLSAgICAwLDgzLDEyNCwzLDAsMTA2LDIsMCwxMjUsMiwwLDEyNCwyLDAsMTI0LDEsCi0gICAgMCwxMDcsMiwwLDExNCwyNCwwLDEwMCwyLDAsODMsMTEzLDI0LDAsMTAwLDAsCi0gICAgMCw4Myw0MCwzLDAsMCwwLDc4LDcwLDg0LDQwLDgsMCwwLDAsMTE3LAotICAgIDcsMCwwLDAsOTUsMTE2LDEwNCwxMTQsMTAxLDk3LDEwMCwxMTcsOSwwLDAsMCwKLSAgICAxMDMsMTAxLDExNiw5NSwxMDUsMTAwLDEwMSwxMTAsMTE2LDExNyw1LDAsMCwwLDExMSwxMTksCi0gICAgMTEwLDEwMSwxMTQsMTE3LDEyLDAsMCwwLDk1LDk4LDEwOCwxMTEsOTksMTA3LDEwNSwxMTAsCi0gICAgMTAzLDk1LDExMSwxMTAsMTE3LDMsMCwwLDAsMTAzLDEwMSwxMTYsMTE3LDQsMCwwLAotICAgIDAsNzgsMTExLDExMCwxMDEsMTE3LDUsMCwwLDAsNzAsOTcsMTA4LDExNSwxMDEsMTE3LAotICAgIDQsMCwwLDAsODQsMTE0LDExNywxMDEsNDAsNCwwLDAsMCwxMTcsNCwwLAotICAgIDAsMCwxMTUsMTAxLDEwOCwxMDIsMTE3LDIsMCwwLDAsMTA5LDEwMSwxMTcsMywwLAotICAgIDAsMCwxMTYsMTA1LDEwMCwxMTcsNCwwLDAsMCwxMDgsMTExLDk5LDEwNyw0MCwwLAotICAgIDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsCi0gICAgMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsCi0gICAgOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxMiwwLDAsMCwxMDQsCi0gICAgOTcsMTE1LDk1LDEwMCwxMDEsOTcsMTAwLDEwOCwxMTEsOTksMTA3LDE4OSwwLDAsMCwxMTUsCi0gICAgMTgsMCwwLDAsMCwyLDEyLDEsOSwxLDMsMSwxNSwxLDEyLDEsCi0gICAgNCwxLDksMSwxMiwxLDExNywyNCwwLDAsMCw5NSw3NywxMTEsMTAwLDExNywKLSAgICAxMDgsMTAxLDc2LDExMSw5OSwxMDcsNDYsMTA0LDk3LDExNSw5NSwxMDAsMTAxLDk3LDEwMCwxMDgsCi0gICAgMTExLDk5LDEwNyw5OSwxLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwKLSAgICAxNywwLDAsMCw2NywwLDAsMCwxMTUsMjE0LDAsMCwwLDExNiwwLDAsCi0gICAgMTA2LDEsMCwxMzEsMCwwLDEyNSwxLDAsMTI0LDAsMCwxMTYsMiwwLDEyNCwKLSAgICAxLDAsNjAsMTIyLDE3NywwLDEyMCwxNzAsMCwxMjQsMCwwLDEwNiwzLDAsMTQzLAotICAgIDEzMCwwLDEsMTI0LDAsMCwxMDYsNCwwLDEwMCwxLDAsMTA3LDIsMCwxMTUsCi0gICAgNjgsMCwxMjQsMCwwLDEwNiw1LDAsMTI0LDEsMCwxMDcsMiwwLDExNCw5NiwKLSAgICAwLDEyNCwxLDAsMTI0LDAsMCw5NSw1LDAsMTI0LDAsMCw0LDEwNiw0LAotICAgIDAsMTAwLDIsMCw1NSwyLDk1LDQsMCwxMDAsNSwwLDgzLDEyNCwwLDAsCi0gICAgMTA2LDcsMCwxMzEsMCwwLDExNCwxMjcsMCwxMTYsOCwwLDEwMCwzLDAsMTI0LAotICAgIDAsMCwyMiwxMzEsMSwwLDEzMCwxLDAsMTEwLDAsMCwxMjQsMCwwLDEwNiwKLSAgICA5LDAsMTA2LDEwLDAsMTAwLDYsMCwxMzEsMSwwLDExNCwxNjMsMCwxMjQsMCwKLSAgICAwLDQsMTA2LDEyLDAsMTAwLDIsMCw1NSwyLDk1LDEyLDAsMTEwLDAsMCwKLSAgICA4NywxMDAsNCwwLDgxLDg4LDEyNCwwLDAsMTA2LDksMCwxMDYsMTAsMCwxMzEsCi0gICAgMCwwLDEsMTI0LDAsMCwxMDYsOSwwLDEwNiwxMywwLDEzMSwwLDAsMSwKLSAgICAxMTMsMjgsMCw4NywxMDAsNCwwLDExNiwyLDAsMTI0LDEsMCw2MSw4OCwxMDAsCi0gICAgNCwwLDgzLDQwLDcsMCwwLDAsMTE3LDE4NSwwLDAsMCwxMCwzMiwzMiwKLSAgICAzMiwzMiwzMiwzMiwzMiwzMiw2NSw5OSwxMTMsMTE3LDEwNSwxMTQsMTAxLDMyLDExNiwxMDQsCi0gICAgMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEwOCwxMTEsOTksMTA3LDQ2LDMyLDMyLAotICAgIDczLDEwMiwzMiw5NywzMiwxMTIsMTExLDExNiwxMDEsMTEwLDExNiwxMDUsOTcsMTA4LDMyLDEwMCwKLSAgICAxMDEsOTcsMTAwLDEwOCwxMTEsOTksMTA3LDMyLDEwNSwxMTUsMzIsMTAwLDEwMSwxMTYsMTAxLDk5LAotICAgIDExNiwxMDEsMTAwLDQ0LDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDk3LDMyLDk1LAotICAgIDY4LDEwMSw5NywxMDAsMTA4LDExMSw5OSwxMDcsNjksMTE0LDExNCwxMTEsMTE0LDMyLDEwNSwxMTUsCi0gICAgMzIsMTE0LDk3LDEwNSwxMTUsMTAxLDEwMCw0NiwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwKLSAgICAzMiw3OSwxMTYsMTA0LDEwMSwxMTQsMTE5LDEwNSwxMTUsMTAxLDQ0LDMyLDExNiwxMDQsMTAxLDMyLAotICAgIDEwOCwxMTEsOTksMTA3LDMyLDEwNSwxMTUsMzIsOTcsMTA4LDExOSw5NywxMjEsMTE1LDMyLDk3LAotICAgIDk5LDExMywxMTcsMTA1LDExNCwxMDEsMTAwLDMyLDk3LDExMCwxMDAsMzIsODQsMTE0LDExNywxMDEsCi0gICAgMzIsMTA1LDExNSwzMiwxMTQsMTAxLDExNiwxMTcsMTE0LDExMCwxMDEsMTAwLDQ2LDEwLDMyLDMyLAotICAgIDMyLDMyLDMyLDMyLDMyLDMyLDEwNSwwLDAsMCwwLDEwNSwxLDAsMCwwLAotICAgIDExNywyMywwLDAsMCwxMDAsMTAxLDk3LDEwMCwxMDgsMTExLDk5LDEwNywzMiwxMDAsMTAxLAotICAgIDExNiwxMDEsOTksMTE2LDEwMSwxMDAsMzIsOTgsMTIxLDMyLDM3LDExNCw3OCw4NCw3MCw0MCwKLSAgICAxNCwwLDAsMCwxMTcsNywwLDAsMCw5NSwxMTYsMTA0LDExNCwxMDEsOTcsMTAwLAotICAgIDExNyw5LDAsMCwwLDEwMywxMDEsMTE2LDk1LDEwNSwxMDAsMTAxLDExMCwxMTYsMTE3LDEyLAotICAgIDAsMCwwLDk1LDk4LDEwOCwxMTEsOTksMTA3LDEwNSwxMTAsMTAzLDk1LDExMSwxMTAsMTE3LAotICAgIDQsMCwwLDAsMTA4LDExMSw5OSwxMDcsMTE3LDUsMCwwLDAsOTksMTExLDExNywKLSAgICAxMTAsMTE2LDExNyw1LDAsMCwwLDExMSwxMTksMTEwLDEwMSwxMTQsMTE3LDQsMCwwLAotICAgIDAsODQsMTE0LDExNywxMDEsMTE3LDEyLDAsMCwwLDEwNCw5NywxMTUsOTUsMTAwLDEwMSwKLSAgICA5NywxMDAsMTA4LDExMSw5OSwxMDcsMTE3LDE0LDAsMCwwLDk1LDY4LDEwMSw5NywxMDAsCi0gICAgMTA4LDExMSw5OSwxMDcsNjksMTE0LDExNCwxMTEsMTE0LDExNyw2LDAsMCwwLDExOSw5NywKLSAgICAxMDcsMTAxLDExNywxMTIsMTE3LDcsMCwwLDAsOTcsOTksMTEzLDExNywxMDUsMTE0LDEwMSwKLSAgICAxMTcsNSwwLDAsMCw3MCw5NywxMDgsMTE1LDEwMSwxMTcsNywwLDAsMCwxMTksCi0gICAgOTcsMTA1LDExNiwxMDEsMTE0LDExNSwxMTcsNywwLDAsMCwxMTQsMTAxLDEwOCwxMDEsOTcsCi0gICAgMTE1LDEwMSw0MCwyLDAsMCwwLDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LDEwMiwKLSAgICAxMTcsMywwLDAsMCwxMTYsMTA1LDEwMCw0MCwwLDAsMCwwLDQwLDAsMCwKLSAgICAwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwKLSAgICAxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwKLSAgICAxMTQsOTcsMTEyLDYyLDExNyw3LDAsMCwwLDk3LDk5LDExMywxMTcsMTA1LDExNCwxMDEsCi0gICAgMjAxLDAsMCwwLDExNSwzMiwwLDAsMCwwLDYsMTIsMSwxMCwxLDMsCi0gICAgMSwzLDEsMTAsMSwzMCwxLDksMSwxNSwxLDQsMSwxMiwxLDE5LAotICAgIDEsMTgsMSwyNCwyLDEzLDEsMjAsMiwxMTcsMTksMCwwLDAsOTUsNzcsCi0gICAgMTExLDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsOTksMTA3LDQ2LDk3LDk5LDExMywxMTcsMTA1LDExNCwKLSAgICAxMDEsOTksMSwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMTAsMCwKLSAgICAwLDAsNjcsMCwwLDAsMTE1LDE2NSwwLDAsMCwxMTYsMCwwLDEwNiwxLAotICAgIDAsMTMxLDAsMCwxMjUsMSwwLDEyNCwwLDAsMTA2LDIsMCwxNDMsMTM4LDAsCi0gICAgMSwxMjQsMCwwLDEwNiwzLDAsMTI0LDEsMCwxMDcsMywwLDExNCw1MiwwLAotICAgIDExNiw0LDAsMTAwLDEsMCwxMzEsMSwwLDEzMCwxLDAsMTEwLDAsMCwxMjQsCi0gICAgMCwwLDEwNiw1LDAsMTAwLDIsMCwxMDcsNCwwLDExNSw3MywwLDExNiw2LAotICAgIDAsMTMwLDEsMCwxMjQsMCwwLDQsMTA2LDUsMCwxMDAsMywwLDU2LDIsCi0gICAgOTUsNSwwLDEyNCwwLDAsMTA2LDUsMCwxMDAsMiwwLDEwNywyLDAsMTE0LAotICAgIDE1NSwwLDEwMCwwLDAsMTI0LDAsMCw5NSwzLDAsMTI0LDAsMCwxMDYsOCwKLSAgICAwLDExNCwxNTUsMCwxMjQsMCwwLDQsMTA2LDgsMCwxMDAsMywwLDU2LDIsCi0gICAgOTUsOCwwLDEyNCwwLDAsMTA2LDksMCwxMDYsMTAsMCwxMzEsMCwwLDEsCi0gICAgMTEzLDE1NSwwLDExMCwwLDAsODcsMTAwLDAsMCw4MSw4OCwxMDAsMCwwLDgzLAotICAgIDQwLDQsMCwwLDAsNzgsMTE3LDMxLDAsMCwwLDk5LDk3LDExMCwxMTAsMTExLAotICAgIDExNiwzMiwxMTQsMTAxLDEwOCwxMDEsOTcsMTE1LDEwMSwzMiwxMTcsMTEwLDQ1LDk3LDk5LDExMywKLSAgICAxMTcsMTA1LDExNCwxMDEsMTAwLDMyLDEwOCwxMTEsOTksMTA3LDEwNSwwLDAsMCwwLDEwNSwKLSAgICAxLDAsMCwwLDQwLDExLDAsMCwwLDExNyw3LDAsMCwwLDk1LDExNiwKLSAgICAxMDQsMTE0LDEwMSw5NywxMDAsMTE3LDksMCwwLDAsMTAzLDEwMSwxMTYsOTUsMTA1LDEwMCwKLSAgICAxMDEsMTEwLDExNiwxMTcsNCwwLDAsMCwxMDgsMTExLDk5LDEwNywxMTcsNSwwLDAsCi0gICAgMCwxMTEsMTE5LDExMCwxMDEsMTE0LDExNywxMiwwLDAsMCw4MiwxMTcsMTEwLDExNiwxMDUsCi0gICAgMTA5LDEwMSw2OSwxMTQsMTE0LDExMSwxMTQsMTE3LDUsMCwwLDAsOTksMTExLDExNywxMTAsCi0gICAgMTE2LDExNywxNCwwLDAsMCw2NSwxMTUsMTE1LDEwMSwxMTQsMTE2LDEwNSwxMTEsMTEwLDY5LAotICAgIDExNCwxMTQsMTExLDExNCwxMTcsNCwwLDAsMCw3OCwxMTEsMTEwLDEwMSwxMTcsNywwLAotICAgIDAsMCwxMTksOTcsMTA1LDExNiwxMDEsMTE0LDExNSwxMTcsNiwwLDAsMCwxMTksOTcsCi0gICAgMTA3LDEwMSwxMTcsMTEyLDExNyw3LDAsMCwwLDExNCwxMDEsMTA4LDEwMSw5NywxMTUsMTAxLAotICAgIDQwLDIsMCwwLDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDExNywzLAotICAgIDAsMCwwLDExNiwxMDUsMTAwLDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwKLSAgICAxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsCi0gICAgMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywKLSAgICAxMTIsNjIsMTE3LDcsMCwwLDAsMTE0LDEwMSwxMDgsMTAxLDk3LDExNSwxMDEsMjI2LDAsCi0gICAgMCwwLDExNSwyMiwwLDAsMCwwLDEsMTIsMSwxMCwxLDE1LDEsMTUsCi0gICAgMSwyMSwxLDE1LDEsMTUsMSw5LDEsOSwxLDE1LDEsMTE3LDE5LDAsCi0gICAgMCwwLDk1LDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsNzYsMTExLDk5LDEwNyw0NiwxMTQsMTAxLAotICAgIDEwOCwxMDEsOTcsMTE1LDEwMSw5OSwxLDAsMCwwLDAsMCwwLDAsMSwwLAotICAgIDAsMCw0LDAsMCwwLDY3LDAsMCwwLDExNSwyMywwLDAsMCwxMDAsCi0gICAgMSwwLDEyNCwwLDAsMTA2LDAsMCwxMTYsMSwwLDEyNCwwLDAsMTMxLDEsCi0gICAgMCwxMDIsMiwwLDIyLDgzLDQwLDIsMCwwLDAsNzgsMTE3LDIxLDAsMCwKLSAgICAwLDk1LDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsNzYsMTExLDk5LDEwNyw0MCwzNywxMTQsNDEsCi0gICAgMzIsOTcsMTE2LDMyLDM3LDEwMCw0MCwyLDAsMCwwLDExNyw0LDAsMCwwLAotICAgIDExMCw5NywxMDksMTAxLDExNywyLDAsMCwwLDEwNSwxMDAsNDAsMSwwLDAsMCwKLSAgICAxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwxMDIsNDAsMCwwLDAsMCw0MCwwLAotICAgIDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwKLSAgICAxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwKLSAgICAxMTYsMTE0LDk3LDExMiw2MiwxMTcsOCwwLDAsMCw5NSw5NSwxMTQsMTAxLDExMiwxMTQsCi0gICAgOTUsOTUsMjM5LDAsMCwwLDExNSwyLDAsMCwwLDAsMSwxMTcsMjAsMCwKLSAgICAwLDAsOTUsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsOTksMTA3LDQ2LDk1LDk1LAotICAgIDExNCwxMDEsMTEyLDExNCw5NSw5NSw3OCw0MCw5LDAsMCwwLDExNyw4LDAsMCwKLSAgICAwLDk1LDk1LDExMCw5NywxMDksMTAxLDk1LDk1LDExNywxMCwwLDAsMCw5NSw5NSwKLSAgICAxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSw5NSwxMTcsMTIsMCwwLDAsOTUsOTUsMTEzLAotICAgIDExNyw5NywxMDgsMTEwLDk3LDEwOSwxMDEsOTUsOTUsMTE3LDcsMCwwLDAsOTUsOTUsCi0gICAgMTAwLDExMSw5OSw5NSw5NSwxMTcsOCwwLDAsMCw5NSw5NSwxMDUsMTEwLDEwNSwxMTYsCi0gICAgOTUsOTUsMTE3LDEyLDAsMCwwLDEwNCw5NywxMTUsOTUsMTAwLDEwMSw5NywxMDAsMTA4LAotICAgIDExMSw5OSwxMDcsMTE3LDcsMCwwLDAsOTcsOTksMTEzLDExNywxMDUsMTE0LDEwMSwxMTcsCi0gICAgNywwLDAsMCwxMTQsMTAxLDEwOCwxMDEsOTcsMTE1LDEwMSwxMTcsOCwwLDAsMCwKLSAgICA5NSw5NSwxMTQsMTAxLDExMiwxMTQsOTUsOTUsNDAsMSwwLDAsMCwxMTcsMTAsMCwKLSAgICAwLDAsOTUsOTUsMTA4LDExMSw5OSw5NywxMDgsMTE1LDk1LDk1LDQwLDAsMCwwLAotICAgIDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLAotICAgIDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsCi0gICAgMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDExLDAsMCwwLDk1LDc3LDExMSwKLSAgICAxMDAsMTE3LDEwOCwxMDEsNzYsMTExLDk5LDEwNywxNzUsMCwwLDAsMTE1LDEyLDAsMCwKLSAgICAwLDE2LDQsNiwyLDEyLDgsMTIsMTIsMTIsMjUsMTIsMTMsMTE3LDExLDAsCi0gICAgMCwwLDk1LDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsNzYsMTExLDk5LDEwNyw5OSwxLDAsCi0gICAgMCwwLDAsMCwwLDAsMSwwLDAsMCwyLDAsMCwwLDY2LDAsCi0gICAgMCwwLDExNSw3NCwwLDAsMCwxMjQsMCwwLDY5LDEwMSwwLDAsOTAsMSwKLSAgICAwLDEwMCwwLDAsOTAsMiwwLDEwMCwxLDAsOTAsMywwLDEwMCwyLDAsCi0gICAgMTAwLDMsMCwxMzIsMCwwLDkwLDQsMCwxMDAsNCwwLDEwMCw1LDAsMTMyLAotICAgIDAsMCw5MCw1LDAsMTAwLDYsMCwxMDAsNywwLDEzMiwwLDAsOTAsNiwKLSAgICAwLDEwMCw4LDAsMTAwLDksMCwxMzIsMCwwLDkwLDcsMCwxMDAsMTAsMCwKLSAgICA4Myw0MCwxMSwwLDAsMCwxMTcsMTYsMCwwLDAsOTUsNjgsMTE3LDEwOSwxMDksCi0gICAgMTIxLDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsNzYsMTExLDk5LDEwNywxMTcsODYsMCwwLDAsCi0gICAgNjUsMzIsMTE1LDEwNSwxMDksMTEyLDEwOCwxMDEsMzIsOTUsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSwKLSAgICA3NiwxMTEsOTksMTA3LDMyLDEwMSwxMTMsMTE3LDEwNSwxMTgsOTcsMTA4LDEwMSwxMTAsMTE2LDMyLAotICAgIDEwMiwxMTEsMTE0LDMyLDgwLDEyMSwxMTYsMTA0LDExMSwxMTAsMzIsOTgsMTE3LDEwNSwxMDgsMTAwLAotICAgIDExNSwzMiwxMTksMTA1LDExNiwxMDQsMTExLDExNywxMTYsMTAsMzIsMzIsMzIsMzIsMTA5LDExNywKLSAgICAxMDgsMTE2LDEwNSw0NSwxMTYsMTA0LDExNCwxMDEsOTcsMTAwLDEwNSwxMTAsMTAzLDMyLDExNSwxMTcsCi0gICAgMTEyLDExMiwxMTEsMTE0LDExNiw0Niw5OSwyLDAsMCwwLDAsMCwwLDAsMiwKKyAgICAxMDAsOCwwLDgzLDQxLDksMjE4LDEzLDk1LDc3LDk3LDExMCw5NywxMDMsMTAxLDgyLAorICAgIDEwMSwxMDgsMTExLDk3LDEwMCwxMjIsNjMsNzcsOTcsMTEwLDk3LDEwMywxMDEsMTE1LDMyLDExNiwKKyAgICAxMDQsMTAxLDMyLDExMiwxMTEsMTE1LDExNSwxMDUsOTgsMTA4LDEwMSwzMiw5OSwxMDgsMTAxLDk3LAorICAgIDExMCw0NSwxMTcsMTEyLDMyLDExMSwxMDIsMzIsMTE1LDEyMSwxMTUsNDYsMTA5LDExMSwxMDAsMTE3LAorICAgIDEwOCwxMDEsMTE1LDMyLDEwMiwxMTEsMTE0LDMyLDEwOCwxMTEsOTcsMTAwLDk1LDEwOSwxMTEsMTAwLAorICAgIDExNywxMDgsMTAxLDQwLDQxLDQ2LDk5LDIsMCwwLDAsMCwwLDAsMCwyLAorICAgIDAsMCwwLDIsMCwwLDAsNjcsMCwwLDAsMTE1LDEzLDAsMCwwLAorICAgIDEyNCwxLDAsMTI0LDAsMCw5NSwwLDAsMTAwLDAsMCw4Myw0MSwxLDc4LAorICAgIDQxLDEsMjE4LDUsOTUsMTEwLDk3LDEwOSwxMDEsNDEsMiwyMTgsNCwxMTUsMTAxLDEwOCwKKyAgICAxMDIsMTE0LDY3LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLAorICAgIDExNCw1LDAsMCwwLDIxOCw4LDk1LDk1LDEwNSwxMTAsMTA1LDExNiw5NSw5NSwxNDEsCisgICAgMCwwLDAsMTE1LDIsMCwwLDAsMCwxLDEyMiwyMiw5NSw3Nyw5NywxMTAsCisgICAgOTcsMTAzLDEwMSw4MiwxMDEsMTA4LDExMSw5NywxMDAsNDYsOTUsOTUsMTA1LDExMCwxMDUsMTE2LAorICAgIDk1LDk1LDk5LDEsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDIsCisgICAgMCwwLDAsNjcsMCwwLDAsMTE1LDI1LDAsMCwwLDEyNCwwLDAsMTA2LAorICAgIDAsMCwxMTYsMSwwLDEwNiwyLDAsMTA3LDYsMCwxMjQsMCwwLDk1LDMsCisgICAgMCwxMDAsMCwwLDgzLDQxLDEsNzgsNDEsNCwxMTQsNzAsMCwwLDAsMTE0LAorICAgIDcsMCwwLDAsMjE4LDcsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDIxOCwxMCw5NSwKKyAgICAxMDUsMTE1LDk1LDExNCwxMDEsMTA4LDExMSw5NywxMDAsNDEsMSwxMTQsNzEsMCwwLDAsCisgICAgMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LAorICAgIDksOTUsOTUsMTAxLDExMCwxMTYsMTAxLDExNCw5NSw5NSwxNDQsMCwwLDAsMTE1LDIsCisgICAgMCwwLDAsMCwxLDEyMiwyMyw5NSw3Nyw5NywxMTAsOTcsMTAzLDEwMSw4MiwxMDEsCisgICAgMTA4LDExMSw5NywxMDAsNDYsOTUsOTUsMTAxLDExMCwxMTYsMTAxLDExNCw5NSw5NSw5OSwxLAorICAgIDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwxMSwwLDAsMCw3MSwKKyAgICAwLDAsMCwxMTUsODAsMCwwLDAsMTE2LDAsMCwxMDAsMSwwLDEwMCwyLAorICAgIDAsMTMyLDAsMCwxMjQsMSwwLDY4LDEzMSwxLDAsMTMxLDEsMCwxMTQsNzYsCisgICAgMCwxMjQsMCwwLDEwNiwxLDAsMTIsMTE0LDc2LDAsMTIxLDE3LDAsMTE2LDIsCisgICAgMCwxMDYsMywwLDEyNCwwLDAsMTA2LDQsMCw2MSw4NywxMTMsNzYsMCw0LAorICAgIDExNiw1LDAsMTA3LDEwLDAsMTE0LDcyLDAsMSwxLDEsODksMTEzLDc2LDAsCisgICAgODgsMTEwLDAsMCwxMDAsMCwwLDgzLDQxLDMsNzgsOTksMSwwLDAsMCwKKyAgICAwLDAsMCwwLDIsMCwwLDAsMywwLDAsMCwxMTUsMCwwLDAsCisgICAgMTE1LDI3LDAsMCwwLDEyNCwwLDAsOTMsMTcsMCwxMjUsMSwwLDEyNCwxLAorICAgIDAsMTAwLDAsMCwxMDcsOSwwLDg2LDEsMTEzLDMsMCwxMDAsMCwwLDgzLAorICAgIDQxLDEsNzgsMTE0LDQsMCwwLDAsNDEsMiwxMTQsMjIsMCwwLDAsMjE4LAorICAgIDMsOTcsMTE0LDEwMywxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwKKyAgICAwLDAsMCwyNTAsOSw2MCwxMDMsMTAxLDExMCwxMDEsMTIwLDExMiwxMTQsNjIsMTQ4LDAsCisgICAgMCwwLDExNSwyLDAsMCwwLDYsMCwxMjIsNDEsOTUsNzcsOTcsMTEwLDk3LAorICAgIDEwMywxMDEsODIsMTAxLDEwOCwxMTEsOTcsMTAwLDQ2LDk1LDk1LDEwMSwxMjAsMTA1LDExNiw5NSwKKyAgICA5NSw0Niw2MCwxMDgsMTExLDk5LDk3LDEwOCwxMTUsNjIsNDYsNjAsMTAzLDEwMSwxMTAsMTAxLAorICAgIDEyMCwxMTIsMTE0LDYyLDQxLDYsMjE4LDMsOTcsMTEwLDEyMSwxMTQsNzQsMCwwLDAsCisgICAgMTE0LDcsMCwwLDAsMTE0LDczLDAsMCwwLDExNCw3MCwwLDAsMCwyMTgsCisgICAgOCw3NSwxMDEsMTIxLDY5LDExNCwxMTQsMTExLDExNCw0MSwyLDExNCw3MSwwLDAsMCwKKyAgICAyMTgsNCw5NywxMTQsMTAzLDExNSwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwKKyAgICAxMTQsNSwwLDAsMCwyMTgsOCw5NSw5NSwxMDEsMTIwLDEwNSwxMTYsOTUsOTUsMTQ3LAorICAgIDAsMCwwLDExNSwxMCwwLDAsMCwwLDEsMzUsMSwzLDEsMTcsMSwKKyAgICAxMywxLDEyMiwyMiw5NSw3Nyw5NywxMTAsOTcsMTAzLDEwMSw4MiwxMDEsMTA4LDExMSw5NywKKyAgICAxMDAsNDYsOTUsOTUsMTAxLDEyMCwxMDUsMTE2LDk1LDk1LDc4LDQxLDcsMTE0LDU3LDAsCisgICAgMCwwLDExNCw1NiwwLDAsMCwxMTQsNTgsMCwwLDAsMTE0LDU5LDAsMCwKKyAgICAwLDExNCw3MiwwLDAsMCwxMTQsNzUsMCwwLDAsMTE0LDgxLDAsMCwwLAorICAgIDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCwKKyAgICA1LDAsMCwwLDExNCw2OSwwLDAsMCwxMzcsMCwwLDAsMTE1LDgsMCwKKyAgICAwLDAsMTIsMiw2LDIsMTIsMywxMiwzLDExNCw2OSwwLDAsMCw5OSwKKyAgICAwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLAorICAgIDY0LDAsMCwwLDExNSwxNiwwLDAsMCwxMDEsMCwwLDkwLDEsMCwxMDAsCisgICAgMCwwLDkwLDIsMCwxMDAsMSwwLDgzLDQxLDIsMjE4LDE0LDk1LDY4LDEwMSwKKyAgICA5NywxMDAsMTA4LDExMSw5OSwxMDcsNjksMTE0LDExNCwxMTEsMTE0LDc4LDQxLDMsMTE0LDU3LAorICAgIDAsMCwwLDExNCw1NiwwLDAsMCwxMTQsNTgsMCwwLDAsMTE0LDQsMCwKKyAgICAwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLAorICAgIDAsMTE0LDgyLDAsMCwwLDE2MiwwLDAsMCwxMTUsMiwwLDAsMCwxMiwKKyAgICAxLDExNCw4MiwwLDAsMCw5OSwwLDAsMCwwLDAsMCwwLDAsMCwKKyAgICAwLDAsMCwyLDAsMCwwLDY0LDAsMCwwLDExNSw4MiwwLDAsMCwKKyAgICAxMDEsMCwwLDkwLDEsMCwxMDAsMCwwLDkwLDIsMCwxMDAsMSwwLDkwLAorICAgIDMsMCwxMDAsMiwwLDEwMCwzLDAsMTMyLDAsMCw5MCw0LDAsMTAwLDQsCisgICAgMCwxMDAsNSwwLDEzMiwwLDAsOTAsNSwwLDEwMCw2LDAsMTAwLDcsMCwKKyAgICAxMzIsMCwwLDkwLDYsMCwxMDAsOCwwLDEwMCw5LDAsMTMyLDAsMCw5MCwKKyAgICA3LDAsMTAwLDEwLDAsMTAwLDExLDAsMTMyLDAsMCw5MCw4LDAsMTAwLDEyLAorICAgIDAsODMsNDEsMTMsMjE4LDExLDk1LDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsNzYsMTExLDk5LAorICAgIDEwNywxMjIsMTY5LDY1LDMyLDExNCwxMDEsOTksMTE3LDExNCwxMTUsMTA1LDExOCwxMDEsMzIsMTA4LAorICAgIDExMSw5OSwxMDcsMzIsMTA1LDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsOTcsMTE2LDEwNSwKKyAgICAxMTEsMTEwLDMyLDExOSwxMDQsMTA1LDk5LDEwNCwzMiwxMDUsMTE1LDMyLDk3LDk4LDEwOCwxMDEsCisgICAgMzIsMTE2LDExMSwzMiwxMDAsMTAxLDExNiwxMDEsOTksMTE2LDMyLDEwMCwxMDEsOTcsMTAwLDEwOCwKKyAgICAxMTEsOTksMTA3LDExNSwxMCwzMiwzMiwzMiwzMiw0MCwxMDEsNDYsMTAzLDQ2LDMyLDExNiwKKyAgICAxMDQsMTE0LDEwMSw5NywxMDAsMzIsNDksMzIsMTE2LDExNCwxMjEsMTA1LDExMCwxMDMsMzIsMTE2LAorICAgIDExMSwzMiwxMTYsOTcsMTA3LDEwMSwzMiwxMDgsMTExLDk5LDEwNywxMTUsMzIsNjUsMzIsMTE2LAorICAgIDEwNCwxMDEsMTEwLDMyLDY2LDQ0LDMyLDk3LDExMCwxMDAsMzIsMTE2LDEwNCwxMTQsMTAxLDk3LAorICAgIDEwMCwzMiw1MCwzMiwxMTYsMTE0LDEyMSwxMDUsMTEwLDEwMywzMiwxMTYsMTExLDEwLDMyLDMyLAorICAgIDMyLDMyLDExNiw5NywxMDcsMTAxLDMyLDEwOCwxMTEsOTksMTA3LDExNSwzMiw2NiwzMiwxMTYsCisgICAgMTA0LDEwMSwxMTAsMzIsNjUsNDEsNDYsMTAsMzIsMzIsMzIsMzIsOTksMiwwLDAsCisgICAgMCwwLDAsMCwwLDIsMCwwLDAsMiwwLDAsMCw2NywwLDAsCisgICAgMCwxMTUsNzAsMCwwLDAsMTE2LDAsMCwxMDYsMSwwLDEzMSwwLDAsMTI0LAorICAgIDAsMCw5NSwyLDAsMTE2LDAsMCwxMDYsMSwwLDEzMSwwLDAsMTI0LDAsCisgICAgMCw5NSwzLDAsMTI0LDEsMCwxMjQsMCwwLDk1LDQsMCwxMDAsMCwwLAorICAgIDEyNCwwLDAsOTUsNSwwLDEwMCwxLDAsMTI0LDAsMCw5NSw2LDAsMTAwLAorICAgIDEsMCwxMjQsMCwwLDk1LDcsMCwxMDAsMCwwLDgzLDQxLDIsNzgsMjMzLAorICAgIDAsMCwwLDAsNDEsOCwyMTgsNyw5NSwxMTYsMTA0LDExNCwxMDEsOTcsMTAwLDkwLAorICAgIDEzLDk3LDEwOCwxMDgsMTExLDk5LDk3LDExNiwxMDEsOTUsMTA4LDExMSw5OSwxMDcsMjE4LDQsCisgICAgMTA4LDExMSw5OSwxMDcsMjE4LDYsMTE5LDk3LDEwNywxMDEsMTE3LDExMiwxMTQsNjcsMCwwLAorICAgIDAsMjE4LDUsMTExLDExOSwxMTAsMTAxLDExNCwyMTgsNSw5OSwxMTEsMTE3LDExMCwxMTYsMjE4LAorICAgIDcsMTE5LDk3LDEwNSwxMTYsMTAxLDExNCwxMTUsNDEsMiwxMTQsNzEsMCwwLDAsMTE0LAorICAgIDY3LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LAorICAgIDAsMCwwLDExNCw3MiwwLDAsMCwxNzIsMCwwLDAsMTE1LDEyLDAsMCwKKyAgICAwLDAsMSwxNSwxLDE1LDEsOSwxLDksMSw5LDEsMTIyLDIwLDk1LAorICAgIDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsNzYsMTExLDk5LDEwNyw0Niw5NSw5NSwxMDUsMTEwLDEwNSwKKyAgICAxMTYsOTUsOTUsOTksMSwwLDAsMCwwLDAsMCwwLDQsMCwwLDAsCisgICAgMiwwLDAsMCw2NywwLDAsMCwxMTUsODgsMCwwLDAsMTE2LDAsMCwKKyAgICAxMDYsMSwwLDEzMSwwLDAsMTI1LDEsMCwxMjQsMCwwLDEwNiwyLDAsMTI1LAorICAgIDIsMCwxMjAsNjAsMCwxMTYsMywwLDEwNiw0LDAsMTI0LDIsMCwxMzEsMSwKKyAgICAwLDEyNSwzLDAsMTI0LDMsMCwxMDAsMCwwLDEwNyw4LDAsMTE0LDU1LDAsCisgICAgMTAwLDEsMCw4MywxMjQsMywwLDEwNiwyLDAsMTI1LDIsMCwxMjQsMiwwLAorICAgIDEyNCwxLDAsMTA3LDIsMCwxMTQsMjQsMCwxMDAsMiwwLDgzLDExMywyNCwwLAorICAgIDg3LDEwMCwwLDAsODMsNDEsMyw3OCw3MCw4NCw0MSw1LDExNCw4NSwwLDAsCisgICAgMCwyMTgsOSwxMDMsMTAxLDExNiw5NSwxMDUsMTAwLDEwMSwxMTAsMTE2LDExNCw4OCwwLDAsCisgICAgMCwyMTgsMTIsOTUsOTgsMTA4LDExMSw5OSwxMDcsMTA1LDExMCwxMDMsOTUsMTExLDExMCwyMTgsCisgICAgMywxMDMsMTAxLDExNiw0MSw0LDExNCw3MSwwLDAsMCwyMTgsMiwxMDksMTAxLDIxOCwKKyAgICAzLDExNiwxMDUsMTAwLDExNCw4NiwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwKKyAgICAwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMTIsMTA0LDk3LDExNSw5NSwxMDAsMTAxLAorICAgIDk3LDEwMCwxMDgsMTExLDk5LDEwNywxODAsMCwwLDAsMTE1LDE4LDAsMCwwLDAsCisgICAgMiwxMiwxLDksMSwzLDEsMTUsMSwxMiwxLDQsMSw5LDEsMTIsCisgICAgMSwxMjIsMjQsOTUsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsOTksMTA3LDQ2LDEwNCwKKyAgICA5NywxMTUsOTUsMTAwLDEwMSw5NywxMDAsMTA4LDExMSw5OSwxMDcsOTksMSwwLDAsMCwKKyAgICAwLDAsMCwwLDIsMCwwLDAsMTYsMCwwLDAsNjcsMCwwLDAsCisgICAgMTE1LDIxNSwwLDAsMCwxMTYsMCwwLDEwNiwxLDAsMTMxLDAsMCwxMjUsMSwKKyAgICAwLDEyNCwwLDAsMTE2LDIsMCwxMjQsMSwwLDYwLDEyMiwxNzgsMCwxMjAsMTcxLAorICAgIDAsMTI0LDAsMCwxMDYsMywwLDE0MywxMzAsMCwxLDEyNCwwLDAsMTA2LDQsCisgICAgMCwxMDAsMSwwLDEwNywyLDAsMTE1LDY4LDAsMTI0LDAsMCwxMDYsNSwwLAorICAgIDEyNCwxLDAsMTA3LDIsMCwxMTQsOTYsMCwxMjQsMSwwLDEyNCwwLDAsOTUsCisgICAgNSwwLDEyNCwwLDAsNCwxMDYsNCwwLDEwMCwyLDAsNTUsMiw5NSw0LAorICAgIDAsMTAwLDMsMCw4MywxMjQsMCwwLDEwNiw2LDAsMTMxLDAsMCwxMTQsMTI3LAorICAgIDAsMTE2LDcsMCwxMDAsNCwwLDEyNCwwLDAsMjIsMTMxLDEsMCwxMzAsMSwKKyAgICAwLDExMCwwLDAsMTI0LDAsMCwxMDYsOCwwLDEwNiw5LDAsMTAwLDUsMCwKKyAgICAxMzEsMSwwLDExNCwxNjMsMCwxMjQsMCwwLDQsMTA2LDEwLDAsMTAwLDIsMCwKKyAgICA1NSwyLDk1LDEwLDAsMTEwLDAsMCw4NywxMDAsNiwwLDgxLDg4LDEyNCwwLAorICAgIDAsMTA2LDgsMCwxMDYsOSwwLDEzMSwwLDAsMSwxMjQsMCwwLDEwNiw4LAorICAgIDAsMTA2LDExLDAsMTMxLDAsMCwxLDExMywyOCwwLDg3LDg3LDEwMCw2LDAsCisgICAgMTE2LDIsMCwxMjQsMSwwLDYxLDg4LDEwMCw2LDAsODMsNDEsNywxMjIsMTg1LAorICAgIDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDY1LDk5LDExMywxMTcsMTA1LDExNCwxMDEsCisgICAgMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTA4LDExMSw5OSwxMDcsCisgICAgNDYsMzIsMzIsNzMsMTAyLDMyLDk3LDMyLDExMiwxMTEsMTE2LDEwMSwxMTAsMTE2LDEwNSw5NywKKyAgICAxMDgsMzIsMTAwLDEwMSw5NywxMDAsMTA4LDExMSw5OSwxMDcsMzIsMTA1LDExNSwzMiwxMDAsMTAxLAorICAgIDExNiwxMDEsOTksMTE2LDEwMSwxMDAsNDQsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsCisgICAgOTcsMzIsOTUsNjgsMTAxLDk3LDEwMCwxMDgsMTExLDk5LDEwNyw2OSwxMTQsMTE0LDExMSwxMTQsCisgICAgMzIsMTA1LDExNSwzMiwxMTQsOTcsMTA1LDExNSwxMDEsMTAwLDQ2LDEwLDMyLDMyLDMyLDMyLAorICAgIDMyLDMyLDMyLDMyLDc5LDExNiwxMDQsMTAxLDExNCwxMTksMTA1LDExNSwxMDEsNDQsMzIsMTE2LAorICAgIDEwNCwxMDEsMzIsMTA4LDExMSw5OSwxMDcsMzIsMTA1LDExNSwzMiw5NywxMDgsMTE5LDk3LDEyMSwKKyAgICAxMTUsMzIsOTcsOTksMTEzLDExNywxMDUsMTE0LDEwMSwxMDAsMzIsOTcsMTEwLDEwMCwzMiw4NCwKKyAgICAxMTQsMTE3LDEwMSwzMiwxMDUsMTE1LDMyLDExNCwxMDEsMTE2LDExNywxMTQsMTEwLDEwMSwxMDAsNDYsCisgICAgMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTE0LDg0LDAsMCwwLDExNCwyOSwKKyAgICAwLDAsMCw4NCwxMjIsMjMsMTAwLDEwMSw5NywxMDAsMTA4LDExMSw5OSwxMDcsMzIsMTAwLAorICAgIDEwMSwxMTYsMTAxLDk5LDExNiwxMDEsMTAwLDMyLDk4LDEyMSwzMiwzNywxMTQsNzAsNzgsNDEsCisgICAgMTIsMTE0LDg1LDAsMCwwLDExNCw5MSwwLDAsMCwxMTQsOTIsMCwwLDAsCisgICAgMTE0LDg2LDAsMCwwLDExNCw4OSwwLDAsMCwxMTQsODgsMCwwLDAsMTE0LAorICAgIDk2LDAsMCwwLDExNCw4MiwwLDAsMCwxMTQsODcsMCwwLDAsMjE4LDcsCisgICAgOTcsOTksMTEzLDExNywxMDUsMTE0LDEwMSwxMTQsOTAsMCwwLDAsMjE4LDcsMTE0LDEwMSwKKyAgICAxMDgsMTAxLDk3LDExNSwxMDEsNDEsMiwxMTQsNzEsMCwwLDAsMTE0LDk1LDAsMCwKKyAgICAwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLAorICAgIDExNCw5NywwLDAsMCwxOTIsMCwwLDAsMTE1LDMyLDAsMCwwLDAsNiwKKyAgICAxMiwxLDEwLDEsMywxLDMsMSwxMCwxLDMwLDEsOSwxLDE1LDEsCisgICAgNCwxLDEyLDEsMTksMSwxOCwxLDI0LDIsMTMsMSwyMSwyLDEyMiwxOSwKKyAgICA5NSw3NywxMTEsMTAwLDExNywxMDgsMTAxLDc2LDExMSw5OSwxMDcsNDYsOTcsOTksMTEzLDExNywKKyAgICAxMDUsMTE0LDEwMSw5OSwxLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwKKyAgICAxMCwwLDAsMCw2NywwLDAsMCwxMTUsMTY1LDAsMCwwLDExNiwwLDAsCisgICAgMTA2LDEsMCwxMzEsMCwwLDEyNSwxLDAsMTI0LDAsMCwxMDYsMiwwLDE0MywKKyAgICAxMzgsMCwxLDEyNCwwLDAsMTA2LDMsMCwxMjQsMSwwLDEwNywzLDAsMTE0LAorICAgIDUyLDAsMTE2LDQsMCwxMDAsMSwwLDEzMSwxLDAsMTMwLDEsMCwxMTAsMCwKKyAgICAwLDEyNCwwLDAsMTA2LDUsMCwxMDAsMiwwLDEwNyw0LDAsMTE1LDczLDAsCisgICAgMTE2LDYsMCwxMzAsMSwwLDEyNCwwLDAsNCwxMDYsNSwwLDEwMCwzLDAsCisgICAgNTYsMiw5NSw1LDAsMTI0LDAsMCwxMDYsNSwwLDEwMCwyLDAsMTA3LDIsCisgICAgMCwxMTQsMTU1LDAsMTAwLDAsMCwxMjQsMCwwLDk1LDMsMCwxMjQsMCwwLAorICAgIDEwNiw3LDAsMTE0LDE1NSwwLDEyNCwwLDAsNCwxMDYsNywwLDEwMCwzLDAsCisgICAgNTYsMiw5NSw3LDAsMTI0LDAsMCwxMDYsOCwwLDEwNiw5LDAsMTMxLDAsCisgICAgMCwxLDExMywxNTUsMCwxMTAsMCwwLDg3LDEwMCwwLDAsODEsODgsMTAwLDAsCisgICAgMCw4Myw0MSw0LDc4LDEyMiwzMSw5OSw5NywxMTAsMTEwLDExMSwxMTYsMzIsMTE0LDEwMSwKKyAgICAxMDgsMTAxLDk3LDExNSwxMDEsMzIsMTE3LDExMCw0NSw5Nyw5OSwxMTMsMTE3LDEwNSwxMTQsMTAxLAorICAgIDEwMCwzMiwxMDgsMTExLDk5LDEwNywxMTQsODQsMCwwLDAsMTE0LDI5LDAsMCwwLAorICAgIDQxLDEwLDExNCw4NSwwLDAsMCwxMTQsOTEsMCwwLDAsMTE0LDg2LDAsMCwKKyAgICAwLDExNCw4OCwwLDAsMCwyMTgsMTIsODIsMTE3LDExMCwxMTYsMTA1LDEwOSwxMDEsNjksCisgICAgMTE0LDExNCwxMTEsMTE0LDExNCw4OSwwLDAsMCwyMTgsMTQsNjUsMTE1LDExNSwxMDEsMTE0LAorICAgIDExNiwxMDUsMTExLDExMCw2OSwxMTQsMTE0LDExMSwxMTQsMTE0LDkwLDAsMCwwLDExNCw4NywKKyAgICAwLDAsMCwxMTQsOTgsMCwwLDAsNDEsMiwxMTQsNzEsMCwwLDAsMTE0LAorICAgIDk1LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LAorICAgIDAsMCwwLDExNCw5OCwwLDAsMCwyMTcsMCwwLDAsMTE1LDIyLDAsMCwKKyAgICAwLDAsMSwxMiwxLDEwLDEsMTUsMSwxNSwxLDIxLDEsMTUsMSwxNSwKKyAgICAxLDksMSw5LDEsMTUsMSwxMjIsMTksOTUsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSwKKyAgICA3NiwxMTEsOTksMTA3LDQ2LDExNCwxMDEsMTA4LDEwMSw5NywxMTUsMTAxLDk5LDEsMCwwLAorICAgIDAsMCwwLDAsMCwxLDAsMCwwLDQsMCwwLDAsNjcsMCwwLAorICAgIDAsMTE1LDI1LDAsMCwwLDEwMCwxLDAsMTA2LDAsMCwxMjQsMCwwLDEwNiwKKyAgICAxLDAsMTE2LDIsMCwxMjQsMCwwLDEzMSwxLDAsMTMxLDIsMCw4Myw0MSwKKyAgICAyLDc4LDEyMiwyMyw5NSw3NywxMTEsMTAwLDExNywxMDgsMTAxLDc2LDExMSw5OSwxMDcsNDAsCisgICAgMTIzLDMzLDExNCwxMjUsNDEsMzIsOTcsMTE2LDMyLDEyMywxMjUsNDEsMywxMTQsNDcsMCwKKyAgICAwLDAsMTE0LDY3LDAsMCwwLDExNCw0OCwwLDAsMCw0MSwxLDExNCw3MSwKKyAgICAwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLAorICAgIDAsMCwyMTgsOCw5NSw5NSwxMTQsMTAxLDExMiwxMTQsOTUsOTUsMjMwLDAsMCwwLAorICAgIDExNSwyLDAsMCwwLDAsMSwxMjIsMjAsOTUsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSwKKyAgICA3NiwxMTEsOTksMTA3LDQ2LDk1LDk1LDExNCwxMDEsMTEyLDExNCw5NSw5NSw3OCw0MSw5LAorICAgIDExNCw1NywwLDAsMCwxMTQsNTYsMCwwLDAsMTE0LDU4LDAsMCwwLDExNCwKKyAgICA1OSwwLDAsMCwxMTQsNzIsMCwwLDAsMTE0LDk2LDAsMCwwLDExNCw5NywKKyAgICAwLDAsMCwxMTQsOTgsMCwwLDAsMTE0LDEwMSwwLDAsMCwxMTQsNCwwLAorICAgIDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsCisgICAgMCwxMTQsODMsMCwwLDAsMTY2LDAsMCwwLDExNSwxMiwwLDAsMCwxMiwKKyAgICA0LDYsMiwxMiw4LDEyLDEyLDEyLDI1LDEyLDEzLDExNCw4MywwLDAsMCwKKyAgICA5OSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDAsMCwKKyAgICAwLDY0LDAsMCwwLDExNSw3MCwwLDAsMCwxMDEsMCwwLDkwLDEsMCwKKyAgICAxMDAsMCwwLDkwLDIsMCwxMDAsMSwwLDkwLDMsMCwxMDAsMiwwLDEwMCwKKyAgICAzLDAsMTMyLDAsMCw5MCw0LDAsMTAwLDQsMCwxMDAsNSwwLDEzMiwwLAorICAgIDAsOTAsNSwwLDEwMCw2LDAsMTAwLDcsMCwxMzIsMCwwLDkwLDYsMCwKKyAgICAxMDAsOCwwLDEwMCw5LDAsMTMyLDAsMCw5MCw3LDAsMTAwLDEwLDAsODMsCisgICAgNDEsMTEsMjE4LDE2LDk1LDY4LDExNywxMDksMTA5LDEyMSw3NywxMTEsMTAwLDExNywxMDgsMTAxLAorICAgIDc2LDExMSw5OSwxMDcsMTIyLDg2LDY1LDMyLDExNSwxMDUsMTA5LDExMiwxMDgsMTAxLDMyLDk1LAorICAgIDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsNzYsMTExLDk5LDEwNywzMiwxMDEsMTEzLDExNywxMDUsMTE4LAorICAgIDk3LDEwOCwxMDEsMTEwLDExNiwzMiwxMDIsMTExLDExNCwzMiw4MCwxMjEsMTE2LDEwNCwxMTEsMTEwLAorICAgIDMyLDk4LDExNywxMDUsMTA4LDEwMCwxMTUsMzIsMTE5LDEwNSwxMTYsMTA0LDExMSwxMTcsMTE2LDEwLAorICAgIDMyLDMyLDMyLDMyLDEwOSwxMTcsMTA4LDExNiwxMDUsNDUsMTE2LDEwNCwxMTQsMTAxLDk3LDEwMCwKKyAgICAxMDUsMTEwLDEwMywzMiwxMTUsMTE3LDExMiwxMTIsMTExLDExNCwxMTYsNDYsOTksMiwwLDAsCisgICAgMCwwLDAsMCwwLDIsMCwwLDAsMiwwLDAsMCw2NywwLDAsCisgICAgMCwxMTUsMjIsMCwwLDAsMTI0LDEsMCwxMjQsMCwwLDk1LDAsMCwxMDAsCisgICAgMSwwLDEyNCwwLDAsOTUsMSwwLDEwMCwwLDAsODMsNDEsMiw3OCwxMTQsCisgICAgODQsMCwwLDAsNDEsMiwxMTQsNjcsMCwwLDAsMTE0LDg5LDAsMCwwLAorICAgIDQxLDIsMTE0LDcxLDAsMCwwLDExNCw2NywwLDAsMCwxMTQsNCwwLDAsCisgICAgMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsNzIsMCwwLDAsCisgICAgMjM4LDAsMCwwLDExNSw0LDAsMCwwLDAsMSw5LDEsMTIyLDI1LDk1LAorICAgIDY4LDExNywxMDksMTA5LDEyMSw3NywxMTEsMTAwLDExNywxMDgsMTAxLDc2LDExMSw5OSwxMDcsNDYsCisgICAgOTUsOTUsMTA1LDExMCwxMDUsMTE2LDk1LDk1LDk5LDEsMCwwLDAsMCwwLDAsCisgICAgMCwxLDAsMCwwLDMsMCwwLDAsNjcsMCwwLDAsMTE1LDE5LDAsCisgICAgMCwwLDEyNCwwLDAsNCwxMDYsMCwwLDEwMCwxLDAsNTUsMiw5NSwwLAorICAgIDAsMTAwLDIsMCw4Myw0MSwzLDc4LDExNCwyOSwwLDAsMCw4NCw0MSwxLAorICAgIDExNCw4OSwwLDAsMCw0MSwxLDExNCw3MSwwLDAsMCwxMTQsNCwwLDAsCisgICAgMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsOTcsMCwwLDAsCisgICAgMjQyLDAsMCwwLDExNSw0LDAsMCwwLDAsMSwxNSwxLDEyMiwyNCw5NSwKKyAgICA2OCwxMTcsMTA5LDEwOSwxMjEsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsOTksMTA3LDQ2LAorICAgIDk3LDk5LDExMywxMTcsMTA1LDExNCwxMDEsOTksMSwwLDAsMCwwLDAsMCwwLAorICAgIDEsMCwwLDAsMywwLDAsMCw2NywwLDAsMCwxMTUsNDksMCwwLAorICAgIDAsMTI0LDAsMCwxMDYsMCwwLDEwMCwxLDAsMTA3LDIsMCwxMTQsMzAsMCwKKyAgICAxMTYsMSwwLDEwMCwyLDAsMTMxLDEsMCwxMzAsMSwwLDExMCwwLDAsMTI0LAorICAgIDAsMCw0LDEwNiwwLDAsMTAwLDMsMCw1NiwyLDk1LDAsMCwxMDAsMCwKKyAgICAwLDgzLDQxLDQsNzgsMTE0LDg0LDAsMCwwLDEyMiwzMSw5OSw5NywxMTAsMTEwLAorICAgIDExMSwxMTYsMzIsMTE0LDEwMSwxMDgsMTAxLDk3LDExNSwxMDEsMzIsMTE3LDExMCw0NSw5Nyw5OSwKKyAgICAxMTMsMTE3LDEwNSwxMTQsMTAxLDEwMCwzMiwxMDgsMTExLDk5LDEwNywxMTQsMjksMCwwLDAsCisgICAgNDEsMiwxMTQsODksMCwwLDAsMTE0LDk5LDAsMCwwLDQxLDEsMTE0LDcxLAorICAgIDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsCisgICAgMCwwLDExNCw5OCwwLDAsMCwyNDYsMCwwLDAsMTE1LDYsMCwwLDAsCisgICAgMCwxLDE1LDEsMTUsMSwxMjIsMjQsOTUsNjgsMTE3LDEwOSwxMDksMTIxLDc3LDExMSwKKyAgICAxMDAsMTE3LDEwOCwxMDEsNzYsMTExLDk5LDEwNyw0NiwxMTQsMTAxLDEwOCwxMDEsOTcsMTE1LDEwMSwKKyAgICA5OSwxLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCw0LDAsMCwKKyAgICAwLDY3LDAsMCwwLDExNSwyNSwwLDAsMCwxMDAsMSwwLDEwNiwwLDAsCisgICAgMTI0LDAsMCwxMDYsMSwwLDExNiwyLDAsMTI0LDAsMCwxMzEsMSwwLDEzMSwKKyAgICAyLDAsODMsNDEsMiw3OCwxMjIsMjgsOTUsNjgsMTE3LDEwOSwxMDksMTIxLDc3LDExMSwKKyAgICAxMDAsMTE3LDEwOCwxMDEsNzYsMTExLDk5LDEwNyw0MCwxMjMsMzMsMTE0LDEyNSw0MSwzMiw5NywKKyAgICAxMTYsMzIsMTIzLDEyNSw0MSwzLDExNCw0NywwLDAsMCwxMTQsNjcsMCwwLDAsCisgICAgMTE0LDQ4LDAsMCwwLDQxLDEsMTE0LDcxLDAsMCwwLDExNCw0LDAsMCwKKyAgICAwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwxMDEsMCwwLDAsCisgICAgMjUxLDAsMCwwLDExNSwyLDAsMCwwLDAsMSwxMjIsMjUsOTUsNjgsMTE3LAorICAgIDEwOSwxMDksMTIxLDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsNzYsMTExLDk5LDEwNyw0Niw5NSw5NSwKKyAgICAxMTQsMTAxLDExMiwxMTQsOTUsOTUsNzgsNDEsOCwxMTQsNTcsMCwwLDAsMTE0LDU2LAorICAgIDAsMCwwLDExNCw1OCwwLDAsMCwxMTQsNTksMCwwLDAsMTE0LDcyLDAsCisgICAgMCwwLDExNCw5NywwLDAsMCwxMTQsOTgsMCwwLDAsMTE0LDEwMSwwLDAsCisgICAgMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwKKyAgICAxMTQsNSwwLDAsMCwxMTQsMTAyLDAsMCwwLDIzNCwwLDAsMCwxMTUsMTAsCisgICAgMCwwLDAsMTIsMiw2LDIsMTIsNCwxMiw0LDEyLDUsMTE0LDEwMiwwLAorICAgIDAsMCw5OSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLAorICAgIDAsMCwwLDY0LDAsMCwwLDExNSw1MiwwLDAsMCwxMDEsMCwwLDkwLAorICAgIDEsMCwxMDAsMCwwLDkwLDIsMCwxMDAsMSwwLDEwMCwyLDAsMTMyLDAsCisgICAgMCw5MCwzLDAsMTAwLDMsMCwxMDAsNCwwLDEzMiwwLDAsOTAsNCwwLAorICAgIDEwMCw1LDAsMTAwLDYsMCwxMzIsMCwwLDkwLDUsMCwxMDAsNywwLDgzLAorICAgIDQxLDgsMjE4LDE4LDk1LDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsNzYsMTExLDk5LDEwNyw3NywKKyAgICA5NywxMTAsOTcsMTAzLDEwMSwxMTQsOTksMiwwLDAsMCwwLDAsMCwwLDIsCiAgICAgMCwwLDAsMiwwLDAsMCw2NywwLDAsMCwxMTUsMjIsMCwwLDAsCi0gICAgMTI0LDEsMCwxMjQsMCwwLDk1LDAsMCwxMDAsMSwwLDEyNCwwLDAsOTUsCi0gICAgMSwwLDEwMCwwLDAsODMsNDAsMiwwLDAsMCw3OCwxMDUsMCwwLDAsCi0gICAgMCw0MCwyLDAsMCwwLDExNyw0LDAsMCwwLDExMCw5NywxMDksMTAxLDExNywKLSAgICA1LDAsMCwwLDk5LDExMSwxMTcsMTEwLDExNiw0MCwyLDAsMCwwLDExNyw0LAotICAgIDAsMCwwLDExNSwxMDEsMTA4LDEwMiwxMTcsNCwwLDAsMCwxMTAsOTcsMTA5LDEwMSwKLSAgICA0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLAotICAgIDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsCi0gICAgNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNyw4LDAsMCwKLSAgICAwLDk1LDk1LDEwNSwxMTAsMTA1LDExNiw5NSw5NSwyNDcsMCwwLDAsMTE1LDQsMCwKLSAgICAwLDAsMCwxLDksMSwxMTcsMjUsMCwwLDAsOTUsNjgsMTE3LDEwOSwxMDksCi0gICAgMTIxLDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsNzYsMTExLDk5LDEwNyw0Niw5NSw5NSwxMDUsMTEwLAotICAgIDEwNSwxMTYsOTUsOTUsOTksMSwwLDAsMCwwLDAsMCwwLDEsMCwwLAotICAgIDAsMywwLDAsMCw2NywwLDAsMCwxMTUsMTksMCwwLDAsMTI0LDAsCi0gICAgMCw0LDEwNiwwLDAsMTAwLDEsMCw1NSwyLDk1LDAsMCwxMDAsMiwwLAotICAgIDgzLDQwLDMsMCwwLDAsNzgsMTA1LDEsMCwwLDAsODQsNDAsMiwwLAotICAgIDAsMCwxMTcsNSwwLDAsMCw5OSwxMTEsMTE3LDExMCwxMTYsMTE3LDQsMCwwLAotICAgIDAsODQsMTE0LDExNywxMDEsNDAsMSwwLDAsMCwxMTcsNCwwLDAsMCwxMTUsCi0gICAgMTAxLDEwOCwxMDIsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLAotICAgIDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwKLSAgICAxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsCi0gICAgNywwLDAsMCw5Nyw5OSwxMTMsMTE3LDEwNSwxMTQsMTAxLDI1MSwwLDAsMCwxMTUsCi0gICAgNCwwLDAsMCwwLDEsMTUsMSwxMTcsMjQsMCwwLDAsOTUsNjgsMTE3LAotICAgIDEwOSwxMDksMTIxLDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsNzYsMTExLDk5LDEwNyw0Niw5Nyw5OSwKLSAgICAxMTMsMTE3LDEwNSwxMTQsMTAxLDk5LDEsMCwwLDAsMCwwLDAsMCwxLDAsCi0gICAgMCwwLDMsMCwwLDAsNjcsMCwwLDAsMTE1LDQ5LDAsMCwwLDEyNCwKLSAgICAwLDAsMTA2LDAsMCwxMDAsMSwwLDEwNywyLDAsMTE0LDMwLDAsMTE2LDEsCi0gICAgMCwxMDAsMiwwLDEzMSwxLDAsMTMwLDEsMCwxMTAsMCwwLDEyNCwwLDAsCi0gICAgNCwxMDYsMCwwLDEwMCwzLDAsNTYsMiw5NSwwLDAsMTAwLDAsMCw4MywKLSAgICA0MCw0LDAsMCwwLDc4LDEwNSwwLDAsMCwwLDExNywzMSwwLDAsMCwKLSAgICA5OSw5NywxMTAsMTEwLDExMSwxMTYsMzIsMTE0LDEwMSwxMDgsMTAxLDk3LDExNSwxMDEsMzIsMTE3LAotICAgIDExMCw0NSw5Nyw5OSwxMTMsMTE3LDEwNSwxMTQsMTAxLDEwMCwzMiwxMDgsMTExLDk5LDEwNywxMDUsCi0gICAgMSwwLDAsMCw0MCwyLDAsMCwwLDExNyw1LDAsMCwwLDk5LDExMSwKLSAgICAxMTcsMTEwLDExNiwxMTcsMTIsMCwwLDAsODIsMTE3LDExMCwxMTYsMTA1LDEwOSwxMDEsNjksCi0gICAgMTE0LDExNCwxMTEsMTE0LDQwLDEsMCwwLDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwKLSAgICAxMDgsMTAyLDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLAotICAgIDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LAotICAgIDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDcsCi0gICAgMCwwLDAsMTE0LDEwMSwxMDgsMTAxLDk3LDExNSwxMDEsMjU1LDAsMCwwLDExNSw2LAotICAgIDAsMCwwLDAsMSwxNSwxLDE1LDEsMTE3LDI0LDAsMCwwLDk1LDY4LAotICAgIDExNywxMDksMTA5LDEyMSw3NywxMTEsMTAwLDExNywxMDgsMTAxLDc2LDExMSw5OSwxMDcsNDYsMTE0LAotICAgIDEwMSwxMDgsMTAxLDk3LDExNSwxMDEsOTksMSwwLDAsMCwwLDAsMCwwLDEsCi0gICAgMCwwLDAsNCwwLDAsMCw2NywwLDAsMCwxMTUsMjMsMCwwLDAsCi0gICAgMTAwLDEsMCwxMjQsMCwwLDEwNiwwLDAsMTE2LDEsMCwxMjQsMCwwLDEzMSwKLSAgICAxLDAsMTAyLDIsMCwyMiw4Myw0MCwyLDAsMCwwLDc4LDExNywyNiwwLAotICAgIDAsMCw5NSw2OCwxMTcsMTA5LDEwOSwxMjEsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsCi0gICAgOTksMTA3LDQwLDM3LDExNCw0MSwzMiw5NywxMTYsMzIsMzcsMTAwLDQwLDIsMCwwLAotICAgIDAsMTE3LDQsMCwwLDAsMTEwLDk3LDEwOSwxMDEsMTE3LDIsMCwwLDAsMTA1LAotICAgIDEwMCw0MCwxLDAsMCwwLDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LDEwMiw0MCwKLSAgICAwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwKLSAgICAxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsCi0gICAgOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNyw4LDAsMCwwLAotICAgIDk1LDk1LDExNCwxMDEsMTEyLDExNCw5NSw5NSw0LDEsMCwwLDExNSwyLDAsMCwKLSAgICAwLDAsMSwxMTcsMjUsMCwwLDAsOTUsNjgsMTE3LDEwOSwxMDksMTIxLDc3LDExMSwKLSAgICAxMDAsMTE3LDEwOCwxMDEsNzYsMTExLDk5LDEwNyw0Niw5NSw5NSwxMTQsMTAxLDExMiwxMTQsOTUsCi0gICAgOTUsNzgsNDAsOCwwLDAsMCwxMTcsOCwwLDAsMCw5NSw5NSwxMTAsOTcsCi0gICAgMTA5LDEwMSw5NSw5NSwxMTcsMTAsMCwwLDAsOTUsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwKLSAgICAxMDEsOTUsOTUsMTE3LDEyLDAsMCwwLDk1LDk1LDExMywxMTcsOTcsMTA4LDExMCw5NywKLSAgICAxMDksMTAxLDk1LDk1LDExNyw3LDAsMCwwLDk1LDk1LDEwMCwxMTEsOTksOTUsOTUsCi0gICAgMTE3LDgsMCwwLDAsOTUsOTUsMTA1LDExMCwxMDUsMTE2LDk1LDk1LDExNyw3LDAsCi0gICAgMCwwLDk3LDk5LDExMywxMTcsMTA1LDExNCwxMDEsMTE3LDcsMCwwLDAsMTE0LDEwMSwKLSAgICAxMDgsMTAxLDk3LDExNSwxMDEsMTE3LDgsMCwwLDAsOTUsOTUsMTE0LDEwMSwxMTIsMTE0LAotICAgIDk1LDk1LDQwLDEsMCwwLDAsMTE3LDEwLDAsMCwwLDk1LDk1LDEwOCwxMTEsCi0gICAgOTksOTcsMTA4LDExNSw5NSw5NSw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsCi0gICAgMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLAotICAgIDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsCi0gICAgMTEyLDYyLDExNywxNiwwLDAsMCw5NSw2OCwxMTcsMTA5LDEwOSwxMjEsNzcsMTExLDEwMCwKLSAgICAxMTcsMTA4LDEwMSw3NiwxMTEsOTksMTA3LDI0MywwLDAsMCwxMTUsMTAsMCwwLDAsCi0gICAgMTYsMiw2LDIsMTIsNCwxMiw0LDEyLDUsMTE3LDE2LDAsMCwwLDk1LAotICAgIDY4LDExNywxMDksMTA5LDEyMSw3NywxMTEsMTAwLDExNywxMDgsMTAxLDc2LDExMSw5OSwxMDcsOTksCi0gICAgMSwwLDAsMCwwLDAsMCwwLDMsMCwwLDAsMTEsMCwwLDAsCi0gICAgMywwLDAsMCwxMTUsMTQyLDAsMCwwLDEwMCwzLDAsMTI1LDEsMCwxMjEsCi0gICAgMTcsMCwxMTYsMSwwLDEzNiwwLDAsMjUsMTMxLDAsMCwxMjUsMSwwLDg3LAotICAgIDExMCwxOCwwLDQsMTE2LDIsMCwxMDcsMTAsMCwxMTQsNDMsMCwxLDEsMSwKLSAgICA4OSwxMTAsMSwwLDg4LDEyNCwxLDAsMTAwLDMsMCwxMDcsOCwwLDExNCwxMzgsCi0gICAgMCwxMTYsMywwLDEwMCwzLDAsMTA3LDgsMCwxMTQsODMsMCwxMTYsNCwwLAotICAgIDEzNiwwLDAsMTMxLDEsMCwxMjUsMSwwLDExMCwxMiwwLDExNiw1LDAsMTM2LAotICAgIDAsMCwxMzEsMSwwLDEyNSwxLDAsMTM1LDAsMCwxMDIsMSwwLDEwMCwxLAotICAgIDAsMTAwLDIsMCwxMzQsMCwwLDEyNSwyLDAsMTE2LDYsMCwxMDYsNywwLAotICAgIDEyNCwxLDAsMTI0LDIsMCwxMzEsMiwwLDExNiwxLDAsMTM2LDAsMCw2MCwKLSAgICAxMTAsMCwwLDEyNCwxLDAsODMsNDAsNCwwLDAsMCwxMTcsMTA5LDAsMCwKLSAgICAwLDcxLDEwMSwxMTYsMzIsMTExLDExNCwzMiw5OSwxMTQsMTAxLDk3LDExNiwxMDEsMzIsMTE2LAotICAgIDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTA4LDExMSw5OSwxMDcsMzIsMTAyLAotICAgIDExMSwxMTQsMzIsOTcsMzIsMTAzLDEwNSwxMTgsMTAxLDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LAotICAgIDEwMSwzMiwxMTAsOTcsMTA5LDEwMSw0NiwxMCwxMCwzMiwzMiwzMiwzMiw4MywxMDQsMTExLAotICAgIDExNywxMDgsMTAwLDMyLDExMSwxMTAsMTA4LDEyMSwzMiw5OCwxMDEsMzIsOTksOTcsMTA4LDEwOCwKLSAgICAxMDEsMTAwLDMyLDExOSwxMDUsMTE2LDEwNCwzMiwxMTYsMTA0LDEwMSwzMiwxMDUsMTA5LDExMiwxMTEsCi0gICAgMTE0LDExNiwzMiwxMDgsMTExLDk5LDEwNywzMiwxMTYsOTcsMTA3LDEwMSwxMTAsNDYsOTksMSwKLSAgICAwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMiwwLDAsMCwxOSwKLSAgICAwLDAsMCwxMTUsMTEsMCwwLDAsMTE2LDAsMCwxMzYsMCwwLDYxLDEwMCwKLSAgICAwLDAsODMsNDAsMSwwLDAsMCw3OCw0MCwxLDAsMCwwLDExNywxMywKLSAgICAwLDAsMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwxMDgsMTExLDk5LDEwNywxMTUsCi0gICAgNDAsMSwwLDAsMCwxMTcsMSwwLDAsMCw5NSw0MCwxLDAsMCwwLAotICAgIDExNyw0LDAsMCwwLDExMCw5NywxMDksMTAxLDQwLDAsMCwwLDAsMTE3LDI5LAotICAgIDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsCi0gICAgMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLAotICAgIDExNywyLDAsMCwwLDk5LDk4LDI0LDEsMCwwLDExNSwyLDAsMCwwLAotICAgIDAsMSwxMTcsMjgsMCwwLDAsOTUsMTAzLDEwMSwxMTYsOTUsMTA5LDExMSwxMDAsMTE3LAotICAgIDEwOCwxMDEsOTUsMTA4LDExMSw5OSwxMDcsNDYsNjAsMTA4LDExMSw5OSw5NywxMDgsMTE1LDYyLAotICAgIDQ2LDk5LDk4LDc4LDQwLDgsMCwwLDAsMTE3LDQsMCwwLDAsNzgsMTExLAotICAgIDExMCwxMDEsMTE3LDEzLDAsMCwwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDEwOCwKLSAgICAxMTEsOTksMTA3LDExNSwxMTcsOCwwLDAsMCw3NSwxMDEsMTIxLDY5LDExNCwxMTQsMTExLAotICAgIDExNCwxMTcsNywwLDAsMCw5NSwxMTYsMTA0LDExNCwxMDEsOTcsMTAwLDExNywxNiwwLAotICAgIDAsMCw5NSw2OCwxMTcsMTA5LDEwOSwxMjEsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsCi0gICAgOTksMTA3LDExNywxMSwwLDAsMCw5NSw3NywxMTEsMTAwLDExNywxMDgsMTAxLDc2LDExMSwKLSAgICA5OSwxMDcsMTE3LDgsMCwwLDAsOTUsMTE5LDEwMSw5NywxMDcsMTE0LDEwMSwxMDIsMTE3LAotICAgIDMsMCwwLDAsMTE0LDEwMSwxMDIsNDAsMywwLDAsMCwxMTcsNCwwLDAsCi0gICAgMCwxMTAsOTcsMTA5LDEwMSwxMTcsNCwwLDAsMCwxMDgsMTExLDk5LDEwNywxMTcsMiwKLSAgICAwLDAsMCw5OSw5OCw0MCwwLDAsMCwwLDQwLDEsMCwwLDAsMTE3LAotICAgIDQsMCwwLDAsMTEwLDk3LDEwOSwxMDEsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsCi0gICAgMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsCi0gICAgOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxNiwwLDAsMCw5NSwKLSAgICAxMDMsMTAxLDExNiw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwxMDgsMTExLDk5LDEwNywxMCwKLSAgICAxLDAsMCwxMTUsMjQsMCwwLDAsMCw0LDYsMSwzLDEsMTcsMSwKLSAgICAxMywxLDUsMSwxMiwxLDEyLDEsMTUsMiwxMiwxLDE4LDIsMjUsMSwKLSAgICAxMTcsMTYsMCwwLDAsOTUsMTAzLDEwMSwxMTYsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsCi0gICAgOTUsMTA4LDExMSw5OSwxMDcsOTksMSwwLDAsMCwwLDAsMCwwLDIsMCwKLSAgICAwLDAsMTEsMCwwLDAsNjcsMCwwLDAsMTE1LDcxLDAsMCwwLDExNiwKLSAgICAwLDAsMTI0LDAsMCwxMzEsMSwwLDEyNSwxLDAsMTE2LDEsMCwxMDYsMiwKLSAgICAwLDEzMSwwLDAsMSwxMjEsMTQsMCwxMjQsMSwwLDEwNiwzLDAsMTMxLDAsCi0gICAgMCwxLDg3LDExMCwxOCwwLDQsMTE2LDQsMCwxMDcsMTAsMCwxMTQsNTYsMCwKLSAgICAxLDEsMSw4OSwxMTAsMTEsMCw4OCwxMjQsMSwwLDEwNiw1LDAsMTMxLDAsCi0gICAgMCwxLDEwMCwxLDAsODMsNDAsMiwwLDAsMCwxMTcsMjEsMSwwLDAsCi0gICAgODIsMTAxLDEwOCwxMDEsOTcsMTE1LDEwMSwzMiwxMTYsMTA0LDEwMSwzMiwxMDMsMTA4LDExMSw5OCwKLSAgICA5NywxMDgsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMzIsMTA4LDExMSw5OSwxMDcsNDQsMzIsCi0gICAgOTcsMTEwLDEwMCwzMiw5Nyw5OSwxMTMsMTE3LDEwNSwxMTQsMTAxLDExNSwzMiwxMTYsMTA0LDEwMSwKLSAgICAxMTAsMzIsMTE0LDEwMSwxMDgsMTAxLDk3LDExNSwxMDEsMzIsMTE2LDEwNCwxMDEsMTAsMzIsMzIsCi0gICAgMzIsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTA4LDExMSw5OSwxMDcsMzIsMTAyLDExMSwKLSAgICAxMTQsMzIsOTcsMzIsMTAzLDEwNSwxMTgsMTAxLDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwKLSAgICAzMiwxMTAsOTcsMTA5LDEwMSw0NiwxMCwzMiwzMiwzMiwzMiw4NCwxMDQsMTA1LDExNSwzMiwKLSAgICAxMDUsMTE1LDMyLDExNywxMTUsMTAxLDEwMCwzMiwxMTYsMTExLDMyLDEwMSwxMTAsMTE1LDExNywxMTQsCi0gICAgMTAxLDMyLDk3LDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEwNSwxMTUsMzIsOTksMTExLAotICAgIDEwOSwxMTIsMTA4LDEwMSwxMTYsMTAxLDEwOCwxMjEsMzIsMTA1LDExMCwxMDUsMTE2LDEwNSw5NywxMDgsCi0gICAgMTA1LDEyMiwxMDEsMTAwLDQ0LDMyLDEwNSwxMTAsMzIsMTE2LDEwNCwxMDEsMTAsMzIsMzIsMzIsCi0gICAgMzIsMTAxLDExOCwxMDEsMTEwLDExNiwzMiwxMDUsMTE2LDMyLDEwNSwxMTUsMzIsOTgsMTAxLDEwNSwKLSAgICAxMTAsMTAzLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMDAsMzIsOTgsMTIxLDMyLDk3LAotICAgIDExMCwxMTEsMTE2LDEwNCwxMDEsMTE0LDMyLDExNiwxMDQsMTE0LDEwMSw5NywxMDAsNDYsMTAsMTAsCisgICAgMTI0LDEsMCwxMjQsMCwwLDk1LDAsMCwxMDAsMCwwLDEyNCwwLDAsOTUsCisgICAgMSwwLDEwMCwwLDAsODMsNDEsMSw3OCw0MSwyLDExNCw3MCwwLDAsMCwKKyAgICAyMTgsNSw5NSwxMDgsMTExLDk5LDEwNyw0MSwyLDExNCw3MSwwLDAsMCwxMTQsNjcsCisgICAgMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwKKyAgICAwLDAsMTE0LDcyLDAsMCwwLDEsMSwwLDAsMTE1LDQsMCwwLDAsCisgICAgMCwxLDksMSwxMjIsMjcsOTUsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsOTksCisgICAgMTA3LDc3LDk3LDExMCw5NywxMDMsMTAxLDExNCw0Niw5NSw5NSwxMDUsMTEwLDEwNSwxMTYsOTUsCisgICAgOTUsOTksMSwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMTAsMCwKKyAgICAwLDAsNjcsMCwwLDAsMTE1LDUzLDAsMCwwLDEyMiwyMiwwLDExNiwwLAorICAgIDAsMTI0LDAsMCwxMDYsMSwwLDEzMSwxLDAsMTI0LDAsMCw5NSwyLDAsCisgICAgODcsMTAwLDAsMCwxMTYsMywwLDEwNiw0LDAsMTMxLDAsMCwxLDg4LDEyNCwKKyAgICAwLDAsMTA2LDIsMCwxMDYsNSwwLDEzMSwwLDAsMSwxMDAsMCwwLDgzLAorICAgIDQxLDEsNzgsNDEsNiwyMTgsMTYsOTUsMTAzLDEwMSwxMTYsOTUsMTA5LDExMSwxMDAsMTE3LAorICAgIDEwOCwxMDEsOTUsMTA4LDExMSw5OSwxMDcsMTE0LDcwLDAsMCwwLDExNCwxMDQsMCwwLAorICAgIDAsMjE4LDQsOTUsMTA1LDEwOSwxMTIsMjE4LDEyLDExNCwxMDEsMTA4LDEwMSw5NywxMTUsMTAxLAorICAgIDk1LDEwOCwxMTEsOTksMTA3LDExNCw5NywwLDAsMCw0MSwxLDExNCw3MSwwLDAsCisgICAgMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwKKyAgICAxMTQsNzUsMCwwLDAsNSwxLDAsMCwxMTUsOCwwLDAsMCwwLDEsCisgICAgMywxLDIyLDIsMTEsMSwxMjIsMjgsOTUsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw3NiwKKyAgICAxMTEsOTksMTA3LDc3LDk3LDExMCw5NywxMDMsMTAxLDExNCw0Niw5NSw5NSwxMDEsMTEwLDExNiwKKyAgICAxMDEsMTE0LDk1LDk1LDk5LDEsMCwwLDAsMCwwLDAsMCwzLDAsMCwKKyAgICAwLDEsMCwwLDAsNzksMCwwLDAsMTE1LDE3LDAsMCwwLDEyNCwwLAorICAgIDAsMTA2LDAsMCwxMDYsMSwwLDEzMSwwLDAsMSwxMDAsMCwwLDgzLDQxLAorICAgIDEsNzgsNDEsMiwxMTQsMTA0LDAsMCwwLDExNCw5OCwwLDAsMCw0MSwzLAorICAgIDExNCw3MSwwLDAsMCwxMTQsODAsMCwwLDAsMjE4LDYsMTA3LDExOSw5NywxMTQsCisgICAgMTAzLDExNSwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsCisgICAgMCwxMTQsODEsMCwwLDAsMTIsMSwwLDAsMTE1LDIsMCwwLDAsMCwKKyAgICAxLDEyMiwyNyw5NSw3NywxMTEsMTAwLDExNywxMDgsMTAxLDc2LDExMSw5OSwxMDcsNzcsOTcsCisgICAgMTEwLDk3LDEwMywxMDEsMTE0LDQ2LDk1LDk1LDEwMSwxMjAsMTA1LDExNiw5NSw5NSw3OCw0MSwKKyAgICA2LDExNCw1NywwLDAsMCwxMTQsNTYsMCwwLDAsMTE0LDU4LDAsMCwwLAorICAgIDExNCw3MiwwLDAsMCwxMTQsNzUsMCwwLDAsMTE0LDgxLDAsMCwwLDExNCwKKyAgICA0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LAorICAgIDAsMCwwLDExNCwxMDMsMCwwLDAsMjU1LDAsMCwwLDExNSw2LDAsMCwKKyAgICAwLDEyLDIsMTIsNCwxMiw3LDExNCwxMDMsMCwwLDAsOTksMSwwLDAsCisgICAgMCwwLDAsMCwwLDMsMCwwLDAsMTEsMCwwLDAsMywwLDAsCisgICAgMCwxMTUsMTQyLDAsMCwwLDEwMCwxLDAsMTI1LDEsMCwxMjEsMTcsMCwxMTYsCisgICAgMCwwLDEzNiwwLDAsMjUsMTMxLDAsMCwxMjUsMSwwLDg3LDExMCwxOCwwLAorICAgIDQsMTE2LDEsMCwxMDcsMTAsMCwxMTQsNDMsMCwxLDEsMSw4OSwxMTAsMSwKKyAgICAwLDg4LDEyNCwxLDAsMTAwLDEsMCwxMDcsOCwwLDExNCwxMzgsMCwxMTYsMiwKKyAgICAwLDEwMCwxLDAsMTA3LDgsMCwxMTQsODMsMCwxMTYsMywwLDEzNiwwLDAsCisgICAgMTMxLDEsMCwxMjUsMSwwLDExMCwxMiwwLDExNiw0LDAsMTM2LDAsMCwxMzEsCisgICAgMSwwLDEyNSwxLDAsMTM1LDAsMCwxMDIsMSwwLDEwMCwyLDAsMTAwLDMsCisgICAgMCwxMzQsMCwwLDEyNSwyLDAsMTE2LDUsMCwxMDYsNiwwLDEyNCwxLDAsCisgICAgMTI0LDIsMCwxMzEsMiwwLDExNiwwLDAsMTM2LDAsMCw2MCwxMTAsMCwwLAorICAgIDEyNCwxLDAsODMsNDEsNCwxMjIsMTA5LDcxLDEwMSwxMTYsMzIsMTExLDExNCwzMiw5OSwKKyAgICAxMTQsMTAxLDk3LDExNiwxMDEsMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsCisgICAgMzIsMTA4LDExMSw5OSwxMDcsMzIsMTAyLDExMSwxMTQsMzIsOTcsMzIsMTAzLDEwNSwxMTgsMTAxLAorICAgIDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMTAsOTcsMTA5LDEwMSw0NiwxMCwxMCwKICAgICAzMiwzMiwzMiwzMiw4MywxMDQsMTExLDExNywxMDgsMTAwLDMyLDExMSwxMTAsMTA4LDEyMSwzMiwKICAgICA5OCwxMDEsMzIsOTksOTcsMTA4LDEwOCwxMDEsMTAwLDMyLDExOSwxMDUsMTE2LDEwNCwzMiwxMTYsCiAgICAgMTA0LDEwMSwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwzMiwxMDgsMTExLDk5LDEwNywzMiwxMTYsCi0gICAgOTcsMTA3LDEwMSwxMTAsNDYsNzgsNDAsNiwwLDAsMCwxMTcsMTYsMCwwLDAsCi0gICAgOTUsMTAzLDEwMSwxMTYsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTA4LDExMSw5OSwxMDcsCi0gICAgMTE3LDQsMCwwLDAsOTUsMTA1LDEwOSwxMTIsMTE3LDEyLDAsMCwwLDExNCwxMDEsCi0gICAgMTA4LDEwMSw5NywxMTUsMTAxLDk1LDEwOCwxMTEsOTksMTA3LDExNyw3LDAsMCwwLDk3LAotICAgIDk5LDExMywxMTcsMTA1LDExNCwxMDEsMTE3LDE0LDAsMCwwLDk1LDY4LDEwMSw5NywxMDAsCi0gICAgMTA4LDExMSw5OSwxMDcsNjksMTE0LDExNCwxMTEsMTE0LDExNyw3LDAsMCwwLDExNCwxMDEsCi0gICAgMTA4LDEwMSw5NywxMTUsMTAxLDQwLDIsMCwwLDAsMTE3LDQsMCwwLDAsMTEwLAotICAgIDk3LDEwOSwxMDEsMTE3LDQsMCwwLDAsMTA4LDExMSw5OSwxMDcsNDAsMCwwLDAsCi0gICAgMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsCi0gICAgMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwKLSAgICAxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTksMCwwLDAsOTUsMTA4LDExMSwKLSAgICA5OSwxMDcsOTUsMTE3LDExMCwxMDgsMTExLDk5LDEwNyw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwKLSAgICAyOSwxLDAsMCwxMTUsMTQsMCwwLDAsMCw3LDEyLDEsMTAsMSwzLAotICAgIDEsMTQsMSwxMywzLDUsMiwxMTcsMTksMCwwLDAsOTUsMTA4LDExMSw5OSwKLSAgICAxMDcsOTUsMTE3LDExMCwxMDgsMTExLDk5LDEwNyw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5OSwKLSAgICAxLDAsMCwwLDAsMCwwLDAsMywwLDAsMCwzLDAsMCwwLAotICAgIDc5LDAsMCwwLDExNSwxMywwLDAsMCwxMjQsMCwwLDEyNCwxLDAsMTI0LAotICAgIDIsMCwxNDIsMCwwLDgzLDQwLDEsMCwwLDAsMTE3LDQ2LDEsMCwwLAotICAgIDExNCwxMDEsMTA5LDExMSwxMTgsMTAxLDk1LDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsCi0gICAgOTUsMTAyLDExNCw5NywxMDksMTAxLDExNSwzMiwxMDUsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsCi0gICAgMTE2LDQ2LDk5LDMyLDExOSwxMDUsMTA4LDEwOCwzMiw5NywxMDgsMTE5LDk3LDEyMSwxMTUsMzIsCi0gICAgMTE0LDEwMSwxMDksMTExLDExOCwxMDEsMzIsMTE1LDEwMSwxMTMsMTE3LDEwMSwxMTAsOTksMTAxLDExNSwKLSAgICAxMCwzMiwzMiwzMiwzMiwxMTEsMTAyLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsCi0gICAgOTgsMzIsMTAyLDExNCw5NywxMDksMTAxLDExNSwzMiwxMTYsMTA0LDk3LDExNiwzMiwxMDEsMTEwLAotICAgIDEwMCwzMiwxMTksMTA1LDExNiwxMDQsMzIsOTcsMzIsOTksOTcsMTA4LDEwOCwzMiwxMTYsMTExLAotICAgIDMyLDExNiwxMDQsMTA1LDExNSwzMiwxMDIsMTE3LDExMCw5OSwxMTYsMTA1LDExMSwxMTAsMTAsMTAsCi0gICAgMzIsMzIsMzIsMzIsODUsMTE1LDEwMSwzMiwxMDUsMTE2LDMyLDEwNSwxMTAsMTE1LDExNiwxMDEsCi0gICAgOTcsMTAwLDMyLDExMSwxMDIsMzIsOTcsMzIsMTEwLDExMSwxMTQsMTA5LDk3LDEwOCwzMiw5OSwKLSAgICA5NywxMDgsMTA4LDMyLDEwNSwxMTAsMzIsMTEyLDEwOCw5Nyw5OSwxMDEsMTE1LDMyLDExOSwxMDQsCi0gICAgMTAxLDExNCwxMDEsMzIsMTA1LDExMCw5OSwxMDgsMTE3LDEwMCwxMDUsMTEwLDEwMywzMiwxMTYsMTA0LAotICAgIDEwMSwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDEwLDMyLDMyLDMyLDMyLAotICAgIDEwMiwxMTQsOTcsMTA5LDEwMSwxMTUsMzIsMTA1LDExMCwxMTYsMTE0LDExMSwxMDAsMTE3LDk5LDEwMSwKLSAgICAxMTUsMzIsMTE3LDExMCwxMTksOTcsMTEwLDExNiwxMDEsMTAwLDMyLDExMCwxMTEsMTA1LDExNSwxMDEsCi0gICAgMzIsMTA1LDExMCwxMTYsMTExLDMyLDExNiwxMDQsMTAxLDMyLDExNiwxMTQsOTcsOTksMTAxLDk4LAotICAgIDk3LDk5LDEwNywzMiw0MCwxMDEsNDYsMTAzLDQ2LDMyLDExOSwxMDQsMTAxLDExMCwzMiwxMDEsCi0gICAgMTIwLDEwMSw5OSwxMTcsMTE2LDEwNSwxMTAsMTAzLDEwLDMyLDMyLDMyLDMyLDEwOSwxMTEsMTAwLAotICAgIDExNywxMDgsMTAxLDMyLDk5LDExMSwxMDAsMTAxLDQxLDEwLDMyLDMyLDMyLDMyLDQwLDAsCi0gICAgMCwwLDAsNDAsMywwLDAsMCwxMTcsMSwwLDAsMCwxMDIsMTE3LDQsCi0gICAgMCwwLDAsOTcsMTE0LDEwMywxMTUsMTE3LDQsMCwwLDAsMTA3LDExOSwxMDAsMTE1LAotICAgIDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsCi0gICAgMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCwKLSAgICA0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDI1LDAsMCwKLSAgICAwLDk1LDk5LDk3LDEwOCwxMDgsOTUsMTE5LDEwNSwxMTYsMTA0LDk1LDEwMiwxMTQsOTcsMTA5LAotICAgIDEwMSwxMTUsOTUsMTE0LDEwMSwxMDksMTExLDExOCwxMDEsMTAwLDQ5LDEsMCwwLDExNSwyLAotICAgIDAsMCwwLDAsOCwxMTcsMjUsMCwwLDAsOTUsOTksOTcsMTA4LDEwOCw5NSwKLSAgICAxMTksMTA1LDExNiwxMDQsOTUsMTAyLDExNCw5NywxMDksMTAxLDExNSw5NSwxMTQsMTAxLDEwOSwxMTEsCi0gICAgMTE4LDEwMSwxMDAsMTA1LDE1OCwxMiwwLDAsMTE3LDEsMCwwLDAsMTMsMTA1LDE2LAotICAgIDAsMCwwLDExNywxLDAsMCwwLDEwLDEwNSwyNCwwLDAsMCw5OSwxLAotICAgIDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwzLDAsMCwwLDk5LAotICAgIDAsMCwwLDExNSwyOSwwLDAsMCwxMjQsMCwwLDkzLDE5LDAsMTI1LDEsCi0gICAgMCwxMTYsMCwwLDEyNCwxLDAsNjMsMTAwLDAsMCw2NCw4NiwxLDExMywzLAotICAgIDAsMTAwLDEsMCw4Myw0MCwyLDAsMCwwLDEwNSwyNTUsMCwwLDAsNzgsCi0gICAgNDAsMSwwLDAsMCwxMTcsMTcsMCwwLDAsOTUsODIsNjUsODcsOTUsNzcsCi0gICAgNjUsNzEsNzMsNjcsOTUsNzgsODUsNzcsNjYsNjksODIsNDAsMiwwLDAsMCwKLSAgICAxMTcsMiwwLDAsMCw0Niw0OCwxMTcsMSwwLDAsMCwxMTAsNDAsMCwwLAotICAgIDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwKLSAgICAxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LAotICAgIDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsOSwwLDAsMCw2MCwxMDMsCi0gICAgMTAxLDExMCwxMDEsMTIwLDExMiwxMTQsNjIsMTUwLDEsMCwwLDExNSwyLDAsMCwwLAotICAgIDYsMCwxMTcsOSwwLDAsMCw2MCwxMDMsMTAxLDExMCwxMDEsMTIwLDExMiwxMTQsNjIsCi0gICAgMTA1LDAsMCwwLDAsMTA1LDI1LDAsMCwwLDEwNSw4LDAsMCwwLDExNywKLSAgICAxMSwwLDAsMCw5NSw5NSwxMTIsMTIxLDk5LDk3LDk5LDEwNCwxMDEsOTUsOTUsMTE3LAotICAgIDMsMCwwLDAsNDYsMTEyLDEyMSwxMTcsNCwwLDAsMCw0NiwxMTIsMTIxLDk5LAotICAgIDExNyw0LDAsMCwwLDQ2LDExMiwxMjEsMTExLDk5LDIsMCwwLDAsMCwwLAotICAgIDAsMCwxMSwwLDAsMCw2LDAsMCwwLDY3LDAsMCwwLDExNSwxODAsCi0gICAgMCwwLDAsMTI0LDEsMCwxMDAsNSwwLDEwNyw4LDAsMTE0LDI1LDAsMTE2LAotICAgIDEsMCwxMDYsMiwwLDEwNiwzLDAsMTIsMTEwLDMsMCwxMjQsMSwwLDEyNSwKLSAgICAyLDAsMTI0LDIsMCwxMTQsNDYsMCwxMTYsNCwwLDEyNSwzLDAsMTEwLDYsCi0gICAgMCwxMTYsNSwwLDEyNSwzLDAsMTE2LDYsMCwxMjQsMCwwLDEzMSwxLDAsCi0gICAgOTIsMiwwLDEyNSw0LDAsMTI1LDUsMCwxMjQsNSwwLDEwNiw3LDAsMTAwLAotICAgIDEsMCwxMzEsMSwwLDkyLDMsMCwxMjUsNiwwLDEyNSw3LDAsMTI1LDgsCi0gICAgMCwxMTYsMSwwLDEwNiw4LDAsMTA2LDksMCwxMjUsOSwwLDEyNCw5LDAsCi0gICAgMTAwLDUsMCwxMDcsOCwwLDExNCwxMzMsMCwxMTYsMTAsMCwxMDAsMiwwLDEzMSwKLSAgICAxLDAsMTMwLDEsMCwxMTAsMCwwLDEwMCwzLDAsMTA2LDExLDAsMTI0LDYsCi0gICAgMCwxMjQsNywwLDEyNCw5LDAsMTI0LDMsMCwxMDAsNCwwLDI1LDEwMyw0LAotICAgIDAsMTMxLDEsMCwxMjUsMTAsMCwxMTYsMTIsMCwxMjQsNCwwLDExNiwxMywwLAotICAgIDEyNCwxMCwwLDEzMSwzLDAsODMsNDAsNiwwLDAsMCwxMTcsMjQ0LDEsMCwKLSAgICAwLDcxLDEwNSwxMTgsMTAxLDExMCwzMiwxMTYsMTA0LDEwMSwzMiwxMTIsOTcsMTE2LDEwNCwzMiwKLSAgICAxMTYsMTExLDMyLDk3LDMyLDQ2LDExMiwxMjEsMzIsMTAyLDEwNSwxMDgsMTAxLDQ0LDMyLDExNCwKLSAgICAxMDEsMTE2LDExNywxMTQsMTEwLDMyLDExNiwxMDQsMTAxLDMyLDExMiw5NywxMTYsMTA0LDMyLDExNiwKLSAgICAxMTEsMzIsMTA1LDExNiwxMTUsMzIsNDYsMTEyLDEyMSw5OSw0Nyw0NiwxMTIsMTIxLDExMSwzMiwKLSAgICAxMDIsMTA1LDEwOCwxMDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsODQsMTA0LDEwMSwzMiw0NiwKLSAgICAxMTIsMTIxLDMyLDEwMiwxMDUsMTA4LDEwMSwzMiwxMDAsMTExLDEwMSwxMTUsMzIsMTEwLDExMSwxMTYsCi0gICAgMzIsMTEwLDEwMSwxMDEsMTAwLDMyLDExNiwxMTEsMzIsMTAxLDEyMCwxMDUsMTE1LDExNiw1OSwzMiwKLSAgICAxMTYsMTA0LDEwNSwxMTUsMzIsMTE1LDEwNSwxMDksMTEyLDEwOCwxMjEsMzIsMTE0LDEwMSwxMTYsMTE3LAotICAgIDExNCwxMTAsMTE1LDMyLDExNiwxMDQsMTAxLDMyLDExMiw5NywxMTYsMTA0LDMyLDExNiwxMTEsMzIsCi0gICAgMTE2LDEwNCwxMDEsMTAsMzIsMzIsMzIsMzIsNDYsMTEyLDEyMSw5OSw0Nyw0NiwxMTIsMTIxLAotICAgIDExMSwzMiwxMDIsMTA1LDEwOCwxMDEsMzIsOTksOTcsMTA4LDk5LDExNywxMDgsOTcsMTE2LDEwMSwKLSAgICAxMDAsMzIsOTcsMTE1LDMyLDEwNSwxMDIsMzIsMTE2LDEwNCwxMDEsMzIsNDYsMTEyLDEyMSwzMiwKLSAgICAxMDIsMTA1LDEwOCwxMDEsMzIsMTE5LDEwMSwxMTQsMTAxLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LAotICAgIDEwMSwxMDAsNDYsMzIsMzIsODQsMTA0LDEwMSwzMiwxMDEsMTIwLDExNiwxMDEsMTEwLDExNSwxMDUsCi0gICAgMTExLDExMCwxMCwzMiwzMiwzMiwzMiwxMTksMTA1LDEwOCwxMDgsMzIsOTgsMTAxLDMyLDQ2LAotICAgIDExMiwxMjEsOTksMzIsMTE3LDExMCwxMDgsMTAxLDExNSwxMTUsMzIsMTE1LDEyMSwxMTUsNDYsMTAyLAotICAgIDEwOCw5NywxMDMsMTE1LDQ2LDExMSwxMTIsMTE2LDEwNSwxMDksMTA1LDEyMiwxMDEsMzIsMTA1LDExNSwKLSAgICAzMiwxMTAsMTExLDExMCw0NSwxMjIsMTAxLDExNCwxMTEsNDQsMzIsMTE2LDEwNCwxMDEsMTEwLDMyLAotICAgIDEwNSwxMTYsMzIsMTE5LDEwNSwxMDgsMTA4LDMyLDk4LDEwMSwzMiw0NiwxMTIsMTIxLDExMSw0NiwKLSAgICAxMCwxMCwzMiwzMiwzMiwzMiw3MywxMDIsMzIsMTAwLDEwMSw5OCwxMTcsMTAzLDk1LDExMSwKLSAgICAxMTgsMTAxLDExNCwxMTQsMTA1LDEwMCwxMDEsMzIsMTA1LDExNSwzMiwxMTAsMTExLDExNiwzMiw3OCwKLSAgICAxMTEsMTEwLDEwMSw0NCwzMiwxMTYsMTA0LDEwMSwxMTAsMzIsMTA1LDExNiwzMiwxMDksMTE3LDExNSwKLSAgICAxMTYsMzIsOTgsMTAxLDMyLDk3LDMyLDk4LDExMSwxMTEsMTA4LDEwMSw5NywxMTAsMzIsOTcsCi0gICAgMTEwLDEwMCwzMiwxMDUsMTE1LDMyLDExNywxMTUsMTAxLDEwMCwzMiwxMDUsMTEwLDEwLDMyLDMyLAotICAgIDMyLDMyLDExMiwxMDgsOTcsOTksMTAxLDMyLDExMSwxMDIsMzIsMTE1LDEyMSwxMTUsNDYsMTAyLAotICAgIDEwOCw5NywxMDMsMTE1LDQ2LDExMSwxMTIsMTE2LDEwNSwxMDksMTA1LDEyMiwxMDEsNDYsMTAsMTAsCi0gICAgMzIsMzIsMzIsMzIsNzMsMTAyLDMyLDExNSwxMjEsMTE1LDQ2LDEwNSwxMDksMTEyLDEwOCwxMDEsCi0gICAgMTA5LDEwMSwxMTAsMTE2LDk3LDExNiwxMDUsMTExLDExMCw0Niw5OSw5Nyw5OSwxMDQsMTAxLDk1LAotICAgIDExNiw5NywxMDMsMzIsMTA1LDExNSwzMiw3OCwxMTEsMTEwLDEwMSwzMiwxMTYsMTA0LDEwMSwxMTAsCi0gICAgMzIsNzgsMTExLDExNiw3MywxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LDEwMSwxMDAsNjksCi0gICAgMTE0LDExNCwxMTEsMTE0LDMyLDEwNSwxMTUsMzIsMTE0LDk3LDEwNSwxMTUsMTAxLDEwMCw0NiwxMCwKLSAgICAxMCwzMiwzMiwzMiwzMiwxMTcsMSwwLDAsMCw0NiwxMTcsMzYsMCwwLDAsCi0gICAgMTE1LDEyMSwxMTUsNDYsMTA1LDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsOTcsMTE2LDEwNSwKLSAgICAxMTEsMTEwLDQ2LDk5LDk3LDk5LDEwNCwxMDEsOTUsMTE2LDk3LDEwMywzMiwxMDUsMTE1LDMyLAotICAgIDc4LDExMSwxMTAsMTAxLDExNywwLDAsMCwwLDEwNSwwLDAsMCwwLDc4LDQwLAotICAgIDE0LDAsMCwwLDExNyw0LDAsMCwwLDc4LDExMSwxMTAsMTAxLDExNywzLDAsCi0gICAgMCwwLDExNSwxMjEsMTE1LDExNyw1LDAsMCwwLDEwMiwxMDgsOTcsMTAzLDExNSwxMTcsCi0gICAgOCwwLDAsMCwxMTEsMTEyLDExNiwxMDUsMTA5LDEwNSwxMjIsMTAxLDExNywyMywwLDAsCi0gICAgMCw2OCw2OSw2Niw4NSw3MSw5NSw2Niw4OSw4NCw2OSw2Nyw3OSw2OCw2OSw5NSwKLSAgICA4Myw4NSw3MCw3MCw3Myw4OCw2OSw4MywxMTcsMjcsMCwwLDAsNzksODAsODQsCi0gICAgNzMsNzcsNzMsOTAsNjksNjgsOTUsNjYsODksODQsNjksNjcsNzksNjgsNjksOTUsCi0gICAgODMsODUsNzAsNzAsNzMsODgsNjksODMsMTE3LDExLDAsMCwwLDk1LDExMiw5NywKLSAgICAxMTYsMTA0LDk1LDExNSwxMTIsMTA4LDEwNSwxMTYsMTE3LDksMCwwLDAsMTEyLDk3LDExNCwKLSAgICAxMTYsMTA1LDExNiwxMDUsMTExLDExMCwxMTcsMTQsMCwwLDAsMTA1LDEwOSwxMTIsMTA4LDEwMSwKLSAgICAxMDksMTAxLDExMCwxMTYsOTcsMTE2LDEwNSwxMTEsMTEwLDExNyw5LDAsMCwwLDk5LDk3LAotICAgIDk5LDEwNCwxMDEsOTUsMTE2LDk3LDEwMywxMTcsMTksMCwwLDAsNzgsMTExLDExNiw3MywKLSAgICAxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LDEwMSwxMDAsNjksMTE0LDExNCwxMTEsMTE0LDExNywKLSAgICA0LDAsMCwwLDEwNiwxMTEsMTA1LDExMCwxMTcsMTAsMCwwLDAsOTUsMTEyLDk3LAotICAgIDExNiwxMDQsOTUsMTA2LDExMSwxMDUsMTEwLDExNyw4LDAsMCwwLDk1LDgwLDg5LDY3LAotICAgIDY1LDY3LDcyLDY5LDQwLDExLDAsMCwwLDExNyw0LDAsMCwwLDExMiw5NywKLSAgICAxMTYsMTA0LDExNywxNCwwLDAsMCwxMDAsMTAxLDk4LDExNywxMDMsOTUsMTExLDExOCwxMDEsCi0gICAgMTE0LDExNCwxMDUsMTAwLDEwMSwxMTcsNSwwLDAsMCwxMDAsMTAxLDk4LDExNywxMDMsMTE3LAotICAgIDgsMCwwLDAsMTE1LDExNywxMDIsMTAyLDEwNSwxMjAsMTAxLDExNSwxMTcsNCwwLDAsCi0gICAgMCwxMDQsMTAxLDk3LDEwMCwxMTcsNCwwLDAsMCwxMTYsOTcsMTA1LDEwOCwxMTcsMTMsCi0gICAgMCwwLDAsOTgsOTcsMTE1LDEwMSw5NSwxMDIsMTA1LDEwOCwxMDEsMTEwLDk3LDEwOSwxMDEsCi0gICAgMTE3LDMsMCwwLDAsMTE1LDEwMSwxMTIsMTE3LDEsMCwwLDAsOTUsMTE3LDMsCi0gICAgMCwwLDAsMTE2LDk3LDEwMywxMTcsOCwwLDAsMCwxMDIsMTA1LDEwOCwxMDEsMTEwLAotICAgIDk3LDEwOSwxMDEsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLAotICAgIDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwKLSAgICAxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsCi0gICAgMTcsMCwwLDAsOTksOTcsOTksMTA0LDEwMSw5NSwxMDIsMTE0LDExMSwxMDksOTUsMTE1LAotICAgIDExMSwxMTcsMTE0LDk5LDEwMSwxNTksMSwwLDAsMTE1LDIyLDAsMCwwLDAsMTMsCi0gICAgMzEsMSw2LDEsOSwyLDYsMSwxOCwxLDI0LDEsMTIsMSwxMiwxLAotICAgIDE1LDEsMzEsMSwxMTcsMTcsMCwwLDAsOTksOTcsOTksMTA0LDEwMSw5NSwxMDIsCi0gICAgMTE0LDExMSwxMDksOTUsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw5OSwxLDAsMCwwLDAsCi0gICAgMCwwLDAsNSwwLDAsMCw1LDAsMCwwLDY3LDAsMCwwLDExNSwKLSAgICAxOTMsMCwwLDAsMTE2LDAsMCwxMDYsMSwwLDEwNiwyLDAsMTAwLDcsMCwKLSAgICAxMDcsOCwwLDExNCwzMywwLDExNiw0LDAsMTAwLDEsMCwxMzEsMSwwLDEzMCwKLSAgICAxLDAsMTEwLDAsMCwxMTYsNSwwLDEyNCwwLDAsMTMxLDEsMCw5MiwyLAotICAgIDAsMTI1LDEsMCwxMjUsMiwwLDExNiw1LDAsMTI0LDEsMCwxMzEsMSwwLAotICAgIDkyLDIsMCwxMjUsMSwwLDEyNSwzLDAsMTI0LDMsMCwxMTYsNiwwLDEwNywKLSAgICAzLDAsMTE0LDEwOCwwLDExNiw3LDAsMTAwLDIsMCwxMDYsOCwwLDExNiw2LAotICAgIDAsMTI0LDAsMCwxMzEsMiwwLDEzMSwxLDAsMTMwLDEsMCwxMTAsMCwwLAotICAgIDEyNCwyLDAsMTA2LDksMCwxMDAsMywwLDEzMSwxLDAsMTAwLDQsMCwxMDcsCi0gICAgMywwLDExNCwxNTMsMCwxMTYsNywwLDEwMCw1LDAsMTA2LDgsMCwxMjQsMiwKLSAgICAwLDEzMSwxLDAsMTMxLDEsMCwxMzAsMSwwLDExMCwwLDAsMTI0LDIsMCwKLSAgICAxMDYsMTAsMCwxMDAsMywwLDEzMSwxLDAsMTAwLDYsMCwyNSwxMjUsNCwwLAotICAgIDExNiwxMSwwLDEyNCwxLDAsMTI0LDQsMCwxMTYsMTIsMCwxMDAsNiwwLDI1LAotICAgIDIzLDEzMSwyLDAsODMsNDAsOCwwLDAsMCwxMTcsMTIxLDEsMCwwLDcxLAotICAgIDEwNSwxMTgsMTAxLDExMCwzMiwxMTYsMTA0LDEwMSwzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMTYsMTExLAotICAgIDMyLDk3LDMyLDQ2LDExMiwxMjEsOTksNDYsNDcsNDYsMTEyLDEyMSwxMTEsMzIsMTAyLDEwNSwKKyAgICA5NywxMDcsMTAxLDExMCw0Niw3OCw5OSwxLDAsMCwwLDAsMCwwLDAsMSwKKyAgICAwLDAsMCwyLDAsMCwwLDE5LDAsMCwwLDExNSwxMSwwLDAsMCwKKyAgICAxMTYsMCwwLDEzNiwwLDAsNjEsMTAwLDAsMCw4Myw0MSwxLDc4LDQxLDEsCisgICAgMjE4LDEzLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDEwOCwxMTEsOTksMTA3LDExNSw0MSwKKyAgICAxLDExNCwzNiwwLDAsMCw0MSwxLDExNCw2NywwLDAsMCwxMTQsNCwwLAorICAgIDAsMCwxMTQsNSwwLDAsMCwyMTgsMiw5OSw5OCwzMiwxLDAsMCwxMTUsCisgICAgMiwwLDAsMCwwLDEsMTIyLDI4LDk1LDEwMywxMDEsMTE2LDk1LDEwOSwxMTEsMTAwLAorICAgIDExNywxMDgsMTAxLDk1LDEwOCwxMTEsOTksMTA3LDQ2LDYwLDEwOCwxMTEsOTksOTcsMTA4LDExNSwKKyAgICA2Miw0Niw5OSw5OCw0MSw3LDExNCwxMDksMCwwLDAsMTE0LDc5LDAsMCwwLAorICAgIDExNCw4NSwwLDAsMCwxMTQsMTAyLDAsMCwwLDExNCw4MywwLDAsMCwyMTgsCisgICAgOCw5NSwxMTksMTAxLDk3LDEwNywxMTQsMTAxLDEwMiw5MCwzLDExNCwxMDEsMTAyLDQxLDMsCisgICAgMTE0LDY3LDAsMCwwLDExNCw4NiwwLDAsMCwxMTQsMTEwLDAsMCwwLDExNCwKKyAgICA0LDAsMCwwLDQxLDEsMTE0LDY3LDAsMCwwLDExNCw1LDAsMCwwLAorICAgIDExNCwxMDUsMCwwLDAsMTgsMSwwLDAsMTE1LDI0LDAsMCwwLDAsNCwKKyAgICA2LDEsMywxLDE3LDEsMTMsMSw1LDEsMTIsMSwxMiwxLDE1LDIsCisgICAgMTIsMSwxOCwyLDI1LDEsMTE0LDEwNSwwLDAsMCw5OSwxLDAsMCwwLAorICAgIDAsMCwwLDAsMiwwLDAsMCwxMSwwLDAsMCw2NywwLDAsMCwKKyAgICAxMTUsNzEsMCwwLDAsMTE2LDAsMCwxMjQsMCwwLDEzMSwxLDAsMTI1LDEsCisgICAgMCwxMTYsMSwwLDEwNiwyLDAsMTMxLDAsMCwxLDEyMSwxNCwwLDEyNCwxLAorICAgIDAsMTA2LDMsMCwxMzEsMCwwLDEsODcsMTEwLDE4LDAsNCwxMTYsNCwwLAorICAgIDEwNywxMCwwLDExNCw1NiwwLDEsMSwxLDg5LDExMCwxMSwwLDg4LDEyNCwxLAorICAgIDAsMTA2LDUsMCwxMzEsMCwwLDEsMTAwLDEsMCw4Myw0MSwyLDk3LDIxLAorICAgIDEsMCwwLDgyLDEwMSwxMDgsMTAxLDk3LDExNSwxMDEsMzIsMTE2LDEwNCwxMDEsMzIsMTAzLAorICAgIDEwOCwxMTEsOTgsOTcsMTA4LDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDMyLDEwOCwxMTEsOTksCisgICAgMTA3LDQ0LDMyLDk3LDExMCwxMDAsMzIsOTcsOTksMTEzLDExNywxMDUsMTE0LDEwMSwxMTUsMzIsCisgICAgMTE2LDEwNCwxMDEsMTEwLDMyLDExNCwxMDEsMTA4LDEwMSw5NywxMTUsMTAxLDMyLDExNiwxMDQsMTAxLAorICAgIDEwLDMyLDMyLDMyLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEwOCwxMTEsOTksMTA3LAorICAgIDMyLDEwMiwxMTEsMTE0LDMyLDk3LDMyLDEwMywxMDUsMTE4LDEwMSwxMTAsMzIsMTA5LDExMSwxMDAsCisgICAgMTE3LDEwOCwxMDEsMzIsMTEwLDk3LDEwOSwxMDEsNDYsMTAsMzIsMzIsMzIsMzIsODQsMTA0LAorICAgIDEwNSwxMTUsMzIsMTA1LDExNSwzMiwxMTcsMTE1LDEwMSwxMDAsMzIsMTE2LDExMSwzMiwxMDEsMTEwLAorICAgIDExNSwxMTcsMTE0LDEwMSwzMiw5NywzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMDUsMTE1LAorICAgIDMyLDk5LDExMSwxMDksMTEyLDEwOCwxMDEsMTE2LDEwMSwxMDgsMTIxLDMyLDEwNSwxMTAsMTA1LDExNiwKKyAgICAxMDUsOTcsMTA4LDEwNSwxMjIsMTAxLDEwMCw0NCwzMiwxMDUsMTEwLDMyLDExNiwxMDQsMTAxLDEwLAorICAgIDMyLDMyLDMyLDMyLDEwMSwxMTgsMTAxLDExMCwxMTYsMzIsMTA1LDExNiwzMiwxMDUsMTE1LDMyLAorICAgIDk4LDEwMSwxMDUsMTEwLDEwMywzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTAwLDMyLDk4LAorICAgIDEyMSwzMiw5NywxMTAsMTExLDExNiwxMDQsMTAxLDExNCwzMiwxMTYsMTA0LDExNCwxMDEsOTcsMTAwLAorICAgIDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDgzLDEwNCwxMTEsMTE3LDEwOCwxMDAsMzIsMTExLDExMCwKKyAgICAxMDgsMTIxLDMyLDk4LDEwMSwzMiw5OSw5NywxMDgsMTA4LDEwMSwxMDAsMzIsMTE5LDEwNSwxMTYsCisgICAgMTA0LDMyLDExNiwxMDQsMTAxLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDMyLDEwOCwxMTEsOTksCisgICAgMTA3LDMyLDExNiw5NywxMDcsMTAxLDExMCw0Niw3OCw0MSw2LDExNCwxMDUsMCwwLDAsCisgICAgMTE0LDEwNiwwLDAsMCwxMTQsMTA3LDAsMCwwLDExNCw5NywwLDAsMCwxMTQsCisgICAgODIsMCwwLDAsMTE0LDk4LDAsMCwwLDQxLDIsMTE0LDY3LDAsMCwwLAorICAgIDExNCw4NiwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsCisgICAgNSwwLDAsMCwyMTgsMTksOTUsMTA4LDExMSw5OSwxMDcsOTUsMTE3LDExMCwxMDgsMTExLAorICAgIDk5LDEwNyw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzNywxLDAsMCwxMTUsMTQsMCwKKyAgICAwLDAsMCw3LDEyLDEsMTAsMSwzLDEsMTQsMSwxMywzLDUsMiwKKyAgICAxMTQsMTEyLDAsMCwwLDk5LDEsMCwwLDAsMCwwLDAsMCwzLDAsCisgICAgMCwwLDMsMCwwLDAsNzksMCwwLDAsMTE1LDEzLDAsMCwwLDEyNCwKKyAgICAwLDAsMTI0LDEsMCwxMjQsMiwwLDE0MiwwLDAsODMsNDEsMSw5Nyw0NiwKKyAgICAxLDAsMCwxMTQsMTAxLDEwOSwxMTEsMTE4LDEwMSw5NSwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwKKyAgICAxMDgsMTA1LDk4LDk1LDEwMiwxMTQsOTcsMTA5LDEwMSwxMTUsMzIsMTA1LDExMCwzMiwxMDUsMTA5LAorICAgIDExMiwxMTEsMTE0LDExNiw0Niw5OSwzMiwxMTksMTA1LDEwOCwxMDgsMzIsOTcsMTA4LDExOSw5NywKKyAgICAxMjEsMTE1LDMyLDExNCwxMDEsMTA5LDExMSwxMTgsMTAxLDMyLDExNSwxMDEsMTEzLDExNywxMDEsMTEwLAorICAgIDk5LDEwMSwxMTUsMTAsMzIsMzIsMzIsMzIsMTExLDEwMiwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LAorICAgIDExNiwxMDgsMTA1LDk4LDMyLDEwMiwxMTQsOTcsMTA5LDEwMSwxMTUsMzIsMTE2LDEwNCw5NywxMTYsCisgICAgMzIsMTAxLDExMCwxMDAsMzIsMTE5LDEwNSwxMTYsMTA0LDMyLDk3LDMyLDk5LDk3LDEwOCwxMDgsCisgICAgMzIsMTE2LDExMSwzMiwxMTYsMTA0LDEwNSwxMTUsMzIsMTAyLDExNywxMTAsOTksMTE2LDEwNSwxMTEsCisgICAgMTEwLDEwLDEwLDMyLDMyLDMyLDMyLDg1LDExNSwxMDEsMzIsMTA1LDExNiwzMiwxMDUsMTEwLAorICAgIDExNSwxMTYsMTAxLDk3LDEwMCwzMiwxMTEsMTAyLDMyLDk3LDMyLDExMCwxMTEsMTE0LDEwOSw5NywKKyAgICAxMDgsMzIsOTksOTcsMTA4LDEwOCwzMiwxMDUsMTEwLDMyLDExMiwxMDgsOTcsOTksMTAxLDExNSwKKyAgICAzMiwxMTksMTA0LDEwMSwxMTQsMTAxLDMyLDEwNSwxMTAsOTksMTA4LDExNywxMDAsMTA1LDExMCwxMDMsCisgICAgMzIsMTE2LDEwNCwxMDEsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCwxMCwzMiwKKyAgICAzMiwzMiwzMiwxMDIsMTE0LDk3LDEwOSwxMDEsMTE1LDMyLDEwNSwxMTAsMTE2LDExNCwxMTEsMTAwLAorICAgIDExNyw5OSwxMDEsMTE1LDMyLDExNywxMTAsMTE5LDk3LDExMCwxMTYsMTAxLDEwMCwzMiwxMTAsMTExLAorICAgIDEwNSwxMTUsMTAxLDMyLDEwNSwxMTAsMTE2LDExMSwzMiwxMTYsMTA0LDEwMSwzMiwxMTYsMTE0LDk3LAorICAgIDk5LDEwMSw5OCw5Nyw5OSwxMDcsMzIsNDAsMTAxLDQ2LDEwMyw0NiwzMiwxMTksMTA0LDEwMSwKKyAgICAxMTAsMzIsMTAxLDEyMCwxMDEsOTksMTE3LDExNiwxMDUsMTEwLDEwMywxMCwzMiwzMiwzMiwzMiwKKyAgICAxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiw5OSwxMTEsMTAwLDEwMSw0MSwxMCwzMiwzMiwzMiwKKyAgICAzMiwxMTQsNCwwLDAsMCw0MSwzLDIxOCwxLDEwMiwxMTQsODAsMCwwLDAsCisgICAgOTAsNCwxMDcsMTE5LDEwMCwxMTUsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsCisgICAgMTE0LDUsMCwwLDAsMjE4LDI1LDk1LDk5LDk3LDEwOCwxMDgsOTUsMTE5LDEwNSwxMTYsCisgICAgMTA0LDk1LDEwMiwxMTQsOTcsMTA5LDEwMSwxMTUsOTUsMTE0LDEwMSwxMDksMTExLDExOCwxMDEsMTAwLAorICAgIDU3LDEsMCwwLDExNSwyLDAsMCwwLDAsOCwxMTQsMTE0LDAsMCwwLAorICAgIDEwNSwyMzgsMTIsMCwwLDIzMywyLDAsMCwwLDExNCwxMywwLDAsMCwxMTUsCisgICAgMiwwLDAsMCwxMywxMCw5MCwxMSw5NSw5NSwxMTIsMTIxLDk5LDk3LDk5LDEwNCwKKyAgICAxMDEsOTUsOTUsMTIyLDMsNDYsMTEyLDEyMSwxMjIsNCw0NiwxMTIsMTIxLDk5LDEyMiw0LAorICAgIDQ2LDExMiwxMjEsMTExLDc4LDk5LDIsMCwwLDAsMCwwLDAsMCwxMSwwLAorICAgIDAsMCw2LDAsMCwwLDY3LDAsMCwwLDExNSwxOTIsMCwwLDAsMTI0LAorICAgIDEsMCwxMDAsMSwwLDEwNyw4LDAsMTE0LDI1LDAsMTE2LDAsMCwxMDYsMSwKKyAgICAwLDEwNiwyLDAsMTIsMTEwLDMsMCwxMjQsMSwwLDEyNSwyLDAsMTI0LDIsCisgICAgMCwxMTQsNDYsMCwxMTYsMywwLDEyNSwzLDAsMTEwLDYsMCwxMTYsNCwwLAorICAgIDEyNSwzLDAsMTE2LDUsMCwxMjQsMCwwLDEzMSwxLDAsOTIsMiwwLDEyNSwKKyAgICA0LDAsMTI1LDUsMCwxMjQsNSwwLDEwNiw2LDAsMTAwLDIsMCwxMzEsMSwKKyAgICAwLDkyLDMsMCwxMjUsNiwwLDEyNSw3LDAsMTI1LDgsMCwxMTYsMCwwLAorICAgIDEwNiw3LDAsMTA2LDgsMCwxMjUsOSwwLDEyNCw5LDAsMTAwLDEsMCwxMDcsCisgICAgOCwwLDExNCwxMzMsMCwxMTYsOSwwLDEwMCwzLDAsMTMxLDEsMCwxMzAsMSwKKyAgICAwLDExMCwwLDAsMTAwLDQsMCwxMDYsMTAsMCwxMjQsNiwwLDExNCwxNTEsMCwKKyAgICAxMjQsNiwwLDExMCwzLDAsMTI0LDgsMCwxMjQsNywwLDEyNCw5LDAsMTI0LAorICAgIDMsMCwxMDAsNSwwLDI1LDEwMyw0LDAsMTMxLDEsMCwxMjUsMTAsMCwxMTYsCisgICAgMTEsMCwxMjQsNCwwLDExNiwxMiwwLDEyNCwxMCwwLDEzMSwzLDAsODMsNDEsCisgICAgNiw5NywyNDQsMSwwLDAsNzEsMTA1LDExOCwxMDEsMTEwLDMyLDExNiwxMDQsMTAxLDMyLAorICAgIDExMiw5NywxMTYsMTA0LDMyLDExNiwxMTEsMzIsOTcsMzIsNDYsMTEyLDEyMSwzMiwxMDIsMTA1LAogICAgIDEwOCwxMDEsNDQsMzIsMTE0LDEwMSwxMTYsMTE3LDExNCwxMTAsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLAotICAgIDk3LDExNiwxMDQsMzIsMTE2LDExMSwzMiwxMDUsMTE2LDExNSwzMiw0NiwxMTIsMTIxLDMyLDEwMiwKLSAgICAxMDUsMTA4LDEwMSw0NiwxMCwxMCwzMiwzMiwzMiwzMiw4NCwxMDQsMTAxLDMyLDQ2LDExMiwKLSAgICAxMjEsOTksNDcsNDYsMTEyLDEyMSwxMTEsMzIsMTAyLDEwNSwxMDgsMTAxLDMyLDEwMCwxMTEsMTAxLAorICAgIDk3LDExNiwxMDQsMzIsMTE2LDExMSwzMiwxMDUsMTE2LDExNSwzMiw0NiwxMTIsMTIxLDk5LDQ3LAorICAgIDQ2LDExMiwxMjEsMTExLDMyLDEwMiwxMDUsMTA4LDEwMSw0NiwxMCwxMCwzMiwzMiwzMiwzMiwKKyAgICA4NCwxMDQsMTAxLDMyLDQ2LDExMiwxMjEsMzIsMTAyLDEwNSwxMDgsMTAxLDMyLDEwMCwxMTEsMTAxLAogICAgIDExNSwzMiwxMTAsMTExLDExNiwzMiwxMTAsMTAxLDEwMSwxMDAsMzIsMTE2LDExMSwzMiwxMDEsMTIwLAogICAgIDEwNSwxMTUsMTE2LDU5LDMyLDExNiwxMDQsMTA1LDExNSwzMiwxMTUsMTA1LDEwOSwxMTIsMTA4LDEyMSwKICAgICAzMiwxMTQsMTAxLDExNiwxMTcsMTE0LDExMCwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLDk3LDExNiwKLSAgICAxMDQsMzIsMTE2LDExMSwxMCwzMiwzMiwzMiwzMiwxMTYsMTA0LDEwMSwzMiw0NiwxMTIsMTIxLAotICAgIDMyLDEwMiwxMDUsMTA4LDEwMSwzMiw5OSw5NywxMDgsOTksMTE3LDEwOCw5NywxMTYsMTAxLDEwMCwKLSAgICAzMiwxMTYsMTExLDMyLDk5LDExMSwxMTQsMTE0LDEwMSwxMTUsMTEyLDExMSwxMTAsMTAwLDMyLDExNiwKLSAgICAxMTEsMzIsMTE2LDEwNCwxMDEsMzIsNDYsMTEyLDEyMSw5OSw0Nyw0NiwxMTIsMTIxLDExMSwzMiwKLSAgICAxMDIsMTA1LDEwOCwxMDEsNDYsMzIsMzIsNzMsMTAyLDMyLDExMiw5NywxMTYsMTA0LDMyLDEwMCwKLSAgICAxMTEsMTAxLDExNSwxMCwzMiwzMiwzMiwzMiwxMTAsMTExLDExNiwzMiw5OSwxMTEsMTEwLDEwMiwKLSAgICAxMTEsMTE0LDEwOSwzMiwxMTYsMTExLDMyLDgwLDY5LDgwLDMyLDUxLDQ5LDUyLDU1LDMyLAotICAgIDEwMiwxMTEsMTE0LDEwOSw5NywxMTYsNDQsMzIsODYsOTcsMTA4LDExNywxMDEsNjksMTE0LDExNCwKLSAgICAxMTEsMTE0LDMyLDExOSwxMDUsMTA4LDEwOCwzMiw5OCwxMDEsMzIsMTE0LDk3LDEwNSwxMTUsMTAxLAotICAgIDEwMCw0NiwzMiw3MywxMDIsMTAsMzIsMzIsMzIsMzIsMTE1LDEyMSwxMTUsNDYsMTA1LDEwOSwKLSAgICAxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsOTcsMTE2LDEwNSwxMTEsMTEwLDQ2LDk5LDk3LDk5LAotICAgIDEwNCwxMDEsOTUsMTE2LDk3LDEwMywzMiwxMDUsMTE1LDMyLDc4LDExMSwxMTAsMTAxLDMyLDExNiwKLSAgICAxMDQsMTAxLDExMCwzMiw3OCwxMTEsMTE2LDczLDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsCi0gICAgMTAxLDEwMCw2OSwxMTQsMTE0LDExMSwxMTQsMzIsMTA1LDExNSwzMiwxMTQsOTcsMTA1LDExNSwxMDEsCi0gICAgMTAwLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDExNywzNiwwLDAsMCwxMTUsMTIxLDExNSwKLSAgICA0NiwxMDUsMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiw5NywxMTYsMTA1LDExMSwxMTAsNDYsCi0gICAgOTksOTcsOTksMTA0LDEwMSw5NSwxMTYsOTcsMTAzLDMyLDEwNSwxMTUsMzIsNzgsMTExLDExMCwKLSAgICAxMDEsMTE3LDM3LDAsMCwwLDEyMywxMjUsMzIsMTEwLDExMSwxMTYsMzIsOTgsMTExLDExNiwKLSAgICAxMTYsMTExLDEwOSw0NSwxMDgsMTAxLDExOCwxMDEsMTA4LDMyLDEwMCwxMDUsMTE0LDEwMSw5OSwxMTYsCi0gICAgMTExLDExNCwxMjEsMzIsMTA1LDExMCwzMiwxMjMsMzMsMTE0LDEyNSwxMTcsMSwwLDAsMCwKLSAgICA0NiwxMDUsMiwwLDAsMCwxMTcsMjgsMCwwLDAsMTAxLDEyMCwxMTIsMTAxLDk5LAotICAgIDExNiwxMDEsMTAwLDMyLDExMSwxMTAsMTA4LDEyMSwzMiw1MCwzMiwxMDAsMTExLDExNiwxMTUsMzIsCi0gICAgMTA1LDExMCwzMiwxMjMsMzMsMTE0LDEyNSwxMDUsMCwwLDAsMCw3OCw0MCwxMywwLAotICAgIDAsMCwxMTcsMywwLDAsMCwxMTUsMTIxLDExNSwxMTcsMTQsMCwwLDAsMTA1LAotICAgIDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsOTcsMTE2LDEwNSwxMTEsMTEwLDExNyw5LDAsCi0gICAgMCwwLDk5LDk3LDk5LDEwNCwxMDEsOTUsMTE2LDk3LDEwMywxMTcsNCwwLDAsMCwKLSAgICA3OCwxMTEsMTEwLDEwMSwxMTcsMTksMCwwLDAsNzgsMTExLDExNiw3MywxMDksMTEyLDEwOCwKLSAgICAxMDEsMTA5LDEwMSwxMTAsMTE2LDEwMSwxMDAsNjksMTE0LDExNCwxMTEsMTE0LDExNywxMSwwLDAsCi0gICAgMCw5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMTUsMTEyLDEwOCwxMDUsMTE2LDExNyw4LDAsMCwKLSAgICAwLDk1LDgwLDg5LDY3LDY1LDY3LDcyLDY5LDExNywxMCwwLDAsMCw4Niw5NywKLSAgICAxMDgsMTE3LDEwMSw2OSwxMTQsMTE0LDExMSwxMTQsMTE3LDYsMCwwLDAsMTAyLDExMSwxMTQsCi0gICAgMTA5LDk3LDExNiwxMTcsNSwwLDAsMCw5OSwxMTEsMTE3LDExMCwxMTYsMTE3LDksMCwKLSAgICAwLDAsMTEyLDk3LDExNCwxMTYsMTA1LDExNiwxMDUsMTExLDExMCwxMTcsMTAsMCwwLDAsCi0gICAgOTUsMTEyLDk3LDExNiwxMDQsOTUsMTA2LDExMSwxMDUsMTEwLDExNywxNSwwLDAsMCw4MywKLSAgICA3OSw4NSw4Miw2Nyw2OSw5NSw4Myw4NSw3MCw3MCw3Myw4OCw2OSw4Myw0MCw1LAotICAgIDAsMCwwLDExNyw0LDAsMCwwLDExMiw5NywxMTYsMTA0LDExNyw0LDAsMCwKLSAgICAwLDEwNCwxMDEsOTcsMTAwLDExNywxNiwwLDAsMCwxMTIsMTIxLDk5LDk3LDk5LDEwNCwKLSAgICAxMDEsOTUsMTAyLDEwNSwxMDgsMTAxLDExMCw5NywxMDksMTAxLDExNyw3LDAsMCwwLDExMiwKLSAgICAxMjEsOTksOTcsOTksMTA0LDEwMSwxMTcsMTMsMCwwLDAsOTgsOTcsMTE1LDEwMSw5NSwKLSAgICAxMDIsMTA1LDEwOCwxMDEsMTEwLDk3LDEwOSwxMDEsNDAsMCwwLDAsMCw0MCwwLDAsCi0gICAgMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsCi0gICAgMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsCi0gICAgMTE0LDk3LDExMiw2MiwxMTcsMTcsMCwwLDAsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw5NSwKLSAgICAxMDIsMTE0LDExMSwxMDksOTUsOTksOTcsOTksMTA0LDEwMSwxODYsMSwwLDAsMTE1LDI0LAotICAgIDAsMCwwLDAsOSwxOCwxLDE1LDEsMTgsMSwxOCwxLDEyLDEsOSwKLSAgICAxLDE4LDEsMjEsMSw5LDEsMTUsMSwxOSwxLDExNywxNywwLDAsMCwKLSAgICAxMTUsMTExLDExNywxMTQsOTksMTAxLDk1LDEwMiwxMTQsMTExLDEwOSw5NSw5OSw5Nyw5OSwxMDQsCi0gICAgMTAxLDk5LDEsMCwwLDAsMCwwLDAsMCw1LDAsMCwwLDEzLDAsCi0gICAgMCwwLDY3LDAsMCwwLDExNSwxNjQsMCwwLDAsMTE2LDAsMCwxMjQsMCwKLSAgICAwLDEzMSwxLDAsMTAwLDEsMCwxMDcsMiwwLDExNCwyMiwwLDEwMCw2LDAsCi0gICAgODMsMTI0LDAsMCwxMDYsMiwwLDEwMCwyLDAsMTMxLDEsMCw5MiwzLDAsCi0gICAgMTI1LDEsMCwxMjUsMiwwLDEyNSwzLDAsMTI0LDEsMCwxMiwxMTUsODEsMCwKLSAgICAxMjQsMywwLDEwNiwzLDAsMTMxLDAsMCwxMDAsNywwLDEwMCw4LDAsMTMzLAotICAgIDIsMCwyNSwxMDAsNSwwLDEwNywzLDAsMTE0LDg1LDAsMTI0LDAsMCw4MywKLSAgICAxMjEsMTYsMCwxMTYsNCwwLDEyNCwwLDAsMTMxLDEsMCwxMjUsNCwwLDg3LAotICAgIDExMCw0MCwwLDQsMTE2LDUsMCwxMTYsNiwwLDEwMiwyLDAsMTA3LDEwLDAsCi0gICAgMTE0LDE0MywwLDEsMSwxLDEyNCwwLDAsMTAwLDYsMCwxMDAsOSwwLDEzMywKLSAgICAyLDAsMjUsMTI1LDQsMCw4OSwxMTAsMSwwLDg4LDExNiw3LDAsMTI0LDQsCi0gICAgMCwxMzEsMSwwLDExNCwxNjAsMCwxMjQsNCwwLDgzLDEyNCwwLDAsODMsNDAsCi0gICAgMTAsMCwwLDAsMTE3LDE4OCwwLDAsMCw2NywxMTEsMTEwLDExOCwxMDEsMTE0LDExNiwKLSAgICAzMiw5NywzMiw5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSwzMiwxMDIsMTA1LDEwOCwxMDEsCi0gICAgMzIsMTEyLDk3LDExNiwxMDQsMzIsMTE2LDExMSwzMiw5NywzMiwxMTUsMTExLDExNywxMTQsOTksCi0gICAgMTAxLDMyLDExMiw5NywxMTYsMTA0LDMyLDQwLDEwNSwxMDIsMzIsMTEyLDExMSwxMTUsMTE1LDEwNSwKLSAgICA5OCwxMDgsMTAxLDQxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDg0LDEwNCwxMDUsMTE1LDMyLAotICAgIDEwMiwxMTcsMTEwLDk5LDExNiwxMDUsMTExLDExMCwzMiwxMDEsMTIwLDEwNSwxMTUsMTE2LDExNSwzMiwKLSAgICAxMTIsMTE3LDExNCwxMDEsMTA4LDEyMSwzMiwxMDIsMTExLDExNCwzMiw5OCw5Nyw5OSwxMDcsMTE5LAotICAgIDk3LDExNCwxMDAsMTE1LDQ1LDk5LDExMSwxMDksMTEyLDk3LDExNiwxMDUsOTgsMTA1LDEwOCwxMDUsCi0gICAgMTE2LDEyMSwzMiwxMDIsMTExLDExNCwxMCwzMiwzMiwzMiwzMiw4MCwxMjEsNzMsMTA5LDExMiwKLSAgICAxMTEsMTE0LDExNiw5NSw2OSwxMjAsMTAxLDk5LDY3LDExMSwxMDAsMTAxLDc3LDExMSwxMDAsMTE3LAotICAgIDEwOCwxMDEsODcsMTA1LDExNiwxMDQsNzAsMTA1LDEwOCwxMDEsMTEwLDk3LDEwOSwxMDEsMTE1LDQwLAotICAgIDQxLDMyLDEwNSwxMTAsMzIsMTE2LDEwNCwxMDEsMzIsNjcsMzIsNjUsODAsNzMsNDYsMTAsCi0gICAgMTAsMzIsMzIsMzIsMzIsMTA1LDAsMCwwLDAsMTE3LDEsMCwwLDAsNDYsCi0gICAgMTA1LDMsMCwwLDAsMTA1LDEsMCwwLDAsMTE3LDIsMCwwLDAsMTEyLAotICAgIDEyMSw3OCwxMDUsMjUzLDI1NSwyNTUsMjU1LDEwNSwyNTUsMjU1LDI1NSwyNTUsMTA1LDI1NSwyNTUsMjU1LAotICAgIDI1NSw0MCw4LDAsMCwwLDExNywzLDAsMCwwLDEwOCwxMDEsMTEwLDExNyw0LAotICAgIDAsMCwwLDc4LDExMSwxMTAsMTAxLDExNywxMCwwLDAsMCwxMTQsMTEyLDk3LDExNCwKLSAgICAxMTYsMTA1LDExNiwxMDUsMTExLDExMCwxMTcsNSwwLDAsMCwxMDgsMTExLDExOSwxMDEsMTE0LAotICAgIDExNywxNywwLDAsMCwxMTUsMTExLDExNywxMTQsOTksMTAxLDk1LDEwMiwxMTQsMTExLDEwOSwKLSAgICA5NSw5OSw5Nyw5OSwxMDQsMTAxLDExNywxOSwwLDAsMCw3OCwxMTEsMTE2LDczLDEwOSwKLSAgICAxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsMTAxLDEwMCw2OSwxMTQsMTE0LDExMSwxMTQsMTE3LDEwLAotICAgIDAsMCwwLDg2LDk3LDEwOCwxMTcsMTAxLDY5LDExNCwxMTQsMTExLDExNCwxMTcsMTIsMCwKLSAgICAwLDAsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTA1LDExNSwxMDIsMTA1LDEwOCwxMDEsNDAsNSwKLSAgICAwLDAsMCwxMTcsMTMsMCwwLDAsOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsCi0gICAgOTUsMTEyLDk3LDExNiwxMDQsMTE3LDQsMCwwLDAsMTE0LDEwMSwxMTUsMTE2LDExNywxLAotICAgIDAsMCwwLDk1LDExNyw5LDAsMCwwLDEwMSwxMjAsMTE2LDEwMSwxMTAsMTE1LDEwNSwKLSAgICAxMTEsMTEwLDExNywxMSwwLDAsMCwxMTUsMTExLDExNywxMTQsOTksMTAxLDk1LDExMiw5NywKLSAgICAxMTYsMTA0LDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLAotICAgIDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LAotICAgIDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDE1LAotICAgIDAsMCwwLDk1LDEwMywxMDEsMTE2LDk1LDExNSwxMTEsMTE3LDExNCw5OSwxMDEsMTAyLDEwNSwKLSAgICAxMDgsMTAxLDIwOSwxLDAsMCwxMTUsMjAsMCwwLDAsMCw3LDE4LDEsNCwKLSAgICAxLDI0LDEsMzUsMSw0LDEsMywxLDE2LDEsMTksMSwyMSwxLDExNywKLSAgICAxNSwwLDAsMCw5NSwxMDMsMTAxLDExNiw5NSwxMTUsMTExLDExNywxMTQsOTksMTAxLDEwMiwKLSAgICAxMDUsMTA4LDEwMSwxMTcsOSwwLDAsMCwxMTgsMTAxLDExNCw5OCwxMTEsMTE1LDEwNSwxMTYsCi0gICAgMTIxLDEwNSwxLDAsMCwwLDk5LDEsMCwwLDAsMSwwLDAsMCwzLAotICAgIDAsMCwwLDQsMCwwLDAsNzEsMCwwLDAsMTE1LDgxLDAsMCwwLAotICAgIDExNiwwLDAsMTA2LDEsMCwxMDYsMiwwLDEyNCwxLDAsMTA3LDUsMCwxMTQsCi0gICAgNzcsMCwxMjQsMCwwLDEwNiwzLDAsMTAwLDYsMCwxMzEsMSwwLDExNSw0NiwKLSAgICAwLDEwMCwzLDAsMTI0LDAsMCwyMywxMjUsMCwwLDExMCwwLDAsMTE2LDQsCi0gICAgMCwxMjQsMCwwLDEwNiw1LDAsMTI0LDIsMCwxNDAsMCwwLDEwMCw0LDAsCi0gICAgMTE2LDAsMCwxMDYsNiwwLDEzMSwxLDEsMSwxMTAsMCwwLDEwMCw1LDAsCi0gICAgODMsNDAsNywwLDAsMCwxMTcsNjEsMCwwLDAsODAsMTE0LDEwNSwxMTAsMTE2LAotICAgIDMyLDExNiwxMDQsMTAxLDMyLDEwOSwxMDEsMTE1LDExNSw5NywxMDMsMTAxLDMyLDExNiwxMTEsMzIsCi0gICAgMTE1LDExNiwxMDAsMTAxLDExNCwxMTQsMzIsMTA1LDEwMiwzMiw0NSwxMTgsNDcsODAsODksODQsCi0gICAgNzIsNzksNzgsODYsNjksODIsNjYsNzksODMsNjksMzIsMTA1LDExNSwzMiwxMTYsMTE3LAotICAgIDExNCwxMTAsMTAxLDEwMCwzMiwxMTEsMTEwLDQ2LDExNywxLDAsMCwwLDM1LDExNyw3LAotICAgIDAsMCwwLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDMyLDExNywyLDAsMCwwLDM1LAotICAgIDMyLDExNyw0LDAsMCwwLDEwMiwxMDUsMTA4LDEwMSw3OCw0MCwyLDAsMCwwLAotICAgIDExNywxLDAsMCwwLDM1LDExNyw3LDAsMCwwLDEwNSwxMDksMTEyLDExMSwxMTQsCi0gICAgMTE2LDMyLDQwLDcsMCwwLDAsMTE3LDMsMCwwLDAsMTE1LDEyMSwxMTUsMTE3LAotICAgIDUsMCwwLDAsMTAyLDEwOCw5NywxMDMsMTE1LDExNyw3LDAsMCwwLDExOCwxMDEsCi0gICAgMTE0LDk4LDExMSwxMTUsMTAxLDExNywxMCwwLDAsMCwxMTUsMTE2LDk3LDExNCwxMTYsMTE1LAotICAgIDExOSwxMDUsMTE2LDEwNCwxMTcsNSwwLDAsMCwxMTIsMTE0LDEwNSwxMTAsMTE2LDExNyw2LAotICAgIDAsMCwwLDEwMiwxMTEsMTE0LDEwOSw5NywxMTYsMTE3LDYsMCwwLDAsMTE1LDExNiwKLSAgICAxMDAsMTAxLDExNCwxMTQsNDAsMywwLDAsMCwxMTcsNywwLDAsMCwxMDksMTAxLAotICAgIDExNSwxMTUsOTcsMTAzLDEwMSwxMTcsOSwwLDAsMCwxMTgsMTAxLDExNCw5OCwxMTEsMTE1LAotICAgIDEwNSwxMTYsMTIxLDExNyw0LDAsMCwwLDk3LDExNCwxMDMsMTE1LDQwLDAsMCwwLAotICAgIDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLAotICAgIDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsCi0gICAgMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDE2LDAsMCwwLDk1LDExOCwxMDEsCi0gICAgMTE0LDk4LDExMSwxMTUsMTAxLDk1LDEwOSwxMDEsMTE1LDExNSw5NywxMDMsMTAxLDIyOCwxLDAsCi0gICAgMCwxMTUsOCwwLDAsMCwwLDIsMTgsMSwxNSwxLDEzLDEsMTE3LDE2LAotICAgIDAsMCwwLDk1LDExOCwxMDEsMTE0LDk4LDExMSwxMTUsMTAxLDk1LDEwOSwxMDEsMTE1LDExNSwKLSAgICA5NywxMDMsMTAxLDk5LDEsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLAotICAgIDMsMCwwLDAsMywwLDAsMCwxMTUsMzUsMCwwLDAsMTM1LDAsMCwKLSAgICAxMDIsMSwwLDEwMCwxLDAsMTAwLDIsMCwxMzQsMCwwLDEyNSwxLDAsMTE2LAotICAgIDAsMCwxMjQsMSwwLDEzNiwwLDAsMTMxLDIsMCwxLDEyNCwxLDAsODMsCi0gICAgNDAsMywwLDAsMCwxMTcsMzksMCwwLDAsODMsMTAxLDExNiwzMiw5NSw5NSwKLSAgICAxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsOTUsOTUsMzIsMTExLDExMCwzMiwxMTYsMTA0LDEwMSwKLSAgICAzMiwxMTQsMTAxLDExNiwxMTcsMTE0LDExMCwxMDEsMTAwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAotICAgIDQ2LDk5LDAsMCwwLDAsMCwwLDAsMCwzLDAsMCwwLDQsMCwKLSAgICAwLDAsMzEsMCwwLDAsMTE1LDEwMSwwLDAsMCwxMzYsMCwwLDEyNCwwLAotICAgIDAsMTI0LDEsMCwxNDIsMCwwLDEyNSwyLDAsMTE2LDAsMCwxMjQsMiwwLAotICAgIDEwMCwxLDAsMTAwLDAsMCwxMzEsMywwLDEwMCwwLDAsMTA3LDgsMCwxMTQsCi0gICAgOTcsMCwxMjQsMiwwLDEwNiwyLDAsMTI0LDIsMCw5NSwzLDAsMTE2LDQsCi0gICAgMCwxMjQsMiwwLDEwMCwyLDAsMTMxLDIsMCwxMTUsOTcsMCwxMjQsMiwwLAotICAgIDEwNiwzLDAsMTA2LDUsMCwxMDAsMywwLDEzMSwxLDAsMTAwLDQsMCwyNSwKLSAgICAxMjQsMiwwLDk1LDMsMCwxMTMsOTcsMCwxMTAsMCwwLDEyNCwyLDAsODMsCi0gICAgNDAsNSwwLDAsMCw3OCwxMTcsMTEsMCwwLDAsOTUsOTUsMTEyLDk3LDk5LAotICAgIDEwNyw5NywxMDMsMTAxLDk1LDk1LDExNyw4LDAsMCwwLDk1LDk1LDExMiw5NywxMTYsCi0gICAgMTA0LDk1LDk1LDExNywxLDAsMCwwLDQ2LDEwNSwwLDAsMCwwLDQwLDYsCi0gICAgMCwwLDAsMTE3LDcsMCwwLDAsMTAzLDEwMSwxMTYsOTcsMTE2LDExNiwxMTQsMTE3LAotICAgIDQsMCwwLDAsNzgsMTExLDExMCwxMDEsMTE3LDgsMCwwLDAsOTUsOTUsMTEwLAotICAgIDk3LDEwOSwxMDEsOTUsOTUsMTE3LDExLDAsMCwwLDk1LDk1LDExMiw5Nyw5OSwxMDcsCi0gICAgOTcsMTAzLDEwMSw5NSw5NSwxMTcsNywwLDAsMCwxMDQsOTcsMTE1LDk3LDExNiwxMTYsCi0gICAgMTE0LDExNywxMCwwLDAsMCwxMTQsMTEyLDk3LDExNCwxMTYsMTA1LDExNiwxMDUsMTExLDExMCwKLSAgICA0MCwzLDAsMCwwLDExNyw0LDAsMCwwLDk3LDExNCwxMDMsMTE1LDExNyw2LAotICAgIDAsMCwwLDEwNywxMTksOTcsMTE0LDEwMywxMTUsMTE3LDYsMCwwLDAsMTA5LDExMSwKLSAgICAxMDAsMTE3LDEwOCwxMDEsNDAsMSwwLDAsMCwxMTcsMywwLDAsMCwxMDIsMTIwLAotICAgIDExMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsCi0gICAgMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwKLSAgICAxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTksMCwwLDAsMTE1LDEwMSwxMTYsCi0gICAgOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDk1LDExOSwxMTQsOTcsMTEyLDExMiwxMDEsMTE0LAotICAgIDIzOCwxLDAsMCwxMTUsMTIsMCwwLDAsMCwxLDE1LDEsMjQsMSwxMiwKLSAgICAxLDE1LDEsMzEsMSwxMTcsNDAsMCwwLDAsMTE1LDEwMSwxMTYsOTUsMTEyLDk3LAotICAgIDk5LDEwNyw5NywxMDMsMTAxLDQ2LDYwLDEwOCwxMTEsOTksOTcsMTA4LDExNSw2Miw0NiwxMTUsCi0gICAgMTAxLDExNiw5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsOTUsMTE5LDExNCw5NywxMTIsMTEyLAotICAgIDEwMSwxMTQsNDAsMSwwLDAsMCwxMTcsNSwwLDAsMCw5NSwxMTksMTE0LDk3LAotICAgIDExMiw0MCwyLDAsMCwwLDExNywzLDAsMCwwLDEwMiwxMjAsMTEwLDExNywxOSwKLSAgICAwLDAsMCwxMTUsMTAxLDExNiw5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsOTUsMTE5LAotICAgIDExNCw5NywxMTIsMTEyLDEwMSwxMTQsNDAsMCwwLDAsMCw0MCwxLDAsMCwwLAotICAgIDExNywzLDAsMCwwLDEwMiwxMjAsMTEwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LAotICAgIDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LAotICAgIDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTEsMCwwLDAsMTE1LAotICAgIDEwMSwxMTYsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDIzNiwxLDAsMCwxMTUsNiwKLSAgICAwLDAsMCwwLDIsMTgsNywxMywxLDExNywxMSwwLDAsMCwxMTUsMTAxLAotICAgIDExNiw5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsOTksMSwwLDAsMCwwLDAsCi0gICAgMCwwLDIsMCwwLDAsMywwLDAsMCwzLDAsMCwwLDExNSwzNSwKLSAgICAwLDAsMCwxMzUsMCwwLDEwMiwxLDAsMTAwLDEsMCwxMDAsMiwwLDEzNCwKLSAgICAwLDAsMTI1LDEsMCwxMTYsMCwwLDEyNCwxLDAsMTM2LDAsMCwxMzEsMiwKLSAgICAwLDEsMTI0LDEsMCw4Myw0MCwzLDAsMCwwLDExNywzOCwwLDAsMCwKLSAgICA4MywxMDEsMTE2LDMyLDk1LDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsOTUsOTUsMzIsMTExLAotICAgIDExMCwzMiwxMTYsMTA0LDEwMSwzMiwxMTQsMTAxLDExNiwxMTcsMTE0LDExMCwxMDEsMTAwLDMyLDEwOSwKLSAgICAxMTEsMTAwLDExNywxMDgsMTAxLDQ2LDk5LDEsMCwwLDAsMCwwLDAsMCw0LAotICAgIDAsMCwwLDQsMCwwLDAsMzEsMCwwLDAsMTE1LDQ5LDAsMCwwLAotICAgIDEzNiwwLDAsMTI0LDAsMCwxMjQsMSwwLDEyNCwyLDAsMTQyLDEsMCwxMjUsCi0gICAgMywwLDExNiwwLDAsMTI0LDMsMCwxMDAsMSwwLDEzMSwyLDAsMTE1LDQ1LAotICAgIDAsMTI0LDAsMCwxMjQsMywwLDk1LDEsMCwxMTAsMCwwLDEyNCwzLDAsCi0gICAgODMsNDAsMiwwLDAsMCw3OCwxMTcsMTAsMCwwLDAsOTUsOTUsMTA4LDExMSwKLSAgICA5NywxMDAsMTAxLDExNCw5NSw5NSw0MCwyLDAsMCwwLDExNyw3LDAsMCwwLAotICAgIDEwNCw5NywxMTUsOTcsMTE2LDExNiwxMTQsMTE3LDEwLDAsMCwwLDk1LDk1LDEwOCwxMTEsCi0gICAgOTcsMTAwLDEwMSwxMTQsOTUsOTUsNDAsNCwwLDAsMCwxMTcsNCwwLDAsMCwKLSAgICAxMTUsMTAxLDEwOCwxMDIsMTE3LDQsMCwwLDAsOTcsMTE0LDEwMywxMTUsMTE3LDYsMCwKLSAgICAwLDAsMTA3LDExOSw5NywxMTQsMTAzLDExNSwxMTcsNiwwLDAsMCwxMDksMTExLDEwMCwKLSAgICAxMTcsMTA4LDEwMSw0MCwxLDAsMCwwLDExNywzLDAsMCwwLDEwMiwxMjAsMTEwLAotICAgIDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsCi0gICAgMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwKLSAgICAxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxOCwwLDAsMCwxMTUsMTAxLDExNiw5NSwKLSAgICAxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDk1LDExOSwxMTQsOTcsMTEyLDExMiwxMDEsMTE0LDI1MSwxLAotICAgIDAsMCwxMTUsOCwwLDAsMCwwLDEsMTgsMSwxNSwxLDEyLDEsMTE3LAotICAgIDM4LDAsMCwwLDExNSwxMDEsMTE2LDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsNjAsCi0gICAgMTA4LDExMSw5OSw5NywxMDgsMTE1LDYyLDQ2LDExNSwxMDEsMTE2LDk1LDEwOCwxMTEsOTcsMTAwLAotICAgIDEwMSwxMTQsOTUsMTE5LDExNCw5NywxMTIsMTEyLDEwMSwxMTQsNDAsMSwwLDAsMCwxMTcsCi0gICAgNSwwLDAsMCw5NSwxMTksMTE0LDk3LDExMiw0MCwyLDAsMCwwLDExNywzLAotICAgIDAsMCwwLDEwMiwxMjAsMTEwLDExNywxOCwwLDAsMCwxMTUsMTAxLDExNiw5NSwxMDgsCi0gICAgMTExLDk3LDEwMCwxMDEsMTE0LDk1LDExOSwxMTQsOTcsMTEyLDExMiwxMDEsMTE0LDQwLDAsMCwKLSAgICAwLDAsNDAsMSwwLDAsMCwxMTcsMywwLDAsMCwxMDIsMTIwLDExMCwxMTcsCi0gICAgMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLAotICAgIDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsCi0gICAgNjIsMTE3LDEwLDAsMCwwLDExNSwxMDEsMTE2LDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsCi0gICAgMjQ5LDEsMCwwLDExNSw2LDAsMCwwLDAsMiwxOCw1LDEzLDEsMTE3LAotICAgIDEwLDAsMCwwLDExNSwxMDEsMTE2LDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsOTksMSwKLSAgICAwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMywwLDAsMCwzLAotICAgIDAsMCwwLDExNSwzNSwwLDAsMCwxMzUsMCwwLDEwMiwxLDAsMTAwLDEsCi0gICAgMCwxMDAsMiwwLDEzNCwwLDAsMTI1LDEsMCwxMTYsMCwwLDEyNCwxLDAsCi0gICAgMTM2LDAsMCwxMzEsMiwwLDEsMTI0LDEsMCw4Myw0MCwzLDAsMCwwLAotICAgIDExNyw0MiwzLDAsMCw2OCwxMDEsOTksMTExLDExNCw5NywxMTYsMTExLDExNCwzMiwxMTYsCi0gICAgMTExLDMyLDEwNCw5NywxMTAsMTAwLDEwOCwxMDEsMzIsMTE1LDEwMSwxMDgsMTAxLDk5LDExNiwxMDUsCi0gICAgMTEwLDEwMywzMiwxMTYsMTA0LDEwMSwzMiwxMTIsMTE0LDExMSwxMTIsMTAxLDExNCwzMiwxMDksMTExLAotICAgIDEwMCwxMTcsMTA4LDEwMSwzMiwxMDIsMTExLDExNCwzMiwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDExNSwKLSAgICA0NiwxMCwxMCwzMiwzMiwzMiwzMiw4NCwxMDQsMTAxLDMyLDEwMCwxMDEsOTksMTExLDExNCwKLSAgICA5NywxMTYsMTAxLDEwMCwzMiwxMDIsMTE3LDExMCw5OSwxMTYsMTA1LDExMSwxMTAsMzIsMTA1LDExNSwKLSAgICAzMiwxMTIsOTcsMTE1LDExNSwxMDEsMTAwLDMyLDExNiwxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLDExNywKLSAgICAxMDgsMTAxLDMyLDExNiwxMTEsMzIsMTE3LDExNSwxMDEsMzIsMTA1LDExMCwxMTUsMTE2LDEwMSw5NywKLSAgICAxMDAsMzIsMTExLDEwMiwzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMCwKLSAgICAzMiwzMiwzMiwzMiwxMTAsOTcsMTA5LDEwMSw0NiwzMiw4NCwxMDQsMTAxLDMyLDEwOSwxMTEsCi0gICAgMTAwLDExNywxMDgsMTAxLDMyLDExMiw5NywxMTUsMTE1LDEwMSwxMDAsMzIsMTA1LDExMCwzMiwxMTYsCi0gICAgMTExLDMyLDExNiwxMDQsMTAxLDMyLDEwMiwxMTcsMTEwLDk5LDExNiwxMDUsMTExLDExMCwzMiwxMDUsCi0gICAgMTE1LDMyLDEwMSwxMDUsMTE2LDEwNCwxMDEsMTE0LDMyLDEwMiwxMTQsMTExLDEwOSwzMiwxMTUsMTIxLAotICAgIDExNSw0NiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsMzIsMTA1LDEwMiwxMCwzMiwzMiwzMiwKLSAgICAzMiwxMDUsMTE2LDMyLDk3LDEwOCwxMTQsMTAxLDk3LDEwMCwxMjEsMzIsMTAxLDEyMCwxMDUsMTE1LAotICAgIDExNiwxMTUsMzIsMTExLDExNCwzMiwxMDUsMTE1LDMyLDk3LDMyLDExMCwxMDEsMTE5LDMyLDEwOSwKLSAgICAxMTEsMTAwLDExNywxMDgsMTAxLDQ2LDMyLDczLDEwMiwzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTExLAotICAgIDEwMCwxMTcsMTA4LDEwMSwzMiwxMDUsMTE1LDMyLDExMCwxMDEsMTE5LDQ0LDMyLDExNiwxMDQsMTAxLAotICAgIDExMCwzMiw5NSw5NSwxMTAsOTcsMTA5LDEwMSw5NSw5NSwxMCwzMiwzMiwzMiwzMiwxMDUsCi0gICAgMTE1LDMyLDExNSwxMDEsMTE2LDMyLDExNiwxMDQsMTAxLDMyLDEwMiwxMDUsMTE0LDExNSwxMTYsMzIsCi0gICAgOTcsMTE0LDEwMywxMTcsMTA5LDEwMSwxMTAsMTE2LDMyLDExNiwxMTEsMzIsMTE2LDEwNCwxMDEsMzIsCi0gICAgMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsNDQsMzIsOTUsOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCwKLSAgICA5NSw5NSwzMiwxMDUsMTE1LDMyLDExNSwxMDEsMTE2LDMyLDExNiwxMTEsMzIsMTE1LDEwMSwxMDgsCi0gICAgMTAyLDQ0LDMyLDk3LDExMCwxMDAsMTAsMzIsMzIsMzIsMzIsOTUsOTUsMTEyLDk3LDk5LAotICAgIDEwNyw5NywxMDMsMTAxLDk1LDk1LDMyLDEwNSwxMTUsMzIsMTE1LDEwMSwxMTYsMzIsOTcsOTksCi0gICAgOTksMTExLDExNCwxMDAsMTA1LDExMCwxMDMsMTA4LDEyMSwzMiw0MCwxMDUsMTAyLDMyLDExNSwxMDEsCi0gICAgMTA4LDEwMiw0NiwxMDUsMTE1LDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw0MCw0MSwzMiwKLSAgICAxMDUsMTE1LDMyLDEwMCwxMDEsMTAyLDEwNSwxMTAsMTAxLDEwMCw0MSwzMiwxMTksMTA1LDEwOCwxMDgsCi0gICAgMzIsOTgsMTAxLDMyLDExNSwxMDEsMTE2LDEwLDMyLDMyLDMyLDMyLDk4LDEwMSwxMDIsMTExLAotICAgIDExNCwxMDEsMzIsMTA1LDExNiwzMiwxMDUsMTE1LDMyLDExMiw5NywxMTUsMTE1LDEwMSwxMDAsMzIsCi0gICAgMTE2LDExMSwzMiwxMTYsMTA0LDEwMSwzMiwxMDAsMTAxLDk5LDExMSwxMTQsOTcsMTE2LDEwMSwxMDAsCi0gICAgMzIsMTAyLDExNywxMTAsOTksMTE2LDEwNSwxMTEsMTEwLDMyLDQwLDEwNSwxMDIsMzIsMTE1LDEwMSwKLSAgICAxMDgsMTAyLDQ2LDEwNSwxMTUsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDQwLDQxLDMyLAotICAgIDEwMCwxMTEsMTAxLDExNSwxMCwzMiwzMiwzMiwzMiwxMTAsMTExLDExNiwzMiwxMTksMTExLDExNCwKLSAgICAxMDcsMzIsMTAyLDExMSwxMTQsMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsCi0gICAgMzIsMTA1LDExNiwzMiwxMTksMTA1LDEwOCwxMDgsMzIsOTgsMTAxLDMyLDExNSwxMDEsMTE2LDMyLAotICAgIDExMiwxMTEsMTE1LDExNiw0NSwxMDgsMTExLDk3LDEwMCw0MSw0NiwxMCwxMCwzMiwzMiwzMiwKLSAgICAzMiw3MywxMDIsMzIsOTcsMTEwLDMyLDEwMSwxMjAsOTksMTAxLDExMiwxMTYsMTA1LDExMSwxMTAsCi0gICAgMzIsMTA1LDExNSwzMiwxMTQsOTcsMTA1LDExNSwxMDEsMTAwLDMyLDk3LDExMCwxMDAsMzIsMTE2LAotICAgIDEwNCwxMDEsMzIsMTAwLDEwMSw5OSwxMTEsMTE0LDk3LDExNiwxMTEsMTE0LDMyLDk5LDExNCwxMDEsCi0gICAgOTcsMTE2LDEwMSwxMDAsMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsCi0gICAgMTA1LDExNiwzMiwxMDUsMTE1LDEwLDMyLDMyLDMyLDMyLDExNSwxMTcsOTgsMTE1LDEwMSwxMTMsCi0gICAgMTE3LDEwMSwxMTAsMTE2LDEwOCwxMjEsMzIsMTE0LDEwMSwxMDksMTExLDExOCwxMDEsMTAwLDMyLDEwMiwKLSAgICAxMTQsMTExLDEwOSwzMiwxMTUsMTIxLDExNSw0NiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsNDYsCi0gICAgMTAsMTAsMzIsMzIsMzIsMzIsODQsMTA0LDEwMSwzMiwxMDAsMTAxLDk5LDExMSwxMTQsOTcsCi0gICAgMTE2LDExMSwxMTQsMzIsOTcsMTE1LDExNSwxMTcsMTA5LDEwMSwxMTUsMzIsMTE2LDEwNCw5NywxMTYsCi0gICAgMzIsMTE2LDEwNCwxMDEsMzIsMTAwLDEwMSw5OSwxMTEsMTE0LDk3LDExNiwxMDEsMTAwLDMyLDEwMiwKLSAgICAxMTcsMTEwLDk5LDExNiwxMDUsMTExLDExMCwzMiwxMTYsOTcsMTA3LDEwMSwxMTUsMzIsMTE2LDEwNCwKLSAgICAxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTEwLDk3LDEwOSwxMDEsMzIsOTcsMTE1LAotICAgIDEwLDMyLDMyLDMyLDMyLDExNiwxMDQsMTAxLDMyLDExNSwxMDEsOTksMTExLDExMCwxMDAsMzIsCi0gICAgOTcsMTE0LDEwMywxMTcsMTA5LDEwMSwxMTAsMTE2LDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDk5LAotICAgIDIsMCwwLDAsMCwwLDAsMCw3LDAsMCwwLDI1LDAsMCwwLAotICAgIDMxLDAsMCwwLDExNSwyNTQsMCwwLDAsMTE2LDAsMCwxMDYsMSwwLDEwNiwKLSAgICAyLDAsMTI0LDEsMCwxMzEsMSwwLDEyNSw0LDAsMTI0LDQsMCwxMDAsMCwKLSAgICAwLDEwNyw5LDAsMTI1LDUsMCwxMjQsNSwwLDExNSwxNjgsMCwxMTYsNCwwLAotICAgIDEyNCwxLDAsMTMxLDEsMCwxMjUsNCwwLDEwMCwzLDAsMTI0LDQsMCw5NSwKLSAgICA2LDAsMTI0LDQsMCwxMTYsMCwwLDEwNiwxLDAsMTI0LDEsMCw2MCwxMjQsCi0gICAgMCwwLDEyNCw0LDAsOTUsNywwLDEyMSwxOSwwLDEyNCwwLDAsMTA2LDgsCi0gICAgMCwxMjQsMSwwLDEzMSwxLDAsMTI1LDYsMCw4NywxMTAsMjQsMCw0LDExNiwKLSAgICA5LDAsMTE2LDEwLDAsMTAyLDIsMCwxMDcsMTAsMCwxMTQsMTI0LDAsMSwxLAotICAgIDEsODksMTEzLDE3NywwLDg4LDEyNCw2LDAsMTE0LDE0MywwLDEyNCwxLDAsMTI0LAotICAgIDQsMCw5NSwxMSwwLDExMywxNzcsMCwxMjQsMSwwLDEwNiwxMiwwLDEwMCwxLAotICAgIDAsMTMxLDEsMCwxMDAsMiwwLDI1LDEyNCw0LDAsOTUsMTEsMCwxMTAsOSwKLSAgICAwLDEwMCwzLDAsMTI0LDQsMCw5NSw2LDAsMTIyLDYwLDAsMTIxLDIzLDAsCi0gICAgMTM2LDAsMCwxMjQsMCwwLDEyNCw0LDAsMTI0LDIsMCwxMjQsMywwLDE0MiwKLSAgICAyLDAsODMsODcsMTEwLDMwLDAsMSwxLDEsMTI0LDUsMCwxMTUsMjI4LDAsCi0gICAgMTE2LDAsMCwxMDYsMSwwLDEyNCwxLDAsNjEsMTEwLDAsMCwxMzAsMCwwLAotICAgIDg5LDExMCwxLDAsODgsODcsMTAwLDAsMCwxMDAsNCwwLDEyNCw0LDAsOTUsCi0gICAgNiwwLDg4LDEwMCwwLDAsODMsNDAsNSwwLDAsMCw3OCwxMTcsMSwwLAotICAgIDAsMCw0NiwxMDUsMCwwLDAsMCw4NCw3MCw0MCwxNCwwLDAsMCwxMTcsCi0gICAgMywwLDAsMCwxMTUsMTIxLDExNSwxMTcsNywwLDAsMCwxMDksMTExLDEwMCwxMTcsCi0gICAgMTA4LDEwMSwxMTUsMTE3LDMsMCwwLDAsMTAzLDEwMSwxMTYsMTE3LDQsMCwwLDAsCi0gICAgNzgsMTExLDExMCwxMDEsMTE3LDEwLDAsMCwwLDExMCwxMDEsMTE5LDk1LDEwOSwxMTEsMTAwLAotICAgIDExNywxMDgsMTAxLDExNyw0LDAsMCwwLDg0LDExNCwxMTcsMTAxLDExNywxNiwwLDAsCi0gICAgMCw5NSw5NSwxMDUsMTEwLDEwNSwxMTYsMTA1LDk3LDEwOCwxMDUsMTIyLDEwNSwxMTAsMTAzLDk1LAotICAgIDk1LDExNywxMCwwLDAsMCw5NSw5NSwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDk1LDk1LAotICAgIDExNywxMCwwLDAsMCwxMDUsMTE1LDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwxMTcsCi0gICAgMTEsMCwwLDAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiw2OSwxMTQsMTE0LDExMSwxMTQsMTE3LAotICAgIDE0LDAsMCwwLDY1LDExNiwxMTYsMTE0LDEwNSw5OCwxMTcsMTE2LDEwMSw2OSwxMTQsMTE0LAotICAgIDExMSwxMTQsMTE3LDExLDAsMCwwLDk1LDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwKLSAgICA5NSw5NSwxMTcsMTAsMCwwLDAsMTE0LDExMiw5NywxMTQsMTE2LDEwNSwxMTYsMTA1LDExMSwKLSAgICAxMTAsMTE3LDUsMCwwLDAsNzAsOTcsMTA4LDExNSwxMDEsNDAsNywwLDAsMCwKLSAgICAxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwxMDIsMTE3LDgsMCwwLDAsMTAyLDExNywKLSAgICAxMDgsMTA4LDExMCw5NywxMDksMTAxLDExNyw0LDAsMCwwLDk3LDExNCwxMDMsMTE1LDExNywKLSAgICA2LDAsMCwwLDEwNywxMTksOTcsMTE0LDEwMywxMTUsMTE3LDYsMCwwLDAsMTA5LAotICAgIDExMSwxMDAsMTE3LDEwOCwxMDEsMTE3LDksMCwwLDAsMTA1LDExNSw5NSwxMTQsMTAxLDEwOCwKLSAgICAxMTEsOTcsMTAwLDExNywxMCwwLDAsMCwxMDUsMTE1LDk1LDExMiw5Nyw5OSwxMDcsOTcsCi0gICAgMTAzLDEwMSw0MCwxLDAsMCwwLDExNywzLDAsMCwwLDEwMiwxMjAsMTEwLDQwLAotICAgIDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLAotICAgIDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsCi0gICAgMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywyNSwwLDAsMCwxMDksMTExLDEwMCwxMTcsMTA4LAotICAgIDEwMSw5NSwxMDIsMTExLDExNCw5NSwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDk1LDExOSwxMTQsOTcsCi0gICAgMTEyLDExMiwxMDEsMTE0LDIyLDIsMCwwLDExNSw0NCwwLDAsMCwwLDEsMTgsCi0gICAgMSwxMiwxLDYsNCwxMiwzLDksMSwxMywxLDksMSwzLDEsMTksCi0gICAgMSwxOSwxLDUsMiw2LDEsMTIsMiwyNSwyLDksMSw2LDIsMjMsCi0gICAgMSwzLDEsNiwxLDEzLDEsMTIsMiwxMTcsNTIsMCwwLDAsMTA5LDExMSwKLSAgICAxMDAsMTE3LDEwOCwxMDEsOTUsMTAyLDExMSwxMTQsOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCw0NiwKLSAgICA2MCwxMDgsMTExLDk5LDk3LDEwOCwxMTUsNjIsNDYsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsCi0gICAgMTAyLDExMSwxMTQsOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCw5NSwxMTksMTE0LDk3LDExMiwxMTIsCi0gICAgMTAxLDExNCw0MCwxLDAsMCwwLDExNyw1LDAsMCwwLDk1LDExOSwxMTQsOTcsCi0gICAgMTEyLDQwLDIsMCwwLDAsMTE3LDMsMCwwLDAsMTAyLDEyMCwxMTAsMTE3LDI1LAotICAgIDAsMCwwLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDEwMiwxMTEsMTE0LDk1LDEwOCwxMTEsCi0gICAgOTcsMTAwLDEwMSwxMTQsOTUsMTE5LDExNCw5NywxMTIsMTEyLDEwMSwxMTQsNDAsMCwwLDAsCi0gICAgMCw0MCwxLDAsMCwwLDExNywzLDAsMCwwLDEwMiwxMjAsMTEwLDExNywyOSwKLSAgICAwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LAotICAgIDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwKLSAgICAxMTcsMTcsMCwwLDAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTAyLDExMSwxMTQsOTUsCi0gICAgMTA4LDExMSw5NywxMDAsMTAxLDExNCw0LDIsMCwwLDExNSw2LDAsMCwwLDAsCi0gICAgMTgsMTgsMzMsMTMsMSwxMTcsMTcsMCwwLDAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsCi0gICAgOTUsMTAyLDExMSwxMTQsOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCw5OSwxLDAsMCwwLAotICAgIDAsMCwwLDAsMiwwLDAsMCw0LDAsMCwwLDMsMCwwLDAsCi0gICAgMTE1LDM4LDAsMCwwLDEwMCwzLDAsMTM1LDAsMCwxMDIsMSwwLDEwMCwxLAotICAgIDAsMTAwLDIsMCwxMzQsMSwwLDEyNSwxLDAsMTE2LDEsMCwxMjQsMSwwLAotICAgIDEzNiwwLDAsMTMxLDIsMCwxLDEyNCwxLDAsODMsNDAsNCwwLDAsMCwKLSAgICAxMTcsMjUyLDAsMCwwLDY4LDEwMSw5OSwxMTEsMTE0LDk3LDExNiwxMTEsMTE0LDMyLDExNiwKKyAgICAxMDQsMzIsMTE2LDExMSwzMiwxMTYsMTA0LDEwMSwxMCwzMiwzMiwzMiwzMiw0NiwxMTIsMTIxLAorICAgIDk5LDQ3LDQ2LDExMiwxMjEsMTExLDMyLDEwMiwxMDUsMTA4LDEwMSwzMiw5OSw5NywxMDgsOTksCisgICAgMTE3LDEwOCw5NywxMTYsMTAxLDEwMCwzMiw5NywxMTUsMzIsMTA1LDEwMiwzMiwxMTYsMTA0LDEwMSwKKyAgICAzMiw0NiwxMTIsMTIxLDMyLDEwMiwxMDUsMTA4LDEwMSwzMiwxMTksMTAxLDExNCwxMDEsMzIsMTA1LAorICAgIDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDEwMCw0NiwzMiwzMiw4NCwxMDQsMTAxLDMyLDEwMSwxMjAsCisgICAgMTE2LDEwMSwxMTAsMTE1LDEwNSwxMTEsMTEwLDEwLDMyLDMyLDMyLDMyLDExOSwxMDUsMTA4LDEwOCwKKyAgICAzMiw5OCwxMDEsMzIsNDYsMTEyLDEyMSw5OSwzMiwxMTcsMTEwLDEwOCwxMDEsMTE1LDExNSwzMiwKKyAgICAxMTUsMTIxLDExNSw0NiwxMDIsMTA4LDk3LDEwMywxMTUsNDYsMTExLDExMiwxMTYsMTA1LDEwOSwxMDUsCisgICAgMTIyLDEwMSwzMiwxMDUsMTE1LDMyLDExMCwxMTEsMTEwLDQ1LDEyMiwxMDEsMTE0LDExMSw0NCwzMiwKKyAgICAxMTYsMTA0LDEwMSwxMTAsMzIsMTA1LDExNiwzMiwxMTksMTA1LDEwOCwxMDgsMzIsOTgsMTAxLDMyLAorICAgIDQ2LDExMiwxMjEsMTExLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDczLDEwMiwzMiwxMDAsMTAxLAorICAgIDk4LDExNywxMDMsOTUsMTExLDExOCwxMDEsMTE0LDExNCwxMDUsMTAwLDEwMSwzMiwxMDUsMTE1LDMyLAorICAgIDExMCwxMTEsMTE2LDMyLDc4LDExMSwxMTAsMTAxLDQ0LDMyLDExNiwxMDQsMTAxLDExMCwzMiwxMDUsCisgICAgMTE2LDMyLDEwOSwxMTcsMTE1LDExNiwzMiw5OCwxMDEsMzIsOTcsMzIsOTgsMTExLDExMSwxMDgsCisgICAgMTAxLDk3LDExMCwzMiw5NywxMTAsMTAwLDMyLDEwNSwxMTUsMzIsMTE3LDExNSwxMDEsMTAwLDMyLAorICAgIDEwNSwxMTAsMTAsMzIsMzIsMzIsMzIsMTEyLDEwOCw5Nyw5OSwxMDEsMzIsMTExLDEwMiwzMiwKKyAgICAxMTUsMTIxLDExNSw0NiwxMDIsMTA4LDk3LDEwMywxMTUsNDYsMTExLDExMiwxMTYsMTA1LDEwOSwxMDUsCisgICAgMTIyLDEwMSw0NiwxMCwxMCwzMiwzMiwzMiwzMiw3MywxMDIsMzIsMTE1LDEyMSwxMTUsNDYsCisgICAgMTA1LDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsOTcsMTE2LDEwNSwxMTEsMTEwLDQ2LDk5LAorICAgIDk3LDk5LDEwNCwxMDEsOTUsMTE2LDk3LDEwMywzMiwxMDUsMTE1LDMyLDc4LDExMSwxMTAsMTAxLAorICAgIDMyLDExNiwxMDQsMTAxLDExMCwzMiw3OCwxMTEsMTE2LDczLDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLAorICAgIDExMCwxMTYsMTAxLDEwMCw2OSwxMTQsMTE0LDExMSwxMTQsMzIsMTA1LDExNSwzMiwxMTQsOTcsMTA1LAorICAgIDExNSwxMDEsMTAwLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDc4LDIxOCwxLDQ2LDEyMiwzNiwKKyAgICAxMTUsMTIxLDExNSw0NiwxMDUsMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiw5NywxMTYsMTA1LAorICAgIDExMSwxMTAsNDYsOTksOTcsOTksMTA0LDEwMSw5NSwxMTYsOTcsMTAzLDMyLDEwNSwxMTUsMzIsCisgICAgNzgsMTExLDExMCwxMDEsMTE0LDMwLDAsMCwwLDExNCw4NCwwLDAsMCw0MSwxMywKKyAgICAxMTQsNywwLDAsMCwyMTgsNSwxMDIsMTA4LDk3LDEwMywxMTUsMjE4LDgsMTExLDExMiwKKyAgICAxMTYsMTA1LDEwOSwxMDUsMTIyLDEwMSwyMTgsMjMsNjgsNjksNjYsODUsNzEsOTUsNjYsODksCisgICAgODQsNjksNjcsNzksNjgsNjksOTUsODMsODUsNzAsNzAsNzMsODgsNjksODMsMjE4LAorICAgIDI3LDc5LDgwLDg0LDczLDc3LDczLDkwLDY5LDY4LDk1LDY2LDg5LDg0LDY5LDY3LAorICAgIDc5LDY4LDY5LDk1LDgzLDg1LDcwLDcwLDczLDg4LDY5LDgzLDExNCwzOCwwLDAsCisgICAgMCwxMTQsMzIsMCwwLDAsMjE4LDE0LDEwNSwxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsCisgICAgMTE2LDk3LDExNiwxMDUsMTExLDExMCwyMTgsOSw5OSw5Nyw5OSwxMDQsMTAxLDk1LDExNiw5NywKKyAgICAxMDMsMjE4LDE5LDc4LDExMSwxMTYsNzMsMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiwxMDEsCisgICAgMTAwLDY5LDExNCwxMTQsMTExLDExNCwxMTQsMjYsMCwwLDAsMTE0LDI4LDAsMCwwLAorICAgIDIxOCw4LDk1LDgwLDg5LDY3LDY1LDY3LDcyLDY5LDQxLDExLDExNCwzNSwwLDAsCisgICAgMCw5MCwxNCwxMDAsMTAxLDk4LDExNywxMDMsOTUsMTExLDExOCwxMDEsMTE0LDExNCwxMDUsMTAwLAorICAgIDEwMSwyMTgsNSwxMDAsMTAxLDk4LDExNywxMDMsMjE4LDgsMTE1LDExNywxMDIsMTAyLDEwNSwxMjAsCisgICAgMTAxLDExNSwyMTgsNCwxMDQsMTAxLDk3LDEwMCwxMTQsMzcsMCwwLDAsMjE4LDQsOTgsCisgICAgOTcsMTE1LDEwMSwyMTgsMywxMTUsMTAxLDExMiwyMTgsNCwxMTQsMTAxLDExNSwxMTYsOTAsMywKKyAgICAxMTYsOTcsMTAzLDIxOCw4LDEwMiwxMDUsMTA4LDEwMSwxMTAsOTcsMTA5LDEwMSwxMTQsNCwwLAorICAgIDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMTcsOTksOTcsCisgICAgOTksMTA0LDEwMSw5NSwxMDIsMTE0LDExMSwxMDksOTUsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwxODEsCisgICAgMSwwLDAsMTE1LDIyLDAsMCwwLDAsMTMsMzEsMSw2LDEsOSwyLAorICAgIDYsMSwxOCwxLDI0LDEsMTIsMSwxMiwxLDE1LDEsNDMsMSwxMTQsMTMyLAorICAgIDAsMCwwLDk5LDEsMCwwLDAsMCwwLDAsMCw1LDAsMCwwLAorICAgIDUsMCwwLDAsNjcsMCwwLDAsMTE1LDE5MywwLDAsMCwxMTYsMCwwLAorICAgIDEwNiwxLDAsMTA2LDIsMCwxMDAsMSwwLDEwNyw4LDAsMTE0LDMzLDAsMTE2LAorICAgIDMsMCwxMDAsMiwwLDEzMSwxLDAsMTMwLDEsMCwxMTAsMCwwLDExNiw0LAorICAgIDAsMTI0LDAsMCwxMzEsMSwwLDkyLDIsMCwxMjUsMSwwLDEyNSwyLDAsCisgICAgMTE2LDQsMCwxMjQsMSwwLDEzMSwxLDAsOTIsMiwwLDEyNSwxLDAsMTI1LAorICAgIDMsMCwxMjQsMywwLDExNiw1LDAsMTA3LDMsMCwxMTQsMTA4LDAsMTE2LDYsCisgICAgMCwxMDAsMywwLDEwNiw3LDAsMTE2LDUsMCwxMjQsMCwwLDEzMSwyLDAsCisgICAgMTMxLDEsMCwxMzAsMSwwLDExMCwwLDAsMTI0LDIsMCwxMDYsOCwwLDEwMCwKKyAgICA0LDAsMTMxLDEsMCwxMDAsNSwwLDEwNywzLDAsMTE0LDE1MywwLDExNiw2LAorICAgIDAsMTAwLDYsMCwxMDYsNywwLDEyNCwyLDAsMTMxLDEsMCwxMzEsMSwwLAorICAgIDEzMCwxLDAsMTEwLDAsMCwxMjQsMiwwLDEwNiw5LDAsMTAwLDQsMCwxMzEsCisgICAgMSwwLDEwMCw3LDAsMjUsMTI1LDQsMCwxMTYsMTAsMCwxMjQsMSwwLDEyNCwKKyAgICA0LDAsMTE2LDExLDAsMTAwLDcsMCwyNSwyMywxMzEsMiwwLDgzLDQxLDgsCisgICAgOTcsMTIxLDEsMCwwLDcxLDEwNSwxMTgsMTAxLDExMCwzMiwxMTYsMTA0LDEwMSwzMiwxMTIsCisgICAgOTcsMTE2LDEwNCwzMiwxMTYsMTExLDMyLDk3LDMyLDQ2LDExMiwxMjEsOTksNDYsNDcsNDYsCisgICAgMTEyLDEyMSwxMTEsMzIsMTAyLDEwNSwxMDgsMTAxLDQ0LDMyLDExNCwxMDEsMTE2LDExNywxMTQsMTEwLAorICAgIDMyLDExNiwxMDQsMTAxLDMyLDExMiw5NywxMTYsMTA0LDMyLDExNiwxMTEsMzIsMTA1LDExNiwxMTUsCisgICAgMzIsNDYsMTEyLDEyMSwzMiwxMDIsMTA1LDEwOCwxMDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsCisgICAgODQsMTA0LDEwMSwzMiw0NiwxMTIsMTIxLDk5LDQ3LDQ2LDExMiwxMjEsMTExLDMyLDEwMiwxMDUsCisgICAgMTA4LDEwMSwzMiwxMDAsMTExLDEwMSwxMTUsMzIsMTEwLDExMSwxMTYsMzIsMTEwLDEwMSwxMDEsMTAwLAorICAgIDMyLDExNiwxMTEsMzIsMTAxLDEyMCwxMDUsMTE1LDExNiw1OSwzMiwxMTYsMTA0LDEwNSwxMTUsMzIsCisgICAgMTE1LDEwNSwxMDksMTEyLDEwOCwxMjEsMzIsMTE0LDEwMSwxMTYsMTE3LDExNCwxMTAsMTE1LDMyLDExNiwKKyAgICAxMDQsMTAxLDMyLDExMiw5NywxMTYsMTA0LDMyLDExNiwxMTEsMTAsMzIsMzIsMzIsMzIsMTE2LAorICAgIDEwNCwxMDEsMzIsNDYsMTEyLDEyMSwzMiwxMDIsMTA1LDEwOCwxMDEsMzIsOTksOTcsMTA4LDk5LAorICAgIDExNywxMDgsOTcsMTE2LDEwMSwxMDAsMzIsMTE2LDExMSwzMiw5OSwxMTEsMTE0LDExNCwxMDEsMTE1LAorICAgIDExMiwxMTEsMTEwLDEwMCwzMiwxMTYsMTExLDMyLDExNiwxMDQsMTAxLDMyLDQ2LDExMiwxMjEsOTksCisgICAgNDcsNDYsMTEyLDEyMSwxMTEsMzIsMTAyLDEwNSwxMDgsMTAxLDQ2LDMyLDMyLDczLDEwMiwzMiwKKyAgICAxMTIsOTcsMTE2LDEwNCwzMiwxMDAsMTExLDEwMSwxMTUsMTAsMzIsMzIsMzIsMzIsMTEwLDExMSwKKyAgICAxMTYsMzIsOTksMTExLDExMCwxMDIsMTExLDExNCwxMDksMzIsMTE2LDExMSwzMiw4MCw2OSw4MCwKKyAgICAzMiw1MSw0OSw1Miw1NSwzMiwxMDIsMTExLDExNCwxMDksOTcsMTE2LDQ0LDMyLDg2LDk3LAorICAgIDEwOCwxMTcsMTAxLDY5LDExNCwxMTQsMTExLDExNCwzMiwxMTksMTA1LDEwOCwxMDgsMzIsOTgsMTAxLAorICAgIDMyLDExNCw5NywxMDUsMTE1LDEwMSwxMDAsNDYsMzIsNzMsMTAyLDEwLDMyLDMyLDMyLDMyLAorICAgIDExNSwxMjEsMTE1LDQ2LDEwNSwxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LDk3LDExNiwxMDUsCisgICAgMTExLDExMCw0Niw5OSw5Nyw5OSwxMDQsMTAxLDk1LDExNiw5NywxMDMsMzIsMTA1LDExNSwzMiwKKyAgICA3OCwxMTEsMTEwLDEwMSwzMiwxMTYsMTA0LDEwMSwxMTAsMzIsNzgsMTExLDExNiw3MywxMDksMTEyLAorICAgIDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LDEwMSwxMDAsNjksMTE0LDExNCwxMTEsMTE0LDMyLDEwNSwxMTUsCisgICAgMzIsMTE0LDk3LDEwNSwxMTUsMTAxLDEwMCw0NiwxMCwxMCwzMiwzMiwzMiwzMiw3OCwxMjIsCisgICAgMzYsMTE1LDEyMSwxMTUsNDYsMTA1LDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsOTcsMTE2LAorICAgIDEwNSwxMTEsMTEwLDQ2LDk5LDk3LDk5LDEwNCwxMDEsOTUsMTE2LDk3LDEwMywzMiwxMDUsMTE1LAorICAgIDMyLDc4LDExMSwxMTAsMTAxLDEyMiwzNywxMjMsMTI1LDMyLDExMCwxMTEsMTE2LDMyLDk4LDExMSwKKyAgICAxMTYsMTE2LDExMSwxMDksNDUsMTA4LDEwMSwxMTgsMTAxLDEwOCwzMiwxMDAsMTA1LDExNCwxMDEsOTksCisgICAgMTE2LDExMSwxMTQsMTIxLDMyLDEwNSwxMTAsMzIsMTIzLDMzLDExNCwxMjUsMTE0LDExNiwwLDAsCisgICAgMCwxMTQsMTE1LDAsMCwwLDEyMiwyOCwxMDEsMTIwLDExMiwxMDEsOTksMTE2LDEwMSwxMDAsCisgICAgMzIsMTExLDExMCwxMDgsMTIxLDMyLDUwLDMyLDEwMCwxMTEsMTE2LDExNSwzMiwxMDUsMTEwLDMyLAorICAgIDEyMywzMywxMTQsMTI1LDExNCw4NCwwLDAsMCw0MSwxMiwxMTQsNywwLDAsMCwKKyAgICAxMTQsMTIxLDAsMCwwLDExNCwxMjIsMCwwLDAsMTE0LDEyMywwLDAsMCwxMTQsCisgICAgMzgsMCwwLDAsMTE0LDEyNCwwLDAsMCwyMTgsMTAsODYsOTcsMTA4LDExNywxMDEsCisgICAgNjksMTE0LDExNCwxMTEsMTE0LDExNCw0NywwLDAsMCwxMTQsODksMCwwLDAsMjE4LAorICAgIDksMTEyLDk3LDExNCwxMTYsMTA1LDExNiwxMDUsMTExLDExMCwxMTQsMjgsMCwwLDAsMjE4LAorICAgIDE1LDgzLDc5LDg1LDgyLDY3LDY5LDk1LDgzLDg1LDcwLDcwLDczLDg4LDY5LDgzLAorICAgIDQxLDUsMTE0LDM1LDAsMCwwLDExNCwxMjcsMCwwLDAsOTAsMTYsMTEyLDEyMSwKKyAgICA5OSw5Nyw5OSwxMDQsMTAxLDk1LDEwMiwxMDUsMTA4LDEwMSwxMTAsOTcsMTA5LDEwMSw5MCw3LAorICAgIDExMiwxMjEsOTksOTcsOTksMTA0LDEwMSw5MCwxMyw5OCw5NywxMTUsMTAxLDk1LDEwMiwxMDUsCisgICAgMTA4LDEwMSwxMTAsOTcsMTA5LDEwMSwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwKKyAgICAxMTQsNSwwLDAsMCwyMTgsMTcsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw5NSwxMDIsMTE0LAorICAgIDExMSwxMDksOTUsOTksOTcsOTksMTA0LDEwMSwyMDgsMSwwLDAsMTE1LDI0LDAsMCwKKyAgICAwLDAsOSwxOCwxLDE1LDEsMTgsMSwxOCwxLDEyLDEsOSwxLDE4LAorICAgIDEsMjEsMSw5LDEsMTUsMSwxOSwxLDExNCwxMzYsMCwwLDAsOTksMSwKKyAgICAwLDAsMCwwLDAsMCwwLDUsMCwwLDAsMTIsMCwwLDAsNjcsCisgICAgMCwwLDAsMTE1LDE2NCwwLDAsMCwxMTYsMCwwLDEyNCwwLDAsMTMxLDEsCisgICAgMCwxMDAsMSwwLDEwNywyLDAsMTE0LDIyLDAsMTAwLDIsMCw4MywxMjQsMCwKKyAgICAwLDEwNiwxLDAsMTAwLDMsMCwxMzEsMSwwLDkyLDMsMCwxMjUsMSwwLAorICAgIDEyNSwyLDAsMTI1LDMsMCwxMjQsMSwwLDEyLDExNSw4MSwwLDEyNCwzLDAsCisgICAgMTA2LDIsMCwxMzEsMCwwLDEwMCw3LDAsMTAwLDgsMCwxMzMsMiwwLDI1LAorICAgIDEwMCw2LDAsMTA3LDMsMCwxMTQsODUsMCwxMjQsMCwwLDgzLDEyMSwxNiwwLAorICAgIDExNiwzLDAsMTI0LDAsMCwxMzEsMSwwLDEyNSw0LDAsODcsMTEwLDQwLDAsCisgICAgNCwxMTYsNCwwLDExNiw1LDAsMTAyLDIsMCwxMDcsMTAsMCwxMTQsMTQzLDAsCisgICAgMSwxLDEsMTI0LDAsMCwxMDAsMiwwLDEwMCw5LDAsMTMzLDIsMCwyNSwKKyAgICAxMjUsNCwwLDg5LDExMCwxLDAsODgsMTE2LDYsMCwxMjQsNCwwLDEzMSwxLAorICAgIDAsMTE0LDE2MCwwLDEyNCw0LDAsODMsMTI0LDAsMCw4Myw0MSwxMCwxMjIsMTg4LAorICAgIDY3LDExMSwxMTAsMTE4LDEwMSwxMTQsMTE2LDMyLDk3LDMyLDk4LDEyMSwxMTYsMTAxLDk5LDExMSwKKyAgICAxMDAsMTAxLDMyLDEwMiwxMDUsMTA4LDEwMSwzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMTYsMTExLDMyLAorICAgIDk3LDMyLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsMzIsMTEyLDk3LDExNiwxMDQsMzIsNDAsMTA1LAorICAgIDEwMiwzMiwxMTIsMTExLDExNSwxMTUsMTA1LDk4LDEwOCwxMDEsNDEsNDYsMTAsMTAsMzIsMzIsCisgICAgMzIsMzIsODQsMTA0LDEwNSwxMTUsMzIsMTAyLDExNywxMTAsOTksMTE2LDEwNSwxMTEsMTEwLDMyLAorICAgIDEwMSwxMjAsMTA1LDExNSwxMTYsMTE1LDMyLDExMiwxMTcsMTE0LDEwMSwxMDgsMTIxLDMyLDEwMiwxMTEsCisgICAgMTE0LDMyLDk4LDk3LDk5LDEwNywxMTksOTcsMTE0LDEwMCwxMTUsNDUsOTksMTExLDEwOSwxMTIsCisgICAgOTcsMTE2LDEwNSw5OCwxMDUsMTA4LDEwNSwxMTYsMTIxLDMyLDEwMiwxMTEsMTE0LDEwLDMyLDMyLAorICAgIDMyLDMyLDgwLDEyMSw3MywxMDksMTEyLDExMSwxMTQsMTE2LDk1LDY5LDEyMCwxMDEsOTksNjcsCisgICAgMTExLDEwMCwxMDEsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw4NywxMDUsMTE2LDEwNCw3MCwxMDUsMTA4LAorICAgIDEwMSwxMTAsOTcsMTA5LDEwMSwxMTUsNDAsNDEsMzIsMTA1LDExMCwzMiwxMTYsMTA0LDEwMSwzMiwKKyAgICA2NywzMiw2NSw4MCw3Myw0NiwxMCwxMCwzMiwzMiwzMiwzMiwxMTQsODQsMCwwLAorICAgIDAsNzgsMTE0LDExNiwwLDAsMCwyMzMsMywwLDAsMCwxMTQsMjksMCwwLAorICAgIDAsOTAsMiwxMTIsMTIxLDIzMywyNTMsMjU1LDI1NSwyNTUsMjMzLDI1NSwyNTUsMjU1LDI1NSwxMTQsCisgICAgMTM5LDAsMCwwLDQxLDcsMTE0LDMxLDAsMCwwLDExNCwzMiwwLDAsMCwKKyAgICAyMTgsNSwxMDgsMTExLDExOSwxMDEsMTE0LDExNCwxMzYsMCwwLDAsMTE0LDEyMywwLDAsCisgICAgMCwxMTQsMTMzLDAsMCwwLDExNCw0NCwwLDAsMCw0MSw1LDIxOCwxMyw5OCwKKyAgICAxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSw5NSwxMTIsOTcsMTE2LDEwNCwxMTQsMTMwLDAsMCwKKyAgICAwLDExNCwzNiwwLDAsMCw5MCw5LDEwMSwxMjAsMTE2LDEwMSwxMTAsMTE1LDEwNSwxMTEsCisgICAgMTEwLDIxOCwxMSwxMTUsMTExLDExNywxMTQsOTksMTAxLDk1LDExMiw5NywxMTYsMTA0LDExNCw0LAorICAgIDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCwxNSw5NSwKKyAgICAxMDMsMTAxLDExNiw5NSwxMTUsMTExLDExNywxMTQsOTksMTAxLDEwMiwxMDUsMTA4LDEwMSwyMzEsMSwKKyAgICAwLDAsMTE1LDIwLDAsMCwwLDAsNywxOCwxLDQsMSwyNCwxLDM1LAorICAgIDEsNCwxLDMsMSwxNiwxLDE5LDEsMjEsMSwxMTQsMTQzLDAsMCwwLAorICAgIDk5LDEsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDExLDAsMCwKKyAgICAwLDY3LDAsMCwwLDExNSw2MCwwLDAsMCwxMjEsMTksMCwxMTYsMCwwLAorICAgIDEyNCwwLDAsMTMxLDEsMCwxMDYsMSwwLDEyNSwxLDAsODcsMTEwLDI0LDAsCisgICAgNCwxMTYsMiwwLDEwNywxMCwwLDExNCw0NSwwLDEsMSwxLDEwMCwxLDAsCisgICAgMTI1LDEsMCw4OSwxMTAsMSwwLDg4LDEyNCwxLDAsMTAwLDIsMCw3OSwxMjUsCisgICAgMSwwLDEyNCwxLDAsODMsNDEsMywxMjIsNTEsNjcsOTcsMTA4LDk5LDExNywxMDgsCisgICAgOTcsMTE2LDEwMSwzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMDEsMzIsMTEyLDEwMSwxMTQsCisgICAgMTA5LDEwNSwxMTUsMTE1LDEwNSwxMTEsMTEwLDExNSwzMiwxMDIsMTExLDExNCwzMiw5NywzMiw5OCwKKyAgICAxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSwzMiwxMDIsMTA1LDEwOCwxMDEsNDYsMTA1LDE4MiwxLAorICAgIDAsMCwyMzMsMTI4LDAsMCwwLDQxLDMsMTE0LDM5LDAsMCwwLDExNCw0MSwKKyAgICAwLDAsMCwxMTQsNDAsMCwwLDAsNDEsMiwxMTQsMzUsMCwwLDAsMTE0LAorICAgIDQyLDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LAorICAgIDAsMCwwLDIxOCwxMCw5NSw5OSw5NywxMDgsOTksOTUsMTA5LDExMSwxMDAsMTAxLDI1MCwKKyAgICAxLDAsMCwxMTUsMTIsMCwwLDAsMCwyLDMsMSwxOSwxLDEzLDEsCisgICAgMTEsMywxMCwxLDExNCwxNDUsMCwwLDAsMjE4LDksMTE4LDEwMSwxMTQsOTgsMTExLAorICAgIDExNSwxMDUsMTE2LDEyMSwxMTQsMjksMCwwLDAsOTksMSwwLDAsMCwxLDAsCisgICAgMCwwLDMsMCwwLDAsNCwwLDAsMCw3MSwwLDAsMCwxMTUsODEsCisgICAgMCwwLDAsMTE2LDAsMCwxMDYsMSwwLDEwNiwyLDAsMTI0LDEsMCwxMDcsCisgICAgNSwwLDExNCw3NywwLDEyNCwwLDAsMTA2LDMsMCwxMDAsNiwwLDEzMSwxLAorICAgIDAsMTE1LDQ2LDAsMTAwLDMsMCwxMjQsMCwwLDIzLDEyNSwwLDAsMTEwLDAsCisgICAgMCwxMTYsNCwwLDEyNCwwLDAsMTA2LDUsMCwxMjQsMiwwLDE0MCwwLDAsCisgICAgMTAwLDQsMCwxMTYsMCwwLDEwNiw2LDAsMTMxLDEsMSwxLDExMCwwLDAsCisgICAgMTAwLDUsMCw4Myw0MSw3LDEyMiw2MSw4MCwxMTQsMTA1LDExMCwxMTYsMzIsMTE2LDEwNCwKKyAgICAxMDEsMzIsMTA5LDEwMSwxMTUsMTE1LDk3LDEwMywxMDEsMzIsMTE2LDExMSwzMiwxMTUsMTE2LDEwMCwKKyAgICAxMDEsMTE0LDExNCwzMiwxMDUsMTAyLDMyLDQ1LDExOCw0Nyw4MCw4OSw4NCw3Miw3OSw3OCwKKyAgICA4Niw2OSw4Miw2Niw3OSw4Myw2OSwzMiwxMDUsMTE1LDMyLDExNiwxMTcsMTE0LDExMCwxMDEsCisgICAgMTAwLDMyLDExMSwxMTAsNDYsMjUwLDEsMzUsMjUwLDcsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsCisgICAgMzIsMTIyLDIsMzUsMzIsMTE0LDU0LDAsMCwwLDc4LDQxLDIsMTE0LDE0NywwLAorICAgIDAsMCwxMTQsMTQ4LDAsMCwwLDQxLDcsMTE0LDcsMCwwLDAsMTE0LDExNywKKyAgICAwLDAsMCwyMTgsNywxMTgsMTAxLDExNCw5OCwxMTEsMTE1LDEwMSwxMTQsOSwwLDAsCisgICAgMCwyMTgsNSwxMTIsMTE0LDEwNSwxMTAsMTE2LDExNCw0NywwLDAsMCwyMTgsNiwxMTUsCisgICAgMTE2LDEwMCwxMDEsMTE0LDExNCw0MSwzLDIxOCw3LDEwOSwxMDEsMTE1LDExNSw5NywxMDMsMTAxLAorICAgIDExNCwxNDYsMCwwLDAsMTE0LDgwLDAsMCwwLDExNCw0LDAsMCwwLDExNCwKKyAgICA0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCwxNiw5NSwxMTgsMTAxLDExNCw5OCwKKyAgICAxMTEsMTE1LDEwMSw5NSwxMDksMTAxLDExNSwxMTUsOTcsMTAzLDEwMSw2LDIsMCwwLDExNSwKKyAgICA4LDAsMCwwLDAsMiwxOCwxLDE1LDEsMTMsMSwxMTQsMTUzLDAsMCwKKyAgICAwLDk5LDEsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDQsMCwKKyAgICAwLDAsMywwLDAsMCwxMTUsMzgsMCwwLDAsMTAwLDEsMCwxMzUsMCwKKyAgICAwLDEwMiwxLDAsMTAwLDIsMCwxMDAsMywwLDEzNCwxLDAsMTI1LDEsMCwKKyAgICAxMTYsMCwwLDEyNCwxLDAsMTM2LDAsMCwxMzEsMiwwLDEsMTI0LDEsMCwKKyAgICA4Myw0MSw0LDEyMiwyNTIsNjgsMTAxLDk5LDExMSwxMTQsOTcsMTE2LDExMSwxMTQsMzIsMTE2LAogICAgIDExMSwzMiwxMTgsMTAxLDExNCwxMDUsMTAyLDEyMSwzMiwxMTYsMTA0LDk3LDExNiwzMiwxMTYsMTA0LAogICAgIDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiw5OCwxMDEsMTA1LDExMCwxMDMsMzIsMTE0LAogICAgIDEwMSwxMTMsMTE3LDEwMSwxMTUsMTE2LDEwMSwxMDAsMzIsMTA5LDk3LDExNiw5OSwxMDQsMTAxLDExNSwKQEAgLTEyMTIsMjUxOCArOTI1LDI5NzYgQEAKICAgICAxMTEsMTA5LDExMiw5NywxMTQsMTA1LDExNSwxMTEsMTEwLDMyLDEwMiw5NywxMDUsMTA4LDExNSwzMiwKICAgICAxMTYsMTA0LDEwMSwxMTAsMzIsNzMsMTA5LDExMiwxMTEsMTE0LDExNiw2OSwxMTQsMTE0LDExMSwxMTQsCiAgICAgMzIsMTA1LDExNSwzMiwxMTQsOTcsMTA1LDExNSwxMDEsMTAwLDQ2LDEwLDEwLDMyLDMyLDMyLAotICAgIDMyLDk5LDIsMCwwLDAsMCwwLDAsMCw0LDAsMCwwLDUsMCwKLSAgICAwLDAsMzEsMCwwLDAsMTE1LDgzLDAsMCwwLDEyNCwxLDAsMTAwLDAsCi0gICAgMCwxMDcsOCwwLDExNCwyNCwwLDEyNCwwLDAsMTA2LDEsMCwxMjUsMSwwLAotICAgIDExMCw0MCwwLDEyNCwwLDAsMTA2LDEsMCwxMjQsMSwwLDEwNywzLDAsMTE0LAotICAgIDY0LDAsMTE2LDIsMCwxMDAsMSwwLDEyNCwxLDAsMjIsMTAwLDIsMCwxMjQsCi0gICAgMSwwLDEzMSwxLDEsMTMwLDEsMCwxMTAsMCwwLDEzNiwwLDAsMTI0LDAsCi0gICAgMCwxMjQsMSwwLDEyNCwyLDAsMTI0LDMsMCwxNDIsMiwwLDgzLDQwLDMsCi0gICAgMCwwLDAsNzgsMTE3LDIzLDAsMCwwLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMzIsCi0gICAgOTksOTcsMTEwLDExMCwxMTEsMTE2LDMyLDEwNCw5NywxMTAsMTAwLDEwOCwxMDEsMzIsMzcsMTE1LAotICAgIDExNyw0LDAsMCwwLDExMCw5NywxMDksMTAxLDQwLDMsMCwwLDAsMTE3LDQsCi0gICAgMCwwLDAsNzgsMTExLDExMCwxMDEsMTE3LDQsMCwwLDAsMTEwLDk3LDEwOSwxMDEsCi0gICAgMTE3LDExLDAsMCwwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsNjksMTE0LDExNCwxMTEsMTE0LAotICAgIDQwLDQsMCwwLDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDExNyw0LAotICAgIDAsMCwwLDExMCw5NywxMDksMTAxLDExNyw0LDAsMCwwLDk3LDExNCwxMDMsMTE1LAotICAgIDExNyw2LDAsMCwwLDEwNywxMTksOTcsMTE0LDEwMywxMTUsNDAsMSwwLDAsMCwKLSAgICAxMTcsNiwwLDAsMCwxMDksMTAxLDExNiwxMDQsMTExLDEwMCw0MCwwLDAsMCwwLAotICAgIDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwKLSAgICAxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LAotICAgIDExMiw2MiwxMTcsMTksMCwwLDAsOTUsOTksMTA0LDEwMSw5OSwxMDcsOTUsMTEwLDk3LAotICAgIDEwOSwxMDEsOTUsMTE5LDExNCw5NywxMTIsMTEyLDEwMSwxMTQsNjcsMiwwLDAsMTE1LDEwLAotICAgIDAsMCwwLDAsMSwxMiwxLDEyLDEsMTUsMSwyNSwxLDExNyw0MCwwLAotICAgIDAsMCw5NSw5OSwxMDQsMTAxLDk5LDEwNyw5NSwxMTAsOTcsMTA5LDEwMSw0Niw2MCwxMDgsCi0gICAgMTExLDk5LDk3LDEwOCwxMTUsNjIsNDYsOTUsOTksMTA0LDEwMSw5OSwxMDcsOTUsMTEwLDk3LAotICAgIDEwOSwxMDEsOTUsMTE5LDExNCw5NywxMTIsMTEyLDEwMSwxMTQsNzgsNDAsMiwwLDAsMCwKLSAgICAxMTcsNCwwLDAsMCw3OCwxMTEsMTEwLDEwMSwxMTcsNSwwLDAsMCw5NSwxMTksCi0gICAgMTE0LDk3LDExMiw0MCwyLDAsMCwwLDExNyw2LDAsMCwwLDEwOSwxMDEsMTE2LAotICAgIDEwNCwxMTEsMTAwLDExNywxOSwwLDAsMCw5NSw5OSwxMDQsMTAxLDk5LDEwNyw5NSwxMTAsCi0gICAgOTcsMTA5LDEwMSw5NSwxMTksMTE0LDk3LDExMiwxMTIsMTAxLDExNCw0MCwwLDAsMCwwLAotICAgIDQwLDEsMCwwLDAsMTE3LDYsMCwwLDAsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsCi0gICAgMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLAotICAgIDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsCi0gICAgMTEyLDYyLDExNywxMSwwLDAsMCw5NSw5OSwxMDQsMTAxLDk5LDEwNyw5NSwxMTAsOTcsCi0gICAgMTA5LDEwMSw1OSwyLDAsMCwxMTUsNiwwLDAsMCwwLDgsMjEsNiwxMywKLSAgICAxLDExNywxMSwwLDAsMCw5NSw5OSwxMDQsMTAxLDk5LDEwNyw5NSwxMTAsOTcsMTA5LAotICAgIDEwMSw5OSwxLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwzLDAsCi0gICAgMCwwLDMsMCwwLDAsMTE1LDM1LDAsMCwwLDEzNSwwLDAsMTAyLDEsCi0gICAgMCwxMDAsMSwwLDEwMCwyLDAsMTM0LDAsMCwxMjUsMSwwLDExNiwwLDAsCi0gICAgMTI0LDEsMCwxMzYsMCwwLDEzMSwyLDAsMSwxMjQsMSwwLDgzLDQwLDMsCi0gICAgMCwwLDAsMTE3LDQ5LDAsMCwwLDY4LDEwMSw5OSwxMTEsMTE0LDk3LDExNiwxMTEsCi0gICAgMTE0LDMyLDExNiwxMTEsMzIsMTE4LDEwMSwxMTQsMTA1LDEwMiwxMjEsMzIsMTE2LDEwNCwxMDEsMzIsCi0gICAgMTEwLDk3LDEwOSwxMDEsMTAwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEwNSwxMTUsMzIsCi0gICAgOTgsMTE3LDEwNSwxMDgsMTE2LDQ1LDEwNSwxMTAsNDYsOTksMiwwLDAsMCwwLDAsCi0gICAgMCwwLDIsMCwwLDAsNCwwLDAsMCwxOSwwLDAsMCwxMTUsNTgsCi0gICAgMCwwLDAsMTI0LDEsMCwxMTYsMCwwLDEwNiwxLDAsMTA3LDcsMCwxMTQsCi0gICAgNDUsMCwxMTYsMiwwLDEwMCwxLDAsMTA2LDMsMCwxMjQsMSwwLDEzMSwxLAotICAgIDAsMTAwLDIsMCwxMjQsMSwwLDEzMSwxLDEsMTMwLDEsMCwxMTAsMCwwLAotICAgIDEzNiwwLDAsMTI0LDAsMCwxMjQsMSwwLDEzMSwyLDAsODMsNDAsMywwLAotICAgIDAsMCw3OCwxMTcsMjcsMCwwLDAsMTIzLDEyNSwzMiwxMDUsMTE1LDMyLDExMCwxMTEsCi0gICAgMTE2LDMyLDk3LDMyLDk4LDExNywxMDUsMTA4LDExNiw0NSwxMDUsMTEwLDMyLDEwOSwxMTEsMTAwLAotICAgIDExNywxMDgsMTAxLDExNyw0LDAsMCwwLDExMCw5NywxMDksMTAxLDQwLDQsMCwwLAotICAgIDAsMTE3LDMsMCwwLDAsMTE1LDEyMSwxMTUsMTE3LDIwLDAsMCwwLDk4LDExNywKLSAgICAxMDUsMTA4LDExNiwxMDUsMTEwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDExMCw5NywxMDksCi0gICAgMTAxLDExNSwxMTcsMTEsMCwwLDAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiw2OSwxMTQsMTE0LAotICAgIDExMSwxMTQsMTE3LDYsMCwwLDAsMTAyLDExMSwxMTQsMTA5LDk3LDExNiw0MCwyLDAsCi0gICAgMCwwLDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LDEwMiwxMTcsOCwwLDAsMCwKLSAgICAxMDIsMTE3LDEwOCwxMDgsMTEwLDk3LDEwOSwxMDEsNDAsMSwwLDAsMCwxMTcsMywwLAotICAgIDAsMCwxMDIsMTIwLDExMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwKLSAgICAxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LAotICAgIDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMjUsMCwwLAotICAgIDAsOTUsMTE0LDEwMSwxMTMsMTE3LDEwNSwxMTQsMTAxLDExNSw5NSw5OCwxMTcsMTA1LDEwOCwxMTYsCi0gICAgMTA1LDExMCw5NSwxMTksMTE0LDk3LDExMiwxMTIsMTAxLDExNCw3OSwyLDAsMCwxMTUsOCwKLSAgICAwLDAsMCwwLDEsMTUsMSwxOCwxLDEyLDEsMTE3LDUyLDAsMCwwLAotICAgIDk1LDExNCwxMDEsMTEzLDExNywxMDUsMTE0LDEwMSwxMTUsOTUsOTgsMTE3LDEwNSwxMDgsMTE2LDEwNSwKLSAgICAxMTAsNDYsNjAsMTA4LDExMSw5OSw5NywxMDgsMTE1LDYyLDQ2LDk1LDExNCwxMDEsMTEzLDExNywKLSAgICAxMDUsMTE0LDEwMSwxMTUsOTUsOTgsMTE3LDEwNSwxMDgsMTE2LDEwNSwxMTAsOTUsMTE5LDExNCw5NywKLSAgICAxMTIsMTEyLDEwMSwxMTQsNDAsMSwwLDAsMCwxMTcsNSwwLDAsMCw5NSwxMTksCi0gICAgMTE0LDk3LDExMiw0MCwyLDAsMCwwLDExNywzLDAsMCwwLDEwMiwxMjAsMTEwLAotICAgIDExNywyNSwwLDAsMCw5NSwxMTQsMTAxLDExMywxMTcsMTA1LDExNCwxMDEsMTE1LDk1LDk4LAotICAgIDExNywxMDUsMTA4LDExNiwxMDUsMTEwLDk1LDExOSwxMTQsOTcsMTEyLDExMiwxMDEsMTE0LDQwLDAsCi0gICAgMCwwLDAsNDAsMSwwLDAsMCwxMTcsMywwLDAsMCwxMDIsMTIwLDExMCwKLSAgICAxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsCi0gICAgMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywKLSAgICAxMTIsNjIsMTE3LDE3LDAsMCwwLDk1LDExNCwxMDEsMTEzLDExNywxMDUsMTE0LDEwMSwxMTUsCi0gICAgOTUsOTgsMTE3LDEwNSwxMDgsMTE2LDEwNSwxMTAsNzcsMiwwLDAsMTE1LDYsMCwwLAotICAgIDAsMCwyLDE4LDUsMTMsMSwxMTcsMTcsMCwwLDAsOTUsMTE0LDEwMSwxMTMsCi0gICAgMTE3LDEwNSwxMTQsMTAxLDExNSw5NSw5OCwxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCw5OSwxLDAsCi0gICAgMCwwLDAsMCwwLDAsMiwwLDAsMCwzLDAsMCwwLDMsMCwKLSAgICAwLDAsMTE1LDM1LDAsMCwwLDEzNSwwLDAsMTAyLDEsMCwxMDAsMSwwLAotICAgIDEwMCwyLDAsMTM0LDAsMCwxMjUsMSwwLDExNiwwLDAsMTI0LDEsMCwxMzYsCi0gICAgMCwwLDEzMSwyLDAsMSwxMjQsMSwwLDgzLDQwLDMsMCwwLDAsMTE3LAotICAgIDQ3LDAsMCwwLDY4LDEwMSw5OSwxMTEsMTE0LDk3LDExNiwxMTEsMTE0LDMyLDExNiwxMTEsCi0gICAgMzIsMTE4LDEwMSwxMTQsMTA1LDEwMiwxMjEsMzIsMTE2LDEwNCwxMDEsMzIsMTEwLDk3LDEwOSwxMDEsCi0gICAgMTAwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEwNSwxMTUsMzIsMTAyLDExNCwxMTEsMTIyLAotICAgIDEwMSwxMTAsNDYsOTksMiwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsCi0gICAgNCwwLDAsMCwxOSwwLDAsMCwxMTUsNTgsMCwwLDAsMTE2LDAsMCwKLSAgICAxMDYsMSwwLDEyNCwxLDAsMTMxLDEsMCwxMTUsNDUsMCwxMTYsMiwwLDEwMCwKLSAgICAxLDAsMTA2LDMsMCwxMjQsMSwwLDEzMSwxLDAsMTAwLDIsMCwxMjQsMSwKLSAgICAwLDEzMSwxLDEsMTMwLDEsMCwxMTAsMCwwLDEzNiwwLDAsMTI0LDAsMCwKLSAgICAxMjQsMSwwLDEzMSwyLDAsODMsNDAsMywwLDAsMCw3OCwxMTcsMjUsMCwKLSAgICAwLDAsMTIzLDEyNSwzMiwxMDUsMTE1LDMyLDExMCwxMTEsMTE2LDMyLDk3LDMyLDEwMiwxMTQsCi0gICAgMTExLDEyMiwxMDEsMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNyw0LDAsMCwwLAotICAgIDExMCw5NywxMDksMTAxLDQwLDQsMCwwLDAsMTE3LDQsMCwwLDAsOTUsMTA1LAotICAgIDEwOSwxMTIsMTE3LDksMCwwLDAsMTA1LDExNSw5NSwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwKLSAgICAxMTcsMTEsMCwwLDAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiw2OSwxMTQsMTE0LDExMSwxMTQsCi0gICAgMTE3LDYsMCwwLDAsMTAyLDExMSwxMTQsMTA5LDk3LDExNiw0MCwyLDAsMCwwLAotICAgIDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LDEwMiwxMTcsOCwwLDAsMCwxMDIsMTE3LAotICAgIDEwOCwxMDgsMTEwLDk3LDEwOSwxMDEsNDAsMSwwLDAsMCwxMTcsMywwLDAsMCwKLSAgICAxMDIsMTIwLDExMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LAotICAgIDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LAotICAgIDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMjQsMCwwLDAsOTUsCi0gICAgMTE0LDEwMSwxMTMsMTE3LDEwNSwxMTQsMTAxLDExNSw5NSwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCw5NSwKLSAgICAxMTksMTE0LDk3LDExMiwxMTIsMTAxLDExNCw5MCwyLDAsMCwxMTUsOCwwLDAsMCwKLSAgICAwLDEsMTUsMSwxOCwxLDEyLDEsMTE3LDUwLDAsMCwwLDk1LDExNCwxMDEsCi0gICAgMTEzLDExNywxMDUsMTE0LDEwMSwxMTUsOTUsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsNDYsNjAsMTA4LAotICAgIDExMSw5OSw5NywxMDgsMTE1LDYyLDQ2LDk1LDExNCwxMDEsMTEzLDExNywxMDUsMTE0LDEwMSwxMTUsCi0gICAgOTUsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsOTUsMTE5LDExNCw5NywxMTIsMTEyLDEwMSwxMTQsNDAsCi0gICAgMSwwLDAsMCwxMTcsNSwwLDAsMCw5NSwxMTksMTE0LDk3LDExMiw0MCwyLAotICAgIDAsMCwwLDExNywzLDAsMCwwLDEwMiwxMjAsMTEwLDExNywyNCwwLDAsMCwKLSAgICA5NSwxMTQsMTAxLDExMywxMTcsMTA1LDExNCwxMDEsMTE1LDk1LDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLAotICAgIDk1LDExOSwxMTQsOTcsMTEyLDExMiwxMDEsMTE0LDQwLDAsMCwwLDAsNDAsMSwwLAotICAgIDAsMCwxMTcsMywwLDAsMCwxMDIsMTIwLDExMCwxMTcsMjksMCwwLDAsNjAsCi0gICAgMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCwKLSAgICA0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDE2LDAsMCwKLSAgICAwLDk1LDExNCwxMDEsMTEzLDExNywxMDUsMTE0LDEwMSwxMTUsOTUsMTAyLDExNCwxMTEsMTIyLDEwMSwKLSAgICAxMTAsODgsMiwwLDAsMTE1LDYsMCwwLDAsMCwyLDE4LDUsMTMsMSwKLSAgICAxMTcsMTYsMCwwLDAsOTUsMTE0LDEwMSwxMTMsMTE3LDEwNSwxMTQsMTAxLDExNSw5NSwxMDIsCi0gICAgMTE0LDExMSwxMjIsMTAxLDExMCw5OSwyLDAsMCwwLDAsMCwwLDAsNSwwLAotICAgIDAsMCw1LDAsMCwwLDY3LDAsMCwwLDExNSw4NywwLDAsMCwxMjQsCi0gICAgMCwwLDEwNiwwLDAsMTI0LDEsMCwxMzEsMSwwLDkyLDIsMCwxMjUsMiwKLSAgICAwLDEyNSwzLDAsMTI0LDIsMCwxMDAsMywwLDEwNyw4LDAsMTE0LDgzLDAsCi0gICAgMTE2LDIsMCwxMjQsMywwLDEzMSwxLDAsMTE0LDgzLDAsMTAwLDEsMCwxMjUsCi0gICAgNCwwLDExNiwzLDAsMTA2LDQsMCwxMjQsNCwwLDEwNiw1LDAsMTI0LDMsCi0gICAgMCwxMDAsMiwwLDI1LDEzMSwxLDAsMTE2LDYsMCwxMzEsMiwwLDEsMTEwLAotICAgIDAsMCwxMjQsMiwwLDgzLDQwLDQsMCwwLDAsMTE3LDg2LDAsMCwwLAotICAgIDg0LDExNCwxMjEsMzIsMTE2LDExMSwzMiwxMDIsMTA1LDExMCwxMDAsMzIsOTcsMzIsMTA4LDExMSwKLSAgICA5NywxMDAsMTAxLDExNCwzMiwxMDIsMTExLDExNCwzMiwxMTYsMTA0LDEwMSwzMiwxMTUsMTEyLDEwMSwKLSAgICA5OSwxMDUsMTAyLDEwNSwxMDEsMTAwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDk4LDEyMSwKLSAgICAzMiwxMDAsMTAxLDEwOCwxMDEsMTAzLDk3LDExNiwxMDUsMTEwLDEwMywzMiwxMTYsMTExLDEwLDMyLAotICAgIDMyLDMyLDMyLDExNSwxMDEsMTA4LDEwMiw0NiwxMDIsMTA1LDExMCwxMDAsOTUsMTA4LDExMSw5NywKLSAgICAxMDAsMTAxLDExNCw0MCw0MSw0NiwxMTcsNDQsMCwwLDAsNzgsMTExLDExNiwzMiwxMDUsCi0gICAgMTA5LDExMiwxMTEsMTE0LDExNiwxMDUsMTEwLDEwMywzMiwxMDAsMTA1LDExNCwxMDEsOTksMTE2LDExMSwKLSAgICAxMTQsMTIxLDMyLDEyMywxMjUsNTgsMzIsMTA5LDEwNSwxMTUsMTE1LDEwNSwxMTAsMTAzLDMyLDk1LAotICAgIDk1LDEwNSwxMTAsMTA1LDExNiw5NSw5NSwxMDUsMCwwLDAsMCw3OCw0MCw3LDAsCi0gICAgMCwwLDExNywxMSwwLDAsMCwxMDIsMTA1LDExMCwxMDAsOTUsMTA4LDExMSw5NywxMDAsCi0gICAgMTAxLDExNCwxMTcsNCwwLDAsMCw3OCwxMTEsMTEwLDEwMSwxMTcsMywwLDAsMCwKLSAgICAxMDgsMTAxLDExMCwxMTcsOSwwLDAsMCw5NSwxMTksOTcsMTE0LDExMCwxMDUsMTEwLDEwMywKLSAgICAxMTUsMTE3LDQsMCwwLDAsMTE5LDk3LDExNCwxMTAsMTE3LDYsMCwwLDAsMTAyLAotICAgIDExMSwxMTQsMTA5LDk3LDExNiwxMTcsMTMsMCwwLDAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiwKLSAgICA4Nyw5NywxMTQsMTEwLDEwNSwxMTAsMTAzLDQwLDUsMCwwLDAsMTE3LDQsMCwwLAotICAgIDAsMTE1LDEwMSwxMDgsMTAyLDExNyw4LDAsMCwwLDEwMiwxMTcsMTA4LDEwOCwxMTAsOTcsCi0gICAgMTA5LDEwMSwxMTcsNiwwLDAsMCwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDExNyw4LDAsCi0gICAgMCwwLDExMiwxMTEsMTE0LDExNiwxMDUsMTExLDExMCwxMTUsMTE3LDMsMCwwLDAsMTA5LAotICAgIDExNSwxMDMsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsCi0gICAgMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsCi0gICAgMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTcsCi0gICAgMCwwLDAsOTUsMTAyLDEwNSwxMTAsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LAotICAgIDExNSwxMDQsMTA1LDEwOSw5OSwyLDAsMCwxMTUsMTAsMCwwLDAsMCw2LDIxLAotICAgIDEsMjQsMSw2LDEsMzIsMSwxMTcsMTcsMCwwLDAsOTUsMTAyLDEwNSwxMTAsCi0gICAgMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDExNSwxMDQsMTA1LDEwOSw5OSwxLDAsCi0gICAgMCwwLDAsMCwwLDAsMSwwLDAsMCw2LDAsMCwwLDY2LDAsCi0gICAgMCwwLDExNSwxNzMsMCwwLDAsMTI0LDAsMCw2OSwxMDEsMCwwLDkwLDEsCi0gICAgMCwxMDAsMCwwLDkwLDIsMCwxMDAsMSwwLDkwLDMsMCwxMDEsNCwwLAotICAgIDEwMCwyLDAsMTAwLDMsMCwxMzIsMCwwLDEzMSwxLDAsOTAsNSwwLDEwMSwKLSAgICA0LDAsMTAwLDE0LDAsMTAwLDQsMCwxMDAsNSwwLDEzMiwxLDAsMTMxLDEsCi0gICAgMCw5MCw3LDAsMTAxLDQsMCwxMDEsOCwwLDEwMSw5LDAsMTAxLDEwLDAsCi0gICAgMTAwLDYsMCwxMDAsNywwLDEzMiwwLDAsMTMxLDEsMCwxMzEsMSwwLDEzMSwKLSAgICAxLDAsMTMxLDEsMCw5MCwxMSwwLDEwMSw0LDAsMTAxLDEwLDAsMTAwLDgsCi0gICAgMCwxMDAsOSwwLDEzMiwwLDAsMTMxLDEsMCwxMzEsMSwwLDkwLDEyLDAsCi0gICAgMTAxLDQsMCwxMDEsMTAsMCwxMDAsMTAsMCwxMDAsMTEsMCwxMzIsMCwwLDEzMSwKLSAgICAxLDAsMTMxLDEsMCw5MCwxMywwLDEwMSw0LDAsMTAxLDEwLDAsMTAwLDEyLAotICAgIDAsMTAwLDEzLDAsMTMyLDAsMCwxMzEsMSwwLDEzMSwxLDAsOTAsMTQsMCwKLSAgICAxMDAsMTQsMCw4Myw0MCwxNSwwLDAsMCwxMTcsMTUsMCwwLDAsNjYsMTE3LAotICAgIDEwNSwxMDgsMTE2LDEwNSwxMTAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDExNywxNDQsMCwKLSAgICAwLDAsNzcsMTAxLDExNiw5NywzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMDUsMTA5LDExMiwxMTEsCi0gICAgMTE0LDExNiwzMiwxMDIsMTExLDExNCwzMiw5OCwxMTcsMTA1LDEwOCwxMTYsNDUsMTA1LDExMCwzMiwKLSAgICAxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsNDYsMTAsMTAsMzIsMzIsMzIsMzIsNjUsMTA4LAotICAgIDEwOCwzMiwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwxMTUsMzIsOTcsMTE0LDEwMSwzMiwxMDEsMTA1LAotICAgIDExNiwxMDQsMTAxLDExNCwzMiw5OSwxMDgsOTcsMTE1LDExNSwzMiwxMTEsMTE0LDMyLDExNSwxMTYsCi0gICAgOTcsMTE2LDEwNSw5OSwzMiwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwxMTUsMzIsMTE2LDExMSwzMiwKLSAgICA5NywxMTgsMTExLDEwNSwxMDAsMzIsMTE2LDEwNCwxMDEsMzIsMTEwLDEwMSwxMDEsMTAwLDMyLDExNiwKLSAgICAxMTEsMTAsMzIsMzIsMzIsMzIsMTA1LDExMCwxMTUsMTE2LDk3LDExMCwxMTYsMTA1LDk3LDExNiwKLSAgICAxMDEsMzIsMTE2LDEwNCwxMDEsMzIsOTksMTA4LDk3LDExNSwxMTUsNDYsMTAsMTAsMzIsMzIsCi0gICAgMzIsMzIsOTksMiwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMiwKLSAgICAwLDAsMCw2NywwLDAsMCwxMTUsMTYsMCwwLDAsMTAwLDEsMCwxMDYsCi0gICAgMCwwLDEyNCwxLDAsMTA2LDEsMCwxMzEsMSwwLDgzLDQwLDIsMCwwLAotICAgIDAsNzgsMTE3LDI0LDAsMCwwLDYwLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDM5LAotICAgIDEyMywxMjUsMzksMzIsNDAsOTgsMTE3LDEwNSwxMDgsMTE2LDQ1LDEwNSwxMTAsNDEsNjIsNDAsCi0gICAgMiwwLDAsMCwxMTcsNiwwLDAsMCwxMDIsMTExLDExNCwxMDksOTcsMTE2LDExNywKLSAgICA4LDAsMCwwLDk1LDk1LDExMCw5NywxMDksMTAxLDk1LDk1LDQwLDIsMCwwLAotICAgIDAsMTE3LDMsMCwwLDAsOTksMTA4LDExNSwxMTcsNiwwLDAsMCwxMDksMTExLAotICAgIDEwMCwxMTcsMTA4LDEwMSw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LAotICAgIDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsCi0gICAgMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLAotICAgIDExNywxMSwwLDAsMCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwxMTQsMTAxLDExMiwxMTQsCi0gICAgMTI1LDIsMCwwLDExNSwyLDAsMCwwLDAsMiwxMTcsMjcsMCwwLDAsCisgICAgMzIsNzgsOTksMiwwLDAsMCwwLDAsMCwwLDQsMCwwLDAsNSwKKyAgICAwLDAsMCwzMSwwLDAsMCwxMTUsODMsMCwwLDAsMTI0LDEsMCwxMDAsCisgICAgMCwwLDEwNyw4LDAsMTE0LDI0LDAsMTI0LDAsMCwxMDYsMCwwLDEyNSwxLAorICAgIDAsMTEwLDQwLDAsMTI0LDAsMCwxMDYsMCwwLDEyNCwxLDAsMTA3LDMsMCwKKyAgICAxMTQsNjQsMCwxMTYsMSwwLDEwMCwxLDAsMTI0LDEsMCwyMiwxMDAsMiwwLAorICAgIDEyNCwxLDAsMTMxLDEsMSwxMzAsMSwwLDExMCwwLDAsMTM2LDAsMCwxMjQsCisgICAgMCwwLDEyNCwxLDAsMTI0LDIsMCwxMjQsMywwLDE0MiwyLDAsODMsNDEsCisgICAgMyw3OCwxMjIsMjMsMTA4LDExMSw5NywxMDAsMTAxLDExNCwzMiw5OSw5NywxMTAsMTEwLDExMSwKKyAgICAxMTYsMzIsMTA0LDk3LDExMCwxMDAsMTA4LDEwMSwzMiwzNywxMTUsMTE0LDY3LDAsMCwwLAorICAgIDQxLDIsMTE0LDY3LDAsMCwwLDIxOCwxMSw3MywxMDksMTEyLDExMSwxMTQsMTE2LDY5LAorICAgIDExNCwxMTQsMTExLDExNCw0MSw0LDExNCw3MSwwLDAsMCwxMTQsNjcsMCwwLDAsCisgICAgMTE0LDgwLDAsMCwwLDExNCwxMDgsMCwwLDAsNDEsMSwyMTgsNiwxMDksMTAxLAorICAgIDExNiwxMDQsMTExLDEwMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMTksCisgICAgOTUsOTksMTA0LDEwMSw5OSwxMDcsOTUsMTEwLDk3LDEwOSwxMDEsOTUsMTE5LDExNCw5NywxMTIsCisgICAgMTEyLDEwMSwxMTQsMjIsMiwwLDAsMTE1LDEwLDAsMCwwLDAsMSwxMiwxLAorICAgIDEyLDEsMTUsMSwyNSwxLDEyMiw0MCw5NSw5OSwxMDQsMTAxLDk5LDEwNyw5NSwxMTAsCisgICAgOTcsMTA5LDEwMSw0Niw2MCwxMDgsMTExLDk5LDk3LDEwOCwxMTUsNjIsNDYsOTUsOTksMTA0LAorICAgIDEwMSw5OSwxMDcsOTUsMTEwLDk3LDEwOSwxMDEsOTUsMTE5LDExNCw5NywxMTIsMTEyLDEwMSwxMTQsCisgICAgNDEsMSwxMTQsNjUsMCwwLDAsNDEsMiwxMTQsMTU1LDAsMCwwLDExNCwxNTYsCisgICAgMCwwLDAsMTE0LDQsMCwwLDAsNDEsMSwxMTQsMTU1LDAsMCwwLDExNCwKKyAgICA1LDAsMCwwLDIxOCwxMSw5NSw5OSwxMDQsMTAxLDk5LDEwNyw5NSwxMTAsOTcsMTA5LAorICAgIDEwMSwxNCwyLDAsMCwxMTUsNiwwLDAsMCwwLDgsMjEsNiwxMywxLAorICAgIDExNCwxNTcsMCwwLDAsOTksMSwwLDAsMCwwLDAsMCwwLDIsMCwKKyAgICAwLDAsMywwLDAsMCwzLDAsMCwwLDExNSwzNSwwLDAsMCwxMzUsCisgICAgMCwwLDEwMiwxLDAsMTAwLDEsMCwxMDAsMiwwLDEzNCwwLDAsMTI1LDEsCisgICAgMCwxMTYsMCwwLDEyNCwxLDAsMTM2LDAsMCwxMzEsMiwwLDEsMTI0LDEsCisgICAgMCw4Myw0MSwzLDEyMiw0OSw2OCwxMDEsOTksMTExLDExNCw5NywxMTYsMTExLDExNCwzMiwKKyAgICAxMTYsMTExLDMyLDExOCwxMDEsMTE0LDEwNSwxMDIsMTIxLDMyLDExNiwxMDQsMTAxLDMyLDExMCw5NywKKyAgICAxMDksMTAxLDEwMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMDUsMTE1LDMyLDk4LDExNywKKyAgICAxMDUsMTA4LDExNiw0NSwxMDUsMTEwLDQ2LDk5LDIsMCwwLDAsMCwwLDAsMCwKKyAgICAyLDAsMCwwLDQsMCwwLDAsMTksMCwwLDAsMTE1LDU4LDAsMCwKKyAgICAwLDEyNCwxLDAsMTE2LDAsMCwxMDYsMSwwLDEwNyw3LDAsMTE0LDQ1LDAsCisgICAgMTE2LDIsMCwxMDAsMSwwLDEwNiwzLDAsMTI0LDEsMCwxMzEsMSwwLDEwMCwKKyAgICAyLDAsMTI0LDEsMCwxMzEsMSwxLDEzMCwxLDAsMTEwLDAsMCwxMzYsMCwKKyAgICAwLDEyNCwwLDAsMTI0LDEsMCwxMzEsMiwwLDgzLDQxLDMsNzgsMTIyLDI5LAorICAgIDEyMywzMywxMTQsMTI1LDMyLDEwNSwxMTUsMzIsMTEwLDExMSwxMTYsMzIsOTcsMzIsOTgsMTE3LAorICAgIDEwNSwxMDgsMTE2LDQ1LDEwNSwxMTAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE0LDY3LDAsCisgICAgMCwwLDQxLDQsMTE0LDcsMCwwLDAsMjE4LDIwLDk4LDExNywxMDUsMTA4LDExNiwKKyAgICAxMDUsMTEwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDExMCw5NywxMDksMTAxLDExNSwxMTQsCisgICAgMTU0LDAsMCwwLDExNCw0NywwLDAsMCw0MSwyLDExNCw3MSwwLDAsMCwKKyAgICAyMTgsOCwxMDIsMTE3LDEwOCwxMDgsMTEwLDk3LDEwOSwxMDEsNDEsMSwyMTgsMywxMDIsMTIwLAorICAgIDExMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMjUsOTUsMTE0LDEwMSwKKyAgICAxMTMsMTE3LDEwNSwxMTQsMTAxLDExNSw5NSw5OCwxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCw5NSwxMTksCisgICAgMTE0LDk3LDExMiwxMTIsMTAxLDExNCwzNCwyLDAsMCwxMTUsOCwwLDAsMCwwLAorICAgIDEsMTUsMSwxOCwxLDEyLDEsMTIyLDUyLDk1LDExNCwxMDEsMTEzLDExNywxMDUsMTE0LAorICAgIDEwMSwxMTUsOTUsOTgsMTE3LDEwNSwxMDgsMTE2LDEwNSwxMTAsNDYsNjAsMTA4LDExMSw5OSw5NywKKyAgICAxMDgsMTE1LDYyLDQ2LDk1LDExNCwxMDEsMTEzLDExNywxMDUsMTE0LDEwMSwxMTUsOTUsOTgsMTE3LAorICAgIDEwNSwxMDgsMTE2LDEwNSwxMTAsOTUsMTE5LDExNCw5NywxMTIsMTEyLDEwMSwxMTQsNDEsMSwxMTQsCisgICAgNjUsMCwwLDAsNDEsMiwxMTQsMTYwLDAsMCwwLDExNCwxNjEsMCwwLDAsCisgICAgMTE0LDQsMCwwLDAsNDEsMSwxMTQsMTYwLDAsMCwwLDExNCw1LDAsMCwKKyAgICAwLDIxOCwxNyw5NSwxMTQsMTAxLDExMywxMTcsMTA1LDExNCwxMDEsMTE1LDk1LDk4LDExNywxMDUsCisgICAgMTA4LDExNiwxMDUsMTEwLDMyLDIsMCwwLDExNSw2LDAsMCwwLDAsMiwxOCwKKyAgICA1LDEzLDEsMTE0LDE2MiwwLDAsMCw5OSwxLDAsMCwwLDAsMCwwLAorICAgIDAsMiwwLDAsMCwzLDAsMCwwLDMsMCwwLDAsMTE1LDM1LDAsCisgICAgMCwwLDEzNSwwLDAsMTAyLDEsMCwxMDAsMSwwLDEwMCwyLDAsMTM0LDAsCisgICAgMCwxMjUsMSwwLDExNiwwLDAsMTI0LDEsMCwxMzYsMCwwLDEzMSwyLDAsCisgICAgMSwxMjQsMSwwLDgzLDQxLDMsMTIyLDQ3LDY4LDEwMSw5OSwxMTEsMTE0LDk3LDExNiwKKyAgICAxMTEsMTE0LDMyLDExNiwxMTEsMzIsMTE4LDEwMSwxMTQsMTA1LDEwMiwxMjEsMzIsMTE2LDEwNCwxMDEsCisgICAgMzIsMTEwLDk3LDEwOSwxMDEsMTAwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEwNSwxMTUsCisgICAgMzIsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsNDYsOTksMiwwLDAsMCwwLDAsMCwKKyAgICAwLDIsMCwwLDAsNCwwLDAsMCwxOSwwLDAsMCwxMTUsNTgsMCwKKyAgICAwLDAsMTE2LDAsMCwxMDYsMSwwLDEyNCwxLDAsMTMxLDEsMCwxMTUsNDUsCisgICAgMCwxMTYsMiwwLDEwMCwxLDAsMTA2LDMsMCwxMjQsMSwwLDEzMSwxLDAsCisgICAgMTAwLDIsMCwxMjQsMSwwLDEzMSwxLDEsMTMwLDEsMCwxMTAsMCwwLDEzNiwKKyAgICAwLDAsMTI0LDAsMCwxMjQsMSwwLDEzMSwyLDAsODMsNDEsMyw3OCwxMjIsCisgICAgMjcsMTIzLDMzLDExNCwxMjUsMzIsMTA1LDExNSwzMiwxMTAsMTExLDExNiwzMiw5NywzMiwxMDIsCisgICAgMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTQsNjcsMCwwLAorICAgIDAsNDEsNCwxMTQsMTA2LDAsMCwwLDIxOCw5LDEwNSwxMTUsOTUsMTAyLDExNCwxMTEsCisgICAgMTIyLDEwMSwxMTAsMTE0LDE1NCwwLDAsMCwxMTQsNDcsMCwwLDAsNDEsMiwxMTQsCisgICAgNzEsMCwwLDAsMTE0LDE1OSwwLDAsMCw0MSwxLDExNCwxNjAsMCwwLDAsCisgICAgMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDI0LDk1LDExNCwxMDEsMTEzLAorICAgIDExNywxMDUsMTE0LDEwMSwxMTUsOTUsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsOTUsMTE5LDExNCw5NywKKyAgICAxMTIsMTEyLDEwMSwxMTQsNDUsMiwwLDAsMTE1LDgsMCwwLDAsMCwxLDE1LAorICAgIDEsMTgsMSwxMiwxLDEyMiw1MCw5NSwxMTQsMTAxLDExMywxMTcsMTA1LDExNCwxMDEsMTE1LAorICAgIDk1LDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDQ2LDYwLDEwOCwxMTEsOTksOTcsMTA4LDExNSw2MiwKKyAgICA0Niw5NSwxMTQsMTAxLDExMywxMTcsMTA1LDExNCwxMDEsMTE1LDk1LDEwMiwxMTQsMTExLDEyMiwxMDEsCisgICAgMTEwLDk1LDExOSwxMTQsOTcsMTEyLDExMiwxMDEsMTE0LDQxLDEsMTE0LDY1LDAsMCwwLAorICAgIDQxLDIsMTE0LDE2MCwwLDAsMCwxMTQsMTY0LDAsMCwwLDExNCw0LDAsMCwKKyAgICAwLDQxLDEsMTE0LDE2MCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMTYsOTUsCisgICAgMTE0LDEwMSwxMTMsMTE3LDEwNSwxMTQsMTAxLDExNSw5NSwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCw0MywKKyAgICAyLDAsMCwxMTUsNiwwLDAsMCwwLDIsMTgsNSwxMywxLDExNCwxNjUsCisgICAgMCwwLDAsOTksMiwwLDAsMCwwLDAsMCwwLDUsMCwwLDAsCisgICAgNCwwLDAsMCw2NywwLDAsMCwxMTUsODcsMCwwLDAsMTI0LDAsMCwKKyAgICAxMDYsMCwwLDEyNCwxLDAsMTMxLDEsMCw5MiwyLDAsMTI1LDIsMCwxMjUsCisgICAgMywwLDEyNCwyLDAsMTAwLDEsMCwxMDcsOCwwLDExNCw4MywwLDExNiwxLAorICAgIDAsMTI0LDMsMCwxMzEsMSwwLDExNCw4MywwLDEwMCwyLDAsMTI1LDQsMCwKKyAgICAxMTYsMiwwLDEwNiwzLDAsMTI0LDQsMCwxMDYsNCwwLDEyNCwzLDAsMTAwLAorICAgIDMsMCwyNSwxMzEsMSwwLDExNiw1LDAsMTMxLDIsMCwxLDExMCwwLDAsCisgICAgMTI0LDIsMCw4Myw0MSw0LDEyMiwxNTUsODQsMTE0LDEyMSwzMiwxMTYsMTExLDMyLDEwMiwKKyAgICAxMDUsMTEwLDEwMCwzMiw5NywzMiwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDMyLDEwMiwxMTEsMTE0LAorICAgIDMyLDExNiwxMDQsMTAxLDMyLDExNSwxMTIsMTAxLDk5LDEwNSwxMDIsMTA1LDEwMSwxMDAsMzIsMTA5LAorICAgIDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsOTgsMTIxLDMyLDEwMCwxMDEsMTA4LDEwMSwxMDMsOTcsMTE2LAorICAgIDEwNSwxMTAsMTAzLDMyLDExNiwxMTEsMTAsMzIsMzIsMzIsMzIsMTE1LDEwMSwxMDgsMTAyLDQ2LAorICAgIDEwMiwxMDUsMTEwLDEwMCw5NSwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDQwLDQxLDQ2LDEwLDEwLAorICAgIDMyLDMyLDMyLDMyLDg0LDEwNCwxMDUsMTE1LDMyLDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDMyLAorICAgIDEwNSwxMTUsMzIsMTAwLDEwMSwxMTIsMTE0LDEwMSw5OSw5NywxMTYsMTAxLDEwMCwzMiwxMDUsMTEwLAorICAgIDMyLDEwMiw5NywxMTgsMTExLDExNCwzMiwxMTEsMTAyLDMyLDEwMiwxMDUsMTEwLDEwMCwxMDEsMTE0LAorICAgIDQ2LDEwMiwxMDUsMTEwLDEwMCw5NSwxMTUsMTEyLDEwMSw5OSw0MCw0MSw0NiwxMCwxMCwzMiwKKyAgICAzMiwzMiwzMiw3OCwxMjIsNDQsNzgsMTExLDExNiwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwKKyAgICAxMDUsMTEwLDEwMywzMiwxMDAsMTA1LDExNCwxMDEsOTksMTE2LDExMSwxMTQsMTIxLDMyLDEyMywxMjUsCisgICAgNTgsMzIsMTA5LDEwNSwxMTUsMTE1LDEwNSwxMTAsMTAzLDMyLDk1LDk1LDEwNSwxMTAsMTA1LDExNiwKKyAgICA5NSw5NSwxMTQsODQsMCwwLDAsNDEsNiwyMTgsMTEsMTAyLDEwNSwxMTAsMTAwLDk1LAorICAgIDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMTE0LDMxLDAsMCwwLDIxOCw5LDk1LDExOSw5NywKKyAgICAxMTQsMTEwLDEwNSwxMTAsMTAzLDExNSwyMTgsNCwxMTksOTcsMTE0LDExMCwxMTQsNDcsMCwwLAorICAgIDAsMjE4LDEzLDczLDEwOSwxMTIsMTExLDExNCwxMTYsODcsOTcsMTE0LDExMCwxMDUsMTEwLDEwMywKKyAgICA0MSw1LDExNCw3MSwwLDAsMCwxMTQsMTU5LDAsMCwwLDIxOCw2LDEwOCwxMTEsCisgICAgOTcsMTAwLDEwMSwxMTQsMjE4LDgsMTEyLDExMSwxMTQsMTE2LDEwNSwxMTEsMTEwLDExNSwyMTgsMywKKyAgICAxMDksMTE1LDEwMywxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLAorICAgIDAsMCwyMTgsMTcsOTUsMTAyLDEwNSwxMTAsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAorICAgIDk1LDExNSwxMDQsMTA1LDEwOSw1NCwyLDAsMCwxMTUsMTAsMCwwLDAsMCwxMCwKKyAgICAyMSwxLDI0LDEsNiwxLDMyLDEsMTE0LDE3MywwLDAsMCw5OSwyLDAsCisgICAgMCwwLDAsMCwwLDAsNSwwLDAsMCwzLDAsMCwwLDY3LDAsCisgICAgMCwwLDExNSw5MywwLDAsMCwxMTYsMCwwLDEyNCwxLDAsMTI0LDAsMCwKKyAgICAxMzEsMiwwLDEyNSwyLDAsMTE2LDEsMCwxMjQsMiwwLDEzMSwxLDAsMTI1LAorICAgIDMsMCwxMjQsMSwwLDExNiwyLDAsMTA2LDMsMCwxMDcsNiwwLDExNCw3OSwKKyAgICAwLDExNiwyLDAsMTA2LDMsMCwxMjQsMSwwLDI1LDEyNSw0LDAsMTI0LDMsCisgICAgMCwxMDYsNCwwLDEyNCw0LDAsMTMxLDEsMCwxLDExNiwyLDAsMTA2LDMsCisgICAgMCwxMjQsMSwwLDI1LDgzLDEyNCwzLDAsMTA2LDUsMCwxMzEsMCwwLDgzLAorICAgIDEwMCwxLDAsODMsNDEsMiwxMjIsMTI4LDc2LDExMSw5NywxMDAsMzIsMTE2LDEwNCwxMDEsCisgICAgMzIsMTE1LDExMiwxMDEsOTksMTA1LDEwMiwxMDUsMTAxLDEwMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LAorICAgIDEwMSwzMiwxMDUsMTEwLDExNiwxMTEsMzIsMTE1LDEyMSwxMTUsNDYsMTA5LDExMSwxMDAsMTE3LDEwOCwKKyAgICAxMDEsMTE1LDMyLDk3LDExMCwxMDAsMzIsMTE0LDEwMSwxMTYsMTE3LDExNCwxMTAsMzIsMTA1LDExNiwKKyAgICA0NiwxMCwxMCwzMiwzMiwzMiwzMiw4NCwxMDQsMTA1LDExNSwzMiwxMDksMTAxLDExNiwxMDQsCisgICAgMTExLDEwMCwzMiwxMDUsMTE1LDMyLDEwMCwxMDEsMTEyLDExNCwxMDEsOTksOTcsMTE2LDEwMSwxMDAsCisgICAgNDYsMzIsMzIsODUsMTE1LDEwMSwzMiwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDEwMSwxMjAsCisgICAgMTAxLDk5LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEwNSwxMTAsMTE1LDExNiwxMDEsOTcsCisgICAgMTAwLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDc4LDQxLDYsMjE4LDE2LDExNSwxMTIsMTAxLAorICAgIDk5LDk1LDEwMiwxMTQsMTExLDEwOSw5NSwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDIxOCwxMiw5NSwKKyAgICA4MywxMTIsMTAxLDk5LDc3LDEwMSwxMTYsMTA0LDExMSwxMDAsMTE1LDExNCw3LDAsMCwwLAorICAgIDExNCw3MywwLDAsMCwyMTgsNCwxMDEsMTIwLDEwMSw5OSwyMTgsNCwxMDgsMTExLDk3LAorICAgIDEwMCw0MSw1LDExNCw3MSwwLDAsMCwxMTQsMTU5LDAsMCwwLDIxOCw0LDExNSwKKyAgICAxMTIsMTAxLDk5LDIxOCw3LDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDExNSwyMTgsNiwxMDksMTExLAorICAgIDEwMCwxMTcsMTA4LDEwMSwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwKKyAgICAwLDAsMCwyMTgsMTcsOTUsMTA4LDExMSw5NywxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwKKyAgICAxMDEsOTUsMTE1LDEwNCwxMDUsMTA5LDcxLDIsMCwwLDExNSwxNCwwLDAsMCwwLAorICAgIDYsMTUsMSwxMiwxLDE1LDEsMTMsMSwxMywxLDExLDIsMTE0LDE4MSwwLAorICAgIDAsMCw5OSw0LDAsMCwwLDAsMCwwLDAsMTEsMCwwLDAsMTksCisgICAgMCwwLDAsNjcsMCwwLDAsMTE1LDI1NSwxLDAsMCwxMDUsMCwwLDEyNSwKKyAgICA0LDAsMTI0LDIsMCwxMDAsMSwwLDEwNyw5LDAsMTE0LDMxLDAsMTI0LDIsCisgICAgMCwxMjQsNCwwLDEwMCwyLDAsNjAsMTEwLDYsMCwxMDAsMywwLDEyNSwyLAorICAgIDAsMTI0LDMsMCwxMDAsMSwwLDEwNyw5LDAsMTE0LDYyLDAsMTI0LDMsMCwKKyAgICAxMjQsNCwwLDEwMCw0LDAsNjAsMTEwLDAsMCwxMjQsMCwwLDEwMCwxLDAsCisgICAgMTAwLDUsMCwxMzMsMiwwLDI1LDEyNSw1LDAsMTI0LDAsMCwxMDAsNSwwLAorICAgIDEwMCw2LDAsMTMzLDIsMCwyNSwxMjUsNiwwLDEyNCwwLDAsMTAwLDYsMCwKKyAgICAxMDAsNywwLDEzMywyLDAsMjUsMTI1LDcsMCwxMjQsNSwwLDExNiwwLDAsCisgICAgMTA3LDMsMCwxMTQsMTcxLDAsMTAwLDgsMCwxMDYsMSwwLDEyNCwyLDAsMTI0LAorICAgIDUsMCwxMzEsMiwwLDEyNSw4LDAsMTE2LDIsMCwxMDAsOSwwLDEyNCw4LAorICAgIDAsMTMxLDIsMCwxLDExNiwzLDAsMTI0LDgsMCwxMjQsNCwwLDE0MSwxLAorICAgIDAsMTMwLDEsMCwxMTAsMTIyLDAsMTE2LDQsMCwxMjQsNiwwLDEzMSwxLDAsCisgICAgMTAwLDUsMCwxMDcsMywwLDExNCwyMzIsMCwxMDAsMTAsMCwxMDYsMSwwLDEyNCwKKyAgICAyLDAsMTMxLDEsMCwxMjUsOCwwLDExNiwyLDAsMTAwLDksMCwxMjQsOCwKKyAgICAwLDEzMSwyLDAsMSwxMTYsNSwwLDEyNCw4LDAsMTMxLDEsMCwxMzAsMSwKKyAgICAwLDExMCw2MSwwLDExNiw0LDAsMTI0LDcsMCwxMzEsMSwwLDEwMCw1LDAsCisgICAgMTA3LDMsMCwxMTQsMzcsMSwxMDAsMTEsMCwxMDYsMSwwLDEyNCwyLDAsMTMxLAorICAgIDEsMCwxMjUsOCwwLDExNiwyLDAsMTAwLDksMCwxMjQsOCwwLDEzMSwyLAorICAgIDAsMSwxMTYsNSwwLDEyNCw4LDAsMTMxLDEsMCwxMzAsMSwwLDExMCwwLAorICAgIDAsMTI0LDEsMCwxMDAsMSwwLDEwNyw5LDAsMTE0LDI0MSwxLDEyMSwyMCwwLAorICAgIDExNiw2LDAsMTI0LDEsMCwxMDAsMTIsMCwyNSwxMzEsMSwwLDEyNSw5LDAsCisgICAgODcsMTEwLDE4LDAsNCwxMTYsNywwLDEwNywxMCwwLDExNCw4OSwxLDEsMSwKKyAgICAxLDg5LDExMCw2NSwwLDg4LDExNiw4LDAsMTI0LDYsMCwxMzEsMSwwLDEyNCwKKyAgICA5LDAsMTA3LDMsMCwxMTQsMTU0LDEsMTAwLDEzLDAsMTA2LDEsMCwxMjQsMiwKKyAgICAwLDEzMSwxLDAsMTI1LDgsMCwxMTYsMiwwLDEwMCw5LDAsMTI0LDgsMCwKKyAgICAxMzEsMiwwLDEsMTE2LDMsMCwxMjQsOCwwLDEyNCw0LDAsMTQxLDEsMCwKKyAgICAxMzAsMSwwLDExMCwwLDAsMTIxLDE4LDAsMTI0LDEsMCwxMDAsMTQsMCwyNSwKKyAgICAxMDAsMTUsMCw2NCwxMjUsMTAsMCw4NywxMTAsMTgsMCw0LDExNiw3LDAsMTA3LAorICAgIDEwLDAsMTE0LDE5MiwxLDEsMSwxLDg5LDExMywyNDEsMSw4OCwxMTYsOCwwLAorICAgIDEyNCw3LDAsMTMxLDEsMCwxMjQsMTAsMCwxMDcsMywwLDExNCwyNDEsMSwxMTYsCisgICAgMywwLDEwMCwxMywwLDEwNiwxLDAsMTI0LDIsMCwxMzEsMSwwLDEyNCw0LAorICAgIDAsMTQxLDEsMCwxMzAsMSwwLDExMywyNDEsMSwxMTAsMCwwLDEyNCwwLDAsCisgICAgMTAwLDcsMCwxMDAsMSwwLDEzMywyLDAsMjUsODMsNDEsMTYsOTcsMTIyLDEsCisgICAgMCwwLDg2LDk3LDEwOCwxMDUsMTAwLDk3LDExNiwxMDEsMzIsMTE2LDEwNCwxMDEsMzIsMTA0LAorICAgIDEwMSw5NywxMDAsMTAxLDExNCwzMiwxMTEsMTAyLDMyLDExNiwxMDQsMTAxLDMyLDExMiw5NywxMTUsCisgICAgMTE1LDEwMSwxMDAsNDUsMTA1LDExMCwzMiw5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSwzMiwKKyAgICA5NywxMDMsOTcsMTA1LDExMCwxMTUsMTE2LDMyLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsOTUsMTE1LAorICAgIDExNiw5NywxMTYsMTE1LDMyLDQwLDEwNSwxMDIsMTAsMzIsMzIsMzIsMzIsMTAzLDEwNSwxMTgsCisgICAgMTAxLDExMCw0MSwzMiw5NywxMTAsMTAwLDMyLDExNCwxMDEsMTE2LDExNywxMTQsMTEwLDEwNSwxMTAsCisgICAgMTAzLDMyLDExNiwxMDQsMTAxLDMyLDk4LDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDMyLDExNiwKKyAgICAxMDQsOTcsMTE2LDMyLDk5LDk3LDExMCwzMiw5OCwxMDEsMzIsOTksMTExLDEwOSwxMTIsMTA1LAorICAgIDEwOCwxMDEsMTAwLDMyLDk4LDEyMSwzMiw5OSwxMTEsMTA5LDExMiwxMDUsMTA4LDEwMSw0MCw0MSwKKyAgICA0NiwxMCwxMCwzMiwzMiwzMiwzMiw2NSwxMDgsMTA4LDMyLDExMSwxMTYsMTA0LDEwMSwxMTQsCisgICAgMzIsOTcsMTE0LDEwMywxMTcsMTA5LDEwMSwxMTAsMTE2LDExNSwzMiw5NywxMTQsMTAxLDMyLDExNywKKyAgICAxMTUsMTAxLDEwMCwzMiwxMTYsMTExLDMyLDEwMSwxMTAsMTA0LDk3LDExMCw5OSwxMDEsMzIsMTAxLAorICAgIDExNCwxMTQsMTExLDExNCwzMiwxMTQsMTAxLDExMiwxMTEsMTE0LDExNiwxMDUsMTEwLDEwMyw0NiwxMCwKKyAgICAxMCwzMiwzMiwzMiwzMiw3MywxMDksMTEyLDExMSwxMTQsMTE2LDY5LDExNCwxMTQsMTExLDExNCwKKyAgICAzMiwxMDUsMTE1LDMyLDExNCw5NywxMDUsMTE1LDEwMSwxMDAsMzIsMTE5LDEwNCwxMDEsMTEwLDMyLAorICAgIDExNiwxMDQsMTAxLDMyLDEwOSw5NywxMDMsMTA1LDk5LDMyLDExMCwxMTcsMTA5LDk4LDEwMSwxMTQsCisgICAgMzIsMTA1LDExNSwzMiwxMDUsMTEwLDk5LDExMSwxMTQsMTE0LDEwMSw5OSwxMTYsMzIsMTExLDExNCwKKyAgICAzMiwxMTYsMTA0LDEwMSwzMiw5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSwzMiwxMDUsMTE1LAorICAgIDEwLDMyLDMyLDMyLDMyLDEwMiwxMTEsMTE3LDExMCwxMDAsMzIsMTE2LDExMSwzMiw5OCwxMDEsCisgICAgMzIsMTE1LDExNiw5NywxMDgsMTAxLDQ2LDMyLDY5LDc5LDcwLDY5LDExNCwxMTQsMTExLDExNCwKKyAgICAzMiwxMDUsMTE1LDMyLDExNCw5NywxMDUsMTE1LDEwMSwxMDAsMzIsMTE5LDEwNCwxMDEsMTEwLDMyLAorICAgIDExNiwxMDQsMTAxLDMyLDEwMCw5NywxMTYsOTcsMzIsMTA1LDExNSwzMiwxMDIsMTExLDExNywxMTAsCisgICAgMTAwLDMyLDExNiwxMTEsMzIsOTgsMTAxLDEwLDMyLDMyLDMyLDMyLDExNiwxMTQsMTE3LDExMCwKKyAgICA5OSw5NywxMTYsMTAxLDEwMCw0NiwxMCwxMCwzMiwzMiwzMiwzMiw3OCwxMTQsNjcsMCwKKyAgICAwLDAsMTIyLDEwLDYwLDk4LDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDYyLDExNCwzNSwKKyAgICAwLDAsMCwxMTQsMTIsMCwwLDAsMjMzLDgsMCwwLDAsMjMzLDEyLDAsCisgICAgMCwwLDEyMiwzMCw5OCw5NywxMDAsMzIsMTA5LDk3LDEwMywxMDUsOTksMzIsMTEwLDExNywKKyAgICAxMDksOTgsMTAxLDExNCwzMiwxMDUsMTEwLDMyLDEyMywzMywxMTQsMTI1LDU4LDMyLDEyMywzMywKKyAgICAxMTQsMTI1LDEyMiwyLDEyMywxMjUsMTIyLDQzLDExNCwxMDEsOTcsOTksMTA0LDEwMSwxMDAsMzIsCisgICAgNjksNzksNzAsMzIsMTE5LDEwNCwxMDUsMTA4LDEwMSwzMiwxMTQsMTAxLDk3LDEwMCwxMDUsMTEwLAorICAgIDEwMywzMiwxMTYsMTA1LDEwOSwxMDEsMTE1LDExNiw5NywxMDksMTEyLDMyLDEwNSwxMTAsMzIsMTIzLAorICAgIDMzLDExNCwxMjUsMTIyLDQ4LDExNCwxMDEsOTcsOTksMTA0LDEwMSwxMDAsMzIsNjksNzksNzAsCisgICAgMzIsMTE5LDEwNCwxMDUsMTA4LDEwMSwzMiwxMTQsMTAxLDk3LDEwMCwxMDUsMTEwLDEwMywzMiwxMTUsCisgICAgMTA1LDEyMiwxMDEsMzIsMTExLDEwMiwzMiwxMTUsMTExLDExNywxMTQsOTksMTAxLDMyLDEwNSwxMTAsCisgICAgMzIsMTIzLDMzLDExNCwxMjUsMjE4LDUsMTA5LDExNiwxMDUsMTA5LDEwMSwxMjIsMjYsOTgsMTIxLAorICAgIDExNiwxMDEsOTksMTExLDEwMCwxMDEsMzIsMTA1LDExNSwzMiwxMTUsMTE2LDk3LDEwOCwxMDEsMzIsCisgICAgMTAyLDExMSwxMTQsMzIsMTIzLDMzLDExNCwxMjUsMjE4LDQsMTE1LDEwNSwxMjIsMTAxLDEwOCwzLAorICAgIDAsMCwwLDI1NSwxMjcsMjU1LDEyNywzLDAsNDEsOSwyMTgsMTIsNzcsNjUsNzEsCisgICAgNzMsNjcsOTUsNzgsODUsNzcsNjYsNjksODIsMTE0LDQ3LDAsMCwwLDExNCwxNTMsCisgICAgMCwwLDAsMTE0LDE1NCwwLDAsMCwxMTQsMzEsMCwwLDAsMjE4LDgsNjksCisgICAgNzksNzAsNjksMTE0LDExNCwxMTEsMTE0LDExNCwxNCwwLDAsMCwxMTQsNzksMCwwLAorICAgIDAsMTE0LDE5LDAsMCwwLDQxLDExLDExNCw1MywwLDAsMCwyMTgsMTIsMTE1LAorICAgIDExMSwxMTcsMTE0LDk5LDEwMSw5NSwxMTUsMTE2LDk3LDExNiwxMTUsMTE0LDY3LDAsMCwwLAorICAgIDExNCwzNSwwLDAsMCw5MCwxMSwxMDEsMTIwLDk5LDk1LDEwMCwxMDEsMTE2LDk3LDEwNSwKKyAgICAxMDgsMTE1LDkwLDUsMTA5LDk3LDEwMywxMDUsOTksOTAsMTMsMTE0LDk3LDExOSw5NSwxMTYsCisgICAgMTA1LDEwOSwxMDEsMTE1LDExNiw5NywxMDksMTEyLDkwLDgsMTE0LDk3LDExOSw5NSwxMTUsMTA1LAorICAgIDEyMiwxMDEsMTE0LDE1MiwwLDAsMCwyMTgsMTIsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw5NSwKKyAgICAxMDksMTE2LDEwNSwxMDksMTAxLDIxOCwxMSwxMTUsMTExLDExNywxMTQsOTksMTAxLDk1LDExNSwxMDUsCisgICAgMTIyLDEwMSwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsCisgICAgMCwyMTgsMjUsOTUsMTE4LDk3LDEwOCwxMDUsMTAwLDk3LDExNiwxMDEsOTUsOTgsMTIxLDExNiwKKyAgICAxMDEsOTksMTExLDEwMCwxMDEsOTUsMTA0LDEwMSw5NywxMDAsMTAxLDExNCw4NywyLDAsMCwKKyAgICAxMTUsNzYsMCwwLDAsMCwxMSw2LDEsMTIsMSwxMywzLDYsMSwxMiwKKyAgICAxLDEzLDEsMTYsMSwxNiwxLDE2LDEsMTIsMSwxOCwxLDEzLDEsMTgsCisgICAgMSwxOCwxLDE1LDEsMTMsMSwxNSwxLDE4LDEsMTUsMSwxMywxLDE1LAorICAgIDEsMTIsMSwzLDEsMjAsMSwxMywxLDUsMiwxOCwxLDE1LDEsMTMsCisgICAgMSwxOCwxLDMsMSwxOCwxLDEzLDEsNSwyLDE4LDEsMTUsMSwxNSwKKyAgICAxLDExNCwxOTEsMCwwLDAsOTksNCwwLDAsMCwwLDAsMCwwLDUsCisgICAgMCwwLDAsNiwwLDAsMCw2NywwLDAsMCwxMTUsMTE1LDAsMCwwLAorICAgIDExNiwwLDAsMTA2LDEsMCwxMjQsMCwwLDEzMSwxLDAsMTI1LDQsMCwxMTYsCisgICAgMiwwLDEyNCw0LDAsMTE2LDMsMCwxMzEsMiwwLDExNCw3OCwwLDExNiw0LAorICAgIDAsMTAwLDEsMCwxMjQsMiwwLDEzMSwyLDAsMSwxMjQsMywwLDEwMCwyLAorICAgIDAsMTA3LDksMCwxMTQsNzQsMCwxMTYsNSwwLDEwNiw2LDAsMTI0LDQsMCwKKyAgICAxMjQsMywwLDEzMSwyLDAsMSwxMTAsMCwwLDEyNCw0LDAsODMsMTE2LDcsCisgICAgMCwxMDAsMywwLDEwNiw4LDAsMTI0LDIsMCwxMzEsMSwwLDEwMCw0LDAsCisgICAgMTI0LDEsMCwxMDAsNSwwLDEyNCwyLDAsMTMxLDEsMiwxMzAsMSwwLDEwMCwKKyAgICAyLDAsODMsNDEsNiwxMjIsNjAsNjcsMTExLDEwOSwxMTIsMTA1LDEwOCwxMDEsMzIsOTgsCisgICAgMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsMzIsOTcsMTE1LDMyLDExNCwxMDEsMTE2LDExNywxMTQsCisgICAgMTEwLDEwMSwxMDAsMzIsOTgsMTIxLDMyLDk1LDExOCw5NywxMDgsMTA1LDEwMCw5NywxMTYsMTAxLAorICAgIDk1LDk4LDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDk1LDEwNCwxMDEsOTcsMTAwLDEwMSwxMTQsCisgICAgNDAsNDEsNDYsMTIyLDIxLDk5LDExMSwxMDAsMTAxLDMyLDExMSw5OCwxMDYsMTAxLDk5LDExNiwKKyAgICAzMiwxMDIsMTE0LDExMSwxMDksMzIsMTIzLDMzLDExNCwxMjUsNzgsMTIyLDIzLDc4LDExMSwxMTAsCisgICAgNDUsOTksMTExLDEwMCwxMDEsMzIsMTExLDk4LDEwNiwxMDEsOTksMTE2LDMyLDEwNSwxMTAsMzIsCisgICAgMTIzLDMzLDExNCwxMjUsMTE0LDY3LDAsMCwwLDExNCwzNSwwLDAsMCw0MSw5LAorICAgIDIxOCw3LDEwOSw5NywxMTQsMTE1LDEwNCw5NywxMDgsOTAsNSwxMDgsMTExLDk3LDEwMCwxMTUsCisgICAgMjE4LDEwLDEwNSwxMTUsMTA1LDExMCwxMTUsMTE2LDk3LDExMCw5OSwxMDEsMjE4LDEwLDk1LDk5LAorICAgIDExMSwxMDAsMTAxLDk1LDExNiwxMjEsMTEyLDEwMSwxMTQsMTUzLDAsMCwwLDExNCwxMDYsMCwKKyAgICAwLDAsOTAsMTYsOTUsMTAyLDEwNSwxMjAsOTUsOTksMTExLDk1LDEwMiwxMDUsMTA4LDEwMSwKKyAgICAxMTAsOTcsMTA5LDEwMSwxMTQsMTU0LDAsMCwwLDExNCw0NywwLDAsMCw0MSw1LAorICAgIDExNCw1MywwLDAsMCwxMTQsNjcsMCwwLDAsMTE0LDE0MSwwLDAsMCwxMTQsCisgICAgMTQyLDAsMCwwLDIxOCw0LDk5LDExMSwxMDAsMTAxLDExNCw0LDAsMCwwLDExNCwKKyAgICA0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCwxNyw5NSw5OSwxMTEsMTA5LDExMiwKKyAgICAxMDUsMTA4LDEwMSw5NSw5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSwxNDIsMiwwLDAsCisgICAgMTE1LDE2LDAsMCwwLDAsMiwxNSwxLDE1LDEsMTMsMSwxMiwxLDE5LAorICAgIDEsNCwyLDE4LDEsMTE0LDE5NiwwLDAsMCwxMTQsODQsMCwwLDAsOTksCisgICAgMywwLDAsMCwwLDAsMCwwLDQsMCwwLDAsMywwLDAsMCwKKyAgICA2NywwLDAsMCwxMTUsNzYsMCwwLDAsMTE2LDAsMCwxMTYsMSwwLDEzMSwKKyAgICAxLDAsMTI1LDMsMCwxMjQsMywwLDEwNiwyLDAsMTE2LDMsMCwxMjQsMSwKKyAgICAwLDEzMSwxLDAsMTMxLDEsMCwxLDEyNCwzLDAsMTA2LDIsMCwxMTYsMywKKyAgICAwLDEyNCwyLDAsMTMxLDEsMCwxMzEsMSwwLDEsMTI0LDMsMCwxMDYsMiwKKyAgICAwLDExNiw0LDAsMTA2LDUsMCwxMjQsMCwwLDEzMSwxLDAsMTMxLDEsMCwKKyAgICAxLDEyNCwzLDAsODMsNDEsMSwxMjIsODAsNjcsMTExLDEwOSwxMTIsMTA1LDEwOCwxMDEsCisgICAgMzIsOTcsMzIsOTksMTExLDEwMCwxMDEsMzIsMTExLDk4LDEwNiwxMDEsOTksMTE2LDMyLDEwNSwKKyAgICAxMTAsMTE2LDExMSwzMiw5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSwzMiwxMDIsMTExLDExNCwKKyAgICAzMiwxMTksMTE0LDEwNSwxMTYsMTA1LDExMCwxMDMsMzIsMTExLDExNywxMTYsMzIsMTE2LDExMSwzMiwKKyAgICA5NywzMiw5OCwxMjEsMTE2LDEwMSw0NSw5OSwxMTEsMTA5LDExMiwxMDUsMTA4LDEwMSwxMDAsMTAsCisgICAgMzIsMzIsMzIsMzIsMTAyLDEwNSwxMDgsMTAxLDQ2LDQxLDYsMjE4LDksOTgsMTIxLDExNiwKKyAgICAxMDEsOTcsMTE0LDExNCw5NywxMjEsMTE0LDE4NiwwLDAsMCwyMTgsNiwxMDEsMTIwLDExNiwKKyAgICAxMDEsMTEwLDEwMCwxMTQsMTcsMCwwLDAsMTE0LDE5MiwwLDAsMCw5MCw1LDEwMCwKKyAgICAxMTcsMTA5LDExMiwxMTUsNDEsNCwxMTQsMTk1LDAsMCwwLDExNCwxODQsMCwwLDAsCisgICAgMTE0LDE5MCwwLDAsMCwxMTQsNTMsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LAorICAgIDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDE3LDk1LDk5LDExMSwxMDAsMTAxLAorICAgIDk1LDExNiwxMTEsOTUsOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsMTU0LDIsMCwwLAorICAgIDExNSwxMCwwLDAsMCwwLDMsMTIsMSwxOSwxLDE5LDEsMjIsMSwxMTQsCisgICAgMTk5LDAsMCwwLDk5LDEsMCwwLDAsMCwwLDAsMCw1LDAsMCwKKyAgICAwLDQsMCwwLDAsNjcsMCwwLDAsMTE1LDg5LDAsMCwwLDEwMCwxLAorICAgIDAsMTAwLDIsMCwxMDgsMCwwLDEyNSwxLDAsMTE2LDEsMCwxMDYsMiwwLAorICAgIDEyNCwwLDAsMTMxLDEsMCwxMDYsMywwLDEyNSwyLDAsMTI0LDEsMCwxMDYsCisgICAgNCwwLDEyNCwyLDAsMTMxLDEsMCwxMjUsMywwLDExNiwxLDAsMTA2LDUsCisgICAgMCwxMDAsMiwwLDEwMCwzLDAsMTMxLDIsMCwxMjUsNCwwLDEyNCw0LDAsCisgICAgMTA2LDYsMCwxMjQsMCwwLDEwNiw2LDAsMTI0LDMsMCwxMDAsMSwwLDI1LAorICAgIDEzMSwxLDAsMTMxLDEsMCw4Myw0MSw0LDEyMiwxMjEsNjgsMTAxLDk5LDExMSwxMDAsCisgICAgMTAxLDMyLDk4LDEyMSwxMTYsMTAxLDExNSwzMiwxMTQsMTAxLDExMiwxMTQsMTAxLDExNSwxMDEsMTEwLAorICAgIDExNiwxMDUsMTEwLDEwMywzMiwxMTUsMTExLDExNywxMTQsOTksMTAxLDMyLDk5LDExMSwxMDAsMTAxLAorICAgIDMyLDk3LDExMCwxMDAsMzIsMTE0LDEwMSwxMTYsMTE3LDExNCwxMTAsMzIsMTE2LDEwNCwxMDEsMzIsCisgICAgMTE1LDExNiwxMTQsMTA1LDExMCwxMDMsNDYsMTAsMTAsMzIsMzIsMzIsMzIsODUsMTEwLDEwNSwKKyAgICAxMTgsMTAxLDExNCwxMTUsOTcsMTA4LDMyLDExMCwxMDEsMTE5LDEwOCwxMDUsMTEwLDEwMSwzMiwxMTUsCisgICAgMTE3LDExMiwxMTIsMTExLDExNCwxMTYsMzIsMTA1LDExNSwzMiwxMTcsMTE1LDEwMSwxMDAsMzIsMTA1LAorICAgIDExMCwzMiwxMTYsMTA0LDEwMSwzMiwxMDAsMTAxLDk5LDExMSwxMDAsMTA1LDExMCwxMDMsNDYsMTAsCisgICAgMzIsMzIsMzIsMzIsMTE0LDg0LDAsMCwwLDc4LDg0LDQxLDcsMjE4LDgsMTE2LAorICAgIDExMSwxMDcsMTAxLDExMCwxMDUsMTIyLDEwMSwxMTQsNDksMCwwLDAsOTAsNyw2NiwxMjEsCisgICAgMTE2LDEwMSwxMTUsNzMsNzksOTAsOCwxMTQsMTAxLDk3LDEwMCwxMDgsMTA1LDExMCwxMDEsOTAsCisgICAgMTUsMTAwLDEwMSwxMTYsMTAxLDk5LDExNiw5NSwxMDEsMTEwLDk5LDExMSwxMDAsMTA1LDExMCwxMDMsCisgICAgOTAsMjUsNzMsMTEwLDk5LDExNCwxMDEsMTA5LDEwMSwxMTAsMTE2LDk3LDEwOCw3OCwxMDEsMTE5LAorICAgIDEwOCwxMDUsMTEwLDEwMSw2OCwxMDEsOTksMTExLDEwMCwxMDEsMTE0LDIxOCw2LDEwMCwxMDEsOTksCisgICAgMTExLDEwMCwxMDEsNDEsNSwyMTgsMTIsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw5NSw5OCwxMjEsCisgICAgMTE2LDEwMSwxMTUsMTE0LDIwMCwwLDAsMCw5MCwyMSwxMTUsMTExLDExNywxMTQsOTksMTAxLAorICAgIDk1LDk4LDEyMSwxMTYsMTAxLDExNSw5NSwxMTQsMTAxLDk3LDEwMCwxMDgsMTA1LDExMCwxMDEsMjE4LAorICAgIDgsMTAxLDExMCw5OSwxMTEsMTAwLDEwNSwxMTAsMTAzLDkwLDE1LDExMCwxMDEsMTE5LDEwOCwxMDUsCisgICAgMTEwLDEwMSw5NSwxMDAsMTAxLDk5LDExMSwxMDAsMTAxLDExNCwxMTQsNCwwLDAsMCwxMTQsCisgICAgNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMTMsMTAwLDEwMSw5OSwxMTEsMTAwLAorICAgIDEwMSw5NSwxMTUsMTExLDExNywxMTQsOTksMTAxLDE2NCwyLDAsMCwxMTUsMTAsMCwwLAorICAgIDAsMCw1LDEyLDEsMTgsMSwxNSwxLDE4LDEsMTE0LDIwNCwwLDAsMCwKKyAgICA5OSwxLDAsMCwwLDAsMCwwLDAsNSwwLDAsMCwzNSwwLDAsCisgICAgMCw2NywwLDAsMCwxMTUsMTUsMSwwLDAsMTE2LDAsMCwxMjQsMCwwLAorICAgIDEwMCwxLDAsMTAwLDAsMCwxMzEsMywwLDEyNSwxLDAsMTE2LDEsMCwxMjQsCisgICAgMSwwLDEwMCwyLDAsMTMxLDIsMCwxMTQsNzQsMCwxMjEsMTcsMCwxMjQsMSwKKyAgICAwLDEwNiwyLDAsMTI0LDAsMCwxMzEsMSwwLDgzLDg3LDExMyw3NCwwLDQsCisgICAgMTE2LDMsMCwxMDcsMTAsMCwxMTQsNzAsMCwxLDEsMSw4OSwxMTMsNzQsMCwKKyAgICA4OCwxMTAsMCwwLDEyMSwxMywwLDEyNCwwLDAsMTA2LDQsMCwxMjUsMiwwLAorICAgIDg3LDExMCwxOCwwLDQsMTE2LDUsMCwxMDcsMTAsMCwxMTQsMTA3LDAsMSwxLAorICAgIDEsODksMTEwLDI5LDAsODgsMTI0LDIsMCwxMDAsMCwwLDEwNyw5LDAsMTE0LAorICAgIDEzNiwwLDExNiw2LDAsMTI0LDIsMCwxMzEsMSwwLDEwNiwyLDAsMTMxLDAsCisgICAgMCw4MywxMjEsMTMsMCwxMjQsMCwwLDEwNiw3LDAsMTI1LDMsMCw4NywxMTAsCisgICAgMjQsMCw0LDExNiw1LDAsMTA3LDEwLDAsMTE0LDE3NSwwLDEsMSwxLDEwMCwKKyAgICAzLDAsMTI1LDMsMCw4OSwxMTAsMSwwLDg4LDEyMSwxMywwLDEyNCwwLDAsCisgICAgMTA2LDgsMCwxMjUsNCwwLDg3LDExMCw1OSwwLDQsMTE2LDUsMCwxMDcsMTAsCisgICAgMCwxMTQsMjUwLDAsMSwxLDEsMTI0LDEsMCwxMDAsMCwwLDEwNyw4LDAsCisgICAgMTE0LDIzMCwwLDEwMCw0LDAsMTA2LDksMCwxMjQsMywwLDEzMSwxLDAsODMsCisgICAgMTAwLDUsMCwxMDYsOSwwLDEyNCwzLDAsMTI0LDEsMCwxMzEsMiwwLDgzLAorICAgIDg5LDExMCwxNywwLDg4LDEwMCw2LDAsMTA2LDksMCwxMjQsMywwLDEyNCw0LAorICAgIDAsMTMxLDIsMCw4MywxMDAsMCwwLDgzLDQxLDcsNzgsMjE4LDEwLDk1LDk1LAorICAgIDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsOTUsOTUsMjE4LDExLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAorICAgIDk1LDExNCwxMDEsMTEyLDExNCwyNTAsMSw2MywxMjIsMTMsNjAsMTA5LDExMSwxMDAsMTE3LDEwOCwKKyAgICAxMDEsMzIsMTIzLDMzLDExNCwxMjUsNjIsMTIyLDIwLDYwLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAorICAgIDMyLDEyMywzMywxMTQsMTI1LDMyLDQwLDEyMywzMywxMTQsMTI1LDQxLDYyLDEyMiwyMyw2MCwKKyAgICAxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMjMsMzMsMTE0LDEyNSwzMiwxMDIsMTE0LDExMSwxMDksCisgICAgMzIsMTIzLDMzLDExNCwxMjUsNjIsNDEsMTAsMTE0LDYyLDAsMCwwLDExNCw2MCwwLAorICAgIDAsMCwxMTQsMjA2LDAsMCwwLDIxOCw5LDY5LDEyMCw5OSwxMDEsMTEyLDExNiwxMDUsCisgICAgMTExLDExMCwyMTgsOCw5NSw5NSwxMTUsMTEyLDEwMSw5OSw5NSw5NSwyMTgsMTQsNjUsMTE2LAorICAgIDExNiwxMTQsMTA1LDk4LDExNywxMTYsMTAxLDY5LDExNCwxMTQsMTExLDExNCwxMTQsMTc1LDAsMCwKKyAgICAwLDExNCw1NywwLDAsMCwyMTgsOCw5NSw5NSwxMDIsMTA1LDEwOCwxMDEsOTUsOTUsCisgICAgMTE0LDQ3LDAsMCwwLDQxLDUsMTE0LDE4MCwwLDAsMCwxMTQsMTcwLDAsMCwKKyAgICAwLDExNCwxNzgsMCwwLDAsMTE0LDY3LDAsMCwwLDExNCwxMzEsMCwwLDAsCisgICAgMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LAorICAgIDEyLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDExNCwxMDEsMTEyLDExNCwxNzgsMiwwLAorICAgIDAsMTE1LDQ2LDAsMCwwLDAsMiwxOCwxLDE1LDQsMywxLDE3LDEsCisgICAgMTMsMSw4LDEsMywxLDEzLDEsMTMsMSw1LDIsMTIsMSwxNiw0LAorICAgIDMsMSwxMywxLDEzLDEsMTEsMSwzLDEsMTMsMSwxMywxLDEyLDEsCisgICAgMTMsMiwyMSwyLDExNCwyMTIsMCwwLDAsOTksMCwwLDAsMCwwLDAsCisgICAgMCwwLDAsMCwwLDAsMiwwLDAsMCw2NCwwLDAsMCwxMTUsNTIsCisgICAgMCwwLDAsMTAxLDAsMCw5MCwxLDAsMTAwLDAsMCw5MCwyLDAsMTAwLAorICAgIDEsMCwxMDAsMiwwLDEzMiwwLDAsOTAsMywwLDEwMCwzLDAsMTAwLDQsCisgICAgMCwxMzIsMCwwLDkwLDQsMCwxMDAsNSwwLDEwMCw2LDAsMTMyLDAsMCwKKyAgICA5MCw1LDAsMTAwLDcsMCw4Myw0MSw4LDIxOCwxNyw5NSwxMDUsMTEwLDExNSwxMTYsCisgICAgOTcsMTA4LDEwOCwxMDEsMTAwLDk1LDExNSw5NywxMDIsMTAxLDEwOCwxMjEsOTksMiwwLDAsCisgICAgMCwwLDAsMCwwLDIsMCwwLDAsMiwwLDAsMCw2NywwLDAsCisgICAgMCwxMTUsMjUsMCwwLDAsMTI0LDEsMCwxMjQsMCwwLDk1LDAsMCwxMjQsCisgICAgMSwwLDEwNiwxLDAsMTI0LDAsMCw5NSwyLDAsMTAwLDAsMCw4Myw0MSwKKyAgICAxLDc4LDQxLDMsMjE4LDcsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE0LDIwOSwwLAorICAgIDAsMCwyMTgsNSw5NSwxMTUsMTEyLDEwMSw5OSw0MSwyLDExNCw3MSwwLDAsMCwKKyAgICAxMTQsMTgwLDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCwKKyAgICA1LDAsMCwwLDExNCw3MiwwLDAsMCwyMTYsMiwwLDAsMTE1LDQsMCwKKyAgICAwLDAsMCwxLDksMSwxMjIsMjYsOTUsMTA1LDExMCwxMTUsMTE2LDk3LDEwOCwxMDgsCisgICAgMTAxLDEwMCw5NSwxMTUsOTcsMTAyLDEwMSwxMDgsMTIxLDQ2LDk1LDk1LDEwNSwxMTAsMTA1LDExNiwKKyAgICA5NSw5NSw5OSwxLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwzLAorICAgIDAsMCwwLDY3LDAsMCwwLDExNSwzOCwwLDAsMCwxMDAsMSwwLDEyNCwKKyAgICAwLDAsMTA2LDAsMCw5NSwxLDAsMTI0LDAsMCwxMDYsMiwwLDExNiwzLAorICAgIDAsMTA2LDQsMCwxMjQsMCwwLDEwNiwwLDAsMTA2LDUsMCw2MCwxMDAsMCwKKyAgICAwLDgzLDQxLDIsNzgsODQsNDEsNiwxMTQsMjE1LDAsMCwwLDIxOCwxMyw5NSwKKyAgICAxMDUsMTEwLDEwNSwxMTYsMTA1LDk3LDEwOCwxMDUsMTIyLDEwNSwxMTAsMTAzLDExNCwyMTQsMCwwLAorICAgIDAsMTE0LDcsMCwwLDAsMTE0LDczLDAsMCwwLDExNCw2NywwLDAsMCwKKyAgICA0MSwxLDExNCw3MSwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsCisgICAgMCwxMTQsNSwwLDAsMCwxMTQsNzUsMCwwLDAsMjIwLDIsMCwwLDExNSwKKyAgICA0LDAsMCwwLDAsNCwxMiwxLDEyMiwyNyw5NSwxMDUsMTEwLDExNSwxMTYsOTcsCisgICAgMTA4LDEwOCwxMDEsMTAwLDk1LDExNSw5NywxMDIsMTAxLDEwOCwxMjEsNDYsOTUsOTUsMTAxLDExMCwKKyAgICAxMTYsMTAxLDExNCw5NSw5NSw5OSwxLDAsMCwwLDAsMCwwLDAsMywwLAorICAgIDAsMCwxNywwLDAsMCw3MSwwLDAsMCwxMTUsMTIxLDAsMCwwLDEyMiwKKyAgICAxMDEsMCwxMjQsMCwwLDEwNiwwLDAsMTI1LDIsMCwxMTYsMSwwLDEwMCwxLAorICAgIDAsMTAwLDIsMCwxMzIsMCwwLDEyNCwxLDAsNjgsMTMxLDEsMCwxMzEsMSwKKyAgICAwLDExNCw3OCwwLDEyMSwxNywwLDExNiwyLDAsMTA2LDMsMCwxMjQsMiwwLAorICAgIDEwNiw0LDAsNjEsODcsMTEzLDEwMCwwLDQsMTE2LDUsMCwxMDcsMTAsMCwxMTQsCisgICAgNzQsMCwxLDEsMSw4OSwxMTMsMTAwLDAsODgsMTEwLDIyLDAsMTE2LDYsMCwKKyAgICAxMDAsMywwLDEyNCwyLDAsMTA2LDQsMCwxMjQsMiwwLDEwNiw3LDAsMTMxLAorICAgIDMsMCwxLDg3LDEwMCwwLDAsMTAwLDQsMCwxMjQsMCwwLDEwNiwwLDAsCisgICAgOTUsOCwwLDg4LDEwMCwwLDAsODMsNDEsNSw3OCw5OSwxLDAsMCwwLAorICAgIDAsMCwwLDAsMiwwLDAsMCwzLDAsMCwwLDExNSwwLDAsMCwKKyAgICAxMTUsMjcsMCwwLDAsMTI0LDAsMCw5MywxNywwLDEyNSwxLDAsMTI0LDEsCisgICAgMCwxMDAsMCwwLDEwNyw5LDAsODYsMSwxMTMsMywwLDEwMCwwLDAsODMsCisgICAgNDEsMSw3OCwxMTQsNCwwLDAsMCw0MSwyLDExNCwyMiwwLDAsMCwxMTQsCisgICAgNzYsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsCisgICAgMCwwLDAsMTE0LDc3LDAsMCwwLDIzMCwyLDAsMCwxMTUsMiwwLDAsCisgICAgMCw2LDAsMTIyLDQ1LDk1LDEwNSwxMTAsMTE1LDExNiw5NywxMDgsMTA4LDEwMSwxMDAsOTUsCisgICAgMTE1LDk3LDEwMiwxMDEsMTA4LDEyMSw0Niw5NSw5NSwxMDEsMTIwLDEwNSwxMTYsOTUsOTUsNDYsCisgICAgNjAsMTA4LDExMSw5OSw5NywxMDgsMTE1LDYyLDQ2LDYwLDEwMywxMDEsMTEwLDEwMSwxMjAsMTEyLAorICAgIDExNCw2MiwxMjIsMTgsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMzIsMTIzLDMzLDExNCwxMjUsMzIsCisgICAgMzUsMzIsMTIzLDMzLDExNCwxMjUsNzAsNDEsOSwxMTQsMjE1LDAsMCwwLDExNCw3OCwKKyAgICAwLDAsMCwxMTQsNywwLDAsMCwxMTQsNzMsMCwwLDAsMTE0LDY3LDAsCisgICAgMCwwLDExNCw3OSwwLDAsMCwxMTQsMTUzLDAsMCwwLDExNCwxNzAsMCwwLAorICAgIDAsMTE0LDIxNiwwLDAsMCw0MSwzLDExNCw3MSwwLDAsMCwxMTQsODAsMCwKKyAgICAwLDAsMTE0LDE3OCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsCisgICAgMCwxMTQsNSwwLDAsMCwxMTQsODEsMCwwLDAsMjI3LDIsMCwwLDExNSwKKyAgICAxOCwwLDAsMCwwLDEsMywxLDksMSwyNSwxLDMsMSwxNywxLAorICAgIDEzLDEsOCwyLDI2LDIsMTIyLDI2LDk1LDEwNSwxMTAsMTE1LDExNiw5NywxMDgsMTA4LAorICAgIDEwMSwxMDAsOTUsMTE1LDk3LDEwMiwxMDEsMTA4LDEyMSw0Niw5NSw5NSwxMDEsMTIwLDEwNSwxMTYsCisgICAgOTUsOTUsNzgsNDEsNiwxMTQsNTcsMCwwLDAsMTE0LDU2LDAsMCwwLDExNCwKKyAgICA1OCwwLDAsMCwxMTQsNzIsMCwwLDAsMTE0LDc1LDAsMCwwLDExNCw4MSwKKyAgICAwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLAorICAgIDAsMCwxMTQsNSwwLDAsMCwxMTQsMjEzLDAsMCwwLDIxNCwyLDAsMCwKKyAgICAxMTUsNiwwLDAsMCwxMiwyLDEyLDQsMTIsNywxMTQsMjEzLDAsMCwwLAorICAgIDk5LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDgsMCwwLAorICAgIDAsNjQsMCwwLDAsMTE1LDE3MiwwLDAsMCwxMDEsMCwwLDkwLDEsMCwKKyAgICAxMDAsMCwwLDkwLDIsMCwxMDAsMSwwLDkwLDMsMCwxMDAsMiwwLDEwMCwKKyAgICAzLDAsMTAwLDQsMCwxMDAsMywwLDEwMCw1LDAsMTAwLDMsMCwxMDAsNiwKKyAgICAwLDEwMCw3LDAsMTMyLDAsMyw5MCw0LDAsMTAwLDgsMCwxMDAsOSwwLAorICAgIDEzMiwwLDAsOTAsNSwwLDEwMCwxMCwwLDEwMCwxMSwwLDEzMiwwLDAsOTAsCisgICAgNiwwLDEwMSw3LDAsMTAwLDEyLDAsMTAwLDEzLDAsMTMyLDAsMCwxMzEsMSwKKyAgICAwLDkwLDgsMCwxMDEsOCwwLDEwNiw5LDAsMTAwLDE0LDAsMTAwLDEzLDAsCisgICAgMTMyLDAsMCwxMzEsMSwwLDkwLDgsMCwxMDEsNywwLDEwMCwxNSwwLDEwMCwKKyAgICAxNiwwLDEzMiwwLDAsMTMxLDEsMCw5MCwxMCwwLDEwMSw3LDAsMTAwLDE3LAorICAgIDAsMTAwLDE4LDAsMTMyLDAsMCwxMzEsMSwwLDkwLDExLDAsMTAxLDExLDAsCisgICAgMTA2LDksMCwxMDAsMTksMCwxMDAsMTgsMCwxMzIsMCwwLDEzMSwxLDAsOTAsCisgICAgMTEsMCwxMDAsMywwLDgzLDQxLDIwLDIxOCwxMCw3NywxMTEsMTAwLDExNywxMDgsMTAxLAorICAgIDgzLDExMiwxMDEsOTksOTcsMjA4LDUsMCwwLDg0LDEwNCwxMDEsMzIsMTE1LDExMiwxMDEsCisgICAgOTksMTA1LDEwMiwxMDUsOTksOTcsMTE2LDEwNSwxMTEsMTEwLDMyLDEwMiwxMTEsMTE0LDMyLDk3LAorICAgIDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ0LDMyLDExNywxMTUsMTAxLDEwMCwzMiwxMDIsMTExLAorICAgIDExNCwzMiwxMDgsMTExLDk3LDEwMCwxMDUsMTEwLDEwMyw0NiwxMCwxMCwzMiwzMiwzMiwzMiwKKyAgICA2NSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzOSwxMTUsMzIsMTE1LDExMiwxMDEsOTksMzIsCisgICAgMTA1LDExNSwzMiwxMTYsMTA0LDEwMSwzMiwxMTUsMTExLDExNywxMTQsOTksMTAxLDMyLDEwMiwxMTEsCisgICAgMTE0LDMyLDEwNSwxMTAsMTAyLDExMSwxMTQsMTA5LDk3LDExNiwxMDUsMTExLDExMCwzMiw5Nyw5OCwKKyAgICAxMTEsMTE3LDExNiwzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0NiwzMiwKKyAgICAzMiw3MCwxMTEsMTE0LDEwLDMyLDMyLDMyLDMyLDEwMCw5NywxMTYsOTcsMzIsOTcsMTE1LAorICAgIDExNSwxMTEsOTksMTA1LDk3LDExNiwxMDEsMTAwLDMyLDExOSwxMDUsMTE2LDEwNCwzMiwxMTYsMTA0LAorICAgIDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0NCwzMiwxMDUsMTEwLDk5LDEwOCwxMTcsMTAwLAorICAgIDEwNSwxMTAsMTAzLDMyLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsNDQsMzIsMTE3LDExNSwxMDEsMzIsCisgICAgMTE2LDEwNCwxMDEsMzIsMTE1LDExMiwxMDEsOTksMzksMTE1LDEwLDMyLDMyLDMyLDMyLDEwOCwKKyAgICAxMTEsOTcsMTAwLDEwMSwxMTQsNDYsMTAsMTAsMzIsMzIsMzIsMzIsOTYsMTEwLDk3LDEwOSwKKyAgICAxMDEsOTYsMzIsMTA1LDExNSwzMiwxMTYsMTA0LDEwMSwzMiw5Nyw5OCwxMTUsMTExLDEwOCwxMTcsCisgICAgMTE2LDEwMSwzMiwxMTAsOTcsMTA5LDEwMSwzMiwxMTEsMTAyLDMyLDExNiwxMDQsMTAxLDMyLDEwOSwKKyAgICAxMTEsMTAwLDExNywxMDgsMTAxLDQ2LDMyLDMyLDk2LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsOTYsCisgICAgMzIsMTA1LDExNSwzMiwxMTYsMTA0LDEwMSwzMiwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDEwLDMyLAorICAgIDMyLDMyLDMyLDExNiwxMTEsMzIsMTE3LDExNSwxMDEsMzIsMTE5LDEwNCwxMDEsMTEwLDMyLDEwOCwKKyAgICAxMTEsOTcsMTAwLDEwNSwxMTAsMTAzLDMyLDExNiwxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsCisgICAgMTAxLDQ2LDMyLDMyLDk2LDExMiw5NywxMTQsMTAxLDExMCwxMTYsOTYsMzIsMTA1LDExNSwzMiwKKyAgICAxMTYsMTA0LDEwMSwzMiwxMTAsOTcsMTA5LDEwMSwzMiwxMTEsMTAyLDMyLDExNiwxMDQsMTAxLDEwLAorICAgIDMyLDMyLDMyLDMyLDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwzMiwxMTYsMTA0LDEwMSwzMiwKKyAgICAxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMDUsMTE1LDMyLDEwNSwxMTAsNDYsMzIsMzIsODQsCisgICAgMTA0LDEwMSwzMiwxMTIsOTcsMTE0LDEwMSwxMTAsMTE2LDMyLDEwNSwxMTUsMzIsMTAwLDEwMSwxMTQsCisgICAgMTA1LDExOCwxMDEsMTAwLDMyLDEwMiwxMTQsMTExLDEwOSwzMiwxMTYsMTA0LDEwMSwzMiwxMTAsOTcsCisgICAgMTA5LDEwMSw0NiwxMCwxMCwzMiwzMiwzMiwzMiw5NiwxMDUsMTE1LDk1LDExMiw5Nyw5OSwKKyAgICAxMDcsOTcsMTAzLDEwMSw5NiwzMiwxMDAsMTAxLDExNiwxMDEsMTE0LDEwOSwxMDUsMTEwLDEwMSwxMTUsCisgICAgMzIsMTA1LDEwMiwzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMDUsCisgICAgMTE1LDMyLDk5LDExMSwxMTAsMTE1LDEwNSwxMDAsMTAxLDExNCwxMDEsMTAwLDMyLDk3LDMyLDExMiwKKyAgICA5Nyw5OSwxMDcsOTcsMTAzLDEwMSwzMiwxMTEsMTE0LDEwLDMyLDMyLDMyLDMyLDExMCwxMTEsCisgICAgMTE2LDQ2LDMyLDMyLDc5LDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsMzIsMTE2LAorICAgIDEwNCwxMDUsMTE1LDMyLDEwNSwxMTUsMzIsMTE0LDEwMSwxMDIsMTA4LDEwMSw5OSwxMTYsMTAxLDEwMCwKKyAgICAzMiw5OCwxMjEsMzIsMTE2LDEwNCwxMDEsMzIsOTYsOTUsOTUsMTEyLDk3LDExNiwxMDQsOTUsCisgICAgOTUsOTYsMzIsOTcsMTE2LDExNiwxMTQsMTA1LDk4LDExNywxMTYsMTAxLDQ2LDEwLDEwLDMyLAorICAgIDMyLDMyLDMyLDk2LDExMSwxMTQsMTA1LDEwMywxMDUsMTEwLDk2LDMyLDEwNSwxMTUsMzIsMTE2LAorICAgIDEwNCwxMDEsMzIsMTE1LDExMiwxMDEsOTksMTA1LDEwMiwxMDUsOTksMzIsMTA4LDExMSw5OSw5NywKKyAgICAxMTYsMTA1LDExMSwxMTAsMzIsMTE3LDExNSwxMDEsMTAwLDMyLDk4LDEyMSwzMiwxMTYsMTA0LDEwMSwKKyAgICAzMiwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDMyLDEwMiwxMTQsMTExLDEwOSwzMiwxMTksMTA0LDEwNSwKKyAgICA5OSwxMDQsMzIsMTE2LDExMSwxMCwzMiwzMiwzMiwzMiwxMDgsMTExLDk3LDEwMCwzMiwxMTYsCisgICAgMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0NCwzMiwxMDUsMTAyLDMyLDExNiwxMDQsCisgICAgOTcsMTE2LDMyLDEwNSwxMTAsMTAyLDExMSwxMTQsMTA5LDk3LDExNiwxMDUsMTExLDExMCwzMiwxMDUsCisgICAgMTE1LDMyLDk3LDExOCw5NywxMDUsMTA4LDk3LDk4LDEwOCwxMDEsNDYsMzIsMzIsODcsMTA0LAorICAgIDEwMSwxMTAsMzIsMTAyLDEwNSwxMDgsMTAxLDExMCw5NywxMDksMTAxLDMyLDEwNSwxMTUsMTAsMzIsCisgICAgMzIsMzIsMzIsMTE1LDEwMSwxMTYsNDQsMzIsMTExLDExNCwxMDUsMTAzLDEwNSwxMTAsMzIsMTE5LAorICAgIDEwNSwxMDgsMTA4LDMyLDEwOSw5NywxMTYsOTksMTA0LDQ2LDEwLDEwLDMyLDMyLDMyLDMyLAorICAgIDk2LDEwNCw5NywxMTUsOTUsMTA4LDExMSw5OSw5NywxMTYsMTA1LDExMSwxMTAsOTYsMzIsMTA1LAorICAgIDExMCwxMDAsMTA1LDk5LDk3LDExNiwxMDEsMTE1LDMyLDExNiwxMDQsOTcsMTE2LDMyLDk3LDMyLAorICAgIDExNSwxMTIsMTAxLDk5LDM5LDExNSwzMiwzNCwxMTEsMTE0LDEwNSwxMDMsMTA1LDExMCwzNCwzMiwKKyAgICAxMTQsMTAxLDEwMiwxMDgsMTAxLDk5LDExNiwxMTUsMzIsOTcsMzIsMTA4LDExMSw5OSw5NywxMTYsCisgICAgMTA1LDExMSwxMTAsNDYsMTAsMzIsMzIsMzIsMzIsODcsMTA0LDEwMSwxMTAsMzIsMTE2LDEwNCwKKyAgICAxMDUsMTE1LDMyLDEwNSwxMTUsMzIsODQsMTE0LDExNywxMDEsNDQsMzIsOTYsOTUsOTUsMTAyLAorICAgIDEwNSwxMDgsMTAxLDk1LDk1LDk2LDMyLDk3LDExNiwxMTYsMTE0LDEwNSw5OCwxMTcsMTE2LDEwMSwKKyAgICAzMiwxMTEsMTAyLDMyLDExNiwxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEwNSwKKyAgICAxMTUsMzIsMTE1LDEwMSwxMTYsNDYsMTAsMTAsMzIsMzIsMzIsMzIsOTYsOTksOTcsOTksCisgICAgMTA0LDEwMSwxMDAsOTYsMzIsMTA1LDExNSwzMiwxMTYsMTA0LDEwMSwzMiwxMDgsMTExLDk5LDk3LAorICAgIDExNiwxMDUsMTExLDExMCwzMiwxMTEsMTAyLDMyLDExNiwxMDQsMTAxLDMyLDk5LDk3LDk5LDEwNCwKKyAgICAxMDEsMTAwLDMyLDk4LDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDMyLDEwMiwxMDUsMTA4LDEwMSwKKyAgICA0NCwzMiwxMDUsMTAyLDMyLDk3LDExMCwxMjEsNDYsMzIsMzIsNzMsMTE2LDEwLDMyLDMyLAorICAgIDMyLDMyLDk5LDExMSwxMTQsMTE0LDEwMSwxMTUsMTEyLDExMSwxMTAsMTAwLDExNSwzMiwxMTYsMTExLAorICAgIDMyLDExNiwxMDQsMTAxLDMyLDk2LDk1LDk1LDk5LDk3LDk5LDEwNCwxMDEsMTAwLDk1LDk1LAorICAgIDk2LDMyLDk3LDExNiwxMTYsMTE0LDEwNSw5OCwxMTcsMTE2LDEwMSw0NiwxMCwxMCwzMiwzMiwKKyAgICAzMiwzMiw5NiwxMTUsMTE3LDk4LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDExNSwxMDEsOTcsCisgICAgMTE0LDk5LDEwNCw5NSwxMDgsMTExLDk5LDk3LDExNiwxMDUsMTExLDExMCwxMTUsOTYsMzIsMTA1LAorICAgIDExNSwzMiwxMTYsMTA0LDEwMSwzMiwxMTUsMTAxLDExMywxMTcsMTAxLDExMCw5OSwxMDEsMzIsMTExLAorICAgIDEwMiwzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMDEsMTEwLDExNiwxMTQsMTA1LDEwMSwxMTUsMzIsMTE2LAorICAgIDExMSwxMCwzMiwzMiwzMiwzMiwxMTUsMTAxLDk3LDExNCw5OSwxMDQsMzIsMTE5LDEwNCwxMDEsCisgICAgMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwNSwxMTAsMTAzLDMyLDExNSwxMTcsOTgsMTA5LAorICAgIDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDQ2LDMyLDMyLDczLDEwMiwzMiwxMTUsMTAxLDExNiw0NCwKKyAgICAzMiwxMDUsMTE1LDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwzMiwxMTUsMTA0LDExMSwxMTcsCisgICAgMTA4LDEwMCwzMiw5OCwxMDEsMTAsMzIsMzIsMzIsMzIsODQsMTE0LDExNywxMDEsNDUsNDUsCisgICAgOTcsMTEwLDEwMCwzMiw3MCw5NywxMDgsMTE1LDEwMSwzMiwxMTEsMTE2LDEwNCwxMDEsMTE0LDExOSwKKyAgICAxMDUsMTE1LDEwMSw0NiwxMCwxMCwzMiwzMiwzMiwzMiw4MCw5Nyw5OSwxMDcsOTcsMTAzLAorICAgIDEwMSwxMTUsMzIsOTcsMTE0LDEwMSwzMiwxMTUsMTA1LDEwOSwxMTIsMTA4LDEyMSwzMiwxMDksMTExLAorICAgIDEwMCwxMTcsMTA4LDEwMSwxMTUsMzIsMTE2LDEwNCw5NywxMTYsMzIsNDAsMTA5LDk3LDEyMSw0MSwKKyAgICAzMiwxMDQsOTcsMTE4LDEwMSwzMiwxMTUsMTE3LDk4LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNSwKKyAgICA0NiwzMiwzMiw3MywxMDIsMzIsOTcsMzIsMTE1LDExMiwxMDEsOTksMTAsMzIsMzIsMzIsCisgICAgMzIsMTA0LDk3LDExNSwzMiw5NywzMiwxMTAsMTExLDExMCw0NSw3OCwxMTEsMTEwLDEwMSwzMiwKKyAgICAxMTgsOTcsMTA4LDExNywxMDEsMzIsMTA1LDExMCwzMiw5NiwxMTUsMTE3LDk4LDEwOSwxMTEsMTAwLAorICAgIDExNywxMDgsMTAxLDk1LDExNSwxMDEsOTcsMTE0LDk5LDEwNCw5NSwxMDgsMTExLDk5LDk3LDExNiwKKyAgICAxMDUsMTExLDExMCwxMTUsOTYsNDQsMzIsMTE2LDEwNCwxMDEsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwKKyAgICAxMTYsMTAsMzIsMzIsMzIsMzIsMTE1LDEyMSwxMTUsMTE2LDEwMSwxMDksMzIsMTE5LDEwNSwxMDgsCisgICAgMTA4LDMyLDk5LDExMSwxMTAsMTE1LDEwNSwxMDAsMTAxLDExNCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LAorICAgIDEwMSwxMTUsMzIsMTA4LDExMSw5NywxMDAsMTAxLDEwMCwzMiwxMDIsMTE0LDExMSwxMDksMzIsMTE2LAorICAgIDEwNCwxMDEsMzIsMTE1LDExMiwxMDEsOTksMzIsOTcsMTE1LDMyLDExMiw5Nyw5OSwxMDcsOTcsCisgICAgMTAzLDEwMSwxMTUsNDYsMTAsMTAsMzIsMzIsMzIsMzIsNzksMTEwLDEwOCwxMjEsMzIsMTAyLAorICAgIDEwNSwxMTAsMTAwLDEwMSwxMTQsMTE1LDMyLDQwLDExNSwxMDEsMTAxLDMyLDEwNSwxMDksMTEyLDExMSwKKyAgICAxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTcsOTgsOTksNDYsNzcsMTAxLDExNiw5Nyw4MCw5NywKKyAgICAxMTYsMTA0LDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsMzIsOTcsMTEwLDEwMCwxMCwzMiwzMiwzMiwKKyAgICAzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk3LDk4LDk5LDQ2LDgwLAorICAgIDk3LDExNiwxMDQsNjksMTEwLDExNiwxMTQsMTIxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDEsMzIsCisgICAgMTE1LDEwNCwxMTEsMTE3LDEwOCwxMDAsMzIsMTA5LDExMSwxMDAsMTA1LDEwMiwxMjEsMzIsNzcsMTExLAorICAgIDEwMCwxMTcsMTA4LDEwMSw4MywxMTIsMTAxLDk5LDMyLDEwNSwxMTAsMTE1LDExNiw5NywxMTAsOTksCisgICAgMTAxLDExNSw0NiwxMCwxMCwzMiwzMiwzMiwzMiwyMTgsNiwxMTEsMTE0LDEwNSwxMDMsMTA1LAorICAgIDExMCw3OCwyMTgsMTIsMTA4LDExMSw5NywxMDAsMTAxLDExNCw5NSwxMTUsMTE2LDk3LDExNiwxMDEsCisgICAgMjE4LDEwLDEwNSwxMTUsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDk5LDMsMCwwLAorICAgIDAsMywwLDAsMCw2LDAsMCwwLDIsMCwwLDAsNjcsMCwwLAorICAgIDAsMTE1LDc5LDAsMCwwLDEyNCwxLDAsMTI0LDAsMCw5NSwwLDAsMTI0LAorICAgIDIsMCwxMjQsMCwwLDk1LDEsMCwxMjQsMywwLDEyNCwwLDAsOTUsMiwKKyAgICAwLDEyNCw0LDAsMTI0LDAsMCw5NSwzLDAsMTI0LDUsMCwxMTQsNDgsMCwKKyAgICAxMDMsMCwwLDExMCwzLDAsMTAwLDAsMCwxMjQsMCwwLDk1LDQsMCwxMDAsCisgICAgMSwwLDEyNCwwLDAsOTUsNSwwLDEwMCwwLDAsMTI0LDAsMCw5NSw2LAorICAgIDAsMTAwLDAsMCw4Myw0MSwyLDc4LDcwLDQxLDcsMTE0LDY3LDAsMCwwLAorICAgIDExNCwxNzAsMCwwLDAsMTE0LDIxOCwwLDAsMCwxMTQsMjE5LDAsMCwwLDIxOCwKKyAgICAyNiwxMTUsMTE3LDk4LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDExNSwxMDEsOTcsMTE0LDk5LAorICAgIDEwNCw5NSwxMDgsMTExLDk5LDk3LDExNiwxMDUsMTExLDExMCwxMTUsMjE4LDEzLDk1LDExNSwxMDEsCisgICAgMTE2LDk1LDEwMiwxMDUsMTA4LDEwMSw5NywxMTYsMTE2LDExNCwyMTgsNyw5NSw5OSw5Nyw5OSwKKyAgICAxMDQsMTAxLDEwMCw0MSw2LDExNCw3MSwwLDAsMCwxMTQsNjcsMCwwLDAsMTE0LAorICAgIDE3MCwwLDAsMCwxMTQsMjE4LDAsMCwwLDExNCwyMTksMCwwLDAsMTE0LDIyMCwKKyAgICAwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLAorICAgIDAsMCwxMTQsNzIsMCwwLDAsMjIsMywwLDAsMTE1LDE0LDAsMCwwLAorICAgIDAsMiw5LDEsOSwxLDksMSw5LDEsMjEsMyw5LDEsMTIyLDE5LAorICAgIDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsODMsMTEyLDEwMSw5OSw0Niw5NSw5NSwxMDUsMTEwLDEwNSwKKyAgICAxMTYsOTUsOTUsOTksMSwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsCisgICAgNCwwLDAsMCw2NywwLDAsMCwxMTUsMTUzLDAsMCwwLDEwMCwxLDAsCisgICAgMTA2LDAsMCwxMjQsMCwwLDEwNiwxLDAsMTMxLDEsMCwxMDAsMiwwLDEwNiwKKyAgICAwLDAsMTI0LDAsMCwxMDYsMiwwLDEzMSwxLDAsMTAzLDIsMCwxMjUsMSwKKyAgICAwLDEyNCwwLDAsMTA2LDMsMCwxMDAsMCwwLDEwNyw5LDAsMTE0LDc5LDAsCisgICAgMTI0LDEsMCwxMDYsNCwwLDEwMCwzLDAsMTA2LDAsMCwxMjQsMCwwLDEwNiwKKyAgICAzLDAsMTMxLDEsMCwxMzEsMSwwLDEsMTEwLDAsMCwxMjQsMCwwLDEwNiwKKyAgICA1LDAsMTAwLDAsMCwxMDcsOSwwLDExNCwxMjIsMCwxMjQsMSwwLDEwNiw0LAorICAgIDAsMTAwLDQsMCwxMDYsMCwwLDEyNCwwLDAsMTA2LDUsMCwxMzEsMSwwLAorICAgIDEzMSwxLDAsMSwxMTAsMCwwLDEwMCw1LDAsMTA2LDAsMCwxMjQsMCwwLAorICAgIDEwNiw2LDAsMTA2LDcsMCwxMDAsNiwwLDEwNiw4LDAsMTI0LDEsMCwxMzEsCisgICAgMSwwLDEzMSwyLDAsODMsNDEsNyw3OCwxMjIsOSwxMTAsOTcsMTA5LDEwMSw2MSwKKyAgICAxMjMsMzMsMTE0LDEyNSwxMjIsMTEsMTA4LDExMSw5NywxMDAsMTAxLDExNCw2MSwxMjMsMzMsMTE0LAorICAgIDEyNSwxMjIsMTEsMTExLDExNCwxMDUsMTAzLDEwNSwxMTAsNjEsMTIzLDMzLDExNCwxMjUsMTIyLDI5LAorICAgIDExNSwxMTcsOTgsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTE1LDEwMSw5NywxMTQsOTksMTA0LAorICAgIDk1LDEwOCwxMTEsOTksOTcsMTE2LDEwNSwxMTEsMTEwLDExNSw2MSwxMjMsMTI1LDEyMiw2LDEyMywKKyAgICAxMjUsNDAsMTIzLDEyNSw0MSwxMjIsMiw0NCwzMiw0MSw5LDExNCw0NywwLDAsMCwKKyAgICAxMTQsNjcsMCwwLDAsMTE0LDE3MCwwLDAsMCwxMTQsMjE4LDAsMCwwLDIxOCwKKyAgICA2LDk3LDExMiwxMTIsMTAxLDExMCwxMDAsMTE0LDIyMSwwLDAsMCwyMTgsOSw5NSw5NSwKKyAgICA5OSwxMDgsOTcsMTE1LDExNSw5NSw5NSwxMTQsNTcsMCwwLDAsMTE0LDI2LDAsMCwKKyAgICAwLDQxLDIsMTE0LDcxLDAsMCwwLDExNCw4MCwwLDAsMCwxMTQsNCwwLAorICAgIDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsMTAxLDAsMCwKKyAgICAwLDM0LDMsMCwwLDExNSwxNiwwLDAsMCwwLDEsMTUsMSwyMSwxLAorICAgIDE1LDEsMjgsMSwxNSwxLDEyLDEsMTYsMSwxMjIsMTksNzcsMTExLDEwMCwxMTcsCisgICAgMTA4LDEwMSw4MywxMTIsMTAxLDk5LDQ2LDk1LDk1LDExNCwxMDEsMTEyLDExNCw5NSw5NSw5OSwKKyAgICAyLDAsMCwwLDAsMCwwLDAsMywwLDAsMCwxMSwwLDAsMCwKKyAgICA2NywwLDAsMCwxMTUsMTQ1LDAsMCwwLDEyNCwwLDAsMTA2LDAsMCwxMjUsCisgICAgMiwwLDEyMSwxMDcsMCwxMjQsMCwwLDEwNiwxLDAsMTI0LDEsMCwxMDYsMSwKKyAgICAwLDEwNywyLDAsMTExLDExNCwwLDEyNCwwLDAsMTA2LDIsMCwxMjQsMSwwLAorICAgIDEwNiwyLDAsMTA3LDIsMCwxMTEsMTE0LDAsMTI0LDAsMCwxMDYsMywwLDEyNCwKKyAgICAxLDAsMTA2LDMsMCwxMDcsMiwwLDExMSwxMTQsMCwxMjQsMiwwLDEyNCwxLAorICAgIDAsMTA2LDAsMCwxMDcsMiwwLDExMSwxMTQsMCwxMjQsMCwwLDEwNiw0LDAsCisgICAgMTI0LDEsMCwxMDYsNCwwLDEwNywyLDAsMTExLDExNCwwLDEyNCwwLDAsMTA2LAorICAgIDUsMCwxMjQsMSwwLDEwNiw1LDAsMTA3LDIsMCw4Myw4NywxMTAsMjIsMCwKKyAgICA0LDExNiw2LDAsMTA3LDEwLDAsMTE0LDE0MCwwLDEsMSwxLDEwMCwxLDAsCisgICAgODMsODksMTEwLDEsMCw4OCwxMDAsMCwwLDgzLDQxLDIsNzgsNzAsNDEsNywKKyAgICAxMTQsMjIxLDAsMCwwLDExNCw2NywwLDAsMCwxMTQsMTcwLDAsMCwwLDExNCwKKyAgICAyMTgsMCwwLDAsMjE4LDYsOTksOTcsOTksMTA0LDEwMSwxMDAsMjE4LDEyLDEwNCw5NywKKyAgICAxMTUsOTUsMTA4LDExMSw5OSw5NywxMTYsMTA1LDExMSwxMTAsMTE0LDIxMCwwLDAsMCw0MSwKKyAgICAzLDExNCw3MSwwLDAsMCwyMTgsNSwxMTEsMTE2LDEwNCwxMDEsMTE0LDIxOCw0LDExNSwKKyAgICAxMDksMTE1LDEwOCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLAorICAgIDAsMCwyMTgsNiw5NSw5NSwxMDEsMTEzLDk1LDk1LDQ0LDMsMCwwLDExNSwyMCwKKyAgICAwLDAsMCwwLDEsOSwxLDMsMSwxOCwxLDE4LDEsMTgsMSwxNSwKKyAgICAxLDE4LDEsMjAsMSwxMywxLDEyMiwxNyw3NywxMTEsMTAwLDExNywxMDgsMTAxLDgzLAorICAgIDExMiwxMDEsOTksNDYsOTUsOTUsMTAxLDExMyw5NSw5NSw5OSwxLDAsMCwwLDAsCisgICAgMCwwLDAsMiwwLDAsMCwxMSwwLDAsMCw2NywwLDAsMCwxMTUsCisgICAgMTU4LDAsMCwwLDEyNCwwLDAsMTA2LDAsMCwxMDAsMCwwLDEwNyw4LDAsCisgICAgMTE0LDE1MSwwLDEyNCwwLDAsMTA2LDEsMCwxMDAsMCwwLDEwNyw5LDAsMTE0LAorICAgIDE1MSwwLDEyNCwwLDAsMTA2LDIsMCwxMTQsMTUxLDAsMTI0LDAsMCwxMDYsMSwKKyAgICAwLDEyNSwxLDAsMTI0LDEsMCwxMDYsMywwLDExNiw0LDAsMTE2LDUsMCwKKyAgICAxMzEsMSwwLDEzMSwxLDAsMTE0LDExMiwwLDEyMSwxOSwwLDExNiw2LDAsMTI0LAorICAgIDEsMCwxMzEsMSwwLDEyNCwwLDAsOTUsMCwwLDg3LDExMywxNDUsMCw0LAorICAgIDExNiw3LDAsMTA3LDEwLDAsMTE0LDEwOCwwLDEsMSwxLDg5LDExMywxNDUsMCwKKyAgICA4OCwxMTMsMTQ4LDAsMTI0LDEsMCwxMDYsMywwLDExNiw0LDAsMTE2LDgsMCwKKyAgICAxMzEsMSwwLDEzMSwxLDAsMTE0LDE0OCwwLDEyNCwxLDAsMTI0LDAsMCw5NSwKKyAgICAwLDAsMTEzLDE0OCwwLDExMywxNTEsMCwxMTAsMCwwLDEyNCwwLDAsMTA2LDAsCisgICAgMCw4Myw0MSwxLDc4LDQxLDksMTE0LDIyMywwLDAsMCwxMTQsMjE4LDAsMCwKKyAgICAwLDExNCwyMjIsMCwwLDAsMjE4LDgsMTAxLDExMCwxMDAsMTE1LDExOSwxMDUsMTE2LDEwNCwKKyAgICAyMTgsNSwxMTYsMTE3LDExMiwxMDgsMTAxLDExNCwxMzUsMCwwLDAsMTE0LDEzMiwwLDAsCisgICAgMCwxMTQsMTIzLDAsMCwwLDIxOCwxNyw2Niw4OSw4NCw2OSw2Nyw3OSw2OCw2OSwKKyAgICA5NSw4Myw4NSw3MCw3MCw3Myw4OCw2OSw4Myw0MSwyLDExNCw3MSwwLDAsMCwKKyAgICAxMTQsMTMxLDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCwKKyAgICA1LDAsMCwwLDExNCwyMjYsMCwwLDAsNTYsMywwLDAsMTE1LDIyLDAsCisgICAgMCwwLDAsMiwxNSwxLDI0LDEsOSwxLDIxLDEsMywxLDE5LDEsCisgICAgMTMsMSw4LDEsMjEsMSwxOCwxLDEyMiwxNyw3NywxMTEsMTAwLDExNywxMDgsMTAxLAorICAgIDgzLDExMiwxMDEsOTksNDYsOTksOTcsOTksMTA0LDEwMSwxMDAsOTksMiwwLDAsMCwKKyAgICAwLDAsMCwwLDIsMCwwLDAsMiwwLDAsMCw2NywwLDAsMCwKKyAgICAxMTUsMTMsMCwwLDAsMTI0LDEsMCwxMjQsMCwwLDk1LDAsMCwxMDAsMCwKKyAgICAwLDgzLDQxLDEsNzgsNDEsMSwxMTQsMjIzLDAsMCwwLDQxLDIsMTE0LDcxLAorICAgIDAsMCwwLDExNCwyMjYsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwKKyAgICAwLDAsMTE0LDUsMCwwLDAsMTE0LDIyNiwwLDAsMCw3MCwzLDAsMCwKKyAgICAxMTUsMiwwLDAsMCwwLDIsOTksMSwwLDAsMCwwLDAsMCwwLAorICAgIDEsMCwwLDAsMiwwLDAsMCw2NywwLDAsMCwxMTUsNDYsMCwwLAorICAgIDAsMTI0LDAsMCwxMDYsMCwwLDEwMCwxLDAsMTA3LDgsMCwxMTQsMzUsMCwKKyAgICAxMjQsMCwwLDEwNiwxLDAsMTA2LDIsMCwxMDAsMiwwLDEzMSwxLDAsMTAwLAorICAgIDMsMCwyNSw4MywxMjQsMCwwLDEwNiwxLDAsODMsMTAwLDEsMCw4Myw0MSwKKyAgICA0LDEyMiwzMiw4NCwxMDQsMTAxLDMyLDExMCw5NywxMDksMTAxLDMyLDExMSwxMDIsMzIsMTE2LAorICAgIDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzksMTE1LDMyLDExMiw5NywxMTQsMTAxLAorICAgIDExMCwxMTYsNDYsNzgsMTE0LDExNiwwLDAsMCwxMTQsODQsMCwwLDAsNDEsMywKKyAgICAxMTQsMjIxLDAsMCwwLDExNCw2NywwLDAsMCwxMTQsMzIsMCwwLDAsNDEsCisgICAgMSwxMTQsNzEsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsCisgICAgMTE0LDUsMCwwLDAsMjE4LDYsMTEyLDk3LDExNCwxMDEsMTEwLDExNiw3NCwzLDAsCisgICAgMCwxMTUsNiwwLDAsMCwwLDMsMTUsMSwyMCwyLDEyMiwxNyw3NywxMTEsCisgICAgMTAwLDExNywxMDgsMTAxLDgzLDExMiwxMDEsOTksNDYsMTEyLDk3LDExNCwxMDEsMTEwLDExNiw5OSwKKyAgICAxLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwxLDAsMCwwLAorICAgIDY3LDAsMCwwLDExNSw3LDAsMCwwLDEyNCwwLDAsMTA2LDAsMCw4MywKKyAgICA0MSwxLDc4LDQxLDEsMTE0LDIyMiwwLDAsMCw0MSwxLDExNCw3MSwwLDAsCisgICAgMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwKKyAgICAxMTQsMjI3LDAsMCwwLDgyLDMsMCwwLDExNSwyLDAsMCwwLDAsMiwKKyAgICAxMjIsMjMsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw4MywxMTIsMTAxLDk5LDQ2LDEwNCw5NywxMTUsCisgICAgOTUsMTA4LDExMSw5OSw5NywxMTYsMTA1LDExMSwxMTAsOTksMiwwLDAsMCwwLDAsCisgICAgMCwwLDIsMCwwLDAsMiwwLDAsMCw2NywwLDAsMCwxMTUsMTksCisgICAgMCwwLDAsMTE2LDAsMCwxMjQsMSwwLDEzMSwxLDAsMTI0LDAsMCw5NSwKKyAgICAxLDAsMTAwLDAsMCw4Myw0MSwxLDc4LDQxLDIsMjE4LDQsOTgsMTExLDExMSwKKyAgICAxMDgsMTE0LDIyMiwwLDAsMCw0MSwyLDExNCw3MSwwLDAsMCwyMTgsNSwxMTgsCisgICAgOTcsMTA4LDExNywxMDEsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsCisgICAgMCwwLDAsMTE0LDIyNywwLDAsMCw4NiwzLDAsMCwxMTUsMiwwLDAsCisgICAgMCwwLDIsNDEsMTIsMTE0LDU3LDAsMCwwLDExNCw1NiwwLDAsMCwxMTQsCisgICAgNTgsMCwwLDAsMTE0LDU5LDAsMCwwLDExNCw3MiwwLDAsMCwxMTQsMTAxLAorICAgIDAsMCwwLDExNCwyMzAsMCwwLDAsMjE4LDgsMTEyLDExNCwxMTEsMTEyLDEwMSwxMTQsCisgICAgMTE2LDEyMSwxMTQsMjI2LDAsMCwwLDIxOCw2LDExNSwxMDEsMTE2LDExNiwxMDEsMTE0LDExNCwKKyAgICAyMzQsMCwwLDAsMTE0LDIyNywwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwKKyAgICAwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsMjE3LDAsCisgICAgMCwwLDI0MSwyLDAsMCwxMTUsMjAsMCwwLDAsMTIsMzUsNiwyLDE1LAorICAgIDEsMTUsMTEsMTIsMTAsMTIsMTIsMTgsMTQsMjEsNCwxOCw4LDE4LDQsMTE0LAorICAgIDIxNywwLDAsMCwxMTQsMjE4LDAsMCwwLDExNCwyMjAsMCwwLDAsOTksMiwKKyAgICAwLDAsMCwyLDAsMCwwLDUsMCwwLDAsMTUsMCwwLDAsNjcsCisgICAgMCwwLDAsMTE1LDE5MywwLDAsMCwxMTYsMCwwLDEyNCwxLDAsMTAwLDEsCisgICAgMCwxMzEsMiwwLDExNCw4MywwLDEyNCwzLDAsMTAwLDIsMCwxMDcsOCwwLAorICAgIDExNCw0MywwLDExNiwxLDAsMTI0LDAsMCwxMDAsMywwLDEyNCwxLDAsMTMxLAorICAgIDEsMSw4MywxMjQsMywwLDExNCw1NSwwLDEwMywwLDAsMTEwLDMsMCwxMDAsCisgICAgMiwwLDEyNSw0LDAsMTE2LDEsMCwxMjQsMCwwLDEwMCwzLDAsMTI0LDEsCisgICAgMCwxMDAsNCwwLDEyNCw0LDAsMTMxLDEsMiw4MywxMjQsMywwLDEwMCwyLAorICAgIDAsMTA3LDgsMCwxMTQsMTY4LDAsMTE2LDAsMCwxMjQsMSwwLDEwMCw1LDAsCisgICAgMTMxLDIsMCwxMTQsMTU5LDAsMTIxLDE5LDAsMTI0LDEsMCwxMDYsMiwwLDEyNCwKKyAgICAwLDAsMTMxLDEsMCwxMjUsMywwLDg3LDExMywxNjUsMCw0LDExNiwzLDAsCisgICAgMTA3LDEwLDAsMTE0LDE1NSwwLDEsMSwxLDEwMCwyLDAsMTI1LDMsMCw4OSwKKyAgICAxMTMsMTY1LDAsODgsMTEzLDE2OCwwLDEwMCw2LDAsMTI1LDMsMCwxMTAsMCwwLAorICAgIDExNiw0LDAsMTI0LDAsMCwxMjQsMSwwLDEwMCw3LDAsMTI0LDIsMCwxMDAsCisgICAgNSwwLDEyNCwzLDAsMTMxLDIsMiw4Myw0MSw4LDEyMiw1Myw4MiwxMDEsMTE2LAorICAgIDExNywxMTQsMTEwLDMyLDk3LDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDExNSwxMTIsMTAxLAorICAgIDk5LDMyLDk4LDk3LDExNSwxMDEsMTAwLDMyLDExMSwxMTAsMzIsMTE4LDk3LDExNCwxMDUsMTExLAorICAgIDExNywxMTUsMzIsMTA4LDExMSw5NywxMDAsMTAxLDExNCwzMiwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwKKyAgICAxMTUsNDYsMjE4LDEyLDEwMywxMDEsMTE2LDk1LDEwMiwxMDUsMTA4LDEwMSwxMTAsOTcsMTA5LDEwMSwKKyAgICA3OCwxMTQsMTcwLDAsMCwwLDExNCwyMjEsMCwwLDAsMTE0LDIyMCwwLDAsMCwKKyAgICA3MCwxMTQsMjE4LDAsMCwwLDQxLDUsMTE0LDYwLDAsMCwwLDIxOCwyMywxMTUsCisgICAgMTEyLDEwMSw5OSw5NSwxMDIsMTE0LDExMSwxMDksOTUsMTAyLDEwNSwxMDgsMTAxLDk1LDEwOCwxMTEsCisgICAgOTksOTcsMTE2LDEwNSwxMTEsMTEwLDExNCwyMjAsMCwwLDAsMTE0LDE1NCwwLDAsMCwKKyAgICAxMTQsMjE3LDAsMCwwLDQxLDUsMTE0LDY3LDAsMCwwLDExNCwxNzAsMCwwLAorICAgIDAsMTE0LDIxOCwwLDAsMCwxMTQsMjIwLDAsMCwwLDkwLDYsMTE1LDEwMSw5NywKKyAgICAxMTQsOTksMTA0LDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsCisgICAgMCwwLDExNCwxNzQsMCwwLDAsOTEsMywwLDAsMTE1LDI4LDAsMCwwLAorICAgIDAsMiwxNSwxLDEyLDEsMTYsMSwxOCwxLDE1LDEsNywyLDEyLDEsCisgICAgMTUsMSwzLDEsMTksMSwxMywxLDE0LDMsOSwyLDExNCwxNzQsMCwwLAorICAgIDAsMTE0LDE3MCwwLDAsMCwxMTQsMjIxLDAsMCwwLDk5LDIsMCwwLDAsCisgICAgMiwwLDAsMCw5LDAsMCwwLDE5LDAsMCwwLDY3LDAsMCwwLAorICAgIDExNSwxMTAsMSwwLDAsMTI0LDEsMCwxMDAsMSwwLDEwNyw4LDAsMTE0LDc5LAorICAgIDAsMTAwLDIsMCwxMjUsMSwwLDExNiwwLDAsMTI0LDIsMCwxMDAsMywwLAorICAgIDEzMSwyLDAsMTE0LDc5LDAsMTIxLDE5LDAsMTI0LDIsMCwxMDYsMSwwLDEyNCwKKyAgICAwLDAsMTMxLDEsMCwxMjUsMSwwLDg3LDExMyw3NiwwLDQsMTE2LDIsMCwKKyAgICAxMDcsMTAsMCwxMTQsNzIsMCwxLDEsMSw4OSwxMTMsNzYsMCw4OCwxMTMsNzksCisgICAgMCwxMTAsMCwwLDExNiwzLDAsMTI0LDAsMCwxMjQsMiwwLDEwMCw0LDAsCisgICAgMTI0LDEsMCwxMzEsMiwxLDEyNSw0LDAsMTAwLDUsMCwxMjQsNCwwLDk1LAorICAgIDQsMCwxMjQsMiwwLDEwMCwxLDAsMTA3LDgsMCwxMTQsMjAzLDAsMTIwLDc5LAorICAgIDAsMTE2LDUsMCwxMzEsMCwwLDY4LDkzLDYxLDAsOTIsMiwwLDEyNSw1LAorICAgIDAsMTI1LDYsMCwxMjQsMSwwLDEwNiw2LDAsMTE2LDcsMCwxMjQsNiwwLAorICAgIDEzMSwxLDAsMTMxLDEsMCwxMTQsMTMxLDAsMTI0LDUsMCwxMjQsMCwwLDEyNCwKKyAgICAxLDAsMTMxLDIsMCwxMjUsMiwwLDEyNCwyLDAsMTI0LDQsMCw5NSw4LAorICAgIDAsODAsMTEzLDEzMSwwLDExMywxMzEsMCw4NywxMDAsMSwwLDgzLDExMCwwLDAsCisgICAgMTI0LDMsMCwxMTYsOSwwLDEwNyw4LDAsMTE0LDM4LDEsMTE2LDAsMCwxMjQsCisgICAgMiwwLDEwMCw2LDAsMTMxLDIsMCwxMTQsNDcsMSwxMjEsMTksMCwxMjQsMiwKKyAgICAwLDEwNiwxMCwwLDEyNCwwLDAsMTMxLDEsMCwxMjUsNywwLDg3LDExMCwxOCwKKyAgICAwLDQsMTE2LDIsMCwxMDcsMTAsMCwxMTQsMTMsMSwxLDEsMSw4OSwxMTMsCisgICAgMzUsMSw4OCwxMjQsNywwLDExNCwzNSwxLDEwMywwLDAsMTI0LDQsMCw5NSwKKyAgICAxMSwwLDExMywzNSwxLDExMyw0NywxLDExMCw5LDAsMTI0LDMsMCwxMjQsNCwKKyAgICAwLDk1LDExLDAsMTI0LDQsMCwxMDYsMTEsMCwxMDMsMCwwLDEwNywyLDAsCisgICAgMTE0LDEwNiwxLDEyNCwxLDAsMTE0LDEwNiwxLDExNiwxMiwwLDEyNCwxLDAsMTMxLAorICAgIDEsMCwxMDAsNywwLDI1LDEyNSw4LDAsMTI0LDQsMCwxMDYsMTEsMCwxMDYsCisgICAgMTMsMCwxMjQsOCwwLDEzMSwxLDAsMSwxMTMsMTA2LDEsMTEwLDAsMCwxMjQsCisgICAgNCwwLDgzLDQxLDgsOTcsNjEsMSwwLDAsODIsMTAxLDExNiwxMTcsMTE0LDExMCwKKyAgICAzMiw5NywzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMTUsMTEyLDEwMSw5OSwzMiw5OCwKKyAgICA5NywxMTUsMTAxLDEwMCwzMiwxMTEsMTEwLDMyLDk3LDMyLDEwMiwxMDUsMTA4LDEwMSwzMiwxMDgsCisgICAgMTExLDk5LDk3LDExNiwxMDUsMTExLDExMCw0NiwxMCwxMCwzMiwzMiwzMiwzMiw4NCwxMTEsCisgICAgMzIsMTA1LDExMCwxMDAsMTA1LDk5LDk3LDExNiwxMDEsMzIsMTE2LDEwNCw5NywxMTYsMzIsMTE2LAorICAgIDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTA1LDExNSwzMiw5NywzMiwxMTIsCisgICAgOTcsOTksMTA3LDk3LDEwMywxMDEsNDQsMzIsMTE1LDEwMSwxMTYsMTAsMzIsMzIsMzIsMzIsCisgICAgMTE1LDExNyw5OCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwxMTUsMTAxLDk3LDExNCw5OSwxMDQsCisgICAgOTUsMTA4LDExMSw5OSw5NywxMTYsMTA1LDExMSwxMTAsMTE1LDMyLDExNiwxMTEsMzIsOTcsMzIsCisgICAgMTA4LDEwNSwxMTUsMTE2LDMyLDExMSwxMDIsMzIsMTAwLDEwNSwxMTQsMTAxLDk5LDExNiwxMTEsMTE0LAorICAgIDEyMSwzMiwxMTIsOTcsMTE2LDEwNCwxMTUsNDYsMzIsMzIsNjUsMTEwLDEwLDMyLDMyLDMyLAorICAgIDMyLDEwMSwxMDksMTEyLDExNiwxMjEsMzIsMTA4LDEwNSwxMTUsMTE2LDMyLDEwNSwxMTUsMzIsMTE1LAorICAgIDExNywxMDIsMTAyLDEwNSw5OSwxMDUsMTAxLDExMCwxMTYsNDQsMzIsMTE2LDEwNCwxMTEsMTE3LDEwMywKKyAgICAxMDQsMzIsMTA1LDExNiwxMTUsMzIsMTEwLDExMSwxMTYsMzIsMTExLDExNiwxMDQsMTAxLDExNCwxMTksCisgICAgMTA1LDExNSwxMDEsMzIsMTE3LDExNSwxMDEsMTAyLDExNywxMDgsMzIsMTE2LDExMSwzMiwxMTYsMTA0LAorICAgIDEwMSwxMCwzMiwzMiwzMiwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwzMiwxMTUsMTIxLDExNSwKKyAgICAxMTYsMTAxLDEwOSw0NiwxMCwxMCwzMiwzMiwzMiwzMiw4NCwxMDQsMTAxLDMyLDEwOCwxMTEsCisgICAgOTcsMTAwLDEwMSwxMTQsMzIsMTA5LDExNywxMTUsMTE2LDMyLDExNiw5NywxMDcsMTAxLDMyLDk3LAorICAgIDMyLDExNSwxMTIsMTAxLDk5LDMyLDk3LDExNSwzMiwxMDUsMTE2LDExNSwzMiwxMTEsMTEwLDEwOCwKKyAgICAxMjEsMzIsOTUsOTUsMTA1LDExMCwxMDUsMTE2LDk1LDk1LDQwLDQxLDMyLDk3LDExNCwxMDMsCisgICAgNDYsMTAsMTAsMzIsMzIsMzIsMzIsNzgsMTIyLDksNjAsMTE3LDExMCwxMDcsMTEwLDExMSwKKyAgICAxMTksMTEwLDYyLDExNCwyMzksMCwwLDAsMTE0LDIxOCwwLDAsMCw4NCwxMTQsMjIwLAorICAgIDAsMCwwLDExNCw4NCwwLDAsMCw0MSwxNCwxMTQsNjAsMCwwLDAsMTE0LAorICAgIDIzOSwwLDAsMCwxMTQsMTU0LDAsMCwwLDExNCwyMTcsMCwwLDAsMTE0LDIyMiwKKyAgICAwLDAsMCwyMTgsMjcsOTUsMTAzLDEwMSwxMTYsOTUsMTE1LDExNywxMTIsMTEyLDExMSwxMTQsCisgICAgMTE2LDEwMSwxMDAsOTUsMTAyLDEwNSwxMDgsMTAxLDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMTE1LAorICAgIDExNCwyMzEsMCwwLDAsMTE0LDIzMiwwLDAsMCwxMTQsMTcwLDAsMCwwLDIxOCwKKyAgICA5LDk1LDgwLDc5LDgwLDg1LDc2LDY1LDg0LDY5LDExNCwyMjAsMCwwLDAsMTE0LAorICAgIDIyMSwwLDAsMCwxMTQsMzgsMCwwLDAsMTE0LDIyNCwwLDAsMCw0MSw5LAorICAgIDExNCw2NywwLDAsMCwyMTgsOCwxMDgsMTExLDk5LDk3LDExNiwxMDUsMTExLDExMCwxMTQsCisgICAgMTcwLDAsMCwwLDExNCwyMjEsMCwwLDAsMTE0LDE3OCwwLDAsMCwyMTgsMTIsCisgICAgMTA4LDExMSw5NywxMDAsMTAxLDExNCw5NSw5OSwxMDgsOTcsMTE1LDExNSwxMTQsMTI2LDAsMCwKKyAgICAwLDExNCwyMjAsMCwwLDAsOTAsNywxMDAsMTA1LDExNCwxMTAsOTcsMTA5LDEwMSwxMTQsCisgICAgNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsMjQwLAorICAgIDAsMCwwLDExNiwzLDAsMCwxMTUsNjAsMCwwLDAsMCwxMiwxMiw0LAorICAgIDYsMSwxNSwyLDMsMSwxOSwxLDEzLDEsMTEsOCwyMSwxLDksMywKKyAgICAxMiwxLDIyLDEsMjEsMSwxNSwxLDksMSw4LDIsNywzLDEyLDIsCisgICAgMTUsMSwzLDEsMTksMSwxMywxLDUsMiw2LDEsMTgsMiw5LDEsCisgICAgMTUsMSw2LDEsMTYsMSwyMiwyLDExNCwyNDAsMCwwLDAsOTksMywwLAorICAgIDAsMCwwLDAsMCwwLDgsMCwwLDAsNTMsMCwwLDAsNjcsMCwKKyAgICAwLDAsMTE1LDEyNCwxLDAsMCwxMjEsMTMsMCwxMjQsMCwwLDEwNiwwLDAsCisgICAgMTI1LDMsMCw4NywxMTAsMTgsMCw0LDExNiwxLDAsMTA3LDEwLDAsMTE0LDMzLAorICAgIDAsMSwxLDEsODksMTEwLDE3LDAsODgsMTI0LDMsMCwxMDAsMCwwLDEwNywKKyAgICA5LDAsMTE0LDUwLDAsMTI0LDMsMCw4MywxMjQsMCwwLDEwNiwyLDAsMTI1LAorICAgIDQsMCwxMjQsMSwwLDEwMCwwLDAsMTA3LDgsMCwxMTQsMTA4LDAsMTIxLDEzLAorICAgIDAsMTI0LDAsMCwxMDYsMywwLDEyNSwxLDAsODcsMTEzLDEwOCwwLDQsMTE2LAorICAgIDEsMCwxMDcsMTAsMCwxMTQsMTA0LDAsMSwxLDEsODksMTEzLDEwOCwwLDg4LAorICAgIDExMCwwLDAsMTIxLDEzLDAsMTI0LDAsMCwxMDYsNCwwLDEyNSw1LDAsODcsCisgICAgMTEwLDI0LDAsNCwxMTYsMSwwLDEwNywxMCwwLDExNCwxNDcsMCwxLDEsMSwKKyAgICAxMDAsMCwwLDEyNSw1LDAsODksMTEwLDEsMCw4OCwxMjQsMiwwLDEwMCwwLAorICAgIDAsMTA3LDgsMCwxMTQsMjI0LDAsMTI0LDUsMCwxMDAsMCwwLDEwNyw4LDAsCisgICAgMTE0LDIxNSwwLDEyMSwxMywwLDEyNCwxLDAsMTA2LDUsMCwxMjUsMiwwLDg3LAorICAgIDExMywyMjEsMCw0LDExNiwxLDAsMTA3LDEwLDAsMTE0LDIxMSwwLDEsMSwxLAorICAgIDEwMCwwLDAsMTI1LDIsMCw4OSwxMTMsMjIxLDAsODgsMTEzLDIyNCwwLDEyNCw1LAorICAgIDAsMTI1LDIsMCwxMTAsMCwwLDEyMSwxMywwLDEyNCwwLDAsMTA2LDYsMCwKKyAgICAxMjUsNiwwLDg3LDExMCwyNCwwLDQsMTE2LDEsMCwxMDcsMTAsMCwxMTQsNywKKyAgICAxLDEsMSwxLDEwMCwwLDAsMTI1LDYsMCw4OSwxMTAsMSwwLDg4LDEyMSwKKyAgICAxOSwwLDExNiw3LDAsMTI0LDAsMCwxMDYsOCwwLDEzMSwxLDAsMTI1LDcsCisgICAgMCw4NywxMTAsMjQsMCw0LDExNiwxLDAsMTA3LDEwLDAsMTE0LDUzLDEsMSwKKyAgICAxLDEsMTAwLDAsMCwxMjUsNywwLDg5LDExMCwxLDAsODgsMTE2LDksMCwKKyAgICAxMjQsNCwwLDEyNCwxLDAsMTAwLDEsMCwxMjQsMiwwLDEzMSwyLDEsMTI1LAorICAgIDMsMCwxMjQsNSwwLDEwMCwwLDAsMTA3LDgsMCwxMTQsOTMsMSwxMDAsMiwKKyAgICAwLDExMCwzLDAsMTAwLDMsMCwxMjQsMywwLDk1LDEwLDAsMTI0LDYsMCwKKyAgICAxMjQsMywwLDk1LDExLDAsMTI0LDcsMCwxMjQsMywwLDk1LDEyLDAsMTI0LAorICAgIDMsMCw4Myw0MSw0LDc4LDExNCwyMTgsMCwwLDAsNzAsODQsNDEsMTMsMTE0LAorICAgIDIwOSwwLDAsMCwxMTQsMjEwLDAsMCwwLDExNCw1NywwLDAsMCwxMTQsMjA1LAorICAgIDAsMCwwLDExNCwyMTEsMCwwLDAsOTAsNyw5NSw3OSw4Miw3Myw3MSw3MywKKyAgICA3OCwyMTgsMTAsOTUsOTUsOTksOTcsOTksMTA0LDEwMSwxMDAsOTUsOTUsMjE4LDQsMTA4LAorICAgIDEwNSwxMTUsMTE2LDIxOCw4LDk1LDk1LDExMiw5NywxMTYsMTA0LDk1LDk1LDExNCwyMTcsMCwKKyAgICAwLDAsMTE0LDIyMiwwLDAsMCwxMTQsMjI2LDAsMCwwLDExNCwyMjEsMCwwLAorICAgIDAsNDEsOCwxMTQsMTgwLDAsMCwwLDExNCwxNzAsMCwwLDAsMTE0LDIxOCwwLAorICAgIDAsMCwxMTQsMTc4LDAsMCwwLDExNCw2NywwLDAsMCwxMTQsMjQzLDAsMCwKKyAgICAwLDExNCwyMjYsMCwwLDAsMTE0LDIyMSwwLDAsMCwxMTQsNCwwLDAsMCwKKyAgICAxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMTcsOTUsMTE1LDExMiwxMDEsCisgICAgOTksOTUsMTAyLDExNCwxMTEsMTA5LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDE4MCwzLDAsCisgICAgMCwxMTUsNzIsMCwwLDAsMCwyLDMsMSwxMywxLDEzLDEsNSwyLAorICAgIDEyLDEsNCwyLDksMSwxMiwxLDMsMSwxMywxLDEzLDIsOCwxLAorICAgIDMsMSwxMywxLDEzLDEsMTEsMSwxMiwxLDEyLDEsMywxLDEzLDEsCisgICAgMTMsMSwxNCwyLDksMSwzLDEsMTMsMSwxMywxLDExLDEsMywxLAorICAgIDE5LDEsMTMsMSwxMSwyLDIxLDEsMjcsMSw5LDEsOSwxLDExNCwyNDgsCisgICAgMCwwLDAsOTksMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsCisgICAgNiwwLDAsMCw2NCwwLDAsMCwxMTUsMTQyLDAsMCwwLDEwMSwwLDAsCisgICAgOTAsMSwwLDEwMCwwLDAsOTAsMiwwLDEwMCwxLDAsOTAsMywwLDEwMCwKKyAgICAyLDAsMTAwLDMsMCwxMzIsMCwwLDkwLDQsMCwxMDAsNCwwLDEwMCw1LAorICAgIDAsMTMyLDAsMCw5MCw1LDAsMTAwLDYsMCwxMDAsNywwLDEwMCw4LDAsCisgICAgMTAwLDksMCwxMDAsMTAsMCwxMDAsMTEsMCwxMzIsMCwyLDkwLDYsMCwxMDAsCisgICAgMTIsMCwxMDAsMTMsMCwxMzIsMCwwLDkwLDcsMCwxMDAsMTQsMCwxMDAsMTUsCisgICAgMCwxMzIsMCwwLDkwLDgsMCwxMDAsMTYsMCwxMDAsMTcsMCwxMzIsMCwwLAorICAgIDkwLDksMCwxMDAsMTgsMCwxMDAsMTksMCwxMzIsMCwwLDkwLDEwLDAsMTAwLAorICAgIDIwLDAsMTAwLDIxLDAsMTMyLDAsMCw5MCwxMSwwLDEwMCwyMiwwLDEwMCwyMywKKyAgICAwLDEzMiwwLDAsOTAsMTIsMCwxMDAsMjQsMCw4Myw0MSwyNSwxMTQsMTc1LDAsCisgICAgMCwwLDEyMiw3Nyw2NywxMTEsMTEwLDExOCwxMDEsMTEwLDEwNSwxMDEsMTEwLDk5LDEwMSwzMiwKKyAgICAxMTksMTE0LDk3LDExMiwxMTIsMTAxLDExNCwzMiw5NywxMTQsMTExLDExNywxMTAsMTAwLDMyLDExNSwKKyAgICAxMTIsMTAxLDk5LDMyLDExMSw5OCwxMDYsMTAxLDk5LDExNiwxMTUsMzIsMTE2LDExMSwzMiwxMTIsCisgICAgMTE0LDExMSwxMTgsMTA1LDEwMCwxMDEsMzIsMTE1LDExMiwxMDEsOTksNDUsMTE1LDExMiwxMDEsOTksCisgICAgMTA1LDEwMiwxMDUsOTksMTAsMzIsMzIsMzIsMzIsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMTE1LAorICAgIDQ2LDk5LDIsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDIsMCwKKyAgICAwLDAsNjcsMCwwLDAsMTE1LDEzLDAsMCwwLDEyNCwxLDAsMTI0LDAsCisgICAgMCw5NSwwLDAsMTAwLDAsMCw4Myw0MSwxLDc4LDQxLDEsMTE0LDE3OCwwLAorICAgIDAsMCw0MSwyLDExNCw3MSwwLDAsMCwxMTQsMTc4LDAsMCwwLDExNCw0LAorICAgIDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCw3MiwwLAorICAgIDAsMCwyMzIsMywwLDAsMTE1LDIsMCwwLDAsMCwxLDEyMiwyMSw5NSwKKyAgICA4MywxMTIsMTAxLDk5LDc3LDEwMSwxMTYsMTA0LDExMSwxMDAsMTE1LDQ2LDk1LDk1LDEwNSwxMTAsCisgICAgMTA1LDExNiw5NSw5NSw5OSwxLDAsMCwwLDAsMCwwLDAsMywwLDAsCisgICAgMCwzLDAsMCwwLDY3LDAsMCwwLDExNSwxNTgsMCwwLDAsMTI0LDAsCisgICAgMCwxMDYsMCwwLDEyNSwxLDAsMTI0LDEsMCwxMDYsMSwwLDEwMCwxLDAsCisgICAgMTA3LDgsMCwxMTQsMzAsMCwxMDAsMiwwLDExMCw2LDAsMTI0LDEsMCwxMDYsCisgICAgMSwwLDEyNSwyLDAsMTI0LDEsMCwxMDYsMiwwLDEwMCwxLDAsMTA3LDgsCisgICAgMCwxMTQsMTA0LDAsMTI0LDEsMCwxMDYsMywwLDEwMCwxLDAsMTA3LDgsMCwKKyAgICAxMTQsODIsMCwxMDAsMywwLDEwNiw0LDAsMTI0LDIsMCwxMzEsMSwwLDgzLAorICAgIDEwMCw0LDAsMTA2LDQsMCwxMjQsMiwwLDEyNCwxLDAsMTA2LDMsMCwxMzEsCisgICAgMiwwLDgzLDExMCw1MCwwLDEyNCwxLDAsMTA2LDUsMCwxMTQsMTMyLDAsMTAwLAorICAgIDUsMCwxMDYsNCwwLDEyNCwyLDAsMTI0LDEsMCwxMDYsMiwwLDEzMSwyLAorICAgIDAsODMsMTAwLDYsMCwxMDYsNCwwLDEyNCwxLDAsMTA2LDEsMCwxMjQsMSwKKyAgICAwLDEwNiwyLDAsMTMxLDIsMCw4MywxMDAsMSwwLDgzLDQxLDcsMTIyLDM4LAorICAgIDgyLDEwMSwxMTYsMTE3LDExNCwxMTAsMzIsMTE2LDEwNCwxMDEsMzIsMTE0LDEwMSwxMTIsMTE0LDMyLAorICAgIDExNiwxMTEsMzIsMTE3LDExNSwxMDEsMzIsMTAyLDExMSwxMTQsMzIsMTE2LDEwNCwxMDEsMzIsMTA5LAorICAgIDExMSwxMDAsMTE3LDEwOCwxMDEsNDYsNzgsMTE0LDIwNywwLDAsMCwxMjIsMTMsNjAsMTA5LAorICAgIDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTIzLDMzLDExNCwxMjUsNjIsMTIyLDIwLDYwLDEwOSwxMTEsCisgICAgMTAwLDExNywxMDgsMTAxLDMyLDEyMywzMywxMTQsMTI1LDMyLDQwLDEyMywzMywxMTQsMTI1LDQxLAorICAgIDYyLDEyMiwyMyw2MCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMjMsMzMsMTE0LDEyNSwzMiwKKyAgICAxMDIsMTE0LDExMSwxMDksMzIsMTIzLDMzLDExNCwxMjUsNjIsMTIyLDE4LDYwLDEwOSwxMTEsMTAwLAorICAgIDExNywxMDgsMTAxLDMyLDEyMywzMywxMTQsMTI1LDMyLDQwLDEyMywxMjUsNDEsNjIsNDEsNiwKKyAgICAxMTQsMTc4LDAsMCwwLDExNCw2NywwLDAsMCwxMTQsMjE4LDAsMCwwLDExNCwKKyAgICAxNzAsMCwwLDAsMTE0LDQ3LDAsMCwwLDExNCwyMjcsMCwwLDAsNDEsMywKKyAgICAxMTQsNzEsMCwwLDAsMTE0LDE3OCwwLDAsMCwxMTQsNjcsMCwwLDAsMTE0LAorICAgIDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDIwNiwKKyAgICAwLDAsMCwyMzUsMywwLDAsMTE1LDE4LDAsMCwwLDAsMyw5LDEsCisgICAgMzAsMSwxNSwxLDE1LDEsMTMsMiwyMiwyLDksMSwxOSwyLDEyMiwyNCwKKyAgICA5NSw4MywxMTIsMTAxLDk5LDc3LDEwMSwxMTYsMTA0LDExMSwxMDAsMTE1LDQ2LDEwOSwxMTEsMTAwLAorICAgIDExNywxMDgsMTAxLDk1LDExNCwxMDEsMTEyLDExNCwyMTgsOSw5NSwxMTEsMTE4LDEwMSwxMTQsMTE0LAorICAgIDEwNSwxMDAsMTAxLDcwLDIxOCwxMSw5NSwxMDIsMTExLDExNCw5OSwxMDEsOTUsMTEwLDk3LDEwOSwKKyAgICAxMDEsODQsOTksMiwwLDAsMCwyLDAsMCwwLDYsMCwwLDAsNTksCisgICAgMCwwLDAsNjcsMCwwLDAsMTE1LDc1LDIsMCwwLDEyNCwwLDAsMTA2LAorICAgIDAsMCwxMjUsNCwwLDEyNCwyLDAsMTE1LDQ1LDAsMTI0LDMsMCwxMTUsNDUsCisgICAgMCwxMTYsMSwwLDEyNCwxLDAsMTAwLDEsMCwxMDAsMiwwLDEzMSwzLDAsCisgICAgMTAwLDIsMCwxMDcsOCwwLDExNCw4NSwwLDEyMSwxNiwwLDEyNCw0LDAsMTA2LAorICAgIDIsMCwxMjQsMSwwLDk1LDMsMCw4NywxMTMsODUsMCw0LDExNiw0LDAsCisgICAgMTA3LDEwLDAsMTE0LDgxLDAsMSwxLDEsODksMTEzLDg1LDAsODgsMTEwLDAsCisgICAgMCwxMjQsMiwwLDExNSwxMTUsMCwxMTYsMSwwLDEyNCwxLDAsMTAwLDMsMCwKKyAgICAxMDAsMiwwLDEzMSwzLDAsMTAwLDIsMCwxMDcsOCwwLDExNCwyMjEsMCwxMjQsCisgICAgNCwwLDEwNiw1LDAsMTI1LDUsMCwxMjQsNSwwLDEwMCwyLDAsMTA3LDgsCisgICAgMCwxMTQsMTg0LDAsMTI0LDQsMCwxMDYsNiwwLDEwMCwyLDAsMTA3LDksMCwKKyAgICAxMTQsMTg0LDAsMTE2LDcsMCwxMDYsOCwwLDExNiw3LDAsMTMxLDEsMCwxMjUsCisgICAgNSwwLDEyNCw0LDAsMTA2LDYsMCwxMjQsNSwwLDk1LDksMCwxMTMsMTg0LAorICAgIDAsMTEwLDAsMCwxMjEsMTMsMCwxMjQsNSwwLDEyNCwxLDAsOTUsMTAsMCwKKyAgICA4NywxMTMsMjIxLDAsNCwxMTYsNCwwLDEwNywxMCwwLDExNCwyMTcsMCwxLDEsCisgICAgMSw4OSwxMTMsMjIxLDAsODgsMTEwLDAsMCwxMjQsMiwwLDExNSwyNTEsMCwxMTYsCisgICAgMSwwLDEyNCwxLDAsMTAwLDQsMCwxMDAsMiwwLDEzMSwzLDAsMTAwLDIsCisgICAgMCwxMDcsOCwwLDExNCwzNSwxLDEyMSwxNiwwLDEyNCw0LDAsMTA2LDExLDAsCisgICAgMTI0LDEsMCw5NSwxMiwwLDg3LDExMywzNSwxLDQsMTE2LDQsMCwxMDcsMTAsCisgICAgMCwxMTQsMzEsMSwxLDEsMSw4OSwxMTMsMzUsMSw4OCwxMTAsMCwwLDEyMSwKKyAgICAxMywwLDEyNCw0LDAsMTI0LDEsMCw5NSwxMywwLDg3LDExMCwxOCwwLDQsCisgICAgMTE2LDQsMCwxMDcsMTAsMCwxMTQsNjgsMSwxLDEsMSw4OSwxMTAsMSwwLAorICAgIDg4LDEyNCwyLDAsMTE1LDk5LDEsMTE2LDEsMCwxMjQsMSwwLDEwMCw1LDAsCisgICAgMTAwLDIsMCwxMzEsMywwLDEwMCwyLDAsMTA3LDgsMCwxMTQsMTU3LDEsMTI0LAorICAgIDQsMCwxMDYsNiwwLDEwMCwyLDAsMTA3LDksMCwxMTQsMTU3LDEsMTIxLDE2LAorICAgIDAsMTI0LDQsMCwxMDYsNiwwLDEyNCwxLDAsOTUsMTQsMCw4NywxMTMsMTU0LAorICAgIDEsNCwxMTYsNCwwLDEwNywxMCwwLDExNCwxNTAsMSwxLDEsMSw4OSwxMTMsCisgICAgMTU0LDEsODgsMTEzLDE1NywxLDExMCwwLDAsMTI0LDQsMCwxMDYsMTUsMCwxMTQsCisgICAgNzEsMiwxMjQsMiwwLDExNSwxOTYsMSwxMTYsMSwwLDEyNCwxLDAsMTAwLDYsCisgICAgMCwxMDAsMiwwLDEzMSwzLDAsMTAwLDIsMCwxMDcsOCwwLDExNCwyMzYsMSwKKyAgICAxMjEsMTYsMCwxMjQsNCwwLDEwNiwxNiwwLDEyNCwxLDAsOTUsMTcsMCw4NywKKyAgICAxMTMsMjM2LDEsNCwxMTYsNCwwLDEwNywxMCwwLDExNCwyMzIsMSwxLDEsMSwKKyAgICA4OSwxMTMsMjM2LDEsODgsMTEwLDAsMCwxMjQsMiwwLDExNSwxMCwyLDExNiwxLAorICAgIDAsMTI0LDEsMCwxMDAsNywwLDEwMCwyLDAsMTMxLDMsMCwxMDAsMiwwLAorICAgIDEwNyw4LDAsMTE0LDcxLDIsMTI0LDQsMCwxMDYsMTgsMCwxMDAsMiwwLDEwNywKKyAgICA5LDAsMTE0LDY4LDIsMTIxLDE2LDAsMTI0LDQsMCwxMDYsMTgsMCwxMjQsMSwKKyAgICAwLDk1LDE5LDAsODcsMTEzLDY1LDIsNCwxMTYsNCwwLDEwNywxMCwwLDExNCwKKyAgICA2MSwyLDEsMSwxLDg5LDExMyw2NSwyLDg4LDExMyw2OCwyLDExMyw3MSwyLAorICAgIDExMCwwLDAsMTAwLDIsMCw4Myw0MSw4LDk3LDI5LDIsMCwwLDgzLDEwMSwKKyAgICAxMTYsMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzksMTE1LDMyLDk3LAorICAgIDExNiwxMTYsMTE0LDEwNSw5OCwxMTcsMTE2LDEwMSwxMTUsNDYsMTAsMTAsMzIsMzIsMzIsMzIsCisgICAgMzIsMzIsMzIsMzIsNjUsMTA4LDEwOCwzMiwxMDksMTA1LDExNSwxMTUsMTA1LDExMCwxMDMsMzIsCisgICAgMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsNDUsMTE0LDEwMSwxMDgsOTcsMTE2LDEwMSwxMDAsMzIsMTA5LAorICAgIDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsOTcsMTE2LDExNiwxMTQsMTA1LDk4LDExNywxMTYsMTAxLDExNSwKKyAgICAzMiwxMTksMTA1LDEwOCwxMDgsMzIsOTgsMTAxLDMyLDExNSwxMDEsMTE2LDQ2LDMyLDMyLDcyLAorICAgIDEwMSwxMTQsMTAxLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDEwNSwxMTUsMzIsMTA0LAorICAgIDExMSwxMTksMzIsMTE2LDEwNCwxMDEsMzIsMTE1LDExMiwxMDEsOTksMzIsOTcsMTE2LDExNiwxMTQsCisgICAgMTA1LDk4LDExNywxMTYsMTAxLDExNSwzMiwxMDksOTcsMTEyLDMyLDExMSwxMTAsMTE2LDExMSwzMiwKKyAgICAxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw1OCwxMCwxMCwzMiwzMiwzMiwKKyAgICAzMiwzMiwzMiwzMiwzMiwxMTUsMTEyLDEwMSw5OSw0NiwxMTAsOTcsMTA5LDEwMSwzMiw0NSwKKyAgICA2MiwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0Niw5NSw5NSwxMTAsOTcsMTA5LDEwMSw5NSwKKyAgICA5NSwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwxMTUsMTEyLDEwMSw5OSw0NiwxMDgsCisgICAgMTExLDk3LDEwMCwxMDEsMTE0LDMyLDQ1LDYyLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ2LAorICAgIDk1LDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsOTUsOTUsMTAsMzIsMzIsMzIsMzIsMzIsCisgICAgMzIsMzIsMzIsMTE1LDExMiwxMDEsOTksNDYsMTEyLDk3LDExNCwxMDEsMTEwLDExNiwzMiw0NSwKKyAgICA2MiwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0Niw5NSw5NSwxMTIsOTcsOTksMTA3LDk3LAorICAgIDEwMywxMDEsOTUsOTUsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTE1LDExMiwxMDEsCisgICAgOTksMzIsNDUsNjIsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDYsOTUsOTUsMTE1LDExMiwKKyAgICAxMDEsOTksOTUsOTUsMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsNzksMTEyLAorICAgIDExNiwxMDUsMTExLDExMCw5NywxMDgsNTgsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsCisgICAgMTE1LDExMiwxMDEsOTksNDYsMTExLDExNCwxMDUsMTAzLDEwNSwxMTAsMzIsNDUsNjIsMzIsMTA5LAorICAgIDExMSwxMDAsMTE3LDEwOCwxMDEsNDYsOTUsOTUsMTAyLDEwNSwxMDgsMTAxLDk1LDk1LDMyLDQwLAorICAgIDEwNSwxMDIsMzIsMTE1LDExMiwxMDEsOTksNDYsMTE1LDEwMSwxMTYsOTUsMTAyLDEwNSwxMDgsMTAxLAorICAgIDk3LDExNiwxMTYsMTE0LDMyLDEwNSwxMTUsMzIsMTE2LDExNCwxMTcsMTAxLDQxLDEwLDMyLDMyLAorICAgIDMyLDMyLDMyLDMyLDMyLDMyLDExNSwxMTIsMTAxLDk5LDQ2LDk5LDk3LDk5LDEwNCwxMDEsCisgICAgMTAwLDMyLDQ1LDYyLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ2LDk1LDk1LDk5LDk3LAorICAgIDk5LDEwNCwxMDEsMTAwLDk1LDk1LDMyLDQwLDEwNSwxMDIsMzIsOTUsOTUsMTAyLDEwNSwxMDgsCisgICAgMTAxLDk1LDk1LDMyLDk3LDEwOCwxMTUsMTExLDMyLDExNSwxMDEsMTE2LDQxLDEwLDMyLDMyLAorICAgIDMyLDMyLDMyLDMyLDMyLDMyLDExNSwxMTIsMTAxLDk5LDQ2LDExNSwxMTcsOTgsMTA5LDExMSwKKyAgICAxMDAsMTE3LDEwOCwxMDEsOTUsMTE1LDEwMSw5NywxMTQsOTksMTA0LDk1LDEwOCwxMTEsOTksOTcsCisgICAgMTE2LDEwNSwxMTEsMTEwLDExNSwzMiw0NSw2MiwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0NiwKKyAgICA5NSw5NSwxMTIsOTcsMTE2LDEwNCw5NSw5NSwzMiw0MCwxMDUsMTAyLDMyLDExNSwxMDEsMTE2LAorICAgIDQxLDEwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDExNCw1NywwLDAsMCwKKyAgICA3OCwxMTQsMjA1LDAsMCwwLDIxOCwxMSw5NSw5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywKKyAgICAxMDEsOTUsOTUsMTE0LDI0NywwLDAsMCwxMTQsMjExLDAsMCwwLDExNCwyNDUsMCwKKyAgICAwLDAsNDEsMjAsMTE0LDE3OCwwLDAsMCwxMTQsNjIsMCwwLDAsMTE0LDY3LAorICAgIDAsMCwwLDExNCw1NywwLDAsMCwxMTQsMjEwLDAsMCwwLDExNCwxNzAsMCwKKyAgICAwLDAsMTE0LDIyMSwwLDAsMCwyMTgsMTYsOTUsNzgsOTcsMTA5LDEwMSwxMTUsMTEyLAorICAgIDk3LDk5LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsMjE4LDcsOTUsOTUsMTEwLDEwMSwxMTksCisgICAgOTUsOTUsMjE4LDUsOTUsMTEyLDk3LDExNiwxMDQsMTE0LDIwNSwwLDAsMCwxMTQsMjM0LAorICAgIDAsMCwwLDExNCwyNTEsMCwwLDAsMTE0LDIwOSwwLDAsMCwxMTQsMjQ3LDAsCisgICAgMCwwLDExNCwyMjcsMCwwLDAsMTE0LDIxOCwwLDAsMCwxMTQsMjExLDAsMCwKKyAgICAwLDExNCwyMjYsMCwwLDAsMTE0LDI0NSwwLDAsMCw0MSw2LDExNCw3MSwwLAorICAgIDAsMCwxMTQsMTgwLDAsMCwwLDExNCwyNDksMCwwLDAsMTE0LDI1MCwwLDAsCisgICAgMCwxMTQsMTc4LDAsMCwwLDExNCwxNzAsMCwwLDAsMTE0LDQsMCwwLDAsCisgICAgMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDE3LDEwNSwxMTAsMTA1LDExNiwKKyAgICA5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSw5NywxMTYsMTE2LDExNCwxMTUsMjUxLDMsMCwKKyAgICAwLDExNSw4OCwwLDAsMCwwLDE3LDksNiwxMiwxLDI0LDEsMywxLAorICAgIDE2LDEsMTMsMSw4LDMsMzAsMSw5LDEsMTIsMiwxNSwxLDE1LDEsCisgICAgMTgsMSwzLDEsMTMsMSwxMywxLDgsMywzMCwxLDMsMSwxNiwxLAorICAgIDEzLDEsOCwzLDMsMSwxMywxLDEzLDEsNSwzLDMwLDEsMTUsMSwKKyAgICAzLDEsMTYsMSwxMywxLDExLDIsOSwyLDMwLDEsMywxLDE2LDEsCisgICAgMTMsMSw4LDMsMzAsMSwxNSwxLDMsMSwxNiwxLDEzLDEsMTIyLDMwLAorICAgIDk1LDgzLDExMiwxMDEsOTksNzcsMTAxLDExNiwxMDQsMTExLDEwMCwxMTUsNDYsMTA1LDExMCwxMDUsCisgICAgMTE2LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDk3LDExNiwxMTYsMTE0LDExNSw5OSwxLAorICAgIDAsMCwwLDAsMCwwLDAsMywwLDAsMCwzLDAsMCwwLDY3LAorICAgIDAsMCwwLDExNSwxMDEsMCwwLDAsMTI0LDAsMCwxMDYsMCwwLDEyNSwxLAorICAgIDAsMTE2LDEsMCwxMjQsMSwwLDEwNiwyLDAsMTAwLDEsMCwxMzEsMiwwLAorICAgIDExNCw0OCwwLDEyNCwxLDAsMTA2LDIsMCwxMDYsMywwLDEyNCwxLDAsMTMxLAorICAgIDEsMCwxMjUsMiwwLDExMCw2LDAsMTAwLDIsMCwxMjUsMiwwLDEyNCwyLAorICAgIDAsMTAwLDIsMCwxMDcsOCwwLDExNCw4NCwwLDExNiw0LDAsMTI0LDEsMCwKKyAgICAxMDYsNSwwLDEzMSwxLDAsMTI1LDIsMCwxMTAsMCwwLDEyNCwwLDAsMTA2LAorICAgIDYsMCwxMjQsMiwwLDEzMSwxLDAsMSwxMjQsMiwwLDgzLDQxLDMsMTIyLAorICAgIDE1Myw4MiwxMDEsMTE2LDExNywxMTQsMTEwLDMyLDk3LDMyLDExMCwxMDEsMTE5LDMyLDEwOSwxMTEsCisgICAgMTAwLDExNywxMDgsMTAxLDMyLDExNiwxMTEsMzIsOTgsMTAxLDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwKKyAgICAxMDAsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsODQsMTA0LDEwMSwzMiwKKyAgICAxMDUsMTA5LDExMiwxMTEsMTE0LDExNiw0NSwxMTQsMTAxLDEwOCw5NywxMTYsMTAxLDEwMCwzMiwxMDksCisgICAgMTExLDEwMCwxMTcsMTA4LDEwMSwzMiw5NywxMTYsMTE2LDExNCwxMDUsOTgsMTE3LDExNiwxMDEsMTE1LAorICAgIDMyLDk3LDExNCwxMDEsMzIsOTcsMTA4LDExNSwxMTEsMzIsMTE1LDEwMSwxMTYsMzIsMTE5LDEwNSwKKyAgICAxMTYsMTA0LDMyLDExNiwxMDQsMTAxLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDk3LAorICAgIDExMiwxMTIsMTE0LDExMSwxMTIsMTE0LDEwNSw5NywxMTYsMTAxLDMyLDExOCw5NywxMDgsMTE3LDEwMSwKKyAgICAxMTUsMzIsMTAyLDExNCwxMTEsMTA5LDMyLDExNiwxMDQsMTAxLDMyLDExNSwxMTIsMTAxLDk5LDQ2LAorICAgIDEwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDIxOCwxMyw5OSwxMTQsMTAxLDk3LAorICAgIDExNiwxMDEsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNzgsNDEsNywxMTQsMTc4LDAsMCwKKyAgICAwLDExNCw2MCwwLDAsMCwxMTQsMTcwLDAsMCwwLDExNCwwLDEsMCwwLAorICAgIDExNCw2OCwwLDAsMCwxMTQsNjcsMCwwLDAsMTE0LDI1NSwwLDAsMCw0MSwKKyAgICAzLDExNCw3MSwwLDAsMCwxMTQsMTc4LDAsMCwwLDExNCwxODAsMCwwLDAsCisgICAgMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LAorICAgIDYsOTksMTE0LDEwMSw5NywxMTYsMTAxLDc1LDQsMCwwLDExNSwxNiwwLDAsMCwKKyAgICAwLDcsOSwyLDE4LDMsMjEsMiw2LDEsMTIsNCwxOCwxLDEzLDEsCisgICAgMTIyLDE5LDk1LDgzLDExMiwxMDEsOTksNzcsMTAxLDExNiwxMDQsMTExLDEwMCwxMTUsNDYsOTksCisgICAgMTE0LDEwMSw5NywxMTYsMTAxLDk5LDIsMCwwLDAsMCwwLDAsMCwyLDAsCisgICAgMCwwLDIsMCwwLDAsNjcsMCwwLDAsMTE1LDIzLDAsMCwwLDEyNCwKKyAgICAwLDAsMTA2LDAsMCwxMDYsMSwwLDEwNiwyLDAsMTI0LDEsMCwxMzEsMSwKKyAgICAwLDEsMTAwLDEsMCw4Myw0MSwyLDEyMiwxODksNjgsMTExLDMyLDEwMSwxMTgsMTAxLAorICAgIDExNCwxMjEsMTE2LDEwNCwxMDUsMTEwLDEwMywzMiwxMTAsMTAxLDk5LDEwMSwxMTUsMTE1LDk3LDExNCwKKyAgICAxMjEsMzIsMTE2LDExMSwzMiwxMDEsMTIwLDEwMSw5OSwxMTcsMTE2LDEwMSwzMiwxMTYsMTA0LDEwMSwKKyAgICAzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwKKyAgICAzMiwzMiw4NCwxMDQsMTAxLDMyLDExMCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDMyLAorICAgIDExMSwxMDIsMzIsOTYsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTYsMzIsMTA1LDExNSwzMiwxMTcsCisgICAgMTE1LDEwMSwxMDAsMzIsOTcsMTE1LDMyLDExNiwxMDQsMTAxLDMyLDExNiw5NywxMTQsMTAzLDEwMSwKKyAgICAxMTYsMzIsMTExLDEwMiwzMiwxMDEsMTIwLDEwMSw5OSwxMTcsMTE2LDEwNSwxMTEsMTEwLDQ2LDEwLAorICAgIDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDg0LDEwNCwxMDUsMTE1LDMyLDEwOSwxMDEsMTE2LAorICAgIDEwNCwxMTEsMTAwLDMyLDExNywxMTUsMTAxLDExNSwzMiwxMTYsMTA0LDEwMSwzMiwxMDgsMTExLDk3LAorICAgIDEwMCwxMDEsMTE0LDM5LDExNSwzMiw5NiwxMDEsMTIwLDEwMSw5OSw5NSwxMDksMTExLDEwMCwxMTcsCisgICAgMTA4LDEwMSw0MCw0MSw5NiwzMiwxMDksMTAxLDExNiwxMDQsMTExLDEwMCw0NiwxMCwxMCwzMiwKKyAgICAzMiwzMiwzMiwzMiwzMiwzMiwzMiw3OCw0MSwzLDExNCwxNzgsMCwwLDAsMTE0LAorICAgIDE3MCwwLDAsMCwyMTgsMTEsMTAxLDEyMCwxMDEsOTksOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwKKyAgICAxMDEsNDEsMiwxMTQsNzEsMCwwLDAsMTE0LDE4MCwwLDAsMCwxMTQsNCwwLAorICAgIDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsNSw5NSwxMDEsCisgICAgMTIwLDEwMSw5OSw5OCw0LDAsMCwxMTUsMiwwLDAsMCwwLDcsMTIyLDE4LAorICAgIDk1LDgzLDExMiwxMDEsOTksNzcsMTAxLDExNiwxMDQsMTExLDEwMCwxMTUsNDYsOTUsMTAxLDEyMCwKKyAgICAxMDEsOTksOTksMiwwLDAsMCwwLDAsMCwwLDQsMCwwLDAsMTEsCisgICAgMCwwLDAsNjcsMCwwLDAsMTE1LDE3LDEsMCwwLDEyNCwwLDAsMTA2LAorICAgIDAsMCwxMDYsMSwwLDEyNSwyLDAsMTE2LDIsMCwxMDYsMywwLDEzMSwwLAorICAgIDAsMSwxMTYsNCwwLDEyNCwyLDAsMTMxLDEsMCwxNDMsMjI2LDAsMSwxMTYsCisgICAgNSwwLDEwNiw2LDAsMTA2LDcsMCwxMjQsMiwwLDEzMSwxLDAsMTI0LDEsCisgICAgMCwxMDcsOSwwLDExNCw5NSwwLDEwMCwxLDAsMTA2LDgsMCwxMjQsMiwwLAorICAgIDEzMSwxLDAsMTI1LDMsMCwxMTYsOSwwLDEyNCwzLDAsMTAwLDIsMCwxMjQsCisgICAgMiwwLDEzMSwxLDEsMTMwLDEsMCwxMTAsMCwwLDEyNCwwLDAsMTA2LDAsCisgICAgMCwxMDYsMTAsMCwxMDAsMywwLDEwNyw4LDAsMTE0LDE4MSwwLDEyNCwwLDAsCisgICAgMTA2LDAsMCwxMDYsMTEsMCwxMDAsMywwLDEwNyw4LDAsMTE0LDE1OCwwLDExNiwKKyAgICA5LDAsMTAwLDQsMCwxMDAsMiwwLDEyNCwwLDAsMTA2LDAsMCwxMDYsMSwKKyAgICAwLDEzMSwxLDEsMTMwLDEsMCwxMTAsMCwwLDEyNCwwLDAsMTA2LDEyLDAsCisgICAgMTI0LDEsMCwxMDAsNSwwLDEwMCw2LDAsMTMxLDEsMSwxLDEyNCwxLDAsCisgICAgODMsMTI0LDAsMCwxMDYsMTIsMCwxMjQsMSwwLDEwMCw1LDAsMTAwLDYsMCwKKyAgICAxMzEsMSwxLDEsMTE2LDEzLDAsMTI0LDAsMCwxMDYsMCwwLDEwNiwxMCwwLAorICAgIDEwMCw3LDAsMTMxLDIsMCwxMTUsMjQzLDAsMTI0LDAsMCwxMDYsMCwwLDEwNiwKKyAgICAxMCwwLDEwNiwxNCwwLDEyNCwyLDAsMTMxLDEsMCwxLDExMCwxMywwLDEyNCwKKyAgICAwLDAsMTA2LDE1LDAsMTI0LDEsMCwxMzEsMSwwLDEsODcsMTAwLDMsMCwKKyAgICA4MSw4OCwxMTYsNSwwLDEwNiw2LDAsMTI0LDIsMCwyNSw4Myw0MSw4LDEyMiwKKyAgICA1MSw2OSwxMjAsMTAxLDk5LDExNywxMTYsMTAxLDMyLDExNiwxMDQsMTAxLDMyLDExNSwxMTIsMTAxLAorICAgIDk5LDMyLDEwNSwxMTAsMzIsOTcsMTEwLDMyLDEwMSwxMjAsMTA1LDExNSwxMTYsMTA1LDExMCwxMDMsCisgICAgMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzksMTE1LDMyLDExMCw5NywxMDksMTAxLDExNSwxMTIsCisgICAgOTcsOTksMTAxLDQ2LDEyMiwzMCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMjMsMzMsMTE0LAorICAgIDEyNSwzMiwxMTAsMTExLDExNiwzMiwxMDUsMTEwLDMyLDExNSwxMjEsMTE1LDQ2LDEwOSwxMTEsMTAwLAorICAgIDExNywxMDgsMTAxLDExNSwxMTQsNjcsMCwwLDAsNzgsMTIyLDE0LDEwOSwxMDUsMTE1LDExNSwKKyAgICAxMDUsMTEwLDEwMywzMiwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDExNCwyNDksMCwwLDAsODQsCisgICAgMTE0LDIsMSwwLDAsNDEsMTYsMTE0LDE3OCwwLDAsMCwxMTQsNjcsMCwwLAorICAgIDAsMTE0LDEwNiwwLDAsMCwyMTgsMTIsOTcsOTksMTEzLDExNywxMDUsMTE0LDEwMSw5NSwKKyAgICAxMDgsMTExLDk5LDEwNywxMTQsMTAzLDAsMCwwLDExNCw3LDAsMCwwLDExNCw3MywKKyAgICAwLDAsMCwxMTQsOTMsMCwwLDAsMTE0LDQ3LDAsMCwwLDExNCwxNTQsMCwKKyAgICAwLDAsMTE0LDE3MCwwLDAsMCwxMTQsMjIxLDAsMCwwLDExNCwyNTUsMCwwLAorICAgIDAsMTE0LDYwLDAsMCwwLDIxOCwxMSwxMDgsMTExLDk3LDEwMCw5NSwxMDksMTExLDEwMCwKKyAgICAxMTcsMTA4LDEwMSwxMTQsMywxLDAsMCw0MSw0LDExNCw3MSwwLDAsMCwxMTQsCisgICAgMTgwLDAsMCwwLDExNCw2NywwLDAsMCwxMTQsMTcyLDAsMCwwLDExNCw0LAorICAgIDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwxNzYsMCwKKyAgICAwLDAsMTA4LDQsMCwwLDExNSwzMiwwLDAsMCwwLDIsMTIsMSwxMCwKKyAgICAxLDEzLDEsMjQsMSwxNSwxLDIxLDEsMTgsMSwxOCwxLDI3LDIsMTksCisgICAgMSw0LDEsMTksMSwyMSw0LDIyLDIsMTksMSwxMjIsMTcsOTUsODMsMTEyLAorICAgIDEwMSw5OSw3NywxMDEsMTE2LDEwNCwxMTEsMTAwLDExNSw0NiwxMDEsMTIwLDEwMSw5OSw5OSwxLAorICAgIDAsMCwwLDAsMCwwLDAsMywwLDAsMCwyNywwLDAsMCw2NywKKyAgICAwLDAsMCwxMTUsMjQsMSwwLDAsMTI0LDAsMCwxMDYsMCwwLDEyNSwxLAorICAgIDAsMTI0LDEsMCwxMDYsMSwwLDEwNiwyLDAsMTI0LDEsMCwxMDYsMywwLAorICAgIDEzMSwxLDAsMSwxMTYsNCwwLDEwNiw1LDAsMTI0LDEsMCwxMDYsMywwLAorICAgIDI1LDEyNSwyLDAsMTE2LDYsMCwxMjQsMiwwLDEwMCwxLDAsMTAwLDAsMCwKKyAgICAxMzEsMywwLDEwMCwwLDAsMTA3LDgsMCwxMTQsMTA4LDAsMTIxLDE2LDAsMTI0LAorICAgIDEsMCwxMDYsMSwwLDEyNCwyLDAsOTUsNywwLDg3LDExMywxMDgsMCw0LAorICAgIDExNiw4LDAsMTA3LDEwLDAsMTE0LDEwNCwwLDEsMSwxLDg5LDExMywxMDgsMCwKKyAgICA4OCwxMTAsMCwwLDExNiw2LDAsMTI0LDIsMCwxMDAsMiwwLDEwMCwwLDAsCisgICAgMTMxLDMsMCwxMDAsMCwwLDEwNyw4LDAsMTE0LDIxNSwwLDEyMSw1OSwwLDEyNCwKKyAgICAyLDAsMTA2LDksMCwxMjQsMiwwLDk1LDEwLDAsMTE2LDExLDAsMTI0LDIsCisgICAgMCwxMDAsMywwLDEzMSwyLDAsMTE1LDE5MCwwLDEyNCwxLDAsMTA2LDMsMCwKKyAgICAxMDYsMTIsMCwxMDAsNCwwLDEzMSwxLDAsMTAwLDUsMCwyNSwxMjQsMiwwLAorICAgIDk1LDEwLDAsMTEwLDAsMCw4NywxMTMsMjE1LDAsNCwxMTYsOCwwLDEwNywxMCwKKyAgICAwLDExNCwyMTEsMCwxLDEsMSw4OSwxMTMsMjE1LDAsODgsMTEwLDAsMCwxMTYsCisgICAgNiwwLDEyNCwyLDAsMTAwLDYsMCwxMDAsMCwwLDEzMSwzLDAsMTAwLDAsCisgICAgMCwxMDcsOCwwLDExNCwyMCwxLDEyMSwxMywwLDEyNCwxLDAsMTI0LDIsMCwKKyAgICA5NSwxMywwLDg3LDExMywyMCwxLDQsMTE2LDgsMCwxMDcsMTAsMCwxMTQsMTYsCisgICAgMSwxLDEsMSw4OSwxMTMsMjAsMSw4OCwxMTAsMCwwLDEyNCwyLDAsODMsCisgICAgNDEsNyw3OCwxMTQsMjA1LDAsMCwwLDExNCwyNTEsMCwwLDAsMTE0LDI0NywwLAorICAgIDAsMCwxMTQsMTE2LDAsMCwwLDExNCw4NCwwLDAsMCwxMTQsMjA5LDAsMCwKKyAgICAwLDQxLDE0LDExNCwxNzgsMCwwLDAsMTE0LDE3MCwwLDAsMCwxMTQsNSwxLAorICAgIDAsMCwxMTQsNjcsMCwwLDAsMTE0LDcsMCwwLDAsMTE0LDczLDAsMCwKKyAgICAwLDExNCw2MiwwLDAsMCwxMTQsMjA1LDAsMCwwLDExNCwyMTAsMCwwLDAsCisgICAgMTE0LDU3LDAsMCwwLDExNCwyNTEsMCwwLDAsMTE0LDYwLDAsMCwwLDExNCwKKyAgICAzMiwwLDAsMCwxMTQsMjA5LDAsMCwwLDQxLDMsMTE0LDcxLDAsMCwwLAorICAgIDExNCwxNzgsMCwwLDAsMTE0LDE4MCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsCisgICAgNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMjUsOTUsMTA4LDExMSw5NywxMDAsCisgICAgOTUsOTgsOTcsOTksMTA3LDExOSw5NywxMTQsMTAwLDk1LDk5LDExMSwxMDksMTEyLDk3LDExNiwKKyAgICAxMDUsOTgsMTA4LDEwMSwxMzIsNCwwLDAsMTE1LDQyLDAsMCwwLDAsNCw5LAorICAgIDEsMTksMiwxNiwxLDI0LDEsMywxLDE2LDEsMTMsMSw4LDEsMjQsCisgICAgMSwzLDQsMTIsMSwxNSwxLDMyLDEsMTMsMSw4LDEsMjQsMSwzLAorICAgIDEsMTMsMSwxMywxLDgsMSwxMjIsMzgsOTUsODMsMTEyLDEwMSw5OSw3NywxMDEsCisgICAgMTE2LDEwNCwxMTEsMTAwLDExNSw0Niw5NSwxMDgsMTExLDk3LDEwMCw5NSw5OCw5Nyw5OSwxMDcsCisgICAgMTE5LDk3LDExNCwxMDAsOTUsOTksMTExLDEwOSwxMTIsOTcsMTE2LDEwNSw5OCwxMDgsMTAxLDk5LAorICAgIDEsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDExLDAsMCwwLAorICAgIDY3LDAsMCwwLDExNSwxNzksMCwwLDAsMTI0LDAsMCwxMDYsMCwwLDEwNiwKKyAgICAxLDAsMTAwLDAsMCwxMDcsOSwwLDExNCw1MiwwLDExNiwyLDAsMTI0LDAsCisgICAgMCwxMDYsMCwwLDEwNiwxLDAsMTAwLDEsMCwxMzEsMiwwLDExNSw1MiwwLAorICAgIDEyNCwwLDAsMTA2LDMsMCwxMzEsMCwwLDgzLDExMCwwLDAsMTI0LDAsMCwKKyAgICAxMDYsNCwwLDEzMSwwLDAsMTI1LDEsMCwxMTYsNSwwLDEyNCwxLDAsMTMxLAorICAgIDEsMCwxNDMsODQsMCwxLDEyNCwwLDAsMTA2LDAsMCwxMDYsMSwwLDEwMCwKKyAgICAwLDAsMTA3LDgsMCwxMTQsMTQzLDAsMTI0LDAsMCwxMDYsMCwwLDEwNiw2LAorICAgIDAsMTAwLDAsMCwxMDcsOCwwLDExNCwxNTYsMCwxMTYsNywwLDEwMCwyLDAsCisgICAgMTAwLDMsMCwxMjQsMCwwLDEwNiwwLDAsMTA2LDgsMCwxMzEsMSwxLDEzMCwKKyAgICAxLDAsMTEzLDE1NiwwLDExMCwxMywwLDEyNCwwLDAsMTA2LDksMCwxMjQsMSwKKyAgICAwLDEzMSwxLDAsMSw4NywxMDAsMCwwLDgxLDg4LDExNiwxMCwwLDEwNiwxMSwKKyAgICAwLDEyNCwwLDAsMTA2LDAsMCwxMDYsOCwwLDI1LDgzLDQxLDQsNzgsMTE0LAorICAgIDIsMSwwLDAsMTIyLDE0LDEwOSwxMDUsMTE1LDExNSwxMDUsMTEwLDEwMywzMiwxMDgsMTExLAorICAgIDk3LDEwMCwxMDEsMTE0LDExNCw2NywwLDAsMCw0MSwxMiwxMTQsMTc4LDAsMCwwLAorICAgIDExNCwxNzAsMCwwLDAsMTE0LDYwLDAsMCwwLDExNCw2LDEsMCwwLDExNCwKKyAgICAxLDEsMCwwLDExNCwyMTMsMCwwLDAsMTE0LDIyMSwwLDAsMCwxMTQsMTU0LAorICAgIDAsMCwwLDExNCw2NywwLDAsMCwxMTQsMywxLDAsMCwxMTQsNywwLAorICAgIDAsMCwxMTQsNzMsMCwwLDAsNDEsMiwxMTQsNzEsMCwwLDAsMTE0LDE4MCwKKyAgICAwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLAorICAgIDAsMCwyMTgsMTQsOTUsMTA4LDExMSw5NywxMDAsOTUsMTE3LDExMCwxMDgsMTExLDk5LDEwNywKKyAgICAxMDEsMTAwLDE2Miw0LDAsMCwxMTUsMjAsMCwwLDAsMCwyLDE4LDIsMjEsCisgICAgMSwxMywyLDEyLDEsMTMsMSwxOCwxLDE4LDEsMzAsMywxOSw1LDEyMiwKKyAgICAyNyw5NSw4MywxMTIsMTAxLDk5LDc3LDEwMSwxMTYsMTA0LDExMSwxMDAsMTE1LDQ2LDk1LDEwOCwKKyAgICAxMTEsOTcsMTAwLDk1LDExNywxMTAsMTA4LDExMSw5OSwxMDcsMTAxLDEwMCw5OSwxLDAsMCwKKyAgICAwLDAsMCwwLDAsMSwwLDAsMCw4LDAsMCwwLDY3LDAsMCwKKyAgICAwLDExNSw0OSwwLDAsMCwxMTYsMCwwLDEwNiwxLDAsMTMxLDAsMCwxLAorICAgIDExNiwyLDAsMTI0LDAsMCwxMDYsMywwLDEwNiw0LDAsMTMxLDEsMCwxNDMsCisgICAgMTUsMCwxLDEyNCwwLDAsMTA2LDUsMCwxMzEsMCwwLDgzLDg3LDEwMCwxLAorICAgIDAsODEsODgsMTAwLDEsMCw4Myw0MSwyLDEyMiwyMDcsODIsMTAxLDExNiwxMTcsMTE0LAorICAgIDExMCwzMiw5NywzMiwxMTAsMTAxLDExOSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMTEsCisgICAgOTgsMTA2LDEwMSw5OSwxMTYsNDQsMzIsMTA4LDExMSw5NywxMDAsMTAxLDEwMCwzMiw5OCwxMjEsCisgICAgMzIsMTE2LDEwNCwxMDEsMzIsMTE1LDExMiwxMDEsOTksMzksMTE1LDMyLDEwOCwxMTEsOTcsMTAwLAorICAgIDEwMSwxMTQsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsODQsMTA0LDEwMSwKKyAgICAzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMDUsMTE1LDMyLDExMCwxMTEsMTE2LDMyLDk3LAorICAgIDEwMCwxMDAsMTAxLDEwMCwzMiwxMTYsMTExLDMyLDEwNSwxMTYsMTE1LDMyLDExMiw5NywxMTQsMTAxLAorICAgIDExMCwxMTYsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsNzMsMTAyLDMyLAorICAgIDk3LDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEwNSwxMTUsMzIsOTcsMTA4LDExNCwxMDEsCisgICAgOTcsMTAwLDEyMSwzMiwxMDUsMTEwLDMyLDExNSwxMjEsMTE1LDQ2LDEwOSwxMTEsMTAwLDExNywxMDgsCisgICAgMTAxLDExNSw0NCwzMiwxMTYsMTA0LDk3LDExNiwzMiwxMDEsMTIwLDEwNSwxMTUsMTE2LDEwNSwxMTAsCisgICAgMTAzLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEwMywxMDEsMTE2LDExNSwxMCwzMiwzMiwKKyAgICAzMiwzMiwzMiwzMiwzMiwzMiw5OSwxMDgsMTExLDk4LDk4LDEwMSwxMTQsMTAxLDEwMCw0NiwKKyAgICAxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw3OCw0MSw2LDExNCwxMDYsMCwKKyAgICAwLDAsMTE0LDQsMSwwLDAsMTE0LDEwMywwLDAsMCwxMTQsMTc4LDAsMCwKKyAgICAwLDExNCw2NywwLDAsMCwxMTQsNywxLDAsMCw0MSwxLDExNCw3MSwwLAorICAgIDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsCisgICAgMCwxMTQsMTc3LDAsMCwwLDE4NSw0LDAsMCwxMTUsNiwwLDAsMCwwLAorICAgIDksMTAsMSwxOSwxLDEyMiwxNyw5NSw4MywxMTIsMTAxLDk5LDc3LDEwMSwxMTYsMTA0LAorICAgIDExMSwxMDAsMTE1LDQ2LDEwOCwxMTEsOTcsMTAwLDc4LDQxLDEzLDExNCw1NywwLDAsMCwKKyAgICAxMTQsNTYsMCwwLDAsMTE0LDU4LDAsMCwwLDExNCw1OSwwLDAsMCwxMTQsCisgICAgNzIsMCwwLDAsMTE0LDIwNiwwLDAsMCwxMTQsMjU1LDAsMCwwLDExNCwxLAorICAgIDEsMCwwLDExNCwzLDEsMCwwLDExNCwxNzYsMCwwLDAsMTE0LDYsMSwKKyAgICAwLDAsMTE0LDcsMSwwLDAsMTE0LDE3NywwLDAsMCwxMTQsNCwwLDAsCisgICAgMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwKKyAgICAxMTQsMTc1LDAsMCwwLDIyNSwzLDAsMCwxMTUsMjAsMCwwLDAsMTIsMywKKyAgICA2LDQsMTIsMywxMiwxNiwyNCw4MCwxMiwyMywxMiwxMCwxMiwyNCwxMiwzMCwKKyAgICAxMiwyMywxMTQsMTc1LDAsMCwwLDk5LDQsMCwwLDAsMCwwLDAsMCwKKyAgICA2LDAsMCwwLDExLDAsMCwwLDY3LDAsMCwwLDExNSwyMDEsMCwwLAorICAgIDAsMTI0LDAsMCwxMDYsMCwwLDEwMCwxLDAsMTMxLDEsMCwxMjUsNCwwLAorICAgIDEyNCwwLDAsMTA2LDAsMCwxMDAsMiwwLDEzMSwxLDAsMTI1LDUsMCwxMjQsCisgICAgNCwwLDExNSwxMDIsMCwxMjQsNSwwLDExNCw1NCwwLDEyNCw1LDAsMTA2LDEsCisgICAgMCwxMjUsNCwwLDExMywxMDIsMCwxMjQsMiwwLDEyNCwzLDAsMTA3LDIsMCwKKyAgICAxMTQsODQsMCwxMTYsMiwwLDEyNCwxLDAsMTI0LDIsMCwxMzEsMiwwLDEyNSwKKyAgICA0LDAsMTEzLDEwMiwwLDExNiwzLDAsMTI0LDEsMCwxMjQsMiwwLDEzMSwyLAorICAgIDAsMTI1LDQsMCwxMTAsMCwwLDEyNCw1LDAsMTE1LDEzMiwwLDExNiw0LDAsCisgICAgMTI0LDEsMCwxMjQsMiwwLDEwMCwzLDAsMTI0LDQsMCwxMzEsMiwxLDEyNSwKKyAgICA1LDAsMTEwLDAsMCwxMjEsNDQsMCwxMjQsNSwwLDEyNCwwLDAsMTAwLDIsCisgICAgMCw2MCwxMjQsNCwwLDEyNCwwLDAsMTAwLDEsMCw2MCwxMjQsMiwwLDEyNCwKKyAgICAwLDAsMTAwLDQsMCw2MCwxMjQsMywwLDEyNCwwLDAsMTAwLDUsMCw2MCwKKyAgICA4NywxMTAsMTgsMCw0LDExNiw1LDAsMTA3LDEwLDAsMTE0LDE5NiwwLDEsMSwKKyAgICAxLDg5LDExMCwxLDAsODgsMTAwLDAsMCw4Myw0MSw2LDc4LDExNCwyMDUsMCwKKyAgICAwLDAsMTE0LDIwOSwwLDAsMCwxMTQsMTcwLDAsMCwwLDExNCwyMTEsMCwwLAorICAgIDAsMTE0LDI0NSwwLDAsMCw0MSw2LDExNCw5MywwLDAsMCwxMTQsMTcwLDAsCisgICAgMCwwLDIxOCwyMCw4MywxMTEsMTE3LDExNCw5OSwxMDEsMTA4LDEwMSwxMTUsMTE1LDcwLDEwNSwKKyAgICAxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCwyMTgsMTYsODMsMTExLDExNywxMTQsOTksMTAxLAorICAgIDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCwxMTQsMjQwLDAsMCwwLDExNCwKKyAgICAyMDgsMCwwLDAsNDEsNiw5MCwyLDExMCwxMTUsMTE0LDY3LDAsMCwwLDkwLAorICAgIDgsMTEyLDk3LDExNiwxMDQsMTEwLDk3LDEwOSwxMDEsOTAsOSw5OSwxMTIsOTcsMTE2LDEwNCwKKyAgICAxMTAsOTcsMTA5LDEwMSwxMTQsMTcwLDAsMCwwLDExNCwxNzgsMCwwLDAsMTE0LDQsCisgICAgMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDE0LDk1LAorICAgIDEwMiwxMDUsMTIwLDk1LDExNywxMTIsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTk5LDQsMCwKKyAgICAwLDExNSwzNCwwLDAsMCwwLDIsMTUsMSwxNSwxLDYsMSw2LDEsCisgICAgMTIsMSwxMiwxLDE4LDIsMTgsMSw2LDEsMjQsMSwzLDEsMTAsMSwKKyAgICAxMCwxLDEwLDEsMTQsMSwxMywyLDExNCwxMCwxLDAsMCw5OSwwLDAsCisgICAgMCwwLDAsMCwwLDAsMCwwLDAsMCw1LDAsMCwwLDY0LDAsCisgICAgMCwwLDExNSwxODEsMCwwLDAsMTAxLDAsMCw5MCwxLDAsMTAwLDAsMCwKKyAgICA5MCwyLDAsMTAwLDEsMCw5MCwzLDAsMTAxLDQsMCwxMDAsMiwwLDEwMCwKKyAgICAzLDAsMTMyLDAsMCwxMzEsMSwwLDkwLDUsMCwxMDEsNiwwLDEwMCw0LAorICAgIDAsMTAwLDQsMCwxMDAsNSwwLDEwMCw2LDAsMTMyLDIsMCwxMzEsMSwwLAorICAgIDkwLDcsMCwxMDEsNiwwLDEwMCw0LDAsMTAwLDcsMCwxMDAsOCwwLDEzMiwKKyAgICAxLDAsMTMxLDEsMCw5MCw4LDAsMTAxLDYsMCwxMDEsOSwwLDEwMCw5LAorICAgIDAsMTAwLDEwLDAsMTMyLDAsMCwxMzEsMSwwLDEzMSwxLDAsOTAsMTAsMCwKKyAgICAxMDEsNiwwLDEwMSw5LDAsMTAwLDExLDAsMTAwLDEyLDAsMTMyLDAsMCwxMzEsCisgICAgMSwwLDEzMSwxLDAsOTAsMTEsMCwxMDEsNiwwLDEwMSw5LDAsMTAwLDEzLAorICAgIDAsMTAwLDE0LDAsMTMyLDAsMCwxMzEsMSwwLDEzMSwxLDAsOTAsMTIsMCwKKyAgICAxMDEsNiwwLDEwMSw5LDAsMTAwLDE1LDAsMTAwLDE2LDAsMTMyLDAsMCwxMzEsCisgICAgMSwwLDEzMSwxLDAsOTAsMTMsMCwxMDAsNCwwLDgzLDQxLDE3LDIxOCwxNSwKKyAgICA2NiwxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsMTIyLAorICAgIDE0NCw3NywxMDEsMTE2LDk3LDMyLDExMiw5NywxMTYsMTA0LDMyLDEwNSwxMDksMTEyLDExMSwxMTQsCisgICAgMTE2LDMyLDEwMiwxMTEsMTE0LDMyLDk4LDExNywxMDUsMTA4LDExNiw0NSwxMDUsMTEwLDMyLDEwOSwKKyAgICAxMTEsMTAwLDExNywxMDgsMTAxLDExNSw0NiwxMCwxMCwzMiwzMiwzMiwzMiw2NSwxMDgsMTA4LAorICAgIDMyLDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDExNSwzMiw5NywxMTQsMTAxLDMyLDEwMSwxMDUsMTE2LAorICAgIDEwNCwxMDEsMTE0LDMyLDk5LDEwOCw5NywxMTUsMTE1LDMyLDExMSwxMTQsMzIsMTE1LDExNiw5NywKKyAgICAxMTYsMTA1LDk5LDMyLDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDExNSwzMiwxMTYsMTExLDMyLDk3LAorICAgIDExOCwxMTEsMTA1LDEwMCwzMiwxMTYsMTA0LDEwMSwzMiwxMTAsMTAxLDEwMSwxMDAsMzIsMTE2LDExMSwKKyAgICAxMCwzMiwzMiwzMiwzMiwxMDUsMTEwLDExNSwxMTYsOTcsMTEwLDExNiwxMDUsOTcsMTE2LDEwMSwKKyAgICAzMiwxMTYsMTA0LDEwMSwzMiw5OSwxMDgsOTcsMTE1LDExNSw0NiwxMCwxMCwzMiwzMiwzMiwKKyAgICAzMiw5OSwxLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwyLDAsCisgICAgMCwwLDY3LDAsMCwwLDExNSwxNiwwLDAsMCwxMDAsMSwwLDEwNiwwLAorICAgIDAsMTI0LDAsMCwxMDYsMSwwLDEzMSwxLDAsODMsNDEsMiwxMjIsMTE1LDgyLAorICAgIDEwMSwxMTYsMTE3LDExNCwxMTAsMzIsMTE0LDEwMSwxMTIsMTE0LDMyLDEwMiwxMTEsMTE0LDMyLDExNiwKKyAgICAxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLAorICAgIDMyLDMyLDMyLDMyLDg0LDEwNCwxMDEsMzIsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMzIsMTA1LAorICAgIDExNSwzMiwxMDAsMTAxLDExMiwxMTQsMTAxLDk5LDk3LDExNiwxMDEsMTAwLDQ2LDMyLDMyLDg0LAorICAgIDEwNCwxMDEsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMzIsMTA5LDk3LDk5LDEwNCwxMDUsMTEwLAorICAgIDEwMSwxMTQsMTIxLDMyLDEwMCwxMTEsMTAxLDExNSwzMiwxMTYsMTA0LDEwMSwzMiwxMDYsMTExLDk4LAorICAgIDMyLDEwNSwxMTYsMTE1LDEwMSwxMDgsMTAyLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLAorICAgIDMyLDMyLDEyMiwyNCw2MCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMjMsMzMsMTE0LDEyNSwKKyAgICAzMiw0MCw5OCwxMTcsMTA1LDEwOCwxMTYsNDUsMTA1LDExMCw0MSw2Miw0MSwyLDExNCw0NywKKyAgICAwLDAsMCwxMTQsNTcsMCwwLDAsNDEsMSwxMTQsMTgwLDAsMCwwLDExNCwKKyAgICA0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwyMDYsCisgICAgMCwwLDAsMjMzLDQsMCwwLDExNSwyLDAsMCwwLDAsNywxMjIsMjcsCiAgICAgNjYsMTE3LDEwNSwxMDgsMTE2LDEwNSwxMTAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDQ2LAotICAgIDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDExNCwxMDEsMTEyLDExNCw5OSwzLDAsMCwwLAotICAgIDAsMCwwLDAsMywwLDAsMCwyLDAsMCwwLDY3LDAsMCwwLAotICAgIDExNSwzOSwwLDAsMCwxMjQsMiwwLDEwMCwxLDAsMTA3LDksMCwxMTQsMTYsCi0gICAgMCwxMDAsMSwwLDgzLDExNiwxLDAsMTA2LDIsMCwxMjQsMSwwLDEzMSwxLAotICAgIDAsMTE0LDM1LDAsMTI0LDAsMCw4MywxMDAsMSwwLDgzLDQwLDIsMCwwLAotICAgIDAsMTE3LDExMywwLDAsMCw3MCwxMDUsMTEwLDEwMCwzMiwxMTYsMTA0LDEwMSwzMiw5OCwKLSAgICAxMTcsMTA1LDEwOCwxMTYsNDUsMTA1LDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0NiwxMCwKLSAgICAxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw3MywxMDIsMzIsMzksMTEyLDk3LDExNiwKLSAgICAxMDQsMzksMzIsMTA1LDExNSwzMiwxMDEsMTE4LDEwMSwxMTQsMzIsMTE1LDExMiwxMDEsOTksMTA1LAotICAgIDEwMiwxMDUsMTAxLDEwMCwzMiwxMTYsMTA0LDEwMSwxMTAsMzIsMTE2LDEwNCwxMDEsMzIsMTE1LDEwMSwKLSAgICA5NywxMTQsOTksMTA0LDMyLDEwNSwxMTUsMzIsOTksMTExLDExMCwxMTUsMTA1LDEwMCwxMDEsMTE0LAotICAgIDEwMSwxMDAsMzIsOTcsMzIsMTAyLDk3LDEwNSwxMDgsMTE3LDExNCwxMDEsNDYsMTAsMTAsMzIsCi0gICAgMzIsMzIsMzIsMzIsMzIsMzIsMzIsNzgsNDAsMywwLDAsMCwxMTcsNCwwLAotICAgIDAsMCw3OCwxMTEsMTEwLDEwMSwxMTcsNCwwLDAsMCw5NSwxMDUsMTA5LDExMiwxMTcsCi0gICAgMTAsMCwwLDAsMTA1LDExNSw5NSw5OCwxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCw0MCwzLAotICAgIDAsMCwwLDExNywzLDAsMCwwLDk5LDEwOCwxMTUsMTE3LDgsMCwwLDAsCi0gICAgMTAyLDExNywxMDgsMTA4LDExMCw5NywxMDksMTAxLDExNyw0LDAsMCwwLDExMiw5NywxMTYsCi0gICAgMTA0LDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsCi0gICAgNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSwKLSAgICA5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDExLDAsCi0gICAgMCwwLDEwMiwxMDUsMTEwLDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMjksMiwwLAotICAgIDAsMTE1LDYsMCwwLDAsMCw3LDEyLDEsNCwxLDExNywyNywwLDAsCi0gICAgMCw2NiwxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsCi0gICAgNDYsMTAyLDEwNSwxMTAsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk5LDIsMCwwLAotICAgIDAsMCwwLDAsMCwzLDAsMCwwLDksMCwwLDAsNjcsMCwwLAotICAgIDAsMTE1LDg4LDAsMCwwLDEyNCwxLDAsMTE2LDAsMCwxMDYsMSwwLDEwNywKLSAgICA2LDAsMTI1LDIsMCwxMjEsMjAsMCwxMTYsMiwwLDExNiwzLDAsMTA2LDQsCi0gICAgMCwxMjQsMSwwLDEzMSwyLDAsODMsODcsMTEwLDQ2LDAsMSwxLDEsMTI0LAotICAgIDIsMCwxMiwxMTQsNzYsMCwxMjQsMSwwLDExNiwwLDAsMTA2LDEsMCwxMDcsCi0gICAgNiwwLDExNCw3NiwwLDExNiwwLDAsMTA2LDEsMCwxMjQsMSwwLDYxLDExMCwKLSAgICAwLDAsMTMwLDAsMCw4OSwxMTAsMSwwLDg4LDEwMCwxLDAsODMsNDAsMiwKLSAgICAwLDAsMCwxMTcsMjMsMCwwLDAsNzYsMTExLDk3LDEwMCwzMiw5NywzMiw5OCwKLSAgICAxMTcsMTA1LDEwOCwxMTYsNDUsMTA1LDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0Niw3OCwKLSAgICA0MCw1LDAsMCwwLDExNywzLDAsMCwwLDExNSwxMjEsMTE1LDExNyw3LDAsCi0gICAgMCwwLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNSwxMTcsMjUsMCwwLDAsOTUsOTksCi0gICAgOTcsMTA4LDEwOCw5NSwxMTksMTA1LDExNiwxMDQsOTUsMTAyLDExNCw5NywxMDksMTAxLDExNSw5NSwKLSAgICAxMTQsMTAxLDEwOSwxMTEsMTE4LDEwMSwxMDAsMTE3LDQsMCwwLDAsOTUsMTA1LDEwOSwxMTIsCi0gICAgMTE3LDEyLDAsMCwwLDEwNSwxMTAsMTA1LDExNiw5NSw5OCwxMTcsMTA1LDEwOCwxMTYsMTA1LAotICAgIDExMCw0MCwzLDAsMCwwLDExNywzLDAsMCwwLDk5LDEwOCwxMTUsMTE3LDgsCi0gICAgMCwwLDAsMTAyLDExNywxMDgsMTA4LDExMCw5NywxMDksMTAxLDExNyw5LDAsMCwwLAotICAgIDEwNSwxMTUsOTUsMTE0LDEwMSwxMDgsMTExLDk3LDEwMCw0MCwwLDAsMCwwLDQwLDAsCi0gICAgMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLAotICAgIDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LAotICAgIDExNiwxMTQsOTcsMTEyLDYyLDExNywxMSwwLDAsMCwxMDgsMTExLDk3LDEwMCw5NSwxMDksCi0gICAgMTExLDEwMCwxMTcsMTA4LDEwMSwxNDAsMiwwLDAsMTE1LDE0LDAsMCwwLDAsNiwKLSAgICAxNSwxLDMsMSwyMCwxLDMsMSwyMiwxLDEzLDEsMTE3LDI3LDAsMCwKLSAgICAwLDY2LDExNywxMDUsMTA4LDExNiwxMDUsMTEwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCwKLSAgICA0NiwxMDgsMTExLDk3LDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5OSwyLDAsMCwKLSAgICAwLDAsMCwwLDAsMiwwLDAsMCwxLDAsMCwwLDY3LDAsMCwKLSAgICAwLDExNSw0LDAsMCwwLDEwMCwxLDAsODMsNDAsMiwwLDAsMCwxMTcsCi0gICAgNTcsMCwwLDAsODIsMTAxLDExNiwxMTcsMTE0LDExMCwzMiw3OCwxMTEsMTEwLDEwMSwzMiwKLSAgICA5NywxMTUsMzIsOTgsMTE3LDEwNSwxMDgsMTE2LDQ1LDEwNSwxMTAsMzIsMTA5LDExMSwxMDAsMTE3LAotICAgIDEwOCwxMDEsMTE1LDMyLDEwMCwxMTEsMzIsMTEwLDExMSwxMTYsMzIsMTA0LDk3LDExOCwxMDEsMzIsCi0gICAgOTksMTExLDEwMCwxMDEsMzIsMTExLDk4LDEwNiwxMDEsOTksMTE2LDExNSw0Niw3OCw0MCwxLAotICAgIDAsMCwwLDExNyw0LDAsMCwwLDc4LDExMSwxMTAsMTAxLDQwLDIsMCwwLAotICAgIDAsMTE3LDMsMCwwLDAsOTksMTA4LDExNSwxMTcsOCwwLDAsMCwxMDIsMTE3LAotICAgIDEwOCwxMDgsMTEwLDk3LDEwOSwxMDEsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLAotICAgIDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwKLSAgICAxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LAotICAgIDExMiw2MiwxMTcsOCwwLDAsMCwxMDMsMTAxLDExNiw5NSw5OSwxMTEsMTAwLDEwMSwxNTQsCi0gICAgMiwwLDAsMTE1LDIsMCwwLDAsMCw0LDExNywyNCwwLDAsMCw2NiwKLSAgICAxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsNDYsMTAzLAotICAgIDEwMSwxMTYsOTUsOTksMTExLDEwMCwxMDEsOTksMiwwLDAsMCwwLDAsMCwwLAorICAgIDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDExNCwxMDEsMTEyLDExNCw3OCw5OSw0LDAsMCwKKyAgICAwLDAsMCwwLDAsNCwwLDAsMCw1LDAsMCwwLDY3LDAsMCwKKyAgICAwLDExNSw1OCwwLDAsMCwxMjQsMiwwLDEwMCwwLDAsMTA3LDksMCwxMTQsCisgICAgMTYsMCwxMDAsMCwwLDgzLDExNiwwLDAsMTA2LDEsMCwxMjQsMSwwLDEzMSwKKyAgICAxLDAsMTE0LDUwLDAsMTE2LDIsMCwxMjQsMSwwLDEyNCwwLDAsMTAwLDEsCisgICAgMCwxMDAsMiwwLDEzMSwyLDEsODMsMTAwLDAsMCw4MywxMDAsMCwwLDgzLAorICAgIDQxLDMsNzgsMTE0LDIxOCwwLDAsMCwxMjIsOCw5OCwxMTcsMTA1LDEwOCwxMTYsNDUsCisgICAgMTA1LDExMCw0MSwzLDExNCwxMDYsMCwwLDAsOTAsMTAsMTA1LDExNSw5NSw5OCwxMTcsCisgICAgMTA1LDEwOCwxMTYsMTA1LDExMCwxMTQsMTc0LDAsMCwwLDQxLDQsMjE4LDMsOTksMTA4LAorICAgIDExNSwxMTQsMTU5LDAsMCwwLDExNCwzNSwwLDAsMCwyMTgsNiwxMTYsOTcsMTE0LAorICAgIDEwMywxMDEsMTE2LDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsCisgICAgMCwwLDIxOCw5LDEwMiwxMDUsMTEwLDEwMCw5NSwxMTUsMTEyLDEwMSw5OSwyNDIsNCwwLAorICAgIDAsMTE1LDEwLDAsMCwwLDAsMiwxMiwxLDQsMSwxNSwxLDE5LDIsCisgICAgMTIyLDI1LDY2LDExNywxMDUsMTA4LDExNiwxMDUsMTEwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLAorICAgIDExNCw0NiwxMDIsMTA1LDExMCwxMDAsOTUsMTE1LDExMiwxMDEsOTksOTksMywwLDAsMCwKKyAgICAwLDAsMCwwLDQsMCwwLDAsMywwLDAsMCw2NywwLDAsMCwKKyAgICAxMTUsNDEsMCwwLDAsMTI0LDAsMCwxMDYsMCwwLDEyNCwxLDAsMTI0LDIsCisgICAgMCwxMzEsMiwwLDEyNSwzLDAsMTI0LDMsMCwxMDAsMSwwLDEwNyw5LDAsCisgICAgMTE0LDM3LDAsMTI0LDMsMCwxMDYsMSwwLDgzLDEwMCwxLDAsODMsNDEsMiwKKyAgICAxMjIsMTc1LDcwLDEwNSwxMTAsMTAwLDMyLDExNiwxMDQsMTAxLDMyLDk4LDExNywxMDUsMTA4LDExNiwKKyAgICA0NSwxMDUsMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ2LDEwLDEwLDMyLDMyLDMyLAorICAgIDMyLDMyLDMyLDMyLDMyLDczLDEwMiwzMiwzOSwxMTIsOTcsMTE2LDEwNCwzOSwzMiwxMDUsCisgICAgMTE1LDMyLDEwMSwxMTgsMTAxLDExNCwzMiwxMTUsMTEyLDEwMSw5OSwxMDUsMTAyLDEwNSwxMDEsMTAwLAorICAgIDMyLDExNiwxMDQsMTAxLDExMCwzMiwxMTYsMTA0LDEwMSwzMiwxMTUsMTAxLDk3LDExNCw5OSwxMDQsCisgICAgMzIsMTA1LDExNSwzMiw5OSwxMTEsMTEwLDExNSwxMDUsMTAwLDEwMSwxMTQsMTAxLDEwMCwzMiw5NywKKyAgICAzMiwxMDIsOTcsMTA1LDEwOCwxMTcsMTE0LDEwMSw0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwKKyAgICAzMiwzMiwzMiw4NCwxMDQsMTA1LDExNSwzMiwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwzMiwxMDUsCisgICAgMTE1LDMyLDEwMCwxMDEsMTEyLDExNCwxMDEsOTksOTcsMTE2LDEwMSwxMDAsNDYsMzIsMzIsODUsCisgICAgMTE1LDEwMSwzMiwxMDIsMTA1LDExMCwxMDAsOTUsMTE1LDExMiwxMDEsOTksNDAsNDEsMzIsMTA1LAorICAgIDExMCwxMTUsMTE2LDEwMSw5NywxMDAsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsCisgICAgMzIsNzgsNDEsMiwxMTQsMTQsMSwwLDAsMTE0LDE3MCwwLDAsMCw0MSw0LAorICAgIDExNCwxMiwxLDAsMCwxMTQsMTU5LDAsMCwwLDExNCwzNSwwLDAsMCwxMTQsCisgICAgMTc4LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LAorICAgIDAsMCwwLDIxOCwxMSwxMDIsMTA1LDExMCwxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsCisgICAgMjUxLDQsMCwwLDExNSw0LDAsMCwwLDAsOSwxOCwxLDEyMiwyNyw2NiwKKyAgICAxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsNDYsMTAyLAorICAgIDEwNSwxMTAsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk5LDIsMCwwLDAsMCwKKyAgICAwLDAsMCwzLDAsMCwwLDEwLDAsMCwwLDY3LDAsMCwwLDExNSwKKyAgICA1OSwwLDAsMCwxMTYsMCwwLDEyNCwxLDAsMTMxLDEsMCwxNDMsMjMsMCwKKyAgICAxLDExNiwxLDAsMTE2LDIsMCwxMDYsMywwLDEyNCwxLDAsMTMxLDIsMCwKKyAgICAxMjUsMiwwLDg3LDEwMCwxLDAsODEsODgsMTI0LDAsMCwxMjQsMiwwLDk1LAorICAgIDQsMCwxMDAsMiwwLDEyNCwyLDAsOTUsNSwwLDEyNCwyLDAsODMsNDEsCisgICAgMywxMjIsMjMsNzYsMTExLDk3LDEwMCwzMiw5NywzMiw5OCwxMTcsMTA1LDEwOCwxMTYsNDUsCisgICAgMTA1LDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0Niw3OCwxMTQsMzAsMCwwLDAsCisgICAgNDEsNiwxMTQsNjksMCwwLDAsMTE0LDExNCwwLDAsMCwxMTQsMTA2LDAsMCwKKyAgICAwLDkwLDEyLDEwNSwxMTAsMTA1LDExNiw5NSw5OCwxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCwxMTQsCisgICAgMjA1LDAsMCwwLDExNCwyNTEsMCwwLDAsNDEsMywxMTQsMTIsMSwwLDAsCisgICAgMTE0LDE1OSwwLDAsMCwxMTQsMTgwLDAsMCwwLDExNCw0LDAsMCwwLDExNCwKKyAgICA0LDAsMCwwLDExNCw1LDAsMCwwLDExNCw1LDEsMCwwLDcsNSwKKyAgICAwLDAsMTE1LDEwLDAsMCwwLDAsNiwxMywxLDI0LDEsOSwxLDksCisgICAgMSwxMjIsMjcsNjYsMTE3LDEwNSwxMDgsMTE2LDEwNSwxMTAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiwKKyAgICAxMDEsMTE0LDQ2LDEwOCwxMTEsOTcsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk5LDIsCisgICAgMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDEsMCwwLDAsNjcsCisgICAgMCwwLDAsMTE1LDQsMCwwLDAsMTAwLDEsMCw4Myw0MSwyLDEyMiw1NywKKyAgICA4MiwxMDEsMTE2LDExNywxMTQsMTEwLDMyLDc4LDExMSwxMTAsMTAxLDMyLDk3LDExNSwzMiw5OCwKKyAgICAxMTcsMTA1LDEwOCwxMTYsNDUsMTA1LDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsMzIsCisgICAgMTAwLDExMSwzMiwxMTAsMTExLDExNiwzMiwxMDQsOTcsMTE4LDEwMSwzMiw5OSwxMTEsMTAwLDEwMSwKKyAgICAzMiwxMTEsOTgsMTA2LDEwMSw5OSwxMTYsMTE1LDQ2LDc4LDExNCw0LDAsMCwwLDQxLAorICAgIDIsMTE0LDEyLDEsMCwwLDExNCwxNTksMCwwLDAsMTE0LDQsMCwwLDAsCisgICAgMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDgsMTAzLDEwMSwxMTYsOTUsCisgICAgOTksMTExLDEwMCwxMDEsMTksNSwwLDAsMTE1LDIsMCwwLDAsMCw0LDEyMiwKKyAgICAyNCw2NiwxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsCisgICAgNDYsMTAzLDEwMSwxMTYsOTUsOTksMTExLDEwMCwxMDEsOTksMiwwLDAsMCwwLDAsCisgICAgMCwwLDIsMCwwLDAsMSwwLDAsMCw2NywwLDAsMCwxMTUsNCwKKyAgICAwLDAsMCwxMDAsMSwwLDgzLDQxLDIsMTIyLDU2LDgyLDEwMSwxMTYsMTE3LDExNCwKKyAgICAxMTAsMzIsNzgsMTExLDExMCwxMDEsMzIsOTcsMTE1LDMyLDk4LDExNywxMDUsMTA4LDExNiw0NSwKKyAgICAxMDUsMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNSwzMiwxMDAsMTExLDMyLDExMCwxMTEsCisgICAgMTE2LDMyLDEwNCw5NywxMTgsMTAxLDMyLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsMzIsOTksMTExLAorICAgIDEwMCwxMDEsNDYsNzgsMTE0LDQsMCwwLDAsNDEsMiwxMTQsMTIsMSwwLDAsCisgICAgMTE0LDE1OSwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsCisgICAgNSwwLDAsMCwyMTgsMTAsMTAzLDEwMSwxMTYsOTUsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwKKyAgICAyNSw1LDAsMCwxMTUsMiwwLDAsMCwwLDQsMTIyLDI2LDY2LDExNywxMDUsCisgICAgMTA4LDExNiwxMDUsMTEwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCw0NiwxMDMsMTAxLDExNiwKKyAgICA5NSwxMTUsMTExLDExNywxMTQsOTksMTAxLDk5LDIsMCwwLDAsMCwwLDAsMCwKICAgICAyLDAsMCwwLDEsMCwwLDAsNjcsMCwwLDAsMTE1LDQsMCwwLAotICAgIDAsMTAwLDEsMCw4Myw0MCwyLDAsMCwwLDExNyw1NiwwLDAsMCw4MiwKLSAgICAxMDEsMTE2LDExNywxMTQsMTEwLDMyLDc4LDExMSwxMTAsMTAxLDMyLDk3LDExNSwzMiw5OCwxMTcsCi0gICAgMTA1LDEwOCwxMTYsNDUsMTA1LDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsMzIsMTAwLAotICAgIDExMSwzMiwxMTAsMTExLDExNiwzMiwxMDQsOTcsMTE4LDEwMSwzMiwxMTUsMTExLDExNywxMTQsOTksCi0gICAgMTAxLDMyLDk5LDExMSwxMDAsMTAxLDQ2LDc4LDQwLDEsMCwwLDAsMTE3LDQsMCwKLSAgICAwLDAsNzgsMTExLDExMCwxMDEsNDAsMiwwLDAsMCwxMTcsMywwLDAsMCwKLSAgICA5OSwxMDgsMTE1LDExNyw4LDAsMCwwLDEwMiwxMTcsMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSwKLSAgICA0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLAotICAgIDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsCi0gICAgNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxMCwwLDAsCi0gICAgMCwxMDMsMTAxLDExNiw5NSwxMTUsMTExLDExNywxMTQsOTksMTAxLDE2MCwyLDAsMCwxMTUsCi0gICAgMiwwLDAsMCwwLDQsMTE3LDI2LDAsMCwwLDY2LDExNywxMDUsMTA4LDExNiwKLSAgICAxMDUsMTEwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCw0NiwxMDMsMTAxLDExNiw5NSwxMTUsCi0gICAgMTExLDExNywxMTQsOTksMTAxLDk5LDIsMCwwLDAsMCwwLDAsMCwyLDAsCi0gICAgMCwwLDEsMCwwLDAsNjcsMCwwLDAsMTE1LDQsMCwwLDAsMTAwLAotICAgIDEsMCw4Myw0MCwyLDAsMCwwLDExNyw1MiwwLDAsMCw4MiwxMDEsMTE2LAotICAgIDExNywxMTQsMTEwLDMyLDcwLDk3LDEwOCwxMTUsMTAxLDMyLDk3LDExNSwzMiw5OCwxMTcsMTA1LAotICAgIDEwOCwxMTYsNDUsMTA1LDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsMzIsOTcsMTE0LAotICAgIDEwMSwzMiwxMTAsMTAxLDExOCwxMDEsMTE0LDMyLDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwxMTUsCi0gICAgNDYsNzAsNDAsMSwwLDAsMCwxMTcsNSwwLDAsMCw3MCw5NywxMDgsMTE1LAotICAgIDEwMSw0MCwyLDAsMCwwLDExNywzLDAsMCwwLDk5LDEwOCwxMTUsMTE3LDgsCi0gICAgMCwwLDAsMTAyLDExNywxMDgsMTA4LDExMCw5NywxMDksMTAxLDQwLDAsMCwwLDAsCi0gICAgNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwKLSAgICAxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLAotICAgIDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDEwLDAsMCwwLDEwNSwxMTUsOTUsMTEyLAotICAgIDk3LDk5LDEwNyw5NywxMDMsMTAxLDE2NiwyLDAsMCwxMTUsMiwwLDAsMCwwLAotICAgIDQsMTE3LDI2LDAsMCwwLDY2LDExNywxMDUsMTA4LDExNiwxMDUsMTEwLDczLDEwOSwxMTIsCi0gICAgMTExLDExNCwxMTYsMTAxLDExNCw0NiwxMDUsMTE1LDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwKLSAgICA3OCw0MCwxNSwwLDAsMCwxMTcsOCwwLDAsMCw5NSw5NSwxMTAsOTcsMTA5LAotICAgIDEwMSw5NSw5NSwxMTcsMTAsMCwwLDAsOTUsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsCi0gICAgOTUsOTUsMTE3LDEyLDAsMCwwLDk1LDk1LDExMywxMTcsOTcsMTA4LDExMCw5NywxMDksCi0gICAgMTAxLDk1LDk1LDExNyw3LDAsMCwwLDk1LDk1LDEwMCwxMTEsOTksOTUsOTUsMTE3LAotICAgIDExLDAsMCwwLDk5LDEwOCw5NywxMTUsMTE1LDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDExNywKLSAgICAxMSwwLDAsMCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwxMTQsMTAxLDExMiwxMTQsMTE3LAotICAgIDQsMCwwLDAsNzgsMTExLDExMCwxMDEsMTE3LDExLDAsMCwwLDEwMiwxMDUsMTEwLAotICAgIDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTcsMTEsMCwwLDAsMTE1LDEwMSwxMTYsCi0gICAgOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDExNywxMCwwLDAsMCwxMTUsMTAxLDExNiwKLSAgICA5NSwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDExNywxNywwLDAsMCw5NSwxMTQsMTAxLDExMywKLSAgICAxMTcsMTA1LDExNCwxMDEsMTE1LDk1LDk4LDExNywxMDUsMTA4LDExNiwxMDUsMTEwLDExNywxMSwwLAotICAgIDAsMCwxMDgsMTExLDk3LDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTcsOCwwLAotICAgIDAsMCwxMDMsMTAxLDExNiw5NSw5OSwxMTEsMTAwLDEwMSwxMTcsMTAsMCwwLDAsMTAzLAotICAgIDEwMSwxMTYsOTUsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwxMTcsMTAsMCwwLDAsMTA1LDExNSwKLSAgICA5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsNDAsMSwwLDAsMCwxMTcsMTAsMCwKLSAgICAwLDAsOTUsOTUsMTA4LDExMSw5OSw5NywxMDgsMTE1LDk1LDk1LDQwLDAsMCwwLAotICAgIDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLAotICAgIDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsCi0gICAgMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDE1LDAsMCwwLDY2LDExNywxMDUsCi0gICAgMTA4LDExNiwxMDUsMTEwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCwxMTYsMiwwLDAsCi0gICAgMTE1LDI4LDAsMCwwLDE2LDcsNiwyLDE4LDQsMywxLDE4LDEwLDMsCi0gICAgMSwzLDEsMywxLDI3LDExLDMsMSwyMSw1LDMsMSwyMSw1LDMsCi0gICAgMSwxMTcsMTUsMCwwLDAsNjYsMTE3LDEwNSwxMDgsMTE2LDEwNSwxMTAsNzMsMTA5LDExMiwKLSAgICAxMTEsMTE0LDExNiwxMDEsMTE0LDk5LDEsMCwwLDAsMCwwLDAsMCwxLDAsCi0gICAgMCwwLDYsMCwwLDAsNjYsMCwwLDAsMTE1LDE3MywwLDAsMCwxMjQsCi0gICAgMCwwLDY5LDEwMSwwLDAsOTAsMSwwLDEwMCwwLDAsOTAsMiwwLDEwMCwKLSAgICAxLDAsOTAsMywwLDEwMSw0LDAsMTAwLDIsMCwxMDAsMywwLDEzMiwwLAotICAgIDAsMTMxLDEsMCw5MCw1LDAsMTAxLDQsMCwxMDAsMTQsMCwxMDAsNCwwLAotICAgIDEwMCw1LDAsMTMyLDEsMCwxMzEsMSwwLDkwLDcsMCwxMDEsNCwwLDEwMSwKLSAgICA4LDAsMTAxLDksMCwxMDEsMTAsMCwxMDAsNiwwLDEwMCw3LDAsMTMyLDAsCi0gICAgMCwxMzEsMSwwLDEzMSwxLDAsMTMxLDEsMCwxMzEsMSwwLDkwLDExLDAsCi0gICAgMTAxLDQsMCwxMDEsMTAsMCwxMDAsOCwwLDEwMCw5LDAsMTMyLDAsMCwxMzEsCi0gICAgMSwwLDEzMSwxLDAsOTAsMTIsMCwxMDEsNCwwLDEwMSwxMCwwLDEwMCwxMCwKLSAgICAwLDEwMCwxMSwwLDEzMiwwLDAsMTMxLDEsMCwxMzEsMSwwLDkwLDEzLDAsCi0gICAgMTAxLDQsMCwxMDEsMTAsMCwxMDAsMTIsMCwxMDAsMTMsMCwxMzIsMCwwLDEzMSwKLSAgICAxLDAsMTMxLDEsMCw5MCwxNCwwLDEwMCwxNCwwLDgzLDQwLDE1LDAsMCwKLSAgICAwLDExNywxNCwwLDAsMCw3MCwxMTQsMTExLDEyMiwxMDEsMTEwLDczLDEwOSwxMTIsMTExLAotICAgIDExNCwxMTYsMTAxLDExNCwxMTcsMTQyLDAsMCwwLDc3LDEwMSwxMTYsOTcsMzIsMTEyLDk3LAotICAgIDExNiwxMDQsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMzIsMTAyLDExMSwxMTQsMzIsMTAyLDExNCwKLSAgICAxMTEsMTIyLDEwMSwxMTAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDQ2LDEwLDEwLDMyLAotICAgIDMyLDMyLDMyLDY1LDEwOCwxMDgsMzIsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMTE1LDMyLDk3LAotICAgIDExNCwxMDEsMzIsMTAxLDEwNSwxMTYsMTA0LDEwMSwxMTQsMzIsOTksMTA4LDk3LDExNSwxMTUsMzIsCi0gICAgMTExLDExNCwzMiwxMTUsMTE2LDk3LDExNiwxMDUsOTksMzIsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsCi0gICAgMTE1LDMyLDExNiwxMTEsMzIsOTcsMTE4LDExMSwxMDUsMTAwLDMyLDExNiwxMDQsMTAxLDMyLDExMCwKLSAgICAxMDEsMTAxLDEwMCwzMiwxMTYsMTExLDEwLDMyLDMyLDMyLDMyLDEwNSwxMTAsMTE1LDExNiw5NywKLSAgICAxMTAsMTE2LDEwNSw5NywxMTYsMTAxLDMyLDExNiwxMDQsMTAxLDMyLDk5LDEwOCw5NywxMTUsMTE1LAotICAgIDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDk5LDIsMCwwLDAsMCwwLDAsMCwKLSAgICAyLDAsMCwwLDIsMCwwLDAsNjcsMCwwLDAsMTE1LDE2LDAsMCwKLSAgICAwLDEwMCwxLDAsMTA2LDAsMCwxMjQsMSwwLDEwNiwxLDAsMTMxLDEsMCwKLSAgICA4Myw0MCwyLDAsMCwwLDc4LDExNywyMiwwLDAsMCw2MCwxMDksMTExLDEwMCwKLSAgICAxMTcsMTA4LDEwMSwzMiwzOSwxMjMsMTI1LDM5LDMyLDQwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLAotICAgIDQxLDYyLDQwLDIsMCwwLDAsMTE3LDYsMCwwLDAsMTAyLDExMSwxMTQsMTA5LAotICAgIDk3LDExNiwxMTcsOCwwLDAsMCw5NSw5NSwxMTAsOTcsMTA5LDEwMSw5NSw5NSw0MCwKLSAgICAyLDAsMCwwLDExNywzLDAsMCwwLDk5LDEwOCwxMTUsMTE3LDEsMCwwLAotICAgIDAsMTA5LDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLAotICAgIDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LAotICAgIDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDExLAotICAgIDAsMCwwLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDExNCwxMDEsMTEyLDExNCwxODIsMiwKLSAgICAwLDAsMTE1LDIsMCwwLDAsMCwyLDExNywyNiwwLDAsMCw3MCwxMTQsCisgICAgMCwxMDAsMSwwLDgzLDQxLDIsMTIyLDUyLDgyLDEwMSwxMTYsMTE3LDExNCwxMTAsMzIsCisgICAgNzAsOTcsMTA4LDExNSwxMDEsMzIsOTcsMTE1LDMyLDk4LDExNywxMDUsMTA4LDExNiw0NSwxMDUsCisgICAgMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNSwzMiw5NywxMTQsMTAxLDMyLDExMCwxMDEsCisgICAgMTE4LDEwMSwxMTQsMzIsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDExNSw0Niw3MCwxMTQsNCwKKyAgICAwLDAsMCw0MSwyLDExNCwxMiwxLDAsMCwxMTQsMTU5LDAsMCwwLDExNCwKKyAgICA0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwyMjAsCisgICAgMCwwLDAsMzEsNSwwLDAsMTE1LDIsMCwwLDAsMCw0LDEyMiwyNiwKKyAgICA2NiwxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsNDYsCisgICAgMTA1LDExNSw5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsNDEsMTQsMTE0LDU3LDAsMCwKKyAgICAwLDExNCw1NiwwLDAsMCwxMTQsNTgsMCwwLDAsMTE0LDU5LDAsMCwwLAorICAgIDIxOCwxMiwxMTUsMTE2LDk3LDExNiwxMDUsOTksMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMTE0LDIwNiwKKyAgICAwLDAsMCwyMTgsMTEsOTksMTA4LDk3LDExNSwxMTUsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsCisgICAgMTE0LDE0LDEsMCwwLDExNCwxNSwxLDAsMCwxMTQsMTYyLDAsMCwwLDExNCwKKyAgICA1LDEsMCwwLDExNCwxNiwxLDAsMCwxMTQsMTcsMSwwLDAsMTE0LDIyMCwKKyAgICAwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLAorICAgIDAsMCwxMTQsNSwwLDAsMCwxMTQsMTEsMSwwLDAsMjI0LDQsMCwwLAorICAgIDExNSwyOCwwLDAsMCwxMiw3LDYsMiwxOCw5LDMsMSwyMSw4LDMsCisgICAgMSwxOCwxMSwzLDEsMjEsMTEsMywxLDIxLDUsMywxLDIxLDUsMywKKyAgICAxLDExNCwxMSwxLDAsMCw5OSwwLDAsMCwwLDAsMCwwLDAsMCwKKyAgICAwLDAsMCw1LDAsMCwwLDY0LDAsMCwwLDExNSwxOTMsMCwwLDAsCisgICAgMTAxLDAsMCw5MCwxLDAsMTAwLDAsMCw5MCwyLDAsMTAwLDEsMCw5MCwKKyAgICAzLDAsMTAxLDQsMCwxMDAsMiwwLDEwMCwzLDAsMTMyLDAsMCwxMzEsMSwKKyAgICAwLDkwLDUsMCwxMDEsNiwwLDEwMCw0LDAsMTAwLDQsMCwxMDAsNSwwLAorICAgIDEwMCw2LDAsMTMyLDIsMCwxMzEsMSwwLDkwLDcsMCwxMDEsNiwwLDEwMCwKKyAgICA0LDAsMTAwLDcsMCwxMDAsOCwwLDEzMiwxLDAsMTMxLDEsMCw5MCw4LAorICAgIDAsMTAxLDQsMCwxMDAsOSwwLDEwMCwxMCwwLDEzMiwwLDAsMTMxLDEsMCwKKyAgICA5MCw5LDAsMTAxLDYsMCwxMDAsMTEsMCwxMDAsMTIsMCwxMzIsMCwwLDEzMSwKKyAgICAxLDAsOTAsMTAsMCwxMDEsNiwwLDEwMSwxMSwwLDEwMCwxMywwLDEwMCwxNCwKKyAgICAwLDEzMiwwLDAsMTMxLDEsMCwxMzEsMSwwLDkwLDEyLDAsMTAxLDYsMCwKKyAgICAxMDEsMTEsMCwxMDAsMTUsMCwxMDAsMTYsMCwxMzIsMCwwLDEzMSwxLDAsMTMxLAorICAgIDEsMCw5MCwxMywwLDEwMSw2LDAsMTAxLDExLDAsMTAwLDE3LDAsMTAwLDE4LAorICAgIDAsMTMyLDAsMCwxMzEsMSwwLDEzMSwxLDAsOTAsMTQsMCwxMDAsNCwwLAorICAgIDgzLDQxLDE5LDIxOCwxNCw3MCwxMTQsMTExLDEyMiwxMDEsMTEwLDczLDEwOSwxMTIsMTExLDExNCwKKyAgICAxMTYsMTAxLDExNCwxMjIsMTQyLDc3LDEwMSwxMTYsOTcsMzIsMTEyLDk3LDExNiwxMDQsMzIsMTA1LAorICAgIDEwOSwxMTIsMTExLDExNCwxMTYsMzIsMTAyLDExMSwxMTQsMzIsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsCisgICAgMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDY1LAorICAgIDEwOCwxMDgsMzIsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMTE1LDMyLDk3LDExNCwxMDEsMzIsMTAxLAorICAgIDEwNSwxMTYsMTA0LDEwMSwxMTQsMzIsOTksMTA4LDk3LDExNSwxMTUsMzIsMTExLDExNCwzMiwxMTUsCisgICAgMTE2LDk3LDExNiwxMDUsOTksMzIsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMTE1LDMyLDExNiwxMTEsCisgICAgMzIsOTcsMTE4LDExMSwxMDUsMTAwLDMyLDExNiwxMDQsMTAxLDMyLDExMCwxMDEsMTAxLDEwMCwzMiwKKyAgICAxMTYsMTExLDEwLDMyLDMyLDMyLDMyLDEwNSwxMTAsMTE1LDExNiw5NywxMTAsMTE2LDEwNSw5NywKKyAgICAxMTYsMTAxLDMyLDExNiwxMDQsMTAxLDMyLDk5LDEwOCw5NywxMTUsMTE1LDQ2LDEwLDEwLDMyLAorICAgIDMyLDMyLDMyLDk5LDEsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLAorICAgIDIsMCwwLDAsNjcsMCwwLDAsMTE1LDE2LDAsMCwwLDEwMCwxLDAsCisgICAgMTA2LDAsMCwxMjQsMCwwLDEwNiwxLDAsMTMxLDEsMCw4Myw0MSwyLDEyMiwKKyAgICAxMTUsODIsMTAxLDExNiwxMTcsMTE0LDExMCwzMiwxMTQsMTAxLDExMiwxMTQsMzIsMTAyLDExMSwxMTQsCisgICAgMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDYsMTAsMTAsMzIsMzIsCisgICAgMzIsMzIsMzIsMzIsMzIsMzIsODQsMTA0LDEwMSwzMiwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwKKyAgICAzMiwxMDUsMTE1LDMyLDEwMCwxMDEsMTEyLDExNCwxMDEsOTksOTcsMTE2LDEwMSwxMDAsNDYsMzIsCisgICAgMzIsODQsMTA0LDEwMSwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwzMiwxMDksOTcsOTksMTA0LAorICAgIDEwNSwxMTAsMTAxLDExNCwxMjEsMzIsMTAwLDExMSwxMDEsMTE1LDMyLDExNiwxMDQsMTAxLDMyLDEwNiwKKyAgICAxMTEsOTgsMzIsMTA1LDExNiwxMTUsMTAxLDEwOCwxMDIsNDYsMTAsMTAsMzIsMzIsMzIsMzIsCisgICAgMzIsMzIsMzIsMzIsMTIyLDIyLDYwLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEyMywzMywKKyAgICAxMTQsMTI1LDMyLDQwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDQxLDYyLDQxLDIsMTE0LDQ3LAorICAgIDAsMCwwLDExNCw1NywwLDAsMCw0MSwxLDIxOCwxLDEwOSwxMTQsNCwwLAorICAgIDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsMjA2LDAsMCwKKyAgICAwLDQ3LDUsMCwwLDExNSwyLDAsMCwwLDAsNywxMjIsMjYsNzAsMTE0LAogICAgIDExMSwxMjIsMTAxLDExMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsNDYsMTA5LDExMSwxMDAsCi0gICAgMTE3LDEwOCwxMDEsOTUsMTE0LDEwMSwxMTIsMTE0LDk5LDMsMCwwLDAsMCwwLDAsCi0gICAgMCwzLDAsMCwwLDIsMCwwLDAsNjcsMCwwLDAsMTE1LDIzLDAsCi0gICAgMCwwLDExNiwwLDAsMTA2LDEsMCwxMjQsMSwwLDEzMSwxLDAsMTE0LDE5LAotICAgIDAsMTI0LDAsMCw4MywxMDAsMSwwLDgzLDQwLDIsMCwwLDAsMTE3LDIxLAotICAgIDAsMCwwLDcwLDEwNSwxMTAsMTAwLDMyLDk3LDMyLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLAotICAgIDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ2LDc4LDQwLDMsMCwwLDAsMTE3LDQsCi0gICAgMCwwLDAsOTUsMTA1LDEwOSwxMTIsMTE3LDksMCwwLDAsMTA1LDExNSw5NSwxMDIsCi0gICAgMTE0LDExMSwxMjIsMTAxLDExMCwxMTcsNCwwLDAsMCw3OCwxMTEsMTEwLDEwMSw0MCwzLAotICAgIDAsMCwwLDExNywzLDAsMCwwLDk5LDEwOCwxMTUsMTE3LDgsMCwwLDAsCi0gICAgMTAyLDExNywxMDgsMTA4LDExMCw5NywxMDksMTAxLDExNyw0LDAsMCwwLDExMiw5NywxMTYsCi0gICAgMTA0LDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsCi0gICAgNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSwKLSAgICA5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDExLDAsCi0gICAgMCwwLDEwMiwxMDUsMTEwLDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxODYsMiwwLAotICAgIDAsMTE1LDIsMCwwLDAsMCwzLDExNywyNiwwLDAsMCw3MCwxMTQsMTExLAotICAgIDEyMiwxMDEsMTEwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCw0NiwxMDIsMTA1LDExMCwxMDAsCi0gICAgOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTksMiwwLDAsMCwwLDAsMCwwLAotICAgIDQsMCwwLDAsOSwwLDAsMCw2NywwLDAsMCwxMTUsMTAwLDAsMCwKLSAgICAwLDEyNCwxLDAsMTE2LDAsMCwxMDYsMSwwLDEwNyw2LDAsMTI1LDIsMCwKLSAgICAxMjEsMzIsMCwxMTYsMiwwLDExNiwzLDAsMTA2LDQsMCwxMjQsMSwwLDEzMSwKLSAgICAyLDAsMTI1LDMsMCwxMjQsMywwLDk2LDUsMCwxMjQsMywwLDgzLDg3LAotICAgIDExMCw0NiwwLDEsMSwxLDEyNCwyLDAsMTIsMTE0LDg4LDAsMTI0LDEsMCwKLSAgICAxMTYsMCwwLDEwNiwxLDAsMTA3LDYsMCwxMTQsODgsMCwxMTYsMCwwLDEwNiwKLSAgICAxLDAsMTI0LDEsMCw2MSwxMTAsMCwwLDEzMCwwLDAsODksMTEwLDEsMCwKLSAgICA4OCwxMDAsMSwwLDgzLDQwLDIsMCwwLDAsMTE3LDIxLDAsMCwwLDc2LAotICAgIDExMSw5NywxMDAsMzIsOTcsMzIsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA5LDExMSwxMDAsCi0gICAgMTE3LDEwOCwxMDEsNDYsNzgsNDAsNiwwLDAsMCwxMTcsMywwLDAsMCwxMTUsCi0gICAgMTIxLDExNSwxMTcsNywwLDAsMCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsMTE3LDI1LAotICAgIDAsMCwwLDk1LDk5LDk3LDEwOCwxMDgsOTUsMTE5LDEwNSwxMTYsMTA0LDk1LDEwMiwxMTQsCi0gICAgOTcsMTA5LDEwMSwxMTUsOTUsMTE0LDEwMSwxMDksMTExLDExOCwxMDEsMTAwLDExNyw0LDAsMCwKLSAgICAwLDk1LDEwNSwxMDksMTEyLDExNywxMSwwLDAsMCwxMDUsMTEwLDEwNSwxMTYsOTUsMTAyLAotICAgIDExNCwxMTEsMTIyLDEwMSwxMTAsMTE3LDgsMCwwLDAsOTUsOTUsMTAyLDEwNSwxMDgsMTAxLAotICAgIDk1LDk1LDQwLDQsMCwwLDAsMTE3LDMsMCwwLDAsOTksMTA4LDExNSwxMTcsCi0gICAgOCwwLDAsMCwxMDIsMTE3LDEwOCwxMDgsMTEwLDk3LDEwOSwxMDEsMTE3LDksMCwwLAotICAgIDAsMTA1LDExNSw5NSwxMTQsMTAxLDEwOCwxMTEsOTcsMTAwLDExNywxLDAsMCwwLDEwOSwKLSAgICA0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLAotICAgIDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsCi0gICAgNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxMSwwLDAsCi0gICAgMCwxMDgsMTExLDk3LDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxOTEsMiwwLDAsCi0gICAgMTE1LDE4LDAsMCwwLDAsNiwxNSwxLDMsMSwxOCwyLDYsMSw4LAotICAgIDEsMywxLDIyLDEsMTMsMSwxMTcsMjYsMCwwLDAsNzAsMTE0LDExMSwxMjIsCi0gICAgMTAxLDExMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsNDYsMTA4LDExMSw5NywxMDAsOTUsCi0gICAgMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTksMiwwLDAsMCwwLDAsMCwwLDIsCi0gICAgMCwwLDAsMiwwLDAsMCw2NywwLDAsMCwxMTUsMTMsMCwwLDAsCi0gICAgMTE2LDAsMCwxMDYsMSwwLDEyNCwxLDAsMTMxLDEsMCw4Myw0MCwxLDAsCi0gICAgMCwwLDExNyw0NSwwLDAsMCw4MiwxMDEsMTE2LDExNywxMTQsMTEwLDMyLDExNiwxMDQsCi0gICAgMTAxLDMyLDk5LDExMSwxMDAsMTAxLDMyLDExMSw5OCwxMDYsMTAxLDk5LDExNiwzMiwxMDIsMTExLAotICAgIDExNCwzMiwxMTYsMTA0LDEwMSwzMiwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDksMTExLDEwMCwKLSAgICAxMTcsMTA4LDEwMSw0Niw0MCwyLDAsMCwwLDExNyw0LDAsMCwwLDk1LDEwNSwKLSAgICAxMDksMTEyLDExNywxNywwLDAsMCwxMDMsMTAxLDExNiw5NSwxMDIsMTE0LDExMSwxMjIsMTAxLAotICAgIDExMCw5NSwxMTEsOTgsMTA2LDEwMSw5OSwxMTYsNDAsMiwwLDAsMCwxMTcsMywwLAotICAgIDAsMCw5OSwxMDgsMTE1LDExNyw4LDAsMCwwLDEwMiwxMTcsMTA4LDEwOCwxMTAsOTcsCi0gICAgMTA5LDEwMSw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwKLSAgICAwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwKLSAgICAxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNyw4LAotICAgIDAsMCwwLDEwMywxMDEsMTE2LDk1LDk5LDExMSwxMDAsMTAxLDIwOCwyLDAsMCwxMTUsCi0gICAgMiwwLDAsMCwwLDQsMTE3LDIzLDAsMCwwLDcwLDExNCwxMTEsMTIyLDEwMSwKKyAgICAxMTcsMTA4LDEwMSw5NSwxMTQsMTAxLDExMiwxMTQsNzgsOTksNCwwLDAsMCwwLDAsCisgICAgMCwwLDQsMCwwLDAsNSwwLDAsMCw2NywwLDAsMCwxMTUsNDIsCisgICAgMCwwLDAsMTE2LDAsMCwxMDYsMSwwLDEyNCwxLDAsMTMxLDEsMCwxMTQsCisgICAgMzQsMCwxMTYsMiwwLDEyNCwxLDAsMTI0LDAsMCwxMDAsMSwwLDEwMCwyLAorICAgIDAsMTMxLDIsMSw4MywxMDAsMCwwLDgzLDEwMCwwLDAsODMsNDEsMyw3OCwKKyAgICAxMTQsMjE4LDAsMCwwLDkwLDYsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsNDEsMywxMTQsCisgICAgMTA2LDAsMCwwLDExNCwxNjMsMCwwLDAsMTE0LDE3NCwwLDAsMCw0MSw0LAorICAgIDExNCwxMiwxLDAsMCwxMTQsMTU5LDAsMCwwLDExNCwzNSwwLDAsMCwxMTQsCisgICAgMTMsMSwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsCisgICAgMCwwLDAsMTE0LDE0LDEsMCwwLDU2LDUsMCwwLDExNSw2LDAsMCwKKyAgICAwLDAsMiwxNSwxLDE5LDIsMTIyLDI0LDcwLDExNCwxMTEsMTIyLDEwMSwxMTAsNzMsCisgICAgMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDQ2LDEwMiwxMDUsMTEwLDEwMCw5NSwxMTUsMTEyLDEwMSwKKyAgICA5OSw5OSwzLDAsMCwwLDAsMCwwLDAsMywwLDAsMCwyLDAsCisgICAgMCwwLDY3LDAsMCwwLDExNSwyMywwLDAsMCwxMTYsMCwwLDEwNiwxLAorICAgIDAsMTI0LDEsMCwxMzEsMSwwLDExNCwxOSwwLDEyNCwwLDAsODMsMTAwLDEsCisgICAgMCw4Myw0MSwyLDEyMiw5Myw3MCwxMDUsMTEwLDEwMCwzMiw5NywzMiwxMDIsMTE0LDExMSwKKyAgICAxMjIsMTAxLDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0NiwxMCwxMCwzMiwzMiwzMiwKKyAgICAzMiwzMiwzMiwzMiwzMiw4NCwxMDQsMTA1LDExNSwzMiwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwKKyAgICAzMiwxMDUsMTE1LDMyLDEwMCwxMDEsMTEyLDExNCwxMDEsOTksOTcsMTE2LDEwMSwxMDAsNDYsMzIsCisgICAgMzIsODUsMTE1LDEwMSwzMiwxMDIsMTA1LDExMCwxMDAsOTUsMTE1LDExMiwxMDEsOTksNDAsNDEsCisgICAgMzIsMTA1LDExMCwxMTUsMTE2LDEwMSw5NywxMDAsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMzIsCisgICAgMzIsMzIsMzIsNzgsNDEsMiwxMTQsMTA2LDAsMCwwLDExNCwxNjMsMCwwLDAsCisgICAgNDEsMywxMTQsMTIsMSwwLDAsMTE0LDE1OSwwLDAsMCwxMTQsMzUsMCwwLAorICAgIDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsCisgICAgMTE0LDE1LDEsMCwwLDYzLDUsMCwwLDExNSwyLDAsMCwwLDAsNywKKyAgICAxMjIsMjYsNzAsMTE0LDExMSwxMjIsMTAxLDExMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsCisgICAgNDYsMTAyLDEwNSwxMTAsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk5LDEsMCwwLAorICAgIDAsMCwwLDAsMCwzLDAsMCwwLDQsMCwwLDAsNjcsMCwwLAorICAgIDAsMTE1LDk1LDAsMCwwLDEyNCwwLDAsMTA2LDAsMCwxMDYsMSwwLDEyNSwKKyAgICAxLDAsMTE2LDIsMCwxMDYsMywwLDEyNCwxLDAsMTMxLDEsMCwxMTUsNTcsCisgICAgMCwxMTYsNCwwLDEwMCwxLDAsMTA2LDUsMCwxMjQsMSwwLDEzMSwxLDAsCisgICAgMTAwLDIsMCwxMjQsMSwwLDEzMSwxLDEsMTMwLDEsMCwxMTAsMCwwLDExNiwKKyAgICA2LDAsMTE2LDIsMCwxMDYsNywwLDEyNCwxLDAsMTMxLDIsMCwxMjUsMiwKKyAgICAwLDExNiw4LDAsMTI0LDIsMCwxMjQsMCwwLDEwNiw5LDAsMTMxLDIsMCwKKyAgICAxLDEwMCwwLDAsODMsNDEsMyw3OCwxMjIsMjcsMTIzLDMzLDExNCwxMjUsMzIsMTA1LAorICAgIDExNSwzMiwxMTAsMTExLDExNiwzMiw5NywzMiwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDksCisgICAgMTExLDEwMCwxMTcsMTA4LDEwMSwxMTQsNjcsMCwwLDAsNDEsMTAsMTE0LDIwOSwwLDAsCisgICAgMCwxMTQsNjcsMCwwLDAsMTE0LDEwNiwwLDAsMCwxMTQsMTYzLDAsMCwwLAorICAgIDExNCwxNTQsMCwwLDAsMTE0LDQ3LDAsMCwwLDExNCwxMTQsMCwwLDAsMjE4LAorICAgIDE3LDEwMywxMDEsMTE2LDk1LDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDk1LDExMSw5OCwxMDYsMTAxLAorICAgIDk5LDExNiwxMTQsMTc2LDAsMCwwLDExNCw2MywwLDAsMCw0MSwzLDExNCwxODAsCisgICAgMCwwLDAsMTE0LDY3LDAsMCwwLDExNCwxOTUsMCwwLDAsMTE0LDQsMCwKKyAgICAwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDIsMSwwLAorICAgIDAsNzIsNSwwLDAsMTE1LDEyLDAsMCwwLDAsMiwxMiwxLDE1LDEsCisgICAgMTgsMSwxMiwxLDE4LDEsMTIyLDI2LDcwLDExNCwxMTEsMTIyLDEwMSwxMTAsNzMsMTA5LAorICAgIDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDQ2LDEwMSwxMjAsMTAxLDk5LDk1LDEwOSwxMTEsMTAwLDExNywKKyAgICAxMDgsMTAxLDk5LDIsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDMsCisgICAgMCwwLDAsNjcsMCwwLDAsMTE1LDEzLDAsMCwwLDExNiwwLDAsMTI0LAorICAgIDAsMCwxMjQsMSwwLDEzMSwyLDAsODMsNDEsMSwxMjIsOTUsNzYsMTExLDk3LAorICAgIDEwMCwzMiw5NywzMiwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LAorICAgIDEwMSw0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw4NCwxMDQsMTA1LDExNSwKKyAgICAzMiwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwzMiwxMDUsMTE1LDMyLDEwMCwxMDEsMTEyLDExNCwxMDEsCisgICAgOTksOTcsMTE2LDEwMSwxMDAsNDYsMzIsMzIsODUsMTE1LDEwMSwzMiwxMDEsMTIwLDEwMSw5OSwKKyAgICA5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0MCw0MSwzMiwxMDUsMTEwLDExNSwxMTYsMTAxLDk3LAorICAgIDEwMCw0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw0MSwxLDExNCwxODEsCisgICAgMCwwLDAsNDEsMiwxMTQsMTIsMSwwLDAsMTE0LDE1OSwwLDAsMCwxMTQsCisgICAgNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsNSwKKyAgICAxLDAsMCw4MSw1LDAsMCwxMTUsMiwwLDAsMCwwLDcsMTIyLDI2LAorICAgIDcwLDExNCwxMTEsMTIyLDEwMSwxMTAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDQ2LDEwOCwKKyAgICAxMTEsOTcsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk5LDIsMCwwLDAsMCwKKyAgICAwLDAsMCwyLDAsMCwwLDIsMCwwLDAsNjcsMCwwLDAsMTE1LAorICAgIDEzLDAsMCwwLDExNiwwLDAsMTA2LDEsMCwxMjQsMSwwLDEzMSwxLDAsCisgICAgODMsNDEsMSwxMjIsNDUsODIsMTAxLDExNiwxMTcsMTE0LDExMCwzMiwxMTYsMTA0LDEwMSwzMiwKKyAgICA5OSwxMTEsMTAwLDEwMSwzMiwxMTEsOTgsMTA2LDEwMSw5OSwxMTYsMzIsMTAyLDExMSwxMTQsMzIsCisgICAgMTE2LDEwNCwxMDEsMzIsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwKKyAgICAxMDEsNDYsNDEsMiwxMTQsMTA2LDAsMCwwLDExNCwyMiwxLDAsMCw0MSwyLAorICAgIDExNCwxMiwxLDAsMCwxMTQsMTU5LDAsMCwwLDExNCw0LDAsMCwwLDExNCwKKyAgICA0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwxNiwxLDAsMCw5MCw1LAorICAgIDAsMCwxMTUsMiwwLDAsMCwwLDQsMTIyLDIzLDcwLDExNCwxMTEsMTIyLDEwMSwKICAgICAxMTAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDQ2LDEwMywxMDEsMTE2LDk1LDk5LDExMSwKICAgICAxMDAsMTAxLDk5LDIsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDEsCiAgICAgMCwwLDAsNjcsMCwwLDAsMTE1LDQsMCwwLDAsMTAwLDEsMCw4MywKLSAgICA0MCwyLDAsMCwwLDExNyw1NCwwLDAsMCw4MiwxMDEsMTE2LDExNywxMTQsMTEwLAotICAgIDMyLDc4LDExMSwxMTAsMTAxLDMyLDk3LDExNSwzMiwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwKLSAgICAxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsMzIsMTAwLDExMSwzMiwxMTAsMTExLDExNiwzMiwxMDQsCi0gICAgOTcsMTE4LDEwMSwzMiwxMTUsMTExLDExNywxMTQsOTksMTAxLDMyLDk5LDExMSwxMDAsMTAxLDQ2LAotICAgIDc4LDQwLDEsMCwwLDAsMTE3LDQsMCwwLDAsNzgsMTExLDExMCwxMDEsNDAsCi0gICAgMiwwLDAsMCwxMTcsMywwLDAsMCw5OSwxMDgsMTE1LDExNyw4LDAsMCwKLSAgICAwLDEwMiwxMTcsMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSw0MCwwLDAsMCwwLDQwLDAsCi0gICAgMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLAotICAgIDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LAotICAgIDExNiwxMTQsOTcsMTEyLDYyLDExNywxMCwwLDAsMCwxMDMsMTAxLDExNiw5NSwxMTUsMTExLAotICAgIDExNywxMTQsOTksMTAxLDIxNCwyLDAsMCwxMTUsMiwwLDAsMCwwLDQsMTE3LAotICAgIDI1LDAsMCwwLDcwLDExNCwxMTEsMTIyLDEwMSwxMTAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiwKLSAgICAxMDEsMTE0LDQ2LDEwMywxMDEsMTE2LDk1LDExNSwxMTEsMTE3LDExNCw5OSwxMDEsOTksMiwwLAotICAgIDAsMCwwLDAsMCwwLDIsMCwwLDAsMiwwLDAsMCw2NywwLAotICAgIDAsMCwxMTUsMTMsMCwwLDAsMTE2LDAsMCwxMDYsMSwwLDEyNCwxLDAsCi0gICAgMTMxLDEsMCw4Myw0MCwxLDAsMCwwLDExNyw0NiwwLDAsMCw4MiwxMDEsCi0gICAgMTE2LDExNywxMTQsMTEwLDMyLDg0LDExNCwxMTcsMTAxLDMyLDEwNSwxMDIsMzIsMTE2LDEwNCwxMDEsCi0gICAgMzIsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTA1LAotICAgIDExNSwzMiw5NywzMiwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsNDYsNDAsMiwwLDAsCi0gICAgMCwxMTcsNCwwLDAsMCw5NSwxMDUsMTA5LDExMiwxMTcsMTcsMCwwLDAsMTA1LAotICAgIDExNSw5NSwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCw5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsCi0gICAgNDAsMiwwLDAsMCwxMTcsMywwLDAsMCw5OSwxMDgsMTE1LDExNyw4LDAsCi0gICAgMCwwLDEwMiwxMTcsMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSw0MCwwLDAsMCwwLDQwLAotICAgIDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLAotICAgIDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsCi0gICAgMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxMCwwLDAsMCwxMDUsMTE1LDk1LDExMiw5NywKLSAgICA5OSwxMDcsOTcsMTAzLDEwMSwyMjAsMiwwLDAsMTE1LDIsMCwwLDAsMCw0LAotICAgIDExNywyNSwwLDAsMCw3MCwxMTQsMTExLDEyMiwxMDEsMTEwLDczLDEwOSwxMTIsMTExLDExNCwKLSAgICAxMTYsMTAxLDExNCw0NiwxMDUsMTE1LDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw3OCw0MCwKLSAgICAxNSwwLDAsMCwxMTcsOCwwLDAsMCw5NSw5NSwxMTAsOTcsMTA5LDEwMSw5NSwKLSAgICA5NSwxMTcsMTAsMCwwLDAsOTUsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsOTUsCi0gICAgMTE3LDEyLDAsMCwwLDk1LDk1LDExMywxMTcsOTcsMTA4LDExMCw5NywxMDksMTAxLDk1LAotICAgIDk1LDExNyw3LDAsMCwwLDk1LDk1LDEwMCwxMTEsOTksOTUsOTUsMTE3LDExLDAsCi0gICAgMCwwLDk5LDEwOCw5NywxMTUsMTE1LDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDExNywxMSwwLAotICAgIDAsMCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwxMTQsMTAxLDExMiwxMTQsMTE3LDQsMCwKLSAgICAwLDAsNzgsMTExLDExMCwxMDEsMTE3LDExLDAsMCwwLDEwMiwxMDUsMTEwLDEwMCw5NSwKLSAgICAxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTcsMTEsMCwwLDAsMTE1LDEwMSwxMTYsOTUsMTEyLAotICAgIDk3LDk5LDEwNyw5NywxMDMsMTAxLDExNywxMCwwLDAsMCwxMTUsMTAxLDExNiw5NSwxMDgsCi0gICAgMTExLDk3LDEwMCwxMDEsMTE0LDExNywxNiwwLDAsMCw5NSwxMTQsMTAxLDExMywxMTcsMTA1LAotICAgIDExNCwxMDEsMTE1LDk1LDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDExNywxMSwwLDAsMCwxMDgsCi0gICAgMTExLDk3LDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTcsOCwwLDAsMCwxMDMsCi0gICAgMTAxLDExNiw5NSw5OSwxMTEsMTAwLDEwMSwxMTcsMTAsMCwwLDAsMTAzLDEwMSwxMTYsOTUsCi0gICAgMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwxMTcsMTAsMCwwLDAsMTA1LDExNSw5NSwxMTIsOTcsCi0gICAgOTksMTA3LDk3LDEwMywxMDEsNDAsMSwwLDAsMCwxMTcsMTAsMCwwLDAsOTUsCi0gICAgOTUsMTA4LDExMSw5OSw5NywxMDgsMTE1LDk1LDk1LDQwLDAsMCwwLDAsNDAsMCwKLSAgICAwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsCi0gICAgMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsCi0gICAgMTE2LDExNCw5NywxMTIsNjIsMTE3LDE0LDAsMCwwLDcwLDExNCwxMTEsMTIyLDEwMSwxMTAsCi0gICAgNzMsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDE3MywyLDAsMCwxMTUsMjgsMCwwLAotICAgIDAsMTYsNyw2LDIsMTgsNCwzLDEsMTgsNCwzLDEsMywxLDMsCi0gICAgMSwyNywxNCwzLDEsMjEsNSwzLDEsMjEsNSwzLDEsMTE3LDE0LDAsCi0gICAgMCwwLDcwLDExNCwxMTEsMTIyLDEwMSwxMTAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LAotICAgIDk5LDEsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDQsMCwwLAotICAgIDAsNjYsMCwwLDAsMTE1LDEwMSwwLDAsMCwxMjQsMCwwLDY5LDEwMSwwLAotICAgIDAsOTAsMSwwLDEwMCwwLDAsOTAsMiwwLDEwMCwxLDAsOTAsMywwLAotICAgIDEwMCwyLDAsOTAsNCwwLDEwMCwzLDAsOTAsNSwwLDEwMCwxMSwwLDkwLAotICAgIDcsMCwxMDEsOCwwLDEwMCw0LDAsMTAwLDUsMCwxMzIsMCwwLDEzMSwxLAotICAgIDAsOTAsOSwwLDEwMSw4LDAsMTAwLDYsMCwxMDAsNywwLDEzMiwwLDAsCi0gICAgMTMxLDEsMCw5MCwxMCwwLDEwMSw4LDAsMTAwLDEwLDAsMTAwLDgsMCwxMDAsCi0gICAgOSwwLDEzMiwxLDAsMTMxLDEsMCw5MCwxMiwwLDEwMCwxMCwwLDgzLDQwLAotICAgIDEyLDAsMCwwLDExNywyMSwwLDAsMCw4NywxMDUsMTEwLDEwMCwxMTEsMTE5LDExNSwKLSAgICA4MiwxMDEsMTAzLDEwNSwxMTUsMTE2LDExNCwxMjEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCwxMTcsNjcsCi0gICAgMCwwLDAsNzcsMTAxLDExNiw5NywzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMDIsMTA1LDExMCwKLSAgICAxMDAsMTAxLDExNCwzMiwxMDIsMTExLDExNCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsMzIsCi0gICAgMTAwLDEwMSw5OSwxMDgsOTcsMTE0LDEwMSwxMDAsMzIsMTA1LDExMCwzMiwxMTYsMTA0LDEwMSwzMiwKLSAgICA4NywxMDUsMTEwLDEwMCwxMTEsMTE5LDExNSwzMiwxMTQsMTAxLDEwMywxMDUsMTE1LDExNiwxMTQsMTIxLAotICAgIDQ2LDEwLDMyLDMyLDMyLDMyLDExNyw1OSwwLDAsMCw4MywxMTEsMTAyLDExNiwxMTksCi0gICAgOTcsMTE0LDEwMSw5Miw4MCwxMjEsMTE2LDEwNCwxMTEsMTEwLDkyLDgwLDEyMSwxMTYsMTA0LDExMSwKLSAgICAxMTAsNjcsMTExLDExNCwxMDEsOTIsMTIzLDExNSwxMjEsMTE1LDk1LDExOCwxMDEsMTE0LDExNSwxMDUsCi0gICAgMTExLDExMCwxMjUsOTIsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsOTIsMTIzLDEwMiwxMTcsMTA4LAotICAgIDEwOCwxMTAsOTcsMTA5LDEwMSwxMjUsMTE3LDY1LDAsMCwwLDgzLDExMSwxMDIsMTE2LDExOSwKLSAgICA5NywxMTQsMTAxLDkyLDgwLDEyMSwxMTYsMTA0LDExMSwxMTAsOTIsODAsMTIxLDExNiwxMDQsMTExLAotICAgIDExMCw2NywxMTEsMTE0LDEwMSw5MiwxMjMsMTE1LDEyMSwxMTUsOTUsMTE4LDEwMSwxMTQsMTE1LDEwNSwKLSAgICAxMTEsMTEwLDEyNSw5Miw3NywxMTEsMTAwLDExNywxMDgsMTAxLDExNSw5MiwxMjMsMTAyLDExNywxMDgsCi0gICAgMTA4LDExMCw5NywxMDksMTAxLDEyNSw5Miw2OCwxMDEsOTgsMTE3LDEwMyw5OSwyLDAsMCwKKyAgICA0MSwyLDEyMiw1NCw4MiwxMDEsMTE2LDExNywxMTQsMTEwLDMyLDc4LDExMSwxMTAsMTAxLDMyLAorICAgIDk3LDExNSwzMiwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwKKyAgICAxMTUsMzIsMTAwLDExMSwzMiwxMTAsMTExLDExNiwzMiwxMDQsOTcsMTE4LDEwMSwzMiwxMTUsMTExLAorICAgIDExNywxMTQsOTksMTAxLDMyLDk5LDExMSwxMDAsMTAxLDQ2LDc4LDExNCw0LDAsMCwwLAorICAgIDQxLDIsMTE0LDEyLDEsMCwwLDExNCwxNTksMCwwLDAsMTE0LDQsMCwwLAorICAgIDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDE3LDEsMCwwLAorICAgIDk2LDUsMCwwLDExNSwyLDAsMCwwLDAsNCwxMjIsMjUsNzAsMTE0LDExMSwKKyAgICAxMjIsMTAxLDExMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsNDYsMTAzLDEwMSwxMTYsOTUsCisgICAgMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw5OSwyLDAsMCwwLDAsMCwwLDAsMiwKKyAgICAwLDAsMCwyLDAsMCwwLDY3LDAsMCwwLDExNSwxMywwLDAsMCwKKyAgICAxMTYsMCwwLDEwNiwxLDAsMTI0LDEsMCwxMzEsMSwwLDgzLDQxLDEsMTIyLAorICAgIDQ2LDgyLDEwMSwxMTYsMTE3LDExNCwxMTAsMzIsODQsMTE0LDExNywxMDEsMzIsMTA1LDEwMiwzMiwKKyAgICAxMTYsMTA0LDEwMSwzMiwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LAorICAgIDEwMSwzMiwxMDUsMTE1LDMyLDk3LDMyLDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw0Niw0MSwKKyAgICAyLDExNCwxMDYsMCwwLDAsOTAsMTcsMTA1LDExNSw5NSwxMDIsMTE0LDExMSwxMjIsMTAxLAorICAgIDExMCw5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsNDEsMiwxMTQsMTIsMSwwLDAsCisgICAgMTE0LDE1OSwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsCisgICAgNSwwLDAsMCwxMTQsMjIwLDAsMCwwLDEwMiw1LDAsMCwxMTUsMiwwLAorICAgIDAsMCwwLDQsMTIyLDI1LDcwLDExNCwxMTEsMTIyLDEwMSwxMTAsNzMsMTA5LDExMiwxMTEsCisgICAgMTE0LDExNiwxMDEsMTE0LDQ2LDEwNSwxMTUsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDQxLAorICAgIDE1LDExNCw1NywwLDAsMCwxMTQsNTYsMCwwLDAsMTE0LDU4LDAsMCwwLAorICAgIDExNCw1OSwwLDAsMCwxMTQsMTgsMSwwLDAsMTE0LDIwNiwwLDAsMCwxMTQsCisgICAgMTksMSwwLDAsMTE0LDE0LDEsMCwwLDExNCwxNSwxLDAsMCwxMTQsMiwKKyAgICAxLDAsMCwxMTQsNSwxLDAsMCwxMTQsMTY1LDAsMCwwLDExNCwxNiwxLAorICAgIDAsMCwxMTQsMTcsMSwwLDAsMTE0LDIyMCwwLDAsMCwxMTQsNCwwLDAsCisgICAgMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwKKyAgICAxMTQsMjAsMSwwLDAsMzgsNSwwLDAsMTE1LDI4LDAsMCwwLDEyLDcsCisgICAgNiwyLDE4LDksMywxLDIxLDYsMywxLDE4LDgsMTgsOSwxOCw5LAorICAgIDMsMSwyMSw1LDMsMSwyMSw1LDMsMSwxMTQsMjAsMSwwLDAsOTksCisgICAgMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNSwwLDAsMCwKKyAgICA2NCwwLDAsMCwxMTUsMTIxLDAsMCwwLDEwMSwwLDAsOTAsMSwwLDEwMCwKKyAgICAwLDAsOTAsMiwwLDEwMCwxLDAsOTAsMywwLDEwMCwyLDAsOTAsNCwKKyAgICAwLDEwMCwzLDAsOTAsNSwwLDEwMCw0LDAsOTAsNiwwLDEwMSw3LDAsCisgICAgMTAwLDUsMCwxMDAsNiwwLDEzMiwwLDAsMTMxLDEsMCw5MCw4LDAsMTAxLAorICAgIDcsMCwxMDAsNywwLDEwMCw4LDAsMTMyLDAsMCwxMzEsMSwwLDkwLDksCisgICAgMCwxMDEsNywwLDEwMCw5LDAsMTAwLDksMCwxMDAsMTAsMCwxMDAsMTEsMCwKKyAgICAxMzIsMiwwLDEzMSwxLDAsOTAsMTAsMCwxMDEsNywwLDEwMCw5LDAsMTAwLAorICAgIDEyLDAsMTAwLDEzLDAsMTMyLDEsMCwxMzEsMSwwLDkwLDExLDAsMTAwLDksCisgICAgMCw4Myw0MSwxNCwyMTgsMjEsODcsMTA1LDExMCwxMDAsMTExLDExOSwxMTUsODIsMTAxLDEwMywKKyAgICAxMDUsMTE1LDExNiwxMTQsMTIxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsMTIyLDYyLDc3LDEwMSwxMTYsCisgICAgOTcsMzIsMTEyLDk3LDExNiwxMDQsMzIsMTAyLDEwNSwxMTAsMTAwLDEwMSwxMTQsMzIsMTAyLDExMSwKKyAgICAxMTQsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDMyLDEwMCwxMDEsOTksMTA4LDk3LDExNCwKKyAgICAxMDEsMTAwLDMyLDEwNSwxMTAsMzIsMTE2LDEwNCwxMDEsMzIsODcsMTA1LDExMCwxMDAsMTExLDExOSwKKyAgICAxMTUsMzIsMTE0LDEwMSwxMDMsMTA1LDExNSwxMTYsMTE0LDEyMSw0NiwxMjIsNTksODMsMTExLDEwMiwKKyAgICAxMTYsMTE5LDk3LDExNCwxMDEsOTIsODAsMTIxLDExNiwxMDQsMTExLDExMCw5Miw4MCwxMjEsMTE2LAorICAgIDEwNCwxMTEsMTEwLDY3LDExMSwxMTQsMTAxLDkyLDEyMywxMTUsMTIxLDExNSw5NSwxMTgsMTAxLDExNCwKKyAgICAxMTUsMTA1LDExMSwxMTAsMTI1LDkyLDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDkyLDEyMywxMDIsCisgICAgMTE3LDEwOCwxMDgsMTEwLDk3LDEwOSwxMDEsMTI1LDEyMiw2NSw4MywxMTEsMTAyLDExNiwxMTksOTcsCisgICAgMTE0LDEwMSw5Miw4MCwxMjEsMTE2LDEwNCwxMTEsMTEwLDkyLDgwLDEyMSwxMTYsMTA0LDExMSwxMTAsCisgICAgNjcsMTExLDExNCwxMDEsOTIsMTIzLDExNSwxMjEsMTE1LDk1LDExOCwxMDEsMTE0LDExNSwxMDUsMTExLAorICAgIDExMCwxMjUsOTIsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsOTIsMTIzLDEwMiwxMTcsMTA4LDEwOCwKKyAgICAxMTAsOTcsMTA5LDEwMSwxMjUsOTIsNjgsMTAxLDk4LDExNywxMDMsNzAsOTksMiwwLDAsCiAgICAgMCwwLDAsMCwwLDIsMCwwLDAsMTEsMCwwLDAsNjcsMCwwLAogICAgIDAsMTE1LDY3LDAsMCwwLDEyMSwyMywwLDExNiwwLDAsMTA2LDEsMCwxMTYsCiAgICAgMCwwLDEwNiwyLDAsMTI0LDEsMCwxMzEsMiwwLDgzLDg3LDExMCwzNywwLAogICAgIDQsMTE2LDMsMCwxMDcsMTAsMCwxMTQsNjIsMCwxLDEsMSwxMTYsMCwwLAogICAgIDEwNiwxLDAsMTE2LDAsMCwxMDYsNCwwLDEyNCwxLDAsMTMxLDIsMCw4MywKLSAgICA4OSwxMTAsMSwwLDg4LDEwMCwwLDAsODMsNDAsMSwwLDAsMCw3OCw0MCwKLSAgICA1LDAsMCwwLDExNyw3LDAsMCwwLDk1LDExOSwxMDUsMTEwLDExNCwxMDEsMTAzLAotICAgIDExNyw3LDAsMCwwLDc5LDExMiwxMDEsMTEwLDc1LDEwMSwxMjEsMTE3LDE3LDAsMCwKLSAgICAwLDcyLDc1LDY5LDg5LDk1LDY3LDg1LDgyLDgyLDY5LDc4LDg0LDk1LDg1LDgzLAotICAgIDY5LDgyLDExNywxMiwwLDAsMCw4NywxMDUsMTEwLDEwMCwxMTEsMTE5LDExNSw2OSwxMTQsCi0gICAgMTE0LDExMSwxMTQsMTE3LDE4LDAsMCwwLDcyLDc1LDY5LDg5LDk1LDc2LDc5LDY3LAotICAgIDY1LDc2LDk1LDc3LDY1LDY3LDcyLDczLDc4LDY5LDQwLDIsMCwwLDAsMTE3LAotICAgIDMsMCwwLDAsOTksMTA4LDExNSwxMTcsMywwLDAsMCwxMDcsMTAxLDEyMSw0MCwKLSAgICAwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwKLSAgICAxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsCi0gICAgOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxNCwwLDAsMCwKLSAgICA5NSwxMTEsMTEyLDEwMSwxMTAsOTUsMTE0LDEwMSwxMDMsMTA1LDExNSwxMTYsMTE0LDEyMSwyNDAsMiwKLSAgICAwLDAsMTE1LDgsMCwwLDAsMCwyLDMsMSwyMywxLDEzLDEsMTE3LAotICAgIDM2LDAsMCwwLDg3LDEwNSwxMTAsMTAwLDExMSwxMTksMTE1LDgyLDEwMSwxMDMsMTA1LDExNSwKLSAgICAxMTYsMTE0LDEyMSw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDk1LDExMSwxMTIsMTAxLDExMCw5NSwKLSAgICAxMTQsMTAxLDEwMywxMDUsMTE1LDExNiwxMTQsMTIxLDk5LDIsMCwwLDAsMCwwLDAsCi0gICAgMCw2LDAsMCwwLDE2LDAsMCwwLDY3LDAsMCwwLDExNSwxNDIsMCwKLSAgICAwLDAsMTI0LDAsMCwxMDYsMCwwLDExNCwyMSwwLDEyNCwwLDAsMTA2LDEsCi0gICAgMCwxMjUsMiwwLDExMCw5LDAsMTI0LDAsMCwxMDYsMiwwLDEyNSwyLDAsCi0gICAgMTI0LDIsMCwxMDYsMywwLDEwMCwxLDAsMTI0LDEsMCwxMDAsMiwwLDExNiwKLSAgICA0LDAsMTA2LDUsMCwxMDAsMCwwLDEwMCwzLDAsMTMzLDIsMCwyNSwxMzEsCi0gICAgMCwyLDEyNSwzLDAsMTIxLDQ2LDAsMTI0LDAsMCwxMDYsNiwwLDEyNCwzLAotICAgIDAsMTMxLDEsMCwxNDMsMjUsMCwxMjUsNCwwLDExNiw3LDAsMTA2LDgsMCwKLSAgICAxMjQsNCwwLDEwMCw0LDAsMTMxLDIsMCwxMjUsNSwwLDg3LDEwMCwwLDAsCi0gICAgODEsODgsODcsMTEwLDIyLDAsNCwxMTYsOSwwLDEwNywxMCwwLDExNCwxMzcsMCwKLSAgICAxLDEsMSwxMDAsMCwwLDgzLDg5LDExMCwxLDAsODgsMTI0LDUsMCw4MywKLSAgICA0MCw1LDAsMCwwLDc4LDExNyw4LDAsMCwwLDEwMiwxMTcsMTA4LDEwOCwxMTAsCi0gICAgOTcsMTA5LDEwMSwxMTcsMTEsMCwwLDAsMTE1LDEyMSwxMTUsOTUsMTE4LDEwMSwxMTQsMTE1LAotICAgIDEwNSwxMTEsMTEwLDEwNSwzLDAsMCwwLDExNywwLDAsMCwwLDQwLDExLDAsCi0gICAgMCwwLDExNywxMSwwLDAsMCw2OCw2OSw2Niw4NSw3MSw5NSw2Niw4NSw3MywKLSAgICA3Niw2OCwxMTcsMTgsMCwwLDAsODIsNjksNzEsNzMsODMsODQsODIsODksOTUsCi0gICAgNzUsNjksODksOTUsNjgsNjksNjYsODUsNzEsMTE3LDEyLDAsMCwwLDgyLDY5LAotICAgIDcxLDczLDgzLDg0LDgyLDg5LDk1LDc1LDY5LDg5LDExNyw2LDAsMCwwLDEwMiwKLSAgICAxMTEsMTE0LDEwOSw5NywxMTYsMTE3LDMsMCwwLDAsMTE1LDEyMSwxMTUsMTE3LDcsMCwKLSAgICAwLDAsMTE4LDEwMSwxMTQsMTE1LDEwNSwxMTEsMTEwLDExNywxNCwwLDAsMCw5NSwxMTEsCi0gICAgMTEyLDEwMSwxMTAsOTUsMTE0LDEwMSwxMDMsMTA1LDExNSwxMTYsMTE0LDEyMSwxMTcsNywwLDAsCi0gICAgMCw5NSwxMTksMTA1LDExMCwxMTQsMTAxLDEwMywxMTcsMTAsMCwwLDAsODEsMTE3LDEwMSwKLSAgICAxMTQsMTIxLDg2LDk3LDEwOCwxMTcsMTAxLDExNywxMiwwLDAsMCw4NywxMDUsMTEwLDEwMCwKLSAgICAxMTEsMTE5LDExNSw2OSwxMTQsMTE0LDExMSwxMTQsMTE3LDQsMCwwLDAsNzgsMTExLDExMCwKLSAgICAxMDEsNDAsNiwwLDAsMCwxMTcsMywwLDAsMCw5OSwxMDgsMTE1LDExNyw4LAotICAgIDAsMCwwLDEwMiwxMTcsMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSwxMTcsMTIsMCwwLDAsCi0gICAgMTE0LDEwMSwxMDMsMTA1LDExNSwxMTYsMTE0LDEyMSw5NSwxMDcsMTAxLDEyMSwxMTcsMywwLDAsCi0gICAgMCwxMDcsMTAxLDEyMSwxMTcsNCwwLDAsMCwxMDQsMTA3LDEwMSwxMjEsMTE3LDgsMCwKLSAgICAwLDAsMTAyLDEwNSwxMDgsMTAxLDExMiw5NywxMTYsMTA0LDQwLDAsMCwwLDAsNDAsCi0gICAgMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsCi0gICAgMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwKLSAgICAxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDE2LDAsMCwwLDk1LDExNSwxMDEsOTcsMTE0LAotICAgIDk5LDEwNCw5NSwxMTQsMTAxLDEwMywxMDUsMTE1LDExNiwxMTQsMTIxLDI0NywyLDAsMCwxMTUsCi0gICAgMjIsMCwwLDAsMCwyLDksMSwxMiwyLDksMSwxNSwxLDIyLDEsCi0gICAgMywxLDE4LDEsMjgsMSwxMywxLDksMSwxMTcsMzgsMCwwLDAsODcsCisgICAgODksMTEwLDEsMCw4OCwxMDAsMCwwLDgzLDQxLDEsNzgsNDEsNSwyMTgsNywKKyAgICA5NSwxMTksMTA1LDExMCwxMTQsMTAxLDEwMyw5MCw3LDc5LDExMiwxMDEsMTEwLDc1LDEwMSwxMjEsCisgICAgOTAsMTcsNzIsNzUsNjksODksOTUsNjcsODUsODIsODIsNjksNzgsODQsOTUsODUsCisgICAgODMsNjksODIsMTE0LDQwLDAsMCwwLDkwLDE4LDcyLDc1LDY5LDg5LDk1LDc2LAorICAgIDc5LDY3LDY1LDc2LDk1LDc3LDY1LDY3LDcyLDczLDc4LDY5LDQxLDIsMTE0LDEyLAorICAgIDEsMCwwLDIxOCwzLDEwNywxMDEsMTIxLDExNCw0LDAsMCwwLDExNCw0LDAsCisgICAgMCwwLDExNCw1LDAsMCwwLDIxOCwxNCw5NSwxMTEsMTEyLDEwMSwxMTAsOTUsMTE0LAorICAgIDEwMSwxMDMsMTA1LDExNSwxMTYsMTE0LDEyMSwxMjEsNSwwLDAsMTE1LDgsMCwwLDAsCisgICAgMCwyLDMsMSwyMywxLDEzLDEsMTIyLDM2LDg3LDEwNSwxMTAsMTAwLDExMSwxMTksCisgICAgMTE1LDgyLDEwMSwxMDMsMTA1LDExNSwxMTYsMTE0LDEyMSw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LAorICAgIDk1LDExMSwxMTIsMTAxLDExMCw5NSwxMTQsMTAxLDEwMywxMDUsMTE1LDExNiwxMTQsMTIxLDk5LDIsCisgICAgMCwwLDAsMCwwLDAsMCw2LDAsMCwwLDE2LDAsMCwwLDY3LAorICAgIDAsMCwwLDExNSwxNDIsMCwwLDAsMTI0LDAsMCwxMDYsMCwwLDExNCwyMSwKKyAgICAwLDEyNCwwLDAsMTA2LDEsMCwxMjUsMiwwLDExMCw5LDAsMTI0LDAsMCwKKyAgICAxMDYsMiwwLDEyNSwyLDAsMTI0LDIsMCwxMDYsMywwLDEwMCwxLDAsMTI0LAorICAgIDEsMCwxMDAsMiwwLDExNiw0LDAsMTA2LDUsMCwxMDAsMCwwLDEwMCwzLAorICAgIDAsMTMzLDIsMCwyNSwxMzEsMCwyLDEyNSwzLDAsMTIxLDQ2LDAsMTI0LDAsCisgICAgMCwxMDYsNiwwLDEyNCwzLDAsMTMxLDEsMCwxNDMsMjUsMCwxMjUsNCwwLAorICAgIDExNiw3LDAsMTA2LDgsMCwxMjQsNCwwLDEwMCw0LDAsMTMxLDIsMCwxMjUsCisgICAgNSwwLDg3LDEwMCwwLDAsODEsODgsODcsMTEwLDIyLDAsNCwxMTYsOSwwLAorICAgIDEwNywxMCwwLDExNCwxMzcsMCwxLDEsMSwxMDAsMCwwLDgzLDg5LDExMCwxLAorICAgIDAsODgsMTI0LDUsMCw4Myw0MSw1LDc4LDExNCwxNTksMCwwLDAsOTAsMTEsCisgICAgMTE1LDEyMSwxMTUsOTUsMTE4LDEwMSwxMTQsMTE1LDEwNSwxMTEsMTEwLDExNCwxMzcsMCwwLDAsCisgICAgMTE0LDMwLDAsMCwwLDQxLDEwLDIxOCwxMSw2OCw2OSw2Niw4NSw3MSw5NSw2NiwKKyAgICA4NSw3Myw3Niw2OCwyMTgsMTgsODIsNjksNzEsNzMsODMsODQsODIsODksOTUsNzUsCisgICAgNjksODksOTUsNjgsNjksNjYsODUsNzEsMjE4LDEyLDgyLDY5LDcxLDczLDgzLDg0LAorICAgIDgyLDg5LDk1LDc1LDY5LDg5LDExNCw0NywwLDAsMCwxMTQsNywwLDAsMCwKKyAgICAyMTgsNywxMTgsMTAxLDExNCwxMTUsMTA1LDExMSwxMTAsMTE0LDI2LDEsMCwwLDExNCwyNCwKKyAgICAxLDAsMCw5MCwxMCw4MSwxMTcsMTAxLDExNCwxMjEsODYsOTcsMTA4LDExNywxMDEsMTE0LAorICAgIDQwLDAsMCwwLDQxLDYsMTE0LDEyLDEsMCwwLDExNCwxNTksMCwwLDAsCisgICAgOTAsMTIsMTE0LDEwMSwxMDMsMTA1LDExNSwxMTYsMTE0LDEyMSw5NSwxMDcsMTAxLDEyMSwxMTQsMjUsCisgICAgMSwwLDAsOTAsNCwxMDQsMTA3LDEwMSwxMjEsMjE4LDgsMTAyLDEwNSwxMDgsMTAxLDExMiwKKyAgICA5NywxMTYsMTA0LDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsCisgICAgMCwwLDIxOCwxNiw5NSwxMTUsMTAxLDk3LDExNCw5OSwxMDQsOTUsMTE0LDEwMSwxMDMsMTA1LAorICAgIDExNSwxMTYsMTE0LDEyMSwxMjgsNSwwLDAsMTE1LDIyLDAsMCwwLDAsMiw5LAorICAgIDEsMTIsMiw5LDEsMTUsMSwyMiwxLDMsMSwxOCwxLDI4LDEsMTMsCisgICAgMSw5LDEsMTIyLDM4LDg3LDEwNSwxMTAsMTAwLDExMSwxMTksMTE1LDgyLDEwMSwxMDMsMTA1LAorICAgIDExNSwxMTYsMTE0LDEyMSw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDk1LDExNSwxMDEsOTcsMTE0LAorICAgIDk5LDEwNCw5NSwxMTQsMTAxLDEwMywxMDUsMTE1LDExNiwxMTQsMTIxLDc4LDk5LDQsMCwwLAorICAgIDAsMCwwLDAsMCw4LDAsMCwwLDE0LDAsMCwwLDY3LDAsMCwKKyAgICAwLDExNSwxNTUsMCwwLDAsMTI0LDAsMCwxMDYsMCwwLDEyNCwxLDAsMTMxLAorICAgIDEsMCwxMjUsNCwwLDEyNCw0LDAsMTAwLDAsMCwxMDcsOCwwLDExNCwzMSwKKyAgICAwLDEwMCwwLDAsODMsMTIxLDE0LDAsMTE2LDEsMCwxMjQsNCwwLDEzMSwxLAorICAgIDAsMSw4NywxMTAsMjIsMCw0LDExNiwyLDAsMTA3LDEwLDAsMTE0LDY5LDAsCisgICAgMSwxLDEsMTAwLDAsMCw4Myw4OSwxMTAsMSwwLDg4LDEyMCw3OCwwLDExNiwKKyAgICAzLDAsMTMxLDAsMCw2OCw5Myw2NywwLDkyLDIsMCwxMjUsNSwwLDEyNSwKKyAgICA2LDAsMTI0LDQsMCwxMDYsNCwwLDExNiw1LDAsMTI0LDYsMCwxMzEsMSwKKyAgICAwLDEzMSwxLDAsMTE0LDgwLDAsMTE2LDYsMCwxMjQsMSwwLDEyNCw1LDAsCisgICAgMTI0LDEsMCwxMjQsNCwwLDEzMSwyLDAsMTAwLDEsMCwxMjQsNCwwLDEzMSwKKyAgICAyLDEsMTI1LDcsMCwxMjQsNywwLDgzLDExMyw4MCwwLDg3LDEwMCwwLDAsCisgICAgODMsNDEsMiw3OCwxMTQsMjE4LDAsMCwwLDQxLDcsMTE0LDMyLDEsMCwwLAorICAgIDExNCwzOSwwLDAsMCwxMTQsNDAsMCwwLDAsMTE0LDI0MSwwLDAsMCwxMTQsCisgICAgMjMxLDAsMCwwLDExNCwyMzIsMCwwLDAsMTE0LDE3NCwwLDAsMCw0MSw4LAorICAgIDExNCwxMiwxLDAsMCwxMTQsMTU5LDAsMCwwLDExNCwzNSwwLDAsMCwxMTQsCisgICAgMTMsMSwwLDAsMTE0LDMxLDEsMCwwLDExNCwxNzAsMCwwLDAsMTE0LDEyNiwKKyAgICAwLDAsMCwxMTQsMTc4LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsCisgICAgMCwwLDExNCw1LDAsMCwwLDExNCwxNCwxLDAsMCwxNDMsNSwwLDAsCisgICAgMTE1LDI0LDAsMCwwLDAsMiwxNSwxLDEyLDEsNCwxLDMsMSwxNCwKKyAgICAxLDEzLDEsOSwxLDIyLDEsMjEsMSwyMSwxLDksMSwxMjIsMzEsODcsCiAgICAgMTA1LDExMCwxMDAsMTExLDExOSwxMTUsODIsMTAxLDEwMywxMDUsMTE1LDExNiwxMTQsMTIxLDcwLDEwNSwKLSAgICAxMTAsMTAwLDEwMSwxMTQsNDYsOTUsMTE1LDEwMSw5NywxMTQsOTksMTA0LDk1LDExNCwxMDEsMTAzLAotICAgIDEwNSwxMTUsMTE2LDExNCwxMjEsOTksMywwLDAsMCwwLDAsMCwwLDYsMCwKLSAgICAwLDAsMTIsMCwwLDAsNjcsMCwwLDAsMTE1LDEzNywwLDAsMCwxMjQsCi0gICAgMCwwLDEwNiwwLDAsMTI0LDEsMCwxMzEsMSwwLDEyNSwzLDAsMTI0LDMsCi0gICAgMCwxMDAsMSwwLDEwNyw4LDAsMTE0LDMxLDAsMTAwLDEsMCw4MywxMjEsMTcsCi0gICAgMCwxMTYsMiwwLDEwNiwzLDAsMTI0LDMsMCwxMzEsMSwwLDEsODcsMTEwLAotICAgIDIyLDAsNCwxMTYsNCwwLDEwNywxMCwwLDExNCw3MiwwLDEsMSwxLDEwMCwKLSAgICAxLDAsODMsODksMTEwLDEsMCw4OCwxMjAsNTcsMCwxMTYsNSwwLDEzMSwwLAotICAgIDAsNjgsOTMsNDYsMCw5MiwyLDAsMTI1LDQsMCwxMjUsNSwwLDEyNCwzLAotICAgIDAsMTA2LDYsMCwxMTYsNywwLDEyNCw1LDAsMTMxLDEsMCwxMzEsMSwwLAotICAgIDExNCw4MywwLDEyNCw0LDAsMTI0LDEsMCwxMjQsMywwLDEzMSwyLDAsODMsCi0gICAgMTEzLDgzLDAsODcsMTAwLDEsMCw4Myw0MCwyLDAsMCwwLDExNywzNCwwLAotICAgIDAsMCw3MCwxMDUsMTEwLDEwMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMTAsOTcsCi0gICAgMTA5LDEwMSwxMDAsMzIsMTA1LDExMCwzMiwxMTYsMTA0LDEwMSwzMiwxMTQsMTAxLDEwMywxMDUsMTE1LAotICAgIDExNiwxMTQsMTIxLDQ2LDc4LDQwLDgsMCwwLDAsMTE3LDE2LDAsMCwwLDk1LAotICAgIDExNSwxMDEsOTcsMTE0LDk5LDEwNCw5NSwxMTQsMTAxLDEwMywxMDUsMTE1LDExNiwxMTQsMTIxLDExNywKLSAgICA0LDAsMCwwLDc4LDExMSwxMTAsMTAxLDExNywzLDAsMCwwLDk1LDExMSwxMTUsCi0gICAgMTE3LDQsMCwwLDAsMTE1LDExNiw5NywxMTYsMTE3LDcsMCwwLDAsNzksODMsCi0gICAgNjksMTE0LDExNCwxMTEsMTE0LDExNywyNywwLDAsMCw5NSwxMDMsMTAxLDExNiw5NSwxMTUsCi0gICAgMTE3LDExMiwxMTIsMTExLDExNCwxMTYsMTAxLDEwMCw5NSwxMDIsMTA1LDEwOCwxMDEsOTUsMTA4LDExMSwKLSAgICA5NywxMDAsMTAxLDExNCwxMTUsMTE3LDgsMCwwLDAsMTAxLDExMCwxMDAsMTE1LDExOSwxMDUsCi0gICAgMTE2LDEwNCwxMTcsNSwwLDAsMCwxMTYsMTE3LDExMiwxMDgsMTAxLDQwLDYsMCwwLAotICAgIDAsMTE3LDMsMCwwLDAsOTksMTA4LDExNSwxMTcsOCwwLDAsMCwxMDIsMTE3LAotICAgIDEwOCwxMDgsMTEwLDk3LDEwOSwxMDEsMTE3LDQsMCwwLDAsMTEyLDk3LDExNiwxMDQsMTE3LAotICAgIDgsMCwwLDAsMTAyLDEwNSwxMDgsMTAxLDExMiw5NywxMTYsMTA0LDExNyw2LDAsMCwKLSAgICAwLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMTE3LDgsMCwwLDAsMTE1LDExNywxMDIsMTAyLAotICAgIDEwNSwxMjAsMTAxLDExNSw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LAotICAgIDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsCi0gICAgMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLAotICAgIDExNywxMSwwLDAsMCwxMDIsMTA1LDExMCwxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsCi0gICAgNiwzLDAsMCwxMTUsMjAsMCwwLDAsMCwzLDE1LDEsMTIsMSw0LAotICAgIDEsMywxLDE3LDEsMTMsMSw5LDEsMjIsMSwyMSwxLDExNywzMywwLAotICAgIDAsMCw4NywxMDUsMTEwLDEwMCwxMTEsMTE5LDExNSw4MiwxMDEsMTAzLDEwNSwxMTUsMTE2LDExNCwKLSAgICAxMjEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCw0NiwxMDIsMTA1LDExMCwxMDAsOTUsMTA5LDExMSwxMDAsCi0gICAgMTE3LDEwOCwxMDEsNzgsNzAsNDAsMTMsMCwwLDAsMTE3LDgsMCwwLDAsOTUsCi0gICAgOTUsMTEwLDk3LDEwOSwxMDEsOTUsOTUsMTE3LDEwLDAsMCwwLDk1LDk1LDEwOSwxMTEsCi0gICAgMTAwLDExNywxMDgsMTAxLDk1LDk1LDExNywxMiwwLDAsMCw5NSw5NSwxMTMsMTE3LDk3LAotICAgIDEwOCwxMTAsOTcsMTA5LDEwMSw5NSw5NSwxMTcsNywwLDAsMCw5NSw5NSwxMDAsMTExLAotICAgIDk5LDk1LDk1LDExNywxMiwwLDAsMCw4Miw2OSw3MSw3Myw4Myw4NCw4Miw4OSwKLSAgICA5NSw3NSw2OSw4OSwxMTcsMTgsMCwwLDAsODIsNjksNzEsNzMsODMsODQsODIsCi0gICAgODksOTUsNzUsNjksODksOTUsNjgsNjksNjYsODUsNzEsMTE3LDUsMCwwLDAsCi0gICAgNzAsOTcsMTA4LDExNSwxMDEsMTE3LDExLDAsMCwwLDY4LDY5LDY2LDg1LDcxLDk1LAotICAgIDY2LDg1LDczLDc2LDY4LDExNywxMSwwLDAsMCw5OSwxMDgsOTcsMTE1LDExNSwxMDksCi0gICAgMTAxLDExNiwxMDQsMTExLDEwMCwxMTcsMTQsMCwwLDAsOTUsMTExLDExMiwxMDEsMTEwLDk1LAotICAgIDExNCwxMDEsMTAzLDEwNSwxMTUsMTE2LDExNCwxMjEsMTE3LDE2LDAsMCwwLDk1LDExNSwxMDEsCi0gICAgOTcsMTE0LDk5LDEwNCw5NSwxMTQsMTAxLDEwMywxMDUsMTE1LDExNiwxMTQsMTIxLDExNyw0LDAsCi0gICAgMCwwLDc4LDExMSwxMTAsMTAxLDExNywxMSwwLDAsMCwxMDIsMTA1LDExMCwxMDAsOTUsCi0gICAgMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDAsMSwwLDAsMCwxMTcsMTAsMCwwLDAsCi0gICAgOTUsOTUsMTA4LDExMSw5OSw5NywxMDgsMTE1LDk1LDk1LDQwLDAsMCwwLDAsNDAsCi0gICAgMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsCi0gICAgMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwKLSAgICAxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDIxLDAsMCwwLDg3LDEwNSwxMTAsMTAwLDExMSwKLSAgICAxMTksMTE1LDgyLDEwMSwxMDMsMTA1LDExNSwxMTYsMTE0LDEyMSw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LAotICAgIDIyNywyLDAsMCwxMTUsMTYsMCwwLDAsMTYsMyw2LDMsNiwzLDYsCi0gICAgMiw2LDIsMTgsNywxOCwxNSwzLDEsMTE3LDIxLDAsMCwwLDg3LDEwNSwKLSAgICAxMTAsMTAwLDExMSwxMTksMTE1LDgyLDEwMSwxMDMsMTA1LDExNSwxMTYsMTE0LDEyMSw3MCwxMDUsMTEwLAotICAgIDEwMCwxMDEsMTE0LDk5LDEsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLAotICAgIDUsMCwwLDAsNjYsMCwwLDAsMTE1LDc0LDAsMCwwLDEyNCwwLDAsCi0gICAgNjksMTAxLDAsMCw5MCwxLDAsMTAwLDAsMCw5MCwyLDAsMTAwLDEsMCwKLSAgICA5MCwzLDAsMTAwLDIsMCwxMDAsMywwLDEzMiwwLDAsOTAsNCwwLDEwMCwKLSAgICA0LDAsMTAwLDUsMCwxMzIsMCwwLDkwLDUsMCwxMDEsNiwwLDEwMCw2LAotICAgIDAsMTAwLDEwLDAsMTAwLDcsMCwxMDAsOCwwLDEzMiwwLDEsMTMxLDEsMCwKLSAgICA5MCw4LDAsMTAwLDksMCw4Myw0MCwxMSwwLDAsMCwxMTcsMTMsMCwwLAotICAgIDAsOTUsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDY2LDk3LDExNSwxMDUsOTksMTE1LDExNyw4MywKLSAgICAwLDAsMCw2Niw5NywxMTUsMTAxLDMyLDk5LDEwOCw5NywxMTUsMTE1LDMyLDExMSwxMDIsCi0gICAgMzIsOTksMTExLDEwOSwxMDksMTExLDExMCwzMiw5OSwxMTEsMTAwLDEwMSwzMiwxMTAsMTAxLDEwMSwKLSAgICAxMDAsMTAxLDEwMCwzMiw5OCwxMjEsMzIsOTgsMTExLDExNiwxMDQsMzIsODMsMTExLDExNywxMTQsCi0gICAgOTksMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCwzMiw5NywxMTAsMTAwLDEwLDMyLDMyLDMyLAotICAgIDMyLDgzLDExMSwxMTcsMTE0LDk5LDEwMSwxMDgsMTAxLDExNSwxMTUsNzAsMTA1LDEwOCwxMDEsNzYsCi0gICAgMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDk5LDIsMCwwLDAsMCwwLDAsMCw1LAotICAgIDAsMCwwLDMsMCwwLDAsNjcsMCwwLDAsMTE1LDg4LDAsMCwwLAotICAgIDExNiwwLDAsMTI0LDAsMCwxMDYsMSwwLDEyNCwxLDAsMTMxLDEsMCwxMzEsCi0gICAgMSwwLDEwMCwxLDAsMjUsMTI1LDIsMCwxMjQsMiwwLDEwNiwyLDAsMTAwLAotICAgIDIsMCwxMDAsMSwwLDEzMSwyLDAsMTAwLDMsMCwyNSwxMjUsMywwLDEyNCwKLSAgICAxLDAsMTA2LDMsMCwxMDAsMiwwLDEzMSwxLDAsMTAwLDQsMCwyNSwxMjUsCi0gICAgNCwwLDEyNCwzLDAsMTAwLDUsMCwxMDcsMiwwLDExMSw4NywwLDEyNCw0LAotICAgIDAsMTAwLDUsMCwxMDcsMywwLDgzLDQwLDYsMCwwLDAsMTE3LDE0MSwwLAotICAgIDAsMCw2NywxMTEsMTEwLDk5LDExNCwxMDEsMTE2LDEwMSwzMiwxMDUsMTA5LDExMiwxMDgsMTAxLAotICAgIDEwOSwxMDEsMTEwLDExNiw5NywxMTYsMTA1LDExMSwxMTAsMzIsMTExLDEwMiwzMiw3MywxMTAsMTE1LAotICAgIDExMiwxMDEsOTksMTE2LDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMDUsMTE1LDk1LDExMiw5NywKLSAgICA5OSwxMDcsOTcsMTAzLDEwMSwzMiw5OCwxMjEsMzIsOTksMTA0LDEwMSw5OSwxMDcsMTA1LDExMCwKLSAgICAxMDMsMzIsMTA1LDEwMiwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwxMTYsMTA0LDEwMSwKLSAgICAzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMTQsMTAxLDExNiwxMTcsMTE0LDExMCwxMDEsMTAwLDMyLDk4LAotICAgIDEyMSwzMiwxMDMsMTAxLDExNiw5NSwxMDIsMTA1LDEwOCwxMDEsMTEwLDk3LDEwOSwxMDEsMzIsMTA0LAotICAgIDk3LDExNSwzMiw5NywzMiwxMDIsMTA1LDEwOCwxMDEsMTEwLDk3LDEwOSwxMDEsMzIsMTExLDEwMiwKLSAgICAzMiwzOSw5NSw5NSwxMDUsMTEwLDEwNSwxMTYsOTUsOTUsNDYsMTEyLDEyMSwzOSw0NiwxMDUsCi0gICAgMSwwLDAsMCwxMTcsMSwwLDAsMCw0NiwxMDUsMCwwLDAsMCwxMDUsCi0gICAgMiwwLDAsMCwxMTcsOCwwLDAsMCw5NSw5NSwxMDUsMTEwLDEwNSwxMTYsOTUsCi0gICAgOTUsNDAsNCwwLDAsMCwxMTcsMTEsMCwwLDAsOTUsMTEyLDk3LDExNiwxMDQsCi0gICAgOTUsMTE1LDExMiwxMDgsMTA1LDExNiwxMTcsMTIsMCwwLDAsMTAzLDEwMSwxMTYsOTUsMTAyLAotICAgIDEwNSwxMDgsMTAxLDExMCw5NywxMDksMTAxLDExNyw2LDAsMCwwLDExNCwxMTUsMTEyLDEwOCwKLSAgICAxMDUsMTE2LDExNywxMCwwLDAsMCwxMTQsMTEyLDk3LDExNCwxMTYsMTA1LDExNiwxMDUsMTExLAotICAgIDExMCw0MCw1LDAsMCwwLDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LDEwMiwxMTcsCi0gICAgOCwwLDAsMCwxMDIsMTE3LDEwOCwxMDgsMTEwLDk3LDEwOSwxMDEsMTE3LDgsMCwwLAotICAgIDAsMTAyLDEwNSwxMDgsMTAxLDExMCw5NywxMDksMTAxLDExNywxMywwLDAsMCwxMDIsMTA1LAotICAgIDEwOCwxMDEsMTEwLDk3LDEwOSwxMDEsOTUsOTgsOTcsMTE1LDEwMSwxMTcsOSwwLDAsMCwKLSAgICAxMTYsOTcsMTA1LDEwOCw5NSwxMTAsOTcsMTA5LDEwMSw0MCwwLDAsMCwwLDQwLDAsCi0gICAgMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLAotICAgIDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LAotICAgIDExNiwxMTQsOTcsMTEyLDYyLDExNywxMCwwLDAsMCwxMDUsMTE1LDk1LDExMiw5Nyw5OSwKLSAgICAxMDcsOTcsMTAzLDEwMSwyNiwzLDAsMCwxMTUsOCwwLDAsMCwwLDMsMjUsCi0gICAgMSwyMiwxLDE5LDEsMTE3LDI0LDAsMCwwLDk1LDc2LDExMSw5NywxMDAsMTAxLAotICAgIDExNCw2Niw5NywxMTUsMTA1LDk5LDExNSw0NiwxMDUsMTE1LDk1LDExMiw5Nyw5OSwxMDcsOTcsCi0gICAgMTAzLDEwMSw5OSw1LDAsMCwwLDAsMCwwLDAsMTIsMCwwLDAsMjIsCi0gICAgMCwwLDAsNjcsMCwwLDAsMTE1LDIwOCwxLDAsMCwxMjQsMiwwLDEwMCwKLSAgICAxLDAsMTAwLDIsMCwxMzMsMiwwLDI1LDEyNSw1LDAsMTI0LDIsMCwxMDAsCi0gICAgMiwwLDEwMCwzLDAsMTMzLDIsMCwyNSwxMjUsNiwwLDEyNCwyLDAsMTAwLAotICAgIDMsMCwxMDAsNCwwLDEzMywyLDAsMjUsMTI1LDcsMCwxMjQsNSwwLDExNiwKLSAgICAwLDAsMTA3LDMsMCwxMTQsMTE1LDAsMTAwLDUsMCwxMDYsMSwwLDEyNCwxLAotICAgIDAsMTI0LDUsMCwxMzEsMiwwLDEyNSw4LDAsMTE2LDIsMCwxMjQsOCwwLAotICAgIDEzMSwxLDAsMSwxMTYsMywwLDEyNCw4LDAsMTAwLDYsMCwxMjQsMSwwLAotICAgIDEwMCw3LDAsMTI0LDMsMCwxMzEsMSwyLDEzMCwxLDAsMTEwLDExNiwwLDExNiwKLSAgICA0LDAsMTI0LDYsMCwxMzEsMSwwLDEwMCwyLDAsMTA3LDMsMCwxMTQsMTczLAotICAgIDAsMTAwLDgsMCwxMDYsMSwwLDEyNCwxLDAsMTMxLDEsMCwxMjUsOSwwLAotICAgIDExNiwyLDAsMTI0LDksMCwxMzEsMSwwLDEsMTE2LDUsMCwxMjQsOSwwLAotICAgIDEzMSwxLDAsMTMwLDEsMCwxMTAsNTgsMCwxMTYsNCwwLDEyNCw3LDAsMTMxLAotICAgIDEsMCwxMDAsMiwwLDEwNywzLDAsMTE0LDIzMSwwLDEwMCw5LDAsMTA2LDEsCi0gICAgMCwxMjQsMSwwLDEzMSwxLDAsMTI1LDksMCwxMTYsMiwwLDEyNCw5LDAsCi0gICAgMTMxLDEsMCwxLDExNiw1LDAsMTI0LDksMCwxMzEsMSwwLDEzMCwxLDAsCi0gICAgMTEwLDAsMCwxMjQsNCwwLDEwMCwxLDAsMTA3LDksMCwxMTQsMTk0LDEsMTIxLAotICAgIDIwLDAsMTE2LDcsMCwxMjQsNCwwLDEwMCwxMCwwLDI1LDEzMSwxLDAsMTI1LAotICAgIDEwLDAsODcsMTEwLDE4LDAsNCwxMTYsOCwwLDEwNywxMCwwLDExNCwyNywxLAotICAgIDEsMSwxLDg5LDExMCw3MSwwLDg4LDExNiw5LDAsMTI0LDYsMCwxMzEsMSwKLSAgICAwLDEyNCwxMCwwLDEwNywzLDAsMTE0LDk4LDEsMTAwLDExLDAsMTA2LDEsMCwKLSAgICAxMjQsMSwwLDEzMSwxLDAsMTI1LDksMCwxMTYsMiwwLDEyNCw5LDAsMTMxLAotICAgIDEsMCwxLDExNiwzLDAsMTI0LDksMCwxMDAsNiwwLDEyNCwxLDAsMTAwLAotICAgIDcsMCwxMjQsMywwLDEzMSwxLDIsMTMwLDEsMCwxMTAsMCwwLDEyMSwxOCwKLSAgICAwLDEyNCw0LDAsMTAwLDEyLDAsMjUsMTAwLDEzLDAsNjQsMTI1LDExLDAsODcsCi0gICAgMTEwLDE4LDAsNCwxMTYsOCwwLDEwNywxMCwwLDExNCwxMzYsMSwxLDEsMSwKLSAgICA4OSwxMTMsMTk0LDEsODgsMTE2LDksMCwxMjQsNywwLDEzMSwxLDAsMTI0LDExLAotICAgIDAsMTA3LDMsMCwxMTQsMTk0LDEsMTE2LDMsMCwxMDAsMTEsMCwxMDYsMSwwLAotICAgIDEyNCwxLDAsMTMxLDEsMCwxMDAsNiwwLDEyNCwxLDAsMTAwLDcsMCwxMjQsCi0gICAgMywwLDEzMSwxLDIsMTMwLDEsMCwxMTMsMTk0LDEsMTEwLDAsMCwxMjQsMiwKLSAgICAwLDEwMCw0LDAsMTAwLDEsMCwxMzMsMiwwLDI1LDgzLDQwLDE0LDAsMCwKLSAgICAwLDExNywxOTMsMCwwLDAsODIsMTAxLDExNiwxMTcsMTE0LDExMCwzMiwxMTYsMTA0LDEwMSwKLSAgICAzMiwxMDksOTcsMTE0LDExNSwxMDQsOTcsMTA4LDEwOCwxMDEsMTAwLDMyLDk4LDEyMSwxMTYsMTAxLAotICAgIDExNSwzMiwxMDIsMTE0LDExMSwxMDksMzIsOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsNDQsCi0gICAgMzIsMTE4LDEwMSwxMTQsMTA1LDEwMiwxMjEsMTA1LDExMCwxMDMsMzIsMTE2LDEwNCwxMDEsMzIsMTA5LAotICAgIDk3LDEwMywxMDUsOTksMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTEwLDExNywxMDksCi0gICAgOTgsMTAxLDExNCw0NCwzMiwxMTYsMTA1LDEwOSwxMDEsMTE1LDExNiw5NywxMDksMTEyLDMyLDk3LAotICAgIDExMCwxMDAsMzIsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwzMiwxMTUsMTA1LDEyMiwxMDEsMzIsOTcsCi0gICAgMTA4LDExMSwxMTAsMTAzLDMyLDExNiwxMDQsMTAxLDMyLDExOSw5NywxMjEsNDYsMTAsMTAsMzIsCi0gICAgMzIsMzIsMzIsMzIsMzIsMzIsMzIsNzMsMTAyLDMyLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsCi0gICAgOTUsMTE1LDExNiw5NywxMTYsMTE1LDMyLDEwNSwxMTUsMzIsNzgsMTExLDExMCwxMDEsMzIsMTE2LAotICAgIDEwNCwxMDEsMTEwLDMyLDExNSwxMDcsMTA1LDExMiwzMiwxMTYsMTA0LDEwMSwzMiwxMTYsMTA1LDEwOSwKLSAgICAxMDEsMTE1LDExNiw5NywxMDksMTEyLDMyLDk5LDEwNCwxMDEsOTksMTA3LDQ2LDEwLDEwLDMyLAotICAgIDMyLDMyLDMyLDMyLDMyLDMyLDMyLDc4LDEwNSw0LDAsMCwwLDEwNSw4LDAsCi0gICAgMCwwLDEwNSwxMiwwLDAsMCwxMTcsMzAsMCwwLDAsOTgsOTcsMTAwLDMyLAotICAgIDEwOSw5NywxMDMsMTA1LDk5LDMyLDExMCwxMTcsMTA5LDk4LDEwMSwxMTQsMzIsMTA1LDExMCwzMiwKLSAgICAxMjMsMzMsMTE0LDEyNSw1OCwzMiwxMjMsMzMsMTE0LDEyNSwxMTcsNCwwLDAsMCwxMTAsCi0gICAgOTcsMTA5LDEwMSwxMTcsNCwwLDAsMCwxMTIsOTcsMTE2LDEwNCwxMTcsMTksMCwwLAotICAgIDAsOTgsOTcsMTAwLDMyLDExNiwxMDUsMTA5LDEwMSwxMTUsMTE2LDk3LDEwOSwxMTIsMzIsMTA1LAotICAgIDExMCwzMiwxMjMsMTI1LDExNywxNCwwLDAsMCw5OCw5NywxMDAsMzIsMTE1LDEwNSwxMjIsCi0gICAgMTAxLDMyLDEwNSwxMTAsMzIsMTIzLDEyNSwxMTcsNSwwLDAsMCwxMDksMTE2LDEwNSwxMDksCi0gICAgMTAxLDExNywyNCwwLDAsMCw5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSwzMiwxMDUsCi0gICAgMTE1LDMyLDExNSwxMTYsOTcsMTA4LDEwMSwzMiwxMDIsMTExLDExNCwzMiwxMjMsMTI1LDExNyw0LAotICAgIDAsMCwwLDExNSwxMDUsMTIyLDEwMSwxMDgsMywwLDAsMCwyNTUsMTI3LDI1NSwxMjcsCi0gICAgMywwLDQwLDEwLDAsMCwwLDExNywxMiwwLDAsMCw5NSw3Nyw2NSw3MSwKLSAgICA3Myw2Nyw5NSw2Niw4OSw4NCw2OSw4MywxMTcsNiwwLDAsMCwxMDIsMTExLDExNCwKLSAgICAxMDksOTcsMTE2LDExNywxNiwwLDAsMCw5NSwxMTgsMTAxLDExNCw5OCwxMTEsMTE1LDEwMSwKLSAgICA5NSwxMDksMTAxLDExNSwxMTUsOTcsMTAzLDEwMSwxMTcsMTEsMCwwLDAsNzMsMTA5LDExMiwKLSAgICAxMTEsMTE0LDExNiw2OSwxMTQsMTE0LDExMSwxMTQsMTE3LDMsMCwwLDAsMTA4LDEwMSwxMTAsCi0gICAgMTE3LDgsMCwwLDAsNjksNzksNzAsNjksMTE0LDExNCwxMTEsMTE0LDExNyw0LDAsCi0gICAgMCwwLDc4LDExMSwxMTAsMTAxLDExNywzLDAsMCwwLDEwNSwxMTAsMTE2LDExNyw4LAotICAgIDAsMCwwLDc1LDEwMSwxMjEsNjksMTE0LDExNCwxMTEsMTE0LDExNyw3LDAsMCwwLAotICAgIDk1LDExNCw5NSwxMDgsMTExLDExMCwxMDMsNDAsMTIsMCwwLDAsMTE3LDQsMCwwLAotICAgIDAsMTE1LDEwMSwxMDgsMTAyLDExNyw4LDAsMCwwLDEwMiwxMTcsMTA4LDEwOCwxMTAsOTcsCi0gICAgMTA5LDEwMSwxMTcsNCwwLDAsMCwxMDAsOTcsMTE2LDk3LDExNywxMywwLDAsMCwKLSAgICA5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSw5NSwxMTIsOTcsMTE2LDEwNCwxMTcsMTIsMCwKLSAgICAwLDAsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw5NSwxMTUsMTE2LDk3LDExNiwxMTUsMTE3LDUsCi0gICAgMCwwLDAsMTA5LDk3LDEwMywxMDUsOTksMTE3LDEzLDAsMCwwLDExNCw5NywxMTksCi0gICAgOTUsMTE2LDEwNSwxMDksMTAxLDExNSwxMTYsOTcsMTA5LDExMiwxMTcsOCwwLDAsMCwxMTQsCi0gICAgOTcsMTE5LDk1LDExNSwxMDUsMTIyLDEwMSwxMTcsMywwLDAsMCwxMDksMTE1LDEwMywxMTcsCi0gICAgNywwLDAsMCwxMDksMTAxLDExNSwxMTUsOTcsMTAzLDEwMSwxMTcsMTIsMCwwLDAsCi0gICAgMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw5NSwxMDksMTE2LDEwNSwxMDksMTAxLDExNywxMSwwLDAsCi0gICAgMCwxMTUsMTExLDExNywxMTQsOTksMTAxLDk1LDExNSwxMDUsMTIyLDEwMSw0MCwwLDAsMCwKLSAgICAwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwKLSAgICAxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLAotICAgIDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywyMCwwLDAsMCw5NSw5OCwxMjEsCi0gICAgMTE2LDEwMSwxMTUsOTUsMTAyLDExNCwxMTEsMTA5LDk1LDk4LDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsCi0gICAgMTAxLDM0LDMsMCwwLDExNSw2OCwwLDAsMCwwLDcsMTYsMSwxNiwxLAotICAgIDE2LDEsMTIsMSwxOCwxLDEwLDEsMjcsMSwxOCwxLDE1LDEsMTAsMSwKLSAgICAxNSwxLDE4LDEsMTUsMSwxMCwxLDE1LDEsMTIsMSwzLDEsMjAsMSwKLSAgICAxMywxLDUsMiwxOCwxLDE1LDEsMTAsMSwxNSwxLDEyLDEsMywxLAotICAgIDE4LDEsMTMsMSw1LDIsMTgsMSwzLDEsMTUsMSwyMSwzLDExNywzNCwKLSAgICAwLDAsMCw5NSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNjYsOTcsMTE1LDEwNSw5OSwxMTUsCi0gICAgNDYsOTUsOTgsMTIxLDExNiwxMDEsMTE1LDk1LDEwMiwxMTQsMTExLDEwOSw5NSw5OCwxMjEsMTE2LAotICAgIDEwMSw5OSwxMTEsMTAwLDEwMSwxMTcsMTAsMCwwLDAsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwKLSAgICAxMDgsMTAxLDExNSwxMTUsOTksMiwwLDAsMCwxLDAsMCwwLDUsMCwwLAotICAgIDAsMTIsMCwwLDAsNjcsMCwwLDAsMTE1LDIyNywwLDAsMCwxMjQsMSwKLSAgICAwLDEwNiwwLDAsMTI1LDMsMCwxMjQsMCwwLDEwNiwxLDAsMTI0LDMsMCwKLSAgICAxMzEsMSwwLDEyNSw0LDAsMTI0LDAsMCwxMDYsMiwwLDEyNCwzLDAsMTMxLAotICAgIDEsMCwxMjQsMSwwLDk1LDMsMCwxMjQsMiwwLDExNSwxMDYsMCwxMjEsMjIsCi0gICAgMCwxMTYsNCwwLDEyNCwxLDAsMTA2LDMsMCwxMzEsMSwwLDEyNCwxLDAsCi0gICAgOTUsNSwwLDg3LDExMywxMTgsMCw0LDExNiw2LDAsMTA3LDEwLDAsMTE0LDEwMiwKLSAgICAwLDEsMSwxLDEyNCwxLDAsMTA2LDMsMCwxMjQsMSwwLDk1LDUsMCwKLSAgICA4OSwxMTMsMTE4LDAsODgsMTEwLDEyLDAsMTI0LDEsMCwxMDYsMywwLDEyNCwxLAotICAgIDAsOTUsNSwwLDEyNCwzLDAsMTI0LDEsMCw5NSw3LDAsMTI0LDAsMCwKLSAgICAxMDYsOCwwLDEyNCwzLDAsMTMxLDEsMCwxMTQsMTcwLDAsMTE2LDksMCwxMjQsCi0gICAgMSwwLDEwNiwzLDAsMTMxLDEsMCwxMDAsMSwwLDI1LDEwMywxLDAsMTI0LAotICAgIDEsMCw5NSwxMCwwLDExMCwyNSwwLDEyNCwxLDAsMTA2LDcsMCwxMDYsMTEsCi0gICAgMCwxMDAsMiwwLDEzMSwxLDAsMTAwLDEsMCwyNSwxMjQsMSwwLDk1LDcsCi0gICAgMCwxMjQsMCwwLDEyNCwxLDAsOTUsMTIsMCwxMTYsMTMsMCwxMTYsMTQsMCwKLSAgICAxMjQsNCwwLDEyNCwxLDAsMTA2LDE1LDAsMTMxLDMsMCwxLDEyNCwxLDAsCi0gICAgODMsNDAsMywwLDAsMCwxMTcsODIsMCwwLDAsNzIsMTAxLDEwOCwxMTIsMTAxLAotICAgIDExNCwzMiwxMDIsMTExLDExNCwzMiwxMDgsMTExLDk3LDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LAotICAgIDEwMSwzMiw5Nyw5OCwxMDgsMTAxLDMyLDExNiwxMTEsMzIsMTA0LDk3LDExMCwxMDAsMTA4LDEwMSwKLSAgICAzMiwxMDEsMTA1LDExNiwxMDQsMTAxLDExNCwzMiwxMTUsMTExLDExNywxMTQsOTksMTAxLDMyLDExMSwKLSAgICAxMTQsMzIsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwxMDgsMTAxLDExNSwxMTUsMTAsMzIsMzIsMzIsCi0gICAgMzIsMzIsMzIsMzIsMzIsMTA4LDExMSw5NywxMDAsMTA1LDExMCwxMDMsNDYsMTA1LDAsMCwKLSAgICAwLDAsMTE3LDEsMCwwLDAsNDYsNDAsMTYsMCwwLDAsMTE3LDgsMCwKLSAgICAwLDAsOTUsOTUsMTEwLDk3LDEwOSwxMDEsOTUsOTUsMTE3LDgsMCwwLDAsMTAzLAotICAgIDEwMSwxMTYsOTUsOTksMTExLDEwMCwxMDEsMTE3LDEyLDAsMCwwLDEwMywxMDEsMTE2LDk1LAotICAgIDEwMiwxMDUsMTA4LDEwMSwxMTAsOTcsMTA5LDEwMSwxMTcsOCwwLDAsMCw5NSw5NSwxMDIsCi0gICAgMTA1LDEwOCwxMDEsOTUsOTUsMTE3LDE3LDAsMCwwLDk5LDk3LDk5LDEwNCwxMDEsOTUsCi0gICAgMTAyLDExNCwxMTEsMTA5LDk1LDExNSwxMTEsMTE3LDExNCw5OSwxMDEsMTE3LDEwLDAsMCwwLAotICAgIDk1LDk1LDk5LDk3LDk5LDEwNCwxMDEsMTAwLDk1LDk1LDExNywxOSwwLDAsMCw3OCwKLSAgICAxMTEsMTE2LDczLDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsMTAxLDEwMCw2OSwxMTQsMTE0LAotICAgIDExMSwxMTQsMTE3LDExLDAsMCwwLDk1LDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwKLSAgICA5NSw5NSwxMTcsMTAsMCwwLDAsMTA1LDExNSw5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywKLSAgICAxMDEsMTE3LDExLDAsMCwwLDk1LDExMiw5NywxMTYsMTA0LDk1LDExNSwxMTIsMTA4LDEwNSwKLSAgICAxMTYsMTE3LDgsMCwwLDAsOTUsOTUsMTEyLDk3LDExNiwxMDQsOTUsOTUsMTE3LDEwLAotICAgIDAsMCwwLDExNCwxMTIsOTcsMTE0LDExNiwxMDUsMTE2LDEwNSwxMTEsMTEwLDExNywxMCwwLAotICAgIDAsMCw5NSw5NSwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDk1LDk1LDExNywyNSwwLDAsCi0gICAgMCw5NSw5OSw5NywxMDgsMTA4LDk1LDExOSwxMDUsMTE2LDEwNCw5NSwxMDIsMTE0LDk3LDEwOSwKLSAgICAxMDEsMTE1LDk1LDExNCwxMDEsMTA5LDExMSwxMTgsMTAxLDEwMCwxMTcsNCwwLDAsMCwxMDEsCi0gICAgMTIwLDEwMSw5OSwxMTcsOCwwLDAsMCw5NSw5NSwxMDAsMTA1LDk5LDExNiw5NSw5NSwKLSAgICA0MCw1LDAsMCwwLDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LDEwMiwxMTcsNiwKLSAgICAwLDAsMCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTcsMTAsMCwwLDAsMTE1LDExMSwKLSAgICAxMTcsMTE0LDk5LDEwMSwxMDgsMTAxLDExNSwxMTUsMTE3LDQsMCwwLDAsMTEwLDk3LDEwOSwKLSAgICAxMDEsMTE3LDExLDAsMCwwLDk5LDExMSwxMDAsMTAxLDk1LDExMSw5OCwxMDYsMTAxLDk5LAotICAgIDExNiw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLAotICAgIDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsCi0gICAgOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxMiwwLAotICAgIDAsMCw5NSwxMDgsMTExLDk3LDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw4MCwzLAotICAgIDAsMCwxMTUsMzIsMCwwLDAsMCw0LDksMSwxNSwxLDE4LDEsNiwKLSAgICAxLDMsMSwyMiwxLDEzLDEsMjAsMiwxMiwxLDksMSwxNSwxLDI4LAotICAgIDIsMjUsMSw5LDEsMTksMSwxMTcsMjYsMCwwLDAsOTUsNzYsMTExLDk3LAotICAgIDEwMCwxMDEsMTE0LDY2LDk3LDExNSwxMDUsOTksMTE1LDQ2LDk1LDEwOCwxMTEsOTcsMTAwLDk1LAotICAgIDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDc4LDcwLDQwLDksMCwwLDAsMTE3LDgsMCwKLSAgICAwLDAsOTUsOTUsMTEwLDk3LDEwOSwxMDEsOTUsOTUsMTE3LDEwLDAsMCwwLDk1LAotICAgIDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDk1LDExNywxMiwwLDAsMCw5NSw5NSwKLSAgICAxMTMsMTE3LDk3LDEwOCwxMTAsOTcsMTA5LDEwMSw5NSw5NSwxMTcsNywwLDAsMCw5NSwKLSAgICA5NSwxMDAsMTExLDk5LDk1LDk1LDExNywxMCwwLDAsMCwxMDUsMTE1LDk1LDExMiw5NywKLSAgICA5OSwxMDcsOTcsMTAzLDEwMSwxMTcsMjAsMCwwLDAsOTUsOTgsMTIxLDExNiwxMDEsMTE1LAotICAgIDk1LDEwMiwxMTQsMTExLDEwOSw5NSw5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSwxMTcsMTcsCi0gICAgMCwwLDAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTAyLDExMSwxMTQsOTUsMTA4LDExMSwKLSAgICA5NywxMDAsMTAxLDExNCwxMTcsNSwwLDAsMCw3MCw5NywxMDgsMTE1LDEwMSwxMTcsMTIsCi0gICAgMCwwLDAsOTUsMTA4LDExMSw5NywxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDAsCi0gICAgMSwwLDAsMCwxMTcsMTAsMCwwLDAsOTUsOTUsMTA4LDExMSw5OSw5NywxMDgsCi0gICAgMTE1LDk1LDk1LDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwKLSAgICAwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsCi0gICAgMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LAotICAgIDEzLDAsMCwwLDk1LDc2LDExMSw5NywxMDAsMTAxLDExNCw2Niw5NywxMTUsMTA1LDk5LAotICAgIDExNSwyMSwzLDAsMCwxMTUsMTAsMCwwLDAsMTYsMyw2LDIsMTIsOCwKLSAgICAxMiw0Niw2LDEsMTE3LDEzLDAsMCwwLDk1LDc2LDExMSw5NywxMDAsMTAxLDExNCwKLSAgICA2Niw5NywxMTUsMTA1LDk5LDExNSw5OSwxLDAsMCwwLDAsMCwwLDAsMSwKLSAgICAwLDAsMCwyLDAsMCwwLDY2LDAsMCwwLDExNSwxMDQsMCwwLDAsCi0gICAgMTI0LDAsMCw2OSwxMDEsMCwwLDkwLDEsMCwxMDAsMCwwLDkwLDIsMCwKLSAgICAxMDAsMSwwLDEwMCwyLDAsMTMyLDAsMCw5MCwzLDAsMTAwLDMsMCwxMDAsCi0gICAgNCwwLDEzMiwwLDAsOTAsNCwwLDEwMCw1LDAsMTAwLDYsMCwxMzIsMCwKLSAgICAwLDkwLDUsMCwxMDAsNywwLDEwMCw4LDAsMTMyLDAsMCw5MCw2LDAsCi0gICAgMTAwLDksMCwxMDAsMTAsMCwxMzIsMCwwLDkwLDcsMCwxMDAsMTEsMCwxMDAsCi0gICAgMTIsMCwxMzIsMCwwLDkwLDgsMCwxMDAsMTMsMCwxMDAsMTQsMCwxMzIsMCwKLSAgICAwLDkwLDksMCwxMDAsMTUsMCw4Myw0MCwxNiwwLDAsMCwxMTcsMTIsMCwKLSAgICAwLDAsODMsMTExLDExNywxMTQsOTksMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw5OSwyLAotICAgIDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwxLDAsMCwwLDY3LAotICAgIDAsMCwwLDExNSwxMCwwLDAsMCwxMTYsMCwwLDEzMCwxLDAsMTAwLDEsCi0gICAgMCw4Myw0MCwyLDAsMCwwLDExNywxMjEsMCwwLDAsNzksMTEyLDExNiwxMDUsCi0gICAgMTExLDExMCw5NywxMDgsMzIsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMzIsMTE2LDEwNCw5NywxMTYsCi0gICAgMzIsMTE0LDEwMSwxMTYsMTE3LDExNCwxMTAsMTE1LDMyLDExNiwxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLAotICAgIDEwNSwxMDIsMTA1LDk5LDk3LDExNiwxMDUsMTExLDExMCwzMiwxMTYsMTA1LDEwOSwxMDEsMzIsNDAsCi0gICAgOTcsMTEwLDMyLDEwNSwxMTAsMTE2LDQxLDMyLDEwMiwxMTEsMTE0LDMyLDExNiwxMDQsMTAxLDEwLAotICAgIDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDExNSwxMTIsMTAxLDk5LDEwNSwxMDIsMTA1LDEwMSwKLSAgICAxMDAsMzIsMTEyLDk3LDExNiwxMDQsNDQsMzIsMTE5LDEwNCwxMDEsMTE0LDEwMSwzMiwxMTIsOTcsCi0gICAgMTE2LDEwNCwzMiwxMDUsMTE1LDMyLDk3LDMyLDExNSwxMTYsMTE0LDQ2LDEwLDMyLDMyLDMyLAotICAgIDMyLDMyLDMyLDMyLDMyLDc4LDQwLDEsMCwwLDAsMTE3LDE5LDAsMCwwLAotICAgIDc4LDExMSwxMTYsNzMsMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiwxMDEsMTAwLDY5LDExNCwKLSAgICAxMTQsMTExLDExNCw0MCwyLDAsMCwwLDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LAotICAgIDEwMiwxMTcsNCwwLDAsMCwxMTIsOTcsMTE2LDEwNCw0MCwwLDAsMCwwLDQwLAotICAgIDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLAotICAgIDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsCi0gICAgMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxMCwwLDAsMCwxMTIsOTcsMTE2LDEwNCw5NSwKLSAgICAxMDksMTE2LDEwNSwxMDksMTAxLDEwNiwzLDAsMCwxMTUsMiwwLDAsMCwwLDQsCi0gICAgMTE3LDIzLDAsMCwwLDgzLDExMSwxMTcsMTE0LDk5LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwKLSAgICAxMTQsNDYsMTEyLDk3LDExNiwxMDQsOTUsMTA5LDExNiwxMDUsMTA5LDEwMSw5OSwyLDAsMCwKLSAgICAwLDAsMCwwLDAsMiwwLDAsMCwzLDAsMCwwLDY3LDAsMCwKLSAgICAwLDExNSwyMCwwLDAsMCwxMDUsMSwwLDEyNCwwLDAsMTA2LDAsMCwxMjQsCi0gICAgMSwwLDEzMSwxLDAsMTAwLDEsMCw1NCw4Myw0MCwyLDAsMCwwLDExNywKLSAgICAxMTQsMSwwLDAsNzksMTEyLDExNiwxMDUsMTExLDExMCw5NywxMDgsMzIsMTA5LDEwMSwxMTYsCi0gICAgMTA0LDExMSwxMDAsMzIsMTE0LDEwMSwxMTYsMTE3LDExNCwxMTAsMTA1LDExMCwxMDMsMzIsOTcsMzIsCi0gICAgMTA5LDEwMSwxMTYsOTcsMTAwLDk3LDExNiw5NywzMiwxMDAsMTA1LDk5LDExNiwzMiwxMDIsMTExLAotICAgIDExNCwzMiwxMTYsMTA0LDEwMSwzMiwxMTUsMTEyLDEwMSw5OSwxMDUsMTAyLDEwNSwxMDEsMTAwLDMyLAotICAgIDExMiw5NywxMTYsMTA0LDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDExNiwxMTEsMzIsCi0gICAgOTgsMTIxLDMyLDExNiwxMDQsMTAxLDMyLDExMiw5NywxMTYsMTA0LDMyLDQwLDExNSwxMTYsMTE0LAotICAgIDQxLDQ2LDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDgwLDExMSwxMTUsMTE1LDEwNSwKLSAgICA5OCwxMDgsMTAxLDMyLDEwNywxMDEsMTIxLDExNSw1OCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwKLSAgICAzMiwzMiw0NSwzMiwzOSwxMDksMTE2LDEwNSwxMDksMTAxLDM5LDMyLDQwLDEwOSw5NywxMTAsCi0gICAgMTAwLDk3LDExNiwxMTEsMTE0LDEyMSw0MSwzMiwxMDUsMTE1LDMyLDExNiwxMDQsMTAxLDMyLDExMCwKLSAgICAxMTcsMTA5LDEwMSwxMTQsMTA1LDk5LDMyLDExNiwxMDUsMTA5LDEwMSwxMTUsMTE2LDk3LDEwOSwxMTIsCi0gICAgMzIsMTExLDEwMiwzMiwxMDgsOTcsMTE1LDExNiwzMiwxMTUsMTExLDExNywxMTQsOTksMTAxLDEwLAotICAgIDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDk5LDExMSwxMDAsMTAxLDMyLDEwOSwKLSAgICAxMTEsMTAwLDEwNSwxMDIsMTA1LDk5LDk3LDExNiwxMDUsMTExLDExMCw1OSwxMCwzMiwzMiwzMiwKLSAgICAzMiwzMiwzMiwzMiwzMiw0NSwzMiwzOSwxMTUsMTA1LDEyMiwxMDEsMzksMzIsNDAsMTExLAotICAgIDExMiwxMTYsMTA1LDExMSwxMTAsOTcsMTA4LDQxLDMyLDEwNSwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsCi0gICAgMTE1LDEwNSwxMjIsMTAxLDMyLDEwNSwxMTAsMzIsOTgsMTIxLDExNiwxMDEsMTE1LDMyLDExMSwxMDIsCi0gICAgMzIsMTE2LDEwNCwxMDEsMzIsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwzMiw5OSwxMTEsMTAwLDEwMSwKLSAgICA0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw3MywxMDksMTEyLDEwOCwxMDEsCi0gICAgMTA5LDEwMSwxMTAsMTE2LDEwNSwxMTAsMTAzLDMyLDExNiwxMDQsMTA1LDExNSwzMiwxMDksMTAxLDExNiwKLSAgICAxMDQsMTExLDEwMCwzMiw5NywxMDgsMTA4LDExMSwxMTksMTE1LDMyLDExNiwxMDQsMTAxLDMyLDEwOCwKLSAgICAxMTEsOTcsMTAwLDEwMSwxMTQsMzIsMTE2LDExMSwzMiwxMTQsMTAxLDk3LDEwMCwzMiw5OCwxMjEsCi0gICAgMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSwzMiwxMDIsMTA1LDEwOCwxMDEsMTE1LDQ2LDEwLDMyLDMyLAotICAgIDMyLDMyLDMyLDMyLDMyLDMyLDExNyw1LDAsMCwwLDEwOSwxMTYsMTA1LDEwOSwxMDEsCi0gICAgNDAsMSwwLDAsMCwxMTcsMTAsMCwwLDAsMTEyLDk3LDExNiwxMDQsOTUsMTA5LAotICAgIDExNiwxMDUsMTA5LDEwMSw0MCwyLDAsMCwwLDExNyw0LDAsMCwwLDExNSwxMDEsCi0gICAgMTA4LDEwMiwxMTcsNCwwLDAsMCwxMTIsOTcsMTE2LDEwNCw0MCwwLDAsMCwwLAotICAgIDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsCi0gICAgMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwKLSAgICAxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxMCwwLDAsMCwxMTIsOTcsMTE2LDEwNCwKLSAgICA5NSwxMTUsMTE2LDk3LDExNiwxMTUsMTEyLDMsMCwwLDExNSwyLDAsMCwwLDAsCi0gICAgMTAsMTE3LDIzLDAsMCwwLDgzLDExMSwxMTcsMTE0LDk5LDEwMSw3NiwxMTEsOTcsMTAwLAotICAgIDEwMSwxMTQsNDYsMTEyLDk3LDExNiwxMDQsOTUsMTE1LDExNiw5NywxMTYsMTE1LDk5LDQsMCwKLSAgICAwLDAsMCwwLDAsMCw0LDAsMCwwLDMsMCwwLDAsNjcsMCwKLSAgICAwLDAsMTE1LDE2LDAsMCwwLDEyNCwwLDAsMTA2LDAsMCwxMjQsMiwwLAotICAgIDEyNCwzLDAsMTMxLDIsMCw4Myw0MCwxLDAsMCwwLDExNywyMjgsMCwwLAotICAgIDAsNzksMTEyLDExNiwxMDUsMTExLDExMCw5NywxMDgsMzIsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsCi0gICAgMzIsMTE5LDEwNCwxMDUsOTksMTA0LDMyLDExOSwxMTQsMTA1LDExNiwxMDEsMTE1LDMyLDEwMCw5NywKLSAgICAxMTYsOTcsMzIsNDAsOTgsMTIxLDExNiwxMDEsMTE1LDQxLDMyLDExNiwxMTEsMzIsOTcsMzIsCi0gICAgMTAyLDEwNSwxMDgsMTAxLDMyLDExMiw5NywxMTYsMTA0LDMyLDQwLDk3LDMyLDExNSwxMTYsMTE0LAotICAgIDQxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDczLDEwOSwxMTIsMTA4LAotICAgIDEwMSwxMDksMTAxLDExMCwxMTYsMTA1LDExMCwxMDMsMzIsMTE2LDEwNCwxMDUsMTE1LDMyLDEwOSwxMDEsCi0gICAgMTE2LDEwNCwxMTEsMTAwLDMyLDk3LDEwOCwxMDgsMTExLDExOSwxMTUsMzIsMTAyLDExMSwxMTQsMzIsCi0gICAgMTE2LDEwNCwxMDEsMzIsMTE5LDExNCwxMDUsMTE2LDEwNSwxMTAsMTAzLDMyLDExMSwxMDIsMzIsOTgsCi0gICAgMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsMzIsMTAyLDEwNSwxMDgsMTAxLDExNSw0NiwxMCwxMCwKLSAgICAzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw4NCwxMDQsMTAxLDMyLDExNSwxMTEsMTE3LDExNCwKLSAgICA5OSwxMDEsMzIsMTEyLDk3LDExNiwxMDQsMzIsMTA1LDExNSwzMiwxMTAsMTAxLDEwMSwxMDAsMTAxLAotICAgIDEwMCwzMiwxMDUsMTEwLDMyLDExMSwxMTQsMTAwLDEwMSwxMTQsMzIsMTE2LDExMSwzMiw5OSwxMTEsCi0gICAgMTE0LDExNCwxMDEsOTksMTE2LDEwOCwxMjEsMzIsMTE2LDExNCw5NywxMTAsMTE1LDEwMiwxMDEsMTE0LAotICAgIDMyLDExMiwxMDEsMTE0LDEwOSwxMDUsMTE1LDExNSwxMDUsMTExLDExMCwxMTUsMTAsMzIsMzIsMzIsCi0gICAgMzIsMzIsMzIsMzIsMzIsNDAsMSwwLDAsMCwxMTcsOCwwLDAsMCwxMTUsCi0gICAgMTAxLDExNiw5NSwxMDAsOTcsMTE2LDk3LDQwLDQsMCwwLDAsMTE3LDQsMCwwLAotICAgIDAsMTE1LDEwMSwxMDgsMTAyLDExNywxMSwwLDAsMCwxMTUsMTExLDExNywxMTQsOTksMTAxLAotICAgIDk1LDExMiw5NywxMTYsMTA0LDExNywxMCwwLDAsMCw5OSw5Nyw5OSwxMDQsMTAxLDk1LAotICAgIDExMiw5NywxMTYsMTA0LDExNyw0LDAsMCwwLDEwMCw5NywxMTYsOTcsNDAsMCwwLAotICAgIDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwKLSAgICAxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LAotICAgIDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTUsMCwwLDAsOTUsOTksCi0gICAgOTcsOTksMTA0LDEwMSw5NSw5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSwxMjQsMywwLAotICAgIDAsMTE1LDIsMCwwLDAsMCw4LDExNywyOCwwLDAsMCw4MywxMTEsMTE3LAotICAgIDExNCw5OSwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDk1LDk5LDk3LDk5LDEwNCwxMDEsCi0gICAgOTUsOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsOTksMywwLDAsMCwwLDAsCi0gICAgMCwwLDMsMCwwLDAsMSwwLDAsMCw2NywwLDAsMCwxMTUsMTAsCi0gICAgMCwwLDAsMTE2LDAsMCwxMzAsMSwwLDEwMCwxLDAsODMsNDAsMiwwLAotICAgIDAsMCwxMTcsMTUxLDAsMCwwLDc5LDExMiwxMTYsMTA1LDExMSwxMTAsOTcsMTA4LDMyLAotICAgIDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDMyLDExOSwxMDQsMTA1LDk5LDEwNCwzMiwxMTksMTE0LDEwNSwKLSAgICAxMTYsMTAxLDExNSwzMiwxMDAsOTcsMTE2LDk3LDMyLDQwLDk4LDEyMSwxMTYsMTAxLDExNSw0MSwKLSAgICAzMiwxMTYsMTExLDMyLDk3LDMyLDEwMiwxMDUsMTA4LDEwMSwzMiwxMTIsOTcsMTE2LDEwNCwzMiwKLSAgICA0MCw5NywzMiwxMTUsMTE2LDExNCw0MSw0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwKLSAgICAzMiwzMiw3MywxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LDEwNSwxMTAsMTAzLDMyLDExNiwKLSAgICAxMDQsMTA1LDExNSwzMiwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwzMiw5NywxMDgsMTA4LDExMSwxMTksCi0gICAgMTE1LDMyLDEwMiwxMTEsMTE0LDMyLDExNiwxMDQsMTAxLDMyLDExOSwxMTQsMTA1LDExNiwxMDUsMTEwLAotICAgIDEwMywzMiwxMTEsMTAyLDMyLDk4LDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDMyLDEwMiwxMDUsCi0gICAgMTA4LDEwMSwxMTUsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsNzgsNDAsCi0gICAgMSwwLDAsMCwxMTcsMTksMCwwLDAsNzgsMTExLDExNiw3MywxMDksMTEyLDEwOCwKLSAgICAxMDEsMTA5LDEwMSwxMTAsMTE2LDEwMSwxMDAsNjksMTE0LDExNCwxMTEsMTE0LDQwLDMsMCwwLAotICAgIDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDExNyw0LDAsMCwwLDExMiwKLSAgICA5NywxMTYsMTA0LDExNyw0LDAsMCwwLDEwMCw5NywxMTYsOTcsNDAsMCwwLDAsCi0gICAgMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsCi0gICAgMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwKLSAgICAxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsOCwwLDAsMCwxMTUsMTAxLDExNiwKLSAgICA5NSwxMDAsOTcsMTE2LDk3LDEzNCwzLDAsMCwxMTUsMiwwLDAsMCwwLDYsCi0gICAgMTE3LDIxLDAsMCwwLDgzLDExMSwxMTcsMTE0LDk5LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwKLSAgICAxMTQsNDYsMTE1LDEwMSwxMTYsOTUsMTAwLDk3LDExNiw5Nyw5OSwyLDAsMCwwLDAsCi0gICAgMCwwLDAsOSwwLDAsMCw0NCwwLDAsMCw2NywwLDAsMCwxMTUsCi0gICAgNjIsMSwwLDAsMTAwLDEsMCwxMDAsMiwwLDEwOCwwLDAsMTI1LDIsMCwKLSAgICAxMjQsMCwwLDEwNiwxLDAsMTI0LDEsMCwxMzEsMSwwLDEyNSwzLDAsMTIxLAotICAgIDE5LDAsMTI0LDAsMCwxMDYsMiwwLDEyNCwzLDAsMTMxLDEsMCwxMjUsNCwKLSAgICAwLDg3LDExMCw1OCwwLDQsMTE2LDMsMCwxMDcsMTAsMCwxMTQsMTA2LDAsMSwKLSAgICAxMjUsNSwwLDEsMTIyLDI2LDAsMTE2LDQsMCwxMDAsMywwLDEwMCw0LDAsCi0gICAgMTI0LDEsMCwxMzEsMSwxLDEyNCw1LDAsMTMwLDIsMCw4Nyw4OSwxMDAsMiwKLSAgICAwLDEwMCwyLDAsMTI1LDUsMCwxMjYsNSwwLDg4LDExMCwxLDAsODgsMTE2LAotICAgIDUsMCwxMDYsNiwwLDEyNCw0LDAsMTMxLDEsMCwxMDYsNywwLDEyNSw2LAotICAgIDAsMTIxLDE5LDAsMTI0LDIsMCwxMDYsOCwwLDEyNCw2LDAsMTMxLDEsMCwKLSAgICAxMjUsNywwLDg3LDExMCw1OCwwLDQsMTE2LDksMCwxMDcsMTAsMCwxMTQsMjA0LAotICAgIDAsMSwxMjUsNSwwLDEsMTIyLDI2LDAsMTE2LDQsMCwxMDAsNSwwLDEwMCwKLSAgICA0LDAsMTI0LDEsMCwxMzEsMSwxLDEyNCw1LDAsMTMwLDIsMCw4Nyw4OSwKLSAgICAxMDAsMiwwLDEwMCwyLDAsMTI1LDUsMCwxMjYsNSwwLDg4LDExMCwxLDAsCi0gICAgODgsMTE2LDUsMCwxMDYsMTAsMCwxMDAsMiwwLDEwMCw3LDAsMTMxLDIsMCwKLSAgICAxMjUsOCwwLDEyMSwzMCwwLDEyNCw4LDAsMTA2LDEzLDAsMTI0LDQsMCwxMDYsCi0gICAgMTMsMCwxMjQsNywwLDEwMCwxLDAsMjUsMTMxLDEsMCwxMzEsMSwwLDgzLAotICAgIDg3LDExMCw1OCwwLDQsMTE2LDE0LDAsMTA3LDEwLDAsMTE0LDU3LDEsMSwxMjUsCi0gICAgNSwwLDEsMTIyLDI2LDAsMTE2LDQsMCwxMDAsNiwwLDEwMCw0LDAsMTI0LAotICAgIDEsMCwxMzEsMSwxLDEyNCw1LDAsMTMwLDIsMCw4Nyw4OSwxMDAsMiwwLAotICAgIDEwMCwyLDAsMTI1LDUsMCwxMjYsNSwwLDg4LDExMCwxLDAsODgsMTAwLDIsCi0gICAgMCw4Myw0MCw4LDAsMCwwLDExNyw1MiwwLDAsMCw2NywxMTEsMTEwLDk5LAorICAgIDExMCwxMDAsMTAxLDExNCw0NiwxMDIsMTA1LDExMCwxMDAsOTUsMTE1LDExMiwxMDEsOTksOTksMywKKyAgICAwLDAsMCwwLDAsMCwwLDQsMCwwLDAsMywwLDAsMCw2NywKKyAgICAwLDAsMCwxMTUsNDUsMCwwLDAsMTI0LDAsMCwxMDYsMCwwLDEyNCwxLAorICAgIDAsMTI0LDIsMCwxMzEsMiwwLDEyNSwzLDAsMTI0LDMsMCwxMDAsMSwwLAorICAgIDEwNyw5LDAsMTE0LDM3LDAsMTI0LDMsMCwxMDYsMSwwLDgzLDEwMCwxLDAsCisgICAgODMsMTAwLDEsMCw4Myw0MSwyLDEyMiwxMDgsNzAsMTA1LDExMCwxMDAsMzIsMTA5LDExMSwKKyAgICAxMDAsMTE3LDEwOCwxMDEsMzIsMTEwLDk3LDEwOSwxMDEsMTAwLDMyLDEwNSwxMTAsMzIsMTE2LDEwNCwKKyAgICAxMDEsMzIsMTE0LDEwMSwxMDMsMTA1LDExNSwxMTYsMTE0LDEyMSw0NiwxMCwxMCwzMiwzMiwzMiwKKyAgICAzMiwzMiwzMiwzMiwzMiw4NCwxMDQsMTA1LDExNSwzMiwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwKKyAgICAzMiwxMDUsMTE1LDMyLDEwMCwxMDEsMTEyLDExNCwxMDEsOTksOTcsMTE2LDEwMSwxMDAsNDYsMzIsCisgICAgMzIsODUsMTE1LDEwMSwzMiwxMDEsMTIwLDEwMSw5OSw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwKKyAgICA0MCw0MSwzMiwxMDUsMTEwLDExNSwxMTYsMTAxLDk3LDEwMCw0NiwxMCwxMCwzMiwzMiwzMiwKKyAgICAzMiwzMiwzMiwzMiwzMiw3OCw0MSwyLDExNCwxNCwxLDAsMCwxMTQsMTcwLDAsCisgICAgMCwwLDQxLDQsMTE0LDEyLDEsMCwwLDExNCwxNTksMCwwLDAsMTE0LDM1LAorICAgIDAsMCwwLDExNCwxNzgsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwKKyAgICAwLDAsMTE0LDUsMCwwLDAsMTE0LDE1LDEsMCwwLDE1OCw1LDAsMCwKKyAgICAxMTUsOCwwLDAsMCwwLDcsMTgsMSwxMiwxLDcsMiwxMjIsMzMsODcsCisgICAgMTA1LDExMCwxMDAsMTExLDExOSwxMTUsODIsMTAxLDEwMywxMDUsMTE1LDExNiwxMTQsMTIxLDcwLDEwNSwKKyAgICAxMTAsMTAwLDEwMSwxMTQsNDYsMTAyLDEwNSwxMTAsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAorICAgIDQxLDEyLDExNCw1NywwLDAsMCwxMTQsNTYsMCwwLDAsMTE0LDU4LDAsMCwKKyAgICAwLDExNCw1OSwwLDAsMCwxMTQsMjksMSwwLDAsMTE0LDI4LDEsMCwwLAorICAgIDExNCwyNywxLDAsMCwxMTQsMTksMSwwLDAsMTE0LDI2LDEsMCwwLDExNCwKKyAgICAzMiwxLDAsMCwxMTQsMTQsMSwwLDAsMTE0LDE1LDEsMCwwLDExNCw0LAorICAgIDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsCisgICAgMCwwLDExNCwyMywxLDAsMCwxMDksNSwwLDAsMTE1LDIwLDAsMCwwLAorICAgIDEyLDIsNiwzLDYsMyw2LDIsNiwyLDE4LDcsMTgsMTUsMywxLAorICAgIDIxLDE0LDMsMSwxMTQsMjMsMSwwLDAsOTksMCwwLDAsMCwwLDAsCisgICAgMCwwLDAsMCwwLDAsMiwwLDAsMCw2NCwwLDAsMCwxMTUsNTIsCisgICAgMCwwLDAsMTAxLDAsMCw5MCwxLDAsMTAwLDAsMCw5MCwyLDAsMTAwLAorICAgIDEsMCw5MCwzLDAsMTAwLDIsMCwxMDAsMywwLDEzMiwwLDAsOTAsNCwKKyAgICAwLDEwMCw0LDAsMTAwLDUsMCwxMzIsMCwwLDkwLDUsMCwxMDEsNiwwLAorICAgIDkwLDcsMCwxMDAsNiwwLDgzLDQxLDcsMjE4LDEzLDk1LDc2LDExMSw5NywxMDAsCisgICAgMTAxLDExNCw2Niw5NywxMTUsMTA1LDk5LDExNSwxMjIsODMsNjYsOTcsMTE1LDEwMSwzMiw5OSwKKyAgICAxMDgsOTcsMTE1LDExNSwzMiwxMTEsMTAyLDMyLDk5LDExMSwxMDksMTA5LDExMSwxMTAsMzIsOTksCisgICAgMTExLDEwMCwxMDEsMzIsMTEwLDEwMSwxMDEsMTAwLDEwMSwxMDAsMzIsOTgsMTIxLDMyLDk4LDExMSwKKyAgICAxMTYsMTA0LDMyLDgzLDExMSwxMTcsMTE0LDk5LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsMzIsCisgICAgOTcsMTEwLDEwMCwxMCwzMiwzMiwzMiwzMiw4MywxMTEsMTE3LDExNCw5OSwxMDEsMTA4LDEwMSwKKyAgICAxMTUsMTE1LDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0Niw5OSwyLDAsCisgICAgMCwwLDAsMCwwLDAsNSwwLDAsMCwzLDAsMCwwLDY3LDAsCisgICAgMCwwLDExNSw4OCwwLDAsMCwxMTYsMCwwLDEyNCwwLDAsMTA2LDEsMCwKKyAgICAxMjQsMSwwLDEzMSwxLDAsMTMxLDEsMCwxMDAsMSwwLDI1LDEyNSwyLDAsCisgICAgMTI0LDIsMCwxMDYsMiwwLDEwMCwyLDAsMTAwLDEsMCwxMzEsMiwwLDEwMCwKKyAgICAzLDAsMjUsMTI1LDMsMCwxMjQsMSwwLDEwNiwzLDAsMTAwLDIsMCwxMzEsCisgICAgMSwwLDEwMCw0LDAsMjUsMTI1LDQsMCwxMjQsMywwLDEwMCw1LDAsMTA3LAorICAgIDIsMCwxMTEsODcsMCwxMjQsNCwwLDEwMCw1LDAsMTA3LDMsMCw4Myw0MSwKKyAgICA2LDEyMiwxNDEsNjcsMTExLDExMCw5OSwxMTQsMTAxLDExNiwxMDEsMzIsMTA1LDEwOSwxMTIsMTA4LAorICAgIDEwMSwxMDksMTAxLDExMCwxMTYsOTcsMTE2LDEwNSwxMTEsMTEwLDMyLDExMSwxMDIsMzIsNzMsMTEwLAorICAgIDExNSwxMTIsMTAxLDk5LDExNiw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsMTA1LDExNSw5NSwxMTIsCisgICAgOTcsOTksMTA3LDk3LDEwMywxMDEsMzIsOTgsMTIxLDMyLDk5LDEwNCwxMDEsOTksMTA3LDEwNSwKKyAgICAxMTAsMTAzLDMyLDEwNSwxMDIsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTE2LDEwNCwKKyAgICAxMDEsMzIsMTEyLDk3LDExNiwxMDQsMzIsMTE0LDEwMSwxMTYsMTE3LDExNCwxMTAsMTAxLDEwMCwzMiwKKyAgICA5OCwxMjEsMzIsMTAzLDEwMSwxMTYsOTUsMTAyLDEwNSwxMDgsMTAxLDExMCw5NywxMDksMTAxLDMyLAorICAgIDEwNCw5NywxMTUsMzIsOTcsMzIsMTAyLDEwNSwxMDgsMTAxLDExMCw5NywxMDksMTAxLDMyLDExMSwKKyAgICAxMDIsMzIsMzksOTUsOTUsMTA1LDExMCwxMDUsMTE2LDk1LDk1LDQ2LDExMiwxMjEsMzksNDYsCisgICAgMTE0LDI5LDAsMCwwLDExNCwxMTYsMCwwLDAsMTE0LDg0LDAsMCwwLDExNCwKKyAgICAxMTUsMCwwLDAsMTE0LDcyLDAsMCwwLDQxLDQsMTE0LDM4LDAsMCwwLAorICAgIDExNCwyMzksMCwwLDAsMTE0LDM0LDAsMCwwLDExNCwzMiwwLDAsMCw0MSwKKyAgICA1LDExNCw3MSwwLDAsMCwxMTQsMTU5LDAsMCwwLDExNCwxMzEsMCwwLDAsCisgICAgOTAsMTMsMTAyLDEwNSwxMDgsMTAxLDExMCw5NywxMDksMTAxLDk1LDk4LDk3LDExNSwxMDEsOTAsCisgICAgOSwxMTYsOTcsMTA1LDEwOCw5NSwxMTAsOTcsMTA5LDEwMSwxMTQsNCwwLDAsMCwxMTQsCisgICAgNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsMjIwLDAsMCwwLDE3Nyw1LAorICAgIDAsMCwxMTUsOCwwLDAsMCwwLDMsMjUsMSwyMiwxLDE5LDEsMTIyLAorICAgIDI0LDk1LDc2LDExMSw5NywxMDAsMTAxLDExNCw2Niw5NywxMTUsMTA1LDk5LDExNSw0NiwxMDUsCisgICAgMTE1LDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw5OSwyLDAsMCwwLDAsMCwKKyAgICAwLDAsMywwLDAsMCw0LDAsMCwwLDY3LDAsMCwwLDExNSw4MCwKKyAgICAwLDAsMCwxMjQsMCwwLDEwNiwwLDAsMTI0LDEsMCwxMDYsMSwwLDEzMSwKKyAgICAxLDAsMTI1LDIsMCwxMjQsMiwwLDEwMCwxLDAsMTA3LDgsMCwxMTQsNTcsCisgICAgMCwxMTYsMiwwLDEwMCwyLDAsMTA2LDMsMCwxMjQsMSwwLDEwNiwxLDAsCisgICAgMTMxLDEsMCwxMzEsMSwwLDEzMCwxLDAsMTEwLDAsMCwxMTYsNCwwLDExNiwKKyAgICA1LDAsMTI0LDIsMCwxMjQsMSwwLDEwNiw2LDAsMTMxLDMsMCwxLDEwMCwKKyAgICAxLDAsODMsNDEsMywxMjIsMTksNjksMTIwLDEwMSw5OSwxMTcsMTE2LDEwMSwzMiwxMTYsCisgICAgMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0Niw3OCwxMjIsNTIsOTksOTcsMTEwLAorICAgIDExMCwxMTEsMTE2LDMyLDEwOCwxMTEsOTcsMTAwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLAorICAgIDEyMywzMywxMTQsMTI1LDMyLDExOSwxMDQsMTAxLDExMCwzMiwxMDMsMTAxLDExNiw5NSw5OSwxMTEsCisgICAgMTAwLDEwMSw0MCw0MSwzMiwxMTQsMTAxLDExNiwxMTcsMTE0LDExMCwxMTUsMzIsNzgsMTExLDExMCwKKyAgICAxMDEsNDEsNywxMTQsMTYsMSwwLDAsMTE0LDU3LDAsMCwwLDExNCwxNTQsMCwKKyAgICAwLDAsMTE0LDQ3LDAsMCwwLDExNCwxMTQsMCwwLDAsMTE0LDE3NiwwLDAsCisgICAgMCwxMTQsNjMsMCwwLDAsNDEsMywxMTQsNzEsMCwwLDAsMTE0LDE4MCwwLAorICAgIDAsMCwxMTQsMTk1LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwKKyAgICAwLDExNCw1LDAsMCwwLDExNCwyLDEsMCwwLDE4NSw1LDAsMCwxMTUsCisgICAgMTAsMCwwLDAsMCwyLDE4LDEsMTIsMSw5LDEsMTgsMSwxMjIsMjUsCisgICAgOTUsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDY2LDk3LDExNSwxMDUsOTksMTE1LDQ2LDEwMSwxMjAsCisgICAgMTAxLDk5LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDc4LDQxLDgsMTE0LDU3LDAsMCwKKyAgICAwLDExNCw1NiwwLDAsMCwxMTQsNTgsMCwwLDAsMTE0LDU5LDAsMCwwLAorICAgIDExNCwyMjAsMCwwLDAsMTE0LDIsMSwwLDAsMTE0LDE4MSwwLDAsMCwxMTQsCisgICAgNSwxLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwKKyAgICAwLDAsMCwxMTQsNSwwLDAsMCwxMTQsMzMsMSwwLDAsMTcyLDUsMCwKKyAgICAwLDExNSw4LDAsMCwwLDEyLDMsNiwyLDEyLDgsMTIsOCwxMTQsMzMsCisgICAgMSwwLDAsOTksMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsCisgICAgNCwwLDAsMCw2NCwwLDAsMCwxMTUsMTA2LDAsMCwwLDEwMSwwLDAsCisgICAgOTAsMSwwLDEwMCwwLDAsOTAsMiwwLDEwMCwxLDAsMTAwLDIsMCwxMzIsCisgICAgMCwwLDkwLDMsMCwxMDAsMywwLDEwMCw0LDAsMTMyLDAsMCw5MCw0LAorICAgIDAsMTAwLDUsMCwxMDAsNiwwLDEzMiwwLDAsOTAsNSwwLDEwMCw3LDAsCisgICAgMTAwLDgsMCwxMzIsMCwwLDkwLDYsMCwxMDAsOSwwLDEwMCwxMCwwLDEzMiwKKyAgICAwLDAsOTAsNywwLDEwMCwxMSwwLDEwMCwxOCwwLDEwMCwxMywwLDEwMCwxNCwKKyAgICAwLDEzMiwwLDEsOTAsOCwwLDEwMCwxNSwwLDEwMCwxNiwwLDEzMiwwLDAsCisgICAgOTAsOSwwLDEwMCwxNywwLDgzLDQxLDE5LDIxOCwxMiw4MywxMTEsMTE3LDExNCw5OSwKKyAgICAxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDk5LDIsMCwwLDAsMCwwLDAsMCwKKyAgICAyLDAsMCwwLDEsMCwwLDAsNjcsMCwwLDAsMTE1LDEwLDAsMCwKKyAgICAwLDExNiwwLDAsMTMwLDEsMCwxMDAsMSwwLDgzLDQxLDIsMTIyLDE3OCw3OSwKKyAgICAxMTIsMTE2LDEwNSwxMTEsMTEwLDk3LDEwOCwzMiwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwzMiwxMTYsCisgICAgMTA0LDk3LDExNiwzMiwxMTQsMTAxLDExNiwxMTcsMTE0LDExMCwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsCisgICAgMTA5LDExMSwxMDAsMTA1LDEwMiwxMDUsOTksOTcsMTE2LDEwNSwxMTEsMTEwLDMyLDExNiwxMDUsMTA5LAorICAgIDEwMSwzMiw0MCw5NywxMTAsMzIsMTA1LDExMCwxMTYsNDEsMzIsMTAyLDExMSwxMTQsMzIsMTE2LAorICAgIDEwNCwxMDEsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTE1LDExMiwxMDEsOTksMTA1LAorICAgIDEwMiwxMDUsMTAxLDEwMCwzMiwxMTIsOTcsMTE2LDEwNCw0NCwzMiwxMTksMTA0LDEwMSwxMTQsMTAxLAorICAgIDMyLDExMiw5NywxMTYsMTA0LDMyLDEwNSwxMTUsMzIsOTcsMzIsMTE1LDExNiwxMTQsNDYsMTAsCisgICAgMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsODIsOTcsMTA1LDExNSwxMDEsMTE1LDMyLAorICAgIDczLDc5LDY5LDExNCwxMTQsMTExLDExNCwzMiwxMTksMTA0LDEwMSwxMTAsMzIsMTE2LDEwNCwxMDEsCisgICAgMzIsMTEyLDk3LDExNiwxMDQsMzIsOTksOTcsMTEwLDExMCwxMTEsMTE2LDMyLDk4LDEwMSwzMiwKKyAgICAxMDQsOTcsMTEwLDEwMCwxMDgsMTAxLDEwMCw0NiwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwKKyAgICAzMiw3OCw0MSwxLDIxOCw3LDczLDc5LDY5LDExNCwxMTQsMTExLDExNCw0MSwyLDExNCwKKyAgICA3MSwwLDAsMCwxMTQsMzUsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsCisgICAgMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDEwLDExMiw5NywxMTYsMTA0LDk1LDEwOSwKKyAgICAxMTYsMTA1LDEwOSwxMDEsMTk4LDUsMCwwLDExNSwyLDAsMCwwLDAsNiwxMjIsCisgICAgMjMsODMsMTExLDExNywxMTQsOTksMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMTIsOTcsCisgICAgMTE2LDEwNCw5NSwxMDksMTE2LDEwNSwxMDksMTAxLDk5LDIsMCwwLDAsMCwwLDAsCisgICAgMCwyLDAsMCwwLDMsMCwwLDAsNjcsMCwwLDAsMTE1LDIwLDAsCisgICAgMCwwLDEwNSwxLDAsMTI0LDAsMCwxMDYsMCwwLDEyNCwxLDAsMTMxLDEsCisgICAgMCwxMDAsMSwwLDU0LDgzLDQxLDIsOTcsMTcwLDEsMCwwLDc5LDExMiwxMTYsCisgICAgMTA1LDExMSwxMTAsOTcsMTA4LDMyLDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDMyLDExNCwxMDEsMTE2LAorICAgIDExNywxMTQsMTEwLDEwNSwxMTAsMTAzLDMyLDk3LDMyLDEwOSwxMDEsMTE2LDk3LDEwMCw5NywxMTYsCisgICAgOTcsMzIsMTAwLDEwNSw5OSwxMTYsMzIsMTAyLDExMSwxMTQsMzIsMTE2LDEwNCwxMDEsMzIsMTE1LAorICAgIDExMiwxMDEsOTksMTA1LDEwMiwxMDUsMTAxLDEwMCwzMiwxMTIsOTcsMTE2LDEwNCwxMCwzMiwzMiwKKyAgICAzMiwzMiwzMiwzMiwzMiwzMiwxMTYsMTExLDMyLDk4LDEyMSwzMiwxMTYsMTA0LDEwMSwzMiwKKyAgICAxMTIsOTcsMTE2LDEwNCwzMiw0MCwxMTUsMTE2LDExNCw0MSw0NiwxMCwzMiwzMiwzMiwzMiwKKyAgICAzMiwzMiwzMiwzMiw4MCwxMTEsMTE1LDExNSwxMDUsOTgsMTA4LDEwMSwzMiwxMDcsMTAxLDEyMSwKKyAgICAxMTUsNTgsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsNDUsMzIsMzksMTA5LDExNiwKKyAgICAxMDUsMTA5LDEwMSwzOSwzMiw0MCwxMDksOTcsMTEwLDEwMCw5NywxMTYsMTExLDExNCwxMjEsNDEsCisgICAgMzIsMTA1LDExNSwzMiwxMTYsMTA0LDEwMSwzMiwxMTAsMTE3LDEwOSwxMDEsMTE0LDEwNSw5OSwzMiwKKyAgICAxMTYsMTA1LDEwOSwxMDEsMTE1LDExNiw5NywxMDksMTEyLDMyLDExMSwxMDIsMzIsMTA4LDk3LDExNSwKKyAgICAxMTYsMzIsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwKKyAgICAzMiwzMiwzMiw5OSwxMTEsMTAwLDEwMSwzMiwxMDksMTExLDEwMCwxMDUsMTAyLDEwNSw5OSw5NywKKyAgICAxMTYsMTA1LDExMSwxMTAsNTksMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsNDUsMzIsCisgICAgMzksMTE1LDEwNSwxMjIsMTAxLDM5LDMyLDQwLDExMSwxMTIsMTE2LDEwNSwxMTEsMTEwLDk3LDEwOCwKKyAgICA0MSwzMiwxMDUsMTE1LDMyLDExNiwxMDQsMTAxLDMyLDExNSwxMDUsMTIyLDEwMSwzMiwxMDUsMTEwLAorICAgIDMyLDk4LDEyMSwxMTYsMTAxLDExNSwzMiwxMTEsMTAyLDMyLDExNiwxMDQsMTAxLDMyLDExNSwxMTEsCisgICAgMTE3LDExNCw5OSwxMDEsMzIsOTksMTExLDEwMCwxMDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsCisgICAgMzIsMzIsMzIsMzIsNzMsMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiwxMDUsMTEwLDEwMywKKyAgICAzMiwxMTYsMTA0LDEwNSwxMTUsMzIsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMzIsOTcsMTA4LDEwOCwKKyAgICAxMTEsMTE5LDExNSwzMiwxMTYsMTA0LDEwMSwzMiwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDMyLDExNiwKKyAgICAxMTEsMzIsMTE0LDEwMSw5NywxMDAsMzIsOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsMzIsCisgICAgMTAyLDEwNSwxMDgsMTAxLDExNSw0NiwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw4MiwKKyAgICA5NywxMDUsMTE1LDEwMSwxMTUsMzIsNzMsNzksNjksMTE0LDExNCwxMTEsMTE0LDMyLDExOSwxMDQsCisgICAgMTAxLDExMCwzMiwxMTYsMTA0LDEwMSwzMiwxMTIsOTcsMTE2LDEwNCwzMiw5OSw5NywxMTAsMTEwLAorICAgIDExMSwxMTYsMzIsOTgsMTAxLDMyLDEwNCw5NywxMTAsMTAwLDEwOCwxMDEsMTAwLDQ2LDEwLDMyLAorICAgIDMyLDMyLDMyLDMyLDMyLDMyLDMyLDExNCwxODQsMCwwLDAsNDEsMSwxMTQsMzYsCisgICAgMSwwLDAsNDEsMiwxMTQsNzEsMCwwLDAsMTE0LDM1LDAsMCwwLDExNCwKKyAgICA0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCwxMCwKKyAgICAxMTIsOTcsMTE2LDEwNCw5NSwxMTUsMTE2LDk3LDExNiwxMTUsMjA2LDUsMCwwLDExNSwyLAorICAgIDAsMCwwLDAsMTEsMTIyLDIzLDgzLDExMSwxMTcsMTE0LDk5LDEwMSw3NiwxMTEsOTcsCisgICAgMTAwLDEwMSwxMTQsNDYsMTEyLDk3LDExNiwxMDQsOTUsMTE1LDExNiw5NywxMTYsMTE1LDk5LDQsCisgICAgMCwwLDAsMCwwLDAsMCw0LDAsMCwwLDMsMCwwLDAsNjcsCisgICAgMCwwLDAsMTE1LDE2LDAsMCwwLDEyNCwwLDAsMTA2LDAsMCwxMjQsMiwKKyAgICAwLDEyNCwzLDAsMTMxLDIsMCw4Myw0MSwxLDEyMiwyMjgsNzksMTEyLDExNiwxMDUsCisgICAgMTExLDExMCw5NywxMDgsMzIsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMzIsMTE5LDEwNCwxMDUsOTksCisgICAgMTA0LDMyLDExOSwxMTQsMTA1LDExNiwxMDEsMTE1LDMyLDEwMCw5NywxMTYsOTcsMzIsNDAsOTgsCisgICAgMTIxLDExNiwxMDEsMTE1LDQxLDMyLDExNiwxMTEsMzIsOTcsMzIsMTAyLDEwNSwxMDgsMTAxLDMyLAorICAgIDExMiw5NywxMTYsMTA0LDMyLDQwLDk3LDMyLDExNSwxMTYsMTE0LDQxLDQ2LDEwLDEwLDMyLAorICAgIDMyLDMyLDMyLDMyLDMyLDMyLDMyLDczLDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsCisgICAgMTA1LDExMCwxMDMsMzIsMTE2LDEwNCwxMDUsMTE1LDMyLDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDMyLAorICAgIDk3LDEwOCwxMDgsMTExLDExOSwxMTUsMzIsMTAyLDExMSwxMTQsMzIsMTE2LDEwNCwxMDEsMzIsMTE5LAorICAgIDExNCwxMDUsMTE2LDEwNSwxMTAsMTAzLDMyLDExMSwxMDIsMzIsOTgsMTIxLDExNiwxMDEsOTksMTExLAorICAgIDEwMCwxMDEsMzIsMTAyLDEwNSwxMDgsMTAxLDExNSw0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwKKyAgICAzMiwzMiwzMiw4NCwxMDQsMTAxLDMyLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsMzIsMTEyLDk3LAorICAgIDExNiwxMDQsMzIsMTA1LDExNSwzMiwxMTAsMTAxLDEwMSwxMDAsMTAxLDEwMCwzMiwxMDUsMTEwLDMyLAorICAgIDExMSwxMTQsMTAwLDEwMSwxMTQsMzIsMTE2LDExMSwzMiw5OSwxMTEsMTE0LDExNCwxMDEsOTksMTE2LAorICAgIDEwOCwxMjEsMzIsMTE2LDExNCw5NywxMTAsMTE1LDEwMiwxMDEsMTE0LDMyLDExMiwxMDEsMTE0LDEwOSwKKyAgICAxMDUsMTE1LDExNSwxMDUsMTExLDExMCwxMTUsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsCisgICAgNDEsMSwyMTgsOCwxMTUsMTAxLDExNiw5NSwxMDAsOTcsMTE2LDk3LDQxLDQsMTE0LDcxLAorICAgIDAsMCwwLDExNCwxNDIsMCwwLDAsOTAsMTAsOTksOTcsOTksMTA0LDEwMSw5NSwKKyAgICAxMTIsOTcsMTE2LDEwNCwxMTQsNTMsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsCisgICAgMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDE1LDk1LDk5LDk3LDk5LDEwNCwxMDEsCisgICAgOTUsOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsMjE5LDUsMCwwLDExNSwyLDAsCisgICAgMCwwLDAsOCwxMjIsMjgsODMsMTExLDExNywxMTQsOTksMTAxLDc2LDExMSw5NywxMDAsCisgICAgMTAxLDExNCw0Niw5NSw5OSw5Nyw5OSwxMDQsMTAxLDk1LDk4LDEyMSwxMTYsMTAxLDk5LDExMSwKKyAgICAxMDAsMTAxLDk5LDMsMCwwLDAsMCwwLDAsMCwzLDAsMCwwLDEsCisgICAgMCwwLDAsNjcsMCwwLDAsMTE1LDQsMCwwLDAsMTAwLDEsMCw4MywKKyAgICA0MSwyLDEyMiwxNTAsNzksMTEyLDExNiwxMDUsMTExLDExMCw5NywxMDgsMzIsMTA5LDEwMSwxMTYsCisgICAgMTA0LDExMSwxMDAsMzIsMTE5LDEwNCwxMDUsOTksMTA0LDMyLDExOSwxMTQsMTA1LDExNiwxMDEsMTE1LAorICAgIDMyLDEwMCw5NywxMTYsOTcsMzIsNDAsOTgsMTIxLDExNiwxMDEsMTE1LDQxLDMyLDExNiwxMTEsCisgICAgMzIsOTcsMzIsMTAyLDEwNSwxMDgsMTAxLDMyLDExMiw5NywxMTYsMTA0LDMyLDQwLDk3LDMyLAorICAgIDExNSwxMTYsMTE0LDQxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDczLAorICAgIDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsMTA1LDExMCwxMDMsMzIsMTE2LDEwNCwxMDUsMTE1LAorICAgIDMyLDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDMyLDk3LDEwOCwxMDgsMTExLDExOSwxMTUsMzIsMTAyLAorICAgIDExMSwxMTQsMzIsMTE2LDEwNCwxMDEsMzIsMTE5LDExNCwxMDUsMTE2LDEwNSwxMTAsMTAzLDMyLDExMSwKKyAgICAxMDIsMzIsOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsMzIsMTAyLDEwNSwxMDgsMTAxLDExNSwKKyAgICA0NiwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw3OCwxMTQsNCwwLDAsMCwKKyAgICA0MSwzLDExNCw3MSwwLDAsMCwxMTQsMzUsMCwwLDAsMTE0LDUzLDAsMCwKKyAgICAwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLAorICAgIDExNCwzOCwxLDAsMCwyMjksNSwwLDAsMTE1LDAsMCwwLDAsMTIyLDIxLAorICAgIDgzLDExMSwxMTcsMTE0LDk5LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsMTE1LDEwMSwxMTYsCisgICAgOTUsMTAwLDk3LDExNiw5Nyw5OSwyLDAsMCwwLDAsMCwwLDAsNSwwLAorICAgIDAsMCwxNiwwLDAsMCw2NywwLDAsMCwxMTUsMTA1LDAsMCwwLDEyNCwKKyAgICAwLDAsMTA2LDAsMCwxMjQsMSwwLDEzMSwxLDAsMTI1LDIsMCwxMjEsMTksCisgICAgMCwxMjQsMCwwLDEwNiwxLDAsMTI0LDIsMCwxMzEsMSwwLDEyNSwzLDAsCisgICAgODcsMTEwLDU4LDAsNCwxMTYsMiwwLDEwNywxMCwwLDExNCw5NCwwLDEsMTI1LAorICAgIDQsMCwxLDEyMiwyNiwwLDExNiwzLDAsMTAwLDEsMCwxMDAsMiwwLDEyNCwKKyAgICAxLDAsMTMxLDEsMSwxMjQsNCwwLDEzMCwyLDAsODcsODksMTAwLDMsMCwKKyAgICAxMDAsMywwLDEyNSw0LDAsMTI2LDQsMCw4OCwxMTAsMSwwLDg4LDExNiw0LAorICAgIDAsMTI0LDMsMCwxMzEsMSwwLDgzLDQxLDQsMTIyLDUyLDY3LDExMSwxMTAsOTksCiAgICAgMTE0LDEwMSwxMTYsMTAxLDMyLDEwNSwxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LDk3LDExNiwKICAgICAxMDUsMTExLDExMCwzMiwxMTEsMTAyLDMyLDczLDExMCwxMTUsMTEyLDEwMSw5OSwxMTYsNzYsMTExLAogICAgIDk3LDEwMCwxMDEsMTE0LDQ2LDEwMywxMDEsMTE2LDk1LDExNSwxMTEsMTE3LDExNCw5OSwxMDEsNDYsCi0gICAgMTA1LDAsMCwwLDAsNzgsMTE3LDM5LDAsMCwwLDExNSwxMTEsMTE3LDExNCw5OSwKLSAgICAxMDEsMzIsMTEwLDExMSwxMTYsMzIsOTcsMTE4LDk3LDEwNSwxMDgsOTcsOTgsMTA4LDEwMSwzMiwKLSAgICAxMTYsMTA0LDExNCwxMTEsMTE3LDEwMywxMDQsMzIsMTAzLDEwMSwxMTYsOTUsMTAwLDk3LDExNiw5NywKLSAgICA0MCw0MSwxMTcsNCwwLDAsMCwxMTAsOTcsMTA5LDEwMSwxMTcsMjUsMCwwLDAsCi0gICAgNzAsOTcsMTA1LDEwOCwxMDEsMTAwLDMyLDExNiwxMTEsMzIsMTAwLDEwMSwxMTYsMTAxLDk5LDExNiwKLSAgICAzMiwxMDEsMTEwLDk5LDExMSwxMDAsMTA1LDExMCwxMDMsMTE3LDI4LDAsMCwwLDcwLDk3LAotICAgIDEwNSwxMDgsMTAxLDEwMCwzMiwxMTYsMTExLDMyLDEwMCwxMDEsOTksMTExLDEwMCwxMDEsMzIsMTE1LAotICAgIDExMSwxMTcsMTE0LDk5LDEwMSwzMiwxMDIsMTA1LDEwOCwxMDEsODQsNDAsMTUsMCwwLDAsCi0gICAgMTE3LDgsMCwwLDAsMTE2LDExMSwxMDcsMTAxLDExMCwxMDUsMTIyLDEwMSwxMTcsMTIsMCwKLSAgICAwLDAsMTAzLDEwMSwxMTYsOTUsMTAyLDEwNSwxMDgsMTAxLDExMCw5NywxMDksMTAxLDExNyw4LAotICAgIDAsMCwwLDEwMywxMDEsMTE2LDk1LDEwMCw5NywxMTYsOTcsMTE3LDcsMCwwLDAsCi0gICAgNzMsNzksNjksMTE0LDExNCwxMTEsMTE0LDExNywxMSwwLDAsMCw3MywxMDksMTEyLDExMSwKLSAgICAxMTQsMTE2LDY5LDExNCwxMTQsMTExLDExNCwxMTcsMywwLDAsMCw5NSwxMDUsMTExLDExNywKLSAgICA3LDAsMCwwLDY2LDEyMSwxMTYsMTAxLDExNSw3Myw3OSwxMTcsOCwwLDAsMCwKLSAgICAxMTQsMTAxLDk3LDEwMCwxMDgsMTA1LDExMCwxMDEsMTE3LDE1LDAsMCwwLDEwMCwxMDEsMTE2LAotICAgIDEwMSw5OSwxMTYsOTUsMTAxLDExMCw5OSwxMTEsMTAwLDEwNSwxMTAsMTAzLDExNywxMSwwLDAsCi0gICAgMCw4MywxMjEsMTEwLDExNiw5NywxMjAsNjksMTE0LDExNCwxMTEsMTE0LDExNywyNSwwLDAsCi0gICAgMCw3MywxMTAsOTksMTE0LDEwMSwxMDksMTAxLDExMCwxMTYsOTcsMTA4LDc4LDEwMSwxMTksMTA4LAotICAgIDEwNSwxMTAsMTAxLDY4LDEwMSw5OSwxMTEsMTAwLDEwMSwxMTQsMTE3LDQsMCwwLDAsNzgsCi0gICAgMTExLDExMCwxMDEsMTE3LDQsMCwwLDAsODQsMTE0LDExNywxMDEsMTE3LDYsMCwwLAotICAgIDAsMTAwLDEwMSw5OSwxMTEsMTAwLDEwMSwxMTcsMTgsMCwwLDAsODUsMTEwLDEwNSw5OSwKLSAgICAxMTEsMTAwLDEwMSw2OCwxMDEsOTksMTExLDEwMCwxMDEsNjksMTE0LDExNCwxMTEsMTE0LDQwLDksCi0gICAgMCwwLDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDExNyw4LDAsMCwKLSAgICAwLDEwMiwxMTcsMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSwxMTcsOCwwLDAsMCwxMTYsMTExLAotICAgIDEwNywxMDEsMTEwLDEwNSwxMjIsMTAxLDExNyw0LDAsMCwwLDExMiw5NywxMTYsMTA0LDExNywKLSAgICAxMiwwLDAsMCwxMTUsMTExLDExNywxMTQsOTksMTAxLDk1LDk4LDEyMSwxMTYsMTAxLDExNSwKLSAgICAxMTcsMywwLDAsMCwxMDEsMTIwLDk5LDExNywxMCwwLDAsMCwxMTQsMTAxLDk3LAotICAgIDEwMCwxMTUsMTExLDExNywxMTQsOTksMTAxLDExNyw4LDAsMCwwLDEwMSwxMTAsOTksMTExLAotICAgIDEwMCwxMDUsMTEwLDEwMywxMTcsMTUsMCwwLDAsMTEwLDEwMSwxMTksMTA4LDEwNSwxMTAsMTAxLAotICAgIDk1LDEwMCwxMDEsOTksMTExLDEwMCwxMDEsMTE0LDQwLDAsMCwwLDAsNDAsMCwwLAotICAgIDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LAotICAgIDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LAotICAgIDExNCw5NywxMTIsNjIsMTE3LDEwLDAsMCwwLDEwMywxMDEsMTE2LDk1LDExNSwxMTEsMTE3LAotICAgIDExNCw5OSwxMDEsMTQzLDMsMCwwLDExNSwzOCwwLDAsMCwwLDIsMTIsMSwKLSAgICAxNSwxLDMsMSwxOSwxLDE4LDEsOSwxLDMxLDEsMTgsMSwzLDEsCi0gICAgMTksMSwxOCwxLDksMSwzMSwxLDE4LDEsMywxLDMwLDEsMTgsMSwKLSAgICA5LDEsMTE3LDIzLDAsMCwwLDgzLDExMSwxMTcsMTE0LDk5LDEwMSw3NiwxMTEsOTcsCi0gICAgMTAwLDEwMSwxMTQsNDYsMTAzLDEwMSwxMTYsOTUsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw5OSwyLAotICAgIDAsMCwwLDAsMCwwLDAsMTIsMCwwLDAsNDUsMCwwLDAsNjcsCi0gICAgMCwwLDAsMTE1LDUyLDIsMCwwLDEyNCwwLDAsMTA2LDAsMCwxMjQsMSwKLSAgICAwLDEzMSwxLDAsMTI1LDIsMCwxMDAsMTAsMCwxMjUsMywwLDEyMSwxNiwwLAotICAgIDExNiwyLDAsMTI0LDIsMCwxMzEsMSwwLDEyNSw0LDAsODcsMTEwLDI0LDAsCi0gICAgNCwxMTYsMywwLDEwNywxMCwwLDExNCw2MywwLDEsMSwxLDEwMCwxMCwwLAotICAgIDEyNSw0LDAsODksMTEwLDE0LDEsODgsMTIxLDE5LDAsMTI0LDAsMCwxMDYsNCwKLSAgICAwLDEyNCwyLDAsMTMxLDEsMCwxMjUsNSwwLDg3LDExMCwxOCwwLDQsMTE2LAotICAgIDMsMCwxMDcsMTAsMCwxMTQsMTAzLDAsMSwxLDEsODksMTEwLDIzMCwwLDg4LAotICAgIDExNiw1LDAsMTI0LDUsMCwxMDAsMSwwLDI1LDEzMSwxLDAsMTI1LDMsMCwKLSAgICAxMjEsMTksMCwxMjQsMCwwLDEwNiw2LDAsMTI0LDQsMCwxMzEsMSwwLDEyNSwKLSAgICA2LDAsODcsMTEwLDE4LDAsNCwxMTYsNywwLDEwNywxMCwwLDExNCwxNTksMCwKLSAgICAxLDEsMSw4OSwxMTAsMTc0LDAsODgsMTIxLDI4LDAsMTI0LDAsMCwxMDYsOCwKLSAgICAwLDEyNCwxLDAsMTI0LDYsMCwxMjQsNCwwLDEyNCw1LDAsMTMxLDQsMCwKLSAgICAxMjUsNywwLDg3LDExMCwyNCwwLDQsMTE2LDksMCwxMTYsMTAsMCwxMDIsMiwKLSAgICAwLDEwNywxMCwwLDExNCwyMTQsMCwxLDEsMSw4OSwxMTAsMTE5LDAsODgsMTE2LAotICAgIDExLDAsMTAwLDIsMCwxMjQsNCwwLDEyNCwyLDAsMTMxLDMsMCwxLDExNiwKLSAgICAxMiwwLDEwNiwxMywwLDEyNCw3LDAsMTMxLDEsMCwxMjUsOCwwLDExNiwxNCwKLSAgICAwLDEyNCw4LDAsMTE2LDE1LDAsMTMxLDIsMCwxMTQsMzgsMSwxMTYsMTYsMCwKLSAgICAxMDYsMTcsMCwxMjQsOCwwLDEyNCwyLDAsMTMxLDIsMCwxLDExNiwxMSwwLAotICAgIDEwMCwzLDAsMTI0LDQsMCwxMzEsMiwwLDEsMTI0LDgsMCw4MywxMDAsNCwKLSAgICAwLDEyNSw5LDAsMTE2LDksMCwxMjQsOSwwLDEwNiwxOCwwLDEyNCw0LDAsCi0gICAgMTMxLDEsMCwxMDAsNSwwLDEyNCwxLDAsMTAwLDYsMCwxMjQsNCwwLDEzMSwKLSAgICAxLDIsMTMwLDEsMCwxMjQsMCwwLDEwNiw2LDAsMTI0LDIsMCwxMzEsMSwKLSAgICAwLDEyNSwxMCwwLDExNiwxOSwwLDExNiwyMCwwLDEyNCwxMCwwLDEyNCwyLDAsCi0gICAgMTAwLDcsMCwxMDAsOCwwLDEwMCwxMSwwLDEzMSw0LDEsMTI1LDExLDAsMTE2LAotICAgIDExLDAsMTAwLDMsMCwxMjQsMiwwLDEzMSwyLDAsMSwxMTYsMjIsMCwxMDYsCi0gICAgMjMsMCwxMiwxMTQsNDgsMiwxMjQsNCwwLDEwMCwxMCwwLDEwNyw5LDAsMTE0LAotICAgIDQ4LDIsMTI0LDMsMCwxMDAsMTAsMCwxMDcsOSwwLDExNCw0OCwyLDExNiwyNCwKLSAgICAwLDExNiwyNSwwLDEzMSwxLDAsMTI1LDYsMCwxMjQsNiwwLDEwNiwyNiwwLAotICAgIDExNiwyNywwLDEyNCwzLDAsMTMxLDEsMCwxMzEsMSwwLDEsMTI0LDYsMCwKLSAgICAxMDYsMjYsMCwxMTYsMjcsMCwxMTYsMjgsMCwxMjQsMTAsMCwxMzEsMSwwLDEzMSwKLSAgICAxLDAsMTMxLDEsMCwxLDEyNCw2LDAsMTA2LDI2LDAsMTE2LDEyLDAsMTA2LAotICAgIDI5LDAsMTI0LDExLDAsMTMxLDEsMCwxMzEsMSwwLDEsMTIxLDM2LDAsMTI0LAotICAgIDAsMCwxMDYsMzAsMCwxMjQsMiwwLDEyNCw0LDAsMTI0LDYsMCwxMzEsMywKLSAgICAwLDEsMTE2LDExLDAsMTAwLDksMCwxMjQsNCwwLDEzMSwyLDAsMSw4NywKLSAgICAxMTMsNDgsMiw0LDExNiwzLDAsMTA3LDEwLDAsMTE0LDQ0LDIsMSwxLDEsCi0gICAgODksMTEzLDQ4LDIsODgsMTEwLDAsMCwxMjQsMTEsMCw4Myw0MCwxMiwwLDAsCi0gICAgMCwxMTcsMTkwLDAsMCwwLDY3LDExMSwxMTAsOTksMTE0LDEwMSwxMTYsMTAxLDMyLDEwNSwKLSAgICAxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LDk3LDExNiwxMDUsMTExLDExMCwzMiwxMTEsMTAyLAotICAgIDMyLDczLDExMCwxMTUsMTEyLDEwMSw5OSwxMTYsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDEwMywKLSAgICAxMDEsMTE2LDk1LDk5LDExMSwxMDAsMTAxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLAotICAgIDMyLDMyLDgyLDEwMSw5NywxMDAsMTA1LDExMCwxMDMsMzIsMTExLDEwMiwzMiw5OCwxMjEsMTE2LAotICAgIDEwMSw5OSwxMTEsMTAwLDEwMSwzMiwxMTQsMTAxLDExMywxMTcsMTA1LDExNCwxMDEsMTE1LDMyLDExMiwKLSAgICA5NywxMTYsMTA0LDk1LDExNSwxMTYsOTcsMTE2LDExNSwzMiwxMTYsMTExLDMyLDk4LDEwMSwzMiwKLSAgICAxMDUsMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiwxMDEsMTAwLDQ2LDMyLDg0LDExMSwzMiwKLSAgICAxMTksMTE0LDEwNSwxMTYsMTAxLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDk4LDEyMSwKLSAgICAxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDQ0LDMyLDExNSwxMDEsMTE2LDk1LDEwMCw5NywxMTYsOTcsCi0gICAgMzIsMTA5LDExNywxMTUsMTE2LDMyLDk3LDEwOCwxMTUsMTExLDMyLDk4LDEwMSwzMiwxMDUsMTA5LAotICAgIDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiwxMDEsMTAwLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLAotICAgIDMyLDMyLDMyLDMyLDExNyw1LDAsMCwwLDEwOSwxMTYsMTA1LDEwOSwxMDEsMTE3LDEzLAotICAgIDAsMCwwLDEyMywxMjUsMzIsMTA5LDk3LDExNiw5OSwxMDQsMTAxLDExNSwzMiwxMjMsMTI1LAotICAgIDExNywxOSwwLDAsMCw5OSwxMTEsMTAwLDEwMSwzMiwxMTEsOTgsMTA2LDEwMSw5OSwxMTYsCi0gICAgMzIsMTAyLDExNCwxMTEsMTA5LDMyLDEyMywxMjUsMTE3LDIxLDAsMCwwLDc4LDExMSwxMTAsCi0gICAgNDUsOTksMTExLDEwMCwxMDEsMzIsMTExLDk4LDEwNiwxMDEsOTksMTE2LDMyLDEwNSwxMTAsMzIsCi0gICAgMTIzLDEyNSwxMTcsNCwwLDAsMCwxMTAsOTcsMTA5LDEwMSwxMTcsNCwwLDAsMCwKLSAgICAxMTIsOTcsMTE2LDEwNCwxMTcsNCwwLDAsMCwxMDEsMTIwLDEwMSw5OSwxMTcsMTIsMCwKLSAgICAwLDAsMTAwLDExMSwxMTAsMTE2LDk1LDEwNSwxMTAsMTA0LDEwMSwxMTQsMTA1LDExNiwxMTcsMTAsCi0gICAgMCwwLDAsMTE5LDExNCwxMTEsMTE2LDEwMSwzMiwxMjMsMzMsMTE0LDEyNSw3OCw4NCw0MCwKLSAgICAzMSwwLDAsMCwxMTcsMTIsMCwwLDAsMTAzLDEwMSwxMTYsOTUsMTAyLDEwNSwxMDgsCi0gICAgMTAxLDExMCw5NywxMDksMTAxLDExNyw0LDAsMCwwLDc4LDExMSwxMTAsMTAxLDExNywxNywKLSAgICAwLDAsMCw5OSw5Nyw5OSwxMDQsMTAxLDk1LDEwMiwxMTQsMTExLDEwOSw5NSwxMTUsMTExLAotICAgIDExNywxMTQsOTksMTAxLDExNywxOSwwLDAsMCw3OCwxMTEsMTE2LDczLDEwOSwxMTIsMTA4LAotICAgIDEwMSwxMDksMTAxLDExMCwxMTYsMTAxLDEwMCw2OSwxMTQsMTE0LDExMSwxMTQsMTE3LDEwLDAsMCwKLSAgICAwLDExMiw5NywxMTYsMTA0LDk1LDExNSwxMTYsOTcsMTE2LDExNSwxMTcsMywwLDAsMCwKLSAgICAxMDUsMTEwLDExNiwxMTcsOCwwLDAsMCwxMDMsMTAxLDExNiw5NSwxMDAsOTcsMTE2LDk3LAotICAgIDExNyw3LDAsMCwwLDczLDc5LDY5LDExNCwxMTQsMTExLDExNCwxMTcsMjAsMCwwLAotICAgIDAsOTUsOTgsMTIxLDExNiwxMDEsMTE1LDk1LDEwMiwxMTQsMTExLDEwOSw5NSw5OCwxMjEsMTE2LAotICAgIDEwMSw5OSwxMTEsMTAwLDEwMSwxMTcsMTEsMCwwLDAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiwKLSAgICA2OSwxMTQsMTE0LDExMSwxMTQsMTE3LDgsMCwwLDAsNjksNzksNzAsNjksMTE0LDExNCwKLSAgICAxMTEsMTE0LDExNywxNiwwLDAsMCw5NSwxMTgsMTAxLDExNCw5OCwxMTEsMTE1LDEwMSw5NSwKLSAgICAxMDksMTAxLDExNSwxMTUsOTcsMTAzLDEwMSwxMTcsNywwLDAsMCwxMDksOTcsMTE0LDExNSwKLSAgICAxMDQsOTcsMTA4LDExNyw1LDAsMCwwLDEwOCwxMTEsOTcsMTAwLDExNSwxMTcsMTAsMCwKLSAgICAwLDAsMTA1LDExNSwxMDUsMTEwLDExNSwxMTYsOTcsMTEwLDk5LDEwMSwxMTcsMTAsMCwwLAotICAgIDAsOTUsOTksMTExLDEwMCwxMDEsOTUsMTE2LDEyMSwxMTIsMTAxLDExNyw0LDAsMCwwLAotICAgIDk1LDEwNSwxMDksMTEyLDExNywxNiwwLDAsMCw5NSwxMDIsMTA1LDEyMCw5NSw5OSwxMTEsCi0gICAgOTUsMTAyLDEwNSwxMDgsMTAxLDExMCw5NywxMDksMTAxLDExNyw2LDAsMCwwLDEwMiwxMTEsCi0gICAgMTE0LDEwOSw5NywxMTYsMTE3LDI1LDAsMCwwLDk1LDk5LDk3LDEwOCwxMDgsOTUsMTE5LAotICAgIDEwNSwxMTYsMTA0LDk1LDEwMiwxMTQsOTcsMTA5LDEwMSwxMTUsOTUsMTE0LDEwMSwxMDksMTExLDExOCwKLSAgICAxMDEsMTAwLDExNyw3LDAsMCwwLDk5LDExMSwxMDksMTEyLDEwNSwxMDgsMTAxLDExNyw0LAotICAgIDAsMCwwLDg0LDExNCwxMTcsMTAxLDExNywzLDAsMCwwLDExNSwxMjEsMTE1LDExNywKLSAgICAxOSwwLDAsMCwxMDAsMTExLDExMCwxMTYsOTUsMTE5LDExNCwxMDUsMTE2LDEwMSw5NSw5OCwKLSAgICAxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSwxMTcsOSwwLDAsMCw5OCwxMjEsMTE2LDEwMSwKLSAgICA5NywxMTQsMTE0LDk3LDEyMSwxMTcsMTIsMCwwLDAsOTUsNzcsNjUsNzEsNzMsNjcsCi0gICAgOTUsNjYsODksODQsNjksODMsMTE3LDYsMCwwLDAsMTAxLDEyMCwxMTYsMTAxLDExMCwKLSAgICAxMDAsMTE3LDcsMCwwLDAsOTUsMTE5LDk1LDEwOCwxMTEsMTEwLDEwMywxMTcsMywwLAotICAgIDAsMCwxMDgsMTAxLDExMCwxMTcsNSwwLDAsMCwxMDAsMTE3LDEwOSwxMTIsMTE1LDExNywKLSAgICAxNSwwLDAsMCw5NSw5OSw5Nyw5OSwxMDQsMTAxLDk1LDk4LDEyMSwxMTYsMTAxLDk5LAotICAgIDExMSwxMDAsMTAxLDQwLDEyLDAsMCwwLDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LAotICAgIDEwMiwxMTcsOCwwLDAsMCwxMDIsMTE3LDEwOCwxMDgsMTEwLDk3LDEwOSwxMDEsMTE3LDExLAotICAgIDAsMCwwLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsOTUsMTEyLDk3LDExNiwxMDQsMTE3LDEyLAotICAgIDAsMCwwLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsOTUsMTA5LDExNiwxMDUsMTA5LDEwMSwxMTcsCi0gICAgMTMsMCwwLDAsOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsOTUsMTEyLDk3LDExNiwKLSAgICAxMDQsMTE3LDIsMCwwLDAsMTE1LDExNiwxMTcsNCwwLDAsMCwxMDAsOTcsMTE2LAotICAgIDk3LDExNywxMCwwLDAsMCw5OCwxMjEsMTE2LDEwMSwxMTUsOTUsMTAwLDk3LDExNiw5NywKLSAgICAxMTcsNSwwLDAsMCwxMDIsMTExLDExNywxMTAsMTAwLDExNywzLDAsMCwwLDEwOSwKLSAgICAxMTUsMTAzLDExNywxMiwwLDAsMCwxMTUsMTExLDExNywxMTQsOTksMTAxLDk1LDk4LDEyMSwKLSAgICAxMTYsMTAxLDExNSwxMTcsMTEsMCwwLDAsOTksMTExLDEwMCwxMDEsOTUsMTExLDk4LDEwNiwKLSAgICAxMDEsOTksMTE2LDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwKLSAgICAwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsCi0gICAgMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LAotICAgIDgsMCwwLDAsMTAzLDEwMSwxMTYsOTUsOTksMTExLDEwMCwxMDEsMTY1LDMsMCwwLAotICAgIDExNSw5OCwwLDAsMCwwLDcsMTUsMSw2LDEsMywxLDE2LDEsMTMsCi0gICAgMSwxMSwyLDMsMSwxOSwxLDEzLDEsNSwyLDE2LDEsMywxLDE5LAotICAgIDEsMTMsMSw1LDIsMywxLDEyLDEsMywxLDEzLDEsMTksMSw1LAotICAgIDIsOSwxLDcsMSwxNSwxLDE1LDEsMTYsMSw2LDEsNywxLDQsCi0gICAgMiw2LDEsMTgsMSwxNSwxLDE1LDEsNiwxLDEyLDEsOSwxLDEzLAotICAgIDEsMjIsMSwxMiwxLDEyLDEsMTksMSwyNSwxLDIyLDEsMywxLDE5LAotICAgIDEsMTcsMSwxMywxLDgsMSwxMTcsMjEsMCwwLDAsODMsMTExLDExNywxMTQsCi0gICAgOTksMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMDMsMTAxLDExNiw5NSw5OSwxMTEsMTAwLAotICAgIDEwMSw5OSwyLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwyLDAsCi0gICAgMCwwLDY3LDAsMCwwLDExNSwxMywwLDAsMCwxMjQsMCwwLDEwNiwwLAotICAgIDAsMTI0LDEsMCwxMzEsMSwwLDgzLDQwLDEsMCwwLDAsMTE3LDAsMSwKLSAgICAwLDAsNjcsMTExLDExMCw5OSwxMTQsMTAxLDExNiwxMDEsMzIsMTA1LDEwOSwxMTIsMTA4LDEwMSwKLSAgICAxMDksMTAxLDExMCwxMTYsOTcsMTE2LDEwNSwxMTEsMTEwLDMyLDExMSwxMDIsMzIsNzYsMTExLDk3LAotICAgIDEwMCwxMDEsMTE0LDQ2LDEwOCwxMTEsOTcsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ2LAotICAgIDEwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDgyLDEwMSwxMTMsMTE3LDEwNSwxMTQsCi0gICAgMTAxLDExNSwzMiw2OSwxMjAsMTAxLDk5LDExNywxMTYsMTA1LDExMSwxMTAsNzYsMTExLDk3LDEwMCwKLSAgICAxMDEsMTE0LDQ2LDEwMywxMDEsMTE2LDk1LDEwMiwxMDUsMTA4LDEwMSwxMTAsOTcsMTA5LDEwMSwzMiwKLSAgICA5NywxMTAsMTAwLDMyLDgyLDEwMSwxMTUsMTExLDExNywxMTQsOTksMTAxLDc2LDExMSw5NywxMDAsCi0gICAgMTAxLDExNCw0NiwxMDMsMTAxLDExNiw5NSwxMDAsOTcsMTE2LDk3LDMyLDExNiwxMTEsMzIsOTgsCi0gICAgMTAxLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDEwNSwxMDksMTEyLDEwOCwxMDEsMTA5LAotICAgIDEwMSwxMTAsMTE2LDEwMSwxMDAsMzIsMTE2LDExMSwzMiwxMDgsMTExLDk3LDEwMCwzMiwxMTUsMTExLAotICAgIDExNywxMTQsOTksMTAxLDMyLDk5LDExMSwxMDAsMTAxLDQ2LDMyLDg1LDExNSwxMDEsMzIsMTExLAotICAgIDEwMiwzMiw5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSwzMiwxMDUsMTE1LDMyLDEwMCwxMDUsCi0gICAgOTksMTE2LDk3LDExNiwxMDEsMTAwLDMyLDk4LDEyMSwzMiwxMTksMTA0LDEwMSwxMTYsMTA0LDEwMSwKLSAgICAxMTQsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTAzLDEwMSwxMTYsOTUsOTksMTExLAotICAgIDEwMCwxMDEsMzIsMTE3LDExNSwxMDEsMTE1LDQ3LDExOSwxMTQsMTA1LDExNiwxMDEsMTE1LDMyLDk4LAotICAgIDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLAotICAgIDMyLDMyLDQwLDEsMCwwLDAsMTE3LDEyLDAsMCwwLDk1LDEwOCwxMTEsOTcsCi0gICAgMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQwLDIsMCwwLDAsMTE3LDQsMCwKLSAgICAwLDAsMTE1LDEwMSwxMDgsMTAyLDExNyw4LDAsMCwwLDEwMiwxMTcsMTA4LDEwOCwxMTAsCi0gICAgOTcsMTA5LDEwMSw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsCi0gICAgMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LAotICAgIDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywKLSAgICAxMSwwLDAsMCwxMDgsMTExLDk3LDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwyMjcsCi0gICAgMywwLDAsMTE1LDIsMCwwLDAsMCw4LDExNywyNCwwLDAsMCw4MywKLSAgICAxMTEsMTE3LDExNCw5OSwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDEwOCwxMTEsOTcsMTAwLAotICAgIDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDc4LDQwLDEwLDAsMCwwLDExNyw4LDAsCi0gICAgMCwwLDk1LDk1LDExMCw5NywxMDksMTAxLDk1LDk1LDExNywxMCwwLDAsMCw5NSwKLSAgICA5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSw5NSwxMTcsMTIsMCwwLDAsOTUsOTUsCi0gICAgMTEzLDExNyw5NywxMDgsMTEwLDk3LDEwOSwxMDEsOTUsOTUsMTE3LDEwLDAsMCwwLDExMiwKLSAgICA5NywxMTYsMTA0LDk1LDEwOSwxMTYsMTA1LDEwOSwxMDEsMTE3LDEwLDAsMCwwLDExMiw5NywKLSAgICAxMTYsMTA0LDk1LDExNSwxMTYsOTcsMTE2LDExNSwxMTcsMTUsMCwwLDAsOTUsOTksOTcsCi0gICAgOTksMTA0LDEwMSw5NSw5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSwxMTcsOCwwLDAsCi0gICAgMCwxMTUsMTAxLDExNiw5NSwxMDAsOTcsMTE2LDk3LDExNywxMCwwLDAsMCwxMDMsMTAxLAotICAgIDExNiw5NSwxMTUsMTExLDExNywxMTQsOTksMTAxLDExNyw4LDAsMCwwLDEwMywxMDEsMTE2LAotICAgIDk1LDk5LDExMSwxMDAsMTAxLDExNywxMSwwLDAsMCwxMDgsMTExLDk3LDEwMCw5NSwxMDksCi0gICAgMTExLDEwMCwxMTcsMTA4LDEwMSw0MCwxLDAsMCwwLDExNywxMCwwLDAsMCw5NSwKLSAgICA5NSwxMDgsMTExLDk5LDk3LDEwOCwxMTUsOTUsOTUsNDAsMCwwLDAsMCw0MCwwLAotICAgIDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwKLSAgICAxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwKLSAgICAxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTIsMCwwLDAsODMsMTExLDExNywxMTQsOTksMTAxLAotICAgIDc2LDExMSw5NywxMDAsMTAxLDExNCwxMDQsMywwLDAsMTE1LDE0LDAsMCwwLDE2LAotICAgIDIsMTIsNiwxMiwxMiwxMiwxMCwxMiw5LDEyLDIyLDEyLDYyLDExNywxMiwwLAotICAgIDAsMCw4MywxMTEsMTE3LDExNCw5OSwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDk5LDEsCi0gICAgMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDQsMCwwLDAsMiwKLSAgICAwLDAsMCwxMTUsOTIsMCwwLDAsMTI0LDAsMCw2OSwxMDEsMCwwLDkwLAorICAgIDEyMiwzOSwxMTUsMTExLDExNywxMTQsOTksMTAxLDMyLDExMCwxMTEsMTE2LDMyLDk3LDExOCw5NywKKyAgICAxMDUsMTA4LDk3LDk4LDEwOCwxMDEsMzIsMTE2LDEwNCwxMTQsMTExLDExNywxMDMsMTA0LDMyLDEwMywKKyAgICAxMDEsMTE2LDk1LDEwMCw5NywxMTYsOTcsNDAsNDEsMTE0LDY3LDAsMCwwLDc4LDQxLAorICAgIDUsMTE0LDIzOSwwLDAsMCwyMTgsOCwxMDMsMTAxLDExNiw5NSwxMDAsOTcsMTE2LDk3LAorICAgIDExNCw0MCwwLDAsMCwxMTQsMTU0LDAsMCwwLDExNCwyMDQsMCwwLDAsNDEsCisgICAgNSwxMTQsNzEsMCwwLDAsMTE0LDE1OSwwLDAsMCwxMTQsMzUsMCwwLDAsCisgICAgMTE0LDIwMiwwLDAsMCwyMTgsMywxMDEsMTIwLDk5LDExNCw0LDAsMCwwLDExNCwKKyAgICA0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwxNywxLDAsMCwyMzYsNSwKKyAgICAwLDAsMTE1LDE0LDAsMCwwLDAsMiwxNSwxLDMsMSwxOSwxLDE4LAorICAgIDEsOSwxLDMxLDEsMTIyLDIzLDgzLDExMSwxMTcsMTE0LDk5LDEwMSw3NiwxMTEsOTcsCisgICAgMTAwLDEwMSwxMTQsNDYsMTAzLDEwMSwxMTYsOTUsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwyMTgsOSwKKyAgICA5NSwxMTEsMTEyLDExNiwxMDUsMTA5LDEwNSwxMjIsMTAxLDExNCwyOSwwLDAsMCw5OSwzLAorICAgIDAsMCwwLDEsMCwwLDAsNCwwLDAsMCw5LDAsMCwwLDY3LAorICAgIDAsMCwwLDExNSwzMSwwLDAsMCwxMTYsMCwwLDExNiwxLDAsMTI0LDEsCisgICAgMCwxMjQsMiwwLDEwMCwxLDAsMTAwLDIsMCwxMDAsMywwLDEwMCw0LDAsCisgICAgMTI0LDMsMCwxMzEsNCwyLDgzLDQxLDUsMTIyLDEzMCw4MiwxMDEsMTE2LDExNywxMTQsCisgICAgMTEwLDMyLDExNiwxMDQsMTAxLDMyLDk5LDExMSwxMDAsMTAxLDMyLDExMSw5OCwxMDYsMTAxLDk5LAorICAgIDExNiwzMiw5OSwxMTEsMTA5LDExMiwxMDUsMTA4LDEwMSwxMDAsMzIsMTAyLDExNCwxMTEsMTA5LDMyLAorICAgIDExNSwxMTEsMTE3LDExNCw5OSwxMDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsCisgICAgMzIsODQsMTA0LDEwMSwzMiwzOSwxMDAsOTcsMTE2LDk3LDM5LDMyLDk3LDExNCwxMDMsMTE3LAorICAgIDEwOSwxMDEsMTEwLDExNiwzMiw5OSw5NywxMTAsMzIsOTgsMTAxLDMyLDk3LDExMCwxMjEsMzIsCisgICAgMTExLDk4LDEwNiwxMDEsOTksMTE2LDMyLDExNiwxMjEsMTEyLDEwMSwzMiwxMTYsMTA0LDk3LDExNiwKKyAgICAzMiw5OSwxMTEsMTA5LDExMiwxMDUsMTA4LDEwMSw0MCw0MSwzMiwxMTUsMTE3LDExMiwxMTIsMTExLAorICAgIDExNCwxMTYsMTE1LDQ2LDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDExNCwxNzYsMCwKKyAgICAwLDAsMjE4LDEyLDEwMCwxMTEsMTEwLDExNiw5NSwxMDUsMTEwLDEwNCwxMDEsMTE0LDEwNSwxMTYsCisgICAgODQsMTE0LDExOCwwLDAsMCw0MSwyLDExNCwxMTQsMCwwLDAsMjE4LDcsOTksCisgICAgMTExLDEwOSwxMTIsMTA1LDEwOCwxMDEsNDEsNCwxMTQsNzEsMCwwLDAsMTE0LDUzLDAsCisgICAgMCwwLDExNCwzNSwwLDAsMCwxMTQsNDIsMSwwLDAsMTE0LDQsMCwwLAorICAgIDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDE0LDExNSwxMTEsMTE3LAorICAgIDExNCw5OSwxMDEsOTUsMTE2LDExMSw5NSw5OSwxMTEsMTAwLDEwMSwyNDYsNSwwLDAsMTE1LAorICAgIDQsMCwwLDAsMCw1LDE4LDEsMTIyLDI3LDgzLDExMSwxMTcsMTE0LDk5LDEwMSwKKyAgICA3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw5NSwxMTYsMTExLAorICAgIDk1LDk5LDExMSwxMDAsMTAxLDk5LDIsMCwwLDAsMCwwLDAsMCwxMCwwLAorICAgIDAsMCw0MywwLDAsMCw2NywwLDAsMCwxMTUsMTc3LDEsMCwwLDEyNCwKKyAgICAwLDAsMTA2LDAsMCwxMjQsMSwwLDEzMSwxLDAsMTI1LDIsMCwxMDAsMSwKKyAgICAwLDEyNSwzLDAsMTIxLDE2LDAsMTE2LDEsMCwxMjQsMiwwLDEzMSwxLDAsCisgICAgMTI1LDQsMCw4NywxMTAsMjQsMCw0LDExNiwyLDAsMTA3LDEwLDAsMTE0LDYzLAorICAgIDAsMSwxLDEsMTAwLDEsMCwxMjUsNCwwLDg5LDExMCwyMDIsMCw4OCwxMjEsCisgICAgMTksMCwxMjQsMCwwLDEwNiwzLDAsMTI0LDIsMCwxMzEsMSwwLDEyNSw1LAorICAgIDAsODcsMTEwLDE4LDAsNCwxMTYsNCwwLDEwNywxMCwwLDExNCwxMDMsMCwxLAorICAgIDEsMSw4OSwxMTAsMTYyLDAsODgsMTE2LDUsMCwxMjQsNSwwLDEwMCwyLDAsCisgICAgMjUsMTMxLDEsMCwxMjUsMywwLDEyMSwxOSwwLDEyNCwwLDAsMTA2LDYsMCwKKyAgICAxMjQsNCwwLDEzMSwxLDAsMTI1LDYsMCw4NywxMTAsMTgsMCw0LDExNiw3LAorICAgIDAsMTA3LDEwLDAsMTE0LDE1OSwwLDEsMSwxLDg5LDExMCwxMDYsMCw4OCwxMjEsCisgICAgMzQsMCwxMTYsOCwwLDEyNCw2LDAsMTAwLDMsMCwxMjQsNSwwLDEwMCw0LAorICAgIDAsMTI0LDEsMCwxMDAsNSwwLDEyNCw0LDAsMTMxLDEsMywxMjUsNywwLAorICAgIDg3LDExMCwyNCwwLDQsMTE2LDksMCwxMTYsMTAsMCwxMDIsMiwwLDEwNywxMCwKKyAgICAwLDExNCwyMjAsMCwxLDEsMSw4OSwxMTAsNDUsMCw4OCwxMTYsMTEsMCwxMDAsCisgICAgNiwwLDEyNCw0LDAsMTI0LDIsMCwxMzEsMywwLDEsMTE2LDEyLDAsMTI0LAorICAgIDcsMCwxMDAsNCwwLDEyNCwxLDAsMTAwLDcsMCwxMjQsNCwwLDEwMCw4LAorICAgIDAsMTI0LDIsMCwxMzEsMSwzLDgzLDEyNCwwLDAsMTA2LDYsMCwxMjQsMiwKKyAgICAwLDEzMSwxLDAsMTI1LDgsMCwxMjQsMCwwLDEwNiwxMywwLDEyNCw4LDAsCisgICAgMTI0LDIsMCwxMzEsMiwwLDEyNSw5LDAsMTE2LDExLDAsMTAwLDksMCwxMjQsCisgICAgMiwwLDEzMSwyLDAsMSwxMTYsMTQsMCwxMDYsMTUsMCwxMiwxMTQsMTczLDEsCisgICAgMTI0LDQsMCwxMDAsMSwwLDEwNyw5LDAsMTE0LDE3MywxLDEyNCwzLDAsMTAwLAorICAgIDEsMCwxMDcsOSwwLDExNCwxNzMsMSwxMTYsMTYsMCwxMjQsOSwwLDEyNCwzLAorICAgIDAsMTE2LDE3LDAsMTI0LDgsMCwxMzEsMSwwLDEzMSwzLDAsMTI1LDYsMCwKKyAgICAxMjEsMzYsMCwxMjQsMCwwLDEwNiwxOCwwLDEyNCwyLDAsMTI0LDQsMCwxMjQsCisgICAgNiwwLDEzMSwzLDAsMSwxMTYsMTEsMCwxMDAsMTAsMCwxMjQsNCwwLDEzMSwKKyAgICAyLDAsMSw4NywxMTMsMTczLDEsNCwxMTYsMiwwLDEwNywxMCwwLDExNCwxNjksCisgICAgMSwxLDEsMSw4OSwxMTMsMTczLDEsODgsMTEwLDAsMCwxMjQsOSwwLDgzLAorICAgIDQxLDExLDEyMiwxOTAsNjcsMTExLDExMCw5OSwxMTQsMTAxLDExNiwxMDEsMzIsMTA1LDEwOSwxMTIsCisgICAgMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsOTcsMTE2LDEwNSwxMTEsMTEwLDMyLDExMSwxMDIsMzIsNzMsCisgICAgMTEwLDExNSwxMTIsMTAxLDk5LDExNiw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsMTAzLDEwMSwxMTYsCisgICAgOTUsOTksMTExLDEwMCwxMDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsCisgICAgODIsMTAxLDk3LDEwMCwxMDUsMTEwLDEwMywzMiwxMTEsMTAyLDMyLDk4LDEyMSwxMTYsMTAxLDk5LAorICAgIDExMSwxMDAsMTAxLDMyLDExNCwxMDEsMTEzLDExNywxMDUsMTE0LDEwMSwxMTUsMzIsMTEyLDk3LDExNiwKKyAgICAxMDQsOTUsMTE1LDExNiw5NywxMTYsMTE1LDMyLDExNiwxMTEsMzIsOTgsMTAxLDMyLDEwNSwxMDksCisgICAgMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LDEwMSwxMDAsNDYsMzIsODQsMTExLDMyLDExOSwxMTQsCisgICAgMTA1LDExNiwxMDEsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsOTgsMTIxLDExNiwxMDEsCisgICAgOTksMTExLDEwMCwxMDEsNDQsMzIsMTE1LDEwMSwxMTYsOTUsMTAwLDk3LDExNiw5NywzMiwxMDksCisgICAgMTE3LDExNSwxMTYsMzIsOTcsMTA4LDExNSwxMTEsMzIsOTgsMTAxLDMyLDEwNSwxMDksMTEyLDEwOCwKKyAgICAxMDEsMTA5LDEwMSwxMTAsMTE2LDEwMSwxMDAsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsCisgICAgMzIsMzIsNzgsMTE0LDE4NCwwLDAsMCwxMTQsMTg4LDAsMCwwLDExNCw2NywwLAorICAgIDAsMCwxMTQsMzUsMCwwLDAsMTIyLDEzLDEyMywxMjUsMzIsMTA5LDk3LDExNiw5OSwKKyAgICAxMDQsMTAxLDExNSwzMiwxMjMsMTI1LDExNCwxNDEsMCwwLDAsMTE0LDE0MiwwLDAsMCwKKyAgICAxMjIsMTksOTksMTExLDEwMCwxMDEsMzIsMTExLDk4LDEwNiwxMDEsOTksMTE2LDMyLDEwMiwxMTQsCisgICAgMTExLDEwOSwzMiwxMjMsMTI1LDEyMiwxMCwxMTksMTE0LDExMSwxMTYsMTAxLDMyLDEyMywzMywxMTQsCisgICAgMTI1LDQxLDE5LDExNCwyMzksMCwwLDAsMTE0LDEzMiwwLDAsMCwxMTQsMTIzLDAsCisgICAgMCwwLDExNCwzNywxLDAsMCwxMTQsMzUsMSwwLDAsMTE0LDE0LDAsMCwKKyAgICAwLDExNCw0MCwxLDAsMCwxMTQsNDAsMCwwLDAsMTE0LDE5MSwwLDAsMCwKKyAgICAxMTQsMTU0LDAsMCwwLDExNCwxODcsMCwwLDAsMTE0LDE1MywwLDAsMCwxMTQsCisgICAgMTk2LDAsMCwwLDExNCw0NSwxLDAsMCwxMTQsNywwLDAsMCwyMTgsMTksCisgICAgMTAwLDExMSwxMTAsMTE2LDk1LDExOSwxMTQsMTA1LDExNiwxMDEsOTUsOTgsMTIxLDExNiwxMDEsOTksCisgICAgMTExLDEwMCwxMDEsMTE0LDE5OSwwLDAsMCwxMTQsMzEsMCwwLDAsMTE0LDM5LDEsCisgICAgMCwwLDQxLDEwLDExNCw3MSwwLDAsMCwxMTQsMTU5LDAsMCwwLDExNCwxNDIsCisgICAgMCwwLDAsMTE0LDE4OSwwLDAsMCwxMTQsMTQxLDAsMCwwLDIxOCwyLDExNSwKKyAgICAxMTYsMTE0LDUzLDAsMCwwLDIxOCwxMCw5OCwxMjEsMTE2LDEwMSwxMTUsOTUsMTAwLDk3LAorICAgIDExNiw5NywxMTQsMjAyLDAsMCwwLDkwLDExLDk5LDExMSwxMDAsMTAxLDk1LDExMSw5OCwKKyAgICAxMDYsMTAxLDk5LDExNiwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwKKyAgICAwLDAsMCwxMTQsMTYsMSwwLDAsMjU0LDUsMCwwLDExNSw3OCwwLDAsCisgICAgMCwwLDcsMTUsMSw2LDEsMywxLDE2LDEsMTMsMSwxMSwyLDMsCisgICAgMSwxOSwxLDEzLDEsNSwyLDE2LDEsMywxLDE5LDEsMTMsMSw1LAorICAgIDIsMywxLDksMSwxMiwxLDEzLDEsMTksMSw1LDIsOSwxLDcsCisgICAgMSwxNSwxLDYsMSw3LDEsMTUsMSwxOCwxLDEzLDEsMjIsMSwxMiwKKyAgICAxLDksMSwxNSwxLDMsMSwxOSwxLDE3LDEsMTMsMSw4LDEsMTIyLAorICAgIDIxLDgzLDExMSwxMTcsMTE0LDk5LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsMTAzLDEwMSwKKyAgICAxMTYsOTUsOTksMTExLDEwMCwxMDEsNzgsMTE0LDEzOSwwLDAsMCw0MSwxMCwxMTQsNTcsCisgICAgMCwwLDAsMTE0LDU2LDAsMCwwLDExNCw1OCwwLDAsMCwxMTQsMzYsMSwKKyAgICAwLDAsMTE0LDM3LDEsMCwwLDExNCwzOSwxLDAsMCwxMTQsMzgsMSwwLAorICAgIDAsMTE0LDE3LDEsMCwwLDExNCw0NSwxLDAsMCwxMTQsMTYsMSwwLDAsCisgICAgMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LAorICAgIDUsMCwwLDAsMTE0LDM0LDEsMCwwLDE5Niw1LDAsMCwxMTUsMTQsMCwKKyAgICAwLDAsMTIsMiwxMiw4LDEyLDEzLDEyLDEwLDEyLDcsMTIsMTAsMTgsOCwKKyAgICAxMTQsMzQsMSwwLDAsOTksMCwwLDAsMCwwLDAsMCwwLDAsMCwKKyAgICAwLDAsNCwwLDAsMCwwLDAsMCwwLDExNSwxMTIsMCwwLDAsMTAxLAorICAgIDAsMCw5MCwxLDAsMTAwLDAsMCw5MCwyLDAsMTAwLDEsMCw5MCwzLAorICAgIDAsMTAwLDIsMCwxMDAsMywwLDEzMiwwLDAsOTAsNCwwLDEwMCw0LDAsCisgICAgMTAwLDUsMCwxMzIsMCwwLDkwLDUsMCwxMDAsNiwwLDEwMCw3LDAsMTMyLAorICAgIDAsMCw5MCw2LDAsMTAxLDcsMCwxMzUsMCwwLDEwMiwxLDAsMTAwLDgsCisgICAgMCwxMDAsOSwwLDEzNCwwLDAsMTMxLDEsMCw5MCw4LDAsMTAxLDcsMCwKKyAgICAxMDAsMTAsMCwxMDAsMTEsMCwxMzIsMCwwLDEzMSwxLDAsOTAsOSwwLDEwMCwKKyAgICAxMiwwLDEwMCwxMywwLDEzMiwwLDAsOTAsMTAsMCwxMzUsMCwwLDgzLDQxLAorICAgIDE0LDIxOCwxMCw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsMTIyLDEwMyw2NiwKKyAgICA5NywxMTUsMTAxLDMyLDEwMiwxMDUsMTA4LDEwMSwzMiwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDMyLAorICAgIDk5LDEwOCw5NywxMTUsMTE1LDMyLDExOSwxMDQsMTA1LDk5LDEwNCwzMiwxMDUsMTA5LDExMiwxMDgsCisgICAgMTAxLDEwOSwxMDEsMTEwLDExNiwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsMTA4LDExMSw5NywxMDAsMTAxLAorICAgIDExNCwzMiwxMTIsMTE0LDExMSwxMTYsMTExLDk5LDExMSwxMDgsMzIsMTA5LDEwMSwxMTYsMTA0LDExMSwKKyAgICAxMDAsMTE1LDMyLDExNiwxMDQsOTcsMTE2LDEwLDMyLDMyLDMyLDMyLDExNCwxMDEsMTEzLDExNywKKyAgICAxMDUsMTE0LDEwMSwzMiwxMDIsMTA1LDEwOCwxMDEsMzIsMTE1LDEyMSwxMTUsMTE2LDEwMSwxMDksMzIsCisgICAgMTE3LDExNSw5NywxMDMsMTAxLDQ2LDk5LDMsMCwwLDAsMCwwLDAsMCwzLAorICAgIDAsMCwwLDIsMCwwLDAsNjcsMCwwLDAsMTE1LDIyLDAsMCwwLAorICAgIDEyNCwxLDAsMTI0LDAsMCw5NSwwLDAsMTI0LDIsMCwxMjQsMCwwLDk1LAorICAgIDEsMCwxMDAsMSwwLDgzLDQxLDIsMTIyLDc1LDY3LDk3LDk5LDEwNCwxMDEsMzIsCisgICAgMTE2LDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTEwLDk3LDEwOSwxMDEsMzIsCisgICAgOTcsMTEwLDEwMCwzMiwxMTYsMTA0LDEwMSwzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMTYsMTExLDMyLAorICAgIDExNiwxMDQsMTAxLDMyLDEwMiwxMDUsMTA4LDEwMSwzMiwxMDIsMTExLDExNywxMTAsMTAwLDMyLDk4LAorICAgIDEyMSwzMiwxMTYsMTA0LDEwMSwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwxMDIsMTA1LAorICAgIDExMCwxMDAsMTAxLDExNCw0Niw3OCw0MSwyLDExNCw2NywwLDAsMCwxMTQsMzUsMCwKKyAgICAwLDAsNDEsMywxMTQsNzEsMCwwLDAsMTE0LDE1OSwwLDAsMCwxMTQsMzUsCisgICAgMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwKKyAgICAwLDAsMTE0LDcyLDAsMCwwLDU1LDYsMCwwLDExNSw0LDAsMCwwLAorICAgIDAsMyw5LDEsMTIyLDE5LDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCwKKyAgICA0Niw5NSw5NSwxMDUsMTEwLDEwNSwxMTYsOTUsOTUsOTksMiwwLDAsMCwwLDAsCisgICAgMCwwLDIsMCwwLDAsMiwwLDAsMCw2NywwLDAsMCwxMTUsMzQsCisgICAgMCwwLDAsMTI0LDAsMCwxMDYsMCwwLDEyNCwxLDAsMTA2LDAsMCwxMDcsCisgICAgMiwwLDExMSwzMywwLDEyNCwwLDAsMTA2LDEsMCwxMjQsMSwwLDEwNiwxLAorICAgIDAsMTA3LDIsMCw4Myw0MSwxLDc4LDQxLDIsMTE0LDIyNSwwLDAsMCwxMTQsCisgICAgNjMsMCwwLDAsNDEsMiwxMTQsNzEsMCwwLDAsMTE0LDIyOCwwLDAsMCwKKyAgICAxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsCisgICAgMjMwLDAsMCwwLDYxLDYsMCwwLDExNSw0LDAsMCwwLDAsMSwxOCwKKyAgICAxLDEyMiwxNyw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsOTUsOTUsCisgICAgMTAxLDExMyw5NSw5NSw5OSwxLDAsMCwwLDAsMCwwLDAsMSwwLDAsCisgICAgMCwzLDAsMCwwLDY3LDAsMCwwLDExNSwyNiwwLDAsMCwxMTYsMCwKKyAgICAwLDEyNCwwLDAsMTA2LDEsMCwxMzEsMSwwLDExNiwwLDAsMTI0LDAsMCwKKyAgICAxMDYsMiwwLDEzMSwxLDAsNjUsODMsNDEsMSw3OCw0MSwzLDIxOCw0LDEwNCwKKyAgICA5NywxMTUsMTA0LDExNCw2NywwLDAsMCwxMTQsMzUsMCwwLDAsNDEsMSwxMTQsCisgICAgNzEsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsCisgICAgMCwwLDAsMjE4LDgsOTUsOTUsMTA0LDk3LDExNSwxMDQsOTUsOTUsNjUsNiwwLAorICAgIDAsMTE1LDIsMCwwLDAsMCwxLDEyMiwxOSw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsCisgICAgOTcsMTAwLDEwMSwxMTQsNDYsOTUsOTUsMTA0LDk3LDExNSwxMDQsOTUsOTUsOTksMiwwLAorICAgIDAsMCwwLDAsMCwwLDIsMCwwLDAsMywwLDAsMCwzLDAsCisgICAgMCwwLDExNSwyMiwwLDAsMCwxMTYsMCwwLDExNiwxLDAsMTI0LDAsMCwKKyAgICAxMzEsMiwwLDEwNiwyLDAsMTI0LDEsMCwxMzEsMSwwLDgzLDQxLDEsMTIyLAorICAgIDEwMCw3NiwxMTEsOTcsMTAwLDMyLDk3LDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEwMiwKKyAgICAxMTQsMTExLDEwOSwzMiw5NywzMiwxMDIsMTA1LDEwOCwxMDEsNDYsMTAsMTAsMzIsMzIsMzIsCisgICAgMzIsMzIsMzIsMzIsMzIsODQsMTA0LDEwNSwxMTUsMzIsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsCisgICAgMzIsMTA1LDExNSwzMiwxMDAsMTAxLDExMiwxMTQsMTAxLDk5LDk3LDExNiwxMDEsMTAwLDQ2LDMyLAorICAgIDMyLDg1LDExNSwxMDEsMzIsMTAxLDEyMCwxMDEsOTksOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsCisgICAgNDAsNDEsMzIsMTA1LDExMCwxMTUsMTE2LDEwMSw5NywxMDAsNDYsMTAsMTAsMzIsMzIsMzIsCisgICAgMzIsMzIsMzIsMzIsMzIsNDEsMywyMTgsNSwxMTUsMTE3LDExMiwxMDEsMTE0LDExNCw0OSwKKyAgICAxLDAsMCwxMTQsNSwxLDAsMCw0MSwyLDExNCw3MSwwLDAsMCwxMTQsCisgICAgMTU5LDAsMCwwLDQxLDEsMTE0LDIyNSwwLDAsMCwxMTQsNCwwLDAsMCwKKyAgICAxMTQsNSwwLDAsMCwxMTQsNSwxLDAsMCw2OCw2LDAsMCwxMTUsMiwKKyAgICAwLDAsMCwwLDEwLDEyMiwyMiw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwKKyAgICAxMTQsNDYsMTA4LDExMSw5NywxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTksMiwwLAorICAgIDAsMCwwLDAsMCwwLDIsMCwwLDAsMSwwLDAsMCw2NywwLAorICAgIDAsMCwxMTUsNywwLDAsMCwxMjQsMCwwLDEwNiwwLDAsODMsNDEsMSwKKyAgICAxMjIsNTgsODIsMTAxLDExNiwxMTcsMTE0LDExMCwzMiwxMTYsMTA0LDEwMSwzMiwxMTIsOTcsMTE2LAorICAgIDEwNCwzMiwxMTYsMTExLDMyLDExNiwxMDQsMTAxLDMyLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsMzIsCisgICAgMTAyLDEwNSwxMDgsMTAxLDMyLDk3LDExNSwzMiwxMDIsMTExLDExNywxMTAsMTAwLDMyLDk4LDEyMSwKKyAgICAzMiwxMTYsMTA0LDEwMSwzMiwxMDIsMTA1LDExMCwxMDAsMTAxLDExNCw0Niw0MSwxLDExNCwzNSwKKyAgICAwLDAsMCw0MSwyLDExNCw3MSwwLDAsMCwxMTQsMTU5LDAsMCwwLDExNCwKKyAgICA0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwyMzksCisgICAgMCwwLDAsODAsNiwwLDAsMTE1LDIsMCwwLDAsMCwzLDEyMiwyMywKKyAgICA3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsMTAzLDEwMSwxMTYsOTUsMTAyLAorICAgIDEwNSwxMDgsMTAxLDExMCw5NywxMDksMTAxLDk5LDIsMCwwLDAsMCwwLDAsMCwKKyAgICAzLDAsMCwwLDgsMCwwLDAsNjcsMCwwLDAsMTE1LDQxLDAsMCwKKyAgICAwLDExNiwwLDAsMTA2LDEsMCwxMjQsMSwwLDEwMCwxLDAsMTMxLDIsMCwKKyAgICAxNDMsMTcsMCwxMjUsMiwwLDEyNCwyLDAsMTA2LDIsMCwxMzEsMCwwLDgzLAorICAgIDg3LDEwMCwyLDAsODEsODgsMTAwLDIsMCw4Myw0MSwzLDEyMiwzOSw4MiwxMDEsCisgICAgMTE2LDExNywxMTQsMTEwLDMyLDExNiwxMDQsMTAxLDMyLDEwMCw5NywxMTYsOTcsMzIsMTAyLDExNCwKKyAgICAxMTEsMTA5LDMyLDExMiw5NywxMTYsMTA0LDMyLDk3LDExNSwzMiwxMTQsOTcsMTE5LDMyLDk4LAorICAgIDEyMSwxMTYsMTAxLDExNSw0NiwyMTgsMSwxMTQsNzgsNDEsMywxMTQsNDksMCwwLDAsCisgICAgMTE0LDUwLDAsMCwwLDkwLDQsMTE0LDEwMSw5NywxMDAsNDEsMywxMTQsNzEsMCwKKyAgICAwLDAsMTE0LDM1LDAsMCwwLDExNCw1NCwwLDAsMCwxMTQsNCwwLDAsCisgICAgMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsNDAsMSwwLDAsCisgICAgODUsNiwwLDAsMTE1LDQsMCwwLDAsMCwyLDIxLDEsMTIyLDE5LDcwLAorICAgIDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMDMsMTAxLDExNiw5NSwxMDAsOTcsCisgICAgMTE2LDk3LDQxLDExLDExNCw1NywwLDAsMCwxMTQsNTYsMCwwLDAsMTE0LDU4LAorICAgIDAsMCwwLDExNCw1OSwwLDAsMCwxMTQsNzIsMCwwLDAsMTE0LDIzMCwwLAorICAgIDAsMCwxMTQsNTEsMSwwLDAsMTE0LDE1NywwLDAsMCwxMTQsNSwxLDAsCisgICAgMCwxMTQsMjM5LDAsMCwwLDExNCw0MCwxLDAsMCwxMTQsNCwwLDAsMCwKKyAgICAxMTQsNCwwLDAsMCw0MSwxLDExNCwyMjUsMCwwLDAsMTE0LDUsMCwwLAorICAgIDAsMTE0LDQ5LDEsMCwwLDUwLDYsMCwwLDExNSwxNCwwLDAsMCwxMiwKKyAgICAzLDYsMiwxMiw2LDEyLDQsMTIsMywyNCwxMiwxOCw1LDExNCw0OSwxLAorICAgIDAsMCw5OSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw0LAorICAgIDAsMCwwLDY0LDAsMCwwLDExNSw2NCwwLDAsMCwxMDEsMCwwLDkwLAogICAgIDEsMCwxMDAsMCwwLDkwLDIsMCwxMDAsMSwwLDkwLDMsMCwxMDAsMiwKLSAgICAwLDEwMCwzLDAsMTMyLDAsMCw5MCw0LDAsMTAxLDUsMCwxMzUsMCwwLAotICAgIDEwMiwxLDAsMTAwLDQsMCwxMDAsNSwwLDEzNCwwLDAsMTMxLDEsMCw5MCwKLSAgICA2LDAsMTAxLDUsMCwxMDAsNiwwLDEwMCw3LDAsMTMyLDAsMCwxMzEsMSwKLSAgICAwLDkwLDcsMCwxMDAsOCwwLDEwMCw5LDAsMTMyLDAsMCw5MCw4LDAsCi0gICAgMTM1LDAsMCw4Myw0MCwxMCwwLDAsMCwxMTcsMTAsMCwwLDAsNzAsMTA1LAotICAgIDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDExNywxMDMsMCwwLDAsNjYsOTcsMTE1LAotICAgIDEwMSwzMiwxMDIsMTA1LDEwOCwxMDEsMzIsMTA4LDExMSw5NywxMDAsMTAxLDExNCwzMiw5OSwxMDgsCi0gICAgOTcsMTE1LDExNSwzMiwxMTksMTA0LDEwNSw5OSwxMDQsMzIsMTA1LDEwOSwxMTIsMTA4LDEwMSwxMDksCi0gICAgMTAxLDExMCwxMTYsMTE1LDMyLDExNiwxMDQsMTAxLDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMzIsCi0gICAgMTEyLDExNCwxMTEsMTE2LDExMSw5OSwxMTEsMTA4LDMyLDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDExNSwKLSAgICAzMiwxMTYsMTA0LDk3LDExNiwxMCwzMiwzMiwzMiwzMiwxMTQsMTAxLDExMywxMTcsMTA1LDExNCwKLSAgICAxMDEsMzIsMTAyLDEwNSwxMDgsMTAxLDMyLDExNSwxMjEsMTE1LDExNiwxMDEsMTA5LDMyLDExNywxMTUsCi0gICAgOTcsMTAzLDEwMSw0Niw5OSwzLDAsMCwwLDAsMCwwLDAsMywwLDAsCi0gICAgMCwyLDAsMCwwLDY3LDAsMCwwLDExNSwyMiwwLDAsMCwxMjQsMSwKLSAgICAwLDEyNCwwLDAsOTUsMCwwLDEyNCwyLDAsMTI0LDAsMCw5NSwxLDAsCi0gICAgMTAwLDEsMCw4Myw0MCwyLDAsMCwwLDExNyw3NSwwLDAsMCw2Nyw5NywKLSAgICA5OSwxMDQsMTAxLDMyLDExNiwxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDExMCwKLSAgICA5NywxMDksMTAxLDMyLDk3LDExMCwxMDAsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLDk3LDExNiwxMDQsCi0gICAgMzIsMTE2LDExMSwzMiwxMTYsMTA0LDEwMSwzMiwxMDIsMTA1LDEwOCwxMDEsMzIsMTAyLDExMSwxMTcsCi0gICAgMTEwLDEwMCwzMiw5OCwxMjEsMzIsMTE2LDEwNCwxMDEsMTAsMzIsMzIsMzIsMzIsMzIsMzIsCi0gICAgMzIsMzIsMTAyLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsNzgsNDAsMiwwLDAsMCwxMTcsCi0gICAgNCwwLDAsMCwxMTAsOTcsMTA5LDEwMSwxMTcsNCwwLDAsMCwxMTIsOTcsMTE2LAotICAgIDEwNCw0MCwzLDAsMCwwLDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LDEwMiwxMTcsCi0gICAgOCwwLDAsMCwxMDIsMTE3LDEwOCwxMDgsMTEwLDk3LDEwOSwxMDEsMTE3LDQsMCwwLAotICAgIDAsMTEyLDk3LDExNiwxMDQsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywKLSAgICAyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsCi0gICAgMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiwKLSAgICA2MiwxMTcsOCwwLDAsMCw5NSw5NSwxMDUsMTEwLDEwNSwxMTYsOTUsOTUsMjQzLDMsCi0gICAgMCwwLDExNSw0LDAsMCwwLDAsMyw5LDEsMTE3LDE5LDAsMCwwLAotICAgIDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0Niw5NSw5NSwxMDUsMTEwLDEwNSwKLSAgICAxMTYsOTUsOTUsOTksMiwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsCi0gICAgMywwLDAsMCwzLDAsMCwwLDExNSwyMiwwLDAsMCwxMTYsMCwwLAotICAgIDExNiwxLDAsMTI0LDAsMCwxMzEsMiwwLDEwNiwyLDAsMTI0LDEsMCwxMzEsCi0gICAgMSwwLDgzLDQwLDEsMCwwLDAsMTE3LDI2LDAsMCwwLDc2LDExMSw5NywKLSAgICAxMDAsMzIsOTcsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTAyLDExNCwxMTEsMTA5LDMyLAotICAgIDk3LDMyLDEwMiwxMDUsMTA4LDEwMSw0Niw0MCwzLDAsMCwwLDExNyw1LDAsMCwKLSAgICAwLDExNSwxMTcsMTEyLDEwMSwxMTQsMTE3LDEwLDAsMCwwLDcwLDEwNSwxMDgsMTAxLDc2LAotICAgIDExMSw5NywxMDAsMTAxLDExNCwxMTcsMTEsMCwwLDAsMTA4LDExMSw5NywxMDAsOTUsMTA5LAotICAgIDExMSwxMDAsMTE3LDEwOCwxMDEsNDAsMiwwLDAsMCwxMTcsNCwwLDAsMCwxMTUsCi0gICAgMTAxLDEwOCwxMDIsMTE3LDgsMCwwLDAsMTAyLDExNywxMDgsMTA4LDExMCw5NywxMDksMTAxLAotICAgIDQwLDEsMCwwLDAsMTE3LDksMCwwLDAsOTUsOTUsOTksMTA4LDk3LDExNSwKLSAgICAxMTUsOTUsOTUsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwKLSAgICAxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSwKLSAgICA5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDExLDAsMCwwLDEwOCwKLSAgICAxMTEsOTcsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDI0OSwzLDAsMCwxMTUsMiwKLSAgICAwLDAsMCwwLDUsMTE3LDIyLDAsMCwwLDcwLDEwNSwxMDgsMTAxLDc2LDExMSwKLSAgICA5NywxMDAsMTAxLDExNCw0NiwxMDgsMTExLDk3LDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwKLSAgICA5OSwyLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwxLDAsMCwKLSAgICAwLDY3LDAsMCwwLDExNSw3LDAsMCwwLDEyNCwwLDAsMTA2LDAsMCwKLSAgICA4Myw0MCwxLDAsMCwwLDExNyw1OCwwLDAsMCw4MiwxMDEsMTE2LDExNywxMTQsCi0gICAgMTEwLDMyLDExNiwxMDQsMTAxLDMyLDExMiw5NywxMTYsMTA0LDMyLDExNiwxMTEsMzIsMTE2LDEwNCwKLSAgICAxMDEsMzIsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwzMiwxMDIsMTA1LDEwOCwxMDEsMzIsOTcsMTE1LAotICAgIDMyLDEwMiwxMTEsMTE3LDExMCwxMDAsMzIsOTgsMTIxLDMyLDExNiwxMDQsMTAxLDMyLDEwMiwxMDUsCi0gICAgMTEwLDEwMCwxMDEsMTE0LDQ2LDQwLDEsMCwwLDAsMTE3LDQsMCwwLDAsMTEyLAotICAgIDk3LDExNiwxMDQsNDAsMiwwLDAsMCwxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwKLSAgICAxMDIsMTE3LDgsMCwwLDAsMTAyLDExNywxMDgsMTA4LDExMCw5NywxMDksMTAxLDQwLDAsCi0gICAgMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwKLSAgICAxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSwKLSAgICA5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDEyLDAsMCwwLDEwMywKLSAgICAxMDEsMTE2LDk1LDEwMiwxMDUsMTA4LDEwMSwxMTAsOTcsMTA5LDEwMSwwLDQsMCwwLDExNSwKLSAgICAyLDAsMCwwLDAsMywxMTcsMjMsMCwwLDAsNzAsMTA1LDEwOCwxMDEsNzYsCi0gICAgMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDEwMywxMDEsMTE2LDk1LDEwMiwxMDUsMTA4LDEwMSwxMTAsOTcsCi0gICAgMTA5LDEwMSw5OSwyLDAsMCwwLDAsMCwwLDAsMywwLDAsMCw4LAotICAgIDAsMCwwLDY3LDAsMCwwLDExNSw0MSwwLDAsMCwxMTYsMCwwLDEwNiwKLSAgICAxLDAsMTI0LDEsMCwxMDAsMSwwLDEzMSwyLDAsMTQzLDE3LDAsMTI1LDIsCi0gICAgMCwxMjQsMiwwLDEwNiwyLDAsMTMxLDAsMCw4Myw4NywxMDAsMiwwLDgxLAotICAgIDg4LDEwMCwyLDAsODMsNDAsMywwLDAsMCwxMTcsMzksMCwwLDAsODIsCi0gICAgMTAxLDExNiwxMTcsMTE0LDExMCwzMiwxMTYsMTA0LDEwMSwzMiwxMDAsOTcsMTE2LDk3LDMyLDEwMiwKLSAgICAxMTQsMTExLDEwOSwzMiwxMTIsOTcsMTE2LDEwNCwzMiw5NywxMTUsMzIsMTE0LDk3LDExOSwzMiwKLSAgICA5OCwxMjEsMTE2LDEwMSwxMTUsNDYsMTE3LDEsMCwwLDAsMTE0LDc4LDQwLDMsMCwKLSAgICAwLDAsMTE3LDMsMCwwLDAsOTUsMTA1LDExMSwxMTcsNiwwLDAsMCw3MCwKLSAgICAxMDUsMTA4LDEwMSw3Myw3OSwxMTcsNCwwLDAsMCwxMTQsMTAxLDk3LDEwMCw0MCwzLAotICAgIDAsMCwwLDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LDEwMiwxMTcsNCwwLDAsCi0gICAgMCwxMTIsOTcsMTE2LDEwNCwxMTcsNCwwLDAsMCwxMDIsMTA1LDEwOCwxMDEsNDAsMCwKLSAgICAwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LAotICAgIDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LAotICAgIDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsOCwwLDAsMCwxMDMsCi0gICAgMTAxLDExNiw5NSwxMDAsOTcsMTE2LDk3LDUsNCwwLDAsMTE1LDQsMCwwLDAsCi0gICAgMCwyLDIxLDEsMTE3LDE5LDAsMCwwLDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywKLSAgICAxMDAsMTAxLDExNCw0NiwxMDMsMTAxLDExNiw5NSwxMDAsOTcsMTE2LDk3LDQwLDksMCwwLAotICAgIDAsMTE3LDgsMCwwLDAsOTUsOTUsMTEwLDk3LDEwOSwxMDEsOTUsOTUsMTE3LDEwLAotICAgIDAsMCwwLDk1LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDk1LDExNywxMiwwLAotICAgIDAsMCw5NSw5NSwxMTMsMTE3LDk3LDEwOCwxMTAsOTcsMTA5LDEwMSw5NSw5NSwxMTcsNywKLSAgICAwLDAsMCw5NSw5NSwxMDAsMTExLDk5LDk1LDk1LDExNyw4LDAsMCwwLDk1LAotICAgIDk1LDEwNSwxMTAsMTA1LDExNiw5NSw5NSwxMTcsMTEsMCwwLDAsOTUsOTksMTA0LDEwMSwKLSAgICA5OSwxMDcsOTUsMTEwLDk3LDEwOSwxMDEsMTE3LDExLDAsMCwwLDEwOCwxMTEsOTcsMTAwLAotICAgIDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNywxMiwwLDAsMCwxMDMsMTAxLDExNiw5NSwKLSAgICAxMDIsMTA1LDEwOCwxMDEsMTEwLDk3LDEwOSwxMDEsMTE3LDgsMCwwLDAsMTAzLDEwMSwxMTYsCi0gICAgOTUsMTAwLDk3LDExNiw5Nyw0MCwxLDAsMCwwLDExNywxMCwwLDAsMCw5NSwKLSAgICA5NSwxMDgsMTExLDk5LDk3LDEwOCwxMTUsOTUsOTUsNDAsMCwwLDAsMCw0MCwxLAotICAgIDAsMCwwLDExNyw5LDAsMCwwLDk1LDk1LDk5LDEwOCw5NywxMTUsMTE1LDk1LAotICAgIDk1LDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LAotICAgIDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LAotICAgIDk3LDExMiw2MiwxMTcsMTAsMCwwLDAsNzAsMTA1LDEwOCwxMDEsNzYsMTExLDk3LDEwMCwKLSAgICAxMDEsMTE0LDIzOCwzLDAsMCwxMTUsMTAsMCwwLDAsMTYsMyw2LDIsMTIsCi0gICAgNiwyNCw3LDE4LDUsMTE3LDEwLDAsMCwwLDcwLDEwNSwxMDgsMTAxLDc2LDExMSwKLSAgICA5NywxMDAsMTAxLDExNCw5OSwxLDAsMCwwLDAsMCwwLDAsMSwwLDAsCi0gICAgMCw0LDAsMCwwLDY2LDAsMCwwLDExNSw2OCwwLDAsMCwxMjQsMCwKLSAgICAwLDY5LDEwMSwwLDAsOTAsMSwwLDEwMCwwLDAsOTAsMiwwLDEwMCwxLAotICAgIDAsOTAsMywwLDEwMCwyLDAsMTAwLDMsMCwxMzIsMCwwLDkwLDQsMCwKLSAgICAxMDAsNCwwLDEwMCw1LDAsMTMyLDAsMCw5MCw1LDAsMTAwLDYsMCwxMDAsCi0gICAgNywwLDEwMCw4LDAsMTAwLDksMCwxMzIsMCwxLDkwLDYsMCwxMDAsMTAsCi0gICAgMCw4Myw0MCwxMSwwLDAsMCwxMTcsMTYsMCwwLDAsODMsMTExLDExNywxMTQsCi0gICAgOTksMTAxLDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCwxMTcsNjIsMCwwLAotICAgIDAsNjcsMTExLDExMCw5OSwxMTQsMTAxLDExNiwxMDEsMzIsMTA1LDEwOSwxMTIsMTA4LDEwMSwxMDksCi0gICAgMTAxLDExMCwxMTYsOTcsMTE2LDEwNSwxMTEsMTEwLDMyLDExMSwxMDIsMzIsODMsMTExLDExNywxMTQsCi0gICAgOTksMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCwzMiwxMTcsMTE1LDEwNSwxMTAsMTAzLDMyLDExNiwKLSAgICAxMDQsMTAxLDMyLDEwMiwxMDUsMTA4LDEwMSwzMiwxMTUsMTIxLDExNSwxMTYsMTAxLDEwOSw0Niw5OSwKLSAgICAyLDAsMCwwLDAsMCwwLDAsMywwLDAsMCwzLDAsMCwwLAotICAgIDY3LDAsMCwwLDExNSwzOSwwLDAsMCwxMTYsMCwwLDEwNiwxLDAsMTI0LAotICAgIDEsMCwxMzEsMSwwLDEyNSwyLDAsMTA1LDIsMCwxMjQsMiwwLDEwNiwyLAotICAgIDAsMTAwLDEsMCw1NCwxMjQsMiwwLDEwNiwzLDAsMTAwLDIsMCw1NCw4MywKLSAgICA0MCwzLDAsMCwwLDExNywzMywwLDAsMCw4MiwxMDEsMTE2LDExNywxMTQsMTEwLAotICAgIDMyLDExNiwxMDQsMTAxLDMyLDEwOSwxMDEsMTE2LDk3LDEwMCw5NywxMTYsOTcsMzIsMTAyLDExMSwKLSAgICAxMTQsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLDk3LDExNiwxMDQsNDYsMTE3LDUsMCwwLDAsCi0gICAgMTA5LDExNiwxMDUsMTA5LDEwMSwxMTcsNCwwLDAsMCwxMTUsMTA1LDEyMiwxMDEsNDAsNCwKLSAgICAwLDAsMCwxMTcsMywwLDAsMCw5NSwxMTEsMTE1LDExNyw0LDAsMCwwLAotICAgIDExNSwxMTYsOTcsMTE2LDExNyw4LDAsMCwwLDExNSwxMTYsOTUsMTA5LDExNiwxMDUsMTA5LAotICAgIDEwMSwxMTcsNywwLDAsMCwxMTUsMTE2LDk1LDExNSwxMDUsMTIyLDEwMSw0MCwzLDAsCi0gICAgMCwwLDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LDEwMiwxMTcsNCwwLDAsMCwKLSAgICAxMTIsOTcsMTE2LDEwNCwxMTcsMiwwLDAsMCwxMTUsMTE2LDQwLDAsMCwwLDAsCi0gICAgNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwKLSAgICAxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLAotICAgIDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDEwLDAsMCwwLDExMiw5NywxMTYsMTA0LAotICAgIDk1LDExNSwxMTYsOTcsMTE2LDExNSwxNSw0LDAsMCwxMTUsNCwwLDAsMCwwLAotICAgIDIsMTUsMSwxMTcsMjcsMCwwLDAsODMsMTExLDExNywxMTQsOTksMTAxLDcwLDEwNSwKLSAgICAxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMTIsOTcsMTE2LDEwNCw5NSwxMTUsMTE2LAotICAgIDk3LDExNiwxMTUsOTksNCwwLDAsMCwwLDAsMCwwLDUsMCwwLDAsCi0gICAgMTMsMCwwLDAsNjcsMCwwLDAsMTE1LDgxLDAsMCwwLDEyMSwyMiwwLAotICAgIDExNiwwLDAsMTA2LDEsMCwxMjQsMSwwLDEzMSwxLDAsMTA2LDIsMCwxMjUsCi0gICAgNCwwLDg3LDExMCwyNCwwLDQsMTE2LDMsMCwxMDcsMTAsMCwxMTQsNDgsMCwKLSAgICAxLDEsMSwxMDAsMSwwLDEyNSw0LDAsODksMTEwLDEsMCw4OCwxMjQsNCwKLSAgICAwLDEwMCwyLDAsNzksMTI1LDQsMCwxMjQsMCwwLDEwNiw0LDAsMTI0LDIsCi0gICAgMCwxMjQsMywwLDEwMCwzLDAsMTI0LDQsMCwxMzEsMiwxLDgzLDQwLDQsCi0gICAgMCwwLDAsNzgsMTA1LDE4MiwxLDAsMCwxMDUsMTI4LDAsMCwwLDExNyw1LAotICAgIDAsMCwwLDk1LDEwOSwxMTEsMTAwLDEwMSw0MCw1LDAsMCwwLDExNywzLDAsCi0gICAgMCwwLDk1LDExMSwxMTUsMTE3LDQsMCwwLDAsMTE1LDExNiw5NywxMTYsMTE3LDcsCi0gICAgMCwwLDAsMTE1LDExNiw5NSwxMDksMTExLDEwMCwxMDEsMTE3LDcsMCwwLDAsNzksCi0gICAgODMsNjksMTE0LDExNCwxMTEsMTE0LDExNyw4LDAsMCwwLDExNSwxMDEsMTE2LDk1LDEwMCwKLSAgICA5NywxMTYsOTcsNDAsNSwwLDAsMCwxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwKLSAgICAxMDIsMTE3LDExLDAsMCwwLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsOTUsMTEyLDk3LDExNiwKLSAgICAxMDQsMTE3LDEzLDAsMCwwLDk4LDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDk1LDExMiwKLSAgICA5NywxMTYsMTA0LDExNyw0LDAsMCwwLDEwMCw5NywxMTYsOTcsMTE3LDQsMCwwLAotICAgIDAsMTA5LDExMSwxMDAsMTAxLDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsCi0gICAgMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLAotICAgIDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsCi0gICAgNjIsMTE3LDE1LDAsMCwwLDk1LDk5LDk3LDk5LDEwNCwxMDEsOTUsOTgsMTIxLDExNiwKLSAgICAxMDEsOTksMTExLDEwMCwxMDEsMjAsNCwwLDAsMTE1LDEyLDAsMCwwLDAsMiwKLSAgICAzLDEsMjIsMSwxMywxLDExLDMsMTAsMSwxMTcsMzIsMCwwLDAsODMsCi0gICAgMTExLDExNywxMTQsOTksMTAxLDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwKLSAgICA5NSw5OSw5Nyw5OSwxMDQsMTAxLDk1LDk4LDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDExNywKLSAgICA1LDAsMCwwLDk1LDEwOSwxMTEsMTAwLDEwMSwxMDUsMTgyLDEsMCwwLDk5LDMsCi0gICAgMCwwLDAsMSwwLDAsMCw5LDAsMCwwLDE4LDAsMCwwLDY3LAotICAgIDAsMCwwLDExNSw1MywxLDAsMCwxMTYsMCwwLDEyNCwxLDAsMTMxLDEsCi0gICAgMCw5MiwyLDAsMTI1LDQsMCwxMjUsNSwwLDEwMywwLDAsMTI1LDYsMCwKLSAgICAxMjAsNTQsMCwxMjQsNCwwLDExNCw4MCwwLDExNiwxLDAsMTI0LDQsMCwxMzEsCi0gICAgMSwwLDEyLDExNCw4MCwwLDExNiwwLDAsMTI0LDQsMCwxMzEsMSwwLDkyLAotICAgIDIsMCwxMjUsNCwwLDEyNSw3LDAsMTI0LDYsMCwxMDYsMiwwLDEyNCw3LAotICAgIDAsMTMxLDEsMCwxLDExMywyNywwLDg3LDEyMCwxMzIsMCwxMTYsMywwLDEyNCwKLSAgICA2LDAsMTMxLDEsMCw2OCw5MywxMTgsMCwxMjUsNywwLDExNiw0LDAsMTI0LAotICAgIDQsMCwxMjQsNywwLDEzMSwyLDAsMTI1LDQsMCwxMjEsMTcsMCwxMTYsNSwKLSAgICAwLDEwNiw2LDAsMTI0LDQsMCwxMzEsMSwwLDEsODcsMTEzLDk0LDAsNCwKLSAgICAxMTYsNywwLDEwNywxMCwwLDExNCwxNTUsMCwxLDEsMSwxMTksOTQsMCw4OSwKLSAgICAxMTMsOTQsMCw0LDExNiw4LDAsMTA3LDEwLDAsMTE0LDIxMSwwLDEsMTI1LDgsCi0gICAgMCwxLDEyMiwyNSwwLDExNiw5LDAsMTAwLDEsMCwxMjQsNCwwLDEyNCw4LAotICAgIDAsMTMxLDMsMCwxLDEwMCwyLDAsODMsODcsODksMTAwLDIsMCwxMDAsMiwKLSAgICAwLDEyNSw4LDAsMTI2LDgsMCw4OCwxMTMsOTQsMCw4OCwxMTMsOTQsMCw4NywKLSAgICAxMjEsMzMsMCwxMTYsMTAsMCwxMjQsMSwwLDEyNCwyLDAsMTI0LDMsMCwxMzEsCi0gICAgMywwLDEsMTE2LDksMCwxMDAsMywwLDEyNCwxLDAsMTMxLDIsMCwxLAotICAgIDg3LDExMCw1MywwLDQsMTE2LDgsMCwxMDcsMTAsMCwxMTQsNDgsMSwxLDEyNSwKLSAgICA4LDAsMSwxMjIsMjEsMCwxMTYsOSwwLDEwMCwxLDAsMTI0LDEsMCwxMjQsCi0gICAgOCwwLDEzMSwzLDAsMSw4Nyw4OSwxMDAsMiwwLDEwMCwyLDAsMTI1LDgsCi0gICAgMCwxMjYsOCwwLDg4LDExMCwxLDAsODgsMTAwLDIsMCw4Myw0MCw0LDAsCi0gICAgMCwwLDExNywyNywwLDAsMCw4NywxMTQsMTA1LDExNiwxMDEsMzIsOTgsMTIxLDExNiwKLSAgICAxMDEsMTE1LDMyLDEwMCw5NywxMTYsOTcsMzIsMTE2LDExMSwzMiw5NywzMiwxMDIsMTA1LDEwOCwKLSAgICAxMDEsNDYsMTE3LDI3LDAsMCwwLDk5LDExMSwxMTcsMTA4LDEwMCwzMiwxMTAsMTExLDExNiwKLSAgICAzMiw5OSwxMTQsMTAxLDk3LDExNiwxMDEsMzIsMTIzLDMzLDExNCwxMjUsNTgsMzIsMTIzLDMzLAotICAgIDExNCwxMjUsNzgsMTE3LDEyLDAsMCwwLDk5LDExNCwxMDEsOTcsMTE2LDEwMSwxMDAsMzIsCi0gICAgMTIzLDMzLDExNCwxMjUsNDAsMTEsMCwwLDAsMTE3LDExLDAsMCwwLDk1LDExMiwKLSAgICA5NywxMTYsMTA0LDk1LDExNSwxMTIsMTA4LDEwNSwxMTYsMTE3LDExLDAsMCwwLDk1LDExMiwKLSAgICA5NywxMTYsMTA0LDk1LDEwNSwxMTUsMTAwLDEwNSwxMTQsMTE3LDYsMCwwLDAsOTcsMTEyLAotICAgIDExMiwxMDEsMTEwLDEwMCwxMTcsOCwwLDAsMCwxMTQsMTAxLDExOCwxMDEsMTE0LDExNSwxMDEsCi0gICAgMTAwLDExNywxMCwwLDAsMCw5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMDYsMTExLDEwNSwxMTAsCi0gICAgMTE3LDMsMCwwLDAsOTUsMTExLDExNSwxMTcsNSwwLDAsMCwxMDksMTA3LDEwMCwKLSAgICAxMDUsMTE0LDExNywxNSwwLDAsMCw3MCwxMDUsMTA4LDEwMSw2OSwxMjAsMTA1LDExNSwxMTYsCi0gICAgMTE1LDY5LDExNCwxMTQsMTExLDExNCwxMTcsNywwLDAsMCw3OSw4Myw2OSwxMTQsMTE0LAotICAgIDExMSwxMTQsMTE3LDE2LDAsMCwwLDk1LDExOCwxMDEsMTE0LDk4LDExMSwxMTUsMTAxLDk1LAotICAgIDEwOSwxMDEsMTE1LDExNSw5NywxMDMsMTAxLDExNywxMywwLDAsMCw5NSwxMTksMTE0LDEwNSwKLSAgICAxMTYsMTAxLDk1LDk3LDExNiwxMTEsMTA5LDEwNSw5OSw0MCw5LDAsMCwwLDExNyw0LAotICAgIDAsMCwwLDExNSwxMDEsMTA4LDEwMiwxMTcsNCwwLDAsMCwxMTIsOTcsMTE2LDEwNCwKLSAgICAxMTcsNCwwLDAsMCwxMDAsOTcsMTE2LDk3LDExNyw1LDAsMCwwLDk1LDEwOSwKLSAgICAxMTEsMTAwLDEwMSwxMTcsNiwwLDAsMCwxMTIsOTcsMTE0LDEwMSwxMTAsMTE2LDExNyw4LAotICAgIDAsMCwwLDEwMiwxMDUsMTA4LDEwMSwxMTAsOTcsMTA5LDEwMSwxMTcsMTAsMCwwLDAsCi0gICAgMTEyLDk3LDExNiwxMDQsOTUsMTEyLDk3LDExNCwxMTYsMTE1LDExNyw0LDAsMCwwLDExMiwKLSAgICA5NywxMTQsMTE2LDExNywzLDAsMCwwLDEwMSwxMjAsOTksNDAsMCwwLDAsMCwKLSAgICA0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLAotICAgIDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsCi0gICAgMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsOCwwLDAsMCwxMTUsMTAxLDExNiw5NSwKLSAgICAxMDAsOTcsMTE2LDk3LDMxLDQsMCwwLDExNSwzOCwwLDAsMCwwLDIsMTgsCi0gICAgMSw2LDIsMjIsMSwxOCwxLDE3LDIsMTksMSwxNSwxLDMsMSwxNywKLSAgICAxLDEzLDIsNywxLDE4LDMsMTYsMSwyNywxLDMsMSwxNiwxLDE3LAotICAgIDEsMTgsMiwxMTcsMjUsMCwwLDAsODMsMTExLDExNywxMTQsOTksMTAxLDcwLDEwNSwKKyAgICAwLDEwMCwzLDAsMTMyLDAsMCw5MCw0LDAsMTAwLDQsMCwxMDAsNSwwLAorICAgIDEzMiwwLDAsOTAsNSwwLDEwMCw2LDAsMTAwLDcsMCwxMDAsOCwwLDEwMCwKKyAgICA5LDAsMTMyLDAsMSw5MCw2LDAsMTAwLDEwLDAsODMsNDEsMTEsMTE0LDksCisgICAgMSwwLDAsMTIyLDYyLDY3LDExMSwxMTAsOTksMTE0LDEwMSwxMTYsMTAxLDMyLDEwNSwxMDksCisgICAgMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LDk3LDExNiwxMDUsMTExLDExMCwzMiwxMTEsMTAyLDMyLAorICAgIDgzLDExMSwxMTcsMTE0LDk5LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsMzIsMTE3LDExNSwxMDUsCisgICAgMTEwLDEwMywzMiwxMTYsMTA0LDEwMSwzMiwxMDIsMTA1LDEwOCwxMDEsMzIsMTE1LDEyMSwxMTUsMTE2LAorICAgIDEwMSwxMDksNDYsOTksMiwwLDAsMCwwLDAsMCwwLDMsMCwwLDAsCisgICAgMywwLDAsMCw2NywwLDAsMCwxMTUsMzYsMCwwLDAsMTE2LDAsMCwKKyAgICAxMjQsMSwwLDEzMSwxLDAsMTI1LDIsMCwxMDUsMiwwLDEyNCwyLDAsMTA2LAorICAgIDEsMCwxMDAsMSwwLDU0LDEyNCwyLDAsMTA2LDIsMCwxMDAsMiwwLDU0LAorICAgIDgzLDQxLDMsMTIyLDMzLDgyLDEwMSwxMTYsMTE3LDExNCwxMTAsMzIsMTE2LDEwNCwxMDEsMzIsCisgICAgMTA5LDEwMSwxMTYsOTcsMTAwLDk3LDExNiw5NywzMiwxMDIsMTExLDExNCwzMiwxMTYsMTA0LDEwMSwKKyAgICAzMiwxMTIsOTcsMTE2LDEwNCw0NiwxMTQsMTg0LDAsMCwwLDExNCwxODUsMCwwLDAsCisgICAgNDEsMywxMTQsMzksMCwwLDAsMjE4LDgsMTE1LDExNiw5NSwxMDksMTE2LDEwNSwxMDksCisgICAgMTAxLDkwLDcsMTE1LDExNiw5NSwxMTUsMTA1LDEyMiwxMDEsNDEsMywxMTQsNzEsMCwwLAorICAgIDAsMTE0LDM1LDAsMCwwLDExNCw0NywxLDAsMCwxMTQsNCwwLDAsMCwKKyAgICAxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsMzcsMSwwLDAsOTUsCisgICAgNiwwLDAsMTE1LDQsMCwwLDAsMCwyLDEyLDEsMTIyLDI3LDgzLDExMSwKKyAgICAxMTcsMTE0LDk5LDEwMSw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsMTEyLAorICAgIDk3LDExNiwxMDQsOTUsMTE1LDExNiw5NywxMTYsMTE1LDk5LDQsMCwwLDAsMCwwLAorICAgIDAsMCw1LDAsMCwwLDUsMCwwLDAsNjcsMCwwLDAsMTE1LDM0LAorICAgIDAsMCwwLDExNiwwLDAsMTI0LDEsMCwxMzEsMSwwLDEyNSw0LDAsMTI0LAorICAgIDAsMCwxMDYsMSwwLDEyNCwyLDAsMTI0LDMsMCwxMDAsMSwwLDEyNCw0LAorICAgIDAsMTMxLDIsMSw4Myw0MSwyLDc4LDIxOCw1LDk1LDEwOSwxMTEsMTAwLDEwMSw0MSwKKyAgICAyLDExNCwxNDUsMCwwLDAsMTE0LDM4LDEsMCwwLDQxLDUsMTE0LDcxLDAsCisgICAgMCwwLDExNCwxNDIsMCwwLDAsMTE0LDE0MSwwLDAsMCwxMTQsNTMsMCwwLAorICAgIDAsMTE0LDQyLDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLAorICAgIDExNCw1LDAsMCwwLDExNCwzOSwxLDAsMCwxMDAsNiwwLDAsMTE1LDQsCisgICAgMCwwLDAsMCwyLDEyLDEsMTIyLDMyLDgzLDExMSwxMTcsMTE0LDk5LDEwMSw3MCwKKyAgICAxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsOTUsOTksOTcsOTksMTA0LDEwMSwKKyAgICA5NSw5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSwxMTQsNTUsMSwwLDAsMTA1LDE4MiwKKyAgICAxLDAsMCw5OSwzLDAsMCwwLDEsMCwwLDAsOSwwLDAsMCwKKyAgICAxNywwLDAsMCw2NywwLDAsMCwxMTUsNTMsMSwwLDAsMTE2LDAsMCwKKyAgICAxMjQsMSwwLDEzMSwxLDAsOTIsMiwwLDEyNSw0LDAsMTI1LDUsMCwxMDMsCisgICAgMCwwLDEyNSw2LDAsMTIwLDU0LDAsMTI0LDQsMCwxMTQsODAsMCwxMTYsMSwKKyAgICAwLDEyNCw0LDAsMTMxLDEsMCwxMiwxMTQsODAsMCwxMTYsMCwwLDEyNCw0LAorICAgIDAsMTMxLDEsMCw5MiwyLDAsMTI1LDQsMCwxMjUsNywwLDEyNCw2LDAsCisgICAgMTA2LDIsMCwxMjQsNywwLDEzMSwxLDAsMSwxMTMsMjcsMCw4NywxMjAsMTMyLAorICAgIDAsMTE2LDMsMCwxMjQsNiwwLDEzMSwxLDAsNjgsOTMsMTE4LDAsMTI1LDcsCisgICAgMCwxMTYsNCwwLDEyNCw0LDAsMTI0LDcsMCwxMzEsMiwwLDEyNSw0LDAsCisgICAgMTIxLDE3LDAsMTE2LDUsMCwxMDYsNiwwLDEyNCw0LDAsMTMxLDEsMCwxLAorICAgIDg3LDExMyw5NCwwLDQsMTE2LDcsMCwxMDcsMTAsMCwxMTQsMTU1LDAsMSwxLAorICAgIDEsMTE5LDk0LDAsODksMTEzLDk0LDAsNCwxMTYsOCwwLDEwNywxMCwwLDExNCwKKyAgICAyMTEsMCwxLDEyNSw4LDAsMSwxMjIsMjUsMCwxMTYsOSwwLDEwMCwxLDAsCisgICAgMTI0LDQsMCwxMjQsOCwwLDEzMSwzLDAsMSwxMDAsMiwwLDgzLDg3LDg5LAorICAgIDEwMCwyLDAsMTAwLDIsMCwxMjUsOCwwLDEyNiw4LDAsODgsMTEzLDk0LDAsCisgICAgODgsMTEzLDk0LDAsODcsMTIxLDMzLDAsMTE2LDEwLDAsMTI0LDEsMCwxMjQsMiwKKyAgICAwLDEyNCwzLDAsMTMxLDMsMCwxLDExNiw5LDAsMTAwLDMsMCwxMjQsMSwKKyAgICAwLDEzMSwyLDAsMSw4NywxMTAsNTMsMCw0LDExNiw4LDAsMTA3LDEwLDAsCisgICAgMTE0LDQ4LDEsMSwxMjUsOCwwLDEsMTIyLDIxLDAsMTE2LDksMCwxMDAsMSwKKyAgICAwLDEyNCwxLDAsMTI0LDgsMCwxMzEsMywwLDEsODcsODksMTAwLDIsMCwKKyAgICAxMDAsMiwwLDEyNSw4LDAsMTI2LDgsMCw4OCwxMTAsMSwwLDg4LDEwMCwyLAorICAgIDAsODMsNDEsNCwxMjIsMjcsODcsMTE0LDEwNSwxMTYsMTAxLDMyLDk4LDEyMSwxMTYsMTAxLAorICAgIDExNSwzMiwxMDAsOTcsMTE2LDk3LDMyLDExNiwxMTEsMzIsOTcsMzIsMTAyLDEwNSwxMDgsMTAxLAorICAgIDQ2LDEyMiwyNyw5OSwxMTEsMTE3LDEwOCwxMDAsMzIsMTEwLDExMSwxMTYsMzIsOTksMTE0LDEwMSwKKyAgICA5NywxMTYsMTAxLDMyLDEyMywzMywxMTQsMTI1LDU4LDMyLDEyMywzMywxMTQsMTI1LDc4LDEyMiwKKyAgICAxMiw5OSwxMTQsMTAxLDk3LDExNiwxMDEsMTAwLDMyLDEyMywzMywxMTQsMTI1LDQxLDExLDExNCwKKyAgICAzOCwwLDAsMCwxMTQsNDYsMCwwLDAsMTE0LDIyNCwwLDAsMCwxMTQsMzMsCisgICAgMCwwLDAsMTE0LDI4LDAsMCwwLDExNCwzLDAsMCwwLDkwLDUsMTA5LAorICAgIDEwNywxMDAsMTA1LDExNCwyMTgsMTUsNzAsMTA1LDEwOCwxMDEsNjksMTIwLDEwNSwxMTUsMTE2LDExNSwKKyAgICA2OSwxMTQsMTE0LDExMSwxMTQsMTE0LDQwLDAsMCwwLDExNCwxNTMsMCwwLDAsMTE0LAorICAgIDU1LDAsMCwwLDQxLDksMTE0LDcxLDAsMCwwLDExNCwzNSwwLDAsMCwKKyAgICAxMTQsNTMsMCwwLDAsMTE0LDU1LDEsMCwwLDExNCwyMzQsMCwwLDAsMTE0LAorICAgIDEzMSwwLDAsMCwxMTQsMjcsMCwwLDAsMTE0LDIzLDAsMCwwLDExNCw0MSwKKyAgICAxLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLAorICAgIDAsMCwxMTQsMzgsMSwwLDAsMTA1LDYsMCwwLDExNSwzOCwwLDAsMCwKKyAgICAwLDIsMTgsMSw2LDIsMjIsMSwxOCwxLDE3LDIsMTksMSwxNSwxLAorICAgIDMsMSwxNywxLDEzLDIsNywxLDE4LDMsMTYsMSwyNywxLDMsMSwKKyAgICAxNiwxLDE3LDEsMTgsMiwxMjIsMjUsODMsMTExLDExNywxMTQsOTksMTAxLDcwLDEwNSwKICAgICAxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMTUsMTAxLDExNiw5NSwxMDAsOTcsMTE2LAotICAgIDk3LDc4LDQwLDcsMCwwLDAsMTE3LDgsMCwwLDAsOTUsOTUsMTEwLDk3LAotICAgIDEwOSwxMDEsOTUsOTUsMTE3LDEwLDAsMCwwLDk1LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsCi0gICAgMTAxLDk1LDk1LDExNywxMiwwLDAsMCw5NSw5NSwxMTMsMTE3LDk3LDEwOCwxMTAsOTcsCi0gICAgMTA5LDEwMSw5NSw5NSwxMTcsNywwLDAsMCw5NSw5NSwxMDAsMTExLDk5LDk1LDk1LAotICAgIDExNywxMCwwLDAsMCwxMTIsOTcsMTE2LDEwNCw5NSwxMTUsMTE2LDk3LDExNiwxMTUsMTE3LAotICAgIDE1LDAsMCwwLDk1LDk5LDk3LDk5LDEwNCwxMDEsOTUsOTgsMTIxLDExNiwxMDEsOTksCi0gICAgMTExLDEwMCwxMDEsMTE3LDgsMCwwLDAsMTE1LDEwMSwxMTYsOTUsMTAwLDk3LDExNiw5NywKLSAgICA0MCwxLDAsMCwwLDExNywxMCwwLDAsMCw5NSw5NSwxMDgsMTExLDk5LDk3LAotICAgIDEwOCwxMTUsOTUsOTUsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwKLSAgICAwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LAotICAgIDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwKLSAgICAxMTcsMTYsMCwwLDAsODMsMTExLDExNywxMTQsOTksMTAxLDcwLDEwNSwxMDgsMTAxLDc2LAotICAgIDExMSw5NywxMDAsMTAxLDExNCwxMSw0LDAsMCwxMTUsOCwwLDAsMCwxNiwyLAotICAgIDYsMiwxMiw1LDEyLDExLDExNywxNiwwLDAsMCw4MywxMTEsMTE3LDExNCw5OSwKLSAgICAxMDEsNzAsMTA1LDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDk5LDEsMCwwLDAsCi0gICAgMCwwLDAsMCwxLDAsMCwwLDIsMCwwLDAsNjYsMCwwLDAsCi0gICAgMTE1LDYyLDAsMCwwLDEyNCwwLDAsNjksMTAxLDAsMCw5MCwxLDAsMTAwLAotICAgIDAsMCw5MCwyLDAsMTAwLDEsMCw5MCwzLDAsMTAwLDIsMCwxMDAsMywKLSAgICAwLDEzMiwwLDAsOTAsNCwwLDEwMCw0LDAsMTAwLDUsMCwxMzIsMCwwLAotICAgIDkwLDUsMCwxMDAsNiwwLDEwMCw3LDAsMTMyLDAsMCw5MCw2LDAsMTAwLAotICAgIDgsMCw4Myw0MCw5LDAsMCwwLDExNywyMCwwLDAsMCw4MywxMTEsMTE3LAotICAgIDExNCw5OSwxMDEsMTA4LDEwMSwxMTUsMTE1LDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLAotICAgIDExNCwxMTcsNDUsMCwwLDAsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDMyLDExOSwxMDQsMTA1LAotICAgIDk5LDEwNCwzMiwxMDQsOTcsMTEwLDEwMCwxMDgsMTAxLDExNSwzMiwxMTUsMTExLDExNywxMTQsOTksCi0gICAgMTAxLDEwOCwxMDEsMTE1LDExNSwzMiwxMDIsMTA1LDEwOCwxMDEsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwKLSAgICAxMTYsMTE1LDQ2LDk5LDIsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLAotICAgIDQsMCwwLDAsNjcsMCwwLDAsMTE1LDE5LDAsMCwwLDEyNCwwLDAsCi0gICAgMTA2LDAsMCwxMjQsMSwwLDEwMCwxLDAsMTAwLDIsMCwxMzEsMSwxLDgzLAotICAgIDQwLDMsMCwwLDAsNzgsMTE3LDEwLDAsMCwwLDExNSwxMTEsMTE3LDExNCw5OSwKLSAgICAxMDEsMTA4LDEwMSwxMTUsMTE1LDg0LDQwLDIsMCwwLDAsMTE3LDEyLDAsMCwwLAotICAgIDk1LDEwOCwxMTEsOTcsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNyw0LDAsMCwKLSAgICAwLDg0LDExNCwxMTcsMTAxLDQwLDIsMCwwLDAsMTE3LDQsMCwwLDAsMTE1LAotICAgIDEwMSwxMDgsMTAyLDExNyw4LDAsMCwwLDEwMiwxMTcsMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSwKLSAgICA0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLAotICAgIDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsCi0gICAgNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxMSwwLDAsCi0gICAgMCwxMDgsMTExLDk3LDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw2NCw0LDAsMCwKLSAgICAxMTUsMiwwLDAsMCwwLDEsMTE3LDMyLDAsMCwwLDgzLDExMSwxMTcsMTE0LAotICAgIDk5LDEwMSwxMDgsMTAxLDExNSwxMTUsNzAsMTA1LDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LAotICAgIDQ2LDEwOCwxMTEsOTcsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk5LDIsMCwwLAotICAgIDAsMCwwLDAsMCw2LDAsMCwwLDYsMCwwLDAsNjcsMCwwLAotICAgIDAsMTE1LDEzOCwwLDAsMCwxMjQsMCwwLDEwNiwwLDAsMTI0LDEsMCwxMzEsCi0gICAgMSwwLDEyNSwyLDAsMTI0LDAsMCwxMDYsMSwwLDEyNCwyLDAsMTMxLDEsCi0gICAgMCwxMjUsMywwLDEyNCwwLDAsMTA2LDIsMCwxMjQsMSwwLDEyNCwzLDAsCi0gICAgMTI0LDIsMCwxMDAsMCwwLDEzMSw0LDAsMTI1LDQsMCwxMTYsNCwwLDEwNiwKLSAgICA1LDAsMTI0LDQsMCwxMzEsMSwwLDEyNSw1LDAsMTE2LDYsMCwxMjQsNSwKLSAgICAwLDExNiw3LDAsMTMxLDIsMCwxMTQsMTAxLDAsMTE2LDgsMCwxMDAsMSwwLAotICAgIDEyNCwyLDAsMTMxLDIsMCwxLDEyNCw1LDAsODMsMTE2LDksMCwxMDAsMiwKLSAgICAwLDEwNiwxMCwwLDEyNCwyLDAsMTMxLDEsMCwxMDAsMywwLDEyNCwxLDAsCi0gICAgMTAwLDQsMCwxMjQsMiwwLDEzMSwxLDIsMTMwLDEsMCwxMDAsMCwwLDgzLAotICAgIDQwLDUsMCwwLDAsNzgsMTE3LDIxLDAsMCwwLDk5LDExMSwxMDAsMTAxLDMyLAotICAgIDExMSw5OCwxMDYsMTAxLDk5LDExNiwzMiwxMDIsMTE0LDExMSwxMDksMzIsMTIzLDMzLDExNCwxMjUsCi0gICAgMTE3LDIxLDAsMCwwLDc4LDExMSwxMTAsNDUsOTksMTExLDEwMCwxMDEsMzIsMTExLDk4LAotICAgIDEwNiwxMDEsOTksMTE2LDMyLDEwNSwxMTAsMzIsMTIzLDEyNSwxMTcsNCwwLDAsMCwxMTAsCi0gICAgOTcsMTA5LDEwMSwxMTcsNCwwLDAsMCwxMTIsOTcsMTE2LDEwNCw0MCwxMSwwLDAsCi0gICAgMCwxMTcsMTIsMCwwLDAsMTAzLDEwMSwxMTYsOTUsMTAyLDEwNSwxMDgsMTAxLDExMCw5NywKLSAgICAxMDksMTAxLDExNyw4LDAsMCwwLDEwMywxMDEsMTE2LDk1LDEwMCw5NywxMTYsOTcsMTE3LAotICAgIDIwLDAsMCwwLDk1LDk4LDEyMSwxMTYsMTAxLDExNSw5NSwxMDIsMTE0LDExMSwxMDksOTUsCi0gICAgOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsMTE3LDQsMCwwLDAsNzgsMTExLDExMCwKLSAgICAxMDEsMTE3LDcsMCwwLDAsMTA5LDk3LDExNCwxMTUsMTA0LDk3LDEwOCwxMTcsNSwwLAotICAgIDAsMCwxMDgsMTExLDk3LDEwMCwxMTUsMTE3LDEwLDAsMCwwLDEwNSwxMTUsMTA1LDExMCwKLSAgICAxMTUsMTE2LDk3LDExMCw5OSwxMDEsMTE3LDEwLDAsMCwwLDk1LDk5LDExMSwxMDAsMTAxLAotICAgIDk1LDExNiwxMjEsMTEyLDEwMSwxMTcsMTYsMCwwLDAsOTUsMTE4LDEwMSwxMTQsOTgsMTExLAotICAgIDExNSwxMDEsOTUsMTA5LDEwMSwxMTUsMTE1LDk3LDEwMywxMDEsMTE3LDExLDAsMCwwLDczLAotICAgIDEwOSwxMTIsMTExLDExNCwxMTYsNjksMTE0LDExNCwxMTEsMTE0LDExNyw2LDAsMCwwLDEwMiwKLSAgICAxMTEsMTE0LDEwOSw5NywxMTYsNDAsNiwwLDAsMCwxMTcsNCwwLDAsMCwxMTUsCi0gICAgMTAxLDEwOCwxMDIsMTE3LDgsMCwwLDAsMTAyLDExNywxMDgsMTA4LDExMCw5NywxMDksMTAxLAotICAgIDExNyw0LDAsMCwwLDExMiw5NywxMTYsMTA0LDExNyw0LDAsMCwwLDEwMCw5NywKLSAgICAxMTYsOTcsMTE3LDEwLDAsMCwwLDk4LDEyMSwxMTYsMTAxLDExNSw5NSwxMDAsOTcsMTE2LAotICAgIDk3LDExNyw1LDAsMCwwLDEwMiwxMTEsMTE3LDExMCwxMDAsNDAsMCwwLDAsMCwKLSAgICA0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLAotICAgIDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsCi0gICAgMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsOCwwLDAsMCwxMDMsMTAxLDExNiw5NSwKLSAgICA5OSwxMTEsMTAwLDEwMSw2Nyw0LDAsMCwxMTUsMTgsMCwwLDAsMCwxLDE1LAotICAgIDEsMTUsMSwyNCwxLDE1LDEsMTUsMSwxMywxLDQsMiwxOCwxLDExNywKLSAgICAyOSwwLDAsMCw4MywxMTEsMTE3LDExNCw5OSwxMDEsMTA4LDEwMSwxMTUsMTE1LDcwLDEwNSwKKyAgICA5Nyw3OCw0MSw3LDExNCw1NywwLDAsMCwxMTQsNTYsMCwwLDAsMTE0LDU4LAorICAgIDAsMCwwLDExNCw1OSwwLDAsMCwxMTQsMzcsMSwwLDAsMTE0LDM5LDEsCisgICAgMCwwLDExNCwzOCwxLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsCisgICAgMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsOSwxLDAsMCwKKyAgICA5MSw2LDAsMCwxMTUsOCwwLDAsMCwxMiwyLDYsMiwxMiw1LDEyLAorICAgIDUsMTE0LDksMSwwLDAsOTksMCwwLDAsMCwwLDAsMCwwLDAsCisgICAgMCwwLDAsMiwwLDAsMCw2NCwwLDAsMCwxMTUsNDYsMCwwLDAsCisgICAgMTAxLDAsMCw5MCwxLDAsMTAwLDAsMCw5MCwyLDAsMTAwLDEsMCw5MCwKKyAgICAzLDAsMTAwLDIsMCwxMDAsMywwLDEzMiwwLDAsOTAsNCwwLDEwMCw0LAorICAgIDAsMTAwLDUsMCwxMzIsMCwwLDkwLDUsMCwxMDAsNiwwLDgzLDQxLDcsCisgICAgMTE0LDgsMSwwLDAsMTIyLDQ1LDc2LDExMSw5NywxMDAsMTAxLDExNCwzMiwxMTksMTA0LAorICAgIDEwNSw5OSwxMDQsMzIsMTA0LDk3LDExMCwxMDAsMTA4LDEwMSwxMTUsMzIsMTE1LDExMSwxMTcsMTE0LAorICAgIDk5LDEwMSwxMDgsMTAxLDExNSwxMTUsMzIsMTAyLDEwNSwxMDgsMTAxLDMyLDEwNSwxMDksMTEyLDExMSwKKyAgICAxMTQsMTE2LDExNSw0Niw5OSwyLDAsMCwwLDAsMCwwLDAsNSwwLDAsCisgICAgMCw2LDAsMCwwLDY3LDAsMCwwLDExNSw3NiwwLDAsMCwxMjQsMCwKKyAgICAwLDEwNiwwLDAsMTI0LDEsMCwxMzEsMSwwLDEyNSwyLDAsMTI0LDAsMCwKKyAgICAxMDYsMSwwLDEyNCwyLDAsMTMxLDEsMCwxMjUsMywwLDExNiwyLDAsMTI0LAorICAgIDMsMCwxMDAsMSwwLDEyNCwxLDAsMTAwLDIsMCwxMjQsMiwwLDEzMSwxLAorICAgIDIsMTI1LDQsMCwxMTYsMywwLDEyNCw0LDAsMTAwLDEsMCwxMjQsMSwwLAorICAgIDEwMCwzLDAsMTI0LDIsMCwxMzEsMSwyLDgzLDQxLDQsNzgsMTE0LDY3LDAsCisgICAgMCwwLDExNCwzNSwwLDAsMCwxMTQsMTQxLDAsMCwwLDQxLDQsMTE0LDIzOSwKKyAgICAwLDAsMCwxMTQsNDAsMSwwLDAsMTE0LDE5MSwwLDAsMCwxMTQsMTk2LDAsCisgICAgMCwwLDQxLDUsMTE0LDcxLDAsMCwwLDExNCwxNTksMCwwLDAsMTE0LDM1LAorICAgIDAsMCwwLDExNCw1MywwLDAsMCwxMTQsNDgsMSwwLDAsMTE0LDQsMCwKKyAgICAwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDE2LDEsMCwKKyAgICAwLDEzOCw2LDAsMCwxMTUsOCwwLDAsMCwwLDEsMTUsMSwxNSwxLAorICAgIDI0LDEsMTIyLDI5LDgzLDExMSwxMTcsMTE0LDk5LDEwMSwxMDgsMTAxLDExNSwxMTUsNzAsMTA1LAogICAgIDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDEwMywxMDEsMTE2LDk1LDk5LDExMSwxMDAsCiAgICAgMTAxLDk5LDIsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDEsMCwKLSAgICAwLDAsNjcsMCwwLDAsMTE1LDQsMCwwLDAsMTAwLDEsMCw4Myw0MCwKLSAgICAyLDAsMCwwLDExNywzOSwwLDAsMCw4MiwxMDEsMTE2LDExNywxMTQsMTEwLDMyLAotICAgIDc4LDExMSwxMTAsMTAxLDMyLDk3LDExNSwzMiwxMTYsMTA0LDEwMSwxMTQsMTAxLDMyLDEwNSwxMTUsCi0gICAgMzIsMTEwLDExMSwzMiwxMTUsMTExLDExNywxMTQsOTksMTAxLDMyLDk5LDExMSwxMDAsMTAxLDQ2LAotICAgIDc4LDQwLDEsMCwwLDAsMTE3LDQsMCwwLDAsNzgsMTExLDExMCwxMDEsNDAsCi0gICAgMiwwLDAsMCwxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwxMDIsMTE3LDgsMCwKLSAgICAwLDAsMTAyLDExNywxMDgsMTA4LDExMCw5NywxMDksMTAxLDQwLDAsMCwwLDAsNDAsCi0gICAgMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsCi0gICAgMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwKLSAgICAxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDEwLDAsMCwwLDEwMywxMDEsMTE2LDk1LDExNSwKLSAgICAxMTEsMTE3LDExNCw5OSwxMDEsNzksNCwwLDAsMTE1LDIsMCwwLDAsMCwyLAotICAgIDExNywzMSwwLDAsMCw4MywxMTEsMTE3LDExNCw5OSwxMDEsMTA4LDEwMSwxMTUsMTE1LDcwLAotICAgIDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMDMsMTAxLDExNiw5NSwxMTUsMTExLAotICAgIDExNywxMTQsOTksMTAxLDc4LDQwLDcsMCwwLDAsMTE3LDgsMCwwLDAsOTUsCi0gICAgOTUsMTEwLDk3LDEwOSwxMDEsOTUsOTUsMTE3LDEwLDAsMCwwLDk1LDk1LDEwOSwxMTEsCi0gICAgMTAwLDExNywxMDgsMTAxLDk1LDk1LDExNywxMiwwLDAsMCw5NSw5NSwxMTMsMTE3LDk3LAotICAgIDEwOCwxMTAsOTcsMTA5LDEwMSw5NSw5NSwxMTcsNywwLDAsMCw5NSw5NSwxMDAsMTExLAotICAgIDk5LDk1LDk1LDExNywxMSwwLDAsMCwxMDgsMTExLDk3LDEwMCw5NSwxMDksMTExLDEwMCwKLSAgICAxMTcsMTA4LDEwMSwxMTcsOCwwLDAsMCwxMDMsMTAxLDExNiw5NSw5OSwxMTEsMTAwLDEwMSwKLSAgICAxMTcsMTAsMCwwLDAsMTAzLDEwMSwxMTYsOTUsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw0MCwKLSAgICAxLDAsMCwwLDExNywxMCwwLDAsMCw5NSw5NSwxMDgsMTExLDk5LDk3LDEwOCwKLSAgICAxMTUsOTUsOTUsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLAotICAgIDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwKLSAgICAxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsCi0gICAgMjAsMCwwLDAsODMsMTExLDExNywxMTQsOTksMTAxLDEwOCwxMDEsMTE1LDExNSw3MCwxMDUsCi0gICAgMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNjAsNCwwLDAsMTE1LDgsMCwwLAotICAgIDAsMTYsMiw2LDIsMTIsMywxMiwxMiwxMTcsMjAsMCwwLDAsODMsMTExLAotICAgIDExNywxMTQsOTksMTAxLDEwOCwxMDEsMTE1LDExNSw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLAotICAgIDEwMSwxMTQsOTksMSwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsNSwKLSAgICAwLDAsMCw2NiwwLDAsMCwxMTUsMTA0LDAsMCwwLDEyNCwwLDAsNjksCi0gICAgMTAxLDAsMCw5MCwxLDAsMTAwLDAsMCw5MCwyLDAsMTAwLDEsMCw5MCwKLSAgICAzLDAsMTAwLDIsMCwxMDAsMywwLDEzMiwwLDAsOTAsNCwwLDEwMSw1LAotICAgIDAsMTAxLDYsMCwxMDEsNywwLDEwMCw0LDAsMTAwLDUsMCwxMzIsMCwwLAotICAgIDEzMSwxLDAsMTMxLDEsMCwxMzEsMSwwLDkwLDgsMCwxMDAsNiwwLDEwMCwKLSAgICA3LDAsMTMyLDAsMCw5MCw5LDAsMTAwLDgsMCwxMDAsOSwwLDEzMiwwLAotICAgIDAsOTAsMTAsMCwxMDAsMTAsMCwxMDAsMTEsMCwxMzIsMCwwLDkwLDExLDAsCi0gICAgMTAwLDEyLDAsODMsNDAsMTMsMCwwLDAsMTE3LDE5LDAsMCwwLDY5LDEyMCwKLSAgICAxMTYsMTAxLDExMCwxMTUsMTA1LDExMSwxMTAsNzAsMTA1LDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsCi0gICAgMTE0LDExNyw5MywwLDAsMCw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsMzIsMTAyLDExMSwxMTQsCi0gICAgMzIsMTAxLDEyMCwxMTYsMTAxLDExMCwxMTUsMTA1LDExMSwxMTAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwKLSAgICAxMDEsMTE1LDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDg0LDEwNCwxMDEsMzIsOTksMTExLDExMCwKLSAgICAxMTUsMTE2LDExNCwxMTcsOTksMTE2LDExMSwxMTQsMzIsMTA1LDExNSwzMiwxMDAsMTAxLDExNSwxMDUsCi0gICAgMTAzLDExMCwxMDEsMTAwLDMyLDExNiwxMTEsMzIsMTE5LDExMSwxMTQsMTA3LDMyLDExOSwxMDUsMTE2LAotICAgIDEwNCwzMiw3MCwxMDUsMTA4LDEwMSw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDEwLDEwLDMyLAotICAgIDMyLDMyLDMyLDk5LDMsMCwwLDAsMCwwLDAsMCwzLDAsMCwwLAotICAgIDIsMCwwLDAsNjcsMCwwLDAsMTE1LDIyLDAsMCwwLDEyNCwxLDAsCi0gICAgMTI0LDAsMCw5NSwwLDAsMTI0LDIsMCwxMjQsMCwwLDk1LDEsMCwxMDAsCi0gICAgMCwwLDgzLDQwLDEsMCwwLDAsNzgsNDAsMiwwLDAsMCwxMTcsNCwKLSAgICAwLDAsMCwxMTAsOTcsMTA5LDEwMSwxMTcsNCwwLDAsMCwxMTIsOTcsMTE2LDEwNCwKLSAgICA0MCwzLDAsMCwwLDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LDEwMiwxMTcsNCwKLSAgICAwLDAsMCwxMTAsOTcsMTA5LDEwMSwxMTcsNCwwLDAsMCwxMTIsOTcsMTE2LDEwNCwKLSAgICA0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLAotICAgIDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsCi0gICAgNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNyw4LDAsMCwKLSAgICAwLDk1LDk1LDEwNSwxMTAsMTA1LDExNiw5NSw5NSw5Niw0LDAsMCwxMTUsNCwwLAotICAgIDAsMCwwLDEsOSwxLDExNywyOCwwLDAsMCw2OSwxMjAsMTE2LDEwMSwxMTAsCi0gICAgMTE1LDEwNSwxMTEsMTEwLDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0Niw5NSwKLSAgICA5NSwxMDUsMTEwLDEwNSwxMTYsOTUsOTUsOTksMiwwLDAsMCwwLDAsMCwwLAotICAgIDQsMCwwLDAsMTAsMCwwLDAsNjcsMCwwLDAsMTE1LDE3NSwwLDAsCi0gICAgMCwxMjQsMSwwLDExNiwwLDAsMTA2LDEsMCwxMDcsNiwwLDEyNSwyLDAsCi0gICAgMTIxLDEwNywwLDExNiwyLDAsMTE2LDMsMCwxMDYsNCwwLDEyNCwxLDAsMTI0LAotICAgIDAsMCwxMDYsNSwwLDEzMSwzLDAsMTI1LDMsMCwxMTYsNiwwLDEwMCwxLAotICAgIDAsMTI0LDAsMCwxMDYsNSwwLDEzMSwyLDAsMSwxMjQsMCwwLDEwNiw3LAotICAgIDAsMTI0LDEsMCwxMzEsMSwwLDExNCwxMTcsMCwxMTYsOCwwLDEyNCwzLDAsCi0gICAgMTAwLDIsMCwxMzEsMiwwLDEyLDExNCwxMTcsMCwxMTYsOSwwLDEyNCwwLDAsCi0gICAgMTA2LDUsMCwxMzEsMSwwLDEwMCwzLDAsMjUsMTAzLDEsMCwxMjQsMywwLAotICAgIDk1LDEwLDAsMTEwLDAsMCwxMjQsMywwLDgzLDg3LDExMCw0NiwwLDEsMSwKLSAgICAxLDEyNCwyLDAsMTIsMTE0LDE2MywwLDEyNCwxLDAsMTE2LDAsMCwxMDYsMSwKLSAgICAwLDEwNyw2LDAsMTE0LDE2MywwLDExNiwwLDAsMTA2LDEsMCwxMjQsMSwwLAotICAgIDYxLDExMCwwLDAsMTMwLDAsMCw4OSwxMTAsMSwwLDg4LDEwMCw0LDAsODMsCi0gICAgNDAsNSwwLDAsMCwxMTcsMjUsMCwwLDAsNzYsMTExLDk3LDEwMCwzMiw5NywKLSAgICAxMTAsMzIsMTAxLDEyMCwxMTYsMTAxLDExMCwxMTUsMTA1LDExMSwxMTAsMzIsMTA5LDExMSwxMDAsMTE3LAotICAgIDEwOCwxMDEsNDYsMTE3LDMzLDAsMCwwLDEwMSwxMjAsMTE2LDEwMSwxMTAsMTE1LDEwNSwxMTEsCi0gICAgMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwxMDAsMzIsCi0gICAgMTAyLDExNCwxMTEsMTA5LDMyLDEyMywzMywxMTQsMTI1LDExNyw4LDAsMCwwLDk1LDk1LAotICAgIDExMiw5NywxMTYsMTA0LDk1LDk1LDEwNSwwLDAsMCwwLDc4LDQwLDExLDAsMCwKLSAgICAwLDExNywzLDAsMCwwLDExNSwxMjEsMTE1LDExNyw3LDAsMCwwLDEwOSwxMTEsCi0gICAgMTAwLDExNywxMDgsMTAxLDExNSwxMTcsMjUsMCwwLDAsOTUsOTksOTcsMTA4LDEwOCw5NSwKLSAgICAxMTksMTA1LDExNiwxMDQsOTUsMTAyLDExNCw5NywxMDksMTAxLDExNSw5NSwxMTQsMTAxLDEwOSwxMTEsCi0gICAgMTE4LDEwMSwxMDAsMTE3LDQsMCwwLDAsOTUsMTA1LDEwOSwxMTIsMTE3LDEyLDAsMCwKLSAgICAwLDEwOCwxMTEsOTcsMTAwLDk1LDEwMCwxMjEsMTEwLDk3LDEwOSwxMDUsOTksMTE3LDQsMCwKLSAgICAwLDAsMTEyLDk3LDExNiwxMDQsMTE3LDE2LDAsMCwwLDk1LDExOCwxMDEsMTE0LDk4LAotICAgIDExMSwxMTUsMTAxLDk1LDEwOSwxMDEsMTE1LDExNSw5NywxMDMsMTAxLDExNywxMCwwLDAsMCwKLSAgICAxMDUsMTE1LDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwxMTcsNywwLDAsMCwxMDQsCi0gICAgOTcsMTE1LDk3LDExNiwxMTYsMTE0LDExNywxMSwwLDAsMCw5NSwxMTIsOTcsMTE2LDEwNCwKLSAgICA5NSwxMTUsMTEyLDEwOCwxMDUsMTE2LDExNyw4LDAsMCwwLDk1LDk1LDExMiw5NywxMTYsCi0gICAgMTA0LDk1LDk1LDQwLDQsMCwwLDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsCi0gICAgMTAyLDExNyw4LDAsMCwwLDEwMiwxMTcsMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSwxMTcsOSwKLSAgICAwLDAsMCwxMDUsMTE1LDk1LDExNCwxMDEsMTA4LDExMSw5NywxMDAsMTE3LDYsMCwwLAotICAgIDAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDAsMCwwLDAsMCw0MCwwLDAsMCwKLSAgICAwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LAotICAgIDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LAotICAgIDk3LDExMiw2MiwxMTcsMTEsMCwwLDAsMTA4LDExMSw5NywxMDAsOTUsMTA5LDExMSwxMDAsCi0gICAgMTE3LDEwOCwxMDEsMTAwLDQsMCwwLDExNSwyNCwwLDAsMCwwLDUsMTUsMSwKLSAgICAzLDEsOSwxLDE1LDEsMTYsMSwzMSwxLDI4LDEsOCwxLDMsMSwKLSAgICAyMiwxLDEzLDEsMTE3LDMxLDAsMCwwLDY5LDEyMCwxMTYsMTAxLDExMCwxMTUsMTA1LAotICAgIDExMSwxMTAsNzAsMTA1LDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDEwOCwxMTEsOTcsCi0gICAgMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk5LDIsMCwwLDAsMCwwLDAsCi0gICAgMCwyLDAsMCwwLDQsMCwwLDAsMywwLDAsMCwxMTUsNDgsMCwKLSAgICAwLDAsMTE2LDAsMCwxMjQsMCwwLDEwNiwxLDAsMTMxLDEsMCwxMDAsMSwKLSAgICAwLDI1LDEzNywwLDAsMTE2LDIsMCwxMzUsMCwwLDEwMiwxLDAsMTAwLDIsCi0gICAgMCwxMDAsMywwLDEzNCwwLDAsMTE2LDMsMCw2OCwxMzEsMSwwLDEzMSwxLAotICAgIDAsODMsNDAsNCwwLDAsMCwxMTcsNDksMCwwLDAsODIsMTAxLDExNiwxMTcsCi0gICAgMTE0LDExMCwzMiw4NCwxMTQsMTE3LDEwMSwzMiwxMDUsMTAyLDMyLDExNiwxMDQsMTAxLDMyLDEwMSwKLSAgICAxMjAsMTE2LDEwMSwxMTAsMTE1LDEwNSwxMTEsMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLAotICAgIDEwNSwxMTUsMzIsOTcsMzIsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDQ2LDEwNSwxLDAsCi0gICAgMCwwLDk5LDEsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDQsCi0gICAgMCwwLDAsNTEsMCwwLDAsMTE1LDMxLDAsMCwwLDEyNCwwLDAsOTMsCi0gICAgMjEsMCwxMjUsMSwwLDEzNiwwLDAsMTAwLDAsMCwxMjQsMSwwLDIzLDEwNywKLSAgICAyLDAsODYsMSwxMTMsMywwLDEwMCwxLDAsODMsNDAsMiwwLDAsMCwKLSAgICAxMTcsOCwwLDAsMCw5NSw5NSwxMDUsMTEwLDEwNSwxMTYsOTUsOTUsNzgsNDAsMCwKLSAgICAwLDAsMCw0MCwyLDAsMCwwLDExNywyLDAsMCwwLDQ2LDQ4LDExNywKLSAgICA2LDAsMCwwLDExNSwxMTcsMTAyLDEwMiwxMDUsMTIwLDQwLDEsMCwwLDAsMTE3LAotICAgIDksMCwwLDAsMTAyLDEwNSwxMDgsMTAxLDk1LDExMCw5NywxMDksMTAxLDQwLDAsMCwKLSAgICAwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwKLSAgICAxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwKLSAgICAxMTQsOTcsMTEyLDYyLDExNyw5LDAsMCwwLDYwLDEwMywxMDEsMTEwLDEwMSwxMjAsMTEyLAotICAgIDExNCw2MiwxMjEsNCwwLDAsMTE1LDIsMCwwLDAsNiwxLDExNyw0OSwwLAotICAgIDAsMCw2OSwxMjAsMTE2LDEwMSwxMTAsMTE1LDEwNSwxMTEsMTEwLDcwLDEwNSwxMDgsMTAxLDc2LAotICAgIDExMSw5NywxMDAsMTAxLDExNCw0NiwxMDUsMTE1LDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwKLSAgICA0Niw2MCwxMDgsMTExLDk5LDk3LDEwOCwxMTUsNjIsNDYsNjAsMTAzLDEwMSwxMTAsMTAxLDEyMCwKLSAgICAxMTIsMTE0LDYyLDQwLDQsMCwwLDAsMTE3LDExLDAsMCwwLDk1LDExMiw5NywKLSAgICAxMTYsMTA0LDk1LDExNSwxMTIsMTA4LDEwNSwxMTYsMTE3LDQsMCwwLDAsMTEyLDk3LDExNiwKLSAgICAxMDQsMTE3LDMsMCwwLDAsOTcsMTEwLDEyMSwxMTcsMTgsMCwwLDAsNjksODgsCi0gICAgODQsNjksNzgsODMsNzMsNzksNzgsOTUsODMsODUsNzAsNzAsNzMsODgsNjksODMsCi0gICAgNDAsMiwwLDAsMCwxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwxMDIsMTE3LDgsCi0gICAgMCwwLDAsMTAyLDExNywxMDgsMTA4LDExMCw5NywxMDksMTAxLDQwLDAsMCwwLDAsCi0gICAgNDAsMSwwLDAsMCwxMTcsOSwwLDAsMCwxMDIsMTA1LDEwOCwxMDEsOTUsMTEwLAotICAgIDk3LDEwOSwxMDEsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLAotICAgIDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LAotICAgIDExNiwxMTQsOTcsMTEyLDYyLDExNywxMCwwLDAsMCwxMDUsMTE1LDk1LDExMiw5Nyw5OSwKLSAgICAxMDcsOTcsMTAzLDEwMSwxMTgsNCwwLDAsMTE1LDYsMCwwLDAsMCwyLDE5LAotICAgIDEsMTgsMSwxMTcsMzAsMCwwLDAsNjksMTIwLDExNiwxMDEsMTEwLDExNSwxMDUsMTExLAotICAgIDExMCw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsMTA1LDExNSw5NSwxMTIsCi0gICAgOTcsOTksMTA3LDk3LDEwMywxMDEsOTksMiwwLDAsMCwwLDAsMCwwLDIsCi0gICAgMCwwLDAsMSwwLDAsMCw2NywwLDAsMCwxMTUsNCwwLDAsMCwKLSAgICAxMDAsMSwwLDgzLDQwLDIsMCwwLDAsMTE3LDYzLDAsMCwwLDgyLDEwMSwKLSAgICAxMTYsMTE3LDExNCwxMTAsMzIsNzgsMTExLDExMCwxMDEsMzIsOTcsMTE1LDMyLDk3LDExMCwzMiwKLSAgICAxMDEsMTIwLDExNiwxMDEsMTEwLDExNSwxMDUsMTExLDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwKLSAgICAzMiw5OSw5NywxMTAsMTEwLDExMSwxMTYsMzIsOTksMTE0LDEwMSw5NywxMTYsMTAxLDMyLDk3LAotICAgIDMyLDk5LDExMSwxMDAsMTAxLDMyLDExMSw5OCwxMDYsMTAxLDk5LDExNiw0Niw3OCw0MCwxLAotICAgIDAsMCwwLDExNyw0LDAsMCwwLDc4LDExMSwxMTAsMTAxLDQwLDIsMCwwLAotICAgIDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDExNyw4LDAsMCwwLDEwMiwKLSAgICAxMTcsMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSw0MCwwLDAsMCwwLDQwLDAsMCwwLAotICAgIDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksCi0gICAgMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsCi0gICAgOTcsMTEyLDYyLDExNyw4LDAsMCwwLDEwMywxMDEsMTE2LDk1LDk5LDExMSwxMDAsMTAxLAotICAgIDEyNCw0LDAsMCwxMTUsMiwwLDAsMCwwLDIsMTE3LDI4LDAsMCwwLAotICAgIDY5LDEyMCwxMTYsMTAxLDExMCwxMTUsMTA1LDExMSwxMTAsNzAsMTA1LDEwOCwxMDEsNzYsMTExLDk3LAotICAgIDEwMCwxMDEsMTE0LDQ2LDEwMywxMDEsMTE2LDk1LDk5LDExMSwxMDAsMTAxLDk5LDIsMCwwLAotICAgIDAsMCwwLDAsMCwyLDAsMCwwLDEsMCwwLDAsNjcsMCwwLAotICAgIDAsMTE1LDQsMCwwLDAsMTAwLDEsMCw4Myw0MCwyLDAsMCwwLDExNywKLSAgICA1MywwLDAsMCw4MiwxMDEsMTE2LDExNywxMTQsMTEwLDMyLDc4LDExMSwxMTAsMTAxLDMyLAorICAgIDAsMCw2NywwLDAsMCwxMTUsNCwwLDAsMCwxMDAsMSwwLDgzLDQxLAorICAgIDIsMTIyLDM5LDgyLDEwMSwxMTYsMTE3LDExNCwxMTAsMzIsNzgsMTExLDExMCwxMDEsMzIsOTcsCisgICAgMTE1LDMyLDExNiwxMDQsMTAxLDExNCwxMDEsMzIsMTA1LDExNSwzMiwxMTAsMTExLDMyLDExNSwxMTEsCisgICAgMTE3LDExNCw5OSwxMDEsMzIsOTksMTExLDEwMCwxMDEsNDYsNzgsMTE0LDQsMCwwLDAsCisgICAgNDEsMiwxMTQsNzEsMCwwLDAsMTE0LDE1OSwwLDAsMCwxMTQsNCwwLDAsCisgICAgMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsMTcsMSwwLDAsCisgICAgMTQ0LDYsMCwwLDExNSwyLDAsMCwwLDAsMiwxMjIsMzEsODMsMTExLDExNywKKyAgICAxMTQsOTksMTAxLDEwOCwxMDEsMTE1LDExNSw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwKKyAgICAxMTQsNDYsMTAzLDEwMSwxMTYsOTUsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw3OCw0MSw2LDExNCwKKyAgICA1NywwLDAsMCwxMTQsNTYsMCwwLDAsMTE0LDU4LDAsMCwwLDExNCw1OSwKKyAgICAwLDAsMCwxMTQsMTYsMSwwLDAsMTE0LDE3LDEsMCwwLDExNCw0LDAsCisgICAgMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwKKyAgICAwLDExNCw4LDEsMCwwLDEzNCw2LDAsMCwxMTUsNiwwLDAsMCwxMiwKKyAgICAyLDYsMiwxMiw2LDExNCw4LDEsMCwwLDk5LDAsMCwwLDAsMCwKKyAgICAwLDAsMCwwLDAsMCwwLDMsMCwwLDAsNjQsMCwwLDAsMTE1LAorICAgIDEzMCwwLDAsMCwxMDEsMCwwLDkwLDEsMCwxMDAsMCwwLDkwLDIsMCwKKyAgICAxMDAsMSwwLDkwLDMsMCwxMDAsMiwwLDEwMCwzLDAsMTMyLDAsMCw5MCwKKyAgICA0LDAsMTAwLDQsMCwxMDAsNSwwLDEzMiwwLDAsOTAsNSwwLDEwMCw2LAorICAgIDAsMTAwLDcsMCwxMzIsMCwwLDkwLDYsMCwxMDEsNywwLDEwMCw4LDAsCisgICAgMTAwLDksMCwxMzIsMCwwLDEzMSwxLDAsOTAsOCwwLDEwMCwxMCwwLDEwMCwKKyAgICAxMSwwLDEzMiwwLDAsOTAsOSwwLDEwMCwxMiwwLDEwMCwxMywwLDEzMiwwLAorICAgIDAsOTAsMTAsMCwxMDAsMTQsMCwxMDAsMTUsMCwxMzIsMCwwLDkwLDExLDAsCisgICAgMTAxLDcsMCwxMDAsMTYsMCwxMDAsMTcsMCwxMzIsMCwwLDEzMSwxLDAsOTAsCisgICAgMTIsMCwxMDAsMTgsMCw4Myw0MSwxOSwyMTgsMTksNjksMTIwLDExNiwxMDEsMTEwLDExNSwKKyAgICAxMDUsMTExLDExMCw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsMTIyLDkzLDc2LAorICAgIDExMSw5NywxMDAsMTAxLDExNCwzMiwxMDIsMTExLDExNCwzMiwxMDEsMTIwLDExNiwxMDEsMTEwLDExNSwKKyAgICAxMDUsMTExLDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsNDYsMTAsMTAsMzIsMzIsCisgICAgMzIsMzIsODQsMTA0LDEwMSwzMiw5OSwxMTEsMTEwLDExNSwxMTYsMTE0LDExNyw5OSwxMTYsMTExLAorICAgIDExNCwzMiwxMDUsMTE1LDMyLDEwMCwxMDEsMTE1LDEwNSwxMDMsMTEwLDEwMSwxMDAsMzIsMTE2LDExMSwKKyAgICAzMiwxMTksMTExLDExNCwxMDcsMzIsMTE5LDEwNSwxMTYsMTA0LDMyLDcwLDEwNSwxMDgsMTAxLDcwLAorICAgIDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsMTAsMTAsMzIsMzIsMzIsMzIsOTksMywwLDAsCisgICAgMCwwLDAsMCwwLDMsMCwwLDAsMiwwLDAsMCw2NywwLDAsCisgICAgMCwxMTUsMjIsMCwwLDAsMTI0LDEsMCwxMjQsMCwwLDk1LDAsMCwxMjQsCisgICAgMiwwLDEyNCwwLDAsOTUsMSwwLDEwMCwwLDAsODMsNDEsMSw3OCw0MSwKKyAgICAyLDExNCw2NywwLDAsMCwxMTQsMzUsMCwwLDAsNDEsMywxMTQsNzEsMCwKKyAgICAwLDAsMTE0LDY3LDAsMCwwLDExNCwzNSwwLDAsMCwxMTQsNCwwLDAsCisgICAgMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsNzIsMCwwLDAsCisgICAgMTYxLDYsMCwwLDExNSw0LDAsMCwwLDAsMSw5LDEsMTIyLDI4LDY5LAorICAgIDEyMCwxMTYsMTAxLDExMCwxMTUsMTA1LDExMSwxMTAsNzAsMTA1LDEwOCwxMDEsNzYsMTExLDk3LDEwMCwKKyAgICAxMDEsMTE0LDQ2LDk1LDk1LDEwNSwxMTAsMTA1LDExNiw5NSw5NSw5OSwyLDAsMCwwLAorICAgIDAsMCwwLDAsMiwwLDAsMCwyLDAsMCwwLDY3LDAsMCwwLAorICAgIDExNSwzNCwwLDAsMCwxMjQsMCwwLDEwNiwwLDAsMTI0LDEsMCwxMDYsMCwKKyAgICAwLDEwNywyLDAsMTExLDMzLDAsMTI0LDAsMCwxMDYsMSwwLDEyNCwxLDAsCisgICAgMTA2LDEsMCwxMDcsMiwwLDgzLDQxLDEsNzgsNDEsMiwxMTQsMjI1LDAsMCwKKyAgICAwLDExNCw2MywwLDAsMCw0MSwyLDExNCw3MSwwLDAsMCwxMTQsMjI4LDAsCisgICAgMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwKKyAgICAwLDExNCwyMzAsMCwwLDAsMTY1LDYsMCwwLDExNSw0LDAsMCwwLDAsCisgICAgMSwxOCwxLDEyMiwyNiw2OSwxMjAsMTE2LDEwMSwxMTAsMTE1LDEwNSwxMTEsMTEwLDcwLDEwNSwKKyAgICAxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0Niw5NSw5NSwxMDEsMTEzLDk1LDk1LDk5LAorICAgIDEsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDMsMCwwLDAsCisgICAgNjcsMCwwLDAsMTE1LDI2LDAsMCwwLDExNiwwLDAsMTI0LDAsMCwxMDYsCisgICAgMSwwLDEzMSwxLDAsMTE2LDAsMCwxMjQsMCwwLDEwNiwyLDAsMTMxLDEsCisgICAgMCw2NSw4Myw0MSwxLDc4LDQxLDMsMTE0LDUwLDEsMCwwLDExNCw2NywwLAorICAgIDAsMCwxMTQsMzUsMCwwLDAsNDEsMSwxMTQsNzEsMCwwLDAsMTE0LDQsCisgICAgMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDUxLDEsCisgICAgMCwwLDE2OSw2LDAsMCwxMTUsMiwwLDAsMCwwLDEsMTIyLDI4LDY5LAorICAgIDEyMCwxMTYsMTAxLDExMCwxMTUsMTA1LDExMSwxMTAsNzAsMTA1LDEwOCwxMDEsNzYsMTExLDk3LDEwMCwKKyAgICAxMDEsMTE0LDQ2LDk1LDk1LDEwNCw5NywxMTUsMTA0LDk1LDk1LDk5LDIsMCwwLDAsCisgICAgMCwwLDAsMCw0LDAsMCwwLDExLDAsMCwwLDY3LDAsMCwwLAorICAgIDExNSwxODMsMCwwLDAsMTE2LDAsMCwxMjQsMSwwLDEzMSwxLDAsMTQzLDI5LAorICAgIDAsMSwxMTYsMSwwLDExNiwyLDAsMTA2LDMsMCwxMjQsMSwwLDEyNCwwLAorICAgIDAsMTA2LDQsMCwxMzEsMywwLDEyNSwyLDAsODcsMTAwLDEsMCw4MSw4OCwKKyAgICAxMTYsNSwwLDEwMCwyLDAsMTI0LDAsMCwxMDYsNCwwLDEzMSwyLDAsMSwKKyAgICAxMjQsMCwwLDEwNiw2LDAsMTI0LDEsMCwxMzEsMSwwLDEyNSwzLDAsMTI0LAorICAgIDMsMCwxMTQsMTI0LDAsMTE2LDcsMCwxMjQsMiwwLDEwMCwzLDAsMTMxLDIsCisgICAgMCwxMiwxMTQsMTI0LDAsMTE2LDgsMCwxMjQsMCwwLDEwNiw0LDAsMTMxLDEsCisgICAgMCwxMDAsNCwwLDI1LDEwMywxLDAsMTI0LDIsMCw5NSw5LDAsMTEwLDAsCisgICAgMCwxMjQsMCwwLDEyNCwyLDAsOTUsMTAsMCwxMjQsMiwwLDEwNiwxMSwwLAorICAgIDEyNCwyLDAsOTUsMTIsMCwxMjQsMywwLDExNSwxNzksMCwxMjQsMiwwLDEwNiwKKyAgICAxMiwwLDEwNiwxMywwLDEwMCw1LDAsMTMxLDEsMCwxMDAsNCwwLDI1LDEyNCwKKyAgICAyLDAsOTUsMTIsMCwxMTAsMCwwLDEyNCwyLDAsODMsNDEsNiwxMjIsMjUsCisgICAgNzYsMTExLDk3LDEwMCwzMiw5NywxMTAsMzIsMTAxLDEyMCwxMTYsMTAxLDExMCwxMTUsMTA1LDExMSwKKyAgICAxMTAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDYsNzgsMTIyLDMzLDEwMSwxMjAsMTE2LDEwMSwKKyAgICAxMTAsMTE1LDEwNSwxMTEsMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEwOCwxMTEsOTcsCisgICAgMTAwLDEwMSwxMDAsMzIsMTAyLDExNCwxMTEsMTA5LDMyLDEyMywzMywxMTQsMTI1LDExNCwyNDcsMCwKKyAgICAwLDAsMTE0LDg0LDAsMCwwLDExNCwxMTYsMCwwLDAsNDEsMTQsMTE0LDY5LAorICAgIDAsMCwwLDExNCwxMTQsMCwwLDAsMTE0LDEwNiwwLDAsMCw5MCwxMiwxMDgsCisgICAgMTExLDk3LDEwMCw5NSwxMDAsMTIxLDExMCw5NywxMDksMTA1LDk5LDExNCwzNSwwLDAsMCwKKyAgICAxMTQsMTUzLDAsMCwwLDExNCwyMjAsMCwwLDAsMTE0LDYwLDAsMCwwLDExNCwKKyAgICAzOCwwLDAsMCwxMTQsMjQ3LDAsMCwwLDExNCwyMDUsMCwwLDAsMTE0LDU3LAorICAgIDAsMCwwLDExNCwyNTEsMCwwLDAsMTE0LDMyLDAsMCwwLDQxLDQsMTE0LAorICAgIDcxLDAsMCwwLDExNCwxNTksMCwwLDAsMTE0LDE4MCwwLDAsMCwxMTQsMjIwLAorICAgIDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsCisgICAgMCwwLDExNCw1LDEsMCwwLDE3Miw2LDAsMCwxMTUsMjQsMCwwLDAsCisgICAgMCw1LDEzLDEsOSwxLDIxLDEsMTYsMSwxNSwxLDIyLDEsMjgsMSwKKyAgICA5LDEsMTIsMSw2LDEsMjgsMSwxMjIsMzEsNjksMTIwLDExNiwxMDEsMTEwLDExNSwKKyAgICAxMDUsMTExLDExMCw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsMTA4LDExMSwKKyAgICA5NywxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTksMiwwLDAsMCwwLDAsCisgICAgMCwwLDIsMCwwLDAsNCwwLDAsMCwzLDAsMCwwLDExNSw0OCwKKyAgICAwLDAsMCwxMTYsMCwwLDEyNCwwLDAsMTA2LDEsMCwxMzEsMSwwLDEwMCwKKyAgICAxLDAsMjUsMTM3LDAsMCwxMTYsMiwwLDEzNSwwLDAsMTAyLDEsMCwxMDAsCisgICAgMiwwLDEwMCwzLDAsMTM0LDAsMCwxMTYsMywwLDY4LDEzMSwxLDAsMTMxLAorICAgIDEsMCw4Myw0MSw0LDEyMiw0OSw4MiwxMDEsMTE2LDExNywxMTQsMTEwLDMyLDg0LDExNCwKKyAgICAxMTcsMTAxLDMyLDEwNSwxMDIsMzIsMTE2LDEwNCwxMDEsMzIsMTAxLDEyMCwxMTYsMTAxLDExMCwxMTUsCisgICAgMTA1LDExMSwxMTAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTA1LDExNSwzMiw5NywzMiwKKyAgICAxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsNDYsMTE0LDI5LDAsMCwwLDk5LDEsMCwKKyAgICAwLDAsMCwwLDAsMCwyLDAsMCwwLDQsMCwwLDAsNTEsMCwKKyAgICAwLDAsMTE1LDMxLDAsMCwwLDEyNCwwLDAsOTMsMjEsMCwxMjUsMSwwLAorICAgIDEzNiwwLDAsMTAwLDAsMCwxMjQsMSwwLDIzLDEwNywyLDAsODYsMSwxMTMsCisgICAgMywwLDEwMCwxLDAsODMsNDEsMiwxMTQsNzIsMCwwLDAsNzgsMTE0LDQsCisgICAgMCwwLDAsNDEsMiwxMTQsMjIsMCwwLDAsMjE4LDYsMTE1LDExNywxMDIsMTAyLAorICAgIDEwNSwxMjAsNDEsMSwyMTgsOSwxMDIsMTA1LDEwOCwxMDEsOTUsMTEwLDk3LDEwOSwxMDEsMTE0LAorICAgIDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDc3LDAsMCwwLDE5Myw2LAorICAgIDAsMCwxMTUsMiwwLDAsMCw2LDEsMTIyLDQ5LDY5LDEyMCwxMTYsMTAxLDExMCwKKyAgICAxMTUsMTA1LDExMSwxMTAsNzAsMTA1LDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDEwNSwKKyAgICAxMTUsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDQ2LDYwLDEwOCwxMTEsOTksOTcsMTA4LAorICAgIDExNSw2Miw0Niw2MCwxMDMsMTAxLDExMCwxMDEsMTIwLDExMiwxMTQsNjIsNDEsNCwxMTQsMzgsCisgICAgMCwwLDAsMTE0LDM1LDAsMCwwLDExNCw3OCwwLDAsMCwyMTgsMTgsNjksCisgICAgODgsODQsNjksNzgsODMsNzMsNzksNzgsOTUsODMsODUsNzAsNzAsNzMsODgsNjksCisgICAgODMsNDEsMiwxMTQsNzEsMCwwLDAsMTE0LDE1OSwwLDAsMCwxMTQsNCwwLAorICAgIDAsMCw0MSwxLDExNCw1OSwxLDAsMCwxMTQsNSwwLDAsMCwxMTQsMjIwLAorICAgIDAsMCwwLDE5MCw2LDAsMCwxMTUsNiwwLDAsMCwwLDIsMTksMSwKKyAgICAxOCwxLDEyMiwzMCw2OSwxMjAsMTE2LDEwMSwxMTAsMTE1LDEwNSwxMTEsMTEwLDcwLDEwNSwxMDgsCisgICAgMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMDUsMTE1LDk1LDExMiw5Nyw5OSwxMDcsOTcsCisgICAgMTAzLDEwMSw5OSwyLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwxLAorICAgIDAsMCwwLDY3LDAsMCwwLDExNSw0LDAsMCwwLDEwMCwxLDAsODMsCisgICAgNDEsMiwxMjIsNjMsODIsMTAxLDExNiwxMTcsMTE0LDExMCwzMiw3OCwxMTEsMTEwLDEwMSwzMiwKKyAgICA5NywxMTUsMzIsOTcsMTEwLDMyLDEwMSwxMjAsMTE2LDEwMSwxMTAsMTE1LDEwNSwxMTEsMTEwLDMyLAorICAgIDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDk5LDk3LDExMCwxMTAsMTExLDExNiwzMiw5OSwxMTQsCisgICAgMTAxLDk3LDExNiwxMDEsMzIsOTcsMzIsOTksMTExLDEwMCwxMDEsMzIsMTExLDk4LDEwNiwxMDEsCisgICAgOTksMTE2LDQ2LDc4LDExNCw0LDAsMCwwLDQxLDIsMTE0LDcxLDAsMCwwLAorICAgIDExNCwxNTksMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LAorICAgIDUsMCwwLDAsMTE0LDE2LDEsMCwwLDE5Niw2LDAsMCwxMTUsMiwwLAorICAgIDAsMCwwLDIsMTIyLDI4LDY5LDEyMCwxMTYsMTAxLDExMCwxMTUsMTA1LDExMSwxMTAsNzAsCisgICAgMTA1LDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDEwMywxMDEsMTE2LDk1LDk5LDExMSwKKyAgICAxMDAsMTAxLDk5LDIsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDEsCisgICAgMCwwLDAsNjcsMCwwLDAsMTE1LDQsMCwwLDAsMTAwLDEsMCw4MywKKyAgICA0MSwyLDEyMiw1Myw4MiwxMDEsMTE2LDExNywxMTQsMTEwLDMyLDc4LDExMSwxMTAsMTAxLDMyLAogICAgIDk3LDExNSwzMiwxMDEsMTIwLDExNiwxMDEsMTEwLDExNSwxMDUsMTExLDExMCwzMiwxMDksMTExLDEwMCwKICAgICAxMTcsMTA4LDEwMSwxMTUsMzIsMTA0LDk3LDExOCwxMDEsMzIsMTEwLDExMSwzMiwxMTUsMTExLDExNywKLSAgICAxMTQsOTksMTAxLDMyLDk5LDExMSwxMDAsMTAxLDQ2LDc4LDQwLDEsMCwwLDAsMTE3LAotICAgIDQsMCwwLDAsNzgsMTExLDExMCwxMDEsNDAsMiwwLDAsMCwxMTcsNCwwLAotICAgIDAsMCwxMTUsMTAxLDEwOCwxMDIsMTE3LDgsMCwwLDAsMTAyLDExNywxMDgsMTA4LDExMCwKLSAgICA5NywxMDksMTAxLDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwKLSAgICAwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsCi0gICAgMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LAotICAgIDEwLDAsMCwwLDEwMywxMDEsMTE2LDk1LDExNSwxMTEsMTE3LDExNCw5OSwxMDEsMTI4LDQsCi0gICAgMCwwLDExNSwyLDAsMCwwLDAsMiwxMTcsMzAsMCwwLDAsNjksMTIwLAotICAgIDExNiwxMDEsMTEwLDExNSwxMDUsMTExLDExMCw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwKLSAgICAxMTQsNDYsMTAzLDEwMSwxMTYsOTUsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw3OCw0MCwxMiwwLAotICAgIDAsMCwxMTcsOCwwLDAsMCw5NSw5NSwxMTAsOTcsMTA5LDEwMSw5NSw5NSwxMTcsCi0gICAgMTAsMCwwLDAsOTUsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsOTUsMTE3LDEyLAotICAgIDAsMCwwLDk1LDk1LDExMywxMTcsOTcsMTA4LDExMCw5NywxMDksMTAxLDk1LDk1LDExNywKLSAgICA3LDAsMCwwLDk1LDk1LDEwMCwxMTEsOTksOTUsOTUsMTE3LDgsMCwwLDAsCi0gICAgOTUsOTUsMTA1LDExMCwxMDUsMTE2LDk1LDk1LDExNywxMSwwLDAsMCw5NSw5OSwxMDQsCi0gICAgMTAxLDk5LDEwNyw5NSwxMTAsOTcsMTA5LDEwMSwxMTcsMTEsMCwwLDAsMTE1LDEwMSwxMTYsCi0gICAgOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDExNywxMCwwLDAsMCwxMTUsMTAxLDExNiwKLSAgICA5NSwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDExNywxMSwwLDAsMCwxMDgsMTExLDk3LDEwMCwKLSAgICA5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTcsMTAsMCwwLDAsMTA1LDExNSw5NSwxMTIsCi0gICAgOTcsOTksMTA3LDk3LDEwMywxMDEsMTE3LDgsMCwwLDAsMTAzLDEwMSwxMTYsOTUsOTksCi0gICAgMTExLDEwMCwxMDEsMTE3LDEwLDAsMCwwLDEwMywxMDEsMTE2LDk1LDExNSwxMTEsMTE3LDExNCwKLSAgICA5OSwxMDEsNDAsMSwwLDAsMCwxMTcsMTAsMCwwLDAsOTUsOTUsMTA4LDExMSwKLSAgICA5OSw5NywxMDgsMTE1LDk1LDk1LDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwKLSAgICAxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsCi0gICAgMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywKLSAgICAxMTIsNjIsMTE3LDE5LDAsMCwwLDY5LDEyMCwxMTYsMTAxLDExMCwxMTUsMTA1LDExMSwxMTAsCi0gICAgNzAsMTA1LDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDg4LDQsMCwwLDExNSwxNiwKLSAgICAwLDAsMCwxNiw2LDYsMiwxMiw0LDMsMSwzLDEsMjQsMTYsMTIsCi0gICAgNiwxMiw0LDExNywxOSwwLDAsMCw2OSwxMjAsMTE2LDEwMSwxMTAsMTE1LDEwNSwxMTEsCi0gICAgMTEwLDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw5OSwxLDAsMCwwLAotICAgIDAsMCwwLDAsMSwwLDAsMCwyLDAsMCwwLDY2LDAsMCwwLAotICAgIDExNSwxMzQsMCwwLDAsMTI0LDAsMCw2OSwxMDEsMCwwLDkwLDEsMCwxMDAsCi0gICAgMCwwLDkwLDIsMCwxMDAsMSwwLDkwLDMsMCwxMDAsMiwwLDEwMCwzLAotICAgIDAsMTMyLDAsMCw5MCw0LDAsMTAwLDQsMCwxMDAsNSwwLDEzMiwwLDAsCi0gICAgOTAsNSwwLDEwMCw2LDAsMTAwLDcsMCwxMzIsMCwwLDkwLDYsMCwxMDAsCi0gICAgOCwwLDEwMCw5LDAsMTMyLDAsMCw5MCw3LDAsMTAwLDEwLDAsMTAwLDExLAotICAgIDAsMTMyLDAsMCw5MCw4LDAsMTAwLDEyLDAsMTAwLDEzLDAsMTMyLDAsMCwKLSAgICA5MCw5LDAsMTAwLDE0LDAsMTAwLDE1LDAsMTMyLDAsMCw5MCwxMCwwLDEwMCwKLSAgICAxNiwwLDEwMCwxNywwLDEzMiwwLDAsOTAsMTEsMCwxMDAsMTgsMCwxMDAsMTksCi0gICAgMCwxMzIsMCwwLDkwLDEyLDAsMTAwLDIwLDAsODMsNDAsMjEsMCwwLDAsCi0gICAgMTE3LDE0LDAsMCwwLDk1LDc4LDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsODAsCi0gICAgOTcsMTE2LDEwNCwxMTcsMzgsMSwwLDAsODIsMTAxLDExMiwxMTQsMTAxLDExNSwxMDEsMTEwLAotICAgIDExNiwxMTUsMzIsOTcsMzIsMTEwLDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsMzIsMTEyLAotICAgIDk3LDk5LDEwNyw5NywxMDMsMTAxLDM5LDExNSwzMiwxMTIsOTcsMTE2LDEwNCw0NiwzMiwzMiwKLSAgICA3MywxMTYsMzIsMTE3LDExNSwxMDEsMTE1LDMyLDExNiwxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLDExNywKLSAgICAxMDgsMTAxLDMyLDExMCw5NywxMDksMTAxLDEwLDMyLDMyLDMyLDMyLDExNiwxMTEsMzIsMTAyLAotICAgIDEwNSwxMTAsMTAwLDMyLDEwNSwxMTYsMTE1LDMyLDExMiw5NywxMTQsMTAxLDExMCwxMTYsMzIsMTA5LAotICAgIDExMSwxMDAsMTE3LDEwOCwxMDEsNDQsMzIsOTcsMTEwLDEwMCwzMiwxMDIsMTE0LDExMSwxMDksMzIsCi0gICAgMTE2LDEwNCwxMDEsMTE0LDEwMSwzMiwxMDUsMTE2LDMyLDEwOCwxMTEsMTExLDEwNywxMTUsMzIsMTE3LAotICAgIDExMiwzMiwxMTYsMTA0LDEwMSwzMiwxMTIsOTcsMTE0LDEwMSwxMTAsMTE2LDM5LDExNSwxMCwzMiwKLSAgICAzMiwzMiwzMiw5NSw5NSwxMTIsOTcsMTE2LDEwNCw5NSw5NSw0NiwzMiwzMiw4NywxMDQsCi0gICAgMTAxLDExMCwzMiwxMTYsMTA0LDEwNSwxMTUsMzIsOTksMTA0LDk3LDExMCwxMDMsMTAxLDExNSw0NCwKLSAgICAzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzOSwxMTUsMzIsMTExLDExOSwKLSAgICAxMTAsMzIsMTEyLDk3LDExNiwxMDQsMzIsMTA1LDExNSwzMiwxMTQsMTAxLDk5LDExMSwxMDksMTEyLAotICAgIDExNywxMTYsMTAxLDEwMCw0NCwxMCwzMiwzMiwzMiwzMiwxMTcsMTE1LDEwNSwxMTAsMTAzLDMyLAotICAgIDExMiw5NywxMTYsMTA0LDk1LDEwMiwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDMyLDMyLDcwLDExMSwKLSAgICAxMTQsMzIsMTE2LDExMSwxMTIsNDUsMTA4LDEwMSwxMTgsMTAxLDEwOCwzMiwxMDksMTExLDEwMCwxMTcsCi0gICAgMTA4LDEwMSwxMTUsNDQsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLDk3LDExNCwxMDEsMTEwLDExNiwzMiwKLSAgICAxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzOSwxMTUsMzIsMTEyLDk3LDExNiwxMDQsMTAsMzIsMzIsCi0gICAgMzIsMzIsMTA1LDExNSwzMiwxMTUsMTIxLDExNSw0NiwxMTIsOTcsMTE2LDEwNCw0Niw5OSw0LAotICAgIDAsMCwwLDAsMCwwLDAsNCwwLDAsMCwyLDAsMCwwLDY3LAotICAgIDAsMCwwLDExNSw1MiwwLDAsMCwxMjQsMSwwLDEyNCwwLDAsOTUsMCwKLSAgICAwLDEyNCwyLDAsMTI0LDAsMCw5NSwxLDAsMTE2LDIsMCwxMjQsMCwwLAotICAgIDEwNiwzLDAsMTMxLDAsMCwxMzEsMSwwLDEyNCwwLDAsOTUsNCwwLDEyNCwKLSAgICAzLDAsMTI0LDAsMCw5NSw1LDAsMTAwLDAsMCw4Myw0MCwxLDAsMCwKLSAgICAwLDc4LDQwLDYsMCwwLDAsMTE3LDUsMCwwLDAsOTUsMTEwLDk3LDEwOSwKLSAgICAxMDEsMTE3LDUsMCwwLDAsOTUsMTEyLDk3LDExNiwxMDQsMTE3LDUsMCwwLDAsCi0gICAgMTE2LDExNywxMTIsMTA4LDEwMSwxMTcsMTYsMCwwLDAsOTUsMTAzLDEwMSwxMTYsOTUsMTEyLAotICAgIDk3LDExNCwxMDEsMTEwLDExNiw5NSwxMTIsOTcsMTE2LDEwNCwxMTcsMTcsMCwwLDAsOTUsCi0gICAgMTA4LDk3LDExNSwxMTYsOTUsMTEyLDk3LDExNCwxMDEsMTEwLDExNiw5NSwxMTIsOTcsMTE2LDEwNCwKLSAgICAxMTcsMTIsMCwwLDAsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTAyLDEwNSwxMTAsMTAwLDEwMSwKLSAgICAxMTQsNDAsNCwwLDAsMCwxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwxMDIsMTE3LAotICAgIDQsMCwwLDAsMTEwLDk3LDEwOSwxMDEsMTE3LDQsMCwwLDAsMTEyLDk3LDExNiwKLSAgICAxMDQsMTE3LDExLDAsMCwwLDExMiw5NywxMTYsMTA0LDk1LDEwMiwxMDUsMTEwLDEwMCwxMDEsCi0gICAgMTE0LDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsCi0gICAgNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSwKLSAgICA5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDgsMCwKLSAgICAwLDAsOTUsOTUsMTA1LDExMCwxMDUsMTE2LDk1LDk1LDE0MCw0LDAsMCwxMTUsOCwKLSAgICAwLDAsMCwwLDEsOSwxLDksMSwyMSwxLDExNywyMywwLDAsMCwKLSAgICA5NSw3OCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDgwLDk3LDExNiwxMDQsNDYsOTUsCi0gICAgOTUsMTA1LDExMCwxMDUsMTE2LDk1LDk1LDk5LDEsMCwwLDAsMCwwLDAsMCwKLSAgICA0LDAsMCwwLDMsMCwwLDAsNjcsMCwwLDAsMTE1LDUzLDAsMCwKLSAgICAwLDEyNCwwLDAsMTA2LDAsMCwxMDYsMSwwLDEwMCwxLDAsMTMxLDEsMCwKLSAgICA5MiwzLDAsMTI1LDEsMCwxMjUsMiwwLDEyNSwzLDAsMTI0LDIsMCwxMDAsCi0gICAgMiwwLDEwNywyLDAsMTE0LDQzLDAsMTAwLDYsMCw4MywxMjQsMSwwLDEwMCwKLSAgICA1LDAsMTAyLDIsMCw4Myw0MCw3LDAsMCwwLDExNyw2MiwwLDAsMCwKLSAgICA4MiwxMDEsMTE2LDExNywxMTQsMTEwLDExNSwzMiw5NywzMiwxMTYsMTE3LDExMiwxMDgsMTAxLDMyLAotICAgIDExMSwxMDIsMzIsNDAsMTEyLDk3LDExNCwxMDEsMTEwLDExNiw0NSwxMDksMTExLDEwMCwxMTcsMTA4LAotICAgIDEwMSw0NSwxMTAsOTcsMTA5LDEwMSw0NCwzMiwxMTIsOTcsMTE0LDEwMSwxMTAsMTE2LDQ1LDExMiwKLSAgICA5NywxMTYsMTA0LDQ1LDk3LDExNiwxMTYsMTE0LDQ1LDExMCw5NywxMDksMTAxLDQxLDExNywxLAotICAgIDAsMCwwLDQ2LDExNywwLDAsMCwwLDExNywzLDAsMCwwLDExNSwxMjEsCi0gICAgMTE1LDExNyw0LDAsMCwwLDExMiw5NywxMTYsMTA0LDExNyw4LDAsMCwwLDk1LAotICAgIDk1LDExMiw5NywxMTYsMTA0LDk1LDk1LDQwLDIsMCwwLDAsMTE3LDMsMCwwLAotICAgIDAsMTE1LDEyMSwxMTUsMTE3LDQsMCwwLDAsMTEyLDk3LDExNiwxMDQsNDAsMiwwLAotICAgIDAsMCwxMTcsNSwwLDAsMCw5NSwxMTAsOTcsMTA5LDEwMSwxMTcsMTAsMCwwLAotICAgIDAsMTE0LDExMiw5NywxMTQsMTE2LDEwNSwxMTYsMTA1LDExMSwxMTAsNDAsNCwwLDAsMCwKLSAgICAxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwxMDIsMTE3LDYsMCwwLDAsMTEyLDk3LAotICAgIDExNCwxMDEsMTEwLDExNiwxMTcsMywwLDAsMCwxMDAsMTExLDExNiwxMTcsMiwwLDAsCi0gICAgMCwxMDksMTAxLDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwKLSAgICAwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsCi0gICAgMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LAotICAgIDIzLDAsMCwwLDk1LDEwMiwxMDUsMTEwLDEwMCw5NSwxMTIsOTcsMTE0LDEwMSwxMTAsMTE2LAotICAgIDk1LDExMiw5NywxMTYsMTA0LDk1LDExMCw5NywxMDksMTAxLDExNSwxNDYsNCwwLDAsMTE1LAotICAgIDgsMCwwLDAsMCwyLDI3LDEsMTIsMiw0LDMsMTE3LDM4LDAsMCwKLSAgICAwLDk1LDc4LDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsODAsOTcsMTE2LDEwNCw0NiwKLSAgICA5NSwxMDIsMTA1LDExMCwxMDAsOTUsMTEyLDk3LDExNCwxMDEsMTEwLDExNiw5NSwxMTIsOTcsMTE2LAotICAgIDEwNCw5NSwxMTAsOTcsMTA5LDEwMSwxMTUsOTksMSwwLDAsMCwwLDAsMCwwLAotICAgIDMsMCwwLDAsMywwLDAsMCw2NywwLDAsMCwxMTUsMzgsMCwwLAotICAgIDAsMTI0LDAsMCwxMDYsMCwwLDEzMSwwLDAsOTIsMiwwLDEyNSwxLDAsCi0gICAgMTI1LDIsMCwxMTYsMSwwLDExNiwyLDAsMTA2LDMsMCwxMjQsMSwwLDI1LAotICAgIDEyNCwyLDAsMTMxLDIsMCw4Myw0MCwxLDAsMCwwLDc4LDQwLDQsMCwKLSAgICAwLDAsMTE3LDIzLDAsMCwwLDk1LDEwMiwxMDUsMTEwLDEwMCw5NSwxMTIsOTcsMTE0LAotICAgIDEwMSwxMTAsMTE2LDk1LDExMiw5NywxMTYsMTA0LDk1LDExMCw5NywxMDksMTAxLDExNSwxMTcsNywKLSAgICAwLDAsMCwxMDMsMTAxLDExNiw5NywxMTYsMTE2LDExNCwxMTcsMywwLDAsMCwxMTUsCi0gICAgMTIxLDExNSwxMTcsNywwLDAsMCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsNDAsMywKLSAgICAwLDAsMCwxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwxMDIsMTE3LDE4LDAsMCwKLSAgICAwLDExMiw5NywxMTQsMTAxLDExMCwxMTYsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTEwLAotICAgIDk3LDEwOSwxMDEsMTE3LDE0LDAsMCwwLDExMiw5NywxMTYsMTA0LDk1LDk3LDExNiwxMTYsCi0gICAgMTE0LDk1LDExMCw5NywxMDksMTAxLDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwKLSAgICAxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsCi0gICAgMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywKLSAgICAxMTIsNjIsMTE3LDE2LDAsMCwwLDk1LDEwMywxMDEsMTE2LDk1LDExMiw5NywxMTQsMTAxLAotICAgIDExMCwxMTYsOTUsMTEyLDk3LDExNiwxMDQsMTU2LDQsMCwwLDExNSw0LDAsMCwwLAotICAgIDAsMSwxOCwxLDExNywzMSwwLDAsMCw5NSw3OCw5NywxMDksMTAxLDExNSwxMTIsCi0gICAgOTcsOTksMTAxLDgwLDk3LDExNiwxMDQsNDYsOTUsMTAzLDEwMSwxMTYsOTUsMTEyLDk3LDExNCwKLSAgICAxMDEsMTEwLDExNiw5NSwxMTIsOTcsMTE2LDEwNCw5OSwxLDAsMCwwLDAsMCwwLAotICAgIDAsNCwwLDAsMCwzLDAsMCwwLDY3LDAsMCwwLDExNSwxMDMsMCwKLSAgICAwLDAsMTE2LDAsMCwxMjQsMCwwLDEwNiwxLDAsMTMxLDAsMCwxMzEsMSwKLSAgICAwLDEyNSwxLDAsMTI0LDEsMCwxMjQsMCwwLDEwNiwyLDAsMTA3LDMsMCwKLSAgICAxMTQsOTYsMCwxMjQsMCwwLDEwNiwzLDAsMTI0LDAsMCwxMDYsNCwwLDEyNCwKLSAgICAxLDAsMTMxLDIsMCw5MiwyLDAsMTI1LDIsMCwxMjUsMywwLDEyNCwyLAotICAgIDAsMTAwLDAsMCwxMDcsOCwwLDExNCw4NCwwLDEyNCwzLDAsMTI0LDAsMCwKLSAgICA5NSw2LDAsMTEwLDAsMCwxMjQsMSwwLDEyNCwwLDAsOTUsMiwwLDExMCwKLSAgICAwLDAsMTI0LDAsMCwxMDYsNiwwLDgzLDQwLDEsMCwwLDAsNzgsNDAsCi0gICAgNywwLDAsMCwxMTcsNSwwLDAsMCwxMTYsMTE3LDExMiwxMDgsMTAxLDExNywxNiwKLSAgICAwLDAsMCw5NSwxMDMsMTAxLDExNiw5NSwxMTIsOTcsMTE0LDEwMSwxMTAsMTE2LDk1LDExMiwKLSAgICA5NywxMTYsMTA0LDExNywxNywwLDAsMCw5NSwxMDgsOTcsMTE1LDExNiw5NSwxMTIsOTcsCi0gICAgMTE0LDEwMSwxMTAsMTE2LDk1LDExMiw5NywxMTYsMTA0LDExNywxMiwwLDAsMCw5NSwxMTIsCi0gICAgOTcsMTE2LDEwNCw5NSwxMDIsMTA1LDExMCwxMDAsMTAxLDExNCwxMTcsNSwwLDAsMCw5NSwKLSAgICAxMTAsOTcsMTA5LDEwMSwxMTcsNCwwLDAsMCw3OCwxMTEsMTEwLDEwMSwxMTcsNSwwLAotICAgIDAsMCw5NSwxMTIsOTcsMTE2LDEwNCw0MCw0LDAsMCwwLDExNyw0LDAsMCwKLSAgICAwLDExNSwxMDEsMTA4LDEwMiwxMTcsMTEsMCwwLDAsMTEyLDk3LDExNCwxMDEsMTEwLDExNiwKLSAgICA5NSwxMTIsOTcsMTE2LDEwNCwxMTcsNiwwLDAsMCwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LAotICAgIDExNyw4LDAsMCwwLDExMCwxMDEsMTE5LDk1LDExMiw5NywxMTYsMTA0LDQwLDAsMCwKLSAgICAwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsCi0gICAgMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwKLSAgICAxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDEyLDAsMCwwLDk1LDExNCwKLSAgICAxMDEsOTksOTcsMTA4LDk5LDExNywxMDgsOTcsMTE2LDEwMSwxNjAsNCwwLDAsMTE1LDE0LAotICAgIDAsMCwwLDAsMiwxOCwxLDE1LDEsMjcsMywxMiwxLDEyLDEsMTIsCi0gICAgMSwxMTcsMjcsMCwwLDAsOTUsNzgsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSwKLSAgICA4MCw5NywxMTYsMTA0LDQ2LDk1LDExNCwxMDEsOTksOTcsMTA4LDk5LDExNywxMDgsOTcsMTE2LAotICAgIDEwMSw5OSwxLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwyLDAsCi0gICAgMCwwLDY3LDAsMCwwLDExNSwxNiwwLDAsMCwxMTYsMCwwLDEyNCwwLAotICAgIDAsMTA2LDEsMCwxMzEsMCwwLDEzMSwxLDAsODMsNDAsMSwwLDAsMCwKLSAgICA3OCw0MCwyLDAsMCwwLDExNyw0LDAsMCwwLDEwNSwxMTYsMTAxLDExNCwxMTcsCi0gICAgMTIsMCwwLDAsOTUsMTE0LDEwMSw5OSw5NywxMDgsOTksMTE3LDEwOCw5NywxMTYsMTAxLAotICAgIDQwLDEsMCwwLDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDQwLDAsCi0gICAgMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwKLSAgICAxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSwKLSAgICA5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDgsMCwwLDAsOTUsCi0gICAgOTUsMTA1LDExNiwxMDEsMTE0LDk1LDk1LDE3Miw0LDAsMCwxMTUsMiwwLDAsMCwKLSAgICAwLDEsMTE3LDIzLDAsMCwwLDk1LDc4LDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwKLSAgICAxMDEsODAsOTcsMTE2LDEwNCw0Niw5NSw5NSwxMDUsMTE2LDEwMSwxMTQsOTUsOTUsOTksMSwKLSAgICAwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMiwwLDAsMCw2NywKLSAgICAwLDAsMCwxMTUsMTYsMCwwLDAsMTE2LDAsMCwxMjQsMCwwLDEwNiwxLAotICAgIDAsMTMxLDAsMCwxMzEsMSwwLDgzLDQwLDEsMCwwLDAsNzgsNDAsMiwKLSAgICAwLDAsMCwxMTcsMywwLDAsMCwxMDgsMTAxLDExMCwxMTcsMTIsMCwwLDAsCi0gICAgOTUsMTE0LDEwMSw5OSw5NywxMDgsOTksMTE3LDEwOCw5NywxMTYsMTAxLDQwLDEsMCwwLAotICAgIDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDQwLDAsMCwwLDAsNDAsCi0gICAgMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsCi0gICAgMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwKLSAgICAxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDcsMCwwLDAsOTUsOTUsMTA4LDEwMSwxMTAsCi0gICAgOTUsOTUsMTc1LDQsMCwwLDExNSwyLDAsMCwwLDAsMSwxMTcsMjIsMCwKLSAgICAwLDAsOTUsNzgsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw4MCw5NywxMTYsMTA0LAotICAgIDQ2LDk1LDk1LDEwOCwxMDEsMTEwLDk1LDk1LDk5LDEsMCwwLDAsMCwwLDAsCi0gICAgMCwxLDAsMCwwLDIsMCwwLDAsNjcsMCwwLDAsMTE1LDE2LDAsCi0gICAgMCwwLDEwMCwxLDAsMTA2LDAsMCwxMjQsMCwwLDEwNiwxLDAsMTMxLDEsCi0gICAgMCw4Myw0MCwyLDAsMCwwLDc4LDExNywyMCwwLDAsMCw5NSw3OCw5NywKLSAgICAxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDgwLDk3LDExNiwxMDQsNDAsMTIzLDMzLDExNCwxMjUsCi0gICAgNDEsNDAsMiwwLDAsMCwxMTcsNiwwLDAsMCwxMDIsMTExLDExNCwxMDksOTcsCi0gICAgMTE2LDExNyw1LDAsMCwwLDk1LDExMiw5NywxMTYsMTA0LDQwLDEsMCwwLDAsCi0gICAgMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDQwLDAsMCwwLDAsNDAsMCwKLSAgICAwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsCi0gICAgMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsCi0gICAgMTE2LDExNCw5NywxMTIsNjIsMTE3LDgsMCwwLDAsOTUsOTUsMTE0LDEwMSwxMTIsMTE0LAotICAgIDk1LDk1LDE3OCw0LDAsMCwxMTUsMiwwLDAsMCwwLDEsMTE3LDIzLDAsCi0gICAgMCwwLDk1LDc4LDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsODAsOTcsMTE2LDEwNCwKLSAgICA0Niw5NSw5NSwxMTQsMTAxLDExMiwxMTQsOTUsOTUsOTksMiwwLDAsMCwwLDAsCi0gICAgMCwwLDIsMCwwLDAsMiwwLDAsMCw2NywwLDAsMCwxMTUsMTYsCi0gICAgMCwwLDAsMTI0LDEsMCwxMjQsMCwwLDEwNiwwLDAsMTMxLDAsMCwxMDcsCi0gICAgNiwwLDgzLDQwLDEsMCwwLDAsNzgsNDAsMSwwLDAsMCwxMTcsMTIsCi0gICAgMCwwLDAsOTUsMTE0LDEwMSw5OSw5NywxMDgsOTksMTE3LDEwOCw5NywxMTYsMTAxLDQwLAotICAgIDIsMCwwLDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDExNyw0LDAsCi0gICAgMCwwLDEwNSwxMTYsMTAxLDEwOSw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsCi0gICAgMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLAotICAgIDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsCi0gICAgMTEyLDYyLDExNywxMiwwLDAsMCw5NSw5NSw5OSwxMTEsMTEwLDExNiw5NywxMDUsMTEwLAotICAgIDExNSw5NSw5NSwxODEsNCwwLDAsMTE1LDIsMCwwLDAsMCwxLDExNywyNywKLSAgICAwLDAsMCw5NSw3OCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDgwLDk3LDExNiwKLSAgICAxMDQsNDYsOTUsOTUsOTksMTExLDExMCwxMTYsOTcsMTA1LDExMCwxMTUsOTUsOTUsOTksMiwKKyAgICAxMTQsOTksMTAxLDMyLDk5LDExMSwxMDAsMTAxLDQ2LDc4LDExNCw0LDAsMCwwLDQxLAorICAgIDIsMTE0LDcxLDAsMCwwLDExNCwxNTksMCwwLDAsMTE0LDQsMCwwLDAsCisgICAgMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDE3LDEsMCwwLDIwMCwKKyAgICA2LDAsMCwxMTUsMiwwLDAsMCwwLDIsMTIyLDMwLDY5LDEyMCwxMTYsMTAxLAorICAgIDExMCwxMTUsMTA1LDExMSwxMTAsNzAsMTA1LDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LAorICAgIDEwMywxMDEsMTE2LDk1LDExNSwxMTEsMTE3LDExNCw5OSwxMDEsOTksMiwwLDAsMCwwLAorICAgIDAsMCwwLDIsMCwwLDAsMSwwLDAsMCw2NywwLDAsMCwxMTUsCisgICAgNywwLDAsMCwxMjQsMCwwLDEwNiwwLDAsODMsNDEsMSwxMjIsNTgsODIsCisgICAgMTAxLDExNiwxMTcsMTE0LDExMCwzMiwxMTYsMTA0LDEwMSwzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMTYsCisgICAgMTExLDMyLDExNiwxMDQsMTAxLDMyLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsMzIsMTAyLDEwNSwxMDgsCisgICAgMTAxLDMyLDk3LDExNSwzMiwxMDIsMTExLDExNywxMTAsMTAwLDMyLDk4LDEyMSwzMiwxMTYsMTA0LAorICAgIDEwMSwzMiwxMDIsMTA1LDExMCwxMDAsMTAxLDExNCw0Niw0MSwxLDExNCwzNSwwLDAsMCwKKyAgICA0MSwyLDExNCw3MSwwLDAsMCwxMTQsMTU5LDAsMCwwLDExNCw0LDAsMCwKKyAgICAwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwyMzksMCwwLDAsCisgICAgMjA0LDYsMCwwLDExNSwyLDAsMCwwLDAsMywxMjIsMzIsNjksMTIwLDExNiwKKyAgICAxMDEsMTEwLDExNSwxMDUsMTExLDExMCw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsCisgICAgNDYsMTAzLDEwMSwxMTYsOTUsMTAyLDEwNSwxMDgsMTAxLDExMCw5NywxMDksMTAxLDc4LDQxLDEzLAorICAgIDExNCw1NywwLDAsMCwxMTQsNTYsMCwwLDAsMTE0LDU4LDAsMCwwLDExNCwKKyAgICA1OSwwLDAsMCwxMTQsNzIsMCwwLDAsMTE0LDIzMCwwLDAsMCwxMTQsNTEsCisgICAgMSwwLDAsMTE0LDE1NywwLDAsMCwxMTQsNSwxLDAsMCwxMTQsMjIwLDAsCisgICAgMCwwLDExNCwxNiwxLDAsMCwxMTQsMTcsMSwwLDAsMTE0LDIzOSwwLDAsCisgICAgMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwKKyAgICAxMTQsNSwwLDAsMCwxMTQsNTcsMSwwLDAsMTUzLDYsMCwwLDExNSwxOCwKKyAgICAwLDAsMCwxMiw2LDYsMiwxMiw0LDEyLDQsMTIsMywxOCwxOCwxMiwKKyAgICA2LDEyLDQsMTIsNCwxMTQsNTcsMSwwLDAsOTksMCwwLDAsMCwwLAorICAgIDAsMCwwLDAsMCwwLDAsMiwwLDAsMCw2NCwwLDAsMCwxMTUsCisgICAgMTMwLDAsMCwwLDEwMSwwLDAsOTAsMSwwLDEwMCwwLDAsOTAsMiwwLAorICAgIDEwMCwxLDAsOTAsMywwLDEwMCwyLDAsMTAwLDMsMCwxMzIsMCwwLDkwLAorICAgIDQsMCwxMDAsNCwwLDEwMCw1LDAsMTMyLDAsMCw5MCw1LDAsMTAwLDYsCisgICAgMCwxMDAsNywwLDEzMiwwLDAsOTAsNiwwLDEwMCw4LDAsMTAwLDksMCwKKyAgICAxMzIsMCwwLDkwLDcsMCwxMDAsMTAsMCwxMDAsMTEsMCwxMzIsMCwwLDkwLAorICAgIDgsMCwxMDAsMTIsMCwxMDAsMTMsMCwxMzIsMCwwLDkwLDksMCwxMDAsMTQsCisgICAgMCwxMDAsMTUsMCwxMzIsMCwwLDkwLDEwLDAsMTAwLDE2LDAsMTAwLDE3LDAsCisgICAgMTMyLDAsMCw5MCwxMSwwLDEwMCwxOCwwLDEwMCwxOSwwLDEzMiwwLDAsOTAsCisgICAgMTIsMCwxMDAsMjAsMCw4Myw0MSwyMSwyMTgsMTQsOTUsNzgsOTcsMTA5LDEwMSwxMTUsCisgICAgMTEyLDk3LDk5LDEwMSw4MCw5NywxMTYsMTA0LDk3LDM4LDEsMCwwLDgyLDEwMSwxMTIsCisgICAgMTE0LDEwMSwxMTUsMTAxLDExMCwxMTYsMTE1LDMyLDk3LDMyLDExMCw5NywxMDksMTAxLDExNSwxMTIsCisgICAgOTcsOTksMTAxLDMyLDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwzOSwxMTUsMzIsMTEyLDk3LAorICAgIDExNiwxMDQsNDYsMzIsMzIsNzMsMTE2LDMyLDExNywxMTUsMTAxLDExNSwzMiwxMTYsMTA0LDEwMSwKKyAgICAzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMTAsOTcsMTA5LDEwMSwxMCwzMiwzMiwzMiwKKyAgICAzMiwxMTYsMTExLDMyLDEwMiwxMDUsMTEwLDEwMCwzMiwxMDUsMTE2LDExNSwzMiwxMTIsOTcsMTE0LAorICAgIDEwMSwxMTAsMTE2LDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ0LDMyLDk3LDExMCwxMDAsMzIsCisgICAgMTAyLDExNCwxMTEsMTA5LDMyLDExNiwxMDQsMTAxLDExNCwxMDEsMzIsMTA1LDExNiwzMiwxMDgsMTExLAorICAgIDExMSwxMDcsMTE1LDMyLDExNywxMTIsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLDk3LDExNCwxMDEsMTEwLAorICAgIDExNiwzOSwxMTUsMTAsMzIsMzIsMzIsMzIsOTUsOTUsMTEyLDk3LDExNiwxMDQsOTUsOTUsCisgICAgNDYsMzIsMzIsODcsMTA0LDEwMSwxMTAsMzIsMTE2LDEwNCwxMDUsMTE1LDMyLDk5LDEwNCw5NywKKyAgICAxMTAsMTAzLDEwMSwxMTUsNDQsMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsCisgICAgMzksMTE1LDMyLDExMSwxMTksMTEwLDMyLDExMiw5NywxMTYsMTA0LDMyLDEwNSwxMTUsMzIsMTE0LAorICAgIDEwMSw5OSwxMTEsMTA5LDExMiwxMTcsMTE2LDEwMSwxMDAsNDQsMTAsMzIsMzIsMzIsMzIsMTE3LAorICAgIDExNSwxMDUsMTEwLDEwMywzMiwxMTIsOTcsMTE2LDEwNCw5NSwxMDIsMTA1LDExMCwxMDAsMTAxLDExNCwKKyAgICA0NiwzMiwzMiw3MCwxMTEsMTE0LDMyLDExNiwxMTEsMTEyLDQ1LDEwOCwxMDEsMTE4LDEwMSwxMDgsCisgICAgMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDQ0LDMyLDExNiwxMDQsMTAxLDMyLDExMiw5NywKKyAgICAxMTQsMTAxLDExMCwxMTYsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzksMTE1LDMyLDExMiw5NywKKyAgICAxMTYsMTA0LDEwLDMyLDMyLDMyLDMyLDEwNSwxMTUsMzIsMTE1LDEyMSwxMTUsNDYsMTEyLDk3LAorICAgIDExNiwxMDQsNDYsOTksNCwwLDAsMCwwLDAsMCwwLDQsMCwwLDAsCisgICAgMiwwLDAsMCw2NywwLDAsMCwxMTUsNTIsMCwwLDAsMTI0LDEsMCwKKyAgICAxMjQsMCwwLDk1LDAsMCwxMjQsMiwwLDEyNCwwLDAsOTUsMSwwLDExNiwKKyAgICAyLDAsMTI0LDAsMCwxMDYsMywwLDEzMSwwLDAsMTMxLDEsMCwxMjQsMCwKKyAgICAwLDk1LDQsMCwxMjQsMywwLDEyNCwwLDAsOTUsNSwwLDEwMCwwLDAsCisgICAgODMsNDEsMSw3OCw0MSw2LDExNCw3MCwwLDAsMCwxMTQsMjU0LDAsMCwwLAorICAgIDExNCwyMzIsMCwwLDAsMjE4LDE2LDk1LDEwMywxMDEsMTE2LDk1LDExMiw5NywxMTQsMTAxLAorICAgIDExMCwxMTYsOTUsMTEyLDk3LDExNiwxMDQsMjE4LDE3LDk1LDEwOCw5NywxMTUsMTE2LDk1LDExMiwKKyAgICA5NywxMTQsMTAxLDExMCwxMTYsOTUsMTEyLDk3LDExNiwxMDQsMjE4LDEyLDk1LDExMiw5NywxMTYsCisgICAgMTA0LDk1LDEwMiwxMDUsMTEwLDEwMCwxMDEsMTE0LDQxLDQsMTE0LDcxLDAsMCwwLDExNCwKKyAgICA2NywwLDAsMCwxMTQsMzUsMCwwLDAsMjE4LDExLDExMiw5NywxMTYsMTA0LDk1LAorICAgIDEwMiwxMDUsMTEwLDEwMCwxMDEsMTE0LDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLAorICAgIDExNCw1LDAsMCwwLDExNCw3MiwwLDAsMCwyMTcsNiwwLDAsMTE1LDgsCisgICAgMCwwLDAsMCwxLDksMSw5LDEsMjEsMSwxMjIsMjMsOTUsNzgsOTcsCisgICAgMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw4MCw5NywxMTYsMTA0LDQ2LDk1LDk1LDEwNSwxMTAsCisgICAgMTA1LDExNiw5NSw5NSw5OSwxLDAsMCwwLDAsMCwwLDAsNCwwLDAsCisgICAgMCwzLDAsMCwwLDY3LDAsMCwwLDExNSw1MywwLDAsMCwxMjQsMCwKKyAgICAwLDEwNiwwLDAsMTA2LDEsMCwxMDAsMSwwLDEzMSwxLDAsOTIsMywwLAorICAgIDEyNSwxLDAsMTI1LDIsMCwxMjUsMywwLDEyNCwyLDAsMTAwLDIsMCwxMDcsCisgICAgMiwwLDExNCw0MywwLDEwMCw2LDAsODMsMTI0LDEsMCwxMDAsNSwwLDEwMiwKKyAgICAyLDAsODMsNDEsNywxMjIsNjIsODIsMTAxLDExNiwxMTcsMTE0LDExMCwxMTUsMzIsOTcsCisgICAgMzIsMTE2LDExNywxMTIsMTA4LDEwMSwzMiwxMTEsMTAyLDMyLDQwLDExMiw5NywxMTQsMTAxLDExMCwKKyAgICAxMTYsNDUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDUsMTEwLDk3LDEwOSwxMDEsNDQsMzIsMTEyLAorICAgIDk3LDExNCwxMDEsMTEwLDExNiw0NSwxMTIsOTcsMTE2LDEwNCw0NSw5NywxMTYsMTE2LDExNCw0NSwKKyAgICAxMTAsOTcsMTA5LDEwMSw0MSwxMTQsMTE2LDAsMCwwLDExNCwzMCwwLDAsMCwxMTQsCisgICAgNywwLDAsMCwxMTQsMzUsMCwwLDAsMTE0LDI0NywwLDAsMCw0MSwyLAorICAgIDEyMiwzLDExNSwxMjEsMTE1LDEyMiw0LDExMiw5NywxMTYsMTA0LDQxLDIsMTE0LDcwLDAsCisgICAgMCwwLDExNCwzMiwwLDAsMCw0MSw0LDExNCw3MSwwLDAsMCwxMTQsMjM0LAorICAgIDAsMCwwLDIxOCwzLDEwMCwxMTEsMTE2LDExNCw5NCwwLDAsMCwxMTQsNCwwLAorICAgIDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMjMsOTUsMTAyLAorICAgIDEwNSwxMTAsMTAwLDk1LDExMiw5NywxMTQsMTAxLDExMCwxMTYsOTUsMTEyLDk3LDExNiwxMDQsOTUsCisgICAgMTEwLDk3LDEwOSwxMDEsMTE1LDIyMyw2LDAsMCwxMTUsOCwwLDAsMCwwLDIsCisgICAgMjcsMSwxMiwyLDQsMywxMjIsMzgsOTUsNzgsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LAorICAgIDk5LDEwMSw4MCw5NywxMTYsMTA0LDQ2LDk1LDEwMiwxMDUsMTEwLDEwMCw5NSwxMTIsOTcsMTE0LAorICAgIDEwMSwxMTAsMTE2LDk1LDExMiw5NywxMTYsMTA0LDk1LDExMCw5NywxMDksMTAxLDExNSw5OSwxLAorICAgIDAsMCwwLDAsMCwwLDAsMywwLDAsMCwzLDAsMCwwLDY3LAorICAgIDAsMCwwLDExNSwzOCwwLDAsMCwxMjQsMCwwLDEwNiwwLDAsMTMxLDAsCisgICAgMCw5MiwyLDAsMTI1LDEsMCwxMjUsMiwwLDExNiwxLDAsMTE2LDIsMCwKKyAgICAxMDYsMywwLDEyNCwxLDAsMjUsMTI0LDIsMCwxMzEsMiwwLDgzLDQxLDEsCisgICAgNzgsNDEsNCwxMTQsNjcsMSwwLDAsMTE0LDYyLDAsMCwwLDExNCw3LDAsCisgICAgMCwwLDExNCw3MywwLDAsMCw0MSwzLDExNCw3MSwwLDAsMCw5MCwxOCwKKyAgICAxMTIsOTcsMTE0LDEwMSwxMTAsMTE2LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDExMCw5NywKKyAgICAxMDksMTAxLDkwLDE0LDExMiw5NywxMTYsMTA0LDk1LDk3LDExNiwxMTYsMTE0LDk1LDExMCw5NywKKyAgICAxMDksMTAxLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwKKyAgICAwLDExNCw2MiwxLDAsMCwyMzMsNiwwLDAsMTE1LDQsMCwwLDAsMCwKKyAgICAxLDE4LDEsMTIyLDMxLDk1LDc4LDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsODAsCisgICAgOTcsMTE2LDEwNCw0Niw5NSwxMDMsMTAxLDExNiw5NSwxMTIsOTcsMTE0LDEwMSwxMTAsMTE2LDk1LAorICAgIDExMiw5NywxMTYsMTA0LDk5LDEsMCwwLDAsMCwwLDAsMCwzLDAsMCwKKyAgICAwLDMsMCwwLDAsNjcsMCwwLDAsMTE1LDEyNywwLDAsMCwxMTYsMCwKKyAgICAwLDEyNCwwLDAsMTA2LDEsMCwxMzEsMCwwLDEzMSwxLDAsMTI1LDEsMCwKKyAgICAxMjQsMSwwLDEyNCwwLDAsMTA2LDIsMCwxMDcsMywwLDExNCwxMjAsMCwxMjQsCisgICAgMCwwLDEwNiwzLDAsMTI0LDAsMCwxMDYsNCwwLDEyNCwxLDAsMTMxLDIsCisgICAgMCwxMjUsMiwwLDEyNCwyLDAsMTAwLDAsMCwxMDcsOSwwLDExNCwxMDgsMCwKKyAgICAxMjQsMiwwLDEwNiw1LDAsMTAwLDAsMCwxMDcsOCwwLDExNCwxMDgsMCwxMjQsCisgICAgMiwwLDEwNiw2LDAsMTE0LDEwOCwwLDEyNCwyLDAsMTA2LDYsMCwxMjQsMCwKKyAgICAwLDk1LDcsMCwxMTMsMTA4LDAsMTEwLDAsMCwxMjQsMSwwLDEyNCwwLDAsCisgICAgOTUsMiwwLDExMCwwLDAsMTI0LDAsMCwxMDYsNywwLDgzLDQxLDEsNzgsCisgICAgNDEsOCwxMTQsMjMyLDAsMCwwLDExNCw2MiwxLDAsMCwxMTQsNjMsMSwwLAorICAgIDAsMTE0LDY0LDEsMCwwLDExNCw3MCwwLDAsMCwxMTQsMTcwLDAsMCwwLAorICAgIDExNCwyMjEsMCwwLDAsMTE0LDI1NCwwLDAsMCw0MSwzLDExNCw3MSwwLDAsCisgICAgMCw5MCwxMSwxMTIsOTcsMTE0LDEwMSwxMTAsMTE2LDk1LDExMiw5NywxMTYsMTA0LDExNCwxNzgsCisgICAgMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwKKyAgICAwLDAsMjE4LDEyLDk1LDExNCwxMDEsOTksOTcsMTA4LDk5LDExNywxMDgsOTcsMTE2LDEwMSwKKyAgICAyMzcsNiwwLDAsMTE1LDE2LDAsMCwwLDAsMiwxOCwxLDE1LDEsMjEsCisgICAgMywyNywxLDksMSwxOCwxLDEyLDEsMTIyLDI3LDk1LDc4LDk3LDEwOSwxMDEsCisgICAgMTE1LDExMiw5Nyw5OSwxMDEsODAsOTcsMTE2LDEwNCw0Niw5NSwxMTQsMTAxLDk5LDk3LDEwOCwKKyAgICA5OSwxMTcsMTA4LDk3LDExNiwxMDEsOTksMSwwLDAsMCwwLDAsMCwwLDEsCisgICAgMCwwLDAsMiwwLDAsMCw2NywwLDAsMCwxMTUsMTYsMCwwLDAsCisgICAgMTE2LDAsMCwxMjQsMCwwLDEwNiwxLDAsMTMxLDAsMCwxMzEsMSwwLDgzLAorICAgIDQxLDEsNzgsNDEsMiwyMTgsNCwxMDUsMTE2LDEwMSwxMTQsMTE0LDY4LDEsMCwwLAorICAgIDQxLDEsMTE0LDcxLDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwKKyAgICAwLDExNCw1LDAsMCwwLDIxOCw4LDk1LDk1LDEwNSwxMTYsMTAxLDExNCw5NSw5NSwKKyAgICAyNTAsNiwwLDAsMTE1LDIsMCwwLDAsMCwxLDEyMiwyMyw5NSw3OCw5NywKKyAgICAxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDgwLDk3LDExNiwxMDQsNDYsOTUsOTUsMTA1LDExNiwKKyAgICAxMDEsMTE0LDk1LDk1LDk5LDEsMCwwLDAsMCwwLDAsMCwxLDAsMCwKKyAgICAwLDIsMCwwLDAsNjcsMCwwLDAsMTE1LDE2LDAsMCwwLDExNiwwLAorICAgIDAsMTI0LDAsMCwxMDYsMSwwLDEzMSwwLDAsMTMxLDEsMCw4Myw0MSwxLAorICAgIDc4LDQxLDIsMTE0LDMxLDAsMCwwLDExNCw2OCwxLDAsMCw0MSwxLDExNCwKKyAgICA3MSwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwKKyAgICAwLDAsMCwyMTgsNyw5NSw5NSwxMDgsMTAxLDExMCw5NSw5NSwyNTMsNiwwLDAsCisgICAgMTE1LDIsMCwwLDAsMCwxLDEyMiwyMiw5NSw3OCw5NywxMDksMTAxLDExNSwxMTIsCisgICAgOTcsOTksMTAxLDgwLDk3LDExNiwxMDQsNDYsOTUsOTUsMTA4LDEwMSwxMTAsOTUsOTUsOTksCisgICAgMSwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMiwwLDAsMCwKKyAgICA2NywwLDAsMCwxMTUsMTYsMCwwLDAsMTAwLDEsMCwxMDYsMCwwLDEyNCwKKyAgICAwLDAsMTA2LDEsMCwxMzEsMSwwLDgzLDQxLDIsNzgsMTIyLDIwLDk1LDc4LAorICAgIDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsODAsOTcsMTE2LDEwNCw0MCwxMjMsMzMsMTE0LAorICAgIDEyNSw0MSw0MSwyLDExNCw0NywwLDAsMCwxMTQsMjU0LDAsMCwwLDQxLDEsCisgICAgMTE0LDcxLDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCwKKyAgICA1LDAsMCwwLDExNCwxMDEsMCwwLDAsMCw3LDAsMCwxMTUsMiwwLAorICAgIDAsMCwwLDEsMTIyLDIzLDk1LDc4LDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsCisgICAgODAsOTcsMTE2LDEwNCw0Niw5NSw5NSwxMTQsMTAxLDExMiwxMTQsOTUsOTUsOTksMiwwLAorICAgIDAsMCwwLDAsMCwwLDIsMCwwLDAsMiwwLDAsMCw2NywwLAorICAgIDAsMCwxMTUsMTYsMCwwLDAsMTI0LDEsMCwxMjQsMCwwLDEwNiwwLDAsCisgICAgMTMxLDAsMCwxMDcsNiwwLDgzLDQxLDEsNzgsNDEsMSwxMTQsNjgsMSwwLAorICAgIDAsNDEsMiwxMTQsNzEsMCwwLDAsMjE4LDQsMTA1LDExNiwxMDEsMTA5LDExNCw0LAorICAgIDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCwxMiw5NSwKKyAgICA5NSw5OSwxMTEsMTEwLDExNiw5NywxMDUsMTEwLDExNSw5NSw5NSwzLDcsMCwwLDExNSwKKyAgICAyLDAsMCwwLDAsMSwxMjIsMjcsOTUsNzgsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LAorICAgIDk5LDEwMSw4MCw5NywxMTYsMTA0LDQ2LDk1LDk1LDk5LDExMSwxMTAsMTE2LDk3LDEwNSwxMTAsCisgICAgMTE1LDk1LDk1LDk5LDIsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLAorICAgIDIsMCwwLDAsNjcsMCwwLDAsMTE1LDIwLDAsMCwwLDEyNCwwLDAsCisgICAgMTA2LDAsMCwxMDYsMSwwLDEyNCwxLDAsMTMxLDEsMCwxLDEwMCwwLDAsCisgICAgODMsNDEsMSw3OCw0MSwyLDExNCwyNTQsMCwwLDAsMTE0LDIyNCwwLDAsMCwKKyAgICA0MSwyLDExNCw3MSwwLDAsMCwxMTQsNzIsMSwwLDAsMTE0LDQsMCwwLAorICAgIDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDIyNCwwLDAsMCwKKyAgICA2LDcsMCwwLDExNSwyLDAsMCwwLDAsMSwxMjIsMjEsOTUsNzgsOTcsCisgICAgMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw4MCw5NywxMTYsMTA0LDQ2LDk3LDExMiwxMTIsMTAxLAorICAgIDExMCwxMDAsNzgsNDEsMTMsMTE0LDU3LDAsMCwwLDExNCw1NiwwLDAsMCwxMTQsCisgICAgNTgsMCwwLDAsMTE0LDU5LDAsMCwwLDExNCw3MiwwLDAsMCwxMTQsNjcsCisgICAgMSwwLDAsMTE0LDYyLDEsMCwwLDExNCw2OCwxLDAsMCwxMTQsNzAsMSwKKyAgICAwLDAsMTE0LDcxLDEsMCwwLDExNCwxMDEsMCwwLDAsMTE0LDczLDEsMCwKKyAgICAwLDExNCwyMjQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsCisgICAgMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDYxLDEsMCwwLDIxMCwKKyAgICA2LDAsMCwxMTUsMjAsMCwwLDAsMTIsNSw2LDIsMTIsNiwxMiwxMCwKKyAgICAxMiw0LDEyLDEzLDEyLDMsMTIsMywxMiwzLDEyLDMsMTE0LDYxLDEsMCwKKyAgICAwLDk5LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDMsMCwKKyAgICAwLDAsNjQsMCwwLDAsMTE1LDEwNiwwLDAsMCwxMDEsMCwwLDkwLDEsCisgICAgMCwxMDAsMCwwLDkwLDIsMCwxMDAsMSwwLDEwMCwyLDAsMTMyLDAsMCwKKyAgICA5MCwzLDAsMTAxLDQsMCwxMDAsMywwLDEwMCw0LDAsMTMyLDAsMCwxMzEsCisgICAgMSwwLDkwLDUsMCwxMDAsNSwwLDEwMCw2LDAsMTMyLDAsMCw5MCw2LAorICAgIDAsMTAwLDcsMCwxMDAsOCwwLDEzMiwwLDAsOTAsNywwLDEwMCw5LDAsCisgICAgMTAwLDEwLDAsMTMyLDAsMCw5MCw4LDAsMTAwLDExLDAsMTAwLDEyLDAsMTMyLAorICAgIDAsMCw5MCw5LDAsMTAwLDEzLDAsMTAwLDE0LDAsMTMyLDAsMCw5MCwxMCwKKyAgICAwLDEwMCwxNSwwLDgzLDQxLDE2LDExNCwyNTIsMCwwLDAsOTksNCwwLDAsCisgICAgMCwwLDAsMCwwLDQsMCwwLDAsNCwwLDAsMCw2NywwLDAsCisgICAgMCwxMTUsMjUsMCwwLDAsMTE2LDAsMCwxMjQsMSwwLDEyNCwyLDAsMTI0LAorICAgIDMsMCwxMzEsMywwLDEyNCwwLDAsOTUsMSwwLDEwMCwwLDAsODMsNDEsCisgICAgMSw3OCw0MSwyLDExNCw2MSwxLDAsMCwxMTQsMjU0LDAsMCwwLDQxLDQsCisgICAgMTE0LDcxLDAsMCwwLDExNCw2NywwLDAsMCwxMTQsMzUsMCwwLDAsMTE0LAorICAgIDY1LDEsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LAorICAgIDAsMCwwLDExNCw3MiwwLDAsMCwxMiw3LDAsMCwxMTUsMiwwLDAsCisgICAgMCwwLDEsMTIyLDI1LDk1LDc4LDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsNzYsCisgICAgMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDk1LDk1LDEwNSwxMTAsMTA1LDExNiw5NSw5NSw5OSwyLAogICAgIDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwyLDAsMCwwLDY3LAotICAgIDAsMCwwLDExNSwyMCwwLDAsMCwxMjQsMCwwLDEwNiwwLDAsMTA2LDEsCi0gICAgMCwxMjQsMSwwLDEzMSwxLDAsMSwxMDAsMCwwLDgzLDQwLDEsMCwwLAotICAgIDAsNzgsNDAsMiwwLDAsMCwxMTcsNSwwLDAsMCw5NSwxMTIsOTcsMTE2LAotICAgIDEwNCwxMTcsNiwwLDAsMCw5NywxMTIsMTEyLDEwMSwxMTAsMTAwLDQwLDIsMCwwLAotICAgIDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDExNyw0LDAsMCwwLDEwNSwKLSAgICAxMTYsMTAxLDEwOSw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsCi0gICAgMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LAotICAgIDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywKLSAgICA2LDAsMCwwLDk3LDExMiwxMTIsMTAxLDExMCwxMDAsMTg0LDQsMCwwLDExNSwyLAotICAgIDAsMCwwLDAsMSwxMTcsMjEsMCwwLDAsOTUsNzgsOTcsMTA5LDEwMSwxMTUsCi0gICAgMTEyLDk3LDk5LDEwMSw4MCw5NywxMTYsMTA0LDQ2LDk3LDExMiwxMTIsMTAxLDExMCwxMDAsNzgsCi0gICAgNDAsMTMsMCwwLDAsMTE3LDgsMCwwLDAsOTUsOTUsMTEwLDk3LDEwOSwxMDEsCi0gICAgOTUsOTUsMTE3LDEwLDAsMCwwLDk1LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LAotICAgIDk1LDExNywxMiwwLDAsMCw5NSw5NSwxMTMsMTE3LDk3LDEwOCwxMTAsOTcsMTA5LDEwMSwKLSAgICA5NSw5NSwxMTcsNywwLDAsMCw5NSw5NSwxMDAsMTExLDk5LDk1LDk1LDExNyw4LAotICAgIDAsMCwwLDk1LDk1LDEwNSwxMTAsMTA1LDExNiw5NSw5NSwxMTcsMjMsMCwwLDAsCi0gICAgOTUsMTAyLDEwNSwxMTAsMTAwLDk1LDExMiw5NywxMTQsMTAxLDExMCwxMTYsOTUsMTEyLDk3LDExNiwKLSAgICAxMDQsOTUsMTEwLDk3LDEwOSwxMDEsMTE1LDExNywxNiwwLDAsMCw5NSwxMDMsMTAxLDExNiwKLSAgICA5NSwxMTIsOTcsMTE0LDEwMSwxMTAsMTE2LDk1LDExMiw5NywxMTYsMTA0LDExNywxMiwwLDAsCi0gICAgMCw5NSwxMTQsMTAxLDk5LDk3LDEwOCw5OSwxMTcsMTA4LDk3LDExNiwxMDEsMTE3LDgsMCwKLSAgICAwLDAsOTUsOTUsMTA1LDExNiwxMDEsMTE0LDk1LDk1LDExNyw3LDAsMCwwLDk1LAotICAgIDk1LDEwOCwxMDEsMTEwLDk1LDk1LDExNyw4LDAsMCwwLDk1LDk1LDExNCwxMDEsMTEyLAotICAgIDExNCw5NSw5NSwxMTcsMTIsMCwwLDAsOTUsOTUsOTksMTExLDExMCwxMTYsOTcsMTA1LAotICAgIDExMCwxMTUsOTUsOTUsMTE3LDYsMCwwLDAsOTcsMTEyLDExMiwxMDEsMTEwLDEwMCw0MCwKLSAgICAxLDAsMCwwLDExNywxMCwwLDAsMCw5NSw5NSwxMDgsMTExLDk5LDk3LDEwOCwKLSAgICAxMTUsOTUsOTUsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLAotICAgIDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwKLSAgICAxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsCi0gICAgMTQsMCwwLDAsOTUsNzgsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw4MCw5NywKLSAgICAxMTYsMTA0LDEzMyw0LDAsMCwxMTUsMjAsMCwwLDAsMTYsNSw2LDIsMTIsCi0gICAgNiwxMiwxMCwxMiw0LDEyLDEyLDEyLDMsMTIsMywxMiwzLDEyLDMsMTE3LAotICAgIDE0LDAsMCwwLDk1LDc4LDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsODAsOTcsCi0gICAgMTE2LDEwNCw5OSwxLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwzLAotICAgIDAsMCwwLDY2LDAsMCwwLDExNSw2OCwwLDAsMCwxMjQsMCwwLDY5LAotICAgIDEwMSwwLDAsOTAsMSwwLDEwMCwwLDAsOTAsMiwwLDEwMCwxLDAsMTAwLAotICAgIDIsMCwxMzIsMCwwLDkwLDMsMCwxMDEsNCwwLDEwMCwzLDAsMTAwLDQsCi0gICAgMCwxMzIsMCwwLDEzMSwxLDAsOTAsNSwwLDEwMSw2LDAsMTAwLDUsMCwKLSAgICAxMDAsNiwwLDEzMiwwLDAsMTMxLDEsMCw5MCw3LDAsMTAwLDcsMCw4MywKLSAgICA0MCw4LDAsMCwwLDExNywxNSwwLDAsMCw3OCw5NywxMDksMTAxLDExNSwxMTIsCi0gICAgOTcsOTksMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw5OSw0LDAsMCwwLDAsMCwKLSAgICAwLDAsNCwwLDAsMCw0LDAsMCwwLDY3LDAsMCwwLDExNSwyNSwKLSAgICAwLDAsMCwxMTYsMCwwLDEyNCwxLDAsMTI0LDIsMCwxMjQsMywwLDEzMSwKLSAgICAzLDAsMTI0LDAsMCw5NSwxLDAsMTAwLDAsMCw4Myw0MCwxLDAsMCwKLSAgICAwLDc4LDQwLDIsMCwwLDAsMTE3LDE0LDAsMCwwLDk1LDc4LDk3LDEwOSwKLSAgICAxMDEsMTE1LDExMiw5Nyw5OSwxMDEsODAsOTcsMTE2LDEwNCwxMTcsNSwwLDAsMCw5NSwKLSAgICAxMTIsOTcsMTE2LDEwNCw0MCw0LDAsMCwwLDExNyw0LDAsMCwwLDExNSwxMDEsCi0gICAgMTA4LDEwMiwxMTcsNCwwLDAsMCwxMTAsOTcsMTA5LDEwMSwxMTcsNCwwLDAsMCwKLSAgICAxMTIsOTcsMTE2LDEwNCwxMTcsMTEsMCwwLDAsMTEyLDk3LDExNiwxMDQsOTUsMTAyLDEwNSwKLSAgICAxMTAsMTAwLDEwMSwxMTQsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwKLSAgICAwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LAotICAgIDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwKLSAgICAxMTcsOCwwLDAsMCw5NSw5NSwxMDUsMTEwLDEwNSwxMTYsOTUsOTUsMTg5LDQsMCwKLSAgICAwLDExNSwyLDAsMCwwLDAsMSwxMTcsMjQsMCwwLDAsNzgsOTcsMTA5LAotICAgIDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsOTUsOTUsMTA1LAotICAgIDExMCwxMDUsMTE2LDk1LDk1LDk5LDIsMCwwLDAsMCwwLDAsMCwyLDAsCi0gICAgMCwwLDIsMCwwLDAsNjcsMCwwLDAsMTE1LDE2LDAsMCwwLDEwMCwKLSAgICAxLDAsMTA2LDAsMCwxMjQsMSwwLDEwNiwxLDAsMTMxLDEsMCw4Myw0MCwKLSAgICAyLDAsMCwwLDc4LDExNywyNSwwLDAsMCw2MCwxMDksMTExLDEwMCwxMTcsMTA4LAotICAgIDEwMSwzMiwzOSwxMjMsMTI1LDM5LDMyLDQwLDExMCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksCi0gICAgMTAxLDQxLDYyLDQwLDIsMCwwLDAsMTE3LDYsMCwwLDAsMTAyLDExMSwxMTQsCi0gICAgMTA5LDk3LDExNiwxMTcsOCwwLDAsMCw5NSw5NSwxMTAsOTcsMTA5LDEwMSw5NSw5NSwKLSAgICA0MCwyLDAsMCwwLDExNywzLDAsMCwwLDk5LDEwOCwxMTUsMTE3LDYsMCwKLSAgICAwLDAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDAsMCwwLDAsMCw0MCwwLDAsCi0gICAgMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsCi0gICAgMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsCi0gICAgMTE0LDk3LDExMiw2MiwxMTcsMTEsMCwwLDAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsCi0gICAgMTE0LDEwMSwxMTIsMTE0LDE5Miw0LDAsMCwxMTUsMiwwLDAsMCwwLDIsMTE3LAotICAgIDI3LDAsMCwwLDc4LDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsNzYsMTExLDk3LAorICAgIDAsMCwwLDExNSwxNiwwLDAsMCwxMDAsMSwwLDEwNiwwLDAsMTI0LDEsCisgICAgMCwxMDYsMSwwLDEzMSwxLDAsODMsNDEsMiwxMjIsMTE1LDgyLDEwMSwxMTYsMTE3LAorICAgIDExNCwxMTAsMzIsMTE0LDEwMSwxMTIsMTE0LDMyLDEwMiwxMTEsMTE0LDMyLDExNiwxMDQsMTAxLDMyLAorICAgIDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLAorICAgIDMyLDg0LDEwNCwxMDEsMzIsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMzIsMTA1LDExNSwzMiwxMDAsCisgICAgMTAxLDExMiwxMTQsMTAxLDk5LDk3LDExNiwxMDEsMTAwLDQ2LDMyLDMyLDg0LDEwNCwxMDEsMzIsCisgICAgMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMzIsMTA5LDk3LDk5LDEwNCwxMDUsMTEwLDEwMSwxMTQsMTIxLAorICAgIDMyLDEwMCwxMTEsMTAxLDExNSwzMiwxMTYsMTA0LDEwMSwzMiwxMDYsMTExLDk4LDMyLDEwNSwxMTYsCisgICAgMTE1LDEwMSwxMDgsMTAyLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDEyMiwKKyAgICAyNSw2MCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMjMsMzMsMTE0LDEyNSwzMiw0MCwxMTAsCisgICAgOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw0MSw2Miw0MSwyLDExNCw0NywwLDAsCisgICAgMCwxMTQsNTcsMCwwLDAsNDEsMiwxMTQsMTIsMSwwLDAsMTE0LDE4MCwwLAorICAgIDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsCisgICAgMCwxMTQsMjA2LDAsMCwwLDE1LDcsMCwwLDExNSwyLDAsMCwwLDAsCisgICAgNywxMjIsMjgsOTUsNzgsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw3NiwxMTEsOTcsCiAgICAgMTAwLDEwMSwxMTQsNDYsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTE0LDEwMSwxMTIsMTE0LDk5LAotICAgIDIsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDMsMCwwLDAsCi0gICAgNjcsMCwwLDAsMTE1LDMyLDAsMCwwLDExNiwwLDAsMTAwLDEsMCwxMjQsCi0gICAgMCwwLDEwNiwxLDAsMTMxLDIsMCwxLDEyNCwwLDAsMTA2LDEsMCwxMjQsCi0gICAgMSwwLDk1LDIsMCwxMjQsMSwwLDgzLDQwLDIsMCwwLDAsMTE3LDI0LAotICAgIDAsMCwwLDc2LDExMSw5NywxMDAsMzIsOTcsMzIsMTEwLDk3LDEwOSwxMDEsMTE1LDExMiwKLSAgICA5Nyw5OSwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDYsMTE3LDM4LDAsMCwwLAotICAgIDExMCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAotICAgIDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwxMDAsMzIsMTE5LDEwNSwxMTYsMTA0LDMyLDExMiw5NywxMTYsCi0gICAgMTA0LDMyLDEyMywzMywxMTQsMTI1LDQwLDMsMCwwLDAsMTE3LDE2LDAsMCwwLAotICAgIDk1LDExOCwxMDEsMTE0LDk4LDExMSwxMTUsMTAxLDk1LDEwOSwxMDEsMTE1LDExNSw5NywxMDMsMTAxLAotICAgIDExNyw1LDAsMCwwLDk1LDExMiw5NywxMTYsMTA0LDExNyw4LDAsMCwwLDk1LAotICAgIDk1LDExMiw5NywxMTYsMTA0LDk1LDk1LDQwLDIsMCwwLDAsMTE3LDQsMCwwLAotICAgIDAsMTE1LDEwMSwxMDgsMTAyLDExNyw2LDAsMCwwLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAotICAgIDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsCi0gICAgMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCwKLSAgICA0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDExLDAsMCwKLSAgICAwLDEwOCwxMTEsOTcsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDE5Niw0LDAsMCwKLSAgICAxMTUsNiwwLDAsMCwwLDMsMTYsMSwxMiwxLDExNywyNywwLDAsMCwKKyAgICAyLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwxLDAsMCwwLAorICAgIDY3LDAsMCwwLDExNSw0LDAsMCwwLDEwMCwxLDAsODMsNDEsMiw3OCwKKyAgICA4NCwxMTQsNCwwLDAsMCw0MSwyLDExNCw3MSwwLDAsMCwxMTQsMTU5LDAsCisgICAgMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwKKyAgICAwLDExNCwyMjAsMCwwLDAsMjQsNywwLDAsMTE1LDIsMCwwLDAsMCwKKyAgICAxLDEyMiwyNyw5NSw3OCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDc2LDExMSw5NywKKyAgICAxMDAsMTAxLDExNCw0NiwxMDUsMTE1LDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw5OSwyLAorICAgIDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwxLDAsMCwwLDY3LAorICAgIDAsMCwwLDExNSw0LDAsMCwwLDEwMCwxLDAsODMsNDEsMiw3OCwxMTQsCisgICAgMzAsMCwwLDAsMTE0LDQsMCwwLDAsNDEsMiwxMTQsNzEsMCwwLDAsCisgICAgMTE0LDE1OSwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsCisgICAgNSwwLDAsMCwxMTQsMTcsMSwwLDAsMjcsNywwLDAsMTE1LDIsMCwKKyAgICAwLDAsMCwxLDEyMiwyNyw5NSw3OCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLAorICAgIDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMDMsMTAxLDExNiw5NSwxMTUsMTExLDExNywxMTQsOTksCisgICAgMTAxLDk5LDIsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDYsMCwKKyAgICAwLDAsNjcsMCwwLDAsMTE1LDIyLDAsMCwwLDExNiwwLDAsMTAwLDEsCisgICAgMCwxMDAsMiwwLDEwMCwzLDAsMTAwLDQsMCwxMDAsNSwwLDEzMSwzLDEsCisgICAgODMsNDEsNiw3OCwxMTQsMzAsMCwwLDAsMTIyLDgsNjAsMTE1LDExNiwxMTQsMTA1LAorICAgIDExMCwxMDMsNjIsMTE0LDE3NiwwLDAsMCwxMTQsNDMsMSwwLDAsODQsNDEsMSwKKyAgICAxMTQsNDQsMSwwLDAsNDEsMiwxMTQsNzEsMCwwLDAsMTE0LDE1OSwwLDAsCisgICAgMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwKKyAgICAxMTQsMTYsMSwwLDAsMzAsNywwLDAsMTE1LDIsMCwwLDAsMCwxLAorICAgIDEyMiwyNSw5NSw3OCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDc2LDExMSw5NywxMDAsCisgICAgMTAxLDExNCw0NiwxMDMsMTAxLDExNiw5NSw5OSwxMTEsMTAwLDEwMSw5OSwyLDAsMCwwLAorICAgIDAsMCwwLDAsMiwwLDAsMCwxLDAsMCwwLDY3LDAsMCwwLAorICAgIDExNSw0LDAsMCwwLDEwMCwwLDAsODMsNDEsMSw3OCwxMTQsNCwwLDAsCisgICAgMCw0MSwyLDExNCw3MSwwLDAsMCwxMTQsMTgwLDAsMCwwLDExNCw0LDAsCisgICAgMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwyLDEsMCwKKyAgICAwLDMzLDcsMCwwLDExNSwyLDAsMCwwLDAsMSwxMjIsMjgsOTUsNzgsCisgICAgOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsMTAxLAorICAgIDEyMCwxMDEsOTksOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTksMiwwLDAsMCwwLAorICAgIDAsMCwwLDIsMCwwLDAsMywwLDAsMCw2NywwLDAsMCwxMTUsCisgICAgMjksMCwwLDAsMTE2LDAsMCwxMDAsMSwwLDEyNCwwLDAsMTA2LDEsMCwKKyAgICAxMzEsMiwwLDEsMTE2LDIsMCwxMjQsMCwwLDEyNCwxLDAsMTMxLDIsMCwKKyAgICA4Myw0MSwyLDEyMiw5OCw3NiwxMTEsOTcsMTAwLDMyLDk3LDMyLDExMCw5NywxMDksMTAxLAorICAgIDExNSwxMTIsOTcsOTksMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ2LDEwLDEwLDMyLAorICAgIDMyLDMyLDMyLDMyLDMyLDMyLDMyLDg0LDEwNCwxMDUsMTE1LDMyLDEwOSwxMDEsMTE2LDEwNCwKKyAgICAxMTEsMTAwLDMyLDEwNSwxMTUsMzIsMTAwLDEwMSwxMTIsMTE0LDEwMSw5OSw5NywxMTYsMTAxLDEwMCwKKyAgICA0NiwzMiwzMiw4NSwxMTUsMTAxLDMyLDEwMSwxMjAsMTAxLDk5LDk1LDEwOSwxMTEsMTAwLDExNywKKyAgICAxMDgsMTAxLDQwLDQxLDMyLDEwNSwxMTAsMTE1LDExNiwxMDEsOTcsMTAwLDQ2LDEwLDEwLDMyLAorICAgIDMyLDMyLDMyLDMyLDMyLDMyLDMyLDEyMiwzOCwxMTAsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LAorICAgIDk5LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMDgsMTExLDk3LDEwMCwxMDEsMTAwLAorICAgIDMyLDExOSwxMDUsMTE2LDEwNCwzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMjMsMzMsMTE0LDEyNSw0MSwKKyAgICAzLDExNCwxNTMsMCwwLDAsMTE0LDI1NCwwLDAsMCwxMTQsMTgxLDAsMCwwLAorICAgIDQxLDIsMTE0LDcxLDAsMCwwLDExNCwxNTksMCwwLDAsMTE0LDQsMCwwLAorICAgIDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDUsMSwwLDAsCisgICAgMzYsNywwLDAsMTE1LDQsMCwwLDAsMCw3LDE2LDEsMTIyLDI4LDk1LAogICAgIDc4LDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LAotICAgIDEwOCwxMTEsOTcsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDc4LDQwLDgsMCwwLAotICAgIDAsMTE3LDgsMCwwLDAsOTUsOTUsMTEwLDk3LDEwOSwxMDEsOTUsOTUsMTE3LDEwLAotICAgIDAsMCwwLDk1LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDk1LDExNywxMiwwLAotICAgIDAsMCw5NSw5NSwxMTMsMTE3LDk3LDEwOCwxMTAsOTcsMTA5LDEwMSw5NSw5NSwxMTcsOCwKLSAgICAwLDAsMCw5NSw5NSwxMDUsMTEwLDEwNSwxMTYsOTUsOTUsMTE3LDExLDAsMCwwLAotICAgIDk5LDEwOCw5NywxMTUsMTE1LDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDExNywxMSwwLDAsMCwKLSAgICAxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwxMTQsMTAxLDExMiwxMTQsMTE3LDE3LDAsMCwwLAotICAgIDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDEwMiwxMTEsMTE0LDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwKLSAgICAxMTQsMTE3LDExLDAsMCwwLDEwOCwxMTEsOTcsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsCi0gICAgMTAxLDQwLDEsMCwwLDAsMTE3LDEwLDAsMCwwLDk1LDk1LDEwOCwxMTEsOTksCi0gICAgOTcsMTA4LDExNSw5NSw5NSw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LAotICAgIDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwKLSAgICAxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLAotICAgIDYyLDExNywxNSwwLDAsMCw3OCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDc2LAotICAgIDExMSw5NywxMDAsMTAxLDExNCwxODgsNCwwLDAsMTE1LDYsMCwwLDAsMTYsMSwKLSAgICAxMiwzLDE4LDQsMTE3LDE1LDAsMCwwLDc4LDk3LDEwOSwxMDEsMTE1LDExMiw5NywKLSAgICA5OSwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDk5LDEsMCwwLDAsMCwwLDAsCi0gICAgMCwxLDAsMCwwLDQsMCwwLDAsNjYsMCwwLDAsMTE1LDExOSwwLAotICAgIDAsMCwxMjQsMCwwLDY5LDEwMSwwLDAsOTAsMSwwLDEwMCwwLDAsOTAsCi0gICAgMiwwLDEwMCwxLDAsOTAsMywwLDEwMSw0LDAsMTAwLDIsMCwxMDAsMywKLSAgICAwLDEzMiwwLDAsMTMxLDEsMCw5MCw1LDAsMTAxLDQsMCwxMDAsNCwwLAotICAgIDEwMCw1LDAsMTMyLDAsMCwxMzEsMSwwLDkwLDYsMCwxMDEsNCwwLDEwMCwKLSAgICA2LDAsMTAwLDcsMCwxMzIsMCwwLDEzMSwxLDAsOTAsNywwLDEwMSw0LAotICAgIDAsMTAwLDgsMCwxMDAsOSwwLDEzMiwwLDAsMTMxLDEsMCw5MCw4LDAsCi0gICAgMTAxLDQsMCwxMDAsMTIsMCwxMDAsMTAsMCwxMDAsMTEsMCwxMzIsMSwwLDEzMSwKLSAgICAxLDAsOTAsMTAsMCwxMDAsMTIsMCw4Myw0MCwxMywwLDAsMCwxMTcsMTAsCi0gICAgMCwwLDAsODAsOTcsMTE2LDEwNCw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDExNyw2MiwwLAotICAgIDAsMCw3NywxMDEsMTE2LDk3LDMyLDExMiw5NywxMTYsMTA0LDMyLDEwMiwxMDUsMTEwLDEwMCwKLSAgICAxMDEsMTE0LDMyLDEwMiwxMTEsMTE0LDMyLDExNSwxMjEsMTE1LDQ2LDExMiw5NywxMTYsMTA0LDMyLAotICAgIDk3LDExMCwxMDAsMzIsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDMyLDk1LDk1LDExMiw5NywKLSAgICAxMTYsMTA0LDk1LDk1LDMyLDk3LDExNiwxMTYsMTE0LDEwNSw5OCwxMTcsMTE2LDEwMSwxMTUsNDYsCi0gICAgOTksMSwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsNCwwLDAsCi0gICAgMCw2NywwLDAsMCwxMTUsNTgsMCwwLDAsMTIwLDUxLDAsMTE2LDAsMCwKLSAgICAxMDYsMSwwLDEwNiwyLDAsMTMxLDAsMCw2OCw5MywzNCwwLDEyNSwxLDAsCi0gICAgMTE2LDMsMCwxMjQsMSwwLDEwMCwxLDAsMTMxLDIsMCwxMTQsMTYsMCwxMjQsCi0gICAgMSwwLDEwNiw0LDAsMTMxLDAsMCwxLDExMywxNiwwLDExMywxNiwwLDg3LAotICAgIDEwMCwyLDAsODMsNDAsMywwLDAsMCwxMTcsMTI1LDAsMCwwLDY3LDk3LAotICAgIDEwOCwxMDgsMzIsMTE2LDEwNCwxMDEsMzIsMTA1LDExMCwxMTgsOTcsMTA4LDEwNSwxMDAsOTcsMTE2LAotICAgIDEwMSw5NSw5OSw5Nyw5OSwxMDQsMTAxLDExNSw0MCw0MSwzMiwxMDksMTAxLDExNiwxMDQsMTExLAotICAgIDEwMCwzMiwxMTEsMTEwLDMyLDk3LDEwOCwxMDgsMzIsMTEyLDk3LDExNiwxMDQsMzIsMTAxLDExMCwKLSAgICAxMTYsMTE0LDEyMSwzMiwxMDIsMTA1LDExMCwxMDAsMTAxLDExNCwxMTUsMTAsMzIsMzIsMzIsMzIsCi0gICAgMzIsMzIsMzIsMzIsMTE1LDExNiwxMTEsMTE0LDEwMSwxMDAsMzIsMTA1LDExMCwzMiwxMTUsMTIxLAotICAgIDExNSw0NiwxMTIsOTcsMTE2LDEwNCw5NSwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDk1LAotICAgIDk5LDk3LDk5LDEwNCwxMDEsMTE1LDMyLDQwLDExOSwxMDQsMTAxLDExNCwxMDEsMzIsMTA1LDEwOSwKLSAgICAxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsMTAxLDEwMCw0MSw0NiwxMTcsMTcsMCwwLDAsCi0gICAgMTA1LDExMCwxMTgsOTcsMTA4LDEwNSwxMDAsOTcsMTE2LDEwMSw5NSw5OSw5Nyw5OSwxMDQsMTAxLAotICAgIDExNSw3OCw0MCw1LDAsMCwwLDExNywzLDAsMCwwLDExNSwxMjEsMTE1LDExNywKLSAgICAxOSwwLDAsMCwxMTIsOTcsMTE2LDEwNCw5NSwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsCi0gICAgMTE0LDk1LDk5LDk3LDk5LDEwNCwxMDEsMTE3LDYsMCwwLDAsMTE4LDk3LDEwOCwxMTcsCi0gICAgMTAxLDExNSwxMTcsNywwLDAsMCwxMDQsOTcsMTE1LDk3LDExNiwxMTYsMTE0LDExNywxNywKLSAgICAwLDAsMCwxMDUsMTEwLDExOCw5NywxMDgsMTA1LDEwMCw5NywxMTYsMTAxLDk1LDk5LDk3LAotICAgIDk5LDEwNCwxMDEsMTE1LDQwLDIsMCwwLDAsMTE3LDMsMCwwLDAsOTksMTA4LAotICAgIDExNSwxMTcsNiwwLDAsMCwxMDIsMTA1LDExMCwxMDAsMTAxLDExNCw0MCwwLDAsMCwKLSAgICAwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwKLSAgICAxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLAotICAgIDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxNywwLDAsMCwxMDUsMTEwLDExOCwKLSAgICA5NywxMDgsMTA1LDEwMCw5NywxMTYsMTAxLDk1LDk5LDk3LDk5LDEwNCwxMDEsMTE1LDIxMCw0LAotICAgIDAsMCwxMTUsNiwwLDAsMCwwLDQsMjIsMSwxNSwxLDExNywyOCwwLAotICAgIDAsMCw4MCw5NywxMTYsMTA0LDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsMTA1LDExMCwxMTgsCi0gICAgOTcsMTA4LDEwNSwxMDAsOTcsMTE2LDEwMSw5NSw5OSw5Nyw5OSwxMDQsMTAxLDExNSw5OSwyLAotICAgIDAsMCwwLDAsMCwwLDAsMywwLDAsMCwxMiwwLDAsMCw2NywKLSAgICAwLDAsMCwxMTUsOTQsMCwwLDAsMTE2LDAsMCwxMDYsMSwwLDExNSwyOCwKLSAgICAwLDExNiwyLDAsMTA2LDMsMCwxMDAsMSwwLDExNiw0LDAsMTMxLDIsMCwKLSAgICAxLDExMCwwLDAsMTIwLDU5LDAsMTE2LDAsMCwxMDYsMSwwLDY4LDkzLDQ0LAotICAgIDAsMTI1LDIsMCwxMjEsMTQsMCwxMjQsMiwwLDEyNCwxLDAsMTMxLDEsMCwKLSAgICA4Myw4NywxMTMsMzgsMCw0LDExNiw1LDAsMTA3LDEwLDAsMTE0LDgxLDAsMSwKLSAgICAxLDEsMTE5LDM4LDAsODksMTEzLDM4LDAsODgsMTEzLDM4LDAsODcsMTAwLDIsCi0gICAgMCw4MywxMDAsMiwwLDgzLDQwLDMsMCwwLDAsMTE3LDExMywwLDAsMCwKLSAgICA4MywxMDEsOTcsMTE0LDk5LDEwNCwzMiwxMTUsMTAxLDExMywxMTcsMTAxLDExMCw5OSwxMDEsMzIsCi0gICAgMTExLDEwMiwzMiwxMDQsMTExLDExMSwxMDcsMTE1LDMyLDEwMiwxMTEsMTE0LDMyLDk3LDMyLDEwMiwKLSAgICAxMDUsMTEwLDEwMCwxMDEsMTE0LDMyLDEwMiwxMTEsMTE0LDMyLDM5LDExMiw5NywxMTYsMTA0LDM5LAotICAgIDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDczLDEwMiwzMiwzOSwxMDQsCi0gICAgMTExLDExMSwxMDcsMTE1LDM5LDMyLDEwNSwxMTUsMzIsMTAyLDk3LDEwOCwxMTUsMTAxLDMyLDExNiwKLSAgICAxMDQsMTAxLDExMCwzMiwxMTcsMTE1LDEwMSwzMiwxMTUsMTIxLDExNSw0NiwxMTIsOTcsMTE2LDEwNCwKLSAgICA5NSwxMDQsMTExLDExMSwxMDcsMTE1LDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLAotICAgIDMyLDExNywyMywwLDAsMCwxMTUsMTIxLDExNSw0NiwxMTIsOTcsMTE2LDEwNCw5NSwxMDQsCi0gICAgMTExLDExMSwxMDcsMTE1LDMyLDEwNSwxMTUsMzIsMTAxLDEwOSwxMTIsMTE2LDEyMSw3OCw0MCw3LAotICAgIDAsMCwwLDExNywzLDAsMCwwLDExNSwxMjEsMTE1LDExNywxMCwwLDAsMCwKLSAgICAxMTIsOTcsMTE2LDEwNCw5NSwxMDQsMTExLDExMSwxMDcsMTE1LDExNyw5LDAsMCwwLDk1LAotICAgIDExOSw5NywxMTQsMTEwLDEwNSwxMTAsMTAzLDExNSwxMTcsNCwwLDAsMCwxMTksOTcsMTE0LAotICAgIDExMCwxMTcsMTMsMCwwLDAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiw4Nyw5NywxMTQsMTEwLAotICAgIDEwNSwxMTAsMTAzLDExNywxMSwwLDAsMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDY5LDExNCwKLSAgICAxMTQsMTExLDExNCwxMTcsNCwwLDAsMCw3OCwxMTEsMTEwLDEwMSw0MCwzLDAsMCwKLSAgICAwLDExNywzLDAsMCwwLDk5LDEwOCwxMTUsMTE3LDQsMCwwLDAsMTEyLDk3LAotICAgIDExNiwxMDQsMTE3LDQsMCwwLDAsMTA0LDExMSwxMTEsMTA3LDQwLDAsMCwwLDAsCi0gICAgNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwKLSAgICAxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLAotICAgIDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDExLDAsMCwwLDk1LDExMiw5NywxMTYsCi0gICAgMTA0LDk1LDEwNCwxMTEsMTExLDEwNywxMTUsMjE4LDQsMCwwLDExNSwxNiwwLDAsMCwKLSAgICAwLDcsOSwxLDE5LDEsMTYsMSwzLDEsMTQsMSwxMywxLDEyLDIsCi0gICAgMTE3LDIyLDAsMCwwLDgwLDk3LDExNiwxMDQsNzAsMTA1LDExMCwxMDAsMTAxLDExNCw0NiwKLSAgICA5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMDQsMTExLDExMSwxMDcsMTE1LDk5LDIsMCwwLDAsCi0gICAgMCwwLDAsMCwzLDAsMCwwLDExLDAsMCwwLDY3LDAsMCwwLAotICAgIDExNSw5MSwwLDAsMCwxMjQsMSwwLDEwMCwxLDAsMTA3LDIsMCwxMTQsMjEsCi0gICAgMCwxMDAsMiwwLDEyNSwxLDAsMTEwLDAsMCwxMjEsMTcsMCwxMTYsMCwwLAotICAgIDEwNiwxLDAsMTI0LDEsMCwyNSwxMjUsMiwwLDg3LDExMCw0NiwwLDQsMTE2LAotICAgIDIsMCwxMDcsMTAsMCwxMTQsODYsMCwxLDEsMSwxMjQsMCwwLDEwNiwzLAotICAgIDAsMTI0LDEsMCwxMzEsMSwwLDEyNSwyLDAsMTI0LDIsMCwxMTYsMCwwLAotICAgIDEwNiwxLDAsMTI0LDEsMCw2MCw4OSwxMTAsMSwwLDg4LDEyNCwyLDAsODMsCi0gICAgNDAsMywwLDAsMCwxMTcsMjEwLDAsMCwwLDcxLDEwMSwxMTYsMzIsMTE2LDEwNCwKLSAgICAxMDEsMzIsMTAyLDEwNSwxMTAsMTAwLDEwMSwxMTQsMzIsMTAyLDExMSwxMTQsMzIsMTE2LDEwNCwxMDEsCi0gICAgMzIsMTEyLDk3LDExNiwxMDQsMzIsMTAxLDExMCwxMTYsMTE0LDEyMSwzMiwxMDIsMTE0LDExMSwxMDksCi0gICAgMzIsMTE1LDEyMSwxMTUsNDYsMTEyLDk3LDExNiwxMDQsOTUsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsCi0gICAgMTAxLDExNCw5NSw5OSw5Nyw5OSwxMDQsMTAxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDMyLAotICAgIDMyLDMyLDMyLDczLDEwMiwzMiwxMTYsMTA0LDEwMSwzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMDEsCi0gICAgMTEwLDExNiwxMTQsMTIxLDMyLDEwNSwxMTUsMzIsMTEwLDExMSwxMTYsMzIsMTA1LDExMCwzMiwxMTYsCi0gICAgMTA0LDEwMSwzMiw5OSw5Nyw5OSwxMDQsMTAxLDQ0LDMyLDEwMiwxMDUsMTEwLDEwMCwzMiwxMTYsCi0gICAgMTA0LDEwMSwzMiw5NywxMTIsMTEyLDExNCwxMTEsMTEyLDExNCwxMDUsOTcsMTE2LDEwMSwzMiwxMDIsCi0gICAgMTA1LDExMCwxMDAsMTAxLDExNCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw5NywxMTAsCi0gICAgMTAwLDMyLDk5LDk3LDk5LDEwNCwxMDEsMzIsMTA1LDExNiw0NiwzMiw3MywxMDIsMzIsMTEwLAotICAgIDExMSwzMiwxMDIsMTA1LDExMCwxMDAsMTAxLDExNCwzMiwxMDUsMTE1LDMyLDk3LDExOCw5NywxMDUsCi0gICAgMTA4LDk3LDk4LDEwOCwxMDEsNDQsMzIsMTE1LDExNiwxMTEsMTE0LDEwMSwzMiw3OCwxMTEsMTEwLAotICAgIDEwMSw0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwxMTcsMCwwLDAsCi0gICAgMCwxMTcsMSwwLDAsMCw0Niw0MCw0LDAsMCwwLDExNywzLDAsMCwKLSAgICAwLDExNSwxMjEsMTE1LDExNywxOSwwLDAsMCwxMTIsOTcsMTE2LDEwNCw5NSwxMDUsMTA5LAotICAgIDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDk1LDk5LDk3LDk5LDEwNCwxMDEsMTE3LDgsMCwwLAotICAgIDAsNzUsMTAxLDEyMSw2OSwxMTQsMTE0LDExMSwxMTQsMTE3LDExLDAsMCwwLDk1LDExMiwKLSAgICA5NywxMTYsMTA0LDk1LDEwNCwxMTEsMTExLDEwNywxMTUsNDAsMywwLDAsMCwxMTcsMywKLSAgICAwLDAsMCw5OSwxMDgsMTE1LDExNyw0LDAsMCwwLDExMiw5NywxMTYsMTA0LDExNywKLSAgICA2LDAsMCwwLDEwMiwxMDUsMTEwLDEwMCwxMDEsMTE0LDQwLDAsMCwwLDAsNDAsCi0gICAgMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsCi0gICAgMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwKLSAgICAxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDIwLDAsMCwwLDk1LDExMiw5NywxMTYsMTA0LAotICAgIDk1LDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsOTUsOTksOTcsOTksMTA0LDEwMSwyMzUsCi0gICAgNCwwLDAsMTE1LDE2LDAsMCwwLDAsOCwxMiwxLDksMSwzLDEsCi0gICAgMTcsMSwxMywxLDE1LDEsMTgsMSwxMTcsMzEsMCwwLDAsODAsOTcsMTE2LAorICAgIDEwOCwxMTEsOTcsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDc4LDQxLDExLDExNCw1NywKKyAgICAwLDAsMCwxMTQsNTYsMCwwLDAsMTE0LDU4LDAsMCwwLDExNCw3MiwwLAorICAgIDAsMCwxMTQsMTksMSwwLDAsMTE0LDIwNiwwLDAsMCwxMTQsMjIwLDAsMCwKKyAgICAwLDExNCwxNywxLDAsMCwxMTQsMTYsMSwwLDAsMTE0LDIsMSwwLDAsCisgICAgMTE0LDUsMSwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LAorICAgIDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDI1MiwwLDAsMCwxMSw3LAorICAgIDAsMCwxMTUsMTQsMCwwLDAsMTIsMSwxMiwzLDE4LDksMTIsMywxMiwKKyAgICAzLDEyLDMsMTIsMywxMTQsMjUyLDAsMCwwLDk5LDAsMCwwLDAsMCwKKyAgICAwLDAsMCwwLDAsMCwwLDUsMCwwLDAsNjQsMCwwLDAsMTE1LAorICAgIDE2MCwwLDAsMCwxMDEsMCwwLDkwLDEsMCwxMDAsMCwwLDkwLDIsMCwKKyAgICAxMDAsMSwwLDkwLDMsMCwxMDEsNCwwLDEwMCwyLDAsMTAwLDMsMCwxMzIsCisgICAgMCwwLDEzMSwxLDAsOTAsNSwwLDEwMSw0LDAsMTAwLDQsMCwxMDAsNSwKKyAgICAwLDEzMiwwLDAsMTMxLDEsMCw5MCw2LDAsMTAxLDQsMCwxMDAsNiwwLAorICAgIDEwMCw3LDAsMTMyLDAsMCwxMzEsMSwwLDkwLDcsMCwxMDEsNCwwLDEwMCwKKyAgICA4LDAsMTAwLDksMCwxMzIsMCwwLDEzMSwxLDAsOTAsOCwwLDEwMSw0LAorICAgIDAsMTAwLDEwLDAsMTAwLDExLDAsMTAwLDEyLDAsMTMyLDEsMCwxMzEsMSwwLAorICAgIDkwLDksMCwxMDEsNCwwLDEwMCwxMCwwLDEwMCwxMCwwLDEwMCwxMywwLDEwMCwKKyAgICAxNCwwLDEzMiwyLDAsMTMxLDEsMCw5MCwxMCwwLDEwMSw0LDAsMTAwLDEwLAorICAgIDAsMTAwLDE1LDAsMTAwLDE2LDAsMTMyLDEsMCwxMzEsMSwwLDkwLDExLDAsCisgICAgMTAwLDEwLDAsODMsNDEsMTcsMjE4LDEwLDgwLDk3LDExNiwxMDQsNzAsMTA1LDExMCwxMDAsCisgICAgMTAxLDExNCwxMjIsNjIsNzcsMTAxLDExNiw5NywzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMDIsMTA1LAorICAgIDExMCwxMDAsMTAxLDExNCwzMiwxMDIsMTExLDExNCwzMiwxMTUsMTIxLDExNSw0NiwxMTIsOTcsMTE2LAorICAgIDEwNCwzMiw5NywxMTAsMTAwLDMyLDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwzMiw5NSw5NSwKKyAgICAxMTIsOTcsMTE2LDEwNCw5NSw5NSwzMiw5NywxMTYsMTE2LDExNCwxMDUsOTgsMTE3LDExNiwxMDEsCisgICAgMTE1LDQ2LDk5LDEsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDQsCisgICAgMCwwLDAsNjcsMCwwLDAsMTE1LDU4LDAsMCwwLDEyMCw1MSwwLDExNiwKKyAgICAwLDAsMTA2LDEsMCwxMDYsMiwwLDEzMSwwLDAsNjgsOTMsMzQsMCwxMjUsCisgICAgMSwwLDExNiwzLDAsMTI0LDEsMCwxMDAsMSwwLDEzMSwyLDAsMTE0LDE2LAorICAgIDAsMTI0LDEsMCwxMDYsNCwwLDEzMSwwLDAsMSwxMTMsMTYsMCwxMTMsMTYsCisgICAgMCw4NywxMDAsMiwwLDgzLDQxLDMsMTIyLDEyNSw2Nyw5NywxMDgsMTA4LDMyLDExNiwKKyAgICAxMDQsMTAxLDMyLDEwNSwxMTAsMTE4LDk3LDEwOCwxMDUsMTAwLDk3LDExNiwxMDEsOTUsOTksOTcsCisgICAgOTksMTA0LDEwMSwxMTUsNDAsNDEsMzIsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMzIsMTExLDExMCwKKyAgICAzMiw5NywxMDgsMTA4LDMyLDExMiw5NywxMTYsMTA0LDMyLDEwMSwxMTAsMTE2LDExNCwxMjEsMzIsCisgICAgMTAyLDEwNSwxMTAsMTAwLDEwMSwxMTQsMTE1LDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLAorICAgIDExNSwxMTYsMTExLDExNCwxMDEsMTAwLDMyLDEwNSwxMTAsMzIsMTE1LDEyMSwxMTUsNDYsMTEyLDk3LAorICAgIDExNiwxMDQsOTUsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCw5NSw5OSw5Nyw5OSwxMDQsCisgICAgMTAxLDExNSwzMiw0MCwxMTksMTA0LDEwMSwxMTQsMTAxLDMyLDEwNSwxMDksMTEyLDEwOCwxMDEsMTA5LAorICAgIDEwMSwxMTAsMTE2LDEwMSwxMDAsNDEsNDYsMjE4LDE3LDEwNSwxMTAsMTE4LDk3LDEwOCwxMDUsMTAwLAorICAgIDk3LDExNiwxMDEsOTUsOTksOTcsOTksMTA0LDEwMSwxMTUsNzgsNDEsNSwxMTQsNywwLAorICAgIDAsMCwyMTgsMTksMTEyLDk3LDExNiwxMDQsOTUsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLAorICAgIDExNCw5NSw5OSw5Nyw5OSwxMDQsMTAxLDIxOCw2LDExOCw5NywxMDgsMTE3LDEwMSwxMTUsMTE0LAorICAgIDYwLDAsMCwwLDExNCw3NSwxLDAsMCw0MSwyLDExNCwxMiwxLDAsMCwKKyAgICAyMTgsNiwxMDIsMTA1LDExMCwxMDAsMTAxLDExNCwxMTQsNCwwLDAsMCwxMTQsNCwwLAorICAgIDAsMCwxMTQsNSwwLDAsMCwxMTQsNzUsMSwwLDAsNTMsNywwLDAsCisgICAgMTE1LDYsMCwwLDAsMCw0LDIyLDEsMTUsMSwxMjIsMjgsODAsOTcsMTE2LAorICAgIDEwNCw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDEwNSwxMTAsMTE4LDk3LDEwOCwxMDUsMTAwLDk3LAorICAgIDExNiwxMDEsOTUsOTksOTcsOTksMTA0LDEwMSwxMTUsOTksMiwwLDAsMCwwLDAsCisgICAgMCwwLDMsMCwwLDAsMTIsMCwwLDAsNjcsMCwwLDAsMTE1LDk0LAorICAgIDAsMCwwLDExNiwwLDAsMTA2LDEsMCwxMTUsMjgsMCwxMTYsMiwwLDEwNiwKKyAgICAzLDAsMTAwLDEsMCwxMTYsNCwwLDEzMSwyLDAsMSwxMTAsMCwwLDEyMCwKKyAgICA1OSwwLDExNiwwLDAsMTA2LDEsMCw2OCw5Myw0NCwwLDEyNSwyLDAsMTIxLAorICAgIDE0LDAsMTI0LDIsMCwxMjQsMSwwLDEzMSwxLDAsODMsODcsMTEzLDM4LDAsCisgICAgNCwxMTYsNSwwLDEwNywxMCwwLDExNCw4MSwwLDEsMSwxLDExOSwzOCwwLAorICAgIDg5LDExMywzOCwwLDg4LDExMywzOCwwLDg3LDEwMCwyLDAsODMsMTAwLDIsMCwKKyAgICA4Myw0MSwzLDEyMiwxMTMsODMsMTAxLDk3LDExNCw5OSwxMDQsMzIsMTE1LDEwMSwxMTMsMTE3LAorICAgIDEwMSwxMTAsOTksMTAxLDMyLDExMSwxMDIsMzIsMTA0LDExMSwxMTEsMTA3LDExNSwzMiwxMDIsMTExLAorICAgIDExNCwzMiw5NywzMiwxMDIsMTA1LDExMCwxMDAsMTAxLDExNCwzMiwxMDIsMTExLDExNCwzMiwzOSwKKyAgICAxMTIsOTcsMTE2LDEwNCwzOSw0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwKKyAgICA3MywxMDIsMzIsMzksMTA0LDExMSwxMTEsMTA3LDExNSwzOSwzMiwxMDUsMTE1LDMyLDEwMiw5NywKKyAgICAxMDgsMTE1LDEwMSwzMiwxMTYsMTA0LDEwMSwxMTAsMzIsMTE3LDExNSwxMDEsMzIsMTE1LDEyMSwxMTUsCisgICAgNDYsMTEyLDk3LDExNiwxMDQsOTUsMTA0LDExMSwxMTEsMTA3LDExNSw0NiwxMCwxMCwzMiwzMiwKKyAgICAzMiwzMiwzMiwzMiwzMiwzMiwxMjIsMjMsMTE1LDEyMSwxMTUsNDYsMTEyLDk3LDExNiwxMDQsCisgICAgOTUsMTA0LDExMSwxMTEsMTA3LDExNSwzMiwxMDUsMTE1LDMyLDEwMSwxMDksMTEyLDExNiwxMjEsNzgsCisgICAgNDEsNiwxMTQsNywwLDAsMCwyMTgsMTAsMTEyLDk3LDExNiwxMDQsOTUsMTA0LDExMSwKKyAgICAxMTEsMTA3LDExNSwxMTQsMTY3LDAsMCwwLDExNCwxNjgsMCwwLDAsMTE0LDE2OSwwLAorICAgIDAsMCwxMTQsMTU0LDAsMCwwLDQxLDMsMTE0LDEyLDEsMCwwLDExNCwzNSwKKyAgICAwLDAsMCw5MCw0LDEwNCwxMTEsMTExLDEwNywxMTQsNCwwLDAsMCwxMTQsNCwKKyAgICAwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMTEsOTUsMTEyLDk3LDExNiwxMDQsOTUsCisgICAgMTA0LDExMSwxMTEsMTA3LDExNSw2MSw3LDAsMCwxMTUsMTYsMCwwLDAsMCw3LAorICAgIDksMSwxOSwxLDE2LDEsMywxLDE0LDEsMTMsMSwxMiwyLDEyMiwyMiwKKyAgICA4MCw5NywxMTYsMTA0LDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsOTUsMTEyLDk3LDExNiwxMDQsCisgICAgOTUsMTA0LDExMSwxMTEsMTA3LDExNSw5OSwyLDAsMCwwLDAsMCwwLDAsMywKKyAgICAwLDAsMCwxMSwwLDAsMCw2NywwLDAsMCwxMTUsOTcsMCwwLDAsCisgICAgMTI0LDEsMCwxMDAsMSwwLDEwNywyLDAsMTE0LDI3LDAsMTE2LDAsMCwxMDYsCisgICAgMSwwLDEzMSwwLDAsMTI1LDEsMCwxMTAsMCwwLDEyMSwxNywwLDExNiwyLAorICAgIDAsMTA2LDMsMCwxMjQsMSwwLDI1LDEyNSwyLDAsODcsMTEwLDQ2LDAsNCwKKyAgICAxMTYsNCwwLDEwNywxMCwwLDExNCw5MiwwLDEsMSwxLDEyNCwwLDAsMTA2LAorICAgIDUsMCwxMjQsMSwwLDEzMSwxLDAsMTI1LDIsMCwxMjQsMiwwLDExNiwyLAorICAgIDAsMTA2LDMsMCwxMjQsMSwwLDYwLDg5LDExMCwxLDAsODgsMTI0LDIsMCwKKyAgICA4Myw0MSwyLDEyMiwyMTAsNzEsMTAxLDExNiwzMiwxMTYsMTA0LDEwMSwzMiwxMDIsMTA1LDExMCwKKyAgICAxMDAsMTAxLDExNCwzMiwxMDIsMTExLDExNCwzMiwxMTYsMTA0LDEwMSwzMiwxMTIsOTcsMTE2LDEwNCwKKyAgICAzMiwxMDEsMTEwLDExNiwxMTQsMTIxLDMyLDEwMiwxMTQsMTExLDEwOSwzMiwxMTUsMTIxLDExNSw0NiwKKyAgICAxMTIsOTcsMTE2LDEwNCw5NSwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDk1LDk5LDk3LAorICAgIDk5LDEwNCwxMDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsNzMsMTAyLAorICAgIDMyLDExNiwxMDQsMTAxLDMyLDExMiw5NywxMTYsMTA0LDMyLDEwMSwxMTAsMTE2LDExNCwxMjEsMzIsCisgICAgMTA1LDExNSwzMiwxMTAsMTExLDExNiwzMiwxMDUsMTEwLDMyLDExNiwxMDQsMTAxLDMyLDk5LDk3LAorICAgIDk5LDEwNCwxMDEsNDQsMzIsMTAyLDEwNSwxMTAsMTAwLDMyLDExNiwxMDQsMTAxLDMyLDk3LDExMiwKKyAgICAxMTIsMTE0LDExMSwxMTIsMTE0LDEwNSw5NywxMTYsMTAxLDMyLDEwMiwxMDUsMTEwLDEwMCwxMDEsMTE0LAorICAgIDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDk3LDExMCwxMDAsMzIsOTksOTcsOTksCisgICAgMTA0LDEwMSwzMiwxMDUsMTE2LDQ2LDMyLDczLDEwMiwzMiwxMTAsMTExLDMyLDEwMiwxMDUsMTEwLAorICAgIDEwMCwxMDEsMTE0LDMyLDEwNSwxMTUsMzIsOTcsMTE4LDk3LDEwNSwxMDgsOTcsOTgsMTA4LDEwMSwKKyAgICA0NCwzMiwxMTUsMTE2LDExMSwxMTQsMTAxLDMyLDc4LDExMSwxMTAsMTAxLDQ2LDEwLDEwLDMyLAorICAgIDMyLDMyLDMyLDMyLDMyLDMyLDMyLDExNCwzMCwwLDAsMCw0MSw2LDExNCwzLAorICAgIDAsMCwwLDExNCw0NSwwLDAsMCwxMTQsNywwLDAsMCwxMTQsNzYsMSwKKyAgICAwLDAsMTE0LDc5LDAsMCwwLDExNCw4MCwxLDAsMCw0MSwzLDExNCwxMiwKKyAgICAxLDAsMCwxMTQsMzUsMCwwLDAsMTE0LDc4LDEsMCwwLDExNCw0LDAsCisgICAgMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCwyMCw5NSwxMTIsCisgICAgOTcsMTE2LDEwNCw5NSwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDk1LDk5LDk3LDk5LAorICAgIDEwNCwxMDEsNzgsNywwLDAsMTE1LDE2LDAsMCwwLDAsOCwxMiwxLDE1LAorICAgIDEsMywxLDE3LDEsMTMsMSwxNSwxLDE4LDEsMTIyLDMxLDgwLDk3LDExNiwKICAgICAxMDQsNzAsMTA1LDExMCwxMDAsMTAxLDExNCw0Niw5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMDUsMTA5LAogICAgIDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDk1LDk5LDk3LDk5LDEwNCwxMDEsOTksMywwLDAsCi0gICAgMCwwLDAsMCwwLDgsMCwwLDAsNSwwLDAsMCw2NywwLDAsCi0gICAgMCwxMTUsMTg5LDAsMCwwLDEwMywwLDAsMTI1LDMsMCwxMjAsMTc2LDAsMTI0LAotICAgIDIsMCw2OCw5MywxNTgsMCwxMjUsNCwwLDExNiwwLDAsMTI0LDQsMCwxMTYsCi0gICAgMSwwLDExNiwyLDAsMTAyLDIsMCwxMzEsMiwwLDExNSw0NiwwLDExMywxMywKLSAgICAwLDExMCwwLDAsMTI0LDAsMCwxMDYsMywwLDEyNCw0LDAsMTMxLDEsMCwKLSAgICAxMjUsNSwwLDEyNCw1LDAsMTAwLDIsMCwxMDcsOSwwLDExNCwxMywwLDExNiwKLSAgICA1LDAsMTI0LDUsMCwxMDAsMSwwLDEzMSwyLDAsMTE0LDExMiwwLDEyNCw1LAotICAgIDAsMTA2LDYsMCwxMjQsMSwwLDEzMSwxLDAsOTIsMiwwLDEyNSw2LDAsCi0gICAgMTI1LDcsMCwxMTAsMjEsMCwxMjQsNSwwLDEwNiw3LDAsMTI0LDEsMCwxMzEsCi0gICAgMSwwLDEyNSw2LDAsMTAzLDAsMCwxMjUsNywwLDEyNCw2LDAsMTAwLDIsCi0gICAgMCwxMDcsOSwwLDExNCwxNTUsMCwxMjQsNiwwLDEyNCwzLDAsMTAyLDIsMCwKLSAgICA4MywxMjQsMywwLDEwNiw4LDAsMTI0LDcsMCwxMzEsMSwwLDEsMTEzLDEzLAotICAgIDAsMTEzLDEzLDAsODcsMTAwLDIsMCwxMjQsMywwLDEwMiwyLDAsODMsMTAwLAotICAgIDIsMCw4Myw0MCwzLDAsMCwwLDExNyw2MywwLDAsMCw3MCwxMDUsMTEwLAotICAgIDEwMCwzMiwxMTYsMTA0LDEwMSwzMiwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDMyLDExMSwxMTQsMzIsCi0gICAgMTEwLDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsOTUsMTEyLDk3LDExNiwxMDQsMzIsMTAyLAotICAgIDExMSwxMTQsMzIsMTE2LDEwNCwxMDUsMTE1LDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ3LDExMiwKLSAgICA5Nyw5OSwxMDcsOTcsMTAzLDEwMSwzMiwxMTAsOTcsMTA5LDEwMSw0NiwxMTcsMTEsMCwwLAotICAgIDAsMTAyLDEwNSwxMTAsMTAwLDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsNzgsNDAsOSwwLAotICAgIDAsMCwxMTcsMTAsMCwwLDAsMTA1LDExNSwxMDUsMTEwLDExNSwxMTYsOTcsMTEwLDk5LAotICAgIDEwMSwxMTcsMywwLDAsMCwxMTUsMTE2LDExNCwxMTcsNSwwLDAsMCw5OCwxMjEsCi0gICAgMTE2LDEwMSwxMTUsMTE3LDIwLDAsMCwwLDk1LDExMiw5NywxMTYsMTA0LDk1LDEwNSwxMDksCi0gICAgMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsOTUsOTksOTcsOTksMTA0LDEwMSwxMTcsNCwwLDAsCi0gICAgMCw3OCwxMTEsMTEwLDEwMSwxMTcsNywwLDAsMCwxMDQsOTcsMTE1LDk3LDExNiwxMTYsCi0gICAgMTE0LDExNywxMSwwLDAsMCwxMDIsMTA1LDExMCwxMDAsOTUsMTA4LDExMSw5NywxMDAsMTAxLAotICAgIDExNCwxMTcsMTEsMCwwLDAsMTAyLDEwNSwxMTAsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsCi0gICAgMTAxLDExNyw2LDAsMCwwLDEwMSwxMjAsMTE2LDEwMSwxMTAsMTAwLDQwLDgsMCwwLAotICAgIDAsMTE3LDMsMCwwLDAsOTksMTA4LDExNSwxMTcsOCwwLDAsMCwxMDIsMTE3LAotICAgIDEwOCwxMDgsMTEwLDk3LDEwOSwxMDEsMTE3LDQsMCwwLDAsMTEyLDk3LDExNiwxMDQsMTE3LAotICAgIDE0LDAsMCwwLDExMCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDk1LDExMiw5NywKLSAgICAxMTYsMTA0LDExNyw1LDAsMCwwLDEwMSwxMTAsMTE2LDExNCwxMjEsMTE3LDYsMCwwLAotICAgIDAsMTAyLDEwNSwxMTAsMTAwLDEwMSwxMTQsMTE3LDYsMCwwLDAsMTA4LDExMSw5NywxMDAsCi0gICAgMTAxLDExNCwxMTcsOCwwLDAsMCwxMTIsMTExLDExNCwxMTYsMTA1LDExMSwxMTAsMTE1LDQwLAotICAgIDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLAotICAgIDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0NiwKLSAgICA5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDExLDAsMCwwLAotICAgIDk1LDEwMywxMDEsMTE2LDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMjUyLDQsMCwwLDExNSwKLSAgICAyOCwwLDAsMCwwLDUsNiwxLDEzLDEsMjEsMSw2LDEsMTUsMSwKLSAgICAxMiwxLDE1LDEsMjQsMiwxNSwxLDYsMSwxMiwyLDEwLDUsMjAsMiwKLSAgICAxMTcsMjIsMCwwLDAsODAsOTcsMTE2LDEwNCw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LAotICAgIDk1LDEwMywxMDEsMTE2LDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsOTksMywwLDAsMCwKLSAgICAwLDAsMCwwLDUsMCwwLDAsNCwwLDAsMCw2NywwLDAsMCwKLSAgICAxMTUsOTcsMCwwLDAsMTI0LDIsMCwxMDAsMSwwLDEwNyw4LDAsMTE0LDI0LAotICAgIDAsMTE2LDEsMCwxMDYsMiwwLDEyNSwyLDAsMTEwLDAsMCwxMjQsMCwwLAotICAgIDEwNiwzLDAsMTI0LDEsMCwxMjQsMiwwLDEzMSwyLDAsOTIsMiwwLDEyNSwKLSAgICAzLDAsMTI1LDQsMCwxMjQsMywwLDEwMCwxLDAsMTA3LDksMCwxMTQsNjQsCi0gICAgMCwxMjQsMywwLDgzLDEyNCw0LDAsMTE0LDg5LDAsMTE2LDQsMCwxMjQsMSwKLSAgICAwLDEyNCw0LDAsMTI0LDAsMCwxMDYsMywwLDEzMSwzLDAsODMsMTAwLDEsCi0gICAgMCw4MywxMDAsMSwwLDgzLDQwLDIsMCwwLDAsMTE3LDk4LDAsMCwwLAotICAgIDcwLDEwNSwxMTAsMTAwLDMyLDExNiwxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLAotICAgIDExMSwxMTAsMzIsMTE1LDEyMSwxMTUsNDYsMTEyLDk3LDExNiwxMDQsMzIsMTExLDExNCwzMiwzOSwKLSAgICAxMTIsOTcsMTE2LDEwNCwzOSwzMiw5OCw5NywxMTUsMTAxLDEwMCwzMiwxMTEsMTEwLDMyLDExNSwKLSAgICAxMjEsMTE1LDQ2LDExMiw5NywxMTYsMTA0LDk1LDEwNCwxMTEsMTExLDEwNywxMTUsMzIsOTcsMTEwLAotICAgIDEwMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwxMTUsMTIxLDExNSw0NiwxMTIsOTcsCi0gICAgMTE2LDEwNCw5NSwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDk1LDk5LDk3LDk5LDEwNCwKLSAgICAxMDEsNDYsNzgsNDAsNSwwLDAsMCwxMTcsNCwwLDAsMCw3OCwxMTEsMTEwLAotICAgIDEwMSwxMTcsMywwLDAsMCwxMTUsMTIxLDExNSwxMTcsNCwwLDAsMCwxMTIsOTcsCi0gICAgMTE2LDEwNCwxMTcsMTEsMCwwLDAsOTUsMTAzLDEwMSwxMTYsOTUsMTA4LDExMSw5NywxMDAsCi0gICAgMTAxLDExNCwxMTcsMTUsMCwwLDAsNzgsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSwKLSAgICA3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDAsNSwwLDAsMCwxMTcsMywwLDAsMCwKLSAgICA5OSwxMDgsMTE1LDExNyw4LDAsMCwwLDEwMiwxMTcsMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSwKLSAgICAxMTcsNCwwLDAsMCwxMTIsOTcsMTE2LDEwNCwxMTcsNiwwLDAsMCwxMDgsMTExLAotICAgIDk3LDEwMCwxMDEsMTE0LDExNywxNCwwLDAsMCwxMTAsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LAotICAgIDk5LDEwMSw5NSwxMTIsOTcsMTE2LDEwNCw0MCwwLDAsMCwwLDQwLDAsMCwwLAotICAgIDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksCi0gICAgMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsCi0gICAgOTcsMTEyLDYyLDExNywxMSwwLDAsMCwxMDIsMTA1LDExMCwxMDAsOTUsMTA5LDExMSwxMDAsCi0gICAgMTE3LDEwOCwxMDEsMjMsNSwwLDAsMTE1LDE2LDAsMCwwLDAsNCwxMiwxLAotICAgIDEyLDEsMjQsMSwxMiwxLDQsMiw2LDMsMTksMiwxMTcsMjIsMCwwLAotICAgIDAsODAsOTcsMTE2LDEwNCw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDEwMiwxMDUsMTEwLDEwMCwKLSAgICA5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw3OCw0MCwxMSwwLDAsMCwxMTcsOCwwLAotICAgIDAsMCw5NSw5NSwxMTAsOTcsMTA5LDEwMSw5NSw5NSwxMTcsMTAsMCwwLDAsOTUsCi0gICAgOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsOTUsMTE3LDEyLDAsMCwwLDk1LDk1LAotICAgIDExMywxMTcsOTcsMTA4LDExMCw5NywxMDksMTAxLDk1LDk1LDExNyw3LDAsMCwwLDk1LAotICAgIDk1LDEwMCwxMTEsOTksOTUsOTUsMTE3LDExLDAsMCwwLDk5LDEwOCw5NywxMTUsMTE1LAotICAgIDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDExNywxNywwLDAsMCwxMDUsMTEwLDExOCw5NywxMDgsCi0gICAgMTA1LDEwMCw5NywxMTYsMTAxLDk1LDk5LDk3LDk5LDEwNCwxMDEsMTE1LDExNywxMSwwLDAsCi0gICAgMCw5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMDQsMTExLDExMSwxMDcsMTE1LDExNywyMCwwLDAsCi0gICAgMCw5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDk1LAotICAgIDk5LDk3LDk5LDEwNCwxMDEsMTE3LDExLDAsMCwwLDk1LDEwMywxMDEsMTE2LDk1LDEwOCwKLSAgICAxMTEsOTcsMTAwLDEwMSwxMTQsMTE3LDQsMCwwLDAsNzgsMTExLDExMCwxMDEsMTE3LDExLAotICAgIDAsMCwwLDEwMiwxMDUsMTEwLDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0MCwxLAotICAgIDAsMCwwLDExNywxMCwwLDAsMCw5NSw5NSwxMDgsMTExLDk5LDk3LDEwOCwxMTUsCi0gICAgOTUsOTUsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsCi0gICAgMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsCi0gICAgMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTAsCi0gICAgMCwwLDAsODAsOTcsMTE2LDEwNCw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDIwNiw0LDAsCi0gICAgMCwxMTUsMTQsMCwwLDAsMTYsMiw2LDIsMTgsOCwxOCwxNywxOCwxNywKLSAgICAxOCwyNywzLDEsMTE3LDEwLDAsMCwwLDgwLDk3LDExNiwxMDQsNzAsMTA1LDExMCwKLSAgICAxMDAsMTAxLDExNCw5OSwxLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwKLSAgICAzLDAsMCwwLDY2LDAsMCwwLDExNSwxMTAsMCwwLDAsMTI0LDAsMCwKLSAgICA2OSwxMDEsMCwwLDkwLDEsMCwxMDAsMCwwLDkwLDIsMCwxMDAsMSwwLAotICAgIDkwLDMsMCwxMDAsMiwwLDEwMCwzLDAsMTMyLDAsMCw5MCw0LDAsMTAwLAotICAgIDQsMCwxMDAsNSwwLDEzMiwwLDAsOTAsNSwwLDEwMSw2LDAsOTAsNywKLSAgICAwLDEwMCw2LDAsMTAwLDcsMCwxMzIsMCwwLDkwLDgsMCwxMDAsOCwwLAotICAgIDEwMCw5LDAsMTMyLDAsMCw5MCw5LDAsMTAxLDEwLDAsMTAwLDEwLDAsMTAwLAotICAgIDExLDAsMTMyLDAsMCwxMzEsMSwwLDkwLDExLDAsMTAwLDEyLDAsMTAwLDEzLAotICAgIDAsMTMyLDAsMCw5MCwxMiwwLDEwMCwxNCwwLDgzLDQwLDE1LDAsMCwwLAotICAgIDExNywxMCwwLDAsMCw3MCwxMDUsMTA4LDEwMSw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDExNywKLSAgICAxNzIsMCwwLDAsNzAsMTA1LDEwOCwxMDEsNDUsOTgsOTcsMTE1LDEwMSwxMDAsMzIsMTAyLAotICAgIDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsMTAsMTAsMzIsMzIsMzIsMzIsNzMsMTEwLDExNiwxMDEsCi0gICAgMTE0LDk3LDk5LDExNiwxMDUsMTExLDExMCwxMTUsMzIsMTE5LDEwNSwxMTYsMTA0LDMyLDExNiwxMDQsCi0gICAgMTAxLDMyLDEwMiwxMDUsMTA4LDEwMSwzMiwxMTUsMTIxLDExNSwxMTYsMTAxLDEwOSwzMiw5NywxMTQsCi0gICAgMTAxLDMyLDk5LDk3LDk5LDEwNCwxMDEsMTAwLDMyLDEwMiwxMTEsMTE0LDMyLDExMiwxMDEsMTE0LAotICAgIDEwMiwxMTEsMTE0LDEwOSw5NywxMTAsOTksMTAxLDQ0LDMyLDk4LDEwMSwxMDUsMTEwLDEwMywxMCwKLSAgICAzMiwzMiwzMiwzMiwxMTQsMTAxLDEwMiwxMTQsMTAxLDExNSwxMDQsMTAxLDEwMCwzMiwxMTksMTA0LAotICAgIDEwMSwxMTAsMzIsMTE2LDEwNCwxMDEsMzIsMTAwLDEwNSwxMTQsMTAxLDk5LDExNiwxMTEsMTE0LDEyMSwKLSAgICAzMiwxMTYsMTA0LDEwMSwzMiwxMDIsMTA1LDExMCwxMDAsMTAxLDExNCwzMiwxMDUsMTE1LDMyLDEwNCwKLSAgICA5NywxMTAsMTAwLDEwOCwxMDUsMTEwLDEwMywzMiwxMDQsOTcsMTE1LDMyLDk4LDEwMSwxMDEsMTEwLAotICAgIDMyLDEwOSwxMTEsMTAwLDEwNSwxMDIsMTA1LDEwMSwxMDAsNDYsMTAsMTAsMzIsMzIsMzIsMzIsCi0gICAgOTksMiwwLDAsMCwwLDAsMCwwLDUsMCwwLDAsNSwwLDAsCi0gICAgMCw3LDAsMCwwLDExNSwxMjIsMCwwLDAsMTAzLDAsMCwxMjUsMywwLAotICAgIDEyMCw1MiwwLDEyNCwyLDAsNjgsOTMsNDQsMCw5MiwyLDAsMTM3LDAsMCwKLSAgICAxMjUsNCwwLDEyNCwzLDAsMTA2LDAsMCwxMzUsMCwwLDEwMiwxLDAsMTAwLAotICAgIDEsMCwxMDAsMiwwLDEzNCwwLDAsMTI0LDQsMCw2OCwxMzEsMSwwLDEzMSwKLSAgICAxLDAsMSwxMTMsMTMsMCw4NywxMjQsMywwLDEyNCwwLDAsOTUsMSwwLAotICAgIDEyNCwxLDAsMTEyLDc5LDAsMTAwLDMsMCwxMjQsMCwwLDk1LDIsMCwxMDAsCi0gICAgNiwwLDEyNCwwLDAsOTUsMywwLDExNiw0LDAsMTMxLDAsMCwxMjQsMCwKLSAgICAwLDk1LDUsMCwxMTYsNCwwLDEzMSwwLDAsMTI0LDAsMCw5NSw2LDAsCi0gICAgMTAwLDUsMCw4Myw0MCw3LDAsMCwwLDExNywxNTQsMCwwLDAsNzMsMTEwLAotICAgIDEwNSwxMTYsMTA1LDk3LDEwOCwxMDUsMTIyLDEwMSwzMiwxMTksMTA1LDExNiwxMDQsMzIsMTE2LDEwNCwKLSAgICAxMDEsMzIsMTEyLDk3LDExNiwxMDQsMzIsMTE2LDExMSwzMiwxMTUsMTAxLDk3LDExNCw5OSwxMDQsCi0gICAgMzIsMTExLDExMCwzMiw5NywxMTAsMTAwLDMyLDk3LDMyLDExOCw5NywxMTQsMTA1LDk3LDk4LAotICAgIDEwOCwxMDEsMzIsMTEwLDExNywxMDksOTgsMTAxLDExNCwzMiwxMTEsMTAyLDEwLDMyLDMyLDMyLAotICAgIDMyLDMyLDMyLDMyLDMyLDUwLDQ1LDExNiwxMTcsMTEyLDEwOCwxMDEsMTE1LDMyLDk5LDExMSwKLSAgICAxMTAsMTE2LDk3LDEwNSwxMTAsMTA1LDExMCwxMDMsMzIsMTE2LDEwNCwxMDEsMzIsMTA4LDExMSw5NywKLSAgICAxMDAsMTAxLDExNCwzMiw5NywxMTAsMTAwLDMyLDExNiwxMDQsMTAxLDMyLDEwMiwxMDUsMTA4LDEwMSwKLSAgICAzMiwxMTUsMTE3LDEwMiwxMDIsMTA1LDEyMCwxMDEsMTE1LDMyLDExNiwxMDQsMTAxLDMyLDEwOCwxMTEsCi0gICAgOTcsMTAwLDEwMSwxMTQsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTE0LDEwMSw5OSwKLSAgICAxMTEsMTAzLDExMCwxMDUsMTIyLDEwMSwxMTUsNDYsOTksMSwwLDAsMCwwLDAsMCwKLSAgICAwLDIsMCwwLDAsMywwLDAsMCw1MSwwLDAsMCwxMTUsMjcsMCwKLSAgICAwLDAsMTI0LDAsMCw5MywxNywwLDEyNSwxLDAsMTI0LDEsMCwxMzYsMCwKLSAgICAwLDEwMiwyLDAsODYsMSwxMTMsMywwLDEwMCwwLDAsODMsNDAsMSwwLAotICAgIDAsMCw3OCw0MCwwLDAsMCwwLDQwLDIsMCwwLDAsMTE3LDIsMCwKLSAgICAwLDAsNDYsNDgsMTE3LDYsMCwwLDAsMTE1LDExNywxMDIsMTAyLDEwNSwxMjAsNDAsCi0gICAgMSwwLDAsMCwxMTcsNiwwLDAsMCwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDQwLAotICAgIDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLAotICAgIDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsCi0gICAgMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNyw5LDAsMCwwLDYwLDEwMywxMDEsMTEwLDEwMSwKLSAgICAxMjAsMTEyLDExNCw2Miw1Niw1LDAsMCwxMTUsMiwwLDAsMCw2LDAsMTE3LAotICAgIDM4LDAsMCwwLDcwLDEwNSwxMDgsMTAxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsOTUsCi0gICAgOTUsMTA1LDExMCwxMDUsMTE2LDk1LDk1LDQ2LDYwLDEwOCwxMTEsOTksOTcsMTA4LDExNSw2MiwKLSAgICA0Niw2MCwxMDMsMTAxLDExMCwxMDEsMTIwLDExMiwxMTQsNjIsMTE3LDEsMCwwLDAsNDYsCi0gICAgMTA1LDEsMCwwLDAsNzgsMTA1LDI1NSwyNTUsMjU1LDI1NSw0MCw3LDAsMCwwLAotICAgIDExNyw2LDAsMCwwLDEwMSwxMjAsMTE2LDEwMSwxMTAsMTAwLDExNyw4LDAsMCwwLAotICAgIDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMTE1LDExNyw0LDAsMCwwLDExMiw5NywxMTYsCi0gICAgMTA0LDExNywxMSwwLDAsMCw5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMDksMTE2LDEwNSwxMDksCi0gICAgMTAxLDExNywzLDAsMCwwLDExNSwxMDEsMTE2LDExNywxMSwwLDAsMCw5NSwxMTIsCi0gICAgOTcsMTE2LDEwNCw5NSw5OSw5Nyw5OSwxMDQsMTAxLDExNywxOSwwLDAsMCw5NSwxMTQsCi0gICAgMTAxLDEwOCw5NywxMjAsMTAxLDEwMCw5NSwxMTIsOTcsMTE2LDEwNCw5NSw5OSw5Nyw5OSwxMDQsCi0gICAgMTAxLDQwLDUsMCwwLDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDExNywKLSAgICA0LDAsMCwwLDExMiw5NywxMTYsMTA0LDExNywxNCwwLDAsMCwxMDgsMTExLDk3LAotICAgIDEwMCwxMDEsMTE0LDk1LDEwMCwxMDEsMTE2LDk3LDEwNSwxMDgsMTE1LDExNyw3LDAsMCwwLAotICAgIDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMTE1LDExNyw4LDAsMCwwLDExNSwxMTcsMTAyLDEwMiwKLSAgICAxMDUsMTIwLDEwMSwxMTUsNDAsMCwwLDAsMCw0MCwxLDAsMCwwLDExNyw2LAotICAgIDAsMCwwLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMTE3LDI5LDAsMCwwLDYwLDEwMiwKLSAgICAxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsCi0gICAgOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNyw4LDAsMCwwLAotICAgIDk1LDk1LDEwNSwxMTAsMTA1LDExNiw5NSw5NSw1MCw1LDAsMCwxMTUsMTYsMCwwLAotICAgIDAsMCw0LDYsMSwxOSwxLDM2LDEsOSwyLDE1LDEsOSwxLDEyLAotICAgIDEsMTE3LDE5LDAsMCwwLDcwLDEwNSwxMDgsMTAxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsCi0gICAgNDYsOTUsOTUsMTA1LDExMCwxMDUsMTE2LDk1LDk1LDk5LDEsMCwwLDAsMCwwLAotICAgIDAsMCwxLDAsMCwwLDIsMCwwLDAsNjcsMCwwLDAsMTE1LDEzLAotICAgIDAsMCwwLDEwMCwzLDAsMTI0LDAsMCw5NSwwLDAsMTAwLDIsMCw4MywKLSAgICA0MCw0LDAsMCwwLDExNywzMSwwLDAsMCw3MywxMTAsMTE4LDk3LDEwOCwxMDUsCi0gICAgMTAwLDk3LDExNiwxMDEsMzIsMTE2LDEwNCwxMDEsMzIsMTAwLDEwNSwxMTQsMTAxLDk5LDExNiwxMTEsCi0gICAgMTE0LDEyMSwzMiwxMDksMTE2LDEwNSwxMDksMTAxLDQ2LDEwNSwxLDAsMCwwLDc4LDEwNSwKLSAgICAyNTUsMjU1LDI1NSwyNTUsNDAsMSwwLDAsMCwxMTcsMTEsMCwwLDAsOTUsMTEyLAotICAgIDk3LDExNiwxMDQsOTUsMTA5LDExNiwxMDUsMTA5LDEwMSw0MCwxLDAsMCwwLDExNyw0LAotICAgIDAsMCwwLDExNSwxMDEsMTA4LDEwMiw0MCwwLDAsMCwwLDQwLDAsMCwwLAotICAgIDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksCi0gICAgMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsCi0gICAgOTcsMTEyLDYyLDExNywxNywwLDAsMCwxMDUsMTEwLDExOCw5NywxMDgsMTA1LDEwMCw5NywKLSAgICAxMTYsMTAxLDk1LDk5LDk3LDk5LDEwNCwxMDEsMTE1LDY0LDUsMCwwLDExNSwyLDAsCi0gICAgMCwwLDAsMiwxMTcsMjgsMCwwLDAsNzAsMTA1LDEwOCwxMDEsNzAsMTA1LDExMCwKLSAgICAxMDAsMTAxLDExNCw0NiwxMDUsMTEwLDExOCw5NywxMDgsMTA1LDEwMCw5NywxMTYsMTAxLDk1LDk5LAotICAgIDk3LDk5LDEwNCwxMDEsMTE1LDk5LDIsMCwwLDAsMCwwLDAsMCwxMiwwLAotICAgIDAsMCwxMywwLDAsMCw2NywwLDAsMCwxMTUsMjE2LDEsMCwwLDEwMCwKLSAgICA4LDAsMTI1LDIsMCwxMjQsMSwwLDEwNiwxLDAsMTAwLDEsMCwxMzEsMSwKLSAgICAwLDEwMCwyLDAsMjUsMTI1LDMsMCwxMjEsMjUsMCwxMTYsMiwwLDEwNiwzLAotICAgIDAsMTI0LDAsMCwxMDYsNCwwLDEzMSwxLDAsMTA2LDUsMCwxMjUsNCwwLAotICAgIDg3LDExMCwyNCwwLDQsMTE2LDYsMCwxMDcsMTAsMCwxMTQsNzYsMCwxLDEsCi0gICAgMSwxMDAsOSwwLDEyNSw0LDAsODksMTEwLDEsMCw4OCwxMjQsNCwwLDEyNCwKLSAgICAwLDAsMTA2LDcsMCwxMDcsMywwLDExNCwxMTQsMCwxMjQsMCwwLDEwNiw4LAotICAgIDAsMTMxLDAsMCwxLDEyNCw0LDAsMTI0LDAsMCw5NSw3LDAsMTEwLDAsCi0gICAgMCwxMTYsOSwwLDEzMSwwLDAsMTE0LDE0NywwLDEyNCwwLDAsMTA2LDEwLDAsCi0gICAgMTI1LDUsMCwxMjQsMywwLDEwNiwxMSwwLDEzMSwwLDAsMTI1LDYsMCwxMTAsCi0gICAgMTUsMCwxMjQsMCwwLDEwNiwxMiwwLDEyNSw1LDAsMTI0LDMsMCwxMjUsNiwKLSAgICAwLDEyNCw2LDAsMTI0LDUsMCwxMDcsNiwwLDExNCw0NSwxLDExNiwxMywwLAotICAgIDEyNCwwLDAsMTA2LDQsMCwxMjQsMywwLDEzMSwyLDAsMTI1LDcsMCwxMTYsCi0gICAgMTQsMCwxMjQsNywwLDEzMSwxLDAsMTE0LDQ1LDEsMTIwLDkxLDAsMTI0LDAsCi0gICAgMCwxMDYsMTUsMCw2OCw5Myw3MSwwLDkyLDIsMCwxMjUsOCwwLDEyNSw5LAotICAgIDAsMTAwLDQsMCwxMjQsOCwwLDIzLDEyNSwxMCwwLDExNiwxMywwLDEyNCw3LAotICAgIDAsMTI0LDEwLDAsMTMxLDIsMCwxMjUsMTEsMCwxMTYsMTYsMCwxMjQsMTEsMCwKLSAgICAxMzEsMSwwLDExNCwyMTQsMCwxMjQsOSwwLDEyNCwxLDAsMTI0LDExLDAsMTMxLAotICAgIDIsMCwxMjQsNywwLDEwMywxLDAsMTAyLDIsMCw4MywxMTMsMjE0LDAsODcsCi0gICAgMTAwLDEwLDAsMTI1LDIsMCwxMTMsNDUsMSwxMTAsMCwwLDEyMCwxMjAsMCwxMjQsCi0gICAgMCwwLDEwNiwxNSwwLDY4LDkzLDEwOSwwLDkyLDIsMCwxMjUsOCwwLDEyNSwKLSAgICA5LDAsMTE2LDEzLDAsMTI0LDAsMCwxMDYsNCwwLDEyNCwzLDAsMTI0LDgsCi0gICAgMCwyMywxMzEsMiwwLDEyNSwxMSwwLDExNiwxOCwwLDEwMCw1LDAsMTA2LDE5LAotICAgIDAsMTI0LDExLDAsMTMxLDEsMCwxMDAsNiwwLDEwMCwyLDAsMTMxLDEsMSwKLSAgICAxLDEyNCw2LDAsMTI0LDgsMCwyMywxMjQsNSwwLDEwNyw2LDAsMTE0LDU1LAotICAgIDEsMTE2LDE2LDAsMTI0LDExLDAsMTMxLDEsMCwxMTQsMTY0LDEsMTI0LDksMCwKLSAgICAxMjQsMSwwLDEyNCwxMSwwLDEzMSwyLDAsMTAzLDAsMCwxMDIsMiwwLDgzLAotICAgIDExMyw1NSwxLDExMyw1NSwxLDg3LDEyNCwyLDAsMTE0LDIwNiwxLDExNiwxOCwwLAotICAgIDEwMCw3LDAsMTA2LDE5LDAsMTI0LDcsMCwxMzEsMSwwLDEzMSwxLDAsMSwKLSAgICAxMDAsMTEsMCwxMjQsNywwLDEwMywxLDAsMTAyLDIsMCw4MywxMDAsMTEsMCwKLSAgICAxMDMsMCwwLDEwMiwyLDAsODMsNDAsMTIsMCwwLDAsMTE3LDEyNSwwLDAsCi0gICAgMCw4NCwxMTQsMTIxLDMyLDExNiwxMTEsMzIsMTAyLDEwNSwxMTAsMTAwLDMyLDk3LDMyLDEwOCwKLSAgICAxMTEsOTcsMTAwLDEwMSwxMTQsMzIsMTAyLDExMSwxMTQsMzIsMTE2LDEwNCwxMDEsMzIsMTE1LDExMiwKLSAgICAxMDEsOTksMTA1LDEwMiwxMDUsMTAxLDEwMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0NCwzMiwKLSAgICAxMTEsMTE0LDMyLDExNiwxMDQsMTAxLDMyLDExMCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLAotICAgIDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwKLSAgICAzMiwxMTIsMTExLDExNCwxMTYsMTA1LDExMSwxMTAsMTE1LDQ2LDMyLDgyLDEwMSwxMTYsMTE3LDExNCwKLSAgICAxMTAsMTE1LDMyLDQwLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsNDQsMzIsMTA4LDEwNSwxMTUsMTE2LAotICAgIDQ1LDExMSwxMDIsNDUsMTEyLDExMSwxMTQsMTE2LDEwNSwxMTEsMTEwLDExNSw0MSw0NiwxMTcsMSwKLSAgICAwLDAsMCw0NiwxMDUsMiwwLDAsMCwxMDUsMSwwLDAsMCwxMTcsOCwKLSAgICAwLDAsMCw5NSw5NSwxMDUsMTEwLDEwNSwxMTYsOTUsOTUsMTE3LDksMCwwLDAsCi0gICAgMTE2LDExNCwxMjEsMTA1LDExMCwxMDMsMzIsMTIzLDEyNSwxMTcsOSwwLDAsMCwxMTgsMTAxLAotICAgIDExNCw5OCwxMTEsMTE1LDEwNSwxMTYsMTIxLDExNywyNSwwLDAsMCwxMTIsMTExLDExNSwxMTUsCi0gICAgMTA1LDk4LDEwOCwxMDEsMzIsMTEwLDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsMzIsMTAyLAotICAgIDExMSwxMTQsMzIsMTIzLDEyNSw3MCwxMDUsMjU1LDI1NSwyNTUsMjU1LDg0LDc4LDQwLDIxLDAsCi0gICAgMCwwLDExNyw1LDAsMCwwLDcwLDk3LDEwOCwxMTUsMTAxLDExNywxMCwwLDAsCi0gICAgMCwxMTQsMTEyLDk3LDExNCwxMTYsMTA1LDExNiwxMDUsMTExLDExMCwxMTcsMywwLDAsMCwKLSAgICA5NSwxMTEsMTE1LDExNyw0LDAsMCwwLDExNSwxMTYsOTcsMTE2LDExNyw0LDAsMCwKLSAgICAwLDExMiw5NywxMTYsMTA0LDExNyw4LDAsMCwwLDExNSwxMTYsOTUsMTA5LDExNiwxMDUsCi0gICAgMTA5LDEwMSwxMTcsNywwLDAsMCw3OSw4Myw2OSwxMTQsMTE0LDExMSwxMTQsMTE3LDExLAotICAgIDAsMCwwLDk1LDExMiw5NywxMTYsMTA0LDk1LDEwOSwxMTYsMTA1LDEwOSwxMDEsMTE3LDExLAotICAgIDAsMCwwLDk1LDEwMiwxMDUsMTA4LDEwOCw5NSw5OSw5Nyw5OSwxMDQsMTAxLDExNywxMSwKLSAgICAwLDAsMCw5NSwxMTQsMTAxLDEwOCw5NywxMjAsOTUsOTksOTcsMTE1LDEwMSwxMTcsMTksCi0gICAgMCwwLDAsOTUsMTE0LDEwMSwxMDgsOTcsMTIwLDEwMSwxMDAsOTUsMTEyLDk3LDExNiwxMDQsCi0gICAgOTUsOTksOTcsOTksMTA0LDEwMSwxMTcsNSwwLDAsMCwxMDgsMTExLDExOSwxMDEsMTE0LAotICAgIDExNywxMSwwLDAsMCw5NSwxMTIsOTcsMTE2LDEwNCw5NSw5OSw5Nyw5OSwxMDQsMTAxLAotICAgIDExNywxMCwwLDAsMCw5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMDYsMTExLDEwNSwxMTAsMTE3LAotICAgIDExLDAsMCwwLDk1LDExMiw5NywxMTYsMTA0LDk1LDEwNSwxMTUsMTAwLDEwNSwxMTQsMTE3LAotICAgIDgsMCwwLDAsOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCwxMTUsMTE3LDEyLDAsMCwKLSAgICAwLDk1LDExMiw5NywxMTYsMTA0LDk1LDEwNSwxMTUsMTAyLDEwNSwxMDgsMTAxLDExNyw0LDAsCi0gICAgMCwwLDg0LDExNCwxMTcsMTAxLDExNywxNiwwLDAsMCw5NSwxMTgsMTAxLDExNCw5OCwKLSAgICAxMTEsMTE1LDEwMSw5NSwxMDksMTAxLDExNSwxMTUsOTcsMTAzLDEwMSwxMTcsNiwwLDAsMCwKLSAgICAxMDIsMTExLDExNCwxMDksOTcsMTE2LDExNyw0LDAsMCwwLDc4LDExMSwxMTAsMTAxLDQwLAotICAgIDEyLDAsMCwwLDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LDEwMiwxMTcsOCwwLAotICAgIDAsMCwxMDIsMTE3LDEwOCwxMDgsMTEwLDk3LDEwOSwxMDEsMTE3LDEyLDAsMCwwLDEwNSwKLSAgICAxMTUsOTUsMTEwLDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsMTE3LDExLDAsMCwwLAotICAgIDExNiw5NywxMDUsMTA4LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNyw1LDAsMCwwLAotICAgIDEwOSwxMTYsMTA1LDEwOSwxMDEsMTE3LDUsMCwwLDAsOTksOTcsOTksMTA0LDEwMSwxMTcsCi0gICAgMTIsMCwwLDAsOTksOTcsOTksMTA0LDEwMSw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwKLSAgICAxMTcsOSwwLDAsMCw5OCw5NywxMTUsMTAxLDk1LDExMiw5NywxMTYsMTA0LDExNyw2LAotICAgIDAsMCwwLDExNSwxMTcsMTAyLDEwMiwxMDUsMTIwLDExNyw2LDAsMCwwLDEwOCwxMTEsCi0gICAgOTcsMTAwLDEwMSwxMTQsMTE3LDEzLDAsMCwwLDEwNSwxMTAsMTA1LDExNiw5NSwxMDIsMTA1LAotICAgIDEwOCwxMDEsMTEwLDk3LDEwOSwxMDEsMTE3LDksMCwwLDAsMTAyLDExNywxMDgsMTA4LDk1LAotICAgIDExMiw5NywxMTYsMTA0LDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksCi0gICAgMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwKLSAgICAxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsCi0gICAgMTE3LDExLDAsMCwwLDEwMiwxMDUsMTEwLDEwMCw5NSwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LAotICAgIDcwLDUsMCwwLDExNSw2NiwwLDAsMCwwLDMsNiwxLDE5LDEsMywKLSAgICAxLDI1LDEsMTMsMSwxMSwxLDE1LDEsMTAsMSwxMiwyLDksMSw5LAotICAgIDEsMTUsMiw5LDEsNiwyLDEyLDEsMTgsMSwxMiwxLDIyLDEsMTAsCi0gICAgMSwxNSwxLDEyLDEsMjYsNCwxMiwyLDIyLDEsMjIsMSwyNSwxLDE2LAotICAgIDEsMTIsMSwyNiwxLDYsMSwxOSwxLDEzLDEsMTE3LDIyLDAsMCwwLAotICAgIDcwLDEwNSwxMDgsMTAxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsMTAyLDEwNSwxMTAsMTAwLDk1LAotICAgIDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsOTksMSwwLDAsMCwwLDAsMCwwLDksCi0gICAgMCwwLDAsMTMsMCwwLDAsNjcsMCwwLDAsMTE1LDgsMSwwLDAsCi0gICAgMTI0LDAsMCwxMDYsMCwwLDEyNSwxLDAsMTIxLDE5LDAsMTE2LDEsMCwxMDYsCi0gICAgMiwwLDEyNCwxLDAsMTMxLDEsMCwxMjUsMiwwLDg3LDExMCwzMywwLDQsCi0gICAgMTE2LDMsMCwxMTYsNCwwLDExNiw1LDAsMTAyLDMsMCwxMDcsMTAsMCwxMTQsCi0gICAgNjMsMCwxLDEsMSwxMDMsMCwwLDEyNSwyLDAsODksMTEwLDEsMCw4OCwKLSAgICAxMTYsNiwwLDEwNiw3LDAsMTA2LDgsMCwxMDAsMSwwLDEzMSwxLDAsMTE1LAotICAgIDEwMCwwLDExNiw5LDAsMTI0LDIsMCwxMzEsMSwwLDEyNCwwLDAsOTUsMTAsCi0gICAgMCwxMTAsMTExLDAsMTE2LDksMCwxMzEsMCwwLDEyNSwzLDAsMTIwLDkwLDAsCi0gICAgMTI0LDIsMCw2OCw5Myw4MiwwLDEyNSw0LDAsMTI0LDQsMCwxMDYsMTEsMCwKLSAgICAxMDAsMiwwLDEzMSwxLDAsOTIsMywwLDEyNSw1LDAsMTI1LDYsMCwxMjUsCi0gICAgNywwLDEyNCw2LDAsMTE0LDE3OSwwLDEwMCwzLDAsMTA2LDEyLDAsMTI0LDUsCi0gICAgMCwxMjQsNywwLDEwNiwxMywwLDEzMSwwLDAsMTMxLDIsMCwxMjUsOCwwLAotICAgIDExMCw2LDAsMTI0LDUsMCwxMjUsOCwwLDEyNCwzLDAsMTA2LDE0LDAsMTI0LAotICAgIDgsMCwxMzEsMSwwLDEsMTEzLDExNiwwLDg3LDEyNCwzLDAsMTI0LDAsMCwKLSAgICA5NSwxMCwwLDExNiw2LDAsMTA2LDcsMCwxMDYsOCwwLDExNiwxNSwwLDEzMSwKLSAgICAxLDAsMTE0LDQsMSwxMTYsOSwwLDEwMCw0LDAsMTAwLDUsMCwxMzIsMCwKLSAgICAwLDEyNCwyLDAsNjgsMTMxLDEsMCwxMzEsMSwwLDEyNCwwLDAsOTUsMTYsCi0gICAgMCwxMTAsMCwwLDEwMCw2LDAsODMsNDAsNywwLDAsMCwxMTcsNjgsMCwKLSAgICAwLDAsNzAsMTA1LDEwOCwxMDgsMzIsMTE2LDEwNCwxMDEsMzIsOTksOTcsOTksMTA0LDEwMSwKLSAgICAzMiwxMTEsMTAyLDMyLDExMiwxMTEsMTE2LDEwMSwxMTAsMTE2LDEwNSw5NywxMDgsMzIsMTA5LDExMSwKLSAgICAxMDAsMTE3LDEwOCwxMDEsMTE1LDMyLDk3LDExMCwxMDAsMzIsMTEyLDk3LDk5LDEwNyw5NywxMDMsCi0gICAgMTAxLDExNSwzMiwxMDIsMTExLDExNCwzMiwxMTYsMTA0LDEwNSwxMTUsMzIsMTAwLDEwNSwxMTQsMTAxLAotICAgIDk5LDExNiwxMTEsMTE0LDEyMSw0NiwxMTcsMywwLDAsMCwxMTksMTA1LDExMCwxMTcsMSwKLSAgICAwLDAsMCw0NiwxMTcsNSwwLDAsMCwxMjMsMTI1LDQ2LDEyMywxMjUsOTksMSwKLSAgICAwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMiwwLDAsMCwxMTUsCi0gICAgMCwwLDAsMTE1LDI3LDAsMCwwLDEyNCwwLDAsOTMsMTcsMCwxMjUsMSwKLSAgICAwLDEyNCwxLDAsMTA2LDAsMCwxMzEsMCwwLDg2LDEsMTEzLDMsMCwxMDAsCi0gICAgMCwwLDgzLDQwLDEsMCwwLDAsNzgsNDAsMSwwLDAsMCwxMTcsNSwKLSAgICAwLDAsMCwxMDgsMTExLDExOSwxMDEsMTE0LDQwLDIsMCwwLDAsMTE3LDIsMCwKLSAgICAwLDAsNDYsNDgsMTE3LDIsMCwwLDAsMTAyLDExMCw0MCwwLDAsMCwwLAotICAgIDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsCi0gICAgMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwKLSAgICAxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNyw5LDAsMCwwLDYwLDEwMywxMDEsMTEwLAotICAgIDEwMSwxMjAsMTEyLDExNCw2MiwxNDMsNSwwLDAsMTE1LDIsMCwwLDAsNiwwLAotICAgIDExNyw0MSwwLDAsMCw3MCwxMDUsMTA4LDEwMSw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LAotICAgIDk1LDEwMiwxMDUsMTA4LDEwOCw5NSw5OSw5Nyw5OSwxMDQsMTAxLDQ2LDYwLDEwOCwxMTEsOTksCi0gICAgOTcsMTA4LDExNSw2Miw0Niw2MCwxMDMsMTAxLDExMCwxMDEsMTIwLDExMiwxMTQsNjIsNzgsNDAsCi0gICAgMTcsMCwwLDAsMTE3LDQsMCwwLDAsMTEyLDk3LDExNiwxMDQsMTE3LDMsMCwKLSAgICAwLDAsOTUsMTExLDExNSwxMTcsNywwLDAsMCwxMDgsMTA1LDExNSwxMTYsMTAwLDEwNSwKLSAgICAxMTQsMTE3LDE3LDAsMCwwLDcwLDEwNSwxMDgsMTAxLDc4LDExMSwxMTYsNzAsMTExLDExNywKLSAgICAxMTAsMTAwLDY5LDExNCwxMTQsMTExLDExNCwxMTcsMTUsMCwwLDAsODAsMTAxLDExNCwxMDksCi0gICAgMTA1LDExNSwxMTUsMTA1LDExMSwxMTAsNjksMTE0LDExNCwxMTEsMTE0LDExNywxOCwwLDAsMCwKLSAgICA3OCwxMTEsMTE2LDY1LDY4LDEwNSwxMTQsMTAxLDk5LDExNiwxMTEsMTE0LDEyMSw2OSwxMTQsMTE0LAotICAgIDExMSwxMTQsMTE3LDMsMCwwLDAsMTE1LDEyMSwxMTUsMTE3LDgsMCwwLDAsMTEyLAotICAgIDEwOCw5NywxMTYsMTAyLDExMSwxMTQsMTA5LDExNywxMCwwLDAsMCwxMTUsMTE2LDk3LDExNCwKLSAgICAxMTYsMTE1LDExOSwxMDUsMTE2LDEwNCwxMTcsMywwLDAsMCwxMTUsMTAxLDExNiwxMTcsMTEsCi0gICAgMCwwLDAsOTUsMTEyLDk3LDExNiwxMDQsOTUsOTksOTcsOTksMTA0LDEwMSwxMTcsOSwKLSAgICAwLDAsMCwxMTIsOTcsMTE0LDExNiwxMDUsMTE2LDEwNSwxMTEsMTEwLDExNyw2LDAsMCwKLSAgICAwLDEwMiwxMTEsMTE0LDEwOSw5NywxMTYsMTE3LDUsMCwwLDAsMTA4LDExMSwxMTksMTAxLAotICAgIDExNCwxMTcsMywwLDAsMCw5NywxMDAsMTAwLDExNywyNywwLDAsMCw5NSw2NywKLSAgICA2NSw4Myw2OSw5NSw3Myw3OCw4Myw2OSw3OCw4Myw3Myw4NCw3Myw4Niw2OSw5NSwKLSAgICA4MCw3Niw2NSw4NCw3MCw3OSw4Miw3Nyw4MywxMTcsMTksMCwwLDAsOTUsMTE0LAotICAgIDEwMSwxMDgsOTcsMTIwLDEwMSwxMDAsOTUsMTEyLDk3LDExNiwxMDQsOTUsOTksOTcsOTksMTA0LAotICAgIDEwMSw0MCw5LDAsMCwwLDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LDEwMiwxMTcsCi0gICAgNCwwLDAsMCwxMTIsOTcsMTE2LDEwNCwxMTcsOCwwLDAsMCw5OSwxMTEsMTEwLAotICAgIDExNiwxMDEsMTEwLDExNiwxMTUsMTE3LDIxLDAsMCwwLDEwOCwxMTEsMTE5LDEwMSwxMTQsOTUsCi0gICAgMTE1LDExNywxMDIsMTAyLDEwNSwxMjAsOTUsOTksMTExLDExMCwxMTYsMTAxLDExMCwxMTYsMTE1LDExNywKLSAgICA0LDAsMCwwLDEwNSwxMTYsMTAxLDEwOSwxMTcsNCwwLDAsMCwxMTAsOTcsMTA5LAotICAgIDEwMSwxMTcsMywwLDAsMCwxMDAsMTExLDExNiwxMTcsNiwwLDAsMCwxMTUsMTE3LAotICAgIDEwMiwxMDIsMTA1LDEyMCwxMTcsOCwwLDAsMCwxMTAsMTAxLDExOSw5NSwxMTAsOTcsMTA5LAotICAgIDEwMSw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLAotICAgIDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsCi0gICAgOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxMSwwLAotICAgIDAsMCw5NSwxMDIsMTA1LDEwOCwxMDgsOTUsOTksOTcsOTksMTA0LDEwMSwxMTQsNSwwLAotICAgIDAsMTE1LDM0LDAsMCwwLDAsMiw5LDEsMywxLDE5LDEsMjIsMywKLSAgICAxMSwzLDE4LDEsMTgsNyw5LDEsMTMsMSwyNCwxLDYsMSwyNywyLAotICAgIDYsMSwxNywxLDksMSwxOCwxLDExNywyMiwwLDAsMCw3MCwxMDUsMTA4LAotICAgIDEwMSw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDk1LDEwMiwxMDUsMTA4LDEwOCw5NSw5OSw5NywKLSAgICA5OSwxMDQsMTAxLDk5LDEsMCwwLDAsMCwwLDAsMCwzLDAsMCwwLAotICAgIDMsMCwwLDAsNywwLDAsMCwxMTUsMjUsMCwwLDAsMTM1LDAsMCwKLSAgICAxMzUsMSwwLDEwMiwyLDAsMTAwLDEsMCwxMDAsMiwwLDEzNCwwLDAsMTI1LAotICAgIDIsMCwxMjQsMiwwLDgzLDQwLDMsMCwwLDAsMTE3LDIwLDEsMCwwLAotICAgIDY1LDMyLDk5LDEwOCw5NywxMTUsMTE1LDMyLDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDMyLDExOSwKLSAgICAxMDQsMTA1LDk5LDEwNCwzMiwxMTQsMTAxLDExNiwxMTcsMTE0LDExMCwxMTUsMzIsOTcsMzIsOTksCi0gICAgMTA4LDExMSwxMTUsMTE3LDExNCwxMDEsMzIsMTE2LDExMSwzMiwxMTcsMTE1LDEwMSwzMiwxMTEsMTEwLAotICAgIDMyLDExNSwxMjEsMTE1LDQ2LDExMiw5NywxMTYsMTA0LDk1LDEwNCwxMTEsMTExLDEwNywxMCwzMiwKLSAgICAzMiwzMiwzMiwzMiwzMiwzMiwzMiwxMTksMTA0LDEwNSw5OSwxMDQsMzIsMTE5LDEwNSwxMDgsCi0gICAgMTA4LDMyLDExNCwxMDEsMTE2LDExNywxMTQsMTEwLDMyLDk3LDExMCwzMiwxMDUsMTEwLDExNSwxMTYsCi0gICAgOTcsMTEwLDk5LDEwMSwzMiwxMTcsMTE1LDEwNSwxMTAsMTAzLDMyLDExNiwxMDQsMTAxLDMyLDExNSwKLSAgICAxMTIsMTAxLDk5LDEwNSwxMDIsMTA1LDEwMSwxMDAsMzIsMTA4LDExMSw5NywxMDAsMTAxLDExNCwxMTUsCi0gICAgMzIsOTcsMTEwLDEwMCwzMiwxMTYsMTA0LDEwMSwzMiwxMTIsOTcsMTE2LDEwNCwxMCwzMiwzMiwKLSAgICAzMiwzMiwzMiwzMiwzMiwzMiw5OSw5NywxMDgsMTA4LDEwMSwxMDAsMzIsMTExLDExMCwzMiwKLSAgICAxMTYsMTA0LDEwMSwzMiw5OSwxMDgsMTExLDExNSwxMTcsMTE0LDEwMSw0NiwxMCwxMCwzMiwzMiwKLSAgICAzMiwzMiwzMiwzMiwzMiwzMiw3MywxMDIsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLDk3LDExNiwKLSAgICAxMDQsMzIsOTksOTcsMTA4LDEwOCwxMDEsMTAwLDMyLDExMSwxMTAsMzIsMTE2LDEwNCwxMDEsMzIsCi0gICAgOTksMTA4LDExMSwxMTUsMTE3LDExNCwxMDEsMzIsMTA1LDExNSwzMiwxMTAsMTExLDExNiwzMiw5NywKLSAgICAzMiwxMDAsMTA1LDExNCwxMDEsOTksMTE2LDExMSwxMTQsMTIxLDQ0LDMyLDczLDEwOSwxMTIsMTExLAotICAgIDExNCwxMTYsNjksMTE0LDExNCwxMTEsMTE0LDMyLDEwNSwxMTUsMTAsMzIsMzIsMzIsMzIsMzIsCi0gICAgMzIsMzIsMzIsMTE0LDk3LDEwNSwxMTUsMTAxLDEwMCw0NiwxMCwxMCwzMiwzMiwzMiwzMiwKLSAgICAzMiwzMiwzMiwzMiw5OSwxLDAsMCwwLDAsMCwwLDAsMSwwLDAsCi0gICAgMCw0LDAsMCwwLDE5LDAsMCwwLDExNSw0NiwwLDAsMCwxMTYsMCwKLSAgICAwLDEyNCwwLDAsMTMxLDEsMCwxMTUsMzMsMCwxMTYsMSwwLDEwMCwxLDAsCi0gICAgMTAwLDIsMCwxMjQsMCwwLDEzMSwxLDEsMTMwLDEsMCwxMTAsMCwwLDEzNiwKLSAgICAwLDAsMTI0LDAsMCwxMzYsMSwwLDE0MCwxLDAsODMsNDAsMywwLDAsCi0gICAgMCwxMTcsNDUsMCwwLDAsODAsOTcsMTE2LDEwNCwzMiwxMDQsMTExLDExMSwxMDcsMzIsCi0gICAgMTAyLDExMSwxMTQsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0NiwxMDksOTcsCi0gICAgOTksMTA0LDEwNSwxMTAsMTAxLDExNCwxMjEsNDYsNzAsMTA1LDEwOCwxMDEsNzAsMTA1LDExMCwxMDAsCi0gICAgMTAxLDExNCw0NiwxMTcsMzAsMCwwLDAsMTExLDExMCwxMDgsMTIxLDMyLDEwMCwxMDUsMTE0LAotICAgIDEwMSw5OSwxMTYsMTExLDExNCwxMDUsMTAxLDExNSwzMiw5NywxMTQsMTAxLDMyLDExNSwxMTcsMTEyLAotICAgIDExMiwxMTEsMTE0LDExNiwxMDEsMTAwLDExNyw0LDAsMCwwLDExMiw5NywxMTYsMTA0LDQwLAotICAgIDIsMCwwLDAsMTE3LDExLDAsMCwwLDk1LDExMiw5NywxMTYsMTA0LDk1LDEwNSwKLSAgICAxMTUsMTAwLDEwNSwxMTQsMTE3LDExLDAsMCwwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsNjksCi0gICAgMTE0LDExNCwxMTEsMTE0LDQwLDEsMCwwLDAsMTE3LDQsMCwwLDAsMTEyLDk3LAotICAgIDExNiwxMDQsNDAsMiwwLDAsMCwxMTcsMywwLDAsMCw5OSwxMDgsMTE1LDExNywKLSAgICAxNCwwLDAsMCwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDk1LDEwMCwxMDEsMTE2LDk3LDEwNSwKLSAgICAxMDgsMTE1LDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLAotICAgIDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsCi0gICAgMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywyNCwwLDAsMCwxMTIsOTcsCi0gICAgMTE2LDEwNCw5NSwxMDQsMTExLDExMSwxMDcsOTUsMTAyLDExMSwxMTQsOTUsNzAsMTA1LDEwOCwxMDEsCi0gICAgNzAsMTA1LDExMCwxMDAsMTAxLDExNCwxNTUsNSwwLDAsMTE1LDYsMCwwLDAsMCwKLSAgICAyLDEyLDEsMjEsMSwxMTcsNTQsMCwwLDAsNzAsMTA1LDEwOCwxMDEsNzAsMTA1LAotICAgIDExMCwxMDAsMTAxLDExNCw0NiwxMTIsOTcsMTE2LDEwNCw5NSwxMDQsMTExLDExMSwxMDcsNDYsNjAsCi0gICAgMTA4LDExMSw5OSw5NywxMDgsMTE1LDYyLDQ2LDExMiw5NywxMTYsMTA0LDk1LDEwNCwxMTEsMTExLAorICAgIDAsMCwwLDAsMCw2LDAsMCwwLDMsMCwwLDAsNjcsMCwwLAorICAgIDAsMTE1LDExMywwLDAsMCwxMTYsMCwwLDEyNCwyLDAsMTAwLDEsMCwxMzEsCisgICAgMiwwLDExNCwzOSwwLDEyNCwyLDAsMTA2LDEsMCwxMjQsMSwwLDEzMSwxLAorICAgIDAsOTIsMiwwLDEyNSwzLDAsMTI1LDQsMCwxMTAsMjEsMCwxMjQsMiwwLAorICAgIDEwNiwyLDAsMTI0LDEsMCwxMzEsMSwwLDEyNSwzLDAsMTAzLDAsMCwxMjUsCisgICAgNCwwLDEyNCwzLDAsMTAwLDAsMCwxMDcsOSwwLDExNCw4NSwwLDExNiwzLAorICAgIDAsMTI0LDEsMCwxMjQsMywwLDEzMSwyLDAsODMsMTE2LDQsMCwxMjQsMSwKKyAgICAwLDEwMCwwLDAsMTMxLDIsMCwxMjUsNSwwLDEyNCw0LDAsMTI0LDUsMCwKKyAgICA5NSw1LDAsMTI0LDUsMCw4Myw0MSwyLDc4LDExNCwxNjYsMCwwLDAsNDEsCisgICAgNiwxMTQsNjAsMCwwLDAsMTE0LDE2NiwwLDAsMCwxMTQsMTUsMSwwLDAsCisgICAgMTE0LDE3NCwwLDAsMCwxMTQsMjE3LDAsMCwwLDExNCwyMjEsMCwwLDAsNDEsCisgICAgNiwxMTQsMTIsMSwwLDAsMTE0LDE1OSwwLDAsMCwxMTQsNzgsMSwwLDAsCisgICAgMTE0LDE3MCwwLDAsMCwxMTQsMTcxLDAsMCwwLDExNCwxNzgsMCwwLDAsMTE0LAorICAgIDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDE2LAorICAgIDk1LDEwOCwxMDEsMTAzLDk3LDk5LDEyMSw5NSwxMDMsMTAxLDExNiw5NSwxMTUsMTEyLDEwMSw5OSwKKyAgICA5NSw3LDAsMCwxMTUsMTgsMCwwLDAsMCw0LDE1LDEsMjQsMiwxNSwKKyAgICAxLDYsMSwxMiwxLDEzLDEsMTUsMSw5LDEsMTIyLDI3LDgwLDk3LDExNiwKKyAgICAxMDQsNzAsMTA1LDExMCwxMDAsMTAxLDExNCw0Niw5NSwxMDgsMTAxLDEwMyw5Nyw5OSwxMjEsOTUsCisgICAgMTAzLDEwMSwxMTYsOTUsMTE1LDExMiwxMDEsOTksNzgsOTksNCwwLDAsMCwwLDAsCisgICAgMCwwLDksMCwwLDAsNSwwLDAsMCw2NywwLDAsMCwxMTUsMjUyLAorICAgIDAsMCwwLDEwMywwLDAsMTI1LDQsMCwxMjAsMjM5LDAsMTI0LDIsMCw2OCwKKyAgICA5MywyMDMsMCwxMjUsNSwwLDExNiwwLDAsMTI0LDUsMCwxMTYsMSwwLDExNiwKKyAgICAyLDAsMTAyLDIsMCwxMzEsMiwwLDExNSw0NiwwLDExMywxMywwLDExMCwwLAorICAgIDAsMTI0LDAsMCwxMDYsMywwLDEyNCw1LDAsMTMxLDEsMCwxMjUsNiwwLAorICAgIDEyNCw2LDAsMTAwLDEsMCwxMDcsOSwwLDExNCwxMywwLDExNiw0LDAsMTI0LAorICAgIDYsMCwxMDAsMiwwLDEzMSwyLDAsMTE0LDEwOSwwLDEyNCw2LDAsMTA2LDUsCisgICAgMCwxMjQsMSwwLDEyNCwzLDAsMTMxLDIsMCwxMjUsNywwLDExMCwxOCwwLAorICAgIDEyNCwwLDAsMTA2LDYsMCwxMjQsMSwwLDEyNCw2LDAsMTMxLDIsMCwxMjUsCisgICAgNywwLDEyNCw3LDAsMTAwLDEsMCwxMDcsOCwwLDExNCwxNDUsMCwxMTMsMTMsCisgICAgMCwxMTAsMCwwLDEyNCw3LDAsMTA2LDcsMCwxMDAsMSwwLDEwNyw5LDAsCisgICAgMTE0LDE2NCwwLDEyNCw3LDAsODMsMTI0LDcsMCwxMDYsOCwwLDEyNSw4LDAsCisgICAgMTI0LDgsMCwxMDAsMSwwLDEwNyw4LDAsMTE0LDIwMCwwLDExNiw5LDAsMTAwLAorICAgIDMsMCwxMzEsMSwwLDEzMCwxLDAsMTEwLDAsMCwxMjQsNCwwLDEwNiwxMCwKKyAgICAwLDEyNCw4LDAsMTMxLDEsMCwxLDExMywxMywwLDExMywxMywwLDg3LDExNiwKKyAgICAxMSwwLDEyNCwxLDAsMTAwLDEsMCwxMzEsMiwwLDEyNSw3LDAsMTI0LDQsCisgICAgMCwxMjQsNywwLDk1LDgsMCwxMjQsNywwLDgzLDEwMCwxLDAsODMsNDEsCisgICAgNCwxMjIsNjMsNzAsMTA1LDExMCwxMDAsMzIsMTE2LDEwNCwxMDEsMzIsMTA4LDExMSw5NywxMDAsCisgICAgMTAxLDExNCwzMiwxMTEsMTE0LDMyLDExMCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDk1LAorICAgIDExMiw5NywxMTYsMTA0LDMyLDEwMiwxMTEsMTE0LDMyLDExNiwxMDQsMTA1LDExNSwzMiwxMDksMTExLAorICAgIDEwMCwxMTcsMTA4LDEwMSw0NywxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsMzIsMTEwLDk3LDEwOSwKKyAgICAxMDEsNDYsNzgsMTE0LDE0LDEsMCwwLDEyMiwxOSwxMTUsMTEyLDEwMSw5OSwzMiwxMDksCisgICAgMTA1LDExNSwxMTUsMTA1LDExMCwxMDMsMzIsMTA4LDExMSw5NywxMDAsMTAxLDExNCw0MSwxMiwxMTQsCisgICAgMTkzLDAsMCwwLDIxOCwzLDExNSwxMTYsMTE0LDIxOCw1LDk4LDEyMSwxMTYsMTAxLDExNSwKKyAgICAxMTQsODEsMSwwLDAsMTE0LDYwLDAsMCwwLDExNCwxNCwxLDAsMCwxMTQsCisgICAgODIsMSwwLDAsMTE0LDE3MCwwLDAsMCwxMTQsMjIxLDAsMCwwLDExNCwxNTQsCisgICAgMCwwLDAsMTE0LDE5OCwwLDAsMCwxMTQsMjE3LDAsMCwwLDQxLDksMTE0LAorICAgIDEyLDEsMCwwLDExNCwxNTksMCwwLDAsMTE0LDM1LDAsMCwwLDExNCwxMywKKyAgICAxLDAsMCwyMTgsMTQsMTEwLDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsOTUsMTEyLAorICAgIDk3LDExNiwxMDQsOTAsNSwxMDEsMTEwLDExNiwxMTQsMTIxLDExNCw3OCwxLDAsMCwxMTQsCisgICAgMTc4LDAsMCwwLDExNCwxNzEsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsCisgICAgMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDksOTUsMTAzLDEwMSwxMTYsOTUsMTE1LAorICAgIDExMiwxMDEsOTksMTEwLDcsMCwwLDExNSw0MCwwLDAsMCwwLDUsNiwxLAorICAgIDEzLDEsMjEsMSw2LDEsMTUsMSwxMiwxLDE1LDEsMjEsMiwxOCwxLAorICAgIDEyLDEsNiwxLDE1LDEsNCwxLDksMSwxMiwxLDE1LDUsMjAsMiwKKyAgICAxNSwxLDksMSwxMjIsMjAsODAsOTcsMTE2LDEwNCw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LAorICAgIDQ2LDk1LDEwMywxMDEsMTE2LDk1LDExNSwxMTIsMTAxLDk5LDk5LDQsMCwwLDAsMCwKKyAgICAwLDAsMCw2LDAsMCwwLDQsMCwwLDAsNjcsMCwwLDAsMTE1LAorICAgIDE0MywwLDAsMCwxMjQsMiwwLDEwMCwxLDAsMTA3LDgsMCwxMTQsMjQsMCwKKyAgICAxMTYsMCwwLDEwNiwxLDAsMTI1LDIsMCwxMTAsMCwwLDEyNCwwLDAsMTA2LAorICAgIDIsMCwxMjQsMSwwLDEyNCwyLDAsMTI0LDMsMCwxMzEsMywwLDEyNSw0LAorICAgIDAsMTI0LDQsMCwxMDAsMSwwLDEwNyw4LDAsMTE0LDYxLDAsMTAwLDEsMCwKKyAgICA4MywxMjQsNCwwLDEwNiwzLDAsMTAwLDEsMCwxMDcsOCwwLDExNCwxMzUsMCwKKyAgICAxMjQsNCwwLDEwNiw0LDAsMTI1LDUsMCwxMjQsNSwwLDExNCwxMjgsMCwxMDAsCisgICAgMiwwLDEyNCw0LDAsOTUsNSwwLDExNiw2LDAsMTI0LDEsMCwxMjQsNSwKKyAgICAwLDEyNCwwLDAsMTA2LDIsMCwxMzEsMywwLDEyNCw0LDAsOTUsNCwwLAorICAgIDEyNCw0LDAsODMsMTAwLDEsMCw4MywxMTAsNCwwLDEyNCw0LDAsODMsMTAwLAorICAgIDEsMCw4Myw0MSwzLDEyMiw5OCwxMDIsMTA1LDExMCwxMDAsMzIsMTE2LDEwNCwxMDEsMzIsCisgICAgMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTExLDExMCwzMiwxMTUsMTIxLDExNSw0NiwxMTIsOTcsCisgICAgMTE2LDEwNCwzMiwxMTEsMTE0LDMyLDM5LDExMiw5NywxMTYsMTA0LDM5LDMyLDk4LDk3LDExNSwKKyAgICAxMDEsMTAwLDMyLDExMSwxMTAsMzIsMTE1LDEyMSwxMTUsNDYsMTEyLDk3LDExNiwxMDQsOTUsMTA0LAorICAgIDExMSwxMTEsMTA3LDExNSwzMiw5NywxMTAsMTAwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLAorICAgIDMyLDExNSwxMjEsMTE1LDQ2LDExMiw5NywxMTYsMTA0LDk1LDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LAorICAgIDEwMSwxMTQsOTUsOTksOTcsOTksMTA0LDEwMSw0Niw3OCw5MCw5LDExMCw5NywxMDksMTAxLAorICAgIDExNSwxMTIsOTcsOTksMTAxLDQxLDcsMTE0LDcsMCwwLDAsMTE0LDM1LDAsMCwKKyAgICAwLDExNCw4NiwxLDAsMCwxMTQsMTcwLDAsMCwwLDExNCwyMjEsMCwwLDAsCisgICAgMTE0LDIxOCwwLDAsMCwxMTQsNjEsMSwwLDAsNDEsNiwxMTQsMTIsMSwwLAorICAgIDAsMTE0LDE1OSwwLDAsMCwxMTQsMzUsMCwwLDAsMTE0LDEzLDEsMCwwLAorICAgIDExNCwxNzgsMCwwLDAsMTE0LDg1LDEsMCwwLDExNCw0LDAsMCwwLDExNCwKKyAgICA0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwxNCwxLDAsMCwxNDIsNywKKyAgICAwLDAsMTE1LDI2LDAsMCwwLDAsNCwxMiwxLDEyLDEsMjEsMSwxMiwKKyAgICAxLDQsMSwxNSwxLDksMSw2LDMsOSwxLDI0LDEsNCwyLDcsCisgICAgMiwxMjIsMjAsODAsOTcsMTE2LDEwNCw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDEwMiwxMDUsCisgICAgMTEwLDEwMCw5NSwxMTUsMTEyLDEwMSw5OSw5OSwzLDAsMCwwLDAsMCwwLDAsCisgICAgNCwwLDAsMCwzLDAsMCwwLDY3LDAsMCwwLDExNSw0MSwwLDAsCisgICAgMCwxMjQsMCwwLDEwNiwwLDAsMTI0LDEsMCwxMjQsMiwwLDEzMSwyLDAsCisgICAgMTI1LDMsMCwxMjQsMywwLDEwMCwxLDAsMTA3LDgsMCwxMTQsMzQsMCwxMDAsCisgICAgMSwwLDgzLDEyNCwzLDAsMTA2LDEsMCw4Myw0MSwyLDEyMiwxNzAsMTAyLDEwNSwKKyAgICAxMTAsMTAwLDMyLDExNiwxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDExMSwxMTAsCisgICAgMzIsMTE1LDEyMSwxMTUsNDYsMTEyLDk3LDExNiwxMDQsMzIsMTExLDExNCwzMiwzOSwxMTIsOTcsCisgICAgMTE2LDEwNCwzOSwzMiw5OCw5NywxMTUsMTAxLDEwMCwzMiwxMTEsMTEwLDMyLDExNSwxMjEsMTE1LAorICAgIDQ2LDExMiw5NywxMTYsMTA0LDk1LDEwNCwxMTEsMTExLDEwNywxMTUsMzIsOTcsMTEwLDEwMCwxMCwKKyAgICAzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwxMTUsMTIxLDExNSw0NiwxMTIsOTcsMTE2LDEwNCwKKyAgICA5NSwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDk1LDk5LDk3LDk5LDEwNCwxMDEsNDYsCisgICAgMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsODQsMTA0LDEwNSwxMTUsMzIsMTA5LAorICAgIDEwMSwxMTYsMTA0LDExMSwxMDAsMzIsMTA1LDExNSwzMiwxMDAsMTAxLDExMiwxMTQsMTAxLDk5LDk3LAorICAgIDExNiwxMDEsMTAwLDQ2LDMyLDMyLDg1LDExNSwxMDEsMzIsMTAyLDEwNSwxMTAsMTAwLDk1LDExNSwKKyAgICAxMTIsMTAxLDk5LDQwLDQxLDMyLDEwNSwxMTAsMTE1LDExNiwxMDEsOTcsMTAwLDQ2LDEwLDEwLAorICAgIDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDc4LDQxLDIsMTE0LDE0LDEsMCwwLAorICAgIDExNCwxNzAsMCwwLDAsNDEsNCwxMTQsMTIsMSwwLDAsMTE0LDE1OSwwLDAsCisgICAgMCwxMTQsMzUsMCwwLDAsMTE0LDE3OCwwLDAsMCwxMTQsNCwwLDAsMCwKKyAgICAxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsMTUsMSwwLDAsMTY0LAorICAgIDcsMCwwLDExNSw4LDAsMCwwLDAsOCwxOCwxLDEyLDEsNCwxLAorICAgIDEyMiwyMiw4MCw5NywxMTYsMTA0LDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsMTAyLDEwNSwxMTAsCisgICAgMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQxLDEyLDExNCw1NywwLDAsMCwxMTQsCisgICAgNTYsMCwwLDAsMTE0LDU4LDAsMCwwLDExNCw1OSwwLDAsMCwxMTQsMTksCisgICAgMSwwLDAsMTE0LDc1LDEsMCwwLDExNCw4MCwxLDAsMCwxMTQsODEsMSwKKyAgICAwLDAsMTE0LDgyLDEsMCwwLDExNCw4NiwxLDAsMCwxMTQsMTQsMSwwLAorICAgIDAsMTE0LDE1LDEsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLAorICAgIDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCw3NCwxLDAsMCw0OSwKKyAgICA3LDAsMCwxMTUsMjIsMCwwLDAsMTIsMiw2LDIsMTgsOCwxOCwxNywKKyAgICAxOCwxNywxOCwxNSwzLDEsMTgsMzEsMywxLDIxLDIxLDMsMSwxMTQsNzQsCisgICAgMSwwLDAsOTksMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsCisgICAgMywwLDAsMCw2NCwwLDAsMCwxMTUsMTMzLDAsMCwwLDEwMSwwLDAsCisgICAgOTAsMSwwLDEwMCwwLDAsOTAsMiwwLDEwMCwxLDAsOTAsMywwLDEwMCwKKyAgICAyLDAsMTAwLDMsMCwxMzIsMCwwLDkwLDQsMCwxMDAsNCwwLDEwMCw1LAorICAgIDAsMTMyLDAsMCw5MCw1LDAsMTAxLDYsMCw5MCw3LDAsMTAwLDYsMCwKKyAgICAxMDAsNywwLDEzMiwwLDAsOTAsOCwwLDEwMCw4LDAsMTAwLDksMCwxMzIsCisgICAgMCwwLDkwLDksMCwxMDAsMTAsMCwxMDAsMTEsMCwxMDAsMTIsMCwxMzIsMSwKKyAgICAwLDkwLDEwLDAsMTAwLDEzLDAsMTAwLDE0LDAsMTMyLDAsMCw5MCwxMSwwLAorICAgIDEwMSwxMiwwLDEwMCwxNSwwLDEwMCwxNiwwLDEzMiwwLDAsMTMxLDEsMCw5MCwKKyAgICAxMywwLDEwMCwxNywwLDEwMCwxOCwwLDEzMiwwLDAsOTAsMTQsMCwxMDAsMTAsCisgICAgMCw4Myw0MSwxOSwyMTgsMTAsNzAsMTA1LDEwOCwxMDEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCwKKyAgICAxMjIsMTcyLDcwLDEwNSwxMDgsMTAxLDQ1LDk4LDk3LDExNSwxMDEsMTAwLDMyLDEwMiwxMDUsMTEwLAorICAgIDEwMCwxMDEsMTE0LDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDczLDExMCwxMTYsMTAxLDExNCw5NywKKyAgICA5OSwxMTYsMTA1LDExMSwxMTAsMTE1LDMyLDExOSwxMDUsMTE2LDEwNCwzMiwxMTYsMTA0LDEwMSwzMiwKKyAgICAxMDIsMTA1LDEwOCwxMDEsMzIsMTE1LDEyMSwxMTUsMTE2LDEwMSwxMDksMzIsOTcsMTE0LDEwMSwzMiwKKyAgICA5OSw5Nyw5OSwxMDQsMTAxLDEwMCwzMiwxMDIsMTExLDExNCwzMiwxMTIsMTAxLDExNCwxMDIsMTExLAorICAgIDExNCwxMDksOTcsMTEwLDk5LDEwMSw0NCwzMiw5OCwxMDEsMTA1LDExMCwxMDMsMTAsMzIsMzIsCisgICAgMzIsMzIsMTE0LDEwMSwxMDIsMTE0LDEwMSwxMTUsMTA0LDEwMSwxMDAsMzIsMTE5LDEwNCwxMDEsMTEwLAorICAgIDMyLDExNiwxMDQsMTAxLDMyLDEwMCwxMDUsMTE0LDEwMSw5OSwxMTYsMTExLDExNCwxMjEsMzIsMTE2LAorICAgIDEwNCwxMDEsMzIsMTAyLDEwNSwxMTAsMTAwLDEwMSwxMTQsMzIsMTA1LDExNSwzMiwxMDQsOTcsMTEwLAorICAgIDEwMCwxMDgsMTA1LDExMCwxMDMsMzIsMTA0LDk3LDExNSwzMiw5OCwxMDEsMTAxLDExMCwzMiwxMDksCisgICAgMTExLDEwMCwxMDUsMTAyLDEwNSwxMDEsMTAwLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDk5LDIsCisgICAgMCwwLDAsMCwwLDAsMCw1LDAsMCwwLDUsMCwwLDAsNywKKyAgICAwLDAsMCwxMTUsMTIyLDAsMCwwLDEwMywwLDAsMTI1LDMsMCwxMjAsNTIsCisgICAgMCwxMjQsMiwwLDY4LDkzLDQ0LDAsOTIsMiwwLDEzNywwLDAsMTI1LDQsCisgICAgMCwxMjQsMywwLDEwNiwwLDAsMTM1LDAsMCwxMDIsMSwwLDEwMCwxLDAsCisgICAgMTAwLDIsMCwxMzQsMCwwLDEyNCw0LDAsNjgsMTMxLDEsMCwxMzEsMSwwLAorICAgIDEsMTEzLDEzLDAsODcsMTI0LDMsMCwxMjQsMCwwLDk1LDEsMCwxMjQsMSwKKyAgICAwLDExMiw3OSwwLDEwMCwzLDAsMTI0LDAsMCw5NSwyLDAsMTAwLDYsMCwKKyAgICAxMjQsMCwwLDk1LDMsMCwxMTYsNCwwLDEzMSwwLDAsMTI0LDAsMCw5NSwKKyAgICA1LDAsMTE2LDQsMCwxMzEsMCwwLDEyNCwwLDAsOTUsNiwwLDEwMCw1LAorICAgIDAsODMsNDEsNywxMjIsMTU0LDczLDExMCwxMDUsMTE2LDEwNSw5NywxMDgsMTA1LDEyMiwxMDEsCisgICAgMzIsMTE5LDEwNSwxMTYsMTA0LDMyLDExNiwxMDQsMTAxLDMyLDExMiw5NywxMTYsMTA0LDMyLDExNiwKKyAgICAxMTEsMzIsMTE1LDEwMSw5NywxMTQsOTksMTA0LDMyLDExMSwxMTAsMzIsOTcsMTEwLDEwMCwzMiwKKyAgICA5NywzMiwxMTgsOTcsMTE0LDEwNSw5Nyw5OCwxMDgsMTAxLDMyLDExMCwxMTcsMTA5LDk4LDEwMSwKKyAgICAxMTQsMzIsMTExLDEwMiwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw1MCw0NSwxMTYsCisgICAgMTE3LDExMiwxMDgsMTAxLDExNSwzMiw5OSwxMTEsMTEwLDExNiw5NywxMDUsMTEwLDEwNSwxMTAsMTAzLAorICAgIDMyLDExNiwxMDQsMTAxLDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMzIsOTcsMTEwLDEwMCwzMiwKKyAgICAxMTYsMTA0LDEwMSwzMiwxMDIsMTA1LDEwOCwxMDEsMzIsMTE1LDExNywxMDIsMTAyLDEwNSwxMjAsMTAxLAorICAgIDExNSwzMiwxMTYsMTA0LDEwMSwzMiwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDEwLDMyLDMyLDMyLAorICAgIDMyLDMyLDMyLDMyLDMyLDExNCwxMDEsOTksMTExLDEwMywxMTAsMTA1LDEyMiwxMDEsMTE1LDQ2LAorICAgIDk5LDEsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDMsMCwwLAorICAgIDAsNTEsMCwwLDAsMTE1LDI3LDAsMCwwLDEyNCwwLDAsOTMsMTcsMCwKKyAgICAxMjUsMSwwLDEyNCwxLDAsMTM2LDAsMCwxMDIsMiwwLDg2LDEsMTEzLDMsCisgICAgMCwxMDAsMCwwLDgzLDQxLDEsNzgsMTE0LDQsMCwwLDAsNDEsMiwxMTQsCisgICAgMjIsMCwwLDAsMTE0LDU4LDEsMCwwLDQxLDEsMTE0LDE3MCwwLDAsMCwKKyAgICAxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsNzcsMCwwLDAsMTkzLAorICAgIDcsMCwwLDExNSwyLDAsMCwwLDYsMCwxMjIsMzgsNzAsMTA1LDEwOCwxMDEsCisgICAgNzAsMTA1LDExMCwxMDAsMTAxLDExNCw0Niw5NSw5NSwxMDUsMTEwLDEwNSwxMTYsOTUsOTUsNDYsCisgICAgNjAsMTA4LDExMSw5OSw5NywxMDgsMTE1LDYyLDQ2LDYwLDEwMywxMDEsMTEwLDEwMSwxMjAsMTEyLAorICAgIDExNCw2MiwxMTQsMTE2LDAsMCwwLDExNCwyOSwwLDAsMCw3OCwxMTQsMTM5LDAsCisgICAgMCwwLDQxLDcsMTE0LDE5OCwwLDAsMCwyMTgsOCw5NSwxMDgsMTExLDk3LDEwMCwKKyAgICAxMDEsMTE0LDExNSwxMTQsMzUsMCwwLDAsMjE4LDExLDk1LDExMiw5NywxMTYsMTA0LDk1LAorICAgIDEwOSwxMTYsMTA1LDEwOSwxMDEsMjE4LDMsMTE1LDEwMSwxMTYsMjE4LDExLDk1LDExMiw5NywxMTYsCisgICAgMTA0LDk1LDk5LDk3LDk5LDEwNCwxMDEsMjE4LDE5LDk1LDExNCwxMDEsMTA4LDk3LDEyMCwxMDEsCisgICAgMTAwLDk1LDExMiw5NywxMTYsMTA0LDk1LDk5LDk3LDk5LDEwNCwxMDEsNDEsNSwxMTQsNzEsCisgICAgMCwwLDAsMTE0LDM1LDAsMCwwLDIxOCwxNCwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LAorICAgIDk1LDEwMCwxMDEsMTE2LDk3LDEwNSwxMDgsMTE1LDkwLDcsMTA4LDExMSw5NywxMDAsMTAxLDExNCwKKyAgICAxMTUsMTE0LDEyNiwwLDAsMCwxMTQsNCwwLDAsMCw0MSwxLDExNCwxNzAsMCwKKyAgICAwLDAsMTE0LDUsMCwwLDAsMTE0LDcyLDAsMCwwLDE4Nyw3LDAsMCwKKyAgICAxMTUsMTYsMCwwLDAsMCw0LDYsMSwxOSwxLDM2LDEsOSwyLDE1LAorICAgIDEsOSwxLDEyLDEsMTIyLDE5LDcwLDEwNSwxMDgsMTAxLDcwLDEwNSwxMTAsMTAwLDEwMSwKKyAgICAxMTQsNDYsOTUsOTUsMTA1LDExMCwxMDUsMTE2LDk1LDk1LDk5LDEsMCwwLDAsMCwKKyAgICAwLDAsMCwxLDAsMCwwLDIsMCwwLDAsNjcsMCwwLDAsMTE1LAorICAgIDEzLDAsMCwwLDEwMCwzLDAsMTI0LDAsMCw5NSwwLDAsMTAwLDIsMCwKKyAgICA4Myw0MSw0LDEyMiwzMSw3MywxMTAsMTE4LDk3LDEwOCwxMDUsMTAwLDk3LDExNiwxMDEsMzIsCisgICAgMTE2LDEwNCwxMDEsMzIsMTAwLDEwNSwxMTQsMTAxLDk5LDExNiwxMTEsMTE0LDEyMSwzMiwxMDksMTE2LAorICAgIDEwNSwxMDksMTAxLDQ2LDExNCwyOSwwLDAsMCw3OCwxMTQsMTM5LDAsMCwwLDQxLAorICAgIDEsMTE0LDg5LDEsMCwwLDQxLDEsMTE0LDcxLDAsMCwwLDExNCw0LDAsCisgICAgMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCw3NSwxLDAsCisgICAgMCwyMDEsNywwLDAsMTE1LDIsMCwwLDAsMCwyLDEyMiwyOCw3MCwxMDUsCisgICAgMTA4LDEwMSw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDEwNSwxMTAsMTE4LDk3LDEwOCwxMDUsMTAwLAorICAgIDk3LDExNiwxMDEsOTUsOTksOTcsOTksMTA0LDEwMSwxMTUsOTksMiwwLDAsMCwwLAorICAgIDAsMCwwLDMsMCwwLDAsMiwwLDAsMCw2NywwLDAsMCwxMTUsCisgICAgNTksMCwwLDAsMTI0LDAsMCwxMDYsMCwwLDEyNCwxLDAsMTMxLDEsMCwKKyAgICAxMjUsMiwwLDEyNCwyLDAsMTAwLDEsMCwxMDcsOCwwLDExNCwzNywwLDEwMCwKKyAgICAxLDAsMTAzLDAsMCwxMDIsMiwwLDgzLDEyNCwyLDAsMTA2LDEsMCwxMjQsCisgICAgMiwwLDEwNiwyLDAsMTEyLDU1LDAsMTAzLDAsMCwxMDIsMiwwLDgzLDQxLAorICAgIDIsMTIyLDE5Nyw4NCwxMTQsMTIxLDMyLDExNiwxMTEsMzIsMTAyLDEwNSwxMTAsMTAwLDMyLDk3LAorICAgIDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMzIsMTAyLDExMSwxMTQsMzIsMTE2LDEwNCwxMDEsMzIsCisgICAgMTE1LDExMiwxMDEsOTksMTA1LDEwMiwxMDUsMTAxLDEwMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwKKyAgICA0NCwzMiwxMTEsMTE0LDMyLDExNiwxMDQsMTAxLDMyLDExMCw5NywxMDksMTAxLDExNSwxMTIsOTcsCisgICAgOTksMTAxLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDExMiw5Nyw5OSwxMDcsOTcsCisgICAgMTAzLDEwMSwzMiwxMTIsMTExLDExNCwxMTYsMTA1LDExMSwxMTAsMTE1LDQ2LDMyLDgyLDEwMSwxMTYsCisgICAgMTE3LDExNCwxMTAsMTE1LDMyLDQwLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsNDQsMzIsMTA4LDEwNSwKKyAgICAxMTUsMTE2LDQ1LDExMSwxMDIsNDUsMTEyLDExMSwxMTQsMTE2LDEwNSwxMTEsMTEwLDExNSw0MSw0NiwKKyAgICAxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw4NCwxMDQsMTA1LDExNSwzMiwxMDksCisgICAgMTAxLDExNiwxMDQsMTExLDEwMCwzMiwxMDUsMTE1LDMyLDEwMCwxMDEsMTEyLDExNCwxMDEsOTksOTcsCisgICAgMTE2LDEwMSwxMDAsNDYsMzIsMzIsODUsMTE1LDEwMSwzMiwxMDIsMTA1LDExMCwxMDAsOTUsMTE1LAorICAgIDExMiwxMDEsOTksNDAsNDEsMzIsMTA1LDExMCwxMTUsMTE2LDEwMSw5NywxMDAsNDYsMTAsMTAsCisgICAgMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsNzgsNDEsMywxMTQsMTQsMSwwLDAsCisgICAgMTE0LDE3MCwwLDAsMCwxMTQsMjIxLDAsMCwwLDQxLDMsMTE0LDcxLDAsMCwKKyAgICAwLDExNCwxNTksMCwwLDAsMTE0LDE3OCwwLDAsMCwxMTQsNCwwLDAsMCwKKyAgICAxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsMTY2LDAsMCwwLDIwNywKKyAgICA3LDAsMCwxMTUsOCwwLDAsMCwwLDcsMTUsMSwxMiwxLDEwLDEsCisgICAgMTIyLDIyLDcwLDEwNSwxMDgsMTAxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsMTAyLDEwNSwxMTAsCisgICAgMTAwLDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsOTksNiwwLDAsMCwwLDAsMCwKKyAgICAwLDcsMCwwLDAsNywwLDAsMCw2NywwLDAsMCwxMTUsNDAsMCwKKyAgICAwLDAsMTI0LDEsMCwxMjQsMiwwLDEyNCwzLDAsMTMxLDIsMCwxMjUsNiwKKyAgICAwLDExNiwwLDAsMTI0LDIsMCwxMjQsMywwLDEwMCwxLDAsMTI0LDYsMCwKKyAgICAxMDAsMiwwLDEyNCw0LDAsMTMxLDIsMiw4Myw0MSwzLDc4LDExNCwxNzAsMCwKKyAgICAwLDAsMTE0LDIyMSwwLDAsMCw0MSwxLDExNCwyNDAsMCwwLDAsNDEsNywKKyAgICAxMTQsNzEsMCwwLDAsMTE0LDI0NCwwLDAsMCwxMTQsMTU5LDAsMCwwLDExNCwKKyAgICAzNSwwLDAsMCwxMTQsMjI5LDAsMCwwLDExNCwxMywxLDAsMCwxMTQsMTcwLAorICAgIDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsCisgICAgMCwwLDExNCw4NiwxLDAsMCwyMTksNywwLDAsMTE1LDYsMCwwLDAsCisgICAgMCwxLDE1LDEsMTgsMSwxMjIsMjAsNzAsMTA1LDEwOCwxMDEsNzAsMTA1LDExMCwxMDAsCisgICAgMTAxLDExNCw0Niw5NSwxMDMsMTAxLDExNiw5NSwxMTUsMTEyLDEwMSw5OSw3OCw5OSwzLDAsCisgICAgMCwwLDAsMCwwLDAsMTQsMCwwLDAsMTUsMCwwLDAsNjcsMCwKKyAgICAwLDAsMTE1LDI0MCwxLDAsMCwxMDAsMSwwLDEyNSwzLDAsMTI0LDEsMCwKKyAgICAxMDYsMCwwLDEwMCwyLDAsMTMxLDEsMCwxMDAsMywwLDI1LDEyNSw0LDAsCisgICAgMTIxLDM0LDAsMTE2LDEsMCwxMjQsMCwwLDEwNiwyLDAsMTEyLDQ5LDAsMTE2LAorICAgIDMsMCwxMDYsNCwwLDEzMSwwLDAsMTMxLDEsMCwxMDYsNSwwLDEyNSw1LAorICAgIDAsODcsMTEwLDI0LDAsNCwxMTYsNiwwLDEwNywxMCwwLDExNCw4NSwwLDEsCisgICAgMSwxLDEwMCwxMCwwLDEyNSw1LDAsODksMTEwLDEsMCw4OCwxMjQsNSwwLAorICAgIDEyNCwwLDAsMTA2LDcsMCwxMDcsMywwLDExNCwxMjMsMCwxMjQsMCwwLDEwNiwKKyAgICA4LDAsMTMxLDAsMCwxLDEyNCw1LDAsMTI0LDAsMCw5NSw3LDAsMTEwLAorICAgIDAsMCwxMTYsOSwwLDEzMSwwLDAsMTE0LDE1NiwwLDEyNCwwLDAsMTA2LDEwLAorICAgIDAsMTI1LDYsMCwxMjQsNCwwLDEwNiwxMSwwLDEzMSwwLDAsMTI1LDcsMCwKKyAgICAxMTAsMTUsMCwxMjQsMCwwLDEwNiwxMiwwLDEyNSw2LDAsMTI0LDQsMCwxMjUsCisgICAgNywwLDEyNCw3LDAsMTI0LDYsMCwxMDcsNiwwLDExNCw1MSwxLDExNiwxMywKKyAgICAwLDEyNCwwLDAsMTA2LDIsMCwxMjQsNCwwLDEzMSwyLDAsMTI1LDgsMCwKKyAgICAxMjAsMTAzLDAsMTI0LDAsMCwxMDYsMTQsMCw2OCw5Myw3NywwLDkyLDIsMCwKKyAgICAxMjUsOSwwLDEyNSwxMCwwLDEwMCw1LDAsMTI0LDksMCwyMywxMjUsMTEsMCwKKyAgICAxMTYsMTMsMCwxMjQsOCwwLDEyNCwxMSwwLDEzMSwyLDAsMTI1LDEyLDAsMTE2LAorICAgIDE1LDAsMTI0LDEyLDAsMTMxLDEsMCwxMTQsMjExLDAsMTI0LDAsMCwxMDYsMTYsCisgICAgMCwxMjQsMTAsMCwxMjQsMSwwLDEyNCwxMiwwLDEyNCw4LDAsMTAzLDEsMCwKKyAgICAxMjQsMiwwLDEzMSw1LDAsODMsMTEzLDIxMSwwLDg3LDExNiwxNywwLDEyNCw4LAorICAgIDAsMTMxLDEsMCwxMjUsMywwLDExMCwwLDAsMTIwLDEyNiwwLDEyNCwwLDAsCisgICAgMTA2LDE0LDAsNjgsOTMsMTE1LDAsOTIsMiwwLDEyNSw5LDAsMTI1LDEwLDAsCisgICAgMTE2LDEzLDAsMTI0LDAsMCwxMDYsMiwwLDEyNCw0LDAsMTI0LDksMCwyMywKKyAgICAxMzEsMiwwLDEyNSwxMiwwLDExNiwxOCwwLDEwMCw2LDAsMTA2LDE5LDAsMTI0LAorICAgIDEyLDAsMTMxLDEsMCwxMDAsNywwLDEwMCwzLDAsMTMxLDEsMSwxLDEyNCwKKyAgICA3LDAsMTI0LDksMCwyMywxMjQsNiwwLDEwNyw2LDAsMTE0LDYxLDEsMTE2LAorICAgIDE1LDAsMTI0LDEyLDAsMTMxLDEsMCwxMTQsMTc2LDEsMTI0LDAsMCwxMDYsMTYsCisgICAgMCwxMjQsMTAsMCwxMjQsMSwwLDEyNCwxMiwwLDEwMCw4LDAsMTI0LDIsMCwKKyAgICAxMzEsNSwwLDgzLDExMyw2MSwxLDExMyw2MSwxLDg3LDEyNCwzLDAsMTE0LDIzNiwKKyAgICAxLDExNiwxOCwwLDEwMCw5LDAsMTA2LDE5LDAsMTI0LDgsMCwxMzEsMSwwLAorICAgIDEzMSwxLDAsMSwxMTYsMjAsMCwxMjQsMSwwLDEwMCw4LDAsMTMxLDIsMCwKKyAgICAxMjUsMTMsMCwxMjQsOCwwLDEwMywxLDAsMTI0LDEzLDAsOTUsMjEsMCwxMjQsCisgICAgMTMsMCw4MywxMDAsOCwwLDgzLDQxLDExLDEyMiwxMjUsODQsMTE0LDEyMSwzMiwxMTYsCisgICAgMTExLDMyLDEwMiwxMDUsMTEwLDEwMCwzMiw5NywzMiwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDMyLAorICAgIDEwMiwxMTEsMTE0LDMyLDExNiwxMDQsMTAxLDMyLDExNSwxMTIsMTAxLDk5LDEwNSwxMDIsMTA1LDEwMSwKKyAgICAxMDAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDQsMzIsMTExLDExNCwzMiwxMTYsMTA0LDEwMSwKKyAgICAzMiwxMTAsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSwxMCwzMiwzMiwzMiwzMiwzMiwKKyAgICAzMiwzMiwzMiwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsMzIsMTEyLDExMSwxMTQsMTE2LDEwNSwKKyAgICAxMTEsMTEwLDExNSw0NiwzMiw4MiwxMDEsMTE2LDExNywxMTQsMTEwLDExNSwzMiw0MCwxMDgsMTExLAorICAgIDk3LDEwMCwxMDEsMTE0LDQ0LDMyLDEwOCwxMDUsMTE1LDExNiw0NSwxMTEsMTAyLDQ1LDExMiwxMTEsCisgICAgMTE0LDExNiwxMDUsMTExLDExMCwxMTUsNDEsNDYsNzAsMTE0LDExNiwwLDAsMCwxMTQsMTE1LAorICAgIDAsMCwwLDExNCwyOSwwLDAsMCwxMTQsNzIsMCwwLDAsMTIyLDksMTE2LAorICAgIDExNCwxMjEsMTA1LDExMCwxMDMsMzIsMTIzLDEyNSwxMTQsMTQ2LDAsMCwwLDc4LDEyMiwyNSwKKyAgICAxMTIsMTExLDExNSwxMTUsMTA1LDk4LDEwOCwxMDEsMzIsMTEwLDk3LDEwOSwxMDEsMTE1LDExMiw5NywKKyAgICA5OSwxMDEsMzIsMTAyLDExMSwxMTQsMzIsMTIzLDEyNSwxMTQsMTM5LDAsMCwwLDQxLDIyLAorICAgIDExNCwzMiwwLDAsMCwxMTQsMzksMCwwLDAsMTE0LDM1LDAsMCwwLDExNCwKKyAgICAzLDAsMCwwLDExNCw0NSwwLDAsMCwxMTQsNTQsMSwwLDAsMTE0LDQwLAorICAgIDAsMCwwLDExNCw4OSwxLDAsMCwyMTgsMTEsOTUsMTAyLDEwNSwxMDgsMTA4LDk1LAorICAgIDk5LDk3LDk5LDEwNCwxMDEsMTE0LDYsMCwwLDAsMTE0LDkyLDEsMCwwLDExNCwKKyAgICAxNDAsMCwwLDAsMTE0LDkxLDEsMCwwLDExNCwyOCwwLDAsMCwxMTQsODgsCisgICAgMSwwLDAsMTE0LDQ0LDAsMCwwLDExNCw4NiwxLDAsMCwxMTQsNDYsMCwKKyAgICAwLDAsMTE0LDE1MywwLDAsMCwxMTQsNDcsMCwwLDAsMTE0LDIxNywwLDAsCisgICAgMCwxMTQsMjIxLDAsMCwwLDQxLDE0LDExNCw3MSwwLDAsMCwxMTQsMTU5LDAsCisgICAgMCwwLDExNCwxMywxLDAsMCw5MCwxMiwxMDUsMTE1LDk1LDExMCw5NywxMDksMTAxLAorICAgIDExNSwxMTIsOTcsOTksMTAxLDkwLDExLDExNiw5NywxMDUsMTA4LDk1LDEwOSwxMTEsMTAwLDExNywKKyAgICAxMDgsMTAxLDExNCwxODQsMCwwLDAsOTAsNSw5OSw5Nyw5OSwxMDQsMTAxLDkwLDEyLAorICAgIDk5LDk3LDk5LDEwNCwxMDEsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTAsOSw5OCw5NywKKyAgICAxMTUsMTAxLDk1LDExMiw5NywxMTYsMTA0LDExNCw1OCwxLDAsMCwxMTQsMjQ0LDAsMCwKKyAgICAwLDkwLDEzLDEwNSwxMTAsMTA1LDExNiw5NSwxMDIsMTA1LDEwOCwxMDEsMTEwLDk3LDEwOSwxMDEsCisgICAgOTAsOSwxMDIsMTE3LDEwOCwxMDgsOTUsMTEyLDk3LDExNiwxMDQsMTE0LDE3OCwwLDAsMCwKKyAgICAxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsCisgICAgMTQsMSwwLDAsMjI0LDcsMCwwLDExNSw2OCwwLDAsMCwwLDMsNiwKKyAgICAxLDE5LDEsMywxLDM0LDEsMTMsMSwxMSwxLDE1LDEsMTAsMSwxMiwKKyAgICAyLDksMSw5LDEsMTUsMiw5LDEsNiwyLDEyLDEsMTgsMSwyMiwKKyAgICAxLDEwLDEsMTUsMSwxMiwxLDMyLDQsMTUsMiwyMiwxLDIyLDEsMjUsCisgICAgMSwxNiwxLDEyLDEsMzIsMSw2LDEsMTksMSwxNSwxLDEyLDEsNCwKKyAgICAxLDEyMiwyMCw3MCwxMDUsMTA4LDEwMSw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDEwMiwxMDUsCisgICAgMTEwLDEwMCw5NSwxMTUsMTEyLDEwMSw5OSw5OSwxLDAsMCwwLDAsMCwwLDAsCisgICAgOSwwLDAsMCwxMywwLDAsMCw2NywwLDAsMCwxMTUsMTQsMSwwLAorICAgIDAsMTI0LDAsMCwxMDYsMCwwLDEyNSwxLDAsMTIxLDMxLDAsMTE2LDEsMCwKKyAgICAxMDYsMiwwLDEyNCwxLDAsMTEyLDMzLDAsMTE2LDEsMCwxMDYsMywwLDEzMSwKKyAgICAwLDAsMTMxLDEsMCwxMjUsMiwwLDg3LDExMCwzMywwLDQsMTE2LDQsMCwKKyAgICAxMTYsNSwwLDExNiw2LDAsMTAyLDMsMCwxMDcsMTAsMCwxMTQsNzUsMCwxLAorICAgIDEsMSwxMDMsMCwwLDEyNSwyLDAsODksMTEwLDEsMCw4OCwxMTYsNywwLAorICAgIDEwNiw4LDAsMTA2LDksMCwxMDAsMSwwLDEzMSwxLDAsMTE1LDExMiwwLDExNiwKKyAgICAxMCwwLDEyNCwyLDAsMTMxLDEsMCwxMjQsMCwwLDk1LDExLDAsMTEwLDExMSwKKyAgICAwLDExNiwxMCwwLDEzMSwwLDAsMTI1LDMsMCwxMjAsOTAsMCwxMjQsMiwwLAorICAgIDY4LDkzLDgyLDAsMTI1LDQsMCwxMjQsNCwwLDEwNiwxMiwwLDEwMCwyLDAsCisgICAgMTMxLDEsMCw5MiwzLDAsMTI1LDUsMCwxMjUsNiwwLDEyNSw3LDAsMTI0LAorICAgIDYsMCwxMTQsMTkxLDAsMTAwLDMsMCwxMDYsMTMsMCwxMjQsNSwwLDEyNCw3LAorICAgIDAsMTA2LDE0LDAsMTMxLDAsMCwxMzEsMiwwLDEyNSw4LDAsMTEwLDYsMCwKKyAgICAxMjQsNSwwLDEyNSw4LDAsMTI0LDMsMCwxMDYsMTUsMCwxMjQsOCwwLDEzMSwKKyAgICAxLDAsMSwxMTMsMTI4LDAsODcsMTI0LDMsMCwxMjQsMCwwLDk1LDExLDAsCisgICAgMTE2LDcsMCwxMDYsOCwwLDEwNiw5LDAsMTE2LDE2LDAsMTMxLDEsMCwxMTQsCisgICAgMTAsMSwxMDAsNCwwLDEwMCw1LDAsMTMyLDAsMCwxMjQsMiwwLDY4LDEzMSwKKyAgICAxLDAsMTI0LDAsMCw5NSwxNywwLDExMCwwLDAsMTAwLDYsMCw4Myw0MSwKKyAgICA3LDEyMiw2OCw3MCwxMDUsMTA4LDEwOCwzMiwxMTYsMTA0LDEwMSwzMiw5OSw5Nyw5OSwxMDQsCisgICAgMTAxLDMyLDExMSwxMDIsMzIsMTEyLDExMSwxMTYsMTAxLDExMCwxMTYsMTA1LDk3LDEwOCwzMiwxMDksCisgICAgMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsMzIsOTcsMTEwLDEwMCwzMiwxMTIsOTcsOTksMTA3LDk3LAorICAgIDEwMywxMDEsMTE1LDMyLDEwMiwxMTEsMTE0LDMyLDExNiwxMDQsMTA1LDExNSwzMiwxMDAsMTA1LDExNCwKKyAgICAxMDEsOTksMTE2LDExMSwxMTQsMTIxLDQ2LDExNCwwLDAsMCwwLDExNCwxMTYsMCwwLAorICAgIDAsMTIyLDUsMTIzLDEyNSw0NiwxMjMsMTI1LDk5LDEsMCwwLDAsMCwwLDAsCisgICAgMCwyLDAsMCwwLDMsMCwwLDAsODMsMCwwLDAsMTE1LDI4LDAsCisgICAgMCwwLDEwNCwwLDAsMTI0LDAsMCw5MywxOCwwLDEyNSwxLDAsMTI0LDEsCisgICAgMCwxMDYsMCwwLDEzMSwwLDAsMTQ2LDIsMCwxMTMsNiwwLDgzLDExNCw0LAorICAgIDAsMCwwLDQxLDEsMTE0LDE0MCwwLDAsMCw0MSwyLDExNCwyMiwwLDAsCisgICAgMCw5MCwyLDEwMiwxMTAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LAorICAgIDUsMCwwLDAsMjUwLDksNjAsMTE1LDEwMSwxMTYsOTksMTExLDEwOSwxMTIsNjIsNDIsCisgICAgOCwwLDAsMTE1LDIsMCwwLDAsOSwwLDEyMiw0MSw3MCwxMDUsMTA4LDEwMSwKKyAgICA3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDk1LDEwMiwxMDUsMTA4LDEwOCw5NSw5OSw5Nyw5OSwKKyAgICAxMDQsMTAxLDQ2LDYwLDEwOCwxMTEsOTksOTcsMTA4LDExNSw2Miw0Niw2MCwxMTUsMTAxLDExNiwKKyAgICA5OSwxMTEsMTA5LDExMiw2Miw3OCw0MSwxOCwxMTQsMzUsMCwwLDAsMTE0LDMsMCwKKyAgICAwLDAsOTAsNywxMDgsMTA1LDExNSwxMTYsMTAwLDEwNSwxMTQsMTE0LDQ1LDAsMCwwLAorICAgIDIxOCwxNyw3MCwxMDUsMTA4LDEwMSw3OCwxMTEsMTE2LDcwLDExMSwxMTcsMTEwLDEwMCw2OSwxMTQsCisgICAgMTE0LDExMSwxMTQsMjE4LDE1LDgwLDEwMSwxMTQsMTA5LDEwNSwxMTUsMTE1LDEwNSwxMTEsMTEwLDY5LAorICAgIDExNCwxMTQsMTExLDExNCwyMTgsMTgsNzgsMTExLDExNiw2NSw2OCwxMDUsMTE0LDEwMSw5OSwxMTYsCisgICAgMTExLDExNCwxMjEsNjksMTE0LDExNCwxMTEsMTE0LDExNCw3LDAsMCwwLDExNCw4LDAsCisgICAgMCwwLDExNCw5LDAsMCwwLDExNCw5MCwxLDAsMCwxMTQsOTEsMSwwLAorICAgIDAsMTE0LDEzNCwwLDAsMCwxMTQsNDcsMCwwLDAsMTE0LDE0MCwwLDAsMCwKKyAgICAyMTgsMyw5NywxMDAsMTAwLDExNCwxMCwwLDAsMCwxMTQsOTIsMSwwLDAsNDEsCisgICAgOSwxMTQsNzEsMCwwLDAsMTE0LDM1LDAsMCwwLDkwLDgsOTksMTExLDExMCwKKyAgICAxMTYsMTAxLDExMCwxMTYsMTE1LDkwLDIxLDEwOCwxMTEsMTE5LDEwMSwxMTQsOTUsMTE1LDExNywxMDIsCisgICAgMTAyLDEwNSwxMjAsOTUsOTksMTExLDExMCwxMTYsMTAxLDExMCwxMTYsMTE1LDExNCw3MiwxLDAsCisgICAgMCwxMTQsNjcsMCwwLDAsMTE0LDY2LDEsMCwwLDExNCw1OCwxLDAsMCwKKyAgICA5MCw4LDExMCwxMDEsMTE5LDk1LDExMCw5NywxMDksMTAxLDExNCw0LDAsMCwwLDExNCwKKyAgICA0LDAsMCwwLDExNCw1LDAsMCwwLDExNCw5NCwxLDAsMCwxMyw4LAorICAgIDAsMCwxMTUsMzQsMCwwLDAsMCwyLDksMSwzLDEsMzEsMSwyMiwKKyAgICAzLDExLDMsMTgsMSwxOCw3LDksMSwxMywxLDI0LDEsNiwxLDI3LAorICAgIDIsNiwxLDE3LDEsOSwxLDE4LDEsMTIyLDIyLDcwLDEwNSwxMDgsMTAxLDcwLAorICAgIDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsOTUsMTAyLDEwNSwxMDgsMTA4LDk1LDk5LDk3LDk5LDEwNCwKKyAgICAxMDEsOTksMSwwLDAsMCwwLDAsMCwwLDMsMCwwLDAsMywwLAorICAgIDAsMCw3LDAsMCwwLDExNSwyNSwwLDAsMCwxMzUsMCwwLDEzNSwxLAorICAgIDAsMTAyLDIsMCwxMDAsMSwwLDEwMCwyLDAsMTM0LDAsMCwxMjUsMiwwLAorICAgIDEyNCwyLDAsODMsNDEsMyw5NywyMCwxLDAsMCw2NSwzMiw5OSwxMDgsOTcsCisgICAgMTE1LDExNSwzMiwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwzMiwxMTksMTA0LDEwNSw5OSwxMDQsMzIsCisgICAgMTE0LDEwMSwxMTYsMTE3LDExNCwxMTAsMTE1LDMyLDk3LDMyLDk5LDEwOCwxMTEsMTE1LDExNywxMTQsCisgICAgMTAxLDMyLDExNiwxMTEsMzIsMTE3LDExNSwxMDEsMzIsMTExLDExMCwzMiwxMTUsMTIxLDExNSw0NiwKKyAgICAxMTIsOTcsMTE2LDEwNCw5NSwxMDQsMTExLDExMSwxMDcsMTAsMzIsMzIsMzIsMzIsMzIsMzIsCisgICAgMzIsMzIsMTE5LDEwNCwxMDUsOTksMTA0LDMyLDExOSwxMDUsMTA4LDEwOCwzMiwxMTQsMTAxLDExNiwKKyAgICAxMTcsMTE0LDExMCwzMiw5NywxMTAsMzIsMTA1LDExMCwxMTUsMTE2LDk3LDExMCw5OSwxMDEsMzIsCisgICAgMTE3LDExNSwxMDUsMTEwLDEwMywzMiwxMTYsMTA0LDEwMSwzMiwxMTUsMTEyLDEwMSw5OSwxMDUsMTAyLAorICAgIDEwNSwxMDEsMTAwLDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMTE1LDMyLDk3LDExMCwxMDAsMzIsCisgICAgMTE2LDEwNCwxMDEsMzIsMTEyLDk3LDExNiwxMDQsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsCisgICAgMzIsOTksOTcsMTA4LDEwOCwxMDEsMTAwLDMyLDExMSwxMTAsMzIsMTE2LDEwNCwxMDEsMzIsOTksCisgICAgMTA4LDExMSwxMTUsMTE3LDExNCwxMDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsCisgICAgMzIsNzMsMTAyLDMyLDExNiwxMDQsMTAxLDMyLDExMiw5NywxMTYsMTA0LDMyLDk5LDk3LDEwOCwKKyAgICAxMDgsMTAxLDEwMCwzMiwxMTEsMTEwLDMyLDExNiwxMDQsMTAxLDMyLDk5LDEwOCwxMTEsMTE1LDExNywKKyAgICAxMTQsMTAxLDMyLDEwNSwxMTUsMzIsMTEwLDExMSwxMTYsMzIsOTcsMzIsMTAwLDEwNSwxMTQsMTAxLAorICAgIDk5LDExNiwxMTEsMTE0LDEyMSw0NCwzMiw3MywxMDksMTEyLDExMSwxMTQsMTE2LDY5LDExNCwxMTQsCisgICAgMTExLDExNCwzMiwxMDUsMTE1LDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDExNCw5NywKKyAgICAxMDUsMTE1LDEwMSwxMDAsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsOTksCisgICAgMSwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsNCwwLDAsMCwKKyAgICAxOSwwLDAsMCwxMTUsNDYsMCwwLDAsMTE2LDAsMCwxMjQsMCwwLDEzMSwKKyAgICAxLDAsMTE1LDMzLDAsMTE2LDEsMCwxMDAsMSwwLDEwMCwyLDAsMTI0LDAsCisgICAgMCwxMzEsMSwxLDEzMCwxLDAsMTEwLDAsMCwxMzYsMCwwLDEyNCwwLDAsCisgICAgMTM2LDEsMCwxNDAsMSwwLDgzLDQxLDMsMTIyLDQ1LDgwLDk3LDExNiwxMDQsMzIsCisgICAgMTA0LDExMSwxMTEsMTA3LDMyLDEwMiwxMTEsMTE0LDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwKKyAgICAxMDUsOTgsNDYsMTA5LDk3LDk5LDEwNCwxMDUsMTEwLDEwMSwxMTQsMTIxLDQ2LDcwLDEwNSwxMDgsCisgICAgMTAxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsMTIyLDMwLDExMSwxMTAsMTA4LDEyMSwzMiwxMDAsCisgICAgMTA1LDExNCwxMDEsOTksMTE2LDExMSwxMTQsMTA1LDEwMSwxMTUsMzIsOTcsMTE0LDEwMSwzMiwxMTUsCisgICAgMTE3LDExMiwxMTIsMTExLDExNCwxMTYsMTAxLDEwMCwxMTQsMzUsMCwwLDAsNDEsMiwxMTQsCisgICAgNDYsMCwwLDAsMTE0LDE1NCwwLDAsMCw0MSwxLDExNCwzNSwwLDAsMCwKKyAgICA0MSwyLDExNCwxMiwxLDAsMCwxMTQsOTMsMSwwLDAsMTE0LDQsMCwwLAorICAgIDAsMTE0LDUsMCwwLDAsMjE4LDI0LDExMiw5NywxMTYsMTA0LDk1LDEwNCwxMTEsMTExLAogICAgIDEwNyw5NSwxMDIsMTExLDExNCw5NSw3MCwxMDUsMTA4LDEwMSw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LAotICAgIDQwLDAsMCwwLDAsNDAsMywwLDAsMCwxMTcsMywwLDAsMCw5OSwKLSAgICAxMDgsMTE1LDExNywxNCwwLDAsMCwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDk1LDEwMCwxMDEsCi0gICAgMTE2LDk3LDEwNSwxMDgsMTE1LDExNywyNCwwLDAsMCwxMTIsOTcsMTE2LDEwNCw5NSwxMDQsCi0gICAgMTExLDExMSwxMDcsOTUsMTAyLDExMSwxMTQsOTUsNzAsMTA1LDEwOCwxMDEsNzAsMTA1LDExMCwxMDAsCi0gICAgMTAxLDExNCw0MCwwLDAsMCwwLDQwLDIsMCwwLDAsMTE3LDMsMCwwLAotICAgIDAsOTksMTA4LDExNSwxMTcsMTQsMCwwLDAsMTA4LDExMSw5NywxMDAsMTAxLDExNCw5NSwKLSAgICAxMDAsMTAxLDExNiw5NywxMDUsMTA4LDExNSwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsCi0gICAgMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwKLSAgICAxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDksMCwwLDAsMTEyLDk3LAotICAgIDExNiwxMDQsOTUsMTA0LDExMSwxMTEsMTA3LDE0NSw1LDAsMCwxMTUsNCwwLDAsMCwKLSAgICAwLDEwLDIxLDYsMTE3LDIwLDAsMCwwLDcwLDEwNSwxMDgsMTAxLDcwLDEwNSwxMTAsCi0gICAgMTAwLDEwMSwxMTQsNDYsMTEyLDk3LDExNiwxMDQsOTUsMTA0LDExMSwxMTEsMTA3LDk5LDEsMCwKLSAgICAwLDAsMCwwLDAsMCwxLDAsMCwwLDIsMCwwLDAsNjcsMCwKLSAgICAwLDAsMTE1LDE0LDAsMCwwLDEwMCwxLDAsMTI0LDAsMCwxMDYsMCwwLAotICAgIDEwMiwxLDAsMjIsODMsNDAsMiwwLDAsMCw3OCwxMTcsMTQsMCwwLDAsCi0gICAgNzAsMTA1LDEwOCwxMDEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCw0MCwzNywxMTQsNDEsNDAsMSwKLSAgICAwLDAsMCwxMTcsNCwwLDAsMCwxMTIsOTcsMTE2LDEwNCw0MCwxLDAsMCwKLSAgICAwLDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LDEwMiw0MCwwLDAsMCwwLDQwLAotICAgIDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLAotICAgIDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsCi0gICAgMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNyw4LDAsMCwwLDk1LDk1LDExNCwxMDEsMTEyLAotICAgIDExNCw5NSw5NSwxNjMsNSwwLDAsMTE1LDIsMCwwLDAsMCwxLDExNywxOSwKLSAgICAwLDAsMCw3MCwxMDUsMTA4LDEwMSw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDk1LDk1LAotICAgIDExNCwxMDEsMTEyLDExNCw5NSw5NSw3OCw0MCwxMywwLDAsMCwxMTcsOCwwLDAsCi0gICAgMCw5NSw5NSwxMTAsOTcsMTA5LDEwMSw5NSw5NSwxMTcsMTAsMCwwLDAsOTUsOTUsCi0gICAgMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsOTUsMTE3LDEyLDAsMCwwLDk1LDk1LDExMywKLSAgICAxMTcsOTcsMTA4LDExMCw5NywxMDksMTAxLDk1LDk1LDExNyw3LDAsMCwwLDk1LDk1LAotICAgIDEwMCwxMTEsOTksOTUsOTUsMTE3LDgsMCwwLDAsOTUsOTUsMTA1LDExMCwxMDUsMTE2LAotICAgIDk1LDk1LDExNywxNywwLDAsMCwxMDUsMTEwLDExOCw5NywxMDgsMTA1LDEwMCw5NywxMTYsCi0gICAgMTAxLDk1LDk5LDk3LDk5LDEwNCwxMDEsMTE1LDExNywxNywwLDAsMCw5NSwxMDIsMTA1LAotICAgIDExMCwxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTE1LDEwNCwxMDUsMTA5LDExNywxMSwKLSAgICAwLDAsMCwxMDIsMTA1LDExMCwxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE3LDExLAotICAgIDAsMCwwLDEwMiwxMDUsMTEwLDEwMCw5NSwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDExNywxMSwKLSAgICAwLDAsMCw5NSwxMDIsMTA1LDEwOCwxMDgsOTUsOTksOTcsOTksMTA0LDEwMSwxMTcsMTEsCi0gICAgMCwwLDAsOTksMTA4LDk3LDExNSwxMTUsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMTE3LDksCi0gICAgMCwwLDAsMTEyLDk3LDExNiwxMDQsOTUsMTA0LDExMSwxMTEsMTA3LDExNyw4LDAsMCwKLSAgICAwLDk1LDk1LDExNCwxMDEsMTEyLDExNCw5NSw5NSw0MCwxLDAsMCwwLDExNywxMCwKLSAgICAwLDAsMCw5NSw5NSwxMDgsMTExLDk5LDk3LDEwOCwxMTUsOTUsOTUsNDAsMCwwLAotICAgIDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwKLSAgICAxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LAotICAgIDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTAsMCwwLDAsNzAsMTA1LAotICAgIDEwOCwxMDEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCw0MSw1LDAsMCwxMTUsMTYsMCwwLAotICAgIDAsMTYsNyw2LDIsMTIsMTQsMTIsNCw2LDIsMTIsNDQsMTIsMzEsMTgsCi0gICAgMTgsMTE3LDEwLDAsMCwwLDcwLDEwNSwxMDgsMTAxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsCi0gICAgOTksMSwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMiwwLDAsCi0gICAgMCw2NiwwLDAsMCwxMTUsNTAsMCwwLDAsMTI0LDAsMCw2OSwxMDEsMCwKLSAgICAwLDkwLDEsMCwxMDAsMCwwLDkwLDIsMCwxMDAsMSwwLDkwLDMsMCwKLSAgICAxMDAsMiwwLDEwMCwzLDAsMTMyLDAsMCw5MCw0LDAsMTAwLDQsMCwxMDAsCi0gICAgNSwwLDEzMiwwLDAsOTAsNSwwLDEwMCw2LDAsODMsNDAsNywwLDAsCi0gICAgMCwxMTcsMTgsMCwwLDAsOTUsNzMsMTA5LDExMiwxMTEsMTE0LDExNiw3NiwxMTEsOTksCi0gICAgMTA3LDY3LDExMSwxMTAsMTE2LDEwMSwxMjAsMTE2LDExNywzNiwwLDAsMCw2NywxMTEsMTEwLAotICAgIDExNiwxMDEsMTIwLDExNiwzMiwxMDksOTcsMTEwLDk3LDEwMywxMDEsMTE0LDMyLDEwMiwxMTEsMTE0LAotICAgIDMyLDExNiwxMDQsMTAxLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDMyLDEwOCwxMTEsOTksMTA3LAotICAgIDQ2LDk5LDEsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDEsMCwKLSAgICAwLDAsNjcsMCwwLDAsMTE1LDE0LDAsMCwwLDExNiwwLDAsMTA2LDEsCi0gICAgMCwxMzEsMCwwLDEsMTAwLDEsMCw4Myw0MCwyLDAsMCwwLDExNywyNCwKLSAgICAwLDAsMCw2NSw5OSwxMTMsMTE3LDEwNSwxMTQsMTAxLDMyLDExNiwxMDQsMTAxLDMyLDEwNSwKLSAgICAxMDksMTEyLDExMSwxMTQsMTE2LDMyLDEwOCwxMTEsOTksMTA3LDQ2LDc4LDQwLDIsMCwwLAotICAgIDAsMTE3LDQsMCwwLDAsOTUsMTA1LDEwOSwxMTIsMTE3LDEyLDAsMCwwLDk3LAotICAgIDk5LDExMywxMTcsMTA1LDExNCwxMDEsOTUsMTA4LDExMSw5OSwxMDcsNDAsMSwwLDAsMCwKLSAgICAxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwxMDIsNDAsMCwwLDAsMCw0MCwwLAotICAgIDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwKLSAgICAxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwKLSAgICAxMTYsMTE0LDk3LDExMiw2MiwxMTcsOSwwLDAsMCw5NSw5NSwxMDEsMTEwLDExNiwxMDEsCi0gICAgMTE0LDk1LDk1LDE3Myw1LDAsMCwxMTUsMiwwLDAsMCwwLDIsMTE3LDI4LAotICAgIDAsMCwwLDk1LDczLDEwOSwxMTIsMTExLDExNCwxMTYsNzYsMTExLDk5LDEwNyw2NywxMTEsCi0gICAgMTEwLDExNiwxMDEsMTIwLDExNiw0Niw5NSw5NSwxMDEsMTEwLDExNiwxMDEsMTE0LDk1LDk1LDk5LAotICAgIDQsMCwwLDAsMCwwLDAsMCw0LDAsMCwwLDEsMCwwLDAsCi0gICAgNjcsMCwwLDAsMTE1LDE0LDAsMCwwLDExNiwwLDAsMTA2LDEsMCwxMzEsCi0gICAgMCwwLDEsMTAwLDEsMCw4Myw0MCwyLDAsMCwwLDExNyw2MCwwLDAsCi0gICAgMCw4MiwxMDEsMTA4LDEwMSw5NywxMTUsMTAxLDMyLDExNiwxMDQsMTAxLDMyLDEwNSwxMDksMTEyLAotICAgIDExMSwxMTQsMTE2LDMyLDEwOCwxMTEsOTksMTA3LDMyLDExNCwxMDEsMTAzLDk3LDExNCwxMDAsMTA4LAotICAgIDEwMSwxMTUsMTE1LDMyLDExMSwxMDIsMzIsOTcsMTEwLDEyMSwzMiwxMTQsOTcsMTA1LDExNSwxMDEsCi0gICAgMTAwLDMyLDEwMSwxMjAsOTksMTAxLDExMiwxMTYsMTA1LDExMSwxMTAsMTE1LDQ2LDc4LDQwLDIsCi0gICAgMCwwLDAsMTE3LDQsMCwwLDAsOTUsMTA1LDEwOSwxMTIsMTE3LDEyLDAsMCwKLSAgICAwLDExNCwxMDEsMTA4LDEwMSw5NywxMTUsMTAxLDk1LDEwOCwxMTEsOTksMTA3LDQwLDQsMCwKLSAgICAwLDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDExNyw4LDAsMCwwLAotICAgIDEwMSwxMjAsOTksOTUsMTE2LDEyMSwxMTIsMTAxLDExNyw5LDAsMCwwLDEwMSwxMjAsOTksCi0gICAgOTUsMTE4LDk3LDEwOCwxMTcsMTAxLDExNywxMywwLDAsMCwxMDEsMTIwLDk5LDk1LDExNiwKLSAgICAxMTQsOTcsOTksMTAxLDk4LDk3LDk5LDEwNyw0MCwwLDAsMCwwLDQwLDAsMCwKLSAgICAwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwKLSAgICAxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwKLSAgICAxMTQsOTcsMTEyLDYyLDExNyw4LDAsMCwwLDk1LDk1LDEwMSwxMjAsMTA1LDExNiw5NSwKLSAgICA5NSwxNzcsNSwwLDAsMTE1LDIsMCwwLDAsMCwyLDExNywyNywwLDAsCi0gICAgMCw5NSw3MywxMDksMTEyLDExMSwxMTQsMTE2LDc2LDExMSw5OSwxMDcsNjcsMTExLDExMCwxMTYsCi0gICAgMTAxLDEyMCwxMTYsNDYsOTUsOTUsMTAxLDEyMCwxMDUsMTE2LDk1LDk1LDc4LDQwLDYsMCwKLSAgICAwLDAsMTE3LDgsMCwwLDAsOTUsOTUsMTEwLDk3LDEwOSwxMDEsOTUsOTUsMTE3LAotICAgIDEwLDAsMCwwLDk1LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDk1LDExNywxMiwKLSAgICAwLDAsMCw5NSw5NSwxMTMsMTE3LDk3LDEwOCwxMTAsOTcsMTA5LDEwMSw5NSw5NSwxMTcsCi0gICAgNywwLDAsMCw5NSw5NSwxMDAsMTExLDk5LDk1LDk1LDExNyw5LDAsMCwwLAotICAgIDk1LDk1LDEwMSwxMTAsMTE2LDEwMSwxMTQsOTUsOTUsMTE3LDgsMCwwLDAsOTUsOTUsCi0gICAgMTAxLDEyMCwxMDUsMTE2LDk1LDk1LDQwLDEsMCwwLDAsMTE3LDEwLDAsMCwwLAotICAgIDk1LDk1LDEwOCwxMTEsOTksOTcsMTA4LDExNSw5NSw5NSw0MCwwLDAsMCwwLDQwLAotICAgIDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLAotICAgIDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsCi0gICAgMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxOCwwLDAsMCw5NSw3MywxMDksMTEyLDExMSwKLSAgICAxMTQsMTE2LDc2LDExMSw5OSwxMDcsNjcsMTExLDExMCwxMTYsMTAxLDEyMCwxMTYsMTY5LDUsMCwKLSAgICAwLDExNSw2LDAsMCwwLDE2LDIsNiwyLDEyLDQsMTE3LDE4LDAsMCwKLSAgICAwLDk1LDczLDEwOSwxMTIsMTExLDExNCwxMTYsNzYsMTExLDk5LDEwNyw2NywxMTEsMTEwLDExNiwKLSAgICAxMDEsMTIwLDExNiw5OSwzLDAsMCwwLDAsMCwwLDAsNSwwLDAsMCwKLSAgICA0LDAsMCwwLDY3LDAsMCwwLDExNSw5MSwwLDAsMCwxMjQsMSwwLAotICAgIDEwNiwwLDAsMTAwLDEsMCwxMjQsMiwwLDEwMCwyLDAsMjQsMTMxLDIsMCwKLSAgICAxMjUsMywwLDExNiwxLDAsMTI0LDMsMCwxMzEsMSwwLDEyNCwyLDAsMTA3LAotICAgIDAsMCwxMTQsNTUsMCwxMTYsMiwwLDEwMCwzLDAsMTMxLDEsMCwxMzAsMSwKLSAgICAwLDExMCwwLDAsMTI0LDMsMCwxMDAsNCwwLDI1LDEyNSw0LDAsMTI0LDAsCi0gICAgMCwxMTQsODcsMCwxMDAsNSwwLDEwNiwzLDAsMTI0LDQsMCwxMjQsMCwwLAotICAgIDEzMSwyLDAsODMsMTI0LDQsMCw4Myw0MCw2LDAsMCwwLDExNyw1MCwwLAotICAgIDAsMCw4MiwxMDEsMTE1LDExMSwxMDgsMTE4LDEwMSwzMiw5NywzMiwxMTQsMTAxLDEwOCw5NywKLSAgICAxMTYsMTA1LDExOCwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTEwLDk3LDEwOSwxMDEsCi0gICAgMzIsMTE2LDExMSwzMiw5NywxMTAsMzIsOTcsOTgsMTE1LDExMSwxMDgsMTE3LDExNiwxMDEsMzIsCi0gICAgMTExLDExMCwxMDEsNDYsMTE3LDEsMCwwLDAsNDYsMTA1LDEsMCwwLDAsMTE3LAotICAgIDUwLDAsMCwwLDk3LDExNiwxMTYsMTAxLDEwOSwxMTIsMTE2LDEwMSwxMDAsMzIsMTE0LDEwMSwKLSAgICAxMDgsOTcsMTE2LDEwNSwxMTgsMTAxLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDMyLDk4LDEwMSwKLSAgICAxMjEsMTExLDExMCwxMDAsMzIsMTE2LDExMSwxMTIsNDUsMTA4LDEwMSwxMTgsMTAxLDEwOCwzMiwxMTIsCi0gICAgOTcsOTksMTA3LDk3LDEwMywxMDEsMTA1LDAsMCwwLDAsMTE3LDUsMCwwLDAsCi0gICAgMTIzLDEyNSw0NiwxMjMsMTI1LDQwLDQsMCwwLDAsMTE3LDYsMCwwLDAsMTE0LAotICAgIDExNSwxMTIsMTA4LDEwNSwxMTYsMTE3LDMsMCwwLDAsMTA4LDEwMSwxMTAsMTE3LDEwLDAsCi0gICAgMCwwLDg2LDk3LDEwOCwxMTcsMTAxLDY5LDExNCwxMTQsMTExLDExNCwxMTcsNiwwLDAsCi0gICAgMCwxMDIsMTExLDExNCwxMDksOTcsMTE2LDQwLDUsMCwwLDAsMTE3LDQsMCwwLAotICAgIDAsMTEwLDk3LDEwOSwxMDEsMTE3LDcsMCwwLDAsMTEyLDk3LDk5LDEwNyw5NywxMDMsCi0gICAgMTAxLDExNyw1LDAsMCwwLDEwOCwxMDEsMTE4LDEwMSwxMDgsMTE3LDQsMCwwLDAsCi0gICAgOTgsMTA1LDExNiwxMTUsMTE3LDQsMCwwLDAsOTgsOTcsMTE1LDEwMSw0MCwwLDAsCi0gICAgMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLAotICAgIDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsCi0gICAgMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxMywwLDAsMCw5NSwxMTQsCi0gICAgMTAxLDExNSwxMTEsMTA4LDExOCwxMDEsOTUsMTEwLDk3LDEwOSwxMDEsMTgyLDUsMCwwLDExNSwKLSAgICAxMCwwLDAsMCwwLDIsMjIsMSwxOCwxLDE1LDEsMTAsMSwxMTcsMTMsCi0gICAgMCwwLDAsOTUsMTE0LDEwMSwxMTUsMTExLDEwOCwxMTgsMTAxLDk1LDExMCw5NywxMDksMTAxLAotICAgIDk5LDIsMCwwLDAsMCwwLDAsMCw0LDAsMCwwLDExLDAsMCwKLSAgICAwLDY3LDAsMCwwLDExNSwxMzgsMCwwLDAsMTE2LDAsMCwxMDYsMSwwLAotICAgIDExNSwyOCwwLDExNiwyLDAsMTA2LDMsMCwxMDAsMSwwLDExNiw0LDAsMTMxLAotICAgIDIsMCwxLDExMCwwLDAsMTIwLDEwMywwLDExNiwwLDAsMTA2LDEsMCw2OCwKLSAgICA5Myw4OCwwLDEyNSwyLDAsMTE2LDUsMCwxMzEsMCwwLDE0MywyMywwLDEsCi0gICAgMTI0LDIsMCwxMDYsNiwwLDEyNCwwLDAsMTI0LDEsMCwxMzEsMiwwLDEyNSwKLSAgICAzLDAsODcsMTAwLDIsMCw4MSw4OCwxMjQsMywwLDEwMCwyLDAsMTA3LDksCi0gICAgMCwxMTQsMzgsMCwxMjQsMCwwLDExNiwwLDAsMTA2LDgsMCwxMDcsNywwLAotICAgIDExNCwxMDksMCwxMjQsMywwLDgzLDExNiwwLDAsMTA2LDgsMCwxMjQsMCwwLAotICAgIDI1LDEwNiw5LDAsODMsMTEzLDM4LDAsMTEzLDM4LDAsODcsMTAwLDIsMCw4MywKLSAgICAxMDAsMiwwLDgzLDQwLDMsMCwwLDAsMTE3LDIzLDAsMCwwLDcwLDEwNSwKLSAgICAxMTAsMTAwLDMyLDk3LDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDM5LDExNSwzMiwxMDgsMTExLAotICAgIDk3LDEwMCwxMDEsMTE0LDQ2LDExNywyMiwwLDAsMCwxMTUsMTIxLDExNSw0NiwxMDksMTAxLAotICAgIDExNiw5Nyw5NSwxMTIsOTcsMTE2LDEwNCwzMiwxMDUsMTE1LDMyLDEwMSwxMDksMTEyLDExNiwxMjEsCi0gICAgNzgsNDAsMTAsMCwwLDAsMTE3LDMsMCwwLDAsMTE1LDEyMSwxMTUsMTE3LDksCi0gICAgMCwwLDAsMTA5LDEwMSwxMTYsOTcsOTUsMTEyLDk3LDExNiwxMDQsMTE3LDksMCwwLAotICAgIDAsOTUsMTE5LDk3LDExNCwxMTAsMTA1LDExMCwxMDMsMTE1LDExNyw0LDAsMCwwLDExOSwKLSAgICA5NywxMTQsMTEwLDExNywxMywwLDAsMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDg3LDk3LAotICAgIDExNCwxMTAsMTA1LDExMCwxMDMsMTE3LDE4LDAsMCwwLDk1LDczLDEwOSwxMTIsMTExLDExNCwKLSAgICAxMTYsNzYsMTExLDk5LDEwNyw2NywxMTEsMTEwLDExNiwxMDEsMTIwLDExNiwxMTcsMTEsMCwwLAotICAgIDAsMTAyLDEwNSwxMTAsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNyw0LDAsMCwKLSAgICAwLDc4LDExMSwxMTAsMTAxLDExNyw3LDAsMCwwLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAotICAgIDExNSwxMTcsMTAsMCwwLDAsOTUsOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCw5NSw5NSwKLSAgICA0MCw0LDAsMCwwLDExNyw0LDAsMCwwLDExMCw5NywxMDksMTAxLDExNyw0LAotICAgIDAsMCwwLDExMiw5NywxMTYsMTA0LDExNyw2LDAsMCwwLDEwMiwxMDUsMTEwLDEwMCwKLSAgICAxMDEsMTE0LDExNyw2LDAsMCwwLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsNDAsMCwwLAotICAgIDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwKLSAgICAxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LAotICAgIDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTIsMCwwLDAsOTUsMTAyLAotICAgIDEwNSwxMTAsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDE5MSw1LDAsMCwxMTUsMjAsCi0gICAgMCwwLDAsMCwyLDksMSwxOSwxLDE2LDEsMTAsMSwyNCwxLDEyLAotICAgIDIsMTUsMSw0LDIsMjEsMiwxMTcsMTIsMCwwLDAsOTUsMTAyLDEwNSwxMTAsCi0gICAgMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk5LDMsMCwwLDAsMCwwLDAsCisgICAgNTQsOCwwLDAsMTE1LDYsMCwwLDAsMCwyLDEyLDEsMjEsMSwxMjIsCisgICAgNTQsNzAsMTA1LDEwOCwxMDEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCw0NiwxMTIsOTcsMTE2LDEwNCwKKyAgICA5NSwxMDQsMTExLDExMSwxMDcsNDYsNjAsMTA4LDExMSw5OSw5NywxMDgsMTE1LDYyLDQ2LDExMiwKKyAgICA5NywxMTYsMTA0LDk1LDEwNCwxMTEsMTExLDEwNyw5NSwxMDIsMTExLDExNCw5NSw3MCwxMDUsMTA4LAorICAgIDEwMSw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDExNCw0LDAsMCwwLDQxLDMsMTE0LDEyLAorICAgIDEsMCwwLDExNCw5MywxLDAsMCwxMTQsMTAwLDEsMCwwLDExNCw0LDAsCisgICAgMCwwLDQxLDIsMTE0LDEyLDEsMCwwLDExNCw5MywxLDAsMCwxMTQsNSwKKyAgICAwLDAsMCwyMTgsOSwxMTIsOTcsMTE2LDEwNCw5NSwxMDQsMTExLDExMSwxMDcsNDQsOCwKKyAgICAwLDAsMTE1LDQsMCwwLDAsMCwxMCwyMSw2LDEyMiwyMCw3MCwxMDUsMTA4LAorICAgIDEwMSw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDExMiw5NywxMTYsMTA0LDk1LDEwNCwxMTEsMTExLAorICAgIDEwNyw5OSwxLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwyLDAsCisgICAgMCwwLDY3LDAsMCwwLDExNSwxNiwwLDAsMCwxMDAsMSwwLDEwNiwwLAorICAgIDAsMTI0LDAsMCwxMDYsMSwwLDEzMSwxLDAsODMsNDEsMiw3OCwxMjIsMTYsCisgICAgNzAsMTA1LDEwOCwxMDEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCw0MCwxMjMsMzMsMTE0LDEyNSw0MSwKKyAgICA0MSwyLDExNCw0NywwLDAsMCwxMTQsMzUsMCwwLDAsNDEsMSwxMTQsNzEsCisgICAgMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwKKyAgICAwLDAsMTE0LDEwMSwwLDAsMCw2Miw4LDAsMCwxMTUsMiwwLDAsMCwKKyAgICAwLDEsMTIyLDE5LDcwLDEwNSwxMDgsMTAxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsOTUsCisgICAgOTUsMTE0LDEwMSwxMTIsMTE0LDk1LDk1LDQxLDE1LDExNCw1NywwLDAsMCwxMTQsNTYsCisgICAgMCwwLDAsMTE0LDU4LDAsMCwwLDExNCw1OSwwLDAsMCwxMTQsNzIsMCwKKyAgICAwLDAsMTE0LDc1LDEsMCwwLDExNCwxNzMsMCwwLDAsMTE0LDE1LDEsMCwKKyAgICAwLDExNCwxNjYsMCwwLDAsMTE0LDg2LDEsMCwwLDExNCwxNCwxLDAsMCwKKyAgICAxMTQsOTQsMSwwLDAsMTE0LDE5LDEsMCwwLDExNCwxMDEsMSwwLDAsMTE0LAorICAgIDEwMSwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwKKyAgICAwLDAsMCwxMTQsNSwwLDAsMCwxMTQsODcsMSwwLDAsMTc4LDcsMCwKKyAgICAwLDExNSwyMCwwLDAsMCwxMiw3LDYsMiwxMiwxNCwxMiw0LDYsMiwKKyAgICAxMiwxMiwxMiw1LDE1LDQ1LDEyLDMxLDE4LDE4LDExNCw4NywxLDAsMCw5OSwKKyAgICAwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLAorICAgIDY0LDAsMCwwLDExNSw0NiwwLDAsMCwxMDEsMCwwLDkwLDEsMCwxMDAsCisgICAgMCwwLDkwLDIsMCwxMDAsMSwwLDkwLDMsMCwxMDAsMiwwLDEwMCwzLAorICAgIDAsMTMyLDAsMCw5MCw0LDAsMTAwLDQsMCwxMDAsNSwwLDEzMiwwLDAsCisgICAgOTAsNSwwLDEwMCw2LDAsODMsNDEsNywyMTgsMTgsOTUsNzMsMTA5LDExMiwxMTEsCisgICAgMTE0LDExNiw3NiwxMTEsOTksMTA3LDY3LDExMSwxMTAsMTE2LDEwMSwxMjAsMTE2LDEyMiwzNiw2NywKKyAgICAxMTEsMTEwLDExNiwxMDEsMTIwLDExNiwzMiwxMDksOTcsMTEwLDk3LDEwMywxMDEsMTE0LDMyLDEwMiwKKyAgICAxMTEsMTE0LDMyLDExNiwxMDQsMTAxLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDMyLDEwOCwxMTEsCisgICAgOTksMTA3LDQ2LDk5LDEsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLAorICAgIDEsMCwwLDAsNjcsMCwwLDAsMTE1LDE0LDAsMCwwLDExNiwwLDAsCisgICAgMTA2LDEsMCwxMzEsMCwwLDEsMTAwLDEsMCw4Myw0MSwyLDEyMiwyNCw2NSwKKyAgICA5OSwxMTMsMTE3LDEwNSwxMTQsMTAxLDMyLDExNiwxMDQsMTAxLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsCisgICAgMTE2LDMyLDEwOCwxMTEsOTksMTA3LDQ2LDc4LDQxLDIsMTE0LDEwNiwwLDAsMCwxMTQsCisgICAgNCwxLDAsMCw0MSwxLDExNCw3MSwwLDAsMCwxMTQsNCwwLDAsMCwKKyAgICAxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsNzUsMCwwLDAsNzIsCisgICAgOCwwLDAsMTE1LDIsMCwwLDAsMCwyLDEyMiwyOCw5NSw3MywxMDksMTEyLAorICAgIDExMSwxMTQsMTE2LDc2LDExMSw5OSwxMDcsNjcsMTExLDExMCwxMTYsMTAxLDEyMCwxMTYsNDYsOTUsCisgICAgOTUsMTAxLDExMCwxMTYsMTAxLDExNCw5NSw5NSw5OSw0LDAsMCwwLDAsMCwwLAorICAgIDAsNCwwLDAsMCwxLDAsMCwwLDY3LDAsMCwwLDExNSwxNCwwLAorICAgIDAsMCwxMTYsMCwwLDEwNiwxLDAsMTMxLDAsMCwxLDEwMCwxLDAsODMsCisgICAgNDEsMiwxMjIsNjAsODIsMTAxLDEwOCwxMDEsOTcsMTE1LDEwMSwzMiwxMTYsMTA0LDEwMSwzMiwKKyAgICAxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwzMiwxMDgsMTExLDk5LDEwNywzMiwxMTQsMTAxLDEwMyw5NywKKyAgICAxMTQsMTAwLDEwOCwxMDEsMTE1LDExNSwzMiwxMTEsMTAyLDMyLDk3LDExMCwxMjEsMzIsMTE0LDk3LAorICAgIDEwNSwxMTUsMTAxLDEwMCwzMiwxMDEsMTIwLDk5LDEwMSwxMTIsMTE2LDEwNSwxMTEsMTEwLDExNSw0NiwKKyAgICA3OCw0MSwyLDExNCwxMDYsMCwwLDAsMTE0LDEwNywwLDAsMCw0MSw0LDExNCwKKyAgICA3MSwwLDAsMCw5MCw4LDEwMSwxMjAsOTksOTUsMTE2LDEyMSwxMTIsMTAxLDkwLDksCisgICAgMTAxLDEyMCw5OSw5NSwxMTgsOTcsMTA4LDExNywxMDEsOTAsMTMsMTAxLDEyMCw5OSw5NSwxMTYsCisgICAgMTE0LDk3LDk5LDEwMSw5OCw5Nyw5OSwxMDcsMTE0LDQsMCwwLDAsMTE0LDQsMCwKKyAgICAwLDAsMTE0LDUsMCwwLDAsMTE0LDgxLDAsMCwwLDc2LDgsMCwwLAorICAgIDExNSwyLDAsMCwwLDAsMiwxMjIsMjcsOTUsNzMsMTA5LDExMiwxMTEsMTE0LDExNiwKKyAgICA3NiwxMTEsOTksMTA3LDY3LDExMSwxMTAsMTE2LDEwMSwxMjAsMTE2LDQ2LDk1LDk1LDEwMSwxMjAsCisgICAgMTA1LDExNiw5NSw5NSw3OCw0MSw2LDExNCw1NywwLDAsMCwxMTQsNTYsMCwwLAorICAgIDAsMTE0LDU4LDAsMCwwLDExNCw1OSwwLDAsMCwxMTQsNzUsMCwwLDAsCisgICAgMTE0LDgxLDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCwKKyAgICA0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwxMDIsMSwwLDAsNjgsOCwKKyAgICAwLDAsMTE1LDYsMCwwLDAsMTIsMiw2LDIsMTIsNCwxMTQsMTAyLDEsCisgICAgMCwwLDk5LDMsMCwwLDAsMCwwLDAsMCw1LDAsMCwwLDQsCisgICAgMCwwLDAsNjcsMCwwLDAsMTE1LDkxLDAsMCwwLDEyNCwxLDAsMTA2LAorICAgIDAsMCwxMDAsMSwwLDEyNCwyLDAsMTAwLDIsMCwyNCwxMzEsMiwwLDEyNSwKKyAgICAzLDAsMTE2LDEsMCwxMjQsMywwLDEzMSwxLDAsMTI0LDIsMCwxMDcsMCwKKyAgICAwLDExNCw1NSwwLDExNiwyLDAsMTAwLDMsMCwxMzEsMSwwLDEzMCwxLDAsCisgICAgMTEwLDAsMCwxMjQsMywwLDEwMCw0LDAsMjUsMTI1LDQsMCwxMjQsMCwwLAorICAgIDExNCw4NywwLDEwMCw1LDAsMTA2LDMsMCwxMjQsNCwwLDEyNCwwLDAsMTMxLAorICAgIDIsMCw4MywxMjQsNCwwLDgzLDQxLDYsMTIyLDUwLDgyLDEwMSwxMTUsMTExLDEwOCwKKyAgICAxMTgsMTAxLDMyLDk3LDMyLDExNCwxMDEsMTA4LDk3LDExNiwxMDUsMTE4LDEwMSwzMiwxMDksMTExLAorICAgIDEwMCwxMTcsMTA4LDEwMSwzMiwxMTAsOTcsMTA5LDEwMSwzMiwxMTYsMTExLDMyLDk3LDExMCwzMiwKKyAgICA5Nyw5OCwxMTUsMTExLDEwOCwxMTcsMTE2LDEwMSwzMiwxMTEsMTEwLDEwMSw0NiwxMTQsMTE2LDAsCisgICAgMCwwLDExNCwyOSwwLDAsMCwxMjIsNTAsOTcsMTE2LDExNiwxMDEsMTA5LDExMiwxMTYsCisgICAgMTAxLDEwMCwzMiwxMTQsMTAxLDEwOCw5NywxMTYsMTA1LDExOCwxMDEsMzIsMTA1LDEwOSwxMTIsMTExLAorICAgIDExNCwxMTYsMzIsOTgsMTAxLDEyMSwxMTEsMTEwLDEwMCwzMiwxMTYsMTExLDExMiw0NSwxMDgsMTAxLAorICAgIDExOCwxMDEsMTA4LDMyLDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwxMTQsODQsMCwwLDAsCisgICAgMTIyLDUsMTIzLDEyNSw0NiwxMjMsMTI1LDQxLDQsMTE0LDM0LDAsMCwwLDExNCwzMSwKKyAgICAwLDAsMCwxMTQsMTMzLDAsMCwwLDExNCw0NywwLDAsMCw0MSw1LDExNCwKKyAgICA2NywwLDAsMCwyMTgsNywxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsMjE4LDUsMTA4LAorICAgIDEwMSwxMTgsMTAxLDEwOCw5MCw0LDk4LDEwNSwxMTYsMTE1LDExNCwxMjgsMCwwLDAsMTE0LAorICAgIDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDEzLAorICAgIDk1LDExNCwxMDEsMTE1LDExMSwxMDgsMTE4LDEwMSw5NSwxMTAsOTcsMTA5LDEwMSw4MSw4LDAsCisgICAgMCwxMTUsMTAsMCwwLDAsMCwyLDIyLDEsMTgsMSwxNSwxLDEwLDEsCisgICAgMTE0LDEwNSwxLDAsMCw5OSwzLDAsMCwwLDAsMCwwLDAsNCwwLAorICAgIDAsMCwzLDAsMCwwLDY3LDAsMCwwLDExNSw0NywwLDAsMCwxMjQsCisgICAgMCwwLDEwNiwwLDAsMTI0LDEsMCwxMjQsMiwwLDEzMSwyLDAsMTI1LDMsCisgICAgMCwxMjQsMywwLDEwMCwwLDAsMTA3LDgsMCwxMTQsMzQsMCwxMDAsMCwwLAorICAgIDgzLDExNiwxLDAsMTI0LDEsMCwxMjQsMywwLDEzMSwyLDAsODMsNDEsMSwKKyAgICA3OCw0MSwyLDExNCwxNSwxLDAsMCwxMTQsMTc0LDAsMCwwLDQxLDQsMTE0LAorICAgIDc4LDEsMCwwLDExNCw2NywwLDAsMCwxMTQsMzUsMCwwLDAsMTE0LDE3MCwKKyAgICAwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLAorICAgIDAsMCwyMTgsMTcsOTUsMTAyLDEwNSwxMTAsMTAwLDk1LDExNSwxMTIsMTAxLDk5LDk1LDEwOCwKKyAgICAxMDEsMTAzLDk3LDk5LDEyMSw5MCw4LDAsMCwxMTUsOCwwLDAsMCwwLDMsCisgICAgMTgsMSwxMiwxLDQsMSwxMTQsMTA2LDEsMCwwLDk5LDMsMCwwLDAsCisgICAgMCwwLDAsMCw5LDAsMCwwLDI2LDAsMCwwLDY3LDAsMCwwLAorICAgIDExNSwzNCwxLDAsMCwxMTYsMCwwLDEwNiwxLDAsMTE1LDI4LDAsMTE2LDIsCisgICAgMCwxMDYsMywwLDEwMCwxLDAsMTE2LDQsMCwxMzEsMiwwLDEsMTEwLDAsCisgICAgMCwxMjQsMCwwLDExNiwwLDAsMTA2LDUsMCwxMDcsNiwwLDEyNSwzLDAsCisgICAgMTIwLDI0MCwwLDExNiwwLDAsMTA2LDEsMCw2OCw5MywyMjUsMCwxMjUsNCwwLAorICAgIDExNiw2LDAsMTMxLDAsMCwxNDMsOTMsMCwxLDEyMSwxMywwLDEyNCw0LDAsCisgICAgMTA2LDcsMCwxMjUsNSwwLDg3LDExMCw1NCwwLDQsMTE2LDgsMCwxMDcsMTAsCisgICAgMCwxMTQsMTM4LDAsMSwxLDEsMTE2LDksMCwxMjQsNCwwLDEyNCwwLDAsCisgICAgMTI0LDEsMCwxMzEsMywwLDEyNSw2LDAsMTI0LDYsMCwxMDAsMiwwLDEwNywKKyAgICA4LDAsMTE0LDEzNCwwLDExOSw1MywwLDExMCwwLDAsODksMTEwLDE5LDAsODgsCisgICAgMTI0LDUsMCwxMjQsMCwwLDEyNCwxLDAsMTI0LDIsMCwxMzEsMywwLDEyNSwKKyAgICA2LDAsODcsMTAwLDIsMCw4MSw4OCwxMjQsNiwwLDEwMCwyLDAsMTA3LDksCisgICAgMCwxMTQsNTMsMCwxMjQsMywwLDEyLDExNCwxNSwxLDEyNCwwLDAsMTE2LDAsCisgICAgMCwxMDYsNSwwLDEwNyw2LDAsMTE0LDE1LDEsMTE2LDAsMCwxMDYsNSwwLAorICAgIDEyNCwwLDAsMjUsMTI1LDcsMCwxMjEsMTMsMCwxMjQsNywwLDEwNiwxMCwwLAorICAgIDEyNSw4LDAsODcsMTEwLDIyLDAsNCwxMTYsOCwwLDEwNywxMCwwLDExNCwyNDcsCisgICAgMCwxLDEsMSwxMjQsNiwwLDgzLDg5LDExMywxOSwxLDg4LDEyNCw4LDAsCisgICAgMTAwLDIsMCwxMDcsOCwwLDExNCw4LDEsMTI0LDYsMCw4MywxMjQsOCwwLAorICAgIDgzLDExMywyMiwxLDEyNCw2LDAsODMsMTEzLDUzLDAsMTEzLDUzLDAsODcsMTAwLAorICAgIDIsMCw4MywxMDAsMiwwLDgzLDQxLDMsMTIyLDIzLDcwLDEwNSwxMTAsMTAwLDMyLAorICAgIDk3LDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDM5LDExNSwzMiwxMDgsMTExLDk3LDEwMCwxMDEsCisgICAgMTE0LDQ2LDEyMiwyMiwxMTUsMTIxLDExNSw0NiwxMDksMTAxLDExNiw5Nyw5NSwxMTIsOTcsMTE2LAorICAgIDEwNCwzMiwxMDUsMTE1LDMyLDEwMSwxMDksMTEyLDExNiwxMjEsNzgsNDEsMTEsMTE0LDcsMCwKKyAgICAwLDAsMjE4LDksMTA5LDEwMSwxMTYsOTcsOTUsMTEyLDk3LDExNiwxMDQsMTE0LDE2NywwLAorICAgIDAsMCwxMTQsMTY4LDAsMCwwLDExNCwxNjksMCwwLDAsMTE0LDczLDAsMCwKKyAgICAwLDExNCwxMDIsMSwwLDAsMTE0LDE0LDEsMCwwLDExNCwyMTAsMCwwLDAsCisgICAgMTE0LDEwNiwxLDAsMCwxMTQsMjA5LDAsMCwwLDQxLDksMTE0LDY3LDAsMCwKKyAgICAwLDExNCwzNSwwLDAsMCwxMTQsMTMsMSwwLDAsOTAsOSwxMDUsMTE1LDk1LAorICAgIDExNCwxMDEsMTA4LDExMSw5NywxMDAsMTE0LDc4LDEsMCwwLDExNCwxNCwxLDAsMCwKKyAgICAxMTQsMTc4LDAsMCwwLDExNCwxODAsMCwwLDAsMTE0LDIwOSwwLDAsMCwxMTQsCisgICAgNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMTAsCisgICAgOTUsMTAyLDEwNSwxMTAsMTAwLDk1LDExNSwxMTIsMTAxLDk5LDk5LDgsMCwwLDExNSw0OCwKKyAgICAwLDAsMCwwLDIsOSwxLDE5LDQsMTUsMSwxNiwxLDEwLDEsMywKKyAgICAxLDEzLDEsMTMsMSwxOCwxLDEyLDEsMTEsMiwyNCwxLDEyLDIsMjIsCisgICAgMSwxMywxLDMsMSwxMywxLDEzLDQsOSwyLDEyLDEsNCwyLDcsCisgICAgMiwxMSwyLDExNCwxMDgsMSwwLDAsOTksMywwLDAsMCwwLDAsMCwKICAgICAwLDQsMCwwLDAsNCwwLDAsMCw2NywwLDAsMCwxMTUsMTk0LDAsCiAgICAgMCwwLDExNiwwLDAsMTI0LDAsMCwxMTYsMSwwLDEzMSwyLDAsMTE1LDQ1LAogICAgIDAsMTE2LDIsMCwxMDAsMSwwLDEwNiwzLDAsMTE2LDQsMCwxMjQsMCwwLApAQCAtMzczNyw0NDYgKzM5MDgsMzM2IEBACiAgICAgMSwwLDEzMSwxLDAsMTMwLDEsMCwxMTMsMTU2LDAsMTEwLDAsMCwxMjQsMCwKICAgICAwLDEyLDExNCwxOTAsMCwxMjQsMiwwLDEwMCwyLDAsMTA3LDIsMCwxMTQsMTkwLAogICAgIDAsMTE2LDUsMCwxMDAsNiwwLDEzMSwxLDAsMTMwLDEsMCwxMTAsMCwwLAotICAgIDEwMCw3LDAsODMsNDAsOCwwLDAsMCwxMTcsMjgsMCwwLDAsODYsMTAxLAotICAgIDExNCwxMDUsMTAyLDEyMSwzMiw5NywxMTQsMTAzLDExNywxMDksMTAxLDExMCwxMTYsMTE1LDMyLDk3LAotICAgIDExNCwxMDEsMzIsMzQsMTE1LDk3LDExMCwxMDEsMzQsNDYsMTE3LDMxLDAsMCwwLDEwOSwKLSAgICAxMTEsMTAwLDExNywxMDgsMTAxLDMyLDExMCw5NywxMDksMTAxLDMyLDEwOSwxMTcsMTE1LDExNiwzMiwKLSAgICA5OCwxMDEsMzIsMTE1LDExNiwxMTQsNDQsMzIsMTEwLDExMSwxMTYsMzIsMTIzLDEyNSwxMDUsMCwKLSAgICAwLDAsMCwxMTcsMTgsMCwwLDAsMTA4LDEwMSwxMTgsMTAxLDEwOCwzMiwxMDksMTE3LAotICAgIDExNSwxMTYsMzIsOTgsMTAxLDMyLDYyLDYxLDMyLDQ4LDExNywzMSwwLDAsMCw5NSwKLSAgICA5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsOTUsOTUsMzIsMTEwLDExMSwxMTYsMzIsMTE1LAotICAgIDEwMSwxMTYsMzIsMTE2LDExMSwzMiw5NywzMiwxMTUsMTE2LDExNCwxMDUsMTEwLDEwMywxMTcsNjEsCi0gICAgMCwwLDAsODAsOTcsMTE0LDEwMSwxMTAsMTE2LDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAotICAgIDMyLDEyMywzMywxMTQsMTI1LDMyLDExMCwxMTEsMTE2LDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwxMDAsCi0gICAgNDQsMzIsOTksOTcsMTEwLDExMCwxMTEsMTE2LDMyLDExMiwxMDEsMTE0LDEwMiwxMTEsMTE0LDEwOSwKLSAgICAzMiwxMTQsMTAxLDEwOCw5NywxMTYsMTA1LDExOCwxMDEsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsCi0gICAgMTE3LDE3LDAsMCwwLDY5LDEwOSwxMTIsMTE2LDEyMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LAotICAgIDEwMSwzMiwxMTAsOTcsMTA5LDEwMSw3OCw0MCw5LDAsMCwwLDExNywxMCwwLDAsCi0gICAgMCwxMDUsMTE1LDEwNSwxMTAsMTE1LDExNiw5NywxMTAsOTksMTAxLDExNywzLDAsMCwwLAotICAgIDExNSwxMTYsMTE0LDExNyw5LDAsMCwwLDg0LDEyMSwxMTIsMTAxLDY5LDExNCwxMTQsMTExLAotICAgIDExNCwxMTcsNiwwLDAsMCwxMDIsMTExLDExNCwxMDksOTcsMTE2LDExNyw0LDAsMCwKLSAgICAwLDExNiwxMjEsMTEyLDEwMSwxMTcsMTAsMCwwLDAsODYsOTcsMTA4LDExNywxMDEsNjksCi0gICAgMTE0LDExNCwxMTEsMTE0LDExNywzLDAsMCwwLDExNSwxMjEsMTE1LDExNyw3LDAsMCwKLSAgICAwLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNSwxMTcsMTEsMCwwLDAsODMsMTIxLDExNSwKLSAgICAxMTYsMTAxLDEwOSw2OSwxMTQsMTE0LDExMSwxMTQsNDAsNCwwLDAsMCwxMTcsNCwwLAotICAgIDAsMCwxMTAsOTcsMTA5LDEwMSwxMTcsNywwLDAsMCwxMTIsOTcsOTksMTA3LDk3LAotICAgIDEwMywxMDEsMTE3LDUsMCwwLDAsMTA4LDEwMSwxMTgsMTAxLDEwOCwxMTcsMywwLDAsCi0gICAgMCwxMDksMTE1LDEwMyw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LAotICAgIDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsCi0gICAgMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLAotICAgIDExNywxMywwLDAsMCw5NSwxMTUsOTcsMTEwLDEwNSwxMTYsMTIxLDk1LDk5LDEwNCwxMDEsCi0gICAgOTksMTA3LDIwOCw1LDAsMCwxMTUsMjQsMCwwLDAsMCwyLDE1LDEsMzAsCi0gICAgMSwxMiwxLDE1LDEsNiwxLDE1LDEsMTUsMSwxNSwxLDYsMiwyNywKLSAgICAxLDE5LDEsMTE3LDEzLDAsMCwwLDk1LDExNSw5NywxMTAsMTA1LDExNiwxMjEsOTUsCi0gICAgOTksMTA0LDEwMSw5OSwxMDcsMTE3LDIwLDAsMCwwLDc4LDExMSwzMiwxMDksMTExLDEwMCwKLSAgICAxMTcsMTA4LDEwMSwzMiwxMTAsOTcsMTA5LDEwMSwxMDAsMzIsMTIzLDMzLDExNCwxMjUsOTksMiwKLSAgICAwLDAsMCwwLDAsMCwwLDksMCwwLDAsMjcsMCwwLDAsNjcsCi0gICAgMCwwLDAsMTE1LDEyLDIsMCwwLDEwMCwwLDAsMTI1LDIsMCwxMjQsMCwKLSAgICAwLDEwNiwxLDAsMTAwLDEsMCwxMzEsMSwwLDEwMCwyLDAsMjUsMTI1LDMsCi0gICAgMCwxMjQsMywwLDExNCwxNzgsMCwxMjQsMywwLDExNiwyLDAsMTA2LDMsMCwKLSAgICAxMDcsNywwLDExNCw2MiwwLDExNiw0LDAsMTI0LDEsMCwxMjQsMywwLDEzMSwKLSAgICAyLDAsMSwxMTAsMCwwLDEyNCwwLDAsMTE2LDIsMCwxMDYsMywwLDEwNywKLSAgICA2LDAsMTE0LDg4LDAsMTE2LDIsMCwxMDYsMywwLDEyNCwwLDAsMjUsODMsCi0gICAgMTE2LDIsMCwxMDYsMywwLDEyNCwzLDAsMjUsMTI1LDQsMCwxMjEsMTMsMCwKLSAgICAxMjQsNCwwLDEwNiw1LDAsMTI1LDIsMCw4NywxMTMsMTc4LDAsNCwxMTYsNiwKLSAgICAwLDEwNywxMCwwLDExNCwxNzQsMCwxLDEsMSwxMTYsNywwLDEwMCwzLDAsCi0gICAgMjMsMTA2LDgsMCwxMjQsMCwwLDEyNCwzLDAsMTMxLDIsMCwxMjUsNSwwLAotICAgIDExNiw5LDAsMTI0LDUsMCwxMDAsNCwwLDEyNCwwLDAsMTMxLDEsMSwxMzAsCi0gICAgMSwwLDg5LDExMywxNzgsMCw4OCwxMTAsMCwwLDExNiwxMCwwLDEyNCwwLDAsCi0gICAgMTI0LDIsMCwxMzEsMiwwLDEyNSw2LDAsMTI0LDYsMCwxMDAsMCwwLDEwNywKLSAgICA4LDAsMTE0LDI1MCwwLDExNiw5LDAsMTE2LDcsMCwxMDYsOCwwLDEyNCwwLAotICAgIDAsMTMxLDEsMCwxMDAsNCwwLDEyNCwwLDAsMTMxLDEsMSwxMjUsNywwLAotICAgIDEwMCwxMCwwLDEyNCw3LDAsOTUsMTIsMCwxMjQsNywwLDEzMCwxLDAsMTEwLAotICAgIDQ3LDAsMTI0LDAsMCwxMTYsMiwwLDEwNiwzLDAsMTA3LDcsMCwxMTQsNDEsCi0gICAgMSwxMjQsNiwwLDEwNiwxMywwLDEyNCwwLDAsMTMxLDEsMCwxLDExNiwxNCwKLSAgICAwLDEwMCw1LDAsMTI0LDAsMCwxMjQsNiwwLDEzMSwzLDAsMSwxMTAsMCwKLSAgICAwLDExNiwyLDAsMTA2LDMsMCwxMjQsMCwwLDI1LDEyNSw4LDAsMTI0LDMsCi0gICAgMCwxMTQsMTA1LDEsMTE2LDIsMCwxMDYsMywwLDEyNCwzLDAsMjUsMTI1LDQsCi0gICAgMCwxMTYsMTUsMCwxMjQsNCwwLDEyNCwwLDAsMTA2LDEsMCwxMDAsMSwwLAotICAgIDEzMSwxLDAsMTAwLDYsMCwyNSwxMjQsOCwwLDEzMSwzLDAsMSwxMTAsMCwKLSAgICAwLDExNiwxNiwwLDEyNCw4LDAsMTAwLDcsMCwxMDAsMCwwLDEzMSwzLDAsCi0gICAgMTAwLDAsMCwxMDcsOCwwLDExNCwyMTIsMSwxMjEsNTksMCwxMjQsOCwwLDEwNiwKLSAgICAxNywwLDEyNCw4LDAsOTUsMTgsMCwxMTYsMTksMCwxMjQsOCwwLDEwMCw4LAotICAgIDAsMTMxLDIsMCwxMTUsMTg3LDEsMTI0LDgsMCwxMDYsMTgsMCwxMDYsMSwwLAotICAgIDEwMCwxLDAsMTMxLDEsMCwxMDAsMiwwLDI1LDEyNCw4LDAsOTUsMTgsMCwKLSAgICAxMTAsMCwwLDg3LDExMywyMTIsMSw0LDExNiw2LDAsMTA3LDEwLDAsMTE0LDIwOCwKLSAgICAxLDEsMSwxLDg5LDExMywyMTIsMSw4OCwxMTAsMCwwLDExNiwxOSwwLDEyNCwKLSAgICA4LDAsMTAwLDksMCwxMzEsMiwwLDExNSw4LDIsMTIxLDEzLDAsMTI0LDYsCi0gICAgMCwxMjQsOCwwLDk1LDIwLDAsODcsMTEzLDgsMiw0LDExNiw2LDAsMTA3LAotICAgIDEwLDAsMTE0LDQsMiwxLDEsMSw4OSwxMTMsOCwyLDg4LDExMCwwLDAsCi0gICAgMTI0LDgsMCw4Myw0MCwxMSwwLDAsMCw3OCwxMTcsMSwwLDAsMCw0NiwKLSAgICAxMDUsMCwwLDAsMCwxMTcsMjEsMCwwLDAsNTksMzIsMTIzLDEyNSwzMiwxMDUsCi0gICAgMTE1LDMyLDExMCwxMTEsMTE2LDMyLDk3LDMyLDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwxMTcsCi0gICAgNCwwLDAsMCwxMTAsOTcsMTA5LDEwMSwxMTcsMTgsMCwwLDAsMTA1LDEwOSwxMTIsCi0gICAgMTExLDExNCwxMTYsMzIsMTIzLDMzLDExNCwxMjUsMzIsMzUsMzIsMTIzLDMzLDExNCwxMjUsMTA1LAotICAgIDIsMCwwLDAsMTE3LDExLDAsMCwwLDk1LDk1LDExMiw5Nyw5OSwxMDcsOTcsCi0gICAgMTAzLDEwMSw5NSw5NSwxMTcsOCwwLDAsMCw5NSw5NSwxMTIsOTcsMTE2LDEwNCw5NSwKLSAgICA5NSwxMTcsMTAsMCwwLDAsOTUsOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCw5NSw5NSwKLSAgICA4NCw0MCwyMSwwLDAsMCwxMTcsNCwwLDAsMCw3OCwxMTEsMTEwLDEwMSwxMTcsCi0gICAgMTAsMCwwLDAsMTE0LDExMiw5NywxMTQsMTE2LDEwNSwxMTYsMTA1LDExMSwxMTAsMTE3LDMsCi0gICAgMCwwLDAsMTE1LDEyMSwxMTUsMTE3LDcsMCwwLDAsMTA5LDExMSwxMDAsMTE3LDEwOCwKLSAgICAxMDEsMTE1LDExNywyNSwwLDAsMCw5NSw5OSw5NywxMDgsMTA4LDk1LDExOSwxMDUsMTE2LAotICAgIDEwNCw5NSwxMDIsMTE0LDk3LDEwOSwxMDEsMTE1LDk1LDExNCwxMDEsMTA5LDExMSwxMTgsMTAxLDEwMCwKLSAgICAxMTcsOCwwLDAsMCw5NSw5NSwxMTIsOTcsMTE2LDEwNCw5NSw5NSwxMTcsMTQsMCwKLSAgICAwLDAsNjUsMTE2LDExNiwxMTQsMTA1LDk4LDExNywxMTYsMTAxLDY5LDExNCwxMTQsMTExLDExNCwKLSAgICAxMTcsOCwwLDAsMCw5NSw2OSw4Miw4Miw5NSw3Nyw4Myw3MSwxMTcsNiwwLAotICAgIDAsMCwxMDIsMTExLDExNCwxMDksOTcsMTE2LDExNywxMSwwLDAsMCw3MywxMDksMTEyLAotICAgIDExMSwxMTQsMTE2LDY5LDExNCwxMTQsMTExLDExNCwxMTcsMTIsMCwwLDAsOTUsMTAyLDEwNSwKLSAgICAxMTAsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNyw0LDAsMCwwLDg0LDExNCwKLSAgICAxMTcsMTAxLDExNywxMCwwLDAsMCw5NSwxMTAsMTExLDExNiw5NSwxMDIsMTExLDExNywxMTAsCi0gICAgMTAwLDExNywxMSwwLDAsMCwxMDgsMTExLDk3LDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LAotICAgIDEwMSwxMTcsMTYsMCwwLDAsOTUsMTE4LDEwMSwxMTQsOTgsMTExLDExNSwxMDEsOTUsMTA5LAotICAgIDEwMSwxMTUsMTE1LDk3LDEwMywxMDEsMTE3LDcsMCwwLDAsMTE1LDEwMSwxMTYsOTcsMTE2LAotICAgIDExNiwxMTQsMTE3LDcsMCwwLDAsMTAzLDEwMSwxMTYsOTcsMTE2LDExNiwxMTQsMTE3LDgsCi0gICAgMCwwLDAsOTUsOTUsMTEwLDk3LDEwOSwxMDEsOTUsOTUsMTE3LDExLDAsMCwwLAotICAgIDk1LDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw5NSw5NSwxMTcsNywwLDAsMCwKLSAgICAxMDQsOTcsMTE1LDk3LDExNiwxMTYsMTE0LDExNywxMCwwLDAsMCw5NSw5NSwxMDgsMTExLAotICAgIDk3LDEwMCwxMDEsMTE0LDk1LDk1LDQwLDksMCwwLDAsMTE3LDQsMCwwLDAsCi0gICAgMTEwLDk3LDEwOSwxMDEsMTE3LDcsMCwwLDAsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsOTUsCi0gICAgMTE3LDQsMCwwLDAsMTEyLDk3LDExNiwxMDQsMTE3LDYsMCwwLDAsMTEyLDk3LAotICAgIDExNCwxMDEsMTEwLDExNiwxMTcsMTMsMCwwLDAsMTEyLDk3LDExNCwxMDEsMTEwLDExNiw5NSwKLSAgICAxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTcsMywwLDAsMCwxMDksMTE1LDEwMywxMTcsNiwKLSAgICAwLDAsMCwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDExNywzLDAsMCwwLDEwMSwxMjAsCi0gICAgOTksMTE3LDYsMCwwLDAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDAsMCwwLDAsCi0gICAgMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsCi0gICAgMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwKLSAgICAxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMjMsMCwwLDAsOTUsMTAyLDEwNSwKLSAgICAxMTAsMTAwLDk1LDk3LDExMCwxMDAsOTUsMTA4LDExMSw5NywxMDAsOTUsMTE3LDExMCwxMDgsMTExLAotICAgIDk5LDEwNywxMDEsMTAwLDIyNyw1LDAsMCwxMTUsNzYsMCwwLDAsMCwxLDYsCi0gICAgMSwxOSwxLDYsMSwxNSwxLDE2LDIsMTUsMSwxMSwyLDEzLDEsMywKLSAgICAxLDEzLDEsMTMsMSwyMiwxLDI2LDEsMTUsMSwxMiwxLDI3LDMsOSwKLSAgICAxLDksMSwxNSwyLDEzLDEsMTksMiwxMywxLDYsMiwxMywxLDMyLAotICAgIDIsMjQsMSwzLDEsMTIsMSwxNSwxLDMyLDEsMTMsMSw4LDIsMTUsCi0gICAgMSwzLDEsMTMsMSwxMywxLDgsMSwxMTcsMjMsMCwwLDAsOTUsMTAyLAotICAgIDEwNSwxMTAsMTAwLDk1LDk3LDExMCwxMDAsOTUsMTA4LDExMSw5NywxMDAsOTUsMTE3LDExMCwxMDgsCi0gICAgMTExLDk5LDEwNywxMDEsMTAwLDk5LDIsMCwwLDAsMCwwLDAsMCwzLDAsCi0gICAgMCwwLDE4LDAsMCwwLDY3LDAsMCwwLDExNSw3NSwwLDAsMCwxMjIsCi0gICAgMTYsMCwxMTYsMCwwLDEyNCwwLDAsMTMxLDEsMCwxMjUsMiwwLDg3LDEwMCwKLSAgICAxLDAsMTE2LDEsMCwxMDYsMiwwLDEzMSwwLDAsMSw4OCwxMjQsMiwwLAotICAgIDEwNiwzLDAsMTMxLDAsMCwxLDEyMiwxNywwLDExNiw0LDAsMTI0LDAsMCwKLSAgICAxMjQsMSwwLDEzMSwyLDAsODMsODcsMTAwLDEsMCwxMjQsMiwwLDEwNiw1LAotICAgIDAsMTMxLDAsMCwxLDg4LDEwMCwxLDAsODMsNDAsMiwwLDAsMCwxMTcsCi0gICAgNTQsMCwwLDAsNzAsMTA1LDExMCwxMDAsMzIsOTcsMTEwLDEwMCwzMiwxMDgsMTExLDk3LAotICAgIDEwMCwzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0NCwzMiw5NywxMTAsCi0gICAgMTAwLDMyLDExNCwxMDEsMTA4LDEwMSw5NywxMTUsMTAxLDMyLDExNiwxMDQsMTAxLDMyLDEwNSwxMDksCi0gICAgMTEyLDExMSwxMTQsMTE2LDMyLDEwOCwxMTEsOTksMTA3LDQ2LDc4LDQwLDYsMCwwLDAsCi0gICAgMTE3LDE2LDAsMCwwLDk1LDEwMywxMDEsMTE2LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAotICAgIDk1LDEwOCwxMTEsOTksMTA3LDExNyw0LDAsMCwwLDk1LDEwNSwxMDksMTEyLDExNywxMiwKLSAgICAwLDAsMCwxMTQsMTAxLDEwOCwxMDEsOTcsMTE1LDEwMSw5NSwxMDgsMTExLDk5LDEwNywxMTcsCi0gICAgNywwLDAsMCw5Nyw5OSwxMTMsMTE3LDEwNSwxMTQsMTAxLDExNywyMywwLDAsMCwKKyAgICAxMDAsNywwLDgzLDQxLDgsMTIyLDI4LDg2LDEwMSwxMTQsMTA1LDEwMiwxMjEsMzIsOTcsCisgICAgMTE0LDEwMywxMTcsMTA5LDEwMSwxMTAsMTE2LDExNSwzMiw5NywxMTQsMTAxLDMyLDM0LDExNSw5NywKKyAgICAxMTAsMTAxLDM0LDQ2LDEyMiwzMSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMTAsOTcsMTA5LAorICAgIDEwMSwzMiwxMDksMTE3LDExNSwxMTYsMzIsOTgsMTAxLDMyLDExNSwxMTYsMTE0LDQ0LDMyLDExMCwKKyAgICAxMTEsMTE2LDMyLDEyMywxMjUsMTE0LDg0LDAsMCwwLDEyMiwxOCwxMDgsMTAxLDExOCwxMDEsCisgICAgMTA4LDMyLDEwOSwxMTcsMTE1LDExNiwzMiw5OCwxMDEsMzIsNjIsNjEsMzIsNDgsMTIyLDMxLAorICAgIDk1LDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw5NSw5NSwzMiwxMTAsMTExLDExNiwzMiwKKyAgICAxMTUsMTAxLDExNiwzMiwxMTYsMTExLDMyLDk3LDMyLDExNSwxMTYsMTE0LDEwNSwxMTAsMTAzLDEyMiwKKyAgICA2MSw4MCw5NywxMTQsMTAxLDExMCwxMTYsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTIzLAorICAgIDMzLDExNCwxMjUsMzIsMTEwLDExMSwxMTYsMzIsMTA4LDExMSw5NywxMDAsMTAxLDEwMCw0NCwzMiwKKyAgICA5OSw5NywxMTAsMTEwLDExMSwxMTYsMzIsMTEyLDEwMSwxMTQsMTAyLDExMSwxMTQsMTA5LDMyLDExNCwKKyAgICAxMDEsMTA4LDk3LDExNiwxMDUsMTE4LDEwMSwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMjIsMTcsCisgICAgNjksMTA5LDExMiwxMTYsMTIxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDExMCw5NywxMDksCisgICAgMTAxLDc4LDQxLDksMTE0LDE5MywwLDAsMCwxMTQsODMsMSwwLDAsMjE4LDksCisgICAgODQsMTIxLDExMiwxMDEsNjksMTE0LDExNCwxMTEsMTE0LDExNCw0NywwLDAsMCwxMTQsNjYsCisgICAgMCwwLDAsMTE0LDEzMywwLDAsMCwxMTQsNywwLDAsMCwxMTQsNzMsMCwKKyAgICAwLDAsMjE4LDExLDgzLDEyMSwxMTUsMTE2LDEwMSwxMDksNjksMTE0LDExNCwxMTEsMTE0LDQxLAorICAgIDQsMTE0LDY3LDAsMCwwLDExNCwxMDMsMSwwLDAsMTE0LDEwNCwxLDAsMCwKKyAgICAxMTQsMTcyLDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCwKKyAgICA1LDAsMCwwLDIxOCwxMyw5NSwxMTUsOTcsMTEwLDEwNSwxMTYsMTIxLDk1LDk5LDEwNCwKKyAgICAxMDEsOTksMTA3LDEzOSw4LDAsMCwxMTUsMjQsMCwwLDAsMCwyLDE1LDEsCisgICAgMzAsMSwxMiwxLDE1LDEsNiwxLDE1LDEsMTUsMSwxNSwxLDYsMiwKKyAgICAyNywxLDE5LDEsMTE0LDExMSwxLDAsMCwxMjIsMTYsNzgsMTExLDMyLDEwOSwxMTEsCisgICAgMTAwLDExNywxMDgsMTAxLDMyLDExMCw5NywxMDksMTAxLDEwMCwzMiwxMjIsNCwxMjMsMzMsMTE0LAorICAgIDEyNSw5OSwyLDAsMCwwLDAsMCwwLDAsOCwwLDAsMCwxMiwwLAorICAgIDAsMCw2NywwLDAsMCwxMTUsNTIsMSwwLDAsMTAwLDAsMCwxMjUsMiwKKyAgICAwLDEyNCwwLDAsMTA2LDAsMCwxMDAsMSwwLDEzMSwxLDAsMTAwLDIsMCwKKyAgICAyNSwxMjUsMywwLDEyNCwzLDAsMTE0LDE3OCwwLDEyNCwzLDAsMTE2LDEsMCwKKyAgICAxMDYsMiwwLDEwNyw3LDAsMTE0LDYyLDAsMTE2LDMsMCwxMjQsMSwwLDEyNCwKKyAgICAzLDAsMTMxLDIsMCwxLDExMCwwLDAsMTI0LDAsMCwxMTYsMSwwLDEwNiwKKyAgICAyLDAsMTA3LDYsMCwxMTQsODgsMCwxMTYsMSwwLDEwNiwyLDAsMTI0LDAsCisgICAgMCwyNSw4MywxMTYsMSwwLDEwNiwyLDAsMTI0LDMsMCwyNSwxMjUsNCwwLAorICAgIDEyMSwxMywwLDEyNCw0LDAsMTA2LDQsMCwxMjUsMiwwLDg3LDExMywxNzgsMCwKKyAgICA0LDExNiw1LDAsMTA3LDEwLDAsMTE0LDE3NCwwLDEsMSwxLDExNiw2LDAsCisgICAgMTAwLDMsMCwyMywxMDYsNywwLDEyNCwwLDAsMTI0LDMsMCwxMzEsMiwwLAorICAgIDEyNSw1LDAsMTE2LDgsMCwxMjQsNSwwLDEwMCw0LDAsMTI0LDAsMCwxMzEsCisgICAgMSwxLDEzMCwxLDAsODksMTEzLDE3OCwwLDg4LDExMCwwLDAsMTE2LDksMCwKKyAgICAxMjQsMCwwLDEyNCwyLDAsMTMxLDIsMCwxMjUsNiwwLDEyNCw2LDAsMTAwLAorICAgIDAsMCwxMDcsOCwwLDExNCwyMzUsMCwxMTYsOCwwLDExNiw2LDAsMTA2LDcsCisgICAgMCwxMjQsMCwwLDEzMSwxLDAsMTAwLDQsMCwxMjQsMCwwLDEzMSwxLDEsCisgICAgMTMwLDEsMCwxMTAsMTgsMCwxMTYsMTAsMCwxMjQsNiwwLDEzMSwxLDAsMTA2LAorICAgIDExLDAsMTMxLDAsMCwxMjUsNywwLDEyNCwzLDAsMTE0LDQ4LDEsMTE2LDEsCisgICAgMCwxMDYsMiwwLDEyNCwzLDAsMjUsMTI1LDQsMCwxMTYsMTIsMCwxMjQsNCwKKyAgICAwLDEyNCwwLDAsMTA2LDAsMCwxMDAsMSwwLDEzMSwxLDAsMTAwLDUsMCwKKyAgICAyNSwxMjQsNywwLDEzMSwzLDAsMSwxMTAsMCwwLDEyNCw3LDAsODMsNDEsCisgICAgNiw3OCwxMTQsMTE2LDAsMCwwLDExNCw4NCwwLDAsMCwxMjIsMjMsNTksMzIsCisgICAgMTIzLDMzLDExNCwxMjUsMzIsMTA1LDExNSwzMiwxMTAsMTExLDExNiwzMiw5NywzMiwxMTIsOTcsCisgICAgOTksMTA3LDk3LDEwMywxMDEsMTE0LDY3LDAsMCwwLDExNCwxMTUsMCwwLDAsNDEsCisgICAgMTMsMTE0LDMyLDAsMCwwLDExNCw3LDAsMCwwLDExNCw3MywwLDAsMCwKKyAgICAxMTQsMTE0LDAsMCwwLDExNCwyNDcsMCwwLDAsMTE0LDIxMCwwLDAsMCwyMTgsCisgICAgOCw5NSw2OSw4Miw4Miw5NSw3Nyw4Myw3MSwxMTQsNDcsMCwwLDAsMTE0LDE1NCwKKyAgICAwLDAsMCwxMTQsMTA4LDEsMCwwLDExNCwxNzUsMCwwLDAsMTE0LDcsMSwKKyAgICAwLDAsMTE0LDYxLDAsMCwwLDQxLDgsMTE0LDY3LDAsMCwwLDIxOCw3LAorICAgIDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDk1LDExNCwzNSwwLDAsMCwxMTQsMjM0LDAsMCwKKyAgICAwLDkwLDEzLDExMiw5NywxMTQsMTAxLDExMCwxMTYsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsCisgICAgMTE0LDE3MiwwLDAsMCwxMTQsMTc4LDAsMCwwLDExNCwxODAsMCwwLDAsMTE0LAorICAgIDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDIzLAogICAgIDk1LDEwMiwxMDUsMTEwLDEwMCw5NSw5NywxMTAsMTAwLDk1LDEwOCwxMTEsOTcsMTAwLDk1LDExNywKLSAgICAxMTAsMTA4LDExMSw5OSwxMDcsMTAxLDEwMCwxMTcsNywwLDAsMCwxMTQsMTAxLDEwOCwxMDEsCi0gICAgOTcsMTE1LDEwMSw0MCwzLDAsMCwwLDExNyw0LDAsMCwwLDExMCw5NywxMDksCi0gICAgMTAxLDExNyw3LDAsMCwwLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDk1LDExNyw0LDAsCi0gICAgMCwwLDEwOCwxMTEsOTksMTA3LDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwKLSAgICAxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsCi0gICAgMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywKLSAgICAxMTIsNjIsMTE3LDE0LDAsMCwwLDk1LDEwMiwxMDUsMTEwLDEwMCw5NSw5NywxMTAsMTAwLAotICAgIDk1LDEwOCwxMTEsOTcsMTAwLDIxLDYsMCwwLDExNSwxNCwwLDAsMCwwLDIsCi0gICAgMywxLDE2LDIsMTEsMSwxMCwxLDMsMSwxNywyLDExNywxNCwwLDAsCi0gICAgMCw5NSwxMDIsMTA1LDExMCwxMDAsOTUsOTcsMTEwLDEwMCw5NSwxMDgsMTExLDk3LDEwMCw5OSwKLSAgICAzLDAsMCwwLDAsMCwwLDAsNSwwLDAsMCw0LDAsMCwwLAotICAgIDY3LDAsMCwwLDExNSwxNzIsMCwwLDAsMTE2LDAsMCwxMjQsMCwwLDEyNCwKLSAgICAxLDAsMTI0LDIsMCwxMzEsMywwLDEsMTI0LDIsMCwxMDAsMSwwLDEwNywKLSAgICA0LDAsMTE0LDQ5LDAsMTE2LDEsMCwxMjQsMCwwLDEyNCwxLDAsMTI0LDIsCi0gICAgMCwxMzEsMywwLDEyNSwwLDAsMTEwLDAsMCwxMTYsMiwwLDEwNiwzLDAsCi0gICAgMTMxLDAsMCwxLDEyNCwwLDAsMTE2LDQsMCwxMDYsNSwwLDEwNyw3LDAsCi0gICAgMTE0LDg3LDAsMTE2LDYsMCwxMjQsMCwwLDExNiw3LDAsMTMxLDIsMCw4MywKLSAgICAxMTYsNCwwLDEwNiw1LDAsMTI0LDAsMCwyNSwxMjUsMywwLDEyNCwzLDAsCi0gICAgMTAwLDQsMCwxMDcsOCwwLDExNCwxNTgsMCwxMTYsMiwwLDEwNiw5LDAsMTMxLAotICAgIDAsMCwxLDEwMCwyLDAsMTA2LDEwLDAsMTI0LDAsMCwxMzEsMSwwLDEyNSwKLSAgICA0LDAsMTE2LDExLDAsMTI0LDQsMCwxMDAsMywwLDEyNCwwLDAsMTMxLDEsCi0gICAgMSwxMzAsMSwwLDExMCwwLDAsMTE2LDEyLDAsMTI0LDAsMCwxMzEsMSwwLAotICAgIDEsMTI0LDMsMCw4Myw0MCw1LDAsMCwwLDExNyw1MCwxLDAsMCw3MywKLSAgICAxMDksMTEyLDExMSwxMTQsMTE2LDMyLDk3LDExMCwxMDAsMzIsMTE0LDEwMSwxMTYsMTE3LDExNCwxMTAsCi0gICAgMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsOTgsOTcsMTE1LDEwMSwKLSAgICAxMDAsMzIsMTExLDExMCwzMiwxMDUsMTE2LDExNSwzMiwxMTAsOTcsMTA5LDEwMSw0NCwzMiwxMTYsCi0gICAgMTA0LDEwMSwzMiwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsMzIsMTE2LDEwNCwxMDEsMzIsOTksCi0gICAgOTcsMTA4LDEwOCwzMiwxMDUsMTE1LDEwLDMyLDMyLDMyLDMyLDk4LDEwMSwxMDUsMTEwLDEwMywKLSAgICAzMiwxMDksOTcsMTAwLDEwMSwzMiwxMDIsMTE0LDExMSwxMDksNDQsMzIsOTcsMTEwLDEwMCwzMiwKLSAgICAxMTYsMTA0LDEwMSwzMiwxMDgsMTAxLDExOCwxMDEsMTA4LDMyLDk3LDEwMCwxMDYsMTE3LDExNSwxMTYsCi0gICAgMTA5LDEwMSwxMTAsMTE2LDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDg0LDEwNCwxMDUsMTE1LDMyLAotICAgIDEwMiwxMTcsMTEwLDk5LDExNiwxMDUsMTExLDExMCwzMiwxMTQsMTAxLDExMiwxMTQsMTAxLDExNSwxMDEsCi0gICAgMTEwLDExNiwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsMTAzLDExNCwxMDEsOTcsMTE2LDEwMSwxMTUsMTE2LAotICAgIDMyLDk5LDExMSwxMDksMTA5LDExMSwxMTAsMzIsMTAwLDEwMSwxMTAsMTExLDEwOSwxMDUsMTEwLDk3LAotICAgIDExNiwxMTEsMTE0LDMyLDExMSwxMDIsMzIsMTAyLDExNywxMTAsOTksMTE2LDEwNSwxMTEsMTEwLDk3LAotICAgIDEwOCwxMDUsMTE2LDEyMSwxMCwzMiwzMiwzMiwzMiw5OCwxMDEsMTE2LDExOSwxMDEsMTAxLDExMCwKLSAgICAzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiw5NywKLSAgICAxMTAsMTAwLDMyLDk1LDk1LDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDk1LDk1LDQ2LDMyLDg0LAotICAgIDEwNCwxMDUsMTE1LDMyLDEwNSwxMTAsOTksMTA4LDExNywxMDAsMTAxLDExNSwzMiwxMTUsMTAxLDExNiwKLSAgICAxMTYsMTA1LDExMCwxMDMsMzIsOTUsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDk1LDk1LAotICAgIDMyLDEwNSwxMDIsMTAsMzIsMzIsMzIsMzIsMTE2LDEwNCwxMDEsMzIsMTA4LDExMSw5NywxMDAsCi0gICAgMTAxLDExNCwzMiwxMDAsMTA1LDEwMCwzMiwxMTAsMTExLDExNiw0NiwxMCwxMCwzMiwzMiwzMiwKLSAgICAzMiwxMDUsMCwwLDAsMCwxMTcsNDAsMCwwLDAsMTA1LDEwOSwxMTIsMTExLDExNCwKLSAgICAxMTYsMzIsMTExLDEwMiwzMiwxMjMsMTI1LDMyLDEwNCw5NywxMDgsMTE2LDEwMSwxMDAsNTksMzIsCi0gICAgNzgsMTExLDExMCwxMDEsMzIsMTA1LDExMCwzMiwxMTUsMTIxLDExNSw0NiwxMDksMTExLDEwMCwxMTcsCi0gICAgMTA4LDEwMSwxMTUsMTE3LDQsMCwwLDAsMTEwLDk3LDEwOSwxMDEsNzgsNDAsMTMsMCwKLSAgICAwLDAsMTE3LDEzLDAsMCwwLDk1LDExNSw5NywxMTAsMTA1LDExNiwxMjEsOTUsOTksCi0gICAgMTA0LDEwMSw5OSwxMDcsMTE3LDEzLDAsMCwwLDk1LDExNCwxMDEsMTE1LDExMSwxMDgsMTE4LAotICAgIDEwMSw5NSwxMTAsOTcsMTA5LDEwMSwxMTcsNCwwLDAsMCw5NSwxMDUsMTA5LDExMiwxMTcsCi0gICAgMTIsMCwwLDAsOTcsOTksMTEzLDExNywxMDUsMTE0LDEwMSw5NSwxMDgsMTExLDk5LDEwNywKLSAgICAxMTcsMywwLDAsMCwxMTUsMTIxLDExNSwxMTcsNywwLDAsMCwxMDksMTExLDEwMCwKLSAgICAxMTcsMTA4LDEwMSwxMTUsMTE3LDE0LDAsMCwwLDk1LDEwMiwxMDUsMTEwLDEwMCw5NSw5NywKLSAgICAxMTAsMTAwLDk1LDEwOCwxMTEsOTcsMTAwLDExNywxMSwwLDAsMCw5NSwxMDMsOTksMTAwLAotICAgIDk1LDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDExNyw0LDAsMCwwLDc4LDExMSwxMTAsMTAxLAotICAgIDExNywxMiwwLDAsMCwxMTQsMTAxLDEwOCwxMDEsOTcsMTE1LDEwMSw5NSwxMDgsMTExLDk5LAotICAgIDEwNywxMTcsNiwwLDAsMCwxMDIsMTExLDExNCwxMDksOTcsMTE2LDExNywxMSwwLDAsCi0gICAgMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDY5LDExNCwxMTQsMTExLDExNCwxMTcsMTksMCwwLAotICAgIDAsOTUsMTA4LDExMSw5OSwxMDcsOTUsMTE3LDExMCwxMDgsMTExLDk5LDEwNyw5NSwxMDksMTExLAotICAgIDEwMCwxMTcsMTA4LDEwMSw0MCw1LDAsMCwwLDExNyw0LDAsMCwwLDExMCw5NywKLSAgICAxMDksMTAxLDExNyw3LDAsMCwwLDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwxMTcsNSwKLSAgICAwLDAsMCwxMDgsMTAxLDExOCwxMDEsMTA4LDExNyw2LDAsMCwwLDEwOSwxMTEsMTAwLAotICAgIDExNywxMDgsMTAxLDExNyw3LDAsMCwwLDEwOSwxMDEsMTE1LDExNSw5NywxMDMsMTAxLDQwLAotICAgIDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLAotICAgIDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0NiwKLSAgICA5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDExLDAsMCwwLAotICAgIDk1LDEwMyw5OSwxMDAsOTUsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMzQsNiwwLDAsMTE1LAotICAgIDI4LDAsMCwwLDAsOSwxNiwxLDEyLDEsMjEsMSwxMCwxLDE1LDEsCi0gICAgMTMsMSwxMywxLDEyLDEsMTAsMSw2LDEsOSwxLDIxLDEsMTAsMSwKLSAgICAxMTcsMTEsMCwwLDAsOTUsMTAzLDk5LDEwMCw5NSwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwKLSAgICA5OSwzLDAsMCwwLDAsMCwwLDAsNiwwLDAsMCwxNywwLDAsCi0gICAgMCw2NywwLDAsMCwxMTUsMjU0LDAsMCwwLDExNiwwLDAsMTI0LDAsMCwKLSAgICAxMDAsMSwwLDEzMSwyLDAsMTE0LDI1MCwwLDEwMCwyLDAsMTI0LDEsMCwxMDcsCi0gICAgNiwwLDExNCw4OSwwLDExNiwxLDAsMTI0LDEsMCwxMzEsMSwwLDEyNSwxLAotICAgIDAsMTI0LDEsMCwxMDYsMiwwLDEwMCwyLDAsMTMxLDEsMCwxLDExNiwwLAotICAgIDAsMTI0LDAsMCwxMDAsMywwLDEzMSwyLDAsMTE0LDg5LDAsMTI0LDEsMCwKLSAgICAxMDYsMywwLDEyNCwwLDAsMTA2LDQsMCwxMzEsMSwwLDEsMTEzLDg5LDAsCi0gICAgMTEwLDAsMCwxMjAsMTU4LDAsMTI0LDEsMCw2OCw5MywxNDcsMCwxMjUsMywwLAotICAgIDExNiwwLDAsMTI0LDAsMCwxMjQsMywwLDEzMSwyLDAsMTE1LDk2LDAsMTAwLAotICAgIDQsMCwxMDYsNSwwLDEyNCwwLDAsMTA2LDYsMCwxMjQsMywwLDEzMSwyLAotICAgIDAsMTI1LDQsMCwxMjEsMTcsMCwxMTYsNywwLDEyNCwyLDAsMTI0LDQsMCwKLSAgICAxMzEsMiwwLDEsODcsMTEzLDI0MywwLDQsMTE2LDgsMCwxMDcsMTAsMCwxMTQsCi0gICAgMjM5LDAsMSwxMjUsNSwwLDEsMTIyLDUwLDAsMTE2LDksMCwxMjQsNSwwLAotICAgIDEwMCw1LDAsMTAwLDcsMCwxMzEsMywwLDExNCwyMTgsMCwxMjQsNSwwLDEwNiwKLSAgICAxMSwwLDEyNCw0LDAsMTA3LDIsMCwxMTQsMjE4LDAsMTE5LDk2LDAsMTEzLDIxOCwKLSAgICAwLDExMCwwLDAsMTMwLDAsMCw4Nyw4OSwxMDAsNiwwLDEwMCw2LDAsMTI1LAotICAgIDUsMCwxMjYsNSwwLDg4LDExMywyNDMsMCw4OCwxMTMsOTYsMCwxMTMsOTYsMCwKLSAgICA4NywxMTAsMCwwLDEyNCwwLDAsODMsNDAsOCwwLDAsMCwxMTcsMjM4LDAsCi0gICAgMCwwLDcwLDEwNSwxMDMsMTE3LDExNCwxMDEsMzIsMTExLDExNywxMTYsMzIsMTE5LDEwNCw5NywKLSAgICAxMTYsMzIsOTUsOTUsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsOTUsOTUsMzIsMTE1LDEwNCwxMTEsCi0gICAgMTE3LDEwOCwxMDAsMzIsMTE0LDEwMSwxMTYsMTE3LDExNCwxMTAsNDYsMTAsMTAsMzIsMzIsMzIsCi0gICAgMzIsODQsMTA0LDEwMSwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiw5NSwzMiwxMTIsOTcsMTE0LAotICAgIDk3LDEwOSwxMDEsMTE2LDEwMSwxMTQsMzIsMTA1LDExNSwzMiw5NywzMiw5OSw5NywxMDgsMTA4LAotICAgIDk3LDk4LDEwOCwxMDEsMzIsMTE5LDEwNCwxMDUsOTksMTA0LDMyLDExNiw5NywxMDcsMTAxLDExNSwKLSAgICAzMiwxMTYsMTA0LDEwMSwzMiwxMTAsOTcsMTA5LDEwMSwzMiwxMTEsMTAyLDMyLDEwOSwxMTEsMTAwLAotICAgIDExNywxMDgsMTAxLDMyLDExNiwxMTEsMTAsMzIsMzIsMzIsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwKLSAgICAxMTYsNDYsMzIsNzMsMTE2LDMyLDEwNSwxMTUsMzIsMTE0LDEwMSwxMTMsMTE3LDEwNSwxMTQsMTAxLAotICAgIDEwMCwzMiwxMTYsMTExLDMyLDEwMCwxMDEsOTksMTExLDExNywxMTIsMTA4LDEwMSwzMiwxMTYsMTA0LAotICAgIDEwMSwzMiwxMDIsMTE3LDExMCw5OSwxMTYsMTA1LDExMSwxMTAsMzIsMTAyLDExNCwxMTEsMTA5LDMyLAotICAgIDk3LDExNSwxMTUsMTE3LDEwOSwxMDUsMTEwLDEwMywzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsCi0gICAgMTA1LDk4LDM5LDExNSwxMCwzMiwzMiwzMiwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwzMiwKLSAgICAxMDUsMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiw5NywxMTYsMTA1LDExMSwxMTAsMzIsMTA1LAotICAgIDExNSwzMiwxMDAsMTAxLDExNSwxMDUsMTE0LDEwMSwxMDAsNDYsMTAsMTAsMzIsMzIsMzIsMzIsCi0gICAgMTE3LDgsMCwwLDAsOTUsOTUsMTEyLDk3LDExNiwxMDQsOTUsOTUsMTE3LDEsMCwKLSAgICAwLDAsNDIsMTE3LDcsMCwwLDAsOTUsOTUsOTcsMTA4LDEwOCw5NSw5NSwxMTcsCi0gICAgNSwwLDAsMCwxMjMsMTI1LDQ2LDEyMywxMjUsMTE3LDEwLDAsMCwwLDk1LDExMCwKLSAgICAxMTEsMTE2LDk1LDEwMiwxMTEsMTE3LDExMCwxMDAsNzgsNzAsNDAsMTIsMCwwLDAsMTE3LAotICAgIDcsMCwwLDAsMTA0LDk3LDExNSw5NywxMTYsMTE2LDExNCwxMTcsNCwwLDAsMCwKLSAgICAxMDgsMTA1LDExNSwxMTYsMTE3LDYsMCwwLDAsMTE0LDEwMSwxMDksMTExLDExOCwxMDEsMTE3LAotICAgIDYsMCwwLDAsMTAxLDEyMCwxMTYsMTAxLDExMCwxMDAsMTE3LDcsMCwwLDAsOTUsCi0gICAgOTUsOTcsMTA4LDEwOCw5NSw5NSwxMTcsNiwwLDAsMCwxMDIsMTExLDExNCwxMDksOTcsCi0gICAgMTE2LDExNyw4LDAsMCwwLDk1LDk1LDExMCw5NywxMDksMTAxLDk1LDk1LDExNywyNSwKLSAgICAwLDAsMCw5NSw5OSw5NywxMDgsMTA4LDk1LDExOSwxMDUsMTE2LDEwNCw5NSwxMDIsMTE0LAotICAgIDk3LDEwOSwxMDEsMTE1LDk1LDExNCwxMDEsMTA5LDExMSwxMTgsMTAxLDEwMCwxMTcsMTEsMCwwLAotICAgIDAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiw2OSwxMTQsMTE0LDExMSwxMTQsMTE3LDcsMCwwLAotICAgIDAsMTAzLDEwMSwxMTYsOTcsMTE2LDExNiwxMTQsMTE3LDUsMCwwLDAsNzAsOTcsMTA4LAotICAgIDExNSwxMDEsMTE3LDQsMCwwLDAsMTEwLDk3LDEwOSwxMDEsNDAsNiwwLDAsMCwKLSAgICAxMTcsNiwwLDAsMCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTcsOCwwLDAsMCwKLSAgICAxMDIsMTE0LDExMSwxMDksMTA4LDEwNSwxMTUsMTE2LDExNyw3LDAsMCwwLDEwNSwxMDksMTEyLAotICAgIDExMSwxMTQsMTE2LDk1LDExNywxLDAsMCwwLDEyMCwxMTcsOSwwLDAsMCwxMDIsCi0gICAgMTE0LDExMSwxMDksOTUsMTEwLDk3LDEwOSwxMDEsMTE3LDMsMCwwLDAsMTAxLDEyMCw5OSwKLSAgICA0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLAotICAgIDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsCi0gICAgNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxNiwwLDAsCi0gICAgMCw5NSwxMDQsOTcsMTEwLDEwMCwxMDgsMTAxLDk1LDEwMiwxMTQsMTExLDEwOSwxMDgsMTA1LDExNSwKLSAgICAxMTYsNTgsNiwwLDAsMTE1LDM0LDAsMCwwLDAsMTAsMTUsMSwxMiwxLAotICAgIDEyLDEsMTMsMSwxNSwxLDIyLDEsMTMsMSwxNSwxLDIxLDEsMywxLAotICAgIDE3LDEsMTgsNiwxOCwxLDE1LDEsOSwxLDMyLDEsMTE3LDE2LDAsMCwKLSAgICAwLDk1LDEwNCw5NywxMTAsMTAwLDEwOCwxMDEsOTUsMTAyLDExNCwxMTEsMTA5LDEwOCwxMDUsMTE1LAotICAgIDExNiw5OSwxLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwyLDAsCi0gICAgMCwwLDY3LDAsMCwwLDExNSw3OCwwLDAsMCwxMjQsMCwwLDEwNiwwLAotICAgIDAsMTAwLDEsMCwxMzEsMSwwLDEyNSwxLDAsMTI0LDEsMCwxMDAsNiwwLAotICAgIDEwNyw4LDAsMTE0LDc0LDAsMTI0LDAsMCwxMDAsMiwwLDI1LDEyNSwxLDAsCi0gICAgMTAwLDMsMCwxMjQsMCwwLDEwNyw3LDAsMTE0LDc0LDAsMTI0LDEsMCwxMDYsCi0gICAgMiwwLDEwMCw0LDAsMTMxLDEsMCwxMDAsNSwwLDI1LDEyNSwxLDAsMTEzLAotICAgIDc0LDAsMTEwLDAsMCwxMjQsMSwwLDgzLDQwLDcsMCwwLDAsMTE3LDE2NywKLSAgICAwLDAsMCw2Nyw5NywxMDgsOTksMTE3LDEwOCw5NywxMTYsMTAxLDMyLDExOSwxMDQsOTcsCi0gICAgMTE2LDMyLDk1LDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw5NSw5NSwzMiwxMTUsMTA0LAotICAgIDExMSwxMTcsMTA4LDEwMCwzMiw5OCwxMDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsOTUsOTUsCi0gICAgMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDk1LDk1LDMyLDEwNSwxMTUsMzIsMTEwLDExMSwxMTYsCi0gICAgMzIsMTAzLDExNyw5NywxMTQsOTcsMTEwLDExNiwxMDEsMTAxLDEwMCwzMiwxMTYsMTExLDMyLDk4LAotICAgIDEwMSwzMiwxMDAsMTAxLDEwMiwxMDUsMTEwLDEwMSwxMDAsMzIsMTExLDExNCwzMiw5OSwxMTEsMTE3LAotICAgIDEwOCwxMDAsMzIsOTgsMTAxLDMyLDExNSwxMDEsMTE2LDMyLDExNiwxMTEsMzIsNzgsMTExLDExMCwKLSAgICAxMDEsMTAsMzIsMzIsMzIsMzIsMTE2LDExMSwzMiwxMTQsMTAxLDExMiwxMTQsMTAxLDExNSwxMDEsCi0gICAgMTEwLDExNiwzMiwxMTYsMTA0LDk3LDExNiwzMiwxMDUsMTE2LDExNSwzMiwxMTIsMTE0LDExMSwxMTIsCi0gICAgMTAxLDExNCwzMiwxMTgsOTcsMTA4LDExNywxMDEsMzIsMTA1LDExNSwzMiwxMTcsMTEwLDEwNywxMTAsCi0gICAgMTExLDExOSwxMTAsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMTE3LDExLDAsMCwwLDk1LAotICAgIDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw5NSw5NSwxMTcsOCwwLDAsMCw5NSwKLSAgICA5NSwxMTAsOTcsMTA5LDEwMSw5NSw5NSwxMTcsOCwwLDAsMCw5NSw5NSwxMTIsOTcsCi0gICAgMTE2LDEwNCw5NSw5NSwxMTcsMSwwLDAsMCw0NiwxMDUsMCwwLDAsMCw3OCwKLSAgICA0MCwzLDAsMCwwLDExNywzLDAsMCwwLDEwMywxMDEsMTE2LDExNyw0LDAsCi0gICAgMCwwLDc4LDExMSwxMTAsMTAxLDExNywxMCwwLDAsMCwxMTQsMTEyLDk3LDExNCwxMTYsCi0gICAgMTA1LDExNiwxMDUsMTExLDExMCw0MCwyLDAsMCwwLDExNyw3LDAsMCwwLDEwMywKLSAgICAxMDgsMTExLDk4LDk3LDEwOCwxMTUsMTE3LDcsMCwwLDAsMTEyLDk3LDk5LDEwNyw5NywKLSAgICAxMDMsMTAxLDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLAotICAgIDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LAotICAgIDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDE3LAotICAgIDAsMCwwLDk1LDk5LDk3LDEwOCw5OSw5NSw5NSw5NSwxMTIsOTcsOTksMTA3LDk3LAotICAgIDEwMywxMDEsOTUsOTUsOTIsNiwwLDAsMTE1LDEyLDAsMCwwLDAsNywxNSwKLSAgICAxLDEyLDEsMTAsMSwxMiwxLDI1LDEsMTE3LDE3LDAsMCwwLDk1LDk5LAotICAgIDk3LDEwOCw5OSw5NSw5NSw5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsOTUsOTUsOTksCi0gICAgMCwwLDAsMCwwLDAsMCwwLDMsMCwwLDAsMywwLDAsMCwKLSAgICA2NywwLDAsMCwxMTUsNTUsMCwwLDAsMTE2LDAsMCwxMTYsMSwwLDEwNiwKLSAgICAyLDAsMTMxLDAsMCwxMDIsMiwwLDEyNSwwLDAsMTE2LDMsMCwxMTYsNCwKLSAgICAwLDEwMiwyLDAsMTI1LDEsMCwxMTYsNSwwLDExNiw2LDAsMTAyLDIsMCwKLSAgICAxMjUsMiwwLDEyNCwwLDAsMTI0LDEsMCwxMjQsMiwwLDEwMywzLDAsODMsCi0gICAgNDAsMSwwLDAsMCwxMTcsOTUsMCwwLDAsODIsMTAxLDExNiwxMTcsMTE0LDExMCwKLSAgICAxMTUsMzIsOTcsMzIsMTA4LDEwNSwxMTUsMTE2LDMyLDExMSwxMDIsMzIsMTAyLDEwNSwxMDgsMTAxLAotICAgIDQ1LDk4LDk3LDExNSwxMDEsMTAwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEwOCwxMTEsCi0gICAgOTcsMTAwLDEwMSwxMTQsMTE1LDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDY5LDk3LDk5LDEwNCwKLSAgICAzMiwxMDUsMTE2LDEwMSwxMDksMzIsMTA1LDExNSwzMiw5NywzMiwxMTYsMTE3LDExMiwxMDgsMTAxLAotICAgIDMyLDQwLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsNDQsMzIsMTE1LDExNywxMDIsMTAyLDEwNSwxMjAsCi0gICAgMTAxLDExNSw0MSw0NiwxMCwzMiwzMiwzMiwzMiw0MCw3LDAsMCwwLDExNywxOSwKLSAgICAwLDAsMCw2OSwxMjAsMTE2LDEwMSwxMTAsMTE1LDEwNSwxMTEsMTEwLDcwLDEwNSwxMDgsMTAxLAotICAgIDc2LDExMSw5NywxMDAsMTAxLDExNCwxMTcsNCwwLDAsMCw5NSwxMDUsMTA5LDExMiwxMTcsCi0gICAgMTgsMCwwLDAsMTAxLDEyMCwxMTYsMTAxLDExMCwxMTUsMTA1LDExMSwxMTAsOTUsMTE1LDExNywKLSAgICAxMDIsMTAyLDEwNSwxMjAsMTAxLDExNSwxMTcsMTYsMCwwLDAsODMsMTExLDExNywxMTQsOTksCi0gICAgMTAxLDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCwxMTcsMTUsMCwwLDAsCi0gICAgODMsNzksODUsODIsNjcsNjksOTUsODMsODUsNzAsNzAsNzMsODgsNjksODMsMTE3LAotICAgIDIwLDAsMCwwLDgzLDExMSwxMTcsMTE0LDk5LDEwMSwxMDgsMTAxLDExNSwxMTUsNzAsMTA1LAotICAgIDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDExNywxNywwLDAsMCw2Niw4OSw4NCwKLSAgICA2OSw2Nyw3OSw2OCw2OSw5NSw4Myw4NSw3MCw3MCw3Myw4OCw2OSw4Myw0MCwzLAotICAgIDAsMCwwLDExNywxMCwwLDAsMCwxMDEsMTIwLDExNiwxMDEsMTEwLDExNSwxMDUsMTExLAotICAgIDExMCwxMTUsMTE3LDYsMCwwLDAsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwxMTcsOCwwLAotICAgIDAsMCw5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSw0MCwwLDAsMCwwLDQwLAotICAgIDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLAotICAgIDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsCi0gICAgMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywyNywwLDAsMCw5NSwxMDMsMTAxLDExNiw5NSwKLSAgICAxMTUsMTE3LDExMiwxMTIsMTExLDExNCwxMTYsMTAxLDEwMCw5NSwxMDIsMTA1LDEwOCwxMDEsOTUsMTA4LAotICAgIDExMSw5NywxMDAsMTAxLDExNCwxMTUsMTA3LDYsMCwwLDExNSw4LDAsMCwwLDAsCi0gICAgNSwxOCwxLDEyLDEsMTIsMSwxMTcsMjcsMCwwLDAsOTUsMTAzLDEwMSwxMTYsCi0gICAgOTUsMTE1LDExNywxMTIsMTEyLDExMSwxMTQsMTE2LDEwMSwxMDAsOTUsMTAyLDEwNSwxMDgsMTAxLDk1LAotICAgIDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMTE1LDk5LDUsMCwwLDAsMCwwLDAsMCwKLSAgICA5LDAsMCwwLDUsMCwwLDAsNjcsMCwwLDAsMTE1LDIyNywwLDAsCi0gICAgMCwxMjQsNCwwLDEwMCwxLDAsMTA3LDIsMCwxMTQsMjcsMCwxMTYsMCwwLAotICAgIDEyNCwwLDAsMTMxLDEsMCwxMjUsNSwwLDExMCw1NCwwLDEyNCwxLDAsMTAwLAotICAgIDMsMCwxMDcsOSwwLDExNCw0NSwwLDEyNCwxLDAsMTEwLDMsMCwxMDUsMCwKLSAgICAwLDEyNSw2LDAsMTE2LDIsMCwxMjQsNiwwLDEzMSwxLDAsMTI1LDcsMCwKLSAgICAxMTYsMCwwLDEyNCwwLDAsMTI0LDcsMCwxMjQsNCwwLDEzMSwzLDAsMTI1LAotICAgIDUsMCwxMjQsMywwLDExNSwyMDcsMCwxMjQsNCwwLDEwMCwxLDAsMTA3LDIsCi0gICAgMCwxMTQsMTIyLDAsMTE2LDAsMCwxMjQsMCwwLDEwNiwzLDAsMTAwLDIsMCwKLSAgICAxMzEsMSwwLDEwMCwxLDAsMjUsMTMxLDEsMCw4MywxMjQsMCwwLDExNSwxMzIsCi0gICAgMCwxMjQsNSwwLDgzLDExNiw0LDAsMTI0LDAsMCwxMzEsMSwwLDExNiw0LAotICAgIDAsMTI0LDAsMCwxMDYsMywwLDEwMCwyLDAsMTMxLDEsMCwxMDAsMSwwLAotICAgIDI1LDEzMSwxLDAsMjQsMTI1LDgsMCwxMTYsNSwwLDEwNiw2LDAsMTI0LDUsCi0gICAgMCwxMDYsNywwLDEwMCwzLDAsMTE2LDQsMCwxMjQsNSwwLDEwNiw3LDAsCi0gICAgMTMxLDEsMCwxMjQsOCwwLDI0LDEzMywyLDAsMjUsMjUsODMsMTEwLDE2LDAsCi0gICAgMTE2LDgsMCwxMjQsNSwwLDEyNCwzLDAsMTE2LDAsMCwxMzEsMywwLDgzLAotICAgIDEwMCwzLDAsODMsNDAsNCwwLDAsMCwxMTcsMjE0LDEsMCwwLDczLDEwOSwKLSAgICAxMTIsMTExLDExNCwxMTYsMzIsOTcsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDYsMTAsMTAsCi0gICAgMzIsMzIsMzIsMzIsODQsMTA0LDEwMSwzMiwzOSwxMDMsMTA4LDExMSw5OCw5NywxMDgsMTE1LAotICAgIDM5LDMyLDk3LDExNCwxMDMsMTE3LDEwOSwxMDEsMTEwLDExNiwzMiwxMDUsMTE1LDMyLDExNywxMTUsCi0gICAgMTAxLDEwMCwzMiwxMTYsMTExLDMyLDEwNSwxMTAsMTAyLDEwMSwxMTQsMzIsMTE5LDEwNCwxMDEsMTE0LAotICAgIDEwMSwzMiwxMTYsMTA0LDEwMSwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwzMiwxMDUsMTE1LDMyLAotICAgIDExMSw5OSw5OSwxMTcsMTE0LDEwNSwxMTAsMTAzLDMyLDEwMiwxMTQsMTExLDEwOSwxMCwzMiwzMiwKLSAgICAzMiwzMiwxMTYsMTExLDMyLDEwNCw5NywxMTAsMTAwLDEwOCwxMDEsMzIsMTE0LDEwMSwxMDgsOTcsCi0gICAgMTE2LDEwNSwxMTgsMTAxLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDExNSw0NiwzMiw4NCwxMDQsCi0gICAgMTAxLDMyLDM5LDEwOCwxMTEsOTksOTcsMTA4LDExNSwzOSwzMiw5NywxMTQsMTAzLDExNywxMDksCi0gICAgMTAxLDExMCwxMTYsMzIsMTA1LDExNSwzMiwxMDUsMTAzLDExMCwxMTEsMTE0LDEwMSwxMDAsNDYsMzIsCi0gICAgODQsMTA0LDEwMSwxMCwzMiwzMiwzMiwzMiwzOSwxMDIsMTE0LDExMSwxMDksMTA4LDEwNSwxMTUsCi0gICAgMTE2LDM5LDMyLDk3LDExNCwxMDMsMTE3LDEwOSwxMDEsMTEwLDExNiwzMiwxMTUsMTEyLDEwMSw5OSwKLSAgICAxMDUsMTAyLDEwNSwxMDEsMTE1LDMyLDExOSwxMDQsOTcsMTE2LDMyLDExNSwxMDQsMTExLDExNywxMDgsCi0gICAgMTAwLDMyLDEwMSwxMjAsMTA1LDExNSwxMTYsMzIsOTcsMTE1LDMyLDk3LDExNiwxMTYsMTE0LDEwNSwKLSAgICA5OCwxMTcsMTE2LDEwMSwxMTUsMzIsMTExLDExMCwzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwKLSAgICAxMTcsMTA4LDEwMSwxMCwzMiwzMiwzMiwzMiw5OCwxMDEsMTA1LDExMCwxMDMsMzIsMTA1LDEwOSwKLSAgICAxMTIsMTExLDExNCwxMTYsMTAxLDEwMCwzMiw0MCwxMDEsNDYsMTAzLDQ2LDMyLDk2LDk2LDEwMiwKLSAgICAxMTQsMTExLDEwOSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LAotICAgIDExNiwzMiw2MCwxMDIsMTE0LDExMSwxMDksMTA4LDEwNSwxMTUsMTE2LDYyLDk2LDk2LDQxLDQ2LAotICAgIDMyLDMyLDg0LDEwNCwxMDEsMzIsMzksMTA4LDEwMSwxMTgsMTAxLDEwOCwzOSwxMCwzMiwzMiwKLSAgICAzMiwzMiw5NywxMTQsMTAzLDExNywxMDksMTAxLDExMCwxMTYsMzIsMTE0LDEwMSwxMTIsMTE0LDEwMSwKLSAgICAxMTUsMTAxLDExMCwxMTYsMTE1LDMyLDExNiwxMDQsMTAxLDMyLDExMiw5Nyw5OSwxMDcsOTcsMTAzLAotICAgIDEwMSwzMiwxMDgsMTExLDk5LDk3LDExNiwxMDUsMTExLDExMCwzMiwxMTYsMTExLDMyLDEwNSwxMDksCi0gICAgMTEyLDExMSwxMTQsMTE2LDMyLDEwMiwxMTQsMTExLDEwOSwzMiwxMDUsMTEwLDMyLDk3LDMyLDExNCwKLSAgICAxMDEsMTA4LDk3LDExNiwxMDUsMTE4LDEwMSwxMCwzMiwzMiwzMiwzMiwxMDUsMTA5LDExMiwxMTEsCi0gICAgMTE0LDExNiwzMiw0MCwxMDEsNDYsMTAzLDQ2LDMyLDk2LDk2LDEwMiwxMTQsMTExLDEwOSwzMiwKLSAgICA0Niw0NiwxMTIsMTA3LDEwMywzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwzMiwxMDksMTExLDEwMCwKLSAgICA5Niw5NiwzMiwxMTksMTExLDExNywxMDgsMTAwLDMyLDEwNCw5NywxMTgsMTAxLDMyLDk3LDMyLAotICAgIDM5LDEwOCwxMDEsMTE4LDEwMSwxMDgsMzksMzIsMTExLDEwMiwzMiw1MCw0MSw0NiwxMCwxMCwKLSAgICAzMiwzMiwzMiwzMiwxMDUsMCwwLDAsMCwxMTcsMSwwLDAsMCw0Niw3OCwKLSAgICA0MCw5LDAsMCwwLDExNywxMSwwLDAsMCw5NSwxMDMsOTksMTAwLDk1LDEwNSwKLSAgICAxMDksMTEyLDExMSwxMTQsMTE2LDExNyw0LDAsMCwwLDc4LDExMSwxMTAsMTAxLDExNywxNywKLSAgICAwLDAsMCw5NSw5OSw5NywxMDgsOTksOTUsOTUsOTUsMTEyLDk3LDk5LDEwNyw5NywKLSAgICAxMDMsMTAxLDk1LDk1LDExNyw5LDAsMCwwLDExMiw5NywxMTQsMTE2LDEwNSwxMTYsMTA1LAotICAgIDExMSwxMTAsMTE3LDMsMCwwLDAsMTA4LDEwMSwxMTAsMTE3LDMsMCwwLDAsMTE1LAotICAgIDEyMSwxMTUsMTE3LDcsMCwwLDAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDExNyw4LAotICAgIDAsMCwwLDk1LDk1LDExMCw5NywxMDksMTAxLDk1LDk1LDExNywxNiwwLDAsMCwKLSAgICA5NSwxMDQsOTcsMTEwLDEwMCwxMDgsMTAxLDk1LDEwMiwxMTQsMTExLDEwOSwxMDgsMTA1LDExNSwxMTYsCi0gICAgNDAsOSwwLDAsMCwxMTcsNCwwLDAsMCwxMTAsOTcsMTA5LDEwMSwxMTcsNywKLSAgICAwLDAsMCwxMDMsMTA4LDExMSw5OCw5NywxMDgsMTE1LDExNyw2LDAsMCwwLDEwOCwKLSAgICAxMTEsOTksOTcsMTA4LDExNSwxMTcsOCwwLDAsMCwxMDIsMTE0LDExMSwxMDksMTA4LDEwNSwKLSAgICAxMTUsMTE2LDExNyw1LDAsMCwwLDEwOCwxMDEsMTE4LDEwMSwxMDgsMTE3LDYsMCwwLAotICAgIDAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE3LDgsMCwwLDAsMTAzLDEwOCwxMTEsOTgsCi0gICAgOTcsMTA4LDExNSw5NSwxMTcsNywwLDAsMCwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsCi0gICAgMTE3LDcsMCwwLDAsOTksMTE3LDExNiw5NSwxMTEsMTAyLDEwMiw0MCwwLDAsMCwKLSAgICAwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwKLSAgICAxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLAotICAgIDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxMCwwLDAsMCw5NSw5NSwxMDUsCi0gICAgMTA5LDExMiwxMTEsMTE0LDExNiw5NSw5NSwxMTgsNiwwLDAsMTE1LDI2LDAsMCwwLAotICAgIDAsMTEsMTIsMSwxNSwyLDI0LDEsMTIsMSwxOCwxLDYsMywxMiwxLAotICAgIDIzLDEsNiwxLDQsNCwzNSwzLDQwLDIsMTE3LDEwLDAsMCwwLDk1LAotICAgIDk1LDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDk1LDk1LDk5LDIsMCwwLDAsMCwwLAotICAgIDAsMCwxNiwwLDAsMCwxMywwLDAsMCw2NywwLDAsMCwxMTUsMjQsCi0gICAgMywwLDAsMTI0LDEsMCw5NywwLDAsMTI0LDAsMCw5NywxLDAsMTE2LAotICAgIDEsMCwxMDYsMiwwLDEwNiwzLDAsMTE0LDMzLDAsMTE2LDQsMCw5Nyw1LAotICAgIDAsMTEwLDYsMCwxMTYsNiwwLDk3LDUsMCwxMTYsNywwLDExNiwxLDAsCi0gICAgMTMxLDEsMCwxMjUsMiwwLDEyMCwxMTksMCwxMTYsMSwwLDEwNiw4LDAsMTA2LAotICAgIDksMCwxMzEsMCwwLDY4LDkzLDEwMiwwLDkyLDIsMCwxMjUsMywwLDEyNSwKLSAgICA0LDAsMTE2LDEwLDAsMTI0LDQsMCwxMjQsMiwwLDEzMSwyLDAsMTE0LDY3LAotICAgIDAsMTE2LDExLDAsMTI0LDQsMCwxMDAsMSwwLDEzMSwyLDAsMTE1LDE2OSwwLAotICAgIDEyNCwzLDAsMTE2LDEsMCwxMDYsMTIsMCwxMDcsNiwwLDExNCwxMzYsMCwxMTYsCi0gICAgMTMsMCwxMjQsNCwwLDk1LDE0LDAsMTEzLDE2NiwwLDExNiwwLDAsMTA2LDE1LAotICAgIDAsMTI0LDMsMCwxMzEsMSwwLDExNCwxNjYsMCwxMTYsMTYsMCwxMjQsNCwwLAotICAgIDk1LDE0LDAsMTEzLDE2NiwwLDExMywxNjksMCwxMTMsNjcsMCwxMTMsNjcsMCw4NywKLSAgICAxMTYsMSwwLDEwNiw4LDAsMTE2LDE3LDAsMjUsMTI1LDUsMCwxMjAsNzYsMCwKLSAgICAxMDAsMjgsMCw2OCw5Myw2OCwwLDEyNSw2LDAsMTI0LDYsMCwxMTYsMSwwLAotICAgIDEwNiw4LDAsMTA3LDcsMCwxMTQsMjMyLDAsMTE2LDEzLDAsMTA2LDE4LDAsMTI0LAotICAgIDYsMCwxMzEsMSwwLDEyNSw3LDAsMTEwLDEzLDAsMTE2LDEsMCwxMDYsOCwKLSAgICAwLDEyNCw2LDAsMjUsMTI1LDcsMCwxMTYsMTksMCwxMjQsNSwwLDEyNCw2LAotICAgIDAsMTI0LDcsMCwxMzEsMywwLDEsMTEzLDE5MywwLDg3LDEwMCw2LDAsMTAwLAotICAgIDcsMCwxMDMsMSwwLDEwMiwyLDAsMTAwLDgsMCwxMDAsOSwwLDEwMCw3LAotICAgIDAsMTAzLDIsMCwxMDIsMiwwLDEwMCwxMCwwLDEwMCw5LDAsMTAwLDcsMCwKLSAgICAxMDMsMiwwLDEwMiwyLDAsMTAyLDMsMCwxMjUsOCwwLDEyMCwxODksMCwxMjQsCi0gICAgOCwwLDY4LDkzLDE2OSwwLDkyLDIsMCwxMjUsOSwwLDEyNSwxMCwwLDExNiwKLSAgICAyMCwwLDEwMCwxMSwwLDEwMCwxMiwwLDEzMiwwLDAsMTI0LDEwLDAsNjgsMTMxLAotICAgIDEsMCwxMzEsMSwwLDExNSwxMDcsMSwxMTYsMjEsMCwxMzAsMSwwLDEyNCwxMCwKLSAgICAwLDEwMCwxMywwLDI1LDEyNSwxMSwwLDEyNCw5LDAsMTE2LDEsMCwxMDYsOCwKLSAgICAwLDEwNyw2LDAsMTE0LDE0OSwxLDExNiwxLDAsMTA2LDgsMCwxMjQsOSwwLAotICAgIDI1LDEyNSwxMiwwLDgwLDExMyw2NCwxLDEyMSw2MCwwLDExNiwxMywwLDEwNiwxOCwKLSAgICAwLDEyNCw5LDAsMTMxLDEsMCwxMjUsMTIsMCwxMjQsOSwwLDEwMCwxMCwwLAotICAgIDEwNywyLDAsMTE0LDIwNywxLDEwMCwxNCwwLDExNiwxLDAsMTA2LDIyLDAsMTA3LAotICAgIDYsMCwxMTQsMjA3LDEsMTI0LDEwLDAsMTAwLDE1LDAsMjUsMTI1LDExLDAsMTEwLAotICAgIDAsMCw4MCw4NywxMTMsNjQsMSw0LDExNiwyMywwLDEwNywxMCwwLDExNCwyMzIsCi0gICAgMSwxLDEsMSwxMTksNjQsMSw4OSwxMTMsNjQsMSw4OCwxMTMsNjQsMSw4NywKLSAgICAxMTYsMjMsMCwxMDAsMTYsMCwxMzEsMSwwLDEzMCwxLDAsMTIxLDE5LDAsMTE2LAotICAgIDEzLDAsMTA2LDE4LDAsMTAwLDE3LDAsMTMxLDEsMCwxMjUsMTMsMCw4NywxMTAsCi0gICAgMjQsMCw0LDExNiwyMywwLDEwNywxMCwwLDExNCwzOCwyLDEsMSwxLDEwMCwKLSAgICAyNywwLDEyNSwxMywwLDg5LDExMCwxLDAsODgsMTE2LDEzLDAsMTA2LDE4LDAsCi0gICAgMTAwLDE4LDAsMTMxLDEsMCwxMjUsMTQsMCwxMjQsOSwwLDEwMCw4LDAsMTA3LAotICAgIDIsMCwxMTQsMTAwLDIsMTE2LDEzLDAsMTA2LDE4LDAsMTAwLDE5LDAsMTMxLDEsCi0gICAgMCwxMjUsMTUsMCwxMTYsMTksMCwxMjQsNSwwLDEwMCwyMCwwLDEyNCwxNSwwLAotICAgIDEzMSwzLDAsMSwxMTAsMCwwLDExNiwxOSwwLDEyNCw1LDAsMTAwLDIxLDAsCi0gICAgMTI0LDEyLDAsMTMxLDMsMCwxLDExNiwxOSwwLDEyNCw1LDAsMTAwLDE3LDAsCi0gICAgMTI0LDEzLDAsMTMxLDMsMCwxLDExNiwxOSwwLDEyNCw1LDAsMTAwLDE4LDAsCi0gICAgMTI0LDE0LDAsMTMxLDMsMCwxLDExNiwxOSwwLDEyNCw1LDAsMTAwLDIyLDAsCi0gICAgMTI0LDExLDAsMTMxLDMsMCwxLDExNiwxOSwwLDEyNCw1LDAsMTAwLDIzLDAsCi0gICAgMTE2LDI1LDAsMTI0LDEwLDAsMTMxLDEsMCwxMzEsMywwLDEsMTE2LDE5LDAsCi0gICAgMTI0LDUsMCwxMDAsMjQsMCwxMTYsMjYsMCwxMzEsMCwwLDEzMSwzLDAsMSwKLSAgICAxMTYsMjcsMCwxMDYsMjgsMCwxMTYsMCwwLDEwNiwyOSwwLDEzMSwwLDAsMTMxLAotICAgIDEsMCwxLDEyNCw5LDAsMTAwLDgsMCwxMDcsMiwwLDExNCwyMCwzLDExNiwKLSAgICAzMCwwLDEwNiwzMSwwLDEwMCwyNSwwLDEzMSwxLDAsMSwxMDAsMjYsMCwxMTYsCi0gICAgMjcsMCwxMDcsNiwwLDExNCwyMCwzLDEwMCwyOSwwLDExNiwzMywwLDk1LDM0LAotICAgIDAsMTEzLDIwLDMsMTEwLDAsMCwxMDAsMjcsMCw4Myw0MCwzMCwwLDAsMCwKLSAgICAxMTcsMjUwLDAsMCwwLDgzLDEwMSwxMTYsMTE3LDExMiwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LAorICAgIDExMCwxMDgsMTExLDk5LDEwNywxMDEsMTAwLDE1OSw4LDAsMCwxMTUsNDIsMCwwLDAsCisgICAgMCwxLDYsMSwxOSwxLDYsMSwxNSwxLDE2LDIsMTUsMSwxMSwxLAorICAgIDEzLDEsMywxLDEzLDEsMTMsMSwyMiwxLDI2LDEsMTUsMSwxMiwxLAorICAgIDMwLDIsMTgsMSw2LDIsMTMsMSwzMiwxLDExNCwxMTQsMSwwLDAsOTksCisgICAgMiwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMTAsMCwwLDAsCisgICAgNjcsMCwwLDAsMTE1LDM2LDAsMCwwLDExNiwwLDAsMTI0LDAsMCwxMzEsCisgICAgMSwwLDE0MywxOCwwLDEsMTE2LDEsMCwxMjQsMCwwLDEyNCwxLDAsMTMxLAorICAgIDIsMCw4Myw4NywxMDAsMSwwLDgxLDg4LDEwMCwxLDAsODMsNDEsMiwxMjIsCisgICAgNTQsNzAsMTA1LDExMCwxMDAsMzIsOTcsMTEwLDEwMCwzMiwxMDgsMTExLDk3LDEwMCwzMiwxMTYsCisgICAgMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0NCwzMiw5NywxMTAsMTAwLDMyLDExNCwKKyAgICAxMDEsMTA4LDEwMSw5NywxMTUsMTAxLDMyLDExNiwxMDQsMTAxLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsCisgICAgMTE2LDMyLDEwOCwxMTEsOTksMTA3LDQ2LDc4LDQxLDIsMTE0LDEwMywwLDAsMCwxMTQsCisgICAgMTE0LDEsMCwwLDQxLDIsMTE0LDY3LDAsMCwwLDExNCwxMTMsMSwwLDAsCisgICAgMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LAorICAgIDE0LDk1LDEwMiwxMDUsMTEwLDEwMCw5NSw5NywxMTAsMTAwLDk1LDEwOCwxMTEsOTcsMTAwLDE4NiwKKyAgICA4LDAsMCwxMTUsNCwwLDAsMCwwLDIsMTMsMSwxMTQsMTE1LDEsMCwKKyAgICAwLDk5LDMsMCwwLDAsMCwwLDAsMCw1LDAsMCwwLDQsMCwKKyAgICAwLDAsNjcsMCwwLDAsMTE1LDE3MiwwLDAsMCwxMTYsMCwwLDEyNCwwLAorICAgIDAsMTI0LDEsMCwxMjQsMiwwLDEzMSwzLDAsMSwxMjQsMiwwLDEwMCwxLAorICAgIDAsMTA3LDQsMCwxMTQsNDksMCwxMTYsMSwwLDEyNCwwLDAsMTI0LDEsMCwKKyAgICAxMjQsMiwwLDEzMSwzLDAsMTI1LDAsMCwxMTAsMCwwLDExNiwyLDAsMTA2LAorICAgIDMsMCwxMzEsMCwwLDEsMTI0LDAsMCwxMTYsNCwwLDEwNiw1LDAsMTA3LAorICAgIDcsMCwxMTQsODcsMCwxMTYsNiwwLDEyNCwwLDAsMTE2LDcsMCwxMzEsMiwKKyAgICAwLDgzLDExNiw0LDAsMTA2LDUsMCwxMjQsMCwwLDI1LDEyNSwzLDAsMTI0LAorICAgIDMsMCwxMDAsMiwwLDEwNyw4LDAsMTE0LDE1OCwwLDExNiwyLDAsMTA2LDgsCisgICAgMCwxMzEsMCwwLDEsMTAwLDMsMCwxMDYsOSwwLDEyNCwwLDAsMTMxLDEsCisgICAgMCwxMjUsNCwwLDExNiwxMCwwLDEyNCw0LDAsMTAwLDQsMCwxMjQsMCwwLAorICAgIDEzMSwxLDEsMTMwLDEsMCwxMTAsMCwwLDExNiwxMSwwLDEyNCwwLDAsMTMxLAorICAgIDEsMCwxLDEyNCwzLDAsODMsNDEsNSw5Nyw1MCwxLDAsMCw3MywxMDksCisgICAgMTEyLDExMSwxMTQsMTE2LDMyLDk3LDExMCwxMDAsMzIsMTE0LDEwMSwxMTYsMTE3LDExNCwxMTAsMzIsCisgICAgMTE2LDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsOTgsOTcsMTE1LDEwMSwxMDAsCisgICAgMzIsMTExLDExMCwzMiwxMDUsMTE2LDExNSwzMiwxMTAsOTcsMTA5LDEwMSw0NCwzMiwxMTYsMTA0LAorICAgIDEwMSwzMiwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsMzIsMTE2LDEwNCwxMDEsMzIsOTksOTcsCisgICAgMTA4LDEwOCwzMiwxMDUsMTE1LDEwLDMyLDMyLDMyLDMyLDk4LDEwMSwxMDUsMTEwLDEwMywzMiwKKyAgICAxMDksOTcsMTAwLDEwMSwzMiwxMDIsMTE0LDExMSwxMDksNDQsMzIsOTcsMTEwLDEwMCwzMiwxMTYsCisgICAgMTA0LDEwMSwzMiwxMDgsMTAxLDExOCwxMDEsMTA4LDMyLDk3LDEwMCwxMDYsMTE3LDExNSwxMTYsMTA5LAorICAgIDEwMSwxMTAsMTE2LDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDg0LDEwNCwxMDUsMTE1LDMyLDEwMiwKKyAgICAxMTcsMTEwLDk5LDExNiwxMDUsMTExLDExMCwzMiwxMTQsMTAxLDExMiwxMTQsMTAxLDExNSwxMDEsMTEwLAorICAgIDExNiwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsMTAzLDExNCwxMDEsOTcsMTE2LDEwMSwxMTUsMTE2LDMyLAorICAgIDk5LDExMSwxMDksMTA5LDExMSwxMTAsMzIsMTAwLDEwMSwxMTAsMTExLDEwOSwxMDUsMTEwLDk3LDExNiwKKyAgICAxMTEsMTE0LDMyLDExMSwxMDIsMzIsMTAyLDExNywxMTAsOTksMTE2LDEwNSwxMTEsMTEwLDk3LDEwOCwKKyAgICAxMDUsMTE2LDEyMSwxMCwzMiwzMiwzMiwzMiw5OCwxMDEsMTE2LDExOSwxMDEsMTAxLDExMCwzMiwKKyAgICAxMDUsMTA5LDExMiwxMTEsMTE0LDExNiw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiw5NywxMTAsCisgICAgMTAwLDMyLDk1LDk1LDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDk1LDk1LDQ2LDMyLDg0LDEwNCwKKyAgICAxMDUsMTE1LDMyLDEwNSwxMTAsOTksMTA4LDExNywxMDAsMTAxLDExNSwzMiwxMTUsMTAxLDExNiwxMTYsCisgICAgMTA1LDExMCwxMDMsMzIsOTUsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDk1LDk1LDMyLAorICAgIDEwNSwxMDIsMTAsMzIsMzIsMzIsMzIsMTE2LDEwNCwxMDEsMzIsMTA4LDExMSw5NywxMDAsMTAxLAorICAgIDExNCwzMiwxMDAsMTA1LDEwMCwzMiwxMTAsMTExLDExNiw0NiwxMCwxMCwzMiwzMiwzMiwzMiwKKyAgICAxMTQsODQsMCwwLDAsNzgsMTIyLDQwLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDMyLDExMSwKKyAgICAxMDIsMzIsMTIzLDEyNSwzMiwxMDQsOTcsMTA4LDExNiwxMDEsMTAwLDU5LDMyLDc4LDExMSwxMTAsCisgICAgMTAxLDMyLDEwNSwxMTAsMzIsMTE1LDEyMSwxMTUsNDYsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LAorICAgIDExNCw2NywwLDAsMCw0MSwxMiwxMTQsMTExLDEsMCwwLDExNCwxMDUsMSwwLAorICAgIDAsMTE0LDEwNiwwLDAsMCwxMTQsNCwxLDAsMCwxMTQsNywwLDAsMCwKKyAgICAxMTQsNzMsMCwwLDAsMTE0LDExNSwxLDAsMCwyMTgsMTEsOTUsMTAzLDk5LDEwMCwKKyAgICA5NSwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMTQsMTA3LDAsMCwwLDExNCw0NywwLDAsCisgICAgMCwxMTQsMTU0LDAsMCwwLDExNCwxMTIsMCwwLDAsNDEsNSwxMTQsNjcsMCwKKyAgICAwLDAsMTE0LDEwMywxLDAsMCwxMTQsMTA0LDEsMCwwLDExNCwxODAsMCwwLAorICAgIDAsMTE0LDE1MiwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwKKyAgICAxMTQsNSwwLDAsMCwxMTQsMTE2LDEsMCwwLDE5Miw4LDAsMCwxMTUsMjgsCisgICAgMCwwLDAsMCw5LDE2LDEsMTIsMSwyMSwxLDEwLDEsMTUsMSwxMywKKyAgICAxLDEzLDEsMTIsMSwxMCwxLDYsMSw5LDEsMjEsMSwxMCwxLDExNCwKKyAgICAxMTYsMSwwLDAsOTksMywwLDAsMCwwLDAsMCwwLDYsMCwwLAorICAgIDAsMTcsMCwwLDAsNjcsMCwwLDAsMTE1LDEsMSwwLDAsMTE2LDAsCisgICAgMCwxMjQsMCwwLDEwMCwxLDAsMTMxLDIsMCwxMTQsMjUzLDAsMTAwLDIsMCwKKyAgICAxMjQsMSwwLDEwNyw2LDAsMTE0LDg5LDAsMTE2LDEsMCwxMjQsMSwwLDEzMSwKKyAgICAxLDAsMTI1LDEsMCwxMjQsMSwwLDEwNiwyLDAsMTAwLDIsMCwxMzEsMSwKKyAgICAwLDEsMTE2LDAsMCwxMjQsMCwwLDEwMCwzLDAsMTMxLDIsMCwxMTQsODksCisgICAgMCwxMjQsMSwwLDEwNiwzLDAsMTI0LDAsMCwxMDYsNCwwLDEzMSwxLDAsCisgICAgMSwxMTMsODksMCwxMTAsMCwwLDEyMCwxNjEsMCwxMjQsMSwwLDY4LDkzLDE1MCwKKyAgICAwLDEyNSwzLDAsMTE2LDAsMCwxMjQsMCwwLDEyNCwzLDAsMTMxLDIsMCwKKyAgICAxMTUsOTYsMCwxMDAsNCwwLDEwNiw1LDAsMTI0LDAsMCwxMDYsNiwwLDEyNCwKKyAgICAzLDAsMTMxLDIsMCwxMjUsNCwwLDEyMSwxNywwLDExNiw3LDAsMTI0LDIsCisgICAgMCwxMjQsNCwwLDEzMSwyLDAsMSw4NywxMTMsMjQ2LDAsNCwxMTYsOCwwLAorICAgIDEwNywxMCwwLDExNCwyNDIsMCwxLDEyNSw1LDAsMSwxMjIsNTMsMCwxMTYsOSwKKyAgICAwLDEyNCw1LDAsMTMxLDEsMCwxMDYsMTAsMCwxMTYsMTEsMCwxMzEsMSwwLAorICAgIDExNCwyMjEsMCwxMjQsNSwwLDEwNiwxMiwwLDEyNCw0LDAsMTA3LDIsMCwxMTQsCisgICAgMjIxLDAsMTE5LDk2LDAsMTEzLDIyMSwwLDExMCwwLDAsMTMwLDAsMCw4Nyw4OSwKKyAgICAxMDAsNSwwLDEwMCw1LDAsMTI1LDUsMCwxMjYsNSwwLDg4LDExMywyNDYsMCwKKyAgICA4OCwxMTMsOTYsMCwxMTMsOTYsMCw4NywxMTAsMCwwLDEyNCwwLDAsODMsNDEsCisgICAgNiwxMjIsMjM4LDcwLDEwNSwxMDMsMTE3LDExNCwxMDEsMzIsMTExLDExNywxMTYsMzIsMTE5LDEwNCwKKyAgICA5NywxMTYsMzIsOTUsOTUsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsOTUsOTUsMzIsMTE1LDEwNCwKKyAgICAxMTEsMTE3LDEwOCwxMDAsMzIsMTE0LDEwMSwxMTYsMTE3LDExNCwxMTAsNDYsMTAsMTAsMzIsMzIsCisgICAgMzIsMzIsODQsMTA0LDEwMSwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiw5NSwzMiwxMTIsOTcsCisgICAgMTE0LDk3LDEwOSwxMDEsMTE2LDEwMSwxMTQsMzIsMTA1LDExNSwzMiw5NywzMiw5OSw5NywxMDgsCisgICAgMTA4LDk3LDk4LDEwOCwxMDEsMzIsMTE5LDEwNCwxMDUsOTksMTA0LDMyLDExNiw5NywxMDcsMTAxLAorICAgIDExNSwzMiwxMTYsMTA0LDEwMSwzMiwxMTAsOTcsMTA5LDEwMSwzMiwxMTEsMTAyLDMyLDEwOSwxMTEsCisgICAgMTAwLDExNywxMDgsMTAxLDMyLDExNiwxMTEsMTAsMzIsMzIsMzIsMzIsMTA1LDEwOSwxMTIsMTExLAorICAgIDExNCwxMTYsNDYsMzIsNzMsMTE2LDMyLDEwNSwxMTUsMzIsMTE0LDEwMSwxMTMsMTE3LDEwNSwxMTQsCisgICAgMTAxLDEwMCwzMiwxMTYsMTExLDMyLDEwMCwxMDEsOTksMTExLDExNywxMTIsMTA4LDEwMSwzMiwxMTYsCisgICAgMTA0LDEwMSwzMiwxMDIsMTE3LDExMCw5OSwxMTYsMTA1LDExMSwxMTAsMzIsMTAyLDExNCwxMTEsMTA5LAorICAgIDMyLDk3LDExNSwxMTUsMTE3LDEwOSwxMDUsMTEwLDEwMywzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwKKyAgICAxMDgsMTA1LDk4LDM5LDExNSwxMCwzMiwzMiwzMiwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwKKyAgICAzMiwxMDUsMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiw5NywxMTYsMTA1LDExMSwxMTAsMzIsCisgICAgMTA1LDExNSwzMiwxMDAsMTAxLDExNSwxMDUsMTE0LDEwMSwxMDAsNDYsMTAsMTAsMzIsMzIsMzIsCisgICAgMzIsMTE0LDI0NywwLDAsMCwyNTAsMSw0MiwyMTgsNyw5NSw5NSw5NywxMDgsMTA4LAorICAgIDk1LDk1LDEyMiw1LDEyMywxMjUsNDYsMTIzLDEyNSw3OCw0MSwxMywxMTQsNjAsMCwwLAorICAgIDAsMTE0LDI0NiwwLDAsMCwyMTgsNiwxMTQsMTAxLDEwOSwxMTEsMTE4LDEwMSwxMTQsMTk4LAorICAgIDAsMCwwLDExNCwxMTgsMSwwLDAsMTE0LDQ3LDAsMCwwLDExNCw1NywwLAorICAgIDAsMCwxMTQsMTE0LDAsMCwwLDExNCwxNTQsMCwwLDAsMTE0LDgzLDEsMCwKKyAgICAwLDExNCw5LDAsMCwwLDIxOCwxNSw5NSw2OSw4Miw4Miw5NSw3Nyw4Myw3MSwKKyAgICA5NSw4MCw4Miw2OSw3MCw3Myw4OCwxMTQsNjcsMCwwLDAsNDEsNiwxMTQsMTgwLAorICAgIDAsMCwwLDIxOCw4LDEwMiwxMTQsMTExLDEwOSwxMDgsMTA1LDExNSwxMTYsMTE0LDExMywxLAorICAgIDAsMCwxMTQsMTYsMCwwLDAsOTAsOSwxMDIsMTE0LDExMSwxMDksOTUsMTEwLDk3LAorICAgIDEwOSwxMDEsMTE0LDQxLDEsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwKKyAgICAwLDExNCw1LDAsMCwwLDIxOCwxNiw5NSwxMDQsOTcsMTEwLDEwMCwxMDgsMTAxLDk1LAorICAgIDEwMiwxMTQsMTExLDEwOSwxMDgsMTA1LDExNSwxMTYsMjE2LDgsMCwwLDExNSwzNCwwLDAsCisgICAgMCwwLDEwLDE1LDEsMTIsMSwxMiwxLDEzLDEsMTUsMSwyMiwxLDEzLAorICAgIDEsMTUsMSwyMSwxLDMsMSwxNywxLDE4LDQsMjEsMSwxNSwxLDksCisgICAgMSwzMiwxLDExNCwxMjIsMSwwLDAsOTksMSwwLDAsMCwwLDAsMCwKKyAgICAwLDIsMCwwLDAsMiwwLDAsMCw2NywwLDAsMCwxMTUsNzgsMCwKKyAgICAwLDAsMTI0LDAsMCwxMDYsMCwwLDEwMCwxLDAsMTMxLDEsMCwxMjUsMSwKKyAgICAwLDEyNCwxLDAsMTAwLDIsMCwxMDcsOCwwLDExNCw3NCwwLDEyNCwwLDAsCisgICAgMTAwLDMsMCwyNSwxMjUsMSwwLDEwMCw0LDAsMTI0LDAsMCwxMDcsNywwLAorICAgIDExNCw3NCwwLDEyNCwxLDAsMTA2LDEsMCwxMDAsNSwwLDEzMSwxLDAsMTAwLAorICAgIDYsMCwyNSwxMjUsMSwwLDExMyw3NCwwLDExMCwwLDAsMTI0LDEsMCw4MywKKyAgICA0MSw3LDEyMiwxNjcsNjcsOTcsMTA4LDk5LDExNywxMDgsOTcsMTE2LDEwMSwzMiwxMTksMTA0LAorICAgIDk3LDExNiwzMiw5NSw5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsOTUsOTUsMzIsMTE1LAorICAgIDEwNCwxMTEsMTE3LDEwOCwxMDAsMzIsOTgsMTAxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDk1LAorICAgIDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw5NSw5NSwzMiwxMDUsMTE1LDMyLDExMCwxMTEsCisgICAgMTE2LDMyLDEwMywxMTcsOTcsMTE0LDk3LDExMCwxMTYsMTAxLDEwMSwxMDAsMzIsMTE2LDExMSwzMiwKKyAgICA5OCwxMDEsMzIsMTAwLDEwMSwxMDIsMTA1LDExMCwxMDEsMTAwLDMyLDExMSwxMTQsMzIsOTksMTExLAorICAgIDExNywxMDgsMTAwLDMyLDk4LDEwMSwzMiwxMTUsMTAxLDExNiwzMiwxMTYsMTExLDMyLDc4LDExMSwKKyAgICAxMTAsMTAxLDEwLDMyLDMyLDMyLDMyLDExNiwxMTEsMzIsMTE0LDEwMSwxMTIsMTE0LDEwMSwxMTUsCisgICAgMTAxLDExMCwxMTYsMzIsMTE2LDEwNCw5NywxMTYsMzIsMTA1LDExNiwxMTUsMzIsMTEyLDExNCwxMTEsCisgICAgMTEyLDEwMSwxMTQsMzIsMTE4LDk3LDEwOCwxMTcsMTAxLDMyLDEwNSwxMTUsMzIsMTE3LDExMCwxMDcsCisgICAgMTEwLDExMSwxMTksMTEwLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDExNCwyNTEsMCwwLDAsCisgICAgNzgsMTE0LDU3LDAsMCwwLDExNCwyNDcsMCwwLDAsMTE0LDExNiwwLDAsMCwKKyAgICAxMTQsODQsMCwwLDAsNDEsMiwxMTQsOTMsMCwwLDAsMTE0LDMyLDAsMCwKKyAgICAwLDQxLDIsMjE4LDcsMTAzLDEwOCwxMTEsOTgsOTcsMTA4LDExNSwxMTQsMTAzLDEsMCwKKyAgICAwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLAorICAgIDIxOCwxNyw5NSw5OSw5NywxMDgsOTksOTUsOTUsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsCisgICAgMTAxLDk1LDk1LDI0OCw4LDAsMCwxMTUsMTIsMCwwLDAsMCw3LDE1LDEsCisgICAgMTIsMSwxMCwxLDEyLDEsMjUsMSwxMTQsMTI0LDEsMCwwLDk5LDAsMCwKKyAgICAwLDAsMCwwLDAsMCwzLDAsMCwwLDMsMCwwLDAsNjcsMCwKKyAgICAwLDAsMTE1LDU1LDAsMCwwLDExNiwwLDAsMTE2LDEsMCwxMDYsMiwwLAorICAgIDEzMSwwLDAsMTAyLDIsMCwxMjUsMCwwLDExNiwzLDAsMTE2LDQsMCwxMDIsCisgICAgMiwwLDEyNSwxLDAsMTE2LDUsMCwxMTYsNiwwLDEwMiwyLDAsMTI1LDIsCisgICAgMCwxMjQsMCwwLDEyNCwxLDAsMTI0LDIsMCwxMDMsMywwLDgzLDQxLDEsCisgICAgMTIyLDk1LDgyLDEwMSwxMTYsMTE3LDExNCwxMTAsMTE1LDMyLDk3LDMyLDEwOCwxMDUsMTE1LDExNiwKKyAgICAzMiwxMTEsMTAyLDMyLDEwMiwxMDUsMTA4LDEwMSw0NSw5OCw5NywxMTUsMTAxLDEwMCwzMiwxMDksCisgICAgMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDExNSw0NiwxMCwxMCwKKyAgICAzMiwzMiwzMiwzMiw2OSw5Nyw5OSwxMDQsMzIsMTA1LDExNiwxMDEsMTA5LDMyLDEwNSwxMTUsCisgICAgMzIsOTcsMzIsMTE2LDExNywxMTIsMTA4LDEwMSwzMiw0MCwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LAorICAgIDQ0LDMyLDExNSwxMTcsMTAyLDEwMiwxMDUsMTIwLDEwMSwxMTUsNDEsNDYsMTAsMzIsMzIsMzIsCisgICAgMzIsNDEsNywxMTQsNTcsMSwwLDAsMTE0LDEwNiwwLDAsMCwyMTgsMTgsMTAxLAorICAgIDEyMCwxMTYsMTAxLDExMCwxMTUsMTA1LDExMSwxMTAsOTUsMTE1LDExNywxMDIsMTAyLDEwNSwxMjAsMTAxLAorICAgIDExNSwxMTQsOSwxLDAsMCwxMTQsMTM1LDAsMCwwLDExNCw4LDEsMCwwLAorICAgIDExNCwyMzMsMCwwLDAsNDEsMyw5MCwxMCwxMDEsMTIwLDExNiwxMDEsMTEwLDExNSwxMDUsCisgICAgMTExLDExMCwxMTUsOTAsNiwxMTUsMTExLDExNywxMTQsOTksMTAxLDkwLDgsOTgsMTIxLDExNiwKKyAgICAxMDEsOTksMTExLDEwMCwxMDEsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LAorICAgIDUsMCwwLDAsMTE0LDI0MSwwLDAsMCw3LDksMCwwLDExNSw4LDAsCisgICAgMCwwLDAsNSwxOCwxLDEyLDEsMTIsMSwxMTQsMjQxLDAsMCwwLDk5LAorICAgIDUsMCwwLDAsMCwwLDAsMCw5LDAsMCwwLDUsMCwwLDAsCisgICAgNjcsMCwwLDAsMTE1LDIyNywwLDAsMCwxMjQsNCwwLDEwMCwxLDAsMTA3LAorICAgIDIsMCwxMTQsMjcsMCwxMTYsMCwwLDEyNCwwLDAsMTMxLDEsMCwxMjUsNSwKKyAgICAwLDExMCw1NCwwLDEyNCwxLDAsMTAwLDIsMCwxMDcsOSwwLDExNCw0NSwwLAorICAgIDEyNCwxLDAsMTEwLDMsMCwxMDUsMCwwLDEyNSw2LDAsMTE2LDEsMCwxMjQsCisgICAgNiwwLDEzMSwxLDAsMTI1LDcsMCwxMTYsMCwwLDEyNCwwLDAsMTI0LDcsCisgICAgMCwxMjQsNCwwLDEzMSwzLDAsMTI1LDUsMCwxMjQsMywwLDExNSwyMDcsMCwKKyAgICAxMjQsNCwwLDEwMCwxLDAsMTA3LDIsMCwxMTQsMTIyLDAsMTE2LDAsMCwxMjQsCisgICAgMCwwLDEwNiwyLDAsMTAwLDMsMCwxMzEsMSwwLDEwMCwxLDAsMjUsMTMxLAorICAgIDEsMCw4MywxMjQsMCwwLDExNSwxMzIsMCwxMjQsNSwwLDgzLDExNiwzLDAsCisgICAgMTI0LDAsMCwxMzEsMSwwLDExNiwzLDAsMTI0LDAsMCwxMDYsMiwwLDEwMCwKKyAgICAzLDAsMTMxLDEsMCwxMDAsMSwwLDI1LDEzMSwxLDAsMjQsMTI1LDgsMCwKKyAgICAxMTYsNCwwLDEwNiw1LDAsMTI0LDUsMCwxMDYsNiwwLDEwMCwyLDAsMTE2LAorICAgIDMsMCwxMjQsNSwwLDEwNiw2LDAsMTMxLDEsMCwxMjQsOCwwLDI0LDEzMywKKyAgICAyLDAsMjUsMjUsODMsMTEwLDE2LDAsMTE2LDcsMCwxMjQsNSwwLDEyNCwzLAorICAgIDAsMTE2LDAsMCwxMzEsMywwLDgzLDEwMCwyLDAsODMsNDEsNCw5NywyMTQsCisgICAgMSwwLDAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiwzMiw5NywzMiwxMDksMTExLDEwMCwxMTcsCisgICAgMTA4LDEwMSw0NiwxMCwxMCwzMiwzMiwzMiwzMiw4NCwxMDQsMTAxLDMyLDM5LDEwMywxMDgsCisgICAgMTExLDk4LDk3LDEwOCwxMTUsMzksMzIsOTcsMTE0LDEwMywxMTcsMTA5LDEwMSwxMTAsMTE2LDMyLAorICAgIDEwNSwxMTUsMzIsMTE3LDExNSwxMDEsMTAwLDMyLDExNiwxMTEsMzIsMTA1LDExMCwxMDIsMTAxLDExNCwKKyAgICAzMiwxMTksMTA0LDEwMSwxMTQsMTAxLDMyLDExNiwxMDQsMTAxLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsCisgICAgMTE2LDMyLDEwNSwxMTUsMzIsMTExLDk5LDk5LDExNywxMTQsMTA1LDExMCwxMDMsMzIsMTAyLDExNCwKKyAgICAxMTEsMTA5LDEwLDMyLDMyLDMyLDMyLDExNiwxMTEsMzIsMTA0LDk3LDExMCwxMDAsMTA4LDEwMSwKKyAgICAzMiwxMTQsMTAxLDEwOCw5NywxMTYsMTA1LDExOCwxMDEsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsCisgICAgMTE1LDQ2LDMyLDg0LDEwNCwxMDEsMzIsMzksMTA4LDExMSw5OSw5NywxMDgsMTE1LDM5LDMyLAorICAgIDk3LDExNCwxMDMsMTE3LDEwOSwxMDEsMTEwLDExNiwzMiwxMDUsMTE1LDMyLDEwNSwxMDMsMTEwLDExMSwKKyAgICAxMTQsMTAxLDEwMCw0NiwzMiw4NCwxMDQsMTAxLDEwLDMyLDMyLDMyLDMyLDM5LDEwMiwxMTQsCisgICAgMTExLDEwOSwxMDgsMTA1LDExNSwxMTYsMzksMzIsOTcsMTE0LDEwMywxMTcsMTA5LDEwMSwxMTAsMTE2LAorICAgIDMyLDExNSwxMTIsMTAxLDk5LDEwNSwxMDIsMTA1LDEwMSwxMTUsMzIsMTE5LDEwNCw5NywxMTYsMzIsCisgICAgMTE1LDEwNCwxMTEsMTE3LDEwOCwxMDAsMzIsMTAxLDEyMCwxMDUsMTE1LDExNiwzMiw5NywxMTUsMzIsCisgICAgOTcsMTE2LDExNiwxMTQsMTA1LDk4LDExNywxMTYsMTAxLDExNSwzMiwxMTEsMTEwLDMyLDExNiwxMDQsCisgICAgMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDEwLDMyLDMyLDMyLDMyLDk4LDEwMSwxMDUsCisgICAgMTEwLDEwMywzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTAwLDMyLDQwLDEwMSw0NiwxMDMsCisgICAgNDYsMzIsOTYsOTYsMTAyLDExNCwxMTEsMTA5LDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLAorICAgIDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDMyLDYwLDEwMiwxMTQsMTExLDEwOSwxMDgsMTA1LDExNSwxMTYsCisgICAgNjIsOTYsOTYsNDEsNDYsMzIsMzIsODQsMTA0LDEwMSwzMiwzOSwxMDgsMTAxLDExOCwxMDEsCisgICAgMTA4LDM5LDEwLDMyLDMyLDMyLDMyLDk3LDExNCwxMDMsMTE3LDEwOSwxMDEsMTEwLDExNiwzMiwKKyAgICAxMTQsMTAxLDExMiwxMTQsMTAxLDExNSwxMDEsMTEwLDExNiwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLAorICAgIDk3LDk5LDEwNyw5NywxMDMsMTAxLDMyLDEwOCwxMTEsOTksOTcsMTE2LDEwNSwxMTEsMTEwLDMyLAorICAgIDExNiwxMTEsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMzIsMTAyLDExNCwxMTEsMTA5LDMyLDEwNSwKKyAgICAxMTAsMzIsOTcsMzIsMTE0LDEwMSwxMDgsOTcsMTE2LDEwNSwxMTgsMTAxLDEwLDMyLDMyLDMyLAorICAgIDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDMyLDQwLDEwMSw0NiwxMDMsNDYsMzIsOTYsOTYsCisgICAgMTAyLDExNCwxMTEsMTA5LDMyLDQ2LDQ2LDExMiwxMDcsMTAzLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsCisgICAgMTE2LDMyLDEwOSwxMTEsMTAwLDk2LDk2LDMyLDExOSwxMTEsMTE3LDEwOCwxMDAsMzIsMTA0LDk3LAorICAgIDExOCwxMDEsMzIsOTcsMzIsMzksMTA4LDEwMSwxMTgsMTAxLDEwOCwzOSwzMiwxMTEsMTAyLDMyLAorICAgIDUwLDQxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDExNCw4NCwwLDAsMCw3OCwxMTQsCisgICAgMTE2LDAsMCwwLDQxLDgsMTE0LDExNiwxLDAsMCwxMTQsMTI0LDEsMCwwLAorICAgIDExNCwxMzQsMCwwLDAsMTE0LDMxLDAsMCwwLDExNCw3LDAsMCwwLDExNCwKKyAgICA3MywwLDAsMCwxMTQsNTcsMCwwLDAsMTE0LDEyMiwxLDAsMCw0MSw5LAorICAgIDExNCw2NywwLDAsMCwxMTQsMTIzLDEsMCwwLDIxOCw2LDEwOCwxMTEsOTksOTcsCisgICAgMTA4LDExNSwxMTQsMTIxLDEsMCwwLDExNCwxMDQsMSwwLDAsMTE0LDE4MCwwLDAsCisgICAgMCw5MCw4LDEwMywxMDgsMTExLDk4LDk3LDEwOCwxMTUsOTUsMTE0LDEwMywxLDAsMCwKKyAgICA5MCw3LDk5LDExNywxMTYsOTUsMTExLDEwMiwxMDIsMTE0LDQsMCwwLDAsMTE0LDQsCisgICAgMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDEwLDk1LDk1LDEwNSwxMDksMTEyLDExMSwKKyAgICAxMTQsMTE2LDk1LDk1LDE4LDksMCwwLDExNSwyNiwwLDAsMCwwLDExLDEyLAorICAgIDEsMTUsMiwyNCwxLDEyLDEsMTgsMSw2LDMsMTIsMSwyMywxLDYsCisgICAgMSw0LDQsMzUsMyw0MCwyLDExNCwxMjcsMSwwLDAsOTksMSwwLDAsCisgICAgMCwwLDAsMCwwLDMsMCwwLDAsMywwLDAsMCw2NywwLDAsCisgICAgMCwxMTUsNjgsMCwwLDAsMTE2LDAsMCwxMDYsMSwwLDEyNCwwLDAsMTMxLAorICAgIDEsMCwxMjUsMSwwLDEyNCwxLDAsMTAwLDAsMCwxMDcsOCwwLDExNCw0NiwKKyAgICAwLDExNiwyLDAsMTAwLDEsMCwxMjQsMCwwLDIzLDEzMSwxLDAsMTMwLDEsCisgICAgMCwxMTAsMCwwLDExNiwzLDAsMTI0LDEsMCwxMzEsMSwwLDEyNSwyLDAsCisgICAgMTI0LDIsMCwxMDYsNCwwLDEzMSwwLDAsODMsNDEsMiw3OCwxMjIsMjUsMTEwLAorICAgIDExMSwzMiw5OCwxMTcsMTA1LDEwOCwxMTYsNDUsMTA1LDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LAorICAgIDEwMSwzMiwxMTAsOTcsMTA5LDEwMSwxMDAsMzIsNDEsNSwxMTQsMTEsMSwwLDAsMTE0LAorICAgIDE0LDEsMCwwLDExNCwxNTQsMCwwLDAsMTE0LDE3NSwwLDAsMCwxMTQsNywKKyAgICAxLDAsMCw0MSwzLDExNCw2NywwLDAsMCwxMTQsMTc4LDAsMCwwLDExNCwKKyAgICAxNzksMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsCisgICAgMCwwLDAsMjE4LDE4LDk1LDk4LDExNywxMDUsMTA4LDExNiwxMDUsMTEwLDk1LDEwMiwxMTQsCisgICAgMTExLDEwOSw5NSwxMTAsOTcsMTA5LDEwMSw1Myw5LDAsMCwxMTUsMTAsMCwwLDAsCisgICAgMCwxLDE1LDEsMTIsMSwxOSwxLDEyLDEsMTE0LDEyOCwxLDAsMCw5OSwKKyAgICAyLDAsMCwwLDAsMCwwLDAsMTksMCwwLDAsMTIsMCwwLDAsCisgICAgNjcsMCwwLDAsMTE1LDIzMiwyLDAsMCwxMjQsMSwwLDk3LDAsMCwxMjQsCisgICAgMCwwLDk3LDEsMCwxMTYsMSwwLDEwNiwyLDAsMTA2LDMsMCwxMTQsMzMsCisgICAgMCwxMTYsNCwwLDk3LDUsMCwxMTAsNiwwLDExNiw2LDAsOTcsNSwwLAorICAgIDExNiw3LDAsMTE2LDEsMCwxMzEsMSwwLDEyNSwyLDAsMTIwLDEzOCwwLDExNiwKKyAgICAxLDAsMTA2LDgsMCwxMDYsOSwwLDEzMSwwLDAsNjgsOTMsMTIxLDAsOTIsCisgICAgMiwwLDEyNSwzLDAsMTI1LDQsMCwxMTYsMTAsMCwxMjQsNCwwLDEyNCwyLAorICAgIDAsMTMxLDIsMCwxMTQsNjcsMCwxMjQsMywwLDExNiwxLDAsMTA2LDExLDAsCisgICAgMTA3LDYsMCwxMTQsMTE4LDAsMTE2LDEyLDAsMTI1LDUsMCwxMTAsMjcsMCwxMTYsCisgICAgMCwwLDEwNiwxMywwLDEyNCwzLDAsMTMxLDEsMCwxMTQsNjcsMCwxMTYsMTQsCisgICAgMCwxMjUsNSwwLDExMCwzLDAsMTEzLDY3LDAsMTE2LDE1LDAsMTI0LDQsMCwKKyAgICAxMjQsNSwwLDEzMSwyLDAsMTI1LDYsMCwxMTYsMTYsMCwxMjQsNiwwLDEzMSwKKyAgICAxLDAsMTI1LDcsMCwxMjQsNywwLDEwNiwxNywwLDEyNCw0LDAsMTMxLDEsCisgICAgMCwxLDExMyw2NywwLDExMyw2NywwLDg3LDExNiwxLDAsMTA2LDgsMCwxMTYsCisgICAgMTgsMCwyNSwxMjUsOCwwLDEyMCw3MywwLDEwMCwyNiwwLDY4LDkzLDY1LDAsCisgICAgMTI1LDksMCwxMjQsOSwwLDExNiwxLDAsMTA2LDgsMCwxMDcsNywwLDExNCwKKyAgICAyNDgsMCwxMTYsMTksMCwxMjQsOSwwLDEzMSwxLDAsMTI1LDEwLDAsMTEwLDEzLAorICAgIDAsMTE2LDEsMCwxMDYsOCwwLDEyNCw5LDAsMjUsMTI1LDEwLDAsMTE2LDIwLAorICAgIDAsMTI0LDgsMCwxMjQsOSwwLDEyNCwxMCwwLDEzMSwzLDAsMSwxMTMsMjEyLAorICAgIDAsODcsMTAwLDUsMCwxMDAsNiwwLDEwMywxLDAsMTAyLDIsMCwxMDAsNywKKyAgICAwLDEwMCw4LDAsMTAwLDYsMCwxMDMsMiwwLDEwMiwyLDAsMTAyLDIsMCwKKyAgICAxMjUsMTEsMCwxMjAsMTQ2LDAsMTI0LDExLDAsNjgsOTMsMTI2LDAsOTIsMiwwLAorICAgIDEyNSwxMiwwLDEyNSwxMywwLDExNiwyMSwwLDEwMCw5LDAsMTAwLDEwLDAsMTMyLAorICAgIDAsMCwxMjQsMTMsMCw2OCwxMzEsMSwwLDEzMSwxLDAsMTE1LDEwOCwxLDExNiwKKyAgICAyMiwwLDEzMCwxLDAsMTI0LDEzLDAsMTAwLDExLDAsMjUsMTI1LDE0LDAsMTI0LAorICAgIDEyLDAsMTE2LDEsMCwxMDYsOCwwLDEwNyw2LDAsMTE0LDE1MCwxLDExNiwxLAorICAgIDAsMTA2LDgsMCwxMjQsMTIsMCwyNSwxMjUsMTUsMCw4MCwxMTMsNjUsMSwxMjEsCisgICAgMTcsMCwxMTYsMTksMCwxMjQsMTIsMCwxMzEsMSwwLDEyNSwxNSwwLDgwLDg3LAorICAgIDExMyw2NSwxLDQsMTE2LDIzLDAsMTA3LDEwLDAsMTE0LDE5MCwxLDEsMSwxLAorICAgIDExOSw2NSwxLDg5LDExMyw2NSwxLDg4LDExMyw2NSwxLDg3LDExNiwyMywwLDEwMCwKKyAgICAxMiwwLDEzMSwxLDAsMTMwLDEsMCwxMTYsMjAsMCwxMjQsOCwwLDEwMCwxMywKKyAgICAwLDEyNCwxNSwwLDEzMSwzLDAsMSwxMTYsMjAsMCwxMjQsOCwwLDEwMCwxNCwKKyAgICAwLDEyNCwxNCwwLDEzMSwzLDAsMSwxMTYsMjAsMCwxMjQsOCwwLDEwMCwxNSwKKyAgICAwLDEwMCwxNiwwLDEwNiwyNCwwLDEyNCwxMywwLDEzMSwxLDAsMTMxLDMsMCwKKyAgICAxLDEyMSwxNiwwLDExNiwxOSwwLDEwMCwxNywwLDEzMSwxLDAsMTI1LDE2LDAsCisgICAgODcsMTEwLDI0LDAsNCwxMTYsMjMsMCwxMDcsMTAsMCwxMTQsNTAsMiwxLDEsCisgICAgMSwxMDAsMTgsMCwxMjUsMTYsMCw4OSwxMTAsMSwwLDg4LDExNiwyMCwwLDEyNCwKKyAgICA4LDAsMTAwLDE3LDAsMTI0LDE2LDAsMTMxLDMsMCwxLDExNiwxOSwwLDEwMCwKKyAgICAxOSwwLDEzMSwxLDAsMTI1LDE3LDAsMTE2LDIwLDAsMTI0LDgsMCwxMDAsMTksCisgICAgMCwxMjQsMTcsMCwxMzEsMywwLDEsMTI0LDEyLDAsMTAwLDcsMCwxMDcsMiwKKyAgICAwLDExNCwxMzgsMiwxMTYsMTksMCwxMDAsMjAsMCwxMzEsMSwwLDEyNSwxOCwwLAorICAgIDExNiwyMCwwLDEyNCw4LDAsMTAwLDIxLDAsMTI0LDE4LDAsMTMxLDMsMCwxLAorICAgIDExMCwwLDAsMTE2LDIwLDAsMTI0LDgsMCwxMDAsMjIsMCwxMTYsMjUsMCwxMzEsCisgICAgMCwwLDEzMSwzLDAsMSwxMTYsMjYsMCwxMDYsMjcsMCwxMTYsMCwwLDEwNiwKKyAgICAyOCwwLDEzMSwwLDAsMTMxLDEsMCwxLDEyNCwxMiwwLDEwMCw3LDAsMTA3LAorICAgIDIsMCwxMTQsMjI4LDIsMTE2LDI5LDAsMTA2LDMwLDAsMTAwLDIzLDAsMTMxLDEsCisgICAgMCwxLDEwMCwyNCwwLDExNiwyNiwwLDEwNyw2LDAsMTE0LDIyOCwyLDEwMCwyNSwKKyAgICAwLDExNiwzMSwwLDk1LDMyLDAsMTEzLDIyOCwyLDExMCwwLDAsMTAwLDE4LDAsCisgICAgODMsNDEsMjcsMTIyLDI1MCw4MywxMDEsMTE2LDExNywxMTIsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwKICAgICAxMTYsMTA4LDEwNSw5OCwzMiw5OCwxMjEsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA1LDExMCwKICAgICAxMDMsMzIsMTEwLDEwMSwxMDEsMTAwLDEwMSwxMDAsMzIsOTgsMTE3LDEwNSwxMDgsMTE2LDQ1LDEwNSwKICAgICAxMTAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDMyLDk3LDExMCwxMDAsMzIsMTA1LDExMCwKQEAgLTQxOTEsMTAzICs0MjUyLDYwIEBACiAgICAgMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDQ0LDMyLDExNiwxMDQsMTExLDExNSwxMDEsMzIsCiAgICAgMTE2LDExOSwxMTEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDMyLDEwOSwxMTcsMTE1LDExNiwKICAgICAzMiw5OCwxMDEsMzIsMTAxLDEyMCwxMTIsMTA4LDEwNSw5OSwxMDUsMTE2LDEwOCwxMjEsMzIsMTEyLAotICAgIDk3LDExNSwxMTUsMTAxLDEwMCwzMiwxMDUsMTEwLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDExNywKLSAgICAxMCwwLDAsMCw5NSw5NSwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDk1LDk1LDExNywzLAotICAgIDAsMCwwLDk1LDEwNSwxMTEsMTE3LDksMCwwLDAsOTUsMTE5LDk3LDExNCwxMTAsCi0gICAgMTA1LDExMCwxMDMsMTE1LDExNyw4LDAsMCwwLDk4LDExNywxMDUsMTA4LDExNiwxMDUsMTEwLAotICAgIDExNSwxMTcsNywwLDAsMCwxMDksOTcsMTE0LDExNSwxMDQsOTcsMTA4LDExNyw1LDAsCi0gICAgMCwwLDExMiwxMTEsMTE1LDEwNSwxMjAsMTE3LDEsMCwwLDAsNDcsMTE3LDIsMCwKLSAgICAwLDAsMTEwLDExNiwxMTcsMSwwLDAsMCw5MiwxMTcsMywwLDAsMCwxMTEsCi0gICAgMTE1LDUwLDk5LDEsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDMsCi0gICAgMCwwLDAsMTE1LDAsMCwwLDExNSwzMywwLDAsMCwxMjQsMCwwLDkzLAotICAgIDIzLDAsMTI1LDEsMCwxMTYsMCwwLDEyNCwxLDAsMTMxLDEsMCwxMDAsMCwKLSAgICAwLDEwNywyLDAsODYsMSwxMTMsMywwLDEwMCwxLDAsODMsNDAsMiwwLAotICAgIDAsMCwxMDUsMSwwLDAsMCw3OCw0MCwxLDAsMCwwLDExNywzLDAsCi0gICAgMCwwLDEwOCwxMDEsMTEwLDQwLDIsMCwwLDAsMTE3LDIsMCwwLDAsNDYsCi0gICAgNDgsMTE3LDMsMCwwLDAsMTE1LDEwMSwxMTIsNDAsMCwwLDAsMCw0MCwwLAotICAgIDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwKLSAgICAxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwKLSAgICAxMTYsMTE0LDk3LDExMiw2MiwxMTcsOSwwLDAsMCw2MCwxMDMsMTAxLDExMCwxMDEsMTIwLAotICAgIDExMiwxMTQsNjIsMTkxLDYsMCwwLDExNSwyLDAsMCwwLDYsMCwxMTcsMjUsCi0gICAgMCwwLDAsOTUsMTE1LDEwMSwxMTYsMTE3LDExMiw0Niw2MCwxMDgsMTExLDk5LDk3LDEwOCwKLSAgICAxMTUsNjIsNDYsNjAsMTAzLDEwMSwxMTAsMTAxLDEyMCwxMTIsMTE0LDYyLDEwNSwwLDAsMCwKLSAgICAwLDExNyw3LDAsMCwwLDY5LDc3LDg4LDMyLDcxLDY3LDY3LDEwNSwxLDAsCi0gICAgMCwwLDExNywzMCwwLDAsMCwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LAotICAgIDMyLDExNCwxMDEsMTEzLDExNywxMDUsMTE0LDEwMSwxMTUsMzIsMTEyLDExMSwxMTUsMTA1LDEyMCwzMiwKLSAgICAxMTEsMTE0LDMyLDExMCwxMTYsMTE3LDcsMCwwLDAsOTUsMTE2LDEwNCwxMTQsMTAxLDk3LAotICAgIDEwMCwxMTcsOCwwLDAsMCw5NSwxMTksMTAxLDk3LDEwNywxMTQsMTAxLDEwMiwxMTcsNiwKLSAgICAwLDAsMCwxMTksMTA1LDExMCwxMTQsMTAxLDEwMywxMTcsNywwLDAsMCw5NSwxMTksCi0gICAgMTA1LDExMCwxMTQsMTAxLDEwMywxMTcsMywwLDAsMCw5NSwxMTEsMTE1LDExNyw4LDAsCi0gICAgMCwwLDExMiw5NywxMTYsMTA0LDk1LDExNSwxMDEsMTEyLDExNywxNSwwLDAsMCwxMTIsCi0gICAgOTcsMTE2LDEwNCw5NSwxMTUsMTAxLDExMiw5NywxMTQsOTcsMTE2LDExMSwxMTQsMTE1LDExNywxMSwKLSAgICAwLDAsMCw5NSwxMTQsMTAxLDEwOCw5NywxMjAsOTUsOTksOTcsMTE1LDEwMSwxMTcsNCwKLSAgICAwLDAsMCw0NiwxMTIsMTIxLDExOSwxMTcsNiwwLDAsMCw5NSwxMDAsNDYsMTEyLAotICAgIDEyMSwxMDAsNzgsNDAsNCwwLDAsMCwxMTcsMywwLDAsMCw5NSwxMDUsMTExLAotICAgIDExNyw5LDAsMCwwLDk1LDExOSw5NywxMTQsMTEwLDEwNSwxMTAsMTAzLDExNSwxMTcsOCwKLSAgICAwLDAsMCw5OCwxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCwxMTUsMTE3LDcsMCwwLDAsCi0gICAgMTA5LDk3LDExNCwxMTUsMTA0LDk3LDEwOCw4NCw0MCwzNSwwLDAsMCwxMTcsNCwwLAotICAgIDAsMCw5NSwxMDUsMTA5LDExMiwxMTcsMywwLDAsMCwxMTUsMTIxLDExNSwxMTcsNSwKLSAgICAwLDAsMCwxMDIsMTA4LDk3LDEwMywxMTUsMTE3LDgsMCwwLDAsMTExLDExMiwxMTYsCi0gICAgMTA1LDEwOSwxMDUsMTIyLDEwMSwxMTcsMjcsMCwwLDAsNzksODAsODQsNzMsNzcsNzMsCi0gICAgOTAsNjksNjgsOTUsNjYsODksODQsNjksNjcsNzksNjgsNjksOTUsODMsODUsNzAsCi0gICAgNzAsNzMsODgsNjksODMsMTE3LDE3LDAsMCwwLDY2LDg5LDg0LDY5LDY3LDc5LAotICAgIDY4LDY5LDk1LDgzLDg1LDcwLDcwLDczLDg4LDY5LDgzLDExNywyMywwLDAsMCwKLSAgICA2OCw2OSw2Niw4NSw3MSw5NSw2Niw4OSw4NCw2OSw2Nyw3OSw2OCw2OSw5NSw4MywKLSAgICA4NSw3MCw3MCw3Myw4OCw2OSw4MywxMTcsNCwwLDAsMCwxMTYsMTIxLDExMiwxMDEsCi0gICAgMTE3LDcsMCwwLDAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDExNyw1LDAsMCwKLSAgICAwLDEwNSwxMTYsMTAxLDEwOSwxMTUsMTE3LDEwLDAsMCwwLDEwNSwxMTUsMTA1LDExMCwxMTUsCi0gICAgMTE2LDk3LDExMCw5OSwxMDEsMTE3LDcsMCwwLDAsMTA0LDk3LDExNSw5NywxMTYsMTE2LAotICAgIDExNCwxMTcsMjAsMCwwLDAsOTgsMTE3LDEwNSwxMDgsMTE2LDEwNSwxMTAsOTUsMTA5LDExMSwKLSAgICAxMDAsMTE3LDEwOCwxMDEsOTUsMTEwLDk3LDEwOSwxMDEsMTE1LDExNywxNSwwLDAsMCw2NiwKLSAgICAxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsMTE3LDEwLAotICAgIDAsMCwwLDk1LDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsOTUsOTUsMTE3LDksMCwKLSAgICAwLDAsMTA1LDExNSw5NSwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwxMTcsMTQsMCwwLDAsCi0gICAgNzAsMTE0LDExMSwxMjIsMTAxLDExMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsMTE3LDgsCi0gICAgMCwwLDAsOTUsOTUsMTEwLDk3LDEwOSwxMDEsOTUsOTUsMTE3LDExLDAsMCwwLAotICAgIDEwOCwxMTEsOTcsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNyw3LDAsMCwwLAotICAgIDExNSwxMDEsMTE2LDk3LDExNiwxMTYsMTE0LDExNywzLDAsMCwwLDk3LDEwOCwxMDgsMTE3LAotICAgIDE0LDAsMCwwLDY1LDExNSwxMTUsMTAxLDExNCwxMTYsMTA1LDExMSwxMTAsNjksMTE0LDExNCwKLSAgICAxMTEsMTE0LDExNyw3LDAsMCwwLDExOCwxMDEsMTE0LDExNSwxMDUsMTExLDExMCwxMTcsMTEsCi0gICAgMCwwLDAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiw2OSwxMTQsMTE0LDExMSwxMTQsMTE3LDQsCi0gICAgMCwwLDAsNzgsMTExLDExMCwxMDEsMTE3LDMsMCwwLDAsMTE1LDEwMSwxMTYsMTE3LAotICAgIDE2LDAsMCwwLDk1LDEwOSw5NywxMDcsMTAxLDk1LDExNCwxMDEsMTA4LDk3LDEyMCw5NSwKLSAgICA5OSw5NywxMTUsMTAxLDExNywxOCwwLDAsMCw2OSw4OCw4NCw2OSw3OCw4Myw3MywKLSAgICA3OSw3OCw5NSw4Myw4NSw3MCw3MCw3Myw4OCw2OSw4MywxMTcsNiwwLDAsMCwKLSAgICAxMDEsMTIwLDExNiwxMDEsMTEwLDEwMCwxMTcsMTgsMCwwLDAsMTAxLDEyMCwxMTYsMTAxLDExMCwKLSAgICAxMTUsMTA1LDExMSwxMTAsOTUsMTE1LDExNywxMDIsMTAyLDEwNSwxMjAsMTAxLDExNSwxMTcsMTUsMCwKLSAgICAwLDAsODMsNzksODUsODIsNjcsNjksOTUsODMsODUsNzAsNzAsNzMsODgsNjksCi0gICAgODMsMTE3LDYsMCwwLDAsOTcsMTEyLDExMiwxMDEsMTEwLDEwMCwxMTcsNCwwLDAsCi0gICAgMCw4NCwxMTQsMTE3LDEwMSwxMTcsMjEsMCwwLDAsODcsMTA1LDExMCwxMDAsMTExLDExOSwKLSAgICAxMTUsODIsMTAxLDEwMywxMDUsMTE1LDExNiwxMTQsMTIxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsMTE3LAotICAgIDExLDAsMCwwLDY4LDY5LDY2LDg1LDcxLDk1LDY2LDg1LDczLDc2LDY4LDQwLAotICAgIDE2LDAsMCwwLDExNywxMCwwLDAsMCwxMTUsMTIxLDExNSw5NSwxMDksMTExLDEwMCwKLSAgICAxMTcsMTA4LDEwMSwxMTcsMTEsMCwwLDAsOTUsMTA1LDEwOSwxMTIsOTUsMTA5LDExMSwxMDAsCi0gICAgMTE3LDEwOCwxMDEsMTE3LDExLDAsMCwwLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDExNiwKLSAgICAxMjEsMTEyLDEwMSwxMTcsNCwwLDAsMCwxMTAsOTcsMTA5LDEwMSwxMTcsNiwwLDAsCi0gICAgMCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTcsMTEsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLAotICAgIDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNywxMiwwLDAsMCw5OCwxMTcsMTA1LDEwOCwKLSAgICAxMTYsMTA1LDExMCw5NSwxMTAsOTcsMTA5LDEwMSwxMTcsMTQsMCwwLDAsOTgsMTE3LDEwNSwKLSAgICAxMDgsMTE2LDEwNSwxMTAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE3LDEwLDAsMCwwLAotICAgIDExMSwxMTUsOTUsMTAwLDEwMSwxMTYsOTcsMTA1LDEwOCwxMTUsMTE3LDEwLDAsMCwwLDk4LAotICAgIDExNywxMDUsMTA4LDExNiwxMDUsMTEwLDk1LDExMSwxMTUsMTE3LDE1LDAsMCwwLDExMiw5NywKLSAgICAxMTYsMTA0LDk1LDExNSwxMDEsMTEyLDk3LDExNCw5NywxMTYsMTExLDExNCwxMTUsMTE3LDgsMCwKLSAgICAwLDAsMTEyLDk3LDExNiwxMDQsOTUsMTE1LDEwMSwxMTIsMTE3LDksMCwwLDAsMTExLAotICAgIDExNSw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTcsMTMsMCwwLDAsMTE2LDEwNCwxMTQsCi0gICAgMTAxLDk3LDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTcsMTQsMCwwLDAsMTE5LAotICAgIDEwMSw5NywxMDcsMTE0LDEwMSwxMDIsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE3LDEzLDAsCi0gICAgMCwwLDExOSwxMDUsMTEwLDExNCwxMDEsMTAzLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQwLAotICAgIDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLAotICAgIDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0NiwKLSAgICA5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDYsMCwwLDAsCi0gICAgOTUsMTE1LDEwMSwxMTYsMTE3LDExMiwxNTQsNiwwLDAsMTE1LDEwNiwwLDAsMCwwLAotICAgIDksNiwxLDYsMiwxMiwxLDksMiw2LDIsMTIsMSwyOCwxLDE1LAotICAgIDEsMTUsMSwxNSwxLDEyLDEsMTUsMSwyMiwyLDEzLDEsMTMsMSwxNSwKLSAgICAxLDE4LDIsMTMsMSwyMCwyLDQ4LDEsMTksMiwzMSwxLDEwLDEsMTUsCi0gICAgMSwxMywxLDQsMiwzLDEsMTUsMiwyNywxLDEzLDEsNSwxLDEzLAotICAgIDEsMTIsMiwxMiwyLDMsMSwxOSwxLDEzLDIsMTEsMSwxNSwyLDEyLAotICAgIDEsMTUsMSwxOSwyLDE2LDEsMTYsMSwxNiwxLDE2LDEsMjIsMiwxOSwKLSAgICAxLDE5LDEsMTIsMSwxMywxLDEyLDEsMTE3LDYsMCwwLDAsOTUsMTE1LAotICAgIDEwMSwxMTYsMTE3LDExMiw5OSwyLDAsMCwwLDAsMCwwLDAsMywwLDAsCisgICAgOTcsMTE1LDExNSwxMDEsMTAwLDMyLDEwNSwxMTAsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMTE0LAorICAgIDQ5LDAsMCwwLDExNCwxNjcsMCwwLDAsMjE4LDgsOTgsMTE3LDEwNSwxMDgsMTE2LAorICAgIDEwNSwxMTAsMTE1LDExNCwxOTIsMCwwLDAsOTAsNSwxMTIsMTExLDExNSwxMDUsMTIwLDI1MCwKKyAgICAxLDQ3LDIxOCwyLDExMCwxMTYsMjUwLDEsOTIsOTksMSwwLDAsMCwwLDAsCisgICAgMCwwLDIsMCwwLDAsMywwLDAsMCwxMTUsMCwwLDAsMTE1LDMzLAorICAgIDAsMCwwLDEyNCwwLDAsOTMsMjMsMCwxMjUsMSwwLDExNiwwLDAsMTI0LAorICAgIDEsMCwxMzEsMSwwLDEwMCwwLDAsMTA3LDIsMCw4NiwxLDExMywzLDAsCisgICAgMTAwLDEsMCw4Myw0MSwyLDExNCwyOSwwLDAsMCw3OCw0MSwxLDExNCwzMSwKKyAgICAwLDAsMCw0MSwyLDExNCwyMiwwLDAsMCwxMTQsMTI5LDAsMCwwLDExNCwKKyAgICA0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCw3NywKKyAgICAwLDAsMCwxMDUsOSwwLDAsMTE1LDIsMCwwLDAsNiwwLDEyMiwyNSwKKyAgICA5NSwxMTUsMTAxLDExNiwxMTcsMTEyLDQ2LDYwLDEwOCwxMTEsOTksOTcsMTA4LDExNSw2Miw0NiwKKyAgICA2MCwxMDMsMTAxLDExMCwxMDEsMTIwLDExMiwxMTQsNjIsMTE0LDg0LDAsMCwwLDEyMiwzMCwKKyAgICAxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDMyLDExNCwxMDEsMTEzLDExNywxMDUsMTE0LAorICAgIDEwMSwxMTUsMzIsMTEyLDExMSwxMTUsMTA1LDEyMCwzMiwxMTEsMTE0LDMyLDExMCwxMTYsMTE0LDMsCisgICAgMCwwLDAsMTE0LDI1LDAsMCwwLDExNCwyMSwwLDAsMCwxMTQsMzAsMCwKKyAgICAwLDAsMTE0LDg1LDAsMCwwLDc4LDExNCwxMTEsMCwwLDAsOTAsNiwxMTksCisgICAgMTA1LDExMCwxMTQsMTAxLDEwMywxMTQsMjQsMSwwLDAsMTE0LDYsMCwwLDAsMTIyLAorICAgIDQsNDYsMTEyLDEyMSwxMTksMTIyLDYsOTUsMTAwLDQ2LDExMiwxMjEsMTAwLDg0LDQxLDQsCisgICAgMTIyLDMsOTUsMTA1LDExMSwxMjIsOSw5NSwxMTksOTcsMTE0LDExMCwxMDUsMTEwLDEwMywxMTUsCisgICAgMTIyLDgsOTgsMTE3LDEwNSwxMDgsMTE2LDEwNSwxMTAsMTE1LDEyMiw3LDEwOSw5NywxMTQsMTE1LAorICAgIDEwNCw5NywxMDgsNDEsMzMsMTE0LDEwNiwwLDAsMCwxMTQsNywwLDAsMCwxMTQsCisgICAgMTE3LDAsMCwwLDExNCwxMTgsMCwwLDAsMTE0LDEyMCwwLDAsMCwxMTQsMjMzLAorICAgIDAsMCwwLDExNCwxMTksMCwwLDAsMTE0LDY2LDAsMCwwLDExNCw3MywwLAorICAgIDAsMCwyMTgsNSwxMDUsMTE2LDEwMSwxMDksMTE1LDExNCwxOTMsMCwwLDAsMTE0LDE1OCwKKyAgICAwLDAsMCwxMTQsMTEsMSwwLDAsMTE0LDE2MywwLDAsMCwxMTQsMjAsMSwKKyAgICAwLDAsMTE0LDI0OCwwLDAsMCwxMTQsMTc1LDAsMCwwLDExNCwyNTUsMCwwLAorICAgIDAsMTE0LDU3LDAsMCwwLDExNCwxMjgsMSwwLDAsMTE0LDYxLDAsMCwwLAorICAgIDIxOCwzLDk3LDEwOCwxMDgsMTE0LDEwMCwwLDAsMCwxMTQsMTU0LDAsMCwwLDExNCwKKyAgICAyNiwwLDAsMCwxMTQsMTEsMCwwLDAsMTE0LDYwLDEsMCwwLDExNCwxOTgsCisgICAgMCwwLDAsMTE0LDEyNSwxLDAsMCwxMTQsMTM1LDAsMCwwLDExNCwyMjQsMCwKKyAgICAwLDAsMTE0LDIzLDEsMCwwLDExNCwyNywxLDAsMCw0MSwxOSwyMTgsMTAsCisgICAgMTE1LDEyMSwxMTUsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMjE4LDExLDk1LDEwNSwxMDksMTEyLAorICAgIDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDkwLDExLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LAorICAgIDExNiwxMjEsMTEyLDEwMSwxMTQsNjcsMCwwLDAsMTE0LDE4MCwwLDAsMCwxMTQsMTcwLAorICAgIDAsMCwwLDExNCwxNzgsMCwwLDAsMTE0LDE3OSwwLDAsMCw5MCwxMSwxMTUsCisgICAgMTAxLDEwOCwxMDIsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTAsMTIsOTgsMTE3LDEwNSwxMDgsCisgICAgMTE2LDEwNSwxMTAsOTUsMTEwLDk3LDEwOSwxMDEsOTAsMTQsOTgsMTE3LDEwNSwxMDgsMTE2LDEwNSwKKyAgICAxMTAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTAsMTAsMTExLDExNSw5NSwxMDAsMTAxLDExNiwKKyAgICA5NywxMDUsMTA4LDExNSw5MCwxMCw5OCwxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCw5NSwxMTEsMTE1LAorICAgIDExNCwyMSwwLDAsMCwxMTQsMjUsMCwwLDAsOTAsOSwxMTEsMTE1LDk1LDEwOSwKKyAgICAxMTEsMTAwLDExNywxMDgsMTAxLDkwLDEzLDExNiwxMDQsMTE0LDEwMSw5NywxMDAsOTUsMTA5LDExMSwKKyAgICAxMDAsMTE3LDEwOCwxMDEsOTAsMTQsMTE5LDEwMSw5NywxMDcsMTE0LDEwMSwxMDIsOTUsMTA5LDExMSwKKyAgICAxMDAsMTE3LDEwOCwxMDEsOTAsMTMsMTE5LDEwNSwxMTAsMTE0LDEwMSwxMDMsOTUsMTA5LDExMSwxMDAsCisgICAgMTE3LDEwOCwxMDEsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwKKyAgICAwLDAsMjE4LDYsOTUsMTE1LDEwMSwxMTYsMTE3LDExMiw2MSw5LDAsMCwxMTUsMTA4LAorICAgIDAsMCwwLDAsOSw2LDEsNiwyLDEyLDEsOSwyLDYsMywxMiwKKyAgICAxLDI4LDEsMTUsMSwxNSwxLDksMSwxNSwxLDksMiwzLDEsMTUsCisgICAgMSwxMiwxLDIwLDMsMTMsMSwxMywxLDE1LDEsMTUsMiwxMywxLDIwLAorICAgIDMsMzMsMSwxOSwyLDMxLDEsMTAsMSwxNSwxLDEzLDEsNCwyLDMsCisgICAgMSwxMiwxLDUsMSwxMywxLDEyLDIsMTIsMSwxNiwxLDE2LDEsMjUsCisgICAgMywzLDEsMTYsMSwxMywyLDExLDEsMTYsMywxMiwxLDE2LDMsMTIsCisgICAgMSwxMiwxLDE5LDMsMTksMSwxOSwxLDEyLDEsMTMsMSwxMiwxLDExNCwKKyAgICAxMzcsMSwwLDAsOTksMiwwLDAsMCwwLDAsMCwwLDMsMCwwLAogICAgIDAsMywwLDAsMCw2NywwLDAsMCwxMTUsMTM2LDAsMCwwLDExNiwwLAogICAgIDAsMTI0LDAsMCwxMjQsMSwwLDEzMSwyLDAsMSwxMTYsMSwwLDEzMSwwLAogICAgIDAsMTI1LDIsMCwxMTYsMiwwLDEwNiwzLDAsMTA2LDQsMCwxMTYsNSwwLApAQCAtNDI5NywxMzQgKzQzMTUsNjMgQEAKICAgICAxMTYsMTEsMCwxMDYsMTIsMCwxMDAsMSwwLDEwNywyLDAsMTE0LDExNiwwLDExNiwKICAgICAyLDAsMTA2LDcsMCwxMDYsOCwwLDExNiwxMywwLDEzMSwxLDAsMSwxMTAsCiAgICAgMCwwLDExNiwyLDAsMTA2LDcsMCwxMDYsOCwwLDExNiwxNCwwLDEzMSwxLAotICAgIDAsMSwxMDAsMiwwLDgzLDQwLDMsMCwwLDAsMTE3LDUwLDAsMCwwLAotICAgIDczLDExMCwxMTUsMTE2LDk3LDEwOCwxMDgsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSwKLSAgICA5OCwzMiw5NywxMTUsMzIsMTE2LDEwNCwxMDEsMzIsMTA1LDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLAotICAgIDExMCwxMTYsOTcsMTE2LDEwNSwxMTEsMTEwLDMyLDExMSwxMDIsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwKLSAgICAxMTYsNDYsMTE3LDIsMCwwLDAsMTEwLDExNiw3OCw0MCwxNSwwLDAsMCwxMTcsCi0gICAgNiwwLDAsMCw5NSwxMTUsMTAxLDExNiwxMTcsMTEyLDExNywyNywwLDAsMCw5NSwKLSAgICAxMDMsMTAxLDExNiw5NSwxMTUsMTE3LDExMiwxMTIsMTExLDExNCwxMTYsMTAxLDEwMCw5NSwxMDIsMTA1LAotICAgIDEwOCwxMDEsOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCwxMTUsMTE3LDMsMCwwLDAsMTE1LAotICAgIDEyMSwxMTUsMTE3LDEwLDAsMCwwLDExMiw5NywxMTYsMTA0LDk1LDEwNCwxMTEsMTExLDEwNywKLSAgICAxMTUsMTE3LDYsMCwwLDAsMTAxLDEyMCwxMTYsMTAxLDExMCwxMDAsMTE3LDEwLDAsMCwKLSAgICAwLDcwLDEwNSwxMDgsMTAxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsMTE3LDksMCwwLDAsCi0gICAgMTEyLDk3LDExNiwxMDQsOTUsMTA0LDExMSwxMTEsMTA3LDExNyw5LDAsMCwwLDEwOSwxMDEsCi0gICAgMTE2LDk3LDk1LDExMiw5NywxMTYsMTA0LDExNyw2LDAsMCwwLDk3LDExMiwxMTIsMTAxLAotICAgIDExMCwxMDAsMTE3LDE1LDAsMCwwLDY2LDExNywxMDUsMTA4LDExNiwxMDUsMTEwLDczLDEwOSwKLSAgICAxMTIsMTExLDExNCwxMTYsMTAxLDExNCwxMTcsMTQsMCwwLDAsNzAsMTE0LDExMSwxMjIsMTAxLAotICAgIDExMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsMTE3LDMsMCwwLDAsOTUsMTExLAotICAgIDExNSwxMTcsOCwwLDAsMCw5NSw5NSwxMTAsOTcsMTA5LDEwMSw5NSw5NSwxMTcsMjEsCi0gICAgMCwwLDAsODcsMTA1LDExMCwxMDAsMTExLDExOSwxMTUsODIsMTAxLDEwMywxMDUsMTE1LDExNiwKLSAgICAxMTQsMTIxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsMTE3LDEwLDAsMCwwLDgwLDk3LDExNiwKLSAgICAxMDQsNzAsMTA1LDExMCwxMDAsMTAxLDExNCw0MCwzLDAsMCwwLDExNywxMCwwLDAsCi0gICAgMCwxMTUsMTIxLDExNSw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTcsMTEsMCwwLDAsCi0gICAgOTUsMTA1LDEwOSwxMTIsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE3LDE3LDAsMCwwLAotICAgIDExNSwxMTcsMTEyLDExMiwxMTEsMTE0LDExNiwxMDEsMTAwLDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsCi0gICAgMTE1LDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsCi0gICAgNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSwKLSAgICA5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDgsMCwKLSAgICAwLDAsOTUsMTA1LDExMCwxMTUsMTE2LDk3LDEwOCwxMDgsMjMzLDYsMCwwLDExNSwxNiwKLSAgICAwLDAsMCwwLDIsMTMsMSw5LDEsMjgsMSwxNiwxLDE2LDEsMTUsCi0gICAgMSwxOSwxLDExNyw4LDAsMCwwLDk1LDEwNSwxMTAsMTE1LDExNiw5NywxMDgsMTA4LAotICAgIDc4LDQwLDMsMCwwLDAsMTE3LDMsMCwwLDAsMTE5LDEwNSwxMTAsMTE3LDYsCi0gICAgMCwwLDAsOTksMTIxLDEwMywxMTksMTA1LDExMCwxMTcsNiwwLDAsMCwxMDAsOTcsCi0gICAgMTE0LDExOSwxMDUsMTEwLDQwLDc0LDAsMCwwLDExNyw3LDAsMCwwLDk1LDk1LAotICAgIDEwMCwxMTEsOTksOTUsOTUsMTE3LDI3LDAsMCwwLDk1LDY3LDY1LDgzLDY5LDk1LAotICAgIDczLDc4LDgzLDY5LDc4LDgzLDczLDg0LDczLDg2LDY5LDk1LDgwLDc2LDY1LDg0LAotICAgIDcwLDc5LDgyLDc3LDgzLDExNywxNiwwLDAsMCw5NSwxMDksOTcsMTA3LDEwMSw5NSwKLSAgICAxMTQsMTAxLDEwOCw5NywxMjAsOTUsOTksOTcsMTE1LDEwMSwxMTcsNywwLDAsMCw5NSwKLSAgICAxMTksOTUsMTA4LDExMSwxMTAsMTAzLDExNyw3LDAsMCwwLDk1LDExNCw5NSwxMDgsMTExLAotICAgIDExMCwxMDMsMTE3LDEwLDAsMCwwLDk1LDExMiw5NywxMTYsMTA0LDk1LDEwNiwxMTEsMTA1LAotICAgIDExMCwxMTcsMTEsMCwwLDAsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTE1LDExMiwxMDgsMTA1LAotICAgIDExNiwxMTcsMTgsMCwwLDAsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTA1LDExNSw5NSwxMDksCi0gICAgMTExLDEwMCwxMDEsOTUsMTE2LDEyMSwxMTIsMTAxLDExNywxMiwwLDAsMCw5NSwxMTIsOTcsCi0gICAgMTE2LDEwNCw5NSwxMDUsMTE1LDEwMiwxMDUsMTA4LDEwMSwxMTcsMTEsMCwwLDAsOTUsMTEyLAotICAgIDk3LDExNiwxMDQsOTUsMTA1LDExNSwxMDAsMTA1LDExNCwxMTcsMTMsMCwwLDAsOTUsMTE5LAotICAgIDExNCwxMDUsMTE2LDEwMSw5NSw5NywxMTYsMTExLDEwOSwxMDUsOTksMTE3LDUsMCwwLDAsCi0gICAgOTUsMTE5LDExNCw5NywxMTIsMTE3LDQsMCwwLDAsMTE2LDEyMSwxMTIsMTAxLDExNyw4LAotICAgIDAsMCwwLDk1LDk1LDk5LDExMSwxMDAsMTAxLDk1LDk1LDExNywxMCwwLDAsMCwKLSAgICA5NSw5OSwxMTEsMTAwLDEwMSw5NSwxMTYsMTIxLDExMiwxMDEsMTE3LDEwLDAsMCwwLDExMCwKLSAgICAxMDEsMTE5LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNywxMywwLDAsMCw5NSwxMDksCi0gICAgMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwxMDgsMTExLDk5LDEwNywxMTUsMTE3LDEyLDAsMCwwLAotICAgIDk1LDk4LDEwOCwxMTEsOTksMTA3LDEwNSwxMTAsMTAzLDk1LDExMSwxMTAsMTE3LDEyLDAsMCwKLSAgICAwLDgyLDExNywxMTAsMTE2LDEwNSwxMDksMTAxLDY5LDExNCwxMTQsMTExLDExNCwxMTcsMTQsMCwKLSAgICAwLDAsOTUsNjgsMTAxLDk3LDEwMCwxMDgsMTExLDk5LDEwNyw2OSwxMTQsMTE0LDExMSwxMTQsCi0gICAgMTE3LDExLDAsMCwwLDk1LDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsNzYsMTExLDk5LDEwNywKLSAgICAxMTcsMTYsMCwwLDAsOTUsNjgsMTE3LDEwOSwxMDksMTIxLDc3LDExMSwxMDAsMTE3LDEwOCwKLSAgICAxMDEsNzYsMTExLDk5LDEwNywxMTcsMTYsMCwwLDAsOTUsMTAzLDEwMSwxMTYsOTUsMTA5LAotICAgIDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTA4LDExMSw5OSwxMDcsMTE3LDE5LDAsMCwwLDk1LAotICAgIDEwOCwxMTEsOTksMTA3LDk1LDExNywxMTAsMTA4LDExMSw5OSwxMDcsOTUsMTA5LDExMSwxMDAsMTE3LAotICAgIDEwOCwxMDEsMTE3LDI1LDAsMCwwLDk1LDk5LDk3LDEwOCwxMDgsOTUsMTE5LDEwNSwxMTYsCi0gICAgMTA0LDk1LDEwMiwxMTQsOTcsMTA5LDEwMSwxMTUsOTUsMTE0LDEwMSwxMDksMTExLDExOCwxMDEsMTAwLAotICAgIDExNywzLDAsMCwwLDExMSwxMTQsMTAwLDExNywxNywwLDAsMCw5NSw4Miw2NSwKLSAgICA4Nyw5NSw3Nyw2NSw3MSw3Myw2Nyw5NSw3OCw4NSw3Nyw2Niw2OSw4MiwxMTcsNSwKLSAgICAwLDAsMCw5OCwxMjEsMTE2LDEwMSwxMTUsMTE3LDUsMCwwLDAsMTE0LDk3LDExMCwKLSAgICAxMDMsMTAxLDExNywxMiwwLDAsMCw5NSw3Nyw2NSw3MSw3Myw2Nyw5NSw2Niw4OSwKLSAgICA4NCw2OSw4MywxMTcsOCwwLDAsMCw5NSw4MCw4OSw2Nyw2NSw2Nyw3Miw2OSwKLSAgICAxMTcsMTUsMCwwLDAsODMsNzksODUsODIsNjcsNjksOTUsODMsODUsNzAsNzAsCi0gICAgNzMsODgsNjksODMsMTE3LDIzLDAsMCwwLDY4LDY5LDY2LDg1LDcxLDk1LDY2LAotICAgIDg5LDg0LDY5LDY3LDc5LDY4LDY5LDk1LDgzLDg1LDcwLDcwLDczLDg4LDY5LDgzLAotICAgIDExNywyNywwLDAsMCw3OSw4MCw4NCw3Myw3Nyw3Myw5MCw2OSw2OCw5NSw2NiwKLSAgICA4OSw4NCw2OSw2Nyw3OSw2OCw2OSw5NSw4Myw4NSw3MCw3MCw3Myw4OCw2OSw4MywKLSAgICAxMTcsNCwwLDAsMCw3OCwxMTEsMTEwLDEwMSwxMTcsMTcsMCwwLDAsOTksOTcsCi0gICAgOTksMTA0LDEwMSw5NSwxMDIsMTE0LDExMSwxMDksOTUsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwxMTcsCi0gICAgMTcsMCwwLDAsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw5NSwxMDIsMTE0LDExMSwxMDksOTUsCi0gICAgOTksOTcsOTksMTA0LDEwMSwxMTcsMTUsMCwwLDAsOTUsMTAzLDEwMSwxMTYsOTUsMTE1LAotICAgIDExMSwxMTcsMTE0LDk5LDEwMSwxMDIsMTA1LDEwOCwxMDEsMTE3LDE2LDAsMCwwLDk1LDExOCwKLSAgICAxMDEsMTE0LDk4LDExMSwxMTUsMTAxLDk1LDEwOSwxMDEsMTE1LDExNSw5NywxMDMsMTAxLDExNywxMSwKLSAgICAwLDAsMCwxMTUsMTAxLDExNiw5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsMTE3LDEwLAotICAgIDAsMCwwLDExNSwxMDEsMTE2LDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMTE3LDE3LDAsCi0gICAgMCwwLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDEwMiwxMTEsMTE0LDk1LDEwOCwxMTEsOTcsCi0gICAgMTAwLDEwMSwxMTQsMTE3LDExLDAsMCwwLDk1LDk5LDEwNCwxMDEsOTksMTA3LDk1LDExMCwKLSAgICA5NywxMDksMTAxLDExNywxNywwLDAsMCw5NSwxMTQsMTAxLDExMywxMTcsMTA1LDExNCwxMDEsCi0gICAgMTE1LDk1LDk4LDExNywxMDUsMTA4LDExNiwxMDUsMTEwLDExNywxNiwwLDAsMCw5NSwxMTQsCi0gICAgMTAxLDExMywxMTcsMTA1LDExNCwxMDEsMTE1LDk1LDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDExNywxNywKLSAgICAwLDAsMCw5NSwxMDIsMTA1LDExMCwxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsCi0gICAgMTE1LDEwNCwxMDUsMTA5LDExNywxNSwwLDAsMCw2NiwxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCwKLSAgICA3MywxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsMTE3LDE0LDAsMCwwLDcwLDExNCwxMTEsCi0gICAgMTIyLDEwMSwxMTAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDExNywyMSwwLDAsMCwKLSAgICA4NywxMDUsMTEwLDEwMCwxMTEsMTE5LDExNSw4MiwxMDEsMTAzLDEwNSwxMTUsMTE2LDExNCwxMjEsNzAsCi0gICAgMTA1LDExMCwxMDAsMTAxLDExNCwxMTcsMTMsMCwwLDAsOTUsNzYsMTExLDk3LDEwMCwxMDEsCi0gICAgMTE0LDY2LDk3LDExNSwxMDUsOTksMTE1LDExNywxMiwwLDAsMCw4MywxMTEsMTE3LDExNCwKLSAgICA5OSwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDExNywxMCwwLDAsMCw3MCwxMDUsMTA4LAotICAgIDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsMTE3LDE2LDAsMCwwLDgzLDExMSwxMTcsMTE0LAotICAgIDk5LDEwMSw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsMTE3LDIwLDAsMCwKLSAgICAwLDgzLDExMSwxMTcsMTE0LDk5LDEwMSwxMDgsMTAxLDExNSwxMTUsNzAsMTA1LDEwOCwxMDEsNzYsCi0gICAgMTExLDk3LDEwMCwxMDEsMTE0LDExNywxOCwwLDAsMCw2OSw4OCw4NCw2OSw3OCw4MywKLSAgICA3Myw3OSw3OCw5NSw4Myw4NSw3MCw3MCw3Myw4OCw2OSw4MywxMTcsMTksMCwwLAotICAgIDAsNjksMTIwLDExNiwxMDEsMTEwLDExNSwxMDUsMTExLDExMCw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsCi0gICAgOTcsMTAwLDEwMSwxMTQsMTE3LDE0LDAsMCwwLDk1LDc4LDk3LDEwOSwxMDEsMTE1LDExMiwKLSAgICA5Nyw5OSwxMDEsODAsOTcsMTE2LDEwNCwxMTcsMTUsMCwwLDAsNzgsOTcsMTA5LDEwMSwKLSAgICAxMTUsMTEyLDk3LDk5LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsMTE3LDEwLDAsMCwwLAotICAgIDgwLDk3LDExNiwxMDQsNzAsMTA1LDExMCwxMDAsMTAxLDExNCwxMTcsMTAsMCwwLDAsNzAsCi0gICAgMTA1LDEwOCwxMDEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCwxMTcsMTgsMCwwLDAsOTUsNzMsCi0gICAgMTA5LDExMiwxMTEsMTE0LDExNiw3NiwxMTEsOTksMTA3LDY3LDExMSwxMTAsMTE2LDEwMSwxMjAsMTE2LAotICAgIDExNywxMywwLDAsMCw5NSwxMTQsMTAxLDExNSwxMTEsMTA4LDExOCwxMDEsOTUsMTEwLDk3LAotICAgIDEwOSwxMDEsMTE3LDEyLDAsMCwwLDk1LDEwMiwxMDUsMTEwLDEwMCw5NSwxMDksMTExLDEwMCwKLSAgICAxMTcsMTA4LDEwMSwxMTcsMTMsMCwwLDAsOTUsMTE1LDk3LDExMCwxMDUsMTE2LDEyMSw5NSwKLSAgICA5OSwxMDQsMTAxLDk5LDEwNywxMTcsOCwwLDAsMCw5NSw2OSw4Miw4Miw5NSw3NywKLSAgICA4Myw3MSwxMTcsMjMsMCwwLDAsOTUsMTAyLDEwNSwxMTAsMTAwLDk1LDk3LDExMCwxMDAsCi0gICAgOTUsMTA4LDExMSw5NywxMDAsOTUsMTE3LDExMCwxMDgsMTExLDk5LDEwNywxMDEsMTAwLDExNywxNCwKLSAgICAwLDAsMCw5NSwxMDIsMTA1LDExMCwxMDAsOTUsOTcsMTEwLDEwMCw5NSwxMDgsMTExLDk3LAotICAgIDEwMCwxMTcsMTEsMCwwLDAsOTUsMTAzLDk5LDEwMCw5NSwxMDUsMTA5LDExMiwxMTEsMTE0LAotICAgIDExNiwxMTcsMTYsMCwwLDAsOTUsMTA0LDk3LDExMCwxMDAsMTA4LDEwMSw5NSwxMDIsMTE0LAotICAgIDExMSwxMDksMTA4LDEwNSwxMTUsMTE2LDExNywxNywwLDAsMCw5NSw5OSw5NywxMDgsOTksCi0gICAgOTUsOTUsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDk1LDk1LDExNywyNywwLDAsCi0gICAgMCw5NSwxMDMsMTAxLDExNiw5NSwxMTUsMTE3LDExMiwxMTIsMTExLDExNCwxMTYsMTAxLDEwMCw5NSwKLSAgICAxMDIsMTA1LDEwOCwxMDEsOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCwxMTUsMTE3LDEwLDAsMCwKLSAgICAwLDk1LDk1LDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDk1LDk1LDExNyw2LDAsMCwwLAotICAgIDk1LDExNSwxMDEsMTE2LDExNywxMTIsMTE3LDgsMCwwLDAsOTUsMTA1LDExMCwxMTUsMTE2LAotICAgIDk3LDEwOCwxMDgsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDQwLDAsMCwKLSAgICAwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwKLSAgICAxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwKLSAgICAxMTQsOTcsMTEyLDYyLDExNyw4LDAsMCwwLDYwLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAotICAgIDYyLDgsMCwwLDAsMTE1LDEzMiwwLDAsMCw2LDIxLDYsMywxMiwxMywKLSAgICAxMiwxNiwxMiwxMywxMiwxMiwxMiwxMiwxMiwxMCwxMiw2LDEyLDcsMTUsMjIsCi0gICAgMTIsOCwxNSwzLDEyLDEyLDYsMiw2LDMsMjIsNCwxOSw2OCwxOSwyMywKLSAgICAxMiwxOSwxMiwyMCwxMiwxMDAsMzQsMSwzNywyLDYsMiw5LDIsOSwxLAotICAgIDksMiwxNSwyNywxMiwyMywxMiwxOSwxOCw4LDEyLDEzLDEyLDExLDEyLDU1LAotICAgIDEyLDE4LDEyLDExLDEyLDExLDEyLDE3LDE5LDU3LDE5LDU0LDE5LDUwLDE5LDgzLAotICAgIDIyLDEzNCwxOSwyOSwyNSw0OSwyNSwyNSw2LDMsMTksNDUsMTksNTUsMTksMTgsCi0gICAgMTksOTEsMTksMTI4LDE5LDEzLDEyLDksMTIsMTcsMTIsMTcsNiwyLDEyLDUwLAotICAgIDEyLDEzLDE4LDI0LDEyLDM0LDEyLDE1LDEyLDExLDI0LDM2LDEyLDc5LAorICAgIDAsMSwxMDAsMiwwLDgzLDQxLDMsMTIyLDUwLDczLDExMCwxMTUsMTE2LDk3LDEwOCwKKyAgICAxMDgsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCwzMiw5NywxMTUsMzIsMTE2LAorICAgIDEwNCwxMDEsMzIsMTA1LDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsOTcsMTE2LDEwNSwxMTEsCisgICAgMTEwLDMyLDExMSwxMDIsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsNDYsMTE0LDEzMSwxLDAsCisgICAgMCw3OCw0MSwxNSwxMTQsMTM3LDEsMCwwLDExNCwyNDEsMCwwLDAsMTE0LDcsCisgICAgMCwwLDAsMTE0LDc5LDEsMCwwLDExNCwxOTgsMCwwLDAsMTE0LDg3LDEsCisgICAgMCwwLDExNCwxMDEsMSwwLDAsMTE0LDEwNywxLDAsMCwxMTQsMjI0LDAsMCwKKyAgICAwLDExNCwxMSwxLDAsMCwxMTQsMjAsMSwwLDAsMTE0LDMsMCwwLDAsCisgICAgMTE0LDU3LDAsMCwwLDExNCwyMywxLDAsMCwxMTQsNzQsMSwwLDAsNDEsCisgICAgMywxMTQsMTM1LDEsMCwwLDExNCwxMzYsMSwwLDAsOTAsMTcsMTE1LDExNywxMTIsCisgICAgMTEyLDExMSwxMTQsMTE2LDEwMSwxMDAsOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCwxMTUsMTE0LDQsCisgICAgMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDgsOTUsCisgICAgMTA1LDExMCwxMTUsMTE2LDk3LDEwOCwxMDgsMTQ4LDksMCwwLDExNSwxNiwwLDAsMCwKKyAgICAwLDIsMTMsMSw5LDEsMjgsMSwxNiwxLDE2LDEsMTUsMSwxOSwxLAorICAgIDExNCwxMzgsMSwwLDAsNDEsMywxMjIsMywxMTksMTA1LDExMCwxMTQsMSwwLDAsCisgICAgMCwxMTQsMiwwLDAsMCw0MSw5MiwxMTQsNTksMCwwLDAsMTE0LDEwLDAsCisgICAgMCwwLDExNCwxMSwwLDAsMCwxMTQsMTcsMCwwLDAsMTE0LDE5LDAsMCwKKyAgICAwLDExNCwyOCwwLDAsMCwxMTQsMzgsMCwwLDAsMTE0LDM5LDAsMCwwLAorICAgIDExNCw0MywwLDAsMCwxMTQsNDQsMCwwLDAsMTE0LDQ2LDAsMCwwLDExNCwKKyAgICA1NSwwLDAsMCwxMTQsNjUsMCwwLDAsMTE0LDY4LDAsMCwwLDExNCw2NiwKKyAgICAwLDAsMCwyMTgsOCw5NSw5NSw5OSwxMTEsMTAwLDEwMSw5NSw5NSwxMTQsMTk0LDAsCisgICAgMCwwLDExNCw2OSwwLDAsMCwxMTQsMTA5LDAsMCwwLDExNCw5MiwwLDAsCisgICAgMCwxMTQsOTksMCwwLDAsMTE0LDgyLDAsMCwwLDExNCw4MywwLDAsMCwKKyAgICAxMTQsMTAyLDAsMCwwLDExNCwxMDMsMCwwLDAsMTE0LDEwNSwwLDAsMCwxMTQsCisgICAgMTEyLDAsMCwwLDExNCwxMTQsMCwwLDAsMTE0LDE1LDAsMCwwLDExNCwxODYsCisgICAgMCwwLDAsMTE0LDE0LDAsMCwwLDExNCwxOCwwLDAsMCw5MCwxNyw5NSwKKyAgICA4Miw2NSw4Nyw5NSw3Nyw2NSw3MSw3Myw2Nyw5NSw3OCw4NSw3Nyw2Niw2OSw4MiwKKyAgICAxMTQsMTI0LDAsMCwwLDExNCwxMzUsMCwwLDAsMTE0LDExOSwwLDAsMCwxMTQsCisgICAgMTIwLDAsMCwwLDExNCwxMzIsMCwwLDAsMTE0LDEzNiwwLDAsMCwxMTQsMTQzLAorICAgIDAsMCwwLDExNCwxNDUsMCwwLDAsMTE0LDE1MywwLDAsMCwxMTQsMTU3LDAsCisgICAgMCwwLDExNCwxNjIsMCwwLDAsMTE0LDE2NSwwLDAsMCwxMTQsMTczLDAsMCwKKyAgICAwLDExNCwxODEsMCwwLDAsMTE0LDE5MSwwLDAsMCwxMTQsMTk2LDAsMCwwLAorICAgIDExNCwxOTksMCwwLDAsMTE0LDIwNCwwLDAsMCwxMTQsMjEyLDAsMCwwLDExNCwKKyAgICAyMTMsMCwwLDAsMTE0LDIxNywwLDAsMCwxMTQsMTc0LDAsMCwwLDIxOCw2LAorICAgIDExMSw5OCwxMDYsMTAxLDk5LDExNiwxMTQsMjQyLDAsMCwwLDExNCwyNDAsMCwwLDAsCisgICAgMTE0LDI0OCwwLDAsMCwxMTQsMTc1LDAsMCwwLDExNCwxMCwxLDAsMCwxMTQsCisgICAgMTEsMSwwLDAsMTE0LDIwLDEsMCwwLDExNCwyMywxLDAsMCwxMTQsMzMsCisgICAgMSwwLDAsMTE0LDM0LDEsMCwwLDExNCw0OSwxLDAsMCwxMTQsOSwxLAorICAgIDAsMCwxMTQsOCwxLDAsMCwxMTQsNjAsMSwwLDAsMTE0LDU3LDEsMCwKKyAgICAwLDExNCw2MSwxLDAsMCwxMTQsMjUyLDAsMCwwLDExNCw3NCwxLDAsMCwKKyAgICAxMTQsODcsMSwwLDAsMTE0LDEwMiwxLDAsMCwxMTQsMTA1LDEsMCwwLDExNCwKKyAgICAxMDYsMSwwLDAsMTE0LDEwOCwxLDAsMCwxMTQsMTExLDEsMCwwLDExNCwxMjAsCisgICAgMSwwLDAsMTE0LDExMiwxLDAsMCwxMTQsMTE0LDEsMCwwLDExNCwxMTUsMSwKKyAgICAwLDAsMTE0LDExNiwxLDAsMCwxMTQsMTIyLDEsMCwwLDExNCwxMjQsMSwwLAorICAgIDAsMTE0LDI0MSwwLDAsMCwxMTQsMTI3LDEsMCwwLDExNCwxMjgsMSwwLDAsCisgICAgMTE0LDEzNywxLDAsMCwxMTQsMTM4LDEsMCwwLDExNCw0LDAsMCwwLDExNCwKKyAgICA0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCw4LAorICAgIDYwLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDYyLDgsMCwwLDAsMTE1LDE3MCwwLDAsCisgICAgMCw2LDE3LDYsMywxMiwxMiwxMiw1LDEyLDUsMTIsNiwxMiwxMiwxMiwKKyAgICAxMCwxMiw5LDEyLDUsMTIsNywxNSwyMiwxMiw4LDEyLDQsMTUsNCwxOSwKKyAgICAyMCw2LDIsNiwzLDIyLDQsMTksNjgsMTksMjEsMTksMTksMTIsMTksMTIsCisgICAgMjAsMTIsMTE0LDIyLDEsMTgsMiw2LDIsOSwyLDksMSw5LDIsMTUsCisgICAgMjcsMTIsMjMsMTIsMTksMTIsMTIsMTgsOCwxMiwxOCwxMiwxMSwxMiwxMSwxMiwKKyAgICAxNywxMiwxNiwyMSw1NSwyMSwxMiwxOCwxMCwxMiwxNCwxMiwzNiwxOSwyNywxOSwKKyAgICAxMDYsMjQsMjIsOSwzLDEyLDEsMTUsNjMsMTgsNDUsMTksMjMwLDE1LDI1LDE5LAorICAgIDcwLDE5LDcxLDE5LDYzLDE5LDI0LDIyLDExMCwxOSw0MSwyNSw0MywyNSwxNiw2LAorICAgIDMsMTksNTcsMTksNTcsMTksMzgsMTksMTI5LDE5LDE0NiwxOSwxMywxMiw5LDEyLAorICAgIDksMTUsNDAsMTIsMTcsNiwxLDEwLDIsMTIsMjcsMTIsNiwxOCwyNCwxMiwKKyAgICAzMiwxMiwxNSwxMiwxMSwyNCwzNSwxMiw4LDEyLDg3LAogfTsKZGlmZiAtLWdpdCBhL1B5dGhvbi9tYXJzaGFsLmMgYi9QeXRob24vbWFyc2hhbC5jCmluZGV4IGNjMTczMjkuLjZmMGVlNWUgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9tYXJzaGFsLmMKKysrIGIvUHl0aG9uL21hcnNoYWwuYwpAQCAtMSw4ICsxLDEwIEBACiAKIC8qIFdyaXRlIFB5dGhvbiBvYmplY3RzIHRvIGZpbGVzIGFuZCByZWFkIHRoZW0gYmFjay4KLSAgIFRoaXMgaXMgaW50ZW5kZWQgZm9yIHdyaXRpbmcgYW5kIHJlYWRpbmcgY29tcGlsZWQgUHl0aG9uIGNvZGUgb25seTsKLSAgIGEgdHJ1ZSBwZXJzaXN0ZW50IHN0b3JhZ2UgZmFjaWxpdHkgd291bGQgYmUgbXVjaCBoYXJkZXIsIHNpbmNlCi0gICBpdCB3b3VsZCBoYXZlIHRvIHRha2UgY2lyY3VsYXIgbGlua3MgYW5kIHNoYXJpbmcgaW50byBhY2NvdW50LiAqLworICAgVGhpcyBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIHdyaXRpbmcgYW5kIHJlYWRpbmcgY29tcGlsZWQgUHl0aG9uIGNvZGUsCisgICBldmVuIHRob3VnaCBkaWN0cywgbGlzdHMsIHNldHMgYW5kIGZyb3plbnNldHMsIG5vdCBjb21tb25seSBzZWVuIGluCisgICBjb2RlIG9iamVjdHMsIGFyZSBzdXBwb3J0ZWQuCisgICBWZXJzaW9uIDMgb2YgdGhpcyBwcm90b2NvbCBwcm9wZXJseSBzdXBwb3J0cyBjaXJjdWxhciBsaW5rcworICAgYW5kIHNoYXJpbmcuICovCiAKICNkZWZpbmUgUFlfU1NJWkVfVF9DTEVBTgogCkBAIC0zMSwxNiArMzMsMTQgQEAKICNkZWZpbmUgVFlQRV9TVE9QSVRFUiAgICAgICAgICAgJ1MnCiAjZGVmaW5lIFRZUEVfRUxMSVBTSVMgICAgICAgICAgICcuJwogI2RlZmluZSBUWVBFX0lOVCAgICAgICAgICAgICAgICAnaScKLS8qIFRZUEVfSU5UNjQgaXMgZGVwcmVjYXRlZC4gSXQgaXMgbm90Ci0gICBnZW5lcmF0ZWQgYW55bW9yZSwgYW5kIHN1cHBvcnQgZm9yIHJlYWRpbmcgaXQKLSAgIHdpbGwgYmUgcmVtb3ZlZCBpbiBQeXRob24gMy40LiAqLwotI2RlZmluZSBUWVBFX0lOVDY0ICAgICAgICAgICAgICAnSScKICNkZWZpbmUgVFlQRV9GTE9BVCAgICAgICAgICAgICAgJ2YnCiAjZGVmaW5lIFRZUEVfQklOQVJZX0ZMT0FUICAgICAgICdnJwogI2RlZmluZSBUWVBFX0NPTVBMRVggICAgICAgICAgICAneCcKICNkZWZpbmUgVFlQRV9CSU5BUllfQ09NUExFWCAgICAgJ3knCiAjZGVmaW5lIFRZUEVfTE9ORyAgICAgICAgICAgICAgICdsJwogI2RlZmluZSBUWVBFX1NUUklORyAgICAgICAgICAgICAncycKKyNkZWZpbmUgVFlQRV9JTlRFUk5FRCAgICAgICAgICAgJ3QnCisjZGVmaW5lIFRZUEVfUkVGICAgICAgICAgICAgICAgICdyJwogI2RlZmluZSBUWVBFX1RVUExFICAgICAgICAgICAgICAnKCcKICNkZWZpbmUgVFlQRV9MSVNUICAgICAgICAgICAgICAgJ1snCiAjZGVmaW5lIFRZUEVfRElDVCAgICAgICAgICAgICAgICd7JwpAQCAtNDksNiArNDksMTMgQEAKICNkZWZpbmUgVFlQRV9VTktOT1dOICAgICAgICAgICAgJz8nCiAjZGVmaW5lIFRZUEVfU0VUICAgICAgICAgICAgICAgICc8JwogI2RlZmluZSBUWVBFX0ZST1pFTlNFVCAgICAgICAgICAnPicKKyNkZWZpbmUgRkxBR19SRUYgICAgICAgICAgICAgICAgJ1x4ODAnIC8qIHdpdGggYSB0eXBlLCBhZGQgb2JqIHRvIGluZGV4ICovCisKKyNkZWZpbmUgVFlQRV9BU0NJSSAgICAgICAgICAgICAgJ2EnCisjZGVmaW5lIFRZUEVfQVNDSUlfSU5URVJORUQgICAgICdBJworI2RlZmluZSBUWVBFX1NNQUxMX1RVUExFICAgICAgICAnKScKKyNkZWZpbmUgVFlQRV9TSE9SVF9BU0NJSSAgICAgICAgJ3onCisjZGVmaW5lIFRZUEVfU0hPUlRfQVNDSUlfSU5URVJORUQgJ1onCiAKICNkZWZpbmUgV0ZFUlJfT0sgMAogI2RlZmluZSBXRkVSUl9VTk1BUlNIQUxMQUJMRSAxCkBAIC02NSwxNSArNzIsMTggQEAKICAgICBQeU9iamVjdCAqY3VycmVudF9maWxlbmFtZTsKICAgICBjaGFyICpwdHI7CiAgICAgY2hhciAqZW5kOworICAgIGNoYXIgKmJ1ZjsKKyAgICBQeV9zc2l6ZV90IGJ1Zl9zaXplOworICAgIFB5T2JqZWN0ICpyZWZzOyAvKiBkaWN0IG9uIG1hcnNoYWwsIGxpc3Qgb24gdW5tYXJzaGFsICovCiAgICAgaW50IHZlcnNpb247CiB9IFdGSUxFOwogCiAjZGVmaW5lIHdfYnl0ZShjLCBwKSBpZiAoKChwKS0+ZnApKSBwdXRjKChjKSwgKHApLT5mcCk7IFwKICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgocCktPnB0ciAhPSAocCktPmVuZCkgKihwKS0+cHRyKysgPSAoYyk7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Ugd19tb3JlKGMsIHApCisgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHdfbW9yZSgoYyksIHApCiAKIHN0YXRpYyB2b2lkCi13X21vcmUoaW50IGMsIFdGSUxFICpwKQord19tb3JlKGNoYXIgYywgV0ZJTEUgKnApCiB7CiAgICAgUHlfc3NpemVfdCBzaXplLCBuZXdzaXplOwogICAgIGlmIChwLT5zdHIgPT0gTlVMTCkKQEAgLTkwLDcgKzEwMCw3IEBACiAgICAgICAgIHAtPnB0ciA9IFB5Qnl0ZXNfQVNfU1RSSU5HKChQeUJ5dGVzT2JqZWN0ICopcC0+c3RyKSArIHNpemU7CiAgICAgICAgIHAtPmVuZCA9CiAgICAgICAgICAgICBQeUJ5dGVzX0FTX1NUUklORygoUHlCeXRlc09iamVjdCAqKXAtPnN0cikgKyBuZXdzaXplOwotICAgICAgICAqcC0+cHRyKysgPSBQeV9TQUZFX0RPV05DQVNUKGMsIGludCwgY2hhcik7CisgICAgICAgICpwLT5wdHIrKyA9IGM7CiAgICAgfQogfQogCkBAIC0xNDYsNiArMTU2LDEzIEBACiAgICAgICAgIHdfc3RyaW5nKHMsIG4sIHApOwogfQogCitzdGF0aWMgdm9pZAord19zaG9ydF9wc3RyaW5nKGNvbnN0IGNoYXIgKnMsIFB5X3NzaXplX3QgbiwgV0ZJTEUgKnApCit7CisgICAgd19ieXRlKFB5X1NBRkVfRE9XTkNBU1QobiwgUHlfc3NpemVfdCwgdW5zaWduZWQgY2hhciksIHApOworICAgIHdfc3RyaW5nKHMsIG4sIHApOworfQorCiAvKiBXZSBhc3N1bWUgdGhhdCBQeXRob24gaW50cyBhcmUgc3RvcmVkIGludGVybmFsbHkgaW4gYmFzZSBzb21lIHBvd2VyIG9mCiAgICAyKioxNTsgZm9yIHRoZSBzYWtlIG9mIHBvcnRhYmlsaXR5IHdlJ2xsIGFsd2F5cyByZWFkIGFuZCB3cml0ZSB0aGVtIGluIGJhc2UKICAgIGV4YWN0bHkgMioqMTUuICovCkBAIC0xNTgsMTMgKzE3NSwxNyBAQAogI2VuZGlmCiAjZGVmaW5lIFB5TG9uZ19NQVJTSEFMX1JBVElPIChQeUxvbmdfU0hJRlQgLyBQeUxvbmdfTUFSU0hBTF9TSElGVCkKIAorI2RlZmluZSBXX1RZUEUodCwgcCkgZG8geyBcCisgICAgd19ieXRlKCh0KSB8IGZsYWcsIChwKSk7IFwKK30gd2hpbGUoMCkKKwogc3RhdGljIHZvaWQKLXdfUHlMb25nKGNvbnN0IFB5TG9uZ09iamVjdCAqb2IsIFdGSUxFICpwKQord19QeUxvbmcoY29uc3QgUHlMb25nT2JqZWN0ICpvYiwgY2hhciBmbGFnLCBXRklMRSAqcCkKIHsKICAgICBQeV9zc2l6ZV90IGksIGosIG4sIGw7CiAgICAgZGlnaXQgZDsKIAotICAgIHdfYnl0ZShUWVBFX0xPTkcsIHApOworICAgIFdfVFlQRShUWVBFX0xPTkcsIHApOwogICAgIGlmIChQeV9TSVpFKG9iKSA9PSAwKSB7CiAgICAgICAgIHdfbG9uZygobG9uZykwLCBwKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjAxLDEwICsyMjIsNjQgQEAKICAgICB9IHdoaWxlIChkICE9IDApOwogfQogCitzdGF0aWMgaW50Cit3X3JlZihQeU9iamVjdCAqdiwgY2hhciAqZmxhZywgV0ZJTEUgKnApCit7CisgICAgUHlPYmplY3QgKmlkOworICAgIFB5T2JqZWN0ICppZHg7CisKKyAgICBpZiAocC0+dmVyc2lvbiA8IDMgfHwgcC0+cmVmcyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gMDsgLyogbm90IHdyaXRpbmcgb2JqZWN0IHJlZmVyZW5jZXMgKi8KKworICAgIC8qIGlmIGl0IGhhcyBvbmx5IG9uZSByZWZlcmVuY2UsIGl0IGRlZmluaXRlbHkgaXNuJ3Qgc2hhcmVkICovCisgICAgaWYgKFB5X1JFRkNOVCh2KSA9PSAxKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlkID0gUHlMb25nX0Zyb21Wb2lkUHRyKCh2b2lkKil2KTsKKyAgICBpZiAoaWQgPT0gTlVMTCkKKyAgICAgICAgZ290byBlcnI7CisgICAgaWR4ID0gUHlEaWN0X0dldEl0ZW0ocC0+cmVmcywgaWQpOworICAgIGlmIChpZHggIT0gTlVMTCkgeworICAgICAgICAvKiB3cml0ZSB0aGUgcmVmZXJlbmNlIGluZGV4IHRvIHRoZSBzdHJlYW0gKi8KKyAgICAgICAgbG9uZyB3ID0gUHlMb25nX0FzTG9uZyhpZHgpOworICAgICAgICBQeV9ERUNSRUYoaWQpOworICAgICAgICBpZiAodyA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgICAgICBnb3RvIGVycjsKKyAgICAgICAgfQorICAgICAgICAvKiB3ZSBkb24ndCBzdG9yZSAibG9uZyIgaW5kaWNlcyBpbiB0aGUgZGljdCAqLworICAgICAgICBhc3NlcnQoMCA8PSB3ICYmIHcgPD0gMHg3ZmZmZmZmZik7CisgICAgICAgIHdfYnl0ZShUWVBFX1JFRiwgcCk7CisgICAgICAgIHdfbG9uZyh3LCBwKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaW50IG9rOworICAgICAgICBQeV9zc2l6ZV90IHMgPSBQeURpY3RfU2l6ZShwLT5yZWZzKTsKKyAgICAgICAgLyogd2UgZG9uJ3Qgc3VwcG9ydCBsb25nIGluZGljZXMgKi8KKyAgICAgICAgaWYgKHMgPj0gMHg3ZmZmZmZmZikgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJ0b28gbWFueSBvYmplY3RzIik7CisgICAgICAgICAgICBnb3RvIGVycjsKKyAgICAgICAgfQorICAgICAgICBpZHggPSBQeUxvbmdfRnJvbVNzaXplX3Qocyk7CisgICAgICAgIG9rID0gaWR4ICYmIFB5RGljdF9TZXRJdGVtKHAtPnJlZnMsIGlkLCBpZHgpID09IDA7CisgICAgICAgIFB5X0RFQ1JFRihpZCk7CisgICAgICAgIFB5X1hERUNSRUYoaWR4KTsKKyAgICAgICAgaWYgKCFvaykKKyAgICAgICAgICAgIGdvdG8gZXJyOworICAgICAgICAqZmxhZyB8PSBGTEFHX1JFRjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorZXJyOgorICAgIHAtPmVycm9yID0gV0ZFUlJfVU5NQVJTSEFMTEFCTEU7CisgICAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkCit3X2NvbXBsZXhfb2JqZWN0KFB5T2JqZWN0ICp2LCBjaGFyIGZsYWcsIFdGSUxFICpwKTsKKwogc3RhdGljIHZvaWQKIHdfb2JqZWN0KFB5T2JqZWN0ICp2LCBXRklMRSAqcCkKIHsKLSAgICBQeV9zc2l6ZV90IGksIG47CisgICAgY2hhciBmbGFnID0gJ1wwJzsKIAogICAgIHAtPmRlcHRoKys7CiAKQEAgLTIyOSwyNCArMzA0LDM1IEBACiAgICAgZWxzZSBpZiAodiA9PSBQeV9UcnVlKSB7CiAgICAgICAgIHdfYnl0ZShUWVBFX1RSVUUsIHApOwogICAgIH0KLSAgICBlbHNlIGlmIChQeUxvbmdfQ2hlY2tFeGFjdCh2KSkgeworICAgIGVsc2UgaWYgKCF3X3JlZih2LCAmZmxhZywgcCkpCisgICAgICAgIHdfY29tcGxleF9vYmplY3QodiwgZmxhZywgcCk7CisKKyAgICBwLT5kZXB0aC0tOworfQorCitzdGF0aWMgdm9pZAord19jb21wbGV4X29iamVjdChQeU9iamVjdCAqdiwgY2hhciBmbGFnLCBXRklMRSAqcCkKK3sKKyAgICBQeV9zc2l6ZV90IGksIG47CisKKyAgICBpZiAoUHlMb25nX0NoZWNrRXhhY3QodikpIHsKICAgICAgICAgbG9uZyB4ID0gUHlMb25nX0FzTG9uZyh2KTsKICAgICAgICAgaWYgKCh4ID09IC0xKSAgJiYgUHlFcnJfT2NjdXJyZWQoKSkgewogICAgICAgICAgICAgUHlMb25nT2JqZWN0ICpvYiA9IChQeUxvbmdPYmplY3QgKil2OwogICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKLSAgICAgICAgICAgIHdfUHlMb25nKG9iLCBwKTsKKyAgICAgICAgICAgIHdfUHlMb25nKG9iLCBmbGFnLCBwKTsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKICNpZiBTSVpFT0ZfTE9ORyA+IDQKICAgICAgICAgICAgIGxvbmcgeSA9IFB5X0FSSVRITUVUSUNfUklHSFRfU0hJRlQobG9uZywgeCwgMzEpOwogICAgICAgICAgICAgaWYgKHkgJiYgeSAhPSAtMSkgewogICAgICAgICAgICAgICAgIC8qIFRvbyBsYXJnZSBmb3IgVFlQRV9JTlQgKi8KLSAgICAgICAgICAgICAgICB3X1B5TG9uZygoUHlMb25nT2JqZWN0Kil2LCBwKTsKKyAgICAgICAgICAgICAgICB3X1B5TG9uZygoUHlMb25nT2JqZWN0Kil2LCBmbGFnLCBwKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UKICNlbmRpZgogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHdfYnl0ZShUWVBFX0lOVCwgcCk7CisgICAgICAgICAgICAgICAgV19UWVBFKFRZUEVfSU5ULCBwKTsKICAgICAgICAgICAgICAgICB3X2xvbmcoeCwgcCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTI1OSw3ICszNDUsNyBAQAogICAgICAgICAgICAgICAgIHAtPmVycm9yID0gV0ZFUlJfVU5NQVJTSEFMTEFCTEU7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgd19ieXRlKFRZUEVfQklOQVJZX0ZMT0FULCBwKTsKKyAgICAgICAgICAgIFdfVFlQRShUWVBFX0JJTkFSWV9GTE9BVCwgcCk7CiAgICAgICAgICAgICB3X3N0cmluZygoY2hhciopYnVmLCA4LCBwKTsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKQEAgLTI3MCw3ICszNTYsNyBAQAogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG4gPSBzdHJsZW4oYnVmKTsKLSAgICAgICAgICAgIHdfYnl0ZShUWVBFX0ZMT0FULCBwKTsKKyAgICAgICAgICAgIFdfVFlQRShUWVBFX0ZMT0FULCBwKTsKICAgICAgICAgICAgIHdfYnl0ZSgoaW50KW4sIHApOwogICAgICAgICAgICAgd19zdHJpbmcoYnVmLCBuLCBwKTsKICAgICAgICAgICAgIFB5TWVtX0ZyZWUoYnVmKTsKQEAgLTI4NCw3ICszNzAsNyBAQAogICAgICAgICAgICAgICAgIHAtPmVycm9yID0gV0ZFUlJfVU5NQVJTSEFMTEFCTEU7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgd19ieXRlKFRZUEVfQklOQVJZX0NPTVBMRVgsIHApOworICAgICAgICAgICAgV19UWVBFKFRZUEVfQklOQVJZX0NPTVBMRVgsIHApOwogICAgICAgICAgICAgd19zdHJpbmcoKGNoYXIqKWJ1ZiwgOCwgcCk7CiAgICAgICAgICAgICBpZiAoX1B5RmxvYXRfUGFjazgoUHlDb21wbGV4X0ltYWdBc0RvdWJsZSh2KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWYsIDEpIDwgMCkgewpAQCAtMjk1LDcgKzM4MSw3IEBACiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBjaGFyICpidWY7Ci0gICAgICAgICAgICB3X2J5dGUoVFlQRV9DT01QTEVYLCBwKTsKKyAgICAgICAgICAgIFdfVFlQRShUWVBFX0NPTVBMRVgsIHApOwogICAgICAgICAgICAgYnVmID0gUHlPU19kb3VibGVfdG9fc3RyaW5nKFB5Q29tcGxleF9SZWFsQXNEb3VibGUodiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2cnLCAxNywgMCwgTlVMTCk7CiAgICAgICAgICAgICBpZiAoIWJ1ZikgewpAQCAtMzE5LDMxICs0MDUsNjEgQEAKICAgICAgICAgfQogICAgIH0KICAgICBlbHNlIGlmIChQeUJ5dGVzX0NoZWNrRXhhY3QodikpIHsKLSAgICAgICAgd19ieXRlKFRZUEVfU1RSSU5HLCBwKTsKKyAgICAgICAgV19UWVBFKFRZUEVfU1RSSU5HLCBwKTsKICAgICAgICAgd19wc3RyaW5nKFB5Qnl0ZXNfQVNfU1RSSU5HKHYpLCBQeUJ5dGVzX0dFVF9TSVpFKHYpLCBwKTsKICAgICB9CiAgICAgZWxzZSBpZiAoUHlVbmljb2RlX0NoZWNrRXhhY3QodikpIHsKLSAgICAgICAgUHlPYmplY3QgKnV0Zjg7Ci0gICAgICAgIHV0ZjggPSBQeVVuaWNvZGVfQXNFbmNvZGVkU3RyaW5nKHYsICJ1dGY4IiwgInN1cnJvZ2F0ZXBhc3MiKTsKLSAgICAgICAgaWYgKHV0ZjggPT0gTlVMTCkgewotICAgICAgICAgICAgcC0+ZGVwdGgtLTsKLSAgICAgICAgICAgIHAtPmVycm9yID0gV0ZFUlJfVU5NQVJTSEFMTEFCTEU7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmIChwLT52ZXJzaW9uID49IDQgJiYgUHlVbmljb2RlX0lTX0FTQ0lJKHYpKSB7CisgICAgICAgICAgICBpbnQgaXNfc2hvcnQgPSBQeVVuaWNvZGVfR0VUX0xFTkdUSCh2KSA8IDI1NjsKKyAgICAgICAgICAgIGlmIChpc19zaG9ydCkgeworICAgICAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfQ0hFQ0tfSU5URVJORUQodikpCisgICAgICAgICAgICAgICAgICAgIFdfVFlQRShUWVBFX1NIT1JUX0FTQ0lJX0lOVEVSTkVELCBwKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIFdfVFlQRShUWVBFX1NIT1JUX0FTQ0lJLCBwKTsKKyAgICAgICAgICAgICAgICB3X3Nob3J0X3BzdHJpbmcoKGNoYXIgKikgUHlVbmljb2RlXzFCWVRFX0RBVEEodiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9HRVRfTEVOR1RIKHYpLCBwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfQ0hFQ0tfSU5URVJORUQodikpCisgICAgICAgICAgICAgICAgICAgIFdfVFlQRShUWVBFX0FTQ0lJX0lOVEVSTkVELCBwKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIFdfVFlQRShUWVBFX0FTQ0lJLCBwKTsKKyAgICAgICAgICAgICAgICB3X3BzdHJpbmcoKGNoYXIgKikgUHlVbmljb2RlXzFCWVRFX0RBVEEodiksCisgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9HRVRfTEVOR1RIKHYpLCBwKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICB3X2J5dGUoVFlQRV9VTklDT0RFLCBwKTsKLSAgICAgICAgd19wc3RyaW5nKFB5Qnl0ZXNfQVNfU1RSSU5HKHV0ZjgpLCBQeUJ5dGVzX0dFVF9TSVpFKHV0ZjgpLCBwKTsKLSAgICAgICAgUHlfREVDUkVGKHV0ZjgpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp1dGY4OworICAgICAgICAgICAgdXRmOCA9IFB5VW5pY29kZV9Bc0VuY29kZWRTdHJpbmcodiwgInV0ZjgiLCAic3Vycm9nYXRlcGFzcyIpOworICAgICAgICAgICAgaWYgKHV0ZjggPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIHAtPmRlcHRoLS07CisgICAgICAgICAgICAgICAgcC0+ZXJyb3IgPSBXRkVSUl9VTk1BUlNIQUxMQUJMRTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocC0+dmVyc2lvbiA+PSAzICYmICBQeVVuaWNvZGVfQ0hFQ0tfSU5URVJORUQodikpCisgICAgICAgICAgICAgICAgV19UWVBFKFRZUEVfSU5URVJORUQsIHApOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIFdfVFlQRShUWVBFX1VOSUNPREUsIHApOworICAgICAgICAgICAgd19wc3RyaW5nKFB5Qnl0ZXNfQVNfU1RSSU5HKHV0ZjgpLCBQeUJ5dGVzX0dFVF9TSVpFKHV0ZjgpLCBwKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRih1dGY4KTsKKyAgICAgICAgfQogICAgIH0KICAgICBlbHNlIGlmIChQeVR1cGxlX0NoZWNrRXhhY3QodikpIHsKLSAgICAgICAgd19ieXRlKFRZUEVfVFVQTEUsIHApOwogICAgICAgICBuID0gUHlUdXBsZV9TaXplKHYpOwotICAgICAgICBXX1NJWkUobiwgcCk7CisgICAgICAgIGlmIChwLT52ZXJzaW9uID49IDQgJiYgbiA8IDI1NikgeworICAgICAgICAgICAgV19UWVBFKFRZUEVfU01BTExfVFVQTEUsIHApOworICAgICAgICAgICAgd19ieXRlKCh1bnNpZ25lZCBjaGFyKW4sIHApOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgV19UWVBFKFRZUEVfVFVQTEUsIHApOworICAgICAgICAgICAgV19TSVpFKG4sIHApOworICAgICAgICB9CiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKICAgICAgICAgICAgIHdfb2JqZWN0KFB5VHVwbGVfR0VUX0lURU0odiwgaSksIHApOwogICAgICAgICB9CiAgICAgfQogICAgIGVsc2UgaWYgKFB5TGlzdF9DaGVja0V4YWN0KHYpKSB7Ci0gICAgICAgIHdfYnl0ZShUWVBFX0xJU1QsIHApOworICAgICAgICBXX1RZUEUoVFlQRV9MSVNULCBwKTsKICAgICAgICAgbiA9IFB5TGlzdF9HRVRfU0laRSh2KTsKICAgICAgICAgV19TSVpFKG4sIHApOwogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CkBAIC0zNTMsNyArNDY5LDcgQEAKICAgICBlbHNlIGlmIChQeURpY3RfQ2hlY2tFeGFjdCh2KSkgewogICAgICAgICBQeV9zc2l6ZV90IHBvczsKICAgICAgICAgUHlPYmplY3QgKmtleSwgKnZhbHVlOwotICAgICAgICB3X2J5dGUoVFlQRV9ESUNULCBwKTsKKyAgICAgICAgV19UWVBFKFRZUEVfRElDVCwgcCk7CiAgICAgICAgIC8qIFRoaXMgb25lIGlzIE5VTEwgb2JqZWN0IHRlcm1pbmF0ZWQhICovCiAgICAgICAgIHBvcyA9IDA7CiAgICAgICAgIHdoaWxlIChQeURpY3RfTmV4dCh2LCAmcG9zLCAma2V5LCAmdmFsdWUpKSB7CkBAIC0zNjYsOSArNDgyLDkgQEAKICAgICAgICAgUHlPYmplY3QgKnZhbHVlLCAqaXQ7CiAKICAgICAgICAgaWYgKFB5T2JqZWN0X1R5cGVDaGVjayh2LCAmUHlTZXRfVHlwZSkpCi0gICAgICAgICAgICB3X2J5dGUoVFlQRV9TRVQsIHApOworICAgICAgICAgICAgV19UWVBFKFRZUEVfU0VULCBwKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgd19ieXRlKFRZUEVfRlJPWkVOU0VULCBwKTsKKyAgICAgICAgICAgIFdfVFlQRShUWVBFX0ZST1pFTlNFVCwgcCk7CiAgICAgICAgIG4gPSBQeU9iamVjdF9TaXplKHYpOwogICAgICAgICBpZiAobiA9PSAtMSkgewogICAgICAgICAgICAgcC0+ZGVwdGgtLTsKQEAgLTM5NSw3ICs1MTEsNyBAQAogICAgIH0KICAgICBlbHNlIGlmIChQeUNvZGVfQ2hlY2sodikpIHsKICAgICAgICAgUHlDb2RlT2JqZWN0ICpjbyA9IChQeUNvZGVPYmplY3QgKil2OwotICAgICAgICB3X2J5dGUoVFlQRV9DT0RFLCBwKTsKKyAgICAgICAgV19UWVBFKFRZUEVfQ09ERSwgcCk7CiAgICAgICAgIHdfbG9uZyhjby0+Y29fYXJnY291bnQsIHApOwogICAgICAgICB3X2xvbmcoY28tPmNvX2t3b25seWFyZ2NvdW50LCBwKTsKICAgICAgICAgd19sb25nKGNvLT5jb19ubG9jYWxzLCBwKTsKQEAgLTQxMyw3ICs1MjksNyBAQAogICAgICAgICB3X29iamVjdChjby0+Y29fbG5vdGFiLCBwKTsKICAgICB9CiAgICAgZWxzZSBpZiAoUHlPYmplY3RfQ2hlY2tCdWZmZXIodikpIHsKLSAgICAgICAgLyogV3JpdGUgdW5rbm93biBidWZmZXItc3R5bGUgb2JqZWN0cyBhcyBhIHN0cmluZyAqLworICAgICAgICAvKiBXcml0ZSB1bmtub3duIGJ5dGVzLWxpa2Ugb2JqZWN0cyBhcyBhIGJ5dGUgc3RyaW5nICovCiAgICAgICAgIFB5X2J1ZmZlciB2aWV3OwogICAgICAgICBpZiAoUHlPYmplY3RfR2V0QnVmZmVyKHYsICZ2aWV3LCBQeUJVRl9TSU1QTEUpICE9IDApIHsKICAgICAgICAgICAgIHdfYnl0ZShUWVBFX1VOS05PV04sIHApOwpAQCAtNDIxLDE1ICs1MzcsMTQgQEAKICAgICAgICAgICAgIHAtPmVycm9yID0gV0ZFUlJfVU5NQVJTSEFMTEFCTEU7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgd19ieXRlKFRZUEVfU1RSSU5HLCBwKTsKKyAgICAgICAgV19UWVBFKFRZUEVfU1RSSU5HLCBwKTsKICAgICAgICAgd19wc3RyaW5nKHZpZXcuYnVmLCB2aWV3LmxlbiwgcCk7CiAgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZpZXcpOwogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgd19ieXRlKFRZUEVfVU5LTk9XTiwgcCk7CisgICAgICAgIFdfVFlQRShUWVBFX1VOS05PV04sIHApOwogICAgICAgICBwLT5lcnJvciA9IFdGRVJSX1VOTUFSU0hBTExBQkxFOwogICAgIH0KLSAgICBwLT5kZXB0aC0tOwogfQogCiAvKiB2ZXJzaW9uIGN1cnJlbnRseSBoYXMgbm8gZWZmZWN0IGZvciB3cml0aW5nIGludHMuICovCkBAIC00NDAsNiArNTU1LDcgQEAKICAgICB3Zi5mcCA9IGZwOwogICAgIHdmLmVycm9yID0gV0ZFUlJfT0s7CiAgICAgd2YuZGVwdGggPSAwOworICAgIHdmLnJlZnMgPSBOVUxMOwogICAgIHdmLnZlcnNpb24gPSB2ZXJzaW9uOwogICAgIHdfbG9uZyh4LCAmd2YpOwogfQpAQCAtNDUxLDgxICs1NjcsMTA3IEBACiAgICAgd2YuZnAgPSBmcDsKICAgICB3Zi5lcnJvciA9IFdGRVJSX09LOwogICAgIHdmLmRlcHRoID0gMDsKKyAgICBpZiAodmVyc2lvbiA+PSAzKSB7CisgICAgICAgIGlmICgod2YucmVmcyA9IFB5RGljdF9OZXcoKSkgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybjsgLyogY2FsbGVyIG11c2ggY2hlY2sgUHlFcnJfT2NjdXJyZWQoKSAqLworICAgIH0gZWxzZQorICAgICAgICB3Zi5yZWZzID0gTlVMTDsKICAgICB3Zi52ZXJzaW9uID0gdmVyc2lvbjsKICAgICB3X29iamVjdCh4LCAmd2YpOworICAgIFB5X1hERUNSRUYod2YucmVmcyk7CiB9CiAKIHR5cGVkZWYgV0ZJTEUgUkZJTEU7IC8qIFNhbWUgc3RydWN0IHdpdGggZGlmZmVyZW50IGludmFyaWFudHMgKi8KIAotI2RlZmluZSByc19ieXRlKHApICgoKHApLT5wdHIgPCAocCktPmVuZCkgPyAodW5zaWduZWQgY2hhcikqKHApLT5wdHIrKyA6IEVPRikKLQotc3RhdGljIFB5X3NzaXplX3QKLXJfc3RyaW5nKGNoYXIgKnMsIFB5X3NzaXplX3QgbiwgUkZJTEUgKnApCitzdGF0aWMgY2hhciAqCityX3N0cmluZyhQeV9zc2l6ZV90IG4sIFJGSUxFICpwKQogewotICAgIGNoYXIgKnB0cjsKLSAgICBQeV9zc2l6ZV90IHJlYWQsIGxlZnQ7CisgICAgUHlfc3NpemVfdCByZWFkID0gLTE7CisKKyAgICBpZiAocC0+cHRyICE9IE5VTEwpIHsKKyAgICAgICAgLyogRmFzdCBwYXRoIGZvciBsb2FkcygpICovCisgICAgICAgIGNoYXIgKnJlcyA9IHAtPnB0cjsKKyAgICAgICAgUHlfc3NpemVfdCBsZWZ0ID0gcC0+ZW5kIC0gcC0+cHRyOworICAgICAgICBpZiAobGVmdCA8IG4pIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19FT0ZFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWFyc2hhbCBkYXRhIHRvbyBzaG9ydCIpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgcC0+cHRyICs9IG47CisgICAgICAgIHJldHVybiByZXM7CisgICAgfQorICAgIGlmIChwLT5idWYgPT0gTlVMTCkgeworICAgICAgICBwLT5idWYgPSBQeU1lbV9NQUxMT0Mobik7CisgICAgICAgIGlmIChwLT5idWYgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIHAtPmJ1Zl9zaXplID0gbjsKKyAgICB9CisgICAgZWxzZSBpZiAocC0+YnVmX3NpemUgPCBuKSB7CisgICAgICAgIHAtPmJ1ZiA9IFB5TWVtX1JFQUxMT0MocC0+YnVmLCBuKTsKKyAgICAgICAgaWYgKHAtPmJ1ZiA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgcC0+YnVmX3NpemUgPSBuOworICAgIH0KIAogICAgIGlmICghcC0+cmVhZGFibGUpIHsKLSAgICAgICAgaWYgKHAtPmZwICE9IE5VTEwpCi0gICAgICAgICAgICAvKiBUaGUgcmVzdWx0IGZpdHMgaW50byBpbnQgYmVjYXVzZSBpdCBtdXN0IGJlIDw9bi4gKi8KLSAgICAgICAgICAgIHJlYWQgPSBmcmVhZChzLCAxLCBuLCBwLT5mcCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgbGVmdCA9IHAtPmVuZCAtIHAtPnB0cjsKLSAgICAgICAgICAgIHJlYWQgPSAobGVmdCA8IG4pID8gbGVmdCA6IG47Ci0gICAgICAgICAgICBtZW1jcHkocywgcC0+cHRyLCByZWFkKTsKLSAgICAgICAgICAgIHAtPnB0ciArPSByZWFkOwotICAgICAgICB9CisgICAgICAgIGFzc2VydChwLT5mcCAhPSBOVUxMKTsKKyAgICAgICAgcmVhZCA9IGZyZWFkKHAtPmJ1ZiwgMSwgbiwgcC0+ZnApOwogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgX1B5X0lERU5USUZJRVIocmVhZCk7CisgICAgICAgIF9QeV9JREVOVElGSUVSKHJlYWRpbnRvKTsKKyAgICAgICAgUHlPYmplY3QgKnJlcywgKm12aWV3OworICAgICAgICBQeV9idWZmZXIgYnVmOwogCi0gICAgICAgIFB5T2JqZWN0ICpkYXRhID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZChwLT5yZWFkYWJsZSwgJlB5SWRfcmVhZCwgIm4iLCBuKTsKLSAgICAgICAgcmVhZCA9IDA7Ci0gICAgICAgIGlmIChkYXRhICE9IE5VTEwpIHsKLSAgICAgICAgICAgIGlmICghUHlCeXRlc19DaGVjayhkYXRhKSkgewotICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmLnJlYWQoKSByZXR1cm5lZCBub3QgYnl0ZXMgYnV0ICUuMTAwcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPm9iX3R5cGUtPnRwX25hbWUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgcmVhZCA9IFB5Qnl0ZXNfR0VUX1NJWkUoZGF0YSk7Ci0gICAgICAgICAgICAgICAgaWYgKHJlYWQgPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChyZWFkID4gbikgewotICAgICAgICAgICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVhZCgpIHJldHVybmVkIHRvbyBtdWNoIGRhdGE6ICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlemQgYnl0ZXMgcmVxdWVzdGVkLCAlemQgcmV0dXJuZWQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiwgcmVhZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZWFkID0gLTE7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwdHIgPSBQeUJ5dGVzX0FTX1NUUklORyhkYXRhKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1lbWNweShzLCBwdHIsIHJlYWQpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgUHlfREVDUkVGKGRhdGEpOworICAgICAgICBpZiAoUHlCdWZmZXJfRmlsbEluZm8oJmJ1ZiwgTlVMTCwgcC0+YnVmLCBuLCAwLCBQeUJVRl9DT05USUcpID09IC0xKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIG12aWV3ID0gUHlNZW1vcnlWaWV3X0Zyb21CdWZmZXIoJmJ1Zik7CisgICAgICAgIGlmIChtdmlldyA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAgICAgcmVzID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZChwLT5yZWFkYWJsZSwgJlB5SWRfcmVhZGludG8sICJOIiwgbXZpZXcpOworICAgICAgICBpZiAocmVzICE9IE5VTEwpIHsKKyAgICAgICAgICAgIHJlYWQgPSBQeU51bWJlcl9Bc1NzaXplX3QocmVzLCBQeUV4Y19WYWx1ZUVycm9yKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihyZXMpOwogICAgICAgICB9CiAgICAgfQotICAgIGlmICghUHlFcnJfT2NjdXJyZWQoKSAmJiAocmVhZCA8IG4pKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19FT0ZFcnJvciwgIkVPRiByZWFkIHdoZXJlIG5vdCBleHBlY3RlZCIpOworICAgIGlmIChyZWFkICE9IG4pIHsKKyAgICAgICAgaWYgKCFQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgICAgICBpZiAocmVhZCA+IG4pCisgICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWFkKCkgcmV0dXJuZWQgdG9vIG11Y2ggZGF0YTogIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXpkIGJ5dGVzIHJlcXVlc3RlZCwgJXpkIHJldHVybmVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiwgcmVhZCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0VPRkVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRU9GIHJlYWQgd2hlcmUgbm90IGV4cGVjdGVkIik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIHJldHVybiByZWFkOworICAgIHJldHVybiBwLT5idWY7CiB9CiAKLQogc3RhdGljIGludAogcl9ieXRlKFJGSUxFICpwKQogewogICAgIGludCBjID0gRU9GOwotICAgIHVuc2lnbmVkIGNoYXIgY2g7Ci0gICAgUHlfc3NpemVfdCBuOwogCi0gICAgaWYgKCFwLT5yZWFkYWJsZSkKLSAgICAgICAgYyA9IHAtPmZwID8gZ2V0YyhwLT5mcCkgOiByc19ieXRlKHApOworICAgIGlmIChwLT5wdHIgIT0gTlVMTCkgeworICAgICAgICBpZiAocC0+cHRyIDwgcC0+ZW5kKQorICAgICAgICAgICAgYyA9ICh1bnNpZ25lZCBjaGFyKSAqcC0+cHRyKys7CisgICAgICAgIHJldHVybiBjOworICAgIH0KKyAgICBpZiAoIXAtPnJlYWRhYmxlKSB7CisgICAgICAgIGFzc2VydChwLT5mcCk7CisgICAgICAgIGMgPSBnZXRjKHAtPmZwKTsKKyAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIG4gPSByX3N0cmluZygoY2hhciAqKSAmY2gsIDEsIHApOwotICAgICAgICBpZiAobiA+IDApCi0gICAgICAgICAgICBjID0gY2g7CisgICAgICAgIGNoYXIgKnB0ciA9IHJfc3RyaW5nKDEsIHApOworICAgICAgICBpZiAocHRyICE9IE5VTEwpCisgICAgICAgICAgICBjID0gKih1bnNpZ25lZCBjaGFyICopIHB0cjsKICAgICB9CiAgICAgcmV0dXJuIGM7CiB9CkBAIC01MzMsNjkgKzY3NSwzNyBAQAogc3RhdGljIGludAogcl9zaG9ydChSRklMRSAqcCkKIHsKLSAgICByZWdpc3RlciBzaG9ydCB4OwotICAgIHVuc2lnbmVkIGNoYXIgYnVmZmVyWzJdOworICAgIHNob3J0IHggPSAtMTsKKyAgICB1bnNpZ25lZCBjaGFyICpidWZmZXI7CiAKLSAgICByX3N0cmluZygoY2hhciAqKSBidWZmZXIsIDIsIHApOwotICAgIHggPSBidWZmZXJbMF07Ci0gICAgeCB8PSBidWZmZXJbMV0gPDwgODsKLSAgICAvKiBTaWduLWV4dGVuc2lvbiwgaW4gY2FzZSBzaG9ydCBncmVhdGVyIHRoYW4gMTYgYml0cyAqLwotICAgIHggfD0gLSh4ICYgMHg4MDAwKTsKKyAgICBidWZmZXIgPSAodW5zaWduZWQgY2hhciAqKSByX3N0cmluZygyLCBwKTsKKyAgICBpZiAoYnVmZmVyICE9IE5VTEwpIHsKKyAgICAgICAgeCA9IGJ1ZmZlclswXTsKKyAgICAgICAgeCB8PSBidWZmZXJbMV0gPDwgODsKKyAgICAgICAgLyogU2lnbi1leHRlbnNpb24sIGluIGNhc2Ugc2hvcnQgZ3JlYXRlciB0aGFuIDE2IGJpdHMgKi8KKyAgICAgICAgeCB8PSAtKHggJiAweDgwMDApOworICAgIH0KICAgICByZXR1cm4geDsKIH0KIAogc3RhdGljIGxvbmcKIHJfbG9uZyhSRklMRSAqcCkKIHsKLSAgICByZWdpc3RlciBsb25nIHg7Ci0gICAgdW5zaWduZWQgY2hhciBidWZmZXJbNF07CisgICAgbG9uZyB4ID0gLTE7CisgICAgdW5zaWduZWQgY2hhciAqYnVmZmVyOwogCi0gICAgcl9zdHJpbmcoKGNoYXIgKikgYnVmZmVyLCA0LCBwKTsKLSAgICB4ID0gYnVmZmVyWzBdOwotICAgIHggfD0gKGxvbmcpYnVmZmVyWzFdIDw8IDg7Ci0gICAgeCB8PSAobG9uZylidWZmZXJbMl0gPDwgMTY7Ci0gICAgeCB8PSAobG9uZylidWZmZXJbM10gPDwgMjQ7CisgICAgYnVmZmVyID0gKHVuc2lnbmVkIGNoYXIgKikgcl9zdHJpbmcoNCwgcCk7CisgICAgaWYgKGJ1ZmZlciAhPSBOVUxMKSB7CisgICAgICAgIHggPSBidWZmZXJbMF07CisgICAgICAgIHggfD0gKGxvbmcpYnVmZmVyWzFdIDw8IDg7CisgICAgICAgIHggfD0gKGxvbmcpYnVmZmVyWzJdIDw8IDE2OworICAgICAgICB4IHw9IChsb25nKWJ1ZmZlclszXSA8PCAyNDsKICNpZiBTSVpFT0ZfTE9ORyA+IDQKLSAgICAvKiBTaWduIGV4dGVuc2lvbiBmb3IgNjQtYml0IG1hY2hpbmVzICovCi0gICAgeCB8PSAtKHggJiAweDgwMDAwMDAwTCk7Ci0jZW5kaWYKLSAgICByZXR1cm4geDsKLX0KLQotLyogcl9sb25nNjQgZGVhbHMgd2l0aCB0aGUgVFlQRV9JTlQ2NCBjb2RlLiAgT24gYSBtYWNoaW5lIHdpdGgKLSAgIHNpemVvZihsb25nKSA+IDQsIGl0IHJldHVybnMgYSBQeXRob24gaW50IG9iamVjdCwgZWxzZSBhIFB5dGhvbiBsb25nCi0gICBvYmplY3QuICBOb3RlIHRoYXQgd19sb25nNjQgd3JpdGVzIG91dCBUWVBFX0lOVCBpZiAzMiBiaXRzIGlzIGVub3VnaCwKLSAgIHNvIHRoZXJlJ3Mgbm8gaW5lZmZpY2llbmN5IGhlcmUgaW4gcmV0dXJuaW5nIGEgUHlMb25nIG9uIDMyLWJpdCBib3hlcwotICAgZm9yIGV2ZXJ5dGhpbmcgd3JpdHRlbiB2aWEgVFlQRV9JTlQ2NCAoaS5lLiwgaWYgYW4gaW50IGlzIHdyaXR0ZW4gdmlhCi0gICBUWVBFX0lOVDY0LCBpdCAqbmVlZHMqIG1vcmUgdGhhbiAzMiBiaXRzKS4KLSovCi1zdGF0aWMgUHlPYmplY3QgKgotcl9sb25nNjQoUkZJTEUgKnApCi17Ci0gICAgUHlPYmplY3QgKnJlc3VsdCA9IE5VTEw7Ci0gICAgbG9uZyBsbzQgPSByX2xvbmcocCk7Ci0gICAgbG9uZyBoaTQgPSByX2xvbmcocCk7Ci0KLSAgICBpZiAoIVB5RXJyX09jY3VycmVkKCkpIHsKLSNpZiBTSVpFT0ZfTE9ORyA+IDQKLSAgICAgICAgbG9uZyB4ID0gKGhpNCA8PCAzMikgfCAobG80ICYgMHhGRkZGRkZGRkwpOwotICAgICAgICByZXN1bHQgPSBQeUxvbmdfRnJvbUxvbmcoeCk7Ci0jZWxzZQotICAgICAgICB1bnNpZ25lZCBjaGFyIGJ1Zls4XTsKLSAgICAgICAgaW50IG9uZSA9IDE7Ci0gICAgICAgIGludCBpc19saXR0bGVfZW5kaWFuID0gKGludCkqKGNoYXIqKSZvbmU7Ci0gICAgICAgIGlmIChpc19saXR0bGVfZW5kaWFuKSB7Ci0gICAgICAgICAgICBtZW1jcHkoYnVmLCAmbG80LCA0KTsKLSAgICAgICAgICAgIG1lbWNweShidWYrNCwgJmhpNCwgNCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBtZW1jcHkoYnVmLCAmaGk0LCA0KTsKLSAgICAgICAgICAgIG1lbWNweShidWYrNCwgJmxvNCwgNCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmVzdWx0ID0gX1B5TG9uZ19Gcm9tQnl0ZUFycmF5KGJ1ZiwgOCwgaXNfbGl0dGxlX2VuZGlhbiwgMSk7CisgICAgICAgIC8qIFNpZ24gZXh0ZW5zaW9uIGZvciA2NC1iaXQgbWFjaGluZXMgKi8KKyAgICAgICAgeCB8PSAtKHggJiAweDgwMDAwMDAwTCk7CiAjZW5kaWYKICAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4geDsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTYyMiwyNSArNzMyLDMxIEBACiAgICAgb2IgPSBfUHlMb25nX05ldyhzaXplKTsKICAgICBpZiAob2IgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CisKICAgICBQeV9TSVpFKG9iKSA9IG4gPiAwID8gc2l6ZSA6IC1zaXplOwogCiAgICAgZm9yIChpID0gMDsgaSA8IHNpemUtMTsgaSsrKSB7CiAgICAgICAgIGQgPSAwOwogICAgICAgICBmb3IgKGo9MDsgaiA8IFB5TG9uZ19NQVJTSEFMX1JBVElPOyBqKyspIHsKICAgICAgICAgICAgIG1kID0gcl9zaG9ydChwKTsKLSAgICAgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYob2IpOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKG1kIDwgMCB8fCBtZCA+IFB5TG9uZ19NQVJTSEFMX0JBU0UpCiAgICAgICAgICAgICAgICAgZ290byBiYWRfZGlnaXQ7CiAgICAgICAgICAgICBkICs9IChkaWdpdCltZCA8PCBqKlB5TG9uZ19NQVJTSEFMX1NISUZUOwogICAgICAgICB9CiAgICAgICAgIG9iLT5vYl9kaWdpdFtpXSA9IGQ7CiAgICAgfQorCiAgICAgZCA9IDA7CiAgICAgZm9yIChqPTA7IGogPCBzaG9ydHNfaW5fdG9wX2RpZ2l0OyBqKyspIHsKICAgICAgICAgbWQgPSByX3Nob3J0KHApOwotICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICAgICAgUHlfREVDUkVGKG9iKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CiAgICAgICAgIGlmIChtZCA8IDAgfHwgbWQgPiBQeUxvbmdfTUFSU0hBTF9CQVNFKQogICAgICAgICAgICAgZ290byBiYWRfZGlnaXQ7CiAgICAgICAgIC8qIHRvcG1vc3QgbWFyc2hhbCBkaWdpdCBzaG91bGQgYmUgbm9uemVybyAqLwpAQCAtNjY3LDYgKzc4Myw1OSBAQAogICAgIHJldHVybiBOVUxMOwogfQogCisvKiBhbGxvY2F0ZSB0aGUgcmVmbGlzdCBpbmRleCBmb3IgYSBuZXcgb2JqZWN0LiBSZXR1cm4gLTEgb24gZmFpbHVyZSAqLworc3RhdGljIFB5X3NzaXplX3QKK3JfcmVmX3Jlc2VydmUoaW50IGZsYWcsIFJGSUxFICpwKQoreworICAgIGlmIChmbGFnKSB7IC8qIGN1cnJlbnRseSBvbmx5IEZMQUdfUkVGIGlzIGRlZmluZWQgKi8KKyAgICAgICAgUHlfc3NpemVfdCBpZHggPSBQeUxpc3RfR0VUX1NJWkUocC0+cmVmcyk7CisgICAgICAgIGlmIChpZHggPj0gMHg3ZmZmZmZmZSkgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJiYWQgbWFyc2hhbCBkYXRhIChpbmRleCBsaXN0IHRvbyBsYXJnZSkiKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBpZiAoUHlMaXN0X0FwcGVuZChwLT5yZWZzLCBQeV9Ob25lKSA8IDApCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIHJldHVybiBpZHg7CisgICAgfSBlbHNlCisgICAgICAgIHJldHVybiAwOworfQorCisvKiBpbnNlcnQgdGhlIG5ldyBvYmplY3QgJ28nIHRvIHRoZSByZWZsaXN0IGF0IHByZXZpb3VzbHkKKyAqIGFsbG9jYXRlZCBpbmRleCAnaWR4Jy4KKyAqICdvJyBjYW4gYmUgTlVMTCwgaW4gd2hpY2ggY2FzZSBub3RoaW5nIGlzIGRvbmUuCisgKiBpZiAnbycgd2FzIG5vbi1OVUxMLCBhbmQgdGhlIGZ1bmN0aW9uIHN1Y2NlZWRzLCAnbycgaXMgcmV0dXJuZWQuCisgKiBpZiAnbycgd2FzIG5vbi1OVUxMLCBhbmQgdGhlIGZ1bmN0aW9uIGZhaWxzLCAnbycgaXMgcmVsZWFzZWQgYW5kCisgKiBOVUxMIHJldHVybmVkLiBUaGlzIHNpbXBsaWZpZXMgZXJyb3IgY2hlY2tpbmcgYXQgdGhlIGNhbGwgc2l0ZSBzaW5jZQorICogYSBzaW5nbGUgdGVzdCBmb3IgTlVMTCBmb3IgdGhlIGZ1bmN0aW9uIHJlc3VsdCBpcyBlbm91Z2guCisgKi8KK3N0YXRpYyBQeU9iamVjdCAqCityX3JlZl9pbnNlcnQoUHlPYmplY3QgKm8sIFB5X3NzaXplX3QgaWR4LCBpbnQgZmxhZywgUkZJTEUgKnApCit7CisgICAgaWYgKG8gIT0gTlVMTCAmJiBmbGFnKSB7IC8qIGN1cnJlbnRseSBvbmx5IEZMQUdfUkVGIGlzIGRlZmluZWQgKi8KKyAgICAgICAgUHlPYmplY3QgKnRtcCA9IFB5TGlzdF9HRVRfSVRFTShwLT5yZWZzLCBpZHgpOworICAgICAgICBQeV9JTkNSRUYobyk7CisgICAgICAgIFB5TGlzdF9TRVRfSVRFTShwLT5yZWZzLCBpZHgsIG8pOworICAgICAgICBQeV9ERUNSRUYodG1wKTsKKyAgICB9CisgICAgcmV0dXJuIG87Cit9CisKKy8qIGNvbWJpbmF0aW9uIG9mIGJvdGggYWJvdmUsIHVzZWQgd2hlbiBhbiBvYmplY3QgY2FuIGJlCisgKiBjcmVhdGVkIHdoZW5ldmVyIGl0IGlzIHNlZW4gaW4gdGhlIGZpbGUsIGFzIG9wcG9zZWQgdG8KKyAqIGFmdGVyIGhhdmluZyBsb2FkZWQgaXRzIHN1Yi1vYmplY3RzLgorICovCitzdGF0aWMgUHlPYmplY3QgKgorcl9yZWYoUHlPYmplY3QgKm8sIGludCBmbGFnLCBSRklMRSAqcCkKK3sKKyAgICBhc3NlcnQoZmxhZyAmIEZMQUdfUkVGKTsKKyAgICBpZiAobyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlMaXN0X0FwcGVuZChwLT5yZWZzLCBvKSA8IDApIHsKKyAgICAgICAgUHlfREVDUkVGKG8pOyAvKiByZWxlYXNlIHRoZSBuZXcgb2JqZWN0ICovCisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXR1cm4gbzsKK30KIAogc3RhdGljIFB5T2JqZWN0ICoKIHJfb2JqZWN0KFJGSUxFICpwKQpAQCAtNjc0LDkgKzg0MywxNyBAQAogICAgIC8qIE5VTEwgaXMgYSB2YWxpZCByZXR1cm4gdmFsdWUsIGl0IGRvZXMgbm90IG5lY2Vzc2FyaWx5IG1lYW5zIHRoYXQKICAgICAgICBhbiBleGNlcHRpb24gaXMgc2V0LiAqLwogICAgIFB5T2JqZWN0ICp2LCAqdjI7CisgICAgUHlfc3NpemVfdCBpZHggPSAwOwogICAgIGxvbmcgaSwgbjsKLSAgICBpbnQgdHlwZSA9IHJfYnl0ZShwKTsKLSAgICBQeU9iamVjdCAqcmV0dmFsOworICAgIGludCB0eXBlLCBjb2RlID0gcl9ieXRlKHApOworICAgIGludCBmbGFnLCBpc19pbnRlcm5lZCA9IDA7CisgICAgUHlPYmplY3QgKnJldHZhbCA9IE5VTEw7CisKKyAgICBpZiAoY29kZSA9PSBFT0YpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0VPRkVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgIkVPRiByZWFkIHdoZXJlIG9iamVjdCBleHBlY3RlZCIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAKICAgICBwLT5kZXB0aCsrOwogCkBAIC02ODYsMTYgKzg2MywxNyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKKyAgICBmbGFnID0gY29kZSAmIEZMQUdfUkVGOworICAgIHR5cGUgPSBjb2RlICYgfkZMQUdfUkVGOworCisjZGVmaW5lIFJfUkVGKE8pIGRve1wKKyAgICBpZiAoZmxhZykgXAorICAgICAgICBPID0gcl9yZWYoTywgZmxhZywgcCk7XAorfSB3aGlsZSAoMCkKKwogICAgIHN3aXRjaCAodHlwZSkgewogCi0gICAgY2FzZSBFT0Y6Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19FT0ZFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJFT0YgcmVhZCB3aGVyZSBvYmplY3QgZXhwZWN0ZWQiKTsKLSAgICAgICAgcmV0dmFsID0gTlVMTDsKLSAgICAgICAgYnJlYWs7Ci0KICAgICBjYXNlIFRZUEVfTlVMTDoKLSAgICAgICAgcmV0dmFsID0gTlVMTDsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIFRZUEVfTk9ORToKQEAgLTcyNiw2NyArOTA0LDY2IEBACiAgICAgY2FzZSBUWVBFX0lOVDoKICAgICAgICAgbiA9IHJfbG9uZyhwKTsKICAgICAgICAgcmV0dmFsID0gUHlFcnJfT2NjdXJyZWQoKSA/IE5VTEwgOiBQeUxvbmdfRnJvbUxvbmcobik7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBUWVBFX0lOVDY0OgotICAgICAgICByZXR2YWwgPSByX2xvbmc2NChwKTsKKyAgICAgICAgUl9SRUYocmV0dmFsKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIFRZUEVfTE9ORzoKICAgICAgICAgcmV0dmFsID0gcl9QeUxvbmcocCk7CisgICAgICAgIFJfUkVGKHJldHZhbCk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBUWVBFX0ZMT0FUOgogICAgICAgICB7Ci0gICAgICAgICAgICBjaGFyIGJ1ZlsyNTZdOworICAgICAgICAgICAgY2hhciBidWZbMjU2XSwgKnB0cjsKICAgICAgICAgICAgIGRvdWJsZSBkeDsKLSAgICAgICAgICAgIHJldHZhbCA9IE5VTEw7CiAgICAgICAgICAgICBuID0gcl9ieXRlKHApOwogICAgICAgICAgICAgaWYgKG4gPT0gRU9GKSB7CiAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0VPRkVycm9yLAogICAgICAgICAgICAgICAgICAgICAiRU9GIHJlYWQgd2hlcmUgb2JqZWN0IGV4cGVjdGVkIik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAocl9zdHJpbmcoYnVmLCBuLCBwKSAhPSBuKQorICAgICAgICAgICAgcHRyID0gcl9zdHJpbmcobiwgcCk7CisgICAgICAgICAgICBpZiAocHRyID09IE5VTEwpCiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBtZW1jcHkoYnVmLCBwdHIsIG4pOwogICAgICAgICAgICAgYnVmW25dID0gJ1wwJzsKICAgICAgICAgICAgIGR4ID0gUHlPU19zdHJpbmdfdG9fZG91YmxlKGJ1ZiwgTlVMTCwgTlVMTCk7CiAgICAgICAgICAgICBpZiAoZHggPT0gLTEuMCAmJiBQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgcmV0dmFsID0gUHlGbG9hdF9Gcm9tRG91YmxlKGR4KTsKKyAgICAgICAgICAgIFJfUkVGKHJldHZhbCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCiAgICAgY2FzZSBUWVBFX0JJTkFSWV9GTE9BVDoKICAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgY2hhciBidWZbOF07CisgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpidWY7CiAgICAgICAgICAgICBkb3VibGUgeDsKLSAgICAgICAgICAgIGlmIChyX3N0cmluZygoY2hhciopYnVmLCA4LCBwKSAhPSA4KSB7Ci0gICAgICAgICAgICAgICAgcmV0dmFsID0gTlVMTDsKKyAgICAgICAgICAgIGJ1ZiA9ICh1bnNpZ25lZCBjaGFyICopIHJfc3RyaW5nKDgsIHApOworICAgICAgICAgICAgaWYgKGJ1ZiA9PSBOVUxMKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQogICAgICAgICAgICAgeCA9IF9QeUZsb2F0X1VucGFjazgoYnVmLCAxKTsKLSAgICAgICAgICAgIGlmICh4ID09IC0xLjAgJiYgUHlFcnJfT2NjdXJyZWQoKSkgewotICAgICAgICAgICAgICAgIHJldHZhbCA9IE5VTEw7CisgICAgICAgICAgICBpZiAoeCA9PSAtMS4wICYmIFB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR2YWwgPSBQeUZsb2F0X0Zyb21Eb3VibGUoeCk7CisgICAgICAgICAgICBSX1JFRihyZXR2YWwpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAogICAgIGNhc2UgVFlQRV9DT01QTEVYOgogICAgICAgICB7Ci0gICAgICAgICAgICBjaGFyIGJ1ZlsyNTZdOworICAgICAgICAgICAgY2hhciBidWZbMjU2XSwgKnB0cjsKICAgICAgICAgICAgIFB5X2NvbXBsZXggYzsKLSAgICAgICAgICAgIHJldHZhbCA9IE5VTEw7CiAgICAgICAgICAgICBuID0gcl9ieXRlKHApOwogICAgICAgICAgICAgaWYgKG4gPT0gRU9GKSB7CiAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0VPRkVycm9yLAogICAgICAgICAgICAgICAgICAgICAiRU9GIHJlYWQgd2hlcmUgb2JqZWN0IGV4cGVjdGVkIik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAocl9zdHJpbmcoYnVmLCBuLCBwKSAhPSBuKQorICAgICAgICAgICAgcHRyID0gcl9zdHJpbmcobiwgcCk7CisgICAgICAgICAgICBpZiAocHRyID09IE5VTEwpCiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBtZW1jcHkoYnVmLCBwdHIsIG4pOwogICAgICAgICAgICAgYnVmW25dID0gJ1wwJzsKICAgICAgICAgICAgIGMucmVhbCA9IFB5T1Nfc3RyaW5nX3RvX2RvdWJsZShidWYsIE5VTEwsIE5VTEwpOwogICAgICAgICAgICAgaWYgKGMucmVhbCA9PSAtMS4wICYmIFB5RXJyX09jY3VycmVkKCkpCkBAIC03OTcsMTEyICs5NzQsMTUxIEBACiAgICAgICAgICAgICAgICAgICAgICJFT0YgcmVhZCB3aGVyZSBvYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChyX3N0cmluZyhidWYsIG4sIHApICE9IG4pCisgICAgICAgICAgICBwdHIgPSByX3N0cmluZyhuLCBwKTsKKyAgICAgICAgICAgIGlmIChwdHIgPT0gTlVMTCkKICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIG1lbWNweShidWYsIHB0ciwgbik7CiAgICAgICAgICAgICBidWZbbl0gPSAnXDAnOwogICAgICAgICAgICAgYy5pbWFnID0gUHlPU19zdHJpbmdfdG9fZG91YmxlKGJ1ZiwgTlVMTCwgTlVMTCk7CiAgICAgICAgICAgICBpZiAoYy5pbWFnID09IC0xLjAgJiYgUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIHJldHZhbCA9IFB5Q29tcGxleF9Gcm9tQ0NvbXBsZXgoYyk7CisgICAgICAgICAgICBSX1JFRihyZXR2YWwpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAogICAgIGNhc2UgVFlQRV9CSU5BUllfQ09NUExFWDoKICAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgY2hhciBidWZbOF07CisgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpidWY7CiAgICAgICAgICAgICBQeV9jb21wbGV4IGM7Ci0gICAgICAgICAgICBpZiAocl9zdHJpbmcoKGNoYXIqKWJ1ZiwgOCwgcCkgIT0gOCkgewotICAgICAgICAgICAgICAgIHJldHZhbCA9IE5VTEw7CisgICAgICAgICAgICBidWYgPSAodW5zaWduZWQgY2hhciAqKSByX3N0cmluZyg4LCBwKTsKKyAgICAgICAgICAgIGlmIChidWYgPT0gTlVMTCkKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KICAgICAgICAgICAgIGMucmVhbCA9IF9QeUZsb2F0X1VucGFjazgoYnVmLCAxKTsKLSAgICAgICAgICAgIGlmIChjLnJlYWwgPT0gLTEuMCAmJiBQeUVycl9PY2N1cnJlZCgpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dmFsID0gTlVMTDsKKyAgICAgICAgICAgIGlmIChjLnJlYWwgPT0gLTEuMCAmJiBQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHJfc3RyaW5nKChjaGFyKilidWYsIDgsIHApICE9IDgpIHsKLSAgICAgICAgICAgICAgICByZXR2YWwgPSBOVUxMOworICAgICAgICAgICAgYnVmID0gKHVuc2lnbmVkIGNoYXIgKikgcl9zdHJpbmcoOCwgcCk7CisgICAgICAgICAgICBpZiAoYnVmID09IE5VTEwpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9CiAgICAgICAgICAgICBjLmltYWcgPSBfUHlGbG9hdF9VbnBhY2s4KGJ1ZiwgMSk7Ci0gICAgICAgICAgICBpZiAoYy5pbWFnID09IC0xLjAgJiYgUHlFcnJfT2NjdXJyZWQoKSkgewotICAgICAgICAgICAgICAgIHJldHZhbCA9IE5VTEw7CisgICAgICAgICAgICBpZiAoYy5pbWFnID09IC0xLjAgJiYgUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHZhbCA9IFB5Q29tcGxleF9Gcm9tQ0NvbXBsZXgoYyk7CisgICAgICAgICAgICBSX1JFRihyZXR2YWwpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAogICAgIGNhc2UgVFlQRV9TVFJJTkc6Ci0gICAgICAgIG4gPSByX2xvbmcocCk7Ci0gICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7Ci0gICAgICAgICAgICByZXR2YWwgPSBOVUxMOworICAgICAgICB7CisgICAgICAgICAgICBjaGFyICpwdHI7CisgICAgICAgICAgICBuID0gcl9sb25nKHApOworICAgICAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAobiA8IDAgfHwgbiA+IFNJWkUzMl9NQVgpIHsKKyAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgImJhZCBtYXJzaGFsIGRhdGEgKHN0cmluZyBzaXplIG91dCBvZiByYW5nZSkiKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHYgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKChjaGFyICopTlVMTCwgbik7CisgICAgICAgICAgICBpZiAodiA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcHRyID0gcl9zdHJpbmcobiwgcCk7CisgICAgICAgICAgICBpZiAocHRyID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYodik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtZW1jcHkoUHlCeXRlc19BU19TVFJJTkcodiksIHB0ciwgbik7CisgICAgICAgICAgICByZXR2YWwgPSB2OworICAgICAgICAgICAgUl9SRUYocmV0dmFsKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGlmIChuIDwgMCB8fCBuID4gU0laRTMyX01BWCkgewotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJiYWQgbWFyc2hhbCBkYXRhIChzdHJpbmcgc2l6ZSBvdXQgb2YgcmFuZ2UpIik7Ci0gICAgICAgICAgICByZXR2YWwgPSBOVUxMOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgdiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoKGNoYXIgKilOVUxMLCBuKTsKLSAgICAgICAgaWYgKHYgPT0gTlVMTCkgewotICAgICAgICAgICAgcmV0dmFsID0gTlVMTDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChyX3N0cmluZyhQeUJ5dGVzX0FTX1NUUklORyh2KSwgbiwgcCkgIT0gbikgewotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgcmV0dmFsID0gTlVMTDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIHJldHZhbCA9IHY7Ci0gICAgICAgIGJyZWFrOwogCisgICAgY2FzZSBUWVBFX0FTQ0lJX0lOVEVSTkVEOgorICAgICAgICBpc19pbnRlcm5lZCA9IDE7CisgICAgY2FzZSBUWVBFX0FTQ0lJOgorICAgICAgICBuID0gcl9sb25nKHApOworICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAobiA8IDAgfHwgbiA+IFNJWkUzMl9NQVgpIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiYmFkIG1hcnNoYWwgZGF0YSAodW5pY29kZSBzaXplIG91dCBvZiByYW5nZSkiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGdvdG8gX3JlYWRfYXNjaWk7CisKKyAgICBjYXNlIFRZUEVfU0hPUlRfQVNDSUlfSU5URVJORUQ6CisgICAgICAgIGlzX2ludGVybmVkID0gMTsKKyAgICBjYXNlIFRZUEVfU0hPUlRfQVNDSUk6CisgICAgICAgIG4gPSByX2J5dGUocCk7CisgICAgICAgIGlmIChuID09IEVPRikgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0VPRkVycm9yLAorICAgICAgICAgICAgICAgICJFT0YgcmVhZCB3aGVyZSBvYmplY3QgZXhwZWN0ZWQiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgX3JlYWRfYXNjaWk6CisgICAgICAgIHsKKyAgICAgICAgICAgIGNoYXIgKnB0cjsKKyAgICAgICAgICAgIHB0ciA9IHJfc3RyaW5nKG4sIHApOworICAgICAgICAgICAgaWYgKHB0ciA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgdiA9IFB5VW5pY29kZV9Gcm9tS2luZEFuZERhdGEoUHlVbmljb2RlXzFCWVRFX0tJTkQsIHB0ciwgbik7CisgICAgICAgICAgICBpZiAodiA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKGlzX2ludGVybmVkKQorICAgICAgICAgICAgICAgIFB5VW5pY29kZV9JbnRlcm5JblBsYWNlKCZ2KTsKKyAgICAgICAgICAgIHJldHZhbCA9IHY7CisgICAgICAgICAgICBSX1JFRihyZXR2YWwpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgIGNhc2UgVFlQRV9JTlRFUk5FRDoKKyAgICAgICAgaXNfaW50ZXJuZWQgPSAxOwogICAgIGNhc2UgVFlQRV9VTklDT0RFOgogICAgICAgICB7CiAgICAgICAgIGNoYXIgKmJ1ZmZlcjsKIAogICAgICAgICBuID0gcl9sb25nKHApOwotICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgewotICAgICAgICAgICAgcmV0dmFsID0gTlVMTDsKKyAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQogICAgICAgICBpZiAobiA8IDAgfHwgbiA+IFNJWkUzMl9NQVgpIHsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiYmFkIG1hcnNoYWwgZGF0YSAodW5pY29kZSBzaXplIG91dCBvZiByYW5nZSkiKTsKLSAgICAgICAgICAgIHJldHZhbCA9IE5VTEw7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBidWZmZXIgPSBQeU1lbV9ORVcoY2hhciwgbik7Ci0gICAgICAgIGlmIChidWZmZXIgPT0gTlVMTCkgewotICAgICAgICAgICAgcmV0dmFsID0gUHlFcnJfTm9NZW1vcnkoKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAobiAhPSAwKSB7CisgICAgICAgICAgICBidWZmZXIgPSByX3N0cmluZyhuLCBwKTsKKyAgICAgICAgICAgIGlmIChidWZmZXIgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHYgPSBQeVVuaWNvZGVfRGVjb2RlVVRGOChidWZmZXIsIG4sICJzdXJyb2dhdGVwYXNzIik7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHJfc3RyaW5nKGJ1ZmZlciwgbiwgcCkgIT0gbikgewotICAgICAgICAgICAgUHlNZW1fREVMKGJ1ZmZlcik7Ci0gICAgICAgICAgICByZXR2YWwgPSBOVUxMOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdiA9IFB5VW5pY29kZV9OZXcoMCwgMCk7CiAgICAgICAgIH0KLSAgICAgICAgdiA9IFB5VW5pY29kZV9EZWNvZGVVVEY4KGJ1ZmZlciwgbiwgInN1cnJvZ2F0ZXBhc3MiKTsKLSAgICAgICAgUHlNZW1fREVMKGJ1ZmZlcik7CisgICAgICAgIGlmICh2ID09IE5VTEwpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKGlzX2ludGVybmVkKQorICAgICAgICAgICAgUHlVbmljb2RlX0ludGVybkluUGxhY2UoJnYpOwogICAgICAgICByZXR2YWwgPSB2OworICAgICAgICBSX1JFRihyZXR2YWwpOwogICAgICAgICBicmVhazsKICAgICAgICAgfQogCisgICAgY2FzZSBUWVBFX1NNQUxMX1RVUExFOgorICAgICAgICBuID0gKHVuc2lnbmVkIGNoYXIpIHJfYnl0ZShwKTsKKyAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZ290byBfcmVhZF90dXBsZTsKICAgICBjYXNlIFRZUEVfVFVQTEU6CiAgICAgICAgIG4gPSByX2xvbmcocCk7Ci0gICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7Ci0gICAgICAgICAgICByZXR2YWwgPSBOVUxMOworICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CiAgICAgICAgIGlmIChuIDwgMCB8fCBuID4gU0laRTMyX01BWCkgewogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJiYWQgbWFyc2hhbCBkYXRhICh0dXBsZSBzaXplIG91dCBvZiByYW5nZSkiKTsKLSAgICAgICAgICAgIHJldHZhbCA9IE5VTEw7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQorICAgIF9yZWFkX3R1cGxlOgogICAgICAgICB2ID0gUHlUdXBsZV9OZXcobik7Ci0gICAgICAgIGlmICh2ID09IE5VTEwpIHsKLSAgICAgICAgICAgIHJldHZhbCA9IE5VTEw7CisgICAgICAgIFJfUkVGKHYpOworICAgICAgICBpZiAodiA9PSBOVUxMKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKwogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CiAgICAgICAgICAgICB2MiA9IHJfb2JqZWN0KHApOwogICAgICAgICAgICAgaWYgKCB2MiA9PSBOVUxMICkgewpAQCAtOTIwLDIwICsxMTM2LDE2IEBACiAKICAgICBjYXNlIFRZUEVfTElTVDoKICAgICAgICAgbiA9IHJfbG9uZyhwKTsKLSAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKLSAgICAgICAgICAgIHJldHZhbCA9IE5VTEw7CisgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KICAgICAgICAgaWYgKG4gPCAwIHx8IG4gPiBTSVpFMzJfTUFYKSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgImJhZCBtYXJzaGFsIGRhdGEgKGxpc3Qgc2l6ZSBvdXQgb2YgcmFuZ2UpIik7Ci0gICAgICAgICAgICByZXR2YWwgPSBOVUxMOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgdiA9IFB5TGlzdF9OZXcobik7Ci0gICAgICAgIGlmICh2ID09IE5VTEwpIHsKLSAgICAgICAgICAgIHJldHZhbCA9IE5VTEw7CisgICAgICAgIFJfUkVGKHYpOworICAgICAgICBpZiAodiA9PSBOVUxMKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KICAgICAgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewogICAgICAgICAgICAgdjIgPSByX29iamVjdChwKTsKICAgICAgICAgICAgIGlmICggdjIgPT0gTlVMTCApIHsKQEAgLTk1MSwyMCArMTE2MywyNiBAQAogCiAgICAgY2FzZSBUWVBFX0RJQ1Q6CiAgICAgICAgIHYgPSBQeURpY3RfTmV3KCk7Ci0gICAgICAgIGlmICh2ID09IE5VTEwpIHsKLSAgICAgICAgICAgIHJldHZhbCA9IE5VTEw7CisgICAgICAgIFJfUkVGKHYpOworICAgICAgICBpZiAodiA9PSBOVUxMKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KICAgICAgICAgZm9yICg7OykgewogICAgICAgICAgICAgUHlPYmplY3QgKmtleSwgKnZhbDsKICAgICAgICAgICAgIGtleSA9IHJfb2JqZWN0KHApOwogICAgICAgICAgICAgaWYgKGtleSA9PSBOVUxMKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgdmFsID0gcl9vYmplY3QocCk7Ci0gICAgICAgICAgICBpZiAodmFsICE9IE5VTEwpCi0gICAgICAgICAgICAgICAgUHlEaWN0X1NldEl0ZW0odiwga2V5LCB2YWwpOworICAgICAgICAgICAgaWYgKHZhbCA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGtleSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoUHlEaWN0X1NldEl0ZW0odiwga2V5LCB2YWwpIDwgMCkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihrZXkpOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih2YWwpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAgICAgICAgICAgUHlfREVDUkVGKGtleSk7Ci0gICAgICAgICAgICBQeV9YREVDUkVGKHZhbCk7CisgICAgICAgICAgICBQeV9ERUNSRUYodmFsKTsKICAgICAgICAgfQogICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgewogICAgICAgICAgICAgUHlfREVDUkVGKHYpOwpAQCAtOTc2LDIwICsxMTk0LDI2IEBACiAgICAgY2FzZSBUWVBFX1NFVDoKICAgICBjYXNlIFRZUEVfRlJPWkVOU0VUOgogICAgICAgICBuID0gcl9sb25nKHApOwotICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgewotICAgICAgICAgICAgcmV0dmFsID0gTlVMTDsKKyAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQogICAgICAgICBpZiAobiA8IDAgfHwgbiA+IFNJWkUzMl9NQVgpIHsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiYmFkIG1hcnNoYWwgZGF0YSAoc2V0IHNpemUgb3V0IG9mIHJhbmdlKSIpOwotICAgICAgICAgICAgcmV0dmFsID0gTlVMTDsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIHYgPSAodHlwZSA9PSBUWVBFX1NFVCkgPyBQeVNldF9OZXcoTlVMTCkgOiBQeUZyb3plblNldF9OZXcoTlVMTCk7Ci0gICAgICAgIGlmICh2ID09IE5VTEwpIHsKLSAgICAgICAgICAgIHJldHZhbCA9IE5VTEw7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKHR5cGUgPT0gVFlQRV9TRVQpIHsKKyAgICAgICAgICAgIFJfUkVGKHYpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLyogbXVzdCB1c2UgZGVsYXllZCByZWdpc3RyYXRpb24gb2YgZnJvemVuc2V0cyBiZWNhdXNlIHRoZXkgbXVzdAorICAgICAgICAgICAgICogYmUgaW5pdCB3aXRoIGEgcmVmY291bnQgb2YgMQorICAgICAgICAgICAgICovCisgICAgICAgICAgICBpZHggPSByX3JlZl9yZXNlcnZlKGZsYWcsIHApOworICAgICAgICAgICAgaWYgKGlkeCA8IDApCisgICAgICAgICAgICAgICAgUHlfQ0xFQVIodik7IC8qIHNpZ25hbCBlcnJvciAqLwogICAgICAgICB9CisgICAgICAgIGlmICh2ID09IE5VTEwpCisgICAgICAgICAgICBicmVhazsKKwogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CiAgICAgICAgICAgICB2MiA9IHJfb2JqZWN0KHApOwogICAgICAgICAgICAgaWYgKCB2MiA9PSBOVUxMICkgewpAQCAtMTAwOCw2ICsxMjMyLDggQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIFB5X0RFQ1JFRih2Mik7CiAgICAgICAgIH0KKyAgICAgICAgaWYgKHR5cGUgIT0gVFlQRV9TRVQpCisgICAgICAgICAgICB2ID0gcl9yZWZfaW5zZXJ0KHYsIGlkeCwgZmxhZywgcCk7CiAgICAgICAgIHJldHZhbCA9IHY7CiAgICAgICAgIGJyZWFrOwogCkBAIC0xMDI5LDYgKzEyNTUsMTAgQEAKICAgICAgICAgICAgIGludCBmaXJzdGxpbmVubzsKICAgICAgICAgICAgIFB5T2JqZWN0ICpsbm90YWIgPSBOVUxMOwogCisgICAgICAgICAgICBpZHggPSByX3JlZl9yZXNlcnZlKGZsYWcsIHApOworICAgICAgICAgICAgaWYgKGlkeCA8IDApCisgICAgICAgICAgICAgICAgYnJlYWs7CisKICAgICAgICAgICAgIHYgPSBOVUxMOwogCiAgICAgICAgICAgICAvKiBYWFggaWdub3JlIGxvbmctPmludCBvdmVyZmxvd3MgZm9yIG5vdyAqLwpAQCAtMTA4NCw2ICsxMzE0LDggQEAKICAgICAgICAgICAgIGlmIChuYW1lID09IE5VTEwpCiAgICAgICAgICAgICAgICAgZ290byBjb2RlX2Vycm9yOwogICAgICAgICAgICAgZmlyc3RsaW5lbm8gPSAoaW50KXJfbG9uZyhwKTsKKyAgICAgICAgICAgIGlmIChmaXJzdGxpbmVubyA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgbG5vdGFiID0gcl9vYmplY3QocCk7CiAgICAgICAgICAgICBpZiAobG5vdGFiID09IE5VTEwpCiAgICAgICAgICAgICAgICAgZ290byBjb2RlX2Vycm9yOwpAQCAtMTA5NCw2ICsxMzI2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlLCBjb25zdHMsIG5hbWVzLCB2YXJuYW1lcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVldmFycywgY2VsbHZhcnMsIGZpbGVuYW1lLCBuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0bGluZW5vLCBsbm90YWIpOworICAgICAgICAgICAgdiA9IHJfcmVmX2luc2VydCh2LCBpZHgsIGZsYWcsIHApOwogCiAgICAgICAgICAgY29kZV9lcnJvcjoKICAgICAgICAgICAgIFB5X1hERUNSRUYoY29kZSk7CkBAIC0xMTA5LDExICsxMzQyLDI3IEBACiAgICAgICAgIHJldHZhbCA9IHY7CiAgICAgICAgIGJyZWFrOwogCisgICAgY2FzZSBUWVBFX1JFRjoKKyAgICAgICAgbiA9IHJfbG9uZyhwKTsKKyAgICAgICAgaWYgKG4gPCAwIHx8IG4gPj0gUHlMaXN0X0dFVF9TSVpFKHAtPnJlZnMpKSB7CisgICAgICAgICAgICBpZiAobiA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJiYWQgbWFyc2hhbCBkYXRhIChpbnZhbGlkIHJlZmVyZW5jZSkiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHYgPSBQeUxpc3RfR0VUX0lURU0ocC0+cmVmcywgbik7CisgICAgICAgIGlmICh2ID09IFB5X05vbmUpIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiYmFkIG1hcnNoYWwgZGF0YSAoaW52YWxpZCByZWZlcmVuY2UpIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBQeV9JTkNSRUYodik7CisgICAgICAgIHJldHZhbCA9IHY7CisgICAgICAgIGJyZWFrOworCiAgICAgZGVmYXVsdDoKICAgICAgICAgLyogQm9ndXMgZGF0YSBnb3Qgd3JpdHRlbiwgd2hpY2ggaXNuJ3QgaWRlYWwuCiAgICAgICAgICAgIFRoaXMgd2lsbCBsZXQgeW91IGtlZXAgd29ya2luZyBhbmQgcmVjb3Zlci4gKi8KICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJiYWQgbWFyc2hhbCBkYXRhICh1bmtub3duIHR5cGUgY29kZSkiKTsKLSAgICAgICAgcmV0dmFsID0gTlVMTDsKICAgICAgICAgYnJlYWs7CiAKICAgICB9CkBAIC0xMTM5LDIzICsxMzg4LDMzIEBACiBQeU1hcnNoYWxfUmVhZFNob3J0RnJvbUZpbGUoRklMRSAqZnApCiB7CiAgICAgUkZJTEUgcmY7CisgICAgaW50IHJlczsKICAgICBhc3NlcnQoZnApOwogICAgIHJmLnJlYWRhYmxlID0gTlVMTDsKICAgICByZi5mcCA9IGZwOwogICAgIHJmLmN1cnJlbnRfZmlsZW5hbWUgPSBOVUxMOwogICAgIHJmLmVuZCA9IHJmLnB0ciA9IE5VTEw7Ci0gICAgcmV0dXJuIHJfc2hvcnQoJnJmKTsKKyAgICByZi5idWYgPSBOVUxMOworICAgIHJlcyA9IHJfc2hvcnQoJnJmKTsKKyAgICBpZiAocmYuYnVmICE9IE5VTEwpCisgICAgICAgIFB5TWVtX0ZSRUUocmYuYnVmKTsKKyAgICByZXR1cm4gcmVzOwogfQogCiBsb25nCiBQeU1hcnNoYWxfUmVhZExvbmdGcm9tRmlsZShGSUxFICpmcCkKIHsKICAgICBSRklMRSByZjsKKyAgICBsb25nIHJlczsKICAgICByZi5mcCA9IGZwOwogICAgIHJmLnJlYWRhYmxlID0gTlVMTDsKICAgICByZi5jdXJyZW50X2ZpbGVuYW1lID0gTlVMTDsKICAgICByZi5wdHIgPSByZi5lbmQgPSBOVUxMOwotICAgIHJldHVybiByX2xvbmcoJnJmKTsKKyAgICByZi5idWYgPSBOVUxMOworICAgIHJlcyA9IHJfbG9uZygmcmYpOworICAgIGlmIChyZi5idWYgIT0gTlVMTCkKKyAgICAgICAgUHlNZW1fRlJFRShyZi5idWYpOworICAgIHJldHVybiByZXM7CiB9CiAKICNpZmRlZiBIQVZFX0ZTVEFUCkBAIC0xMjE0LDIyICsxNDczLDM2IEBACiAgICAgcmYuY3VycmVudF9maWxlbmFtZSA9IE5VTEw7CiAgICAgcmYuZGVwdGggPSAwOwogICAgIHJmLnB0ciA9IHJmLmVuZCA9IE5VTEw7CisgICAgcmYuYnVmID0gTlVMTDsKKyAgICByZi5yZWZzID0gUHlMaXN0X05ldygwKTsKKyAgICBpZiAocmYucmVmcyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKICAgICByZXN1bHQgPSByX29iamVjdCgmcmYpOworICAgIFB5X0RFQ1JFRihyZi5yZWZzKTsKKyAgICBpZiAocmYuYnVmICE9IE5VTEwpCisgICAgICAgIFB5TWVtX0ZSRUUocmYuYnVmKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCiBQeU9iamVjdCAqCi1QeU1hcnNoYWxfUmVhZE9iamVjdEZyb21TdHJpbmcoY2hhciAqc3RyLCBQeV9zc2l6ZV90IGxlbikKK1B5TWFyc2hhbF9SZWFkT2JqZWN0RnJvbVN0cmluZyhjb25zdCBjaGFyICpzdHIsIFB5X3NzaXplX3QgbGVuKQogewogICAgIFJGSUxFIHJmOwogICAgIFB5T2JqZWN0ICpyZXN1bHQ7CiAgICAgcmYuZnAgPSBOVUxMOwogICAgIHJmLnJlYWRhYmxlID0gTlVMTDsKICAgICByZi5jdXJyZW50X2ZpbGVuYW1lID0gTlVMTDsKLSAgICByZi5wdHIgPSBzdHI7Ci0gICAgcmYuZW5kID0gc3RyICsgbGVuOworICAgIHJmLnB0ciA9IChjaGFyICopc3RyOworICAgIHJmLmVuZCA9IChjaGFyICopc3RyICsgbGVuOworICAgIHJmLmJ1ZiA9IE5VTEw7CiAgICAgcmYuZGVwdGggPSAwOworICAgIHJmLnJlZnMgPSBQeUxpc3RfTmV3KDApOworICAgIGlmIChyZi5yZWZzID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOwogICAgIHJlc3VsdCA9IHJfb2JqZWN0KCZyZik7CisgICAgUHlfREVDUkVGKHJmLnJlZnMpOworICAgIGlmIChyZi5idWYgIT0gTlVMTCkKKyAgICAgICAgUHlNZW1fRlJFRShyZi5idWYpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTEyNDgsNyArMTUyMSwxNSBAQAogICAgIHdmLmVycm9yID0gV0ZFUlJfT0s7CiAgICAgd2YuZGVwdGggPSAwOwogICAgIHdmLnZlcnNpb24gPSB2ZXJzaW9uOworICAgIGlmICh2ZXJzaW9uID49IDMpIHsKKyAgICAgICAgaWYgKCh3Zi5yZWZzID0gUHlEaWN0X05ldygpKSA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYod2Yuc3RyKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgfSBlbHNlCisgICAgICAgIHdmLnJlZnMgPSBOVUxMOwogICAgIHdfb2JqZWN0KHgsICZ3Zik7CisgICAgUHlfWERFQ1JFRih3Zi5yZWZzKTsKICAgICBpZiAod2Yuc3RyICE9IE5VTEwpIHsKICAgICAgICAgY2hhciAqYmFzZSA9IFB5Qnl0ZXNfQVNfU1RSSU5HKChQeUJ5dGVzT2JqZWN0ICopd2Yuc3RyKTsKICAgICAgICAgaWYgKHdmLnB0ciAtIGJhc2UgPiBQWV9TU0laRV9UX01BWCkgewpAQCAtMTMyMCw2ICsxNjAxLDggQEAKICAgICAgKiBNYWtlIGEgY2FsbCB0byB0aGUgcmVhZCBtZXRob2QsIGJ1dCByZWFkIHplcm8gYnl0ZXMuCiAgICAgICogVGhpcyBpcyB0byBlbnN1cmUgdGhhdCB0aGUgb2JqZWN0IHBhc3NlZCBpbiBhdCBsZWFzdAogICAgICAqIGhhcyBhIHJlYWQgbWV0aG9kIHdoaWNoIHJldHVybnMgYnl0ZXMuCisgICAgICogVGhpcyBjYW4gYmUgcmVtb3ZlZCBpZiB3ZSBndWFyYW50ZWUgZ29vZCBlcnJvciBoYW5kbGluZworICAgICAqIGZvciByX3N0cmluZygpCiAgICAgICovCiAgICAgZGF0YSA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoZiwgJlB5SWRfcmVhZCwgImkiLCAwKTsKICAgICBpZiAoZGF0YSA9PSBOVUxMKQpAQCAtMTMzNSw3ICsxNjE4LDE1IEBACiAgICAgICAgIHJmLmZwID0gTlVMTDsKICAgICAgICAgcmYucmVhZGFibGUgPSBmOwogICAgICAgICByZi5jdXJyZW50X2ZpbGVuYW1lID0gTlVMTDsKLSAgICAgICAgcmVzdWx0ID0gcmVhZF9vYmplY3QoJnJmKTsKKyAgICAgICAgcmYucHRyID0gcmYuZW5kID0gTlVMTDsKKyAgICAgICAgcmYuYnVmID0gTlVMTDsKKyAgICAgICAgaWYgKChyZi5yZWZzID0gUHlMaXN0X05ldygwKSkgIT0gTlVMTCkgeworICAgICAgICAgICAgcmVzdWx0ID0gcmVhZF9vYmplY3QoJnJmKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihyZi5yZWZzKTsKKyAgICAgICAgICAgIGlmIChyZi5idWYgIT0gTlVMTCkKKyAgICAgICAgICAgICAgICBQeU1lbV9GUkVFKHJmLmJ1Zik7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcmVzdWx0ID0gTlVMTDsKICAgICB9CiAgICAgUHlfREVDUkVGKGRhdGEpOwogICAgIHJldHVybiByZXN1bHQ7CkBAIC0xMzkyLDggKzE2ODMsMTEgQEAKICAgICByZi5wdHIgPSBzOwogICAgIHJmLmVuZCA9IHMgKyBuOwogICAgIHJmLmRlcHRoID0gMDsKKyAgICBpZiAoKHJmLnJlZnMgPSBQeUxpc3RfTmV3KDApKSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKICAgICByZXN1bHQgPSByZWFkX29iamVjdCgmcmYpOwogICAgIFB5QnVmZmVyX1JlbGVhc2UoJnApOworICAgIFB5X0RFQ1JFRihyZi5yZWZzKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0xNDMzLDYgKzE3MjcsNyBAQAogdmVyc2lvbiAtLSBpbmRpY2F0ZXMgdGhlIGZvcm1hdCB0aGF0IHRoZSBtb2R1bGUgdXNlcy4gVmVyc2lvbiAwIGlzIHRoZVxuXAogICAgIGhpc3RvcmljYWwgZm9ybWF0LCB2ZXJzaW9uIDEgc2hhcmVzIGludGVybmVkIHN0cmluZ3MgYW5kIHZlcnNpb24gMlxuXAogICAgIHVzZXMgYSBiaW5hcnkgZm9ybWF0IGZvciBmbG9hdGluZyBwb2ludCBudW1iZXJzLlxuXAorICAgIFZlcnNpb24gMyBzaGFyZXMgY29tbW9uIG9iamVjdCByZWZlcmVuY2VzIChOZXcgaW4gdmVyc2lvbiAzLjQpLlxuXAogXG5cCiBGdW5jdGlvbnM6XG5cCiBcblwKZGlmZiAtLWdpdCBhL1B5dGhvbi9tb2RzdXBwb3J0LmMgYi9QeXRob24vbW9kc3VwcG9ydC5jCmluZGV4IDQyODkxNGYuLjZjOTM4ZGQgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9tb2RzdXBwb3J0LmMKKysrIGIvUHl0aG9uL21vZHN1cHBvcnQuYwpAQCAtMTYxLDcgKzE2MSwxNyBAQAogICAgIC8qIE5vdGUgdGhhdCB3ZSBjYW4ndCBiYWlsIGltbWVkaWF0ZWx5IG9uIGVycm9yIGFzIHRoaXMgd2lsbCBsZWFrCiAgICAgICAgcmVmY291bnRzIG9uIGFueSAnTicgYXJndW1lbnRzLiAqLwogICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLSAgICAgICAgUHlPYmplY3QgKncgPSBkb19ta3ZhbHVlKHBfZm9ybWF0LCBwX3ZhLCBmbGFncyk7CisgICAgICAgIFB5T2JqZWN0ICp3OworCisgICAgICAgIGlmIChpdGVtZmFpbGVkKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqZXhjZXB0aW9uLCAqdmFsdWUsICp0YjsKKyAgICAgICAgICAgIFB5RXJyX0ZldGNoKCZleGNlcHRpb24sICZ2YWx1ZSwgJnRiKTsKKyAgICAgICAgICAgIHcgPSBkb19ta3ZhbHVlKHBfZm9ybWF0LCBwX3ZhLCBmbGFncyk7CisgICAgICAgICAgICBQeUVycl9SZXN0b3JlKGV4Y2VwdGlvbiwgdmFsdWUsIHRiKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHcgPSBkb19ta3ZhbHVlKHBfZm9ybWF0LCBwX3ZhLCBmbGFncyk7CisgICAgICAgIH0KICAgICAgICAgaWYgKHcgPT0gTlVMTCkgewogICAgICAgICAgICAgaXRlbWZhaWxlZCA9IDE7CiAgICAgICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CmRpZmYgLS1naXQgYS9QeXRob24vbXlzdHJ0b3VsLmMgYi9QeXRob24vbXlzdHJ0b3VsLmMKaW5kZXggOGE1NGNiZi4uOTg0MjlkNCAxMDA2NDQKLS0tIGEvUHl0aG9uL215c3RydG91bC5jCisrKyBiL1B5dGhvbi9teXN0cnRvdWwuYwpAQCAtOTIsMTEgKzkyLDExIEBACiAqKiAgICAgICAgICAgICAgZXhjZXB0aW9ucyAtIHdlIGRvbid0IGNoZWNrIGZvciB0aGVtLgogKi8KIHVuc2lnbmVkIGxvbmcKLVB5T1Nfc3RydG91bChyZWdpc3RlciBjaGFyICpzdHIsIGNoYXIgKipwdHIsIGludCBiYXNlKQorUHlPU19zdHJ0b3VsKGNvbnN0IGNoYXIgKnN0ciwgY2hhciAqKnB0ciwgaW50IGJhc2UpCiB7Ci0gICAgcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyByZXN1bHQgPSAwOyAvKiByZXR1cm4gdmFsdWUgb2YgdGhlIGZ1bmN0aW9uICovCi0gICAgcmVnaXN0ZXIgaW50IGM7ICAgICAgICAgICAgIC8qIGN1cnJlbnQgaW5wdXQgY2hhcmFjdGVyICovCi0gICAgcmVnaXN0ZXIgaW50IG92bGltaXQ7ICAgICAgIC8qIHJlcXVpcmVkIGRpZ2l0cyB0byBvdmVyZmxvdyAqLworICAgIHVuc2lnbmVkIGxvbmcgcmVzdWx0ID0gMDsgLyogcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiAqLworICAgIGludCBjOyAgICAgICAgICAgICAvKiBjdXJyZW50IGlucHV0IGNoYXJhY3RlciAqLworICAgIGludCBvdmxpbWl0OyAgICAgICAvKiByZXF1aXJlZCBkaWdpdHMgdG8gb3ZlcmZsb3cgKi8KIAogICAgIC8qIHNraXAgbGVhZGluZyB3aGl0ZSBzcGFjZSAqLwogICAgIHdoaWxlICgqc3RyICYmIFB5X0lTU1BBQ0UoUHlfQ0hBUk1BU0soKnN0cikpKQpAQCAtMTExLDcgKzExMSw3IEBACiAgICAgICAgICAgICAgICAgLyogdGhlcmUgbXVzdCBiZSBhdCBsZWFzdCBvbmUgZGlnaXQgYWZ0ZXIgMHggKi8KICAgICAgICAgICAgICAgICBpZiAoX1B5TG9uZ19EaWdpdFZhbHVlW1B5X0NIQVJNQVNLKHN0clsxXSldID49IDE2KSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChwdHIpCi0gICAgICAgICAgICAgICAgICAgICAgICAqcHRyID0gc3RyOworICAgICAgICAgICAgICAgICAgICAgICAgKnB0ciA9IChjaGFyICopc3RyOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgKytzdHI7CkBAIC0xMjAsNyArMTIwLDcgQEAKICAgICAgICAgICAgICAgICAvKiB0aGVyZSBtdXN0IGJlIGF0IGxlYXN0IG9uZSBkaWdpdCBhZnRlciAwbyAqLwogICAgICAgICAgICAgICAgIGlmIChfUHlMb25nX0RpZ2l0VmFsdWVbUHlfQ0hBUk1BU0soc3RyWzFdKV0gPj0gOCkgewogICAgICAgICAgICAgICAgICAgICBpZiAocHRyKQotICAgICAgICAgICAgICAgICAgICAgICAgKnB0ciA9IHN0cjsKKyAgICAgICAgICAgICAgICAgICAgICAgICpwdHIgPSAoY2hhciAqKXN0cjsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICsrc3RyOwpAQCAtMTI5LDcgKzEyOSw3IEBACiAgICAgICAgICAgICAgICAgLyogdGhlcmUgbXVzdCBiZSBhdCBsZWFzdCBvbmUgZGlnaXQgYWZ0ZXIgMGIgKi8KICAgICAgICAgICAgICAgICBpZiAoX1B5TG9uZ19EaWdpdFZhbHVlW1B5X0NIQVJNQVNLKHN0clsxXSldID49IDIpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKHB0cikKLSAgICAgICAgICAgICAgICAgICAgICAgICpwdHIgPSBzdHI7CisgICAgICAgICAgICAgICAgICAgICAgICAqcHRyID0gKGNoYXIgKilzdHI7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICArK3N0cjsKQEAgLTE0MSw3ICsxNDEsNyBAQAogICAgICAgICAgICAgICAgIHdoaWxlIChQeV9JU1NQQUNFKFB5X0NIQVJNQVNLKCpzdHIpKSkKICAgICAgICAgICAgICAgICAgICAgKytzdHI7CiAgICAgICAgICAgICAgICAgaWYgKHB0cikKLSAgICAgICAgICAgICAgICAgICAgKnB0ciA9IHN0cjsKKyAgICAgICAgICAgICAgICAgICAgKnB0ciA9IChjaGFyICopc3RyOwogICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0xNTcsNyArMTU3LDcgQEAKICAgICAgICAgICAgICAgICAvKiB0aGVyZSBtdXN0IGJlIGF0IGxlYXN0IG9uZSBkaWdpdCBhZnRlciAweCAqLwogICAgICAgICAgICAgICAgIGlmIChfUHlMb25nX0RpZ2l0VmFsdWVbUHlfQ0hBUk1BU0soc3RyWzFdKV0gPj0gMTYpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKHB0cikKLSAgICAgICAgICAgICAgICAgICAgICAgICpwdHIgPSBzdHI7CisgICAgICAgICAgICAgICAgICAgICAgICAqcHRyID0gKGNoYXIgKilzdHI7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICArK3N0cjsKQEAgLTE3MSw3ICsxNzEsNyBAQAogICAgICAgICAgICAgICAgIC8qIHRoZXJlIG11c3QgYmUgYXQgbGVhc3Qgb25lIGRpZ2l0IGFmdGVyIDBvICovCiAgICAgICAgICAgICAgICAgaWYgKF9QeUxvbmdfRGlnaXRWYWx1ZVtQeV9DSEFSTUFTSyhzdHJbMV0pXSA+PSA4KSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChwdHIpCi0gICAgICAgICAgICAgICAgICAgICAgICAqcHRyID0gc3RyOworICAgICAgICAgICAgICAgICAgICAgICAgKnB0ciA9IChjaGFyICopc3RyOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgKytzdHI7CkBAIC0xODUsNyArMTg1LDcgQEAKICAgICAgICAgICAgICAgICAvKiB0aGVyZSBtdXN0IGJlIGF0IGxlYXN0IG9uZSBkaWdpdCBhZnRlciAwYiAqLwogICAgICAgICAgICAgICAgIGlmIChfUHlMb25nX0RpZ2l0VmFsdWVbUHlfQ0hBUk1BU0soc3RyWzFdKV0gPj0gMikgewogICAgICAgICAgICAgICAgICAgICBpZiAocHRyKQotICAgICAgICAgICAgICAgICAgICAgICAgKnB0ciA9IHN0cjsKKyAgICAgICAgICAgICAgICAgICAgICAgICpwdHIgPSAoY2hhciAqKXN0cjsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICsrc3RyOwpAQCAtMTk3LDcgKzE5Nyw3IEBACiAgICAgLyogY2F0Y2ggc2lsbHkgYmFzZXMgKi8KICAgICBpZiAoYmFzZSA8IDIgfHwgYmFzZSA+IDM2KSB7CiAgICAgICAgIGlmIChwdHIpCi0gICAgICAgICAgICAqcHRyID0gc3RyOworICAgICAgICAgICAgKnB0ciA9IChjaGFyICopc3RyOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKQEAgLTIxMyw3ICsyMTMsNyBAQAogICAgICAgICBpZiAob3ZsaW1pdCA+IDApIC8qIG5vIG92ZXJmbG93IGNoZWNrIHJlcXVpcmVkICovCiAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQgKiBiYXNlICsgYzsKICAgICAgICAgZWxzZSB7IC8qIHJlcXVpcmVzIG92ZXJmbG93IGNoZWNrICovCi0gICAgICAgICAgICByZWdpc3RlciB1bnNpZ25lZCBsb25nIHRlbXBfcmVzdWx0OworICAgICAgICAgICAgdW5zaWduZWQgbG9uZyB0ZW1wX3Jlc3VsdDsKIAogICAgICAgICAgICAgaWYgKG92bGltaXQgPCAwKSAvKiBndWFyYW50ZWVkIG92ZXJmbG93ICovCiAgICAgICAgICAgICAgICAgZ290byBvdmVyZmxvd2VkOwpAQCAtMjM5LDcgKzIzOSw3IEBACiAKICAgICAvKiBzZXQgcG9pbnRlciB0byBwb2ludCB0byB0aGUgbGFzdCBjaGFyYWN0ZXIgc2Nhbm5lZCAqLwogICAgIGlmIChwdHIpCi0gICAgICAgICpwdHIgPSBzdHI7CisgICAgICAgICpwdHIgPSAoY2hhciAqKXN0cjsKIAogICAgIHJldHVybiByZXN1bHQ7CiAKQEAgLTI0OCw3ICsyNDgsNyBAQAogICAgICAgICAvKiBzcG9vbCB0aHJvdWdoIHJlbWFpbmluZyBkaWdpdCBjaGFyYWN0ZXJzICovCiAgICAgICAgIHdoaWxlIChfUHlMb25nX0RpZ2l0VmFsdWVbUHlfQ0hBUk1BU0soKnN0cildIDwgYmFzZSkKICAgICAgICAgICAgICsrc3RyOwotICAgICAgICAqcHRyID0gc3RyOworICAgICAgICAqcHRyID0gKGNoYXIgKilzdHI7CiAgICAgfQogICAgIGVycm5vID0gRVJBTkdFOwogICAgIHJldHVybiAodW5zaWduZWQgbG9uZyktMTsKQEAgLTI2MCw3ICsyNjAsNyBAQAogI2RlZmluZSBQWV9BQlNfTE9OR19NSU4gICAgICAgICAoMC0odW5zaWduZWQgbG9uZylMT05HX01JTikKIAogbG9uZwotUHlPU19zdHJ0b2woY2hhciAqc3RyLCBjaGFyICoqcHRyLCBpbnQgYmFzZSkKK1B5T1Nfc3RydG9sKGNvbnN0IGNoYXIgKnN0ciwgY2hhciAqKnB0ciwgaW50IGJhc2UpCiB7CiAgICAgbG9uZyByZXN1bHQ7CiAgICAgdW5zaWduZWQgbG9uZyB1cmVzdWx0OwpkaWZmIC0tZ2l0IGEvUHl0aG9uL29wY29kZV90YXJnZXRzLmggYi9QeXRob24vb3Bjb2RlX3RhcmdldHMuaAppbmRleCAyZDZiY2RhLi5mOTBhMTdhIDEwMDY0NAotLS0gYS9QeXRob24vb3Bjb2RlX3RhcmdldHMuaAorKysgYi9QeXRob24vb3Bjb2RlX3RhcmdldHMuaApAQCAtNjgsNyArNjgsNyBAQAogICAgICYmVEFSR0VUX0JJTkFSWV9PUiwKICAgICAmJlRBUkdFVF9JTlBMQUNFX1BPV0VSLAogICAgICYmVEFSR0VUX0dFVF9JVEVSLAotICAgICYmVEFSR0VUX1NUT1JFX0xPQ0FMUywKKyAgICAmJl91bmtub3duX29wY29kZSwKICAgICAmJlRBUkdFVF9QUklOVF9FWFBSLAogICAgICYmVEFSR0VUX0xPQURfQlVJTERfQ0xBU1MsCiAgICAgJiZUQVJHRVRfWUlFTERfRlJPTSwKQEAgLTE0Nyw3ICsxNDcsNyBAQAogICAgICYmVEFSR0VUX0xJU1RfQVBQRU5ELAogICAgICYmVEFSR0VUX1NFVF9BREQsCiAgICAgJiZUQVJHRVRfTUFQX0FERCwKLSAgICAmJl91bmtub3duX29wY29kZSwKKyAgICAmJlRBUkdFVF9MT0FEX0NMQVNTREVSRUYsCiAgICAgJiZfdW5rbm93bl9vcGNvZGUsCiAgICAgJiZfdW5rbm93bl9vcGNvZGUsCiAgICAgJiZfdW5rbm93bl9vcGNvZGUsCmRpZmYgLS1naXQgYS9QeXRob24vcGVlcGhvbGUuYyBiL1B5dGhvbi9wZWVwaG9sZS5jCmluZGV4IDVkNTM2NzcuLmM1NmM4ZmMgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9wZWVwaG9sZS5jCisrKyBiL1B5dGhvbi9wZWVwaG9sZS5jCkBAIC0yNzUsNiArMjc1LDcgQEAKICAgICBsZW5fY29uc3RzID0gUHlMaXN0X0dFVF9TSVpFKGNvbnN0cyk7CiAgICAgaWYgKFB5TGlzdF9BcHBlbmQoY29uc3RzLCBuZXdjb25zdCkpIHsKICAgICAgICAgUHlfREVDUkVGKG5ld2NvbnN0KTsKKyAgICAgICAgUHlFcnJfQ2xlYXIoKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIFB5X0RFQ1JFRihuZXdjb25zdCk7CkBAIC0yODksNyArMjkwLDcgQEAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgKgogbWFya2Jsb2Nrcyh1bnNpZ25lZCBjaGFyICpjb2RlLCBQeV9zc2l6ZV90IGxlbikKIHsKLSAgICB1bnNpZ25lZCBpbnQgKmJsb2NrcyA9ICh1bnNpZ25lZCBpbnQgKilQeU1lbV9NYWxsb2MobGVuKnNpemVvZihpbnQpKTsKKyAgICB1bnNpZ25lZCBpbnQgKmJsb2NrcyA9IFB5TWVtX05ldyh1bnNpZ25lZCBpbnQsIGxlbik7CiAgICAgaW50IGksaiwgb3Bjb2RlLCBibG9ja2NudCA9IDA7CiAKICAgICBpZiAoYmxvY2tzID09IE5VTEwpIHsKQEAgLTMyNywzNyArMzI4LDYgQEAKICAgICByZXR1cm4gYmxvY2tzOwogfQogCi0vKiBIZWxwZXIgdG8gcmVwbGFjZSBMT0FEX05BTUUgTm9uZS9UcnVlL0ZhbHNlIHdpdGggTE9BRF9DT05TVAotICAgUmV0dXJuczogMCBpZiBubyBjaGFuZ2UsIDEgaWYgY2hhbmdlLCAtMSBpZiBlcnJvciAqLwotc3RhdGljIGludAotbG9hZF9nbG9iYWwodW5zaWduZWQgY2hhciAqY29kZXN0ciwgUHlfc3NpemVfdCBpLCBjaGFyICpuYW1lLCBQeU9iamVjdCAqY29uc3RzKQotewotICAgIFB5X3NzaXplX3QgajsKLSAgICBQeU9iamVjdCAqb2JqOwotICAgIGlmIChuYW1lID09IE5VTEwpCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmIChzdHJjbXAobmFtZSwgIk5vbmUiKSA9PSAwKQotICAgICAgICBvYmogPSBQeV9Ob25lOwotICAgIGVsc2UgaWYgKHN0cmNtcChuYW1lLCAiVHJ1ZSIpID09IDApCi0gICAgICAgIG9iaiA9IFB5X1RydWU7Ci0gICAgZWxzZSBpZiAoc3RyY21wKG5hbWUsICJGYWxzZSIpID09IDApCi0gICAgICAgIG9iaiA9IFB5X0ZhbHNlOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgZm9yIChqID0gMDsgaiA8IFB5TGlzdF9HRVRfU0laRShjb25zdHMpOyBqKyspIHsKLSAgICAgICAgaWYgKFB5TGlzdF9HRVRfSVRFTShjb25zdHMsIGopID09IG9iaikKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBpZiAoaiA9PSBQeUxpc3RfR0VUX1NJWkUoY29uc3RzKSkgewotICAgICAgICBpZiAoUHlMaXN0X0FwcGVuZChjb25zdHMsIG9iaikgPCAwKQotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICBhc3NlcnQoUHlMaXN0X0dFVF9JVEVNKGNvbnN0cywgaikgPT0gb2JqKTsKLSAgICBjb2Rlc3RyW2ldID0gTE9BRF9DT05TVDsKLSAgICBTRVRBUkcoY29kZXN0ciwgaSwgaik7Ci0gICAgcmV0dXJuIDE7Ci19Ci0KIC8qIFBlcmZvcm0gYmFzaWMgcGVlcGhvbGUgb3B0aW1pemF0aW9ucyB0byBjb21wb25lbnRzIG9mIGEgY29kZSBvYmplY3QuCiAgICBUaGUgY29uc3RzIG9iamVjdCBzaG91bGQgc3RpbGwgYmUgaW4gbGlzdCBmb3JtIHRvIGFsbG93IG5ldyBjb25zdGFudHMKICAgIHRvIGJlIGFwcGVuZGVkLgpAQCAtMzkyLDcgKzM2Miw2IEBACiAgICAgUHlfc3NpemVfdCBjb25zdF9zdGFja19zaXplID0gMDsKICAgICBpbnQgaW5fY29uc3RzID0gMDsgIC8qIHdoZXRoZXIgd2UgYXJlIGluIGEgTE9BRF9DT05TVCBzZXF1ZW5jZSAqLwogICAgIHVuc2lnbmVkIGludCAqYmxvY2tzID0gTlVMTDsKLSAgICBjaGFyICpuYW1lOwogCiAgICAgLyogQmFpbCBvdXQgaWYgYW4gZXhjZXB0aW9uIGlzIHNldCAqLwogICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQpAQCAtNDEzLDggKzM4MiwxMCBAQAogCiAgICAgLyogTWFrZSBhIG1vZGlmaWFibGUgY29weSBvZiB0aGUgY29kZSBzdHJpbmcgKi8KICAgICBjb2Rlc3RyID0gKHVuc2lnbmVkIGNoYXIgKilQeU1lbV9NYWxsb2MoY29kZWxlbik7Ci0gICAgaWYgKGNvZGVzdHIgPT0gTlVMTCkKKyAgICBpZiAoY29kZXN0ciA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgIGdvdG8gZXhpdEVycm9yOworICAgIH0KICAgICBjb2Rlc3RyID0gKHVuc2lnbmVkIGNoYXIgKiltZW1jcHkoY29kZXN0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlCeXRlc19BU19TVFJJTkcoY29kZSksIGNvZGVsZW4pOwogCkBAIC00MjcsOSArMzk4LDExIEBACiAgICAgICAgIGdvdG8gZXhpdFVuY2hhbmdlZDsKIAogICAgIC8qIE1hcHBpbmcgdG8gbmV3IGp1bXAgdGFyZ2V0cyBhZnRlciBOT1BzIGFyZSByZW1vdmVkICovCi0gICAgYWRkcm1hcCA9IChpbnQgKilQeU1lbV9NYWxsb2MoY29kZWxlbiAqIHNpemVvZihpbnQpKTsKLSAgICBpZiAoYWRkcm1hcCA9PSBOVUxMKQorICAgIGFkZHJtYXAgPSBQeU1lbV9OZXcoaW50LCBjb2RlbGVuKTsKKyAgICBpZiAoYWRkcm1hcCA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgIGdvdG8gZXhpdEVycm9yOworICAgIH0KIAogICAgIGJsb2NrcyA9IG1hcmtibG9ja3MoY29kZXN0ciwgY29kZWxlbik7CiAgICAgaWYgKGJsb2NrcyA9PSBOVUxMKQpAQCAtNDc1LDIwICs0NDgsNiBAQAogICAgICAgICAgICAgICAgIGNvZGVzdHJbaSszXSA9IE5PUDsKICAgICAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgICAgIC8qIFJlcGxhY2UgTE9BRF9HTE9CQUwvTE9BRF9OQU1FIE5vbmUvVHJ1ZS9GYWxzZQotICAgICAgICAgICAgICAgICAgIHdpdGggTE9BRF9DT05TVCBOb25lL1RydWUvRmFsc2UgKi8KLSAgICAgICAgICAgIGNhc2UgTE9BRF9OQU1FOgotICAgICAgICAgICAgY2FzZSBMT0FEX0dMT0JBTDoKLSAgICAgICAgICAgICAgICBqID0gR0VUQVJHKGNvZGVzdHIsIGkpOwotICAgICAgICAgICAgICAgIG5hbWUgPSBfUHlVbmljb2RlX0FzU3RyaW5nKFB5VHVwbGVfR0VUX0lURU0obmFtZXMsIGopKTsKLSAgICAgICAgICAgICAgICBoID0gbG9hZF9nbG9iYWwoY29kZXN0ciwgaSwgbmFtZSwgY29uc3RzKTsKLSAgICAgICAgICAgICAgICBpZiAoaCA8IDApCi0gICAgICAgICAgICAgICAgICAgIGdvdG8gZXhpdEVycm9yOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGggPT0gMCkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgQ09OU1RfU1RBQ0tfUFVTSF9PUChpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLQogICAgICAgICAgICAgICAgIC8qIFNraXAgb3ZlciBMT0FEX0NPTlNUIHRydWVjb25zdAogICAgICAgICAgICAgICAgICAgIFBPUF9KVU1QX0lGX0ZBTFNFIHh4LiBUaGlzIGltcHJvdmVzCiAgICAgICAgICAgICAgICAgICAgIndoaWxlIDEiIHBlcmZvcm1hbmNlLiAqLwpkaWZmIC0tZ2l0IGEvUHl0aG9uL3B5YXJlbmEuYyBiL1B5dGhvbi9weWFyZW5hLmMKaW5kZXggMDJhMzFkOC4uMTAzNjAzZiAxMDA2NDQKLS0tIGEvUHl0aG9uL3B5YXJlbmEuYworKysgYi9QeXRob24vcHlhcmVuYS5jCkBAIC03Nyw3ICs3Nyw3IEBACiB7CiAgICAgLyogQWxsb2NhdGUgaGVhZGVyIGFuZCBibG9jayBhcyBvbmUgdW5pdC4KICAgICAgICBhYl9tZW0gcG9pbnRzIGp1c3QgcGFzdCBoZWFkZXIuICovCi0gICAgYmxvY2sgKmIgPSAoYmxvY2sgKiltYWxsb2Moc2l6ZW9mKGJsb2NrKSArIHNpemUpOworICAgIGJsb2NrICpiID0gKGJsb2NrICopUHlNZW1fTWFsbG9jKHNpemVvZihibG9jaykgKyBzaXplKTsKICAgICBpZiAoIWIpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGItPmFiX3NpemUgPSBzaXplOwpAQCAtOTIsNyArOTIsNyBAQAogYmxvY2tfZnJlZShibG9jayAqYikgewogICAgIHdoaWxlIChiKSB7CiAgICAgICAgIGJsb2NrICpuZXh0ID0gYi0+YWJfbmV4dDsKLSAgICAgICAgZnJlZShiKTsKKyAgICAgICAgUHlNZW1fRnJlZShiKTsKICAgICAgICAgYiA9IG5leHQ7CiAgICAgfQogfQpAQCAtMTI3LDIwICsxMjcsMjAgQEAKIFB5QXJlbmEgKgogUHlBcmVuYV9OZXcoKQogewotICAgIFB5QXJlbmEqIGFyZW5hID0gKFB5QXJlbmEgKiltYWxsb2Moc2l6ZW9mKFB5QXJlbmEpKTsKKyAgICBQeUFyZW5hKiBhcmVuYSA9IChQeUFyZW5hICopUHlNZW1fTWFsbG9jKHNpemVvZihQeUFyZW5hKSk7CiAgICAgaWYgKCFhcmVuYSkKICAgICAgICAgcmV0dXJuIChQeUFyZW5hKilQeUVycl9Ob01lbW9yeSgpOwogCiAgICAgYXJlbmEtPmFfaGVhZCA9IGJsb2NrX25ldyhERUZBVUxUX0JMT0NLX1NJWkUpOwogICAgIGFyZW5hLT5hX2N1ciA9IGFyZW5hLT5hX2hlYWQ7CiAgICAgaWYgKCFhcmVuYS0+YV9oZWFkKSB7Ci0gICAgICAgIGZyZWUoKHZvaWQgKilhcmVuYSk7CisgICAgICAgIFB5TWVtX0ZyZWUoKHZvaWQgKilhcmVuYSk7CiAgICAgICAgIHJldHVybiAoUHlBcmVuYSopUHlFcnJfTm9NZW1vcnkoKTsKICAgICB9CiAgICAgYXJlbmEtPmFfb2JqZWN0cyA9IFB5TGlzdF9OZXcoMCk7CiAgICAgaWYgKCFhcmVuYS0+YV9vYmplY3RzKSB7CiAgICAgICAgIGJsb2NrX2ZyZWUoYXJlbmEtPmFfaGVhZCk7Ci0gICAgICAgIGZyZWUoKHZvaWQgKilhcmVuYSk7CisgICAgICAgIFB5TWVtX0ZyZWUoKHZvaWQgKilhcmVuYSk7CiAgICAgICAgIHJldHVybiAoUHlBcmVuYSopUHlFcnJfTm9NZW1vcnkoKTsKICAgICB9CiAjaWYgZGVmaW5lZChQeV9ERUJVRykKQEAgLTE3Myw3ICsxNzMsNyBAQAogICAgICovCiAKICAgICBQeV9ERUNSRUYoYXJlbmEtPmFfb2JqZWN0cyk7Ci0gICAgZnJlZShhcmVuYSk7CisgICAgUHlNZW1fRnJlZShhcmVuYSk7CiB9CiAKIHZvaWQgKgpkaWZmIC0tZ2l0IGEvUHl0aG9uL3B5aGFzaC5jIGIvUHl0aG9uL3B5aGFzaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3Y2I1NDcKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24vcHloYXNoLmMKQEAgLTAsMCArMSw0MjcgQEAKKy8qIFNldCBvZiBoYXNoIHV0aWxpdHkgZnVuY3Rpb25zIHRvIGhlbHAgbWFpbnRhaW5pbmcgdGhlIGludmFyaWFudCB0aGF0CisgICAgaWYgYT09YiB0aGVuIGhhc2goYSk9PWhhc2goYikKKworICAgQWxsIHRoZSB1dGlsaXR5IGZ1bmN0aW9ucyAoX1B5X0hhc2gqKCkpIHJldHVybiAiLTEiIHRvIHNpZ25pZnkgYW4gZXJyb3IuCisqLworI2luY2x1ZGUgIlB5dGhvbi5oIgorCisjaWZkZWYgX19BUFBMRV9fCisjICBpbmNsdWRlIDxsaWJrZXJuL09TQnl0ZU9yZGVyLmg+CisjZWxpZiBkZWZpbmVkKEhBVkVfTEU2NFRPSCkgJiYgZGVmaW5lZChIQVZFX0VORElBTl9IKQorIyAgaW5jbHVkZSA8ZW5kaWFuLmg+CisjZWxpZiBkZWZpbmVkKEhBVkVfTEU2NFRPSCkgJiYgZGVmaW5lZChIQVZFX1NZU19FTkRJQU5fSCkKKyMgIGluY2x1ZGUgPHN5cy9lbmRpYW4uaD4KKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKK19QeV9IYXNoU2VjcmV0X3QgX1B5X0hhc2hTZWNyZXQ7CisKKyNpZiBQeV9IQVNIX0FMR09SSVRITSA9PSBQeV9IQVNIX0VYVEVSTkFMCitleHRlcm4gUHlIYXNoX0Z1bmNEZWYgUHlIYXNoX0Z1bmM7CisjZWxzZQorc3RhdGljIFB5SGFzaF9GdW5jRGVmIFB5SGFzaF9GdW5jOworI2VuZGlmCisKKy8qIENvdW50IF9QeV9IYXNoQnl0ZXMoKSBjYWxscyAqLworI2lmZGVmIFB5X0hBU0hfU1RBVFMKKyNkZWZpbmUgUHlfSEFTSF9TVEFUU19NQVggMzIKK3N0YXRpYyBQeV9zc2l6ZV90IGhhc2hzdGF0c1tQeV9IQVNIX1NUQVRTX01BWCArIDFdID0gezB9OworI2VuZGlmCisKKy8qIEZvciBudW1lcmljIHR5cGVzLCB0aGUgaGFzaCBvZiBhIG51bWJlciB4IGlzIGJhc2VkIG9uIHRoZSByZWR1Y3Rpb24KKyAgIG9mIHggbW9kdWxvIHRoZSBwcmltZSBQID0gMioqX1B5SEFTSF9CSVRTIC0gMS4gIEl0J3MgZGVzaWduZWQgc28gdGhhdAorICAgaGFzaCh4KSA9PSBoYXNoKHkpIHdoZW5ldmVyIHggYW5kIHkgYXJlIG51bWVyaWNhbGx5IGVxdWFsLCBldmVuIGlmCisgICB4IGFuZCB5IGhhdmUgZGlmZmVyZW50IHR5cGVzLgorCisgICBBIHF1aWNrIHN1bW1hcnkgb2YgdGhlIGhhc2hpbmcgc3RyYXRlZ3k6CisKKyAgICgxKSBGaXJzdCBkZWZpbmUgdGhlICdyZWR1Y3Rpb24gb2YgeCBtb2R1bG8gUCcgZm9yIGFueSByYXRpb25hbAorICAgbnVtYmVyIHg7IHRoaXMgaXMgYSBzdGFuZGFyZCBleHRlbnNpb24gb2YgdGhlIHVzdWFsIG5vdGlvbiBvZgorICAgcmVkdWN0aW9uIG1vZHVsbyBQIGZvciBpbnRlZ2Vycy4gIElmIHggPT0gcC9xICh3cml0dGVuIGluIGxvd2VzdAorICAgdGVybXMpLCB0aGUgcmVkdWN0aW9uIGlzIGludGVycHJldGVkIGFzIHRoZSByZWR1Y3Rpb24gb2YgcCB0aW1lcworICAgdGhlIGludmVyc2Ugb2YgdGhlIHJlZHVjdGlvbiBvZiBxLCBhbGwgbW9kdWxvIFA7IGlmIHEgaXMgZXhhY3RseQorICAgZGl2aXNpYmxlIGJ5IFAgdGhlbiBkZWZpbmUgdGhlIHJlZHVjdGlvbiB0byBiZSBpbmZpbml0eS4gIFNvIHdlJ3ZlCisgICBnb3QgYSB3ZWxsLWRlZmluZWQgbWFwCisKKyAgICAgIHJlZHVjZSA6IHsgcmF0aW9uYWwgbnVtYmVycyB9IC0+IHsgMCwgMSwgMiwgLi4uLCBQLTEsIGluZmluaXR5IH0uCisKKyAgICgyKSBOb3cgZm9yIGEgcmF0aW9uYWwgbnVtYmVyIHgsIGRlZmluZSBoYXNoKHgpIGJ5OgorCisgICAgICByZWR1Y2UoeCkgICBpZiB4ID49IDAKKyAgICAgIC1yZWR1Y2UoLXgpIGlmIHggPCAwCisKKyAgIElmIHRoZSByZXN1bHQgb2YgdGhlIHJlZHVjdGlvbiBpcyBpbmZpbml0eSAodGhpcyBpcyBpbXBvc3NpYmxlIGZvcgorICAgaW50ZWdlcnMsIGZsb2F0cyBhbmQgRGVjaW1hbHMpIHRoZW4gdXNlIHRoZSBwcmVkZWZpbmVkIGhhc2ggdmFsdWUKKyAgIF9QeUhBU0hfSU5GIGZvciB4ID49IDAsIG9yIC1fUHlIQVNIX0lORiBmb3IgeCA8IDAsIGluc3RlYWQuCisgICBfUHlIQVNIX0lORiwgLV9QeUhBU0hfSU5GIGFuZCBfUHlIQVNIX05BTiBhcmUgYWxzbyB1c2VkIGZvciB0aGUKKyAgIGhhc2hlcyBvZiBmbG9hdCBhbmQgRGVjaW1hbCBpbmZpbml0aWVzIGFuZCBuYW5zLgorCisgICBBIHNlbGxpbmcgcG9pbnQgZm9yIHRoZSBhYm92ZSBzdHJhdGVneSBpcyB0aGF0IGl0IG1ha2VzIGl0IHBvc3NpYmxlCisgICB0byBjb21wdXRlIGhhc2hlcyBvZiBkZWNpbWFsIGFuZCBiaW5hcnkgZmxvYXRpbmctcG9pbnQgbnVtYmVycworICAgZWZmaWNpZW50bHksIGV2ZW4gaWYgdGhlIGV4cG9uZW50IG9mIHRoZSBiaW5hcnkgb3IgZGVjaW1hbCBudW1iZXIKKyAgIGlzIGxhcmdlLiAgVGhlIGtleSBwb2ludCBpcyB0aGF0CisKKyAgICAgIHJlZHVjZSh4ICogeSkgPT0gcmVkdWNlKHgpICogcmVkdWNlKHkpIChtb2R1bG8gX1B5SEFTSF9NT0RVTFVTKQorCisgICBwcm92aWRlZCB0aGF0IHtyZWR1Y2UoeCksIHJlZHVjZSh5KX0gIT0gezAsIGluZmluaXR5fS4gIFRoZSByZWR1Y3Rpb24gb2YgYQorICAgYmluYXJ5IG9yIGRlY2ltYWwgZmxvYXQgaXMgbmV2ZXIgaW5maW5pdHksIHNpbmNlIHRoZSBkZW5vbWluYXRvciBpcyBhIHBvd2VyCisgICBvZiAyIChmb3IgYmluYXJ5KSBvciBhIGRpdmlzb3Igb2YgYSBwb3dlciBvZiAxMCAoZm9yIGRlY2ltYWwpLiAgU28gd2UgaGF2ZSwKKyAgIGZvciBub25uZWdhdGl2ZSB4LAorCisgICAgICByZWR1Y2UoeCAqIDIqKmUpID09IHJlZHVjZSh4KSAqIHJlZHVjZSgyKiplKSAlIF9QeUhBU0hfTU9EVUxVUworCisgICAgICByZWR1Y2UoeCAqIDEwKiplKSA9PSByZWR1Y2UoeCkgKiByZWR1Y2UoMTAqKmUpICUgX1B5SEFTSF9NT0RVTFVTCisKKyAgIGFuZCByZWR1Y2UoMTAqKmUpIGNhbiBiZSBjb21wdXRlZCBlZmZpY2llbnRseSBieSB0aGUgdXN1YWwgbW9kdWxhcgorICAgZXhwb25lbnRpYXRpb24gYWxnb3JpdGhtLiAgRm9yIHJlZHVjZSgyKiplKSBpdCdzIGV2ZW4gYmV0dGVyOiBzaW5jZQorICAgUCBpcyBvZiB0aGUgZm9ybSAyKipuLTEsIHJlZHVjZSgyKiplKSBpcyAyKiooZSBtb2QgbiksIGFuZCBtdWx0aXBsaWNhdGlvbgorICAgYnkgMioqKGUgbW9kIG4pIG1vZHVsbyAyKipuLTEganVzdCBhbW91bnRzIHRvIGEgcm90YXRpb24gb2YgYml0cy4KKworICAgKi8KKworUHlfaGFzaF90CitfUHlfSGFzaERvdWJsZShkb3VibGUgdikKK3sKKyAgICBpbnQgZSwgc2lnbjsKKyAgICBkb3VibGUgbTsKKyAgICBQeV91aGFzaF90IHgsIHk7CisKKyAgICBpZiAoIVB5X0lTX0ZJTklURSh2KSkgeworICAgICAgICBpZiAoUHlfSVNfSU5GSU5JVFkodikpCisgICAgICAgICAgICByZXR1cm4gdiA+IDAgPyBfUHlIQVNIX0lORiA6IC1fUHlIQVNIX0lORjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIF9QeUhBU0hfTkFOOworICAgIH0KKworICAgIG0gPSBmcmV4cCh2LCAmZSk7CisKKyAgICBzaWduID0gMTsKKyAgICBpZiAobSA8IDApIHsKKyAgICAgICAgc2lnbiA9IC0xOworICAgICAgICBtID0gLW07CisgICAgfQorCisgICAgLyogcHJvY2VzcyAyOCBiaXRzIGF0IGEgdGltZTsgIHRoaXMgc2hvdWxkIHdvcmsgd2VsbCBib3RoIGZvciBiaW5hcnkKKyAgICAgICBhbmQgaGV4YWRlY2ltYWwgZmxvYXRpbmcgcG9pbnQuICovCisgICAgeCA9IDA7CisgICAgd2hpbGUgKG0pIHsKKyAgICAgICAgeCA9ICgoeCA8PCAyOCkgJiBfUHlIQVNIX01PRFVMVVMpIHwgeCA+PiAoX1B5SEFTSF9CSVRTIC0gMjgpOworICAgICAgICBtICo9IDI2ODQzNTQ1Ni4wOyAgLyogMioqMjggKi8KKyAgICAgICAgZSAtPSAyODsKKyAgICAgICAgeSA9IChQeV91aGFzaF90KW07ICAvKiBwdWxsIG91dCBpbnRlZ2VyIHBhcnQgKi8KKyAgICAgICAgbSAtPSB5OworICAgICAgICB4ICs9IHk7CisgICAgICAgIGlmICh4ID49IF9QeUhBU0hfTU9EVUxVUykKKyAgICAgICAgICAgIHggLT0gX1B5SEFTSF9NT0RVTFVTOworICAgIH0KKworICAgIC8qIGFkanVzdCBmb3IgdGhlIGV4cG9uZW50OyAgZmlyc3QgcmVkdWNlIGl0IG1vZHVsbyBfUHlIQVNIX0JJVFMgKi8KKyAgICBlID0gZSA+PSAwID8gZSAlIF9QeUhBU0hfQklUUyA6IF9QeUhBU0hfQklUUy0xLSgoLTEtZSkgJSBfUHlIQVNIX0JJVFMpOworICAgIHggPSAoKHggPDwgZSkgJiBfUHlIQVNIX01PRFVMVVMpIHwgeCA+PiAoX1B5SEFTSF9CSVRTIC0gZSk7CisKKyAgICB4ID0geCAqIHNpZ247CisgICAgaWYgKHggPT0gKFB5X3VoYXNoX3QpLTEpCisgICAgICAgIHggPSAoUHlfdWhhc2hfdCktMjsKKyAgICByZXR1cm4gKFB5X2hhc2hfdCl4OworfQorCitQeV9oYXNoX3QKK19QeV9IYXNoUG9pbnRlcih2b2lkICpwKQoreworICAgIFB5X2hhc2hfdCB4OworICAgIHNpemVfdCB5ID0gKHNpemVfdClwOworICAgIC8qIGJvdHRvbSAzIG9yIDQgYml0cyBhcmUgbGlrZWx5IHRvIGJlIDA7IHJvdGF0ZSB5IGJ5IDQgdG8gYXZvaWQKKyAgICAgICBleGNlc3NpdmUgaGFzaCBjb2xsaXNpb25zIGZvciBkaWN0cyBhbmQgc2V0cyAqLworICAgIHkgPSAoeSA+PiA0KSB8ICh5IDw8ICg4ICogU0laRU9GX1ZPSURfUCAtIDQpKTsKKyAgICB4ID0gKFB5X2hhc2hfdCl5OworICAgIGlmICh4ID09IC0xKQorICAgICAgICB4ID0gLTI7CisgICAgcmV0dXJuIHg7Cit9CisKK1B5X2hhc2hfdAorX1B5X0hhc2hCeXRlcyhjb25zdCB2b2lkICpzcmMsIFB5X3NzaXplX3QgbGVuKQoreworICAgIFB5X2hhc2hfdCB4OworICAgIC8qCisgICAgICBXZSBtYWtlIHRoZSBoYXNoIG9mIHRoZSBlbXB0eSBzdHJpbmcgYmUgMCwgcmF0aGVyIHRoYW4gdXNpbmcKKyAgICAgIChwcmVmaXggXiBzdWZmaXgpLCBzaW5jZSB0aGlzIHNsaWdodGx5IG9iZnVzY2F0ZXMgdGhlIGhhc2ggc2VjcmV0CisgICAgKi8KKyAgICBpZiAobGVuID09IDApIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisjaWZkZWYgUHlfSEFTSF9TVEFUUworICAgIGhhc2hzdGF0c1sobGVuIDw9IFB5X0hBU0hfU1RBVFNfTUFYKSA/IGxlbiA6IDBdKys7CisjZW5kaWYKKworI2lmIFB5X0hBU0hfQ1VUT0ZGID4gMAorICAgIGlmIChsZW4gPCBQeV9IQVNIX0NVVE9GRikgeworICAgICAgICAvKiBPcHRpbWl6ZSBoYXNoaW5nIG9mIHZlcnkgc21hbGwgc3RyaW5ncyB3aXRoIGlubGluZSBESkJYMzNBLiAqLworICAgICAgICBQeV91aGFzaF90IGhhc2g7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnAgPSBzcmM7CisgICAgICAgIGhhc2ggPSA1MzgxOyAvKiBESkJYMzNBIHN0YXJ0cyB3aXRoIDUzODEgKi8KKworICAgICAgICBzd2l0Y2gobGVuKSB7CisgICAgICAgICAgICAvKiAoKGhhc2ggPDwgNSkgKyBoYXNoKSArICpwID09IGhhc2ggKiAzMyArICpwICovCisgICAgICAgICAgICBjYXNlIDc6IGhhc2ggPSAoKGhhc2ggPDwgNSkgKyBoYXNoKSArICpwKys7IC8qIGZhbGx0aHJvdWdoICovCisgICAgICAgICAgICBjYXNlIDY6IGhhc2ggPSAoKGhhc2ggPDwgNSkgKyBoYXNoKSArICpwKys7IC8qIGZhbGx0aHJvdWdoICovCisgICAgICAgICAgICBjYXNlIDU6IGhhc2ggPSAoKGhhc2ggPDwgNSkgKyBoYXNoKSArICpwKys7IC8qIGZhbGx0aHJvdWdoICovCisgICAgICAgICAgICBjYXNlIDQ6IGhhc2ggPSAoKGhhc2ggPDwgNSkgKyBoYXNoKSArICpwKys7IC8qIGZhbGx0aHJvdWdoICovCisgICAgICAgICAgICBjYXNlIDM6IGhhc2ggPSAoKGhhc2ggPDwgNSkgKyBoYXNoKSArICpwKys7IC8qIGZhbGx0aHJvdWdoICovCisgICAgICAgICAgICBjYXNlIDI6IGhhc2ggPSAoKGhhc2ggPDwgNSkgKyBoYXNoKSArICpwKys7IC8qIGZhbGx0aHJvdWdoICovCisgICAgICAgICAgICBjYXNlIDE6IGhhc2ggPSAoKGhhc2ggPDwgNSkgKyBoYXNoKSArICpwKys7IGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBhc3NlcnQoMCk7CisgICAgICAgIH0KKyAgICAgICAgaGFzaCBePSBsZW47CisgICAgICAgIGhhc2ggXj0gKFB5X3VoYXNoX3QpIF9QeV9IYXNoU2VjcmV0LmRqYngzM2Euc3VmZml4OworICAgICAgICB4ID0gKFB5X2hhc2hfdCloYXNoOworICAgIH0KKyAgICBlbHNlCisjZW5kaWYgLyogUHlfSEFTSF9DVVRPRkYgKi8KKyAgICAgICAgeCA9IFB5SGFzaF9GdW5jLmhhc2goc3JjLCBsZW4pOworCisgICAgaWYgKHggPT0gLTEpCisgICAgICAgIHJldHVybiAtMjsKKyAgICByZXR1cm4geDsKK30KKwordm9pZAorX1B5SGFzaF9GaW5pKHZvaWQpCit7CisjaWZkZWYgUHlfSEFTSF9TVEFUUworICAgIGludCBpOworICAgIFB5X3NzaXplX3QgdG90YWwgPSAwOworICAgIGNoYXIgKmZtdCA9ICIlMmkgJTgiIFBZX0ZPUk1BVF9TSVpFX1QgImQgJTgiIFBZX0ZPUk1BVF9TSVpFX1QgImRcbiI7CisKKyAgICBmcHJpbnRmKHN0ZGVyciwgImxlbiAgIGNhbGxzICAgIHRvdGFsXG4iKTsKKyAgICBmb3IgKGkgPSAxOyBpIDw9IFB5X0hBU0hfU1RBVFNfTUFYOyBpKyspIHsKKyAgICAgICAgdG90YWwgKz0gaGFzaHN0YXRzW2ldOworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgZm10LCBpLCBoYXNoc3RhdHNbaV0sIHRvdGFsKTsKKyAgICB9CisgICAgdG90YWwgKz0gaGFzaHN0YXRzWzBdOworICAgIGZwcmludGYoc3RkZXJyLCAiPiAgJTgiIFBZX0ZPUk1BVF9TSVpFX1QgImQgJTgiIFBZX0ZPUk1BVF9TSVpFX1QgImRcbiIsCisgICAgICAgICAgICBoYXNoc3RhdHNbMF0sIHRvdGFsKTsKKyNlbmRpZgorfQorCitQeUhhc2hfRnVuY0RlZiAqCitQeUhhc2hfR2V0RnVuY0RlZih2b2lkKQoreworICAgIHJldHVybiAmUHlIYXNoX0Z1bmM7Cit9CisKKy8qIE9wdGltaXplZCBtZW1jcHkoKSBmb3IgV2luZG93cyAqLworI2lmZGVmIF9NU0NfVkVSCisjICBpZiBTSVpFT0ZfUFlfVUhBU0hfVCA9PSA0CisjICAgIGRlZmluZSBQWV9VSEFTSF9DUFkoZHN0LCBzcmMpIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgZHN0WzBdID0gc3JjWzBdOyBkc3RbMV0gPSBzcmNbMV07IGRzdFsyXSA9IHNyY1syXTsgZHN0WzNdID0gc3JjWzNdOyBcCisgICAgICAgfSB3aGlsZSgwKQorIyAgZWxpZiBTSVpFT0ZfUFlfVUhBU0hfVCA9PSA4CisjICAgIGRlZmluZSBQWV9VSEFTSF9DUFkoZHN0LCBzcmMpIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgZHN0WzBdID0gc3JjWzBdOyBkc3RbMV0gPSBzcmNbMV07IGRzdFsyXSA9IHNyY1syXTsgZHN0WzNdID0gc3JjWzNdOyBcCisgICAgICAgZHN0WzRdID0gc3JjWzRdOyBkc3RbNV0gPSBzcmNbNV07IGRzdFs2XSA9IHNyY1s2XTsgZHN0WzddID0gc3JjWzddOyBcCisgICAgICAgfSB3aGlsZSgwKQorIyAgZWxzZQorIyAgICBlcnJvciBTSVpFT0ZfUFlfVUhBU0hfVCBtdXN0IGJlIDQgb3IgOAorIyAgZW5kaWYgLyogU0laRU9GX1BZX1VIQVNIX1QgKi8KKyNlbHNlIC8qIG5vdCBXaW5kb3dzICovCisjICBkZWZpbmUgUFlfVUhBU0hfQ1BZKGRzdCwgc3JjKSBtZW1jcHkoZHN0LCBzcmMsIFNJWkVPRl9QWV9VSEFTSF9UKQorI2VuZGlmIC8qIF9NU0NfVkVSICovCisKKworI2lmIFB5X0hBU0hfQUxHT1JJVEhNID09IFB5X0hBU0hfRk5WCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogTW9kaWZpZWQgRm93bGVyLU5vbGwtVm8gKEZOVikgaGFzaCBmdW5jdGlvbgorICovCitzdGF0aWMgUHlfaGFzaF90CitmbnYoY29uc3Qgdm9pZCAqc3JjLCBQeV9zc2l6ZV90IGxlbikKK3sKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwID0gc3JjOworICAgIFB5X3VoYXNoX3QgeDsKKyAgICBQeV9zc2l6ZV90IHJlbWFpbmRlciwgYmxvY2tzOworICAgIHVuaW9uIHsKKyAgICAgICAgUHlfdWhhc2hfdCB2YWx1ZTsKKyAgICAgICAgdW5zaWduZWQgY2hhciBieXRlc1tTSVpFT0ZfUFlfVUhBU0hfVF07CisgICAgfSBibG9jazsKKworI2lmZGVmIFB5X0RFQlVHCisgICAgYXNzZXJ0KF9QeV9IYXNoU2VjcmV0X0luaXRpYWxpemVkKTsKKyNlbmRpZgorICAgIHJlbWFpbmRlciA9IGxlbiAlIFNJWkVPRl9QWV9VSEFTSF9UOworICAgIGlmIChyZW1haW5kZXIgPT0gMCkgeworICAgICAgICAvKiBQcm9jZXNzIGF0IGxlYXN0IG9uZSBibG9jayBieXRlIGJ5IGJ5dGUgdG8gcmVkdWNlIGhhc2ggY29sbGlzaW9ucworICAgICAgICAgKiBmb3Igc3RyaW5ncyB3aXRoIGNvbW1vbiBwcmVmaXhlcy4gKi8KKyAgICAgICAgcmVtYWluZGVyID0gU0laRU9GX1BZX1VIQVNIX1Q7CisgICAgfQorICAgIGJsb2NrcyA9IChsZW4gLSByZW1haW5kZXIpIC8gU0laRU9GX1BZX1VIQVNIX1Q7CisKKyAgICB4ID0gKFB5X3VoYXNoX3QpIF9QeV9IYXNoU2VjcmV0LmZudi5wcmVmaXg7CisgICAgeCBePSAoUHlfdWhhc2hfdCkgKnAgPDwgNzsKKyAgICB3aGlsZSAoYmxvY2tzLS0pIHsKKyAgICAgICAgUFlfVUhBU0hfQ1BZKGJsb2NrLmJ5dGVzLCBwKTsKKyAgICAgICAgeCA9IChfUHlIQVNIX01VTFRJUExJRVIgKiB4KSBeIGJsb2NrLnZhbHVlOworICAgICAgICBwICs9IFNJWkVPRl9QWV9VSEFTSF9UOworICAgIH0KKyAgICAvKiBhZGQgcmVtYWluZGVyICovCisgICAgZm9yICg7IHJlbWFpbmRlciA+IDA7IHJlbWFpbmRlci0tKQorICAgICAgICB4ID0gKF9QeUhBU0hfTVVMVElQTElFUiAqIHgpIF4gKFB5X3VoYXNoX3QpICpwKys7CisgICAgeCBePSAoUHlfdWhhc2hfdCkgbGVuOworICAgIHggXj0gKFB5X3VoYXNoX3QpIF9QeV9IYXNoU2VjcmV0LmZudi5zdWZmaXg7CisgICAgaWYgKHggPT0gLTEpIHsKKyAgICAgICAgeCA9IC0yOworICAgIH0KKyAgICByZXR1cm4geDsKK30KKworc3RhdGljIFB5SGFzaF9GdW5jRGVmIFB5SGFzaF9GdW5jID0ge2ZudiwgImZudiIsIDggKiBTSVpFT0ZfUFlfSEFTSF9ULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2ICogU0laRU9GX1BZX0hBU0hfVH07CisKKyNlbmRpZiAvKiBQeV9IQVNIX0FMR09SSVRITSA9PSBQeV9IQVNIX0ZOViAqLworCisKKyNpZiBQeV9IQVNIX0FMR09SSVRITSA9PSBQeV9IQVNIX1NJUEhBU0gyNAorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyA8TUlUIExpY2Vuc2U+CisgQ29weXJpZ2h0IChjKSAyMDEzICBNYXJlayBNYWprb3dza2kgPG1hcmVrQHBvcGNvdW50Lm9yZz4KKworIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKKyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyBUSEUgU09GVFdBUkUuCisgPC9NSVQgTGljZW5zZT4KKworIE9yaWdpbmFsIGxvY2F0aW9uOgorICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9tYWplay9jc2lwaGFzaC8KKworIFNvbHV0aW9uIGluc3BpcmVkIGJ5IGNvZGUgZnJvbToKKyAgICBTYW11ZWwgTmV2ZXMgKHN1cGVyY29wL2NyeXB0b19hdXRoL3NpcGhhc2gyNC9saXR0bGUpCisgICAgZGpiIChzdXBlcmNvcC9jcnlwdG9fYXV0aC9zaXBoYXNoMjQvbGl0dGxlMikKKyAgICBKZWFuLVBoaWxpcHBlIEF1bWFzc29uIChodHRwczovLzEzMTAwMi5uZXQvc2lwaGFzaC9zaXBoYXNoMjQuYykKKworIE1vZGlmaWVkIGZvciBQeXRob24gYnkgQ2hyaXN0aWFuIEhlaW1lczoKKyAgICAtIEM4OSAvIE1TVkMgY29tcGF0aWJpbGl0eQorICAgIC0gUFlfVUlOVDY0X1QsIFBZX1VJTlQzMl9UIGFuZCBQWV9VSU5UOF9UCisgICAgLSBfcm90bDY0KCkgb24gV2luZG93cworICAgIC0gbGV0b2g2NCgpIGZhbGxiYWNrCisqLworCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgUFlfVUlOVDhfVDsKKworLyogYnl0ZSBzd2FwIGxpdHRsZSBlbmRpYW4gdG8gaG9zdCBlbmRpYW4KKyAqIEVuZGlhbiBjb252ZXJzaW9uIG5vdCBvbmx5IGVuc3VyZXMgdGhhdCB0aGUgaGFzaCBmdW5jdGlvbiByZXR1cm5zIHRoZSBzYW1lCisgKiB2YWx1ZSBvbiBhbGwgcGxhdGZvcm1zLiBJdCBpcyBhbHNvIHJlcXVpcmVkIHRvIGZvciBhIGdvb2QgZGlzcGVyc2lvbiBvZgorICogdGhlIGhhc2ggdmFsdWVzJyBsZWFzdCBzaWduaWZpY2FudCBiaXRzLgorICovCisjaWYgUFlfTElUVExFX0VORElBTgorIyAgZGVmaW5lIF9sZTY0dG9oKHgpICgoUFlfVUlOVDY0X1QpKHgpKQorI2VsaWYgZGVmaW5lZChfX0FQUExFX18pCisjICBkZWZpbmUgX2xlNjR0b2goeCkgT1NTd2FwTGl0dGxlVG9Ib3N0SW50NjQoeCkKKyNlbGlmIGRlZmluZWQoSEFWRV9MRVRPSDY0KQorIyAgZGVmaW5lIF9sZTY0dG9oKHgpIGxlNjR0b2goeCkKKyNlbHNlCisjICBkZWZpbmUgX2xlNjR0b2goeCkgKCgoUFlfVUlOVDY0X1QpKHgpIDw8IDU2KSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAoKChQWV9VSU5UNjRfVCkoeCkgPDwgNDApICYgMHhmZjAwMDAwMDAwMDAwMFVMTCkgfCBcCisgICAgICAgICAgICAgICAgICAgICAgKCgoUFlfVUlOVDY0X1QpKHgpIDw8IDI0KSAmIDB4ZmYwMDAwMDAwMDAwVUxMKSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAoKChQWV9VSU5UNjRfVCkoeCkgPDwgOCkgICYgMHhmZjAwMDAwMDAwVUxMKSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAoKChQWV9VSU5UNjRfVCkoeCkgPj4gOCkgICYgMHhmZjAwMDAwMFVMTCkgfCBcCisgICAgICAgICAgICAgICAgICAgICAgKCgoUFlfVUlOVDY0X1QpKHgpID4+IDI0KSAmIDB4ZmYwMDAwVUxMKSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAoKChQWV9VSU5UNjRfVCkoeCkgPj4gNDApICYgMHhmZjAwVUxMKSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAoKFBZX1VJTlQ2NF9UKSh4KSAgPj4gNTYpKQorI2VuZGlmCisKKworI2lmZGVmIF9NU0NfVkVSCisjICBkZWZpbmUgUk9UQVRFKHgsIGIpICBfcm90bDY0KHgsIGIpCisjZWxzZQorIyAgZGVmaW5lIFJPVEFURSh4LCBiKSAoUFlfVUlOVDY0X1QpKCAoKHgpIDw8IChiKSkgfCAoICh4KSA+PiAoNjQgLSAoYikpKSApCisjZW5kaWYKKworI2RlZmluZSBIQUxGX1JPVU5EKGEsYixjLGQscyx0KSAgICAgICAgIFwKKyAgICBhICs9IGI7IGMgKz0gZDsgICAgICAgICAgICAgXAorICAgIGIgPSBST1RBVEUoYiwgcykgXiBhOyAgICAgICAgICAgXAorICAgIGQgPSBST1RBVEUoZCwgdCkgXiBjOyAgICAgICAgICAgXAorICAgIGEgPSBST1RBVEUoYSwgMzIpOworCisjZGVmaW5lIERPVUJMRV9ST1VORCh2MCx2MSx2Mix2MykgICAgICAgXAorICAgIEhBTEZfUk9VTkQodjAsdjEsdjIsdjMsMTMsMTYpOyAgICAgIFwKKyAgICBIQUxGX1JPVU5EKHYyLHYxLHYwLHYzLDE3LDIxKTsgICAgICBcCisgICAgSEFMRl9ST1VORCh2MCx2MSx2Mix2MywxMywxNik7ICAgICAgXAorICAgIEhBTEZfUk9VTkQodjIsdjEsdjAsdjMsMTcsMjEpOworCisKK3N0YXRpYyBQeV9oYXNoX3QKK3NpcGhhc2gyNChjb25zdCB2b2lkICpzcmMsIFB5X3NzaXplX3Qgc3JjX3N6KSB7CisgICAgUFlfVUlOVDY0X1QgazAgPSBfbGU2NHRvaChfUHlfSGFzaFNlY3JldC5zaXBoYXNoLmswKTsKKyAgICBQWV9VSU5UNjRfVCBrMSA9IF9sZTY0dG9oKF9QeV9IYXNoU2VjcmV0LnNpcGhhc2guazEpOworICAgIFBZX1VJTlQ2NF9UIGIgPSAoUFlfVUlOVDY0X1Qpc3JjX3N6IDw8IDU2OworICAgIGNvbnN0IFBZX1VJTlQ2NF9UICppbiA9IChQWV9VSU5UNjRfVCopc3JjOworCisgICAgUFlfVUlOVDY0X1QgdjAgPSBrMCBeIDB4NzM2ZjZkNjU3MDczNjU3NVVMTDsKKyAgICBQWV9VSU5UNjRfVCB2MSA9IGsxIF4gMHg2NDZmNzI2MTZlNjQ2ZjZkVUxMOworICAgIFBZX1VJTlQ2NF9UIHYyID0gazAgXiAweDZjNzk2NzY1NmU2NTcyNjFVTEw7CisgICAgUFlfVUlOVDY0X1QgdjMgPSBrMSBeIDB4NzQ2NTY0NjI3OTc0NjU3M1VMTDsKKworICAgIFBZX1VJTlQ2NF9UIHQ7CisgICAgUFlfVUlOVDhfVCAqcHQ7CisgICAgUFlfVUlOVDhfVCAqbTsKKworICAgIHdoaWxlIChzcmNfc3ogPj0gOCkgeworICAgICAgICBQWV9VSU5UNjRfVCBtaSA9IF9sZTY0dG9oKCppbik7CisgICAgICAgIGluICs9IDE7CisgICAgICAgIHNyY19zeiAtPSA4OworICAgICAgICB2MyBePSBtaTsKKyAgICAgICAgRE9VQkxFX1JPVU5EKHYwLHYxLHYyLHYzKTsKKyAgICAgICAgdjAgXj0gbWk7CisgICAgfQorCisgICAgdCA9IDA7CisgICAgcHQgPSAoUFlfVUlOVDhfVCAqKSZ0OworICAgIG0gPSAoUFlfVUlOVDhfVCAqKWluOworICAgIHN3aXRjaCAoc3JjX3N6KSB7CisgICAgICAgIGNhc2UgNzogcHRbNl0gPSBtWzZdOworICAgICAgICBjYXNlIDY6IHB0WzVdID0gbVs1XTsKKyAgICAgICAgY2FzZSA1OiBwdFs0XSA9IG1bNF07CisgICAgICAgIGNhc2UgNDogUHlfTUVNQ1BZKHB0LCBtLCBzaXplb2YoUFlfVUlOVDMyX1QpKTsgYnJlYWs7CisgICAgICAgIGNhc2UgMzogcHRbMl0gPSBtWzJdOworICAgICAgICBjYXNlIDI6IHB0WzFdID0gbVsxXTsKKyAgICAgICAgY2FzZSAxOiBwdFswXSA9IG1bMF07CisgICAgfQorICAgIGIgfD0gX2xlNjR0b2godCk7CisKKyAgICB2MyBePSBiOworICAgIERPVUJMRV9ST1VORCh2MCx2MSx2Mix2Myk7CisgICAgdjAgXj0gYjsKKyAgICB2MiBePSAweGZmOworICAgIERPVUJMRV9ST1VORCh2MCx2MSx2Mix2Myk7CisgICAgRE9VQkxFX1JPVU5EKHYwLHYxLHYyLHYzKTsKKworICAgIC8qIG1vZGlmaWVkICovCisgICAgdCA9ICh2MCBeIHYxKSBeICh2MiBeIHYzKTsKKyAgICByZXR1cm4gKFB5X2hhc2hfdCl0OworfQorCitzdGF0aWMgUHlIYXNoX0Z1bmNEZWYgUHlIYXNoX0Z1bmMgPSB7c2lwaGFzaDI0LCAic2lwaGFzaDI0IiwgNjQsIDEyOH07CisKKyNlbmRpZiAvKiBQeV9IQVNIX0FMR09SSVRITSA9PSBQeV9IQVNIX1NJUEhBU0gyNCAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvUHl0aG9uL3B5c3RhdGUuYyBiL1B5dGhvbi9weXN0YXRlLmMKaW5kZXggNzcyYWE1My4uMmFjMmZkNSAxMDA2NDQKLS0tIGEvUHl0aG9uL3B5c3RhdGUuYworKysgYi9QeXRob24vcHlzdGF0ZS5jCkBAIC02LDExICs2LDExIEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogQ0FVVElPTgogCi1BbHdheXMgdXNlIG1hbGxvYygpIGFuZCBmcmVlKCkgZGlyZWN0bHkgaW4gdGhpcyBmaWxlLiAgQSBudW1iZXIgb2YgdGhlc2UKLWZ1bmN0aW9ucyBhcmUgYWR2ZXJ0aXNlZCBhcyBzYWZlIHRvIGNhbGwgd2hlbiB0aGUgR0lMIGlzbid0IGhlbGQsIGFuZCBpbgotYSBkZWJ1ZyBidWlsZCBQeXRob24gcmVkaXJlY3RzIChlLmcuKSBQeU1lbV9ORVcgKGV0YykgdG8gUHl0aG9uJ3MgZGVidWdnaW5nCi1vYm1hbGxvYyBmdW5jdGlvbnMuICBUaG9zZSBhcmVuJ3QgdGhyZWFkLXNhZmUgKHRoZXkgcmVseSBvbiB0aGUgR0lMIHRvIGF2b2lkCi10aGUgZXhwZW5zZSBvZiBkb2luZyB0aGVpciBvd24gbG9ja2luZykuCitBbHdheXMgdXNlIFB5TWVtX1Jhd01hbGxvYygpIGFuZCBQeU1lbV9SYXdGcmVlKCkgZGlyZWN0bHkgaW4gdGhpcyBmaWxlLiAgQQorbnVtYmVyIG9mIHRoZXNlIGZ1bmN0aW9ucyBhcmUgYWR2ZXJ0aXNlZCBhcyBzYWZlIHRvIGNhbGwgd2hlbiB0aGUgR0lMIGlzbid0CitoZWxkLCBhbmQgaW4gYSBkZWJ1ZyBidWlsZCBQeXRob24gcmVkaXJlY3RzIChlLmcuKSBQeU1lbV9ORVcgKGV0YykgdG8gUHl0aG9uJ3MKK2RlYnVnZ2luZyBvYm1hbGxvYyBmdW5jdGlvbnMuICBUaG9zZSBhcmVuJ3QgdGhyZWFkLXNhZmUgKHRoZXkgcmVseSBvbiB0aGUgR0lMCit0byBhdm9pZCB0aGUgZXhwZW5zZSBvZiBkb2luZyB0aGVpciBvd24gbG9ja2luZykuCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiAjaWZkZWYgSEFWRV9ETE9QRU4KQEAgLTYwLDcgKzYwLDcgQEAKIFB5SW50ZXJwcmV0ZXJTdGF0ZV9OZXcodm9pZCkKIHsKICAgICBQeUludGVycHJldGVyU3RhdGUgKmludGVycCA9IChQeUludGVycHJldGVyU3RhdGUgKikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hbGxvYyhzaXplb2YoUHlJbnRlcnByZXRlclN0YXRlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU1lbV9SYXdNYWxsb2Moc2l6ZW9mKFB5SW50ZXJwcmV0ZXJTdGF0ZSkpOwogCiAgICAgaWYgKGludGVycCAhPSBOVUxMKSB7CiAgICAgICAgIEhFQURfSU5JVCgpOwpAQCAtNzIsNiArNzIsNyBAQAogICAgICAgICBpbnRlcnAtPm1vZHVsZXNfYnlfaW5kZXggPSBOVUxMOwogICAgICAgICBpbnRlcnAtPnN5c2RpY3QgPSBOVUxMOwogICAgICAgICBpbnRlcnAtPmJ1aWx0aW5zID0gTlVMTDsKKyAgICAgICAgaW50ZXJwLT5idWlsdGluc19jb3B5ID0gTlVMTDsKICAgICAgICAgaW50ZXJwLT50c3RhdGVfaGVhZCA9IE5VTEw7CiAgICAgICAgIGludGVycC0+Y29kZWNfc2VhcmNoX3BhdGggPSBOVUxMOwogICAgICAgICBpbnRlcnAtPmNvZGVjX3NlYXJjaF9jYWNoZSA9IE5VTEw7CkBAIC0xMTUsNiArMTE2LDcgQEAKICAgICBQeV9DTEVBUihpbnRlcnAtPm1vZHVsZXNfYnlfaW5kZXgpOwogICAgIFB5X0NMRUFSKGludGVycC0+c3lzZGljdCk7CiAgICAgUHlfQ0xFQVIoaW50ZXJwLT5idWlsdGlucyk7CisgICAgUHlfQ0xFQVIoaW50ZXJwLT5idWlsdGluc19jb3B5KTsKICAgICBQeV9DTEVBUihpbnRlcnAtPmltcG9ydGxpYik7CiB9CiAKQEAgLTE0OCw3ICsxNTAsNyBAQAogICAgICAgICBQeV9GYXRhbEVycm9yKCJQeUludGVycHJldGVyU3RhdGVfRGVsZXRlOiByZW1haW5pbmcgdGhyZWFkcyIpOwogICAgICpwID0gaW50ZXJwLT5uZXh0OwogICAgIEhFQURfVU5MT0NLKCk7Ci0gICAgZnJlZShpbnRlcnApOworICAgIFB5TWVtX1Jhd0ZyZWUoaW50ZXJwKTsKICNpZmRlZiBXSVRIX1RIUkVBRAogICAgIGlmIChpbnRlcnBfaGVhZCA9PSBOVUxMICYmIGhlYWRfbXV0ZXggIT0gTlVMTCkgewogICAgICAgICBQeVRocmVhZF9mcmVlX2xvY2soaGVhZF9tdXRleCk7CkBAIC0xNjgsNyArMTcwLDcgQEAKIHN0YXRpYyBQeVRocmVhZFN0YXRlICoKIG5ld190aHJlYWRzdGF0ZShQeUludGVycHJldGVyU3RhdGUgKmludGVycCwgaW50IGluaXQpCiB7Ci0gICAgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlID0gKFB5VGhyZWFkU3RhdGUgKiltYWxsb2Moc2l6ZW9mKFB5VGhyZWFkU3RhdGUpKTsKKyAgICBQeVRocmVhZFN0YXRlICp0c3RhdGUgPSAoUHlUaHJlYWRTdGF0ZSAqKVB5TWVtX1Jhd01hbGxvYyhzaXplb2YoUHlUaHJlYWRTdGF0ZSkpOwogCiAgICAgaWYgKF9QeVRocmVhZFN0YXRlX0dldEZyYW1lID09IE5VTEwpCiAgICAgICAgIF9QeVRocmVhZFN0YXRlX0dldEZyYW1lID0gdGhyZWFkc3RhdGVfZ2V0ZnJhbWU7CkBAIC0xODIsNyArMTg0LDYgQEAKICAgICAgICAgdHN0YXRlLT5yZWN1cnNpb25fY3JpdGljYWwgPSAwOwogICAgICAgICB0c3RhdGUtPnRyYWNpbmcgPSAwOwogICAgICAgICB0c3RhdGUtPnVzZV90cmFjaW5nID0gMDsKLSAgICAgICAgdHN0YXRlLT50aWNrX2NvdW50ZXIgPSAwOwogICAgICAgICB0c3RhdGUtPmdpbHN0YXRlX2NvdW50ZXIgPSAwOwogICAgICAgICB0c3RhdGUtPmFzeW5jX2V4YyA9IE5VTEw7CiAjaWZkZWYgV0lUSF9USFJFQUQKQEAgLTIwOCwxMiArMjA5LDE3IEBACiAKICAgICAgICAgdHN0YXRlLT50cmFzaF9kZWxldGVfbmVzdGluZyA9IDA7CiAgICAgICAgIHRzdGF0ZS0+dHJhc2hfZGVsZXRlX2xhdGVyID0gTlVMTDsKKyAgICAgICAgdHN0YXRlLT5vbl9kZWxldGUgPSBOVUxMOworICAgICAgICB0c3RhdGUtPm9uX2RlbGV0ZV9kYXRhID0gTlVMTDsKIAogICAgICAgICBpZiAoaW5pdCkKICAgICAgICAgICAgIF9QeVRocmVhZFN0YXRlX0luaXQodHN0YXRlKTsKIAogICAgICAgICBIRUFEX0xPQ0soKTsKKyAgICAgICAgdHN0YXRlLT5wcmV2ID0gTlVMTDsKICAgICAgICAgdHN0YXRlLT5uZXh0ID0gaW50ZXJwLT50c3RhdGVfaGVhZDsKKyAgICAgICAgaWYgKHRzdGF0ZS0+bmV4dCkKKyAgICAgICAgICAgIHRzdGF0ZS0+bmV4dC0+cHJldiA9IHRzdGF0ZTsKICAgICAgICAgaW50ZXJwLT50c3RhdGVfaGVhZCA9IHRzdGF0ZTsKICAgICAgICAgSEVBRF9VTkxPQ0soKTsKICAgICB9CkBAIC0zMTcsNiArMzIzLDMxIEBACiAgICAgcmV0dXJuIFB5TGlzdF9TZXRJdGVtKHN0YXRlLT5tb2R1bGVzX2J5X2luZGV4LCBpbmRleCwgUHlfTm9uZSk7CiB9CiAKKy8qIHVzZWQgYnkgaW1wb3J0LmM6UHlJbXBvcnRfQ2xlYW51cCAqLwordm9pZAorX1B5U3RhdGVfQ2xlYXJNb2R1bGVzKHZvaWQpCit7CisgICAgUHlJbnRlcnByZXRlclN0YXRlICpzdGF0ZSA9IFB5VGhyZWFkU3RhdGVfR0VUKCktPmludGVycDsKKyAgICBpZiAoc3RhdGUtPm1vZHVsZXNfYnlfaW5kZXgpIHsKKyAgICAgICAgUHlfc3NpemVfdCBpOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgUHlMaXN0X0dFVF9TSVpFKHN0YXRlLT5tb2R1bGVzX2J5X2luZGV4KTsgaSsrKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqbSA9IFB5TGlzdF9HRVRfSVRFTShzdGF0ZS0+bW9kdWxlc19ieV9pbmRleCwgaSk7CisgICAgICAgICAgICBpZiAoUHlNb2R1bGVfQ2hlY2sobSkpIHsKKyAgICAgICAgICAgICAgICAvKiBjbGVhbnVwIHRoZSBzYXZlZCBjb3B5IG9mIG1vZHVsZSBkaWN0cyAqLworICAgICAgICAgICAgICAgIFB5TW9kdWxlRGVmICptZCA9IFB5TW9kdWxlX0dldERlZihtKTsKKyAgICAgICAgICAgICAgICBpZiAobWQpCisgICAgICAgICAgICAgICAgICAgIFB5X0NMRUFSKG1kLT5tX2Jhc2UubV9jb3B5KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvKiBTZXR0aW5nIG1vZHVsZXNfYnlfaW5kZXggdG8gTlVMTCBjb3VsZCBiZSBkYW5nZXJvdXMsIHNvIHdlCisgICAgICAgICAgIGNsZWFyIHRoZSBsaXN0IGluc3RlYWQuICovCisgICAgICAgIGlmIChQeUxpc3RfU2V0U2xpY2Uoc3RhdGUtPm1vZHVsZXNfYnlfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgUHlMaXN0X0dFVF9TSVpFKHN0YXRlLT5tb2R1bGVzX2J5X2luZGV4KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKSkKKyAgICAgICAgICAgIFB5RXJyX1dyaXRlVW5yYWlzYWJsZShzdGF0ZS0+bW9kdWxlc19ieV9pbmRleCk7CisgICAgfQorfQorCiB2b2lkCiBQeVRocmVhZFN0YXRlX0NsZWFyKFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSkKIHsKQEAgLTM0OSwzNyArMzgwLDIzIEBACiB0c3RhdGVfZGVsZXRlX2NvbW1vbihQeVRocmVhZFN0YXRlICp0c3RhdGUpCiB7CiAgICAgUHlJbnRlcnByZXRlclN0YXRlICppbnRlcnA7Ci0gICAgUHlUaHJlYWRTdGF0ZSAqKnA7Ci0gICAgUHlUaHJlYWRTdGF0ZSAqcHJldl9wID0gTlVMTDsKICAgICBpZiAodHN0YXRlID09IE5VTEwpCiAgICAgICAgIFB5X0ZhdGFsRXJyb3IoIlB5VGhyZWFkU3RhdGVfRGVsZXRlOiBOVUxMIHRzdGF0ZSIpOwogICAgIGludGVycCA9IHRzdGF0ZS0+aW50ZXJwOwogICAgIGlmIChpbnRlcnAgPT0gTlVMTCkKICAgICAgICAgUHlfRmF0YWxFcnJvcigiUHlUaHJlYWRTdGF0ZV9EZWxldGU6IE5VTEwgaW50ZXJwIik7CiAgICAgSEVBRF9MT0NLKCk7Ci0gICAgZm9yIChwID0gJmludGVycC0+dHN0YXRlX2hlYWQ7IDsgcCA9ICYoKnApLT5uZXh0KSB7Ci0gICAgICAgIGlmICgqcCA9PSBOVUxMKQotICAgICAgICAgICAgUHlfRmF0YWxFcnJvcigKLSAgICAgICAgICAgICAgICAiUHlUaHJlYWRTdGF0ZV9EZWxldGU6IGludmFsaWQgdHN0YXRlIik7Ci0gICAgICAgIGlmICgqcCA9PSB0c3RhdGUpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgLyogU2FuaXR5IGNoZWNrLiAgVGhlc2Ugc3RhdGVzIHNob3VsZCBuZXZlciBoYXBwZW4gYnV0IGlmCi0gICAgICAgICAqIHRoZXkgZG8gd2UgbXVzdCBhYm9ydC4gIE90aGVyd2lzZSB3ZSdsbCBlbmQgdXAgc3Bpbm5pbmcgaW4KLSAgICAgICAgICogaW4gYSB0aWdodCBsb29wIHdpdGggdGhlIGxvY2sgaGVsZC4gIEEgc2ltaWxhciBjaGVjayBpcyBkb25lCi0gICAgICAgICAqIGluIHRocmVhZC5jIGZpbmRfa2V5KCkuICAqLwotICAgICAgICBpZiAoKnAgPT0gcHJldl9wKQotICAgICAgICAgICAgUHlfRmF0YWxFcnJvcigKLSAgICAgICAgICAgICAgICAiUHlUaHJlYWRTdGF0ZV9EZWxldGU6IHNtYWxsIGNpcmN1bGFyIGxpc3QoISkiCi0gICAgICAgICAgICAgICAgIiBhbmQgdHN0YXRlIG5vdCBmb3VuZC4iKTsKLSAgICAgICAgcHJldl9wID0gKnA7Ci0gICAgICAgIGlmICgoKnApLT5uZXh0ID09IGludGVycC0+dHN0YXRlX2hlYWQpCi0gICAgICAgICAgICBQeV9GYXRhbEVycm9yKAotICAgICAgICAgICAgICAgICJQeVRocmVhZFN0YXRlX0RlbGV0ZTogY2lyY3VsYXIgbGlzdCghKSBhbmQiCi0gICAgICAgICAgICAgICAgIiB0c3RhdGUgbm90IGZvdW5kLiIpOwotICAgIH0KLSAgICAqcCA9IHRzdGF0ZS0+bmV4dDsKKyAgICBpZiAodHN0YXRlLT5wcmV2KQorICAgICAgICB0c3RhdGUtPnByZXYtPm5leHQgPSB0c3RhdGUtPm5leHQ7CisgICAgZWxzZQorICAgICAgICBpbnRlcnAtPnRzdGF0ZV9oZWFkID0gdHN0YXRlLT5uZXh0OworICAgIGlmICh0c3RhdGUtPm5leHQpCisgICAgICAgIHRzdGF0ZS0+bmV4dC0+cHJldiA9IHRzdGF0ZS0+cHJldjsKICAgICBIRUFEX1VOTE9DSygpOwotICAgIGZyZWUodHN0YXRlKTsKKyAgICBpZiAodHN0YXRlLT5vbl9kZWxldGUgIT0gTlVMTCkgeworICAgICAgICB0c3RhdGUtPm9uX2RlbGV0ZSh0c3RhdGUtPm9uX2RlbGV0ZV9kYXRhKTsKKyAgICB9CisgICAgUHlNZW1fUmF3RnJlZSh0c3RhdGUpOwogfQogCiAKQEAgLTQxNCw2ICs0MzEsNDMgQEAKICNlbmRpZiAvKiBXSVRIX1RIUkVBRCAqLwogCiAKKy8qCisgKiBEZWxldGUgYWxsIHRocmVhZCBzdGF0ZXMgZXhjZXB0IHRoZSBvbmUgcGFzc2VkIGFzIGFyZ3VtZW50LgorICogTm90ZSB0aGF0LCBpZiB0aGVyZSBpcyBhIGN1cnJlbnQgdGhyZWFkIHN0YXRlLCBpdCAqbXVzdCogYmUgdGhlIG9uZQorICogcGFzc2VkIGFzIGFyZ3VtZW50LiAgQWxzbywgdGhpcyB3b24ndCB0b3VjaCBhbnkgb3RoZXIgaW50ZXJwcmV0ZXJzCisgKiB0aGFuIHRoZSBjdXJyZW50IG9uZSwgc2luY2Ugd2UgZG9uJ3Qga25vdyB3aGljaCB0aHJlYWQgc3RhdGUgc2hvdWxkCisgKiBiZSBrZXB0IGluIHRob3NlIG90aGVyIGludGVycHJldGVyZXMuCisgKi8KK3ZvaWQKK19QeVRocmVhZFN0YXRlX0RlbGV0ZUV4Y2VwdChQeVRocmVhZFN0YXRlICp0c3RhdGUpCit7CisgICAgUHlJbnRlcnByZXRlclN0YXRlICppbnRlcnAgPSB0c3RhdGUtPmludGVycDsKKyAgICBQeVRocmVhZFN0YXRlICpwLCAqbmV4dCwgKmdhcmJhZ2U7CisgICAgSEVBRF9MT0NLKCk7CisgICAgLyogUmVtb3ZlIGFsbCB0aHJlYWQgc3RhdGVzLCBleGNlcHQgdHN0YXRlLCBmcm9tIHRoZSBsaW5rZWQgbGlzdCBvZgorICAgICAgIHRocmVhZCBzdGF0ZXMuICBUaGlzIHdpbGwgYWxsb3cgY2FsbGluZyBQeVRocmVhZFN0YXRlX0NsZWFyKCkKKyAgICAgICB3aXRob3V0IGhvbGRpbmcgdGhlIGxvY2suICovCisgICAgZ2FyYmFnZSA9IGludGVycC0+dHN0YXRlX2hlYWQ7CisgICAgaWYgKGdhcmJhZ2UgPT0gdHN0YXRlKQorICAgICAgICBnYXJiYWdlID0gdHN0YXRlLT5uZXh0OworICAgIGlmICh0c3RhdGUtPnByZXYpCisgICAgICAgIHRzdGF0ZS0+cHJldi0+bmV4dCA9IHRzdGF0ZS0+bmV4dDsKKyAgICBpZiAodHN0YXRlLT5uZXh0KQorICAgICAgICB0c3RhdGUtPm5leHQtPnByZXYgPSB0c3RhdGUtPnByZXY7CisgICAgdHN0YXRlLT5wcmV2ID0gdHN0YXRlLT5uZXh0ID0gTlVMTDsKKyAgICBpbnRlcnAtPnRzdGF0ZV9oZWFkID0gdHN0YXRlOworICAgIEhFQURfVU5MT0NLKCk7CisgICAgLyogQ2xlYXIgYW5kIGRlYWxsb2NhdGUgYWxsIHN0YWxlIHRocmVhZCBzdGF0ZXMuICBFdmVuIGlmIHRoaXMKKyAgICAgICBleGVjdXRlcyBQeXRob24gY29kZSwgd2Ugc2hvdWxkIGJlIHNhZmUgc2luY2UgaXQgZXhlY3V0ZXMKKyAgICAgICBpbiB0aGUgY3VycmVudCB0aHJlYWQsIG5vdCBvbmUgb2YgdGhlIHN0YWxlIHRocmVhZHMuICovCisgICAgZm9yIChwID0gZ2FyYmFnZTsgcDsgcCA9IG5leHQpIHsKKyAgICAgICAgbmV4dCA9IHAtPm5leHQ7CisgICAgICAgIFB5VGhyZWFkU3RhdGVfQ2xlYXIocCk7CisgICAgICAgIFB5TWVtX1Jhd0ZyZWUocCk7CisgICAgfQorfQorCisKIFB5VGhyZWFkU3RhdGUgKgogUHlUaHJlYWRTdGF0ZV9HZXQodm9pZCkKIHsKQEAgLTY3MSwxOCArNzI1LDE4IEBACiAKICAgICAgICBUaGUgb25seSBzaXR1YXRpb24gd2hlcmUgeW91IGNhbiBsZWdpdGltYXRlbHkgaGF2ZSBtb3JlIHRoYW4gb25lCiAgICAgICAgdGhyZWFkIHN0YXRlIGZvciBhbiBPUyBsZXZlbCB0aHJlYWQgaXMgd2hlbiB0aGVyZSBhcmUgbXVsdGlwbGUKLSAgICAgICBpbnRlcnByZXRlcnMsIHdoZW46CisgICAgICAgaW50ZXJwcmV0ZXJzLgogCi0gICAgICAgICAgIGEpIFlvdSBzaG91bGRuJ3QgcmVhbGx5IGJlIHVzaW5nIHRoZSBQeUdJTFN0YXRlXyBBUElzIGFueXdheSwKLSAgICAgICAgICBhbmQ6CisgICAgICAgWW91IHNob3VsZG4ndCByZWFsbHkgYmUgdXNpbmcgdGhlIFB5R0lMU3RhdGVfIEFQSXMgYW55d2F5IChzZWUgaXNzdWVzCisgICAgICAgIzEwOTE1IGFuZCAjMTU3NTEpLgogCi0gICAgICAgICAgIGIpIFRoZSBzbGlnaHRseSBvZGQgd2F5IFB5VGhyZWFkX3NldF9rZXlfdmFsdWUgd29ya3MgKHNlZQotICAgICAgICAgIGNvbW1lbnRzIGJ5IGl0cyBpbXBsZW1lbnRhdGlvbikgbWVhbnMgdGhhdCB0aGUgZmlyc3QgdGhyZWFkCi0gICAgICAgICAgc3RhdGUgY3JlYXRlZCBmb3IgdGhhdCBnaXZlbiBPUyBsZXZlbCB0aHJlYWQgd2lsbCAid2luIiwKLSAgICAgICAgICB3aGljaCBzZWVtcyByZWFzb25hYmxlIGJlaGF2aW91ci4KKyAgICAgICBUaGUgZmlyc3QgdGhyZWFkIHN0YXRlIGNyZWF0ZWQgZm9yIHRoYXQgZ2l2ZW4gT1MgbGV2ZWwgdGhyZWFkIHdpbGwKKyAgICAgICAid2luIiwgd2hpY2ggc2VlbXMgcmVhc29uYWJsZSBiZWhhdmlvdXIuCiAgICAgKi8KLSAgICBpZiAoUHlUaHJlYWRfc2V0X2tleV92YWx1ZShhdXRvVExTa2V5LCAodm9pZCAqKXRzdGF0ZSkgPCAwKQotICAgICAgICBQeV9GYXRhbEVycm9yKCJDb3VsZG4ndCBjcmVhdGUgYXV0b1RMU2tleSBtYXBwaW5nIik7CisgICAgaWYgKFB5VGhyZWFkX2dldF9rZXlfdmFsdWUoYXV0b1RMU2tleSkgPT0gTlVMTCkgeworICAgICAgICBpZiAoUHlUaHJlYWRfc2V0X2tleV92YWx1ZShhdXRvVExTa2V5LCAodm9pZCAqKXRzdGF0ZSkgPCAwKQorICAgICAgICAgICAgUHlfRmF0YWxFcnJvcigiQ291bGRuJ3QgY3JlYXRlIGF1dG9UTFNrZXkgbWFwcGluZyIpOworICAgIH0KIAogICAgIC8qIFB5R0lMU3RhdGVfUmVsZWFzZSBtdXN0IG5vdCB0cnkgdG8gZGVsZXRlIHRoaXMgdGhyZWFkIHN0YXRlLiAqLwogICAgIHRzdGF0ZS0+Z2lsc3RhdGVfY291bnRlciA9IDE7CkBAIC02OTcsNiArNzUxLDE1IEBACiAgICAgcmV0dXJuIChQeVRocmVhZFN0YXRlICopUHlUaHJlYWRfZ2V0X2tleV92YWx1ZShhdXRvVExTa2V5KTsKIH0KIAoraW50CitQeUdJTFN0YXRlX0NoZWNrKHZvaWQpCit7CisgICAgLyogY2FuJ3QgdXNlIFB5VGhyZWFkU3RhdGVfR2V0KCkgc2luY2UgaXQgd2lsbCBhc3NlcnQgdGhhdCBpdCBoYXMgdGhlIEdJTCAqLworICAgIFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSA9IChQeVRocmVhZFN0YXRlKilfUHlfYXRvbWljX2xvYWRfcmVsYXhlZCgKKyAgICAgICAgJl9QeVRocmVhZFN0YXRlX0N1cnJlbnQpOworICAgIHJldHVybiB0c3RhdGUgJiYgKHRzdGF0ZSA9PSBQeUdJTFN0YXRlX0dldFRoaXNUaHJlYWRTdGF0ZSgpKTsKK30KKwogUHlHSUxTdGF0ZV9TVEFURQogUHlHSUxTdGF0ZV9FbnN1cmUodm9pZCkKIHsKQEAgLTcxMCw2ICs3NzMsMTEgQEAKICAgICBhc3NlcnQoYXV0b0ludGVycHJldGVyU3RhdGUpOyAvKiBQeV9Jbml0aWFsaXplKCkgaGFzbid0IGJlZW4gY2FsbGVkISAqLwogICAgIHRjdXIgPSAoUHlUaHJlYWRTdGF0ZSAqKVB5VGhyZWFkX2dldF9rZXlfdmFsdWUoYXV0b1RMU2tleSk7CiAgICAgaWYgKHRjdXIgPT0gTlVMTCkgeworICAgICAgICAvKiBBdCBzdGFydHVwLCBQeXRob24gaGFzIG5vIGNvbmNyZXRlIEdJTC4gSWYgUHlHSUxTdGF0ZV9FbnN1cmUoKSBpcworICAgICAgICAgICBjYWxsZWQgZnJvbSBhIG5ldyB0aHJlYWQgZm9yIHRoZSBmaXJzdCB0aW1lLCB3ZSBuZWVkIHRoZSBjcmVhdGUgdGhlCisgICAgICAgICAgIEdJTC4gKi8KKyAgICAgICAgUHlFdmFsX0luaXRUaHJlYWRzKCk7CisKICAgICAgICAgLyogQ3JlYXRlIGEgbmV3IHRocmVhZCBzdGF0ZSBmb3IgdGhpcyB0aHJlYWQgKi8KICAgICAgICAgdGN1ciA9IFB5VGhyZWFkU3RhdGVfTmV3KGF1dG9JbnRlcnByZXRlclN0YXRlKTsKICAgICAgICAgaWYgKHRjdXIgPT0gTlVMTCkKZGlmZiAtLWdpdCBhL1B5dGhvbi9weXN0cnRvZC5jIGIvUHl0aG9uL3B5c3RydG9kLmMKaW5kZXggNGFiOGYwOC4uMjA5YzkwOCAxMDA2NDQKLS0tIGEvUHl0aG9uL3B5c3RydG9kLmMKKysrIGIvUHl0aG9uL3B5c3RydG9kLmMKQEAgLTE2NCw3ICsxNjQsNyBAQAogX1B5T1NfYXNjaWlfc3RydG9kKGNvbnN0IGNoYXIgKm5wdHIsIGNoYXIgKiplbmRwdHIpCiB7CiAgICAgY2hhciAqZmFpbF9wb3M7Ci0gICAgZG91YmxlIHZhbCA9IC0xLjA7CisgICAgZG91YmxlIHZhbDsKICAgICBzdHJ1Y3QgbGNvbnYgKmxvY2FsZV9kYXRhOwogICAgIGNvbnN0IGNoYXIgKmRlY2ltYWxfcG9pbnQ7CiAgICAgc2l6ZV90IGRlY2ltYWxfcG9pbnRfbGVuOwpAQCAtMzI1LDcgKzMyNSw3IEBACiAKICAgIE9uIG92ZXJmbG93IChlLmcuLCB3aGVuIHRyeWluZyB0byBjb252ZXJ0ICcxZTUwMCcgb24gYW4gSUVFRSA3NTQgbWFjaGluZSksCiAgICBpZiBvdmVyZmxvd19leGNlcHRpb24gaXMgTlVMTCB0aGVuICstUHlfSFVHRV9WQUwgaXMgcmV0dXJuZWQsIGFuZCBubyBQeXRob24KLSAgIGV4Y2VwdGlvbiBpcyByYWlzZWQuICBPdGhlcndpc2UsIG92ZXJmbG93X2V4Y2VwdGlvbiBzaG91bGQgcG9pbnQgdG8gYQorICAgZXhjZXB0aW9uIGlzIHJhaXNlZC4gIE90aGVyd2lzZSwgb3ZlcmZsb3dfZXhjZXB0aW9uIHNob3VsZCBwb2ludCB0bwogICAgYSBQeXRob24gZXhjZXB0aW9uLCB0aGlzIGV4Y2VwdGlvbiB3aWxsIGJlIHJhaXNlZCwgLTEuMCB3aWxsIGJlIHJldHVybmVkLAogICAgYW5kICplbmRwdHIgd2lsbCBwb2ludCBqdXN0IHBhc3QgdGhlIGVuZCBvZiB0aGUgY29udmVydGVkIHZhbHVlLgogCkBAIC05MjMsNyArOTIzLDcgQEAKIAogc3RhdGljIGNoYXIgKgogZm9ybWF0X2Zsb2F0X3Nob3J0KGRvdWJsZSBkLCBjaGFyIGZvcm1hdF9jb2RlLAotICAgICAgICAgICAgICAgICAgIGludCBtb2RlLCBQeV9zc2l6ZV90IHByZWNpc2lvbiwKKyAgICAgICAgICAgICAgICAgICBpbnQgbW9kZSwgaW50IHByZWNpc2lvbiwKICAgICAgICAgICAgICAgICAgICBpbnQgYWx3YXlzX2FkZF9zaWduLCBpbnQgYWRkX2RvdF8wX2lmX2ludGVnZXIsCiAgICAgICAgICAgICAgICAgICAgaW50IHVzZV9hbHRfZm9ybWF0dGluZywgY2hhciAqKmZsb2F0X3N0cmluZ3MsIGludCAqdHlwZSkKIHsKQEAgLTEwNTksNyArMTA1OSw3IEBACiAgICAgLyogaWYgdXNpbmcgYW4gZXhwb25lbnQsIHJlc2V0IGRlY2ltYWwgcG9pbnQgcG9zaXRpb24gdG8gMSBhbmQgYWRqdXN0CiAgICAgICAgZXhwb25lbnQgYWNjb3JkaW5nbHkuKi8KICAgICBpZiAodXNlX2V4cCkgewotICAgICAgICBleHAgPSBkZWNwdCAtIDE7CisgICAgICAgIGV4cCA9IChpbnQpZGVjcHQgLSAxOwogICAgICAgICBkZWNwdCA9IDE7CiAgICAgfQogICAgIC8qIGVuc3VyZSB2ZGlnaXRzX3N0YXJ0IDwgZGVjcHQgPD0gdmRpZ2l0c19lbmQsIG9yIHZkaWdpdHNfc3RhcnQgPApkaWZmIC0tZ2l0IGEvUHl0aG9uL3B5dGhvbnJ1bi5jIGIvUHl0aG9uL3B5dGhvbnJ1bi5jCmluZGV4IDkxZDU2YjcuLjA5NjdhNDcgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9weXRob25ydW4uYworKysgYi9QeXRob24vcHl0aG9ucnVuLmMKQEAgLTM1LDEyICszNSw0NiBAQAogI2RlZmluZSBQQVRIX01BWCBNQVhQQVRITEVOCiAjZW5kaWYKIAorI2lmZGVmIF9fZ251X2h1cmRfXworI2RlZmluZSBQQVRIX01BWCBNQVhQQVRITEVOCisjZW5kaWYKKworX1B5X0lERU5USUZJRVIoYnVpbHRpbnMpOworX1B5X0lERU5USUZJRVIoZXhjZXB0aG9vayk7CitfUHlfSURFTlRJRklFUihmbHVzaCk7CitfUHlfSURFTlRJRklFUihsYXN0X3RyYWNlYmFjayk7CitfUHlfSURFTlRJRklFUihsYXN0X3R5cGUpOworX1B5X0lERU5USUZJRVIobGFzdF92YWx1ZSk7CitfUHlfSURFTlRJRklFUihuYW1lKTsKK19QeV9JREVOVElGSUVSKHBzMSk7CitfUHlfSURFTlRJRklFUihwczIpOworX1B5X0lERU5USUZJRVIoc3RkaW4pOworX1B5X0lERU5USUZJRVIoc3Rkb3V0KTsKK19QeV9JREVOVElGSUVSKHN0ZGVycik7CitfUHlfc3RhdGljX3N0cmluZyhQeUlkX3N0cmluZywgIjxzdHJpbmc+Iik7CisKKyNpZmRlZiBQeV9SRUZfREVCVUcKK3N0YXRpYwordm9pZCBfcHJpbnRfdG90YWxfcmVmcyh2b2lkKSB7CisgICAgUHlPYmplY3QgKnhvcHRpb25zLCAqdmFsdWU7CisgICAgX1B5X0lERU5USUZJRVIoc2hvd3JlZmNvdW50KTsKKworICAgIHhvcHRpb25zID0gUHlTeXNfR2V0WE9wdGlvbnMoKTsKKyAgICBpZiAoeG9wdGlvbnMgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuOworICAgIHZhbHVlID0gX1B5RGljdF9HZXRJdGVtSWQoeG9wdGlvbnMsICZQeUlkX3Nob3dyZWZjb3VudCk7CisgICAgaWYgKHZhbHVlID09IFB5X1RydWUpCisgICAgICAgIGZwcmludGYoc3RkZXJyLAorICAgICAgICAgICAgICAgICJbJSIgUFlfRk9STUFUX1NJWkVfVCAiZCByZWZzLCAiCisgICAgICAgICAgICAgICAgIiUiIFBZX0ZPUk1BVF9TSVpFX1QgImQgYmxvY2tzXVxuIiwKKyAgICAgICAgICAgICAgICBfUHlfR2V0UmVmVG90YWwoKSwgX1B5X0dldEFsbG9jYXRlZEJsb2NrcygpKTsKK30KKyNlbmRpZgorCiAjaWZuZGVmIFB5X1JFRl9ERUJVRwogI2RlZmluZSBQUklOVF9UT1RBTF9SRUZTKCkKICNlbHNlIC8qIFB5X1JFRl9ERUJVRyAqLwotI2RlZmluZSBQUklOVF9UT1RBTF9SRUZTKCkgZnByaW50ZihzdGRlcnIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICJbJSIgUFlfRk9STUFUX1NJWkVfVCAiZCByZWZzXVxuIiwgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgIF9QeV9HZXRSZWZUb3RhbCgpKQorI2RlZmluZSBQUklOVF9UT1RBTF9SRUZTKCkgX3ByaW50X3RvdGFsX3JlZnMoKQogI2VuZGlmCiAKICNpZmRlZiBfX2NwbHVzcGx1cwpAQCAtNTcsNyArOTEsNyBAQAogc3RhdGljIHZvaWQgaW5pdHNpdGUodm9pZCk7CiBzdGF0aWMgaW50IGluaXRzdGRpbyh2b2lkKTsKIHN0YXRpYyB2b2lkIGZsdXNoX2lvKHZvaWQpOwotc3RhdGljIFB5T2JqZWN0ICpydW5fbW9kKG1vZF90eSwgY29uc3QgY2hhciAqLCBQeU9iamVjdCAqLCBQeU9iamVjdCAqLAorc3RhdGljIFB5T2JqZWN0ICpydW5fbW9kKG1vZF90eSwgUHlPYmplY3QgKiwgUHlPYmplY3QgKiwgUHlPYmplY3QgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlDb21waWxlckZsYWdzICosIFB5QXJlbmEgKik7CiBzdGF0aWMgUHlPYmplY3QgKnJ1bl9weWNfZmlsZShGSUxFICosIGNvbnN0IGNoYXIgKiwgUHlPYmplY3QgKiwgUHlPYmplY3QgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5Q29tcGlsZXJGbGFncyAqKTsKQEAgLTY4LDExICsxMDIsMTUgQEAKIHN0YXRpYyB2b2lkIHdhaXRfZm9yX3RocmVhZF9zaHV0ZG93bih2b2lkKTsKIHN0YXRpYyB2b2lkIGNhbGxfbGxfZXhpdGZ1bmNzKHZvaWQpOwogZXh0ZXJuIGludCBfUHlVbmljb2RlX0luaXQodm9pZCk7CitleHRlcm4gaW50IF9QeVN0cnVjdFNlcXVlbmNlX0luaXQodm9pZCk7CiBleHRlcm4gdm9pZCBfUHlVbmljb2RlX0Zpbmkodm9pZCk7CiBleHRlcm4gaW50IF9QeUxvbmdfSW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIFB5TG9uZ19GaW5pKHZvaWQpOwogZXh0ZXJuIGludCBfUHlGYXVsdGhhbmRsZXJfSW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIF9QeUZhdWx0aGFuZGxlcl9GaW5pKHZvaWQpOworZXh0ZXJuIHZvaWQgX1B5SGFzaF9GaW5pKHZvaWQpOworZXh0ZXJuIGludCBfUHlUcmFjZU1hbGxvY19Jbml0KHZvaWQpOworZXh0ZXJuIGludCBfUHlUcmFjZU1hbGxvY19GaW5pKHZvaWQpOwogCiAjaWZkZWYgV0lUSF9USFJFQUQKIGV4dGVybiB2b2lkIF9QeUdJTFN0YXRlX0luaXQoUHlJbnRlcnByZXRlclN0YXRlICosIFB5VGhyZWFkU3RhdGUgKik7CkBAIC05Myw2ICsxMzEsNyBAQAogaW50IFB5X05vVXNlclNpdGVEaXJlY3RvcnkgPSAwOyAvKiBmb3IgLXMgYW5kIHNpdGUucHkgKi8KIGludCBQeV9VbmJ1ZmZlcmVkU3RkaW9GbGFnID0gMDsgLyogVW5idWZmZXJlZCBiaW5hcnkgc3Rke2luLG91dCxlcnJ9ICovCiBpbnQgUHlfSGFzaFJhbmRvbWl6YXRpb25GbGFnID0gMDsgLyogZm9yIC1SIGFuZCBQWVRIT05IQVNIU0VFRCAqLworaW50IFB5X0lzb2xhdGVkRmxhZyA9IDA7IC8qIGZvciAtSSwgaXNvbGF0ZSBmcm9tIHVzZXIncyBlbnYgKi8KIAogUHlUaHJlYWRTdGF0ZSAqX1B5X0ZpbmFsaXppbmcgPSBOVUxMOwogCkBAIC0xMTgsNiArMTU3LDQ1IEBACiAgICAgcmV0dXJuIGluaXRpYWxpemVkOwogfQogCisvKiBIZWxwZXIgdG8gYWxsb3cgYW4gZW1iZWRkaW5nIGFwcGxpY2F0aW9uIHRvIG92ZXJyaWRlIHRoZSBub3JtYWwKKyAqIG1lY2hhbmlzbSB0aGF0IGF0dGVtcHRzIHRvIGZpZ3VyZSBvdXQgYW4gYXBwcm9wcmlhdGUgSU8gZW5jb2RpbmcKKyAqLworCitzdGF0aWMgY2hhciAqX1B5X1N0YW5kYXJkU3RyZWFtRW5jb2RpbmcgPSBOVUxMOworc3RhdGljIGNoYXIgKl9QeV9TdGFuZGFyZFN0cmVhbUVycm9ycyA9IE5VTEw7CisKK2ludAorUHlfU2V0U3RhbmRhcmRTdHJlYW1FbmNvZGluZyhjb25zdCBjaGFyICplbmNvZGluZywgY29uc3QgY2hhciAqZXJyb3JzKQoreworICAgIGlmIChQeV9Jc0luaXRpYWxpemVkKCkpIHsKKyAgICAgICAgLyogVGhpcyBpcyB0b28gbGF0ZSB0byBoYXZlIGFueSBlZmZlY3QgKi8KKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICAvKiBDYW4ndCBjYWxsIFB5RXJyX05vTWVtb3J5KCkgb24gZXJyb3JzLCBhcyBQeXRob24gaGFzbid0IGJlZW4KKyAgICAgKiBpbml0aWFsaXNlZCB5ZXQuCisgICAgICoKKyAgICAgKiBIb3dldmVyLCB0aGUgcmF3IG1lbW9yeSBhbGxvY2F0b3JzIGFyZSBpbml0aWFsaXNlZCBhcHByb3ByaWF0ZWx5CisgICAgICogYXMgQyBzdGF0aWMgdmFyaWFibGVzLCBzbyBfUHlNZW1fUmF3U3RyZHVwIGlzIE9LIGV2ZW4gdGhvdWdoCisgICAgICogUHlfSW5pdGlhbGl6ZSBoYXNuJ3QgYmVlbiBjYWxsZWQgeWV0LgorICAgICAqLworICAgIGlmIChlbmNvZGluZykgeworICAgICAgICBfUHlfU3RhbmRhcmRTdHJlYW1FbmNvZGluZyA9IF9QeU1lbV9SYXdTdHJkdXAoZW5jb2RpbmcpOworICAgICAgICBpZiAoIV9QeV9TdGFuZGFyZFN0cmVhbUVuY29kaW5nKSB7CisgICAgICAgICAgICByZXR1cm4gLTI7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGVycm9ycykgeworICAgICAgICBfUHlfU3RhbmRhcmRTdHJlYW1FcnJvcnMgPSBfUHlNZW1fUmF3U3RyZHVwKGVycm9ycyk7CisgICAgICAgIGlmICghX1B5X1N0YW5kYXJkU3RyZWFtRXJyb3JzKSB7CisgICAgICAgICAgICBpZiAoX1B5X1N0YW5kYXJkU3RyZWFtRW5jb2RpbmcpIHsKKyAgICAgICAgICAgICAgICBQeU1lbV9SYXdGcmVlKF9QeV9TdGFuZGFyZFN0cmVhbUVuY29kaW5nKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiAtMzsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gMDsKK30KKwogLyogR2xvYmFsIGluaXRpYWxpemF0aW9ucy4gIENhbiBiZSB1bmRvbmUgYnkgUHlfRmluYWxpemUoKS4gIERvbid0CiAgICBjYWxsIHRoaXMgdHdpY2Ugd2l0aG91dCBhbiBpbnRlcnZlbmluZyBQeV9GaW5hbGl6ZSgpIGNhbGwuICBXaGVuCiAgICBpbml0aWFsaXphdGlvbnMgZmFpbCwgYSBmYXRhbCBlcnJvciBpcyBpc3N1ZWQgYW5kIHRoZSBmdW5jdGlvbiBkb2VzCkBAIC0xNDYsNyArMjI0LDYgQEAKIHsKICAgICBjaGFyICpuYW1lX3V0ZjgsICpuYW1lX3N0cjsKICAgICBQeU9iamVjdCAqY29kZWMsICpuYW1lID0gTlVMTDsKLSAgICBfUHlfSURFTlRJRklFUihuYW1lKTsKIAogICAgIGNvZGVjID0gX1B5Q29kZWNfTG9va3VwKGVuY29kaW5nKTsKICAgICBpZiAoIWNvZGVjKQpAQCAtMTYwLDcgKzIzNyw3IEBACiAgICAgbmFtZV91dGY4ID0gX1B5VW5pY29kZV9Bc1N0cmluZyhuYW1lKTsKICAgICBpZiAobmFtZV91dGY4ID09IE5VTEwpCiAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgbmFtZV9zdHIgPSBzdHJkdXAobmFtZV91dGY4KTsKKyAgICBuYW1lX3N0ciA9IF9QeU1lbV9SYXdTdHJkdXAobmFtZV91dGY4KTsKICAgICBQeV9ERUNSRUYobmFtZSk7CiAgICAgaWYgKG5hbWVfc3RyID09IE5VTEwpIHsKICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKQEAgLTMxMyw3ICszOTAsOCBAQAogICAgIGlmICghUHlCeXRlQXJyYXlfSW5pdCgpKQogICAgICAgICBQeV9GYXRhbEVycm9yKCJQeV9Jbml0aWFsaXplOiBjYW4ndCBpbml0IGJ5dGVhcnJheSIpOwogCi0gICAgX1B5RmxvYXRfSW5pdCgpOworICAgIGlmICghX1B5RmxvYXRfSW5pdCgpKQorICAgICAgICBQeV9GYXRhbEVycm9yKCJQeV9Jbml0aWFsaXplOiBjYW4ndCBpbml0IGZsb2F0Iik7CiAKICAgICBpbnRlcnAtPm1vZHVsZXMgPSBQeURpY3RfTmV3KCk7CiAgICAgaWYgKGludGVycC0+bW9kdWxlcyA9PSBOVUxMKQpAQCAtMzIyLDYgKzQwMCw4IEBACiAgICAgLyogSW5pdCBVbmljb2RlIGltcGxlbWVudGF0aW9uOyByZWxpZXMgb24gdGhlIGNvZGVjIHJlZ2lzdHJ5ICovCiAgICAgaWYgKF9QeVVuaWNvZGVfSW5pdCgpIDwgMCkKICAgICAgICAgUHlfRmF0YWxFcnJvcigiUHlfSW5pdGlhbGl6ZTogY2FuJ3QgaW5pdGlhbGl6ZSB1bmljb2RlIik7CisgICAgaWYgKF9QeVN0cnVjdFNlcXVlbmNlX0luaXQoKSA8IDApCisgICAgICAgIFB5X0ZhdGFsRXJyb3IoIlB5X0luaXRpYWxpemU6IGNhbid0IGluaXRpYWxpemUgc3RydWN0c2VxIik7CiAKICAgICBiaW1vZCA9IF9QeUJ1aWx0aW5fSW5pdCgpOwogICAgIGlmIChiaW1vZCA9PSBOVUxMKQpAQCAtMzUyLDcgKzQzMiw3IEBACiAgICAgcHN0ZGVyciA9IFB5RmlsZV9OZXdTdGRQcmludGVyKGZpbGVubyhzdGRlcnIpKTsKICAgICBpZiAocHN0ZGVyciA9PSBOVUxMKQogICAgICAgICBQeV9GYXRhbEVycm9yKCJQeV9Jbml0aWFsaXplOiBjYW4ndCBzZXQgcHJlbGltaW5hcnkgc3RkZXJyIik7Ci0gICAgUHlTeXNfU2V0T2JqZWN0KCJzdGRlcnIiLCBwc3RkZXJyKTsKKyAgICBfUHlTeXNfU2V0T2JqZWN0SWQoJlB5SWRfc3RkZXJyLCBwc3RkZXJyKTsKICAgICBQeVN5c19TZXRPYmplY3QoIl9fc3RkZXJyX18iLCBwc3RkZXJyKTsKICAgICBQeV9ERUNSRUYocHN0ZGVycik7CiAKQEAgLTM4MCw2ICs0NjAsOSBAQAogICAgIGlmIChpbnN0YWxsX3NpZ3MpCiAgICAgICAgIGluaXRzaWdzKCk7IC8qIFNpZ25hbCBoYW5kbGluZyBzdHVmZiwgaW5jbHVkaW5nIGluaXRpbnRyKCkgKi8KIAorICAgIGlmIChfUHlUcmFjZU1hbGxvY19Jbml0KCkgPCAwKQorICAgICAgICBQeV9GYXRhbEVycm9yKCJQeV9Jbml0aWFsaXplOiBjYW4ndCBpbml0aWFsaXplIHRyYWNlbWFsbG9jIik7CisKICAgICBpbml0bWFpbihpbnRlcnApOyAvKiBNb2R1bGUgX19tYWluX18gKi8KICAgICBpZiAoaW5pdHN0ZGlvKCkgPCAwKQogICAgICAgICBQeV9GYXRhbEVycm9yKApAQCAtNDM3LDEwICs1MjAsOSBAQAogc3RhdGljIHZvaWQKIGZsdXNoX3N0ZF9maWxlcyh2b2lkKQogewotICAgIFB5T2JqZWN0ICpmb3V0ID0gUHlTeXNfR2V0T2JqZWN0KCJzdGRvdXQiKTsKLSAgICBQeU9iamVjdCAqZmVyciA9IFB5U3lzX0dldE9iamVjdCgic3RkZXJyIik7CisgICAgUHlPYmplY3QgKmZvdXQgPSBfUHlTeXNfR2V0T2JqZWN0SWQoJlB5SWRfc3Rkb3V0KTsKKyAgICBQeU9iamVjdCAqZmVyciA9IF9QeVN5c19HZXRPYmplY3RJZCgmUHlJZF9zdGRlcnIpOwogICAgIFB5T2JqZWN0ICp0bXA7Ci0gICAgX1B5X0lERU5USUZJRVIoZmx1c2gpOwogCiAgICAgaWYgKGZvdXQgIT0gTlVMTCAmJiBmb3V0ICE9IFB5X05vbmUgJiYgIWZpbGVfaXNfY2xvc2VkKGZvdXQpKSB7CiAgICAgICAgIHRtcCA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoZm91dCwgJlB5SWRfZmx1c2gsICIiKTsKQEAgLTUwNCw3ICs1ODYsNyBAQAogICAgIF9QeV9GaW5hbGl6aW5nID0gdHN0YXRlOwogICAgIGluaXRpYWxpemVkID0gMDsKIAotICAgIC8qIEZsdXNoIHN0ZG91dCtzdGRlcnIgKi8KKyAgICAvKiBGbHVzaCBzeXMuc3Rkb3V0IGFuZCBzeXMuc3RkZXJyICovCiAgICAgZmx1c2hfc3RkX2ZpbGVzKCk7CiAKICAgICAvKiBEaXNhYmxlIHNpZ25hbCBoYW5kbGluZyAqLwpAQCAtNTMwLDE0ICs2MTIsMTAgQEAKICAgICB3aGlsZSAoUHlHQ19Db2xsZWN0KCkgPiAwKQogICAgICAgICAvKiBub3RoaW5nICovOwogI2VuZGlmCi0gICAgLyogV2UgcnVuIHRoaXMgd2hpbGUgbW9zdCBpbnRlcnByZXRlciBzdGF0ZSBpcyBzdGlsbCBhbGl2ZSwgc28gdGhhdAotICAgICAgIGRlYnVnIGluZm9ybWF0aW9uIGNhbiBiZSBwcmludGVkIG91dCAqLwotICAgIF9QeUdDX0ZpbmkoKTsKLQogICAgIC8qIERlc3Ryb3kgYWxsIG1vZHVsZXMgKi8KICAgICBQeUltcG9ydF9DbGVhbnVwKCk7CiAKLSAgICAvKiBGbHVzaCBzdGRvdXQrc3RkZXJyIChhZ2FpbiwgaW4gY2FzZSBtb3JlIHdhcyBwcmludGVkKSAqLworICAgIC8qIEZsdXNoIHN5cy5zdGRvdXQgYW5kIHN5cy5zdGRlcnIgKGFnYWluLCBpbiBjYXNlIG1vcmUgd2FzIHByaW50ZWQpICovCiAgICAgZmx1c2hfc3RkX2ZpbGVzKCk7CiAKICAgICAvKiBDb2xsZWN0IGZpbmFsIGdhcmJhZ2UuICBUaGlzIGRpc3Bvc2VzIG9mIGN5Y2xlcyBjcmVhdGVkIGJ5CkBAIC01NTksNiArNjM3LDEwIEBACiAgICAgUHlHQ19Db2xsZWN0KCk7CiAjZW5kaWYKIAorICAgIC8qIERpc2FibGUgdHJhY2VtYWxsb2MgYWZ0ZXIgYWxsIFB5dGhvbiBvYmplY3RzIGhhdmUgYmVlbiBkZXN0cm95ZWQsCisgICAgICAgc28gaXQgaXMgcG9zc2libGUgdG8gdXNlIHRyYWNlbWFsbG9jIGluIG9iamVjdHMgZGVzdHJ1Y3Rvci4gKi8KKyAgICBfUHlUcmFjZU1hbGxvY19GaW5pKCk7CisKICAgICAvKiBEZXN0cm95IHRoZSBkYXRhYmFzZSB1c2VkIGJ5IF9QeUltcG9ydF97Rml4dXAsRmluZH1FeHRlbnNpb24gKi8KICAgICBfUHlJbXBvcnRfRmluaSgpOwogCkBAIC01NzIsNiArNjU0LDggQEAKICNpZmRlZiBDT1VOVF9BTExPQ1MKICAgICBkdW1wX2NvdW50cyhzdGRvdXQpOwogI2VuZGlmCisgICAgLyogZHVtcCBoYXNoIHN0YXRzICovCisgICAgX1B5SGFzaF9GaW5pKCk7CiAKICAgICBQUklOVF9UT1RBTF9SRUZTKCk7CiAKQEAgLTU5NiwxMSArNjgwLDYgQEAKIAogICAgIF9QeUV4Y19GaW5pKCk7CiAKLSAgICAvKiBDbGVhbnVwIGF1dG8tdGhyZWFkLXN0YXRlICovCi0jaWZkZWYgV0lUSF9USFJFQUQKLSAgICBfUHlHSUxTdGF0ZV9GaW5pKCk7Ci0jZW5kaWYgLyogV0lUSF9USFJFQUQgKi8KLQogICAgIC8qIFN1bmRyeSBmaW5hbGl6ZXJzICovCiAgICAgUHlNZXRob2RfRmluaSgpOwogICAgIFB5RnJhbWVfRmluaSgpOwpAQCAtNjE0LDE3ICs2OTMsMTUgQEAKICAgICBQeUZsb2F0X0ZpbmkoKTsKICAgICBQeURpY3RfRmluaSgpOwogICAgIFB5U2xpY2VfRmluaSgpOworICAgIF9QeUdDX0ZpbmkoKTsKKyAgICBfUHlSYW5kb21fRmluaSgpOwogCiAgICAgLyogQ2xlYW51cCBVbmljb2RlIGltcGxlbWVudGF0aW9uICovCiAgICAgX1B5VW5pY29kZV9GaW5pKCk7CiAKLSAgICAvKiBEZWxldGUgY3VycmVudCB0aHJlYWQuIEFmdGVyIHRoaXMsIG1hbnkgQyBBUEkgY2FsbHMgYmVjb21lIGNyYXNoeS4gKi8KLSAgICBQeVRocmVhZFN0YXRlX1N3YXAoTlVMTCk7Ci0gICAgUHlJbnRlcnByZXRlclN0YXRlX0RlbGV0ZShpbnRlcnApOwotCiAgICAgLyogcmVzZXQgZmlsZSBzeXN0ZW0gZGVmYXVsdCBlbmNvZGluZyAqLwogICAgIGlmICghUHlfSGFzRmlsZVN5c3RlbURlZmF1bHRFbmNvZGluZyAmJiBQeV9GaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nKSB7Ci0gICAgICAgIGZyZWUoKGNoYXIqKVB5X0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2RpbmcpOworICAgICAgICBQeU1lbV9SYXdGcmVlKChjaGFyKilQeV9GaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nKTsKICAgICAgICAgUHlfRmlsZVN5c3RlbURlZmF1bHRFbmNvZGluZyA9IE5VTEw7CiAgICAgfQogCkBAIC02MzYsNiArNzEzLDE1IEBACiAKICAgICBQeUdyYW1tYXJfUmVtb3ZlQWNjZWxlcmF0b3JzKCZfUHlQYXJzZXJfR3JhbW1hcik7CiAKKyAgICAvKiBDbGVhbnVwIGF1dG8tdGhyZWFkLXN0YXRlICovCisjaWZkZWYgV0lUSF9USFJFQUQKKyAgICBfUHlHSUxTdGF0ZV9GaW5pKCk7CisjZW5kaWYgLyogV0lUSF9USFJFQUQgKi8KKworICAgIC8qIERlbGV0ZSBjdXJyZW50IHRocmVhZC4gQWZ0ZXIgdGhpcywgbWFueSBDIEFQSSBjYWxscyBiZWNvbWUgY3Jhc2h5LiAqLworICAgIFB5VGhyZWFkU3RhdGVfU3dhcChOVUxMKTsKKyAgICBQeUludGVycHJldGVyU3RhdGVfRGVsZXRlKGludGVycCk7CisKICNpZmRlZiBQeV9UUkFDRV9SRUZTCiAgICAgLyogRGlzcGxheSBhZGRyZXNzZXMgKCYgcmVmY250cykgb2YgYWxsIG9iamVjdHMgc3RpbGwgYWxpdmUuCiAgICAgICogQW4gYWRkcmVzcyBjYW4gYmUgdXNlZCB0byBmaW5kIHRoZSByZXByIG9mIHRoZSBvYmplY3QsIHByaW50ZWQKQEAgLTcxOCw3ICs4MDQsNyBAQAogICAgICAgICBwc3RkZXJyID0gUHlGaWxlX05ld1N0ZFByaW50ZXIoZmlsZW5vKHN0ZGVycikpOwogICAgICAgICBpZiAocHN0ZGVyciA9PSBOVUxMKQogICAgICAgICAgICAgUHlfRmF0YWxFcnJvcigiUHlfSW5pdGlhbGl6ZTogY2FuJ3Qgc2V0IHByZWxpbWluYXJ5IHN0ZGVyciIpOwotICAgICAgICBQeVN5c19TZXRPYmplY3QoInN0ZGVyciIsIHBzdGRlcnIpOworICAgICAgICBfUHlTeXNfU2V0T2JqZWN0SWQoJlB5SWRfc3RkZXJyLCBwc3RkZXJyKTsKICAgICAgICAgUHlTeXNfU2V0T2JqZWN0KCJfX3N0ZGVycl9fIiwgcHN0ZGVycik7CiAgICAgICAgIFB5X0RFQ1JFRihwc3RkZXJyKTsKIApAQCAtNzczLDYgKzg1OSw5IEBACiAgICAgICAgIFB5X0ZhdGFsRXJyb3IoIlB5X0VuZEludGVycHJldGVyOiB0aHJlYWQgaXMgbm90IGN1cnJlbnQiKTsKICAgICBpZiAodHN0YXRlLT5mcmFtZSAhPSBOVUxMKQogICAgICAgICBQeV9GYXRhbEVycm9yKCJQeV9FbmRJbnRlcnByZXRlcjogdGhyZWFkIHN0aWxsIGhhcyBhIGZyYW1lIik7CisKKyAgICB3YWl0X2Zvcl90aHJlYWRfc2h1dGRvd24oKTsKKwogICAgIGlmICh0c3RhdGUgIT0gaW50ZXJwLT50c3RhdGVfaGVhZCB8fCB0c3RhdGUtPm5leHQgIT0gTlVMTCkKICAgICAgICAgUHlfRmF0YWxFcnJvcigiUHlfRW5kSW50ZXJwcmV0ZXI6IG5vdCB0aGUgbGFzdCB0aHJlYWQiKTsKIApAQCAtODAyLDcgKzg5MSw3IEBACiB9CiAKIHN0YXRpYyB3Y2hhcl90ICpkZWZhdWx0X2hvbWUgPSBOVUxMOwotc3RhdGljIHdjaGFyX3QgZW52X2hvbWVbUEFUSF9NQVgrMV07CitzdGF0aWMgd2NoYXJfdCBlbnZfaG9tZVtNQVhQQVRITEVOKzFdOwogCiB2b2lkCiBQeV9TZXRQeXRob25Ib21lKHdjaGFyX3QgKmhvbWUpCkBAIC04MzIsNyArOTIxLDcgQEAKIHN0YXRpYyB2b2lkCiBpbml0bWFpbihQeUludGVycHJldGVyU3RhdGUgKmludGVycCkKIHsKLSAgICBQeU9iamVjdCAqbSwgKmQ7CisgICAgUHlPYmplY3QgKm0sICpkLCAqbG9hZGVyOwogICAgIG0gPSBQeUltcG9ydF9BZGRNb2R1bGUoIl9fbWFpbl9fIik7CiAgICAgaWYgKG0gPT0gTlVMTCkKICAgICAgICAgUHlfRmF0YWxFcnJvcigiY2FuJ3QgY3JlYXRlIF9fbWFpbl9fIG1vZHVsZSIpOwpAQCAtODUzLDcgKzk0Miw4IEBACiAgICAgICogYmUgc2V0IGlmIF9fbWFpbl9fIGdldHMgZnVydGhlciBpbml0aWFsaXplZCBsYXRlciBpbiB0aGUgc3RhcnR1cAogICAgICAqIHByb2Nlc3MuCiAgICAgICovCi0gICAgaWYgKFB5RGljdF9HZXRJdGVtU3RyaW5nKGQsICJfX2xvYWRlcl9fIikgPT0gTlVMTCkgeworICAgIGxvYWRlciA9IFB5RGljdF9HZXRJdGVtU3RyaW5nKGQsICJfX2xvYWRlcl9fIik7CisgICAgaWYgKGxvYWRlciA9PSBOVUxMIHx8IGxvYWRlciA9PSBQeV9Ob25lKSB7CiAgICAgICAgIFB5T2JqZWN0ICpsb2FkZXIgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKGludGVycC0+aW1wb3J0bGliLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQnVpbHRpbkltcG9ydGVyIik7CiAgICAgICAgIGlmIChsb2FkZXIgPT0gTlVMTCkgewpAQCAtOTAzLDYgKzk5Myw3IEBACiAgICAgUHlPYmplY3QgKm07CiAgICAgbSA9IFB5SW1wb3J0X0ltcG9ydE1vZHVsZSgic2l0ZSIpOwogICAgIGlmIChtID09IE5VTEwpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gaW1wb3J0IHRoZSBzaXRlIG1vZHVsZVxuIik7CiAgICAgICAgIFB5RXJyX1ByaW50KCk7CiAgICAgICAgIFB5X0ZpbmFsaXplKCk7CiAgICAgICAgIGV4aXQoMSk7CkBAIC05MTIsNiArMTAwMywyMSBAQAogICAgIH0KIH0KIAorLyogQ2hlY2sgaWYgYSBmaWxlIGRlc2NyaXB0b3IgaXMgdmFsaWQgb3Igbm90LgorICAgUmV0dXJuIDAgaWYgdGhlIGZpbGUgZGVzY3JpcHRvciBpcyBpbnZhbGlkLCByZXR1cm4gbm9uLXplcm8gb3RoZXJ3aXNlLiAqLworc3RhdGljIGludAoraXNfdmFsaWRfZmQoaW50IGZkKQoreworICAgIGludCBmZDI7CisgICAgaWYgKGZkIDwgMCB8fCAhX1B5VmVyaWZ5X2ZkKGZkKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgZmQyID0gZHVwKGZkKTsKKyAgICBpZiAoZmQyID49IDApCisgICAgICAgIGNsb3NlKGZkMik7CisgICAgcmV0dXJuIGZkMiA+PSAwOworfQorCisvKiByZXR1cm5zIFB5X05vbmUgaWYgdGhlIGZkIGlzIG5vdCB2YWxpZCAqLwogc3RhdGljIFB5T2JqZWN0KgogY3JlYXRlX3N0ZGlvKFB5T2JqZWN0KiBpbywKICAgICBpbnQgZmQsIGludCB3cml0ZV9tb2RlLCBjaGFyKiBuYW1lLApAQCAtOTI1LDkgKzEwMzEsMTEgQEAKICAgICBfUHlfSURFTlRJRklFUihvcGVuKTsKICAgICBfUHlfSURFTlRJRklFUihpc2F0dHkpOwogICAgIF9QeV9JREVOVElGSUVSKFRleHRJT1dyYXBwZXIpOwotICAgIF9QeV9JREVOVElGSUVSKG5hbWUpOwogICAgIF9QeV9JREVOVElGSUVSKG1vZGUpOwogCisgICAgaWYgKCFpc192YWxpZF9mZChmZCkpCisgICAgICAgIFB5X1JFVFVSTl9OT05FOworCiAgICAgLyogc3RkaW4gaXMgYWx3YXlzIG9wZW5lZCBpbiBidWZmZXJlZCBtb2RlLCBmaXJzdCBiZWNhdXNlIGl0IHNob3VsZG4ndAogICAgICAgIG1ha2UgYSBkaWZmZXJlbmNlIGluIGNvbW1vbiB1c2UgY2FzZXMsIHNlY29uZCBiZWNhdXNlIFRleHRJT1dyYXBwZXIKICAgICAgICBkZXBlbmRzIG9uIHRoZSBwcmVzZW5jZSBvZiBhIHJlYWQxKCkgbWV0aG9kIHdoaWNoIG9ubHkgZXhpc3RzIG9uCkBAIC0xMDA5LDIwICsxMTE3LDE1IEBACiAgICAgUHlfWERFQ1JFRihzdHJlYW0pOwogICAgIFB5X1hERUNSRUYodGV4dCk7CiAgICAgUHlfWERFQ1JFRihyYXcpOwotICAgIHJldHVybiBOVUxMOwotfQogCi1zdGF0aWMgaW50Ci1pc192YWxpZF9mZChpbnQgZmQpCi17Ci0gICAgaW50IGR1bW15X2ZkOwotICAgIGlmIChmZCA8IDAgfHwgIV9QeVZlcmlmeV9mZChmZCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIGR1bW15X2ZkID0gZHVwKGZkKTsKLSAgICBpZiAoZHVtbXlfZmQgPCAwKQotICAgICAgICByZXR1cm4gMDsKLSAgICBjbG9zZShkdW1teV9mZCk7Ci0gICAgcmV0dXJuIDE7CisgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfT1NFcnJvcikgJiYgIWlzX3ZhbGlkX2ZkKGZkKSkgeworICAgICAgICAvKiBJc3N1ZSAjMjQ4OTE6IHRoZSBmaWxlIGRlc2NyaXB0b3Igd2FzIGNsb3NlZCBhZnRlciB0aGUgZmlyc3QKKyAgICAgICAgICAgaXNfdmFsaWRfZmQoKSBjaGVjayB3YXMgY2FsbGVkLiBJZ25vcmUgdGhlIE9TRXJyb3IgYW5kIHNldCB0aGUKKyAgICAgICAgICAgc3RyZWFtIHRvIE5vbmUuICovCisgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgICAgIFB5X1JFVFVSTl9OT05FOworICAgIH0KKyAgICByZXR1cm4gTlVMTDsKIH0KIAogLyogSW5pdGlhbGl6ZSBzeXMuc3RkaW4sIHN0ZG91dCwgc3RkZXJyIGFuZCBidWlsdGlucy5vcGVuICovCkBAIC0xMDM1LDcgKzExMzgsNyBAQAogICAgIFB5T2JqZWN0ICpzdGQgPSBOVUxMOwogICAgIGludCBzdGF0dXMgPSAwLCBmZDsKICAgICBQeU9iamVjdCAqIGVuY29kaW5nX2F0dHI7Ci0gICAgY2hhciAqZW5jb2RpbmcgPSBOVUxMLCAqZXJyb3JzOworICAgIGNoYXIgKnB5dGhvbmlvZW5jb2RpbmcgPSBOVUxMLCAqZW5jb2RpbmcsICplcnJvcnM7CiAKICAgICAvKiBIYWNrIHRvIGF2b2lkIGEgbmFzdHkgcmVjdXJzaW9uIGlzc3VlIHdoZW4gUHl0aG9uIGlzIGludm9rZWQKICAgICAgICBpbiB2ZXJib3NlIG1vZGU6IHByZS1pbXBvcnQgdGhlIExhdGluLTEgYW5kIFVURi04IGNvZGVjcyAqLwpAQCAtMTA2NywxNCArMTE3MCwyOCBAQAogICAgIH0KICAgICBQeV9ERUNSRUYod3JhcHBlcik7CiAKLSAgICBlbmNvZGluZyA9IFB5X0dFVEVOVigiUFlUSE9OSU9FTkNPRElORyIpOwotICAgIGVycm9ycyA9IE5VTEw7Ci0gICAgaWYgKGVuY29kaW5nKSB7Ci0gICAgICAgIGVuY29kaW5nID0gc3RyZHVwKGVuY29kaW5nKTsKLSAgICAgICAgZXJyb3JzID0gc3RyY2hyKGVuY29kaW5nLCAnOicpOwotICAgICAgICBpZiAoZXJyb3JzKSB7Ci0gICAgICAgICAgICAqZXJyb3JzID0gJ1wwJzsKLSAgICAgICAgICAgIGVycm9ycysrOworICAgIGVuY29kaW5nID0gX1B5X1N0YW5kYXJkU3RyZWFtRW5jb2Rpbmc7CisgICAgZXJyb3JzID0gX1B5X1N0YW5kYXJkU3RyZWFtRXJyb3JzOworICAgIGlmICghZW5jb2RpbmcgfHwgIWVycm9ycykgeworICAgICAgICBweXRob25pb2VuY29kaW5nID0gUHlfR0VURU5WKCJQWVRIT05JT0VOQ09ESU5HIik7CisgICAgICAgIGlmIChweXRob25pb2VuY29kaW5nKSB7CisgICAgICAgICAgICBjaGFyICplcnI7CisgICAgICAgICAgICBweXRob25pb2VuY29kaW5nID0gX1B5TWVtX1N0cmR1cChweXRob25pb2VuY29kaW5nKTsKKyAgICAgICAgICAgIGlmIChweXRob25pb2VuY29kaW5nID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlcnIgPSBzdHJjaHIocHl0aG9uaW9lbmNvZGluZywgJzonKTsKKyAgICAgICAgICAgIGlmIChlcnIpIHsKKyAgICAgICAgICAgICAgICAqZXJyID0gJ1wwJzsKKyAgICAgICAgICAgICAgICBlcnIrKzsKKyAgICAgICAgICAgICAgICBpZiAoKmVyciAmJiAhZXJyb3JzKSB7CisgICAgICAgICAgICAgICAgICAgIGVycm9ycyA9IGVycjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoKnB5dGhvbmlvZW5jb2RpbmcgJiYgIWVuY29kaW5nKSB7CisgICAgICAgICAgICAgICAgZW5jb2RpbmcgPSBweXRob25pb2VuY29kaW5nOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCkBAIC0xMDg0LDYzICsxMjAxLDUxIEBACiAgICAgICogYW5kIGZpbGVubygpIG1heSBwb2ludCB0byBhbiBpbnZhbGlkIGZpbGUgZGVzY3JpcHRvci4gRm9yIGV4YW1wbGUKICAgICAgKiBHVUkgYXBwcyBkb24ndCBoYXZlIHZhbGlkIHN0YW5kYXJkIHN0cmVhbXMgYnkgZGVmYXVsdC4KICAgICAgKi8KLSAgICBpZiAoIWlzX3ZhbGlkX2ZkKGZkKSkgewotICAgICAgICBzdGQgPSBQeV9Ob25lOwotICAgICAgICBQeV9JTkNSRUYoc3RkKTsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIHN0ZCA9IGNyZWF0ZV9zdGRpbyhpb21vZCwgZmQsIDAsICI8c3RkaW4+IiwgZW5jb2RpbmcsIGVycm9ycyk7Ci0gICAgICAgIGlmIChzdGQgPT0gTlVMTCkKLSAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgfSAvKiBpZiAoZmQgPCAwKSAqLworICAgIHN0ZCA9IGNyZWF0ZV9zdGRpbyhpb21vZCwgZmQsIDAsICI8c3RkaW4+IiwgZW5jb2RpbmcsIGVycm9ycyk7CisgICAgaWYgKHN0ZCA9PSBOVUxMKQorICAgICAgICBnb3RvIGVycm9yOwogICAgIFB5U3lzX1NldE9iamVjdCgiX19zdGRpbl9fIiwgc3RkKTsKLSAgICBQeVN5c19TZXRPYmplY3QoInN0ZGluIiwgc3RkKTsKKyAgICBfUHlTeXNfU2V0T2JqZWN0SWQoJlB5SWRfc3RkaW4sIHN0ZCk7CiAgICAgUHlfREVDUkVGKHN0ZCk7CiAKICAgICAvKiBTZXQgc3lzLnN0ZG91dCAqLwogICAgIGZkID0gZmlsZW5vKHN0ZG91dCk7Ci0gICAgaWYgKCFpc192YWxpZF9mZChmZCkpIHsKLSAgICAgICAgc3RkID0gUHlfTm9uZTsKLSAgICAgICAgUHlfSU5DUkVGKHN0ZCk7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICBzdGQgPSBjcmVhdGVfc3RkaW8oaW9tb2QsIGZkLCAxLCAiPHN0ZG91dD4iLCBlbmNvZGluZywgZXJyb3JzKTsKLSAgICAgICAgaWYgKHN0ZCA9PSBOVUxMKQotICAgICAgICAgICAgZ290byBlcnJvcjsKLSAgICB9IC8qIGlmIChmZCA8IDApICovCisgICAgc3RkID0gY3JlYXRlX3N0ZGlvKGlvbW9kLCBmZCwgMSwgIjxzdGRvdXQ+IiwgZW5jb2RpbmcsIGVycm9ycyk7CisgICAgaWYgKHN0ZCA9PSBOVUxMKQorICAgICAgICBnb3RvIGVycm9yOwogICAgIFB5U3lzX1NldE9iamVjdCgiX19zdGRvdXRfXyIsIHN0ZCk7Ci0gICAgUHlTeXNfU2V0T2JqZWN0KCJzdGRvdXQiLCBzdGQpOworICAgIF9QeVN5c19TZXRPYmplY3RJZCgmUHlJZF9zdGRvdXQsIHN0ZCk7CiAgICAgUHlfREVDUkVGKHN0ZCk7CiAKICNpZiAxIC8qIERpc2FibGUgdGhpcyBpZiB5b3UgaGF2ZSB0cm91YmxlIGRlYnVnZ2luZyBib290c3RyYXAgc3R1ZmYgKi8KICAgICAvKiBTZXQgc3lzLnN0ZGVyciwgcmVwbGFjZXMgdGhlIHByZWxpbWluYXJ5IHN0ZGVyciAqLwogICAgIGZkID0gZmlsZW5vKHN0ZGVycik7Ci0gICAgaWYgKCFpc192YWxpZF9mZChmZCkpIHsKLSAgICAgICAgc3RkID0gUHlfTm9uZTsKLSAgICAgICAgUHlfSU5DUkVGKHN0ZCk7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICBzdGQgPSBjcmVhdGVfc3RkaW8oaW9tb2QsIGZkLCAxLCAiPHN0ZGVycj4iLCBlbmNvZGluZywgImJhY2tzbGFzaHJlcGxhY2UiKTsKLSAgICAgICAgaWYgKHN0ZCA9PSBOVUxMKQotICAgICAgICAgICAgZ290byBlcnJvcjsKLSAgICB9IC8qIGlmIChmZCA8IDApICovCisgICAgc3RkID0gY3JlYXRlX3N0ZGlvKGlvbW9kLCBmZCwgMSwgIjxzdGRlcnI+IiwgZW5jb2RpbmcsICJiYWNrc2xhc2hyZXBsYWNlIik7CisgICAgaWYgKHN0ZCA9PSBOVUxMKQorICAgICAgICBnb3RvIGVycm9yOwogCiAgICAgLyogU2FtZSBhcyBoYWNrIGFib3ZlLCBwcmUtaW1wb3J0IHN0ZGVycidzIGNvZGVjIHRvIGF2b2lkIHJlY3Vyc2lvbgogICAgICAgIHdoZW4gaW1wb3J0LmMgdHJpZXMgdG8gd3JpdGUgdG8gc3RkZXJyIGluIHZlcmJvc2UgbW9kZS4gKi8KICAgICBlbmNvZGluZ19hdHRyID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhzdGQsICJlbmNvZGluZyIpOwogICAgIGlmIChlbmNvZGluZ19hdHRyICE9IE5VTEwpIHsKLSAgICAgICAgY29uc3QgY2hhciAqIGVuY29kaW5nOwotICAgICAgICBlbmNvZGluZyA9IF9QeVVuaWNvZGVfQXNTdHJpbmcoZW5jb2RpbmdfYXR0cik7Ci0gICAgICAgIGlmIChlbmNvZGluZyAhPSBOVUxMKSB7Ci0gICAgICAgICAgICBQeU9iamVjdCAqY29kZWNfaW5mbyA9IF9QeUNvZGVjX0xvb2t1cChlbmNvZGluZyk7CisgICAgICAgIGNvbnN0IGNoYXIgKiBzdGRfZW5jb2Rpbmc7CisgICAgICAgIHN0ZF9lbmNvZGluZyA9IF9QeVVuaWNvZGVfQXNTdHJpbmcoZW5jb2RpbmdfYXR0cik7CisgICAgICAgIGlmIChzdGRfZW5jb2RpbmcgIT0gTlVMTCkgeworICAgICAgICAgICAgUHlPYmplY3QgKmNvZGVjX2luZm8gPSBfUHlDb2RlY19Mb29rdXAoc3RkX2VuY29kaW5nKTsKICAgICAgICAgICAgIFB5X1hERUNSRUYoY29kZWNfaW5mbyk7CiAgICAgICAgIH0KICAgICAgICAgUHlfREVDUkVGKGVuY29kaW5nX2F0dHIpOwogICAgIH0KICAgICBQeUVycl9DbGVhcigpOyAgLyogTm90IGEgZmF0YWwgZXJyb3IgaWYgY29kZWMgaXNuJ3QgYXZhaWxhYmxlICovCiAKLSAgICBQeVN5c19TZXRPYmplY3QoIl9fc3RkZXJyX18iLCBzdGQpOwotICAgIFB5U3lzX1NldE9iamVjdCgic3RkZXJyIiwgc3RkKTsKKyAgICBpZiAoUHlTeXNfU2V0T2JqZWN0KCJfX3N0ZGVycl9fIiwgc3RkKSA8IDApIHsKKyAgICAgICAgUHlfREVDUkVGKHN0ZCk7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorICAgIGlmIChfUHlTeXNfU2V0T2JqZWN0SWQoJlB5SWRfc3RkZXJyLCBzdGQpIDwgMCkgeworICAgICAgICBQeV9ERUNSRUYoc3RkKTsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CiAgICAgUHlfREVDUkVGKHN0ZCk7CiAjZW5kaWYKIApAQCAtMTE0OSw4ICsxMjU0LDE2IEBACiAgICAgICAgIHN0YXR1cyA9IC0xOwogICAgIH0KIAotICAgIGlmIChlbmNvZGluZykKLSAgICAgICAgZnJlZShlbmNvZGluZyk7CisgICAgLyogV2Ugd29uJ3QgbmVlZCB0aGVtIGFueW1vcmUuICovCisgICAgaWYgKF9QeV9TdGFuZGFyZFN0cmVhbUVuY29kaW5nKSB7CisgICAgICAgIFB5TWVtX1Jhd0ZyZWUoX1B5X1N0YW5kYXJkU3RyZWFtRW5jb2RpbmcpOworICAgICAgICBfUHlfU3RhbmRhcmRTdHJlYW1FbmNvZGluZyA9IE5VTEw7CisgICAgfQorICAgIGlmIChfUHlfU3RhbmRhcmRTdHJlYW1FcnJvcnMpIHsKKyAgICAgICAgUHlNZW1fUmF3RnJlZShfUHlfU3RhbmRhcmRTdHJlYW1FcnJvcnMpOworICAgICAgICBfUHlfU3RhbmRhcmRTdHJlYW1FcnJvcnMgPSBOVUxMOworICAgIH0KKyAgICBQeU1lbV9GcmVlKHB5dGhvbmlvZW5jb2RpbmcpOwogICAgIFB5X1hERUNSRUYoYmltb2QpOwogICAgIFB5X1hERUNSRUYoaW9tb2QpOwogICAgIHJldHVybiBzdGF0dXM7CkBAIC0xMTc1LDM2ICsxMjg4LDQ3IEBACiB9CiAKIGludAotUHlSdW5fSW50ZXJhY3RpdmVMb29wRmxhZ3MoRklMRSAqZnAsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzKQorUHlSdW5fSW50ZXJhY3RpdmVMb29wRmxhZ3MoRklMRSAqZnAsIGNvbnN0IGNoYXIgKmZpbGVuYW1lX3N0ciwgUHlDb21waWxlckZsYWdzICpmbGFncykKIHsKLSAgICBQeU9iamVjdCAqdjsKLSAgICBpbnQgcmV0OworICAgIFB5T2JqZWN0ICpmaWxlbmFtZSwgKnY7CisgICAgaW50IHJldCwgZXJyOwogICAgIFB5Q29tcGlsZXJGbGFncyBsb2NhbF9mbGFnczsKIAorICAgIGZpbGVuYW1lID0gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdChmaWxlbmFtZV9zdHIpOworICAgIGlmIChmaWxlbmFtZSA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX1ByaW50KCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKICAgICBpZiAoZmxhZ3MgPT0gTlVMTCkgewogICAgICAgICBmbGFncyA9ICZsb2NhbF9mbGFnczsKICAgICAgICAgbG9jYWxfZmxhZ3MuY2ZfZmxhZ3MgPSAwOwogICAgIH0KLSAgICB2ID0gUHlTeXNfR2V0T2JqZWN0KCJwczEiKTsKKyAgICB2ID0gX1B5U3lzX0dldE9iamVjdElkKCZQeUlkX3BzMSk7CiAgICAgaWYgKHYgPT0gTlVMTCkgewotICAgICAgICBQeVN5c19TZXRPYmplY3QoInBzMSIsIHYgPSBQeVVuaWNvZGVfRnJvbVN0cmluZygiPj4+ICIpKTsKKyAgICAgICAgX1B5U3lzX1NldE9iamVjdElkKCZQeUlkX3BzMSwgdiA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCI+Pj4gIikpOwogICAgICAgICBQeV9YREVDUkVGKHYpOwogICAgIH0KLSAgICB2ID0gUHlTeXNfR2V0T2JqZWN0KCJwczIiKTsKKyAgICB2ID0gX1B5U3lzX0dldE9iamVjdElkKCZQeUlkX3BzMik7CiAgICAgaWYgKHYgPT0gTlVMTCkgewotICAgICAgICBQeVN5c19TZXRPYmplY3QoInBzMiIsIHYgPSBQeVVuaWNvZGVfRnJvbVN0cmluZygiLi4uICIpKTsKKyAgICAgICAgX1B5U3lzX1NldE9iamVjdElkKCZQeUlkX3BzMiwgdiA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCIuLi4gIikpOwogICAgICAgICBQeV9YREVDUkVGKHYpOwogICAgIH0KKyAgICBlcnIgPSAtMTsKICAgICBmb3IgKDs7KSB7Ci0gICAgICAgIHJldCA9IFB5UnVuX0ludGVyYWN0aXZlT25lRmxhZ3MoZnAsIGZpbGVuYW1lLCBmbGFncyk7CisgICAgICAgIHJldCA9IFB5UnVuX0ludGVyYWN0aXZlT25lT2JqZWN0KGZwLCBmaWxlbmFtZSwgZmxhZ3MpOwogICAgICAgICBQUklOVF9UT1RBTF9SRUZTKCk7Ci0gICAgICAgIGlmIChyZXQgPT0gRV9FT0YpCi0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgaWYgKHJldCA9PSBFX0VPRikgeworICAgICAgICAgICAgZXJyID0gMDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIC8qCiAgICAgICAgIGlmIChyZXQgPT0gRV9OT01FTSkKLSAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAqLwogICAgIH0KKyAgICBQeV9ERUNSRUYoZmlsZW5hbWUpOworICAgIHJldHVybiBlcnI7CiB9CiAKIC8qIGNvbXB1dGUgcGFyc2VyIGZsYWdzIGJhc2VkIG9uIGNvbXBpbGVyIGZsYWdzICovCkBAIC0xMjMyLDE4ICsxMzU2LDI1IEBACiAjZW5kaWYKIAogaW50Ci1QeVJ1bl9JbnRlcmFjdGl2ZU9uZUZsYWdzKEZJTEUgKmZwLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgUHlDb21waWxlckZsYWdzICpmbGFncykKK1B5UnVuX0ludGVyYWN0aXZlT25lT2JqZWN0KEZJTEUgKmZwLCBQeU9iamVjdCAqZmlsZW5hbWUsIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MpCiB7Ci0gICAgUHlPYmplY3QgKm0sICpkLCAqdiwgKncsICpvZW5jID0gTlVMTDsKKyAgICBQeU9iamVjdCAqbSwgKmQsICp2LCAqdywgKm9lbmMgPSBOVUxMLCAqbW9kX25hbWU7CiAgICAgbW9kX3R5IG1vZDsKICAgICBQeUFyZW5hICphcmVuYTsKICAgICBjaGFyICpwczEgPSAiIiwgKnBzMiA9ICIiLCAqZW5jID0gTlVMTDsKICAgICBpbnQgZXJyY29kZSA9IDA7CiAgICAgX1B5X0lERU5USUZJRVIoZW5jb2RpbmcpOworICAgIF9QeV9JREVOVElGSUVSKF9fbWFpbl9fKTsKKworICAgIG1vZF9uYW1lID0gX1B5VW5pY29kZV9Gcm9tSWQoJlB5SWRfX19tYWluX18pOyAvKiBib3Jyb3dlZCAqLworICAgIGlmIChtb2RfbmFtZSA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX1ByaW50KCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CiAKICAgICBpZiAoZnAgPT0gc3RkaW4pIHsKICAgICAgICAgLyogRmV0Y2ggZW5jb2RpbmcgZnJvbSBzeXMuc3RkaW4gaWYgcG9zc2libGUuICovCi0gICAgICAgIHYgPSBQeVN5c19HZXRPYmplY3QoInN0ZGluIik7CisgICAgICAgIHYgPSBfUHlTeXNfR2V0T2JqZWN0SWQoJlB5SWRfc3RkaW4pOwogICAgICAgICBpZiAodiAmJiB2ICE9IFB5X05vbmUpIHsKICAgICAgICAgICAgIG9lbmMgPSBfUHlPYmplY3RfR2V0QXR0cklkKHYsICZQeUlkX2VuY29kaW5nKTsKICAgICAgICAgICAgIGlmIChvZW5jKQpAQCAtMTI1Miw3ICsxMzgzLDcgQEAKICAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwogICAgICAgICB9CiAgICAgfQotICAgIHYgPSBQeVN5c19HZXRPYmplY3QoInBzMSIpOworICAgIHYgPSBfUHlTeXNfR2V0T2JqZWN0SWQoJlB5SWRfcHMxKTsKICAgICBpZiAodiAhPSBOVUxMKSB7CiAgICAgICAgIHYgPSBQeU9iamVjdF9TdHIodik7CiAgICAgICAgIGlmICh2ID09IE5VTEwpCkBAIC0xMjY1LDcgKzEzOTYsNyBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgIHcgPSBQeVN5c19HZXRPYmplY3QoInBzMiIpOworICAgIHcgPSBfUHlTeXNfR2V0T2JqZWN0SWQoJlB5SWRfcHMyKTsKICAgICBpZiAodyAhPSBOVUxMKSB7CiAgICAgICAgIHcgPSBQeU9iamVjdF9TdHIodyk7CiAgICAgICAgIGlmICh3ID09IE5VTEwpCkBAIC0xMjg1LDkgKzE0MTYsOSBAQAogICAgICAgICBQeV9YREVDUkVGKG9lbmMpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQotICAgIG1vZCA9IFB5UGFyc2VyX0FTVEZyb21GaWxlKGZwLCBmaWxlbmFtZSwgZW5jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NpbmdsZV9pbnB1dCwgcHMxLCBwczIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MsICZlcnJjb2RlLCBhcmVuYSk7CisgICAgbW9kID0gUHlQYXJzZXJfQVNURnJvbUZpbGVPYmplY3QoZnAsIGZpbGVuYW1lLCBlbmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfc2luZ2xlX2lucHV0LCBwczEsIHBzMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncywgJmVycmNvZGUsIGFyZW5hKTsKICAgICBQeV9YREVDUkVGKHYpOwogICAgIFB5X1hERUNSRUYodyk7CiAgICAgUHlfWERFQ1JFRihvZW5jKTsKQEAgLTEzMDAsNyArMTQzMSw3IEBACiAgICAgICAgIFB5RXJyX1ByaW50KCk7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9Ci0gICAgbSA9IFB5SW1wb3J0X0FkZE1vZHVsZSgiX19tYWluX18iKTsKKyAgICBtID0gUHlJbXBvcnRfQWRkTW9kdWxlT2JqZWN0KG1vZF9uYW1lKTsKICAgICBpZiAobSA9PSBOVUxMKSB7CiAgICAgICAgIFB5QXJlbmFfRnJlZShhcmVuYSk7CiAgICAgICAgIHJldHVybiAtMTsKQEAgLTEzMDgsMTUgKzE0MzksMzMgQEAKICAgICBkID0gUHlNb2R1bGVfR2V0RGljdChtKTsKICAgICB2ID0gcnVuX21vZChtb2QsIGZpbGVuYW1lLCBkLCBkLCBmbGFncywgYXJlbmEpOwogICAgIFB5QXJlbmFfRnJlZShhcmVuYSk7Ci0gICAgZmx1c2hfaW8oKTsKICAgICBpZiAodiA9PSBOVUxMKSB7CiAgICAgICAgIFB5RXJyX1ByaW50KCk7CisgICAgICAgIGZsdXNoX2lvKCk7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAgICAgUHlfREVDUkVGKHYpOworICAgIGZsdXNoX2lvKCk7CiAgICAgcmV0dXJuIDA7CiB9CiAKK2ludAorUHlSdW5fSW50ZXJhY3RpdmVPbmVGbGFncyhGSUxFICpmcCwgY29uc3QgY2hhciAqZmlsZW5hbWVfc3RyLCBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzKQoreworICAgIFB5T2JqZWN0ICpmaWxlbmFtZTsKKyAgICBpbnQgcmVzOworCisgICAgZmlsZW5hbWUgPSBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0KGZpbGVuYW1lX3N0cik7CisgICAgaWYgKGZpbGVuYW1lID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfUHJpbnQoKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICByZXMgPSBQeVJ1bl9JbnRlcmFjdGl2ZU9uZU9iamVjdChmcCwgZmlsZW5hbWUsIGZsYWdzKTsKKyAgICBQeV9ERUNSRUYoZmlsZW5hbWUpOworICAgIHJldHVybiByZXM7Cit9CisKKwogLyogQ2hlY2sgd2hldGhlciBhIGZpbGUgbWF5YmUgYSBweWMgZmlsZTogTG9vayBhdCB0aGUgZXh0ZW5zaW9uLAogICAgdGhlIGZpbGUgdHlwZSwgYW5kLCBpZiB3ZSBtYXkgY2xvc2UgaXQsIGF0IHRoZSBmaXJzdCBmZXcgYnl0ZXMuICovCiAKQEAgLTEzNTcsOCArMTUwNiw4IEBACiAgICAgcmV0dXJuIDA7CiB9CiAKLWludAotc3RhdGljIHNldF9tYWluX2xvYWRlcihQeU9iamVjdCAqZCwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKmxvYWRlcl9uYW1lKQorc3RhdGljIGludAorc2V0X21haW5fbG9hZGVyKFB5T2JqZWN0ICpkLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqbG9hZGVyX25hbWUpCiB7CiAgICAgUHlJbnRlcnByZXRlclN0YXRlICppbnRlcnA7CiAgICAgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlOwpAQCAtMTQyNSw3ICsxNTc0LDcgQEAKICAgICAgICAgLyogVHJ5IHRvIHJ1biBhIHB5YyBmaWxlLiBGaXJzdCwgcmUtb3BlbiBpbiBiaW5hcnkgKi8KICAgICAgICAgaWYgKGNsb3NlaXQpCiAgICAgICAgICAgICBmY2xvc2UoZnApOwotICAgICAgICBpZiAoKHB5Y19mcCA9IGZvcGVuKGZpbGVuYW1lLCAicmIiKSkgPT0gTlVMTCkgeworICAgICAgICBpZiAoKHB5Y19mcCA9IF9QeV9mb3BlbihmaWxlbmFtZSwgInJiIikpID09IE5VTEwpIHsKICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAicHl0aG9uOiBDYW4ndCByZW9wZW4gLnB5YyBmaWxlXG4iKTsKICAgICAgICAgICAgIGdvdG8gZG9uZTsKICAgICAgICAgfQpAQCAtMTQ4NCw4ICsxNjMzLDggQEAKIH0KIAogc3RhdGljIGludAotcGFyc2Vfc3ludGF4X2Vycm9yKFB5T2JqZWN0ICplcnIsIFB5T2JqZWN0ICoqbWVzc2FnZSwgY29uc3QgY2hhciAqKmZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgIGludCAqbGluZW5vLCBpbnQgKm9mZnNldCwgY29uc3QgY2hhciAqKnRleHQpCitwYXJzZV9zeW50YXhfZXJyb3IoUHlPYmplY3QgKmVyciwgUHlPYmplY3QgKiptZXNzYWdlLCBQeU9iamVjdCAqKmZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgIGludCAqbGluZW5vLCBpbnQgKm9mZnNldCwgUHlPYmplY3QgKip0ZXh0KQogewogICAgIGxvbmcgaG9sZDsKICAgICBQeU9iamVjdCAqdjsKQEAgLTE0OTYsNiArMTY0NSw3IEBACiAgICAgX1B5X0lERU5USUZJRVIodGV4dCk7CiAKICAgICAqbWVzc2FnZSA9IE5VTEw7CisgICAgKmZpbGVuYW1lID0gTlVMTDsKIAogICAgIC8qIG5ldyBzdHlsZSBlcnJvcnMuICBgZXJyJyBpcyBhbiBpbnN0YW5jZSAqLwogICAgICptZXNzYWdlID0gX1B5T2JqZWN0X0dldEF0dHJJZChlcnIsICZQeUlkX21zZyk7CkBAIC0xNTA3LDEzICsxNjU3LDEzIEBACiAgICAgICAgIGdvdG8gZmluYWxseTsKICAgICBpZiAodiA9PSBQeV9Ob25lKSB7CiAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgKmZpbGVuYW1lID0gTlVMTDsKKyAgICAgICAgKmZpbGVuYW1lID0gX1B5VW5pY29kZV9Gcm9tSWQoJlB5SWRfc3RyaW5nKTsKKyAgICAgICAgaWYgKCpmaWxlbmFtZSA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBmaW5hbGx5OworICAgICAgICBQeV9JTkNSRUYoKmZpbGVuYW1lKTsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgICpmaWxlbmFtZSA9IF9QeVVuaWNvZGVfQXNTdHJpbmcodik7Ci0gICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgaWYgKCEqZmlsZW5hbWUpCi0gICAgICAgICAgICBnb3RvIGZpbmFsbHk7CisgICAgICAgICpmaWxlbmFtZSA9IHY7CiAgICAgfQogCiAgICAgdiA9IF9QeU9iamVjdF9HZXRBdHRySWQoZXJyLCAmUHlJZF9saW5lbm8pOwpAQCAtMTU0NywxNSArMTY5NywxMyBAQAogICAgICAgICAqdGV4dCA9IE5VTEw7CiAgICAgfQogICAgIGVsc2UgewotICAgICAgICAqdGV4dCA9IF9QeVVuaWNvZGVfQXNTdHJpbmcodik7Ci0gICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgaWYgKCEqdGV4dCkKLSAgICAgICAgICAgIGdvdG8gZmluYWxseTsKKyAgICAgICAgKnRleHQgPSB2OwogICAgIH0KICAgICByZXR1cm4gMTsKIAogZmluYWxseToKICAgICBQeV9YREVDUkVGKCptZXNzYWdlKTsKKyAgICBQeV9YREVDUkVGKCpmaWxlbmFtZSk7CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTE1NjYsOSArMTcxNCwxNSBAQAogfQogCiBzdGF0aWMgdm9pZAotcHJpbnRfZXJyb3JfdGV4dChQeU9iamVjdCAqZiwgaW50IG9mZnNldCwgY29uc3QgY2hhciAqdGV4dCkKK3ByaW50X2Vycm9yX3RleHQoUHlPYmplY3QgKmYsIGludCBvZmZzZXQsIFB5T2JqZWN0ICp0ZXh0X29iaikKIHsKKyAgICBjaGFyICp0ZXh0OwogICAgIGNoYXIgKm5sOworCisgICAgdGV4dCA9IF9QeVVuaWNvZGVfQXNTdHJpbmcodGV4dF9vYmopOworICAgIGlmICh0ZXh0ID09IE5VTEwpCisgICAgICAgIHJldHVybjsKKwogICAgIGlmIChvZmZzZXQgPj0gMCkgewogICAgICAgICBpZiAob2Zmc2V0ID4gMCAmJiBvZmZzZXQgPT0gc3RybGVuKHRleHQpICYmIHRleHRbb2Zmc2V0IC0gMV0gPT0gJ1xuJykKICAgICAgICAgICAgIG9mZnNldC0tOwpAQCAtMTYyNyw3ICsxNzgxLDEyIEBACiAgICAgaWYgKFB5TG9uZ19DaGVjayh2YWx1ZSkpCiAgICAgICAgIGV4aXRjb2RlID0gKGludClQeUxvbmdfQXNMb25nKHZhbHVlKTsKICAgICBlbHNlIHsKLSAgICAgICAgUHlPYmplY3QgKnN5c19zdGRlcnIgPSBQeVN5c19HZXRPYmplY3QoInN0ZGVyciIpOworICAgICAgICBQeU9iamVjdCAqc3lzX3N0ZGVyciA9IF9QeVN5c19HZXRPYmplY3RJZCgmUHlJZF9zdGRlcnIpOworICAgICAgICAvKiBXZSBjbGVhciB0aGUgZXhjZXB0aW9uIGhlcmUgdG8gYXZvaWQgdHJpZ2dlcmluZyB0aGUgYXNzZXJ0aW9uCisgICAgICAgICAqIGluIFB5T2JqZWN0X1N0ciB0aGF0IGVuc3VyZXMgaXQgd29uJ3Qgc2lsZW50bHkgbG9zZSBleGNlcHRpb24KKyAgICAgICAgICogZGV0YWlscy4KKyAgICAgICAgICovCisgICAgICAgIFB5RXJyX0NsZWFyKCk7CiAgICAgICAgIGlmIChzeXNfc3RkZXJyICE9IE5VTEwgJiYgc3lzX3N0ZGVyciAhPSBQeV9Ob25lKSB7CiAgICAgICAgICAgICBQeUZpbGVfV3JpdGVPYmplY3QodmFsdWUsIHN5c19zdGRlcnIsIFB5X1BSSU5UX1JBVyk7CiAgICAgICAgIH0gZWxzZSB7CkBAIC0xNjcwLDExICsxODI5LDExIEBACiAgICAgICAgIHJldHVybjsKICAgICAvKiBOb3cgd2Uga25vdyB2ICE9IE5VTEwgdG9vICovCiAgICAgaWYgKHNldF9zeXNfbGFzdF92YXJzKSB7Ci0gICAgICAgIFB5U3lzX1NldE9iamVjdCgibGFzdF90eXBlIiwgZXhjZXB0aW9uKTsKLSAgICAgICAgUHlTeXNfU2V0T2JqZWN0KCJsYXN0X3ZhbHVlIiwgdik7Ci0gICAgICAgIFB5U3lzX1NldE9iamVjdCgibGFzdF90cmFjZWJhY2siLCB0Yik7CisgICAgICAgIF9QeVN5c19TZXRPYmplY3RJZCgmUHlJZF9sYXN0X3R5cGUsIGV4Y2VwdGlvbik7CisgICAgICAgIF9QeVN5c19TZXRPYmplY3RJZCgmUHlJZF9sYXN0X3ZhbHVlLCB2KTsKKyAgICAgICAgX1B5U3lzX1NldE9iamVjdElkKCZQeUlkX2xhc3RfdHJhY2ViYWNrLCB0Yik7CiAgICAgfQotICAgIGhvb2sgPSBQeVN5c19HZXRPYmplY3QoImV4Y2VwdGhvb2siKTsKKyAgICBob29rID0gX1B5U3lzX0dldE9iamVjdElkKCZQeUlkX2V4Y2VwdGhvb2spOwogICAgIGlmIChob29rKSB7CiAgICAgICAgIFB5T2JqZWN0ICphcmdzID0gUHlUdXBsZV9QYWNrKDMsIGV4Y2VwdGlvbiwgdiwgdGIpOwogICAgICAgICBQeU9iamVjdCAqcmVzdWx0ID0gUHlFdmFsX0NhbGxPYmplY3QoaG9vaywgYXJncyk7CkBAIC0xNzI0LDkgKzE4ODMsMTEgQEAKICAgICBfUHlfSURFTlRJRklFUihwcmludF9maWxlX2FuZF9saW5lKTsKIAogICAgIGlmICghUHlFeGNlcHRpb25JbnN0YW5jZV9DaGVjayh2YWx1ZSkpIHsKLSAgICAgICAgUHlGaWxlX1dyaXRlU3RyaW5nKCJUeXBlRXJyb3I6IHByaW50X2V4Y2VwdGlvbigpOiBFeGNlcHRpb24gZXhwZWN0ZWQgZm9yIHZhbHVlLCAiLCBmKTsKLSAgICAgICAgUHlGaWxlX1dyaXRlU3RyaW5nKFB5X1RZUEUodmFsdWUpLT50cF9uYW1lLCBmKTsKLSAgICAgICAgUHlGaWxlX1dyaXRlU3RyaW5nKCIgZm91bmRcbiIsIGYpOworICAgICAgICBlcnIgPSBQeUZpbGVfV3JpdGVTdHJpbmcoIlR5cGVFcnJvcjogcHJpbnRfZXhjZXB0aW9uKCk6IEV4Y2VwdGlvbiBleHBlY3RlZCBmb3IgdmFsdWUsICIsIGYpOworICAgICAgICBlcnIgKz0gUHlGaWxlX1dyaXRlU3RyaW5nKFB5X1RZUEUodmFsdWUpLT50cF9uYW1lLCBmKTsKKyAgICAgICAgZXJyICs9IFB5RmlsZV9Xcml0ZVN0cmluZygiIGZvdW5kXG4iLCBmKTsKKyAgICAgICAgaWYgKGVycikKKyAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTE3MzksMjcgKzE5MDAsMzAgQEAKICAgICBpZiAoZXJyID09IDAgJiYKICAgICAgICAgX1B5T2JqZWN0X0hhc0F0dHJJZCh2YWx1ZSwgJlB5SWRfcHJpbnRfZmlsZV9hbmRfbGluZSkpCiAgICAgewotICAgICAgICBQeU9iamVjdCAqbWVzc2FnZTsKLSAgICAgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsICp0ZXh0OworICAgICAgICBQeU9iamVjdCAqbWVzc2FnZSwgKmZpbGVuYW1lLCAqdGV4dDsKICAgICAgICAgaW50IGxpbmVubywgb2Zmc2V0OwogICAgICAgICBpZiAoIXBhcnNlX3N5bnRheF9lcnJvcih2YWx1ZSwgJm1lc3NhZ2UsICZmaWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmxpbmVubywgJm9mZnNldCwgJnRleHQpKQogICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBjaGFyIGJ1ZlsxMF07Ci0gICAgICAgICAgICBQeUZpbGVfV3JpdGVTdHJpbmcoIiAgRmlsZSBcIiIsIGYpOwotICAgICAgICAgICAgaWYgKGZpbGVuYW1lID09IE5VTEwpCi0gICAgICAgICAgICAgICAgUHlGaWxlX1dyaXRlU3RyaW5nKCI8c3RyaW5nPiIsIGYpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIFB5RmlsZV9Xcml0ZVN0cmluZyhmaWxlbmFtZSwgZik7Ci0gICAgICAgICAgICBQeUZpbGVfV3JpdGVTdHJpbmcoIlwiLCBsaW5lICIsIGYpOwotICAgICAgICAgICAgUHlPU19zbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJWQiLCBsaW5lbm8pOwotICAgICAgICAgICAgUHlGaWxlX1dyaXRlU3RyaW5nKGJ1ZiwgZik7Ci0gICAgICAgICAgICBQeUZpbGVfV3JpdGVTdHJpbmcoIlxuIiwgZik7Ci0gICAgICAgICAgICBpZiAodGV4dCAhPSBOVUxMKQotICAgICAgICAgICAgICAgIHByaW50X2Vycm9yX3RleHQoZiwgb2Zmc2V0LCB0ZXh0KTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpsaW5lOworCiAgICAgICAgICAgICBQeV9ERUNSRUYodmFsdWUpOwogICAgICAgICAgICAgdmFsdWUgPSBtZXNzYWdlOworCisgICAgICAgICAgICBsaW5lID0gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIiAgRmlsZSBcIiVVXCIsIGxpbmUgJWRcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSwgbGluZW5vKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihmaWxlbmFtZSk7CisgICAgICAgICAgICBpZiAobGluZSAhPSBOVUxMKSB7CisgICAgICAgICAgICAgICAgUHlGaWxlX1dyaXRlT2JqZWN0KGxpbmUsIGYsIFB5X1BSSU5UX1JBVyk7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGxpbmUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodGV4dCAhPSBOVUxMKSB7CisgICAgICAgICAgICAgICAgcHJpbnRfZXJyb3JfdGV4dChmLCBvZmZzZXQsIHRleHQpOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih0ZXh0KTsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgLyogQ2FuJ3QgYmUgYm90aGVyZWQgdG8gY2hlY2sgYWxsIHRob3NlCiAgICAgICAgICAgICAgICBQeUZpbGVfV3JpdGVTdHJpbmcoKSBjYWxscyAqLwogICAgICAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCkBAIC0xNzg4LDEwICsxOTUyLDkgQEAKICAgICAgICAgICAgIGVyciA9IFB5RmlsZV9Xcml0ZVN0cmluZygiPHVua25vd24+IiwgZik7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBjaGFyKiBtb2RzdHIgPSBfUHlVbmljb2RlX0FzU3RyaW5nKG1vZHVsZU5hbWUpOwotICAgICAgICAgICAgaWYgKG1vZHN0ciAmJiBzdHJjbXAobW9kc3RyLCAiYnVpbHRpbnMiKSkKKyAgICAgICAgICAgIGlmIChfUHlVbmljb2RlX0NvbXBhcmVXaXRoSWQobW9kdWxlTmFtZSwgJlB5SWRfYnVpbHRpbnMpICE9IDApCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZXJyID0gUHlGaWxlX1dyaXRlU3RyaW5nKG1vZHN0ciwgZik7CisgICAgICAgICAgICAgICAgZXJyID0gUHlGaWxlX1dyaXRlT2JqZWN0KG1vZHVsZU5hbWUsIGYsIFB5X1BSSU5UX1JBVyk7CiAgICAgICAgICAgICAgICAgZXJyICs9IFB5RmlsZV9Xcml0ZVN0cmluZygiLiIsIGYpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgUHlfREVDUkVGKG1vZHVsZU5hbWUpOwpAQCAtMTg4NCw3ICsyMDQ3LDcgQEAKIFB5RXJyX0Rpc3BsYXkoUHlPYmplY3QgKmV4Y2VwdGlvbiwgUHlPYmplY3QgKnZhbHVlLCBQeU9iamVjdCAqdGIpCiB7CiAgICAgUHlPYmplY3QgKnNlZW47Ci0gICAgUHlPYmplY3QgKmYgPSBQeVN5c19HZXRPYmplY3QoInN0ZGVyciIpOworICAgIFB5T2JqZWN0ICpmID0gX1B5U3lzX0dldE9iamVjdElkKCZQeUlkX3N0ZGVycik7CiAgICAgaWYgKFB5RXhjZXB0aW9uSW5zdGFuY2VfQ2hlY2sodmFsdWUpCiAgICAgICAgICYmIHRiICE9IE5VTEwgJiYgUHlUcmFjZUJhY2tfQ2hlY2sodGIpKSB7CiAgICAgICAgIC8qIFB1dCB0aGUgdHJhY2ViYWNrIG9uIHRoZSBleGNlcHRpb24sIG90aGVyd2lzZSBpdCB3b24ndCBnZXQKQEAgLTE5MjAsMzcgKzIwODMsNTQgQEAKIHsKICAgICBQeU9iamVjdCAqcmV0ID0gTlVMTDsKICAgICBtb2RfdHkgbW9kOwotICAgIFB5QXJlbmEgKmFyZW5hID0gUHlBcmVuYV9OZXcoKTsKKyAgICBQeUFyZW5hICphcmVuYTsKKyAgICBQeU9iamVjdCAqZmlsZW5hbWU7CisKKyAgICBmaWxlbmFtZSA9IF9QeVVuaWNvZGVfRnJvbUlkKCZQeUlkX3N0cmluZyk7IC8qIGJvcnJvd2VkICovCisgICAgaWYgKGZpbGVuYW1lID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgYXJlbmEgPSBQeUFyZW5hX05ldygpOwogICAgIGlmIChhcmVuYSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIG1vZCA9IFB5UGFyc2VyX0FTVEZyb21TdHJpbmcoc3RyLCAiPHN0cmluZz4iLCBzdGFydCwgZmxhZ3MsIGFyZW5hKTsKKyAgICBtb2QgPSBQeVBhcnNlcl9BU1RGcm9tU3RyaW5nT2JqZWN0KHN0ciwgZmlsZW5hbWUsIHN0YXJ0LCBmbGFncywgYXJlbmEpOwogICAgIGlmIChtb2QgIT0gTlVMTCkKLSAgICAgICAgcmV0ID0gcnVuX21vZChtb2QsICI8c3RyaW5nPiIsIGdsb2JhbHMsIGxvY2FscywgZmxhZ3MsIGFyZW5hKTsKKyAgICAgICAgcmV0ID0gcnVuX21vZChtb2QsIGZpbGVuYW1lLCBnbG9iYWxzLCBsb2NhbHMsIGZsYWdzLCBhcmVuYSk7CiAgICAgUHlBcmVuYV9GcmVlKGFyZW5hKTsKICAgICByZXR1cm4gcmV0OwogfQogCiBQeU9iamVjdCAqCi1QeVJ1bl9GaWxlRXhGbGFncyhGSUxFICpmcCwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBzdGFydCwgUHlPYmplY3QgKmdsb2JhbHMsCitQeVJ1bl9GaWxlRXhGbGFncyhGSUxFICpmcCwgY29uc3QgY2hhciAqZmlsZW5hbWVfc3RyLCBpbnQgc3RhcnQsIFB5T2JqZWN0ICpnbG9iYWxzLAogICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmxvY2FscywgaW50IGNsb3NlaXQsIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MpCiB7Ci0gICAgUHlPYmplY3QgKnJldDsKKyAgICBQeU9iamVjdCAqcmV0ID0gTlVMTDsKICAgICBtb2RfdHkgbW9kOwotICAgIFB5QXJlbmEgKmFyZW5hID0gUHlBcmVuYV9OZXcoKTsKLSAgICBpZiAoYXJlbmEgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgUHlBcmVuYSAqYXJlbmEgPSBOVUxMOworICAgIFB5T2JqZWN0ICpmaWxlbmFtZTsKIAotICAgIG1vZCA9IFB5UGFyc2VyX0FTVEZyb21GaWxlKGZwLCBmaWxlbmFtZSwgTlVMTCwgc3RhcnQsIDAsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MsIE5VTEwsIGFyZW5hKTsKKyAgICBmaWxlbmFtZSA9IFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQoZmlsZW5hbWVfc3RyKTsKKyAgICBpZiAoZmlsZW5hbWUgPT0gTlVMTCkKKyAgICAgICAgZ290byBleGl0OworCisgICAgYXJlbmEgPSBQeUFyZW5hX05ldygpOworICAgIGlmIChhcmVuYSA9PSBOVUxMKQorICAgICAgICBnb3RvIGV4aXQ7CisKKyAgICBtb2QgPSBQeVBhcnNlcl9BU1RGcm9tRmlsZU9iamVjdChmcCwgZmlsZW5hbWUsIE5VTEwsIHN0YXJ0LCAwLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzLCBOVUxMLCBhcmVuYSk7CiAgICAgaWYgKGNsb3NlaXQpCiAgICAgICAgIGZjbG9zZShmcCk7CiAgICAgaWYgKG1vZCA9PSBOVUxMKSB7Ci0gICAgICAgIFB5QXJlbmFfRnJlZShhcmVuYSk7Ci0gICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogICAgIHJldCA9IHJ1bl9tb2QobW9kLCBmaWxlbmFtZSwgZ2xvYmFscywgbG9jYWxzLCBmbGFncywgYXJlbmEpOwotICAgIFB5QXJlbmFfRnJlZShhcmVuYSk7CisKK2V4aXQ6CisgICAgUHlfWERFQ1JFRihmaWxlbmFtZSk7CisgICAgaWYgKGFyZW5hICE9IE5VTEwpCisgICAgICAgIFB5QXJlbmFfRnJlZShhcmVuYSk7CiAgICAgcmV0dXJuIHJldDsKIH0KIApAQCAtMTk1OSwxMiArMjEzOSwxMSBAQAogewogICAgIFB5T2JqZWN0ICpmLCAqcjsKICAgICBQeU9iamVjdCAqdHlwZSwgKnZhbHVlLCAqdHJhY2ViYWNrOwotICAgIF9QeV9JREVOVElGSUVSKGZsdXNoKTsKIAogICAgIC8qIFNhdmUgdGhlIGN1cnJlbnQgZXhjZXB0aW9uICovCiAgICAgUHlFcnJfRmV0Y2goJnR5cGUsICZ2YWx1ZSwgJnRyYWNlYmFjayk7CiAKLSAgICBmID0gUHlTeXNfR2V0T2JqZWN0KCJzdGRlcnIiKTsKKyAgICBmID0gX1B5U3lzX0dldE9iamVjdElkKCZQeUlkX3N0ZGVycik7CiAgICAgaWYgKGYgIT0gTlVMTCkgewogICAgICAgICByID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZChmLCAmUHlJZF9mbHVzaCwgIiIpOwogICAgICAgICBpZiAocikKQEAgLTE5NzIsNyArMjE1MSw3IEBACiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CiAgICAgfQotICAgIGYgPSBQeVN5c19HZXRPYmplY3QoInN0ZG91dCIpOworICAgIGYgPSBfUHlTeXNfR2V0T2JqZWN0SWQoJlB5SWRfc3Rkb3V0KTsKICAgICBpZiAoZiAhPSBOVUxMKSB7CiAgICAgICAgIHIgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKGYsICZQeUlkX2ZsdXNoLCAiIik7CiAgICAgICAgIGlmIChyKQpAQCAtMTk4NSwxMiArMjE2NCwxMiBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotcnVuX21vZChtb2RfdHkgbW9kLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgUHlPYmplY3QgKmdsb2JhbHMsIFB5T2JqZWN0ICpsb2NhbHMsCi0gICAgICAgICBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzLCBQeUFyZW5hICphcmVuYSkKK3J1bl9tb2QobW9kX3R5IG1vZCwgUHlPYmplY3QgKmZpbGVuYW1lLCBQeU9iamVjdCAqZ2xvYmFscywgUHlPYmplY3QgKmxvY2FscywKKyAgICAgICAgICAgIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MsIFB5QXJlbmEgKmFyZW5hKQogewogICAgIFB5Q29kZU9iamVjdCAqY287CiAgICAgUHlPYmplY3QgKnY7Ci0gICAgY28gPSBQeUFTVF9Db21waWxlKG1vZCwgZmlsZW5hbWUsIGZsYWdzLCBhcmVuYSk7CisgICAgY28gPSBQeUFTVF9Db21waWxlT2JqZWN0KG1vZCwgZmlsZW5hbWUsIGZsYWdzLCAtMSwgYXJlbmEpOwogICAgIGlmIChjbyA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB2ID0gUHlFdmFsX0V2YWxDb2RlKChQeU9iamVjdCopY28sIGdsb2JhbHMsIGxvY2Fscyk7CkBAIC0yMDMyLDggKzIyMTEsOCBAQAogfQogCiBQeU9iamVjdCAqCi1QeV9Db21waWxlU3RyaW5nRXhGbGFncyhjb25zdCBjaGFyICpzdHIsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgc3RhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzLCBpbnQgb3B0aW1pemUpCitQeV9Db21waWxlU3RyaW5nT2JqZWN0KGNvbnN0IGNoYXIgKnN0ciwgUHlPYmplY3QgKmZpbGVuYW1lLCBpbnQgc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MsIGludCBvcHRpbWl6ZSkKIHsKICAgICBQeUNvZGVPYmplY3QgKmNvOwogICAgIG1vZF90eSBtb2Q7CkBAIC0yMDQxLDcgKzIyMjAsNyBAQAogICAgIGlmIChhcmVuYSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIG1vZCA9IFB5UGFyc2VyX0FTVEZyb21TdHJpbmcoc3RyLCBmaWxlbmFtZSwgc3RhcnQsIGZsYWdzLCBhcmVuYSk7CisgICAgbW9kID0gUHlQYXJzZXJfQVNURnJvbVN0cmluZ09iamVjdChzdHIsIGZpbGVuYW1lLCBzdGFydCwgZmxhZ3MsIGFyZW5hKTsKICAgICBpZiAobW9kID09IE5VTEwpIHsKICAgICAgICAgUHlBcmVuYV9GcmVlKGFyZW5hKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0yMDUxLDExICsyMjMwLDI0IEBACiAgICAgICAgIFB5QXJlbmFfRnJlZShhcmVuYSk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQotICAgIGNvID0gUHlBU1RfQ29tcGlsZUV4KG1vZCwgZmlsZW5hbWUsIGZsYWdzLCBvcHRpbWl6ZSwgYXJlbmEpOworICAgIGNvID0gUHlBU1RfQ29tcGlsZU9iamVjdChtb2QsIGZpbGVuYW1lLCBmbGFncywgb3B0aW1pemUsIGFyZW5hKTsKICAgICBQeUFyZW5hX0ZyZWUoYXJlbmEpOwogICAgIHJldHVybiAoUHlPYmplY3QgKiljbzsKIH0KIAorUHlPYmplY3QgKgorUHlfQ29tcGlsZVN0cmluZ0V4RmxhZ3MoY29uc3QgY2hhciAqc3RyLCBjb25zdCBjaGFyICpmaWxlbmFtZV9zdHIsIGludCBzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MsIGludCBvcHRpbWl6ZSkKK3sKKyAgICBQeU9iamVjdCAqZmlsZW5hbWUsICpjbzsKKyAgICBmaWxlbmFtZSA9IFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQoZmlsZW5hbWVfc3RyKTsKKyAgICBpZiAoZmlsZW5hbWUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgY28gPSBQeV9Db21waWxlU3RyaW5nT2JqZWN0KHN0ciwgZmlsZW5hbWUsIHN0YXJ0LCBmbGFncywgb3B0aW1pemUpOworICAgIFB5X0RFQ1JFRihmaWxlbmFtZSk7CisgICAgcmV0dXJuIGNvOworfQorCiAvKiBGb3IgdXNlIGluIFB5X0xJTUlURURfQVBJICovCiAjdW5kZWYgUHlfQ29tcGlsZVN0cmluZwogUHlPYmplY3QgKgpAQCAtMjA2NSw0NiArMjI1Nyw2MiBAQAogfQogCiBzdHJ1Y3Qgc3ltdGFibGUgKgotUHlfU3ltdGFibGVTdHJpbmcoY29uc3QgY2hhciAqc3RyLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IHN0YXJ0KQorUHlfU3ltdGFibGVTdHJpbmdPYmplY3QoY29uc3QgY2hhciAqc3RyLCBQeU9iamVjdCAqZmlsZW5hbWUsIGludCBzdGFydCkKIHsKICAgICBzdHJ1Y3Qgc3ltdGFibGUgKnN0OwogICAgIG1vZF90eSBtb2Q7CiAgICAgUHlDb21waWxlckZsYWdzIGZsYWdzOwotICAgIFB5QXJlbmEgKmFyZW5hID0gUHlBcmVuYV9OZXcoKTsKKyAgICBQeUFyZW5hICphcmVuYTsKKworICAgIGFyZW5hID0gUHlBcmVuYV9OZXcoKTsKICAgICBpZiAoYXJlbmEgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBmbGFncy5jZl9mbGFncyA9IDA7Ci0gICAgbW9kID0gUHlQYXJzZXJfQVNURnJvbVN0cmluZyhzdHIsIGZpbGVuYW1lLCBzdGFydCwgJmZsYWdzLCBhcmVuYSk7CisgICAgbW9kID0gUHlQYXJzZXJfQVNURnJvbVN0cmluZ09iamVjdChzdHIsIGZpbGVuYW1lLCBzdGFydCwgJmZsYWdzLCBhcmVuYSk7CiAgICAgaWYgKG1vZCA9PSBOVUxMKSB7CiAgICAgICAgIFB5QXJlbmFfRnJlZShhcmVuYSk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBzdCA9IFB5U3ltdGFibGVfQnVpbGQobW9kLCBmaWxlbmFtZSwgMCk7CisgICAgc3QgPSBQeVN5bXRhYmxlX0J1aWxkT2JqZWN0KG1vZCwgZmlsZW5hbWUsIDApOwogICAgIFB5QXJlbmFfRnJlZShhcmVuYSk7CiAgICAgcmV0dXJuIHN0OwogfQogCitzdHJ1Y3Qgc3ltdGFibGUgKgorUHlfU3ltdGFibGVTdHJpbmcoY29uc3QgY2hhciAqc3RyLCBjb25zdCBjaGFyICpmaWxlbmFtZV9zdHIsIGludCBzdGFydCkKK3sKKyAgICBQeU9iamVjdCAqZmlsZW5hbWU7CisgICAgc3RydWN0IHN5bXRhYmxlICpzdDsKKworICAgIGZpbGVuYW1lID0gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdChmaWxlbmFtZV9zdHIpOworICAgIGlmIChmaWxlbmFtZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBzdCA9IFB5X1N5bXRhYmxlU3RyaW5nT2JqZWN0KHN0ciwgZmlsZW5hbWUsIHN0YXJ0KTsKKyAgICBQeV9ERUNSRUYoZmlsZW5hbWUpOworICAgIHJldHVybiBzdDsKK30KKwogLyogUHJlZmVycmVkIGFjY2VzcyB0byBwYXJzZXIgaXMgdGhyb3VnaCBBU1QuICovCiBtb2RfdHkKLVB5UGFyc2VyX0FTVEZyb21TdHJpbmcoY29uc3QgY2hhciAqcywgY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBzdGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgUHlDb21waWxlckZsYWdzICpmbGFncywgUHlBcmVuYSAqYXJlbmEpCitQeVBhcnNlcl9BU1RGcm9tU3RyaW5nT2JqZWN0KGNvbnN0IGNoYXIgKnMsIFB5T2JqZWN0ICpmaWxlbmFtZSwgaW50IHN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzLCBQeUFyZW5hICphcmVuYSkKIHsKICAgICBtb2RfdHkgbW9kOwogICAgIFB5Q29tcGlsZXJGbGFncyBsb2NhbGZsYWdzOwogICAgIHBlcnJkZXRhaWwgZXJyOwogICAgIGludCBpZmxhZ3MgPSBQQVJTRVJfRkxBR1MoZmxhZ3MpOwogCi0gICAgbm9kZSAqbiA9IFB5UGFyc2VyX1BhcnNlU3RyaW5nRmxhZ3NGaWxlbmFtZUV4KHMsIGZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJl9QeVBhcnNlcl9HcmFtbWFyLCBzdGFydCwgJmVyciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpZmxhZ3MpOworICAgIG5vZGUgKm4gPSBQeVBhcnNlcl9QYXJzZVN0cmluZ09iamVjdChzLCBmaWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJl9QeVBhcnNlcl9HcmFtbWFyLCBzdGFydCwgJmVyciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmlmbGFncyk7CiAgICAgaWYgKGZsYWdzID09IE5VTEwpIHsKICAgICAgICAgbG9jYWxmbGFncy5jZl9mbGFncyA9IDA7CiAgICAgICAgIGZsYWdzID0gJmxvY2FsZmxhZ3M7CiAgICAgfQogICAgIGlmIChuKSB7CiAgICAgICAgIGZsYWdzLT5jZl9mbGFncyB8PSBpZmxhZ3MgJiBQeUNGX01BU0s7Ci0gICAgICAgIG1vZCA9IFB5QVNUX0Zyb21Ob2RlKG4sIGZsYWdzLCBmaWxlbmFtZSwgYXJlbmEpOworICAgICAgICBtb2QgPSBQeUFTVF9Gcm9tTm9kZU9iamVjdChuLCBmbGFncywgZmlsZW5hbWUsIGFyZW5hKTsKICAgICAgICAgUHlOb2RlX0ZyZWUobik7CiAgICAgfQogICAgIGVsc2UgewpAQCAtMjExNiwyNiArMjMyNCw0MCBAQAogfQogCiBtb2RfdHkKLVB5UGFyc2VyX0FTVEZyb21GaWxlKEZJTEUgKmZwLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciogZW5jLAotICAgICAgICAgICAgICAgICAgICAgaW50IHN0YXJ0LCBjaGFyICpwczEsCi0gICAgICAgICAgICAgICAgICAgICBjaGFyICpwczIsIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MsIGludCAqZXJyY29kZSwKLSAgICAgICAgICAgICAgICAgICAgIFB5QXJlbmEgKmFyZW5hKQorUHlQYXJzZXJfQVNURnJvbVN0cmluZyhjb25zdCBjaGFyICpzLCBjb25zdCBjaGFyICpmaWxlbmFtZV9zdHIsIGludCBzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgUHlDb21waWxlckZsYWdzICpmbGFncywgUHlBcmVuYSAqYXJlbmEpCit7CisgICAgUHlPYmplY3QgKmZpbGVuYW1lOworICAgIG1vZF90eSBtb2Q7CisgICAgZmlsZW5hbWUgPSBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0KGZpbGVuYW1lX3N0cik7CisgICAgaWYgKGZpbGVuYW1lID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIG1vZCA9IFB5UGFyc2VyX0FTVEZyb21TdHJpbmdPYmplY3QocywgZmlsZW5hbWUsIHN0YXJ0LCBmbGFncywgYXJlbmEpOworICAgIFB5X0RFQ1JFRihmaWxlbmFtZSk7CisgICAgcmV0dXJuIG1vZDsKK30KKworbW9kX3R5CitQeVBhcnNlcl9BU1RGcm9tRmlsZU9iamVjdChGSUxFICpmcCwgUHlPYmplY3QgKmZpbGVuYW1lLCBjb25zdCBjaGFyKiBlbmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3RhcnQsIGNoYXIgKnBzMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnBzMiwgUHlDb21waWxlckZsYWdzICpmbGFncywgaW50ICplcnJjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlBcmVuYSAqYXJlbmEpCiB7CiAgICAgbW9kX3R5IG1vZDsKICAgICBQeUNvbXBpbGVyRmxhZ3MgbG9jYWxmbGFnczsKICAgICBwZXJyZGV0YWlsIGVycjsKICAgICBpbnQgaWZsYWdzID0gUEFSU0VSX0ZMQUdTKGZsYWdzKTsKIAotICAgIG5vZGUgKm4gPSBQeVBhcnNlcl9QYXJzZUZpbGVGbGFnc0V4KGZwLCBmaWxlbmFtZSwgZW5jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmX1B5UGFyc2VyX0dyYW1tYXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQsIHBzMSwgcHMyLCAmZXJyLCAmaWZsYWdzKTsKKyAgICBub2RlICpuID0gUHlQYXJzZXJfUGFyc2VGaWxlT2JqZWN0KGZwLCBmaWxlbmFtZSwgZW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJl9QeVBhcnNlcl9HcmFtbWFyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQsIHBzMSwgcHMyLCAmZXJyLCAmaWZsYWdzKTsKICAgICBpZiAoZmxhZ3MgPT0gTlVMTCkgewogICAgICAgICBsb2NhbGZsYWdzLmNmX2ZsYWdzID0gMDsKICAgICAgICAgZmxhZ3MgPSAmbG9jYWxmbGFnczsKICAgICB9CiAgICAgaWYgKG4pIHsKICAgICAgICAgZmxhZ3MtPmNmX2ZsYWdzIHw9IGlmbGFncyAmIFB5Q0ZfTUFTSzsKLSAgICAgICAgbW9kID0gUHlBU1RfRnJvbU5vZGUobiwgZmxhZ3MsIGZpbGVuYW1lLCBhcmVuYSk7CisgICAgICAgIG1vZCA9IFB5QVNUX0Zyb21Ob2RlT2JqZWN0KG4sIGZsYWdzLCBmaWxlbmFtZSwgYXJlbmEpOwogICAgICAgICBQeU5vZGVfRnJlZShuKTsKICAgICB9CiAgICAgZWxzZSB7CkBAIC0yMTQ4LDYgKzIzNzAsMjMgQEAKICAgICByZXR1cm4gbW9kOwogfQogCittb2RfdHkKK1B5UGFyc2VyX0FTVEZyb21GaWxlKEZJTEUgKmZwLCBjb25zdCBjaGFyICpmaWxlbmFtZV9zdHIsIGNvbnN0IGNoYXIqIGVuYywKKyAgICAgICAgICAgICAgICAgICAgIGludCBzdGFydCwgY2hhciAqcHMxLAorICAgICAgICAgICAgICAgICAgICAgY2hhciAqcHMyLCBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzLCBpbnQgKmVycmNvZGUsCisgICAgICAgICAgICAgICAgICAgICBQeUFyZW5hICphcmVuYSkKK3sKKyAgICBtb2RfdHkgbW9kOworICAgIFB5T2JqZWN0ICpmaWxlbmFtZTsKKyAgICBmaWxlbmFtZSA9IFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQoZmlsZW5hbWVfc3RyKTsKKyAgICBpZiAoZmlsZW5hbWUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgbW9kID0gUHlQYXJzZXJfQVNURnJvbUZpbGVPYmplY3QoZnAsIGZpbGVuYW1lLCBlbmMsIHN0YXJ0LCBwczEsIHBzMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncywgZXJyY29kZSwgYXJlbmEpOworICAgIFB5X0RFQ1JFRihmaWxlbmFtZSk7CisgICAgcmV0dXJuIG1vZDsKK30KKwogLyogU2ltcGxpZmllZCBpbnRlcmZhY2UgdG8gcGFyc2VmaWxlIC0tIHJldHVybiBub2RlIG9yIHNldCBleGNlcHRpb24gKi8KIAogbm9kZSAqCkBAIC0yMzQzLDQ5ICsyNTgyLDEzMyBAQAogICAgIH0KIH0KIAorLyogUHJpbnQgdGhlIGN1cnJlbnQgZXhjZXB0aW9uIChpZiBhbiBleGNlcHRpb24gaXMgc2V0KSB3aXRoIGl0cyB0cmFjZWJhY2ssCisgKiBvciBkaXNwbGF5IHRoZSBjdXJyZW50IFB5dGhvbiBzdGFjay4KKyAqCisgKiBEb24ndCBjYWxsIFB5RXJyX1ByaW50RXgoKSBhbmQgdGhlIGV4Y2VwdCBob29rLCBiZWNhdXNlIFB5X0ZhdGFsRXJyb3IoKSBpcworICogY2FsbGVkIG9uIGNhdGFzdHJvcGhpYyBjYXNlcy4gKi8KKworc3RhdGljIHZvaWQKK19QeV9QcmludEZhdGFsRXJyb3IoaW50IGZkKQoreworICAgIFB5T2JqZWN0ICpmZXJyLCAqcmVzOworICAgIFB5T2JqZWN0ICpleGNlcHRpb24sICp2LCAqdGI7CisgICAgaW50IGhhc190YjsKKyAgICBQeVRocmVhZFN0YXRlICp0c3RhdGU7CisKKyAgICBQeUVycl9GZXRjaCgmZXhjZXB0aW9uLCAmdiwgJnRiKTsKKyAgICBpZiAoZXhjZXB0aW9uID09IE5VTEwpIHsKKyAgICAgICAgLyogTm8gY3VycmVudCBleGNlcHRpb24gKi8KKyAgICAgICAgZ290byBkaXNwbGF5X3N0YWNrOworICAgIH0KKworICAgIGZlcnIgPSBfUHlTeXNfR2V0T2JqZWN0SWQoJlB5SWRfc3RkZXJyKTsKKyAgICBpZiAoZmVyciA9PSBOVUxMIHx8IGZlcnIgPT0gUHlfTm9uZSkgeworICAgICAgICAvKiBzeXMuc3RkZXJyIGlzIG5vdCBzZXQgeWV0IG9yIHNldCB0byBOb25lLAorICAgICAgICAgICBubyBuZWVkIHRvIHRyeSB0byBkaXNwbGF5IHRoZSBleGNlcHRpb24gKi8KKyAgICAgICAgZ290byBkaXNwbGF5X3N0YWNrOworICAgIH0KKworICAgIFB5RXJyX05vcm1hbGl6ZUV4Y2VwdGlvbigmZXhjZXB0aW9uLCAmdiwgJnRiKTsKKyAgICBpZiAodGIgPT0gTlVMTCkgeworICAgICAgICB0YiA9IFB5X05vbmU7CisgICAgICAgIFB5X0lOQ1JFRih0Yik7CisgICAgfQorICAgIFB5RXhjZXB0aW9uX1NldFRyYWNlYmFjayh2LCB0Yik7CisgICAgaWYgKGV4Y2VwdGlvbiA9PSBOVUxMKSB7CisgICAgICAgIC8qIFB5RXJyX05vcm1hbGl6ZUV4Y2VwdGlvbigpIGZhaWxlZCAqLworICAgICAgICBnb3RvIGRpc3BsYXlfc3RhY2s7CisgICAgfQorCisgICAgaGFzX3RiID0gKHRiICE9IE5VTEwgJiYgdGIgIT0gUHlfTm9uZSk7CisgICAgUHlFcnJfRGlzcGxheShleGNlcHRpb24sIHYsIHRiKTsKKyAgICBQeV9YREVDUkVGKGV4Y2VwdGlvbik7CisgICAgUHlfWERFQ1JFRih2KTsKKyAgICBQeV9YREVDUkVGKHRiKTsKKworICAgIC8qIHN5cy5zdGRlcnIgbWF5IGJlIGJ1ZmZlcmVkOiBjYWxsIHN5cy5zdGRlcnIuZmx1c2goKSAqLworICAgIHJlcyA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoZmVyciwgJlB5SWRfZmx1c2gsICIiKTsKKyAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgZWxzZQorICAgICAgICBQeV9ERUNSRUYocmVzKTsKKworICAgIGlmIChoYXNfdGIpCisgICAgICAgIHJldHVybjsKKworZGlzcGxheV9zdGFjazoKKyNpZmRlZiBXSVRIX1RIUkVBRAorICAgIC8qIFB5R0lMU3RhdGVfR2V0VGhpc1RocmVhZFN0YXRlKCkgd29ya3MgZXZlbiBpZiB0aGUgR0lMIHdhcyByZWxlYXNlZCAqLworICAgIHRzdGF0ZSA9IFB5R0lMU3RhdGVfR2V0VGhpc1RocmVhZFN0YXRlKCk7CisjZWxzZQorICAgIHRzdGF0ZSA9IFB5VGhyZWFkU3RhdGVfR0VUKCk7CisjZW5kaWYKKyAgICBpZiAodHN0YXRlID09IE5VTEwpIHsKKyAgICAgICAgLyogX1B5X0R1bXBUcmFjZWJhY2tUaHJlYWRzKCkgcmVxdWlyZXMgdGhlIHRocmVhZCBzdGF0ZSB0byBkaXNwbGF5CisgICAgICAgICAqIGZyYW1lcyAqLworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZnB1dGMoJ1xuJywgc3RkZXJyKTsKKyAgICBmZmx1c2goc3RkZXJyKTsKKworICAgIC8qIGRpc3BsYXkgdGhlIGN1cnJlbnQgUHl0aG9uIHN0YWNrICovCisgICAgX1B5X0R1bXBUcmFjZWJhY2tUaHJlYWRzKGZkLCB0c3RhdGUtPmludGVycCwgdHN0YXRlKTsKK30KKwogLyogUHJpbnQgZmF0YWwgZXJyb3IgbWVzc2FnZSBhbmQgYWJvcnQgKi8KIAogdm9pZAogUHlfRmF0YWxFcnJvcihjb25zdCBjaGFyICptc2cpCiB7CiAgICAgY29uc3QgaW50IGZkID0gZmlsZW5vKHN0ZGVycik7Ci0gICAgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlOworICAgIHN0YXRpYyBpbnQgcmVlbnRyYW50ID0gMDsKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgc2l6ZV90IGxlbjsKKyAgICBXQ0hBUiogYnVmZmVyOworICAgIHNpemVfdCBpOworI2VuZGlmCisKKyAgICBpZiAocmVlbnRyYW50KSB7CisgICAgICAgIC8qIFB5X0ZhdGFsRXJyb3IoKSBjYXVzZWQgYSBzZWNvbmQgZmF0YWwgZXJyb3IuCisgICAgICAgICAgIEV4YW1wbGU6IGZsdXNoX3N0ZF9maWxlcygpIHJhaXNlcyBhIHJlY3Vyc2lvbiBlcnJvci4gKi8KKyAgICAgICAgZ290byBleGl0OworICAgIH0KKyAgICByZWVudHJhbnQgPSAxOwogCiAgICAgZnByaW50ZihzdGRlcnIsICJGYXRhbCBQeXRob24gZXJyb3I6ICVzXG4iLCBtc2cpOwogICAgIGZmbHVzaChzdGRlcnIpOyAvKiBpdCBoZWxwcyBpbiBXaW5kb3dzIGRlYnVnIGJ1aWxkICovCi0gICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKLSAgICAgICAgUHlFcnJfUHJpbnRFeCgwKTsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIHRzdGF0ZSA9IF9QeV9hdG9taWNfbG9hZF9yZWxheGVkKCZfUHlUaHJlYWRTdGF0ZV9DdXJyZW50KTsKLSAgICAgICAgaWYgKHRzdGF0ZSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICBmcHV0YygnXG4nLCBzdGRlcnIpOwotICAgICAgICAgICAgZmZsdXNoKHN0ZGVycik7Ci0gICAgICAgICAgICBfUHlfRHVtcFRyYWNlYmFja1RocmVhZHMoZmQsIHRzdGF0ZS0+aW50ZXJwLCB0c3RhdGUpOwotICAgICAgICB9Ci0gICAgICAgIF9QeUZhdWx0aGFuZGxlcl9GaW5pKCk7Ci0gICAgfQorCisgICAgLyogUHJpbnQgdGhlIGV4Y2VwdGlvbiAoaWYgYW4gZXhjZXB0aW9uIGlzIHNldCkgd2l0aCBpdHMgdHJhY2ViYWNrLAorICAgICAqIG9yIGRpc3BsYXkgdGhlIGN1cnJlbnQgUHl0aG9uIHN0YWNrLiAqLworICAgIF9QeV9QcmludEZhdGFsRXJyb3IoZmQpOworCisgICAgLyogRmx1c2ggc3lzLnN0ZG91dCBhbmQgc3lzLnN0ZGVyciAqLworICAgIGZsdXNoX3N0ZF9maWxlcygpOworCisgICAgLyogVGhlIG1haW4gcHVycG9zZSBvZiBmYXVsdGhhbmRsZXIgaXMgdG8gZGlzcGxheSB0aGUgdHJhY2ViYWNrLiBXZSBhbHJlYWR5CisgICAgICogZGlkIG91ciBiZXN0IHRvIGRpc3BsYXkgaXQuIFNvIGZhdWx0aGFuZGxlciBjYW4gbm93IGJlIGRpc2FibGVkLgorICAgICAqIChEb24ndCB0cmlnZ2VyIGl0IG9uIGFib3J0KCkuKSAqLworICAgIF9QeUZhdWx0aGFuZGxlcl9GaW5pKCk7CiAKICNpZmRlZiBNU19XSU5ET1dTCi0gICAgewotICAgICAgICBzaXplX3QgbGVuID0gc3RybGVuKG1zZyk7Ci0gICAgICAgIFdDSEFSKiBidWZmZXI7Ci0gICAgICAgIHNpemVfdCBpOworICAgIGxlbiA9IHN0cmxlbihtc2cpOwogCi0gICAgICAgIC8qIENvbnZlcnQgdGhlIG1lc3NhZ2UgdG8gd2NoYXJfdC4gVGhpcyB1c2VzIGEgc2ltcGxlIG9uZS10by1vbmUKLSAgICAgICAgY29udmVyc2lvbiwgYXNzdW1pbmcgdGhhdCB0aGUgdGhpcyBlcnJvciBtZXNzYWdlIGFjdHVhbGx5IHVzZXMgQVNDSUkKLSAgICAgICAgb25seS4gSWYgdGhpcyBjZWFzZXMgdG8gYmUgdHJ1ZSwgd2Ugd2lsbCBoYXZlIHRvIGNvbnZlcnQuICovCi0gICAgICAgIGJ1ZmZlciA9IGFsbG9jYSggKGxlbisxKSAqIChzaXplb2YgKmJ1ZmZlcikpOwotICAgICAgICBmb3IoIGk9MDsgaTw9bGVuOyArK2kpCi0gICAgICAgICAgICBidWZmZXJbaV0gPSBtc2dbaV07Ci0gICAgICAgIE91dHB1dERlYnVnU3RyaW5nVyhMIkZhdGFsIFB5dGhvbiBlcnJvcjogIik7Ci0gICAgICAgIE91dHB1dERlYnVnU3RyaW5nVyhidWZmZXIpOwotICAgICAgICBPdXRwdXREZWJ1Z1N0cmluZ1coTCJcbiIpOwotICAgIH0KLSNpZmRlZiBfREVCVUcKKyAgICAvKiBDb252ZXJ0IHRoZSBtZXNzYWdlIHRvIHdjaGFyX3QuIFRoaXMgdXNlcyBhIHNpbXBsZSBvbmUtdG8tb25lCisgICAgY29udmVyc2lvbiwgYXNzdW1pbmcgdGhhdCB0aGUgdGhpcyBlcnJvciBtZXNzYWdlIGFjdHVhbGx5IHVzZXMgQVNDSUkKKyAgICBvbmx5LiBJZiB0aGlzIGNlYXNlcyB0byBiZSB0cnVlLCB3ZSB3aWxsIGhhdmUgdG8gY29udmVydC4gKi8KKyAgICBidWZmZXIgPSBhbGxvY2EoIChsZW4rMSkgKiAoc2l6ZW9mICpidWZmZXIpKTsKKyAgICBmb3IoIGk9MDsgaTw9bGVuOyArK2kpCisgICAgICAgIGJ1ZmZlcltpXSA9IG1zZ1tpXTsKKyAgICBPdXRwdXREZWJ1Z1N0cmluZ1coTCJGYXRhbCBQeXRob24gZXJyb3I6ICIpOworICAgIE91dHB1dERlYnVnU3RyaW5nVyhidWZmZXIpOworICAgIE91dHB1dERlYnVnU3RyaW5nVyhMIlxuIik7CisjZW5kaWYgLyogTVNfV0lORE9XUyAqLworCitleGl0OgorI2lmIGRlZmluZWQoTVNfV0lORE9XUykgJiYgZGVmaW5lZChfREVCVUcpCiAgICAgRGVidWdCcmVhaygpOwogI2VuZGlmCi0jZW5kaWYgLyogTVNfV0lORE9XUyAqLwogICAgIGFib3J0KCk7CiB9CiAKQEAgLTI0ODQsNiArMjgwNyw5IEBACiAgICAgUHlPU19zZXRzaWcoU0lHWEZTWiwgU0lHX0lHTik7CiAjZW5kaWYKICAgICBQeU9TX0luaXRJbnRlcnJ1cHRzKCk7IC8qIE1heSBpbXBseSBpbml0c2lnbmFsKCkgKi8KKyAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICBQeV9GYXRhbEVycm9yKCJQeV9Jbml0aWFsaXplOiBjYW4ndCBpbXBvcnQgc2lnbmFsIik7CisgICAgfQogfQogCiAKZGlmZiAtLWdpdCBhL1B5dGhvbi9weXRpbWUuYyBiL1B5dGhvbi9weXRpbWUuYwppbmRleCBiZWVhYjg3Li5kZTZhNDFmIDEwMDY0NAotLS0gYS9QeXRob24vcHl0aW1lLmMKKysrIGIvUHl0aG9uL3B5dGltZS5jCkBAIC0xNTIsNyArMTUyLDcgQEAKIAogc3RhdGljIGludAogX1B5VGltZV9PYmplY3RUb0Rlbm9taW5hdG9yKFB5T2JqZWN0ICpvYmosIHRpbWVfdCAqc2VjLCBsb25nICpudW1lcmF0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIGRlbm9taW5hdG9yKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBkZW5vbWluYXRvciwgX1B5VGltZV9yb3VuZF90IHJvdW5kKQogewogICAgIGFzc2VydChkZW5vbWluYXRvciA8PSBMT05HX01BWCk7CiAgICAgaWYgKFB5RmxvYXRfQ2hlY2sob2JqKSkgewpAQCAtMTY3LDYgKzE2NywyMCBAQAogICAgICAgICAgICAgaW50cGFydCAtPSAxLjA7CiAgICAgICAgIH0KIAorICAgICAgICBmbG9hdHBhcnQgKj0gZGVub21pbmF0b3I7CisgICAgICAgIGlmIChyb3VuZCA9PSBfUHlUaW1lX1JPVU5EX1VQKSB7CisgICAgICAgICAgICBpZiAoaW50cGFydCA+PSAwKSB7CisgICAgICAgICAgICAgICAgZmxvYXRwYXJ0ID0gY2VpbChmbG9hdHBhcnQpOworICAgICAgICAgICAgICAgIGlmIChmbG9hdHBhcnQgPj0gZGVub21pbmF0b3IpIHsKKyAgICAgICAgICAgICAgICAgICAgZmxvYXRwYXJ0ID0gMC4wOworICAgICAgICAgICAgICAgICAgICBpbnRwYXJ0ICs9IDEuMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBmbG9hdHBhcnQgPSBmbG9vcihmbG9hdHBhcnQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKICAgICAgICAgKnNlYyA9ICh0aW1lX3QpaW50cGFydDsKICAgICAgICAgZXJyID0gaW50cGFydCAtIChkb3VibGUpKnNlYzsKICAgICAgICAgaWYgKGVyciA8PSAtMS4wIHx8IGVyciA+PSAxLjApIHsKQEAgLTE3NCw3ICsxODgsNiBAQAogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9CiAKLSAgICAgICAgZmxvYXRwYXJ0ICo9IGRlbm9taW5hdG9yOwogICAgICAgICAqbnVtZXJhdG9yID0gKGxvbmcpZmxvYXRwYXJ0OwogICAgICAgICByZXR1cm4gMDsKICAgICB9CkBAIC0xODgsMTIgKzIwMSwxOCBAQAogfQogCiBpbnQKLV9QeVRpbWVfT2JqZWN0VG9UaW1lX3QoUHlPYmplY3QgKm9iaiwgdGltZV90ICpzZWMpCitfUHlUaW1lX09iamVjdFRvVGltZV90KFB5T2JqZWN0ICpvYmosIHRpbWVfdCAqc2VjLCBfUHlUaW1lX3JvdW5kX3Qgcm91bmQpCiB7CiAgICAgaWYgKFB5RmxvYXRfQ2hlY2sob2JqKSkgewogICAgICAgICBkb3VibGUgZCwgaW50cGFydCwgZXJyOwogCiAgICAgICAgIGQgPSBQeUZsb2F0X0FzRG91YmxlKG9iaik7CisgICAgICAgIGlmIChyb3VuZCA9PSBfUHlUaW1lX1JPVU5EX1VQKSB7CisgICAgICAgICAgICBpZiAoZCA+PSAwKQorICAgICAgICAgICAgICAgIGQgPSBjZWlsKGQpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGQgPSBmbG9vcihkKTsKKyAgICAgICAgfQogICAgICAgICAodm9pZCltb2RmKGQsICZpbnRwYXJ0KTsKIAogICAgICAgICAqc2VjID0gKHRpbWVfdClpbnRwYXJ0OwpAQCAtMjEzLDE1ICsyMzIsMTcgQEAKIH0KIAogaW50Ci1fUHlUaW1lX09iamVjdFRvVGltZXNwZWMoUHlPYmplY3QgKm9iaiwgdGltZV90ICpzZWMsIGxvbmcgKm5zZWMpCitfUHlUaW1lX09iamVjdFRvVGltZXNwZWMoUHlPYmplY3QgKm9iaiwgdGltZV90ICpzZWMsIGxvbmcgKm5zZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgX1B5VGltZV9yb3VuZF90IHJvdW5kKQogewotICAgIHJldHVybiBfUHlUaW1lX09iamVjdFRvRGVub21pbmF0b3Iob2JqLCBzZWMsIG5zZWMsIDFlOSk7CisgICAgcmV0dXJuIF9QeVRpbWVfT2JqZWN0VG9EZW5vbWluYXRvcihvYmosIHNlYywgbnNlYywgMWU5LCByb3VuZCk7CiB9CiAKIGludAotX1B5VGltZV9PYmplY3RUb1RpbWV2YWwoUHlPYmplY3QgKm9iaiwgdGltZV90ICpzZWMsIGxvbmcgKnVzZWMpCitfUHlUaW1lX09iamVjdFRvVGltZXZhbChQeU9iamVjdCAqb2JqLCB0aW1lX3QgKnNlYywgbG9uZyAqdXNlYywKKyAgICAgICAgICAgICAgICAgICAgICAgIF9QeVRpbWVfcm91bmRfdCByb3VuZCkKIHsKLSAgICByZXR1cm4gX1B5VGltZV9PYmplY3RUb0Rlbm9taW5hdG9yKG9iaiwgc2VjLCB1c2VjLCAxZTYpOworICAgIHJldHVybiBfUHlUaW1lX09iamVjdFRvRGVub21pbmF0b3Iob2JqLCBzZWMsIHVzZWMsIDFlNiwgcm91bmQpOwogfQogCiB2b2lkCmRpZmYgLS1naXQgYS9QeXRob24vcmFuZG9tLmMgYi9QeXRob24vcmFuZG9tLmMKaW5kZXggMzM3YmU4Ni4uYWYzZDBiZCAxMDA2NDQKLS0tIGEvUHl0aG9uL3JhbmRvbS5jCisrKyBiL1B5dGhvbi9yYW5kb20uYwpAQCAtMyw2ICszLDkgQEAKICNpbmNsdWRlIDx3aW5kb3dzLmg+CiAjZWxzZQogI2luY2x1ZGUgPGZjbnRsLmg+CisjaWZkZWYgSEFWRV9TWVNfU1RBVF9ICisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNlbmRpZgogI2VuZGlmCiAKICNpZmRlZiBQeV9ERUJVRwpAQCAtMTIsNDMgKzE1LDE0IEBACiAjZW5kaWYKIAogI2lmZGVmIE1TX1dJTkRPV1MKLXR5cGVkZWYgQk9PTCAoV0lOQVBJICpDUllQVEFDUVVJUkVDT05URVhUQSkoSENSWVBUUFJPViAqcGhQcm92LFwKLSAgICAgICAgICAgICAgTFBDU1RSIHBzekNvbnRhaW5lciwgTFBDU1RSIHBzelByb3ZpZGVyLCBEV09SRCBkd1Byb3ZUeXBlLFwKLSAgICAgICAgICAgICAgRFdPUkQgZHdGbGFncyApOwotdHlwZWRlZiBCT09MIChXSU5BUEkgKkNSWVBUR0VOUkFORE9NKShIQ1JZUFRQUk9WIGhQcm92LCBEV09SRCBkd0xlbixcCi0gICAgICAgICAgICAgIEJZVEUgKnBiQnVmZmVyICk7Ci0KLXN0YXRpYyBDUllQVEdFTlJBTkRPTSBwQ3J5cHRHZW5SYW5kb20gPSBOVUxMOwotLyogVGhpcyBoYW5kbGUgaXMgbmV2ZXIgZXhwbGljaXRseSByZWxlYXNlZC4gSW5zdGVhZCwgdGhlIG9wZXJhdGluZwotICAgc3lzdGVtIHdpbGwgcmVsZWFzZSBpdCB3aGVuIHRoZSBwcm9jZXNzIHRlcm1pbmF0ZXMuICovCiBzdGF0aWMgSENSWVBUUFJPViBoQ3J5cHRQcm92ID0gMDsKIAogc3RhdGljIGludAogd2luMzJfdXJhbmRvbV9pbml0KGludCByYWlzZSkKIHsKLSAgICBISU5TVEFOQ0UgaEFkdkFQSTMyID0gTlVMTDsKLSAgICBDUllQVEFDUVVJUkVDT05URVhUQSBwQ3J5cHRBY3F1aXJlQ29udGV4dCA9IE5VTEw7Ci0KLSAgICAvKiBPYnRhaW4gaGFuZGxlIHRvIHRoZSBETEwgY29udGFpbmluZyBDcnlwdG9BUEkuIFRoaXMgc2hvdWxkIG5vdCBmYWlsLiAqLwotICAgIGhBZHZBUEkzMiA9IEdldE1vZHVsZUhhbmRsZSgiYWR2YXBpMzIuZGxsIik7Ci0gICAgaWYoaEFkdkFQSTMyID09IE5VTEwpCi0gICAgICAgIGdvdG8gZXJyb3I7Ci0KLSAgICAvKiBPYnRhaW4gcG9pbnRlcnMgdG8gdGhlIENyeXB0b0FQSSBmdW5jdGlvbnMuIFRoaXMgd2lsbCBmYWlsIG9uIHNvbWUgZWFybHkKLSAgICAgICB2ZXJzaW9ucyBvZiBXaW45NS4gKi8KLSAgICBwQ3J5cHRBY3F1aXJlQ29udGV4dCA9IChDUllQVEFDUVVJUkVDT05URVhUQSlHZXRQcm9jQWRkcmVzcygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoQWR2QVBJMzIsICJDcnlwdEFjcXVpcmVDb250ZXh0QSIpOwotICAgIGlmIChwQ3J5cHRBY3F1aXJlQ29udGV4dCA9PSBOVUxMKQotICAgICAgICBnb3RvIGVycm9yOwotCi0gICAgcENyeXB0R2VuUmFuZG9tID0gKENSWVBUR0VOUkFORE9NKUdldFByb2NBZGRyZXNzKGhBZHZBUEkzMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNyeXB0R2VuUmFuZG9tIik7Ci0gICAgaWYgKHBDcnlwdEdlblJhbmRvbSA9PSBOVUxMKQotICAgICAgICBnb3RvIGVycm9yOwotCiAgICAgLyogQWNxdWlyZSBjb250ZXh0ICovCi0gICAgaWYgKCEgcENyeXB0QWNxdWlyZUNvbnRleHQoJmhDcnlwdFByb3YsIE5VTEwsIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPVl9SU0FfRlVMTCwgQ1JZUFRfVkVSSUZZQ09OVEVYVCkpCisgICAgaWYgKCFDcnlwdEFjcXVpcmVDb250ZXh0KCZoQ3J5cHRQcm92LCBOVUxMLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9WX1JTQV9GVUxMLCBDUllQVF9WRVJJRllDT05URVhUKSkKICAgICAgICAgZ290byBlcnJvcjsKIAogICAgIHJldHVybiAwOwpAQCAtNjIsNyArMzYsNyBAQAogfQogCiAvKiBGaWxsIGJ1ZmZlciB3aXRoIHNpemUgcHNldWRvLXJhbmRvbSBieXRlcyBnZW5lcmF0ZWQgYnkgdGhlIFdpbmRvd3MgQ3J5cHRvR2VuCi0gICBBUEkuIFJldHVybiAwIG9uIHN1Y2Nlc3MsIG9yIC0xIG9uIGVycm9yLiAqLworICAgQVBJLiBSZXR1cm4gMCBvbiBzdWNjZXNzLCBvciByYWlzZSBhbiBleGNlcHRpb24gYW5kIHJldHVybiAtMSBvbiBlcnJvci4gKi8KIHN0YXRpYyBpbnQKIHdpbjMyX3VyYW5kb20odW5zaWduZWQgY2hhciAqYnVmZmVyLCBQeV9zc2l6ZV90IHNpemUsIGludCByYWlzZSkKIHsKQEAgLTc3LDcgKzUxLDcgQEAKICAgICB3aGlsZSAoc2l6ZSA+IDApCiAgICAgewogICAgICAgICBjaHVuayA9IHNpemUgPiBJTlRfTUFYID8gSU5UX01BWCA6IHNpemU7Ci0gICAgICAgIGlmICghcENyeXB0R2VuUmFuZG9tKGhDcnlwdFByb3YsIGNodW5rLCBidWZmZXIpKQorICAgICAgICBpZiAoIUNyeXB0R2VuUmFuZG9tKGhDcnlwdFByb3YsIChEV09SRCljaHVuaywgYnVmZmVyKSkKICAgICAgICAgewogICAgICAgICAgICAgLyogQ3J5cHRHZW5SYW5kb20oKSBmYWlsZWQgKi8KICAgICAgICAgICAgIGlmIChyYWlzZSkKQEAgLTkyLDQzICs2Niw2NCBAQAogICAgIH0KICAgICByZXR1cm4gMDsKIH0KLSNlbmRpZiAvKiBNU19XSU5ET1dTICovCiAKKy8qIElzc3VlICMyNTAwMzogRG9uJyB1c2UgZ2V0ZW50cm9weSgpIG9uIFNvbGFyaXMgKGF2YWlsYWJsZSBzaW5jZQorICogU29sYXJpcyAxMS4zKSwgaXQgaXMgYmxvY2tpbmcgd2hlcmVhcyBvcy51cmFuZG9tKCkgc2hvdWxkIG5vdCBibG9jay4gKi8KKyNlbGlmIGRlZmluZWQoSEFWRV9HRVRFTlRST1BZKSAmJiAhZGVmaW5lZChzdW4pCisjZGVmaW5lIFBZX0dFVEVOVFJPUFkgMQogCi0jaWZkZWYgX19WTVMKLS8qIFVzZSBvcGVuc3NsIHJhbmRvbSByb3V0aW5lICovCi0jaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+CisvKiBGaWxsIGJ1ZmZlciB3aXRoIHNpemUgcHNldWRvLXJhbmRvbSBieXRlcyBnZW5lcmF0ZWQgYnkgZ2V0ZW50cm9weSgpLgorICAgUmV0dXJuIDAgb24gc3VjY2Vzcywgb3IgcmFpc2UgYW4gZXhjZXB0aW9uIGFuZCByZXR1cm4gLTEgb24gZXJyb3IuCisKKyAgIElmIGZhdGFsIGlzIG5vbnplcm8sIGNhbGwgUHlfRmF0YWxFcnJvcigpIGluc3RlYWQgb2YgcmFpc2luZyBhbiBleGNlcHRpb24KKyAgIG9uIGVycm9yLiAqLwogc3RhdGljIGludAotdm1zX3VyYW5kb20odW5zaWduZWQgY2hhciAqYnVmZmVyLCBQeV9zc2l6ZV90IHNpemUsIGludCByYWlzZSkKK3B5X2dldGVudHJvcHkodW5zaWduZWQgY2hhciAqYnVmZmVyLCBQeV9zc2l6ZV90IHNpemUsIGludCBmYXRhbCkKIHsKLSAgICBpZiAoUkFORF9wc2V1ZG9fYnl0ZXMoYnVmZmVyLCBzaXplKSA8IDApIHsKLSAgICAgICAgaWYgKHJhaXNlKSB7Ci0gICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiUkFORF9wc2V1ZG9fYnl0ZXMiKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFB5X0ZhdGFsRXJyb3IoIkZhaWxlZCB0byBpbml0aWFsaXplIHRoZSByYW5kb21pemVkIGhhc2ggIgotICAgICAgICAgICAgICAgICAgICAgICAgICAic2VjcmV0IHVzaW5nIFJBTkRfcHNldWRvX2J5dGVzIik7CisgICAgd2hpbGUgKHNpemUgPiAwKSB7CisgICAgICAgIFB5X3NzaXplX3QgbGVuID0gUHlfTUlOKHNpemUsIDI1Nik7CisgICAgICAgIGludCByZXM7CisKKyAgICAgICAgaWYgKCFmYXRhbCkgeworICAgICAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgICAgICAgICAgcmVzID0gZ2V0ZW50cm9weShidWZmZXIsIGxlbik7CisgICAgICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworCisgICAgICAgICAgICBpZiAocmVzIDwgMCkgeworICAgICAgICAgICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19PU0Vycm9yKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIC0xOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJlcyA9IGdldGVudHJvcHkoYnVmZmVyLCBsZW4pOworICAgICAgICAgICAgaWYgKHJlcyA8IDApCisgICAgICAgICAgICAgICAgUHlfRmF0YWxFcnJvcigiZ2V0ZW50cm9weSgpIGZhaWxlZCIpOworICAgICAgICB9CisKKyAgICAgICAgYnVmZmVyICs9IGxlbjsKKyAgICAgICAgc2l6ZSAtPSBsZW47CiAgICAgfQogICAgIHJldHVybiAwOwogfQotI2VuZGlmIC8qIF9fVk1TICovCiAKLQotI2lmICFkZWZpbmVkKE1TX1dJTkRPV1MpICYmICFkZWZpbmVkKF9fVk1TKQorI2Vsc2UKK3N0YXRpYyBzdHJ1Y3QgeworICAgIGludCBmZDsKKyAgICBkZXZfdCBzdF9kZXY7CisgICAgaW5vX3Qgc3RfaW5vOworfSB1cmFuZG9tX2NhY2hlID0geyAtMSB9OwogCiAvKiBSZWFkIHNpemUgYnl0ZXMgZnJvbSAvZGV2L3VyYW5kb20gaW50byBidWZmZXIuCiAgICBDYWxsIFB5X0ZhdGFsRXJyb3IoKSBvbiBlcnJvci4gKi8KIHN0YXRpYyB2b2lkCi1kZXZfdXJhbmRvbV9ub3JhaXNlKGNoYXIgKmJ1ZmZlciwgUHlfc3NpemVfdCBzaXplKQorZGV2X3VyYW5kb21fbm9yYWlzZSh1bnNpZ25lZCBjaGFyICpidWZmZXIsIFB5X3NzaXplX3Qgc2l6ZSkKIHsKICAgICBpbnQgZmQ7CiAgICAgUHlfc3NpemVfdCBuOwogCiAgICAgYXNzZXJ0ICgwIDwgc2l6ZSk7CiAKLSAgICBmZCA9IG9wZW4oIi9kZXYvdXJhbmRvbSIsIE9fUkRPTkxZKTsKKyAgICBmZCA9IF9QeV9vcGVuKCIvZGV2L3VyYW5kb20iLCBPX1JET05MWSk7CiAgICAgaWYgKGZkIDwgMCkKICAgICAgICAgUHlfRmF0YWxFcnJvcigiRmFpbGVkIHRvIG9wZW4gL2Rldi91cmFuZG9tIik7CiAKQEAgLTE1NiwyMiArMTUxLDU2IEBACiB7CiAgICAgaW50IGZkOwogICAgIFB5X3NzaXplX3QgbjsKKyAgICBzdHJ1Y3Qgc3RhdCBzdDsKIAogICAgIGlmIChzaXplIDw9IDApCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgIGZkID0gb3BlbigiL2Rldi91cmFuZG9tIiwgT19SRE9OTFkpOwotICAgIFB5X0VORF9BTExPV19USFJFQURTCi0gICAgaWYgKGZkIDwgMCkKLSAgICB7Ci0gICAgICAgIGlmIChlcnJubyA9PSBFTk9FTlQgfHwgZXJybm8gPT0gRU5YSU8gfHwKLSAgICAgICAgICAgIGVycm5vID09IEVOT0RFViB8fCBlcnJubyA9PSBFQUNDRVMpCi0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfTm90SW1wbGVtZW50ZWRFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiL2Rldi91cmFuZG9tIChvciBlcXVpdmFsZW50KSBub3QgZm91bmQiKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOwotICAgICAgICByZXR1cm4gLTE7CisgICAgaWYgKHVyYW5kb21fY2FjaGUuZmQgPj0gMCkgeworICAgICAgICAvKiBEb2VzIHRoZSBmZCBwb2ludCB0byB0aGUgc2FtZSB0aGluZyBhcyBiZWZvcmU/IChpc3N1ZSAjMjEyMDcpICovCisgICAgICAgIGlmIChmc3RhdCh1cmFuZG9tX2NhY2hlLmZkLCAmc3QpCisgICAgICAgICAgICB8fCBzdC5zdF9kZXYgIT0gdXJhbmRvbV9jYWNoZS5zdF9kZXYKKyAgICAgICAgICAgIHx8IHN0LnN0X2lubyAhPSB1cmFuZG9tX2NhY2hlLnN0X2lubykgeworICAgICAgICAgICAgLyogU29tZXRoaW5nIGNoYW5nZWQ6IGZvcmdldCB0aGUgY2FjaGVkIGZkIChidXQgZG9uJ3QgY2xvc2UgaXQsCisgICAgICAgICAgICAgICBzaW5jZSBpdCBwcm9iYWJseSBwb2ludHMgdG8gc29tZXRoaW5nIGltcG9ydGFudCBmb3Igc29tZQorICAgICAgICAgICAgICAgdGhpcmQtcGFydHkgY29kZSkuICovCisgICAgICAgICAgICB1cmFuZG9tX2NhY2hlLmZkID0gLTE7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKHVyYW5kb21fY2FjaGUuZmQgPj0gMCkKKyAgICAgICAgZmQgPSB1cmFuZG9tX2NhY2hlLmZkOworICAgIGVsc2UgeworICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgICAgIGZkID0gX1B5X29wZW4oIi9kZXYvdXJhbmRvbSIsIE9fUkRPTkxZKTsKKyAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKyAgICAgICAgaWYgKGZkIDwgMCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGVycm5vID09IEVOT0VOVCB8fCBlcnJubyA9PSBFTlhJTyB8fAorICAgICAgICAgICAgICAgIGVycm5vID09IEVOT0RFViB8fCBlcnJubyA9PSBFQUNDRVMpCisgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX05vdEltcGxlbWVudGVkRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIvZGV2L3VyYW5kb20gKG9yIGVxdWl2YWxlbnQpIG5vdCBmb3VuZCIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19PU0Vycm9yKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBpZiAodXJhbmRvbV9jYWNoZS5mZCA+PSAwKSB7CisgICAgICAgICAgICAvKiB1cmFuZG9tX2ZkIHdhcyBpbml0aWFsaXplZCBieSBhbm90aGVyIHRocmVhZCB3aGlsZSB3ZSB3ZXJlCisgICAgICAgICAgICAgICBub3QgaG9sZGluZyB0aGUgR0lMLCBrZWVwIGl0LiAqLworICAgICAgICAgICAgY2xvc2UoZmQpOworICAgICAgICAgICAgZmQgPSB1cmFuZG9tX2NhY2hlLmZkOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaWYgKGZzdGF0KGZkLCAmc3QpKSB7CisgICAgICAgICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOworICAgICAgICAgICAgICAgIGNsb3NlKGZkKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB1cmFuZG9tX2NhY2hlLmZkID0gZmQ7CisgICAgICAgICAgICAgICAgdXJhbmRvbV9jYWNoZS5zdF9kZXYgPSBzdC5zdF9kZXY7CisgICAgICAgICAgICAgICAgdXJhbmRvbV9jYWNoZS5zdF9pbm8gPSBzdC5zdF9pbm87CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9CiAKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCkBAIC0xOTUsMTMgKzIyNCwyMSBAQAogICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1J1bnRpbWVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAiRmFpbGVkIHRvIHJlYWQgJXppIGJ5dGVzIGZyb20gL2Rldi91cmFuZG9tIiwKICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplKTsKLSAgICAgICAgY2xvc2UoZmQpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQotICAgIGNsb3NlKGZkKTsKICAgICByZXR1cm4gMDsKIH0KLSNlbmRpZiAvKiAhZGVmaW5lZChNU19XSU5ET1dTKSAmJiAhZGVmaW5lZChfX1ZNUykgKi8KKworc3RhdGljIHZvaWQKK2Rldl91cmFuZG9tX2Nsb3NlKHZvaWQpCit7CisgICAgaWYgKHVyYW5kb21fY2FjaGUuZmQgPj0gMCkgeworICAgICAgICBjbG9zZSh1cmFuZG9tX2NhY2hlLmZkKTsKKyAgICAgICAgdXJhbmRvbV9jYWNoZS5mZCA9IC0xOworICAgIH0KK30KKworI2VuZGlmIC8qIEhBVkVfR0VURU5UUk9QWSAqLwogCiAvKiBGaWxsIGJ1ZmZlciB3aXRoIHBzZXVkby1yYW5kb20gYnl0ZXMgZ2VuZXJhdGVkIGJ5IGEgbGluZWFyIGNvbmdydWVudAogICAgZ2VuZXJhdG9yIChMQ0cpOgpAQCAtMjI1LDcgKzI2Miw3IEBACiB9CiAKIC8qIEZpbGwgYnVmZmVyIHdpdGggc2l6ZSBwc2V1ZG8tcmFuZG9tIGJ5dGVzIGZyb20gdGhlIG9wZXJhdGluZyBzeXN0ZW0gcmFuZG9tCi0gICBudW1iZXIgZ2VuZXJhdG9yIChSTkcpLiBJdCBpcyBzdWl0YWJsZSBmb3IgZm9yIG1vc3QgY3J5cHRvZ3JhcGhpYyBwdXJwb3NlcworICAgbnVtYmVyIGdlbmVyYXRvciAoUk5HKS4gSXQgaXMgc3VpdGFibGUgZm9yIG1vc3QgY3J5cHRvZ3JhcGhpYyBwdXJwb3NlcwogICAgZXhjZXB0IGxvbmcgbGl2aW5nIHByaXZhdGUga2V5cyBmb3IgYXN5bW1ldHJpYyBlbmNyeXB0aW9uLgogCiAgICBSZXR1cm4gMCBvbiBzdWNjZXNzLCByYWlzZSBhbiBleGNlcHRpb24gYW5kIHJldHVybiAtMSBvbiBlcnJvci4gKi8KQEAgLTI0MiwxMiArMjc5LDEwIEBACiAKICNpZmRlZiBNU19XSU5ET1dTCiAgICAgcmV0dXJuIHdpbjMyX3VyYW5kb20oKHVuc2lnbmVkIGNoYXIgKilidWZmZXIsIHNpemUsIDEpOworI2VsaWYgZGVmaW5lZChQWV9HRVRFTlRST1BZKQorICAgIHJldHVybiBweV9nZXRlbnRyb3B5KGJ1ZmZlciwgc2l6ZSwgMCk7CiAjZWxzZQotIyBpZmRlZiBfX1ZNUwotICAgIHJldHVybiB2bXNfdXJhbmRvbSgodW5zaWduZWQgY2hhciAqKWJ1ZmZlciwgc2l6ZSwgMSk7Ci0jIGVsc2UKICAgICByZXR1cm4gZGV2X3VyYW5kb21fcHl0aG9uKChjaGFyKilidWZmZXIsIHNpemUpOwotIyBlbmRpZgogI2VuZGlmCiB9CiAKQEAgLTI1NSw4ICsyOTAsOSBAQAogX1B5UmFuZG9tX0luaXQodm9pZCkKIHsKICAgICBjaGFyICplbnY7Ci0gICAgdm9pZCAqc2VjcmV0ID0gJl9QeV9IYXNoU2VjcmV0OworICAgIHVuc2lnbmVkIGNoYXIgKnNlY3JldCA9ICh1bnNpZ25lZCBjaGFyICopJl9QeV9IYXNoU2VjcmV0LnVjOwogICAgIFB5X3NzaXplX3Qgc2VjcmV0X3NpemUgPSBzaXplb2YoX1B5X0hhc2hTZWNyZXRfdCk7CisgICAgYXNzZXJ0KHNlY3JldF9zaXplID09IHNpemVvZihfUHlfSGFzaFNlY3JldC51YykpOwogCiAgICAgaWYgKF9QeV9IYXNoU2VjcmV0X0luaXRpYWxpemVkKQogICAgICAgICByZXR1cm47CkBAIC0yODQsMTggKzMyMCwzMSBAQAogICAgICAgICAgICAgbWVtc2V0KHNlY3JldCwgMCwgc2VjcmV0X3NpemUpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgbGNnX3VyYW5kb20oc2VlZCwgKHVuc2lnbmVkIGNoYXIqKXNlY3JldCwgc2VjcmV0X3NpemUpOworICAgICAgICAgICAgbGNnX3VyYW5kb20oc2VlZCwgc2VjcmV0LCBzZWNyZXRfc2l6ZSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgZWxzZSB7CiAjaWZkZWYgTVNfV0lORE9XUwotICAgICAgICAodm9pZCl3aW4zMl91cmFuZG9tKCh1bnNpZ25lZCBjaGFyICopc2VjcmV0LCBzZWNyZXRfc2l6ZSwgMCk7Ci0jZWxzZSAvKiAjaWZkZWYgTVNfV0lORE9XUyAqLwotIyBpZmRlZiBfX1ZNUwotICAgICAgICB2bXNfdXJhbmRvbSgodW5zaWduZWQgY2hhciAqKXNlY3JldCwgc2VjcmV0X3NpemUsIDApOwotIyBlbHNlCi0gICAgICAgIGRldl91cmFuZG9tX25vcmFpc2UoKGNoYXIqKXNlY3JldCwgc2VjcmV0X3NpemUpOwotIyBlbmRpZgorICAgICAgICAodm9pZCl3aW4zMl91cmFuZG9tKHNlY3JldCwgc2VjcmV0X3NpemUsIDApOworI2VsaWYgZGVmaW5lZChQWV9HRVRFTlRST1BZKQorICAgICAgICAodm9pZClweV9nZXRlbnRyb3B5KHNlY3JldCwgc2VjcmV0X3NpemUsIDEpOworI2Vsc2UKKyAgICAgICAgZGV2X3VyYW5kb21fbm9yYWlzZShzZWNyZXQsIHNlY3JldF9zaXplKTsKICNlbmRpZgogICAgIH0KIH0KKwordm9pZAorX1B5UmFuZG9tX0Zpbmkodm9pZCkKK3sKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgaWYgKGhDcnlwdFByb3YpIHsKKyAgICAgICAgQ3J5cHRSZWxlYXNlQ29udGV4dChoQ3J5cHRQcm92LCAwKTsKKyAgICAgICAgaENyeXB0UHJvdiA9IDA7CisgICAgfQorI2VsaWYgZGVmaW5lZChQWV9HRVRFTlRST1BZKQorICAgIC8qIG5vdGhpbmcgdG8gY2xlYW4gKi8KKyNlbHNlCisgICAgZGV2X3VyYW5kb21fY2xvc2UoKTsKKyNlbmRpZgorfQpkaWZmIC0tZ2l0IGEvUHl0aG9uL3N0cmR1cC5jIGIvUHl0aG9uL3N0cmR1cC5jCmluZGV4IDIwMTg3ZTAuLjc2OWQzZGIgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9zdHJkdXAuYworKysgYi9QeXRob24vc3RyZHVwLmMKQEAgLTYsNyArNiw3IEBACiBzdHJkdXAoY29uc3QgY2hhciAqc3RyKQogewogCWlmIChzdHIgIT0gTlVMTCkgewotCQlyZWdpc3RlciBjaGFyICpjb3B5ID0gbWFsbG9jKHN0cmxlbihzdHIpICsgMSk7CisJCWNoYXIgKmNvcHkgPSBtYWxsb2Moc3RybGVuKHN0cikgKyAxKTsKIAkJaWYgKGNvcHkgIT0gTlVMTCkKIAkJCXJldHVybiBzdHJjcHkoY29weSwgc3RyKTsKIAl9CmRpZmYgLS1naXQgYS9QeXRob24vc3ltdGFibGUuYyBiL1B5dGhvbi9zeW10YWJsZS5jCmluZGV4IDFlMTNiNzkwLi45NTEyNjczIDEwMDY0NAotLS0gYS9QeXRob24vc3ltdGFibGUuYworKysgYi9QeXRob24vc3ltdGFibGUuYwpAQCAtMzcsMjQgKzM3LDE0IEBACiAgICAgc3RlLT5zdGVfdGFibGUgPSBzdDsKICAgICBzdGUtPnN0ZV9pZCA9IGs7IC8qIHN0ZSBvd25zIHJlZmVyZW5jZSB0byBrICovCiAKLSAgICBzdGUtPnN0ZV9uYW1lID0gbmFtZTsKICAgICBQeV9JTkNSRUYobmFtZSk7CisgICAgc3RlLT5zdGVfbmFtZSA9IG5hbWU7CiAKICAgICBzdGUtPnN0ZV9zeW1ib2xzID0gTlVMTDsKICAgICBzdGUtPnN0ZV92YXJuYW1lcyA9IE5VTEw7CiAgICAgc3RlLT5zdGVfY2hpbGRyZW4gPSBOVUxMOwogCi0gICAgc3RlLT5zdGVfc3ltYm9scyA9IFB5RGljdF9OZXcoKTsKLSAgICBpZiAoc3RlLT5zdGVfc3ltYm9scyA9PSBOVUxMKQotICAgICAgICBnb3RvIGZhaWw7Ci0KLSAgICBzdGUtPnN0ZV92YXJuYW1lcyA9IFB5TGlzdF9OZXcoMCk7Ci0gICAgaWYgKHN0ZS0+c3RlX3Zhcm5hbWVzID09IE5VTEwpCi0gICAgICAgIGdvdG8gZmFpbDsKLQotICAgIHN0ZS0+c3RlX2NoaWxkcmVuID0gUHlMaXN0X05ldygwKTsKLSAgICBpZiAoc3RlLT5zdGVfY2hpbGRyZW4gPT0gTlVMTCkKLSAgICAgICAgZ290byBmYWlsOworICAgIHN0ZS0+c3RlX2RpcmVjdGl2ZXMgPSBOVUxMOwogCiAgICAgc3RlLT5zdGVfdHlwZSA9IGJsb2NrOwogICAgIHN0ZS0+c3RlX3Vub3B0aW1pemVkID0gMDsKQEAgLTc1LDYgKzY1LDE1IEBACiAgICAgc3RlLT5zdGVfY2hpbGRfZnJlZSA9IDA7CiAgICAgc3RlLT5zdGVfZ2VuZXJhdG9yID0gMDsKICAgICBzdGUtPnN0ZV9yZXR1cm5zX3ZhbHVlID0gMDsKKyAgICBzdGUtPnN0ZV9uZWVkc19jbGFzc19jbG9zdXJlID0gMDsKKworICAgIHN0ZS0+c3RlX3N5bWJvbHMgPSBQeURpY3RfTmV3KCk7CisgICAgc3RlLT5zdGVfdmFybmFtZXMgPSBQeUxpc3RfTmV3KDApOworICAgIHN0ZS0+c3RlX2NoaWxkcmVuID0gUHlMaXN0X05ldygwKTsKKyAgICBpZiAoc3RlLT5zdGVfc3ltYm9scyA9PSBOVUxMCisgICAgICAgIHx8IHN0ZS0+c3RlX3Zhcm5hbWVzID09IE5VTEwKKyAgICAgICAgfHwgc3RlLT5zdGVfY2hpbGRyZW4gPT0gTlVMTCkKKyAgICAgICAgZ290byBmYWlsOwogCiAgICAgaWYgKFB5RGljdF9TZXRJdGVtKHN0LT5zdF9ibG9ja3MsIHN0ZS0+c3RlX2lkLCAoUHlPYmplY3QgKilzdGUpIDwgMCkKICAgICAgICAgZ290byBmYWlsOwpAQCAtMTAyLDYgKzEwMSw3IEBACiAgICAgUHlfWERFQ1JFRihzdGUtPnN0ZV9zeW1ib2xzKTsKICAgICBQeV9YREVDUkVGKHN0ZS0+c3RlX3Zhcm5hbWVzKTsKICAgICBQeV9YREVDUkVGKHN0ZS0+c3RlX2NoaWxkcmVuKTsKKyAgICBQeV9YREVDUkVGKHN0ZS0+c3RlX2RpcmVjdGl2ZXMpOwogICAgIFB5T2JqZWN0X0RlbChzdGUpOwogfQogCkBAIC0xODgsNyArMTg4LDcgQEAKIAogc3RhdGljIGlkZW50aWZpZXIgdG9wID0gTlVMTCwgbGFtYmRhID0gTlVMTCwgZ2VuZXhwciA9IE5VTEwsCiAgICAgbGlzdGNvbXAgPSBOVUxMLCBzZXRjb21wID0gTlVMTCwgZGljdGNvbXAgPSBOVUxMLAotICAgIF9fY2xhc3NfXyA9IE5VTEwsIF9fbG9jYWxzX18gPSBOVUxMOworICAgIF9fY2xhc3NfXyA9IE5VTEw7CiAKICNkZWZpbmUgR0VUX0lERU5USUZJRVIoVkFSKSBcCiAgICAgKChWQVIpID8gKFZBUikgOiAoKFZBUikgPSBQeVVuaWNvZGVfSW50ZXJuRnJvbVN0cmluZygjIFZBUikpKQpAQCAtMjMzLDcgKzIzMyw3IEBACiAjZGVmaW5lIENPTVBJTEVSX1NUQUNLX0ZSQU1FX1NDQUxFIDMKIAogc3RydWN0IHN5bXRhYmxlICoKLVB5U3ltdGFibGVfQnVpbGQobW9kX3R5IG1vZCwgY29uc3QgY2hhciAqZmlsZW5hbWUsIFB5RnV0dXJlRmVhdHVyZXMgKmZ1dHVyZSkKK1B5U3ltdGFibGVfQnVpbGRPYmplY3QobW9kX3R5IG1vZCwgUHlPYmplY3QgKmZpbGVuYW1lLCBQeUZ1dHVyZUZlYXR1cmVzICpmdXR1cmUpCiB7CiAgICAgc3RydWN0IHN5bXRhYmxlICpzdCA9IHN5bXRhYmxlX25ldygpOwogICAgIGFzZGxfc2VxICpzZXE7CkBAIC0yNDIsNyArMjQyLDEyIEBACiAgICAgaW50IHJlY3Vyc2lvbl9saW1pdCA9IFB5X0dldFJlY3Vyc2lvbkxpbWl0KCk7CiAKICAgICBpZiAoc3QgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIHN0OworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoZmlsZW5hbWUgPT0gTlVMTCkgeworICAgICAgICBQeVN5bXRhYmxlX0ZyZWUoc3QpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgUHlfSU5DUkVGKGZpbGVuYW1lKTsKICAgICBzdC0+c3RfZmlsZW5hbWUgPSBmaWxlbmFtZTsKICAgICBzdC0+c3RfZnV0dXJlID0gZnV0dXJlOwogCkBAIC0zMDYsOSArMzExLDIzIEBACiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKK3N0cnVjdCBzeW10YWJsZSAqCitQeVN5bXRhYmxlX0J1aWxkKG1vZF90eSBtb2QsIGNvbnN0IGNoYXIgKmZpbGVuYW1lX3N0ciwgUHlGdXR1cmVGZWF0dXJlcyAqZnV0dXJlKQoreworICAgIFB5T2JqZWN0ICpmaWxlbmFtZTsKKyAgICBzdHJ1Y3Qgc3ltdGFibGUgKnN0OworICAgIGZpbGVuYW1lID0gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdChmaWxlbmFtZV9zdHIpOworICAgIGlmIChmaWxlbmFtZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBzdCA9IFB5U3ltdGFibGVfQnVpbGRPYmplY3QobW9kLCBmaWxlbmFtZSwgZnV0dXJlKTsKKyAgICBQeV9ERUNSRUYoZmlsZW5hbWUpOworICAgIHJldHVybiBzdDsKK30KKwogdm9pZAogUHlTeW10YWJsZV9GcmVlKHN0cnVjdCBzeW10YWJsZSAqc3QpCiB7CisgICAgUHlfWERFQ1JFRihzdC0+c3RfZmlsZW5hbWUpOwogICAgIFB5X1hERUNSRUYoc3QtPnN0X2Jsb2Nrcyk7CiAgICAgUHlfWERFQ1JFRihzdC0+c3Rfc3RhY2spOwogICAgIFB5TWVtX0ZyZWUoKHZvaWQgKilzdCk7CkBAIC0zNDYsNiArMzY1LDI0IEBACiAgICAgcmV0dXJuIChQeUxvbmdfQVNfTE9ORyh2KSA+PiBTQ09QRV9PRkZTRVQpICYgU0NPUEVfTUFTSzsKIH0KIAorc3RhdGljIGludAorZXJyb3JfYXRfZGlyZWN0aXZlKFB5U1RFbnRyeU9iamVjdCAqc3RlLCBQeU9iamVjdCAqbmFtZSkKK3sKKyAgICBQeV9zc2l6ZV90IGk7CisgICAgUHlPYmplY3QgKmRhdGE7CisgICAgYXNzZXJ0KHN0ZS0+c3RlX2RpcmVjdGl2ZXMpOworICAgIGZvciAoaSA9IDA7IDsgaSsrKSB7CisgICAgICAgIGRhdGEgPSBQeUxpc3RfR0VUX0lURU0oc3RlLT5zdGVfZGlyZWN0aXZlcywgaSk7CisgICAgICAgIGFzc2VydChQeVR1cGxlX0NoZWNrRXhhY3QoZGF0YSkpOworICAgICAgICBpZiAoUHlUdXBsZV9HRVRfSVRFTShkYXRhLCAwKSA9PSBuYW1lKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIFB5RXJyX1N5bnRheExvY2F0aW9uT2JqZWN0KHN0ZS0+c3RlX3RhYmxlLT5zdF9maWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUxvbmdfQXNMb25nKFB5VHVwbGVfR0VUX0lURU0oZGF0YSwgMSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5TG9uZ19Bc0xvbmcoUHlUdXBsZV9HRVRfSVRFTShkYXRhLCAyKSkpOworICAgIHJldHVybiAwOworfQorCiAKIC8qIEFuYWx5emUgcmF3IHN5bWJvbCBpbmZvcm1hdGlvbiB0byBkZXRlcm1pbmUgc2NvcGUgb2YgZWFjaCBuYW1lLgogCkBAIC00MjAsMTYgKzQ1NywxMyBAQAogICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1N5bnRheEVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUgJyVVJyBpcyBwYXJhbWV0ZXIgYW5kIGdsb2JhbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lKTsKLSAgICAgICAgICAgIFB5RXJyX1N5bnRheExvY2F0aW9uRXgoc3RlLT5zdGVfdGFibGUtPnN0X2ZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGUtPnN0ZV9saW5lbm8sIHN0ZS0+c3RlX2NvbF9vZmZzZXQpOwotCi0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcl9hdF9kaXJlY3RpdmUoc3RlLCBuYW1lKTsKICAgICAgICAgfQogICAgICAgICBpZiAoZmxhZ3MgJiBERUZfTk9OTE9DQUwpIHsKICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19TeW50YXhFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSAnJVUnIGlzIG5vbmxvY2FsIGFuZCBnbG9iYWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUpOwotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICByZXR1cm4gZXJyb3JfYXRfZGlyZWN0aXZlKHN0ZSwgbmFtZSk7CiAgICAgICAgIH0KICAgICAgICAgU0VUX1NDT1BFKHNjb3BlcywgbmFtZSwgR0xPQkFMX0VYUExJQ0lUKTsKICAgICAgICAgaWYgKFB5U2V0X0FkZChnbG9iYWwsIG5hbWUpIDwgMCkKQEAgLTQ0MywxOSArNDc3LDE5IEBACiAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfU3ludGF4RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUgJyVVJyBpcyBwYXJhbWV0ZXIgYW5kIG5vbmxvY2FsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lKTsKLSAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgcmV0dXJuIGVycm9yX2F0X2RpcmVjdGl2ZShzdGUsIG5hbWUpOwogICAgICAgICB9CiAgICAgICAgIGlmICghYm91bmQpIHsKICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19TeW50YXhFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAibm9ubG9jYWwgZGVjbGFyYXRpb24gbm90IGFsbG93ZWQgYXQgbW9kdWxlIGxldmVsIik7Ci0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcl9hdF9kaXJlY3RpdmUoc3RlLCBuYW1lKTsKICAgICAgICAgfQogICAgICAgICBpZiAoIVB5U2V0X0NvbnRhaW5zKGJvdW5kLCBuYW1lKSkgewogICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1N5bnRheEVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICJubyBiaW5kaW5nIGZvciBub25sb2NhbCAnJVUnIGZvdW5kIiwKICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lKTsKIAotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICByZXR1cm4gZXJyb3JfYXRfZGlyZWN0aXZlKHN0ZSwgbmFtZSk7CiAgICAgICAgIH0KICAgICAgICAgU0VUX1NDT1BFKHNjb3BlcywgbmFtZSwgRlJFRSk7CiAgICAgICAgIHN0ZS0+c3RlX2ZyZWUgPSAxOwpAQCAtNTAwLDEzICs1MzQsMTAgQEAKIAogICAgTm90ZSB0aGF0IHRoZSBjdXJyZW50IGJsb2NrJ3MgZnJlZSB2YXJpYWJsZXMgYXJlIGluY2x1ZGVkIGluIGZyZWUuCiAgICBUaGF0J3Mgc2FmZSBiZWNhdXNlIG5vIG5hbWUgY2FuIGJlIGZyZWUgYW5kIGxvY2FsIGluIHRoZSBzYW1lIHNjb3BlLgotCi0gICBUaGUgJ3Jlc3RyaWN0ZWQnIGFyZ3VtZW50IG1heSBiZSBzZXQgdG8gYSBzdHJpbmcgdG8gcmVzdHJpY3QgdGhlIGFuYWx5c2lzCi0gICB0byB0aGUgb25lIHZhcmlhYmxlIHdob3NlIG5hbWUgZXF1YWxzIHRoYXQgc3RyaW5nIChlLmcuICJfX2NsYXNzX18iKS4KICovCiAKIHN0YXRpYyBpbnQKLWFuYWx5emVfY2VsbHMoUHlPYmplY3QgKnNjb3BlcywgUHlPYmplY3QgKmZyZWUsIGNvbnN0IGNoYXIgKnJlc3RyaWN0ZWQpCithbmFseXplX2NlbGxzKFB5T2JqZWN0ICpzY29wZXMsIFB5T2JqZWN0ICpmcmVlKQogewogICAgIFB5T2JqZWN0ICpuYW1lLCAqdiwgKnZfY2VsbDsKICAgICBpbnQgc3VjY2VzcyA9IDA7CkBAIC01MjMsOSArNTU0LDYgQEAKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBpZiAoIVB5U2V0X0NvbnRhaW5zKGZyZWUsIG5hbWUpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChyZXN0cmljdGVkICE9IE5VTEwgJiYKLSAgICAgICAgICAgIFB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKG5hbWUsIHJlc3RyaWN0ZWQpKQotICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIC8qIFJlcGxhY2UgTE9DQUwgd2l0aCBDRUxMIGZvciB0aGlzIG5hbWUsIGFuZCByZW1vdmUKICAgICAgICAgICAgZnJvbSBmcmVlLiBJdCBpcyBzYWZlIHRvIHJlcGxhY2UgdGhlIHZhbHVlIG9mIG5hbWUKICAgICAgICAgICAgaW4gdGhlIGRpY3QsIGJlY2F1c2UgaXQgd2lsbCBub3QgY2F1c2UgYSByZXNpemUuCkBAIC01NDEsMzIgKzU2OSwxOCBAQAogICAgIHJldHVybiBzdWNjZXNzOwogfQogCi0vKiBDaGVjayBmb3IgaWxsZWdhbCBzdGF0ZW1lbnRzIGluIHVub3B0aW1pemVkIG5hbWVzcGFjZXMgKi8KIHN0YXRpYyBpbnQKLWNoZWNrX3Vub3B0aW1pemVkKGNvbnN0IFB5U1RFbnRyeU9iamVjdCogc3RlKSB7Ci0gICAgY29uc3QgY2hhciogdHJhaWxlcjsKLQotICAgIGlmIChzdGUtPnN0ZV90eXBlICE9IEZ1bmN0aW9uQmxvY2sgfHwgIXN0ZS0+c3RlX3Vub3B0aW1pemVkCi0gICAgICAgIHx8ICEoc3RlLT5zdGVfZnJlZSB8fCBzdGUtPnN0ZV9jaGlsZF9mcmVlKSkKLSAgICAgICAgcmV0dXJuIDE7Ci0KLSAgICB0cmFpbGVyID0gKHN0ZS0+c3RlX2NoaWxkX2ZyZWUgPwotICAgICAgICAgICAgICAgICAgICJjb250YWlucyBhIG5lc3RlZCBmdW5jdGlvbiB3aXRoIGZyZWUgdmFyaWFibGVzIiA6Ci0gICAgICAgICAgICAgICAgICAgImlzIGEgbmVzdGVkIGZ1bmN0aW9uIik7Ci0KLSAgICBzd2l0Y2ggKHN0ZS0+c3RlX3Vub3B0aW1pemVkKSB7Ci0gICAgY2FzZSBPUFRfVE9QTEVWRUw6IC8qIGltcG9ydCAqIGF0IHRvcC1sZXZlbCBpcyBmaW5lICovCi0gICAgICAgIHJldHVybiAxOwotICAgIGNhc2UgT1BUX0lNUE9SVF9TVEFSOgotICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfU3ludGF4RXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAiaW1wb3J0ICogaXMgbm90IGFsbG93ZWQgaW4gZnVuY3Rpb24gJyVVJyBiZWNhdXNlIGl0ICVzIiwKLSAgICAgICAgICAgICAgICAgICAgIHN0ZS0+c3RlX25hbWUsIHRyYWlsZXIpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBQeUVycl9TeW50YXhMb2NhdGlvbkV4KHN0ZS0+c3RlX3RhYmxlLT5zdF9maWxlbmFtZSwgc3RlLT5zdGVfb3B0X2xpbmVubywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZS0+c3RlX29wdF9jb2xfb2Zmc2V0KTsKLSAgICByZXR1cm4gMDsKK2Ryb3BfY2xhc3NfZnJlZShQeVNURW50cnlPYmplY3QgKnN0ZSwgUHlPYmplY3QgKmZyZWUpCit7CisgICAgaW50IHJlczsKKyAgICBpZiAoIUdFVF9JREVOVElGSUVSKF9fY2xhc3NfXykpCisgICAgICAgIHJldHVybiAwOworICAgIHJlcyA9IFB5U2V0X0Rpc2NhcmQoZnJlZSwgX19jbGFzc19fKTsKKyAgICBpZiAocmVzIDwgMCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKHJlcykKKyAgICAgICAgc3RlLT5zdGVfbmVlZHNfY2xhc3NfY2xvc3VyZSA9IDE7CisgICAgcmV0dXJuIDE7CiB9CiAKIC8qIEVudGVyIHRoZSBmaW5hbCBzY29wZSBpbmZvcm1hdGlvbiBpbnRvIHRoZSBzdGVfc3ltYm9scyBkaWN0LgpAQCAtNzcxLDcgKzc4NSw2IEBACiAgICAgICAgIC8qIFNwZWNpYWwtY2FzZSBfX2NsYXNzX18gKi8KICAgICAgICAgaWYgKCFHRVRfSURFTlRJRklFUihfX2NsYXNzX18pKQogICAgICAgICAgICAgZ290byBlcnJvcjsKLSAgICAgICAgYXNzZXJ0KFB5U2V0X0NvbnRhaW5zKGxvY2FsLCBfX2NsYXNzX18pID09IDEpOwogICAgICAgICBpZiAoUHlTZXRfQWRkKG5ld2JvdW5kLCBfX2NsYXNzX18pIDwgMCkKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQpAQCAtODA0LDE4ICs4MTcsMTQgQEAKICAgICBQeV9ERUNSRUYodGVtcCk7CiAKICAgICAvKiBDaGVjayBpZiBhbnkgbG9jYWwgdmFyaWFibGVzIG11c3QgYmUgY29udmVydGVkIHRvIGNlbGwgdmFyaWFibGVzICovCi0gICAgaWYgKHN0ZS0+c3RlX3R5cGUgPT0gRnVuY3Rpb25CbG9jayAmJiAhYW5hbHl6ZV9jZWxscyhzY29wZXMsIG5ld2ZyZWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKSkKKyAgICBpZiAoc3RlLT5zdGVfdHlwZSA9PSBGdW5jdGlvbkJsb2NrICYmICFhbmFseXplX2NlbGxzKHNjb3BlcywgbmV3ZnJlZSkpCiAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgZWxzZSBpZiAoc3RlLT5zdGVfdHlwZSA9PSBDbGFzc0Jsb2NrICYmICFhbmFseXplX2NlbGxzKHNjb3BlcywgbmV3ZnJlZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl9fY2xhc3NfXyIpKQorICAgIGVsc2UgaWYgKHN0ZS0+c3RlX3R5cGUgPT0gQ2xhc3NCbG9jayAmJiAhZHJvcF9jbGFzc19mcmVlKHN0ZSwgbmV3ZnJlZSkpCiAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgLyogUmVjb3JkcyB0aGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMgaW4gdGhlIHN5bWJvbCB0YWJsZSBlbnRyeSAqLwogICAgIGlmICghdXBkYXRlX3N5bWJvbHMoc3RlLT5zdGVfc3ltYm9scywgc2NvcGVzLCBib3VuZCwgbmV3ZnJlZSwKICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZS0+c3RlX3R5cGUgPT0gQ2xhc3NCbG9jaykpCiAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgaWYgKCFjaGVja191bm9wdGltaXplZChzdGUpKQotICAgICAgICBnb3RvIGVycm9yOwogCiAgICAgdGVtcCA9IFB5TnVtYmVyX0luUGxhY2VPcihmcmVlLCBuZXdmcmVlKTsKICAgICBpZiAoIXRlbXApCkBAIC04OTksMTUgKzkwOCwyMCBAQAogc3RhdGljIGludAogc3ltdGFibGVfd2FybihzdHJ1Y3Qgc3ltdGFibGUgKnN0LCBjaGFyICptc2csIGludCBsaW5lbm8pCiB7Ci0gICAgaWYgKFB5RXJyX1dhcm5FeHBsaWNpdChQeUV4Y19TeW50YXhXYXJuaW5nLCBtc2csIHN0LT5zdF9maWxlbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVubywgTlVMTCwgTlVMTCkgPCAwKSAgICAgeworICAgIFB5T2JqZWN0ICptZXNzYWdlID0gUHlVbmljb2RlX0Zyb21TdHJpbmcobXNnKTsKKyAgICBpZiAobWVzc2FnZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAoUHlFcnJfV2FybkV4cGxpY2l0T2JqZWN0KFB5RXhjX1N5bnRheFdhcm5pbmcsIG1lc3NhZ2UsIHN0LT5zdF9maWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVubywgTlVMTCwgTlVMTCkgPCAwKSAgICAgeworICAgICAgICBQeV9ERUNSRUYobWVzc2FnZSk7CiAgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX1N5bnRheFdhcm5pbmcpKSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfU3ludGF4RXJyb3IsIG1zZyk7Ci0gICAgICAgICAgICBQeUVycl9TeW50YXhMb2NhdGlvbkV4KHN0LT5zdF9maWxlbmFtZSwgc3QtPnN0X2N1ci0+c3RlX2xpbmVubywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3QtPnN0X2N1ci0+c3RlX2NvbF9vZmZzZXQpOworICAgICAgICAgICAgUHlFcnJfU3ludGF4TG9jYXRpb25PYmplY3Qoc3QtPnN0X2ZpbGVuYW1lLCBzdC0+c3RfY3VyLT5zdGVfbGluZW5vLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3QtPnN0X2N1ci0+c3RlX2NvbF9vZmZzZXQpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KKyAgICBQeV9ERUNSRUYobWVzc2FnZSk7CiAgICAgcmV0dXJuIDE7CiB9CiAKQEAgLTk5MCw5ICsxMDA0LDkgQEAKICAgICAgICAgaWYgKChmbGFnICYgREVGX1BBUkFNKSAmJiAodmFsICYgREVGX1BBUkFNKSkgewogICAgICAgICAgICAgLyogSXMgaXQgYmV0dGVyIHRvIHVzZSAnbWFuZ2xlZCcgb3IgJ25hbWUnIGhlcmU/ICovCiAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfU3ludGF4RXJyb3IsIERVUExJQ0FURV9BUkdVTUVOVCwgbmFtZSk7Ci0gICAgICAgICAgICBQeUVycl9TeW50YXhMb2NhdGlvbkV4KHN0LT5zdF9maWxlbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3QtPnN0X2N1ci0+c3RlX2xpbmVubywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3QtPnN0X2N1ci0+c3RlX2NvbF9vZmZzZXQpOworICAgICAgICAgICAgUHlFcnJfU3ludGF4TG9jYXRpb25PYmplY3Qoc3QtPnN0X2ZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3QtPnN0X2N1ci0+c3RlX2xpbmVubywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0LT5zdF9jdXItPnN0ZV9jb2xfb2Zmc2V0KTsKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgIH0KICAgICAgICAgdmFsIHw9IGZsYWc7CkBAIC0xMTAyLDYgKzExMTYsMjUgQEAKIAogCiBzdGF0aWMgaW50CitzeW10YWJsZV9yZWNvcmRfZGlyZWN0aXZlKHN0cnVjdCBzeW10YWJsZSAqc3QsIGlkZW50aWZpZXIgbmFtZSwgc3RtdF90eSBzKQoreworICAgIFB5T2JqZWN0ICpkYXRhOworICAgIGludCByZXM7CisgICAgaWYgKCFzdC0+c3RfY3VyLT5zdGVfZGlyZWN0aXZlcykgeworICAgICAgICBzdC0+c3RfY3VyLT5zdGVfZGlyZWN0aXZlcyA9IFB5TGlzdF9OZXcoMCk7CisgICAgICAgIGlmICghc3QtPnN0X2N1ci0+c3RlX2RpcmVjdGl2ZXMpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgZGF0YSA9IFB5X0J1aWxkVmFsdWUoIihPaWkpIiwgbmFtZSwgcy0+bGluZW5vLCBzLT5jb2xfb2Zmc2V0KTsKKyAgICBpZiAoIWRhdGEpCisgICAgICAgIHJldHVybiAwOworICAgIHJlcyA9IFB5TGlzdF9BcHBlbmQoc3QtPnN0X2N1ci0+c3RlX2RpcmVjdGl2ZXMsIGRhdGEpOworICAgIFB5X0RFQ1JFRihkYXRhKTsKKyAgICByZXR1cm4gcmVzID09IDA7Cit9CisKKworc3RhdGljIGludAogc3ltdGFibGVfdmlzaXRfc3RtdChzdHJ1Y3Qgc3ltdGFibGUgKnN0LCBzdG10X3R5IHMpCiB7CiAgICAgaWYgKCsrc3QtPnJlY3Vyc2lvbl9kZXB0aCA+IHN0LT5yZWN1cnNpb25fbGltaXQpIHsKQEAgLTExNDYsMTMgKzExNzksNiBAQAogICAgICAgICBpZiAoIXN5bXRhYmxlX2VudGVyX2Jsb2NrKHN0LCBzLT52LkNsYXNzRGVmLm5hbWUsIENsYXNzQmxvY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKilzLCBzLT5saW5lbm8sIHMtPmNvbF9vZmZzZXQpKQogICAgICAgICAgICAgVklTSVRfUVVJVChzdCwgMCk7Ci0gICAgICAgIGlmICghR0VUX0lERU5USUZJRVIoX19jbGFzc19fKSB8fAotICAgICAgICAgICAgIXN5bXRhYmxlX2FkZF9kZWYoc3QsIF9fY2xhc3NfXywgREVGX0xPQ0FMKSB8fAotICAgICAgICAgICAgIUdFVF9JREVOVElGSUVSKF9fbG9jYWxzX18pIHx8Ci0gICAgICAgICAgICAhc3ltdGFibGVfYWRkX2RlZihzdCwgX19sb2NhbHNfXywgREVGX1BBUkFNKSkgewotICAgICAgICAgICAgc3ltdGFibGVfZXhpdF9ibG9jayhzdCwgcyk7Ci0gICAgICAgICAgICBWSVNJVF9RVUlUKHN0LCAwKTsKLSAgICAgICAgfQogICAgICAgICB0bXAgPSBzdC0+c3RfcHJpdmF0ZTsKICAgICAgICAgc3QtPnN0X3ByaXZhdGUgPSBzLT52LkNsYXNzRGVmLm5hbWU7CiAgICAgICAgIFZJU0lUX1NFUShzdCwgc3RtdCwgcy0+di5DbGFzc0RlZi5ib2R5KTsKQEAgLTEyNDAsMTQgKzEyNjYsNyBAQAogICAgICAgICBhc2RsX3NlcSAqc2VxID0gcy0+di5HbG9iYWwubmFtZXM7CiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBhc2RsX3NlcV9MRU4oc2VxKTsgaSsrKSB7CiAgICAgICAgICAgICBpZGVudGlmaWVyIG5hbWUgPSAoaWRlbnRpZmllcilhc2RsX3NlcV9HRVQoc2VxLCBpKTsKLSAgICAgICAgICAgIGxvbmcgY3VyOwotICAgICAgICAgICAgaWYgKHN0LT5zdF9jdXItPnN0ZV90eXBlID09IENsYXNzQmxvY2sgJiYKLSAgICAgICAgICAgICAgICAhUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcobmFtZSwgIl9fY2xhc3NfXyIpKSB7Ci0gICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1N5bnRheEVycm9yLCAiY2Fubm90IG1ha2UgX19jbGFzc19fIGdsb2JhbCIpOwotICAgICAgICAgICAgICAgIFB5RXJyX1N5bnRheExvY2F0aW9uRXgoc3QtPnN0X2ZpbGVuYW1lLCBzLT5saW5lbm8sIHMtPmNvbF9vZmZzZXQpOwotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY3VyID0gc3ltdGFibGVfbG9va3VwKHN0LCBuYW1lKTsKKyAgICAgICAgICAgIGxvbmcgY3VyID0gc3ltdGFibGVfbG9va3VwKHN0LCBuYW1lKTsKICAgICAgICAgICAgIGlmIChjdXIgPCAwKQogICAgICAgICAgICAgICAgIFZJU0lUX1FVSVQoc3QsIDApOwogICAgICAgICAgICAgaWYgKGN1ciAmIChERUZfTE9DQUwgfCBVU0UpKSB7CkBAIC0xMjY4LDYgKzEyODcsOCBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKCFzeW10YWJsZV9hZGRfZGVmKHN0LCBuYW1lLCBERUZfR0xPQkFMKSkKICAgICAgICAgICAgICAgICBWSVNJVF9RVUlUKHN0LCAwKTsKKyAgICAgICAgICAgIGlmICghc3ltdGFibGVfcmVjb3JkX2RpcmVjdGl2ZShzdCwgbmFtZSwgcykpCisgICAgICAgICAgICAgICAgVklTSVRfUVVJVChzdCwgMCk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMTI5Nyw2ICsxMzE4LDggQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICghc3ltdGFibGVfYWRkX2RlZihzdCwgbmFtZSwgREVGX05PTkxPQ0FMKSkKICAgICAgICAgICAgICAgICBWSVNJVF9RVUlUKHN0LCAwKTsKKyAgICAgICAgICAgIGlmICghc3ltdGFibGVfcmVjb3JkX2RpcmVjdGl2ZShzdCwgbmFtZSwgcykpCisgICAgICAgICAgICAgICAgVklTSVRfUVVJVChzdCwgMCk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMTQwNyw2ICsxNDMwLDcgQEAKICAgICBjYXNlIFN0cl9raW5kOgogICAgIGNhc2UgQnl0ZXNfa2luZDoKICAgICBjYXNlIEVsbGlwc2lzX2tpbmQ6CisgICAgY2FzZSBOYW1lQ29uc3RhbnRfa2luZDoKICAgICAgICAgLyogTm90aGluZyB0byBkbyBoZXJlLiAqLwogICAgICAgICBicmVhazsKICAgICAvKiBUaGUgZm9sbG93aW5nIGV4cHJzIGNhbiBiZSBhc3NpZ25tZW50IHRhcmdldHMuICovCkBAIC0xNDk5LDEwICsxNTIzLDEwIEBACiAKICAgICBpZiAoYS0+YXJncyAmJiAhc3ltdGFibGVfdmlzaXRfYXJnYW5ub3RhdGlvbnMoc3QsIGEtPmFyZ3MpKQogICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoYS0+dmFyYXJnYW5ub3RhdGlvbikKLSAgICAgICAgVklTSVQoc3QsIGV4cHIsIGEtPnZhcmFyZ2Fubm90YXRpb24pOwotICAgIGlmIChhLT5rd2FyZ2Fubm90YXRpb24pCi0gICAgICAgIFZJU0lUKHN0LCBleHByLCBhLT5rd2FyZ2Fubm90YXRpb24pOworICAgIGlmIChhLT52YXJhcmcgJiYgYS0+dmFyYXJnLT5hbm5vdGF0aW9uKQorICAgICAgICBWSVNJVChzdCwgZXhwciwgYS0+dmFyYXJnLT5hbm5vdGF0aW9uKTsKKyAgICBpZiAoYS0+a3dhcmcgJiYgYS0+a3dhcmctPmFubm90YXRpb24pCisgICAgICAgIFZJU0lUKHN0LCBleHByLCBhLT5rd2FyZy0+YW5ub3RhdGlvbik7CiAgICAgaWYgKGEtPmt3b25seWFyZ3MgJiYgIXN5bXRhYmxlX3Zpc2l0X2FyZ2Fubm90YXRpb25zKHN0LCBhLT5rd29ubHlhcmdzKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgaWYgKHMtPnYuRnVuY3Rpb25EZWYucmV0dXJucykKQEAgLTE1MjEsMTIgKzE1NDUsMTIgQEAKICAgICBpZiAoYS0+a3dvbmx5YXJncyAmJiAhc3ltdGFibGVfdmlzaXRfcGFyYW1zKHN0LCBhLT5rd29ubHlhcmdzKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgaWYgKGEtPnZhcmFyZykgewotICAgICAgICBpZiAoIXN5bXRhYmxlX2FkZF9kZWYoc3QsIGEtPnZhcmFyZywgREVGX1BBUkFNKSkKKyAgICAgICAgaWYgKCFzeW10YWJsZV9hZGRfZGVmKHN0LCBhLT52YXJhcmctPmFyZywgREVGX1BBUkFNKSkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICBzdC0+c3RfY3VyLT5zdGVfdmFyYXJncyA9IDE7CiAgICAgfQogICAgIGlmIChhLT5rd2FyZykgewotICAgICAgICBpZiAoIXN5bXRhYmxlX2FkZF9kZWYoc3QsIGEtPmt3YXJnLCBERUZfUEFSQU0pKQorICAgICAgICBpZiAoIXN5bXRhYmxlX2FkZF9kZWYoc3QsIGEtPmt3YXJnLT5hcmcsIERFRl9QQVJBTSkpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgc3QtPnN0X2N1ci0+c3RlX3ZhcmtleXdvcmRzID0gMTsKICAgICB9CkBAIC0xNTg3LDcgKzE2MTEsNyBAQAogICAgICAgICAgICAgaW50IGxpbmVubyA9IHN0LT5zdF9jdXItPnN0ZV9saW5lbm87CiAgICAgICAgICAgICBpbnQgY29sX29mZnNldCA9IHN0LT5zdF9jdXItPnN0ZV9jb2xfb2Zmc2V0OwogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1N5bnRheEVycm9yLCBJTVBPUlRfU1RBUl9XQVJOSU5HKTsKLSAgICAgICAgICAgIFB5RXJyX1N5bnRheExvY2F0aW9uRXgoc3QtPnN0X2ZpbGVuYW1lLCBsaW5lbm8sIGNvbF9vZmZzZXQpOworICAgICAgICAgICAgUHlFcnJfU3ludGF4TG9jYXRpb25PYmplY3Qoc3QtPnN0X2ZpbGVuYW1lLCBsaW5lbm8sIGNvbF9vZmZzZXQpOwogICAgICAgICAgICAgUHlfREVDUkVGKHN0b3JlX25hbWUpOwogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1B5dGhvbi9zeXNtb2R1bGUuYyBiL1B5dGhvbi9zeXNtb2R1bGUuYwppbmRleCAyZjcwMGU2Li4yOTBlZWMxIDEwMDY0NAotLS0gYS9QeXRob24vc3lzbW9kdWxlLmMKKysrIGIvUHl0aG9uL3N5c21vZHVsZS5jCkBAIC0zMiwxNSArMzIsMzEgQEAKIGV4dGVybiBjb25zdCBjaGFyICpQeVdpbl9ETExWZXJzaW9uU3RyaW5nOwogI2VuZGlmCiAKLSNpZmRlZiBfX1ZNUwotI2luY2x1ZGUgPHVuaXhsaWIuaD4KLSNlbmRpZgotCiAjaWZkZWYgSEFWRV9MQU5HSU5GT19ICiAjaW5jbHVkZSA8bG9jYWxlLmg+CiAjaW5jbHVkZSA8bGFuZ2luZm8uaD4KICNlbmRpZgogCitfUHlfSURFTlRJRklFUihfKTsKK19QeV9JREVOVElGSUVSKF9fc2l6ZW9mX18pOworX1B5X0lERU5USUZJRVIoYnVmZmVyKTsKK19QeV9JREVOVElGSUVSKGJ1aWx0aW5zKTsKK19QeV9JREVOVElGSUVSKGVuY29kaW5nKTsKK19QeV9JREVOVElGSUVSKHBhdGgpOworX1B5X0lERU5USUZJRVIoc3Rkb3V0KTsKK19QeV9JREVOVElGSUVSKHN0ZGVycik7CitfUHlfSURFTlRJRklFUih3cml0ZSk7CisKK1B5T2JqZWN0ICoKK19QeVN5c19HZXRPYmplY3RJZChfUHlfSWRlbnRpZmllciAqa2V5KQoreworICAgIFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSA9IFB5VGhyZWFkU3RhdGVfR0VUKCk7CisgICAgUHlPYmplY3QgKnNkID0gdHN0YXRlLT5pbnRlcnAtPnN5c2RpY3Q7CisgICAgaWYgKHNkID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHJldHVybiBfUHlEaWN0X0dldEl0ZW1JZChzZCwga2V5KTsKK30KKwogUHlPYmplY3QgKgogUHlTeXNfR2V0T2JqZWN0KGNvbnN0IGNoYXIgKm5hbWUpCiB7CkBAIC01Miw2ICs2OCwyMSBAQAogfQogCiBpbnQKK19QeVN5c19TZXRPYmplY3RJZChfUHlfSWRlbnRpZmllciAqa2V5LCBQeU9iamVjdCAqdikKK3sKKyAgICBQeVRocmVhZFN0YXRlICp0c3RhdGUgPSBQeVRocmVhZFN0YXRlX0dFVCgpOworICAgIFB5T2JqZWN0ICpzZCA9IHRzdGF0ZS0+aW50ZXJwLT5zeXNkaWN0OworICAgIGlmICh2ID09IE5VTEwpIHsKKyAgICAgICAgaWYgKF9QeURpY3RfR2V0SXRlbUlkKHNkLCBrZXkpID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIF9QeURpY3RfRGVsSXRlbUlkKHNkLCBrZXkpOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIHJldHVybiBfUHlEaWN0X1NldEl0ZW1JZChzZCwga2V5LCB2KTsKK30KKworaW50CiBQeVN5c19TZXRPYmplY3QoY29uc3QgY2hhciAqbmFtZSwgUHlPYmplY3QgKnYpCiB7CiAgICAgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlID0gUHlUaHJlYWRTdGF0ZV9HRVQoKTsKQEAgLTc5LDggKzExMCw2IEBACiAgICAgUHlPYmplY3QgKmVuY29kZWQsICplc2NhcGVkX3N0ciwgKnJlcHJfc3RyLCAqYnVmZmVyLCAqcmVzdWx0OwogICAgIGNoYXIgKnN0ZG91dF9lbmNvZGluZ19zdHI7CiAgICAgaW50IHJldDsKLSAgICBfUHlfSURFTlRJRklFUihlbmNvZGluZyk7Ci0gICAgX1B5X0lERU5USUZJRVIoYnVmZmVyKTsKIAogICAgIHN0ZG91dF9lbmNvZGluZyA9IF9QeU9iamVjdF9HZXRBdHRySWQob3V0ZiwgJlB5SWRfZW5jb2RpbmcpOwogICAgIGlmIChzdGRvdXRfZW5jb2RpbmcgPT0gTlVMTCkKQEAgLTEwMSw3ICsxMzAsNiBAQAogCiAgICAgYnVmZmVyID0gX1B5T2JqZWN0X0dldEF0dHJJZChvdXRmLCAmUHlJZF9idWZmZXIpOwogICAgIGlmIChidWZmZXIpIHsKLSAgICAgICAgX1B5X0lERU5USUZJRVIod3JpdGUpOwogICAgICAgICByZXN1bHQgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKGJ1ZmZlciwgJlB5SWRfd3JpdGUsICIoTykiLCBlbmNvZGVkKTsKICAgICAgICAgUHlfREVDUkVGKGJ1ZmZlcik7CiAgICAgICAgIFB5X0RFQ1JFRihlbmNvZGVkKTsKQEAgLTEzNywxMCArMTY1LDExIEBACiAgICAgUHlPYmplY3QgKm91dGY7CiAgICAgUHlJbnRlcnByZXRlclN0YXRlICppbnRlcnAgPSBQeVRocmVhZFN0YXRlX0dFVCgpLT5pbnRlcnA7CiAgICAgUHlPYmplY3QgKm1vZHVsZXMgPSBpbnRlcnAtPm1vZHVsZXM7Ci0gICAgUHlPYmplY3QgKmJ1aWx0aW5zID0gUHlEaWN0X0dldEl0ZW1TdHJpbmcobW9kdWxlcywgImJ1aWx0aW5zIik7CisgICAgUHlPYmplY3QgKmJ1aWx0aW5zOworICAgIHN0YXRpYyBQeU9iamVjdCAqbmV3bGluZSA9IE5VTEw7CiAgICAgaW50IGVycjsKLSAgICBfUHlfSURFTlRJRklFUihfKTsKIAorICAgIGJ1aWx0aW5zID0gX1B5RGljdF9HZXRJdGVtSWQobW9kdWxlcywgJlB5SWRfYnVpbHRpbnMpOwogICAgIGlmIChidWlsdGlucyA9PSBOVUxMKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsICJsb3N0IGJ1aWx0aW5zIG1vZHVsZSIpOwogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTE1NSw3ICsxODQsNyBAQAogICAgIH0KICAgICBpZiAoX1B5T2JqZWN0X1NldEF0dHJJZChidWlsdGlucywgJlB5SWRfXywgUHlfTm9uZSkgIT0gMCkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgb3V0ZiA9IFB5U3lzX0dldE9iamVjdCgic3Rkb3V0Iik7CisgICAgb3V0ZiA9IF9QeVN5c19HZXRPYmplY3RJZCgmUHlJZF9zdGRvdXQpOwogICAgIGlmIChvdXRmID09IE5VTEwgfHwgb3V0ZiA9PSBQeV9Ob25lKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsICJsb3N0IHN5cy5zdGRvdXQiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0xNzMsNyArMjAyLDEyIEBACiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQogICAgIH0KLSAgICBpZiAoUHlGaWxlX1dyaXRlU3RyaW5nKCJcbiIsIG91dGYpICE9IDApCisgICAgaWYgKG5ld2xpbmUgPT0gTlVMTCkgeworICAgICAgICBuZXdsaW5lID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoIlxuIik7CisgICAgICAgIGlmIChuZXdsaW5lID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKFB5RmlsZV9Xcml0ZU9iamVjdChuZXdsaW5lLCBvdXRmLCBQeV9QUklOVF9SQVcpICE9IDApCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmIChfUHlPYmplY3RfU2V0QXR0cklkKGJ1aWx0aW5zLCAmUHlJZF9fLCBvKSAhPSAwKQogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTMyOSwxNSArMzYzLDE5IEBACiAKIAogc3RhdGljIFB5T2JqZWN0ICoKLWNhbGxfdHJhbXBvbGluZShQeVRocmVhZFN0YXRlICp0c3RhdGUsIFB5T2JqZWN0KiBjYWxsYmFjaywKK2NhbGxfdHJhbXBvbGluZShQeU9iamVjdCogY2FsbGJhY2ssCiAgICAgICAgICAgICAgICAgUHlGcmFtZU9iamVjdCAqZnJhbWUsIGludCB3aGF0LCBQeU9iamVjdCAqYXJnKQogewotICAgIFB5T2JqZWN0ICphcmdzID0gUHlUdXBsZV9OZXcoMyk7CisgICAgUHlPYmplY3QgKmFyZ3M7CiAgICAgUHlPYmplY3QgKndoYXRzdHI7CiAgICAgUHlPYmplY3QgKnJlc3VsdDsKIAorICAgIGFyZ3MgPSBQeVR1cGxlX05ldygzKTsKICAgICBpZiAoYXJncyA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlGcmFtZV9GYXN0VG9Mb2NhbHNXaXRoRXJyb3IoZnJhbWUpIDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKICAgICBQeV9JTkNSRUYoZnJhbWUpOwogICAgIHdoYXRzdHIgPSB3aGF0c3RyaW5nc1t3aGF0XTsKICAgICBQeV9JTkNSRUYod2hhdHN0cik7CkBAIC0zNDksNyArMzg3LDYgQEAKICAgICBQeVR1cGxlX1NFVF9JVEVNKGFyZ3MsIDIsIGFyZyk7CiAKICAgICAvKiBjYWxsIHRoZSBQeXRob24tbGV2ZWwgZnVuY3Rpb24gKi8KLSAgICBQeUZyYW1lX0Zhc3RUb0xvY2FscyhmcmFtZSk7CiAgICAgcmVzdWx0ID0gUHlFdmFsX0NhbGxPYmplY3QoY2FsbGJhY2ssIGFyZ3MpOwogICAgIFB5RnJhbWVfTG9jYWxzVG9GYXN0KGZyYW1lLCAxKTsKICAgICBpZiAocmVzdWx0ID09IE5VTEwpCkBAIC0zNjQsMTIgKzQwMSwxMSBAQAogcHJvZmlsZV90cmFtcG9saW5lKFB5T2JqZWN0ICpzZWxmLCBQeUZyYW1lT2JqZWN0ICpmcmFtZSwKICAgICAgICAgICAgICAgICAgICBpbnQgd2hhdCwgUHlPYmplY3QgKmFyZykKIHsKLSAgICBQeVRocmVhZFN0YXRlICp0c3RhdGUgPSBmcmFtZS0+Zl90c3RhdGU7CiAgICAgUHlPYmplY3QgKnJlc3VsdDsKIAogICAgIGlmIChhcmcgPT0gTlVMTCkKICAgICAgICAgYXJnID0gUHlfTm9uZTsKLSAgICByZXN1bHQgPSBjYWxsX3RyYW1wb2xpbmUodHN0YXRlLCBzZWxmLCBmcmFtZSwgd2hhdCwgYXJnKTsKKyAgICByZXN1bHQgPSBjYWxsX3RyYW1wb2xpbmUoc2VsZiwgZnJhbWUsIHdoYXQsIGFyZyk7CiAgICAgaWYgKHJlc3VsdCA9PSBOVUxMKSB7CiAgICAgICAgIFB5RXZhbF9TZXRQcm9maWxlKE5VTEwsIE5VTEwpOwogICAgICAgICByZXR1cm4gLTE7CkBAIC0zODIsNyArNDE4LDYgQEAKIHRyYWNlX3RyYW1wb2xpbmUoUHlPYmplY3QgKnNlbGYsIFB5RnJhbWVPYmplY3QgKmZyYW1lLAogICAgICAgICAgICAgICAgICBpbnQgd2hhdCwgUHlPYmplY3QgKmFyZykKIHsKLSAgICBQeVRocmVhZFN0YXRlICp0c3RhdGUgPSBmcmFtZS0+Zl90c3RhdGU7CiAgICAgUHlPYmplY3QgKmNhbGxiYWNrOwogICAgIFB5T2JqZWN0ICpyZXN1bHQ7CiAKQEAgLTM5Miw3ICs0MjcsNyBAQAogICAgICAgICBjYWxsYmFjayA9IGZyYW1lLT5mX3RyYWNlOwogICAgIGlmIChjYWxsYmFjayA9PSBOVUxMKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXN1bHQgPSBjYWxsX3RyYW1wb2xpbmUodHN0YXRlLCBjYWxsYmFjaywgZnJhbWUsIHdoYXQsIGFyZyk7CisgICAgcmVzdWx0ID0gY2FsbF90cmFtcG9saW5lKGNhbGxiYWNrLCBmcmFtZSwgd2hhdCwgYXJnKTsKICAgICBpZiAocmVzdWx0ID09IE5VTEwpIHsKICAgICAgICAgUHlFdmFsX1NldFRyYWNlKE5VTEwsIE5VTEwpOwogICAgICAgICBQeV9DTEVBUihmcmFtZS0+Zl90cmFjZSk7CkBAIC02MTYsNyArNjUxLDcgQEAKICJoYXNoX2luZm9cblwKIFxuXAogQSBzdHJ1Y3Qgc2VxdWVuY2UgcHJvdmlkaW5nIHBhcmFtZXRlcnMgdXNlZCBmb3IgY29tcHV0aW5nXG5cCi1udW1lcmljIGhhc2hlcy4gIFRoZSBhdHRyaWJ1dGVzIGFyZSByZWFkIG9ubHkuIik7CitoYXNoZXMuIFRoZSBhdHRyaWJ1dGVzIGFyZSByZWFkIG9ubHkuIik7CiAKIHN0YXRpYyBQeVN0cnVjdFNlcXVlbmNlX0ZpZWxkIGhhc2hfaW5mb19maWVsZHNbXSA9IHsKICAgICB7IndpZHRoIiwgIndpZHRoIG9mIHRoZSB0eXBlIHVzZWQgZm9yIGhhc2hpbmcsIGluIGJpdHMifSwKQEAgLTYyNSw2ICs2NjAsMTEgQEAKICAgICB7ImluZiIsICJ2YWx1ZSB0byBiZSB1c2VkIGZvciBoYXNoIG9mIGEgcG9zaXRpdmUgaW5maW5pdHkifSwKICAgICB7Im5hbiIsICJ2YWx1ZSB0byBiZSB1c2VkIGZvciBoYXNoIG9mIGEgbmFuIn0sCiAgICAgeyJpbWFnIiwgIm11bHRpcGxpZXIgdXNlZCBmb3IgdGhlIGltYWdpbmFyeSBwYXJ0IG9mIGEgY29tcGxleCBudW1iZXIifSwKKyAgICB7ImFsZ29yaXRobSIsICJuYW1lIG9mIHRoZSBhbGdvcml0aG0gZm9yIGhhc2hpbmcgb2Ygc3RyLCBieXRlcyBhbmQgIgorICAgICAgICAgICAgICAgICAgIm1lbW9yeXZpZXdzIn0sCisgICAgeyJoYXNoX2JpdHMiLCAiaW50ZXJuYWwgb3V0cHV0IHNpemUgb2YgaGFzaCBhbGdvcml0aG0ifSwKKyAgICB7InNlZWRfYml0cyIsICJzZWVkIHNpemUgb2YgaGFzaCBhbGdvcml0aG0ifSwKKyAgICB7ImN1dG9mZiIsICJzbWFsbCBzdHJpbmcgb3B0aW1pemF0aW9uIGN1dG9mZiJ9LAogICAgIHtOVUxMLCBOVUxMfQogfTsKIApAQCAtNjMyLDcgKzY3Miw3IEBACiAgICAgInN5cy5oYXNoX2luZm8iLAogICAgIGhhc2hfaW5mb19kb2MsCiAgICAgaGFzaF9pbmZvX2ZpZWxkcywKLSAgICA1LAorICAgIDksCiB9OwogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtNjQwLDkgKzY4MCwxMSBAQAogewogICAgIFB5T2JqZWN0ICpoYXNoX2luZm87CiAgICAgaW50IGZpZWxkID0gMDsKKyAgICBQeUhhc2hfRnVuY0RlZiAqaGFzaGZ1bmM7CiAgICAgaGFzaF9pbmZvID0gUHlTdHJ1Y3RTZXF1ZW5jZV9OZXcoJkhhc2hfSW5mb1R5cGUpOwogICAgIGlmIChoYXNoX2luZm8gPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaGFzaGZ1bmMgPSBQeUhhc2hfR2V0RnVuY0RlZigpOwogICAgIFB5U3RydWN0U2VxdWVuY2VfU0VUX0lURU0oaGFzaF9pbmZvLCBmaWVsZCsrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlMb25nX0Zyb21Mb25nKDgqc2l6ZW9mKFB5X2hhc2hfdCkpKTsKICAgICBQeVN0cnVjdFNlcXVlbmNlX1NFVF9JVEVNKGhhc2hfaW5mbywgZmllbGQrKywKQEAgLTY1Myw2ICs2OTUsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5TG9uZ19Gcm9tTG9uZyhfUHlIQVNIX05BTikpOwogICAgIFB5U3RydWN0U2VxdWVuY2VfU0VUX0lURU0oaGFzaF9pbmZvLCBmaWVsZCsrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlMb25nX0Zyb21Mb25nKF9QeUhBU0hfSU1BRykpOworICAgIFB5U3RydWN0U2VxdWVuY2VfU0VUX0lURU0oaGFzaF9pbmZvLCBmaWVsZCsrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0Zyb21TdHJpbmcoaGFzaGZ1bmMtPm5hbWUpKTsKKyAgICBQeVN0cnVjdFNlcXVlbmNlX1NFVF9JVEVNKGhhc2hfaW5mbywgZmllbGQrKywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5TG9uZ19Gcm9tTG9uZyhoYXNoZnVuYy0+aGFzaF9iaXRzKSk7CisgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9TRVRfSVRFTShoYXNoX2luZm8sIGZpZWxkKyssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUxvbmdfRnJvbUxvbmcoaGFzaGZ1bmMtPnNlZWRfYml0cykpOworICAgIFB5U3RydWN0U2VxdWVuY2VfU0VUX0lURU0oaGFzaF9pbmZvLCBmaWVsZCsrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlMb25nX0Zyb21Mb25nKFB5X0hBU0hfQ1VUT0ZGKSk7CiAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKICAgICAgICAgUHlfQ0xFQVIoaGFzaF9pbmZvKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC03NzcsNyArODI3LDcgQEAKIGludGVycHJldGVyIGxvYWRzIGV4dGVuc2lvbiBtb2R1bGVzLiAgQW1vbmcgb3RoZXIgdGhpbmdzLCB0aGlzIHdpbGwgZW5hYmxlXG5cCiBhIGxhenkgcmVzb2x2aW5nIG9mIHN5bWJvbHMgd2hlbiBpbXBvcnRpbmcgYSBtb2R1bGUsIGlmIGNhbGxlZCBhc1xuXAogc3lzLnNldGRsb3BlbmZsYWdzKDApLiAgVG8gc2hhcmUgc3ltYm9scyBhY3Jvc3MgZXh0ZW5zaW9uIG1vZHVsZXMsIGNhbGwgYXNcblwKLXN5cy5zZXRkbG9wZW5mbGFncyhjdHlwZXMuUlRMRF9HTE9CQUwpLiAgU3ltYm9saWMgbmFtZXMgZm9yIHRoZSBmbGFnIG1vZHVsZXNcblwKK3N5cy5zZXRkbG9wZW5mbGFncyhvcy5SVExEX0dMT0JBTCkuICBTeW1ib2xpYyBuYW1lcyBmb3IgdGhlIGZsYWcgbW9kdWxlc1xuXAogY2FuIGJlIGZvdW5kIGluIHRoZSBvcyBtb2R1bGUgKFJUTERfeHh4IGNvbnN0YW50cywgZS5nLiBvcy5SVExEX0xBWlkpLiIpOwogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtNzkzLDcgKzg0Myw3IEBACiAiZ2V0ZGxvcGVuZmxhZ3MoKSAtPiBpbnRcblwKIFxuXAogUmV0dXJuIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBmbGFncyB0aGF0IGFyZSB1c2VkIGZvciBkbG9wZW4gY2FsbHMuXG5cCi1UaGUgZmxhZyBjb25zdGFudHMgYXJlIGRlZmluZWQgaW4gdGhlIGN0eXBlcyBhbmQgRExGQ04gbW9kdWxlcy4iKTsKK1RoZSBmbGFnIGNvbnN0YW50cyBhcmUgZGVmaW5lZCBpbiB0aGUgb3MgbW9kdWxlLiIpOwogCiAjZW5kaWYgIC8qIEhBVkVfRExPUEVOICovCiAKQEAgLTgxMywzMCArODYzLDE2IEBACiB9CiAjZW5kaWYgLyogVVNFX01BTExPUFQgKi8KIAotc3RhdGljIFB5T2JqZWN0ICoKLXN5c19nZXRzaXplb2YoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKK3NpemVfdAorX1B5U3lzX0dldFNpemVPZihQeU9iamVjdCAqbykKIHsKICAgICBQeU9iamVjdCAqcmVzID0gTlVMTDsKLSAgICBzdGF0aWMgUHlPYmplY3QgKmdjX2hlYWRfc2l6ZSA9IE5VTEw7Ci0gICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJvYmplY3QiLCAiZGVmYXVsdCIsIDB9OwotICAgIFB5T2JqZWN0ICpvLCAqZGZsdCA9IE5VTEw7CiAgICAgUHlPYmplY3QgKm1ldGhvZDsKLSAgICBfUHlfSURFTlRJRklFUihfX3NpemVvZl9fKTsKLQotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJPfE86Z2V0c2l6ZW9mIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrd2xpc3QsICZvLCAmZGZsdCkpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgLyogSW5pdGlhbGl6ZSBzdGF0aWMgdmFyaWFibGUgZm9yIEdDIGhlYWQgc2l6ZSAqLwotICAgIGlmIChnY19oZWFkX3NpemUgPT0gTlVMTCkgewotICAgICAgICBnY19oZWFkX3NpemUgPSBQeUxvbmdfRnJvbVNzaXplX3Qoc2l6ZW9mKFB5R0NfSGVhZCkpOwotICAgICAgICBpZiAoZ2NfaGVhZF9zaXplID09IE5VTEwpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9CisgICAgUHlfc3NpemVfdCBzaXplOwogCiAgICAgLyogTWFrZSBzdXJlIHRoZSB0eXBlIGlzIGluaXRpYWxpemVkLiBmbG9hdCBnZXRzIGluaXRpYWxpemVkIGxhdGUgKi8KICAgICBpZiAoUHlUeXBlX1JlYWR5KFB5X1RZUEUobykpIDwgMCkKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIHJldHVybiAoc2l6ZV90KS0xOwogCiAgICAgbWV0aG9kID0gX1B5T2JqZWN0X0xvb2t1cFNwZWNpYWwobywgJlB5SWRfX19zaXplb2ZfXyk7CiAgICAgaWYgKG1ldGhvZCA9PSBOVUxMKSB7CkBAIC04NTAsMjQgKzg4Niw1MCBAQAogICAgICAgICBQeV9ERUNSRUYobWV0aG9kKTsKICAgICB9CiAKLSAgICAvKiBIYXMgYSBkZWZhdWx0IHZhbHVlIGJlZW4gZ2l2ZW4gKi8KLSAgICBpZiAoKHJlcyA9PSBOVUxMKSAmJiAoZGZsdCAhPSBOVUxMKSAmJgotICAgICAgICBQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX1R5cGVFcnJvcikpCi0gICAgewotICAgICAgICBQeUVycl9DbGVhcigpOwotICAgICAgICBQeV9JTkNSRUYoZGZsdCk7Ci0gICAgICAgIHJldHVybiBkZmx0OworICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIChzaXplX3QpLTE7CisKKyAgICBzaXplID0gUHlMb25nX0FzU3NpemVfdChyZXMpOworICAgIFB5X0RFQ1JFRihyZXMpOworICAgIGlmIChzaXplID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybiAoc2l6ZV90KS0xOworCisgICAgaWYgKHNpemUgPCAwKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiX19zaXplb2ZfXygpIHNob3VsZCByZXR1cm4gPj0gMCIpOworICAgICAgICByZXR1cm4gKHNpemVfdCktMTsKICAgICB9Ci0gICAgZWxzZSBpZiAocmVzID09IE5VTEwpCi0gICAgICAgIHJldHVybiByZXM7CiAKICAgICAvKiBhZGQgZ2NfaGVhZCBzaXplICovCi0gICAgaWYgKFB5T2JqZWN0X0lTX0dDKG8pKSB7Ci0gICAgICAgIFB5T2JqZWN0ICp0bXAgPSByZXM7Ci0gICAgICAgIHJlcyA9IFB5TnVtYmVyX0FkZCh0bXAsIGdjX2hlYWRfc2l6ZSk7Ci0gICAgICAgIFB5X0RFQ1JFRih0bXApOworICAgIGlmIChQeU9iamVjdF9JU19HQyhvKSkKKyAgICAgICAgcmV0dXJuICgoc2l6ZV90KXNpemUpICsgc2l6ZW9mKFB5R0NfSGVhZCk7CisgICAgcmV0dXJuIChzaXplX3Qpc2l6ZTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK3N5c19nZXRzaXplb2YoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKK3sKKyAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7Im9iamVjdCIsICJkZWZhdWx0IiwgMH07CisgICAgc2l6ZV90IHNpemU7CisgICAgUHlPYmplY3QgKm8sICpkZmx0ID0gTlVMTDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJPfE86Z2V0c2l6ZW9mIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrd2xpc3QsICZvLCAmZGZsdCkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgc2l6ZSA9IF9QeVN5c19HZXRTaXplT2Yobyk7CisKKyAgICBpZiAoc2l6ZSA9PSAoc2l6ZV90KS0xICYmIFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgLyogSGFzIGEgZGVmYXVsdCB2YWx1ZSBiZWVuIGdpdmVuICovCisgICAgICAgIGlmIChkZmx0ICE9IE5VTEwgJiYgUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19UeXBlRXJyb3IpKSB7CisgICAgICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICAgICAgUHlfSU5DUkVGKGRmbHQpOworICAgICAgICAgICAgcmV0dXJuIGRmbHQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIHJldHVybiByZXM7CisKKyAgICByZXR1cm4gUHlMb25nX0Zyb21TaXplX3Qoc2l6ZSk7CiB9CiAKIFB5RG9jX1NUUlZBUihnZXRzaXplb2ZfZG9jLApAQCAtODk3LDYgKzk1OSwxOSBAQAogcmVmZXJlbmNlIGFzIGFuIGFyZ3VtZW50IHRvIGdldHJlZmNvdW50KCkuIgogKTsKIAorc3RhdGljIFB5T2JqZWN0ICoKK3N5c19nZXRhbGxvY2F0ZWRibG9ja3MoUHlPYmplY3QgKnNlbGYpCit7CisgICAgcmV0dXJuIFB5TG9uZ19Gcm9tU3NpemVfdChfUHlfR2V0QWxsb2NhdGVkQmxvY2tzKCkpOworfQorCitQeURvY19TVFJWQVIoZ2V0YWxsb2NhdGVkYmxvY2tzX2RvYywKKyJnZXRhbGxvY2F0ZWRibG9ja3MoKSAtPiBpbnRlZ2VyXG5cCitcblwKK1JldHVybiB0aGUgbnVtYmVyIG9mIG1lbW9yeSBibG9ja3MgY3VycmVudGx5IGFsbG9jYXRlZCwgcmVnYXJkbGVzcyBvZiB0aGVpclxuXAorc2l6ZS4iCispOworCiAjaWZkZWYgQ09VTlRfQUxMT0NTCiBzdGF0aWMgUHlPYmplY3QgKgogc3lzX2dldGNvdW50cyhQeU9iamVjdCAqc2VsZikKQEAgLTEwNjUsNiArMTE0MCw4IEBACiAgICAgeyJnZXRkbG9wZW5mbGFncyIsIChQeUNGdW5jdGlvbilzeXNfZ2V0ZGxvcGVuZmxhZ3MsIE1FVEhfTk9BUkdTLAogICAgICBnZXRkbG9wZW5mbGFnc19kb2N9LAogI2VuZGlmCisgICAgeyJnZXRhbGxvY2F0ZWRibG9ja3MiLCAoUHlDRnVuY3Rpb24pc3lzX2dldGFsbG9jYXRlZGJsb2NrcywgTUVUSF9OT0FSR1MsCisgICAgICBnZXRhbGxvY2F0ZWRibG9ja3NfZG9jfSwKICNpZmRlZiBDT1VOVF9BTExPQ1MKICAgICB7ImdldGNvdW50cyIsICAgICAgIChQeUNGdW5jdGlvbilzeXNfZ2V0Y291bnRzLCBNRVRIX05PQVJHU30sCiAjZW5kaWYKQEAgLTExMTcsNyArMTE5NCw3IEBACiAgICAgeyJzZXR0cmFjZSIsICAgICAgICBzeXNfc2V0dHJhY2UsIE1FVEhfTywgc2V0dHJhY2VfZG9jfSwKICAgICB7ImdldHRyYWNlIiwgICAgICAgIHN5c19nZXR0cmFjZSwgTUVUSF9OT0FSR1MsIGdldHRyYWNlX2RvY30sCiAgICAgeyJjYWxsX3RyYWNpbmciLCBzeXNfY2FsbF90cmFjaW5nLCBNRVRIX1ZBUkFSR1MsIGNhbGxfdHJhY2luZ19kb2N9LAotICAgIHsiX2RlYnVnbWFsbG9jc3RhdHMiLCBzeXNfZGVidWdtYWxsb2NzdGF0cywgTUVUSF9WQVJBUkdTLAorICAgIHsiX2RlYnVnbWFsbG9jc3RhdHMiLCBzeXNfZGVidWdtYWxsb2NzdGF0cywgTUVUSF9OT0FSR1MsCiAgICAgIGRlYnVnbWFsbG9jc3RhdHNfZG9jfSwKICAgICB7TlVMTCwgICAgICAgICAgICAgIE5VTEx9ICAgICAgICAgICAvKiBzZW50aW5lbCAqLwogfTsKQEAgLTEyODYsMTEgKzEzNjMsMTIgQEAKIGV4ZWN1dGFibGUgLS0gYWJzb2x1dGUgcGF0aCBvZiB0aGUgZXhlY3V0YWJsZSBiaW5hcnkgb2YgdGhlIFB5dGhvbiBpbnRlcnByZXRlclxuXAogZmxvYXRfaW5mbyAtLSBhIHN0cnVjdCBzZXF1ZW5jZSB3aXRoIGluZm9ybWF0aW9uIGFib3V0IHRoZSBmbG9hdCBpbXBsZW1lbnRhdGlvbi5cblwKIGZsb2F0X3JlcHJfc3R5bGUgLS0gc3RyaW5nIGluZGljYXRpbmcgdGhlIHN0eWxlIG9mIHJlcHIoKSBvdXRwdXQgZm9yIGZsb2F0c1xuXAoraGFzaF9pbmZvIC0tIGEgc3RydWN0IHNlcXVlbmNlIHdpdGggaW5mb3JtYXRpb24gYWJvdXQgdGhlIGhhc2ggYWxnb3JpdGhtLlxuXAogaGV4dmVyc2lvbiAtLSB2ZXJzaW9uIGluZm9ybWF0aW9uIGVuY29kZWQgYXMgYSBzaW5nbGUgaW50ZWdlclxuXAogaW1wbGVtZW50YXRpb24gLS0gUHl0aG9uIGltcGxlbWVudGF0aW9uIGluZm9ybWF0aW9uLlxuXAogaW50X2luZm8gLS0gYSBzdHJ1Y3Qgc2VxdWVuY2Ugd2l0aCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgaW50IGltcGxlbWVudGF0aW9uLlxuXAogbWF4c2l6ZSAtLSB0aGUgbGFyZ2VzdCBzdXBwb3J0ZWQgbGVuZ3RoIG9mIGNvbnRhaW5lcnMuXG5cCi1tYXh1bmljb2RlIC0tIHRoZSB2YWx1ZSBvZiB0aGUgbGFyZ2VzdCBVbmljb2RlIGNvZGVwb2ludFxuXAorbWF4dW5pY29kZSAtLSB0aGUgdmFsdWUgb2YgdGhlIGxhcmdlc3QgVW5pY29kZSBjb2RlIHBvaW50XG5cCiBwbGF0Zm9ybSAtLSBwbGF0Zm9ybSBpZGVudGlmaWVyXG5cCiBwcmVmaXggLS0gcHJlZml4IHVzZWQgdG8gZmluZCB0aGUgUHl0aG9uIGxpYnJhcnlcblwKIHRocmVhZF9pbmZvIC0tIGEgc3RydWN0IHNlcXVlbmNlIHdpdGggaW5mb3JtYXRpb24gYWJvdXQgdGhlIHRocmVhZCBpbXBsZW1lbnRhdGlvbi5cblwKQEAgLTEzNTIsMTQgKzE0MzAsMTIgQEAKICAgICB7Im5vX3NpdGUiLCAgICAgICAgICAgICAgICAgIi1TIn0sCiAgICAgeyJpZ25vcmVfZW52aXJvbm1lbnQiLCAgICAgICItRSJ9LAogICAgIHsidmVyYm9zZSIsICAgICAgICAgICAgICAgICAiLXYifSwKLSNpZmRlZiBSSVNDT1MKLSAgICB7InJpc2Nvc193aW1wIiwgICAgICAgICAgICAgIj8/PyJ9LAotI2VuZGlmCiAgICAgLyogeyJ1bmJ1ZmZlcmVkIiwgICAgICAgICAgICAgICAgICAgIi11In0sICovCiAgICAgLyogeyJza2lwX2ZpcnN0IiwgICAgICAgICAgICAgICAgICAgIi14In0sICovCiAgICAgeyJieXRlc193YXJuaW5nIiwgICAgICAgICAgICItYiJ9LAogICAgIHsicXVpZXQiLCAgICAgICAgICAgICAgICAgICAiLXEifSwKICAgICB7Imhhc2hfcmFuZG9taXphdGlvbiIsICAgICAgIi1SIn0sCisgICAgeyJpc29sYXRlZCIsICAgICAgICAgICAgICAgICItSSJ9LAogICAgIHswfQogfTsKIApAQCAtMTM2NywxMSArMTQ0Myw3IEBACiAgICAgInN5cy5mbGFncyIsICAgICAgICAvKiBuYW1lICovCiAgICAgZmxhZ3NfX2RvY19fLCAgICAgICAvKiBkb2MgKi8KICAgICBmbGFnc19maWVsZHMsICAgICAgIC8qIGZpZWxkcyAqLwotI2lmZGVmIFJJU0NPUwogICAgIDEzCi0jZWxzZQotICAgIDEyCi0jZW5kaWYKIH07CiAKIHN0YXRpYyBQeU9iamVjdCoKQEAgLTEzOTYsMTQgKzE0NjgsMTIgQEAKICAgICBTZXRGbGFnKFB5X05vU2l0ZUZsYWcpOwogICAgIFNldEZsYWcoUHlfSWdub3JlRW52aXJvbm1lbnRGbGFnKTsKICAgICBTZXRGbGFnKFB5X1ZlcmJvc2VGbGFnKTsKLSNpZmRlZiBSSVNDT1MKLSAgICBTZXRGbGFnKFB5X1JJU0NPU1dpbXBGbGFnKTsKLSNlbmRpZgogICAgIC8qIFNldEZsYWcoc2F3X3VuYnVmZmVyZWRfZmxhZyk7ICovCiAgICAgLyogU2V0RmxhZyhza2lwZmlyc3RsaW5lKTsgKi8KICAgICBTZXRGbGFnKFB5X0J5dGVzV2FybmluZ0ZsYWcpOwogICAgIFNldEZsYWcoUHlfUXVpZXRGbGFnKTsKICAgICBTZXRGbGFnKFB5X0hhc2hSYW5kb21pemF0aW9uRmxhZyk7CisgICAgU2V0RmxhZyhQeV9Jc29sYXRlZEZsYWcpOwogI3VuZGVmIFNldEZsYWcKIAogICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CkBAIC0xNDg5LDcgKzE1NTksNyBAQAogI2RlZmluZSBTVFJJRlkobmFtZSkgUVVPVEUobmFtZSkKICNkZWZpbmUgTUFKT1IgU1RSSUZZKFBZX01BSk9SX1ZFUlNJT04pCiAjZGVmaW5lIE1JTk9SIFNUUklGWShQWV9NSU5PUl9WRVJTSU9OKQotI2RlZmluZSBUQUcgTkFNRSAiLSIgTUFKT1IgTUlOT1I7CisjZGVmaW5lIFRBRyBOQU1FICItIiBNQUpPUiBNSU5PUgogY29uc3QgY2hhciAqX1B5U3lzX0ltcGxDYWNoZVRhZyA9IFRBRzsKICN1bmRlZiBOQU1FCiAjdW5kZWYgUVVPVEUKQEAgLTE1NjQsMTggKzE2MzQsMzQgQEAKIFB5T2JqZWN0ICoKIF9QeVN5c19Jbml0KHZvaWQpCiB7Ci0gICAgUHlPYmplY3QgKm0sICp2LCAqc3lzZGljdCwgKnZlcnNpb25faW5mbzsKLSAgICBjaGFyICpzOworICAgIFB5T2JqZWN0ICptLCAqc3lzZGljdCwgKnZlcnNpb25faW5mbzsKKyAgICBpbnQgcmVzOwogCiAgICAgbSA9IFB5TW9kdWxlX0NyZWF0ZSgmc3lzbW9kdWxlKTsKICAgICBpZiAobSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBzeXNkaWN0ID0gUHlNb2R1bGVfR2V0RGljdChtKTsKLSNkZWZpbmUgU0VUX1NZU19GUk9NX1NUUklORyhrZXksIHZhbHVlKSAgICAgICAgICAgICAgICAgXAotICAgIHYgPSB2YWx1ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYgKHYgIT0gTlVMTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoc3lzZGljdCwga2V5LCB2KTsgICAgICAgICAgXAotICAgIFB5X1hERUNSRUYodikKKyNkZWZpbmUgU0VUX1NZU19GUk9NX1NUUklOR19CT1JST1coa2V5LCB2YWx1ZSkgICAgICAgICAgICAgXAorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIFB5T2JqZWN0ICp2ID0gKHZhbHVlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKHYgPT0gTlVMTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgcmV0dXJuIE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHJlcyA9IFB5RGljdF9TZXRJdGVtU3RyaW5nKHN5c2RpY3QsIGtleSwgdik7ICAgICAgIFwKKyAgICAgICAgaWYgKHJlcyA8IDApIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgcmV0dXJuIE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlICgwKQorI2RlZmluZSBTRVRfU1lTX0ZST01fU1RSSU5HKGtleSwgdmFsdWUpICAgICAgICAgICAgICAgICAgICBcCisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgUHlPYmplY3QgKnYgPSAodmFsdWUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAodiA9PSBOVUxMKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICByZXR1cm4gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcmVzID0gUHlEaWN0X1NldEl0ZW1TdHJpbmcoc3lzZGljdCwga2V5LCB2KTsgICAgICAgXAorICAgICAgICBQeV9ERUNSRUYodik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChyZXMgPCAwKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHJldHVybiBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoMCkKIAogICAgIC8qIENoZWNrIHRoYXQgc3RkaW4gaXMgbm90IGEgZGlyZWN0b3J5CiAgICAgVXNpbmcgc2hlbGwgcmVkaXJlY3Rpb24sIHlvdSBjYW4gcmVkaXJlY3Qgc3RkaW4gdG8gYSBkaXJlY3RvcnksCkBAIC0xNTk3LDEwICsxNjgzLDEwIEBACiAKICAgICAvKiBzdGRpbi9zdGRvdXQvc3RkZXJyIGFyZSBub3cgc2V0IGJ5IHB5dGhvbnJ1bi5jICovCiAKLSAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhzeXNkaWN0LCAiX19kaXNwbGF5aG9va19fIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBQeURpY3RfR2V0SXRlbVN0cmluZyhzeXNkaWN0LCAiZGlzcGxheWhvb2siKSk7Ci0gICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoc3lzZGljdCwgIl9fZXhjZXB0aG9va19fIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBQeURpY3RfR2V0SXRlbVN0cmluZyhzeXNkaWN0LCAiZXhjZXB0aG9vayIpKTsKKyAgICBTRVRfU1lTX0ZST01fU1RSSU5HX0JPUlJPVygiX19kaXNwbGF5aG9va19fIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeURpY3RfR2V0SXRlbVN0cmluZyhzeXNkaWN0LCAiZGlzcGxheWhvb2siKSk7CisgICAgU0VUX1NZU19GUk9NX1NUUklOR19CT1JST1coIl9fZXhjZXB0aG9va19fIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeURpY3RfR2V0SXRlbVN0cmluZyhzeXNkaWN0LCAiZXhjZXB0aG9vayIpKTsKICAgICBTRVRfU1lTX0ZST01fU1RSSU5HKCJ2ZXJzaW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfRnJvbVN0cmluZyhQeV9HZXRWZXJzaW9uKCkpKTsKICAgICBTRVRfU1lTX0ZST01fU1RSSU5HKCJoZXh2ZXJzaW9uIiwKQEAgLTE2MzQsMjggKzE3MjAsMjQgQEAKICAgICBTRVRfU1lTX0ZST01fU1RSSU5HKCJpbnRfaW5mbyIsCiAgICAgICAgICAgICAgICAgICAgICAgICBQeUxvbmdfR2V0SW5mbygpKTsKICAgICAvKiBpbml0aWFsaXplIGhhc2hfaW5mbyAqLwotICAgIGlmIChIYXNoX0luZm9UeXBlLnRwX25hbWUgPT0gMCkKLSAgICAgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZSgmSGFzaF9JbmZvVHlwZSwgJmhhc2hfaW5mb19kZXNjKTsKKyAgICBpZiAoSGFzaF9JbmZvVHlwZS50cF9uYW1lID09IE5VTEwpIHsKKyAgICAgICAgaWYgKFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUyKCZIYXNoX0luZm9UeXBlLCAmaGFzaF9pbmZvX2Rlc2MpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KICAgICBTRVRfU1lTX0ZST01fU1RSSU5HKCJoYXNoX2luZm8iLAogICAgICAgICAgICAgICAgICAgICAgICAgZ2V0X2hhc2hfaW5mbygpKTsKICAgICBTRVRfU1lTX0ZST01fU1RSSU5HKCJtYXh1bmljb2RlIiwKICAgICAgICAgICAgICAgICAgICAgICAgIFB5TG9uZ19Gcm9tTG9uZygweDEwRkZGRikpOwogICAgIFNFVF9TWVNfRlJPTV9TVFJJTkcoImJ1aWx0aW5fbW9kdWxlX25hbWVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RfYnVpbHRpbl9tb2R1bGVfbmFtZXMoKSk7Ci0gICAgewotICAgICAgICAvKiBBc3N1bWVzIHRoYXQgbG9uZ3MgYXJlIGF0IGxlYXN0IDIgYnl0ZXMgbG9uZy4KLSAgICAgICAgICAgU2hvdWxkIGJlIHNhZmUhICovCi0gICAgICAgIHVuc2lnbmVkIGxvbmcgbnVtYmVyID0gMTsKLSAgICAgICAgY2hhciAqdmFsdWU7CisjaWYgUFlfQklHX0VORElBTgorICAgIFNFVF9TWVNfRlJPTV9TVFJJTkcoImJ5dGVvcmRlciIsCisgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfRnJvbVN0cmluZygiYmlnIikpOworI2Vsc2UKKyAgICBTRVRfU1lTX0ZST01fU1RSSU5HKCJieXRlb3JkZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0Zyb21TdHJpbmcoImxpdHRsZSIpKTsKKyNlbmRpZgogCi0gICAgICAgIHMgPSAoY2hhciAqKSAmbnVtYmVyOwotICAgICAgICBpZiAoc1swXSA9PSAwKQotICAgICAgICAgICAgdmFsdWUgPSAiYmlnIjsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdmFsdWUgPSAibGl0dGxlIjsKLSAgICAgICAgU0VUX1NZU19GUk9NX1NUUklORygiYnl0ZW9yZGVyIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfRnJvbVN0cmluZyh2YWx1ZSkpOwotICAgIH0KICNpZmRlZiBNU19DT1JFRExMCiAgICAgU0VUX1NZU19GUk9NX1NUUklORygiZGxsaGFuZGxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgIFB5TG9uZ19Gcm9tVm9pZFB0cihQeVdpbl9ETExoTW9kdWxlKSk7CkBAIC0xNjY4LDQ3ICsxNzUwLDU5IEBACiAjZW5kaWYKICAgICBpZiAod2Fybm9wdGlvbnMgPT0gTlVMTCkgewogICAgICAgICB3YXJub3B0aW9ucyA9IFB5TGlzdF9OZXcoMCk7CisgICAgICAgIGlmICh3YXJub3B0aW9ucyA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIGVsc2UgewogICAgICAgICBQeV9JTkNSRUYod2Fybm9wdGlvbnMpOwogICAgIH0KLSAgICBpZiAod2Fybm9wdGlvbnMgIT0gTlVMTCkgewotICAgICAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhzeXNkaWN0LCAid2Fybm9wdGlvbnMiLCB3YXJub3B0aW9ucyk7Ci0gICAgfQorICAgIFNFVF9TWVNfRlJPTV9TVFJJTkdfQk9SUk9XKCJ3YXJub3B0aW9ucyIsIHdhcm5vcHRpb25zKTsKIAotICAgIHYgPSBnZXRfeG9wdGlvbnMoKTsKLSAgICBpZiAodiAhPSBOVUxMKSB7Ci0gICAgICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKHN5c2RpY3QsICJfeG9wdGlvbnMiLCB2KTsKLSAgICB9CisgICAgU0VUX1NZU19GUk9NX1NUUklOR19CT1JST1coIl94b3B0aW9ucyIsIGdldF94b3B0aW9ucygpKTsKIAogICAgIC8qIHZlcnNpb25faW5mbyAqLwotICAgIGlmIChWZXJzaW9uSW5mb1R5cGUudHBfbmFtZSA9PSAwKQotICAgICAgICBQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlKCZWZXJzaW9uSW5mb1R5cGUsICZ2ZXJzaW9uX2luZm9fZGVzYyk7CisgICAgaWYgKFZlcnNpb25JbmZvVHlwZS50cF9uYW1lID09IE5VTEwpIHsKKyAgICAgICAgaWYgKFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUyKCZWZXJzaW9uSW5mb1R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdmVyc2lvbl9pbmZvX2Rlc2MpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KICAgICB2ZXJzaW9uX2luZm8gPSBtYWtlX3ZlcnNpb25faW5mbygpOwogICAgIFNFVF9TWVNfRlJPTV9TVFJJTkcoInZlcnNpb25faW5mbyIsIHZlcnNpb25faW5mbyk7CiAgICAgLyogcHJldmVudCB1c2VyIGZyb20gY3JlYXRpbmcgbmV3IGluc3RhbmNlcyAqLwogICAgIFZlcnNpb25JbmZvVHlwZS50cF9pbml0ID0gTlVMTDsKICAgICBWZXJzaW9uSW5mb1R5cGUudHBfbmV3ID0gTlVMTDsKKyAgICByZXMgPSBQeURpY3RfRGVsSXRlbVN0cmluZyhWZXJzaW9uSW5mb1R5cGUudHBfZGljdCwgIl9fbmV3X18iKTsKKyAgICBpZiAocmVzIDwgMCAmJiBQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0tleUVycm9yKSkKKyAgICAgICAgUHlFcnJfQ2xlYXIoKTsKIAogICAgIC8qIGltcGxlbWVudGF0aW9uICovCiAgICAgU0VUX1NZU19GUk9NX1NUUklORygiaW1wbGVtZW50YXRpb24iLCBtYWtlX2ltcGxfaW5mbyh2ZXJzaW9uX2luZm8pKTsKIAogICAgIC8qIGZsYWdzICovCi0gICAgaWYgKEZsYWdzVHlwZS50cF9uYW1lID09IDApCi0gICAgICAgIFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUoJkZsYWdzVHlwZSwgJmZsYWdzX2Rlc2MpOworICAgIGlmIChGbGFnc1R5cGUudHBfbmFtZSA9PSAwKSB7CisgICAgICAgIGlmIChQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlMigmRmxhZ3NUeXBlLCAmZmxhZ3NfZGVzYykgPCAwKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogICAgIFNFVF9TWVNfRlJPTV9TVFJJTkcoImZsYWdzIiwgbWFrZV9mbGFncygpKTsKICAgICAvKiBwcmV2ZW50IHVzZXIgZnJvbSBjcmVhdGluZyBuZXcgaW5zdGFuY2VzICovCiAgICAgRmxhZ3NUeXBlLnRwX2luaXQgPSBOVUxMOwogICAgIEZsYWdzVHlwZS50cF9uZXcgPSBOVUxMOwotCisgICAgcmVzID0gUHlEaWN0X0RlbEl0ZW1TdHJpbmcoRmxhZ3NUeXBlLnRwX2RpY3QsICJfX25ld19fIik7CisgICAgaWYgKHJlcyA8IDAgJiYgUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19LZXlFcnJvcikpCisgICAgICAgIFB5RXJyX0NsZWFyKCk7CiAKICNpZiBkZWZpbmVkKE1TX1dJTkRPV1MpCiAgICAgLyogZ2V0d2luZG93c3ZlcnNpb24gKi8KICAgICBpZiAoV2luZG93c1ZlcnNpb25UeXBlLnRwX25hbWUgPT0gMCkKLSAgICAgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZSgmV2luZG93c1ZlcnNpb25UeXBlLCAmd2luZG93c192ZXJzaW9uX2Rlc2MpOworICAgICAgICBpZiAoUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZTIoJldpbmRvd3NWZXJzaW9uVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ3aW5kb3dzX3ZlcnNpb25fZGVzYykgPCAwKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgLyogcHJldmVudCB1c2VyIGZyb20gY3JlYXRpbmcgbmV3IGluc3RhbmNlcyAqLwogICAgIFdpbmRvd3NWZXJzaW9uVHlwZS50cF9pbml0ID0gTlVMTDsKICAgICBXaW5kb3dzVmVyc2lvblR5cGUudHBfbmV3ID0gTlVMTDsKKyAgICByZXMgPSBQeURpY3RfRGVsSXRlbVN0cmluZyhXaW5kb3dzVmVyc2lvblR5cGUudHBfZGljdCwgIl9fbmV3X18iKTsKKyAgICBpZiAocmVzIDwgMCAmJiBQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0tleUVycm9yKSkKKyAgICAgICAgUHlFcnJfQ2xlYXIoKTsKICNlbmRpZgogCiAgICAgLyogZmxvYXQgcmVwciBzdHlsZTogMC4wMyAoc2hvcnQpIHZzIDAuMDI5OTk5OTk5OTk5OTk5OTk5IChsZWdhY3kpICovCkBAIC0xNzI1LDYgKzE4MTksNyBAQAogI2VuZGlmCiAKICN1bmRlZiBTRVRfU1lTX0ZST01fU1RSSU5HCisjdW5kZWYgU0VUX1NZU19GUk9NX1NUUklOR19CT1JST1cKICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgcmV0dXJuIG07CkBAIC0xNzY5LDcgKzE4NjQsNyBAQAogICAgIFB5T2JqZWN0ICp2OwogICAgIGlmICgodiA9IG1ha2VwYXRob2JqZWN0KHBhdGgsIERFTElNKSkgPT0gTlVMTCkKICAgICAgICAgUHlfRmF0YWxFcnJvcigiY2FuJ3QgY3JlYXRlIHN5cy5wYXRoIik7Ci0gICAgaWYgKFB5U3lzX1NldE9iamVjdCgicGF0aCIsIHYpICE9IDApCisgICAgaWYgKF9QeVN5c19TZXRPYmplY3RJZCgmUHlJZF9wYXRoLCB2KSAhPSAwKQogICAgICAgICBQeV9GYXRhbEVycm9yKCJjYW4ndCBhc3NpZ24gc3lzLnBhdGgiKTsKICAgICBQeV9ERUNSRUYodik7CiB9CkBAIC0xNzg4LDIyICsxODgzLDcgQEAKICAgICBpZiAoYXYgIT0gTlVMTCkgewogICAgICAgICBpbnQgaTsKICAgICAgICAgZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKykgewotI2lmZGVmIF9fVk1TCi0gICAgICAgICAgICBQeU9iamVjdCAqdjsKLQotICAgICAgICAgICAgLyogYXJndlswXSBpcyB0aGUgc2NyaXB0IHBhdGhuYW1lIGlmIGtub3duICovCi0gICAgICAgICAgICBpZiAoaSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgY2hhciogZm4gPSBkZWNjJHRyYW5zbGF0ZV92bXMoYXJndlswXSk7Ci0gICAgICAgICAgICAgICAgaWYgKChmbiA9PSAoY2hhciAqKTApIHx8IGZuID09IChjaGFyICopLTEpCi0gICAgICAgICAgICAgICAgICAgIHYgPSBQeVVuaWNvZGVfRnJvbVN0cmluZyhhcmd2WzBdKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHYgPSBQeVVuaWNvZGVfRnJvbVN0cmluZygKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlY2MkdHJhbnNsYXRlX3Ztcyhhcmd2WzBdKSk7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICB2ID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoYXJndltpXSk7Ci0jZWxzZQogICAgICAgICAgICAgUHlPYmplY3QgKnYgPSBQeVVuaWNvZGVfRnJvbVdpZGVDaGFyKGFyZ3ZbaV0sIC0xKTsKLSNlbmRpZgogICAgICAgICAgICAgaWYgKHYgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihhdik7CiAgICAgICAgICAgICAgICAgYXYgPSBOVUxMOwpAQCAtMTgzOCw3ICsxOTE4LDcgQEAKICAgICB3Y2hhcl90IGZ1bGxwYXRoW01BWF9QQVRIXTsKICNlbmRpZgogCi0gICAgcGF0aCA9IFB5U3lzX0dldE9iamVjdCgicGF0aCIpOworICAgIHBhdGggPSBfUHlTeXNfR2V0T2JqZWN0SWQoJlB5SWRfcGF0aCk7CiAgICAgaWYgKHBhdGggPT0gTlVMTCkKICAgICAgICAgcmV0dXJuOwogCkBAIC0xOTM3LDcgKzIwMTcsNyBAQAogdm9pZAogUHlTeXNfU2V0QXJndihpbnQgYXJnYywgd2NoYXJfdCAqKmFyZ3YpCiB7Ci0gICAgUHlTeXNfU2V0QXJndkV4KGFyZ2MsIGFyZ3YsIDEpOworICAgIFB5U3lzX1NldEFyZ3ZFeChhcmdjLCBhcmd2LCBQeV9Jc29sYXRlZEZsYWcgPT0gMCk7CiB9CiAKIC8qIFJlaW1wbGVtZW50YXRpb24gb2YgUHlGaWxlX1dyaXRlU3RyaW5nKCkgbm8gY2FsbGluZyBpbmRpcmVjdGx5CkBAIC0xOTQ4LDcgKzIwMjgsNiBAQAogewogICAgIFB5T2JqZWN0ICp3cml0ZXIgPSBOVUxMLCAqYXJncyA9IE5VTEwsICpyZXN1bHQgPSBOVUxMOwogICAgIGludCBlcnI7Ci0gICAgX1B5X0lERU5USUZJRVIod3JpdGUpOwogCiAgICAgaWYgKGZpbGUgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIC0xOwpAQCAtMjAyNSw3ICsyMTA0LDcgQEAKICAqLwogCiBzdGF0aWMgdm9pZAotc3lzX3dyaXRlKGNoYXIgKm5hbWUsIEZJTEUgKmZwLCBjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgdmEpCitzeXNfd3JpdGUoX1B5X0lkZW50aWZpZXIgKmtleSwgRklMRSAqZnAsIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCB2YSkKIHsKICAgICBQeU9iamVjdCAqZmlsZTsKICAgICBQeU9iamVjdCAqZXJyb3JfdHlwZSwgKmVycm9yX3ZhbHVlLCAqZXJyb3JfdHJhY2ViYWNrOwpAQCAtMjAzMyw3ICsyMTEyLDcgQEAKICAgICBpbnQgd3JpdHRlbjsKIAogICAgIFB5RXJyX0ZldGNoKCZlcnJvcl90eXBlLCAmZXJyb3JfdmFsdWUsICZlcnJvcl90cmFjZWJhY2spOwotICAgIGZpbGUgPSBQeVN5c19HZXRPYmplY3QobmFtZSk7CisgICAgZmlsZSA9IF9QeVN5c19HZXRPYmplY3RJZChrZXkpOwogICAgIHdyaXR0ZW4gPSBQeU9TX3ZzbnByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpLCBmb3JtYXQsIHZhKTsKICAgICBpZiAoc3lzX3B5ZmlsZV93cml0ZShidWZmZXIsIGZpbGUpICE9IDApIHsKICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKQEAgLTIwNTMsNyArMjEzMiw3IEBACiAgICAgdmFfbGlzdCB2YTsKIAogICAgIHZhX3N0YXJ0KHZhLCBmb3JtYXQpOwotICAgIHN5c193cml0ZSgic3Rkb3V0Iiwgc3Rkb3V0LCBmb3JtYXQsIHZhKTsKKyAgICBzeXNfd3JpdGUoJlB5SWRfc3Rkb3V0LCBzdGRvdXQsIGZvcm1hdCwgdmEpOwogICAgIHZhX2VuZCh2YSk7CiB9CiAKQEAgLTIwNjMsMTkgKzIxNDIsMTkgQEAKICAgICB2YV9saXN0IHZhOwogCiAgICAgdmFfc3RhcnQodmEsIGZvcm1hdCk7Ci0gICAgc3lzX3dyaXRlKCJzdGRlcnIiLCBzdGRlcnIsIGZvcm1hdCwgdmEpOworICAgIHN5c193cml0ZSgmUHlJZF9zdGRlcnIsIHN0ZGVyciwgZm9ybWF0LCB2YSk7CiAgICAgdmFfZW5kKHZhKTsKIH0KIAogc3RhdGljIHZvaWQKLXN5c19mb3JtYXQoY2hhciAqbmFtZSwgRklMRSAqZnAsIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCB2YSkKK3N5c19mb3JtYXQoX1B5X0lkZW50aWZpZXIgKmtleSwgRklMRSAqZnAsIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCB2YSkKIHsKICAgICBQeU9iamVjdCAqZmlsZSwgKm1lc3NhZ2U7CiAgICAgUHlPYmplY3QgKmVycm9yX3R5cGUsICplcnJvcl92YWx1ZSwgKmVycm9yX3RyYWNlYmFjazsKICAgICBjaGFyICp1dGY4OwogCiAgICAgUHlFcnJfRmV0Y2goJmVycm9yX3R5cGUsICZlcnJvcl92YWx1ZSwgJmVycm9yX3RyYWNlYmFjayk7Ci0gICAgZmlsZSA9IFB5U3lzX0dldE9iamVjdChuYW1lKTsKKyAgICBmaWxlID0gX1B5U3lzX0dldE9iamVjdElkKGtleSk7CiAgICAgbWVzc2FnZSA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0Vihmb3JtYXQsIHZhKTsKICAgICBpZiAobWVzc2FnZSAhPSBOVUxMKSB7CiAgICAgICAgIGlmIChzeXNfcHlmaWxlX3dyaXRlX3VuaWNvZGUobWVzc2FnZSwgZmlsZSkgIT0gMCkgewpAQCAtMjA5NSw3ICsyMTc0LDcgQEAKICAgICB2YV9saXN0IHZhOwogCiAgICAgdmFfc3RhcnQodmEsIGZvcm1hdCk7Ci0gICAgc3lzX2Zvcm1hdCgic3Rkb3V0Iiwgc3Rkb3V0LCBmb3JtYXQsIHZhKTsKKyAgICBzeXNfZm9ybWF0KCZQeUlkX3N0ZG91dCwgc3Rkb3V0LCBmb3JtYXQsIHZhKTsKICAgICB2YV9lbmQodmEpOwogfQogCkBAIC0yMTA1LDYgKzIxODQsNiBAQAogICAgIHZhX2xpc3QgdmE7CiAKICAgICB2YV9zdGFydCh2YSwgZm9ybWF0KTsKLSAgICBzeXNfZm9ybWF0KCJzdGRlcnIiLCBzdGRlcnIsIGZvcm1hdCwgdmEpOworICAgIHN5c19mb3JtYXQoJlB5SWRfc3RkZXJyLCBzdGRlcnIsIGZvcm1hdCwgdmEpOwogICAgIHZhX2VuZCh2YSk7CiB9CmRpZmYgLS1naXQgYS9QeXRob24vdGhyZWFkLmMgYi9QeXRob24vdGhyZWFkLmMKaW5kZXggZTU1ZDM0Mi4uODEwNjkxZiAxMDA2NDQKLS0tIGEvUHl0aG9uL3RocmVhZC5jCisrKyBiL1B5dGhvbi90aHJlYWQuYwpAQCAtMzEsNyArMzEsNyBAQAogICAgdGhyZWFkcy4KIAogICAgVGhpcyBpcyB2YWxpZCBmb3IgSFAtVVggMTEuMjMgcnVubmluZyBvbiBhbiBpYTY0IHN5c3RlbS4gSWYgbmVlZGVkLCBhZGQKLSAgIGEgY2hlY2sgb2YgX19pYTY0IHRvIHZlcmlmeSB0aGF0IHdlJ3JlIHJ1bm5pbmcgb24gYSBpYTY0IHN5c3RlbSBpbnN0ZWFkCisgICBhIGNoZWNrIG9mIF9faWE2NCB0byB2ZXJpZnkgdGhhdCB3ZSdyZSBydW5uaW5nIG9uIGFuIGlhNjQgc3lzdGVtIGluc3RlYWQKICAgIG9mIGEgcGEtcmlzYyBzeXN0ZW0uCiAqLwogI2lmZGVmIF9faHB1eApAQCAtOTEsMTAgKzkxLDYgQEAKICNpbmNsdWRlICJ0aHJlYWRfbnQuaCIKICNlbmRpZgogCi0jaWZkZWYgT1MyX1RIUkVBRFMKLSNkZWZpbmUgUFlUSFJFQURfTkFNRSAib3MyIgotI2luY2x1ZGUgInRocmVhZF9vczIuaCIKLSNlbmRpZgogCiAvKgogI2lmZGVmIEZPT0JBUl9USFJFQURTCkBAIC0yMDksNyArMjA1LDcgQEAKICAqIHNlZ2ZhdWx0cy4gIE5vdyB3ZSBsb2NrIHRoZSB3aG9sZSByb3V0aW5lLgogICovCiBzdGF0aWMgc3RydWN0IGtleSAqCi1maW5kX2tleShpbnQga2V5LCB2b2lkICp2YWx1ZSkKK2ZpbmRfa2V5KGludCBzZXRfdmFsdWUsIGludCBrZXksIHZvaWQgKnZhbHVlKQogewogICAgIHN0cnVjdCBrZXkgKnAsICpwcmV2X3A7CiAgICAgbG9uZyBpZCA9IFB5VGhyZWFkX2dldF90aHJlYWRfaWRlbnQoKTsKQEAgLTIxOSwxMCArMjE1LDEzIEBACiAgICAgUHlUaHJlYWRfYWNxdWlyZV9sb2NrKGtleW11dGV4LCAxKTsKICAgICBwcmV2X3AgPSBOVUxMOwogICAgIGZvciAocCA9IGtleWhlYWQ7IHAgIT0gTlVMTDsgcCA9IHAtPm5leHQpIHsKLSAgICAgICAgaWYgKHAtPmlkID09IGlkICYmIHAtPmtleSA9PSBrZXkpCisgICAgICAgIGlmIChwLT5pZCA9PSBpZCAmJiBwLT5rZXkgPT0ga2V5KSB7CisgICAgICAgICAgICBpZiAoc2V0X3ZhbHVlKQorICAgICAgICAgICAgICAgIHAtPnZhbHVlID0gdmFsdWU7CiAgICAgICAgICAgICBnb3RvIERvbmU7CisgICAgICAgIH0KICAgICAgICAgLyogU2FuaXR5IGNoZWNrLiAgVGhlc2Ugc3RhdGVzIHNob3VsZCBuZXZlciBoYXBwZW4gYnV0IGlmCi0gICAgICAgICAqIHRoZXkgZG8gd2UgbXVzdCBhYm9ydC4gIE90aGVyd2lzZSB3ZSdsbCBlbmQgdXAgc3Bpbm5pbmcgaW4KKyAgICAgICAgICogdGhleSBkbyB3ZSBtdXN0IGFib3J0LiAgT3RoZXJ3aXNlIHdlJ2xsIGVuZCB1cCBzcGlubmluZwogICAgICAgICAgKiBpbiBhIHRpZ2h0IGxvb3Agd2l0aCB0aGUgbG9jayBoZWxkLiAgQSBzaW1pbGFyIGNoZWNrIGlzIGRvbmUKICAgICAgICAgICogaW4gcHlzdGF0ZS5jIHRzdGF0ZV9kZWxldGVfY29tbW9uKCkuICAqLwogICAgICAgICBpZiAocCA9PSBwcmV2X3ApCkBAIC0yMzEsMTEgKzIzMCwxMSBAQAogICAgICAgICBpZiAocC0+bmV4dCA9PSBrZXloZWFkKQogICAgICAgICAgICAgUHlfRmF0YWxFcnJvcigidGxzIGZpbmRfa2V5OiBjaXJjdWxhciBsaXN0KCEpIik7CiAgICAgfQotICAgIGlmICh2YWx1ZSA9PSBOVUxMKSB7CisgICAgaWYgKCFzZXRfdmFsdWUgJiYgdmFsdWUgPT0gTlVMTCkgewogICAgICAgICBhc3NlcnQocCA9PSBOVUxMKTsKICAgICAgICAgZ290byBEb25lOwogICAgIH0KLSAgICBwID0gKHN0cnVjdCBrZXkgKiltYWxsb2Moc2l6ZW9mKHN0cnVjdCBrZXkpKTsKKyAgICBwID0gKHN0cnVjdCBrZXkgKilQeU1lbV9SYXdNYWxsb2Moc2l6ZW9mKHN0cnVjdCBrZXkpKTsKICAgICBpZiAocCAhPSBOVUxMKSB7CiAgICAgICAgIHAtPmlkID0gaWQ7CiAgICAgICAgIHAtPmtleSA9IGtleTsKQEAgLTI3NCw3ICsyNzMsNyBAQAogICAgIHdoaWxlICgocCA9ICpxKSAhPSBOVUxMKSB7CiAgICAgICAgIGlmIChwLT5rZXkgPT0ga2V5KSB7CiAgICAgICAgICAgICAqcSA9IHAtPm5leHQ7Ci0gICAgICAgICAgICBmcmVlKCh2b2lkICopcCk7CisgICAgICAgICAgICBQeU1lbV9SYXdGcmVlKCh2b2lkICopcCk7CiAgICAgICAgICAgICAvKiBOQiBUaGlzIGRvZXMgKm5vdCogZnJlZSBwLT52YWx1ZSEgKi8KICAgICAgICAgfQogICAgICAgICBlbHNlCkBAIC0yODMsMTkgKzI4MiwxMiBAQAogICAgIFB5VGhyZWFkX3JlbGVhc2VfbG9jayhrZXltdXRleCk7CiB9CiAKLS8qIENvbmZ1c2luZzogIElmIHRoZSBjdXJyZW50IHRocmVhZCBoYXMgYW4gYXNzb2NpYXRpb24gZm9yIGtleSwKLSAqIHZhbHVlIGlzIGlnbm9yZWQsIGFuZCAwIGlzIHJldHVybmVkLiAgRWxzZSBhbiBhdHRlbXB0IGlzIG1hZGUgdG8gY3JlYXRlCi0gKiBhbiBhc3NvY2lhdGlvbiBvZiBrZXkgdG8gdmFsdWUgZm9yIHRoZSBjdXJyZW50IHRocmVhZC4gIDAgaXMgcmV0dXJuZWQKLSAqIGlmIHRoYXQgc3VjY2VlZHMsIGJ1dCAtMSBpcyByZXR1cm5lZCBpZiB0aGVyZSdzIG5vdCBlbm91Z2ggbWVtb3J5Ci0gKiB0byBjcmVhdGUgdGhlIGFzc29jaWF0aW9uLiAgdmFsdWUgbXVzdCBub3QgYmUgTlVMTC4KLSAqLwogaW50CiBQeVRocmVhZF9zZXRfa2V5X3ZhbHVlKGludCBrZXksIHZvaWQgKnZhbHVlKQogewogICAgIHN0cnVjdCBrZXkgKnA7CiAKLSAgICBhc3NlcnQodmFsdWUgIT0gTlVMTCk7Ci0gICAgcCA9IGZpbmRfa2V5KGtleSwgdmFsdWUpOworICAgIHAgPSBmaW5kX2tleSgxLCBrZXksIHZhbHVlKTsKICAgICBpZiAocCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gLTE7CiAgICAgZWxzZQpAQCAtMzA4LDcgKzMwMCw3IEBACiB2b2lkICoKIFB5VGhyZWFkX2dldF9rZXlfdmFsdWUoaW50IGtleSkKIHsKLSAgICBzdHJ1Y3Qga2V5ICpwID0gZmluZF9rZXkoa2V5LCBOVUxMKTsKKyAgICBzdHJ1Y3Qga2V5ICpwID0gZmluZF9rZXkoMCwga2V5LCBOVUxMKTsKIAogICAgIGlmIChwID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMzI4LDcgKzMyMCw3IEBACiAgICAgd2hpbGUgKChwID0gKnEpICE9IE5VTEwpIHsKICAgICAgICAgaWYgKHAtPmtleSA9PSBrZXkgJiYgcC0+aWQgPT0gaWQpIHsKICAgICAgICAgICAgICpxID0gcC0+bmV4dDsKLSAgICAgICAgICAgIGZyZWUoKHZvaWQgKilwKTsKKyAgICAgICAgICAgIFB5TWVtX1Jhd0ZyZWUoKHZvaWQgKilwKTsKICAgICAgICAgICAgIC8qIE5CIFRoaXMgZG9lcyAqbm90KiBmcmVlIHAtPnZhbHVlISAqLwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTM2MSw3ICszNTMsNyBAQAogICAgIHdoaWxlICgocCA9ICpxKSAhPSBOVUxMKSB7CiAgICAgICAgIGlmIChwLT5pZCAhPSBpZCkgewogICAgICAgICAgICAgKnEgPSBwLT5uZXh0OwotICAgICAgICAgICAgZnJlZSgodm9pZCAqKXApOworICAgICAgICAgICAgUHlNZW1fUmF3RnJlZSgodm9pZCAqKXApOwogICAgICAgICAgICAgLyogTkIgVGhpcyBkb2VzICpub3QqIGZyZWUgcC0+dmFsdWUhICovCiAgICAgICAgIH0KICAgICAgICAgZWxzZQpAQCAtNDAzLDggKzM5NSwxMCBAQAogICAgIGludCBsZW47CiAjZW5kaWYKIAotICAgIGlmIChUaHJlYWRJbmZvVHlwZS50cF9uYW1lID09IDApCi0gICAgICAgIFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUoJlRocmVhZEluZm9UeXBlLCAmdGhyZWFkaW5mb19kZXNjKTsKKyAgICBpZiAoVGhyZWFkSW5mb1R5cGUudHBfbmFtZSA9PSAwKSB7CisgICAgICAgIGlmIChQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlMigmVGhyZWFkSW5mb1R5cGUsICZ0aHJlYWRpbmZvX2Rlc2MpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAogICAgIHRocmVhZGluZm8gPSBQeVN0cnVjdFNlcXVlbmNlX05ldygmVGhyZWFkSW5mb1R5cGUpOwogICAgIGlmICh0aHJlYWRpbmZvID09IE5VTEwpCmRpZmYgLS1naXQgYS9QeXRob24vdGhyZWFkX250LmggYi9QeXRob24vdGhyZWFkX250LmgKaW5kZXggYjE1N2ZjNS4uODQ0NTJjZCAxMDA2NDQKLS0tIGEvUHl0aG9uL3RocmVhZF9udC5oCisrKyBiL1B5dGhvbi90aHJlYWRfbnQuaApAQCAtMzQsNyArMzQsNyBAQAogUE5STVVURVgKIEFsbG9jTm9uUmVjdXJzaXZlTXV0ZXgoKQogewotICAgIFBOUk1VVEVYIG0gPSAoUE5STVVURVgpbWFsbG9jKHNpemVvZihOUk1VVEVYKSk7CisgICAgUE5STVVURVggbSA9IChQTlJNVVRFWClQeU1lbV9SYXdNYWxsb2Moc2l6ZW9mKE5STVVURVgpKTsKICAgICBpZiAoIW0pCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmIChQeUNPTkRfSU5JVCgmbS0+Y3YpKQpAQCAtNDYsNyArNDYsNyBAQAogICAgIG0tPmxvY2tlZCA9IDA7CiAgICAgcmV0dXJuIG07CiBmYWlsOgotICAgIGZyZWUobSk7CisgICAgUHlNZW1fUmF3RnJlZShtKTsKICAgICByZXR1cm4gTlVMTDsKIH0KIApAQCAtNTYsNyArNTYsNyBAQAogICAgIGlmIChtdXRleCkgewogICAgICAgICBQeUNPTkRfRklOSSgmbXV0ZXgtPmN2KTsKICAgICAgICAgUHlNVVRFWF9GSU5JKCZtdXRleC0+Y3MpOwotICAgICAgICBmcmVlKG11dGV4KTsKKyAgICAgICAgUHlNZW1fUmF3RnJlZShtdXRleCk7CiAgICAgfQogfQogCkBAIC0xMDcsNyArMTA3LDcgQEAKICAgICByZXN1bHQgPSBQeUNPTkRfU0lHTkFMKCZtdXRleC0+Y3YpOwogICAgIHJlc3VsdCAmPSBQeU1VVEVYX1VOTE9DSygmbXV0ZXgtPmNzKTsKICAgICByZXR1cm4gcmVzdWx0OwotfSAgICAKK30KIAogI2Vsc2UgLyogaWYgISBfUFlfVVNFX0NWX0xPQ0tTICovCiAKQEAgLTEzMCw3ICsxMzAsNyBAQAogRFdPUkQKIEVudGVyTm9uUmVjdXJzaXZlTXV0ZXgoUE5STVVURVggbXV0ZXgsIERXT1JEIG1pbGxpc2Vjb25kcykKIHsKLSAgICByZXR1cm4gV2FpdEZvclNpbmdsZU9iamVjdChtdXRleCwgbWlsbGlzZWNvbmRzKTsKKyAgICByZXR1cm4gV2FpdEZvclNpbmdsZU9iamVjdEV4KG11dGV4LCBtaWxsaXNlY29uZHMsIEZBTFNFKTsKIH0KIAogQk9PTApAQCAtMzg5LDIwICszODksMTEgQEAKICAgICBUbHNGcmVlKGtleSk7CiB9CiAKLS8qIFdlIG11c3QgYmUgY2FyZWZ1bCB0byBlbXVsYXRlIHRoZSBzdHJhbmdlIHNlbWFudGljcyBpbXBsZW1lbnRlZCBpbiB0aHJlYWQuYywKLSAqIHdoZXJlIHRoZSB2YWx1ZSBpcyBvbmx5IHNldCBpZiBpdCBoYXNuJ3QgYmVlbiBzZXQgYmVmb3JlLgotICovCiBpbnQKIFB5VGhyZWFkX3NldF9rZXlfdmFsdWUoaW50IGtleSwgdm9pZCAqdmFsdWUpCiB7CiAgICAgQk9PTCBvazsKLSAgICB2b2lkICpvbGR2YWx1ZTsKIAotICAgIGFzc2VydCh2YWx1ZSAhPSBOVUxMKTsKLSAgICBvbGR2YWx1ZSA9IFRsc0dldFZhbHVlKGtleSk7Ci0gICAgaWYgKG9sZHZhbHVlICE9IE5VTEwpCi0gICAgICAgIC8qIGlnbm9yZSB2YWx1ZSBpZiBhbHJlYWR5IHNldCAqLwotICAgICAgICByZXR1cm4gMDsKICAgICBvayA9IFRsc1NldFZhbHVlKGtleSwgdmFsdWUpOwogICAgIGlmICghb2spCiAgICAgICAgIHJldHVybiAtMTsKZGlmZiAtLWdpdCBhL1B5dGhvbi90aHJlYWRfb3MyLmggYi9QeXRob24vdGhyZWFkX29zMi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYjI2NGI1Li4wMDAwMDAwCi0tLSBhL1B5dGhvbi90aHJlYWRfb3MyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNjcgKzAsMCBAQAotLyogVGhpcyBjb2RlIGltcGxlbWVudGVkIGJ5IGN2YWxlQG5ldGNvbS5jb20gKi8KLQotI2RlZmluZSBJTkNMX0RPU1BST0NFU1MKLSNkZWZpbmUgSU5DTF9ET1NTRU1BUEhPUkVTCi0jaW5jbHVkZSAib3MyLmgiCi0jaW5jbHVkZSAibGltaXRzLmgiCi0KLSNpbmNsdWRlICJwcm9jZXNzLmgiCi0KLSNpZiBkZWZpbmVkKFBZQ0NfR0NDKQotI2luY2x1ZGUgPHN5cy9idWlsdGluLmg+Ci0jaW5jbHVkZSA8c3lzL2ZtdXRleC5oPgotI2Vsc2UKLWxvbmcgUHlUaHJlYWRfZ2V0X3RocmVhZF9pZGVudCh2b2lkKTsKLSNlbmRpZgotCi0vKiBkZWZhdWx0IHRocmVhZCBzdGFjayBzaXplIG9mIDY0a0IgKi8KLSNpZiAhZGVmaW5lZChUSFJFQURfU1RBQ0tfU0laRSkKLSNkZWZpbmUgVEhSRUFEX1NUQUNLX1NJWkUgICAgICAgMHgxMDAwMAotI2VuZGlmCi0KLSNkZWZpbmUgT1MyX1NUQUNLU0laRSh4KSAgICAgICAgKHggPyB4IDogVEhSRUFEX1NUQUNLX1NJWkUpCi0KLS8qCi0gKiBJbml0aWFsaXphdGlvbiBvZiB0aGUgQyBwYWNrYWdlLCBzaG91bGQgbm90IGJlIG5lZWRlZC4KLSAqLwotc3RhdGljIHZvaWQKLVB5VGhyZWFkX19pbml0X3RocmVhZCh2b2lkKQotewotfQotCi0vKgotICogVGhyZWFkIHN1cHBvcnQuCi0gKi8KLWxvbmcKLVB5VGhyZWFkX3N0YXJ0X25ld190aHJlYWQodm9pZCAoKmZ1bmMpKHZvaWQgKiksIHZvaWQgKmFyZykKLXsKLSAgICBpbnQgdGhyZWFkX2lkOwotCi0gICAgdGhyZWFkX2lkID0gX2JlZ2ludGhyZWFkKGZ1bmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBPUzJfU1RBQ0tTSVpFKF9weXRocmVhZF9zdGFja3NpemUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZyk7Ci0KLSAgICBpZiAodGhyZWFkX2lkID09IC0xKSB7Ci0gICAgICAgIGRwcmludGYoKCJfYmVnaW50aHJlYWQgZmFpbGVkLiByZXR1cm4gJWxkXG4iLCBlcnJubykpOwotICAgIH0KLQotICAgIHJldHVybiB0aHJlYWRfaWQ7Ci19Ci0KLWxvbmcKLVB5VGhyZWFkX2dldF90aHJlYWRfaWRlbnQodm9pZCkKLXsKLSNpZiAhZGVmaW5lZChQWUNDX0dDQykKLSAgICBQUElCIHBpYjsKLSAgICBQVElCIHRpYjsKLSNlbmRpZgotCi0gICAgaWYgKCFpbml0aWFsaXplZCkKLSAgICAgICAgUHlUaHJlYWRfaW5pdF90aHJlYWQoKTsKLQotI2lmIGRlZmluZWQoUFlDQ19HQ0MpCi0gICAgcmV0dXJuIF9nZXR0aWQoKTsKLSNlbHNlCi0gICAgRG9zR2V0SW5mb0Jsb2NrcygmdGliLCAmcGliKTsKLSAgICByZXR1cm4gdGliLT50aWJfcHRpYjItPnRpYjJfdWx0aWQ7Ci0jZW5kaWYKLX0KLQotdm9pZAotUHlUaHJlYWRfZXhpdF90aHJlYWQodm9pZCkKLXsKLSAgICBkcHJpbnRmKCgiJWxkOiBQeVRocmVhZF9leGl0X3RocmVhZCBjYWxsZWRcbiIsCi0gICAgICAgICAgICAgUHlUaHJlYWRfZ2V0X3RocmVhZF9pZGVudCgpKSk7Ci0gICAgaWYgKCFpbml0aWFsaXplZCkKLSAgICAgICAgZXhpdCgwKTsKLSAgICBfZW5kdGhyZWFkKCk7Ci19Ci0KLS8qCi0gKiBMb2NrIHN1cHBvcnQuICBUaGlzIGlzIGltcGxlbWVudGVkIHdpdGggYW4gZXZlbnQgc2VtYXBob3JlIGFuZCBjcml0aWNhbAotICogc2VjdGlvbnMgdG8gbWFrZSBpdCBiZWhhdmUgbW9yZSBsaWtlIGEgcG9zaXggbXV0ZXggdGhhbiBpdHMgT1MvMgotICogY291bnRlcnBhcnRzLgotICovCi0KLXR5cGVkZWYgc3RydWN0IG9zMl9sb2NrX3QgewotICAgIGludCBpc19zZXQ7Ci0gICAgSEVWIGNoYW5nZWQ7Ci19ICp0eXBlX29zMl9sb2NrOwotCi1QeVRocmVhZF90eXBlX2xvY2sKLVB5VGhyZWFkX2FsbG9jYXRlX2xvY2sodm9pZCkKLXsKLSNpZiBkZWZpbmVkKFBZQ0NfR0NDKQotICAgIF9mbXV0ZXggKnNlbSA9IG1hbGxvYyhzaXplb2YoX2ZtdXRleCkpOwotICAgIGlmICghaW5pdGlhbGl6ZWQpCi0gICAgICAgIFB5VGhyZWFkX2luaXRfdGhyZWFkKCk7Ci0gICAgZHByaW50ZigoIiVsZDogUHlUaHJlYWRfYWxsb2NhdGVfbG9jaygpIC0+ICVseFxuIiwKLSAgICAgICAgICAgICBQeVRocmVhZF9nZXRfdGhyZWFkX2lkZW50KCksCi0gICAgICAgICAgICAgKGxvbmcpc2VtKSk7Ci0gICAgaWYgKF9mbXV0ZXhfY3JlYXRlKHNlbSwgMCkpIHsKLSAgICAgICAgZnJlZShzZW0pOwotICAgICAgICBzZW0gPSBOVUxMOwotICAgIH0KLSAgICByZXR1cm4gKFB5VGhyZWFkX3R5cGVfbG9jaylzZW07Ci0jZWxzZQotICAgIEFQSVJFVCByYzsKLSAgICB0eXBlX29zMl9sb2NrIGxvY2sgPSAodHlwZV9vczJfbG9jayltYWxsb2Moc2l6ZW9mKHN0cnVjdCBvczJfbG9ja190KSk7Ci0KLSAgICBkcHJpbnRmKCgiUHlUaHJlYWRfYWxsb2NhdGVfbG9jayBjYWxsZWRcbiIpKTsKLSAgICBpZiAoIWluaXRpYWxpemVkKQotICAgICAgICBQeVRocmVhZF9pbml0X3RocmVhZCgpOwotCi0gICAgbG9jay0+aXNfc2V0ID0gMDsKLQotICAgIERvc0NyZWF0ZUV2ZW50U2VtKE5VTEwsICZsb2NrLT5jaGFuZ2VkLCAwLCAwKTsKLQotICAgIGRwcmludGYoKCIlbGQ6IFB5VGhyZWFkX2FsbG9jYXRlX2xvY2soKSAtPiAlcFxuIiwKLSAgICAgICAgICAgICBQeVRocmVhZF9nZXRfdGhyZWFkX2lkZW50KCksCi0gICAgICAgICAgICAgbG9jay0+Y2hhbmdlZCkpOwotCi0gICAgcmV0dXJuIChQeVRocmVhZF90eXBlX2xvY2spbG9jazsKLSNlbmRpZgotfQotCi12b2lkCi1QeVRocmVhZF9mcmVlX2xvY2soUHlUaHJlYWRfdHlwZV9sb2NrIGFMb2NrKQotewotI2lmICFkZWZpbmVkKFBZQ0NfR0NDKQotICAgIHR5cGVfb3MyX2xvY2sgbG9jayA9ICh0eXBlX29zMl9sb2NrKWFMb2NrOwotI2VuZGlmCi0KLSAgICBkcHJpbnRmKCgiJWxkOiBQeVRocmVhZF9mcmVlX2xvY2soJXApIGNhbGxlZFxuIiwKLSAgICAgICAgICAgICBQeVRocmVhZF9nZXRfdGhyZWFkX2lkZW50KCksYUxvY2spKTsKLQotI2lmIGRlZmluZWQoUFlDQ19HQ0MpCi0gICAgaWYgKGFMb2NrKSB7Ci0gICAgICAgIF9mbXV0ZXhfY2xvc2UoKF9mbXV0ZXggKilhTG9jayk7Ci0gICAgICAgIGZyZWUoKF9mbXV0ZXggKilhTG9jayk7Ci0gICAgfQotI2Vsc2UKLSAgICBEb3NDbG9zZUV2ZW50U2VtKGxvY2stPmNoYW5nZWQpOwotICAgIGZyZWUoYUxvY2spOwotI2VuZGlmCi19Ci0KLS8qCi0gKiBSZXR1cm4gMSBvbiBzdWNjZXNzIGlmIHRoZSBsb2NrIHdhcyBhY3F1aXJlZAotICoKLSAqIGFuZCAwIGlmIHRoZSBsb2NrIHdhcyBub3QgYWNxdWlyZWQuCi0gKi8KLWludAotUHlUaHJlYWRfYWNxdWlyZV9sb2NrKFB5VGhyZWFkX3R5cGVfbG9jayBhTG9jaywgaW50IHdhaXRmbGFnKQotewotI2lmICFkZWZpbmVkKFBZQ0NfR0NDKQotICAgIGludCAgIGRvbmUgPSAwOwotICAgIFVMT05HIGNvdW50OwotICAgIFBJRCAgIHBpZCA9IDA7Ci0gICAgVElEICAgdGlkID0gMDsKLSAgICB0eXBlX29zMl9sb2NrIGxvY2sgPSAodHlwZV9vczJfbG9jaylhTG9jazsKLSNlbmRpZgotCi0gICAgZHByaW50ZigoIiVsZDogUHlUaHJlYWRfYWNxdWlyZV9sb2NrKCVwLCAlZCkgY2FsbGVkXG4iLAotICAgICAgICAgICAgIFB5VGhyZWFkX2dldF90aHJlYWRfaWRlbnQoKSwKLSAgICAgICAgICAgICBhTG9jaywKLSAgICAgICAgICAgICB3YWl0ZmxhZykpOwotCi0jaWYgZGVmaW5lZChQWUNDX0dDQykKLSAgICAvKiBhbHdheXMgc3VjY2Vzc2Z1bCBpZiB0aGUgbG9jayBkb2Vzbid0IGV4aXN0ICovCi0gICAgaWYgKGFMb2NrICYmCi0gICAgICAgIF9mbXV0ZXhfcmVxdWVzdCgoX2ZtdXRleCAqKWFMb2NrLCB3YWl0ZmxhZyA/IDAgOiBfRk1SX05PV0FJVCkpCi0gICAgICAgIHJldHVybiAwOwotI2Vsc2UKLSAgICB3aGlsZSAoIWRvbmUpIHsKLSAgICAgICAgLyogaWYgdGhlIGxvY2sgaXMgY3VycmVudGx5IHNldCwgd2UgaGF2ZSB0byB3YWl0IGZvcgotICAgICAgICAgKiB0aGUgc3RhdGUgdG8gY2hhbmdlCi0gICAgICAgICAqLwotICAgICAgICBpZiAobG9jay0+aXNfc2V0KSB7Ci0gICAgICAgICAgICBpZiAoIXdhaXRmbGFnKQotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgRG9zV2FpdEV2ZW50U2VtKGxvY2stPmNoYW5nZWQsIFNFTV9JTkRFRklOSVRFX1dBSVQpOwotICAgICAgICB9Ci0KLSAgICAgICAgLyogZW50ZXIgYSBjcml0aWNhbCBzZWN0aW9uIGFuZCB0cnkgdG8gZ2V0IHRoZSBzZW1hcGhvcmUuICBJZgotICAgICAgICAgKiBpdCBpcyBzdGlsbCBsb2NrZWQsIHdlIHdpbGwgdHJ5IGFnYWluLgotICAgICAgICAgKi8KLSAgICAgICAgaWYgKERvc0VudGVyQ3JpdFNlYygpKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgaWYgKCFsb2NrLT5pc19zZXQpIHsKLSAgICAgICAgICAgIGxvY2stPmlzX3NldCA9IDE7Ci0gICAgICAgICAgICBEb3NSZXNldEV2ZW50U2VtKGxvY2stPmNoYW5nZWQsICZjb3VudCk7Ci0gICAgICAgICAgICBkb25lID0gMTsKLSAgICAgICAgfQotCi0gICAgICAgIERvc0V4aXRDcml0U2VjKCk7Ci0gICAgfQotI2VuZGlmCi0KLSAgICByZXR1cm4gMTsKLX0KLQotdm9pZAotUHlUaHJlYWRfcmVsZWFzZV9sb2NrKFB5VGhyZWFkX3R5cGVfbG9jayBhTG9jaykKLXsKLSNpZiAhZGVmaW5lZChQWUNDX0dDQykKLSAgICB0eXBlX29zMl9sb2NrIGxvY2sgPSAodHlwZV9vczJfbG9jaylhTG9jazsKLSNlbmRpZgotCi0gICAgZHByaW50ZigoIiVsZDogUHlUaHJlYWRfcmVsZWFzZV9sb2NrKCVwKSBjYWxsZWRcbiIsCi0gICAgICAgICAgICAgUHlUaHJlYWRfZ2V0X3RocmVhZF9pZGVudCgpLAotICAgICAgICAgICAgIGFMb2NrKSk7Ci0KLSNpZiBkZWZpbmVkKFBZQ0NfR0NDKQotICAgIGlmIChhTG9jaykKLSAgICAgICAgX2ZtdXRleF9yZWxlYXNlKChfZm11dGV4ICopYUxvY2spOwotI2Vsc2UKLSAgICBpZiAoIWxvY2stPmlzX3NldCkgewotICAgICAgICBkcHJpbnRmKCgiJWxkOiBDb3VsZCBub3QgUHlUaHJlYWRfcmVsZWFzZV9sb2NrKCVwKSBlcnJvcjogJWxcbiIsCi0gICAgICAgICAgICAgICAgIFB5VGhyZWFkX2dldF90aHJlYWRfaWRlbnQoKSwKLSAgICAgICAgICAgICAgICAgYUxvY2ssCi0gICAgICAgICAgICAgICAgIEdldExhc3RFcnJvcigpKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoRG9zRW50ZXJDcml0U2VjKCkpIHsKLSAgICAgICAgZHByaW50ZigoIiVsZDogQ291bGQgbm90IFB5VGhyZWFkX3JlbGVhc2VfbG9jayglcCkgZXJyb3I6ICVsXG4iLAotICAgICAgICAgICAgICAgICBQeVRocmVhZF9nZXRfdGhyZWFkX2lkZW50KCksCi0gICAgICAgICAgICAgICAgIGFMb2NrLAotICAgICAgICAgICAgICAgICBHZXRMYXN0RXJyb3IoKSkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbG9jay0+aXNfc2V0ID0gMDsKLSAgICBEb3NQb3N0RXZlbnRTZW0obG9jay0+Y2hhbmdlZCk7Ci0KLSAgICBEb3NFeGl0Q3JpdFNlYygpOwotI2VuZGlmCi19Ci0KLS8qIG1pbmltdW0vbWF4aW11bSB0aHJlYWQgc3RhY2sgc2l6ZXMgc3VwcG9ydGVkICovCi0jZGVmaW5lIFRIUkVBRF9NSU5fU1RBQ0tTSVpFICAgIDB4ODAwMCAgICAgICAgICAvKiAzMmtCICovCi0jZGVmaW5lIFRIUkVBRF9NQVhfU1RBQ0tTSVpFICAgIDB4MjAwMDAwMCAgICAgICAvKiAzMk1CICovCi0KLS8qIHNldCB0aGUgdGhyZWFkIHN0YWNrIHNpemUuCi0gKiBSZXR1cm4gMCBpZiBzaXplIGlzIHZhbGlkLCAtMSBvdGhlcndpc2UuCi0gKi8KLXN0YXRpYyBpbnQKLV9weXRocmVhZF9vczJfc2V0X3N0YWNrc2l6ZShzaXplX3Qgc2l6ZSkKLXsKLSAgICAvKiBzZXQgdG8gZGVmYXVsdCAqLwotICAgIGlmIChzaXplID09IDApIHsKLSAgICAgICAgX3B5dGhyZWFkX3N0YWNrc2l6ZSA9IDA7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIC8qIHZhbGlkIHJhbmdlPyAqLwotICAgIGlmIChzaXplID49IFRIUkVBRF9NSU5fU1RBQ0tTSVpFICYmIHNpemUgPCBUSFJFQURfTUFYX1NUQUNLU0laRSkgewotICAgICAgICBfcHl0aHJlYWRfc3RhY2tzaXplID0gc2l6ZTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgcmV0dXJuIC0xOwotfQotCi0jZGVmaW5lIFRIUkVBRF9TRVRfU1RBQ0tTSVpFKHgpIF9weXRocmVhZF9vczJfc2V0X3N0YWNrc2l6ZSh4KQpkaWZmIC0tZ2l0IGEvUHl0aG9uL3RocmVhZF9wdGguaCBiL1B5dGhvbi90aHJlYWRfcHRoLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3MDQyNjYuLjAwMDAwMDAKLS0tIGEvUHl0aG9uL3RocmVhZF9wdGguaAorKysgL2Rldi9udWxsCkBAIC0xLDE3NyArMCwwIEBACi0KLS8qIEdOVSBwdGggdGhyZWFkcyBpbnRlcmZhY2UKLSAgIGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9wdGgKLSAgIDIwMDAtMDUtMDMgQW5keSBEdXN0bWFuIDxhbmR5QGR1c3RtYW4ubmV0PgotCi0gICBBZGFwdGVkIGZyb20gUG9zaXggdGhyZWFkcyBpbnRlcmZhY2UKLSAgIDEyIE1heSAxOTk3IC0tIGRhdmlkIGFybm9sZCA8ZGF2aWRhQHBvYm94LmNvbT4KLSAqLwotCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8cHRoLmg+Ci0KLS8qIEEgcHRoIG11dGV4IGlzbid0IHN1ZmZpY2llbnQgdG8gbW9kZWwgdGhlIFB5dGhvbiBsb2NrIHR5cGUKLSAqIGJlY2F1c2UgcHRoIG11dGV4ZXMgY2FuIGJlIGFjcXVpcmVkIG11bHRpcGxlIHRpbWVzIGJ5IHRoZQotICogc2FtZSB0aHJlYWQuCi0gKgotICogVGhlIHB0aF9sb2NrIHN0cnVjdCBpbXBsZW1lbnRzIGEgUHl0aG9uIGxvY2sgYXMgYSAibG9ja2VkPyIgYml0Ci0gKiBhbmQgYSA8Y29uZGl0aW9uLCBtdXRleD4gcGFpci4gIEluIGdlbmVyYWwsIGlmIHRoZSBiaXQgY2FuIGJlIGFjcXVpcmVkCi0gKiBpbnN0YW50bHksIGl0IGlzLCBlbHNlIHRoZSBwYWlyIGlzIHVzZWQgdG8gYmxvY2sgdGhlIHRocmVhZCB1bnRpbCB0aGUKLSAqIGJpdCBpcyBjbGVhcmVkLgotICovCi0KLXR5cGVkZWYgc3RydWN0IHsKLSAgICBjaGFyICAgICAgICAgICAgIGxvY2tlZDsgLyogMD11bmxvY2tlZCwgMT1sb2NrZWQgKi8KLSAgICAvKiBhIDxjb25kLCBtdXRleD4gcGFpciB0byBoYW5kbGUgYW4gYWNxdWlyZSBvZiBhIGxvY2tlZCBsb2NrICovCi0gICAgcHRoX2NvbmRfdCAgIGxvY2tfcmVsZWFzZWQ7Ci0gICAgcHRoX211dGV4X3QgIG11dDsKLX0gcHRoX2xvY2s7Ci0KLSNkZWZpbmUgQ0hFQ0tfU1RBVFVTKG5hbWUpICBpZiAoc3RhdHVzID09IC0xKSB7IHByaW50ZigiJWQgIiwgc3RhdHVzKTsgcGVycm9yKG5hbWUpOyBlcnJvciA9IDE7IH0KLQotcHRoX2F0dHJfdCBQeVRocmVhZF9hdHRyOwotCi0vKgotICogSW5pdGlhbGl6YXRpb24uCi0gKi8KLQotc3RhdGljIHZvaWQgUHlUaHJlYWRfX2luaXRfdGhyZWFkKHZvaWQpCi17Ci0gICAgcHRoX2luaXQoKTsKLSAgICBQeVRocmVhZF9hdHRyID0gcHRoX2F0dHJfbmV3KCk7Ci0gICAgcHRoX2F0dHJfc2V0KFB5VGhyZWFkX2F0dHIsIFBUSF9BVFRSX1NUQUNLX1NJWkUsIDE8PDE4KTsKLSAgICBwdGhfYXR0cl9zZXQoUHlUaHJlYWRfYXR0ciwgUFRIX0FUVFJfSk9JTkFCTEUsIEZBTFNFKTsKLX0KLQotLyoKLSAqIFRocmVhZCBzdXBwb3J0LgotICovCi0KLQotbG9uZyBQeVRocmVhZF9zdGFydF9uZXdfdGhyZWFkKHZvaWQgKCpmdW5jKSh2b2lkICopLCB2b2lkICphcmcpCi17Ci0gICAgcHRoX3QgdGg7Ci0gICAgZHByaW50ZigoIlB5VGhyZWFkX3N0YXJ0X25ld190aHJlYWQgY2FsbGVkXG4iKSk7Ci0gICAgaWYgKCFpbml0aWFsaXplZCkKLSAgICAgICAgUHlUaHJlYWRfaW5pdF90aHJlYWQoKTsKLQotICAgIHRoID0gcHRoX3NwYXduKFB5VGhyZWFkX2F0dHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKiAoKikodm9pZCAqKSlmdW5jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKWFyZwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotCi0gICAgcmV0dXJuIHRoOwotfQotCi1sb25nIFB5VGhyZWFkX2dldF90aHJlYWRfaWRlbnQodm9pZCkKLXsKLSAgICB2b2xhdGlsZSBwdGhfdCB0aHJlYWRpZDsKLSAgICBpZiAoIWluaXRpYWxpemVkKQotICAgICAgICBQeVRocmVhZF9pbml0X3RocmVhZCgpOwotICAgIHRocmVhZGlkID0gcHRoX3NlbGYoKTsKLSAgICByZXR1cm4gKGxvbmcpIHRocmVhZGlkOwotfQotCi12b2lkIFB5VGhyZWFkX2V4aXRfdGhyZWFkKHZvaWQpCi17Ci0gICAgZHByaW50ZigoIlB5VGhyZWFkX2V4aXRfdGhyZWFkIGNhbGxlZFxuIikpOwotICAgIGlmICghaW5pdGlhbGl6ZWQpIHsKLSAgICAgICAgZXhpdCgwKTsKLSAgICB9Ci19Ci0KLS8qCi0gKiBMb2NrIHN1cHBvcnQuCi0gKi8KLVB5VGhyZWFkX3R5cGVfbG9jayBQeVRocmVhZF9hbGxvY2F0ZV9sb2NrKHZvaWQpCi17Ci0gICAgcHRoX2xvY2sgKmxvY2s7Ci0gICAgaW50IHN0YXR1cywgZXJyb3IgPSAwOwotCi0gICAgZHByaW50ZigoIlB5VGhyZWFkX2FsbG9jYXRlX2xvY2sgY2FsbGVkXG4iKSk7Ci0gICAgaWYgKCFpbml0aWFsaXplZCkKLSAgICAgICAgUHlUaHJlYWRfaW5pdF90aHJlYWQoKTsKLQotICAgIGxvY2sgPSAocHRoX2xvY2sgKikgbWFsbG9jKHNpemVvZihwdGhfbG9jaykpOwotICAgIG1lbXNldCgodm9pZCAqKWxvY2ssICdcMCcsIHNpemVvZihwdGhfbG9jaykpOwotICAgIGlmIChsb2NrKSB7Ci0gICAgICAgIGxvY2stPmxvY2tlZCA9IDA7Ci0gICAgICAgIHN0YXR1cyA9IHB0aF9tdXRleF9pbml0KCZsb2NrLT5tdXQpOwotICAgICAgICBDSEVDS19TVEFUVVMoInB0aF9tdXRleF9pbml0Iik7Ci0gICAgICAgIHN0YXR1cyA9IHB0aF9jb25kX2luaXQoJmxvY2stPmxvY2tfcmVsZWFzZWQpOwotICAgICAgICBDSEVDS19TVEFUVVMoInB0aF9jb25kX2luaXQiKTsKLSAgICAgICAgaWYgKGVycm9yKSB7Ci0gICAgICAgICAgICBmcmVlKCh2b2lkICopbG9jayk7Ci0gICAgICAgICAgICBsb2NrID0gTlVMTDsKLSAgICAgICAgfQotICAgIH0KLSAgICBkcHJpbnRmKCgiUHlUaHJlYWRfYWxsb2NhdGVfbG9jaygpIC0+ICVwXG4iLCBsb2NrKSk7Ci0gICAgcmV0dXJuIChQeVRocmVhZF90eXBlX2xvY2spIGxvY2s7Ci19Ci0KLXZvaWQgUHlUaHJlYWRfZnJlZV9sb2NrKFB5VGhyZWFkX3R5cGVfbG9jayBsb2NrKQotewotICAgIHB0aF9sb2NrICp0aGVsb2NrID0gKHB0aF9sb2NrICopbG9jazsKLQotICAgIGRwcmludGYoKCJQeVRocmVhZF9mcmVlX2xvY2soJXApIGNhbGxlZFxuIiwgbG9jaykpOwotCi0gICAgZnJlZSgodm9pZCAqKXRoZWxvY2spOwotfQotCi1pbnQgUHlUaHJlYWRfYWNxdWlyZV9sb2NrKFB5VGhyZWFkX3R5cGVfbG9jayBsb2NrLCBpbnQgd2FpdGZsYWcpCi17Ci0gICAgaW50IHN1Y2Nlc3M7Ci0gICAgcHRoX2xvY2sgKnRoZWxvY2sgPSAocHRoX2xvY2sgKilsb2NrOwotICAgIGludCBzdGF0dXMsIGVycm9yID0gMDsKLQotICAgIGRwcmludGYoKCJQeVRocmVhZF9hY3F1aXJlX2xvY2soJXAsICVkKSBjYWxsZWRcbiIsIGxvY2ssIHdhaXRmbGFnKSk7Ci0KLSAgICBzdGF0dXMgPSBwdGhfbXV0ZXhfYWNxdWlyZSgmdGhlbG9jay0+bXV0LCAhd2FpdGZsYWcsIE5VTEwpOwotICAgIENIRUNLX1NUQVRVUygicHRoX211dGV4X2FjcXVpcmVbMV0iKTsKLSAgICBzdWNjZXNzID0gdGhlbG9jay0+bG9ja2VkID09IDA7Ci0gICAgaWYgKHN1Y2Nlc3MpIHRoZWxvY2stPmxvY2tlZCA9IDE7Ci0gICAgc3RhdHVzID0gcHRoX211dGV4X3JlbGVhc2UoICZ0aGVsb2NrLT5tdXQgKTsKLSAgICBDSEVDS19TVEFUVVMoInB0aF9tdXRleF9yZWxlYXNlWzFdIik7Ci0KLSAgICBpZiAoICFzdWNjZXNzICYmIHdhaXRmbGFnICkgewotICAgICAgICAvKiBjb250aW51ZSB0cnlpbmcgdW50aWwgd2UgZ2V0IHRoZSBsb2NrICovCi0KLSAgICAgICAgLyogbXV0IG11c3QgYmUgbG9ja2VkIGJ5IG1lIC0tIHBhcnQgb2YgdGhlIGNvbmRpdGlvbgotICAgICAgICAgKiBwcm90b2NvbCAqLwotICAgICAgICBzdGF0dXMgPSBwdGhfbXV0ZXhfYWNxdWlyZSggJnRoZWxvY2stPm11dCwgIXdhaXRmbGFnLCBOVUxMICk7Ci0gICAgICAgIENIRUNLX1NUQVRVUygicHRoX211dGV4X2FjcXVpcmVbMl0iKTsKLSAgICAgICAgd2hpbGUgKCB0aGVsb2NrLT5sb2NrZWQgKSB7Ci0gICAgICAgICAgICBzdGF0dXMgPSBwdGhfY29uZF9hd2FpdCgmdGhlbG9jay0+bG9ja19yZWxlYXNlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0aGVsb2NrLT5tdXQsIE5VTEwpOwotICAgICAgICAgICAgQ0hFQ0tfU1RBVFVTKCJwdGhfY29uZF9hd2FpdCIpOwotICAgICAgICB9Ci0gICAgICAgIHRoZWxvY2stPmxvY2tlZCA9IDE7Ci0gICAgICAgIHN0YXR1cyA9IHB0aF9tdXRleF9yZWxlYXNlKCAmdGhlbG9jay0+bXV0ICk7Ci0gICAgICAgIENIRUNLX1NUQVRVUygicHRoX211dGV4X3JlbGVhc2VbMl0iKTsKLSAgICAgICAgc3VjY2VzcyA9IDE7Ci0gICAgfQotICAgIGlmIChlcnJvcikgc3VjY2VzcyA9IDA7Ci0gICAgZHByaW50ZigoIlB5VGhyZWFkX2FjcXVpcmVfbG9jayglcCwgJWQpIC0+ICVkXG4iLCBsb2NrLCB3YWl0ZmxhZywgc3VjY2VzcykpOwotICAgIHJldHVybiBzdWNjZXNzOwotfQotCi12b2lkIFB5VGhyZWFkX3JlbGVhc2VfbG9jayhQeVRocmVhZF90eXBlX2xvY2sgbG9jaykKLXsKLSAgICBwdGhfbG9jayAqdGhlbG9jayA9IChwdGhfbG9jayAqKWxvY2s7Ci0gICAgaW50IHN0YXR1cywgZXJyb3IgPSAwOwotCi0gICAgZHByaW50ZigoIlB5VGhyZWFkX3JlbGVhc2VfbG9jayglcCkgY2FsbGVkXG4iLCBsb2NrKSk7Ci0KLSAgICBzdGF0dXMgPSBwdGhfbXV0ZXhfYWNxdWlyZSggJnRoZWxvY2stPm11dCwgMCwgTlVMTCApOwotICAgIENIRUNLX1NUQVRVUygicHRoX211dGV4X2FjcXVpcmVbM10iKTsKLQotICAgIHRoZWxvY2stPmxvY2tlZCA9IDA7Ci0KLSAgICBzdGF0dXMgPSBwdGhfbXV0ZXhfcmVsZWFzZSggJnRoZWxvY2stPm11dCApOwotICAgIENIRUNLX1NUQVRVUygicHRoX211dGV4X3JlbGVhc2VbM10iKTsKLQotICAgIC8qIHdha2UgdXAgc29tZW9uZSAoYW55b25lLCBpZiBhbnkpIHdhaXRpbmcgb24gdGhlIGxvY2sgKi8KLSAgICBzdGF0dXMgPSBwdGhfY29uZF9ub3RpZnkoICZ0aGVsb2NrLT5sb2NrX3JlbGVhc2VkLCAwICk7Ci0gICAgQ0hFQ0tfU1RBVFVTKCJwdGhfY29uZF9ub3RpZnkiKTsKLX0KZGlmZiAtLWdpdCBhL1B5dGhvbi90aHJlYWRfcHRocmVhZC5oIGIvUHl0aG9uL3RocmVhZF9wdGhyZWFkLmgKaW5kZXggZTkwYWU3ZS4uZDlmN2M3NiAxMDA2NDQKLS0tIGEvUHl0aG9uL3RocmVhZF9wdGhyZWFkLmgKKysrIGIvUHl0aG9uL3RocmVhZF9wdGhyZWFkLmgKQEAgLTI4MiwxNCArMjgyLDE0IEBACiAgICAgaWYgKCFpbml0aWFsaXplZCkKICAgICAgICAgUHlUaHJlYWRfaW5pdF90aHJlYWQoKTsKIAotICAgIGxvY2sgPSAoc2VtX3QgKiltYWxsb2Moc2l6ZW9mKHNlbV90KSk7CisgICAgbG9jayA9IChzZW1fdCAqKVB5TWVtX1Jhd01hbGxvYyhzaXplb2Yoc2VtX3QpKTsKIAogICAgIGlmIChsb2NrKSB7CiAgICAgICAgIHN0YXR1cyA9IHNlbV9pbml0KGxvY2ssMCwxKTsKICAgICAgICAgQ0hFQ0tfU1RBVFVTKCJzZW1faW5pdCIpOwogCiAgICAgICAgIGlmIChlcnJvcikgewotICAgICAgICAgICAgZnJlZSgodm9pZCAqKWxvY2spOworICAgICAgICAgICAgUHlNZW1fUmF3RnJlZSgodm9pZCAqKWxvY2spOwogICAgICAgICAgICAgbG9jayA9IE5VTEw7CiAgICAgICAgIH0KICAgICB9CkBAIC0zMTMsNyArMzEzLDcgQEAKICAgICBzdGF0dXMgPSBzZW1fZGVzdHJveSh0aGVsb2NrKTsKICAgICBDSEVDS19TVEFUVVMoInNlbV9kZXN0cm95Iik7CiAKLSAgICBmcmVlKCh2b2lkICopdGhlbG9jayk7CisgICAgUHlNZW1fUmF3RnJlZSgodm9pZCAqKXRoZWxvY2spOwogfQogCiAvKgpAQCAtNDEwLDcgKzQxMCw3IEBACiAgICAgaWYgKCFpbml0aWFsaXplZCkKICAgICAgICAgUHlUaHJlYWRfaW5pdF90aHJlYWQoKTsKIAotICAgIGxvY2sgPSAocHRocmVhZF9sb2NrICopIG1hbGxvYyhzaXplb2YocHRocmVhZF9sb2NrKSk7CisgICAgbG9jayA9IChwdGhyZWFkX2xvY2sgKikgUHlNZW1fUmF3TWFsbG9jKHNpemVvZihwdGhyZWFkX2xvY2spKTsKICAgICBpZiAobG9jaykgewogICAgICAgICBtZW1zZXQoKHZvaWQgKilsb2NrLCAnXDAnLCBzaXplb2YocHRocmVhZF9sb2NrKSk7CiAgICAgICAgIGxvY2stPmxvY2tlZCA9IDA7CkBAIC00MzAsNyArNDMwLDcgQEAKICAgICAgICAgQ0hFQ0tfU1RBVFVTKCJwdGhyZWFkX2NvbmRfaW5pdCIpOwogCiAgICAgICAgIGlmIChlcnJvcikgewotICAgICAgICAgICAgZnJlZSgodm9pZCAqKWxvY2spOworICAgICAgICAgICAgUHlNZW1fUmF3RnJlZSgodm9pZCAqKWxvY2spOwogICAgICAgICAgICAgbG9jayA9IDA7CiAgICAgICAgIH0KICAgICB9CkBAIC00NTcsNyArNDU3LDcgQEAKICAgICBzdGF0dXMgPSBwdGhyZWFkX211dGV4X2Rlc3Ryb3koICZ0aGVsb2NrLT5tdXQgKTsKICAgICBDSEVDS19TVEFUVVMoInB0aHJlYWRfbXV0ZXhfZGVzdHJveSIpOwogCi0gICAgZnJlZSgodm9pZCAqKXRoZWxvY2spOworICAgIFB5TWVtX1Jhd0ZyZWUoKHZvaWQgKil0aGVsb2NrKTsKIH0KIAogUHlMb2NrU3RhdHVzCkBAIC02MjcsOSArNjI3LDYgQEAKIFB5VGhyZWFkX3NldF9rZXlfdmFsdWUoaW50IGtleSwgdm9pZCAqdmFsdWUpCiB7CiAgICAgaW50IGZhaWw7Ci0gICAgdm9pZCAqb2xkVmFsdWUgPSBwdGhyZWFkX2dldHNwZWNpZmljKGtleSk7Ci0gICAgaWYgKG9sZFZhbHVlICE9IE5VTEwpCi0gICAgICAgIHJldHVybiAwOwogICAgIGZhaWwgPSBwdGhyZWFkX3NldHNwZWNpZmljKGtleSwgdmFsdWUpOwogICAgIHJldHVybiBmYWlsID8gLTEgOiAwOwogfQpkaWZmIC0tZ2l0IGEvUHl0aG9uL3RyYWNlYmFjay5jIGIvUHl0aG9uL3RyYWNlYmFjay5jCmluZGV4IDc0MDc1YzkuLjdkMWZjMmUgMTAwNjQ0Ci0tLSBhL1B5dGhvbi90cmFjZWJhY2suYworKysgYi9QeXRob24vdHJhY2ViYWNrLmMKQEAgLTEzLDcgKzEzLDcgQEAKIAogI2RlZmluZSBPRkYoeCkgb2Zmc2V0b2YoUHlUcmFjZWJhY2tPYmplY3QsIHgpCiAKLSNkZWZpbmUgUFVUUyhmZCwgc3RyKSB3cml0ZShmZCwgc3RyLCBzdHJsZW4oc3RyKSkKKyNkZWZpbmUgUFVUUyhmZCwgc3RyKSB3cml0ZShmZCwgc3RyLCAoaW50KXN0cmxlbihzdHIpKQogI2RlZmluZSBNQVhfU1RSSU5HX0xFTkdUSCA1MDAKICNkZWZpbmUgTUFYX0ZSQU1FX0RFUFRIIDEwMAogI2RlZmluZSBNQVhfTlRIUkVBRFMgMTAwCkBAIC0yMSw2ICsyMSwxMSBAQAogLyogRnVuY3Rpb24gZnJvbSBQYXJzZXIvdG9rZW5pemVyLmMgKi8KIGV4dGVybiBjaGFyICogUHlUb2tlbml6ZXJfRmluZEVuY29kaW5nRmlsZW5hbWUoaW50LCBQeU9iamVjdCAqKTsKIAorX1B5X0lERU5USUZJRVIoVGV4dElPV3JhcHBlcik7CitfUHlfSURFTlRJRklFUihjbG9zZSk7CitfUHlfSURFTlRJRklFUihvcGVuKTsKK19QeV9JREVOVElGSUVSKHBhdGgpOworCiBzdGF0aWMgUHlPYmplY3QgKgogdGJfZGlyKFB5VHJhY2ViYWNrT2JqZWN0ICpzZWxmKQogewpAQCAtMTM3LDYgKzE0MiwzOSBAQAogICAgIHJldHVybiAwOwogfQogCisvKiBJbnNlcnQgYSBmcmFtZSBpbnRvIHRoZSB0cmFjZWJhY2sgZm9yIChmdW5jbmFtZSwgZmlsZW5hbWUsIGxpbmVubykuICovCit2b2lkIF9QeVRyYWNlYmFja19BZGQoY29uc3QgY2hhciAqZnVuY25hbWUsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgbGluZW5vKQoreworICAgIFB5T2JqZWN0ICpnbG9iYWxzID0gTlVMTDsKKyAgICBQeUNvZGVPYmplY3QgKmNvZGUgPSBOVUxMOworICAgIFB5RnJhbWVPYmplY3QgKmZyYW1lID0gTlVMTDsKKyAgICBQeU9iamVjdCAqZXhjZXB0aW9uLCAqdmFsdWUsICp0YjsKKworICAgIC8qIFNhdmUgYW5kIGNsZWFyIHRoZSBjdXJyZW50IGV4Y2VwdGlvbi4gUHl0aG9uIGZ1bmN0aW9ucyBtdXN0IG5vdCBiZQorICAgICAgIGNhbGxlZCB3aXRoIGFuIGV4Y2VwdGlvbiBzZXQuIENhbGxpbmcgUHl0aG9uIGZ1bmN0aW9ucyBoYXBwZW5zIHdoZW4KKyAgICAgICB0aGUgY29kZWMgb2YgdGhlIGZpbGVzeXN0ZW0gZW5jb2RpbmcgaXMgaW1wbGVtZW50ZWQgaW4gcHVyZSBQeXRob24uICovCisgICAgUHlFcnJfRmV0Y2goJmV4Y2VwdGlvbiwgJnZhbHVlLCAmdGIpOworCisgICAgZ2xvYmFscyA9IFB5RGljdF9OZXcoKTsKKyAgICBpZiAoIWdsb2JhbHMpCisgICAgICAgIGdvdG8gZG9uZTsKKyAgICBjb2RlID0gUHlDb2RlX05ld0VtcHR5KGZpbGVuYW1lLCBmdW5jbmFtZSwgbGluZW5vKTsKKyAgICBpZiAoIWNvZGUpCisgICAgICAgIGdvdG8gZG9uZTsKKyAgICBmcmFtZSA9IFB5RnJhbWVfTmV3KFB5VGhyZWFkU3RhdGVfR2V0KCksIGNvZGUsIGdsb2JhbHMsIE5VTEwpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIGdvdG8gZG9uZTsKKyAgICBmcmFtZS0+Zl9saW5lbm8gPSBsaW5lbm87CisKKyAgICBQeUVycl9SZXN0b3JlKGV4Y2VwdGlvbiwgdmFsdWUsIHRiKTsKKyAgICBQeVRyYWNlQmFja19IZXJlKGZyYW1lKTsKKworZG9uZToKKyAgICBQeV9YREVDUkVGKGdsb2JhbHMpOworICAgIFB5X1hERUNSRUYoY29kZSk7CisgICAgUHlfWERFQ1JFRihmcmFtZSk7Cit9CisKIHN0YXRpYyBQeU9iamVjdCAqCiBfUHlfRmluZFNvdXJjZUZpbGUoUHlPYmplY3QgKmZpbGVuYW1lLCBjaGFyKiBuYW1lYnVmLCBzaXplX3QgbmFtZWxlbiwgUHlPYmplY3QgKmlvKQogewpAQCAtMTUyLDcgKzE5MCw2IEBACiAgICAgY29uc3QgY2hhciogZmlsZXBhdGg7CiAgICAgUHlfc3NpemVfdCBsZW47CiAgICAgUHlPYmplY3QqIHJlc3VsdDsKLSAgICBfUHlfSURFTlRJRklFUihvcGVuKTsKIAogICAgIGZpbGVieXRlcyA9IFB5VW5pY29kZV9FbmNvZGVGU0RlZmF1bHQoZmlsZW5hbWUpOwogICAgIGlmIChmaWxlYnl0ZXMgPT0gTlVMTCkgewpAQCAtMTY5LDcgKzIwNiw3IEBACiAgICAgICAgIHRhaWwrKzsKICAgICB0YWlsbGVuID0gc3RybGVuKHRhaWwpOwogCi0gICAgc3lzcGF0aCA9IFB5U3lzX0dldE9iamVjdCgicGF0aCIpOworICAgIHN5c3BhdGggPSBfUHlTeXNfR2V0T2JqZWN0SWQoJlB5SWRfcGF0aCk7CiAgICAgaWYgKHN5c3BhdGggPT0gTlVMTCB8fCAhUHlMaXN0X0NoZWNrKHN5c3BhdGgpKQogICAgICAgICBnb3RvIGVycm9yOwogICAgIG5wYXRoID0gUHlMaXN0X1NpemUoc3lzcGF0aCk7CkBAIC0yMzIsOSArMjY5LDYgQEAKICAgICBjaGFyIGJ1ZltNQVhQQVRITEVOKzFdOwogICAgIGludCBraW5kOwogICAgIHZvaWQgKmRhdGE7Ci0gICAgX1B5X0lERU5USUZJRVIoY2xvc2UpOwotICAgIF9QeV9JREVOVElGSUVSKG9wZW4pOwotICAgIF9QeV9JREVOVElGSUVSKFRleHRJT1dyYXBwZXIpOwogCiAgICAgLyogb3BlbiB0aGUgZmlsZSAqLwogICAgIGlmIChmaWxlbmFtZSA9PSBOVUxMKQpAQCAtMjQ2LDEwICsyODAsMTIgQEAKICAgICBiaW5hcnkgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKGlvLCAmUHlJZF9vcGVuLCAiT3MiLCBmaWxlbmFtZSwgInJiIik7CiAKICAgICBpZiAoYmluYXJ5ID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKwogICAgICAgICBiaW5hcnkgPSBfUHlfRmluZFNvdXJjZUZpbGUoZmlsZW5hbWUsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIGlvKTsKICAgICAgICAgaWYgKGJpbmFyeSA9PSBOVUxMKSB7CiAgICAgICAgICAgICBQeV9ERUNSRUYoaW8pOwotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTI2MSw2ICsyOTcsOCBAQAogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgZm91bmRfZW5jb2RpbmcgPSBQeVRva2VuaXplcl9GaW5kRW5jb2RpbmdGaWxlbmFtZShmZCwgZmlsZW5hbWUpOworICAgIGlmIChmb3VuZF9lbmNvZGluZyA9PSBOVUxMKQorICAgICAgICBQeUVycl9DbGVhcigpOwogICAgIGVuY29kaW5nID0gKGZvdW5kX2VuY29kaW5nICE9IE5VTEwpID8gZm91bmRfZW5jb2RpbmcgOiAidXRmLTgiOwogICAgIC8qIFJlc2V0IHBvc2l0aW9uICovCiAgICAgaWYgKGxzZWVrKGZkLCAwLCBTRUVLX1NFVCkgPT0gKG9mZl90KS0xKSB7CkBAIC0yNzEsMTkgKzMwOSwyNyBAQAogICAgIH0KICAgICBmb2IgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKGlvLCAmUHlJZF9UZXh0SU9XcmFwcGVyLCAiT3MiLCBiaW5hcnksIGVuY29kaW5nKTsKICAgICBQeV9ERUNSRUYoaW8pOwotICAgIFB5X0RFQ1JFRihiaW5hcnkpOwogICAgIFB5TWVtX0ZSRUUoZm91bmRfZW5jb2RpbmcpOwogCiAgICAgaWYgKGZvYiA9PSBOVUxMKSB7CiAgICAgICAgIFB5RXJyX0NsZWFyKCk7CisKKyAgICAgICAgcmVzID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZChiaW5hcnksICZQeUlkX2Nsb3NlLCAiIik7CisgICAgICAgIFB5X0RFQ1JFRihiaW5hcnkpOworICAgICAgICBpZiAocmVzKQorICAgICAgICAgICAgUHlfREVDUkVGKHJlcyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KKyAgICBQeV9ERUNSRUYoYmluYXJ5KTsKIAogICAgIC8qIGdldCB0aGUgbGluZSBudW1iZXIgbGluZW5vICovCiAgICAgZm9yIChpID0gMDsgaSA8IGxpbmVubzsgaSsrKSB7CiAgICAgICAgIFB5X1hERUNSRUYobGluZW9iaik7CiAgICAgICAgIGxpbmVvYmogPSBQeUZpbGVfR2V0TGluZShmb2IsIC0xKTsKICAgICAgICAgaWYgKCFsaW5lb2JqKSB7CisgICAgICAgICAgICBQeUVycl9DbGVhcigpOwogICAgICAgICAgICAgZXJyID0gLTE7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtNDY5LDEzICs1MTUsMTMgQEAKICAgICB3cml0ZShmZCwgYnVmZmVyLCBsZW4pOwogfQogCi0vKiBGb3JtYXQgYW4gaW50ZWdlciBpbiByYW5nZSBbMDsgMHhmZmZmZmZmZl0gdG8gaGV4ZGVjaW1hbCBvZiAnd2lkdGgnIGRpZ2l0cywKKy8qIEZvcm1hdCBhbiBpbnRlZ2VyIGluIHJhbmdlIFswOyAweGZmZmZmZmZmXSB0byBoZXhhZGVjaW1hbCBvZiAnd2lkdGgnIGRpZ2l0cywKICAgIGFuZCB3cml0ZSBpdCBpbnRvIHRoZSBmaWxlIGZkLgogCiAgICBUaGlzIGZ1bmN0aW9uIGlzIHNpZ25hbCBzYWZlLiAqLwogCiBzdGF0aWMgdm9pZAotZHVtcF9oZXhhZGVjaW1hbChpbnQgd2lkdGgsIHVuc2lnbmVkIGxvbmcgdmFsdWUsIGludCBmZCkKK2R1bXBfaGV4YWRlY2ltYWwoaW50IGZkLCB1bnNpZ25lZCBsb25nIHZhbHVlLCBpbnQgd2lkdGgpCiB7CiAgICAgaW50IGxlbjsKICAgICBjaGFyIGJ1ZmZlcltzaXplb2YodW5zaWduZWQgbG9uZykgKiAyICsgMV07CkBAIC01NDIsMTUgKzU4OCwxNSBAQAogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKGNoIDwgMHhmZikgewogICAgICAgICAgICAgUFVUUyhmZCwgIlxceCIpOwotICAgICAgICAgICAgZHVtcF9oZXhhZGVjaW1hbCgyLCBjaCwgZmQpOworICAgICAgICAgICAgZHVtcF9oZXhhZGVjaW1hbChmZCwgY2gsIDIpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKGNoIDwgMHhmZmZmKSB7CiAgICAgICAgICAgICBQVVRTKGZkLCAiXFx1Iik7Ci0gICAgICAgICAgICBkdW1wX2hleGFkZWNpbWFsKDQsIGNoLCBmZCk7CisgICAgICAgICAgICBkdW1wX2hleGFkZWNpbWFsKGZkLCBjaCwgNCk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBQVVRTKGZkLCAiXFxVIik7Ci0gICAgICAgICAgICBkdW1wX2hleGFkZWNpbWFsKDgsIGNoLCBmZCk7CisgICAgICAgICAgICBkdW1wX2hleGFkZWNpbWFsKGZkLCBjaCwgOCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgaWYgKHRydW5jYXRlZCkKQEAgLTYwMSw3ICs2NDcsNyBAQAogICAgIHVuc2lnbmVkIGludCBkZXB0aDsKIAogICAgIGlmICh3cml0ZV9oZWFkZXIpCi0gICAgICAgIFBVVFMoZmQsICJUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgZmlyc3QpOlxuIik7CisgICAgICAgIFBVVFMoZmQsICJTdGFjayAobW9zdCByZWNlbnQgY2FsbCBmaXJzdCk6XG4iKTsKIAogICAgIGZyYW1lID0gX1B5VGhyZWFkU3RhdGVfR2V0RnJhbWUodHN0YXRlKTsKICAgICBpZiAoZnJhbWUgPT0gTlVMTCkKQEAgLTYzOSw4ICs2ODUsOCBAQAogICAgICAgICBQVVRTKGZkLCAiQ3VycmVudCB0aHJlYWQgMHgiKTsKICAgICBlbHNlCiAgICAgICAgIFBVVFMoZmQsICJUaHJlYWQgMHgiKTsKLSAgICBkdW1wX2hleGFkZWNpbWFsKHNpemVvZihsb25nKSoyLCAodW5zaWduZWQgbG9uZyl0c3RhdGUtPnRocmVhZF9pZCwgZmQpOwotICAgIFBVVFMoZmQsICI6XG4iKTsKKyAgICBkdW1wX2hleGFkZWNpbWFsKGZkLCAodW5zaWduZWQgbG9uZyl0c3RhdGUtPnRocmVhZF9pZCwgc2l6ZW9mKGxvbmcpKjIpOworICAgIFBVVFMoZmQsICIgKG1vc3QgcmVjZW50IGNhbGwgZmlyc3QpOlxuIik7CiB9CiAKIGNvbnN0IGNoYXIqCmRpZmYgLS1naXQgYS9SRUFETUUgYi9SRUFETUUKaW5kZXggM2NjZjIzMi4uZDI3ZWRlMiAxMDA2NDQKLS0tIGEvUkVBRE1FCisrKyBiL1JFQURNRQpAQCAtMSw0ICsxLDQgQEAKLVRoaXMgaXMgUHl0aG9uIHZlcnNpb24gMy4zLjYKK1RoaXMgaXMgUHl0aG9uIHZlcnNpb24gMy40LjQKID09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExLApAQCAtNTIsOSArNTIsOSBAQAogLS0tLS0tLS0tLQogCiBXZSB0cnkgdG8gaGF2ZSBhIGNvbXByZWhlbnNpdmUgb3ZlcnZpZXcgb2YgdGhlIGNoYW5nZXMgaW4gdGhlICJXaGF0J3MgTmV3IGluCi1QeXRob24gMy4zIiBkb2N1bWVudCwgZm91bmQgYXQKK1B5dGhvbiAzLjQiIGRvY3VtZW50LCBmb3VuZCBhdAogCi0gICAgaHR0cDovL2RvY3MucHl0aG9uLm9yZy8zLjMvd2hhdHNuZXcvMy4zLmh0bWwKKyAgICBodHRwOi8vZG9jcy5weXRob24ub3JnLzMuNC93aGF0c25ldy8zLjQuaHRtbAogCiBGb3IgYSBtb3JlIGRldGFpbGVkIGNoYW5nZSBsb2csIHJlYWQgTWlzYy9ORVdTICh0aG91Z2ggdGhpcyBmaWxlLCB0b28sIGlzCiBpbmNvbXBsZXRlLCBhbmQgYWxzbyBkb2Vzbid0IGxpc3QgYW55dGhpbmcgbWVyZ2VkIGluIGZyb20gdGhlIDIuNyByZWxlYXNlIHVuZGVyCkBAIC02Nyw5ICs2Nyw5IEBACiBEb2N1bWVudGF0aW9uCiAtLS0tLS0tLS0tLS0tCiAKLURvY3VtZW50YXRpb24gZm9yIFB5dGhvbiAzLjMgaXMgb25saW5lLCB1cGRhdGVkIGRhaWx5OgorRG9jdW1lbnRhdGlvbiBmb3IgUHl0aG9uIDMuNCBpcyBvbmxpbmUsIHVwZGF0ZWQgZGFpbHk6CiAKLSAgICBodHRwOi8vZG9jcy5weXRob24ub3JnLzMuMy8KKyAgICBodHRwOi8vZG9jcy5weXRob24ub3JnLzMuNC8KIAogSXQgY2FuIGFsc28gYmUgZG93bmxvYWRlZCBpbiBtYW55IGZvcm1hdHMgZm9yIGZhc3RlciBhY2Nlc3MuICBUaGUgZG9jdW1lbnRhdGlvbgogaXMgZG93bmxvYWRhYmxlIGluIEhUTUwsIFBERiwgYW5kIHJlU3RydWN0dXJlZFRleHQgZm9ybWF0czsgdGhlIGxhdHRlciB2ZXJzaW9uCkBAIC05NCw3ICs5NCw3IEBACiBBIHNvdXJjZS10by1zb3VyY2UgdHJhbnNsYXRpb24gdG9vbCwgIjJ0bzMiLCBjYW4gdGFrZSBjYXJlIG9mIHRoZSBtdW5kYW5lIHRhc2sKIG9mIGNvbnZlcnRpbmcgbGFyZ2UgYW1vdW50cyBvZiBzb3VyY2UgY29kZS4gIEl0IGlzIG5vdCBhIGNvbXBsZXRlIHNvbHV0aW9uIGJ1dAogaXMgY29tcGxlbWVudGVkIGJ5IHRoZSBkZXByZWNhdGlvbiB3YXJuaW5ncyBpbiAyLjYuICBTZWUKLWh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvMy4zL2xpYnJhcnkvMnRvMy5odG1sIGZvciBtb3JlIGluZm9ybWF0aW9uLgoraHR0cDovL2RvY3MucHl0aG9uLm9yZy8zLjQvbGlicmFyeS8ydG8zLmh0bWwgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAKIAogVGVzdGluZwpAQCAtMTMyLDcgKzEzMiw3IEBACiBJbnN0YWxsIHRoYXQgdmVyc2lvbiB1c2luZyAibWFrZSBpbnN0YWxsIi4gIEluc3RhbGwgYWxsIG90aGVyIHZlcnNpb25zIHVzaW5nCiAibWFrZSBhbHRpbnN0YWxsIi4KIAotRm9yIGV4YW1wbGUsIGlmIHlvdSB3YW50IHRvIGluc3RhbGwgUHl0aG9uIDIuNiwgMi43IGFuZCAzLjMgd2l0aCAyLjcgYmVpbmcgdGhlCitGb3IgZXhhbXBsZSwgaWYgeW91IHdhbnQgdG8gaW5zdGFsbCBQeXRob24gMi42LCAyLjcgYW5kIDMuNCB3aXRoIDIuNyBiZWluZyB0aGUKIHByaW1hcnkgdmVyc2lvbiwgeW91IHdvdWxkIGV4ZWN1dGUgIm1ha2UgaW5zdGFsbCIgaW4geW91ciAyLjcgYnVpbGQgZGlyZWN0b3J5CiBhbmQgIm1ha2UgYWx0aW5zdGFsbCIgaW4gdGhlIG90aGVycy4KIApAQCAtMTY4LDE0ICsxNjgsMTQgQEAKIFJlbGVhc2UgU2NoZWR1bGUKIC0tLS0tLS0tLS0tLS0tLS0KIAotU2VlIFBFUCAzOTggZm9yIHJlbGVhc2UgZGV0YWlsczogaHR0cDovL3d3dy5weXRob24ub3JnL2Rldi9wZXBzL3BlcC0wMzk4LworU2VlIFBFUCA0MjkgZm9yIHJlbGVhc2UgZGV0YWlsczogaHR0cDovL3d3dy5weXRob24ub3JnL2Rldi9wZXBzL3BlcC0wNDI5LwogCiAKIENvcHlyaWdodCBhbmQgTGljZW5zZSBJbmZvcm1hdGlvbgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIENvcHlyaWdodCAoYykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSwKLTIwMTIsIDIwMTMsIDIwMTQgUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkLgorMjAxMiwgMjAxMywgMjAxNCwgMjAxNSBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKIENvcHlyaWdodCAoYykgMjAwMCBCZU9wZW4uY29tLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KIApkaWZmIC0tZ2l0IGEvVG9vbHMvYnVpbGRib3QvUkVBRE1FLnRjbHRrLUFNRDY0IGIvVG9vbHMvYnVpbGRib3QvUkVBRE1FLnRjbHRrLUFNRDY0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZGM4OWViLi4wMDAwMDAwCi0tLSBhL1Rvb2xzL2J1aWxkYm90L1JFQURNRS50Y2x0ay1BTUQ2NAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLUNvbW1lbnRzIG9uIGJ1aWxkaW5nIHRjbC90ayBmb3IgQU1ENjQgd2l0aCB0aGUgTVMgU0RLIGNvbXBpbGVyCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1JIGRpZCBoYXZlIHRvIGJ1aWxkIHRjbC90ayBtYW51YWxseS4KLQotRmlyc3QsIEkgaGFkIHRvIGJ1aWxkIHRoZSBubWFrZWhscC5leGUgaGVscGVyIHV0aWxpdHkgbWFudWFsbHkgYnkgZXhlY3V0aW5nCi0gICBjbCBubWFrZWhscC5jIC9saW5rIGJ1ZmZlcm92ZXJmbG93VS5saWIKLWluIGJvdGggdGhlIHRjbDguNC4xMlx3aW4gYW5kIHRrOC40LjEyXHdpbiBkaXJlY3Rvcmllcy4KLQotU2Vjb25kLCB0aGUgQU1ENjQgY29tcGlsZXIgcmVmdXNlcyB0byBjb21waWxlIHRoZSBmaWxlCi10Y2w4LjQuMTJcZ2VuZXJpY1x0Y2xFeGVjdXRlLmMgYmVjYXVzZSBpdCBpbnNpc3RzIG9uIHVzaW5nIGludHJpbnNpY3MKLWZvciB0aGUgJ2NlaWwnIGFuZCAnZmxvb3InIGZ1bmN0aW9uczoKLQotICAuLlxnZW5lcmljXHRjbEV4ZWN1dGUuYygzOTQpIDogZXJyb3IgQzIwOTk6IGluaXRpYWxpemVyIGlzIG5vdCBhIGNvbnN0YW50Ci0gIC4uXGdlbmVyaWNcdGNsRXhlY3V0ZS5jKDM5OCkgOiBlcnJvciBDMjA5OTogaW5pdGlhbGl6ZXIgaXMgbm90IGEgY29uc3RhbnQKLQotSSBkaWQgY29tbWVudCBvdXQgdGhlc2UgbGluZXM7IGFuIGFsdGVybmF0aXZlIHdvdWxkIGhhdmUgYmVlbiB0byB1c2UKLXRoZSAvT2ktIGNvbXBpbGVyIGZsYWcgdG8gZGlzYWJsZSB0aGUgaW50cmluc2ljIGZ1bmN0aW9ucy4KLVRoZSBjb21tYW5kcyB0aGVuIHVzZWQgd2VyZSB0aGVzZToKLQotICAgc3ZuIGV4cG9ydCBodHRwOi8vc3ZuLnB5dGhvbi5vcmcvcHJvamVjdHMvZXh0ZXJuYWwvdGNsOC40LjEyCi0gICBjZCB0Y2w4LjQuMTJcd2luCi0gICBSRU0KLSAgIGVjaG8gcGF0Y2ggdGhlIHRjbDguNC4xMlxnZW5lcmljXHRjbEV4ZWN1dGUuYyBmaWxlCi0gICBwYXVzZSAKLSAgIFJFTQotICAgY2wgbm1ha2VobHAuYyAvbGluayBidWZmZXJvdmVyZmxvd1UubGliCi0gICBubWFrZSAtZiBtYWtlZmlsZS52YyBNQUNISU5FPUFNRDY0Ci0gICBubWFrZSAtZiBtYWtlZmlsZS52YyBJTlNUQUxMRElSPS4uXC4uXHRjbHRrIGluc3RhbGwKLSAgIGNkIC4uXC4uCi0gICBzdm4gZXhwb3J0IGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy9wcm9qZWN0cy9leHRlcm5hbC90azguNC4xMgotICAgY2QgdGs4LjQuMTJcd2luCi0gICBjbCBubWFrZWhscC5jIC9saW5rIGJ1ZmZlcm92ZXJmbG93VS5saWIKLSAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIFRDTERJUj0uLlwuLlx0Y2w4LjQuMTIgTUFDSElORT1BTUQ2NAotICAgbm1ha2UgLWYgbWFrZWZpbGUudmMgVENMRElSPS4uXC4uXHRjbDguNC4xMiBJTlNUQUxMRElSPS4uXC4uXHRjbHRrIGluc3RhbGwKLSAgIGNkIC4uXC4uCmRpZmYgLS1naXQgYS9Ub29scy9idWlsZGJvdC9idWlsZC1hbWQ2NC5iYXQgYi9Ub29scy9idWlsZGJvdC9idWlsZC1hbWQ2NC5iYXQKaW5kZXggNDkzZTc0ZC4uZjc3NDA3YiAxMDA2NDQKLS0tIGEvVG9vbHMvYnVpbGRib3QvYnVpbGQtYW1kNjQuYmF0CisrKyBiL1Rvb2xzL2J1aWxkYm90L2J1aWxkLWFtZDY0LmJhdApAQCAtMSw2ICsxLDUgQEAKLUByZW0gVXNlZCBieSB0aGUgYnVpbGRib3QgImNvbXBpbGUiIHN0ZXAuCi1jbWQgL2MgVG9vbHNcYnVpbGRib3RcZXh0ZXJuYWwtYW1kNjQuYmF0Ci1jYWxsICIlVlMxMDBDT01OVE9PTFMlXC4uXC4uXFZDXHZjdmFyc2FsbC5iYXQiIHg4Nl9hbWQ2NAotY21kIC9jIFRvb2xzXGJ1aWxkYm90XGNsZWFuLWFtZDY0LmJhdAotCi1tc2J1aWxkIFBDYnVpbGRccGNidWlsZC5zbG4gL3A6Q29uZmlndXJhdGlvbj1EZWJ1ZyAvcDpQbGF0Zm9ybT14NjQKK0ByZW0gRm9ybWVybHkgdXNlZCBieSB0aGUgYnVpbGRib3QgImNvbXBpbGUiIHN0ZXAuDQorQGVjaG8gVGhpcyBzY3JpcHQgaXMgbm8gbG9uZ2VyIHVzZWQgYW5kIG1heSBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuDQorQGVjaG8gVG8gZ2V0IHRoZSBzYW1lIGVmZmVjdCBhcyB0aGlzIHNjcmlwdCwgdXNlDQorQGVjaG8gICAgIFBDYnVpbGRcYnVpbGQuYmF0IC1kIC1lIC1rIC1wIHg2NA0KK2NhbGwgIiV+ZHAwYnVpbGQuYmF0IiAtcCB4NjQgJSoNCmRpZmYgLS1naXQgYS9Ub29scy9idWlsZGJvdC9idWlsZC5iYXQgYi9Ub29scy9idWlsZGJvdC9idWlsZC5iYXQKaW5kZXggYmU3OWIxMC4uNWU4NDBjYyAxMDA2NDQKLS0tIGEvVG9vbHMvYnVpbGRib3QvYnVpbGQuYmF0CisrKyBiL1Rvb2xzL2J1aWxkYm90L2J1aWxkLmJhdApAQCAtMSw3ICsxLDE3IEBACi1AcmVtIFVzZWQgYnkgdGhlIGJ1aWxkYm90ICJjb21waWxlIiBzdGVwLgotY21kIC9jIFRvb2xzXGJ1aWxkYm90XGV4dGVybmFsLmJhdAotY2FsbCAiJVZTMTAwQ09NTlRPT0xTJXZzdmFyczMyLmJhdCIKLWNtZCAvYyBUb29sc1xidWlsZGJvdFxjbGVhbi5iYXQKLQotbXNidWlsZCBQQ2J1aWxkXHBjYnVpbGQuc2xuIC9wOkNvbmZpZ3VyYXRpb249RGVidWcgL3A6UGxhdGZvcm09V2luMzIKLQorQHJlbSBVc2VkIGJ5IHRoZSBidWlsZGJvdCAiY29tcGlsZSIgc3RlcC4NCisNCitAcmVtIENsZWFuIHVwDQorY2FsbCAiJX5kcDBjbGVhbi5iYXQiICUqDQorDQorQHJlbSBJZiB5b3UgbmVlZCB0aGUgYnVpbGRib3RzIHRvIHN0YXJ0IGZyZXNoIChzdWNoIGFzIHdoZW4gdXBncmFkaW5nIHRvDQorQHJlbSBhIG5ldyB2ZXJzaW9uIG9mIGFuIGV4dGVybmFsIGxpYnJhcnksIGVzcGVjaWFsbHkgVGNsL1RrKToNCitAcmVtIDEpIHVuY29tbWVudCB0aGUgZm9sbG93aW5nIGxpbmU6DQorDQorQHJlbSAgICBjYWxsICIlfmRwMC4uXC4uXFBDYnVpbGRcZ2V0X2V4dGVybmFscy5iYXQiIC0tY2xlYW4tb25seQ0KKw0KK0ByZW0gMikgY29tbWl0IGFuZCBwdXNoDQorQHJlbSAzKSB3YWl0IGZvciBhbGwgV2luZG93cyBib3RzIHRvIHN0YXJ0IGEgYnVpbGQgd2l0aCB0aGF0IGNoYW5nZXNldA0KK0ByZW0gNCkgcmUtY29tbWVudCwgY29tbWl0IGFuZCBwdXNoIGFnYWluDQorDQorQHJlbSBEbyB0aGUgYnVpbGQNCitjYWxsICIlfmRwMC4uXC4uXFBDYnVpbGRcYnVpbGQuYmF0IiAtZSAtZCAtayAtdiAlKg0KZGlmZiAtLWdpdCBhL1Rvb2xzL2J1aWxkYm90L2J1aWxkbXNpLmJhdCBiL1Rvb2xzL2J1aWxkYm90L2J1aWxkbXNpLmJhdAppbmRleCBhZTkzZTY3Li40Y2E1NjA0IDEwMDY0NAotLS0gYS9Ub29scy9idWlsZGJvdC9idWlsZG1zaS5iYXQKKysrIGIvVG9vbHMvYnVpbGRib3QvYnVpbGRtc2kuYmF0CkBAIC0xLDIxICsxLDIxIEBACi1AcmVtIFVzZWQgYnkgdGhlIGJ1aWxkYm90ICJidWlsZG1zaSIgc3RlcC4KLQotY21kIC9jIFRvb2xzXGJ1aWxkYm90XGV4dGVybmFsLmJhdAotQHJlbSBidWlsZCByZWxlYXNlIHZlcnNpb25zIG9mIHRoaW5ncwotY2FsbCAiJVZTMTAwQ09NTlRPT0xTJXZzdmFyczMyLmJhdCIKLQotQHJlbSBidWlsZCBQeXRob24KLW1zYnVpbGQgL3A6dXNlZW52PXRydWUgUENidWlsZFxwY2J1aWxkLnNsbiAvcDpDb25maWd1cmF0aW9uPVJlbGVhc2UgL3A6UGxhdGZvcm09V2luMzIKLQotQHJlbSBidWlsZCB0aGUgZG9jdW1lbnRhdGlvbgotYmFzaC5leGUgLWMgJ2NkIERvYzttYWtlIFBZVEhPTj1weXRob24yLjUgdXBkYXRlIGh0bWxoZWxwJwotIiVQcm9ncmFtRmlsZXMlXEhUTUwgSGVscCBXb3Jrc2hvcFxoaGMuZXhlIiBEb2NcYnVpbGRcaHRtbGhlbHBccHl0aG9uMjZhMy5oaHAKLQotQHJlbSBidWlsZCB0aGUgTVNJIGZpbGUKLWNkIFBDCi1ubWFrZSAvZiBpY29ucy5tYWsKLWNkIC4uXFRvb2xzXG1zaQotZGVsICoubXNpCi1ubWFrZSAvZiBtc2lzdXBwb3J0Lm1hawotJUhPU1RfUFlUSE9OJSBtc2kucHkKLQorQHJlbSBVc2VkIGJ5IHRoZSBidWlsZGJvdCAiYnVpbGRtc2kiIHN0ZXAuDQorDQorY21kIC9jIFRvb2xzXGJ1aWxkYm90XGV4dGVybmFsLmJhdA0KK0ByZW0gYnVpbGQgcmVsZWFzZSB2ZXJzaW9ucyBvZiB0aGluZ3MNCitjYWxsICIlVlMxMDBDT01OVE9PTFMldnN2YXJzMzIuYmF0Ig0KKw0KK0ByZW0gYnVpbGQgUHl0aG9uDQorbXNidWlsZCAvcDp1c2VlbnY9dHJ1ZSBQQ2J1aWxkXHBjYnVpbGQuc2xuIC9wOkNvbmZpZ3VyYXRpb249UmVsZWFzZSAvcDpQbGF0Zm9ybT1XaW4zMg0KKw0KK0ByZW0gYnVpbGQgdGhlIGRvY3VtZW50YXRpb24NCitiYXNoLmV4ZSAtYyAnY2QgRG9jO21ha2UgUFlUSE9OPXB5dGhvbjIuNSB1cGRhdGUgaHRtbGhlbHAnDQorIiVQcm9ncmFtRmlsZXMlXEhUTUwgSGVscCBXb3Jrc2hvcFxoaGMuZXhlIiBEb2NcYnVpbGRcaHRtbGhlbHBccHl0aG9uMjZhMy5oaHANCisNCitAcmVtIGJ1aWxkIHRoZSBNU0kgZmlsZQ0KK2NkIFBDDQorbm1ha2UgL2YgaWNvbnMubWFrDQorY2QgLi5cVG9vbHNcbXNpDQorZGVsICoubXNpDQorbm1ha2UgL2YgbXNpc3VwcG9ydC5tYWsNCislSE9TVF9QWVRIT04lIG1zaS5weQ0KKw0KZGlmZiAtLWdpdCBhL1Rvb2xzL2J1aWxkYm90L2NsZWFuLWFtZDY0LmJhdCBiL1Rvb2xzL2J1aWxkYm90L2NsZWFuLWFtZDY0LmJhdAppbmRleCAyNDY2MGFmLi5iNTNjN2MxIDEwMDY0NAotLS0gYS9Ub29scy9idWlsZGJvdC9jbGVhbi1hbWQ2NC5iYXQKKysrIGIvVG9vbHMvYnVpbGRib3QvY2xlYW4tYW1kNjQuYmF0CkBAIC0xLDEwICsxLDUgQEAKLUByZW0gVXNlZCBieSB0aGUgYnVpbGRib3QgImNsZWFuIiBzdGVwLgotY2FsbCAiJVZTMTAwQ09NTlRPT0xTJVwuLlwuLlxWQ1x2Y3ZhcnNhbGwuYmF0IiB4ODZfYW1kNjQKLUBlY2hvIERlbGV0aW5nIC5weWMvLnB5byBmaWxlcyAuLi4KLWRlbCAvcyBMaWJcKi5weWMgTGliXCoucHlvCi1AZWNobyBEZWxldGluZyB0ZXN0IGxlZnRvdmVycyAuLi4KLXJtZGlyIC9zIC9xIGJ1aWxkCi1jZCBQQ2J1aWxkCi1tc2J1aWxkIC90YXJnZXQ6Y2xlYW4gcGNidWlsZC5zbG4gL3A6Q29uZmlndXJhdGlvbj1SZWxlYXNlIC9wOlBsYXRmb3JtVGFyZ2V0PXg2NAotbXNidWlsZCAvdGFyZ2V0OmNsZWFuIHBjYnVpbGQuc2xuIC9wOkNvbmZpZ3VyYXRpb249RGVidWcgL3A6UGxhdGZvcm1UYXJnZXQ9eDY0Ci1jZCAuLgorQHJlbSBGb3JtZXJseSB1c2VkIGJ5IHRoZSBidWlsZGJvdCAiY2xlYW4iIHN0ZXAuDQorQGVjaG8gVGhpcyBzY3JpcHQgaXMgbm8gbG9uZ2VyIHVzZWQgYW5kIG1heSBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuDQorQGVjaG8gVG8gZ2V0IHRoZSBzYW1lIGVmZmVjdCBhcyB0aGlzIHNjcmlwdCwgdXNlIGBjbGVhbi5iYXRgIGZyb20gdGhpcw0KK0BlY2hvIGRpcmVjdG9yeSBhbmQgcGFzcyBgLXAgeDY0YCBhcyB0d28gYXJndW1lbnRzLg0KK2NhbGwgIiV+ZHAwY2xlYW4uYmF0IiAtcCB4NjQgJSoNCmRpZmYgLS1naXQgYS9Ub29scy9idWlsZGJvdC9jbGVhbi5iYXQgYi9Ub29scy9idWlsZGJvdC9jbGVhbi5iYXQKaW5kZXggMjE4ZmFjYy4uMGZjNjhmZCAxMDA2NDQKLS0tIGEvVG9vbHMvYnVpbGRib3QvY2xlYW4uYmF0CisrKyBiL1Rvb2xzL2J1aWxkYm90L2NsZWFuLmJhdApAQCAtMSw4ICsxLDE2IEBACi1AcmVtIFVzZWQgYnkgdGhlIGJ1aWxkYm90ICJjbGVhbiIgc3RlcC4KLWNhbGwgIiVWUzEwMENPTU5UT09MUyV2c3ZhcnMzMi5iYXQiCi1AZWNobyBEZWxldGluZyB0ZXN0IGxlZnRvdmVycyAuLi4KLXJtZGlyIC9zIC9xIGJ1aWxkCi1jZCBQQ2J1aWxkCi1tc2J1aWxkIC90YXJnZXQ6Y2xlYW4gcGNidWlsZC5zbG4gL3A6Q29uZmlndXJhdGlvbj1SZWxlYXNlIC9wOlBsYXRmb3JtVGFyZ2V0PXg4NgotbXNidWlsZCAvdGFyZ2V0OmNsZWFuIHBjYnVpbGQuc2xuIC9wOkNvbmZpZ3VyYXRpb249RGVidWcgL3A6UGxhdGZvcm1UYXJnZXQ9eDg2Ci1jZCAuLgorQGVjaG8gb2ZmDQorcmVtIFVzZWQgYnkgdGhlIGJ1aWxkYm90ICJjbGVhbiIgc3RlcC4NCisNCitzZXRsb2NhbA0KK3NldCByb290PSV+ZHAwLi5cLi4NCitzZXQgcGNidWlsZD0lcm9vdCVcUENidWlsZA0KKw0KK2VjaG8gRGVsZXRpbmcgYnVpbGQNCitjYWxsICIlcGNidWlsZCVcYnVpbGQuYmF0IiAtdCBDbGVhbiAtayAlKg0KK2NhbGwgIiVwY2J1aWxkJVxidWlsZC5iYXQiIC10IENsZWFuIC1rIC1kICUqDQorDQorZWNobyBEZWxldGluZyAucHljLy5weW8gZmlsZXMgLi4uDQorZGVsIC9zICIlcm9vdCVcTGliXCoucHljIiAiJXJvb3QlXExpYlwqLnB5byINCisNCitlY2hvIERlbGV0aW5nIHRlc3QgbGVmdG92ZXJzIC4uLg0KK3JtZGlyIC9zIC9xICIlcm9vdCVcYnVpbGQiDQpkaWZmIC0tZ2l0IGEvVG9vbHMvYnVpbGRib3QvZXh0ZXJuYWwtYW1kNjQuYmF0IGIvVG9vbHMvYnVpbGRib3QvZXh0ZXJuYWwtYW1kNjQuYmF0CmluZGV4IGQyZmYyNTUuLmJmYWVmMDUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL2J1aWxkYm90L2V4dGVybmFsLWFtZDY0LmJhdAorKysgYi9Ub29scy9idWlsZGJvdC9leHRlcm5hbC1hbWQ2NC5iYXQKQEAgLTEsMjEgKzEsMyBAQAotQHJlbSBGZXRjaGVzIChhbmQgYnVpbGRzIGlmIG5lY2Vzc2FyeSkgZXh0ZXJuYWwgZGVwZW5kZW5jaWVzCi0KLUByZW0gQXNzdW1lIHdlIHN0YXJ0IGluc2lkZSB0aGUgUHl0aG9uIHNvdXJjZSBkaXJlY3RvcnkKLWNhbGwgIlRvb2xzXGJ1aWxkYm90XGV4dGVybmFsLWNvbW1vbi5iYXQiCi1jYWxsICIlVlMxMDBDT01OVE9PTFMlXC4uXC4uXFZDXHZjdmFyc2FsbC5iYXQiIHg4Nl9hbWQ2NAotCi1pZiBub3QgZXhpc3QgdGNsdGs2NFxiaW5cdGNsODVnLmRsbCAoCi0gICAgY2QgdGNsLTguNS4xMS4wXHdpbgotICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIENPTVBJTEVSRkxBR1M9LURXSU5WRVI9MHgwNTAwIERFQlVHPTEgTUFDSElORT1BTUQ2NCBJTlNUQUxMRElSPS4uXC4uXHRjbHRrNjQgY2xlYW4gYWxsCi0gICAgbm1ha2UgLWYgbWFrZWZpbGUudmMgQ09NUElMRVJGTEFHUz0tRFdJTlZFUj0weDA1MDAgREVCVUc9MSBNQUNISU5FPUFNRDY0IElOU1RBTExESVI9Li5cLi5cdGNsdGs2NCBpbnN0YWxsCi0gICAgY2QgLi5cLi4KLSkKLQotaWYgbm90IGV4aXN0IHRjbHRrNjRcYmluXHRrODVnLmRsbCAoCi0gICAgY2QgdGstOC41LjExLjBcd2luICAgIAotICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIENPTVBJTEVSRkxBR1M9LURXSU5WRVI9MHgwNTAwIE9QVFM9bm94cCBERUJVRz0xIE1BQ0hJTkU9QU1ENjQgSU5TVEFMTERJUj0uLlwuLlx0Y2x0azY0IFRDTERJUj0uLlwuLlx0Y2wtOC41LjExLjAgY2xlYW4KLSAgICBubWFrZSAtZiBtYWtlZmlsZS52YyBDT01QSUxFUkZMQUdTPS1EV0lOVkVSPTB4MDUwMCBPUFRTPW5veHAgREVCVUc9MSBNQUNISU5FPUFNRDY0IElOU1RBTExESVI9Li5cLi5cdGNsdGs2NCBUQ0xESVI9Li5cLi5cdGNsLTguNS4xMS4wIGFsbAotICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIENPTVBJTEVSRkxBR1M9LURXSU5WRVI9MHgwNTAwIE9QVFM9bm94cCBERUJVRz0xIE1BQ0hJTkU9QU1ENjQgSU5TVEFMTERJUj0uLlwuLlx0Y2x0azY0IFRDTERJUj0uLlwuLlx0Y2wtOC41LjExLjAgaW5zdGFsbAotICAgIGNkIC4uXC4uCi0pCi0KK0BlY2hvIFRoaXMgc2NyaXB0IGlzIG5vIGxvbmdlciB1c2VkIGFuZCBtYXkgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLg0KK0BlY2hvIFBsZWFzZSB1c2UgUENidWlsZFxnZXRfZXh0ZXJuYWxzLmJhdCBpbnN0ZWFkLg0KK0AiJX5kcDAuLlwuLlxQQ2J1aWxkXGdldF9leHRlcm5hbHMuYmF0IiAlKg0KZGlmZiAtLWdpdCBhL1Rvb2xzL2J1aWxkYm90L2V4dGVybmFsLWNvbW1vbi5iYXQgYi9Ub29scy9idWlsZGJvdC9leHRlcm5hbC1jb21tb24uYmF0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNjI3OGIyLi4wMDAwMDAwCi0tLSBhL1Rvb2xzL2J1aWxkYm90L2V4dGVybmFsLWNvbW1vbi5iYXQKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi1AcmVtIENvbW1vbiBmaWxlIHNoYXJlZCBiZXR3ZWVuIGV4dGVybmFsLmJhdCBhbmQgZXh0ZXJuYWwtYW1kNjQuYmF0LiAgUmVzcG9uc2libGUgZm9yCi1AcmVtIGZldGNoaW5nIGV4dGVybmFsIGNvbXBvbmVudHMgaW50byB0aGUgcm9vdFwuLiBidWlsZGJvdCBkaXJlY3Rvcmllcy4KLQotY2QgLi4KLUByZW0gWFhYOiBJZiB5b3UgbmVlZCB0byBmb3JjZSB0aGUgYnVpbGRib3RzIHRvIHN0YXJ0IGZyb20gYSBmcmVzaCBlbnZpcm9ubWVudCwgdW5jb21tZW50Ci1AcmVtIHRoZSBmb2xsb3dpbmcsIGNoZWNrIGl0IGluLCB0aGVuIGNoZWNrIGl0IG91dCwgY29tbWVudCBpdCBvdXQsIHRoZW4gY2hlY2sgaXQgYmFjayBpbi4KLUByZW0gaWYgZXhpc3QgYnppcDItMS4wLjYgcmQgL3MvcSBiemlwMi0xLjAuNgotQHJlbSBpZiBleGlzdCB0Y2x0ayByZCAvcy9xIHRjbHRrCi1AcmVtIGlmIGV4aXN0IHRjbHRrNjQgcmQgL3MvcSB0Y2x0azY0Ci1AcmVtIGlmIGV4aXN0IHRjbDguNC4xMiByZCAvcy9xIHRjbDguNC4xMgotQHJlbSBpZiBleGlzdCB0Y2w4LjQuMTYgcmQgL3MvcSB0Y2w4LjQuMTYKLUByZW0gaWYgZXhpc3QgdGNsLTguNC4xOC4xIHJkIC9zL3EgdGNsLTguNC4xOC4xCi1AcmVtIGlmIGV4aXN0IHRrOC40LjEyIHJkIC9zL3EgdGs4LjQuMTIKLUByZW0gaWYgZXhpc3QgdGs4LjQuMTYgcmQgL3MvcSB0azguNC4xNgotQHJlbSBpZiBleGlzdCB0ay04LjQuMTguMSByZCAvcy9xIHRrLTguNC4xOC4xCi1AcmVtIGlmIGV4aXN0IGRiLTQuNC4yMCByZCAvcy9xIGRiLTQuNC4yMAotQHJlbSBpZiBleGlzdCBvcGVuc3NsLTEuMC4xZSByZCAvcy9xIG9wZW5zc2wtMS4wLjFlCi1AcmVtIGlmIGV4aXN0IHNxbGl0ZS0zLjcuMTIgcmQgL3MvcSBzcWxpdGUtMy43LjEyICAgIAotCi1AcmVtIGJ6aXAKLWlmIG5vdCBleGlzdCBiemlwMi0xLjAuNiAoCi0gICByZCAvcy9xIGJ6aXAyLTEuMC41Ci0gIHN2biBleHBvcnQgaHR0cDovL3N2bi5weXRob24ub3JnL3Byb2plY3RzL2V4dGVybmFsL2J6aXAyLTEuMC42Ci0pCi0KLUByZW0gT3BlblNTTAotaWYgbm90IGV4aXN0IG9wZW5zc2wtMS4wLjFlICgKLSAgICByZCAvcy9xIG9wZW5zc2wtMS4wLjFkCi0gICAgc3ZuIGV4cG9ydCBodHRwOi8vc3ZuLnB5dGhvbi5vcmcvcHJvamVjdHMvZXh0ZXJuYWwvb3BlbnNzbC0xLjAuMWUKLSkKLQotQHJlbSB0Y2wvdGsKLWlmIG5vdCBleGlzdCB0Y2wtOC41LjExLjAgKAotICAgcmQgL3MvcSB0Y2x0ayB0Y2x0azY0Ci0gICBzdm4gZXhwb3J0IGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy9wcm9qZWN0cy9leHRlcm5hbC90Y2wtOC41LjExLjAKLSkKLWlmIG5vdCBleGlzdCB0ay04LjUuMTEuMCBzdm4gZXhwb3J0IGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy9wcm9qZWN0cy9leHRlcm5hbC90ay04LjUuMTEuMAotCi1AcmVtIHNxbGl0ZTMKLWlmIG5vdCBleGlzdCBzcWxpdGUtMy43LjEyICgKLSAgcmQgL3MvcSBzcWxpdGUtc291cmNlLTMuNy40Ci0gIHN2biBleHBvcnQgaHR0cDovL3N2bi5weXRob24ub3JnL3Byb2plY3RzL2V4dGVybmFsL3NxbGl0ZS0zLjcuMTIKLSkKLQotQHJlbSBsem1hCi1pZiBub3QgZXhpc3QgeHotNS4wLjMgKAotICBzdm4gZXhwb3J0IGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy9wcm9qZWN0cy9leHRlcm5hbC94ei01LjAuMwotKQpkaWZmIC0tZ2l0IGEvVG9vbHMvYnVpbGRib3QvZXh0ZXJuYWwuYmF0IGIvVG9vbHMvYnVpbGRib3QvZXh0ZXJuYWwuYmF0CmluZGV4IGVkNWMxMGUuLmJmYWVmMDUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL2J1aWxkYm90L2V4dGVybmFsLmJhdAorKysgYi9Ub29scy9idWlsZGJvdC9leHRlcm5hbC5iYXQKQEAgLTEsMjEgKzEsMyBAQAotQHJlbSBGZXRjaGVzIChhbmQgYnVpbGRzIGlmIG5lY2Vzc2FyeSkgZXh0ZXJuYWwgZGVwZW5kZW5jaWVzCi0KLUByZW0gQXNzdW1lIHdlIHN0YXJ0IGluc2lkZSB0aGUgUHl0aG9uIHNvdXJjZSBkaXJlY3RvcnkKLWNhbGwgIlRvb2xzXGJ1aWxkYm90XGV4dGVybmFsLWNvbW1vbi5iYXQiCi1jYWxsICIlVlMxMDBDT01OVE9PTFMlXHZzdmFyczMyLmJhdCIKLQotaWYgbm90IGV4aXN0IHRjbHRrXGJpblx0Y2w4NWcuZGxsICgKLSAgICBAcmVtIGFsbCBhbmQgaW5zdGFsbCBuZWVkIHRvIGJlIHNlcGFyYXRlIGludm9jYXRpb25zLCBvdGhlcndpc2Ugbm1ha2VobHAgaXMgbm90IGZvdW5kIG9uIGluc3RhbGwKLSAgICBjZCB0Y2wtOC41LjExLjBcd2luCi0gICAgbm1ha2UgLWYgbWFrZWZpbGUudmMgQ09NUElMRVJGTEFHUz0tRFdJTlZFUj0weDA1MDAgREVCVUc9MSBJTlNUQUxMRElSPS4uXC4uXHRjbHRrIGNsZWFuIGFsbCAKLSAgICBubWFrZSAtZiBtYWtlZmlsZS52YyBERUJVRz0xIElOU1RBTExESVI9Li5cLi5cdGNsdGsgaW5zdGFsbAotICAgIGNkIC4uXC4uCi0pCi0KLWlmIG5vdCBleGlzdCB0Y2x0a1xiaW5cdGs4NWcuZGxsICgKLSAgICBjZCB0ay04LjUuMTEuMFx3aW4KLSAgICBubWFrZSAtZiBtYWtlZmlsZS52YyBDT01QSUxFUkZMQUdTPS1EV0lOVkVSPTB4MDUwMCBPUFRTPW5veHAgREVCVUc9MSBJTlNUQUxMRElSPS4uXC4uXHRjbHRrIFRDTERJUj0uLlwuLlx0Y2wtOC41LjExLjAgY2xlYW4KLSAgICBubWFrZSAtZiBtYWtlZmlsZS52YyBDT01QSUxFUkZMQUdTPS1EV0lOVkVSPTB4MDUwMCBPUFRTPW5veHAgREVCVUc9MSBJTlNUQUxMRElSPS4uXC4uXHRjbHRrIFRDTERJUj0uLlwuLlx0Y2wtOC41LjExLjAgYWxsCi0gICAgbm1ha2UgLWYgbWFrZWZpbGUudmMgQ09NUElMRVJGTEFHUz0tRFdJTlZFUj0weDA1MDAgT1BUUz1ub3hwIERFQlVHPTEgSU5TVEFMTERJUj0uLlwuLlx0Y2x0ayBUQ0xESVI9Li5cLi5cdGNsLTguNS4xMS4wIGluc3RhbGwKLSAgICBjZCAuLlwuLgotKQorQGVjaG8gVGhpcyBzY3JpcHQgaXMgbm8gbG9uZ2VyIHVzZWQgYW5kIG1heSBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuDQorQGVjaG8gUGxlYXNlIHVzZSBQQ2J1aWxkXGdldF9leHRlcm5hbHMuYmF0IGluc3RlYWQuDQorQCIlfmRwMC4uXC4uXFBDYnVpbGRcZ2V0X2V4dGVybmFscy5iYXQiICUqDQpkaWZmIC0tZ2l0IGEvVG9vbHMvYnVpbGRib3QvdGVzdC1hbWQ2NC5iYXQgYi9Ub29scy9idWlsZGJvdC90ZXN0LWFtZDY0LmJhdAppbmRleCAxYmYxMjRjLi5lNDgzMjljIDEwMDY0NAotLS0gYS9Ub29scy9idWlsZGJvdC90ZXN0LWFtZDY0LmJhdAorKysgYi9Ub29scy9idWlsZGJvdC90ZXN0LWFtZDY0LmJhdApAQCAtMSwzICsxLDYgQEAKLUByZW0gVXNlZCBieSB0aGUgYnVpbGRib3QgInRlc3QiIHN0ZXAuCi1jZCBQQ2J1aWxkCi1jYWxsIHJ0LmJhdCAtZCAtcSAteDY0IC11YWxsIC1yd1cgLW4gJTEgJTIgJTMgJTQgJTUgJTYgJTcgJTggJTkKK0ByZW0gRm9ybWVybHkgdXNlZCBieSB0aGUgYnVpbGRib3QgInRlc3QiIHN0ZXAuDQorQGVjaG8gVGhpcyBzY3JpcHQgaXMgbm8gbG9uZ2VyIHVzZWQgYW5kIG1heSBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuDQorQGVjaG8gVG8gZ2V0IHRoZSBzYW1lIGVmZmVjdCBhcyB0aGlzIHNjcmlwdCwgdXNlDQorQGVjaG8gICAgIFBDYnVpbGRccnQuYmF0IC1xIC1kIC14NjQgLXVhbGwgLXJ3Vw0KK0BlY2hvIG9yIHVzZSBgdGVzdC5iYXRgIGluIHRoaXMgZGlyZWN0b3J5IGFuZCBwYXNzIGAteDY0YCBhcyBhbiBhcmd1bWVudC4NCitjYWxsICIlfmRwMHRlc3QuYmF0IiAteDY0ICUqDQpkaWZmIC0tZ2l0IGEvVG9vbHMvYnVpbGRib3QvdGVzdC5iYXQgYi9Ub29scy9idWlsZGJvdC90ZXN0LmJhdAppbmRleCA0ZjRjNmFhLi4xNTRkZmE1IDEwMDY0NAotLS0gYS9Ub29scy9idWlsZGJvdC90ZXN0LmJhdAorKysgYi9Ub29scy9idWlsZGJvdC90ZXN0LmJhdApAQCAtMSwzICsxLDE1IEBACi1AcmVtIFVzZWQgYnkgdGhlIGJ1aWxkYm90ICJ0ZXN0IiBzdGVwLgotY2QgUENidWlsZAotY2FsbCBydC5iYXQgLWQgLXEgLXVhbGwgLXJ3VyAtbiAlMSAlMiAlMyAlNCAlNSAlNiAlNyAlOCAlOQorQHJlbSBVc2VkIGJ5IHRoZSBidWlsZGJvdCAidGVzdCIgc3RlcC4NCitAc2V0bG9jYWwNCisNCitAc2V0IGhlcmU9JX5kcDANCitAc2V0IHJ0X29wdHM9LXEgLWQNCisNCis6Q2hlY2tPcHRzDQorQGlmICclMSc9PScteDY0JyAoc2V0IHJ0X29wdHM9JXJ0X29wdHMlICUxKSAmIHNoaWZ0ICYgZ290byBDaGVja09wdHMNCitAaWYgJyUxJz09Jy1kJyAoc2V0IHJ0X29wdHM9JXJ0X29wdHMlICUxKSAmIHNoaWZ0ICYgZ290byBDaGVja09wdHMNCitAaWYgJyUxJz09Jy1PJyAoc2V0IHJ0X29wdHM9JXJ0X29wdHMlICUxKSAmIHNoaWZ0ICYgZ290byBDaGVja09wdHMNCitAaWYgJyUxJz09Jy1xJyAoc2V0IHJ0X29wdHM9JXJ0X29wdHMlICUxKSAmIHNoaWZ0ICYgZ290byBDaGVja09wdHMNCitAaWYgJyUxJz09JytkJyAoc2V0IHJ0X29wdHM9JXJ0X29wdHM6LWQ9JSkgJiBzaGlmdCAmIGdvdG8gQ2hlY2tPcHRzDQorQGlmICclMSc9PScrcScgKHNldCBydF9vcHRzPSVydF9vcHRzOi1xPSUpICYgc2hpZnQgJiBnb3RvIENoZWNrT3B0cw0KKw0KK2NhbGwgIiVoZXJlJS4uXC4uXFBDYnVpbGRccnQuYmF0IiAlcnRfb3B0cyUgLXVhbGwgLXJ3VyAtbiAtLXRpbWVvdXQ9MzYwMCAlMSAlMiAlMyAlNCAlNSAlNiAlNyAlOCAlOQ0KZGlmZiAtLWdpdCBhL1Rvb2xzL2NsaW5pYy9jbGluaWMucHkgYi9Ub29scy9jbGluaWMvY2xpbmljLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmM2YWMzYjkKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9jbGluaWMvY2xpbmljLnB5CkBAIC0wLDAgKzEsNDE5NiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMworIworIyBBcmd1bWVudCBDbGluaWMKKyMgQ29weXJpZ2h0IDIwMTItMjAxMyBieSBMYXJyeSBIYXN0aW5ncy4KKyMgTGljZW5zZWQgdG8gdGhlIFBTRiB1bmRlciBhIGNvbnRyaWJ1dG9yIGFncmVlbWVudC4KKyMKKworaW1wb3J0IGFiYworaW1wb3J0IGFzdAoraW1wb3J0IGF0ZXhpdAoraW1wb3J0IGNvbGxlY3Rpb25zCitpbXBvcnQgY29udGV4dGxpYgoraW1wb3J0IGNvcHkKK2ltcG9ydCBjcHAKK2ltcG9ydCBmdW5jdG9vbHMKK2ltcG9ydCBoYXNobGliCitpbXBvcnQgaW5zcGVjdAoraW1wb3J0IGlvCitpbXBvcnQgaXRlcnRvb2xzCitpbXBvcnQgb3MKK2ltcG9ydCBwcHJpbnQKK2ltcG9ydCByZQoraW1wb3J0IHNobGV4CitpbXBvcnQgc3RyaW5nCitpbXBvcnQgc3lzCitpbXBvcnQgdGVtcGZpbGUKK2ltcG9ydCB0ZXh0d3JhcAoraW1wb3J0IHRyYWNlYmFjaworaW1wb3J0IHV1aWQKKworIyBUT0RPOgorIworIyBzb29uOgorIworIyAqIGFsbG93IG1peGluZyBhbnkgdHdvIG9mIHtwb3NpdGlvbmFsLW9ubHksIHBvc2l0aW9uYWwtb3Ita2V5d29yZCwKKyMgICBrZXl3b3JkLW9ubHl9CisjICAgICAgICogZGljdCBjb25zdHJ1Y3RvciB1c2VzIHBvc2l0aW9uYWwtb25seSBhbmQga2V5d29yZC1vbmx5CisjICAgICAgICogbWF4IGFuZCBtaW4gdXNlIHBvc2l0aW9uYWwgb25seSB3aXRoIGFuIG9wdGlvbmFsIGdyb3VwCisjICAgICAgICAgYW5kIGtleXdvcmQtb25seQorIworCit2ZXJzaW9uID0gJzEnCisKK19lbXB0eSA9IGluc3BlY3QuX2VtcHR5Citfdm9pZCA9IGluc3BlY3QuX3ZvaWQKKworTm9uZVR5cGUgPSB0eXBlKE5vbmUpCisKK2NsYXNzIFVuc3BlY2lmaWVkOgorICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICc8VW5zcGVjaWZpZWQ+JworCit1bnNwZWNpZmllZCA9IFVuc3BlY2lmaWVkKCkKKworCitjbGFzcyBOdWxsOgorICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICc8TnVsbD4nCisKK05VTEwgPSBOdWxsKCkKKworCitjbGFzcyBVbmtub3duOgorICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICc8VW5rbm93bj4nCisKK3Vua25vd24gPSBVbmtub3duKCkKKworCitkZWYgX3RleHRfYWNjdW11bGF0b3IoKToKKyAgICB0ZXh0ID0gW10KKyAgICBkZWYgb3V0cHV0KCk6CisgICAgICAgIHMgPSAnJy5qb2luKHRleHQpCisgICAgICAgIHRleHQuY2xlYXIoKQorICAgICAgICByZXR1cm4gcworICAgIHJldHVybiB0ZXh0LCB0ZXh0LmFwcGVuZCwgb3V0cHV0CisKKworZGVmIHRleHRfYWNjdW11bGF0b3IoKToKKyAgICAiIiIKKyAgICBDcmVhdGVzIGEgc2ltcGxlIHRleHQgYWNjdW11bGF0b3IgLyBqb2luZXIuCisKKyAgICBSZXR1cm5zIGEgcGFpciBvZiBjYWxsYWJsZXM6CisgICAgICAgIGFwcGVuZCwgb3V0cHV0CisgICAgImFwcGVuZCIgYXBwZW5kcyBhIHN0cmluZyB0byB0aGUgYWNjdW11bGF0b3IuCisgICAgIm91dHB1dCIgcmV0dXJucyB0aGUgY29udGVudHMgb2YgdGhlIGFjY3VtdWxhdG9yCisgICAgICAgam9pbmVkIHRvZ2V0aGVyICgnJy5qb2luKGFjY3VtdWxhdG9yKSkgYW5kCisgICAgICAgZW1wdGllcyB0aGUgYWNjdW11bGF0b3IuCisgICAgIiIiCisgICAgdGV4dCwgYXBwZW5kLCBvdXRwdXQgPSBfdGV4dF9hY2N1bXVsYXRvcigpCisgICAgcmV0dXJuIGFwcGVuZCwgb3V0cHV0CisKKworZGVmIHdhcm5fb3JfZmFpbChmYWlsPUZhbHNlLCAqYXJncywgZmlsZW5hbWU9Tm9uZSwgbGluZV9udW1iZXI9Tm9uZSk6CisgICAgam9pbmVkID0gIiAiLmpvaW4oW3N0cihhKSBmb3IgYSBpbiBhcmdzXSkKKyAgICBhZGQsIG91dHB1dCA9IHRleHRfYWNjdW11bGF0b3IoKQorICAgIGlmIGZhaWw6CisgICAgICAgIGFkZCgiRXJyb3IiKQorICAgIGVsc2U6CisgICAgICAgIGFkZCgiV2FybmluZyIpCisgICAgaWYgY2xpbmljOgorICAgICAgICBpZiBmaWxlbmFtZSBpcyBOb25lOgorICAgICAgICAgICAgZmlsZW5hbWUgPSBjbGluaWMuZmlsZW5hbWUKKyAgICAgICAgaWYgZ2V0YXR0cihjbGluaWMsICdibG9ja19wYXJzZXInLCBOb25lKSBhbmQgKGxpbmVfbnVtYmVyIGlzIE5vbmUpOgorICAgICAgICAgICAgbGluZV9udW1iZXIgPSBjbGluaWMuYmxvY2tfcGFyc2VyLmxpbmVfbnVtYmVyCisgICAgaWYgZmlsZW5hbWUgaXMgbm90IE5vbmU6CisgICAgICAgIGFkZCgnIGluIGZpbGUgIicgKyBmaWxlbmFtZSArICciJykKKyAgICBpZiBsaW5lX251bWJlciBpcyBub3QgTm9uZToKKyAgICAgICAgYWRkKCIgb24gbGluZSAiICsgc3RyKGxpbmVfbnVtYmVyKSkKKyAgICBhZGQoJzpcbicpCisgICAgYWRkKGpvaW5lZCkKKyAgICBwcmludChvdXRwdXQoKSkKKyAgICBpZiBmYWlsOgorICAgICAgICBzeXMuZXhpdCgtMSkKKworCitkZWYgd2FybigqYXJncywgZmlsZW5hbWU9Tm9uZSwgbGluZV9udW1iZXI9Tm9uZSk6CisgICAgcmV0dXJuIHdhcm5fb3JfZmFpbChGYWxzZSwgKmFyZ3MsIGZpbGVuYW1lPWZpbGVuYW1lLCBsaW5lX251bWJlcj1saW5lX251bWJlcikKKworZGVmIGZhaWwoKmFyZ3MsIGZpbGVuYW1lPU5vbmUsIGxpbmVfbnVtYmVyPU5vbmUpOgorICAgIHJldHVybiB3YXJuX29yX2ZhaWwoVHJ1ZSwgKmFyZ3MsIGZpbGVuYW1lPWZpbGVuYW1lLCBsaW5lX251bWJlcj1saW5lX251bWJlcikKKworCitkZWYgcXVvdGVkX2Zvcl9jX3N0cmluZyhzKToKKyAgICBmb3Igb2xkLCBuZXcgaW4gKAorICAgICAgICAoJ1xcJywgJ1xcXFwnKSwgIyBtdXN0IGJlIGZpcnN0IQorICAgICAgICAoJyInLCAnXFwiJyksCisgICAgICAgICgiJyIsICJcXCciKSwKKyAgICAgICAgKToKKyAgICAgICAgcyA9IHMucmVwbGFjZShvbGQsIG5ldykKKyAgICByZXR1cm4gcworCitkZWYgY19yZXByKHMpOgorICAgIHJldHVybiAnIicgKyBzICsgJyInCisKKworaXNfbGVnYWxfY19pZGVudGlmaWVyID0gcmUuY29tcGlsZSgnXltBLVphLXpfXVtBLVphLXowLTlfXSokJykubWF0Y2gKKworZGVmIGlzX2xlZ2FsX3B5X2lkZW50aWZpZXIocyk6CisgICAgcmV0dXJuIGFsbChpc19sZWdhbF9jX2lkZW50aWZpZXIoZmllbGQpIGZvciBmaWVsZCBpbiBzLnNwbGl0KCcuJykpCisKKyMgaWRlbnRpZmllcnMgdGhhdCBhcmUgb2theSBpbiBQeXRob24gYnV0IGFyZW4ndCBhIGdvb2QgaWRlYSBpbiBDLgorIyBzbyBpZiB0aGV5J3JlIHVzZWQgQXJndW1lbnQgQ2xpbmljIHdpbGwgYWRkICJfdmFsdWUiIHRvIHRoZSBlbmQKKyMgb2YgdGhlIG5hbWUgaW4gQy4KK2Nfa2V5d29yZHMgPSBzZXQoIiIiCithc20gYXV0byBicmVhayBjYXNlIGNoYXIgY29uc3QgY29udGludWUgZGVmYXVsdCBkbyBkb3VibGUKK2Vsc2UgZW51bSBleHRlcm4gZmxvYXQgZm9yIGdvdG8gaWYgaW5saW5lIGludCBsb25nCityZWdpc3RlciByZXR1cm4gc2hvcnQgc2lnbmVkIHNpemVvZiBzdGF0aWMgc3RydWN0IHN3aXRjaAordHlwZWRlZiB0eXBlb2YgdW5pb24gdW5zaWduZWQgdm9pZCB2b2xhdGlsZSB3aGlsZQorIiIiLnN0cmlwKCkuc3BsaXQoKSkKKworZGVmIGVuc3VyZV9sZWdhbF9jX2lkZW50aWZpZXIocyk6CisgICAgIyBmb3Igbm93LCBqdXN0IGNvbXBsYWluIGlmIHdoYXQgd2UncmUgZ2l2ZW4gaXNuJ3QgbGVnYWwKKyAgICBpZiBub3QgaXNfbGVnYWxfY19pZGVudGlmaWVyKHMpOgorICAgICAgICBmYWlsKCJJbGxlZ2FsIEMgaWRlbnRpZmllcjoge30iLmZvcm1hdChzKSkKKyAgICAjIGJ1dCBpZiB3ZSBwaWNrZWQgYSBDIGtleXdvcmQsIHBpY2sgc29tZXRoaW5nIGVsc2UKKyAgICBpZiBzIGluIGNfa2V5d29yZHM6CisgICAgICAgIHJldHVybiBzICsgIl92YWx1ZSIKKyAgICByZXR1cm4gcworCitkZWYgcnN0cmlwX2xpbmVzKHMpOgorICAgIHRleHQsIGFkZCwgb3V0cHV0ID0gX3RleHRfYWNjdW11bGF0b3IoKQorICAgIGZvciBsaW5lIGluIHMuc3BsaXQoJ1xuJyk6CisgICAgICAgIGFkZChsaW5lLnJzdHJpcCgpKQorICAgICAgICBhZGQoJ1xuJykKKyAgICB0ZXh0LnBvcCgpCisgICAgcmV0dXJuIG91dHB1dCgpCisKK2RlZiBsaW5lYXJfZm9ybWF0KHMsICoqa3dhcmdzKToKKyAgICAiIiIKKyAgICBQZXJmb3JtIHN0ci5mb3JtYXQtbGlrZSBzdWJzdGl0dXRpb24sIGV4Y2VwdDoKKyAgICAgICogVGhlIHN0cmluZ3Mgc3Vic3RpdHV0ZWQgbXVzdCBiZSBvbiBsaW5lcyBieQorICAgICAgICB0aGVtc2VsdmVzLiAgKFRoaXMgbGluZSBpcyB0aGUgInNvdXJjZSBsaW5lIi4pCisgICAgICAqIElmIHRoZSBzdWJzdGl0dXRpb24gdGV4dCBpcyBlbXB0eSwgdGhlIHNvdXJjZSBsaW5lCisgICAgICAgIGlzIHJlbW92ZWQgaW4gdGhlIG91dHB1dC4KKyAgICAgICogSWYgdGhlIGZpZWxkIGlzIG5vdCByZWNvZ25pemVkLCB0aGUgb3JpZ2luYWwgbGluZQorICAgICAgICBpcyBwYXNzZWQgdW5tb2RpZmllZCB0aHJvdWdoIHRvIHRoZSBvdXRwdXQuCisgICAgICAqIElmIHRoZSBzdWJzdGl0dXRpb24gdGV4dCBpcyBub3QgZW1wdHk6CisgICAgICAgICAgKiBFYWNoIGxpbmUgb2YgdGhlIHN1YnN0aXR1dGVkIHRleHQgaXMgaW5kZW50ZWQKKyAgICAgICAgICAgIGJ5IHRoZSBpbmRlbnQgb2YgdGhlIHNvdXJjZSBsaW5lLgorICAgICAgICAgICogQSBuZXdsaW5lIHdpbGwgYmUgYWRkZWQgdG8gdGhlIGVuZC4KKyAgICAiIiIKKworICAgIGFkZCwgb3V0cHV0ID0gdGV4dF9hY2N1bXVsYXRvcigpCisgICAgZm9yIGxpbmUgaW4gcy5zcGxpdCgnXG4nKToKKyAgICAgICAgaW5kZW50LCBjdXJseSwgdHJhaWxpbmcgPSBsaW5lLnBhcnRpdGlvbigneycpCisgICAgICAgIGlmIG5vdCBjdXJseToKKyAgICAgICAgICAgIGFkZChsaW5lKQorICAgICAgICAgICAgYWRkKCdcbicpCisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIG5hbWUsIGN1cmwsIHRyYWlsaW5nID0gdHJhaWxpbmcucGFydGl0aW9uKCd9JykKKyAgICAgICAgaWYgbm90IGN1cmx5IG9yIG5hbWUgbm90IGluIGt3YXJnczoKKyAgICAgICAgICAgIGFkZChsaW5lKQorICAgICAgICAgICAgYWRkKCdcbicpCisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIGlmIHRyYWlsaW5nOgorICAgICAgICAgICAgZmFpbCgiVGV4dCBmb3VuZCBhZnRlciB7IiArIG5hbWUgKyAifSBibG9jayBtYXJrZXIhICBJdCBtdXN0IGJlIG9uIGEgbGluZSBieSBpdHNlbGYuIikKKyAgICAgICAgaWYgaW5kZW50LnN0cmlwKCk6CisgICAgICAgICAgICBmYWlsKCJOb24td2hpdGVzcGFjZSBjaGFyYWN0ZXJzIGZvdW5kIGJlZm9yZSB7IiArIG5hbWUgKyAifSBibG9jayBtYXJrZXIhICBJdCBtdXN0IGJlIG9uIGEgbGluZSBieSBpdHNlbGYuIikKKworICAgICAgICB2YWx1ZSA9IGt3YXJnc1tuYW1lXQorICAgICAgICBpZiBub3QgdmFsdWU6CisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIHZhbHVlID0gdGV4dHdyYXAuaW5kZW50KHJzdHJpcF9saW5lcyh2YWx1ZSksIGluZGVudCkKKyAgICAgICAgYWRkKHZhbHVlKQorICAgICAgICBhZGQoJ1xuJykKKworICAgIHJldHVybiBvdXRwdXQoKVs6LTFdCisKK2RlZiBpbmRlbnRfYWxsX2xpbmVzKHMsIHByZWZpeCk6CisgICAgIiIiCisgICAgUmV0dXJucyAncycsIHdpdGggJ3ByZWZpeCcgcHJlcGVuZGVkIHRvIGFsbCBsaW5lcy4KKworICAgIElmIHRoZSBsYXN0IGxpbmUgaXMgZW1wdHksIHByZWZpeCBpcyBub3QgcHJlcGVuZGVkCisgICAgdG8gaXQuICAoSWYgcyBpcyBibGFuaywgcmV0dXJucyBzIHVuY2hhbmdlZC4pCisKKyAgICAodGV4dHdyYXAuaW5kZW50IG9ubHkgYWRkcyB0byBub24tYmxhbmsgbGluZXMuKQorICAgICIiIgorICAgIHNwbGl0ID0gcy5zcGxpdCgnXG4nKQorICAgIGxhc3QgPSBzcGxpdC5wb3AoKQorICAgIGZpbmFsID0gW10KKyAgICBmb3IgbGluZSBpbiBzcGxpdDoKKyAgICAgICAgZmluYWwuYXBwZW5kKHByZWZpeCkKKyAgICAgICAgZmluYWwuYXBwZW5kKGxpbmUpCisgICAgICAgIGZpbmFsLmFwcGVuZCgnXG4nKQorICAgIGlmIGxhc3Q6CisgICAgICAgIGZpbmFsLmFwcGVuZChwcmVmaXgpCisgICAgICAgIGZpbmFsLmFwcGVuZChsYXN0KQorICAgIHJldHVybiAnJy5qb2luKGZpbmFsKQorCitkZWYgc3VmZml4X2FsbF9saW5lcyhzLCBzdWZmaXgpOgorICAgICIiIgorICAgIFJldHVybnMgJ3MnLCB3aXRoICdzdWZmaXgnIGFwcGVuZGVkIHRvIGFsbCBsaW5lcy4KKworICAgIElmIHRoZSBsYXN0IGxpbmUgaXMgZW1wdHksIHN1ZmZpeCBpcyBub3QgYXBwZW5kZWQKKyAgICB0byBpdC4gIChJZiBzIGlzIGJsYW5rLCByZXR1cm5zIHMgdW5jaGFuZ2VkLikKKyAgICAiIiIKKyAgICBzcGxpdCA9IHMuc3BsaXQoJ1xuJykKKyAgICBsYXN0ID0gc3BsaXQucG9wKCkKKyAgICBmaW5hbCA9IFtdCisgICAgZm9yIGxpbmUgaW4gc3BsaXQ6CisgICAgICAgIGZpbmFsLmFwcGVuZChsaW5lKQorICAgICAgICBmaW5hbC5hcHBlbmQoc3VmZml4KQorICAgICAgICBmaW5hbC5hcHBlbmQoJ1xuJykKKyAgICBpZiBsYXN0OgorICAgICAgICBmaW5hbC5hcHBlbmQobGFzdCkKKyAgICAgICAgZmluYWwuYXBwZW5kKHN1ZmZpeCkKKyAgICByZXR1cm4gJycuam9pbihmaW5hbCkKKworCitkZWYgdmVyc2lvbl9zcGxpdHRlcihzKToKKyAgICAiIiJTcGxpdHMgYSB2ZXJzaW9uIHN0cmluZyBpbnRvIGEgdHVwbGUgb2YgaW50ZWdlcnMuCisKKyAgICBUaGUgZm9sbG93aW5nIEFTQ0lJIGNoYXJhY3RlcnMgYXJlIGFsbG93ZWQsIGFuZCBlbXBsb3kKKyAgICB0aGUgZm9sbG93aW5nIGNvbnZlcnNpb25zOgorICAgICAgICBhIC0+IC0zCisgICAgICAgIGIgLT4gLTIKKyAgICAgICAgYyAtPiAtMQorICAgIChUaGlzIHBlcm1pdHMgUHl0aG9uLXN0eWxlIHZlcnNpb24gc3RyaW5ncyBzdWNoIGFzICIxLjRiMyIuKQorICAgICIiIgorICAgIHZlcnNpb24gPSBbXQorICAgIGFjY3VtdWxhdG9yID0gW10KKyAgICBkZWYgZmx1c2goKToKKyAgICAgICAgaWYgbm90IGFjY3VtdWxhdG9yOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignVW5zdXBwb3J0ZWQgdmVyc2lvbiBzdHJpbmc6ICcgKyByZXByKHMpKQorICAgICAgICB2ZXJzaW9uLmFwcGVuZChpbnQoJycuam9pbihhY2N1bXVsYXRvcikpKQorICAgICAgICBhY2N1bXVsYXRvci5jbGVhcigpCisKKyAgICBmb3IgYyBpbiBzOgorICAgICAgICBpZiBjLmlzZGlnaXQoKToKKyAgICAgICAgICAgIGFjY3VtdWxhdG9yLmFwcGVuZChjKQorICAgICAgICBlbGlmIGMgPT0gJy4nOgorICAgICAgICAgICAgZmx1c2goKQorICAgICAgICBlbGlmIGMgaW4gJ2FiYyc6CisgICAgICAgICAgICBmbHVzaCgpCisgICAgICAgICAgICB2ZXJzaW9uLmFwcGVuZCgnYWJjJy5pbmRleChjKSAtIDMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdJbGxlZ2FsIGNoYXJhY3RlciAnICsgcmVwcihjKSArICcgaW4gdmVyc2lvbiBzdHJpbmcgJyArIHJlcHIocykpCisgICAgZmx1c2goKQorICAgIHJldHVybiB0dXBsZSh2ZXJzaW9uKQorCitkZWYgdmVyc2lvbl9jb21wYXJpdG9yKHZlcnNpb24xLCB2ZXJzaW9uMik6CisgICAgaXRlcmF0b3IgPSBpdGVydG9vbHMuemlwX2xvbmdlc3QodmVyc2lvbl9zcGxpdHRlcih2ZXJzaW9uMSksIHZlcnNpb25fc3BsaXR0ZXIodmVyc2lvbjIpLCBmaWxsdmFsdWU9MCkKKyAgICBmb3IgaSwgKGEsIGIpIGluIGVudW1lcmF0ZShpdGVyYXRvcik6CisgICAgICAgIGlmIGEgPCBiOgorICAgICAgICAgICAgcmV0dXJuIC0xCisgICAgICAgIGlmIGEgPiBiOgorICAgICAgICAgICAgcmV0dXJuIDEKKyAgICByZXR1cm4gMAorCisKK2NsYXNzIENSZW5kZXJEYXRhOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKworICAgICAgICAjIFRoZSBDIHN0YXRlbWVudHMgdG8gZGVjbGFyZSB2YXJpYWJsZXMuCisgICAgICAgICMgU2hvdWxkIGJlIGZ1bGwgbGluZXMgd2l0aCBcbiBlb2wgY2hhcmFjdGVycy4KKyAgICAgICAgc2VsZi5kZWNsYXJhdGlvbnMgPSBbXQorCisgICAgICAgICMgVGhlIEMgc3RhdGVtZW50cyByZXF1aXJlZCB0byBpbml0aWFsaXplIHRoZSB2YXJpYWJsZXMgYmVmb3JlIHRoZSBwYXJzZSBjYWxsLgorICAgICAgICAjIFNob3VsZCBiZSBmdWxsIGxpbmVzIHdpdGggXG4gZW9sIGNoYXJhY3RlcnMuCisgICAgICAgIHNlbGYuaW5pdGlhbGl6ZXJzID0gW10KKworICAgICAgICAjIFRoZSBDIHN0YXRlbWVudHMgbmVlZGVkIHRvIGR5bmFtaWNhbGx5IG1vZGlmeSB0aGUgdmFsdWVzCisgICAgICAgICMgcGFyc2VkIGJ5IHRoZSBwYXJzZSBjYWxsLCBiZWZvcmUgY2FsbGluZyB0aGUgaW1wbC4KKyAgICAgICAgc2VsZi5tb2RpZmljYXRpb25zID0gW10KKworICAgICAgICAjIFRoZSBlbnRyaWVzIGZvciB0aGUgImtleXdvcmRzIiBhcnJheSBmb3IgUHlBcmdfUGFyc2VUdXBsZS4KKyAgICAgICAgIyBTaG91bGQgYmUgaW5kaXZpZHVhbCBzdHJpbmdzIHJlcHJlc2VudGluZyB0aGUgbmFtZXMuCisgICAgICAgIHNlbGYua2V5d29yZHMgPSBbXQorCisgICAgICAgICMgVGhlICJmb3JtYXQgdW5pdHMiIGZvciBQeUFyZ19QYXJzZVR1cGxlLgorICAgICAgICAjIFNob3VsZCBiZSBpbmRpdmlkdWFsIHN0cmluZ3MgdGhhdCB3aWxsIGdldAorICAgICAgICBzZWxmLmZvcm1hdF91bml0cyA9IFtdCisKKyAgICAgICAgIyBUaGUgdmFyYXJncyBhcmd1bWVudHMgZm9yIFB5QXJnX1BhcnNlVHVwbGUuCisgICAgICAgIHNlbGYucGFyc2VfYXJndW1lbnRzID0gW10KKworICAgICAgICAjIFRoZSBwYXJhbWV0ZXIgZGVjbGFyYXRpb25zIGZvciB0aGUgaW1wbCBmdW5jdGlvbi4KKyAgICAgICAgc2VsZi5pbXBsX3BhcmFtZXRlcnMgPSBbXQorCisgICAgICAgICMgVGhlIGFyZ3VtZW50cyB0byB0aGUgaW1wbCBmdW5jdGlvbiBhdCB0aGUgdGltZSBpdCdzIGNhbGxlZC4KKyAgICAgICAgc2VsZi5pbXBsX2FyZ3VtZW50cyA9IFtdCisKKyAgICAgICAgIyBGb3IgcmV0dXJuIGNvbnZlcnRlcnM6IHRoZSBuYW1lIG9mIHRoZSB2YXJpYWJsZSB0aGF0CisgICAgICAgICMgc2hvdWxkIHJlY2VpdmUgdGhlIHZhbHVlIHJldHVybmVkIGJ5IHRoZSBpbXBsLgorICAgICAgICBzZWxmLnJldHVybl92YWx1ZSA9ICJyZXR1cm5fdmFsdWUiCisKKyAgICAgICAgIyBGb3IgcmV0dXJuIGNvbnZlcnRlcnM6IHRoZSBjb2RlIHRvIGNvbnZlcnQgdGhlIHJldHVybgorICAgICAgICAjIHZhbHVlIGZyb20gdGhlIHBhcnNlIGZ1bmN0aW9uLiAgVGhpcyBpcyBhbHNvIHdoZXJlCisgICAgICAgICMgeW91IHNob3VsZCBjaGVjayB0aGUgX3JldHVybl92YWx1ZSBmb3IgZXJyb3JzLCBhbmQKKyAgICAgICAgIyAiZ290byBleGl0IiBpZiB0aGVyZSBhcmUgYW55LgorICAgICAgICBzZWxmLnJldHVybl9jb252ZXJzaW9uID0gW10KKworICAgICAgICAjIFRoZSBDIHN0YXRlbWVudHMgcmVxdWlyZWQgdG8gY2xlYW4gdXAgYWZ0ZXIgdGhlIGltcGwgY2FsbC4KKyAgICAgICAgc2VsZi5jbGVhbnVwID0gW10KKworCitjbGFzcyBGb3JtYXRDb3VudGVyRm9ybWF0dGVyKHN0cmluZy5Gb3JtYXR0ZXIpOgorICAgICIiIgorICAgIFRoaXMgY291bnRzIGhvdyBtYW55IGluc3RhbmNlcyBvZiBlYWNoIGZvcm1hdHRlcgorICAgICJyZXBsYWNlbWVudCBzdHJpbmciIGFwcGVhciBpbiB0aGUgZm9ybWF0IHN0cmluZy4KKworICAgIGUuZy4gYWZ0ZXIgZXZhbHVhdGluZyAic3RyaW5nIHthfSwge2J9LCB7Y30sIHthfSIKKyAgICAgICAgIHRoZSBjb3VudHMgZGljdCB3b3VsZCBub3cgbG9vayBsaWtlCisgICAgICAgICB7J2EnOiAyLCAnYic6IDEsICdjJzogMX0KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuY291bnRzID0gY29sbGVjdGlvbnMuQ291bnRlcigpCisKKyAgICBkZWYgZ2V0X3ZhbHVlKHNlbGYsIGtleSwgYXJncywga3dhcmdzKToKKyAgICAgICAgc2VsZi5jb3VudHNba2V5XSArPSAxCisgICAgICAgIHJldHVybiAnJworCitjbGFzcyBMYW5ndWFnZShtZXRhY2xhc3M9YWJjLkFCQ01ldGEpOgorCisgICAgc3RhcnRfbGluZSA9ICIiCisgICAgYm9keV9wcmVmaXggPSAiIgorICAgIHN0b3BfbGluZSA9ICIiCisgICAgY2hlY2tzdW1fbGluZSA9ICIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZW5hbWUpOgorICAgICAgICBwYXNzCisKKyAgICBAYWJjLmFic3RyYWN0bWV0aG9kCisgICAgZGVmIHJlbmRlcihzZWxmLCBjbGluaWMsIHNpZ25hdHVyZXMpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgcGFyc2VfbGluZShzZWxmLCBsaW5lKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHZhbGlkYXRlKHNlbGYpOgorICAgICAgICBkZWYgYXNzZXJ0X29ubHlfb25lKGF0dHIsICphZGRpdGlvbmFsX2ZpZWxkcyk6CisgICAgICAgICAgICAiIiIKKyAgICAgICAgICAgIEVuc3VyZXMgdGhhdCB0aGUgc3RyaW5nIGZvdW5kIGF0IGdldGF0dHIoc2VsZiwgYXR0cikKKyAgICAgICAgICAgIGNvbnRhaW5zIGV4YWN0bHkgb25lIGZvcm1hdHRlciByZXBsYWNlbWVudCBzdHJpbmcgZm9yCisgICAgICAgICAgICBlYWNoIHZhbGlkIGZpZWxkLiAgVGhlIGxpc3Qgb2YgdmFsaWQgZmllbGRzIGlzCisgICAgICAgICAgICBbJ2RzbF9uYW1lJ10gZXh0ZW5kZWQgYnkgYWRkaXRpb25hbF9maWVsZHMuCisKKyAgICAgICAgICAgIGUuZy4KKyAgICAgICAgICAgICAgICBzZWxmLmZtdCA9ICJ7ZHNsX25hbWV9IHthfSB7Yn0iCisKKyAgICAgICAgICAgICAgICAjIHRoaXMgcGFzc2VzCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfb25seV9vbmUoJ2ZtdCcsICdhJywgJ2InKQorCisgICAgICAgICAgICAgICAgIyB0aGlzIGZhaWxzLCB0aGUgZm9ybWF0IHN0cmluZyBoYXMgYSB7Yn0gaW4gaXQKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF9vbmx5X29uZSgnZm10JywgJ2EnKQorCisgICAgICAgICAgICAgICAgIyB0aGlzIGZhaWxzLCB0aGUgZm9ybWF0IHN0cmluZyBkb2Vzbid0IGhhdmUgYSB7Y30gaW4gaXQKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF9vbmx5X29uZSgnZm10JywgJ2EnLCAnYicsICdjJykKKworICAgICAgICAgICAgICAgICMgdGhpcyBmYWlscywgdGhlIGZvcm1hdCBzdHJpbmcgaGFzIHR3byB7YX1zIGluIGl0LAorICAgICAgICAgICAgICAgICMgaXQgbXVzdCBjb250YWluIGV4YWN0bHkgb25lCisgICAgICAgICAgICAgICAgc2VsZi5mbXQyID0gJ3tkc2xfbmFtZX0ge2F9IHthfScKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF9vbmx5X29uZSgnZm10MicsICdhJykKKworICAgICAgICAgICAgIiIiCisgICAgICAgICAgICBmaWVsZHMgPSBbJ2RzbF9uYW1lJ10KKyAgICAgICAgICAgIGZpZWxkcy5leHRlbmQoYWRkaXRpb25hbF9maWVsZHMpCisgICAgICAgICAgICBsaW5lID0gZ2V0YXR0cihzZWxmLCBhdHRyKQorICAgICAgICAgICAgZmNmID0gRm9ybWF0Q291bnRlckZvcm1hdHRlcigpCisgICAgICAgICAgICBmY2YuZm9ybWF0KGxpbmUpCisgICAgICAgICAgICBkZWYgbG9jYWxfZmFpbChzaG91bGRfYmVfdGhlcmVfYnV0X2lzbnQpOgorICAgICAgICAgICAgICAgIGlmIHNob3VsZF9iZV90aGVyZV9idXRfaXNudDoKKyAgICAgICAgICAgICAgICAgICAgZmFpbCgie30ge30gbXVzdCBjb250YWluIHt7e319fSBleGFjdGx5IG9uY2UhIi5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgYXR0ciwgbmFtZSkpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgZmFpbCgie30ge30gbXVzdCBub3QgY29udGFpbiB7e3t9fX0hIi5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgYXR0ciwgbmFtZSkpCisKKyAgICAgICAgICAgIGZvciBuYW1lLCBjb3VudCBpbiBmY2YuY291bnRzLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgaWYgbmFtZSBpbiBmaWVsZHM6CisgICAgICAgICAgICAgICAgICAgIGlmIGNvdW50ID4gMToKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsX2ZhaWwoVHJ1ZSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBsb2NhbF9mYWlsKEZhbHNlKQorICAgICAgICAgICAgZm9yIG5hbWUgaW4gZmllbGRzOgorICAgICAgICAgICAgICAgIGlmIGZjZi5jb3VudHMuZ2V0KG5hbWUpICE9IDE6CisgICAgICAgICAgICAgICAgICAgIGxvY2FsX2ZhaWwoVHJ1ZSkKKworICAgICAgICBhc3NlcnRfb25seV9vbmUoJ3N0YXJ0X2xpbmUnKQorICAgICAgICBhc3NlcnRfb25seV9vbmUoJ3N0b3BfbGluZScpCisKKyAgICAgICAgZmllbGQgPSAiYXJndW1lbnRzIiBpZiAie2FyZ3VtZW50c30iIGluIHNlbGYuY2hlY2tzdW1fbGluZSBlbHNlICJjaGVja3N1bSIKKyAgICAgICAgYXNzZXJ0X29ubHlfb25lKCdjaGVja3N1bV9saW5lJywgZmllbGQpCisKKworCitjbGFzcyBQeXRob25MYW5ndWFnZShMYW5ndWFnZSk6CisKKyAgICBsYW5ndWFnZSAgICAgID0gJ1B5dGhvbicKKyAgICBzdGFydF9saW5lICAgID0gIiMvKlt7ZHNsX25hbWV9IGlucHV0XSIKKyAgICBib2R5X3ByZWZpeCAgID0gIiMiCisgICAgc3RvcF9saW5lICAgICA9ICIjW3tkc2xfbmFtZX0gc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8iCisgICAgY2hlY2tzdW1fbGluZSA9ICIjLypbe2RzbF9uYW1lfSBlbmQgZ2VuZXJhdGVkIGNvZGU6IHthcmd1bWVudHN9XSovIgorCisKK2RlZiBwZXJtdXRlX2xlZnRfb3B0aW9uX2dyb3VwcyhsKToKKyAgICAiIiIKKyAgICBHaXZlbiBbMSwgMiwgM10sIHNob3VsZCB5aWVsZDoKKyAgICAgICAoKQorICAgICAgICgzLCkKKyAgICAgICAoMiwgMykKKyAgICAgICAoMSwgMiwgMykKKyAgICAiIiIKKyAgICB5aWVsZCB0dXBsZSgpCisgICAgYWNjdW11bGF0b3IgPSBbXQorICAgIGZvciBncm91cCBpbiByZXZlcnNlZChsKToKKyAgICAgICAgYWNjdW11bGF0b3IgPSBsaXN0KGdyb3VwKSArIGFjY3VtdWxhdG9yCisgICAgICAgIHlpZWxkIHR1cGxlKGFjY3VtdWxhdG9yKQorCisKK2RlZiBwZXJtdXRlX3JpZ2h0X29wdGlvbl9ncm91cHMobCk6CisgICAgIiIiCisgICAgR2l2ZW4gWzEsIDIsIDNdLCBzaG91bGQgeWllbGQ6CisgICAgICAoKQorICAgICAgKDEsKQorICAgICAgKDEsIDIpCisgICAgICAoMSwgMiwgMykKKyAgICAiIiIKKyAgICB5aWVsZCB0dXBsZSgpCisgICAgYWNjdW11bGF0b3IgPSBbXQorICAgIGZvciBncm91cCBpbiBsOgorICAgICAgICBhY2N1bXVsYXRvci5leHRlbmQoZ3JvdXApCisgICAgICAgIHlpZWxkIHR1cGxlKGFjY3VtdWxhdG9yKQorCisKK2RlZiBwZXJtdXRlX29wdGlvbmFsX2dyb3VwcyhsZWZ0LCByZXF1aXJlZCwgcmlnaHQpOgorICAgICIiIgorICAgIEdlbmVyYXRvciBmdW5jdGlvbiB0aGF0IGNvbXB1dGVzIHRoZSBzZXQgb2YgYWNjZXB0YWJsZQorICAgIGFyZ3VtZW50IGxpc3RzIGZvciB0aGUgcHJvdmlkZWQgaXRlcmFibGVzIG9mCisgICAgYXJndW1lbnQgZ3JvdXBzLiAgKEFjdHVhbGx5IGl0IGdlbmVyYXRlcyBhIHR1cGxlIG9mIHR1cGxlcy4pCisKKyAgICBBbGdvcml0aG06IHByZWZlciBsZWZ0IG9wdGlvbnMgb3ZlciByaWdodCBvcHRpb25zLgorCisgICAgSWYgcmVxdWlyZWQgaXMgZW1wdHksIGxlZnQgbXVzdCBhbHNvIGJlIGVtcHR5LgorICAgICIiIgorICAgIHJlcXVpcmVkID0gdHVwbGUocmVxdWlyZWQpCisgICAgcmVzdWx0ID0gW10KKworICAgIGlmIG5vdCByZXF1aXJlZDoKKyAgICAgICAgYXNzZXJ0IG5vdCBsZWZ0CisKKyAgICBhY2N1bXVsYXRvciA9IFtdCisgICAgY291bnRzID0gc2V0KCkKKyAgICBmb3IgciBpbiBwZXJtdXRlX3JpZ2h0X29wdGlvbl9ncm91cHMocmlnaHQpOgorICAgICAgICBmb3IgbCBpbiBwZXJtdXRlX2xlZnRfb3B0aW9uX2dyb3VwcyhsZWZ0KToKKyAgICAgICAgICAgIHQgPSBsICsgcmVxdWlyZWQgKyByCisgICAgICAgICAgICBpZiBsZW4odCkgaW4gY291bnRzOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBjb3VudHMuYWRkKGxlbih0KSkKKyAgICAgICAgICAgIGFjY3VtdWxhdG9yLmFwcGVuZCh0KQorCisgICAgYWNjdW11bGF0b3Iuc29ydChrZXk9bGVuKQorICAgIHJldHVybiB0dXBsZShhY2N1bXVsYXRvcikKKworCitkZWYgc3RyaXBfbGVhZGluZ19hbmRfdHJhaWxpbmdfYmxhbmtfbGluZXMocyk6CisgICAgbGluZXMgPSBzLnJzdHJpcCgpLnNwbGl0KCdcbicpCisgICAgd2hpbGUgbGluZXM6CisgICAgICAgIGxpbmUgPSBsaW5lc1swXQorICAgICAgICBpZiBsaW5lLnN0cmlwKCk6CisgICAgICAgICAgICBicmVhaworICAgICAgICBkZWwgbGluZXNbMF0KKyAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQorCitAZnVuY3Rvb2xzLmxydV9jYWNoZSgpCitkZWYgbm9ybWFsaXplX3NuaXBwZXQocywgKiwgaW5kZW50PTApOgorICAgICIiIgorICAgIFJlZm9ybWF0cyBzOgorICAgICAgICAqIHJlbW92ZXMgbGVhZGluZyBhbmQgdHJhaWxpbmcgYmxhbmsgbGluZXMKKyAgICAgICAgKiBlbnN1cmVzIHRoYXQgaXQgZG9lcyBub3QgZW5kIHdpdGggYSBuZXdsaW5lCisgICAgICAgICogZGVkZW50cyBzbyB0aGUgZmlyc3Qgbm9ud2hpdGUgY2hhcmFjdGVyIG9uIGFueSBsaW5lIGlzIGF0IGNvbHVtbiAiaW5kZW50IgorICAgICIiIgorICAgIHMgPSBzdHJpcF9sZWFkaW5nX2FuZF90cmFpbGluZ19ibGFua19saW5lcyhzKQorICAgIHMgPSB0ZXh0d3JhcC5kZWRlbnQocykKKyAgICBpZiBpbmRlbnQ6CisgICAgICAgIHMgPSB0ZXh0d3JhcC5pbmRlbnQocywgJyAnICogaW5kZW50KQorICAgIHJldHVybiBzCisKKworY2xhc3MgQ0xhbmd1YWdlKExhbmd1YWdlKToKKworICAgIGJvZHlfcHJlZml4ICAgPSAiIyIKKyAgICBsYW5ndWFnZSAgICAgID0gJ0MnCisgICAgc3RhcnRfbGluZSAgICA9ICIvKlt7ZHNsX25hbWV9IGlucHV0XSIKKyAgICBib2R5X3ByZWZpeCAgID0gIiIKKyAgICBzdG9wX2xpbmUgICAgID0gIlt7ZHNsX25hbWV9IHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovIgorICAgIGNoZWNrc3VtX2xpbmUgPSAiLypbe2RzbF9uYW1lfSBlbmQgZ2VuZXJhdGVkIGNvZGU6IHthcmd1bWVudHN9XSovIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVuYW1lKToKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhmaWxlbmFtZSkKKyAgICAgICAgc2VsZi5jcHAgPSBjcHAuTW9uaXRvcihmaWxlbmFtZSkKKyAgICAgICAgc2VsZi5jcHAuZmFpbCA9IGZhaWwKKworICAgIGRlZiBwYXJzZV9saW5lKHNlbGYsIGxpbmUpOgorICAgICAgICBzZWxmLmNwcC53cml0ZWxpbmUobGluZSkKKworICAgIGRlZiByZW5kZXIoc2VsZiwgY2xpbmljLCBzaWduYXR1cmVzKToKKyAgICAgICAgZnVuY3Rpb24gPSBOb25lCisgICAgICAgIGZvciBvIGluIHNpZ25hdHVyZXM6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG8sIEZ1bmN0aW9uKToKKyAgICAgICAgICAgICAgICBpZiBmdW5jdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgZmFpbCgiWW91IG1heSBzcGVjaWZ5IGF0IG1vc3Qgb25lIGZ1bmN0aW9uIHBlciBibG9jay5cbkZvdW5kIGEgYmxvY2sgY29udGFpbmluZyBhdCBsZWFzdCB0d286XG5cdCIgKyByZXByKGZ1bmN0aW9uKSArICIgYW5kICIgKyByZXByKG8pKQorICAgICAgICAgICAgICAgIGZ1bmN0aW9uID0gbworICAgICAgICByZXR1cm4gc2VsZi5yZW5kZXJfZnVuY3Rpb24oY2xpbmljLCBmdW5jdGlvbikKKworICAgIGRlZiBkb2NzdHJpbmdfZm9yX2Nfc3RyaW5nKHNlbGYsIGYpOgorICAgICAgICB0ZXh0LCBhZGQsIG91dHB1dCA9IF90ZXh0X2FjY3VtdWxhdG9yKCkKKyAgICAgICAgIyB0dXJuIGRvY3N0cmluZyBpbnRvIGEgcHJvcGVybHkgcXVvdGVkIEMgc3RyaW5nCisgICAgICAgIGZvciBsaW5lIGluIGYuZG9jc3RyaW5nLnNwbGl0KCdcbicpOgorICAgICAgICAgICAgYWRkKCciJykKKyAgICAgICAgICAgIGFkZChxdW90ZWRfZm9yX2Nfc3RyaW5nKGxpbmUpKQorICAgICAgICAgICAgYWRkKCdcXG4iXG4nKQorCisgICAgICAgIHRleHQucG9wKCkKKyAgICAgICAgYWRkKCciJykKKyAgICAgICAgcmV0dXJuICcnLmpvaW4odGV4dCkKKworICAgIGRlZiBvdXRwdXRfdGVtcGxhdGVzKHNlbGYsIGYpOgorICAgICAgICBwYXJhbWV0ZXJzID0gbGlzdChmLnBhcmFtZXRlcnMudmFsdWVzKCkpCisgICAgICAgIGFzc2VydCBwYXJhbWV0ZXJzCisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHBhcmFtZXRlcnNbMF0uY29udmVydGVyLCBzZWxmX2NvbnZlcnRlcikKKyAgICAgICAgZGVsIHBhcmFtZXRlcnNbMF0KKyAgICAgICAgY29udmVydGVycyA9IFtwLmNvbnZlcnRlciBmb3IgcCBpbiBwYXJhbWV0ZXJzXQorCisgICAgICAgIGhhc19vcHRpb25fZ3JvdXBzID0gcGFyYW1ldGVycyBhbmQgKHBhcmFtZXRlcnNbMF0uZ3JvdXAgb3IgcGFyYW1ldGVyc1stMV0uZ3JvdXApCisgICAgICAgIGRlZmF1bHRfcmV0dXJuX2NvbnZlcnRlciA9IChub3QgZi5yZXR1cm5fY29udmVydGVyIG9yCisgICAgICAgICAgICBmLnJldHVybl9jb252ZXJ0ZXIudHlwZSA9PSAnUHlPYmplY3QgKicpCisKKyAgICAgICAgcG9zaXRpb25hbCA9IHBhcmFtZXRlcnMgYW5kIChwYXJhbWV0ZXJzWy0xXS5raW5kID09IGluc3BlY3QuUGFyYW1ldGVyLlBPU0lUSU9OQUxfT05MWSkKKyAgICAgICAgYWxsX2JvcmluZ19vYmplY3RzID0gRmFsc2UgIyB5ZXMsIHRoaXMgd2lsbCBiZSBmYWxzZSBpZiB0aGVyZSBhcmUgMCBwYXJhbWV0ZXJzLCBpdCdzIGZpbmUKKyAgICAgICAgZmlyc3Rfb3B0aW9uYWwgPSBsZW4ocGFyYW1ldGVycykKKyAgICAgICAgZm9yIGksIHAgaW4gZW51bWVyYXRlKHBhcmFtZXRlcnMpOgorICAgICAgICAgICAgYyA9IHAuY29udmVydGVyCisgICAgICAgICAgICBpZiB0eXBlKGMpICE9IG9iamVjdF9jb252ZXJ0ZXI6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGlmIGMuZm9ybWF0X3VuaXQgIT0gJ08nOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBpZiBwLmRlZmF1bHQgaXMgbm90IHVuc3BlY2lmaWVkOgorICAgICAgICAgICAgICAgIGZpcnN0X29wdGlvbmFsID0gbWluKGZpcnN0X29wdGlvbmFsLCBpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYWxsX2JvcmluZ19vYmplY3RzID0gVHJ1ZQorCisgICAgICAgIG5ld19vcl9pbml0ID0gZi5raW5kIGluIChNRVRIT0RfTkVXLCBNRVRIT0RfSU5JVCkKKworICAgICAgICBtZXRoX28gPSAobGVuKHBhcmFtZXRlcnMpID09IDEgYW5kCisgICAgICAgICAgICAgIHBhcmFtZXRlcnNbMF0ua2luZCA9PSBpbnNwZWN0LlBhcmFtZXRlci5QT1NJVElPTkFMX09OTFkgYW5kCisgICAgICAgICAgICAgIG5vdCBjb252ZXJ0ZXJzWzBdLmlzX29wdGlvbmFsKCkgYW5kCisgICAgICAgICAgICAgIGlzaW5zdGFuY2UoY29udmVydGVyc1swXSwgb2JqZWN0X2NvbnZlcnRlcikgYW5kCisgICAgICAgICAgICAgIGNvbnZlcnRlcnNbMF0uZm9ybWF0X3VuaXQgPT0gJ08nIGFuZAorICAgICAgICAgICAgICBub3QgbmV3X29yX2luaXQpCisKKyAgICAgICAgIyB3ZSBoYXZlIHRvIHNldCB0aGVzZSB0aGluZ3MgYmVmb3JlIHdlJ3JlIGRvbmU6CisgICAgICAgICMKKyAgICAgICAgIyBkb2NzdHJpbmdfcHJvdG90eXBlCisgICAgICAgICMgZG9jc3RyaW5nX2RlZmluaXRpb24KKyAgICAgICAgIyBpbXBsX3Byb3RvdHlwZQorICAgICAgICAjIG1ldGhvZGRlZl9kZWZpbmUKKyAgICAgICAgIyBwYXJzZXJfcHJvdG90eXBlCisgICAgICAgICMgcGFyc2VyX2RlZmluaXRpb24KKyAgICAgICAgIyBpbXBsX2RlZmluaXRpb24KKyAgICAgICAgIyBjcHBfaWYKKyAgICAgICAgIyBjcHBfZW5kaWYKKyAgICAgICAgIyBtZXRob2RkZWZfaWZuZGVmCisKKyAgICAgICAgcmV0dXJuX3ZhbHVlX2RlY2xhcmF0aW9uID0gIlB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOyIKKworICAgICAgICBtZXRob2RkZWZfZGVmaW5lID0gbm9ybWFsaXplX3NuaXBwZXQoIiIiCisgICAgICAgICAgICAjZGVmaW5lIHttZXRob2RkZWZfbmFtZX0gICAgXFwKKyAgICAgICAgICAgICAgICB7eyJ7bmFtZX0iLCAoUHlDRnVuY3Rpb24pe2NfYmFzZW5hbWV9LCB7bWV0aG9kZGVmX2ZsYWdzfSwge2NfYmFzZW5hbWV9X19kb2NfX319LAorICAgICAgICAgICAgIiIiKQorICAgICAgICBpZiBuZXdfb3JfaW5pdCBhbmQgbm90IGYuZG9jc3RyaW5nOgorICAgICAgICAgICAgZG9jc3RyaW5nX3Byb3RvdHlwZSA9IGRvY3N0cmluZ19kZWZpbml0aW9uID0gJycKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGRvY3N0cmluZ19wcm90b3R5cGUgPSBub3JtYWxpemVfc25pcHBldCgiIiIKKyAgICAgICAgICAgICAgICBQeURvY19WQVIoe2NfYmFzZW5hbWV9X19kb2NfXyk7CisgICAgICAgICAgICAgICAgIiIiKQorICAgICAgICAgICAgZG9jc3RyaW5nX2RlZmluaXRpb24gPSBub3JtYWxpemVfc25pcHBldCgiIiIKKyAgICAgICAgICAgICAgICBQeURvY19TVFJWQVIoe2NfYmFzZW5hbWV9X19kb2NfXywKKyAgICAgICAgICAgICAgICB7ZG9jc3RyaW5nfSk7CisgICAgICAgICAgICAgICAgIiIiKQorICAgICAgICBpbXBsX2RlZmluaXRpb24gPSBub3JtYWxpemVfc25pcHBldCgiIiIKKyAgICAgICAgICAgIHN0YXRpYyB7aW1wbF9yZXR1cm5fdHlwZX0KKyAgICAgICAgICAgIHtjX2Jhc2VuYW1lfV9pbXBsKHtpbXBsX3BhcmFtZXRlcnN9KQorICAgICAgICAgICAgIiIiKQorICAgICAgICBpbXBsX3Byb3RvdHlwZSA9IHBhcnNlcl9wcm90b3R5cGUgPSBwYXJzZXJfZGVmaW5pdGlvbiA9IE5vbmUKKworICAgICAgICBwYXJzZXJfcHJvdG90eXBlX2tleXdvcmQgPSBub3JtYWxpemVfc25pcHBldCgiIiIKKyAgICAgICAgICAgIHN0YXRpYyBQeU9iamVjdCAqCisgICAgICAgICAgICB7Y19iYXNlbmFtZX0oe3NlbGZfdHlwZX17c2VsZl9uYW1lfSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCisgICAgICAgICAgICAiIiIpCisKKyAgICAgICAgcGFyc2VyX3Byb3RvdHlwZV92YXJhcmdzID0gbm9ybWFsaXplX3NuaXBwZXQoIiIiCisgICAgICAgICAgICBzdGF0aWMgUHlPYmplY3QgKgorICAgICAgICAgICAge2NfYmFzZW5hbWV9KHtzZWxmX3R5cGV9e3NlbGZfbmFtZX0sIFB5T2JqZWN0ICphcmdzKQorICAgICAgICAgICAgIiIiKQorCisgICAgICAgICMgcGFyc2VyX2JvZHlfZmllbGRzIHJlbWVtYmVycyB0aGUgZmllbGRzIHBhc3NlZCBpbiB0byB0aGUKKyAgICAgICAgIyBwcmV2aW91cyBjYWxsIHRvIHBhcnNlcl9ib2R5LiB0aGlzIGlzIHVzZWQgZm9yIGFuIGF3ZnVsIGhhY2suCisgICAgICAgIHBhcnNlcl9ib2R5X2ZpZWxkcyA9ICgpCisgICAgICAgIGRlZiBwYXJzZXJfYm9keShwcm90b3R5cGUsICpmaWVsZHMpOgorICAgICAgICAgICAgbm9ubG9jYWwgcGFyc2VyX2JvZHlfZmllbGRzCisgICAgICAgICAgICBhZGQsIG91dHB1dCA9IHRleHRfYWNjdW11bGF0b3IoKQorICAgICAgICAgICAgYWRkKHByb3RvdHlwZSkKKyAgICAgICAgICAgIHBhcnNlcl9ib2R5X2ZpZWxkcyA9IGZpZWxkcworCisgICAgICAgICAgICBmaWVsZHMgPSBsaXN0KGZpZWxkcykKKyAgICAgICAgICAgIGZpZWxkcy5pbnNlcnQoMCwgbm9ybWFsaXplX3NuaXBwZXQoIiIiCisgICAgICAgICAgICAgICAge3sKKyAgICAgICAgICAgICAgICAgICAge3JldHVybl92YWx1ZV9kZWNsYXJhdGlvbn0KKyAgICAgICAgICAgICAgICAgICAge2RlY2xhcmF0aW9uc30KKyAgICAgICAgICAgICAgICAgICAge2luaXRpYWxpemVyc30KKyAgICAgICAgICAgICAgICAiIiIpICsgIlxuIikKKyAgICAgICAgICAgICMganVzdCBpbWFnaW5lLS15b3VyIGNvZGUgaXMgaGVyZSBpbiB0aGUgbWlkZGxlCisgICAgICAgICAgICBmaWVsZHMuYXBwZW5kKG5vcm1hbGl6ZV9zbmlwcGV0KCIiIgorICAgICAgICAgICAgICAgICAgICB7bW9kaWZpY2F0aW9uc30KKyAgICAgICAgICAgICAgICAgICAge3JldHVybl92YWx1ZX0gPSB7Y19iYXNlbmFtZX1faW1wbCh7aW1wbF9hcmd1bWVudHN9KTsKKyAgICAgICAgICAgICAgICAgICAge3JldHVybl9jb252ZXJzaW9ufQorCisgICAgICAgICAgICAgICAge2V4aXRfbGFiZWx9CisgICAgICAgICAgICAgICAgICAgIHtjbGVhbnVwfQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworICAgICAgICAgICAgICAgIH19CisgICAgICAgICAgICAgICAgIiIiKSkKKyAgICAgICAgICAgIGZvciBmaWVsZCBpbiBmaWVsZHM6CisgICAgICAgICAgICAgICAgYWRkKCdcbicpCisgICAgICAgICAgICAgICAgYWRkKGZpZWxkKQorICAgICAgICAgICAgcmV0dXJuIG91dHB1dCgpCisKKyAgICAgICAgZGVmIGluc2VydF9rZXl3b3JkcyhzKToKKyAgICAgICAgICAgIHJldHVybiBsaW5lYXJfZm9ybWF0KHMsIGRlY2xhcmF0aW9ucz0ic3RhdGljIGNoYXIgKl9rZXl3b3Jkc1tdID0ge3t7a2V5d29yZHN9LCBOVUxMfX07XG57ZGVjbGFyYXRpb25zfSIpCisKKyAgICAgICAgaWYgbm90IHBhcmFtZXRlcnM6CisgICAgICAgICAgICAjIG5vIHBhcmFtZXRlcnMsIE1FVEhfTk9BUkdTCisKKyAgICAgICAgICAgIGZsYWdzID0gIk1FVEhfTk9BUkdTIgorCisgICAgICAgICAgICBwYXJzZXJfcHJvdG90eXBlID0gbm9ybWFsaXplX3NuaXBwZXQoIiIiCisgICAgICAgICAgICAgICAgc3RhdGljIFB5T2JqZWN0ICoKKyAgICAgICAgICAgICAgICB7Y19iYXNlbmFtZX0oe3NlbGZfdHlwZX17c2VsZl9uYW1lfSwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKKyAgICAgICAgICAgICAgICAiIiIpCisgICAgICAgICAgICBwYXJzZXJfZGVmaW5pdGlvbiA9IHBhcnNlcl9wcm90b3R5cGUKKworICAgICAgICAgICAgaWYgZGVmYXVsdF9yZXR1cm5fY29udmVydGVyOgorICAgICAgICAgICAgICAgIHBhcnNlcl9kZWZpbml0aW9uID0gcGFyc2VyX3Byb3RvdHlwZSArICdcbicgKyBub3JtYWxpemVfc25pcHBldCgiIiIKKyAgICAgICAgICAgICAgICAgICAge3sKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7Y19iYXNlbmFtZX1faW1wbCh7aW1wbF9hcmd1bWVudHN9KTsKKyAgICAgICAgICAgICAgICAgICAgfX0KKyAgICAgICAgICAgICAgICAgICAgIiIiKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwYXJzZXJfZGVmaW5pdGlvbiA9IHBhcnNlcl9ib2R5KHBhcnNlcl9wcm90b3R5cGUpCisKKyAgICAgICAgZWxpZiBtZXRoX286CisgICAgICAgICAgICBmbGFncyA9ICJNRVRIX08iCisKKyAgICAgICAgICAgIG1ldGhfb19wcm90b3R5cGUgPSBub3JtYWxpemVfc25pcHBldCgiIiIKKyAgICAgICAgICAgICAgICBzdGF0aWMgUHlPYmplY3QgKgorICAgICAgICAgICAgICAgIHtjX2Jhc2VuYW1lfSh7aW1wbF9wYXJhbWV0ZXJzfSkKKyAgICAgICAgICAgICAgICAiIiIpCisKKyAgICAgICAgICAgIGlmIGRlZmF1bHRfcmV0dXJuX2NvbnZlcnRlcjoKKyAgICAgICAgICAgICAgICAjIG1hcHMgcGVyZmVjdGx5IHRvIE1FVEhfTywgZG9lc24ndCBuZWVkIGEgcmV0dXJuIGNvbnZlcnRlci4KKyAgICAgICAgICAgICAgICAjIHNvIHdlIHNraXAgbWFraW5nIGEgcGFyc2UgZnVuY3Rpb24KKyAgICAgICAgICAgICAgICAjIGFuZCBjYWxsIGRpcmVjdGx5IGludG8gdGhlIGltcGwgZnVuY3Rpb24uCisgICAgICAgICAgICAgICAgaW1wbF9wcm90b3R5cGUgPSBwYXJzZXJfcHJvdG90eXBlID0gcGFyc2VyX2RlZmluaXRpb24gPSAnJworICAgICAgICAgICAgICAgIGltcGxfZGVmaW5pdGlvbiA9IG1ldGhfb19wcm90b3R5cGUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBTTElHSFQgSEFDSworICAgICAgICAgICAgICAgICMgdXNlIGltcGxfcGFyYW1ldGVycyBmb3IgdGhlIHBhcnNlciBoZXJlIQorICAgICAgICAgICAgICAgIHBhcnNlcl9wcm90b3R5cGUgPSBtZXRoX29fcHJvdG90eXBlCisgICAgICAgICAgICAgICAgcGFyc2VyX2RlZmluaXRpb24gPSBwYXJzZXJfYm9keShwYXJzZXJfcHJvdG90eXBlKQorCisgICAgICAgIGVsaWYgaGFzX29wdGlvbl9ncm91cHM6CisgICAgICAgICAgICAjIHBvc2l0aW9uYWwgcGFyYW1ldGVycyB3aXRoIG9wdGlvbiBncm91cHMKKyAgICAgICAgICAgICMgKHdlIGhhdmUgdG8gZ2VuZXJhdGUgbG90cyBvZiBQeUFyZ19QYXJzZVR1cGxlIGNhbGxzCisgICAgICAgICAgICAjICBpbiBhIGJpZyBzd2l0Y2ggc3RhdGVtZW50KQorCisgICAgICAgICAgICBmbGFncyA9ICJNRVRIX1ZBUkFSR1MiCisgICAgICAgICAgICBwYXJzZXJfcHJvdG90eXBlID0gcGFyc2VyX3Byb3RvdHlwZV92YXJhcmdzCisKKyAgICAgICAgICAgIHBhcnNlcl9kZWZpbml0aW9uID0gcGFyc2VyX2JvZHkocGFyc2VyX3Byb3RvdHlwZSwgJyAgICB7b3B0aW9uX2dyb3VwX3BhcnNpbmd9JykKKworICAgICAgICBlbGlmIHBvc2l0aW9uYWwgYW5kIGFsbF9ib3Jpbmdfb2JqZWN0czoKKyAgICAgICAgICAgICMgcG9zaXRpb25hbC1vbmx5LCBidXQgbm8gb3B0aW9uIGdyb3VwcywKKyAgICAgICAgICAgICMgYW5kIG5vdGhpbmcgYnV0IG5vcm1hbCBvYmplY3RzOgorICAgICAgICAgICAgIyBQeUFyZ19VbnBhY2tUdXBsZSEKKworICAgICAgICAgICAgZmxhZ3MgPSAiTUVUSF9WQVJBUkdTIgorICAgICAgICAgICAgcGFyc2VyX3Byb3RvdHlwZSA9IHBhcnNlcl9wcm90b3R5cGVfdmFyYXJncworCisgICAgICAgICAgICBwYXJzZXJfZGVmaW5pdGlvbiA9IHBhcnNlcl9ib2R5KHBhcnNlcl9wcm90b3R5cGUsIG5vcm1hbGl6ZV9zbmlwcGV0KCIiIgorICAgICAgICAgICAgICAgIGlmICghUHlBcmdfVW5wYWNrVHVwbGUoYXJncywgIntuYW1lfSIsCisgICAgICAgICAgICAgICAgICAgIHt1bnBhY2tfbWlufSwge3VucGFja19tYXh9LAorICAgICAgICAgICAgICAgICAgICB7cGFyc2VfYXJndW1lbnRzfSkpCisgICAgICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgICAgICAgICAiIiIsIGluZGVudD00KSkKKworICAgICAgICBlbGlmIHBvc2l0aW9uYWw6CisgICAgICAgICAgICAjIHBvc2l0aW9uYWwtb25seSwgYnV0IG5vIG9wdGlvbiBncm91cHMKKyAgICAgICAgICAgICMgd2Ugb25seSBuZWVkIG9uZSBjYWxsIHRvIFB5QXJnX1BhcnNlVHVwbGUKKworICAgICAgICAgICAgZmxhZ3MgPSAiTUVUSF9WQVJBUkdTIgorICAgICAgICAgICAgcGFyc2VyX3Byb3RvdHlwZSA9IHBhcnNlcl9wcm90b3R5cGVfdmFyYXJncworCisgICAgICAgICAgICBwYXJzZXJfZGVmaW5pdGlvbiA9IHBhcnNlcl9ib2R5KHBhcnNlcl9wcm90b3R5cGUsIG5vcm1hbGl6ZV9zbmlwcGV0KCIiIgorICAgICAgICAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAgICAgICAgICAgICAie2Zvcm1hdF91bml0c306e25hbWV9IiwKKyAgICAgICAgICAgICAgICAgICAge3BhcnNlX2FyZ3VtZW50c30pKQorICAgICAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgICAgICAgICAgIiIiLCBpbmRlbnQ9NCkpCisKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgcG9zaXRpb25hbC1vci1rZXl3b3JkIGFyZ3VtZW50cworICAgICAgICAgICAgZmxhZ3MgPSAiTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMiCisKKyAgICAgICAgICAgIHBhcnNlcl9wcm90b3R5cGUgPSBwYXJzZXJfcHJvdG90eXBlX2tleXdvcmQKKworICAgICAgICAgICAgYm9keSA9IG5vcm1hbGl6ZV9zbmlwcGV0KCIiIgorICAgICAgICAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywKKyAgICAgICAgICAgICAgICAgICAgIntmb3JtYXRfdW5pdHN9OntuYW1lfSIsIF9rZXl3b3JkcywKKyAgICAgICAgICAgICAgICAgICAge3BhcnNlX2FyZ3VtZW50c30pKQorICAgICAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgICAgICAiIiIsIGluZGVudD00KQorICAgICAgICAgICAgcGFyc2VyX2RlZmluaXRpb24gPSBwYXJzZXJfYm9keShwYXJzZXJfcHJvdG90eXBlLCBub3JtYWxpemVfc25pcHBldCgiIiIKKyAgICAgICAgICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsCisgICAgICAgICAgICAgICAgICAgICJ7Zm9ybWF0X3VuaXRzfTp7bmFtZX0iLCBfa2V5d29yZHMsCisgICAgICAgICAgICAgICAgICAgIHtwYXJzZV9hcmd1bWVudHN9KSkKKyAgICAgICAgICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICAgICAgICAgICIiIiwgaW5kZW50PTQpKQorICAgICAgICAgICAgcGFyc2VyX2RlZmluaXRpb24gPSBpbnNlcnRfa2V5d29yZHMocGFyc2VyX2RlZmluaXRpb24pCisKKworICAgICAgICBpZiBuZXdfb3JfaW5pdDoKKyAgICAgICAgICAgIG1ldGhvZGRlZl9kZWZpbmUgPSAnJworCisgICAgICAgICAgICBpZiBmLmtpbmQgPT0gTUVUSE9EX05FVzoKKyAgICAgICAgICAgICAgICBwYXJzZXJfcHJvdG90eXBlID0gcGFyc2VyX3Byb3RvdHlwZV9rZXl3b3JkCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybl92YWx1ZV9kZWNsYXJhdGlvbiA9ICJpbnQgcmV0dXJuX3ZhbHVlID0gLTE7IgorICAgICAgICAgICAgICAgIHBhcnNlcl9wcm90b3R5cGUgPSBub3JtYWxpemVfc25pcHBldCgiIiIKKyAgICAgICAgICAgICAgICAgICAgc3RhdGljIGludAorICAgICAgICAgICAgICAgICAgICB7Y19iYXNlbmFtZX0oe3NlbGZfdHlwZX17c2VsZl9uYW1lfSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCisgICAgICAgICAgICAgICAgICAgICIiIikKKworICAgICAgICAgICAgZmllbGRzID0gbGlzdChwYXJzZXJfYm9keV9maWVsZHMpCisgICAgICAgICAgICBwYXJzZXNfcG9zaXRpb25hbCA9ICdNRVRIX05PQVJHUycgbm90IGluIGZsYWdzCisgICAgICAgICAgICBwYXJzZXNfa2V5d29yZHMgPSAnTUVUSF9LRVlXT1JEUycgaW4gZmxhZ3MKKyAgICAgICAgICAgIGlmIHBhcnNlc19rZXl3b3JkczoKKyAgICAgICAgICAgICAgICBhc3NlcnQgcGFyc2VzX3Bvc2l0aW9uYWwKKworICAgICAgICAgICAgaWYgbm90IHBhcnNlc19rZXl3b3JkczoKKyAgICAgICAgICAgICAgICBmaWVsZHMuaW5zZXJ0KDAsIG5vcm1hbGl6ZV9zbmlwcGV0KCIiIgorICAgICAgICAgICAgICAgICAgICBpZiAoe3NlbGZfdHlwZV9jaGVja30hX1B5QXJnX05vS2V5d29yZHMoIntuYW1lfSIsIGt3YXJncykpCisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgICAgICAgICAgICAgICIiIiwgaW5kZW50PTQpKQorICAgICAgICAgICAgICAgIGlmIG5vdCBwYXJzZXNfcG9zaXRpb25hbDoKKyAgICAgICAgICAgICAgICAgICAgZmllbGRzLmluc2VydCgwLCBub3JtYWxpemVfc25pcHBldCgiIiIKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh7c2VsZl90eXBlX2NoZWNrfSFfUHlBcmdfTm9Qb3NpdGlvbmFsKCJ7bmFtZX0iLCBhcmdzKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgICAgICAgICAgICAgICAgICAiIiIsIGluZGVudD00KSkKKworICAgICAgICAgICAgcGFyc2VyX2RlZmluaXRpb24gPSBwYXJzZXJfYm9keShwYXJzZXJfcHJvdG90eXBlLCAqZmllbGRzKQorICAgICAgICAgICAgaWYgcGFyc2VzX2tleXdvcmRzOgorICAgICAgICAgICAgICAgIHBhcnNlcl9kZWZpbml0aW9uID0gaW5zZXJ0X2tleXdvcmRzKHBhcnNlcl9kZWZpbml0aW9uKQorCisKKyAgICAgICAgaWYgZi5tZXRob2RkZWZfZmxhZ3M6CisgICAgICAgICAgICBmbGFncyArPSAnfCcgKyBmLm1ldGhvZGRlZl9mbGFncworCisgICAgICAgIG1ldGhvZGRlZl9kZWZpbmUgPSBtZXRob2RkZWZfZGVmaW5lLnJlcGxhY2UoJ3ttZXRob2RkZWZfZmxhZ3N9JywgZmxhZ3MpCisKKyAgICAgICAgbWV0aG9kZGVmX2lmbmRlZiA9ICcnCisgICAgICAgIGNvbmRpdGlvbmFsID0gc2VsZi5jcHAuY29uZGl0aW9uKCkKKyAgICAgICAgaWYgbm90IGNvbmRpdGlvbmFsOgorICAgICAgICAgICAgY3BwX2lmID0gY3BwX2VuZGlmID0gJycKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNwcF9pZiA9ICIjaWYgIiArIGNvbmRpdGlvbmFsCisgICAgICAgICAgICBjcHBfZW5kaWYgPSAiI2VuZGlmIC8qICIgKyBjb25kaXRpb25hbCArICIgKi8iCisKKyAgICAgICAgICAgIGlmIG1ldGhvZGRlZl9kZWZpbmU6CisgICAgICAgICAgICAgICAgbWV0aG9kZGVmX2lmbmRlZiA9IG5vcm1hbGl6ZV9zbmlwcGV0KCIiIgorICAgICAgICAgICAgICAgICAgICAjaWZuZGVmIHttZXRob2RkZWZfbmFtZX0KKyAgICAgICAgICAgICAgICAgICAgICAgICNkZWZpbmUge21ldGhvZGRlZl9uYW1lfQorICAgICAgICAgICAgICAgICAgICAjZW5kaWYgLyogIWRlZmluZWQoe21ldGhvZGRlZl9uYW1lfSkgKi8KKyAgICAgICAgICAgICAgICAgICAgIiIiKQorCisKKyAgICAgICAgIyBhZGQgJzsnIHRvIHRoZSBlbmQgb2YgcGFyc2VyX3Byb3RvdHlwZSBhbmQgaW1wbF9wcm90b3R5cGUKKyAgICAgICAgIyAodGhleSBtdXN0bid0IGJlIE5vbmUsIGJ1dCB0aGV5IGNvdWxkIGJlIGFuIGVtcHR5IHN0cmluZy4pCisgICAgICAgIGFzc2VydCBwYXJzZXJfcHJvdG90eXBlIGlzIG5vdCBOb25lCisgICAgICAgIGlmIHBhcnNlcl9wcm90b3R5cGU6CisgICAgICAgICAgICBhc3NlcnQgbm90IHBhcnNlcl9wcm90b3R5cGUuZW5kc3dpdGgoJzsnKQorICAgICAgICAgICAgcGFyc2VyX3Byb3RvdHlwZSArPSAnOycKKworICAgICAgICBpZiBpbXBsX3Byb3RvdHlwZSBpcyBOb25lOgorICAgICAgICAgICAgaW1wbF9wcm90b3R5cGUgPSBpbXBsX2RlZmluaXRpb24KKyAgICAgICAgaWYgaW1wbF9wcm90b3R5cGU6CisgICAgICAgICAgICBpbXBsX3Byb3RvdHlwZSArPSAiOyIKKworICAgICAgICBwYXJzZXJfZGVmaW5pdGlvbiA9IHBhcnNlcl9kZWZpbml0aW9uLnJlcGxhY2UoIntyZXR1cm5fdmFsdWVfZGVjbGFyYXRpb259IiwgcmV0dXJuX3ZhbHVlX2RlY2xhcmF0aW9uKQorCisgICAgICAgIGQgPSB7CisgICAgICAgICAgICAiZG9jc3RyaW5nX3Byb3RvdHlwZSIgOiBkb2NzdHJpbmdfcHJvdG90eXBlLAorICAgICAgICAgICAgImRvY3N0cmluZ19kZWZpbml0aW9uIiA6IGRvY3N0cmluZ19kZWZpbml0aW9uLAorICAgICAgICAgICAgImltcGxfcHJvdG90eXBlIiA6IGltcGxfcHJvdG90eXBlLAorICAgICAgICAgICAgIm1ldGhvZGRlZl9kZWZpbmUiIDogbWV0aG9kZGVmX2RlZmluZSwKKyAgICAgICAgICAgICJwYXJzZXJfcHJvdG90eXBlIiA6IHBhcnNlcl9wcm90b3R5cGUsCisgICAgICAgICAgICAicGFyc2VyX2RlZmluaXRpb24iIDogcGFyc2VyX2RlZmluaXRpb24sCisgICAgICAgICAgICAiaW1wbF9kZWZpbml0aW9uIiA6IGltcGxfZGVmaW5pdGlvbiwKKyAgICAgICAgICAgICJjcHBfaWYiIDogY3BwX2lmLAorICAgICAgICAgICAgImNwcF9lbmRpZiIgOiBjcHBfZW5kaWYsCisgICAgICAgICAgICAibWV0aG9kZGVmX2lmbmRlZiIgOiBtZXRob2RkZWZfaWZuZGVmLAorICAgICAgICB9CisKKyAgICAgICAgIyBtYWtlIHN1cmUgd2UgZGlkbid0IGZvcmdldCB0byBhc3NpZ24gc29tZXRoaW5nLAorICAgICAgICAjIGFuZCB3cmFwIGVhY2ggbm9uLWVtcHR5IHZhbHVlIGluIFxuJ3MKKyAgICAgICAgZDIgPSB7fQorICAgICAgICBmb3IgbmFtZSwgdmFsdWUgaW4gZC5pdGVtcygpOgorICAgICAgICAgICAgYXNzZXJ0IHZhbHVlIGlzIG5vdCBOb25lLCAiZ290IGEgTm9uZSB2YWx1ZSBmb3IgdGVtcGxhdGUgIiArIHJlcHIobmFtZSkKKyAgICAgICAgICAgIGlmIHZhbHVlOgorICAgICAgICAgICAgICAgIHZhbHVlID0gJ1xuJyArIHZhbHVlICsgJ1xuJworICAgICAgICAgICAgZDJbbmFtZV0gPSB2YWx1ZQorICAgICAgICByZXR1cm4gZDIKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgZ3JvdXBfdG9fdmFyaWFibGVfbmFtZShncm91cCk6CisgICAgICAgIGFkamVjdGl2ZSA9ICJsZWZ0XyIgaWYgZ3JvdXAgPCAwIGVsc2UgInJpZ2h0XyIKKyAgICAgICAgcmV0dXJuICJncm91cF8iICsgYWRqZWN0aXZlICsgc3RyKGFicyhncm91cCkpCisKKyAgICBkZWYgcmVuZGVyX29wdGlvbl9ncm91cF9wYXJzaW5nKHNlbGYsIGYsIHRlbXBsYXRlX2RpY3QpOgorICAgICAgICAjIHBvc2l0aW9uYWwgb25seSwgZ3JvdXBlZCwgb3B0aW9uYWwgYXJndW1lbnRzIQorICAgICAgICAjIGNhbiBiZSBvcHRpb25hbCBvbiB0aGUgbGVmdCBvciByaWdodC4KKyAgICAgICAgIyBoZXJlJ3MgYW4gZXhhbXBsZToKKyAgICAgICAgIworICAgICAgICAjIFsgWyBbIEExIEEyIF0gQjEgQjIgQjMgXSBDMSBDMiBdIEQxIEQyIEQzIFsgRTEgRTIgRTMgWyBGMSBGMiBGMyBdIF0KKyAgICAgICAgIworICAgICAgICAjIEhlcmUgZ3JvdXAgRCBhcmUgcmVxdWlyZWQsIGFuZCBhbGwgb3RoZXIgZ3JvdXBzIGFyZSBvcHRpb25hbC4KKyAgICAgICAgIyAoR3JvdXAgRCdzICJncm91cCIgaXMgYWN0dWFsbHkgTm9uZS4pCisgICAgICAgICMgV2UgY2FuIGZpZ3VyZSBvdXQgd2hpY2ggc2V0cyBvZiBhcmd1bWVudHMgd2UgaGF2ZSBiYXNlZCBvbgorICAgICAgICAjIGhvdyBtYW55IGFyZ3VtZW50cyBhcmUgaW4gdGhlIHR1cGxlLgorICAgICAgICAjCisgICAgICAgICMgTm90ZSB0aGF0IHlvdSBuZWVkIHRvIGNvdW50IHVwIG9uIGJvdGggc2lkZXMuICBGb3IgZXhhbXBsZSwKKyAgICAgICAgIyB5b3UgY291bGQgaGF2ZSBncm91cHMgQytELCBvciBDK0QrRSwgb3IgQytEK0UrRi4KKyAgICAgICAgIworICAgICAgICAjIFdoYXQgaWYgdGhlIG51bWJlciBvZiBhcmd1bWVudHMgbGVhZHMgdXMgdG8gYW4gYW1iaWd1b3VzIHJlc3VsdD8KKyAgICAgICAgIyBDbGluaWMgcHJlZmVycyBncm91cHMgb24gdGhlIGxlZnQuICBTbyBpbiB0aGUgYWJvdmUgZXhhbXBsZSwKKyAgICAgICAgIyBmaXZlIGFyZ3VtZW50cyB3b3VsZCBtYXAgdG8gQitDLCBub3QgQytELgorCisgICAgICAgIGFkZCwgb3V0cHV0ID0gdGV4dF9hY2N1bXVsYXRvcigpCisgICAgICAgIHBhcmFtZXRlcnMgPSBsaXN0KGYucGFyYW1ldGVycy52YWx1ZXMoKSkKKyAgICAgICAgaWYgaXNpbnN0YW5jZShwYXJhbWV0ZXJzWzBdLmNvbnZlcnRlciwgc2VsZl9jb252ZXJ0ZXIpOgorICAgICAgICAgICAgZGVsIHBhcmFtZXRlcnNbMF0KKworICAgICAgICBncm91cHMgPSBbXQorICAgICAgICBncm91cCA9IE5vbmUKKyAgICAgICAgbGVmdCA9IFtdCisgICAgICAgIHJpZ2h0ID0gW10KKyAgICAgICAgcmVxdWlyZWQgPSBbXQorICAgICAgICBsYXN0ID0gdW5zcGVjaWZpZWQKKworICAgICAgICBmb3IgcCBpbiBwYXJhbWV0ZXJzOgorICAgICAgICAgICAgZ3JvdXBfaWQgPSBwLmdyb3VwCisgICAgICAgICAgICBpZiBncm91cF9pZCAhPSBsYXN0OgorICAgICAgICAgICAgICAgIGxhc3QgPSBncm91cF9pZAorICAgICAgICAgICAgICAgIGdyb3VwID0gW10KKyAgICAgICAgICAgICAgICBpZiBncm91cF9pZCA8IDA6CisgICAgICAgICAgICAgICAgICAgIGxlZnQuYXBwZW5kKGdyb3VwKQorICAgICAgICAgICAgICAgIGVsaWYgZ3JvdXBfaWQgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgZ3JvdXAgPSByZXF1aXJlZAorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJpZ2h0LmFwcGVuZChncm91cCkKKyAgICAgICAgICAgIGdyb3VwLmFwcGVuZChwKQorCisgICAgICAgIGNvdW50X21pbiA9IHN5cy5tYXhzaXplCisgICAgICAgIGNvdW50X21heCA9IC0xCisKKyAgICAgICAgYWRkKCJzd2l0Y2ggKFB5VHVwbGVfR0VUX1NJWkUoYXJncykpIHt7XG4iKQorICAgICAgICBmb3Igc3Vic2V0IGluIHBlcm11dGVfb3B0aW9uYWxfZ3JvdXBzKGxlZnQsIHJlcXVpcmVkLCByaWdodCk6CisgICAgICAgICAgICBjb3VudCA9IGxlbihzdWJzZXQpCisgICAgICAgICAgICBjb3VudF9taW4gPSBtaW4oY291bnRfbWluLCBjb3VudCkKKyAgICAgICAgICAgIGNvdW50X21heCA9IG1heChjb3VudF9tYXgsIGNvdW50KQorCisgICAgICAgICAgICBpZiBjb3VudCA9PSAwOgorICAgICAgICAgICAgICAgIGFkZCgiIiIgICAgY2FzZSAwOgorICAgICAgICBicmVhazsKKyIiIikKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBncm91cF9pZHMgPSB7cC5ncm91cCBmb3IgcCBpbiBzdWJzZXR9ICAjIGVsaW1pbmF0ZSBkdXBsaWNhdGVzCisgICAgICAgICAgICBkID0ge30KKyAgICAgICAgICAgIGRbJ2NvdW50J10gPSBjb3VudAorICAgICAgICAgICAgZFsnbmFtZSddID0gZi5uYW1lCisgICAgICAgICAgICBkWydncm91cHMnXSA9IHNvcnRlZChncm91cF9pZHMpCisgICAgICAgICAgICBkWydmb3JtYXRfdW5pdHMnXSA9ICIiLmpvaW4ocC5jb252ZXJ0ZXIuZm9ybWF0X3VuaXQgZm9yIHAgaW4gc3Vic2V0KQorCisgICAgICAgICAgICBwYXJzZV9hcmd1bWVudHMgPSBbXQorICAgICAgICAgICAgZm9yIHAgaW4gc3Vic2V0OgorICAgICAgICAgICAgICAgIHAuY29udmVydGVyLnBhcnNlX2FyZ3VtZW50KHBhcnNlX2FyZ3VtZW50cykKKyAgICAgICAgICAgIGRbJ3BhcnNlX2FyZ3VtZW50cyddID0gIiwgIi5qb2luKHBhcnNlX2FyZ3VtZW50cykKKworICAgICAgICAgICAgZ3JvdXBfaWRzLmRpc2NhcmQoMCkKKyAgICAgICAgICAgIGxpbmVzID0gW3NlbGYuZ3JvdXBfdG9fdmFyaWFibGVfbmFtZShnKSArICIgPSAxOyIgZm9yIGcgaW4gZ3JvdXBfaWRzXQorICAgICAgICAgICAgbGluZXMgPSAiXG4iLmpvaW4obGluZXMpCisKKyAgICAgICAgICAgIHMgPSAiIiIKKyAgICBjYXNlIHtjb3VudH06CisgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAie2Zvcm1hdF91bml0c306e25hbWV9Iiwge3BhcnNlX2FyZ3VtZW50c30pKQorICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB7Z3JvdXBfYm9vbGVhbnN9CisgICAgICAgIGJyZWFrOworIiIiWzE6XQorICAgICAgICAgICAgcyA9IGxpbmVhcl9mb3JtYXQocywgZ3JvdXBfYm9vbGVhbnM9bGluZXMpCisgICAgICAgICAgICBzID0gcy5mb3JtYXRfbWFwKGQpCisgICAgICAgICAgICBhZGQocykKKworICAgICAgICBhZGQoIiAgICBkZWZhdWx0OlxuIikKKyAgICAgICAgcyA9ICcgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJ7fSByZXF1aXJlcyB7fSB0byB7fSBhcmd1bWVudHMiKTtcbicKKyAgICAgICAgYWRkKHMuZm9ybWF0KGYuZnVsbF9uYW1lLCBjb3VudF9taW4sIGNvdW50X21heCkpCisgICAgICAgIGFkZCgnICAgICAgICBnb3RvIGV4aXQ7XG4nKQorICAgICAgICBhZGQoIn19IikKKyAgICAgICAgdGVtcGxhdGVfZGljdFsnb3B0aW9uX2dyb3VwX3BhcnNpbmcnXSA9IG91dHB1dCgpCisKKyAgICBkZWYgcmVuZGVyX2Z1bmN0aW9uKHNlbGYsIGNsaW5pYywgZik6CisgICAgICAgIGlmIG5vdCBmOgorICAgICAgICAgICAgcmV0dXJuICIiCisKKyAgICAgICAgYWRkLCBvdXRwdXQgPSB0ZXh0X2FjY3VtdWxhdG9yKCkKKyAgICAgICAgZGF0YSA9IENSZW5kZXJEYXRhKCkKKworICAgICAgICBhc3NlcnQgZi5wYXJhbWV0ZXJzLCAiV2Ugc2hvdWxkIGFsd2F5cyBoYXZlIGEgJ3NlbGYnIGF0IHRoaXMgcG9pbnQhIgorICAgICAgICBwYXJhbWV0ZXJzID0gZi5yZW5kZXJfcGFyYW1ldGVycworICAgICAgICBjb252ZXJ0ZXJzID0gW3AuY29udmVydGVyIGZvciBwIGluIHBhcmFtZXRlcnNdCisKKyAgICAgICAgdGVtcGxhdGVzID0gc2VsZi5vdXRwdXRfdGVtcGxhdGVzKGYpCisKKyAgICAgICAgZl9zZWxmID0gcGFyYW1ldGVyc1swXQorICAgICAgICBzZWxmbGVzcyA9IHBhcmFtZXRlcnNbMTpdCisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGZfc2VsZi5jb252ZXJ0ZXIsIHNlbGZfY29udmVydGVyKSwgIk5vIHNlbGYgcGFyYW1ldGVyIGluICIgKyByZXByKGYuZnVsbF9uYW1lKSArICIhIgorCisgICAgICAgIGxhc3RfZ3JvdXAgPSAwCisgICAgICAgIGZpcnN0X29wdGlvbmFsID0gbGVuKHNlbGZsZXNzKQorICAgICAgICBwb3NpdGlvbmFsID0gc2VsZmxlc3MgYW5kIHNlbGZsZXNzWy0xXS5raW5kID09IGluc3BlY3QuUGFyYW1ldGVyLlBPU0lUSU9OQUxfT05MWQorICAgICAgICBuZXdfb3JfaW5pdCA9IGYua2luZCBpbiAoTUVUSE9EX05FVywgTUVUSE9EX0lOSVQpCisgICAgICAgIGRlZmF1bHRfcmV0dXJuX2NvbnZlcnRlciA9IChub3QgZi5yZXR1cm5fY29udmVydGVyIG9yCisgICAgICAgICAgICBmLnJldHVybl9jb252ZXJ0ZXIudHlwZSA9PSAnUHlPYmplY3QgKicpCisgICAgICAgIGhhc19vcHRpb25fZ3JvdXBzID0gRmFsc2UKKworICAgICAgICAjIG9mZnNldCBpIGJ5IC0xIGJlY2F1c2UgZmlyc3Rfb3B0aW9uYWwgbmVlZHMgdG8gaWdub3JlIHNlbGYKKyAgICAgICAgZm9yIGksIHAgaW4gZW51bWVyYXRlKHBhcmFtZXRlcnMsIC0xKToKKyAgICAgICAgICAgIGMgPSBwLmNvbnZlcnRlcgorCisgICAgICAgICAgICBpZiAoaSAhPSAtMSkgYW5kIChwLmRlZmF1bHQgaXMgbm90IHVuc3BlY2lmaWVkKToKKyAgICAgICAgICAgICAgICBmaXJzdF9vcHRpb25hbCA9IG1pbihmaXJzdF9vcHRpb25hbCwgaSkKKworICAgICAgICAgICAgIyBpbnNlcnQgZ3JvdXAgdmFyaWFibGUKKyAgICAgICAgICAgIGdyb3VwID0gcC5ncm91cAorICAgICAgICAgICAgaWYgbGFzdF9ncm91cCAhPSBncm91cDoKKyAgICAgICAgICAgICAgICBsYXN0X2dyb3VwID0gZ3JvdXAKKyAgICAgICAgICAgICAgICBpZiBncm91cDoKKyAgICAgICAgICAgICAgICAgICAgZ3JvdXBfbmFtZSA9IHNlbGYuZ3JvdXBfdG9fdmFyaWFibGVfbmFtZShncm91cCkKKyAgICAgICAgICAgICAgICAgICAgZGF0YS5pbXBsX2FyZ3VtZW50cy5hcHBlbmQoZ3JvdXBfbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YS5kZWNsYXJhdGlvbnMuYXBwZW5kKCJpbnQgIiArIGdyb3VwX25hbWUgKyAiID0gMDsiKQorICAgICAgICAgICAgICAgICAgICBkYXRhLmltcGxfcGFyYW1ldGVycy5hcHBlbmQoImludCAiICsgZ3JvdXBfbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgaGFzX29wdGlvbl9ncm91cHMgPSBUcnVlCisKKyAgICAgICAgICAgIGMucmVuZGVyKHAsIGRhdGEpCisKKyAgICAgICAgaWYgaGFzX29wdGlvbl9ncm91cHMgYW5kIChub3QgcG9zaXRpb25hbCk6CisgICAgICAgICAgICBmYWlsKCJZb3UgY2Fubm90IHVzZSBvcHRpb25hbCBncm91cHMgKCdbJyBhbmQgJ10nKVxudW5sZXNzIGFsbCBwYXJhbWV0ZXJzIGFyZSBwb3NpdGlvbmFsLW9ubHkgKCcvJykuIikKKworICAgICAgICAjIEhBQ0sKKyAgICAgICAgIyB3aGVuIHdlJ3JlIE1FVEhfTywgYnV0IGhhdmUgYSBjdXN0b20gcmV0dXJuIGNvbnZlcnRlciwKKyAgICAgICAgIyB3ZSB1c2UgImltcGxfcGFyYW1ldGVycyIgZm9yIHRoZSBwYXJzaW5nIGZ1bmN0aW9uCisgICAgICAgICMgYmVjYXVzZSB0aGF0IHdvcmtzIGJldHRlci4gIGJ1dCB0aGF0IG1lYW5zIHdlIG11c3QKKyAgICAgICAgIyBzdXBwcmVzcyBhY3R1YWxseSBkZWNsYXJpbmcgdGhlIGltcGwncyBwYXJhbWV0ZXJzCisgICAgICAgICMgYXMgdmFyaWFibGVzIGluIHRoZSBwYXJzaW5nIGZ1bmN0aW9uLiAgYnV0IHNpbmNlIGl0J3MKKyAgICAgICAgIyBNRVRIX08sIHdlIGhhdmUgZXhhY3RseSBvbmUgYW55d2F5LCBzbyB3ZSBrbm93IGV4YWN0bHkKKyAgICAgICAgIyB3aGVyZSBpdCBpcy4KKyAgICAgICAgaWYgKCJNRVRIX08iIGluIHRlbXBsYXRlc1snbWV0aG9kZGVmX2RlZmluZSddIGFuZAorICAgICAgICAgICAgbm90IGRlZmF1bHRfcmV0dXJuX2NvbnZlcnRlcik6CisgICAgICAgICAgICBkYXRhLmRlY2xhcmF0aW9ucy5wb3AoMCkKKworICAgICAgICB0ZW1wbGF0ZV9kaWN0ID0ge30KKworICAgICAgICBmdWxsX25hbWUgPSBmLmZ1bGxfbmFtZQorICAgICAgICB0ZW1wbGF0ZV9kaWN0WydmdWxsX25hbWUnXSA9IGZ1bGxfbmFtZQorCisgICAgICAgIGlmIG5ld19vcl9pbml0OgorICAgICAgICAgICAgbmFtZSA9IGYuY2xzLm5hbWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG5hbWUgPSBmLm5hbWUKKworICAgICAgICB0ZW1wbGF0ZV9kaWN0WyduYW1lJ10gPSBuYW1lCisKKyAgICAgICAgaWYgZi5jX2Jhc2VuYW1lOgorICAgICAgICAgICAgY19iYXNlbmFtZSA9IGYuY19iYXNlbmFtZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZmllbGRzID0gZnVsbF9uYW1lLnNwbGl0KCIuIikKKyAgICAgICAgICAgIGlmIGZpZWxkc1stMV0gPT0gJ19fbmV3X18nOgorICAgICAgICAgICAgICAgIGZpZWxkcy5wb3AoKQorICAgICAgICAgICAgY19iYXNlbmFtZSA9ICJfIi5qb2luKGZpZWxkcykKKworICAgICAgICB0ZW1wbGF0ZV9kaWN0WydjX2Jhc2VuYW1lJ10gPSBjX2Jhc2VuYW1lCisKKyAgICAgICAgbWV0aG9kZGVmX25hbWUgPSAie31fTUVUSE9EREVGIi5mb3JtYXQoY19iYXNlbmFtZS51cHBlcigpKQorICAgICAgICB0ZW1wbGF0ZV9kaWN0WydtZXRob2RkZWZfbmFtZSddID0gbWV0aG9kZGVmX25hbWUKKworICAgICAgICB0ZW1wbGF0ZV9kaWN0Wydkb2NzdHJpbmcnXSA9IHNlbGYuZG9jc3RyaW5nX2Zvcl9jX3N0cmluZyhmKQorCisgICAgICAgIHRlbXBsYXRlX2RpY3RbJ3NlbGZfbmFtZSddID0gdGVtcGxhdGVfZGljdFsnc2VsZl90eXBlJ10gPSB0ZW1wbGF0ZV9kaWN0WydzZWxmX3R5cGVfY2hlY2snXSA9ICcnCisgICAgICAgIGZfc2VsZi5jb252ZXJ0ZXIuc2V0X3RlbXBsYXRlX2RpY3QodGVtcGxhdGVfZGljdCkKKworICAgICAgICBmLnJldHVybl9jb252ZXJ0ZXIucmVuZGVyKGYsIGRhdGEpCisgICAgICAgIHRlbXBsYXRlX2RpY3RbJ2ltcGxfcmV0dXJuX3R5cGUnXSA9IGYucmV0dXJuX2NvbnZlcnRlci50eXBlCisKKyAgICAgICAgdGVtcGxhdGVfZGljdFsnZGVjbGFyYXRpb25zJ10gPSAiXG4iLmpvaW4oZGF0YS5kZWNsYXJhdGlvbnMpCisgICAgICAgIHRlbXBsYXRlX2RpY3RbJ2luaXRpYWxpemVycyddID0gIlxuXG4iLmpvaW4oZGF0YS5pbml0aWFsaXplcnMpCisgICAgICAgIHRlbXBsYXRlX2RpY3RbJ21vZGlmaWNhdGlvbnMnXSA9ICdcblxuJy5qb2luKGRhdGEubW9kaWZpY2F0aW9ucykKKyAgICAgICAgdGVtcGxhdGVfZGljdFsna2V5d29yZHMnXSA9ICciJyArICciLCAiJy5qb2luKGRhdGEua2V5d29yZHMpICsgJyInCisgICAgICAgIHRlbXBsYXRlX2RpY3RbJ2Zvcm1hdF91bml0cyddID0gJycuam9pbihkYXRhLmZvcm1hdF91bml0cykKKyAgICAgICAgdGVtcGxhdGVfZGljdFsncGFyc2VfYXJndW1lbnRzJ10gPSAnLCAnLmpvaW4oZGF0YS5wYXJzZV9hcmd1bWVudHMpCisgICAgICAgIHRlbXBsYXRlX2RpY3RbJ2ltcGxfcGFyYW1ldGVycyddID0gIiwgIi5qb2luKGRhdGEuaW1wbF9wYXJhbWV0ZXJzKQorICAgICAgICB0ZW1wbGF0ZV9kaWN0WydpbXBsX2FyZ3VtZW50cyddID0gIiwgIi5qb2luKGRhdGEuaW1wbF9hcmd1bWVudHMpCisgICAgICAgIHRlbXBsYXRlX2RpY3RbJ3JldHVybl9jb252ZXJzaW9uJ10gPSAiIi5qb2luKGRhdGEucmV0dXJuX2NvbnZlcnNpb24pLnJzdHJpcCgpCisgICAgICAgIHRlbXBsYXRlX2RpY3RbJ2NsZWFudXAnXSA9ICIiLmpvaW4oZGF0YS5jbGVhbnVwKQorICAgICAgICB0ZW1wbGF0ZV9kaWN0WydyZXR1cm5fdmFsdWUnXSA9IGRhdGEucmV0dXJuX3ZhbHVlCisKKyAgICAgICAgIyB1c2VkIGJ5IHVucGFjayB0dXBsZSBjb2RlIGdlbmVyYXRvcgorICAgICAgICBpZ25vcmVfc2VsZiA9IC0xIGlmIGlzaW5zdGFuY2UoY29udmVydGVyc1swXSwgc2VsZl9jb252ZXJ0ZXIpIGVsc2UgMAorICAgICAgICB1bnBhY2tfbWluID0gZmlyc3Rfb3B0aW9uYWwKKyAgICAgICAgdW5wYWNrX21heCA9IGxlbihzZWxmbGVzcykKKyAgICAgICAgdGVtcGxhdGVfZGljdFsndW5wYWNrX21pbiddID0gc3RyKHVucGFja19taW4pCisgICAgICAgIHRlbXBsYXRlX2RpY3RbJ3VucGFja19tYXgnXSA9IHN0cih1bnBhY2tfbWF4KQorCisgICAgICAgIGlmIGhhc19vcHRpb25fZ3JvdXBzOgorICAgICAgICAgICAgc2VsZi5yZW5kZXJfb3B0aW9uX2dyb3VwX3BhcnNpbmcoZiwgdGVtcGxhdGVfZGljdCkKKworICAgICAgICBmb3IgbmFtZSwgZGVzdGluYXRpb24gaW4gY2xpbmljLmZpZWxkX2Rlc3RpbmF0aW9ucy5pdGVtcygpOgorICAgICAgICAgICAgdGVtcGxhdGUgPSB0ZW1wbGF0ZXNbbmFtZV0KKyAgICAgICAgICAgIGlmIGhhc19vcHRpb25fZ3JvdXBzOgorICAgICAgICAgICAgICAgIHRlbXBsYXRlID0gbGluZWFyX2Zvcm1hdCh0ZW1wbGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbl9ncm91cF9wYXJzaW5nPXRlbXBsYXRlX2RpY3RbJ29wdGlvbl9ncm91cF9wYXJzaW5nJ10pCisgICAgICAgICAgICB0ZW1wbGF0ZSA9IGxpbmVhcl9mb3JtYXQodGVtcGxhdGUsCisgICAgICAgICAgICAgICAgZGVjbGFyYXRpb25zPXRlbXBsYXRlX2RpY3RbJ2RlY2xhcmF0aW9ucyddLAorICAgICAgICAgICAgICAgIHJldHVybl9jb252ZXJzaW9uPXRlbXBsYXRlX2RpY3RbJ3JldHVybl9jb252ZXJzaW9uJ10sCisgICAgICAgICAgICAgICAgaW5pdGlhbGl6ZXJzPXRlbXBsYXRlX2RpY3RbJ2luaXRpYWxpemVycyddLAorICAgICAgICAgICAgICAgIG1vZGlmaWNhdGlvbnM9dGVtcGxhdGVfZGljdFsnbW9kaWZpY2F0aW9ucyddLAorICAgICAgICAgICAgICAgIGNsZWFudXA9dGVtcGxhdGVfZGljdFsnY2xlYW51cCddLAorICAgICAgICAgICAgICAgICkKKworICAgICAgICAgICAgIyBPbmx5IGdlbmVyYXRlIHRoZSAiZXhpdDoiIGxhYmVsCisgICAgICAgICAgICAjIGlmIHdlIGhhdmUgYW55IGdvdG9zCisgICAgICAgICAgICBuZWVkX2V4aXRfbGFiZWwgPSAiZ290byBleGl0OyIgaW4gdGVtcGxhdGUKKyAgICAgICAgICAgIHRlbXBsYXRlID0gbGluZWFyX2Zvcm1hdCh0ZW1wbGF0ZSwKKyAgICAgICAgICAgICAgICBleGl0X2xhYmVsPSJleGl0OiIgaWYgbmVlZF9leGl0X2xhYmVsIGVsc2UgJycKKyAgICAgICAgICAgICAgICApCisKKyAgICAgICAgICAgIHMgPSB0ZW1wbGF0ZS5mb3JtYXRfbWFwKHRlbXBsYXRlX2RpY3QpCisKKyAgICAgICAgICAgIGlmIGNsaW5pYy5saW5lX3ByZWZpeDoKKyAgICAgICAgICAgICAgICBzID0gaW5kZW50X2FsbF9saW5lcyhzLCBjbGluaWMubGluZV9wcmVmaXgpCisgICAgICAgICAgICBpZiBjbGluaWMubGluZV9zdWZmaXg6CisgICAgICAgICAgICAgICAgcyA9IHN1ZmZpeF9hbGxfbGluZXMocywgY2xpbmljLmxpbmVfc3VmZml4KQorCisgICAgICAgICAgICBkZXN0aW5hdGlvbi5hcHBlbmQocykKKworICAgICAgICByZXR1cm4gY2xpbmljLmdldF9kZXN0aW5hdGlvbignYmxvY2snKS5kdW1wKCkKKworCisKKworQGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIKK2RlZiBPdmVycmlkZVN0ZGlvV2l0aChzdGRvdXQpOgorICAgIHNhdmVkX3N0ZG91dCA9IHN5cy5zdGRvdXQKKyAgICBzeXMuc3Rkb3V0ID0gc3Rkb3V0CisgICAgdHJ5OgorICAgICAgICB5aWVsZAorICAgIGZpbmFsbHk6CisgICAgICAgIGFzc2VydCBzeXMuc3Rkb3V0IGlzIHN0ZG91dAorICAgICAgICBzeXMuc3Rkb3V0ID0gc2F2ZWRfc3Rkb3V0CisKKworZGVmIGNyZWF0ZV9yZWdleChiZWZvcmUsIGFmdGVyLCB3b3JkPVRydWUsIHdob2xlX2xpbmU9VHJ1ZSk6CisgICAgIiIiQ3JlYXRlIGFuIHJlIG9iamVjdCBmb3IgbWF0Y2hpbmcgbWFya2VyIGxpbmVzLiIiIgorICAgIGdyb3VwX3JlID0gIlx3KyIgaWYgd29yZCBlbHNlICIuKyIKKyAgICBwYXR0ZXJuID0gcid7fSh7fSl7fScKKyAgICBpZiB3aG9sZV9saW5lOgorICAgICAgICBwYXR0ZXJuID0gJ14nICsgcGF0dGVybiArICckJworICAgIHBhdHRlcm4gPSBwYXR0ZXJuLmZvcm1hdChyZS5lc2NhcGUoYmVmb3JlKSwgZ3JvdXBfcmUsIHJlLmVzY2FwZShhZnRlcikpCisgICAgcmV0dXJuIHJlLmNvbXBpbGUocGF0dGVybikKKworCitjbGFzcyBCbG9jazoKKyAgICByIiIiCisgICAgUmVwcmVzZW50cyBhIHNpbmdsZSBibG9jayBvZiB0ZXh0IGVtYmVkZGVkIGluCisgICAgYW5vdGhlciBmaWxlLiAgSWYgZHNsX25hbWUgaXMgTm9uZSwgdGhlIGJsb2NrIHJlcHJlc2VudHMKKyAgICB2ZXJiYXRpbSB0ZXh0LCByYXcgb3JpZ2luYWwgdGV4dCBmcm9tIHRoZSBmaWxlLCBpbgorICAgIHdoaWNoIGNhc2UgImlucHV0IiB3aWxsIGJlIHRoZSBvbmx5IG5vbi1mYWxzZSBtZW1iZXIuCisgICAgSWYgZHNsX25hbWUgaXMgbm90IE5vbmUsIHRoZSBibG9jayByZXByZXNlbnRzIGEgQ2xpbmljCisgICAgYmxvY2suCisKKyAgICBpbnB1dCBpcyBhbHdheXMgc3RyLCB3aXRoIGVtYmVkZGVkIFxuIGNoYXJhY3RlcnMuCisgICAgaW5wdXQgcmVwcmVzZW50cyB0aGUgb3JpZ2luYWwgdGV4dCBmcm9tIHRoZSBmaWxlOworICAgIGlmIGl0J3MgYSBDbGluaWMgYmxvY2ssIGl0IGlzIHRoZSBvcmlnaW5hbCB0ZXh0IHdpdGgKKyAgICB0aGUgYm9keV9wcmVmaXggYW5kIHJlZHVuZGFudCBsZWFkaW5nIHdoaXRlc3BhY2UgcmVtb3ZlZC4KKworICAgIGRzbF9uYW1lIGlzIGVpdGhlciBzdHIgb3IgTm9uZS4gIElmIHN0ciwgaXQncyB0aGUgdGV4dAorICAgIGZvdW5kIG9uIHRoZSBzdGFydCBsaW5lIG9mIHRoZSBibG9jayBiZXR3ZWVuIHRoZSBzcXVhcmUKKyAgICBicmFja2V0cy4KKworICAgIHNpZ25hdHVyZXMgaXMgZWl0aGVyIGxpc3Qgb3IgTm9uZS4gIElmIGl0J3MgYSBsaXN0LAorICAgIGl0IG1heSBvbmx5IGNvbnRhaW4gY2xpbmljLk1vZHVsZSwgY2xpbmljLkNsYXNzLCBhbmQKKyAgICBjbGluaWMuRnVuY3Rpb24gb2JqZWN0cy4gIEF0IHRoZSBtb21lbnQgaXQgc2hvdWxkCisgICAgY29udGFpbiBhdCBtb3N0IG9uZSBvZiBlYWNoLgorCisgICAgb3V0cHV0IGlzIGVpdGhlciBzdHIgb3IgTm9uZS4gIElmIHN0ciwgaXQncyB0aGUgb3V0cHV0CisgICAgZnJvbSB0aGlzIGJsb2NrLCB3aXRoIGVtYmVkZGVkICdcbicgY2hhcmFjdGVycy4KKworICAgIGluZGVudCBpcyBlaXRoZXIgc3RyIG9yIE5vbmUuICBJdCdzIHRoZSBsZWFkaW5nIHdoaXRlc3BhY2UKKyAgICB0aGF0IHdhcyBmb3VuZCBvbiBldmVyeSBsaW5lIG9mIGlucHV0LiAgKElmIGJvZHlfcHJlZml4IGlzCisgICAgbm90IGVtcHR5LCB0aGlzIGlzIHRoZSBpbmRlbnQgKmFmdGVyKiByZW1vdmluZyB0aGUKKyAgICBib2R5X3ByZWZpeC4pCisKKyAgICBwcmVpbmRlbnQgaXMgZWl0aGVyIHN0ciBvciBOb25lLiAgSXQncyB0aGUgd2hpdGVzcGFjZSB0aGF0CisgICAgd2FzIGZvdW5kIGluIGZyb250IG9mIGV2ZXJ5IGxpbmUgb2YgaW5wdXQgKmJlZm9yZSogdGhlCisgICAgImJvZHlfcHJlZml4IiAoc2VlIHRoZSBMYW5ndWFnZSBvYmplY3QpLiAgSWYgYm9keV9wcmVmaXgKKyAgICBpcyBlbXB0eSwgcHJlaW5kZW50IG11c3QgYWx3YXlzIGJlIGVtcHR5IHRvby4KKworICAgIFRvIGlsbHVzdHJhdGUgaW5kZW50IGFuZCBwcmVpbmRlbnQ6IEFzc3VtZSB0aGF0ICdfJworICAgIHJlcHJlc2VudHMgd2hpdGVzcGFjZS4gIElmIHRoZSBibG9jayBwcm9jZXNzZWQgd2FzIGluIGEKKyAgICBQeXRob24gZmlsZSwgYW5kIGxvb2tlZCBsaWtlIHRoaXM6CisgICAgICBfX19fIy8qW3B5dGhvbl0KKyAgICAgIF9fX18jX19mb3IgYSBpbiByYW5nZSgyMCk6CisgICAgICBfX19fI19fX19wcmludChhKQorICAgICAgX19fXyNbcHl0aG9uXSovCisgICAgInByZWluZGVudCIgd291bGQgYmUgIl9fX18iIGFuZCAiaW5kZW50IiB3b3VsZCBiZSAiX18iLgorCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGlucHV0LCBkc2xfbmFtZT1Ob25lLCBzaWduYXR1cmVzPU5vbmUsIG91dHB1dD1Ob25lLCBpbmRlbnQ9JycsIHByZWluZGVudD0nJyk6CisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGlucHV0LCBzdHIpCisgICAgICAgIHNlbGYuaW5wdXQgPSBpbnB1dAorICAgICAgICBzZWxmLmRzbF9uYW1lID0gZHNsX25hbWUKKyAgICAgICAgc2VsZi5zaWduYXR1cmVzID0gc2lnbmF0dXJlcyBvciBbXQorICAgICAgICBzZWxmLm91dHB1dCA9IG91dHB1dAorICAgICAgICBzZWxmLmluZGVudCA9IGluZGVudAorICAgICAgICBzZWxmLnByZWluZGVudCA9IHByZWluZGVudAorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICBkc2xfbmFtZSA9IHNlbGYuZHNsX25hbWUgb3IgInRleHQiCisgICAgICAgIGRlZiBzdW1tYXJpemUocyk6CisgICAgICAgICAgICBzID0gcmVwcihzKQorICAgICAgICAgICAgaWYgbGVuKHMpID4gMzA6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNbOjI2XSArICIuLi4iICsgc1swXQorICAgICAgICAgICAgcmV0dXJuIHMKKyAgICAgICAgcmV0dXJuICIiLmpvaW4oKAorICAgICAgICAgICAgIjxCbG9jayAiLCBkc2xfbmFtZSwgIiBpbnB1dD0iLCBzdW1tYXJpemUoc2VsZi5pbnB1dCksICIgb3V0cHV0PSIsIHN1bW1hcml6ZShzZWxmLm91dHB1dCksICI+IikpCisKKworY2xhc3MgQmxvY2tQYXJzZXI6CisgICAgIiIiCisgICAgQmxvY2stb3JpZW50ZWQgcGFyc2VyIGZvciBBcmd1bWVudCBDbGluaWMuCisgICAgSXRlcmF0b3IsIHlpZWxkcyBCbG9jayBvYmplY3RzLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGlucHV0LCBsYW5ndWFnZSwgKiwgdmVyaWZ5PVRydWUpOgorICAgICAgICAiIiIKKyAgICAgICAgImlucHV0IiBzaG91bGQgYmUgYSBzdHIgb2JqZWN0CisgICAgICAgIHdpdGggZW1iZWRkZWQgXG4gY2hhcmFjdGVycy4KKworICAgICAgICAibGFuZ3VhZ2UiIHNob3VsZCBiZSBhIExhbmd1YWdlIG9iamVjdC4KKyAgICAgICAgIiIiCisgICAgICAgIGxhbmd1YWdlLnZhbGlkYXRlKCkKKworICAgICAgICBzZWxmLmlucHV0ID0gY29sbGVjdGlvbnMuZGVxdWUocmV2ZXJzZWQoaW5wdXQuc3BsaXRsaW5lcyhrZWVwZW5kcz1UcnVlKSkpCisgICAgICAgIHNlbGYuYmxvY2tfc3RhcnRfbGluZV9udW1iZXIgPSBzZWxmLmxpbmVfbnVtYmVyID0gMAorCisgICAgICAgIHNlbGYubGFuZ3VhZ2UgPSBsYW5ndWFnZQorICAgICAgICBiZWZvcmUsIF8sIGFmdGVyID0gbGFuZ3VhZ2Uuc3RhcnRfbGluZS5wYXJ0aXRpb24oJ3tkc2xfbmFtZX0nKQorICAgICAgICBhc3NlcnQgXyA9PSAne2RzbF9uYW1lfScKKyAgICAgICAgc2VsZi5maW5kX3N0YXJ0X3JlID0gY3JlYXRlX3JlZ2V4KGJlZm9yZSwgYWZ0ZXIsIHdob2xlX2xpbmU9RmFsc2UpCisgICAgICAgIHNlbGYuc3RhcnRfcmUgPSBjcmVhdGVfcmVnZXgoYmVmb3JlLCBhZnRlcikKKyAgICAgICAgc2VsZi52ZXJpZnkgPSB2ZXJpZnkKKyAgICAgICAgc2VsZi5sYXN0X2NoZWNrc3VtX3JlID0gTm9uZQorICAgICAgICBzZWxmLmxhc3RfZHNsX25hbWUgPSBOb25lCisgICAgICAgIHNlbGYuZHNsX25hbWUgPSBOb25lCisgICAgICAgIHNlbGYuZmlyc3RfYmxvY2sgPSBUcnVlCisKKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19uZXh0X18oc2VsZik6CisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5pbnB1dDoKKyAgICAgICAgICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uCisKKyAgICAgICAgICAgIGlmIHNlbGYuZHNsX25hbWU6CisgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbHVlID0gc2VsZi5wYXJzZV9jbGluaWNfYmxvY2soc2VsZi5kc2xfbmFtZSkKKyAgICAgICAgICAgICAgICBzZWxmLmRzbF9uYW1lID0gTm9uZQorICAgICAgICAgICAgICAgIHNlbGYuZmlyc3RfYmxvY2sgPSBGYWxzZQorICAgICAgICAgICAgICAgIHJldHVybiByZXR1cm5fdmFsdWUKKyAgICAgICAgICAgIGJsb2NrID0gc2VsZi5wYXJzZV92ZXJiYXRpbV9ibG9jaygpCisgICAgICAgICAgICBpZiBzZWxmLmZpcnN0X2Jsb2NrIGFuZCBub3QgYmxvY2suaW5wdXQ6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHNlbGYuZmlyc3RfYmxvY2sgPSBGYWxzZQorICAgICAgICAgICAgcmV0dXJuIGJsb2NrCisKKworICAgIGRlZiBpc19zdGFydF9saW5lKHNlbGYsIGxpbmUpOgorICAgICAgICBtYXRjaCA9IHNlbGYuc3RhcnRfcmUubWF0Y2gobGluZS5sc3RyaXAoKSkKKyAgICAgICAgcmV0dXJuIG1hdGNoLmdyb3VwKDEpIGlmIG1hdGNoIGVsc2UgTm9uZQorCisgICAgZGVmIF9saW5lKHNlbGYpOgorICAgICAgICBzZWxmLmxpbmVfbnVtYmVyICs9IDEKKyAgICAgICAgbGluZSA9IHNlbGYuaW5wdXQucG9wKCkKKyAgICAgICAgc2VsZi5sYW5ndWFnZS5wYXJzZV9saW5lKGxpbmUpCisgICAgICAgIHJldHVybiBsaW5lCisKKyAgICBkZWYgcGFyc2VfdmVyYmF0aW1fYmxvY2soc2VsZik6CisgICAgICAgIGFkZCwgb3V0cHV0ID0gdGV4dF9hY2N1bXVsYXRvcigpCisgICAgICAgIHNlbGYuYmxvY2tfc3RhcnRfbGluZV9udW1iZXIgPSBzZWxmLmxpbmVfbnVtYmVyCisKKyAgICAgICAgd2hpbGUgc2VsZi5pbnB1dDoKKyAgICAgICAgICAgIGxpbmUgPSBzZWxmLl9saW5lKCkKKyAgICAgICAgICAgIGRzbF9uYW1lID0gc2VsZi5pc19zdGFydF9saW5lKGxpbmUpCisgICAgICAgICAgICBpZiBkc2xfbmFtZToKKyAgICAgICAgICAgICAgICBzZWxmLmRzbF9uYW1lID0gZHNsX25hbWUKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgYWRkKGxpbmUpCisKKyAgICAgICAgcmV0dXJuIEJsb2NrKG91dHB1dCgpKQorCisgICAgZGVmIHBhcnNlX2NsaW5pY19ibG9jayhzZWxmLCBkc2xfbmFtZSk6CisgICAgICAgIGlucHV0X2FkZCwgaW5wdXRfb3V0cHV0ID0gdGV4dF9hY2N1bXVsYXRvcigpCisgICAgICAgIHNlbGYuYmxvY2tfc3RhcnRfbGluZV9udW1iZXIgPSBzZWxmLmxpbmVfbnVtYmVyICsgMQorICAgICAgICBzdG9wX2xpbmUgPSBzZWxmLmxhbmd1YWdlLnN0b3BfbGluZS5mb3JtYXQoZHNsX25hbWU9ZHNsX25hbWUpCisgICAgICAgIGJvZHlfcHJlZml4ID0gc2VsZi5sYW5ndWFnZS5ib2R5X3ByZWZpeC5mb3JtYXQoZHNsX25hbWU9ZHNsX25hbWUpCisKKyAgICAgICAgZGVmIGlzX3N0b3BfbGluZShsaW5lKToKKyAgICAgICAgICAgICMgbWFrZSBzdXJlIHRvIHJlY29nbml6ZSBzdG9wIGxpbmUgZXZlbiBpZiBpdAorICAgICAgICAgICAgIyBkb2Vzbid0IGVuZCB3aXRoIEVPTCAoaXQgY291bGQgYmUgdGhlIHZlcnkgZW5kIG9mIHRoZSBmaWxlKQorICAgICAgICAgICAgaWYgbm90IGxpbmUuc3RhcnRzd2l0aChzdG9wX2xpbmUpOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgcmVtYWluZGVyID0gbGluZVtsZW4oc3RvcF9saW5lKTpdCisgICAgICAgICAgICByZXR1cm4gKG5vdCByZW1haW5kZXIpIG9yIHJlbWFpbmRlci5pc3NwYWNlKCkKKworICAgICAgICAjIGNvbnN1bWUgYm9keSBvZiBwcm9ncmFtCisgICAgICAgIHdoaWxlIHNlbGYuaW5wdXQ6CisgICAgICAgICAgICBsaW5lID0gc2VsZi5fbGluZSgpCisgICAgICAgICAgICBpZiBpc19zdG9wX2xpbmUobGluZSkgb3Igc2VsZi5pc19zdGFydF9saW5lKGxpbmUpOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBpZiBib2R5X3ByZWZpeDoKKyAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5sc3RyaXAoKQorICAgICAgICAgICAgICAgIGFzc2VydCBsaW5lLnN0YXJ0c3dpdGgoYm9keV9wcmVmaXgpCisgICAgICAgICAgICAgICAgbGluZSA9IGxpbmVbbGVuKGJvZHlfcHJlZml4KTpdCisgICAgICAgICAgICBpbnB1dF9hZGQobGluZSkKKworICAgICAgICAjIGNvbnN1bWUgb3V0cHV0IGFuZCBjaGVja3N1bSBsaW5lLCBpZiBwcmVzZW50LgorICAgICAgICBpZiBzZWxmLmxhc3RfZHNsX25hbWUgPT0gZHNsX25hbWU6CisgICAgICAgICAgICBjaGVja3N1bV9yZSA9IHNlbGYubGFzdF9jaGVja3N1bV9yZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYmVmb3JlLCBfLCBhZnRlciA9IHNlbGYubGFuZ3VhZ2UuY2hlY2tzdW1fbGluZS5mb3JtYXQoZHNsX25hbWU9ZHNsX25hbWUsIGFyZ3VtZW50cz0ne2FyZ3VtZW50c30nKS5wYXJ0aXRpb24oJ3thcmd1bWVudHN9JykKKyAgICAgICAgICAgIGFzc2VydCBfID09ICd7YXJndW1lbnRzfScKKyAgICAgICAgICAgIGNoZWNrc3VtX3JlID0gY3JlYXRlX3JlZ2V4KGJlZm9yZSwgYWZ0ZXIsIHdvcmQ9RmFsc2UpCisgICAgICAgICAgICBzZWxmLmxhc3RfZHNsX25hbWUgPSBkc2xfbmFtZQorICAgICAgICAgICAgc2VsZi5sYXN0X2NoZWNrc3VtX3JlID0gY2hlY2tzdW1fcmUKKworICAgICAgICAjIHNjYW4gZm9yd2FyZCBmb3IgY2hlY2tzdW0gbGluZQorICAgICAgICBvdXRwdXRfYWRkLCBvdXRwdXRfb3V0cHV0ID0gdGV4dF9hY2N1bXVsYXRvcigpCisgICAgICAgIGFyZ3VtZW50cyA9IE5vbmUKKyAgICAgICAgd2hpbGUgc2VsZi5pbnB1dDoKKyAgICAgICAgICAgIGxpbmUgPSBzZWxmLl9saW5lKCkKKyAgICAgICAgICAgIG1hdGNoID0gY2hlY2tzdW1fcmUubWF0Y2gobGluZS5sc3RyaXAoKSkKKyAgICAgICAgICAgIGFyZ3VtZW50cyA9IG1hdGNoLmdyb3VwKDEpIGlmIG1hdGNoIGVsc2UgTm9uZQorICAgICAgICAgICAgaWYgYXJndW1lbnRzOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBvdXRwdXRfYWRkKGxpbmUpCisgICAgICAgICAgICBpZiBzZWxmLmlzX3N0YXJ0X2xpbmUobGluZSk6CisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICBvdXRwdXQgPSBvdXRwdXRfb3V0cHV0KCkKKyAgICAgICAgaWYgYXJndW1lbnRzOgorICAgICAgICAgICAgZCA9IHt9CisgICAgICAgICAgICBmb3IgZmllbGQgaW4gc2hsZXguc3BsaXQoYXJndW1lbnRzKToKKyAgICAgICAgICAgICAgICBuYW1lLCBlcXVhbHMsIHZhbHVlID0gZmllbGQucGFydGl0aW9uKCc9JykKKyAgICAgICAgICAgICAgICBpZiBub3QgZXF1YWxzOgorICAgICAgICAgICAgICAgICAgICBmYWlsKCJNYW5nbGVkIEFyZ3VtZW50IENsaW5pYyBtYXJrZXIgbGluZTogeyFyfSIuZm9ybWF0KGxpbmUpKQorICAgICAgICAgICAgICAgIGRbbmFtZS5zdHJpcCgpXSA9IHZhbHVlLnN0cmlwKCkKKworICAgICAgICAgICAgaWYgc2VsZi52ZXJpZnk6CisgICAgICAgICAgICAgICAgaWYgJ2lucHV0JyBpbiBkOgorICAgICAgICAgICAgICAgICAgICBjaGVja3N1bSA9IGRbJ291dHB1dCddCisgICAgICAgICAgICAgICAgICAgIGlucHV0X2NoZWNrc3VtID0gZFsnaW5wdXQnXQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGNoZWNrc3VtID0gZFsnY2hlY2tzdW0nXQorICAgICAgICAgICAgICAgICAgICBpbnB1dF9jaGVja3N1bSA9IE5vbmUKKworICAgICAgICAgICAgICAgIGNvbXB1dGVkID0gY29tcHV0ZV9jaGVja3N1bShvdXRwdXQsIGxlbihjaGVja3N1bSkpCisgICAgICAgICAgICAgICAgaWYgY2hlY2tzdW0gIT0gY29tcHV0ZWQ6CisgICAgICAgICAgICAgICAgICAgIGZhaWwoIkNoZWNrc3VtIG1pc21hdGNoIVxuRXhwZWN0ZWQ6IHt9XG5Db21wdXRlZDoge31cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiU3VnZ2VzdGVkIGZpeDogcmVtb3ZlIGFsbCBnZW5lcmF0ZWQgY29kZSBpbmNsdWRpbmcgIgorICAgICAgICAgICAgICAgICAgICAgICAgICJ0aGUgZW5kIG1hcmtlcixcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAib3IgdXNlIHRoZSAnLWYnIG9wdGlvbi4iCisgICAgICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KGNoZWNrc3VtLCBjb21wdXRlZCkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIHB1dCBiYWNrIG91dHB1dAorICAgICAgICAgICAgb3V0cHV0X2xpbmVzID0gb3V0cHV0LnNwbGl0bGluZXMoa2VlcGVuZHM9VHJ1ZSkKKyAgICAgICAgICAgIHNlbGYubGluZV9udW1iZXIgLT0gbGVuKG91dHB1dF9saW5lcykKKyAgICAgICAgICAgIHNlbGYuaW5wdXQuZXh0ZW5kKHJldmVyc2VkKG91dHB1dF9saW5lcykpCisgICAgICAgICAgICBvdXRwdXQgPSBOb25lCisKKyAgICAgICAgcmV0dXJuIEJsb2NrKGlucHV0X291dHB1dCgpLCBkc2xfbmFtZSwgb3V0cHV0PW91dHB1dCkKKworCitjbGFzcyBCbG9ja1ByaW50ZXI6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbGFuZ3VhZ2UsIGY9Tm9uZSk6CisgICAgICAgIHNlbGYubGFuZ3VhZ2UgPSBsYW5ndWFnZQorICAgICAgICBzZWxmLmYgPSBmIG9yIGlvLlN0cmluZ0lPKCkKKworICAgIGRlZiBwcmludF9ibG9jayhzZWxmLCBibG9jayk6CisgICAgICAgIGlucHV0ID0gYmxvY2suaW5wdXQKKyAgICAgICAgb3V0cHV0ID0gYmxvY2sub3V0cHV0CisgICAgICAgIGRzbF9uYW1lID0gYmxvY2suZHNsX25hbWUKKyAgICAgICAgd3JpdGUgPSBzZWxmLmYud3JpdGUKKworICAgICAgICBhc3NlcnQgbm90ICgoZHNsX25hbWUgPT0gTm9uZSkgXiAob3V0cHV0ID09IE5vbmUpKSwgInlvdSBtdXN0IHNwZWNpZnkgZHNsX25hbWUgYW5kIG91dHB1dCB0b2dldGhlciwgZHNsX25hbWUgIiArIHJlcHIoZHNsX25hbWUpCisKKyAgICAgICAgaWYgbm90IGRzbF9uYW1lOgorICAgICAgICAgICAgd3JpdGUoaW5wdXQpCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICB3cml0ZShzZWxmLmxhbmd1YWdlLnN0YXJ0X2xpbmUuZm9ybWF0KGRzbF9uYW1lPWRzbF9uYW1lKSkKKyAgICAgICAgd3JpdGUoIlxuIikKKworICAgICAgICBib2R5X3ByZWZpeCA9IHNlbGYubGFuZ3VhZ2UuYm9keV9wcmVmaXguZm9ybWF0KGRzbF9uYW1lPWRzbF9uYW1lKQorICAgICAgICBpZiBub3QgYm9keV9wcmVmaXg6CisgICAgICAgICAgICB3cml0ZShpbnB1dCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGlucHV0LnNwbGl0KCdcbicpOgorICAgICAgICAgICAgICAgIHdyaXRlKGJvZHlfcHJlZml4KQorICAgICAgICAgICAgICAgIHdyaXRlKGxpbmUpCisgICAgICAgICAgICAgICAgd3JpdGUoIlxuIikKKworICAgICAgICB3cml0ZShzZWxmLmxhbmd1YWdlLnN0b3BfbGluZS5mb3JtYXQoZHNsX25hbWU9ZHNsX25hbWUpKQorICAgICAgICB3cml0ZSgiXG4iKQorCisgICAgICAgIGlucHV0ID0gJycuam9pbihibG9jay5pbnB1dCkKKyAgICAgICAgb3V0cHV0ID0gJycuam9pbihibG9jay5vdXRwdXQpCisgICAgICAgIGlmIG91dHB1dDoKKyAgICAgICAgICAgIGlmIG5vdCBvdXRwdXQuZW5kc3dpdGgoJ1xuJyk6CisgICAgICAgICAgICAgICAgb3V0cHV0ICs9ICdcbicKKyAgICAgICAgICAgIHdyaXRlKG91dHB1dCkKKworICAgICAgICBhcmd1bWVudHM9Im91dHB1dD17fSBpbnB1dD17fSIuZm9ybWF0KGNvbXB1dGVfY2hlY2tzdW0ob3V0cHV0LCAxNiksIGNvbXB1dGVfY2hlY2tzdW0oaW5wdXQsIDE2KSkKKyAgICAgICAgd3JpdGUoc2VsZi5sYW5ndWFnZS5jaGVja3N1bV9saW5lLmZvcm1hdChkc2xfbmFtZT1kc2xfbmFtZSwgYXJndW1lbnRzPWFyZ3VtZW50cykpCisgICAgICAgIHdyaXRlKCJcbiIpCisKKyAgICBkZWYgd3JpdGUoc2VsZiwgdGV4dCk6CisgICAgICAgIHNlbGYuZi53cml0ZSh0ZXh0KQorCisKK2NsYXNzIERlc3RpbmF0aW9uOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCB0eXBlLCBjbGluaWMsICphcmdzKToKKyAgICAgICAgc2VsZi5uYW1lID0gbmFtZQorICAgICAgICBzZWxmLnR5cGUgPSB0eXBlCisgICAgICAgIHNlbGYuY2xpbmljID0gY2xpbmljCisgICAgICAgIHZhbGlkX3R5cGVzID0gKCdidWZmZXInLCAnZmlsZScsICdzdXBwcmVzcycsICd0d28tcGFzcycpCisgICAgICAgIGlmIHR5cGUgbm90IGluIHZhbGlkX3R5cGVzOgorICAgICAgICAgICAgZmFpbCgiSW52YWxpZCBkZXN0aW5hdGlvbiB0eXBlICIgKyByZXByKHR5cGUpICsgIiBmb3IgIiArIG5hbWUgKyAiICwgbXVzdCBiZSAiICsgJywgJy5qb2luKHZhbGlkX3R5cGVzKSkKKyAgICAgICAgZXh0cmFfYXJndW1lbnRzID0gMSBpZiB0eXBlID09ICJmaWxlIiBlbHNlIDAKKyAgICAgICAgaWYgbGVuKGFyZ3MpIDwgZXh0cmFfYXJndW1lbnRzOgorICAgICAgICAgICAgZmFpbCgiTm90IGVub3VnaCBhcmd1bWVudHMgZm9yIGRlc3RpbmF0aW9uICIgKyBuYW1lICsgIiBuZXcgIiArIHR5cGUpCisgICAgICAgIGlmIGxlbihhcmdzKSA+IGV4dHJhX2FyZ3VtZW50czoKKyAgICAgICAgICAgIGZhaWwoIlRvbyBtYW55IGFyZ3VtZW50cyBmb3IgZGVzdGluYXRpb24gIiArIG5hbWUgKyAiIG5ldyAiICsgdHlwZSkKKyAgICAgICAgaWYgdHlwZSA9PSdmaWxlJzoKKyAgICAgICAgICAgIGQgPSB7fQorICAgICAgICAgICAgZmlsZW5hbWUgPSBjbGluaWMuZmlsZW5hbWUKKyAgICAgICAgICAgIGRbJ3BhdGgnXSA9IGZpbGVuYW1lCisgICAgICAgICAgICBkaXJuYW1lLCBiYXNlbmFtZSA9IG9zLnBhdGguc3BsaXQoZmlsZW5hbWUpCisgICAgICAgICAgICBpZiBub3QgZGlybmFtZToKKyAgICAgICAgICAgICAgICBkaXJuYW1lID0gJy4nCisgICAgICAgICAgICBkWydkaXJuYW1lJ10gPSBkaXJuYW1lCisgICAgICAgICAgICBkWydiYXNlbmFtZSddID0gYmFzZW5hbWUKKyAgICAgICAgICAgIGRbJ2Jhc2VuYW1lX3Jvb3QnXSwgZFsnYmFzZW5hbWVfZXh0ZW5zaW9uJ10gPSBvcy5wYXRoLnNwbGl0ZXh0KGZpbGVuYW1lKQorICAgICAgICAgICAgc2VsZi5maWxlbmFtZSA9IGFyZ3NbMF0uZm9ybWF0X21hcChkKQorICAgICAgICBpZiB0eXBlID09ICd0d28tcGFzcyc6CisgICAgICAgICAgICBzZWxmLmlkID0gTm9uZQorCisgICAgICAgIHNlbGYudGV4dCwgc2VsZi5hcHBlbmQsIHNlbGYuX2R1bXAgPSBfdGV4dF9hY2N1bXVsYXRvcigpCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIGlmIHNlbGYudHlwZSA9PSAnZmlsZSc6CisgICAgICAgICAgICBmaWxlX3JlcHIgPSAiICIgKyByZXByKHNlbGYuZmlsZW5hbWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmaWxlX3JlcHIgPSAnJworICAgICAgICByZXR1cm4gIiIuam9pbigoIjxEZXN0aW5hdGlvbiAiLCBzZWxmLm5hbWUsICIgIiwgc2VsZi50eXBlLCBmaWxlX3JlcHIsICI+IikpCisKKyAgICBkZWYgY2xlYXIoc2VsZik6CisgICAgICAgIGlmIHNlbGYudHlwZSAhPSAnYnVmZmVyJzoKKyAgICAgICAgICAgIGZhaWwoIkNhbid0IGNsZWFyIGRlc3RpbmF0aW9uIiArIHNlbGYubmFtZSArICIgLCBpdCdzIG5vdCBvZiB0eXBlIGJ1ZmZlciIpCisgICAgICAgIHNlbGYudGV4dC5jbGVhcigpCisKKyAgICBkZWYgZHVtcChzZWxmKToKKyAgICAgICAgaWYgc2VsZi50eXBlID09ICd0d28tcGFzcyc6CisgICAgICAgICAgICBpZiBzZWxmLmlkIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgc2VsZi5pZCA9IHN0cih1dWlkLnV1aWQ0KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuaWQKKyAgICAgICAgICAgIGZhaWwoIllvdSBjYW4gb25seSBkdW1wIGEgdHdvLXBhc3MgYnVmZmVyIGV4YWN0bHkgb25jZSEiKQorICAgICAgICByZXR1cm4gc2VsZi5fZHVtcCgpCisKKworIyBtYXBzIHN0cmluZ3MgdG8gTGFuZ3VhZ2Ugb2JqZWN0cy4KKyMgImxhbmd1YWdlcyIgbWFwcyB0aGUgbmFtZSBvZiB0aGUgbGFuZ3VhZ2UgKCJDIiwgIlB5dGhvbiIpLgorIyAiZXh0ZW5zaW9ucyIgbWFwcyB0aGUgZmlsZSBleHRlbnNpb24gKCJjIiwgInB5IikuCitsYW5ndWFnZXMgPSB7ICdDJzogQ0xhbmd1YWdlLCAnUHl0aG9uJzogUHl0aG9uTGFuZ3VhZ2UgfQorZXh0ZW5zaW9ucyA9IHsgbmFtZTogQ0xhbmd1YWdlIGZvciBuYW1lIGluICJjIGNjIGNwcCBjeHggaCBoaCBocHAgaHh4Ii5zcGxpdCgpIH0KK2V4dGVuc2lvbnNbJ3B5J10gPSBQeXRob25MYW5ndWFnZQorCisKKyMgbWFwcyBzdHJpbmdzIHRvIGNhbGxhYmxlcy4KKyMgdGhlc2UgY2FsbGFibGVzIG11c3QgYmUgb2YgdGhlIGZvcm06CisjICAgZGVmIGZvbyhuYW1lLCBkZWZhdWx0LCAqLCAuLi4pCisjIFRoZSBjYWxsYWJsZSBtYXkgaGF2ZSBhbnkgbnVtYmVyIG9mIGtleXdvcmQtb25seSBwYXJhbWV0ZXJzLgorIyBUaGUgY2FsbGFibGUgbXVzdCByZXR1cm4gYSBDQ29udmVydGVyIG9iamVjdC4KKyMgVGhlIGNhbGxhYmxlIHNob3VsZCBub3QgY2FsbCBidWlsdGlucy5wcmludC4KK2NvbnZlcnRlcnMgPSB7fQorCisjIG1hcHMgc3RyaW5ncyB0byBjYWxsYWJsZXMuCisjIHRoZXNlIGNhbGxhYmxlcyBmb2xsb3cgdGhlIHNhbWUgcnVsZXMgYXMgdGhvc2UgZm9yICJjb252ZXJ0ZXJzIiBhYm92ZS4KKyMgbm90ZSBob3dldmVyIHRoYXQgdGhleSB3aWxsIG5ldmVyIGJlIGNhbGxlZCB3aXRoIGtleXdvcmQtb25seSBwYXJhbWV0ZXJzLgorbGVnYWN5X2NvbnZlcnRlcnMgPSB7fQorCisKKyMgbWFwcyBzdHJpbmdzIHRvIGNhbGxhYmxlcy4KKyMgdGhlc2UgY2FsbGFibGVzIG11c3QgYmUgb2YgdGhlIGZvcm06CisjICAgZGVmIGZvbygqLCAuLi4pCisjIFRoZSBjYWxsYWJsZSBtYXkgaGF2ZSBhbnkgbnVtYmVyIG9mIGtleXdvcmQtb25seSBwYXJhbWV0ZXJzLgorIyBUaGUgY2FsbGFibGUgbXVzdCByZXR1cm4gYSBDQ29udmVydGVyIG9iamVjdC4KKyMgVGhlIGNhbGxhYmxlIHNob3VsZCBub3QgY2FsbCBidWlsdGlucy5wcmludC4KK3JldHVybl9jb252ZXJ0ZXJzID0ge30KKworY2xpbmljID0gTm9uZQorY2xhc3MgQ2xpbmljOgorCisgICAgcHJlc2V0c190ZXh0ID0gIiIiCitwcmVzZXQgYmxvY2sKK2V2ZXJ5dGhpbmcgYmxvY2sKK2RvY3N0cmluZ19wcm90b3R5cGUgc3VwcHJlc3MKK3BhcnNlcl9wcm90b3R5cGUgc3VwcHJlc3MKK2NwcF9pZiBzdXBwcmVzcworY3BwX2VuZGlmIHN1cHByZXNzCittZXRob2RkZWZfaWZuZGVmIGJ1ZmZlcgorCitwcmVzZXQgb3JpZ2luYWwKK2V2ZXJ5dGhpbmcgYmxvY2sKK2RvY3N0cmluZ19wcm90b3R5cGUgc3VwcHJlc3MKK3BhcnNlcl9wcm90b3R5cGUgc3VwcHJlc3MKK2NwcF9pZiBzdXBwcmVzcworY3BwX2VuZGlmIHN1cHByZXNzCittZXRob2RkZWZfaWZuZGVmIGJ1ZmZlcgorCitwcmVzZXQgZmlsZQorZXZlcnl0aGluZyBmaWxlCitkb2NzdHJpbmdfcHJvdG90eXBlIHN1cHByZXNzCitwYXJzZXJfcHJvdG90eXBlIHN1cHByZXNzCitpbXBsX2RlZmluaXRpb24gYmxvY2sKKworcHJlc2V0IGJ1ZmZlcgorZXZlcnl0aGluZyBidWZmZXIKK2RvY3N0cmluZ19wcm90b3R5cGUgc3VwcHJlc3MKK2ltcGxfcHJvdG90eXBlIHN1cHByZXNzCitwYXJzZXJfcHJvdG90eXBlIHN1cHByZXNzCitpbXBsX2RlZmluaXRpb24gYmxvY2sKKworcHJlc2V0IHBhcnRpYWwtYnVmZmVyCitldmVyeXRoaW5nIGJ1ZmZlcgorZG9jc3RyaW5nX3Byb3RvdHlwZSBibG9jaworaW1wbF9wcm90b3R5cGUgc3VwcHJlc3MKK21ldGhvZGRlZl9kZWZpbmUgYmxvY2sKK3BhcnNlcl9wcm90b3R5cGUgYmxvY2sKK2ltcGxfZGVmaW5pdGlvbiBibG9jaworCitwcmVzZXQgdHdvLXBhc3MKK2V2ZXJ5dGhpbmcgYnVmZmVyCitkb2NzdHJpbmdfcHJvdG90eXBlIHR3by1wYXNzCitpbXBsX3Byb3RvdHlwZSBzdXBwcmVzcworbWV0aG9kZGVmX2RlZmluZSB0d28tcGFzcworcGFyc2VyX3Byb3RvdHlwZSB0d28tcGFzcworaW1wbF9kZWZpbml0aW9uIGJsb2NrCisKKyIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxhbmd1YWdlLCBwcmludGVyPU5vbmUsICosIGZvcmNlPUZhbHNlLCB2ZXJpZnk9VHJ1ZSwgZmlsZW5hbWU9Tm9uZSk6CisgICAgICAgICMgbWFwcyBzdHJpbmdzIHRvIFBhcnNlciBvYmplY3RzLgorICAgICAgICAjIChpbnN0YW50aWF0ZWQgZnJvbSB0aGUgInBhcnNlcnMiIGdsb2JhbC4pCisgICAgICAgIHNlbGYucGFyc2VycyA9IHt9CisgICAgICAgIHNlbGYubGFuZ3VhZ2UgPSBsYW5ndWFnZQorICAgICAgICBpZiBwcmludGVyOgorICAgICAgICAgICAgZmFpbCgiQ3VzdG9tIHByaW50ZXJzIGFyZSBicm9rZW4gcmlnaHQgbm93IikKKyAgICAgICAgc2VsZi5wcmludGVyID0gcHJpbnRlciBvciBCbG9ja1ByaW50ZXIobGFuZ3VhZ2UpCisgICAgICAgIHNlbGYudmVyaWZ5ID0gdmVyaWZ5CisgICAgICAgIHNlbGYuZm9yY2UgPSBmb3JjZQorICAgICAgICBzZWxmLmZpbGVuYW1lID0gZmlsZW5hbWUKKyAgICAgICAgc2VsZi5tb2R1bGVzID0gY29sbGVjdGlvbnMuT3JkZXJlZERpY3QoKQorICAgICAgICBzZWxmLmNsYXNzZXMgPSBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdCgpCisgICAgICAgIHNlbGYuZnVuY3Rpb25zID0gW10KKworICAgICAgICBzZWxmLmxpbmVfcHJlZml4ID0gc2VsZi5saW5lX3N1ZmZpeCA9ICcnCisKKyAgICAgICAgc2VsZi5kZXN0aW5hdGlvbnMgPSB7fQorICAgICAgICBzZWxmLmFkZF9kZXN0aW5hdGlvbigiYmxvY2siLCAiYnVmZmVyIikKKyAgICAgICAgc2VsZi5hZGRfZGVzdGluYXRpb24oInN1cHByZXNzIiwgInN1cHByZXNzIikKKyAgICAgICAgc2VsZi5hZGRfZGVzdGluYXRpb24oImJ1ZmZlciIsICJidWZmZXIiKQorICAgICAgICBzZWxmLmFkZF9kZXN0aW5hdGlvbigidHdvLXBhc3MiLCAidHdvLXBhc3MiKQorICAgICAgICBpZiBmaWxlbmFtZToKKyAgICAgICAgICAgIHNlbGYuYWRkX2Rlc3RpbmF0aW9uKCJmaWxlIiwgImZpbGUiLCAie2Rpcm5hbWV9L2NsaW5pYy97YmFzZW5hbWV9LmgiKQorCisgICAgICAgIGQgPSBzZWxmLmRlc3RpbmF0aW9ucy5nZXQKKyAgICAgICAgc2VsZi5maWVsZF9kZXN0aW5hdGlvbnMgPSBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdCgoCisgICAgICAgICAgICAoJ2NwcF9pZicsIGQoJ3N1cHByZXNzJykpLAorICAgICAgICAgICAgKCdkb2NzdHJpbmdfcHJvdG90eXBlJywgZCgnc3VwcHJlc3MnKSksCisgICAgICAgICAgICAoJ2RvY3N0cmluZ19kZWZpbml0aW9uJywgZCgnYmxvY2snKSksCisgICAgICAgICAgICAoJ21ldGhvZGRlZl9kZWZpbmUnLCBkKCdibG9jaycpKSwKKyAgICAgICAgICAgICgnaW1wbF9wcm90b3R5cGUnLCBkKCdibG9jaycpKSwKKyAgICAgICAgICAgICgncGFyc2VyX3Byb3RvdHlwZScsIGQoJ3N1cHByZXNzJykpLAorICAgICAgICAgICAgKCdwYXJzZXJfZGVmaW5pdGlvbicsIGQoJ2Jsb2NrJykpLAorICAgICAgICAgICAgKCdjcHBfZW5kaWYnLCBkKCdzdXBwcmVzcycpKSwKKyAgICAgICAgICAgICgnbWV0aG9kZGVmX2lmbmRlZicsIGQoJ2J1ZmZlcicpKSwKKyAgICAgICAgICAgICgnaW1wbF9kZWZpbml0aW9uJywgZCgnYmxvY2snKSksCisgICAgICAgICkpCisKKyAgICAgICAgc2VsZi5maWVsZF9kZXN0aW5hdGlvbnNfc3RhY2sgPSBbXQorCisgICAgICAgIHNlbGYucHJlc2V0cyA9IHt9CisgICAgICAgIHByZXNldCA9IE5vbmUKKyAgICAgICAgZm9yIGxpbmUgaW4gc2VsZi5wcmVzZXRzX3RleHQuc3RyaXAoKS5zcGxpdCgnXG4nKToKKyAgICAgICAgICAgIGxpbmUgPSBsaW5lLnN0cmlwKCkKKyAgICAgICAgICAgIGlmIG5vdCBsaW5lOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBuYW1lLCB2YWx1ZSA9IGxpbmUuc3BsaXQoKQorICAgICAgICAgICAgaWYgbmFtZSA9PSAncHJlc2V0JzoKKyAgICAgICAgICAgICAgICBzZWxmLnByZXNldHNbdmFsdWVdID0gcHJlc2V0ID0gY29sbGVjdGlvbnMuT3JkZXJlZERpY3QoKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uID0gc2VsZi5nZXRfZGVzdGluYXRpb24odmFsdWUpCisKKyAgICAgICAgICAgIGlmIG5hbWUgPT0gJ2V2ZXJ5dGhpbmcnOgorICAgICAgICAgICAgICAgIGZvciBuYW1lIGluIHNlbGYuZmllbGRfZGVzdGluYXRpb25zOgorICAgICAgICAgICAgICAgICAgICBwcmVzZXRbbmFtZV0gPSBkZXN0aW5hdGlvbgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGFzc2VydCBuYW1lIGluIHNlbGYuZmllbGRfZGVzdGluYXRpb25zCisgICAgICAgICAgICBwcmVzZXRbbmFtZV0gPSBkZXN0aW5hdGlvbgorCisgICAgICAgIGdsb2JhbCBjbGluaWMKKyAgICAgICAgY2xpbmljID0gc2VsZgorCisgICAgZGVmIGdldF9kZXN0aW5hdGlvbihzZWxmLCBuYW1lLCBkZWZhdWx0PXVuc3BlY2lmaWVkKToKKyAgICAgICAgZCA9IHNlbGYuZGVzdGluYXRpb25zLmdldChuYW1lKQorICAgICAgICBpZiBub3QgZDoKKyAgICAgICAgICAgIGlmIGRlZmF1bHQgaXMgbm90IHVuc3BlY2lmaWVkOgorICAgICAgICAgICAgICAgIHJldHVybiBkZWZhdWx0CisgICAgICAgICAgICBmYWlsKCJEZXN0aW5hdGlvbiBkb2VzIG5vdCBleGlzdDogIiArIHJlcHIobmFtZSkpCisgICAgICAgIHJldHVybiBkCisKKyAgICBkZWYgYWRkX2Rlc3RpbmF0aW9uKHNlbGYsIG5hbWUsIHR5cGUsICphcmdzKToKKyAgICAgICAgaWYgbmFtZSBpbiBzZWxmLmRlc3RpbmF0aW9uczoKKyAgICAgICAgICAgIGZhaWwoIkRlc3RpbmF0aW9uIGFscmVhZHkgZXhpc3RzOiAiICsgcmVwcihuYW1lKSkKKyAgICAgICAgc2VsZi5kZXN0aW5hdGlvbnNbbmFtZV0gPSBEZXN0aW5hdGlvbihuYW1lLCB0eXBlLCBzZWxmLCAqYXJncykKKworICAgIGRlZiBwYXJzZShzZWxmLCBpbnB1dCk6CisgICAgICAgIHByaW50ZXIgPSBzZWxmLnByaW50ZXIKKyAgICAgICAgc2VsZi5ibG9ja19wYXJzZXIgPSBCbG9ja1BhcnNlcihpbnB1dCwgc2VsZi5sYW5ndWFnZSwgdmVyaWZ5PXNlbGYudmVyaWZ5KQorICAgICAgICBmb3IgYmxvY2sgaW4gc2VsZi5ibG9ja19wYXJzZXI6CisgICAgICAgICAgICBkc2xfbmFtZSA9IGJsb2NrLmRzbF9uYW1lCisgICAgICAgICAgICBpZiBkc2xfbmFtZToKKyAgICAgICAgICAgICAgICBpZiBkc2xfbmFtZSBub3QgaW4gc2VsZi5wYXJzZXJzOgorICAgICAgICAgICAgICAgICAgICBhc3NlcnQgZHNsX25hbWUgaW4gcGFyc2VycywgIk5vIHBhcnNlciB0byBoYW5kbGUgeyFyfSBibG9jay4iLmZvcm1hdChkc2xfbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5wYXJzZXJzW2RzbF9uYW1lXSA9IHBhcnNlcnNbZHNsX25hbWVdKHNlbGYpCisgICAgICAgICAgICAgICAgcGFyc2VyID0gc2VsZi5wYXJzZXJzW2RzbF9uYW1lXQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgcGFyc2VyLnBhcnNlKGJsb2NrKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICAgICAgICAgIGZhaWwoJ0V4Y2VwdGlvbiByYWlzZWQgZHVyaW5nIHBhcnNpbmc6XG4nICsKKyAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjZWJhY2suZm9ybWF0X2V4YygpLnJzdHJpcCgpKQorICAgICAgICAgICAgcHJpbnRlci5wcmludF9ibG9jayhibG9jaykKKworICAgICAgICBzZWNvbmRfcGFzc19yZXBsYWNlbWVudHMgPSB7fQorCisgICAgICAgIGZvciBuYW1lLCBkZXN0aW5hdGlvbiBpbiBzZWxmLmRlc3RpbmF0aW9ucy5pdGVtcygpOgorICAgICAgICAgICAgaWYgZGVzdGluYXRpb24udHlwZSA9PSAnc3VwcHJlc3MnOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBvdXRwdXQgPSBkZXN0aW5hdGlvbi5fZHVtcCgpCisKKyAgICAgICAgICAgIGlmIGRlc3RpbmF0aW9uLnR5cGUgPT0gJ3R3by1wYXNzJzoKKyAgICAgICAgICAgICAgICBpZiBkZXN0aW5hdGlvbi5pZDoKKyAgICAgICAgICAgICAgICAgICAgc2Vjb25kX3Bhc3NfcmVwbGFjZW1lbnRzW2Rlc3RpbmF0aW9uLmlkXSA9IG91dHB1dAorICAgICAgICAgICAgICAgIGVsaWYgb3V0cHV0OgorICAgICAgICAgICAgICAgICAgICBmYWlsKCJUd28tcGFzcyBidWZmZXIgIiArIHJlcHIobmFtZSkgKyAiIG5vdCBlbXB0eSBhdCBlbmQgb2YgZmlsZSEiKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGlmIG91dHB1dDoKKworICAgICAgICAgICAgICAgIGJsb2NrID0gQmxvY2soIiIsIGRzbF9uYW1lPSJjbGluaWMiLCBvdXRwdXQ9b3V0cHV0KQorCisgICAgICAgICAgICAgICAgaWYgZGVzdGluYXRpb24udHlwZSA9PSAnYnVmZmVyJzoKKyAgICAgICAgICAgICAgICAgICAgYmxvY2suaW5wdXQgPSAiZHVtcCAiICsgbmFtZSArICJcbiIKKyAgICAgICAgICAgICAgICAgICAgd2FybigiRGVzdGluYXRpb24gYnVmZmVyICIgKyByZXByKG5hbWUpICsgIiBub3QgZW1wdHkgYXQgZW5kIG9mIGZpbGUsIGVtcHR5aW5nLiIpCisgICAgICAgICAgICAgICAgICAgIHByaW50ZXIud3JpdGUoIlxuIikKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRlci5wcmludF9ibG9jayhibG9jaykKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgIGlmIGRlc3RpbmF0aW9uLnR5cGUgPT0gJ2ZpbGUnOgorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBkaXJuYW1lID0gb3MucGF0aC5kaXJuYW1lKGRlc3RpbmF0aW9uLmZpbGVuYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLm1ha2VkaXJzKGRpcm5hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgRmlsZUV4aXN0c0Vycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKGRpcm5hbWUpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWlsKCJDYW4ndCB3cml0ZSB0byBkZXN0aW5hdGlvbiB7fSwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjYW4ndCBtYWtlIGRpcmVjdG9yeSB7fSEiLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi5maWxlbmFtZSwgZGlybmFtZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLnZlcmlmeToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIG9wZW4oZGVzdGluYXRpb24uZmlsZW5hbWUsICJydCIpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlcl8yID0gQmxvY2tQYXJzZXIoZi5yZWFkKCksIGxhbmd1YWdlPXNlbGYubGFuZ3VhZ2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrcyA9IGxpc3QocGFyc2VyXzIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsZW4oYmxvY2tzKSAhPSAxKSBvciAoYmxvY2tzWzBdLmlucHV0ICE9ICdwcmVzZXJ2ZVxuJyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWlsKCJNb2RpZmllZCBkZXN0aW5hdGlvbiBmaWxlICIgKyByZXByKGRlc3RpbmF0aW9uLmZpbGVuYW1lKSArICIsIG5vdCBvdmVyd3JpdGluZyEiKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgRmlsZU5vdEZvdW5kRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgICAgICAgICAgICAgYmxvY2suaW5wdXQgPSAncHJlc2VydmVcbicKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRlcl8yID0gQmxvY2tQcmludGVyKHNlbGYubGFuZ3VhZ2UpCisgICAgICAgICAgICAgICAgICAgIHByaW50ZXJfMi5wcmludF9ibG9jayhibG9jaykKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBvcGVuKGRlc3RpbmF0aW9uLmZpbGVuYW1lLCAid3QiKSBhcyBmOgorICAgICAgICAgICAgICAgICAgICAgICAgZi53cml0ZShwcmludGVyXzIuZi5nZXR2YWx1ZSgpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICB0ZXh0ID0gcHJpbnRlci5mLmdldHZhbHVlKCkKKworICAgICAgICBpZiBzZWNvbmRfcGFzc19yZXBsYWNlbWVudHM6CisgICAgICAgICAgICBwcmludGVyXzIgPSBCbG9ja1ByaW50ZXIoc2VsZi5sYW5ndWFnZSkKKyAgICAgICAgICAgIHBhcnNlcl8yID0gQmxvY2tQYXJzZXIodGV4dCwgc2VsZi5sYW5ndWFnZSkKKyAgICAgICAgICAgIGNoYW5nZWQgPSBGYWxzZQorICAgICAgICAgICAgZm9yIGJsb2NrIGluIHBhcnNlcl8yOgorICAgICAgICAgICAgICAgIGlmIGJsb2NrLmRzbF9uYW1lOgorICAgICAgICAgICAgICAgICAgICBmb3IgaWQsIHJlcGxhY2VtZW50IGluIHNlY29uZF9wYXNzX3JlcGxhY2VtZW50cy5pdGVtcygpOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgaWQgaW4gYmxvY2sub3V0cHV0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2sub3V0cHV0ID0gYmxvY2sub3V0cHV0LnJlcGxhY2UoaWQsIHJlcGxhY2VtZW50KQorICAgICAgICAgICAgICAgIHByaW50ZXJfMi5wcmludF9ibG9jayhibG9jaykKKyAgICAgICAgICAgIGlmIGNoYW5nZWQ6CisgICAgICAgICAgICAgICAgdGV4dCA9IHByaW50ZXJfMi5mLmdldHZhbHVlKCkKKworICAgICAgICByZXR1cm4gdGV4dAorCisKKyAgICBkZWYgX21vZHVsZV9hbmRfY2xhc3Moc2VsZiwgZmllbGRzKToKKyAgICAgICAgIiIiCisgICAgICAgIGZpZWxkcyBzaG91bGQgYmUgYW4gaXRlcmFibGUgb2YgZmllbGQgbmFtZXMuCisgICAgICAgIHJldHVybnMgYSB0dXBsZSBvZiAobW9kdWxlLCBjbGFzcykuCisgICAgICAgIHRoZSBtb2R1bGUgb2JqZWN0IGNvdWxkIGFjdHVhbGx5IGJlIHNlbGYgKGEgY2xpbmljIG9iamVjdCkuCisgICAgICAgIHRoaXMgZnVuY3Rpb24gaXMgb25seSBldmVyIHVzZWQgdG8gZmluZCB0aGUgcGFyZW50IG9mIHdoZXJlCisgICAgICAgIGEgbmV3IGNsYXNzL21vZHVsZSBzaG91bGQgZ28uCisgICAgICAgICIiIgorICAgICAgICBpbl9jbGFzc2VzID0gRmFsc2UKKyAgICAgICAgcGFyZW50ID0gbW9kdWxlID0gc2VsZgorICAgICAgICBjbHMgPSBOb25lCisgICAgICAgIHNvX2ZhciA9IFtdCisKKyAgICAgICAgZm9yIGZpZWxkIGluIGZpZWxkczoKKyAgICAgICAgICAgIHNvX2Zhci5hcHBlbmQoZmllbGQpCisgICAgICAgICAgICBpZiBub3QgaW5fY2xhc3NlczoKKyAgICAgICAgICAgICAgICBjaGlsZCA9IHBhcmVudC5tb2R1bGVzLmdldChmaWVsZCkKKyAgICAgICAgICAgICAgICBpZiBjaGlsZDoKKyAgICAgICAgICAgICAgICAgICAgcGFyZW50ID0gbW9kdWxlID0gY2hpbGQKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBpbl9jbGFzc2VzID0gVHJ1ZQorICAgICAgICAgICAgaWYgbm90IGhhc2F0dHIocGFyZW50LCAnY2xhc3NlcycpOgorICAgICAgICAgICAgICAgIHJldHVybiBtb2R1bGUsIGNscworICAgICAgICAgICAgY2hpbGQgPSBwYXJlbnQuY2xhc3Nlcy5nZXQoZmllbGQpCisgICAgICAgICAgICBpZiBub3QgY2hpbGQ6CisgICAgICAgICAgICAgICAgZmFpbCgnUGFyZW50IGNsYXNzIG9yIG1vZHVsZSAnICsgJy4nLmpvaW4oc29fZmFyKSArICIgZG9lcyBub3QgZXhpc3QuIikKKyAgICAgICAgICAgIGNscyA9IHBhcmVudCA9IGNoaWxkCisKKyAgICAgICAgcmV0dXJuIG1vZHVsZSwgY2xzCisKKworZGVmIHBhcnNlX2ZpbGUoZmlsZW5hbWUsICosIGZvcmNlPUZhbHNlLCB2ZXJpZnk9VHJ1ZSwgb3V0cHV0PU5vbmUsIGVuY29kaW5nPSd1dGYtOCcpOgorICAgIGV4dGVuc2lvbiA9IG9zLnBhdGguc3BsaXRleHQoZmlsZW5hbWUpWzFdWzE6XQorICAgIGlmIG5vdCBleHRlbnNpb246CisgICAgICAgIGZhaWwoIkNhbid0IGV4dHJhY3QgZmlsZSB0eXBlIGZvciBmaWxlICIgKyByZXByKGZpbGVuYW1lKSkKKworICAgIHRyeToKKyAgICAgICAgbGFuZ3VhZ2UgPSBleHRlbnNpb25zW2V4dGVuc2lvbl0oZmlsZW5hbWUpCisgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICBmYWlsKCJDYW4ndCBpZGVudGlmeSBmaWxlIHR5cGUgZm9yIGZpbGUgIiArIHJlcHIoZmlsZW5hbWUpKQorCisgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAncicsIGVuY29kaW5nPWVuY29kaW5nKSBhcyBmOgorICAgICAgICByYXcgPSBmLnJlYWQoKQorCisgICAgIyBleGl0IHF1aWNrbHkgaWYgdGhlcmUgYXJlIG5vIGNsaW5pYyBtYXJrZXJzIGluIHRoZSBmaWxlCisgICAgZmluZF9zdGFydF9yZSA9IEJsb2NrUGFyc2VyKCIiLCBsYW5ndWFnZSkuZmluZF9zdGFydF9yZQorICAgIGlmIG5vdCBmaW5kX3N0YXJ0X3JlLnNlYXJjaChyYXcpOgorICAgICAgICByZXR1cm4KKworICAgIGNsaW5pYyA9IENsaW5pYyhsYW5ndWFnZSwgZm9yY2U9Zm9yY2UsIHZlcmlmeT12ZXJpZnksIGZpbGVuYW1lPWZpbGVuYW1lKQorICAgIGNvb2tlZCA9IGNsaW5pYy5wYXJzZShyYXcpCisgICAgaWYgKGNvb2tlZCA9PSByYXcpIGFuZCBub3QgZm9yY2U6CisgICAgICAgIHJldHVybgorCisgICAgZGlyZWN0b3J5ID0gb3MucGF0aC5kaXJuYW1lKGZpbGVuYW1lKSBvciAnLicKKworICAgIHdpdGggdGVtcGZpbGUuVGVtcG9yYXJ5RGlyZWN0b3J5KHByZWZpeD0iY2xpbmljIiwgZGlyPWRpcmVjdG9yeSkgYXMgdG1wZGlyOgorICAgICAgICBieXRlcyA9IGNvb2tlZC5lbmNvZGUoZW5jb2RpbmcpCisgICAgICAgIHRtcGZpbGVuYW1lID0gb3MucGF0aC5qb2luKHRtcGRpciwgb3MucGF0aC5iYXNlbmFtZShmaWxlbmFtZSkpCisgICAgICAgIHdpdGggb3Blbih0bXBmaWxlbmFtZSwgIndiIikgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoYnl0ZXMpCisgICAgICAgIG9zLnJlcGxhY2UodG1wZmlsZW5hbWUsIG91dHB1dCBvciBmaWxlbmFtZSkKKworCitkZWYgY29tcHV0ZV9jaGVja3N1bShpbnB1dCwgbGVuZ3RoPU5vbmUpOgorICAgIGlucHV0ID0gaW5wdXQgb3IgJycKKyAgICBzID0gaGFzaGxpYi5zaGExKGlucHV0LmVuY29kZSgndXRmLTgnKSkuaGV4ZGlnZXN0KCkKKyAgICBpZiBsZW5ndGg6CisgICAgICAgIHMgPSBzWzpsZW5ndGhdCisgICAgcmV0dXJuIHMKKworCisKKworY2xhc3MgUHl0aG9uUGFyc2VyOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjbGluaWMpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgcGFyc2Uoc2VsZiwgYmxvY2spOgorICAgICAgICBzID0gaW8uU3RyaW5nSU8oKQorICAgICAgICB3aXRoIE92ZXJyaWRlU3RkaW9XaXRoKHMpOgorICAgICAgICAgICAgZXhlYyhibG9jay5pbnB1dCkKKyAgICAgICAgYmxvY2sub3V0cHV0ID0gcy5nZXR2YWx1ZSgpCisKKworY2xhc3MgTW9kdWxlOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBtb2R1bGU9Tm9uZSk6CisgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKKyAgICAgICAgc2VsZi5tb2R1bGUgPSBzZWxmLnBhcmVudCA9IG1vZHVsZQorCisgICAgICAgIHNlbGYubW9kdWxlcyA9IGNvbGxlY3Rpb25zLk9yZGVyZWREaWN0KCkKKyAgICAgICAgc2VsZi5jbGFzc2VzID0gY29sbGVjdGlvbnMuT3JkZXJlZERpY3QoKQorICAgICAgICBzZWxmLmZ1bmN0aW9ucyA9IFtdCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiPGNsaW5pYy5Nb2R1bGUgIiArIHJlcHIoc2VsZi5uYW1lKSArICIgYXQgIiArIHN0cihpZChzZWxmKSkgKyAiPiIKKworY2xhc3MgQ2xhc3M6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIG1vZHVsZT1Ob25lLCBjbHM9Tm9uZSwgdHlwZWRlZj1Ob25lLCB0eXBlX29iamVjdD1Ob25lKToKKyAgICAgICAgc2VsZi5uYW1lID0gbmFtZQorICAgICAgICBzZWxmLm1vZHVsZSA9IG1vZHVsZQorICAgICAgICBzZWxmLmNscyA9IGNscworICAgICAgICBzZWxmLnR5cGVkZWYgPSB0eXBlZGVmCisgICAgICAgIHNlbGYudHlwZV9vYmplY3QgPSB0eXBlX29iamVjdAorICAgICAgICBzZWxmLnBhcmVudCA9IGNscyBvciBtb2R1bGUKKworICAgICAgICBzZWxmLmNsYXNzZXMgPSBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdCgpCisgICAgICAgIHNlbGYuZnVuY3Rpb25zID0gW10KKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICI8Y2xpbmljLkNsYXNzICIgKyByZXByKHNlbGYubmFtZSkgKyAiIGF0ICIgKyBzdHIoaWQoc2VsZikpICsgIj4iCisKK3Vuc3VwcG9ydGVkX3NwZWNpYWxfbWV0aG9kcyA9IHNldCgiIiIKKworX19hYnNfXworX19hZGRfXworX19hbmRfXworX19ieXRlc19fCitfX2NhbGxfXworX19jb21wbGV4X18KK19fZGVsaXRlbV9fCitfX2Rpdm1vZF9fCitfX2VxX18KK19fZmxvYXRfXworX19mbG9vcmRpdl9fCitfX2dlX18KK19fZ2V0YXR0cl9fCitfX2dldGF0dHJpYnV0ZV9fCitfX2dldGl0ZW1fXworX19ndF9fCitfX2hhc2hfXworX19pYWRkX18KK19faWFuZF9fCitfX2lmbG9vcmRpdl9fCitfX2lsc2hpZnRfXworX19pbW9kX18KK19faW11bF9fCitfX2luZGV4X18KK19faW50X18KK19faW52ZXJ0X18KK19faW9yX18KK19faXBvd19fCitfX2lyc2hpZnRfXworX19pc3ViX18KK19faXRlcl9fCitfX2l0cnVlZGl2X18KK19faXhvcl9fCitfX2xlX18KK19fbGVuX18KK19fbHNoaWZ0X18KK19fbHRfXworX19tb2RfXworX19tdWxfXworX19uZWdfXworX19uZXdfXworX19uZXh0X18KK19fb3JfXworX19wb3NfXworX19wb3dfXworX19yYWRkX18KK19fcmFuZF9fCitfX3JkaXZtb2RfXworX19yZXByX18KK19fcmZsb29yZGl2X18KK19fcmxzaGlmdF9fCitfX3Jtb2RfXworX19ybXVsX18KK19fcm9yX18KK19fcm91bmRfXworX19ycG93X18KK19fcnJzaGlmdF9fCitfX3JzaGlmdF9fCitfX3JzdWJfXworX19ydHJ1ZWRpdl9fCitfX3J4b3JfXworX19zZXRhdHRyX18KK19fc2V0aXRlbV9fCitfX3N0cl9fCitfX3N1Yl9fCitfX3RydWVkaXZfXworX194b3JfXworCisiIiIuc3RyaXAoKS5zcGxpdCgpKQorCisKK0lOVkFMSUQsIENBTExBQkxFLCBTVEFUSUNfTUVUSE9ELCBDTEFTU19NRVRIT0QsIE1FVEhPRF9JTklULCBNRVRIT0RfTkVXID0gIiIiCitJTlZBTElELCBDQUxMQUJMRSwgU1RBVElDX01FVEhPRCwgQ0xBU1NfTUVUSE9ELCBNRVRIT0RfSU5JVCwgTUVUSE9EX05FVworIiIiLnJlcGxhY2UoIiwiLCAiIikuc3RyaXAoKS5zcGxpdCgpCisKK2NsYXNzIEZ1bmN0aW9uOgorICAgICIiIgorICAgIE11dGFibGUgZHVjayB0eXBlIGZvciBpbnNwZWN0LkZ1bmN0aW9uLgorCisgICAgZG9jc3RyaW5nIC0gYSBzdHIgY29udGFpbmluZworICAgICAgICAqIGVtYmVkZGVkIGxpbmUgYnJlYWtzCisgICAgICAgICogdGV4dCBvdXRkZW50ZWQgdG8gdGhlIGxlZnQgbWFyZ2luCisgICAgICAgICogbm8gdHJhaWxpbmcgd2hpdGVzcGFjZS4KKyAgICAgICAgSXQgd2lsbCBhbHdheXMgYmUgdHJ1ZSB0aGF0CisgICAgICAgICAgICAobm90IGRvY3N0cmluZykgb3IgKChub3QgZG9jc3RyaW5nWzBdLmlzc3BhY2UoKSkgYW5kIChkb2NzdHJpbmcucnN0cmlwKCkgPT0gZG9jc3RyaW5nKSkKKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXJhbWV0ZXJzPU5vbmUsICosIG5hbWUsCisgICAgICAgICAgICAgICAgIG1vZHVsZSwgY2xzPU5vbmUsIGNfYmFzZW5hbWU9Tm9uZSwKKyAgICAgICAgICAgICAgICAgZnVsbF9uYW1lPU5vbmUsCisgICAgICAgICAgICAgICAgIHJldHVybl9jb252ZXJ0ZXIsIHJldHVybl9hbm5vdGF0aW9uPV9lbXB0eSwKKyAgICAgICAgICAgICAgICAgZG9jc3RyaW5nPU5vbmUsIGtpbmQ9Q0FMTEFCTEUsIGNvZXhpc3Q9RmFsc2UsCisgICAgICAgICAgICAgICAgIGRvY3N0cmluZ19vbmx5PUZhbHNlKToKKyAgICAgICAgc2VsZi5wYXJhbWV0ZXJzID0gcGFyYW1ldGVycyBvciBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdCgpCisgICAgICAgIHNlbGYucmV0dXJuX2Fubm90YXRpb24gPSByZXR1cm5fYW5ub3RhdGlvbgorICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCisgICAgICAgIHNlbGYuZnVsbF9uYW1lID0gZnVsbF9uYW1lCisgICAgICAgIHNlbGYubW9kdWxlID0gbW9kdWxlCisgICAgICAgIHNlbGYuY2xzID0gY2xzCisgICAgICAgIHNlbGYucGFyZW50ID0gY2xzIG9yIG1vZHVsZQorICAgICAgICBzZWxmLmNfYmFzZW5hbWUgPSBjX2Jhc2VuYW1lCisgICAgICAgIHNlbGYucmV0dXJuX2NvbnZlcnRlciA9IHJldHVybl9jb252ZXJ0ZXIKKyAgICAgICAgc2VsZi5kb2NzdHJpbmcgPSBkb2NzdHJpbmcgb3IgJycKKyAgICAgICAgc2VsZi5raW5kID0ga2luZAorICAgICAgICBzZWxmLmNvZXhpc3QgPSBjb2V4aXN0CisgICAgICAgIHNlbGYuc2VsZl9jb252ZXJ0ZXIgPSBOb25lCisgICAgICAgICMgZG9jc3RyaW5nX29ubHkgbWVhbnMgImRvbid0IGdlbmVyYXRlIGEgbWFjaGluZS1yZWFkYWJsZQorICAgICAgICAjIHNpZ25hdHVyZSwganVzdCBhIG5vcm1hbCBkb2NzdHJpbmciLiAgaXQncyBUcnVlIGZvcgorICAgICAgICAjIGZ1bmN0aW9ucyB3aXRoIG9wdGlvbmFsIGdyb3VwcyBiZWNhdXNlIHdlIGNhbid0IHJlcHJlc2VudAorICAgICAgICAjIHRob3NlIGFjY3VyYXRlbHkgd2l0aCBpbnNwZWN0LlNpZ25hdHVyZSBpbiAzLjQuCisgICAgICAgIHNlbGYuZG9jc3RyaW5nX29ubHkgPSBkb2NzdHJpbmdfb25seQorCisgICAgICAgIHNlbGYucmVuZGVyZWRfcGFyYW1ldGVycyA9IE5vbmUKKworICAgIF9fcmVuZGVyX3BhcmFtZXRlcnNfXyA9IE5vbmUKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgcmVuZGVyX3BhcmFtZXRlcnMoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLl9fcmVuZGVyX3BhcmFtZXRlcnNfXzoKKyAgICAgICAgICAgIHNlbGYuX19yZW5kZXJfcGFyYW1ldGVyc19fID0gbCA9IFtdCisgICAgICAgICAgICBmb3IgcCBpbiBzZWxmLnBhcmFtZXRlcnMudmFsdWVzKCk6CisgICAgICAgICAgICAgICAgcCA9IHAuY29weSgpCisgICAgICAgICAgICAgICAgcC5jb252ZXJ0ZXIucHJlX3JlbmRlcigpCisgICAgICAgICAgICAgICAgbC5hcHBlbmQocCkKKyAgICAgICAgcmV0dXJuIHNlbGYuX19yZW5kZXJfcGFyYW1ldGVyc19fCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgbWV0aG9kZGVmX2ZsYWdzKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmtpbmQgaW4gKE1FVEhPRF9JTklULCBNRVRIT0RfTkVXKToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIGZsYWdzID0gW10KKyAgICAgICAgaWYgc2VsZi5raW5kID09IENMQVNTX01FVEhPRDoKKyAgICAgICAgICAgIGZsYWdzLmFwcGVuZCgnTUVUSF9DTEFTUycpCisgICAgICAgIGVsaWYgc2VsZi5raW5kID09IFNUQVRJQ19NRVRIT0Q6CisgICAgICAgICAgICBmbGFncy5hcHBlbmQoJ01FVEhfU1RBVElDJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFzc2VydCBzZWxmLmtpbmQgPT0gQ0FMTEFCTEUsICJ1bmtub3duIGtpbmQ6ICIgKyByZXByKHNlbGYua2luZCkKKyAgICAgICAgaWYgc2VsZi5jb2V4aXN0OgorICAgICAgICAgICAgZmxhZ3MuYXBwZW5kKCdNRVRIX0NPRVhJU1QnKQorICAgICAgICByZXR1cm4gJ3wnLmpvaW4oZmxhZ3MpCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAnPGNsaW5pYy5GdW5jdGlvbiAnICsgc2VsZi5uYW1lICsgJz4nCisKKyAgICBkZWYgY29weShzZWxmLCAqKm92ZXJyaWRlcyk6CisgICAgICAgIGt3YXJncyA9IHsKKyAgICAgICAgICAgICduYW1lJzogc2VsZi5uYW1lLCAnbW9kdWxlJzogc2VsZi5tb2R1bGUsICdwYXJhbWV0ZXJzJzogc2VsZi5wYXJhbWV0ZXJzLAorICAgICAgICAgICAgJ2Nscyc6IHNlbGYuY2xzLCAnY19iYXNlbmFtZSc6IHNlbGYuY19iYXNlbmFtZSwKKyAgICAgICAgICAgICdmdWxsX25hbWUnOiBzZWxmLmZ1bGxfbmFtZSwKKyAgICAgICAgICAgICdyZXR1cm5fY29udmVydGVyJzogc2VsZi5yZXR1cm5fY29udmVydGVyLCAncmV0dXJuX2Fubm90YXRpb24nOiBzZWxmLnJldHVybl9hbm5vdGF0aW9uLAorICAgICAgICAgICAgJ2RvY3N0cmluZyc6IHNlbGYuZG9jc3RyaW5nLCAna2luZCc6IHNlbGYua2luZCwgJ2NvZXhpc3QnOiBzZWxmLmNvZXhpc3QsCisgICAgICAgICAgICAnZG9jc3RyaW5nX29ubHknOiBzZWxmLmRvY3N0cmluZ19vbmx5LAorICAgICAgICAgICAgfQorICAgICAgICBrd2FyZ3MudXBkYXRlKG92ZXJyaWRlcykKKyAgICAgICAgZiA9IEZ1bmN0aW9uKCoqa3dhcmdzKQorCisgICAgICAgIHBhcmFtZXRlcnMgPSBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdCgpCisgICAgICAgIGZvciBuYW1lLCB2YWx1ZSBpbiBmLnBhcmFtZXRlcnMuaXRlbXMoKToKKyAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuY29weShmdW5jdGlvbj1mKQorICAgICAgICAgICAgcGFyYW1ldGVyc1tuYW1lXSA9IHZhbHVlCisgICAgICAgIGYucGFyYW1ldGVycyA9IHBhcmFtZXRlcnMKKyAgICAgICAgcmV0dXJuIGYKKworCitjbGFzcyBQYXJhbWV0ZXI6CisgICAgIiIiCisgICAgTXV0YWJsZSBkdWNrIHR5cGUgb2YgaW5zcGVjdC5QYXJhbWV0ZXIuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwga2luZCwgKiwgZGVmYXVsdD1fZW1wdHksCisgICAgICAgICAgICAgICAgIGZ1bmN0aW9uLCBjb252ZXJ0ZXIsIGFubm90YXRpb249X2VtcHR5LAorICAgICAgICAgICAgICAgICBkb2NzdHJpbmc9Tm9uZSwgZ3JvdXA9MCk6CisgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKKyAgICAgICAgc2VsZi5raW5kID0ga2luZAorICAgICAgICBzZWxmLmRlZmF1bHQgPSBkZWZhdWx0CisgICAgICAgIHNlbGYuZnVuY3Rpb24gPSBmdW5jdGlvbgorICAgICAgICBzZWxmLmNvbnZlcnRlciA9IGNvbnZlcnRlcgorICAgICAgICBzZWxmLmFubm90YXRpb24gPSBhbm5vdGF0aW9uCisgICAgICAgIHNlbGYuZG9jc3RyaW5nID0gZG9jc3RyaW5nIG9yICcnCisgICAgICAgIHNlbGYuZ3JvdXAgPSBncm91cAorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gJzxjbGluaWMuUGFyYW1ldGVyICcgKyBzZWxmLm5hbWUgKyAnPicKKworICAgIGRlZiBpc19rZXl3b3JkX29ubHkoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmtpbmQgPT0gaW5zcGVjdC5QYXJhbWV0ZXIuS0VZV09SRF9PTkxZCisKKyAgICBkZWYgaXNfcG9zaXRpb25hbF9vbmx5KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5raW5kID09IGluc3BlY3QuUGFyYW1ldGVyLlBPU0lUSU9OQUxfT05MWQorCisgICAgZGVmIGNvcHkoc2VsZiwgKipvdmVycmlkZXMpOgorICAgICAgICBrd2FyZ3MgPSB7CisgICAgICAgICAgICAnbmFtZSc6IHNlbGYubmFtZSwgJ2tpbmQnOiBzZWxmLmtpbmQsICdkZWZhdWx0JzpzZWxmLmRlZmF1bHQsCisgICAgICAgICAgICAgICAgICdmdW5jdGlvbic6IHNlbGYuZnVuY3Rpb24sICdjb252ZXJ0ZXInOiBzZWxmLmNvbnZlcnRlciwgJ2Fubm90YXRpb24nOiBzZWxmLmFubm90YXRpb24sCisgICAgICAgICAgICAgICAgICdkb2NzdHJpbmcnOiBzZWxmLmRvY3N0cmluZywgJ2dyb3VwJzogc2VsZi5ncm91cCwKKyAgICAgICAgICAgIH0KKyAgICAgICAga3dhcmdzLnVwZGF0ZShvdmVycmlkZXMpCisgICAgICAgIGlmICdjb252ZXJ0ZXInIG5vdCBpbiBvdmVycmlkZXM6CisgICAgICAgICAgICBjb252ZXJ0ZXIgPSBjb3B5LmNvcHkoc2VsZi5jb252ZXJ0ZXIpCisgICAgICAgICAgICBjb252ZXJ0ZXIuZnVuY3Rpb24gPSBrd2FyZ3NbJ2Z1bmN0aW9uJ10KKyAgICAgICAgICAgIGt3YXJnc1snY29udmVydGVyJ10gPSBjb252ZXJ0ZXIKKyAgICAgICAgcmV0dXJuIFBhcmFtZXRlcigqKmt3YXJncykKKworCisKK2NsYXNzIExhbmRNaW5lOgorICAgICMgdHJ5IHRvIGFjY2VzcyBhbnkKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWVzc2FnZSk6CisgICAgICAgIHNlbGYuX19tZXNzYWdlX18gPSBtZXNzYWdlCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAnPExhbmRNaW5lICcgKyByZXByKHNlbGYuX19tZXNzYWdlX18pICsgIj4iCisKKyAgICBkZWYgX19nZXRhdHRyaWJ1dGVfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgaWYgbmFtZSBpbiAoJ19fcmVwcl9fJywgJ19fbWVzc2FnZV9fJyk6CisgICAgICAgICAgICByZXR1cm4gc3VwZXIoKS5fX2dldGF0dHJpYnV0ZV9fKG5hbWUpCisgICAgICAgICMgcmFpc2UgUnVudGltZUVycm9yKHJlcHIobmFtZSkpCisgICAgICAgIGZhaWwoIlN0ZXBwZWQgb24gYSBsYW5kIG1pbmUsIHRyeWluZyB0byBhY2Nlc3MgYXR0cmlidXRlICIgKyByZXByKG5hbWUpICsgIjpcbiIgKyBzZWxmLl9fbWVzc2FnZV9fKQorCisKK2RlZiBhZGRfY19jb252ZXJ0ZXIoZiwgbmFtZT1Ob25lKToKKyAgICBpZiBub3QgbmFtZToKKyAgICAgICAgbmFtZSA9IGYuX19uYW1lX18KKyAgICAgICAgaWYgbm90IG5hbWUuZW5kc3dpdGgoJ19jb252ZXJ0ZXInKToKKyAgICAgICAgICAgIHJldHVybiBmCisgICAgICAgIG5hbWUgPSBuYW1lWzotbGVuKCdfY29udmVydGVyJyldCisgICAgY29udmVydGVyc1tuYW1lXSA9IGYKKyAgICByZXR1cm4gZgorCitkZWYgYWRkX2RlZmF1bHRfbGVnYWN5X2NfY29udmVydGVyKGNscyk6CisgICAgIyBhdXRvbWF0aWNhbGx5IGFkZCBjb252ZXJ0ZXIgZm9yIGRlZmF1bHQgZm9ybWF0IHVuaXQKKyAgICAjIChidXQgd2l0aG91dCBzdG9tcGluZyBvbiB0aGUgZXhpc3Rpbmcgb25lIGlmIGl0J3MgYWxyZWFkeQorICAgICMgc2V0LCBpbiBjYXNlIHlvdSBzdWJjbGFzcykKKyAgICBpZiAoKGNscy5mb3JtYXRfdW5pdCBub3QgaW4gKCdPJicsICcnKSkgYW5kCisgICAgICAgIChjbHMuZm9ybWF0X3VuaXQgbm90IGluIGxlZ2FjeV9jb252ZXJ0ZXJzKSk6CisgICAgICAgIGxlZ2FjeV9jb252ZXJ0ZXJzW2Nscy5mb3JtYXRfdW5pdF0gPSBjbHMKKyAgICByZXR1cm4gY2xzCisKK2RlZiBhZGRfbGVnYWN5X2NfY29udmVydGVyKGZvcm1hdF91bml0LCAqKmt3YXJncyk6CisgICAgIiIiCisgICAgQWRkcyBhIGxlZ2FjeSBjb252ZXJ0ZXIuCisgICAgIiIiCisgICAgZGVmIGNsb3N1cmUoZik6CisgICAgICAgIGlmIG5vdCBrd2FyZ3M6CisgICAgICAgICAgICBhZGRlZF9mID0gZgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYWRkZWRfZiA9IGZ1bmN0b29scy5wYXJ0aWFsKGYsICoqa3dhcmdzKQorICAgICAgICBpZiBmb3JtYXRfdW5pdDoKKyAgICAgICAgICAgIGxlZ2FjeV9jb252ZXJ0ZXJzW2Zvcm1hdF91bml0XSA9IGFkZGVkX2YKKyAgICAgICAgcmV0dXJuIGYKKyAgICByZXR1cm4gY2xvc3VyZQorCitjbGFzcyBDQ29udmVydGVyQXV0b1JlZ2lzdGVyKHR5cGUpOgorICAgIGRlZiBfX2luaXRfXyhjbHMsIG5hbWUsIGJhc2VzLCBjbGFzc2RpY3QpOgorICAgICAgICBhZGRfY19jb252ZXJ0ZXIoY2xzKQorICAgICAgICBhZGRfZGVmYXVsdF9sZWdhY3lfY19jb252ZXJ0ZXIoY2xzKQorCitjbGFzcyBDQ29udmVydGVyKG1ldGFjbGFzcz1DQ29udmVydGVyQXV0b1JlZ2lzdGVyKToKKyAgICAiIiIKKyAgICBGb3IgdGhlIGluaXQgZnVuY3Rpb24sIHNlbGYsIG5hbWUsIGZ1bmN0aW9uLCBhbmQgZGVmYXVsdAorICAgIG11c3QgYmUga2V5d29yZC1vci1wb3NpdGlvbmFsIHBhcmFtZXRlcnMuICBBbGwgb3RoZXIKKyAgICBwYXJhbWV0ZXJzIG11c3QgYmUga2V5d29yZC1vbmx5LgorICAgICIiIgorCisgICAgIyBUaGUgQyBuYW1lIHRvIHVzZSBmb3IgdGhpcyB2YXJpYWJsZS4KKyAgICBuYW1lID0gTm9uZQorCisgICAgIyBUaGUgUHl0aG9uIG5hbWUgdG8gdXNlIGZvciB0aGlzIHZhcmlhYmxlLgorICAgIHB5X25hbWUgPSBOb25lCisKKyAgICAjIFRoZSBDIHR5cGUgdG8gdXNlIGZvciB0aGlzIHZhcmlhYmxlLgorICAgICMgJ3R5cGUnIHNob3VsZCBiZSBhIFB5dGhvbiBzdHJpbmcgc3BlY2lmeWluZyB0aGUgdHlwZSwgZS5nLiAiaW50Ii4KKyAgICAjIElmIHRoaXMgaXMgYSBwb2ludGVyIHR5cGUsIHRoZSB0eXBlIHN0cmluZyBzaG91bGQgZW5kIHdpdGggJyAqJy4KKyAgICB0eXBlID0gTm9uZQorCisgICAgIyBUaGUgUHl0aG9uIGRlZmF1bHQgdmFsdWUgZm9yIHRoaXMgcGFyYW1ldGVyLCBhcyBhIFB5dGhvbiB2YWx1ZS4KKyAgICAjIE9yIHRoZSBtYWdpYyB2YWx1ZSAidW5zcGVjaWZpZWQiIGlmIHRoZXJlIGlzIG5vIGRlZmF1bHQuCisgICAgIyBPciB0aGUgbWFnaWMgdmFsdWUgInVua25vd24iIGlmIHRoaXMgdmFsdWUgaXMgYSBjYW5ub3QgYmUgZXZhbHVhdGVkCisgICAgIyBhdCBBcmd1bWVudC1DbGluaWMtcHJlcHJvY2Vzc2luZyB0aW1lIChidXQgaXMgcHJlc3VtZWQgdG8gYmUgdmFsaWQKKyAgICAjIGF0IHJ1bnRpbWUpLgorICAgIGRlZmF1bHQgPSB1bnNwZWNpZmllZAorCisgICAgIyBJZiBub3QgTm9uZSwgZGVmYXVsdCBtdXN0IGJlIGlzaW5zdGFuY2UoKSBvZiB0aGlzIHR5cGUuCisgICAgIyAoWW91IGNhbiBhbHNvIHNwZWNpZnkgYSB0dXBsZSBvZiB0eXBlcy4pCisgICAgZGVmYXVsdF90eXBlID0gTm9uZQorCisgICAgIyAiZGVmYXVsdCIgY29udmVydGVkIGludG8gYSBDIHZhbHVlLCBhcyBhIHN0cmluZy4KKyAgICAjIE9yIE5vbmUgaWYgdGhlcmUgaXMgbm8gZGVmYXVsdC4KKyAgICBjX2RlZmF1bHQgPSBOb25lCisKKyAgICAjICJkZWZhdWx0IiBjb252ZXJ0ZWQgaW50byBhIFB5dGhvbiB2YWx1ZSwgYXMgYSBzdHJpbmcuCisgICAgIyBPciBOb25lIGlmIHRoZXJlIGlzIG5vIGRlZmF1bHQuCisgICAgcHlfZGVmYXVsdCA9IE5vbmUKKworICAgICMgVGhlIGRlZmF1bHQgdmFsdWUgdXNlZCB0byBpbml0aWFsaXplIHRoZSBDIHZhcmlhYmxlIHdoZW4KKyAgICAjIHRoZXJlIGlzIG5vIGRlZmF1bHQsIGJ1dCBub3Qgc3BlY2lmeWluZyBhIGRlZmF1bHQgbWF5CisgICAgIyByZXN1bHQgaW4gYW4gInVuaW5pdGlhbGl6ZWQgdmFyaWFibGUiIHdhcm5pbmcuICBUaGlzIGNhbgorICAgICMgZWFzaWx5IGhhcHBlbiB3aGVuIHVzaW5nIG9wdGlvbiBncm91cHMtLWFsdGhvdWdoCisgICAgIyBwcm9wZXJseS13cml0dGVuIGNvZGUgd29uJ3QgYWN0dWFsbHkgdXNlIHRoZSB2YXJpYWJsZSwKKyAgICAjIHRoZSB2YXJpYWJsZSBkb2VzIGdldCBwYXNzZWQgaW4gdG8gdGhlIF9pbXBsLiAgKEFoLCBpZgorICAgICMgb25seSBkYXRhZmxvdyBhbmFseXNpcyBjb3VsZCBpbmxpbmUgdGhlIHN0YXRpYyBmdW5jdGlvbiEpCisgICAgIworICAgICMgVGhpcyB2YWx1ZSBpcyBzcGVjaWZpZWQgYXMgYSBzdHJpbmcuCisgICAgIyBFdmVyeSBub24tYWJzdHJhY3Qgc3ViY2xhc3Mgc2hvdWxkIHN1cHBseSBhIHZhbGlkIHZhbHVlLgorICAgIGNfaWdub3JlZF9kZWZhdWx0ID0gJ05VTEwnCisKKyAgICAjIFRoZSBDIGNvbnZlcnRlciAqZnVuY3Rpb24qIHRvIGJlIHVzZWQsIGlmIGFueS4KKyAgICAjIChJZiB0aGlzIGlzIG5vdCBOb25lLCBmb3JtYXRfdW5pdCBtdXN0IGJlICdPJicuKQorICAgIGNvbnZlcnRlciA9IE5vbmUKKworICAgICMgU2hvdWxkIEFyZ3VtZW50IENsaW5pYyBhZGQgYSAnJicgYmVmb3JlIHRoZSBuYW1lIG9mCisgICAgIyB0aGUgdmFyaWFibGUgd2hlbiBwYXNzaW5nIGl0IGludG8gdGhlIF9pbXBsIGZ1bmN0aW9uPworICAgIGltcGxfYnlfcmVmZXJlbmNlID0gRmFsc2UKKworICAgICMgU2hvdWxkIEFyZ3VtZW50IENsaW5pYyBhZGQgYSAnJicgYmVmb3JlIHRoZSBuYW1lIG9mCisgICAgIyB0aGUgdmFyaWFibGUgd2hlbiBwYXNzaW5nIGl0IGludG8gUHlBcmdfUGFyc2VUdXBsZSAoQW5kS2V5d29yZHMpPworICAgIHBhcnNlX2J5X3JlZmVyZW5jZSA9IFRydWUKKworICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgIyMgWW91IHNob3VsZG4ndCBuZWVkIHRvIHJlYWQgYW55dGhpbmcgYmVsb3cgdGhpcyBwb2ludCB0byAjIworICAgICMjIHdyaXRlIHlvdXIgb3duIGNvbnZlcnRlciBmdW5jdGlvbnMuICAgICAgICAgICAgICAgICAgICAgIyMKKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisgICAgIyBUaGUgImZvcm1hdCB1bml0IiB0byBzcGVjaWZ5IGZvciB0aGlzIHZhcmlhYmxlIHdoZW4KKyAgICAjIHBhcnNpbmcgYXJndW1lbnRzIHVzaW5nIFB5QXJnX1BhcnNlVHVwbGUgKEFuZEtleXdvcmRzKS4KKyAgICAjIEN1c3RvbSBjb252ZXJ0ZXJzIHNob3VsZCBhbHdheXMgdXNlIHRoZSBkZWZhdWx0IHZhbHVlIG9mICdPJicuCisgICAgZm9ybWF0X3VuaXQgPSAnTyYnCisKKyAgICAjIFdoYXQgZW5jb2RpbmcgZG8gd2Ugd2FudCBmb3IgdGhpcyB2YXJpYWJsZT8gIE9ubHkgdXNlZAorICAgICMgYnkgZm9ybWF0IHVuaXRzIHN0YXJ0aW5nIHdpdGggJ2UnLgorICAgIGVuY29kaW5nID0gTm9uZQorCisgICAgIyBTaG91bGQgdGhpcyBvYmplY3QgYmUgcmVxdWlyZWQgdG8gYmUgYSBzdWJjbGFzcyBvZiBhIHNwZWNpZmljIHR5cGU/CisgICAgIyBJZiBub3QgTm9uZSwgc2hvdWxkIGJlIGEgc3RyaW5nIHJlcHJlc2VudGluZyBhIHBvaW50ZXIgdG8gYQorICAgICMgUHlUeXBlT2JqZWN0IChlLmcuICImUHlVbmljb2RlX1R5cGUiKS4KKyAgICAjIE9ubHkgdXNlZCBieSB0aGUgJ08hJyBmb3JtYXQgdW5pdCAoYW5kIHRoZSAib2JqZWN0IiBjb252ZXJ0ZXIpLgorICAgIHN1YmNsYXNzX29mID0gTm9uZQorCisgICAgIyBEbyB3ZSB3YW50IGFuIGFkamFjZW50ICdfbGVuZ3RoJyB2YXJpYWJsZSBmb3IgdGhpcyB2YXJpYWJsZT8KKyAgICAjIE9ubHkgdXNlZCBieSBmb3JtYXQgdW5pdHMgZW5kaW5nIHdpdGggJyMnLgorICAgIGxlbmd0aCA9IEZhbHNlCisKKyAgICAjIFNob3VsZCB3ZSBzaG93IHRoaXMgcGFyYW1ldGVyIGluIHRoZSBnZW5lcmF0ZWQKKyAgICAjIF9fdGV4dF9zaWduYXR1cmVfXz8gVGhpcyBpcyAqYWxtb3N0KiBhbHdheXMgVHJ1ZS4KKyAgICAjIChJdCdzIG9ubHkgRmFsc2UgZm9yIF9fbmV3X18sIF9faW5pdF9fLCBhbmQgTUVUSF9TVEFUSUMgZnVuY3Rpb25zLikKKyAgICBzaG93X2luX3NpZ25hdHVyZSA9IFRydWUKKworICAgICMgT3ZlcnJpZGVzIHRoZSBuYW1lIHVzZWQgaW4gYSB0ZXh0IHNpZ25hdHVyZS4KKyAgICAjIFRoZSBuYW1lIHVzZWQgZm9yIGEgInNlbGYiIHBhcmFtZXRlciBtdXN0IGJlIG9uZSBvZgorICAgICMgc2VsZiwgdHlwZSwgb3IgbW9kdWxlOyBob3dldmVyIHVzZXJzIGNhbiBzZXQgdGhlaXIgb3duLgorICAgICMgVGhpcyBsZXRzIHRoZSBzZWxmX2NvbnZlcnRlciBvdmVycnVsZSB0aGUgdXNlci1zZXR0YWJsZQorICAgICMgbmFtZSwgKmp1c3QqIGZvciB0aGUgdGV4dCBzaWduYXR1cmUuCisgICAgIyBPbmx5IHNldCBieSBzZWxmX2NvbnZlcnRlci4KKyAgICBzaWduYXR1cmVfbmFtZSA9IE5vbmUKKworICAgICMga2VlcCBpbiBzeW5jIHdpdGggc2VsZl9jb252ZXJ0ZXIuX19pbml0X18hCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIHB5X25hbWUsIGZ1bmN0aW9uLCBkZWZhdWx0PXVuc3BlY2lmaWVkLCAqLCBjX2RlZmF1bHQ9Tm9uZSwgcHlfZGVmYXVsdD1Ob25lLCBhbm5vdGF0aW9uPXVuc3BlY2lmaWVkLCAqKmt3YXJncyk6CisgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKKyAgICAgICAgc2VsZi5weV9uYW1lID0gcHlfbmFtZQorCisgICAgICAgIGlmIGRlZmF1bHQgaXMgbm90IHVuc3BlY2lmaWVkOgorICAgICAgICAgICAgaWYgc2VsZi5kZWZhdWx0X3R5cGUgYW5kIG5vdCBpc2luc3RhbmNlKGRlZmF1bHQsIChzZWxmLmRlZmF1bHRfdHlwZSwgVW5rbm93bikpOgorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uoc2VsZi5kZWZhdWx0X3R5cGUsIHR5cGUpOgorICAgICAgICAgICAgICAgICAgICB0eXBlc19zdHIgPSBzZWxmLmRlZmF1bHRfdHlwZS5fX25hbWVfXworICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHR5cGVzX3N0ciA9ICcsICcuam9pbigoY2xzLl9fbmFtZV9fIGZvciBjbHMgaW4gc2VsZi5kZWZhdWx0X3R5cGUpKQorICAgICAgICAgICAgICAgIGZhaWwoInt9OiBkZWZhdWx0IHZhbHVlIHshcn0gZm9yIGZpZWxkIHt9IGlzIG5vdCBvZiB0eXBlIHt9Ii5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLCBkZWZhdWx0LCBuYW1lLCB0eXBlc19zdHIpKQorICAgICAgICAgICAgc2VsZi5kZWZhdWx0ID0gZGVmYXVsdAorCisgICAgICAgIGlmIGNfZGVmYXVsdDoKKyAgICAgICAgICAgIHNlbGYuY19kZWZhdWx0ID0gY19kZWZhdWx0CisgICAgICAgIGlmIHB5X2RlZmF1bHQ6CisgICAgICAgICAgICBzZWxmLnB5X2RlZmF1bHQgPSBweV9kZWZhdWx0CisKKyAgICAgICAgaWYgYW5ub3RhdGlvbiAhPSB1bnNwZWNpZmllZDoKKyAgICAgICAgICAgIGZhaWwoIlRoZSAnYW5ub3RhdGlvbicgcGFyYW1ldGVyIGlzIG5vdCBjdXJyZW50bHkgcGVybWl0dGVkLiIpCisKKyAgICAgICAgIyB0aGlzIGlzIGRlbGliZXJhdGUsIHRvIHByZXZlbnQgeW91IGZyb20gY2FjaGluZyBpbmZvcm1hdGlvbgorICAgICAgICAjIGFib3V0IHRoZSBmdW5jdGlvbiBpbiB0aGUgaW5pdC4KKyAgICAgICAgIyAodGhhdCBicmVha3MgaWYgd2UgZ2V0IGNsb25lZC4pCisgICAgICAgICMgc28gYWZ0ZXIgdGhpcyBjaGFuZ2Ugd2Ugd2lsbCBub2lzaWx5IGZhaWwuCisgICAgICAgIHNlbGYuZnVuY3Rpb24gPSBMYW5kTWluZSgiRG9uJ3QgYWNjZXNzIG1lbWJlcnMgb2Ygc2VsZi5mdW5jdGlvbiBpbnNpZGUgY29udmVydGVyX2luaXQhIikKKyAgICAgICAgc2VsZi5jb252ZXJ0ZXJfaW5pdCgqKmt3YXJncykKKyAgICAgICAgc2VsZi5mdW5jdGlvbiA9IGZ1bmN0aW9uCisKKyAgICBkZWYgY29udmVydGVyX2luaXQoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBpc19vcHRpb25hbChzZWxmKToKKyAgICAgICAgcmV0dXJuIChzZWxmLmRlZmF1bHQgaXMgbm90IHVuc3BlY2lmaWVkKQorCisgICAgZGVmIF9yZW5kZXJfc2VsZihzZWxmLCBwYXJhbWV0ZXIsIGRhdGEpOgorICAgICAgICBzZWxmLnBhcmFtZXRlciA9IHBhcmFtZXRlcgorICAgICAgICBvcmlnaW5hbF9uYW1lID0gc2VsZi5uYW1lCisgICAgICAgIG5hbWUgPSBlbnN1cmVfbGVnYWxfY19pZGVudGlmaWVyKG9yaWdpbmFsX25hbWUpCisKKyAgICAgICAgIyBpbXBsX2FyZ3VtZW50cworICAgICAgICBzID0gKCImIiBpZiBzZWxmLmltcGxfYnlfcmVmZXJlbmNlIGVsc2UgIiIpICsgbmFtZQorICAgICAgICBkYXRhLmltcGxfYXJndW1lbnRzLmFwcGVuZChzKQorICAgICAgICBpZiBzZWxmLmxlbmd0aDoKKyAgICAgICAgICAgIGRhdGEuaW1wbF9hcmd1bWVudHMuYXBwZW5kKHNlbGYubGVuZ3RoX25hbWUoKSkKKworICAgICAgICAjIGltcGxfcGFyYW1ldGVycworICAgICAgICBkYXRhLmltcGxfcGFyYW1ldGVycy5hcHBlbmQoc2VsZi5zaW1wbGVfZGVjbGFyYXRpb24oYnlfcmVmZXJlbmNlPXNlbGYuaW1wbF9ieV9yZWZlcmVuY2UpKQorICAgICAgICBpZiBzZWxmLmxlbmd0aDoKKyAgICAgICAgICAgIGRhdGEuaW1wbF9wYXJhbWV0ZXJzLmFwcGVuZCgiUHlfc3NpemVfY2xlYW5fdCAiICsgc2VsZi5sZW5ndGhfbmFtZSgpKQorCisgICAgZGVmIF9yZW5kZXJfbm9uX3NlbGYoc2VsZiwgcGFyYW1ldGVyLCBkYXRhKToKKyAgICAgICAgc2VsZi5wYXJhbWV0ZXIgPSBwYXJhbWV0ZXIKKyAgICAgICAgb3JpZ2luYWxfbmFtZSA9IHNlbGYubmFtZQorICAgICAgICBuYW1lID0gZW5zdXJlX2xlZ2FsX2NfaWRlbnRpZmllcihvcmlnaW5hbF9uYW1lKQorCisgICAgICAgICMgZGVjbGFyYXRpb25zCisgICAgICAgIGQgPSBzZWxmLmRlY2xhcmF0aW9uKCkKKyAgICAgICAgZGF0YS5kZWNsYXJhdGlvbnMuYXBwZW5kKGQpCisKKyAgICAgICAgIyBpbml0aWFsaXplcnMKKyAgICAgICAgaW5pdGlhbGl6ZXJzID0gc2VsZi5pbml0aWFsaXplKCkKKyAgICAgICAgaWYgaW5pdGlhbGl6ZXJzOgorICAgICAgICAgICAgZGF0YS5pbml0aWFsaXplcnMuYXBwZW5kKCcvKiBpbml0aWFsaXplcnMgZm9yICcgKyBuYW1lICsgJyAqL1xuJyArIGluaXRpYWxpemVycy5yc3RyaXAoKSkKKworICAgICAgICAjIG1vZGlmaWNhdGlvbnMKKyAgICAgICAgbW9kaWZpY2F0aW9ucyA9IHNlbGYubW9kaWZ5KCkKKyAgICAgICAgaWYgbW9kaWZpY2F0aW9uczoKKyAgICAgICAgICAgIGRhdGEubW9kaWZpY2F0aW9ucy5hcHBlbmQoJy8qIG1vZGlmaWNhdGlvbnMgZm9yICcgKyBuYW1lICsgJyAqL1xuJyArIG1vZGlmaWNhdGlvbnMucnN0cmlwKCkpCisKKyAgICAgICAgIyBrZXl3b3JkcworICAgICAgICBkYXRhLmtleXdvcmRzLmFwcGVuZChwYXJhbWV0ZXIubmFtZSkKKworICAgICAgICAjIGZvcm1hdF91bml0cworICAgICAgICBpZiBzZWxmLmlzX29wdGlvbmFsKCkgYW5kICd8JyBub3QgaW4gZGF0YS5mb3JtYXRfdW5pdHM6CisgICAgICAgICAgICBkYXRhLmZvcm1hdF91bml0cy5hcHBlbmQoJ3wnKQorICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfa2V5d29yZF9vbmx5KCkgYW5kICckJyBub3QgaW4gZGF0YS5mb3JtYXRfdW5pdHM6CisgICAgICAgICAgICBkYXRhLmZvcm1hdF91bml0cy5hcHBlbmQoJyQnKQorICAgICAgICBkYXRhLmZvcm1hdF91bml0cy5hcHBlbmQoc2VsZi5mb3JtYXRfdW5pdCkKKworICAgICAgICAjIHBhcnNlX2FyZ3VtZW50cworICAgICAgICBzZWxmLnBhcnNlX2FyZ3VtZW50KGRhdGEucGFyc2VfYXJndW1lbnRzKQorCisgICAgICAgICMgY2xlYW51cAorICAgICAgICBjbGVhbnVwID0gc2VsZi5jbGVhbnVwKCkKKyAgICAgICAgaWYgY2xlYW51cDoKKyAgICAgICAgICAgIGRhdGEuY2xlYW51cC5hcHBlbmQoJy8qIENsZWFudXAgZm9yICcgKyBuYW1lICsgJyAqL1xuJyArIGNsZWFudXAucnN0cmlwKCkgKyAiXG4iKQorCisgICAgZGVmIHJlbmRlcihzZWxmLCBwYXJhbWV0ZXIsIGRhdGEpOgorICAgICAgICAiIiIKKyAgICAgICAgcGFyYW1ldGVyIGlzIGEgY2xpbmljLlBhcmFtZXRlciBpbnN0YW5jZS4KKyAgICAgICAgZGF0YSBpcyBhIENSZW5kZXJEYXRhIGluc3RhbmNlLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fcmVuZGVyX3NlbGYocGFyYW1ldGVyLCBkYXRhKQorICAgICAgICBzZWxmLl9yZW5kZXJfbm9uX3NlbGYocGFyYW1ldGVyLCBkYXRhKQorCisgICAgZGVmIGxlbmd0aF9uYW1lKHNlbGYpOgorICAgICAgICAiIiJDb21wdXRlcyB0aGUgbmFtZSBvZiB0aGUgYXNzb2NpYXRlZCAibGVuZ3RoIiB2YXJpYWJsZS4iIiIKKyAgICAgICAgaWYgbm90IHNlbGYubGVuZ3RoOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgcmV0dXJuIGVuc3VyZV9sZWdhbF9jX2lkZW50aWZpZXIoc2VsZi5uYW1lKSArICJfbGVuZ3RoIgorCisgICAgIyBXaHkgaXMgdGhpcyBvbmUgYnJva2VuIG91dCBzZXBhcmF0ZWx5PworICAgICMgRm9yICJwb3NpdGlvbmFsLW9ubHkiIGZ1bmN0aW9uIHBhcnNpbmcsCisgICAgIyB3aGljaCBnZW5lcmF0ZXMgYSBidW5jaCBvZiBQeUFyZ19QYXJzZVR1cGxlIGNhbGxzLgorICAgIGRlZiBwYXJzZV9hcmd1bWVudChzZWxmLCBsaXN0KToKKyAgICAgICAgYXNzZXJ0IG5vdCAoc2VsZi5jb252ZXJ0ZXIgYW5kIHNlbGYuZW5jb2RpbmcpCisgICAgICAgIGlmIHNlbGYuZm9ybWF0X3VuaXQgPT0gJ08mJzoKKyAgICAgICAgICAgIGFzc2VydCBzZWxmLmNvbnZlcnRlcgorICAgICAgICAgICAgbGlzdC5hcHBlbmQoc2VsZi5jb252ZXJ0ZXIpCisKKyAgICAgICAgaWYgc2VsZi5lbmNvZGluZzoKKyAgICAgICAgICAgIGxpc3QuYXBwZW5kKGNfcmVwcihzZWxmLmVuY29kaW5nKSkKKyAgICAgICAgZWxpZiBzZWxmLnN1YmNsYXNzX29mOgorICAgICAgICAgICAgbGlzdC5hcHBlbmQoc2VsZi5zdWJjbGFzc19vZikKKworICAgICAgICBsZWdhbF9uYW1lID0gZW5zdXJlX2xlZ2FsX2NfaWRlbnRpZmllcihzZWxmLm5hbWUpCisgICAgICAgIHMgPSAoIiYiIGlmIHNlbGYucGFyc2VfYnlfcmVmZXJlbmNlIGVsc2UgIiIpICsgbGVnYWxfbmFtZQorICAgICAgICBsaXN0LmFwcGVuZChzKQorCisgICAgICAgIGlmIHNlbGYubGVuZ3RoOgorICAgICAgICAgICAgbGlzdC5hcHBlbmQoIiYiICsgc2VsZi5sZW5ndGhfbmFtZSgpKQorCisgICAgIworICAgICMgQWxsIHRoZSBmdW5jdGlvbnMgYWZ0ZXIgaGVyZSBhcmUgaW50ZW5kZWQgYXMgZXh0ZW5zaW9uIHBvaW50cy4KKyAgICAjCisKKyAgICBkZWYgc2ltcGxlX2RlY2xhcmF0aW9uKHNlbGYsIGJ5X3JlZmVyZW5jZT1GYWxzZSk6CisgICAgICAgICIiIgorICAgICAgICBDb21wdXRlcyB0aGUgYmFzaWMgZGVjbGFyYXRpb24gb2YgdGhlIHZhcmlhYmxlLgorICAgICAgICBVc2VkIGluIGNvbXB1dGluZyB0aGUgcHJvdG90eXBlIGRlY2xhcmF0aW9uIGFuZCB0aGUKKyAgICAgICAgdmFyaWFibGUgZGVjbGFyYXRpb24uCisgICAgICAgICIiIgorICAgICAgICBwcm90b3R5cGUgPSBbc2VsZi50eXBlXQorICAgICAgICBpZiBieV9yZWZlcmVuY2Ugb3Igbm90IHNlbGYudHlwZS5lbmRzd2l0aCgnKicpOgorICAgICAgICAgICAgcHJvdG90eXBlLmFwcGVuZCgiICIpCisgICAgICAgIGlmIGJ5X3JlZmVyZW5jZToKKyAgICAgICAgICAgIHByb3RvdHlwZS5hcHBlbmQoJyonKQorICAgICAgICBwcm90b3R5cGUuYXBwZW5kKGVuc3VyZV9sZWdhbF9jX2lkZW50aWZpZXIoc2VsZi5uYW1lKSkKKyAgICAgICAgcmV0dXJuICIiLmpvaW4ocHJvdG90eXBlKQorCisgICAgZGVmIGRlY2xhcmF0aW9uKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgVGhlIEMgc3RhdGVtZW50IHRvIGRlY2xhcmUgdGhpcyB2YXJpYWJsZS4KKyAgICAgICAgIiIiCisgICAgICAgIGRlY2xhcmF0aW9uID0gW3NlbGYuc2ltcGxlX2RlY2xhcmF0aW9uKCldCisgICAgICAgIGRlZmF1bHQgPSBzZWxmLmNfZGVmYXVsdAorICAgICAgICBpZiBub3QgZGVmYXVsdCBhbmQgc2VsZi5wYXJhbWV0ZXIuZ3JvdXA6CisgICAgICAgICAgICBkZWZhdWx0ID0gc2VsZi5jX2lnbm9yZWRfZGVmYXVsdAorICAgICAgICBpZiBkZWZhdWx0OgorICAgICAgICAgICAgZGVjbGFyYXRpb24uYXBwZW5kKCIgPSAiKQorICAgICAgICAgICAgZGVjbGFyYXRpb24uYXBwZW5kKGRlZmF1bHQpCisgICAgICAgIGRlY2xhcmF0aW9uLmFwcGVuZCgiOyIpCisgICAgICAgIGlmIHNlbGYubGVuZ3RoOgorICAgICAgICAgICAgZGVjbGFyYXRpb24uYXBwZW5kKCdcblB5X3NzaXplX2NsZWFuX3QgJykKKyAgICAgICAgICAgIGRlY2xhcmF0aW9uLmFwcGVuZChzZWxmLmxlbmd0aF9uYW1lKCkpCisgICAgICAgICAgICBkZWNsYXJhdGlvbi5hcHBlbmQoJzsnKQorICAgICAgICBzID0gIiIuam9pbihkZWNsYXJhdGlvbikKKyAgICAgICAgIyBkb3VibGUgdXAgY3VybHktYnJhY2VzLCB0aGlzIHN0cmluZyB3aWxsIGJlIHVzZWQKKyAgICAgICAgIyBhcyBwYXJ0IG9mIGEgZm9ybWF0X21hcCgpIHRlbXBsYXRlIGxhdGVyCisgICAgICAgIHMgPSBzLnJlcGxhY2UoInsiLCAie3siKQorICAgICAgICBzID0gcy5yZXBsYWNlKCJ9IiwgIn19IikKKyAgICAgICAgcmV0dXJuIHMKKworICAgIGRlZiBpbml0aWFsaXplKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgVGhlIEMgc3RhdGVtZW50cyByZXF1aXJlZCB0byBzZXQgdXAgdGhpcyB2YXJpYWJsZSBiZWZvcmUgcGFyc2luZy4KKyAgICAgICAgUmV0dXJucyBhIHN0cmluZyBjb250YWluaW5nIHRoaXMgY29kZSBpbmRlbnRlZCBhdCBjb2x1bW4gMC4KKyAgICAgICAgSWYgbm8gaW5pdGlhbGl6YXRpb24gaXMgbmVjZXNzYXJ5LCByZXR1cm5zIGFuIGVtcHR5IHN0cmluZy4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiAiIgorCisgICAgZGVmIG1vZGlmeShzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFRoZSBDIHN0YXRlbWVudHMgcmVxdWlyZWQgdG8gbW9kaWZ5IHRoaXMgdmFyaWFibGUgYWZ0ZXIgcGFyc2luZy4KKyAgICAgICAgUmV0dXJucyBhIHN0cmluZyBjb250YWluaW5nIHRoaXMgY29kZSBpbmRlbnRlZCBhdCBjb2x1bW4gMC4KKyAgICAgICAgSWYgbm8gaW5pdGlhbGl6YXRpb24gaXMgbmVjZXNzYXJ5LCByZXR1cm5zIGFuIGVtcHR5IHN0cmluZy4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiAiIgorCisgICAgZGVmIGNsZWFudXAoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBUaGUgQyBzdGF0ZW1lbnRzIHJlcXVpcmVkIHRvIGNsZWFuIHVwIGFmdGVyIHRoaXMgdmFyaWFibGUuCisgICAgICAgIFJldHVybnMgYSBzdHJpbmcgY29udGFpbmluZyB0aGlzIGNvZGUgaW5kZW50ZWQgYXQgY29sdW1uIDAuCisgICAgICAgIElmIG5vIGNsZWFudXAgaXMgbmVjZXNzYXJ5LCByZXR1cm5zIGFuIGVtcHR5IHN0cmluZy4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiAiIgorCisgICAgZGVmIHByZV9yZW5kZXIoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBBIHNlY29uZCBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiwgbGlrZSBjb252ZXJ0ZXJfaW5pdCwKKyAgICAgICAgY2FsbGVkIGp1c3QgYmVmb3JlIHJlbmRlcmluZy4KKyAgICAgICAgWW91IGFyZSBwZXJtaXR0ZWQgdG8gZXhhbWluZSBzZWxmLmZ1bmN0aW9uIGhlcmUuCisgICAgICAgICIiIgorICAgICAgICBwYXNzCisKKworY2xhc3MgYm9vbF9jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgdHlwZSA9ICdpbnQnCisgICAgZGVmYXVsdF90eXBlID0gYm9vbAorICAgIGZvcm1hdF91bml0ID0gJ3AnCisgICAgY19pZ25vcmVkX2RlZmF1bHQgPSAnMCcKKworICAgIGRlZiBjb252ZXJ0ZXJfaW5pdChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5kZWZhdWx0IGlzIG5vdCB1bnNwZWNpZmllZDoKKyAgICAgICAgICAgIHNlbGYuZGVmYXVsdCA9IGJvb2woc2VsZi5kZWZhdWx0KQorICAgICAgICAgICAgc2VsZi5jX2RlZmF1bHQgPSBzdHIoaW50KHNlbGYuZGVmYXVsdCkpCisKK2NsYXNzIGNoYXJfY29udmVydGVyKENDb252ZXJ0ZXIpOgorICAgIHR5cGUgPSAnY2hhcicKKyAgICBkZWZhdWx0X3R5cGUgPSBzdHIKKyAgICBmb3JtYXRfdW5pdCA9ICdjJworICAgIGNfaWdub3JlZF9kZWZhdWx0ID0gIidcMCciCisKKyAgICBkZWYgY29udmVydGVyX2luaXQoc2VsZik6CisgICAgICAgIGlmIGlzaW5zdGFuY2Uoc2VsZi5kZWZhdWx0LCBzdHIpIGFuZCAobGVuKHNlbGYuZGVmYXVsdCkgIT0gMSk6CisgICAgICAgICAgICBmYWlsKCJjaGFyX2NvbnZlcnRlcjogaWxsZWdhbCBkZWZhdWx0IHZhbHVlICIgKyByZXByKHNlbGYuZGVmYXVsdCkpCisKKworQGFkZF9sZWdhY3lfY19jb252ZXJ0ZXIoJ0InLCBiaXR3aXNlPVRydWUpCitjbGFzcyB1bnNpZ25lZF9jaGFyX2NvbnZlcnRlcihDQ29udmVydGVyKToKKyAgICB0eXBlID0gJ3Vuc2lnbmVkIGNoYXInCisgICAgZGVmYXVsdF90eXBlID0gaW50CisgICAgZm9ybWF0X3VuaXQgPSAnYicKKyAgICBjX2lnbm9yZWRfZGVmYXVsdCA9ICInXDAnIgorCisgICAgZGVmIGNvbnZlcnRlcl9pbml0KHNlbGYsICosIGJpdHdpc2U9RmFsc2UpOgorICAgICAgICBpZiBiaXR3aXNlOgorICAgICAgICAgICAgc2VsZi5mb3JtYXRfdW5pdCA9ICdCJworCitjbGFzcyBieXRlX2NvbnZlcnRlcih1bnNpZ25lZF9jaGFyX2NvbnZlcnRlcik6IHBhc3MKKworY2xhc3Mgc2hvcnRfY29udmVydGVyKENDb252ZXJ0ZXIpOgorICAgIHR5cGUgPSAnc2hvcnQnCisgICAgZGVmYXVsdF90eXBlID0gaW50CisgICAgZm9ybWF0X3VuaXQgPSAnaCcKKyAgICBjX2lnbm9yZWRfZGVmYXVsdCA9ICIwIgorCitjbGFzcyB1bnNpZ25lZF9zaG9ydF9jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgdHlwZSA9ICd1bnNpZ25lZCBzaG9ydCcKKyAgICBkZWZhdWx0X3R5cGUgPSBpbnQKKyAgICBmb3JtYXRfdW5pdCA9ICdIJworICAgIGNfaWdub3JlZF9kZWZhdWx0ID0gIjAiCisKKyAgICBkZWYgY29udmVydGVyX2luaXQoc2VsZiwgKiwgYml0d2lzZT1GYWxzZSk6CisgICAgICAgIGlmIG5vdCBiaXR3aXNlOgorICAgICAgICAgICAgZmFpbCgiVW5zaWduZWQgc2hvcnRzIG11c3QgYmUgYml0d2lzZSAoZm9yIG5vdykuIikKKworQGFkZF9sZWdhY3lfY19jb252ZXJ0ZXIoJ0MnLCB0eXBlcz0nc3RyJykKK2NsYXNzIGludF9jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgdHlwZSA9ICdpbnQnCisgICAgZGVmYXVsdF90eXBlID0gaW50CisgICAgZm9ybWF0X3VuaXQgPSAnaScKKyAgICBjX2lnbm9yZWRfZGVmYXVsdCA9ICIwIgorCisgICAgZGVmIGNvbnZlcnRlcl9pbml0KHNlbGYsICosIHR5cGVzPSdpbnQnKToKKyAgICAgICAgaWYgdHlwZXMgPT0gJ3N0cic6CisgICAgICAgICAgICBzZWxmLmZvcm1hdF91bml0ID0gJ0MnCisgICAgICAgIGVsaWYgdHlwZXMgIT0gJ2ludCc6CisgICAgICAgICAgICBmYWlsKCJpbnRfY29udmVydGVyOiBpbGxlZ2FsICd0eXBlcycgYXJndW1lbnQiKQorCitjbGFzcyB1bnNpZ25lZF9pbnRfY29udmVydGVyKENDb252ZXJ0ZXIpOgorICAgIHR5cGUgPSAndW5zaWduZWQgaW50JworICAgIGRlZmF1bHRfdHlwZSA9IGludAorICAgIGZvcm1hdF91bml0ID0gJ0knCisgICAgY19pZ25vcmVkX2RlZmF1bHQgPSAiMCIKKworICAgIGRlZiBjb252ZXJ0ZXJfaW5pdChzZWxmLCAqLCBiaXR3aXNlPUZhbHNlKToKKyAgICAgICAgaWYgbm90IGJpdHdpc2U6CisgICAgICAgICAgICBmYWlsKCJVbnNpZ25lZCBpbnRzIG11c3QgYmUgYml0d2lzZSAoZm9yIG5vdykuIikKKworY2xhc3MgbG9uZ19jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgdHlwZSA9ICdsb25nJworICAgIGRlZmF1bHRfdHlwZSA9IGludAorICAgIGZvcm1hdF91bml0ID0gJ2wnCisgICAgY19pZ25vcmVkX2RlZmF1bHQgPSAiMCIKKworY2xhc3MgdW5zaWduZWRfbG9uZ19jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgdHlwZSA9ICd1bnNpZ25lZCBsb25nJworICAgIGRlZmF1bHRfdHlwZSA9IGludAorICAgIGZvcm1hdF91bml0ID0gJ2snCisgICAgY19pZ25vcmVkX2RlZmF1bHQgPSAiMCIKKworICAgIGRlZiBjb252ZXJ0ZXJfaW5pdChzZWxmLCAqLCBiaXR3aXNlPUZhbHNlKToKKyAgICAgICAgaWYgbm90IGJpdHdpc2U6CisgICAgICAgICAgICBmYWlsKCJVbnNpZ25lZCBsb25ncyBtdXN0IGJlIGJpdHdpc2UgKGZvciBub3cpLiIpCisKK2NsYXNzIFBZX0xPTkdfTE9OR19jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgdHlwZSA9ICdQWV9MT05HX0xPTkcnCisgICAgZGVmYXVsdF90eXBlID0gaW50CisgICAgZm9ybWF0X3VuaXQgPSAnTCcKKyAgICBjX2lnbm9yZWRfZGVmYXVsdCA9ICIwIgorCitjbGFzcyB1bnNpZ25lZF9QWV9MT05HX0xPTkdfY29udmVydGVyKENDb252ZXJ0ZXIpOgorICAgIHR5cGUgPSAndW5zaWduZWQgUFlfTE9OR19MT05HJworICAgIGRlZmF1bHRfdHlwZSA9IGludAorICAgIGZvcm1hdF91bml0ID0gJ0snCisgICAgY19pZ25vcmVkX2RlZmF1bHQgPSAiMCIKKworICAgIGRlZiBjb252ZXJ0ZXJfaW5pdChzZWxmLCAqLCBiaXR3aXNlPUZhbHNlKToKKyAgICAgICAgaWYgbm90IGJpdHdpc2U6CisgICAgICAgICAgICBmYWlsKCJVbnNpZ25lZCBQWV9MT05HX0xPTkdzIG11c3QgYmUgYml0d2lzZSAoZm9yIG5vdykuIikKKworY2xhc3MgUHlfc3NpemVfdF9jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgdHlwZSA9ICdQeV9zc2l6ZV90JworICAgIGRlZmF1bHRfdHlwZSA9IGludAorICAgIGZvcm1hdF91bml0ID0gJ24nCisgICAgY19pZ25vcmVkX2RlZmF1bHQgPSAiMCIKKworCitjbGFzcyBmbG9hdF9jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgdHlwZSA9ICdmbG9hdCcKKyAgICBkZWZhdWx0X3R5cGUgPSBmbG9hdAorICAgIGZvcm1hdF91bml0ID0gJ2YnCisgICAgY19pZ25vcmVkX2RlZmF1bHQgPSAiMC4wIgorCitjbGFzcyBkb3VibGVfY29udmVydGVyKENDb252ZXJ0ZXIpOgorICAgIHR5cGUgPSAnZG91YmxlJworICAgIGRlZmF1bHRfdHlwZSA9IGZsb2F0CisgICAgZm9ybWF0X3VuaXQgPSAnZCcKKyAgICBjX2lnbm9yZWRfZGVmYXVsdCA9ICIwLjAiCisKKworY2xhc3MgUHlfY29tcGxleF9jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgdHlwZSA9ICdQeV9jb21wbGV4JworICAgIGRlZmF1bHRfdHlwZSA9IGNvbXBsZXgKKyAgICBmb3JtYXRfdW5pdCA9ICdEJworICAgIGNfaWdub3JlZF9kZWZhdWx0ID0gInswLjAsIDAuMH0iCisKKworY2xhc3Mgb2JqZWN0X2NvbnZlcnRlcihDQ29udmVydGVyKToKKyAgICB0eXBlID0gJ1B5T2JqZWN0IConCisgICAgZm9ybWF0X3VuaXQgPSAnTycKKworICAgIGRlZiBjb252ZXJ0ZXJfaW5pdChzZWxmLCAqLCBjb252ZXJ0ZXI9Tm9uZSwgdHlwZT1Ob25lLCBzdWJjbGFzc19vZj1Ob25lKToKKyAgICAgICAgaWYgY29udmVydGVyOgorICAgICAgICAgICAgaWYgc3ViY2xhc3Nfb2Y6CisgICAgICAgICAgICAgICAgZmFpbCgib2JqZWN0OiBDYW5ub3QgcGFzcyBpbiBib3RoICdjb252ZXJ0ZXInIGFuZCAnc3ViY2xhc3Nfb2YnIikKKyAgICAgICAgICAgIHNlbGYuZm9ybWF0X3VuaXQgPSAnTyYnCisgICAgICAgICAgICBzZWxmLmNvbnZlcnRlciA9IGNvbnZlcnRlcgorICAgICAgICBlbGlmIHN1YmNsYXNzX29mOgorICAgICAgICAgICAgc2VsZi5mb3JtYXRfdW5pdCA9ICdPIScKKyAgICAgICAgICAgIHNlbGYuc3ViY2xhc3Nfb2YgPSBzdWJjbGFzc19vZgorCisgICAgICAgIGlmIHR5cGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLnR5cGUgPSB0eXBlCisKKworQGFkZF9sZWdhY3lfY19jb252ZXJ0ZXIoJ3MjJywgbGVuZ3RoPVRydWUpCitAYWRkX2xlZ2FjeV9jX2NvbnZlcnRlcigneScsIHR5cGVzPSJieXRlcyIpCitAYWRkX2xlZ2FjeV9jX2NvbnZlcnRlcigneSMnLCB0eXBlcz0iYnl0ZXMiLCBsZW5ndGg9VHJ1ZSkKK0BhZGRfbGVnYWN5X2NfY29udmVydGVyKCd6JywgbnVsbGFibGU9VHJ1ZSkKK0BhZGRfbGVnYWN5X2NfY29udmVydGVyKCd6IycsIG51bGxhYmxlPVRydWUsIGxlbmd0aD1UcnVlKQorY2xhc3Mgc3RyX2NvbnZlcnRlcihDQ29udmVydGVyKToKKyAgICB0eXBlID0gJ2NvbnN0IGNoYXIgKicKKyAgICBkZWZhdWx0X3R5cGUgPSAoc3RyLCBOdWxsLCBOb25lVHlwZSkKKyAgICBmb3JtYXRfdW5pdCA9ICdzJworCisgICAgZGVmIGNvbnZlcnRlcl9pbml0KHNlbGYsICosIGVuY29kaW5nPU5vbmUsIHR5cGVzPSJzdHIiLAorICAgICAgICBsZW5ndGg9RmFsc2UsIG51bGxhYmxlPUZhbHNlLCB6ZXJvZXM9RmFsc2UpOgorCisgICAgICAgIHR5cGVzID0gc2V0KHR5cGVzLnN0cmlwKCkuc3BsaXQoKSkKKyAgICAgICAgYnl0ZXNfdHlwZSA9IHNldCgoImJ5dGVzIiwpKQorICAgICAgICBzdHJfdHlwZSA9IHNldCgoInN0ciIsKSkKKyAgICAgICAgYWxsXzNfdHlwZSA9IHNldCgoImJ5dGVhcnJheSIsKSkgfCBieXRlc190eXBlIHwgc3RyX3R5cGUKKyAgICAgICAgaXNfYnl0ZXMgPSB0eXBlcyA9PSBieXRlc190eXBlCisgICAgICAgIGlzX3N0ciA9IHR5cGVzID09IHN0cl90eXBlCisgICAgICAgIGlzX2FsbF8zID0gdHlwZXMgPT0gYWxsXzNfdHlwZQorCisgICAgICAgIHNlbGYubGVuZ3RoID0gYm9vbChsZW5ndGgpCisgICAgICAgIGZvcm1hdF91bml0ID0gTm9uZQorCisgICAgICAgIGlmIGVuY29kaW5nOgorICAgICAgICAgICAgc2VsZi5lbmNvZGluZyA9IGVuY29kaW5nCisKKyAgICAgICAgICAgIGlmIGlzX3N0ciBhbmQgbm90IChsZW5ndGggb3IgemVyb2VzIG9yIG51bGxhYmxlKToKKyAgICAgICAgICAgICAgICBmb3JtYXRfdW5pdCA9ICdlcycKKyAgICAgICAgICAgIGVsaWYgaXNfYWxsXzMgYW5kIG5vdCAobGVuZ3RoIG9yIHplcm9lcyBvciBudWxsYWJsZSk6CisgICAgICAgICAgICAgICAgZm9ybWF0X3VuaXQgPSAnZXQnCisgICAgICAgICAgICBlbGlmIGlzX3N0ciBhbmQgbGVuZ3RoIGFuZCB6ZXJvZXMgYW5kIG5vdCBudWxsYWJsZToKKyAgICAgICAgICAgICAgICBmb3JtYXRfdW5pdCA9ICdlcyMnCisgICAgICAgICAgICBlbGlmIGlzX2FsbF8zIGFuZCBsZW5ndGggYW5kIG5vdCAobnVsbGFibGUgb3IgemVyb2VzKToKKyAgICAgICAgICAgICAgICBmb3JtYXRfdW5pdCA9ICdldCMnCisKKyAgICAgICAgICAgIGlmIGZvcm1hdF91bml0LmVuZHN3aXRoKCcjJyk6CisgICAgICAgICAgICAgICAgZmFpbCgiU29ycnk6IGNvZGUgdXNpbmcgZm9ybWF0IHVuaXQgIiwgcmVwcihmb3JtYXRfdW5pdCksICJwcm9iYWJseSBkb2Vzbid0IHdvcmsgcHJvcGVybHkgeWV0LlxuR2l2ZSBMYXJyeSB5b3VyIHRlc3QgY2FzZSBhbmQgaGUnbGwgaXQuIikKKyAgICAgICAgICAgICAgICAjIFRPRE8gc2V0IHBvaW50ZXIgdG8gTlVMTAorICAgICAgICAgICAgICAgICMgVE9ETyBhZGQgY2xlYW51cCBmb3IgYnVmZmVyCisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiB6ZXJvZXM6CisgICAgICAgICAgICAgICAgZmFpbCgic3RyX2NvbnZlcnRlcjogaWxsZWdhbCBjb21iaW5hdGlvbiBvZiBhcmd1bWVudHMgKHplcm9lcyBpcyBvbmx5IGxlZ2FsIHdpdGggYW4gZW5jb2RpbmcpIikKKworICAgICAgICAgICAgaWYgaXNfYnl0ZXMgYW5kIG5vdCAobnVsbGFibGUgb3IgbGVuZ3RoKToKKyAgICAgICAgICAgICAgICBmb3JtYXRfdW5pdCA9ICd5JworICAgICAgICAgICAgZWxpZiBpc19ieXRlcyBhbmQgbGVuZ3RoIGFuZCBub3QgbnVsbGFibGU6CisgICAgICAgICAgICAgICAgZm9ybWF0X3VuaXQgPSAneSMnCisgICAgICAgICAgICBlbGlmIGlzX3N0ciBhbmQgbm90IChudWxsYWJsZSBvciBsZW5ndGgpOgorICAgICAgICAgICAgICAgIGZvcm1hdF91bml0ID0gJ3MnCisgICAgICAgICAgICBlbGlmIGlzX3N0ciBhbmQgbGVuZ3RoIGFuZCBub3QgbnVsbGFibGU6CisgICAgICAgICAgICAgICAgZm9ybWF0X3VuaXQgPSAncyMnCisgICAgICAgICAgICBlbGlmIGlzX3N0ciBhbmQgbnVsbGFibGUgIGFuZCBub3QgbGVuZ3RoOgorICAgICAgICAgICAgICAgIGZvcm1hdF91bml0ID0gJ3onCisgICAgICAgICAgICBlbGlmIGlzX3N0ciBhbmQgbnVsbGFibGUgYW5kIGxlbmd0aDoKKyAgICAgICAgICAgICAgICBmb3JtYXRfdW5pdCA9ICd6IycKKworICAgICAgICBpZiBub3QgZm9ybWF0X3VuaXQ6CisgICAgICAgICAgICBmYWlsKCJzdHJfY29udmVydGVyOiBpbGxlZ2FsIGNvbWJpbmF0aW9uIG9mIGFyZ3VtZW50cyIpCisgICAgICAgIHNlbGYuZm9ybWF0X3VuaXQgPSBmb3JtYXRfdW5pdAorCisKK2NsYXNzIFB5Qnl0ZXNPYmplY3RfY29udmVydGVyKENDb252ZXJ0ZXIpOgorICAgIHR5cGUgPSAnUHlCeXRlc09iamVjdCAqJworICAgIGZvcm1hdF91bml0ID0gJ1MnCisKK2NsYXNzIFB5Qnl0ZUFycmF5T2JqZWN0X2NvbnZlcnRlcihDQ29udmVydGVyKToKKyAgICB0eXBlID0gJ1B5Qnl0ZUFycmF5T2JqZWN0IConCisgICAgZm9ybWF0X3VuaXQgPSAnWScKKworY2xhc3MgdW5pY29kZV9jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgdHlwZSA9ICdQeU9iamVjdCAqJworICAgIGRlZmF1bHRfdHlwZSA9IChzdHIsIE51bGwsIE5vbmVUeXBlKQorICAgIGZvcm1hdF91bml0ID0gJ1UnCisKK0BhZGRfbGVnYWN5X2NfY29udmVydGVyKCd1IycsIGxlbmd0aD1UcnVlKQorQGFkZF9sZWdhY3lfY19jb252ZXJ0ZXIoJ1onLCBudWxsYWJsZT1UcnVlKQorQGFkZF9sZWdhY3lfY19jb252ZXJ0ZXIoJ1ojJywgbnVsbGFibGU9VHJ1ZSwgbGVuZ3RoPVRydWUpCitjbGFzcyBQeV9VTklDT0RFX2NvbnZlcnRlcihDQ29udmVydGVyKToKKyAgICB0eXBlID0gJ1B5X1VOSUNPREUgKicKKyAgICBkZWZhdWx0X3R5cGUgPSAoc3RyLCBOdWxsLCBOb25lVHlwZSkKKyAgICBmb3JtYXRfdW5pdCA9ICd1JworCisgICAgZGVmIGNvbnZlcnRlcl9pbml0KHNlbGYsICosIG51bGxhYmxlPUZhbHNlLCBsZW5ndGg9RmFsc2UpOgorICAgICAgICBmb3JtYXRfdW5pdCA9ICdaJyBpZiBudWxsYWJsZSBlbHNlICd1JworICAgICAgICBpZiBsZW5ndGg6CisgICAgICAgICAgICBmb3JtYXRfdW5pdCArPSAnIycKKyAgICAgICAgICAgIHNlbGYubGVuZ3RoID0gVHJ1ZQorICAgICAgICBzZWxmLmZvcm1hdF91bml0ID0gZm9ybWF0X3VuaXQKKworIworIyBXZSBkZWZpbmUgdGhyZWUgc3RyaW5nIGNvbnZlbnRpb25zIGZvciBidWZmZXIgdHlwZXMgaW4gdGhlICd0eXBlcycgYXJndW1lbnQ6CisjICAnYnVmZmVyJyA6IGFueSBvYmplY3Qgc3VwcG9ydGluZyB0aGUgYnVmZmVyIGludGVyZmFjZQorIyAgJ3J3YnVmZmVyJzogYW55IG9iamVjdCBzdXBwb3J0aW5nIHRoZSBidWZmZXIgaW50ZXJmYWNlLCBidXQgbXVzdCBiZSB3cml0ZWFibGUKKyMgICdyb2J1ZmZlcic6IGFueSBvYmplY3Qgc3VwcG9ydGluZyB0aGUgYnVmZmVyIGludGVyZmFjZSwgYnV0IG11c3Qgbm90IGJlIHdyaXRlYWJsZQorIworQGFkZF9sZWdhY3lfY19jb252ZXJ0ZXIoJ3MqJywgdHlwZXM9J3N0ciBieXRlcyBieXRlYXJyYXkgYnVmZmVyJykKK0BhZGRfbGVnYWN5X2NfY29udmVydGVyKCd6KicsIHR5cGVzPSdzdHIgYnl0ZXMgYnl0ZWFycmF5IGJ1ZmZlcicsIG51bGxhYmxlPVRydWUpCitAYWRkX2xlZ2FjeV9jX2NvbnZlcnRlcigndyonLCB0eXBlcz0nYnl0ZWFycmF5IHJ3YnVmZmVyJykKK2NsYXNzIFB5X2J1ZmZlcl9jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgdHlwZSA9ICdQeV9idWZmZXInCisgICAgZm9ybWF0X3VuaXQgPSAneSonCisgICAgaW1wbF9ieV9yZWZlcmVuY2UgPSBUcnVlCisgICAgY19pZ25vcmVkX2RlZmF1bHQgPSAie05VTEwsIE5VTEx9IgorCisgICAgZGVmIGNvbnZlcnRlcl9pbml0KHNlbGYsICosIHR5cGVzPSdieXRlcyBieXRlYXJyYXkgYnVmZmVyJywgbnVsbGFibGU9RmFsc2UpOgorICAgICAgICBpZiBzZWxmLmRlZmF1bHQgbm90IGluICh1bnNwZWNpZmllZCwgTm9uZSk6CisgICAgICAgICAgICBmYWlsKCJUaGUgb25seSBsZWdhbCBkZWZhdWx0IHZhbHVlIGZvciBQeV9idWZmZXIgaXMgTm9uZS4iKQorICAgICAgICBzZWxmLmNfZGVmYXVsdCA9IHNlbGYuY19pZ25vcmVkX2RlZmF1bHQKKyAgICAgICAgdHlwZXMgPSBzZXQodHlwZXMuc3RyaXAoKS5zcGxpdCgpKQorICAgICAgICBieXRlc190eXBlID0gc2V0KCgnYnl0ZXMnLCkpCisgICAgICAgIGJ5dGVhcnJheV90eXBlID0gc2V0KCgnYnl0ZWFycmF5JywpKQorICAgICAgICBidWZmZXJfdHlwZSA9IHNldCgoJ2J1ZmZlcicsKSkKKyAgICAgICAgcndidWZmZXJfdHlwZSA9IHNldCgoJ3J3YnVmZmVyJywpKQorICAgICAgICByb2J1ZmZlcl90eXBlID0gc2V0KCgncm9idWZmZXInLCkpCisgICAgICAgIHN0cl90eXBlID0gc2V0KCgnc3RyJywpKQorICAgICAgICBieXRlc19ieXRlYXJyYXlfYnVmZmVyX3R5cGUgPSBieXRlc190eXBlIHwgYnl0ZWFycmF5X3R5cGUgfCBidWZmZXJfdHlwZQorCisgICAgICAgIGZvcm1hdF91bml0ID0gTm9uZQorICAgICAgICBpZiB0eXBlcyA9PSAoc3RyX3R5cGUgfCBieXRlc19ieXRlYXJyYXlfYnVmZmVyX3R5cGUpOgorICAgICAgICAgICAgZm9ybWF0X3VuaXQgPSAncyonIGlmIG5vdCBudWxsYWJsZSBlbHNlICd6KicKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIG51bGxhYmxlOgorICAgICAgICAgICAgICAgIGZhaWwoJ1B5X2J1ZmZlcl9jb252ZXJ0ZXI6IGlsbGVnYWwgY29tYmluYXRpb24gb2YgYXJndW1lbnRzIChudWxsYWJsZT1UcnVlKScpCisgICAgICAgICAgICBlbGlmIHR5cGVzID09IChieXRlc19ieXRlYXJyYXlfYnVmZmVyX3R5cGUpOgorICAgICAgICAgICAgICAgIGZvcm1hdF91bml0ID0gJ3kqJworICAgICAgICAgICAgZWxpZiB0eXBlcyA9PSAoYnl0ZWFycmF5X3R5cGUgfCByd2J1ZmZlcl90eXBlKToKKyAgICAgICAgICAgICAgICBmb3JtYXRfdW5pdCA9ICd3KicKKyAgICAgICAgaWYgbm90IGZvcm1hdF91bml0OgorICAgICAgICAgICAgZmFpbCgiUHlfYnVmZmVyX2NvbnZlcnRlcjogaWxsZWdhbCBjb21iaW5hdGlvbiBvZiBhcmd1bWVudHMiKQorCisgICAgICAgIHNlbGYuZm9ybWF0X3VuaXQgPSBmb3JtYXRfdW5pdAorCisgICAgZGVmIGNsZWFudXAoc2VsZik6CisgICAgICAgIG5hbWUgPSBlbnN1cmVfbGVnYWxfY19pZGVudGlmaWVyKHNlbGYubmFtZSkKKyAgICAgICAgcmV0dXJuICIiLmpvaW4oWyJpZiAoIiwgbmFtZSwgIi5vYmopXG4gICBQeUJ1ZmZlcl9SZWxlYXNlKCYiLCBuYW1lLCAiKTtcbiJdKQorCisKK2RlZiBjb3JyZWN0X25hbWVfZm9yX3NlbGYoZik6CisgICAgaWYgZi5raW5kIGluIChDQUxMQUJMRSwgTUVUSE9EX0lOSVQpOgorICAgICAgICBpZiBmLmNsczoKKyAgICAgICAgICAgIHJldHVybiAiUHlPYmplY3QgKiIsICJzZWxmIgorICAgICAgICByZXR1cm4gIlB5TW9kdWxlRGVmICoiLCAibW9kdWxlIgorICAgIGlmIGYua2luZCA9PSBTVEFUSUNfTUVUSE9EOgorICAgICAgICByZXR1cm4gInZvaWQgKiIsICJudWxsIgorICAgIGlmIGYua2luZCBpbiAoQ0xBU1NfTUVUSE9ELCBNRVRIT0RfTkVXKToKKyAgICAgICAgcmV0dXJuICJQeVR5cGVPYmplY3QgKiIsICJ0eXBlIgorICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiVW5oYW5kbGVkIHR5cGUgb2YgZnVuY3Rpb24gZjogIiArIHJlcHIoZi5raW5kKSkKKworZGVmIHJlcXVpcmVkX3R5cGVfZm9yX3NlbGZfZm9yX3BhcnNlcihmKToKKyAgICB0eXBlLCBfID0gY29ycmVjdF9uYW1lX2Zvcl9zZWxmKGYpCisgICAgaWYgZi5raW5kIGluIChNRVRIT0RfSU5JVCwgTUVUSE9EX05FVywgU1RBVElDX01FVEhPRCwgQ0xBU1NfTUVUSE9EKToKKyAgICAgICAgcmV0dXJuIHR5cGUKKyAgICByZXR1cm4gTm9uZQorCisKK2NsYXNzIHNlbGZfY29udmVydGVyKENDb252ZXJ0ZXIpOgorICAgICIiIgorICAgIEEgc3BlY2lhbC1jYXNlIGNvbnZlcnRlcjoKKyAgICB0aGlzIGlzIHRoZSBkZWZhdWx0IGNvbnZlcnRlciB1c2VkIGZvciAic2VsZiIuCisgICAgIiIiCisgICAgdHlwZSA9IE5vbmUKKyAgICBmb3JtYXRfdW5pdCA9ICcnCisKKyAgICBkZWYgY29udmVydGVyX2luaXQoc2VsZiwgKiwgdHlwZT1Ob25lKToKKyAgICAgICAgc2VsZi5zcGVjaWZpZWRfdHlwZSA9IHR5cGUKKworICAgIGRlZiBwcmVfcmVuZGVyKHNlbGYpOgorICAgICAgICBmID0gc2VsZi5mdW5jdGlvbgorICAgICAgICBkZWZhdWx0X3R5cGUsIGRlZmF1bHRfbmFtZSA9IGNvcnJlY3RfbmFtZV9mb3Jfc2VsZihmKQorICAgICAgICBzZWxmLnNpZ25hdHVyZV9uYW1lID0gZGVmYXVsdF9uYW1lCisgICAgICAgIHNlbGYudHlwZSA9IHNlbGYuc3BlY2lmaWVkX3R5cGUgb3Igc2VsZi50eXBlIG9yIGRlZmF1bHRfdHlwZQorCisgICAgICAgIGtpbmQgPSBzZWxmLmZ1bmN0aW9uLmtpbmQKKyAgICAgICAgbmV3X29yX2luaXQgPSBraW5kIGluIChNRVRIT0RfTkVXLCBNRVRIT0RfSU5JVCkKKworICAgICAgICBpZiAoa2luZCA9PSBTVEFUSUNfTUVUSE9EKSBvciBuZXdfb3JfaW5pdDoKKyAgICAgICAgICAgIHNlbGYuc2hvd19pbl9zaWduYXR1cmUgPSBGYWxzZQorCisgICAgIyB0cF9uZXcgKE1FVEhPRF9ORVcpIGZ1bmN0aW9ucyBhcmUgb2YgdHlwZSBuZXdmdW5jOgorICAgICMgICAgIHR5cGVkZWYgUHlPYmplY3QgKigqbmV3ZnVuYykoc3RydWN0IF90eXBlb2JqZWN0ICosIFB5T2JqZWN0ICosIFB5T2JqZWN0ICopOworICAgICMgUHlUeXBlT2JqZWN0IGlzIGEgdHlwZWRlZiBmb3Igc3RydWN0IF90eXBlb2JqZWN0LgorICAgICMKKyAgICAjIHRwX2luaXQgKE1FVEhPRF9JTklUKSBmdW5jdGlvbnMgYXJlIG9mIHR5cGUgaW5pdHByb2M6CisgICAgIyAgICAgdHlwZWRlZiBpbnQgKCppbml0cHJvYykoUHlPYmplY3QgKiwgUHlPYmplY3QgKiwgUHlPYmplY3QgKik7CisgICAgIworICAgICMgQWxsIG90aGVyIGZ1bmN0aW9ucyBnZW5lcmF0ZWQgYnkgQXJndW1lbnQgQ2xpbmljIGFyZSBzdG9yZWQgaW4KKyAgICAjIFB5TWV0aG9kRGVmIHN0cnVjdHVyZXMsIGluIHRoZSBtbF9tZXRoIHNsb3QsIHdoaWNoIGlzIG9mIHR5cGUgUHlDRnVuY3Rpb246CisgICAgIyAgICAgdHlwZWRlZiBQeU9iamVjdCAqKCpQeUNGdW5jdGlvbikoUHlPYmplY3QgKiwgUHlPYmplY3QgKik7CisgICAgIyBIb3dldmVyISAgV2UgaGFiaXR1YWxseSBjYXN0IHRoZXNlIGZ1bmN0aW9ucyB0byBQeUNGdW5jdGlvbiwKKyAgICAjIHNpbmNlIGZ1bmN0aW9ucyB0aGF0IGFjY2VwdCBrZXl3b3JkIGFyZ3VtZW50cyBkb24ndCBmaXQgdGhpcyBzaWduYXR1cmUKKyAgICAjIGJ1dCBhcmUgc3RvcmVkIHRoZXJlIGFueXdheS4gIFNvIHN0cmljdCB0eXBlIGVxdWFsaXR5IGlzbid0IGltcG9ydGFudAorICAgICMgZm9yIHRoZXNlIGZ1bmN0aW9ucy4KKyAgICAjCisgICAgIyBTbzoKKyAgICAjCisgICAgIyAqIFRoZSBuYW1lIG9mIHRoZSBmaXJzdCBwYXJhbWV0ZXIgdG8gdGhlIGltcGwgYW5kIHRoZSBwYXJzaW5nIGZ1bmN0aW9uIHdpbGwgYWx3YXlzCisgICAgIyAgIGJlIHNlbGYubmFtZS4KKyAgICAjCisgICAgIyAqIFRoZSB0eXBlIG9mIHRoZSBmaXJzdCBwYXJhbWV0ZXIgdG8gdGhlIGltcGwgd2lsbCBhbHdheXMgYmUgb2Ygc2VsZi50eXBlLgorICAgICMKKyAgICAjICogSWYgdGhlIGZ1bmN0aW9uIGlzIG5laXRoZXIgdHBfbmV3IChNRVRIT0RfTkVXKSBub3IgdHBfaW5pdCAoTUVUSE9EX0lOSVQpOgorICAgICMgICAqIFRoZSB0eXBlIG9mIHRoZSBmaXJzdCBwYXJhbWV0ZXIgdG8gdGhlIHBhcnNpbmcgZnVuY3Rpb24gaXMgYWxzbyBzZWxmLnR5cGUuCisgICAgIyAgICAgVGhpcyBtZWFucyB0aGF0IGlmIHlvdSBzdGVwIGludG8gdGhlIHBhcnNpbmcgZnVuY3Rpb24sIHlvdXIgInNlbGYiIHBhcmFtZXRlcgorICAgICMgICAgIGlzIG9mIHRoZSBjb3JyZWN0IHR5cGUsIHdoaWNoIG1heSBtYWtlIGRlYnVnZ2luZyBtb3JlIHBsZWFzYW50LgorICAgICMKKyAgICAjICogRWxzZSBpZiB0aGUgZnVuY3Rpb24gaXMgdHBfbmV3IChNRVRIT0RfTkVXKToKKyAgICAjICAgKiBUaGUgdHlwZSBvZiB0aGUgZmlyc3QgcGFyYW1ldGVyIHRvIHRoZSBwYXJzaW5nIGZ1bmN0aW9uIGlzICJQeVR5cGVPYmplY3QgKiIsCisgICAgIyAgICAgc28gdGhlIHR5cGUgc2lnbmF0dXJlIG9mIHRoZSBmdW5jdGlvbiBjYWxsIGlzIGFuIGV4YWN0IG1hdGNoLgorICAgICMgICAqIElmIHNlbGYudHlwZSAhPSAiUHlUeXBlT2JqZWN0ICoiLCB3ZSBjYXN0IHRoZSBmaXJzdCBwYXJhbWV0ZXIgdG8gc2VsZi50eXBlCisgICAgIyAgICAgaW4gdGhlIGltcGwgY2FsbC4KKyAgICAjCisgICAgIyAqIEVsc2UgaWYgdGhlIGZ1bmN0aW9uIGlzIHRwX2luaXQgKE1FVEhPRF9JTklUKToKKyAgICAjICAgKiBUaGUgdHlwZSBvZiB0aGUgZmlyc3QgcGFyYW1ldGVyIHRvIHRoZSBwYXJzaW5nIGZ1bmN0aW9uIGlzICJQeU9iamVjdCAqIiwKKyAgICAjICAgICBzbyB0aGUgdHlwZSBzaWduYXR1cmUgb2YgdGhlIGZ1bmN0aW9uIGNhbGwgaXMgYW4gZXhhY3QgbWF0Y2guCisgICAgIyAgICogSWYgc2VsZi50eXBlICE9ICJQeU9iamVjdCAqIiwgd2UgY2FzdCB0aGUgZmlyc3QgcGFyYW1ldGVyIHRvIHNlbGYudHlwZQorICAgICMgICAgIGluIHRoZSBpbXBsIGNhbGwuCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgcGFyc2VyX3R5cGUoc2VsZik6CisgICAgICAgIHJldHVybiByZXF1aXJlZF90eXBlX2Zvcl9zZWxmX2Zvcl9wYXJzZXIoc2VsZi5mdW5jdGlvbikgb3Igc2VsZi50eXBlCisKKyAgICBkZWYgcmVuZGVyKHNlbGYsIHBhcmFtZXRlciwgZGF0YSk6CisgICAgICAgICIiIgorICAgICAgICBwYXJhbWV0ZXIgaXMgYSBjbGluaWMuUGFyYW1ldGVyIGluc3RhbmNlLgorICAgICAgICBkYXRhIGlzIGEgQ1JlbmRlckRhdGEgaW5zdGFuY2UuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLmZ1bmN0aW9uLmtpbmQgPT0gU1RBVElDX01FVEhPRDoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHNlbGYuX3JlbmRlcl9zZWxmKHBhcmFtZXRlciwgZGF0YSkKKworICAgICAgICBpZiBzZWxmLnR5cGUgIT0gc2VsZi5wYXJzZXJfdHlwZToKKyAgICAgICAgICAgICMgaW5zZXJ0IGNhc3QgdG8gaW1wbF9hcmd1bWVudFswXSwgYWthIHNlbGYuCisgICAgICAgICAgICAjIHdlIGtub3cgd2UncmUgaW4gdGhlIGZpcnN0IHNsb3QgaW4gYWxsIHRoZSBDUmVuZGVyRGF0YSBsaXN0cywKKyAgICAgICAgICAgICMgYmVjYXVzZSB3ZSByZW5kZXIgcGFyYW1ldGVycyBpbiBvcmRlciwgYW5kIHNlbGYgaXMgYWx3YXlzIGZpcnN0LgorICAgICAgICAgICAgYXNzZXJ0IGxlbihkYXRhLmltcGxfYXJndW1lbnRzKSA9PSAxCisgICAgICAgICAgICBhc3NlcnQgZGF0YS5pbXBsX2FyZ3VtZW50c1swXSA9PSBzZWxmLm5hbWUKKyAgICAgICAgICAgIGRhdGEuaW1wbF9hcmd1bWVudHNbMF0gPSAnKCcgKyBzZWxmLnR5cGUgKyAiKSIgKyBkYXRhLmltcGxfYXJndW1lbnRzWzBdCisKKyAgICBkZWYgc2V0X3RlbXBsYXRlX2RpY3Qoc2VsZiwgdGVtcGxhdGVfZGljdCk6CisgICAgICAgIHRlbXBsYXRlX2RpY3RbJ3NlbGZfbmFtZSddID0gc2VsZi5uYW1lCisgICAgICAgIHRlbXBsYXRlX2RpY3RbJ3NlbGZfdHlwZSddID0gc2VsZi5wYXJzZXJfdHlwZQorICAgICAgICBraW5kID0gc2VsZi5mdW5jdGlvbi5raW5kCisgICAgICAgIGNscyA9IHNlbGYuZnVuY3Rpb24uY2xzCisKKyAgICAgICAgaWYgKChraW5kIGluIChNRVRIT0RfTkVXLCBNRVRIT0RfSU5JVCkpIGFuZCBjbHMgYW5kIGNscy50eXBlZGVmKToKKyAgICAgICAgICAgIGlmIGtpbmQgPT0gTUVUSE9EX05FVzoKKyAgICAgICAgICAgICAgICBwYXNzZWRfaW5fdHlwZSA9IHNlbGYubmFtZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwYXNzZWRfaW5fdHlwZSA9ICdQeV9UWVBFKHt9KScuZm9ybWF0KHNlbGYubmFtZSkKKworICAgICAgICAgICAgbGluZSA9ICcoe3Bhc3NlZF9pbl90eXBlfSA9PSB7dHlwZV9vYmplY3R9KSAmJlxuICAgICAgICAnCisgICAgICAgICAgICBkID0geworICAgICAgICAgICAgICAgICd0eXBlX29iamVjdCc6IHNlbGYuZnVuY3Rpb24uY2xzLnR5cGVfb2JqZWN0LAorICAgICAgICAgICAgICAgICdwYXNzZWRfaW5fdHlwZSc6IHBhc3NlZF9pbl90eXBlCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgdGVtcGxhdGVfZGljdFsnc2VsZl90eXBlX2NoZWNrJ10gPSBsaW5lLmZvcm1hdF9tYXAoZCkKKworCisKK2RlZiBhZGRfY19yZXR1cm5fY29udmVydGVyKGYsIG5hbWU9Tm9uZSk6CisgICAgaWYgbm90IG5hbWU6CisgICAgICAgIG5hbWUgPSBmLl9fbmFtZV9fCisgICAgICAgIGlmIG5vdCBuYW1lLmVuZHN3aXRoKCdfcmV0dXJuX2NvbnZlcnRlcicpOgorICAgICAgICAgICAgcmV0dXJuIGYKKyAgICAgICAgbmFtZSA9IG5hbWVbOi1sZW4oJ19yZXR1cm5fY29udmVydGVyJyldCisgICAgcmV0dXJuX2NvbnZlcnRlcnNbbmFtZV0gPSBmCisgICAgcmV0dXJuIGYKKworCitjbGFzcyBDUmV0dXJuQ29udmVydGVyQXV0b1JlZ2lzdGVyKHR5cGUpOgorICAgIGRlZiBfX2luaXRfXyhjbHMsIG5hbWUsIGJhc2VzLCBjbGFzc2RpY3QpOgorICAgICAgICBhZGRfY19yZXR1cm5fY29udmVydGVyKGNscykKKworY2xhc3MgQ1JldHVybkNvbnZlcnRlcihtZXRhY2xhc3M9Q1JldHVybkNvbnZlcnRlckF1dG9SZWdpc3Rlcik6CisKKyAgICAjIFRoZSBDIHR5cGUgdG8gdXNlIGZvciB0aGlzIHZhcmlhYmxlLgorICAgICMgJ3R5cGUnIHNob3VsZCBiZSBhIFB5dGhvbiBzdHJpbmcgc3BlY2lmeWluZyB0aGUgdHlwZSwgZS5nLiAiaW50Ii4KKyAgICAjIElmIHRoaXMgaXMgYSBwb2ludGVyIHR5cGUsIHRoZSB0eXBlIHN0cmluZyBzaG91bGQgZW5kIHdpdGggJyAqJy4KKyAgICB0eXBlID0gJ1B5T2JqZWN0IConCisKKyAgICAjIFRoZSBQeXRob24gZGVmYXVsdCB2YWx1ZSBmb3IgdGhpcyBwYXJhbWV0ZXIsIGFzIGEgUHl0aG9uIHZhbHVlLgorICAgICMgT3IgdGhlIG1hZ2ljIHZhbHVlICJ1bnNwZWNpZmllZCIgaWYgdGhlcmUgaXMgbm8gZGVmYXVsdC4KKyAgICBkZWZhdWx0ID0gTm9uZQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICosIHB5X2RlZmF1bHQ9Tm9uZSwgKiprd2FyZ3MpOgorICAgICAgICBzZWxmLnB5X2RlZmF1bHQgPSBweV9kZWZhdWx0CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYucmV0dXJuX2NvbnZlcnRlcl9pbml0KCoqa3dhcmdzKQorICAgICAgICBleGNlcHQgVHlwZUVycm9yIGFzIGU6CisgICAgICAgICAgICBzID0gJywgJy5qb2luKG5hbWUgKyAnPScgKyByZXByKHZhbHVlKSBmb3IgbmFtZSwgdmFsdWUgaW4ga3dhcmdzLml0ZW1zKCkpCisgICAgICAgICAgICBzeXMuZXhpdChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXyArICcoJyArIHMgKyAnKVxuJyArIHN0cihlKSkKKworICAgIGRlZiByZXR1cm5fY29udmVydGVyX2luaXQoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBkZWNsYXJlKHNlbGYsIGRhdGEsIG5hbWU9Il9yZXR1cm5fdmFsdWUiKToKKyAgICAgICAgbGluZSA9IFtdCisgICAgICAgIGFkZCA9IGxpbmUuYXBwZW5kCisgICAgICAgIGFkZChzZWxmLnR5cGUpCisgICAgICAgIGlmIG5vdCBzZWxmLnR5cGUuZW5kc3dpdGgoJyonKToKKyAgICAgICAgICAgIGFkZCgnICcpCisgICAgICAgIGFkZChuYW1lICsgJzsnKQorICAgICAgICBkYXRhLmRlY2xhcmF0aW9ucy5hcHBlbmQoJycuam9pbihsaW5lKSkKKyAgICAgICAgZGF0YS5yZXR1cm5fdmFsdWUgPSBuYW1lCisKKyAgICBkZWYgZXJyX29jY3VycmVkX2lmKHNlbGYsIGV4cHIsIGRhdGEpOgorICAgICAgICBkYXRhLnJldHVybl9jb252ZXJzaW9uLmFwcGVuZCgnaWYgKCh7fSkgJiYgUHlFcnJfT2NjdXJyZWQoKSlcbiAgICBnb3RvIGV4aXQ7XG4nLmZvcm1hdChleHByKSkKKworICAgIGRlZiBlcnJfb2NjdXJyZWRfaWZfbnVsbF9wb2ludGVyKHNlbGYsIHZhcmlhYmxlLCBkYXRhKToKKyAgICAgICAgZGF0YS5yZXR1cm5fY29udmVyc2lvbi5hcHBlbmQoJ2lmICh7fSA9PSBOVUxMKVxuICAgIGdvdG8gZXhpdDtcbicuZm9ybWF0KHZhcmlhYmxlKSkKKworICAgIGRlZiByZW5kZXIoc2VsZiwgZnVuY3Rpb24sIGRhdGEpOgorICAgICAgICAiIiIKKyAgICAgICAgZnVuY3Rpb24gaXMgYSBjbGluaWMuRnVuY3Rpb24gaW5zdGFuY2UuCisgICAgICAgIGRhdGEgaXMgYSBDUmVuZGVyRGF0YSBpbnN0YW5jZS4KKyAgICAgICAgIiIiCisgICAgICAgIHBhc3MKKworYWRkX2NfcmV0dXJuX2NvbnZlcnRlcihDUmV0dXJuQ29udmVydGVyLCAnb2JqZWN0JykKKworY2xhc3MgTm9uZVR5cGVfcmV0dXJuX2NvbnZlcnRlcihDUmV0dXJuQ29udmVydGVyKToKKyAgICBkZWYgcmVuZGVyKHNlbGYsIGZ1bmN0aW9uLCBkYXRhKToKKyAgICAgICAgc2VsZi5kZWNsYXJlKGRhdGEpCisgICAgICAgIGRhdGEucmV0dXJuX2NvbnZlcnNpb24uYXBwZW5kKCcnJworaWYgKF9yZXR1cm5fdmFsdWUgIT0gUHlfTm9uZSkKKyAgICBnb3RvIGV4aXQ7CityZXR1cm5fdmFsdWUgPSBQeV9Ob25lOworUHlfSU5DUkVGKFB5X05vbmUpOworJycnLnN0cmlwKCkpCisKK2NsYXNzIGJvb2xfcmV0dXJuX2NvbnZlcnRlcihDUmV0dXJuQ29udmVydGVyKToKKyAgICB0eXBlID0gJ2ludCcKKworICAgIGRlZiByZW5kZXIoc2VsZiwgZnVuY3Rpb24sIGRhdGEpOgorICAgICAgICBzZWxmLmRlY2xhcmUoZGF0YSkKKyAgICAgICAgc2VsZi5lcnJfb2NjdXJyZWRfaWYoIl9yZXR1cm5fdmFsdWUgPT0gLTEiLCBkYXRhKQorICAgICAgICBkYXRhLnJldHVybl9jb252ZXJzaW9uLmFwcGVuZCgncmV0dXJuX3ZhbHVlID0gUHlCb29sX0Zyb21Mb25nKChsb25nKV9yZXR1cm5fdmFsdWUpO1xuJykKKworY2xhc3MgbG9uZ19yZXR1cm5fY29udmVydGVyKENSZXR1cm5Db252ZXJ0ZXIpOgorICAgIHR5cGUgPSAnbG9uZycKKyAgICBjb252ZXJzaW9uX2ZuID0gJ1B5TG9uZ19Gcm9tTG9uZycKKyAgICBjYXN0ID0gJycKKworICAgIGRlZiByZW5kZXIoc2VsZiwgZnVuY3Rpb24sIGRhdGEpOgorICAgICAgICBzZWxmLmRlY2xhcmUoZGF0YSkKKyAgICAgICAgc2VsZi5lcnJfb2NjdXJyZWRfaWYoIl9yZXR1cm5fdmFsdWUgPT0gLTEiLCBkYXRhKQorICAgICAgICBkYXRhLnJldHVybl9jb252ZXJzaW9uLmFwcGVuZCgKKyAgICAgICAgICAgICcnLmpvaW4oKCdyZXR1cm5fdmFsdWUgPSAnLCBzZWxmLmNvbnZlcnNpb25fZm4sICcoJywgc2VsZi5jYXN0LCAnX3JldHVybl92YWx1ZSk7XG4nKSkpCisKK2NsYXNzIGludF9yZXR1cm5fY29udmVydGVyKGxvbmdfcmV0dXJuX2NvbnZlcnRlcik6CisgICAgdHlwZSA9ICdpbnQnCisgICAgY2FzdCA9ICcobG9uZyknCisKK2NsYXNzIGluaXRfcmV0dXJuX2NvbnZlcnRlcihsb25nX3JldHVybl9jb252ZXJ0ZXIpOgorICAgICIiIgorICAgIFNwZWNpYWwgcmV0dXJuIGNvbnZlcnRlciBmb3IgX19pbml0X18gZnVuY3Rpb25zLgorICAgICIiIgorICAgIHR5cGUgPSAnaW50JworICAgIGNhc3QgPSAnKGxvbmcpJworCisgICAgZGVmIHJlbmRlcihzZWxmLCBmdW5jdGlvbiwgZGF0YSk6CisgICAgICAgIHBhc3MKKworY2xhc3MgdW5zaWduZWRfbG9uZ19yZXR1cm5fY29udmVydGVyKGxvbmdfcmV0dXJuX2NvbnZlcnRlcik6CisgICAgdHlwZSA9ICd1bnNpZ25lZCBsb25nJworICAgIGNvbnZlcnNpb25fZm4gPSAnUHlMb25nX0Zyb21VbnNpZ25lZExvbmcnCisKK2NsYXNzIHVuc2lnbmVkX2ludF9yZXR1cm5fY29udmVydGVyKHVuc2lnbmVkX2xvbmdfcmV0dXJuX2NvbnZlcnRlcik6CisgICAgdHlwZSA9ICd1bnNpZ25lZCBpbnQnCisgICAgY2FzdCA9ICcodW5zaWduZWQgbG9uZyknCisKK2NsYXNzIFB5X3NzaXplX3RfcmV0dXJuX2NvbnZlcnRlcihsb25nX3JldHVybl9jb252ZXJ0ZXIpOgorICAgIHR5cGUgPSAnUHlfc3NpemVfdCcKKyAgICBjb252ZXJzaW9uX2ZuID0gJ1B5TG9uZ19Gcm9tU3NpemVfdCcKKworY2xhc3Mgc2l6ZV90X3JldHVybl9jb252ZXJ0ZXIobG9uZ19yZXR1cm5fY29udmVydGVyKToKKyAgICB0eXBlID0gJ3NpemVfdCcKKyAgICBjb252ZXJzaW9uX2ZuID0gJ1B5TG9uZ19Gcm9tU2l6ZV90JworCisKK2NsYXNzIGRvdWJsZV9yZXR1cm5fY29udmVydGVyKENSZXR1cm5Db252ZXJ0ZXIpOgorICAgIHR5cGUgPSAnZG91YmxlJworICAgIGNhc3QgPSAnJworCisgICAgZGVmIHJlbmRlcihzZWxmLCBmdW5jdGlvbiwgZGF0YSk6CisgICAgICAgIHNlbGYuZGVjbGFyZShkYXRhKQorICAgICAgICBzZWxmLmVycl9vY2N1cnJlZF9pZigiX3JldHVybl92YWx1ZSA9PSAtMS4wIiwgZGF0YSkKKyAgICAgICAgZGF0YS5yZXR1cm5fY29udmVyc2lvbi5hcHBlbmQoCisgICAgICAgICAgICAncmV0dXJuX3ZhbHVlID0gUHlGbG9hdF9Gcm9tRG91YmxlKCcgKyBzZWxmLmNhc3QgKyAnX3JldHVybl92YWx1ZSk7XG4nKQorCitjbGFzcyBmbG9hdF9yZXR1cm5fY29udmVydGVyKGRvdWJsZV9yZXR1cm5fY29udmVydGVyKToKKyAgICB0eXBlID0gJ2Zsb2F0JworICAgIGNhc3QgPSAnKGRvdWJsZSknCisKKworY2xhc3MgRGVjb2RlRlNEZWZhdWx0X3JldHVybl9jb252ZXJ0ZXIoQ1JldHVybkNvbnZlcnRlcik6CisgICAgdHlwZSA9ICdjaGFyIConCisKKyAgICBkZWYgcmVuZGVyKHNlbGYsIGZ1bmN0aW9uLCBkYXRhKToKKyAgICAgICAgc2VsZi5kZWNsYXJlKGRhdGEpCisgICAgICAgIHNlbGYuZXJyX29jY3VycmVkX2lmX251bGxfcG9pbnRlcigiX3JldHVybl92YWx1ZSIsIGRhdGEpCisgICAgICAgIGRhdGEucmV0dXJuX2NvbnZlcnNpb24uYXBwZW5kKAorICAgICAgICAgICAgJ3JldHVybl92YWx1ZSA9IFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQoX3JldHVybl92YWx1ZSk7XG4nKQorCisKK2NsYXNzIEluZGVudFN0YWNrOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5pbmRlbnRzID0gW10KKyAgICAgICAgc2VsZi5tYXJnaW4gPSBOb25lCisKKyAgICBkZWYgX2Vuc3VyZShzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuaW5kZW50czoKKyAgICAgICAgICAgIGZhaWwoJ0luZGVudFN0YWNrIGV4cGVjdGVkIGluZGVudHMsIGJ1dCBub25lIGFyZSBkZWZpbmVkLicpCisKKyAgICBkZWYgbWVhc3VyZShzZWxmLCBsaW5lKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybnMgdGhlIGxlbmd0aCBvZiB0aGUgbGluZSdzIG1hcmdpbi4KKyAgICAgICAgIiIiCisgICAgICAgIGlmICdcdCcgaW4gbGluZToKKyAgICAgICAgICAgIGZhaWwoJ1RhYiBjaGFyYWN0ZXJzIGFyZSBpbGxlZ2FsIGluIHRoZSBBcmd1bWVudCBDbGluaWMgRFNMLicpCisgICAgICAgIHN0cmlwcGVkID0gbGluZS5sc3RyaXAoKQorICAgICAgICBpZiBub3QgbGVuKHN0cmlwcGVkKToKKyAgICAgICAgICAgICMgd2UgY2FuJ3QgdGVsbCBhbnl0aGluZyBmcm9tIGFuIGVtcHR5IGxpbmUKKyAgICAgICAgICAgICMgc28ganVzdCBwcmV0ZW5kIGl0J3MgaW5kZW50ZWQgbGlrZSBvdXIgY3VycmVudCBpbmRlbnQKKyAgICAgICAgICAgIHNlbGYuX2Vuc3VyZSgpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5pbmRlbnRzWy0xXQorICAgICAgICByZXR1cm4gbGVuKGxpbmUpIC0gbGVuKHN0cmlwcGVkKQorCisgICAgZGVmIGluZmVyKHNlbGYsIGxpbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgSW5mZXIgd2hhdCBpcyBub3cgdGhlIGN1cnJlbnQgbWFyZ2luIGJhc2VkIG9uIHRoaXMgbGluZS4KKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIDEgaWYgd2UgaGF2ZSBpbmRlbnRlZCAob3IgdGhpcyBpcyB0aGUgZmlyc3QgbWFyZ2luKQorICAgICAgICAgICAgMCBpZiB0aGUgbWFyZ2luIGhhcyBub3QgY2hhbmdlZAorICAgICAgICAgICAtTiBpZiB3ZSBoYXZlIGRlZGVudGVkIE4gdGltZXMKKyAgICAgICAgIiIiCisgICAgICAgIGluZGVudCA9IHNlbGYubWVhc3VyZShsaW5lKQorICAgICAgICBtYXJnaW4gPSAnICcgKiBpbmRlbnQKKyAgICAgICAgaWYgbm90IHNlbGYuaW5kZW50czoKKyAgICAgICAgICAgIHNlbGYuaW5kZW50cy5hcHBlbmQoaW5kZW50KQorICAgICAgICAgICAgc2VsZi5tYXJnaW4gPSBtYXJnaW4KKyAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgIGN1cnJlbnQgPSBzZWxmLmluZGVudHNbLTFdCisgICAgICAgIGlmIGluZGVudCA9PSBjdXJyZW50OgorICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgaWYgaW5kZW50ID4gY3VycmVudDoKKyAgICAgICAgICAgIHNlbGYuaW5kZW50cy5hcHBlbmQoaW5kZW50KQorICAgICAgICAgICAgc2VsZi5tYXJnaW4gPSBtYXJnaW4KKyAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgICMgaW5kZW50IDwgY3VycmVudAorICAgICAgICBpZiBpbmRlbnQgbm90IGluIHNlbGYuaW5kZW50czoKKyAgICAgICAgICAgIGZhaWwoIklsbGVnYWwgb3V0ZGVudC4iKQorICAgICAgICBvdXRkZW50X2NvdW50ID0gMAorICAgICAgICB3aGlsZSBpbmRlbnQgIT0gY3VycmVudDoKKyAgICAgICAgICAgIHNlbGYuaW5kZW50cy5wb3AoKQorICAgICAgICAgICAgY3VycmVudCA9IHNlbGYuaW5kZW50c1stMV0KKyAgICAgICAgICAgIG91dGRlbnRfY291bnQgLT0gMQorICAgICAgICBzZWxmLm1hcmdpbiA9IG1hcmdpbgorICAgICAgICByZXR1cm4gb3V0ZGVudF9jb3VudAorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGRlcHRoKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJucyBob3cgbWFueSBtYXJnaW5zIGFyZSBjdXJyZW50bHkgZGVmaW5lZC4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBsZW4oc2VsZi5pbmRlbnRzKQorCisgICAgZGVmIGluZGVudChzZWxmLCBsaW5lKToKKyAgICAgICAgIiIiCisgICAgICAgIEluZGVudHMgYSBsaW5lIGJ5IHRoZSBjdXJyZW50bHkgZGVmaW5lZCBtYXJnaW4uCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gc2VsZi5tYXJnaW4gKyBsaW5lCisKKyAgICBkZWYgZGVkZW50KHNlbGYsIGxpbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgRGVkZW50cyBhIGxpbmUgYnkgdGhlIGN1cnJlbnRseSBkZWZpbmVkIG1hcmdpbi4KKyAgICAgICAgKFRoZSBpbnZlcnNlIG9mICdpbmRlbnQnLikKKyAgICAgICAgIiIiCisgICAgICAgIG1hcmdpbiA9IHNlbGYubWFyZ2luCisgICAgICAgIGluZGVudCA9IHNlbGYuaW5kZW50c1stMV0KKyAgICAgICAgaWYgbm90IGxpbmUuc3RhcnRzd2l0aChtYXJnaW4pOgorICAgICAgICAgICAgZmFpbCgnQ2Fubm90IGRlZGVudCwgbGluZSBkb2VzIG5vdCBzdGFydCB3aXRoIHRoZSBwcmV2aW91cyBtYXJnaW46JykKKyAgICAgICAgcmV0dXJuIGxpbmVbaW5kZW50Ol0KKworCitjbGFzcyBEU0xQYXJzZXI6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNsaW5pYyk6CisgICAgICAgIHNlbGYuY2xpbmljID0gY2xpbmljCisKKyAgICAgICAgc2VsZi5kaXJlY3RpdmVzID0ge30KKyAgICAgICAgZm9yIG5hbWUgaW4gZGlyKHNlbGYpOgorICAgICAgICAgICAgIyBmdW5jdGlvbnMgdGhhdCBzdGFydCB3aXRoIGRpcmVjdGl2ZV8gYXJlIGFkZGVkIHRvIGRpcmVjdGl2ZXMKKyAgICAgICAgICAgIF8sIHMsIGtleSA9IG5hbWUucGFydGl0aW9uKCJkaXJlY3RpdmVfIikKKyAgICAgICAgICAgIGlmIHM6CisgICAgICAgICAgICAgICAgc2VsZi5kaXJlY3RpdmVzW2tleV0gPSBnZXRhdHRyKHNlbGYsIG5hbWUpCisKKyAgICAgICAgICAgICMgZnVuY3Rpb25zIHRoYXQgc3RhcnQgd2l0aCBhdF8gYXJlIHRvbywgd2l0aCBhbiBAIGluIGZyb250CisgICAgICAgICAgICBfLCBzLCBrZXkgPSBuYW1lLnBhcnRpdGlvbigiYXRfIikKKyAgICAgICAgICAgIGlmIHM6CisgICAgICAgICAgICAgICAgc2VsZi5kaXJlY3RpdmVzWydAJyArIGtleV0gPSBnZXRhdHRyKHNlbGYsIG5hbWUpCisKKyAgICAgICAgc2VsZi5yZXNldCgpCisKKyAgICBkZWYgcmVzZXQoc2VsZik6CisgICAgICAgIHNlbGYuZnVuY3Rpb24gPSBOb25lCisgICAgICAgIHNlbGYuc3RhdGUgPSBzZWxmLnN0YXRlX2RzbF9zdGFydAorICAgICAgICBzZWxmLnBhcmFtZXRlcl9pbmRlbnQgPSBOb25lCisgICAgICAgIHNlbGYua2V5d29yZF9vbmx5ID0gRmFsc2UKKyAgICAgICAgc2VsZi5ncm91cCA9IDAKKyAgICAgICAgc2VsZi5wYXJhbWV0ZXJfc3RhdGUgPSBzZWxmLnBzX3N0YXJ0CisgICAgICAgIHNlbGYuc2Vlbl9wb3NpdGlvbmFsX3dpdGhfZGVmYXVsdCA9IEZhbHNlCisgICAgICAgIHNlbGYuaW5kZW50ID0gSW5kZW50U3RhY2soKQorICAgICAgICBzZWxmLmtpbmQgPSBDQUxMQUJMRQorICAgICAgICBzZWxmLmNvZXhpc3QgPSBGYWxzZQorICAgICAgICBzZWxmLnBhcmFtZXRlcl9jb250aW51YXRpb24gPSAnJworICAgICAgICBzZWxmLnByZXNlcnZlX291dHB1dCA9IEZhbHNlCisKKyAgICBkZWYgZGlyZWN0aXZlX3ZlcnNpb24oc2VsZiwgcmVxdWlyZWQpOgorICAgICAgICBnbG9iYWwgdmVyc2lvbgorICAgICAgICBpZiB2ZXJzaW9uX2NvbXBhcml0b3IodmVyc2lvbiwgcmVxdWlyZWQpIDwgMDoKKyAgICAgICAgICAgIGZhaWwoIkluc3VmZmljaWVudCBDbGluaWMgdmVyc2lvbiFcbiAgVmVyc2lvbjogIiArIHZlcnNpb24gKyAiXG4gIFJlcXVpcmVkOiAiICsgcmVxdWlyZWQpCisKKyAgICBkZWYgZGlyZWN0aXZlX21vZHVsZShzZWxmLCBuYW1lKToKKyAgICAgICAgZmllbGRzID0gbmFtZS5zcGxpdCgnLicpCisgICAgICAgIG5ldyA9IGZpZWxkcy5wb3AoKQorICAgICAgICBtb2R1bGUsIGNscyA9IHNlbGYuY2xpbmljLl9tb2R1bGVfYW5kX2NsYXNzKGZpZWxkcykKKyAgICAgICAgaWYgY2xzOgorICAgICAgICAgICAgZmFpbCgiQ2FuJ3QgbmVzdCBhIG1vZHVsZSBpbnNpZGUgYSBjbGFzcyEiKQorCisgICAgICAgIGlmIG5hbWUgaW4gbW9kdWxlLmNsYXNzZXM6CisgICAgICAgICAgICBmYWlsKCJBbHJlYWR5IGRlZmluZWQgbW9kdWxlICIgKyByZXByKG5hbWUpICsgIiEiKQorCisgICAgICAgIG0gPSBNb2R1bGUobmFtZSwgbW9kdWxlKQorICAgICAgICBtb2R1bGUubW9kdWxlc1tuYW1lXSA9IG0KKyAgICAgICAgc2VsZi5ibG9jay5zaWduYXR1cmVzLmFwcGVuZChtKQorCisgICAgZGVmIGRpcmVjdGl2ZV9jbGFzcyhzZWxmLCBuYW1lLCB0eXBlZGVmLCB0eXBlX29iamVjdCk6CisgICAgICAgIGZpZWxkcyA9IG5hbWUuc3BsaXQoJy4nKQorICAgICAgICBpbl9jbGFzc2VzID0gRmFsc2UKKyAgICAgICAgcGFyZW50ID0gc2VsZgorICAgICAgICBuYW1lID0gZmllbGRzLnBvcCgpCisgICAgICAgIHNvX2ZhciA9IFtdCisgICAgICAgIG1vZHVsZSwgY2xzID0gc2VsZi5jbGluaWMuX21vZHVsZV9hbmRfY2xhc3MoZmllbGRzKQorCisgICAgICAgIHBhcmVudCA9IGNscyBvciBtb2R1bGUKKyAgICAgICAgaWYgbmFtZSBpbiBwYXJlbnQuY2xhc3NlczoKKyAgICAgICAgICAgIGZhaWwoIkFscmVhZHkgZGVmaW5lZCBjbGFzcyAiICsgcmVwcihuYW1lKSArICIhIikKKworICAgICAgICBjID0gQ2xhc3MobmFtZSwgbW9kdWxlLCBjbHMsIHR5cGVkZWYsIHR5cGVfb2JqZWN0KQorICAgICAgICBwYXJlbnQuY2xhc3Nlc1tuYW1lXSA9IGMKKyAgICAgICAgc2VsZi5ibG9jay5zaWduYXR1cmVzLmFwcGVuZChjKQorCisgICAgZGVmIGRpcmVjdGl2ZV9zZXQoc2VsZiwgbmFtZSwgdmFsdWUpOgorICAgICAgICBpZiBuYW1lIG5vdCBpbiAoImxpbmVfcHJlZml4IiwgImxpbmVfc3VmZml4Iik6CisgICAgICAgICAgICBmYWlsKCJ1bmtub3duIHZhcmlhYmxlIiwgcmVwcihuYW1lKSkKKworICAgICAgICB2YWx1ZSA9IHZhbHVlLmZvcm1hdF9tYXAoeworICAgICAgICAgICAgJ2Jsb2NrIGNvbW1lbnQgc3RhcnQnOiAnLyonLAorICAgICAgICAgICAgJ2Jsb2NrIGNvbW1lbnQgZW5kJzogJyovJywKKyAgICAgICAgICAgIH0pCisKKyAgICAgICAgc2VsZi5jbGluaWMuX19kaWN0X19bbmFtZV0gPSB2YWx1ZQorCisgICAgZGVmIGRpcmVjdGl2ZV9kZXN0aW5hdGlvbihzZWxmLCBuYW1lLCBjb21tYW5kLCAqYXJncyk6CisgICAgICAgIGlmIGNvbW1hbmQgPT0gJ25ldyc6CisgICAgICAgICAgICBzZWxmLmNsaW5pYy5hZGRfZGVzdGluYXRpb24obmFtZSwgKmFyZ3MpCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpZiBjb21tYW5kID09ICdjbGVhcic6CisgICAgICAgICAgICBzZWxmLmNsaW5pYy5nZXRfZGVzdGluYXRpb24obmFtZSkuY2xlYXIoKQorICAgICAgICBmYWlsKCJ1bmtub3duIGRlc3RpbmF0aW9uIGNvbW1hbmQiLCByZXByKGNvbW1hbmQpKQorCisKKyAgICBkZWYgZGlyZWN0aXZlX291dHB1dChzZWxmLCBmaWVsZCwgZGVzdGluYXRpb249JycpOgorICAgICAgICBmZCA9IHNlbGYuY2xpbmljLmZpZWxkX2Rlc3RpbmF0aW9ucworCisgICAgICAgIGlmIGZpZWxkID09ICJwcmVzZXQiOgorICAgICAgICAgICAgcHJlc2V0ID0gc2VsZi5jbGluaWMucHJlc2V0cy5nZXQoZGVzdGluYXRpb24pCisgICAgICAgICAgICBpZiBub3QgcHJlc2V0OgorICAgICAgICAgICAgICAgIGZhaWwoIlVua25vd24gcHJlc2V0ICIgKyByZXByKGRlc3RpbmF0aW9uKSArICIhIikKKyAgICAgICAgICAgIGZkLnVwZGF0ZShwcmVzZXQpCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpZiBmaWVsZCA9PSAicHVzaCI6CisgICAgICAgICAgICBzZWxmLmNsaW5pYy5maWVsZF9kZXN0aW5hdGlvbnNfc3RhY2suYXBwZW5kKGZkLmNvcHkoKSkKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIGZpZWxkID09ICJwb3AiOgorICAgICAgICAgICAgaWYgbm90IHNlbGYuY2xpbmljLmZpZWxkX2Rlc3RpbmF0aW9uc19zdGFjazoKKyAgICAgICAgICAgICAgICBmYWlsKCJDYW4ndCAnb3V0cHV0IHBvcCcsIHN0YWNrIGlzIGVtcHR5ISIpCisgICAgICAgICAgICBwcmV2aW91c19mZCA9IHNlbGYuY2xpbmljLmZpZWxkX2Rlc3RpbmF0aW9uc19zdGFjay5wb3AoKQorICAgICAgICAgICAgZmQudXBkYXRlKHByZXZpb3VzX2ZkKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgIyBzZWNyZXQgY29tbWFuZCBmb3IgZGVidWdnaW5nIQorICAgICAgICBpZiBmaWVsZCA9PSAicHJpbnQiOgorICAgICAgICAgICAgc2VsZi5ibG9jay5vdXRwdXQuYXBwZW5kKHBwcmludC5wZm9ybWF0KGZkKSkKKyAgICAgICAgICAgIHNlbGYuYmxvY2sub3V0cHV0LmFwcGVuZCgnXG4nKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgZCA9IHNlbGYuY2xpbmljLmdldF9kZXN0aW5hdGlvbihkZXN0aW5hdGlvbikKKworICAgICAgICBpZiBmaWVsZCA9PSAiZXZlcnl0aGluZyI6CisgICAgICAgICAgICBmb3IgbmFtZSBpbiBsaXN0KGZkKToKKyAgICAgICAgICAgICAgICBmZFtuYW1lXSA9IGQKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIGZpZWxkIG5vdCBpbiBmZDoKKyAgICAgICAgICAgIGZhaWwoIkludmFsaWQgZmllbGQgIiArIHJlcHIoZmllbGQpICsgIiwgbXVzdCBiZSBvbmUgb2Y6XG4gIHByZXNldCBwdXNoIHBvcCBwcmludCBldmVyeXRoaW5nICIgKyAiICIuam9pbihmZCkpCisgICAgICAgIGZkW2ZpZWxkXSA9IGQKKworICAgIGRlZiBkaXJlY3RpdmVfZHVtcChzZWxmLCBuYW1lKToKKyAgICAgICAgc2VsZi5ibG9jay5vdXRwdXQuYXBwZW5kKHNlbGYuY2xpbmljLmdldF9kZXN0aW5hdGlvbihuYW1lKS5kdW1wKCkpCisKKyAgICBkZWYgZGlyZWN0aXZlX3ByaW50KHNlbGYsICphcmdzKToKKyAgICAgICAgc2VsZi5ibG9jay5vdXRwdXQuYXBwZW5kKCcgJy5qb2luKGFyZ3MpKQorICAgICAgICBzZWxmLmJsb2NrLm91dHB1dC5hcHBlbmQoJ1xuJykKKworICAgIGRlZiBkaXJlY3RpdmVfcHJlc2VydmUoc2VsZik6CisgICAgICAgIGlmIHNlbGYucHJlc2VydmVfb3V0cHV0OgorICAgICAgICAgICAgZmFpbCgiQ2FuJ3QgaGF2ZSBwcmVzZXJ2ZSB0d2ljZSBpbiBvbmUgYmxvY2shIikKKyAgICAgICAgc2VsZi5wcmVzZXJ2ZV9vdXRwdXQgPSBUcnVlCisKKyAgICBkZWYgYXRfY2xhc3NtZXRob2Qoc2VsZik6CisgICAgICAgIGlmIHNlbGYua2luZCBpcyBub3QgQ0FMTEFCTEU6CisgICAgICAgICAgICBmYWlsKCJDYW4ndCBzZXQgQGNsYXNzbWV0aG9kLCBmdW5jdGlvbiBpcyBub3QgYSBub3JtYWwgY2FsbGFibGUiKQorICAgICAgICBzZWxmLmtpbmQgPSBDTEFTU19NRVRIT0QKKworICAgIGRlZiBhdF9zdGF0aWNtZXRob2Qoc2VsZik6CisgICAgICAgIGlmIHNlbGYua2luZCBpcyBub3QgQ0FMTEFCTEU6CisgICAgICAgICAgICBmYWlsKCJDYW4ndCBzZXQgQHN0YXRpY21ldGhvZCwgZnVuY3Rpb24gaXMgbm90IGEgbm9ybWFsIGNhbGxhYmxlIikKKyAgICAgICAgc2VsZi5raW5kID0gU1RBVElDX01FVEhPRAorCisgICAgZGVmIGF0X2NvZXhpc3Qoc2VsZik6CisgICAgICAgIGlmIHNlbGYuY29leGlzdDoKKyAgICAgICAgICAgIGZhaWwoIkNhbGxlZCBAY29leGlzdCB0d2ljZSEiKQorICAgICAgICBzZWxmLmNvZXhpc3QgPSBUcnVlCisKKyAgICBkZWYgcGFyc2Uoc2VsZiwgYmxvY2spOgorICAgICAgICBzZWxmLnJlc2V0KCkKKyAgICAgICAgc2VsZi5ibG9jayA9IGJsb2NrCisgICAgICAgIHNlbGYuc2F2ZWRfb3V0cHV0ID0gc2VsZi5ibG9jay5vdXRwdXQKKyAgICAgICAgYmxvY2sub3V0cHV0ID0gW10KKyAgICAgICAgYmxvY2tfc3RhcnQgPSBzZWxmLmNsaW5pYy5ibG9ja19wYXJzZXIubGluZV9udW1iZXIKKyAgICAgICAgbGluZXMgPSBibG9jay5pbnB1dC5zcGxpdCgnXG4nKQorICAgICAgICBmb3IgbGluZV9udW1iZXIsIGxpbmUgaW4gZW51bWVyYXRlKGxpbmVzLCBzZWxmLmNsaW5pYy5ibG9ja19wYXJzZXIuYmxvY2tfc3RhcnRfbGluZV9udW1iZXIpOgorICAgICAgICAgICAgaWYgJ1x0JyBpbiBsaW5lOgorICAgICAgICAgICAgICAgIGZhaWwoJ1RhYiBjaGFyYWN0ZXJzIGFyZSBpbGxlZ2FsIGluIHRoZSBDbGluaWMgRFNMLlxuXHQnICsgcmVwcihsaW5lKSwgbGluZV9udW1iZXI9YmxvY2tfc3RhcnQpCisgICAgICAgICAgICBzZWxmLnN0YXRlKGxpbmUpCisKKyAgICAgICAgc2VsZi5uZXh0KHNlbGYuc3RhdGVfdGVybWluYWwpCisgICAgICAgIHNlbGYuc3RhdGUoTm9uZSkKKworICAgICAgICBibG9jay5vdXRwdXQuZXh0ZW5kKHNlbGYuY2xpbmljLmxhbmd1YWdlLnJlbmRlcihjbGluaWMsIGJsb2NrLnNpZ25hdHVyZXMpKQorCisgICAgICAgIGlmIHNlbGYucHJlc2VydmVfb3V0cHV0OgorICAgICAgICAgICAgaWYgYmxvY2sub3V0cHV0OgorICAgICAgICAgICAgICAgIGZhaWwoIidwcmVzZXJ2ZScgb25seSB3b3JrcyBmb3IgYmxvY2tzIHRoYXQgZG9uJ3QgcHJvZHVjZSBhbnkgb3V0cHV0ISIpCisgICAgICAgICAgICBibG9jay5vdXRwdXQgPSBzZWxmLnNhdmVkX291dHB1dAorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBpZ25vcmVfbGluZShsaW5lKToKKyAgICAgICAgIyBpZ25vcmUgY29tbWVudC1vbmx5IGxpbmVzCisgICAgICAgIGlmIGxpbmUubHN0cmlwKCkuc3RhcnRzd2l0aCgnIycpOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICAjIElnbm9yZSBlbXB0eSBsaW5lcyB0b28KKyAgICAgICAgIyAoYnV0IG5vdCBpbiBkb2NzdHJpbmcgc2VjdGlvbnMhKQorICAgICAgICBpZiBub3QgbGluZS5zdHJpcCgpOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgY2FsY3VsYXRlX2luZGVudChsaW5lKToKKyAgICAgICAgcmV0dXJuIGxlbihsaW5lKSAtIGxlbihsaW5lLnN0cmlwKCkpCisKKyAgICBkZWYgbmV4dChzZWxmLCBzdGF0ZSwgbGluZT1Ob25lKToKKyAgICAgICAgIyByZWFsX3ByaW50KHNlbGYuc3RhdGUuX19uYW1lX18sICItPiIsIHN0YXRlLl9fbmFtZV9fLCAiLCBsaW5lPSIsIGxpbmUpCisgICAgICAgIHNlbGYuc3RhdGUgPSBzdGF0ZQorICAgICAgICBpZiBsaW5lIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5zdGF0ZShsaW5lKQorCisgICAgZGVmIHN0YXRlX2RzbF9zdGFydChzZWxmLCBsaW5lKToKKyAgICAgICAgIyBzZWxmLmJsb2NrID0gc2VsZi5DbGluaWNPdXRwdXRCbG9jayhzZWxmKQorICAgICAgICBpZiBzZWxmLmlnbm9yZV9saW5lKGxpbmUpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgIyBpcyBpdCBhIGRpcmVjdGl2ZT8KKyAgICAgICAgZmllbGRzID0gc2hsZXguc3BsaXQobGluZSkKKyAgICAgICAgZGlyZWN0aXZlX25hbWUgPSBmaWVsZHNbMF0KKyAgICAgICAgZGlyZWN0aXZlID0gc2VsZi5kaXJlY3RpdmVzLmdldChkaXJlY3RpdmVfbmFtZSwgTm9uZSkKKyAgICAgICAgaWYgZGlyZWN0aXZlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGRpcmVjdGl2ZSgqZmllbGRzWzE6XSkKKyAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBmYWlsKHN0cihlKSkKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHNlbGYubmV4dChzZWxmLnN0YXRlX21vZHVsZW5hbWVfbmFtZSwgbGluZSkKKworICAgIGRlZiBzdGF0ZV9tb2R1bGVuYW1lX25hbWUoc2VsZiwgbGluZSk6CisgICAgICAgICMgbG9va2luZyBmb3IgZGVjbGFyYXRpb24sIHdoaWNoIGVzdGFibGlzaGVzIHRoZSBsZWZ0bW9zdCBjb2x1bW4KKyAgICAgICAgIyBsaW5lIHNob3VsZCBiZQorICAgICAgICAjICAgICBtb2R1bGVuYW1lLmZubmFtZSBbYXMgY19iYXNlbmFtZV0gWy0+IHJldHVybiBhbm5vdGF0aW9uXQorICAgICAgICAjIHNxdWFyZSBicmFja2V0cyBkZW5vdGUgb3B0aW9uYWwgc3ludGF4LgorICAgICAgICAjCisgICAgICAgICMgYWx0ZXJuYXRpdmVseToKKyAgICAgICAgIyAgICAgbW9kdWxlbmFtZS5mbm5hbWUgW2FzIGNfYmFzZW5hbWVdID0gbW9kdWxlbmFtZS5leGlzdGluZ19mbl9uYW1lCisgICAgICAgICMgY2xvbmVzIHRoZSBwYXJhbWV0ZXJzIGFuZCByZXR1cm4gY29udmVydGVyIGZyb20gdGhhdAorICAgICAgICAjIGZ1bmN0aW9uLiAgeW91IGNhbid0IG1vZGlmeSB0aGVtLiAgeW91IG11c3QgZW50ZXIgYQorICAgICAgICAjIG5ldyBkb2NzdHJpbmcuCisgICAgICAgICMKKyAgICAgICAgIyAoYnV0IHdlIG1pZ2h0IGZpbmQgYSBkaXJlY3RpdmUgZmlyc3QhKQorICAgICAgICAjCisgICAgICAgICMgdGhpcyBsaW5lIGlzIHBlcm1pdHRlZCB0byBzdGFydCB3aXRoIHdoaXRlc3BhY2UuCisgICAgICAgICMgd2UnbGwgY2FsbCB0aGlzIG51bWJlciBvZiBzcGFjZXMgRiAoZm9yICJmdW5jdGlvbiIpLgorCisgICAgICAgIGlmIG5vdCBsaW5lLnN0cmlwKCk6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBzZWxmLmluZGVudC5pbmZlcihsaW5lKQorCisgICAgICAgICMgYXJlIHdlIGNsb25pbmc/CisgICAgICAgIGJlZm9yZSwgZXF1YWxzLCBleGlzdGluZyA9IGxpbmUucnBhcnRpdGlvbignPScpCisgICAgICAgIGlmIGVxdWFsczoKKyAgICAgICAgICAgIGZ1bGxfbmFtZSwgXywgY19iYXNlbmFtZSA9IGJlZm9yZS5wYXJ0aXRpb24oJyBhcyAnKQorICAgICAgICAgICAgZnVsbF9uYW1lID0gZnVsbF9uYW1lLnN0cmlwKCkKKyAgICAgICAgICAgIGNfYmFzZW5hbWUgPSBjX2Jhc2VuYW1lLnN0cmlwKCkKKyAgICAgICAgICAgIGV4aXN0aW5nID0gZXhpc3Rpbmcuc3RyaXAoKQorICAgICAgICAgICAgaWYgKGlzX2xlZ2FsX3B5X2lkZW50aWZpZXIoZnVsbF9uYW1lKSBhbmQKKyAgICAgICAgICAgICAgICAobm90IGNfYmFzZW5hbWUgb3IgaXNfbGVnYWxfY19pZGVudGlmaWVyKGNfYmFzZW5hbWUpKSBhbmQKKyAgICAgICAgICAgICAgICBpc19sZWdhbF9weV9pZGVudGlmaWVyKGV4aXN0aW5nKSk6CisgICAgICAgICAgICAgICAgIyB3ZSdyZSBjbG9uaW5nIQorICAgICAgICAgICAgICAgIGZpZWxkcyA9IFt4LnN0cmlwKCkgZm9yIHggaW4gZXhpc3Rpbmcuc3BsaXQoJy4nKV0KKyAgICAgICAgICAgICAgICBmdW5jdGlvbl9uYW1lID0gZmllbGRzLnBvcCgpCisgICAgICAgICAgICAgICAgbW9kdWxlLCBjbHMgPSBzZWxmLmNsaW5pYy5fbW9kdWxlX2FuZF9jbGFzcyhmaWVsZHMpCisKKyAgICAgICAgICAgICAgICBmb3IgZXhpc3RpbmdfZnVuY3Rpb24gaW4gKGNscyBvciBtb2R1bGUpLmZ1bmN0aW9uczoKKyAgICAgICAgICAgICAgICAgICAgaWYgZXhpc3RpbmdfZnVuY3Rpb24ubmFtZSA9PSBmdW5jdGlvbl9uYW1lOgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBleGlzdGluZ19mdW5jdGlvbiA9IE5vbmUKKyAgICAgICAgICAgICAgICBpZiBub3QgZXhpc3RpbmdfZnVuY3Rpb246CisgICAgICAgICAgICAgICAgICAgIHByaW50KCJjbGFzcyIsIGNscywgIm1vZHVsZSIsIG1vZHVsZSwgImV4aXN0aW5nIiwgZXhpc3RpbmcpCisgICAgICAgICAgICAgICAgICAgIHByaW50KCJjbHMuIGZ1bmN0aW9ucyIsIGNscy5mdW5jdGlvbnMpCisgICAgICAgICAgICAgICAgICAgIGZhaWwoIkNvdWxkbid0IGZpbmQgZXhpc3RpbmcgZnVuY3Rpb24gIiArIHJlcHIoZXhpc3RpbmcpICsgIiEiKQorCisgICAgICAgICAgICAgICAgZmllbGRzID0gW3guc3RyaXAoKSBmb3IgeCBpbiBmdWxsX25hbWUuc3BsaXQoJy4nKV0KKyAgICAgICAgICAgICAgICBmdW5jdGlvbl9uYW1lID0gZmllbGRzLnBvcCgpCisgICAgICAgICAgICAgICAgbW9kdWxlLCBjbHMgPSBzZWxmLmNsaW5pYy5fbW9kdWxlX2FuZF9jbGFzcyhmaWVsZHMpCisKKyAgICAgICAgICAgICAgICBpZiBub3QgKGV4aXN0aW5nX2Z1bmN0aW9uLmtpbmQgPT0gc2VsZi5raW5kIGFuZCBleGlzdGluZ19mdW5jdGlvbi5jb2V4aXN0ID09IHNlbGYuY29leGlzdCk6CisgICAgICAgICAgICAgICAgICAgIGZhaWwoIidraW5kJyBvZiBmdW5jdGlvbiBhbmQgY2xvbmVkIGZ1bmN0aW9uIGRvbid0IG1hdGNoISAgKEBjbGFzc21ldGhvZC9Ac3RhdGljbWV0aG9kL0Bjb2V4aXN0KSIpCisgICAgICAgICAgICAgICAgc2VsZi5mdW5jdGlvbiA9IGV4aXN0aW5nX2Z1bmN0aW9uLmNvcHkobmFtZT1mdW5jdGlvbl9uYW1lLCBmdWxsX25hbWU9ZnVsbF9uYW1lLCBtb2R1bGU9bW9kdWxlLCBjbHM9Y2xzLCBjX2Jhc2VuYW1lPWNfYmFzZW5hbWUsIGRvY3N0cmluZz0nJykKKworICAgICAgICAgICAgICAgIHNlbGYuYmxvY2suc2lnbmF0dXJlcy5hcHBlbmQoc2VsZi5mdW5jdGlvbikKKyAgICAgICAgICAgICAgICAoY2xzIG9yIG1vZHVsZSkuZnVuY3Rpb25zLmFwcGVuZChzZWxmLmZ1bmN0aW9uKQorICAgICAgICAgICAgICAgIHNlbGYubmV4dChzZWxmLnN0YXRlX2Z1bmN0aW9uX2RvY3N0cmluZykKKyAgICAgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBsaW5lLCBfLCByZXR1cm5zID0gbGluZS5wYXJ0aXRpb24oJy0+JykKKworICAgICAgICBmdWxsX25hbWUsIF8sIGNfYmFzZW5hbWUgPSBsaW5lLnBhcnRpdGlvbignIGFzICcpCisgICAgICAgIGZ1bGxfbmFtZSA9IGZ1bGxfbmFtZS5zdHJpcCgpCisgICAgICAgIGNfYmFzZW5hbWUgPSBjX2Jhc2VuYW1lLnN0cmlwKCkgb3IgTm9uZQorCisgICAgICAgIGlmIG5vdCBpc19sZWdhbF9weV9pZGVudGlmaWVyKGZ1bGxfbmFtZSk6CisgICAgICAgICAgICBmYWlsKCJJbGxlZ2FsIGZ1bmN0aW9uIG5hbWU6IHt9Ii5mb3JtYXQoZnVsbF9uYW1lKSkKKyAgICAgICAgaWYgY19iYXNlbmFtZSBhbmQgbm90IGlzX2xlZ2FsX2NfaWRlbnRpZmllcihjX2Jhc2VuYW1lKToKKyAgICAgICAgICAgIGZhaWwoIklsbGVnYWwgQyBiYXNlbmFtZToge30iLmZvcm1hdChjX2Jhc2VuYW1lKSkKKworICAgICAgICByZXR1cm5fY29udmVydGVyID0gTm9uZQorICAgICAgICBpZiByZXR1cm5zOgorICAgICAgICAgICAgYXN0X2lucHV0ID0gImRlZiB4KCkgLT4ge306IHBhc3MiLmZvcm1hdChyZXR1cm5zKQorICAgICAgICAgICAgbW9kdWxlID0gTm9uZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG1vZHVsZSA9IGFzdC5wYXJzZShhc3RfaW5wdXQpCisgICAgICAgICAgICBleGNlcHQgU3ludGF4RXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgaWYgbm90IG1vZHVsZToKKyAgICAgICAgICAgICAgICBmYWlsKCJCYWRseS1mb3JtZWQgYW5ub3RhdGlvbiBmb3IgIiArIGZ1bGxfbmFtZSArICI6ICIgKyByZXR1cm5zKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG5hbWUsIGxlZ2FjeSwga3dhcmdzID0gc2VsZi5wYXJzZV9jb252ZXJ0ZXIobW9kdWxlLmJvZHlbMF0ucmV0dXJucykKKyAgICAgICAgICAgICAgICBpZiBsZWdhY3k6CisgICAgICAgICAgICAgICAgICAgIGZhaWwoIkxlZ2FjeSBjb252ZXJ0ZXIgeyFyfSBub3QgYWxsb3dlZCBhcyBhIHJldHVybiBjb252ZXJ0ZXIiCisgICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1hdChuYW1lKSkKKyAgICAgICAgICAgICAgICBpZiBuYW1lIG5vdCBpbiByZXR1cm5fY29udmVydGVyczoKKyAgICAgICAgICAgICAgICAgICAgZmFpbCgiTm8gYXZhaWxhYmxlIHJldHVybiBjb252ZXJ0ZXIgY2FsbGVkICIgKyByZXByKG5hbWUpKQorICAgICAgICAgICAgICAgIHJldHVybl9jb252ZXJ0ZXIgPSByZXR1cm5fY29udmVydGVyc1tuYW1lXSgqKmt3YXJncykKKyAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgIGZhaWwoIkJhZGx5LWZvcm1lZCBhbm5vdGF0aW9uIGZvciAiICsgZnVsbF9uYW1lICsgIjogIiArIHJldHVybnMpCisKKyAgICAgICAgZmllbGRzID0gW3guc3RyaXAoKSBmb3IgeCBpbiBmdWxsX25hbWUuc3BsaXQoJy4nKV0KKyAgICAgICAgZnVuY3Rpb25fbmFtZSA9IGZpZWxkcy5wb3AoKQorICAgICAgICBtb2R1bGUsIGNscyA9IHNlbGYuY2xpbmljLl9tb2R1bGVfYW5kX2NsYXNzKGZpZWxkcykKKworICAgICAgICBmaWVsZHMgPSBmdWxsX25hbWUuc3BsaXQoJy4nKQorICAgICAgICBpZiBmaWVsZHNbLTFdID09ICdfX25ld19fJzoKKyAgICAgICAgICAgIGlmIChzZWxmLmtpbmQgIT0gQ0xBU1NfTUVUSE9EKSBvciAobm90IGNscyk6CisgICAgICAgICAgICAgICAgZmFpbCgiX19uZXdfXyBtdXN0IGJlIGEgY2xhc3MgbWV0aG9kISIpCisgICAgICAgICAgICBzZWxmLmtpbmQgPSBNRVRIT0RfTkVXCisgICAgICAgIGVsaWYgZmllbGRzWy0xXSA9PSAnX19pbml0X18nOgorICAgICAgICAgICAgaWYgKHNlbGYua2luZCAhPSBDQUxMQUJMRSkgb3IgKG5vdCBjbHMpOgorICAgICAgICAgICAgICAgIGZhaWwoIl9faW5pdF9fIG11c3QgYmUgYSBub3JtYWwgbWV0aG9kLCBub3QgYSBjbGFzcyBvciBzdGF0aWMgbWV0aG9kISIpCisgICAgICAgICAgICBzZWxmLmtpbmQgPSBNRVRIT0RfSU5JVAorICAgICAgICAgICAgaWYgbm90IHJldHVybl9jb252ZXJ0ZXI6CisgICAgICAgICAgICAgICAgcmV0dXJuX2NvbnZlcnRlciA9IGluaXRfcmV0dXJuX2NvbnZlcnRlcigpCisgICAgICAgIGVsaWYgZmllbGRzWy0xXSBpbiB1bnN1cHBvcnRlZF9zcGVjaWFsX21ldGhvZHM6CisgICAgICAgICAgICBmYWlsKGZpZWxkc1stMV0gKyAiIGlzIGEgc3BlY2lhbCBtZXRob2QgYW5kIGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gQXJndW1lbnQgQ2xpbmljISAgKFlldC4pIikKKworICAgICAgICBpZiBub3QgcmV0dXJuX2NvbnZlcnRlcjoKKyAgICAgICAgICAgIHJldHVybl9jb252ZXJ0ZXIgPSBDUmV0dXJuQ29udmVydGVyKCkKKworICAgICAgICBpZiBub3QgbW9kdWxlOgorICAgICAgICAgICAgZmFpbCgiVW5kZWZpbmVkIG1vZHVsZSB1c2VkIGluIGRlY2xhcmF0aW9uIG9mICIgKyByZXByKGZ1bGxfbmFtZS5zdHJpcCgpKSArICIuIikKKyAgICAgICAgc2VsZi5mdW5jdGlvbiA9IEZ1bmN0aW9uKG5hbWU9ZnVuY3Rpb25fbmFtZSwgZnVsbF9uYW1lPWZ1bGxfbmFtZSwgbW9kdWxlPW1vZHVsZSwgY2xzPWNscywgY19iYXNlbmFtZT1jX2Jhc2VuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuX2NvbnZlcnRlcj1yZXR1cm5fY29udmVydGVyLCBraW5kPXNlbGYua2luZCwgY29leGlzdD1zZWxmLmNvZXhpc3QpCisgICAgICAgIHNlbGYuYmxvY2suc2lnbmF0dXJlcy5hcHBlbmQoc2VsZi5mdW5jdGlvbikKKworICAgICAgICAjIGluc2VydCBhIHNlbGYgY29udmVydGVyIGF1dG9tYXRpY2FsbHkKKyAgICAgICAgdHlwZSwgbmFtZSA9IGNvcnJlY3RfbmFtZV9mb3Jfc2VsZihzZWxmLmZ1bmN0aW9uKQorICAgICAgICBrd2FyZ3MgPSB7fQorICAgICAgICBpZiBjbHMgYW5kIHR5cGUgPT0gIlB5T2JqZWN0ICoiOgorICAgICAgICAgICAga3dhcmdzWyd0eXBlJ10gPSBjbHMudHlwZWRlZgorICAgICAgICBzYyA9IHNlbGYuZnVuY3Rpb24uc2VsZl9jb252ZXJ0ZXIgPSBzZWxmX2NvbnZlcnRlcihuYW1lLCBuYW1lLCBzZWxmLmZ1bmN0aW9uLCAqKmt3YXJncykKKyAgICAgICAgcF9zZWxmID0gUGFyYW1ldGVyKHNjLm5hbWUsIGluc3BlY3QuUGFyYW1ldGVyLlBPU0lUSU9OQUxfT05MWSwgZnVuY3Rpb249c2VsZi5mdW5jdGlvbiwgY29udmVydGVyPXNjKQorICAgICAgICBzZWxmLmZ1bmN0aW9uLnBhcmFtZXRlcnNbc2MubmFtZV0gPSBwX3NlbGYKKworICAgICAgICAoY2xzIG9yIG1vZHVsZSkuZnVuY3Rpb25zLmFwcGVuZChzZWxmLmZ1bmN0aW9uKQorICAgICAgICBzZWxmLm5leHQoc2VsZi5zdGF0ZV9wYXJhbWV0ZXJzX3N0YXJ0KQorCisgICAgIyBOb3cgZW50ZXJpbmcgdGhlIHBhcmFtZXRlcnMgc2VjdGlvbi4gIFRoZSBydWxlcywgZm9ybWFsbHkgc3RhdGVkOgorICAgICMKKyAgICAjICAgKiBBbGwgbGluZXMgbXVzdCBiZSBpbmRlbnRlZCB3aXRoIHNwYWNlcyBvbmx5LgorICAgICMgICAqIFRoZSBmaXJzdCBsaW5lIG11c3QgYmUgYSBwYXJhbWV0ZXIgZGVjbGFyYXRpb24uCisgICAgIyAgICogVGhlIGZpcnN0IGxpbmUgbXVzdCBiZSBpbmRlbnRlZC4KKyAgICAjICAgICAgICogVGhpcyBmaXJzdCBsaW5lIGVzdGFibGlzaGVzIHRoZSBpbmRlbnQgZm9yIHBhcmFtZXRlcnMuCisgICAgIyAgICAgICAqIFdlJ2xsIGNhbGwgdGhpcyBudW1iZXIgb2Ygc3BhY2VzIFAgKGZvciAicGFyYW1ldGVyIikuCisgICAgIyAgICogVGhlbmNlZm9ydGg6CisgICAgIyAgICAgICAqIExpbmVzIGluZGVudGVkIHdpdGggUCBzcGFjZXMgc3BlY2lmeSBhIHBhcmFtZXRlci4KKyAgICAjICAgICAgICogTGluZXMgaW5kZW50ZWQgd2l0aCA+IFAgc3BhY2VzIGFyZSBkb2NzdHJpbmdzIGZvciB0aGUgcHJldmlvdXMKKyAgICAjICAgICAgICAgcGFyYW1ldGVyLgorICAgICMgICAgICAgICAgICogV2UnbGwgY2FsbCB0aGlzIG51bWJlciBvZiBzcGFjZXMgRCAoZm9yICJkb2NzdHJpbmciKS4KKyAgICAjICAgICAgICAgICAqIEFsbCBzdWJzZXF1ZW50IGxpbmVzIGluZGVudGVkIHdpdGggPj0gRCBzcGFjZXMgYXJlIHN0b3JlZCBhcworICAgICMgICAgICAgICAgICAgcGFydCBvZiB0aGUgcGVyLXBhcmFtZXRlciBkb2NzdHJpbmcuCisgICAgIyAgICAgICAgICAgKiBBbGwgbGluZXMgd2lsbCBoYXZlIHRoZSBmaXJzdCBEIHNwYWNlcyBvZiB0aGUgaW5kZW50IHN0cmlwcGVkCisgICAgIyAgICAgICAgICAgICBiZWZvcmUgdGhleSBhcmUgc3RvcmVkLgorICAgICMgICAgICAgICAgICogSXQncyBpbGxlZ2FsIHRvIGhhdmUgYSBsaW5lIHN0YXJ0aW5nIHdpdGggYSBudW1iZXIgb2Ygc3BhY2VzIFgKKyAgICAjICAgICAgICAgICAgIHN1Y2ggdGhhdCBQIDwgWCA8IEQuCisgICAgIyAgICAgICAqIEEgbGluZSB3aXRoIDwgUCBzcGFjZXMgaXMgdGhlIGZpcnN0IGxpbmUgb2YgdGhlIGZ1bmN0aW9uCisgICAgIyAgICAgICAgIGRvY3N0cmluZywgd2hpY2ggZW5kcyBwcm9jZXNzaW5nIGZvciBwYXJhbWV0ZXJzIGFuZCBwZXItcGFyYW1ldGVyCisgICAgIyAgICAgICAgIGRvY3N0cmluZ3MuCisgICAgIyAgICAgICAgICAgKiBUaGUgZmlyc3QgbGluZSBvZiB0aGUgZnVuY3Rpb24gZG9jc3RyaW5nIG11c3QgYmUgYXQgdGhlIHNhbWUKKyAgICAjICAgICAgICAgICAgIGluZGVudCBhcyB0aGUgZnVuY3Rpb24gZGVjbGFyYXRpb24uCisgICAgIyAgICAgICAqIEl0J3MgaWxsZWdhbCB0byBoYXZlIGFueSBsaW5lIGluIHRoZSBwYXJhbWV0ZXJzIHNlY3Rpb24gc3RhcnRpbmcKKyAgICAjICAgICAgICAgd2l0aCBYIHNwYWNlcyBzdWNoIHRoYXQgRiA8IFggPCBQLiAgKEFzIGJlZm9yZSwgRiBpcyB0aGUgaW5kZW50CisgICAgIyAgICAgICAgIG9mIHRoZSBmdW5jdGlvbiBkZWNsYXJhdGlvbi4pCisgICAgIworICAgICMgQWxzbywgY3VycmVudGx5IEFyZ3VtZW50IENsaW5pYyBwbGFjZXMgdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnMgb24gZ3JvdXBzOgorICAgICMgICAqIEVhY2ggZ3JvdXAgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBwYXJhbWV0ZXIuCisgICAgIyAgICogRWFjaCBncm91cCBtYXkgY29udGFpbiBhdCBtb3N0IG9uZSBncm91cCwgd2hpY2ggbXVzdCBiZSB0aGUgZnVydGhlc3QKKyAgICAjICAgICB0aGluZyBpbiB0aGUgZ3JvdXAgZnJvbSB0aGUgcmVxdWlyZWQgcGFyYW1ldGVycy4gIChUaGUgbmVzdGVkIGdyb3VwCisgICAgIyAgICAgbXVzdCBiZSB0aGUgZmlyc3QgaW4gdGhlIGdyb3VwIHdoZW4gaXQncyBiZWZvcmUgdGhlIHJlcXVpcmVkCisgICAgIyAgICAgcGFyYW1ldGVycywgYW5kIHRoZSBsYXN0IHRoaW5nIGluIHRoZSBncm91cCB3aGVuIGFmdGVyIHRoZSByZXF1aXJlZAorICAgICMgICAgIHBhcmFtZXRlcnMuKQorICAgICMgICAqIFRoZXJlIG1heSBiZSBhdCBtb3N0IG9uZSAodG9wLWxldmVsKSBncm91cCB0byB0aGUgbGVmdCBvciByaWdodCBvZgorICAgICMgICAgIHRoZSByZXF1aXJlZCBwYXJhbWV0ZXJzLgorICAgICMgICAqIFlvdSBtdXN0IHNwZWNpZnkgYSBzbGFzaCwgYW5kIGl0IG11c3QgYmUgYWZ0ZXIgYWxsIHBhcmFtZXRlcnMuCisgICAgIyAgICAgKEluIG90aGVyIHdvcmRzOiBlaXRoZXIgYWxsIHBhcmFtZXRlcnMgYXJlIHBvc2l0aW9uYWwtb25seSwKKyAgICAjICAgICAgb3Igbm9uZSBhcmUuKQorICAgICMKKyAgICAjICBTYWlkIGFub3RoZXIgd2F5OgorICAgICMgICAqIEVhY2ggZ3JvdXAgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBwYXJhbWV0ZXIuCisgICAgIyAgICogQWxsIGxlZnQgc3F1YXJlIGJyYWNrZXRzIGJlZm9yZSB0aGUgcmVxdWlyZWQgcGFyYW1ldGVycyBtdXN0IGJlCisgICAgIyAgICAgY29uc2VjdXRpdmUuICAoWW91IGNhbid0IGhhdmUgYSBsZWZ0IHNxdWFyZSBicmFja2V0IGZvbGxvd2VkCisgICAgIyAgICAgYnkgYSBwYXJhbWV0ZXIsIHRoZW4gYW5vdGhlciBsZWZ0IHNxdWFyZSBicmFja2V0LiAgWW91IGNhbid0CisgICAgIyAgICAgaGF2ZSBhIGxlZnQgc3F1YXJlIGJyYWNrZXQsIGEgcGFyYW1ldGVyLCBhIHJpZ2h0IHNxdWFyZSBicmFja2V0LAorICAgICMgICAgIGFuZCB0aGVuIGEgbGVmdCBzcXVhcmUgYnJhY2tldC4pCisgICAgIyAgICogQWxsIHJpZ2h0IHNxdWFyZSBicmFja2V0cyBhZnRlciB0aGUgcmVxdWlyZWQgcGFyYW1ldGVycyBtdXN0IGJlCisgICAgIyAgICAgY29uc2VjdXRpdmUuCisgICAgIworICAgICMgVGhlc2UgcnVsZXMgYXJlIGVuZm9yY2VkIHdpdGggYSBzaW5nbGUgc3RhdGUgdmFyaWFibGU6CisgICAgIyAicGFyYW1ldGVyX3N0YXRlIi4gIChQcmV2aW91c2x5IHRoZSBjb2RlIHdhcyBhIG1pYXNtYSBvZiBpZnMgYW5kCisgICAgIyBzZXBhcmF0ZSBib29sZWFuIHN0YXRlIHZhcmlhYmxlcy4pICBUaGUgc3RhdGVzIGFyZToKKyAgICAjCisgICAgIyAgWyBbIGEsIGIsIF0gYywgXSBkLCBlLCBmPTMsIFsgZywgaCwgWyBpIF0gXSAvICAgPC0gbGluZQorICAgICMgMDEgICAyICAgICAgICAgIDMgICAgICAgNCAgICA1ICAgICAgICAgICA2ICAgNyAgIDwtIHN0YXRlIHRyYW5zaXRpb25zCisgICAgIworICAgICMgMDogcHNfc3RhcnQuICBiZWZvcmUgd2UndmUgc2VlbiBhbnl0aGluZy4gIGxlZ2FsIHRyYW5zaXRpb25zIGFyZSB0byAxIG9yIDMuCisgICAgIyAxOiBwc19sZWZ0X3NxdWFyZV9iZWZvcmUuICBsZWZ0IHNxdWFyZSBicmFja2V0cyBiZWZvcmUgcmVxdWlyZWQgcGFyYW1ldGVycy4KKyAgICAjIDI6IHBzX2dyb3VwX2JlZm9yZS4gIGluIGEgZ3JvdXAsIGJlZm9yZSByZXF1aXJlZCBwYXJhbWV0ZXJzLgorICAgICMgMzogcHNfcmVxdWlyZWQuICByZXF1aXJlZCBwYXJhbWV0ZXJzLCBwb3NpdGlvbmFsLW9yLWtleXdvcmQgb3IgcG9zaXRpb25hbC1vbmx5CisgICAgIyAgICAgKHdlIGRvbid0IGtub3cgeWV0KS4gIChyZW51bWJlciBsZWZ0IGdyb3VwcyEpCisgICAgIyA0OiBwc19vcHRpb25hbC4gIHBvc2l0aW9uYWwtb3Ita2V5d29yZCBvciBwb3NpdGlvbmFsLW9ubHkgcGFyYW1ldGVycyB0aGF0CisgICAgIyAgICBub3cgbXVzdCBoYXZlIGRlZmF1bHQgdmFsdWVzLgorICAgICMgNTogcHNfZ3JvdXBfYWZ0ZXIuICBpbiBhIGdyb3VwLCBhZnRlciByZXF1aXJlZCBwYXJhbWV0ZXJzLgorICAgICMgNjogcHNfcmlnaHRfc3F1YXJlX2FmdGVyLiAgcmlnaHQgc3F1YXJlIGJyYWNrZXRzIGFmdGVyIHJlcXVpcmVkIHBhcmFtZXRlcnMuCisgICAgIyA3OiBwc19zZWVuX3NsYXNoLiAgc2VlbiBzbGFzaC4KKyAgICBwc19zdGFydCwgcHNfbGVmdF9zcXVhcmVfYmVmb3JlLCBwc19ncm91cF9iZWZvcmUsIHBzX3JlcXVpcmVkLCBcCisgICAgcHNfb3B0aW9uYWwsIHBzX2dyb3VwX2FmdGVyLCBwc19yaWdodF9zcXVhcmVfYWZ0ZXIsIHBzX3NlZW5fc2xhc2ggPSByYW5nZSg4KQorCisgICAgZGVmIHN0YXRlX3BhcmFtZXRlcnNfc3RhcnQoc2VsZiwgbGluZSk6CisgICAgICAgIGlmIHNlbGYuaWdub3JlX2xpbmUobGluZSk6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAjIGlmIHRoaXMgbGluZSBpcyBub3QgaW5kZW50ZWQsIHdlIGhhdmUgbm8gcGFyYW1ldGVycworICAgICAgICBpZiBub3Qgc2VsZi5pbmRlbnQuaW5mZXIobGluZSk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5uZXh0KHNlbGYuc3RhdGVfZnVuY3Rpb25fZG9jc3RyaW5nLCBsaW5lKQorCisgICAgICAgIHNlbGYucGFyYW1ldGVyX2NvbnRpbnVhdGlvbiA9ICcnCisgICAgICAgIHJldHVybiBzZWxmLm5leHQoc2VsZi5zdGF0ZV9wYXJhbWV0ZXIsIGxpbmUpCisKKworICAgIGRlZiB0b19yZXF1aXJlZChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFRyYW5zaXRpb24gdG8gdGhlICJyZXF1aXJlZCIgcGFyYW1ldGVyIHN0YXRlLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5wYXJhbWV0ZXJfc3RhdGUgIT0gc2VsZi5wc19yZXF1aXJlZDoKKyAgICAgICAgICAgIHNlbGYucGFyYW1ldGVyX3N0YXRlID0gc2VsZi5wc19yZXF1aXJlZAorICAgICAgICAgICAgZm9yIHAgaW4gc2VsZi5mdW5jdGlvbi5wYXJhbWV0ZXJzLnZhbHVlcygpOgorICAgICAgICAgICAgICAgIHAuZ3JvdXAgPSAtcC5ncm91cAorCisgICAgZGVmIHN0YXRlX3BhcmFtZXRlcihzZWxmLCBsaW5lKToKKyAgICAgICAgaWYgc2VsZi5wYXJhbWV0ZXJfY29udGludWF0aW9uOgorICAgICAgICAgICAgbGluZSA9IHNlbGYucGFyYW1ldGVyX2NvbnRpbnVhdGlvbiArICcgJyArIGxpbmUubHN0cmlwKCkKKyAgICAgICAgICAgIHNlbGYucGFyYW1ldGVyX2NvbnRpbnVhdGlvbiA9ICcnCisKKyAgICAgICAgaWYgc2VsZi5pZ25vcmVfbGluZShsaW5lKToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGFzc2VydCBzZWxmLmluZGVudC5kZXB0aCA9PSAyCisgICAgICAgIGluZGVudCA9IHNlbGYuaW5kZW50LmluZmVyKGxpbmUpCisgICAgICAgIGlmIGluZGVudCA9PSAtMToKKyAgICAgICAgICAgICMgd2Ugb3V0ZGVudGVkLCBtdXN0IGJlIHRvIGRlZmluaXRpb24gY29sdW1uCisgICAgICAgICAgICByZXR1cm4gc2VsZi5uZXh0KHNlbGYuc3RhdGVfZnVuY3Rpb25fZG9jc3RyaW5nLCBsaW5lKQorCisgICAgICAgIGlmIGluZGVudCA9PSAxOgorICAgICAgICAgICAgIyB3ZSBpbmRlbnRlZCwgbXVzdCBiZSB0byBuZXcgcGFyYW1ldGVyIGRvY3N0cmluZyBjb2x1bW4KKyAgICAgICAgICAgIHJldHVybiBzZWxmLm5leHQoc2VsZi5zdGF0ZV9wYXJhbWV0ZXJfZG9jc3RyaW5nX3N0YXJ0LCBsaW5lKQorCisgICAgICAgIGxpbmUgPSBsaW5lLnJzdHJpcCgpCisgICAgICAgIGlmIGxpbmUuZW5kc3dpdGgoJ1xcJyk6CisgICAgICAgICAgICBzZWxmLnBhcmFtZXRlcl9jb250aW51YXRpb24gPSBsaW5lWzotMV0KKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGxpbmUgPSBsaW5lLmxzdHJpcCgpCisKKyAgICAgICAgaWYgbGluZSBpbiAoJyonLCAnLycsICdbJywgJ10nKToKKyAgICAgICAgICAgIHNlbGYucGFyc2Vfc3BlY2lhbF9zeW1ib2wobGluZSkKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIHNlbGYucGFyYW1ldGVyX3N0YXRlIGluIChzZWxmLnBzX3N0YXJ0LCBzZWxmLnBzX3JlcXVpcmVkKToKKyAgICAgICAgICAgIHNlbGYudG9fcmVxdWlyZWQoKQorICAgICAgICBlbGlmIHNlbGYucGFyYW1ldGVyX3N0YXRlID09IHNlbGYucHNfbGVmdF9zcXVhcmVfYmVmb3JlOgorICAgICAgICAgICAgc2VsZi5wYXJhbWV0ZXJfc3RhdGUgPSBzZWxmLnBzX2dyb3VwX2JlZm9yZQorICAgICAgICBlbGlmIHNlbGYucGFyYW1ldGVyX3N0YXRlID09IHNlbGYucHNfZ3JvdXBfYmVmb3JlOgorICAgICAgICAgICAgaWYgbm90IHNlbGYuZ3JvdXA6CisgICAgICAgICAgICAgICAgc2VsZi50b19yZXF1aXJlZCgpCisgICAgICAgIGVsaWYgc2VsZi5wYXJhbWV0ZXJfc3RhdGUgaW4gKHNlbGYucHNfZ3JvdXBfYWZ0ZXIsIHNlbGYucHNfb3B0aW9uYWwpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgZmFpbCgiRnVuY3Rpb24gIiArIHNlbGYuZnVuY3Rpb24ubmFtZSArICIgaGFzIGFuIHVuc3VwcG9ydGVkIGdyb3VwIGNvbmZpZ3VyYXRpb24uIChVbmV4cGVjdGVkIHN0YXRlICIgKyBzdHIoc2VsZi5wYXJhbWV0ZXJfc3RhdGUpICsgIi5hKSIpCisKKyAgICAgICAgIyBoYW5kbGUgImFzIiBmb3IgIHBhcmFtZXRlcnMgdG9vCisgICAgICAgIGNfbmFtZSA9IE5vbmUKKyAgICAgICAgbmFtZSwgaGF2ZV9hc190b2tlbiwgdHJhaWxpbmcgPSBsaW5lLnBhcnRpdGlvbignIGFzICcpCisgICAgICAgIGlmIGhhdmVfYXNfdG9rZW46CisgICAgICAgICAgICBuYW1lID0gbmFtZS5zdHJpcCgpCisgICAgICAgICAgICBpZiAnICcgbm90IGluIG5hbWU6CisgICAgICAgICAgICAgICAgZmllbGRzID0gdHJhaWxpbmcuc3RyaXAoKS5zcGxpdCgnICcpCisgICAgICAgICAgICAgICAgaWYgbm90IGZpZWxkczoKKyAgICAgICAgICAgICAgICAgICAgZmFpbCgiSW52YWxpZCAnYXMnIGNsYXVzZSEiKQorICAgICAgICAgICAgICAgIGNfbmFtZSA9IGZpZWxkc1swXQorICAgICAgICAgICAgICAgIGlmIGNfbmFtZS5lbmRzd2l0aCgnOicpOgorICAgICAgICAgICAgICAgICAgICBuYW1lICs9ICc6JworICAgICAgICAgICAgICAgICAgICBjX25hbWUgPSBjX25hbWVbOi0xXQorICAgICAgICAgICAgICAgIGZpZWxkc1swXSA9IG5hbWUKKyAgICAgICAgICAgICAgICBsaW5lID0gJyAnLmpvaW4oZmllbGRzKQorCisgICAgICAgIGJhc2UsIGVxdWFscywgZGVmYXVsdCA9IGxpbmUucnBhcnRpdGlvbignPScpCisgICAgICAgIGlmIG5vdCBlcXVhbHM6CisgICAgICAgICAgICBiYXNlID0gZGVmYXVsdAorICAgICAgICAgICAgZGVmYXVsdCA9IE5vbmUKKworICAgICAgICBtb2R1bGUgPSBOb25lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGFzdF9pbnB1dCA9ICJkZWYgeCh7fSk6IHBhc3MiLmZvcm1hdChiYXNlKQorICAgICAgICAgICAgbW9kdWxlID0gYXN0LnBhcnNlKGFzdF9pbnB1dCkKKyAgICAgICAgZXhjZXB0IFN5bnRheEVycm9yOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICMgdGhlIGxhc3QgPSB3YXMgcHJvYmFibHkgaW5zaWRlIGEgZnVuY3Rpb24gY2FsbCwgbGlrZQorICAgICAgICAgICAgICAgICMgICBpOiBpbnQobnVsbGFibGU9VHJ1ZSkKKyAgICAgICAgICAgICAgICAjIHNvIGFzc3VtZSB0aGVyZSB3YXMgbm8gYWN0dWFsIGRlZmF1bHQgdmFsdWUuCisgICAgICAgICAgICAgICAgZGVmYXVsdCA9IE5vbmUKKyAgICAgICAgICAgICAgICBhc3RfaW5wdXQgPSAiZGVmIHgoe30pOiBwYXNzIi5mb3JtYXQobGluZSkKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSBhc3QucGFyc2UoYXN0X2lucHV0KQorICAgICAgICAgICAgZXhjZXB0IFN5bnRheEVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgaWYgbm90IG1vZHVsZToKKyAgICAgICAgICAgIGZhaWwoIkZ1bmN0aW9uICIgKyBzZWxmLmZ1bmN0aW9uLm5hbWUgKyAiIGhhcyBhbiBpbnZhbGlkIHBhcmFtZXRlciBkZWNsYXJhdGlvbjpcblx0IiArIGxpbmUpCisKKyAgICAgICAgZnVuY3Rpb25fYXJncyA9IG1vZHVsZS5ib2R5WzBdLmFyZ3MKKyAgICAgICAgcGFyYW1ldGVyID0gZnVuY3Rpb25fYXJncy5hcmdzWzBdCisKKyAgICAgICAgcGFyYW1ldGVyX25hbWUgPSBwYXJhbWV0ZXIuYXJnCisgICAgICAgIG5hbWUsIGxlZ2FjeSwga3dhcmdzID0gc2VsZi5wYXJzZV9jb252ZXJ0ZXIocGFyYW1ldGVyLmFubm90YXRpb24pCisKKyAgICAgICAgaWYgbm90IGRlZmF1bHQ6CisgICAgICAgICAgICBpZiBzZWxmLnBhcmFtZXRlcl9zdGF0ZSA9PSBzZWxmLnBzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgIGZhaWwoIkNhbid0IGhhdmUgYSBwYXJhbWV0ZXIgd2l0aG91dCBhIGRlZmF1bHQgKCIgKyByZXByKHBhcmFtZXRlcl9uYW1lKSArICIpXG5hZnRlciBhIHBhcmFtZXRlciB3aXRoIGEgZGVmYXVsdCEiKQorICAgICAgICAgICAgdmFsdWUgPSB1bnNwZWNpZmllZAorICAgICAgICAgICAgaWYgJ3B5X2RlZmF1bHQnIGluIGt3YXJnczoKKyAgICAgICAgICAgICAgICBmYWlsKCJZb3UgY2FuJ3Qgc3BlY2lmeSBweV9kZWZhdWx0IHdpdGhvdXQgc3BlY2lmeWluZyBhIGRlZmF1bHQgdmFsdWUhIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIHNlbGYucGFyYW1ldGVyX3N0YXRlID09IHNlbGYucHNfcmVxdWlyZWQ6CisgICAgICAgICAgICAgICAgc2VsZi5wYXJhbWV0ZXJfc3RhdGUgPSBzZWxmLnBzX29wdGlvbmFsCisgICAgICAgICAgICBkZWZhdWx0ID0gZGVmYXVsdC5zdHJpcCgpCisgICAgICAgICAgICBiYWQgPSBGYWxzZQorICAgICAgICAgICAgYXN0X2lucHV0ID0gInggPSB7fSIuZm9ybWF0KGRlZmF1bHQpCisgICAgICAgICAgICBiYWQgPSBGYWxzZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG1vZHVsZSA9IGFzdC5wYXJzZShhc3RfaW5wdXQpCisKKyAgICAgICAgICAgICAgICBpZiAnY19kZWZhdWx0JyBub3QgaW4ga3dhcmdzOgorICAgICAgICAgICAgICAgICAgICAjIHdlIGNhbiBvbmx5IHJlcHJlc2VudCB2ZXJ5IHNpbXBsZSBkYXRhIHZhbHVlcyBpbiBDLgorICAgICAgICAgICAgICAgICAgICAjIGRldGVjdCB3aGV0aGVyIGRlZmF1bHQgaXMgb2theSwgdmlhIGEgYmxhY2tsaXN0CisgICAgICAgICAgICAgICAgICAgICMgb2YgZGlzYWxsb3dlZCBhc3Qgbm9kZXMuCisgICAgICAgICAgICAgICAgICAgIGNsYXNzIERldGVjdEJhZE5vZGVzKGFzdC5Ob2RlVmlzaXRvcik6CisgICAgICAgICAgICAgICAgICAgICAgICBiYWQgPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGJhZF9ub2RlKHNlbGYsIG5vZGUpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYmFkID0gVHJ1ZQorCisgICAgICAgICAgICAgICAgICAgICAgICAjIGlubGluZSBmdW5jdGlvbiBjYWxsCisgICAgICAgICAgICAgICAgICAgICAgICB2aXNpdF9DYWxsID0gYmFkX25vZGUKKyAgICAgICAgICAgICAgICAgICAgICAgICMgaW5saW5lIGlmIHN0YXRlbWVudCAoInggPSAzIGlmIHkgZWxzZSB6IikKKyAgICAgICAgICAgICAgICAgICAgICAgIHZpc2l0X0lmRXhwID0gYmFkX25vZGUKKworICAgICAgICAgICAgICAgICAgICAgICAgIyBjb21wcmVoZW5zaW9ucyBhbmQgZ2VuZXJhdG9yIGV4cHJlc3Npb25zCisgICAgICAgICAgICAgICAgICAgICAgICB2aXNpdF9MaXN0Q29tcCA9IHZpc2l0X1NldENvbXAgPSBiYWRfbm9kZQorICAgICAgICAgICAgICAgICAgICAgICAgdmlzaXRfRGljdENvbXAgPSB2aXNpdF9HZW5lcmF0b3JFeHAgPSBiYWRfbm9kZQorCisgICAgICAgICAgICAgICAgICAgICAgICAjIGxpdGVyYWxzIGZvciBhZHZhbmNlZCB0eXBlcworICAgICAgICAgICAgICAgICAgICAgICAgdmlzaXRfRGljdCA9IHZpc2l0X1NldCA9IGJhZF9ub2RlCisgICAgICAgICAgICAgICAgICAgICAgICB2aXNpdF9MaXN0ID0gdmlzaXRfVHVwbGUgPSBiYWRfbm9kZQorCisgICAgICAgICAgICAgICAgICAgICAgICAjICJzdGFycmVkIjogImEgPSBbMSwgMiwgM107ICphIgorICAgICAgICAgICAgICAgICAgICAgICAgdmlzaXRfU3RhcnJlZCA9IGJhZF9ub2RlCisKKyAgICAgICAgICAgICAgICAgICAgICAgICMgYWxsb3cgZWxsaXBzaXMsIGZvciBub3cKKyAgICAgICAgICAgICAgICAgICAgICAgICMgdmlzaXRfRWxsaXBzaXMgPSBiYWRfbm9kZQorCisgICAgICAgICAgICAgICAgICAgIGJsYWNrbGlzdCA9IERldGVjdEJhZE5vZGVzKCkKKyAgICAgICAgICAgICAgICAgICAgYmxhY2tsaXN0LnZpc2l0KG1vZHVsZSkKKyAgICAgICAgICAgICAgICAgICAgYmFkID0gYmxhY2tsaXN0LmJhZAorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICMgaWYgdGhleSBzcGVjaWZ5IGEgY19kZWZhdWx0LCB3ZSBjYW4gYmUgbW9yZSBsZW5pZW50IGFib3V0IHRoZSBkZWZhdWx0IHZhbHVlLgorICAgICAgICAgICAgICAgICAgICAjIGJ1dCBhdCBsZWFzdCBtYWtlIGFuIGF0dGVtcHQgYXQgZW5zdXJpbmcgaXQncyBhIHZhbGlkIGV4cHJlc3Npb24uCisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gZXZhbChkZWZhdWx0KQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgdmFsdWUgPT0gdW5zcGVjaWZpZWQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFpbCgiJ3Vuc3BlY2lmaWVkJyBpcyBub3QgYSBsZWdhbCBkZWZhdWx0IHZhbHVlISIpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBOYW1lRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICBwYXNzICMgcHJvYmFibHkgYSBuYW1lZCBjb25zdGFudAorICAgICAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICAgICAgICAgICAgICBmYWlsKCJNYWxmb3JtZWQgZXhwcmVzc2lvbiBnaXZlbiBhcyBkZWZhdWx0IHZhbHVlXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ7IXJ9IGNhdXNlZCB7IXJ9Ii5mb3JtYXQoZGVmYXVsdCwgZSkpCisgICAgICAgICAgICAgICAgaWYgYmFkOgorICAgICAgICAgICAgICAgICAgICBmYWlsKCJVbnN1cHBvcnRlZCBleHByZXNzaW9uIGFzIGRlZmF1bHQgdmFsdWU6ICIgKyByZXByKGRlZmF1bHQpKQorCisgICAgICAgICAgICAgICAgZXhwciA9IG1vZHVsZS5ib2R5WzBdLnZhbHVlCisgICAgICAgICAgICAgICAgIyBtaWxkIGhhY2s6IGV4cGxpY2l0bHkgc3VwcG9ydCBOVUxMIGFzIGEgZGVmYXVsdCB2YWx1ZQorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXhwciwgYXN0Lk5hbWUpIGFuZCBleHByLmlkID09ICdOVUxMJzoKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBOVUxMCisgICAgICAgICAgICAgICAgICAgIHB5X2RlZmF1bHQgPSAnTm9uZScKKyAgICAgICAgICAgICAgICAgICAgY19kZWZhdWx0ID0gIk5VTEwiCisgICAgICAgICAgICAgICAgZWxpZiAoaXNpbnN0YW5jZShleHByLCBhc3QuQmluT3ApIG9yCisgICAgICAgICAgICAgICAgICAgIChpc2luc3RhbmNlKGV4cHIsIGFzdC5VbmFyeU9wKSBhbmQgbm90IGlzaW5zdGFuY2UoZXhwci5vcGVyYW5kLCBhc3QuTnVtKSkpOgorICAgICAgICAgICAgICAgICAgICBjX2RlZmF1bHQgPSBrd2FyZ3MuZ2V0KCJjX2RlZmF1bHQiKQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgKGlzaW5zdGFuY2UoY19kZWZhdWx0LCBzdHIpIGFuZCBjX2RlZmF1bHQpOgorICAgICAgICAgICAgICAgICAgICAgICAgZmFpbCgiV2hlbiB5b3Ugc3BlY2lmeSBhbiBleHByZXNzaW9uICgiICsgcmVwcihkZWZhdWx0KSArICIpIGFzIHlvdXIgZGVmYXVsdCB2YWx1ZSxcbnlvdSBNVVNUIHNwZWNpZnkgYSB2YWxpZCBjX2RlZmF1bHQuIikKKyAgICAgICAgICAgICAgICAgICAgcHlfZGVmYXVsdCA9IGRlZmF1bHQKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB1bmtub3duCisgICAgICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKGV4cHIsIGFzdC5BdHRyaWJ1dGUpOgorICAgICAgICAgICAgICAgICAgICBhID0gW10KKyAgICAgICAgICAgICAgICAgICAgbiA9IGV4cHIKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgaXNpbnN0YW5jZShuLCBhc3QuQXR0cmlidXRlKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGEuYXBwZW5kKG4uYXR0cikKKyAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBuLnZhbHVlCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG4sIGFzdC5OYW1lKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGZhaWwoIlVuc3VwcG9ydGVkIGRlZmF1bHQgdmFsdWUgIiArIHJlcHIoZGVmYXVsdCkgKyAiIChsb29rZWQgbGlrZSBhIFB5dGhvbiBjb25zdGFudCkiKQorICAgICAgICAgICAgICAgICAgICBhLmFwcGVuZChuLmlkKQorICAgICAgICAgICAgICAgICAgICBweV9kZWZhdWx0ID0gIi4iLmpvaW4ocmV2ZXJzZWQoYSkpCisKKyAgICAgICAgICAgICAgICAgICAgY19kZWZhdWx0ID0ga3dhcmdzLmdldCgiY19kZWZhdWx0IikKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IChpc2luc3RhbmNlKGNfZGVmYXVsdCwgc3RyKSBhbmQgY19kZWZhdWx0KToKKyAgICAgICAgICAgICAgICAgICAgICAgIGZhaWwoIldoZW4geW91IHNwZWNpZnkgYSBuYW1lZCBjb25zdGFudCAoIiArIHJlcHIocHlfZGVmYXVsdCkgKyAiKSBhcyB5b3VyIGRlZmF1bHQgdmFsdWUsXG55b3UgTVVTVCBzcGVjaWZ5IGEgdmFsaWQgY19kZWZhdWx0LiIpCisKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBldmFsKHB5X2RlZmF1bHQpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBOYW1lRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHVua25vd24KKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGFzdC5saXRlcmFsX2V2YWwoZXhwcikKKyAgICAgICAgICAgICAgICAgICAgcHlfZGVmYXVsdCA9IHJlcHIodmFsdWUpCisgICAgICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIChib29sLCBOb25lLl9fY2xhc3NfXykpOgorICAgICAgICAgICAgICAgICAgICAgICAgY19kZWZhdWx0ID0gIlB5XyIgKyBweV9kZWZhdWx0CisgICAgICAgICAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgc3RyKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNfZGVmYXVsdCA9IGNfcmVwcih2YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNfZGVmYXVsdCA9IHB5X2RlZmF1bHQKKworICAgICAgICAgICAgZXhjZXB0IFN5bnRheEVycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgZmFpbCgiU3ludGF4IGVycm9yOiAiICsgcmVwcihlLnRleHQpKQorICAgICAgICAgICAgZXhjZXB0IChWYWx1ZUVycm9yLCBBdHRyaWJ1dGVFcnJvcik6CisgICAgICAgICAgICAgICAgdmFsdWUgPSB1bmtub3duCisgICAgICAgICAgICAgICAgY19kZWZhdWx0ID0ga3dhcmdzLmdldCgiY19kZWZhdWx0IikKKyAgICAgICAgICAgICAgICBweV9kZWZhdWx0ID0gZGVmYXVsdAorICAgICAgICAgICAgICAgIGlmIG5vdCAoaXNpbnN0YW5jZShjX2RlZmF1bHQsIHN0cikgYW5kIGNfZGVmYXVsdCk6CisgICAgICAgICAgICAgICAgICAgIGZhaWwoIldoZW4geW91IHNwZWNpZnkgYSBuYW1lZCBjb25zdGFudCAoIiArIHJlcHIocHlfZGVmYXVsdCkgKyAiKSBhcyB5b3VyIGRlZmF1bHQgdmFsdWUsXG55b3UgTVVTVCBzcGVjaWZ5IGEgdmFsaWQgY19kZWZhdWx0LiIpCisKKyAgICAgICAgICAgIGt3YXJncy5zZXRkZWZhdWx0KCdjX2RlZmF1bHQnLCBjX2RlZmF1bHQpCisgICAgICAgICAgICBrd2FyZ3Muc2V0ZGVmYXVsdCgncHlfZGVmYXVsdCcsIHB5X2RlZmF1bHQpCisKKyAgICAgICAgZGljdCA9IGxlZ2FjeV9jb252ZXJ0ZXJzIGlmIGxlZ2FjeSBlbHNlIGNvbnZlcnRlcnMKKyAgICAgICAgbGVnYWN5X3N0ciA9ICJsZWdhY3kgIiBpZiBsZWdhY3kgZWxzZSAiIgorICAgICAgICBpZiBuYW1lIG5vdCBpbiBkaWN0OgorICAgICAgICAgICAgZmFpbCgne30gaXMgbm90IGEgdmFsaWQge31jb252ZXJ0ZXInLmZvcm1hdChuYW1lLCBsZWdhY3lfc3RyKSkKKyAgICAgICAgIyBpZiB5b3UgdXNlIGEgY19uYW1lIGZvciB0aGUgcGFyYW1ldGVyLCB3ZSBqdXN0IGdpdmUgdGhhdCBuYW1lIHRvIHRoZSBjb252ZXJ0ZXIKKyAgICAgICAgIyBidXQgdGhlIHBhcmFtZXRlciBvYmplY3QgZ2V0cyB0aGUgcHl0aG9uIG5hbWUKKyAgICAgICAgY29udmVydGVyID0gZGljdFtuYW1lXShjX25hbWUgb3IgcGFyYW1ldGVyX25hbWUsIHBhcmFtZXRlcl9uYW1lLCBzZWxmLmZ1bmN0aW9uLCB2YWx1ZSwgKiprd2FyZ3MpCisKKyAgICAgICAga2luZCA9IGluc3BlY3QuUGFyYW1ldGVyLktFWVdPUkRfT05MWSBpZiBzZWxmLmtleXdvcmRfb25seSBlbHNlIGluc3BlY3QuUGFyYW1ldGVyLlBPU0lUSU9OQUxfT1JfS0VZV09SRAorCisgICAgICAgIGlmIGlzaW5zdGFuY2UoY29udmVydGVyLCBzZWxmX2NvbnZlcnRlcik6CisgICAgICAgICAgICBpZiBsZW4oc2VsZi5mdW5jdGlvbi5wYXJhbWV0ZXJzKSA9PSAxOgorICAgICAgICAgICAgICAgIGlmIChzZWxmLnBhcmFtZXRlcl9zdGF0ZSAhPSBzZWxmLnBzX3JlcXVpcmVkKToKKyAgICAgICAgICAgICAgICAgICAgZmFpbCgiQSAnc2VsZicgcGFyYW1ldGVyIGNhbm5vdCBiZSBtYXJrZWQgb3B0aW9uYWwuIikKKyAgICAgICAgICAgICAgICBpZiB2YWx1ZSBpcyBub3QgdW5zcGVjaWZpZWQ6CisgICAgICAgICAgICAgICAgICAgIGZhaWwoIkEgJ3NlbGYnIHBhcmFtZXRlciBjYW5ub3QgaGF2ZSBhIGRlZmF1bHQgdmFsdWUuIikKKyAgICAgICAgICAgICAgICBpZiBzZWxmLmdyb3VwOgorICAgICAgICAgICAgICAgICAgICBmYWlsKCJBICdzZWxmJyBwYXJhbWV0ZXIgY2Fubm90IGJlIGluIGFuIG9wdGlvbmFsIGdyb3VwLiIpCisgICAgICAgICAgICAgICAga2luZCA9IGluc3BlY3QuUGFyYW1ldGVyLlBPU0lUSU9OQUxfT05MWQorICAgICAgICAgICAgICAgIHNlbGYucGFyYW1ldGVyX3N0YXRlID0gc2VsZi5wc19zdGFydAorICAgICAgICAgICAgICAgIHNlbGYuZnVuY3Rpb24ucGFyYW1ldGVycy5jbGVhcigpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGZhaWwoIkEgJ3NlbGYnIHBhcmFtZXRlciwgaWYgc3BlY2lmaWVkLCBtdXN0IGJlIHRoZSB2ZXJ5IGZpcnN0IHRoaW5nIGluIHRoZSBwYXJhbWV0ZXIgYmxvY2suIikKKworICAgICAgICBwID0gUGFyYW1ldGVyKHBhcmFtZXRlcl9uYW1lLCBraW5kLCBmdW5jdGlvbj1zZWxmLmZ1bmN0aW9uLCBjb252ZXJ0ZXI9Y29udmVydGVyLCBkZWZhdWx0PXZhbHVlLCBncm91cD1zZWxmLmdyb3VwKQorCisgICAgICAgIGlmIHBhcmFtZXRlcl9uYW1lIGluIHNlbGYuZnVuY3Rpb24ucGFyYW1ldGVyczoKKyAgICAgICAgICAgIGZhaWwoIllvdSBjYW4ndCBoYXZlIHR3byBwYXJhbWV0ZXJzIG5hbWVkICIgKyByZXByKHBhcmFtZXRlcl9uYW1lKSArICIhIikKKyAgICAgICAgc2VsZi5mdW5jdGlvbi5wYXJhbWV0ZXJzW3BhcmFtZXRlcl9uYW1lXSA9IHAKKworICAgIGRlZiBwYXJzZV9jb252ZXJ0ZXIoc2VsZiwgYW5ub3RhdGlvbik6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoYW5ub3RhdGlvbiwgYXN0LlN0cik6CisgICAgICAgICAgICByZXR1cm4gYW5ub3RhdGlvbi5zLCBUcnVlLCB7fQorCisgICAgICAgIGlmIGlzaW5zdGFuY2UoYW5ub3RhdGlvbiwgYXN0Lk5hbWUpOgorICAgICAgICAgICAgcmV0dXJuIGFubm90YXRpb24uaWQsIEZhbHNlLCB7fQorCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGFubm90YXRpb24sIGFzdC5DYWxsKToKKyAgICAgICAgICAgIGZhaWwoIkFubm90YXRpb25zIG11c3QgYmUgZWl0aGVyIGEgbmFtZSwgYSBmdW5jdGlvbiBjYWxsLCBvciBhIHN0cmluZy4iKQorCisgICAgICAgIG5hbWUgPSBhbm5vdGF0aW9uLmZ1bmMuaWQKKyAgICAgICAga3dhcmdzID0ge25vZGUuYXJnOiBhc3QubGl0ZXJhbF9ldmFsKG5vZGUudmFsdWUpIGZvciBub2RlIGluIGFubm90YXRpb24ua2V5d29yZHN9CisgICAgICAgIHJldHVybiBuYW1lLCBGYWxzZSwga3dhcmdzCisKKyAgICBkZWYgcGFyc2Vfc3BlY2lhbF9zeW1ib2woc2VsZiwgc3ltYm9sKToKKyAgICAgICAgaWYgc2VsZi5wYXJhbWV0ZXJfc3RhdGUgPT0gc2VsZi5wc19zZWVuX3NsYXNoOgorICAgICAgICAgICAgZmFpbCgiRnVuY3Rpb24gIiArIHNlbGYuZnVuY3Rpb24ubmFtZSArICIgc3BlY2lmaWVzICIgKyBzeW1ib2wgKyAiIGFmdGVyIC8sIHdoaWNoIGlzIHVuc3VwcG9ydGVkLiIpCisKKyAgICAgICAgaWYgc3ltYm9sID09ICcqJzoKKyAgICAgICAgICAgIGlmIHNlbGYua2V5d29yZF9vbmx5OgorICAgICAgICAgICAgICAgIGZhaWwoIkZ1bmN0aW9uICIgKyBzZWxmLmZ1bmN0aW9uLm5hbWUgKyAiIHVzZXMgJyonIG1vcmUgdGhhbiBvbmNlLiIpCisgICAgICAgICAgICBzZWxmLmtleXdvcmRfb25seSA9IFRydWUKKyAgICAgICAgZWxpZiBzeW1ib2wgPT0gJ1snOgorICAgICAgICAgICAgaWYgc2VsZi5wYXJhbWV0ZXJfc3RhdGUgaW4gKHNlbGYucHNfc3RhcnQsIHNlbGYucHNfbGVmdF9zcXVhcmVfYmVmb3JlKToKKyAgICAgICAgICAgICAgICBzZWxmLnBhcmFtZXRlcl9zdGF0ZSA9IHNlbGYucHNfbGVmdF9zcXVhcmVfYmVmb3JlCisgICAgICAgICAgICBlbGlmIHNlbGYucGFyYW1ldGVyX3N0YXRlIGluIChzZWxmLnBzX3JlcXVpcmVkLCBzZWxmLnBzX2dyb3VwX2FmdGVyKToKKyAgICAgICAgICAgICAgICBzZWxmLnBhcmFtZXRlcl9zdGF0ZSA9IHNlbGYucHNfZ3JvdXBfYWZ0ZXIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZmFpbCgiRnVuY3Rpb24gIiArIHNlbGYuZnVuY3Rpb24ubmFtZSArICIgaGFzIGFuIHVuc3VwcG9ydGVkIGdyb3VwIGNvbmZpZ3VyYXRpb24uIChVbmV4cGVjdGVkIHN0YXRlICIgKyBzdHIoc2VsZi5wYXJhbWV0ZXJfc3RhdGUpICsgIi5iKSIpCisgICAgICAgICAgICBzZWxmLmdyb3VwICs9IDEKKyAgICAgICAgICAgIHNlbGYuZnVuY3Rpb24uZG9jc3RyaW5nX29ubHkgPSBUcnVlCisgICAgICAgIGVsaWYgc3ltYm9sID09ICddJzoKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLmdyb3VwOgorICAgICAgICAgICAgICAgIGZhaWwoIkZ1bmN0aW9uICIgKyBzZWxmLmZ1bmN0aW9uLm5hbWUgKyAiIGhhcyBhIF0gd2l0aG91dCBhIG1hdGNoaW5nIFsuIikKKyAgICAgICAgICAgIGlmIG5vdCBhbnkocC5ncm91cCA9PSBzZWxmLmdyb3VwIGZvciBwIGluIHNlbGYuZnVuY3Rpb24ucGFyYW1ldGVycy52YWx1ZXMoKSk6CisgICAgICAgICAgICAgICAgZmFpbCgiRnVuY3Rpb24gIiArIHNlbGYuZnVuY3Rpb24ubmFtZSArICIgaGFzIGFuIGVtcHR5IGdyb3VwLlxuQWxsIGdyb3VwcyBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIHBhcmFtZXRlci4iKQorICAgICAgICAgICAgc2VsZi5ncm91cCAtPSAxCisgICAgICAgICAgICBpZiBzZWxmLnBhcmFtZXRlcl9zdGF0ZSBpbiAoc2VsZi5wc19sZWZ0X3NxdWFyZV9iZWZvcmUsIHNlbGYucHNfZ3JvdXBfYmVmb3JlKToKKyAgICAgICAgICAgICAgICBzZWxmLnBhcmFtZXRlcl9zdGF0ZSA9IHNlbGYucHNfZ3JvdXBfYmVmb3JlCisgICAgICAgICAgICBlbGlmIHNlbGYucGFyYW1ldGVyX3N0YXRlIGluIChzZWxmLnBzX2dyb3VwX2FmdGVyLCBzZWxmLnBzX3JpZ2h0X3NxdWFyZV9hZnRlcik6CisgICAgICAgICAgICAgICAgc2VsZi5wYXJhbWV0ZXJfc3RhdGUgPSBzZWxmLnBzX3JpZ2h0X3NxdWFyZV9hZnRlcgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBmYWlsKCJGdW5jdGlvbiAiICsgc2VsZi5mdW5jdGlvbi5uYW1lICsgIiBoYXMgYW4gdW5zdXBwb3J0ZWQgZ3JvdXAgY29uZmlndXJhdGlvbi4gKFVuZXhwZWN0ZWQgc3RhdGUgIiArIHN0cihzZWxmLnBhcmFtZXRlcl9zdGF0ZSkgKyAiLmMpIikKKyAgICAgICAgZWxpZiBzeW1ib2wgPT0gJy8nOgorICAgICAgICAgICAgIyBwc19yZXF1aXJlZCBhbmQgcHNfb3B0aW9uYWwgYXJlIGFsbG93ZWQgaGVyZSwgdGhhdCBhbGxvd3MgcG9zaXRpb25hbC1vbmx5IHdpdGhvdXQgb3B0aW9uIGdyb3VwcworICAgICAgICAgICAgIyB0byB3b3JrIChhbmQgaGF2ZSBkZWZhdWx0IHZhbHVlcyEpCisgICAgICAgICAgICBpZiAoc2VsZi5wYXJhbWV0ZXJfc3RhdGUgbm90IGluIChzZWxmLnBzX3JlcXVpcmVkLCBzZWxmLnBzX29wdGlvbmFsLCBzZWxmLnBzX3JpZ2h0X3NxdWFyZV9hZnRlciwgc2VsZi5wc19ncm91cF9iZWZvcmUpKSBvciBzZWxmLmdyb3VwOgorICAgICAgICAgICAgICAgIGZhaWwoIkZ1bmN0aW9uICIgKyBzZWxmLmZ1bmN0aW9uLm5hbWUgKyAiIGhhcyBhbiB1bnN1cHBvcnRlZCBncm91cCBjb25maWd1cmF0aW9uLiAoVW5leHBlY3RlZCBzdGF0ZSAiICsgc3RyKHNlbGYucGFyYW1ldGVyX3N0YXRlKSArICIuZCkiKQorICAgICAgICAgICAgaWYgc2VsZi5rZXl3b3JkX29ubHk6CisgICAgICAgICAgICAgICAgZmFpbCgiRnVuY3Rpb24gIiArIHNlbGYuZnVuY3Rpb24ubmFtZSArICIgbWl4ZXMga2V5d29yZC1vbmx5IGFuZCBwb3NpdGlvbmFsLW9ubHkgcGFyYW1ldGVycywgd2hpY2ggaXMgdW5zdXBwb3J0ZWQuIikKKyAgICAgICAgICAgIHNlbGYucGFyYW1ldGVyX3N0YXRlID0gc2VsZi5wc19zZWVuX3NsYXNoCisgICAgICAgICAgICAjIGZpeHVwIHByZWNlZGluZyBwYXJhbWV0ZXJzCisgICAgICAgICAgICBmb3IgcCBpbiBzZWxmLmZ1bmN0aW9uLnBhcmFtZXRlcnMudmFsdWVzKCk6CisgICAgICAgICAgICAgICAgaWYgKHAua2luZCAhPSBpbnNwZWN0LlBhcmFtZXRlci5QT1NJVElPTkFMX09SX0tFWVdPUkQgYW5kIG5vdCBpc2luc3RhbmNlKHAuY29udmVydGVyLCBzZWxmX2NvbnZlcnRlcikpOgorICAgICAgICAgICAgICAgICAgICBmYWlsKCJGdW5jdGlvbiAiICsgc2VsZi5mdW5jdGlvbi5uYW1lICsgIiBtaXhlcyBrZXl3b3JkLW9ubHkgYW5kIHBvc2l0aW9uYWwtb25seSBwYXJhbWV0ZXJzLCB3aGljaCBpcyB1bnN1cHBvcnRlZC4iKQorICAgICAgICAgICAgICAgIHAua2luZCA9IGluc3BlY3QuUGFyYW1ldGVyLlBPU0lUSU9OQUxfT05MWQorCisgICAgZGVmIHN0YXRlX3BhcmFtZXRlcl9kb2NzdHJpbmdfc3RhcnQoc2VsZiwgbGluZSk6CisgICAgICAgIHNlbGYucGFyYW1ldGVyX2RvY3N0cmluZ19pbmRlbnQgPSBsZW4oc2VsZi5pbmRlbnQubWFyZ2luKQorICAgICAgICBhc3NlcnQgc2VsZi5pbmRlbnQuZGVwdGggPT0gMworICAgICAgICByZXR1cm4gc2VsZi5uZXh0KHNlbGYuc3RhdGVfcGFyYW1ldGVyX2RvY3N0cmluZywgbGluZSkKKworICAgICMgZXZlcnkgbGluZSBvZiB0aGUgZG9jc3RyaW5nIG11c3Qgc3RhcnQgd2l0aCBhdCBsZWFzdCBGIHNwYWNlcywKKyAgICAjIHdoZXJlIEYgPiBQLgorICAgICMgdGhlc2UgRiBzcGFjZXMgd2lsbCBiZSBzdHJpcHBlZC4KKyAgICBkZWYgc3RhdGVfcGFyYW1ldGVyX2RvY3N0cmluZyhzZWxmLCBsaW5lKToKKyAgICAgICAgc3RyaXBwZWQgPSBsaW5lLnN0cmlwKCkKKyAgICAgICAgaWYgc3RyaXBwZWQuc3RhcnRzd2l0aCgnIycpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaW5kZW50ID0gc2VsZi5pbmRlbnQubWVhc3VyZShsaW5lKQorICAgICAgICBpZiBpbmRlbnQgPCBzZWxmLnBhcmFtZXRlcl9kb2NzdHJpbmdfaW5kZW50OgorICAgICAgICAgICAgc2VsZi5pbmRlbnQuaW5mZXIobGluZSkKKyAgICAgICAgICAgIGFzc2VydCBzZWxmLmluZGVudC5kZXB0aCA8IDMKKyAgICAgICAgICAgIGlmIHNlbGYuaW5kZW50LmRlcHRoID09IDI6CisgICAgICAgICAgICAgICAgIyBiYWNrIHRvIGEgcGFyYW1ldGVyCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYubmV4dChzZWxmLnN0YXRlX3BhcmFtZXRlciwgbGluZSkKKyAgICAgICAgICAgIGFzc2VydCBzZWxmLmluZGVudC5kZXB0aCA9PSAxCisgICAgICAgICAgICByZXR1cm4gc2VsZi5uZXh0KHNlbGYuc3RhdGVfZnVuY3Rpb25fZG9jc3RyaW5nLCBsaW5lKQorCisgICAgICAgIGFzc2VydCBzZWxmLmZ1bmN0aW9uLnBhcmFtZXRlcnMKKyAgICAgICAgbGFzdF9wYXJhbWV0ZXIgPSBuZXh0KHJldmVyc2VkKGxpc3Qoc2VsZi5mdW5jdGlvbi5wYXJhbWV0ZXJzLnZhbHVlcygpKSkpCisKKyAgICAgICAgbmV3X2RvY3N0cmluZyA9IGxhc3RfcGFyYW1ldGVyLmRvY3N0cmluZworCisgICAgICAgIGlmIG5ld19kb2NzdHJpbmc6CisgICAgICAgICAgICBuZXdfZG9jc3RyaW5nICs9ICdcbicKKyAgICAgICAgaWYgc3RyaXBwZWQ6CisgICAgICAgICAgICBuZXdfZG9jc3RyaW5nICs9IHNlbGYuaW5kZW50LmRlZGVudChsaW5lKQorCisgICAgICAgIGxhc3RfcGFyYW1ldGVyLmRvY3N0cmluZyA9IG5ld19kb2NzdHJpbmcKKworICAgICMgdGhlIGZpbmFsIHN0YW56YSBvZiB0aGUgRFNMIGlzIHRoZSBkb2NzdHJpbmcuCisgICAgZGVmIHN0YXRlX2Z1bmN0aW9uX2RvY3N0cmluZyhzZWxmLCBsaW5lKToKKyAgICAgICAgaWYgc2VsZi5ncm91cDoKKyAgICAgICAgICAgIGZhaWwoIkZ1bmN0aW9uICIgKyBzZWxmLmZ1bmN0aW9uLm5hbWUgKyAiIGhhcyBhIF0gd2l0aG91dCBhIG1hdGNoaW5nIFsuIikKKworICAgICAgICBzdHJpcHBlZCA9IGxpbmUuc3RyaXAoKQorICAgICAgICBpZiBzdHJpcHBlZC5zdGFydHN3aXRoKCcjJyk6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBuZXdfZG9jc3RyaW5nID0gc2VsZi5mdW5jdGlvbi5kb2NzdHJpbmcKKyAgICAgICAgaWYgbmV3X2RvY3N0cmluZzoKKyAgICAgICAgICAgIG5ld19kb2NzdHJpbmcgKz0gIlxuIgorICAgICAgICBpZiBzdHJpcHBlZDoKKyAgICAgICAgICAgIGxpbmUgPSBzZWxmLmluZGVudC5kZWRlbnQobGluZSkucnN0cmlwKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxpbmUgPSAnJworICAgICAgICBuZXdfZG9jc3RyaW5nICs9IGxpbmUKKyAgICAgICAgc2VsZi5mdW5jdGlvbi5kb2NzdHJpbmcgPSBuZXdfZG9jc3RyaW5nCisKKyAgICBkZWYgZm9ybWF0X2RvY3N0cmluZyhzZWxmKToKKyAgICAgICAgZiA9IHNlbGYuZnVuY3Rpb24KKworICAgICAgICBuZXdfb3JfaW5pdCA9IGYua2luZCBpbiAoTUVUSE9EX05FVywgTUVUSE9EX0lOSVQpCisgICAgICAgIGlmIG5ld19vcl9pbml0IGFuZCBub3QgZi5kb2NzdHJpbmc6CisgICAgICAgICAgICAjIGRvbid0IHJlbmRlciBhIGRvY3N0cmluZyBhdCBhbGwsIG5vIHNpZ25hdHVyZSwgbm90aGluZy4KKyAgICAgICAgICAgIHJldHVybiBmLmRvY3N0cmluZworCisgICAgICAgIHRleHQsIGFkZCwgb3V0cHV0ID0gX3RleHRfYWNjdW11bGF0b3IoKQorICAgICAgICBwYXJhbWV0ZXJzID0gZi5yZW5kZXJfcGFyYW1ldGVycworCisgICAgICAgICMjCisgICAgICAgICMjIGRvY3N0cmluZyBmaXJzdCBsaW5lCisgICAgICAgICMjCisKKyAgICAgICAgaWYgbmV3X29yX2luaXQ6CisgICAgICAgICAgICAjIGNsYXNzZXMgZ2V0ICpqdXN0KiB0aGUgbmFtZSBvZiB0aGUgY2xhc3MKKyAgICAgICAgICAgICMgbm90IF9fbmV3X18sIG5vdCBfX2luaXRfXywgYW5kIG5vdCBtb2R1bGUuY2xhc3NuYW1lCisgICAgICAgICAgICBhc3NlcnQgZi5jbHMKKyAgICAgICAgICAgIGFkZChmLmNscy5uYW1lKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYWRkKGYubmFtZSkKKyAgICAgICAgYWRkKCcoJykKKworICAgICAgICAjIHBvcHVsYXRlICJyaWdodF9icmFja2V0X2NvdW50IiBmaWVsZCBmb3IgZXZlcnkgcGFyYW1ldGVyCisgICAgICAgIGFzc2VydCBwYXJhbWV0ZXJzLCAiV2Ugc2hvdWxkIGFsd2F5cyBoYXZlIGEgc2VsZiBwYXJhbWV0ZXIuICIgKyByZXByKGYpCisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHBhcmFtZXRlcnNbMF0uY29udmVydGVyLCBzZWxmX2NvbnZlcnRlcikKKyAgICAgICAgcGFyYW1ldGVyc1swXS5yaWdodF9icmFja2V0X2NvdW50ID0gMAorICAgICAgICBwYXJhbWV0ZXJzX2FmdGVyX3NlbGYgPSBwYXJhbWV0ZXJzWzE6XQorICAgICAgICBpZiBwYXJhbWV0ZXJzX2FmdGVyX3NlbGY6CisgICAgICAgICAgICAjIGZvciBub3csIHRoZSBvbmx5IHdheSBDbGluaWMgc3VwcG9ydHMgcG9zaXRpb25hbC1vbmx5IHBhcmFtZXRlcnMKKyAgICAgICAgICAgICMgaXMgaWYgYWxsIG9mIHRoZW0gYXJlIHBvc2l0aW9uYWwtb25seS4uLgorICAgICAgICAgICAgIworICAgICAgICAgICAgIyAuLi4gZXhjZXB0IGZvciBzZWxmISAgc2VsZiBpcyBhbHdheXMgcG9zaXRpb25hbC1vbmx5LgorCisgICAgICAgICAgICBwb3NpdGlvbmFsX29ubHlfcGFyYW1ldGVycyA9IFtwLmtpbmQgPT0gaW5zcGVjdC5QYXJhbWV0ZXIuUE9TSVRJT05BTF9PTkxZIGZvciBwIGluIHBhcmFtZXRlcnNfYWZ0ZXJfc2VsZl0KKyAgICAgICAgICAgIGlmIHBhcmFtZXRlcnNfYWZ0ZXJfc2VsZlswXS5raW5kID09IGluc3BlY3QuUGFyYW1ldGVyLlBPU0lUSU9OQUxfT05MWToKKyAgICAgICAgICAgICAgICBhc3NlcnQgYWxsKHBvc2l0aW9uYWxfb25seV9wYXJhbWV0ZXJzKQorICAgICAgICAgICAgICAgIGZvciBwIGluIHBhcmFtZXRlcnM6CisgICAgICAgICAgICAgICAgICAgIHAucmlnaHRfYnJhY2tldF9jb3VudCA9IGFicyhwLmdyb3VwKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIGRvbid0IHB1dCBhbnkgcmlnaHQgYnJhY2tldHMgYXJvdW5kIG5vbi1wb3NpdGlvbmFsLW9ubHkgcGFyYW1ldGVycywgZXZlci4KKyAgICAgICAgICAgICAgICBmb3IgcCBpbiBwYXJhbWV0ZXJzX2FmdGVyX3NlbGY6CisgICAgICAgICAgICAgICAgICAgIHAucmlnaHRfYnJhY2tldF9jb3VudCA9IDAKKworICAgICAgICByaWdodF9icmFja2V0X2NvdW50ID0gMAorCisgICAgICAgIGRlZiBmaXhfcmlnaHRfYnJhY2tldF9jb3VudChkZXNpcmVkKToKKyAgICAgICAgICAgIG5vbmxvY2FsIHJpZ2h0X2JyYWNrZXRfY291bnQKKyAgICAgICAgICAgIHMgPSAnJworICAgICAgICAgICAgd2hpbGUgcmlnaHRfYnJhY2tldF9jb3VudCA8IGRlc2lyZWQ6CisgICAgICAgICAgICAgICAgcyArPSAnWycKKyAgICAgICAgICAgICAgICByaWdodF9icmFja2V0X2NvdW50ICs9IDEKKyAgICAgICAgICAgIHdoaWxlIHJpZ2h0X2JyYWNrZXRfY291bnQgPiBkZXNpcmVkOgorICAgICAgICAgICAgICAgIHMgKz0gJ10nCisgICAgICAgICAgICAgICAgcmlnaHRfYnJhY2tldF9jb3VudCAtPSAxCisgICAgICAgICAgICByZXR1cm4gcworCisgICAgICAgIG5lZWRfc2xhc2ggPSBGYWxzZQorICAgICAgICBhZGRlZF9zbGFzaCA9IEZhbHNlCisgICAgICAgIG5lZWRfYV90cmFpbGluZ19zbGFzaCA9IEZhbHNlCisKKyAgICAgICAgIyB3ZSBvbmx5IG5lZWQgYSB0cmFpbGluZyBzbGFzaDoKKyAgICAgICAgIyAgICogaWYgdGhpcyBpcyBub3QgYSAiZG9jc3RyaW5nX29ubHkiIHNpZ25hdHVyZQorICAgICAgICAjICAgKiBhbmQgaWYgdGhlIGxhc3QgKnNob3duKiBwYXJhbWV0ZXIgaXMKKyAgICAgICAgIyAgICAgcG9zaXRpb25hbCBvbmx5CisgICAgICAgIGlmIG5vdCBmLmRvY3N0cmluZ19vbmx5OgorICAgICAgICAgICAgZm9yIHAgaW4gcmV2ZXJzZWQocGFyYW1ldGVycyk6CisgICAgICAgICAgICAgICAgaWYgbm90IHAuY29udmVydGVyLnNob3dfaW5fc2lnbmF0dXJlOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGlmIHAuaXNfcG9zaXRpb25hbF9vbmx5KCk6CisgICAgICAgICAgICAgICAgICAgIG5lZWRfYV90cmFpbGluZ19zbGFzaCA9IFRydWUKKyAgICAgICAgICAgICAgICBicmVhaworCisKKyAgICAgICAgYWRkZWRfc3RhciA9IEZhbHNlCisKKyAgICAgICAgZmlyc3RfcGFyYW1ldGVyID0gVHJ1ZQorICAgICAgICBsYXN0X3AgPSBwYXJhbWV0ZXJzWy0xXQorICAgICAgICBsaW5lX2xlbmd0aCA9IGxlbignJy5qb2luKHRleHQpKQorICAgICAgICBpbmRlbnQgPSAiICIgKiBsaW5lX2xlbmd0aAorICAgICAgICBkZWYgYWRkX3BhcmFtZXRlcih0ZXh0KToKKyAgICAgICAgICAgIG5vbmxvY2FsIGxpbmVfbGVuZ3RoCisgICAgICAgICAgICBub25sb2NhbCBmaXJzdF9wYXJhbWV0ZXIKKyAgICAgICAgICAgIGlmIGZpcnN0X3BhcmFtZXRlcjoKKyAgICAgICAgICAgICAgICBzID0gdGV4dAorICAgICAgICAgICAgICAgIGZpcnN0X3BhcmFtZXRlciA9IEZhbHNlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHMgPSAnICcgKyB0ZXh0CisgICAgICAgICAgICAgICAgaWYgbGluZV9sZW5ndGggKyBsZW4ocykgPj0gNzI6CisgICAgICAgICAgICAgICAgICAgIGFkZCgnXG4nKQorICAgICAgICAgICAgICAgICAgICBhZGQoaW5kZW50KQorICAgICAgICAgICAgICAgICAgICBsaW5lX2xlbmd0aCA9IGxlbihpbmRlbnQpCisgICAgICAgICAgICAgICAgICAgIHMgPSB0ZXh0CisgICAgICAgICAgICBsaW5lX2xlbmd0aCArPSBsZW4ocykKKyAgICAgICAgICAgIGFkZChzKQorCisgICAgICAgIGZvciBwIGluIHBhcmFtZXRlcnM6CisgICAgICAgICAgICBpZiBub3QgcC5jb252ZXJ0ZXIuc2hvd19pbl9zaWduYXR1cmU6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGFzc2VydCBwLm5hbWUKKworICAgICAgICAgICAgaXNfc2VsZiA9IGlzaW5zdGFuY2UocC5jb252ZXJ0ZXIsIHNlbGZfY29udmVydGVyKQorICAgICAgICAgICAgaWYgaXNfc2VsZiBhbmQgZi5kb2NzdHJpbmdfb25seToKKyAgICAgICAgICAgICAgICAjIHRoaXMgaXNuJ3QgYSByZWFsIG1hY2hpbmUtcGFyc2FibGUgc2lnbmF0dXJlLAorICAgICAgICAgICAgICAgICMgc28gbGV0J3Mgbm90IHByaW50IHRoZSAic2VsZiIgcGFyYW1ldGVyCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgcC5pc19wb3NpdGlvbmFsX29ubHkoKToKKyAgICAgICAgICAgICAgICBuZWVkX3NsYXNoID0gbm90IGYuZG9jc3RyaW5nX29ubHkKKyAgICAgICAgICAgIGVsaWYgbmVlZF9zbGFzaCBhbmQgbm90IChhZGRlZF9zbGFzaCBvciBwLmlzX3Bvc2l0aW9uYWxfb25seSgpKToKKyAgICAgICAgICAgICAgICBhZGRlZF9zbGFzaCA9IFRydWUKKyAgICAgICAgICAgICAgICBhZGRfcGFyYW1ldGVyKCcvLCcpCisKKyAgICAgICAgICAgIGlmIHAuaXNfa2V5d29yZF9vbmx5KCkgYW5kIG5vdCBhZGRlZF9zdGFyOgorICAgICAgICAgICAgICAgIGFkZGVkX3N0YXIgPSBUcnVlCisgICAgICAgICAgICAgICAgYWRkX3BhcmFtZXRlcignKiwnKQorCisgICAgICAgICAgICBwX2FkZCwgcF9vdXRwdXQgPSB0ZXh0X2FjY3VtdWxhdG9yKCkKKyAgICAgICAgICAgIHBfYWRkKGZpeF9yaWdodF9icmFja2V0X2NvdW50KHAucmlnaHRfYnJhY2tldF9jb3VudCkpCisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UocC5jb252ZXJ0ZXIsIHNlbGZfY29udmVydGVyKToKKyAgICAgICAgICAgICAgICAjIGFubm90YXRlIGZpcnN0IHBhcmFtZXRlciBhcyBiZWluZyBhICJzZWxmIi4KKyAgICAgICAgICAgICAgICAjCisgICAgICAgICAgICAgICAgIyBpZiBpbnNwZWN0LlNpZ25hdHVyZSBnZXRzIHRoaXMgZnVuY3Rpb24sCisgICAgICAgICAgICAgICAgIyBhbmQgaXQncyBhbHJlYWR5IGJvdW5kLCB0aGUgc2VsZiBwYXJhbWV0ZXIKKyAgICAgICAgICAgICAgICAjIHdpbGwgYmUgc3RyaXBwZWQgb2ZmLgorICAgICAgICAgICAgICAgICMKKyAgICAgICAgICAgICAgICAjIGlmIGl0J3Mgbm90IGJvdW5kLCBpdCBzaG91bGQgYmUgbWFya2VkCisgICAgICAgICAgICAgICAgIyBhcyBwb3NpdGlvbmFsLW9ubHkuCisgICAgICAgICAgICAgICAgIworICAgICAgICAgICAgICAgICMgbm90ZTogd2UgZG9uJ3QgcHJpbnQgInNlbGYiIGZvciBfX2luaXRfXywKKyAgICAgICAgICAgICAgICAjIGJlY2F1c2UgdGhpcyBpc24ndCBhY3R1YWxseSB0aGUgc2lnbmF0dXJlCisgICAgICAgICAgICAgICAgIyBmb3IgX19pbml0X18uICAoaXQgY2FuJ3QgYmUsIF9faW5pdF9fIGRvZXNuJ3QKKyAgICAgICAgICAgICAgICAjIGhhdmUgYSBkb2NzdHJpbmcuKSAgaWYgdGhpcyBpcyBhbiBfX2luaXRfXworICAgICAgICAgICAgICAgICMgKG9yIF9fbmV3X18pLCB0aGVuIHRoaXMgc2lnbmF0dXJlIGlzIGZvcgorICAgICAgICAgICAgICAgICMgY2FsbGluZyB0aGUgY2xhc3MgdG8gY29uc3RydWN0IGEgbmV3IGluc3RhbmNlLgorICAgICAgICAgICAgICAgIHBfYWRkKCckJykKKworICAgICAgICAgICAgbmFtZSA9IHAuY29udmVydGVyLnNpZ25hdHVyZV9uYW1lIG9yIHAubmFtZQorICAgICAgICAgICAgcF9hZGQobmFtZSkKKworICAgICAgICAgICAgaWYgcC5jb252ZXJ0ZXIuaXNfb3B0aW9uYWwoKToKKyAgICAgICAgICAgICAgICBwX2FkZCgnPScpCisgICAgICAgICAgICAgICAgdmFsdWUgPSBwLmNvbnZlcnRlci5weV9kZWZhdWx0CisgICAgICAgICAgICAgICAgaWYgbm90IHZhbHVlOgorICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHJlcHIocC5jb252ZXJ0ZXIuZGVmYXVsdCkKKyAgICAgICAgICAgICAgICBwX2FkZCh2YWx1ZSkKKworICAgICAgICAgICAgaWYgKHAgIT0gbGFzdF9wKSBvciBuZWVkX2FfdHJhaWxpbmdfc2xhc2g6CisgICAgICAgICAgICAgICAgcF9hZGQoJywnKQorCisgICAgICAgICAgICBhZGRfcGFyYW1ldGVyKHBfb3V0cHV0KCkpCisKKyAgICAgICAgYWRkKGZpeF9yaWdodF9icmFja2V0X2NvdW50KDApKQorICAgICAgICBpZiBuZWVkX2FfdHJhaWxpbmdfc2xhc2g6CisgICAgICAgICAgICBhZGRfcGFyYW1ldGVyKCcvJykKKyAgICAgICAgYWRkKCcpJykKKworICAgICAgICAjIFBFUCA4IHNheXM6CisgICAgICAgICMKKyAgICAgICAgIyAgICAgVGhlIFB5dGhvbiBzdGFuZGFyZCBsaWJyYXJ5IHdpbGwgbm90IHVzZSBmdW5jdGlvbiBhbm5vdGF0aW9ucworICAgICAgICAjICAgICBhcyB0aGF0IHdvdWxkIHJlc3VsdCBpbiBhIHByZW1hdHVyZSBjb21taXRtZW50IHRvIGEgcGFydGljdWxhcgorICAgICAgICAjICAgICBhbm5vdGF0aW9uIHN0eWxlLiBJbnN0ZWFkLCB0aGUgYW5ub3RhdGlvbnMgYXJlIGxlZnQgZm9yIHVzZXJzCisgICAgICAgICMgICAgIHRvIGRpc2NvdmVyIGFuZCBleHBlcmltZW50IHdpdGggdXNlZnVsIGFubm90YXRpb24gc3R5bGVzLgorICAgICAgICAjCisgICAgICAgICMgdGhlcmVmb3JlIHRoaXMgaXMgY29tbWVudGVkIG91dDoKKyAgICAgICAgIworICAgICAgICAjIGlmIGYucmV0dXJuX2NvbnZlcnRlci5weV9kZWZhdWx0OgorICAgICAgICAjICAgICBhZGQoJyAtPiAnKQorICAgICAgICAjICAgICBhZGQoZi5yZXR1cm5fY29udmVydGVyLnB5X2RlZmF1bHQpCisKKyAgICAgICAgaWYgbm90IGYuZG9jc3RyaW5nX29ubHk6CisgICAgICAgICAgICBhZGQoIlxuLS1cbiIpCisKKyAgICAgICAgZG9jc3RyaW5nX2ZpcnN0X2xpbmUgPSBvdXRwdXQoKQorCisgICAgICAgICMgbm93IGZpeCB1cCB0aGUgcGxhY2VzIHdoZXJlIHRoZSBicmFja2V0cyBsb29rIHdyb25nCisgICAgICAgIGRvY3N0cmluZ19maXJzdF9saW5lID0gZG9jc3RyaW5nX2ZpcnN0X2xpbmUucmVwbGFjZSgnLCBdJywgJyxdICcpCisKKyAgICAgICAgIyBva2F5LiAgbm93IHdlJ3JlIG9mZmljaWFsbHkgYnVpbGRpbmcgdGhlICJwYXJhbWV0ZXJzIiBzZWN0aW9uLgorICAgICAgICAjIGNyZWF0ZSBzdWJzdGl0dXRpb24gdGV4dCBmb3Ige3BhcmFtZXRlcnN9CisgICAgICAgIHNwYWNlcl9saW5lID0gRmFsc2UKKyAgICAgICAgZm9yIHAgaW4gcGFyYW1ldGVyczoKKyAgICAgICAgICAgIGlmIG5vdCBwLmRvY3N0cmluZy5zdHJpcCgpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBzcGFjZXJfbGluZToKKyAgICAgICAgICAgICAgICBhZGQoJ1xuJykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc3BhY2VyX2xpbmUgPSBUcnVlCisgICAgICAgICAgICBhZGQoIiAgIikKKyAgICAgICAgICAgIGFkZChwLm5hbWUpCisgICAgICAgICAgICBhZGQoJ1xuJykKKyAgICAgICAgICAgIGFkZCh0ZXh0d3JhcC5pbmRlbnQocnN0cmlwX2xpbmVzKHAuZG9jc3RyaW5nLnJzdHJpcCgpKSwgIiAgICAiKSkKKyAgICAgICAgcGFyYW1ldGVycyA9IG91dHB1dCgpCisgICAgICAgIGlmIHBhcmFtZXRlcnM6CisgICAgICAgICAgICBwYXJhbWV0ZXJzICs9ICdcbicKKworICAgICAgICAjIworICAgICAgICAjIyBkb2NzdHJpbmcgYm9keQorICAgICAgICAjIworCisgICAgICAgIGRvY3N0cmluZyA9IGYuZG9jc3RyaW5nLnJzdHJpcCgpCisgICAgICAgIGxpbmVzID0gW2xpbmUucnN0cmlwKCkgZm9yIGxpbmUgaW4gZG9jc3RyaW5nLnNwbGl0KCdcbicpXQorCisgICAgICAgICMgRW5mb3JjZSB0aGUgc3VtbWFyeSBsaW5lIQorICAgICAgICAjIFRoZSBmaXJzdCBsaW5lIG9mIGEgZG9jc3RyaW5nIHNob3VsZCBiZSBhIHN1bW1hcnkgb2YgdGhlIGZ1bmN0aW9uLgorICAgICAgICAjIEl0IHNob3VsZCBmaXQgb24gb25lIGxpbmUgKDgwIGNvbHVtbnM/IDc5IG1heWJlPykgYW5kIGJlIGEgcGFyYWdyYXBoCisgICAgICAgICMgYnkgaXRzZWxmLgorICAgICAgICAjCisgICAgICAgICMgQXJndW1lbnQgQ2xpbmljIGVuZm9yY2VzIHRoZSBmb2xsb3dpbmcgcnVsZToKKyAgICAgICAgIyAgKiBlaXRoZXIgdGhlIGRvY3N0cmluZyBpcyBlbXB0eSwKKyAgICAgICAgIyAgKiBvciBpdCBtdXN0IGhhdmUgYSBzdW1tYXJ5IGxpbmUuCisgICAgICAgICMKKyAgICAgICAgIyBHdWlkbyBzYWlkIENsaW5pYyBzaG91bGQgZW5mb3JjZSB0aGlzOgorICAgICAgICAjIGh0dHA6Ly9tYWlsLnB5dGhvbi5vcmcvcGlwZXJtYWlsL3B5dGhvbi1kZXYvMjAxMy1KdW5lLzEyNzExMC5odG1sCisKKyAgICAgICAgaWYgbGVuKGxpbmVzKSA+PSAyOgorICAgICAgICAgICAgaWYgbGluZXNbMV06CisgICAgICAgICAgICAgICAgZmFpbCgiRG9jc3RyaW5nIGZvciAiICsgZi5mdWxsX25hbWUgKyAiIGRvZXMgbm90IGhhdmUgYSBzdW1tYXJ5IGxpbmUhXG4iICsKKyAgICAgICAgICAgICAgICAgICAgIkV2ZXJ5IG5vbi1ibGFuayBmdW5jdGlvbiBkb2NzdHJpbmcgbXVzdCBzdGFydCB3aXRoXG4iICsKKyAgICAgICAgICAgICAgICAgICAgImEgc2luZ2xlIGxpbmUgc3VtbWFyeSBmb2xsb3dlZCBieSBhbiBlbXB0eSBsaW5lLiIpCisgICAgICAgIGVsaWYgbGVuKGxpbmVzKSA9PSAxOgorICAgICAgICAgICAgIyB0aGUgZG9jc3RyaW5nIGlzIG9ubHkgb25lIGxpbmUgcmlnaHQgbm93LS10aGUgc3VtbWFyeSBsaW5lLgorICAgICAgICAgICAgIyBhZGQgYW4gZW1wdHkgbGluZSBhZnRlciB0aGUgc3VtbWFyeSBsaW5lIHNvIHdlIGhhdmUgc3BhY2UKKyAgICAgICAgICAgICMgYmV0d2VlbiBpdCBhbmQgdGhlIHtwYXJhbWV0ZXJzfSB3ZSdyZSBhYm91dCB0byBhZGQuCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJycpCisKKyAgICAgICAgcGFyYW1ldGVyc19tYXJrZXJfY291bnQgPSBsZW4oZG9jc3RyaW5nLnNwbGl0KCd7cGFyYW1ldGVyc30nKSkgLSAxCisgICAgICAgIGlmIHBhcmFtZXRlcnNfbWFya2VyX2NvdW50ID4gMToKKyAgICAgICAgICAgIGZhaWwoJ1lvdSBtYXkgbm90IHNwZWNpZnkge3BhcmFtZXRlcnN9IG1vcmUgdGhhbiBvbmNlIGluIGEgZG9jc3RyaW5nIScpCisKKyAgICAgICAgaWYgbm90IHBhcmFtZXRlcnNfbWFya2VyX2NvdW50OgorICAgICAgICAgICAgIyBpbnNlcnQgYWZ0ZXIgc3VtbWFyeSBsaW5lCisgICAgICAgICAgICBsaW5lcy5pbnNlcnQoMiwgJ3twYXJhbWV0ZXJzfScpCisKKyAgICAgICAgIyBpbnNlcnQgYXQgZnJvbnQgb2YgZG9jc3RyaW5nCisgICAgICAgIGxpbmVzLmluc2VydCgwLCBkb2NzdHJpbmdfZmlyc3RfbGluZSkKKworICAgICAgICBkb2NzdHJpbmcgPSAiXG4iLmpvaW4obGluZXMpCisKKyAgICAgICAgYWRkKGRvY3N0cmluZykKKyAgICAgICAgZG9jc3RyaW5nID0gb3V0cHV0KCkKKworICAgICAgICBkb2NzdHJpbmcgPSBsaW5lYXJfZm9ybWF0KGRvY3N0cmluZywgcGFyYW1ldGVycz1wYXJhbWV0ZXJzKQorICAgICAgICBkb2NzdHJpbmcgPSBkb2NzdHJpbmcucnN0cmlwKCkKKworICAgICAgICByZXR1cm4gZG9jc3RyaW5nCisKKyAgICBkZWYgc3RhdGVfdGVybWluYWwoc2VsZiwgbGluZSk6CisgICAgICAgICIiIgorICAgICAgICBDYWxsZWQgd2hlbiBwcm9jZXNzaW5nIHRoZSBibG9jayBpcyBkb25lLgorICAgICAgICAiIiIKKyAgICAgICAgYXNzZXJ0IG5vdCBsaW5lCisKKyAgICAgICAgaWYgbm90IHNlbGYuZnVuY3Rpb246CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpZiBzZWxmLmtleXdvcmRfb25seToKKyAgICAgICAgICAgIHZhbHVlcyA9IHNlbGYuZnVuY3Rpb24ucGFyYW1ldGVycy52YWx1ZXMoKQorICAgICAgICAgICAgaWYgbm90IHZhbHVlczoKKyAgICAgICAgICAgICAgICBub19wYXJhbWV0ZXJfYWZ0ZXJfc3RhciA9IFRydWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbGFzdF9wYXJhbWV0ZXIgPSBuZXh0KHJldmVyc2VkKGxpc3QodmFsdWVzKSkpCisgICAgICAgICAgICAgICAgbm9fcGFyYW1ldGVyX2FmdGVyX3N0YXIgPSBsYXN0X3BhcmFtZXRlci5raW5kICE9IGluc3BlY3QuUGFyYW1ldGVyLktFWVdPUkRfT05MWQorICAgICAgICAgICAgaWYgbm9fcGFyYW1ldGVyX2FmdGVyX3N0YXI6CisgICAgICAgICAgICAgICAgZmFpbCgiRnVuY3Rpb24gIiArIHNlbGYuZnVuY3Rpb24ubmFtZSArICIgc3BlY2lmaWVzICcqJyB3aXRob3V0IGFueSBwYXJhbWV0ZXJzIGFmdGVyd2FyZHMuIikKKworICAgICAgICAjIHJlbW92ZSB0cmFpbGluZyB3aGl0ZXNwYWNlIGZyb20gYWxsIHBhcmFtZXRlciBkb2NzdHJpbmdzCisgICAgICAgIGZvciBuYW1lLCB2YWx1ZSBpbiBzZWxmLmZ1bmN0aW9uLnBhcmFtZXRlcnMuaXRlbXMoKToKKyAgICAgICAgICAgIGlmIG5vdCB2YWx1ZToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgdmFsdWUuZG9jc3RyaW5nID0gdmFsdWUuZG9jc3RyaW5nLnJzdHJpcCgpCisKKyAgICAgICAgc2VsZi5mdW5jdGlvbi5kb2NzdHJpbmcgPSBzZWxmLmZvcm1hdF9kb2NzdHJpbmcoKQorCisKKworCisjIG1hcHMgc3RyaW5ncyB0byBjYWxsYWJsZXMuCisjIHRoZSBjYWxsYWJsZSBzaG91bGQgcmV0dXJuIGFuIG9iamVjdAorIyB0aGF0IGltcGxlbWVudHMgdGhlIGNsaW5pYyBwYXJzZXIKKyMgaW50ZXJmYWNlIChfX2luaXRfXyBhbmQgcGFyc2UpLgorIworIyBleGFtcGxlIHBhcnNlcnM6CisjICAgImNsaW5pYyIsIGhhbmRsZXMgdGhlIENsaW5pYyBEU0wKKyMgICAicHl0aG9uIiwgaGFuZGxlcyBydW5uaW5nIFB5dGhvbiBjb2RlCisjCitwYXJzZXJzID0geydjbGluaWMnIDogRFNMUGFyc2VyLCAncHl0aG9uJzogUHl0aG9uUGFyc2VyfQorCisKK2NsaW5pYyA9IE5vbmUKKworCitkZWYgbWFpbihhcmd2KToKKyAgICBpbXBvcnQgc3lzCisKKyAgICBpZiBzeXMudmVyc2lvbl9pbmZvLm1ham9yIDwgMyBvciBzeXMudmVyc2lvbl9pbmZvLm1pbm9yIDwgMzoKKyAgICAgICAgc3lzLmV4aXQoIkVycm9yOiBjbGluaWMucHkgcmVxdWlyZXMgUHl0aG9uIDMuMyBvciBncmVhdGVyLiIpCisKKyAgICBpbXBvcnQgYXJncGFyc2UKKyAgICBjbWRsaW5lID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQorICAgIGNtZGxpbmUuYWRkX2FyZ3VtZW50KCItZiIsICItLWZvcmNlIiwgYWN0aW9uPSdzdG9yZV90cnVlJykKKyAgICBjbWRsaW5lLmFkZF9hcmd1bWVudCgiLW8iLCAiLS1vdXRwdXQiLCB0eXBlPXN0cikKKyAgICBjbWRsaW5lLmFkZF9hcmd1bWVudCgiLXYiLCAiLS12ZXJib3NlIiwgYWN0aW9uPSdzdG9yZV90cnVlJykKKyAgICBjbWRsaW5lLmFkZF9hcmd1bWVudCgiLS1jb252ZXJ0ZXJzIiwgYWN0aW9uPSdzdG9yZV90cnVlJykKKyAgICBjbWRsaW5lLmFkZF9hcmd1bWVudCgiLS1tYWtlIiwgYWN0aW9uPSdzdG9yZV90cnVlJykKKyAgICBjbWRsaW5lLmFkZF9hcmd1bWVudCgiZmlsZW5hbWUiLCB0eXBlPXN0ciwgbmFyZ3M9IioiKQorICAgIG5zID0gY21kbGluZS5wYXJzZV9hcmdzKGFyZ3YpCisKKyAgICBpZiBucy5jb252ZXJ0ZXJzOgorICAgICAgICBpZiBucy5maWxlbmFtZToKKyAgICAgICAgICAgIHByaW50KCJVc2FnZSBlcnJvcjogY2FuJ3Qgc3BlY2lmeSAtLWNvbnZlcnRlcnMgYW5kIGEgZmlsZW5hbWUgYXQgdGhlIHNhbWUgdGltZS4iKQorICAgICAgICAgICAgcHJpbnQoKQorICAgICAgICAgICAgY21kbGluZS5wcmludF91c2FnZSgpCisgICAgICAgICAgICBzeXMuZXhpdCgtMSkKKyAgICAgICAgY29udmVydGVycyA9IFtdCisgICAgICAgIHJldHVybl9jb252ZXJ0ZXJzID0gW10KKyAgICAgICAgaWdub3JlZCA9IHNldCgiIiIKKyAgICAgICAgICAgIGFkZF9jX2NvbnZlcnRlcgorICAgICAgICAgICAgYWRkX2NfcmV0dXJuX2NvbnZlcnRlcgorICAgICAgICAgICAgYWRkX2RlZmF1bHRfbGVnYWN5X2NfY29udmVydGVyCisgICAgICAgICAgICBhZGRfbGVnYWN5X2NfY29udmVydGVyCisgICAgICAgICAgICAiIiIuc3RyaXAoKS5zcGxpdCgpKQorICAgICAgICBtb2R1bGUgPSBnbG9iYWxzKCkKKyAgICAgICAgZm9yIG5hbWUgaW4gbW9kdWxlOgorICAgICAgICAgICAgZm9yIHN1ZmZpeCwgaWRzIGluICgKKyAgICAgICAgICAgICAgICAoIl9yZXR1cm5fY29udmVydGVyIiwgcmV0dXJuX2NvbnZlcnRlcnMpLAorICAgICAgICAgICAgICAgICgiX2NvbnZlcnRlciIsIGNvbnZlcnRlcnMpLAorICAgICAgICAgICAgKToKKyAgICAgICAgICAgICAgICBpZiBuYW1lIGluIGlnbm9yZWQ6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgaWYgbmFtZS5lbmRzd2l0aChzdWZmaXgpOgorICAgICAgICAgICAgICAgICAgICBpZHMuYXBwZW5kKChuYW1lLCBuYW1lWzotbGVuKHN1ZmZpeCldKSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgcHJpbnQoKQorCisgICAgICAgIHByaW50KCJMZWdhY3kgY29udmVydGVyczoiKQorICAgICAgICBsZWdhY3kgPSBzb3J0ZWQobGVnYWN5X2NvbnZlcnRlcnMpCisgICAgICAgIHByaW50KCcgICAgJyArICcgJy5qb2luKGMgZm9yIGMgaW4gbGVnYWN5IGlmIGNbMF0uaXN1cHBlcigpKSkKKyAgICAgICAgcHJpbnQoJyAgICAnICsgJyAnLmpvaW4oYyBmb3IgYyBpbiBsZWdhY3kgaWYgY1swXS5pc2xvd2VyKCkpKQorICAgICAgICBwcmludCgpCisKKyAgICAgICAgZm9yIHRpdGxlLCBhdHRyaWJ1dGUsIGlkcyBpbiAoCisgICAgICAgICAgICAoIkNvbnZlcnRlcnMiLCAnY29udmVydGVyX2luaXQnLCBjb252ZXJ0ZXJzKSwKKyAgICAgICAgICAgICgiUmV0dXJuIGNvbnZlcnRlcnMiLCAncmV0dXJuX2NvbnZlcnRlcl9pbml0JywgcmV0dXJuX2NvbnZlcnRlcnMpLAorICAgICAgICApOgorICAgICAgICAgICAgcHJpbnQodGl0bGUgKyAiOiIpCisgICAgICAgICAgICBsb25nZXN0ID0gLTEKKyAgICAgICAgICAgIGZvciBuYW1lLCBzaG9ydF9uYW1lIGluIGlkczoKKyAgICAgICAgICAgICAgICBsb25nZXN0ID0gbWF4KGxvbmdlc3QsIGxlbihzaG9ydF9uYW1lKSkKKyAgICAgICAgICAgIGZvciBuYW1lLCBzaG9ydF9uYW1lIGluIHNvcnRlZChpZHMsIGtleT1sYW1iZGEgeDogeFsxXS5sb3dlcigpKToKKyAgICAgICAgICAgICAgICBjbHMgPSBtb2R1bGVbbmFtZV0KKyAgICAgICAgICAgICAgICBjYWxsYWJsZSA9IGdldGF0dHIoY2xzLCBhdHRyaWJ1dGUsIE5vbmUpCisgICAgICAgICAgICAgICAgaWYgbm90IGNhbGxhYmxlOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIHNpZ25hdHVyZSA9IGluc3BlY3Quc2lnbmF0dXJlKGNhbGxhYmxlKQorICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMgPSBbXQorICAgICAgICAgICAgICAgIGZvciBwYXJhbWV0ZXJfbmFtZSwgcGFyYW1ldGVyIGluIHNpZ25hdHVyZS5wYXJhbWV0ZXJzLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgICAgIGlmIHBhcmFtZXRlci5raW5kID09IGluc3BlY3QuUGFyYW1ldGVyLktFWVdPUkRfT05MWToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHBhcmFtZXRlci5kZWZhdWx0ICE9IGluc3BlY3QuUGFyYW1ldGVyLmVtcHR5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMgPSAne309eyFyfScuZm9ybWF0KHBhcmFtZXRlcl9uYW1lLCBwYXJhbWV0ZXIuZGVmYXVsdCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcyA9IHBhcmFtZXRlcl9uYW1lCisgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChzKQorICAgICAgICAgICAgICAgIHByaW50KCcgICAge30oe30pJy5mb3JtYXQoc2hvcnRfbmFtZSwgJywgJy5qb2luKHBhcmFtZXRlcnMpKSkKKyAgICAgICAgICAgIHByaW50KCkKKyAgICAgICAgcHJpbnQoIkFsbCBjb252ZXJ0ZXJzIGFsc28gYWNjZXB0IChjX2RlZmF1bHQ9Tm9uZSwgcHlfZGVmYXVsdD1Ob25lLCBhbm5vdGF0aW9uPU5vbmUpLiIpCisgICAgICAgIHByaW50KCJBbGwgcmV0dXJuIGNvbnZlcnRlcnMgYWxzbyBhY2NlcHQgKHB5X2RlZmF1bHQ9Tm9uZSkuIikKKyAgICAgICAgc3lzLmV4aXQoMCkKKworICAgIGlmIG5zLm1ha2U6CisgICAgICAgIGlmIG5zLm91dHB1dCBvciBucy5maWxlbmFtZToKKyAgICAgICAgICAgIHByaW50KCJVc2FnZSBlcnJvcjogY2FuJ3QgdXNlIC1vIG9yIGZpbGVuYW1lcyB3aXRoIC0tbWFrZS4iKQorICAgICAgICAgICAgcHJpbnQoKQorICAgICAgICAgICAgY21kbGluZS5wcmludF91c2FnZSgpCisgICAgICAgICAgICBzeXMuZXhpdCgtMSkKKyAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsoJy4nKToKKyAgICAgICAgICAgIGZvciByY3NfZGlyIGluICgnLnN2bicsICcuZ2l0JywgJy5oZycsICdidWlsZCcsICdleHRlcm5hbHMnKToKKyAgICAgICAgICAgICAgICBpZiByY3NfZGlyIGluIGRpcnM6CisgICAgICAgICAgICAgICAgICAgIGRpcnMucmVtb3ZlKHJjc19kaXIpCisgICAgICAgICAgICBmb3IgZmlsZW5hbWUgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgaWYgbm90IChmaWxlbmFtZS5lbmRzd2l0aCgnLmMnKSBvciBmaWxlbmFtZS5lbmRzd2l0aCgnLmgnKSk6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihyb290LCBmaWxlbmFtZSkKKyAgICAgICAgICAgICAgICBpZiBucy52ZXJib3NlOgorICAgICAgICAgICAgICAgICAgICBwcmludChwYXRoKQorICAgICAgICAgICAgICAgIHBhcnNlX2ZpbGUocGF0aCwgZm9yY2U9bnMuZm9yY2UsIHZlcmlmeT1ub3QgbnMuZm9yY2UpCisgICAgICAgIHJldHVybgorCisgICAgaWYgbm90IG5zLmZpbGVuYW1lOgorICAgICAgICBjbWRsaW5lLnByaW50X3VzYWdlKCkKKyAgICAgICAgc3lzLmV4aXQoLTEpCisKKyAgICBpZiBucy5vdXRwdXQgYW5kIGxlbihucy5maWxlbmFtZSkgPiAxOgorICAgICAgICBwcmludCgiVXNhZ2UgZXJyb3I6IGNhbid0IHVzZSAtbyB3aXRoIG11bHRpcGxlIGZpbGVuYW1lcy4iKQorICAgICAgICBwcmludCgpCisgICAgICAgIGNtZGxpbmUucHJpbnRfdXNhZ2UoKQorICAgICAgICBzeXMuZXhpdCgtMSkKKworICAgIGZvciBmaWxlbmFtZSBpbiBucy5maWxlbmFtZToKKyAgICAgICAgaWYgbnMudmVyYm9zZToKKyAgICAgICAgICAgIHByaW50KGZpbGVuYW1lKQorICAgICAgICBwYXJzZV9maWxlKGZpbGVuYW1lLCBvdXRwdXQ9bnMub3V0cHV0LCBmb3JjZT1ucy5mb3JjZSwgdmVyaWZ5PW5vdCBucy5mb3JjZSkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHN5cy5leGl0KG1haW4oc3lzLmFyZ3ZbMTpdKSkKZGlmZiAtLWdpdCBhL1Rvb2xzL2NsaW5pYy9jbGluaWNfdGVzdC5weSBiL1Rvb2xzL2NsaW5pYy9jbGluaWNfdGVzdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDIxMDAwCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvY2xpbmljL2NsaW5pY190ZXN0LnB5CkBAIC0wLDAgKzEsODAxIEBACisjIEFyZ3VtZW50IENsaW5pYworIyBDb3B5cmlnaHQgMjAxMi0yMDEzIGJ5IExhcnJ5IEhhc3RpbmdzLgorIyBMaWNlbnNlZCB0byB0aGUgUFNGIHVuZGVyIGEgY29udHJpYnV0b3IgYWdyZWVtZW50LgorIworCitpbXBvcnQgYnVpbHRpbnMKK2ltcG9ydCBjbGluaWMKK2Zyb20gY2xpbmljIGltcG9ydCBEU0xQYXJzZXIKK2ltcG9ydCBjb2xsZWN0aW9ucworaW1wb3J0IGluc3BlY3QKK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAoraW1wb3J0IHN5cworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIHVuaXR0ZXN0IGltcG9ydCBUZXN0Q2FzZQorCisKK2NsYXNzIEZha2VDb252ZXJ0ZXI6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIGFyZ3MpOgorICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCisgICAgICAgIHNlbGYuYXJncyA9IGFyZ3MKKworCitjbGFzcyBGYWtlQ29udmVydGVyRmFjdG9yeToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSk6CisgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKKworICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBuYW1lLCBkZWZhdWx0LCAqKmt3YXJncyk6CisgICAgICAgIHJldHVybiBGYWtlQ29udmVydGVyKHNlbGYubmFtZSwga3dhcmdzKQorCisKK2NsYXNzIEZha2VDb252ZXJ0ZXJzRGljdDoKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYudXNlZF9jb252ZXJ0ZXJzID0ge30KKworICAgIGRlZiBnZXQoc2VsZiwgbmFtZSwgZGVmYXVsdCk6CisgICAgICAgIHJldHVybiBzZWxmLnVzZWRfY29udmVydGVycy5zZXRkZWZhdWx0KG5hbWUsIEZha2VDb252ZXJ0ZXJGYWN0b3J5KG5hbWUpKQorCitjbGluaWMuQ2xpbmljLnByZXNldHNfdGV4dCA9ICcnCitjID0gY2xpbmljLkNsaW5pYyhsYW5ndWFnZT0nQycpCisKK2NsYXNzIEZha2VDbGluaWM6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLmNvbnZlcnRlcnMgPSBGYWtlQ29udmVydGVyc0RpY3QoKQorICAgICAgICBzZWxmLmxlZ2FjeV9jb252ZXJ0ZXJzID0gRmFrZUNvbnZlcnRlcnNEaWN0KCkKKyAgICAgICAgc2VsZi5sYW5ndWFnZSA9IGNsaW5pYy5DTGFuZ3VhZ2UoTm9uZSkKKyAgICAgICAgc2VsZi5maWxlbmFtZSA9IE5vbmUKKyAgICAgICAgc2VsZi5ibG9ja19wYXJzZXIgPSBjbGluaWMuQmxvY2tQYXJzZXIoJycsIHNlbGYubGFuZ3VhZ2UpCisgICAgICAgIHNlbGYubW9kdWxlcyA9IGNvbGxlY3Rpb25zLk9yZGVyZWREaWN0KCkKKyAgICAgICAgc2VsZi5jbGFzc2VzID0gY29sbGVjdGlvbnMuT3JkZXJlZERpY3QoKQorICAgICAgICBjbGluaWMuY2xpbmljID0gc2VsZgorICAgICAgICBzZWxmLm5hbWUgPSAiRmFrZUNsaW5pYyIKKyAgICAgICAgc2VsZi5saW5lX3ByZWZpeCA9IHNlbGYubGluZV9zdWZmaXggPSAnJworICAgICAgICBzZWxmLmRlc3RpbmF0aW9ucyA9IHt9CisgICAgICAgIHNlbGYuYWRkX2Rlc3RpbmF0aW9uKCJibG9jayIsICJidWZmZXIiKQorICAgICAgICBzZWxmLmFkZF9kZXN0aW5hdGlvbigiZmlsZSIsICJidWZmZXIiKQorICAgICAgICBzZWxmLmFkZF9kZXN0aW5hdGlvbigic3VwcHJlc3MiLCAic3VwcHJlc3MiKQorICAgICAgICBkID0gc2VsZi5kZXN0aW5hdGlvbnMuZ2V0CisgICAgICAgIHNlbGYuZmllbGRfZGVzdGluYXRpb25zID0gY29sbGVjdGlvbnMuT3JkZXJlZERpY3QoKAorICAgICAgICAgICAgKCdkb2NzdHJpbmdfcHJvdG90eXBlJywgZCgnc3VwcHJlc3MnKSksCisgICAgICAgICAgICAoJ2RvY3N0cmluZ19kZWZpbml0aW9uJywgZCgnYmxvY2snKSksCisgICAgICAgICAgICAoJ21ldGhvZGRlZl9kZWZpbmUnLCBkKCdibG9jaycpKSwKKyAgICAgICAgICAgICgnaW1wbF9wcm90b3R5cGUnLCBkKCdibG9jaycpKSwKKyAgICAgICAgICAgICgncGFyc2VyX3Byb3RvdHlwZScsIGQoJ3N1cHByZXNzJykpLAorICAgICAgICAgICAgKCdwYXJzZXJfZGVmaW5pdGlvbicsIGQoJ2Jsb2NrJykpLAorICAgICAgICAgICAgKCdpbXBsX2RlZmluaXRpb24nLCBkKCdibG9jaycpKSwKKyAgICAgICAgKSkKKworICAgIGRlZiBnZXRfZGVzdGluYXRpb24oc2VsZiwgbmFtZSk6CisgICAgICAgIGQgPSBzZWxmLmRlc3RpbmF0aW9ucy5nZXQobmFtZSkKKyAgICAgICAgaWYgbm90IGQ6CisgICAgICAgICAgICBzeXMuZXhpdCgiRGVzdGluYXRpb24gZG9lcyBub3QgZXhpc3Q6ICIgKyByZXByKG5hbWUpKQorICAgICAgICByZXR1cm4gZAorCisgICAgZGVmIGFkZF9kZXN0aW5hdGlvbihzZWxmLCBuYW1lLCB0eXBlLCAqYXJncyk6CisgICAgICAgIGlmIG5hbWUgaW4gc2VsZi5kZXN0aW5hdGlvbnM6CisgICAgICAgICAgICBzeXMuZXhpdCgiRGVzdGluYXRpb24gYWxyZWFkeSBleGlzdHM6ICIgKyByZXByKG5hbWUpKQorICAgICAgICBzZWxmLmRlc3RpbmF0aW9uc1tuYW1lXSA9IGNsaW5pYy5EZXN0aW5hdGlvbihuYW1lLCB0eXBlLCBzZWxmLCAqYXJncykKKworICAgIGRlZiBpc19kaXJlY3RpdmUoc2VsZiwgbmFtZSk6CisgICAgICAgIHJldHVybiBuYW1lID09ICJtb2R1bGUiCisKKyAgICBkZWYgZGlyZWN0aXZlKHNlbGYsIG5hbWUsIGFyZ3MpOgorICAgICAgICBzZWxmLmNhbGxlZF9kaXJlY3RpdmVzW25hbWVdID0gYXJncworCisgICAgX21vZHVsZV9hbmRfY2xhc3MgPSBjbGluaWMuQ2xpbmljLl9tb2R1bGVfYW5kX2NsYXNzCisKK2NsYXNzIENsaW5pY1dob2xlRmlsZVRlc3QoVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2VvbChzZWxmKToKKyAgICAgICAgIyByZWdyZXNzaW9uIHRlc3Q6CisgICAgICAgICMgY2xpbmljJ3MgYmxvY2sgcGFyc2VyIGRpZG4ndCByZWNvZ25pemUKKyAgICAgICAgIyB0aGUgImVuZCBsaW5lIiBmb3IgdGhlIGJsb2NrIGlmIGl0CisgICAgICAgICMgZGlkbid0IGVuZCBpbiAiXG4iIChhcyBpbiwgdGhlIGxhc3QpCisgICAgICAgICMgYnl0ZSBvZiB0aGUgZmlsZSB3YXMgJy8nLgorICAgICAgICAjIHNvIGl0IHdvdWRsIHNwaXQgb3V0IGFuIGVuZCBsaW5lIGZvciB5b3UuCisgICAgICAgICMgYW5kIHNpbmNlIHlvdSByZWFsbHkgYWxyZWFkeSBoYWQgb25lLAorICAgICAgICAjIHRoZSBsYXN0IGxpbmUgb2YgdGhlIGJsb2NrIGdvdCBjb3JydXB0ZWQuCisgICAgICAgIGMgPSBjbGluaWMuQ2xpbmljKGNsaW5pYy5DTGFuZ3VhZ2UoTm9uZSkpCisgICAgICAgIHJhdyA9ICIvKltjbGluaWNdXG5mb29cbltjbGluaWNdKi8iCisgICAgICAgIGNvb2tlZCA9IGMucGFyc2UocmF3KS5zcGxpdGxpbmVzKCkKKyAgICAgICAgZW5kX2xpbmUgPSBjb29rZWRbMl0ucnN0cmlwKCkKKyAgICAgICAgIyB0aGlzIHRlc3QgaXMgcmVkdW5kYW50LCBpdCdzIGp1c3QgaGVyZSBleHBsaWNpdGx5IHRvIGNhdGNoCisgICAgICAgICMgdGhlIHJlZ3Jlc3Npb24gdGVzdCBzbyB3ZSBkb24ndCBmb3JnZXQgd2hhdCBpdCBsb29rZWQgbGlrZQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGVuZF9saW5lLCAiW2NsaW5pY10qL1tjbGluaWNdKi8iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVuZF9saW5lLCAiW2NsaW5pY10qLyIpCisKKworCitjbGFzcyBDbGluaWNHcm91cFBlcm11dGVyVGVzdChUZXN0Q2FzZSk6CisgICAgZGVmIF90ZXN0KHNlbGYsIGwsIG0sIHIsIG91dHB1dCk6CisgICAgICAgIGNvbXB1dGVkID0gY2xpbmljLnBlcm11dGVfb3B0aW9uYWxfZ3JvdXBzKGwsIG0sIHIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0cHV0LCBjb21wdXRlZCkKKworICAgIGRlZiB0ZXN0X3JhbmdlKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0KFtbJ3N0YXJ0J11dLCBbJ3N0b3AnXSwgW1snc3RlcCddXSwKKyAgICAgICAgICAoCisgICAgICAgICAgICAoJ3N0b3AnLCksCisgICAgICAgICAgICAoJ3N0YXJ0JywgJ3N0b3AnLCksCisgICAgICAgICAgICAoJ3N0YXJ0JywgJ3N0b3AnLCAnc3RlcCcsKSwKKyAgICAgICAgICApKQorCisgICAgZGVmIHRlc3RfYWRkX3dpbmRvdyhzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdChbWyd4JywgJ3knXV0sIFsnY2gnXSwgW1snYXR0ciddXSwKKyAgICAgICAgICAoCisgICAgICAgICAgICAoJ2NoJywpLAorICAgICAgICAgICAgKCdjaCcsICdhdHRyJyksCisgICAgICAgICAgICAoJ3gnLCAneScsICdjaCcsKSwKKyAgICAgICAgICAgICgneCcsICd5JywgJ2NoJywgJ2F0dHInKSwKKyAgICAgICAgICApKQorCisgICAgZGVmIHRlc3RfbHVkaWNyb3VzKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0KFtbJ2ExJywgJ2EyJywgJ2EzJ10sIFsnYjEnLCAnYjInXV0sIFsnYzEnXSwgW1snZDEnLCAnZDInXSwgWydlMScsICdlMicsICdlMyddXSwKKyAgICAgICAgICAoCisgICAgICAgICAgKCdjMScsKSwKKyAgICAgICAgICAoJ2IxJywgJ2IyJywgJ2MxJyksCisgICAgICAgICAgKCdiMScsICdiMicsICdjMScsICdkMScsICdkMicpLAorICAgICAgICAgICgnYTEnLCAnYTInLCAnYTMnLCAnYjEnLCAnYjInLCAnYzEnKSwKKyAgICAgICAgICAoJ2ExJywgJ2EyJywgJ2EzJywgJ2IxJywgJ2IyJywgJ2MxJywgJ2QxJywgJ2QyJyksCisgICAgICAgICAgKCdhMScsICdhMicsICdhMycsICdiMScsICdiMicsICdjMScsICdkMScsICdkMicsICdlMScsICdlMicsICdlMycpLAorICAgICAgICAgICkpCisKKyAgICBkZWYgdGVzdF9yaWdodF9vbmx5KHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0KFtdLCBbXSwgW1snYSddLFsnYiddLFsnYyddXSwKKyAgICAgICAgICAoCisgICAgICAgICAgKCksCisgICAgICAgICAgKCdhJywpLAorICAgICAgICAgICgnYScsICdiJyksCisgICAgICAgICAgKCdhJywgJ2InLCAnYycpCisgICAgICAgICAgKSkKKworICAgIGRlZiB0ZXN0X2hhdmVfbGVmdF9vcHRpb25zX2J1dF9yZXF1aXJlZF9pc19lbXB0eShzZWxmKToKKyAgICAgICAgZGVmIGZuKCk6CisgICAgICAgICAgICBjbGluaWMucGVybXV0ZV9vcHRpb25hbF9ncm91cHMoWydhJ10sIFtdLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsIGZuKQorCisKK2NsYXNzIENsaW5pY0xpbmVhckZvcm1hdFRlc3QoVGVzdENhc2UpOgorICAgIGRlZiBfdGVzdChzZWxmLCBpbnB1dCwgb3V0cHV0LCAqKmt3YXJncyk6CisgICAgICAgIGNvbXB1dGVkID0gY2xpbmljLmxpbmVhcl9mb3JtYXQoaW5wdXQsICoqa3dhcmdzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dHB1dCwgY29tcHV0ZWQpCisKKyAgICBkZWYgdGVzdF9lbXB0eV9zdHJpbmdzKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0KCcnLCAnJykKKworICAgIGRlZiB0ZXN0X3NvbG9fbmV3bGluZShzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdCgnXG4nLCAnXG4nKQorCisgICAgZGVmIHRlc3Rfbm9fc3Vic3RpdHV0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0KCIiIgorICAgICAgICAgIGFiYworICAgICAgICAgICIiIiwgIiIiCisgICAgICAgICAgYWJjCisgICAgICAgICAgIiIiKQorCisgICAgZGVmIHRlc3RfZW1wdHlfc3Vic3RpdHV0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0KCIiIgorICAgICAgICAgIGFiYworICAgICAgICAgIHtuYW1lfQorICAgICAgICAgIGRlZgorICAgICAgICAgICIiIiwgIiIiCisgICAgICAgICAgYWJjCisgICAgICAgICAgZGVmCisgICAgICAgICAgIiIiLCBuYW1lPScnKQorCisgICAgZGVmIHRlc3Rfc2luZ2xlX2xpbmVfc3Vic3RpdHV0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0KCIiIgorICAgICAgICAgIGFiYworICAgICAgICAgIHtuYW1lfQorICAgICAgICAgIGRlZgorICAgICAgICAgICIiIiwgIiIiCisgICAgICAgICAgYWJjCisgICAgICAgICAgR0FSR0xFCisgICAgICAgICAgZGVmCisgICAgICAgICAgIiIiLCBuYW1lPSdHQVJHTEUnKQorCisgICAgZGVmIHRlc3RfbXVsdGlsaW5lX3N1YnN0aXR1dGlvbihzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdCgiIiIKKyAgICAgICAgICBhYmMKKyAgICAgICAgICB7bmFtZX0KKyAgICAgICAgICBkZWYKKyAgICAgICAgICAiIiIsICIiIgorICAgICAgICAgIGFiYworICAgICAgICAgIGJpbmdsZQorICAgICAgICAgIGJ1bmdsZQorCisgICAgICAgICAgZGVmCisgICAgICAgICAgIiIiLCBuYW1lPSdiaW5nbGVcbmJ1bmdsZVxuJykKKworY2xhc3MgSW5lcnRQYXJzZXI6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNsaW5pYyk6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBwYXJzZShzZWxmLCBibG9jayk6CisgICAgICAgIHBhc3MKKworY2xhc3MgQ29weVBhcnNlcjoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY2xpbmljKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHBhcnNlKHNlbGYsIGJsb2NrKToKKyAgICAgICAgYmxvY2sub3V0cHV0ID0gYmxvY2suaW5wdXQKKworCitjbGFzcyBDbGluaWNCbG9ja1BhcnNlclRlc3QoVGVzdENhc2UpOgorICAgIGRlZiBfdGVzdChzZWxmLCBpbnB1dCwgb3V0cHV0KToKKyAgICAgICAgbGFuZ3VhZ2UgPSBjbGluaWMuQ0xhbmd1YWdlKE5vbmUpCisKKyAgICAgICAgYmxvY2tzID0gbGlzdChjbGluaWMuQmxvY2tQYXJzZXIoaW5wdXQsIGxhbmd1YWdlKSkKKyAgICAgICAgd3JpdGVyID0gY2xpbmljLkJsb2NrUHJpbnRlcihsYW5ndWFnZSkKKyAgICAgICAgZm9yIGJsb2NrIGluIGJsb2NrczoKKyAgICAgICAgICAgIHdyaXRlci5wcmludF9ibG9jayhibG9jaykKKyAgICAgICAgb3V0cHV0ID0gd3JpdGVyLmYuZ2V0dmFsdWUoKQorICAgICAgICBhc3NlcnQgb3V0cHV0ID09IGlucHV0LCAib3V0cHV0ICE9IGlucHV0IVxuXG5vdXRwdXQgIiArIHJlcHIob3V0cHV0KSArICJcblxuIGlucHV0ICIgKyByZXByKGlucHV0KQorCisgICAgZGVmIHJvdW5kX3RyaXAoc2VsZiwgaW5wdXQpOgorICAgICAgICByZXR1cm4gc2VsZi5fdGVzdChpbnB1dCwgaW5wdXQpCisKKyAgICBkZWYgdGVzdF9yb3VuZF90cmlwXzEoc2VsZik6CisgICAgICAgIHNlbGYucm91bmRfdHJpcCgiIiIKKyAgICB2ZXJiYXRpbSB0ZXh0IGhlcmUKKyAgICBsYWggZGVlIGRhaAorIiIiKQorICAgIGRlZiB0ZXN0X3JvdW5kX3RyaXBfMihzZWxmKToKKyAgICAgICAgc2VsZi5yb3VuZF90cmlwKCIiIgorICAgIHZlcmJhdGltIHRleHQgaGVyZQorICAgIGxhaCBkZWUgZGFoCisvKltpbmVydF0KK2FiYworW2luZXJ0XSovCitkZWYKKy8qW2luZXJ0IGNoZWNrc3VtOiA3YjE4ZDAxN2Y4OWY2MWNmMTdkNDdmOTI3NDllYTY5MzBhM2YxZGViXSovCit4eXoKKyIiIikKKworICAgIGRlZiBfdGVzdF9jbGluaWMoc2VsZiwgaW5wdXQsIG91dHB1dCk6CisgICAgICAgIGxhbmd1YWdlID0gY2xpbmljLkNMYW5ndWFnZShOb25lKQorICAgICAgICBjID0gY2xpbmljLkNsaW5pYyhsYW5ndWFnZSkKKyAgICAgICAgYy5wYXJzZXJzWydpbmVydCddID0gSW5lcnRQYXJzZXIoYykKKyAgICAgICAgYy5wYXJzZXJzWydjb3B5J10gPSBDb3B5UGFyc2VyKGMpCisgICAgICAgIGNvbXB1dGVkID0gYy5wYXJzZShpbnB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXRwdXQsIGNvbXB1dGVkKQorCisgICAgZGVmIHRlc3RfY2xpbmljXzEoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfY2xpbmljKCIiIgorICAgIHZlcmJhdGltIHRleHQgaGVyZQorICAgIGxhaCBkZWUgZGFoCisvKltjb3B5IGlucHV0XQorZGVmCitbY29weSBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworYWJjCisvKltjb3B5IGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTAzY2ZkNzQzNjYxZjA3OTcgaW5wdXQ9N2IxOGQwMTdmODlmNjFjZl0qLworeHl6CisiIiIsICIiIgorICAgIHZlcmJhdGltIHRleHQgaGVyZQorICAgIGxhaCBkZWUgZGFoCisvKltjb3B5IGlucHV0XQorZGVmCitbY29weSBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworZGVmCisvKltjb3B5IGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTdiMThkMDE3Zjg5ZjYxY2YgaW5wdXQ9N2IxOGQwMTdmODlmNjFjZl0qLworeHl6CisiIiIpCisKKworY2xhc3MgQ2xpbmljUGFyc2VyVGVzdChUZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfdHJpdmlhbChzZWxmKToKKyAgICAgICAgcGFyc2VyID0gRFNMUGFyc2VyKEZha2VDbGluaWMoKSkKKyAgICAgICAgYmxvY2sgPSBjbGluaWMuQmxvY2soIm1vZHVsZSBvc1xub3MuYWNjZXNzIikKKyAgICAgICAgcGFyc2VyLnBhcnNlKGJsb2NrKQorICAgICAgICBtb2R1bGUsIGZ1bmN0aW9uID0gYmxvY2suc2lnbmF0dXJlcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJhY2Nlc3MiLCBmdW5jdGlvbi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJvcyIsIG1vZHVsZS5uYW1lKQorCisgICAgZGVmIHRlc3RfaWdub3JlX2xpbmUoc2VsZik6CisgICAgICAgIGJsb2NrID0gc2VsZi5wYXJzZSgiI1xubW9kdWxlIG9zXG5vcy5hY2Nlc3MiKQorICAgICAgICBtb2R1bGUsIGZ1bmN0aW9uID0gYmxvY2suc2lnbmF0dXJlcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJhY2Nlc3MiLCBmdW5jdGlvbi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJvcyIsIG1vZHVsZS5uYW1lKQorCisgICAgZGVmIHRlc3RfcGFyYW0oc2VsZik6CisgICAgICAgIGZ1bmN0aW9uID0gc2VsZi5wYXJzZV9mdW5jdGlvbigibW9kdWxlIG9zXG5vcy5hY2Nlc3NcbiAgIHBhdGg6IGludCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoImFjY2VzcyIsIGZ1bmN0aW9uLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgbGVuKGZ1bmN0aW9uLnBhcmFtZXRlcnMpKQorICAgICAgICBwID0gZnVuY3Rpb24ucGFyYW1ldGVyc1sncGF0aCddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3BhdGgnLCBwLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShwLmNvbnZlcnRlciwgY2xpbmljLmludF9jb252ZXJ0ZXIpCisKKyAgICBkZWYgdGVzdF9wYXJhbV9kZWZhdWx0KHNlbGYpOgorICAgICAgICBmdW5jdGlvbiA9IHNlbGYucGFyc2VfZnVuY3Rpb24oIm1vZHVsZSBvc1xub3MuYWNjZXNzXG4gICAgZm9sbG93X3N5bWxpbmtzOiBib29sID0gVHJ1ZSIpCisgICAgICAgIHAgPSBmdW5jdGlvbi5wYXJhbWV0ZXJzWydmb2xsb3dfc3ltbGlua3MnXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRydWUsIHAuZGVmYXVsdCkKKworICAgIGRlZiB0ZXN0X3BhcmFtX3dpdGhfY29udGludWF0aW9ucyhzZWxmKToKKyAgICAgICAgZnVuY3Rpb24gPSBzZWxmLnBhcnNlX2Z1bmN0aW9uKCJtb2R1bGUgb3Ncbm9zLmFjY2Vzc1xuICAgIGZvbGxvd19zeW1saW5rczogXFxcbiAgIGJvb2wgXFxcbiAgID1cXFxuICAgIFRydWUiKQorICAgICAgICBwID0gZnVuY3Rpb24ucGFyYW1ldGVyc1snZm9sbG93X3N5bWxpbmtzJ10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUcnVlLCBwLmRlZmF1bHQpCisKKyAgICBkZWYgdGVzdF9wYXJhbV9kZWZhdWx0X2V4cHJlc3Npb24oc2VsZik6CisgICAgICAgIGZ1bmN0aW9uID0gc2VsZi5wYXJzZV9mdW5jdGlvbigibW9kdWxlIG9zXG5vcy5hY2Nlc3NcbiAgICBmb2xsb3dfc3ltbGlua3M6IGludChjX2RlZmF1bHQ9J01BWFNJWkUnKSA9IHN5cy5tYXhzaXplIikKKyAgICAgICAgcCA9IGZ1bmN0aW9uLnBhcmFtZXRlcnNbJ2ZvbGxvd19zeW1saW5rcyddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3lzLm1heHNpemUsIHAuZGVmYXVsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiTUFYU0laRSIsIHAuY29udmVydGVyLmNfZGVmYXVsdCkKKworICAgICAgICBzID0gc2VsZi5wYXJzZV9mdW5jdGlvbl9zaG91bGRfZmFpbCgibW9kdWxlIG9zXG5vcy5hY2Nlc3NcbiAgICBmb2xsb3dfc3ltbGlua3M6IGludCA9IHN5cy5tYXhzaXplIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCAiRXJyb3Igb24gbGluZSAwOlxuV2hlbiB5b3Ugc3BlY2lmeSBhIG5hbWVkIGNvbnN0YW50ICgnc3lzLm1heHNpemUnKSBhcyB5b3VyIGRlZmF1bHQgdmFsdWUsXG55b3UgTVVTVCBzcGVjaWZ5IGEgdmFsaWQgY19kZWZhdWx0LlxuIikKKworICAgIGRlZiB0ZXN0X3BhcmFtX25vX2RvY3N0cmluZyhzZWxmKToKKyAgICAgICAgZnVuY3Rpb24gPSBzZWxmLnBhcnNlX2Z1bmN0aW9uKCIiIgorbW9kdWxlIG9zCitvcy5hY2Nlc3MKKyAgICBmb2xsb3dfc3ltbGlua3M6IGJvb2wgPSBUcnVlCisgICAgc29tZXRoaW5nX2Vsc2U6IHN0ciA9ICcnIiIiKQorICAgICAgICBwID0gZnVuY3Rpb24ucGFyYW1ldGVyc1snZm9sbG93X3N5bWxpbmtzJ10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgzLCBsZW4oZnVuY3Rpb24ucGFyYW1ldGVycykpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmdW5jdGlvbi5wYXJhbWV0ZXJzWydzb21ldGhpbmdfZWxzZSddLmNvbnZlcnRlciwgY2xpbmljLnN0cl9jb252ZXJ0ZXIpCisKKyAgICBkZWYgdGVzdF9wYXJhbV9kZWZhdWx0X3BhcmFtZXRlcnNfb3V0X29mX29yZGVyKHNlbGYpOgorICAgICAgICBzID0gc2VsZi5wYXJzZV9mdW5jdGlvbl9zaG91bGRfZmFpbCgiIiIKK21vZHVsZSBvcworb3MuYWNjZXNzCisgICAgZm9sbG93X3N5bWxpbmtzOiBib29sID0gVHJ1ZQorICAgIHNvbWV0aGluZ19lbHNlOiBzdHIiIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgIiIiRXJyb3Igb24gbGluZSAwOgorQ2FuJ3QgaGF2ZSBhIHBhcmFtZXRlciB3aXRob3V0IGEgZGVmYXVsdCAoJ3NvbWV0aGluZ19lbHNlJykKK2FmdGVyIGEgcGFyYW1ldGVyIHdpdGggYSBkZWZhdWx0IQorIiIiKQorCisgICAgZGVmIGRpc2FibGVkX3Rlc3RfY29udmVydGVyX2FyZ3VtZW50cyhzZWxmKToKKyAgICAgICAgZnVuY3Rpb24gPSBzZWxmLnBhcnNlX2Z1bmN0aW9uKCJtb2R1bGUgb3Ncbm9zLmFjY2Vzc1xuICAgIHBhdGg6IHBhdGhfdChhbGxvd19mZD0xKSIpCisgICAgICAgIHAgPSBmdW5jdGlvbi5wYXJhbWV0ZXJzWydwYXRoJ10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBwLmNvbnZlcnRlci5hcmdzWydhbGxvd19mZCddKQorCisgICAgZGVmIHRlc3RfZnVuY3Rpb25fZG9jc3RyaW5nKHNlbGYpOgorICAgICAgICBmdW5jdGlvbiA9IHNlbGYucGFyc2VfZnVuY3Rpb24oIiIiCittb2R1bGUgb3MKK29zLnN0YXQgYXMgb3Nfc3RhdF9mbgorCisgICBwYXRoOiBzdHIKKyAgICAgICBQYXRoIHRvIGJlIGV4YW1pbmVkCisKK1BlcmZvcm0gYSBzdGF0IHN5c3RlbSBjYWxsIG9uIHRoZSBnaXZlbiBwYXRoLiIiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiIiIKK3N0YXQoJG1vZHVsZSwgLywgcGF0aCkKKy0tCisKK1BlcmZvcm0gYSBzdGF0IHN5c3RlbSBjYWxsIG9uIHRoZSBnaXZlbiBwYXRoLgorCisgIHBhdGgKKyAgICBQYXRoIHRvIGJlIGV4YW1pbmVkCisiIiIuc3RyaXAoKSwgZnVuY3Rpb24uZG9jc3RyaW5nKQorCisgICAgZGVmIHRlc3RfZXhwbGljaXRfcGFyYW1ldGVyc19pbl9kb2NzdHJpbmcoc2VsZik6CisgICAgICAgIGZ1bmN0aW9uID0gc2VsZi5wYXJzZV9mdW5jdGlvbigiIiIKK21vZHVsZSBmb28KK2Zvby5iYXIKKyAgeDogaW50CisgICAgIERvY3VtZW50YXRpb24gZm9yIHguCisgIHk6IGludAorCitUaGlzIGlzIHRoZSBkb2N1bWVudGF0aW9uIGZvciBmb28uCisKK09rYXksIHdlJ3JlIGRvbmUgaGVyZS4KKyIiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiIiIKK2JhcigkbW9kdWxlLCAvLCB4LCB5KQorLS0KKworVGhpcyBpcyB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgZm9vLgorCisgIHgKKyAgICBEb2N1bWVudGF0aW9uIGZvciB4LgorCitPa2F5LCB3ZSdyZSBkb25lIGhlcmUuCisiIiIuc3RyaXAoKSwgZnVuY3Rpb24uZG9jc3RyaW5nKQorCisgICAgZGVmIHRlc3RfcGFyc2VyX3JlZ3Jlc3Npb25fc3BlY2lhbF9jaGFyYWN0ZXJfaW5fcGFyYW1ldGVyX2NvbHVtbl9vZl9kb2NzdHJpbmdfZmlyc3RfbGluZShzZWxmKToKKyAgICAgICAgZnVuY3Rpb24gPSBzZWxmLnBhcnNlX2Z1bmN0aW9uKCIiIgorbW9kdWxlIG9zCitvcy5zdGF0CisgICAgcGF0aDogc3RyCitUaGlzL3VzZWQgdG8gYnJlYWsgQ2xpbmljIQorIiIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJzdGF0KCRtb2R1bGUsIC8sIHBhdGgpXG4tLVxuXG5UaGlzL3VzZWQgdG8gYnJlYWsgQ2xpbmljISIsIGZ1bmN0aW9uLmRvY3N0cmluZykKKworICAgIGRlZiB0ZXN0X2NfbmFtZShzZWxmKToKKyAgICAgICAgZnVuY3Rpb24gPSBzZWxmLnBhcnNlX2Z1bmN0aW9uKCJtb2R1bGUgb3Ncbm9zLnN0YXQgYXMgb3Nfc3RhdF9mbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIm9zX3N0YXRfZm4iLCBmdW5jdGlvbi5jX2Jhc2VuYW1lKQorCisgICAgZGVmIHRlc3RfcmV0dXJuX2NvbnZlcnRlcihzZWxmKToKKyAgICAgICAgZnVuY3Rpb24gPSBzZWxmLnBhcnNlX2Z1bmN0aW9uKCJtb2R1bGUgb3Ncbm9zLnN0YXQgLT4gaW50IikKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGZ1bmN0aW9uLnJldHVybl9jb252ZXJ0ZXIsIGNsaW5pYy5pbnRfcmV0dXJuX2NvbnZlcnRlcikKKworICAgIGRlZiB0ZXN0X3N0YXIoc2VsZik6CisgICAgICAgIGZ1bmN0aW9uID0gc2VsZi5wYXJzZV9mdW5jdGlvbigibW9kdWxlIG9zXG5vcy5hY2Nlc3NcbiAgICAqXG4gICAgZm9sbG93X3N5bWxpbmtzOiBib29sID0gVHJ1ZSIpCisgICAgICAgIHAgPSBmdW5jdGlvbi5wYXJhbWV0ZXJzWydmb2xsb3dfc3ltbGlua3MnXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluc3BlY3QuUGFyYW1ldGVyLktFWVdPUkRfT05MWSwgcC5raW5kKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHAuZ3JvdXApCisKKyAgICBkZWYgdGVzdF9ncm91cChzZWxmKToKKyAgICAgICAgZnVuY3Rpb24gPSBzZWxmLnBhcnNlX2Z1bmN0aW9uKCJtb2R1bGUgd2luZG93XG53aW5kb3cuYm9yZGVyXG4gW1xuIGxzIDogaW50XG4gXVxuIC9cbiIpCisgICAgICAgIHAgPSBmdW5jdGlvbi5wYXJhbWV0ZXJzWydscyddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgcC5ncm91cCkKKworICAgIGRlZiB0ZXN0X2xlZnRfZ3JvdXAoc2VsZik6CisgICAgICAgIGZ1bmN0aW9uID0gc2VsZi5wYXJzZV9mdW5jdGlvbigiIiIKK21vZHVsZSBjdXJzZXMKK2N1cnNlcy5hZGRjaAorICAgWworICAgeTogaW50CisgICAgIFktY29vcmRpbmF0ZS4KKyAgIHg6IGludAorICAgICBYLWNvb3JkaW5hdGUuCisgICBdCisgICBjaDogY2hhcgorICAgICBDaGFyYWN0ZXIgdG8gYWRkLgorICAgWworICAgYXR0cjogbG9uZworICAgICBBdHRyaWJ1dGVzIGZvciB0aGUgY2hhcmFjdGVyLgorICAgXQorICAgLworIiIiKQorICAgICAgICBmb3IgbmFtZSwgZ3JvdXAgaW4gKAorICAgICAgICAgICAgKCd5JywgLTEpLCAoJ3gnLCAtMSksCisgICAgICAgICAgICAoJ2NoJywgMCksCisgICAgICAgICAgICAoJ2F0dHInLCAxKSwKKyAgICAgICAgICAgICk6CisgICAgICAgICAgICBwID0gZnVuY3Rpb24ucGFyYW1ldGVyc1tuYW1lXQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmdyb3VwLCBncm91cCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5raW5kLCBpbnNwZWN0LlBhcmFtZXRlci5QT1NJVElPTkFMX09OTFkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnVuY3Rpb24uZG9jc3RyaW5nLnN0cmlwKCksICIiIgorYWRkY2goW3ksIHgsXSBjaCwgW2F0dHJdKQorCisKKyAgeQorICAgIFktY29vcmRpbmF0ZS4KKyAgeAorICAgIFgtY29vcmRpbmF0ZS4KKyAgY2gKKyAgICBDaGFyYWN0ZXIgdG8gYWRkLgorICBhdHRyCisgICAgQXR0cmlidXRlcyBmb3IgdGhlIGNoYXJhY3Rlci4KKyAgICAgICAgICAgICIiIi5zdHJpcCgpKQorCisgICAgZGVmIHRlc3RfbmVzdGVkX2dyb3VwcyhzZWxmKToKKyAgICAgICAgZnVuY3Rpb24gPSBzZWxmLnBhcnNlX2Z1bmN0aW9uKCIiIgorbW9kdWxlIGN1cnNlcworY3Vyc2VzLmltYWdpbmFyeQorICAgWworICAgWworICAgeTE6IGludAorICAgICBZLWNvb3JkaW5hdGUuCisgICB5MjogaW50CisgICAgIFktY29vcmRpbmF0ZS4KKyAgIF0KKyAgIHgxOiBpbnQKKyAgICAgWC1jb29yZGluYXRlLgorICAgeDI6IGludAorICAgICBYLWNvb3JkaW5hdGUuCisgICBdCisgICBjaDogY2hhcgorICAgICBDaGFyYWN0ZXIgdG8gYWRkLgorICAgWworICAgYXR0cjE6IGxvbmcKKyAgICAgQXR0cmlidXRlcyBmb3IgdGhlIGNoYXJhY3Rlci4KKyAgIGF0dHIyOiBsb25nCisgICAgIEF0dHJpYnV0ZXMgZm9yIHRoZSBjaGFyYWN0ZXIuCisgICBhdHRyMzogbG9uZworICAgICBBdHRyaWJ1dGVzIGZvciB0aGUgY2hhcmFjdGVyLgorICAgWworICAgYXR0cjQ6IGxvbmcKKyAgICAgQXR0cmlidXRlcyBmb3IgdGhlIGNoYXJhY3Rlci4KKyAgIGF0dHI1OiBsb25nCisgICAgIEF0dHJpYnV0ZXMgZm9yIHRoZSBjaGFyYWN0ZXIuCisgICBhdHRyNjogbG9uZworICAgICBBdHRyaWJ1dGVzIGZvciB0aGUgY2hhcmFjdGVyLgorICAgXQorICAgXQorICAgLworIiIiKQorICAgICAgICBmb3IgbmFtZSwgZ3JvdXAgaW4gKAorICAgICAgICAgICAgKCd5MScsIC0yKSwgKCd5MicsIC0yKSwKKyAgICAgICAgICAgICgneDEnLCAtMSksICgneDInLCAtMSksCisgICAgICAgICAgICAoJ2NoJywgMCksCisgICAgICAgICAgICAoJ2F0dHIxJywgMSksICgnYXR0cjInLCAxKSwgKCdhdHRyMycsIDEpLAorICAgICAgICAgICAgKCdhdHRyNCcsIDIpLCAoJ2F0dHI1JywgMiksICgnYXR0cjYnLCAyKSwKKyAgICAgICAgICAgICk6CisgICAgICAgICAgICBwID0gZnVuY3Rpb24ucGFyYW1ldGVyc1tuYW1lXQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmdyb3VwLCBncm91cCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5raW5kLCBpbnNwZWN0LlBhcmFtZXRlci5QT1NJVElPTkFMX09OTFkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmdW5jdGlvbi5kb2NzdHJpbmcuc3RyaXAoKSwgIiIiCitpbWFnaW5hcnkoW1t5MSwgeTIsXSB4MSwgeDIsXSBjaCwgW2F0dHIxLCBhdHRyMiwgYXR0cjMsIFthdHRyNCwgYXR0cjUsCisgICAgICAgICAgYXR0cjZdXSkKKworCisgIHkxCisgICAgWS1jb29yZGluYXRlLgorICB5MgorICAgIFktY29vcmRpbmF0ZS4KKyAgeDEKKyAgICBYLWNvb3JkaW5hdGUuCisgIHgyCisgICAgWC1jb29yZGluYXRlLgorICBjaAorICAgIENoYXJhY3RlciB0byBhZGQuCisgIGF0dHIxCisgICAgQXR0cmlidXRlcyBmb3IgdGhlIGNoYXJhY3Rlci4KKyAgYXR0cjIKKyAgICBBdHRyaWJ1dGVzIGZvciB0aGUgY2hhcmFjdGVyLgorICBhdHRyMworICAgIEF0dHJpYnV0ZXMgZm9yIHRoZSBjaGFyYWN0ZXIuCisgIGF0dHI0CisgICAgQXR0cmlidXRlcyBmb3IgdGhlIGNoYXJhY3Rlci4KKyAgYXR0cjUKKyAgICBBdHRyaWJ1dGVzIGZvciB0aGUgY2hhcmFjdGVyLgorICBhdHRyNgorICAgIEF0dHJpYnV0ZXMgZm9yIHRoZSBjaGFyYWN0ZXIuCisgICAgICAgICAgICAgICAgIiIiLnN0cmlwKCkpCisKKyAgICBkZWYgcGFyc2VfZnVuY3Rpb25fc2hvdWxkX2ZhaWwoc2VsZiwgcyk6CisgICAgICAgIHdpdGggc3VwcG9ydC5jYXB0dXJlZF9zdGRvdXQoKSBhcyBzdGRvdXQ6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFN5c3RlbUV4aXQpOgorICAgICAgICAgICAgICAgIHNlbGYucGFyc2VfZnVuY3Rpb24ocykKKyAgICAgICAgcmV0dXJuIHN0ZG91dC5nZXR2YWx1ZSgpCisKKyAgICBkZWYgdGVzdF9kaXNhbGxvd2VkX2dyb3VwaW5nX190d29fdG9wX2dyb3Vwc19vbl9sZWZ0KHNlbGYpOgorICAgICAgICBzID0gc2VsZi5wYXJzZV9mdW5jdGlvbl9zaG91bGRfZmFpbCgiIiIKK21vZHVsZSBmb28KK2Zvby50d29fdG9wX2dyb3Vwc19vbl9sZWZ0CisgICAgWworICAgIGdyb3VwMSA6IGludAorICAgIF0KKyAgICBbCisgICAgZ3JvdXAyIDogaW50CisgICAgXQorICAgIHBhcmFtOiBpbnQKKyAgICAgICAgICAgICIiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLAorICAgICAgICAgICAgKCdFcnJvciBvbiBsaW5lIDA6XG4nCisgICAgICAgICAgICAnRnVuY3Rpb24gdHdvX3RvcF9ncm91cHNfb25fbGVmdCBoYXMgYW4gdW5zdXBwb3J0ZWQgZ3JvdXAgY29uZmlndXJhdGlvbi4gKFVuZXhwZWN0ZWQgc3RhdGUgMi5iKVxuJykpCisKKyAgICBkZWYgdGVzdF9kaXNhbGxvd2VkX2dyb3VwaW5nX190d29fdG9wX2dyb3Vwc19vbl9yaWdodChzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZV9mdW5jdGlvbl9zaG91bGRfZmFpbCgiIiIKK21vZHVsZSBmb28KK2Zvby50d29fdG9wX2dyb3Vwc19vbl9yaWdodAorICAgIHBhcmFtOiBpbnQKKyAgICBbCisgICAgZ3JvdXAxIDogaW50CisgICAgXQorICAgIFsKKyAgICBncm91cDIgOiBpbnQKKyAgICBdCisgICAgICAgICAgICAiIiIpCisKKyAgICBkZWYgdGVzdF9kaXNhbGxvd2VkX2dyb3VwaW5nX19wYXJhbWV0ZXJfYWZ0ZXJfZ3JvdXBfb25fcmlnaHQoc2VsZik6CisgICAgICAgIHNlbGYucGFyc2VfZnVuY3Rpb25fc2hvdWxkX2ZhaWwoIiIiCittb2R1bGUgZm9vCitmb28ucGFyYW1ldGVyX2FmdGVyX2dyb3VwX29uX3JpZ2h0CisgICAgcGFyYW06IGludAorICAgIFsKKyAgICBbCisgICAgZ3JvdXAxIDogaW50CisgICAgXQorICAgIGdyb3VwMiA6IGludAorICAgIF0KKyAgICAgICAgICAgICIiIikKKworICAgIGRlZiB0ZXN0X2Rpc2FsbG93ZWRfZ3JvdXBpbmdfX2dyb3VwX2FmdGVyX3BhcmFtZXRlcl9vbl9sZWZ0KHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlX2Z1bmN0aW9uX3Nob3VsZF9mYWlsKCIiIgorbW9kdWxlIGZvbworZm9vLmdyb3VwX2FmdGVyX3BhcmFtZXRlcl9vbl9sZWZ0CisgICAgWworICAgIGdyb3VwMiA6IGludAorICAgIFsKKyAgICBncm91cDEgOiBpbnQKKyAgICBdCisgICAgXQorICAgIHBhcmFtOiBpbnQKKyAgICAgICAgICAgICIiIikKKworICAgIGRlZiB0ZXN0X2Rpc2FsbG93ZWRfZ3JvdXBpbmdfX2VtcHR5X2dyb3VwX29uX2xlZnQoc2VsZik6CisgICAgICAgIHNlbGYucGFyc2VfZnVuY3Rpb25fc2hvdWxkX2ZhaWwoIiIiCittb2R1bGUgZm9vCitmb28uZW1wdHlfZ3JvdXAKKyAgICBbCisgICAgWworICAgIF0KKyAgICBncm91cDIgOiBpbnQKKyAgICBdCisgICAgcGFyYW06IGludAorICAgICAgICAgICAgIiIiKQorCisgICAgZGVmIHRlc3RfZGlzYWxsb3dlZF9ncm91cGluZ19fZW1wdHlfZ3JvdXBfb25fcmlnaHQoc2VsZik6CisgICAgICAgIHNlbGYucGFyc2VfZnVuY3Rpb25fc2hvdWxkX2ZhaWwoIiIiCittb2R1bGUgZm9vCitmb28uZW1wdHlfZ3JvdXAKKyAgICBwYXJhbTogaW50CisgICAgWworICAgIFsKKyAgICBdCisgICAgZ3JvdXAyIDogaW50CisgICAgXQorICAgICAgICAgICAgIiIiKQorCisgICAgZGVmIHRlc3Rfbm9fcGFyYW1ldGVycyhzZWxmKToKKyAgICAgICAgZnVuY3Rpb24gPSBzZWxmLnBhcnNlX2Z1bmN0aW9uKCIiIgorbW9kdWxlIGZvbworZm9vLmJhcgorCitEb2NzdHJpbmcKKworIiIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJiYXIoJG1vZHVsZSwgLylcbi0tXG5cbkRvY3N0cmluZyIsIGZ1bmN0aW9uLmRvY3N0cmluZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4oZnVuY3Rpb24ucGFyYW1ldGVycykpICMgc2VsZiEKKworICAgIGRlZiB0ZXN0X2luaXRfd2l0aF9ub19wYXJhbWV0ZXJzKHNlbGYpOgorICAgICAgICBmdW5jdGlvbiA9IHNlbGYucGFyc2VfZnVuY3Rpb24oIiIiCittb2R1bGUgZm9vCitjbGFzcyBmb28uQmFyICJ1bnVzZWQiICJub3RuZWVkZWQiCitmb28uQmFyLl9faW5pdF9fCisKK0RvY3N0cmluZworCisiIiIsIHNpZ25hdHVyZXNfaW5fYmxvY2s9MywgZnVuY3Rpb25faW5kZXg9MikKKyAgICAgICAgIyBzZWxmIGlzIG5vdCBpbiB0aGUgc2lnbmF0dXJlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIkJhcigpXG4tLVxuXG5Eb2NzdHJpbmciLCBmdW5jdGlvbi5kb2NzdHJpbmcpCisgICAgICAgICMgYnV0IGl0ICppcyogYSBwYXJhbWV0ZXIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4oZnVuY3Rpb24ucGFyYW1ldGVycykpCisKKyAgICBkZWYgdGVzdF9pbGxlZ2FsX21vZHVsZV9saW5lKHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlX2Z1bmN0aW9uX3Nob3VsZF9mYWlsKCIiIgorbW9kdWxlIGZvbworZm9vLmJhciA9PiBpbnQKKyAgICAvCisiIiIpCisKKyAgICBkZWYgdGVzdF9pbGxlZ2FsX2NfYmFzZW5hbWUoc2VsZik6CisgICAgICAgIHNlbGYucGFyc2VfZnVuY3Rpb25fc2hvdWxkX2ZhaWwoIiIiCittb2R1bGUgZm9vCitmb28uYmFyIGFzIDkzNQorICAgIC8KKyIiIikKKworICAgIGRlZiB0ZXN0X3NpbmdsZV9zdGFyKHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlX2Z1bmN0aW9uX3Nob3VsZF9mYWlsKCIiIgorbW9kdWxlIGZvbworZm9vLmJhcgorICAgICoKKyAgICAqCisiIiIpCisKKyAgICBkZWYgdGVzdF9wYXJhbWV0ZXJzX3JlcXVpcmVkX2FmdGVyX3N0YXJfd2l0aG91dF9pbml0aWFsX3BhcmFtZXRlcnNfb3JfZG9jc3RyaW5nKHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlX2Z1bmN0aW9uX3Nob3VsZF9mYWlsKCIiIgorbW9kdWxlIGZvbworZm9vLmJhcgorICAgICoKKyIiIikKKworICAgIGRlZiB0ZXN0X3BhcmFtZXRlcnNfcmVxdWlyZWRfYWZ0ZXJfc3Rhcl93aXRob3V0X2luaXRpYWxfcGFyYW1ldGVyc193aXRoX2RvY3N0cmluZyhzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZV9mdW5jdGlvbl9zaG91bGRfZmFpbCgiIiIKK21vZHVsZSBmb28KK2Zvby5iYXIKKyAgICAqCitEb2NzdHJpbmcgaGVyZS4KKyIiIikKKworICAgIGRlZiB0ZXN0X3BhcmFtZXRlcnNfcmVxdWlyZWRfYWZ0ZXJfc3Rhcl93aXRoX2luaXRpYWxfcGFyYW1ldGVyc193aXRob3V0X2RvY3N0cmluZyhzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZV9mdW5jdGlvbl9zaG91bGRfZmFpbCgiIiIKK21vZHVsZSBmb28KK2Zvby5iYXIKKyAgICB0aGlzOiBpbnQKKyAgICAqCisiIiIpCisKKyAgICBkZWYgdGVzdF9wYXJhbWV0ZXJzX3JlcXVpcmVkX2FmdGVyX3N0YXJfd2l0aF9pbml0aWFsX3BhcmFtZXRlcnNfYW5kX2RvY3N0cmluZyhzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZV9mdW5jdGlvbl9zaG91bGRfZmFpbCgiIiIKK21vZHVsZSBmb28KK2Zvby5iYXIKKyAgICB0aGlzOiBpbnQKKyAgICAqCitEb2NzdHJpbmcuCisiIiIpCisKKyAgICBkZWYgdGVzdF9zaW5nbGVfc2xhc2goc2VsZik6CisgICAgICAgIHNlbGYucGFyc2VfZnVuY3Rpb25fc2hvdWxkX2ZhaWwoIiIiCittb2R1bGUgZm9vCitmb28uYmFyCisgICAgLworICAgIC8KKyIiIikKKworICAgIGRlZiB0ZXN0X21peF9zdGFyX2FuZF9zbGFzaChzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZV9mdW5jdGlvbl9zaG91bGRfZmFpbCgiIiIKK21vZHVsZSBmb28KK2Zvby5iYXIKKyAgIHg6IGludAorICAgeTogaW50CisgICAqCisgICB6OiBpbnQKKyAgIC8KKyIiIikKKworICAgIGRlZiB0ZXN0X3BhcmFtZXRlcnNfbm90X3Blcm1pdHRlZF9hZnRlcl9zbGFzaF9mb3Jfbm93KHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlX2Z1bmN0aW9uX3Nob3VsZF9mYWlsKCIiIgorbW9kdWxlIGZvbworZm9vLmJhcgorICAgIC8KKyAgICB4OiBpbnQKKyIiIikKKworICAgIGRlZiB0ZXN0X2Z1bmN0aW9uX25vdF9hdF9jb2x1bW5fMChzZWxmKToKKyAgICAgICAgZnVuY3Rpb24gPSBzZWxmLnBhcnNlX2Z1bmN0aW9uKCIiIgorICBtb2R1bGUgZm9vCisgIGZvby5iYXIKKyAgICB4OiBpbnQKKyAgICAgIE5lc3RlZCBkb2NzdHJpbmcgaGVyZSwgZ29ldGguCisgICAgKgorICAgIHk6IHN0cgorICBOb3QgYXQgY29sdW1uIDAhCisiIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIiIiCitiYXIoJG1vZHVsZSwgLywgeCwgKiwgeSkKKy0tCisKK05vdCBhdCBjb2x1bW4gMCEKKworICB4CisgICAgTmVzdGVkIGRvY3N0cmluZyBoZXJlLCBnb2V0aC4KKyIiIi5zdHJpcCgpLCBmdW5jdGlvbi5kb2NzdHJpbmcpCisKKyAgICBkZWYgdGVzdF9wYXJzZXJfcmVncmVzc2lvbl9zcGVjaWFsX2NoYXJhY3Rlcl9pbl9wYXJhbWV0ZXJfY29sdW1uX29mX2RvY3N0cmluZ19maXJzdF9saW5lKHNlbGYpOgorICAgICAgICBmdW5jdGlvbiA9IHNlbGYucGFyc2VfZnVuY3Rpb24oIiIiCittb2R1bGUgb3MKK29zLnN0YXQKKyAgICBwYXRoOiBzdHIKK1RoaXMvdXNlZCB0byBicmVhayBDbGluaWMhCisiIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoInN0YXQoJG1vZHVsZSwgLywgcGF0aClcbi0tXG5cblRoaXMvdXNlZCB0byBicmVhayBDbGluaWMhIiwgZnVuY3Rpb24uZG9jc3RyaW5nKQorCisgICAgZGVmIHRlc3RfZGlyZWN0aXZlKHNlbGYpOgorICAgICAgICBjID0gRmFrZUNsaW5pYygpCisgICAgICAgIHBhcnNlciA9IERTTFBhcnNlcihjKQorICAgICAgICBwYXJzZXIuZmxhZyA9IEZhbHNlCisgICAgICAgIHBhcnNlci5kaXJlY3RpdmVzWydzZXRmbGFnJ10gPSBsYW1iZGEgOiBzZXRhdHRyKHBhcnNlciwgJ2ZsYWcnLCBUcnVlKQorICAgICAgICBibG9jayA9IGNsaW5pYy5CbG9jaygic2V0ZmxhZyIpCisgICAgICAgIHBhcnNlci5wYXJzZShibG9jaykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBhcnNlci5mbGFnKQorCisgICAgZGVmIHRlc3RfbGVnYWN5X2NvbnZlcnRlcnMoc2VsZik6CisgICAgICAgIGJsb2NrID0gc2VsZi5wYXJzZSgnbW9kdWxlIG9zXG5vcy5hY2Nlc3NcbiAgIHBhdGg6ICJzIicpCisgICAgICAgIG1vZHVsZSwgZnVuY3Rpb24gPSBibG9jay5zaWduYXR1cmVzCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSgoZnVuY3Rpb24ucGFyYW1ldGVyc1sncGF0aCddKS5jb252ZXJ0ZXIsIGNsaW5pYy5zdHJfY29udmVydGVyKQorCisgICAgZGVmIHBhcnNlKHNlbGYsIHRleHQpOgorICAgICAgICBjID0gRmFrZUNsaW5pYygpCisgICAgICAgIHBhcnNlciA9IERTTFBhcnNlcihjKQorICAgICAgICBibG9jayA9IGNsaW5pYy5CbG9jayh0ZXh0KQorICAgICAgICBwYXJzZXIucGFyc2UoYmxvY2spCisgICAgICAgIHJldHVybiBibG9jaworCisgICAgZGVmIHBhcnNlX2Z1bmN0aW9uKHNlbGYsIHRleHQsIHNpZ25hdHVyZXNfaW5fYmxvY2s9MiwgZnVuY3Rpb25faW5kZXg9MSk6CisgICAgICAgIGJsb2NrID0gc2VsZi5wYXJzZSh0ZXh0KQorICAgICAgICBzID0gYmxvY2suc2lnbmF0dXJlcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzKSwgc2lnbmF0dXJlc19pbl9ibG9jaykKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2Uoc1swXSwgY2xpbmljLk1vZHVsZSkKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2Uoc1tmdW5jdGlvbl9pbmRleF0sIGNsaW5pYy5GdW5jdGlvbikKKyAgICAgICAgcmV0dXJuIHNbZnVuY3Rpb25faW5kZXhdCisKKyAgICBkZWYgdGVzdF9zY2FmZm9sZGluZyhzZWxmKToKKyAgICAgICAgIyB0ZXN0IHJlcHIgb24gc3BlY2lhbCB2YWx1ZXMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGNsaW5pYy51bnNwZWNpZmllZCksICc8VW5zcGVjaWZpZWQ+JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGNsaW5pYy5OVUxMKSwgJzxOdWxsPicpCisKKyAgICAgICAgIyB0ZXN0IHRoYXQgZmFpbCBmYWlscworICAgICAgICB3aXRoIHN1cHBvcnQuY2FwdHVyZWRfc3Rkb3V0KCkgYXMgc3Rkb3V0OgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhTeXN0ZW1FeGl0KToKKyAgICAgICAgICAgICAgICBjbGluaWMuZmFpbCgnVGhlIGlnbG9vcyBhcmUgbWVsdGluZyEnLCBmaWxlbmFtZT0nY2xvd24udHh0JywgbGluZV9udW1iZXI9NjkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LmdldHZhbHVlKCksICdFcnJvciBpbiBmaWxlICJjbG93bi50eHQiIG9uIGxpbmUgNjk6XG5UaGUgaWdsb29zIGFyZSBtZWx0aW5nIVxuJykKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvVG9vbHMvY2xpbmljL2NwcC5weSBiL1Rvb2xzL2NsaW5pYy9jcHAucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTA5OTU5MAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL2NsaW5pYy9jcHAucHkKQEAgLTAsMCArMSwxOTEgQEAKK2ltcG9ydCByZQoraW1wb3J0IHN5cworCitkZWYgbmVnYXRlKGNvbmRpdGlvbik6CisgICAgIiIiCisgICAgUmV0dXJucyBhIENQUCBjb25kaXRpb25hbCB0aGF0IGlzIHRoZSBvcHBvc2l0ZSBvZiB0aGUgY29uZGl0aW9uYWwgcGFzc2VkIGluLgorICAgICIiIgorICAgIGlmIGNvbmRpdGlvbi5zdGFydHN3aXRoKCchJyk6CisgICAgICAgIHJldHVybiBjb25kaXRpb25bMTpdCisgICAgcmV0dXJuICIhIiArIGNvbmRpdGlvbgorCitjbGFzcyBNb25pdG9yOgorICAgICIiIgorICAgIEEgc2ltcGxlIEMgcHJlcHJvY2Vzc29yIHRoYXQgc2NhbnMgQyBzb3VyY2UgYW5kIGNvbXB1dGVzLCBsaW5lIGJ5IGxpbmUsCisgICAgd2hhdCB0aGUgY3VycmVudCBDIHByZXByb2Nlc3NvciAjaWYgc3RhdGUgaXMuCisKKyAgICBEb2Vzbid0IGhhbmRsZSBldmVyeXRoaW5nLS1mb3IgZXhhbXBsZSwgaWYgeW91IGhhdmUgLyogaW5zaWRlIGEgQyBzdHJpbmcsCisgICAgd2l0aG91dCBhIG1hdGNoaW5nICovIChhbHNvIGluc2lkZSBhIEMgc3RyaW5nKSwgb3Igd2l0aCBhICovIGluc2lkZSBhIEMKKyAgICBzdHJpbmcgYnV0IG9uIGFub3RoZXIgbGluZSBhbmQgd2l0aCBwcmVwcm9jZXNzb3IgbWFjcm9zIGluIGJldHdlZW4uLi4KKyAgICB0aGUgcGFyc2VyIHdpbGwgZ2V0IGxvc3QuCisKKyAgICBBbnl3YXkgdGhpcyBpbXBsZW1lbnRhdGlvbiBzZWVtcyB0byB3b3JrIHdlbGwgZW5vdWdoIGZvciB0aGUgQ1B5dGhvbiBzb3VyY2VzLgorICAgICIiIgorCisgICAgaXNfYV9zaW1wbGVfZGVmaW5lZCA9IHJlLmNvbXBpbGUocideZGVmaW5lZFxzKlwoXHMqW0EtWmEtejAtOV9dK1xzKlwpJCcpLm1hdGNoCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZW5hbWU9Tm9uZSwgKiwgdmVyYm9zZT1GYWxzZSk6CisgICAgICAgIHNlbGYuc3RhY2sgPSBbXQorICAgICAgICBzZWxmLmluX2NvbW1lbnQgPSBGYWxzZQorICAgICAgICBzZWxmLmNvbnRpbnVhdGlvbiA9IE5vbmUKKyAgICAgICAgc2VsZi5saW5lX251bWJlciA9IDAKKyAgICAgICAgc2VsZi5maWxlbmFtZSA9IGZpbGVuYW1lCisgICAgICAgIHNlbGYudmVyYm9zZSA9IHZlcmJvc2UKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICcnLmpvaW4oKAorICAgICAgICAgICAgJzxNb25pdG9yICcsCisgICAgICAgICAgICBzdHIoaWQoc2VsZikpLAorICAgICAgICAgICAgIiBsaW5lPSIsIHN0cihzZWxmLmxpbmVfbnVtYmVyKSwKKyAgICAgICAgICAgICIgY29uZGl0aW9uPSIsIHJlcHIoc2VsZi5jb25kaXRpb24oKSksCisgICAgICAgICAgICAiPiIpKQorCisgICAgZGVmIHN0YXR1cyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHN0cihzZWxmLmxpbmVfbnVtYmVyKS5yanVzdCg0KSArICI6ICIgKyBzZWxmLmNvbmRpdGlvbigpCisKKyAgICBkZWYgY29uZGl0aW9uKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJucyB0aGUgY3VycmVudCBwcmVwcm9jZXNzb3Igc3RhdGUsIGFzIGEgc2luZ2xlICNpZiBjb25kaXRpb24uCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gIiAmJiAiLmpvaW4oY29uZGl0aW9uIGZvciB0b2tlbiwgY29uZGl0aW9uIGluIHNlbGYuc3RhY2spCisKKyAgICBkZWYgZmFpbChzZWxmLCAqYSk6CisgICAgICAgIGlmIHNlbGYuZmlsZW5hbWU6CisgICAgICAgICAgICBmaWxlbmFtZSA9ICIgIiArIHNlbGYuZmlsZW5hbWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZpbGVuYW1lID0gJycKKyAgICAgICAgcHJpbnQoIkVycm9yIGF0IiArIGZpbGVuYW1lLCAibGluZSIsIHNlbGYubGluZV9udW1iZXIsICI6IikKKyAgICAgICAgcHJpbnQoIiAgICIsICcgJy5qb2luKHN0cih4KSBmb3IgeCBpbiBhKSkKKyAgICAgICAgc3lzLmV4aXQoLTEpCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgIGlmIHNlbGYuc3RhY2s6CisgICAgICAgICAgICBzZWxmLmZhaWwoIkVuZGVkIGZpbGUgd2hpbGUgc3RpbGwgaW4gYSBwcmVwcm9jZXNzb3IgY29uZGl0aW9uYWwgYmxvY2shIikKKworICAgIGRlZiB3cml0ZShzZWxmLCBzKToKKyAgICAgICAgZm9yIGxpbmUgaW4gcy5zcGxpdCgiXG4iKToKKyAgICAgICAgICAgIHNlbGYud3JpdGVsaW5lKGxpbmUpCisKKyAgICBkZWYgd3JpdGVsaW5lKHNlbGYsIGxpbmUpOgorICAgICAgICBzZWxmLmxpbmVfbnVtYmVyICs9IDEKKyAgICAgICAgbGluZSA9IGxpbmUuc3RyaXAoKQorCisgICAgICAgIGRlZiBwb3Bfc3RhY2soKToKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLnN0YWNrOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiIyIgKyB0b2tlbiArICIgd2l0aG91dCBtYXRjaGluZyAjaWYgLyAjaWZkZWYgLyAjaWZuZGVmISIpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5zdGFjay5wb3AoKQorCisgICAgICAgIGlmIHNlbGYuY29udGludWF0aW9uOgorICAgICAgICAgICAgbGluZSA9IHNlbGYuY29udGludWF0aW9uICsgbGluZQorICAgICAgICAgICAgc2VsZi5jb250aW51YXRpb24gPSBOb25lCisKKyAgICAgICAgaWYgbm90IGxpbmU6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpZiBsaW5lLmVuZHN3aXRoKCdcXCcpOgorICAgICAgICAgICAgc2VsZi5jb250aW51YXRpb24gPSBsaW5lWzotMV0ucnN0cmlwKCkgKyAiICIKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICMgd2UgaGF2ZSB0byBpZ25vcmUgcHJlcHJvY2Vzc29yIGNvbW1hbmRzIGluc2lkZSBjb21tZW50cworICAgICAgICAjCisgICAgICAgICMgd2UgYWxzbyBoYXZlIHRvIGhhbmRsZSB0aGlzOgorICAgICAgICAjICAgICAvKiBzdGFydAorICAgICAgICAjICAgICAuLi4KKyAgICAgICAgIyAgICAgKi8gICAvKiAgICA8LS0gdHJpY2t5IQorICAgICAgICAjICAgICAuLi4KKyAgICAgICAgIyAgICAgKi8KKyAgICAgICAgIyBhbmQgdGhpczoKKyAgICAgICAgIyAgICAgLyogc3RhcnQKKyAgICAgICAgIyAgICAgLi4uCisgICAgICAgICMgICAgICovICAgLyogYWxzbyB0cmlja3khICovCisgICAgICAgIGlmIHNlbGYuaW5fY29tbWVudDoKKyAgICAgICAgICAgIGlmICcqLycgaW4gbGluZToKKyAgICAgICAgICAgICAgICAjIHNuaXAgb3V0IHRoZSBjb21tZW50IGFuZCBjb250aW51ZQorICAgICAgICAgICAgICAgICMKKyAgICAgICAgICAgICAgICAjIEdDQyBhbGxvd3MKKyAgICAgICAgICAgICAgICAjICAgIC8qIGNvbW1lbnQKKyAgICAgICAgICAgICAgICAjICAgICovICNpbmNsdWRlIDxzdGRpby5oPgorICAgICAgICAgICAgICAgICMgbWF5YmUgb3RoZXIgY29tcGlsZXJzIHRvbz8KKyAgICAgICAgICAgICAgICBfLCBfLCBsaW5lID0gbGluZS5wYXJ0aXRpb24oJyovJykKKyAgICAgICAgICAgICAgICBzZWxmLmluX2NvbW1lbnQgPSBGYWxzZQorCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBpZiAnLyonIGluIGxpbmU6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5pbl9jb21tZW50OgorICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIk5lc3RlZCBibG9jayBjb21tZW50ISIpCisKKyAgICAgICAgICAgICAgICBiZWZvcmUsIF8sIHJlbWFpbmRlciA9IGxpbmUucGFydGl0aW9uKCcvKicpCisgICAgICAgICAgICAgICAgY29tbWVudCwgY29tbWVudF9lbmRzLCBhZnRlciA9IHJlbWFpbmRlci5wYXJ0aXRpb24oJyovJykKKyAgICAgICAgICAgICAgICBpZiBjb21tZW50X2VuZHM6CisgICAgICAgICAgICAgICAgICAgICMgc25pcCBvdXQgdGhlIGNvbW1lbnQKKyAgICAgICAgICAgICAgICAgICAgbGluZSA9IGJlZm9yZS5yc3RyaXAoKSArICcgJyArIGFmdGVyLmxzdHJpcCgpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgIyBjb21tZW50IGNvbnRpbnVlcyB0byBlb2wKKyAgICAgICAgICAgICAgICBzZWxmLmluX2NvbW1lbnQgPSBUcnVlCisgICAgICAgICAgICAgICAgbGluZSA9IGJlZm9yZS5yc3RyaXAoKQorICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAjIHdlIGFjdHVhbGx5IGhhdmUgc29tZSAvLyBjb21tZW50cworICAgICAgICAjIChidXQgYmxvY2sgY29tbWVudHMgdGFrZSBwcmVjZWRlbmNlKQorICAgICAgICBiZWZvcmUsIGxpbmVfY29tbWVudCwgY29tbWVudCA9IGxpbmUucGFydGl0aW9uKCcvLycpCisgICAgICAgIGlmIGxpbmVfY29tbWVudDoKKyAgICAgICAgICAgIGxpbmUgPSBiZWZvcmUucnN0cmlwKCkKKworICAgICAgICBpZiBub3QgbGluZS5zdGFydHN3aXRoKCcjJyk6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBsaW5lID0gbGluZVsxOl0ubHN0cmlwKCkKKyAgICAgICAgYXNzZXJ0IGxpbmUKKworICAgICAgICBmaWVsZHMgPSBsaW5lLnNwbGl0KCkKKyAgICAgICAgdG9rZW4gPSBmaWVsZHNbMF0ubG93ZXIoKQorICAgICAgICBjb25kaXRpb24gPSAnICcuam9pbihmaWVsZHNbMTpdKS5zdHJpcCgpCisKKyAgICAgICAgaWZfdG9rZW5zID0geydpZicsICdpZmRlZicsICdpZm5kZWYnfQorICAgICAgICBhbGxfdG9rZW5zID0gaWZfdG9rZW5zIHwgeydlbGlmJywgJ2Vsc2UnLCAnZW5kaWYnfQorCisgICAgICAgIGlmIHRva2VuIG5vdCBpbiBhbGxfdG9rZW5zOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgIyBjaGVhdCBhIGxpdHRsZSBoZXJlLCB0byByZXVzZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgaWYKKyAgICAgICAgaWYgdG9rZW4gPT0gJ2VsaWYnOgorICAgICAgICAgICAgcG9wX3N0YWNrKCkKKyAgICAgICAgICAgIHRva2VuID0gJ2lmJworCisgICAgICAgIGlmIHRva2VuIGluIGlmX3Rva2VuczoKKyAgICAgICAgICAgIGlmIG5vdCBjb25kaXRpb246CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJJbnZhbGlkIGZvcm1hdCBmb3IgIyIgKyB0b2tlbiArICIgbGluZTogbm8gYXJndW1lbnQhIikKKyAgICAgICAgICAgIGlmIHRva2VuID09ICdpZic6CisgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuaXNfYV9zaW1wbGVfZGVmaW5lZChjb25kaXRpb24pOgorICAgICAgICAgICAgICAgICAgICBjb25kaXRpb24gPSAiKCIgKyBjb25kaXRpb24gKyAiKSIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZmllbGRzID0gY29uZGl0aW9uLnNwbGl0KCkKKyAgICAgICAgICAgICAgICBpZiBsZW4oZmllbGRzKSAhPSAxOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIkludmFsaWQgZm9ybWF0IGZvciAjIiArIHRva2VuICsgIiBsaW5lOiBzaG91bGQgYmUgZXhhY3RseSBvbmUgYXJndW1lbnQhIikKKyAgICAgICAgICAgICAgICBzeW1ib2wgPSBmaWVsZHNbMF0KKyAgICAgICAgICAgICAgICBjb25kaXRpb24gPSAnZGVmaW5lZCgnICsgc3ltYm9sICsgJyknCisgICAgICAgICAgICAgICAgaWYgdG9rZW4gPT0gJ2lmbmRlZic6CisgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbiA9ICchJyArIGNvbmRpdGlvbgorCisgICAgICAgICAgICBzZWxmLnN0YWNrLmFwcGVuZCgoImlmIiwgY29uZGl0aW9uKSkKKyAgICAgICAgICAgIGlmIHNlbGYudmVyYm9zZToKKyAgICAgICAgICAgICAgICBwcmludChzZWxmLnN0YXR1cygpKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgcHJldmlvdXNfdG9rZW4sIHByZXZpb3VzX2NvbmRpdGlvbiA9IHBvcF9zdGFjaygpCisKKyAgICAgICAgaWYgdG9rZW4gPT0gJ2Vsc2UnOgorICAgICAgICAgICAgc2VsZi5zdGFjay5hcHBlbmQoKCdlbHNlJywgbmVnYXRlKHByZXZpb3VzX2NvbmRpdGlvbikpKQorICAgICAgICBlbGlmIHRva2VuID09ICdlbmRpZic6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGlmIHNlbGYudmVyYm9zZToKKyAgICAgICAgICAgIHByaW50KHNlbGYuc3RhdHVzKCkpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgZm9yIGZpbGVuYW1lIGluIHN5cy5hcmd2WzE6XToKKyAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAicnQiKSBhcyBmOgorICAgICAgICAgICAgY3BwID0gTW9uaXRvcihmaWxlbmFtZSwgdmVyYm9zZT1UcnVlKQorICAgICAgICAgICAgcHJpbnQoKQorICAgICAgICAgICAgcHJpbnQoZmlsZW5hbWUpCisgICAgICAgICAgICBmb3IgbGluZV9udW1iZXIsIGxpbmUgaW4gZW51bWVyYXRlKGYucmVhZCgpLnNwbGl0KCdcbicpLCAxKToKKyAgICAgICAgICAgICAgICBjcHAud3JpdGVsaW5lKGxpbmUpCmRpZmYgLS1naXQgYS9Ub29scy9mcmVlemUvYmtmaWxlLnB5IGIvVG9vbHMvZnJlZXplL2JrZmlsZS5weQppbmRleCAwZTg5NWYyLi42YWJhY2M5IDEwMDY0NAotLS0gYS9Ub29scy9mcmVlemUvYmtmaWxlLnB5CisrKyBiL1Rvb2xzL2ZyZWV6ZS9ia2ZpbGUucHkKQEAgLTEsNCArMSw0IEBACi1fb3JpZ19vcGVuID0gb3BlbgorZnJvbSBidWlsdGlucyBpbXBvcnQgb3BlbiBhcyBfb3JpZ19vcGVuCiAKIGNsYXNzIF9Ca0ZpbGU6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGUsIG1vZGUsIGJ1ZnNpemUpOgpAQCAtNywxMSArNywxMSBAQAogICAgICAgICBzZWxmLl9fYmFja3VwID0gZmlsZSArICd+JwogICAgICAgICB0cnk6CiAgICAgICAgICAgICBvcy51bmxpbmsoc2VsZi5fX2JhY2t1cCkKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgb3MucmVuYW1lKGZpbGUsIHNlbGYuX19iYWNrdXApCi0gICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBzZWxmLl9fYmFja3VwID0gTm9uZQogICAgICAgICBzZWxmLl9fZmlsZSA9IF9vcmlnX29wZW4oZmlsZSwgbW9kZSwgYnVmc2l6ZSkKICAgICAgICAgc2VsZi5jbG9zZWQgPSBzZWxmLl9fZmlsZS5jbG9zZWQKZGlmZiAtLWdpdCBhL1Rvb2xzL2ZyZWV6ZS9jaGVja2V4dGVuc2lvbnNfd2luMzIucHkgYi9Ub29scy9mcmVlemUvY2hlY2tleHRlbnNpb25zX3dpbjMyLnB5CmluZGV4IGVlNDQ2ZTcuLmM5Y2I1NzYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL2ZyZWV6ZS9jaGVja2V4dGVuc2lvbnNfd2luMzIucHkKKysrIGIvVG9vbHMvZnJlZXplL2NoZWNrZXh0ZW5zaW9uc193aW4zMi5weQpAQCAtMTE4LDcgKzExOCw3IEBACiAKICAgICBmb3IgZXhjIGluIGV4Y2x1ZGU6CiAgICAgICAgIGlmIGV4YyBpbiBtb2R1bGUuc291cmNlRmlsZXM6Ci0gICAgICAgICAgICBtb2R1bGVzLnNvdXJjZUZpbGVzLnJlbW92ZShleGMpCisgICAgICAgICAgICBtb2R1bGUuc291cmNlRmlsZXMucmVtb3ZlKGV4YykKIAogICAgIHJldHVybiBtb2R1bGUKIApkaWZmIC0tZ2l0IGEvVG9vbHMvZnJlZXplL2ZyZWV6ZS5weSBiL1Rvb2xzL2ZyZWV6ZS9mcmVlemUucHkKaW5kZXggYTQxMjY3YS4uZTBjNmMyYyAxMDA3NTUKLS0tIGEvVG9vbHMvZnJlZXplL2ZyZWV6ZS5weQorKysgYi9Ub29scy9mcmVlemUvZnJlZXplLnB5CkBAIC0xMjUsNyArMTI1LDcgQEAKICAgICAjIGRlZmF1bHQgdGhlIGV4Y2x1ZGUgbGlzdCBmb3IgZWFjaCBwbGF0Zm9ybQogICAgIGlmIHdpbjogZXhjbHVkZSA9IGV4Y2x1ZGUgKyBbCiAgICAgICAgICdkb3MnLCAnZG9zcGF0aCcsICdtYWMnLCAnbWFjcGF0aCcsICdtYWNmcycsICdNQUNGUycsICdwb3NpeCcsCi0gICAgICAgICdvczInLCAnY2UnLAorICAgICAgICAnY2UnLAogICAgICAgICBdCiAKICAgICBmYWlsX2ltcG9ydCA9IGV4Y2x1ZGVbOl0KQEAgLTIxOSw2ICsyMTksNyBAQAogCiAgICAgIyBsb2NhdGlvbnMgZGVyaXZlZCBmcm9tIG9wdGlvbnMKICAgICB2ZXJzaW9uID0gc3lzLnZlcnNpb25bOjNdCisgICAgZmxhZ2dlZF92ZXJzaW9uID0gdmVyc2lvbiArIHN5cy5hYmlmbGFncwogICAgIGlmIHdpbjoKICAgICAgICAgZXh0ZW5zaW9uc19jID0gJ2Zyb3plbl9leHRlbnNpb25zLmMnCiAgICAgaWYgaXNob21lOgpAQCAtMjMzLDEwICsyMzQsMTEgQEAKICAgICAgICAgICAgIGZyb3plbmRsbG1haW5fYyA9IG9zLnBhdGguam9pbihleGVjX3ByZWZpeCwgJ1BjXFxmcm96ZW5fZGxsbWFpbi5jJykKICAgICBlbHNlOgogICAgICAgICBiaW5saWIgPSBvcy5wYXRoLmpvaW4oZXhlY19wcmVmaXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbGliJywgJ3B5dGhvbiVzJyAlIHZlcnNpb24sICdjb25maWcnKQotICAgICAgICBpbmNsZGlyID0gb3MucGF0aC5qb2luKHByZWZpeCwgJ2luY2x1ZGUnLCAncHl0aG9uJXMnICUgdmVyc2lvbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdsaWInLCAncHl0aG9uJXMnICUgdmVyc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb25maWctJXMnICUgZmxhZ2dlZF92ZXJzaW9uKQorICAgICAgICBpbmNsZGlyID0gb3MucGF0aC5qb2luKHByZWZpeCwgJ2luY2x1ZGUnLCAncHl0aG9uJXMnICUgZmxhZ2dlZF92ZXJzaW9uKQogICAgICAgICBjb25maWdfaF9kaXIgPSBvcy5wYXRoLmpvaW4oZXhlY19wcmVmaXgsICdpbmNsdWRlJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdweXRob24lcycgJSB2ZXJzaW9uKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3B5dGhvbiVzJyAlIGZsYWdnZWRfdmVyc2lvbikKICAgICAgICAgY29uZmlnX2NfaW4gPSBvcy5wYXRoLmpvaW4oYmlubGliLCAnY29uZmlnLmMuaW4nKQogICAgICAgICBmcm96ZW5tYWluX2MgPSBvcy5wYXRoLmpvaW4oYmlubGliLCAnZnJvemVubWFpbi5jJykKICAgICAgICAgbWFrZWZpbGVfaW4gPSBvcy5wYXRoLmpvaW4oYmlubGliLCAnTWFrZWZpbGUnKQpAQCAtMzExLDcgKzMxMyw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG9zLm1rZGlyKG9kaXIpCiAgICAgICAgICAgICBwcmludCgiQ3JlYXRlZCBvdXRwdXQgZGlyZWN0b3J5Iiwgb2RpcikKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yIGFzIG1zZzoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgbXNnOgogICAgICAgICAgICAgdXNhZ2UoJyVzOiBta2RpciBmYWlsZWQgKCVzKScgJSAob2Rpciwgc3RyKG1zZykpKQogICAgIGJhc2UgPSAnJwogICAgIGlmIG9kaXI6CkBAIC0zNjMsNiArMzY1LDEwIEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBtZi5sb2FkX2ZpbGUobW9kKQogCisgICAgIyBBbGlhcyAiaW1wb3J0bGliLl9ib290c3RyYXAiIHRvICJfZnJvemVuX2ltcG9ydGxpYiIgc28gdGhhdCB0aGUKKyAgICAjIGltcG9ydCBtYWNoaW5lcnkgY2FuIGJvb3RzdHJhcC4KKyAgICBtZi5tb2R1bGVzWyJfZnJvemVuX2ltcG9ydGxpYiJdID0gbWYubW9kdWxlc1siaW1wb3J0bGliLl9ib290c3RyYXAiXQorCiAgICAgIyBBZGQgdGhlIG1haW4gc2NyaXB0IGFzIGVpdGhlciBfX21haW5fXywgb3IgdGhlIGFjdHVhbCBtb2R1bGUgbmFtZS4KICAgICBpZiBweXRob25fZW50cnlfaXNfbWFpbjoKICAgICAgICAgbWYucnVuX3NjcmlwdChzY3JpcHRmaWxlKQpAQCAtNDU1LDcgKzQ2MSw3IEBACiAKICAgICBjZmxhZ3MgPSBbJyQoT1BUKSddCiAgICAgY3BwZmxhZ3MgPSBkZWZpbmVzICsgaW5jbHVkZXMKLSAgICBsaWJzID0gW29zLnBhdGguam9pbihiaW5saWIsICdsaWJweXRob24kKFZFUlNJT04pLmEnKV0KKyAgICBsaWJzID0gW29zLnBhdGguam9pbihiaW5saWIsICckKExETElCUkFSWSknKV0KIAogICAgIHNvbWV2YXJzID0ge30KICAgICBpZiBvcy5wYXRoLmV4aXN0cyhtYWtlZmlsZV9pbik6CmRpZmYgLS1naXQgYS9Ub29scy9mcmVlemUvbWFrZWNvbmZpZy5weSBiL1Rvb2xzL2ZyZWV6ZS9tYWtlY29uZmlnLnB5CmluZGV4IDAxODk5MmMuLmZhYmFhY2UgMTAwNjQ0Ci0tLSBhL1Rvb2xzL2ZyZWV6ZS9tYWtlY29uZmlnLnB5CisrKyBiL1Rvb2xzL2ZyZWV6ZS9tYWtlY29uZmlnLnB5CkBAIC0zLDcgKzMsNyBAQAogCiAjIFdyaXRlIHRoZSBjb25maWcuYyBmaWxlCiAKLW5ldmVyID0gWydtYXJzaGFsJywgJ2ltcCcsICdfYXN0JywgJ19fbWFpbl9fJywgJ2J1aWx0aW5zJywKK25ldmVyID0gWydtYXJzaGFsJywgJ19pbXAnLCAnX2FzdCcsICdfX21haW5fXycsICdidWlsdGlucycsCiAgICAgICAgICAnc3lzJywgJ2djJywgJ193YXJuaW5ncyddCiAKIGRlZiBtYWtlY29uZmlnKGluZnAsIG91dGZwLCBtb2R1bGVzLCB3aXRoX2lmZGVmPTApOgpkaWZmIC0tZ2l0IGEvVG9vbHMvZnJlZXplL3Rlc3QvTWFrZWZpbGUgYi9Ub29scy9mcmVlemUvdGVzdC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjc5ZjcyCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvZnJlZXplL3Rlc3QvTWFrZWZpbGUKQEAgLTAsMCArMSwxMSBAQAorIyBNYWtlZmlsZSB0byB0ZXN0IGZyZWV6ZQorIyBzZXQgUFlUSE9OIHRvIHBhdGggb2YgUHl0aG9uIGludGVycHJldGVyIHRvIHRlc3QKK1BZVEhPTj1weXRob24KKyMgc2V0IE9VVERJUiB0byB0aGUgdGVtcCBkaXJlY3RvcnkgZm9yIGZyZWV6ZQorT1VURElSPW91dGRpcgorCit0ZXN0OgorCSQoUFlUSE9OKSAuLi9mcmVlemUucHkgLW8gJChPVVRESVIpIG9rLnB5CisJbWFrZSAtQyAkKE9VVERJUikKKwkkKE9VVERJUikvb2sKKwkKZGlmZiAtLWdpdCBhL1Rvb2xzL2ZyZWV6ZS90ZXN0L29rLnB5IGIvVG9vbHMvZnJlZXplL3Rlc3Qvb2sucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE1ZTBiNAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL2ZyZWV6ZS90ZXN0L29rLnB5CkBAIC0wLDAgKzEsMiBAQAoraW1wb3J0IHN5cworc3lzLmV4aXQoMCkKZGlmZiAtLWdpdCBhL1Rvb2xzL2dkYi9saWJweXRob24ucHkgYi9Ub29scy9nZGIvbGlicHl0aG9uLnB5CmluZGV4IDFjMmMzY2IuLjMyMzQxZTcgMTAwNzU1Ci0tLSBhL1Rvb2xzL2dkYi9saWJweXRob24ucHkKKysrIGIvVG9vbHMvZ2RiL2xpYnB5dGhvbi5weQpAQCAtOTEsNyArOTEsNyBAQAogCiAKIGRlZiBzYWZldHlfbGltaXQodmFsKToKLSAgICAjIEdpdmVuIGEgaW50ZWdlciB2YWx1ZSBmcm9tIHRoZSBwcm9jZXNzIGJlaW5nIGRlYnVnZ2VkLCBsaW1pdCBpdCB0byBzb21lCisgICAgIyBHaXZlbiBhbiBpbnRlZ2VyIHZhbHVlIGZyb20gdGhlIHByb2Nlc3MgYmVpbmcgZGVidWdnZWQsIGxpbWl0IGl0IHRvIHNvbWUKICAgICAjIHNhZmV0eSB0aHJlc2hvbGQgc28gdGhhdCBhcmJpdHJhcnkgYnJlYWthZ2Ugd2l0aGluIHNhaWQgcHJvY2VzcyBkb2Vzbid0CiAgICAgIyBicmVhayB0aGUgZ2RiIHByb2Nlc3MgdG9vIG11Y2ggKGUuZy4gc2l6ZXMgb2YgaXRlcmF0aW9ucywgc2l6ZXMgb2YgbGlzdHMpCiAgICAgcmV0dXJuIG1pbih2YWwsIDEwMDApCkBAIC0xNTgsNyArMTU4LDcgQEAKIAogY2xhc3MgUHlPYmplY3RQdHIob2JqZWN0KToKICAgICAiIiIKLSAgICBDbGFzcyB3cmFwcGluZyBhIGdkYi5WYWx1ZSB0aGF0J3MgYSBlaXRoZXIgYSAoUHlPYmplY3QqKSB3aXRoaW4gdGhlCisgICAgQ2xhc3Mgd3JhcHBpbmcgYSBnZGIuVmFsdWUgdGhhdCdzIGVpdGhlciBhIChQeU9iamVjdCopIHdpdGhpbiB0aGUKICAgICBpbmZlcmlvciBwcm9jZXNzLCBvciBzb21lIHN1YmNsYXNzIHBvaW50ZXIgZS5nLiAoUHlCeXRlc09iamVjdCopCiAKICAgICBUaGVyZSB3aWxsIGJlIGEgc3ViY2xhc3MgZm9yIGV2ZXJ5IHJlZmluZWQgUHlPYmplY3QgdHlwZSB0aGF0IHdlIGNhcmUKQEAgLTkzOSwyMSArOTM5LDI2IEBACiBjbGFzcyBQeVNldE9iamVjdFB0cihQeU9iamVjdFB0cik6CiAgICAgX3R5cGVuYW1lID0gJ1B5U2V0T2JqZWN0JwogCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9kdW1teV9rZXkoc2VsZik6CisgICAgICAgIHJldHVybiBnZGIubG9va3VwX2dsb2JhbF9zeW1ib2woJ19QeVNldF9EdW1teScpLnZhbHVlKCkKKworICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgZHVtbXlfcHRyID0gc2VsZi5fZHVtbXlfa2V5KCkKKyAgICAgICAgdGFibGUgPSBzZWxmLmZpZWxkKCd0YWJsZScpCisgICAgICAgIGZvciBpIGluIHNhZmVfcmFuZ2Uoc2VsZi5maWVsZCgnbWFzaycpICsgMSk6CisgICAgICAgICAgICBzZXRlbnRyeSA9IHRhYmxlW2ldCisgICAgICAgICAgICBrZXkgPSBzZXRlbnRyeVsna2V5J10KKyAgICAgICAgICAgIGlmIGtleSAhPSAwIGFuZCBrZXkgIT0gZHVtbXlfcHRyOgorICAgICAgICAgICAgICAgIHlpZWxkIFB5T2JqZWN0UHRyLmZyb21fcHlvYmplY3RfcHRyKGtleSkKKwogICAgIGRlZiBwcm94eXZhbChzZWxmLCB2aXNpdGVkKToKICAgICAgICAgIyBHdWFyZCBhZ2FpbnN0IGluZmluaXRlIGxvb3BzOgogICAgICAgICBpZiBzZWxmLmFzX2FkZHJlc3MoKSBpbiB2aXNpdGVkOgogICAgICAgICAgICAgcmV0dXJuIFByb3h5QWxyZWFkeVZpc2l0ZWQoJyVzKC4uLiknICUgc2VsZi5zYWZlX3RwX25hbWUoKSkKICAgICAgICAgdmlzaXRlZC5hZGQoc2VsZi5hc19hZGRyZXNzKCkpCiAKLSAgICAgICAgbWVtYmVycyA9IFtdCi0gICAgICAgIHRhYmxlID0gc2VsZi5maWVsZCgndGFibGUnKQotICAgICAgICBmb3IgaSBpbiBzYWZlX3JhbmdlKHNlbGYuZmllbGQoJ21hc2snKSsxKToKLSAgICAgICAgICAgIHNldGVudHJ5ID0gdGFibGVbaV0KLSAgICAgICAgICAgIGtleSA9IHNldGVudHJ5WydrZXknXQotICAgICAgICAgICAgaWYga2V5ICE9IDA6Ci0gICAgICAgICAgICAgICAga2V5X3Byb3h5ID0gUHlPYmplY3RQdHIuZnJvbV9weW9iamVjdF9wdHIoa2V5KS5wcm94eXZhbCh2aXNpdGVkKQotICAgICAgICAgICAgICAgIGlmIGtleV9wcm94eSAhPSAnPGR1bW15IGtleT4nOgotICAgICAgICAgICAgICAgICAgICBtZW1iZXJzLmFwcGVuZChrZXlfcHJveHkpCisgICAgICAgIG1lbWJlcnMgPSAoa2V5LnByb3h5dmFsKHZpc2l0ZWQpIGZvciBrZXkgaW4gc2VsZikKICAgICAgICAgaWYgc2VsZi5zYWZlX3RwX25hbWUoKSA9PSAnZnJvemVuc2V0JzoKICAgICAgICAgICAgIHJldHVybiBmcm96ZW5zZXQobWVtYmVycykKICAgICAgICAgZWxzZToKQEAgLTk4MiwxOCArOTg3LDExIEBACiAKICAgICAgICAgb3V0LndyaXRlKCd7JykKICAgICAgICAgZmlyc3QgPSBUcnVlCi0gICAgICAgIHRhYmxlID0gc2VsZi5maWVsZCgndGFibGUnKQotICAgICAgICBmb3IgaSBpbiBzYWZlX3JhbmdlKHNlbGYuZmllbGQoJ21hc2snKSsxKToKLSAgICAgICAgICAgIHNldGVudHJ5ID0gdGFibGVbaV0KLSAgICAgICAgICAgIGtleSA9IHNldGVudHJ5WydrZXknXQotICAgICAgICAgICAgaWYga2V5ICE9IDA6Ci0gICAgICAgICAgICAgICAgcHlvcF9rZXkgPSBQeU9iamVjdFB0ci5mcm9tX3B5b2JqZWN0X3B0cihrZXkpCi0gICAgICAgICAgICAgICAga2V5X3Byb3h5ID0gcHlvcF9rZXkucHJveHl2YWwodmlzaXRlZCkgIyBGSVhNRSEKLSAgICAgICAgICAgICAgICBpZiBrZXlfcHJveHkgIT0gJzxkdW1teSBrZXk+JzoKLSAgICAgICAgICAgICAgICAgICAgaWYgbm90IGZpcnN0OgotICAgICAgICAgICAgICAgICAgICAgICAgb3V0LndyaXRlKCcsICcpCi0gICAgICAgICAgICAgICAgICAgIGZpcnN0ID0gRmFsc2UKLSAgICAgICAgICAgICAgICAgICAgcHlvcF9rZXkud3JpdGVfcmVwcihvdXQsIHZpc2l0ZWQpCisgICAgICAgIGZvciBrZXkgaW4gc2VsZjoKKyAgICAgICAgICAgIGlmIG5vdCBmaXJzdDoKKyAgICAgICAgICAgICAgICBvdXQud3JpdGUoJywgJykKKyAgICAgICAgICAgIGZpcnN0ID0gRmFsc2UKKyAgICAgICAgICAgIGtleS53cml0ZV9yZXByKG91dCwgdmlzaXRlZCkKICAgICAgICAgb3V0LndyaXRlKCd9JykKIAogICAgICAgICBpZiB0cF9uYW1lICE9ICdzZXQnOgpAQCAtMTE3Nyw3ICsxMTc1LDkgQEAKICAgICAgICAgIyBDb252ZXJ0IHRoZSBpbnQgY29kZSBwb2ludHMgdG8gdW5pY29kZSBjaGFyYWN0ZXJzLCBhbmQgZ2VuZXJhdGUgYQogICAgICAgICAjIGxvY2FsIHVuaWNvZGUgaW5zdGFuY2UuCiAgICAgICAgICMgVGhpcyBzcGxpdHMgc3Vycm9nYXRlIHBhaXJzIGlmIHNpemVvZihQeV9VTklDT0RFKSBpcyAyIGhlcmUgKGluIGdkYikuCi0gICAgICAgIHJlc3VsdCA9IHUnJy5qb2luKFtfdW5pY2hyKHVjcykgZm9yIHVjcyBpbiBQeV9VTklDT0RFc10pCisgICAgICAgIHJlc3VsdCA9IHUnJy5qb2luKFsKKyAgICAgICAgICAgIChfdW5pY2hyKHVjcykgaWYgdWNzIDw9IDB4MTBmZmZmIGVsc2UgJ1x1ZmZmZCcpCisgICAgICAgICAgICBmb3IgdWNzIGluIFB5X1VOSUNPREVzXSkKICAgICAgICAgcmV0dXJuIHJlc3VsdAogCiAgICAgZGVmIHdyaXRlX3JlcHIoc2VsZiwgb3V0LCB2aXNpdGVkKToKZGlmZiAtLWdpdCBhL1Rvb2xzL2kxOG4vbWFrZWxvY2FsZWFsaWFzLnB5IGIvVG9vbHMvaTE4bi9tYWtlbG9jYWxlYWxpYXMucHkKaW5kZXggOGI5MmFlMS4uMTA4ODdjZSAxMDA3NTUKLS0tIGEvVG9vbHMvaTE4bi9tYWtlbG9jYWxlYWxpYXMucHkKKysrIGIvVG9vbHMvaTE4bi9tYWtlbG9jYWxlYWxpYXMucHkKQEAgLTcsNiArNyw3IEBACiAKICIiIgogaW1wb3J0IGxvY2FsZQoraW1wb3J0IHN5cwogCiAjIExvY2F0aW9uIG9mIHRoZSBhbGlhcyBmaWxlCiBMT0NBTEVfQUxJQVMgPSAnL3Vzci9zaGFyZS9YMTEvbG9jYWxlL2xvY2FsZS5hbGlhcycKQEAgLTY1LDkgKzY2LDM1IEBACiAgICAgICAgICAgICAgICAgICAoaywgb2xkZGF0YVtrXSwgZGF0YVtrXSkpCiAgICAgICAgICMgQWRkaXRpb25zIGFyZSBub3QgbWVudGlvbmVkCiAKK2RlZiBvcHRpbWl6ZShkYXRhKToKKyAgICBsb2NhbGVfYWxpYXMgPSBsb2NhbGUubG9jYWxlX2FsaWFzCisgICAgbG9jYWxlLmxvY2FsZV9hbGlhcyA9IGRhdGEuY29weSgpCisgICAgZm9yIGssIHYgaW4gZGF0YS5pdGVtcygpOgorICAgICAgICBkZWwgbG9jYWxlLmxvY2FsZV9hbGlhc1trXQorICAgICAgICBpZiBsb2NhbGUubm9ybWFsaXplKGspICE9IHY6CisgICAgICAgICAgICBsb2NhbGUubG9jYWxlX2FsaWFzW2tdID0gdgorICAgIG5ld2RhdGEgPSBsb2NhbGUubG9jYWxlX2FsaWFzCisgICAgZXJyb3JzID0gY2hlY2soZGF0YSkKKyAgICBsb2NhbGUubG9jYWxlX2FsaWFzID0gbG9jYWxlX2FsaWFzCisgICAgaWYgZXJyb3JzOgorICAgICAgICBzeXMuZXhpdCgxKQorICAgIHJldHVybiBuZXdkYXRhCisKK2RlZiBjaGVjayhkYXRhKToKKyAgICAjIENoZWNrIHRoYXQgYWxsIGFsaWFzIGRlZmluaXRpb25zIGZyb20gdGhlIFgxMSBmaWxlCisgICAgIyBhcmUgYWN0dWFsbHkgbWFwcGVkIHRvIHRoZSBjb3JyZWN0IGFsaWFzIGxvY2FsZXMuCisgICAgZXJyb3JzID0gMAorICAgIGZvciBrLCB2IGluIGRhdGEuaXRlbXMoKToKKyAgICAgICAgaWYgbG9jYWxlLm5vcm1hbGl6ZShrKSAhPSB2OgorICAgICAgICAgICAgcHJpbnQoJ0VSUk9SOiAlYSAtPiAlYSAhPSAlYScgJSAoaywgbG9jYWxlLm5vcm1hbGl6ZShrKSwgdiksCisgICAgICAgICAgICAgICAgICBmaWxlPXN5cy5zdGRlcnIpCisgICAgICAgICAgICBlcnJvcnMgKz0gMQorICAgIHJldHVybiBlcnJvcnMKKwogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICBkYXRhID0gbG9jYWxlLmxvY2FsZV9hbGlhcy5jb3B5KCkKICAgICBkYXRhLnVwZGF0ZShwYXJzZShMT0NBTEVfQUxJQVMpKQorICAgIGRhdGEgPSBvcHRpbWl6ZShkYXRhKQogICAgIHByaW50X2RpZmZlcmVuY2VzKGRhdGEsIGxvY2FsZS5sb2NhbGVfYWxpYXMpCiAgICAgcHJpbnQoKQogICAgIHByaW50KCdsb2NhbGVfYWxpYXMgPSB7JykKZGlmZiAtLWdpdCBhL1Rvb2xzL2kxOG4vbXNnZm10LnB5IGIvVG9vbHMvaTE4bi9tc2dmbXQucHkKaW5kZXggY2Q5MDY5MS4uYjA3NTFhMSAxMDA3NTUKLS0tIGEvVG9vbHMvaTE4bi9tc2dmbXQucHkKKysrIGIvVG9vbHMvaTE4bi9tc2dmbXQucHkKQEAgLTIxOCw3ICsyMTgsNyBAQAogICAgICAgICBpZiBvcHQgaW4gKCctaCcsICctLWhlbHAnKToKICAgICAgICAgICAgIHVzYWdlKDApCiAgICAgICAgIGVsaWYgb3B0IGluICgnLVYnLCAnLS12ZXJzaW9uJyk6Ci0gICAgICAgICAgICBwcmludCgibXNnZm10LnB5IiwgX192ZXJzaW9uX18sIGZpbGU9c3lzLnN0ZGVycikKKyAgICAgICAgICAgIHByaW50KCJtc2dmbXQucHkiLCBfX3ZlcnNpb25fXykKICAgICAgICAgICAgIHN5cy5leGl0KDApCiAgICAgICAgIGVsaWYgb3B0IGluICgnLW8nLCAnLS1vdXRwdXQtZmlsZScpOgogICAgICAgICAgICAgb3V0ZmlsZSA9IGFyZwpkaWZmIC0tZ2l0IGEvVG9vbHMvaW1wb3J0YmVuY2gvaW1wb3J0YmVuY2gucHkgYi9Ub29scy9pbXBvcnRiZW5jaC9pbXBvcnRiZW5jaC5weQppbmRleCA3MTRjMGU0Li42MzVkZDU2IDEwMDY0NAotLS0gYS9Ub29scy9pbXBvcnRiZW5jaC9pbXBvcnRiZW5jaC5weQorKysgYi9Ub29scy9pbXBvcnRiZW5jaC9pbXBvcnRiZW5jaC5weQpAQCAtNDYsOCArNDYsNyBAQAogICAgIG1vZHVsZS5fX3BhY2thZ2VfXyA9ICcnCiAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSk6CiAgICAgICAgIHN5cy5tb2R1bGVzW25hbWVdID0gbW9kdWxlCi0gICAgICAgIGZvciByZXN1bHQgaW4gYmVuY2gobmFtZSwgcmVwZWF0PXJlcGVhdCwgc2Vjb25kcz1zZWNvbmRzKToKLSAgICAgICAgICAgIHlpZWxkIHJlc3VsdAorICAgICAgICB5aWVsZCBmcm9tIGJlbmNoKG5hbWUsIHJlcGVhdD1yZXBlYXQsIHNlY29uZHM9c2Vjb25kcykKIAogCiBkZWYgYnVpbHRpbl9tb2Qoc2Vjb25kcywgcmVwZWF0KToKQEAgLTU2LDkgKzU1LDggQEAKICAgICBpZiBuYW1lIGluIHN5cy5tb2R1bGVzOgogICAgICAgICBkZWwgc3lzLm1vZHVsZXNbbmFtZV0KICAgICAjIFJlbHlpbmcgb24gYnVpbHQtaW4gaW1wb3J0ZXIgYmVpbmcgaW1wbGljaXQuCi0gICAgZm9yIHJlc3VsdCBpbiBiZW5jaChuYW1lLCBsYW1iZGE6IHN5cy5tb2R1bGVzLnBvcChuYW1lKSwgcmVwZWF0PXJlcGVhdCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlY29uZHM9c2Vjb25kcyk6Ci0gICAgICAgIHlpZWxkIHJlc3VsdAorICAgIHlpZWxkIGZyb20gYmVuY2gobmFtZSwgbGFtYmRhOiBzeXMubW9kdWxlcy5wb3AobmFtZSksIHJlcGVhdD1yZXBlYXQsCisgICAgICAgICAgICAgICAgICAgICBzZWNvbmRzPXNlY29uZHMpCiAKIAogZGVmIHNvdXJjZV93b19ieXRlY29kZShzZWNvbmRzLCByZXBlYXQpOgpAQCAtNzMsOSArNzEsOCBAQAogICAgICAgICAgICAgbG9hZGVyID0gKGltcG9ydGxpYi5tYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlciwKICAgICAgICAgICAgICAgICAgICAgICBpbXBvcnRsaWIubWFjaGluZXJ5LlNPVVJDRV9TVUZGSVhFUywgVHJ1ZSkKICAgICAgICAgICAgIHN5cy5wYXRoX2hvb2tzLmFwcGVuZChpbXBvcnRsaWIubWFjaGluZXJ5LkZpbGVGaW5kZXIucGF0aF9ob29rKGxvYWRlcikpCi0gICAgICAgICAgICBmb3IgcmVzdWx0IGluIGJlbmNoKG5hbWUsIGxhbWJkYTogc3lzLm1vZHVsZXMucG9wKG5hbWUpLCByZXBlYXQ9cmVwZWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWNvbmRzPXNlY29uZHMpOgotICAgICAgICAgICAgICAgIHlpZWxkIHJlc3VsdAorICAgICAgICAgICAgeWllbGQgZnJvbSBiZW5jaChuYW1lLCBsYW1iZGE6IHN5cy5tb2R1bGVzLnBvcChuYW1lKSwgcmVwZWF0PXJlcGVhdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25kcz1zZWNvbmRzKQogICAgIGZpbmFsbHk6CiAgICAgICAgIHN5cy5kb250X3dyaXRlX2J5dGVjb2RlID0gRmFsc2UKIApAQCAtODksOSArODYsOCBAQAogICAgICAgICAgICAgb3MudW5saW5rKGJ5dGVjb2RlX3BhdGgpCiAgICAgICAgIHN5cy5kb250X3dyaXRlX2J5dGVjb2RlID0gVHJ1ZQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBmb3IgcmVzdWx0IGluIGJlbmNoKG5hbWUsIGxhbWJkYTogc3lzLm1vZHVsZXMucG9wKG5hbWUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBlYXQ9cmVwZWF0LCBzZWNvbmRzPXNlY29uZHMpOgotICAgICAgICAgICAgICAgIHlpZWxkIHJlc3VsdAorICAgICAgICAgICAgeWllbGQgZnJvbSBiZW5jaChuYW1lLCBsYW1iZGE6IHN5cy5tb2R1bGVzLnBvcChuYW1lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwZWF0PXJlcGVhdCwgc2Vjb25kcz1zZWNvbmRzKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgc3lzLmRvbnRfd3JpdGVfYnl0ZWNvZGUgPSBGYWxzZQogCkBAIC0xMjcsOCArMTIzLDcgQEAKICAgICAgICAgZGVmIGNsZWFudXAoKToKICAgICAgICAgICAgIHN5cy5tb2R1bGVzLnBvcChuYW1lKQogICAgICAgICAgICAgb3MudW5saW5rKGltcC5jYWNoZV9mcm9tX3NvdXJjZShtb2R1bGUuX19maWxlX18pKQotICAgICAgICBmb3IgcmVzdWx0IGluIGJlbmNoKG5hbWUsIGNsZWFudXAsIHJlcGVhdD1yZXBlYXQsIHNlY29uZHM9c2Vjb25kcyk6Ci0gICAgICAgICAgICB5aWVsZCByZXN1bHQKKyAgICAgICAgeWllbGQgZnJvbSBiZW5jaChuYW1lLCBjbGVhbnVwLCByZXBlYXQ9cmVwZWF0LCBzZWNvbmRzPXNlY29uZHMpCiAKICAgICB3cml0aW5nX2J5dGVjb2RlX2JlbmNobWFyay5fX2RvY19fID0gKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0aW5nX2J5dGVjb2RlX2JlbmNobWFyay5fX2RvY19fLmZvcm1hdChuYW1lKSkKQEAgLTE0OCw5ICsxNDMsOCBAQAogICAgICAgICBzeXMucGF0aF9ob29rcy5hcHBlbmQoaW1wb3J0bGliLm1hY2hpbmVyeS5GaWxlRmluZGVyLnBhdGhfaG9vayhsb2FkZXIpKQogICAgICAgICBweV9jb21waWxlLmNvbXBpbGUobWFwcGluZ1tuYW1lXSkKICAgICAgICAgYXNzZXJ0IG9zLnBhdGguZXhpc3RzKGltcC5jYWNoZV9mcm9tX3NvdXJjZShtYXBwaW5nW25hbWVdKSkKLSAgICAgICAgZm9yIHJlc3VsdCBpbiBiZW5jaChuYW1lLCBsYW1iZGE6IHN5cy5tb2R1bGVzLnBvcChuYW1lKSwgcmVwZWF0PXJlcGVhdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWNvbmRzPXNlY29uZHMpOgotICAgICAgICAgICAgeWllbGQgcmVzdWx0CisgICAgICAgIHlpZWxkIGZyb20gYmVuY2gobmFtZSwgbGFtYmRhOiBzeXMubW9kdWxlcy5wb3AobmFtZSksIHJlcGVhdD1yZXBlYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25kcz1zZWNvbmRzKQogCiAKIGRlZiBfdXNpbmdfYnl0ZWNvZGUobW9kdWxlKToKQEAgLTE1OCw5ICsxNTIsOCBAQAogICAgIGRlZiB1c2luZ19ieXRlY29kZV9iZW5jaG1hcmsoc2Vjb25kcywgcmVwZWF0KToKICAgICAgICAgIiIiU291cmNlIHcvIGJ5dGVjb2RlOiB7fSIiIgogICAgICAgICBweV9jb21waWxlLmNvbXBpbGUobW9kdWxlLl9fZmlsZV9fKQotICAgICAgICBmb3IgcmVzdWx0IGluIGJlbmNoKG5hbWUsIGxhbWJkYTogc3lzLm1vZHVsZXMucG9wKG5hbWUpLCByZXBlYXQ9cmVwZWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY29uZHM9c2Vjb25kcyk6Ci0gICAgICAgICAgICB5aWVsZCByZXN1bHQKKyAgICAgICAgeWllbGQgZnJvbSBiZW5jaChuYW1lLCBsYW1iZGE6IHN5cy5tb2R1bGVzLnBvcChuYW1lKSwgcmVwZWF0PXJlcGVhdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWNvbmRzPXNlY29uZHMpCiAKICAgICB1c2luZ19ieXRlY29kZV9iZW5jaG1hcmsuX19kb2NfXyA9ICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNpbmdfYnl0ZWNvZGVfYmVuY2htYXJrLl9fZG9jX18uZm9ybWF0KG5hbWUpKQpkaWZmIC0tZ2l0IGEvVG9vbHMvaW9iZW5jaC9pb2JlbmNoLnB5IGIvVG9vbHMvaW9iZW5jaC9pb2JlbmNoLnB5CmluZGV4IDUzMGJjNzkuLjcxMmU1ODQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL2lvYmVuY2gvaW9iZW5jaC5weQorKysgYi9Ub29scy9pb2JlbmNoL2lvYmVuY2gucHkKQEAgLTI0LDYgKzI0LDggQEAKICAgICB0cnk6CiAgICAgICAgIHJldHVybiBvcGVuKGZuLCBtb2RlLCBlbmNvZGluZz1lbmNvZGluZyBvciBURVhUX0VOQ09ESU5HKQogICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgIGlmICdyJyBpbiBtb2RlOgorICAgICAgICAgICAgbW9kZSArPSAnVScgIyAnVScgbW9kZSBpcyBuZWVkZWQgb25seSBpbiBQeXRob24gMi54CiAgICAgICAgIHJldHVybiBvcGVuKGZuLCBtb2RlKQogCiBkZWYgZ2V0X2ZpbGVfc2l6ZXMoKToKQEAgLTM4MCw3ICszODIsNyBAQAogICAgICAgICAgICAgZi53cml0ZShvcy51cmFuZG9tKHNpemUpKQogICAgICMgVGV4dCBmaWxlcwogICAgIGNodW5rID0gW10KLSAgICB3aXRoIHRleHRfb3BlbihfX2ZpbGVfXywgInJVIiwgZW5jb2Rpbmc9J3V0ZjgnKSBhcyBmOgorICAgIHdpdGggdGV4dF9vcGVuKF9fZmlsZV9fLCAiciIsIGVuY29kaW5nPSd1dGY4JykgYXMgZjoKICAgICAgICAgZm9yIGxpbmUgaW4gZjoKICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgiIyA8aW9iZW5jaCB0ZXh0IGNodW5rIG1hcmtlcj4iKToKICAgICAgICAgICAgICAgICBicmVhawpkaWZmIC0tZ2l0IGEvVG9vbHMvbXNpL21zaS5weSBiL1Rvb2xzL21zaS9tc2kucHkKaW5kZXggNWVkMDI1ZC4uZDc0NTNhNSAxMDA2NDQKLS0tIGEvVG9vbHMvbXNpL21zaS5weQorKysgYi9Ub29scy9tc2kvbXNpLnB5CkBAIC05OSw3ICs5OSw5IEBACiAgICAgJ19tdWx0aXByb2Nlc3NpbmcucHlkJywKICAgICAnX2x6bWEucHlkJywKICAgICAnX2RlY2ltYWwucHlkJywKLSAgICAnX3Rlc3RidWZmZXIucHlkJworICAgICdfdGVzdGJ1ZmZlci5weWQnLAorICAgICdfdGVzdGltcG9ydG11bHRpcGxlLnB5ZCcsCisgICAgJ19vdmVybGFwcGVkLnB5ZCcsCiBdCiAKICMgV2VsbC1rbm93biBjb21wb25lbnQgVVVJRHMKQEAgLTExOSw2ICsxMjEsNyBAQAogICAgICIzMSI6Ins0YWZjYmEwYi0xM2U0LTQ3YzMtYmViZS00Nzc0MjhiNDY5MTN9IiwKICAgICAiMzIiOiJ7M2ZmOTUzMTUtMTA5Ni00ZDMxLWJkODYtNjAxZDU0MzhhZDVlfSIsCiAgICAgIjMzIjoie2Y3NTgxY2E0LWQzNjgtNGVlYS04ZjgyLWQ0OGM2NGM0ZjA0N30iLAorICAgICIzNCI6Ins3QTBDNTgxMi0yNTgzLTQwRDktQkNCQi1DRDc0ODVGMTEzNzd9IiwKICAgICB9IFttYWpvcittaW5vcl0KIAogIyBDb21wdXRlIHRoZSBuYW1lIHRoYXQgU3BoaW54IGdpdmVzIHRvIHRoZSBkb2NmaWxlCkBAIC00MTcsNiArNDIwLDggQEAKIAogICAgIGNvbXBpbGVhcmdzID0gcictV2kgIltUQVJHRVRESVJdTGliXGNvbXBpbGVhbGwucHkiIC1mIC14ICJiYWRfY29kaW5nfGJhZHN5bnRheHxzaXRlLXBhY2thZ2VzfHB5Ml98bGliMnRvM1xcdGVzdHN8dmVudlxcc2NyaXB0cyIgIltUQVJHRVRESVJdTGliIicKICAgICBsaWIydG8zYXJncyA9IHInLWMgImltcG9ydCBsaWIydG8zLnB5Z3JhbSwgbGliMnRvMy5wYXRjb21wO2xpYjJ0bzMucGF0Y29tcC5QYXR0ZXJuQ29tcGlsZXIoKSInCisgICAgdXBkYXRlcGlwYXJncyA9IHInLW0gZW5zdXJlcGlwIC1VIC0tZGVmYXVsdC1waXAnCisgICAgcmVtb3ZlcGlwYXJncyA9IHInLUIgLW0gZW5zdXJlcGlwLl91bmluc3RhbGwnCiAgICAgIyBTZWUgIkN1c3RvbUFjdGlvbiBUYWJsZSIKICAgICBhZGRfZGF0YShkYiwgIkN1c3RvbUFjdGlvbiIsIFsKICAgICAgICAgIyBtc2lkYkN1c3RvbUFjdGlvblR5cGVGaXJzdFNlcXVlbmNlICsgbXNpZGJDdXN0b21BY3Rpb25UeXBlVGV4dERhdGEgKyBtc2lkYkN1c3RvbUFjdGlvblR5cGVQcm9wZXJ0eQpAQCAtNDMwLDkgKzQzNSwxMyBAQAogICAgICAgICAoIlNldExhdW5jaGVyRGlyVG9XaW5kb3dzIiwgMzA3LCAiTEFVTkNIRVJESVIiLCAiW1dpbmRvd3NGb2xkZXJdIiksCiAgICAgICAgICMgbXNpZGJDdXN0b21BY3Rpb25UeXBlRXhlICsgbXNpZGJDdXN0b21BY3Rpb25UeXBlU291cmNlRmlsZQogICAgICAgICAjIFNlZSAiQ3VzdG9tIEFjdGlvbiBUeXBlIDE4IgotICAgICAgICAoIkNvbXBpbGVQeWMiLCAxOCwgInB5dGhvbi5leGUiLCBjb21waWxlYXJncyksCi0gICAgICAgICgiQ29tcGlsZVB5byIsIDE4LCAicHl0aG9uLmV4ZSIsICItTyAiK2NvbXBpbGVhcmdzKSwKLSAgICAgICAgKCJDb21waWxlR3JhbW1hciIsIDE4LCAicHl0aG9uLmV4ZSIsIGxpYjJ0bzNhcmdzKSwKKyAgICAgICAgIyBtc2lkYkN1c3RvbUFjdGlvblR5cGVJblNjcmlwdCAoMTAyNCk7IHJ1biBkdXJpbmcgYWN0dWFsIGluc3RhbGxhdGlvbgorICAgICAgICAjIG1zaWRiQ3VzdG9tQWN0aW9uVHlwZU5vSW1wZXJzb25hdGUgKDIwNDgpOyBydW4gYWN0aW9uIGluIHN5c3RlbSBhY2NvdW50LCBub3QgdXNlciBhY2NvdW50CisgICAgICAgICgiQ29tcGlsZVB5YyIsIDE4KzEwMjQrMjA0OCwgInB5dGhvbi5leGUiLCBjb21waWxlYXJncyksCisgICAgICAgICgiQ29tcGlsZVB5byIsIDE4KzEwMjQrMjA0OCwgInB5dGhvbi5leGUiLCAiLU8gIitjb21waWxlYXJncyksCisgICAgICAgICgiQ29tcGlsZUdyYW1tYXIiLCAxOCsxMDI0KzIwNDgsICJweXRob24uZXhlIiwgbGliMnRvM2FyZ3MpLAorICAgICAgICAoIlVwZGF0ZVBpcCIsIDE4KzEwMjQrMjA0OCwgInB5dGhvbi5leGUiLCB1cGRhdGVwaXBhcmdzKSwKKyAgICAgICAgKCJSZW1vdmVQaXAiLCAxOCsxMDI0KzIwNDgsICJweXRob24uZXhlIiwgcmVtb3ZlcGlwYXJncyksCiAgICAgICAgIF0pCiAKICAgICAjIFVJIFNlcXVlbmNlcywgc2VlICJJbnN0YWxsVUlTZXF1ZW5jZSBUYWJsZSIsICJVc2luZyBhIFNlcXVlbmNlIFRhYmxlIgpAQCAtNDU5LDcgKzQ2OCw3IEBACiAKICAgICAjIFByZXBlbmQgVEFSR0VURElSIHRvIHRoZSBzeXN0ZW0gcGF0aCwgYW5kIHJlbW92ZSBpdCBvbiB1bmluc3RhbGwuCiAgICAgYWRkX2RhdGEoZGIsICJFbnZpcm9ubWVudCIsCi0gICAgICAgICAgICAgWygiUGF0aEFkZGl0aW9uIiwgIj0tKlBhdGgiLCAiW1RBUkdFVERJUl07W35dIiwgIlJFR0lTVFJZLnBhdGgiKV0pCisgICAgICAgICAgICAgWygiUGF0aEFkZGl0aW9uIiwgIj0tKlBhdGgiLCAiW1RBUkdFVERJUl07W1RBUkdFVERJUl1TY3JpcHRzO1t+XSIsICJSRUdJU1RSWS5wYXRoIildKQogCiAgICAgIyBFeGVjdXRlIFNlcXVlbmNlcwogICAgIGFkZF9kYXRhKGRiLCAiSW5zdGFsbEV4ZWN1dGVTZXF1ZW5jZSIsCkBAIC00NjksMTcgKzQ3OCwyMCBAQAogICAgICAgICAgICAgICgiU2V0TGF1bmNoZXJEaXJUb1dpbmRvd3MiLCAnTEFVTkNIRVJESVI9IiIgYW5kICcgKyBzeXMzMmNvbmQsIDc1MyksCiAgICAgICAgICAgICAgKCJTZXRMYXVuY2hlckRpclRvVGFyZ2V0IiwgJ0xBVU5DSEVSRElSPSIiIGFuZCBub3QgJyArIHN5czMyY29uZCwgNzU0KSwKICAgICAgICAgICAgICAoIlVwZGF0ZUVkaXRJRExFIiwgTm9uZSwgMTA1MCksCi0gICAgICAgICAgICAgKCJDb21waWxlUHljIiwgIkNPTVBJTEVBTEwiLCA2ODAwKSwKLSAgICAgICAgICAgICAoIkNvbXBpbGVQeW8iLCAiQ09NUElMRUFMTCIsIDY4MDEpLAotICAgICAgICAgICAgICgiQ29tcGlsZUdyYW1tYXIiLCAiQ09NUElMRUFMTCIsIDY4MDIpLAorICAgICAgICAgICAgICMgcnVuIGNvbW1hbmQgaWYgaW5zdGFsbCBzdGF0ZSBvZiBwaXAgY2hhbmdlcyB0byBJTlNUQUxMU1RBVEVfTE9DQUwKKyAgICAgICAgICAgICAjIHJ1biBhZnRlciBJbnN0YWxsRmlsZXMKKyAgICAgICAgICAgICAoIlVwZGF0ZVBpcCIsICImcGlwX2ZlYXR1cmU9MyIsIDQwMDEpLAorICAgICAgICAgICAgICMgcmVtb3ZlIHBpcCB3aGVuIHN0YXRlIGNoYW5nZXMgdG8gSU5TVEFMTFNUQVRFX0FCU0VOVAorICAgICAgICAgICAgICMgcnVuIGJlZm9yZSBSZW1vdmVGaWxlcworICAgICAgICAgICAgICgiUmVtb3ZlUGlwIiwgIiZwaXBfZmVhdHVyZT0yIiwgMzQ5OSksCisgICAgICAgICAgICAgKCJDb21waWxlUHljIiwgIkNPTVBJTEVBTEwiLCA0MDAyKSwKKyAgICAgICAgICAgICAoIkNvbXBpbGVQeW8iLCAiQ09NUElMRUFMTCIsIDQwMDMpLAorICAgICAgICAgICAgICgiQ29tcGlsZUdyYW1tYXIiLCAiQ09NUElMRUFMTCIsIDQwMDQpLAogICAgICAgICAgICAgXSkKICAgICBhZGRfZGF0YShkYiwgIkFkbWluRXhlY3V0ZVNlcXVlbmNlIiwKICAgICAgICAgICAgIFsoIkluaXRpYWxUYXJnZXREaXIiLCAnVEFSR0VURElSPSIiJywgNzUwKSwKICAgICAgICAgICAgICAoIlNldERMTERpclRvVGFyZ2V0IiwgJ0RMTERJUj0iIicsIDc1MSksCiAgICAgICAgICAgICAgKCJTZXRMYXVuY2hlckRpclRvVGFyZ2V0IiwgJ0xBVU5DSEVSRElSPSIiJywgNzUyKSwKLSAgICAgICAgICAgICAoIkNvbXBpbGVQeWMiLCAiQ09NUElMRUFMTCIsIDY4MDApLAotICAgICAgICAgICAgICgiQ29tcGlsZVB5byIsICJDT01QSUxFQUxMIiwgNjgwMSksCi0gICAgICAgICAgICAgKCJDb21waWxlR3JhbW1hciIsICJDT01QSUxFQUxMIiwgNjgwMiksCiAgICAgICAgICAgICBdKQogCiAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCkBAIC03NDgsNyArNzYwLDggQEAKICAgICBhZHZhbmNlZCA9IFB5RGlhbG9nKGRiLCAiQWR2YW5jZWREbGciLCB4LCB5LCB3LCBoLCBtb2RhbCwgdGl0bGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAiQ29tcGlsZVB5YyIsICJPayIsICJPayIpCiAgICAgYWR2YW5jZWQudGl0bGUoIkFkdmFuY2VkIE9wdGlvbnMgZm9yIFtQcm9kdWN0TmFtZV0iKQotICAgICMgQSByYWRpbyBncm91cCB3aXRoIHR3byBvcHRpb25zOiBhbGx1c2VycywganVzdG1lCisKKyAgICAjIEEgY2hlY2tib3ggd2hldGhlciB0byBidWlsZCBweWMgZmlsZXMKICAgICBhZHZhbmNlZC5jaGVja2JveCgiQ29tcGlsZVB5YyIsIDEzNSwgNjAsIDIzMCwgNTAsIDMsCiAgICAgICAgICAgICAgICAgICAgICAgIkNPTVBJTEVBTEwiLCAiQ29tcGlsZSAucHkgZmlsZXMgdG8gYnl0ZSBjb2RlIGFmdGVyIGluc3RhbGxhdGlvbiIsICJPayIpCiAKQEAgLTg0NSw3ICs4NTgsOCBAQAogICAgICMgKGkuZS4gYWRkaXRpb25hbCBQeXRob24gbGlicmFyaWVzKSBuZWVkIHRvIGZvbGxvdyB0aGUgcGFyZW50IGZlYXR1cmUuCiAgICAgIyBGZWF0dXJlcyB0aGF0IGhhdmUgbm8gYWR2ZXJ0aXNlbWVudCB0cmlnZ2VyIChlLmcuIHRoZSB0ZXN0IHN1aXRlKQogICAgICMgbXVzdCBub3Qgc3VwcG9ydCBhZHZlcnRpc2VtZW50Ci0gICAgZ2xvYmFsIGRlZmF1bHRfZmVhdHVyZSwgdGNsdGssIGh0bWxmaWxlcywgdG9vbHMsIHRlc3RzdWl0ZSwgZXh0X2ZlYXR1cmUsIHByaXZhdGVfY3J0LCBwcmVwZW5kX3BhdGgKKyAgICBnbG9iYWwgZGVmYXVsdF9mZWF0dXJlLCB0Y2x0aywgaHRtbGZpbGVzLCB0b29scywgdGVzdHN1aXRlCisgICAgZ2xvYmFsIGV4dF9mZWF0dXJlLCBwcml2YXRlX2NydCwgcHJlcGVuZF9wYXRoLCBwaXBfZmVhdHVyZQogICAgIGRlZmF1bHRfZmVhdHVyZSA9IEZlYXR1cmUoZGIsICJEZWZhdWx0RmVhdHVyZSIsICJQeXRob24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlB5dGhvbiBJbnRlcnByZXRlciBhbmQgTGlicmFyaWVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIGRpcmVjdG9yeSA9ICJUQVJHRVRESVIiKQpAQCAtODY3LDggKzg4MSwxNCBAQAogICAgIHRvb2xzID0gRmVhdHVyZShkYiwgIlRvb2xzIiwgIlV0aWxpdHkgU2NyaXB0cyIsCiAgICAgICAgICAgICAgICAgICAgICJQeXRob24gdXRpbGl0eSBzY3JpcHRzIChUb29scy8pIiwgOSwKICAgICAgICAgICAgICAgICAgICAgcGFyZW50ID0gZGVmYXVsdF9mZWF0dXJlLCBhdHRyaWJ1dGVzPTIpCisgICAgIyBwaXAgaW5zdGFsbGF0aW9uIGlzbid0IGVuYWJsZWQgYnkgZGVmYXVsdCB1bnRpbCBhIGNsZWFuIHVuaW5zdGFsbCBwcm9jZWR1cmUKKyAgICAjIGJlY29tZXMgcG9zc2libGUKKyAgICBwaXBfZmVhdHVyZSA9IEZlYXR1cmUoZGIsICJwaXBfZmVhdHVyZSIsICJwaXAiLAorICAgICAgICAgICAgICAgICAgICAiSW5zdGFsbCAob3IgdXBncmFkZSBmcm9tIGFuIGVhcmxpZXIgdmVyc2lvbikgcGlwLCAiCisgICAgICAgICAgICAgICAgICAgICJhIHRvb2wgZm9yIGluc3RhbGxpbmcgYW5kIG1hbmFnaW5nIFB5dGhvbiBwYWNrYWdlcy4iLCAxMSwKKyAgICAgICAgICAgICAgICAgICAgcGFyZW50ID0gZGVmYXVsdF9mZWF0dXJlLCBhdHRyaWJ1dGVzPTJ8OCkKICAgICB0ZXN0c3VpdGUgPSBGZWF0dXJlKGRiLCAiVGVzdHN1aXRlIiwgIlRlc3Qgc3VpdGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgIlB5dGhvbiB0ZXN0IHN1aXRlIChMaWIvdGVzdC8pIiwgMTEsCisgICAgICAgICAgICAgICAgICAgICAgICAiUHl0aG9uIHRlc3Qgc3VpdGUgKExpYi90ZXN0LykiLCAxMywKICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudCA9IGRlZmF1bHRfZmVhdHVyZSwgYXR0cmlidXRlcz0yfDgpCiAgICAgIyBwcmVwZW5kX3BhdGggaXMgYW4gYWRkaXRpb25hbCBmZWF0dXJlIHdoaWNoIGlzIHRvIGJlIG9mZiBieSBkZWZhdWx0LgogICAgICMgU2luY2UgdGhlIGRlZmF1bHQgbGV2ZWwgZm9yIHRoZSBhYm92ZSBmZWF0dXJlcyBpcyAxLCB0aGlzIG5lZWRzIHRvIGJlCkBAIC04NzYsNyArODk2LDcgQEAKICAgICBwcmVwZW5kX3BhdGggPSBGZWF0dXJlKGRiLCAiUHJlcGVuZFBhdGgiLCAiQWRkIHB5dGhvbi5leGUgdG8gUGF0aCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAiUHJlcGVuZCBbVEFSR0VURElSXSB0byB0aGUgc3lzdGVtIFBhdGggdmFyaWFibGUuICIKICAgICAgICAgICAgICAgICAgICAgICAgICJUaGlzIGFsbG93cyB5b3UgdG8gdHlwZSAncHl0aG9uJyBpbnRvIGEgY29tbWFuZCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAicHJvbXB0IHdpdGhvdXQgbmVlZGluZyB0aGUgZnVsbCBwYXRoLiIsIDEzLAorICAgICAgICAgICAgICAgICAgICAgICAgInByb21wdCB3aXRob3V0IG5lZWRpbmcgdGhlIGZ1bGwgcGF0aC4iLCAxNSwKICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudCA9IGRlZmF1bHRfZmVhdHVyZSwgYXR0cmlidXRlcz0yfDgsCiAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbD0yKQogCkBAIC05MDksOSArOTI5LDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAoIlRrIiwgInRrOCoiLCAibGljZW5zZS50ZXJtcyIpLAogICAgICAgICAgICAgICAgICAgICAgICgiVGl4IiwgInRpeC0qIiwgImxpY2Vuc2UudGVybXMiKSk6CiAgICAgICAgIG91dC53cml0ZSgiXG5UaGlzIGNvcHkgb2YgUHl0aG9uIGluY2x1ZGVzIGEgY29weSBvZiAlcywgd2hpY2ggaXMgbGljZW5zZWQgdW5kZXIgdGhlIGZvbGxvd2luZyB0ZXJtczpcblxuIiAlIG5hbWUpCi0gICAgICAgIGRpcnMgPSBnbG9iLmdsb2Ioc3JjZGlyKyIvLi4vIitwYXQpCisgICAgICAgIGRpcnMgPSBnbG9iLmdsb2Ioc3JjZGlyKyIvZXh0ZXJuYWxzLyIrcGF0KQogICAgICAgICBpZiBub3QgZGlyczoKLSAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IsICJDb3VsZCBub3QgZmluZCAiK3NyY2RpcisiLy4uLyIrcGF0CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yLCAiQ291bGQgbm90IGZpbmQgIitzcmNkaXIrIi9leHRlcm5hbHMvIitwYXQKICAgICAgICAgaWYgbGVuKGRpcnMpID4gMiBhbmQgbm90IHNuYXBzaG90OgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvciwgIk11bHRpcGxlIGNvcGllcyBvZiAiK3BhdAogICAgICAgICBkaXIgPSBkaXJzWzBdCkBAIC05NTQsOCArOTc0LDYgQEAKICAgICAjIEFkZCBhbGwgZXhlY3V0YWJsZXMsIGljb25zLCB0ZXh0IGZpbGVzIGludG8gdGhlIFRBUkdFVERJUiBjb21wb25lbnQKICAgICByb290ID0gUHlEaXJlY3RvcnkoZGIsIGNhYiwgTm9uZSwgc3JjZGlyLCAiVEFSR0VURElSIiwgIlNvdXJjZURpciIpCiAgICAgZGVmYXVsdF9mZWF0dXJlLnNldF9jdXJyZW50KCkKLSAgICBpZiBub3QgbXNpbGliLldpbjY0OgotICAgICAgICByb290LmFkZF9maWxlKCIlcy93OXhwb3Blbi5leGUiICUgUENCVUlMRCkKICAgICByb290LmFkZF9maWxlKCJSRUFETUUudHh0Iiwgc3JjPSJSRUFETUUiKQogICAgIHJvb3QuYWRkX2ZpbGUoIk5FV1MudHh0Iiwgc3JjPSJNaXNjL05FV1MiKQogICAgIGdlbmVyYXRlX2xpY2Vuc2UoKQpAQCAtOTgwLDEyICs5OTgsMTQgQEAKICAgICBpZiBsYXVuY2hlcnNyYy5sb3dlcigpID09ICdwY2J1aWxkXFxhbWQ2NCc6CiAgICAgICAgIGxhdW5jaGVyc3JjID0gJ1BDQnVpbGQnCiAgICAgbGF1bmNoZXIgPSBvcy5wYXRoLmpvaW4oc3JjZGlyLCBsYXVuY2hlcnNyYywgInB5LmV4ZSIpCi0gICAgbGF1bmNoZXJkaXIuc3RhcnRfY29tcG9uZW50KCJsYXVuY2hlciIsIGZsYWdzID0gOCsyNTYsIGtleWZpbGU9InB5LmV4ZSIpCisgICAgbGF1bmNoZXJkaXIuc3RhcnRfY29tcG9uZW50KCJsYXVuY2hlciIsIGZsYWdzID0gOCsyNTYsIGtleWZpbGU9InB5LmV4ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV1aWQ9IntCNTEwNzQwMi02OTU4LTQ2MUItOEIwQS00MDM3RDMzMjcxNjB9IikKICAgICBsYXVuY2hlcmRpci5hZGRfZmlsZShsYXVuY2hlciwKICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uPWluc3RhbGxlci5GaWxlVmVyc2lvbihsYXVuY2hlciwgMCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2U9aW5zdGFsbGVyLkZpbGVWZXJzaW9uKGxhdW5jaGVyLCAxKSkKICAgICBsYXVuY2hlcncgPSBvcy5wYXRoLmpvaW4oc3JjZGlyLCBsYXVuY2hlcnNyYywgInB5dy5leGUiKQotICAgIGxhdW5jaGVyZGlyLnN0YXJ0X2NvbXBvbmVudCgibGF1bmNoZXJ3IiwgZmxhZ3MgPSA4KzI1Niwga2V5ZmlsZT0icHl3LmV4ZSIpCisgICAgbGF1bmNoZXJkaXIuc3RhcnRfY29tcG9uZW50KCJsYXVuY2hlcnciLCBmbGFncyA9IDgrMjU2LCBrZXlmaWxlPSJweXcuZXhlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXVpZD0iezhFNTJCOENELTQ4QkItNEQ3NC04NENELTYyMzhCQ0QxMUYyMH0iKQogICAgIGxhdW5jaGVyZGlyLmFkZF9maWxlKGxhdW5jaGVydywKICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uPWluc3RhbGxlci5GaWxlVmVyc2lvbihsYXVuY2hlcncsIDApLAogICAgICAgICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlPWluc3RhbGxlci5GaWxlVmVyc2lvbihsYXVuY2hlcncsIDEpKQpAQCAtMTA5Nyw3ICsxMTE3LDcgQEAKICAgICAgICAgICAgIGxpYi5zdGFydF9jb21wb25lbnQoIlRrRExMcyIsIHRjbHRrKQogICAgICAgICAgICAgbGliLmFkZF9maWxlKCJfdGtpbnRlci5weWQiKQogICAgICAgICAgICAgZGxscy5hcHBlbmQoIl90a2ludGVyLnB5ZCIpCi0gICAgICAgICAgICB0Y2xkaXIgPSBvcy5wYXRoLm5vcm1wYXRoKHNyY2RpcisoIi8uLi90Y2x0ayVzL2JpbiIgJSB0Y2xzdWZmaXgpKQorICAgICAgICAgICAgdGNsZGlyID0gb3MucGF0aC5ub3JtcGF0aChzcmNkaXIrKCIvZXh0ZXJuYWxzL3RjbHRrJXMvYmluIiAlIHRjbHN1ZmZpeCkpCiAgICAgICAgICAgICBmb3IgZiBpbiBnbG9iLmdsb2IxKHRjbGRpciwgIiouZGxsIik6CiAgICAgICAgICAgICAgICAgbGliLmFkZF9maWxlKGYsIHNyYz1vcy5wYXRoLmpvaW4odGNsZGlyLCBmKSkKICAgICAjIGNoZWNrIHdoZXRoZXIgdGhlcmUgYXJlIGFueSB1bmtub3duIGV4dGVuc2lvbnMKQEAgLTExMjIsNyArMTE0Miw3IEBACiAgICAgICAgIGxpYi5hZGRfZmlsZSgnbGlicHl0aG9uJXMlcy5hJyAlIChtYWpvciwgbWlub3IpKQogICAgIGlmIGhhdmVfdGNsOgogICAgICAgICAjIEFkZCBUY2wvVGsKLSAgICAgICAgdGNsZGlycyA9IFsocm9vdCwgJy4uL3RjbHRrJXMvbGliJyAlIHRjbHN1ZmZpeCwgJ3RjbCcpXQorICAgICAgICB0Y2xkaXJzID0gWyhyb290LCAnZXh0ZXJuYWxzL3RjbHRrJXMvbGliJyAlIHRjbHN1ZmZpeCwgJ3RjbCcpXQogICAgICAgICB0Y2x0ay5zZXRfY3VycmVudCgpCiAgICAgICAgIHdoaWxlIHRjbGRpcnM6CiAgICAgICAgICAgICBwYXJlbnQsIHBoeXMsIGRpciA9IHRjbGRpcnMucG9wKCkKQEAgLTExNDAsNyArMTE2MCw3IEBACiAgICAgZm9yIGYgaW4gWydpMThuJywgJ3B5bmNoZScsICdTY3JpcHRzJ106CiAgICAgICAgIGxpYiA9IFB5RGlyZWN0b3J5KGRiLCBjYWIsIHRvb2xkaXIsIGYsIGYsICIlc3wlcyIgJSAodG9vbGRpci5tYWtlX3Nob3J0KGYpLCBmKSkKICAgICAgICAgbGliLmdsb2IoIioucHkiKQotICAgICAgICBsaWIuZ2xvYigiKi5weXciLCBleGNsdWRlPVsncHlkb2NndWkucHl3J10pCisgICAgICAgIGxpYi5nbG9iKCIqLnB5dyIpCiAgICAgICAgIGxpYi5yZW1vdmVfcHljKCkKICAgICAgICAgbGliLmdsb2IoIioudHh0IikKICAgICAgICAgaWYgZiA9PSAicHluY2hlIjoKQEAgLTExNTIsOSArMTE3Miw2IEBACiAgICAgICAgICAgICBsaWIuYWRkX2ZpbGUoIjJ0bzMucHkiLCBzcmM9IjJ0bzMiKQogICAgICAgICAgICAgbGliLmFkZF9maWxlKCJweWRvYzMucHkiLCBzcmM9InB5ZG9jMyIpCiAgICAgICAgICAgICBsaWIuYWRkX2ZpbGUoInB5dmVudi5weSIsIHNyYz0icHl2ZW52IikKLSAgICAgICAgICAgIGlmIGhhdmVfdGNsOgotICAgICAgICAgICAgICAgIGxpYi5zdGFydF9jb21wb25lbnQoInB5ZG9jZ3VpLnB5dyIsIHRjbHRrLCBrZXlmaWxlPSJweWRvY2d1aS5weXciKQotICAgICAgICAgICAgICAgIGxpYi5hZGRfZmlsZSgicHlkb2NndWkucHl3IikKICAgICAjIEFkZCBkb2N1bWVudGF0aW9uCiAgICAgaHRtbGZpbGVzLnNldF9jdXJyZW50KCkKICAgICBsaWIgPSBQeURpcmVjdG9yeShkYiwgY2FiLCByb290LCAiRG9jIiwgIkRvYyIsICJET0N8RG9jIikKQEAgLTExODUsNiArMTIwMiw4IEBACiAgICAgICAgICAgICAgICAiRG9jdW1lbnRhdGlvbiIpLAogICAgICAgICAgICAgICAoIlJFR0lTVFJZLnBhdGgiLCBtc2lsaWIuZ2VuX3V1aWQoKSwgIlRBUkdFVERJUiIsIHJlZ2lzdHJ5X2NvbXBvbmVudCwgTm9uZSwKICAgICAgICAgICAgICAgTm9uZSksCisgICAgICAgICAgICAgICgiUkVHSVNUUlkuZW5zdXJlcGlwIiwgbXNpbGliLmdlbl91dWlkKCksICJUQVJHRVRESVIiLCByZWdpc3RyeV9jb21wb25lbnQsICJFbnN1cmVQaXBSdW4iLAorICAgICAgICAgICAgICBOb25lKSwKICAgICAgICAgICAgICAgKCJSRUdJU1RSWS5kZWYiLCBtc2lsaWIuZ2VuX3V1aWQoKSwgIlRBUkdFVERJUiIsIHJlZ2lzdHJ5X2NvbXBvbmVudCwKICAgICAgICAgICAgICAgIE5vbmUsIE5vbmUpXSArIHRjbGRhdGEpCiAgICAgIyBTZWUgIkZlYXR1cmVDb21wb25lbnRzIFRhYmxlIi4KQEAgLTEyMDIsNiArMTIyMSw3IEBACiAgICAgICAgICAgICAgWyhkZWZhdWx0X2ZlYXR1cmUuaWQsICJSRUdJU1RSWSIpLAogICAgICAgICAgICAgICAoaHRtbGZpbGVzLmlkLCAiUkVHSVNUUlkuZG9jIiksCiAgICAgICAgICAgICAgIChwcmVwZW5kX3BhdGguaWQsICJSRUdJU1RSWS5wYXRoIiksCisgICAgICAgICAgICAgIChwaXBfZmVhdHVyZS5pZCwgIlJFR0lTVFJZLmVuc3VyZXBpcCIpLAogICAgICAgICAgICAgICAoZXh0X2ZlYXR1cmUuaWQsICJSRUdJU1RSWS5kZWYiKV0gKwogICAgICAgICAgICAgICB0Y2xkYXRhCiAgICAgICAgICAgICAgICkKQEAgLTEyNjksNiArMTI4OSwxMCBAQAogICAgICAgICAgICAgICAiezYwMjU0Q0E1LTk1M0ItMTFDRi04Qzk2LTAwQUEwMEI4NzA4Q30iLCAiUkVHSVNUUlkuZGVmIiksCiAgICAgICAgICAgICBdKQogCisgICAgIyBQQVRIRVhUCisgICAgYWRkX2RhdGEoZGIsICJFbnZpcm9ubWVudCIsCisgICAgICAgICAgICAgWygiUGF0aEV4dEFkZGl0aW9uIiwgIj0tKlBhdGhFeHQiLCAiW35dOy5QWSIsICJSRUdJU1RSWS5kZWYiKV0pCisKICAgICAjIFJlZ2lzdHJ5IGtleXMKICAgICBwcmVmaXggPSByIlNvZnR3YXJlXCVzUHl0aG9uXFB5dGhvbkNvcmVcJXMiICUgKHRlc3RwcmVmaXgsIHNob3J0X3ZlcnNpb24pCiAgICAgYWRkX2RhdGEoZGIsICJSZWdpc3RyeSIsCkBAIC0xMjg0LDcgKzEzMDgsOSBAQAogICAgICAgICAgICAgICAgIiIsIHIiW1RBUkdFVERJUl1QeXRob24uZXhlIiwgIlJFR0lTVFJZLmRlZiIpLAogICAgICAgICAgICAgICAoIkRpc3BsYXlJY29uIiwgLTEsCiAgICAgICAgICAgICAgICByIlNvZnR3YXJlXE1pY3Jvc29mdFxXaW5kb3dzXEN1cnJlbnRWZXJzaW9uXFVuaW5zdGFsbFwlcyIgJSBwcm9kdWN0X2NvZGUsCi0gICAgICAgICAgICAgICAiRGlzcGxheUljb24iLCAiW1RBUkdFVERJUl1weXRob24uZXhlIiwgIlJFR0lTVFJZIikKKyAgICAgICAgICAgICAgICJEaXNwbGF5SWNvbiIsICJbVEFSR0VURElSXXB5dGhvbi5leGUiLCAiUkVHSVNUUlkiKSwKKyAgICAgICAgICAgICAgIyBGYWtlIHJlZ2lzdHJ5IGVudHJ5IHRvIGFsbG93IGluc3RhbGxlciB0byB0cmFjayB3aGV0aGVyIGVuc3VyZXBpcCBoYXMgYmVlbiBydW4KKyAgICAgICAgICAgICAgKCJFbnN1cmVQaXBSdW4iLCAtMSwgcHJlZml4K3IiXEVuc3VyZVBpcFJ1biIsICIiLCAiIzEiLCAiUkVHSVNUUlkuZW5zdXJlcGlwIiksCiAgICAgICAgICAgICAgIF0pCiAgICAgIyBTaG9ydGN1dHMsIHNlZSAiU2hvcnRjdXQgVGFibGUiCiAgICAgYWRkX2RhdGEoZGIsICJEaXJlY3RvcnkiLApAQCAtMTI5MywyNyArMTMxOSwzOCBAQAogICAgIGFkZF9kYXRhKGRiLCAiUmVtb3ZlRmlsZSIsCiAgICAgICAgICAgICAgWygiTWVudURpciIsICJUQVJHRVRESVIiLCBOb25lLCAiTWVudURpciIsIDIpXSkKICAgICB0Y2x0a3Nob3J0Y3V0cyA9IFtdCisgICAgaWYgbXNpbGliLldpbjY0OgorICAgICAgICBiaXR0ZWQgPSAiNjQgYml0IgorICAgIGVsc2U6CisgICAgICAgIGJpdHRlZCA9ICIzMiBiaXQiCiAgICAgaWYgaGF2ZV90Y2w6CiAgICAgICAgIHRjbHRrc2hvcnRjdXRzID0gWwotICAgICAgICAgICAgICAoIklETEUiLCAiTWVudURpciIsICJJRExFfElETEUgKFB5dGhvbiBHVUkpIiwgInB5dGhvbncuZXhlIiwKLSAgICAgICAgICAgICAgIHRjbHRrLmlkLCByJyJbVEFSR0VURElSXUxpYlxpZGxlbGliXGlkbGUucHl3IicsIE5vbmUsIE5vbmUsICJweXRob25faWNvbi5leGUiLCAwLCBOb25lLCAiVEFSR0VURElSIiksCi0gICAgICAgICAgICAgICgiUHlEb2MiLCAiTWVudURpciIsICJNT0RET0NTfE1vZHVsZSBEb2NzIiwgInB5dGhvbncuZXhlIiwKLSAgICAgICAgICAgICAgIHRjbHRrLmlkLCByJyJbVEFSR0VURElSXVRvb2xzXHNjcmlwdHNccHlkb2NndWkucHl3IicsIE5vbmUsIE5vbmUsICJweXRob25faWNvbi5leGUiLCAwLCBOb25lLCAiVEFSR0VURElSIiksCisgICAgICAgICAgICAgICgiSURMRSIsICJNZW51RGlyIiwKKyAgICAgICAgICAgICAgICJJRExFfElETEUgKFB5dGhvbiAiK3Nob3J0X3ZlcnNpb24rIiBHVUkgLSAiK2JpdHRlZCsiKSIsCisgICAgICAgICAgICAgICAicHl0aG9udy5leGUiLCB0Y2x0ay5pZCwgciciW1RBUkdFVERJUl1MaWJcaWRsZWxpYlxpZGxlLnB5dyInLAorICAgICAgICAgICAgICAgTm9uZSwgTm9uZSwgInB5dGhvbl9pY29uLmV4ZSIsIDAsIE5vbmUsICJUQVJHRVRESVIiKSwKICAgICAgICAgICAgICAgXQogICAgIGFkZF9kYXRhKGRiLCAiU2hvcnRjdXQiLAogICAgICAgICAgICAgIHRjbHRrc2hvcnRjdXRzICsKICAgICAgICAgICAgICBbIyBBZHZlcnRpc2VkIHNob3J0Y3V0czogdGFyZ2V0cyBhcmUgZmVhdHVyZXMsIG5vdCBmaWxlcwotICAgICAgICAgICAgICAoIlB5dGhvbiIsICJNZW51RGlyIiwgIlBZVEhPTnxQeXRob24gKGNvbW1hbmQgbGluZSkiLCAicHl0aG9uLmV4ZSIsCi0gICAgICAgICAgICAgICBkZWZhdWx0X2ZlYXR1cmUuaWQsIE5vbmUsIE5vbmUsIE5vbmUsICJweXRob25faWNvbi5leGUiLCAyLCBOb25lLCAiVEFSR0VURElSIiksCisgICAgICAgICAgICAgICgiUHl0aG9uIiwgIk1lbnVEaXIiLAorICAgICAgICAgICAgICAgIlBZVEhPTnxQeXRob24gIitzaG9ydF92ZXJzaW9uKyIgKGNvbW1hbmQgbGluZSAtICIrYml0dGVkKyIpIiwKKyAgICAgICAgICAgICAgICJweXRob24uZXhlIiwgZGVmYXVsdF9mZWF0dXJlLmlkLCBOb25lLCBOb25lLCBOb25lLAorICAgICAgICAgICAgICAgInB5dGhvbl9pY29uLmV4ZSIsIDIsIE5vbmUsICJUQVJHRVRESVIiKSwKICAgICAgICAgICAgICAgIyBBZHZlcnRpc2luZyB0aGUgTWFudWFsIGJyZWFrcyBvbiAoc29tZT8pIFdpbjk4LCBhbmQgdGhlIHNob3J0Y3V0IGxhY2tzIGFuCiAgICAgICAgICAgICAgICMgaWNvbiBmaXJzdC4KICAgICAgICAgICAgICAgIygiTWFudWFsIiwgIk1lbnVEaXIiLCAiTUFOVUFMfFB5dGhvbiBNYW51YWxzIiwgImRvY3VtZW50YXRpb24iLAogICAgICAgICAgICAgICAjIGh0bWxmaWxlcy5pZCwgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSksCiAgICAgICAgICAgICAgICMjIE5vbi1hZHZlcnRpc2VkIHNob3J0Y3V0czogbXVzdCBiZSBhc3NvY2lhdGVkIHdpdGggYSByZWdpc3RyeSBjb21wb25lbnQKLSAgICAgICAgICAgICAgKCJNYW51YWwiLCAiTWVudURpciIsICJNQU5VQUx8UHl0aG9uIE1hbnVhbHMiLCAiUkVHSVNUUlkuZG9jIiwKLSAgICAgICAgICAgICAgICJbIyVzXSIgJSBkb2NmaWxlLCBOb25lLAotICAgICAgICAgICAgICAgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSksCi0gICAgICAgICAgICAgICgiVW5pbnN0YWxsIiwgIk1lbnVEaXIiLCAiVU5JTlNUfFVuaW5zdGFsbCBQeXRob24iLCAiUkVHSVNUUlkiLAorICAgICAgICAgICAgICAoIk1hbnVhbCIsICJNZW51RGlyIiwgIk1BTlVBTHxQeXRob24gIitzaG9ydF92ZXJzaW9uKyIgTWFudWFscyIsCisgICAgICAgICAgICAgICAiUkVHSVNUUlkuZG9jIiwgIlsjJXNdIiAlIGRvY2ZpbGUsCisgICAgICAgICAgICAgICBOb25lLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCBOb25lKSwKKyAgICAgICAgICAgICAgKCJQeURvYyIsICJNZW51RGlyIiwKKyAgICAgICAgICAgICAgICJNT0RET0NTfFB5dGhvbiAiK3Nob3J0X3ZlcnNpb24rIiBEb2NzIFNlcnZlciAocHlkb2MgLSAiKworICAgICAgICAgICAgICAgYml0dGVkKyIpIiwgInB5dGhvbi5leGUiLCBkZWZhdWx0X2ZlYXR1cmUuaWQsIHInLW0gcHlkb2MgLWInLAorICAgICAgICAgICAgICAgTm9uZSwgTm9uZSwgInB5dGhvbl9pY29uLmV4ZSIsIDAsIE5vbmUsICJUQVJHRVRESVIiKSwKKyAgICAgICAgICAgICAgKCJVbmluc3RhbGwiLCAiTWVudURpciIsICJVTklOU1R8VW5pbnN0YWxsIFB5dGhvbiAiKworICAgICAgICAgICAgICAgc2hvcnRfdmVyc2lvbisiICgiK2JpdHRlZCsiKSIsICJSRUdJU1RSWSIsCiAgICAgICAgICAgICAgICBTeXN0ZW1Gb2xkZXJOYW1lKyJtc2lleGVjIiwgICIveCVzIiAlIHByb2R1Y3RfY29kZSwKICAgICAgICAgICAgICAgIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUpLAogICAgICAgICAgICAgICBdKQpkaWZmIC0tZ2l0IGEvVG9vbHMvcGFyc2VyL3VucGFyc2UucHkgYi9Ub29scy9wYXJzZXIvdW5wYXJzZS5weQppbmRleCBiNTVlMmM2Li44MzdjZDgxIDEwMDY0NAotLS0gYS9Ub29scy9wYXJzZXIvdW5wYXJzZS5weQorKysgYi9Ub29scy9wYXJzZXIvdW5wYXJzZS5weQpAQCAtMzA3LDYgKzMwNyw5IEBACiAgICAgZGVmIF9OYW1lKHNlbGYsIHQpOgogICAgICAgICBzZWxmLndyaXRlKHQuaWQpCiAKKyAgICBkZWYgX05hbWVDb25zdGFudChzZWxmLCB0KToKKyAgICAgICAgc2VsZi53cml0ZShyZXByKHQudmFsdWUpKQorCiAgICAgZGVmIF9OdW0oc2VsZiwgdCk6CiAgICAgICAgICMgU3Vic3RpdHV0ZSBvdmVyZmxvd2luZyBkZWNpbWFsIGxpdGVyYWwgZm9yIEFTVCBpbmZpbml0aWVzLgogICAgICAgICBzZWxmLndyaXRlKHJlcHIodC5uKS5yZXBsYWNlKCJpbmYiLCBJTkZTVFIpKQpAQCAtNTE1LDEwICs1MTgsMTAgQEAKICAgICAgICAgICAgIGVsc2U6IHNlbGYud3JpdGUoIiwgIikKICAgICAgICAgICAgIHNlbGYud3JpdGUoIioiKQogICAgICAgICAgICAgaWYgdC52YXJhcmc6Ci0gICAgICAgICAgICAgICAgc2VsZi53cml0ZSh0LnZhcmFyZykKLSAgICAgICAgICAgICAgICBpZiB0LnZhcmFyZ2Fubm90YXRpb246CisgICAgICAgICAgICAgICAgc2VsZi53cml0ZSh0LnZhcmFyZy5hcmcpCisgICAgICAgICAgICAgICAgaWYgdC52YXJhcmcuYW5ub3RhdGlvbjoKICAgICAgICAgICAgICAgICAgICAgc2VsZi53cml0ZSgiOiAiKQotICAgICAgICAgICAgICAgICAgICBzZWxmLmRpc3BhdGNoKHQudmFyYXJnYW5ub3RhdGlvbikKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5kaXNwYXRjaCh0LnZhcmFyZy5hbm5vdGF0aW9uKQogCiAgICAgICAgICMga2V5d29yZC1vbmx5IGFyZ3VtZW50cwogICAgICAgICBpZiB0Lmt3b25seWFyZ3M6CkBAIC01MzQsMTAgKzUzNywxMCBAQAogICAgICAgICBpZiB0Lmt3YXJnOgogICAgICAgICAgICAgaWYgZmlyc3Q6Zmlyc3QgPSBGYWxzZQogICAgICAgICAgICAgZWxzZTogc2VsZi53cml0ZSgiLCAiKQotICAgICAgICAgICAgc2VsZi53cml0ZSgiKioiK3Qua3dhcmcpCi0gICAgICAgICAgICBpZiB0Lmt3YXJnYW5ub3RhdGlvbjoKKyAgICAgICAgICAgIHNlbGYud3JpdGUoIioqIit0Lmt3YXJnLmFyZykKKyAgICAgICAgICAgIGlmIHQua3dhcmcuYW5ub3RhdGlvbjoKICAgICAgICAgICAgICAgICBzZWxmLndyaXRlKCI6ICIpCi0gICAgICAgICAgICAgICAgc2VsZi5kaXNwYXRjaCh0Lmt3YXJnYW5ub3RhdGlvbikKKyAgICAgICAgICAgICAgICBzZWxmLmRpc3BhdGNoKHQua3dhcmcuYW5ub3RhdGlvbikKIAogICAgIGRlZiBfa2V5d29yZChzZWxmLCB0KToKICAgICAgICAgc2VsZi53cml0ZSh0LmFyZykKZGlmZiAtLWdpdCBhL1Rvb2xzL3B5bmNoZS9Db2xvckRCLnB5IGIvVG9vbHMvcHluY2hlL0NvbG9yREIucHkKaW5kZXggZmNmMWI4Ny4uNWNlZDBlNyAxMDA2NDQKLS0tIGEvVG9vbHMvcHluY2hlL0NvbG9yREIucHkKKysrIGIvVG9vbHMvcHluY2hlL0NvbG9yREIucHkKQEAgLTIzLDcgKzIzLDYgQEAKIGltcG9ydCBzeXMKIGltcG9ydCByZQogZnJvbSB0eXBlcyBpbXBvcnQgKgotaW1wb3J0IG9wZXJhdG9yCiAKIGNsYXNzIEJhZENvbG9yKEV4Y2VwdGlvbik6CiAgICAgcGFzcwpAQCAtMjMwLDkgKzIyOSw4IEBACiAgICAgcmV0dXJuIGhleG5hbWUKIAogCi1fbWF4dHVwbGUgPSAoMjU2LjAsKSAqIDMKIGRlZiB0cmlwbGV0X3RvX2ZyYWN0aW9uYWxfcmdiKHJnYnR1cGxlKToKLSAgICByZXR1cm4gbGlzdChtYXAob3BlcmF0b3IuX19kaXZfXywgcmdidHVwbGUsIF9tYXh0dXBsZSkpCisgICAgcmV0dXJuIFt4IC8gMjU2IGZvciB4IGluIHJnYnR1cGxlXQogCiAKIGRlZiB0cmlwbGV0X3RvX2JyaWdodG5lc3MocmdidHVwbGUpOgpkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy9SRUFETUUgYi9Ub29scy9zY3JpcHRzL1JFQURNRQppbmRleCBkNjVkMWZkLi5jNmIyMjgyIDEwMDY0NAotLS0gYS9Ub29scy9zY3JpcHRzL1JFQURNRQorKysgYi9Ub29scy9zY3JpcHRzL1JFQURNRQpAQCAtMiw2NCArMiw2OCBAQAogdXNlZnVsIHdoaWxlIGJ1aWxkaW5nLCBleHRlbmRpbmcgb3IgbWFuYWdpbmcgUHl0aG9uLiAgU29tZSAoZS5nLiwgZHV0cmVlIG9yIGxsbCkKIGFyZSBhbHNvIGdlbmVyYWxseSB1c2VmdWwgVU5JWCB0b29scy4KIAotMnRvMyAgICAgICAgICAgICAgICAgICAgTWFpbiBzY3JpcHQgZm9yIHJ1bm5pbmcgdGhlIDJ0bzMgY29udmVyc2lvbiB0b29sCi1hbmFseXplX2R4cC5weSAgICAgICAgICBBbmFseXplcyB0aGUgcmVzdWx0IG9mIHN5cy5nZXRkeHAoKQotYnlleHQucHkgICAgICAgICAgICAgICAgUHJpbnQgbGluZXMvd29yZHMvY2hhcnMgc3RhdHMgb2YgZmlsZXMgYnkgZXh0ZW5zaW9uCi1ieXRleWVhcnMucHkgICAgICAgICAgICBQcmludCBwcm9kdWN0IG9mIGEgZmlsZSdzIHNpemUgYW5kIGFnZQotY2hlY2tweWMucHkgICAgICAgICAgICAgQ2hlY2sgcHJlc2VuY2UgYW5kIHZhbGlkaXR5IG9mICIucHljIiBmaWxlcwotY2xlYW5mdXR1cmUucHkgICAgICAgICAgRml4IHJlZHVuZGFudCBQeXRob24gX19mdXR1cmVfXyBzdGF0ZW1lbnRzCi1jb21iaW5lcmVmcy5weSAgICAgICAgICBBIGhlbHBlciBmb3IgYW5hbHl6aW5nIFBZVEhPTkRVTVBSRUZTIG91dHB1dAotY29weXRpbWUucHkgICAgICAgICAgICAgQ29weSBvbmUgZmlsZSdzIGF0aW1lIGFuZCBtdGltZSB0byBhbm90aGVyCi1jcmxmLnB5ICAgICAgICAgICAgICAgICBDaGFuZ2UgQ1JMRiBsaW5lIGVuZGluZ3MgdG8gTEYgKFdpbmRvd3MgdG8gVW5peCkKLWRiMnBpY2tsZS5weSAgICAgICAgICAgIER1bXAgYSBkYXRhYmFzZSBmaWxlIHRvIGEgcGlja2xlCi1kaWZmLnB5ICAgICAgICAgICAgICAgICBQcmludCBmaWxlIGRpZmZzIGluIGNvbnRleHQsIHVuaWZpZWQsIG9yIG5kaWZmIGZvcm1hdHMKLWR1dHJlZS5weSAgICAgICAgICAgICAgIEZvcm1hdCBkdSgxKSBvdXRwdXQgYXMgYSB0cmVlIHNvcnRlZCBieSBzaXplCi1lcHRhZ3MucHkgICAgICAgICAgICAgICBDcmVhdGUgRW1hY3MgVEFHUyBmaWxlIGZvciBQeXRob24gbW9kdWxlcwotZmluZF9yZWN1cnNpb25saW1pdC5weSAgRmluZCB0aGUgbWF4aW11bSByZWN1cnNpb24gbGltaXQgb24gdGhpcyBtYWNoaW5lCi1maW5kZGl2LnB5ICAgICAgICAgICAgICBBIGdyZXAtbGlrZSB0b29sIHRoYXQgbG9va3MgZm9yIGRpdmlzaW9uIG9wZXJhdG9ycwotZmluZGxpbmtzdG8ucHkgICAgICAgICAgUmVjdXJzaXZlbHkgZmluZCBzeW1ib2xpYyBsaW5rcyB0byBhIGdpdmVuIHBhdGggcHJlZml4Ci1maW5kbm9jb2RpbmcucHkgICAgICAgICBGaW5kIHNvdXJjZSBmaWxlcyB3aGljaCBuZWVkIGFuIGVuY29kaW5nIGRlY2xhcmF0aW9uCi1maXhjaWQucHkgICAgICAgICAgICAgICBNYXNzaXZlIGlkZW50aWZpZXIgc3Vic3RpdHV0aW9uIG9uIEMgc291cmNlIGZpbGVzCi1maXhkaXYucHkgICAgICAgICAgICAgICBUb29sIHRvIGZpeCBkaXZpc2lvbiBvcGVyYXRvcnMuCi1maXhoZWFkZXIucHkgICAgICAgICAgICBBZGQgc29tZSBjcHAgbWFnaWMgdG8gYSBDIGluY2x1ZGUgZmlsZQotZml4bm90aWNlLnB5ICAgICAgICAgICAgRml4IHRoZSBjb3B5cmlnaHQgbm90aWNlIGluIHNvdXJjZSBmaWxlcwotZml4cHMucHkgICAgICAgICAgICAgICAgRml4IFB5dGhvbiBzY3JpcHRzJyBmaXJzdCBsaW5lIChpZiAjISkKLWZ0cG1pcnJvci5weSAgICAgICAgICAgIEZUUCBtaXJyb3Igc2NyaXB0Ci1nb29nbGUucHkgICAgICAgICAgICAgICBPcGVuIGEgd2ViYnJvd3NlciB3aXRoIEdvb2dsZQotZ3Byb2YyaHRtbC5weSAgICAgICAgICAgVHJhbnNmb3JtIGdwcm9mKDEpIG91dHB1dCBpbnRvIHVzZWZ1bCBIVE1MCi1oMnB5LnB5ICAgICAgICAgICAgICAgICBUcmFuc2xhdGUgI2RlZmluZSdzIGludG8gUHl0aG9uIGFzc2lnbm1lbnRzCi1oaWdobGlnaHQucHkgICAgICAgICAgICBQeXRob24gc3ludGF4IGhpZ2hsaWdodGluZyB3aXRoIEhUTUwgb3V0cHV0Ci1pZGxlMyAgICAgICAgICAgICAgICAgICBNYWluIHByb2dyYW0gdG8gc3RhcnQgSURMRQotaWZkZWYucHkgICAgICAgICAgICAgICAgUmVtb3ZlICNpZihuKWRlZiBncm91cHMgZnJvbSBDIHNvdXJjZXMKLWxmY3IucHkgICAgICAgICAgICAgICAgIENoYW5nZSBMRiBsaW5lIGVuZGluZ3MgdG8gQ1JMRiAoVW5peCB0byBXaW5kb3dzKQotbGlua3RyZWUucHkgICAgICAgICAgICAgTWFrZSBhIGNvcHkgb2YgYSB0cmVlIHdpdGggbGlua3MgdG8gb3JpZ2luYWwgZmlsZXMKLWxsbC5weSAgICAgICAgICAgICAgICAgIEZpbmQgYW5kIGxpc3Qgc3ltYm9saWMgbGlua3MgaW4gY3VycmVudCBkaXJlY3RvcnkKLW1haWxlcmRhZW1vbi5weSAgICAgICAgIFBhcnNlIGVycm9yIG1lc3NhZ2VzIGZyb20gbWFpbGVyIGRhZW1vbnMgKFNqb2VyZCZKYWNrKQotbWFrZV9jdHlwZS5weSAgICAgICAgICAgR2VuZXJhdGUgY3R5cGUuaCByZXBsYWNlbWVudCBpbiBzdHJpbmdvYmplY3QuYwotbWQ1c3VtLnB5ICAgICAgICAgICAgICAgUHJpbnQgTUQ1IGNoZWNrc3VtcyBvZiBhcmd1bWVudCBmaWxlcwotbWtyZWFsLnB5ICAgICAgICAgICAgICAgVHVybiBhIHN5bWJvbGljIGxpbmsgaW50byBhIHJlYWwgZmlsZSBvciBkaXJlY3RvcnkKLW5kaWZmLnB5ICAgICAgICAgICAgICAgIEludGVsbGlnZW50IGRpZmYgYmV0d2VlbiB0ZXh0IGZpbGVzIChUaW0gUGV0ZXJzKQotbm0yZGVmLnB5ICAgICAgICAgICAgICAgQ3JlYXRlIGEgdGVtcGxhdGUgZm9yIFBDL3B5dGhvbl9udC5kZWYgKE1hcmMgTGVtYnVyZykKLW9iamdyYXBoLnB5ICAgICAgICAgICAgIFByaW50IG9iamVjdCBncmFwaCBmcm9tIG5tIG91dHB1dCBvbiBhIGxpYnJhcnkKLXBhcnNlZW50aXRpZXMucHkgICAgICAgIFV0aWxpdHkgZm9yIHBhcnNpbmcgSFRNTCBlbnRpdHkgZGVmaW5pdGlvbnMKLXBhdGNoY2hlY2sucHkgICAgICAgICAgIFBlcmZvcm0gY29tbW9uIGNoZWNrcyBhbmQgY2xlYW51cCBiZWZvcmUgY29tbWl0dGluZwotcGF0aGZpeC5weSAgICAgICAgICAgICAgQ2hhbmdlICMhL3Vzci9sb2NhbC9iaW4vcHl0aG9uIGludG8gc29tZXRoaW5nIGVsc2UKLXBkZXBzLnB5ICAgICAgICAgICAgICAgIFByaW50IGRlcGVuZGVuY2llcyBiZXR3ZWVuIFB5dGhvbiBtb2R1bGVzCi1waWNrbGUyZGIucHkgICAgICAgICAgICBMb2FkIGEgcGlja2xlIGdlbmVyYXRlZCBieSBkYjJwaWNrbGUucHkgdG8gYSBkYXRhYmFzZQotcGluZGVudC5weSAgICAgICAgICAgICAgSW5kZW50IFB5dGhvbiBjb2RlLCBnaXZpbmcgYmxvY2stY2xvc2luZyBjb21tZW50cwotcHRhZ3MucHkgICAgICAgICAgICAgICAgQ3JlYXRlIHZpIHRhZ3MgZmlsZSBmb3IgUHl0aG9uIG1vZHVsZXMKLXB5ZG9jMyAgICAgICAgICAgICAgICAgIFB5dGhvbiBkb2N1bWVudGF0aW9uIGJyb3dzZXIKLXB5c291cmNlLnB5ICAgICAgICAgICAgIEZpbmQgUHl0aG9uIHNvdXJjZSBmaWxlcwotcmVkZW1vLnB5ICAgICAgICAgICAgICAgQmFzaWMgcmVndWxhciBleHByZXNzaW9uIGRlbW9uc3RyYXRpb24gZmFjaWxpdHkKLXJlaW5kZW50LnB5ICAgICAgICAgICAgIENoYW5nZSAucHkgZmlsZXMgdG8gdXNlIDQtc3BhY2UgaW5kZW50cwotcmVpbmRlbnQtcnN0LnB5ICAgICAgICAgRml4LXVwIHJlU3RydWN0dXJlZFRleHQgZmlsZSB3aGl0ZXNwYWNlCi1yZ3JlcC5weSAgICAgICAgICAgICAgICBSZXZlcnNlIGdyZXAgdGhyb3VnaCBhIGZpbGUgKHVzZWZ1bCBmb3IgYmlnIGxvZ2ZpbGVzKQotcnVuX3Rlc3RzLnB5ICAgICAgICAgICAgUnVuIHRoZSB0ZXN0IHN1aXRlIHdpdGggbW9yZSBzZW5zaWJsZSBkZWZhdWx0IG9wdGlvbnMKLXNlcnZlLnB5ICAgICAgICAgICAgICAgIFNtYWxsIHdzZ2lyZWYtYmFzZWQgd2ViIHNlcnZlciwgdXNlZCBpbiBtYWtlIHNlcnZlIGluIERvYwotc3VmZi5weSAgICAgICAgICAgICAgICAgU29ydCBhIGxpc3Qgb2YgZmlsZXMgYnkgc3VmZml4Ci1zdm5lb2wucHkgICAgICAgICAgICAgICBTZXQgc3ZuOmVvbC1zdHlsZSBvbiBhbGwgZmlsZXMgaW4gZGlyZWN0b3J5Ci10ZXhpMmh0bWwucHkgICAgICAgICAgICBDb252ZXJ0IEdOVSB0ZXhpbmZvIGZpbGVzIGludG8gSFRNTAotdHJlZXN5bmMucHkgICAgICAgICAgICAgU3luY2hyb25pemUgc291cmNlIHRyZWVzICh2ZXJ5IGlkaW9zeW5jcmF0aWMpCi11bnRhYmlmeS5weSAgICAgICAgICAgICBSZXBsYWNlIHRhYnMgd2l0aCBzcGFjZXMgaW4gYXJndW1lbnQgZmlsZXMKLXdpbl9hZGQycGF0aC5weSAgICAgICAgIEFkZCBQeXRob24gdG8gdGhlIHNlYXJjaCBwYXRoIG9uIFdpbmRvd3MKLXdoaWNoLnB5ICAgICAgICAgICAgICAgIEZpbmQgYSBwcm9ncmFtIGluICRQQVRICisydG8zICAgICAgICAgICAgICAgICAgICAgIE1haW4gc2NyaXB0IGZvciBydW5uaW5nIHRoZSAydG8zIGNvbnZlcnNpb24gdG9vbAorYWJpdHlwZS5weSAgICAgICAgICAgICAgICBDb252ZXJ0cyBhIEMgZmlsZSB0byB1c2UgdGhlIFBFUCAzODQgdHlwZSBkZWZpbml0aW9uIEFQSQorYW5hbHl6ZV9keHAucHkgICAgICAgICAgICBBbmFseXplcyB0aGUgcmVzdWx0IG9mIHN5cy5nZXRkeHAoKQorYnlleHQucHkgICAgICAgICAgICAgICAgICBQcmludCBsaW5lcy93b3Jkcy9jaGFycyBzdGF0cyBvZiBmaWxlcyBieSBleHRlbnNpb24KK2J5dGV5ZWFycy5weSAgICAgICAgICAgICAgUHJpbnQgcHJvZHVjdCBvZiBhIGZpbGUncyBzaXplIGFuZCBhZ2UKK2NoZWNrcHljLnB5ICAgICAgICAgICAgICAgQ2hlY2sgcHJlc2VuY2UgYW5kIHZhbGlkaXR5IG9mICIucHljIiBmaWxlcworY2xlYW5mdXR1cmUucHkgICAgICAgICAgICBGaXggcmVkdW5kYW50IFB5dGhvbiBfX2Z1dHVyZV9fIHN0YXRlbWVudHMKK2NvbWJpbmVyZWZzLnB5ICAgICAgICAgICAgQSBoZWxwZXIgZm9yIGFuYWx5emluZyBQWVRIT05EVU1QUkVGUyBvdXRwdXQKK2NvcHl0aW1lLnB5ICAgICAgICAgICAgICAgQ29weSBvbmUgZmlsZSdzIGF0aW1lIGFuZCBtdGltZSB0byBhbm90aGVyCitjcmxmLnB5ICAgICAgICAgICAgICAgICAgIENoYW5nZSBDUkxGIGxpbmUgZW5kaW5ncyB0byBMRiAoV2luZG93cyB0byBVbml4KQorZGIycGlja2xlLnB5ICAgICAgICAgICAgICBEdW1wIGEgZGF0YWJhc2UgZmlsZSB0byBhIHBpY2tsZQorZGlmZi5weSAgICAgICAgICAgICAgICAgICBQcmludCBmaWxlIGRpZmZzIGluIGNvbnRleHQsIHVuaWZpZWQsIG9yIG5kaWZmIGZvcm1hdHMKK2R1dHJlZS5weSAgICAgICAgICAgICAgICAgRm9ybWF0IGR1KDEpIG91dHB1dCBhcyBhIHRyZWUgc29ydGVkIGJ5IHNpemUKK2VwdGFncy5weSAgICAgICAgICAgICAgICAgQ3JlYXRlIEVtYWNzIFRBR1MgZmlsZSBmb3IgUHl0aG9uIG1vZHVsZXMKK2ZpbmRkaXYucHkgICAgICAgICAgICAgICAgQSBncmVwLWxpa2UgdG9vbCB0aGF0IGxvb2tzIGZvciBkaXZpc2lvbiBvcGVyYXRvcnMKK2ZpbmRsaW5rc3RvLnB5ICAgICAgICAgICAgUmVjdXJzaXZlbHkgZmluZCBzeW1ib2xpYyBsaW5rcyB0byBhIGdpdmVuIHBhdGggcHJlZml4CitmaW5kbm9jb2RpbmcucHkgICAgICAgICAgIEZpbmQgc291cmNlIGZpbGVzIHdoaWNoIG5lZWQgYW4gZW5jb2RpbmcgZGVjbGFyYXRpb24KK2ZpbmRfcmVjdXJzaW9ubGltaXQucHkgICAgRmluZCB0aGUgbWF4aW11bSByZWN1cnNpb24gbGltaXQgb24gdGhpcyBtYWNoaW5lCitmaW5kLXVuYW1lLnB5ICAgICAgICAgICAgIExvb2sgZm9yIHRoZSBnaXZlbiBhcmd1bWVudHMgaW4gdGhlIHNldHMgb2YgYWxsIFVuaWNvZGUgbmFtZXMKK2ZpeGNpZC5weSAgICAgICAgICAgICAgICAgTWFzc2l2ZSBpZGVudGlmaWVyIHN1YnN0aXR1dGlvbiBvbiBDIHNvdXJjZSBmaWxlcworZml4ZGl2LnB5ICAgICAgICAgICAgICAgICBUb29sIHRvIGZpeCBkaXZpc2lvbiBvcGVyYXRvcnMuCitmaXhoZWFkZXIucHkgICAgICAgICAgICAgIEFkZCBzb21lIGNwcCBtYWdpYyB0byBhIEMgaW5jbHVkZSBmaWxlCitmaXhub3RpY2UucHkgICAgICAgICAgICAgIEZpeCB0aGUgY29weXJpZ2h0IG5vdGljZSBpbiBzb3VyY2UgZmlsZXMKK2ZpeHBzLnB5ICAgICAgICAgICAgICAgICAgRml4IFB5dGhvbiBzY3JpcHRzJyBmaXJzdCBsaW5lIChpZiAjISkKK2Z0cG1pcnJvci5weSAgICAgICAgICAgICAgRlRQIG1pcnJvciBzY3JpcHQKK2dldC1yZW1vdGUtY2VydGlmaWNhdGUucHkgRmV0Y2ggdGhlIGNlcnRpZmljYXRlIHRoYXQgdGhlIHNlcnZlcihzKSBhcmUgcHJvdmlkaW5nIGluIFBFTSBmb3JtCitnb29nbGUucHkgICAgICAgICAgICAgICAgIE9wZW4gYSB3ZWJicm93c2VyIHdpdGggR29vZ2xlCitncHJvZjJodG1sLnB5ICAgICAgICAgICAgIFRyYW5zZm9ybSBncHJvZigxKSBvdXRwdXQgaW50byB1c2VmdWwgSFRNTAoraDJweS5weSAgICAgICAgICAgICAgICAgICBUcmFuc2xhdGUgI2RlZmluZSdzIGludG8gUHl0aG9uIGFzc2lnbm1lbnRzCitoaWdobGlnaHQucHkgICAgICAgICAgICAgIFB5dGhvbiBzeW50YXggaGlnaGxpZ2h0aW5nIHdpdGggSFRNTCBvdXRwdXQKK2lkbGUzICAgICAgICAgICAgICAgICAgICAgTWFpbiBwcm9ncmFtIHRvIHN0YXJ0IElETEUKK2lmZGVmLnB5ICAgICAgICAgICAgICAgICAgUmVtb3ZlICNpZihuKWRlZiBncm91cHMgZnJvbSBDIHNvdXJjZXMKK2ltcG9ydF9kaWFnbm9zdGljcy5weSAgICAgTWlzY2VsbGFuZW91cyBkaWFnbm9zdGljcyBmb3IgdGhlIGltcG9ydCBzeXN0ZW0KK2xmY3IucHkgICAgICAgICAgICAgICAgICAgQ2hhbmdlIExGIGxpbmUgZW5kaW5ncyB0byBDUkxGIChVbml4IHRvIFdpbmRvd3MpCitsaW5rdHJlZS5weSAgICAgICAgICAgICAgIE1ha2UgYSBjb3B5IG9mIGEgdHJlZSB3aXRoIGxpbmtzIHRvIG9yaWdpbmFsIGZpbGVzCitsbGwucHkgICAgICAgICAgICAgICAgICAgIEZpbmQgYW5kIGxpc3Qgc3ltYm9saWMgbGlua3MgaW4gY3VycmVudCBkaXJlY3RvcnkKK21haWxlcmRhZW1vbi5weSAgICAgICAgICAgUGFyc2UgZXJyb3IgbWVzc2FnZXMgZnJvbSBtYWlsZXIgZGFlbW9ucyAoU2pvZXJkJkphY2spCittYWtlX2N0eXBlLnB5ICAgICAgICAgICAgIEdlbmVyYXRlIGN0eXBlLmggcmVwbGFjZW1lbnQgaW4gc3RyaW5nb2JqZWN0LmMKK21kNXN1bS5weSAgICAgICAgICAgICAgICAgUHJpbnQgTUQ1IGNoZWNrc3VtcyBvZiBhcmd1bWVudCBmaWxlcworbWtyZWFsLnB5ICAgICAgICAgICAgICAgICBUdXJuIGEgc3ltYm9saWMgbGluayBpbnRvIGEgcmVhbCBmaWxlIG9yIGRpcmVjdG9yeQorbmRpZmYucHkgICAgICAgICAgICAgICAgICBJbnRlbGxpZ2VudCBkaWZmIGJldHdlZW4gdGV4dCBmaWxlcyAoVGltIFBldGVycykKK25tMmRlZi5weSAgICAgICAgICAgICAgICAgQ3JlYXRlIGEgdGVtcGxhdGUgZm9yIFBDL3B5dGhvbl9udC5kZWYgKE1hcmMgTGVtYnVyZykKK29iamdyYXBoLnB5ICAgICAgICAgICAgICAgUHJpbnQgb2JqZWN0IGdyYXBoIGZyb20gbm0gb3V0cHV0IG9uIGEgbGlicmFyeQorcGFyc2VlbnRpdGllcy5weSAgICAgICAgICBVdGlsaXR5IGZvciBwYXJzaW5nIEhUTUwgZW50aXR5IGRlZmluaXRpb25zCitwYXJzZV9odG1sNV9lbnRpdGllcy5weSAgIFV0aWxpdHkgZm9yIHBhcnNpbmcgSFRNTDUgZW50aXR5IGRlZmluaXRpb25zCitwYXRjaGNoZWNrLnB5ICAgICAgICAgICAgIFBlcmZvcm0gY29tbW9uIGNoZWNrcyBhbmQgY2xlYW51cCBiZWZvcmUgY29tbWl0dGluZworcGF0aGZpeC5weSAgICAgICAgICAgICAgICBDaGFuZ2UgIyEvdXNyL2xvY2FsL2Jpbi9weXRob24gaW50byBzb21ldGhpbmcgZWxzZQorcGRlcHMucHkgICAgICAgICAgICAgICAgICBQcmludCBkZXBlbmRlbmNpZXMgYmV0d2VlbiBQeXRob24gbW9kdWxlcworcGlja2xlMmRiLnB5ICAgICAgICAgICAgICBMb2FkIGEgcGlja2xlIGdlbmVyYXRlZCBieSBkYjJwaWNrbGUucHkgdG8gYSBkYXRhYmFzZQorcGluZGVudC5weSAgICAgICAgICAgICAgICBJbmRlbnQgUHl0aG9uIGNvZGUsIGdpdmluZyBibG9jay1jbG9zaW5nIGNvbW1lbnRzCitwdGFncy5weSAgICAgICAgICAgICAgICAgIENyZWF0ZSB2aSB0YWdzIGZpbGUgZm9yIFB5dGhvbiBtb2R1bGVzCitweWRvYzMgICAgICAgICAgICAgICAgICAgIFB5dGhvbiBkb2N1bWVudGF0aW9uIGJyb3dzZXIKK3B5c291cmNlLnB5ICAgICAgICAgICAgICAgRmluZCBQeXRob24gc291cmNlIGZpbGVzCityZWluZGVudC5weSAgICAgICAgICAgICAgIENoYW5nZSAucHkgZmlsZXMgdG8gdXNlIDQtc3BhY2UgaW5kZW50cworcmVpbmRlbnQtcnN0LnB5ICAgICAgICAgICBGaXgtdXAgcmVTdHJ1Y3R1cmVkVGV4dCBmaWxlIHdoaXRlc3BhY2UKK3JncmVwLnB5ICAgICAgICAgICAgICAgICAgUmV2ZXJzZSBncmVwIHRocm91Z2ggYSBmaWxlICh1c2VmdWwgZm9yIGJpZyBsb2dmaWxlcykKK3J1bl90ZXN0cy5weSAgICAgICAgICAgICAgUnVuIHRoZSB0ZXN0IHN1aXRlIHdpdGggbW9yZSBzZW5zaWJsZSBkZWZhdWx0IG9wdGlvbnMKK3NlcnZlLnB5ICAgICAgICAgICAgICAgICAgU21hbGwgd3NnaXJlZi1iYXNlZCB3ZWIgc2VydmVyLCB1c2VkIGluIG1ha2Ugc2VydmUgaW4gRG9jCitzdWZmLnB5ICAgICAgICAgICAgICAgICAgIFNvcnQgYSBsaXN0IG9mIGZpbGVzIGJ5IHN1ZmZpeAorc3ZuZW9sLnB5ICAgICAgICAgICAgICAgICBTZXQgc3ZuOmVvbC1zdHlsZSBvbiBhbGwgZmlsZXMgaW4gZGlyZWN0b3J5Cit0ZXhpMmh0bWwucHkgICAgICAgICAgICAgIENvbnZlcnQgR05VIHRleGluZm8gZmlsZXMgaW50byBIVE1MCit0cmVlc3luYy5weSAgICAgICAgICAgICAgIFN5bmNocm9uaXplIHNvdXJjZSB0cmVlcyAodmVyeSBpZGlvc3luY3JhdGljKQordW50YWJpZnkucHkgICAgICAgICAgICAgICBSZXBsYWNlIHRhYnMgd2l0aCBzcGFjZXMgaW4gYXJndW1lbnQgZmlsZXMKK3doaWNoLnB5ICAgICAgICAgICAgICAgICAgRmluZCBhIHByb2dyYW0gaW4gJFBBVEgKK3dpbl9hZGQycGF0aC5weSAgICAgICAgICAgQWRkIFB5dGhvbiB0byB0aGUgc2VhcmNoIHBhdGggb24gV2luZG93cwpkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy9ieWV4dC5weSBiL1Rvb2xzL3NjcmlwdHMvYnlleHQucHkKaW5kZXggYjc5ZmYzNy4uNzM2YTQ0MSAxMDA3NTUKLS0tIGEvVG9vbHMvc2NyaXB0cy9ieWV4dC5weQorKysgYi9Ub29scy9zY3JpcHRzL2J5ZXh0LnB5CkBAIC0yNSw3ICsyNSw3IEBACiAgICAgICAgIHNlbGYuYWRkc3RhdHMoIjxkaXI+IiwgImRpcnMiLCAxKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBuYW1lcyA9IG9zLmxpc3RkaXIoZGlyKQotICAgICAgICBleGNlcHQgb3MuZXJyb3IgYXMgZXJyOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJDYW4ndCBsaXN0ICVzOiAlc1xuIiAlIChkaXIsIGVycikpCiAgICAgICAgICAgICBzZWxmLmFkZHN0YXRzKCI8ZGlyPiIsICJ1bmxpc3RhYmxlIiwgMSkKICAgICAgICAgICAgIHJldHVybgpkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy9ieXRleWVhcnMucHkgYi9Ub29scy9zY3JpcHRzL2J5dGV5ZWFycy5weQppbmRleCA0OTBiMzdmLi5mNThjMzQ2IDEwMDc1NQotLS0gYS9Ub29scy9zY3JpcHRzL2J5dGV5ZWFycy5weQorKysgYi9Ub29scy9zY3JpcHRzL2J5dGV5ZWFycy5weQpAQCAtNDMsNyArNDMsNyBAQAogICAgIGZvciBmaWxlbmFtZSBpbiBzeXMuYXJndlsxOl06CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHN0ID0gc3RhdGZ1bmMoZmlsZW5hbWUpCi0gICAgICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBtc2c6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIG1zZzoKICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoImNhbid0IHN0YXQgJXI6ICVyXG4iICUgKGZpbGVuYW1lLCBtc2cpKQogICAgICAgICAgICAgc3RhdHVzID0gMQogICAgICAgICAgICAgc3QgPSAoKQpkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy9jaGVja3BpcC5weSBiL1Rvb2xzL3NjcmlwdHMvY2hlY2twaXAucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOGE2NGVkYQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL3NjcmlwdHMvY2hlY2twaXAucHkKQEAgLTAsMCArMSwzMiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMworIiIiCitDaGVja3MgdGhhdCB0aGUgdmVyc2lvbiBvZiB0aGUgcHJvamVjdHMgYnVuZGxlZCBpbiBlbnN1cmVwaXAgYXJlIHRoZSBsYXRlc3QKK3ZlcnNpb25zIGF2YWlsYWJsZS4KKyIiIgoraW1wb3J0IGVuc3VyZXBpcAoraW1wb3J0IGpzb24KK2ltcG9ydCB1cmxsaWIucmVxdWVzdAoraW1wb3J0IHN5cworCisKK2RlZiBtYWluKCk6CisgICAgb3V0b2ZkYXRlID0gRmFsc2UKKworICAgIGZvciBwcm9qZWN0LCB2ZXJzaW9uIGluIGVuc3VyZXBpcC5fUFJPSkVDVFM6CisgICAgICAgIGRhdGEgPSBqc29uLmxvYWRzKHVybGxpYi5yZXF1ZXN0LnVybG9wZW4oCisgICAgICAgICAgICAiaHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS97fS9qc29uIi5mb3JtYXQocHJvamVjdCksCisgICAgICAgICAgICBjYWRlZmF1bHQ9VHJ1ZSwKKyAgICAgICAgKS5yZWFkKCkuZGVjb2RlKCJ1dGY4IikpCisgICAgICAgIHVwc3RyZWFtX3ZlcnNpb24gPSBkYXRhWyJpbmZvIl1bInZlcnNpb24iXQorCisgICAgICAgIGlmIHZlcnNpb24gIT0gdXBzdHJlYW1fdmVyc2lvbjoKKyAgICAgICAgICAgIG91dG9mZGF0ZSA9IFRydWUKKyAgICAgICAgICAgIHByaW50KCJUaGUgbGF0ZXN0IHZlcnNpb24gb2Yge30gb24gUHlQSSBpcyB7fSwgYnV0IGVuc3VyZXBpcCAiCisgICAgICAgICAgICAgICAgICAiaGFzIHt9Ii5mb3JtYXQocHJvamVjdCwgdXBzdHJlYW1fdmVyc2lvbiwgdmVyc2lvbikpCisKKyAgICBpZiBvdXRvZmRhdGU6CisgICAgICAgIHN5cy5leGl0KDEpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBtYWluKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvY2hlY2tweWMucHkgYi9Ub29scy9zY3JpcHRzL2NoZWNrcHljLnB5CmluZGV4IGQ0ZmRjZTIuLmJiYWEzZDEgMTAwNzU1Ci0tLSBhL1Rvb2xzL3NjcmlwdHMvY2hlY2tweWMucHkKKysrIGIvVG9vbHMvc2NyaXB0cy9jaGVja3B5Yy5weQpAQCAtNSwxMSArNSwxMSBAQAogaW1wb3J0IHN5cwogaW1wb3J0IG9zCiBmcm9tIHN0YXQgaW1wb3J0IFNUX01USU1FCi1pbXBvcnQgaW1wCitpbXBvcnQgaW1wb3J0bGliLnV0aWwKIAogIyBQRVAgMzE0NyBjb21wYXRpYmlsaXR5IChQWUMgUmVwb3NpdG9yeSBEaXJlY3RvcmllcykKLWNhY2hlX2Zyb21fc291cmNlID0gKGltcC5jYWNoZV9mcm9tX3NvdXJjZSBpZiBoYXNhdHRyKGltcCwgJ2dldF90YWcnKSBlbHNlCi0gICAgICAgICAgICAgICAgICAgICBsYW1iZGEgcGF0aDogcGF0aCArICdjJykKK2NhY2hlX2Zyb21fc291cmNlID0gKGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlIGlmIHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWcKKyAgICAgICAgICAgICAgICAgICAgIGVsc2UgbGFtYmRhIHBhdGg6IHBhdGggKyAnYycpCiAKIAogZGVmIG1haW4oKToKQEAgLTE4LDEzICsxOCwxMyBAQAogICAgICAgICBzaWxlbnQgPSAoc3lzLmFyZ3ZbMV0gPT0gJy1zJykKICAgICBlbHNlOgogICAgICAgICB2ZXJib3NlID0gc2lsZW50ID0gRmFsc2UKLSAgICBNQUdJQyA9IGltcC5nZXRfbWFnaWMoKQorICAgIE1BR0lDID0gaW1wb3J0bGliLnV0aWwuTUFHSUNfTlVNQkVSCiAgICAgaWYgbm90IHNpbGVudDoKICAgICAgICAgcHJpbnQoJ1VzaW5nIE1BR0lDIHdvcmQnLCByZXByKE1BR0lDKSkKICAgICBmb3IgZGlybmFtZSBpbiBzeXMucGF0aDoKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgbmFtZXMgPSBvcy5saXN0ZGlyKGRpcm5hbWUpCi0gICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBwcmludCgnQ2Fubm90IGxpc3QgZGlyZWN0b3J5JywgcmVwcihkaXJuYW1lKSkKICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgIGlmIG5vdCBzaWxlbnQ6CkBAIC0zNCw3ICszNCw3IEBACiAgICAgICAgICAgICAgICAgbmFtZSA9IG9zLnBhdGguam9pbihkaXJuYW1lLCBuYW1lKQogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgc3QgPSBvcy5zdGF0KG5hbWUpCi0gICAgICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgICAgICBwcmludCgnQ2Fubm90IHN0YXQnLCByZXByKG5hbWUpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgICAgIGlmIHZlcmJvc2U6CmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL2NvcHl0aW1lLnB5IGIvVG9vbHMvc2NyaXB0cy9jb3B5dGltZS5weQppbmRleCBlMDIyMGI1Li43MTU2ODNmIDEwMDc1NQotLS0gYS9Ub29scy9zY3JpcHRzL2NvcHl0aW1lLnB5CisrKyBiL1Rvb2xzL3NjcmlwdHMvY29weXRpbWUucHkKQEAgLTEzLDEyICsxMywxMiBAQAogICAgIGZpbGUxLCBmaWxlMiA9IHN5cy5hcmd2WzFdLCBzeXMuYXJndlsyXQogICAgIHRyeToKICAgICAgICAgc3RhdDEgPSBvcy5zdGF0KGZpbGUxKQotICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgc3lzLnN0ZGVyci53cml0ZShmaWxlMSArICc6IGNhbm5vdCBzdGF0XG4nKQogICAgICAgICBzeXMuZXhpdCgxKQogICAgIHRyeToKICAgICAgICAgb3MudXRpbWUoZmlsZTIsIChzdGF0MVtTVF9BVElNRV0sIHN0YXQxW1NUX01USU1FXSkpCi0gICAgZXhjZXB0IG9zLmVycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICBzeXMuc3RkZXJyLndyaXRlKGZpbGUyICsgJzogY2Fubm90IGNoYW5nZSB0aW1lXG4nKQogICAgICAgICBzeXMuZXhpdCgyKQogCmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL2RpZmYucHkgYi9Ub29scy9zY3JpcHRzL2RpZmYucHkKaW5kZXggZjliMTRiZi4uOGJlNTI3ZiAxMDA3NTUKLS0tIGEvVG9vbHMvc2NyaXB0cy9kaWZmLnB5CisrKyBiL1Rvb2xzL3NjcmlwdHMvZGlmZi5weQpAQCAtMzgsOSArMzgsOSBAQAogCiAgICAgZnJvbWRhdGUgPSBmaWxlX210aW1lKGZyb21maWxlKQogICAgIHRvZGF0ZSA9IGZpbGVfbXRpbWUodG9maWxlKQotICAgIHdpdGggb3Blbihmcm9tZmlsZSwgJ1UnKSBhcyBmZjoKKyAgICB3aXRoIG9wZW4oZnJvbWZpbGUpIGFzIGZmOgogICAgICAgICBmcm9tbGluZXMgPSBmZi5yZWFkbGluZXMoKQotICAgIHdpdGggb3Blbih0b2ZpbGUsICdVJykgYXMgdGY6CisgICAgd2l0aCBvcGVuKHRvZmlsZSkgYXMgdGY6CiAgICAgICAgIHRvbGluZXMgPSB0Zi5yZWFkbGluZXMoKQogCiAgICAgaWYgb3B0aW9ucy51OgpkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy9maW5kZGl2LnB5IGIvVG9vbHMvc2NyaXB0cy9maW5kZGl2LnB5CmluZGV4IGYyNGE3MDIuLmE3MDVmNTYgMTAwNzU1Ci0tLSBhL1Rvb2xzL3NjcmlwdHMvZmluZGRpdi5weQorKysgYi9Ub29scy9zY3JpcHRzL2ZpbmRkaXYucHkKQEAgLTcwLDcgKzcwLDcgQEAKIGRlZiBwcm9jZXNzZGlyKGRpciwgbGlzdG5hbWVzKToKICAgICB0cnk6CiAgICAgICAgIG5hbWVzID0gb3MubGlzdGRpcihkaXIpCi0gICAgZXhjZXB0IG9zLmVycm9yIGFzIG1zZzoKKyAgICBleGNlcHQgT1NFcnJvciBhcyBtc2c6CiAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIkNhbid0IGxpc3QgZGlyZWN0b3J5OiAlc1xuIiAlIGRpcikKICAgICAgICAgcmV0dXJuIDEKICAgICBmaWxlcyA9IFtdCmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL2ZpbmRsaW5rc3RvLnB5IGIvVG9vbHMvc2NyaXB0cy9maW5kbGlua3N0by5weQppbmRleCBiNGMwOWVmLi5iOTI0ZjI3IDEwMDc1NQotLS0gYS9Ub29scy9zY3JpcHRzL2ZpbmRsaW5rc3RvLnB5CisrKyBiL1Rvb2xzL3NjcmlwdHMvZmluZGxpbmtzdG8ucHkKQEAgLTM2LDcgKzM2LDcgQEAKICAgICAgICAgICAgIGxpbmt0byA9IG9zLnJlYWRsaW5rKG5hbWUpCiAgICAgICAgICAgICBpZiBwcm9nLnNlYXJjaChsaW5rdG8pIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgIHByaW50KG5hbWUsICctPicsIGxpbmt0bykKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvZml4Y2lkLnB5IGIvVG9vbHMvc2NyaXB0cy9maXhjaWQucHkKaW5kZXggODdlMmEwOS4uMWU0YzQyOCAxMDA3NTUKLS0tIGEvVG9vbHMvc2NyaXB0cy9maXhjaWQucHkKKysrIGIvVG9vbHMvc2NyaXB0cy9maXhjaWQucHkKQEAgLTk3LDcgKzk3LDcgQEAKICAgICBiYWQgPSAwCiAgICAgdHJ5OgogICAgICAgICBuYW1lcyA9IG9zLmxpc3RkaXIoZGlybmFtZSkKLSAgICBleGNlcHQgb3MuZXJyb3IgYXMgbXNnOgorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIG1zZzoKICAgICAgICAgZXJyKGRpcm5hbWUgKyAnOiBjYW5ub3QgbGlzdCBkaXJlY3Rvcnk6ICcgKyBzdHIobXNnKSArICdcbicpCiAgICAgICAgIHJldHVybiAxCiAgICAgbmFtZXMuc29ydCgpCkBAIC0xNzUsMTcgKzE3NSwxNyBAQAogICAgIHRyeToKICAgICAgICAgc3RhdGJ1ZiA9IG9zLnN0YXQoZmlsZW5hbWUpCiAgICAgICAgIG9zLmNobW9kKHRlbXBuYW1lLCBzdGF0YnVmW1NUX01PREVdICYgMG83Nzc3KQotICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBtc2c6CisgICAgZXhjZXB0IE9TRXJyb3IgYXMgbXNnOgogICAgICAgICBlcnIodGVtcG5hbWUgKyAnOiB3YXJuaW5nOiBjaG1vZCBmYWlsZWQgKCcgKyBzdHIobXNnKSArICcpXG4nKQogICAgICMgVGhlbiBtYWtlIGEgYmFja3VwIG9mIHRoZSBvcmlnaW5hbCBmaWxlIGFzIGZpbGVuYW1lfgogICAgIHRyeToKICAgICAgICAgb3MucmVuYW1lKGZpbGVuYW1lLCBmaWxlbmFtZSArICd+JykKLSAgICBleGNlcHQgb3MuZXJyb3IgYXMgbXNnOgorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIG1zZzoKICAgICAgICAgZXJyKGZpbGVuYW1lICsgJzogd2FybmluZzogYmFja3VwIGZhaWxlZCAoJyArIHN0cihtc2cpICsgJylcbicpCiAgICAgIyBOb3cgbW92ZSB0aGUgdGVtcCBmaWxlIHRvIHRoZSBvcmlnaW5hbCBmaWxlCiAgICAgdHJ5OgogICAgICAgICBvcy5yZW5hbWUodGVtcG5hbWUsIGZpbGVuYW1lKQotICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBtc2c6CisgICAgZXhjZXB0IE9TRXJyb3IgYXMgbXNnOgogICAgICAgICBlcnIoZmlsZW5hbWUgKyAnOiByZW5hbWUgZmFpbGVkICgnICsgc3RyKG1zZykgKyAnKVxuJykKICAgICAgICAgcmV0dXJuIDEKICAgICAjIFJldHVybiBzdWNjZXNzCmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL2ZpeGRpdi5weSBiL1Rvb2xzL3NjcmlwdHMvZml4ZGl2LnB5CmluZGV4IDRlY2JlYTEuLjIwZjMzODYgMTAwNzU1Ci0tLSBhL1Rvb2xzL3NjcmlwdHMvZml4ZGl2LnB5CisrKyBiL1Rvb2xzL3NjcmlwdHMvZml4ZGl2LnB5CkBAIC0zMzUsOCArMzM1LDYgQEAKICAgICAgICAgc2VsZi5idWZmZXIuYXBwZW5kKGxpbmUpCiAgICAgICAgIHNlbGYubGluZW5vICs9IDEKICAgICAgICAgcmV0dXJuIGxpbmUKLSAgICBkZWYgdHJ1bmNhdGUoc2VsZik6Ci0gICAgICAgIGRlbCBzZWxmLmJ1ZmZlclstd2luZG93Ol0KICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaW5kZXgpOgogICAgICAgICBzZWxmLmZpbGwoKQogICAgICAgICBidWZzdGFydCA9IHNlbGYubGluZW5vIC0gbGVuKHNlbGYuYnVmZmVyKQpkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy9ncHJvZjJodG1sLnB5IGIvVG9vbHMvc2NyaXB0cy9ncHJvZjJodG1sLnB5CmluZGV4IGFkODI4MzUuLjRjYTcwNWMgMTAwNzU1Ci0tLSBhL1Rvb2xzL3NjcmlwdHMvZ3Byb2YyaHRtbC5weQorKysgYi9Ub29scy9zY3JpcHRzL2dwcm9mMmh0bWwucHkKQEAgLTIsNyArMiwxMSBAQAogCiAiIiJUcmFuc2Zvcm0gZ3Byb2YoMSkgb3V0cHV0IGludG8gdXNlZnVsIEhUTUwuIiIiCiAKLWltcG9ydCByZSwgb3MsIHN5cywgY2dpLCB3ZWJicm93c2VyCitpbXBvcnQgaHRtbAoraW1wb3J0IG9zCitpbXBvcnQgcmUKK2ltcG9ydCBzeXMKK2ltcG9ydCB3ZWJicm93c2VyCiAKIGhlYWRlciA9ICIiIlwKIDxodG1sPgpAQCAtMjIsNyArMjYsNyBAQAogZGVmIGFkZF9lc2NhcGVzKGZpbGVuYW1lKToKICAgICB3aXRoIG9wZW4oZmlsZW5hbWUpIGFzIGZwOgogICAgICAgICBmb3IgbGluZSBpbiBmcDoKLSAgICAgICAgICAgIHlpZWxkIGNnaS5lc2NhcGUobGluZSkKKyAgICAgICAgICAgIHlpZWxkIGh0bWwuZXNjYXBlKGxpbmUpCiAKIAogZGVmIG1haW4oKToKZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvaDJweS5weSBiL1Rvb2xzL3NjcmlwdHMvaDJweS5weQppbmRleCA0Zjg3MWQ5Li4wOTY3ZmMyIDEwMDc1NQotLS0gYS9Ub29scy9zY3JpcHRzL2gycHkucHkKKysrIGIvVG9vbHMvc2NyaXB0cy9oMnB5LnB5CkBAIC0yOSw3ICsyOSw3IEBACiAgICdeW1x0IF0qI1tcdCBdKmRlZmluZVtcdCBdKycKICAgJyhbYS16QS1aMC05X10rKVwoKFtfYS16QS1aXVtfYS16QS1aMC05XSopXClbXHQgXSsnKQogCi1wX2luY2x1ZGUgPSByZS5jb21waWxlKCdeW1x0IF0qI1tcdCBdKmluY2x1ZGVbXHQgXSs8KFthLXpBLVowLTlfL1wuXSspJykKK3BfaW5jbHVkZSA9IHJlLmNvbXBpbGUoJ15bXHQgXSojW1x0IF0qaW5jbHVkZVtcdCBdKzwoW14+XG5dKyk+JykKIAogcF9jb21tZW50ID0gcmUuY29tcGlsZShyJy9cKihbXipdK3xcKitbXi9dKSooXCorLyk/JykKIHBfY3BwX2NvbW1lbnQgPSByZS5jb21waWxlKCcvLy4qJykKZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvaGlnaGxpZ2h0LnB5IGIvVG9vbHMvc2NyaXB0cy9oaWdobGlnaHQucHkKaW5kZXggYWZmNWNhZS4uNjZhZDg2OCAxMDA3NTUKLS0tIGEvVG9vbHMvc2NyaXB0cy9oaWdobGlnaHQucHkKKysrIGIvVG9vbHMvc2NyaXB0cy9oaWdobGlnaHQucHkKQEAgLTMsMTEgKzMsMTIgQEAKIAogX19hdXRob3JfXyA9ICdSYXltb25kIEhldHRpbmdlcicKIAotaW1wb3J0IGtleXdvcmQsIHRva2VuaXplLCBjZ2ksIHJlLCBmdW5jdG9vbHMKLXRyeToKLSAgICBpbXBvcnQgYnVpbHRpbnMKLWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICBpbXBvcnQgX19idWlsdGluX18gYXMgYnVpbHRpbnMKK2ltcG9ydCBidWlsdGlucworaW1wb3J0IGZ1bmN0b29scworaW1wb3J0IGh0bWwgYXMgaHRtbF9tb2R1bGUKK2ltcG9ydCBrZXl3b3JkCitpbXBvcnQgcmUKK2ltcG9ydCB0b2tlbml6ZQogCiAjIyMjIEFuYWx5emUgUHl0aG9uIFNvdXJjZSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIApAQCAtMTAxLDcgKzEwMiw3IEBACiAgICAgZm9yIGtpbmQsIHRleHQgaW4gY2xhc3NpZmllZF90ZXh0OgogICAgICAgICBpZiBraW5kOgogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnPHNwYW4gY2xhc3M9IiVzIj4nICUga2luZCkKLSAgICAgICAgcmVzdWx0LmFwcGVuZChjZ2kuZXNjYXBlKHRleHQpKQorICAgICAgICByZXN1bHQuYXBwZW5kKGh0bWxfbW9kdWxlLmVzY2FwZSh0ZXh0KSkKICAgICAgICAgaWYga2luZDoKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJzwvc3Bhbj4nKQogICAgIHJlc3VsdC5hcHBlbmQoY2xvc2VyKQpAQCAtMTQwLDcgKzE0MSw3IEBACiAgICAgJ0NyZWF0ZSBhIGNvbXBsZXRlIEhUTUwgcGFnZSB3aXRoIGNvbG9yaXplZCBzb3VyY2UgY29kZScKICAgICBjc3Nfc3RyID0gJ1xuJy5qb2luKFsnJXMgJXMnICUgaXRlbSBmb3IgaXRlbSBpbiBjc3MuaXRlbXMoKV0pCiAgICAgcmVzdWx0ID0gaHRtbF9oaWdobGlnaHQoY2xhc3NpZmllZF90ZXh0KQotICAgIHRpdGxlID0gY2dpLmVzY2FwZSh0aXRsZSkKKyAgICB0aXRsZSA9IGh0bWxfbW9kdWxlLmVzY2FwZSh0aXRsZSkKICAgICByZXR1cm4gaHRtbC5mb3JtYXQodGl0bGU9dGl0bGUsIGNzcz1jc3Nfc3RyLCBib2R5PXJlc3VsdCkKIAogIyMjIyBMYVRlWCBPdXRwdXQgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCkBAIC0xOTMsNyArMTk0LDExIEBACiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICBpbXBvcnQgc3lzLCBhcmdwYXJzZSwgd2ViYnJvd3Nlciwgb3MsIHRleHR3cmFwCisgICAgaW1wb3J0IGFyZ3BhcnNlCisgICAgaW1wb3J0IG9zLnBhdGgKKyAgICBpbXBvcnQgc3lzCisgICAgaW1wb3J0IHRleHR3cmFwCisgICAgaW1wb3J0IHdlYmJyb3dzZXIKIAogICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKAogICAgICAgICAgICAgZGVzY3JpcHRpb24gPSAnQWRkIHN5bnRheCBoaWdobGlnaHRpbmcgdG8gUHl0aG9uIHNvdXJjZSBjb2RlJywKZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvbGlua3RyZWUucHkgYi9Ub29scy9zY3JpcHRzL2xpbmt0cmVlLnB5CmluZGV4IDk4MmY0ODAuLmU4M2YxOTggMTAwNzU1Ci0tLSBhL1Rvb2xzL3NjcmlwdHMvbGlua3RyZWUucHkKKysrIGIvVG9vbHMvc2NyaXB0cy9saW5rdHJlZS5weQpAQCAtMzIsMTMgKzMyLDEzIEBACiAgICAgICAgIHJldHVybiAxCiAgICAgdHJ5OgogICAgICAgICBvcy5ta2RpcihuZXd0cmVlLCAwbzc3NykKLSAgICBleGNlcHQgb3MuZXJyb3IgYXMgbXNnOgorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIG1zZzoKICAgICAgICAgcHJpbnQobmV3dHJlZSArICc6IGNhbm5vdCBta2RpcjonLCBtc2cpCiAgICAgICAgIHJldHVybiAxCiAgICAgbGlua25hbWUgPSBvcy5wYXRoLmpvaW4obmV3dHJlZSwgbGluaykKICAgICB0cnk6CiAgICAgICAgIG9zLnN5bWxpbmsob3MucGF0aC5qb2luKG9zLnBhcmRpciwgb2xkdHJlZSksIGxpbmtuYW1lKQotICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBtc2c6CisgICAgZXhjZXB0IE9TRXJyb3IgYXMgbXNnOgogICAgICAgICBpZiBub3QgbGlua19tYXlfZmFpbDoKICAgICAgICAgICAgIHByaW50KGxpbmtuYW1lICsgJzogY2Fubm90IHN5bWxpbms6JywgbXNnKQogICAgICAgICAgICAgcmV0dXJuIDEKQEAgLTUxLDcgKzUxLDcgQEAKICAgICBpZiBkZWJ1ZzogcHJpbnQoJ2xpbmtuYW1lcycsIChvbGQsIG5ldywgbGluaykpCiAgICAgdHJ5OgogICAgICAgICBuYW1lcyA9IG9zLmxpc3RkaXIob2xkKQotICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBtc2c6CisgICAgZXhjZXB0IE9TRXJyb3IgYXMgbXNnOgogICAgICAgICBwcmludChvbGQgKyAnOiB3YXJuaW5nOiBjYW5ub3QgbGlzdGRpcjonLCBtc2cpCiAgICAgICAgIHJldHVybgogICAgIGZvciBuYW1lIGluIG5hbWVzOgpkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy9tZDVzdW0ucHkgYi9Ub29scy9zY3JpcHRzL21kNXN1bS5weQppbmRleCA1MjE5NjBjLi45Y2Y0YmRjIDEwMDc1NQotLS0gYS9Ub29scy9zY3JpcHRzL21kNXN1bS5weQorKysgYi9Ub29scy9zY3JpcHRzL21kNXN1bS5weQpAQCAtOSw3ICs5LDcgQEAKIHJtb2RlID0gJ3JiJwogCiB1c2FnZSA9ICIiIgotdXNhZ2U6IHN1bTUgWy1iXSBbLXRdIFstbF0gWy1zIGJ1ZnNpemVdIFtmaWxlIC4uLl0KK3VzYWdlOiBtZDVzdW0ucHkgWy1iXSBbLXRdIFstbF0gWy1zIGJ1ZnNpemVdIFtmaWxlIC4uLl0KIC1iICAgICAgICA6IHJlYWQgZmlsZXMgaW4gYmluYXJ5IG1vZGUgKGRlZmF1bHQpCiAtdCAgICAgICAgOiByZWFkIGZpbGVzIGluIHRleHQgbW9kZSAoeW91IGFsbW9zdCBjZXJ0YWlubHkgZG9uJ3Qgd2FudCB0aGlzISkKIC1sICAgICAgICA6IHByaW50IGxhc3QgcGF0aG5hbWUgY29tcG9uZW50IG9ubHkKQEAgLTE3LDYgKzE3LDcgQEAKIGZpbGUgLi4uICA6IGZpbGVzIHRvIHN1bTsgJy0nIG9yIG5vIGZpbGVzIG1lYW5zIHN0ZGluCiAiIiIgJSBidWZzaXplCiAKK2ltcG9ydCBpbwogaW1wb3J0IHN5cwogaW1wb3J0IG9zCiBpbXBvcnQgZ2V0b3B0CkBAIC0yNCw3ICsyNSw3IEBACiAKIGRlZiBzdW0oKmZpbGVzKToKICAgICBzdHMgPSAwCi0gICAgaWYgZmlsZXMgYW5kIGlzaW5zdGFuY2UoZmlsZXNbLTFdLCBmaWxlKToKKyAgICBpZiBmaWxlcyBhbmQgaXNpbnN0YW5jZShmaWxlc1stMV0sIGlvLklPQmFzZSk6CiAgICAgICAgIG91dCwgZmlsZXMgPSBmaWxlc1stMV0sIGZpbGVzWzotMV0KICAgICBlbHNlOgogICAgICAgICBvdXQgPSBzeXMuc3Rkb3V0CkBAIC01MywxMiArNTQsMTQgQEAKICAgICByZXR1cm4gc3RzCiAKIGRlZiBwcmludHN1bWZwKGZwLCBmaWxlbmFtZSwgb3V0PXN5cy5zdGRvdXQpOgotICAgIG0gPSBtZDUubmV3KCkKKyAgICBtID0gbWQ1KCkKICAgICB0cnk6CiAgICAgICAgIHdoaWxlIDE6CiAgICAgICAgICAgICBkYXRhID0gZnAucmVhZChidWZzaXplKQogICAgICAgICAgICAgaWYgbm90IGRhdGE6CiAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZGF0YSwgc3RyKToKKyAgICAgICAgICAgICAgICBkYXRhID0gZGF0YS5lbmNvZGUoZnAuZW5jb2RpbmcpCiAgICAgICAgICAgICBtLnVwZGF0ZShkYXRhKQogICAgIGV4Y2VwdCBJT0Vycm9yIGFzIG1zZzoKICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnJXM6IEkvTyBlcnJvcjogJXNcbicgJSAoZmlsZW5hbWUsIG1zZykpCmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL25kaWZmLnB5IGIvVG9vbHMvc2NyaXB0cy9uZGlmZi5weQppbmRleCAyNDIyMDkxLi5jNmQwOWI4IDEwMDc1NQotLS0gYS9Ub29scy9zY3JpcHRzL25kaWZmLnB5CisrKyBiL1Rvb2xzL3NjcmlwdHMvbmRpZmYucHkKQEAgLTYwLDcgKzYwLDcgQEAKICMgY291bGRuJ3QgYmUgb3BlbmVkCiBkZWYgZm9wZW4oZm5hbWUpOgogICAgIHRyeToKLSAgICAgICAgcmV0dXJuIG9wZW4oZm5hbWUsICdVJykKKyAgICAgICAgcmV0dXJuIG9wZW4oZm5hbWUpCiAgICAgZXhjZXB0IElPRXJyb3IgYXMgZGV0YWlsOgogICAgICAgICByZXR1cm4gZmFpbCgiY291bGRuJ3Qgb3BlbiAiICsgZm5hbWUgKyAiOiAiICsgc3RyKGRldGFpbCkpCiAKZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvcGFyc2VfaHRtbDVfZW50aXRpZXMucHkgYi9Ub29scy9zY3JpcHRzL3BhcnNlX2h0bWw1X2VudGl0aWVzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmMwMTEzMjgKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9zY3JpcHRzL3BhcnNlX2h0bWw1X2VudGl0aWVzLnB5CkBAIC0wLDAgKzEsMTA1IEBACisjIS91c3IvYmluL2VudiBweXRob24zCisiIiIKK1V0aWxpdHkgZm9yIHBhcnNpbmcgSFRNTDUgZW50aXR5IGRlZmluaXRpb25zIGF2YWlsYWJsZSBmcm9tOgorCisgICAgaHR0cDovL2Rldi53My5vcmcvaHRtbDUvc3BlYy9lbnRpdGllcy5qc29uCisKK1dyaXR0ZW4gYnkgRXppbyBNZWxvdHRpIGFuZCBJdWxpaWEgUHJvc2t1cm5pYS4KKworIiIiCisKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IGpzb24KK2Zyb20gdXJsbGliLnJlcXVlc3QgaW1wb3J0IHVybG9wZW4KK2Zyb20gaHRtbC5lbnRpdGllcyBpbXBvcnQgaHRtbDUKKworZW50aXRpZXNfdXJsID0gJ2h0dHA6Ly9kZXYudzMub3JnL2h0bWw1L3NwZWMvZW50aXRpZXMuanNvbicKKworZGVmIGdldF9qc29uKHVybCk6CisgICAgIiIiRG93bmxvYWQgdGhlIGpzb24gZmlsZSBmcm9tIHRoZSB1cmwgYW5kIHJldHVybnMgYSBkZWNvZGVkIG9iamVjdC4iIiIKKyAgICB3aXRoIHVybG9wZW4odXJsKSBhcyBmOgorICAgICAgICBkYXRhID0gZi5yZWFkKCkuZGVjb2RlKCd1dGYtOCcpCisgICAgcmV0dXJuIGpzb24ubG9hZHMoZGF0YSkKKworZGVmIGNyZWF0ZV9kaWN0KGVudGl0aWVzKToKKyAgICAiIiJDcmVhdGUgdGhlIGh0bWw1IGRpY3QgZnJvbSB0aGUgZGVjb2RlZCBqc29uIG9iamVjdC4iIiIKKyAgICBuZXdfaHRtbDUgPSB7fQorICAgIGZvciBuYW1lLCB2YWx1ZSBpbiBlbnRpdGllcy5pdGVtcygpOgorICAgICAgICBuZXdfaHRtbDVbbmFtZS5sc3RyaXAoJyYnKV0gPSB2YWx1ZVsnY2hhcmFjdGVycyddCisgICAgcmV0dXJuIG5ld19odG1sNQorCitkZWYgY29tcGFyZV9kaWN0cyhvbGQsIG5ldyk6CisgICAgIiIiQ29tcGFyZSB0aGUgb2xkIGFuZCBuZXcgZGljdHMgYW5kIHByaW50IHRoZSBkaWZmZXJlbmNlcy4iIiIKKyAgICBhZGRlZCA9IG5ldy5rZXlzKCkgLSBvbGQua2V5cygpCisgICAgaWYgYWRkZWQ6CisgICAgICAgIHByaW50KCd7fSBlbnRpdGllKHMpIGhhdmUgYmVlbiBhZGRlZDonLmZvcm1hdChsZW4oYWRkZWQpKSkKKyAgICAgICAgZm9yIG5hbWUgaW4gc29ydGVkKGFkZGVkKToKKyAgICAgICAgICAgIHByaW50KCcgIHshcn06IHshcn0nLmZvcm1hdChuYW1lLCBuZXdbbmFtZV0pKQorICAgIHJlbW92ZWQgPSBvbGQua2V5cygpIC0gbmV3LmtleXMoKQorICAgIGlmIHJlbW92ZWQ6CisgICAgICAgIHByaW50KCd7fSBlbnRpdGllKHMpIGhhdmUgYmVlbiByZW1vdmVkOicuZm9ybWF0KGxlbihyZW1vdmVkKSkpCisgICAgICAgIGZvciBuYW1lIGluIHNvcnRlZChyZW1vdmVkKToKKyAgICAgICAgICAgIHByaW50KCcgIHshcn06IHshcn0nLmZvcm1hdChuYW1lLCBvbGRbbmFtZV0pKQorICAgIGNoYW5nZWQgPSBzZXQoKQorICAgIGZvciBuYW1lIGluIChvbGQua2V5cygpICYgbmV3LmtleXMoKSk6CisgICAgICAgIGlmIG9sZFtuYW1lXSAhPSBuZXdbbmFtZV06CisgICAgICAgICAgICBjaGFuZ2VkLmFkZCgobmFtZSwgb2xkW25hbWVdLCBuZXdbbmFtZV0pKQorICAgIGlmIGNoYW5nZWQ6CisgICAgICAgIHByaW50KCd7fSBlbnRpdGllKHMpIGhhdmUgYmVlbiBtb2RpZmllZDonLmZvcm1hdChsZW4oY2hhbmdlZCkpKQorICAgICAgICBmb3IgaXRlbSBpbiBzb3J0ZWQoY2hhbmdlZCk6CisgICAgICAgICAgICBwcmludCgnICB7IXJ9OiB7IXJ9IC0+IHshcn0nLmZvcm1hdCgqaXRlbSkpCisKK2RlZiB3cml0ZV9pdGVtcyhlbnRpdGllcywgZmlsZT1zeXMuc3Rkb3V0KToKKyAgICAiIiJXcml0ZSB0aGUgaXRlbXMgb2YgdGhlIGRpY3Rpb25hcnkgaW4gdGhlIHNwZWNpZmllZCBmaWxlLiIiIgorICAgICMgVGhlIGtleXMgaW4gdGhlIGdlbmVyYXRlZCBkaWN0aW9uYXJ5IHNob3VsZCBiZSBzb3J0ZWQKKyAgICAjIGluIGEgY2FzZS1pbnNlbnNpdGl2ZSB3YXksIGhvd2V2ZXIsIHdoZW4gdHdvIGtleXMgYXJlIGVxdWFsLAorICAgICMgdGhlIHVwcGVyY2FzZSB2ZXJzaW9uIHNob3VsZCBjb21lIGZpcnN0IHNvIHRoYXQgdGhlIHJlc3VsdAorICAgICMgbG9va3MgbGlrZTogWydBYWN1dGUnLCAnYWFjdXRlJywgJ0FhY3V0ZTsnLCAnYWFjdXRlOycsIC4uLl0KKyAgICAjIFRvIGRvIHRoaXMgd2UgZmlyc3Qgc29ydCBpbiBhIGNhc2Utc2Vuc2l0aXZlIHdheSAoc28gYWxsIHRoZQorICAgICMgdXBwZXJjYXNlIGNoYXJzIGNvbWUgZmlyc3QpIGFuZCB0aGVuIHNvcnQgd2l0aCBrZXk9c3RyLmxvd2VyLgorICAgICMgU2luY2UgdGhlIHNvcnRpbmcgaXMgc3RhYmxlIHRoZSB1cHBlcmNhc2Uga2V5cyB3aWxsIGV2ZW50dWFsbHkKKyAgICAjIGJlIGJlZm9yZSB0aGVpciBlcXVpdmFsZW50IGxvd2VyY2FzZSB2ZXJzaW9uLgorICAgIGtleXMgPSBzb3J0ZWQoZW50aXRpZXMua2V5cygpKQorICAgIGtleXMgPSBzb3J0ZWQoa2V5cywga2V5PXN0ci5sb3dlcikKKyAgICBwcmludCgnaHRtbDUgPSB7JywgZmlsZT1maWxlKQorICAgIGZvciBuYW1lIGluIGtleXM6CisgICAgICAgIHByaW50KCcgICAgeyFyfTogeyFhfSwnLmZvcm1hdChuYW1lLCBlbnRpdGllc1tuYW1lXSksIGZpbGU9ZmlsZSkKKyAgICBwcmludCgnfScsIGZpbGU9ZmlsZSkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgICMgd2l0aG91dCBhcmdzIHByaW50IGEgZGlmZiBiZXR3ZWVuIGh0bWwuZW50aXRpZXMuaHRtbDUgYW5kIG5ld19odG1sNQorICAgICMgd2l0aCAtLWNyZWF0ZSBwcmludCB0aGUgbmV3IGh0bWw1IGRpY3QKKyAgICAjIHdpdGggLS1wYXRjaCBwYXRjaCB0aGUgTGliL2h0bWwvZW50aXRpZXMucHkgZmlsZQorICAgIG5ld19odG1sNSA9IGNyZWF0ZV9kaWN0KGdldF9qc29uKGVudGl0aWVzX3VybCkpCisgICAgaWYgJy0tY3JlYXRlJyBpbiBzeXMuYXJndjoKKyAgICAgICAgcHJpbnQoJyMgbWFwIHRoZSBIVE1MNSBuYW1lZCBjaGFyYWN0ZXIgcmVmZXJlbmNlcyB0byB0aGUgJworICAgICAgICAgICAgICAnZXF1aXZhbGVudCBVbmljb2RlIGNoYXJhY3RlcihzKScpCisgICAgICAgIHByaW50KCcjIEdlbmVyYXRlZCBieSB7fS4gIERvIG5vdCBlZGl0IG1hbnVhbGx5LicuZm9ybWF0KF9fZmlsZV9fKSkKKyAgICAgICAgd3JpdGVfaXRlbXMobmV3X2h0bWw1KQorICAgIGVsaWYgJy0tcGF0Y2gnIGluIHN5cy5hcmd2OgorICAgICAgICBmbmFtZSA9ICdMaWIvaHRtbC9lbnRpdGllcy5weScKKyAgICAgICAgdGVtcF9mbmFtZSA9IGZuYW1lICsgJy50ZW1wJworICAgICAgICB3aXRoIG9wZW4oZm5hbWUpIGFzIGYxLCBvcGVuKHRlbXBfZm5hbWUsICd3JykgYXMgZjI6CisgICAgICAgICAgICBza2lwID0gRmFsc2UKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGYxOgorICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnaHRtbDUgPSB7Jyk6CisgICAgICAgICAgICAgICAgICAgIHdyaXRlX2l0ZW1zKG5ld19odG1sNSwgZmlsZT1mMikKKyAgICAgICAgICAgICAgICAgICAgc2tpcCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBpZiBza2lwOgorICAgICAgICAgICAgICAgICAgICAjIHNraXAgdGhlIG9sZCBpdGVtcyB1bnRpbCB0aGUgfQorICAgICAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJ30nKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNraXAgPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGYyLndyaXRlKGxpbmUpCisgICAgICAgIG9zLnJlbW92ZShmbmFtZSkKKyAgICAgICAgb3MucmVuYW1lKHRlbXBfZm5hbWUsIGZuYW1lKQorICAgIGVsc2U6CisgICAgICAgIGlmIGh0bWw1ID09IG5ld19odG1sNToKKyAgICAgICAgICAgIHByaW50KCdUaGUgY3VycmVudCBkaWN0aW9uYXJ5IGlzIHVwZGF0ZWQuJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNvbXBhcmVfZGljdHMoaHRtbDUsIG5ld19odG1sNSkKKyAgICAgICAgICAgIHByaW50KCdSdW4gIi4vcHl0aG9uIHswfSAtLXBhdGNoIiB0byB1cGRhdGUgTGliL2h0bWwvZW50aXRpZXMuaHRtbCAnCisgICAgICAgICAgICAgICAgICAnb3IgIi4vcHl0aG9uIHswfSAtLWNyZWF0ZSIgdG8gc2VlIHRoZSBnZW5lcmF0ZWQgJyAnZGljdGlvbmFyeS4nLmZvcm1hdChfX2ZpbGVfXykpCmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL3BhdGNoY2hlY2sucHkgYi9Ub29scy9zY3JpcHRzL3BhdGNoY2hlY2sucHkKaW5kZXggNmY5ODIxYi4uNThiMDgxYSAxMDA3NTUKLS0tIGEvVG9vbHMvc2NyaXB0cy9wYXRjaGNoZWNrLnB5CisrKyBiL1Rvb2xzL3NjcmlwdHMvcGF0Y2hjaGVjay5weQpAQCAtNDksMTUgKzQ5LDMxIEBACiBAc3RhdHVzKCJHZXR0aW5nIHRoZSBsaXN0IG9mIGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGFkZGVkL2NoYW5nZWQiLAogICAgICAgICBpbmZvPWxhbWJkYSB4OiBuX2ZpbGVzX3N0cihsZW4oeCkpKQogZGVmIGNoYW5nZWRfZmlsZXMoKToKLSAgICAiIiJHZXQgdGhlIGxpc3Qgb2YgY2hhbmdlZCBvciBhZGRlZCBmaWxlcyBmcm9tIE1lcmN1cmlhbC4iIiIKLSAgICBpZiBub3Qgb3MucGF0aC5pc2Rpcihvcy5wYXRoLmpvaW4oU1JDRElSLCAnLmhnJykpOgotICAgICAgICBzeXMuZXhpdCgnbmVlZCBhIGNoZWNrb3V0IHRvIGdldCBtb2RpZmllZCBmaWxlcycpCi0KLSAgICBjbWQgPSAnaGcgc3RhdHVzIC0tYWRkZWQgLS1tb2RpZmllZCAtLW5vLXN0YXR1cycKLSAgICBpZiBtcV9wYXRjaGVzX2FwcGxpZWQoKToKLSAgICAgICAgY21kICs9ICcgLS1yZXYgcXBhcmVudCcKLSAgICB3aXRoIHN1YnByb2Nlc3MuUG9wZW4oY21kLnNwbGl0KCksIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpIGFzIHN0OgotICAgICAgICByZXR1cm4gW3guZGVjb2RlKCkucnN0cmlwKCkgZm9yIHggaW4gc3Quc3Rkb3V0XQorICAgICIiIkdldCB0aGUgbGlzdCBvZiBjaGFuZ2VkIG9yIGFkZGVkIGZpbGVzIGZyb20gTWVyY3VyaWFsIG9yIGdpdC4iIiIKKyAgICBpZiBvcy5wYXRoLmlzZGlyKG9zLnBhdGguam9pbihTUkNESVIsICcuaGcnKSk6CisgICAgICAgIGNtZCA9ICdoZyBzdGF0dXMgLS1hZGRlZCAtLW1vZGlmaWVkIC0tbm8tc3RhdHVzJworICAgICAgICBpZiBtcV9wYXRjaGVzX2FwcGxpZWQoKToKKyAgICAgICAgICAgIGNtZCArPSAnIC0tcmV2IHFwYXJlbnQnCisgICAgICAgIHdpdGggc3VicHJvY2Vzcy5Qb3BlbihjbWQuc3BsaXQoKSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkgYXMgc3Q6CisgICAgICAgICAgICByZXR1cm4gW3guZGVjb2RlKCkucnN0cmlwKCkgZm9yIHggaW4gc3Quc3Rkb3V0XQorICAgIGVsaWYgb3MucGF0aC5pc2Rpcihvcy5wYXRoLmpvaW4oU1JDRElSLCAnLmdpdCcpKToKKyAgICAgICAgY21kID0gJ2dpdCBzdGF0dXMgLS1wb3JjZWxhaW4nCisgICAgICAgIGZpbGVuYW1lcyA9IFtdCisgICAgICAgIHdpdGggc3VicHJvY2Vzcy5Qb3BlbihjbWQuc3BsaXQoKSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkgYXMgc3Q6CisgICAgICAgICAgICBmb3IgbGluZSBpbiBzdC5zdGRvdXQ6CisgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUuZGVjb2RlKCkucnN0cmlwKCkKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSBzZXQobGluZVs6Ml0pCisgICAgICAgICAgICAgICAgIyBtb2RpZmllZCwgYWRkZWQgb3IgdW5tZXJnZWQgZmlsZXMKKyAgICAgICAgICAgICAgICBpZiBub3Qgc3RhdHVzLmludGVyc2VjdGlvbignTUFVJyk6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgZmlsZW5hbWUgPSBsaW5lWzM6XQorICAgICAgICAgICAgICAgIGlmICcgLT4gJyBpbiBmaWxlbmFtZToKKyAgICAgICAgICAgICAgICAgICAgIyBmaWxlIGlzIHJlbmFtZWQKKyAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUgPSBmaWxlbmFtZS5zcGxpdCgnIC0+ICcsIDIpWzFdLnN0cmlwKCkKKyAgICAgICAgICAgICAgICBmaWxlbmFtZXMuYXBwZW5kKGZpbGVuYW1lKQorICAgICAgICByZXR1cm4gZmlsZW5hbWVzCisgICAgZWxzZToKKyAgICAgICAgc3lzLmV4aXQoJ25lZWQgYSBNZXJjdXJpYWwgb3IgZ2l0IGNoZWNrb3V0IHRvIGdldCBtb2RpZmllZCBmaWxlcycpCiAKIAogZGVmIHJlcG9ydF9tb2RpZmllZF9maWxlcyhmaWxlX3BhdGhzKToKQEAgLTE1Miw3ICsxNjgsOCBAQAogICAgIGZpbGVfcGF0aHMgPSBjaGFuZ2VkX2ZpbGVzKCkKICAgICBweXRob25fZmlsZXMgPSBbZm4gZm9yIGZuIGluIGZpbGVfcGF0aHMgaWYgZm4uZW5kc3dpdGgoJy5weScpXQogICAgIGNfZmlsZXMgPSBbZm4gZm9yIGZuIGluIGZpbGVfcGF0aHMgaWYgZm4uZW5kc3dpdGgoKCcuYycsICcuaCcpKV0KLSAgICBkb2NfZmlsZXMgPSBbZm4gZm9yIGZuIGluIGZpbGVfcGF0aHMgaWYgZm4uc3RhcnRzd2l0aCgnRG9jJyldCisgICAgZG9jX2ZpbGVzID0gW2ZuIGZvciBmbiBpbiBmaWxlX3BhdGhzIGlmIGZuLnN0YXJ0c3dpdGgoJ0RvYycpIGFuZAorICAgICAgICAgICAgICAgICBmbi5lbmRzd2l0aCgoJy5yc3QnLCAnLmluYycpKV0KICAgICBtaXNjX2ZpbGVzID0ge29zLnBhdGguam9pbignTWlzYycsICdBQ0tTJyksIG9zLnBhdGguam9pbignTWlzYycsICdORVdTJyl9XAogICAgICAgICAgICAgJiBzZXQoZmlsZV9wYXRocykKICAgICAjIFBFUCA4IHdoaXRlc3BhY2UgcnVsZXMgZW5mb3JjZW1lbnQuCmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL3BhdGhmaXgucHkgYi9Ub29scy9zY3JpcHRzL3BhdGhmaXgucHkKaW5kZXggMTNjYTg2Ni4uMjI0MzJkMSAxMDA3NTUKLS0tIGEvVG9vbHMvc2NyaXB0cy9wYXRoZml4LnB5CisrKyBiL1Rvb2xzL3NjcmlwdHMvcGF0aGZpeC5weQpAQCAtNzMsNyArNzMsNyBAQAogICAgIGJhZCA9IDAKICAgICB0cnk6CiAgICAgICAgIG5hbWVzID0gb3MubGlzdGRpcihkaXJuYW1lKQotICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBtc2c6CisgICAgZXhjZXB0IE9TRXJyb3IgYXMgbXNnOgogICAgICAgICBlcnIoJyVzOiBjYW5ub3QgbGlzdCBkaXJlY3Rvcnk6ICVyXG4nICUgKGRpcm5hbWUsIG1zZykpCiAgICAgICAgIHJldHVybiAxCiAgICAgbmFtZXMuc29ydCgpCkBAIC0xMzEsMjQgKzEzMSwyNCBAQAogICAgICAgICBtdGltZSA9IHN0YXRidWYuc3RfbXRpbWUKICAgICAgICAgYXRpbWUgPSBzdGF0YnVmLnN0X2F0aW1lCiAgICAgICAgIG9zLmNobW9kKHRlbXBuYW1lLCBzdGF0YnVmW1NUX01PREVdICYgMG83Nzc3KQotICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBtc2c6CisgICAgZXhjZXB0IE9TRXJyb3IgYXMgbXNnOgogICAgICAgICBlcnIoJyVzOiB3YXJuaW5nOiBjaG1vZCBmYWlsZWQgKCVyKVxuJyAlICh0ZW1wbmFtZSwgbXNnKSkKICAgICAjIFRoZW4gbWFrZSBhIGJhY2t1cCBvZiB0aGUgb3JpZ2luYWwgZmlsZSBhcyBmaWxlbmFtZX4KICAgICB0cnk6CiAgICAgICAgIG9zLnJlbmFtZShmaWxlbmFtZSwgZmlsZW5hbWUgKyAnficpCi0gICAgZXhjZXB0IG9zLmVycm9yIGFzIG1zZzoKKyAgICBleGNlcHQgT1NFcnJvciBhcyBtc2c6CiAgICAgICAgIGVycignJXM6IHdhcm5pbmc6IGJhY2t1cCBmYWlsZWQgKCVyKVxuJyAlIChmaWxlbmFtZSwgbXNnKSkKICAgICAjIE5vdyBtb3ZlIHRoZSB0ZW1wIGZpbGUgdG8gdGhlIG9yaWdpbmFsIGZpbGUKICAgICB0cnk6CiAgICAgICAgIG9zLnJlbmFtZSh0ZW1wbmFtZSwgZmlsZW5hbWUpCi0gICAgZXhjZXB0IG9zLmVycm9yIGFzIG1zZzoKKyAgICBleGNlcHQgT1NFcnJvciBhcyBtc2c6CiAgICAgICAgIGVycignJXM6IHJlbmFtZSBmYWlsZWQgKCVyKVxuJyAlIChmaWxlbmFtZSwgbXNnKSkKICAgICAgICAgcmV0dXJuIDEKICAgICBpZiBwcmVzZXJ2ZV90aW1lc3RhbXBzOgogICAgICAgICBpZiBhdGltZSBhbmQgbXRpbWU6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgb3MudXRpbWUoZmlsZW5hbWUsIChhdGltZSwgbXRpbWUpKQotICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yIGFzIG1zZzoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIG1zZzoKICAgICAgICAgICAgICAgICBlcnIoJyVzOiByZXNldCBvZiB0aW1lc3RhbXAgZmFpbGVkICglcilcbicgJSAoZmlsZW5hbWUsIG1zZykpCiAgICAgICAgICAgICAgICAgcmV0dXJuIDEKICAgICAjIFJldHVybiBzdWNjZXNzCmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL3BpbmRlbnQucHkgYi9Ub29scy9zY3JpcHRzL3BpbmRlbnQucHkKaW5kZXggMjg3MmRjMC4uMzMzMzQyMCAxMDA3NTUKLS0tIGEvVG9vbHMvc2NyaXB0cy9waW5kZW50LnB5CisrKyBiL1Rvb2xzL3NjcmlwdHMvcGluZGVudC5weQpAQCAtMzc2LDEzICszNzYsMTMgQEAKICAgICBpZiBvcy5wYXRoLmxleGlzdHMoYmFja3VwKToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgb3MucmVtb3ZlKGJhY2t1cCkKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHByaW50KCJDYW4ndCByZW1vdmUgYmFja3VwICVyIiAlIChiYWNrdXAsKSwgZmlsZT1zeXMuc3RkZXJyKQogICAgICAgICAjIGVuZCB0cnkKICAgICAjIGVuZCBpZgogICAgIHRyeToKICAgICAgICAgb3MucmVuYW1lKGZpbGVuYW1lLCBiYWNrdXApCi0gICAgZXhjZXB0IG9zLmVycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICBwcmludCgiQ2FuJ3QgcmVuYW1lICVyIHRvICVyIiAlIChmaWxlbmFtZSwgYmFja3VwKSwgZmlsZT1zeXMuc3RkZXJyKQogICAgICMgZW5kIHRyeQogIyBlbmQgZGVmIG1ha2VfYmFja3VwCmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL3B5ZG9jZ3VpLnB5dyBiL1Rvb2xzL3NjcmlwdHMvcHlkb2NndWkucHl3CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZTlhM2Q2Li4wMDAwMDAwCi0tLSBhL1Rvb2xzL3NjcmlwdHMvcHlkb2NndWkucHl3CisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi0jIE5vdGU6ICB0aGlzIGZpbGUgbXVzdCBub3QgYmUgbmFtZWQgcHlkb2MucHl3LCBsZXN0IGl0IGp1c3QgZW5kIHVwCi0jIGltcG9ydGluZyBpdHNlbGYgKFB5dGhvbiBiZWdhbiBhbGxvd2luZyBpbXBvcnQgb2YgLnB5dyBmaWxlcwotIyBiZXR3ZWVuIDIuMmExIGFuZCAyLjJhMikuCi1pbXBvcnQgcHlkb2MKLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgIHB5ZG9jLmd1aSgpCmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL3JlaW5kZW50LnB5IGIvVG9vbHMvc2NyaXB0cy9yZWluZGVudC5weQppbmRleCA0YTkxNmVhLi4xODQyNGRlIDEwMDc1NQotLS0gYS9Ub29scy9zY3JpcHRzL3JlaW5kZW50LnB5CisrKyBiL1Rvb2xzL3NjcmlwdHMvcmVpbmRlbnQucHkKQEAgLTUyLDggKzUyLDggQEAKIHJlY3Vyc2UgPSBGYWxzZQogZHJ5cnVuID0gRmFsc2UKIG1ha2ViYWNrdXAgPSBUcnVlCisjIEEgc3BlY2lmaWVkIG5ld2xpbmUgdG8gYmUgdXNlZCBpbiB0aGUgb3V0cHV0IChzZXQgYnkgLS1uZXdsaW5lIG9wdGlvbikKIHNwZWNfbmV3bGluZSA9IE5vbmUKLSIiIkEgc3BlY2lmaWVkIG5ld2xpbmUgdG8gYmUgdXNlZCBpbiB0aGUgb3V0cHV0IChzZXQgYnkgLS1uZXdsaW5lIG9wdGlvbikiIiIKIAogCiBkZWYgdXNhZ2UobXNnPU5vbmUpOgpkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy90cmVlc3luYy5weSBiL1Rvb2xzL3NjcmlwdHMvdHJlZXN5bmMucHkKaW5kZXggYjI2NDljNC4uNjUyZDM5NCAxMDA3NTUKLS0tIGEvVG9vbHMvc2NyaXB0cy90cmVlc3luYy5weQorKysgYi9Ub29scy9zY3JpcHRzL3RyZWVzeW5jLnB5CkBAIC03OCw3ICs3OCw3IEBACiAgICAgICAgIHByaW50KCJjcmVhdGluZyBzbGF2ZSBkaXJlY3RvcnkiLCBzbGF2ZSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgb3MubWtkaXIoc2xhdmUpCi0gICAgICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBtc2c6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIG1zZzoKICAgICAgICAgICAgIHByaW50KCJjYW4ndCBtYWtlIHNsYXZlIGRpcmVjdG9yeSIsIHNsYXZlLCAiOiIsIG1zZykKICAgICAgICAgICAgIHJldHVybgogICAgICAgICBlbHNlOgpkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy91bnRhYmlmeS5weSBiL1Rvb2xzL3NjcmlwdHMvdW50YWJpZnkucHkKaW5kZXggNGI2N2MxNS4uODYxYzgzYyAxMDA3NTUKLS0tIGEvVG9vbHMvc2NyaXB0cy91bnRhYmlmeS5weQorKysgYi9Ub29scy9zY3JpcHRzL3VudGFiaWZ5LnB5CkBAIC0zOSwxMSArMzksMTEgQEAKICAgICBiYWNrdXAgPSBmaWxlbmFtZSArICJ+IgogICAgIHRyeToKICAgICAgICAgb3MudW5saW5rKGJhY2t1cCkKLSAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIHBhc3MKICAgICB0cnk6CiAgICAgICAgIG9zLnJlbmFtZShmaWxlbmFtZSwgYmFja3VwKQotICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcGFzcwogICAgIHdpdGggb3BlbihmaWxlbmFtZSwgInciLCBlbmNvZGluZz1lbmNvZGluZykgYXMgZjoKICAgICAgICAgZi53cml0ZShuZXd0ZXh0KQpkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy93aGljaC5weSBiL1Rvb2xzL3NjcmlwdHMvd2hpY2gucHkKaW5kZXggNGZjMzdhMC4uZGY1NGNlMCAxMDA3NTUKLS0tIGEvVG9vbHMvc2NyaXB0cy93aGljaC5weQorKysgYi9Ub29scy9zY3JpcHRzL3doaWNoLnB5CkBAIC0yOSw3ICsyOSw3IEBACiAgICAgICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGguam9pbihkaXIsIHByb2cpCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc3QgPSBvcy5zdGF0KGZpbGVuYW1lKQotICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgIGlmIG5vdCBTX0lTUkVHKHN0W1NUX01PREVdKToKICAgICAgICAgICAgICAgICBtc2coZmlsZW5hbWUgKyAnOiBub3QgYSBkaXNrIGZpbGUnKQpkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy93aW5fYWRkMnBhdGgucHkgYi9Ub29scy9zY3JpcHRzL3dpbl9hZGQycGF0aC5weQppbmRleCA5MjU5YjQ0Li5jODViZWE1IDEwMDY0NAotLS0gYS9Ub29scy9zY3JpcHRzL3dpbl9hZGQycGF0aC5weQorKysgYi9Ub29scy9zY3JpcHRzL3dpbl9hZGQycGF0aC5weQpAQCAtMzAsNyArMzAsNyBAQAogICAgIHdpdGggd2lucmVnLkNyZWF0ZUtleShIS0NVLCBFTlYpIGFzIGtleToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZW52cGF0aCA9IHdpbnJlZy5RdWVyeVZhbHVlRXgoa2V5LCBQQVRIKVswXQotICAgICAgICBleGNlcHQgV2luZG93c0Vycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIGVudnBhdGggPSBERUZBVUxUCiAKICAgICAgICAgcGF0aHMgPSBbZW52cGF0aF0KZGlmZiAtLWdpdCBhL1Rvb2xzL3NzbC9tYWtlX3NzbF9kYXRhLnB5IGIvVG9vbHMvc3NsL21ha2Vfc3NsX2RhdGEucHkKaW5kZXggMTAyNDRkMS4uM2ZiNDk4NSAxMDA3NTUKLS0tIGEvVG9vbHMvc3NsL21ha2Vfc3NsX2RhdGEucHkKKysrIGIvVG9vbHMvc3NsL21ha2Vfc3NsX2RhdGEucHkKQEAgLTUsOCArNSw3IEBACiBgbGlicmFyeWAgYW5kIGByZWFzb25gIG1uZW1ub25pY3MgdG8gYSBtb3JlIHJlY2VudCBPcGVuU1NMIHZlcnNpb24uCiAKIEl0IHRha2VzIHR3byBhcmd1bWVudHM6Ci0tIHRoZSBwYXRoIHRvIHRoZSBPcGVuU1NMIGluY2x1ZGUgZmlsZXMnIGRpcmVjdG9yeQotICAoZS5nLiBvcGVuc3NsLTEuMC4xLWJldGEzL2luY2x1ZGUvb3BlbnNzbC8pCistIHRoZSBwYXRoIHRvIHRoZSBPcGVuU1NMIHNvdXJjZSB0cmVlIChlLmcuIGdpdCBjaGVja291dCkKIC0gdGhlIHBhdGggdG8gdGhlIEMgZmlsZSB0byBiZSBnZW5lcmF0ZWQKICAgKHByb2JhYmx5IE1vZHVsZXMvX3NzbF9kYXRhLmgpCiAiIiIKQEAgLTE1LDkgKzE0LDEwIEBACiBpbXBvcnQgb3MKIGltcG9ydCByZQogaW1wb3J0IHN5cworaW1wb3J0IF9zc2wKIAogCi1kZWYgcGFyc2VfZXJyb3JfY29kZXMoaF9maWxlLCBwcmVmaXgpOgorZGVmIHBhcnNlX2Vycm9yX2NvZGVzKGhfZmlsZSwgcHJlZml4LCBsaWJjb2RlKToKICAgICBwYXQgPSByZS5jb21waWxlKHIiI2RlZmluZVxXKyglcyhbXHddKykpXFcrKFxkKylcYiIgJSByZS5lc2NhcGUocHJlZml4KSkKICAgICBjb2RlcyA9IFtdCiAgICAgd2l0aCBvcGVuKGhfZmlsZSwgInIiLCBlbmNvZGluZz0ibGF0aW4xIikgYXMgZjoKQEAgLTI2LDcgKzI2LDggQEAKICAgICAgICAgICAgIGlmIG1hdGNoOgogICAgICAgICAgICAgICAgIGNvZGUsIG5hbWUsIG51bSA9IG1hdGNoLmdyb3VwcygpCiAgICAgICAgICAgICAgICAgbnVtID0gaW50KG51bSkKLSAgICAgICAgICAgICAgICBjb2Rlcy5hcHBlbmQoKGNvZGUsIG5hbWUsIG51bSkpCisgICAgICAgICAgICAgICAgIyBlLmcuICgiU1NMX1JfQkFEX0RBVEEiLCAoIkVSUl9MSUJfU1NMIiwgIkJBRF9EQVRBIiwgMzkwKSkKKyAgICAgICAgICAgICAgICBjb2Rlcy5hcHBlbmQoKGNvZGUsIChsaWJjb2RlLCBuYW1lLCBudW0pKSkKICAgICByZXR1cm4gY29kZXMKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKQEAgLTM0LDEyICszNSwzMiBAQAogICAgIG91dGZpbGUgPSBzeXMuYXJndlsyXQogICAgIHVzZV9zdGRvdXQgPSBvdXRmaWxlID09ICctJwogICAgIGYgPSBzeXMuc3Rkb3V0IGlmIHVzZV9zdGRvdXQgZWxzZSBvcGVuKG91dGZpbGUsICJ3IikKLSAgICBlcnJvcl9saWJyYXJpZXMgPSAoCi0gICAgICAgICMgKGxpYnJhcnkgY29kZSwgbW5lbW9uaWMsIGVycm9yIHByZWZpeCwgaGVhZGVyIGZpbGUpCi0gICAgICAgICgnRVJSX0xJQl9QRU0nLCAnUEVNJywgJ1BFTV9SXycsICdwZW0uaCcpLAotICAgICAgICAoJ0VSUl9MSUJfU1NMJywgJ1NTTCcsICdTU0xfUl8nLCAnc3NsLmgnKSwKLSAgICAgICAgKCdFUlJfTElCX1g1MDknLCAnWDUwOScsICdYNTA5X1JfJywgJ3g1MDkuaCcpLAotICAgICAgICApCisgICAgZXJyb3JfbGlicmFyaWVzID0geworICAgICAgICAjIG1uZW1vbmljIC0+IChsaWJyYXJ5IGNvZGUsIGVycm9yIHByZWZpeCwgaGVhZGVyIGZpbGUpCisgICAgICAgICdQRU0nOiAoJ0VSUl9MSUJfUEVNJywgJ1BFTV9SXycsICdjcnlwdG8vcGVtL3BlbS5oJyksCisgICAgICAgICdTU0wnOiAoJ0VSUl9MSUJfU1NMJywgJ1NTTF9SXycsICdzc2wvc3NsLmgnKSwKKyAgICAgICAgJ1g1MDknOiAoJ0VSUl9MSUJfWDUwOScsICdYNTA5X1JfJywgJ2NyeXB0by94NTA5L3g1MDkuaCcpLAorICAgICAgICB9CisKKyAgICAjIFJlYWQgY29kZXMgZnJvbSBsaWJyYXJpZXMKKyAgICBuZXdfY29kZXMgPSBbXQorICAgIGZvciBsaWJjb2RlLCBwcmVmaXgsIGhfZmlsZSBpbiBzb3J0ZWQoZXJyb3JfbGlicmFyaWVzLnZhbHVlcygpKToKKyAgICAgICAgbmV3X2NvZGVzICs9IHBhcnNlX2Vycm9yX2NvZGVzKG9zLnBhdGguam9pbihvcGVuc3NsX2luYywgaF9maWxlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeCwgbGliY29kZSkKKyAgICBuZXdfY29kZV9udW1zID0gc2V0KChsaWJjb2RlLCBudW0pCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvZGUsIChsaWJjb2RlLCBuYW1lLCBudW0pKSBpbiBuZXdfY29kZXMpCisKKyAgICAjIE1lcmdlIHdpdGggZXhpc3RpbmcgY29kZXMgKGluIGNhc2Ugc29tZSBvbGQgY29kZXMgZGlzYXBwZWFyZWQpLgorICAgIGNvZGVzID0ge30KKyAgICBmb3IgZXJybmFtZSwgKGxpYm51bSwgZXJybnVtKSBpbiBfc3NsLmVycl9uYW1lc190b19jb2Rlcy5pdGVtcygpOgorICAgICAgICBsaWIgPSBlcnJvcl9saWJyYXJpZXNbX3NzbC5saWJfY29kZXNfdG9fbmFtZXNbbGlibnVtXV0KKyAgICAgICAgbGliY29kZSA9IGxpYlswXSAgICAgICAgICAgICAgIyBlLmcuIEVSUl9MSUJfUEVNCisgICAgICAgIGVycmNvZGUgPSBsaWJbMV0gKyBlcnJuYW1lICAgICMgZS5nLiBTU0xfUl9CQURfU1NMX1NFU1NJT05fSURfTEVOR1RICisgICAgICAgICMgT25seSBrZWVwIGl0IGlmIHRoZSBudW1lcmljIGNvZGVzIHdlcmVuJ3QgcmV1c2VkCisgICAgICAgIGlmIChsaWJjb2RlLCBlcnJudW0pIG5vdCBpbiBuZXdfY29kZV9udW1zOgorICAgICAgICAgICAgY29kZXNbZXJyY29kZV0gPSBsaWJjb2RlLCBlcnJuYW1lLCBlcnJudW0KKyAgICBjb2Rlcy51cGRhdGUoZGljdChuZXdfY29kZXMpKQorCiAgICAgZGVmIHcobCk6CiAgICAgICAgIGYud3JpdGUobCArICJcbiIpCiAgICAgdygiLyogRmlsZSBnZW5lcmF0ZWQgYnkgVG9vbHMvc3NsL21ha2Vfc3NsX2RhdGEucHkgKi8iKQpAQCAtNDcsMjEgKzY4LDE5IEBACiAgICAgdygiIikKIAogICAgIHcoInN0YXRpYyBzdHJ1Y3QgcHlfc3NsX2xpYnJhcnlfY29kZSBsaWJyYXJ5X2NvZGVzW10gPSB7IikKLSAgICBmb3IgbGliY29kZSwgbW5lbW8sIF8sIF8gaW4gZXJyb3JfbGlicmFyaWVzOgorICAgIGZvciBtbmVtbywgKGxpYmNvZGUsIF8sIF8pIGluIHNvcnRlZChlcnJvcl9saWJyYXJpZXMuaXRlbXMoKSk6CiAgICAgICAgIHcoJyAgICB7IiVzIiwgJXN9LCcgJSAobW5lbW8sIGxpYmNvZGUpKQogICAgIHcoJyAgICB7IE5VTEwgfScpCiAgICAgdygnfTsnKQogICAgIHcoIiIpCiAKICAgICB3KCJzdGF0aWMgc3RydWN0IHB5X3NzbF9lcnJvcl9jb2RlIGVycm9yX2NvZGVzW10gPSB7IikKLSAgICBmb3IgbGliY29kZSwgXywgcHJlZml4LCBoX2ZpbGUgaW4gZXJyb3JfbGlicmFyaWVzOgotICAgICAgICBjb2RlcyA9IHBhcnNlX2Vycm9yX2NvZGVzKG9zLnBhdGguam9pbihvcGVuc3NsX2luYywgaF9maWxlKSwgcHJlZml4KQotICAgICAgICBmb3IgY29kZSwgbmFtZSwgbnVtIGluIHNvcnRlZChjb2Rlcyk6Ci0gICAgICAgICAgICB3KCcgICNpZmRlZiAlcycgJSAoY29kZSkpCi0gICAgICAgICAgICB3KCcgICAgeyIlcyIsICVzLCAlc30sJyAlIChuYW1lLCBsaWJjb2RlLCBjb2RlKSkKLSAgICAgICAgICAgIHcoJyAgI2Vsc2UnKQotICAgICAgICAgICAgdygnICAgIHsiJXMiLCAlcywgJWR9LCcgJSAobmFtZSwgbGliY29kZSwgbnVtKSkKLSAgICAgICAgICAgIHcoJyAgI2VuZGlmJykKKyAgICBmb3IgZXJyY29kZSwgKGxpYmNvZGUsIG5hbWUsIG51bSkgaW4gc29ydGVkKGNvZGVzLml0ZW1zKCkpOgorICAgICAgICB3KCcgICNpZmRlZiAlcycgJSAoZXJyY29kZSkpCisgICAgICAgIHcoJyAgICB7IiVzIiwgJXMsICVzfSwnICUgKG5hbWUsIGxpYmNvZGUsIGVycmNvZGUpKQorICAgICAgICB3KCcgICNlbHNlJykKKyAgICAgICAgdygnICAgIHsiJXMiLCAlcywgJWR9LCcgJSAobmFtZSwgbGliY29kZSwgbnVtKSkKKyAgICAgICAgdygnICAjZW5kaWYnKQogICAgIHcoJyAgICB7IE5VTEwgfScpCiAgICAgdygnfTsnKQogICAgIGlmIG5vdCB1c2Vfc3Rkb3V0OgpkaWZmIC0tZ2l0IGEvVG9vbHMvc3NsL3Rlc3RfbXVsdGlwbGVfdmVyc2lvbnMucHkgYi9Ub29scy9zc2wvdGVzdF9tdWx0aXBsZV92ZXJzaW9ucy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDU3ZGNmCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvc3NsL3Rlc3RfbXVsdGlwbGVfdmVyc2lvbnMucHkKQEAgLTAsMCArMSwyNDEgQEAKKyMuL3B5dGhvbgorIiIiUnVuIFB5dGhvbiB0ZXN0cyB3aXRoIG11bHRpcGxlIGluc3RhbGxhdGlvbnMgb2YgT3BlblNTTAorCitUaGUgc2NyaXB0CisKKyAgKDEpIGRvd25sb2FkcyBPcGVuU1NMIHRhciBidW5kbGUKKyAgKDIpIGV4dHJhY3RzIGl0IHRvIC4uL29wZW5zc2wvc3JjL29wZW5zc2wtVkVSU0lPTi8KKyAgKDMpIGNvbXBpbGVzIE9wZW5TU0wKKyAgKDQpIGluc3RhbGxzIE9wZW5TU0wgaW50byAuLi9vcGVuc3NsL1ZFUlNJT04vCisgICg1KSBmb3JjZXMgYSByZWNvbXBpbGF0aW9uIG9mIFB5dGhvbiBtb2R1bGVzIHVzaW5nIHRoZQorICAgICAgaGVhZGVyIGFuZCBsaWJyYXJ5IGZpbGVzIGZyb20gLi4vb3BlbnNzbC9WRVJTSU9OLworICAoNikgcnVucyBQeXRob24ncyB0ZXN0IHN1aXRlCisKK1RoZSBzY3JpcHQgbXVzdCBiZSBydW4gd2l0aCBQeXRob24ncyBidWlsZCBkaXJlY3RvcnkgYXMgY3VycmVudCB3b3JraW5nCitkaXJlY3Rvcnk6CisKKyAgICAuL3B5dGhvbiBUb29scy9zc2wvdGVzdF9tdWx0aXBsZV92ZXJzaW9ucy5weQorCitUaGUgc2NyaXB0IHVzZXMgTERfUlVOX1BBVEgsIExEX0xJQlJBUllfUEFUSCwgQ1BQRkxBR1MgYW5kIExERkxBR1MgdG8gYmVuZAorc2VhcmNoIHBhdGhzIGZvciBoZWFkZXIgZmlsZXMgYW5kIHNoYXJlZCBsaWJyYXJpZXMuIEl0J3Mga25vd24gdG8gd29yayBvbgorTGludXggd2l0aCBHQ0MgNC54LgorCisoYykgMjAxMyBDaHJpc3RpYW4gSGVpbWVzIDxjaHJpc3RpYW5AcHl0aG9uLm9yZz4KKyIiIgoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcworaW1wb3J0IHRhcmZpbGUKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgc3lzCitmcm9tIHVybGxpYi5yZXF1ZXN0IGltcG9ydCB1cmxvcGVuCisKK2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJtdWx0aXNzbCIpCisKK09QRU5TU0xfVkVSU0lPTlMgPSBbCisgICAgIjAuOS43bSIsICIwLjkuOGkiLCAiMC45LjhsIiwgIjAuOS44bSIsICIwLjkuOHkiLCAiMS4wLjBrIiwgIjEuMC4xZSIKK10KK0ZVTExfVEVTVFMgPSBbCisgICAgInRlc3RfYXN5bmNpbyIsICJ0ZXN0X2Z0cGxpYiIsICJ0ZXN0X2hhc2hsaWIiLCAidGVzdF9odHRwbGliIiwKKyAgICAidGVzdF9pbWFwbGliIiwgInRlc3Rfbm50cGxpYiIsICJ0ZXN0X3BvcGxpYiIsICJ0ZXN0X3NtdHBsaWIiLAorICAgICJ0ZXN0X3NtdHBuZXQiLCAidGVzdF91cmxsaWIyX2xvY2FsbmV0IiwgInRlc3RfdmVudiIKK10KK01JTklNQUxfVEVTVFMgPSBbInRlc3Rfc3NsIiwgInRlc3RfaGFzaGxpYiJdCitDQURFRkFVTFQgPSBUcnVlCitIRVJFID0gb3MucGF0aC5hYnNwYXRoKG9zLmdldGN3ZCgpKQorREVTVF9ESVIgPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKEhFUkUsIG9zLnBhcmRpciwgIm9wZW5zc2wiKSkKKworCitjbGFzcyBCdWlsZFNTTDoKKyAgICB1cmxfdGVtcGxhdGUgPSAiaHR0cHM6Ly93d3cub3BlbnNzbC5vcmcvc291cmNlL29wZW5zc2wte30udGFyLmd6IgorCisgICAgbW9kdWxlX2ZpbGVzID0gWyJNb2R1bGVzL19zc2wuYyIsCisgICAgICAgICAgICAgICAgICAgICJNb2R1bGVzL3NvY2tldG1vZHVsZS5jIiwKKyAgICAgICAgICAgICAgICAgICAgIk1vZHVsZXMvX2hhc2hvcGVuc3NsLmMiXQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZlcnNpb24sIG9wZW5zc2xfY29tcGlsZV9hcmdzPSgpLCBkZXN0ZGlyPURFU1RfRElSKToKKyAgICAgICAgc2VsZi5fY2hlY2tfcHl0aG9uX2J1aWxkZGlyKCkKKyAgICAgICAgc2VsZi52ZXJzaW9uID0gdmVyc2lvbgorICAgICAgICBzZWxmLm9wZW5zc2xfY29tcGlsZV9hcmdzID0gb3BlbnNzbF9jb21waWxlX2FyZ3MKKyAgICAgICAgIyBpbnN0YWxsYXRpb24gZGlyZWN0b3J5CisgICAgICAgIHNlbGYuaW5zdGFsbF9kaXIgPSBvcy5wYXRoLmpvaW4oZGVzdGRpciwgdmVyc2lvbikKKyAgICAgICAgIyBzb3VyY2UgZmlsZQorICAgICAgICBzZWxmLnNyY19maWxlID0gb3MucGF0aC5qb2luKGRlc3RkaXIsICJzcmMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGVuc3NsLXt9LnRhci5neiIuZm9ybWF0KHZlcnNpb24pKQorICAgICAgICAjIGJ1aWxkIGRpcmVjdG9yeSAocmVtb3ZlZCBhZnRlciBpbnN0YWxsKQorICAgICAgICBzZWxmLmJ1aWxkX2RpciA9IG9zLnBhdGguam9pbihkZXN0ZGlyLCAic3JjIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZW5zc2wte30iLmZvcm1hdCh2ZXJzaW9uKSkKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBvcGVuc3NsX2NsaShzZWxmKToKKyAgICAgICAgIiIib3BlbnNzbCBDTEkgYmluYXJ5IiIiCisgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4oc2VsZi5pbnN0YWxsX2RpciwgImJpbiIsICJvcGVuc3NsIikKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBvcGVuc3NsX3ZlcnNpb24oc2VsZik6CisgICAgICAgICIiIm91dHB1dCBvZiAnYmluL29wZW5zc2wgdmVyc2lvbiciIiIKKyAgICAgICAgZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKKyAgICAgICAgZW52WyJMRF9MSUJSQVJZX1BBVEgiXSA9IHNlbGYubGliX2RpcgorICAgICAgICBjbWQgPSBbc2VsZi5vcGVuc3NsX2NsaSwgInZlcnNpb24iXQorICAgICAgICByZXR1cm4gc2VsZi5fc3VicHJvY2Vzc19vdXRwdXQoY21kLCBlbnY9ZW52KQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHB5c3NsX3ZlcnNpb24oc2VsZik6CisgICAgICAgICIiIlZhbHVlIG9mIHNzbC5PUEVOU1NMX1ZFUlNJT04iIiIKKyAgICAgICAgZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKKyAgICAgICAgZW52WyJMRF9MSUJSQVJZX1BBVEgiXSA9IHNlbGYubGliX2RpcgorICAgICAgICBjbWQgPSBbIi4vcHl0aG9uIiwgIi1jIiwgImltcG9ydCBzc2w7IHByaW50KHNzbC5PUEVOU1NMX1ZFUlNJT04pIl0KKyAgICAgICAgcmV0dXJuIHNlbGYuX3N1YnByb2Nlc3Nfb3V0cHV0KGNtZCwgZW52PWVudikKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBpbmNsdWRlX2RpcihzZWxmKToKKyAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihzZWxmLmluc3RhbGxfZGlyLCAiaW5jbHVkZSIpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgbGliX2RpcihzZWxmKToKKyAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihzZWxmLmluc3RhbGxfZGlyLCAibGliIikKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBoYXNfb3BlbnNzbChzZWxmKToKKyAgICAgICAgcmV0dXJuIG9zLnBhdGguaXNmaWxlKHNlbGYub3BlbnNzbF9jbGkpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgaGFzX3NyYyhzZWxmKToKKyAgICAgICAgcmV0dXJuIG9zLnBhdGguaXNmaWxlKHNlbGYuc3JjX2ZpbGUpCisKKyAgICBkZWYgX3N1YnByb2Nlc3NfY2FsbChzZWxmLCBjbWQsIHN0ZG91dD1zdWJwcm9jZXNzLkRFVk5VTEwsIGVudj1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICoqa3dhcmdzKToKKyAgICAgICAgbG9nLmRlYnVnKCJDYWxsICd7fSciLmZvcm1hdCgiICIuam9pbihjbWQpKSkKKyAgICAgICAgcmV0dXJuIHN1YnByb2Nlc3MuY2hlY2tfY2FsbChjbWQsIHN0ZG91dD1zdGRvdXQsIGVudj1lbnYsICoqa3dhcmdzKQorCisgICAgZGVmIF9zdWJwcm9jZXNzX291dHB1dChzZWxmLCBjbWQsIGVudj1Ob25lLCAqKmt3YXJncyk6CisgICAgICAgIGxvZy5kZWJ1ZygiQ2FsbCAne30nIi5mb3JtYXQoIiAiLmpvaW4oY21kKSkpCisgICAgICAgIG91dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGNtZCwgZW52PWVudikKKyAgICAgICAgcmV0dXJuIG91dC5zdHJpcCgpLmRlY29kZSgidXRmLTgiKQorCisgICAgZGVmIF9jaGVja19weXRob25fYnVpbGRkaXIoc2VsZik6CisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZSgicHl0aG9uIikgb3Igbm90IG9zLnBhdGguaXNmaWxlKCJzZXR1cC5weSIpOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiU2NyaXB0IG11c3QgYmUgcnVuIGluIFB5dGhvbiBidWlsZCBkaXJlY3RvcnkiKQorCisgICAgZGVmIF9kb3dubG9hZF9vcGVuc3NsKHNlbGYpOgorICAgICAgICAiIiJEb3dubG9hZCBPcGVuU1NMIHNvdXJjZSBkaXN0IiIiCisgICAgICAgIHNyY19kaXIgPSBvcy5wYXRoLmRpcm5hbWUoc2VsZi5zcmNfZmlsZSkKKyAgICAgICAgaWYgbm90IG9zLnBhdGguaXNkaXIoc3JjX2Rpcik6CisgICAgICAgICAgICBvcy5tYWtlZGlycyhzcmNfZGlyKQorICAgICAgICB1cmwgPSBzZWxmLnVybF90ZW1wbGF0ZS5mb3JtYXQoc2VsZi52ZXJzaW9uKQorICAgICAgICBsb2cuaW5mbygiRG93bmxvYWRpbmcgT3BlblNTTCBmcm9tIHt9Ii5mb3JtYXQodXJsKSkKKyAgICAgICAgcmVxID0gdXJsb3Blbih1cmwsIGNhZGVmYXVsdD1DQURFRkFVTFQpCisgICAgICAgICMgS0lTUywgcmVhZCBhbGwsIHdyaXRlIGFsbAorICAgICAgICBkYXRhID0gcmVxLnJlYWQoKQorICAgICAgICBsb2cuaW5mbygiU3RvcmluZyB7fSIuZm9ybWF0KHNlbGYuc3JjX2ZpbGUpKQorICAgICAgICB3aXRoIG9wZW4oc2VsZi5zcmNfZmlsZSwgIndiIikgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoZGF0YSkKKworICAgIGRlZiBfdW5wYWNrX29wZW5zc2woc2VsZik6CisgICAgICAgICIiIlVucGFjayB0YXIuZ3ogYnVuZGxlIiIiCisgICAgICAgICMgY2xlYW51cAorICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKHNlbGYuYnVpbGRfZGlyKToKKyAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoc2VsZi5idWlsZF9kaXIpCisgICAgICAgIG9zLm1ha2VkaXJzKHNlbGYuYnVpbGRfZGlyKQorCisgICAgICAgIHRmID0gdGFyZmlsZS5vcGVuKHNlbGYuc3JjX2ZpbGUpCisgICAgICAgIGJhc2UgPSAib3BlbnNzbC17fS8iLmZvcm1hdChzZWxmLnZlcnNpb24pCisgICAgICAgICMgZm9yY2UgZXh0cmFjdGlvbiBpbnRvIGJ1aWxkIGRpcgorICAgICAgICBtZW1iZXJzID0gdGYuZ2V0bWVtYmVycygpCisgICAgICAgIGZvciBtZW1iZXIgaW4gbWVtYmVyczoKKyAgICAgICAgICAgIGlmIG5vdCBtZW1iZXIubmFtZS5zdGFydHN3aXRoKGJhc2UpOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IobWVtYmVyLm5hbWUpCisgICAgICAgICAgICBtZW1iZXIubmFtZSA9IG1lbWJlci5uYW1lW2xlbihiYXNlKTpdCisgICAgICAgIGxvZy5pbmZvKCJVbnBhY2tpbmcgZmlsZXMgdG8ge30iLmZvcm1hdChzZWxmLmJ1aWxkX2RpcikpCisgICAgICAgIHRmLmV4dHJhY3RhbGwoc2VsZi5idWlsZF9kaXIsIG1lbWJlcnMpCisKKyAgICBkZWYgX2J1aWxkX29wZW5zc2woc2VsZik6CisgICAgICAgICIiIk5vdyBidWlsZCBvcGVuc3NsIiIiCisgICAgICAgIGxvZy5pbmZvKCJSdW5uaW5nIGJ1aWxkIGluIHt9Ii5mb3JtYXQoc2VsZi5pbnN0YWxsX2RpcikpCisgICAgICAgIGN3ZCA9IHNlbGYuYnVpbGRfZGlyCisgICAgICAgIGNtZCA9IFsiLi9jb25maWciLCAic2hhcmVkIiwgIi0tcHJlZml4PXt9Ii5mb3JtYXQoc2VsZi5pbnN0YWxsX2RpcildCisgICAgICAgIGNtZC5leHRlbmQoc2VsZi5vcGVuc3NsX2NvbXBpbGVfYXJncykKKyAgICAgICAgc2VsZi5fc3VicHJvY2Vzc19jYWxsKGNtZCwgY3dkPWN3ZCkKKyAgICAgICAgc2VsZi5fc3VicHJvY2Vzc19jYWxsKFsibWFrZSJdLCBjd2Q9Y3dkKQorCisgICAgZGVmIF9pbnN0YWxsX29wZW5zc2woc2VsZiwgcmVtb3ZlPVRydWUpOgorICAgICAgICBzZWxmLl9zdWJwcm9jZXNzX2NhbGwoWyJtYWtlIiwgImluc3RhbGwiXSwgY3dkPXNlbGYuYnVpbGRfZGlyKQorICAgICAgICBpZiByZW1vdmU6CisgICAgICAgICAgICBzaHV0aWwucm10cmVlKHNlbGYuYnVpbGRfZGlyKQorCisgICAgZGVmIGluc3RhbGxfb3BlbnNzbChzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuaGFzX29wZW5zc2w6CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5oYXNfc3JjOgorICAgICAgICAgICAgICAgIHNlbGYuX2Rvd25sb2FkX29wZW5zc2woKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBsb2cuZGVidWcoIkFscmVhZHkgaGFzIHNyYyB7fSIuZm9ybWF0KHNlbGYuc3JjX2ZpbGUpKQorICAgICAgICAgICAgc2VsZi5fdW5wYWNrX29wZW5zc2woKQorICAgICAgICAgICAgc2VsZi5fYnVpbGRfb3BlbnNzbCgpCisgICAgICAgICAgICBzZWxmLl9pbnN0YWxsX29wZW5zc2woKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9nLmluZm8oIkFscmVhZHkgaGFzIGluc3RhbGxhdGlvbiB7fSIuZm9ybWF0KHNlbGYuaW5zdGFsbF9kaXIpKQorICAgICAgICAjIHZhbGlkYXRlIGluc3RhbGxhdGlvbgorICAgICAgICB2ZXJzaW9uID0gc2VsZi5vcGVuc3NsX3ZlcnNpb24KKyAgICAgICAgaWYgc2VsZi52ZXJzaW9uIG5vdCBpbiB2ZXJzaW9uOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcih2ZXJzaW9uKQorCisgICAgZGVmIHRvdWNoX3B5bW9kcyhzZWxmKToKKyAgICAgICAgIyBmb3JjZSBhIHJlYnVpbGQgb2YgYWxsIG1vZHVsZXMgdGhhdCB1c2UgT3BlblNTTCBBUElzCisgICAgICAgIGZvciBmbmFtZSBpbiBzZWxmLm1vZHVsZV9maWxlczoKKyAgICAgICAgICAgIG9zLnV0aW1lKGZuYW1lKQorCisgICAgZGVmIHJlY29tcGlsZV9weW1vZHMoc2VsZik6CisgICAgICAgIGxvZy5pbmZvKCJVc2luZyBPcGVuU1NMIGJ1aWxkIGZyb20ge30iLmZvcm1hdChzZWxmLmJ1aWxkX2RpcikpCisgICAgICAgICMgb3ZlcndyaXRlIGhlYWRlciBhbmQgbGlicmFyeSBzZWFyY2ggcGF0aHMKKyAgICAgICAgZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKKyAgICAgICAgZW52WyJDUFBGTEFHUyJdID0gIi1Je30iLmZvcm1hdChzZWxmLmluY2x1ZGVfZGlyKQorICAgICAgICBlbnZbIkxERkxBR1MiXSA9ICItTHt9Ii5mb3JtYXQoc2VsZi5saWJfZGlyKQorICAgICAgICAjIHNldCBycGF0aAorICAgICAgICBlbnZbIkxEX1JVTl9QQVRIIl0gPSBzZWxmLmxpYl9kaXIKKworICAgICAgICBsb2cuaW5mbygiUmVidWlsZGluZyBQeXRob24gbW9kdWxlcyIpCisgICAgICAgIHNlbGYudG91Y2hfcHltb2RzKCkKKyAgICAgICAgY21kID0gWyIuL3B5dGhvbiIsICJzZXR1cC5weSIsICJidWlsZCJdCisgICAgICAgIHNlbGYuX3N1YnByb2Nlc3NfY2FsbChjbWQsIGVudj1lbnYpCisKKyAgICBkZWYgY2hlY2tfcHlzc2woc2VsZik6CisgICAgICAgIHZlcnNpb24gPSBzZWxmLnB5c3NsX3ZlcnNpb24KKyAgICAgICAgaWYgc2VsZi52ZXJzaW9uIG5vdCBpbiB2ZXJzaW9uOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcih2ZXJzaW9uKQorCisgICAgZGVmIHJ1bl9weXRlc3RzKHNlbGYsICphcmdzKToKKyAgICAgICAgY21kID0gWyIuL3B5dGhvbiIsICItbSIsICJ0ZXN0Il0KKyAgICAgICAgY21kLmV4dGVuZChhcmdzKQorICAgICAgICBzZWxmLl9zdWJwcm9jZXNzX2NhbGwoY21kLCBzdGRvdXQ9Tm9uZSkKKworICAgIGRlZiBydW5fcHl0aG9uX3Rlc3RzKHNlbGYsICphcmdzKToKKyAgICAgICAgc2VsZi5yZWNvbXBpbGVfcHltb2RzKCkKKyAgICAgICAgc2VsZi5jaGVja19weXNzbCgpCisgICAgICAgIHNlbGYucnVuX3B5dGVzdHMoKmFyZ3MpCisKKworZGVmIG1haW4oKmFyZ3MpOgorICAgIGJ1aWxkZXJzID0gW10KKyAgICBmb3IgdmVyc2lvbiBpbiBPUEVOU1NMX1ZFUlNJT05TOgorICAgICAgICBpZiB2ZXJzaW9uIGluICgiMC45LjhpIiwgIjAuOS44bCIpOgorICAgICAgICAgICAgb3BlbnNzbF9jb21waWxlX2FyZ3MgPSAoIm5vLWFzbSIsKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb3BlbnNzbF9jb21waWxlX2FyZ3MgPSAoKQorICAgICAgICBidWlsZGVyID0gQnVpbGRTU0wodmVyc2lvbiwgb3BlbnNzbF9jb21waWxlX2FyZ3MpCisgICAgICAgIGJ1aWxkZXIuaW5zdGFsbF9vcGVuc3NsKCkKKyAgICAgICAgYnVpbGRlcnMuYXBwZW5kKGJ1aWxkZXIpCisKKyAgICBmb3IgYnVpbGRlciBpbiBidWlsZGVyczoKKyAgICAgICAgYnVpbGRlci5ydW5fcHl0aG9uX3Rlc3RzKCphcmdzKQorICAgICMgZmluYWwgdG91Y2gKKyAgICBidWlsZGVyLnRvdWNoX3B5bW9kcygpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBsb2dnaW5nLmJhc2ljQ29uZmlnKGxldmVsPWxvZ2dpbmcuSU5GTywKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdD0iKioqICUobGV2ZWxuYW1lKXMgJShtZXNzYWdlKXMiKQorICAgIGFyZ3MgPSBzeXMuYXJndlsxOl0KKyAgICBpZiBub3QgYXJnczoKKyAgICAgICAgYXJncyA9IFsiLXVuZXR3b3JrIiwgIi12Il0KKyAgICAgICAgYXJncy5leHRlbmQoRlVMTF9URVNUUykKKyAgICBtYWluKCphcmdzKQpkaWZmIC0tZ2l0IGEvVG9vbHMvc3RyaW5nYmVuY2gvc3RyaW5nYmVuY2gucHkgYi9Ub29scy9zdHJpbmdiZW5jaC9zdHJpbmdiZW5jaC5weQppbmRleCAxNDJiM2NhLi41YWJjMjVhIDEwMDY0NAotLS0gYS9Ub29scy9zdHJpbmdiZW5jaC9zdHJpbmdiZW5jaC5weQorKysgYi9Ub29scy9zdHJpbmdiZW5jaC9zdHJpbmdiZW5jaC5weQpAQCAtODA4LDcgKzgwOCw3IEBACiBwcm9ncmFtbWVycyByZXBvcnQgc3Vic3RhbnRpYWwgcHJvZHVjdGl2aXR5IGdhaW5zIGFuZCBmZWVsIHRoZSBsYW5ndWFnZQogZW5jb3VyYWdlcyB0aGUgZGV2ZWxvcG1lbnQgb2YgaGlnaGVyIHF1YWxpdHksIG1vcmUgbWFpbnRhaW5hYmxlIGNvZGUuCiAKLVB5dGhvbiBydW5zIG9uIFdpbmRvd3MsIExpbnV4L1VuaXgsIE1hYyBPUyBYLCBPUy8yLCBBbWlnYSwgUGFsbQorUHl0aG9uIHJ1bnMgb24gV2luZG93cywgTGludXgvVW5peCwgTWFjIE9TIFgsIEFtaWdhLCBQYWxtCiBIYW5kaGVsZHMsIGFuZCBOb2tpYSBtb2JpbGUgcGhvbmVzLiBQeXRob24gaGFzIGFsc28gYmVlbiBwb3J0ZWQgdG8gdGhlCiBKYXZhIGFuZCAuTkVUIHZpcnR1YWwgbWFjaGluZXMuCiAKZGlmZiAtLWdpdCBhL1Rvb2xzL3VuaWNvZGUvZ2VuY29kZWMucHkgYi9Ub29scy91bmljb2RlL2dlbmNvZGVjLnB5CmluZGV4IGY1YTFhZjMuLjk4YjM5NzUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL3VuaWNvZGUvZ2VuY29kZWMucHkKKysrIGIvVG9vbHMvdW5pY29kZS9nZW5jb2RlYy5weQpAQCAtMzQsNyArMzQsNyBAQAogIyBTdGFuZGFyZCB1bmRlZmluZWQgVW5pY29kZSBjb2RlIHBvaW50CiBVTklfVU5ERUZJTkVEID0gY2hyKDB4RkZGRSkKIAotIyBQbGFjZWhvbGRlciBmb3IgYSBtaXNzaW5nIGNvZGVwb2ludAorIyBQbGFjZWhvbGRlciBmb3IgYSBtaXNzaW5nIGNvZGUgcG9pbnQKIE1JU1NJTkdfQ09ERSA9IC0xCiAKIG1hcFJFID0gcmUuY29tcGlsZSgnKCg/OjB4WzAtOWEtZkEtRl0rXCs/KSspJwpAQCAtMjkwLDI3ICsyOTAsMjcgQEAKIAogY2xhc3MgQ29kZWMoY29kZWNzLkNvZGVjKToKIAotICAgIGRlZiBlbmNvZGUoc2VsZixpbnB1dCxlcnJvcnM9J3N0cmljdCcpOgotICAgICAgICByZXR1cm4gY29kZWNzLmNoYXJtYXBfZW5jb2RlKGlucHV0LGVycm9ycyxlbmNvZGluZ18lcykKKyAgICBkZWYgZW5jb2RlKHNlbGYsIGlucHV0LCBlcnJvcnM9J3N0cmljdCcpOgorICAgICAgICByZXR1cm4gY29kZWNzLmNoYXJtYXBfZW5jb2RlKGlucHV0LCBlcnJvcnMsIGVuY29kaW5nXyVzKQogCi0gICAgZGVmIGRlY29kZShzZWxmLGlucHV0LGVycm9ycz0nc3RyaWN0Jyk6Ci0gICAgICAgIHJldHVybiBjb2RlY3MuY2hhcm1hcF9kZWNvZGUoaW5wdXQsZXJyb3JzLGRlY29kaW5nXyVzKQorICAgIGRlZiBkZWNvZGUoc2VsZiwgaW5wdXQsIGVycm9ycz0nc3RyaWN0Jyk6CisgICAgICAgIHJldHVybiBjb2RlY3MuY2hhcm1hcF9kZWNvZGUoaW5wdXQsIGVycm9ycywgZGVjb2RpbmdfJXMpCiAnJycgJSAoZW5jb2RpbmduYW1lLCBuYW1lLCBzdWZmaXgsIHN1ZmZpeCldCiAgICAgbC5hcHBlbmQoJycnXAogY2xhc3MgSW5jcmVtZW50YWxFbmNvZGVyKGNvZGVjcy5JbmNyZW1lbnRhbEVuY29kZXIpOgogICAgIGRlZiBlbmNvZGUoc2VsZiwgaW5wdXQsIGZpbmFsPUZhbHNlKToKLSAgICAgICAgcmV0dXJuIGNvZGVjcy5jaGFybWFwX2VuY29kZShpbnB1dCxzZWxmLmVycm9ycyxlbmNvZGluZ18lcylbMF0KKyAgICAgICAgcmV0dXJuIGNvZGVjcy5jaGFybWFwX2VuY29kZShpbnB1dCwgc2VsZi5lcnJvcnMsIGVuY29kaW5nXyVzKVswXQogCiBjbGFzcyBJbmNyZW1lbnRhbERlY29kZXIoY29kZWNzLkluY3JlbWVudGFsRGVjb2Rlcik6CiAgICAgZGVmIGRlY29kZShzZWxmLCBpbnB1dCwgZmluYWw9RmFsc2UpOgotICAgICAgICByZXR1cm4gY29kZWNzLmNoYXJtYXBfZGVjb2RlKGlucHV0LHNlbGYuZXJyb3JzLGRlY29kaW5nXyVzKVswXScnJyAlCisgICAgICAgIHJldHVybiBjb2RlY3MuY2hhcm1hcF9kZWNvZGUoaW5wdXQsIHNlbGYuZXJyb3JzLCBkZWNvZGluZ18lcylbMF0nJycgJQogICAgICAgICAoc3VmZml4LCBzdWZmaXgpKQogCiAgICAgbC5hcHBlbmQoJycnCi1jbGFzcyBTdHJlYW1Xcml0ZXIoQ29kZWMsY29kZWNzLlN0cmVhbVdyaXRlcik6CitjbGFzcyBTdHJlYW1Xcml0ZXIoQ29kZWMsIGNvZGVjcy5TdHJlYW1Xcml0ZXIpOgogICAgIHBhc3MKIAotY2xhc3MgU3RyZWFtUmVhZGVyKENvZGVjLGNvZGVjcy5TdHJlYW1SZWFkZXIpOgorY2xhc3MgU3RyZWFtUmVhZGVyKENvZGVjLCBjb2RlY3MuU3RyZWFtUmVhZGVyKToKICAgICBwYXNzCiAKICMjIyBlbmNvZGluZ3MgbW9kdWxlIEFQSQpAQCAtMzQzLDcgKzM0Myw3IEBACiAgICAgaWYgZGVjb2RpbmdfdGFibGVfY29kZToKICAgICAgICAgbC5hcHBlbmQoJycnCiAjIyMgRW5jb2RpbmcgdGFibGUKLWVuY29kaW5nX3RhYmxlPWNvZGVjcy5jaGFybWFwX2J1aWxkKGRlY29kaW5nX3RhYmxlKQorZW5jb2RpbmdfdGFibGUgPSBjb2RlY3MuY2hhcm1hcF9idWlsZChkZWNvZGluZ190YWJsZSkKICcnJykKICAgICBlbHNlOgogICAgICAgICBsLmFwcGVuZCgnJycKZGlmZiAtLWdpdCBhL1Rvb2xzL3VuaWNvZGUvZ2Vud2luY29kZWNzLmJhdCBiL1Rvb2xzL3VuaWNvZGUvZ2Vud2luY29kZWNzLmJhdAppbmRleCA0M2NhYjBkLi5hZDQ1YzZjIDEwMDY0NAotLS0gYS9Ub29scy91bmljb2RlL2dlbndpbmNvZGVjcy5iYXQKKysrIGIvVG9vbHMvdW5pY29kZS9nZW53aW5jb2RlY3MuYmF0CkBAIC0xLDcgKzEsNyBAQAotQHJlbSBSZWNyZWF0ZSBzb21lIHB5dGhvbiBjaGFybWFwIGNvZGVjcyBmcm9tIHRoZSBXaW5kb3dzIGZ1bmN0aW9uCi1AcmVtIE11bHRpQnl0ZVRvV2lkZUNoYXIuCi0KLUBjZCAvZCAlfmRwMAotQG1rZGlyIGJ1aWxkCi1AcmVtIEFyYWJpYyBET1MgY29kZSBwYWdlCi1jOlxweXRob24zMFxweXRob24gZ2Vud2luY29kZWMucHkgNzIwID4gYnVpbGQvY3A3MjAucHkKK0ByZW0gUmVjcmVhdGUgc29tZSBweXRob24gY2hhcm1hcCBjb2RlY3MgZnJvbSB0aGUgV2luZG93cyBmdW5jdGlvbg0KK0ByZW0gTXVsdGlCeXRlVG9XaWRlQ2hhci4NCisNCitAY2QgL2QgJX5kcDANCitAbWtkaXIgYnVpbGQNCitAcmVtIEFyYWJpYyBET1MgY29kZSBwYWdlDQorYzpccHl0aG9uMzBccHl0aG9uIGdlbndpbmNvZGVjLnB5IDcyMCA+IGJ1aWxkL2NwNzIwLnB5DQpkaWZmIC0tZ2l0IGEvVG9vbHMvdW5pY29kZS9tYWtldW5pY29kZWRhdGEucHkgYi9Ub29scy91bmljb2RlL21ha2V1bmljb2RlZGF0YS5weQppbmRleCBiYzNkMGNiLi43NjM2YTk1IDEwMDY0NAotLS0gYS9Ub29scy91bmljb2RlL21ha2V1bmljb2RlZGF0YS5weQorKysgYi9Ub29scy91bmljb2RlL21ha2V1bmljb2RlZGF0YS5weQpAQCAtMzcsNyArMzcsMTIgQEAKIFZFUlNJT04gPSAiMy4yIgogCiAjIFRoZSBVbmljb2RlIERhdGFiYXNlCi1VTklEQVRBX1ZFUlNJT04gPSAiNi4xLjAiCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFdoZW4gY2hhbmdpbmcgVUNEIHZlcnNpb24gcGxlYXNlIHVwZGF0ZQorIyAgICogRG9jL2xpYnJhcnkvc3RkdHlwZXMucnN0LCBhbmQKKyMgICAqIERvYy9saWJyYXJ5L3VuaWNvZGVkYXRhLnJzdAorIyAgICogRG9jL3JlZmVyZW5jZS9sZXhpY2FsX2FuYWx5c2lzLnJzdCAodHdvIG9jY3VycmVuY2VzKQorVU5JREFUQV9WRVJTSU9OID0gIjYuMy4wIgogVU5JQ09ERV9EQVRBID0gIlVuaWNvZGVEYXRhJXMudHh0IgogQ09NUE9TSVRJT05fRVhDTFVTSU9OUyA9ICJDb21wb3NpdGlvbkV4Y2x1c2lvbnMlcy50eHQiCiBFQVNUQVNJQU5fV0lEVEggPSAiRWFzdEFzaWFuV2lkdGglcy50eHQiCkBAIC02OCw3ICs3Myw3IEBACiAKIEJJRElSRUNUSU9OQUxfTkFNRVMgPSBbICIiLCAiTCIsICJMUkUiLCAiTFJPIiwgIlIiLCAiQUwiLCAiUkxFIiwgIlJMTyIsCiAgICAgIlBERiIsICJFTiIsICJFUyIsICJFVCIsICJBTiIsICJDUyIsICJOU00iLCAiQk4iLCAiQiIsICJTIiwgIldTIiwKLSAgICAiT04iIF0KKyAgICAiT04iLCAiTFJJIiwgIlJMSSIsICJGU0kiLCAiUERJIiBdCiAKIEVBU1RBU0lBTldJRFRIX05BTUVTID0gWyAiRiIsICJIIiwgIlciLCAiTmEiLCAiQSIsICJOIiBdCiAKQEAgLTU1Miw3ICs1NTcsNyBAQAogICAgIHByaW50KCIvKiBSZXR1cm5zIDEgZm9yIFVuaWNvZGUgY2hhcmFjdGVycyBoYXZpbmcgdGhlIGJpZGlyZWN0aW9uYWwiLCBmaWxlPWZwKQogICAgIHByaW50KCIgKiB0eXBlICdXUycsICdCJyBvciAnUycgb3IgdGhlIGNhdGVnb3J5ICdacycsIDAgb3RoZXJ3aXNlLiIsIGZpbGU9ZnApCiAgICAgcHJpbnQoIiAqLyIsIGZpbGU9ZnApCi0gICAgcHJpbnQoJ2ludCBfUHlVbmljb2RlX0lzV2hpdGVzcGFjZShyZWdpc3RlciBjb25zdCBQeV9VQ1M0IGNoKScsIGZpbGU9ZnApCisgICAgcHJpbnQoJ2ludCBfUHlVbmljb2RlX0lzV2hpdGVzcGFjZShjb25zdCBQeV9VQ1M0IGNoKScsIGZpbGU9ZnApCiAgICAgcHJpbnQoJ3snLCBmaWxlPWZwKQogICAgIHByaW50KCcgICAgc3dpdGNoIChjaCkgeycsIGZpbGU9ZnApCiAKQEAgLTU3MCw3ICs1NzUsNyBAQAogICAgIHByaW50KCIgKiBwcm9wZXJ0eSAnQksnLCAnQ1InLCAnTEYnIG9yICdOTCcgb3IgaGF2aW5nIGJpZGlyZWN0aW9uYWwiLCBmaWxlPWZwKQogICAgIHByaW50KCIgKiB0eXBlICdCJywgMCBvdGhlcndpc2UuIiwgZmlsZT1mcCkKICAgICBwcmludCgiICovIiwgZmlsZT1mcCkKLSAgICBwcmludCgnaW50IF9QeVVuaWNvZGVfSXNMaW5lYnJlYWsocmVnaXN0ZXIgY29uc3QgUHlfVUNTNCBjaCknLCBmaWxlPWZwKQorICAgIHByaW50KCdpbnQgX1B5VW5pY29kZV9Jc0xpbmVicmVhayhjb25zdCBQeV9VQ1M0IGNoKScsIGZpbGU9ZnApCiAgICAgcHJpbnQoJ3snLCBmaWxlPWZwKQogICAgIHByaW50KCcgICAgc3dpdGNoIChjaCkgeycsIGZpbGU9ZnApCiAgICAgZm9yIGNvZGVwb2ludCBpbiBzb3J0ZWQobGluZWJyZWFrcyk6CmRpZmYgLS1naXQgYS9Ub29scy91bmljb2RlL3B5dGhvbi1tYXBwaW5ncy9DUDI3My5UWFQgYi9Ub29scy91bmljb2RlL3B5dGhvbi1tYXBwaW5ncy9DUDI3My5UWFQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JiNWUxOAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL3VuaWNvZGUvcHl0aG9uLW1hcHBpbmdzL0NQMjczLlRYVApAQCAtMCwwICsxLDI1OCBAQAorMHgwMAkweDAwMDAJI05VTEwgKE5VTCkKKzB4MDEJMHgwMDAxCSNTVEFSVCBPRiBIRUFESU5HIChTT0gpCisweDAyCTB4MDAwMgkjU1RBUlQgT0YgVEVYVCAoU1RYKQorMHgwMwkweDAwMDMJI0VORCBPRiBURVhUIChFVFgpCisweDA0CTB4MDA5QwkjU1RSSU5HIFRFUk1JTkFUT1IgKFNUKQorMHgwNQkweDAwMDkJI0NIQVJBQ1RFUiBUQUJVTEFUSU9OIChIVCkKKzB4MDYJMHgwMDg2CSNTVEFSVCBPRiBTRUxFQ1RFRCBBUkVBIChTU0EpCisweDA3CTB4MDA3RgkjREVMRVRFIChERUwpCisweDA4CTB4MDA5NwkjRU5EIE9GIEdVQVJERUQgQVJFQSAoRVBBKQorMHgwOQkweDAwOEQJI1JFVkVSU0UgTElORSBGRUVEIChSSSkKKzB4MEEJMHgwMDhFCSNTSU5HTEUtU0hJRlQgVFdPIChTUzIpCisweDBCCTB4MDAwQgkjTElORSBUQUJVTEFUSU9OIChWVCkKKzB4MEMJMHgwMDBDCSNGT1JNIEZFRUQgKEZGKQorMHgwRAkweDAwMEQJI0NBUlJJQUdFIFJFVFVSTiAoQ1IpCisweDBFCTB4MDAwRQkjU0hJRlQgT1VUIChTTykKKzB4MEYJMHgwMDBGCSNTSElGVCBJTiAoU0kpCisweDEwCTB4MDAxMAkjREFUQUxJTksgRVNDQVBFIChETEUpCisweDExCTB4MDAxMQkjREVWSUNFIENPTlRST0wgT05FIChEQzEpCisweDEyCTB4MDAxMgkjREVWSUNFIENPTlRST0wgVFdPIChEQzIpCisweDEzCTB4MDAxMwkjREVWSUNFIENPTlRST0wgVEhSRUUgKERDMykKKzB4MTQJMHgwMDlECSNPUEVSQVRJTkcgU1lTVEVNIENPTU1BTkQgKE9TQykKKzB4MTUJMHgwMDg1CSNORVhUIExJTkUgKE5FTCkKKzB4MTYJMHgwMDA4CSNCQUNLU1BBQ0UgKEJTKQorMHgxNwkweDAwODcJI0VORCBPRiBTRUxFQ1RFRCBBUkVBIChFU0EpCisweDE4CTB4MDAxOAkjQ0FOQ0VMIChDQU4pCisweDE5CTB4MDAxOQkjRU5EIE9GIE1FRElVTSAoRU0pCisweDFBCTB4MDA5MgkjUFJJVkFURSBVU0UgVFdPIChQVTIpCisweDFCCTB4MDA4RgkjU0lOR0xFLVNISUZUIFRIUkVFIChTUzMpCisweDFDCTB4MDAxQwkjRklMRSBTRVBBUkFUT1IgKElTNCkKKzB4MUQJMHgwMDFECSNHUk9VUCBTRVBBUkFUT1IgKElTMykKKzB4MUUJMHgwMDFFCSNSRUNPUkQgU0VQQVJBVE9SIChJUzIpCisweDFGCTB4MDAxRgkjVU5JVCBTRVBBUkFUT1IgKElTMSkKKzB4MjAJMHgwMDgwCSNQQURESU5HIENIQVJBQ1RFUiAoUEFEKQorMHgyMQkweDAwODEJI0hJR0ggT0NURVQgUFJFU0VUIChIT1ApCisweDIyCTB4MDA4MgkjQlJFQUsgUEVSTUlUVEVEIEhFUkUgKEJQSCkKKzB4MjMJMHgwMDgzCSNOTyBCUkVBSyBIRVJFIChOQkgpCisweDI0CTB4MDA4NAkjSU5ERVggKElORCkKKzB4MjUJMHgwMDBBCSNMSU5FIEZFRUQgKExGKQorMHgyNgkweDAwMTcJI0VORCBPRiBUUkFOU01JU1NJT04gQkxPQ0sgKEVUQikKKzB4MjcJMHgwMDFCCSNFU0NBUEUgKEVTQykKKzB4MjgJMHgwMDg4CSNDSEFSQUNURVIgVEFCVUxBVElPTiBTRVQgKEhUUykKKzB4MjkJMHgwMDg5CSNDSEFSQUNURVIgVEFCVUxBVElPTiBXSVRIIEpVU1RJRklDQVRJT04gKEhUSikKKzB4MkEJMHgwMDhBCSNMSU5FIFRBQlVMQVRJT04gU0VUIChWVFMpCisweDJCCTB4MDA4QgkjUEFSVElBTCBMSU5FIEZPUldBUkQgKFBMRCkKKzB4MkMJMHgwMDhDCSNQQVJUSUFMIExJTkUgQkFDS1dBUkQgKFBMVSkKKzB4MkQJMHgwMDA1CSNFTlFVSVJZIChFTlEpCisweDJFCTB4MDAwNgkjQUNLTk9XTEVER0UgKEFDSykKKzB4MkYJMHgwMDA3CSNCRUxMIChCRUwpCisweDMwCTB4MDA5MAkjREVWSUNFIENPTlRST0wgU1RSSU5HIChEQ1MpCisweDMxCTB4MDA5MQkjUFJJVkFURSBVU0UgT05FIChQVTEpCisweDMyCTB4MDAxNgkjU1lOQ0hST05PVVMgSURMRSAoU1lOKQorMHgzMwkweDAwOTMJI1NFVCBUUkFOU01JVCBTVEFURSAoU1RTKQorMHgzNAkweDAwOTQJI0NBTkNFTCBDSEFSQUNURVIgKENDSCkKKzB4MzUJMHgwMDk1CSNNRVNTQUdFIFdBSVRJTkcgKE1XKQorMHgzNgkweDAwOTYJI1NUQVJUIE9GIEdVQVJERUQgQVJFQSAoU1BBKQorMHgzNwkweDAwMDQJI0VORCBPRiBUUkFOU01JU1NJT04gKEVPVCkKKzB4MzgJMHgwMDk4CSNTVEFSVCBPRiBTVFJJTkcgKFNPUykKKzB4MzkJMHgwMDk5CSNTSU5HTEUgR1JBUEhJQyBDSEFSQUNURVIgSU5UUk9EVUNFUiAoU0dDSSkKKzB4M0EJMHgwMDlBCSNTSU5HTEUgQ0hBUkFDVEVSIElOVFJPRFVDRVIgKFNDSSkKKzB4M0IJMHgwMDlCCSNDT05UUk9MIFNFUVVFTkNFIElOVFJPRFVDRVIgKENTSSkKKzB4M0MJMHgwMDE0CSNERVZJQ0UgQ09OVFJPTCBGT1VSIChEQzQpCisweDNECTB4MDAxNQkjTkVHQVRJVkUgQUNLTk9XTEVER0UgKE5BSykKKzB4M0UJMHgwMDlFCSNQUklWQUNZIE1FU1NBR0UgKFBNKQorMHgzRgkweDAwMUEJI1NVQlNUSVRVVEUgKFNVQikKKzB4NDAJMHgwMDIwCSNTUEFDRQorMHg0MQkweDAwQTAJI05PLUJSRUFLIFNQQUNFCisweDQyCTB4MDBFMgkjTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBDSVJDVU1GTEVYCisweDQzCTB4MDA3QgkjTEVGVCBDVVJMWSBCUkFDS0VUCisweDQ0CTB4MDBFMAkjTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBHUkFWRQorMHg0NQkweDAwRTEJI0xBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggQUNVVEUKKzB4NDYJMHgwMEUzCSNMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIFRJTERFCisweDQ3CTB4MDBFNQkjTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBSSU5HIEFCT1ZFCisweDQ4CTB4MDBFNwkjTEFUSU4gU01BTEwgTEVUVEVSIEMgV0lUSCBDRURJTExBCisweDQ5CTB4MDBGMQkjTEFUSU4gU01BTEwgTEVUVEVSIE4gV0lUSCBUSUxERQorMHg0QQkweDAwQzQJI0xBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBESUFFUkVTSVMKKzB4NEIJMHgwMDJFCSNGVUxMIFNUT1AKKzB4NEMJMHgwMDNDCSNMRVNTLVRIQU4gU0lHTgorMHg0RAkweDAwMjgJI0xFRlQgUEFSRU5USEVTSVMKKzB4NEUJMHgwMDJCCSNQTFVTIFNJR04KKzB4NEYJMHgwMDIxCSNFWENMQU1BVElPTiBNQVJLCisweDUwCTB4MDAyNgkjQU1QRVJTQU5ECisweDUxCTB4MDBFOQkjTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBBQ1VURQorMHg1MgkweDAwRUEJI0xBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggQ0lSQ1VNRkxFWAorMHg1MwkweDAwRUIJI0xBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggRElBRVJFU0lTCisweDU0CTB4MDBFOAkjTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBHUkFWRQorMHg1NQkweDAwRUQJI0xBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggQUNVVEUKKzB4NTYJMHgwMEVFCSNMQVRJTiBTTUFMTCBMRVRURVIgSSBXSVRIIENJUkNVTUZMRVgKKzB4NTcJMHgwMEVGCSNMQVRJTiBTTUFMTCBMRVRURVIgSSBXSVRIIERJQUVSRVNJUworMHg1OAkweDAwRUMJI0xBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggR1JBVkUKKzB4NTkJMHgwMDdFCSNUSUxERQorMHg1QQkweDAwREMJI0xBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBESUFFUkVTSVMKKzB4NUIJMHgwMDI0CSNET0xMQVIgU0lHTgorMHg1QwkweDAwMkEJI0FTVEVSSVNLCisweDVECTB4MDAyOQkjUklHSFQgUEFSRU5USEVTSVMKKzB4NUUJMHgwMDNCCSNTRU1JQ09MT04KKzB4NUYJMHgwMDVFCSNDSVJDVU1GTEVYIEFDQ0VOVAorMHg2MAkweDAwMkQJI0hZUEhFTi1NSU5VUworMHg2MQkweDAwMkYJI1NPTElEVVMKKzB4NjIJMHgwMEMyCSNMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggQ0lSQ1VNRkxFWAorMHg2MwkweDAwNUIJI0xFRlQgU1FVQVJFIEJSQUNLRVQKKzB4NjQJMHgwMEMwCSNMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggR1JBVkUKKzB4NjUJMHgwMEMxCSNMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggQUNVVEUKKzB4NjYJMHgwMEMzCSNMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggVElMREUKKzB4NjcJMHgwMEM1CSNMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggUklORyBBQk9WRQorMHg2OAkweDAwQzcJI0xBVElOIENBUElUQUwgTEVUVEVSIEMgV0lUSCBDRURJTExBCisweDY5CTB4MDBEMQkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgTiBXSVRIIFRJTERFCisweDZBCTB4MDBGNgkjTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBESUFFUkVTSVMKKzB4NkIJMHgwMDJDCSNDT01NQQorMHg2QwkweDAwMjUJI1BFUkNFTlQgU0lHTgorMHg2RAkweDAwNUYJI0xPVyBMSU5FCisweDZFCTB4MDAzRQkjR1JFQVRFUi1USEFOIFNJR04KKzB4NkYJMHgwMDNGCSNRVUVTVElPTiBNQVJLCisweDcwCTB4MDBGOAkjTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBTVFJPS0UKKzB4NzEJMHgwMEM5CSNMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggQUNVVEUKKzB4NzIJMHgwMENBCSNMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggQ0lSQ1VNRkxFWAorMHg3MwkweDAwQ0IJI0xBVElOIENBUElUQUwgTEVUVEVSIEUgV0lUSCBESUFFUkVTSVMKKzB4NzQJMHgwMEM4CSNMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggR1JBVkUKKzB4NzUJMHgwMENECSNMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggQUNVVEUKKzB4NzYJMHgwMENFCSNMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggQ0lSQ1VNRkxFWAorMHg3NwkweDAwQ0YJI0xBVElOIENBUElUQUwgTEVUVEVSIEkgV0lUSCBESUFFUkVTSVMKKzB4NzgJMHgwMENDCSNMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggR1JBVkUKKzB4NzkJMHgwMDYwCSNHUkFWRSBBQ0NFTlQKKzB4N0EJMHgwMDNBCSNDT0xPTgorMHg3QgkweDAwMjMJI05VTUJFUiBTSUdOCisweDdDCTB4MDBBNwkjU0VDVElPTiBTSUdOCisweDdECTB4MDAyNwkjQVBPU1RST1BIRQorMHg3RQkweDAwM0QJI0VRVUFMUyBTSUdOCisweDdGCTB4MDAyMgkjUVVPVEFUSU9OIE1BUksKKzB4ODAJMHgwMEQ4CSNMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggU1RST0tFCisweDgxCTB4MDA2MQkjTEFUSU4gU01BTEwgTEVUVEVSIEEKKzB4ODIJMHgwMDYyCSNMQVRJTiBTTUFMTCBMRVRURVIgQgorMHg4MwkweDAwNjMJI0xBVElOIFNNQUxMIExFVFRFUiBDCisweDg0CTB4MDA2NAkjTEFUSU4gU01BTEwgTEVUVEVSIEQKKzB4ODUJMHgwMDY1CSNMQVRJTiBTTUFMTCBMRVRURVIgRQorMHg4NgkweDAwNjYJI0xBVElOIFNNQUxMIExFVFRFUiBGCisweDg3CTB4MDA2NwkjTEFUSU4gU01BTEwgTEVUVEVSIEcKKzB4ODgJMHgwMDY4CSNMQVRJTiBTTUFMTCBMRVRURVIgSAorMHg4OQkweDAwNjkJI0xBVElOIFNNQUxMIExFVFRFUiBJCisweDhBCTB4MDBBQgkjTEVGVC1QT0lOVElORyBET1VCTEUgQU5HTEUgUVVPVEFUSU9OIE1BUksKKzB4OEIJMHgwMEJCCSNSSUdIVC1QT0lOVElORyBET1VCTEUgQU5HTEUgUVVPVEFUSU9OIE1BUksKKzB4OEMJMHgwMEYwCSNMQVRJTiBTTUFMTCBMRVRURVIgRVRIIChJY2VsYW5kaWMpCisweDhECTB4MDBGRAkjTEFUSU4gU01BTEwgTEVUVEVSIFkgV0lUSCBBQ1VURQorMHg4RQkweDAwRkUJI0xBVElOIFNNQUxMIExFVFRFUiBUSE9STiAoSWNlbGFuZGljKQorMHg4RgkweDAwQjEJI1BMVVMtTUlOVVMgU0lHTgorMHg5MAkweDAwQjAJI0RFR1JFRSBTSUdOCisweDkxCTB4MDA2QQkjTEFUSU4gU01BTEwgTEVUVEVSIEoKKzB4OTIJMHgwMDZCCSNMQVRJTiBTTUFMTCBMRVRURVIgSworMHg5MwkweDAwNkMJI0xBVElOIFNNQUxMIExFVFRFUiBMCisweDk0CTB4MDA2RAkjTEFUSU4gU01BTEwgTEVUVEVSIE0KKzB4OTUJMHgwMDZFCSNMQVRJTiBTTUFMTCBMRVRURVIgTgorMHg5NgkweDAwNkYJI0xBVElOIFNNQUxMIExFVFRFUiBPCisweDk3CTB4MDA3MAkjTEFUSU4gU01BTEwgTEVUVEVSIFAKKzB4OTgJMHgwMDcxCSNMQVRJTiBTTUFMTCBMRVRURVIgUQorMHg5OQkweDAwNzIJI0xBVElOIFNNQUxMIExFVFRFUiBSCisweDlBCTB4MDBBQQkjRkVNSU5JTkUgT1JESU5BTCBJTkRJQ0FUT1IKKzB4OUIJMHgwMEJBCSNNQVNDVUxJTkUgT1JESU5BTCBJTkRJQ0FUT1IKKzB4OUMJMHgwMEU2CSNMQVRJTiBTTUFMTCBMRVRURVIgQUUKKzB4OUQJMHgwMEI4CSNDRURJTExBCisweDlFCTB4MDBDNgkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgQUUKKzB4OUYJMHgwMEE0CSNDVVJSRU5DWSBTSUdOCisweEEwCTB4MDBCNQkjTUlDUk8gU0lHTgorMHhBMQkweDAwREYJI0xBVElOIFNNQUxMIExFVFRFUiBTSEFSUCBTIChHZXJtYW4pCisweEEyCTB4MDA3MwkjTEFUSU4gU01BTEwgTEVUVEVSIFMKKzB4QTMJMHgwMDc0CSNMQVRJTiBTTUFMTCBMRVRURVIgVAorMHhBNAkweDAwNzUJI0xBVElOIFNNQUxMIExFVFRFUiBVCisweEE1CTB4MDA3NgkjTEFUSU4gU01BTEwgTEVUVEVSIFYKKzB4QTYJMHgwMDc3CSNMQVRJTiBTTUFMTCBMRVRURVIgVworMHhBNwkweDAwNzgJI0xBVElOIFNNQUxMIExFVFRFUiBYCisweEE4CTB4MDA3OQkjTEFUSU4gU01BTEwgTEVUVEVSIFkKKzB4QTkJMHgwMDdBCSNMQVRJTiBTTUFMTCBMRVRURVIgWgorMHhBQQkweDAwQTEJI0lOVkVSVEVEIEVYQ0xBTUFUSU9OIE1BUksKKzB4QUIJMHgwMEJGCSNJTlZFUlRFRCBRVUVTVElPTiBNQVJLCisweEFDCTB4MDBEMAkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgRVRIIChJY2VsYW5kaWMpCisweEFECTB4MDBERAkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgWSBXSVRIIEFDVVRFCisweEFFCTB4MDBERQkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgVEhPUk4gKEljZWxhbmRpYykKKzB4QUYJMHgwMEFFCSNSRUdJU1RFUkVEIFNJR04KKzB4QjAJMHgwMEEyCSNDRU5UIFNJR04KKzB4QjEJMHgwMEEzCSNQT1VORCBTSUdOCisweEIyCTB4MDBBNQkjWUVOIFNJR04KKzB4QjMJMHgwMEI3CSNNSURETEUgRE9UCisweEI0CTB4MDBBOQkjQ09QWVJJR0hUIFNJR04KKzB4QjUJMHgwMDQwCSNDT01NRVJDSUFMIEFUCisweEI2CTB4MDBCNgkjUElMQ1JPVyBTSUdOCisweEI3CTB4MDBCQwkjVlVMR0FSIEZSQUNUSU9OIE9ORSBRVUFSVEVSCisweEI4CTB4MDBCRAkjVlVMR0FSIEZSQUNUSU9OIE9ORSBIQUxGCisweEI5CTB4MDBCRQkjVlVMR0FSIEZSQUNUSU9OIFRIUkVFIFFVQVJURVJTCisweEJBCTB4MDBBQwkjTk9UIFNJR04KKzB4QkIJMHgwMDdDCSNWRVJUSUNBTCBMSU5FCisweEJDCTB4MjAzRQkjT1ZFUkxJTkUKKzB4QkQJMHgwMEE4CSNESUFFUkVTSVMKKzB4QkUJMHgwMEI0CSNBQ1VURSBBQ0NFTlQKKzB4QkYJMHgwMEQ3CSNNVUxUSVBMSUNBVElPTiBTSUdOCisweEMwCTB4MDBFNAkjTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBESUFFUkVTSVMKKzB4QzEJMHgwMDQxCSNMQVRJTiBDQVBJVEFMIExFVFRFUiBBCisweEMyCTB4MDA0MgkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgQgorMHhDMwkweDAwNDMJI0xBVElOIENBUElUQUwgTEVUVEVSIEMKKzB4QzQJMHgwMDQ0CSNMQVRJTiBDQVBJVEFMIExFVFRFUiBECisweEM1CTB4MDA0NQkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgRQorMHhDNgkweDAwNDYJI0xBVElOIENBUElUQUwgTEVUVEVSIEYKKzB4QzcJMHgwMDQ3CSNMQVRJTiBDQVBJVEFMIExFVFRFUiBHCisweEM4CTB4MDA0OAkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgSAorMHhDOQkweDAwNDkJI0xBVElOIENBUElUQUwgTEVUVEVSIEkKKzB4Q0EJMHgwMEFECSNTT0ZUIEhZUEhFTgorMHhDQgkweDAwRjQJI0xBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggQ0lSQ1VNRkxFWAorMHhDQwkweDAwQTYJI0JST0tFTiBCQVIKKzB4Q0QJMHgwMEYyCSNMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIEdSQVZFCisweENFCTB4MDBGMwkjTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBBQ1VURQorMHhDRgkweDAwRjUJI0xBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggVElMREUKKzB4RDAJMHgwMEZDCSNMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIERJQUVSRVNJUworMHhEMQkweDAwNEEJI0xBVElOIENBUElUQUwgTEVUVEVSIEoKKzB4RDIJMHgwMDRCCSNMQVRJTiBDQVBJVEFMIExFVFRFUiBLCisweEQzCTB4MDA0QwkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgTAorMHhENAkweDAwNEQJI0xBVElOIENBUElUQUwgTEVUVEVSIE0KKzB4RDUJMHgwMDRFCSNMQVRJTiBDQVBJVEFMIExFVFRFUiBOCisweEQ2CTB4MDA0RgkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgTworMHhENwkweDAwNTAJI0xBVElOIENBUElUQUwgTEVUVEVSIFAKKzB4RDgJMHgwMDUxCSNMQVRJTiBDQVBJVEFMIExFVFRFUiBRCisweEQ5CTB4MDA1MgkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgUgorMHhEQQkweDAwQjkJI1NVUEVSU0NSSVBUIE9ORQorMHhEQgkweDAwRkIJI0xBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggQ0lSQ1VNRkxFWAorMHhEQwkweDAwN0QJI1JJR0hUIENVUkxZIEJSQUNLRVQKKzB4REQJMHgwMEY5CSNMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIEdSQVZFCisweERFCTB4MDBGQQkjTEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBBQ1VURQorMHhERgkweDAwRkYJI0xBVElOIFNNQUxMIExFVFRFUiBZIFdJVEggRElBRVJFU0lTCisweEUwCTB4MDBENgkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIERJQUVSRVNJUworMHhFMQkweDAwRjcJI0RJVklTSU9OIFNJR04KKzB4RTIJMHgwMDUzCSNMQVRJTiBDQVBJVEFMIExFVFRFUiBTCisweEUzCTB4MDA1NAkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgVAorMHhFNAkweDAwNTUJI0xBVElOIENBUElUQUwgTEVUVEVSIFUKKzB4RTUJMHgwMDU2CSNMQVRJTiBDQVBJVEFMIExFVFRFUiBWCisweEU2CTB4MDA1NwkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgVworMHhFNwkweDAwNTgJI0xBVElOIENBUElUQUwgTEVUVEVSIFgKKzB4RTgJMHgwMDU5CSNMQVRJTiBDQVBJVEFMIExFVFRFUiBZCisweEU5CTB4MDA1QQkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgWgorMHhFQQkweDAwQjIJI1NVUEVSU0NSSVBUIFRXTworMHhFQgkweDAwRDQJI0xBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBDSVJDVU1GTEVYCisweEVDCTB4MDA1QwkjUkVWRVJTRSBTT0xJRFVTCisweEVECTB4MDBEMgkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIEdSQVZFCisweEVFCTB4MDBEMwkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIEFDVVRFCisweEVGCTB4MDBENQkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIFRJTERFCisweEYwCTB4MDAzMAkjRElHSVQgWkVSTworMHhGMQkweDAwMzEJI0RJR0lUIE9ORQorMHhGMgkweDAwMzIJI0RJR0lUIFRXTworMHhGMwkweDAwMzMJI0RJR0lUIFRIUkVFCisweEY0CTB4MDAzNAkjRElHSVQgRk9VUgorMHhGNQkweDAwMzUJI0RJR0lUIEZJVkUKKzB4RjYJMHgwMDM2CSNESUdJVCBTSVgKKzB4RjcJMHgwMDM3CSNESUdJVCBTRVZFTgorMHhGOAkweDAwMzgJI0RJR0lUIEVJR0hUCisweEY5CTB4MDAzOQkjRElHSVQgTklORQorMHhGQQkweDAwQjMJI1NVUEVSU0NSSVBUIFRIUkVFCisweEZCCTB4MDBEQgkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIENJUkNVTUZMRVgKKzB4RkMJMHgwMDVECSNSSUdIVCBTUVVBUkUgQlJBQ0tFVAorMHhGRAkweDAwRDkJI0xBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBHUkFWRQorMHhGRQkweDAwREEJI0xBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBBQ1VURQorMHhGRgkweDAwOUYJI0FQUExJQ0FUSU9OIFBST0dSQU0gQ09NTUFORCAoQVBDKQorCisgCSAgCSAKZGlmZiAtLWdpdCBhL2FjbG9jYWwubTQgYi9hY2xvY2FsLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkMjVmYjkKLS0tIC9kZXYvbnVsbAorKysgYi9hY2xvY2FsLm00CkBAIC0wLDAgKzEsMjI5IEBACisjIGdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IGFjbG9jYWwgMS4xNC4xIC0qLSBBdXRvY29uZiAtKi0KKworIyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0CisjIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKyMgUEFSVElDVUxBUiBQVVJQT1NFLgorCittNF9pZm5kZWYoW0FDX0NPTkZJR19NQUNST19ESVJTXSwgW200X2RlZnVuKFtfQU1fQ09ORklHX01BQ1JPX0RJUlNdLCBbXSltNF9kZWZ1bihbQUNfQ09ORklHX01BQ1JPX0RJUlNdLCBbX0FNX0NPTkZJR19NQUNST19ESVJTKCRAKV0pXSkKKyMgcGtnLm00IC0gTWFjcm9zIHRvIGxvY2F0ZSBhbmQgdXRpbGlzZSBwa2ctY29uZmlnLiAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KKyMgc2VyaWFsIDEgKHBrZy1jb25maWctMC4yNCkKKyMgCisjIENvcHlyaWdodCDCqSAyMDA0IFNjb3R0IEphbWVzIFJlbW5hbnQgPHNjb3R0QG5ldHNwbGl0LmNvbT4uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyMgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisjCisjIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpZiB5b3UKKyMgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gdGhhdCBjb250YWlucyBhCisjIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgeW91IG1heSBpbmNsdWRlIGl0IHVuZGVyCisjIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKworIyBQS0dfUFJPR19QS0dfQ09ORklHKFtNSU4tVkVSU0lPTl0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtQS0dfUFJPR19QS0dfQ09ORklHXSwKK1ttNF9wYXR0ZXJuX2ZvcmJpZChbXl8/UEtHX1tBLVpfXSskXSkKK200X3BhdHRlcm5fYWxsb3coW15QS0dfQ09ORklHKF8oUEFUSHxMSUJESVJ8U1lTUk9PVF9ESVJ8QUxMT1dfU1lTVEVNXyhDRkxBR1N8TElCUykpKT8kXSkKK200X3BhdHRlcm5fYWxsb3coW15QS0dfQ09ORklHXyhESVNBQkxFX1VOSU5TVEFMTEVEfFRPUF9CVUlMRF9ESVJ8REVCVUdfU1BFVykkXSkKK0FDX0FSR19WQVIoW1BLR19DT05GSUddLCBbcGF0aCB0byBwa2ctY29uZmlnIHV0aWxpdHldKQorQUNfQVJHX1ZBUihbUEtHX0NPTkZJR19QQVRIXSwgW2RpcmVjdG9yaWVzIHRvIGFkZCB0byBwa2ctY29uZmlnJ3Mgc2VhcmNoIHBhdGhdKQorQUNfQVJHX1ZBUihbUEtHX0NPTkZJR19MSUJESVJdLCBbcGF0aCBvdmVycmlkaW5nIHBrZy1jb25maWcncyBidWlsdC1pbiBzZWFyY2ggcGF0aF0pCisKK2lmIHRlc3QgIngkYWNfY3ZfZW52X1BLR19DT05GSUdfc2V0IiAhPSAieHNldCI7IHRoZW4KKwlBQ19QQVRIX1RPT0woW1BLR19DT05GSUddLCBbcGtnLWNvbmZpZ10pCitmaQoraWYgdGVzdCAtbiAiJFBLR19DT05GSUciOyB0aGVuCisJX3BrZ19taW5fdmVyc2lvbj1tNF9kZWZhdWx0KFskMV0sIFswLjkuMF0pCisJQUNfTVNHX0NIRUNLSU5HKFtwa2ctY29uZmlnIGlzIGF0IGxlYXN0IHZlcnNpb24gJF9wa2dfbWluX3ZlcnNpb25dKQorCWlmICRQS0dfQ09ORklHIC0tYXRsZWFzdC1wa2djb25maWctdmVyc2lvbiAkX3BrZ19taW5fdmVyc2lvbjsgdGhlbgorCQlBQ19NU0dfUkVTVUxUKFt5ZXNdKQorCWVsc2UKKwkJQUNfTVNHX1JFU1VMVChbbm9dKQorCQlQS0dfQ09ORklHPSIiCisJZmkKK2ZpW11kbmwKK10pIyBQS0dfUFJPR19QS0dfQ09ORklHCisKKyMgUEtHX0NIRUNLX0VYSVNUUyhNT0RVTEVTLCBbQUNUSU9OLUlGLUZPVU5EXSwgW0FDVElPTi1JRi1OT1QtRk9VTkRdKQorIworIyBDaGVjayB0byBzZWUgd2hldGhlciBhIHBhcnRpY3VsYXIgc2V0IG9mIG1vZHVsZXMgZXhpc3RzLiAgU2ltaWxhcgorIyB0byBQS0dfQ0hFQ0tfTU9EVUxFUygpLCBidXQgZG9lcyBub3Qgc2V0IHZhcmlhYmxlcyBvciBwcmludCBlcnJvcnMuCisjCisjIFBsZWFzZSByZW1lbWJlciB0aGF0IG00IGV4cGFuZHMgQUNfUkVRVUlSRShbUEtHX1BST0dfUEtHX0NPTkZJR10pCisjIG9ubHkgYXQgdGhlIGZpcnN0IG9jY3VyZW5jZSBpbiBjb25maWd1cmUuYWMsIHNvIGlmIHRoZSBmaXJzdCBwbGFjZQorIyBpdCdzIGNhbGxlZCBtaWdodCBiZSBza2lwcGVkIChzdWNoIGFzIGlmIGl0IGlzIHdpdGhpbiBhbiAiaWYiLCB5b3UKKyMgaGF2ZSB0byBjYWxsIFBLR19DSEVDS19FWElTVFMgbWFudWFsbHkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtQS0dfQ0hFQ0tfRVhJU1RTXSwKK1tBQ19SRVFVSVJFKFtQS0dfUFJPR19QS0dfQ09ORklHXSlkbmwKK2lmIHRlc3QgLW4gIiRQS0dfQ09ORklHIiAmJiBcCisgICAgQUNfUlVOX0xPRyhbJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgIiQxIl0pOyB0aGVuCisgIG00X2RlZmF1bHQoWyQyXSwgWzpdKQorbTRfaWZ2YWxuKFskM10sIFtlbHNlCisgICQzXSlkbmwKK2ZpXSkKKworIyBfUEtHX0NPTkZJRyhbVkFSSUFCTEVdLCBbQ09NTUFORF0sIFtNT0RVTEVTXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW19QS0dfQ09ORklHXSwKK1tpZiB0ZXN0IC1uICIkJDEiOyB0aGVuCisgICAgcGtnX2N2X1tdJDE9IiQkMSIKKyBlbGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIjsgdGhlbgorICAgIFBLR19DSEVDS19FWElTVFMoWyQzXSwKKyAgICAgICAgICAgICAgICAgICAgIFtwa2dfY3ZfW10kMT1gJFBLR19DT05GSUcgLS1bXSQyICIkMyIgMj4vZGV2L251bGxgCisJCSAgICAgIHRlc3QgIngkPyIgIT0gIngwIiAmJiBwa2dfZmFpbGVkPXllcyBdLAorCQkgICAgIFtwa2dfZmFpbGVkPXllc10pCisgZWxzZQorICAgIHBrZ19mYWlsZWQ9dW50cmllZAorZmlbXWRubAorXSkjIF9QS0dfQ09ORklHCisKKyMgX1BLR19TSE9SVF9FUlJPUlNfU1VQUE9SVEVECisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbX1BLR19TSE9SVF9FUlJPUlNfU1VQUE9SVEVEXSwKK1tBQ19SRVFVSVJFKFtQS0dfUFJPR19QS0dfQ09ORklHXSkKK2lmICRQS0dfQ09ORklHIC0tYXRsZWFzdC1wa2djb25maWctdmVyc2lvbiAwLjIwOyB0aGVuCisgICAgICAgIF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZD15ZXMKK2Vsc2UKKyAgICAgICAgX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkPW5vCitmaVtdZG5sCitdKSMgX1BLR19TSE9SVF9FUlJPUlNfU1VQUE9SVEVECisKKworIyBQS0dfQ0hFQ0tfTU9EVUxFUyhWQVJJQUJMRS1QUkVGSVgsIE1PRFVMRVMsIFtBQ1RJT04tSUYtRk9VTkRdLAorIyBbQUNUSU9OLUlGLU5PVC1GT1VORF0pCisjCisjCisjIE5vdGUgdGhhdCBpZiB0aGVyZSBpcyBhIHBvc3NpYmlsaXR5IHRoZSBmaXJzdCBjYWxsIHRvCisjIFBLR19DSEVDS19NT0RVTEVTIG1pZ2h0IG5vdCBoYXBwZW4sIHlvdSBzaG91bGQgYmUgc3VyZSB0byBpbmNsdWRlIGFuCisjIGV4cGxpY2l0IGNhbGwgdG8gUEtHX1BST0dfUEtHX0NPTkZJRyBpbiB5b3VyIGNvbmZpZ3VyZS5hYworIworIworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW1BLR19DSEVDS19NT0RVTEVTXSwKK1tBQ19SRVFVSVJFKFtQS0dfUFJPR19QS0dfQ09ORklHXSlkbmwKK0FDX0FSR19WQVIoWyQxXVtfQ0ZMQUdTXSwgW0MgY29tcGlsZXIgZmxhZ3MgZm9yICQxLCBvdmVycmlkaW5nIHBrZy1jb25maWddKWRubAorQUNfQVJHX1ZBUihbJDFdW19MSUJTXSwgW2xpbmtlciBmbGFncyBmb3IgJDEsIG92ZXJyaWRpbmcgcGtnLWNvbmZpZ10pZG5sCisKK3BrZ19mYWlsZWQ9bm8KK0FDX01TR19DSEVDS0lORyhbZm9yICQxXSkKKworX1BLR19DT05GSUcoWyQxXVtfQ0ZMQUdTXSwgW2NmbGFnc10sIFskMl0pCitfUEtHX0NPTkZJRyhbJDFdW19MSUJTXSwgW2xpYnNdLCBbJDJdKQorCittNF9kZWZpbmUoW19QS0dfVEVYVF0sIFtBbHRlcm5hdGl2ZWx5LCB5b3UgbWF5IHNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzICQxW11fQ0ZMQUdTCithbmQgJDFbXV9MSUJTIHRvIGF2b2lkIHRoZSBuZWVkIHRvIGNhbGwgcGtnLWNvbmZpZy4KK1NlZSB0aGUgcGtnLWNvbmZpZyBtYW4gcGFnZSBmb3IgbW9yZSBkZXRhaWxzLl0pCisKK2lmIHRlc3QgJHBrZ19mYWlsZWQgPSB5ZXM7IHRoZW4KKyAgIAlBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICAgIF9QS0dfU0hPUlRfRVJST1JTX1NVUFBPUlRFRAorICAgICAgICBpZiB0ZXN0ICRfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQgPSB5ZXM7IHRoZW4KKwkgICAgICAgICQxW11fUEtHX0VSUk9SUz1gJFBLR19DT05GSUcgLS1zaG9ydC1lcnJvcnMgLS1wcmludC1lcnJvcnMgLS1jZmxhZ3MgLS1saWJzICIkMiIgMj4mMWAKKyAgICAgICAgZWxzZSAKKwkgICAgICAgICQxW11fUEtHX0VSUk9SUz1gJFBLR19DT05GSUcgLS1wcmludC1lcnJvcnMgLS1jZmxhZ3MgLS1saWJzICIkMiIgMj4mMWAKKyAgICAgICAgZmkKKwkjIFB1dCB0aGUgbmFzdHkgZXJyb3IgbWVzc2FnZSBpbiBjb25maWcubG9nIHdoZXJlIGl0IGJlbG9uZ3MKKwllY2hvICIkJDFbXV9QS0dfRVJST1JTIiA+JkFTX01FU1NBR0VfTE9HX0ZECisKKwltNF9kZWZhdWx0KFskNF0sIFtBQ19NU0dfRVJST1IoCitbUGFja2FnZSByZXF1aXJlbWVudHMgKCQyKSB3ZXJlIG5vdCBtZXQ6CisKKyQkMV9QS0dfRVJST1JTCisKK0NvbnNpZGVyIGFkanVzdGluZyB0aGUgUEtHX0NPTkZJR19QQVRIIGVudmlyb25tZW50IHZhcmlhYmxlIGlmIHlvdQoraW5zdGFsbGVkIHNvZnR3YXJlIGluIGEgbm9uLXN0YW5kYXJkIHByZWZpeC4KKworX1BLR19URVhUXSlbXWRubAorICAgICAgICBdKQorZWxpZiB0ZXN0ICRwa2dfZmFpbGVkID0gdW50cmllZDsgdGhlbgorICAgICAJQUNfTVNHX1JFU1VMVChbbm9dKQorCW00X2RlZmF1bHQoWyQ0XSwgW0FDX01TR19GQUlMVVJFKAorW1RoZSBwa2ctY29uZmlnIHNjcmlwdCBjb3VsZCBub3QgYmUgZm91bmQgb3IgaXMgdG9vIG9sZC4gIE1ha2Ugc3VyZSBpdAoraXMgaW4geW91ciBQQVRIIG9yIHNldCB0aGUgUEtHX0NPTkZJRyBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byB0aGUgZnVsbAorcGF0aCB0byBwa2ctY29uZmlnLgorCitfUEtHX1RFWFQKKworVG8gZ2V0IHBrZy1jb25maWcsIHNlZSA8aHR0cDovL3BrZy1jb25maWcuZnJlZWRlc2t0b3Aub3JnLz4uXSlbXWRubAorICAgICAgICBdKQorZWxzZQorCSQxW11fQ0ZMQUdTPSRwa2dfY3ZfW10kMVtdX0NGTEFHUworCSQxW11fTElCUz0kcGtnX2N2X1tdJDFbXV9MSUJTCisgICAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisJJDMKK2ZpW11kbmwKK10pIyBQS0dfQ0hFQ0tfTU9EVUxFUworCisKKyMgUEtHX0lOU1RBTExESVIoRElSRUNUT1JZKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFN1YnN0aXR1dGVzIHRoZSB2YXJpYWJsZSBwa2djb25maWdkaXIgYXMgdGhlIGxvY2F0aW9uIHdoZXJlIGEgbW9kdWxlCisjIHNob3VsZCBpbnN0YWxsIHBrZy1jb25maWcgLnBjIGZpbGVzLiBCeSBkZWZhdWx0IHRoZSBkaXJlY3RvcnkgaXMKKyMgJGxpYmRpci9wa2djb25maWcsIGJ1dCB0aGUgZGVmYXVsdCBjYW4gYmUgY2hhbmdlZCBieSBwYXNzaW5nCisjIERJUkVDVE9SWS4gVGhlIHVzZXIgY2FuIG92ZXJyaWRlIHRocm91Z2ggdGhlIC0td2l0aC1wa2djb25maWdkaXIKKyMgcGFyYW1ldGVyLgorQUNfREVGVU4oW1BLR19JTlNUQUxMRElSXSwKK1ttNF9wdXNoZGVmKFtwa2dfZGVmYXVsdF0sIFttNF9kZWZhdWx0KFskMV0sIFsnJHtsaWJkaXJ9L3BrZ2NvbmZpZyddKV0pCittNF9wdXNoZGVmKFtwa2dfZGVzY3JpcHRpb25dLAorICAgIFtwa2ctY29uZmlnIGluc3RhbGxhdGlvbiBkaXJlY3RvcnkgQDw6QF1wa2dfZGVmYXVsdFtAOj5AXSkKK0FDX0FSR19XSVRIKFtwa2djb25maWdkaXJdLAorICAgIFtBU19IRUxQX1NUUklORyhbLS13aXRoLXBrZ2NvbmZpZ2Rpcl0sIHBrZ19kZXNjcmlwdGlvbildLCwKKyAgICBbd2l0aF9wa2djb25maWdkaXI9XXBrZ19kZWZhdWx0KQorQUNfU1VCU1QoW3BrZ2NvbmZpZ2Rpcl0sIFskd2l0aF9wa2djb25maWdkaXJdKQorbTRfcG9wZGVmKFtwa2dfZGVmYXVsdF0pCittNF9wb3BkZWYoW3BrZ19kZXNjcmlwdGlvbl0pCitdKSBkbmwgUEtHX0lOU1RBTExESVIKKworCisjIFBLR19OT0FSQ0hfSU5TVEFMTERJUihESVJFQ1RPUlkpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU3Vic3RpdHV0ZXMgdGhlIHZhcmlhYmxlIG5vYXJjaF9wa2djb25maWdkaXIgYXMgdGhlIGxvY2F0aW9uIHdoZXJlIGEKKyMgbW9kdWxlIHNob3VsZCBpbnN0YWxsIGFyY2gtaW5kZXBlbmRlbnQgcGtnLWNvbmZpZyAucGMgZmlsZXMuIEJ5CisjIGRlZmF1bHQgdGhlIGRpcmVjdG9yeSBpcyAkZGF0YWRpci9wa2djb25maWcsIGJ1dCB0aGUgZGVmYXVsdCBjYW4gYmUKKyMgY2hhbmdlZCBieSBwYXNzaW5nIERJUkVDVE9SWS4gVGhlIHVzZXIgY2FuIG92ZXJyaWRlIHRocm91Z2ggdGhlCisjIC0td2l0aC1ub2FyY2gtcGtnY29uZmlnZGlyIHBhcmFtZXRlci4KK0FDX0RFRlVOKFtQS0dfTk9BUkNIX0lOU1RBTExESVJdLAorW200X3B1c2hkZWYoW3BrZ19kZWZhdWx0XSwgW200X2RlZmF1bHQoWyQxXSwgWycke2RhdGFkaXJ9L3BrZ2NvbmZpZyddKV0pCittNF9wdXNoZGVmKFtwa2dfZGVzY3JpcHRpb25dLAorICAgIFtwa2ctY29uZmlnIGFyY2gtaW5kZXBlbmRlbnQgaW5zdGFsbGF0aW9uIGRpcmVjdG9yeSBAPDpAXXBrZ19kZWZhdWx0W0A6PkBdKQorQUNfQVJHX1dJVEgoW25vYXJjaC1wa2djb25maWdkaXJdLAorICAgIFtBU19IRUxQX1NUUklORyhbLS13aXRoLW5vYXJjaC1wa2djb25maWdkaXJdLCBwa2dfZGVzY3JpcHRpb24pXSwsCisgICAgW3dpdGhfbm9hcmNoX3BrZ2NvbmZpZ2Rpcj1dcGtnX2RlZmF1bHQpCitBQ19TVUJTVChbbm9hcmNoX3BrZ2NvbmZpZ2Rpcl0sIFskd2l0aF9ub2FyY2hfcGtnY29uZmlnZGlyXSkKK200X3BvcGRlZihbcGtnX2RlZmF1bHRdKQorbTRfcG9wZGVmKFtwa2dfZGVzY3JpcHRpb25dKQorXSkgZG5sIFBLR19OT0FSQ0hfSU5TVEFMTERJUgorCisKKyMgUEtHX0NIRUNLX1ZBUihWQVJJQUJMRSwgTU9EVUxFLCBDT05GSUctVkFSSUFCTEUsCisjIFtBQ1RJT04tSUYtRk9VTkRdLCBbQUNUSU9OLUlGLU5PVC1GT1VORF0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUmV0cmlldmVzIHRoZSB2YWx1ZSBvZiB0aGUgcGtnLWNvbmZpZyB2YXJpYWJsZSBmb3IgdGhlIGdpdmVuIG1vZHVsZS4KK0FDX0RFRlVOKFtQS0dfQ0hFQ0tfVkFSXSwKK1tBQ19SRVFVSVJFKFtQS0dfUFJPR19QS0dfQ09ORklHXSlkbmwKK0FDX0FSR19WQVIoWyQxXSwgW3ZhbHVlIG9mICQzIGZvciAkMiwgb3ZlcnJpZGluZyBwa2ctY29uZmlnXSlkbmwKKworX1BLR19DT05GSUcoWyQxXSwgW3ZhcmlhYmxlPSJdWyQzXVsiXSwgWyQyXSkKK0FTX1ZBUl9DT1BZKFskMV0sIFtwa2dfY3ZfXVskMV0pCisKK0FTX1ZBUl9JRihbJDFdLCBbIiJdLCBbJDVdLCBbJDRdKWRubAorXSkjIFBLR19DSEVDS19WQVIKKwpkaWZmIC0tZ2l0IGEvY29uZmlnLmd1ZXNzIGIvY29uZmlnLmd1ZXNzCmluZGV4IGI3OTI1MmQuLjFmNWM1MGMgMTAwNzU1Ci0tLSBhL2NvbmZpZy5ndWVzcworKysgYi9jb25maWcuZ3Vlc3MKQEAgLTEsOCArMSw4IEBACiAjISAvYmluL3NoCiAjIEF0dGVtcHQgdG8gZ3Vlc3MgYSBjYW5vbmljYWwgc3lzdGVtIG5hbWUuCi0jICAgQ29weXJpZ2h0IDE5OTItMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgICBDb3B5cmlnaHQgMTk5Mi0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogCi10aW1lc3RhbXA9JzIwMTMtMDYtMTAnCit0aW1lc3RhbXA9JzIwMTQtMDMtMjMnCiAKICMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTUwLDcgKzUwLDcgQEAKIEdOVSBjb25maWcuZ3Vlc3MgKCR0aW1lc3RhbXApCiAKIE9yaWdpbmFsbHkgd3JpdHRlbiBieSBQZXIgQm90aG5lci4KLUNvcHlyaWdodCAxOTkyLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitDb3B5cmlnaHQgMTk5Mi0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogCiBUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHNlZSB0aGUgc291cmNlIGZvciBjb3B5aW5nIGNvbmRpdGlvbnMuICBUaGVyZSBpcyBOTwogd2FycmFudHk7IG5vdCBldmVuIGZvciBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIgpAQCAtMTQ5LDcgKzE0OSw3IEBACiAJTElCQz1nbnUKIAkjZW5kaWYKIAlFT0YKLQlldmFsIGAkQ0NfRk9SX0JVSUxEIC1FICRkdW1teS5jIDI+L2Rldi9udWxsIHwgZ3JlcCAnXkxJQkMnYAorCWV2YWwgYCRDQ19GT1JfQlVJTEQgLUUgJGR1bW15LmMgMj4vZGV2L251bGwgfCBncmVwICdeTElCQycgfCBzZWQgJ3MsICwsZydgCiAJOzsKIGVzYWMKIApAQCAtODI2LDcgKzgyNiw3IEBACiAgICAgKjpNSU5HVyo6KikKIAllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtbWluZ3czMgogCWV4aXQgOzsKLSAgICBpKjpNU1lTKjoqKQorICAgICo6TVNZUyo6KikKIAllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtbXN5cwogCWV4aXQgOzsKICAgICBpKjp3aW5kb3dzMzIqOiopCkBAIC05NjksMTAgKzk2OSwxMCBAQAogCWV2YWwgYCRDQ19GT1JfQlVJTEQgLUUgJGR1bW15LmMgMj4vZGV2L251bGwgfCBncmVwICdeQ1BVJ2AKIAl0ZXN0IHgiJHtDUFV9IiAhPSB4ICYmIHsgZWNobyAiJHtDUFV9LXVua25vd24tbGludXgtJHtMSUJDfSI7IGV4aXQ7IH0KIAk7OwotICAgIG9yMWs6TGludXg6KjoqKQotCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKyAgICBvcGVucmlzYyo6TGludXg6KjoqKQorCWVjaG8gb3Ixay11bmtub3duLWxpbnV4LSR7TElCQ30KIAlleGl0IDs7Ci0gICAgb3IzMjpMaW51eDoqOiopCisgICAgb3IzMjpMaW51eDoqOiogfCBvcjFrKjpMaW51eDoqOiopCiAJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQogCWV4aXQgOzsKICAgICBwYWRyZTpMaW51eDoqOiopCkBAIC0xMjYwLDE2ICsxMjYwLDI2IEBACiAJaWYgdGVzdCAiJFVOQU1FX1BST0NFU1NPUiIgPSB1bmtub3duIDsgdGhlbgogCSAgICBVTkFNRV9QUk9DRVNTT1I9cG93ZXJwYwogCWZpCi0JaWYgWyAiJENDX0ZPUl9CVUlMRCIgIT0gJ25vX2NvbXBpbGVyX2ZvdW5kJyBdOyB0aGVuCi0JICAgIGlmIChlY2hvICcjaWZkZWYgX19MUDY0X18nOyBlY2hvIElTXzY0QklUX0FSQ0g7IGVjaG8gJyNlbmRpZicpIHwgXAotCQkoQ0NPUFRTPSAkQ0NfRk9SX0JVSUxEIC1FIC0gMj4vZGV2L251bGwpIHwgXAotCQlncmVwIElTXzY0QklUX0FSQ0ggPi9kZXYvbnVsbAotCSAgICB0aGVuCi0JCWNhc2UgJFVOQU1FX1BST0NFU1NPUiBpbgotCQkgICAgaTM4NikgVU5BTUVfUFJPQ0VTU09SPXg4Nl82NCA7OwotCQkgICAgcG93ZXJwYykgVU5BTUVfUFJPQ0VTU09SPXBvd2VycGM2NCA7OwotCQllc2FjCisJaWYgdGVzdCBgZWNobyAiJFVOQU1FX1JFTEVBU0UiIHwgc2VkIC1lICdzL1wuLiovLydgIC1sZSAxMCA7IHRoZW4KKwkgICAgaWYgWyAiJENDX0ZPUl9CVUlMRCIgIT0gJ25vX2NvbXBpbGVyX2ZvdW5kJyBdOyB0aGVuCisJCWlmIChlY2hvICcjaWZkZWYgX19MUDY0X18nOyBlY2hvIElTXzY0QklUX0FSQ0g7IGVjaG8gJyNlbmRpZicpIHwgXAorCQkgICAgKENDT1BUUz0gJENDX0ZPUl9CVUlMRCAtRSAtIDI+L2Rldi9udWxsKSB8IFwKKwkJICAgIGdyZXAgSVNfNjRCSVRfQVJDSCA+L2Rldi9udWxsCisJCXRoZW4KKwkJICAgIGNhc2UgJFVOQU1FX1BST0NFU1NPUiBpbgorCQkJaTM4NikgVU5BTUVfUFJPQ0VTU09SPXg4Nl82NCA7OworCQkJcG93ZXJwYykgVU5BTUVfUFJPQ0VTU09SPXBvd2VycGM2NCA7OworCQkgICAgZXNhYworCQlmaQogCSAgICBmaQorCWVsaWYgdGVzdCAiJFVOQU1FX1BST0NFU1NPUiIgPSBpMzg2IDsgdGhlbgorCSAgICAjIEF2b2lkIGV4ZWN1dGluZyBjYyBvbiBPUyBYIDEwLjksIGFzIGl0IHNoaXBzIHdpdGggYSBzdHViCisJICAgICMgdGhhdCBwdXRzIHVwIGEgZ3JhcGhpY2FsIGFsZXJ0IHByb21wdGluZyB0byBpbnN0YWxsCisJICAgICMgZGV2ZWxvcGVyIHRvb2xzLiAgQW55IHN5c3RlbSBydW5uaW5nIE1hYyBPUyBYIDEwLjcgb3IKKwkgICAgIyBsYXRlciAoRGFyd2luIDExIGFuZCBsYXRlcikgaXMgcmVxdWlyZWQgdG8gaGF2ZSBhIDY0LWJpdAorCSAgICAjIHByb2Nlc3Nvci4gVGhpcyBpcyBub3QgdHJ1ZSBvZiB0aGUgQVJNIHZlcnNpb24gb2YgRGFyd2luCisJICAgICMgdGhhdCBBcHBsZSB1c2VzIGluIHBvcnRhYmxlIGRldmljZXMuCisJICAgIFVOQU1FX1BST0NFU1NPUj14ODZfNjQKIAlmaQogCWVjaG8gJHtVTkFNRV9QUk9DRVNTT1J9LWFwcGxlLWRhcndpbiR7VU5BTUVfUkVMRUFTRX0KIAlleGl0IDs7CkBAIC0xMzYxLDE1NCArMTM3MSw2IEBACiAJZXhpdCA7OwogZXNhYwogCi1ldmFsICRzZXRfY2NfZm9yX2J1aWxkCi1jYXQgPiRkdW1teS5jIDw8RU9GCi0jaWZkZWYgX1NFUVVFTlRfCi0jIGluY2x1ZGUgPHN5cy90eXBlcy5oPgotIyBpbmNsdWRlIDxzeXMvdXRzbmFtZS5oPgotI2VuZGlmCi1tYWluICgpCi17Ci0jaWYgZGVmaW5lZCAoc29ueSkKLSNpZiBkZWZpbmVkIChNSVBTRUIpCi0gIC8qIEJGRCB3YW50cyAiYnNkIiBpbnN0ZWFkIG9mICJuZXdzb3MiLiAgUGVyaGFwcyBCRkQgc2hvdWxkIGJlIGNoYW5nZWQsCi0gICAgIEkgZG9uJ3Qga25vdy4uLi4gICovCi0gIHByaW50ZiAoIm1pcHMtc29ueS1ic2RcbiIpOyBleGl0ICgwKTsKLSNlbHNlCi0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0gIHByaW50ZiAoIm02OGstc29ueS1uZXdzb3Mlc1xuIiwKLSNpZmRlZiBORVdTT1M0Ci0JIjQiCi0jZWxzZQotCSIiCi0jZW5kaWYKLQkpOyBleGl0ICgwKTsKLSNlbmRpZgotI2VuZGlmCi0KLSNpZiBkZWZpbmVkIChfX2FybSkgJiYgZGVmaW5lZCAoX19hY29ybikgJiYgZGVmaW5lZCAoX191bml4KQotICBwcmludGYgKCJhcm0tYWNvcm4tcmlzY2l4XG4iKTsgZXhpdCAoMCk7Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQgKGhwMzAwKSAmJiAhZGVmaW5lZCAoaHB1eCkKLSAgcHJpbnRmICgibTY4ay1ocC1ic2RcbiIpOyBleGl0ICgwKTsKLSNlbmRpZgotCi0jaWYgZGVmaW5lZCAoTmVYVCkKLSNpZiAhZGVmaW5lZCAoX19BUkNISVRFQ1RVUkVfXykKLSNkZWZpbmUgX19BUkNISVRFQ1RVUkVfXyAibTY4ayIKLSNlbmRpZgotICBpbnQgdmVyc2lvbjsKLSAgdmVyc2lvbj1gKGhvc3RpbmZvIHwgc2VkIC1uICdzLy4qTmVYVCBNYWNoIFwoWzAtOV0qXCkuKi9cMS9wJykgMj4vZGV2L251bGxgOwotICBpZiAodmVyc2lvbiA8IDQpCi0gICAgcHJpbnRmICgiJXMtbmV4dC1uZXh0c3RlcCVkXG4iLCBfX0FSQ0hJVEVDVFVSRV9fLCB2ZXJzaW9uKTsKLSAgZWxzZQotICAgIHByaW50ZiAoIiVzLW5leHQtb3BlbnN0ZXAlZFxuIiwgX19BUkNISVRFQ1RVUkVfXywgdmVyc2lvbik7Ci0gIGV4aXQgKDApOwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkIChNVUxUSU1BWCkgfHwgZGVmaW5lZCAobjE2KQotI2lmIGRlZmluZWQgKFVNQVhWKQotICBwcmludGYgKCJuczMyay1lbmNvcmUtc3lzdlxuIik7IGV4aXQgKDApOwotI2Vsc2UKLSNpZiBkZWZpbmVkIChDTVUpCi0gIHByaW50ZiAoIm5zMzJrLWVuY29yZS1tYWNoXG4iKTsgZXhpdCAoMCk7Ci0jZWxzZQotICBwcmludGYgKCJuczMyay1lbmNvcmUtYnNkXG4iKTsgZXhpdCAoMCk7Ci0jZW5kaWYKLSNlbmRpZgotI2VuZGlmCi0KLSNpZiBkZWZpbmVkIChfXzM4NkJTRF9fKQotICBwcmludGYgKCJpMzg2LXBjLWJzZFxuIik7IGV4aXQgKDApOwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkIChzZXF1ZW50KQotI2lmIGRlZmluZWQgKGkzODYpCi0gIHByaW50ZiAoImkzODYtc2VxdWVudC1keW5peFxuIik7IGV4aXQgKDApOwotI2VuZGlmCi0jaWYgZGVmaW5lZCAobnMzMjAwMCkKLSAgcHJpbnRmICgibnMzMmstc2VxdWVudC1keW5peFxuIik7IGV4aXQgKDApOwotI2VuZGlmCi0jZW5kaWYKLQotI2lmIGRlZmluZWQgKF9TRVFVRU5UXykKLSAgICBzdHJ1Y3QgdXRzbmFtZSB1bjsKLQotICAgIHVuYW1lKCZ1bik7Ci0KLSAgICBpZiAoc3RybmNtcCh1bi52ZXJzaW9uLCAiVjIiLCAyKSA9PSAwKSB7Ci0JcHJpbnRmICgiaTM4Ni1zZXF1ZW50LXB0eDJcbiIpOyBleGl0ICgwKTsKLSAgICB9Ci0gICAgaWYgKHN0cm5jbXAodW4udmVyc2lvbiwgIlYxIiwgMikgPT0gMCkgeyAvKiBYWFggaXMgVjEgY29ycmVjdD8gKi8KLQlwcmludGYgKCJpMzg2LXNlcXVlbnQtcHR4MVxuIik7IGV4aXQgKDApOwotICAgIH0KLSAgICBwcmludGYgKCJpMzg2LXNlcXVlbnQtcHR4XG4iKTsgZXhpdCAoMCk7Ci0KLSNlbmRpZgotCi0jaWYgZGVmaW5lZCAodmF4KQotIyBpZiAhZGVmaW5lZCAodWx0cml4KQotIyAgaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jICBpZiBkZWZpbmVkIChCU0QpCi0jICAgaWYgQlNEID09IDQzCi0gICAgICBwcmludGYgKCJ2YXgtZGVjLWJzZDQuM1xuIik7IGV4aXQgKDApOwotIyAgIGVsc2UKLSMgICAgaWYgQlNEID09IDE5OTAwNgotICAgICAgcHJpbnRmICgidmF4LWRlYy1ic2Q0LjNyZW5vXG4iKTsgZXhpdCAoMCk7Ci0jICAgIGVsc2UKLSAgICAgIHByaW50ZiAoInZheC1kZWMtYnNkXG4iKTsgZXhpdCAoMCk7Ci0jICAgIGVuZGlmCi0jICAgZW5kaWYKLSMgIGVsc2UKLSAgICBwcmludGYgKCJ2YXgtZGVjLWJzZFxuIik7IGV4aXQgKDApOwotIyAgZW5kaWYKLSMgZWxzZQotICAgIHByaW50ZiAoInZheC1kZWMtdWx0cml4XG4iKTsgZXhpdCAoMCk7Ci0jIGVuZGlmCi0jZW5kaWYKLQotI2lmIGRlZmluZWQgKGFsbGlhbnQpICYmIGRlZmluZWQgKGk4NjApCi0gIHByaW50ZiAoImk4NjAtYWxsaWFudC1ic2RcbiIpOyBleGl0ICgwKTsKLSNlbmRpZgotCi0gIGV4aXQgKDEpOwotfQotRU9GCi0KLSRDQ19GT1JfQlVJTEQgLW8gJGR1bW15ICRkdW1teS5jIDI+L2Rldi9udWxsICYmIFNZU1RFTV9OQU1FPWAkZHVtbXlgICYmCi0JeyBlY2hvICIkU1lTVEVNX05BTUUiOyBleGl0OyB9Ci0KLSMgQXBvbGxvcyBwdXQgdGhlIHN5c3RlbSB0eXBlIGluIHRoZSBlbnZpcm9ubWVudC4KLQotdGVzdCAtZCAvdXNyL2Fwb2xsbyAmJiB7IGVjaG8gJHtJU1B9LWFwb2xsby0ke1NZU1RZUEV9OyBleGl0OyB9Ci0KLSMgQ29udmV4IHZlcnNpb25zIHRoYXQgcHJlZGF0ZSB1bmFtZSBjYW4gdXNlIGdldHN5c2luZm8oMSkKLQotaWYgWyAteCAvdXNyL2NvbnZleC9nZXRzeXNpbmZvIF0KLXRoZW4KLSAgICBjYXNlIGBnZXRzeXNpbmZvIC1mIGNwdV90eXBlYCBpbgotICAgIGMxKikKLQllY2hvIGMxLWNvbnZleC1ic2QKLQlleGl0IDs7Ci0gICAgYzIqKQotCWlmIGdldHN5c2luZm8gLWYgc2NhbGFyX2FjYwotCXRoZW4gZWNobyBjMzItY29udmV4LWJzZAotCWVsc2UgZWNobyBjMi1jb252ZXgtYnNkCi0JZmkKLQlleGl0IDs7Ci0gICAgYzM0KikKLQllY2hvIGMzNC1jb252ZXgtYnNkCi0JZXhpdCA7OwotICAgIGMzOCopCi0JZWNobyBjMzgtY29udmV4LWJzZAotCWV4aXQgOzsKLSAgICBjNCopCi0JZWNobyBjNC1jb252ZXgtYnNkCi0JZXhpdCA7OwotICAgIGVzYWMKLWZpCi0KIGNhdCA+JjIgPDxFT0YKICQwOiB1bmFibGUgdG8gZ3Vlc3Mgc3lzdGVtIHR5cGUKIApkaWZmIC0tZ2l0IGEvY29uZmlnLnN1YiBiL2NvbmZpZy5zdWIKaW5kZXggOTYzM2RiNy4uZDY1NGQwMyAxMDA3NTUKLS0tIGEvY29uZmlnLnN1YgorKysgYi9jb25maWcuc3ViCkBAIC0xLDggKzEsOCBAQAogIyEgL2Jpbi9zaAogIyBDb25maWd1cmF0aW9uIHZhbGlkYXRpb24gc3Vicm91dGluZSBzY3JpcHQuCi0jICAgQ29weXJpZ2h0IDE5OTItMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgICBDb3B5cmlnaHQgMTk5Mi0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogCi10aW1lc3RhbXA9JzIwMTMtMDgtMTAnCit0aW1lc3RhbXA9JzIwMTQtMDUtMDEnCiAKICMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTY4LDcgKzY4LDcgQEAKIHZlcnNpb249IlwKIEdOVSBjb25maWcuc3ViICgkdGltZXN0YW1wKQogCi1Db3B5cmlnaHQgMTk5Mi0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorQ29weXJpZ2h0IDE5OTItMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIAogVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyBzZWUgdGhlIHNvdXJjZSBmb3IgY29weWluZyBjb25kaXRpb25zLiAgVGhlcmUgaXMgTk8KIHdhcnJhbnR5OyBub3QgZXZlbiBmb3IgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiIKQEAgLTI2NSw2ICsyNjUsNyBAQAogCXwgaGV4YWdvbiBcCiAJfCBpMzcwIHwgaTg2MCB8IGk5NjAgfCBpYTY0IFwKIAl8IGlwMmsgfCBpcTIwMDAgXAorCXwgazFvbSBcCiAJfCBsZTMyIHwgbGU2NCBcCiAJfCBsbTMyIFwKIAl8IG0zMmMgfCBtMzJyIHwgbTMycmxlIHwgbTY4MDAwIHwgbTY4ayB8IG04OGsgXApAQCAtMjgyLDggKzI4MywxMCBAQAogCXwgbWlwczY0dnI1OTAwIHwgbWlwczY0dnI1OTAwZWwgXAogCXwgbWlwc2lzYTMyIHwgbWlwc2lzYTMyZWwgXAogCXwgbWlwc2lzYTMycjIgfCBtaXBzaXNhMzJyMmVsIFwKKwl8IG1pcHNpc2EzMnI2IHwgbWlwc2lzYTMycjZlbCBcCiAJfCBtaXBzaXNhNjQgfCBtaXBzaXNhNjRlbCBcCiAJfCBtaXBzaXNhNjRyMiB8IG1pcHNpc2E2NHIyZWwgXAorCXwgbWlwc2lzYTY0cjYgfCBtaXBzaXNhNjRyNmVsIFwKIAl8IG1pcHNpc2E2NHNiMSB8IG1pcHNpc2E2NHNiMWVsIFwKIAl8IG1pcHNpc2E2NHNyNzFrIHwgbWlwc2lzYTY0c3I3MWtlbCBcCiAJfCBtaXBzcjU5MDAgfCBtaXBzcjU5MDBlbCBcCkBAIC0yOTUsOCArMjk4LDcgQEAKIAl8IG5kczMyIHwgbmRzMzJsZSB8IG5kczMyYmUgXAogCXwgbmlvcyB8IG5pb3MyIHwgbmlvczJlYiB8IG5pb3MyZWwgXAogCXwgbnMxNmsgfCBuczMyayBcCi0JfCBvcGVuOCBcCi0JfCBvcjFrIHwgb3IzMiBcCisJfCBvcGVuOCB8IG9yMWsgfCBvcjFrbmQgfCBvcjMyIFwKIAl8IHBkcDEwIHwgcGRwMTEgfCBwaiB8IHBqbCBcCiAJfCBwb3dlcnBjIHwgcG93ZXJwYzY0IHwgcG93ZXJwYzY0bGUgfCBwb3dlcnBjbGUgXAogCXwgcHlyYW1pZCBcCkBAIC0zMjQsNyArMzI2LDcgQEAKIAljNngpCiAJCWJhc2ljX21hY2hpbmU9dGljNngtdW5rbm93bgogCQk7OwotCW02ODExIHwgbTY4aGMxMSB8IG02ODEyIHwgbTY4aGMxMiB8IG02OGhjczEyeCB8IHBpY29jaGlwKQorCW02ODExIHwgbTY4aGMxMSB8IG02ODEyIHwgbTY4aGMxMiB8IG02OGhjczEyeCB8IG52cHR4IHwgcGljb2NoaXApCiAJCWJhc2ljX21hY2hpbmU9JGJhc2ljX21hY2hpbmUtdW5rbm93bgogCQlvcz0tbm9uZQogCQk7OwpAQCAtMzgxLDYgKzM4Myw3IEBACiAJfCBoZXhhZ29uLSogXAogCXwgaSo4Ni0qIHwgaTg2MC0qIHwgaTk2MC0qIHwgaWE2NC0qIFwKIAl8IGlwMmstKiB8IGlxMjAwMC0qIFwKKwl8IGsxb20tKiBcCiAJfCBsZTMyLSogfCBsZTY0LSogXAogCXwgbG0zMi0qIFwKIAl8IG0zMmMtKiB8IG0zMnItKiB8IG0zMnJsZS0qIFwKQEAgLTQwMCw4ICs0MDMsMTAgQEAKIAl8IG1pcHM2NHZyNTkwMC0qIHwgbWlwczY0dnI1OTAwZWwtKiBcCiAJfCBtaXBzaXNhMzItKiB8IG1pcHNpc2EzMmVsLSogXAogCXwgbWlwc2lzYTMycjItKiB8IG1pcHNpc2EzMnIyZWwtKiBcCisJfCBtaXBzaXNhMzJyNi0qIHwgbWlwc2lzYTMycjZlbC0qIFwKIAl8IG1pcHNpc2E2NC0qIHwgbWlwc2lzYTY0ZWwtKiBcCiAJfCBtaXBzaXNhNjRyMi0qIHwgbWlwc2lzYTY0cjJlbC0qIFwKKwl8IG1pcHNpc2E2NHI2LSogfCBtaXBzaXNhNjRyNmVsLSogXAogCXwgbWlwc2lzYTY0c2IxLSogfCBtaXBzaXNhNjRzYjFlbC0qIFwKIAl8IG1pcHNpc2E2NHNyNzFrLSogfCBtaXBzaXNhNjRzcjcxa2VsLSogXAogCXwgbWlwc3I1OTAwLSogfCBtaXBzcjU5MDBlbC0qIFwKQEAgLTQxMyw2ICs0MTgsNyBAQAogCXwgbmlvcy0qIHwgbmlvczItKiB8IG5pb3MyZWItKiB8IG5pb3MyZWwtKiBcCiAJfCBub25lLSogfCBucDEtKiB8IG5zMTZrLSogfCBuczMyay0qIFwKIAl8IG9wZW44LSogXAorCXwgb3IxayotKiBcCiAJfCBvcmlvbi0qIFwKIAl8IHBkcDEwLSogfCBwZHAxMS0qIHwgcGotKiB8IHBqbC0qIHwgcG4tKiB8IHBvd2VyLSogXAogCXwgcG93ZXJwYy0qIHwgcG93ZXJwYzY0LSogfCBwb3dlcnBjNjRsZS0qIHwgcG93ZXJwY2xlLSogXApAQCAtMTM3NCw3ICsxMzgwLDcgQEAKIAkgICAgICB8IC1vczIqIHwgLXZvcyogfCAtcGFsbW9zKiB8IC11Y2xpbnV4KiB8IC1udWNsZXVzKiBcCiAJICAgICAgfCAtbW9ycGhvcyogfCAtc3VwZXJ1eCogfCAtcnRtayogfCAtcnRtay1ub3ZhKiB8IC13aW5kaXNzKiBcCiAJICAgICAgfCAtcG93ZXJtYXgqIHwgLWRuaXgqIHwgLW54NiB8IC1ueDcgfCAtc2VpKiB8IC1kcmFnb25mbHkqIFwKLQkgICAgICB8IC1za3lvcyogfCAtaGFpa3UqIHwgLXJkb3MqIHwgLXRvcHBlcnMqIHwgLWRyb3BzKiB8IC1lcyopCisJICAgICAgfCAtc2t5b3MqIHwgLWhhaWt1KiB8IC1yZG9zKiB8IC10b3BwZXJzKiB8IC1kcm9wcyogfCAtZXMqIHwgLXRpcnRvcyopCiAJIyBSZW1lbWJlciwgZWFjaCBhbHRlcm5hdGl2ZSBNVVNUIEVORCBJTiAqLCB0byBtYXRjaCBhIHZlcnNpb24gbnVtYmVyLgogCQk7OwogCS1xbngqKQpAQCAtMTU5Miw5ICsxNTk4LDYgQEAKIAltaXBzKi0qKQogCQlvcz0tZWxmCiAJCTs7Ci0Jb3Ixay0qKQotCQlvcz0tZWxmCi0JCTs7CiAJb3IzMi0qKQogCQlvcz0tY29mZgogCQk7OwpkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCmluZGV4IGMyNzhjOGUuLjdiOTFmOTEgMTAwNzU1Ci0tLSBhL2NvbmZpZ3VyZQorKysgYi9jb25maWd1cmUKQEAgLTEsNiArMSw2IEBACiAjISAvYmluL3NoCiAjIEd1ZXNzIHZhbHVlcyBmb3Igc3lzdGVtLWRlcGVuZGVudCB2YXJpYWJsZXMgYW5kIGNyZWF0ZSBNYWtlZmlsZXMuCi0jIEdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42OSBmb3IgcHl0aG9uIDMuMy4KKyMgR2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjY5IGZvciBweXRob24gMy40LgogIwogIyBSZXBvcnQgYnVncyB0byA8aHR0cDovL2J1Z3MucHl0aG9uLm9yZy8+LgogIwpAQCAtNTgwLDggKzU4MCw4IEBACiAjIElkZW50aXR5IG9mIHRoaXMgcGFja2FnZS4KIFBBQ0tBR0VfTkFNRT0ncHl0aG9uJwogUEFDS0FHRV9UQVJOQU1FPSdweXRob24nCi1QQUNLQUdFX1ZFUlNJT049JzMuMycKLVBBQ0tBR0VfU1RSSU5HPSdweXRob24gMy4zJworUEFDS0FHRV9WRVJTSU9OPSczLjQnCitQQUNLQUdFX1NUUklORz0ncHl0aG9uIDMuNCcKIFBBQ0tBR0VfQlVHUkVQT1JUPSdodHRwOi8vYnVncy5weXRob24ub3JnLycKIFBBQ0tBR0VfVVJMPScnCiAKQEAgLTYyMyw4ICs2MjMsMTEgQEAKICNlbmRpZiIKIAogYWNfc3Vic3RfdmFycz0nTFRMSUJPQkpTCitFTlNVUkVQSVAKIFNSQ0RJUlMKIFRIUkVBREhFQURFUlMKK0xJQlBMCitQWV9FTkFCTEVfU0hBUkVECiBFWFRfU1VGRklYCiBTT0FCSQogTElCQwpAQCAtNjQ3LDYgKzY1MCw4IEBACiBUQ0xUS19MSUJTCiBUQ0xUS19JTkNMVURFUwogTElCRkZJX0lOQ0xVREVESVIKK1BLR19DT05GSUdfTElCRElSCitQS0dfQ09ORklHX1BBVEgKIFBLR19DT05GSUcKIFNITElCUwogQ0ZMQUdTRk9SU0hBUkVECkBAIC02NTksNiArNjY0LDcgQEAKIExJQlRPT0xfQ1JVRlQKIE9USEVSX0xJQlRPT0xfT1BUCiBVTklWRVJTQUxfQVJDSF9GTEFHUworQ0ZMQUdTX05PRElTVAogQkFTRUNGTEFHUwogT1BUCiBBQklGTEFHUwpAQCAtNzA1LDExICs3MTEsMTMgQEAKIENDCiBFWFBPUlRfTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUCiBDT05GSUdVUkVfTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUCitQTEFURElSCiBTR0lfQUJJCiBfUFlUSE9OX0hPU1RfUExBVEZPUk0KIE1BQ0hERVAKIEZSQU1FV09SS0lOU1RBTExBUFBTUFJFRklYCiBGUkFNRVdPUktVTklYVE9PTFNQUkVGSVgKK0ZSQU1FV09SS1BZVEhPTlcKIEZSQU1FV09SS0FMVElOU1RBTExMQVNUCiBGUkFNRVdPUktBTFRJTlNUQUxMRklSU1QKIEZSQU1FV09SS0lOU1RBTExMQVNUCkBAIC03OTAsNiArNzk4LDcgQEAKIGVuYWJsZV9zaGFyZWQKIGVuYWJsZV9wcm9maWxpbmcKIHdpdGhfcHlkZWJ1Zword2l0aF9oYXNoX2FsZ29yaXRobQogd2l0aF9saWJzCiB3aXRoX3N5c3RlbV9leHBhdAogd2l0aF9zeXN0ZW1fZmZpCkBAIC04MTEsNiArODIwLDcgQEAKIHdpdGhfbGliYwogZW5hYmxlX2JpZ19kaWdpdHMKIHdpdGhfY29tcHV0ZWRfZ290b3MKK3dpdGhfZW5zdXJlcGlwCiAnCiAgICAgICBhY19wcmVjaW91c192YXJzPSdidWlsZF9hbGlhcwogaG9zdF9hbGlhcwpAQCAtODIxLDcgKzgzMSwxMCBAQAogTERGTEFHUwogTElCUwogQ1BQRkxBR1MKLUNQUCcKK0NQUAorUEtHX0NPTkZJRworUEtHX0NPTkZJR19QQVRICitQS0dfQ09ORklHX0xJQkRJUicKIAogCiAjIEluaXRpYWxpemUgc29tZSB2YXJpYWJsZXMgc2V0IGJ5IG9wdGlvbnMuCkBAIC0xMzYyLDcgKzEzNzUsNyBAQAogICAjIE9taXQgc29tZSBpbnRlcm5hbCBvciBvYnNvbGV0ZSBvcHRpb25zIHRvIG1ha2UgdGhlIGxpc3QgbGVzcyBpbXBvc2luZy4KICAgIyBUaGlzIG1lc3NhZ2UgaXMgdG9vIGxvbmcgdG8gYmUgYSBzdHJpbmcgaW4gdGhlIEEvVVggMy4xIHNoLgogICBjYXQgPDxfQUNFT0YKLVxgY29uZmlndXJlJyBjb25maWd1cmVzIHB5dGhvbiAzLjMgdG8gYWRhcHQgdG8gbWFueSBraW5kcyBvZiBzeXN0ZW1zLgorXGBjb25maWd1cmUnIGNvbmZpZ3VyZXMgcHl0aG9uIDMuNCB0byBhZGFwdCB0byBtYW55IGtpbmRzIG9mIHN5c3RlbXMuCiAKIFVzYWdlOiAkMCBbT1BUSU9OXS4uLiBbVkFSPVZBTFVFXS4uLgogCkBAIC0xNDI3LDcgKzE0NDAsNyBAQAogCiBpZiB0ZXN0IC1uICIkYWNfaW5pdF9oZWxwIjsgdGhlbgogICBjYXNlICRhY19pbml0X2hlbHAgaW4KLSAgICAgc2hvcnQgfCByZWN1cnNpdmUgKSBlY2hvICJDb25maWd1cmF0aW9uIG9mIHB5dGhvbiAzLjM6Ijs7CisgICAgIHNob3J0IHwgcmVjdXJzaXZlICkgZWNobyAiQ29uZmlndXJhdGlvbiBvZiBweXRob24gMy40OiI7OwogICAgZXNhYwogICBjYXQgPDxcX0FDRU9GCiAKQEAgLTE0NTMsNyArMTQ2Niw3IEBACiAgIC0td2l0aG91dC1QQUNLQUdFICAgICAgIGRvIG5vdCB1c2UgUEFDS0FHRSAoc2FtZSBhcyAtLXdpdGgtUEFDS0FHRT1ubykKICAgLS13aXRoLXVuaXZlcnNhbC1hcmNocz1BUkNICiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdCBhcmNoaXRlY3R1cmVzIGZvciB1bml2ZXJzYWwgYnVpbGQgKCIzMi1iaXQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAiNjQtYml0IiwgIjMtd2F5IiwgImludGVsIiBvciAiYWxsIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIjY0LWJpdCIsICIzLXdheSIsICJpbnRlbCIsICJpbnRlbC0zMiIsIG9yICJhbGwiKQogICAtLXdpdGgtZnJhbWV3b3JrLW5hbWU9RlJBTUVXT1JLCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZnkgYW4gYWx0ZXJuYXRlIG5hbWUgb2YgdGhlIGZyYW1ld29yayBidWlsdAogICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIC0tZW5hYmxlLWZyYW1ld29yawpAQCAtMTQ2Myw2ICsxNDc2LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZXIKICAgLS13aXRoLXN1ZmZpeD0uZXhlICAgICAgc2V0IGV4ZWN1dGFibGUgc3VmZml4CiAgIC0td2l0aC1weWRlYnVnICAgICAgICAgIGJ1aWxkIHdpdGggUHlfREVCVUcgZGVmaW5lZAorICAtLXdpdGgtaGFzaC1hbGdvcml0aG09W2ZudnxzaXBoYXNoMjRdCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdCBoYXNoIGFsZ29yaXRobQogICAtLXdpdGgtbGlicz0nbGliMSAuLi4nICBsaW5rIGFnYWluc3QgYWRkaXRpb25hbCBsaWJzCiAgIC0td2l0aC1zeXN0ZW0tZXhwYXQgICAgIGJ1aWxkIHB5ZXhwYXQgbW9kdWxlIHVzaW5nIGFuIGluc3RhbGxlZCBleHBhdAogICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJ5CkBAIC0xNDkyLDYgKzE1MDcsOCBAQAogICAtLXdpdGgob3V0KS1jb21wdXRlZC1nb3RvcwogICAgICAgICAgICAgICAgICAgICAgICAgICBVc2UgY29tcHV0ZWQgZ290b3MgaW4gZXZhbHVhdGlvbiBsb29wIChlbmFibGVkIGJ5CiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgb24gc3VwcG9ydGVkIGNvbXBpbGVycykKKyAgLS13aXRoKG91dCktZW5zdXJlcGlwPVs9dXBncmFkZV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgImluc3RhbGwiIG9yICJ1cGdyYWRlIiB1c2luZyBidW5kbGVkIHBpcAogCiBTb21lIGluZmx1ZW50aWFsIGVudmlyb25tZW50IHZhcmlhYmxlczoKICAgTUFDSERFUCAgICAgbmFtZSBmb3IgbWFjaGluZS1kZXBlbmRlbnQgbGlicmFyeSBmaWxlcwpAQCAtMTUwMyw2ICsxNTIwLDExIEBACiAgIENQUEZMQUdTICAgIChPYmplY3RpdmUpIEMvQysrIHByZXByb2Nlc3NvciBmbGFncywgZS5nLiAtSTxpbmNsdWRlIGRpcj4gaWYKICAgICAgICAgICAgICAgeW91IGhhdmUgaGVhZGVycyBpbiBhIG5vbnN0YW5kYXJkIGRpcmVjdG9yeSA8aW5jbHVkZSBkaXI+CiAgIENQUCAgICAgICAgIEMgcHJlcHJvY2Vzc29yCisgIFBLR19DT05GSUcgIHBhdGggdG8gcGtnLWNvbmZpZyB1dGlsaXR5CisgIFBLR19DT05GSUdfUEFUSAorICAgICAgICAgICAgICBkaXJlY3RvcmllcyB0byBhZGQgdG8gcGtnLWNvbmZpZydzIHNlYXJjaCBwYXRoCisgIFBLR19DT05GSUdfTElCRElSCisgICAgICAgICAgICAgIHBhdGggb3ZlcnJpZGluZyBwa2ctY29uZmlnJ3MgYnVpbHQtaW4gc2VhcmNoIHBhdGgKIAogVXNlIHRoZXNlIHZhcmlhYmxlcyB0byBvdmVycmlkZSB0aGUgY2hvaWNlcyBtYWRlIGJ5IGBjb25maWd1cmUnIG9yIHRvIGhlbHAKIGl0IHRvIGZpbmQgbGlicmFyaWVzIGFuZCBwcm9ncmFtcyB3aXRoIG5vbnN0YW5kYXJkIG5hbWVzL2xvY2F0aW9ucy4KQEAgLTE1NzAsNyArMTU5Miw3IEBACiB0ZXN0IC1uICIkYWNfaW5pdF9oZWxwIiAmJiBleGl0ICRhY19zdGF0dXMKIGlmICRhY19pbml0X3ZlcnNpb247IHRoZW4KICAgY2F0IDw8XF9BQ0VPRgotcHl0aG9uIGNvbmZpZ3VyZSAzLjMKK3B5dGhvbiBjb25maWd1cmUgMy40CiBnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjkKIAogQ29weXJpZ2h0IChDKSAyMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgpAQCAtMjQwOSw3ICsyNDMxLDcgQEAKIFRoaXMgZmlsZSBjb250YWlucyBhbnkgbWVzc2FnZXMgcHJvZHVjZWQgYnkgY29tcGlsZXJzIHdoaWxlCiBydW5uaW5nIGNvbmZpZ3VyZSwgdG8gYWlkIGRlYnVnZ2luZyBpZiBjb25maWd1cmUgbWFrZXMgYSBtaXN0YWtlLgogCi1JdCB3YXMgY3JlYXRlZCBieSBweXRob24gJGFzX21lIDMuMywgd2hpY2ggd2FzCitJdCB3YXMgY3JlYXRlZCBieSBweXRob24gJGFzX21lIDMuNCwgd2hpY2ggd2FzCiBnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjkuICBJbnZvY2F0aW9uIGNvbW1hbmQgbGluZSB3YXMKIAogICAkICQwICRACkBAIC0yOTM5LDYgKzI5NjEsOSBAQAogCiAKIAorIyBweWJ1aWxkZGlyLnR4dCB3aWxsIGJlIGNyZWF0ZWQgYnkgLS1nZW5lcmF0ZS1wb3NpeC12YXJzIGluIHRoZSBNYWtlZmlsZQorcm0gLWYgcHlidWlsZGRpci50eHQKKwogaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBweXRob24gaW50ZXJwcmV0ZXIgZm9yIGNyb3NzIGJ1aWxkIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIGZvciBweXRob24gaW50ZXJwcmV0ZXIgZm9yIGNyb3NzIGJ1aWxkLi4uICIgPiY2OyB9CkBAIC0yOTc5LDcgKzMwMDQsNyBAQAogbXYgY29uZmRlZnMuaC5uZXcgY29uZmRlZnMuaAogCiAKLVZFUlNJT049My4zCitWRVJTSU9OPTMuNAogCiAjIFZlcnNpb24gbnVtYmVyIG9mIFB5dGhvbidzIG93biBzaGFyZWQgbGlicmFyeSBmaWxlLgogCkBAIC0zMDM1LDcgKzMwNjAsNyBAQAogCQkjIExvY2F0ZSB0aGUgYmVzdCB1c2FibGUgU0RLLCBzZWUgTWFjL1JFQURNRS50eHQgZm9yIG1vcmUKIAkJIyBpbmZvcm1hdGlvbgogCQllbmFibGV2YWw9ImAvdXNyL2Jpbi94Y29kZWJ1aWxkIC12ZXJzaW9uIC1zZGsgbWFjb3N4IFBhdGggMj4vZGV2L251bGxgIgotCQlpZiB0ZXN0IC16ICIke2VuYWJsZXZhbH0iCisJCWlmICEgKCBlY2hvICRlbmFibGV2YWwgfCBncmVwIC1FICdcLnNkaycgMT4vZGV2L251bGwgKQogCQl0aGVuCiAJCQllbmFibGV2YWw9L0RldmVsb3Blci9TREtzL01hY09TWDEwLjR1LnNkawogCQkJaWYgdGVzdCAhIC1kICIke2VuYWJsZXZhbH0iCkBAIC0zMDc4LDYgKzMxMDMsNyBAQAogCiAKIAorQVJDSF9SVU5fMzJCSVQ9IiIKIAogIyBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSByZWFzb25zIHdlIHByZWZlciB0byBzZWxlY3QgJzMyLWJpdCcgaWYgYXZhaWxhYmxlLAogIyBvdGhlcndpc2UgdXNlICdpbnRlbCcKQEAgLTMwODYsNyArMzExMiw3IEBACiB0aGVuCiAJaWYgdGVzdCAtbiAiJHtVTklWRVJTQUxTREt9IgogCXRoZW4KLQkJaWYgdGVzdCAteiAiYC91c3IvYmluL2ZpbGUgIiR7VU5JVkVSU0FMU0RLfS91c3IvbGliL2xpYlN5c3RlbS5keWxpYiIgfCBncmVwIHBwY2AiCisJCWlmIHRlc3QgLXogImAvdXNyL2Jpbi9maWxlIC1MICIke1VOSVZFUlNBTFNES30vdXNyL2xpYi9saWJTeXN0ZW0uZHlsaWIiIHwgZ3JlcCBwcGNgIgogCQl0aGVuCiAJCQlVTklWRVJTQUxfQVJDSFM9ImludGVsIgogCQlmaQpAQCAtMzEwMCwxOSArMzEyNiwxOCBAQAogIyBDaGVjayB3aGV0aGVyIC0td2l0aC11bml2ZXJzYWwtYXJjaHMgd2FzIGdpdmVuLgogaWYgdGVzdCAiJHt3aXRoX3VuaXZlcnNhbF9hcmNocytzZXR9IiA9IHNldDsgdGhlbiA6CiAgIHdpdGh2YWw9JHdpdGhfdW5pdmVyc2FsX2FyY2hzOwotCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkd2l0aHZhbCIgPiY1Ci0kYXNfZWNobyAiJHdpdGh2YWwiID4mNjsgfQogCVVOSVZFUlNBTF9BUkNIUz0iJHdpdGh2YWwiCiAKLWVsc2UKLQotIAl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHtVTklWRVJTQUxfQVJDSFN9IiA+JjUKLSRhc19lY2hvICIke1VOSVZFUlNBTF9BUkNIU30iID4mNjsgfQotCiBmaQogCi0KLQoraWYgdGVzdCAtbiAiJHtVTklWRVJTQUxTREt9IgordGhlbgorCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAke1VOSVZFUlNBTF9BUkNIU30iID4mNQorJGFzX2VjaG8gIiR7VU5JVkVSU0FMX0FSQ0hTfSIgPiY2OyB9CitlbHNlCisJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQogCiAKICMgQ2hlY2sgd2hldGhlciAtLXdpdGgtZnJhbWV3b3JrLW5hbWUgd2FzIGdpdmVuLgpAQCAtMzE0Nyw2ICszMTcyLDcgQEAKIAkJRlJBTUVXT1JLSU5TVEFMTExBU1Q9CiAJCUZSQU1FV09SS0FMVElOU1RBTExGSVJTVD0KIAkJRlJBTUVXT1JLQUxUSU5TVEFMTExBU1Q9CisJCUZSQU1FV09SS1BZVEhPTlc9CiAJCWlmIHRlc3QgIngke3ByZWZpeH0iID0gInhOT05FIjsgdGhlbgogCQkJRlJBTUVXT1JLVU5JWFRPT0xTUFJFRklYPSIke2FjX2RlZmF1bHRfcHJlZml4fSIKIAkJZWxzZQpAQCAtMzE2MSw2ICszMTg3LDcgQEAKIAkJRlJBTUVXT1JLQUxUSU5TVEFMTEZJUlNUPSJmcmFtZXdvcmtpbnN0YWxsc3RydWN0dXJlICIKIAkJRlJBTUVXT1JLSU5TVEFMTExBU1Q9ImZyYW1ld29ya2luc3RhbGxtYWNsaWIgZnJhbWV3b3JraW5zdGFsbGFwcHMgZnJhbWV3b3JraW5zdGFsbHVuaXh0b29scyIKIAkJRlJBTUVXT1JLQUxUSU5TVEFMTExBU1Q9ImZyYW1ld29ya2luc3RhbGxtYWNsaWIgZnJhbWV3b3JraW5zdGFsbGFwcHMgZnJhbWV3b3JrYWx0aW5zdGFsbHVuaXh0b29scyIKKwkJRlJBTUVXT1JLUFlUSE9OVz0iZnJhbWV3b3JrcHl0aG9udyIKIAkJRlJBTUVXT1JLSU5TVEFMTEFQUFNQUkVGSVg9Ii9BcHBsaWNhdGlvbnMiCiAKIAkJaWYgdGVzdCAieCR7cHJlZml4fSIgPSAieE5PTkUiIDsgdGhlbgpAQCAtMzIyOCw2ICszMjU1LDcgQEAKIAlGUkFNRVdPUktJTlNUQUxMTEFTVD0KIAlGUkFNRVdPUktBTFRJTlNUQUxMRklSU1Q9CiAJRlJBTUVXT1JLQUxUSU5TVEFMTExBU1Q9CisJRlJBTUVXT1JLUFlUSE9OVz0KIAlpZiB0ZXN0ICJ4JHtwcmVmaXh9IiA9ICJ4Tk9ORSIgOyB0aGVuCiAJCUZSQU1FV09SS1VOSVhUT09MU1BSRUZJWD0iJHthY19kZWZhdWx0X3ByZWZpeH0iCiAJZWxzZQpAQCAtMzI1MCw2ICszMjc4LDcgQEAKIAogCiAKKwogIyNBQ19BUkdfV0lUSChkeWxkLAogIyMgICAgICAgICAgICBBU19IRUxQX1NUUklORyhbLS13aXRoLWR5bGRdLAogIyMgICAgICAgICAgICAgICAgICAgICAgICAgICBbVXNlIChPcGVuU3RlcHxSaGFwc29keSkgZHluYW1pYyBsaW5rZXJdKSkKQEAgLTM0MzEsNiArMzQ2MCwyMSBAQAogCiBmaQogCisjIE9uIEhQLVVYIG1ic3RhdGVfdCByZXF1aXJlcyBfSU5DTFVERV9fU1REQ19BMV9TT1VSQ0UKK2Nhc2UgJGFjX3N5c19zeXN0ZW0gaW4KKyAgaHAqfEhQKikKKyAgICBkZWZpbmVfc3RkY19hMT15ZXM7OworICAqKQorICAgIGRlZmluZV9zdGRjX2ExPW5vOzsKK2VzYWMKKworaWYgdGVzdCAkZGVmaW5lX3N0ZGNfYTEgPSB5ZXMKK3RoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgX0lOQ0xVREVfX1NURENfQTFfU09VUkNFIDEiID4+Y29uZmRlZnMuaAorCitmaQorCiAjCiAjIFNHSSBjb21waWxlcnMgYWxsb3cgdGhlIHNwZWNpZmljYXRpb24gb2YgdGhlIGJvdGggdGhlIEFCSSBhbmQgdGhlCiAjIElTQSBvbiB0aGUgY29tbWFuZCBsaW5lLiAgRGVwZW5kaW5nIG9uIHRoZSB2YWx1ZXMgb2YgdGhlc2Ugc3dpdGNoZXMsCkBAIC0zNDUwLDYgKzM0OTQsOSBAQAogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRNQUNIREVQIiA+JjUKICRhc19lY2hvICIkTUFDSERFUCIgPiY2OyB9CiAKKworUExBVERJUj1wbGF0LSRNQUNIREVQCisKICMgUmVjb3JkIHRoZSBjb25maWd1cmUtdGltZSB2YWx1ZSBvZiBNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQsCiAjIGl0IG1heSBpbmZsdWVuY2UgdGhlIHdheSB3ZSBjYW4gYnVpbGQgZXh0ZW5zaW9ucywgc28gZGlzdHV0aWxzCiAjIG5lZWRzIHRvIGNoZWNrIGl0CkBAIC00ODAxLDE2ICs0ODQ4LDE2IEBACiBmaQogaWYgdGVzdCAiJHByZXNldF9jeHgiICE9ICIkQ1hYIgogdGhlbgotICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6CisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfToKIAogICBCeSBkZWZhdWx0LCBkaXN0dXRpbHMgd2lsbCBidWlsZCBDKysgZXh0ZW5zaW9uIG1vZHVsZXMgd2l0aCBcIiRDWFhcIi4KICAgSWYgdGhpcyBpcyBub3QgaW50ZW5kZWQsIHRoZW4gc2V0IENYWCBvbiB0aGUgY29uZmlndXJlIGNvbW1hbmQgbGluZS4KICAgIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6CiskYXNfZWNobyAiJGFzX21lOgogCiAgIEJ5IGRlZmF1bHQsIGRpc3R1dGlscyB3aWxsIGJ1aWxkIEMrKyBleHRlbnNpb24gbW9kdWxlcyB3aXRoIFwiJENYWFwiLgogICBJZiB0aGlzIGlzIG5vdCBpbnRlbmRlZCwgdGhlbiBzZXQgQ1hYIG9uIHRoZSBjb25maWd1cmUgY29tbWFuZCBsaW5lLgotICAiID4mMjt9CisgICIgPiY2O30KIGZpCiAKIApAQCAtNTU4NCw2ICs1NjMxLDcgQEAKIAogIyBPdGhlciBwbGF0Zm9ybXMgZm9sbG93CiBpZiB0ZXN0ICRlbmFibGVfc2hhcmVkID0gInllcyI7IHRoZW4KKyAgUFlfRU5BQkxFX1NIQVJFRD0xCiAKICRhc19lY2hvICIjZGVmaW5lIFB5X0VOQUJMRV9TSEFSRUQgMSIgPj5jb25mZGVmcy5oCiAKQEAgLTU2MzIsNyArNTY4MCw3IEBACiAgICAgRGFyd2luKikKICAgICAJTERMSUJSQVJZPSdsaWJweXRob24kKExEVkVSU0lPTikuZHlsaWInCiAJQkxETElCUkFSWT0nLUwuIC1scHl0aG9uJChMRFZFUlNJT04pJwotCVJVTlNIQVJFRD0nRFlMRF9MSUJSQVJZX1BBVEg9YHB3ZGAke0RZTERfTElCUkFSWV9QQVRIOis6JHtEWUxEX0xJQlJBUllfUEFUSH19JworCVJVTlNIQVJFRD1EWUxEX0xJQlJBUllfUEFUSD1gcHdkYCR7RFlMRF9MSUJSQVJZX1BBVEg6Kzoke0RZTERfTElCUkFSWV9QQVRIfX0KIAk7OwogICAgIEFJWCopCiAJTERMSUJSQVJZPSdsaWJweXRob24kKExEVkVSU0lPTikuc28nCkBAIC01NjQxLDYgKzU2ODksNyBAQAogCiAgIGVzYWMKIGVsc2UgIyBzaGFyZWQgaXMgZGlzYWJsZWQKKyAgUFlfRU5BQkxFX1NIQVJFRD0wCiAgIGNhc2UgJGFjX3N5c19zeXN0ZW0gaW4KICAgICBDWUdXSU4qKQogICAgICAgICAgIEJMRExJQlJBUlk9JyQoTElCUkFSWSknCkBAIC02MjM4LDcgKzYyODcsMTEgQEAKIAkgICAgaWYgdGVzdCAiJFB5X0RFQlVHIiA9ICd0cnVlJyA7IHRoZW4KIAkJIyBPcHRpbWl6YXRpb24gbWVzc2VzIHVwIGRlYnVnZ2Vycywgc28gdHVybiBpdCBvZmYgZm9yCiAJCSMgZGVidWcgYnVpbGRzLgotCQlPUFQ9Ii1nIC1PMCAtV2FsbCAkU1RSSUNUX1BST1RPIgorICAgICAgICAgICAgICAgIGlmICIkQ0MiIC12IC0taGVscCAyPi9kZXYvbnVsbCB8Z3JlcCAtLSAtT2cgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgT1BUPSItZyAtT2cgLVdhbGwgJFNUUklDVF9QUk9UTyIKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIE9QVD0iLWcgLU8wIC1XYWxsICRTVFJJQ1RfUFJPVE8iCisgICAgICAgICAgICAgICAgZmkKIAkgICAgZWxzZQogCQlPUFQ9Ii1nICRXUkFQIC1PMyAtV2FsbCAkU1RSSUNUX1BST1RPIgogCSAgICBmaQpAQCAtNjI2MSw2ICs2MzE0LDcgQEAKIAogCiAKKwogIyBUaGUgLWFyY2ggZmxhZ3MgZm9yIHVuaXZlcnNhbCBidWlsZHMgb24gT1NYCiBVTklWRVJTQUxfQVJDSF9GTEFHUz0KIApAQCAtNjM4MSw2ICs2NDM1LDQ5IEBACiAgICAgICBCQVNFQ0ZMQUdTPSIkQkFTRUNGTEFHUyAtV25vLXVudXNlZC1yZXN1bHQiCiAgICAgZmkKIAorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIC1XZXJyb3I9ZGVjbGFyYXRpb24tYWZ0ZXItc3RhdGVtZW50IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAtV2Vycm9yPWRlY2xhcmF0aW9uLWFmdGVyLXN0YXRlbWVudC4uLiAiID4mNjsgfQorICAgICBhY19zYXZlX2NjPSIkQ0MiCisgICAgIENDPSIkQ0MgLVdlcnJvcj1kZWNsYXJhdGlvbi1hZnRlci1zdGF0ZW1lbnQiCisgICAgIHNhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorICAgICBpZiAke2FjX2N2X2RlY2xhcmF0aW9uX2FmdGVyX3N0YXRlbWVudF93YXJuaW5nKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgICAgICAgIGFjX2N2X2RlY2xhcmF0aW9uX2FmdGVyX3N0YXRlbWVudF93YXJuaW5nPXllcworCitlbHNlCisKKyAgICAgICAgICAgYWNfY3ZfZGVjbGFyYXRpb25fYWZ0ZXJfc3RhdGVtZW50X3dhcm5pbmc9bm8KKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKKworICAgICBDRkxBR1M9IiRzYXZlX0NGTEFHUyIKKyAgICAgQ0M9IiRhY19zYXZlX2NjIgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfZGVjbGFyYXRpb25fYWZ0ZXJfc3RhdGVtZW50X3dhcm5pbmciID4mNQorJGFzX2VjaG8gIiRhY19jdl9kZWNsYXJhdGlvbl9hZnRlcl9zdGF0ZW1lbnRfd2FybmluZyIgPiY2OyB9CisKKyAgICBpZiB0ZXN0ICRhY19jdl9kZWNsYXJhdGlvbl9hZnRlcl9zdGF0ZW1lbnRfd2FybmluZyA9IHllcworICAgIHRoZW4KKyAgICAgIENGTEFHU19OT0RJU1Q9IiRDRkxBR1NfTk9ESVNUIC1XZXJyb3I9ZGVjbGFyYXRpb24tYWZ0ZXItc3RhdGVtZW50IgorICAgIGZpCisKICAgICAjIGlmIHVzaW5nIGdjYyBvbiBhbHBoYSwgdXNlIC1taWVlZSB0byBnZXQgKG5lYXIpIGZ1bGwgSUVFRSA3NTQKICAgICAjIHN1cHBvcnQuICBXaXRob3V0IHRoaXMsIHRyZWF0bWVudCBvZiBzdWJub3JtYWxzIGRvZXNuJ3QgZm9sbG93CiAgICAgIyB0aGUgc3RhbmRhcmQuCkBAIC02Mzk0LDExMyArNjQ5MSwxMzAgQEAKIAlTQ09fU1YqKQogCSAgICBCQVNFQ0ZMQUdTPSIkQkFTRUNGTEFHUyAtbTQ4NiAtRFNDTzUiCiAJICAgIDs7Ci0JIyBpcyB0aGVyZSBhbnkgb3RoZXIgY29tcGlsZXIgb24gRGFyd2luIGJlc2lkZXMgZ2NjPwotCURhcndpbiopCi0JICAgICMgLVduby1sb25nLWRvdWJsZSwgLW5vLWNwcC1wcmVjb21wLCBhbmQgLW1uby1mdXNlZC1tYWRkCi0JICAgICMgdXNlZCB0byBiZSBoZXJlLCBidXQgbm9uLUFwcGxlIGdjYyBkb2Vzbid0IGFjY2VwdCB0aGVtLgotICAgICAgICAgICAgaWYgdGVzdCAiJHtDQ30iID0gZ2NjCi0JICAgIHRoZW4KLQkJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGljaCBjb21waWxlciBzaG91bGQgYmUgdXNlZCIgPiY1CisKKyAgICAjIGlzIHRoZXJlIGFueSBvdGhlciBjb21waWxlciBvbiBEYXJ3aW4gYmVzaWRlcyBnY2M/CisgICAgRGFyd2luKikKKyAgICAgICAgIyAtV25vLWxvbmctZG91YmxlLCAtbm8tY3BwLXByZWNvbXAsIGFuZCAtbW5vLWZ1c2VkLW1hZGQKKyAgICAgICAgIyB1c2VkIHRvIGJlIGhlcmUsIGJ1dCBub24tQXBwbGUgZ2NjIGRvZXNuJ3QgYWNjZXB0IHRoZW0uCisgICAgICAgIGlmIHRlc3QgIiR7Q0N9IiA9IGdjYworICAgICAgICB0aGVuCisgICAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoaWNoIGNvbXBpbGVyIHNob3VsZCBiZSB1c2VkIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIHdoaWNoIGNvbXBpbGVyIHNob3VsZCBiZSB1c2VkLi4uICIgPiY2OyB9Ci0JCWNhc2UgIiR7VU5JVkVSU0FMU0RLfSIgaW4KLQkJKi9NYWNPU1gxMC40dS5zZGspCi0JCQkjIEJ1aWxkIHVzaW5nIDEwLjQgU0RLLCBmb3JjZSB1c2FnZSBvZiBnY2Mgd2hlbiB0aGUKLQkJCSMgY29tcGlsZXIgaXMgZ2NjLCBvdGhlcndpc2UgdGhlIHVzZXIgd2lsbCBnZXQgdmVyeQotCQkJIyBjb25mdXNpbmcgZXJyb3IgbWVzc2FnZXMgd2hlbiBidWlsZGluZyBvbiBPU1ggMTAuNgotCQkJQ0M9Z2NjLTQuMAotCQkJQ1BQPWNwcC00LjAKLQkJCTs7Ci0JCWVzYWMKLQkJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRDQyIgPiY1CisgICAgICAgICAgICBjYXNlICIke1VOSVZFUlNBTFNES30iIGluCisgICAgICAgICAgICAqL01hY09TWDEwLjR1LnNkaykKKyAgICAgICAgICAgICAgICAjIEJ1aWxkIHVzaW5nIDEwLjQgU0RLLCBmb3JjZSB1c2FnZSBvZiBnY2Mgd2hlbiB0aGUKKyAgICAgICAgICAgICAgICAjIGNvbXBpbGVyIGlzIGdjYywgb3RoZXJ3aXNlIHRoZSB1c2VyIHdpbGwgZ2V0IHZlcnkKKyAgICAgICAgICAgICAgICAjIGNvbmZ1c2luZyBlcnJvciBtZXNzYWdlcyB3aGVuIGJ1aWxkaW5nIG9uIE9TWCAxMC42CisgICAgICAgICAgICAgICAgQ0M9Z2NjLTQuMAorICAgICAgICAgICAgICAgIENQUD1jcHAtNC4wCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQ0MiID4mNQogJGFzX2VjaG8gIiRDQyIgPiY2OyB9Ci0JICAgIGZpCisgICAgICAgIGZpCiAKKyAgICAgICAgaWYgdGVzdCAiJHtlbmFibGVfdW5pdmVyc2Fsc2RrfSIKKyAgICAgICAgdGhlbgorICAgICAgICAgICAgY2FzZSAiJFVOSVZFUlNBTF9BUkNIUyIgaW4KKyAgICAgICAgICAgIDMyLWJpdCkKKyAgICAgICAgICAgICAgIFVOSVZFUlNBTF9BUkNIX0ZMQUdTPSItYXJjaCBwcGMgLWFyY2ggaTM4NiIKKyAgICAgICAgICAgICAgIExJUE9fMzJCSVRfRkxBR1M9IiIKKyAgICAgICAgICAgICAgIEFSQ0hfUlVOXzMyQklUPSIiCisgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgNjQtYml0KQorICAgICAgICAgICAgICAgVU5JVkVSU0FMX0FSQ0hfRkxBR1M9Ii1hcmNoIHBwYzY0IC1hcmNoIHg4Nl82NCIKKyAgICAgICAgICAgICAgIExJUE9fMzJCSVRfRkxBR1M9IiIKKyAgICAgICAgICAgICAgIEFSQ0hfUlVOXzMyQklUPSJ0cnVlIgorICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgIGFsbCkKKyAgICAgICAgICAgICAgIFVOSVZFUlNBTF9BUkNIX0ZMQUdTPSItYXJjaCBpMzg2IC1hcmNoIHBwYyAtYXJjaCBwcGM2NCAtYXJjaCB4ODZfNjQiCisgICAgICAgICAgICAgICBMSVBPXzMyQklUX0ZMQUdTPSItZXh0cmFjdCBwcGM3NDAwIC1leHRyYWN0IGkzODYiCisgICAgICAgICAgICAgICBBUkNIX1JVTl8zMkJJVD0iL3Vzci9iaW4vYXJjaCAtaTM4NiAtcHBjIgorICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgIGludGVsKQorICAgICAgICAgICAgICAgVU5JVkVSU0FMX0FSQ0hfRkxBR1M9Ii1hcmNoIGkzODYgLWFyY2ggeDg2XzY0IgorICAgICAgICAgICAgICAgTElQT18zMkJJVF9GTEFHUz0iLWV4dHJhY3QgaTM4NiIKKyAgICAgICAgICAgICAgIEFSQ0hfUlVOXzMyQklUPSIvdXNyL2Jpbi9hcmNoIC1pMzg2IgorICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgIGludGVsLTMyKQorICAgICAgICAgICAgICAgVU5JVkVSU0FMX0FSQ0hfRkxBR1M9Ii1hcmNoIGkzODYiCisgICAgICAgICAgICAgICBMSVBPXzMyQklUX0ZMQUdTPSIiCisgICAgICAgICAgICAgICBBUkNIX1JVTl8zMkJJVD0iIgorICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgIDMtd2F5KQorICAgICAgICAgICAgICAgVU5JVkVSU0FMX0FSQ0hfRkxBR1M9Ii1hcmNoIGkzODYgLWFyY2ggcHBjIC1hcmNoIHg4Nl82NCIKKyAgICAgICAgICAgICAgIExJUE9fMzJCSVRfRkxBR1M9Ii1leHRyYWN0IHBwYzc0MDAgLWV4dHJhY3QgaTM4NiIKKyAgICAgICAgICAgICAgIEFSQ0hfUlVOXzMyQklUPSIvdXNyL2Jpbi9hcmNoIC1pMzg2IC1wcGMiCisgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgKikKKyAgICAgICAgICAgICAgIGFzX2ZuX2Vycm9yICQ/ICJwcm9wZXIgdXNhZ2UgaXMgLS13aXRoLXVuaXZlcnNhbC1hcmNoPTMyLWJpdHw2NC1iaXR8YWxsfGludGVsfDMtd2F5IiAiJExJTkVOTyIgNQorICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgIGVzYWMKIAotCSAgICBpZiB0ZXN0ICIke2VuYWJsZV91bml2ZXJzYWxzZGt9IjsgdGhlbgotCQlVTklWRVJTQUxfQVJDSF9GTEFHUz0iIgotCSAgICAgICAgaWYgdGVzdCAiJFVOSVZFUlNBTF9BUkNIUyIgPSAiMzItYml0IiA7IHRoZW4KLQkJICAgVU5JVkVSU0FMX0FSQ0hfRkxBR1M9Ii1hcmNoIHBwYyAtYXJjaCBpMzg2IgotCQkgICBBUkNIX1JVTl8zMkJJVD0iIgotCQkgICBMSVBPXzMyQklUX0ZMQUdTPSIiCi0JICAgICAgICAgZWxpZiB0ZXN0ICIkVU5JVkVSU0FMX0FSQ0hTIiA9ICI2NC1iaXQiIDsgdGhlbgotCQkgICBVTklWRVJTQUxfQVJDSF9GTEFHUz0iLWFyY2ggcHBjNjQgLWFyY2ggeDg2XzY0IgotCQkgICBMSVBPXzMyQklUX0ZMQUdTPSIiCi0JCSAgIEFSQ0hfUlVOXzMyQklUPSJ0cnVlIgorICAgICAgICAgICAgQ0ZMQUdTPSIke1VOSVZFUlNBTF9BUkNIX0ZMQUdTfSAtaXN5c3Jvb3QgJHtVTklWRVJTQUxTREt9ICR7Q0ZMQUdTfSIKKyAgICAgICAgICAgIExERkxBR1M9IiR7VU5JVkVSU0FMX0FSQ0hfRkxBR1N9IC1pc3lzcm9vdCAke1VOSVZFUlNBTFNES30gJHtMREZMQUdTfSIKKyAgICAgICAgICAgIGlmIHRlc3QgIiR7VU5JVkVSU0FMU0RLfSIgIT0gIi8iCisgICAgICAgICAgICB0aGVuCisgICAgICAgICAgICAgICAgQ1BQRkxBR1M9Ii1pc3lzcm9vdCAke1VOSVZFUlNBTFNES30gJHtDUFBGTEFHU30iCisgICAgICAgICAgICBmaQorICAgICAgICBmaQogCi0JICAgICAgICAgZWxpZiB0ZXN0ICIkVU5JVkVSU0FMX0FSQ0hTIiA9ICJhbGwiIDsgdGhlbgotCQkgICBVTklWRVJTQUxfQVJDSF9GTEFHUz0iLWFyY2ggaTM4NiAtYXJjaCBwcGMgLWFyY2ggcHBjNjQgLWFyY2ggeDg2XzY0IgotCQkgICBMSVBPXzMyQklUX0ZMQUdTPSItZXh0cmFjdCBwcGM3NDAwIC1leHRyYWN0IGkzODYiCi0JCSAgIEFSQ0hfUlVOXzMyQklUPSIvdXNyL2Jpbi9hcmNoIC1pMzg2IC1wcGMiCisgICAgICAgICMgQ2FsY3VsYXRlIGFuIGFwcHJvcHJpYXRlIGRlcGxveW1lbnQgdGFyZ2V0IGZvciB0aGlzIGJ1aWxkOgorICAgICAgICAjIFRoZSBkZXBsb3ltZW50IHRhcmdldCB2YWx1ZSBpcyB1c2VkIGV4cGxpY2l0bHkgdG8gZW5hYmxlIGNlcnRhaW4KKyAgICAgICAgIyBmZWF0dXJlcyBhcmUgZW5hYmxlZCAoc3VjaCBhcyBidWlsdGluIGxpYmVkaXQgc3VwcG9ydCBmb3IgcmVhZGxpbmUpCisgICAgICAgICMgdGhyb3VnaCB0aGUgdXNlIG9mIEFwcGxlJ3MgQXZhaWxhYmlsaXkgTWFjcm9zIGFuZCBpcyB1c2VkIGFzIGEKKyAgICAgICAgIyBjb21wb25lbnQgb2YgdGhlIHN0cmluZyByZXR1cm5lZCBieSBkaXN0dXRpbHMuZ2V0X3BsYXRmb3JtKCkuCisgICAgICAgICMKKyAgICAgICAgIyBVc2UgdGhlIHZhbHVlIGZyb206CisgICAgICAgICMgMS4gdGhlIE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCBlbnZpcm9ubWVudCB2YXJpYWJsZSBpZiBzcGVjaWZpZWQKKyAgICAgICAgIyAyLiB0aGUgb3BlcmF0aW5nIHN5c3RlbSB2ZXJzaW9uIG9mIHRoZSBidWlsZCBtYWNoaW5lIGlmID49IDEwLjYKKyAgICAgICAgIyAzLiBJZiBydW5uaW5nIG9uIE9TIFggMTAuMyB0aHJvdWdoIDEwLjUsIHVzZSB0aGUgbGVnYWN5IHRlc3RzCisgICAgICAgICMgICAgICAgYmVsb3cgdG8gcGljayBlaXRoZXIgMTAuMywgMTAuNCwgb3IgMTAuNSBhcyB0aGUgdGFyZ2V0LgorICAgICAgICAjIDQuIElmIHdlIGFyZSBydW5uaW5nIG9uIE9TIFggMTAuMiBvciBlYXJsaWVyLCBnb29kIGx1Y2shCiAKLQkgICAgICAgICBlbGlmIHRlc3QgIiRVTklWRVJTQUxfQVJDSFMiID0gImludGVsIiA7IHRoZW4KLQkJICAgVU5JVkVSU0FMX0FSQ0hfRkxBR1M9Ii1hcmNoIGkzODYgLWFyY2ggeDg2XzY0IgotCQkgICBMSVBPXzMyQklUX0ZMQUdTPSItZXh0cmFjdCBpMzg2IgotCQkgICBBUkNIX1JVTl8zMkJJVD0iL3Vzci9iaW4vYXJjaCAtaTM4NiIKKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGljaCBNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQgdG8gdXNlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoaWNoIE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCB0byB1c2UuLi4gIiA+JjY7IH0KKyAgICAgICAgY3VyX3RhcmdldF9tYWpvcj1gc3dfdmVycyAtcHJvZHVjdFZlcnNpb24gfCBcCisgICAgICAgICAgICAgICAgc2VkICdzL1woWzAtOV0qXClcLlwoWzAtOV0qXCkuKi9cMS8nYAorICAgICAgICBjdXJfdGFyZ2V0X21pbm9yPWBzd192ZXJzIC1wcm9kdWN0VmVyc2lvbiB8IFwKKyAgICAgICAgICAgICAgICBzZWQgJ3MvXChbMC05XSpcKVwuXChbMC05XSpcKS4qL1wyLydgCisgICAgICAgIGN1cl90YXJnZXQ9IiR7Y3VyX3RhcmdldF9tYWpvcn0uJHtjdXJfdGFyZ2V0X21pbm9yfSIKKyAgICAgICAgaWYgdGVzdCAke2N1cl90YXJnZXRfbWFqb3J9IC1lcSAxMCAmJiBcCisgICAgICAgICAgIHRlc3QgJHtjdXJfdGFyZ2V0X21pbm9yfSAtZ2UgMyAmJiBcCisgICAgICAgICAgIHRlc3QgJHtjdXJfdGFyZ2V0X21pbm9yfSAtbGUgNQorICAgICAgICB0aGVuCisgICAgICAgICAgICAjIE9TIFggMTAuMyB0aHJvdWdoIDEwLjUKKyAgICAgICAgICAgIGN1cl90YXJnZXQ9MTAuMworICAgICAgICAgICAgaWYgdGVzdCAke2VuYWJsZV91bml2ZXJzYWxzZGt9CisgICAgICAgICAgICB0aGVuCisgICAgICAgICAgICAgICAgY2FzZSAiJFVOSVZFUlNBTF9BUkNIUyIgaW4KKyAgICAgICAgICAgICAgICBhbGx8My13YXl8aW50ZWx8NjQtYml0KQorICAgICAgICAgICAgICAgICAgICAjIFRoZXNlIGNvbmZpZ3VyYXRpb25zIHdlcmUgZmlyc3Qgc3VwcG9ydGVkIGluIDEwLjUKKyAgICAgICAgICAgICAgICAgICAgY3VyX3RhcmdldD0nMTAuNScKKyAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgaWYgdGVzdCBgL3Vzci9iaW4vYXJjaGAgPSAiaTM4NiIKKyAgICAgICAgICAgICAgICB0aGVuCisgICAgICAgICAgICAgICAgICAgICMgMTAuNCB3YXMgdGhlIGZpcnN0IHJlbGVhc2UgdG8gc3VwcG9ydCBJbnRlbCBhcmNocworICAgICAgICAgICAgICAgICAgICBjdXJfdGFyZ2V0PSIxMC40IgorICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICBmaQorICAgICAgICBmaQorICAgICAgICBDT05GSUdVUkVfTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUPSR7TUFDT1NYX0RFUExPWU1FTlRfVEFSR0VULSR7Y3VyX3RhcmdldH19CiAKLQkgICAgICAgICBlbGlmIHRlc3QgIiRVTklWRVJTQUxfQVJDSFMiID0gIjMtd2F5IiA7IHRoZW4KLQkJICAgVU5JVkVSU0FMX0FSQ0hfRkxBR1M9Ii1hcmNoIGkzODYgLWFyY2ggcHBjIC1hcmNoIHg4Nl82NCIKLQkJICAgTElQT18zMkJJVF9GTEFHUz0iLWV4dHJhY3QgcHBjNzQwMCAtZXh0cmFjdCBpMzg2IgotCQkgICBBUkNIX1JVTl8zMkJJVD0iL3Vzci9iaW4vYXJjaCAtaTM4NiAtcHBjIgorICAgICAgICAjIE1ha2Ugc3VyZSB0aGF0IE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCBpcyBzZXQgaW4gdGhlCisgICAgICAgICMgZW52aXJvbm1lbnQgd2l0aCBhIHZhbHVlIHRoYXQgaXMgdGhlIHNhbWUgYXMgd2hhdCB3ZSdsbCB1c2UKKyAgICAgICAgIyBpbiB0aGUgTWFrZWZpbGUgdG8gZW5zdXJlIHRoYXQgd2UnbGwgZ2V0IHRoZSBzYW1lIGNvbXBpbGVyCisgICAgICAgICMgZW52aXJvbm1lbnQgZHVyaW5nIGNvbmZpZ3VyZSBhbmQgYnVpbGQgdGltZS4KKyAgICAgICAgTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUPSIkQ09ORklHVVJFX01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCIKKyAgICAgICAgZXhwb3J0IE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVAorICAgICAgICBFWFBPUlRfTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUPScnCisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUIiA+JjUKKyRhc19lY2hvICIkTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUIiA+JjY7IH0KIAotCQkgZWxzZQotCSAgICAgICAgICAgYXNfZm5fZXJyb3IgJD8gInByb3BlciB1c2FnZSBpcyAtLXdpdGgtdW5pdmVyc2FsLWFyY2g9MzItYml0fDY0LWJpdHxhbGx8aW50ZWx8My13YXkiICIkTElORU5PIiA1Ci0KLQkJIGZpCi0KLQotCQlDRkxBR1M9IiR7VU5JVkVSU0FMX0FSQ0hfRkxBR1N9IC1pc3lzcm9vdCAke1VOSVZFUlNBTFNES30gJHtDRkxBR1N9IgotCQlpZiB0ZXN0ICIke1VOSVZFUlNBTFNES30iICE9ICIvIgotCQl0aGVuCi0JCQlDRkxBR1M9Ii1pc3lzcm9vdCAke1VOSVZFUlNBTFNES30gJHtDRkxBR1N9IgotCQkJTERGTEFHUz0iLWlzeXNyb290ICR7VU5JVkVSU0FMU0RLfSAke0xERkxBR1N9IgotCQkJQ1BQRkxBR1M9Ii1pc3lzcm9vdCAke1VOSVZFUlNBTFNES30gJHtDUFBGTEFHU30iCi0JCWZpCi0JICAgIGZpCi0KLQkgICAgIyBDYWxjdWxhdGUgdGhlIHJpZ2h0IGRlcGxveW1lbnQgdGFyZ2V0IGZvciB0aGlzIGJ1aWxkLgotCSAgICAjCi0JICAgIGN1cl90YXJnZXQ9YHN3X3ZlcnMgLXByb2R1Y3RWZXJzaW9uIHwgc2VkICdzL1woMTBcLlswLTldKlwpLiovXDEvJ2AKLQkgICAgaWYgdGVzdCAke2N1cl90YXJnZXR9ICc+JyAxMC4yICYmIFwKLQkgICAgICAgdGVzdCAke2N1cl90YXJnZXR9ICc8JyAxMC42Ci0JICAgIHRoZW4KLQkJICAgIGN1cl90YXJnZXQ9MTAuMwotCQkgICAgaWYgdGVzdCAke2VuYWJsZV91bml2ZXJzYWxzZGt9OyB0aGVuCi0JCQkgICAgaWYgdGVzdCAiJHtVTklWRVJTQUxfQVJDSFN9IiA9ICJhbGwiOyB0aGVuCi0JCQkJICAgICMgRW5zdXJlIHRoYXQgdGhlIGRlZmF1bHQgcGxhdGZvcm0gZm9yIGEKLQkJCQkgICAgIyA0LXdheSB1bml2ZXJzYWwgYnVpbGQgaXMgT1NYIDEwLjUsCi0JCQkJICAgICMgdGhhdCdzIHRoZSBmaXJzdCBPUyByZWxlYXNlIHdoZXJlCi0JCQkJICAgICMgNC13YXkgYnVpbGRzIG1ha2Ugc2Vuc2UuCi0JCQkJICAgIGN1cl90YXJnZXQ9JzEwLjUnCi0KLQkJCSAgICBlbGlmIHRlc3QgIiR7VU5JVkVSU0FMX0FSQ0hTfSIgPSAiMy13YXkiOyB0aGVuCi0JCQkJICAgIGN1cl90YXJnZXQ9JzEwLjUnCi0KLQkJCSAgICBlbGlmIHRlc3QgIiR7VU5JVkVSU0FMX0FSQ0hTfSIgPSAiaW50ZWwiOyB0aGVuCi0JCQkJICAgIGN1cl90YXJnZXQ9JzEwLjUnCi0KLQkJCSAgICBlbGlmIHRlc3QgIiR7VU5JVkVSU0FMX0FSQ0hTfSIgPSAiNjQtYml0IjsgdGhlbgotCQkJCSAgICBjdXJfdGFyZ2V0PScxMC41JwotCQkJICAgIGZpCi0JCSAgICBlbHNlCi0JCQkgICAgaWYgdGVzdCBgL3Vzci9iaW4vYXJjaGAgPSAiaTM4NiI7IHRoZW4KLQkJCQkgICAgIyBPbiBJbnRlbCBtYWNzIGRlZmF1bHQgdG8gYSBkZXBsb3ltZW50Ci0JCQkJICAgICMgdGFyZ2V0IG9mIDEwLjQsIHRoYXQncyB0aGUgZmlyc3QgT1NYCi0JCQkJICAgICMgcmVsZWFzZSB3aXRoIEludGVsIHN1cHBvcnQuCi0JCQkJICAgIGN1cl90YXJnZXQ9IjEwLjQiCi0JCQkgICAgZmkKLQkJICAgIGZpCi0JICAgIGZpCi0JICAgIENPTkZJR1VSRV9NQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQ9JHtNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQtJHtjdXJfdGFyZ2V0fX0KLQotCSAgICAjIE1ha2Ugc3VyZSB0aGF0IE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCBpcyBzZXQgaW4gdGhlCi0JICAgICMgZW52aXJvbm1lbnQgd2l0aCBhIHZhbHVlIHRoYXQgaXMgdGhlIHNhbWUgYXMgd2hhdCB3ZSdsbCB1c2UKLQkgICAgIyBpbiB0aGUgTWFrZWZpbGUgdG8gZW5zdXJlIHRoYXQgd2UnbGwgZ2V0IHRoZSBzYW1lIGNvbXBpbGVyCi0JICAgICMgZW52aXJvbm1lbnQgZHVyaW5nIGNvbmZpZ3VyZSBhbmQgYnVpbGQgdGltZS4KLQkgICAgTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUPSIkQ09ORklHVVJFX01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCIKLQkgICAgZXhwb3J0IE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVAotCSAgICBFWFBPUlRfTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUPScnCi0KLQkgICAgOzsKKyAgICAgICAgIyBlbmQgb2YgRGFyd2luKiB0ZXN0cworICAgICAgICA7OwogICAgIGVzYWMKICAgICA7OwogCkBAIC02NTI3LDQ0ICs2NjQxLDYgQEAKIAlCQVNFQ0ZMQUdTPSIkQkFTRUNGTEFHUyAkYWNfYXJjaF9mbGFncyIKIGZpCiAKLSMgQ2hlY2sgd2hldGhlciBHQ0Mgc3VwcG9ydHMgUHlBcmdfUGFyc2VUdXBsZSBmb3JtYXQKLWlmIHRlc3QgIiRHQ0MiID0gInllcyIKLXRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIGdjYyBzdXBwb3J0cyBQYXJzZVR1cGxlIF9fZm9ybWF0X18iID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBnY2Mgc3VwcG9ydHMgUGFyc2VUdXBsZSBfX2Zvcm1hdF9fLi4uICIgPiY2OyB9Ci0gIHNhdmVfQ0ZMQUdTPSRDRkxBR1MKLSAgQ0ZMQUdTPSIkQ0ZMQUdTIC1XZXJyb3IgLVdmb3JtYXQiCi0gIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotICAgIHZvaWQgZihjaGFyKiwuLi4pX19hdHRyaWJ1dGUoKGZvcm1hdChQeUFyZ19QYXJzZVR1cGxlLCAxLCAyKSkpOwotaW50Ci1tYWluICgpCi17Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6Ci0KLQotJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9BVFRSSUJVVEVfRk9STUFUX1BBUlNFVFVQTEUgMSIgPj5jb25mZGVmcy5oCi0KLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKLSRhc19lY2hvICJ5ZXMiID4mNjsgfQotCi1lbHNlCi0KLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLQotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotICBDRkxBR1M9JHNhdmVfQ0ZMQUdTCi1maQotCiAjIE9uIHNvbWUgY29tcGlsZXJzLCBwdGhyZWFkcyBhcmUgYXZhaWxhYmxlIHdpdGhvdXQgZnVydGhlciBvcHRpb25zCiAjIChlLmcuIE1hY09TIFgpLiBPbiBzb21lIG9mIHRoZXNlIHN5c3RlbXMsIHRoZSBjb21waWxlciB3aWxsIG5vdAogIyBjb21wbGFpbiBpZiB1bmFjY2VwdGVkIG9wdGlvbnMgYXJlIHBhc3NlZCAoZS5nLiBnY2Mgb24gTWFjIE9TIFgpLgpAQCAtNjkyMiwxMSArNjk5OCw5IEBACiAKIGZpCiAKLWFjX3NhdmVfY3BwZmxhZ3M9IiRDUFBGTEFHUyIKLUNQUEZMQUdTPSIkQ1BQRkxBR1MgLUkvdXNyL2luY2x1ZGUvbmN1cnNlc3ciCi1mb3IgYWNfaGVhZGVyIGluIGFzbS90eXBlcy5oIGNvbmlvLmggY3Vyc2VzLmggZGlyZWN0LmggZGxmY24uaCBlcnJuby5oIFwKK2ZvciBhY19oZWFkZXIgaW4gYXNtL3R5cGVzLmggY29uaW8uaCBkaXJlY3QuaCBkbGZjbi5oIGVycm5vLmggXAogZmNudGwuaCBncnAuaCBcCi1pZWVlZnAuaCBpby5oIGxhbmdpbmZvLmggbGliaW50bC5oIG5jdXJzZXMuaCBwcm9jZXNzLmggcHRocmVhZC5oIFwKK2llZWVmcC5oIGlvLmggbGFuZ2luZm8uaCBsaWJpbnRsLmggcHJvY2Vzcy5oIHB0aHJlYWQuaCBcCiBzY2hlZC5oIHNoYWRvdy5oIHNpZ25hbC5oIHN0ZGludC5oIHN0cm9wdHMuaCB0ZXJtaW9zLmggXAogdW5pc3RkLmggdXRpbWUuaCBcCiBwb2xsLmggc3lzL2RldnBvbGwuaCBzeXMvZXBvbGwuaCBzeXMvcG9sbC5oIFwKQEAgLTY5MzYsNyArNzAxMCw4IEBACiBzeXMvc3RhdC5oIHN5cy9zeXNjYWxsLmggc3lzL3N5c19kb21haW4uaCBzeXMvdGVybWlvLmggc3lzL3RpbWUuaCBcCiBzeXMvdGltZXMuaCBzeXMvdHlwZXMuaCBzeXMvdWlvLmggc3lzL3VuLmggc3lzL3V0c25hbWUuaCBzeXMvd2FpdC5oIHB0eS5oIFwKIGxpYnV0aWwuaCBzeXMvcmVzb3VyY2UuaCBuZXRwYWNrZXQvcGFja2V0Lmggc3lzZXhpdHMuaCBibHVldG9vdGguaCBcCi1ibHVldG9vdGgvYmx1ZXRvb3RoLmggbGludXgvdGlwYy5oIHNwYXduLmggdXRpbC5oIGFsbG9jYS5oCitibHVldG9vdGgvYmx1ZXRvb3RoLmggbGludXgvdGlwYy5oIHNwYXduLmggdXRpbC5oIGFsbG9jYS5oIGVuZGlhbi5oIFwKK3N5cy9lbmRpYW4uaAogZG8gOgogICBhc19hY19IZWFkZXI9YCRhc19lY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCiBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAiJGFjX2hlYWRlciIgIiRhc19hY19IZWFkZXIiICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKQEAgLTY5NDksNyArNzAyNCw2IEBACiAKIGRvbmUKIAotQ1BQRkxBR1M9JGFjX3NhdmVfY3BwZmxhZ3MKIGFjX2hlYWRlcl9kaXJlbnQ9bm8KIGZvciBhY19oZHIgaW4gZGlyZW50Lmggc3lzL25kaXIuaCBzeXMvZGlyLmggbmRpci5oOyBkbwogICBhc19hY19IZWFkZXI9YCRhc19lY2hvICJhY19jdl9oZWFkZXJfZGlyZW50XyRhY19oZHIiIHwgJGFzX3RyX3NoYApAQCAtNzE4NiwyNiArNzI2MCw2IEBACiBkb25lCiAKIAotCi0jIE9uIFNvbGFyaXMsIHRlcm0uaCByZXF1aXJlcyBjdXJzZXMuaAotZm9yIGFjX2hlYWRlciBpbiB0ZXJtLmgKLWRvIDoKLSAgYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZSAiJExJTkVOTyIgInRlcm0uaCIgImFjX2N2X2hlYWRlcl90ZXJtX2giICIKLSNpZmRlZiBIQVZFX0NVUlNFU19ICi0jaW5jbHVkZSA8Y3Vyc2VzLmg+Ci0jZW5kaWYKLQotIgotaWYgdGVzdCAieCRhY19jdl9oZWFkZXJfdGVybV9oIiA9IHh5ZXM7IHRoZW4gOgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIEhBVkVfVEVSTV9IIDEKLV9BQ0VPRgotCi1maQotCi1kb25lCi0KLQogIyBPbiBMaW51eCwgbmV0bGluay5oIHJlcXVpcmVzIGFzbS90eXBlcy5oCiBmb3IgYWNfaGVhZGVyIGluIGxpbnV4L25ldGxpbmsuaAogZG8gOgpAQCAtNzIyOSw3ICs3MjgzLDcgQEAKIAogCiAjIE9uIExpbnV4LCBjYW4uaCBhbmQgY2FuL3Jhdy5oIHJlcXVpcmUgc3lzL3NvY2tldC5oCi1mb3IgYWNfaGVhZGVyIGluIGxpbnV4L2Nhbi5oIGxpbnV4L2Nhbi9yYXcuaAorZm9yIGFjX2hlYWRlciBpbiBsaW51eC9jYW4uaCBsaW51eC9jYW4vcmF3LmggbGludXgvY2FuL2JjbS5oCiBkbyA6CiAgIGFzX2FjX0hlYWRlcj1gJGFzX2VjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUgIiRMSU5FTk8iICIkYWNfaGVhZGVyIiAiJGFzX2FjX0hlYWRlciIgIgpAQCAtNzMxMCw2ICs3MzY0LDQzIEBACiAKIGZpCiAKKyMgYnl0ZSBzd2FwcGluZworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgbGU2NHRvaCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgbGU2NHRvaC4uLiAiID4mNjsgfQorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjaWZkZWYgSEFWRV9FTkRJQU5fSAorI2luY2x1ZGUgPGVuZGlhbi5oPgorI2VsaWYgZGVmaW5lZChIQVZFX1NZU19FTkRJQU5fSCkKKyNpbmNsdWRlIDxzeXMvZW5kaWFuLmg+CisjZW5kaWYKKworaW50CittYWluICgpCit7CisKKyAgIGxlNjR0b2goMSkKKyAgOworICByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2hhc19sZTY0dG9oPXllcworZWxzZQorICBhY19jdl9oYXNfbGU2NHRvaD1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2hhc19sZTY0dG9oIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfaGFzX2xlNjR0b2giID4mNjsgfQoraWYgdGVzdCAiJGFjX2N2X2hhc19sZTY0dG9oIiA9ICJ5ZXMiOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfSFRPTEU2NCAxIiA+PmNvbmZkZWZzLmgKKworZmkKKwogIyBFbmFibGluZyBMRlMgb24gU29sYXJpcyAoMi42IHRvIDkpIHdpdGggZ2NjIDIuOTUgdHJpZ2dlcnMgYSBidWcgaW4KICMgdGhlIHN5c3RlbSBoZWFkZXJzOiBJZiBfWE9QRU5fU09VUkNFIGFuZCBfTEFSR0VGSUxFX1NPVVJDRSBhcmUKICMgZGVmaW5lZCwgYnV0IHRoZSBjb21waWxlciBkb2VzIG5vdCBzdXBwb3J0IHByYWdtYSByZWRlZmluZV9leHRuYW1lLApAQCAtODI3Niw3ICs4MzY3LDYgQEAKIGVzYWMKIAogCi1BUkNIX1JVTl8zMkJJVD0iIgogCiBjYXNlICRhY19zeXNfc3lzdGVtLyRhY19zeXNfcmVsZWFzZSBpbgogICBEYXJ3aW4vWzAxNTY3XVwuLiopCkBAIC04MzQ4LDE0ICs4NDM4LDEyIEBACiAgICAgCQk7OwogICAgIAllc2FjCiAKLQkjQVJDSF9SVU5fMzJCSVQ9InRydWUiCiAgICAgZmkKIAogICAgIExJQlRPT0xfQ1JVRlQ9JExJQlRPT0xfQ1JVRlQiIC1sU3lzdGVtIC1sU3lzdGVtU3R1YnMgLWFyY2hfb25seSAke01BQ09TWF9ERUZBVUxUX0FSQ0h9IgogICAgIExJQlRPT0xfQ1JVRlQ9JExJQlRPT0xfQ1JVRlQnIC1pbnN0YWxsX25hbWUgJChQWVRIT05GUkFNRVdPUktJTlNUQUxMRElSKS9WZXJzaW9ucy8kKFZFUlNJT04pLyQoUFlUSE9ORlJBTUVXT1JLKScKICAgICBMSUJUT09MX0NSVUZUPSRMSUJUT09MX0NSVUZUJyAtY29tcGF0aWJpbGl0eV92ZXJzaW9uICQoVkVSU0lPTikgLWN1cnJlbnRfdmVyc2lvbiAkKFZFUlNJT04pJzs7CiBlc2FjCi0KIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIC0tZW5hYmxlLWZyYW1ld29yayIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgLS1lbmFibGUtZnJhbWV3b3JrLi4uICIgPiY2OyB9CiBpZiB0ZXN0ICIkZW5hYmxlX2ZyYW1ld29yayIKQEAgLTg0ODEsMTUgKzg1NjksMTQgQEAKIAkJIyBVc2UgLXVuZGVmaW5lZCBkeW5hbWljX2xvb2t1cCB3aGVuZXZlciBwb3NzaWJsZSAoMTAuMyBhbmQgbGF0ZXIpLgogCQkjIFRoaXMgYWxsb3dzIGFuIGV4dGVuc2lvbiB0byBiZSB1c2VkIGluIGFueSBQeXRob24KIAotCQlpZiB0ZXN0ICR7TUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUfSAnPicgMTAuMgorCQlkZXBfdGFyZ2V0X21ham9yPWBlY2hvICR7TUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUfSB8IFwKKwkJCQlzZWQgJ3MvXChbMC05XSpcKVwuXChbMC05XSpcKS4qL1wxLydgCisJCWRlcF90YXJnZXRfbWlub3I9YGVjaG8gJHtNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVR9IHwgXAorCQkJCXNlZCAncy9cKFswLTldKlwpXC5cKFswLTldKlwpLiovXDIvJ2AKKwkJaWYgdGVzdCAke2RlcF90YXJnZXRfbWFqb3J9IC1lcSAxMCAmJiBcCisJCSAgIHRlc3QgJHtkZXBfdGFyZ2V0X21pbm9yfSAtbGUgMgogCQl0aGVuCi0JCQlpZiB0ZXN0ICIke2VuYWJsZV91bml2ZXJzYWxzZGt9IjsgdGhlbgotCQkJCUxERkxBR1M9IiR7VU5JVkVSU0FMX0FSQ0hfRkxBR1N9IC1pc3lzcm9vdCAke1VOSVZFUlNBTFNES30gJHtMREZMQUdTfSIKLQkJCWZpCi0JCQlMRFNIQVJFRD0nJChDQykgLWJ1bmRsZSAtdW5kZWZpbmVkIGR5bmFtaWNfbG9va3VwJwotCQkJTERDWFhTSEFSRUQ9JyQoQ1hYKSAtYnVuZGxlIC11bmRlZmluZWQgZHluYW1pY19sb29rdXAnCi0JCQlCTERTSEFSRUQ9IiRMRFNIQVJFRCIKLQkJZWxzZQorCQkJIyBidWlsZGluZyBmb3IgT1MgWCAxMC4wIHRocm91Z2ggMTAuMgogCQkJTERTSEFSRUQ9JyQoQ0MpIC1idW5kbGUnCiAJCQlMRENYWFNIQVJFRD0nJChDWFgpIC1idW5kbGUnCiAJCQlpZiB0ZXN0ICIkZW5hYmxlX2ZyYW1ld29yayIgOyB0aGVuCkBAIC04NTAzLDYgKzg1OTAsMTEgQEAKIAkJCQlMRFNIQVJFRD0iJExEU0hBUkVEICInLWJ1bmRsZV9sb2FkZXIgJChCSU5ESVIpL3B5dGhvbiQoVkVSU0lPTikkKEVYRSknCiAJCQkJTERDWFhTSEFSRUQ9IiRMRENYWFNIQVJFRCAiJy1idW5kbGVfbG9hZGVyICQoQklORElSKS9weXRob24kKFZFUlNJT04pJChFWEUpJwogCQkJZmkKKwkJZWxzZQorCQkJIyBidWlsZGluZyBmb3IgT1MgWCAxMC4zIGFuZCBsYXRlcgorCQkJTERTSEFSRUQ9JyQoQ0MpIC1idW5kbGUgLXVuZGVmaW5lZCBkeW5hbWljX2xvb2t1cCcKKwkJCUxEQ1hYU0hBUkVEPSckKENYWCkgLWJ1bmRsZSAtdW5kZWZpbmVkIGR5bmFtaWNfbG9va3VwJworCQkJQkxEU0hBUkVEPSIkTERTSEFSRUQiCiAJCWZpCiAJCTs7CiAJTGludXgqfEdOVSp8UU5YKikKQEAgLTg2MTMsNiArODcwNSwxMiBAQAogCSMgLXUgbGlic3lzX3MgcHVsbHMgaW4gYWxsIHN5bWJvbHMgaW4gbGlic3lzCiAJRGFyd2luLyopCiAJCUxJTktGT1JTSEFSRUQ9IiRleHRyYV91bmRlZnMgLWZyYW1ld29yayBDb3JlRm91bmRhdGlvbiIKKworCQkjIElzc3VlICMxODA3NTogdGhlIGRlZmF1bHQgbWF4aW11bSBzdGFjayBzaXplICg4TUJ5dGVzKSBpcyB0b28KKwkJIyBzbWFsbCBmb3IgdGhlIGRlZmF1bHQgcmVjdXJzaW9uIGxpbWl0LiBJbmNyZWFzZSB0aGUgc3RhY2sgc2l6ZQorCQkjIHRvIGVuc3VyZSB0aGF0IHRlc3RzIGRvbid0IGNyYXNoCisJCUxJTktGT1JTSEFSRUQ9Ii1XbCwtc3RhY2tfc2l6ZSwxMDAwMDAwICRMSU5LRk9SU0hBUkVEIgorCiAJCWlmIHRlc3QgIiRlbmFibGVfZnJhbWV3b3JrIgogCQl0aGVuCiAJCQlMSU5LRk9SU0hBUkVEPSIkTElOS0ZPUlNIQVJFRCAiJyQoUFlUSE9ORlJBTUVXT1JLRElSKS9WZXJzaW9ucy8kKFZFUlNJT04pLyQoUFlUSE9ORlJBTUVXT1JLKScKQEAgLTg4MjMsNiArODkyMSw0OCBAQAogCiBmaQogCSMgRHluYW1pYyBsaW5raW5nIGZvciBIUC1VWAoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgUkFORF9lZ2QgaW4gLWxjcnlwdG8iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIFJBTkRfZWdkIGluIC1sY3J5cHRvLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2xpYl9jcnlwdG9fUkFORF9lZ2QrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbGNyeXB0byAgJExJQlMiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgUkFORF9lZ2QgKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBSQU5EX2VnZCAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9saWJfY3J5cHRvX1JBTkRfZWdkPXllcworZWxzZQorICBhY19jdl9saWJfY3J5cHRvX1JBTkRfZWdkPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9jcnlwdG9fUkFORF9lZ2QiID4mNQorJGFzX2VjaG8gIiRhY19jdl9saWJfY3J5cHRvX1JBTkRfZWdkIiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfbGliX2NyeXB0b19SQU5EX2VnZCIgPSB4eWVzOyB0aGVuIDoKKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9SQU5EX0VHRCAxIiA+PmNvbmZkZWZzLmgKKworZmkKKwogCiAjIG9ubHkgY2hlY2sgZm9yIHNlbV9pbml0IGlmIHRocmVhZCBzdXBwb3J0IGlzIHJlcXVlc3RlZAogaWYgdGVzdCAiJHdpdGhfdGhyZWFkcyIgPSAieWVzIiAtbyAteiAiJHdpdGhfdGhyZWFkcyI7IHRoZW4KQEAgLTg5NjcsNiArOTEwNyw3OSBAQAogCSopIDs7CiBlc2FjCiAKKyMgY2hlY2sgZm9yIHN5c3RlbXMgdGhhdCByZXF1aXJlIGFsaWduZWQgbWVtb3J5IGFjY2VzcworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBhbGlnbmVkIG1lbW9yeSBhY2Nlc3MgaXMgcmVxdWlyZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgYWxpZ25lZCBtZW1vcnkgYWNjZXNzIGlzIHJlcXVpcmVkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CisgIGFsaWduZWRfcmVxdWlyZWQ9eWVzCitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50IG1haW4oKQoreworICAgIGNoYXIgc1sxNl07CisgICAgaW50IGksICpwMSwgKnAyOworICAgIGZvciAoaT0wOyBpIDwgMTY7IGkrKykKKyAgICAgICAgc1tpXSA9IGk7CisgICAgcDEgPSAoaW50KikocysxKTsKKyAgICBwMiA9IChpbnQqKShzKzIpOworICAgIGlmICgqcDEgPT0gKnAyKQorICAgICAgICByZXR1cm4gMTsKKyAgICByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWxpZ25lZF9yZXF1aXJlZD1ubworZWxzZQorICBhbGlnbmVkX3JlcXVpcmVkPXllcworZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKKyAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKKworaWYgdGVzdCAiJGFsaWduZWRfcmVxdWlyZWQiID0geWVzIDsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0FMSUdORURfUkVRVUlSRUQgMSIgPj5jb25mZGVmcy5oCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFsaWduZWRfcmVxdWlyZWQiID4mNQorJGFzX2VjaG8gIiRhbGlnbmVkX3JlcXVpcmVkIiA+JjY7IH0KKworCisjIHN0ciwgYnl0ZXMgYW5kIG1lbW9yeXZpZXcgaGFzaCBhbGdvcml0aG0KKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAtLXdpdGgtaGFzaC1hbGdvcml0aG0iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIC0td2l0aC1oYXNoLWFsZ29yaXRobS4uLiAiID4mNjsgfQorCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWhhc2hfYWxnb3JpdGhtIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9oYXNoX2FsZ29yaXRobStzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfaGFzaF9hbGdvcml0aG07Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHdpdGh2YWwiID4mNQorJGFzX2VjaG8gIiR3aXRodmFsIiA+JjY7IH0KK2Nhc2UgIiR3aXRodmFsIiBpbgorICAgIHNpcGhhc2gyNCkKKyAgICAgICAgJGFzX2VjaG8gIiNkZWZpbmUgUHlfSEFTSF9BTEdPUklUSE0gMSIgPj5jb25mZGVmcy5oCisKKyAgICAgICAgOzsKKyAgICBmbnYpCisgICAgICAgICRhc19lY2hvICIjZGVmaW5lIFB5X0hBU0hfQUxHT1JJVEhNIDIiID4+Y29uZmRlZnMuaAorCisgICAgICAgIDs7CisgICAgKikKKyAgICAgICAgYXNfZm5fZXJyb3IgJD8gInVua25vd24gaGFzaCBhbGdvcml0aG0gJyR3aXRodmFsJyIgIiRMSU5FTk8iIDUKKyAgICAgICAgOzsKK2VzYWMKKworZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogZGVmYXVsdCIgPiY1CiskYXNfZWNobyAiZGVmYXVsdCIgPiY2OyB9CitmaQorCisKICMgTW9zdCBTVlI0IHBsYXRmb3JtcyAoZS5nLiBTb2xhcmlzKSBuZWVkIC1sc29ja2V0IGFuZCAtbG5zbC4KIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHRfb3BlbiBpbiAtbG5zbCIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgdF9vcGVuIGluIC1sbnNsLi4uICIgPiY2OyB9CkBAIC05MDY1LDcgKzkyNzgsMTUgQEAKIGZpCiAKIAotaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorCisKKworCisKKworCitpZiB0ZXN0ICJ4JGFjX2N2X2Vudl9QS0dfQ09ORklHX3NldCIgIT0gInhzZXQiOyB0aGVuCisJaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgogICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9cGtnLWNvbmZpZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCiBzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1wa2ctY29uZmlnOyBhY193b3JkPSQyCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CkBAIC05MTYzLDYgKzkzODQsMjAgQEAKICAgUEtHX0NPTkZJRz0iJGFjX2N2X3BhdGhfUEtHX0NPTkZJRyIKIGZpCiAKK2ZpCitpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyI7IHRoZW4KKwlfcGtnX21pbl92ZXJzaW9uPTAuOS4wCisJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBwa2ctY29uZmlnIGlzIGF0IGxlYXN0IHZlcnNpb24gJF9wa2dfbWluX3ZlcnNpb24iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgcGtnLWNvbmZpZyBpcyBhdCBsZWFzdCB2ZXJzaW9uICRfcGtnX21pbl92ZXJzaW9uLi4uICIgPiY2OyB9CisJaWYgJFBLR19DT05GSUcgLS1hdGxlYXN0LXBrZ2NvbmZpZy12ZXJzaW9uICRfcGtnX21pbl92ZXJzaW9uOyB0aGVuCisJCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisJZWxzZQorCQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKwkJUEtHX0NPTkZJRz0iIgorCWZpCitmaQogCiAjIENoZWNrIGZvciB1c2Ugb2YgdGhlIHN5c3RlbSBleHBhdCBsaWJyYXJ5CiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAtLXdpdGgtc3lzdGVtLWV4cGF0IiA+JjUKQEAgLTEwMzA4LDkgKzEwNTQzLDkgQEAKIAogIyBjaGVja3MgZm9yIGxpYnJhcnkgZnVuY3Rpb25zCiBmb3IgYWNfZnVuYyBpbiBhbGFybSBhY2NlcHQ0IHNldGl0aW1lciBnZXRpdGltZXIgYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQgY2hvd24gXAotIGNsb2NrIGNvbmZzdHIgY3Rlcm1pZCBleGVjdiBmYWNjZXNzYXQgZmNobW9kIGZjaG1vZGF0IGZjaG93biBmY2hvd25hdCBcCisgY2xvY2sgY29uZnN0ciBjdGVybWlkIGR1cDMgZXhlY3YgZmFjY2Vzc2F0IGZjaG1vZCBmY2htb2RhdCBmY2hvd24gZmNob3duYXQgXAogIGZleGVjdmUgZmRvcGVuZGlyIGZvcmsgZnBhdGhjb25mIGZzdGF0YXQgZnRpbWUgZnRydW5jYXRlIGZ1dGltZXNhdCBcCi0gZnV0aW1lbnMgZnV0aW1lcyBnYWlfc3RyZXJyb3IgXAorIGZ1dGltZW5zIGZ1dGltZXMgZ2FpX3N0cmVycm9yIGdldGVudHJvcHkgXAogIGdldGdyb3VwbGlzdCBnZXRncm91cHMgZ2V0bG9naW4gZ2V0bG9hZGF2ZyBnZXRwZWVybmFtZSBnZXRwZ2lkIGdldHBpZCBcCiAgZ2V0cHJpb3JpdHkgZ2V0cmVzdWlkIGdldHJlc2dpZCBnZXRwd2VudCBnZXRzcG5hbSBnZXRzcGVudCBnZXRzaWQgZ2V0d2QgXAogIGlmX25hbWVpbmRleCBcCkBAIC0xMDMyOCw3ICsxMDU2Myw3IEBACiAgc2lndGltZWR3YWl0IHNpZ3dhaXQgc2lnd2FpdGluZm8gc25wcmludGYgc3RyZnRpbWUgc3RybGNweSBzeW1saW5rYXQgc3luYyBcCiAgc3lzY29uZiB0Y2dldHBncnAgdGNzZXRwZ3JwIHRlbXBuYW0gdGltZWdtIHRpbWVzIHRtcGZpbGUgdG1wbmFtIHRtcG5hbV9yIFwKICB0cnVuY2F0ZSB1bmFtZSB1bmxpbmthdCB1bnNldGVudiB1dGltZW5zYXQgdXRpbWVzIHdhaXRpZCB3YWl0cGlkIHdhaXQzIHdhaXQ0IFwKLSB3Y3Njb2xsIHdjc2Z0aW1lIHdjc3hmcm0gd3JpdGV2IF9nZXRwdHkKKyB3Y3Njb2xsIHdjc2Z0aW1lIHdjc3hmcm0gd21lbWNtcCB3cml0ZXYgX2dldHB0eQogZG8gOgogICBhc19hY192YXI9YCRhc19lY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKIGFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgIiRhY19mdW5jIiAiJGFzX2FjX3ZhciIKQEAgLTEwNTgxLDYgKzEwODE2LDM1IEBACiAKIGZpCiBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHBybGltaXQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHBybGltaXQuLi4gIiA+JjY7IH0KK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8c3lzL3Jlc291cmNlLmg+CisKK2ludAorbWFpbiAoKQorewordm9pZCAqeD1wcmxpbWl0CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9QUkxJTUlUIDEiID4+Y29uZmRlZnMuaAorCisgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCiAjIE9uIHNvbWUgc3lzdGVtcyAoZWcuIEZyZWVCU0QgNSksIHdlIHdvdWxkIGZpbmQgYSBkZWZpbml0aW9uIG9mIHRoZQogIyBmdW5jdGlvbnMgY3Rlcm1pZF9yLCBzZXRncm91cHMgaW4gdGhlIGxpYnJhcnksIGJ1dCBubyBwcm90b3R5cGUKICMgKGUuZy4gYmVjYXVzZSB3ZSB1c2UgX1hPUEVOX1NPVVJDRSkuIFNlZSB3aGV0aGVyIHdlIGNhbiB0YWtlIHRoZWlyCkBAIC0xMTQxMiwxOSArMTE2NzYsNiBAQAogCiBmaQogCi1hY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJnZXRjd2QiICJhY19jdl9mdW5jX2dldGN3ZCIKLWlmIHRlc3QgIngkYWNfY3ZfZnVuY19nZXRjd2QiID0geHllczsgdGhlbiA6Ci0gICRhc19lY2hvICIjZGVmaW5lIEhBVkVfR0VUQ1dEIDEiID4+Y29uZmRlZnMuaAotCi1lbHNlCi0gIGNhc2UgIiAkTElCT0JKUyAiIGluCi0gICoiIGdldGN3ZC4kYWNfb2JqZXh0ICIqICkgOzsKLSAgKikgTElCT0JKUz0iJExJQk9CSlMgZ2V0Y3dkLiRhY19vYmpleHQiCi0gOzsKLWVzYWMKLQotZmkKLQogYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAic3RyZHVwIiAiYWNfY3ZfZnVuY19zdHJkdXAiCiBpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfc3RyZHVwIiA9IHh5ZXM7IHRoZW4gOgogICAkYXNfZWNobyAiI2RlZmluZSBIQVZFX1NUUkRVUCAxIiA+PmNvbmZkZWZzLmgKQEAgLTEzNzc4LDYgKzE0MDI5LDEwIEBACiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJExEVkVSU0lPTiIgPiY1CiAkYXNfZWNobyAiJExEVkVSU0lPTiIgPiY2OyB9CiAKKworTElCUEw9JyQocHJlZml4KSciL2xpYi9weXRob24ke1ZFUlNJT059L2NvbmZpZy0ke0xEVkVSU0lPTn0iCisKKwogIyBDaGVjayB3aGV0aGVyIHJpZ2h0IHNoaWZ0aW5nIGEgbmVnYXRpdmUgaW50ZWdlciBleHRlbmRzIHRoZSBzaWduIGJpdAogIyBvciBmaWxscyB3aXRoIHplcm9zIChsaWtlIHRoZSBDcmF5IEo5MCwgYWNjb3JkaW5nIHRvIFRpbSBQZXRlcnMpLgogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHJpZ2h0IHNoaWZ0IGV4dGVuZHMgdGhlIHNpZ24gYml0IiA+JjUKQEAgLTE0NDk5LDggKzE0NzU0LDQzIEBACiAKIGZpCiAKKyMgZmlyc3QgY3Vyc2VzIGhlYWRlciBjaGVjawogYWNfc2F2ZV9jcHBmbGFncz0iJENQUEZMQUdTIgogQ1BQRkxBR1M9IiRDUFBGTEFHUyAtSS91c3IvaW5jbHVkZS9uY3Vyc2VzdyIKKworZm9yIGFjX2hlYWRlciBpbiBjdXJzZXMuaCBuY3Vyc2VzLmgKK2RvIDoKKyAgYXNfYWNfSGVhZGVyPWAkYXNfZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgIiRhY19oZWFkZXIiICIkYXNfYWNfSGVhZGVyIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX0hlYWRlciJcIiA9IHgieWVzIjsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworCisjIE9uIFNvbGFyaXMsIHRlcm0uaCByZXF1aXJlcyBjdXJzZXMuaAorZm9yIGFjX2hlYWRlciBpbiB0ZXJtLmgKK2RvIDoKKyAgYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZSAiJExJTkVOTyIgInRlcm0uaCIgImFjX2N2X2hlYWRlcl90ZXJtX2giICIKKyNpZmRlZiBIQVZFX0NVUlNFU19ICisjaW5jbHVkZSA8Y3Vyc2VzLmg+CisjZW5kaWYKKworIgoraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfdGVybV9oIiA9IHh5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfVEVSTV9IIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKKwogIyBPbiBIUC9VWCAxMS4wLCBtdndkZWxjaCBpcyBhIGJsb2NrIHdpdGggYSByZXR1cm4gc3RhdGVtZW50CiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgbXZ3ZGVsY2ggaXMgYW4gZXhwcmVzc2lvbiIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIG12d2RlbGNoIGlzIGFuIGV4cHJlc3Npb24uLi4gIiA+JjY7IH0KQEAgLTE1MTg1LDggKzE1NDc1LDMzIEBACiAgICAgZXNhYwogZmkKIAorIyBlbnN1cmVwaXAgb3B0aW9uCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBlbnN1cmVwaXAiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGVuc3VyZXBpcC4uLiAiID4mNjsgfQorCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWVuc3VyZXBpcCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfZW5zdXJlcGlwK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9lbnN1cmVwaXA7CitlbHNlCisgIHdpdGhfZW5zdXJlcGlwPXVwZ3JhZGUKK2ZpCisKK2Nhc2UgJHdpdGhfZW5zdXJlcGlwIGluICMoCisgIHllc3x1cGdyYWRlKSA6CisgICAgRU5TVVJFUElQPXVwZ3JhZGUgOzsgIygKKyAgaW5zdGFsbCkgOgorICAgIEVOU1VSRVBJUD1pbnN0YWxsIDs7ICMoCisgIG5vKSA6CisgICAgRU5TVVJFUElQPW5vIDs7ICMoCisgICopIDoKKyAgICBhc19mbl9lcnJvciAkPyAiLS13aXRoLWVuc3VyZXBpcD11cGdyYWRlfGluc3RhbGx8bm8iICIkTElORU5PIiA1IDs7Citlc2FjCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJEVOU1VSRVBJUCIgPiY1CiskYXNfZWNobyAiJEVOU1VSRVBJUCIgPiY2OyB9CisKKwogIyBnZW5lcmF0ZSBvdXRwdXQgZmlsZXMKLWFjX2NvbmZpZ19maWxlcz0iJGFjX2NvbmZpZ19maWxlcyBNYWtlZmlsZS5wcmUgTW9kdWxlcy9TZXR1cC5jb25maWcgTWlzYy9weXRob24ucGMiCithY19jb25maWdfZmlsZXM9IiRhY19jb25maWdfZmlsZXMgTWFrZWZpbGUucHJlIE1vZHVsZXMvU2V0dXAuY29uZmlnIE1pc2MvcHl0aG9uLnBjIE1pc2MvcHl0aG9uLWNvbmZpZy5zaCIKIAogYWNfY29uZmlnX2ZpbGVzPSIkYWNfY29uZmlnX2ZpbGVzIE1vZHVsZXMvbGRfc29fYWl4IgogCkBAIC0xNTY5Nyw3ICsxNjAxMiw3IEBACiAjIHJlcG9ydCBhY3R1YWwgaW5wdXQgdmFsdWVzIG9mIENPTkZJR19GSUxFUyBldGMuIGluc3RlYWQgb2YgdGhlaXIKICMgdmFsdWVzIGFmdGVyIG9wdGlvbnMgaGFuZGxpbmcuCiBhY19sb2c9IgotVGhpcyBmaWxlIHdhcyBleHRlbmRlZCBieSBweXRob24gJGFzX21lIDMuMywgd2hpY2ggd2FzCitUaGlzIGZpbGUgd2FzIGV4dGVuZGVkIGJ5IHB5dGhvbiAkYXNfbWUgMy40LCB3aGljaCB3YXMKIGdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42OS4gIEludm9jYXRpb24gY29tbWFuZCBsaW5lIHdhcwogCiAgIENPTkZJR19GSUxFUyAgICA9ICRDT05GSUdfRklMRVMKQEAgLTE1NzU5LDcgKzE2MDc0LDcgQEAKIGNhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQogYWNfY3NfY29uZmlnPSJgJGFzX2VjaG8gIiRhY19jb25maWd1cmVfYXJncyIgfCBzZWQgJ3MvXiAvLzsgcy9bXFwiIlxgXCRdL1xcXFwmL2cnYCIKIGFjX2NzX3ZlcnNpb249IlxcCi1weXRob24gY29uZmlnLnN0YXR1cyAzLjMKK3B5dGhvbiBjb25maWcuc3RhdHVzIDMuNAogY29uZmlndXJlZCBieSAkMCwgZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjY5LAogICB3aXRoIG9wdGlvbnMgXFwiXCRhY19jc19jb25maWdcXCIKIApAQCAtMTU4OTAsNiArMTYyMDUsNyBAQAogICAgICJNYWtlZmlsZS5wcmUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgTWFrZWZpbGUucHJlIiA7OwogICAgICJNb2R1bGVzL1NldHVwLmNvbmZpZyIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBNb2R1bGVzL1NldHVwLmNvbmZpZyIgOzsKICAgICAiTWlzYy9weXRob24ucGMiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgTWlzYy9weXRob24ucGMiIDs7CisgICAgIk1pc2MvcHl0aG9uLWNvbmZpZy5zaCIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBNaXNjL3B5dGhvbi1jb25maWcuc2giIDs7CiAgICAgIk1vZHVsZXMvbGRfc29fYWl4IikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIE1vZHVsZXMvbGRfc29fYWl4IiA7OwogCiAgICopIGFzX2ZuX2Vycm9yICQ/ICJpbnZhbGlkIGFyZ3VtZW50OiBcYCRhY19jb25maWdfdGFyZ2V0JyIgIiRMSU5FTk8iIDU7OwpkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCmluZGV4IDBlNjdmMDMuLjMzOTRkODQgMTAwNjQ0Ci0tLSBhL2NvbmZpZ3VyZS5hYworKysgYi9jb25maWd1cmUuYWMKQEAgLTMsNyArMyw3IEBACiBkbmwgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogIyBTZXQgVkVSU0lPTiBzbyB3ZSBvbmx5IG5lZWQgdG8gZWRpdCBpbiBvbmUgcGxhY2UgKGkuZS4sIGhlcmUpCi1tNF9kZWZpbmUoUFlUSE9OX1ZFUlNJT04sIDMuMykKK200X2RlZmluZShQWVRIT05fVkVSU0lPTiwgMy40KQogCiBBQ19QUkVSRVEoMi42NSkKIApAQCAtNTMsNiArNTMsOSBAQAogQUNfU1VCU1QoYnVpbGQpCiBBQ19TVUJTVChob3N0KQogCisjIHB5YnVpbGRkaXIudHh0IHdpbGwgYmUgY3JlYXRlZCBieSAtLWdlbmVyYXRlLXBvc2l4LXZhcnMgaW4gdGhlIE1ha2VmaWxlCitybSAtZiBweWJ1aWxkZGlyLnR4dAorCiBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgogICAgIEFDX01TR19DSEVDS0lORyhbZm9yIHB5dGhvbiBpbnRlcnByZXRlciBmb3IgY3Jvc3MgYnVpbGRdKQogICAgIGlmIHRlc3QgLXogIiRQWVRIT05fRk9SX0JVSUxEIjsgdGhlbgpAQCAtMTUyLDcgKzE1NSw3IEBACiAJCSMgTG9jYXRlIHRoZSBiZXN0IHVzYWJsZSBTREssIHNlZSBNYWMvUkVBRE1FLnR4dCBmb3IgbW9yZQogCQkjIGluZm9ybWF0aW9uCiAJCWVuYWJsZXZhbD0iYC91c3IvYmluL3hjb2RlYnVpbGQgLXZlcnNpb24gLXNkayBtYWNvc3ggUGF0aCAyPi9kZXYvbnVsbGAiCi0JCWlmIHRlc3QgLXogIiR7ZW5hYmxldmFsfSIKKwkJaWYgISAoIGVjaG8gJGVuYWJsZXZhbCB8IGdyZXAgLUUgJ1wuc2RrJyAxPi9kZXYvbnVsbCApCiAJCXRoZW4KIAkJCWVuYWJsZXZhbD0vRGV2ZWxvcGVyL1NES3MvTWFjT1NYMTAuNHUuc2RrCiAJCQlpZiB0ZXN0ICEgLWQgIiR7ZW5hYmxldmFsfSIKQEAgLTE4OSw2ICsxOTIsNyBAQAogQUNfU1VCU1QoVU5JVkVSU0FMU0RLKQogCiBBQ19TVUJTVChBUkNIX1JVTl8zMkJJVCkKK0FSQ0hfUlVOXzMyQklUPSIiCiAKICMgRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgcmVhc29ucyB3ZSBwcmVmZXIgdG8gc2VsZWN0ICczMi1iaXQnIGlmIGF2YWlsYWJsZSwKICMgb3RoZXJ3aXNlIHVzZSAnaW50ZWwnCkBAIC0xOTcsNyArMjAxLDcgQEAKIHRoZW4KIAlpZiB0ZXN0IC1uICIke1VOSVZFUlNBTFNES30iCiAJdGhlbgotCQlpZiB0ZXN0IC16ICJgL3Vzci9iaW4vZmlsZSAiJHtVTklWRVJTQUxTREt9L3Vzci9saWIvbGliU3lzdGVtLmR5bGliIiB8IGdyZXAgcHBjYCIKKwkJaWYgdGVzdCAteiAiYC91c3IvYmluL2ZpbGUgLUwgIiR7VU5JVkVSU0FMU0RLfS91c3IvbGliL2xpYlN5c3RlbS5keWxpYiIgfCBncmVwIHBwY2AiCiAJCXRoZW4KIAkJCVVOSVZFUlNBTF9BUkNIUz0iaW50ZWwiCiAJCWZpCkBAIC0yMDcsMTYgKzIxMSwxNyBAQAogQUNfU1VCU1QoTElQT18zMkJJVF9GTEFHUykKIEFDX01TR19DSEVDS0lORyhmb3IgLS13aXRoLXVuaXZlcnNhbC1hcmNocykKIEFDX0FSR19XSVRIKHVuaXZlcnNhbC1hcmNocywKLSAgICBBU19IRUxQX1NUUklORyhbLS13aXRoLXVuaXZlcnNhbC1hcmNocz1BUkNIXSwgW3NlbGVjdCBhcmNoaXRlY3R1cmVzIGZvciB1bml2ZXJzYWwgYnVpbGQgKCIzMi1iaXQiLCAiNjQtYml0IiwgIjMtd2F5IiwgImludGVsIiBvciAiYWxsIildKSwKKyAgICBBU19IRUxQX1NUUklORyhbLS13aXRoLXVuaXZlcnNhbC1hcmNocz1BUkNIXSwgW3NlbGVjdCBhcmNoaXRlY3R1cmVzIGZvciB1bml2ZXJzYWwgYnVpbGQgKCIzMi1iaXQiLCAiNjQtYml0IiwgIjMtd2F5IiwgImludGVsIiwgImludGVsLTMyIiwgb3IgImFsbCIpXSksCiBbCi0JQUNfTVNHX1JFU1VMVCgkd2l0aHZhbCkKIAlVTklWRVJTQUxfQVJDSFM9IiR3aXRodmFsIgogXSwKLVsKLSAJQUNfTVNHX1JFU1VMVCgke1VOSVZFUlNBTF9BUkNIU30pCi1dKQotCi0KK1tdKQoraWYgdGVzdCAtbiAiJHtVTklWRVJTQUxTREt9IgordGhlbgorCUFDX01TR19SRVNVTFQoJHtVTklWRVJTQUxfQVJDSFN9KQorZWxzZQorCUFDX01TR19SRVNVTFQobm8pCitmaQogCiBBQ19BUkdfV0lUSChmcmFtZXdvcmstbmFtZSwKICAgICAgICAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1mcmFtZXdvcmstbmFtZT1GUkFNRVdPUktdLApAQCAtMjQ4LDYgKzI1Myw3IEBACiAJCUZSQU1FV09SS0lOU1RBTExMQVNUPQogCQlGUkFNRVdPUktBTFRJTlNUQUxMRklSU1Q9CiAJCUZSQU1FV09SS0FMVElOU1RBTExMQVNUPQorCQlGUkFNRVdPUktQWVRIT05XPQogCQlpZiB0ZXN0ICJ4JHtwcmVmaXh9IiA9ICJ4Tk9ORSI7IHRoZW4KIAkJCUZSQU1FV09SS1VOSVhUT09MU1BSRUZJWD0iJHthY19kZWZhdWx0X3ByZWZpeH0iCiAJCWVsc2UKQEAgLTI2Miw2ICsyNjgsNyBAQAogCQlGUkFNRVdPUktBTFRJTlNUQUxMRklSU1Q9ImZyYW1ld29ya2luc3RhbGxzdHJ1Y3R1cmUgIgogCQlGUkFNRVdPUktJTlNUQUxMTEFTVD0iZnJhbWV3b3JraW5zdGFsbG1hY2xpYiBmcmFtZXdvcmtpbnN0YWxsYXBwcyBmcmFtZXdvcmtpbnN0YWxsdW5peHRvb2xzIgogCQlGUkFNRVdPUktBTFRJTlNUQUxMTEFTVD0iZnJhbWV3b3JraW5zdGFsbG1hY2xpYiBmcmFtZXdvcmtpbnN0YWxsYXBwcyBmcmFtZXdvcmthbHRpbnN0YWxsdW5peHRvb2xzIgorCQlGUkFNRVdPUktQWVRIT05XPSJmcmFtZXdvcmtweXRob253IgogCQlGUkFNRVdPUktJTlNUQUxMQVBQU1BSRUZJWD0iL0FwcGxpY2F0aW9ucyIKIAogCQlpZiB0ZXN0ICJ4JHtwcmVmaXh9IiA9ICJ4Tk9ORSIgOyB0aGVuCkBAIC0zMjMsNiArMzMwLDcgQEAKIAlGUkFNRVdPUktJTlNUQUxMTEFTVD0KIAlGUkFNRVdPUktBTFRJTlNUQUxMRklSU1Q9CiAJRlJBTUVXT1JLQUxUSU5TVEFMTExBU1Q9CisJRlJBTUVXT1JLUFlUSE9OVz0KIAlpZiB0ZXN0ICJ4JHtwcmVmaXh9IiA9ICJ4Tk9ORSIgOyB0aGVuCiAJCUZSQU1FV09SS1VOSVhUT09MU1BSRUZJWD0iJHthY19kZWZhdWx0X3ByZWZpeH0iCiAJZWxzZQpAQCAtMzQwLDYgKzM0OCw3IEBACiBBQ19TVUJTVChGUkFNRVdPUktJTlNUQUxMTEFTVCkKIEFDX1NVQlNUKEZSQU1FV09SS0FMVElOU1RBTExGSVJTVCkKIEFDX1NVQlNUKEZSQU1FV09SS0FMVElOU1RBTExMQVNUKQorQUNfU1VCU1QoRlJBTUVXT1JLUFlUSE9OVykKIEFDX1NVQlNUKEZSQU1FV09SS1VOSVhUT09MU1BSRUZJWCkKIEFDX1NVQlNUKEZSQU1FV09SS0lOU1RBTExBUFBTUFJFRklYKQogCkBAIC01MTYsNiArNTI1LDE5IEBACiAgIEFDX0RFRklORShfUE9TSVhfQ19TT1VSQ0UsIDIwMDgwOUwsIERlZmluZSB0byBhY3RpdmF0ZSBmZWF0dXJlcyBmcm9tIElFRUUgU3RkcyAxMDAzLjEtMjAwOCkKIGZpCiAKKyMgT24gSFAtVVggbWJzdGF0ZV90IHJlcXVpcmVzIF9JTkNMVURFX19TVERDX0ExX1NPVVJDRQorY2FzZSAkYWNfc3lzX3N5c3RlbSBpbgorICBocCp8SFAqKQorICAgIGRlZmluZV9zdGRjX2ExPXllczs7CisgICopCisgICAgZGVmaW5lX3N0ZGNfYTE9bm87OworZXNhYworCitpZiB0ZXN0ICRkZWZpbmVfc3RkY19hMSA9IHllcwordGhlbgorICBBQ19ERUZJTkUoX0lOQ0xVREVfX1NURENfQTFfU09VUkNFLCAxLCBEZWZpbmUgdG8gaW5jbHVkZSBtYnN0YXRlX3QgZm9yIG1icnRvd2MpCitmaQorCiAjCiAjIFNHSSBjb21waWxlcnMgYWxsb3cgdGhlIHNwZWNpZmljYXRpb24gb2YgdGhlIGJvdGggdGhlIEFCSSBhbmQgdGhlCiAjIElTQSBvbiB0aGUgY29tbWFuZCBsaW5lLiAgRGVwZW5kaW5nIG9uIHRoZSB2YWx1ZXMgb2YgdGhlc2Ugc3dpdGNoZXMsCkBAIC01MzQsNiArNTU2LDkgQEAKIGZpCiBBQ19NU0dfUkVTVUxUKCRNQUNIREVQKQogCitBQ19TVUJTVChQTEFURElSKQorUExBVERJUj1wbGF0LSRNQUNIREVQCisKICMgUmVjb3JkIHRoZSBjb25maWd1cmUtdGltZSB2YWx1ZSBvZiBNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQsCiAjIGl0IG1heSBpbmZsdWVuY2UgdGhlIHdheSB3ZSBjYW4gYnVpbGQgZXh0ZW5zaW9ucywgc28gZGlzdHV0aWxzCiAjIG5lZWRzIHRvIGNoZWNrIGl0CkBAIC02OTEsNyArNzE2LDcgQEAKIGZpCiBpZiB0ZXN0ICIkcHJlc2V0X2N4eCIgIT0gIiRDWFgiCiB0aGVuCi0gICAgICAgIEFDX01TR19XQVJOKFsKKyAgICAgICAgQUNfTVNHX05PVElDRShbCiAKICAgQnkgZGVmYXVsdCwgZGlzdHV0aWxzIHdpbGwgYnVpbGQgQysrIGV4dGVuc2lvbiBtb2R1bGVzIHdpdGggIiRDWFgiLgogICBJZiB0aGlzIGlzIG5vdCBpbnRlbmRlZCwgdGhlbiBzZXQgQ1hYIG9uIHRoZSBjb25maWd1cmUgY29tbWFuZCBsaW5lLgpAQCAtOTE3LDYgKzk0Miw3IEBACiAKICMgT3RoZXIgcGxhdGZvcm1zIGZvbGxvdwogaWYgdGVzdCAkZW5hYmxlX3NoYXJlZCA9ICJ5ZXMiOyB0aGVuCisgIFBZX0VOQUJMRV9TSEFSRUQ9MQogICBBQ19ERUZJTkUoUHlfRU5BQkxFX1NIQVJFRCwgMSwgW0RlZmluZWQgaWYgUHl0aG9uIGlzIGJ1aWx0IGFzIGEgc2hhcmVkIGxpYnJhcnkuXSkKICAgY2FzZSAkYWNfc3lzX3N5c3RlbSBpbgogICAgIENZR1dJTiopCkBAIC05NjMsNyArOTg5LDcgQEAKICAgICBEYXJ3aW4qKQogICAgIAlMRExJQlJBUlk9J2xpYnB5dGhvbiQoTERWRVJTSU9OKS5keWxpYicKIAlCTERMSUJSQVJZPSctTC4gLWxweXRob24kKExEVkVSU0lPTiknCi0JUlVOU0hBUkVEPSdEWUxEX0xJQlJBUllfUEFUSD1gcHdkYCR7RFlMRF9MSUJSQVJZX1BBVEg6Kzoke0RZTERfTElCUkFSWV9QQVRIfX0nCisJUlVOU0hBUkVEPURZTERfTElCUkFSWV9QQVRIPWBwd2RgJHtEWUxEX0xJQlJBUllfUEFUSDorOiR7RFlMRF9MSUJSQVJZX1BBVEh9fQogCTs7CiAgICAgQUlYKikKIAlMRExJQlJBUlk9J2xpYnB5dGhvbiQoTERWRVJTSU9OKS5zbycKQEAgLTk3Miw2ICs5OTgsNyBAQAogCiAgIGVzYWMKIGVsc2UgIyBzaGFyZWQgaXMgZGlzYWJsZWQKKyAgUFlfRU5BQkxFX1NIQVJFRD0wCiAgIGNhc2UgJGFjX3N5c19zeXN0ZW0gaW4KICAgICBDWUdXSU4qKQogICAgICAgICAgIEJMRExJQlJBUlk9JyQoTElCUkFSWSknCkBAIC0xMDk1LDcgKzExMjIsMTEgQEAKIAkgICAgaWYgdGVzdCAiJFB5X0RFQlVHIiA9ICd0cnVlJyA7IHRoZW4KIAkJIyBPcHRpbWl6YXRpb24gbWVzc2VzIHVwIGRlYnVnZ2Vycywgc28gdHVybiBpdCBvZmYgZm9yCiAJCSMgZGVidWcgYnVpbGRzLgotCQlPUFQ9Ii1nIC1PMCAtV2FsbCAkU1RSSUNUX1BST1RPIgorICAgICAgICAgICAgICAgIGlmICIkQ0MiIC12IC0taGVscCAyPi9kZXYvbnVsbCB8Z3JlcCAtLSAtT2cgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgT1BUPSItZyAtT2cgLVdhbGwgJFNUUklDVF9QUk9UTyIKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIE9QVD0iLWcgLU8wIC1XYWxsICRTVFJJQ1RfUFJPVE8iCisgICAgICAgICAgICAgICAgZmkKIAkgICAgZWxzZQogCQlPUFQ9Ii1nICRXUkFQIC1PMyAtV2FsbCAkU1RSSUNUX1BST1RPIgogCSAgICBmaQpAQCAtMTExNyw2ICsxMTQ4LDcgQEAKIGZpCiAKIEFDX1NVQlNUKEJBU0VDRkxBR1MpCitBQ19TVUJTVChDRkxBR1NfTk9ESVNUKQogCiAjIFRoZSAtYXJjaCBmbGFncyBmb3IgdW5pdmVyc2FsIGJ1aWxkcyBvbiBPU1gKIFVOSVZFUlNBTF9BUkNIX0ZMQUdTPQpAQCAtMTE4Miw2ICsxMjE0LDI4IEBACiAgICAgICBCQVNFQ0ZMQUdTPSIkQkFTRUNGTEFHUyAtV25vLXVudXNlZC1yZXN1bHQiCiAgICAgZmkKIAorICAgIEFDX01TR19DSEVDS0lORyhmb3IgLVdlcnJvcj1kZWNsYXJhdGlvbi1hZnRlci1zdGF0ZW1lbnQpCisgICAgIGFjX3NhdmVfY2M9IiRDQyIKKyAgICAgQ0M9IiRDQyAtV2Vycm9yPWRlY2xhcmF0aW9uLWFmdGVyLXN0YXRlbWVudCIKKyAgICAgc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisgICAgIEFDX0NBQ0hFX1ZBTChhY19jdl9kZWNsYXJhdGlvbl9hZnRlcl9zdGF0ZW1lbnRfd2FybmluZywKKyAgICAgICBBQ19DT01QSUxFX0lGRUxTRSgKKyAgICAgICAgIFsKKwkgICBBQ19MQU5HX1BST0dSQU0oW1tdXSwgW1tdXSkKKwkgXSxbCisgICAgICAgICAgIGFjX2N2X2RlY2xhcmF0aW9uX2FmdGVyX3N0YXRlbWVudF93YXJuaW5nPXllcworCSBdLFsKKyAgICAgICAgICAgYWNfY3ZfZGVjbGFyYXRpb25fYWZ0ZXJfc3RhdGVtZW50X3dhcm5pbmc9bm8KKwkgXSkpCisgICAgIENGTEFHUz0iJHNhdmVfQ0ZMQUdTIgorICAgICBDQz0iJGFjX3NhdmVfY2MiCisgICAgQUNfTVNHX1JFU1VMVCgkYWNfY3ZfZGVjbGFyYXRpb25fYWZ0ZXJfc3RhdGVtZW50X3dhcm5pbmcpCisKKyAgICBpZiB0ZXN0ICRhY19jdl9kZWNsYXJhdGlvbl9hZnRlcl9zdGF0ZW1lbnRfd2FybmluZyA9IHllcworICAgIHRoZW4KKyAgICAgIENGTEFHU19OT0RJU1Q9IiRDRkxBR1NfTk9ESVNUIC1XZXJyb3I9ZGVjbGFyYXRpb24tYWZ0ZXItc3RhdGVtZW50IgorICAgIGZpCisKICAgICAjIGlmIHVzaW5nIGdjYyBvbiBhbHBoYSwgdXNlIC1taWVlZSB0byBnZXQgKG5lYXIpIGZ1bGwgSUVFRSA3NTQKICAgICAjIHN1cHBvcnQuICBXaXRob3V0IHRoaXMsIHRyZWF0bWVudCBvZiBzdWJub3JtYWxzIGRvZXNuJ3QgZm9sbG93CiAgICAgIyB0aGUgc3RhbmRhcmQuCkBAIC0xMTk1LDExMSArMTI0OSwxMjYgQEAKIAlTQ09fU1YqKQogCSAgICBCQVNFQ0ZMQUdTPSIkQkFTRUNGTEFHUyAtbTQ4NiAtRFNDTzUiCiAJICAgIDs7Ci0JIyBpcyB0aGVyZSBhbnkgb3RoZXIgY29tcGlsZXIgb24gRGFyd2luIGJlc2lkZXMgZ2NjPwotCURhcndpbiopCi0JICAgICMgLVduby1sb25nLWRvdWJsZSwgLW5vLWNwcC1wcmVjb21wLCBhbmQgLW1uby1mdXNlZC1tYWRkCi0JICAgICMgdXNlZCB0byBiZSBoZXJlLCBidXQgbm9uLUFwcGxlIGdjYyBkb2Vzbid0IGFjY2VwdCB0aGVtLgotICAgICAgICAgICAgaWYgdGVzdCAiJHtDQ30iID0gZ2NjCi0JICAgIHRoZW4KLQkJQUNfTVNHX0NIRUNLSU5HKHdoaWNoIGNvbXBpbGVyIHNob3VsZCBiZSB1c2VkKQotCQljYXNlICIke1VOSVZFUlNBTFNES30iIGluCi0JCSovTWFjT1NYMTAuNHUuc2RrKQotCQkJIyBCdWlsZCB1c2luZyAxMC40IFNESywgZm9yY2UgdXNhZ2Ugb2YgZ2NjIHdoZW4gdGhlIAotCQkJIyBjb21waWxlciBpcyBnY2MsIG90aGVyd2lzZSB0aGUgdXNlciB3aWxsIGdldCB2ZXJ5Ci0JCQkjIGNvbmZ1c2luZyBlcnJvciBtZXNzYWdlcyB3aGVuIGJ1aWxkaW5nIG9uIE9TWCAxMC42Ci0JCQlDQz1nY2MtNC4wCi0JCQlDUFA9Y3BwLTQuMAotCQkJOzsKLQkJZXNhYwotCQlBQ19NU0dfUkVTVUxUKCRDQykKLQkgICAgZmkKIAorICAgICMgaXMgdGhlcmUgYW55IG90aGVyIGNvbXBpbGVyIG9uIERhcndpbiBiZXNpZGVzIGdjYz8KKyAgICBEYXJ3aW4qKQorICAgICAgICAjIC1Xbm8tbG9uZy1kb3VibGUsIC1uby1jcHAtcHJlY29tcCwgYW5kIC1tbm8tZnVzZWQtbWFkZAorICAgICAgICAjIHVzZWQgdG8gYmUgaGVyZSwgYnV0IG5vbi1BcHBsZSBnY2MgZG9lc24ndCBhY2NlcHQgdGhlbS4KKyAgICAgICAgaWYgdGVzdCAiJHtDQ30iID0gZ2NjCisgICAgICAgIHRoZW4KKyAgICAgICAgICAgIEFDX01TR19DSEVDS0lORyh3aGljaCBjb21waWxlciBzaG91bGQgYmUgdXNlZCkKKyAgICAgICAgICAgIGNhc2UgIiR7VU5JVkVSU0FMU0RLfSIgaW4KKyAgICAgICAgICAgICovTWFjT1NYMTAuNHUuc2RrKQorICAgICAgICAgICAgICAgICMgQnVpbGQgdXNpbmcgMTAuNCBTREssIGZvcmNlIHVzYWdlIG9mIGdjYyB3aGVuIHRoZQorICAgICAgICAgICAgICAgICMgY29tcGlsZXIgaXMgZ2NjLCBvdGhlcndpc2UgdGhlIHVzZXIgd2lsbCBnZXQgdmVyeQorICAgICAgICAgICAgICAgICMgY29uZnVzaW5nIGVycm9yIG1lc3NhZ2VzIHdoZW4gYnVpbGRpbmcgb24gT1NYIDEwLjYKKyAgICAgICAgICAgICAgICBDQz1nY2MtNC4wCisgICAgICAgICAgICAgICAgQ1BQPWNwcC00LjAKKyAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgQUNfTVNHX1JFU1VMVCgkQ0MpCisgICAgICAgIGZpCiAKLQkgICAgaWYgdGVzdCAiJHtlbmFibGVfdW5pdmVyc2Fsc2RrfSI7IHRoZW4KLQkJVU5JVkVSU0FMX0FSQ0hfRkxBR1M9IiIKLQkgICAgICAgIGlmIHRlc3QgIiRVTklWRVJTQUxfQVJDSFMiID0gIjMyLWJpdCIgOyB0aGVuCi0JCSAgIFVOSVZFUlNBTF9BUkNIX0ZMQUdTPSItYXJjaCBwcGMgLWFyY2ggaTM4NiIKLQkJICAgQVJDSF9SVU5fMzJCSVQ9IiIKLQkJICAgTElQT18zMkJJVF9GTEFHUz0iIgotCSAgICAgICAgIGVsaWYgdGVzdCAiJFVOSVZFUlNBTF9BUkNIUyIgPSAiNjQtYml0IiA7IHRoZW4KLQkJICAgVU5JVkVSU0FMX0FSQ0hfRkxBR1M9Ii1hcmNoIHBwYzY0IC1hcmNoIHg4Nl82NCIKLQkJICAgTElQT18zMkJJVF9GTEFHUz0iIgotCQkgICBBUkNIX1JVTl8zMkJJVD0idHJ1ZSIKKyAgICAgICAgaWYgdGVzdCAiJHtlbmFibGVfdW5pdmVyc2Fsc2RrfSIKKyAgICAgICAgdGhlbgorICAgICAgICAgICAgY2FzZSAiJFVOSVZFUlNBTF9BUkNIUyIgaW4KKyAgICAgICAgICAgIDMyLWJpdCkKKyAgICAgICAgICAgICAgIFVOSVZFUlNBTF9BUkNIX0ZMQUdTPSItYXJjaCBwcGMgLWFyY2ggaTM4NiIKKyAgICAgICAgICAgICAgIExJUE9fMzJCSVRfRkxBR1M9IiIKKyAgICAgICAgICAgICAgIEFSQ0hfUlVOXzMyQklUPSIiCisgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgNjQtYml0KQorICAgICAgICAgICAgICAgVU5JVkVSU0FMX0FSQ0hfRkxBR1M9Ii1hcmNoIHBwYzY0IC1hcmNoIHg4Nl82NCIKKyAgICAgICAgICAgICAgIExJUE9fMzJCSVRfRkxBR1M9IiIKKyAgICAgICAgICAgICAgIEFSQ0hfUlVOXzMyQklUPSJ0cnVlIgorICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgIGFsbCkKKyAgICAgICAgICAgICAgIFVOSVZFUlNBTF9BUkNIX0ZMQUdTPSItYXJjaCBpMzg2IC1hcmNoIHBwYyAtYXJjaCBwcGM2NCAtYXJjaCB4ODZfNjQiCisgICAgICAgICAgICAgICBMSVBPXzMyQklUX0ZMQUdTPSItZXh0cmFjdCBwcGM3NDAwIC1leHRyYWN0IGkzODYiCisgICAgICAgICAgICAgICBBUkNIX1JVTl8zMkJJVD0iL3Vzci9iaW4vYXJjaCAtaTM4NiAtcHBjIgorICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgIGludGVsKQorICAgICAgICAgICAgICAgVU5JVkVSU0FMX0FSQ0hfRkxBR1M9Ii1hcmNoIGkzODYgLWFyY2ggeDg2XzY0IgorICAgICAgICAgICAgICAgTElQT18zMkJJVF9GTEFHUz0iLWV4dHJhY3QgaTM4NiIKKyAgICAgICAgICAgICAgIEFSQ0hfUlVOXzMyQklUPSIvdXNyL2Jpbi9hcmNoIC1pMzg2IgorICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgIGludGVsLTMyKQorICAgICAgICAgICAgICAgVU5JVkVSU0FMX0FSQ0hfRkxBR1M9Ii1hcmNoIGkzODYiCisgICAgICAgICAgICAgICBMSVBPXzMyQklUX0ZMQUdTPSIiCisgICAgICAgICAgICAgICBBUkNIX1JVTl8zMkJJVD0iIgorICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgIDMtd2F5KQorICAgICAgICAgICAgICAgVU5JVkVSU0FMX0FSQ0hfRkxBR1M9Ii1hcmNoIGkzODYgLWFyY2ggcHBjIC1hcmNoIHg4Nl82NCIKKyAgICAgICAgICAgICAgIExJUE9fMzJCSVRfRkxBR1M9Ii1leHRyYWN0IHBwYzc0MDAgLWV4dHJhY3QgaTM4NiIKKyAgICAgICAgICAgICAgIEFSQ0hfUlVOXzMyQklUPSIvdXNyL2Jpbi9hcmNoIC1pMzg2IC1wcGMiCisgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgKikKKyAgICAgICAgICAgICAgIEFDX01TR19FUlJPUihbcHJvcGVyIHVzYWdlIGlzIC0td2l0aC11bml2ZXJzYWwtYXJjaD0zMi1iaXR8NjQtYml0fGFsbHxpbnRlbHwzLXdheV0pCisgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgZXNhYwogCi0JICAgICAgICAgZWxpZiB0ZXN0ICIkVU5JVkVSU0FMX0FSQ0hTIiA9ICJhbGwiIDsgdGhlbgotCQkgICBVTklWRVJTQUxfQVJDSF9GTEFHUz0iLWFyY2ggaTM4NiAtYXJjaCBwcGMgLWFyY2ggcHBjNjQgLWFyY2ggeDg2XzY0IgotCQkgICBMSVBPXzMyQklUX0ZMQUdTPSItZXh0cmFjdCBwcGM3NDAwIC1leHRyYWN0IGkzODYiCi0JCSAgIEFSQ0hfUlVOXzMyQklUPSIvdXNyL2Jpbi9hcmNoIC1pMzg2IC1wcGMiCisgICAgICAgICAgICBDRkxBR1M9IiR7VU5JVkVSU0FMX0FSQ0hfRkxBR1N9IC1pc3lzcm9vdCAke1VOSVZFUlNBTFNES30gJHtDRkxBR1N9IgorICAgICAgICAgICAgTERGTEFHUz0iJHtVTklWRVJTQUxfQVJDSF9GTEFHU30gLWlzeXNyb290ICR7VU5JVkVSU0FMU0RLfSAke0xERkxBR1N9IgorICAgICAgICAgICAgaWYgdGVzdCAiJHtVTklWRVJTQUxTREt9IiAhPSAiLyIKKyAgICAgICAgICAgIHRoZW4KKyAgICAgICAgICAgICAgICBDUFBGTEFHUz0iLWlzeXNyb290ICR7VU5JVkVSU0FMU0RLfSAke0NQUEZMQUdTfSIKKyAgICAgICAgICAgIGZpCisgICAgICAgIGZpCiAKLQkgICAgICAgICBlbGlmIHRlc3QgIiRVTklWRVJTQUxfQVJDSFMiID0gImludGVsIiA7IHRoZW4KLQkJICAgVU5JVkVSU0FMX0FSQ0hfRkxBR1M9Ii1hcmNoIGkzODYgLWFyY2ggeDg2XzY0IgotCQkgICBMSVBPXzMyQklUX0ZMQUdTPSItZXh0cmFjdCBpMzg2IgotCQkgICBBUkNIX1JVTl8zMkJJVD0iL3Vzci9iaW4vYXJjaCAtaTM4NiIKKyAgICAgICAgIyBDYWxjdWxhdGUgYW4gYXBwcm9wcmlhdGUgZGVwbG95bWVudCB0YXJnZXQgZm9yIHRoaXMgYnVpbGQ6CisgICAgICAgICMgVGhlIGRlcGxveW1lbnQgdGFyZ2V0IHZhbHVlIGlzIHVzZWQgZXhwbGljaXRseSB0byBlbmFibGUgY2VydGFpbgorICAgICAgICAjIGZlYXR1cmVzIGFyZSBlbmFibGVkIChzdWNoIGFzIGJ1aWx0aW4gbGliZWRpdCBzdXBwb3J0IGZvciByZWFkbGluZSkKKyAgICAgICAgIyB0aHJvdWdoIHRoZSB1c2Ugb2YgQXBwbGUncyBBdmFpbGFiaWxpeSBNYWNyb3MgYW5kIGlzIHVzZWQgYXMgYQorICAgICAgICAjIGNvbXBvbmVudCBvZiB0aGUgc3RyaW5nIHJldHVybmVkIGJ5IGRpc3R1dGlscy5nZXRfcGxhdGZvcm0oKS4KKyAgICAgICAgIworICAgICAgICAjIFVzZSB0aGUgdmFsdWUgZnJvbToKKyAgICAgICAgIyAxLiB0aGUgTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUIGVudmlyb25tZW50IHZhcmlhYmxlIGlmIHNwZWNpZmllZAorICAgICAgICAjIDIuIHRoZSBvcGVyYXRpbmcgc3lzdGVtIHZlcnNpb24gb2YgdGhlIGJ1aWxkIG1hY2hpbmUgaWYgPj0gMTAuNgorICAgICAgICAjIDMuIElmIHJ1bm5pbmcgb24gT1MgWCAxMC4zIHRocm91Z2ggMTAuNSwgdXNlIHRoZSBsZWdhY3kgdGVzdHMKKyAgICAgICAgIyAgICAgICBiZWxvdyB0byBwaWNrIGVpdGhlciAxMC4zLCAxMC40LCBvciAxMC41IGFzIHRoZSB0YXJnZXQuCisgICAgICAgICMgNC4gSWYgd2UgYXJlIHJ1bm5pbmcgb24gT1MgWCAxMC4yIG9yIGVhcmxpZXIsIGdvb2QgbHVjayEKIAotCSAgICAgICAgIGVsaWYgdGVzdCAiJFVOSVZFUlNBTF9BUkNIUyIgPSAiMy13YXkiIDsgdGhlbgotCQkgICBVTklWRVJTQUxfQVJDSF9GTEFHUz0iLWFyY2ggaTM4NiAtYXJjaCBwcGMgLWFyY2ggeDg2XzY0IgotCQkgICBMSVBPXzMyQklUX0ZMQUdTPSItZXh0cmFjdCBwcGM3NDAwIC1leHRyYWN0IGkzODYiCi0JCSAgIEFSQ0hfUlVOXzMyQklUPSIvdXNyL2Jpbi9hcmNoIC1pMzg2IC1wcGMiCisgICAgICAgIEFDX01TR19DSEVDS0lORyh3aGljaCBNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQgdG8gdXNlKQorICAgICAgICBjdXJfdGFyZ2V0X21ham9yPWBzd192ZXJzIC1wcm9kdWN0VmVyc2lvbiB8IFwKKyAgICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkuKi9cMS8nYAorICAgICAgICBjdXJfdGFyZ2V0X21pbm9yPWBzd192ZXJzIC1wcm9kdWN0VmVyc2lvbiB8IFwKKyAgICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkuKi9cMi8nYAorICAgICAgICBjdXJfdGFyZ2V0PSIke2N1cl90YXJnZXRfbWFqb3J9LiR7Y3VyX3RhcmdldF9taW5vcn0iCisgICAgICAgIGlmIHRlc3QgJHtjdXJfdGFyZ2V0X21ham9yfSAtZXEgMTAgJiYgXAorICAgICAgICAgICB0ZXN0ICR7Y3VyX3RhcmdldF9taW5vcn0gLWdlIDMgJiYgXAorICAgICAgICAgICB0ZXN0ICR7Y3VyX3RhcmdldF9taW5vcn0gLWxlIDUKKyAgICAgICAgdGhlbgorICAgICAgICAgICAgIyBPUyBYIDEwLjMgdGhyb3VnaCAxMC41CisgICAgICAgICAgICBjdXJfdGFyZ2V0PTEwLjMKKyAgICAgICAgICAgIGlmIHRlc3QgJHtlbmFibGVfdW5pdmVyc2Fsc2RrfQorICAgICAgICAgICAgdGhlbgorICAgICAgICAgICAgICAgIGNhc2UgIiRVTklWRVJTQUxfQVJDSFMiIGluCisgICAgICAgICAgICAgICAgYWxsfDMtd2F5fGludGVsfDY0LWJpdCkKKyAgICAgICAgICAgICAgICAgICAgIyBUaGVzZSBjb25maWd1cmF0aW9ucyB3ZXJlIGZpcnN0IHN1cHBvcnRlZCBpbiAxMC41CisgICAgICAgICAgICAgICAgICAgIGN1cl90YXJnZXQ9JzEwLjUnCisgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGlmIHRlc3QgYC91c3IvYmluL2FyY2hgID0gImkzODYiCisgICAgICAgICAgICAgICAgdGhlbgorICAgICAgICAgICAgICAgICAgICAjIDEwLjQgd2FzIHRoZSBmaXJzdCByZWxlYXNlIHRvIHN1cHBvcnQgSW50ZWwgYXJjaHMKKyAgICAgICAgICAgICAgICAgICAgY3VyX3RhcmdldD0iMTAuNCIKKyAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgZmkKKyAgICAgICAgZmkKKyAgICAgICAgQ09ORklHVVJFX01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVD0ke01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVC0ke2N1cl90YXJnZXR9fQogCi0JCSBlbHNlCi0JICAgICAgICAgICBBQ19NU0dfRVJST1IoW3Byb3BlciB1c2FnZSBpcyAtLXdpdGgtdW5pdmVyc2FsLWFyY2g9MzItYml0fDY0LWJpdHxhbGx8aW50ZWx8My13YXldKQorICAgICAgICAjIE1ha2Ugc3VyZSB0aGF0IE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCBpcyBzZXQgaW4gdGhlCisgICAgICAgICMgZW52aXJvbm1lbnQgd2l0aCBhIHZhbHVlIHRoYXQgaXMgdGhlIHNhbWUgYXMgd2hhdCB3ZSdsbCB1c2UKKyAgICAgICAgIyBpbiB0aGUgTWFrZWZpbGUgdG8gZW5zdXJlIHRoYXQgd2UnbGwgZ2V0IHRoZSBzYW1lIGNvbXBpbGVyCisgICAgICAgICMgZW52aXJvbm1lbnQgZHVyaW5nIGNvbmZpZ3VyZSBhbmQgYnVpbGQgdGltZS4KKyAgICAgICAgTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUPSIkQ09ORklHVVJFX01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCIKKyAgICAgICAgZXhwb3J0IE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVAorICAgICAgICBFWFBPUlRfTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUPScnCisgICAgICAgIEFDX01TR19SRVNVTFQoJE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCkKIAotCQkgZmkKLQotCi0JCUNGTEFHUz0iJHtVTklWRVJTQUxfQVJDSF9GTEFHU30gLWlzeXNyb290ICR7VU5JVkVSU0FMU0RLfSAke0NGTEFHU30iCi0JCWlmIHRlc3QgIiR7VU5JVkVSU0FMU0RLfSIgIT0gIi8iCi0JCXRoZW4KLQkJCUNGTEFHUz0iLWlzeXNyb290ICR7VU5JVkVSU0FMU0RLfSAke0NGTEFHU30iCi0JCQlMREZMQUdTPSItaXN5c3Jvb3QgJHtVTklWRVJTQUxTREt9ICR7TERGTEFHU30iCi0JCQlDUFBGTEFHUz0iLWlzeXNyb290ICR7VU5JVkVSU0FMU0RLfSAke0NQUEZMQUdTfSIKLQkJZmkKLQkgICAgZmkKLQotCSAgICAjIENhbGN1bGF0ZSB0aGUgcmlnaHQgZGVwbG95bWVudCB0YXJnZXQgZm9yIHRoaXMgYnVpbGQuCi0JICAgICMKLQkgICAgY3VyX3RhcmdldD1gc3dfdmVycyAtcHJvZHVjdFZlcnNpb24gfCBzZWQgJ3MvXCgxMFwuW1swLTldXSpcKS4qL1wxLydgCi0JICAgIGlmIHRlc3QgJHtjdXJfdGFyZ2V0fSAnPicgMTAuMiAmJiBcCi0JICAgICAgIHRlc3QgJHtjdXJfdGFyZ2V0fSAnPCcgMTAuNgotCSAgICB0aGVuCi0JCSAgICBjdXJfdGFyZ2V0PTEwLjMKLQkJICAgIGlmIHRlc3QgJHtlbmFibGVfdW5pdmVyc2Fsc2RrfTsgdGhlbgotCQkJICAgIGlmIHRlc3QgIiR7VU5JVkVSU0FMX0FSQ0hTfSIgPSAiYWxsIjsgdGhlbgotCQkJCSAgICAjIEVuc3VyZSB0aGF0IHRoZSBkZWZhdWx0IHBsYXRmb3JtIGZvciBhIAotCQkJCSAgICAjIDQtd2F5IHVuaXZlcnNhbCBidWlsZCBpcyBPU1ggMTAuNSwgCi0JCQkJICAgICMgdGhhdCdzIHRoZSBmaXJzdCBPUyByZWxlYXNlIHdoZXJlIAotCQkJCSAgICAjIDQtd2F5IGJ1aWxkcyBtYWtlIHNlbnNlLgotCQkJCSAgICBjdXJfdGFyZ2V0PScxMC41JwotCi0JCQkgICAgZWxpZiB0ZXN0ICIke1VOSVZFUlNBTF9BUkNIU30iID0gIjMtd2F5IjsgdGhlbgotCQkJCSAgICBjdXJfdGFyZ2V0PScxMC41JwotCi0JCQkgICAgZWxpZiB0ZXN0ICIke1VOSVZFUlNBTF9BUkNIU30iID0gImludGVsIjsgdGhlbgotCQkJCSAgICBjdXJfdGFyZ2V0PScxMC41JwotCi0JCQkgICAgZWxpZiB0ZXN0ICIke1VOSVZFUlNBTF9BUkNIU30iID0gIjY0LWJpdCI7IHRoZW4KLQkJCQkgICAgY3VyX3RhcmdldD0nMTAuNScKLQkJCSAgICBmaQotCQkgICAgZWxzZQotCQkJICAgIGlmIHRlc3QgYC91c3IvYmluL2FyY2hgID0gImkzODYiOyB0aGVuCi0JCQkJICAgICMgT24gSW50ZWwgbWFjcyBkZWZhdWx0IHRvIGEgZGVwbG95bWVudAotCQkJCSAgICAjIHRhcmdldCBvZiAxMC40LCB0aGF0J3MgdGhlIGZpcnN0IE9TWAotCQkJCSAgICAjIHJlbGVhc2Ugd2l0aCBJbnRlbCBzdXBwb3J0LgotCQkJCSAgICBjdXJfdGFyZ2V0PSIxMC40IgotCQkJICAgIGZpCi0JCSAgICBmaQotCSAgICBmaQotCSAgICBDT05GSUdVUkVfTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUPSR7TUFDT1NYX0RFUExPWU1FTlRfVEFSR0VULSR7Y3VyX3RhcmdldH19Ci0JICAgIAotCSAgICAjIE1ha2Ugc3VyZSB0aGF0IE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCBpcyBzZXQgaW4gdGhlIAotCSAgICAjIGVudmlyb25tZW50IHdpdGggYSB2YWx1ZSB0aGF0IGlzIHRoZSBzYW1lIGFzIHdoYXQgd2UnbGwgdXNlCi0JICAgICMgaW4gdGhlIE1ha2VmaWxlIHRvIGVuc3VyZSB0aGF0IHdlJ2xsIGdldCB0aGUgc2FtZSBjb21waWxlcgotCSAgICAjIGVudmlyb25tZW50IGR1cmluZyBjb25maWd1cmUgYW5kIGJ1aWxkIHRpbWUuCi0JICAgIE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVD0iJENPTkZJR1VSRV9NQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQiCi0JICAgIGV4cG9ydCBNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQKLQkgICAgRVhQT1JUX01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVD0nJwotCi0JICAgIDs7CisgICAgICAgICMgZW5kIG9mIERhcndpbiogdGVzdHMKKyAgICAgICAgOzsKICAgICBlc2FjCiAgICAgOzsKIApAQCAtMTMyNiwyNCArMTM5NSw2IEBACiAJQkFTRUNGTEFHUz0iJEJBU0VDRkxBR1MgJGFjX2FyY2hfZmxhZ3MiCiBmaQogCi0jIENoZWNrIHdoZXRoZXIgR0NDIHN1cHBvcnRzIFB5QXJnX1BhcnNlVHVwbGUgZm9ybWF0Ci1pZiB0ZXN0ICIkR0NDIiA9ICJ5ZXMiCi10aGVuCi0gIEFDX01TR19DSEVDS0lORyh3aGV0aGVyIGdjYyBzdXBwb3J0cyBQYXJzZVR1cGxlIF9fZm9ybWF0X18pCi0gIHNhdmVfQ0ZMQUdTPSRDRkxBR1MKLSAgQ0ZMQUdTPSIkQ0ZMQUdTIC1XZXJyb3IgLVdmb3JtYXQiCi0gIEFDX0NPTVBJTEVfSUZFTFNFKFsKLSAgICBBQ19MQU5HX1BST0dSQU0oW1t2b2lkIGYoY2hhciosLi4uKV9fYXR0cmlidXRlKChmb3JtYXQoUHlBcmdfUGFyc2VUdXBsZSwgMSwgMikpKTtdXSwgW1tdXSkKLSAgXSxbCi0gICAgQUNfREVGSU5FKEhBVkVfQVRUUklCVVRFX0ZPUk1BVF9QQVJTRVRVUExFLCAxLAotICAgICAgW0RlZmluZSBpZiBHQ0Mgc3VwcG9ydHMgX19hdHRyaWJ1dGVfXygoZm9ybWF0KFB5QXJnX1BhcnNlVHVwbGUsIDIsIDMpKSldKQotICAgIEFDX01TR19SRVNVTFQoeWVzKQotICBdLFsKLSAgICBBQ19NU0dfUkVTVUxUKG5vKQotICBdKQotICBDRkxBR1M9JHNhdmVfQ0ZMQUdTCi1maQotCiAjIE9uIHNvbWUgY29tcGlsZXJzLCBwdGhyZWFkcyBhcmUgYXZhaWxhYmxlIHdpdGhvdXQgZnVydGhlciBvcHRpb25zCiAjIChlLmcuIE1hY09TIFgpLiBPbiBzb21lIG9mIHRoZXNlIHN5c3RlbXMsIHRoZSBjb21waWxlciB3aWxsIG5vdAogIyBjb21wbGFpbiBpZiB1bmFjY2VwdGVkIG9wdGlvbnMgYXJlIHBhc3NlZCAoZS5nLiBnY2Mgb24gTWFjIE9TIFgpLgpAQCAtMTUxMiwxMSArMTU2Myw5IEBACiAKICMgY2hlY2tzIGZvciBoZWFkZXIgZmlsZXMKIEFDX0hFQURFUl9TVERDCi1hY19zYXZlX2NwcGZsYWdzPSIkQ1BQRkxBR1MiCi1DUFBGTEFHUz0iJENQUEZMQUdTIC1JL3Vzci9pbmNsdWRlL25jdXJzZXN3IgotQUNfQ0hFQ0tfSEVBREVSUyhhc20vdHlwZXMuaCBjb25pby5oIGN1cnNlcy5oIGRpcmVjdC5oIGRsZmNuLmggZXJybm8uaCBcCitBQ19DSEVDS19IRUFERVJTKGFzbS90eXBlcy5oIGNvbmlvLmggZGlyZWN0LmggZGxmY24uaCBlcnJuby5oIFwKIGZjbnRsLmggZ3JwLmggXAotaWVlZWZwLmggaW8uaCBsYW5naW5mby5oIGxpYmludGwuaCBuY3Vyc2VzLmggcHJvY2Vzcy5oIHB0aHJlYWQuaCBcCitpZWVlZnAuaCBpby5oIGxhbmdpbmZvLmggbGliaW50bC5oIHByb2Nlc3MuaCBwdGhyZWFkLmggXAogc2NoZWQuaCBzaGFkb3cuaCBzaWduYWwuaCBzdGRpbnQuaCBzdHJvcHRzLmggdGVybWlvcy5oIFwKIHVuaXN0ZC5oIHV0aW1lLmggXAogcG9sbC5oIHN5cy9kZXZwb2xsLmggc3lzL2Vwb2xsLmggc3lzL3BvbGwuaCBcCkBAIC0xNTI2LDggKzE1NzUsOCBAQAogc3lzL3N0YXQuaCBzeXMvc3lzY2FsbC5oIHN5cy9zeXNfZG9tYWluLmggc3lzL3Rlcm1pby5oIHN5cy90aW1lLmggXAogc3lzL3RpbWVzLmggc3lzL3R5cGVzLmggc3lzL3Vpby5oIHN5cy91bi5oIHN5cy91dHNuYW1lLmggc3lzL3dhaXQuaCBwdHkuaCBcCiBsaWJ1dGlsLmggc3lzL3Jlc291cmNlLmggbmV0cGFja2V0L3BhY2tldC5oIHN5c2V4aXRzLmggYmx1ZXRvb3RoLmggXAotYmx1ZXRvb3RoL2JsdWV0b290aC5oIGxpbnV4L3RpcGMuaCBzcGF3bi5oIHV0aWwuaCBhbGxvY2EuaCkKLUNQUEZMQUdTPSRhY19zYXZlX2NwcGZsYWdzCitibHVldG9vdGgvYmx1ZXRvb3RoLmggbGludXgvdGlwYy5oIHNwYXduLmggdXRpbC5oIGFsbG9jYS5oIGVuZGlhbi5oIFwKK3N5cy9lbmRpYW4uaCkKIEFDX0hFQURFUl9ESVJFTlQKIEFDX0hFQURFUl9NQUpPUgogCkBAIC0xNTQ3LDE0ICsxNTk2LDYgQEAKICNlbmRpZgogXSkKIAotCi0jIE9uIFNvbGFyaXMsIHRlcm0uaCByZXF1aXJlcyBjdXJzZXMuaAotQUNfQ0hFQ0tfSEVBREVSUyh0ZXJtLmgsLCxbCi0jaWZkZWYgSEFWRV9DVVJTRVNfSAotI2luY2x1ZGUgPGN1cnNlcy5oPgotI2VuZGlmCi1dKQotCiAjIE9uIExpbnV4LCBuZXRsaW5rLmggcmVxdWlyZXMgYXNtL3R5cGVzLmgKIEFDX0NIRUNLX0hFQURFUlMobGludXgvbmV0bGluay5oLCwsWwogI2lmZGVmIEhBVkVfQVNNX1RZUEVTX0gKQEAgLTE1NjYsNyArMTYwNyw3IEBACiBdKQogCiAjIE9uIExpbnV4LCBjYW4uaCBhbmQgY2FuL3Jhdy5oIHJlcXVpcmUgc3lzL3NvY2tldC5oCi1BQ19DSEVDS19IRUFERVJTKGxpbnV4L2Nhbi5oIGxpbnV4L2Nhbi9yYXcuaCwsLFsKK0FDX0NIRUNLX0hFQURFUlMobGludXgvY2FuLmggbGludXgvY2FuL3Jhdy5oIGxpbnV4L2Nhbi9iY20uaCwsLFsKICNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAogI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KICNlbmRpZgpAQCAtMTU5Nyw2ICsxNjM4LDIyIEBACiAgICAgQUNfREVGSU5FKEhBVkVfTUFLRURFViwgMSwgW0RlZmluZSB0aGlzIGlmIHlvdSBoYXZlIHRoZSBtYWtlZGV2IG1hY3JvLl0pCiBmaQogCisjIGJ5dGUgc3dhcHBpbmcKK0FDX01TR19DSEVDS0lORyhmb3IgbGU2NHRvaCkKK0FDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sKKyNpZmRlZiBIQVZFX0VORElBTl9ICisjaW5jbHVkZSA8ZW5kaWFuLmg+CisjZWxpZiBkZWZpbmVkKEhBVkVfU1lTX0VORElBTl9IKQorI2luY2x1ZGUgPHN5cy9lbmRpYW4uaD4KKyNlbmRpZgorXV0sIFtbCisgICBsZTY0dG9oKDEpIF1dKQorXSxbYWNfY3ZfaGFzX2xlNjR0b2g9eWVzXSxbYWNfY3ZfaGFzX2xlNjR0b2g9bm9dKQorQUNfTVNHX1JFU1VMVCgkYWNfY3ZfaGFzX2xlNjR0b2gpCitpZiB0ZXN0ICIkYWNfY3ZfaGFzX2xlNjR0b2giID0gInllcyI7IHRoZW4KKyAgICBBQ19ERUZJTkUoSEFWRV9IVE9MRTY0LCAxLCBbRGVmaW5lIHRoaXMgaWYgeW91IGhhdmUgbGU2NHRvaCgpXSkKK2ZpCisKICMgRW5hYmxpbmcgTEZTIG9uIFNvbGFyaXMgKDIuNiB0byA5KSB3aXRoIGdjYyAyLjk1IHRyaWdnZXJzIGEgYnVnIGluCiAjIHRoZSBzeXN0ZW0gaGVhZGVyczogSWYgX1hPUEVOX1NPVVJDRSBhbmQgX0xBUkdFRklMRV9TT1VSQ0UgYXJlCiAjIGRlZmluZWQsIGJ1dCB0aGUgY29tcGlsZXIgZG9lcyBub3Qgc3VwcG9ydCBwcmFnbWEgcmVkZWZpbmVfZXh0bmFtZSwKQEAgLTE3OTgsNyArMTg1NSw2IEBACiBlc2FjCiAKIAotQVJDSF9SVU5fMzJCSVQ9IiIKIEFDX1NVQlNUKExJQlRPT0xfQ1JVRlQpCiBjYXNlICRhY19zeXNfc3lzdGVtLyRhY19zeXNfcmVsZWFzZSBpbgogICBEYXJ3aW4vQDw6QDAxNTY3QDo+QFwuLiopIApAQCAtMTg1NSwxNCArMTkxMSwxMiBAQAogICAgIAkJOzsKICAgICAJZXNhYwogCi0JI0FSQ0hfUlVOXzMyQklUPSJ0cnVlIgogICAgIGZpCiAKICAgICBMSUJUT09MX0NSVUZUPSRMSUJUT09MX0NSVUZUIiAtbFN5c3RlbSAtbFN5c3RlbVN0dWJzIC1hcmNoX29ubHkgJHtNQUNPU1hfREVGQVVMVF9BUkNIfSIKICAgICBMSUJUT09MX0NSVUZUPSRMSUJUT09MX0NSVUZUJyAtaW5zdGFsbF9uYW1lICQoUFlUSE9ORlJBTUVXT1JLSU5TVEFMTERJUikvVmVyc2lvbnMvJChWRVJTSU9OKS8kKFBZVEhPTkZSQU1FV09SSyknCiAgICAgTElCVE9PTF9DUlVGVD0kTElCVE9PTF9DUlVGVCcgLWNvbXBhdGliaWxpdHlfdmVyc2lvbiAkKFZFUlNJT04pIC1jdXJyZW50X3ZlcnNpb24gJChWRVJTSU9OKSc7OwogZXNhYwotCiBBQ19NU0dfQ0hFQ0tJTkcoZm9yIC0tZW5hYmxlLWZyYW1ld29yaykKIGlmIHRlc3QgIiRlbmFibGVfZnJhbWV3b3JrIgogdGhlbgpAQCAtMTk4MCwxNSArMjAzNCwxNCBAQAogCQkjIFVzZSAtdW5kZWZpbmVkIGR5bmFtaWNfbG9va3VwIHdoZW5ldmVyIHBvc3NpYmxlICgxMC4zIGFuZCBsYXRlcikuCiAJCSMgVGhpcyBhbGxvd3MgYW4gZXh0ZW5zaW9uIHRvIGJlIHVzZWQgaW4gYW55IFB5dGhvbgogCi0JCWlmIHRlc3QgJHtNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVR9ICc+JyAxMC4yCisJCWRlcF90YXJnZXRfbWFqb3I9YGVjaG8gJHtNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVR9IHwgXAorCQkJCXNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS4qL1wxLydgCisJCWRlcF90YXJnZXRfbWlub3I9YGVjaG8gJHtNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVR9IHwgXAorCQkJCXNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS4qL1wyLydgCisJCWlmIHRlc3QgJHtkZXBfdGFyZ2V0X21ham9yfSAtZXEgMTAgJiYgXAorCQkgICB0ZXN0ICR7ZGVwX3RhcmdldF9taW5vcn0gLWxlIDIKIAkJdGhlbgotCQkJaWYgdGVzdCAiJHtlbmFibGVfdW5pdmVyc2Fsc2RrfSI7IHRoZW4KLQkJCQlMREZMQUdTPSIke1VOSVZFUlNBTF9BUkNIX0ZMQUdTfSAtaXN5c3Jvb3QgJHtVTklWRVJTQUxTREt9ICR7TERGTEFHU30iCi0JCQlmaQotCQkJTERTSEFSRUQ9JyQoQ0MpIC1idW5kbGUgLXVuZGVmaW5lZCBkeW5hbWljX2xvb2t1cCcKLQkJCUxEQ1hYU0hBUkVEPSckKENYWCkgLWJ1bmRsZSAtdW5kZWZpbmVkIGR5bmFtaWNfbG9va3VwJwotCQkJQkxEU0hBUkVEPSIkTERTSEFSRUQiCi0JCWVsc2UKKwkJCSMgYnVpbGRpbmcgZm9yIE9TIFggMTAuMCB0aHJvdWdoIDEwLjIKIAkJCUxEU0hBUkVEPSckKENDKSAtYnVuZGxlJwogCQkJTERDWFhTSEFSRUQ9JyQoQ1hYKSAtYnVuZGxlJwogCQkJaWYgdGVzdCAiJGVuYWJsZV9mcmFtZXdvcmsiIDsgdGhlbgpAQCAtMjAwMiw2ICsyMDU1LDExIEBACiAJCQkJTERTSEFSRUQ9IiRMRFNIQVJFRCAiJy1idW5kbGVfbG9hZGVyICQoQklORElSKS9weXRob24kKFZFUlNJT04pJChFWEUpJwogCQkJCUxEQ1hYU0hBUkVEPSIkTERDWFhTSEFSRUQgIictYnVuZGxlX2xvYWRlciAkKEJJTkRJUikvcHl0aG9uJChWRVJTSU9OKSQoRVhFKScKIAkJCWZpCisJCWVsc2UKKwkJCSMgYnVpbGRpbmcgZm9yIE9TIFggMTAuMyBhbmQgbGF0ZXIKKwkJCUxEU0hBUkVEPSckKENDKSAtYnVuZGxlIC11bmRlZmluZWQgZHluYW1pY19sb29rdXAnCisJCQlMRENYWFNIQVJFRD0nJChDWFgpIC1idW5kbGUgLXVuZGVmaW5lZCBkeW5hbWljX2xvb2t1cCcKKwkJCUJMRFNIQVJFRD0iJExEU0hBUkVEIgogCQlmaQogCQk7OwogCUxpbnV4KnxHTlUqfFFOWCopCkBAIC0yMTA4LDYgKzIxNjYsMTIgQEAKIAkjIC11IGxpYnN5c19zIHB1bGxzIGluIGFsbCBzeW1ib2xzIGluIGxpYnN5cwogCURhcndpbi8qKSAKIAkJTElOS0ZPUlNIQVJFRD0iJGV4dHJhX3VuZGVmcyAtZnJhbWV3b3JrIENvcmVGb3VuZGF0aW9uIgorCisJCSMgSXNzdWUgIzE4MDc1OiB0aGUgZGVmYXVsdCBtYXhpbXVtIHN0YWNrIHNpemUgKDhNQnl0ZXMpIGlzIHRvbworCQkjIHNtYWxsIGZvciB0aGUgZGVmYXVsdCByZWN1cnNpb24gbGltaXQuIEluY3JlYXNlIHRoZSBzdGFjayBzaXplCisJCSMgdG8gZW5zdXJlIHRoYXQgdGVzdHMgZG9uJ3QgY3Jhc2gKKwkJTElOS0ZPUlNIQVJFRD0iLVdsLC1zdGFja19zaXplLDEwMDAwMDAgJExJTktGT1JTSEFSRUQiCisKIAkJaWYgdGVzdCAiJGVuYWJsZV9mcmFtZXdvcmsiCiAJCXRoZW4KIAkJCUxJTktGT1JTSEFSRUQ9IiRMSU5LRk9SU0hBUkVEICInJChQWVRIT05GUkFNRVdPUktESVIpL1ZlcnNpb25zLyQoVkVSU0lPTikvJChQWVRIT05GUkFNRVdPUkspJwpAQCAtMjE4MSw2ICsyMjQ1LDkgQEAKIEFDX0NIRUNLX0xJQihzZW5kZmlsZSwgc2VuZGZpbGUpCiBBQ19DSEVDS19MSUIoZGwsIGRsb3BlbikJIyBEeW5hbWljIGxpbmtpbmcgZm9yIFN1bk9TL1NvbGFyaXMgYW5kIFNZU1YKIEFDX0NIRUNLX0xJQihkbGQsIHNobF9sb2FkKQkjIER5bmFtaWMgbGlua2luZyBmb3IgSFAtVVgKK0FDX0NIRUNLX0xJQihjcnlwdG8sIFJBTkRfZWdkLAorICAgICAgICAgICAgIEFDX0RFRklORShIQVZFX1JBTkRfRUdELCAxLAorICAgICAgICAgICAgIFtEZWZpbmUgaWYgdGhlIGxpYmNyeXB0byBoYXMgUkFORF9lZ2RdKSkKIAogIyBvbmx5IGNoZWNrIGZvciBzZW1faW5pdCBpZiB0aHJlYWQgc3VwcG9ydCBpcyByZXF1ZXN0ZWQKIGlmIHRlc3QgIiR3aXRoX3RocmVhZHMiID0gInllcyIgLW8gLXogIiR3aXRoX3RocmVhZHMiOyB0aGVuCkBAIC0yMjEyLDYgKzIyNzksNTkgQEAKIAkqKSA7OwogZXNhYwogCisjIGNoZWNrIGZvciBzeXN0ZW1zIHRoYXQgcmVxdWlyZSBhbGlnbmVkIG1lbW9yeSBhY2Nlc3MKK0FDX01TR19DSEVDS0lORyhhbGlnbmVkIG1lbW9yeSBhY2Nlc3MgaXMgcmVxdWlyZWQpCitBQ19UUllfUlVOKFsKK2ludCBtYWluKCkKK3sKKyAgICBjaGFyIHNbMTZdOworICAgIGludCBpLCAqcDEsICpwMjsKKyAgICBmb3IgKGk9MDsgaSA8IDE2OyBpKyspCisgICAgICAgIHNbaV0gPSBpOworICAgIHAxID0gKGludCopKHMrMSk7CisgICAgcDIgPSAoaW50KikocysyKTsKKyAgICBpZiAoKnAxID09ICpwMikKKyAgICAgICAgcmV0dXJuIDE7CisgICAgcmV0dXJuIDA7Cit9CisgICAgICAgICAgICAgIF0sCisgICAgIFthbGlnbmVkX3JlcXVpcmVkPW5vXSwKKyAgICAgW2FsaWduZWRfcmVxdWlyZWQ9eWVzXSwKKyAgICAgW2FsaWduZWRfcmVxdWlyZWQ9eWVzXSkKKworaWYgdGVzdCAiJGFsaWduZWRfcmVxdWlyZWQiID0geWVzIDsgdGhlbgorICBBQ19ERUZJTkUoW0hBVkVfQUxJR05FRF9SRVFVSVJFRF0sIFsxXSwKKyAgICBbRGVmaW5lIGlmIGFsaWduZWQgbWVtb3J5IGFjY2VzcyBpcyByZXF1aXJlZF0pCitmaQorQUNfTVNHX1JFU1VMVCgkYWxpZ25lZF9yZXF1aXJlZCkKKworCisjIHN0ciwgYnl0ZXMgYW5kIG1lbW9yeXZpZXcgaGFzaCBhbGdvcml0aG0KK0FIX1RFTVBMQVRFKFB5X0hBU0hfQUxHT1JJVEhNLAorICBbRGVmaW5lIGhhc2ggYWxnb3JpdGhtIGZvciBzdHIsIGJ5dGVzIGFuZCBtZW1vcnl2aWV3LgorICAgU2lwSGFzaDI0OiAxLCBGTlY6IDIsIGV4dGVybmFsbHkgZGVmaW5lZDogMF0pCisKK0FDX01TR19DSEVDS0lORyhmb3IgLS13aXRoLWhhc2gtYWxnb3JpdGhtKQorZG5sIHF1YWRyaWdyYXBocyAiQDw6QCIgYW5kICJAOj5AIiBwcm9kdWNlICJbIiBhbmQgIl0iIGluIHRoZSBvdXRwdXQKK0FDX0FSR19XSVRIKGhhc2hfYWxnb3JpdGhtLAorICAgICAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1oYXNoLWFsZ29yaXRobT1APDpAZm52fHNpcGhhc2gyNEA6PkBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdCBoYXNoIGFsZ29yaXRobV0pLAorWworQUNfTVNHX1JFU1VMVCgkd2l0aHZhbCkKK2Nhc2UgIiR3aXRodmFsIiBpbgorICAgIHNpcGhhc2gyNCkKKyAgICAgICAgQUNfREVGSU5FKFB5X0hBU0hfQUxHT1JJVEhNLCAxKQorICAgICAgICA7OworICAgIGZudikKKyAgICAgICAgQUNfREVGSU5FKFB5X0hBU0hfQUxHT1JJVEhNLCAyKQorICAgICAgICA7OworICAgICopCisgICAgICAgIEFDX01TR19FUlJPUihbdW5rbm93biBoYXNoIGFsZ29yaXRobSAnJHdpdGh2YWwnXSkKKyAgICAgICAgOzsKK2VzYWMKK10sCitbQUNfTVNHX1JFU1VMVChkZWZhdWx0KV0pCisKICMgTW9zdCBTVlI0IHBsYXRmb3JtcyAoZS5nLiBTb2xhcmlzKSBuZWVkIC1sc29ja2V0IGFuZCAtbG5zbC4KIEFDX0NIRUNLX0xJQihuc2wsIHRfb3BlbiwgW0xJQlM9Ii1sbnNsICRMSUJTIl0pICMgU1ZSNAogQUNfQ0hFQ0tfTElCKHNvY2tldCwgc29ja2V0LCBbTElCUz0iLWxzb2NrZXQgJExJQlMiXSwgW10sICRMSUJTKSAjIFNWUjQgc29ja2V0cwpAQCAtMjIyNSw3ICsyMzQ1LDcgQEAKIF0sCiBbQUNfTVNHX1JFU1VMVChubyldKQogCi1BQ19QQVRIX1RPT0woW1BLR19DT05GSUddLCBbcGtnLWNvbmZpZ10pCitQS0dfUFJPR19QS0dfQ09ORklHCiAKICMgQ2hlY2sgZm9yIHVzZSBvZiB0aGUgc3lzdGVtIGV4cGF0IGxpYnJhcnkKIEFDX01TR19DSEVDS0lORyhmb3IgLS13aXRoLXN5c3RlbS1leHBhdCkKQEAgLTI4MjMsOSArMjk0Myw5IEBACiAKICMgY2hlY2tzIGZvciBsaWJyYXJ5IGZ1bmN0aW9ucwogQUNfQ0hFQ0tfRlVOQ1MoYWxhcm0gYWNjZXB0NCBzZXRpdGltZXIgZ2V0aXRpbWVyIGJpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0IGNob3duIFwKLSBjbG9jayBjb25mc3RyIGN0ZXJtaWQgZXhlY3YgZmFjY2Vzc2F0IGZjaG1vZCBmY2htb2RhdCBmY2hvd24gZmNob3duYXQgXAorIGNsb2NrIGNvbmZzdHIgY3Rlcm1pZCBkdXAzIGV4ZWN2IGZhY2Nlc3NhdCBmY2htb2QgZmNobW9kYXQgZmNob3duIGZjaG93bmF0IFwKICBmZXhlY3ZlIGZkb3BlbmRpciBmb3JrIGZwYXRoY29uZiBmc3RhdGF0IGZ0aW1lIGZ0cnVuY2F0ZSBmdXRpbWVzYXQgXAotIGZ1dGltZW5zIGZ1dGltZXMgZ2FpX3N0cmVycm9yIFwKKyBmdXRpbWVucyBmdXRpbWVzIGdhaV9zdHJlcnJvciBnZXRlbnRyb3B5IFwKICBnZXRncm91cGxpc3QgZ2V0Z3JvdXBzIGdldGxvZ2luIGdldGxvYWRhdmcgZ2V0cGVlcm5hbWUgZ2V0cGdpZCBnZXRwaWQgXAogIGdldHByaW9yaXR5IGdldHJlc3VpZCBnZXRyZXNnaWQgZ2V0cHdlbnQgZ2V0c3BuYW0gZ2V0c3BlbnQgZ2V0c2lkIGdldHdkIFwKICBpZl9uYW1laW5kZXggXApAQCAtMjg0Myw3ICsyOTYzLDcgQEAKICBzaWd0aW1lZHdhaXQgc2lnd2FpdCBzaWd3YWl0aW5mbyBzbnByaW50ZiBzdHJmdGltZSBzdHJsY3B5IHN5bWxpbmthdCBzeW5jIFwKICBzeXNjb25mIHRjZ2V0cGdycCB0Y3NldHBncnAgdGVtcG5hbSB0aW1lZ20gdGltZXMgdG1wZmlsZSB0bXBuYW0gdG1wbmFtX3IgXAogIHRydW5jYXRlIHVuYW1lIHVubGlua2F0IHVuc2V0ZW52IHV0aW1lbnNhdCB1dGltZXMgd2FpdGlkIHdhaXRwaWQgd2FpdDMgd2FpdDQgXAotIHdjc2NvbGwgd2NzZnRpbWUgd2NzeGZybSB3cml0ZXYgX2dldHB0eSkKKyB3Y3Njb2xsIHdjc2Z0aW1lIHdjc3hmcm0gd21lbWNtcCB3cml0ZXYgX2dldHB0eSkKIAogQUNfQ0hFQ0tfREVDTChkaXJmZCwKICAgICBBQ19ERUZJTkUoSEFWRV9ESVJGRCwgMSwKQEAgLTI5MTAsNiArMzAzMCwxNiBAQAogICAgQUNfTVNHX1JFU1VMVCh5ZXMpXSwKICAgW0FDX01TR19SRVNVTFQobm8pCiBdKQorQUNfTVNHX0NIRUNLSU5HKGZvciBwcmxpbWl0KQorQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWworI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8c3lzL3Jlc291cmNlLmg+CisgICAgXV0sIFtbdm9pZCAqeD1wcmxpbWl0XV0pXSwKKyAgW0FDX0RFRklORShIQVZFX1BSTElNSVQsIDEsIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ3BybGltaXQnIGZ1bmN0aW9ucy4pCisgICBBQ19NU0dfUkVTVUxUKHllcyldLAorICBbQUNfTVNHX1JFU1VMVChubykKK10pCisKICMgT24gc29tZSBzeXN0ZW1zIChlZy4gRnJlZUJTRCA1KSwgd2Ugd291bGQgZmluZCBhIGRlZmluaXRpb24gb2YgdGhlCiAjIGZ1bmN0aW9ucyBjdGVybWlkX3IsIHNldGdyb3VwcyBpbiB0aGUgbGlicmFyeSwgYnV0IG5vIHByb3RvdHlwZQogIyAoZS5nLiBiZWNhdXNlIHdlIHVzZSBfWE9QRU5fU09VUkNFKS4gU2VlIHdoZXRoZXIgd2UgY2FuIHRha2UgdGhlaXIKQEAgLTMxMTAsNyArMzI0MCw3IEBACiAjIGNoZWNrIGZvciBsb25nIGZpbGUgc3VwcG9ydCBmdW5jdGlvbnMKIEFDX0NIRUNLX0ZVTkNTKGZzZWVrNjQgZnNlZWtvIGZzdGF0dmZzIGZ0ZWxsNjQgZnRlbGxvIHN0YXR2ZnMpCiAKLUFDX1JFUExBQ0VfRlVOQ1MoZHVwMiBnZXRjd2Qgc3RyZHVwKQorQUNfUkVQTEFDRV9GVU5DUyhkdXAyIHN0cmR1cCkKIEFDX0NIRUNLX0ZVTkNTKGdldHBncnAsIAogICBBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbI2luY2x1ZGUgPHVuaXN0ZC5oPl1dLCBbW2dldHBncnAoMCk7XV0pXSwKICAgICBbQUNfREVGSU5FKEdFVFBHUlBfSEFWRV9BUkcsIDEsIFtEZWZpbmUgaWYgZ2V0cGdycCgpIG11c3QgYmUgY2FsbGVkIGFzIGdldHBncnAoMCkuXSldLApAQCAtMzk4Myw2ICs0MTEzLDExIEBACiBMRFZFUlNJT049JyQoVkVSU0lPTikkKEFCSUZMQUdTKScKIEFDX01TR19SRVNVTFQoJExEVkVSU0lPTikKIAorZG5sIGRlZmluZSBMSUJQTCBhZnRlciBBQklGTEFHUyBhbmQgTERWRVJTSU9OIGlzIGRlZmluZWQuCitBQ19TVUJTVChQWV9FTkFCTEVfU0hBUkVEKQorTElCUEw9JyQocHJlZml4KSciL2xpYi9weXRob24ke1ZFUlNJT059L2NvbmZpZy0ke0xEVkVSU0lPTn0iCitBQ19TVUJTVChMSUJQTCkKKwogIyBDaGVjayB3aGV0aGVyIHJpZ2h0IHNoaWZ0aW5nIGEgbmVnYXRpdmUgaW50ZWdlciBleHRlbmRzIHRoZSBzaWduIGJpdAogIyBvciBmaWxscyB3aXRoIHplcm9zIChsaWtlIHRoZSBDcmF5IEo5MCwgYWNjb3JkaW5nIHRvIFRpbSBQZXRlcnMpLgogQUNfTVNHX0NIRUNLSU5HKHdoZXRoZXIgcmlnaHQgc2hpZnQgZXh0ZW5kcyB0aGUgc2lnbiBiaXQpCkBAIC00MjcyLDggKzQ0MDcsMTkgQEAKICAgW0RlZmluZSBpZiB5b3UgaGF2ZSBzdHJ1Y3Qgc3RhdC5zdF9tdGltZW5zZWNdKQogZmkKIAorIyBmaXJzdCBjdXJzZXMgaGVhZGVyIGNoZWNrCiBhY19zYXZlX2NwcGZsYWdzPSIkQ1BQRkxBR1MiCiBDUFBGTEFHUz0iJENQUEZMQUdTIC1JL3Vzci9pbmNsdWRlL25jdXJzZXN3IgorCitBQ19DSEVDS19IRUFERVJTKGN1cnNlcy5oIG5jdXJzZXMuaCkKKworIyBPbiBTb2xhcmlzLCB0ZXJtLmggcmVxdWlyZXMgY3Vyc2VzLmgKK0FDX0NIRUNLX0hFQURFUlModGVybS5oLCwsWworI2lmZGVmIEhBVkVfQ1VSU0VTX0gKKyNpbmNsdWRlIDxjdXJzZXMuaD4KKyNlbmRpZgorXSkKKwogIyBPbiBIUC9VWCAxMS4wLCBtdndkZWxjaCBpcyBhIGJsb2NrIHdpdGggYSByZXR1cm4gc3RhdGVtZW50CiBBQ19NU0dfQ0hFQ0tJTkcod2hldGhlciBtdndkZWxjaCBpcyBhbiBleHByZXNzaW9uKQogQUNfQ0FDSEVfVkFMKGFjX2N2X212d2RlbGNoX2lzX2V4cHJlc3Npb24sCkBAIC00NjYxLDggKzQ4MDcsMjMgQEAKICAgICBlc2FjCiBmaQogCisjIGVuc3VyZXBpcCBvcHRpb24KK0FDX01TR19DSEVDS0lORyhmb3IgZW5zdXJlcGlwKQorQUNfQVJHX1dJVEgoZW5zdXJlcGlwLAorICAgIFtBU19IRUxQX1NUUklORyhbLS13aXRoKG91dCktZW5zdXJlcGlwPUA8OkA9dXBncmFkZUA6PkBdLAorICAgICAgICBbImluc3RhbGwiIG9yICJ1cGdyYWRlIiB1c2luZyBidW5kbGVkIHBpcF0pXSwKKyAgICBbXSwKKyAgICBbd2l0aF9lbnN1cmVwaXA9dXBncmFkZV0pCitBU19DQVNFKCR3aXRoX2Vuc3VyZXBpcCwKKyAgICBbeWVzfHVwZ3JhZGVdLFtFTlNVUkVQSVA9dXBncmFkZV0sCisgICAgW2luc3RhbGxdLFtFTlNVUkVQSVA9aW5zdGFsbF0sCisgICAgW25vXSxbRU5TVVJFUElQPW5vXSwKKyAgICBbQUNfTVNHX0VSUk9SKFstLXdpdGgtZW5zdXJlcGlwPXVwZ3JhZGV8aW5zdGFsbHxub10pXSkKK0FDX01TR19SRVNVTFQoJEVOU1VSRVBJUCkKK0FDX1NVQlNUKEVOU1VSRVBJUCkKKwogIyBnZW5lcmF0ZSBvdXRwdXQgZmlsZXMKLUFDX0NPTkZJR19GSUxFUyhNYWtlZmlsZS5wcmUgTW9kdWxlcy9TZXR1cC5jb25maWcgTWlzYy9weXRob24ucGMpCitBQ19DT05GSUdfRklMRVMoTWFrZWZpbGUucHJlIE1vZHVsZXMvU2V0dXAuY29uZmlnIE1pc2MvcHl0aG9uLnBjIE1pc2MvcHl0aG9uLWNvbmZpZy5zaCkKIEFDX0NPTkZJR19GSUxFUyhbTW9kdWxlcy9sZF9zb19haXhdLCBbY2htb2QgK3ggTW9kdWxlcy9sZF9zb19haXhdKQogQUNfT1VUUFVUCiAKZGlmZiAtLWdpdCBhL3B5Y29uZmlnLmguaW4gYi9weWNvbmZpZy5oLmluCmluZGV4IDAwMjAzMDAuLjg1NDkwYzggMTAwNjQ0Ci0tLSBhL3B5Y29uZmlnLmguaW4KKysrIGIvcHljb25maWcuaC5pbgpAQCAtNDksNiArNDksOSBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBhbGFybScgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9BTEFSTQogCisvKiBEZWZpbmUgaWYgYWxpZ25lZCBtZW1vcnkgYWNjZXNzIGlzIHJlcXVpcmVkICovCisjdW5kZWYgSEFWRV9BTElHTkVEX1JFUVVJUkVECisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8YWxsb2NhLmg+IGhlYWRlciBmaWxlLiAqLwogI3VuZGVmIEhBVkVfQUxMT0NBX0gKIApAQCAtNjQsOSArNjcsNiBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBhdGFuaCcgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9BVEFOSAogCi0vKiBEZWZpbmUgaWYgR0NDIHN1cHBvcnRzIF9fYXR0cmlidXRlX18oKGZvcm1hdChQeUFyZ19QYXJzZVR1cGxlLCAyLCAzKSkpICovCi0jdW5kZWYgSEFWRV9BVFRSSUJVVEVfRk9STUFUX1BBUlNFVFVQTEUKLQogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBiaW5kX3RleHRkb21haW5fY29kZXNldCcgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9CSU5EX1RFWFRET01BSU5fQ09ERVNFVAogCkBAIC0xOTYsOSArMTk2LDE1IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGR1cDInIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfRFVQMgogCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGR1cDMnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfRFVQMworCiAvKiBEZWZpbmVkIHdoZW4gYW55IGR5bmFtaWMgbW9kdWxlIGxvYWRpbmcgaXMgZW5hYmxlZC4gKi8KICN1bmRlZiBIQVZFX0RZTkFNSUNfTE9BRElORwogCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGVuZGlhbi5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX0VORElBTl9ICisKIC8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ2Vwb2xsJyBmdW5jdGlvbnMuICovCiAjdW5kZWYgSEFWRV9FUE9MTAogCkBAIC0zMjAsMTIgKzMyNiwxMiBAQAogLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBnZXRhZGRyaW5mbyBmdW5jdGlvbi4gKi8KICN1bmRlZiBIQVZFX0dFVEFERFJJTkZPCiAKLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0Y3dkJyBmdW5jdGlvbi4gKi8KLSN1bmRlZiBIQVZFX0dFVENXRAotCiAvKiBEZWZpbmUgdGhpcyBpZiB5b3UgaGF2ZSBmbG9ja2ZpbGUoKSwgZ2V0Y191bmxvY2tlZCgpLCBhbmQgZnVubG9ja2ZpbGUoKSAqLwogI3VuZGVmIEhBVkVfR0VUQ19VTkxPQ0tFRAogCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldGVudHJvcHknIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfR0VURU5UUk9QWQorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldGdyb3VwbGlzdCcgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9HRVRHUk9VUExJU1QKIApAQCAtNDExLDYgKzQxNyw5IEBACiAvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlICdoc3RyZXJyb3InIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfSFNUUkVSUk9SCiAKKy8qIERlZmluZSB0aGlzIGlmIHlvdSBoYXZlIGxlNjR0b2goKSAqLworI3VuZGVmIEhBVkVfSFRPTEU2NAorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGh5cG90JyBmdW5jdGlvbi4gKi8KICN1bmRlZiBIQVZFX0hZUE9UCiAKQEAgLTUwNCw2ICs1MTMsOSBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBsaW5rYXQnIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfTElOS0FUCiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bGludXgvY2FuL2JjbS5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX0xJTlVYX0NBTl9CQ01fSAorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGxpbnV4L2Nhbi5oPiBoZWFkZXIgZmlsZS4gKi8KICN1bmRlZiBIQVZFX0xJTlVYX0NBTl9ICiAKQEAgLTYyNyw2ICs2MzksOSBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBwcmVhZCcgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9QUkVBRAogCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlICdwcmxpbWl0JyBmdW5jdGlvbnMuICovCisjdW5kZWYgSEFWRV9QUkxJTUlUCisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8cHJvY2Vzcy5oPiBoZWFkZXIgZmlsZS4gKi8KICN1bmRlZiBIQVZFX1BST0NFU1NfSAogCkBAIC02NjAsNiArNjc1LDkgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcHdyaXRlJyBmdW5jdGlvbi4gKi8KICN1bmRlZiBIQVZFX1BXUklURQogCisvKiBEZWZpbmUgaWYgdGhlIGxpYmNyeXB0byBoYXMgUkFORF9lZ2QgKi8KKyN1bmRlZiBIQVZFX1JBTkRfRUdECisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcmVhZGxpbmsnIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfUkVBRExJTksKIApAQCAtOTI0LDYgKzk0Miw5IEBACiAgICAqLwogI3VuZGVmIEhBVkVfU1lTX0RJUl9ICiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL2VuZGlhbi5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NZU19FTkRJQU5fSAorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9lcG9sbC5oPiBoZWFkZXIgZmlsZS4gKi8KICN1bmRlZiBIQVZFX1NZU19FUE9MTF9ICiAKQEAgLTExMjEsNiArMTE0Miw5IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHdjc3hmcm0nIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfV0NTWEZSTQogCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHdtZW1jbXAnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfV01FTUNNUAorCiAvKiBEZWZpbmUgaWYgdHpzZXQoKSBhY3R1YWxseSBzd2l0Y2hlcyB0aGUgbG9jYWwgdGltZXpvbmUgaW4gYSBtZWFuaW5nZnVsIHdheS4KICAgICovCiAjdW5kZWYgSEFWRV9XT1JLSU5HX1RaU0VUCkBAIC0xMTg3LDYgKzEyMTEsMTAgQEAKIC8qIERlZmluZWQgaWYgUHl0aG9uIGlzIGJ1aWx0IGFzIGEgc2hhcmVkIGxpYnJhcnkuICovCiAjdW5kZWYgUHlfRU5BQkxFX1NIQVJFRAogCisvKiBEZWZpbmUgaGFzaCBhbGdvcml0aG0gZm9yIHN0ciwgYnl0ZXMgYW5kIG1lbW9yeXZpZXcuIFNpcEhhc2gyNDogMSwgRk5WOiAyLAorICAgZXh0ZXJuYWxseSBkZWZpbmVkOiAwICovCisjdW5kZWYgUHlfSEFTSF9BTEdPUklUSE0KKwogLyogYXNzdW1lIEM4OSBzZW1hbnRpY3MgdGhhdCBSRVRTSUdUWVBFIGlzIGFsd2F5cyB2b2lkICovCiAjdW5kZWYgUkVUU0lHVFlQRQogCkBAIC0xMzYwLDYgKzEzODgsOSBAQAogLyogRGVmaW5lIG9uIExpbnV4IHRvIGFjdGl2YXRlIGFsbCBsaWJyYXJ5IGZlYXR1cmVzICovCiAjdW5kZWYgX0dOVV9TT1VSQ0UKIAorLyogRGVmaW5lIHRvIGluY2x1ZGUgbWJzdGF0ZV90IGZvciBtYnJ0b3djICovCisjdW5kZWYgX0lOQ0xVREVfX1NURENfQTFfU09VUkNFCisKIC8qIFRoaXMgbXVzdCBiZSBkZWZpbmVkIG9uIHNvbWUgc3lzdGVtcyB0byBlbmFibGUgbGFyZ2UgZmlsZSBzdXBwb3J0LiAqLwogI3VuZGVmIF9MQVJHRUZJTEVfU09VUkNFCiAKZGlmZiAtLWdpdCBhL3NldHVwLnB5IGIvc2V0dXAucHkKaW5kZXggZDU5NGUwMi4uMjc3OTY1OCAxMDA2NDQKLS0tIGEvc2V0dXAucHkKKysrIGIvc2V0dXAucHkKQEAgLTEsOCArMSwxMCBAQAogIyBBdXRvZGV0ZWN0aW5nIHNldHVwLnB5IHNjcmlwdCBmb3IgYnVpbGRpbmcgdGhlIFB5dGhvbiBleHRlbnNpb25zCiAjCiAKLWltcG9ydCBzeXMsIG9zLCBpbXAsIHJlLCBvcHRwYXJzZQoraW1wb3J0IHN5cywgb3MsIGltcG9ydGxpYi5tYWNoaW5lcnksIHJlLCBvcHRwYXJzZQogZnJvbSBnbG9iIGltcG9ydCBnbG9iCitpbXBvcnQgaW1wb3J0bGliLl9ib290c3RyYXAKK2ltcG9ydCBpbXBvcnRsaWIudXRpbAogaW1wb3J0IHN5c2NvbmZpZwogCiBmcm9tIGRpc3R1dGlscyBpbXBvcnQgbG9nCkBAIC0xNyw2ICsxOSwxMiBAQAogCiBjcm9zc19jb21waWxpbmcgPSAiX1BZVEhPTl9IT1NUX1BMQVRGT1JNIiBpbiBvcy5lbnZpcm9uCiAKKyMgQWRkIHNwZWNpYWwgQ0ZMQUdTIHJlc2VydmVkIGZvciBidWlsZGluZyB0aGUgaW50ZXJwcmV0ZXIgYW5kIHRoZSBzdGRsaWIKKyMgbW9kdWxlcyAoSXNzdWUgIzIxMTIxKS4KK2NmbGFncyA9IHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignQ0ZMQUdTJykKK3B5X2NmbGFnc19ub2Rpc3QgPSBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ1BZX0NGTEFHU19OT0RJU1QnKQorc3lzY29uZmlnLmdldF9jb25maWdfdmFycygpWydDRkxBR1MnXSA9IGNmbGFncyArICcgJyArIHB5X2NmbGFnc19ub2Rpc3QKKwogZGVmIGdldF9wbGF0Zm9ybSgpOgogICAgICMgY3Jvc3MgYnVpbGQKICAgICBpZiAiX1BZVEhPTl9IT1NUX1BMQVRGT1JNIiBpbiBvcy5lbnZpcm9uOgpAQCAtMjQ0LDcgKzI1Miw3IEBACiAKICAgICAgICAgYnVpbGRfZXh0LmJ1aWxkX2V4dGVuc2lvbnMoc2VsZikKIAotICAgICAgICBsb25nZXN0ID0gbWF4KFtsZW4oZS5uYW1lKSBmb3IgZSBpbiBzZWxmLmV4dGVuc2lvbnNdKQorICAgICAgICBsb25nZXN0ID0gbWF4KFtsZW4oZS5uYW1lKSBmb3IgZSBpbiBzZWxmLmV4dGVuc2lvbnNdLCBkZWZhdWx0PTApCiAgICAgICAgIGlmIHNlbGYuZmFpbGVkOgogICAgICAgICAgICAgbG9uZ2VzdCA9IG1heChsb25nZXN0LCBtYXgoW2xlbihuYW1lKSBmb3IgbmFtZSBpbiBzZWxmLmZhaWxlZF0pKQogCkBAIC0yNTksOCArMjY3LDkgQEAKIAogICAgICAgICBpZiBtaXNzaW5nOgogICAgICAgICAgICAgcHJpbnQoKQotICAgICAgICAgICAgcHJpbnQoIlB5dGhvbiBidWlsZCBmaW5pc2hlZCwgYnV0IHRoZSBuZWNlc3NhcnkgYml0cyB0byBidWlsZCAiCi0gICAgICAgICAgICAgICAgICAgInRoZXNlIG1vZHVsZXMgd2VyZSBub3QgZm91bmQ6IikKKyAgICAgICAgICAgIHByaW50KCJQeXRob24gYnVpbGQgZmluaXNoZWQgc3VjY2Vzc2Z1bGx5ISIpCisgICAgICAgICAgICBwcmludCgiVGhlIG5lY2Vzc2FyeSBiaXRzIHRvIGJ1aWxkIHRoZXNlIG9wdGlvbmFsIG1vZHVsZXMgd2VyZSBub3QgIgorICAgICAgICAgICAgICAgICAgImZvdW5kOiIpCiAgICAgICAgICAgICBwcmludF90aHJlZV9jb2x1bW4obWlzc2luZykKICAgICAgICAgICAgIHByaW50KCJUbyBmaW5kIHRoZSBuZWNlc3NhcnkgYml0cywgbG9vayBpbiBzZXR1cC5weSBpbiIKICAgICAgICAgICAgICAgICAgICIgZGV0ZWN0X21vZHVsZXMoKSBmb3IgdGhlIG1vZHVsZSdzIG5hbWUuIikKQEAgLTMyNSw4ICszMzQsMTEgQEAKICAgICAgICAgaWYgY3Jvc3NfY29tcGlsaW5nOgogICAgICAgICAgICAgcmV0dXJuCiAKKyAgICAgICAgbG9hZGVyID0gaW1wb3J0bGliLm1hY2hpbmVyeS5FeHRlbnNpb25GaWxlTG9hZGVyKGV4dC5uYW1lLCBleHRfZmlsZW5hbWUpCisgICAgICAgIHNwZWMgPSBpbXBvcnRsaWIudXRpbC5zcGVjX2Zyb21fZmlsZV9sb2NhdGlvbihleHQubmFtZSwgZXh0X2ZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVyPWxvYWRlcikKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgaW1wLmxvYWRfZHluYW1pYyhleHQubmFtZSwgZXh0X2ZpbGVuYW1lKQorICAgICAgICAgICAgaW1wb3J0bGliLl9ib290c3RyYXAuX1NwZWNNZXRob2RzKHNwZWMpLmxvYWQoKQogICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3IgYXMgd2h5OgogICAgICAgICAgICAgc2VsZi5mYWlsZWQuYXBwZW5kKGV4dC5uYW1lKQogICAgICAgICAgICAgc2VsZi5hbm5vdW5jZSgnKioqIFdBUk5JTkc6IHJlbmFtaW5nICIlcyIgc2luY2UgaW1wb3J0aW5nIGl0JwpAQCAtNTg4LDEwICs2MDAsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRzPVsndGVzdGNhcGlfbG9uZy5oJ10pICkKICAgICAgICAgIyBQeXRob24gUEVQLTMxMTggKGJ1ZmZlciBwcm90b2NvbCkgdGVzdCBtb2R1bGUKICAgICAgICAgZXh0cy5hcHBlbmQoIEV4dGVuc2lvbignX3Rlc3RidWZmZXInLCBbJ190ZXN0YnVmZmVyLmMnXSkgKQorICAgICAgICAjIFRlc3QgbG9hZGluZyBtdWx0aXBsZSBtb2R1bGVzIGZyb20gb25lIGNvbXBpbGVkIGZpbGUgKGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxNjQyMSkKKyAgICAgICAgZXh0cy5hcHBlbmQoIEV4dGVuc2lvbignX3Rlc3RpbXBvcnRtdWx0aXBsZScsIFsnX3Rlc3RpbXBvcnRtdWx0aXBsZS5jJ10pICkKICAgICAgICAgIyBwcm9maWxlciAoX2xzcHJvZiBpcyBmb3IgY1Byb2ZpbGUucHkpCiAgICAgICAgIGV4dHMuYXBwZW5kKCBFeHRlbnNpb24oJ19sc3Byb2YnLCBbJ19sc3Byb2YuYycsICdyb3RhdGluZ3RyZWUuYyddKSApCiAgICAgICAgICMgc3RhdGljIFVuaWNvZGUgY2hhcmFjdGVyIGRhdGFiYXNlCiAgICAgICAgIGV4dHMuYXBwZW5kKCBFeHRlbnNpb24oJ3VuaWNvZGVkYXRhJywgWyd1bmljb2RlZGF0YS5jJ10pICkKKyAgICAgICAgIyBfb3Bjb2RlIG1vZHVsZQorICAgICAgICBleHRzLmFwcGVuZCggRXh0ZW5zaW9uKCdfb3Bjb2RlJywgWydfb3Bjb2RlLmMnXSkgKQogCiAgICAgICAgICMgTW9kdWxlcyB3aXRoIHNvbWUgVU5JWCBkZXBlbmRlbmNpZXMgLS0gb24gYnkgZGVmYXVsdDoKICAgICAgICAgIyAoSWYgeW91IGhhdmUgYSByZWFsbHkgYmFja3dhcmQgVU5JWCwgc2VsZWN0IGFuZCBzb2NrZXQgbWF5IG5vdCBiZQpAQCAtNjg3LDcgKzcwMyw5IEBACiAgICAgICAgIGlmIGhvc3RfcGxhdGZvcm0gPT0gJ2Rhcndpbic6CiAgICAgICAgICAgICBvc19yZWxlYXNlID0gaW50KG9zLnVuYW1lKClbMl0uc3BsaXQoJy4nKVswXSkKICAgICAgICAgICAgIGRlcF90YXJnZXQgPSBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCcpCi0gICAgICAgICAgICBpZiBkZXBfdGFyZ2V0IGFuZCBkZXBfdGFyZ2V0LnNwbGl0KCcuJykgPCBbJzEwJywgJzUnXToKKyAgICAgICAgICAgIGlmIChkZXBfdGFyZ2V0IGFuZAorICAgICAgICAgICAgICAgICAgICAodHVwbGUoaW50KG4pIGZvciBuIGluIGRlcF90YXJnZXQuc3BsaXQoJy4nKVswOjJdKQorICAgICAgICAgICAgICAgICAgICAgICAgPCAoMTAsIDUpICkgKToKICAgICAgICAgICAgICAgICBvc19yZWxlYXNlID0gOAogICAgICAgICAgICAgaWYgb3NfcmVsZWFzZSA8IDk6CiAgICAgICAgICAgICAgICAgIyBNYWNPU1ggMTAuNCBoYXMgYSBicm9rZW4gcmVhZGxpbmUuIERvbid0IHRyeSB0byBidWlsZApAQCAtNzg0LDEwICs4MDIsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gaW5jZmlsZToKICAgICAgICAgICAgICAgICAgICAgICAgIG0gPSBvcGVuc3NsX3Zlcl9yZS5tYXRjaChsaW5lKQogICAgICAgICAgICAgICAgICAgICAgICAgaWYgbToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVuc3NsX3ZlciA9IGV2YWwobS5ncm91cCgxKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVuc3NsX3ZlciA9IGludChtLmdyb3VwKDEpLCAxNikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgbXNnOgogICAgICAgICAgICAgICAgIHByaW50KCJJT0Vycm9yIHdoaWxlIHJlYWRpbmcgb3BlbnNzaHYuaDoiLCBtc2cpCi0gICAgICAgICAgICAgICAgcGFzcwogCiAgICAgICAgICNwcmludCgnb3BlbnNzbF92ZXIgPSAweCUwOHgnICUgb3BlbnNzbF92ZXIpCiAgICAgICAgIG1pbl9vcGVuc3NsX3ZlciA9IDB4MDA5MDcwMDAKQEAgLTEwMTIsOCArMTAzMCwxNiBAQAogICAgICAgICAgICAgaWYgZGJfc2V0dXBfZGVidWc6CiAgICAgICAgICAgICAgICAgcHJpbnQoImJzZGRiIHVzaW5nIEJlcmtlbGV5REIgbGliOiIsIGRiX3ZlciwgZGJsaWIpCiAgICAgICAgICAgICAgICAgcHJpbnQoImJzZGRiIGxpYiBkaXI6IiwgZGJsaWJfZGlyLCAiIGluYyBkaXI6IiwgZGJfaW5jZGlyKQotICAgICAgICAgICAgZGJfaW5jcyA9IFtkYl9pbmNkaXJdCiAgICAgICAgICAgICBkYmxpYnMgPSBbZGJsaWJdCisgICAgICAgICAgICAjIE9ubHkgYWRkIHRoZSBmb3VuZCBsaWJyYXJ5IGFuZCBpbmNsdWRlIGRpcmVjdG9yaWVzIGlmIHRoZXkgYXJlbid0CisgICAgICAgICAgICAjIGFscmVhZHkgYmVpbmcgc2VhcmNoZWQuIFRoaXMgYXZvaWRzIGFuIGV4cGxpY2l0IHJ1bnRpbWUgbGlicmFyeQorICAgICAgICAgICAgIyBkZXBlbmRlbmN5LgorICAgICAgICAgICAgaWYgZGJfaW5jZGlyIGluIGluY19kaXJzOgorICAgICAgICAgICAgICAgIGRiX2luY3MgPSBOb25lCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGRiX2luY3MgPSBbZGJfaW5jZGlyXQorICAgICAgICAgICAgaWYgZGJsaWJfZGlyWzBdIGluIGxpYl9kaXJzOgorICAgICAgICAgICAgICAgIGRibGliX2RpciA9IE5vbmUKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGlmIGRiX3NldHVwX2RlYnVnOiBwcmludCgiZGI6IG5vIGFwcHJvcHJpYXRlIGxpYnJhcnkgZm91bmQiKQogICAgICAgICAgICAgZGJfaW5jcyA9IE5vbmUKQEAgLTExMjQsNiArMTE1MCw5IEBACiAgICAgICAgICAgICAjIGNhbiBlbmQgdXAgd2l0aCBhIGJhZCBzZWFyY2ggcGF0aCBvcmRlci4KICAgICAgICAgICAgIGlmIHNxbGl0ZV9pbmNkaXIgbm90IGluIHNlbGYuY29tcGlsZXIuaW5jbHVkZV9kaXJzOgogICAgICAgICAgICAgICAgIGluY2x1ZGVfZGlycy5hcHBlbmQoc3FsaXRlX2luY2RpcikKKyAgICAgICAgICAgICMgYXZvaWQgYSBydW50aW1lIGxpYnJhcnkgcGF0aCBmb3IgYSBzeXN0ZW0gbGlicmFyeSBkaXIKKyAgICAgICAgICAgIGlmIHNxbGl0ZV9saWJkaXIgYW5kIHNxbGl0ZV9saWJkaXJbMF0gaW4gbGliX2RpcnM6CisgICAgICAgICAgICAgICAgc3FsaXRlX2xpYmRpciA9IE5vbmUKICAgICAgICAgICAgIGV4dHMuYXBwZW5kKEV4dGVuc2lvbignX3NxbGl0ZTMnLCBzcWxpdGVfc3JjcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVfbWFjcm9zPXNxbGl0ZV9kZWZpbmVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVfZGlycz1pbmNsdWRlX2RpcnMsCkBAIC0xMTkyLDcgKzEyMjEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJpZXMgPSBnZGJtX2xpYnMpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgICAgICBlbGlmIGNhbmQgPT0gImJkYiI6Ci0gICAgICAgICAgICAgICAgICAgIGlmIGRiX2luY3MgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGlmIGRibGliczoKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGRibV9zZXR1cF9kZWJ1ZzogcHJpbnQoImJ1aWxkaW5nIGRibSB1c2luZyBiZGIiKQogICAgICAgICAgICAgICAgICAgICAgICAgZGJtZXh0ID0gRXh0ZW5zaW9uKCdfZGJtJywgWydfZGJtbW9kdWxlLmMnXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJ5X2RpcnM9ZGJsaWJfZGlyLApAQCAtMTUwOCwxMCArMTUzNyw2IEBACiAKICAgICAgICAgaWYgaG9zdF9wbGF0Zm9ybSA9PSAnZGFyd2luJzoKICAgICAgICAgICAgIGV4dHMuYXBwZW5kKAotICAgICAgICAgICAgICAgICAgICAgICBFeHRlbnNpb24oJ19nZXN0YWx0JywgWydfZ2VzdGFsdC5jJ10sCi0gICAgICAgICAgICAgICAgICAgICAgIGV4dHJhX2xpbmtfYXJncz1bJy1mcmFtZXdvcmsnLCAnQ2FyYm9uJ10pCi0gICAgICAgICAgICAgICAgICAgICAgICkKLSAgICAgICAgICAgIGV4dHMuYXBwZW5kKAogICAgICAgICAgICAgICAgICAgICAgICBFeHRlbnNpb24oJ19zY3Byb3h5JywgWydfc2Nwcm94eS5jJ10sCiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhX2xpbmtfYXJncz1bCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLWZyYW1ld29yaycsICdTeXN0ZW1Db25maWd1cmF0aW9uJywKQEAgLTE1MzIsNyArMTU1Nyw3IEBACiAKICAgICAgICAgaWYgJ2QnIG5vdCBpbiBzeXMuYWJpZmxhZ3M6CiAgICAgICAgICAgICBleHQgPSBFeHRlbnNpb24oJ3h4bGltaXRlZCcsIFsneHhsaW1pdGVkLmMnXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVfbWFjcm9zPVsoJ1B5X0xJTUlURURfQVBJJywgMSldKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZV9tYWNyb3M9WygnUHlfTElNSVRFRF9BUEknLCAnMHgwMzA0MDAwMCcpXSkKICAgICAgICAgICAgIHNlbGYuZXh0ZW5zaW9ucy5hcHBlbmQoZXh0KQogCiAgICAgICAgIHJldHVybiBtaXNzaW5nCkBAIC0yMTU1LDcgKzIxODAsNyBAQAogcHJvZ3JhbW1hYmxlIGludGVyZmFjZS4KIAogVGhlIFB5dGhvbiBpbXBsZW1lbnRhdGlvbiBpcyBwb3J0YWJsZTogaXQgcnVucyBvbiBtYW55IGJyYW5kcyBvZiBVTklYLAotb24gV2luZG93cywgRE9TLCBPUy8yLCBNYWMsIEFtaWdhLi4uIElmIHlvdXIgZmF2b3JpdGUgc3lzdGVtIGlzbid0CitvbiBXaW5kb3dzLCBET1MsIE1hYywgQW1pZ2EuLi4gSWYgeW91ciBmYXZvcml0ZSBzeXN0ZW0gaXNuJ3QKIGxpc3RlZCBoZXJlLCBpdCBtYXkgc3RpbGwgYmUgc3VwcG9ydGVkLCBpZiB0aGVyZSdzIGEgQyBjb21waWxlciBmb3IKIGl0LiBBc2sgYXJvdW5kIG9uIGNvbXAubGFuZy5weXRob24gLS0gb3IganVzdCB0cnkgY29tcGlsaW5nIFB5dGhvbgogeW91cnNlbGYuCg==